diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 4655431d8..000000000 --- a/.gitattributes +++ /dev/null @@ -1,6 +0,0 @@ -* text=auto - -*.js text eol=lf -*.c text eol=lf -*.cpp text eol=lf -*.h text eol=lf diff --git a/.github/workflows/njs_clang_test.yml b/.github/workflows/njs_clang_test.yml deleted file mode 100644 index 7515132c3..000000000 --- a/.github/workflows/njs_clang_test.yml +++ /dev/null @@ -1,28 +0,0 @@ -name: CI_NJS_CLANG - -on: - push: - branches: [ master ] - pull_request: - branches: [ master ] - - -jobs: - - test: - - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v2 - - name: Install - run: | - git submodule update --init --recursive - sudo apt install g++ clang - wget -qO- https://deb.nodesource.com/setup_12.x | sudo -E bash - sudo apt install -y nodejs - npm i - clang++ -v - - name: run - run: | - npm run njs_clang_test diff --git a/.github/workflows/njs_es3.yml b/.github/workflows/njs_es3.yml deleted file mode 100644 index e770a2a37..000000000 --- a/.github/workflows/njs_es3.yml +++ /dev/null @@ -1,33 +0,0 @@ -name: ES3_NJS - -on: - workflow_dispatch: - inputs: - logLevel: - description: 'Log level' - required: true - default: 'warning' - tags: - description: 'Test scenario tags' - - -jobs: - - test: - - runs-on: ubuntu-latest - - # Steps represent a sequence of tasks that will be executed as part of the job - steps: - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v2 - - # Runs a set of commands using the runners shell - - name: Install and run - run: | - sudo apt install g++ - wget -qO- https://deb.nodesource.com/setup_12.x | sudo -E bash - sudo apt install -y nodejs - npm i - npm run es3_test - diff --git a/.github/workflows/njs_test.yml b/.github/workflows/njs_test.yml deleted file mode 100644 index e531e4d59..000000000 --- a/.github/workflows/njs_test.yml +++ /dev/null @@ -1,34 +0,0 @@ -name: CI_NJS - -on: - push: - branches: [ master ] - pull_request: - branches: [ master ] - - -jobs: - - test: - - runs-on: ubuntu-latest - - # Steps represent a sequence of tasks that will be executed as part of the job - steps: - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v2 - - - name: Install - run: | - git submodule update --init --recursive - sudo add-apt-repository ppa:ubuntu-toolchain-r/test - sudo apt-get update - sudo apt install g++-10 - wget -qO- https://deb.nodesource.com/setup_12.x | sudo -E bash - sudo apt install -y nodejs - npm i - g++ -v - - name: run - run: | - npm run njs_test - diff --git a/.gitignore b/.gitignore index 81f914263..2fddc7df3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,134 +1 @@ -# Compilations -.nectar -.vscode -*.exe -*.elf -*.hex -*.wasm -*.asm.js - -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* - -# Diagnostic reports (https://nodejs.org/api/report.html) -report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage -*.lcov - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (https://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules/ -jspm_packages/ - -# Snowpack dependency directory (https://snowpack.dev/) -web_modules/ - -# TypeScript cache -*.tsbuildinfo - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Microbundle cache -.rpt2_cache/ -.rts2_cache_cjs/ -.rts2_cache_es/ -.rts2_cache_umd/ - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - -# dotenv environment variables file -.env -.env.test - -# parcel-bundler cache (https://parceljs.org/) -.cache -.parcel-cache - -# Next.js build output -.next - -# Nuxt.js build / generate output -.nuxt -dist - -# Gatsby files -.cache/ -# Comment in the public line in if your project uses Gatsby and not Next.js -# https://nextjs.org/blog/next-9-1#public-directory-support -# public - -# vuepress build output -.vuepress/dist - -# Serverless directories -.serverless/ - -# Apple -.DS_Store - -# FuseBox cache -.fusebox/ - -# DynamoDB Local files -.dynamodb/ - -# TernJS port file -.tern-port - -# Stores VSCode versions used for testing VSCode extensions -.vscode-test - -# yarn v2 - -.yarn/cache -.yarn/unplugged -.yarn/build-state.yml -.pnp.* - - -# MBEDOS - -extern/stm32/BUILD/ -__pycache__ -stm32_debug_res.txt \ No newline at end of file +.nerd \ No newline at end of file diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index b22d52ebd..000000000 --- a/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "compiler/native/nectarcpp"] - path = compiler/native/nectarcpp - url = https://github.com/nectar-lang/NectarCPP diff --git a/.npmignore b/.npmignore deleted file mode 100644 index 35c32fdc6..000000000 --- a/.npmignore +++ /dev/null @@ -1,5 +0,0 @@ -tests -.nectar -docs -tests -.github \ No newline at end of file diff --git a/CNAME b/CNAME deleted file mode 100644 index 01483f41f..000000000 --- a/CNAME +++ /dev/null @@ -1 +0,0 @@ -nectar.js.org \ No newline at end of file diff --git a/FUNDING.yml b/FUNDING.yml deleted file mode 100644 index 35a6268f8..000000000 --- a/FUNDING.yml +++ /dev/null @@ -1,2 +0,0 @@ -github: nectarjs -open_collective: nectarjs diff --git a/LICENSE b/LICENSE index 25f09638f..030720af6 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ -The MIT License (MIT) +MIT License -Copyright (c) 2016-present Adrien THIERRY and other contributors +Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -18,4 +18,4 @@ 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. \ No newline at end of file +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 000000000..726983e66 --- /dev/null +++ b/README.md @@ -0,0 +1,252 @@ +

+No VM. No Bytecode. No packaging. No Garbage Collector. Fully compiled to native binaries. +

+ +# NectarJS becomes Nerd + +Compile JavaScript and NerdLang in native binaries. + +# What is NerdLang + +NerdLang is a substract of JS with some additions, focus on efficiency. + +**Nerd** is a **JavaScript native compiler** aiming to make JavaScript universal, Nerd is able to compile native apps for Windows, Mac, Linux, iOS, Android, Raspberry, STM32 and more. + +> **Nerd** is in active development, join us on [Discord](https://discord.gg/cpe2UuN) if you need more information. + +- [Roadmap on Trello](https://trello.com/invite/b/6F4rvEj2/ATTI8842296bacc92724fa8b4114fe1dc80aA9FA431B/nerd) + +## Main objectives +* Supporting EcmaScript 3 standard (then 5, 6 ...) +* Supporting NodeJS and NPM ecosystem +* Supporting a maximum of platforms (Windows, Mac, Linux, Android, Arduino, ...) +* Being secure +* Embeding debuging tools +* Compile everything that can be transpiled in JS: Ruby (Opal), Python (Transcript, Brython, JavaScrypthon), TypeScript ... + +# Get started + +## Installation + +### Install GCC/CLang for your platform + +- Windows +Install Mingw and Clang for Windows here: http://winlibs.com/ or Clang here: https://releases.llvm.org/ + +You can also install Linux for Windows and use a linux system on Windows + +You need MinGW with POSIX threads + +- Linux / FreeBSD +Install it with your distro (apt install gcc, yum install gcc, ...). +You can use GCC, CLANG, as well as any derivative of those compilers (arm-gcc ...) + +- Apple iOS +Install xCode and you are ready. + + +You can check your installation with `npm start njs_test` + +## Usage + +Simplest way to use Nerd: +``` +nerd file.js / file.ng +``` + +The output file name will be automatically chosen regarding the target. You can specify another output with `-o something.out` + +You can select a preset +``` +nerd file.js --preset [none|speed|size] +``` + +You can also run the compiled executable just after compilation using --run: +``` +nerd file.js --run +``` + +You can enable the quiet mode with --quiet: +``` +nerd file.js --quiet +``` + +Changing the stack size (useful on Windows): +``` +nerd --stack 10000000 flood.js +``` + +For more informations about compilation output, use `--verbose` + +For help, use `--help` + +# Benchmarks + +* _Need update_ + +Compiled with GCC v10.2.0 on Windows + +| | NodeJS v12.8.1 | QuickJS 2020-07-05 | Nerd v0.6.104 | +|-----------|----------------|--------------------|-------------------| +| sort(1e6) [No preset] | +| - Time: | 0.33s | - | **0.33s** | +| - Memory: | 7.0Mb | - | **1.0Mb** | +|- Filesize:| 28.6Mb | - | **424Kb** | +| sort(1e6) [+Size preset] | +|- Filesize:| 28.6Mb | - | **260Kb** | +| sort(1e6) [+Speed preset] | +| - Time: | 0.33s | - | **0.20s** | +| matrix(256) [No preset] | +| - Time: | 0.33s | - | **0.21s** | +| - Memory: | 7.0Mb | - | **1.0Mb** | +|- Filesize:| 28.6Mb | - | **405Kb** | +| matrix(256) [+Size preset] | +|- Filesize:| 28.6Mb | - | **251Kb** | +| matrix(1e6) [+Speed preset] | +| - Time: | 0.33s | - | **0.11s** | + +* _Some code can be evaluated compile-time_ + +# Supported platforms + +Actively tested for + +- Windows +* - win-x86-32 +* - win-x86-64 +- Linux +* - linux-x86-32 +* - linux-x86-64 +* - linux-arm32v7 +- Arduino +* - arduino-nano +* - arduino-uno +* - arduino-mega1280 +* - arduino-mega2560 +- STM32 Nucleo +* - nucleo-l152re +* - nucleo-l432kc +* - nucleo-f446re +- Mobile +* - android +- Web +* - wasm +* - wast +* - asm-js +- macOS +- Sun OS + +# Development + +This project is in heavy development and a lot features are not implemented yet. + +## ECMAScript Support + +Nerd already supports more than 80% of ES3. + +
+Prototype +
+ +* .call() +* .bind() + +
+ +
+Array +
+ +* .length +* .push(value) + +
+ +
+Class +
+ +* constructor +* methods +* static methods + +
+ +
+Console +
+ +* .log(variadic) + +
+ +
+JSON +
+ +* .parse(str) +* .stringify(obj) + +
+ +
+Math **(DONE)** +
+ +* [All static methods and constants] + +
+ +
+Object +
+ +* .keys + +
+ +
+performance +
+ +* timeOrigin +* .now() + +
+ +
+String +
+ +* .length +* .toString() +* .indexOf(needle) +* .lastIndexOf(needle) +* .search(needle) +* .slice(start, end) +* .substring(start, end) +* .substr(start, end) +* .replace(needle, str) + +
+ +
+Syntax +
+ +* for +* while / do while +* if / else if / else +* try / catch / finally +* function / lambda +* class +* new +* typeof +* instanceof +* undefined +* null +* Infinite +* NaN / isNaN +* true / false + +
\ No newline at end of file diff --git a/_config.yml b/_config.yml deleted file mode 100644 index fff4ab923..000000000 --- a/_config.yml +++ /dev/null @@ -1 +0,0 @@ -theme: jekyll-theme-minimal diff --git a/base/cli/cliParser.js b/base/cli/cliParser.js index af16a9c93..2b752b2b5 100644 --- a/base/cli/cliParser.js +++ b/base/cli/cliParser.js @@ -1,11 +1,38 @@ -module.exports = parseCLI; -function parseCLI(args) +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + + +var parseCLI = function(args) { var result = {error: false, msg: "", cli:{}, stack: [], useless: []}; - var useless = [0, 1]; - var withArgs = ["--tmp", "--target", "--spec", "--env", "--stack", "-o", "--preset", "--flash", "--compiler", "-c", "--build", "-b", "--option", "--register", "-r", "--setauthor", "--setid", "--setkey", "--setapi", "--setport", "--sethash", "--setsdk", "--setndk", "--setwin_inc_ucrt", "--setwin_lib_ucrt", "--setwin_lib_um", "--setxcode", "--profile", "-i", "--install", "--init-module", "--author"]; - var noArgs = ["--install_external", "--debug", "--conserve", "--generate", "--config", "--reinit", "--example", "--examples" , "--prepare", "--project", "--run", "--clean", "--purge", "--check", "--no-check", "--verbose", "-v", "--tips", "--version", "--help", "-h", "--release", "--no-undef-error", "--no-undef-warn", "--no-semi-error", "--no-semi-warn", "--no-fast-function", "--no-object-hashmap"]; - + var useless = [0]; + if(!global["__NERD__"]) + { + useless.push(1); + } + + var withArgs = ["--target", "--spec", "--env", "--stack", "-o", "--preset", "--flash", "--compiler", "-c", "--build", "-b", "--option", "--register", "-r", "--setauthor", "--setid", "--setkey", "--setapi", "--setport", "--sethash", "--setsdk", "--setndk", "--setwin_inc_ucrt", "--setwin_lib_ucrt", "--setwin_lib_um", "--setxcode"]; + var noArgs = ["--install_external", "--debug", "--conserve", "--generate", "--config", "--reinit", "--example", "--examples" , "--prepare", "--project", "--run", "--clean", "--purge", "--check", "--no-check", "--verbose", "-v", "--tips", "--version", "--help", "-h", "--release", "--no-object-hashmap"]; for(var i = 0; i < args.length; i++) { @@ -47,7 +74,11 @@ function parseCLI(args) break; } } - else result.stack.push(args[i]); + else + { + result.stack.push(args[i]); + } } return result; } +module.exports = parseCLI; \ No newline at end of file diff --git a/base/compiler/target.js b/base/compiler/target.js index 9247f89ef..cd6bb5a29 100644 --- a/base/compiler/target.js +++ b/base/compiler/target.js @@ -1,3 +1,26 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + var target = ["win-x86-32", "win-x86-64", "linux-x86-32", "linux-x86-64", "linux-arm32v7", "arduino-uno", "arduino-mega1280", "arduino-mega2560", "wasm", "wast", "asm-js", diff --git a/base/compiler/ts.js b/base/compiler/ts.js deleted file mode 100644 index 1e34f71d3..000000000 --- a/base/compiler/ts.js +++ /dev/null @@ -1,39 +0,0 @@ -var ts = require("typescript"); - -function compileTS(_code, _file) -{ - var _program = ts.createProgram([_file], { noResolve: true, module: ts.ModuleKind.CommonJS, target: ts.ScriptTarget.ES2020 }); - const diagnostics = ts.getPreEmitDiagnostics(_program); - - for (var i = 0; i < diagnostics.length; i++ ) - { - var message = diagnostics[i].messageText; - var file = diagnostics[i].file; - var filename = file.fileName; - var error = diagnostics[i].code - - var lineAndChar = file.getLineAndCharacterOfPosition( - diagnostics[i].start - ); - - var line = lineAndChar.line + 1; - var character = lineAndChar.character + 1; - - console.log(`${_file}:${line}:${character} - error TS${error}: ${message}`); - } - - if(diagnostics.length) - { - console.log(); - if(diagnostics.length == 1) console.log(`Found ${diagnostics.length} error`); - else console.log(`Found ${diagnostics.length} errors`); - console.log(); - process.exit(1); - } - - else _code = ts.transpileModule(_code, { compilerOptions: { noResolve: true, module: ts.ModuleKind.CommonJS, target: ts.ScriptTarget.ES2020 } });; - - return _code.outputText; -} - -module.exports = compileTS; diff --git a/base/squel/package.json b/base/squel/package.json deleted file mode 100644 index 0d4ee8cff..000000000 --- a/base/squel/package.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "name": "{{MODULE_NAME}}", - "description": "NectarJS {{MODULE_NAME}} module", - "main": "index.js", - "bugs": - { - "url": "https://github.com/{{AUTHOR}}/{{MODULE_NAME}}/issues" - }, - - "directories": - { - "root": "." - }, - "homepage": "https://github.com/{{AUTHOR}}/{{MODULE_NAME}}#readme", - "keywords": - [ - "nectarjs", - "js", - "javascript" - ], - "license": "MIT", - "licenses": [ - { - "type": "MIT", - "url": "https://github.com/{{AUTHOR}}/{{MODULE_NAME}}/blob/master/LICENSE" - } - ], - "repository": - { - "type": "git", - "url": "git+ssh://git@github.com/{{AUTHOR}}/{{MODULE_NAME}}.git" - }, - "version": "0.0.1", - "nectar": - { - "comment": - { - - }, - "env": ["std", "android", "ios", "node", "arduino", "wasm", "stm32", "esp32"], - "read_only": [], - "lib": - { - - } - } -} diff --git a/base/util/adm-zip/MIT-LICENSE.txt b/base/util/adm-zip/MIT-LICENSE.txt deleted file mode 100644 index 6fe2ba7e6..000000000 --- a/base/util/adm-zip/MIT-LICENSE.txt +++ /dev/null @@ -1,21 +0,0 @@ -Copyright (c) 2012 Another-D-Mention Software and other contributors, -http://www.another-d-mention.ro/ - -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. diff --git a/base/util/adm-zip/adm-zip.js b/base/util/adm-zip/adm-zip.js deleted file mode 100644 index a55d7947a..000000000 --- a/base/util/adm-zip/adm-zip.js +++ /dev/null @@ -1,536 +0,0 @@ -var Utils = require("./util"); -var fs = Utils.FileSystem.require(), - pth = require("path"); - -fs.existsSync = fs.existsSync || pth.existsSync; - -var ZipEntry = require("./zipEntry"), - ZipFile = require("./zipFile"); - -var isWin = /^win/.test(process.platform); - - -module.exports = function (/*String*/input) { - var _zip = undefined, - _filename = ""; - - if (input && typeof input === "string") { // load zip file - if (fs.existsSync(input)) { - _filename = input; - _zip = new ZipFile(input, Utils.Constants.FILE); - } else { - throw Utils.Errors.INVALID_FILENAME; - } - } else if (input && Buffer.isBuffer(input)) { // load buffer - _zip = new ZipFile(input, Utils.Constants.BUFFER); - } else { // create new zip file - _zip = new ZipFile(null, Utils.Constants.NONE); - } - - function sanitize(prefix, name) { - prefix = pth.resolve(pth.normalize(prefix)); - var parts = name.split('/'); - for (var i = 0, l = parts.length; i < l; i++) { - var path = pth.normalize(pth.join(prefix, parts.slice(i, l).join(pth.sep))); - if (path.indexOf(prefix) === 0) { - return path; - } - } - return pth.normalize(pth.join(prefix, pth.basename(name))); - } - - function getEntry(/*Object*/entry) { - if (entry && _zip) { - var item; - // If entry was given as a file name - if (typeof entry === "string") - item = _zip.getEntry(entry); - // if entry was given as a ZipEntry object - if (typeof entry === "object" && typeof entry.entryName !== "undefined" && typeof entry.header !== "undefined") - item = _zip.getEntry(entry.entryName); - - if (item) { - return item; - } - } - return null; - } - - return { - /** - * Extracts the given entry from the archive and returns the content as a Buffer object - * @param entry ZipEntry object or String with the full path of the entry - * - * @return Buffer or Null in case of error - */ - readFile: function (/*Object*/entry) { - var item = getEntry(entry); - return item && item.getData() || null; - }, - - /** - * Asynchronous readFile - * @param entry ZipEntry object or String with the full path of the entry - * @param callback - * - * @return Buffer or Null in case of error - */ - readFileAsync: function (/*Object*/entry, /*Function*/callback) { - var item = getEntry(entry); - if (item) { - item.getDataAsync(callback); - } else { - callback(null, "getEntry failed for:" + entry) - } - }, - - /** - * Extracts the given entry from the archive and returns the content as plain text in the given encoding - * @param entry ZipEntry object or String with the full path of the entry - * @param encoding Optional. If no encoding is specified utf8 is used - * - * @return String - */ - readAsText: function (/*Object*/entry, /*String - Optional*/encoding) { - var item = getEntry(entry); - if (item) { - var data = item.getData(); - if (data && data.length) { - return data.toString(encoding || "utf8"); - } - } - return ""; - }, - - /** - * Asynchronous readAsText - * @param entry ZipEntry object or String with the full path of the entry - * @param callback - * @param encoding Optional. If no encoding is specified utf8 is used - * - * @return String - */ - readAsTextAsync: function (/*Object*/entry, /*Function*/callback, /*String - Optional*/encoding) { - var item = getEntry(entry); - if (item) { - item.getDataAsync(function (data) { - if (data && data.length) { - callback(data.toString(encoding || "utf8")); - } else { - callback(""); - } - }) - } else { - callback(""); - } - }, - - /** - * Remove the entry from the file or the entry and all it's nested directories and files if the given entry is a directory - * - * @param entry - */ - deleteFile: function (/*Object*/entry) { // @TODO: test deleteFile - var item = getEntry(entry); - if (item) { - _zip.deleteEntry(item.entryName); - } - }, - - /** - * Adds a comment to the zip. The zip must be rewritten after adding the comment. - * - * @param comment - */ - addZipComment: function (/*String*/comment) { // @TODO: test addZipComment - _zip.comment = comment; - }, - - /** - * Returns the zip comment - * - * @return String - */ - getZipComment: function () { - return _zip.comment || ''; - }, - - /** - * Adds a comment to a specified zipEntry. The zip must be rewritten after adding the comment - * The comment cannot exceed 65535 characters in length - * - * @param entry - * @param comment - */ - addZipEntryComment: function (/*Object*/entry, /*String*/comment) { - var item = getEntry(entry); - if (item) { - item.comment = comment; - } - }, - - /** - * Returns the comment of the specified entry - * - * @param entry - * @return String - */ - getZipEntryComment: function (/*Object*/entry) { - var item = getEntry(entry); - if (item) { - return item.comment || ''; - } - return '' - }, - - /** - * Updates the content of an existing entry inside the archive. The zip must be rewritten after updating the content - * - * @param entry - * @param content - */ - updateFile: function (/*Object*/entry, /*Buffer*/content) { - var item = getEntry(entry); - if (item) { - item.setData(content); - } - }, - - /** - * Adds a file from the disk to the archive - * - * @param localPath File to add to zip - * @param zipPath Optional path inside the zip - * @param zipName Optional name for the file - */ - addLocalFile: function (/*String*/localPath, /*String*/zipPath, /*String*/zipName) { - if (fs.existsSync(localPath)) { - if (zipPath) { - zipPath = zipPath.split("\\").join("/"); - if (zipPath.charAt(zipPath.length - 1) !== "/") { - zipPath += "/"; - } - } else { - zipPath = ""; - } - var p = localPath.split("\\").join("/").split("/").pop(); - - if (zipName) { - this.addFile(zipPath + zipName, fs.readFileSync(localPath), "", 0) - } else { - this.addFile(zipPath + p, fs.readFileSync(localPath), "", 0) - } - } else { - throw Utils.Errors.FILE_NOT_FOUND.replace("%s", localPath); - } - }, - - /** - * Adds a local directory and all its nested files and directories to the archive - * - * @param localPath - * @param zipPath optional path inside zip - * @param filter optional RegExp or Function if files match will - * be included. - */ - addLocalFolder: function (/*String*/localPath, /*String*/zipPath, /*RegExp|Function*/filter) { - if (filter === undefined) { - filter = function () { - return true; - }; - } else if (filter instanceof RegExp) { - filter = function (filter) { - return function (filename) { - return filter.test(filename); - } - }(filter); - } - - if (zipPath) { - zipPath = zipPath.split("\\").join("/"); - if (zipPath.charAt(zipPath.length - 1) !== "/") { - zipPath += "/"; - } - } else { - zipPath = ""; - } - // normalize the path first - localPath = pth.normalize(localPath); - localPath = localPath.split("\\").join("/"); //windows fix - if (localPath.charAt(localPath.length - 1) !== "/") - localPath += "/"; - - if (fs.existsSync(localPath)) { - - var items = Utils.findFiles(localPath), - self = this; - - if (items.length) { - items.forEach(function (path) { - var p = path.split("\\").join("/").replace(new RegExp(localPath.replace(/(\(|\))/g, '\\$1'), 'i'), ""); //windows fix - if (filter(p)) { - if (p.charAt(p.length - 1) !== "/") { - self.addFile(zipPath + p, fs.readFileSync(path), "", 0) - } else { - self.addFile(zipPath + p, Buffer.alloc(0), "", 0) - } - } - }); - } - } else { - throw Utils.Errors.FILE_NOT_FOUND.replace("%s", localPath); - } - }, - - /** - * Allows you to create a entry (file or directory) in the zip file. - * If you want to create a directory the entryName must end in / and a null buffer should be provided. - * Comment and attributes are optional - * - * @param entryName - * @param content - * @param comment - * @param attr - */ - addFile: function (/*String*/entryName, /*Buffer*/content, /*String*/comment, /*Number*/attr) { - var entry = new ZipEntry(); - entry.entryName = entryName; - entry.comment = comment || ""; - - if (!attr) { - if (entry.isDirectory) { - attr = (0o40755 << 16) | 0x10; // (permissions drwxr-xr-x) + (MS-DOS directory flag) - } else { - attr = 0o644 << 16; // permissions -r-wr--r-- - } - } - - entry.attr = attr; - - entry.setData(content); - _zip.setEntry(entry); - }, - - /** - * Returns an array of ZipEntry objects representing the files and folders inside the archive - * - * @return Array - */ - getEntries: function () { - if (_zip) { - return _zip.entries; - } else { - return []; - } - }, - - /** - * Returns a ZipEntry object representing the file or folder specified by ``name``. - * - * @param name - * @return ZipEntry - */ - getEntry: function (/*String*/name) { - return getEntry(name); - }, - - /** - * Extracts the given entry to the given targetPath - * If the entry is a directory inside the archive, the entire directory and it's subdirectories will be extracted - * - * @param entry ZipEntry object or String with the full path of the entry - * @param targetPath Target folder where to write the file - * @param maintainEntryPath If maintainEntryPath is true and the entry is inside a folder, the entry folder - * will be created in targetPath as well. Default is TRUE - * @param overwrite If the file already exists at the target path, the file will be overwriten if this is true. - * Default is FALSE - * - * @return Boolean - */ - extractEntryTo: function (/*Object*/entry, /*String*/targetPath, /*Boolean*/maintainEntryPath, /*Boolean*/overwrite) { - overwrite = overwrite || false; - maintainEntryPath = typeof maintainEntryPath === "undefined" ? true : maintainEntryPath; - - var item = getEntry(entry); - if (!item) { - throw Utils.Errors.NO_ENTRY; - } - - var entryName = item.entryName; - - var target = sanitize(targetPath, pth.resolve(targetPath, maintainEntryPath ? entryName : pth.basename(entryName))); - - if (item.isDirectory) { - target = pth.resolve(target, ".."); - var children = _zip.getEntryChildren(item); - children.forEach(function (child) { - if (child.isDirectory) return; - var content = child.getData(); - if (!content) { - throw Utils.Errors.CANT_EXTRACT_FILE; - } - var childName = sanitize(targetPath, child.entryName); - - Utils.writeFileTo(pth.resolve(targetPath, maintainEntryPath ? childName : childName.substr(entryName.length)), content, overwrite); - }); - return true; - } - - var content = item.getData(); - if (!content) throw Utils.Errors.CANT_EXTRACT_FILE; - - if (fs.existsSync(target) && !overwrite) { - throw Utils.Errors.CANT_OVERRIDE; - } - Utils.writeFileTo(target, content, overwrite); - - return true; - }, - - /** - * Test the archive - * - */ - test: function () { - if (!_zip) { - return false; - } - - for (var entry in _zip.entries) { - try { - if (entry.isDirectory) { - continue; - } - var content = _zip.entries[entry].getData(); - if (!content) { - return false; - } - } catch (err) { - return false; - } - } - return true; - }, - - /** - * Extracts the entire archive to the given location - * - * @param targetPath Target location - * @param overwrite If the file already exists at the target path, the file will be overwriten if this is true. - * Default is FALSE - */ - extractAllTo: function (/*String*/targetPath, /*Boolean*/overwrite) { - overwrite = overwrite || false; - if (!_zip) { - throw Utils.Errors.NO_ZIP; - } - _zip.entries.forEach(function (entry) { - var entryName = sanitize(targetPath, entry.entryName.toString()); - if (entry.isDirectory) { - Utils.makeDir(entryName); - return; - } - var content = entry.getData(); - if (!content) { - throw Utils.Errors.CANT_EXTRACT_FILE; - } - Utils.writeFileTo(entryName, content, overwrite); - fs.utimesSync(entryName, entry.header.time, entry.header.time) - }) - }, - - /** - * Asynchronous extractAllTo - * - * @param targetPath Target location - * @param overwrite If the file already exists at the target path, the file will be overwriten if this is true. - * Default is FALSE - * @param callback - */ - extractAllToAsync: function (/*String*/targetPath, /*Boolean*/overwrite, /*Function*/callback) { - if (!callback) { - callback = function() {} - } - overwrite = overwrite || false; - if (!_zip) { - callback(new Error(Utils.Errors.NO_ZIP)); - return; - } - - var entries = _zip.entries; - var i = entries.length; - entries.forEach(function (entry) { - if (i <= 0) return; // Had an error already - - var entryName = pth.normalize(entry.entryName.toString()); - - if (entry.isDirectory) { - Utils.makeDir(sanitize(targetPath, entryName)); - if (--i === 0) - callback(undefined); - return; - } - entry.getDataAsync(function (content) { - if (i <= 0) return; - if (!content) { - i = 0; - callback(new Error(Utils.Errors.CANT_EXTRACT_FILE)); - return; - } - - Utils.writeFileToAsync(sanitize(targetPath, entryName), content, overwrite, function (succ) { - fs.utimesSync(pth.resolve(targetPath, entryName), entry.header.time, entry.header.time); - if (i <= 0) return; - if (!succ) { - i = 0; - callback(new Error('Unable to write')); - return; - } - if (--i === 0) - callback(undefined); - }); - }); - }) - }, - - /** - * Writes the newly created zip file to disk at the specified location or if a zip was opened and no ``targetFileName`` is provided, it will overwrite the opened zip - * - * @param targetFileName - * @param callback - */ - writeZip: function (/*String*/targetFileName, /*Function*/callback) { - if (arguments.length === 1) { - if (typeof targetFileName === "function") { - callback = targetFileName; - targetFileName = ""; - } - } - - if (!targetFileName && _filename) { - targetFileName = _filename; - } - if (!targetFileName) return; - - var zipData = _zip.compressToBuffer(); - if (zipData) { - var ok = Utils.writeFileTo(targetFileName, zipData, true); - if (typeof callback === 'function') callback(!ok ? new Error("failed") : null, ""); - } - }, - - /** - * Returns the content of the entire zip file as a Buffer object - * - * @return Buffer - */ - toBuffer: function (/*Function*/onSuccess, /*Function*/onFail, /*Function*/onItemStart, /*Function*/onItemEnd) { - this.valueOf = 2; - if (typeof onSuccess === "function") { - _zip.toAsyncBuffer(onSuccess, onFail, onItemStart, onItemEnd); - return null; - } - return _zip.compressToBuffer() - } - } -}; diff --git a/base/util/adm-zip/headers/entryHeader.js b/base/util/adm-zip/headers/entryHeader.js deleted file mode 100644 index 476ba222f..000000000 --- a/base/util/adm-zip/headers/entryHeader.js +++ /dev/null @@ -1,261 +0,0 @@ -var Utils = require("../util"), - Constants = Utils.Constants; - -/* The central directory file header */ -module.exports = function () { - var _verMade = 0x0A, - _version = 0x0A, - _flags = 0, - _method = 0, - _time = 0, - _crc = 0, - _compressedSize = 0, - _size = 0, - _fnameLen = 0, - _extraLen = 0, - - _comLen = 0, - _diskStart = 0, - _inattr = 0, - _attr = 0, - _offset = 0; - - var _dataHeader = {}; - - function setTime(val) { - val = new Date(val); - _time = (val.getFullYear() - 1980 & 0x7f) << 25 // b09-16 years from 1980 - | (val.getMonth() + 1) << 21 // b05-08 month - | val.getDate() << 16 // b00-04 hour - - // 2 bytes time - | val.getHours() << 11 // b11-15 hour - | val.getMinutes() << 5 // b05-10 minute - | val.getSeconds() >> 1; // b00-04 seconds divided by 2 - } - - setTime(+new Date()); - - return { - get made () { return _verMade; }, - set made (val) { _verMade = val; }, - - get version () { return _version; }, - set version (val) { _version = val }, - - get flags () { return _flags }, - set flags (val) { _flags = val; }, - - get method () { return _method; }, - set method (val) { _method = val; }, - - get time () { return new Date( - ((_time >> 25) & 0x7f) + 1980, - ((_time >> 21) & 0x0f) - 1, - (_time >> 16) & 0x1f, - (_time >> 11) & 0x1f, - (_time >> 5) & 0x3f, - (_time & 0x1f) << 1 - ); - }, - set time (val) { - setTime(val); - }, - - get crc () { return _crc; }, - set crc (val) { _crc = val; }, - - get compressedSize () { return _compressedSize; }, - set compressedSize (val) { _compressedSize = val; }, - - get size () { return _size; }, - set size (val) { _size = val; }, - - get fileNameLength () { return _fnameLen; }, - set fileNameLength (val) { _fnameLen = val; }, - - get extraLength () { return _extraLen }, - set extraLength (val) { _extraLen = val; }, - - get commentLength () { return _comLen }, - set commentLength (val) { _comLen = val }, - - get diskNumStart () { return _diskStart }, - set diskNumStart (val) { _diskStart = val }, - - get inAttr () { return _inattr }, - set inAttr (val) { _inattr = val }, - - get attr () { return _attr }, - set attr (val) { _attr = val }, - - get offset () { return _offset }, - set offset (val) { _offset = val }, - - get encripted () { return (_flags & 1) === 1 }, - - get entryHeaderSize () { - return Constants.CENHDR + _fnameLen + _extraLen + _comLen; - }, - - get realDataOffset () { - return _offset + Constants.LOCHDR + _dataHeader.fnameLen + _dataHeader.extraLen; - }, - - get dataHeader () { - return _dataHeader; - }, - - loadDataHeaderFromBinary : function(/*Buffer*/input) { - var data = input.slice(_offset, _offset + Constants.LOCHDR); - // 30 bytes and should start with "PK\003\004" - if (data.readUInt32LE(0) !== Constants.LOCSIG) { - throw Utils.Errors.INVALID_LOC; - } - _dataHeader = { - // version needed to extract - version : data.readUInt16LE(Constants.LOCVER), - // general purpose bit flag - flags : data.readUInt16LE(Constants.LOCFLG), - // compression method - method : data.readUInt16LE(Constants.LOCHOW), - // modification time (2 bytes time, 2 bytes date) - time : data.readUInt32LE(Constants.LOCTIM), - // uncompressed file crc-32 value - crc : data.readUInt32LE(Constants.LOCCRC), - // compressed size - compressedSize : data.readUInt32LE(Constants.LOCSIZ), - // uncompressed size - size : data.readUInt32LE(Constants.LOCLEN), - // filename length - fnameLen : data.readUInt16LE(Constants.LOCNAM), - // extra field length - extraLen : data.readUInt16LE(Constants.LOCEXT) - } - }, - - loadFromBinary : function(/*Buffer*/data) { - // data should be 46 bytes and start with "PK 01 02" - if (data.length !== Constants.CENHDR || data.readUInt32LE(0) !== Constants.CENSIG) { - throw Utils.Errors.INVALID_CEN; - } - // version made by - _verMade = data.readUInt16LE(Constants.CENVEM); - // version needed to extract - _version = data.readUInt16LE(Constants.CENVER); - // encrypt, decrypt flags - _flags = data.readUInt16LE(Constants.CENFLG); - // compression method - _method = data.readUInt16LE(Constants.CENHOW); - // modification time (2 bytes time, 2 bytes date) - _time = data.readUInt32LE(Constants.CENTIM); - // uncompressed file crc-32 value - _crc = data.readUInt32LE(Constants.CENCRC); - // compressed size - _compressedSize = data.readUInt32LE(Constants.CENSIZ); - // uncompressed size - _size = data.readUInt32LE(Constants.CENLEN); - // filename length - _fnameLen = data.readUInt16LE(Constants.CENNAM); - // extra field length - _extraLen = data.readUInt16LE(Constants.CENEXT); - // file comment length - _comLen = data.readUInt16LE(Constants.CENCOM); - // volume number start - _diskStart = data.readUInt16LE(Constants.CENDSK); - // internal file attributes - _inattr = data.readUInt16LE(Constants.CENATT); - // external file attributes - _attr = data.readUInt32LE(Constants.CENATX); - // LOC header offset - _offset = data.readUInt32LE(Constants.CENOFF); - }, - - dataHeaderToBinary : function() { - // LOC header size (30 bytes) - var data = Buffer.alloc(Constants.LOCHDR); - // "PK\003\004" - data.writeUInt32LE(Constants.LOCSIG, 0); - // version needed to extract - data.writeUInt16LE(_version, Constants.LOCVER); - // general purpose bit flag - data.writeUInt16LE(_flags, Constants.LOCFLG); - // compression method - data.writeUInt16LE(_method, Constants.LOCHOW); - // modification time (2 bytes time, 2 bytes date) - data.writeUInt32LE(_time, Constants.LOCTIM); - // uncompressed file crc-32 value - data.writeUInt32LE(_crc, Constants.LOCCRC); - // compressed size - data.writeUInt32LE(_compressedSize, Constants.LOCSIZ); - // uncompressed size - data.writeUInt32LE(_size, Constants.LOCLEN); - // filename length - data.writeUInt16LE(_fnameLen, Constants.LOCNAM); - // extra field length - data.writeUInt16LE(_extraLen, Constants.LOCEXT); - return data; - }, - - entryHeaderToBinary : function() { - // CEN header size (46 bytes) - var data = Buffer.alloc(Constants.CENHDR + _fnameLen + _extraLen + _comLen); - // "PK\001\002" - data.writeUInt32LE(Constants.CENSIG, 0); - // version made by - data.writeUInt16LE(_verMade, Constants.CENVEM); - // version needed to extract - data.writeUInt16LE(_version, Constants.CENVER); - // encrypt, decrypt flags - data.writeUInt16LE(_flags, Constants.CENFLG); - // compression method - data.writeUInt16LE(_method, Constants.CENHOW); - // modification time (2 bytes time, 2 bytes date) - data.writeUInt32LE(_time, Constants.CENTIM); - // uncompressed file crc-32 value - data.writeUInt32LE(_crc, Constants.CENCRC); - // compressed size - data.writeUInt32LE(_compressedSize, Constants.CENSIZ); - // uncompressed size - data.writeUInt32LE(_size, Constants.CENLEN); - // filename length - data.writeUInt16LE(_fnameLen, Constants.CENNAM); - // extra field length - data.writeUInt16LE(_extraLen, Constants.CENEXT); - // file comment length - data.writeUInt16LE(_comLen, Constants.CENCOM); - // volume number start - data.writeUInt16LE(_diskStart, Constants.CENDSK); - // internal file attributes - data.writeUInt16LE(_inattr, Constants.CENATT); - // external file attributes - data.writeUInt32LE(_attr, Constants.CENATX); - // LOC header offset - data.writeUInt32LE(_offset, Constants.CENOFF); - // fill all with - data.fill(0x00, Constants.CENHDR); - return data; - }, - - toString : function() { - return '{\n' + - '\t"made" : ' + _verMade + ",\n" + - '\t"version" : ' + _version + ",\n" + - '\t"flags" : ' + _flags + ",\n" + - '\t"method" : ' + Utils.methodToString(_method) + ",\n" + - '\t"time" : ' + this.time + ",\n" + - '\t"crc" : 0x' + _crc.toString(16).toUpperCase() + ",\n" + - '\t"compressedSize" : ' + _compressedSize + " bytes,\n" + - '\t"size" : ' + _size + " bytes,\n" + - '\t"fileNameLength" : ' + _fnameLen + ",\n" + - '\t"extraLength" : ' + _extraLen + " bytes,\n" + - '\t"commentLength" : ' + _comLen + " bytes,\n" + - '\t"diskNumStart" : ' + _diskStart + ",\n" + - '\t"inAttr" : ' + _inattr + ",\n" + - '\t"attr" : ' + _attr + ",\n" + - '\t"offset" : ' + _offset + ",\n" + - '\t"entryHeaderSize" : ' + (Constants.CENHDR + _fnameLen + _extraLen + _comLen) + " bytes\n" + - '}'; - } - } -}; diff --git a/base/util/adm-zip/headers/index.js b/base/util/adm-zip/headers/index.js deleted file mode 100644 index b54a7222f..000000000 --- a/base/util/adm-zip/headers/index.js +++ /dev/null @@ -1,2 +0,0 @@ -exports.EntryHeader = require("./entryHeader"); -exports.MainHeader = require("./mainHeader"); diff --git a/base/util/adm-zip/headers/mainHeader.js b/base/util/adm-zip/headers/mainHeader.js deleted file mode 100644 index 3a21d938a..000000000 --- a/base/util/adm-zip/headers/mainHeader.js +++ /dev/null @@ -1,80 +0,0 @@ -var Utils = require("../util"), - Constants = Utils.Constants; - -/* The entries in the end of central directory */ -module.exports = function () { - var _volumeEntries = 0, - _totalEntries = 0, - _size = 0, - _offset = 0, - _commentLength = 0; - - return { - get diskEntries () { return _volumeEntries }, - set diskEntries (/*Number*/val) { _volumeEntries = _totalEntries = val; }, - - get totalEntries () { return _totalEntries }, - set totalEntries (/*Number*/val) { _totalEntries = _volumeEntries = val; }, - - get size () { return _size }, - set size (/*Number*/val) { _size = val; }, - - get offset () { return _offset }, - set offset (/*Number*/val) { _offset = val; }, - - get commentLength () { return _commentLength }, - set commentLength (/*Number*/val) { _commentLength = val; }, - - get mainHeaderSize () { - return Constants.ENDHDR + _commentLength; - }, - - loadFromBinary : function(/*Buffer*/data) { - // data should be 22 bytes and start with "PK 05 06" - if (data.length !== Constants.ENDHDR || data.readUInt32LE(0) !== Constants.ENDSIG) - throw Utils.Errors.INVALID_END; - - // number of entries on this volume - _volumeEntries = data.readUInt16LE(Constants.ENDSUB); - // total number of entries - _totalEntries = data.readUInt16LE(Constants.ENDTOT); - // central directory size in bytes - _size = data.readUInt32LE(Constants.ENDSIZ); - // offset of first CEN header - _offset = data.readUInt32LE(Constants.ENDOFF); - // zip file comment length - _commentLength = data.readUInt16LE(Constants.ENDCOM); - }, - - toBinary : function() { - var b = Buffer.alloc(Constants.ENDHDR + _commentLength); - // "PK 05 06" signature - b.writeUInt32LE(Constants.ENDSIG, 0); - b.writeUInt32LE(0, 4); - // number of entries on this volume - b.writeUInt16LE(_volumeEntries, Constants.ENDSUB); - // total number of entries - b.writeUInt16LE(_totalEntries, Constants.ENDTOT); - // central directory size in bytes - b.writeUInt32LE(_size, Constants.ENDSIZ); - // offset of first CEN header - b.writeUInt32LE(_offset, Constants.ENDOFF); - // zip file comment length - b.writeUInt16LE(_commentLength, Constants.ENDCOM); - // fill comment memory with spaces so no garbage is left there - b.fill(" ", Constants.ENDHDR); - - return b; - }, - - toString : function() { - return '{\n' + - '\t"diskEntries" : ' + _volumeEntries + ",\n" + - '\t"totalEntries" : ' + _totalEntries + ",\n" + - '\t"size" : ' + _size + " bytes,\n" + - '\t"offset" : 0x' + _offset.toString(16).toUpperCase() + ",\n" + - '\t"commentLength" : 0x' + _commentLength + "\n" + - '}'; - } - } -}; \ No newline at end of file diff --git a/base/util/adm-zip/methods/deflater.js b/base/util/adm-zip/methods/deflater.js deleted file mode 100644 index 67ecd8866..000000000 --- a/base/util/adm-zip/methods/deflater.js +++ /dev/null @@ -1,31 +0,0 @@ -module.exports = function (/*Buffer*/inbuf) { - - var zlib = require("zlib"); - - var opts = {chunkSize: (parseInt(inbuf.length / 1024) + 1) * 1024}; - - return { - deflate: function () { - return zlib.deflateRawSync(inbuf, opts); - }, - - deflateAsync: function (/*Function*/callback) { - var tmp = zlib.createDeflateRaw(opts), parts = [], total = 0; - tmp.on('data', function (data) { - parts.push(data); - total += data.length; - }); - tmp.on('end', function () { - var buf = Buffer.alloc(total), written = 0; - buf.fill(0); - for (var i = 0; i < parts.length; i++) { - var part = parts[i]; - part.copy(buf, written); - written += part.length; - } - callback && callback(buf); - }); - tmp.end(inbuf); - } - } -}; diff --git a/base/util/adm-zip/methods/index.js b/base/util/adm-zip/methods/index.js deleted file mode 100644 index 58c718da6..000000000 --- a/base/util/adm-zip/methods/index.js +++ /dev/null @@ -1,2 +0,0 @@ -exports.Deflater = require("./deflater"); -exports.Inflater = require("./inflater"); \ No newline at end of file diff --git a/base/util/adm-zip/methods/inflater.js b/base/util/adm-zip/methods/inflater.js deleted file mode 100644 index a274e4ef5..000000000 --- a/base/util/adm-zip/methods/inflater.js +++ /dev/null @@ -1,29 +0,0 @@ -module.exports = function (/*Buffer*/inbuf) { - - var zlib = require("zlib"); - - return { - inflate: function () { - return zlib.inflateRawSync(inbuf); - }, - - inflateAsync: function (/*Function*/callback) { - var tmp = zlib.createInflateRaw(), parts = [], total = 0; - tmp.on('data', function (data) { - parts.push(data); - total += data.length; - }); - tmp.on('end', function () { - var buf = Buffer.alloc(total), written = 0; - buf.fill(0); - for (var i = 0; i < parts.length; i++) { - var part = parts[i]; - part.copy(buf, written); - written += part.length; - } - callback && callback(buf); - }); - tmp.end(inbuf); - } - } -}; diff --git a/base/util/adm-zip/package.json b/base/util/adm-zip/package.json deleted file mode 100644 index af51901fc..000000000 --- a/base/util/adm-zip/package.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "name": "adm-zip", - "version": "0.4.12", - "description": "Javascript implementation of zip for nodejs with support for electron original-fs. Allows user to create or extract zip files both in memory or to/from disk", - "keywords": [ - "zip", - "methods", - "archive", - "unzip" - ], - "homepage": "https://github.com/cthackers/adm-zip", - "author": "Nasca Iacob (https://github.com/cthackers)", - "bugs": { - "email": "sy@another-d-mention.ro", - "url": "https://github.com/cthackers/adm-zip/issues" - }, - "license": "MIT", - "files": [ - "adm-zip.js", - "headers", - "methods", - "util", - "zipEntry.js", - "zipFile.js" - ], - "main": "adm-zip.js", - "repository": { - "type": "git", - "url": "https://github.com/cthackers/adm-zip.git" - }, - "engines": { - "node": ">=0.3.0" - } -} \ No newline at end of file diff --git a/base/util/adm-zip/util/constants.js b/base/util/adm-zip/util/constants.js deleted file mode 100644 index 02de1e9ad..000000000 --- a/base/util/adm-zip/util/constants.js +++ /dev/null @@ -1,115 +0,0 @@ -module.exports = { - /* The local file header */ - LOCHDR : 30, // LOC header size - LOCSIG : 0x04034b50, // "PK\003\004" - LOCVER : 4, // version needed to extract - LOCFLG : 6, // general purpose bit flag - LOCHOW : 8, // compression method - LOCTIM : 10, // modification time (2 bytes time, 2 bytes date) - LOCCRC : 14, // uncompressed file crc-32 value - LOCSIZ : 18, // compressed size - LOCLEN : 22, // uncompressed size - LOCNAM : 26, // filename length - LOCEXT : 28, // extra field length - - /* The Data descriptor */ - EXTSIG : 0x08074b50, // "PK\007\008" - EXTHDR : 16, // EXT header size - EXTCRC : 4, // uncompressed file crc-32 value - EXTSIZ : 8, // compressed size - EXTLEN : 12, // uncompressed size - - /* The central directory file header */ - CENHDR : 46, // CEN header size - CENSIG : 0x02014b50, // "PK\001\002" - CENVEM : 4, // version made by - CENVER : 6, // version needed to extract - CENFLG : 8, // encrypt, decrypt flags - CENHOW : 10, // compression method - CENTIM : 12, // modification time (2 bytes time, 2 bytes date) - CENCRC : 16, // uncompressed file crc-32 value - CENSIZ : 20, // compressed size - CENLEN : 24, // uncompressed size - CENNAM : 28, // filename length - CENEXT : 30, // extra field length - CENCOM : 32, // file comment length - CENDSK : 34, // volume number start - CENATT : 36, // internal file attributes - CENATX : 38, // external file attributes (host system dependent) - CENOFF : 42, // LOC header offset - - /* The entries in the end of central directory */ - ENDHDR : 22, // END header size - ENDSIG : 0x06054b50, // "PK\005\006" - ENDSUB : 8, // number of entries on this disk - ENDTOT : 10, // total number of entries - ENDSIZ : 12, // central directory size in bytes - ENDOFF : 16, // offset of first CEN header - ENDCOM : 20, // zip file comment length - - /* Compression methods */ - STORED : 0, // no compression - SHRUNK : 1, // shrunk - REDUCED1 : 2, // reduced with compression factor 1 - REDUCED2 : 3, // reduced with compression factor 2 - REDUCED3 : 4, // reduced with compression factor 3 - REDUCED4 : 5, // reduced with compression factor 4 - IMPLODED : 6, // imploded - // 7 reserved - DEFLATED : 8, // deflated - ENHANCED_DEFLATED: 9, // enhanced deflated - PKWARE : 10,// PKWare DCL imploded - // 11 reserved - BZIP2 : 12, // compressed using BZIP2 - // 13 reserved - LZMA : 14, // LZMA - // 15-17 reserved - IBM_TERSE : 18, // compressed using IBM TERSE - IBM_LZ77 : 19, //IBM LZ77 z - - /* General purpose bit flag */ - FLG_ENC : 0, // encripted file - FLG_COMP1 : 1, // compression option - FLG_COMP2 : 2, // compression option - FLG_DESC : 4, // data descriptor - FLG_ENH : 8, // enhanced deflation - FLG_STR : 16, // strong encryption - FLG_LNG : 1024, // language encoding - FLG_MSK : 4096, // mask header values - - /* Load type */ - FILE : 0, - BUFFER : 1, - NONE : 2, - - /* 4.5 Extensible data fields */ - EF_ID : 0, - EF_SIZE : 2, - - /* Header IDs */ - ID_ZIP64 : 0x0001, - ID_AVINFO : 0x0007, - ID_PFS : 0x0008, - ID_OS2 : 0x0009, - ID_NTFS : 0x000a, - ID_OPENVMS : 0x000c, - ID_UNIX : 0x000d, - ID_FORK : 0x000e, - ID_PATCH : 0x000f, - ID_X509_PKCS7 : 0x0014, - ID_X509_CERTID_F : 0x0015, - ID_X509_CERTID_C : 0x0016, - ID_STRONGENC : 0x0017, - ID_RECORD_MGT : 0x0018, - ID_X509_PKCS7_RL : 0x0019, - ID_IBM1 : 0x0065, - ID_IBM2 : 0x0066, - ID_POSZIP : 0x4690, - - EF_ZIP64_OR_32 : 0xffffffff, - EF_ZIP64_OR_16 : 0xffff, - EF_ZIP64_SUNCOMP : 0, - EF_ZIP64_SCOMP : 8, - EF_ZIP64_RHO : 16, - EF_ZIP64_DSN : 24 -}; diff --git a/base/util/adm-zip/util/errors.js b/base/util/adm-zip/util/errors.js deleted file mode 100644 index 50931c318..000000000 --- a/base/util/adm-zip/util/errors.js +++ /dev/null @@ -1,35 +0,0 @@ -module.exports = { - /* Header error messages */ - "INVALID_LOC" : "Invalid LOC header (bad signature)", - "INVALID_CEN" : "Invalid CEN header (bad signature)", - "INVALID_END" : "Invalid END header (bad signature)", - - /* ZipEntry error messages*/ - "NO_DATA" : "Nothing to decompress", - "BAD_CRC" : "CRC32 checksum failed", - "FILE_IN_THE_WAY" : "There is a file in the way: %s", - "UNKNOWN_METHOD" : "Invalid/unsupported compression method", - - /* Inflater error messages */ - "AVAIL_DATA" : "inflate::Available inflate data did not terminate", - "INVALID_DISTANCE" : "inflate::Invalid literal/length or distance code in fixed or dynamic block", - "TO_MANY_CODES" : "inflate::Dynamic block code description: too many length or distance codes", - "INVALID_REPEAT_LEN" : "inflate::Dynamic block code description: repeat more than specified lengths", - "INVALID_REPEAT_FIRST" : "inflate::Dynamic block code description: repeat lengths with no first length", - "INCOMPLETE_CODES" : "inflate::Dynamic block code description: code lengths codes incomplete", - "INVALID_DYN_DISTANCE": "inflate::Dynamic block code description: invalid distance code lengths", - "INVALID_CODES_LEN": "inflate::Dynamic block code description: invalid literal/length code lengths", - "INVALID_STORE_BLOCK" : "inflate::Stored block length did not match one's complement", - "INVALID_BLOCK_TYPE" : "inflate::Invalid block type (type == 3)", - - /* ADM-ZIP error messages */ - "CANT_EXTRACT_FILE" : "Could not extract the file", - "CANT_OVERRIDE" : "Target file already exists", - "NO_ZIP" : "No zip file was loaded", - "NO_ENTRY" : "Entry doesn't exist", - "DIRECTORY_CONTENT_ERROR" : "A directory cannot have content", - "FILE_NOT_FOUND" : "File not found: %s", - "NOT_IMPLEMENTED" : "Not implemented", - "INVALID_FILENAME" : "Invalid filename", - "INVALID_FORMAT" : "Invalid or unsupported zip format. No END header found" -}; \ No newline at end of file diff --git a/base/util/adm-zip/util/fattr.js b/base/util/adm-zip/util/fattr.js deleted file mode 100644 index 055cdf063..000000000 --- a/base/util/adm-zip/util/fattr.js +++ /dev/null @@ -1,84 +0,0 @@ -var fs = require("./fileSystem").require(), - pth = require("path"); - -fs.existsSync = fs.existsSync || pth.existsSync; - -module.exports = function(/*String*/path) { - - var _path = path || "", - _permissions = 0, - _obj = newAttr(), - _stat = null; - - function newAttr() { - return { - directory : false, - readonly : false, - hidden : false, - executable : false, - mtime : 0, - atime : 0 - } - } - - if (_path && fs.existsSync(_path)) { - _stat = fs.statSync(_path); - _obj.directory = _stat.isDirectory(); - _obj.mtime = _stat.mtime; - _obj.atime = _stat.atime; - _obj.executable = !!(1 & parseInt ((_stat.mode & parseInt ("777", 8)).toString (8)[0])); - _obj.readonly = !!(2 & parseInt ((_stat.mode & parseInt ("777", 8)).toString (8)[0])); - _obj.hidden = pth.basename(_path)[0] === "."; - } else { - console.warn("Invalid path: " + _path) - } - - return { - - get directory () { - return _obj.directory; - }, - - get readOnly () { - return _obj.readonly; - }, - - get hidden () { - return _obj.hidden; - }, - - get mtime () { - return _obj.mtime; - }, - - get atime () { - return _obj.atime; - }, - - - get executable () { - return _obj.executable; - }, - - decodeAttributes : function(val) { - - }, - - encodeAttributes : function (val) { - - }, - - toString : function() { - return '{\n' + - '\t"path" : "' + _path + ",\n" + - '\t"isDirectory" : ' + _obj.directory + ",\n" + - '\t"isReadOnly" : ' + _obj.readonly + ",\n" + - '\t"isHidden" : ' + _obj.hidden + ",\n" + - '\t"isExecutable" : ' + _obj.executable + ",\n" + - '\t"mTime" : ' + _obj.mtime + "\n" + - '\t"aTime" : ' + _obj.atime + "\n" + - '}'; - } - } - -}; diff --git a/base/util/adm-zip/util/fileSystem.js b/base/util/adm-zip/util/fileSystem.js deleted file mode 100644 index 2859791c5..000000000 --- a/base/util/adm-zip/util/fileSystem.js +++ /dev/null @@ -1,9 +0,0 @@ -exports.require = function() { - var fs = require("fs"); - if (process.versions['electron']) { - try { - fs = require("original-fs") - } catch (e) {} - } - return fs -}; diff --git a/base/util/adm-zip/util/index.js b/base/util/adm-zip/util/index.js deleted file mode 100644 index 870831689..000000000 --- a/base/util/adm-zip/util/index.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = require("./utils"); -module.exports.FileSystem = require("./fileSystem"); -module.exports.Constants = require("./constants"); -module.exports.Errors = require("./errors"); -module.exports.FileAttr = require("./fattr"); \ No newline at end of file diff --git a/base/util/adm-zip/util/utils.js b/base/util/adm-zip/util/utils.js deleted file mode 100644 index df65e4f29..000000000 --- a/base/util/adm-zip/util/utils.js +++ /dev/null @@ -1,209 +0,0 @@ -var fs = require("./fileSystem").require(), - pth = require('path'); - -fs.existsSync = fs.existsSync || pth.existsSync; - -module.exports = (function() { - - var crcTable = [], - Constants = require('./constants'), - Errors = require('./errors'), - - PATH_SEPARATOR = pth.sep; - - - function mkdirSync(/*String*/path) { - var resolvedPath = path.split(PATH_SEPARATOR)[0]; - path.split(PATH_SEPARATOR).forEach(function(name) { - if (!name || name.substr(-1,1) === ":") return; - resolvedPath += PATH_SEPARATOR + name; - var stat; - try { - stat = fs.statSync(resolvedPath); - } catch (e) { - fs.mkdirSync(resolvedPath); - } - if (stat && stat.isFile()) - throw Errors.FILE_IN_THE_WAY.replace("%s", resolvedPath); - }); - } - - function findSync(/*String*/dir, /*RegExp*/pattern, /*Boolean*/recoursive) { - if (typeof pattern === 'boolean') { - recoursive = pattern; - pattern = undefined; - } - var files = []; - fs.readdirSync(dir).forEach(function(file) { - var path = pth.join(dir, file); - - if (fs.statSync(path).isDirectory() && recoursive) - files = files.concat(findSync(path, pattern, recoursive)); - - if (!pattern || pattern.test(path)) { - files.push(pth.normalize(path) + (fs.statSync(path).isDirectory() ? PATH_SEPARATOR : "")); - } - - }); - return files; - } - - return { - makeDir : function(/*String*/path) { - mkdirSync(path); - }, - - crc32 : function(buf) { - if (typeof buf === 'string') { - buf = Buffer.alloc(buf.length, buf); - } - var b = Buffer.alloc(4); - if (!crcTable.length) { - for (var n = 0; n < 256; n++) { - var c = n; - for (var k = 8; --k >= 0;) // - if ((c & 1) !== 0) { c = 0xedb88320 ^ (c >>> 1); } else { c = c >>> 1; } - if (c < 0) { - b.writeInt32LE(c, 0); - c = b.readUInt32LE(0); - } - crcTable[n] = c; - } - } - var crc = 0, off = 0, len = buf.length, c1 = ~crc; - while(--len >= 0) c1 = crcTable[(c1 ^ buf[off++]) & 0xff] ^ (c1 >>> 8); - crc = ~c1; - b.writeInt32LE(crc & 0xffffffff, 0); - return b.readUInt32LE(0); - }, - - methodToString : function(/*Number*/method) { - switch (method) { - case Constants.STORED: - return 'STORED (' + method + ')'; - case Constants.DEFLATED: - return 'DEFLATED (' + method + ')'; - default: - return 'UNSUPPORTED (' + method + ')'; - } - - }, - - writeFileTo : function(/*String*/path, /*Buffer*/content, /*Boolean*/overwrite, /*Number*/attr) { - if (fs.existsSync(path)) { - if (!overwrite) - return false; // cannot overwrite - - var stat = fs.statSync(path); - if (stat.isDirectory()) { - return false; - } - } - var folder = pth.dirname(path); - if (!fs.existsSync(folder)) { - mkdirSync(folder); - } - - var fd; - try { - fd = fs.openSync(path, 'w', 438); // 0666 - } catch(e) { - fs.chmodSync(path, 438); - fd = fs.openSync(path, 'w', 438); - } - if (fd) { - try { - fs.writeSync(fd, content, 0, content.length, 0); - } - catch (e){ - throw e; - } - finally { - fs.closeSync(fd); - } - } - fs.chmodSync(path, attr || 438); - return true; - }, - - writeFileToAsync : function(/*String*/path, /*Buffer*/content, /*Boolean*/overwrite, /*Number*/attr, /*Function*/callback) { - if(typeof attr === 'function') { - callback = attr; - attr = undefined; - } - - fs.exists(path, function(exists) { - if(exists && !overwrite) - return callback(false); - - fs.stat(path, function(err, stat) { - if(exists &&stat.isDirectory()) { - return callback(false); - } - - var folder = pth.dirname(path); - fs.exists(folder, function(exists) { - if(!exists) - mkdirSync(folder); - - fs.open(path, 'w', 438, function(err, fd) { - if(err) { - fs.chmod(path, 438, function() { - fs.open(path, 'w', 438, function(err, fd) { - fs.write(fd, content, 0, content.length, 0, function() { - fs.close(fd, function() { - fs.chmod(path, attr || 438, function() { - callback(true); - }) - }); - }); - }); - }) - } else { - if(fd) { - fs.write(fd, content, 0, content.length, 0, function() { - fs.close(fd, function() { - fs.chmod(path, attr || 438, function() { - callback(true); - }) - }); - }); - } else { - fs.chmod(path, attr || 438, function() { - callback(true); - }) - } - } - }); - }) - }) - }) - }, - - findFiles : function(/*String*/path) { - return findSync(path, true); - }, - - getAttributes : function(/*String*/path) { - - }, - - setAttributes : function(/*String*/path) { - - }, - - toBuffer : function(input) { - if (Buffer.isBuffer(input)) { - return input; - } else { - if (input.length === 0) { - return Buffer.alloc(0) - } - return Buffer.alloc(input.length, input, 'utf8'); - } - }, - - Constants : Constants, - Errors : Errors - } -})(); diff --git a/base/util/adm-zip/zipEntry.js b/base/util/adm-zip/zipEntry.js deleted file mode 100644 index 4201e0262..000000000 --- a/base/util/adm-zip/zipEntry.js +++ /dev/null @@ -1,290 +0,0 @@ -var Utils = require("./util"), - Headers = require("./headers"), - Constants = Utils.Constants, - Methods = require("./methods"); - -module.exports = function (/*Buffer*/input) { - - var _entryHeader = new Headers.EntryHeader(), - _entryName = Buffer.alloc(0), - _comment = Buffer.alloc(0), - _isDirectory = false, - uncompressedData = null, - _extra = Buffer.alloc(0); - - function getCompressedDataFromZip() { - if (!input || !Buffer.isBuffer(input)) { - return Buffer.alloc(0); - } - _entryHeader.loadDataHeaderFromBinary(input); - return input.slice(_entryHeader.realDataOffset, _entryHeader.realDataOffset + _entryHeader.compressedSize) - } - - function crc32OK(data) { - // if bit 3 (0x08) of the general-purpose flags field is set, then the CRC-32 and file sizes are not known when the header is written - if ((_entryHeader.flags & 0x8) !== 0x8) { - if (Utils.crc32(data) !== _entryHeader.crc) { - return false; - } - } else { - // @TODO: load and check data descriptor header - // The fields in the local header are filled with zero, and the CRC-32 and size are appended in a 12-byte structure - // (optionally preceded by a 4-byte signature) immediately after the compressed data: - } - return true; - } - - function decompress(/*Boolean*/async, /*Function*/callback, /*String*/pass) { - if(typeof callback === 'undefined' && typeof async === 'string') { - pass=async; - async=void 0; - } - if (_isDirectory) { - if (async && callback) { - callback(Buffer.alloc(0), Utils.Errors.DIRECTORY_CONTENT_ERROR); //si added error. - } - return Buffer.alloc(0); - } - - var compressedData = getCompressedDataFromZip(); - - if (compressedData.length === 0) { - if (async && callback) callback(compressedData, Utils.Errors.NO_DATA);//si added error. - return compressedData; - } - - var data = Buffer.alloc(_entryHeader.size); - - switch (_entryHeader.method) { - case Utils.Constants.STORED: - compressedData.copy(data); - if (!crc32OK(data)) { - if (async && callback) callback(data, Utils.Errors.BAD_CRC);//si added error - return Utils.Errors.BAD_CRC; - } else {//si added otherwise did not seem to return data. - if (async && callback) callback(data); - return data; - } - case Utils.Constants.DEFLATED: - var inflater = new Methods.Inflater(compressedData); - if (!async) { - var result = inflater.inflate(data); - result.copy(data, 0); - if (!crc32OK(data)) { - console.warn(Utils.Errors.BAD_CRC + " " + _entryName.toString()) - } - return data; - } else { - inflater.inflateAsync(function(result) { - result.copy(data, 0); - if (!crc32OK(data)) { - if (callback) callback(data, Utils.Errors.BAD_CRC); //si added error - } else { //si added otherwise did not seem to return data. - if (callback) callback(data); - } - }) - } - break; - default: - if (async && callback) callback(Buffer.alloc(0), Utils.Errors.UNKNOWN_METHOD); - return Utils.Errors.UNKNOWN_METHOD; - } - } - - function compress(/*Boolean*/async, /*Function*/callback) { - if ((!uncompressedData || !uncompressedData.length) && Buffer.isBuffer(input)) { - // no data set or the data wasn't changed to require recompression - if (async && callback) callback(getCompressedDataFromZip()); - return getCompressedDataFromZip(); - } - - if (uncompressedData.length && !_isDirectory) { - var compressedData; - // Local file header - switch (_entryHeader.method) { - case Utils.Constants.STORED: - _entryHeader.compressedSize = _entryHeader.size; - - compressedData = Buffer.alloc(uncompressedData.length); - uncompressedData.copy(compressedData); - - if (async && callback) callback(compressedData); - return compressedData; - default: - case Utils.Constants.DEFLATED: - - var deflater = new Methods.Deflater(uncompressedData); - if (!async) { - var deflated = deflater.deflate(); - _entryHeader.compressedSize = deflated.length; - return deflated; - } else { - deflater.deflateAsync(function(data) { - compressedData = Buffer.alloc(data.length); - _entryHeader.compressedSize = data.length; - data.copy(compressedData); - callback && callback(compressedData); - }) - } - deflater = null; - break; - } - } else { - if (async && callback) { - callback(Buffer.alloc(0)); - } else { - return Buffer.alloc(0); - } - } - } - - function readUInt64LE(buffer, offset) { - return (buffer.readUInt32LE(offset + 4) << 4) + buffer.readUInt32LE(offset); - } - - function parseExtra(data) { - var offset = 0; - var signature, size, part; - while(offset= Constants.EF_ZIP64_SCOMP) { - size = readUInt64LE(data, Constants.EF_ZIP64_SUNCOMP); - if(_entryHeader.size === Constants.EF_ZIP64_OR_32) { - _entryHeader.size = size; - } - } - if(data.length >= Constants.EF_ZIP64_RHO) { - compressedSize = readUInt64LE(data, Constants.EF_ZIP64_SCOMP); - if(_entryHeader.compressedSize === Constants.EF_ZIP64_OR_32) { - _entryHeader.compressedSize = compressedSize; - } - } - if(data.length >= Constants.EF_ZIP64_DSN) { - offset = readUInt64LE(data, Constants.EF_ZIP64_RHO); - if(_entryHeader.offset === Constants.EF_ZIP64_OR_32) { - _entryHeader.offset = offset; - } - } - if(data.length >= Constants.EF_ZIP64_DSN+4) { - diskNumStart = data.readUInt32LE(Constants.EF_ZIP64_DSN); - if(_entryHeader.diskNumStart === Constants.EF_ZIP64_OR_16) { - _entryHeader.diskNumStart = diskNumStart; - } - } - } - - - return { - get entryName () { return _entryName.toString(); }, - get rawEntryName() { return _entryName; }, - set entryName (val) { - _entryName = Utils.toBuffer(val); - var lastChar = _entryName[_entryName.length - 1]; - _isDirectory = (lastChar === 47) || (lastChar === 92); - _entryHeader.fileNameLength = _entryName.length; - }, - - get extra () { return _extra; }, - set extra (val) { - _extra = val; - _entryHeader.extraLength = val.length; - parseExtra(val); - }, - - get comment () { return _comment.toString(); }, - set comment (val) { - _comment = Utils.toBuffer(val); - _entryHeader.commentLength = _comment.length; - }, - - get name () { var n = _entryName.toString(); return _isDirectory ? n.substr(n.length - 1).split("/").pop() : n.split("/").pop(); }, - get isDirectory () { return _isDirectory }, - - getCompressedData : function() { - return compress(false, null) - }, - - getCompressedDataAsync : function(/*Function*/callback) { - compress(true, callback) - }, - - setData : function(value) { - uncompressedData = Utils.toBuffer(value); - if (!_isDirectory && uncompressedData.length) { - _entryHeader.size = uncompressedData.length; - _entryHeader.method = Utils.Constants.DEFLATED; - _entryHeader.crc = Utils.crc32(value); - _entryHeader.changed = true; - } else { // folders and blank files should be stored - _entryHeader.method = Utils.Constants.STORED; - } - }, - - getData : function(pass) { - if (_entryHeader.changed) { - return uncompressedData; - } else { - return decompress(false, null, pass); - } - }, - - getDataAsync : function(/*Function*/callback, pass) { - if (_entryHeader.changed) { - callback(uncompressedData) - } else { - decompress(true, callback, pass) - } - }, - - set attr(attr) { _entryHeader.attr = attr; }, - get attr() { return _entryHeader.attr; }, - - set header(/*Buffer*/data) { - _entryHeader.loadFromBinary(data); - }, - - get header() { - return _entryHeader; - }, - - packHeader : function() { - var header = _entryHeader.entryHeaderToBinary(); - // add - _entryName.copy(header, Utils.Constants.CENHDR); - if (_entryHeader.extraLength) { - _extra.copy(header, Utils.Constants.CENHDR + _entryName.length) - } - if (_entryHeader.commentLength) { - _comment.copy(header, Utils.Constants.CENHDR + _entryName.length + _entryHeader.extraLength, _comment.length); - } - return header; - }, - - toString : function() { - return '{\n' + - '\t"entryName" : "' + _entryName.toString() + "\",\n" + - '\t"name" : "' + (_isDirectory ? _entryName.toString().replace(/\/$/, '').split("/").pop() : _entryName.toString().split("/").pop()) + "\",\n" + - '\t"comment" : "' + _comment.toString() + "\",\n" + - '\t"isDirectory" : ' + _isDirectory + ",\n" + - '\t"header" : ' + _entryHeader.toString().replace(/\t/mg, "\t\t").replace(/}/mg, "\t}") + ",\n" + - '\t"compressedData" : <' + (input && input.length + " bytes buffer" || "null") + ">\n" + - '\t"data" : <' + (uncompressedData && uncompressedData.length + " bytes buffer" || "null") + ">\n" + - '}'; - } - } -}; diff --git a/base/util/adm-zip/zipFile.js b/base/util/adm-zip/zipFile.js deleted file mode 100644 index 436baab57..000000000 --- a/base/util/adm-zip/zipFile.js +++ /dev/null @@ -1,320 +0,0 @@ -var ZipEntry = require("./zipEntry"), - Headers = require("./headers"), - Utils = require("./util"); - -module.exports = function (/*String|Buffer*/input, /*Number*/inputType) { - var entryList = [], - entryTable = {}, - _comment = Buffer.alloc(0), - filename = "", - fs = Utils.FileSystem.require(), - inBuffer = null, - mainHeader = new Headers.MainHeader(); - - if (inputType === Utils.Constants.FILE) { - // is a filename - filename = input; - inBuffer = fs.readFileSync(filename); - readMainHeader(); - } else if (inputType === Utils.Constants.BUFFER) { - // is a memory buffer - inBuffer = input; - readMainHeader(); - } else { - // none. is a new file - } - - function readEntries() { - entryTable = {}; - entryList = new Array(mainHeader.diskEntries); // total number of entries - var index = mainHeader.offset; // offset of first CEN header - for (var i = 0; i < entryList.length; i++) { - - var tmp = index, - entry = new ZipEntry(inBuffer); - entry.header = inBuffer.slice(tmp, tmp += Utils.Constants.CENHDR); - - entry.entryName = inBuffer.slice(tmp, tmp += entry.header.fileNameLength); - - if (entry.header.extraLength) { - entry.extra = inBuffer.slice(tmp, tmp += entry.header.extraLength); - } - - if (entry.header.commentLength) - entry.comment = inBuffer.slice(tmp, tmp + entry.header.commentLength); - - index += entry.header.entryHeaderSize; - - entryList[i] = entry; - entryTable[entry.entryName] = entry; - } - } - - function readMainHeader() { - var i = inBuffer.length - Utils.Constants.ENDHDR, // END header size - n = Math.max(0, i - 0xFFFF), // 0xFFFF is the max zip file comment length - endOffset = -1; // Start offset of the END header - - for (i; i >= n; i--) { - if (inBuffer[i] !== 0x50) continue; // quick check that the byte is 'P' - if (inBuffer.readUInt32LE(i) === Utils.Constants.ENDSIG) { // "PK\005\006" - endOffset = i; - break; - } - } - if (!~endOffset) - throw Utils.Errors.INVALID_FORMAT; - - mainHeader.loadFromBinary(inBuffer.slice(endOffset, endOffset + Utils.Constants.ENDHDR)); - if (mainHeader.commentLength) { - _comment = inBuffer.slice(endOffset + Utils.Constants.ENDHDR); - } - readEntries(); - } - - return { - /** - * Returns an array of ZipEntry objects existent in the current opened archive - * @return Array - */ - get entries() { - return entryList; - }, - - /** - * Archive comment - * @return {String} - */ - get comment() { - return _comment.toString(); - }, - set comment(val) { - mainHeader.commentLength = val.length; - _comment = val; - }, - - /** - * Returns a reference to the entry with the given name or null if entry is inexistent - * - * @param entryName - * @return ZipEntry - */ - getEntry: function (/*String*/entryName) { - return entryTable[entryName] || null; - }, - - /** - * Adds the given entry to the entry list - * - * @param entry - */ - setEntry: function (/*ZipEntry*/entry) { - entryList.push(entry); - entryTable[entry.entryName] = entry; - mainHeader.totalEntries = entryList.length; - }, - - /** - * Removes the entry with the given name from the entry list. - * - * If the entry is a directory, then all nested files and directories will be removed - * @param entryName - */ - deleteEntry: function (/*String*/entryName) { - var entry = entryTable[entryName]; - if (entry && entry.isDirectory) { - var _self = this; - this.getEntryChildren(entry).forEach(function (child) { - if (child.entryName !== entryName) { - _self.deleteEntry(child.entryName) - } - }) - } - entryList.splice(entryList.indexOf(entry), 1); - delete(entryTable[entryName]); - mainHeader.totalEntries = entryList.length; - }, - - /** - * Iterates and returns all nested files and directories of the given entry - * - * @param entry - * @return Array - */ - getEntryChildren: function (/*ZipEntry*/entry) { - if (entry.isDirectory) { - var list = [], - name = entry.entryName, - len = name.length; - - entryList.forEach(function (zipEntry) { - if (zipEntry.entryName.substr(0, len) === name) { - list.push(zipEntry); - } - }); - return list; - } - return [] - }, - - /** - * Returns the zip file - * - * @return Buffer - */ - compressToBuffer: function () { - if (entryList.length > 1) { - entryList.sort(function (a, b) { - var nameA = a.entryName.toLowerCase(); - var nameB = b.entryName.toLowerCase(); - if (nameA < nameB) { - return -1 - } - if (nameA > nameB) { - return 1 - } - return 0; - }); - } - - var totalSize = 0, - dataBlock = [], - entryHeaders = [], - dindex = 0; - - mainHeader.size = 0; - mainHeader.offset = 0; - - entryList.forEach(function (entry) { - // compress data and set local and entry header accordingly. Reason why is called first - var compressedData = entry.getCompressedData(); - // data header - entry.header.offset = dindex; - var dataHeader = entry.header.dataHeaderToBinary(); - var c = entry.entryName + entry.extra.toString(); - var postHeader = Buffer.alloc(c.length, c); - var dataLength = dataHeader.length + postHeader.length + compressedData.length; - - dindex += dataLength; - - dataBlock.push(dataHeader); - dataBlock.push(postHeader); - dataBlock.push(compressedData); - - var entryHeader = entry.packHeader(); - entryHeaders.push(entryHeader); - mainHeader.size += entryHeader.length; - totalSize += (dataLength + entryHeader.length); - }); - - totalSize += mainHeader.mainHeaderSize; // also includes zip file comment length - // point to end of data and beginning of central directory first record - mainHeader.offset = dindex; - - dindex = 0; - var outBuffer = Buffer.alloc(totalSize); - dataBlock.forEach(function (content) { - content.copy(outBuffer, dindex); // write data blocks - dindex += content.length; - }); - entryHeaders.forEach(function (content) { - content.copy(outBuffer, dindex); // write central directory entries - dindex += content.length; - }); - - var mh = mainHeader.toBinary(); - if (_comment) { - _comment.copy(mh, Utils.Constants.ENDHDR); // add zip file comment - } - - mh.copy(outBuffer, dindex); // write main header - - return outBuffer - }, - - toAsyncBuffer: function (/*Function*/onSuccess, /*Function*/onFail, /*Function*/onItemStart, /*Function*/onItemEnd) { - if (entryList.length > 1) { - entryList.sort(function (a, b) { - var nameA = a.entryName.toLowerCase(); - var nameB = b.entryName.toLowerCase(); - if (nameA > nameB) { - return -1 - } - if (nameA < nameB) { - return 1 - } - return 0; - }); - } - - var totalSize = 0, - dataBlock = [], - entryHeaders = [], - dindex = 0; - - mainHeader.size = 0; - mainHeader.offset = 0; - - var compress = function (entryList) { - var self = arguments.callee; - if (entryList.length) { - var entry = entryList.pop(); - var name = entry.entryName + entry.extra.toString(); - if (onItemStart) onItemStart(name); - entry.getCompressedDataAsync(function (compressedData) { - if (onItemEnd) onItemEnd(name); - - entry.header.offset = dindex; - // data header - var dataHeader = entry.header.dataHeaderToBinary(); - var postHeader = Buffer.alloc(name); - var dataLength = dataHeader.length + postHeader.length + compressedData.length; - - dindex += dataLength; - - dataBlock.push(dataHeader); - dataBlock.push(postHeader); - dataBlock.push(compressedData); - - var entryHeader = entry.packHeader(); - entryHeaders.push(entryHeader); - mainHeader.size += entryHeader.length; - totalSize += (dataLength + entryHeader.length); - - if (entryList.length) { - self(entryList); - } else { - - - totalSize += mainHeader.mainHeaderSize; // also includes zip file comment length - // point to end of data and beginning of central directory first record - mainHeader.offset = dindex; - - dindex = 0; - var outBuffer = Buffer.alloc(totalSize); - dataBlock.forEach(function (content) { - content.copy(outBuffer, dindex); // write data blocks - dindex += content.length; - }); - entryHeaders.forEach(function (content) { - content.copy(outBuffer, dindex); // write central directory entries - dindex += content.length; - }); - - var mh = mainHeader.toBinary(); - if (_comment) { - _comment.copy(mh, Utils.Constants.ENDHDR); // add zip file comment - } - - mh.copy(outBuffer, dindex); // write main header - - onSuccess(outBuffer); - } - }); - } - }; - - compress(entryList); - } - } -}; diff --git a/base/util/copyDirSync.js b/base/util/copyDirSync.js index 3c0be699d..794b0ad7e 100644 --- a/base/util/copyDirSync.js +++ b/base/util/copyDirSync.js @@ -1,4 +1,30 @@ -function copyDirSync( source, target ) +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +var fs = require("fs"); +var path = require("path"); + +var copyDirSync = function( source, target ) { var targetFile = target; if ( fs.existsSync( target ) ) @@ -11,11 +37,14 @@ function copyDirSync( source, target ) fs.copyFileSync(source, targetFile); } -function copyFolderRecursiveSync( source, target, _root ) +var copyFolderRecursiveSync = function( source, target, _root ) { var files = []; var targetFolder = path.join( target, path.basename( source ) ); - if(_root) targetFolder = target; + if(_root) + { + targetFolder = target; + } if ( !fs.existsSync( targetFolder ) ) { fs.mkdirSync( targetFolder ); @@ -24,17 +53,18 @@ function copyFolderRecursiveSync( source, target, _root ) if ( fs.lstatSync( source ).isDirectory() ) { files = fs.readdirSync( source ); - files.forEach( function ( file ) + for(var i = 0; i < files.length; i++) { - var curSource = path.join( source, file ); + var curSource = path.join( source, files[i] ); if ( fs.lstatSync( curSource ).isDirectory() ) { copyFolderRecursiveSync( curSource, targetFolder ); - } else + } + else { copyDirSync( curSource, targetFolder ); } - } ); + } } } diff --git a/base/util/copyRecursive.js b/base/util/copyRecursive.js index 480b06f9e..44b794d56 100644 --- a/base/util/copyRecursive.js +++ b/base/util/copyRecursive.js @@ -1,3 +1,6 @@ +var fs = require("fs"); +var path = require("path"); + var copyRecursiveSync = function(src, dest) { if(!fs.existsSync(src)) @@ -8,7 +11,7 @@ var copyRecursiveSync = function(src, dest) if(fs.lstatSync( src ).isDirectory()) { var _newDest = path.dirname(dest); - copyDirSync(src, _newDest, true); + global.copyDirSync(src, _newDest, true); } else { @@ -21,7 +24,7 @@ var copyRecursiveSync = function(src, dest) while(path.dirname(_newDest) != _newDest) { _newDest = path.dirname(_newDest); - if(_newDest.indexOf(NECTAR_PATH) == 0) + if(_newDest.indexOf(global.NERD_PATH) == 0) { _path.push(_newDest); } diff --git a/base/util/flash.js b/base/util/flash.js index 960c923f0..131e43a3e 100644 --- a/base/util/flash.js +++ b/base/util/flash.js @@ -1,58 +1,58 @@ -module.exports = Flash; +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ var fs = require("fs"); var path = require("path"); -function Flash(from, to, target, verb) -{ - switch(target) - { - case "uno": - execFlashArduino(from, to, "ATMEGA328P", "arduino", "19200", verb) - break; - case "mega1280": - execFlashArduino(from, to, "m1280", "arduino", "57600", verb) - break; - case "mega2560": - execFlashArduino(from, to, "m2560", "wiring", "115200", verb) - break; - case "nucleo-l152re": - case "nucleo-l432kc": - execFlashSTM32(from, to); - break; - default: - console.log("Nothing to do for target : " + target); - break; - } -} -function execFlashArduino(from, to, model, driver, bauds, verb) + +var execFlashArduino = function(from, to, model, driver, bauds, verb) { - var spawn = require('child_process').spawn; - var _flash = spawn('avrdude', ['-p', model, "-c", driver, "-P", to, "-b", bauds, "-F", "-U", "flash:w:"+from]); + var spawn = require("child_process").spawn; + var _flash = spawn("avrdude", ["-p", model, "-c", driver, "-P", to, "-b", bauds, "-F", "-U", "flash:w:"+from]); - _flash.stdout.on('data', function(data) + _flash.stdout.on("data", function(data) { if(verb) process.stdout.write(data.toString()); }); - _flash.stderr.on('data', function(data) + _flash.stderr.on("data", function(data) { if(verb) process.stdout.write(data.toString()); }); - _flash.on('error', function(err) + _flash.on("error", function(err) { console.log("[!] Error :"); - console.log(err) + console.log(err); }); - _flash.on('close', function(code) + _flash.on("close", function(code) { - console.log("[+] Flashed") + console.log("[+] Flashed"); }); } -function execFlashSTM32(from, to) +var execFlashSTM32 = function(from, to) { try { @@ -61,7 +61,32 @@ function execFlashSTM32(from, to) } catch(e) { - console.log("[!] Your file is compiled, but an error occured while flashing, please try again.") + console.log("[!] Your file is compiled, but an error occured while flashing, please try again."); } } + + +var Flash = function(from, to, target, verb) +{ + switch(target) + { + case "uno": + execFlashArduino(from, to, "ATMEGA328P", "arduino", "19200", verb); + break; + case "mega1280": + execFlashArduino(from, to, "m1280", "arduino", "57600", verb); + break; + case "mega2560": + execFlashArduino(from, to, "m2560", "wiring", "115200", verb); + break; + case "nucleo-l152re": + case "nucleo-l432kc": + execFlashSTM32(from, to); + break; + default: + console.log("Nothing to do for target : " + target); + break; + } +} +module.exports = Flash; \ No newline at end of file diff --git a/base/util/getExt.js b/base/util/getExt.js index c6937cfae..834e8e3c0 100644 --- a/base/util/getExt.js +++ b/base/util/getExt.js @@ -1,6 +1,27 @@ -module.exports = getExt; +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors -function getExt(target) + 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. + +*/ + +var getExt = function(target) { switch(target) { @@ -39,3 +60,4 @@ function getExt(target) break; } } +module.exports = getExt; \ No newline at end of file diff --git a/base/util/getTips.js b/base/util/getTips.js index b8387468d..b3407974b 100644 --- a/base/util/getTips.js +++ b/base/util/getTips.js @@ -1,6 +1,27 @@ -module.exports = getTips; +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors -function getTips(target, file) + 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. + +*/ + +var getTips = function(target, file) { switch(target) { @@ -8,19 +29,19 @@ function getTips(target, file) return ""; break; case "asm-js": - return "[*] Tips : run this file with node : 'node " + file + "', or embed it in a .html page with " + return "[*] Tips : run this file with node : 'node " + file + "', or embed it in a .html page with "; break; case "wast": return ""; break; case "win-x86-32": case "win-x86-64": - return "[*] Tips : on Linux, you can run this .exe with Wine : 'wine " + file + "'" + return "[*] Tips : on Linux, you can run this .exe with Wine : 'wine " + file + "'"; break; case "linux-x86-32": case "linux-x86-64": case "linux-arm32v7": - return "[*] Tips : on Linux, don't forget to : 'chmod +x " + file + "'." + return "[*] Tips : on Linux, don't forget to : 'chmod +x " + file + "'."; break; case "arduino-uno": return "[*] Tips : avrdude -p ATMEGA328P -c arduino -P [COMPORT] -b 19200 -F -U flash:w:" + file; @@ -33,9 +54,11 @@ function getTips(target, file) break; case "nucleo-l152re": case "nucleo-l432kc": - return "[*] Connect your nucleo on your computer, and symple copy/paste " + file + " on the nucleo drive" + return "[*] Connect your nucleo on your computer, and symple copy/paste " + file + " on the nucleo drive"; default: return ""; break; } } + +module.exports = getTips; \ No newline at end of file diff --git a/base/util/httpUtils.js b/base/util/httpUtils.js deleted file mode 100644 index f3304d526..000000000 --- a/base/util/httpUtils.js +++ /dev/null @@ -1,79 +0,0 @@ -var http = require("http"); -var https = require("https"); - -module.exports.httpUtil = new httpUtil(http); -module.exports.httpsUtil = new httpUtil(https); - -/** - * httpUtil Catalog of standard http call - * @class httpUtil - * @name httpUtil - * -*/ -function httpUtil(httpHandler) -{ - - /** - * Send a http request. - * @memberof httpUtil - * - */ - this.httpReq = function(opt, cbError, cbOk, encoding) - { - var data = ""; - if(opt.data) data = opt.data; - - if(!encoding) encoding = "utf8"; - opt.path = encodeURI(opt.path); - var request = httpHandler.request(opt); - request.on("error", function(err) - { - cbError(err); - - }); - request.on("response", function(response) - { - var data = ""; - response.on("data", function(chunk) - { - data += chunk.toString(encoding); - }); - response.on("end", function() - { - cbOk(data); - }); - }); - request.end(data); - return; - }; - - /** - * Send a http request and redirect output in a pipe, then call a callback when finished. - * @memberof httpUtil - * - */ - this.httpReqPipe = function(opt, cbError,cbPipe, cbOk) - { - var data = ""; - if(opt.data) data = opt.data; - opt.path = encodeURI(opt.path); - var request = httpHandler.request(opt); - request.on("error", function(err) - { - cbError(err); - - }); - request.on("response", function(response) - { - if(cbPipe) - cbPipe(response); - response.on("end", function() - { - if(cbOk) - cbOk(); - }); - }); - request.end(data); - return; - }; -} diff --git a/base/util/initModule.js b/base/util/initModule.js deleted file mode 100644 index e45e70d4c..000000000 --- a/base/util/initModule.js +++ /dev/null @@ -1,29 +0,0 @@ -function initModule(_author, _name) -{ - try - { - fs.mkdirSync("nectar_modules"); - } catch(e){} - - var _dest = path.join("nectar_modules", _name); - try - { - fs.mkdirSync(_dest); - } - catch(e) - { - console.log("[!] An error occured while trying to create the module folder: " + _name); - console.log(e); - process.exit(-1); - } - - var _pkg = fs.readFileSync(path.join(NECTAR_PATH, "base", "squel", "package.json")).toString(); - - _pkg = _pkg.replace(/{{AUTHOR}}/g, _author).replace(/{{MODULE_NAME}}/g, _name) - - fs.writeFileSync(path.join(_dest, "package.json"), _pkg); - fs.appendFileSync(path.join(_dest, "index.js"), "// Write your module code here"); - console.log("[+] Module " + _name + " correctly initialized in " + _dest); -} - -module.exports = initModule; \ No newline at end of file diff --git a/base/util/installModule.js b/base/util/installModule.js deleted file mode 100644 index 31d32e10a..000000000 --- a/base/util/installModule.js +++ /dev/null @@ -1,49 +0,0 @@ -function installModule(_name) -{ - try - { - fs.mkdirSync("nectar_modules"); - }catch(e){} - - try - { - fs.mkdirSync(".nectar"); - }catch(e){} - - var _zip = _name + ".zip" - var _tmp = path.join(".nectar", _zip); - var _dest = path.join("nectar_modules"); - - const file = fs.createWriteStream(_tmp); - - var opt = - { - "host": "modules.nectarjs.org", - "path": "/" + _zip, - } - - function onError(_err) - { - console.log(_err); - console.log("[!] Module " + _name + " does not exist"); - } - - function pipe(_res) - { - _res.pipe(file); - } - - function onSuccess() - { - var unzip = new Zip(_tmp); - unzip.extractAllTo(_dest, true); - rmdir(_tmp, function() - { - console.log("[+] Module " + _name + " installed"); - }); - } - - coreHttp.httpsUtil.httpReqPipe(opt, onError, pipe, onSuccess); -} - -module.exports = installModule; \ No newline at end of file diff --git a/base/util/lint.js b/base/util/lint.js deleted file mode 100644 index 9f33777e9..000000000 --- a/base/util/lint.js +++ /dev/null @@ -1,52 +0,0 @@ -var Linter = require("eslint").Linter; -var linter = new Linter(); - -function nectarLint(_code, _file, _expose) -{ - var _fatal = false; - - if(!COMPILER.ENV.check.globals) COMPILER.ENV.check.globals = {}; - - if(_expose) - { - for(var i = 0; i < _expose.length; i++) - { - COMPILER.ENV.check.globals[_expose[i]] = false; - } - } - - if(CLI.cli["--no-undef-error"]) - { - COMPILER.ENV.check.rules["no-undef"] = "error"; - } - - if(CLI.cli["--no-undef-warn"]) - { - COMPILER.ENV.check.rules["no-undef"] = "warn"; - } - - if(CLI.cli["--no-semi-error"]) - { - COMPILER.ENV.check.rules["semi"] = ["error", "always"]; - } - - if(CLI.cli["--no-semi-warn"]) - { - COMPILER.ENV.check.rules["semi"] = ["warn", "always"]; - } - - - var _res = linter.verify(_code, COMPILER.ENV.check, { filename: _file }); - for(var i = 0; i < _res.length; i++) - { - if(_res[i].severity > 1) - { - _fatal = true; - console.log("[error]", _res[i].message, "line", _res[i].line, "column", _res[i].column, "in file", _file); - } - else console.log("[warning]", _res[i].message, "line", _res[i].line, "column", _res[i].column, "in file", _file); - } - if(_fatal) process.exit(1); -} - -module.exports = nectarLint; diff --git a/base/util/rmdir.js b/base/util/rmdir.js deleted file mode 100644 index 6c0ee8cd8..000000000 --- a/base/util/rmdir.js +++ /dev/null @@ -1,79 +0,0 @@ -var rmdir = function(dir, callback) -{ - fs.readdir(dir, function(err, list) - { - if(err) - { - try - { - fs.unlink(dir, function(err) - { - callback(err); - }); - } - catch(e){} - } - else - { - var i = 0; - var j = list.length; - var cb = function(){ fs.rmdir(dir, function(err){if(callback && typeof callback == "function") callback(err);});}; - recursiveRm(dir, i, j, list, cb); - return; - } - }); - - function recursiveRm(from, i, j, list, cb) - { - - function nextFile() - { - i++; - if(i < j) - { - recursiveRm(from, i, j, list, cb); - } - else - { - if(cb && typeof cb == "function") - cb(); - } - } - var filename = ""; - - try - { - filename = path.join(from, list[i]); - } - catch(e) - { - nextFile(); - return; - } - - fs.stat(filename, function(err, stat) - { - if(err) - { - nextFile(); - } - else if(stat.isDirectory()) - { - if(filename) - { - rmdir(filename, nextFile); - } - else - { - nextFile(); - } - } - else - { - fs.unlink(filename, nextFile); - } - }); - } -}; - -module.exports = rmdir; \ No newline at end of file diff --git a/compiler/native/compiler.js b/compiler/native/compiler.js index 777aa7ef8..8d83b5ef9 100644 --- a/compiler/native/compiler.js +++ b/compiler/native/compiler.js @@ -1,43 +1,25 @@ /* - * This file is part of NectarJS - * Copyright (c) 2017 - 2020 Adrien THIERRY - * http://nectarjs.com - https://seraum.com/ - * - * sources : https://github.com/nectarjs/nectarjs - * - * NectarJS is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * NectarJS is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with NectarJS. If not, see . - * - */ - -global.strip = require("strip-comments"); -global.babel = require( '@babel/core' ); -babel.generate = require( '@babel/generator' ).default; + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors - var visitor = require("./visitor/visitor.js"); - -var genRequire = require("./lib/genRequire.js"); -global.genMetaFunction = require("./lib/genMetaFunction.js"); -global.genPackage = require("./lib/genPackage.js"); -global.replaceObjAddr = require("./lib/replaceObjAddr.js"); + 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: -var createFunction = require("./lib/createFunction.js"); -var createAnon = require("./lib/createAnon.js"); -var createReturnAnon = require("./lib/createReturnAnon.js"); -var createClass = require("./lib/createClass.js"); -var hoistingFunction = require("./lib/hoistingFunction.js"); + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. -global.RND = function() { return "__" + Math.random().toString(36).substring(7); }; + 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. + +*/ global.ENV = loadEnv(); function loadEnv() @@ -54,45 +36,6 @@ function loadEnv() return _res; } -function setRegister(_value) -{ - try - { - COMPILER.REGISTER = parseInt(_value) - console.log("[*] Set register at: " + COMPILER.REGISTER); - } - catch(e) - { - console.log("[!] Invalid register, integer needed"); - process.exit(1); - } -} - -var FAST_CALL = ["BinaryExpression", "NumericLiteral"]; -function checkFastFunction() -{ - for(var i in COMPILER.INFO.SCOPE) - { - for(var j = 0; j < COMPILER.INFO.SCOPE[i].use.length; j++) - { - if(COMPILER.INFO.SCOPE[i].init.indexOf(COMPILER.INFO.SCOPE[i].use[j]) < 0) - { - COMPILER.INFO.SCOPE[i].fast = false; - break; - } - } - - for(var j = 0; j < COMPILER.INFO.SCOPE[i].call.length; j++) - { - if(FAST_CALL.indexOf(COMPILER.INFO.SCOPE[i].call[j]) < 0) - { - COMPILER.INFO.SCOPE[i].fast = false; - break; - } - } - } -} - function Compiler() { var _handler = this; @@ -106,6 +49,7 @@ function Compiler() this.LIBS = ""; this.STATE = ""; this.PACK = []; + this.DIR = []; if(CLI.stack[0]) this.PATH = path.dirname(CLI.stack[0]) + path.sep; @@ -132,31 +76,21 @@ function Compiler() this.OUT = ""; this.TMP_FOLDER = ""; this.OPTION = ""; - this.REGISTER = 100000; - - this.DECL = []; - - this.FFI = []; - + this.INIT = ""; - + this.DECL = ""; this.REQUIRE = ""; - - this.READ_ONLY = []; + this.INCLUDE = ""; this.INFO = { - Function: [], + FUNCTION: [], CACHE: {}, VALUE: [], CALL: {}, SCOPE: {}, HOISTING: [], }; - - this.GLOBAL = ["__NJS_THIS", "parseInt", "setImmediate", "setTimeout", "setInterval"]; - - this.VAR_STATE = [[]]; if(this.ENV.stdlib) { @@ -164,94 +98,41 @@ function Compiler() { if(typeof this.ENV.stdlib[_s] == "string") { - this.DECL.push("var " + this.ENV.stdlib[_s] + ";"); + this.DECL += "var " + this.ENV.stdlib[_s] + ";"; this.STD += this.ENV.stdlib[_s] + " = require(\"" + this.ENV.stdlib[_s] + "\");"; } else if(typeof this.ENV.stdlib[_s] == "object") { - this.DECL.push("var " + this.ENV.stdlib[_s].bind + ";"); + this.DECL += "var " + this.ENV.stdlib[_s].bind + ";"; this.STD += this.ENV.stdlib[_s].bind + " = require(\"" + this.ENV.stdlib[_s].module + "\");"; } } } - if(this.ENV.check && this.ENV.check.globals) - { - for(var g in this.ENV.check.globals) - { - this.VAR_STATE[0].push(g); - } - } this.CODE = ""; this.FOOTER = ""; /*** METHODS ***/ - this.Parse = function(_code) + this.Parse = function(code, _file) { - _code = strip(_code); - if(CLI.cli["--preset"] && CLI.cli["--preset"].argument == "speed") - { - _code = babel.transformSync(_code, - { - plugins: [path.join(NECTAR_PATH, "node_modules", "babel-plugin-remove-unused-vars"), - path.join(NECTAR_PATH, "node_modules", "babel-plugin-minify-dead-code-elimination"), - path.join(NECTAR_PATH, "node_modules", "babel-plugin-minify-guarded-expressions")], - }).code; - } - - if(!CLI.cli["--no-check"]) LINT(_code, this.IN); - - - - _code = genRequire(_handler.PATH, COMPILER.STD) + genRequire(_handler.PATH, _code); - - COMPILER.STATE = "REQUIRE"; - COMPILER.REQUIRE = babel.transformSync(COMPILER.REQUIRE, visitor).code; - checkFastFunction(); - COMPILER.REQUIRE = createClass(COMPILER.REQUIRE); - COMPILER.REQUIRE = createFunction(COMPILER.REQUIRE); - COMPILER.REQUIRE = createAnon(COMPILER.REQUIRE); - COMPILER.REQUIRE = createReturnAnon(COMPILER.REQUIRE); - - COMPILER.STATE = "CODE"; - - _handler.CODE = babel.transformSync(_code, visitor).code; - _code = hoistingFunction(_code); - checkFastFunction(); - _handler.CODE = createClass(_handler.CODE, true); - - _handler.CODE = createFunction(_handler.CODE, true); - _handler.CODE = createAnon(_handler.CODE, true); - _handler.CODE = createReturnAnon(_handler.CODE, true); - - var _hoisting = ""; - for(var i = 0; i < COMPILER.INFO.HOISTING.length; i++) - { - _hoisting += "var " + COMPILER.INFO.HOISTING[i] + ";"; - } - _handler.CODE = _handler.CODE; - - COMPILER.INIT += COMPILER.REQUIRE + _hoisting; - - _handler.DECL = _handler.DECL.filter(function(v,i) - { - return _handler.DECL.indexOf(v) === i; - }).join(";"); - - _handler.MAIN = _handler.MAIN.replace("{CODE}", _handler.CODE); - _handler.MAIN = _handler.MAIN.replace("{INIT}", _handler.INIT); - _handler.MAIN = _handler.MAIN.replace("{DECL}", _handler.DECL); - _handler.MAIN = _handler.MAIN.replace("{INCLUDE}", _handler.FFI.join(os.EOL)); + var _env = createEnv(_handler.PATH, _file); + code = this.STD + code; + parseCode(code, 0, _env); + parseAST(_env); + var _generated = generateCode(_env); + _handler.MAIN = _handler.MAIN.replace("{CODE}", _generated); + _handler.MAIN = _handler.MAIN.replace("{INIT}", COMPILER.INIT); + _handler.MAIN = _handler.MAIN.replace("{DECL}", COMPILER.DECL); + _handler.MAIN = _handler.MAIN.replace("{INCLUDE}", COMPILER.INCLUDE); _handler.MAIN = _handler.MAIN.replace("{{__PLATFORM__}}", os.platform()); - } this.Prepare = function(_folder) { if((!CLI.cli["--profile"]) || CLI.cli["--profile"].argument != "use") { - copyDirSync(path.join(__dirname, "nectarcpp", "src"), _folder, true); + copyDirSync(path.join(__dirname, "nerdcore"), _folder, false); } }; @@ -273,6 +154,8 @@ function Compiler() this.Compile = function(_folder, _file) { + + fs.writeFileSync(_file, _handler.MAIN); process.chdir(_folder); var _exec = _handler.CLI(_handler.COMPILER, _handler.OUT, _file, _handler.OPTION); execSync(_exec); diff --git a/compiler/native/env/android.js b/compiler/native/env/android.js deleted file mode 100644 index 4da81c09e..000000000 --- a/compiler/native/env/android.js +++ /dev/null @@ -1,109 +0,0 @@ -var os = require("os"); - -var ANDROID = -{ - name: "android", - main: "android.cpp", - compiler: "gradlew", - stdlib: [{bind: "Nectar", module: "android"}, "Object", "Math", "JSON"], - check: - { - "env": - { - "es6": true - }, - "extends": "eslint:recommended", - "rules": - { - "strict": "global", - "no-console": "off", - "indent": "off", - "linebreak-style": "off", - "no-unused-vars": ["warn", { "vars": "all", "args": "after-used", "ignoreRestSiblings": false }], - "no-const-assign": "error", - }, - "globals": - { - "undefined": false, - "eval": false, - "__njs_typeof": false, - "console": false, - "module": false, - "require": false, - "__Nectar_Log_Console": false, - "__Nectar_InitVar": false, - "__Nectar_Object_Keys": false, - "__Nectar_Object_Stringify": false, - "__Nectar_Call_Function": false, - "__NJS_ARGS": false, - "__NJS_ENV": false, - "__NJS_PLATFORM": false, - "__Nectar_typeof": false, - "__Nectar_THIS": false, - "__Nectar_instanceof": false, - "__Nectar_delete": false, - "JSON": false, - "Object": false, - "isNaN": false, - "Array": false, - }, - }, - cli: function(compiler, preset, out, _in, option) - { - - var _pre = "./"; - if(os.platform() == "win32") _pre = ""; - var apkOut = ""; - - if(CLI.cli["--target"] && CLI.cli["--target"].argument) - { - if(CLI.cli["--target"].argument == "release") - { - apkOut = path.join(COMPILER.TMP_FOLDER, "app", "build", "outputs", "apk", "release", "app-release-unsigned.apk"); - } - else if(CLI.cli["--target"].argument == "debug") - { - apkOut = path.join(COMPILER.TMP_FOLDER, "app", "build", "outputs", "apk", "debug", "app-debug.apk"); - } - else - { - console.log("[!] Error: accepted target are: debug or release"); - } - - } - else - { - apkOut = path.join(COMPILER.TMP_FOLDER, "app", "build", "outputs", "apk", "debug", "app-debug.apk"); - } - - return `${_pre}${compiler} build && cp ${apkOut} ${out}`; - }, - out: function(_name) - { - return _name + ".apk"; - }, - init: function(_folder) - { - copyDirSync(path.join(COMPILER.MAIN_PATH, "platform", "android"), _folder, true); - }, - prepare: function(_folder) - { - var _www = path.join(path.resolve(path.dirname(COMPILER.IN)), "www"); - if(fs.existsSync(_www)) - { - copyDirSync(_www, path.join(_folder, "app", "src", "main", "assets", "raw"), true); - } - var _name = path.basename(COMPILER.IN).split(".")[0]; - fs.writeFileSync(path.join(_folder, "local.properties"), `ndk.dir=${CONFIG.ndk}\nsdk.dir=${CONFIG.sdk}\ngradle=build -x lint -x lintVitalRelease\n`); - fs.writeFileSync(path.join(_folder, "settings.gradle"), `rootProject.name='nectar_android_app'\ninclude ':app'\n`); - - return path.join(_folder, "app", "src", "main", "cpp"); - }, - write: function(_content) - { - fs.writeFileSync(path.join(COMPILER.TMP_FOLDER, "app", "src", "main", "cpp", "native-lib.cpp"), _content); - } - -} - -module.exports = ANDROID; diff --git a/compiler/native/env/arduino.js b/compiler/native/env/arduino.js index 2200e95bf..c4136195b 100644 --- a/compiler/native/env/arduino.js +++ b/compiler/native/env/arduino.js @@ -41,14 +41,15 @@ var ARDUINO = if(!target || !OPTIONS[target]) { - console.log("[!] No target selected, switching to 'uno'"); + console.log("[!] No target or bad target selected, switching to 'uno'"); target = "uno"; } - var _cli = `${compiler} ${OPTIONS[target].preset} -D__Nectar__OBJECT_VECTOR -DARDUINO_ARCH_AVR -w -Os -fno-exceptions -fno-rtti -fno-stack-protector -fomit-frame-pointer -ffunction-sections -fdata-sections -Wl,--gc-sections \ - -I ${extern}/avr -I ${extern}/arduino/avr/variants/${OPTIONS[target].variant}/ -I ${extern}/arduino/avr/cores/arduino -I ${extern}/avr/include -I ${extern}/stlarduino ${extern}/stlarduino/ios.cpp ${extern}/arduino/avr/cores/arduino/abi.cpp -fno-threadsafe-statics -lm ${COMPILER.LIBS} -o ${out} ${_in} ${_cliOption}`; + var _cli = `${compiler} ${OPTIONS[target].preset} -D__NERD__OBJECT_VECTOR -DARDUINO_ARCH_AVR -w -Os -fno-exceptions -fno-rtti -fno-stack-protector -fomit-frame-pointer -ffunction-sections -fdata-sections -Wl,--gc-sections \ + -I ${extern}/arduino/avr -I ${extern}/arduino/avr/variants/${OPTIONS[target].variant}/ -I ${extern}/arduino/avr/cores/arduino -I ${extern}/arduino/stlarduino ${extern}/arduino/stlarduino/ios.cpp ${extern}/arduino/avr/cores/arduino/abi.cpp ${extern}/arduino/stlarduino/new*.cpp ${extern}/arduino/stlarduino/char_traits.cpp ${extern}/arduino/stlarduino/del*.cpp ${extern}/arduino/stlarduino/stdexcept.cpp ${extern}/arduino/stlarduino/func_exception.cpp ${extern}/arduino/stlarduino/ostream_helpers.cpp -fno-threadsafe-statics -lm ${COMPILER.LIBS} -o ${out} ${_in} ${_cliOption}`; if(!OPT.elf) _cli += `&& avr-objcopy -O ihex -R .eeprom ${out}`; if(OPT.cli) console.log("[*]" + _cli); + return _cli; }, compiler: "avr-g++ -std=c++17", @@ -60,47 +61,7 @@ var ARDUINO = else _name += ".hex"; return _name; }, - check: { - "env": { - "es6": true - }, - "extends": "eslint:recommended", - "rules": { - "global-require": "error", - "no-console": "error", - "indent": "off", - "linebreak-style": "off", - "no-unused-vars": ["warn", { "vars": "all", "args": "after-used", "varsIgnorePattern": "setup|loop", "ignoreRestSiblings": false }], - "no-const-assign": "error", - }, - "globals": - { - "undefined": false, - "eval": false, - "__njs_typeof": false, - "console": false, - "module": false, - "require": false, - "__Nectar_Log_Console": false, - "__Nectar_InitVar": false, - "__Nectar_Object_Keys": false, - "__Nectar_Object_Stringify": false, - "__Nectar_Call_Function": false, - "__NJS_ARGS": false, - "__NJS_ENV": false, - "__NJS_PLATFORM": false, - "__Nectar_typeof": false, - "__Nectar_THIS": false, - "__Nectar_instanceof": false, - "__Nectar_delete": false, - "__Nectar_EQUAL_VALUE_AND_TYPE": false, - "__Nectar_NOT_EQUAL_VALUE_AND_TYPE": false, - "JSON": false, - "Object": false, - "isNaN": false, - "Array": false, - } - } + } -module.exports = ARDUINO; +module.exports = ARDUINO; \ No newline at end of file diff --git a/compiler/native/env/esp32.js b/compiler/native/env/esp32.js deleted file mode 100644 index f89562b75..000000000 --- a/compiler/native/env/esp32.js +++ /dev/null @@ -1,73 +0,0 @@ -var os = require("os"); - -var ESP32 = -{ - name: "esp32", - main: "esp32.cpp", - compiler: "idf.py", - stdlib: [], - check: - { - "env": - { - "es6": true - }, - "extends": "eslint:recommended", - "rules": - { - "strict": "global", - "no-console": "off", - "indent": "off", - "linebreak-style": "off", - "no-unused-vars": ["warn", { "vars": "all", "args": "after-used", "ignoreRestSiblings": false }], - "no-const-assign": "error", - }, - "globals": - { - "undefined": false, - "eval": false, - "__njs_typeof": false, - "console": false, - "module": false, - "require": false, - "__Nectar_Log_Console": false, - "__Nectar_InitVar": false, - "__Nectar_Object_Keys": false, - "__Nectar_Object_Stringify": false, - "__Nectar_Call_Function": false, - "__NJS_ARGS": false, - "__NJS_ENV": false, - "__NJS_PLATFORM": false, - "__Nectar_typeof": false, - "__Nectar_THIS": false, - "__Nectar_instanceof": false, - "__Nectar_delete": false, - "__Nectar_EQUAL_VALUE_AND_TYPE": false, - "__Nectar_NOT_EQUAL_VALUE_AND_TYPE": false, - "JSON": false, - "Object": false, - "isNaN": false, - "Array": false, - }, - }, - cli: function(compiler, preset, out, _in, option) - { - var bin = path.join(COMPILER.TMP_FOLDER, "build", "njs.bin"); - return `${compiler} build && cp ${bin} ${out}`; - }, - out: function(_name) - { - return _name + ".bin"; - }, - init: function(_folder) - { - copyDirSync(path.join(COMPILER.MAIN_PATH, "platform", "esp32"), _folder, true); - }, - write: function(_content) - { - fs.writeFileSync(path.join(COMPILER.TMP_FOLDER, "esp32.cpp"), _content); - } - -} - -module.exports = ESP32; diff --git a/compiler/native/env/ios.js b/compiler/native/env/ios.js deleted file mode 100644 index 271988ff5..000000000 --- a/compiler/native/env/ios.js +++ /dev/null @@ -1,115 +0,0 @@ -var os = require("os"); - -var IOS = -{ - name: "ios", - main: "ios.hpp", - compiler: "xcodebuild", - stdlib: [{bind: "Nectar", module: "iOS"}, "console", "Object", "Math", "JSON" ], - check: - { - "env": - { - "es6": true - }, - "extends": "eslint:recommended", - "rules": - { - "strict": "global", - "no-console": "off", - "indent": "off", - "linebreak-style": "off", - "no-unused-vars": ["warn", { "vars": "all", "args": "after-used", "ignoreRestSiblings": false }], - "no-const-assign": "error", - }, - "globals": - { - "undefined": false, - "eval": false, - "__njs_typeof": false, - "console": false, - "module": false, - "require": false, - "__Nectar_Log_Console": false, - "__Nectar_InitVar": false, - "__Nectar_Object_Keys": false, - "__Nectar_Object_Stringify": false, - "__Nectar_Call_Function": false, - "__NJS_ARGS": false, - "__NJS_ENV": false, - "__NJS_PLATFORM": false, - "__Nectar_typeof": false, - "__Nectar_THIS": false, - "__Nectar_instanceof": false, - "__Nectar_delete": false, - "__Nectar_EQUAL_VALUE_AND_TYPE": false, - "__Nectar_NOT_EQUAL_VALUE_AND_TYPE": false, - "JSON": false, - "Object": false, - "isNaN": false, - "Array": false, - }, - }, - out: function(_name) - { - return _name + ".app"; - }, - init: function(_folder) - { - copyDirSync(path.join(COMPILER.MAIN_PATH, "platform", "ios"), _folder, true); - }, - write: function(code) - { - fs.writeFileSync(path.join(COMPILER.TMP_FOLDER, "ios.hpp"), code); - }, - post: function() - { - try - { - fs.mkdirSync(COMPILER.OUT); - } - catch(e){} - copyDirSync (`${COMPILER.TMP_FOLDER}/build/NectarIOS.app`, COMPILER.OUT, true); - }, - run: function() - { - var device; - if(CLI.cli["--target"]) device = '--devicetypeid \'' + CLI.cli["--target"].argument + '\''; - else - { - console.log('Please, specify a target with --run on ios env'); - process.exit(1); - } - var runit = 'ios-sim launch ' + COMPILER.OUT + ' ' + device ; - - try - { - child_process.execSync(runit); - } - catch(e){} - }, - prepare: function(_folder) - { - var _www = path.join(path.resolve(path.dirname(COMPILER.IN)), "www"); - if(fs.existsSync(_www)) - { - copyDirSync(_www, path.join(_folder, "NectarIOS", "raw"), true); - } - - return path.join(_folder, "NectarIOS"); - }, - cli: function(compiler, preset, out, _in, option) - { - var device = ''; - if(CLI.cli["--target"]) - { - var info = CLI.cli["--target"].argument.split(", "); - device = '-destination \'platform=iOS Simulator,name=' + info[0].split("-").join(" ") + ',OS=' + info[1] + '\''; - } - else device = '-destination generic/platform=iOS'; - return `${compiler} build -scheme NectarIOS ${device} CONFIGURATION_BUILD_DIR="${COMPILER.TMP_FOLDER}/build/" CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGN_ENTITLEMENTS="" CODE_SIGNING_ALLOWED="NO"`; - } - -} - -module.exports = IOS; diff --git a/compiler/native/env/js.js b/compiler/native/env/js.js new file mode 100644 index 000000000..262d6b800 --- /dev/null +++ b/compiler/native/env/js.js @@ -0,0 +1,141 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ +var _debug = " -g "; +var JS = +{ + name: "js", + main: "js.cpp", + compiler: "g++", + stdlib: ["console", "JSON", "Module", "process", "RegExp", "Math"], + cli: function(compiler, preset, out, _in, option) + { + var _cachePath = path.join(process.cwd(), "..", "cached_" + COMPILER.ENV.name + "_" + os.platform + "_" + VERSION); + var _precompiled = path.join(_cachePath, "nerd.o"); + + var _stack = 0; + if(CLI.cli["--stack"]) + { + try + { + _stack = parseInt(CLI.cli["--stack"].argument); + } + catch(e) + { + console.log("[!] Error: --stack flags required a number, received -> " + CLI.cli["--stack"].argument); + process.exit(1); + } + } + + if(!fs.existsSync(_precompiled)) + { + + var _args = " -flto -Ofast "; + if(preset == "debug") + { + console.log("Building core with debug"); + _args = _debug; + } + + console.log(`[+] Creating Nerd binary lib for ${COMPILER.ENV.name + "_" + os.platform + "_" + VERSION}`); + console.log(`${compiler} -std=c++17 ${_args} -c nerdcore/src/nerd.cpp -o "${_precompiled}"`); + try { fs.mkdirSync(_cachePath); } catch(e){}; + execSync(`${compiler} -std=c++17 ${_args} -c nerdcore/src/nerd.cpp -o "${_precompiled}"`); + console.log("[+] Compiling with precompiled Nerd lib"); + } + + if(compiler == "cl" || compiler.indexOf("cl ") == 0) + { + console.log("[!] cl is not supported, please use g++, clang++, em++ or avr-g++"); + process.exit(1); + } + + var _hashmap = ""; + if(CLI.cli['--no-object-hashmap']) _hashmap = "-D__NERD__OBJECT_VECTOR"; + + if(_stack) _stack = "-Wl,--stack," + _stack; + else _stack = ""; + + var _sysVNetLibs = ""; + if(os.platform() == "sunos") _sysVNetLibs = "-lsocket -lnsl"; + + var _cliOption = ""; + if(CLI.cli["--option"]) _cliOption = CLI.cli["--option"].argument; + + + if(CLI.cli["--profile"]) + { + if(!CLI.cli["--conserve"]) CLI.cli["--conserve"] = true; + if(CLI.cli["--profile"].argument == "gen") + { + _cliOption += " -fprofile-generate"; + console.log("[*] Profiling data will be stored in: " + COMPILER.TMP_FOLDER); + } + else if(CLI.cli["--profile"].argument == "use") + { + _cliOption += " -fprofile-use"; + console.log("[*] Using profile data from: " + COMPILER.TMP_FOLDER); + } + else + { + console.log("[!] Please use --profile with gen or use"); + } + } + + var _files = `"${_precompiled}" "${_in}"`; + if(os.platform == "win32") _files = `"${_in}" "${_precompiled}"`; + + if(preset == "none") + { + return `${compiler} ${_stack} -std=c++17 ${_files} -g -s ${COMPILER.LIBS} -pthread -o "${out}" ${_sysVNetLibs} ${_cliOption}`; + } + else if(preset == "debug") + { + console.log(`${compiler} ${_stack} -std=c++17 ${_files} ${_debug} -s ${COMPILER.LIBS} -pthread -o "${out}" ${_sysVNetLibs} ${_cliOption}`); + return `${compiler} ${_stack} -std=c++17 ${_files} ${_debug} -s ${COMPILER.LIBS} -pthread -o "${out}" ${_sysVNetLibs} ${_cliOption}`; + } + else if(preset == "size") + { + return `${compiler} ${_stack} -std=c++17 ${_files} -pthread -Os -fno-rtti -fno-stack-protector -fomit-frame-pointer -s ${COMPILER.LIBS} -o "${out}" ${_sysVNetLibs} ${_cliOption}`; + } + else + { + var _opt = "-O"; + if(os.platform() == "darwin" || compiler.indexOf("clang") > -1) _opt += "3"; + else _opt += "fast"; + _opt += " -flto"; + return `${compiler} ${_stack} -std=c++17 ${_files} ${_opt} -pthread -s ${COMPILER.LIBS} -o "${out}" ${_sysVNetLibs} ${_cliOption}`; + } + }, + write: function(_content, _in) + { + if(CLI.cli["--profile"] && CLI.cli["--profile"].argument == "use") + { + return; + } + + fs.writeFileSync(_in, _content); + } + +} + +module.exports = JS; diff --git a/compiler/native/env/node.js b/compiler/native/env/node.js deleted file mode 100644 index e909dfcbb..000000000 --- a/compiler/native/env/node.js +++ /dev/null @@ -1,123 +0,0 @@ -var NODE = -{ - name: "node", - main: "node.cpp", - compiler: "g++", - stdlib: ["console", "Object", "Math", "JSON"], - check: { - "env": { - "node": true, - "es6": true - }, - "extends": "eslint:recommended", - "rules": { - "no-console": "off", - "indent": "off", - "linebreak-style": "off", - "no-unused-vars": ["warn", { "vars": "all", "args": "after-used", "ignoreRestSiblings": false }], - "no-const-assign": "error", - }, - "globals": - { - "undefined": false, - "eval": false, - "__njs_typeof": false, - "console": false, - "module": false, - "require": false, - "__Nectar_Log_Console": false, - "__Nectar_InitVar": false, - "__Nectar_Object_Keys": false, - "__Nectar_Object_Stringify": false, - "__Nectar_Call_Function": false, - "__NJS_ARGS": false, - "__NJS_ENV": false, - "__NJS_PLATFORM": false, - "__Nectar_typeof": false, - "__Nectar_THIS": false, - "__Nectar_instanceof": false, - "__Nectar_delete": false, - "__Nectar_EQUAL_VALUE_AND_TYPE": false, - "__Nectar_NOT_EQUAL_VALUE_AND_TYPE": false, - "JSON": false, - "Object": false, - "isNaN": false, - "Array": false, - } - }, - cli: function(compiler, preset, out, _in, option) - { - var _cachePath = path.join(process.cwd(), "..", "cached_" + COMPILER.ENV.name + "_" + os.platform + "_" + VERSION); - var _precompiled = path.join(_cachePath, "nectar.o"); - - var _stack = 0; - - if(CLI.cli["--stack"]) - { - try - { - _stack = parseInt(CLI.cli["--stack"].argument); - } - catch(e) - { - console.log("[!] Error: --stack flags required a number, received -> " + CLI.cli["--stack"].argument); - process.exit(1); - } - } - - if(!fs.existsSync(_precompiled)) - { - console.log(`[+] Creating Nectar binary lib for ${COMPILER.ENV.name + "_" + os.platform + "_" + VERSION}`); - try { fs.mkdirSync(_cachePath); } catch(e){}; - execSync(`${compiler} -std=c++17 -c nectar.cpp -Ofast -o "${_precompiled}"`); - console.log("[+] Compiling with precompiled Nectar lib"); - } - - if(compiler == "cl" || compiler.indexOf("cl ") == 0) - { - if(_stack) _stack = "/F " + _stack; - else _stack = ""; - - if(preset == "none") return `${compiler} ${_stack} ${_in} /D __NJS_REGISTER_SIZE=${COMPILER.REGISTER} /std:c++14 /D CL_WINDOWS=1 /I "${CONFIG.win_inc_ucrt}" "${CONFIG.win_lib_um}\\Uuid.Lib" "${CONFIG.win_lib_um}\\kernel32.Lib" "${CONFIG.win_lib_ucrt}\\libucrt.lib" /EHsc ${COMPILER.LIBS} /o ${out}`; - else if(preset == "size") return `${compiler} ${_stack} ${_in} /D __NJS_REGISTER_SIZE=${COMPILER.REGISTER} /std:c++14 /D CL_WINDOWS=1 /O1 /I "${CONFIG.win_inc_ucrt}" "${CONFIG.win_lib_um}\\Uuid.Lib" "${CONFIG.win_lib_um}\\kernel32.Lib" "${CONFIG.win_lib_ucrt}\\libucrt.lib" /EHsc ${COMPILER.LIBS} /o ${out}`; - else if(preset == "speed") return `${compiler} ${_stack} ${_in} /D __NJS_REGISTER_SIZE=${COMPILER.REGISTER} /std:c++14 /D CL_WINDOWS=1 /Ox /I "${CONFIG.win_inc_ucrt}" "${CONFIG.win_lib_um}\\Uuid.Lib" "${CONFIG.win_lib_um}\\kernel32.Lib" "${CONFIG.win_lib_ucrt}\\libucrt.lib" /EHsc ${COMPILER.LIBS} /o ${out}`; - } - - var _hashmap = "-D__NJS__OBJECT_HASHMAP"; - if(CLI.cli['--no-object-hashmap']) _hashmap = ""; - - var _uvParam = ""; - if(os.platform() == "win32") _uvParam = `-D_WIN32_WINNT=0x0600 -Wno-narrowing -D_GNU_SOURCE -I${extern}/libuv/include/ -I${extern}/libuv/src/ -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE ${extern}/libuv/src/*.h ${extern}/libuv/src/*.c ${extern}/libuv/src/win/*.h ${extern}/libuv/src/win/*.c`; - - var _uvLib = "-luv "; - if(os.platform() == "win32") _uvLib = "-lm -ladvapi32 -liphlpapi -lpsapi -lshell32 -luser32 -luserenv -lwsock32 -lws2_32"; - if(os.platform() == "sunos") _uvLib += "-lkstat -lsendfile -lsocket -lnsl"; - - if(_stack) _stack = "-Wl,--stack," + _stack; - else _stack = ""; - var _cliOption = ""; - if(CLI.cli["--option"]) _cliOption = CLI.cli["--option"].argument; - - var _files = `"${_precompiled}" "${_in}"`; - if(os.platform == "win32") _files = `"${_in}" "${_precompiled}"`; - - if(preset == "none") - { - return `${compiler} ${_hashmap} -D__NJS_REGISTER_SIZE=${COMPILER.REGISTER} ${_stack} -std=c++17 ${_uvParam} ${_files} -O1 -s ${COMPILER.LIBS} ${_uvLib} -o a.exe && mv a.exe ${out} ${_cliOption}`; - } - else if(preset == "size") - { - return `${compiler} ${_hashmap} -D__NJS_REGISTER_SIZE=${COMPILER.REGISTER} ${_stack} -std=c++17 ${_uvParam} ${_files} -Os -fno-rtti -fno-stack-protector -fomit-frame-pointer -s ${COMPILER.LIBS} ${_uvLib} -o a.exe && mv a.exe ${out} ${_cliOption}`; - } - else - { - var _opt = "-O"; - if(os.platform() == "darwin" || compiler.indexOf("clang") > -1) _opt += "3"; - else _opt += "fast"; - console.log(`${compiler} ${_hashmap} -D__NJS_REGISTER_SIZE=${COMPILER.REGISTER} ${_stack} -std=c++17 ${_uvParam} ${_files} ${_opt} -s ${COMPILER.LIBS} ${_uvLib} -o a.exe && mv a.exe ${out} ${_cliOption}`); - return `${compiler} ${_hashmap} -D__NJS_REGISTER_SIZE=${COMPILER.REGISTER} ${_stack} -std=c++17 ${_uvParam} ${_files} ${_opt} -s ${COMPILER.LIBS} ${_uvLib} -o a.exe && mv a.exe ${out} ${_cliOption}`; - } - } -} - -module.exports = NODE; diff --git a/compiler/native/env/std.js b/compiler/native/env/std.js index eaa85e931..7f55a4df4 100644 --- a/compiler/native/env/std.js +++ b/compiler/native/env/std.js @@ -1,61 +1,36 @@ -//TODO for (NaN == NaN) -> false correctness, we need the -fno-finite-math-only flag with -Ofast +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors -var os = require("os"); + 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. + +*/ +var _debug = " -g "; var STD = { name: "std", main: "std.cpp", compiler: "g++", - stdlib: ["console", {bind:"performance", module:"Performance"}, "Error", "RegExp", "Number", "Object", "Math", "JSON", "Array", "Date"], - check: - { - "env": - { - "es6": true - }, - "extends": "eslint:recommended", - "rules": - { - "strict": "global", - "no-console": "off", - "indent": "off", - "linebreak-style": "off", - "no-unused-vars": ["warn", { "vars": "all", "args": "after-used", "ignoreRestSiblings": false }], - "no-const-assign": "error", - }, - "globals": - { - "undefined": false, - "eval": false, - "__njs_typeof": false, - "console": false, - "module": false, - "require": false, - "__Nectar_Log_Console": false, - "__Nectar_InitVar": false, - "__Nectar_Object_Keys": false, - "__Nectar_Object_Stringify": false, - "__Nectar_Call_Function": false, - "__NJS_ARGS": false, - "__NJS_ENV": false, - "__NJS_PLATFORM": false, - "__Nectar_typeof": false, - "__Nectar_THIS": false, - "__Nectar_instanceof": false, - "__Nectar_delete": false, - "__Nectar_EQUAL_VALUE_AND_TYPE": false, - "__Nectar_NOT_EQUAL_VALUE_AND_TYPE": false, - "JSON": false, - "Object": false, - "isNaN": false, - "Array": false, - }, - }, + stdlib: [], cli: function(compiler, preset, out, _in, option) { var _cachePath = path.join(process.cwd(), "..", "cached_" + COMPILER.ENV.name + "_" + os.platform + "_" + VERSION); - var _precompiled = path.join(_cachePath, "nectar.o"); + var _precompiled = path.join(_cachePath, "nerd.o"); var _stack = 0; if(CLI.cli["--stack"]) @@ -73,10 +48,19 @@ var STD = if(!fs.existsSync(_precompiled)) { - console.log(`[+] Creating Nectar binary lib for ${COMPILER.ENV.name + "_" + os.platform + "_" + VERSION}`); + + var _args = " -flto -Ofast "; + if(preset == "debug") + { + console.log("Building core with debug"); + _args = _debug; + } + + console.log(`[+] Creating Nerd binary lib for ${COMPILER.ENV.name + "_" + os.platform + "_" + VERSION}`); + console.log(`${compiler} -std=c++17 ${_args} -c nerdcore/src/nerd.cpp -o "${_precompiled}"`); try { fs.mkdirSync(_cachePath); } catch(e){}; - execSync(`${compiler} -std=c++17 -c nectar.cpp -Ofast -o "${_precompiled}"`); - console.log("[+] Compiling with precompiled Nectar lib"); + execSync(`${compiler} -std=c++17 ${_args} -c nerdcore/src/nerd.cpp -o "${_precompiled}"`); + console.log("[+] Compiling with precompiled Nerd lib"); } if(compiler == "cl" || compiler.indexOf("cl ") == 0) @@ -85,8 +69,8 @@ var STD = process.exit(1); } - var _hashmap = "-D__Nectar__OBJECT_HASHMAP"; - if(CLI.cli['--no-object-hashmap']) _hashmap = ""; + var _hashmap = ""; + if(CLI.cli['--no-object-hashmap']) _hashmap = "-D__NERD__OBJECT_VECTOR"; if(_stack) _stack = "-Wl,--stack," + _stack; else _stack = ""; @@ -122,19 +106,24 @@ var STD = if(preset == "none") { - return `${compiler} ${_stack} -std=c++17 ${_files} -O1 -s ${COMPILER.LIBS} -lpthread -o "${out}" ${_sysVNetLibs} ${_cliOption}`; + return `${compiler} ${_stack} -std=c++17 ${_files} -g -s ${COMPILER.LIBS} -pthread -o "${out}" ${_sysVNetLibs} ${_cliOption}`; + } + else if(preset == "debug") + { + console.log(`${compiler} ${_stack} -std=c++17 ${_files} ${_debug} -s ${COMPILER.LIBS} -pthread -o "${out}" ${_sysVNetLibs} ${_cliOption}`); + return `${compiler} ${_stack} -std=c++17 ${_files} ${_debug} -s ${COMPILER.LIBS} -pthread -o "${out}" ${_sysVNetLibs} ${_cliOption}`; } else if(preset == "size") { - return `${compiler} ${_stack} -std=c++17 ${_files} -lpthread -Os -fno-rtti -fno-stack-protector -fomit-frame-pointer -s ${COMPILER.LIBS} -o "${out}" ${_sysVNetLibs} ${_cliOption}`; + return `${compiler} ${_stack} -std=c++17 ${_files} -pthread -Os -fno-rtti -fno-stack-protector -fomit-frame-pointer -s ${COMPILER.LIBS} -o "${out}" ${_sysVNetLibs} ${_cliOption}`; } else { var _opt = "-O"; if(os.platform() == "darwin" || compiler.indexOf("clang") > -1) _opt += "3"; else _opt += "fast"; - - return `${compiler} ${_stack} -std=c++17 ${_files} ${_opt} -lpthread -s ${COMPILER.LIBS} -o "${out}" ${_sysVNetLibs} ${_cliOption}`; + _opt += " -flto"; + return `${compiler} ${_stack} -std=c++17 ${_files} ${_opt} -pthread -s ${COMPILER.LIBS} -o "${out}" ${_sysVNetLibs} ${_cliOption}`; } }, write: function(_content, _in) diff --git a/compiler/native/env/stm32.js b/compiler/native/env/stm32.js deleted file mode 100644 index 3faef0bf8..000000000 --- a/compiler/native/env/stm32.js +++ /dev/null @@ -1,70 +0,0 @@ -var STM32 = -{ - name: "stm32", - main: "stm32.cpp", - cli: function(compiler, preset, out, _in, option) - { - if(!COMPILER.TARGET) - { - console.log("[!] Error: please specify a target with --target"); - process.exit(1); - } - - var _mbosSrc = path.join(extern, "stm32", "mbed-os", "nectar"); - copyDirSync(COMPILER.TMP_FOLDER, _mbosSrc, true); - - var _profile = "SIZE"; - if(COMPILER.preset == "speed") _profile = "SPEED"; - - return `cd ${path.join(extern, "stm32")} && ${compiler} compile -m ${COMPILER.TARGET} --profile ${path.join(extern, "stm32", "profile", _profile + ".json")} -t GCC_ARM > stm32_debug_res.txt && mv ${path.join(extern, "stm32", "BUILD", COMPILER.TARGET, "GCC_ARM-" + _profile)}/stm32.bin ${out}`; - }, - clean: function() - { - var _mbosSrc = path.join(extern, "stm32", "mbed-os", "nectar"); - rmdir(_mbosSrc); - }, - compiler: "mbed", - stdlib:[{bind: "Nectar", module: "stm32"}], - check: { - "env": { - "node": true - }, - "extends": "eslint:recommended", - "rules": { - "no-console": "off", - "indent": "off", - "linebreak-style": "off", - "no-unused-vars": ["warn", { "vars": "all", "args": "after-used", "ignoreRestSiblings": false }], - "no-const-assign": "error", - }, - "globals": - { - "undefined": false, - "eval": false, - "__njs_typeof": false, - "console": false, - "module": false, - "require": false, - "__Nectar_Log_Console": false, - "__Nectar_InitVar": false, - "__Nectar_Object_Keys": false, - "__Nectar_Object_Stringify": false, - "__Nectar_Call_Function": false, - "__NJS_ARGS": false, - "__NJS_ENV": false, - "__NJS_PLATFORM": false, - "__Nectar_typeof": false, - "__Nectar_THIS": false, - "__Nectar_instanceof": false, - "__Nectar_delete": false, - "__Nectar_EQUAL_VALUE_AND_TYPE": false, - "__Nectar_NOT_EQUAL_VALUE_AND_TYPE": false, - "JSON": false, - "Object": false, - "isNaN": false, - "Array": false, - } - } -} - -module.exports = STM32; diff --git a/compiler/native/env/test.js b/compiler/native/env/test.js deleted file mode 100644 index 4c312334b..000000000 --- a/compiler/native/env/test.js +++ /dev/null @@ -1,88 +0,0 @@ -var os = require("os"); - -var TEST = -{ - name: "test", - main: "test.cpp", - compiler: "g++", - stdlib: [], - cli: function(compiler, preset, out, _in, option) - { - var _cachePath = path.join(process.cwd(), "..", "cached_" + COMPILER.ENV.name + "_" + os.platform + "_" + VERSION); - var _precompiled = path.join(_cachePath, "nectar.o"); - if(!fs.existsSync(_precompiled)) - { - console.log(`[+] Creating Nectar binary lib for ${COMPILER.ENV.name + "_" + os.platform + "_" + VERSION}`); - try { fs.mkdirSync(_cachePath); } catch(e){}; - execSync(`${compiler} -std=c++17 -c nectar.cpp -Ofast -o "${_precompiled}"`); - console.log("[+] Compiling with precompiled Nectar lib"); - } - - if(compiler == "cl" || compiler.indexOf("cl ") == 0) - { - if(preset == "none") return `${compiler} ${_in} /std:c++17 /D CL_WINDOWS=1 /I "${CONFIG.win_inc_ucrt}" "${CONFIG.win_lib_um}\\Uuid.Lib" "${CONFIG.win_lib_um}\\kernel32.Lib" "${CONFIG.win_lib_ucrt}\\libucrt.lib" /EHsc ${COMPILER.LIBS} /o ${out}`; - else if(preset == "size") return `${compiler} ${_in} /std:c++17 /D CL_WINDOWS=1 /O1 /I "${CONFIG.win_inc_ucrt}" "${CONFIG.win_lib_um}\\Uuid.Lib" "${CONFIG.win_lib_um}\\kernel32.Lib" "${CONFIG.win_lib_ucrt}\\libucrt.lib" /EHsc ${COMPILER.LIBS} /o ${out}`; - else if(preset == "speed") return `${compiler} ${_in} /std:c++17 /D CL_WINDOWS=1 /Ox /I "${CONFIG.win_inc_ucrt}" "${CONFIG.win_lib_um}\\Uuid.Lib" "${CONFIG.win_lib_um}\\kernel32.Lib" "${CONFIG.win_lib_ucrt}\\libucrt.lib" /EHsc ${COMPILER.LIBS} /o ${out}`; - } - - var _cliOption = ""; - if(CLI.cli["--option"]) _cliOption = CLI.cli["--option"].argument; - - var _files = `"${_precompiled}" "${_in}"`; - if(os.platform == "win32") _files = `"${_in}" "${_precompiled}"`; - - if(preset == "none") - { - return `${compiler} -std=c++17 ${_files} ${option} -I ${extern}/lib/ -s ${COMPILER.LIBS} -o ${out} ${_cliOption}`; - } - else if(preset == "size") - { - return `${compiler} -std=c++17 ${_files} ${option} -I ${extern}/lib/ -fno-rtti -fno-stack-protector -fomit-frame-pointer -s ${COMPILER.LIBS} -o ${out} ${_cliOption}`; - } - else return `${compiler} -std=c++17 ${_files} -I ${extern}/lib/ ${option} -s ${COMPILER.LIBS} -o ${out} ${_cliOption}`; - }, - check: { - "env": { - "es6": true - }, - "extends": "eslint:recommended", - "rules": { - "strict": "global", - "no-console": "off", - "indent": "off", - "linebreak-style": "off", - "no-unused-vars": ["warn", { "vars": "all", "args": "after-used", "ignoreRestSiblings": false }], - "no-const-assign": "error", - }, - "globals": - { - "undefined": false, - "eval": false, - "__njs_typeof": false, - "console": false, - "module": false, - "require": false, - "__Nectar_Log_Console": false, - "__Nectar_InitVar": false, - "__Nectar_Object_Keys": false, - "__Nectar_Object_Stringify": false, - "__Nectar_Call_Function": false, - "__NJS_ARGS": false, - "__NJS_ENV": false, - "__NJS_PLATFORM": false, - "__Nectar_typeof": false, - "__Nectar_THIS": false, - "__Nectar_instanceof": false, - "__Nectar_delete": false, - "__Nectar_EQUAL_VALUE_AND_TYPE": false, - "__Nectar_NOT_EQUAL_VALUE_AND_TYPE": false, - "JSON": false, - "Object": false, - "isNaN": false, - "Array": false, - "$ERROR": false, - } -} -} - -module.exports = TEST; diff --git a/compiler/native/env/wasm.js b/compiler/native/env/wasm.js index 72a8cd045..bb047203f 100644 --- a/compiler/native/env/wasm.js +++ b/compiler/native/env/wasm.js @@ -3,49 +3,7 @@ var WASM = name: "wasm", main: "wasm.cpp", compiler: "em++", - stdlib: [{bind: "Nectar", module: "WASM"},"console", "Math", "JSON"], - check: { - "env": { - "node": true, - "es6": true - }, - "extends": "eslint:recommended", - "rules": { - "no-console": "off", - "indent": "off", - "linebreak-style": "off", - "no-unused-vars": ["warn", { "vars": "all", "args": "after-used", "ignoreRestSiblings": false }], - "no-const-assign": "error", - }, - "globals": - { - "undefined": false, - "eval": false, - "__njs_typeof": false, - "console": false, - "module": false, - "require": false, - "__Nectar_Log_Console": false, - "__Nectar_InitVar": false, - "__Nectar_Object_Keys": false, - "__Nectar_Object_Stringify": false, - "__Nectar_Call_Function": false, - "__NJS_ARGS": false, - "__NJS_ENV": false, - "__NJS_PLATFORM": false, - "__Nectar_typeof": false, - "__Nectar_THIS": false, - "__Nectar_instanceof": false, - "__Nectar_delete": false, - "__Nectar_EQUAL_VALUE_AND_TYPE": false, - "__Nectar_NOT_EQUAL_VALUE_AND_TYPE": false, - "JSON": false, - "Object": false, - "isNaN": false, - "Array": false, - } - }, - out: function(_name) + out: function(_name) { if(CLI.cli["--target"]) { @@ -64,14 +22,14 @@ var WASM = { /* var _cachePath = path.join(process.cwd(), "..", "cached_" + COMPILER.ENV.name + "_" + VERSION); - var _precompiled = path.join(_cachePath, "nectar.o"); + var _precompiled = path.join(_cachePath, "nerd.o"); if(!fs.existsSync(_precompiled)) { - console.log(`[+] Creating Nectar binary lib for ${COMPILER.ENV.name + "_" + VERSION}`); + console.log(`[+] Creating Nerd binary lib for ${COMPILER.ENV.name + "_" + VERSION}`); try { fs.mkdirSync(_cachePath); } catch(e){}; - execSync(`${compiler} -std=c++17 -c nectar.cpp -O3 -o "${_precompiled}"`); - console.log("[+] Compiling with precompiled Nectar lib"); + execSync(`${compiler} -std=c++17 -c nerd.cpp -O3 -o "${_precompiled}"`); + console.log("[+] Compiling with precompiled Nerd lib"); } */ var _cliOption = ""; @@ -79,15 +37,15 @@ var WASM = if(preset == "none") { - return `${compiler} -D__NJS_REGISTER_SIZE=${COMPILER.REGISTER} ${_in} -O1 -w -s TOTAL_MEMORY=33554432 ${COMPILER.LIBS} -o ${out} ${_cliOption}`; + return `${compiler} nerdcore/src/nerd.cpp -D__NJS_REGISTER_SIZE=${COMPILER.REGISTER} ${_in} -O1 -w -s TOTAL_MEMORY=33554432 ${COMPILER.LIBS} -o ${out} ${_cliOption}`; } else if(preset == "size") { - return `${compiler} -D__NJS_REGISTER_SIZE=${COMPILER.REGISTER} ${_in} -Os -fno-exceptions -fno-rtti -fno-stack-protector -fomit-frame-pointer -w -s TOTAL_MEMORY=33554432 ${COMPILER.LIBS} -o ${out} ${_cliOption}`; + return `${compiler} nerdcore/src/nerd.cpp -D__NJS_REGISTER_SIZE=${COMPILER.REGISTER} ${_in} -Os -fno-rtti -fno-stack-protector -fomit-frame-pointer -w -s TOTAL_MEMORY=33554432 ${COMPILER.LIBS} -o ${out} ${_cliOption}`; } else { - return `${compiler} -D__NJS_REGISTER_SIZE=${COMPILER.REGISTER} ${_in} -O3 -w -s TOTAL_MEMORY=33554432 ${COMPILER.LIBS} -o ${out} ${_cliOption}`; + return `${compiler} nerdcore/src/nerd.cpp -D__NJS_REGISTER_SIZE=${COMPILER.REGISTER} ${_in} -O3 -w -s TOTAL_MEMORY=33554432 ${COMPILER.LIBS} -o ${out} ${_cliOption}`; } } } diff --git a/compiler/native/lib/createAnon.js b/compiler/native/lib/createAnon.js deleted file mode 100644 index 5d366cc2c..000000000 --- a/compiler/native/lib/createAnon.js +++ /dev/null @@ -1,72 +0,0 @@ -function createAnon(_code, _scope) -{ - var _return = "return NectarCore::Global::undefined;}"; - var _searchAnonFN = new RegExp(/(var)* *([\[\]a-zA-Z0-9_"]*) *= *function +\(([a-zA-Z0-9_\-, ]*)\)/); - var _index = _code.search(_searchAnonFN); - - while(_index > -1) - { - var _var = ""; - var _count = 0; - var _start = -1; - var _end = -1; - var _genFN = "__NJS_FN_" + RND(); - var _genVAR = "NectarCore::VAR_" + RND(); - - var _match = _searchAnonFN.exec(_code); - _match[3] = _match[3].split(","); - var _getVar = ""; - - for(var i = 0; i < _match[3].length; i++) - { - if(_match[3][i].length > 0) - { - _getVar += `var ${_match[3][i]}; if(__Nectar_VARLENGTH > ${i}) ${_match[3][i]} = __Nectar_VARARGS[${i}];`; - } - } - - for(var i = _index; i < _code.length; i++) - { - if(_code[i] == "{") - { - if(_start == -1) _start = i; - _count++; - } - else if(_code[i] == "}") - { - var _catch = ""; - var _classAnon = false; - if(_scope) _catch = "&"; - if(_code.indexOf("\"SCOPED_FUNCTION\";") > -1) - { - _code = _code.replace(/"SCOPED_FUNCTION";/g, " "); - _catch = "&"; - } - if(_code.indexOf("'__NJS_CLASS_ANON__';") > -1) - { - _code = _code.replace(/'__NJS_CLASS_ANON__';/g, " "); - _classAnon = true; - } - - _end = i; - _count--; - if(_count == 0) - { - var _fn = "{" + _getVar + _code.substring(_start + 1, _end); - if(_classAnon) _fn = "{" + _getVar + _code.substring(_start + 1, _end); - var _formated = ""; - - if(_match[1]) COMPILER.DECL.push(`var ${_match[2]};`); - if(_match[2]) _formated += _match[2] + " = "; - _formated += "NectarCore::VAR(NectarCore::Enum::Type::Function, new NectarCore::Type::function_t ([" + _catch + "](var __Nectar_THIS, NectarCore::VAR* __Nectar_VARARGS, int __Nectar_VARLENGTH) -> NectarCore::VAR" + _fn + os.EOL + _return + "), __Nectar_THIS);"; - _code = [_code.slice(0, _index), ' ', _formated, _code.slice(_end + 1)].join(''); - break; - } - } - } - _index = _code.search(_searchAnonFN); - } - _code = replaceObjAddr(_code); - return _code; -} -module.exports = createAnon; diff --git a/compiler/native/lib/createClass.js b/compiler/native/lib/createClass.js deleted file mode 100644 index c19d1fa90..000000000 --- a/compiler/native/lib/createClass.js +++ /dev/null @@ -1,68 +0,0 @@ -function createClass(_code, _scope) -{ - var _matchThis = new RegExp(/(| |{|,)__Nectar_THIS([\.(";)]|$)/); - var _return = ";return NectarCore::Global::undefined;}"; - var _returnThis = ";return __Nectar_THIS;}"; - var _searchFN = new RegExp(/function +__Nectar_CLASS_(.[a-zA-Z0-9_\-]*) *\((.*)\)/); - var _index = _code.search(_searchFN); - - while(_index > -1) - { - var _genFN = "__NJS_FN_" + RND(); - - var _var = ""; - var _count = 0; - var _start = -1; - var _end = -1; - - let _match = _searchFN.exec(_code); - - _match[2] = _match[2].split(","); - - var _getVar = ""; - for(var i = 0; i < _match[2].length; i++) - { - if(_match[2][i].length > 0) - { - _getVar += `var ${_match[2][i]}; if(__Nectar_VARLENGTH > ${i}) ${_match[2][i]} = __Nectar_VARARGS[${i}];`; - } - } - for(var i = _index; i < _code.length; i++) - { - if(_code[i] == "{") - { - if(_start == -1) _start = i; - _count++; - } - else if(_code[i] == "}") - { - var _catch = ""; - if(_scope) _catch = "&"; - if(_code.indexOf("\"SCOPED_FUNCTION\";") > -1) - { - _code = _code.replace(/'SCOPED_Function';/g, " "); - _catch = "&"; - } - - _end = i; - _count--; - if(_count == 0) - { - var _fn = "{" + _getVar + _code.substring(_start + 1, _end); - - COMPILER.DECL.push("var " + _match[1] +";"); - - var _formated = "NectarCore::Type::function_t* " + _genFN +" = new NectarCore::Type::function_t([" + _catch + "](var __Nectar_THIS, NectarCore::VAR* __Nectar_VARARGS, int __Nectar_VARLENGTH) -> NectarCore::VAR" + _fn + _return + ");"; - _formated += _match[1] + "=NectarCore::VAR(NectarCore::Enum::Type::Function, " + _genFN + ", __Nectar_THIS);"; - - _code = [_code.slice(0, _index), _formated, _code.slice(_end + 1)].join(''); - break; - } - } - } - _index = _code.search(_searchFN); - } - _code = replaceObjAddr(_code); - return _code; -} -module.exports = createClass; diff --git a/compiler/native/lib/createFunction.js b/compiler/native/lib/createFunction.js deleted file mode 100644 index 5c0912952..000000000 --- a/compiler/native/lib/createFunction.js +++ /dev/null @@ -1,124 +0,0 @@ -function createFunction(_code, _scope) -{ - var _return = ";return NectarCore::Global::undefined;}"; - var _searchFN = new RegExp(/function +(.[a-zA-Z0-9_\-]*) *\((.*)\)/); - var _index = _code.search(_searchFN); - while(_index > -1) - { - var _genFN = "__NJS_FN_" + RND(); - var _genVAR = "NectarCore::VAR_" + RND(); - - var _var = ""; - var _count = 0; - var _start = -1; - var _end = -1; - - let _match = _searchFN.exec(_code); - _match[2] = _match[2].split(","); - var _getVar = ""; - var _parameters = ""; - var _variadic = false; - - var _FAST = false; - - if(!CLI.cli["--no-fast-function"] && COMPILER.INFO.SCOPE[_match[1]] && COMPILER.INFO.SCOPE[_match[1]].fast == true && COMPILER.INFO.SCOPE[_match[1]].param.length == 1 && COMPILER.INFO.SCOPE[_match[1]].param[0] == _match[2].length) - { - _FAST = true; - for(var i = 0; i < _match[2].length; i++) - { - if(_match[2][i].length > 0) - { - if(i != 0) _var += ","; - _var += "double " + _match[2][i]; - } - } - _parameters = _var; - } - else - { - - _variadic = true; - _parameters = "var __Nectar_THIS, NectarCore::VAR* __Nectar_VARARGS, int __Nectar_VARLENGTH"; - - if(COMPILER.INFO.SCOPE[_match[1]] && COMPILER.INFO.SCOPE[_match[1]].param.length == 1) - { - for(var i = 0; i < _match[2].length; i++) - { - if(_match[2][i].length > 0) - { - if(i <= COMPILER.INFO.SCOPE[_match[1]].param.length) - { - _getVar += `var ${_match[2][i]} = __Nectar_VARARGS[${i}];`; - } - else _getVar += `var ${_match[2][i]}; if(__Nectar_VARLENGTH > ${i}) ${_match[2][i]} = __Nectar_VARARGS[${i}];`; - } - } - } - else - { - for(var i = 0; i < _match[2].length; i++) - { - if(_match[2][i].length > 0) - { - _getVar += `var ${_match[2][i]}; if(__Nectar_VARLENGTH > ${i}) ${_match[2][i]} = __Nectar_VARARGS[${i}];`; - } - } - } - } - - for(var i = _index; i < _code.length; i++) - { - if(_code[i] == "{") - { - if(_start == -1) _start = i; - _count++; - } - else if(_code[i] == "}") - { - - _end = i; - _count--; - if(_count == 0) - { - - if(!_FAST) - { - var _catch = ""; - if(_scope) _catch = "&"; - if(_code.indexOf("\"SCOPED_FUNCTION\";") > -1) - { - _code = _code.replace(/'SCOPED_Function';/g, " "); - _catch = "&"; - } - _catch = "&"; - var _constructor = `${_match[1]}["prototype"]["constructor"] = __Nectar_Create_Var_Scoped_Anon(return __Nectar_THIS;);`; - var _fn = "{" + _getVar + _code.substring(_start + 1, _end); - - COMPILER.DECL.push("var " + _match[1] +";"); - - var __STR_MARKER = "__LIT" + RND(); - var _formated = `NectarCore::Type::function_t* ${_genFN} = new NectarCore::Type::function_t([${_catch}]( ${_parameters} ) -> NectarCore::VAR ${_fn} ${_return} );`; - _formated += _match[1] + "=NectarCore::VAR(NectarCore::Enum::Type::Function, " + _genFN + ");"; - if(CLI.cli["--debug"]) _formated += `((NectarCore::Class::Function*)${_match[1]}._ptr)->code = R"${__STR_MARKER}(Function ${_match[1]}(${_match[2]}) ${_code.substring(_start, _end )}})${__STR_MARKER}";` - //else _formated += `((NectarCore::Class::Function*)${_match[1]}._ptr)->code = R"([Function: ${_match[1]}])";` - - _code = [_code.slice(0, _index), _formated, _code.slice(_end + 1)].join(''); - } - else - { - // FAST CALL HERE - var _fn = _code.substring(_start, _end); - COMPILER.DECL.push(`__Nectar_FAST_INT ${_match[1]}(${_parameters})${_fn}; return 0;}`); - _code = [_code.slice(0, _index), _code.slice(_end + 1)].join(''); - } - - break; - } - } - } - _index = _code.search(_searchFN); - } - _code = replaceObjAddr(_code); - return _code; -} -module.exports = createFunction; \ No newline at end of file diff --git a/compiler/native/lib/createReturnAnon.js b/compiler/native/lib/createReturnAnon.js deleted file mode 100644 index 9d9e815b6..000000000 --- a/compiler/native/lib/createReturnAnon.js +++ /dev/null @@ -1,72 +0,0 @@ -function createReturnAnon(_code, _scope) -{ - var _return = "return NectarCore::Global::undefined;}"; - var _searchAnonFN = new RegExp(/return *function +\(([a-zA-Z0-9_\-, ]*)\)/); - var _index = _code.search(_searchAnonFN); - - while(_index > -1) - { - var _var = ""; - var _count = 0; - var _start = -1; - var _end = -1; - var _genFN = "__NJS_FN_" + RND(); - var _genVAR = "NectarCore::VAR_" + RND(); - - var _match = _searchAnonFN.exec(_code); - _match[1] = _match[1].split(","); - var _getVar = ""; - - - for(var i = 0; i < _match[1].length; i++) - { - if(_match[1][i].length > 0) - { - _getVar += `var ${_match[1][i]}; if(__Nectar_VARLENGTH > ${i}) ${_match[1][i]} = __Nectar_VARARGS[${i}];`; - } - } - - for(var i = _index; i < _code.length; i++) - { - if(_code[i] == "{") - { - if(_start == -1) _start = i; - _count++; - } - else if(_code[i] == "}") - { - var _catch = ""; - var _classAnon = false; - if(_scope) _catch = "&"; - if(_code.indexOf("\"SCOPED_FUNCTION\";") > -1) - { - _code = _code.replace(/"SCOPED_FUNCTION";/g, " "); - _catch = "&"; - } - if(_code.indexOf("'__NJS_CLASS_ANON__';") > -1) - { - _code = _code.replace(/'__NJS_CLASS_ANON__';/g, " "); - _classAnon = true; - } - - _end = i; - _count--; - if(_count == 0) - { - var _fn = "{" + _getVar + _code.substring(_start + 1, _end); - if(_classAnon) _fn = "{" + _getVar + _code.substring(_start + 1, _end); - var _formated = ""; - - _formated += "return NectarCore::VAR(NectarCore::Enum::Type::Function, new NectarCore::Type::function_t ([" + _catch + "](var __Nectar_THIS, NectarCore::VAR* __Nectar_VARARGS, int __Nectar_VARLENGTH) -> NectarCore::VAR" + _fn + os.EOL + _return + "), __Nectar_THIS);"; - - _code = [_code.slice(0, _index), ' ', _formated, _code.slice(_end + 1)].join(''); - break; - } - } - } - _index = _code.search(_searchAnonFN); - } - _code = replaceObjAddr(_code); - return _code; -} -module.exports = createReturnAnon; diff --git a/compiler/native/lib/genInclude.js b/compiler/native/lib/genInclude.js deleted file mode 100644 index c3c401573..000000000 --- a/compiler/native/lib/genInclude.js +++ /dev/null @@ -1,50 +0,0 @@ -var _SEARCH = new RegExp(/['"]!_ffi_include *(.*)['"]/); -var _SEARCHCINC = new RegExp(/#include *\"(.*)\"/g); - -function genInclude(from, src, full) -{ - if(CLI.cli["--profile"] && CLI.cli["--profile"].argument == "use") - { - return src; - } - var _match = src.match(_SEARCH); - while(_match) - { - var _var = "#include \"" + path.resolve(path.join(COMPILER.TMP_FOLDER, _match[1]) + "\""); - COMPILER.FFI.push(_var); - copyRecursiveSync(path.resolve(path.join(from, _match[1])), path.join(COMPILER.TMP_FOLDER, _match[1])); - var _include = fs.readFileSync(path.resolve(path.join(COMPILER.TMP_FOLDER, _match[1]))).toString(); - _include = genMetaFunction(_include); - _include = genInclude(path.dirname(path.resolve(path.join(from, _match[1]))), _include, path.dirname(path.resolve(path.join(COMPILER.TMP_FOLDER, _match[1])))); - fs.writeFileSync(path.resolve(path.join(COMPILER.TMP_FOLDER, _match[1])), _include); - src = src.replace(/['"]!_ffi_include *(.*)['"]/, ""); - _match = src.match(_SEARCH); - } - - - var _cmatch = src.match(_SEARCHCINC); - if(_cmatch) - { - for(var i = 0; i < _cmatch.length; i++) - { - var _getPath = new RegExp(/#include *\"(.*)\"/g); - var _cfile = _getPath.exec(_cmatch[i]); - if(_cfile[1]) - { - var _incFile = path.resolve(path.join(from, _cfile[1])); - if(fs.existsSync(_incFile)) - { - copyRecursiveSync(_incFile, path.join(full, _cfile[1])); - var _include = fs.readFileSync(path.resolve(path.join(full, _cfile[1]))).toString(); - _include = genMetaFunction(_include); - _include = genInclude(path.dirname(path.resolve(path.join(full, _cfile[1]))), _include, path.dirname(path.resolve(path.join(full, _cfile[1])))); - fs.writeFileSync(path.resolve(path.join(full, _cfile[1])), _include); - _cmatch = src.match(_SEARCHCINC); - } - } - } - } - - return src; -} -module.exports = genInclude; diff --git a/compiler/native/lib/genMetaFunction.js b/compiler/native/lib/genMetaFunction.js deleted file mode 100644 index 472b6fea8..000000000 --- a/compiler/native/lib/genMetaFunction.js +++ /dev/null @@ -1,61 +0,0 @@ -global.RND = function() { return "__META_" + Math.random().toString(36).substring(7); }; - -function genMetaFunction(_code) -{ - var _return = ";return NectarCore::Global::undefined;}"; - var _searchFN = new RegExp(/function (.[a-zA-Z0-9_\-]*) *\((.*)\)/); - var _index = _code.search(_searchFN); - while(_index > -1) - { - var _genFN = "__NJS_FN_" + RND(); - var _count = 0; - var _start = -1; - var _end = -1; - - let _match = _searchFN.exec(_code); - - _match[2] = _match[2].split(","); - var _getVar = ""; - for(var i = 0; i < _match[2].length; i++) - { - if(_match[2][i].length > 0) - { - _getVar += `var ${_match[2][i]}; if(__Nectar_VARLENGTH > ${i}) ${_match[2][i]} = __Nectar_VARARGS[${i}];`; - } - } - for(var i = _index; i < _code.length; i++) - { - if(_code[i] == "{") - { - if(_start == -1) _start = i; - _count++; - } - else if(_code[i] == "}") - { - - _end = i; - _count--; - if(_count == 0) - { - var _fn = "{" + _getVar + _code.substring(_start + 1, _end); - var _catch = ""; - if(_code.indexOf("\"SCOPED_FUNCTION\";") > -1) - { - _code = _code.replace(/"SCOPED_FUNCTION";/g, " "); - _catch = "&"; - } - - var _formated = "NectarCore::Type::function_t* " + _genFN +" = new NectarCore::Type::function_t([" + _catch + "](var __Nectar_THIS, NectarCore::VAR* __Nectar_VARARGS, int __Nectar_VARLENGTH) -> NectarCore::VAR" + _fn + _return + ");"; - _formated += "var " + _match[1] + "=NectarCore::VAR(NectarCore::Enum::Type::Function, " + _genFN + ");"; - - _code = [_code.slice(0, _index), _formated, _code.slice(_end + 1)].join(''); - break; - } - } - } - _index = _code.search(_searchFN); - } - return _code; -} - -module.exports = genMetaFunction; \ No newline at end of file diff --git a/compiler/native/lib/genPackage.js b/compiler/native/lib/genPackage.js deleted file mode 100644 index aaec2b4dc..000000000 --- a/compiler/native/lib/genPackage.js +++ /dev/null @@ -1,17 +0,0 @@ -var _SEARCH = new RegExp(/['"]!_package *(.*)['"]/); - -function genPackage(from, src) -{ - var _match = src.match(_SEARCH); - while(_match) - { - var _target = _match[1].replace(/{__ARCH__}/g, os.arch()); - copyRecursiveSync(path.resolve(path.join(from, _target)), path.join(COMPILER.TMP_FOLDER, _target)); - COMPILER.PACK.push(path.join(COMPILER.TMP_FOLDER, _target)); - src = src.replace(/['"]!_package *(.*)['"]/, ""); - _match = src.match(_SEARCH); - } - - return src; -} -module.exports = genPackage; diff --git a/compiler/native/lib/genRequire.js b/compiler/native/lib/genRequire.js deleted file mode 100644 index 5f0ddb61f..000000000 --- a/compiler/native/lib/genRequire.js +++ /dev/null @@ -1,223 +0,0 @@ -var genInclude = require("./genInclude.js"); -module.exports = genRequire; -var fs = require("fs"); -var CACHE = {}; - -function showModuleComment(_obj, _name) -{ - if(Array.isArray(_obj)) - { - for(var l = 0; l < _obj.length; l++ ) - { - console.log("[*] " + _name + ": " + _obj[l]); - } - } - else if(typeof _obj == "string") - { - console.log("[*] " + _name + ": " + _obj); - } - else if(typeof _obj == "object") - { - var _platform; - if(_obj[PLATFORM]) _platform = PLATFORM; - else if(_obj["default"]) _platform = "default"; - - if(_obj[_platform] && typeof _obj[_platform] == "object") - { - var currentCompiler = COMPILER.COMPILER.split(" ")[0]; - var _compiler; - if(_obj[_platform][currentCompiler]) _compiler = currentCompiler; - else if(_obj[_platform]["default"]) _compiler = "default"; - - if(_obj[_platform][_compiler]) showModuleComment(_obj[_platform][_compiler], _name); - } - else if(_obj[_platform]) showModuleComment(_obj[_platform], _name); - } -} - -function addModuleLib(_lib, modSource) -{ - if(Array.isArray(_lib)) - { - for(var l = 0; l < _lib.length; l++ ) - { - COMPILER.LIBS += _lib[l].replace(/{__MODULE__}/g, path.resolve(modSource)).replace(/{__ARCH__}/g, os.arch()).replace(/{__EXTERN__}/g, extern) + " "; - } - } - else if(typeof _lib == "string") - { - COMPILER.LIBS += _lib.replace(/{__MODULE__}/g, modSource).replace(/{__ARCH__}/g, os.arch()).replace(/{__EXTERN__}/g, extern) + " "; - } - else if(typeof _lib == "object") - { - var _platform; - if(_lib[PLATFORM]) _platform = PLATFORM; - else if(_lib["default"]) _platform = "default"; - - if(_lib[_platform] && Array.isArray(_lib[_platform])) - { - addModuleLib(_lib[_platform], modSource); - } - if(_lib[_platform] && typeof _lib[_platform] == "object") - { - var currentCompiler = COMPILER.COMPILER.split(" ")[0]; - var _compiler; - if(_lib[_platform][currentCompiler]) _compiler = currentCompiler; - else if(_lib[_platform]["default"]) _compiler = "default"; - - if(_lib[_platform][_compiler]) addModuleLib(_lib[_platform][_compiler], modSource); - } - else if(_lib[_platform]) addModuleLib(_lib[_platform], modSource); - } -} - -function genRequire(from, src) -{ - // strip comments - src = strip(src); - src = genPackage(from, src); - var _SEARCH = new RegExp(/ *require\(['"](.*?)['"]\)/); - var seek = ["require('", "require(\""]; - - var _match = src.match(_SEARCH); - - while(_match) - { - var addSource = _match[1]; - - if(CACHE[addSource]) - { - src = src.replace(_SEARCH, CACHE[addSource]); - var _match = src.match(_SEARCH); - } - else - { - - var modSource = ""; - var fileSource; - if(addSource.indexOf(COMPILER.PATH) > -1) - { - modSource = addSource; - } - else - { - modSource = path.join(from + addSource); - } - var trySource = [modSource, modSource + "/" + "index.js", from + "nectar_modules/" + addSource + "/index.js", NECTAR_PATH + "/nectar_modules/" + addSource + "/index.js", from + "node_modules/" + addSource + "/index.js", NECTAR_PATH + "/node_modules/" + modSource + "/index.js", modSource + ".js", - modSource, modSource + "/" + "index.ts", from + "nectar_modules/" + addSource + "/index.ts", NECTAR_PATH + "/nectar_modules/" + addSource + "/index.ts", from + "node_modules/" + addSource + "/index.ts", NECTAR_PATH + "/node_modules/" + modSource + "/index.ts", modSource + ".ts"]; - var newSrc = ""; - for(var i = 0; i < trySource.length; i++) - { - try - { - modSource = path.dirname(trySource[i]) + "/"; - newSrc = fs.readFileSync(trySource[i]).toString(); - fileSource = trySource[i]; - - var pkgPath = path.join(modSource, "package.json"); - var pkgObject; - if(fs.existsSync(pkgPath)) - { - var pkg = fs.readFileSync(pkgPath); - try - { - pkg = JSON.parse(pkg); - pkgObject = pkg; - if(pkg.nectar) - { - if(pkg.nectar.message) - { - showModuleComment(pkg.nectar.message, pkg.name); - } - if(pkg.nectar.env) - { - if(pkg.nectar.env.indexOf(COMPILER.ENV.name) < 0) - { - console.error("NectarJS:\n\n[!] module " + addSource + " doesn't support env : " + COMPILER.ENV.name + " only these : " + pkg.nectar.env); - process.exit(1); - } - } - - if(pkg.nectar.target) - { - if(!COMPILER.TARGET) - { - console.error("NectarJS:\n\n[!] module " + addSource + " require one of these targets : " + pkg.nectar.target + ". None specified"); - process.exit(1); - } - else if(pkg.nectar.target.indexOf(COMPILER.TARGET) < 0) - { - console.error("NectarJS:\n\n[!] module " + addSource + " require one of these targets : " + pkg.nectar.target + ". " + COMPILER.TARGET + " specified"); - process.exit(1); - } - } - - if(pkg.nectar.expose) - { - COMPILER.EXPOSE = COMPILER.EXPOSE.concat(pkg.nectar.expose); - COMPILER.GLOBAL = COMPILER.GLOBAL.concat(pkg.nectar.expose); - } - - if(pkg.nectar.lib) - { - addModuleLib(pkg.nectar.lib, modSource); - } - - } - } - catch(e) - { - console.log("NectarJS:\n\n[!] " + e + " -> " + pkgPath.split("/").splice(-3).join("/")) - } - } - - // EXPOSE VAR - var _expose = {}; - if(pkgObject && pkgObject.nectar && pkgObject.nectar.expose) _expose = pkgObject.nectar.expose; - - // READ ONLY VAR - if(pkgObject && pkgObject.nectar && pkgObject.nectar.read_only) COMPILER.READ_ONLY = COMPILER.READ_ONLY.concat(pkgObject.nectar.read_only); - - if(!CLI.cli["--no-check"]) LINT(newSrc, trySource[i], _expose); - - break; - } - catch (e) {} - } - - if(newSrc.length == 0) - { - console.log("[!] Warning : index file of module " + addSource + " seems empty"); - } - - var ext = "js"; - if(fileSource && fileSource.split) - { - var _Ext = fileSource.split("."); - if(_Ext.length > 1) ext = _Ext[_Ext.length - 1]; - - if(ext == "ts") newSrc = compileTS(newSrc, fileSource); - - newSrc = genInclude(path.resolve(modSource) + "/", newSrc); - - - var reqFN = "__MODULE_" + Math.random().toString(36).substr(2, 10); - COMPILER.ENV.check.globals[reqFN] = false; - CACHE[addSource] = reqFN + "()"; - - src = src.replace(_SEARCH, reqFN + "()"); - - newSrc = "function " + reqFN + "(){\nvar module = __NJS_Create_Object();\n" + newSrc; - newSrc = newSrc.replace(/(module\.exports *= *.*)$/g, "$1;"); - newSrc += "return module.exports;\n}"; - newSrc = genRequire(modSource, newSrc); - - COMPILER.REQUIRE += newSrc + ";"; - } - else src = src.replace(_SEARCH, ""); - - var _match = src.match(_SEARCH); - } - } - return src; -} diff --git a/compiler/native/lib/hoistingFunction.js b/compiler/native/lib/hoistingFunction.js deleted file mode 100644 index c44b56fc6..000000000 --- a/compiler/native/lib/hoistingFunction.js +++ /dev/null @@ -1,37 +0,0 @@ -function hoistingFunction(_code) -{ - var _hoisting = ""; - var _searchFN = new RegExp(/function +(.[a-zA-Z0-9_\-]*) *\((.*)\)/); - var _index = _code.search(_searchFN); - while(_index > -1) - { - var _count = 0; - var _start = -1; - var _end = -1; - let _match = _searchFN.exec(_code); - - for(var i = _index; i < _code.length; i++) - { - if(_code[i] == "{") - { - if(_start == -1) _start = i; - _count++; - } - else if(_code[i] == "}") - { - _end = i; - _count--; - if(_count == 0) - { - _hoisting += _code.substring(_index, _end + 1) + "\n"; - _code = _code.slice(0, _index) + _code.slice(_end + 1); - break; - } - } - } - _index = _code.search(_searchFN); - } - - return _hoisting + _code; -} -module.exports = hoistingFunction; \ No newline at end of file diff --git a/compiler/native/lib/replaceObjAddr.js b/compiler/native/lib/replaceObjAddr.js deleted file mode 100644 index f9c6a56a8..000000000 --- a/compiler/native/lib/replaceObjAddr.js +++ /dev/null @@ -1,42 +0,0 @@ -function replaceObjAddr(_code) -{ - var Function = []; - - var _searchReg = / *__Nectar_Object_Set *\( *([a-zA-Z0-9_\-" ]*) *, *([a-zA-Z0-9_\-\(\)" ]*) *, *([a-zA-Z0-9_\-" ]*) *\)/g; - var _searchFN = / *([a-zA-Z0-9_\-" ]*) * = NectarCore::VAR\(NectarCore::Enum::Type::Function/g; - - var _allFN = _code.match(new RegExp(_searchFN)); - if(_allFN) - { - for(var i = 0; i < _allFN.length; i++) - { - var _localSearch = new RegExp(_searchFN); - var _fn = _localSearch.exec(_allFN[i]); - if(_fn); - { - Function.push(_fn[1]); - } - } - } - - var _searchObject = new RegExp(_searchReg); - var _match = _code.match(_searchObject); - if(_match) - { - for(var i = 0; i < _match.length; i++) - { - var _localSearch = new RegExp(_searchReg); - var _var = _localSearch.exec(_match[i]); - if(_var); - { - if(_var[1] != "\"exports\"" && Function.indexOf(_var[2]) > -1) - { - var _getObject = new RegExp("__Nectar_Object_Get\\\(" + _var[1]+ ", " + _var[3] + "\\\)", "gm"); - _code = _code.replace(_getObject, _var[2]); - } - } - } - } - return _code; -} -module.exports = replaceObjAddr; \ No newline at end of file diff --git a/compiler/native/nectarcpp b/compiler/native/nectarcpp deleted file mode 160000 index f7573155a..000000000 --- a/compiler/native/nectarcpp +++ /dev/null @@ -1 +0,0 @@ -Subproject commit f7573155af2071ac5f279e7390a7ac273f4a7bc3 diff --git a/compiler/native/nerdcore/src/class/_meta.h b/compiler/native/nerdcore/src/class/_meta.h new file mode 100644 index 000000000..74ba26401 --- /dev/null +++ b/compiler/native/nerdcore/src/class/_meta.h @@ -0,0 +1,44 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +#pragma once +#include + +namespace NerdCore::Class +{ +#ifdef __NERD_ENV_ARDUINO + typedef uint16_t count_t; +#else + typedef int count_t; +#endif + class InvalidTypeException : public std::exception + { + }; + #ifdef __NERD_ENV_ARDUINO + const int SMI_MAX = 32767; + const int SMI_MIN = -32768; + #else + const int SMI_MAX = 1073741823; + const int SMI_MIN = -1073741824; + #endif +} // namespace NerdCore::Class diff --git a/compiler/native/nerdcore/src/class/array.h b/compiler/native/nerdcore/src/class/array.h new file mode 100644 index 000000000..736a0f738 --- /dev/null +++ b/compiler/native/nerdcore/src/class/array.h @@ -0,0 +1,438 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +#pragma once +#include "array_header.h" +#include +#include + +namespace NerdCore::Class +{ + // Constructors + Array::Array() + { + object["__proto__"] = NerdCore::Global::Array["prototype"]; + } + Array::Array(NerdCore::Type::vector_t vec) + { + object["__proto__"] = NerdCore::Global::Array["prototype"]; + value = vec; + } + Array::Array(std::initializer_list l) : value(l) + { + object["__proto__"] = NerdCore::Global::Array["prototype"]; + } + + // Methods + inline void Array::Delete() noexcept + { + if (--counter == 0) + { + delete this; + } + } + double Array::Size() + { + return value.size(); + } + inline void Array::jsDelete(NerdCore::VAR _key) noexcept + { + if(_key.type == NerdCore::Enum::Type::String) + { + // TODO: if string is a number, convert to number and erase + } + else if(_key.type == NerdCore::Enum::Type::Number) + { + value[(double)_key] = NerdCore::Global::null; + } + } + inline void* Array::Copy() noexcept + { + counter++; + return this; + } + // Native cast + Array::operator bool() const noexcept { return true; } + Array::operator double() const noexcept + { + if (value.size() == 1) + { + return (double)value[0]; + } + else + { + #ifdef __NERD_ENV_ARDUINO + return 0; + #else + return std::numeric_limits::quiet_NaN(); + #endif + } + } + Array::operator int() const noexcept + { + if (value.size() == 1) + { + return (int)value[0]; + } + else + { + #ifdef __NERD_ENV_ARDUINO + return 0; + #else + return std::numeric_limits::quiet_NaN(); + #endif + } + } + Array::operator long long() const noexcept + { + if (value.size() == 1) + { + return (long long)value[0]; + } + else + { + #ifdef __NERD_ENV_ARDUINO + return 0; + #else + return std::numeric_limits::quiet_NaN(); + #endif + } + } + Array::operator std::string() const noexcept + { + auto l = value.size(); + if (l == 0) + return ""; + std::stringstream stream; + stream << (std::string)value[0]; + for (auto i = 1; i < l; i++) + { + stream << "," << (std::string)value[i]; + } + return stream.str(); + } + + NerdCore::VAR &Array::GetSet(std::string key) + { + #ifndef __NERD__OBJECT_VECTOR + // if current object[key] is null, we look for the prototypal chain + if(object[key].type == NerdCore::Enum::Type::Null) + { + NerdCore::VAR __proto = object["__proto__"]; + while(__proto.type != NerdCore::Enum::Type::Null) + { + if(__proto[key].type != NerdCore::Enum::Type::Null) + { + object[key] = __proto[key]; + break; + } + __proto = __proto["__proto__"]; + } + } + /* + if(object[key].type == NerdCore::Enum::Type::Function) + { + (__NERD_FUNCTION(object[key]))->object["this"] = NerdCore::VAR(this); + __NERD_FUNCTION(object[key])->bind = bind; + } + */ + return object[key]; + #else + for (auto & search : object) + { + if (key.compare(search.first) == 0) + { + return search.second; + } + } + + object.push_back(NerdCore::Type::pair_t(key, NerdCore::Global::null)); + + return object[object.size() - 1].second; + #endif + } + + // Main operators + NerdCore::VAR const Array::operator[](int key) const + { + if (key >= 0 && key <= value.size()) + { + return value.at(key); + } + + return NerdCore::Global::null; + } + + NerdCore::VAR &Array::operator[](NerdCore::VAR key) + { + if (key.type == NerdCore::Enum::Type::Number) + { + auto i = (int)key; + + if (i < 0) + { + return NerdCore::Global::null; + } + else + { + if (i >= value.size()) + { + value.resize(i + 1); + } + } + return value[i]; + } + else + { + return GetSet(key); + } + return NerdCore::Global::null; + } + + NerdCore::VAR &Array::operator[](int key) + { + if (key < 0) + { + return NerdCore::Global::null; + } + else + { + if (key >= value.size()) + { + value.resize(key + 1); + } + } + return value[key]; + } + + NerdCore::VAR &Array::operator[](double key) + { + if (key < 0) + { + return NerdCore::Global::null; + } + else + { + if (key >= value.size()) + { + value.resize(key + 1); + } + } + return value[key]; + } + + NerdCore::VAR &Array::operator[](const char* key) + { + return GetSet(key); + } + + // Comparation operators + Array Array::operator!() const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Array(); + } + + // Numeric operators + Array Array::operator+() const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Array(); + } + Array Array::operator-() const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Array(); + } + Array Array::operator++(const int _v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Array(); + } + Array Array::operator--(const int _v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Array(); + } + Array Array::operator+(const Array &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Array(); + } + Array Array::operator+=(const Array &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Array(); + } + Array Array::operator-(const Array &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Array(); + } + Array Array::operator-=(const Array &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Array(); + } + Array Array::operator*(const Array &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Array(); + } + Array Array::operator*=(const Array &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Array(); + } + // TODO: "**" and "**=" operators + Array Array::operator/(const Array &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Array(); + } + Array Array::operator/=(const Array &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Array(); + } + Array Array::operator%(const Array &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Array(); + } + Array Array::operator%=(const Array &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Array(); + } + Array Array::operator&(const Array &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Array(); + } + Array Array::operator|(const Array &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Array(); + } + Array Array::operator^(const Array &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Array(); + } + Array Array::operator~() const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Array(); + } + Array Array::operator>>(const Array &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Array(); + } + Array Array::operator<<(const Array &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Array(); + } + Array Array::operator&=(const Array &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Array(); + } + Array Array::operator|=(const Array &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Array(); + } + Array Array::operator^=(const Array &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Array(); + } + Array Array::operator>>=(const Array &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Array(); + } + Array Array::operator<<=(const Array &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Array(); + } + // TODO: ">>>" and ">>>=" operators + + +} // namespace NerdCore::Class diff --git a/compiler/native/nerdcore/src/class/array_header.h b/compiler/native/nerdcore/src/class/array_header.h new file mode 100644 index 000000000..ce5f482e9 --- /dev/null +++ b/compiler/native/nerdcore/src/class/array_header.h @@ -0,0 +1,156 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +#pragma once +#include "_meta.h" + +namespace NerdCore::Class +{ + class Array : public virtual Base + { + public: + // Constructors + Array(); + Array(NerdCore::Type::vector_t vec); + + template + Array(Args ... args) + { + NerdCore::Type::vector_t _vec = {args...}; + value = _vec; + } + + Array(std::initializer_list l); + + // Properties + count_t counter = 0; + NerdCore::Type::vector_t value; + NerdCore::Type::object_t object; + NerdCore::VAR length; + // Methods + double Size(); + inline void Delete() noexcept; + inline void jsDelete(const NerdCore::VAR _key) noexcept; + inline void* Copy() noexcept; + // Native cast + explicit operator bool() const noexcept; + explicit operator double() const noexcept; + explicit operator int() const noexcept; + explicit operator long long() const noexcept; + explicit operator std::string() const noexcept; + // Main operators + NerdCore::VAR &GetSet(std::string key); + NerdCore::VAR const operator[](int key) const; + NerdCore::VAR &operator[](NerdCore::VAR key); + NerdCore::VAR &operator[](int key); + NerdCore::VAR &operator[](double key); + NerdCore::VAR &operator[](const char* key); + + // Comparation operators + Array operator!() const; + + template + bool operator==(const t &_v1) const { return false; } + + // === emulated with __NERD_EQUAL_VALUE_AND_TYPE + // !== emulated with __NERD_NOT_EQUAL_VALUE_AND_TYPE + + template + bool operator!=(const t &_v1) const { return true; } + + template + bool operator<(const t &_v1) const { return (*this)[0] < _v1;} + + template + bool operator<=(const t &_v1) const { return (*this)[0] <= _v1; } + + template + bool operator>(const t &_v1) const { return (*this)[0] > _v1; } + + template + bool operator>=(const t &_v1) const { return (*this)[0] >= _v1; } + + // Numeric operators + Array operator+() const; + Array operator-() const; + Array operator++(const int _v1); + Array operator--(const int _v1); + Array operator+(const Array &_v1) const; + Array operator+=(const Array &_v1); + Array operator-(const Array &_v1) const; + Array operator-=(const Array &_v1); + Array operator*(const Array &_v1) const; + Array operator*=(const Array &_v1); + // TODO: "**" and "**=" operators + Array operator/(const Array &_v1) const; + Array operator/=(const Array &_v1); + Array operator%(const Array &_v1) const; + Array operator%=(const Array &_v1); + Array operator&(const Array &_v1) const; + Array operator|(const Array &_v1) const; + Array operator^(const Array &_v1) const; + Array operator~() const; + Array operator>>(const Array &_v1) const; + Array operator<<(const Array &_v1) const; + Array operator&=(const Array &_v1); + Array operator|=(const Array &_v1); + Array operator^=(const Array &_v1); + Array operator>>=(const Array &_v1); + Array operator<<=(const Array &_v1); + // TODO: ">>>" and ">>>=" operators + + NerdCore::VAR __iterator(NerdCore::VAR* args, int _length) const; + NerdCore::VAR __unscopables(NerdCore::VAR* args, int _length) const; + NerdCore::VAR concat(NerdCore::VAR* args, int _length) const; + NerdCore::VAR copyWithin(NerdCore::VAR* args, int _length); + NerdCore::VAR entries(NerdCore::VAR* args, int _length) const; + NerdCore::VAR every(NerdCore::VAR* args, int _length) const; + NerdCore::VAR fill(NerdCore::VAR* args, int _length) const; + NerdCore::VAR filter(NerdCore::VAR* args, int _length) const; + NerdCore::VAR find(NerdCore::VAR* args, int _length) const; + NerdCore::VAR findIndex(NerdCore::VAR* args, int _length) const; + NerdCore::VAR flat(NerdCore::VAR* args, int _length) const; + NerdCore::VAR flatMap(NerdCore::VAR* args, int _length) const; + NerdCore::VAR forEach(NerdCore::VAR* args, int _length) const; + NerdCore::VAR includes(NerdCore::VAR* args, int _length) const; + NerdCore::VAR indexOf(NerdCore::VAR* args, int _length) const; + NerdCore::VAR join(NerdCore::VAR* args, int _length) const; + NerdCore::VAR keys(NerdCore::VAR* args, int _length) const; + NerdCore::VAR lastIndexOf(NerdCore::VAR* args, int _length) const; + NerdCore::VAR map(NerdCore::VAR* args, int _length) const; + NerdCore::VAR pop(NerdCore::VAR* args, int _length); + NerdCore::VAR push(NerdCore::VAR* args, int _length); + NerdCore::VAR reduce(NerdCore::VAR* args, int _length) const; + NerdCore::VAR reduceRight(NerdCore::VAR* args, int _length) const; + NerdCore::VAR reverse(NerdCore::VAR* args, int _length); + NerdCore::VAR shift(NerdCore::VAR* args, int _length); + NerdCore::VAR slice(NerdCore::VAR* args, int _length) const; + NerdCore::VAR some(NerdCore::VAR* args, int _length) const; + NerdCore::VAR sort(NerdCore::VAR* args, int _length) const; + NerdCore::VAR splice(NerdCore::VAR* args, int _length); + NerdCore::VAR toLocaleString(NerdCore::VAR* args, int _length) const; + NerdCore::VAR toString(NerdCore::VAR* args, int _length) const; + NerdCore::VAR unshift(NerdCore::VAR* args, int _length); + NerdCore::VAR values(NerdCore::VAR* args, int _length) const; + }; +} // namespace NerdCore::Class diff --git a/compiler/native/nerdcore/src/class/base_header.h b/compiler/native/nerdcore/src/class/base_header.h new file mode 100644 index 000000000..833ab57b6 --- /dev/null +++ b/compiler/native/nerdcore/src/class/base_header.h @@ -0,0 +1,47 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +#pragma once +#include "_meta.h" + +namespace NerdCore::Class +{ + class Base + { + public: + #ifdef __NERD_ENV_ESP32 + virtual ~Base() { } + #endif + virtual void Delete() noexcept{}; + virtual void* Copy() noexcept{ return nullptr; }; + virtual explicit operator bool() const noexcept{ return true;}; + virtual explicit operator std::string() const noexcept{ return "";}; + virtual explicit operator int() const noexcept {return 0;}; + virtual explicit operator double() const noexcept {return 0.0;}; + virtual explicit operator long long() const noexcept {return 0;}; + virtual NerdCore::VAR &operator[](NerdCore::VAR key){ return NerdCore::Global::null; }; + virtual NerdCore::VAR &operator[](int key){ return NerdCore::Global::null; }; + virtual NerdCore::VAR &operator[](double key){ return NerdCore::Global::null; }; + virtual NerdCore::VAR &operator[](const char* key){ return NerdCore::Global::null; }; + }; +} \ No newline at end of file diff --git a/compiler/native/nerdcore/src/class/fixed_array.h b/compiler/native/nerdcore/src/class/fixed_array.h new file mode 100644 index 000000000..e068a24f6 --- /dev/null +++ b/compiler/native/nerdcore/src/class/fixed_array.h @@ -0,0 +1,401 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +#pragma once +#include "array_header.h" +#include +#include + +namespace NerdCore::Class +{ + // Constructors + FixedArray::FixedArray() + { + length = 8; + value = new NerdCore::VAR[8]; + } + FixedArray::FixedArray(NerdCore::VAR _length) + { + length = _length; + value = new NerdCore::VAR[(int)_length]; + } + FixedArray::FixedArray(int _length) + { + length = _length; + value = new NerdCore::VAR[_length]; + } + FixedArray::FixedArray(NerdCore::VAR* _var, int _length) + { + length = _length; + value = new NerdCore::VAR[_length]; + for(int i = 0; i < _length; i++) + { + value[i] = _var[i]; + } + } + + // Methods + inline void FixedArray::Delete() noexcept + { + if (--counter == 0) + { + delete[] value; + delete this; + } + } + inline void* FixedArray::Copy() noexcept + { + counter++; + return this; + } + // Native cast + FixedArray::operator bool() const noexcept { return true; } + FixedArray::operator double() const noexcept + { + if ((int)length == 1) + { + return (double)value[0]; + } + else + { + #ifdef __NERD_ENV_ARDUINO + return 0; + #else + return std::numeric_limits::quiet_NaN(); + #endif + } + } + FixedArray::operator int() const noexcept + { + if ((int)length == 1) + { + return (int)value[0]; + } + else + { + #ifdef __NERD_ENV_ARDUINO + return 0; + #else + return std::numeric_limits::quiet_NaN(); + #endif + } + } + FixedArray::operator long long() const noexcept + { + if ((int)length == 1) + { + return (long long)value[0]; + } + else + { + #ifdef __NERD_ENV_ARDUINO + return 0; + #else + return std::numeric_limits::quiet_NaN(); + #endif + } + } + FixedArray::operator std::string() const noexcept + { + auto l = (int)length; + std::stringstream stream; + stream << (std::string)value[0]; + for (auto i = 1; i < l; i++) + { + stream << "," << (std::string)value[i]; + } + return stream.str(); + } + // Main operators + NerdCore::VAR const FixedArray::operator[](NerdCore::VAR key) const + { + if (key.type == NerdCore::Enum::Type::Number) + { + auto i = (int)key; + if (i >= 0 && i <= (int)length) + { + return value[i]; + } + } + + return NerdCore::Global::null; + } + NerdCore::VAR const FixedArray::operator[](int key) const + { + if (key >= 0 && key <= (int)length) + { + return value[key]; + } + + return NerdCore::Global::null; + } + + NerdCore::VAR &FixedArray::operator[](NerdCore::VAR key) + { + if (key.type == NerdCore::Enum::Type::Number) + { + auto i = (int)key; + + if (i < 0) + { + return NerdCore::Global::null; + } + else + { + if (i >= (int)length) + { + return NerdCore::Global::null; + } + } + return value[i]; + } + + return NerdCore::Global::null; + } + + NerdCore::VAR &FixedArray::operator[](int key) + { + if (key < 0) + { + return NerdCore::Global::null; + } + else + { + if (key >= (int)length) + { + return NerdCore::Global::null; + } + } + return value[key]; + } + + NerdCore::VAR &FixedArray::operator[](double key) + { + if (key < 0) + { + return NerdCore::Global::null; + } + else + { + if (key >= (int)length) + { + return NerdCore::Global::null; + } + } + return value[(int)key]; + } + + NerdCore::VAR &FixedArray::operator[](const char* key) + { + return NerdCore::Global::null; + } + + // Comparation operators + FixedArray FixedArray::operator!() const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return FixedArray(); + } + + // Numeric operators + FixedArray FixedArray::operator+() const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return FixedArray(); + } + FixedArray FixedArray::operator-() const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return FixedArray(); + } + FixedArray FixedArray::operator++(const int _v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return FixedArray(); + } + FixedArray FixedArray::operator--(const int _v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return FixedArray(); + } + FixedArray FixedArray::operator+(const FixedArray &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return FixedArray(); + } + FixedArray FixedArray::operator+=(const FixedArray &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return FixedArray(); + } + FixedArray FixedArray::operator-(const FixedArray &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return FixedArray(); + } + FixedArray FixedArray::operator-=(const FixedArray &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return FixedArray(); + } + FixedArray FixedArray::operator*(const FixedArray &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return FixedArray(); + } + FixedArray FixedArray::operator*=(const FixedArray &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return FixedArray(); + } + // TODO: "**" and "**=" operators + FixedArray FixedArray::operator/(const FixedArray &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return FixedArray(); + } + FixedArray FixedArray::operator/=(const FixedArray &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return FixedArray(); + } + FixedArray FixedArray::operator%(const FixedArray &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return FixedArray(); + } + FixedArray FixedArray::operator%=(const FixedArray &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return FixedArray(); + } + FixedArray FixedArray::operator&(const FixedArray &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return FixedArray(); + } + FixedArray FixedArray::operator|(const FixedArray &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return FixedArray(); + } + FixedArray FixedArray::operator^(const FixedArray &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return FixedArray(); + } + FixedArray FixedArray::operator~() const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return FixedArray(); + } + FixedArray FixedArray::operator>>(const FixedArray &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return FixedArray(); + } + FixedArray FixedArray::operator<<(const FixedArray &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return FixedArray(); + } + FixedArray FixedArray::operator&=(const FixedArray &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return FixedArray(); + } + FixedArray FixedArray::operator|=(const FixedArray &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return FixedArray(); + } + FixedArray FixedArray::operator^=(const FixedArray &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return FixedArray(); + } + FixedArray FixedArray::operator>>=(const FixedArray &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return FixedArray(); + } + FixedArray FixedArray::operator<<=(const FixedArray &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return FixedArray(); + } + // TODO: ">>>" and ">>>=" operators + +} // namespace NerdCore::Class diff --git a/compiler/native/nerdcore/src/class/fixed_array_header.h b/compiler/native/nerdcore/src/class/fixed_array_header.h new file mode 100644 index 000000000..174e759c2 --- /dev/null +++ b/compiler/native/nerdcore/src/class/fixed_array_header.h @@ -0,0 +1,111 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +#pragma once +#include "_meta.h" + +namespace NerdCore::Class +{ + class FixedArray : public virtual Base + { + public: + // Constructors + FixedArray(); + FixedArray(NerdCore::VAR length); + FixedArray(int length); + FixedArray(NerdCore::VAR* value, int length); + // Properties + count_t counter = 0; + NerdCore::VAR length; + NerdCore::VAR* value; + // Methods + inline void Delete() noexcept; + inline void* Copy() noexcept; + // Native cast + explicit operator bool() const noexcept; + explicit operator double() const noexcept; + explicit operator int() const noexcept; + explicit operator long long() const noexcept; + explicit operator std::string() const noexcept; + // Main operators + NerdCore::VAR const operator[](NerdCore::VAR key) const; + NerdCore::VAR const operator[](int key) const; + NerdCore::VAR &operator[](NerdCore::VAR key); + NerdCore::VAR &operator[](int key); + NerdCore::VAR &operator[](double key); + NerdCore::VAR &operator[](const char* key); + + // Comparation operators + FixedArray operator!() const; + + template + bool operator==(const t &_v1) const { return false; } + + // === emulated with __NERD_EQUAL_VALUE_AND_TYPE + // !== emulated with __NERD_NOT_EQUAL_VALUE_AND_TYPE + + template + bool operator!=(const t &_v1) const { return true; } + + template + bool operator<(const t &_v1) const { return (*this)[0] < _v1;} + + template + bool operator<=(const t &_v1) const { return (*this)[0] <= _v1; } + + template + bool operator>(const t &_v1) const { return (*this)[0] > _v1; } + + template + bool operator>=(const t &_v1) const { return (*this)[0] >= _v1; } + + // Numeric operators + FixedArray operator+() const; + FixedArray operator-() const; + FixedArray operator++(const int _v1); + FixedArray operator--(const int _v1); + FixedArray operator+(const FixedArray &_v1) const; + FixedArray operator+=(const FixedArray &_v1); + FixedArray operator-(const FixedArray &_v1) const; + FixedArray operator-=(const FixedArray &_v1); + FixedArray operator*(const FixedArray &_v1) const; + FixedArray operator*=(const FixedArray &_v1); + // TODO: "**" and "**=" operators + FixedArray operator/(const FixedArray &_v1) const; + FixedArray operator/=(const FixedArray &_v1); + FixedArray operator%(const FixedArray &_v1) const; + FixedArray operator%=(const FixedArray &_v1); + FixedArray operator&(const FixedArray &_v1) const; + FixedArray operator|(const FixedArray &_v1) const; + FixedArray operator^(const FixedArray &_v1) const; + FixedArray operator~() const; + FixedArray operator>>(const FixedArray &_v1) const; + FixedArray operator<<(const FixedArray &_v1) const; + FixedArray operator&=(const FixedArray &_v1); + FixedArray operator|=(const FixedArray &_v1); + FixedArray operator^=(const FixedArray &_v1); + FixedArray operator>>=(const FixedArray &_v1); + FixedArray operator<<=(const FixedArray &_v1); + // TODO: ">>>" and ">>>=" operators + }; +} // namespace NerdCore::Class diff --git a/compiler/native/nerdcore/src/class/function.h b/compiler/native/nerdcore/src/class/function.h new file mode 100644 index 000000000..3390b2288 --- /dev/null +++ b/compiler/native/nerdcore/src/class/function.h @@ -0,0 +1,410 @@ +/* + Copyright (c) 2022 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +#pragma once +#include "function_header.h" +#include +#include + +namespace NerdCore::Class +{ + // Constructors + Function::Function() + { + (*this)["prototype"] = new NerdCore::Class::Object(); + } + Function::Function(void *val) + { + counter++; + value = (NerdCore::Type::function_t*)val; + if((*this)["prototype"].type == NerdCore::Enum::Type::Null) + { + (*this)["prototype"] = new NerdCore::Class::Object(); + } + } + Function::Function(void *val, NerdCore::VAR __this) + { + counter++; + (*this)["this"] = __this; + value = (NerdCore::Type::function_t*)val; + if((*this)["prototype"].type == NerdCore::Enum::Type::Null) + { + (*this)["prototype"] = new NerdCore::Class::Object(); + } + } + // Methods + inline void Function::Delete() noexcept + { + if (--counter < 1) + { + delete (NerdCore::Type::function_t*)value; + delete this; + } + } + inline void Function::jsDelete(const std::string _key) noexcept + { + + } + inline void* Function::Copy() noexcept + { + counter++; + return this; + } + + // Main operators + NerdCore::VAR const Function::operator[](NerdCore::VAR key) const + { + return NerdCore::Global::null; + } + + #ifndef __NERD__OBJECT_VECTOR + NerdCore::VAR &Function::operator[](NerdCore::VAR key) + { + /* + if(hasLazy && LazyRTM.count(key) && !object.count(key)) + { + object[key] = LazyRTM[key]; + } + */ + return object[key]; + } + #else + NerdCore::VAR &Function::operator[](NerdCore::VAR key) + { + std::string _str = ((std::string)key); + NerdCore::Type::StringView _sview = _str; + + if (key.type == NerdCore::Enum::Type::Number) + { + auto i = (int)key; + + if (i < 0) + { + return NerdCore::Global::null; + } + else + { + if (i >= object.size()) + { + object.reserve(i + 1); + object.resize(i + 1); + } + } + return object[i].second; + } + + for (auto & search : object) + { + if (_sview.compare(search.first) == 0) + { + return search.second; + } + } + + object.push_back(NerdCore::Type::pair_t(_str, NerdCore::Global::null)); + + return object[object.size() - 1].second; + } + #endif + + #ifndef __NERD__OBJECT_VECTOR + NerdCore::VAR &Function::operator[](int key) + { + std::string _str = std::to_string(key); + NerdCore::Type::StringView _sview = _str; + + return object[_str]; + } + #else + NerdCore::VAR &Function::operator[](int key) + { + std::string _str = std::to_string(key); + NerdCore::Type::StringView _sview = _str; + + for (auto & search : object) + { + if (_sview.compare(search.first) == 0) + { + return search.second; + } + } + + object.push_back(NerdCore::Type::pair_t(_str, NerdCore::Global::null)); + + + return object[object.size() - 1].second; + } + #endif + + #ifndef __NERD__OBJECT_VECTOR + NerdCore::VAR &Function::operator[](double key) + { + std::string _str = std::to_string(key); + NerdCore::Type::StringView _sview = _str; + + return object[_str]; + } + #else + NerdCore::VAR &Function::operator[](double key) + { + std::string _str = std::to_string(key); + NerdCore::Type::StringView _sview = _str; + + for (auto & search : object) + { + if (_sview.compare(search.first) == 0) + { + return search.second; + } + } + + object.push_back(NerdCore::Type::pair_t(_str, NerdCore::Global::null)); + + return object[object.size() - 1].second; + } + #endif + + #ifndef __NERD__OBJECT_VECTOR + NerdCore::VAR &Function::operator[](const char* key) + { + /* + if(hasLazy && LazyRTM.count(key) && !object.count(key)) + { + object[key] = LazyRTM[key]; + } + */ + return object[key]; + } + #else + NerdCore::VAR &Function::operator[](const char* key) + { + std::string _str = key; + NerdCore::Type::StringView _sview = _str; + + for (auto & search : object) + { + if (_sview.compare(search.first) == 0) + { + return search.second; + } + } + + object.push_back(NerdCore::Type::pair_t(_str, NerdCore::Global::null)); + + + return object[object.size() - 1].second; + } + #endif + + // Comparation operators + NerdCore::VAR Function::operator!() const + { + return __NERD_Boolean_FALSE; + } + bool Function::operator==(const Function &_v1) const { return false; } + // === emulated with __NERD_EQUAL_VALUE_AND_TYPE + // !== emulated with __NERD_NOT_EQUAL_VALUE_AND_TYPE + bool Function::operator!=(const Function &_v1) const { return true; } + bool Function::operator<(const Function &_v1) const { return false; } + bool Function::operator<=(const Function &_v1) const { return true; } + bool Function::operator>(const Function &_v1) const { return false; } + bool Function::operator>=(const Function &_v1) const { return true; } + // Numeric operators + Function Function::operator+() const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Function(); + } + Function Function::operator-() const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Function(); + } + Function Function::operator++(const int _v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Function(); + } + Function Function::operator--(const int _v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Function(); + } + Function Function::operator+(const Function &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Function(); + } + Function Function::operator+=(const Function &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Function(); + } + Function Function::operator-(const Function &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Function(); + } + Function Function::operator-=(const Function &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Function(); + } + Function Function::operator*(const Function &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Function(); + } + Function Function::operator*=(const Function &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Function(); + } + // TODO: "**" and "**=" operators + Function Function::operator/(const Function &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Function(); + } + Function Function::operator/=(const Function &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Function(); + } + Function Function::operator%(const Function &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Function(); + } + Function Function::operator%=(const Function &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Function(); + } + Function Function::operator&(const Function &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Function(); + } + Function Function::operator|(const Function &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Function(); + } + Function Function::operator^(const Function &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Function(); + } + Function Function::operator~() const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Function(); + } + Function Function::operator>>(const Function &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Function(); + } + Function Function::operator<<(const Function &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Function(); + } + Function Function::operator&=(const Function &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Function(); + } + Function Function::operator|=(const Function &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Function(); + } + Function Function::operator^=(const Function &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Function(); + } + Function Function::operator>>=(const Function &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Function(); + } + Function Function::operator<<=(const Function &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Function(); + } + // TODO: ">>>" and ">>>=" operators +} // namespace NerdCore::Class diff --git a/compiler/native/nerdcore/src/class/function_header.h b/compiler/native/nerdcore/src/class/function_header.h new file mode 100644 index 000000000..7ec4cc959 --- /dev/null +++ b/compiler/native/nerdcore/src/class/function_header.h @@ -0,0 +1,151 @@ +/* + Copyright (c) 2022 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +#pragma once +#include "_meta.h" + +namespace NerdCore::Class +{ + class Function : public virtual Base + { + public: + // Constructors + Function(); + Function(void* val); + Function(void* val, NerdCore::VAR __this); + // Properties + count_t counter = 0; + + NerdCore::Type::function_t* value = nullptr; + NerdCore::Type::object_t object; + NerdCore::VAR This; + //void* bind = nullptr; + // Methods + inline void Delete() noexcept; + inline void jsDelete(std::string _key) noexcept; + inline void* Copy() noexcept; + + inline NerdCore::VAR Call(NerdCore::VAR __NERD_THIS, NerdCore::VAR* _args, int i) + { + #ifndef __NERD__OBJECT_VECTOR + if(__NERD_THIS.type == NerdCore::Enum::Type::Null) + { + return std::invoke((*static_cast(value)), This, _args, i); + } + else + { + return std::invoke((*static_cast(value)), __NERD_THIS, _args, i); + } + #else + return (*static_cast(value))(__NERD_THIS, _args, i); + #endif + } + + template + NerdCore::VAR operator()(NerdCore::VAR __NERD_THIS, Args... args) + { + NerdCore::VAR _args[] = {args...}; + int i = sizeof...(args); + #ifndef __NERD__OBJECT_VECTOR + if(__NERD_THIS.type == NerdCore::Enum::Type::Null) + { + return std::invoke((*static_cast(value)), This, _args, i); + } + else + { + return std::invoke((*static_cast(value)), __NERD_THIS, _args, i); + } + #else + return (*static_cast(value))(__NERD_THIS, _args, i); + #endif + } + + template + NerdCore::VAR New(NerdCore::VAR __NERD_THIS, Args... args) + { + + NerdCore::VAR _args[] = {args...}; + int i = sizeof...(args); + + NerdCore::VAR _this = new NerdCore::Class::Object(); //__NERD_Object_Clone((*this)["this"]); + if(_this.type == NerdCore::Enum::Type::Null) _this = new NerdCore::Class::Object(); + + //((NerdCore::Class::Object*)_this.data.ptr)->bind = bind; + NerdCore::VAR _return = this->Call(_this, _args, i); + if(_return.type == NerdCore::Enum::Type::Object) + { + _this = _return; + } + _this["__proto__"] = object["prototype"]; + return _this; + + } + + + // Main operators + NerdCore::VAR const operator[](NerdCore::VAR key) const; + NerdCore::VAR &operator[](NerdCore::VAR key); + NerdCore::VAR &operator[](int key); + NerdCore::VAR &operator[](double key); + NerdCore::VAR &operator[](const char* key); + + // Comparation operators + NerdCore::VAR operator!() const; + bool operator==(const Function &_v1) const; + // === emulated with __NERD_EQUAL_VALUE_AND_TYPE + // !== emulated with __NERD_NOT_EQUAL_VALUE_AND_TYPE + bool operator!=(const Function &_v1) const; + bool operator<(const Function &_v1) const; + bool operator<=(const Function &_v1) const; + bool operator>(const Function &_v1) const; + bool operator>=(const Function &_v1) const; + // Numeric operators + Function operator+() const; + Function operator-() const; + Function operator++(const int _v1); + Function operator--(const int _v1); + Function operator+(const Function &_v1) const; + Function operator+=(const Function &_v1); + Function operator-(const Function &_v1) const; + Function operator-=(const Function &_v1); + Function operator*(const Function &_v1) const; + Function operator*=(const Function &_v1); + // TODO: "**" and "**=" operators + Function operator/(const Function &_v1) const; + Function operator/=(const Function &_v1); + Function operator%(const Function &_v1) const; + Function operator%=(const Function &_v1); + Function operator&(const Function &_v1) const; + Function operator|(const Function &_v1) const; + Function operator^(const Function &_v1) const; + Function operator~() const; + Function operator>>(const Function &_v1) const; + Function operator<<(const Function &_v1) const; + Function operator&=(const Function &_v1); + Function operator|=(const Function &_v1); + Function operator^=(const Function &_v1); + Function operator>>=(const Function &_v1); + Function operator<<=(const Function &_v1); + // TODO: ">>>" and ">>>=" operators + }; +} // namespace NerdCore::Class \ No newline at end of file diff --git a/compiler/native/nerdcore/src/class/native.h b/compiler/native/nerdcore/src/class/native.h new file mode 100644 index 000000000..63f4debcd --- /dev/null +++ b/compiler/native/nerdcore/src/class/native.h @@ -0,0 +1,301 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +#pragma once +#include "native_header.h" +#include +#include + +namespace NerdCore::Class +{ + // Constructors + Native::Native() {} + Native::Native(void *val) + { + value = val; + } + // Methods + inline void Native::Delete() noexcept + { + if (--counter < 1) + { + if((*this)["__NERD_On_Destroy"]) (*this)["__NERD_On_Destroy"](NerdCore::Global::null); + delete this; + } + } + inline void* Native::Copy() noexcept + { + counter++; + return this; + } + // Native cast + Native::operator bool() const noexcept { return true; } + Native::operator double() const noexcept + { + #ifdef __NERD_ENV_ARDUINO + return 0; + #else + return std::numeric_limits::quiet_NaN(); + #endif + } + Native::operator int() const noexcept + { + #ifdef __NERD_ENV_ARDUINO + return 0; + #else + return std::numeric_limits::quiet_NaN(); + #endif + } + Native::operator long long() const noexcept + { + #ifdef __NERD_ENV_ARDUINO + return 0; + #else + return std::numeric_limits::quiet_NaN(); + #endif + } + Native::operator std::string() const noexcept + { + return "[native code]"; + } + // Main operators + NerdCore::VAR const Native::operator[](NerdCore::VAR key) const + { + return NerdCore::Global::null; + } + NerdCore::VAR &Native::operator[](NerdCore::VAR key) + { + return NerdCore::Global::null; + } + + NerdCore::VAR &Native::operator[](int key) + { + return NerdCore::Global::null; + } + + NerdCore::VAR &Native::operator[](double key) + { + return NerdCore::Global::null; + } + + + NerdCore::VAR &Native::operator[](const char* key) + { + return NerdCore::Global::null; + } + + // Comparation operators + Native Native::operator!() const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Native(); + } + bool Native::operator==(const Native &_v1) const { return false; } + // === emulated with __NERD_EQUAL_VALUE_AND_TYPE + // !== emulated with __NERD_NOT_EQUAL_VALUE_AND_TYPE + bool Native::operator!=(const Native &_v1) const { return true; } + bool Native::operator<(const Native &_v1) const { return false; } + bool Native::operator<=(const Native &_v1) const { return true; } + bool Native::operator>(const Native &_v1) const { return false; } + bool Native::operator>=(const Native &_v1) const { return true; } + // Numeric operators + Native Native::operator+() const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Native(); + } + Native Native::operator-() const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Native(); + } + Native Native::operator++(const int _v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Native(); + } + Native Native::operator--(const int _v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Native(); + } + Native Native::operator+(const Native &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Native(); + } + Native Native::operator+=(const Native &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Native(); + } + Native Native::operator-(const Native &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Native(); + } + Native Native::operator-=(const Native &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Native(); + } + Native Native::operator*(const Native &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Native(); + } + Native Native::operator*=(const Native &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Native(); + } + // TODO: "**" and "**=" operators + Native Native::operator/(const Native &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Native(); + } + Native Native::operator/=(const Native &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Native(); + } + Native Native::operator%(const Native &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Native(); + } + Native Native::operator%=(const Native &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Native(); + } + Native Native::operator&(const Native &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Native(); + } + Native Native::operator|(const Native &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Native(); + } + Native Native::operator^(const Native &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Native(); + } + Native Native::operator~() const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Native(); + } + Native Native::operator>>(const Native &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Native(); + } + Native Native::operator<<(const Native &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Native(); + } + Native Native::operator&=(const Native &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Native(); + } + Native Native::operator|=(const Native &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Native(); + } + Native Native::operator^=(const Native &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Native(); + } + Native Native::operator>>=(const Native &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Native(); + } + Native Native::operator<<=(const Native &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Native(); + } + // TODO: ">>>" and ">>>=" operators +} // namespace NerdCore::Class diff --git a/compiler/native/nerdcore/src/class/native_header.h b/compiler/native/nerdcore/src/class/native_header.h new file mode 100644 index 000000000..cdaa099b8 --- /dev/null +++ b/compiler/native/nerdcore/src/class/native_header.h @@ -0,0 +1,94 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +#pragma once +#include "_meta.h" + +namespace NerdCore::Class +{ + class Native : public virtual Base + { + public: + // Constructors + Native(); + Native(void* val); + // Properties + count_t counter = 1; + int length = 0; + void* value = nullptr; + // Methods + inline void Delete() noexcept; + inline void* Copy() noexcept; + // Native cast + explicit operator bool() const noexcept; + explicit operator double() const noexcept; + explicit operator int() const noexcept; + explicit operator long long() const noexcept; + explicit operator std::string() const noexcept; + // Main operators + NerdCore::VAR const operator[](NerdCore::VAR key) const; + NerdCore::VAR &operator[](NerdCore::VAR key); + NerdCore::VAR &operator[](int key); + NerdCore::VAR &operator[](double key); + NerdCore::VAR &operator[](const char* key); + + // Comparation operators + Native operator!() const; + bool operator==(const Native &_v1) const; + // === emulated with __NERD_EQUAL_VALUE_AND_TYPE + // !== emulated with __NERD_NOT_EQUAL_VALUE_AND_TYPE + bool operator!=(const Native &_v1) const; + bool operator<(const Native &_v1) const; + bool operator<=(const Native &_v1) const; + bool operator>(const Native &_v1) const; + bool operator>=(const Native &_v1) const; + // Numeric operators + Native operator+() const; + Native operator-() const; + Native operator++(const int _v1); + Native operator--(const int _v1); + Native operator+(const Native &_v1) const; + Native operator+=(const Native &_v1); + Native operator-(const Native &_v1) const; + Native operator-=(const Native &_v1); + Native operator*(const Native &_v1) const; + Native operator*=(const Native &_v1); + // TODO: "**" and "**=" operators + Native operator/(const Native &_v1) const; + Native operator/=(const Native &_v1); + Native operator%(const Native &_v1) const; + Native operator%=(const Native &_v1); + Native operator&(const Native &_v1) const; + Native operator|(const Native &_v1) const; + Native operator^(const Native &_v1) const; + Native operator~() const; + Native operator>>(const Native &_v1) const; + Native operator<<(const Native &_v1) const; + Native operator&=(const Native &_v1); + Native operator|=(const Native &_v1); + Native operator^=(const Native &_v1); + Native operator>>=(const Native &_v1); + Native operator<<=(const Native &_v1); + // TODO: ">>>" and ">>>=" operators + }; +} // namespace NerdCore::Class diff --git a/compiler/native/nerdcore/src/class/native_tpl_header.h b/compiler/native/nerdcore/src/class/native_tpl_header.h new file mode 100644 index 000000000..858ddd054 --- /dev/null +++ b/compiler/native/nerdcore/src/class/native_tpl_header.h @@ -0,0 +1,359 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +#pragma once +#include "_meta.h" + + +namespace NerdCore::Class +{ + template + class NativeTPL : public virtual Base + { + + private: + inline void internalDelete() + { + if(is_ptr) + { + delete value; + } + } + public: + // Constructors + bool is_ptr = true; + int length = 0; + std::string type; + + NativeTPL(T val) + { + is_ptr = true; + value = val; + + type = "undef"; + } + NativeTPL(T val, const char str[]) + { + is_ptr = true; + type = str; + value = val; + } + NativeTPL(T val, bool isPtr) + { + is_ptr = isPtr; + value = val; + type = "undef"; + } + NativeTPL(T val, const char str[], bool isPtr) + { + is_ptr = isPtr; + value = val; + type = str; + } + // Properties + count_t counter = 1; + T value; + NerdCore::Type::object_t object; + // Methods + + inline void Delete() noexcept + { + if (--counter == 0) + { + internalDelete(); + delete this; + } + } + + inline void* Copy() noexcept + { + counter++; + return this; + } + + template + const inline T operator()(Cast& c) const + { + static_assert(std::is_same::value, "Casting must be same as NativeType"); + + return value; + } + + inline T operator()() const + { + return value; + } + + operator bool() const noexcept { return true; } + operator double() const noexcept + { + #ifdef __NERD_ENV_ARDUINO + return 0; + #else + return std::numeric_limits::quiet_NaN(); + #endif + } + operator int() const noexcept + { + #ifdef __NERD_ENV_ARDUINO + return 0; + #else + return std::numeric_limits::quiet_NaN(); + #endif + } + operator long long() const noexcept + { + #ifdef __NERD_ENV_ARDUINO + return 0; + #else + return std::numeric_limits::quiet_NaN(); + #endif + } + operator std::string() const noexcept + { + return std::string("[native ") + type + std::string("]"); + } + + // Main operators + NerdCore::VAR const operator[](NerdCore::VAR key) const + { + return NerdCore::Global::null; + } + NerdCore::VAR &operator[](NerdCore::VAR key) + { + return NerdCore::Global::null; + } + + NerdCore::VAR &operator[](int key) + { + return NerdCore::Global::null; + } + + NerdCore::VAR &operator[](double key) + { + return NerdCore::Global::null; + } + + + NerdCore::VAR &operator[](const char* key) + { + return NerdCore::Global::null; + } + + // Comparation operators + NativeTPL operator!() const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NativeTPL(); + } + bool operator==(const NativeTPL &_v1) const { return false; } + // === emulated with __NERD_EQUAL_VALUE_AND_TYPE + // !== emulated with __NERD_NOT_EQUAL_VALUE_AND_TYPE + bool operator!=(const NativeTPL &_v1) const { return true; } + bool operator<(const NativeTPL &_v1) const { return false; } + bool operator<=(const NativeTPL &_v1) const { return true; } + bool operator>(const NativeTPL &_v1) const { return false; } + bool operator>=(const NativeTPL &_v1) const { return true; } + // Numeric operators + NativeTPL operator+() const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NativeTPL(); + } + NativeTPL operator-() const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NativeTPL(); + } + NativeTPL operator++(const int _v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NativeTPL(); + } + NativeTPL operator--(const int _v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NativeTPL(); + } + NativeTPL operator+(const NativeTPL &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NativeTPL(); + } + NativeTPL operator+=(const NativeTPL &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NativeTPL(); + } + NativeTPL operator-(const NativeTPL &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NativeTPL(); + } + NativeTPL operator-=(const NativeTPL &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NativeTPL(); + } + NativeTPL operator*(const NativeTPL &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NativeTPL(); + } + NativeTPL operator*=(const NativeTPL &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NativeTPL(); + } + // TODO: "**" and "**=" operators + NativeTPL operator/(const NativeTPL &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NativeTPL(); + } + NativeTPL operator/=(const NativeTPL &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NativeTPL(); + } + NativeTPL operator%(const NativeTPL &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NativeTPL(); + } + NativeTPL operator%=(const NativeTPL &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NativeTPL(); + } + NativeTPL operator&(const NativeTPL &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NativeTPL(); + } + NativeTPL operator|(const NativeTPL &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NativeTPL(); + } + NativeTPL operator^(const NativeTPL &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NativeTPL(); + } + NativeTPL operator~() const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NativeTPL(); + } + NativeTPL operator>>(const NativeTPL &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NativeTPL(); + } + NativeTPL operator<<(const NativeTPL &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NativeTPL(); + } + NativeTPL operator&=(const NativeTPL &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NativeTPL(); + } + NativeTPL operator|=(const NativeTPL &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NativeTPL(); + } + NativeTPL operator^=(const NativeTPL &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NativeTPL(); + } + NativeTPL operator>>=(const NativeTPL &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NativeTPL(); + } + NativeTPL operator<<=(const NativeTPL &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NativeTPL(); + } + // TODO: ">>>" and ">>>=" operators + + }; +} // namespace NerdCore::Class diff --git a/compiler/native/nerdcore/src/class/number.h b/compiler/native/nerdcore/src/class/number.h new file mode 100644 index 000000000..19e3b7c22 --- /dev/null +++ b/compiler/native/nerdcore/src/class/number.h @@ -0,0 +1,27 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +namespace NerdCore::Class::NUMBER +{ + +} diff --git a/compiler/native/nerdcore/src/class/number_header.h b/compiler/native/nerdcore/src/class/number_header.h new file mode 100644 index 000000000..c9a134f2f --- /dev/null +++ b/compiler/native/nerdcore/src/class/number_header.h @@ -0,0 +1,27 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +namespace NerdCore::Class::NUMBER +{ + +} diff --git a/compiler/native/nerdcore/src/class/object.h b/compiler/native/nerdcore/src/class/object.h new file mode 100644 index 000000000..a02c0321a --- /dev/null +++ b/compiler/native/nerdcore/src/class/object.h @@ -0,0 +1,386 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +#pragma once +#include "object_header.h" +#include + +namespace NerdCore::Class +{ + NerdCore::VAR __proxy; + // Constructors + Object::Object() { } + + /* + Object::Object(const char* _key, NerdCore::VAR _value) + { + object[_key] = _value; + } + */ + /* + Object::Object(NerdCore::VAR _obj) + { + object = ((NerdCore::Class::Object*)_obj.data.ptr)->object; + } + */ + + Object::Object(NerdCore::Type::object_t obj) + { + object = obj; + } + + Object::Object(std::initializer_list obj) + { + for (NerdCore::Type::pair_t p : obj) + { + object[p.first] = p.second; + } + } + + // Methods + double Object::Size() + { + return object.size(); + } + + inline void Object::Delete() noexcept + { + if (--counter < 1) + { + delete this; + } + } + inline void Object::jsDelete(const std::string _key) noexcept + { + #ifndef __NERD__OBJECT_VECTOR + object.erase(_key); + #else + for (NerdCore::Type::object_t::iterator it = object.begin() ; it != object.end(); ++it) + { + if (_key.compare(it->first) == 0) + { + object.erase(it); + return; + } + } + #endif + } + inline void* Object::Copy() noexcept + { + counter++; + return this; + } + // Native cast + Object::operator bool() const noexcept { return true; } + Object::operator double() const noexcept + { + #ifdef __NERD_ENV_ARDUINO + return 0; + #else + return std::numeric_limits::quiet_NaN(); + #endif + } + Object::operator int() const noexcept + { + #ifdef __NERD_ENV_ARDUINO + return 0; + #else + return std::numeric_limits::quiet_NaN(); + #endif + } + Object::operator long long() const noexcept + { + #ifdef __NERD_ENV_ARDUINO + return 0; + #else + return std::numeric_limits::quiet_NaN(); + #endif + } + Object::operator std::string() const noexcept + { + return "[object Object]"; + } + // Main operators + NerdCore::VAR const Object::operator[](NerdCore::VAR key) const + { + return NerdCore::Global::null; + } + + NerdCore::VAR &Object::GetSet(std::string key) + { + #ifndef __NERD__OBJECT_VECTOR + // if current object[key] is null, we look for the prototypal chain + if(object[key].type == NerdCore::Enum::Type::Null) + { + NerdCore::VAR __proto = object["__proto__"]; + while(__proto.type != NerdCore::Enum::Type::Null) + { + if(__proto[key].type != NerdCore::Enum::Type::Null) + { + object[key] = __proto[key]; + break; + } + __proto = __proto["__proto__"]; + } + } + /* + if(object[key].type == NerdCore::Enum::Type::Function) + { + (__NERD_FUNCTION(object[key]))->object["this"] = NerdCore::VAR(this); + __NERD_FUNCTION(object[key])->bind = bind; + } + */ + return object[key]; + #else + for (auto & search : object) + { + if (key.compare(search.first) == 0) + { + return search.second; + } + } + + object.push_back(NerdCore::Type::pair_t(key, NerdCore::Global::null)); + + return object[object.size() - 1].second; + #endif + } + + NerdCore::VAR &Object::operator[](NerdCore::VAR key) + { + return Object::GetSet(key); + + } + + NerdCore::VAR &Object::operator[](int key) + { + std::string _str = std::to_string(key); + return Object::GetSet(_str); + } + + NerdCore::VAR &Object::operator[](double key) + { + std::string _str = std::to_string(key); + return Object::GetSet(_str); + } + + NerdCore::VAR &Object::operator[](const char* key) + { + return Object::GetSet(key); + } + + // Comparation operators + Object Object::operator!() const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Object(); + } + bool Object::operator==(const Object &_v1) const { return false; } + // === emulated with __NERD_EQUAL_VALUE_AND_TYPE + // !== emulated with __NERD_NOT_EQUAL_VALUE_AND_TYPE + bool Object::operator!=(const Object &_v1) const { return true; } + bool Object::operator<(const Object &_v1) const { return false; } + bool Object::operator<=(const Object &_v1) const { return true; } + bool Object::operator>(const Object &_v1) const { return false; } + bool Object::operator>=(const Object &_v1) const { return true; } + // Numeric operators + Object Object::operator+() const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Object(); + } + Object Object::operator-() const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Object(); + } + Object Object::operator++(const int _v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Object(); + } + Object Object::operator--(const int _v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Object(); + } + Object Object::operator+(const Object &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Object(); + } + Object Object::operator+=(const Object &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Object(); + } + Object Object::operator-(const Object &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Object(); + } + Object Object::operator-=(const Object &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Object(); + } + Object Object::operator*(const Object &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Object(); + } + Object Object::operator*=(const Object &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Object(); + } + // TODO: "**" and "**=" operators + Object Object::operator/(const Object &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Object(); + } + Object Object::operator/=(const Object &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Object(); + } + Object Object::operator%(const Object &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Object(); + } + Object Object::operator%=(const Object &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Object(); + } + Object Object::operator&(const Object &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Object(); + } + Object Object::operator|(const Object &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Object(); + } + Object Object::operator^(const Object &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Object(); + } + Object Object::operator~() const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Object(); + } + Object Object::operator>>(const Object &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Object(); + } + Object Object::operator<<(const Object &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Object(); + } + Object Object::operator&=(const Object &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Object(); + } + Object Object::operator|=(const Object &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Object(); + } + Object Object::operator^=(const Object &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Object(); + } + Object Object::operator>>=(const Object &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Object(); + } + Object Object::operator<<=(const Object &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Object(); + } + // TODO: ">>>" and ">>>=" operators +} // namespace NerdCore::Class diff --git a/compiler/native/nerdcore/src/class/object_header.h b/compiler/native/nerdcore/src/class/object_header.h new file mode 100644 index 000000000..12dc2d9c3 --- /dev/null +++ b/compiler/native/nerdcore/src/class/object_header.h @@ -0,0 +1,103 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +#pragma once +#include "_meta.h" + +namespace NerdCore::Class +{ + class Object : public virtual Base + { + public: + // Constructors + Object(); + Object(NerdCore::Type::object_t obj); + Object(std::initializer_list); + //Object(NerdCore::VAR _obj); + // Properties + count_t counter = 0; + bool deleted = false; + //bool hasLazy = false; + NerdCore::Type::object_t object; + void* bind = nullptr; + // Methods + double Size(); + inline void Delete() noexcept; + inline void jsDelete(const std::string _key) noexcept; + inline void* Copy() noexcept; + // Native cast + explicit operator bool() const noexcept; + explicit operator double() const noexcept; + explicit operator int() const noexcept; + explicit operator long long() const noexcept; + explicit operator std::string() const noexcept; + // Main operators + inline NerdCore::VAR& GetSet(std::string key); + + NerdCore::VAR const operator[](NerdCore::VAR key) const; + NerdCore::VAR &operator[](NerdCore::VAR key); + NerdCore::VAR &operator[](int key); + NerdCore::VAR &operator[](double key); + NerdCore::VAR &operator[](const char* key); + + + // Comparation operators + Object operator!() const; + bool operator==(const Object &_v1) const; + // === emulated with __NERD_EQUAL_VALUE_AND_TYPE + // !== emulated with __NERD_NOT_EQUAL_VALUE_AND_TYPE + bool operator!=(const Object &_v1) const; + bool operator<(const Object &_v1) const; + bool operator<=(const Object &_v1) const; + bool operator>(const Object &_v1) const; + bool operator>=(const Object &_v1) const; + // Numeric operators + Object operator+() const; + Object operator-() const; + Object operator++(const int _v1); + Object operator--(const int _v1); + Object operator+(const Object &_v1) const; + Object operator+=(const Object &_v1); + Object operator-(const Object &_v1) const; + Object operator-=(const Object &_v1); + Object operator*(const Object &_v1) const; + Object operator*=(const Object &_v1); + // TODO: "**" and "**=" operators + Object operator/(const Object &_v1) const; + Object operator/=(const Object &_v1); + Object operator%(const Object &_v1) const; + Object operator%=(const Object &_v1); + Object operator&(const Object &_v1) const; + Object operator|(const Object &_v1) const; + Object operator^(const Object &_v1) const; + Object operator~() const; + Object operator>>(const Object &_v1) const; + Object operator<<(const Object &_v1) const; + Object operator&=(const Object &_v1); + Object operator|=(const Object &_v1); + Object operator^=(const Object &_v1); + Object operator>>=(const Object &_v1); + Object operator<<=(const Object &_v1); + // TODO: ">>>" and ">>>=" operators + }; +} // namespace NerdCore::Class diff --git a/compiler/native/nerdcore/src/class/string.h b/compiler/native/nerdcore/src/class/string.h new file mode 100644 index 000000000..ebebb1205 --- /dev/null +++ b/compiler/native/nerdcore/src/class/string.h @@ -0,0 +1,571 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +#pragma once +#include "string_header.h" +#include +#include + +namespace NerdCore::Class +{ + + // Constructors + String::String() + { + object["__proto__"] = NerdCore::Global::String["prototype"]; + } + String::String(std::string val) + { + object["__proto__"] = NerdCore::Global::String["prototype"]; + value = val; + } + + String::String(const char* val) + { + object["__proto__"] = NerdCore::Global::String["prototype"]; + value = val; + } + + // Methods + inline void String::Delete() noexcept + { + if (--counter < 1) + { + delete this; + } + } + inline void* String::Copy() noexcept + { + return new String(value); + } + // Native cast + String::operator bool() const noexcept { return value.size() > 0; } + String::operator double() const noexcept + { + std::string::size_type end; + double res; + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + try + { + res = std::stod(value, &end); + }catch(...){} + #else + res = std::stod(value, &end); + #endif + + #ifdef __NERD_ENV_ARDUINO + return 0; + #else + return end == value.size() ? res : std::numeric_limits::quiet_NaN(); + #endif + } + String::operator int() const noexcept + { + std::string::size_type end; + int res; + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + try + { + res = std::stoi(value, &end, 10); + }catch(...){} + #else + res = std::stoi(value, &end, 10); + #endif + + #ifdef __NERD_ENV_ARDUINO + return 0; + #else + return end == value.size() ? res : std::numeric_limits::quiet_NaN(); + #endif + } + String::operator long long() const noexcept + { + std::string::size_type end; + long long res; + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + try + { + res = std::stoll(value, &end, 10); + }catch(...){} + #else + res = std::stoll(value, &end, 10); + #endif + + #ifdef __NERD_ENV_ARDUINO + return 0; + #else + return end == value.size() ? res : std::numeric_limits::quiet_NaN(); + #endif + } + String::operator std::string() const noexcept { return value; } + // Main operators + NerdCore::VAR const String::operator[](NerdCore::VAR key) const + { + return NerdCore::Global::null; + } + + static NerdCore::Global::var _char = ""; + + + + NerdCore::VAR &String::GetSet(NerdCore::VAR keyVar) + { + if(keyVar.type == NerdCore::Enum::Type::Number) + { + int key = (int)keyVar; + + if(key > value.size() - 1) + { + return NerdCore::Global::null; + } + else + { + _char = std::string(1, value[key]); + return _char; + } + } + else if(keyVar.type == NerdCore::Enum::Type::String) + { + std::string key = ((NerdCore::Class::String*)(keyVar.data.ptr))->value; + #ifndef __NERD__OBJECT_VECTOR + // if current object[key] is null, we look for the prototypal chain + if(object[key].type == NerdCore::Enum::Type::Null) + { + + NerdCore::VAR __proto = object["__proto__"]; + while(__proto.type != NerdCore::Enum::Type::Null) + { + if(__proto[key].type != NerdCore::Enum::Type::Null) + { + object[key] = __proto[key]; + break; + } + __proto = __proto["__proto__"]; + } + } + /* + if(object[key].type == NerdCore::Enum::Type::Function) + { + value.copy((char*)__NERD_FUNCTION(object[key])->bind, value.length()); + } + */ + + return object[key]; + #else + for (auto & search : object) + { + if (key.compare(search.first) == 0) + { + return search.second; + } + } + + object.push_back(NerdCore::Type::pair_t(key, NerdCore::Global::null)); + + return object[object.size() - 1].second; + #endif + } + else + { + return NerdCore::Global::null; + } + } + + + NerdCore::VAR &String::operator[](NerdCore::VAR key) + { + return String::GetSet(key); + } + + NerdCore::VAR &String::operator[](int key) + { + return String::GetSet(key); + } + + NerdCore::VAR &String::operator[](double key) + { + return String::GetSet(key); + } + + NerdCore::VAR &String::operator[](const char* key) + { + #ifndef __NERD__OBJECT_VECTOR + // if current object[key] is null, we look for the prototypal chain + if(object[key].type == NerdCore::Enum::Type::Null) + { + NerdCore::VAR __proto = object["__proto__"]; + while(__proto.type != NerdCore::Enum::Type::Null) + { + if(__proto[key].type != NerdCore::Enum::Type::Null) + { + object[key] = __proto[key]; + break; + } + __proto = __proto["__proto__"]; + } + } + /* + if(object[key].type == NerdCore::Enum::Type::Function) + { + //__NERD_FUNCTION(object[key])->bind = value.data(); + //value.copy((char*)__NERD_FUNCTION(object[key])->bind, value.length()); + } + */ + return object[key]; + #else + for (auto & search : object) + { + if (key.compare(search.first) == 0) + { + return search.second; + } + } + + object.push_back(NerdCore::Type::pair_t(key, NerdCore::Global::null)); + + return object[object.size() - 1].second; + #endif + } + + // Comparation operators + String String::operator!() const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return String(); + } + bool String::operator==(const String &_v1) const { return value.compare(_v1.value) == 0; } + // === emulated with __NERD_EQUAL_VALUE_AND_TYPE + // !== emulated with __NERD_NOT_EQUAL_VALUE_AND_TYPE + bool String::operator!=(const String &_v1) const { return value.compare(_v1.value) != 0; } + bool String::operator<(const String &_v1) const { return value.at(0) < _v1.value.at(0); } + bool String::operator<=(const String &_v1) const { return value.at(0) <= _v1.value.at(0); } + bool String::operator>(const String &_v1) const { return value.at(0) > _v1.value.at(0); } + bool String::operator>=(const String &_v1) const { return value.at(0) >= _v1.value.at(0); } + // Numeric operators + String String::operator+() const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return String(); + } + String String::operator-() const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return String(); + } + String String::operator++(const int _v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return String(); + } + String String::operator--(const int _v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return String(); + } + String String::operator+(const String &_v1) const { return value + _v1.value; } + String String::operator+=(const String &_v1) { value += _v1.value; return *this; } + String String::operator-(const String &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return String(); + } + String String::operator-=(const String &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return String(); + } + String String::operator*(const String &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return String(); + } + String String::operator*=(const String &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return String(); + } + // TODO: "**" and "**=" operators + String String::operator/(const String &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return String(); + } + String String::operator/=(const String &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return String(); + } + String String::operator%(const String &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return String(); + } + String String::operator%=(const String &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return String(); + } + String String::operator&(const String &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return String(); + } + String String::operator|(const String &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return String(); + } + String String::operator^(const String &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return String(); + } + String String::operator~() const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return String(); + } + String String::operator>>(const String &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return String(); + } + String String::operator<<(const String &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return String(); + } + String String::operator&=(const String &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return String(); + } + String String::operator|=(const String &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return String(); + } + String String::operator^=(const String &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return String(); + } + String String::operator>>=(const String &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return String(); + } + String String::operator<<=(const String &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return String(); + } + // TODO: ">>>" and ">>>=" operators + /*** STRING METHODS ***/ + NerdCore::VAR String::toString(NerdCore::VAR* _args, int _length) const + { + return value; + } + + NerdCore::VAR String::split(NerdCore::VAR* _args, int _length) const + { + NerdCore::VAR _needle; + if (_length > 0) + _needle = _args[0]; + else + return NerdCore::VAR(this->value); + + NerdCore::VAR _arr = new NerdCore::Class::Array(); + char *_v = (char *)malloc(strlen(this->value.c_str()) + 1); + strcpy(_v, this->value.c_str()); + char *delim = (char *)malloc(strlen(((std::string)_needle).c_str()) + 1); + strcpy(delim, ((std::string)_needle).c_str()); + + char *ptr = strtok(_v, delim); + int i = 0; + char *_new; + while (ptr != NULL) + { + _new = (char *)malloc(strlen(ptr) + 1); + strcpy(_new, ptr); + __NERD_Object_Set(i, _new, _arr); + free(_new); + ptr = strtok(NULL, delim); + i++; + } + + free(delim); + return _arr; + } + + NerdCore::VAR String::indexOf(NerdCore::VAR* _args, int _length) const + { + NerdCore::VAR _needle; + if (_length > 0) + _needle = _args[0]; + else + return NerdCore::VAR(-1); + + std::string::size_type loc = this->value.find((std::string)_needle, 0); + if (loc != std::string::npos) + { + return NerdCore::VAR((int)loc); + } + return NerdCore::VAR(-1); + } + + NerdCore::VAR String::lastIndexOf(NerdCore::VAR* _args, int _length) const + { + NerdCore::VAR _needle; + if (_length > 0) + _needle = _args[0]; + else + return NerdCore::VAR(-1); + + std::string::size_type loc = this->value.find_last_of((std::string)_needle, 0); + if (loc != std::string::npos) + { + return NerdCore::VAR((int)loc); + } + return NerdCore::VAR(-1); + } + + NerdCore::VAR String::search(NerdCore::VAR* _args, int _length) const + { + NerdCore::VAR _needle; + if (_length > 0) + _needle = _args[0]; + else + return NerdCore::VAR(-1); + + std::string::size_type loc = this->value.find((std::string)_needle, 0); + if (loc != std::string::npos) + { + return NerdCore::VAR((int)loc); + } + return NerdCore::VAR(-1); + } + + NerdCore::VAR String::slice(NerdCore::VAR* _args, int _length) const + { + NerdCore::VAR _start; + NerdCore::VAR _end; + if (_length > 0) + _start = _args[0]; + else + return NerdCore::VAR(this->value); + if (_length > 1) + _end = _args[1]; + + if (_end.type == NerdCore::Enum::Type::Null) + return NerdCore::VAR(this->value.substr((int)_start, std::string::npos)); + int _endIndex = (int)_end - (int)_start; + return NerdCore::VAR(this->value.substr((int)_start, _endIndex)); + } + + NerdCore::VAR String::substr(NerdCore::VAR* _args, int _length) const + { + NerdCore::VAR _start; + NerdCore::VAR _end; + if (_length > 0) + _start = _args[0]; + else + return NerdCore::VAR(this->value); + if (_length > 1) + _end = _args[1]; + + if (_end.type == NerdCore::Enum::Type::Null) + return NerdCore::VAR(this->value.substr((int)_start, std::string::npos)); + return NerdCore::VAR(this->value.substr((int)_start, (int)_end)); + } + + NerdCore::VAR String::replace(NerdCore::VAR* _args, int _length) const + { + NerdCore::VAR _search; + NerdCore::VAR _replace; + if (_length > 0) + _search = _args[0]; + else + return NerdCore::VAR(this->value); + if (_length > 1) + _replace = _args[1]; + + size_t start_pos = this->value.find((std::string)_search); + if (start_pos == std::string::npos) + { + return NerdCore::VAR(value); + } + + std::string _new = value; + return NerdCore::VAR(_new.replace(start_pos, ((std::string)_search).length(), (std::string)_replace)); + } + /* END STRING METHODS */ +} // namespace NerdCore::Class \ No newline at end of file diff --git a/compiler/native/nerdcore/src/class/string_header.h b/compiler/native/nerdcore/src/class/string_header.h new file mode 100644 index 000000000..4b6619908 --- /dev/null +++ b/compiler/native/nerdcore/src/class/string_header.h @@ -0,0 +1,116 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +#pragma once +#include "_meta.h" + +namespace NerdCore::Class +{ + class String : public virtual Base + { + public: + // Constructors + String(); + String(std::string val); + String(const char* val); + // Properties + std::string value; + NerdCore::Type::object_t object; + NerdCore::VAR length; + void* bind = nullptr; + count_t counter = 1; + // Methods + inline void Delete() noexcept; + inline void* Copy() noexcept; + // Native cast + explicit operator bool() const noexcept; + explicit operator double() const noexcept; + explicit operator int() const noexcept; + explicit operator long long() const noexcept; + explicit operator std::string() const noexcept; + // Main operators + inline NerdCore::VAR& GetSet(NerdCore::VAR keyVar); + NerdCore::VAR const operator[](NerdCore::VAR key) const; + NerdCore::VAR &operator[](NerdCore::VAR key); + NerdCore::VAR &operator[](int key); + NerdCore::VAR &operator[](double key); + NerdCore::VAR &operator[](const char* key); + + // Comparation operators + template + NerdCore::VAR operator() (Args... args) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NerdCore::Global::null; + } + String operator!() const; + bool operator==(const String &_v1) const; + // === emulated with __NERD_EQUAL_VALUE_AND_TYPE + // !== emulated with __NERD_NOT_EQUAL_VALUE_AND_TYPE + bool operator!=(const String &_v1) const; + bool operator<(const String &_v1) const; + bool operator<=(const String &_v1) const; + bool operator>(const String &_v1) const; + bool operator>=(const String &_v1) const; + // Numeric operators + String operator+() const; + String operator-() const; + String operator++(const int _v1); + String operator--(const int _v1); + String operator+(const String &_v1) const; + String operator+=(const String &_v1); + String operator-(const String &_v1) const; + String operator-=(const String &_v1); + String operator*(const String &_v1) const; + String operator*=(const String &_v1); + // TODO: "**" and "**=" operators + String operator/(const String &_v1) const; + String operator/=(const String &_v1); + String operator%(const String &_v1) const; + String operator%=(const String &_v1); + String operator&(const String &_v1) const; + String operator|(const String &_v1) const; + String operator^(const String &_v1) const; + String operator~() const; + String operator>>(const String &_v1) const; + String operator<<(const String &_v1) const; + String operator&=(const String &_v1); + String operator|=(const String &_v1); + String operator^=(const String &_v1); + String operator>>=(const String &_v1); + String operator<<=(const String &_v1); + // TODO: ">>>" and ">>>=" operators + /*** STRING METHODS ***/ + NerdCore::VAR toString(NerdCore::VAR* _args, int _length) const; + NerdCore::VAR split(NerdCore::VAR* _args, int _length) const; + NerdCore::VAR indexOf(NerdCore::VAR* _args, int _length) const; + NerdCore::VAR lastIndexOf(NerdCore::VAR* _args, int _length) const; + NerdCore::VAR search(NerdCore::VAR* _args, int _length) const; + NerdCore::VAR slice(NerdCore::VAR* _args, int _length) const; + NerdCore::VAR substr(NerdCore::VAR* _args, int _length) const; + NerdCore::VAR replace(NerdCore::VAR* _args, int _length) const; + /* END STRING METHODS */ + }; +} // namespace NerdCore::Class diff --git a/compiler/native/nerdcore/src/class/struct.h b/compiler/native/nerdcore/src/class/struct.h new file mode 100644 index 000000000..5b6aff5f5 --- /dev/null +++ b/compiler/native/nerdcore/src/class/struct.h @@ -0,0 +1,363 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +#pragma once +#include "struct_header.h" +#include +#include + +namespace NerdCore::Class +{ + // Constructors + Struct::Struct() {} + Struct::Struct(void *val) + { + value = val; + } + Struct::Struct(void *val, void* fn) + { + value = val; + Clean = (NerdCore::Type::clean_struct*)fn; + } + // Methods + inline void Struct::Delete() noexcept + { + if (--counter == 0) + { + (*static_cast(Clean))(value); + delete Clean; + delete this; + } + } + + inline void* Struct::Copy() noexcept + { + counter++; + return this; + } + // Native cast + Struct::operator bool() const noexcept { return true; } + Struct::operator double() const noexcept + { + #ifdef __NERD_ENV_ARDUINO + return 0; + #else + return std::numeric_limits::quiet_NaN(); + #endif + } + Struct::operator int() const noexcept + { + #ifdef __NERD_ENV_ARDUINO + return 0; + #else + return std::numeric_limits::quiet_NaN(); + #endif + } + Struct::operator long long() const noexcept + { + #ifdef __NERD_ENV_ARDUINO + return 0; + #else + return std::numeric_limits::quiet_NaN(); + #endif + } + Struct::operator std::string() const noexcept + { + return "[native struct]"; + } + // Main operators + NerdCore::VAR const Struct::operator[](NerdCore::VAR key) const + { + return NerdCore::Global::null; + } + NerdCore::VAR &Struct::operator[](NerdCore::VAR key) + { + #ifndef __NERD__OBJECT_VECTOR + return object[(std::string)key]; + #else + for (auto & search : object) + { + if (((std::string)key).compare(search.first) == 0) + { + return search.second; + } + } + + object.push_back(NerdCore::Type::pair_t((std::string)key, NerdCore::VAR())); + return object[object.size() - 1].second; + #endif + } + + NerdCore::VAR &Struct::operator[](int key) + { + #ifndef __NERD__OBJECT_VECTOR + return object[std::to_string(key)]; + #else + std::string _str = std::to_string(key); + for (auto & search : object) + { + if (_str.compare(search.first) == 0) + { + return search.second; + } + } + + object.push_back(NerdCore::Type::pair_t(_str, NerdCore::VAR())); + return object[object.size() - 1].second; + #endif + } + + NerdCore::VAR &Struct::operator[](double key) + { + #ifndef __NERD__OBJECT_VECTOR + return object[std::to_string(key)]; + #else + std::string _str = std::to_string(key); + for (auto & search : object) + { + if (_str.compare(search.first) == 0) + { + return search.second; + } + } + + object.push_back(NerdCore::Type::pair_t(_str, NerdCore::VAR())); + return object[object.size() - 1].second; + #endif + } + + + NerdCore::VAR &Struct::operator[](const char* key) + { + std::string str = key; + #ifndef __NERD__OBJECT_VECTOR + return object[str]; + #else + for (auto & search : object) + { + if (str.compare(search.first) == 0) + { + return search.second; + } + } + + object.push_back(NerdCore::Type::pair_t(str, NerdCore::VAR())); + return object[object.size() - 1].second; + #endif + } + + // Comparation operators + NerdCore::VAR Struct::operator!() const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NerdCore::VAR(); + } + bool Struct::operator==(const NerdCore::VAR &_v1) const { return false; } + // === emulated with __NERD_EQUAL_VALUE_AND_TYPE + // !== emulated with __NERD_NOT_EQUAL_VALUE_AND_TYPE + bool Struct::operator!=(const NerdCore::VAR &_v1) const { return true; } + bool Struct::operator<(const NerdCore::VAR &_v1) const { return false; } + bool Struct::operator<=(const NerdCore::VAR &_v1) const { return true; } + bool Struct::operator>(const NerdCore::VAR &_v1) const { return false; } + bool Struct::operator>=(const NerdCore::VAR &_v1) const { return true; } + // Numeric operators + NerdCore::VAR Struct::operator+() const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NerdCore::VAR(); + } + NerdCore::VAR Struct::operator-() const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NerdCore::VAR(); + } + NerdCore::VAR Struct::operator++(const int _v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NerdCore::VAR(); + } + NerdCore::VAR Struct::operator--(const int _v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NerdCore::VAR(); + } + NerdCore::VAR Struct::operator+(const NerdCore::VAR &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NerdCore::VAR(); + } + NerdCore::VAR Struct::operator+=(const NerdCore::VAR &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NerdCore::VAR(); + } + NerdCore::VAR Struct::operator-(const NerdCore::VAR &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NerdCore::VAR(); + } + NerdCore::VAR Struct::operator-=(const NerdCore::VAR &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NerdCore::VAR(); + } + NerdCore::VAR Struct::operator*(const NerdCore::VAR &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NerdCore::VAR(); + } + NerdCore::VAR Struct::operator*=(const NerdCore::VAR &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NerdCore::VAR(); + } + // TODO: "**" and "**=" operators + NerdCore::VAR Struct::operator/(const NerdCore::VAR &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NerdCore::VAR(); + } + NerdCore::VAR Struct::operator/=(const NerdCore::VAR &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NerdCore::VAR(); + } + NerdCore::VAR Struct::operator%(const NerdCore::VAR &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NerdCore::VAR(); + } + NerdCore::VAR Struct::operator%=(const NerdCore::VAR &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NerdCore::VAR(); + } + NerdCore::VAR Struct::operator&(const NerdCore::VAR &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NerdCore::VAR(); + } + NerdCore::VAR Struct::operator|(const NerdCore::VAR &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NerdCore::VAR(); + } + NerdCore::VAR Struct::operator^(const NerdCore::VAR &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NerdCore::VAR(); + } + NerdCore::VAR Struct::operator~() const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NerdCore::VAR(); + } + NerdCore::VAR Struct::operator>>(const NerdCore::VAR &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NerdCore::VAR(); + } + NerdCore::VAR Struct::operator<<(const NerdCore::VAR &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NerdCore::VAR(); + } + NerdCore::VAR Struct::operator&=(const NerdCore::VAR &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NerdCore::VAR(); + } + NerdCore::VAR Struct::operator|=(const NerdCore::VAR &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NerdCore::VAR(); + } + NerdCore::VAR Struct::operator^=(const NerdCore::VAR &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NerdCore::VAR(); + } + NerdCore::VAR Struct::operator>>=(const NerdCore::VAR &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NerdCore::VAR(); + } + NerdCore::VAR Struct::operator<<=(const NerdCore::VAR &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NerdCore::VAR(); + } + // TODO: ">>>" and ">>>=" operators +} // namespace NerdCore::Class diff --git a/compiler/native/nerdcore/src/class/struct_header.h b/compiler/native/nerdcore/src/class/struct_header.h new file mode 100644 index 000000000..bd1251f3d --- /dev/null +++ b/compiler/native/nerdcore/src/class/struct_header.h @@ -0,0 +1,104 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +#pragma once +#include "_meta.h" + +namespace NerdCore::Class +{ + class Struct : public virtual Base + { + public: + // Constructors + Struct(); + Struct(void* val); + Struct(void* val, void* fn); + // Properties + count_t counter = 1; + void* value = nullptr; + NerdCore::Type::object_t object; + NerdCore::Type::clean_struct* Clean; + // Methods + inline void Delete() noexcept; + inline void StructDelete() noexcept; + inline void* Copy() noexcept; + // Struct cast + explicit operator bool() const noexcept; + explicit operator double() const noexcept; + explicit operator int() const noexcept; + explicit operator long long() const noexcept; + explicit operator std::string() const noexcept; + // Main operators + NerdCore::VAR const operator[](NerdCore::VAR key) const; + NerdCore::VAR &operator[](NerdCore::VAR key); + NerdCore::VAR &operator[](int key); + NerdCore::VAR &operator[](double key); + NerdCore::VAR &operator[](const char* key); + + template + NerdCore::VAR operator()(Args... args) const + { + auto _args = NerdCore::Type::vector_t{(NerdCore::VAR)args...}; + return (*static_cast *>(value))(_args); + } + + // Comparation operators + NerdCore::VAR operator!() const; + bool operator==(const NerdCore::VAR &_v1) const; + // === emulated with __NERD_EQUAL_VALUE_AND_TYPE + // !== emulated with __NERD_NOT_EQUAL_VALUE_AND_TYPE + bool operator!=(const NerdCore::VAR &_v1) const; + bool operator<(const NerdCore::VAR &_v1) const; + bool operator<=(const NerdCore::VAR &_v1) const; + bool operator>(const NerdCore::VAR &_v1) const; + bool operator>=(const NerdCore::VAR &_v1) const; + // Numeric operators + NerdCore::VAR operator+() const; + NerdCore::VAR operator-() const; + NerdCore::VAR operator++(const int _v1); + NerdCore::VAR operator--(const int _v1); + NerdCore::VAR operator+(const NerdCore::VAR &_v1) const; + NerdCore::VAR operator+=(const NerdCore::VAR &_v1); + NerdCore::VAR operator-(const NerdCore::VAR &_v1) const; + NerdCore::VAR operator-=(const NerdCore::VAR &_v1); + NerdCore::VAR operator*(const NerdCore::VAR &_v1) const; + NerdCore::VAR operator*=(const NerdCore::VAR &_v1); + // TODO: "**" and "**=" operators + NerdCore::VAR operator/(const NerdCore::VAR &_v1) const; + NerdCore::VAR operator/=(const NerdCore::VAR &_v1); + NerdCore::VAR operator%(const NerdCore::VAR &_v1) const; + NerdCore::VAR operator%=(const NerdCore::VAR &_v1); + NerdCore::VAR operator&(const NerdCore::VAR &_v1) const; + NerdCore::VAR operator|(const NerdCore::VAR &_v1) const; + NerdCore::VAR operator^(const NerdCore::VAR &_v1) const; + NerdCore::VAR operator~() const; + NerdCore::VAR operator>>(const NerdCore::VAR &_v1) const; + NerdCore::VAR operator<<(const NerdCore::VAR &_v1) const; + NerdCore::VAR operator&=(const NerdCore::VAR &_v1); + NerdCore::VAR operator|=(const NerdCore::VAR &_v1); + NerdCore::VAR operator^=(const NerdCore::VAR &_v1); + NerdCore::VAR operator>>=(const NerdCore::VAR &_v1); + NerdCore::VAR operator<<=(const NerdCore::VAR &_v1); + // TODO: ">>>" and ">>>=" operators + }; +} // namespace NerdCore::Class diff --git a/compiler/native/nerdcore/src/classes.h b/compiler/native/nerdcore/src/classes.h new file mode 100644 index 000000000..2604f65f1 --- /dev/null +++ b/compiler/native/nerdcore/src/classes.h @@ -0,0 +1,32 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +#pragma once + +#include "./class/array.h" +#include "./class/function.h" +#include "./class/native.h" +#include "./class/struct.h" +#include "./class/fixed_array.h" +#include "./class/object.h" +#include "./class/string.h" diff --git a/compiler/native/nerdcore/src/classes_header.h b/compiler/native/nerdcore/src/classes_header.h new file mode 100644 index 000000000..a32216e78 --- /dev/null +++ b/compiler/native/nerdcore/src/classes_header.h @@ -0,0 +1,35 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +#pragma once +#define __INC_Nerd_CLASSES_HEADER + +#include "./class/base_header.h" +#include "./class/array_header.h" +#include "./class/object_header.h" +#include "./class/function_header.h" +#include "./class/native_header.h" +//#include "./class/native_tpl_header.h" +#include "./class/struct_header.h" +#include "./class/fixed_array_header.h" +#include "./class/string_header.h" diff --git a/compiler/native/nerdcore/src/enum.h b/compiler/native/nerdcore/src/enum.h new file mode 100644 index 000000000..52e9b5362 --- /dev/null +++ b/compiler/native/nerdcore/src/enum.h @@ -0,0 +1,40 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +namespace NerdCore::Enum +{ + enum Type + { + Null, + Boolean, + Number, + String, + Native, + NativeTPL, + Struct, + FixedArray, + Array, + Object, + Function, + }; +} \ No newline at end of file diff --git a/compiler/native/nerdcore/src/functions.h b/compiler/native/nerdcore/src/functions.h new file mode 100644 index 000000000..a5c97689b --- /dev/null +++ b/compiler/native/nerdcore/src/functions.h @@ -0,0 +1,32 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +NerdCore::VAR getArguments(int argc, char** argv) +{ + NerdCore::VAR __NJS_ARGS = new NerdCore::Class::Array(); + for( int i = 0; i < argc; i++) + { + __NJS_ARGS[i] = argv[i]; + } + return __NJS_ARGS; +} diff --git a/compiler/native/nerdcore/src/functions_header.h b/compiler/native/nerdcore/src/functions_header.h new file mode 100644 index 000000000..6d4b63c99 --- /dev/null +++ b/compiler/native/nerdcore/src/functions_header.h @@ -0,0 +1,111 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +NerdCore::VAR __NERD_Log_Console(NerdCore::VAR _var); +NerdCore::VAR __NERD_Object_Keys(NerdCore::VAR _var); +NerdCore::VAR __NERD_Object_Stringify(NerdCore::VAR _var); +NerdCore::VAR __NERD_Object_Stringify(NerdCore::VAR _var, bool _bracket); +NerdCore::VAR __NERD_Object_Clone(NerdCore::VAR& _var); +NerdCore::VAR __NERD_Object_Set(std::string _index, NerdCore::VAR _value, NerdCore::Type::object_t *_obj); +std::string __NERD_DOUBLE_TO_STRING(double _var); + +/*** String MANIPULATION ***/ + +#ifdef __NERD_ENV_ARDUINO +namespace std +{ + template + string to_string(m _var) + { + std::stringstream output; + output << _var; + return output.str(); + } + int isnan(double __x) + { + return ::isnan(__x); + } + inline int isfinite(double __x) + { + return ::isfinite(__x); + } + inline int signbit(double __x) + { + return ::signbit(__x); + } + inline double stod(std::string _str, std::string::size_type* sz) + { + *sz = _str.length(); + return String(_str.c_str()).toFloat(); + } + inline int stoi(std::string _str, std::string::size_type* sz, int _base) + { + *sz = _str.length(); + return String(_str.c_str()).toInt(); + } + inline long long stoll(std::string _str, std::string::size_type* sz, int _base) + { + *sz = _str.length(); + return atol(_str.c_str()); + } +} + +template +m remainder(m _dividend, n _divisor) +{ + m quotient = (int)_dividend / (int)_divisor; + m remainder = (int)_dividend % (int)_divisor; + return remainder; +} +#endif +template +std::string __NERD_Concat_To_Str(m _left, n _right) +{ + std::stringstream output; + output << _left << _right; + return output.str(); +} +/* END String MANIPULATION */ + +/*** Number MANIPULATION ***/ +template +int __NERD_Str_To_Int(m _left) +{ + int out; + std::stringstream output; + output << _left; + output >> out; + return out; +} +template +double __NERD_Str_To_Double(m _left) +{ + double out; + std::stringstream output; + output << _left; + output >> out; + return out; +} +/* END Number MANIPULATION */ + +NerdCore::VAR getArguments(int argc, char** argv); \ No newline at end of file diff --git a/compiler/native/nerdcore/src/macro.h b/compiler/native/nerdcore/src/macro.h new file mode 100644 index 000000000..140b59937 --- /dev/null +++ b/compiler/native/nerdcore/src/macro.h @@ -0,0 +1,67 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +/*** HELPERS ***/ +#define __NERD_GET_String(_var) _var.get().s->value +#define __NERD_Create_Boolean(_value) NerdCore::VAR(NerdCore::Enum::Type::Boolean, _value) +#define __NERD_Create_Number(_value) NerdCore::VAR(_value) +#define __NERD_Create_Function(_value) NerdCore::VAR(NerdCore::Enum::Type::Function, _value) +#define __NERD_Create_Undefined() NerdCore::VAR() +#define __NERD_Create_String(_value) NerdCore::VAR(_value) +#define __NERD_Create_Infinity() NerdCore::VAR(std::numeric_limits::infinity) +#define __NERD_Create_Null() NerdCore::VAR(NerdCore::Enum::Type::Null, 0) +#define __NERD_Create_Struct(_value) NerdCore::VAR(new _value(), new NerdCore::Type::clean_struct([](void* _ptr){ delete (_value*)_ptr;})) +#define __NERD_Create_FixedArray(_length) NerdCore::VAR(new NerdCore::Class::FixedArray(_length)) +#define __NERD_Create_Lambda(name) NerdCore::Type::function_t* name = new NerdCore::Type::function_t([](NerdCore::VAR& __NERD_THIS, NerdCore::VAR* __NERD_VARARGS, int __NERD_VARLENGTH) + +#define __NERD_Create_Ptr_Scoped_Anon(__CONTENT__) new NerdCore::Type::function_t([&](NerdCore::VAR& __NERD_THIS, NerdCore::VAR* __NERD_VARARGS, int __NERD_VARLENGTH) mutable -> NerdCore::Global::var { __CONTENT__ }) +#define __NERD_Create_Ptr_Scoped_Copy_Anon(__CONTENT__) new NerdCore::Type::function_t([=](NerdCore::VAR& __NERD_THIS, NerdCore::VAR* __NERD_VARARGS, int __NERD_VARLENGTH) mutable -> NerdCore::Global::var { __CONTENT__ }) +#define __NERD_Create_Ptr_Scoped_Copy_Anon_With_Ref(__FN__, __CONTENT__) new NerdCore::Type::function_t([=, &__FN__](NerdCore::VAR& __NERD_THIS, NerdCore::VAR* __NERD_VARARGS, int __NERD_VARLENGTH) mutable -> NerdCore::Global::var { __CONTENT__ }) +#define __NERD_Create_Ptr_Unscoped_With_Copy(__FN__, __CONTENT__) new NerdCore::Type::function_t([__FN__](NerdCore::VAR& __NERD_THIS, NerdCore::VAR* __NERD_VARARGS, int __NERD_VARLENGTH) mutable -> NerdCore::Global::var { __CONTENT__ }) +#define __NERD_Create_Ptr_Unscoped_Anon(__CONTENT__) new NerdCore::Type::function_t([](NerdCore::VAR& __NERD_THIS, NerdCore::VAR* __NERD_VARARGS, int __NERD_VARLENGTH) -> NerdCore::Global::var{ __CONTENT__ }) + +#define __NERD_Create_Var_Scoped_Anon(__CONTENT__) NerdCore::VAR(NerdCore::Enum::Type::Function, __NERD_Create_Ptr_Scoped_Anon(__CONTENT__)) +#define __NERD_Create_Var_Unscoped_Anon(__CONTENT__) NerdCore::VAR(NerdCore::Enum::Type::Function, __NERD_Create_Ptr_Unscoped_Anon(__CONTENT__)) +#define __NERD_Create_Var_Scoped_Copy_Anon(__CONTENT__) NerdCore::VAR(NerdCore::Enum::Type::Function, __NERD_Create_Ptr_Scoped_Copy_Anon(__CONTENT__)) +#define __NERD_Create_Var_Unscoped_With_Copy(__FN__, __CONTENT__) NerdCore::VAR(NerdCore::Enum::Type::Function, __NERD_Create_Ptr_Unscoped_With_Copy(__FN__, __CONTENT__)) +#define __NERD_Create_Var_Scoped_Copy_Anon_With_Ref(__FN__, __CONTENT__) NerdCore::VAR(NerdCore::Enum::Type::Function, __NERD_Create_Ptr_Scoped_Copy_Anon_With_Ref(__FN__, __CONTENT__)) + +#define __NERD_Init_Int(_name, _value) int _name = _value +#define __NERD_Init_Double(_name, _value) double _name = _value +#define __NERD_Init_String(_name, _value) std::string _name = _value +#define __NERD_EXCEPTION_PARAMETER NerdCore::VAR &e +#define finally ; +#define __NERD_Throw_Error(_err) NerdCore::VAR(NerdCore::VAR(_err) + NerdCore::VAR(", line: ") + std::to_string(__LINE__) + NerdCore::VAR(", file: ") + NerdCore::VAR(__FILE__)) +#define __NERD_Boolean_TRUE __NERD_Create_Boolean(true) +#define __NERD_Boolean_FALSE __NERD_Create_Boolean(false) +#define __NERD_FAST_INT double +#define __NERD_CreateMethodToClass(_name, _fn) __NERD_Object_Set(_name, __NERD_Create_Var_Scoped_Anon( return _fn(NerdCore::VAR& __NERD_THIS, __NERD_VARARGS, __NERD_VARLENGTH); ), &object); +#define __NERD_NEW(_fn) ((NerdCore::Class::Function*)_fn.data.ptr)->New +#define __NERD_Access_Struct(_exp, _name) (*(_name*)((NerdCore::Class::Struct*)_exp.data.ptr)->value) +#define arguments() new NerdCore::Class::FixedArray(__NERD_VARARGS, __NERD_VARLENGTH); +//#define __NERD_Native_Ptr(_var, _type) ((_type)((NerdCore::Class::NativeTPL<_type>*)_var.data.ptr)->value) +#define __NERD_OBJECT(_var) ((NerdCore::Class::Object*)_var.data.ptr) +#define __NERD_ARRAY(_var) ((NerdCore::Class::Array*)_var.data.ptr) +#define __NERD_FUNCTION(_var) ((NerdCore::Class::Function*)_var.data.ptr) +#define __NERD_BIND(_var, _function, _bind) _var = _function;((NerdCore::Class::Function*)_var.data.ptr)->bind = _bind; +#define Prototype() __NERD_Create_Var_Scoped_Copy_Anon( return __NERD_THIS; ) diff --git a/compiler/native/nerdcore/src/native.h b/compiler/native/nerdcore/src/native.h new file mode 100644 index 000000000..3ad813a6e --- /dev/null +++ b/compiler/native/nerdcore/src/native.h @@ -0,0 +1,25 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +#include "native/int.h" +#include "native/double.h" diff --git a/compiler/native/nerdcore/src/native/double.h b/compiler/native/nerdcore/src/native/double.h new file mode 100644 index 000000000..a26768f71 --- /dev/null +++ b/compiler/native/nerdcore/src/native/double.h @@ -0,0 +1,108 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +NerdCore::VAR operator+(double _i, NerdCore::VAR _v) +{ + if(_v.type == NerdCore::Enum::Type::String) return __NERD_DOUBLE_TO_STRING(_i) + (std::string)_v; + else return _i + (double)_v; +} + +void operator+=(double& _i, NerdCore::VAR _v) +{ + _i += (double)_v; +} + +double operator-(double _i, NerdCore::VAR _v) +{ + if(_v.type == NerdCore::Enum::Type::String) return std::numeric_limits::quiet_NaN(); + return _i - (double)_v; +} + +void operator-=(double& _i, NerdCore::VAR _v) +{ + _i -= (double)_v; +} + +double operator*(double _i, NerdCore::VAR _v) +{ + if(_v.type == NerdCore::Enum::Type::String) return std::numeric_limits::quiet_NaN(); + return _i * (double)_v; +} + +void operator*=(double& _i, NerdCore::VAR _v) +{ + _i *= (double)_v; +} + +double operator/(double _i, NerdCore::VAR _v) +{ + if(_v.type == NerdCore::Enum::Type::String) return std::numeric_limits::quiet_NaN(); + return _i / (double)_v; +} + +void operator/=(double& _i, NerdCore::VAR _v) +{ + _i /= _v; +} + +double operator%(double _i, NerdCore::VAR _v) +{ + return (int)_i % (int)_v; +} + +void operator%=(double& _i, NerdCore::VAR _v) +{ + _i %= _v; +} + +double operator==(double _i, NerdCore::VAR _v) +{ + return _i == (double)_v; +} + +double operator!=(double _i, NerdCore::VAR _v) +{ + return _i != (double)_v; +} + +double operator>(double _i, NerdCore::VAR _v) +{ + return _i > (double)_v; +} + +double operator>=(double _i, NerdCore::VAR _v) +{ + return _i >= (double)_v; +} + + +double operator<(double _i, NerdCore::VAR _v) +{ + return _i < (double)_v; +} + + +double operator<=(double _i, NerdCore::VAR _v) +{ + return _i <= (double)_v; +} \ No newline at end of file diff --git a/compiler/native/nerdcore/src/native/double_header.h b/compiler/native/nerdcore/src/native/double_header.h new file mode 100644 index 000000000..d0ccadb39 --- /dev/null +++ b/compiler/native/nerdcore/src/native/double_header.h @@ -0,0 +1,39 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +NerdCore::VAR operator+(double _i, NerdCore::VAR _v); +void operator+=(double& _i, NerdCore::VAR _v); +double operator-(double _i, NerdCore::VAR _v); +void operator-=(double& _i, NerdCore::VAR _v); +double operator*(double _i, NerdCore::VAR _v); +void operator*=(double& _i, NerdCore::VAR _v); +double operator/(double _i, NerdCore::VAR _v); +void operator/=(double& _i, NerdCore::VAR _v); +double operator%(double _i, NerdCore::VAR _v); +void operator%=(double& _i, NerdCore::VAR _v); +double operator==(double _i, NerdCore::VAR _v); +double operator!=(double _i, NerdCore::VAR _v); +double operator>(double _i, NerdCore::VAR _v); +double operator>=(double _i, NerdCore::VAR _v); +double operator<(double _i, NerdCore::VAR _v); +double operator<=(double _i, NerdCore::VAR _v); diff --git a/compiler/native/nerdcore/src/native/int.h b/compiler/native/nerdcore/src/native/int.h new file mode 100644 index 000000000..ca72ba207 --- /dev/null +++ b/compiler/native/nerdcore/src/native/int.h @@ -0,0 +1,105 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +NerdCore::VAR operator+(int _i, NerdCore::VAR _v) +{ + if(_v.type == NerdCore::Enum::Type::String) return __NERD_DOUBLE_TO_STRING(_i) + (std::string)_v; + else return _i + (double)_v; +} + +void operator+=(int& _i, NerdCore::VAR _v) +{ + _i += (double)_v; +} + +double operator-(int _i, NerdCore::VAR _v) +{ + return _i - (double)_v; +} + +void operator-=(int& _i, NerdCore::VAR _v) +{ + _i -= (double)_v; +} + +double operator*(int _i, NerdCore::VAR _v) +{ + return _i * (double)_v; +} + +void operator*=(int& _i, NerdCore::VAR _v) +{ + _i *= _v; +} + +double operator/(int _i, NerdCore::VAR _v) +{ + return _i / (double)_v; +} + +void operator/=(int& _i, NerdCore::VAR _v) +{ + _i /= _v; +} + +double operator%(int _i, NerdCore::VAR _v) +{ + return (int)_i % (int)_v; +} + +void operator%=(int& _i, NerdCore::VAR _v) +{ + _i %= _v; +} + +double operator==(int _i, NerdCore::VAR _v) +{ + return _i == (double)_v; +} + +double operator!=(int _i, NerdCore::VAR _v) +{ + return _i != (double)_v; +} + +double operator>(int _i, NerdCore::VAR _v) +{ + return _i > (double)_v; +} + +double operator>=(int _i, NerdCore::VAR _v) +{ + return _i >= (double)_v; +} + + +double operator<(int _i, NerdCore::VAR _v) +{ + return _i < (double)_v; +} + + +double operator<=(int _i, NerdCore::VAR _v) +{ + return _i <= (double)_v; +} diff --git a/compiler/native/nerdcore/src/native/int_header.h b/compiler/native/nerdcore/src/native/int_header.h new file mode 100644 index 000000000..b44be3424 --- /dev/null +++ b/compiler/native/nerdcore/src/native/int_header.h @@ -0,0 +1,39 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +NerdCore::VAR operator+(int _i, NerdCore::VAR _v); +void operator+=(int& _i, NerdCore::VAR _v); +double operator-(int _i, NerdCore::VAR _v); +void operator-=(int& _i, NerdCore::VAR _v); +double operator*(int _i, NerdCore::VAR _v); +void operator*=(int& _i, NerdCore::VAR _v); +double operator/(int _i, NerdCore::VAR _v); +void operator/=(int& _i, NerdCore::VAR _v); +double operator%(int _i, NerdCore::VAR _v); +void operator%=(int& _i, NerdCore::VAR _v); +double operator==(int _i, NerdCore::VAR _v); +double operator!=(int _i, NerdCore::VAR _v); +double operator>(int _i, NerdCore::VAR _v); +double operator>=(int _i, NerdCore::VAR _v); +double operator<(int _i, NerdCore::VAR _v); +double operator<=(int _i, NerdCore::VAR _v); diff --git a/compiler/native/nerdcore/src/native_header.h b/compiler/native/nerdcore/src/native_header.h new file mode 100644 index 000000000..647e376ab --- /dev/null +++ b/compiler/native/nerdcore/src/native_header.h @@ -0,0 +1,25 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +#include "native/int_header.h" +#include "native/double_header.h" diff --git a/compiler/native/nerdcore/src/nerd.cpp b/compiler/native/nerdcore/src/nerd.cpp new file mode 100644 index 000000000..c08b128ac --- /dev/null +++ b/compiler/native/nerdcore/src/nerd.cpp @@ -0,0 +1,34 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +#include "nerd.hpp" + +#include "functions.h" +#include "native.h" +#include "values.h" +#include "class/number.h" +#include "var.h" +#include "objmgmt.h" +#include "classes.h" +#include "operator.h" +#include "stdfn.h" \ No newline at end of file diff --git a/compiler/native/nerdcore/src/nerd.hpp b/compiler/native/nerdcore/src/nerd.hpp new file mode 100644 index 000000000..dc20ca359 --- /dev/null +++ b/compiler/native/nerdcore/src/nerd.hpp @@ -0,0 +1,96 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +#define _USE_MATH_DEFINES +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#define _USE_MATH_DEFINES +#include +#include +#include + + +#ifdef __NERD_ENV_ARDUINO +#include +#include +#include +#include +#include +#include +#include +#undef max +#undef min +#include +#else +#include +#include +#include +#include +#include +#include +#endif + +#include "enum.h" +#include "macro.h" + +namespace NerdCore +{ + struct VAR; + + namespace Class + { + class Base; + class Undefined; + class Boolean; + class String; + class Array; + class Object; + class Function; + class Native; + class Struct; + class FixedArray; + + + //template + //class NativeTPL; + } +} // namespace NerdCore +#include "type_header.h" +#include "var_header.h" +#include "values_header.h" +#include "functions_header.h" +#include "classes_header.h" +#include "native_header.h" +#include "class/number_header.h" +#include "objmgmt_header.h" +#include "operator_header.h" +#include "stdfn_header.h" diff --git a/compiler/native/nerdcore/src/objmgmt.h b/compiler/native/nerdcore/src/objmgmt.h new file mode 100644 index 000000000..4c7e4dda2 --- /dev/null +++ b/compiler/native/nerdcore/src/objmgmt.h @@ -0,0 +1,127 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +NerdCore::VAR __NERD_delete(NerdCore::VAR _left, NerdCore::VAR _right) +{ + if(_left.type == NerdCore::Enum::Type::Object) + { + ((NerdCore::Class::Object*)_left.data.ptr)->jsDelete(_right); + return __NERD_Boolean_TRUE; + } + else if(_left.type == NerdCore::Enum::Type::Array) + { + ((NerdCore::Class::Array*)_left.data.ptr)->jsDelete(_right); + return __NERD_Boolean_TRUE; + } + else if(_left.type == NerdCore::Enum::Type::Function) + { + ((NerdCore::Class::Function*)_left.data.ptr)->jsDelete(_right); + return __NERD_Boolean_TRUE; + } + return __NERD_Boolean_FALSE; +} + +/*** ***/ +#ifndef __NERD__OBJECT_VECTOR +NerdCore::VAR __NERD_Object_Set(std::string _index, NerdCore::VAR _value, NerdCore::Type::object_t *_obj) +{ + + if (_value.type == NerdCore::Enum::Type::String) + { + (*_obj)[_index] = new NerdCore::Class::String((std::string)_value); + } + else + { + (*_obj)[_index].data.ptr = _value.data.ptr; + } + + return NerdCore::Global::null; +} +#else +NerdCore::VAR __NERD_Object_Set(std::string _index, NerdCore::VAR _value, NerdCore::Type::object_t *_obj) +{ + int _j = (*_obj).size(); + for (int _i = 0; _i < _j; _i++) + { + if (_index.compare((*_obj)[_i].first) == 0) + { + + if (_value.type == NerdCore::Enum::Type::String) + { + (*_obj)[_i].second = new NerdCore::Class::String((std::string)_value); + } + else + { + (*_obj)[_i].second.data.ptr = _value.data.ptr; + } + + return NerdCore::Global::null; + } + } + + (*_obj).push_back(NerdCore::Type::pair_t(_index, _value)); + return NerdCore::Global::null; +} +#endif +/**/ + +NerdCore::VAR __NERD_Object_Set(NerdCore::VAR _index, NerdCore::VAR _value, NerdCore::VAR _array) +{ + if (_array.type == NerdCore::Enum::Type::Array && _index.type == NerdCore::Enum::Type::Number) + { + + if (((NerdCore::Class::Array*)_array.data.ptr)->value.size() <= (int)_index.data.number) + { + ((NerdCore::Class::Array*)_array.data.ptr)->value.resize( (int)_index.data.number + 1); + } + + ((NerdCore::Class::Array*)_array.data.ptr)->value.at( (int)_index.data.number ) = _value; + + return NerdCore::Global::null; + } + else if (_array.type == NerdCore::Enum::Type::Object || _array.type == NerdCore::Enum::Type::String || _array.type == NerdCore::Enum::Type::Function || _array.type == NerdCore::Enum::Type::Array || _array.type == NerdCore::Enum::Type::Native) + { + NerdCore::Type::object_t *_obj; + if (_array.type == NerdCore::Enum::Type::Object) + _obj = &((NerdCore::Class::Object*)_array.data.ptr)->object; + else + return NerdCore::Global::null; + + return __NERD_Object_Set((std::string)_index, _value, _obj); + } + + return NerdCore::Global::null; +} + + + +/* typeof */ +const std::string _array[] = {"null", "boolean", "number", "string", "native", "native", "struct", "fixed_array", "array", "object", "function" }; +std::string type_of(NerdCore::Global::var _var) +{ + return _array[_var.type]; +} +std::string typeof(NerdCore::Global::var _var) +{ + return _array[_var.type]; +} \ No newline at end of file diff --git a/compiler/native/nerdcore/src/objmgmt_header.h b/compiler/native/nerdcore/src/objmgmt_header.h new file mode 100644 index 000000000..191984921 --- /dev/null +++ b/compiler/native/nerdcore/src/objmgmt_header.h @@ -0,0 +1,62 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +NerdCore::VAR __NERD_delete(NerdCore::VAR _left, NerdCore::VAR _right); +NerdCore::VAR __NERD_Object_Set(std::string _index, NerdCore::VAR _value, NerdCore::Type::object_t *_obj); +NerdCore::VAR __NERD_Object_Set(NerdCore::VAR _index, NerdCore::VAR _value, NerdCore::VAR _array); +std::string type_of(NerdCore::Global::var _var); +std::string typeof(NerdCore::Global::var _var); + + +/* +inline NerdCore::Global::var Object() +{ + return NerdCore::VAR((NerdCore::Class::Object *)new NerdCore::Class::Object()); +} +*/ +/* +inline NerdCore::Global::var Object(NerdCore::Type::object_t _obj) +{ + return new NerdCore::Class::Object(_obj); +} +*/ + +inline NerdCore::Global::var NewArray() +{ + return new NerdCore::Class::Array(); +} + +inline NerdCore::Global::var FixedArray() +{ + return new NerdCore::Class::FixedArray(); +} + +inline NerdCore::Global::var FixedArray(NerdCore::Global::var _length) +{ + return new NerdCore::Class::FixedArray(_length); +} + +inline NerdCore::Global::var FixedArray(int _length) +{ + return new NerdCore::Class::FixedArray(_length); +} \ No newline at end of file diff --git a/compiler/native/nerdcore/src/operator.h b/compiler/native/nerdcore/src/operator.h new file mode 100644 index 000000000..67b619703 --- /dev/null +++ b/compiler/native/nerdcore/src/operator.h @@ -0,0 +1,879 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +NerdCore::VAR operator+ (const char* _left, const NerdCore::VAR &_right) +{ + return NerdCore::VAR(_left) + _right; +} +NerdCore::VAR operator+ (std::string _left, const NerdCore::VAR &_right) +{ + return NerdCore::VAR(_left) + _right; +} + +NerdCore::VAR operator* (const char* _left, const NerdCore::VAR &_right) +{ + return NerdCore::Global::NaN; +} +NerdCore::VAR operator* (std::string _left, const NerdCore::VAR &_right) +{ + return NerdCore::Global::NaN; +} + +NerdCore::VAR operator- (const char* _left, const NerdCore::VAR &_right) +{ + return NerdCore::Global::NaN; +} +NerdCore::VAR operator- (std::string _left, const NerdCore::VAR &_right) +{ + return NerdCore::Global::NaN; +} + +NerdCore::VAR operator/ (const char* _left, const NerdCore::VAR &_right) +{ + return NerdCore::Global::NaN; +} +NerdCore::VAR operator/ (std::string _left, const NerdCore::VAR &_right) +{ + return NerdCore::Global::NaN; +} + +/*** operator== ***/ +NerdCore::VAR operator== (NerdCore::VAR _left, int right) +{ + return (double)_left == right; +} + +NerdCore::VAR operator== (NerdCore::VAR _left, double right) +{ + return (double)_left == right; +} + +NerdCore::VAR operator== (NerdCore::VAR _left, std::string right) +{ + return (std::string)_left == right; +} + +NerdCore::VAR operator== (NerdCore::VAR _left, const char* right) +{ + return (std::string)_left == std::string(right); +} +/* end operator== */ + +/*** operator!= ***/ +NerdCore::VAR operator!= (NerdCore::VAR _left, int right) +{ + return (double)_left != right; +} + +NerdCore::VAR operator!= (NerdCore::VAR _left, double right) +{ + return (double)_left != right; +} + +NerdCore::VAR operator!= (NerdCore::VAR _left, std::string right) +{ + return (std::string)_left != right; +} + +NerdCore::VAR operator!= (NerdCore::VAR _left, const char* right) +{ + return (std::string)_left != std::string(right); +} +/* end operator!= */ + +/*** operator| ***/ +NerdCore::VAR operator| (NerdCore::VAR _left, int right) +{ + return (int)_left | right; +} + +NerdCore::VAR operator| (NerdCore::VAR _left, double right) +{ + return (int)_left | (int)right; +} + +NerdCore::VAR operator| (NerdCore::VAR _left, std::string right) +{ + return (double)_left; +} + +NerdCore::VAR operator| (NerdCore::VAR _left, const char* right) +{ + return (double)_left; +} +/* end operator| */ + +/*** operator^ ***/ +NerdCore::VAR operator^ (NerdCore::VAR _left, int right) +{ + return (int)_left ^ right; +} + +NerdCore::VAR operator^ (NerdCore::VAR _left, double right) +{ + return (int)_left ^ (int)right; +} + +NerdCore::VAR operator^ (NerdCore::VAR _left, std::string right) +{ + return (double)_left; +} + +NerdCore::VAR operator^ (NerdCore::VAR _left, const char* right) +{ + return (double)_left; +} +/* end operator^ */ + +/*** operator& ***/ +NerdCore::VAR operator& (NerdCore::VAR _left, int right) +{ + return (int)_left & right; +} + +NerdCore::VAR operator& (NerdCore::VAR _left, double right) +{ + return (int)_left & (int)right; +} + +NerdCore::VAR operator& (NerdCore::VAR _left, std::string right) +{ + return (double)_left; +} + +NerdCore::VAR operator& (NerdCore::VAR _left, const char* right) +{ + return (double)_left; +} +/* end operator& */ + +/*** operator< ** +inline NerdCore::VAR operator< (NerdCore::VAR _left, int right) +{ + return _left.data.number < right; +} + + +inline NerdCore::VAR operator< (NerdCore::VAR _left, double right) +{ + return _left.data.number < right; +} +*/ +NerdCore::VAR operator< (NerdCore::VAR _left, std::string right) +{ + return (std::string)_left < right; +} + +NerdCore::VAR operator< (NerdCore::VAR _left, const char* right) +{ + return (std::string)_left < std::string(right); +} +/* end operator< */ + +/*** operator<< ***/ +NerdCore::VAR operator<< (NerdCore::VAR _left, int right) +{ + return (int)_left << right; +} + +NerdCore::VAR operator<< (NerdCore::VAR _left, double right) +{ + return (int)_left << (int)right; +} + +NerdCore::VAR operator<< (NerdCore::VAR _left, std::string right) +{ + return (std::string)_left << right; +} + +NerdCore::VAR operator<< (NerdCore::VAR _left, const char* right) +{ + return (std::string)_left << std::string(right); +} +/* end operator<< */ + +/*** operator>= ***/ +NerdCore::VAR operator<= (NerdCore::VAR _left, std::string right) +{ + return (std::string)_left <= right; +} + +NerdCore::VAR operator<= (NerdCore::VAR _left, const char* right) +{ + return (std::string)_left < std::string(right); +} +/* end operator<= */ + +/*** operator> ***/ + +NerdCore::VAR operator> (NerdCore::VAR _left, std::string right) +{ + return (std::string)_left > right; +} + +NerdCore::VAR operator> (NerdCore::VAR _left, const char* right) +{ + return (std::string)_left > std::string(right); +} +/* end operator> */ + +/*** operator>> ***/ +NerdCore::VAR operator>> (NerdCore::VAR _left, int right) +{ + return (int)_left >> right; +} + +NerdCore::VAR operator>> (NerdCore::VAR _left, double right) +{ + return (int)_left >> (int)right; +} + +NerdCore::VAR operator>> (NerdCore::VAR _left, std::string right) +{ + return (std::string)_left >> right; +} + +NerdCore::VAR operator>> (NerdCore::VAR _left, const char* right) +{ + return (std::string)_left >> std::string(right); +} +/* end operator>> */ + +/*** operator>= ***/ + +NerdCore::VAR operator>= (NerdCore::VAR _left, std::string right) +{ + return (std::string)_left >= right; +} + +NerdCore::VAR operator>= (NerdCore::VAR _left, const char* right) +{ + return (std::string)_left > std::string(right); +} + +/* end operator>= */ + +NerdCore::VAR __NERD_Boolean_Result(NerdCore::VAR _v) +{ + if (_v.type == NerdCore::Enum::Type::Number) + return _v.data.number; + else if (_v.type == NerdCore::Enum::Type::Boolean) + return _v.data.number; + else if (_v.type == NerdCore::Enum::Type::String) + { + if (strlen(((NerdCore::Class::String*)_v.data.ptr)->value.c_str()) > 0) + return true; + else + return false; + } + else if (_v.type == NerdCore::Enum::Type::Array) + return true; + else + return false; +} + +std::string __NERD_DOUBLE_TO_STRING(double _var) +{ + std::ostringstream strout ; + strout << std::fixed << std::setprecision(14) << _var; + std::string str = strout.str() ; + + size_t end = str.find_last_not_of( '0' ) + 1 ; + str = str.erase( end ) ; + + end = str.find_last_not_of( '.' ) + 1 ; + str = str.erase( end ) ; + + int exp = str.length(); + if(exp > 21) + { + std::string first = str.substr(0, 1); + std::string second = str.substr(1, 15); + str = first + "." + second + "e+" + std::to_string(exp-1); + } + return str; +} + +std::ostream &operator<<(std::ostream &os, const NerdCore::VAR &_v) +{ + switch (_v.type) + { + case NerdCore::Enum::Type::Boolean: + if(_v.data.number) os << "true"; + else os << "false"; + break; + case NerdCore::Enum::Type::Number: + os << std::setprecision(14) << _v.data.number; + break; + case NerdCore::Enum::Type::String: + os << (std::string)(*(NerdCore::Class::String*)_v.data.ptr); + break; + case NerdCore::Enum::Type::Object: + os << __NERD_Object_Stringify(_v); + break; + case NerdCore::Enum::Type::FixedArray: + os << __NERD_Object_Stringify(_v); + break; + case NerdCore::Enum::Type::Array: + os << __NERD_Object_Stringify(_v); + break; + case NerdCore::Enum::Type::Struct: + os << (std::string)(*(NerdCore::Class::Struct*)_v.data.ptr); + break; + case NerdCore::Enum::Type::Native: + os << (std::string)(*(NerdCore::Class::Native*)_v.data.ptr); + break; + case NerdCore::Enum::Type::Function: + os << (std::string)(*(NerdCore::Class::Function*)_v.data.ptr); + break; + case NerdCore::Enum::Type::Null: + os << "null"; + break; + default: + os << "null"; + break; + } + return os; + +} + +NerdCore::VAR parseInt(NerdCore::VAR _str) +{ + if (_str.type == NerdCore::Enum::Type::String) + { +#ifdef __NERD_ENV_ARDUINO + return NerdCore::Global::null; +#else + return __NERD_Create_Number((double)(*(NerdCore::Class::String*)_str.data.ptr)); +#endif + } + else + return NerdCore::Global::null; +} + +NerdCore::VAR __NERD_Log_Console(NerdCore::VAR _var) +{ +#ifdef __NERD_ENV_ARDUINO + +#else + std::cout << _var; + std::cout << std::endl; +#endif + + return NerdCore::Global::null; +} + +NerdCore::VAR __NERD_Log_Console(NerdCore::VAR* _var, int _length) +{ +#ifdef __NERD_ENV_ARDUINO + +#else + bool first = false; + for(int i = 0; i < _length; i++) + { + if(first) std::cout << " "; + std::cout << _var[i]; + if(!first) first = true; + } + std::cout << std::endl; +#endif + + return NerdCore::Global::null; +} + +NerdCore::VAR __NERD_Object_Keys(NerdCore::VAR _var) +{ + NerdCore::VAR _res = new NerdCore::Class::Array(); + + if (_var.type != NerdCore::Enum::Type::Object && _var.type != NerdCore::Enum::Type::Array) + { + return _res; + } + + if(_var.type == NerdCore::Enum::Type::Array) + { + NerdCore::Type::vector_t *_arr = &((NerdCore::Class::Array*)_var.data.ptr)->value; + int _j = (*_arr).size(); + for (int _i = 0; _i < _j; _i++) + { + _res[_i] = std::to_string(_i); + } + } + else + { + NerdCore::Type::object_t *_obj; + if(_var.type == NerdCore::Enum::Type::Object) _obj = &((NerdCore::Class::Object*)_var.data.ptr)->object; + + #ifndef __NERD__OBJECT_VECTOR + int _k = 0; + for (auto _el: *_obj) + { + _res[_k] = _el.first; + _k++; + } + #else + int _j = (*_obj).size(); + for (int _k = 0; _k < _j; _k++) + { + _res[_k] = (*_obj)[_k].first; + } + #endif + } + return _res; +} + +NerdCore::VAR __NERD_Object_Stringify(NerdCore::VAR _var) +{ + return __NERD_Object_Stringify(_var, true); +} + +NerdCore::VAR __NERD_Object_Stringify(NerdCore::VAR _var, bool _bracket) +{ + NerdCore::Enum::Type _t = _var.type; + if (_t == NerdCore::Enum::Type::Number) + { + return "\e[33m" + _var + "\e[0m"; + } + else if (_t == NerdCore::Enum::Type::String) + { + return "\e[32m'" + ((NerdCore::Class::String*)_var.data.ptr)->value + "'\e[0m"; + } + else if (_t == NerdCore::Enum::Type::Function) + { + return "'" + (std::string)(*(NerdCore::Class::Function*)_var.data.ptr) + "'"; + } + else if (_t == NerdCore::Enum::Type::FixedArray) + { + NerdCore::VAR _res = ""; + NerdCore::VAR *_arr = ((NerdCore::Class::FixedArray*)_var.data.ptr)->value; + + if(_bracket) _res += " [ "; + int j = ((NerdCore::Class::FixedArray*)_var.data.ptr)->length; + int k = 0; + int l = 0; + for (int i = 0; i < j; i++) + { + if (l > 0) _res += ", "; + if(k > 0) + { + if(k == 1) + _res += "\e[90m<1 empty item>\e[0m, "; + else + _res += "\e[90m<" + std::to_string(k) + " empty items>\e[0m, "; + k = 0; + } + _res += __NERD_Object_Stringify((*_arr)[i], _bracket); + l++; + } + + if(k > 0) + { + if (l > 0) _res += ", "; + if(k == 1) + _res += "\e[90m<1 empty item>\e[0m"; + else + _res += "\e[90m<" + std::to_string(k) + " empty items>\e[0m"; + l++; + } + + if(_bracket) _res += " ] "; + + return _res; + } + else if (_t == NerdCore::Enum::Type::Array) + { + NerdCore::VAR _res = NerdCore::Global::var(""); + NerdCore::Type::vector_t *_arr = &((NerdCore::Class::Array*)_var.data.ptr)->value; + if(_bracket) _res += " [ "; + int j = (*_arr).size(); + int k = 0; + int l = 0; + for (int i = 0; i < j; i++) + { + if (l > 0) _res += ", "; + if(k > 0) + { + if(k == 1) + _res += "\e[90m<1 empty item>\e[0m, "; + else + _res += "\e[90m<" + std::to_string(k) + " empty items>\e[0m, "; + k = 0; + } + + NerdCore::Global::var test = + _res += __NERD_Object_Stringify((*_arr)[i], _bracket); + + l++; + } + if(k > 0) + { + if (l > 0) _res += ", "; + if(k == 1) + _res += "\e[90m<1 empty item>\e[0m"; + else + _res += "\e[90m<" + std::to_string(k) + " empty items>\e[0m"; + l++; + } + + if(_bracket) _res += " ] "; + + return _res; + } + else if (_t == NerdCore::Enum::Type::Object) + { + NerdCore::VAR _res = ""; + NerdCore::Type::object_t *_obj = &((NerdCore::Class::Object*)_var.data.ptr)->object; + _res = "{"; + #ifndef __NERD__OBJECT_VECTOR + int _i = 0; + int _comma = 0; + for (auto _el: *_obj) + { + if(_el.second.type != NerdCore::Enum::Type::Null && _el.first != "__proto__" && _el.first != "prototype") + { + if (_comma > 0) _res += ", "; + _res += NerdCore::VAR("\"") + _el.first + "\""; + _res += ":"; + _res += __NERD_Object_Stringify(_el.second); + _comma++; + } + _i++; + } + #else + int j = (*_obj).size(); + for (int _i = 0; _i < j; _i++) + { + if (_i > 0) _res += ", "; + _res += NerdCore::VAR("\"") + (*_obj)[_i].first + "\""; + _res += ":"; + _res += __NERD_Object_Stringify((*_obj)[_i].second); + } + #endif + _res += "}"; + return _res; + } + else + return ""; +} + +NerdCore::VAR __NERD_Object_Clone(NerdCore::VAR& _var) +{ + NerdCore::Enum::Type _t = _var.type; + switch(_t) + { + case NerdCore::Enum::Type::Null: + case NerdCore::Enum::Type::Number: + case NerdCore::Enum::Type::String: + case NerdCore::Enum::Type::Function: + return _var; + case NerdCore::Enum::Type::Array: + { + NerdCore::VAR _res = new NerdCore::Class::Array(); + std::vector *_arr = &((NerdCore::Class::Array*)_var.data.ptr)->value; + + int j = (*_arr).size(); + for (int i = 0; i < j; i++) + { + _res[i] = __NERD_Object_Clone((*_arr)[i]); + } + return _res; + } + case NerdCore::Enum::Type::Object: + { + const NerdCore::VAR _res = new NerdCore::Class::Object(); + NerdCore::Type::object_t *_obj = &((NerdCore::Class::Object*)_var.data.ptr)->object; + #ifndef __NERD__OBJECT_VECTOR + for (auto _el: *_obj) + { + _res[_el.first] = __NERD_Object_Clone(_el.second); + } + #else + int j = (*_obj).size(); + for (int _i = 0; _i < j; _i++) + { + _res[(*_obj)[_i].first] = __NERD_Object_Clone((*_obj)[_i].second); + } + #endif + return _res; + } + default: + return NerdCore::Global::null; + } +} + +void __NERD_Object_Construct(NerdCore::VAR _this, NerdCore::VAR _prototype) +{ + if(_this.type == NerdCore::Enum::Type::Object && _prototype.type == NerdCore::Enum::Type::Object) + { + NerdCore::Type::object_t *_obj = &((NerdCore::Class::Object*)_prototype.data.ptr)->object; + + #ifndef __NERD__OBJECT_VECTOR + for (auto _el: *_obj) + { + NerdCore::VAR _tmp = _this[_el.first]; + if(_tmp.type == NerdCore::Enum::Type::Null) + { + _this[_el.first] = _el.second; + } + } + #else + int j = (*_obj).size(); + for (int _i = 0; _i < j; _i++) + { + NerdCore::VAR _tmp = _this[(*_obj)[_i].first]; + if(_tmp.type == NerdCore::Enum::Type::Null) + { + _this[(*_obj)[_i].first] = (*_obj)[_i].second; + } + } + #endif + } + +} + +NerdCore::VAR __NERD_CREATE_Function(void *_fn) +{ + return NerdCore::VAR(NerdCore::Enum::Type::Function, _fn); +} + +NerdCore::VAR __NERD_Create_Native(void *_native) +{ + return NerdCore::VAR(NerdCore::Enum::Type::Null, _native); +} + +void *__NERD_Get_Native(NerdCore::VAR _native) +{ + return ((NerdCore::Class::Function*)_native.data.ptr); +} + +__NERD_Create_Lambda(__IMPL_EVAL) +{ + __NERD_Log_Console("eval not implemented, return NerdCore::Global::null"); + return NerdCore::VAR(); +}); + +NerdCore::VAR eval = __NERD_Create_Function(__IMPL_EVAL); + +std::function *__NERD_IS_NAN = new std::function([](NerdCore::Type::vector_t _Nerd_VARARGS) { + NerdCore::VAR _test; + if (_Nerd_VARARGS.size() > 0) + _test = _Nerd_VARARGS[0]; + else + return __NERD_Create_Boolean(0); + + if (_test.type == NerdCore::Enum::Type::Number) + { + return __NERD_Create_Boolean(1); + } + + return __NERD_Create_Boolean(0); +}); + +NerdCore::VAR isNaN = NerdCore::VAR(NerdCore::Enum::Type::Function, __NERD_IS_NAN); + +NerdCore::VAR __NERD_EQUAL_VALUE_AND_TYPE(NerdCore::VAR _left, NerdCore::VAR _right) +{ + if (_left.type == _right.type && (NerdCore::VAR)_left == (NerdCore::VAR)_right) + { + return __NERD_Create_Boolean(1); + } + + return __NERD_Create_Boolean(0); +} + +NerdCore::VAR __NERD_NOT_EQUAL_VALUE_AND_TYPE(NerdCore::VAR _left, NerdCore::VAR _right) +{ + if (_left.type != _right.type || (bool)(_left != _right)) + { + return __NERD_Create_Boolean(1); + } + + return __NERD_Create_Boolean(0); +} + +NerdCore::VAR operator+ (NerdCore::VAR _left, int right) +{ + if (_left.type == NerdCore::Enum::Type::String) return (std::string)_left + __NERD_DOUBLE_TO_STRING(right); + else return (double)_left + right; +} + +NerdCore::VAR operator+ (NerdCore::VAR _left, double right) +{ + if (_left.type == NerdCore::Enum::Type::String) return (std::string)_left + __NERD_DOUBLE_TO_STRING(right); + else return (double)_left + right; +} + +NerdCore::VAR operator+ (NerdCore::VAR _left, const char* right) +{ + return (std::string)_left + std::string(right); +} + +void operator+= (NerdCore::VAR& _left, std::string right) +{ + std::string _str = (std::string)_left; + _str += right; + _left = _str; +} + +void operator+= (NerdCore::VAR& _left, const char* right) +{ + std::string _str = (std::string)_left; + _str += right; + _left = _str; +} + +void operator+= (NerdCore::VAR& _left, int right) +{ + if(_left.type == NerdCore::Enum::Type::Number) _left.data.number += right; + else + { + std::string _str = (std::string)_left; + _str += right; + _left = _str; + } +} + +void operator+= (NerdCore::VAR& _left, double right) +{ + if(_left.type == NerdCore::Enum::Type::Number) _left.data.number += right; + else + { + std::string _str = (std::string)_left; + _str += right; + _left.data.ptr = new NerdCore::Class::String(_str); + _left.type = NerdCore::Enum::Type::String; + } +} + + +NerdCore::VAR operator|| (NerdCore::VAR _left, int right) +{ + if(_left.type != NerdCore::Enum::Type::Null) return _left; + else return right; +} + +NerdCore::VAR operator|| (NerdCore::VAR _left, double right) +{ + if(_left.type != NerdCore::Enum::Type::Null) return _left; + else return right; +} + +NerdCore::VAR operator|| (NerdCore::VAR _left, std::string right) +{ + if(_left.type != NerdCore::Enum::Type::Null) return _left; + else return right; +} + +NerdCore::VAR operator|| (NerdCore::VAR _left, const char* right) +{ + if(_left.type != NerdCore::Enum::Type::Null) return _left; + else return right; +} + +/*** op* ***/ +NerdCore::VAR operator* (NerdCore::VAR _left, int right) +{ + return (double)_left * right; +} + +NerdCore::VAR operator* (NerdCore::VAR _left, double right) +{ + return (double)_left * right; +} + +NerdCore::VAR operator* (NerdCore::VAR _left, std::string right) +{ + return (double)_left * (double)(NerdCore::VAR(right)); +} + +NerdCore::VAR operator* (NerdCore::VAR _left, const char* right) +{ + return (double)_left * (double)(NerdCore::VAR(right)); +} +/* end op* */ + +/*** op- ***/ +NerdCore::VAR operator- (NerdCore::VAR _left, int right) +{ + return (double)_left - right; +} + +NerdCore::VAR operator- (NerdCore::VAR _left, double right) +{ + return (double)_left - right; +} + +NerdCore::VAR operator- (NerdCore::VAR _left, std::string right) +{ + return (double)_left - (double)(NerdCore::VAR(right)); +} + +NerdCore::VAR operator- (NerdCore::VAR _left, const char* right) +{ + return (double)_left - (double)(NerdCore::VAR(right)); +} +/* end op- */ + +/*** op/ ***/ +NerdCore::VAR operator/ (NerdCore::VAR _left, int right) +{ + return (double)_left / right; +} + +NerdCore::VAR operator/ (NerdCore::VAR _left, double right) +{ + return (double)_left / right; +} + +NerdCore::VAR operator/ (NerdCore::VAR _left, std::string right) +{ + return (double)_left / (double)(NerdCore::VAR(right)); +} + +NerdCore::VAR operator/ (NerdCore::VAR _left, const char* right) +{ + return (double)_left / (double)(NerdCore::VAR(right)); +} +/* end op/ */ + +/*** op% ***/ +NerdCore::VAR operator% (NerdCore::VAR _left, int right) +{ + return (int)_left % right; +} + +NerdCore::VAR operator% (NerdCore::VAR _left, double right) +{ + return (int)_left % (int)right; +} + +NerdCore::VAR operator% (NerdCore::VAR _left, std::string right) +{ + return (int)_left % (int)(NerdCore::VAR(right)); +} + +NerdCore::VAR operator% (NerdCore::VAR _left, const char* right) +{ + return (int)_left % (int)(NerdCore::VAR(right)); +} +/* end op% */ \ No newline at end of file diff --git a/compiler/native/nerdcore/src/operator_header.h b/compiler/native/nerdcore/src/operator_header.h new file mode 100644 index 000000000..b99d7def5 --- /dev/null +++ b/compiler/native/nerdcore/src/operator_header.h @@ -0,0 +1,214 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ +#ifdef __NERD_ENV_ARDUINO + bool operator==(std::string_view sw, const char* c) + { + return sw == std::string_view(c); + } + + bool operator!=(std::string_view sw, const char* c) + { + return sw != std::string_view(c); + } +#else + constexpr bool operator==(std::string_view sw, const char* c) + { + return sw == std::string_view(c); + } + + constexpr bool operator!=(std::string_view sw, const char* c) + { + return sw != std::string_view(c); + } +#endif + +NerdCore::VAR __NERD_Boolean_Result(NerdCore::VAR _v); +std::string __NERD_DOUBLE_TO_STRING(double _var); +std::ostream &operator<<(std::ostream &os, const NerdCore::VAR &_v); +NerdCore::VAR parseInt(NerdCore::VAR _str); +NerdCore::VAR __NERD_Log_Console(NerdCore::VAR _var); +NerdCore::VAR __NERD_Log_Console(NerdCore::VAR* _var, int _length); +NerdCore::VAR __NERD_Object_Keys(NerdCore::VAR _var); +NerdCore::VAR __NERD_Object_Stringify(NerdCore::VAR _var); +NerdCore::VAR __NERD_Object_Stringify(NerdCore::VAR _var, bool _bracket); +NerdCore::VAR __NERD_Object_Clone(NerdCore::VAR& _var); +void __NERD_Object_Construct(NerdCore::VAR _this, NerdCore::VAR _prototype); +NerdCore::VAR __NERD_CREATE_Function(void *_fn); +NerdCore::VAR __NERD_Create_Native(void *_native); +void *__NERD_Get_Native(NerdCore::VAR _native); + +/*** REDIFINING STD OPERATORS ***/ + +NerdCore::VAR operator+ (const char* _left, const NerdCore::VAR &_right); +NerdCore::VAR operator+ (std::string _left, const NerdCore::VAR &_right); + +NerdCore::VAR operator- (const char* _left, const NerdCore::VAR &_right); +NerdCore::VAR operator- (std::string _left, const NerdCore::VAR &_right); + +NerdCore::VAR operator* (const char* _left, const NerdCore::VAR &_right); +NerdCore::VAR operator* (std::string _left, const NerdCore::VAR &_right); + +NerdCore::VAR operator/ (const char* _left, const NerdCore::VAR &_right); +NerdCore::VAR operator/ (std::string _left, const NerdCore::VAR &_right); + + +inline bool operator< (NerdCore::VAR _left, const int right) noexcept +{ + return _left.data.number < right; +} +inline bool operator< (NerdCore::VAR _left, const long long int right) noexcept +{ + return _left.data.number < right; +} +inline bool operator< (NerdCore::VAR _left, const double right) noexcept +{ + return _left.data.number < right; +} + +NerdCore::VAR operator< (NerdCore::VAR _left, std::string right); +NerdCore::VAR operator< (NerdCore::VAR _left, const char* right); + +inline bool operator<= (NerdCore::VAR _left, const int right) noexcept +{ + return _left.data.number <= right; +} +inline bool operator<= (NerdCore::VAR _left, const long long int right) noexcept +{ + return _left.data.number <= right; +} +inline bool operator<= (NerdCore::VAR _left, const double right) noexcept +{ + return _left.data.number <= right; +} + +NerdCore::VAR operator<= (NerdCore::VAR _left, std::string right); +NerdCore::VAR operator<= (NerdCore::VAR _left, const char* right); + +inline bool operator> (NerdCore::VAR _left, const int right) noexcept +{ + return _left.data.number > right; +} +inline bool operator> (NerdCore::VAR _left, const long long int right) noexcept +{ + return _left.data.number > right; +} +inline bool operator> (NerdCore::VAR _left, const double right) noexcept +{ + return _left.data.number > right; +} + +NerdCore::VAR operator> (NerdCore::VAR _left, std::string right); +NerdCore::VAR operator> (NerdCore::VAR _left, const char* right); + +inline const bool operator>= (NerdCore::VAR _left, const int right) noexcept +{ + return _left.data.number >= right; +} +inline bool operator>= (NerdCore::VAR _left, const long long int right) noexcept +{ + return _left.data.number >= right; +} +inline bool operator>= (NerdCore::VAR _left, const double right) noexcept +{ + return _left.data.number >= right; +} + +NerdCore::VAR operator>= (NerdCore::VAR _left, std::string right); +NerdCore::VAR operator>= (NerdCore::VAR _left, const char* right); + + +/*** END REDIFINING STD OPERATORS ***/ + +extern NerdCore::VAR eval; +extern std::function *__NERD_IS_NAN; +extern NerdCore::VAR isNaN; + +NerdCore::VAR __NERD_EQUAL_VALUE_AND_TYPE(NerdCore::VAR _left, NerdCore::VAR _right); +NerdCore::VAR __NERD_NOT_EQUAL_VALUE_AND_TYPE(NerdCore::VAR _left, NerdCore::VAR _right); +NerdCore::VAR operator+ (NerdCore::VAR _left, int right); +NerdCore::VAR operator+ (NerdCore::VAR _left, double right); + +void operator+= (NerdCore::VAR& _left, std::string right); +void operator+= (NerdCore::VAR& _left, const char* right); +void operator+= (NerdCore::VAR& _left, int right); +void operator+= (NerdCore::VAR& _left, double right); + +NerdCore::VAR operator* (NerdCore::VAR _left, int right); +NerdCore::VAR operator* (NerdCore::VAR _left, double right); +NerdCore::VAR operator* (NerdCore::VAR _left, std::string right); +NerdCore::VAR operator* (NerdCore::VAR _left, const char* right); + +NerdCore::VAR operator- (NerdCore::VAR _left, int right); +NerdCore::VAR operator- (NerdCore::VAR _left, double right); +NerdCore::VAR operator- (NerdCore::VAR _left, std::string right); +NerdCore::VAR operator- (NerdCore::VAR _left, const char* right); + +NerdCore::VAR operator/ (NerdCore::VAR _left, int right); +NerdCore::VAR operator/ (NerdCore::VAR _left, double right); +NerdCore::VAR operator/ (NerdCore::VAR _left, std::string right); +NerdCore::VAR operator/ (NerdCore::VAR _left, const char* right); + +NerdCore::VAR operator% (NerdCore::VAR _left, int right); +NerdCore::VAR operator% (NerdCore::VAR _left, double right); +NerdCore::VAR operator% (NerdCore::VAR _left, std::string right); +NerdCore::VAR operator% (NerdCore::VAR _left, const char* right); + +NerdCore::VAR operator|| (NerdCore::VAR _left, int right); +NerdCore::VAR operator|| (NerdCore::VAR _left, double right); +NerdCore::VAR operator|| (NerdCore::VAR _left, std::string right); +NerdCore::VAR operator|| (NerdCore::VAR _left, const char* right); + +NerdCore::VAR operator== (NerdCore::VAR _left, int right); +NerdCore::VAR operator== (NerdCore::VAR _left, double right); +NerdCore::VAR operator== (NerdCore::VAR _left, std::string right); +NerdCore::VAR operator== (NerdCore::VAR _left, const char* right); + +NerdCore::VAR operator!= (NerdCore::VAR _left, int right); +NerdCore::VAR operator!= (NerdCore::VAR _left, double right); +NerdCore::VAR operator!= (NerdCore::VAR _left, std::string right); +NerdCore::VAR operator!= (NerdCore::VAR _left, const char* right); + +NerdCore::VAR operator| (NerdCore::VAR _left, int right); +NerdCore::VAR operator| (NerdCore::VAR _left, double right); +NerdCore::VAR operator| (NerdCore::VAR _left, std::string right); +NerdCore::VAR operator| (NerdCore::VAR _left, const char* right); + +NerdCore::VAR operator^ (NerdCore::VAR _left, int right); +NerdCore::VAR operator^ (NerdCore::VAR _left, double right); +NerdCore::VAR operator^ (NerdCore::VAR _left, std::string right); +NerdCore::VAR operator^ (NerdCore::VAR _left, const char* right); + +NerdCore::VAR operator& (NerdCore::VAR _left, int right); +NerdCore::VAR operator& (NerdCore::VAR _left, double right); +NerdCore::VAR operator& (NerdCore::VAR _left, std::string right); +NerdCore::VAR operator& (NerdCore::VAR _left, const char* right); + +NerdCore::VAR operator<< (NerdCore::VAR _left, int right); +NerdCore::VAR operator<< (NerdCore::VAR _left, double right); +NerdCore::VAR operator<< (NerdCore::VAR _left, std::string right); +NerdCore::VAR operator<< (NerdCore::VAR _left, const char* right); + +NerdCore::VAR operator>> (NerdCore::VAR _left, int right); +NerdCore::VAR operator>> (NerdCore::VAR _left, double right); +NerdCore::VAR operator>> (NerdCore::VAR _left, std::string right); +NerdCore::VAR operator>> (NerdCore::VAR _left, const char* right); diff --git a/compiler/native/nerdcore/src/stdfn.h b/compiler/native/nerdcore/src/stdfn.h new file mode 100644 index 000000000..fa137ab07 --- /dev/null +++ b/compiler/native/nerdcore/src/stdfn.h @@ -0,0 +1,96 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +namespace NerdCore::Functions +{ + NerdCore::VAR println() + { + #ifndef __NERD_ENV_ARDUINO + std::cout << std::endl; + #endif + return NerdCore::Global::null; + } + NerdCore::VAR println(NerdCore::VAR _var) + { + #ifndef __NERD_ENV_ARDUINO + std::cout << _var << std::endl; + #endif + return NerdCore::Global::null; + } + + NerdCore::VAR print() + { + return NerdCore::Global::null; + } + + NerdCore::VAR print(NerdCore::VAR _var) + { + #ifndef __NERD_ENV_ARDUINO + std::cout << _var; + #endif + return NerdCore::Global::null; + } + + +} + + // no namespace + NerdCore::VAR length_of(NerdCore::VAR _var) + { + switch( _var.type) + { + case NerdCore::Enum::Type::Null: + return 0; + break; + case NerdCore::Enum::Type::Boolean: + return 1; + break; + case NerdCore::Enum::Type::Number: + return 1; + break; + case NerdCore::Enum::Type::String: + return (double)((std::string)_var).size(); + break; + case NerdCore::Enum::Type::Array: + return (double)((NerdCore::Class::Array*)_var.data.ptr)->Size(); + break; + case NerdCore::Enum::Type::FixedArray: + return (double)((NerdCore::Class::FixedArray*)_var.data.ptr)->length; + break; + case NerdCore::Enum::Type::Object: + return (double)((NerdCore::Class::Object*)_var.data.ptr)->Size(); + break; + case NerdCore::Enum::Type::Native: + return (double)((NerdCore::Class::Native*)_var.data.ptr)->length; + break; + default: + return 0; + break; + } + return 0; + } + + NerdCore::VAR size_of(NerdCore::VAR _var) + { + return (double)sizeof(_var); + } \ No newline at end of file diff --git a/compiler/native/nerdcore/src/stdfn_header.h b/compiler/native/nerdcore/src/stdfn_header.h new file mode 100644 index 000000000..b04bcc3de --- /dev/null +++ b/compiler/native/nerdcore/src/stdfn_header.h @@ -0,0 +1,34 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +namespace NerdCore::Functions +{ + NerdCore::VAR println(); + NerdCore::VAR println(NerdCore::VAR _var); + NerdCore::VAR print(); + NerdCore::VAR print(NerdCore::VAR _var); +} + + // no namespace + NerdCore::VAR length_of(NerdCore::VAR _var); + NerdCore::VAR size_of(NerdCore::VAR _var); \ No newline at end of file diff --git a/compiler/native/nerdcore/src/tsl/robin_growth_policy.h b/compiler/native/nerdcore/src/tsl/robin_growth_policy.h new file mode 100644 index 000000000..eba8cdfa0 --- /dev/null +++ b/compiler/native/nerdcore/src/tsl/robin_growth_policy.h @@ -0,0 +1,406 @@ +/** + * MIT License + * + * Copyright (c) 2017 Thibaut Goetghebuer-Planchon + * + * 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. + */ +#ifndef TSL_ROBIN_GROWTH_POLICY_H +#define TSL_ROBIN_GROWTH_POLICY_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef TSL_DEBUG +#define tsl_rh_assert(expr) assert(expr) +#else +#define tsl_rh_assert(expr) (static_cast(0)) +#endif + +/** + * If exceptions are enabled, throw the exception passed in parameter, otherwise + * call std::terminate. + */ +#if (defined(__cpp_exceptions) || defined(__EXCEPTIONS) || \ + (defined(_MSC_VER) && defined(_CPPUNWIND))) && \ + !defined(TSL_NO_EXCEPTIONS) +#define TSL_RH_THROW_OR_TERMINATE(ex, msg) throw ex(msg) +#else +#define TSL_RH_NO_EXCEPTIONS +#ifdef TSL_DEBUG +#include +#define TSL_RH_THROW_OR_TERMINATE(ex, msg) \ + do { \ + std::cerr << msg << std::endl; \ + std::terminate(); \ + } while (0) +#else +#define TSL_RH_THROW_OR_TERMINATE(ex, msg) std::terminate() +#endif +#endif + +#if defined(__GNUC__) || defined(__clang__) +#define TSL_RH_LIKELY(exp) (__builtin_expect(!!(exp), true)) +#else +#define TSL_RH_LIKELY(exp) (exp) +#endif + +#define TSL_RH_UNUSED(x) static_cast(x) + +namespace tsl { +namespace rh { + +/** + * Grow the hash table by a factor of GrowthFactor keeping the bucket count to a + * power of two. It allows the table to use a mask operation instead of a modulo + * operation to map a hash to a bucket. + * + * GrowthFactor must be a power of two >= 2. + */ +template +class power_of_two_growth_policy { + public: + /** + * Called on the hash table creation and on rehash. The number of buckets for + * the table is passed in parameter. This number is a minimum, the policy may + * update this value with a higher value if needed (but not lower). + * + * If 0 is given, min_bucket_count_in_out must still be 0 after the policy + * creation and bucket_for_hash must always return 0 in this case. + */ + explicit power_of_two_growth_policy(std::size_t& min_bucket_count_in_out) { + if (min_bucket_count_in_out > max_bucket_count()) { + TSL_RH_THROW_OR_TERMINATE(std::length_error, + "The hash table exceeds its maximum size."); + } + + if (min_bucket_count_in_out > 0) { + min_bucket_count_in_out = + round_up_to_power_of_two(min_bucket_count_in_out); + m_mask = min_bucket_count_in_out - 1; + } else { + m_mask = 0; + } + } + + /** + * Return the bucket [0, bucket_count()) to which the hash belongs. + * If bucket_count() is 0, it must always return 0. + */ + std::size_t bucket_for_hash(std::size_t hash) const noexcept { + return hash & m_mask; + } + + /** + * Return the number of buckets that should be used on next growth. + */ + std::size_t next_bucket_count() const { + if ((m_mask + 1) > max_bucket_count() / GrowthFactor) { + TSL_RH_THROW_OR_TERMINATE(std::length_error, + "The hash table exceeds its maximum size."); + } + + return (m_mask + 1) * GrowthFactor; + } + + /** + * Return the maximum number of buckets supported by the policy. + */ + std::size_t max_bucket_count() const { + // Largest power of two. + return (std::numeric_limits::max() / 2) + 1; + } + + /** + * Reset the growth policy as if it was created with a bucket count of 0. + * After a clear, the policy must always return 0 when bucket_for_hash is + * called. + */ + void clear() noexcept { m_mask = 0; } + + private: + static std::size_t round_up_to_power_of_two(std::size_t value) { + if (is_power_of_two(value)) { + return value; + } + + if (value == 0) { + return 1; + } + + --value; + for (std::size_t i = 1; i < sizeof(std::size_t) * CHAR_BIT; i *= 2) { + value |= value >> i; + } + + return value + 1; + } + + static constexpr bool is_power_of_two(std::size_t value) { + return value != 0 && (value & (value - 1)) == 0; + } + + protected: + static_assert(is_power_of_two(GrowthFactor) && GrowthFactor >= 2, + "GrowthFactor must be a power of two >= 2."); + + std::size_t m_mask; +}; + +/** + * Grow the hash table by GrowthFactor::num / GrowthFactor::den and use a modulo + * to map a hash to a bucket. Slower but it can be useful if you want a slower + * growth. + */ +template > +class mod_growth_policy { + public: + explicit mod_growth_policy(std::size_t& min_bucket_count_in_out) { + if (min_bucket_count_in_out > max_bucket_count()) { + TSL_RH_THROW_OR_TERMINATE(std::length_error, + "The hash table exceeds its maximum size."); + } + + if (min_bucket_count_in_out > 0) { + m_mod = min_bucket_count_in_out; + } else { + m_mod = 1; + } + } + + std::size_t bucket_for_hash(std::size_t hash) const noexcept { + return hash % m_mod; + } + + std::size_t next_bucket_count() const { + if (m_mod == max_bucket_count()) { + TSL_RH_THROW_OR_TERMINATE(std::length_error, + "The hash table exceeds its maximum size."); + } + + const double next_bucket_count = + std::ceil(double(m_mod) * REHASH_SIZE_MULTIPLICATION_FACTOR); + if (!std::isnormal(next_bucket_count)) { + TSL_RH_THROW_OR_TERMINATE(std::length_error, + "The hash table exceeds its maximum size."); + } + + if (next_bucket_count > double(max_bucket_count())) { + return max_bucket_count(); + } else { + return std::size_t(next_bucket_count); + } + } + + std::size_t max_bucket_count() const { return MAX_BUCKET_COUNT; } + + void clear() noexcept { m_mod = 1; } + + private: + static constexpr double REHASH_SIZE_MULTIPLICATION_FACTOR = + 1.0 * GrowthFactor::num / GrowthFactor::den; + static const std::size_t MAX_BUCKET_COUNT = + std::size_t(double(std::numeric_limits::max() / + REHASH_SIZE_MULTIPLICATION_FACTOR)); + + static_assert(REHASH_SIZE_MULTIPLICATION_FACTOR >= 1.1, + "Growth factor should be >= 1.1."); + + std::size_t m_mod; +}; + +namespace detail { + +#if SIZE_MAX >= ULLONG_MAX +#define TSL_RH_NB_PRIMES 51 +#elif SIZE_MAX >= ULONG_MAX +#define TSL_RH_NB_PRIMES 40 +#else +#define TSL_RH_NB_PRIMES 23 +#endif + +static constexpr const std::array PRIMES = {{ + 1u, + 5u, + 17u, + 29u, + 37u, + 53u, + 67u, + 79u, + 97u, + 131u, + 193u, + 257u, + 389u, + 521u, + 769u, + 1031u, + 1543u, + 2053u, + 3079u, + 6151u, + 12289u, + 24593u, + 49157u, +#if SIZE_MAX >= ULONG_MAX + 98317ul, + 196613ul, + 393241ul, + 786433ul, + 1572869ul, + 3145739ul, + 6291469ul, + 12582917ul, + 25165843ul, + 50331653ul, + 100663319ul, + 201326611ul, + 402653189ul, + 805306457ul, + 1610612741ul, + 3221225473ul, + 4294967291ul, +#endif +#if SIZE_MAX >= ULLONG_MAX + 6442450939ull, + 12884901893ull, + 25769803751ull, + 51539607551ull, + 103079215111ull, + 206158430209ull, + 412316860441ull, + 824633720831ull, + 1649267441651ull, + 3298534883309ull, + 6597069766657ull, +#endif +}}; + +template +static constexpr std::size_t mod(std::size_t hash) { + return hash % PRIMES[IPrime]; +} + +// MOD_PRIME[iprime](hash) returns hash % PRIMES[iprime]. This table allows for +// faster modulo as the compiler can optimize the modulo code better with a +// constant known at the compilation. +static constexpr const std::array + MOD_PRIME = {{ + &mod<0>, &mod<1>, &mod<2>, &mod<3>, &mod<4>, &mod<5>, + &mod<6>, &mod<7>, &mod<8>, &mod<9>, &mod<10>, &mod<11>, + &mod<12>, &mod<13>, &mod<14>, &mod<15>, &mod<16>, &mod<17>, + &mod<18>, &mod<19>, &mod<20>, &mod<21>, &mod<22>, +#if SIZE_MAX >= ULONG_MAX + &mod<23>, &mod<24>, &mod<25>, &mod<26>, &mod<27>, &mod<28>, + &mod<29>, &mod<30>, &mod<31>, &mod<32>, &mod<33>, &mod<34>, + &mod<35>, &mod<36>, &mod<37>, &mod<38>, &mod<39>, +#endif +#if SIZE_MAX >= ULLONG_MAX + &mod<40>, &mod<41>, &mod<42>, &mod<43>, &mod<44>, &mod<45>, + &mod<46>, &mod<47>, &mod<48>, &mod<49>, &mod<50>, +#endif + }}; + +} // namespace detail + +/** + * Grow the hash table by using prime numbers as bucket count. Slower than + * tsl::rh::power_of_two_growth_policy in general but will probably distribute + * the values around better in the buckets with a poor hash function. + * + * To allow the compiler to optimize the modulo operation, a lookup table is + * used with constant primes numbers. + * + * With a switch the code would look like: + * \code + * switch(iprime) { // iprime is the current prime of the hash table + * case 0: hash % 5ul; + * break; + * case 1: hash % 17ul; + * break; + * case 2: hash % 29ul; + * break; + * ... + * } + * \endcode + * + * Due to the constant variable in the modulo the compiler is able to optimize + * the operation by a series of multiplications, substractions and shifts. + * + * The 'hash % 5' could become something like 'hash - (hash * 0xCCCCCCCD) >> 34) + * * 5' in a 64 bits environment. + */ +class prime_growth_policy { + public: + explicit prime_growth_policy(std::size_t& min_bucket_count_in_out) { + auto it_prime = std::lower_bound( + detail::PRIMES.begin(), detail::PRIMES.end(), min_bucket_count_in_out); + if (it_prime == detail::PRIMES.end()) { + TSL_RH_THROW_OR_TERMINATE(std::length_error, + "The hash table exceeds its maximum size."); + } + + m_iprime = static_cast( + std::distance(detail::PRIMES.begin(), it_prime)); + if (min_bucket_count_in_out > 0) { + min_bucket_count_in_out = *it_prime; + } else { + min_bucket_count_in_out = 0; + } + } + + std::size_t bucket_for_hash(std::size_t hash) const noexcept { + return detail::MOD_PRIME[m_iprime](hash); + } + + std::size_t next_bucket_count() const { + if (m_iprime + 1 >= detail::PRIMES.size()) { + TSL_RH_THROW_OR_TERMINATE(std::length_error, + "The hash table exceeds its maximum size."); + } + + return detail::PRIMES[m_iprime + 1]; + } + + std::size_t max_bucket_count() const { return detail::PRIMES.back(); } + + void clear() noexcept { m_iprime = 0; } + + private: + unsigned int m_iprime; + + static_assert(std::numeric_limits::max() >= + detail::PRIMES.size(), + "The type of m_iprime is not big enough."); +}; + +} // namespace rh +} // namespace tsl + +#endif diff --git a/compiler/native/nerdcore/src/tsl/robin_hash.h b/compiler/native/nerdcore/src/tsl/robin_hash.h new file mode 100644 index 000000000..89c7c96f2 --- /dev/null +++ b/compiler/native/nerdcore/src/tsl/robin_hash.h @@ -0,0 +1,1639 @@ +/** + * MIT License + * + * Copyright (c) 2017 Thibaut Goetghebuer-Planchon + * + * 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. + */ +#ifndef TSL_ROBIN_HASH_H +#define TSL_ROBIN_HASH_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "robin_growth_policy.h" + +namespace tsl { + +namespace detail_robin_hash { + +template +struct make_void { + using type = void; +}; + +template +struct has_is_transparent : std::false_type {}; + +template +struct has_is_transparent::type> + : std::true_type {}; + +template +struct is_power_of_two_policy : std::false_type {}; + +template +struct is_power_of_two_policy> + : std::true_type {}; + +// Only available in C++17, we need to be compatible with C++11 +template +const T& clamp(const T& v, const T& lo, const T& hi) { + return std::min(hi, std::max(lo, v)); +} + +template +static T numeric_cast(U value, + const char* error_message = "numeric_cast() failed.") { + T ret = static_cast(value); + if (static_cast(ret) != value) { + TSL_RH_THROW_OR_TERMINATE(std::runtime_error, error_message); + } + + const bool is_same_signedness = + (std::is_unsigned::value && std::is_unsigned::value) || + (std::is_signed::value && std::is_signed::value); + if (!is_same_signedness && (ret < T{}) != (value < U{})) { + TSL_RH_THROW_OR_TERMINATE(std::runtime_error, error_message); + } + + return ret; +} + +template +static T deserialize_value(Deserializer& deserializer) { + // MSVC < 2017 is not conformant, circumvent the problem by removing the + // template keyword +#if defined(_MSC_VER) && _MSC_VER < 1910 + return deserializer.Deserializer::operator()(); +#else + return deserializer.Deserializer::template operator()(); +#endif +} + +/** + * Fixed size type used to represent size_type values on serialization. Need to + * be big enough to represent a std::size_t on 32 and 64 bits platforms, and + * must be the same size on both platforms. + */ +using slz_size_type = std::uint64_t; +static_assert(std::numeric_limits::max() >= + std::numeric_limits::max(), + "slz_size_type must be >= std::size_t"); + +using truncated_hash_type = std::uint32_t; + +/** + * Helper class that stores a truncated hash if StoreHash is true and nothing + * otherwise. + */ +template +class bucket_entry_hash { + public: + bool bucket_hash_equal(std::size_t /*hash*/) const noexcept { return true; } + + truncated_hash_type truncated_hash() const noexcept { return 0; } + + protected: + void set_hash(truncated_hash_type /*hash*/) noexcept {} +}; + +template <> +class bucket_entry_hash { + public: + bool bucket_hash_equal(std::size_t hash) const noexcept { + return m_hash == truncated_hash_type(hash); + } + + truncated_hash_type truncated_hash() const noexcept { return m_hash; } + + protected: + void set_hash(truncated_hash_type hash) noexcept { + m_hash = truncated_hash_type(hash); + } + + private: + truncated_hash_type m_hash; +}; + +/** + * Each bucket entry has: + * - A value of type `ValueType`. + * - An integer to store how far the value of the bucket, if any, is from its + * ideal bucket (ex: if the current bucket 5 has the value 'foo' and + * `hash('foo') % nb_buckets` == 3, `dist_from_ideal_bucket()` will return 2 as + * the current value of the bucket is two buckets away from its ideal bucket) If + * there is no value in the bucket (i.e. `empty()` is true) + * `dist_from_ideal_bucket()` will be < 0. + * - A marker which tells us if the bucket is the last bucket of the bucket + * array (useful for the iterator of the hash table). + * - If `StoreHash` is true, 32 bits of the hash of the value, if any, are also + * stored in the bucket. If the size of the hash is more than 32 bits, it is + * truncated. We don't store the full hash as storing the hash is a potential + * opportunity to use the unused space due to the alignment of the bucket_entry + * structure. We can thus potentially store the hash without any extra space + * (which would not be possible with 64 bits of the hash). + */ +template +class bucket_entry : public bucket_entry_hash { + using bucket_hash = bucket_entry_hash; + + public: + using value_type = ValueType; + using distance_type = std::int16_t; + + bucket_entry() noexcept + : bucket_hash(), + m_dist_from_ideal_bucket(EMPTY_MARKER_DIST_FROM_IDEAL_BUCKET), + m_last_bucket(false) { + tsl_rh_assert(empty()); + } + + bucket_entry(bool last_bucket) noexcept + : bucket_hash(), + m_dist_from_ideal_bucket(EMPTY_MARKER_DIST_FROM_IDEAL_BUCKET), + m_last_bucket(last_bucket) { + tsl_rh_assert(empty()); + } + + bucket_entry(const bucket_entry& other) noexcept( + std::is_nothrow_copy_constructible::value) + : bucket_hash(other), + m_dist_from_ideal_bucket(EMPTY_MARKER_DIST_FROM_IDEAL_BUCKET), + m_last_bucket(other.m_last_bucket) { + if (!other.empty()) { + ::new (static_cast(std::addressof(m_value))) + value_type(other.value()); + m_dist_from_ideal_bucket = other.m_dist_from_ideal_bucket; + } + tsl_rh_assert(empty() == other.empty()); + } + + /** + * Never really used, but still necessary as we must call resize on an empty + * `std::vector`. and we need to support move-only types. See + * robin_hash constructor for details. + */ + bucket_entry(bucket_entry&& other) noexcept( + std::is_nothrow_move_constructible::value) + : bucket_hash(std::move(other)), + m_dist_from_ideal_bucket(EMPTY_MARKER_DIST_FROM_IDEAL_BUCKET), + m_last_bucket(other.m_last_bucket) { + if (!other.empty()) { + ::new (static_cast(std::addressof(m_value))) + value_type(std::move(other.value())); + m_dist_from_ideal_bucket = other.m_dist_from_ideal_bucket; + } + tsl_rh_assert(empty() == other.empty()); + } + + bucket_entry& operator=(const bucket_entry& other) noexcept( + std::is_nothrow_copy_constructible::value) { + if (this != &other) { + clear(); + + bucket_hash::operator=(other); + if (!other.empty()) { + ::new (static_cast(std::addressof(m_value))) + value_type(other.value()); + } + + m_dist_from_ideal_bucket = other.m_dist_from_ideal_bucket; + m_last_bucket = other.m_last_bucket; + } + + return *this; + } + + bucket_entry& operator=(bucket_entry&&) = delete; + + ~bucket_entry() noexcept { clear(); } + + void clear() noexcept { + if (!empty()) { + destroy_value(); + m_dist_from_ideal_bucket = EMPTY_MARKER_DIST_FROM_IDEAL_BUCKET; + } + } + + bool empty() const noexcept { + return m_dist_from_ideal_bucket == EMPTY_MARKER_DIST_FROM_IDEAL_BUCKET; + } + + value_type& value() noexcept { + tsl_rh_assert(!empty()); +#if defined(__cplusplus) && __cplusplus >= 201703L + return *std::launder( + reinterpret_cast(std::addressof(m_value))); +#else + return *reinterpret_cast(std::addressof(m_value)); +#endif + } + + const value_type& value() const noexcept { + tsl_rh_assert(!empty()); +#if defined(__cplusplus) && __cplusplus >= 201703L + return *std::launder( + reinterpret_cast(std::addressof(m_value))); +#else + return *reinterpret_cast(std::addressof(m_value)); +#endif + } + + distance_type dist_from_ideal_bucket() const noexcept { + return m_dist_from_ideal_bucket; + } + + bool last_bucket() const noexcept { return m_last_bucket; } + + void set_as_last_bucket() noexcept { m_last_bucket = true; } + + template + void set_value_of_empty_bucket(distance_type dist_from_ideal_bucket, + truncated_hash_type hash, + Args&&... value_type_args) { + tsl_rh_assert(dist_from_ideal_bucket >= 0); + tsl_rh_assert(empty()); + + ::new (static_cast(std::addressof(m_value))) + value_type(std::forward(value_type_args)...); + this->set_hash(hash); + m_dist_from_ideal_bucket = dist_from_ideal_bucket; + + tsl_rh_assert(!empty()); + } + + void swap_with_value_in_bucket(distance_type& dist_from_ideal_bucket, + truncated_hash_type& hash, value_type& value) { + tsl_rh_assert(!empty()); + tsl_rh_assert(dist_from_ideal_bucket > m_dist_from_ideal_bucket); + + using std::swap; + swap(value, this->value()); + swap(dist_from_ideal_bucket, m_dist_from_ideal_bucket); + + if (StoreHash) { + const truncated_hash_type tmp_hash = this->truncated_hash(); + this->set_hash(hash); + hash = tmp_hash; + } else { + // Avoid warning of unused variable if StoreHash is false + TSL_RH_UNUSED(hash); + } + } + + static truncated_hash_type truncate_hash(std::size_t hash) noexcept { + return truncated_hash_type(hash); + } + + private: + void destroy_value() noexcept { + tsl_rh_assert(!empty()); + value().~value_type(); + } + + public: + static const distance_type EMPTY_MARKER_DIST_FROM_IDEAL_BUCKET = -1; + static const distance_type DIST_FROM_IDEAL_BUCKET_LIMIT = 4096; + static_assert(DIST_FROM_IDEAL_BUCKET_LIMIT <= + std::numeric_limits::max() - 1, + "DIST_FROM_IDEAL_BUCKET_LIMIT must be <= " + "std::numeric_limits::max() - 1."); + + private: + using storage = typename std::aligned_storage::type; + + distance_type m_dist_from_ideal_bucket; + bool m_last_bucket; + storage m_value; +}; + +/** + * Internal common class used by `robin_map` and `robin_set`. + * + * ValueType is what will be stored by `robin_hash` (usually `std::pair` + * for map and `Key` for set). + * + * `KeySelect` should be a `FunctionObject` which takes a `ValueType` in + * parameter and returns a reference to the key. + * + * `ValueSelect` should be a `FunctionObject` which takes a `ValueType` in + * parameter and returns a reference to the value. `ValueSelect` should be void + * if there is no value (in a set for example). + * + * The strong exception guarantee only holds if the expression + * `std::is_nothrow_swappable::value && + * std::is_nothrow_move_constructible::value` is true. + * + * Behaviour is undefined if the destructor of `ValueType` throws. + */ +template +class robin_hash : private Hash, private KeyEqual, private GrowthPolicy { + private: + template + using has_mapped_type = + typename std::integral_constant::value>; + + static_assert( + noexcept(std::declval().bucket_for_hash(std::size_t(0))), + "GrowthPolicy::bucket_for_hash must be noexcept."); + static_assert(noexcept(std::declval().clear()), + "GrowthPolicy::clear must be noexcept."); + + public: + template + class robin_iterator; + + using key_type = typename KeySelect::key_type; + using value_type = ValueType; + using size_type = std::size_t; + using difference_type = std::ptrdiff_t; + using hasher = Hash; + using key_equal = KeyEqual; + using allocator_type = Allocator; + using reference = value_type&; + using const_reference = const value_type&; + using pointer = value_type*; + using const_pointer = const value_type*; + using iterator = robin_iterator; + using const_iterator = robin_iterator; + + private: + /** + * Either store the hash because we are asked by the `StoreHash` template + * parameter or store the hash because it doesn't cost us anything in size and + * can be used to speed up rehash. + */ + static constexpr bool STORE_HASH = + StoreHash || + ((sizeof(tsl::detail_robin_hash::bucket_entry) == + sizeof(tsl::detail_robin_hash::bucket_entry)) && + (sizeof(std::size_t) == sizeof(truncated_hash_type) || + is_power_of_two_policy::value) && + // Don't store the hash for primitive types with default hash. + (!std::is_arithmetic::value || + !std::is_same>::value)); + + /** + * Only use the stored hash on lookup if we are explicitly asked. We are not + * sure how slow the KeyEqual operation is. An extra comparison may slow + * things down with a fast KeyEqual. + */ + static constexpr bool USE_STORED_HASH_ON_LOOKUP = StoreHash; + + /** + * We can only use the hash on rehash if the size of the hash type is the same + * as the stored one or if we use a power of two modulo. In the case of the + * power of two modulo, we just mask the least significant bytes, we just have + * to check that the truncated_hash_type didn't truncated more bytes. + */ + static bool USE_STORED_HASH_ON_REHASH(size_type bucket_count) { + if (STORE_HASH && sizeof(std::size_t) == sizeof(truncated_hash_type)) { + TSL_RH_UNUSED(bucket_count); + return true; + } else if (STORE_HASH && is_power_of_two_policy::value) { + return bucket_count == 0 || + (bucket_count - 1) <= + std::numeric_limits::max(); + } else { + TSL_RH_UNUSED(bucket_count); + return false; + } + } + + using bucket_entry = + tsl::detail_robin_hash::bucket_entry; + using distance_type = typename bucket_entry::distance_type; + + using buckets_allocator = typename std::allocator_traits< + allocator_type>::template rebind_alloc; + using buckets_container_type = std::vector; + + public: + /** + * The 'operator*()' and 'operator->()' methods return a const reference and + * const pointer respectively to the stored value type. + * + * In case of a map, to get a mutable reference to the value associated to a + * key (the '.second' in the stored pair), you have to call 'value()'. + * + * The main reason for this is that if we returned a `std::pair&` + * instead of a `const std::pair&`, the user may modify the key which + * will put the map in a undefined state. + */ + template + class robin_iterator { + friend class robin_hash; + + private: + using bucket_entry_ptr = + typename std::conditional::type; + + robin_iterator(bucket_entry_ptr bucket) noexcept : m_bucket(bucket) {} + + public: + using iterator_category = std::forward_iterator_tag; + using value_type = const typename robin_hash::value_type; + using difference_type = std::ptrdiff_t; + using reference = value_type&; + using pointer = value_type*; + + robin_iterator() noexcept {} + + // Copy constructor from iterator to const_iterator. + template ::type* = nullptr> + robin_iterator(const robin_iterator& other) noexcept + : m_bucket(other.m_bucket) {} + + robin_iterator(const robin_iterator& other) = default; + robin_iterator(robin_iterator&& other) = default; + robin_iterator& operator=(const robin_iterator& other) = default; + robin_iterator& operator=(robin_iterator&& other) = default; + + const typename robin_hash::key_type& key() const { + return KeySelect()(m_bucket->value()); + } + + template ::value && + IsConst>::type* = nullptr> + const typename U::value_type& value() const { + return U()(m_bucket->value()); + } + + template ::value && + !IsConst>::type* = nullptr> + typename U::value_type& value() const { + return U()(m_bucket->value()); + } + + reference operator*() const { return m_bucket->value(); } + + pointer operator->() const { return std::addressof(m_bucket->value()); } + + robin_iterator& operator++() { + while (true) { + if (m_bucket->last_bucket()) { + ++m_bucket; + return *this; + } + + ++m_bucket; + if (!m_bucket->empty()) { + return *this; + } + } + } + + robin_iterator operator++(int) { + robin_iterator tmp(*this); + ++*this; + + return tmp; + } + + friend bool operator==(const robin_iterator& lhs, + const robin_iterator& rhs) { + return lhs.m_bucket == rhs.m_bucket; + } + + friend bool operator!=(const robin_iterator& lhs, + const robin_iterator& rhs) { + return !(lhs == rhs); + } + + private: + bucket_entry_ptr m_bucket; + }; + + public: +#if defined(__cplusplus) && __cplusplus >= 201402L + robin_hash(size_type bucket_count, const Hash& hash, const KeyEqual& equal, + const Allocator& alloc, + float min_load_factor = DEFAULT_MIN_LOAD_FACTOR, + float max_load_factor = DEFAULT_MAX_LOAD_FACTOR) + : Hash(hash), + KeyEqual(equal), + GrowthPolicy(bucket_count), + m_buckets_data(bucket_count, alloc), + m_buckets(m_buckets_data.empty() ? static_empty_bucket_ptr() + : m_buckets_data.data()), + m_bucket_count(bucket_count), + m_nb_elements(0), + m_grow_on_next_insert(false), + m_try_shrink_on_next_insert(false) { + if (bucket_count > max_bucket_count()) { + TSL_RH_THROW_OR_TERMINATE(std::length_error, + "The map exceeds its maximum bucket count."); + } + + if (m_bucket_count > 0) { + tsl_rh_assert(!m_buckets_data.empty()); + m_buckets_data.back().set_as_last_bucket(); + } + + this->min_load_factor(min_load_factor); + this->max_load_factor(max_load_factor); + } +#else + /** + * C++11 doesn't support the creation of a std::vector with a custom allocator + * and 'count' default-inserted elements. The needed contructor `explicit + * vector(size_type count, const Allocator& alloc = Allocator());` is only + * available in C++14 and later. We thus must resize after using the + * `vector(const Allocator& alloc)` constructor. + * + * We can't use `vector(size_type count, const T& value, const Allocator& + * alloc)` as it requires the value T to be copyable. + */ + robin_hash(size_type bucket_count, const Hash& hash, const KeyEqual& equal, + const Allocator& alloc, + float min_load_factor = DEFAULT_MIN_LOAD_FACTOR, + float max_load_factor = DEFAULT_MAX_LOAD_FACTOR) + : Hash(hash), + KeyEqual(equal), + GrowthPolicy(bucket_count), + m_buckets_data(alloc), + m_buckets(static_empty_bucket_ptr()), + m_bucket_count(bucket_count), + m_nb_elements(0), + m_grow_on_next_insert(false), + m_try_shrink_on_next_insert(false) { + if (bucket_count > max_bucket_count()) { + TSL_RH_THROW_OR_TERMINATE(std::length_error, + "The map exceeds its maximum bucket count."); + } + + if (m_bucket_count > 0) { + m_buckets_data.resize(m_bucket_count); + m_buckets = m_buckets_data.data(); + + tsl_rh_assert(!m_buckets_data.empty()); + m_buckets_data.back().set_as_last_bucket(); + } + + this->min_load_factor(min_load_factor); + this->max_load_factor(max_load_factor); + } +#endif + + robin_hash(const robin_hash& other) + : Hash(other), + KeyEqual(other), + GrowthPolicy(other), + m_buckets_data(other.m_buckets_data), + m_buckets(m_buckets_data.empty() ? static_empty_bucket_ptr() + : m_buckets_data.data()), + m_bucket_count(other.m_bucket_count), + m_nb_elements(other.m_nb_elements), + m_load_threshold(other.m_load_threshold), + m_min_load_factor(other.m_min_load_factor), + m_max_load_factor(other.m_max_load_factor), + m_grow_on_next_insert(other.m_grow_on_next_insert), + m_try_shrink_on_next_insert(other.m_try_shrink_on_next_insert) {} + + robin_hash(robin_hash&& other) noexcept( + std::is_nothrow_move_constructible< + Hash>::value&& std::is_nothrow_move_constructible::value&& + std::is_nothrow_move_constructible::value&& + std::is_nothrow_move_constructible::value) + : Hash(std::move(static_cast(other))), + KeyEqual(std::move(static_cast(other))), + GrowthPolicy(std::move(static_cast(other))), + m_buckets_data(std::move(other.m_buckets_data)), + m_buckets(m_buckets_data.empty() ? static_empty_bucket_ptr() + : m_buckets_data.data()), + m_bucket_count(other.m_bucket_count), + m_nb_elements(other.m_nb_elements), + m_load_threshold(other.m_load_threshold), + m_min_load_factor(other.m_min_load_factor), + m_max_load_factor(other.m_max_load_factor), + m_grow_on_next_insert(other.m_grow_on_next_insert), + m_try_shrink_on_next_insert(other.m_try_shrink_on_next_insert) { + other.clear_and_shrink(); + } + + robin_hash& operator=(const robin_hash& other) { + if (&other != this) { + Hash::operator=(other); + KeyEqual::operator=(other); + GrowthPolicy::operator=(other); + + m_buckets_data = other.m_buckets_data; + m_buckets = m_buckets_data.empty() ? static_empty_bucket_ptr() + : m_buckets_data.data(); + m_bucket_count = other.m_bucket_count; + m_nb_elements = other.m_nb_elements; + + m_load_threshold = other.m_load_threshold; + m_min_load_factor = other.m_min_load_factor; + m_max_load_factor = other.m_max_load_factor; + + m_grow_on_next_insert = other.m_grow_on_next_insert; + m_try_shrink_on_next_insert = other.m_try_shrink_on_next_insert; + } + + return *this; + } + + robin_hash& operator=(robin_hash&& other) { + other.swap(*this); + other.clear_and_shrink(); + + return *this; + } + + allocator_type get_allocator() const { + return m_buckets_data.get_allocator(); + } + + /* + * Iterators + */ + iterator begin() noexcept { + std::size_t i = 0; + while (i < m_bucket_count && m_buckets[i].empty()) { + i++; + } + + return iterator(m_buckets + i); + } + + const_iterator begin() const noexcept { return cbegin(); } + + const_iterator cbegin() const noexcept { + std::size_t i = 0; + while (i < m_bucket_count && m_buckets[i].empty()) { + i++; + } + + return const_iterator(m_buckets + i); + } + + iterator end() noexcept { return iterator(m_buckets + m_bucket_count); } + + const_iterator end() const noexcept { return cend(); } + + const_iterator cend() const noexcept { + return const_iterator(m_buckets + m_bucket_count); + } + + /* + * Capacity + */ + bool empty() const noexcept { return m_nb_elements == 0; } + + size_type size() const noexcept { return m_nb_elements; } + + size_type max_size() const noexcept { return m_buckets_data.max_size(); } + + /* + * Modifiers + */ + void clear() noexcept { + if (m_min_load_factor > 0.0f) { + clear_and_shrink(); + } else { + for (auto& bucket : m_buckets_data) { + bucket.clear(); + } + + m_nb_elements = 0; + m_grow_on_next_insert = false; + } + } + + template + std::pair insert(P&& value) { + return insert_impl(KeySelect()(value), std::forward

(value)); + } + + template + iterator insert_hint(const_iterator hint, P&& value) { + if (hint != cend() && + compare_keys(KeySelect()(*hint), KeySelect()(value))) { + return mutable_iterator(hint); + } + + return insert(std::forward

(value)).first; + } + + template + void insert(InputIt first, InputIt last) { + if (std::is_base_of< + std::forward_iterator_tag, + typename std::iterator_traits::iterator_category>::value) { + const auto nb_elements_insert = std::distance(first, last); + const size_type nb_free_buckets = m_load_threshold - size(); + tsl_rh_assert(m_load_threshold >= size()); + + if (nb_elements_insert > 0 && + nb_free_buckets < size_type(nb_elements_insert)) { + reserve(size() + size_type(nb_elements_insert)); + } + } + + for (; first != last; ++first) { + insert(*first); + } + } + + template + std::pair insert_or_assign(K&& key, M&& obj) { + auto it = try_emplace(std::forward(key), std::forward(obj)); + if (!it.second) { + it.first.value() = std::forward(obj); + } + + return it; + } + + template + iterator insert_or_assign(const_iterator hint, K&& key, M&& obj) { + if (hint != cend() && compare_keys(KeySelect()(*hint), key)) { + auto it = mutable_iterator(hint); + it.value() = std::forward(obj); + + return it; + } + + return insert_or_assign(std::forward(key), std::forward(obj)).first; + } + + template + std::pair emplace(Args&&... args) { + return insert(value_type(std::forward(args)...)); + } + + template + iterator emplace_hint(const_iterator hint, Args&&... args) { + return insert_hint(hint, value_type(std::forward(args)...)); + } + + template + std::pair try_emplace(K&& key, Args&&... args) { + return insert_impl(key, std::piecewise_construct, + std::forward_as_tuple(std::forward(key)), + std::forward_as_tuple(std::forward(args)...)); + } + + template + iterator try_emplace_hint(const_iterator hint, K&& key, Args&&... args) { + if (hint != cend() && compare_keys(KeySelect()(*hint), key)) { + return mutable_iterator(hint); + } + + return try_emplace(std::forward(key), std::forward(args)...).first; + } + + /** + * Here to avoid `template size_type erase(const K& key)` being used + * when we use an `iterator` instead of a `const_iterator`. + */ + iterator erase(iterator pos) { + erase_from_bucket(pos); + + /** + * Erase bucket used a backward shift after clearing the bucket. + * Check if there is a new value in the bucket, if not get the next + * non-empty. + */ + if (pos.m_bucket->empty()) { + ++pos; + } + + m_try_shrink_on_next_insert = true; + + return pos; + } + + iterator erase(const_iterator pos) { return erase(mutable_iterator(pos)); } + + iterator erase(const_iterator first, const_iterator last) { + if (first == last) { + return mutable_iterator(first); + } + + auto first_mutable = mutable_iterator(first); + auto last_mutable = mutable_iterator(last); + for (auto it = first_mutable.m_bucket; it != last_mutable.m_bucket; ++it) { + if (!it->empty()) { + it->clear(); + m_nb_elements--; + } + } + + if (last_mutable == end()) { + m_try_shrink_on_next_insert = true; + return end(); + } + + /* + * Backward shift on the values which come after the deleted values. + * We try to move the values closer to their ideal bucket. + */ + std::size_t icloser_bucket = + static_cast(first_mutable.m_bucket - m_buckets); + std::size_t ito_move_closer_value = + static_cast(last_mutable.m_bucket - m_buckets); + tsl_rh_assert(ito_move_closer_value > icloser_bucket); + + const std::size_t ireturn_bucket = + ito_move_closer_value - + std::min( + ito_move_closer_value - icloser_bucket, + std::size_t( + m_buckets[ito_move_closer_value].dist_from_ideal_bucket())); + + while (ito_move_closer_value < m_bucket_count && + m_buckets[ito_move_closer_value].dist_from_ideal_bucket() > 0) { + icloser_bucket = + ito_move_closer_value - + std::min( + ito_move_closer_value - icloser_bucket, + std::size_t( + m_buckets[ito_move_closer_value].dist_from_ideal_bucket())); + + tsl_rh_assert(m_buckets[icloser_bucket].empty()); + const distance_type new_distance = distance_type( + m_buckets[ito_move_closer_value].dist_from_ideal_bucket() - + (ito_move_closer_value - icloser_bucket)); + m_buckets[icloser_bucket].set_value_of_empty_bucket( + new_distance, m_buckets[ito_move_closer_value].truncated_hash(), + std::move(m_buckets[ito_move_closer_value].value())); + m_buckets[ito_move_closer_value].clear(); + + ++icloser_bucket; + ++ito_move_closer_value; + } + + m_try_shrink_on_next_insert = true; + + return iterator(m_buckets + ireturn_bucket); + } + + template + size_type erase(const K& key) { + return erase(key, hash_key(key)); + } + + template + size_type erase(const K& key, std::size_t hash) { + auto it = find(key, hash); + if (it != end()) { + erase_from_bucket(it); + m_try_shrink_on_next_insert = true; + + return 1; + } else { + return 0; + } + } + + void swap(robin_hash& other) { + using std::swap; + + swap(static_cast(*this), static_cast(other)); + swap(static_cast(*this), static_cast(other)); + swap(static_cast(*this), static_cast(other)); + swap(m_buckets_data, other.m_buckets_data); + swap(m_buckets, other.m_buckets); + swap(m_bucket_count, other.m_bucket_count); + swap(m_nb_elements, other.m_nb_elements); + swap(m_load_threshold, other.m_load_threshold); + swap(m_min_load_factor, other.m_min_load_factor); + swap(m_max_load_factor, other.m_max_load_factor); + swap(m_grow_on_next_insert, other.m_grow_on_next_insert); + swap(m_try_shrink_on_next_insert, other.m_try_shrink_on_next_insert); + } + + /* + * Lookup + */ + template ::value>::type* = nullptr> + typename U::value_type& at(const K& key) { + return at(key, hash_key(key)); + } + + template ::value>::type* = nullptr> + typename U::value_type& at(const K& key, std::size_t hash) { + return const_cast( + static_cast(this)->at(key, hash)); + } + + template ::value>::type* = nullptr> + const typename U::value_type& at(const K& key) const { + return at(key, hash_key(key)); + } + + template ::value>::type* = nullptr> + const typename U::value_type& at(const K& key, std::size_t hash) const { + auto it = find(key, hash); + if (it != cend()) { + return it.value(); + } else { + TSL_RH_THROW_OR_TERMINATE(std::out_of_range, "Couldn't find key."); + } + } + + template ::value>::type* = nullptr> + typename U::value_type& operator[](K&& key) { + return try_emplace(std::forward(key)).first.value(); + } + + template + size_type count(const K& key) const { + return count(key, hash_key(key)); + } + + template + size_type count(const K& key, std::size_t hash) const { + if (find(key, hash) != cend()) { + return 1; + } else { + return 0; + } + } + + template + iterator find(const K& key) { + return find_impl(key, hash_key(key)); + } + + template + iterator find(const K& key, std::size_t hash) { + return find_impl(key, hash); + } + + template + const_iterator find(const K& key) const { + return find_impl(key, hash_key(key)); + } + + template + const_iterator find(const K& key, std::size_t hash) const { + return find_impl(key, hash); + } + + template + bool contains(const K& key) const { + return contains(key, hash_key(key)); + } + + template + bool contains(const K& key, std::size_t hash) const { + return count(key, hash) != 0; + } + + template + std::pair equal_range(const K& key) { + return equal_range(key, hash_key(key)); + } + + template + std::pair equal_range(const K& key, std::size_t hash) { + iterator it = find(key, hash); + return std::make_pair(it, (it == end()) ? it : std::next(it)); + } + + template + std::pair equal_range(const K& key) const { + return equal_range(key, hash_key(key)); + } + + template + std::pair equal_range( + const K& key, std::size_t hash) const { + const_iterator it = find(key, hash); + return std::make_pair(it, (it == cend()) ? it : std::next(it)); + } + + /* + * Bucket interface + */ + size_type bucket_count() const { return m_bucket_count; } + + size_type max_bucket_count() const { + return std::min(GrowthPolicy::max_bucket_count(), + m_buckets_data.max_size()); + } + + /* + * Hash policy + */ + float load_factor() const { + if (bucket_count() == 0) { + return 0; + } + + return float(m_nb_elements) / float(bucket_count()); + } + + float min_load_factor() const { return m_min_load_factor; } + + float max_load_factor() const { return m_max_load_factor; } + + void min_load_factor(float ml) { + m_min_load_factor = clamp(ml, float(MINIMUM_MIN_LOAD_FACTOR), + float(MAXIMUM_MIN_LOAD_FACTOR)); + } + + void max_load_factor(float ml) { + m_max_load_factor = clamp(ml, float(MINIMUM_MAX_LOAD_FACTOR), + float(MAXIMUM_MAX_LOAD_FACTOR)); + m_load_threshold = size_type(float(bucket_count()) * m_max_load_factor); + tsl_rh_assert(bucket_count() == 0 || m_load_threshold < bucket_count()); + } + + void rehash(size_type count_) { + count_ = std::max(count_, + size_type(std::ceil(float(size()) / max_load_factor()))); + rehash_impl(count_); + } + + void reserve(size_type count_) { + rehash(size_type(std::ceil(float(count_) / max_load_factor()))); + } + + /* + * Observers + */ + hasher hash_function() const { return static_cast(*this); } + + key_equal key_eq() const { return static_cast(*this); } + + /* + * Other + */ + iterator mutable_iterator(const_iterator pos) { + return iterator(const_cast(pos.m_bucket)); + } + + template + void serialize(Serializer& serializer) const { + serialize_impl(serializer); + } + + template + void deserialize(Deserializer& deserializer, bool hash_compatible) { + deserialize_impl(deserializer, hash_compatible); + } + + private: + template + std::size_t hash_key(const K& key) const { + return Hash::operator()(key); + } + + template + bool compare_keys(const K1& key1, const K2& key2) const { + return KeyEqual::operator()(key1, key2); + } + + std::size_t bucket_for_hash(std::size_t hash) const { + const std::size_t bucket = GrowthPolicy::bucket_for_hash(hash); + tsl_rh_assert(bucket < m_bucket_count || + (bucket == 0 && m_bucket_count == 0)); + + return bucket; + } + + template ::value>::type* = + nullptr> + std::size_t next_bucket(std::size_t index) const noexcept { + tsl_rh_assert(index < bucket_count()); + + return (index + 1) & this->m_mask; + } + + template ::value>::type* = + nullptr> + std::size_t next_bucket(std::size_t index) const noexcept { + tsl_rh_assert(index < bucket_count()); + + index++; + return (index != bucket_count()) ? index : 0; + } + + template + iterator find_impl(const K& key, std::size_t hash) { + return mutable_iterator( + static_cast(this)->find(key, hash)); + } + + template + const_iterator find_impl(const K& key, std::size_t hash) const { + std::size_t ibucket = bucket_for_hash(hash); + distance_type dist_from_ideal_bucket = 0; + + while (dist_from_ideal_bucket <= + m_buckets[ibucket].dist_from_ideal_bucket()) { + if (TSL_RH_LIKELY( + (!USE_STORED_HASH_ON_LOOKUP || + m_buckets[ibucket].bucket_hash_equal(hash)) && + compare_keys(KeySelect()(m_buckets[ibucket].value()), key))) { + return const_iterator(m_buckets + ibucket); + } + + ibucket = next_bucket(ibucket); + dist_from_ideal_bucket++; + } + + return cend(); + } + + void erase_from_bucket(iterator pos) { + pos.m_bucket->clear(); + m_nb_elements--; + + /** + * Backward shift, swap the empty bucket, previous_ibucket, with the values + * on its right, ibucket, until we cross another empty bucket or if the + * other bucket has a distance_from_ideal_bucket == 0. + * + * We try to move the values closer to their ideal bucket. + */ + std::size_t previous_ibucket = + static_cast(pos.m_bucket - m_buckets); + std::size_t ibucket = next_bucket(previous_ibucket); + + while (m_buckets[ibucket].dist_from_ideal_bucket() > 0) { + tsl_rh_assert(m_buckets[previous_ibucket].empty()); + + const distance_type new_distance = + distance_type(m_buckets[ibucket].dist_from_ideal_bucket() - 1); + m_buckets[previous_ibucket].set_value_of_empty_bucket( + new_distance, m_buckets[ibucket].truncated_hash(), + std::move(m_buckets[ibucket].value())); + m_buckets[ibucket].clear(); + + previous_ibucket = ibucket; + ibucket = next_bucket(ibucket); + } + } + + template + std::pair insert_impl(const K& key, + Args&&... value_type_args) { + const std::size_t hash = hash_key(key); + + std::size_t ibucket = bucket_for_hash(hash); + distance_type dist_from_ideal_bucket = 0; + + while (dist_from_ideal_bucket <= + m_buckets[ibucket].dist_from_ideal_bucket()) { + if ((!USE_STORED_HASH_ON_LOOKUP || + m_buckets[ibucket].bucket_hash_equal(hash)) && + compare_keys(KeySelect()(m_buckets[ibucket].value()), key)) { + return std::make_pair(iterator(m_buckets + ibucket), false); + } + + ibucket = next_bucket(ibucket); + dist_from_ideal_bucket++; + } + + if (rehash_on_extreme_load()) { + ibucket = bucket_for_hash(hash); + dist_from_ideal_bucket = 0; + + while (dist_from_ideal_bucket <= + m_buckets[ibucket].dist_from_ideal_bucket()) { + ibucket = next_bucket(ibucket); + dist_from_ideal_bucket++; + } + } + + if (m_buckets[ibucket].empty()) { + m_buckets[ibucket].set_value_of_empty_bucket( + dist_from_ideal_bucket, bucket_entry::truncate_hash(hash), + std::forward(value_type_args)...); + } else { + insert_value(ibucket, dist_from_ideal_bucket, + bucket_entry::truncate_hash(hash), + std::forward(value_type_args)...); + } + + m_nb_elements++; + /* + * The value will be inserted in ibucket in any case, either because it was + * empty or by stealing the bucket (robin hood). + */ + return std::make_pair(iterator(m_buckets + ibucket), true); + } + + template + void insert_value(std::size_t ibucket, distance_type dist_from_ideal_bucket, + truncated_hash_type hash, Args&&... value_type_args) { + value_type value(std::forward(value_type_args)...); + insert_value_impl(ibucket, dist_from_ideal_bucket, hash, value); + } + + void insert_value(std::size_t ibucket, distance_type dist_from_ideal_bucket, + truncated_hash_type hash, value_type&& value) { + insert_value_impl(ibucket, dist_from_ideal_bucket, hash, value); + } + + /* + * We don't use `value_type&& value` as last argument due to a bug in MSVC + * when `value_type` is a pointer, The compiler is not able to see the + * difference between `std::string*` and `std::string*&&` resulting in a + * compilation error. + * + * The `value` will be in a moved state at the end of the function. + */ + void insert_value_impl(std::size_t ibucket, + distance_type dist_from_ideal_bucket, + truncated_hash_type hash, value_type& value) { + tsl_rh_assert(dist_from_ideal_bucket > + m_buckets[ibucket].dist_from_ideal_bucket()); + m_buckets[ibucket].swap_with_value_in_bucket(dist_from_ideal_bucket, hash, + value); + ibucket = next_bucket(ibucket); + dist_from_ideal_bucket++; + + while (!m_buckets[ibucket].empty()) { + if (dist_from_ideal_bucket > + m_buckets[ibucket].dist_from_ideal_bucket()) { + if (dist_from_ideal_bucket >= + bucket_entry::DIST_FROM_IDEAL_BUCKET_LIMIT) { + /** + * The number of probes is really high, rehash the map on the next + * insert. Difficult to do now as rehash may throw an exception. + */ + m_grow_on_next_insert = true; + } + + m_buckets[ibucket].swap_with_value_in_bucket(dist_from_ideal_bucket, + hash, value); + } + + ibucket = next_bucket(ibucket); + dist_from_ideal_bucket++; + } + + m_buckets[ibucket].set_value_of_empty_bucket(dist_from_ideal_bucket, hash, + std::move(value)); + } + + void rehash_impl(size_type count_) { + robin_hash new_table(count_, static_cast(*this), + static_cast(*this), get_allocator(), + m_min_load_factor, m_max_load_factor); + tsl_rh_assert(size() <= new_table.m_load_threshold); + + const bool use_stored_hash = + USE_STORED_HASH_ON_REHASH(new_table.bucket_count()); + for (auto& bucket : m_buckets_data) { + if (bucket.empty()) { + continue; + } + + const std::size_t hash = + use_stored_hash ? bucket.truncated_hash() + : new_table.hash_key(KeySelect()(bucket.value())); + + new_table.insert_value_on_rehash(new_table.bucket_for_hash(hash), 0, + bucket_entry::truncate_hash(hash), + std::move(bucket.value())); + } + + new_table.m_nb_elements = m_nb_elements; + new_table.swap(*this); + } + + void clear_and_shrink() noexcept { + GrowthPolicy::clear(); + m_buckets_data.clear(); + m_buckets = static_empty_bucket_ptr(); + m_bucket_count = 0; + m_nb_elements = 0; + m_load_threshold = 0; + m_grow_on_next_insert = false; + m_try_shrink_on_next_insert = false; + } + + void insert_value_on_rehash(std::size_t ibucket, + distance_type dist_from_ideal_bucket, + truncated_hash_type hash, value_type&& value) { + while (true) { + if (dist_from_ideal_bucket > + m_buckets[ibucket].dist_from_ideal_bucket()) { + if (m_buckets[ibucket].empty()) { + m_buckets[ibucket].set_value_of_empty_bucket(dist_from_ideal_bucket, + hash, std::move(value)); + return; + } else { + m_buckets[ibucket].swap_with_value_in_bucket(dist_from_ideal_bucket, + hash, value); + } + } + + dist_from_ideal_bucket++; + ibucket = next_bucket(ibucket); + } + } + + /** + * Grow the table if m_grow_on_next_insert is true or we reached the + * max_load_factor. Shrink the table if m_try_shrink_on_next_insert is true + * (an erase occurred) and we're below the min_load_factor. + * + * Return true if the table has been rehashed. + */ + bool rehash_on_extreme_load() { + if (m_grow_on_next_insert || size() >= m_load_threshold) { + rehash_impl(GrowthPolicy::next_bucket_count()); + m_grow_on_next_insert = false; + + return true; + } + + if (m_try_shrink_on_next_insert) { + m_try_shrink_on_next_insert = false; + if (m_min_load_factor != 0.0f && load_factor() < m_min_load_factor) { + reserve(size() + 1); + + return true; + } + } + + return false; + } + + template + void serialize_impl(Serializer& serializer) const { + const slz_size_type version = SERIALIZATION_PROTOCOL_VERSION; + serializer(version); + + // Indicate if the truncated hash of each bucket is stored. Use a + // std::int16_t instead of a bool to avoid the need for the serializer to + // support an extra 'bool' type. + const std::int16_t hash_stored_for_bucket = + static_cast(STORE_HASH); + serializer(hash_stored_for_bucket); + + const slz_size_type nb_elements = m_nb_elements; + serializer(nb_elements); + + const slz_size_type bucket_count = m_buckets_data.size(); + serializer(bucket_count); + + const float min_load_factor = m_min_load_factor; + serializer(min_load_factor); + + const float max_load_factor = m_max_load_factor; + serializer(max_load_factor); + + for (const bucket_entry& bucket : m_buckets_data) { + if (bucket.empty()) { + const std::int16_t empty_bucket = + bucket_entry::EMPTY_MARKER_DIST_FROM_IDEAL_BUCKET; + serializer(empty_bucket); + } else { + const std::int16_t dist_from_ideal_bucket = + bucket.dist_from_ideal_bucket(); + serializer(dist_from_ideal_bucket); + if (STORE_HASH) { + const std::uint32_t truncated_hash = bucket.truncated_hash(); + serializer(truncated_hash); + } + serializer(bucket.value()); + } + } + } + + template + void deserialize_impl(Deserializer& deserializer, bool hash_compatible) { + tsl_rh_assert(m_buckets_data.empty()); // Current hash table must be empty + + const slz_size_type version = + deserialize_value(deserializer); + // For now we only have one version of the serialization protocol. + // If it doesn't match there is a problem with the file. + if (version != SERIALIZATION_PROTOCOL_VERSION) { + TSL_RH_THROW_OR_TERMINATE(std::runtime_error, + "Can't deserialize the ordered_map/set. " + "The protocol version header is invalid."); + } + + const bool hash_stored_for_bucket = + deserialize_value(deserializer) ? true : false; + if (hash_compatible && STORE_HASH != hash_stored_for_bucket) { + TSL_RH_THROW_OR_TERMINATE( + std::runtime_error, + "Can't deserialize a map with a different StoreHash " + "than the one used during the serialization when " + "hash compatibility is used"); + } + + const slz_size_type nb_elements = + deserialize_value(deserializer); + const slz_size_type bucket_count_ds = + deserialize_value(deserializer); + const float min_load_factor = deserialize_value(deserializer); + const float max_load_factor = deserialize_value(deserializer); + + if (min_load_factor < MINIMUM_MIN_LOAD_FACTOR || + min_load_factor > MAXIMUM_MIN_LOAD_FACTOR) { + TSL_RH_THROW_OR_TERMINATE( + std::runtime_error, + "Invalid min_load_factor. Check that the serializer " + "and deserializer support floats correctly as they " + "can be converted implicitly to ints."); + } + + if (max_load_factor < MINIMUM_MAX_LOAD_FACTOR || + max_load_factor > MAXIMUM_MAX_LOAD_FACTOR) { + TSL_RH_THROW_OR_TERMINATE( + std::runtime_error, + "Invalid max_load_factor. Check that the serializer " + "and deserializer support floats correctly as they " + "can be converted implicitly to ints."); + } + + this->min_load_factor(min_load_factor); + this->max_load_factor(max_load_factor); + + if (bucket_count_ds == 0) { + tsl_rh_assert(nb_elements == 0); + return; + } + + if (!hash_compatible) { + reserve(numeric_cast(nb_elements, + "Deserialized nb_elements is too big.")); + for (slz_size_type ibucket = 0; ibucket < bucket_count_ds; ibucket++) { + const distance_type dist_from_ideal_bucket = + deserialize_value(deserializer); + if (dist_from_ideal_bucket != + bucket_entry::EMPTY_MARKER_DIST_FROM_IDEAL_BUCKET) { + if (hash_stored_for_bucket) { + TSL_RH_UNUSED(deserialize_value(deserializer)); + } + + insert(deserialize_value(deserializer)); + } + } + + tsl_rh_assert(nb_elements == size()); + } else { + m_bucket_count = numeric_cast( + bucket_count_ds, "Deserialized bucket_count is too big."); + + GrowthPolicy::operator=(GrowthPolicy(m_bucket_count)); + // GrowthPolicy should not modify the bucket count we got from + // deserialization + if (m_bucket_count != bucket_count_ds) { + TSL_RH_THROW_OR_TERMINATE(std::runtime_error, + "The GrowthPolicy is not the same even " + "though hash_compatible is true."); + } + + m_nb_elements = numeric_cast( + nb_elements, "Deserialized nb_elements is too big."); + m_buckets_data.resize(m_bucket_count); + m_buckets = m_buckets_data.data(); + + for (bucket_entry& bucket : m_buckets_data) { + const distance_type dist_from_ideal_bucket = + deserialize_value(deserializer); + if (dist_from_ideal_bucket != + bucket_entry::EMPTY_MARKER_DIST_FROM_IDEAL_BUCKET) { + truncated_hash_type truncated_hash = 0; + if (hash_stored_for_bucket) { + tsl_rh_assert(hash_stored_for_bucket); + truncated_hash = deserialize_value(deserializer); + } + + bucket.set_value_of_empty_bucket( + dist_from_ideal_bucket, truncated_hash, + deserialize_value(deserializer)); + } + } + + if (!m_buckets_data.empty()) { + m_buckets_data.back().set_as_last_bucket(); + } + } + } + + public: + static const size_type DEFAULT_INIT_BUCKETS_SIZE = 0; + + static constexpr float DEFAULT_MAX_LOAD_FACTOR = 0.5f; + static constexpr float MINIMUM_MAX_LOAD_FACTOR = 0.2f; + static constexpr float MAXIMUM_MAX_LOAD_FACTOR = 0.95f; + + static constexpr float DEFAULT_MIN_LOAD_FACTOR = 0.0f; + static constexpr float MINIMUM_MIN_LOAD_FACTOR = 0.0f; + static constexpr float MAXIMUM_MIN_LOAD_FACTOR = 0.15f; + + static_assert(MINIMUM_MAX_LOAD_FACTOR < MAXIMUM_MAX_LOAD_FACTOR, + "MINIMUM_MAX_LOAD_FACTOR should be < MAXIMUM_MAX_LOAD_FACTOR"); + static_assert(MINIMUM_MIN_LOAD_FACTOR < MAXIMUM_MIN_LOAD_FACTOR, + "MINIMUM_MIN_LOAD_FACTOR should be < MAXIMUM_MIN_LOAD_FACTOR"); + static_assert(MAXIMUM_MIN_LOAD_FACTOR < MINIMUM_MAX_LOAD_FACTOR, + "MAXIMUM_MIN_LOAD_FACTOR should be < MINIMUM_MAX_LOAD_FACTOR"); + + private: + /** + * Protocol version currenlty used for serialization. + */ + static const slz_size_type SERIALIZATION_PROTOCOL_VERSION = 1; + + /** + * Return an always valid pointer to an static empty bucket_entry with + * last_bucket() == true. + */ + bucket_entry* static_empty_bucket_ptr() noexcept { + static bucket_entry empty_bucket(true); + tsl_rh_assert(empty_bucket.empty()); + return &empty_bucket; + } + + private: + buckets_container_type m_buckets_data; + + /** + * Points to m_buckets_data.data() if !m_buckets_data.empty() otherwise points + * to static_empty_bucket_ptr. This variable is useful to avoid the cost of + * checking if m_buckets_data is empty when trying to find an element. + * + * TODO Remove m_buckets_data and only use a pointer instead of a + * pointer+vector to save some space in the robin_hash object. Manage the + * Allocator manually. + */ + bucket_entry* m_buckets; + + /** + * Used a lot in find, avoid the call to m_buckets_data.size() which is a bit + * slower. + */ + size_type m_bucket_count; + + size_type m_nb_elements; + + size_type m_load_threshold; + + float m_min_load_factor; + float m_max_load_factor; + + bool m_grow_on_next_insert; + + /** + * We can't shrink down the map on erase operations as the erase methods need + * to return the next iterator. Shrinking the map would invalidate all the + * iterators and we could not return the next iterator in a meaningful way, On + * erase, we thus just indicate on erase that we should try to shrink the hash + * table on the next insert if we go below the min_load_factor. + */ + bool m_try_shrink_on_next_insert; +}; + +} // namespace detail_robin_hash + +} // namespace tsl + +#endif diff --git a/compiler/native/nerdcore/src/tsl/robin_map.h b/compiler/native/nerdcore/src/tsl/robin_map.h new file mode 100644 index 000000000..aeb354c3c --- /dev/null +++ b/compiler/native/nerdcore/src/tsl/robin_map.h @@ -0,0 +1,807 @@ +/** + * MIT License + * + * Copyright (c) 2017 Thibaut Goetghebuer-Planchon + * + * 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. + */ +#ifndef TSL_ROBIN_MAP_H +#define TSL_ROBIN_MAP_H + +#include +#include +#include +#include +#include +#include + +#include "robin_hash.h" + +namespace tsl { + +/** + * Implementation of a hash map using open-addressing and the robin hood hashing + * algorithm with backward shift deletion. + * + * For operations modifying the hash map (insert, erase, rehash, ...), the + * strong exception guarantee is only guaranteed when the expression + * `std::is_nothrow_swappable>::value && + * std::is_nothrow_move_constructible>::value` is true, + * otherwise if an exception is thrown during the swap or the move, the hash map + * may end up in a undefined state. Per the standard a `Key` or `T` with a + * noexcept copy constructor and no move constructor also satisfies the + * `std::is_nothrow_move_constructible>::value` criterion (and + * will thus guarantee the strong exception for the map). + * + * When `StoreHash` is true, 32 bits of the hash are stored alongside the + * values. It can improve the performance during lookups if the `KeyEqual` + * function takes time (if it engenders a cache-miss for example) as we then + * compare the stored hashes before comparing the keys. When + * `tsl::rh::power_of_two_growth_policy` is used as `GrowthPolicy`, it may also + * speed-up the rehash process as we can avoid to recalculate the hash. When it + * is detected that storing the hash will not incur any memory penalty due to + * alignment (i.e. `sizeof(tsl::detail_robin_hash::bucket_entry) == sizeof(tsl::detail_robin_hash::bucket_entry)`) + * and `tsl::rh::power_of_two_growth_policy` is used, the hash will be stored + * even if `StoreHash` is false so that we can speed-up the rehash (but it will + * not be used on lookups unless `StoreHash` is true). + * + * `GrowthPolicy` defines how the map grows and consequently how a hash value is + * mapped to a bucket. By default the map uses + * `tsl::rh::power_of_two_growth_policy`. This policy keeps the number of + * buckets to a power of two and uses a mask to map the hash to a bucket instead + * of the slow modulo. Other growth policies are available and you may define + * your own growth policy, check `tsl::rh::power_of_two_growth_policy` for the + * interface. + * + * `std::pair` must be swappable. + * + * `Key` and `T` must be copy and/or move constructible. + * + * If the destructor of `Key` or `T` throws an exception, the behaviour of the + * class is undefined. + * + * Iterators invalidation: + * - clear, operator=, reserve, rehash: always invalidate the iterators. + * - insert, emplace, emplace_hint, operator[]: if there is an effective + * insert, invalidate the iterators. + * - erase: always invalidate the iterators. + */ +template , + class KeyEqual = std::equal_to, + class Allocator = std::allocator>, + bool StoreHash = false, + class GrowthPolicy = tsl::rh::power_of_two_growth_policy<2>> +class robin_map { + private: + template + using has_is_transparent = tsl::detail_robin_hash::has_is_transparent; + + class KeySelect { + public: + using key_type = Key; + + const key_type& operator()( + const std::pair& key_value) const noexcept { + return key_value.first; + } + + key_type& operator()(std::pair& key_value) noexcept { + return key_value.first; + } + }; + + class ValueSelect { + public: + using value_type = T; + + const value_type& operator()( + const std::pair& key_value) const noexcept { + return key_value.second; + } + + value_type& operator()(std::pair& key_value) noexcept { + return key_value.second; + } + }; + + using ht = detail_robin_hash::robin_hash, KeySelect, + ValueSelect, Hash, KeyEqual, + Allocator, StoreHash, GrowthPolicy>; + + public: + using key_type = typename ht::key_type; + using mapped_type = T; + using value_type = typename ht::value_type; + using size_type = typename ht::size_type; + using difference_type = typename ht::difference_type; + using hasher = typename ht::hasher; + using key_equal = typename ht::key_equal; + using allocator_type = typename ht::allocator_type; + using reference = typename ht::reference; + using const_reference = typename ht::const_reference; + using pointer = typename ht::pointer; + using const_pointer = typename ht::const_pointer; + using iterator = typename ht::iterator; + using const_iterator = typename ht::const_iterator; + + public: + /* + * Constructors + */ + robin_map() : robin_map(ht::DEFAULT_INIT_BUCKETS_SIZE) {} + + explicit robin_map(size_type bucket_count, const Hash& hash = Hash(), + const KeyEqual& equal = KeyEqual(), + const Allocator& alloc = Allocator()) + : m_ht(bucket_count, hash, equal, alloc) {} + + robin_map(size_type bucket_count, const Allocator& alloc) + : robin_map(bucket_count, Hash(), KeyEqual(), alloc) {} + + robin_map(size_type bucket_count, const Hash& hash, const Allocator& alloc) + : robin_map(bucket_count, hash, KeyEqual(), alloc) {} + + explicit robin_map(const Allocator& alloc) + : robin_map(ht::DEFAULT_INIT_BUCKETS_SIZE, alloc) {} + + template + robin_map(InputIt first, InputIt last, + size_type bucket_count = ht::DEFAULT_INIT_BUCKETS_SIZE, + const Hash& hash = Hash(), const KeyEqual& equal = KeyEqual(), + const Allocator& alloc = Allocator()) + : robin_map(bucket_count, hash, equal, alloc) { + insert(first, last); + } + + template + robin_map(InputIt first, InputIt last, size_type bucket_count, + const Allocator& alloc) + : robin_map(first, last, bucket_count, Hash(), KeyEqual(), alloc) {} + + template + robin_map(InputIt first, InputIt last, size_type bucket_count, + const Hash& hash, const Allocator& alloc) + : robin_map(first, last, bucket_count, hash, KeyEqual(), alloc) {} + + robin_map(std::initializer_list init, + size_type bucket_count = ht::DEFAULT_INIT_BUCKETS_SIZE, + const Hash& hash = Hash(), const KeyEqual& equal = KeyEqual(), + const Allocator& alloc = Allocator()) + : robin_map(init.begin(), init.end(), bucket_count, hash, equal, alloc) {} + + robin_map(std::initializer_list init, size_type bucket_count, + const Allocator& alloc) + : robin_map(init.begin(), init.end(), bucket_count, Hash(), KeyEqual(), + alloc) {} + + robin_map(std::initializer_list init, size_type bucket_count, + const Hash& hash, const Allocator& alloc) + : robin_map(init.begin(), init.end(), bucket_count, hash, KeyEqual(), + alloc) {} + + robin_map& operator=(std::initializer_list ilist) { + m_ht.clear(); + + m_ht.reserve(ilist.size()); + m_ht.insert(ilist.begin(), ilist.end()); + + return *this; + } + + allocator_type get_allocator() const { return m_ht.get_allocator(); } + + /* + * Iterators + */ + iterator begin() noexcept { return m_ht.begin(); } + const_iterator begin() const noexcept { return m_ht.begin(); } + const_iterator cbegin() const noexcept { return m_ht.cbegin(); } + + iterator end() noexcept { return m_ht.end(); } + const_iterator end() const noexcept { return m_ht.end(); } + const_iterator cend() const noexcept { return m_ht.cend(); } + + /* + * Capacity + */ + bool empty() const noexcept { return m_ht.empty(); } + size_type size() const noexcept { return m_ht.size(); } + size_type max_size() const noexcept { return m_ht.max_size(); } + + /* + * Modifiers + */ + void clear() noexcept { m_ht.clear(); } + + std::pair insert(const value_type& value) { + return m_ht.insert(value); + } + + template ::value>::type* = nullptr> + std::pair insert(P&& value) { + return m_ht.emplace(std::forward

(value)); + } + + std::pair insert(value_type&& value) { + return m_ht.insert(std::move(value)); + } + + iterator insert(const_iterator hint, const value_type& value) { + return m_ht.insert_hint(hint, value); + } + + template ::value>::type* = nullptr> + iterator insert(const_iterator hint, P&& value) { + return m_ht.emplace_hint(hint, std::forward

(value)); + } + + iterator insert(const_iterator hint, value_type&& value) { + return m_ht.insert_hint(hint, std::move(value)); + } + + template + void insert(InputIt first, InputIt last) { + m_ht.insert(first, last); + } + + void insert(std::initializer_list ilist) { + m_ht.insert(ilist.begin(), ilist.end()); + } + + template + std::pair insert_or_assign(const key_type& k, M&& obj) { + return m_ht.insert_or_assign(k, std::forward(obj)); + } + + template + std::pair insert_or_assign(key_type&& k, M&& obj) { + return m_ht.insert_or_assign(std::move(k), std::forward(obj)); + } + + template + iterator insert_or_assign(const_iterator hint, const key_type& k, M&& obj) { + return m_ht.insert_or_assign(hint, k, std::forward(obj)); + } + + template + iterator insert_or_assign(const_iterator hint, key_type&& k, M&& obj) { + return m_ht.insert_or_assign(hint, std::move(k), std::forward(obj)); + } + + /** + * Due to the way elements are stored, emplace will need to move or copy the + * key-value once. The method is equivalent to + * insert(value_type(std::forward(args)...)); + * + * Mainly here for compatibility with the std::unordered_map interface. + */ + template + std::pair emplace(Args&&... args) { + return m_ht.emplace(std::forward(args)...); + } + + /** + * Due to the way elements are stored, emplace_hint will need to move or copy + * the key-value once. The method is equivalent to insert(hint, + * value_type(std::forward(args)...)); + * + * Mainly here for compatibility with the std::unordered_map interface. + */ + template + iterator emplace_hint(const_iterator hint, Args&&... args) { + return m_ht.emplace_hint(hint, std::forward(args)...); + } + + template + std::pair try_emplace(const key_type& k, Args&&... args) { + return m_ht.try_emplace(k, std::forward(args)...); + } + + template + std::pair try_emplace(key_type&& k, Args&&... args) { + return m_ht.try_emplace(std::move(k), std::forward(args)...); + } + + template + iterator try_emplace(const_iterator hint, const key_type& k, Args&&... args) { + return m_ht.try_emplace_hint(hint, k, std::forward(args)...); + } + + template + iterator try_emplace(const_iterator hint, key_type&& k, Args&&... args) { + return m_ht.try_emplace_hint(hint, std::move(k), + std::forward(args)...); + } + + iterator erase(iterator pos) { return m_ht.erase(pos); } + iterator erase(const_iterator pos) { return m_ht.erase(pos); } + iterator erase(const_iterator first, const_iterator last) { + return m_ht.erase(first, last); + } + size_type erase(const key_type& key) { return m_ht.erase(key); } + + /** + * Use the hash value 'precalculated_hash' instead of hashing the key. The + * hash value should be the same as hash_function()(key). Useful to speed-up + * the lookup to the value if you already have the hash. + */ + size_type erase(const key_type& key, std::size_t precalculated_hash) { + return m_ht.erase(key, precalculated_hash); + } + + /** + * This overload only participates in the overload resolution if the typedef + * KeyEqual::is_transparent exists. If so, K must be hashable and comparable + * to Key. + */ + template < + class K, class KE = KeyEqual, + typename std::enable_if::value>::type* = nullptr> + size_type erase(const K& key) { + return m_ht.erase(key); + } + + /** + * @copydoc erase(const K& key) + * + * Use the hash value 'precalculated_hash' instead of hashing the key. The + * hash value should be the same as hash_function()(key). Useful to speed-up + * the lookup to the value if you already have the hash. + */ + template < + class K, class KE = KeyEqual, + typename std::enable_if::value>::type* = nullptr> + size_type erase(const K& key, std::size_t precalculated_hash) { + return m_ht.erase(key, precalculated_hash); + } + + void swap(robin_map& other) { other.m_ht.swap(m_ht); } + + /* + * Lookup + */ + T& at(const Key& key) { return m_ht.at(key); } + + /** + * Use the hash value 'precalculated_hash' instead of hashing the key. The + * hash value should be the same as hash_function()(key). Useful to speed-up + * the lookup if you already have the hash. + */ + T& at(const Key& key, std::size_t precalculated_hash) { + return m_ht.at(key, precalculated_hash); + } + + const T& at(const Key& key) const { return m_ht.at(key); } + + /** + * @copydoc at(const Key& key, std::size_t precalculated_hash) + */ + const T& at(const Key& key, std::size_t precalculated_hash) const { + return m_ht.at(key, precalculated_hash); + } + + /** + * This overload only participates in the overload resolution if the typedef + * KeyEqual::is_transparent exists. If so, K must be hashable and comparable + * to Key. + */ + template < + class K, class KE = KeyEqual, + typename std::enable_if::value>::type* = nullptr> + T& at(const K& key) { + return m_ht.at(key); + } + + /** + * @copydoc at(const K& key) + * + * Use the hash value 'precalculated_hash' instead of hashing the key. The + * hash value should be the same as hash_function()(key). Useful to speed-up + * the lookup if you already have the hash. + */ + template < + class K, class KE = KeyEqual, + typename std::enable_if::value>::type* = nullptr> + T& at(const K& key, std::size_t precalculated_hash) { + return m_ht.at(key, precalculated_hash); + } + + /** + * @copydoc at(const K& key) + */ + template < + class K, class KE = KeyEqual, + typename std::enable_if::value>::type* = nullptr> + const T& at(const K& key) const { + return m_ht.at(key); + } + + /** + * @copydoc at(const K& key, std::size_t precalculated_hash) + */ + template < + class K, class KE = KeyEqual, + typename std::enable_if::value>::type* = nullptr> + const T& at(const K& key, std::size_t precalculated_hash) const { + return m_ht.at(key, precalculated_hash); + } + + T& operator[](const Key& key) { return m_ht[key]; } + T& operator[](Key&& key) { return m_ht[std::move(key)]; } + + size_type count(const Key& key) const { return m_ht.count(key); } + + /** + * Use the hash value 'precalculated_hash' instead of hashing the key. The + * hash value should be the same as hash_function()(key). Useful to speed-up + * the lookup if you already have the hash. + */ + size_type count(const Key& key, std::size_t precalculated_hash) const { + return m_ht.count(key, precalculated_hash); + } + + /** + * This overload only participates in the overload resolution if the typedef + * KeyEqual::is_transparent exists. If so, K must be hashable and comparable + * to Key. + */ + template < + class K, class KE = KeyEqual, + typename std::enable_if::value>::type* = nullptr> + size_type count(const K& key) const { + return m_ht.count(key); + } + + /** + * @copydoc count(const K& key) const + * + * Use the hash value 'precalculated_hash' instead of hashing the key. The + * hash value should be the same as hash_function()(key). Useful to speed-up + * the lookup if you already have the hash. + */ + template < + class K, class KE = KeyEqual, + typename std::enable_if::value>::type* = nullptr> + size_type count(const K& key, std::size_t precalculated_hash) const { + return m_ht.count(key, precalculated_hash); + } + + iterator find(const Key& key) { return m_ht.find(key); } + + /** + * Use the hash value 'precalculated_hash' instead of hashing the key. The + * hash value should be the same as hash_function()(key). Useful to speed-up + * the lookup if you already have the hash. + */ + iterator find(const Key& key, std::size_t precalculated_hash) { + return m_ht.find(key, precalculated_hash); + } + + const_iterator find(const Key& key) const { return m_ht.find(key); } + + /** + * @copydoc find(const Key& key, std::size_t precalculated_hash) + */ + const_iterator find(const Key& key, std::size_t precalculated_hash) const { + return m_ht.find(key, precalculated_hash); + } + + /** + * This overload only participates in the overload resolution if the typedef + * KeyEqual::is_transparent exists. If so, K must be hashable and comparable + * to Key. + */ + template < + class K, class KE = KeyEqual, + typename std::enable_if::value>::type* = nullptr> + iterator find(const K& key) { + return m_ht.find(key); + } + + /** + * @copydoc find(const K& key) + * + * Use the hash value 'precalculated_hash' instead of hashing the key. The + * hash value should be the same as hash_function()(key). Useful to speed-up + * the lookup if you already have the hash. + */ + template < + class K, class KE = KeyEqual, + typename std::enable_if::value>::type* = nullptr> + iterator find(const K& key, std::size_t precalculated_hash) { + return m_ht.find(key, precalculated_hash); + } + + /** + * @copydoc find(const K& key) + */ + template < + class K, class KE = KeyEqual, + typename std::enable_if::value>::type* = nullptr> + const_iterator find(const K& key) const { + return m_ht.find(key); + } + + /** + * @copydoc find(const K& key) + * + * Use the hash value 'precalculated_hash' instead of hashing the key. The + * hash value should be the same as hash_function()(key). Useful to speed-up + * the lookup if you already have the hash. + */ + template < + class K, class KE = KeyEqual, + typename std::enable_if::value>::type* = nullptr> + const_iterator find(const K& key, std::size_t precalculated_hash) const { + return m_ht.find(key, precalculated_hash); + } + + bool contains(const Key& key) const { return m_ht.contains(key); } + + /** + * Use the hash value 'precalculated_hash' instead of hashing the key. The + * hash value should be the same as hash_function()(key). Useful to speed-up + * the lookup if you already have the hash. + */ + bool contains(const Key& key, std::size_t precalculated_hash) const { + return m_ht.contains(key, precalculated_hash); + } + + /** + * This overload only participates in the overload resolution if the typedef + * KeyEqual::is_transparent exists. If so, K must be hashable and comparable + * to Key. + */ + template < + class K, class KE = KeyEqual, + typename std::enable_if::value>::type* = nullptr> + bool contains(const K& key) const { + return m_ht.contains(key); + } + + /** + * @copydoc contains(const K& key) const + * + * Use the hash value 'precalculated_hash' instead of hashing the key. The + * hash value should be the same as hash_function()(key). Useful to speed-up + * the lookup if you already have the hash. + */ + template < + class K, class KE = KeyEqual, + typename std::enable_if::value>::type* = nullptr> + bool contains(const K& key, std::size_t precalculated_hash) const { + return m_ht.contains(key, precalculated_hash); + } + + std::pair equal_range(const Key& key) { + return m_ht.equal_range(key); + } + + /** + * Use the hash value 'precalculated_hash' instead of hashing the key. The + * hash value should be the same as hash_function()(key). Useful to speed-up + * the lookup if you already have the hash. + */ + std::pair equal_range(const Key& key, + std::size_t precalculated_hash) { + return m_ht.equal_range(key, precalculated_hash); + } + + std::pair equal_range(const Key& key) const { + return m_ht.equal_range(key); + } + + /** + * @copydoc equal_range(const Key& key, std::size_t precalculated_hash) + */ + std::pair equal_range( + const Key& key, std::size_t precalculated_hash) const { + return m_ht.equal_range(key, precalculated_hash); + } + + /** + * This overload only participates in the overload resolution if the typedef + * KeyEqual::is_transparent exists. If so, K must be hashable and comparable + * to Key. + */ + template < + class K, class KE = KeyEqual, + typename std::enable_if::value>::type* = nullptr> + std::pair equal_range(const K& key) { + return m_ht.equal_range(key); + } + + /** + * @copydoc equal_range(const K& key) + * + * Use the hash value 'precalculated_hash' instead of hashing the key. The + * hash value should be the same as hash_function()(key). Useful to speed-up + * the lookup if you already have the hash. + */ + template < + class K, class KE = KeyEqual, + typename std::enable_if::value>::type* = nullptr> + std::pair equal_range(const K& key, + std::size_t precalculated_hash) { + return m_ht.equal_range(key, precalculated_hash); + } + + /** + * @copydoc equal_range(const K& key) + */ + template < + class K, class KE = KeyEqual, + typename std::enable_if::value>::type* = nullptr> + std::pair equal_range(const K& key) const { + return m_ht.equal_range(key); + } + + /** + * @copydoc equal_range(const K& key, std::size_t precalculated_hash) + */ + template < + class K, class KE = KeyEqual, + typename std::enable_if::value>::type* = nullptr> + std::pair equal_range( + const K& key, std::size_t precalculated_hash) const { + return m_ht.equal_range(key, precalculated_hash); + } + + /* + * Bucket interface + */ + size_type bucket_count() const { return m_ht.bucket_count(); } + size_type max_bucket_count() const { return m_ht.max_bucket_count(); } + + /* + * Hash policy + */ + float load_factor() const { return m_ht.load_factor(); } + + float min_load_factor() const { return m_ht.min_load_factor(); } + float max_load_factor() const { return m_ht.max_load_factor(); } + + /** + * Set the `min_load_factor` to `ml`. When the `load_factor` of the map goes + * below `min_load_factor` after some erase operations, the map will be + * shrunk when an insertion occurs. The erase method itself never shrinks + * the map. + * + * The default value of `min_load_factor` is 0.0f, the map never shrinks by + * default. + */ + void min_load_factor(float ml) { m_ht.min_load_factor(ml); } + void max_load_factor(float ml) { m_ht.max_load_factor(ml); } + + void rehash(size_type count_) { m_ht.rehash(count_); } + void reserve(size_type count_) { m_ht.reserve(count_); } + + /* + * Observers + */ + hasher hash_function() const { return m_ht.hash_function(); } + key_equal key_eq() const { return m_ht.key_eq(); } + + /* + * Other + */ + + /** + * Convert a const_iterator to an iterator. + */ + iterator mutable_iterator(const_iterator pos) { + return m_ht.mutable_iterator(pos); + } + + /** + * Serialize the map through the `serializer` parameter. + * + * The `serializer` parameter must be a function object that supports the + * following call: + * - `template void operator()(const U& value);` where the types + * `std::int16_t`, `std::uint32_t`, `std::uint64_t`, `float` and + * `std::pair` must be supported for U. + * + * The implementation leaves binary compatibility (endianness, IEEE 754 for + * floats, ...) of the types it serializes in the hands of the `Serializer` + * function object if compatibility is required. + */ + template + void serialize(Serializer& serializer) const { + m_ht.serialize(serializer); + } + + /** + * Deserialize a previously serialized map through the `deserializer` + * parameter. + * + * The `deserializer` parameter must be a function object that supports the + * following call: + * - `template U operator()();` where the types `std::int16_t`, + * `std::uint32_t`, `std::uint64_t`, `float` and `std::pair` must be + * supported for U. + * + * If the deserialized hash map type is hash compatible with the serialized + * map, the deserialization process can be sped up by setting + * `hash_compatible` to true. To be hash compatible, the Hash, KeyEqual and + * GrowthPolicy must behave the same way than the ones used on the serialized + * map and the StoreHash must have the same value. The `std::size_t` must also + * be of the same size as the one on the platform used to serialize the map. + * If these criteria are not met, the behaviour is undefined with + * `hash_compatible` sets to true. + * + * The behaviour is undefined if the type `Key` and `T` of the `robin_map` are + * not the same as the types used during serialization. + * + * The implementation leaves binary compatibility (endianness, IEEE 754 for + * floats, size of int, ...) of the types it deserializes in the hands of the + * `Deserializer` function object if compatibility is required. + */ + template + static robin_map deserialize(Deserializer& deserializer, + bool hash_compatible = false) { + robin_map map(0); + map.m_ht.deserialize(deserializer, hash_compatible); + + return map; + } + + friend bool operator==(const robin_map& lhs, const robin_map& rhs) { + if (lhs.size() != rhs.size()) { + return false; + } + + for (const auto& element_lhs : lhs) { + const auto it_element_rhs = rhs.find(element_lhs.first); + if (it_element_rhs == rhs.cend() || + element_lhs.second != it_element_rhs->second) { + return false; + } + } + + return true; + } + + friend bool operator!=(const robin_map& lhs, const robin_map& rhs) { + return !operator==(lhs, rhs); + } + + friend void swap(robin_map& lhs, robin_map& rhs) { lhs.swap(rhs); } + + private: + ht m_ht; +}; + +/** + * Same as `tsl::robin_map`. + */ +template , + class KeyEqual = std::equal_to, + class Allocator = std::allocator>, + bool StoreHash = false> +using robin_pg_map = robin_map; + +} // end namespace tsl + +#endif diff --git a/compiler/native/nerdcore/src/tsl/robin_set.h b/compiler/native/nerdcore/src/tsl/robin_set.h new file mode 100644 index 000000000..54789509c --- /dev/null +++ b/compiler/native/nerdcore/src/tsl/robin_set.h @@ -0,0 +1,660 @@ +/** + * MIT License + * + * Copyright (c) 2017 Thibaut Goetghebuer-Planchon + * + * 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. + */ +#ifndef TSL_ROBIN_SET_H +#define TSL_ROBIN_SET_H + +#include +#include +#include +#include +#include +#include + +#include "robin_hash.h" + +namespace tsl { + +/** + * Implementation of a hash set using open-addressing and the robin hood hashing + * algorithm with backward shift deletion. + * + * For operations modifying the hash set (insert, erase, rehash, ...), the + * strong exception guarantee is only guaranteed when the expression + * `std::is_nothrow_swappable::value && + * std::is_nothrow_move_constructible::value` is true, otherwise if an + * exception is thrown during the swap or the move, the hash set may end up in a + * undefined state. Per the standard a `Key` with a noexcept copy constructor + * and no move constructor also satisfies the + * `std::is_nothrow_move_constructible::value` criterion (and will thus + * guarantee the strong exception for the set). + * + * When `StoreHash` is true, 32 bits of the hash are stored alongside the + * values. It can improve the performance during lookups if the `KeyEqual` + * function takes time (or engenders a cache-miss for example) as we then + * compare the stored hashes before comparing the keys. When + * `tsl::rh::power_of_two_growth_policy` is used as `GrowthPolicy`, it may also + * speed-up the rehash process as we can avoid to recalculate the hash. When it + * is detected that storing the hash will not incur any memory penalty due to + * alignment (i.e. `sizeof(tsl::detail_robin_hash::bucket_entry) == sizeof(tsl::detail_robin_hash::bucket_entry)`) + * and `tsl::rh::power_of_two_growth_policy` is used, the hash will be stored + * even if `StoreHash` is false so that we can speed-up the rehash (but it will + * not be used on lookups unless `StoreHash` is true). + * + * `GrowthPolicy` defines how the set grows and consequently how a hash value is + * mapped to a bucket. By default the set uses + * `tsl::rh::power_of_two_growth_policy`. This policy keeps the number of + * buckets to a power of two and uses a mask to set the hash to a bucket instead + * of the slow modulo. Other growth policies are available and you may define + * your own growth policy, check `tsl::rh::power_of_two_growth_policy` for the + * interface. + * + * `Key` must be swappable. + * + * `Key` must be copy and/or move constructible. + * + * If the destructor of `Key` throws an exception, the behaviour of the class is + * undefined. + * + * Iterators invalidation: + * - clear, operator=, reserve, rehash: always invalidate the iterators. + * - insert, emplace, emplace_hint, operator[]: if there is an effective + * insert, invalidate the iterators. + * - erase: always invalidate the iterators. + */ +template , + class KeyEqual = std::equal_to, + class Allocator = std::allocator, bool StoreHash = false, + class GrowthPolicy = tsl::rh::power_of_two_growth_policy<2>> +class robin_set { + private: + template + using has_is_transparent = tsl::detail_robin_hash::has_is_transparent; + + class KeySelect { + public: + using key_type = Key; + + const key_type& operator()(const Key& key) const noexcept { return key; } + + key_type& operator()(Key& key) noexcept { return key; } + }; + + using ht = detail_robin_hash::robin_hash; + + public: + using key_type = typename ht::key_type; + using value_type = typename ht::value_type; + using size_type = typename ht::size_type; + using difference_type = typename ht::difference_type; + using hasher = typename ht::hasher; + using key_equal = typename ht::key_equal; + using allocator_type = typename ht::allocator_type; + using reference = typename ht::reference; + using const_reference = typename ht::const_reference; + using pointer = typename ht::pointer; + using const_pointer = typename ht::const_pointer; + using iterator = typename ht::iterator; + using const_iterator = typename ht::const_iterator; + + /* + * Constructors + */ + robin_set() : robin_set(ht::DEFAULT_INIT_BUCKETS_SIZE) {} + + explicit robin_set(size_type bucket_count, const Hash& hash = Hash(), + const KeyEqual& equal = KeyEqual(), + const Allocator& alloc = Allocator()) + : m_ht(bucket_count, hash, equal, alloc) {} + + robin_set(size_type bucket_count, const Allocator& alloc) + : robin_set(bucket_count, Hash(), KeyEqual(), alloc) {} + + robin_set(size_type bucket_count, const Hash& hash, const Allocator& alloc) + : robin_set(bucket_count, hash, KeyEqual(), alloc) {} + + explicit robin_set(const Allocator& alloc) + : robin_set(ht::DEFAULT_INIT_BUCKETS_SIZE, alloc) {} + + template + robin_set(InputIt first, InputIt last, + size_type bucket_count = ht::DEFAULT_INIT_BUCKETS_SIZE, + const Hash& hash = Hash(), const KeyEqual& equal = KeyEqual(), + const Allocator& alloc = Allocator()) + : robin_set(bucket_count, hash, equal, alloc) { + insert(first, last); + } + + template + robin_set(InputIt first, InputIt last, size_type bucket_count, + const Allocator& alloc) + : robin_set(first, last, bucket_count, Hash(), KeyEqual(), alloc) {} + + template + robin_set(InputIt first, InputIt last, size_type bucket_count, + const Hash& hash, const Allocator& alloc) + : robin_set(first, last, bucket_count, hash, KeyEqual(), alloc) {} + + robin_set(std::initializer_list init, + size_type bucket_count = ht::DEFAULT_INIT_BUCKETS_SIZE, + const Hash& hash = Hash(), const KeyEqual& equal = KeyEqual(), + const Allocator& alloc = Allocator()) + : robin_set(init.begin(), init.end(), bucket_count, hash, equal, alloc) {} + + robin_set(std::initializer_list init, size_type bucket_count, + const Allocator& alloc) + : robin_set(init.begin(), init.end(), bucket_count, Hash(), KeyEqual(), + alloc) {} + + robin_set(std::initializer_list init, size_type bucket_count, + const Hash& hash, const Allocator& alloc) + : robin_set(init.begin(), init.end(), bucket_count, hash, KeyEqual(), + alloc) {} + + robin_set& operator=(std::initializer_list ilist) { + m_ht.clear(); + + m_ht.reserve(ilist.size()); + m_ht.insert(ilist.begin(), ilist.end()); + + return *this; + } + + allocator_type get_allocator() const { return m_ht.get_allocator(); } + + /* + * Iterators + */ + iterator begin() noexcept { return m_ht.begin(); } + const_iterator begin() const noexcept { return m_ht.begin(); } + const_iterator cbegin() const noexcept { return m_ht.cbegin(); } + + iterator end() noexcept { return m_ht.end(); } + const_iterator end() const noexcept { return m_ht.end(); } + const_iterator cend() const noexcept { return m_ht.cend(); } + + /* + * Capacity + */ + bool empty() const noexcept { return m_ht.empty(); } + size_type size() const noexcept { return m_ht.size(); } + size_type max_size() const noexcept { return m_ht.max_size(); } + + /* + * Modifiers + */ + void clear() noexcept { m_ht.clear(); } + + std::pair insert(const value_type& value) { + return m_ht.insert(value); + } + + std::pair insert(value_type&& value) { + return m_ht.insert(std::move(value)); + } + + iterator insert(const_iterator hint, const value_type& value) { + return m_ht.insert_hint(hint, value); + } + + iterator insert(const_iterator hint, value_type&& value) { + return m_ht.insert_hint(hint, std::move(value)); + } + + template + void insert(InputIt first, InputIt last) { + m_ht.insert(first, last); + } + + void insert(std::initializer_list ilist) { + m_ht.insert(ilist.begin(), ilist.end()); + } + + /** + * Due to the way elements are stored, emplace will need to move or copy the + * key-value once. The method is equivalent to + * insert(value_type(std::forward(args)...)); + * + * Mainly here for compatibility with the std::unordered_map interface. + */ + template + std::pair emplace(Args&&... args) { + return m_ht.emplace(std::forward(args)...); + } + + /** + * Due to the way elements are stored, emplace_hint will need to move or copy + * the key-value once. The method is equivalent to insert(hint, + * value_type(std::forward(args)...)); + * + * Mainly here for compatibility with the std::unordered_map interface. + */ + template + iterator emplace_hint(const_iterator hint, Args&&... args) { + return m_ht.emplace_hint(hint, std::forward(args)...); + } + + iterator erase(iterator pos) { return m_ht.erase(pos); } + iterator erase(const_iterator pos) { return m_ht.erase(pos); } + iterator erase(const_iterator first, const_iterator last) { + return m_ht.erase(first, last); + } + size_type erase(const key_type& key) { return m_ht.erase(key); } + + /** + * Use the hash value 'precalculated_hash' instead of hashing the key. The + * hash value should be the same as hash_function()(key). Useful to speed-up + * the lookup to the value if you already have the hash. + */ + size_type erase(const key_type& key, std::size_t precalculated_hash) { + return m_ht.erase(key, precalculated_hash); + } + + /** + * This overload only participates in the overload resolution if the typedef + * KeyEqual::is_transparent exists. If so, K must be hashable and comparable + * to Key. + */ + template < + class K, class KE = KeyEqual, + typename std::enable_if::value>::type* = nullptr> + size_type erase(const K& key) { + return m_ht.erase(key); + } + + /** + * @copydoc erase(const K& key) + * + * Use the hash value 'precalculated_hash' instead of hashing the key. The + * hash value should be the same as hash_function()(key). Useful to speed-up + * the lookup to the value if you already have the hash. + */ + template < + class K, class KE = KeyEqual, + typename std::enable_if::value>::type* = nullptr> + size_type erase(const K& key, std::size_t precalculated_hash) { + return m_ht.erase(key, precalculated_hash); + } + + void swap(robin_set& other) { other.m_ht.swap(m_ht); } + + /* + * Lookup + */ + size_type count(const Key& key) const { return m_ht.count(key); } + + /** + * Use the hash value 'precalculated_hash' instead of hashing the key. The + * hash value should be the same as hash_function()(key). Useful to speed-up + * the lookup if you already have the hash. + */ + size_type count(const Key& key, std::size_t precalculated_hash) const { + return m_ht.count(key, precalculated_hash); + } + + /** + * This overload only participates in the overload resolution if the typedef + * KeyEqual::is_transparent exists. If so, K must be hashable and comparable + * to Key. + */ + template < + class K, class KE = KeyEqual, + typename std::enable_if::value>::type* = nullptr> + size_type count(const K& key) const { + return m_ht.count(key); + } + + /** + * @copydoc count(const K& key) const + * + * Use the hash value 'precalculated_hash' instead of hashing the key. The + * hash value should be the same as hash_function()(key). Useful to speed-up + * the lookup if you already have the hash. + */ + template < + class K, class KE = KeyEqual, + typename std::enable_if::value>::type* = nullptr> + size_type count(const K& key, std::size_t precalculated_hash) const { + return m_ht.count(key, precalculated_hash); + } + + iterator find(const Key& key) { return m_ht.find(key); } + + /** + * Use the hash value 'precalculated_hash' instead of hashing the key. The + * hash value should be the same as hash_function()(key). Useful to speed-up + * the lookup if you already have the hash. + */ + iterator find(const Key& key, std::size_t precalculated_hash) { + return m_ht.find(key, precalculated_hash); + } + + const_iterator find(const Key& key) const { return m_ht.find(key); } + + /** + * @copydoc find(const Key& key, std::size_t precalculated_hash) + */ + const_iterator find(const Key& key, std::size_t precalculated_hash) const { + return m_ht.find(key, precalculated_hash); + } + + /** + * This overload only participates in the overload resolution if the typedef + * KeyEqual::is_transparent exists. If so, K must be hashable and comparable + * to Key. + */ + template < + class K, class KE = KeyEqual, + typename std::enable_if::value>::type* = nullptr> + iterator find(const K& key) { + return m_ht.find(key); + } + + /** + * @copydoc find(const K& key) + * + * Use the hash value 'precalculated_hash' instead of hashing the key. The + * hash value should be the same as hash_function()(key). Useful to speed-up + * the lookup if you already have the hash. + */ + template < + class K, class KE = KeyEqual, + typename std::enable_if::value>::type* = nullptr> + iterator find(const K& key, std::size_t precalculated_hash) { + return m_ht.find(key, precalculated_hash); + } + + /** + * @copydoc find(const K& key) + */ + template < + class K, class KE = KeyEqual, + typename std::enable_if::value>::type* = nullptr> + const_iterator find(const K& key) const { + return m_ht.find(key); + } + + /** + * @copydoc find(const K& key) + * + * Use the hash value 'precalculated_hash' instead of hashing the key. The + * hash value should be the same as hash_function()(key). Useful to speed-up + * the lookup if you already have the hash. + */ + template < + class K, class KE = KeyEqual, + typename std::enable_if::value>::type* = nullptr> + const_iterator find(const K& key, std::size_t precalculated_hash) const { + return m_ht.find(key, precalculated_hash); + } + + bool contains(const Key& key) const { return m_ht.contains(key); } + + /** + * Use the hash value 'precalculated_hash' instead of hashing the key. The + * hash value should be the same as hash_function()(key). Useful to speed-up + * the lookup if you already have the hash. + */ + bool contains(const Key& key, std::size_t precalculated_hash) const { + return m_ht.contains(key, precalculated_hash); + } + + /** + * This overload only participates in the overload resolution if the typedef + * KeyEqual::is_transparent exists. If so, K must be hashable and comparable + * to Key. + */ + template < + class K, class KE = KeyEqual, + typename std::enable_if::value>::type* = nullptr> + bool contains(const K& key) const { + return m_ht.contains(key); + } + + /** + * @copydoc contains(const K& key) const + * + * Use the hash value 'precalculated_hash' instead of hashing the key. The + * hash value should be the same as hash_function()(key). Useful to speed-up + * the lookup if you already have the hash. + */ + template < + class K, class KE = KeyEqual, + typename std::enable_if::value>::type* = nullptr> + bool contains(const K& key, std::size_t precalculated_hash) const { + return m_ht.contains(key, precalculated_hash); + } + + std::pair equal_range(const Key& key) { + return m_ht.equal_range(key); + } + + /** + * Use the hash value 'precalculated_hash' instead of hashing the key. The + * hash value should be the same as hash_function()(key). Useful to speed-up + * the lookup if you already have the hash. + */ + std::pair equal_range(const Key& key, + std::size_t precalculated_hash) { + return m_ht.equal_range(key, precalculated_hash); + } + + std::pair equal_range(const Key& key) const { + return m_ht.equal_range(key); + } + + /** + * @copydoc equal_range(const Key& key, std::size_t precalculated_hash) + */ + std::pair equal_range( + const Key& key, std::size_t precalculated_hash) const { + return m_ht.equal_range(key, precalculated_hash); + } + + /** + * This overload only participates in the overload resolution if the typedef + * KeyEqual::is_transparent exists. If so, K must be hashable and comparable + * to Key. + */ + template < + class K, class KE = KeyEqual, + typename std::enable_if::value>::type* = nullptr> + std::pair equal_range(const K& key) { + return m_ht.equal_range(key); + } + + /** + * @copydoc equal_range(const K& key) + * + * Use the hash value 'precalculated_hash' instead of hashing the key. The + * hash value should be the same as hash_function()(key). Useful to speed-up + * the lookup if you already have the hash. + */ + template < + class K, class KE = KeyEqual, + typename std::enable_if::value>::type* = nullptr> + std::pair equal_range(const K& key, + std::size_t precalculated_hash) { + return m_ht.equal_range(key, precalculated_hash); + } + + /** + * @copydoc equal_range(const K& key) + */ + template < + class K, class KE = KeyEqual, + typename std::enable_if::value>::type* = nullptr> + std::pair equal_range(const K& key) const { + return m_ht.equal_range(key); + } + + /** + * @copydoc equal_range(const K& key, std::size_t precalculated_hash) + */ + template < + class K, class KE = KeyEqual, + typename std::enable_if::value>::type* = nullptr> + std::pair equal_range( + const K& key, std::size_t precalculated_hash) const { + return m_ht.equal_range(key, precalculated_hash); + } + + /* + * Bucket interface + */ + size_type bucket_count() const { return m_ht.bucket_count(); } + size_type max_bucket_count() const { return m_ht.max_bucket_count(); } + + /* + * Hash policy + */ + float load_factor() const { return m_ht.load_factor(); } + + float min_load_factor() const { return m_ht.min_load_factor(); } + float max_load_factor() const { return m_ht.max_load_factor(); } + + /** + * Set the `min_load_factor` to `ml`. When the `load_factor` of the set goes + * below `min_load_factor` after some erase operations, the set will be + * shrunk when an insertion occurs. The erase method itself never shrinks + * the set. + * + * The default value of `min_load_factor` is 0.0f, the set never shrinks by + * default. + */ + void min_load_factor(float ml) { m_ht.min_load_factor(ml); } + void max_load_factor(float ml) { m_ht.max_load_factor(ml); } + + void rehash(size_type count_) { m_ht.rehash(count_); } + void reserve(size_type count_) { m_ht.reserve(count_); } + + /* + * Observers + */ + hasher hash_function() const { return m_ht.hash_function(); } + key_equal key_eq() const { return m_ht.key_eq(); } + + /* + * Other + */ + + /** + * Convert a const_iterator to an iterator. + */ + iterator mutable_iterator(const_iterator pos) { + return m_ht.mutable_iterator(pos); + } + + friend bool operator==(const robin_set& lhs, const robin_set& rhs) { + if (lhs.size() != rhs.size()) { + return false; + } + + for (const auto& element_lhs : lhs) { + const auto it_element_rhs = rhs.find(element_lhs); + if (it_element_rhs == rhs.cend()) { + return false; + } + } + + return true; + } + + /** + * Serialize the set through the `serializer` parameter. + * + * The `serializer` parameter must be a function object that supports the + * following call: + * - `template void operator()(const U& value);` where the types + * `std::int16_t`, `std::uint32_t`, `std::uint64_t`, `float` and `Key` must be + * supported for U. + * + * The implementation leaves binary compatibility (endianness, IEEE 754 for + * floats, ...) of the types it serializes in the hands of the `Serializer` + * function object if compatibility is required. + */ + template + void serialize(Serializer& serializer) const { + m_ht.serialize(serializer); + } + + /** + * Deserialize a previously serialized set through the `deserializer` + * parameter. + * + * The `deserializer` parameter must be a function object that supports the + * following call: + * - `template U operator()();` where the types `std::int16_t`, + * `std::uint32_t`, `std::uint64_t`, `float` and `Key` must be supported for + * U. + * + * If the deserialized hash set type is hash compatible with the serialized + * set, the deserialization process can be sped up by setting + * `hash_compatible` to true. To be hash compatible, the Hash, KeyEqual and + * GrowthPolicy must behave the same way than the ones used on the serialized + * set and the StoreHash must have the same value. The `std::size_t` must also + * be of the same size as the one on the platform used to serialize the set. + * If these criteria are not met, the behaviour is undefined with + * `hash_compatible` sets to true. + * + * The behaviour is undefined if the type `Key` of the `robin_set` is not the + * same as the type used during serialization. + * + * The implementation leaves binary compatibility (endianness, IEEE 754 for + * floats, size of int, ...) of the types it deserializes in the hands of the + * `Deserializer` function object if compatibility is required. + */ + template + static robin_set deserialize(Deserializer& deserializer, + bool hash_compatible = false) { + robin_set set(0); + set.m_ht.deserialize(deserializer, hash_compatible); + + return set; + } + + friend bool operator!=(const robin_set& lhs, const robin_set& rhs) { + return !operator==(lhs, rhs); + } + + friend void swap(robin_set& lhs, robin_set& rhs) { lhs.swap(rhs); } + + private: + ht m_ht; +}; + +/** + * Same as `tsl::robin_set`. + */ +template , + class KeyEqual = std::equal_to, + class Allocator = std::allocator, bool StoreHash = false> +using robin_pg_set = robin_set; + +} // end namespace tsl + +#endif diff --git a/compiler/native/nerdcore/src/type_header.h b/compiler/native/nerdcore/src/type_header.h new file mode 100644 index 000000000..991a1fd6c --- /dev/null +++ b/compiler/native/nerdcore/src/type_header.h @@ -0,0 +1,48 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +#ifndef __NERD__OBJECT_VECTOR +#include "tsl/robin_map.h" +#endif +namespace NerdCore +{ + namespace Type + { + typedef std::vector vector_t; + typedef std::vector vector_p; + typedef std::pair pair_t; + #ifndef __NERD__OBJECT_VECTOR + typedef tsl::robin_map object_t; + #else + typedef std::vector object_t; + #endif + typedef std::function function_t; + typedef std::function clean_struct; + + #ifdef __NERD_ENV_ARDUINO + typedef std::string StringView; + #else + typedef std::string_view StringView; + #endif + } +} \ No newline at end of file diff --git a/compiler/native/nerdcore/src/values.h b/compiler/native/nerdcore/src/values.h new file mode 100644 index 000000000..270d39714 --- /dev/null +++ b/compiler/native/nerdcore/src/values.h @@ -0,0 +1,38 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +namespace NerdCore::Global +{ + using var = NerdCore::VAR; + NerdCore::VAR null = __NERD_Create_Null(); + NerdCore::VAR undefined = __NERD_Create_Null(); + NerdCore::VAR Infinity = std::numeric_limits::infinity(); + NerdCore::VAR NaN = std::numeric_limits::quiet_NaN(); + NerdCore::VAR String = __NERD_Create_Var_Unscoped_Anon( return null; ); + NerdCore::VAR Object = __NERD_Create_Var_Unscoped_Anon( return null; ); + NerdCore::VAR Array = __NERD_Create_Var_Unscoped_Anon( return new NerdCore::Class::Array(); ); + NerdCore::VAR Function = __NERD_Create_Var_Unscoped_Anon( return null; ); + NerdCore::VAR global = new NerdCore::Class::Object(); + NerdCore::VAR __NERD_THIS = global; +} + diff --git a/compiler/native/nerdcore/src/values_header.h b/compiler/native/nerdcore/src/values_header.h new file mode 100644 index 000000000..800f96a81 --- /dev/null +++ b/compiler/native/nerdcore/src/values_header.h @@ -0,0 +1,39 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +namespace NerdCore::Global +{ + using var = NerdCore::VAR; + using let = NerdCore::VAR; + extern NerdCore::VAR null; + extern NerdCore::VAR undefined; + extern NerdCore::VAR Infinity; + extern NerdCore::VAR NaN; + + extern NerdCore::VAR global; + extern NerdCore::VAR __NERD_THIS; + //extern NerdCore::VAR String; + extern NerdCore::VAR String; + extern NerdCore::VAR Object; + extern NerdCore::VAR Array; +} diff --git a/compiler/native/nerdcore/src/var.h b/compiler/native/nerdcore/src/var.h new file mode 100644 index 000000000..8f153173b --- /dev/null +++ b/compiler/native/nerdcore/src/var.h @@ -0,0 +1,720 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +namespace NerdCore +{ + + VAR::VAR() + { + type = NerdCore::Enum::Type::Null; + data.number = 0; + } + + VAR::~VAR() + { + if(type > NerdCore::Enum::Type::Number) + { + ((NerdCore::Class::Base*)data.ptr)->Delete(); + } + } + + /*** COPY ***/ + VAR::VAR(VAR const &_v) + { + type = _v.type; + if(type < NerdCore::Enum::Type::String) + { + data.number = _v.data.number; + } + else data.ptr = ((NerdCore::Class::Base*)_v.data.ptr)->Copy(); + + } + /* END COPY */ + + /*** MOVE ***/ + VAR::VAR(VAR const &&_v) + { + type = _v.type; + if(type < NerdCore::Enum::Type::String) + { + data.number = _v.data.number; + } + else if(type == NerdCore::Enum::Type::String) + { + ((NerdCore::Class::String*)_v.data.ptr)->counter++; + data.ptr = _v.data.ptr; + } + else data.ptr = ((NerdCore::Class::Base*)_v.data.ptr)->Copy(); + } + /* END MOVE */ + + /*** CONSTRUCTOR ***/ + + VAR::VAR(NerdCore::Enum::Type _type, int _value) + { + this->type = _type; + data.number = _value; + } + + VAR::VAR(NerdCore::Enum::Type _type, double _value) + { + this->type = _type; + data.number = _value; + } + + VAR::VAR(int _value) + { + this->type = NerdCore::Enum::Type::Number; + data.number = _value; + } + + VAR::VAR(double _value) + { + this->type = NerdCore::Enum::Type::Number; + data.number = _value; + } + + VAR::VAR(unsigned long _value) + { + this->type = NerdCore::Enum::Type::Number; + data.number = _value; + } + + VAR::VAR(long long _value) + { + this->type = NerdCore::Enum::Type::Number; + data.number = _value; + } + + VAR::VAR(long long unsigned int _value) + { + this->type = NerdCore::Enum::Type::Number; + data.number = _value; + } + + VAR::VAR(char *_value) + { + type = NerdCore::Enum::Type::String; + std::string s(_value); + data.ptr = new NerdCore::Class::String(_value); + } + + VAR::VAR(std::string _value) + { + type = NerdCore::Enum::Type::String; + data.ptr = new NerdCore::Class::String(_value); + } + + + VAR::VAR(const char *_value) + { + type = NerdCore::Enum::Type::String; + data.ptr = new NerdCore::Class::String(_value); + } + + VAR::VAR(std::string_view _value) + { + type = NerdCore::Enum::Type::String; + data.ptr = new NerdCore::Class::String({_value.data(), _value.size()}); + } + + VAR::VAR(NerdCore::Class::FixedArray *_value) + { + type = NerdCore::Enum::Type::FixedArray; + _value->counter++; + data.ptr = _value; + } + + VAR::VAR(NerdCore::Class::Array *_value) + { + type = NerdCore::Enum::Type::Array; + _value->counter++; + data.ptr = _value; + } + + /* + VAR::VAR(std::initializer_list l) + { + type = NerdCore::Enum::Type::Array; + NerdCore::Class::Array* _arr = new NerdCore::Class::Array(l); + _arr->counter++; + data.ptr = _arr; + } + */ + + VAR::VAR(const NerdCore::Class::Array *_value) + { + type = NerdCore::Enum::Type::Array; + data.ptr = (NerdCore::Class::Array *)_value; + ((NerdCore::Class::Array*)data.ptr)->counter++; + } + + VAR::VAR(bool _value) + { + type = NerdCore::Enum::Type::Boolean; + data.number =_value; + } + + VAR::VAR(NerdCore::Class::Function *_value) + { + type = NerdCore::Enum::Type::Function; + _value->counter++; + data.ptr = _value; + } + + VAR::VAR(NerdCore::Class::Object *_value) + { + type = NerdCore::Enum::Type::Object; + _value->counter++; + data.ptr = _value; + } + + VAR::VAR(NerdCore::Class::String *_value) + { + type = NerdCore::Enum::Type::String; + data.ptr = new NerdCore::Class::String(_value->value); + } + + VAR::VAR(NerdCore::Class::Native *_value) + { + type = NerdCore::Enum::Type::Native; + _value->counter++; + data.ptr = _value; + } + + VAR::VAR(void *_value, void* fn) + { + type = NerdCore::Enum::Type::Struct; + data.ptr = new NerdCore::Class::Struct(_value, (NerdCore::Type::clean_struct*)fn); + } + VAR::VAR(NerdCore::Enum::Type _type, void *_value) + { + type = _type; + data.ptr = new NerdCore::Class::Function(_value); + } + + /* END CALL OVERLOAD */ + + VAR & VAR::operator[] (VAR _index) + { + if(type < NerdCore::Enum::Type::String) return NerdCore::Global::null; + if(type == NerdCore::Enum::Type::Array) + { + if(_index == "length") + { + ((NerdCore::Class::Array*)data.ptr)->length = ((NerdCore::Class::Array*)data.ptr)->value.size(); + return ((NerdCore::Class::Array*)data.ptr)->length; + } + } + else if(type == NerdCore::Enum::Type::String) + { + if(_index == "length") + { + std::cout << "StrLength" << std::endl; + ((NerdCore::Class::String*)data.ptr)->length = ((NerdCore::Class::String*)data.ptr)->value.length(); + return ((NerdCore::Class::String*)data.ptr)->length; + } + } + return (*(NerdCore::Class::Base*)data.ptr)[_index]; + } + + VAR & VAR::operator[] (VAR _index) const + { + if(type < NerdCore::Enum::Type::String) return NerdCore::Global::null; + if(type == NerdCore::Enum::Type::Array) + { + if(_index == "length") + { + ((NerdCore::Class::Array*)data.ptr)->length = ((NerdCore::Class::Array*)data.ptr)->value.size(); + return ((NerdCore::Class::Array*)data.ptr)->length; + } + } + else if(type == NerdCore::Enum::Type::String) + { + if(_index == "length") + { + std::cout << "StrLength" << std::endl; + ((NerdCore::Class::String*)data.ptr)->length = ((NerdCore::Class::String*)data.ptr)->value.length(); + return ((NerdCore::Class::String*)data.ptr)->length; + } + } + return (*(NerdCore::Class::Base*)data.ptr)[_index]; + } + + VAR & VAR::operator[] (int _index) const + { + if(type < NerdCore::Enum::Type::String) return NerdCore::Global::null; + return (*(NerdCore::Class::Base*)data.ptr)[_index]; + } + + VAR & VAR::operator[] (int _index) + { + if(type < NerdCore::Enum::Type::String) return NerdCore::Global::null; + return (*(NerdCore::Class::Base*)data.ptr)[_index]; + } + + VAR & VAR::operator[] (double _index) + { + if(type < NerdCore::Enum::Type::String) return NerdCore::Global::null; + return (*(NerdCore::Class::Base*)data.ptr)[_index]; + } + + VAR & VAR::operator[] (const char* _index) + { + if(type < NerdCore::Enum::Type::String) return NerdCore::Global::null; + if(type == NerdCore::Enum::Type::Array) + { + if(strcmp(_index, "length") == 0) + { + ((NerdCore::Class::Array*)data.ptr)->length = ((NerdCore::Class::Array*)data.ptr)->value.size(); + return ((NerdCore::Class::Array*)data.ptr)->length; + } + } + else if(type == NerdCore::Enum::Type::String) + { + if(strcmp(_index, "length") == 0) + { + ((NerdCore::Class::String*)data.ptr)->length = ((NerdCore::Class::String*)data.ptr)->value.length(); + return ((NerdCore::Class::String*)data.ptr)->length; + } + } + return (*(NerdCore::Class::Base*)data.ptr)[_index]; + } + + /* END ACCESS OVERLOAD */ + + /*** END CONSTRUCTOR ***/ + + /*** OPERATOR ***/ + void VAR::operator=(const VAR &_v) + { + if(this == &_v) + { + return; + } + + if(type > NerdCore::Enum::Type::String) + { + ((NerdCore::Class::Base*)data.ptr)->Delete(); + } + + type = _v.type; + if(type < NerdCore::Enum::Type::String) + { + data.number = (double)_v; + } + else + { + data.ptr = ((NerdCore::Class::Base*)_v.data.ptr)->Copy(); + } + } + + /// Unary VAR::operators + VAR VAR::operator+() + { + if(type < NerdCore::Enum::Type::String) return data.number; + return (double)*this; + } + + VAR VAR::operator-() + { + if(type < NerdCore::Enum::Type::String) return -data.number; + return -(double)*this; + } + VAR VAR::operator!() + { + if(type < NerdCore::Enum::Type::String) return !data.number; + return !(bool)*this; + }; + + /// Logical VAR::operators + VAR VAR::operator&&(const VAR &_v1) const { return (bool)*this && (bool)_v1; } + VAR VAR::operator||(const VAR &_v1) const { return (bool)*this || (bool)_v1; } + + /// Arithmetic VAR::operators + VAR VAR::operator+(const VAR &_v1) + { + if (type < NerdCore::Enum::Type::String) + { + return data.number + _v1; + } + else if (type == NerdCore::Enum::Type::String || type == NerdCore::Enum::Type::Array || type == NerdCore::Enum::Type::Object || _v1.type == NerdCore::Enum::Type::String) + { + if(_v1.type == NerdCore::Enum::Type::Null) return ((std::string)*this) + "null"; + else return __NERD_Concat_To_Str((std::string)*this, (std::string)_v1); + } + else + { + return NerdCore::Global::NaN; + } + + } + VAR VAR::operator+(const char _v1[]) + { + return __NERD_Concat_To_Str((std::string)*this, _v1); + } + + VAR& VAR::operator+=(const VAR &_v1) + { + if(type < NerdCore::Enum::Type::String) + { + data.number += _v1; + } + else if(type == NerdCore::Enum::Type::String) + { + ((NerdCore::Class::String*)data.ptr)->value += (std::string)_v1; + } + else + { + std::string _s = (std::string)*this; + type = NerdCore::Enum::Type::String; + data.ptr = new NerdCore::Class::String(""); + ((NerdCore::Class::String*)data.ptr)->value += _s + (std::string)_v1; + + } + return *this; + } + + VAR VAR::operator-(const VAR &_v1) + { + if (type < NerdCore::Enum::Type::String ) return data.number - _v1; + else return NerdCore::Global::NaN; + } + + VAR& VAR::operator-=(const VAR &_v1) + { + if(type < NerdCore::Enum::Type::String) data.number -= _v1; + else + { + return NerdCore::Global::NaN; + } + return *this; + } + VAR VAR::operator*(const VAR &_v1) + { + if(type < NerdCore::Enum::Type::String) return data.number * _v1; + return NerdCore::Global::NaN; + } + + VAR& VAR::operator*=(const VAR &_v1) + { + if(type < NerdCore::Enum::Type::String) data.number *= _v1; + return *this; + } + VAR VAR::operator/(const VAR &_v1) + { + if (type < NerdCore::Enum::Type::String) return data.number / _v1; + return NerdCore::Global::NaN; + } + + VAR& VAR::operator/=(const VAR &_v1) + { + if(type < NerdCore::Enum::Type::String) data.number /= _v1; + return *this; + } + VAR VAR::operator%(const VAR &_v1) + { + if (type < NerdCore::Enum::Type::String && _v1.type < NerdCore::Enum::Type::String) + { + int _left = (int)_v1; + if(_left == 0) return NerdCore::Global::NaN; + return (int)data.number % _left; + } + else + { + double _left = (double)_v1; + if(_left == 0) return NerdCore::Global::NaN; + return remainder((double)*this, _left); + } + } + VAR& VAR::operator%=(const VAR &_v1) + { + if (type < NerdCore::Enum::Type::String) + { + int _left = (int)data.number; + _left %= (int)_v1; + if(_left == 0) data.number = std::numeric_limits::quiet_NaN(); + data.number = _left; + } + else + { + return NerdCore::Global::NaN; + } + return *this; + } + // TODO: "**" and "**=" VAR::operators + // var++ + /* + inline VAR& VAR::operator++(const int _v1) + { + if (type < NerdCore::Enum::Type::String) + { + data.number++; + } + return *this; + } + + // ++var + VAR& VAR::operator++() + { + if (type < NerdCore::Enum::Type::String) + { + ++data.number; + } + return *this; + } + // var-- + VAR& VAR::operator--(const int _v1) + { + if (type < NerdCore::Enum::Type::String) + { + data.number--; + } + return *this; + } + // --var + VAR& VAR::operator--() + { + if (type < NerdCore::Enum::Type::String) + { + --data.number; + } + return *this; + } + */ + + /// Comparison VAR::operators + VAR VAR::operator==(const VAR &_v1) const + { + if (type == _v1.type) + { + switch (type) + { + case NerdCore::Enum::Type::Number: + return (bool)(data.number == _v1); + case NerdCore::Enum::Type::Boolean: + return __NERD_Create_Boolean((bool)data.number == (bool)_v1); + case NerdCore::Enum::Type::String: + return __NERD_Create_Boolean((((NerdCore::Class::String*)data.ptr)->value).compare((std::string)_v1) == 0); + case NerdCore::Enum::Type::Null: + case NerdCore::Enum::Type::Array: + case NerdCore::Enum::Type::Native: + case NerdCore::Enum::Type::Function: + case NerdCore::Enum::Type::Object: + default: + return _v1.data.ptr == this->data.ptr; + } + } + else + { + if (type == NerdCore::Enum::Type::String || _v1.type == NerdCore::Enum::Type::String) + { + return __NERD_Create_Boolean((std::string) * this == (std::string)_v1); + } + else + return __NERD_Create_Boolean((double)*this == (double)_v1); + } + } + // === emulated with __NERD_EQUAL_VALUE_AND_TYPE + VAR VAR::operator!=(const VAR &_v1) + { + return !(*this == _v1); + } + + // !== emulated with __NERD_NOT_EQUAL_VALUE_AND_TYPE + + VAR VAR::operator<(const VAR &_v1) + { + return data.number < (double)_v1; + } + + VAR VAR::operator<=(const VAR &_v1) + { + return (int)*this <= (int)_v1; + } + VAR VAR::operator>(const VAR &_v1) + { + return (int)*this > (int)_v1; + } + VAR VAR::operator>=(const VAR &_v1) + { + return (int)*this >= (int)_v1; + } + + /// Bitwise VAR::operators + VAR VAR::operator&(const VAR &_v1) { return (int)*this & (int)_v1; } + VAR& VAR::operator&=(const VAR &_v1) + { + type = NerdCore::Enum::Type::Number; + data.number = (int)*this & (int)_v1; + return *this; + } + + VAR VAR::operator|(const VAR &_v1) + { + return (int)*this | (int)_v1; + } + VAR VAR::operator|=(const VAR &_v1) + { + if (type < NerdCore::Enum::Type::String) + { + data.number = (int)data.number | (int)_v1; + } + else + { + return NerdCore::Global::NaN; + } + return *this; + } + VAR VAR::operator^(const VAR &_v1) { return (int)*this ^ (int)_v1; } + VAR VAR::operator^=(const VAR &_v1) + { + if (type < NerdCore::Enum::Type::String) + { + data.number = (int)data.number ^ (int)_v1; + } + else + { + return NerdCore::Global::NaN; + } + return *this; + } + VAR VAR::operator~() { return ~(int)*this; } + VAR VAR::operator>>(const VAR &_v1) { return (int)*this >> (int)_v1; } + VAR VAR::operator>>=(const VAR &_v1) + { + if (type < NerdCore::Enum::Type::String) + { + data.number = (int)data.number >> (int)_v1; + } + else + { + return NerdCore::Global::NaN; + } + return *this; + } + VAR VAR::operator<<(const VAR &_v1) + { + return (int)*this << (int)_v1; + } + VAR VAR::operator<<=(const VAR &_v1) + { + if (type < NerdCore::Enum::Type::String) + { + data.number = (int)data.number << (int)_v1; + } + else + { + return NerdCore::Global::NaN; + } + return *this; + } + + VAR::operator int() const + { + if(type < NerdCore::Enum::Type::String) return data.number; + return (int)(*(NerdCore::Class::Base*)data.ptr); + } + + VAR::operator int() + { + if(type < NerdCore::Enum::Type::String) return data.number; + return (int)(*(NerdCore::Class::Base*)data.ptr); + } + + VAR::operator double() const + { + if(type < NerdCore::Enum::Type::String) return data.number; + return (double)(*(NerdCore::Class::Base*)data.ptr); + } + + VAR::operator double() + { + if(type < NerdCore::Enum::Type::String) return data.number; + return (double)(*(NerdCore::Class::Base*)data.ptr); + } + + VAR::operator bool() const + { + if(type == NerdCore::Enum::Type::Null) return false; + else if(type == NerdCore::Enum::Type::Boolean || type == NerdCore::Enum::Type::Number) return data.number; + else return (bool)(*(NerdCore::Class::Base*)data.ptr); + } + + VAR::operator bool() + { + if(type == NerdCore::Enum::Type::Null) return false; + else if(type == NerdCore::Enum::Type::Boolean || type == NerdCore::Enum::Type::Number) return data.number; + else return (bool)(*(NerdCore::Class::Base*)data.ptr); + } + + VAR::operator const char*() const + { + if(type == NerdCore::Enum::Type::String) + { + return ((NerdCore::Class::String*)this->data.ptr)->value.c_str(); + } + else + { + throw(NerdCore::VAR("Char* conversion error: variable is not a string")); + } + } + + VAR::operator std::string() const + { + if(type < NerdCore::Enum::Type::String) return __NERD_DOUBLE_TO_STRING(data.number); + return (std::string)(*(NerdCore::Class::Base*)data.ptr); + } + + VAR::operator std::string() + { + if(type < NerdCore::Enum::Type::String) return __NERD_DOUBLE_TO_STRING(data.number); + return (std::string)(*(NerdCore::Class::Base*)data.ptr); + } + + VAR::operator long long() + { + if(type < NerdCore::Enum::Type::String) return data.number; + return (long long)((double)*this); + } + + VAR::operator long long() const + { + if(type < NerdCore::Enum::Type::String) return data.number; + return (long long)((double)*this); + } + + VAR::operator std::string_view() const + { + if(type == NerdCore::Enum::Type::String) + { + return std::string_view(((NerdCore::Class::String*)this->data.ptr)->value.c_str()); + } + else + { + throw(NerdCore::VAR("string_view conversion error: variable is not a string")); + } + } + + +} // namespace NerdCore \ No newline at end of file diff --git a/compiler/native/nerdcore/src/var_header.h b/compiler/native/nerdcore/src/var_header.h new file mode 100644 index 000000000..3021a76d5 --- /dev/null +++ b/compiler/native/nerdcore/src/var_header.h @@ -0,0 +1,259 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +namespace NerdCore +{ + + union Data + { + void* ptr; + double number; + }; + + struct VAR + { + NerdCore::Enum::Type type; + Data data; + + VAR(); + ~VAR(); + + /**/ + VAR(VAR const &_v); + VAR(VAR const &&_v); + /**/ + + /*** CONSTRUCTOR ***/ + + VAR(NerdCore::Enum::Type _type, int _value); + VAR(NerdCore::Enum::Type _type, double _value); + VAR(int _value); + VAR(double _value); + VAR(long long _value); + VAR(unsigned long _value); + VAR(long long unsigned int _value); + VAR(char *_value); + VAR(std::string _value); + VAR(const char *_value); + VAR(std::string_view _value); + VAR(NerdCore::Class::FixedArray *_value); + VAR(NerdCore::Class::Array *_value); + //VAR(std::initializer_list l); + VAR(const NerdCore::Class::Array *_value); + VAR(bool _value); + VAR(NerdCore::Class::Function *_value); + VAR(NerdCore::Class::Object *_value); + VAR(NerdCore::Class::String *_value); + VAR(NerdCore::Class::Native *_value); + VAR(NerdCore::Class::Undefined *_value); + VAR(void *_value, void* fn); + VAR(NerdCore::Enum::Type _type, void *_value); + VAR(NerdCore::Enum::Type _type, void *_value, VAR _this); + VAR(std::function &_value); + + /* + template + VAR(NerdCore::Class::NativeTPL* _value) + { + this->type = NerdCore::Enum::Type::NativeTPL; + data.ptr = _value; + }; + + template + T toNative (T _type) + { + if(type == NerdCore::Enum::Type::NativeTPL) + { + return (*(NerdCore::Class::NativeTPL*)data.ptr)(_type); + } + else + { + #ifndef __NERD_NO_EXCEPT + throw VAR("TypeError: Object is not a Native object"); + #endif + exit(1); + } + } + + template + T toNative () + { + if(type == NerdCore::Enum::Type::NativeTPL) + { + return (*(NerdCore::Class::NativeTPL*)data.ptr)(); + } + else + { + #ifndef __NERD_NO_EXCEPT + throw VAR("TypeError: Object is not a Native object"); + #endif + exit(1); + } + } + + template + T Ptr () + { + if(type == NerdCore::Enum::Type::NativeTPL) + { + return (NerdCore::Class::NativeTPL*)data.ptr; + } + else + { + #ifndef __NERD_NO_EXCEPT + throw VAR("TypeError: Object is not a Native object"); + #endif + exit(1); + } + } + */ + + template + VAR operator() (NerdCore::VAR __NERD_THIS, Args... args) const + { + if (type != NerdCore::Enum::Type::Function) + { + #ifndef __NERD_NO_EXCEPT + throw VAR("TypeError: object is not a function"); + #endif + exit(1); + } + else return (*(NerdCore::Class::Function*)data.ptr)(__NERD_THIS, (VAR)(args)...); + } + + /* END CALL OVERLOAD */ + + VAR & operator[] (VAR _index); + VAR & operator[] (VAR _index) const; + VAR & operator[] (int _index) const; + VAR & operator[] (int _index); + VAR & operator[] (double _index); + VAR & operator[] (const char* _index); + /* END ACCESS OVERLOAD */ + + /*** END CONSTRUCTOR ***/ + + /*** OPERATOR ***/ + void operator=(const VAR &_v); + + /// Unary operators + VAR operator+(); + VAR operator-(); + VAR operator!(); + + /// Logical operators + VAR operator&&(const VAR &_v1) const; + VAR operator||(const VAR &_v1) const; + + /// Arithmetic operators + VAR operator+(const VAR &_v1); + VAR operator+(const char _v1[]); + VAR& operator+=(const VAR &_v1); + VAR operator-(const VAR &_v1); + VAR& operator-=(const VAR &_v1); + VAR operator*(const VAR &_v1); + VAR& operator*=(const VAR &_v1); + VAR operator/(const VAR &_v1); + VAR& operator/=(const VAR &_v1); + VAR operator%(const VAR &_v1); + VAR& operator%=(const VAR &_v1); + // TODO: "**" and "**=" operators + + // var++ + inline VAR& operator++(const int _v1) noexcept + { + if (type < NerdCore::Enum::Type::String) + { + data.number++; + } + return *this; + } + // ++var + inline VAR& operator++() + { + if (type < NerdCore::Enum::Type::String) + { + ++data.number; + } + return *this; + } + // var-- + inline VAR& operator--(const int _v1) + { + if (type < NerdCore::Enum::Type::String) + { + data.number--; + } + return *this; + } + // --var + inline VAR& operator--() + { + if (type < NerdCore::Enum::Type::String) + { + --data.number; + } + return *this; + } + /// Comparison operators + VAR operator==(const VAR &_v1) const; + // === emulated with __NERD_EQUAL_VALUE_AND_TYPE + VAR operator!=(const VAR &_v1); + // !== emulated with __NERD_NOT_EQUAL_VALUE_AND_TYPE + VAR operator<(long long int &_v1); + VAR operator<(int &_v1); + VAR operator<(double &_v1); + VAR operator<(const VAR &_v1); + + VAR operator<=(const VAR &_v1); + VAR operator>(const VAR &_v1); + VAR operator>=(const VAR &_v1); + /// Bitwise operators + VAR operator&(const VAR &_v1); + VAR& operator&=(const VAR &_v1); + VAR operator|(const VAR &_v1); + VAR operator|=(const VAR &_v1); + VAR operator^(const VAR &_v1); + VAR operator^=(const VAR &_v1); + VAR operator~(); + VAR operator>>(const VAR &_v1); + VAR operator>>=(const VAR &_v1); + VAR operator<<(const VAR &_v1); + VAR operator<<=(const VAR &_v1); + + explicit operator int() const; + operator int(); + explicit operator double() const; + operator double(); + explicit operator bool() const; + operator bool(); + explicit operator std::string() const; + operator std::string(); + operator const char*() const; + operator long long(); + explicit operator long long() const; + operator std::string_view() const; + + }; + +} // namespace NerdCore \ No newline at end of file diff --git a/compiler/native/nerdcore/test/array.cpp b/compiler/native/nerdcore/test/array.cpp new file mode 100644 index 000000000..3ba9505b2 --- /dev/null +++ b/compiler/native/nerdcore/test/array.cpp @@ -0,0 +1,19 @@ +#include "../src/nerd.hpp" +using namespace NerdCore; +using namespace NerdCore::Global; +using namespace NerdCore::Class; +using namespace NerdCore::Functions; + +int main(int argc, char** argv) +{ + var arr = new Array(); + println(arr); + + var initArr = new Array(0, "one", 2, "three"); + println(initArr); + + var initArr2 = {"zero", 1, "two", 3}; + println(initArr2); + + return 0; +} diff --git a/compiler/native/nerdcore/test/cast.cpp b/compiler/native/nerdcore/test/cast.cpp new file mode 100644 index 000000000..b7ecd310f --- /dev/null +++ b/compiler/native/nerdcore/test/cast.cpp @@ -0,0 +1,36 @@ +#include "../src/nerd.hpp" + +using namespace NerdCore; +using namespace NerdCore::Global; +using namespace NerdCore::Class; +using namespace NerdCore::Functions; + +int main() +{ + try + { + var _str = "string"; + std::cout << "_str: " << _str << std::endl; + var _nbr = 123; + std::cout << "_nbr: " << _nbr << std::endl; + const char* c = _str; + std::cout << "char: " << c << std::endl; + std::string s = _str; + std::cout << "string: " << s << std::endl; + std::string_view sv = _str; + std::cout << "string_view: " << sv << std::endl; + int i = _nbr; + std::cout << "int: " << i << std::endl; + double d = _nbr; + std::cout << "double: " << d << std::endl; + long long ll = _nbr; + std::cout << "long long: " << ll << std::endl; + bool b = _nbr; + std::cout << "bool: " << b << std::endl; + } + catch(var& error) + { + println(error); + } + return 0; +} \ No newline at end of file diff --git a/compiler/native/nerdcore/test/native.cpp b/compiler/native/nerdcore/test/native.cpp new file mode 100644 index 000000000..3ecbe466b --- /dev/null +++ b/compiler/native/nerdcore/test/native.cpp @@ -0,0 +1,37 @@ +#include "../src/nerd.hpp" +using namespace NerdCore; +using namespace NerdCore::Global; +using namespace NerdCore::Class; +using namespace NerdCore::Functions; + +struct s +{ + int i = 10; + int j; +}; + +s* typeStruct = new s(); + +int main(int argc, char** argv) +{ + try + { + #if __cplusplus > 202002L + auto __fn = []() {std::cout << "Hello" << std::endl;}; + + var _struct = new NativeTPL(new s({3,4})); + std::cout << _struct.toNative(typeStruct)->i << std::endl; + + var _fn = new NativeTPL(__fn); + _fn.toNative(__fn)(); + #else + var _struct = new NativeTPL(new s({3,4})); + std::cout << _struct.toNative(typeStruct)->i << std::endl; + #endif + } + catch(var e) + { + println(e); + } + return 0; +} diff --git a/compiler/native/nerdcore/test/object.cpp b/compiler/native/nerdcore/test/object.cpp new file mode 100644 index 000000000..5a72c70fa --- /dev/null +++ b/compiler/native/nerdcore/test/object.cpp @@ -0,0 +1,29 @@ +#include "../src/nerd.hpp" +using namespace NerdCore; +using namespace NerdCore::Global; +using namespace NerdCore::Class; +using namespace NerdCore::Functions; + +int main(int argc, char** argv) +{ + var args = getArguments(argc, argv); + println(args); + + var o = new Object(); + o["int"] = 1; + o["string"] = "str"; + println(o); + + var init = new Object( + { + {"one", 1}, // number + {"two", "2"}, // string + {"three", {1,2,3}}, // array + {"four", new Object("key", "value")}, // sub object with only one key + {"five", new Object({"key", 1})}, // another way with non string value + {"six", new Object({ {"key", 2} })}, // another way with non string value + }); + println(init); + + return 0; +} diff --git a/compiler/native/nerdcore/test/operators.cpp b/compiler/native/nerdcore/test/operators.cpp new file mode 100644 index 000000000..1f3e61c5e --- /dev/null +++ b/compiler/native/nerdcore/test/operators.cpp @@ -0,0 +1,83 @@ +#include "../src/nerd.hpp" + +using namespace NerdCore; +using namespace NerdCore::Global; +using namespace NerdCore::Class; +using namespace NerdCore::Functions; + +int main() +{ + try + { + var a = 1; + + println(a + a); + println(a + 1); + println(a + "1"); + + println(1 + a); + println("1" + a); + + println(a - a); + println(a - 1); + println(a - "1"); + + println(1 - a); + println("1" - a); + + println(a * a); + println(a * 1); + println(a * "1"); + + println(1 * a); + println("1" * a); + + println(a / a); + println(a / 1); + println(a / "1"); + + println(1 / a); + println("1" / a); + + println(a == a); + println(a == 1); + println(a == "1"); + + println(a != a); + println(a != 1); + println(a != "1"); + + println(a > a); + println(a > 1); + println(a > "1"); + + println(a < a); + println(a < 1); + println(a < "1"); + + println(a >= a); + println(a >= 1); + println(a >= "1"); + + println(a <= a); + println(a <= 1); + println(a <= "1"); + + println(a | a); + println(a | 1); + println(a | "1"); + + println(a & a); + println(a & 1); + println(a & "1"); + + println(a ^ a); + println(a ^ 1); + println(a ^ "1"); + } + catch(var& error) + { + println(error); + } + return 0; +} \ No newline at end of file diff --git a/compiler/native/platform/android/.gitignore b/compiler/native/platform/android/.gitignore deleted file mode 100644 index 2bcbf62ac..000000000 --- a/compiler/native/platform/android/.gitignore +++ /dev/null @@ -1,12 +0,0 @@ -/local.properties -/.idea/caches -/.idea/libraries -/.idea/modules.xml -/.idea/workspace.xml -/.idea/navEditor.xml -/.idea/assetWizardSettings.xml -.DS_Store -/build -/captures -.externalNativeBuild -.cxx diff --git a/compiler/native/platform/android/app/.gitignore b/compiler/native/platform/android/app/.gitignore deleted file mode 100644 index 796b96d1c..000000000 --- a/compiler/native/platform/android/app/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build diff --git a/compiler/native/platform/android/app/app.iml b/compiler/native/platform/android/app/app.iml deleted file mode 100644 index c26661a83..000000000 --- a/compiler/native/platform/android/app/app.iml +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/compiler/native/platform/android/app/build.gradle b/compiler/native/platform/android/app/build.gradle deleted file mode 100644 index 82e86e61e..000000000 --- a/compiler/native/platform/android/app/build.gradle +++ /dev/null @@ -1,49 +0,0 @@ -apply plugin: 'com.android.application' - -android { - compileSdkVersion 28 - - aaptOptions { - noCompress '*' - } - - defaultConfig { - applicationId "com.nectarjs.nectar_android_app" - minSdkVersion 19 - targetSdkVersion 28 - versionCode 1 - versionName "1.0" - - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - - externalNativeBuild { - cmake { - cppFlags "-std=c++17" - } - } - } - - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - } - } - - externalNativeBuild { - cmake { - path "src/main/cpp/CMakeLists.txt" - version "3.10.2" - } - } -} - -dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar']) - - implementation 'androidx.appcompat:appcompat:1.1.0' - implementation 'androidx.constraintlayout:constraintlayout:1.1.3' - testImplementation 'junit:junit:4.12' - androidTestImplementation 'androidx.test.ext:junit:1.1.1' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' -} diff --git a/compiler/native/platform/android/app/proguard-rules.pro b/compiler/native/platform/android/app/proguard-rules.pro deleted file mode 100644 index f1b424510..000000000 --- a/compiler/native/platform/android/app/proguard-rules.pro +++ /dev/null @@ -1,21 +0,0 @@ -# Add project specific ProGuard rules here. -# You can control the set of applied configuration files using the -# proguardFiles setting in build.gradle. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} - -# Uncomment this to preserve the line number information for -# debugging stack traces. -#-keepattributes SourceFile,LineNumberTable - -# If you keep the line number information, uncomment this to -# hide the original source file name. -#-renamesourcefileattribute SourceFile diff --git a/compiler/native/platform/android/app/src/androidTest/java/com/nectarjs/nectar_android_app/ExampleInstrumentedTest.java b/compiler/native/platform/android/app/src/androidTest/java/com/nectarjs/nectar_android_app/ExampleInstrumentedTest.java deleted file mode 100644 index 7a5e4a843..000000000 --- a/compiler/native/platform/android/app/src/androidTest/java/com/nectarjs/nectar_android_app/ExampleInstrumentedTest.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.nectarjs.nectar_android_app; - -import android.content.Context; - -import androidx.test.platform.app.InstrumentationRegistry; -import androidx.test.ext.junit.runners.AndroidJUnit4; - -import org.junit.Test; -import org.junit.runner.RunWith; - -import static org.junit.Assert.*; - -/** - * Instrumented test, which will execute on an Android device. - * - * @see Testing documentation - */ -@RunWith(AndroidJUnit4.class) -public class ExampleInstrumentedTest { - @Test - public void useAppContext() { - // Context of the app under test. - Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); - - assertEquals("com.nectarjs.nectar_android_app", appContext.getPackageName()); - } -} diff --git a/compiler/native/platform/android/app/src/main/AndroidManifest.xml b/compiler/native/platform/android/app/src/main/AndroidManifest.xml deleted file mode 100644 index 757cf35bc..000000000 --- a/compiler/native/platform/android/app/src/main/AndroidManifest.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/compiler/native/platform/android/app/src/main/assets/raw/index.html b/compiler/native/platform/android/app/src/main/assets/raw/index.html deleted file mode 100644 index ee6d3e4be..000000000 --- a/compiler/native/platform/android/app/src/main/assets/raw/index.html +++ /dev/null @@ -1 +0,0 @@ -Hello NectarJS ! \ No newline at end of file diff --git a/compiler/native/platform/android/app/src/main/assets/raw/version.txt b/compiler/native/platform/android/app/src/main/assets/raw/version.txt deleted file mode 100644 index c22708346..000000000 --- a/compiler/native/platform/android/app/src/main/assets/raw/version.txt +++ /dev/null @@ -1 +0,0 @@ -0 \ No newline at end of file diff --git a/compiler/native/platform/android/app/src/main/cpp/CMakeLists.txt b/compiler/native/platform/android/app/src/main/cpp/CMakeLists.txt deleted file mode 100644 index 4a597f003..000000000 --- a/compiler/native/platform/android/app/src/main/cpp/CMakeLists.txt +++ /dev/null @@ -1,44 +0,0 @@ -# For more information about using CMake with Android Studio, read the -# documentation: https://d.android.com/studio/projects/add-native-code.html - -# Sets the minimum version of CMake required to build the native library. - -cmake_minimum_required(VERSION 3.4.1) - -# Creates and names a library, sets it as either STATIC -# or SHARED, and provides the relative paths to its source code. -# You can define multiple libraries, and CMake builds them for you. -# Gradle automatically packages shared libraries with your APK. - -add_library( # Sets the name of the library. - native-lib - - # Sets the library as a shared library. - SHARED - - # Provides a relative path to your source file(s). - native-lib.cpp ) - -# Searches for a specified prebuilt library and stores the path as a -# variable. Because CMake includes system libraries in the search path by -# default, you only need to specify the name of the public NDK library -# you want to add. CMake verifies that the library exists before -# completing its build. - -find_library( # Sets the name of the path variable. - log-lib - - # Specifies the name of the NDK library that - # you want CMake to locate. - log ) - -# Specifies libraries CMake should link to your target library. You -# can link multiple libraries, such as libraries you define in this -# build script, prebuilt third-party libraries, or system libraries. - -target_link_libraries( # Specifies the target library. - native-lib - - # Links the target library to the log library - # included in the NDK. - ${log-lib} ) \ No newline at end of file diff --git a/compiler/native/platform/android/app/src/main/cpp/httplib.h b/compiler/native/platform/android/app/src/main/cpp/httplib.h deleted file mode 100644 index fb5888031..000000000 --- a/compiler/native/platform/android/app/src/main/cpp/httplib.h +++ /dev/null @@ -1,5614 +0,0 @@ -// -// httplib.h -// -// Copyright (c) 2020 Yuji Hirose. All rights reserved. -// MIT License -// - -#include "ifaddrs.h" - -#ifndef CPPHTTPLIB_HTTPLIB_H -#define CPPHTTPLIB_HTTPLIB_H - -/* - * Configuration - */ - -#ifndef CPPHTTPLIB_KEEPALIVE_TIMEOUT_SECOND -#define CPPHTTPLIB_KEEPALIVE_TIMEOUT_SECOND 5 -#endif - -#ifndef CPPHTTPLIB_KEEPALIVE_TIMEOUT_USECOND -#define CPPHTTPLIB_KEEPALIVE_TIMEOUT_USECOND 0 -#endif - -#ifndef CPPHTTPLIB_KEEPALIVE_MAX_COUNT -#define CPPHTTPLIB_KEEPALIVE_MAX_COUNT 5 -#endif - -#ifndef CPPHTTPLIB_CONNECTION_TIMEOUT_SECOND -#define CPPHTTPLIB_CONNECTION_TIMEOUT_SECOND 300 -#endif - -#ifndef CPPHTTPLIB_CONNECTION_TIMEOUT_USECOND -#define CPPHTTPLIB_CONNECTION_TIMEOUT_USECOND 0 -#endif - -#ifndef CPPHTTPLIB_READ_TIMEOUT_SECOND -#define CPPHTTPLIB_READ_TIMEOUT_SECOND 5 -#endif - -#ifndef CPPHTTPLIB_READ_TIMEOUT_USECOND -#define CPPHTTPLIB_READ_TIMEOUT_USECOND 0 -#endif - -#ifndef CPPHTTPLIB_WRITE_TIMEOUT_SECOND -#define CPPHTTPLIB_WRITE_TIMEOUT_SECOND 5 -#endif - -#ifndef CPPHTTPLIB_WRITE_TIMEOUT_USECOND -#define CPPHTTPLIB_WRITE_TIMEOUT_USECOND 0 -#endif - -#ifndef CPPHTTPLIB_IDLE_INTERVAL_SECOND -#define CPPHTTPLIB_IDLE_INTERVAL_SECOND 0 -#endif - -#ifndef CPPHTTPLIB_IDLE_INTERVAL_USECOND -#ifdef _WIN32 -#define CPPHTTPLIB_IDLE_INTERVAL_USECOND 10000 -#else -#define CPPHTTPLIB_IDLE_INTERVAL_USECOND 0 -#endif -#endif - -#ifndef CPPHTTPLIB_REQUEST_URI_MAX_LENGTH -#define CPPHTTPLIB_REQUEST_URI_MAX_LENGTH 8192 -#endif - -#ifndef CPPHTTPLIB_REDIRECT_MAX_COUNT -#define CPPHTTPLIB_REDIRECT_MAX_COUNT 20 -#endif - -#ifndef CPPHTTPLIB_PAYLOAD_MAX_LENGTH -#define CPPHTTPLIB_PAYLOAD_MAX_LENGTH ((std::numeric_limits::max)()) -#endif - -#ifndef CPPHTTPLIB_RECV_BUFSIZ -#define CPPHTTPLIB_RECV_BUFSIZ size_t(4096u) -#endif - -#ifndef CPPHTTPLIB_THREAD_POOL_COUNT -#define CPPHTTPLIB_THREAD_POOL_COUNT \ - ((std::max)(8u, std::thread::hardware_concurrency() > 0 \ - ? std::thread::hardware_concurrency() - 1 \ - : 0)) -#endif - -/* - * Headers - */ - -#ifdef _WIN32 -#ifndef _CRT_SECURE_NO_WARNINGS -#define _CRT_SECURE_NO_WARNINGS -#endif //_CRT_SECURE_NO_WARNINGS - -#ifndef _CRT_NONSTDC_NO_DEPRECATE -#define _CRT_NONSTDC_NO_DEPRECATE -#endif //_CRT_NONSTDC_NO_DEPRECATE - -#if defined(_MSC_VER) -#ifdef _WIN64 -using ssize_t = __int64; -#else -using ssize_t = int; -#endif - -#if _MSC_VER < 1900 -#define snprintf _snprintf_s -#endif -#endif // _MSC_VER - -#ifndef S_ISREG -#define S_ISREG(m) (((m)&S_IFREG) == S_IFREG) -#endif // S_ISREG - -#ifndef S_ISDIR -#define S_ISDIR(m) (((m)&S_IFDIR) == S_IFDIR) -#endif // S_ISDIR - -#ifndef NOMINMAX -#define NOMINMAX -#endif // NOMINMAX - -#include -#include -#include - -#ifndef WSA_FLAG_NO_HANDLE_INHERIT -#define WSA_FLAG_NO_HANDLE_INHERIT 0x80 -#endif - -#ifdef _MSC_VER -#pragma comment(lib, "ws2_32.lib") -#endif - -#ifndef strcasecmp -#define strcasecmp _stricmp -#endif // strcasecmp - -using socket_t = SOCKET; -#ifdef CPPHTTPLIB_USE_POLL -#define poll(fds, nfds, timeout) WSAPoll(fds, nfds, timeout) -#endif - -#else // not _WIN32 - -#include -#include -#include -#include -#include -#ifdef CPPHTTPLIB_USE_POLL -#include -#endif -#include -#include -#include -#include -#include - -using socket_t = int; -#define INVALID_SOCKET (-1) -#endif //_WIN32 - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT -#include -#include -#include -#include - -#include -#include -#include - -// #if OPENSSL_VERSION_Number < 0x1010100fL -// #error Sorry, OpenSSL versions prior to 1.1.1 are not supported -// #endif - -#if OPENSSL_VERSION_Number < 0x10100000L -#include -inline const unsigned char *ASN1_String_get0_data(const ASN1_String *asn1) { - return M_ASN1_String_data(asn1); -} -#endif -#endif - -#ifdef CPPHTTPLIB_ZLIB_SUPPORT -#include -#endif -/* - * Declaration - */ -namespace httplib { - -namespace detail { - -struct ci { - bool operator()(const std::string &s1, const std::string &s2) const { - return std::lexicographical_compare( - s1.begin(), s1.end(), s2.begin(), s2.end(), - [](char c1, char c2) { return ::tolower(c1) < ::tolower(c2); }); - } -}; - -} // namespace detail - -using Headers = std::multimap; - -using Params = std::multimap; -using Match = std::smatch; - -using Progress = std::function; - -struct Response; -using ResponseHandler = std::function; - -struct MultipartFormData { - std::string name; - std::string content; - std::string filename; - std::string content_type; -}; -using MultipartFormDataItems = std::vector; -using MultipartFormDataMap = std::multimap; - -class DataSink { -public: - DataSink() : os(&sb_), sb_(*this) {} - - DataSink(const DataSink &) = delete; - DataSink &operator=(const DataSink &) = delete; - DataSink(DataSink &&) = delete; - DataSink &operator=(DataSink &&) = delete; - - std::function write; - std::function done; - std::function is_writable; - std::ostream os; - -private: - class data_sink_streambuf : public std::streambuf { - public: - data_sink_streambuf(DataSink &sink) : sink_(sink) {} - - protected: - std::streamsize xsputn(const char *s, std::streamsize n) { - sink_.write(s, static_cast(n)); - return n; - } - - private: - DataSink &sink_; - }; - - data_sink_streambuf sb_; -}; - -using ContentProvider = - std::function; - -using ChunkedContentProvider = - std::function; - -using ContentReceiver = - std::function; - -using MultipartContentHeader = - std::function; - -class ContentReader { -public: - using Reader = std::function; - using MultipartReader = std::function; - - ContentReader(Reader reader, MultipartReader multipart_reader) - : reader_(reader), multipart_reader_(multipart_reader) {} - - bool operator()(MultipartContentHeader header, - ContentReceiver receiver) const { - return multipart_reader_(header, receiver); - } - - bool operator()(ContentReceiver receiver) const { return reader_(receiver); } - - Reader reader_; - MultipartReader multipart_reader_; -}; - -using Range = std::pair; -using Ranges = std::vector; - -struct Request { - std::string method; - std::string path; - Headers headers; - std::string body; - - std::string remote_addr; - int remote_port = -1; - - // for server - std::string version; - std::string target; - Params params; - MultipartFormDataMap files; - Ranges ranges; - Match matches; - - // for client - size_t redirect_count = CPPHTTPLIB_REDIRECT_MAX_COUNT; - ResponseHandler response_handler; - ContentReceiver content_receiver; - size_t content_length = 0; - ContentProvider content_provider; - Progress progress; - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - const SSL *ssl; -#endif - - bool has_header(const char *key) const; - std::string get_header_value(const char *key, size_t id = 0) const; - size_t get_header_value_count(const char *key) const; - void set_header(const char *key, const char *val); - void set_header(const char *key, const std::string &val); - - bool has_param(const char *key) const; - std::string get_param_value(const char *key, size_t id = 0) const; - size_t get_param_value_count(const char *key) const; - - bool is_multipart_form_data() const; - - bool has_file(const char *key) const; - MultipartFormData get_file_value(const char *key) const; - - // private members... - size_t authorization_count_ = 0; -}; - -struct Response { - std::string version; - int status = -1; - Headers headers; - std::string body; - - bool has_header(const char *key) const; - std::string get_header_value(const char *key, size_t id = 0) const; - size_t get_header_value_count(const char *key) const; - void set_header(const char *key, const char *val); - void set_header(const char *key, const std::string &val); - - void set_redirect(const char *url, int status = 302); - void set_content(const char *s, size_t n, const char *content_type); - void set_content(std::string s, const char *content_type); - - void set_content_provider( - size_t length, ContentProvider provider, - std::function resource_releaser = [] {}); - - void set_chunked_content_provider( - ChunkedContentProvider provider, - std::function resource_releaser = [] {}); - - Response() = default; - Response(const Response &) = default; - Response &operator=(const Response &) = default; - Response(Response &&) = default; - Response &operator=(Response &&) = default; - ~Response() { - if (content_provider_resource_releaser_) { - content_provider_resource_releaser_(); - } - } - - // private members... - size_t content_length_ = 0; - ContentProvider content_provider_; - std::function content_provider_resource_releaser_; -}; - -class Stream { -public: - virtual ~Stream() = default; - - virtual bool is_readable() const = 0; - virtual bool is_writable() const = 0; - - virtual ssize_t read(char *ptr, size_t size) = 0; - virtual ssize_t write(const char *ptr, size_t size) = 0; - virtual void get_remote_ip_and_port(std::string &ip, int &port) const = 0; - - template - ssize_t write_format(const char *fmt, const Args &... args); - ssize_t write(const char *ptr); - ssize_t write(const std::string &s); -}; - -class TaskQueue { -public: - TaskQueue() = default; - virtual ~TaskQueue() = default; - - virtual void enqueue(std::function fn) = 0; - virtual void shutdown() = 0; - - virtual void on_idle(){}; -}; - -class ThreadPool : public TaskQueue { -public: - explicit ThreadPool(size_t n) : shutdown_(false) { - while (n) { - threads_.emplace_back(worker(*this)); - n--; - } - } - - ThreadPool(const ThreadPool &) = delete; - ~ThreadPool() override = default; - - void enqueue(std::function fn) override { - std::unique_lock lock(mutex_); - jobs_.push_back(fn); - cond_.notify_one(); - } - - void shutdown() override { - // Stop all worker threads... - { - std::unique_lock lock(mutex_); - shutdown_ = true; - } - - cond_.notify_all(); - - // Join... - for (auto &t : threads_) { - t.join(); - } - } - -private: - struct worker { - explicit worker(ThreadPool &pool) : pool_(pool) {} - - void operator()() { - for (;;) { - std::function fn; - { - std::unique_lock lock(pool_.mutex_); - - pool_.cond_.wait( - lock, [&] { return !pool_.jobs_.empty() || pool_.shutdown_; }); - - if (pool_.shutdown_ && pool_.jobs_.empty()) { break; } - - fn = pool_.jobs_.front(); - pool_.jobs_.pop_front(); - } - - assert(true == static_cast(fn)); - fn(); - } - } - - ThreadPool &pool_; - }; - friend struct worker; - - std::vector threads_; - std::list> jobs_; - - bool shutdown_; - - std::condition_variable cond_; - std::mutex mutex_; -}; - -using Logger = std::function; - -class Server { -public: - using Handler = std::function; - using HandlerWithContentReader = std::function; - using Expect100ContinueHandler = - std::function; - - Server(); - - virtual ~Server(); - - virtual bool is_valid() const; - - Server &Get(const char *pattern, Handler handler); - Server &Post(const char *pattern, Handler handler); - Server &Post(const char *pattern, HandlerWithContentReader handler); - Server &Put(const char *pattern, Handler handler); - Server &Put(const char *pattern, HandlerWithContentReader handler); - Server &Patch(const char *pattern, Handler handler); - Server &Patch(const char *pattern, HandlerWithContentReader handler); - Server &Delete(const char *pattern, Handler handler); - Server &Delete(const char *pattern, HandlerWithContentReader handler); - Server &Options(const char *pattern, Handler handler); - - [[deprecated]] bool set_base_dir(const char *dir, - const char *mount_point = nullptr); - bool set_mount_point(const char *mount_point, const char *dir); - bool remove_mount_point(const char *mount_point); - void set_file_extension_and_mimetype_mapping(const char *ext, - const char *mime); - void set_file_request_handler(Handler handler); - - void set_error_handler(Handler handler); - void set_logger(Logger logger); - - void set_expect_100_continue_handler(Expect100ContinueHandler handler); - - void set_keep_alive_max_count(size_t count); - void set_read_timeout(time_t sec, time_t usec = 0); - void set_write_timeout(time_t sec, time_t usec = 0); - void set_idle_interval(time_t sec, time_t usec = 0); - - void set_payload_max_length(size_t length); - - bool bind_to_port(const char *host, int port, int socket_flags = 0); - int bind_to_any_port(const char *host, int socket_flags = 0); - bool listen_after_bind(); - - bool listen(const char *host, int port, int socket_flags = 0); - - bool is_running() const; - void stop(); - - std::function new_task_queue; - -protected: - bool process_request(Stream &strm, bool last_connection, - bool &connection_close, - const std::function &setup_request); - - size_t keep_alive_max_count_ = CPPHTTPLIB_KEEPALIVE_MAX_COUNT; - time_t read_timeout_sec_ = CPPHTTPLIB_READ_TIMEOUT_SECOND; - time_t read_timeout_usec_ = CPPHTTPLIB_READ_TIMEOUT_USECOND; - time_t write_timeout_sec_ = CPPHTTPLIB_WRITE_TIMEOUT_SECOND; - time_t write_timeout_usec_ = CPPHTTPLIB_WRITE_TIMEOUT_USECOND; - time_t idle_interval_sec_ = CPPHTTPLIB_IDLE_INTERVAL_SECOND; - time_t idle_interval_usec_ = CPPHTTPLIB_IDLE_INTERVAL_USECOND; - size_t payload_max_length_ = CPPHTTPLIB_PAYLOAD_MAX_LENGTH; - -private: - using Handlers = std::vector>; - using HandlersForContentReader = - std::vector>; - - socket_t create_server_socket(const char *host, int port, - int socket_flags) const; - int bind_internal(const char *host, int port, int socket_flags); - bool listen_internal(); - - bool routing(Request &req, Response &res, Stream &strm); - bool handle_file_request(Request &req, Response &res, bool head = false); - bool dispatch_request(Request &req, Response &res, Handlers &handlers); - bool dispatch_request_for_content_reader(Request &req, Response &res, - ContentReader content_reader, - HandlersForContentReader &handlers); - - bool parse_request_line(const char *s, Request &req); - bool write_response(Stream &strm, bool last_connection, const Request &req, - Response &res); - bool write_content_with_provider(Stream &strm, const Request &req, - Response &res, const std::string &boundary, - const std::string &content_type); - bool read_content(Stream &strm, Request &req, Response &res); - bool - read_content_with_content_receiver(Stream &strm, Request &req, Response &res, - ContentReceiver receiver, - MultipartContentHeader multipart_header, - ContentReceiver multipart_receiver); - bool read_content_core(Stream &strm, Request &req, Response &res, - ContentReceiver receiver, - MultipartContentHeader mulitpart_header, - ContentReceiver multipart_receiver); - - virtual bool process_and_close_socket(socket_t sock); - - std::atomic is_running_; - std::atomic svr_sock_; - std::vector> base_dirs_; - std::map file_extension_and_mimetype_map_; - Handler file_request_handler_; - Handlers get_handlers_; - Handlers post_handlers_; - HandlersForContentReader post_handlers_for_content_reader_; - Handlers put_handlers_; - HandlersForContentReader put_handlers_for_content_reader_; - Handlers patch_handlers_; - HandlersForContentReader patch_handlers_for_content_reader_; - Handlers delete_handlers_; - HandlersForContentReader delete_handlers_for_content_reader_; - Handlers options_handlers_; - Handler error_handler_; - Logger logger_; - Expect100ContinueHandler expect_100_continue_handler_; -}; - -class Client { -public: - explicit Client(const std::string &host); - - explicit Client(const std::string &host, int port); - - explicit Client(const std::string &host, int port, - const std::string &client_cert_path, - const std::string &client_key_path); - - virtual ~Client(); - - virtual bool is_valid() const; - - std::shared_ptr Get(const char *path); - - std::shared_ptr Get(const char *path, const Headers &headers); - - std::shared_ptr Get(const char *path, Progress progress); - - std::shared_ptr Get(const char *path, const Headers &headers, - Progress progress); - - std::shared_ptr Get(const char *path, - ContentReceiver content_receiver); - - std::shared_ptr Get(const char *path, const Headers &headers, - ContentReceiver content_receiver); - - std::shared_ptr - Get(const char *path, ContentReceiver content_receiver, Progress progress); - - std::shared_ptr Get(const char *path, const Headers &headers, - ContentReceiver content_receiver, - Progress progress); - - std::shared_ptr Get(const char *path, const Headers &headers, - ResponseHandler response_handler, - ContentReceiver content_receiver); - - std::shared_ptr Get(const char *path, const Headers &headers, - ResponseHandler response_handler, - ContentReceiver content_receiver, - Progress progress); - - std::shared_ptr Head(const char *path); - - std::shared_ptr Head(const char *path, const Headers &headers); - - std::shared_ptr Post(const char *path); - - std::shared_ptr Post(const char *path, const std::string &body, - const char *content_type); - - std::shared_ptr Post(const char *path, const Headers &headers, - const std::string &body, - const char *content_type); - - std::shared_ptr Post(const char *path, size_t content_length, - ContentProvider content_provider, - const char *content_type); - - std::shared_ptr Post(const char *path, const Headers &headers, - size_t content_length, - ContentProvider content_provider, - const char *content_type); - - std::shared_ptr Post(const char *path, const Params ¶ms); - - std::shared_ptr Post(const char *path, const Headers &headers, - const Params ¶ms); - - std::shared_ptr Post(const char *path, - const MultipartFormDataItems &items); - - std::shared_ptr Post(const char *path, const Headers &headers, - const MultipartFormDataItems &items); - - std::shared_ptr Put(const char *path); - - std::shared_ptr Put(const char *path, const std::string &body, - const char *content_type); - - std::shared_ptr Put(const char *path, const Headers &headers, - const std::string &body, - const char *content_type); - - std::shared_ptr Put(const char *path, size_t content_length, - ContentProvider content_provider, - const char *content_type); - - std::shared_ptr Put(const char *path, const Headers &headers, - size_t content_length, - ContentProvider content_provider, - const char *content_type); - - std::shared_ptr Put(const char *path, const Params ¶ms); - - std::shared_ptr Put(const char *path, const Headers &headers, - const Params ¶ms); - - std::shared_ptr Patch(const char *path, const std::string &body, - const char *content_type); - - std::shared_ptr Patch(const char *path, const Headers &headers, - const std::string &body, - const char *content_type); - - std::shared_ptr Patch(const char *path, size_t content_length, - ContentProvider content_provider, - const char *content_type); - - std::shared_ptr Patch(const char *path, const Headers &headers, - size_t content_length, - ContentProvider content_provider, - const char *content_type); - - std::shared_ptr Delete(const char *path); - - std::shared_ptr Delete(const char *path, const std::string &body, - const char *content_type); - - std::shared_ptr Delete(const char *path, const Headers &headers); - - std::shared_ptr Delete(const char *path, const Headers &headers, - const std::string &body, - const char *content_type); - - std::shared_ptr Options(const char *path); - - std::shared_ptr Options(const char *path, const Headers &headers); - - bool send(const Request &req, Response &res); - - bool send(const std::vector &requests, - std::vector &responses); - - void stop(); - - [[deprecated]] void set_timeout_sec(time_t timeout_sec); - void set_connection_timeout(time_t sec, time_t usec = 0); - void set_read_timeout(time_t sec, time_t usec = 0); - void set_write_timeout(time_t sec, time_t usec = 0); - - void set_keep_alive_max_count(size_t count); - - void set_basic_auth(const char *username, const char *password); -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - void set_digest_auth(const char *username, const char *password); -#endif - - void set_follow_location(bool on); - - void set_compress(bool on); - - void set_decompress(bool on); - - void set_interface(const char *intf); - - void set_proxy(const char *host, int port); - void set_proxy_basic_auth(const char *username, const char *password); -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - void set_proxy_digest_auth(const char *username, const char *password); -#endif - - void set_logger(Logger logger); - -protected: - bool process_request(Stream &strm, const Request &req, Response &res, - bool last_connection, bool &connection_close); - - std::atomic sock_; - - const std::string host_; - const int port_; - const std::string host_and_port_; - - // Settings - std::string client_cert_path_; - std::string client_key_path_; - - time_t connection_timeout_sec_ = CPPHTTPLIB_CONNECTION_TIMEOUT_SECOND; - time_t connection_timeout_usec_ = CPPHTTPLIB_CONNECTION_TIMEOUT_USECOND; - time_t read_timeout_sec_ = CPPHTTPLIB_READ_TIMEOUT_SECOND; - time_t read_timeout_usec_ = CPPHTTPLIB_READ_TIMEOUT_USECOND; - time_t write_timeout_sec_ = CPPHTTPLIB_WRITE_TIMEOUT_SECOND; - time_t write_timeout_usec_ = CPPHTTPLIB_WRITE_TIMEOUT_USECOND; - - size_t keep_alive_max_count_ = CPPHTTPLIB_KEEPALIVE_MAX_COUNT; - - std::string basic_auth_username_; - std::string basic_auth_password_; -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - std::string digest_auth_username_; - std::string digest_auth_password_; -#endif - - bool follow_location_ = false; - - bool compress_ = false; - bool decompress_ = true; - - std::string interface_; - - std::string proxy_host_; - int proxy_port_; - - std::string proxy_basic_auth_username_; - std::string proxy_basic_auth_password_; -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - std::string proxy_digest_auth_username_; - std::string proxy_digest_auth_password_; -#endif - - Logger logger_; - - void copy_settings(const Client &rhs) { - client_cert_path_ = rhs.client_cert_path_; - client_key_path_ = rhs.client_key_path_; - connection_timeout_sec_ = rhs.connection_timeout_sec_; - read_timeout_sec_ = rhs.read_timeout_sec_; - read_timeout_usec_ = rhs.read_timeout_usec_; - write_timeout_sec_ = rhs.write_timeout_sec_; - write_timeout_usec_ = rhs.write_timeout_usec_; - keep_alive_max_count_ = rhs.keep_alive_max_count_; - basic_auth_username_ = rhs.basic_auth_username_; - basic_auth_password_ = rhs.basic_auth_password_; -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - digest_auth_username_ = rhs.digest_auth_username_; - digest_auth_password_ = rhs.digest_auth_password_; -#endif - follow_location_ = rhs.follow_location_; - compress_ = rhs.compress_; - decompress_ = rhs.decompress_; - interface_ = rhs.interface_; - proxy_host_ = rhs.proxy_host_; - proxy_port_ = rhs.proxy_port_; - proxy_basic_auth_username_ = rhs.proxy_basic_auth_username_; - proxy_basic_auth_password_ = rhs.proxy_basic_auth_password_; -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - proxy_digest_auth_username_ = rhs.proxy_digest_auth_username_; - proxy_digest_auth_password_ = rhs.proxy_digest_auth_password_; -#endif - logger_ = rhs.logger_; - } - -private: - socket_t create_client_socket() const; - bool read_response_line(Stream &strm, Response &res); - bool write_request(Stream &strm, const Request &req, bool last_connection); - bool redirect(const Request &req, Response &res); - bool handle_request(Stream &strm, const Request &req, Response &res, - bool last_connection, bool &connection_close); -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - bool connect(socket_t sock, Response &res, bool &error); -#endif - - std::shared_ptr send_with_content_provider( - const char *method, const char *path, const Headers &headers, - const std::string &body, size_t content_length, - ContentProvider content_provider, const char *content_type); - - virtual bool process_and_close_socket( - socket_t sock, size_t request_count, - std::function - callback); - - virtual bool is_ssl() const; -}; - -inline void Get(std::vector &requests, const char *path, - const Headers &headers) { - Request req; - req.method = "GET"; - req.path = path; - req.headers = headers; - requests.emplace_back(std::move(req)); -} - -inline void Get(std::vector &requests, const char *path) { - Get(requests, path, Headers()); -} - -inline void Post(std::vector &requests, const char *path, - const Headers &headers, const std::string &body, - const char *content_type) { - Request req; - req.method = "POST"; - req.path = path; - req.headers = headers; - if (content_type) { req.headers.emplace("Content-Type", content_type); } - req.body = body; - requests.emplace_back(std::move(req)); -} - -inline void Post(std::vector &requests, const char *path, - const std::string &body, const char *content_type) { - Post(requests, path, Headers(), body, content_type); -} - -inline void Post(std::vector &requests, const char *path, - size_t content_length, ContentProvider content_provider, - const char *content_type) { - Request req; - req.method = "POST"; - req.headers = Headers(); - req.path = path; - req.content_length = content_length; - req.content_provider = content_provider; - - if (content_type) { req.headers.emplace("Content-Type", content_type); } - - requests.emplace_back(std::move(req)); -} - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT -class SSLServer : public Server { -public: - SSLServer(const char *cert_path, const char *private_key_path, - const char *client_ca_cert_file_path = nullptr, - const char *client_ca_cert_dir_path = nullptr); - - SSLServer(X509 *cert, EVP_PKEY *private_key, - X509_STORE *client_ca_cert_store = nullptr); - - ~SSLServer() override; - - bool is_valid() const override; - -private: - bool process_and_close_socket(socket_t sock) override; - - SSL_CTX *ctx_; - std::mutex ctx_mutex_; -}; - -class SSLClient : public Client { -public: - explicit SSLClient(const std::string &host); - - explicit SSLClient(const std::string &host, int port); - - explicit SSLClient(const std::string &host, int port, - const std::string &client_cert_path, - const std::string &client_key_path); - - explicit SSLClient(const std::string &host, int port, X509 *client_cert, - EVP_PKEY *client_key); - - ~SSLClient() override; - - bool is_valid() const override; - - void set_ca_cert_path(const char *ca_cert_file_path, - const char *ca_cert_dir_path = nullptr); - - void set_ca_cert_store(X509_STORE *ca_cert_store); - - void enable_server_certificate_verification(bool enabled); - - long get_openssl_verify_result() const; - - SSL_CTX *ssl_context() const; - -private: - bool process_and_close_socket( - socket_t sock, size_t request_count, - std::function - callback) override; - bool is_ssl() const override; - - bool verify_host(X509 *server_cert) const; - bool verify_host_with_subject_alt_name(X509 *server_cert) const; - bool verify_host_with_common_name(X509 *server_cert) const; - bool check_host_name(const char *pattern, size_t pattern_len) const; - - SSL_CTX *ctx_; - std::mutex ctx_mutex_; - std::vector host_components_; - - std::string ca_cert_file_path_; - std::string ca_cert_dir_path_; - X509_STORE *ca_cert_store_ = nullptr; - bool server_certificate_verification_ = false; - long verify_result_ = 0; -}; -#endif - -class Client2 { -public: - explicit Client2(const char *scheme_host_port) - : Client2(scheme_host_port, std::string(), std::string()) {} - - explicit Client2(const char *scheme_host_port, - const std::string &client_cert_path, - const std::string &client_key_path) { - const static std::regex re(R"(^(https?)://([^:/?#]+)(?::(\d+))?)"); - - std::cmatch m; - if (std::regex_match(scheme_host_port, m, re)) { - auto scheme = m[1].str(); - auto host = m[2].str(); - auto port_str = m[3].str(); - - auto port = !port_str.empty() ? std::stoi(port_str) - : (scheme == "https" ? 443 : 80); - - if (scheme == "https") { -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - is_ssl_ = true; - cli_ = std::make_shared(host.c_str(), port, client_cert_path, - client_key_path); -#endif - } else { - cli_ = std::make_shared(host.c_str(), port, client_cert_path, - client_key_path); - } - } - } - - ~Client2() {} - - bool is_valid() const { return cli_ != nullptr; } - - std::shared_ptr Get(const char *path) { return cli_->Get(path); } - - std::shared_ptr Get(const char *path, const Headers &headers) { - return cli_->Get(path, headers); - } - - std::shared_ptr Get(const char *path, Progress progress) { - return cli_->Get(path, progress); - } - - std::shared_ptr Get(const char *path, const Headers &headers, - Progress progress) { - return cli_->Get(path, headers, progress); - } - - std::shared_ptr Get(const char *path, - ContentReceiver content_receiver) { - return cli_->Get(path, content_receiver); - } - - std::shared_ptr Get(const char *path, const Headers &headers, - ContentReceiver content_receiver) { - return cli_->Get(path, headers, content_receiver); - } - - std::shared_ptr - Get(const char *path, ContentReceiver content_receiver, Progress progress) { - return cli_->Get(path, content_receiver, progress); - } - - std::shared_ptr Get(const char *path, const Headers &headers, - ContentReceiver content_receiver, - Progress progress) { - return cli_->Get(path, headers, content_receiver, progress); - } - - std::shared_ptr Get(const char *path, const Headers &headers, - ResponseHandler response_handler, - ContentReceiver content_receiver) { - return cli_->Get(path, headers, response_handler, content_receiver); - } - - std::shared_ptr Get(const char *path, const Headers &headers, - ResponseHandler response_handler, - ContentReceiver content_receiver, - Progress progress) { - return cli_->Get(path, headers, response_handler, content_receiver, - progress); - } - - std::shared_ptr Head(const char *path) { return cli_->Head(path); } - - std::shared_ptr Head(const char *path, const Headers &headers) { - return cli_->Head(path, headers); - } - - std::shared_ptr Post(const char *path) { return cli_->Post(path); } - - std::shared_ptr Post(const char *path, const std::string &body, - const char *content_type) { - return cli_->Post(path, body, content_type); - } - - std::shared_ptr Post(const char *path, const Headers &headers, - const std::string &body, - const char *content_type) { - return cli_->Post(path, headers, body, content_type); - } - - std::shared_ptr Post(const char *path, size_t content_length, - ContentProvider content_provider, - const char *content_type) { - return cli_->Post(path, content_length, content_provider, content_type); - } - - std::shared_ptr Post(const char *path, const Headers &headers, - size_t content_length, - ContentProvider content_provider, - const char *content_type) { - return cli_->Post(path, headers, content_length, content_provider, - content_type); - } - - std::shared_ptr Post(const char *path, const Params ¶ms) { - return cli_->Post(path, params); - } - - std::shared_ptr Post(const char *path, const Headers &headers, - const Params ¶ms) { - return cli_->Post(path, headers, params); - } - - std::shared_ptr Post(const char *path, - const MultipartFormDataItems &items) { - return cli_->Post(path, items); - } - - std::shared_ptr Post(const char *path, const Headers &headers, - const MultipartFormDataItems &items) { - return cli_->Post(path, headers, items); - } - - std::shared_ptr Put(const char *path) { return cli_->Put(path); } - - std::shared_ptr Put(const char *path, const std::string &body, - const char *content_type) { - return cli_->Put(path, body, content_type); - } - - std::shared_ptr Put(const char *path, const Headers &headers, - const std::string &body, - const char *content_type) { - return cli_->Put(path, headers, body, content_type); - } - - std::shared_ptr Put(const char *path, size_t content_length, - ContentProvider content_provider, - const char *content_type) { - return cli_->Put(path, content_length, content_provider, content_type); - } - - std::shared_ptr Put(const char *path, const Headers &headers, - size_t content_length, - ContentProvider content_provider, - const char *content_type) { - return cli_->Put(path, headers, content_length, content_provider, - content_type); - } - - std::shared_ptr Put(const char *path, const Params ¶ms) { - return cli_->Put(path, params); - } - - std::shared_ptr Put(const char *path, const Headers &headers, - const Params ¶ms) { - return cli_->Put(path, headers, params); - } - - std::shared_ptr Patch(const char *path, const std::string &body, - const char *content_type) { - return cli_->Patch(path, body, content_type); - } - - std::shared_ptr Patch(const char *path, const Headers &headers, - const std::string &body, - const char *content_type) { - return cli_->Patch(path, headers, body, content_type); - } - - std::shared_ptr Patch(const char *path, size_t content_length, - ContentProvider content_provider, - const char *content_type) { - return cli_->Patch(path, content_length, content_provider, content_type); - } - - std::shared_ptr Patch(const char *path, const Headers &headers, - size_t content_length, - ContentProvider content_provider, - const char *content_type) { - return cli_->Patch(path, headers, content_length, content_provider, - content_type); - } - - std::shared_ptr Delete(const char *path) { - return cli_->Delete(path); - } - - std::shared_ptr Delete(const char *path, const std::string &body, - const char *content_type) { - return cli_->Delete(path, body, content_type); - } - - std::shared_ptr Delete(const char *path, const Headers &headers) { - return cli_->Delete(path, headers); - } - - std::shared_ptr Delete(const char *path, const Headers &headers, - const std::string &body, - const char *content_type) { - return cli_->Delete(path, headers, body, content_type); - } - - std::shared_ptr Options(const char *path) { - return cli_->Options(path); - } - - std::shared_ptr Options(const char *path, const Headers &headers) { - return cli_->Options(path, headers); - } - - bool send(const Request &req, Response &res) { return cli_->send(req, res); } - - bool send(const std::vector &requests, - std::vector &responses) { - return cli_->send(requests, responses); - } - - void stop() { cli_->stop(); } - - Client2 &set_connection_timeout(time_t sec, time_t usec) { - cli_->set_connection_timeout(sec, usec); - return *this; - } - - Client2 &set_read_timeout(time_t sec, time_t usec) { - cli_->set_read_timeout(sec, usec); - return *this; - } - - Client2 &set_keep_alive_max_count(size_t count) { - cli_->set_keep_alive_max_count(count); - return *this; - } - - Client2 &set_basic_auth(const char *username, const char *password) { - cli_->set_basic_auth(username, password); - return *this; - } - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - Client2 &set_digest_auth(const char *username, const char *password) { - cli_->set_digest_auth(username, password); - return *this; - } -#endif - - Client2 &set_follow_location(bool on) { - cli_->set_follow_location(on); - return *this; - } - - Client2 &set_compress(bool on) { - cli_->set_compress(on); - return *this; - } - - Client2 &set_decompress(bool on) { - cli_->set_decompress(on); - return *this; - } - - Client2 &set_interface(const char *intf) { - cli_->set_interface(intf); - return *this; - } - - Client2 &set_proxy(const char *host, int port) { - cli_->set_proxy(host, port); - return *this; - } - - Client2 &set_proxy_basic_auth(const char *username, const char *password) { - cli_->set_proxy_basic_auth(username, password); - return *this; - } - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - Client2 &set_proxy_digest_auth(const char *username, const char *password) { - cli_->set_proxy_digest_auth(username, password); - return *this; - } -#endif - - Client2 &set_logger(Logger logger) { - cli_->set_logger(logger); - return *this; - } - - // SSL -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - Client2 &set_ca_cert_path(const char *ca_cert_file_path, - const char *ca_cert_dir_path = nullptr) { - if (is_ssl_) { - static_cast(*cli_).set_ca_cert_path(ca_cert_file_path, - ca_cert_dir_path); - } - return *this; - } - - Client2 &set_ca_cert_store(X509_STORE *ca_cert_store) { - if (is_ssl_) { - static_cast(*cli_).set_ca_cert_store(ca_cert_store); - } - return *this; - } - - Client2 &enable_server_certificate_verification(bool enabled) { - if (is_ssl_) { - static_cast(*cli_).enable_server_certificate_verification( - enabled); - } - return *this; - } - - long get_openssl_verify_result() const { - if (is_ssl_) { - return static_cast(*cli_).get_openssl_verify_result(); - } - return -1; // NOTE: -1 doesn't match any of X509_V_ERR_??? - } - - SSL_CTX *ssl_context() const { - if (is_ssl_) { return static_cast(*cli_).ssl_context(); } - return nullptr; - } -#endif - -private: - bool is_ssl_ = false; - std::shared_ptr cli_; -}; - -// ---------------------------------------------------------------------------- - -/* - * Implementation - */ - -namespace detail { - -inline bool is_hex(char c, int &v) { - if (0x20 <= c && isdigit(c)) { - v = c - '0'; - return true; - } else if ('A' <= c && c <= 'F') { - v = c - 'A' + 10; - return true; - } else if ('a' <= c && c <= 'f') { - v = c - 'a' + 10; - return true; - } - return false; -} - -inline bool from_hex_to_i(const std::string &s, size_t i, size_t cnt, - int &val) { - if (i >= s.size()) { return false; } - - val = 0; - for (; cnt; i++, cnt--) { - if (!s[i]) { return false; } - int v = 0; - if (is_hex(s[i], v)) { - val = val * 16 + v; - } else { - return false; - } - } - return true; -} - -inline std::string from_i_to_hex(size_t n) { - const char *charset = "0123456789abcdef"; - std::string ret; - do { - ret = charset[n & 15] + ret; - n >>= 4; - } while (n > 0); - return ret; -} - -inline size_t to_utf8(int code, char *buff) { - if (code < 0x0080) { - buff[0] = (code & 0x7F); - return 1; - } else if (code < 0x0800) { - buff[0] = static_cast(0xC0 | ((code >> 6) & 0x1F)); - buff[1] = static_cast(0x80 | (code & 0x3F)); - return 2; - } else if (code < 0xD800) { - buff[0] = static_cast(0xE0 | ((code >> 12) & 0xF)); - buff[1] = static_cast(0x80 | ((code >> 6) & 0x3F)); - buff[2] = static_cast(0x80 | (code & 0x3F)); - return 3; - } else if (code < 0xE000) { // D800 - DFFF is invalid... - return 0; - } else if (code < 0x10000) { - buff[0] = static_cast(0xE0 | ((code >> 12) & 0xF)); - buff[1] = static_cast(0x80 | ((code >> 6) & 0x3F)); - buff[2] = static_cast(0x80 | (code & 0x3F)); - return 3; - } else if (code < 0x110000) { - buff[0] = static_cast(0xF0 | ((code >> 18) & 0x7)); - buff[1] = static_cast(0x80 | ((code >> 12) & 0x3F)); - buff[2] = static_cast(0x80 | ((code >> 6) & 0x3F)); - buff[3] = static_cast(0x80 | (code & 0x3F)); - return 4; - } - - // NOTREACHED - return 0; -} - -// NOTE: This code came up with the following stackoverflow post: -// https://stackoverflow.com/questions/180947/base64-decode-snippet-in-c -inline std::string base64_encode(const std::string &in) { - static const auto lookup = - "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; - - std::string out; - out.reserve(in.size()); - - int val = 0; - int valb = -6; - - for (auto c : in) { - val = (val << 8) + static_cast(c); - valb += 8; - while (valb >= 0) { - out.push_back(lookup[(val >> valb) & 0x3F]); - valb -= 6; - } - } - - if (valb > -6) { out.push_back(lookup[((val << 8) >> (valb + 8)) & 0x3F]); } - - while (out.size() % 4) { - out.push_back('='); - } - - return out; -} - -inline bool is_file(const std::string &path) { - struct stat st; - return stat(path.c_str(), &st) >= 0 && S_ISREG(st.st_mode); -} - -inline bool is_dir(const std::string &path) { - struct stat st; - return stat(path.c_str(), &st) >= 0 && S_ISDIR(st.st_mode); -} - -inline bool is_valid_path(const std::string &path) { - size_t level = 0; - size_t i = 0; - - // Skip slash - while (i < path.size() && path[i] == '/') { - i++; - } - - while (i < path.size()) { - // Read component - auto beg = i; - while (i < path.size() && path[i] != '/') { - i++; - } - - auto len = i - beg; - assert(len > 0); - - if (!path.compare(beg, len, ".")) { - ; - } else if (!path.compare(beg, len, "..")) { - if (level == 0) { return false; } - level--; - } else { - level++; - } - - // Skip slash - while (i < path.size() && path[i] == '/') { - i++; - } - } - - return true; -} - -inline void read_file(const std::string &path, std::string &out) { - std::ifstream fs(path, std::ios_base::binary); - fs.seekg(0, std::ios_base::end); - auto size = fs.tellg(); - fs.seekg(0); - out.resize(static_cast(size)); - fs.read(&out[0], size); -} - -inline std::string file_extension(const std::string &path) { - std::smatch m; - static auto re = std::regex("\\.([a-zA-Z0-9]+)$"); - if (std::regex_search(path, m, re)) { return m[1].str(); } - return std::string(); -} - -template void split(const char *b, const char *e, char d, Fn fn) { - int i = 0; - int beg = 0; - - while (e ? (b + i != e) : (b[i] != '\0')) { - if (b[i] == d) { - fn(&b[beg], &b[i]); - beg = i + 1; - } - i++; - } - - if (i) { fn(&b[beg], &b[i]); } -} - -// NOTE: until the read size reaches `fixed_buffer_size`, use `fixed_buffer` -// to store data. The call can set memory on stack for performance. -class stream_line_reader { -public: - stream_line_reader(Stream &strm, char *fixed_buffer, size_t fixed_buffer_size) - : strm_(strm), fixed_buffer_(fixed_buffer), - fixed_buffer_size_(fixed_buffer_size) {} - - const char *ptr() const { - if (glowable_buffer_.empty()) { - return fixed_buffer_; - } else { - return glowable_buffer_.data(); - } - } - - size_t size() const { - if (glowable_buffer_.empty()) { - return fixed_buffer_used_size_; - } else { - return glowable_buffer_.size(); - } - } - - bool end_with_crlf() const { - auto end = ptr() + size(); - return size() >= 2 && end[-2] == '\r' && end[-1] == '\n'; - } - - bool getline() { - fixed_buffer_used_size_ = 0; - glowable_buffer_.clear(); - - for (size_t i = 0;; i++) { - char byte; - auto n = strm_.read(&byte, 1); - - if (n < 0) { - return false; - } else if (n == 0) { - if (i == 0) { - return false; - } else { - break; - } - } - - append(byte); - - if (byte == '\n') { break; } - } - - return true; - } - -private: - void append(char c) { - if (fixed_buffer_used_size_ < fixed_buffer_size_ - 1) { - fixed_buffer_[fixed_buffer_used_size_++] = c; - fixed_buffer_[fixed_buffer_used_size_] = '\0'; - } else { - if (glowable_buffer_.empty()) { - assert(fixed_buffer_[fixed_buffer_used_size_] == '\0'); - glowable_buffer_.assign(fixed_buffer_, fixed_buffer_used_size_); - } - glowable_buffer_ += c; - } - } - - Stream &strm_; - char *fixed_buffer_; - const size_t fixed_buffer_size_; - size_t fixed_buffer_used_size_ = 0; - std::string glowable_buffer_; -}; - -inline int close_socket(socket_t sock) { -#ifdef _WIN32 - return closesocket(sock); -#else - return close(sock); -#endif -} - -template inline ssize_t handle_EINTR(T fn) { - ssize_t res = false; - while (true) { - res = fn(); - if (res < 0 && errno == EINTR) { continue; } - break; - } - return res; -} - -inline ssize_t select_read(socket_t sock, time_t sec, time_t usec) { -#ifdef CPPHTTPLIB_USE_POLL - struct pollfd pfd_read; - pfd_read.fd = sock; - pfd_read.events = POLLIN; - - auto timeout = static_cast(sec * 1000 + usec / 1000); - - return handle_EINTR([&]() { return poll(&pfd_read, 1, timeout); }); -#else - fd_set fds; - FD_ZERO(&fds); - FD_SET(sock, &fds); - - timeval tv; - tv.tv_sec = static_cast(sec); - tv.tv_usec = static_cast(usec); - - return handle_EINTR([&]() { - return select(static_cast(sock + 1), &fds, nullptr, nullptr, &tv); - }); -#endif -} - -inline ssize_t select_write(socket_t sock, time_t sec, time_t usec) { -#ifdef CPPHTTPLIB_USE_POLL - struct pollfd pfd_read; - pfd_read.fd = sock; - pfd_read.events = POLLOUT; - - auto timeout = static_cast(sec * 1000 + usec / 1000); - - return handle_EINTR([&]() { return poll(&pfd_read, 1, timeout); }); -#else - fd_set fds; - FD_ZERO(&fds); - FD_SET(sock, &fds); - - timeval tv; - tv.tv_sec = static_cast(sec); - tv.tv_usec = static_cast(usec); - - return handle_EINTR([&]() { - return select(static_cast(sock + 1), nullptr, &fds, nullptr, &tv); - }); -#endif -} - -inline bool wait_until_socket_is_ready(socket_t sock, time_t sec, time_t usec) { -#ifdef CPPHTTPLIB_USE_POLL - struct pollfd pfd_read; - pfd_read.fd = sock; - pfd_read.events = POLLIN | POLLOUT; - - auto timeout = static_cast(sec * 1000 + usec / 1000); - - auto poll_res = handle_EINTR([&]() { return poll(&pfd_read, 1, timeout); }); - - if (poll_res > 0 && pfd_read.revents & (POLLIN | POLLOUT)) { - int error = 0; - socklen_t len = sizeof(error); - auto res = getsockopt(sock, SOL_SOCKET, SO_ERROR, - reinterpret_cast(&error), &len); - return res >= 0 && !error; - } - return false; -#else - fd_set fdsr; - FD_ZERO(&fdsr); - FD_SET(sock, &fdsr); - - auto fdsw = fdsr; - auto fdse = fdsr; - - timeval tv; - tv.tv_sec = static_cast(sec); - tv.tv_usec = static_cast(usec); - - auto ret = handle_EINTR([&]() { - return select(static_cast(sock + 1), &fdsr, &fdsw, &fdse, &tv); - }); - - if (ret > 0 && (FD_ISSET(sock, &fdsr) || FD_ISSET(sock, &fdsw))) { - int error = 0; - socklen_t len = sizeof(error); - return getsockopt(sock, SOL_SOCKET, SO_ERROR, - reinterpret_cast(&error), &len) >= 0 && - !error; - } - return false; -#endif -} - -class SocketStream : public Stream { -public: - SocketStream(socket_t sock, time_t read_timeout_sec, time_t read_timeout_usec, - time_t write_timeout_sec, time_t write_timeout_usec); - ~SocketStream() override; - - bool is_readable() const override; - bool is_writable() const override; - ssize_t read(char *ptr, size_t size) override; - ssize_t write(const char *ptr, size_t size) override; - void get_remote_ip_and_port(std::string &ip, int &port) const override; - -private: - socket_t sock_; - time_t read_timeout_sec_; - time_t read_timeout_usec_; - time_t write_timeout_sec_; - time_t write_timeout_usec_; -}; - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT -class SSLSocketStream : public Stream { -public: - SSLSocketStream(socket_t sock, SSL *ssl, time_t read_timeout_sec, - time_t read_timeout_usec, time_t write_timeout_sec, - time_t write_timeout_usec); - ~SSLSocketStream() override; - - bool is_readable() const override; - bool is_writable() const override; - ssize_t read(char *ptr, size_t size) override; - ssize_t write(const char *ptr, size_t size) override; - void get_remote_ip_and_port(std::string &ip, int &port) const override; - -private: - socket_t sock_; - SSL *ssl_; - time_t read_timeout_sec_; - time_t read_timeout_usec_; - time_t write_timeout_sec_; - time_t write_timeout_usec_; -}; -#endif - -class BufferStream : public Stream { -public: - BufferStream() = default; - ~BufferStream() override = default; - - bool is_readable() const override; - bool is_writable() const override; - ssize_t read(char *ptr, size_t size) override; - ssize_t write(const char *ptr, size_t size) override; - void get_remote_ip_and_port(std::string &ip, int &port) const override; - - const std::string &get_buffer() const; - -private: - std::string buffer; - size_t position = 0; -}; - -template -inline bool process_socket(bool is_client_request, socket_t sock, - size_t keep_alive_max_count, time_t read_timeout_sec, - time_t read_timeout_usec, time_t write_timeout_sec, - time_t write_timeout_usec, T callback) { - assert(keep_alive_max_count > 0); - - auto ret = false; - - if (keep_alive_max_count > 1) { - auto count = keep_alive_max_count; - while (count > 0 && - (is_client_request || - select_read(sock, CPPHTTPLIB_KEEPALIVE_TIMEOUT_SECOND, - CPPHTTPLIB_KEEPALIVE_TIMEOUT_USECOND) > 0)) { - SocketStream strm(sock, read_timeout_sec, read_timeout_usec, - write_timeout_sec, write_timeout_usec); - auto last_connection = count == 1; - auto connection_close = false; - - ret = callback(strm, last_connection, connection_close); - if (!ret || connection_close) { break; } - - count--; - } - } else { // keep_alive_max_count is 0 or 1 - SocketStream strm(sock, read_timeout_sec, read_timeout_usec, - write_timeout_sec, write_timeout_usec); - auto dummy_connection_close = false; - ret = callback(strm, true, dummy_connection_close); - } - - return ret; -} - -template -inline bool -process_and_close_socket(bool is_client_request, socket_t sock, - size_t keep_alive_max_count, time_t read_timeout_sec, - time_t read_timeout_usec, time_t write_timeout_sec, - time_t write_timeout_usec, T callback) { - auto ret = process_socket(is_client_request, sock, keep_alive_max_count, - read_timeout_sec, read_timeout_usec, - write_timeout_sec, write_timeout_usec, callback); - close_socket(sock); - return ret; -} - -inline int shutdown_socket(socket_t sock) { -#ifdef _WIN32 - return shutdown(sock, SD_BOTH); -#else - return shutdown(sock, SHUT_RDWR); -#endif -} - -template -socket_t create_socket(const char *host, int port, Fn fn, - int socket_flags = 0) { - // Get address info - struct addrinfo hints; - struct addrinfo *result; - - memset(&hints, 0, sizeof(struct addrinfo)); - hints.ai_family = AF_UNSPEC; - hints.ai_socktype = SOCK_STREAM; - hints.ai_flags = socket_flags; - hints.ai_protocol = 0; - - auto service = std::to_string(port); - - if (getaddrinfo(host, service.c_str(), &hints, &result)) { - return INVALID_SOCKET; - } - - for (auto rp = result; rp; rp = rp->ai_next) { - // Create a socket -#ifdef _WIN32 - auto sock = WSASocketW(rp->ai_family, rp->ai_socktype, rp->ai_protocol, - nullptr, 0, WSA_FLAG_NO_HANDLE_INHERIT); - /** - * Since the WSA_FLAG_NO_HANDLE_INHERIT is only supported on Windows 7 SP1 - * and above the socket creation fails on older Windows Systems. - * - * Let's try to create a socket the old way in this case. - * - * Reference: - * https://docs.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-wsasocketa - * - * WSA_FLAG_NO_HANDLE_INHERIT: - * This flag is supported on Windows 7 with SP1, Windows Server 2008 R2 with - * SP1, and later - * - */ - if (sock == INVALID_SOCKET) { - sock = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol); - } -#else - auto sock = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol); -#endif - if (sock == INVALID_SOCKET) { continue; } - -#ifndef _WIN32 - if (fcntl(sock, F_SETFD, FD_CLOEXEC) == -1) { continue; } -#endif - - // Make 'reuse address' option available - int yes = 1; - setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, reinterpret_cast(&yes), - sizeof(yes)); - -#ifdef SO_REUSEPORT - setsockopt(sock, SOL_SOCKET, SO_REUSEPORT, reinterpret_cast(&yes), - sizeof(yes)); -#endif - - if (rp->ai_family == AF_INET6) { - int no = 0; - setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY, reinterpret_cast(&no), - sizeof(no)); - } - - // bind or connect - if (fn(sock, *rp)) { - freeaddrinfo(result); - return sock; - } - - close_socket(sock); - } - - freeaddrinfo(result); - return INVALID_SOCKET; -} - -inline void set_nonblocking(socket_t sock, bool nonblocking) { -#ifdef _WIN32 - auto flags = nonblocking ? 1UL : 0UL; - ioctlsocket(sock, FIONBIO, &flags); -#else - auto flags = fcntl(sock, F_GETFL, 0); - fcntl(sock, F_SETFL, - nonblocking ? (flags | O_NONBLOCK) : (flags & (~O_NONBLOCK))); -#endif -} - -inline bool is_connection_error() { -#ifdef _WIN32 - return WSAGetLastError() != WSAEWOULDBLOCK; -#else - return errno != EINPROGRESS; -#endif -} - -inline bool bind_ip_address(socket_t sock, const char *host) { - struct addrinfo hints; - struct addrinfo *result; - - memset(&hints, 0, sizeof(struct addrinfo)); - hints.ai_family = AF_UNSPEC; - hints.ai_socktype = SOCK_STREAM; - hints.ai_protocol = 0; - - if (getaddrinfo(host, "0", &hints, &result)) { return false; } - - auto ret = false; - for (auto rp = result; rp; rp = rp->ai_next) { - const auto &ai = *rp; - if (!::bind(sock, ai.ai_addr, static_cast(ai.ai_addrlen))) { - ret = true; - break; - } - } - - freeaddrinfo(result); - return ret; -} - -#ifndef _WIN32 -inline std::string if2ip(const std::string &ifn) { - struct ifaddrs *ifap; - getifaddrs(&ifap); - for (auto ifa = ifap; ifa; ifa = ifa->ifa_next) { - if (ifa->ifa_addr && ifn == ifa->ifa_name) { - if (ifa->ifa_addr->sa_family == AF_INET) { - auto sa = reinterpret_cast(ifa->ifa_addr); - char buf[INET_ADDRSTRLEN]; - if (inet_ntop(AF_INET, &sa->sin_addr, buf, INET_ADDRSTRLEN)) { - freeifaddrs(ifap); - return std::string(buf, INET_ADDRSTRLEN); - } - } - } - } - freeifaddrs(ifap); - return std::string(); -} -#endif - -inline socket_t create_client_socket(const char *host, int port, - time_t timeout_sec, time_t timeout_usec, - const std::string &intf) { - return create_socket( - host, port, [&](socket_t sock, struct addrinfo &ai) -> bool { - if (!intf.empty()) { -#ifndef _WIN32 - auto ip = if2ip(intf); - if (ip.empty()) { ip = intf; } - if (!bind_ip_address(sock, ip.c_str())) { return false; } -#endif - } - - set_nonblocking(sock, true); - - auto ret = - ::connect(sock, ai.ai_addr, static_cast(ai.ai_addrlen)); - if (ret < 0) { - if (is_connection_error() || - !wait_until_socket_is_ready(sock, timeout_sec, timeout_usec)) { - close_socket(sock); - return false; - } - } - - set_nonblocking(sock, false); - return true; - }); -} - -inline void get_remote_ip_and_port(const struct sockaddr_storage &addr, - socklen_t addr_len, std::string &ip, - int &port) { - if (addr.ss_family == AF_INET) { - port = ntohs(reinterpret_cast(&addr)->sin_port); - } else if (addr.ss_family == AF_INET6) { - port = - ntohs(reinterpret_cast(&addr)->sin6_port); - } - - std::array ipstr{}; - if (!getnameinfo(reinterpret_cast(&addr), addr_len, - ipstr.data(), static_cast(ipstr.size()), nullptr, - 0, NI_NUMERICHOST)) { - ip = ipstr.data(); - } -} - -inline void get_remote_ip_and_port(socket_t sock, std::string &ip, int &port) { - struct sockaddr_storage addr; - socklen_t addr_len = sizeof(addr); - - if (!getpeername(sock, reinterpret_cast(&addr), - &addr_len)) { - get_remote_ip_and_port(addr, addr_len, ip, port); - } -} - -inline const char * -find_content_type(const std::string &path, - const std::map &user_data) { - auto ext = file_extension(path); - - auto it = user_data.find(ext); - if (it != user_data.end()) { return it->second.c_str(); } - - if (ext == "txt") { - return "text/plain"; - } else if (ext == "html" || ext == "htm") { - return "text/html"; - } else if (ext == "css") { - return "text/css"; - } else if (ext == "jpeg" || ext == "jpg") { - return "image/jpg"; - } else if (ext == "png") { - return "image/png"; - } else if (ext == "gif") { - return "image/gif"; - } else if (ext == "svg") { - return "image/svg+xml"; - } else if (ext == "ico") { - return "image/x-icon"; - } else if (ext == "json") { - return "application/json"; - } else if (ext == "pdf") { - return "application/pdf"; - } else if (ext == "js") { - return "application/javascript"; - } else if (ext == "wasm") { - return "application/wasm"; - } else if (ext == "xml") { - return "application/xml"; - } else if (ext == "xhtml") { - return "application/xhtml+xml"; - } - return nullptr; -} - -inline const char *status_message(int status) { - switch (status) { - case 100: return "Continue"; - case 101: return "Switching Protocol"; - case 102: return "Processing"; - case 103: return "Early Hints"; - case 200: return "OK"; - case 201: return "Created"; - case 202: return "Accepted"; - case 203: return "Non-Authoritative Information"; - case 204: return "No Content"; - case 205: return "Reset Content"; - case 206: return "Partial Content"; - case 207: return "Multi-Status"; - case 208: return "Already Reported"; - case 226: return "IM Used"; - case 300: return "Multiple Choice"; - case 301: return "Moved Permanently"; - case 302: return "Found"; - case 303: return "See Other"; - case 304: return "Not Modified"; - case 305: return "Use Proxy"; - case 306: return "unused"; - case 307: return "Temporary Redirect"; - case 308: return "Permanent Redirect"; - case 400: return "Bad Request"; - case 401: return "Unauthorized"; - case 402: return "Payment Required"; - case 403: return "Forbidden"; - case 404: return "Not Found"; - case 405: return "Method Not Allowed"; - case 406: return "Not Acceptable"; - case 407: return "Proxy Authentication Required"; - case 408: return "Request Timeout"; - case 409: return "Conflict"; - case 410: return "Gone"; - case 411: return "Length Required"; - case 412: return "Precondition Failed"; - case 413: return "Payload Too Large"; - case 414: return "URI Too Long"; - case 415: return "Unsupported Media Type"; - case 416: return "Range Not Satisfiable"; - case 417: return "Expectation Failed"; - case 418: return "I'm a teapot"; - case 421: return "Misdirected Request"; - case 422: return "Unprocessable Entity"; - case 423: return "Locked"; - case 424: return "Failed Dependency"; - case 425: return "Too Early"; - case 426: return "Upgrade Required"; - case 428: return "Precondition Required"; - case 429: return "Too Many Requests"; - case 431: return "Request Header Fields Too Large"; - case 451: return "Unavailable For Legal Reasons"; - case 501: return "Not Implemented"; - case 502: return "Bad Gateway"; - case 503: return "Service Unavailable"; - case 504: return "Gateway Timeout"; - case 505: return "HTTP Version Not Supported"; - case 506: return "Variant Also Negotiates"; - case 507: return "Insufficient Storage"; - case 508: return "Loop Detected"; - case 510: return "Not Extended"; - case 511: return "Network Authentication Required"; - - default: - case 500: return "Internal Server Error"; - } -} - -#ifdef CPPHTTPLIB_ZLIB_SUPPORT -inline bool can_compress(const std::string &content_type) { - return !content_type.find("text/") || content_type == "image/svg+xml" || - content_type == "application/javascript" || - content_type == "application/json" || - content_type == "application/xml" || - content_type == "application/xhtml+xml"; -} - -inline bool compress(std::string &content) { - z_stream strm; - strm.zalloc = Z_NULL; - strm.zfree = Z_NULL; - strm.opaque = Z_NULL; - - auto ret = deflateInit2(&strm, Z_DEFAULT_COMPRESSION, Z_DEFLATED, 31, 8, - Z_DEFAULT_STRATEGY); - if (ret != Z_OK) { return false; } - - strm.avail_in = static_cast(content.size()); - strm.next_in = - const_cast(reinterpret_cast(content.data())); - - std::string compressed; - - std::array buff{}; - do { - strm.avail_out = buff.size(); - strm.next_out = reinterpret_cast(buff.data()); - ret = deflate(&strm, Z_FINISH); - assert(ret != Z_STREAM_ERROR); - compressed.append(buff.data(), buff.size() - strm.avail_out); - } while (strm.avail_out == 0); - - assert(ret == Z_STREAM_END); - assert(strm.avail_in == 0); - - content.swap(compressed); - - deflateEnd(&strm); - return true; -} - -class decompressor { -public: - decompressor() { - std::memset(&strm, 0, sizeof(strm)); - strm.zalloc = Z_NULL; - strm.zfree = Z_NULL; - strm.opaque = Z_NULL; - - // 15 is the value of wbits, which should be at the maximum possible value - // to ensure that any gzip stream can be decoded. The offset of 32 specifies - // that the stream type should be automatically detected either gzip or - // deflate. - is_valid_ = inflateInit2(&strm, 32 + 15) == Z_OK; - } - - ~decompressor() { inflateEnd(&strm); } - - bool is_valid() const { return is_valid_; } - - template - bool decompress(const char *data, size_t data_length, T callback) { - int ret = Z_OK; - - strm.avail_in = static_cast(data_length); - strm.next_in = const_cast(reinterpret_cast(data)); - - std::array buff{}; - do { - strm.avail_out = buff.size(); - strm.next_out = reinterpret_cast(buff.data()); - - ret = inflate(&strm, Z_NO_FLUSH); - assert(ret != Z_STREAM_ERROR); - switch (ret) { - case Z_NEED_DICT: - case Z_DATA_ERROR: - case Z_MEM_ERROR: inflateEnd(&strm); return false; - } - - if (!callback(buff.data(), buff.size() - strm.avail_out)) { - return false; - } - } while (strm.avail_out == 0); - - return ret == Z_OK || ret == Z_STREAM_END; - } - -private: - bool is_valid_; - z_stream strm; -}; -#endif - -inline bool has_header(const Headers &headers, const char *key) { - return headers.find(key) != headers.end(); -} - -inline const char *get_header_value(const Headers &headers, const char *key, - size_t id = 0, const char *def = nullptr) { - auto it = headers.find(key); - std::advance(it, static_cast(id)); - if (it != headers.end()) { return it->second.c_str(); } - return def; -} - -inline uint64_t get_header_value_uint64(const Headers &headers, const char *key, - uint64_t def = 0) { - auto it = headers.find(key); - if (it != headers.end()) { - return std::strtoull(it->second.data(), nullptr, 10); - } - return def; -} - -inline void parse_header(const char *beg, const char *end, Headers &headers) { - auto p = beg; - while (p < end && *p != ':') { - p++; - } - if (p < end) { - auto key_end = p; - p++; // skip ':' - while (p < end && (*p == ' ' || *p == '\t')) { - p++; - } - if (p < end) { - auto val_begin = p; - while (p < end) { - p++; - } - headers.emplace(std::string(beg, key_end), std::string(val_begin, end)); - } - } -} - -inline bool read_headers(Stream &strm, Headers &headers) { - const auto bufsiz = 2048; - char buf[bufsiz]; - stream_line_reader line_reader(strm, buf, bufsiz); - - for (;;) { - if (!line_reader.getline()) { return false; } - - // Check if the line ends with CRLF. - if (line_reader.end_with_crlf()) { - // Blank line indicates end of headers. - if (line_reader.size() == 2) { break; } - } else { - continue; // Skip invalid line. - } - - // Skip trailing spaces and tabs. - auto end = line_reader.ptr() + line_reader.size() - 2; - while (line_reader.ptr() < end && (end[-1] == ' ' || end[-1] == '\t')) { - end--; - } - - parse_header(line_reader.ptr(), end, headers); - } - - return true; -} - -inline bool read_content_with_length(Stream &strm, uint64_t len, - Progress progress, ContentReceiver out) { - char buf[CPPHTTPLIB_RECV_BUFSIZ]; - - uint64_t r = 0; - while (r < len) { - auto read_len = static_cast(len - r); - auto n = strm.read(buf, (std::min)(read_len, CPPHTTPLIB_RECV_BUFSIZ)); - if (n <= 0) { return false; } - - if (!out(buf, static_cast(n))) { return false; } - - r += static_cast(n); - - if (progress) { - if (!progress(r, len)) { return false; } - } - } - - return true; -} - -inline void skip_content_with_length(Stream &strm, uint64_t len) { - char buf[CPPHTTPLIB_RECV_BUFSIZ]; - uint64_t r = 0; - while (r < len) { - auto read_len = static_cast(len - r); - auto n = strm.read(buf, (std::min)(read_len, CPPHTTPLIB_RECV_BUFSIZ)); - if (n <= 0) { return; } - r += static_cast(n); - } -} - -inline bool read_content_without_length(Stream &strm, ContentReceiver out) { - char buf[CPPHTTPLIB_RECV_BUFSIZ]; - for (;;) { - auto n = strm.read(buf, CPPHTTPLIB_RECV_BUFSIZ); - if (n < 0) { - return false; - } else if (n == 0) { - return true; - } - if (!out(buf, static_cast(n))) { return false; } - } - - return true; -} - -inline bool read_content_chunked(Stream &strm, ContentReceiver out) { - const auto bufsiz = 16; - char buf[bufsiz]; - - stream_line_reader line_reader(strm, buf, bufsiz); - - if (!line_reader.getline()) { return false; } - - unsigned long chunk_len; - while (true) { - char *end_ptr; - - chunk_len = std::strtoul(line_reader.ptr(), &end_ptr, 16); - - if (end_ptr == line_reader.ptr()) { return false; } - if (chunk_len == ULONG_MAX) { return false; } - - if (chunk_len == 0) { break; } - - if (!read_content_with_length(strm, chunk_len, nullptr, out)) { - return false; - } - - if (!line_reader.getline()) { return false; } - - if (strcmp(line_reader.ptr(), "\r\n")) { break; } - - if (!line_reader.getline()) { return false; } - } - - if (chunk_len == 0) { - // Reader terminator after chunks - if (!line_reader.getline() || strcmp(line_reader.ptr(), "\r\n")) - return false; - } - - return true; -} - -inline bool is_chunked_transfer_encoding(const Headers &headers) { - return !strcasecmp(get_header_value(headers, "Transfer-Encoding", 0, ""), - "chunked"); -} - -template -bool read_content(Stream &strm, T &x, size_t payload_max_length, int &status, - Progress progress, ContentReceiver receiver, - bool decompress) { - - ContentReceiver out = [&](const char *buf, size_t n) { - return receiver(buf, n); - }; - -#ifdef CPPHTTPLIB_ZLIB_SUPPORT - decompressor decompressor; -#endif - - if (decompress) { -#ifdef CPPHTTPLIB_ZLIB_SUPPORT - std::string content_encoding = x.get_header_value("Content-Encoding"); - if (content_encoding.find("gzip") != std::string::npos || - content_encoding.find("deflate") != std::string::npos) { - if (!decompressor.is_valid()) { - status = 500; - return false; - } - - out = [&](const char *buf, size_t n) { - return decompressor.decompress(buf, n, [&](const char *buf, size_t n) { - return receiver(buf, n); - }); - }; - } -#else - if (x.get_header_value("Content-Encoding") == "gzip") { - status = 415; - return false; - } -#endif - } - - auto ret = true; - auto exceed_payload_max_length = false; - - if (is_chunked_transfer_encoding(x.headers)) { - ret = read_content_chunked(strm, out); - } else if (!has_header(x.headers, "Content-Length")) { - ret = read_content_without_length(strm, out); - } else { - auto len = get_header_value_uint64(x.headers, "Content-Length", 0); - if (len > payload_max_length) { - exceed_payload_max_length = true; - skip_content_with_length(strm, len); - ret = false; - } else if (len > 0) { - ret = read_content_with_length(strm, len, progress, out); - } - } - - if (!ret) { status = exceed_payload_max_length ? 413 : 400; } - - return ret; -} - -template -inline ssize_t write_headers(Stream &strm, const T &info, - const Headers &headers) { - ssize_t write_len = 0; - for (const auto &x : info.headers) { - if (x.first == "EXCEPTION_WHAT") { continue; } - auto len = - strm.write_format("%s: %s\r\n", x.first.c_str(), x.second.c_str()); - if (len < 0) { return len; } - write_len += len; - } - for (const auto &x : headers) { - auto len = - strm.write_format("%s: %s\r\n", x.first.c_str(), x.second.c_str()); - if (len < 0) { return len; } - write_len += len; - } - auto len = strm.write("\r\n"); - if (len < 0) { return len; } - write_len += len; - return write_len; -} - -inline bool write_data(Stream &strm, const char *d, size_t l) { - size_t offset = 0; - while (offset < l) { - auto length = strm.write(d + offset, l - offset); - if (length < 0) { return false; } - offset += static_cast(length); - } - return true; -} - -inline ssize_t write_content(Stream &strm, ContentProvider content_provider, - size_t offset, size_t length) { - size_t begin_offset = offset; - size_t end_offset = offset + length; - - auto ok = true; - - DataSink data_sink; - data_sink.write = [&](const char *d, size_t l) { - if (ok) { - offset += l; - if (!write_data(strm, d, l)) { ok = false; } - } - }; - data_sink.is_writable = [&](void) { return ok && strm.is_writable(); }; - - while (ok && offset < end_offset) { - if (!content_provider(offset, end_offset - offset, data_sink)) { - return -1; - } - if (!ok) { return -1; } - } - - return static_cast(offset - begin_offset); -} - -template -inline ssize_t write_content_chunked(Stream &strm, - ContentProvider content_provider, - T is_shutting_down) { - size_t offset = 0; - auto data_available = true; - ssize_t total_written_length = 0; - - auto ok = true; - - DataSink data_sink; - data_sink.write = [&](const char *d, size_t l) { - if (ok) { - data_available = l > 0; - offset += l; - - // Emit chunked response header and footer for each chunk - auto chunk = from_i_to_hex(l) + "\r\n" + std::string(d, l) + "\r\n"; - if (write_data(strm, chunk.data(), chunk.size())) { - total_written_length += chunk.size(); - } else { - ok = false; - } - } - }; - data_sink.done = [&](void) { - data_available = false; - if (ok) { - static const std::string done_marker("0\r\n\r\n"); - if (write_data(strm, done_marker.data(), done_marker.size())) { - total_written_length += done_marker.size(); - } else { - ok = false; - } - } - }; - data_sink.is_writable = [&](void) { return ok && strm.is_writable(); }; - - while (data_available && !is_shutting_down()) { - if (!content_provider(offset, 0, data_sink)) { return -1; } - if (!ok) { return -1; } - } - - return total_written_length; -} - -template -inline bool redirect(T &cli, const Request &req, Response &res, - const std::string &path) { - Request new_req = req; - new_req.path = path; - new_req.redirect_count -= 1; - - if (res.status == 303 && (req.method != "GET" && req.method != "HEAD")) { - new_req.method = "GET"; - new_req.body.clear(); - new_req.headers.clear(); - } - - Response new_res; - - auto ret = cli.send(new_req, new_res); - if (ret) { res = new_res; } - return ret; -} - -inline std::string encode_url(const std::string &s) { - std::string result; - - for (size_t i = 0; s[i]; i++) { - switch (s[i]) { - case ' ': result += "%20"; break; - case '+': result += "%2B"; break; - case '\r': result += "%0D"; break; - case '\n': result += "%0A"; break; - case '\'': result += "%27"; break; - case ',': result += "%2C"; break; - // case ':': result += "%3A"; break; // ok? probably... - case ';': result += "%3B"; break; - default: - auto c = static_cast(s[i]); - if (c >= 0x80) { - result += '%'; - char hex[4]; - auto len = snprintf(hex, sizeof(hex) - 1, "%02X", c); - assert(len == 2); - result.append(hex, static_cast(len)); - } else { - result += s[i]; - } - break; - } - } - - return result; -} - -inline std::string decode_url(const std::string &s, - bool convert_plus_to_space) { - std::string result; - - for (size_t i = 0; i < s.size(); i++) { - if (s[i] == '%' && i + 1 < s.size()) { - if (s[i + 1] == 'u') { - int val = 0; - if (from_hex_to_i(s, i + 2, 4, val)) { - // 4 digits Unicode codes - char buff[4]; - size_t len = to_utf8(val, buff); - if (len > 0) { result.append(buff, len); } - i += 5; // 'u0000' - } else { - result += s[i]; - } - } else { - int val = 0; - if (from_hex_to_i(s, i + 1, 2, val)) { - // 2 digits hex codes - result += static_cast(val); - i += 2; // '00' - } else { - result += s[i]; - } - } - } else if (convert_plus_to_space && s[i] == '+') { - result += ' '; - } else { - result += s[i]; - } - } - - return result; -} - -inline std::string params_to_query_str(const Params ¶ms) { - std::string query; - - for (auto it = params.begin(); it != params.end(); ++it) { - if (it != params.begin()) { query += "&"; } - query += it->first; - query += "="; - query += detail::encode_url(it->second); - } - - return query; -} - -inline void parse_query_text(const std::string &s, Params ¶ms) { - split(&s[0], &s[s.size()], '&', [&](const char *b, const char *e) { - std::string key; - std::string val; - split(b, e, '=', [&](const char *b2, const char *e2) { - if (key.empty()) { - key.assign(b2, e2); - } else { - val.assign(b2, e2); - } - }); - params.emplace(decode_url(key, true), decode_url(val, true)); - }); -} - -inline bool parse_multipart_boundary(const std::string &content_type, - std::string &boundary) { - auto pos = content_type.find("boundary="); - if (pos == std::string::npos) { return false; } - - boundary = content_type.substr(pos + 9); - return true; -} - -inline bool parse_range_header(const std::string &s, Ranges &ranges) { - static auto re_first_range = std::regex(R"(bytes=(\d*-\d*(?:,\s*\d*-\d*)*))"); - std::smatch m; - if (std::regex_match(s, m, re_first_range)) { - auto pos = static_cast(m.position(1)); - auto len = static_cast(m.length(1)); - bool all_valid_ranges = true; - split(&s[pos], &s[pos + len], ',', [&](const char *b, const char *e) { - if (!all_valid_ranges) return; - static auto re_another_range = std::regex(R"(\s*(\d*)-(\d*))"); - std::cmatch cm; - if (std::regex_match(b, e, cm, re_another_range)) { - ssize_t first = -1; - if (!cm.str(1).empty()) { - first = static_cast(std::stoll(cm.str(1))); - } - - ssize_t last = -1; - if (!cm.str(2).empty()) { - last = static_cast(std::stoll(cm.str(2))); - } - - if (first != -1 && last != -1 && first > last) { - all_valid_ranges = false; - return; - } - ranges.emplace_back(std::make_pair(first, last)); - } - }); - return all_valid_ranges; - } - return false; -} - -class MultipartFormDataParser { -public: - MultipartFormDataParser() = default; - - void set_boundary(std::string boundary) { boundary_ = std::move(boundary); } - - bool is_valid() const { return is_valid_; } - - template - bool parse(const char *buf, size_t n, T content_callback, U header_callback) { - static const std::regex re_content_type(R"(^Content-Type:\s*(.*?)\s*$)", - std::regex_constants::icase); - - static const std::regex re_content_disposition( - "^Content-Disposition:\\s*form-data;\\s*name=\"(.*?)\"(?:;\\s*filename=" - "\"(.*?)\")?\\s*$", - std::regex_constants::icase); - static const std::string dash_ = "--"; - static const std::string crlf_ = "\r\n"; - - buf_.append(buf, n); // TODO: performance improvement - - while (!buf_.empty()) { - switch (state_) { - case 0: { // Initial boundary - auto pattern = dash_ + boundary_ + crlf_; - if (pattern.size() > buf_.size()) { return true; } - auto pos = buf_.find(pattern); - if (pos != 0) { - is_done_ = true; - return false; - } - buf_.erase(0, pattern.size()); - off_ += pattern.size(); - state_ = 1; - break; - } - case 1: { // New entry - clear_file_info(); - state_ = 2; - break; - } - case 2: { // Headers - auto pos = buf_.find(crlf_); - while (pos != std::string::npos) { - // Empty line - if (pos == 0) { - if (!header_callback(file_)) { - is_valid_ = false; - is_done_ = false; - return false; - } - buf_.erase(0, crlf_.size()); - off_ += crlf_.size(); - state_ = 3; - break; - } - - auto header = buf_.substr(0, pos); - { - std::smatch m; - if (std::regex_match(header, m, re_content_type)) { - file_.content_type = m[1]; - } else if (std::regex_match(header, m, re_content_disposition)) { - file_.name = m[1]; - file_.filename = m[2]; - } - } - - buf_.erase(0, pos + crlf_.size()); - off_ += pos + crlf_.size(); - pos = buf_.find(crlf_); - } - break; - } - case 3: { // Body - { - auto pattern = crlf_ + dash_; - if (pattern.size() > buf_.size()) { return true; } - - auto pos = buf_.find(pattern); - if (pos == std::string::npos) { pos = buf_.size(); } - if (!content_callback(buf_.data(), pos)) { - is_valid_ = false; - is_done_ = false; - return false; - } - - off_ += pos; - buf_.erase(0, pos); - } - - { - auto pattern = crlf_ + dash_ + boundary_; - if (pattern.size() > buf_.size()) { return true; } - - auto pos = buf_.find(pattern); - if (pos != std::string::npos) { - if (!content_callback(buf_.data(), pos)) { - is_valid_ = false; - is_done_ = false; - return false; - } - - off_ += pos + pattern.size(); - buf_.erase(0, pos + pattern.size()); - state_ = 4; - } else { - if (!content_callback(buf_.data(), pattern.size())) { - is_valid_ = false; - is_done_ = false; - return false; - } - - off_ += pattern.size(); - buf_.erase(0, pattern.size()); - } - } - break; - } - case 4: { // Boundary - if (crlf_.size() > buf_.size()) { return true; } - if (buf_.find(crlf_) == 0) { - buf_.erase(0, crlf_.size()); - off_ += crlf_.size(); - state_ = 1; - } else { - auto pattern = dash_ + crlf_; - if (pattern.size() > buf_.size()) { return true; } - if (buf_.find(pattern) == 0) { - buf_.erase(0, pattern.size()); - off_ += pattern.size(); - is_valid_ = true; - state_ = 5; - } else { - is_done_ = true; - return true; - } - } - break; - } - case 5: { // Done - is_valid_ = false; - return false; - } - } - } - - return true; - } - -private: - void clear_file_info() { - file_.name.clear(); - file_.filename.clear(); - file_.content_type.clear(); - } - - std::string boundary_; - - std::string buf_; - size_t state_ = 0; - size_t is_valid_ = false; - size_t is_done_ = false; - size_t off_ = 0; - MultipartFormData file_; -}; - -inline std::string to_lower(const char *beg, const char *end) { - std::string out; - auto it = beg; - while (it != end) { - out += static_cast(::tolower(*it)); - it++; - } - return out; -} - -inline std::string make_multipart_data_boundary() { - static const char data[] = - "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; - - std::random_device seed_gen; - std::mt19937 engine(seed_gen()); - - std::string result = "--cpp-httplib-multipart-data-"; - - for (auto i = 0; i < 16; i++) { - result += data[engine() % (sizeof(data) - 1)]; - } - - return result; -} - -inline std::pair -get_range_offset_and_length(const Request &req, size_t content_length, - size_t index) { - auto r = req.ranges[index]; - - if (r.first == -1 && r.second == -1) { - return std::make_pair(0, content_length); - } - - auto slen = static_cast(content_length); - - if (r.first == -1) { - r.first = slen - r.second; - r.second = slen - 1; - } - - if (r.second == -1) { r.second = slen - 1; } - - return std::make_pair(r.first, r.second - r.first + 1); -} - -inline std::string make_content_range_header_field(size_t offset, size_t length, - size_t content_length) { - std::string field = "bytes "; - field += std::to_string(offset); - field += "-"; - field += std::to_string(offset + length - 1); - field += "/"; - field += std::to_string(content_length); - return field; -} - -template -bool process_multipart_ranges_data(const Request &req, Response &res, - const std::string &boundary, - const std::string &content_type, - SToken stoken, CToken ctoken, - Content content) { - for (size_t i = 0; i < req.ranges.size(); i++) { - ctoken("--"); - stoken(boundary); - ctoken("\r\n"); - if (!content_type.empty()) { - ctoken("Content-Type: "); - stoken(content_type); - ctoken("\r\n"); - } - - auto offsets = get_range_offset_and_length(req, res.body.size(), i); - auto offset = offsets.first; - auto length = offsets.second; - - ctoken("Content-Range: "); - stoken(make_content_range_header_field(offset, length, res.body.size())); - ctoken("\r\n"); - ctoken("\r\n"); - if (!content(offset, length)) { return false; } - ctoken("\r\n"); - } - - ctoken("--"); - stoken(boundary); - ctoken("--\r\n"); - - return true; -} - -inline std::string make_multipart_ranges_data(const Request &req, Response &res, - const std::string &boundary, - const std::string &content_type) { - std::string data; - - process_multipart_ranges_data( - req, res, boundary, content_type, - [&](const std::string &token) { data += token; }, - [&](const char *token) { data += token; }, - [&](size_t offset, size_t length) { - data += res.body.substr(offset, length); - return true; - }); - - return data; -} - -inline size_t -get_multipart_ranges_data_length(const Request &req, Response &res, - const std::string &boundary, - const std::string &content_type) { - size_t data_length = 0; - - process_multipart_ranges_data( - req, res, boundary, content_type, - [&](const std::string &token) { data_length += token.size(); }, - [&](const char *token) { data_length += strlen(token); }, - [&](size_t /*offset*/, size_t length) { - data_length += length; - return true; - }); - - return data_length; -} - -inline bool write_multipart_ranges_data(Stream &strm, const Request &req, - Response &res, - const std::string &boundary, - const std::string &content_type) { - return process_multipart_ranges_data( - req, res, boundary, content_type, - [&](const std::string &token) { strm.write(token); }, - [&](const char *token) { strm.write(token); }, - [&](size_t offset, size_t length) { - return write_content(strm, res.content_provider_, offset, length) >= 0; - }); -} - -inline std::pair -get_range_offset_and_length(const Request &req, const Response &res, - size_t index) { - auto r = req.ranges[index]; - - if (r.second == -1) { - r.second = static_cast(res.content_length_) - 1; - } - - return std::make_pair(r.first, r.second - r.first + 1); -} - -inline bool expect_content(const Request &req) { - if (req.method == "POST" || req.method == "PUT" || req.method == "PATCH" || - req.method == "PRI" || - (req.method == "DELETE" && req.has_header("Content-Length"))) { - return true; - } - // TODO: check if Content-Length is set - return false; -} - -inline bool has_crlf(const char *s) { - auto p = s; - while (*p) { - if (*p == '\r' || *p == '\n') { return true; } - p++; - } - return false; -} - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT -template -inline std::string message_digest(const std::string &s, Init init, - Update update, Final final, - size_t digest_length) { - using namespace std; - - std::vector md(digest_length, 0); - CTX ctx; - init(&ctx); - update(&ctx, s.data(), s.size()); - final(md.data(), &ctx); - - stringstream ss; - for (auto c : md) { - ss << setfill('0') << setw(2) << hex << (unsigned int)c; - } - return ss.str(); -} - -inline std::string MD5(const std::string &s) { - return message_digest(s, MD5_Init, MD5_Update, MD5_Final, - MD5_DIGEST_LENGTH); -} - -inline std::string SHA_256(const std::string &s) { - return message_digest(s, SHA256_Init, SHA256_Update, SHA256_Final, - SHA256_DIGEST_LENGTH); -} - -inline std::string SHA_512(const std::string &s) { - return message_digest(s, SHA512_Init, SHA512_Update, SHA512_Final, - SHA512_DIGEST_LENGTH); -} -#endif - -#ifdef _WIN32 -class WSInit { -public: - WSInit() { - WSADATA wsaData; - WSAStartup(0x0002, &wsaData); - } - - ~WSInit() { WSACleanup(); } -}; - -static WSInit wsinit_; -#endif - -} // namespace detail - -// Header utilities -inline std::pair make_range_header(Ranges ranges) { - std::string field = "bytes="; - auto i = 0; - for (auto r : ranges) { - if (i != 0) { field += ", "; } - if (r.first != -1) { field += std::to_string(r.first); } - field += '-'; - if (r.second != -1) { field += std::to_string(r.second); } - i++; - } - return std::make_pair("Range", field); -} - -inline std::pair -make_basic_authentication_header(const std::string &username, - const std::string &password, - bool is_proxy = false) { - auto field = "Basic " + detail::base64_encode(username + ":" + password); - auto key = is_proxy ? "Proxy-Authorization" : "Authorization"; - return std::make_pair(key, field); -} - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT -inline std::pair make_digest_authentication_header( - const Request &req, const std::map &auth, - size_t cnonce_count, const std::string &cnonce, const std::string &username, - const std::string &password, bool is_proxy = false) { - using namespace std; - - string nc; - { - stringstream ss; - ss << setfill('0') << setw(8) << hex << cnonce_count; - nc = ss.str(); - } - - auto qop = auth.at("qop"); - if (qop.find("auth-int") != std::string::npos) { - qop = "auth-int"; - } else { - qop = "auth"; - } - - std::string algo = "MD5"; - if (auth.find("algorithm") != auth.end()) { algo = auth.at("algorithm"); } - - string response; - { - auto H = algo == "SHA-256" - ? detail::SHA_256 - : algo == "SHA-512" ? detail::SHA_512 : detail::MD5; - - auto A1 = username + ":" + auth.at("realm") + ":" + password; - - auto A2 = req.method + ":" + req.path; - if (qop == "auth-int") { A2 += ":" + H(req.body); } - - response = H(H(A1) + ":" + auth.at("nonce") + ":" + nc + ":" + cnonce + - ":" + qop + ":" + H(A2)); - } - - auto field = "Digest username=\"" + username + "\", realm=\"" + - auth.at("realm") + "\", nonce=\"" + auth.at("nonce") + - "\", uri=\"" + req.path + "\", algorithm=" + algo + - ", qop=" + qop + ", nc=\"" + nc + "\", cnonce=\"" + cnonce + - "\", response=\"" + response + "\""; - - auto key = is_proxy ? "Proxy-Authorization" : "Authorization"; - return std::make_pair(key, field); -} -#endif - -inline bool parse_www_authenticate(const httplib::Response &res, - std::map &auth, - bool is_proxy) { - auto auth_key = is_proxy ? "Proxy-Authenticate" : "WWW-Authenticate"; - if (res.has_header(auth_key)) { - static auto re = std::regex(R"~((?:(?:,\s*)?(.+?)=(?:"(.*?)"|([^,]*))))~"); - auto s = res.get_header_value(auth_key); - auto pos = s.find(' '); - if (pos != std::string::npos) { - auto type = s.substr(0, pos); - if (type == "Basic") { - return false; - } else if (type == "Digest") { - s = s.substr(pos + 1); - auto beg = std::sregex_iterator(s.begin(), s.end(), re); - for (auto i = beg; i != std::sregex_iterator(); ++i) { - auto m = *i; - auto key = s.substr(static_cast(m.position(1)), - static_cast(m.length(1))); - auto val = m.length(2) > 0 - ? s.substr(static_cast(m.position(2)), - static_cast(m.length(2))) - : s.substr(static_cast(m.position(3)), - static_cast(m.length(3))); - auth[key] = val; - } - return true; - } - } - } - return false; -} - -// https://stackoverflow.com/questions/440133/how-do-i-create-a-random-alpha-numeric-string-in-c/440240#answer-440240 -inline std::string random_string(size_t length) { - auto randchar = []() -> char { - const char charset[] = "0123456789" - "ABCDEFGHIJKLMNOPQRSTUVWXYZ" - "abcdefghijklmnopqrstuvwxyz"; - const size_t max_index = (sizeof(charset) - 1); - return charset[static_cast(rand()) % max_index]; - }; - std::string str(length, 0); - std::generate_n(str.begin(), length, randchar); - return str; -} - -// Request implementation -inline bool Request::has_header(const char *key) const { - return detail::has_header(headers, key); -} - -inline std::string Request::get_header_value(const char *key, size_t id) const { - return detail::get_header_value(headers, key, id, ""); -} - -inline size_t Request::get_header_value_count(const char *key) const { - auto r = headers.equal_range(key); - return static_cast(std::distance(r.first, r.second)); -} - -inline void Request::set_header(const char *key, const char *val) { - if (!detail::has_crlf(key) && !detail::has_crlf(val)) { - headers.emplace(key, val); - } -} - -inline void Request::set_header(const char *key, const std::string &val) { - if (!detail::has_crlf(key) && !detail::has_crlf(val.c_str())) { - headers.emplace(key, val); - } -} - -inline bool Request::has_param(const char *key) const { - return params.find(key) != params.end(); -} - -inline std::string Request::get_param_value(const char *key, size_t id) const { - auto it = params.find(key); - std::advance(it, static_cast(id)); - if (it != params.end()) { return it->second; } - return std::string(); -} - -inline size_t Request::get_param_value_count(const char *key) const { - auto r = params.equal_range(key); - return static_cast(std::distance(r.first, r.second)); -} - -inline bool Request::is_multipart_form_data() const { - const auto &content_type = get_header_value("Content-Type"); - return !content_type.find("multipart/form-data"); -} - -inline bool Request::has_file(const char *key) const { - return files.find(key) != files.end(); -} - -inline MultipartFormData Request::get_file_value(const char *key) const { - auto it = files.find(key); - if (it != files.end()) { return it->second; } - return MultipartFormData(); -} - -// Response implementation -inline bool Response::has_header(const char *key) const { - return headers.find(key) != headers.end(); -} - -inline std::string Response::get_header_value(const char *key, - size_t id) const { - return detail::get_header_value(headers, key, id, ""); -} - -inline size_t Response::get_header_value_count(const char *key) const { - auto r = headers.equal_range(key); - return static_cast(std::distance(r.first, r.second)); -} - -inline void Response::set_header(const char *key, const char *val) { - if (!detail::has_crlf(key) && !detail::has_crlf(val)) { - headers.emplace(key, val); - } -} - -inline void Response::set_header(const char *key, const std::string &val) { - if (!detail::has_crlf(key) && !detail::has_crlf(val.c_str())) { - headers.emplace(key, val); - } -} - -inline void Response::set_redirect(const char *url, int stat) { - if (!detail::has_crlf(url)) { - set_header("Location", url); - if (300 <= stat && stat < 400) { - this->status = stat; - } else { - this->status = 302; - } - } -} - -inline void Response::set_content(const char *s, size_t n, - const char *content_type) { - body.assign(s, n); - set_header("Content-Type", content_type); -} - -inline void Response::set_content(std::string s, const char *content_type) { - body = std::move(s); - set_header("Content-Type", content_type); -} - -inline void -Response::set_content_provider(size_t in_length, ContentProvider provider, - std::function resource_releaser) { - assert(in_length > 0); - content_length_ = in_length; - content_provider_ = [provider](size_t offset, size_t length, DataSink &sink) { - return provider(offset, length, sink); - }; - content_provider_resource_releaser_ = resource_releaser; -} - -inline void Response::set_chunked_content_provider( - ChunkedContentProvider provider, std::function resource_releaser) { - content_length_ = 0; - content_provider_ = [provider](size_t offset, size_t, DataSink &sink) { - return provider(offset, sink); - }; - content_provider_resource_releaser_ = resource_releaser; -} - -// Rstream implementation -inline ssize_t Stream::write(const char *ptr) { - return write(ptr, strlen(ptr)); -} - -inline ssize_t Stream::write(const std::string &s) { - return write(s.data(), s.size()); -} - -template -inline ssize_t Stream::write_format(const char *fmt, const Args &... args) { - std::array buf; - -#if defined(_MSC_VER) && _MSC_VER < 1900 - auto sn = _snprintf_s(buf, bufsiz, buf.size() - 1, fmt, args...); -#else - auto sn = snprintf(buf.data(), buf.size() - 1, fmt, args...); -#endif - if (sn <= 0) { return sn; } - - auto n = static_cast(sn); - - if (n >= buf.size() - 1) { - std::vector glowable_buf(buf.size()); - - while (n >= glowable_buf.size() - 1) { - glowable_buf.resize(glowable_buf.size() * 2); -#if defined(_MSC_VER) && _MSC_VER < 1900 - n = static_cast(_snprintf_s(&glowable_buf[0], glowable_buf.size(), - glowable_buf.size() - 1, fmt, - args...)); -#else - n = static_cast( - snprintf(&glowable_buf[0], glowable_buf.size() - 1, fmt, args...)); -#endif - } - return write(&glowable_buf[0], n); - } else { - return write(buf.data(), n); - } -} - -namespace detail { - -// Socket stream implementation -inline SocketStream::SocketStream(socket_t sock, time_t read_timeout_sec, - time_t read_timeout_usec, - time_t write_timeout_sec, - time_t write_timeout_usec) - : sock_(sock), read_timeout_sec_(read_timeout_sec), - read_timeout_usec_(read_timeout_usec), - write_timeout_sec_(write_timeout_sec), - write_timeout_usec_(write_timeout_usec) {} - -inline SocketStream::~SocketStream() {} - -inline bool SocketStream::is_readable() const { - return select_read(sock_, read_timeout_sec_, read_timeout_usec_) > 0; -} - -inline bool SocketStream::is_writable() const { - return select_write(sock_, write_timeout_sec_, write_timeout_usec_) > 0; -} - -inline ssize_t SocketStream::read(char *ptr, size_t size) { - if (!is_readable()) { return -1; } - -#ifdef _WIN32 - if (size > static_cast((std::numeric_limits::max)())) { - return -1; - } - return recv(sock_, ptr, static_cast(size), 0); -#else - return handle_EINTR([&]() { return recv(sock_, ptr, size, 0); }); -#endif -} - -inline ssize_t SocketStream::write(const char *ptr, size_t size) { - if (!is_writable()) { return -1; } - -#ifdef _WIN32 - if (size > static_cast((std::numeric_limits::max)())) { - return -1; - } - return send(sock_, ptr, static_cast(size), 0); -#else - return handle_EINTR([&]() { return send(sock_, ptr, size, 0); }); -#endif -} - -inline void SocketStream::get_remote_ip_and_port(std::string &ip, - int &port) const { - return detail::get_remote_ip_and_port(sock_, ip, port); -} - -// Buffer stream implementation -inline bool BufferStream::is_readable() const { return true; } - -inline bool BufferStream::is_writable() const { return true; } - -inline ssize_t BufferStream::read(char *ptr, size_t size) { -#if defined(_MSC_VER) && _MSC_VER < 1900 - auto len_read = buffer._Copy_s(ptr, size, size, position); -#else - auto len_read = buffer.copy(ptr, size, position); -#endif - position += static_cast(len_read); - return static_cast(len_read); -} - -inline ssize_t BufferStream::write(const char *ptr, size_t size) { - buffer.append(ptr, size); - return static_cast(size); -} - -inline void BufferStream::get_remote_ip_and_port(std::string & /*ip*/, - int & /*port*/) const {} - -inline const std::string &BufferStream::get_buffer() const { return buffer; } - -} // namespace detail - -// HTTP server implementation -inline Server::Server() : is_running_(false), svr_sock_(INVALID_SOCKET) { -#ifndef _WIN32 - signal(SIGPIPE, SIG_IGN); -#endif - new_task_queue = [] { return new ThreadPool(CPPHTTPLIB_THREAD_POOL_COUNT); }; -} - -inline Server::~Server() {} - -inline Server &Server::Get(const char *pattern, Handler handler) { - get_handlers_.push_back(std::make_pair(std::regex(pattern), handler)); - return *this; -} - -inline Server &Server::Post(const char *pattern, Handler handler) { - post_handlers_.push_back(std::make_pair(std::regex(pattern), handler)); - return *this; -} - -inline Server &Server::Post(const char *pattern, - HandlerWithContentReader handler) { - post_handlers_for_content_reader_.push_back( - std::make_pair(std::regex(pattern), handler)); - return *this; -} - -inline Server &Server::Put(const char *pattern, Handler handler) { - put_handlers_.push_back(std::make_pair(std::regex(pattern), handler)); - return *this; -} - -inline Server &Server::Put(const char *pattern, - HandlerWithContentReader handler) { - put_handlers_for_content_reader_.push_back( - std::make_pair(std::regex(pattern), handler)); - return *this; -} - -inline Server &Server::Patch(const char *pattern, Handler handler) { - patch_handlers_.push_back(std::make_pair(std::regex(pattern), handler)); - return *this; -} - -inline Server &Server::Patch(const char *pattern, - HandlerWithContentReader handler) { - patch_handlers_for_content_reader_.push_back( - std::make_pair(std::regex(pattern), handler)); - return *this; -} - -inline Server &Server::Delete(const char *pattern, Handler handler) { - delete_handlers_.push_back(std::make_pair(std::regex(pattern), handler)); - return *this; -} - -inline Server &Server::Delete(const char *pattern, - HandlerWithContentReader handler) { - delete_handlers_for_content_reader_.push_back( - std::make_pair(std::regex(pattern), handler)); - return *this; -} - -inline Server &Server::Options(const char *pattern, Handler handler) { - options_handlers_.push_back(std::make_pair(std::regex(pattern), handler)); - return *this; -} - -inline bool Server::set_base_dir(const char *dir, const char *mount_point) { - return set_mount_point(mount_point, dir); -} - -inline bool Server::set_mount_point(const char *mount_point, const char *dir) { - if (detail::is_dir(dir)) { - std::string mnt = mount_point ? mount_point : "/"; - if (!mnt.empty() && mnt[0] == '/') { - base_dirs_.emplace_back(mnt, dir); - return true; - } - } - return false; -} - -inline bool Server::remove_mount_point(const char *mount_point) { - for (auto it = base_dirs_.begin(); it != base_dirs_.end(); ++it) { - if (it->first == mount_point) { - base_dirs_.erase(it); - return true; - } - } - return false; -} - -inline void Server::set_file_extension_and_mimetype_mapping(const char *ext, - const char *mime) { - file_extension_and_mimetype_map_[ext] = mime; -} - -inline void Server::set_file_request_handler(Handler handler) { - file_request_handler_ = std::move(handler); -} - -inline void Server::set_error_handler(Handler handler) { - error_handler_ = std::move(handler); -} - -inline void Server::set_logger(Logger logger) { logger_ = std::move(logger); } - -inline void -Server::set_expect_100_continue_handler(Expect100ContinueHandler handler) { - expect_100_continue_handler_ = std::move(handler); -} - -inline void Server::set_keep_alive_max_count(size_t count) { - keep_alive_max_count_ = count; -} - -inline void Server::set_read_timeout(time_t sec, time_t usec) { - read_timeout_sec_ = sec; - read_timeout_usec_ = usec; -} - -inline void Server::set_write_timeout(time_t sec, time_t usec) { - write_timeout_sec_ = sec; - write_timeout_usec_ = usec; -} - -inline void Server::set_idle_interval(time_t sec, time_t usec) { - idle_interval_sec_ = sec; - idle_interval_usec_ = usec; -} - -inline void Server::set_payload_max_length(size_t length) { - payload_max_length_ = length; -} - -inline bool Server::bind_to_port(const char *host, int port, int socket_flags) { - if (bind_internal(host, port, socket_flags) < 0) return false; - return true; -} -inline int Server::bind_to_any_port(const char *host, int socket_flags) { - return bind_internal(host, 0, socket_flags); -} - -inline bool Server::listen_after_bind() { return listen_internal(); } - -inline bool Server::listen(const char *host, int port, int socket_flags) { - return bind_to_port(host, port, socket_flags) && listen_internal(); -} - -inline bool Server::is_running() const { return is_running_; } - -inline void Server::stop() { - if (is_running_) { - assert(svr_sock_ != INVALID_SOCKET); - std::atomic sock(svr_sock_.exchange(INVALID_SOCKET)); - detail::shutdown_socket(sock); - detail::close_socket(sock); - } -} - -inline bool Server::parse_request_line(const char *s, Request &req) { - const static std::regex re( - "(GET|HEAD|POST|PUT|DELETE|CONNECT|OPTIONS|TRACE|PATCH|PRI) " - "(([^?]+)(?:\\?(.*?))?) (HTTP/1\\.[01])\r\n"); - - std::cmatch m; - if (std::regex_match(s, m, re)) { - req.version = std::string(m[5]); - req.method = std::string(m[1]); - req.target = std::string(m[2]); - req.path = detail::decode_url(m[3], false); - - // Parse query text - auto len = std::distance(m[4].first, m[4].second); - if (len > 0) { detail::parse_query_text(m[4], req.params); } - - return true; - } - - return false; -} - -inline bool Server::write_response(Stream &strm, bool last_connection, - const Request &req, Response &res) { - assert(res.status != -1); - - if (400 <= res.status && error_handler_) { error_handler_(req, res); } - - detail::BufferStream bstrm; - - // Response line - if (!bstrm.write_format("HTTP/1.1 %d %s\r\n", res.status, - detail::status_message(res.status))) { - return false; - } - - // Headers - if (last_connection || req.get_header_value("Connection") == "close") { - res.set_header("Connection", "close"); - } - - if (!last_connection && req.get_header_value("Connection") == "Keep-Alive") { - res.set_header("Connection", "Keep-Alive"); - } - - if (!res.has_header("Content-Type") && - (!res.body.empty() || res.content_length_ > 0)) { - res.set_header("Content-Type", "text/plain"); - } - - if (!res.has_header("Accept-Ranges") && req.method == "HEAD") { - res.set_header("Accept-Ranges", "bytes"); - } - - std::string content_type; - std::string boundary; - - if (req.ranges.size() > 1) { - boundary = detail::make_multipart_data_boundary(); - - auto it = res.headers.find("Content-Type"); - if (it != res.headers.end()) { - content_type = it->second; - res.headers.erase(it); - } - - res.headers.emplace("Content-Type", - "multipart/byteranges; boundary=" + boundary); - } - - if (res.body.empty()) { - if (res.content_length_ > 0) { - size_t length = 0; - if (req.ranges.empty()) { - length = res.content_length_; - } else if (req.ranges.size() == 1) { - auto offsets = - detail::get_range_offset_and_length(req, res.content_length_, 0); - auto offset = offsets.first; - length = offsets.second; - auto content_range = detail::make_content_range_header_field( - offset, length, res.content_length_); - res.set_header("Content-Range", content_range); - } else { - length = detail::get_multipart_ranges_data_length(req, res, boundary, - content_type); - } - res.set_header("Content-Length", std::to_string(length)); - } else { - if (res.content_provider_) { - res.set_header("Transfer-Encoding", "chunked"); - } else { - res.set_header("Content-Length", "0"); - } - } - } else { - if (req.ranges.empty()) { - ; - } else if (req.ranges.size() == 1) { - auto offsets = - detail::get_range_offset_and_length(req, res.body.size(), 0); - auto offset = offsets.first; - auto length = offsets.second; - auto content_range = detail::make_content_range_header_field( - offset, length, res.body.size()); - res.set_header("Content-Range", content_range); - res.body = res.body.substr(offset, length); - } else { - res.body = - detail::make_multipart_ranges_data(req, res, boundary, content_type); - } - -#ifdef CPPHTTPLIB_ZLIB_SUPPORT - // TODO: 'Accept-Encoding' has gzip, not gzip;q=0 - const auto &encodings = req.get_header_value("Accept-Encoding"); - if (encodings.find("gzip") != std::string::npos && - detail::can_compress(res.get_header_value("Content-Type"))) { - if (detail::compress(res.body)) { - res.set_header("Content-Encoding", "gzip"); - } - } -#endif - - auto length = std::to_string(res.body.size()); - res.set_header("Content-Length", length); - } - - if (!detail::write_headers(bstrm, res, Headers())) { return false; } - - // Flush buffer - auto &data = bstrm.get_buffer(); - strm.write(data.data(), data.size()); - - // Body - if (req.method != "HEAD") { - if (!res.body.empty()) { - if (!strm.write(res.body)) { return false; } - } else if (res.content_provider_) { - if (!write_content_with_provider(strm, req, res, boundary, - content_type)) { - return false; - } - } - } - - // Log - if (logger_) { logger_(req, res); } - - return true; -} - -inline bool -Server::write_content_with_provider(Stream &strm, const Request &req, - Response &res, const std::string &boundary, - const std::string &content_type) { - if (res.content_length_) { - if (req.ranges.empty()) { - if (detail::write_content(strm, res.content_provider_, 0, - res.content_length_) < 0) { - return false; - } - } else if (req.ranges.size() == 1) { - auto offsets = - detail::get_range_offset_and_length(req, res.content_length_, 0); - auto offset = offsets.first; - auto length = offsets.second; - if (detail::write_content(strm, res.content_provider_, offset, length) < - 0) { - return false; - } - } else { - if (!detail::write_multipart_ranges_data(strm, req, res, boundary, - content_type)) { - return false; - } - } - } else { - auto is_shutting_down = [this]() { - return this->svr_sock_ == INVALID_SOCKET; - }; - if (detail::write_content_chunked(strm, res.content_provider_, - is_shutting_down) < 0) { - return false; - } - } - return true; -} - -inline bool Server::read_content(Stream &strm, Request &req, Response &res) { - MultipartFormDataMap::iterator cur; - if (read_content_core( - strm, req, res, - // Regular - [&](const char *buf, size_t n) { - if (req.body.size() + n > req.body.max_size()) { return false; } - req.body.append(buf, n); - return true; - }, - // Multipart - [&](const MultipartFormData &file) { - cur = req.files.emplace(file.name, file); - return true; - }, - [&](const char *buf, size_t n) { - auto &content = cur->second.content; - if (content.size() + n > content.max_size()) { return false; } - content.append(buf, n); - return true; - })) { - const auto &content_type = req.get_header_value("Content-Type"); - if (!content_type.find("application/x-www-form-urlencoded")) { - detail::parse_query_text(req.body, req.params); - } - return true; - } - return false; -} - -inline bool Server::read_content_with_content_receiver( - Stream &strm, Request &req, Response &res, ContentReceiver receiver, - MultipartContentHeader multipart_header, - ContentReceiver multipart_receiver) { - return read_content_core(strm, req, res, receiver, multipart_header, - multipart_receiver); -} - -inline bool Server::read_content_core(Stream &strm, Request &req, Response &res, - ContentReceiver receiver, - MultipartContentHeader mulitpart_header, - ContentReceiver multipart_receiver) { - detail::MultipartFormDataParser multipart_form_data_parser; - ContentReceiver out; - - if (req.is_multipart_form_data()) { - const auto &content_type = req.get_header_value("Content-Type"); - std::string boundary; - if (!detail::parse_multipart_boundary(content_type, boundary)) { - res.status = 400; - return false; - } - - multipart_form_data_parser.set_boundary(std::move(boundary)); - out = [&](const char *buf, size_t n) { - return multipart_form_data_parser.parse(buf, n, multipart_receiver, - mulitpart_header); - }; - } else { - out = receiver; - } - - if (!detail::read_content(strm, req, payload_max_length_, res.status, - Progress(), out, true)) { - return false; - } - - if (req.is_multipart_form_data()) { - if (!multipart_form_data_parser.is_valid()) { - res.status = 400; - return false; - } - } - - return true; -} - -inline bool Server::handle_file_request(Request &req, Response &res, - bool head) { - for (const auto &kv : base_dirs_) { - const auto &mount_point = kv.first; - const auto &base_dir = kv.second; - // Prefix match - if (!req.path.find(mount_point)) { - std::string sub_path = "/" + req.path.substr(mount_point.size()); - if (detail::is_valid_path(sub_path)) { - auto path = base_dir + sub_path; - if (path.back() == '/') { path += "index.html"; } - - if (detail::is_file(path)) { - detail::read_file(path, res.body); - auto type = - detail::find_content_type(path, file_extension_and_mimetype_map_); - if (type) { res.set_header("Content-Type", type); } - res.status = 200; - if (!head && file_request_handler_) { - file_request_handler_(req, res); - } - return true; - } - } - } - } - return false; -} - -inline socket_t Server::create_server_socket(const char *host, int port, - int socket_flags) const { - return detail::create_socket( - host, port, - [](socket_t sock, struct addrinfo &ai) -> bool { - if (::bind(sock, ai.ai_addr, static_cast(ai.ai_addrlen))) { - return false; - } - if (::listen(sock, 5)) { // Listen through 5 channels - return false; - } - return true; - }, - socket_flags); -} - -inline int Server::bind_internal(const char *host, int port, int socket_flags) { - if (!is_valid()) { return -1; } - - svr_sock_ = create_server_socket(host, port, socket_flags); - if (svr_sock_ == INVALID_SOCKET) { return -1; } - - if (port == 0) { - struct sockaddr_storage addr; - socklen_t addr_len = sizeof(addr); - if (getsockname(svr_sock_, reinterpret_cast(&addr), - &addr_len) == -1) { - return -1; - } - if (addr.ss_family == AF_INET) { - return ntohs(reinterpret_cast(&addr)->sin_port); - } else if (addr.ss_family == AF_INET6) { - return ntohs(reinterpret_cast(&addr)->sin6_port); - } else { - return -1; - } - } else { - return port; - } -} - -inline bool Server::listen_internal() { - auto ret = true; - is_running_ = true; - - { - std::unique_ptr task_queue(new_task_queue()); - - while (svr_sock_ != INVALID_SOCKET) { -#ifndef _WIN32 - if (idle_interval_sec_ > 0 || idle_interval_usec_ > 0) { -#endif - auto val = detail::select_read(svr_sock_, idle_interval_sec_, - idle_interval_usec_); - if (val == 0) { // Timeout - task_queue->on_idle(); - continue; - } -#ifndef _WIN32 - } -#endif - socket_t sock = accept(svr_sock_, nullptr, nullptr); - - if (sock == INVALID_SOCKET) { - if (errno == EMFILE) { - // The per-process limit of open file descriptors has been reached. - // Try to accept new connections after a short sleep. - std::this_thread::sleep_for(std::chrono::milliseconds(1)); - continue; - } - if (svr_sock_ != INVALID_SOCKET) { - detail::close_socket(svr_sock_); - ret = false; - } else { - ; // The server socket was closed by user. - } - break; - } - -#if __cplusplus > 201703L - task_queue->enqueue([=, this]() { process_and_close_socket(sock); }); -#else - task_queue->enqueue([=]() { process_and_close_socket(sock); }); -#endif - } - - task_queue->shutdown(); - } - - is_running_ = false; - return ret; -} - -inline bool Server::routing(Request &req, Response &res, Stream &strm) { - // File handler - bool is_head_request = req.method == "HEAD"; - if ((req.method == "GET" || is_head_request) && - handle_file_request(req, res, is_head_request)) { - return true; - } - - if (detail::expect_content(req)) { - // Content reader handler - { - ContentReader reader( - [&](ContentReceiver receiver) { - return read_content_with_content_receiver(strm, req, res, receiver, - nullptr, nullptr); - }, - [&](MultipartContentHeader header, ContentReceiver receiver) { - return read_content_with_content_receiver(strm, req, res, nullptr, - header, receiver); - }); - - if (req.method == "POST") { - if (dispatch_request_for_content_reader( - req, res, reader, post_handlers_for_content_reader_)) { - return true; - } - } else if (req.method == "PUT") { - if (dispatch_request_for_content_reader( - req, res, reader, put_handlers_for_content_reader_)) { - return true; - } - } else if (req.method == "PATCH") { - if (dispatch_request_for_content_reader( - req, res, reader, patch_handlers_for_content_reader_)) { - return true; - } - } else if (req.method == "DELETE") { - if (dispatch_request_for_content_reader( - req, res, reader, delete_handlers_for_content_reader_)) { - return true; - } - } - } - - // Read content into `req.body` - if (!read_content(strm, req, res)) { return false; } - } - - // Regular handler - if (req.method == "GET" || req.method == "HEAD") { - return dispatch_request(req, res, get_handlers_); - } else if (req.method == "POST") { - return dispatch_request(req, res, post_handlers_); - } else if (req.method == "PUT") { - return dispatch_request(req, res, put_handlers_); - } else if (req.method == "DELETE") { - return dispatch_request(req, res, delete_handlers_); - } else if (req.method == "OPTIONS") { - return dispatch_request(req, res, options_handlers_); - } else if (req.method == "PATCH") { - return dispatch_request(req, res, patch_handlers_); - } - - res.status = 400; - return false; -} - -inline bool Server::dispatch_request(Request &req, Response &res, - Handlers &handlers) { - - try { - for (const auto &x : handlers) { - const auto &pattern = x.first; - const auto &handler = x.second; - - if (std::regex_match(req.path, req.matches, pattern)) { - handler(req, res); - return true; - } - } - } catch (const std::exception &ex) { - res.status = 500; - res.set_header("EXCEPTION_WHAT", ex.what()); - } catch (...) { - res.status = 500; - res.set_header("EXCEPTION_WHAT", "UNKNOWN"); - } - return false; -} - -inline bool Server::dispatch_request_for_content_reader( - Request &req, Response &res, ContentReader content_reader, - HandlersForContentReader &handlers) { - for (const auto &x : handlers) { - const auto &pattern = x.first; - const auto &handler = x.second; - - if (std::regex_match(req.path, req.matches, pattern)) { - handler(req, res, content_reader); - return true; - } - } - return false; -} - -inline bool -Server::process_request(Stream &strm, bool last_connection, - bool &connection_close, - const std::function &setup_request) { - std::array buf{}; - - detail::stream_line_reader line_reader(strm, buf.data(), buf.size()); - - // Connection has been closed on client - if (!line_reader.getline()) { return false; } - - Request req; - Response res; - - res.version = "HTTP/1.1"; - - // Check if the request URI doesn't exceed the limit - if (line_reader.size() > CPPHTTPLIB_REQUEST_URI_MAX_LENGTH) { - Headers dummy; - detail::read_headers(strm, dummy); - res.status = 414; - return write_response(strm, last_connection, req, res); - } - - // Request line and headers - if (!parse_request_line(line_reader.ptr(), req) || - !detail::read_headers(strm, req.headers)) { - res.status = 400; - return write_response(strm, last_connection, req, res); - } - - if (req.get_header_value("Connection") == "close") { - connection_close = true; - } - - if (req.version == "HTTP/1.0" && - req.get_header_value("Connection") != "Keep-Alive") { - connection_close = true; - } - - strm.get_remote_ip_and_port(req.remote_addr, req.remote_port); - req.set_header("REMOTE_ADDR", req.remote_addr); - req.set_header("REMOTE_PORT", std::to_string(req.remote_port)); - - if (req.has_header("Range")) { - const auto &range_header_value = req.get_header_value("Range"); - if (!detail::parse_range_header(range_header_value, req.ranges)) { - // TODO: error - } - } - - if (setup_request) { setup_request(req); } - - if (req.get_header_value("Expect") == "100-continue") { - auto status = 100; - if (expect_100_continue_handler_) { - status = expect_100_continue_handler_(req, res); - } - switch (status) { - case 100: - case 417: - strm.write_format("HTTP/1.1 %d %s\r\n\r\n", status, - detail::status_message(status)); - break; - default: return write_response(strm, last_connection, req, res); - } - } - - // Rounting - if (routing(req, res, strm)) { - if (res.status == -1) { res.status = req.ranges.empty() ? 200 : 206; } - } else { - if (res.status == -1) { res.status = 404; } - } - - return write_response(strm, last_connection, req, res); -} - -inline bool Server::is_valid() const { return true; } - -inline bool Server::process_and_close_socket(socket_t sock) { - return detail::process_and_close_socket( - false, sock, keep_alive_max_count_, read_timeout_sec_, read_timeout_usec_, - write_timeout_sec_, write_timeout_usec_, - [this](Stream &strm, bool last_connection, bool &connection_close) { - return process_request(strm, last_connection, connection_close, - nullptr); - }); -} - -// HTTP client implementation -inline Client::Client(const std::string &host) - : Client(host, 80, std::string(), std::string()) {} - -inline Client::Client(const std::string &host, int port) - : Client(host, port, std::string(), std::string()) {} - -inline Client::Client(const std::string &host, int port, - const std::string &client_cert_path, - const std::string &client_key_path) - : sock_(INVALID_SOCKET), host_(host), port_(port), - host_and_port_(host_ + ":" + std::to_string(port_)), - client_cert_path_(client_cert_path), client_key_path_(client_key_path) {} - -inline Client::~Client() {} - -inline bool Client::is_valid() const { return true; } - -inline socket_t Client::create_client_socket() const { - if (!proxy_host_.empty()) { - return detail::create_client_socket(proxy_host_.c_str(), proxy_port_, - connection_timeout_sec_, - connection_timeout_usec_, interface_); - } - return detail::create_client_socket(host_.c_str(), port_, - connection_timeout_sec_, - connection_timeout_usec_, interface_); -} - -inline bool Client::read_response_line(Stream &strm, Response &res) { - std::array buf; - - detail::stream_line_reader line_reader(strm, buf.data(), buf.size()); - - if (!line_reader.getline()) { return false; } - - const static std::regex re("(HTTP/1\\.[01]) (\\d+?) .*\r\n"); - - std::cmatch m; - if (std::regex_match(line_reader.ptr(), m, re)) { - res.version = std::string(m[1]); - res.status = std::stoi(std::string(m[2])); - } - - return true; -} - -inline bool Client::send(const Request &req, Response &res) { - sock_ = create_client_socket(); - if (sock_ == INVALID_SOCKET) { return false; } - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - if (is_ssl() && !proxy_host_.empty()) { - bool error; - if (!connect(sock_, res, error)) { return error; } - } -#endif - - return process_and_close_socket( - sock_, 1, - [&](Stream &strm, bool last_connection, bool &connection_close) { - return handle_request(strm, req, res, last_connection, - connection_close); - }); -} - -inline bool Client::send(const std::vector &requests, - std::vector &responses) { - size_t i = 0; - while (i < requests.size()) { - sock_ = create_client_socket(); - if (sock_ == INVALID_SOCKET) { return false; } - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - if (is_ssl() && !proxy_host_.empty()) { - Response res; - bool error; - if (!connect(sock_, res, error)) { return false; } - } -#endif - - if (!process_and_close_socket(sock_, requests.size() - i, - [&](Stream &strm, bool last_connection, - bool &connection_close) -> bool { - auto &req = requests[i++]; - auto res = Response(); - auto ret = handle_request(strm, req, res, - last_connection, - connection_close); - if (ret) { - responses.emplace_back(std::move(res)); - } - return ret; - })) { - return false; - } - } - - return true; -} - -inline bool Client::handle_request(Stream &strm, const Request &req, - Response &res, bool last_connection, - bool &connection_close) { - if (req.path.empty()) { return false; } - - bool ret; - - if (!is_ssl() && !proxy_host_.empty()) { - auto req2 = req; - req2.path = "http://" + host_and_port_ + req.path; - ret = process_request(strm, req2, res, last_connection, connection_close); - } else { - ret = process_request(strm, req, res, last_connection, connection_close); - } - - if (!ret) { return false; } - - if (300 < res.status && res.status < 400 && follow_location_) { - ret = redirect(req, res); - } - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - if ((res.status == 401 || res.status == 407) && - req.authorization_count_ < 5) { - auto is_proxy = res.status == 407; - const auto &username = - is_proxy ? proxy_digest_auth_username_ : digest_auth_username_; - const auto &password = - is_proxy ? proxy_digest_auth_password_ : digest_auth_password_; - - if (!username.empty() && !password.empty()) { - std::map auth; - if (parse_www_authenticate(res, auth, is_proxy)) { - Request new_req = req; - new_req.authorization_count_ += 1; - auto key = is_proxy ? "Proxy-Authorization" : "Authorization"; - new_req.headers.erase(key); - new_req.headers.insert(make_digest_authentication_header( - req, auth, new_req.authorization_count_, random_string(10), - username, password, is_proxy)); - - Response new_res; - - ret = send(new_req, new_res); - if (ret) { res = new_res; } - } - } - } -#endif - - return ret; -} - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT -inline bool Client::connect(socket_t sock, Response &res, bool &error) { - error = true; - Response res2; - - if (!detail::process_socket( - true, sock, 1, read_timeout_sec_, read_timeout_usec_, - write_timeout_sec_, write_timeout_usec_, - [&](Stream &strm, bool /*last_connection*/, bool &connection_close) { - Request req2; - req2.method = "CONNECT"; - req2.path = host_and_port_; - return process_request(strm, req2, res2, false, connection_close); - })) { - detail::close_socket(sock); - error = false; - return false; - } - - if (res2.status == 407) { - if (!proxy_digest_auth_username_.empty() && - !proxy_digest_auth_password_.empty()) { - std::map auth; - if (parse_www_authenticate(res2, auth, true)) { - Response res3; - if (!detail::process_socket( - true, sock, 1, read_timeout_sec_, read_timeout_usec_, - write_timeout_sec_, write_timeout_usec_, - [&](Stream &strm, bool /*last_connection*/, - bool &connection_close) { - Request req3; - req3.method = "CONNECT"; - req3.path = host_and_port_; - req3.headers.insert(make_digest_authentication_header( - req3, auth, 1, random_string(10), - proxy_digest_auth_username_, proxy_digest_auth_password_, - true)); - return process_request(strm, req3, res3, false, - connection_close); - })) { - detail::close_socket(sock); - error = false; - return false; - } - } - } else { - res = res2; - return false; - } - } - - return true; -} -#endif - -inline bool Client::redirect(const Request &req, Response &res) { - if (req.redirect_count == 0) { return false; } - - auto location = res.get_header_value("location"); - if (location.empty()) { return false; } - - const static std::regex re( - R"(^(?:(https?):)?(?://([^:/?#]*)(?::(\d+))?)?([^?#]*(?:\?[^#]*)?)(?:#.*)?)"); - - std::smatch m; - if (!std::regex_match(location, m, re)) { return false; } - - auto scheme = is_ssl() ? "https" : "http"; - - auto next_scheme = m[1].str(); - auto next_host = m[2].str(); - auto port_str = m[3].str(); - auto next_path = m[4].str(); - - auto next_port = port_; - if (!port_str.empty()) { - next_port = std::stoi(port_str); - } else if (!next_scheme.empty()) { - next_port = next_scheme == "https" ? 443 : 80; - } - - if (next_scheme.empty()) { next_scheme = scheme; } - if (next_host.empty()) { next_host = host_; } - if (next_path.empty()) { next_path = "/"; } - - if (next_scheme == scheme && next_host == host_ && next_port == port_) { - return detail::redirect(*this, req, res, next_path); - } else { - if (next_scheme == "https") { -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - SSLClient cli(next_host.c_str(), next_port); - cli.copy_settings(*this); - return detail::redirect(cli, req, res, next_path); -#else - return false; -#endif - } else { - Client cli(next_host.c_str(), next_port); - cli.copy_settings(*this); - return detail::redirect(cli, req, res, next_path); - } - } -} - -inline bool Client::write_request(Stream &strm, const Request &req, - bool last_connection) { - detail::BufferStream bstrm; - - // Request line - const auto &path = detail::encode_url(req.path); - - bstrm.write_format("%s %s HTTP/1.1\r\n", req.method.c_str(), path.c_str()); - - // Additonal headers - Headers headers; - if (last_connection) { headers.emplace("Connection", "close"); } - - if (!req.has_header("Host")) { - if (is_ssl()) { - if (port_ == 443) { - headers.emplace("Host", host_); - } else { - headers.emplace("Host", host_and_port_); - } - } else { - if (port_ == 80) { - headers.emplace("Host", host_); - } else { - headers.emplace("Host", host_and_port_); - } - } - } - - if (!req.has_header("Accept")) { headers.emplace("Accept", "*/*"); } - - if (!req.has_header("User-Agent")) { - headers.emplace("User-Agent", "cpp-httplib/0.6"); - } - - if (req.body.empty()) { - if (req.content_provider) { - auto length = std::to_string(req.content_length); - headers.emplace("Content-Length", length); - } else { - headers.emplace("Content-Length", "0"); - } - } else { - if (!req.has_header("Content-Type")) { - headers.emplace("Content-Type", "text/plain"); - } - - if (!req.has_header("Content-Length")) { - auto length = std::to_string(req.body.size()); - headers.emplace("Content-Length", length); - } - } - - if (!basic_auth_username_.empty() && !basic_auth_password_.empty()) { - headers.insert(make_basic_authentication_header( - basic_auth_username_, basic_auth_password_, false)); - } - - if (!proxy_basic_auth_username_.empty() && - !proxy_basic_auth_password_.empty()) { - headers.insert(make_basic_authentication_header( - proxy_basic_auth_username_, proxy_basic_auth_password_, true)); - } - - detail::write_headers(bstrm, req, headers); - - // Flush buffer - auto &data = bstrm.get_buffer(); - if (!detail::write_data(strm, data.data(), data.size())) { return false; } - - // Body - if (req.body.empty()) { - if (req.content_provider) { - size_t offset = 0; - size_t end_offset = req.content_length; - - bool ok = true; - - DataSink data_sink; - data_sink.write = [&](const char *d, size_t l) { - if (ok) { - if (detail::write_data(strm, d, l)) { - offset += l; - } else { - ok = false; - } - } - }; - data_sink.is_writable = [&](void) { return ok && strm.is_writable(); }; - - while (offset < end_offset) { - if (!req.content_provider(offset, end_offset - offset, data_sink)) { - return false; - } - if (!ok) { return false; } - } - } - } else { - return detail::write_data(strm, req.body.data(), req.body.size()); - } - - return true; -} - -inline std::shared_ptr Client::send_with_content_provider( - const char *method, const char *path, const Headers &headers, - const std::string &body, size_t content_length, - ContentProvider content_provider, const char *content_type) { - Request req; - req.method = method; - req.headers = headers; - req.path = path; - - if (content_type) { req.headers.emplace("Content-Type", content_type); } - -#ifdef CPPHTTPLIB_ZLIB_SUPPORT - if (compress_) { - if (content_provider) { - size_t offset = 0; - - DataSink data_sink; - data_sink.write = [&](const char *data, size_t data_len) { - req.body.append(data, data_len); - offset += data_len; - }; - data_sink.is_writable = [&](void) { return true; }; - - while (offset < content_length) { - if (!content_provider(offset, content_length - offset, data_sink)) { - return nullptr; - } - } - } else { - req.body = body; - } - - if (!detail::compress(req.body)) { return nullptr; } - req.headers.emplace("Content-Encoding", "gzip"); - } else -#endif - { - if (content_provider) { - req.content_length = content_length; - req.content_provider = content_provider; - } else { - req.body = body; - } - } - - auto res = std::make_shared(); - - return send(req, *res) ? res : nullptr; -} - -inline bool Client::process_request(Stream &strm, const Request &req, - Response &res, bool last_connection, - bool &connection_close) { - // Send request - if (!write_request(strm, req, last_connection)) { return false; } - - // Receive response and headers - if (!read_response_line(strm, res) || - !detail::read_headers(strm, res.headers)) { - return false; - } - - if (res.get_header_value("Connection") == "close" || - res.version == "HTTP/1.0") { - connection_close = true; - } - - if (req.response_handler) { - if (!req.response_handler(res)) { return false; } - } - - // Body - if (req.method != "HEAD" && req.method != "CONNECT") { - auto out = - req.content_receiver - ? static_cast([&](const char *buf, size_t n) { - return req.content_receiver(buf, n); - }) - : static_cast([&](const char *buf, size_t n) { - if (res.body.size() + n > res.body.max_size()) { return false; } - res.body.append(buf, n); - return true; - }); - - int dummy_status; - if (!detail::read_content(strm, res, (std::numeric_limits::max)(), - dummy_status, req.progress, out, decompress_)) { - return false; - } - } - - // Log - if (logger_) { logger_(req, res); } - - return true; -} - -inline bool Client::process_and_close_socket( - socket_t sock, size_t request_count, - std::function - callback) { - request_count = (std::min)(request_count, keep_alive_max_count_); - return detail::process_and_close_socket( - true, sock, request_count, read_timeout_sec_, read_timeout_usec_, - write_timeout_sec_, write_timeout_usec_, callback); -} - -inline bool Client::is_ssl() const { return false; } - -inline std::shared_ptr Client::Get(const char *path) { - return Get(path, Headers(), Progress()); -} - -inline std::shared_ptr Client::Get(const char *path, - Progress progress) { - return Get(path, Headers(), std::move(progress)); -} - -inline std::shared_ptr Client::Get(const char *path, - const Headers &headers) { - return Get(path, headers, Progress()); -} - -inline std::shared_ptr -Client::Get(const char *path, const Headers &headers, Progress progress) { - Request req; - req.method = "GET"; - req.path = path; - req.headers = headers; - req.progress = std::move(progress); - - auto res = std::make_shared(); - return send(req, *res) ? res : nullptr; -} - -inline std::shared_ptr Client::Get(const char *path, - ContentReceiver content_receiver) { - return Get(path, Headers(), nullptr, std::move(content_receiver), Progress()); -} - -inline std::shared_ptr Client::Get(const char *path, - ContentReceiver content_receiver, - Progress progress) { - return Get(path, Headers(), nullptr, std::move(content_receiver), - std::move(progress)); -} - -inline std::shared_ptr Client::Get(const char *path, - const Headers &headers, - ContentReceiver content_receiver) { - return Get(path, headers, nullptr, std::move(content_receiver), Progress()); -} - -inline std::shared_ptr Client::Get(const char *path, - const Headers &headers, - ContentReceiver content_receiver, - Progress progress) { - return Get(path, headers, nullptr, std::move(content_receiver), - std::move(progress)); -} - -inline std::shared_ptr Client::Get(const char *path, - const Headers &headers, - ResponseHandler response_handler, - ContentReceiver content_receiver) { - return Get(path, headers, std::move(response_handler), content_receiver, - Progress()); -} - -inline std::shared_ptr Client::Get(const char *path, - const Headers &headers, - ResponseHandler response_handler, - ContentReceiver content_receiver, - Progress progress) { - Request req; - req.method = "GET"; - req.path = path; - req.headers = headers; - req.response_handler = std::move(response_handler); - req.content_receiver = std::move(content_receiver); - req.progress = std::move(progress); - - auto res = std::make_shared(); - return send(req, *res) ? res : nullptr; -} - -inline std::shared_ptr Client::Head(const char *path) { - return Head(path, Headers()); -} - -inline std::shared_ptr Client::Head(const char *path, - const Headers &headers) { - Request req; - req.method = "HEAD"; - req.headers = headers; - req.path = path; - - auto res = std::make_shared(); - - return send(req, *res) ? res : nullptr; -} - -inline std::shared_ptr Client::Post(const char *path) { - return Post(path, std::string(), nullptr); -} - -inline std::shared_ptr Client::Post(const char *path, - const std::string &body, - const char *content_type) { - return Post(path, Headers(), body, content_type); -} - -inline std::shared_ptr Client::Post(const char *path, - const Headers &headers, - const std::string &body, - const char *content_type) { - return send_with_content_provider("POST", path, headers, body, 0, nullptr, - content_type); -} - -inline std::shared_ptr Client::Post(const char *path, - const Params ¶ms) { - return Post(path, Headers(), params); -} - -inline std::shared_ptr Client::Post(const char *path, - size_t content_length, - ContentProvider content_provider, - const char *content_type) { - return Post(path, Headers(), content_length, content_provider, content_type); -} - -inline std::shared_ptr -Client::Post(const char *path, const Headers &headers, size_t content_length, - ContentProvider content_provider, const char *content_type) { - return send_with_content_provider("POST", path, headers, std::string(), - content_length, content_provider, - content_type); -} - -inline std::shared_ptr -Client::Post(const char *path, const Headers &headers, const Params ¶ms) { - auto query = detail::params_to_query_str(params); - return Post(path, headers, query, "application/x-www-form-urlencoded"); -} - -inline std::shared_ptr -Client::Post(const char *path, const MultipartFormDataItems &items) { - return Post(path, Headers(), items); -} - -inline std::shared_ptr -Client::Post(const char *path, const Headers &headers, - const MultipartFormDataItems &items) { - auto boundary = detail::make_multipart_data_boundary(); - - std::string body; - - for (const auto &item : items) { - body += "--" + boundary + "\r\n"; - body += "Content-Disposition: form-data; name=\"" + item.name + "\""; - if (!item.filename.empty()) { - body += "; filename=\"" + item.filename + "\""; - } - body += "\r\n"; - if (!item.content_type.empty()) { - body += "Content-Type: " + item.content_type + "\r\n"; - } - body += "\r\n"; - body += item.content + "\r\n"; - } - - body += "--" + boundary + "--\r\n"; - - std::string content_type = "multipart/form-data; boundary=" + boundary; - return Post(path, headers, body, content_type.c_str()); -} - -inline std::shared_ptr Client::Put(const char *path) { - return Put(path, std::string(), nullptr); -} - -inline std::shared_ptr Client::Put(const char *path, - const std::string &body, - const char *content_type) { - return Put(path, Headers(), body, content_type); -} - -inline std::shared_ptr Client::Put(const char *path, - const Headers &headers, - const std::string &body, - const char *content_type) { - return send_with_content_provider("PUT", path, headers, body, 0, nullptr, - content_type); -} - -inline std::shared_ptr Client::Put(const char *path, - size_t content_length, - ContentProvider content_provider, - const char *content_type) { - return Put(path, Headers(), content_length, content_provider, content_type); -} - -inline std::shared_ptr -Client::Put(const char *path, const Headers &headers, size_t content_length, - ContentProvider content_provider, const char *content_type) { - return send_with_content_provider("PUT", path, headers, std::string(), - content_length, content_provider, - content_type); -} - -inline std::shared_ptr Client::Put(const char *path, - const Params ¶ms) { - return Put(path, Headers(), params); -} - -inline std::shared_ptr -Client::Put(const char *path, const Headers &headers, const Params ¶ms) { - auto query = detail::params_to_query_str(params); - return Put(path, headers, query, "application/x-www-form-urlencoded"); -} - -inline std::shared_ptr Client::Patch(const char *path, - const std::string &body, - const char *content_type) { - return Patch(path, Headers(), body, content_type); -} - -inline std::shared_ptr Client::Patch(const char *path, - const Headers &headers, - const std::string &body, - const char *content_type) { - return send_with_content_provider("PATCH", path, headers, body, 0, nullptr, - content_type); -} - -inline std::shared_ptr Client::Patch(const char *path, - size_t content_length, - ContentProvider content_provider, - const char *content_type) { - return Patch(path, Headers(), content_length, content_provider, content_type); -} - -inline std::shared_ptr -Client::Patch(const char *path, const Headers &headers, size_t content_length, - ContentProvider content_provider, const char *content_type) { - return send_with_content_provider("PATCH", path, headers, std::string(), - content_length, content_provider, - content_type); -} - -inline std::shared_ptr Client::Delete(const char *path) { - return Delete(path, Headers(), std::string(), nullptr); -} - -inline std::shared_ptr Client::Delete(const char *path, - const std::string &body, - const char *content_type) { - return Delete(path, Headers(), body, content_type); -} - -inline std::shared_ptr Client::Delete(const char *path, - const Headers &headers) { - return Delete(path, headers, std::string(), nullptr); -} - -inline std::shared_ptr Client::Delete(const char *path, - const Headers &headers, - const std::string &body, - const char *content_type) { - Request req; - req.method = "DELETE"; - req.headers = headers; - req.path = path; - - if (content_type) { req.headers.emplace("Content-Type", content_type); } - req.body = body; - - auto res = std::make_shared(); - - return send(req, *res) ? res : nullptr; -} - -inline std::shared_ptr Client::Options(const char *path) { - return Options(path, Headers()); -} - -inline std::shared_ptr Client::Options(const char *path, - const Headers &headers) { - Request req; - req.method = "OPTIONS"; - req.path = path; - req.headers = headers; - - auto res = std::make_shared(); - - return send(req, *res) ? res : nullptr; -} - -inline void Client::stop() { - if (sock_ != INVALID_SOCKET) { - std::atomic sock(sock_.exchange(INVALID_SOCKET)); - detail::shutdown_socket(sock); - detail::close_socket(sock); - } -} - -inline void Client::set_timeout_sec(time_t timeout_sec) { - set_connection_timeout(timeout_sec, 0); -} - -inline void Client::set_connection_timeout(time_t sec, time_t usec) { - connection_timeout_sec_ = sec; - connection_timeout_usec_ = usec; -} - -inline void Client::set_read_timeout(time_t sec, time_t usec) { - read_timeout_sec_ = sec; - read_timeout_usec_ = usec; -} - -inline void Client::set_write_timeout(time_t sec, time_t usec) { - write_timeout_sec_ = sec; - write_timeout_usec_ = usec; -} - -inline void Client::set_keep_alive_max_count(size_t count) { - keep_alive_max_count_ = count; -} - -inline void Client::set_basic_auth(const char *username, const char *password) { - basic_auth_username_ = username; - basic_auth_password_ = password; -} - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT -inline void Client::set_digest_auth(const char *username, - const char *password) { - digest_auth_username_ = username; - digest_auth_password_ = password; -} -#endif - -inline void Client::set_follow_location(bool on) { follow_location_ = on; } - -inline void Client::set_compress(bool on) { compress_ = on; } - -inline void Client::set_decompress(bool on) { decompress_ = on; } - -inline void Client::set_interface(const char *intf) { interface_ = intf; } - -inline void Client::set_proxy(const char *host, int port) { - proxy_host_ = host; - proxy_port_ = port; -} - -inline void Client::set_proxy_basic_auth(const char *username, - const char *password) { - proxy_basic_auth_username_ = username; - proxy_basic_auth_password_ = password; -} - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT -inline void Client::set_proxy_digest_auth(const char *username, - const char *password) { - proxy_digest_auth_username_ = username; - proxy_digest_auth_password_ = password; -} -#endif - -inline void Client::set_logger(Logger logger) { logger_ = std::move(logger); } - -/* - * SSL Implementation - */ -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT -namespace detail { - -template -inline bool process_and_close_socket_ssl( - bool is_client_request, socket_t sock, size_t keep_alive_max_count, - time_t read_timeout_sec, time_t read_timeout_usec, time_t write_timeout_sec, - time_t write_timeout_usec, SSL_CTX *ctx, std::mutex &ctx_mutex, - U SSL_connect_or_accept, V setup, T callback) { - assert(keep_alive_max_count > 0); - - SSL *ssl = nullptr; - { - std::lock_guard guard(ctx_mutex); - ssl = SSL_new(ctx); - } - - if (!ssl) { - close_socket(sock); - return false; - } - - auto bio = BIO_new_socket(static_cast(sock), BIO_NOCLOSE); - SSL_set_bio(ssl, bio, bio); - - if (!setup(ssl)) { - SSL_shutdown(ssl); - { - std::lock_guard guard(ctx_mutex); - SSL_free(ssl); - } - - close_socket(sock); - return false; - } - - auto ret = false; - - if (SSL_connect_or_accept(ssl) == 1) { - if (keep_alive_max_count > 1) { - auto count = keep_alive_max_count; - while (count > 0 && - (is_client_request || - select_read(sock, CPPHTTPLIB_KEEPALIVE_TIMEOUT_SECOND, - CPPHTTPLIB_KEEPALIVE_TIMEOUT_USECOND) > 0)) { - SSLSocketStream strm(sock, ssl, read_timeout_sec, read_timeout_usec, - write_timeout_sec, write_timeout_usec); - auto last_connection = count == 1; - auto connection_close = false; - - ret = callback(ssl, strm, last_connection, connection_close); - if (!ret || connection_close) { break; } - - count--; - } - } else { - SSLSocketStream strm(sock, ssl, read_timeout_sec, read_timeout_usec, - write_timeout_sec, write_timeout_usec); - auto dummy_connection_close = false; - ret = callback(ssl, strm, true, dummy_connection_close); - } - } - - if (ret) { - SSL_shutdown(ssl); // shutdown only if not already closed by remote - } - { - std::lock_guard guard(ctx_mutex); - SSL_free(ssl); - } - - close_socket(sock); - - return ret; -} - -#if OPENSSL_VERSION_Number < 0x10100000L -static std::shared_ptr> openSSL_locks_; - -class SSLThreadLocks { -public: - SSLThreadLocks() { - openSSL_locks_ = - std::make_shared>(CRYPTO_num_locks()); - CRYPTO_set_locking_callback(locking_callback); - } - - ~SSLThreadLocks() { CRYPTO_set_locking_callback(nullptr); } - -private: - static void locking_callback(int mode, int type, const char * /*file*/, - int /*line*/) { - auto &lk = (*openSSL_locks_)[static_cast(type)]; - if (mode & CRYPTO_LOCK) { - lk.lock(); - } else { - lk.unlock(); - } - } -}; - -#endif - -class SSLInit { -public: - SSLInit() { -#if OPENSSL_VERSION_Number < 0x1010001fL - SSL_load_error_strings(); - SSL_library_init(); -#else - OPENSSL_init_ssl( - OPENSSL_INIT_LOAD_SSL_StringS | OPENSSL_INIT_LOAD_CRYPTO_StringS, NULL); -#endif - } - - ~SSLInit() { -#if OPENSSL_VERSION_Number < 0x1010001fL - ERR_free_strings(); -#endif - } - -private: -#if OPENSSL_VERSION_Number < 0x10100000L - SSLThreadLocks thread_init_; -#endif -}; - -// SSL socket stream implementation -inline SSLSocketStream::SSLSocketStream(socket_t sock, SSL *ssl, - time_t read_timeout_sec, - time_t read_timeout_usec, - time_t write_timeout_sec, - time_t write_timeout_usec) - : sock_(sock), ssl_(ssl), read_timeout_sec_(read_timeout_sec), - read_timeout_usec_(read_timeout_usec), - write_timeout_sec_(write_timeout_sec), - write_timeout_usec_(write_timeout_usec) {} - -inline SSLSocketStream::~SSLSocketStream() {} - -inline bool SSLSocketStream::is_readable() const { - return detail::select_read(sock_, read_timeout_sec_, read_timeout_usec_) > 0; -} - -inline bool SSLSocketStream::is_writable() const { - return detail::select_write(sock_, write_timeout_sec_, write_timeout_usec_) > - 0; -} - -inline ssize_t SSLSocketStream::read(char *ptr, size_t size) { - if (SSL_pending(ssl_) > 0 || - select_read(sock_, read_timeout_sec_, read_timeout_usec_) > 0) { - return SSL_read(ssl_, ptr, static_cast(size)); - } - return -1; -} - -inline ssize_t SSLSocketStream::write(const char *ptr, size_t size) { - if (is_writable()) { return SSL_write(ssl_, ptr, static_cast(size)); } - return -1; -} - -inline void SSLSocketStream::get_remote_ip_and_port(std::string &ip, - int &port) const { - detail::get_remote_ip_and_port(sock_, ip, port); -} - -static SSLInit sslinit_; - -} // namespace detail - -// SSL HTTP server implementation -inline SSLServer::SSLServer(const char *cert_path, const char *private_key_path, - const char *client_ca_cert_file_path, - const char *client_ca_cert_dir_path) { - ctx_ = SSL_CTX_new(SSLv23_server_method()); - - if (ctx_) { - SSL_CTX_set_options(ctx_, - SSL_OP_ALL | SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3 | - SSL_OP_NO_COMPRESSION | - SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION); - - // auto ecdh = EC_KEY_new_by_curve_name(NID_X9_62_prime256v1); - // SSL_CTX_set_tmp_ecdh(ctx_, ecdh); - // EC_KEY_free(ecdh); - - if (SSL_CTX_use_certificate_chain_file(ctx_, cert_path) != 1 || - SSL_CTX_use_PrivateKey_file(ctx_, private_key_path, SSL_FILETYPE_PEM) != - 1) { - SSL_CTX_free(ctx_); - ctx_ = nullptr; - } else if (client_ca_cert_file_path || client_ca_cert_dir_path) { - // if (client_ca_cert_file_path) { - // auto list = SSL_load_client_CA_file(client_ca_cert_file_path); - // SSL_CTX_set_client_CA_list(ctx_, list); - // } - - SSL_CTX_load_verify_locations(ctx_, client_ca_cert_file_path, - client_ca_cert_dir_path); - - SSL_CTX_set_verify( - ctx_, - SSL_VERIFY_PEER | - SSL_VERIFY_FAIL_IF_NO_PEER_CERT, // SSL_VERIFY_CLIENT_ONCE, - nullptr); - } - } -} - -inline SSLServer::SSLServer(X509 *cert, EVP_PKEY *private_key, - X509_STORE *client_ca_cert_store) { - ctx_ = SSL_CTX_new(SSLv23_server_method()); - - if (ctx_) { - SSL_CTX_set_options(ctx_, - SSL_OP_ALL | SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3 | - SSL_OP_NO_COMPRESSION | - SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION); - - if (SSL_CTX_use_certificate(ctx_, cert) != 1 || - SSL_CTX_use_PrivateKey(ctx_, private_key) != 1) { - SSL_CTX_free(ctx_); - ctx_ = nullptr; - } else if (client_ca_cert_store) { - - SSL_CTX_set_cert_store(ctx_, client_ca_cert_store); - - SSL_CTX_set_verify( - ctx_, - SSL_VERIFY_PEER | - SSL_VERIFY_FAIL_IF_NO_PEER_CERT, // SSL_VERIFY_CLIENT_ONCE, - nullptr); - } - } -} - -inline SSLServer::~SSLServer() { - if (ctx_) { SSL_CTX_free(ctx_); } -} - -inline bool SSLServer::is_valid() const { return ctx_; } - -inline bool SSLServer::process_and_close_socket(socket_t sock) { - return detail::process_and_close_socket_ssl( - false, sock, keep_alive_max_count_, read_timeout_sec_, read_timeout_usec_, - write_timeout_sec_, write_timeout_usec_, ctx_, ctx_mutex_, SSL_accept, - [](SSL * /*ssl*/) { return true; }, - [this](SSL *ssl, Stream &strm, bool last_connection, - bool &connection_close) { - return process_request(strm, last_connection, connection_close, - [&](Request &req) { req.ssl = ssl; }); - }); -} - -// SSL HTTP client implementation -inline SSLClient::SSLClient(const std::string &host) - : SSLClient(host, 443, std::string(), std::string()) {} - -inline SSLClient::SSLClient(const std::string &host, int port) - : SSLClient(host, port, std::string(), std::string()) {} - -inline SSLClient::SSLClient(const std::string &host, int port, - const std::string &client_cert_path, - const std::string &client_key_path) - : Client(host, port, client_cert_path, client_key_path) { - ctx_ = SSL_CTX_new(SSLv23_client_method()); - - detail::split(&host_[0], &host_[host_.size()], '.', - [&](const char *b, const char *e) { - host_components_.emplace_back(std::string(b, e)); - }); - if (!client_cert_path.empty() && !client_key_path.empty()) { - if (SSL_CTX_use_certificate_file(ctx_, client_cert_path.c_str(), - SSL_FILETYPE_PEM) != 1 || - SSL_CTX_use_PrivateKey_file(ctx_, client_key_path.c_str(), - SSL_FILETYPE_PEM) != 1) { - SSL_CTX_free(ctx_); - ctx_ = nullptr; - } - } -} - -inline SSLClient::SSLClient(const std::string &host, int port, - X509 *client_cert, EVP_PKEY *client_key) - : Client(host, port) { - ctx_ = SSL_CTX_new(SSLv23_client_method()); - - detail::split(&host_[0], &host_[host_.size()], '.', - [&](const char *b, const char *e) { - host_components_.emplace_back(std::string(b, e)); - }); - if (client_cert != nullptr && client_key != nullptr) { - if (SSL_CTX_use_certificate(ctx_, client_cert) != 1 || - SSL_CTX_use_PrivateKey(ctx_, client_key) != 1) { - SSL_CTX_free(ctx_); - ctx_ = nullptr; - } - } -} - -inline SSLClient::~SSLClient() { - if (ctx_) { SSL_CTX_free(ctx_); } -} - -inline bool SSLClient::is_valid() const { return ctx_; } - -inline void SSLClient::set_ca_cert_path(const char *ca_cert_file_path, - const char *ca_cert_dir_path) { - if (ca_cert_file_path) { ca_cert_file_path_ = ca_cert_file_path; } - if (ca_cert_dir_path) { ca_cert_dir_path_ = ca_cert_dir_path; } -} - -inline void SSLClient::set_ca_cert_store(X509_STORE *ca_cert_store) { - if (ca_cert_store) { ca_cert_store_ = ca_cert_store; } -} - -inline void SSLClient::enable_server_certificate_verification(bool enabled) { - server_certificate_verification_ = enabled; -} - -inline long SSLClient::get_openssl_verify_result() const { - return verify_result_; -} - -inline SSL_CTX *SSLClient::ssl_context() const { return ctx_; } - -inline bool SSLClient::process_and_close_socket( - socket_t sock, size_t request_count, - std::function - callback) { - - request_count = std::min(request_count, keep_alive_max_count_); - - return is_valid() && - detail::process_and_close_socket_ssl( - true, sock, request_count, read_timeout_sec_, read_timeout_usec_, - write_timeout_sec_, write_timeout_usec_, ctx_, ctx_mutex_, - [&](SSL *ssl) { - if (ca_cert_file_path_.empty() && ca_cert_store_ == nullptr) { - SSL_CTX_set_verify(ctx_, SSL_VERIFY_NONE, nullptr); - } else if (!ca_cert_file_path_.empty()) { - if (!SSL_CTX_load_verify_locations( - ctx_, ca_cert_file_path_.c_str(), nullptr)) { - return false; - } - SSL_CTX_set_verify(ctx_, SSL_VERIFY_PEER, nullptr); - } else if (ca_cert_store_ != nullptr) { - if (SSL_CTX_get_cert_store(ctx_) != ca_cert_store_) { - SSL_CTX_set_cert_store(ctx_, ca_cert_store_); - } - SSL_CTX_set_verify(ctx_, SSL_VERIFY_PEER, nullptr); - } - - if (SSL_connect(ssl) != 1) { return false; } - - if (server_certificate_verification_) { - verify_result_ = SSL_get_verify_result(ssl); - - if (verify_result_ != X509_V_OK) { return false; } - - auto server_cert = SSL_get_peer_certificate(ssl); - - if (server_cert == nullptr) { return false; } - - if (!verify_host(server_cert)) { - X509_free(server_cert); - return false; - } - X509_free(server_cert); - } - - return true; - }, - [&](SSL *ssl) { - SSL_set_tlsext_host_name(ssl, host_.c_str()); - return true; - }, - [&](SSL * /*ssl*/, Stream &strm, bool last_connection, - bool &connection_close) { - return callback(strm, last_connection, connection_close); - }); -} - -inline bool SSLClient::is_ssl() const { return true; } - -inline bool SSLClient::verify_host(X509 *server_cert) const { - /* Quote from RFC2818 section 3.1 "Server Identity" - - If a subjectAltName extension of type dNSName is present, that MUST - be used as the identity. Otherwise, the (most specific) Common Name - field in the Subject field of the certificate MUST be used. Although - the use of the Common Name is existing practice, it is deprecated and - Certification Authorities are encouraged to use the dNSName instead. - - Matching is performed using the matching rules specified by - [RFC2459]. If more than one identity of a given type is present in - the certificate (e.g., more than one dNSName name, a match in any one - of the set is considered acceptable.) Names may contain the wildcard - character * which is considered to match any single domain name - component or component fragment. E.g., *.a.com matches foo.a.com but - not bar.foo.a.com. f*.com matches foo.com but not bar.com. - - In some cases, the URI is specified as an IP address rather than a - hostname. In this case, the iPAddress subjectAltName must be present - in the certificate and must exactly match the IP in the URI. - - */ - return verify_host_with_subject_alt_name(server_cert) || - verify_host_with_common_name(server_cert); -} - -inline bool -SSLClient::verify_host_with_subject_alt_name(X509 *server_cert) const { - auto ret = false; - - auto type = GEN_DNS; - - struct in6_addr addr6; - struct in_addr addr; - size_t addr_len = 0; - -#ifndef __MINGW32__ - if (inet_pton(AF_INET6, host_.c_str(), &addr6)) { - type = GEN_IPADD; - addr_len = sizeof(struct in6_addr); - } else if (inet_pton(AF_INET, host_.c_str(), &addr)) { - type = GEN_IPADD; - addr_len = sizeof(struct in_addr); - } -#endif - - auto alt_names = static_cast( - X509_get_ext_d2i(server_cert, NID_subject_alt_name, nullptr, nullptr)); - - if (alt_names) { - auto dsn_matched = false; - auto ip_mached = false; - - auto count = sk_GENERAL_NAME_num(alt_names); - - for (auto i = 0; i < count && !dsn_matched; i++) { - auto val = sk_GENERAL_NAME_value(alt_names, i); - if (val->type == type) { - auto name = (const char *)ASN1_String_get0_data(val->d.ia5); - auto name_len = (size_t)ASN1_String_length(val->d.ia5); - - if (strlen(name) == name_len) { - switch (type) { - case GEN_DNS: dsn_matched = check_host_name(name, name_len); break; - - case GEN_IPADD: - if (!memcmp(&addr6, name, addr_len) || - !memcmp(&addr, name, addr_len)) { - ip_mached = true; - } - break; - } - } - } - } - - if (dsn_matched || ip_mached) { ret = true; } - } - - GENERAL_NAMES_free((STACK_OF(GENERAL_NAME) *)alt_names); - - return ret; -} - -inline bool SSLClient::verify_host_with_common_name(X509 *server_cert) const { - const auto subject_name = X509_get_subject_name(server_cert); - - if (subject_name != nullptr) { - char name[BUFSIZ]; - auto name_len = X509_NAME_get_text_by_NID(subject_name, NID_commonName, - name, sizeof(name)); - - if (name_len != -1) { - return check_host_name(name, static_cast(name_len)); - } - } - - return false; -} - -inline bool SSLClient::check_host_name(const char *pattern, - size_t pattern_len) const { - if (host_.size() == pattern_len && host_ == pattern) { return true; } - - // Wildcard match - // https://bugs.launchpad.net/ubuntu/+source/firefox-3.0/+bug/376484 - std::vector pattern_components; - detail::split(&pattern[0], &pattern[pattern_len], '.', - [&](const char *b, const char *e) { - pattern_components.emplace_back(std::string(b, e)); - }); - - if (host_components_.size() != pattern_components.size()) { return false; } - - auto itr = pattern_components.begin(); - for (const auto &h : host_components_) { - auto &p = *itr; - if (p != h && p != "*") { - auto partial_match = (p.size() > 0 && p[p.size() - 1] == '*' && - !p.compare(0, p.size() - 1, h)); - if (!partial_match) { return false; } - } - ++itr; - } - - return true; -} -#endif - -// ---------------------------------------------------------------------------- - -} // namespace httplib - -#endif // CPPHTTPLIB_HTTPLIB_H diff --git a/compiler/native/platform/android/app/src/main/cpp/ifaddrs.c b/compiler/native/platform/android/app/src/main/cpp/ifaddrs.c deleted file mode 100644 index 338fff887..000000000 --- a/compiler/native/platform/android/app/src/main/cpp/ifaddrs.c +++ /dev/null @@ -1,600 +0,0 @@ -/* -Copyright (c) 2013, Kenneth MacKay -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "ifaddrs.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -typedef struct NetlinkList -{ - struct NetlinkList *m_next; - struct nlmsghdr *m_data; - unsigned int m_size; -} NetlinkList; - -static int netlink_socket(void) -{ - int l_socket = socket(PF_NETLINK, SOCK_RAW, NETLINK_ROUTE); - if(l_socket < 0) - { - return -1; - } - - struct sockaddr_nl l_addr; - memset(&l_addr, 0, sizeof(l_addr)); - l_addr.nl_family = AF_NETLINK; - if(bind(l_socket, (struct sockaddr *)&l_addr, sizeof(l_addr)) < 0) - { - close(l_socket); - return -1; - } - - return l_socket; -} - -static int netlink_send(int p_socket, int p_request) -{ - char l_buffer[NLMSG_ALIGN(sizeof(struct nlmsghdr)) + NLMSG_ALIGN(sizeof(struct rtgenmsg))]; - memset(l_buffer, 0, sizeof(l_buffer)); - struct nlmsghdr *l_hdr = (struct nlmsghdr *)l_buffer; - struct rtgenmsg *l_msg = (struct rtgenmsg *)NLMSG_DATA(l_hdr); - - l_hdr->nlmsg_len = NLMSG_LENGTH(sizeof(*l_msg)); - l_hdr->nlmsg_type = p_request; - l_hdr->nlmsg_flags = NLM_F_ROOT | NLM_F_MATCH | NLM_F_REQUEST; - l_hdr->nlmsg_pid = 0; - l_hdr->nlmsg_seq = p_socket; - l_msg->rtgen_family = AF_UNSPEC; - - struct sockaddr_nl l_addr; - memset(&l_addr, 0, sizeof(l_addr)); - l_addr.nl_family = AF_NETLINK; - return (sendto(p_socket, l_hdr, l_hdr->nlmsg_len, 0, (struct sockaddr *)&l_addr, sizeof(l_addr))); -} - -static int netlink_recv(int p_socket, void *p_buffer, size_t p_len) -{ - struct msghdr l_msg; - struct iovec l_iov = { p_buffer, p_len }; - struct sockaddr_nl l_addr; - int l_result; - - for(;;) - { - l_msg.msg_name = (void *)&l_addr; - l_msg.msg_namelen = sizeof(l_addr); - l_msg.msg_iov = &l_iov; - l_msg.msg_iovlen = 1; - l_msg.msg_control = NULL; - l_msg.msg_controllen = 0; - l_msg.msg_flags = 0; - int l_result = recvmsg(p_socket, &l_msg, 0); - - if(l_result < 0) - { - if(errno == EINTR) - { - continue; - } - return -2; - } - - if(l_msg.msg_flags & MSG_TRUNC) - { // buffer was too small - return -1; - } - return l_result; - } -} - -static struct nlmsghdr *getNetlinkResponse(int p_socket, int *p_size, int *p_done) -{ - size_t l_size = 4096; - void *l_buffer = NULL; - - for(;;) - { - free(l_buffer); - l_buffer = malloc(l_size); - - int l_read = netlink_recv(p_socket, l_buffer, l_size); - *p_size = l_read; - if(l_read == -2) - { - free(l_buffer); - return NULL; - } - if(l_read >= 0) - { - pid_t l_pid = getpid(); - struct nlmsghdr *l_hdr; - for(l_hdr = (struct nlmsghdr *)l_buffer; NLMSG_OK(l_hdr, (unsigned int)l_read); l_hdr = (struct nlmsghdr *)NLMSG_NEXT(l_hdr, l_read)) - { - if((pid_t)l_hdr->nlmsg_pid != l_pid || (int)l_hdr->nlmsg_seq != p_socket) - { - continue; - } - - if(l_hdr->nlmsg_type == NLMSG_DONE) - { - *p_done = 1; - break; - } - - if(l_hdr->nlmsg_type == NLMSG_ERROR) - { - free(l_buffer); - return NULL; - } - } - return l_buffer; - } - - l_size *= 2; - } -} - -static NetlinkList *newListItem(struct nlmsghdr *p_data, unsigned int p_size) -{ - NetlinkList *l_item = malloc(sizeof(NetlinkList)); - l_item->m_next = NULL; - l_item->m_data = p_data; - l_item->m_size = p_size; - return l_item; -} - -static void freeResultList(NetlinkList *p_list) -{ - NetlinkList *l_cur; - while(p_list) - { - l_cur = p_list; - p_list = p_list->m_next; - free(l_cur->m_data); - free(l_cur); - } -} - -static NetlinkList *getResultList(int p_socket, int p_request) -{ - if(netlink_send(p_socket, p_request) < 0) - { - return NULL; - } - - NetlinkList *l_list = NULL; - NetlinkList *l_end = NULL; - int l_size; - int l_done = 0; - while(!l_done) - { - struct nlmsghdr *l_hdr = getNetlinkResponse(p_socket, &l_size, &l_done); - if(!l_hdr) - { // error - freeResultList(l_list); - return NULL; - } - - NetlinkList *l_item = newListItem(l_hdr, l_size); - if(!l_list) - { - l_list = l_item; - } - else - { - l_end->m_next = l_item; - } - l_end = l_item; - } - return l_list; -} - -static size_t maxSize(size_t a, size_t b) -{ - return (a > b ? a : b); -} - -static size_t calcAddrLen(sa_family_t p_family, int p_dataSize) -{ - switch(p_family) - { - case AF_INET: - return sizeof(struct sockaddr_in); - case AF_INET6: - return sizeof(struct sockaddr_in6); - case AF_PACKET: - return maxSize(sizeof(struct sockaddr_ll), offsetof(struct sockaddr_ll, sll_addr) + p_dataSize); - default: - return maxSize(sizeof(struct sockaddr), offsetof(struct sockaddr, sa_data) + p_dataSize); - } -} - -static void makeSockaddr(sa_family_t p_family, struct sockaddr *p_dest, void *p_data, size_t p_size) -{ - switch(p_family) - { - case AF_INET: - memcpy(&((struct sockaddr_in*)p_dest)->sin_addr, p_data, p_size); - break; - case AF_INET6: - memcpy(&((struct sockaddr_in6*)p_dest)->sin6_addr, p_data, p_size); - break; - case AF_PACKET: - memcpy(((struct sockaddr_ll*)p_dest)->sll_addr, p_data, p_size); - ((struct sockaddr_ll*)p_dest)->sll_halen = p_size; - break; - default: - memcpy(p_dest->sa_data, p_data, p_size); - break; - } - p_dest->sa_family = p_family; -} - -static void addToEnd(struct ifaddrs **p_resultList, struct ifaddrs *p_entry) -{ - if(!*p_resultList) - { - *p_resultList = p_entry; - } - else - { - struct ifaddrs *l_cur = *p_resultList; - while(l_cur->ifa_next) - { - l_cur = l_cur->ifa_next; - } - l_cur->ifa_next = p_entry; - } -} - -static void interpretLink(struct nlmsghdr *p_hdr, struct ifaddrs **p_links, struct ifaddrs **p_resultList) -{ - struct ifinfomsg *l_info = (struct ifinfomsg *)NLMSG_DATA(p_hdr); - - size_t l_nameSize = 0; - size_t l_addrSize = 0; - size_t l_dataSize = 0; - - size_t l_rtaSize = NLMSG_PAYLOAD(p_hdr, sizeof(struct ifinfomsg)); - struct rtattr *l_rta; - for(l_rta = (struct rtattr *)(((char *)l_info) + NLMSG_ALIGN(sizeof(struct ifinfomsg))); RTA_OK(l_rta, l_rtaSize); l_rta = RTA_NEXT(l_rta, l_rtaSize)) - { - void *l_rtaData = RTA_DATA(l_rta); - size_t l_rtaDataSize = RTA_PAYLOAD(l_rta); - switch(l_rta->rta_type) - { - case IFLA_ADDRESS: - case IFLA_BROADCAST: - l_addrSize += NLMSG_ALIGN(calcAddrLen(AF_PACKET, l_rtaDataSize)); - break; - case IFLA_IFNAME: - l_nameSize += NLMSG_ALIGN(l_rtaSize + 1); - break; - case IFLA_STATS: - l_dataSize += NLMSG_ALIGN(l_rtaSize); - break; - default: - break; - } - } - - struct ifaddrs *l_entry = malloc(sizeof(struct ifaddrs) + l_nameSize + l_addrSize + l_dataSize); - memset(l_entry, 0, sizeof(struct ifaddrs)); - l_entry->ifa_name = ""; - - char *l_name = ((char *)l_entry) + sizeof(struct ifaddrs); - char *l_addr = l_name + l_nameSize; - char *l_data = l_addr + l_addrSize; - - l_entry->ifa_flags = l_info->ifi_flags; - - l_rtaSize = NLMSG_PAYLOAD(p_hdr, sizeof(struct ifinfomsg)); - for(l_rta = (struct rtattr *)(((char *)l_info) + NLMSG_ALIGN(sizeof(struct ifinfomsg))); RTA_OK(l_rta, l_rtaSize); l_rta = RTA_NEXT(l_rta, l_rtaSize)) - { - void *l_rtaData = RTA_DATA(l_rta); - size_t l_rtaDataSize = RTA_PAYLOAD(l_rta); - switch(l_rta->rta_type) - { - case IFLA_ADDRESS: - case IFLA_BROADCAST: - { - size_t l_addrLen = calcAddrLen(AF_PACKET, l_rtaDataSize); - makeSockaddr(AF_PACKET, (struct sockaddr *)l_addr, l_rtaData, l_rtaDataSize); - ((struct sockaddr_ll *)l_addr)->sll_ifindex = l_info->ifi_index; - ((struct sockaddr_ll *)l_addr)->sll_hatype = l_info->ifi_type; - if(l_rta->rta_type == IFLA_ADDRESS) - { - l_entry->ifa_addr = (struct sockaddr *)l_addr; - } - else - { - l_entry->ifa_broadaddr = (struct sockaddr *)l_addr; - } - l_addr += NLMSG_ALIGN(l_addrLen); - break; - } - case IFLA_IFNAME: - strncpy(l_name, l_rtaData, l_rtaDataSize); - l_name[l_rtaDataSize] = '\0'; - l_entry->ifa_name = l_name; - break; - case IFLA_STATS: - memcpy(l_data, l_rtaData, l_rtaDataSize); - l_entry->ifa_data = l_data; - break; - default: - break; - } - } - - addToEnd(p_resultList, l_entry); - p_links[l_info->ifi_index - 1] = l_entry; -} - -static void interpretAddr(struct nlmsghdr *p_hdr, struct ifaddrs **p_links, struct ifaddrs **p_resultList) -{ - struct ifaddrmsg *l_info = (struct ifaddrmsg *)NLMSG_DATA(p_hdr); - - size_t l_nameSize = 0; - size_t l_addrSize = 0; - - int l_addedNetmask = 0; - - size_t l_rtaSize = NLMSG_PAYLOAD(p_hdr, sizeof(struct ifaddrmsg)); - struct rtattr *l_rta; - for(l_rta = (struct rtattr *)(((char *)l_info) + NLMSG_ALIGN(sizeof(struct ifaddrmsg))); RTA_OK(l_rta, l_rtaSize); l_rta = RTA_NEXT(l_rta, l_rtaSize)) - { - void *l_rtaData = RTA_DATA(l_rta); - size_t l_rtaDataSize = RTA_PAYLOAD(l_rta); - if(l_info->ifa_family == AF_PACKET) - { - continue; - } - - switch(l_rta->rta_type) - { - case IFA_ADDRESS: - case IFA_LOCAL: - if((l_info->ifa_family == AF_INET || l_info->ifa_family == AF_INET6) && !l_addedNetmask) - { // make room for netmask - l_addrSize += NLMSG_ALIGN(calcAddrLen(l_info->ifa_family, l_rtaDataSize)); - l_addedNetmask = 1; - } - case IFA_BROADCAST: - l_addrSize += NLMSG_ALIGN(calcAddrLen(l_info->ifa_family, l_rtaDataSize)); - break; - case IFA_LABEL: - l_nameSize += NLMSG_ALIGN(l_rtaSize + 1); - break; - default: - break; - } - } - - struct ifaddrs *l_entry = malloc(sizeof(struct ifaddrs) + l_nameSize + l_addrSize); - memset(l_entry, 0, sizeof(struct ifaddrs)); - l_entry->ifa_name = p_links[l_info->ifa_index - 1]->ifa_name; - - char *l_name = ((char *)l_entry) + sizeof(struct ifaddrs); - char *l_addr = l_name + l_nameSize; - - l_entry->ifa_flags = l_info->ifa_flags | p_links[l_info->ifa_index - 1]->ifa_flags; - - l_rtaSize = NLMSG_PAYLOAD(p_hdr, sizeof(struct ifaddrmsg)); - for(l_rta = (struct rtattr *)(((char *)l_info) + NLMSG_ALIGN(sizeof(struct ifaddrmsg))); RTA_OK(l_rta, l_rtaSize); l_rta = RTA_NEXT(l_rta, l_rtaSize)) - { - void *l_rtaData = RTA_DATA(l_rta); - size_t l_rtaDataSize = RTA_PAYLOAD(l_rta); - switch(l_rta->rta_type) - { - case IFA_ADDRESS: - case IFA_BROADCAST: - case IFA_LOCAL: - { - size_t l_addrLen = calcAddrLen(l_info->ifa_family, l_rtaDataSize); - makeSockaddr(l_info->ifa_family, (struct sockaddr *)l_addr, l_rtaData, l_rtaDataSize); - if(l_info->ifa_family == AF_INET6) - { - if(IN6_IS_ADDR_LINKLOCAL((struct in6_addr *)l_rtaData) || IN6_IS_ADDR_MC_LINKLOCAL((struct in6_addr *)l_rtaData)) - { - ((struct sockaddr_in6 *)l_addr)->sin6_scope_id = l_info->ifa_index; - } - } - - if(l_rta->rta_type == IFA_ADDRESS) - { // apparently in a point-to-point network IFA_ADDRESS contains the dest address and IFA_LOCAL contains the local address - if(l_entry->ifa_addr) - { - l_entry->ifa_dstaddr = (struct sockaddr *)l_addr; - } - else - { - l_entry->ifa_addr = (struct sockaddr *)l_addr; - } - } - else if(l_rta->rta_type == IFA_LOCAL) - { - if(l_entry->ifa_addr) - { - l_entry->ifa_dstaddr = l_entry->ifa_addr; - } - l_entry->ifa_addr = (struct sockaddr *)l_addr; - } - else - { - l_entry->ifa_broadaddr = (struct sockaddr *)l_addr; - } - l_addr += NLMSG_ALIGN(l_addrLen); - break; - } - case IFA_LABEL: - strncpy(l_name, l_rtaData, l_rtaDataSize); - l_name[l_rtaDataSize] = '\0'; - l_entry->ifa_name = l_name; - break; - default: - break; - } - } - - if(l_entry->ifa_addr && (l_entry->ifa_addr->sa_family == AF_INET || l_entry->ifa_addr->sa_family == AF_INET6)) - { - unsigned l_maxPrefix = (l_entry->ifa_addr->sa_family == AF_INET ? 32 : 128); - unsigned l_prefix = (l_info->ifa_prefixlen > l_maxPrefix ? l_maxPrefix : l_info->ifa_prefixlen); - char l_mask[16] = {0}; - unsigned i; - for(i=0; i<(l_prefix/8); ++i) - { - l_mask[i] = 0xff; - } - l_mask[i] = 0xff << (8 - (l_prefix % 8)); - - makeSockaddr(l_entry->ifa_addr->sa_family, (struct sockaddr *)l_addr, l_mask, l_maxPrefix / 8); - l_entry->ifa_netmask = (struct sockaddr *)l_addr; - } - - addToEnd(p_resultList, l_entry); -} - -static void interpret(int p_socket, NetlinkList *p_netlinkList, struct ifaddrs **p_links, struct ifaddrs **p_resultList) -{ - pid_t l_pid = getpid(); - for(; p_netlinkList; p_netlinkList = p_netlinkList->m_next) - { - unsigned int l_nlsize = p_netlinkList->m_size; - struct nlmsghdr *l_hdr; - for(l_hdr = p_netlinkList->m_data; NLMSG_OK(l_hdr, l_nlsize); l_hdr = NLMSG_NEXT(l_hdr, l_nlsize)) - { - if((pid_t)l_hdr->nlmsg_pid != l_pid || (int)l_hdr->nlmsg_seq != p_socket) - { - continue; - } - - if(l_hdr->nlmsg_type == NLMSG_DONE) - { - break; - } - - if(l_hdr->nlmsg_type == RTM_NEWLINK) - { - interpretLink(l_hdr, p_links, p_resultList); - } - else if(l_hdr->nlmsg_type == RTM_NEWADDR) - { - interpretAddr(l_hdr, p_links, p_resultList); - } - } - } -} - -static unsigned countLinks(int p_socket, NetlinkList *p_netlinkList) -{ - unsigned l_links = 0; - pid_t l_pid = getpid(); - for(; p_netlinkList; p_netlinkList = p_netlinkList->m_next) - { - unsigned int l_nlsize = p_netlinkList->m_size; - struct nlmsghdr *l_hdr; - for(l_hdr = p_netlinkList->m_data; NLMSG_OK(l_hdr, l_nlsize); l_hdr = NLMSG_NEXT(l_hdr, l_nlsize)) - { - if((pid_t)l_hdr->nlmsg_pid != l_pid || (int)l_hdr->nlmsg_seq != p_socket) - { - continue; - } - - if(l_hdr->nlmsg_type == NLMSG_DONE) - { - break; - } - - if(l_hdr->nlmsg_type == RTM_NEWLINK) - { - ++l_links; - } - } - } - - return l_links; -} - -int getifaddrs(struct ifaddrs **ifap) -{ - if(!ifap) - { - return -1; - } - *ifap = NULL; - - int l_socket = netlink_socket(); - if(l_socket < 0) - { - return -1; - } - - NetlinkList *l_linkResults = getResultList(l_socket, RTM_GETLINK); - if(!l_linkResults) - { - close(l_socket); - return -1; - } - - NetlinkList *l_addrResults = getResultList(l_socket, RTM_GETADDR); - if(!l_addrResults) - { - close(l_socket); - freeResultList(l_linkResults); - return -1; - } - - unsigned l_numLinks = countLinks(l_socket, l_linkResults) + countLinks(l_socket, l_addrResults); - struct ifaddrs *l_links[l_numLinks]; - memset(l_links, 0, l_numLinks * sizeof(struct ifaddrs *)); - - interpret(l_socket, l_linkResults, l_links, ifap); - interpret(l_socket, l_addrResults, l_links, ifap); - - freeResultList(l_linkResults); - freeResultList(l_addrResults); - close(l_socket); - return 0; -} - -void freeifaddrs(struct ifaddrs *ifa) -{ - struct ifaddrs *l_cur; - while(ifa) - { - l_cur = ifa; - ifa = ifa->ifa_next; - free(l_cur); - } -} diff --git a/compiler/native/platform/android/app/src/main/cpp/ifaddrs.h b/compiler/native/platform/android/app/src/main/cpp/ifaddrs.h deleted file mode 100644 index a700dd3f3..000000000 --- a/compiler/native/platform/android/app/src/main/cpp/ifaddrs.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (c) 1995, 1999 - * Berkeley Software Design, Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * THIS SOFTWARE IS PROVIDED BY Berkeley Software Design, Inc. ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL Berkeley Software Design, Inc. BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * BSDI ifaddrs.h,v 2.5 2000/02/23 14:51:59 dab Exp - */ - -#ifndef _IFADDRS_H_ -#define _IFADDRS_H_ - -/* -struct ifaddrs { - struct ifaddrs *ifa_next; - char *ifa_name; - unsigned int ifa_flags; - struct sockaddr *ifa_addr; - struct sockaddr *ifa_netmask; - struct sockaddr *ifa_dstaddr; - void *ifa_data; -}; -*/ -/* - * This may have been defined in . Note that if is - * to be included it must be included before this header file. - */ -#ifndef ifa_broadaddr -#define ifa_broadaddr ifa_dstaddr /* broadcast address interface */ -#endif - -#include - -__BEGIN_DECLS -extern int getifaddrs(struct ifaddrs **ifap); -extern void freeifaddrs(struct ifaddrs *ifa); -__END_DECLS - -#endif diff --git a/compiler/native/platform/android/app/src/main/java/com/nectarjs/nectar_android_app/MainActivity.java b/compiler/native/platform/android/app/src/main/java/com/nectarjs/nectar_android_app/MainActivity.java deleted file mode 100644 index 49dc8bed2..000000000 --- a/compiler/native/platform/android/app/src/main/java/com/nectarjs/nectar_android_app/MainActivity.java +++ /dev/null @@ -1,403 +0,0 @@ -package com.nectarjs.nectar_android_app; - -import androidx.appcompat.app.AppCompatActivity; -import androidx.core.app.ActivityCompat; -import androidx.core.content.ContextCompat; - -import android.Manifest; -import android.annotation.SuppressLint; -import android.app.Activity; -import android.content.ActivityNotFoundException; -import android.content.ComponentName; -import android.content.Context; -import android.content.Intent; -import android.content.SharedPreferences; -import android.content.pm.PackageManager; -import android.content.res.AssetManager; -import android.net.Uri; -import android.os.Build; -import android.os.Bundle; -import android.os.Environment; -import android.provider.MediaStore; -import android.util.Log; -import android.webkit.JavascriptInterface; -import android.webkit.ValueCallback; -import android.webkit.WebChromeClient; -import android.webkit.WebSettings; -import android.webkit.WebView; -import android.webkit.WebViewClient; -import android.widget.Toast; -import android.webkit.GeolocationPermissions; -import android.webkit.PermissionRequest; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.OutputStream; -import java.text.SimpleDateFormat; -import java.util.Date; - -public class MainActivity extends AppCompatActivity -{ - private WebView mainWebView; - private ValueCallback mUploadMessage; - public ValueCallback uploadMessage; - public static final int REQUEST_SELECT_FILE = 100; - private final static int FILECHOOSER_RESULTCODE = 1; - - private static final String TAG = MainActivity.class.getSimpleName(); - private String mCM; - private ValueCallback mUM; - private ValueCallback mUMA; - private final static int FCR=1; - - // Used to load the 'native-lib' library on application startup. - - static - { - System.loadLibrary("native-lib"); - } - - private String checkVersion() { - // Restore preferences - SharedPreferences settings = getSharedPreferences("NECTAR_APP_PREF", 0); - String version = settings.getString("version", ""); - return version; - } - - class NectarInterface { - - @JavascriptInterface - public void fireEvent(final String event) { - runOnUiThread(new Runnable() { - @Override - public void run() { - callbackFromJNI(event); - } - }); - } - } - - private void copyAssets(String base) { - AssetManager assetManager = getAssets(); - String[] files = null; - try { - files = assetManager.list(base); - } catch (IOException e) { - Log.e("tag", "Failed to get asset file list.", e); - } - - final File newFile = new File(getFilesDir() + "/" + base); - newFile.mkdir(); - - if (files != null) for (String filename : files) { - InputStream in = null; - OutputStream out = null; - try { - Log.d("File", base + "/" + filename); - in = assetManager.open(base + "/" + filename); - - File outFile = new File(getFilesDir() + "/" + base + "/", filename); - out = new FileOutputStream(outFile); - copyFile(in, out); - } catch(IOException e) { - Log.e("tag", "Failed to copy asset file: " + base + "/" + filename, e); - copyAssets(base + "/" + filename); - } - finally { - if (in != null) { - try { - in.close(); - } catch (IOException e) { - // NOOP - } - } - if (out != null) { - try { - out.close(); - } catch (IOException e) { - // NOOP - } - } - } - } - } - private void copyFile(InputStream in, OutputStream out) throws IOException { - try { - byte[] buffer = new byte[1024]; - int read; - while ((read = in.read(buffer)) != -1) { - out.write(buffer, 0, read); - } - } - catch(Exception e){} - } - - boolean deleteDirectory(File directoryToBeDeleted) { - File[] allContents = directoryToBeDeleted.listFiles(); - if (allContents != null) { - for (File file : allContents) { - deleteDirectory(file); - } - } - return directoryToBeDeleted.delete(); - } - - public static String loadAssetFile(Context context, String fileName) { - try { - BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(context.getAssets().open(fileName))); - StringBuilder out= new StringBuilder(); - String eachline = bufferedReader.readLine(); - while (eachline != null) { - out.append(eachline); - eachline = bufferedReader.readLine(); - } - return out.toString(); - } catch (IOException e) { - Log.e("Load Asset File",e.toString()); - } - return null; - } - - public static void triggerRebirth(Context context) { - PackageManager packageManager = context.getPackageManager(); - Intent intent = packageManager.getLaunchIntentForPackage(context.getPackageName()); - ComponentName componentName = intent.getComponent(); - Intent mainIntent = Intent.makeRestartActivityTask(componentName); - context.startActivity(mainIntent); - Runtime.getRuntime().exit(0); - } - - @Override - protected void onActivityResult(int requestCode, int resultCode, Intent intent){ - super.onActivityResult(requestCode, resultCode, intent); - if(Build.VERSION.SDK_INT >= 21){ - Uri[] results = null; - //Check if response is positive - if(resultCode== Activity.RESULT_OK){ - if(requestCode == FCR){ - if(null == mUMA){ - return; - } - if(intent == null || intent.getData() == null){ - //Capture Photo if no image available - if(mCM != null){ - results = new Uri[]{Uri.parse(mCM)}; - } - }else{ - String dataString = intent.getDataString(); - if(dataString != null){ - results = new Uri[]{Uri.parse(dataString)}; - } - } - } - } - mUMA.onReceiveValue(results); - mUMA = null; - }else{ - if(requestCode == FCR){ - if(null == mUM) return; - Uri result = intent == null || resultCode != RESULT_OK ? null : intent.getData(); - mUM.onReceiveValue(result); - mUM = null; - } - } - } - - @Override - protected void onCreate(Bundle savedInstanceState) - { - super.onCreate(savedInstanceState); - - if(Build.VERSION.SDK_INT >=23 && (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED || ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED)) { - ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.INTERNET, Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.CAMERA}, 1); - } - - setContentView(R.layout.activity_main); - - - - mainWebView = findViewById(R.id.WebView); - mainWebView.setWebViewClient(new WebViewClient()); - WebSettings webSettings = mainWebView.getSettings(); - webSettings.setJavaScriptEnabled(true); - webSettings.setDomStorageEnabled(true); - webSettings.setBuiltInZoomControls(true); - webSettings.setAllowFileAccess(true); - webSettings.setAllowContentAccess(true); - webSettings.setSupportZoom(true); - webSettings.setGeolocationEnabled(true); - webSettings.setBuiltInZoomControls(true); - webSettings.setDisplayZoomControls(false); - mainWebView.addJavascriptInterface(new NectarInterface(), "Nectar"); - - mainWebView.setWebChromeClient(new WebChromeClient() - { - @Override - public void onPermissionRequest(PermissionRequest request) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - request.grant(request.getResources()); - } - } - - public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) - { - callback.invoke(origin, true, false); - } - - // For 3.0+ Devices (Start) - // onActivityResult attached before constructor - protected void openFileChooser(ValueCallback uploadMsg, String acceptType) - { - mUploadMessage = uploadMsg; - Intent i = new Intent(Intent.ACTION_GET_CONTENT); - i.addCategory(Intent.CATEGORY_OPENABLE); - i.setType("image/*"); - startActivityForResult(Intent.createChooser(i, "File Browser"), FILECHOOSER_RESULTCODE); - } - - - // For Lollipop 5.0+ Devices - /* - public boolean onShowFileChooser(WebView mWebView, ValueCallback filePathCallback, WebChromeClient.FileChooserParams fileChooserParams) - { - if (uploadMessage != null) { - uploadMessage.onReceiveValue(null); - uploadMessage = null; - } - - uploadMessage = filePathCallback; - - Intent intent = fileChooserParams.createIntent(); - try - { - startActivityForResult(intent, REQUEST_SELECT_FILE); - } catch (ActivityNotFoundException e) - { - uploadMessage = null; - //Toast.makeText(getActivity().getApplicationContext(), "Cannot Open File Chooser", Toast.LENGTH_LONG).show(); - return false; - } - return true; - } - */ - // Create an image file - private File createImageFile() throws IOException{ - @SuppressLint("SimpleDateFormat") String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); - String imageFileName = "img_"+timeStamp+"_"; - File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); - return File.createTempFile(imageFileName,".jpg",storageDir); - } - public boolean onShowFileChooser( - WebView webView, ValueCallback filePathCallback, - FileChooserParams fileChooserParams){ - if(mUMA != null){ - mUMA.onReceiveValue(null); - } - mUMA = filePathCallback; - Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); - if(takePictureIntent.resolveActivity(MainActivity.this.getPackageManager()) != null){ - File photoFile = null; - try{ - photoFile = createImageFile(); - takePictureIntent.putExtra("PhotoPath", mCM); - }catch(IOException ex){ - Log.e(TAG, "Image file creation failed", ex); - } - if(photoFile != null){ - mCM = "file:" + photoFile.getAbsolutePath(); - takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photoFile)); - }else{ - takePictureIntent = null; - } - } - Intent contentSelectionIntent = new Intent(Intent.ACTION_GET_CONTENT); - contentSelectionIntent.addCategory(Intent.CATEGORY_OPENABLE); - contentSelectionIntent.setType("*/*"); - Intent[] intentArray; - if(takePictureIntent != null){ - intentArray = new Intent[]{takePictureIntent}; - }else{ - intentArray = new Intent[0]; - } - - Intent chooserIntent = new Intent(Intent.ACTION_CHOOSER); - chooserIntent.putExtra(Intent.EXTRA_INTENT, contentSelectionIntent); - chooserIntent.putExtra(Intent.EXTRA_TITLE, "Image Chooser"); - chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, intentArray); - startActivityForResult(chooserIntent, FCR); - return true; - } - - //For Android 4.1 only - protected void openFileChooser(ValueCallback uploadMsg, String acceptType, String capture) - { - mUploadMessage = uploadMsg; - Intent intent = new Intent(Intent.ACTION_GET_CONTENT); - intent.addCategory(Intent.CATEGORY_OPENABLE); - intent.setType("image/*"); - startActivityForResult(Intent.createChooser(intent, "File Browser"), FILECHOOSER_RESULTCODE); - } - - protected void openFileChooser(ValueCallback uploadMsg) - { - mUploadMessage = uploadMsg; - Intent i = new Intent(Intent.ACTION_GET_CONTENT); - i.addCategory(Intent.CATEGORY_OPENABLE); - i.setType("image/*"); - startActivityForResult(Intent.createChooser(i, "File Chooser"), FILECHOOSER_RESULTCODE); - } - }); - - String _version = loadAssetFile(this, "raw/version.txt"); - Log.d("Version", checkVersion() + " : " + _version); - if (!checkVersion().equals(_version)) { - - deleteDirectory(new File(getFilesDir() + "/raw/")); - copyAssets("raw"); - SharedPreferences settings = getSharedPreferences("NECTAR_APP_PREF", 0); - SharedPreferences.Editor editor = settings.edit(); - editor.putString("version", _version); - editor.commit(); - triggerRebirth(this); - } - else { - Thread thread = new Thread(new Runnable() { - @Override - public void run() { - serveFromJNI(); - } - }); - thread.start(); - - callFromJNI(); - } - } - - public void drawNectar(final String _str) - { - runOnUiThread(new Runnable() { - @Override - public void run() { - mainWebView.loadDataWithBaseURL("", _str, "text/html", "UTF-8", ""); - } - }); - } - - public void navigateNectar(final String _str) - { - runOnUiThread(new Runnable() { - @Override - public void run() { - mainWebView.loadUrl(_str); - } - }); - } - - public native void callFromJNI(); - public native void serveFromJNI(); - public native void callbackFromJNI(String _str); -} diff --git a/compiler/native/platform/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/compiler/native/platform/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml deleted file mode 100644 index 2b068d114..000000000 --- a/compiler/native/platform/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/compiler/native/platform/android/app/src/main/res/drawable/ic_launcher_background.xml b/compiler/native/platform/android/app/src/main/res/drawable/ic_launcher_background.xml deleted file mode 100644 index 07d5da9cb..000000000 --- a/compiler/native/platform/android/app/src/main/res/drawable/ic_launcher_background.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/compiler/native/platform/android/app/src/main/res/layout/activity_main.xml b/compiler/native/platform/android/app/src/main/res/layout/activity_main.xml deleted file mode 100644 index 2bedafe93..000000000 --- a/compiler/native/platform/android/app/src/main/res/layout/activity_main.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - \ No newline at end of file diff --git a/compiler/native/platform/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/compiler/native/platform/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml deleted file mode 100644 index eca70cfe5..000000000 --- a/compiler/native/platform/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/compiler/native/platform/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/compiler/native/platform/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml deleted file mode 100644 index eca70cfe5..000000000 --- a/compiler/native/platform/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/compiler/native/platform/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/compiler/native/platform/android/app/src/main/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index a571e6009..000000000 Binary files a/compiler/native/platform/android/app/src/main/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/compiler/native/platform/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/compiler/native/platform/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png deleted file mode 100644 index 61da551c5..000000000 Binary files a/compiler/native/platform/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png and /dev/null differ diff --git a/compiler/native/platform/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/compiler/native/platform/android/app/src/main/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index c41dd2853..000000000 Binary files a/compiler/native/platform/android/app/src/main/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/compiler/native/platform/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/compiler/native/platform/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png deleted file mode 100644 index db5080a75..000000000 Binary files a/compiler/native/platform/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png and /dev/null differ diff --git a/compiler/native/platform/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/compiler/native/platform/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index 6dba46dab..000000000 Binary files a/compiler/native/platform/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/compiler/native/platform/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/compiler/native/platform/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png deleted file mode 100644 index da31a871c..000000000 Binary files a/compiler/native/platform/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png and /dev/null differ diff --git a/compiler/native/platform/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/compiler/native/platform/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 15ac68172..000000000 Binary files a/compiler/native/platform/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/compiler/native/platform/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/compiler/native/platform/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png deleted file mode 100644 index b216f2d31..000000000 Binary files a/compiler/native/platform/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png and /dev/null differ diff --git a/compiler/native/platform/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/compiler/native/platform/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index f25a41974..000000000 Binary files a/compiler/native/platform/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/compiler/native/platform/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/compiler/native/platform/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png deleted file mode 100644 index e96783ccc..000000000 Binary files a/compiler/native/platform/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png and /dev/null differ diff --git a/compiler/native/platform/android/app/src/main/res/values/colors.xml b/compiler/native/platform/android/app/src/main/res/values/colors.xml deleted file mode 100644 index 030098fe0..000000000 --- a/compiler/native/platform/android/app/src/main/res/values/colors.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - #6200EE - #3700B3 - #03DAC5 - diff --git a/compiler/native/platform/android/app/src/main/res/values/strings.xml b/compiler/native/platform/android/app/src/main/res/values/strings.xml deleted file mode 100644 index 14943522f..000000000 --- a/compiler/native/platform/android/app/src/main/res/values/strings.xml +++ /dev/null @@ -1,3 +0,0 @@ - - nectar_android_app - diff --git a/compiler/native/platform/android/app/src/main/res/values/styles.xml b/compiler/native/platform/android/app/src/main/res/values/styles.xml deleted file mode 100644 index 5885930df..000000000 --- a/compiler/native/platform/android/app/src/main/res/values/styles.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - diff --git a/compiler/native/platform/android/app/src/test/java/com/nectarjs/nectar_android_app/ExampleUnitTest.java b/compiler/native/platform/android/app/src/test/java/com/nectarjs/nectar_android_app/ExampleUnitTest.java deleted file mode 100644 index aff8403e6..000000000 --- a/compiler/native/platform/android/app/src/test/java/com/nectarjs/nectar_android_app/ExampleUnitTest.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.nectarjs.nectar_android_app; - -import org.junit.Test; - -import static org.junit.Assert.*; - -/** - * Example local unit test, which will execute on the development machine (host). - * - * @see Testing documentation - */ -public class ExampleUnitTest { - @Test - public void addition_isCorrect() { - assertEquals(4, 2 + 2); - } -} \ No newline at end of file diff --git a/compiler/native/platform/android/build.gradle b/compiler/native/platform/android/build.gradle deleted file mode 100644 index 9d51453f3..000000000 --- a/compiler/native/platform/android/build.gradle +++ /dev/null @@ -1,47 +0,0 @@ -// Top-level build file where you can add configuration options common to all sub-projects/modules. - -buildscript { - - repositories { - google() - jcenter() - - } - dependencies { - classpath 'com.android.tools.build:gradle:3.6.3' - - - // NOTE: Do not place your application dependencies here; they belong - // in the individual module build.gradle files - } -} - -tasks.withType(CppCompile).configureEach { - // Define a preprocessor macro for every binary - // macros.put("NDEBUG", null) - - // Define a compiler options - // compilerArgs.add '-W3' - - // Define toolchain-specific compiler options - compilerArgs.addAll toolChain.map { toolChain -> - if (toolChain in [ Gcc, Clang ]) { - return ['-Ofast', '-std=c++17'] - } else if (toolChain in VisualCpp) { - // return ['/Zi'] - } - return [] - } -} - -allprojects { - repositories { - google() - jcenter() - - } -} - -task clean(type: Delete) { - delete rootProject.buildDir -} diff --git a/compiler/native/platform/android/gradle.properties b/compiler/native/platform/android/gradle.properties deleted file mode 100644 index 199d16ede..000000000 --- a/compiler/native/platform/android/gradle.properties +++ /dev/null @@ -1,20 +0,0 @@ -# Project-wide Gradle settings. -# IDE (e.g. Android Studio) users: -# Gradle settings configured through the IDE *will override* -# any settings specified in this file. -# For more details on how to configure your build environment visit -# http://www.gradle.org/docs/current/userguide/build_environment.html -# Specifies the JVM arguments used for the daemon process. -# The setting is particularly useful for tweaking memory settings. -org.gradle.jvmargs=-Xmx1536m -# When configured, Gradle will run in incubating parallel mode. -# This option should only be used with decoupled projects. More details, visit -# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects -# org.gradle.parallel=true -# AndroidX package structure to make it clearer which packages are bundled with the -# Android operating system, and which are packaged with your app's APK -# https://developer.android.com/topic/libraries/support-library/androidx-rn -android.useAndroidX=true -# Automatically convert third-party libraries to use AndroidX -android.enableJetifier=true - diff --git a/compiler/native/platform/android/gradle/wrapper/gradle-wrapper.jar b/compiler/native/platform/android/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index f6b961fd5..000000000 Binary files a/compiler/native/platform/android/gradle/wrapper/gradle-wrapper.jar and /dev/null differ diff --git a/compiler/native/platform/android/gradle/wrapper/gradle-wrapper.properties b/compiler/native/platform/android/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index 0533c2cdf..000000000 --- a/compiler/native/platform/android/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,6 +0,0 @@ -#Wed May 27 12:57:27 CEST 2020 -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.3-all.zip diff --git a/compiler/native/platform/android/gradlew b/compiler/native/platform/android/gradlew deleted file mode 100644 index cccdd3d51..000000000 --- a/compiler/native/platform/android/gradlew +++ /dev/null @@ -1,172 +0,0 @@ -#!/usr/bin/env sh - -############################################################################## -## -## Gradle start up script for UN*X -## -############################################################################## - -# Attempt to set APP_HOME -# Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null - -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" - -warn () { - echo "$*" -} - -die () { - echo - echo "$*" - echo - exit 1 -} - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=$((i+1)) - done - case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac -fi - -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=$(save "$@") - -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" - -# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong -if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then - cd "$(dirname "$0")" -fi - -exec "$JAVACMD" "$@" diff --git a/compiler/native/platform/android/gradlew.bat b/compiler/native/platform/android/gradlew.bat deleted file mode 100644 index f9553162f..000000000 --- a/compiler/native/platform/android/gradlew.bat +++ /dev/null @@ -1,84 +0,0 @@ -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto init - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/compiler/native/platform/android/nectar_android_app.iml b/compiler/native/platform/android/nectar_android_app.iml deleted file mode 100644 index 5e8bae49e..000000000 --- a/compiler/native/platform/android/nectar_android_app.iml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/compiler/native/platform/android/settings.gradle b/compiler/native/platform/android/settings.gradle deleted file mode 100644 index 911287297..000000000 --- a/compiler/native/platform/android/settings.gradle +++ /dev/null @@ -1,2 +0,0 @@ -rootProject.name='nectar_android_app' -include ':app' diff --git a/compiler/native/platform/esp32/CMakeLists.txt b/compiler/native/platform/esp32/CMakeLists.txt deleted file mode 100644 index fe09dd04b..000000000 --- a/compiler/native/platform/esp32/CMakeLists.txt +++ /dev/null @@ -1,8 +0,0 @@ -# The following lines of boilerplate have to be in your project's -# CMakeLists in this exact order for cmake to work correctly -cmake_minimum_required(VERSION 3.10) - -set(CMAKE_CXX_STANDARD 17) - -include($ENV{IDF_PATH}/tools/cmake/project.cmake) -project(njs) \ No newline at end of file diff --git a/compiler/native/platform/esp32/Makefile b/compiler/native/platform/esp32/Makefile deleted file mode 100644 index 6d9035a24..000000000 --- a/compiler/native/platform/esp32/Makefile +++ /dev/null @@ -1,8 +0,0 @@ -# -# This is a project Makefile. It is assumed the directory this Makefile resides in is a -# project subdirectory. -# - -PROJECT_NAME := hello-world - -include $(IDF_PATH)/make/project.mk \ No newline at end of file diff --git a/compiler/native/platform/esp32/main/CMakeLists.txt b/compiler/native/platform/esp32/main/CMakeLists.txt deleted file mode 100644 index 34fadbf8d..000000000 --- a/compiler/native/platform/esp32/main/CMakeLists.txt +++ /dev/null @@ -1,6 +0,0 @@ -cmake_minimum_required(VERSION 3.10) - -set(CMAKE_CXX_STANDARD 17) - -idf_component_register(SRCS "../esp32.cpp" - INCLUDE_DIRS "") \ No newline at end of file diff --git a/compiler/native/platform/esp32/main/component.mk b/compiler/native/platform/esp32/main/component.mk deleted file mode 100644 index 96074f520..000000000 --- a/compiler/native/platform/esp32/main/component.mk +++ /dev/null @@ -1,5 +0,0 @@ - -# -# "main" pseudo-component makefile. -# -# (Uses default behaviour of compiling all source files in directory, adding 'include' to include path.) \ No newline at end of file diff --git a/compiler/native/platform/ios/NectarIOS.xcodeproj/project.pbxproj b/compiler/native/platform/ios/NectarIOS.xcodeproj/project.pbxproj deleted file mode 100644 index 397b417b4..000000000 --- a/compiler/native/platform/ios/NectarIOS.xcodeproj/project.pbxproj +++ /dev/null @@ -1,407 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 50; - objects = { - -/* Begin PBXBuildFile section */ - 8006A1E6248F88600061160C /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 8006A1E5248F88600061160C /* AppDelegate.m */; }; - 8006A1E9248F88610061160C /* SceneDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 8006A1E8248F88610061160C /* SceneDelegate.m */; }; - 8006A1EC248F88610061160C /* ViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8006A1EB248F88610061160C /* ViewController.mm */; }; - 8006A1EF248F88610061160C /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 8006A1ED248F88610061160C /* Main.storyboard */; }; - 8006A1F1248F88610061160C /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 8006A1F0248F88610061160C /* Assets.xcassets */; }; - 8006A1F4248F88610061160C /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 8006A1F2248F88610061160C /* LaunchScreen.storyboard */; }; - 8006A1F7248F88610061160C /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 8006A1F6248F88610061160C /* main.m */; }; - 8006A201248F9CFA0061160C /* libc++.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 8006A200248F9CFA0061160C /* libc++.tbd */; }; - 8006A208248FA9110061160C /* njs.h in Sources */ = {isa = PBXBuildFile; fileRef = 8006A207248FA86E0061160C /* njs.h */; }; - 80CA7E3C248FF12000C4714E /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 80CA7E37248FF0CA00C4714E /* WebKit.framework */; }; - 80CA7E40248FF16000C4714E /* ios.hpp in Sources */ = {isa = PBXBuildFile; fileRef = 80CA7E3F248FF16000C4714E /* ios.hpp */; }; - 80E994AF24BDA9B1000E25D4 /* raw in Resources */ = {isa = PBXBuildFile; fileRef = 80E994AE24BDA9B1000E25D4 /* raw */; }; -/* End PBXBuildFile section */ - -/* Begin PBXFileReference section */ - 8006A1E1248F88600061160C /* NectarIOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = NectarIOS.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 8006A1E4248F88600061160C /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; - 8006A1E5248F88600061160C /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; - 8006A1E7248F88600061160C /* SceneDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SceneDelegate.h; sourceTree = ""; }; - 8006A1E8248F88610061160C /* SceneDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SceneDelegate.m; sourceTree = ""; }; - 8006A1EA248F88610061160C /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; - 8006A1EB248F88610061160C /* ViewController.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = ViewController.mm; sourceTree = ""; }; - 8006A1EE248F88610061160C /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - 8006A1F0248F88610061160C /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 8006A1F3248F88610061160C /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; - 8006A1F5248F88610061160C /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 8006A1F6248F88610061160C /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; - 8006A200248F9CFA0061160C /* libc++.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = "libc++.tbd"; path = "usr/lib/libc++.tbd"; sourceTree = SDKROOT; }; - 8006A207248FA86E0061160C /* njs.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 4; path = njs.h; sourceTree = ""; }; - 80CA7E37248FF0CA00C4714E /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; }; - 80CA7E3F248FF16000C4714E /* ios.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = ios.hpp; sourceTree = ""; }; - 80E994AE24BDA9B1000E25D4 /* raw */ = {isa = PBXFileReference; lastKnownFileType = folder; path = raw; sourceTree = ""; }; - 80E994B024BDAA34000E25D4 /* httplib.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = httplib.h; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 8006A1DE248F88600061160C /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 80CA7E3C248FF12000C4714E /* WebKit.framework in Frameworks */, - 8006A201248F9CFA0061160C /* libc++.tbd in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 8006A1D8248F88600061160C = { - isa = PBXGroup; - children = ( - 8006A1E3248F88600061160C /* NectarIOS */, - 8006A1E2248F88600061160C /* Products */, - 8006A1FF248F9CFA0061160C /* Frameworks */, - ); - sourceTree = ""; - }; - 8006A1E2248F88600061160C /* Products */ = { - isa = PBXGroup; - children = ( - 8006A1E1248F88600061160C /* NectarIOS.app */, - ); - name = Products; - sourceTree = ""; - }; - 8006A1E3248F88600061160C /* NectarIOS */ = { - isa = PBXGroup; - children = ( - 8006A207248FA86E0061160C /* njs.h */, - 8006A1E4248F88600061160C /* AppDelegate.h */, - 80E994B024BDAA34000E25D4 /* httplib.h */, - 8006A1E5248F88600061160C /* AppDelegate.m */, - 8006A1E7248F88600061160C /* SceneDelegate.h */, - 80E994AE24BDA9B1000E25D4 /* raw */, - 8006A1E8248F88610061160C /* SceneDelegate.m */, - 8006A1EA248F88610061160C /* ViewController.h */, - 8006A1EB248F88610061160C /* ViewController.mm */, - 8006A1ED248F88610061160C /* Main.storyboard */, - 8006A1F0248F88610061160C /* Assets.xcassets */, - 8006A1F2248F88610061160C /* LaunchScreen.storyboard */, - 8006A1F5248F88610061160C /* Info.plist */, - 8006A1F6248F88610061160C /* main.m */, - 80CA7E3F248FF16000C4714E /* ios.hpp */, - ); - path = NectarIOS; - sourceTree = ""; - }; - 8006A1FF248F9CFA0061160C /* Frameworks */ = { - isa = PBXGroup; - children = ( - 80CA7E37248FF0CA00C4714E /* WebKit.framework */, - 8006A200248F9CFA0061160C /* libc++.tbd */, - ); - name = Frameworks; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 8006A1E0248F88600061160C /* NectarIOS */ = { - isa = PBXNativeTarget; - buildConfigurationList = 8006A1FA248F88610061160C /* Build configuration list for PBXNativeTarget "NectarIOS" */; - buildPhases = ( - 8006A1DD248F88600061160C /* Sources */, - 8006A1DE248F88600061160C /* Frameworks */, - 8006A1DF248F88600061160C /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = NectarIOS; - productName = NectarIOS; - productReference = 8006A1E1248F88600061160C /* NectarIOS.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 8006A1D9248F88600061160C /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 1150; - ORGANIZATIONNAME = NectarJS; - TargetAttributes = { - 8006A1E0248F88600061160C = { - CreatedOnToolsVersion = 11.5; - }; - }; - }; - buildConfigurationList = 8006A1DC248F88600061160C /* Build configuration list for PBXProject "NectarIOS" */; - compatibilityVersion = "Xcode 9.3"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 8006A1D8248F88600061160C; - productRefGroup = 8006A1E2248F88600061160C /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 8006A1E0248F88600061160C /* NectarIOS */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 8006A1DF248F88600061160C /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 8006A1F4248F88610061160C /* LaunchScreen.storyboard in Resources */, - 80E994AF24BDA9B1000E25D4 /* raw in Resources */, - 8006A1F1248F88610061160C /* Assets.xcassets in Resources */, - 8006A1EF248F88610061160C /* Main.storyboard in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 8006A1DD248F88600061160C /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 8006A208248FA9110061160C /* njs.h in Sources */, - 8006A1EC248F88610061160C /* ViewController.mm in Sources */, - 8006A1E6248F88600061160C /* AppDelegate.m in Sources */, - 80CA7E40248FF16000C4714E /* ios.hpp in Sources */, - 8006A1F7248F88610061160C /* main.m in Sources */, - 8006A1E9248F88610061160C /* SceneDelegate.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXVariantGroup section */ - 8006A1ED248F88610061160C /* Main.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 8006A1EE248F88610061160C /* Base */, - ); - name = Main.storyboard; - sourceTree = ""; - }; - 8006A1F2248F88610061160C /* LaunchScreen.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 8006A1F3248F88610061160C /* Base */, - ); - name = LaunchScreen.storyboard; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 8006A1F8248F88610061160C /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_Number_Object_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_Function = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 13.5; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - }; - name = Debug; - }; - 8006A1F9248F88610061160C /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_Number_Object_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_Function = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 13.5; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = iphoneos; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 8006A1FB248F88610061160C /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = YES; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_CPP_STATIC_DESTRUCTORS = YES; - CODE_SIGN_IDENTITY = "Apple Development"; - CODE_SIGN_STYLE = Manual; - COMPILER_INDEX_STORE_ENABLE = Default; - DEVELOPMENT_TEAM = ""; - ENABLE_BITCODE = YES; - GCC_DYNAMIC_NO_PIC = YES; - GCC_INLINES_ARE_PRIVATE_EXTERN = NO; - GCC_OPTIMIZATION_LEVEL = fast; - GCC_VERSION = ""; - INFOPLIST_FILE = NectarIOS/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - "LIBRARY_SEARCH_PATHS[arch=*]" = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1"; - LLVM_LTO = YES_THIN; - PRODUCT_BUNDLE_IDENTIFIER = com.nectarjs.NectarIOS; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SYSTEM_HEADER_SEARCH_PATHS = ""; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 8006A1FC248F88610061160C /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = YES; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_CPP_STATIC_DESTRUCTORS = YES; - CODE_SIGN_IDENTITY = "Apple Development"; - CODE_SIGN_STYLE = Manual; - COMPILER_INDEX_STORE_ENABLE = Default; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_TEAM = ""; - ENABLE_BITCODE = YES; - GCC_DYNAMIC_NO_PIC = YES; - GCC_INLINES_ARE_PRIVATE_EXTERN = NO; - GCC_OPTIMIZATION_LEVEL = fast; - GCC_VERSION = ""; - INFOPLIST_FILE = NectarIOS/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - "LIBRARY_SEARCH_PATHS[arch=*]" = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1"; - LLVM_LTO = YES_THIN; - PRODUCT_BUNDLE_IDENTIFIER = com.nectarjs.NectarIOS; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SYSTEM_HEADER_SEARCH_PATHS = ""; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 8006A1DC248F88600061160C /* Build configuration list for PBXProject "NectarIOS" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 8006A1F8248F88610061160C /* Debug */, - 8006A1F9248F88610061160C /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 8006A1FA248F88610061160C /* Build configuration list for PBXNativeTarget "NectarIOS" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 8006A1FB248F88610061160C /* Debug */, - 8006A1FC248F88610061160C /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 8006A1D9248F88600061160C /* Project object */; -} diff --git a/compiler/native/platform/ios/NectarIOS.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/compiler/native/platform/ios/NectarIOS.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index a13d58e6f..000000000 --- a/compiler/native/platform/ios/NectarIOS.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/compiler/native/platform/ios/NectarIOS.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/compiler/native/platform/ios/NectarIOS.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d981003..000000000 --- a/compiler/native/platform/ios/NectarIOS.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/compiler/native/platform/ios/NectarIOS.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/compiler/native/platform/ios/NectarIOS.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings deleted file mode 100644 index f9b0d7c5e..000000000 --- a/compiler/native/platform/ios/NectarIOS.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +++ /dev/null @@ -1,8 +0,0 @@ - - - - - PreviewsEnabled - - - diff --git a/compiler/native/platform/ios/NectarIOS.xcodeproj/project.xcworkspace/xcuserdata/user175602.xcuserdatad/UserInterfaceState.xcuserstate b/compiler/native/platform/ios/NectarIOS.xcodeproj/project.xcworkspace/xcuserdata/user175602.xcuserdatad/UserInterfaceState.xcuserstate deleted file mode 100644 index b1946fe07..000000000 Binary files a/compiler/native/platform/ios/NectarIOS.xcodeproj/project.xcworkspace/xcuserdata/user175602.xcuserdatad/UserInterfaceState.xcuserstate and /dev/null differ diff --git a/compiler/native/platform/ios/NectarIOS.xcodeproj/project.xcworkspace/xcuserdata/user175602.xcuserdatad/WorkspaceSettings.xcsettings b/compiler/native/platform/ios/NectarIOS.xcodeproj/project.xcworkspace/xcuserdata/user175602.xcuserdatad/WorkspaceSettings.xcsettings deleted file mode 100644 index 379adbed5..000000000 --- a/compiler/native/platform/ios/NectarIOS.xcodeproj/project.xcworkspace/xcuserdata/user175602.xcuserdatad/WorkspaceSettings.xcsettings +++ /dev/null @@ -1,18 +0,0 @@ - - - - - BuildLocationStyle - UseAppPreferences - CustomBuildLocationType - RelativeToDerivedData - DerivedDataLocationStyle - Default - IssueFilterStyle - ShowActiveSchemeOnly - LiveSourceIssuesEnabled - - ShowSharedSchemesAutomaticallyEnabled - - - diff --git a/compiler/native/platform/ios/NectarIOS.xcodeproj/xcshareddata/xcschemes/NectarIOS.xcscheme b/compiler/native/platform/ios/NectarIOS.xcodeproj/xcshareddata/xcschemes/NectarIOS.xcscheme deleted file mode 100644 index dd8d5e820..000000000 --- a/compiler/native/platform/ios/NectarIOS.xcodeproj/xcshareddata/xcschemes/NectarIOS.xcscheme +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/compiler/native/platform/ios/NectarIOS.xcodeproj/xcuserdata/user175602.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/compiler/native/platform/ios/NectarIOS.xcodeproj/xcuserdata/user175602.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist deleted file mode 100644 index 307c62c36..000000000 --- a/compiler/native/platform/ios/NectarIOS.xcodeproj/xcuserdata/user175602.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +++ /dev/null @@ -1,6 +0,0 @@ - - - diff --git a/compiler/native/platform/ios/NectarIOS.xcodeproj/xcuserdata/user175602.xcuserdatad/xcschemes/xcschememanagement.plist b/compiler/native/platform/ios/NectarIOS.xcodeproj/xcuserdata/user175602.xcuserdatad/xcschemes/xcschememanagement.plist deleted file mode 100644 index f25d54583..000000000 --- a/compiler/native/platform/ios/NectarIOS.xcodeproj/xcuserdata/user175602.xcuserdatad/xcschemes/xcschememanagement.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - SchemeUserState - - NectarIOS.xcscheme_^#shared#^_ - - orderHint - 0 - - - SuppressBuildableAutocreation - - 8006A1E0248F88600061160C - - primary - - - - - diff --git a/compiler/native/platform/ios/NectarIOS/AppDelegate.h b/compiler/native/platform/ios/NectarIOS/AppDelegate.h deleted file mode 100644 index 3fd149f22..000000000 --- a/compiler/native/platform/ios/NectarIOS/AppDelegate.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// AppDelegate.h -// NectarIOS -// -// Created by user175602 on 6/9/20. -// Copyright © 2020 NectarJS. All rights reserved. -// - -#import - -@interface AppDelegate : UIResponder - - -@end - diff --git a/compiler/native/platform/ios/NectarIOS/AppDelegate.m b/compiler/native/platform/ios/NectarIOS/AppDelegate.m deleted file mode 100644 index 056763bdd..000000000 --- a/compiler/native/platform/ios/NectarIOS/AppDelegate.m +++ /dev/null @@ -1,41 +0,0 @@ -// -// AppDelegate.m -// NectarIOS -// -// Created by user175602 on 6/9/20. -// Copyright © 2020 NectarJS. All rights reserved. -// - -#import "AppDelegate.h" - -@interface AppDelegate () - -@end - -@implementation AppDelegate - - -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { - // Override point for customization after application launch. - return YES; -} - - -#pragma mark - UISceneSession lifecycle - - -- (UISceneConfiguration *)application:(UIApplication *)application configurationForConnectingSceneSession:(UISceneSession *)connectingSceneSession options:(UISceneConnectionOptions *)options { - // Called when a new scene session is being created. - // Use this method to select a configuration to create the new scene with. - return [[UISceneConfiguration alloc] initWithName:@"Default Configuration" sessionRole:connectingSceneSession.role]; -} - - -- (void)application:(UIApplication *)application didDiscardSceneSessions:(NSSet *)sceneSessions { - // Called when the user discards a scene session. - // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions. - // Use this method to release any resources that were specific to the discarded scenes, as they will not return. -} - - -@end diff --git a/compiler/native/platform/ios/NectarIOS/Assets.xcassets/AppIcon.appiconset/Contents.json b/compiler/native/platform/ios/NectarIOS/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 9221b9bb1..000000000 --- a/compiler/native/platform/ios/NectarIOS/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,98 +0,0 @@ -{ - "images" : [ - { - "idiom" : "iphone", - "scale" : "2x", - "size" : "20x20" - }, - { - "idiom" : "iphone", - "scale" : "3x", - "size" : "20x20" - }, - { - "idiom" : "iphone", - "scale" : "2x", - "size" : "29x29" - }, - { - "idiom" : "iphone", - "scale" : "3x", - "size" : "29x29" - }, - { - "idiom" : "iphone", - "scale" : "2x", - "size" : "40x40" - }, - { - "idiom" : "iphone", - "scale" : "3x", - "size" : "40x40" - }, - { - "idiom" : "iphone", - "scale" : "2x", - "size" : "60x60" - }, - { - "idiom" : "iphone", - "scale" : "3x", - "size" : "60x60" - }, - { - "idiom" : "ipad", - "scale" : "1x", - "size" : "20x20" - }, - { - "idiom" : "ipad", - "scale" : "2x", - "size" : "20x20" - }, - { - "idiom" : "ipad", - "scale" : "1x", - "size" : "29x29" - }, - { - "idiom" : "ipad", - "scale" : "2x", - "size" : "29x29" - }, - { - "idiom" : "ipad", - "scale" : "1x", - "size" : "40x40" - }, - { - "idiom" : "ipad", - "scale" : "2x", - "size" : "40x40" - }, - { - "idiom" : "ipad", - "scale" : "1x", - "size" : "76x76" - }, - { - "idiom" : "ipad", - "scale" : "2x", - "size" : "76x76" - }, - { - "idiom" : "ipad", - "scale" : "2x", - "size" : "83.5x83.5" - }, - { - "idiom" : "ios-marketing", - "scale" : "1x", - "size" : "1024x1024" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/compiler/native/platform/ios/NectarIOS/Assets.xcassets/Contents.json b/compiler/native/platform/ios/NectarIOS/Assets.xcassets/Contents.json deleted file mode 100644 index 73c00596a..000000000 --- a/compiler/native/platform/ios/NectarIOS/Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/compiler/native/platform/ios/NectarIOS/Base.lproj/LaunchScreen.storyboard b/compiler/native/platform/ios/NectarIOS/Base.lproj/LaunchScreen.storyboard deleted file mode 100644 index 865e9329f..000000000 --- a/compiler/native/platform/ios/NectarIOS/Base.lproj/LaunchScreen.storyboard +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/compiler/native/platform/ios/NectarIOS/Base.lproj/Main.storyboard b/compiler/native/platform/ios/NectarIOS/Base.lproj/Main.storyboard deleted file mode 100644 index 808a21ce7..000000000 --- a/compiler/native/platform/ios/NectarIOS/Base.lproj/Main.storyboard +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/compiler/native/platform/ios/NectarIOS/Info.plist b/compiler/native/platform/ios/NectarIOS/Info.plist deleted file mode 100644 index b85ad614e..000000000 --- a/compiler/native/platform/ios/NectarIOS/Info.plist +++ /dev/null @@ -1,82 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - $(PRODUCT_BUNDLE_PACKAGE_TYPE) - CFBundleShortVersionString - 1.0 - CFBundleVersion - 1 - LSRequiresIPhoneOS - - NSAppTransportSecurity - - NSAllowsArbitraryLoads - - - NSCameraUsageDescription - Needed to take picture - NSLocationAlwaysAndWhenInUseUsageDescription - Your location is required - NSLocationAlwaysUsageDescription - Your location is required - NSLocationWhenInUseUsageDescription - Your location is required - UIApplicationSceneManifest - - UIApplicationSupportsMultipleScenes - - UISceneConfigurations - - UIWindowSceneSessionRoleApplication - - - UISceneConfigurationName - Default Configuration - UISceneDelegateClassName - SceneDelegate - UISceneStoryboardFile - Main - - - - - UILaunchStoryboardName - LaunchScreen - UIMainStoryboardFile - Main - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - NSAppTransportSecurity - - NSAllowsArbitraryLoads - - - - diff --git a/compiler/native/platform/ios/NectarIOS/SceneDelegate.h b/compiler/native/platform/ios/NectarIOS/SceneDelegate.h deleted file mode 100644 index 26169a347..000000000 --- a/compiler/native/platform/ios/NectarIOS/SceneDelegate.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// SceneDelegate.h -// NectarIOS -// -// Created by user175602 on 6/9/20. -// Copyright © 2020 NectarJS. All rights reserved. -// - -#import - -@interface SceneDelegate : UIResponder - -@property (strong, nonatomic) UIWindow * window; - -@end - diff --git a/compiler/native/platform/ios/NectarIOS/SceneDelegate.m b/compiler/native/platform/ios/NectarIOS/SceneDelegate.m deleted file mode 100644 index e74dcf953..000000000 --- a/compiler/native/platform/ios/NectarIOS/SceneDelegate.m +++ /dev/null @@ -1,58 +0,0 @@ -// -// SceneDelegate.m -// NectarIOS -// -// Created by user175602 on 6/9/20. -// Copyright © 2020 NectarJS. All rights reserved. -// - -#import "SceneDelegate.h" - -@interface SceneDelegate () - -@end - -@implementation SceneDelegate - - -- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions { - // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`. - // If using a storyboard, the `window` property will automatically be initialized and attached to the scene. - // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead). -} - - -- (void)sceneDidDisconnect:(UIScene *)scene { - // Called as the scene is being released by the system. - // This occurs shortly after the scene enters the background, or when its session is discarded. - // Release any resources associated with this scene that can be re-created the next time the scene connects. - // The scene may re-connect later, as its session was not neccessarily discarded (see `application:didDiscardSceneSessions` instead). -} - - -- (void)sceneDidBecomeActive:(UIScene *)scene { - // Called when the scene has moved from an inactive state to an active state. - // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive. -} - - -- (void)sceneWillResignActive:(UIScene *)scene { - // Called when the scene will move from an active state to an inactive state. - // This may occur due to temporary interruptions (ex. an incoming phone call). -} - - -- (void)sceneWillEnterForeground:(UIScene *)scene { - // Called as the scene transitions from the background to the foreground. - // Use this method to undo the changes made on entering the background. -} - - -- (void)sceneDidEnterBackground:(UIScene *)scene { - // Called as the scene transitions from the foreground to the background. - // Use this method to save data, release shared resources, and store enough scene-specific state information - // to restore the scene back to its current state. -} - - -@end diff --git a/compiler/native/platform/ios/NectarIOS/ViewController.h b/compiler/native/platform/ios/NectarIOS/ViewController.h deleted file mode 100644 index d15a1dbcd..000000000 --- a/compiler/native/platform/ios/NectarIOS/ViewController.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// ViewController.h -// NectarIOS -// -// Created by user175602 on 6/9/20. -// Copyright © 2020 NectarJS. All rights reserved. -// - -#import -#import -#import - -@interface ViewController: UIViewController ; -@property (nonatomic, strong) IBOutlet WKWebView *webView; -@property (nonatomic, strong) IBOutlet UIView *view; -@property (nonatomic, strong) IBOutlet WKWebViewConfiguration *webConfig; -@end - diff --git a/compiler/native/platform/ios/NectarIOS/ViewController.mm b/compiler/native/platform/ios/NectarIOS/ViewController.mm deleted file mode 100644 index f7c3a1e7b..000000000 --- a/compiler/native/platform/ios/NectarIOS/ViewController.mm +++ /dev/null @@ -1,59 +0,0 @@ -// -// ViewController.m -// NectarIOS -// -// Copyright © 2020 NectarJS. All rights reserved. -// - -#import "ViewController.h" -#include -#import "../ios.hpp" - -@interface ViewController () - -@end - -@implementation ViewController - -@synthesize webView; --(void) viewDidLoad { - [super viewDidLoad]; - -WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc] init]; - size_t size; - sysctlbyname("hw.machine", NULL, &size, NULL, 0); - char *model = (char*)malloc(size); - sysctlbyname("hw.machine", model, &size, NULL, 0); - NSString *deviceModel = [NSString stringWithCString:model encoding:NSUTF8StringEncoding]; - free(model); - NSString *scriptString = [NSString stringWithFormat:@"%@%@/%@", @"function __NJS_fireiOSEvent(str){window.webkit.messageHandlers.notification.postMessage(str);}; window.Nectar = {fireEvent:__NJS_fireiOSEvent, model:\"", deviceModel, @"\" };"]; - - WKUserScript *script = [[WKUserScript alloc] initWithSource:scriptString injectionTime:WKUserScriptInjectionTimeAtDocumentEnd forMainFrameOnly:YES]; - WKUserContentController* userController = [[WKUserContentController alloc] init]; - [userController addUserScript:script]; - [userController addScriptMessageHandler:self name:@"notification"]; - configuration.userContentController = userController; - - self.webView = [[WKWebView alloc] initWithFrame:self.view.bounds configuration:configuration]; - [self.view addSubview:self.webView]; - - self.webView.backgroundColor = [UIColor whiteColor]; - self.webView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight); - webView.UIDelegate = self; - webView.navigationDelegate = self; - [self performSelectorInBackground:@selector(selLaunchServer) withObject:nil]; - - [self.view addSubview:self.webView]; - loadedCallback(self.webView); -} -- (void)userContentController:(WKUserContentController*)userContentController didReceiveScriptMessage:(WKScriptMessage*)message -{ - njsCallback(self.webView, message.body); -} - -- (void) selLaunchServer -{ - launchServer(); -} - -@end diff --git a/compiler/native/platform/ios/NectarIOS/httplib.h b/compiler/native/platform/ios/NectarIOS/httplib.h deleted file mode 100644 index fb5888031..000000000 --- a/compiler/native/platform/ios/NectarIOS/httplib.h +++ /dev/null @@ -1,5614 +0,0 @@ -// -// httplib.h -// -// Copyright (c) 2020 Yuji Hirose. All rights reserved. -// MIT License -// - -#include "ifaddrs.h" - -#ifndef CPPHTTPLIB_HTTPLIB_H -#define CPPHTTPLIB_HTTPLIB_H - -/* - * Configuration - */ - -#ifndef CPPHTTPLIB_KEEPALIVE_TIMEOUT_SECOND -#define CPPHTTPLIB_KEEPALIVE_TIMEOUT_SECOND 5 -#endif - -#ifndef CPPHTTPLIB_KEEPALIVE_TIMEOUT_USECOND -#define CPPHTTPLIB_KEEPALIVE_TIMEOUT_USECOND 0 -#endif - -#ifndef CPPHTTPLIB_KEEPALIVE_MAX_COUNT -#define CPPHTTPLIB_KEEPALIVE_MAX_COUNT 5 -#endif - -#ifndef CPPHTTPLIB_CONNECTION_TIMEOUT_SECOND -#define CPPHTTPLIB_CONNECTION_TIMEOUT_SECOND 300 -#endif - -#ifndef CPPHTTPLIB_CONNECTION_TIMEOUT_USECOND -#define CPPHTTPLIB_CONNECTION_TIMEOUT_USECOND 0 -#endif - -#ifndef CPPHTTPLIB_READ_TIMEOUT_SECOND -#define CPPHTTPLIB_READ_TIMEOUT_SECOND 5 -#endif - -#ifndef CPPHTTPLIB_READ_TIMEOUT_USECOND -#define CPPHTTPLIB_READ_TIMEOUT_USECOND 0 -#endif - -#ifndef CPPHTTPLIB_WRITE_TIMEOUT_SECOND -#define CPPHTTPLIB_WRITE_TIMEOUT_SECOND 5 -#endif - -#ifndef CPPHTTPLIB_WRITE_TIMEOUT_USECOND -#define CPPHTTPLIB_WRITE_TIMEOUT_USECOND 0 -#endif - -#ifndef CPPHTTPLIB_IDLE_INTERVAL_SECOND -#define CPPHTTPLIB_IDLE_INTERVAL_SECOND 0 -#endif - -#ifndef CPPHTTPLIB_IDLE_INTERVAL_USECOND -#ifdef _WIN32 -#define CPPHTTPLIB_IDLE_INTERVAL_USECOND 10000 -#else -#define CPPHTTPLIB_IDLE_INTERVAL_USECOND 0 -#endif -#endif - -#ifndef CPPHTTPLIB_REQUEST_URI_MAX_LENGTH -#define CPPHTTPLIB_REQUEST_URI_MAX_LENGTH 8192 -#endif - -#ifndef CPPHTTPLIB_REDIRECT_MAX_COUNT -#define CPPHTTPLIB_REDIRECT_MAX_COUNT 20 -#endif - -#ifndef CPPHTTPLIB_PAYLOAD_MAX_LENGTH -#define CPPHTTPLIB_PAYLOAD_MAX_LENGTH ((std::numeric_limits::max)()) -#endif - -#ifndef CPPHTTPLIB_RECV_BUFSIZ -#define CPPHTTPLIB_RECV_BUFSIZ size_t(4096u) -#endif - -#ifndef CPPHTTPLIB_THREAD_POOL_COUNT -#define CPPHTTPLIB_THREAD_POOL_COUNT \ - ((std::max)(8u, std::thread::hardware_concurrency() > 0 \ - ? std::thread::hardware_concurrency() - 1 \ - : 0)) -#endif - -/* - * Headers - */ - -#ifdef _WIN32 -#ifndef _CRT_SECURE_NO_WARNINGS -#define _CRT_SECURE_NO_WARNINGS -#endif //_CRT_SECURE_NO_WARNINGS - -#ifndef _CRT_NONSTDC_NO_DEPRECATE -#define _CRT_NONSTDC_NO_DEPRECATE -#endif //_CRT_NONSTDC_NO_DEPRECATE - -#if defined(_MSC_VER) -#ifdef _WIN64 -using ssize_t = __int64; -#else -using ssize_t = int; -#endif - -#if _MSC_VER < 1900 -#define snprintf _snprintf_s -#endif -#endif // _MSC_VER - -#ifndef S_ISREG -#define S_ISREG(m) (((m)&S_IFREG) == S_IFREG) -#endif // S_ISREG - -#ifndef S_ISDIR -#define S_ISDIR(m) (((m)&S_IFDIR) == S_IFDIR) -#endif // S_ISDIR - -#ifndef NOMINMAX -#define NOMINMAX -#endif // NOMINMAX - -#include -#include -#include - -#ifndef WSA_FLAG_NO_HANDLE_INHERIT -#define WSA_FLAG_NO_HANDLE_INHERIT 0x80 -#endif - -#ifdef _MSC_VER -#pragma comment(lib, "ws2_32.lib") -#endif - -#ifndef strcasecmp -#define strcasecmp _stricmp -#endif // strcasecmp - -using socket_t = SOCKET; -#ifdef CPPHTTPLIB_USE_POLL -#define poll(fds, nfds, timeout) WSAPoll(fds, nfds, timeout) -#endif - -#else // not _WIN32 - -#include -#include -#include -#include -#include -#ifdef CPPHTTPLIB_USE_POLL -#include -#endif -#include -#include -#include -#include -#include - -using socket_t = int; -#define INVALID_SOCKET (-1) -#endif //_WIN32 - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT -#include -#include -#include -#include - -#include -#include -#include - -// #if OPENSSL_VERSION_Number < 0x1010100fL -// #error Sorry, OpenSSL versions prior to 1.1.1 are not supported -// #endif - -#if OPENSSL_VERSION_Number < 0x10100000L -#include -inline const unsigned char *ASN1_String_get0_data(const ASN1_String *asn1) { - return M_ASN1_String_data(asn1); -} -#endif -#endif - -#ifdef CPPHTTPLIB_ZLIB_SUPPORT -#include -#endif -/* - * Declaration - */ -namespace httplib { - -namespace detail { - -struct ci { - bool operator()(const std::string &s1, const std::string &s2) const { - return std::lexicographical_compare( - s1.begin(), s1.end(), s2.begin(), s2.end(), - [](char c1, char c2) { return ::tolower(c1) < ::tolower(c2); }); - } -}; - -} // namespace detail - -using Headers = std::multimap; - -using Params = std::multimap; -using Match = std::smatch; - -using Progress = std::function; - -struct Response; -using ResponseHandler = std::function; - -struct MultipartFormData { - std::string name; - std::string content; - std::string filename; - std::string content_type; -}; -using MultipartFormDataItems = std::vector; -using MultipartFormDataMap = std::multimap; - -class DataSink { -public: - DataSink() : os(&sb_), sb_(*this) {} - - DataSink(const DataSink &) = delete; - DataSink &operator=(const DataSink &) = delete; - DataSink(DataSink &&) = delete; - DataSink &operator=(DataSink &&) = delete; - - std::function write; - std::function done; - std::function is_writable; - std::ostream os; - -private: - class data_sink_streambuf : public std::streambuf { - public: - data_sink_streambuf(DataSink &sink) : sink_(sink) {} - - protected: - std::streamsize xsputn(const char *s, std::streamsize n) { - sink_.write(s, static_cast(n)); - return n; - } - - private: - DataSink &sink_; - }; - - data_sink_streambuf sb_; -}; - -using ContentProvider = - std::function; - -using ChunkedContentProvider = - std::function; - -using ContentReceiver = - std::function; - -using MultipartContentHeader = - std::function; - -class ContentReader { -public: - using Reader = std::function; - using MultipartReader = std::function; - - ContentReader(Reader reader, MultipartReader multipart_reader) - : reader_(reader), multipart_reader_(multipart_reader) {} - - bool operator()(MultipartContentHeader header, - ContentReceiver receiver) const { - return multipart_reader_(header, receiver); - } - - bool operator()(ContentReceiver receiver) const { return reader_(receiver); } - - Reader reader_; - MultipartReader multipart_reader_; -}; - -using Range = std::pair; -using Ranges = std::vector; - -struct Request { - std::string method; - std::string path; - Headers headers; - std::string body; - - std::string remote_addr; - int remote_port = -1; - - // for server - std::string version; - std::string target; - Params params; - MultipartFormDataMap files; - Ranges ranges; - Match matches; - - // for client - size_t redirect_count = CPPHTTPLIB_REDIRECT_MAX_COUNT; - ResponseHandler response_handler; - ContentReceiver content_receiver; - size_t content_length = 0; - ContentProvider content_provider; - Progress progress; - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - const SSL *ssl; -#endif - - bool has_header(const char *key) const; - std::string get_header_value(const char *key, size_t id = 0) const; - size_t get_header_value_count(const char *key) const; - void set_header(const char *key, const char *val); - void set_header(const char *key, const std::string &val); - - bool has_param(const char *key) const; - std::string get_param_value(const char *key, size_t id = 0) const; - size_t get_param_value_count(const char *key) const; - - bool is_multipart_form_data() const; - - bool has_file(const char *key) const; - MultipartFormData get_file_value(const char *key) const; - - // private members... - size_t authorization_count_ = 0; -}; - -struct Response { - std::string version; - int status = -1; - Headers headers; - std::string body; - - bool has_header(const char *key) const; - std::string get_header_value(const char *key, size_t id = 0) const; - size_t get_header_value_count(const char *key) const; - void set_header(const char *key, const char *val); - void set_header(const char *key, const std::string &val); - - void set_redirect(const char *url, int status = 302); - void set_content(const char *s, size_t n, const char *content_type); - void set_content(std::string s, const char *content_type); - - void set_content_provider( - size_t length, ContentProvider provider, - std::function resource_releaser = [] {}); - - void set_chunked_content_provider( - ChunkedContentProvider provider, - std::function resource_releaser = [] {}); - - Response() = default; - Response(const Response &) = default; - Response &operator=(const Response &) = default; - Response(Response &&) = default; - Response &operator=(Response &&) = default; - ~Response() { - if (content_provider_resource_releaser_) { - content_provider_resource_releaser_(); - } - } - - // private members... - size_t content_length_ = 0; - ContentProvider content_provider_; - std::function content_provider_resource_releaser_; -}; - -class Stream { -public: - virtual ~Stream() = default; - - virtual bool is_readable() const = 0; - virtual bool is_writable() const = 0; - - virtual ssize_t read(char *ptr, size_t size) = 0; - virtual ssize_t write(const char *ptr, size_t size) = 0; - virtual void get_remote_ip_and_port(std::string &ip, int &port) const = 0; - - template - ssize_t write_format(const char *fmt, const Args &... args); - ssize_t write(const char *ptr); - ssize_t write(const std::string &s); -}; - -class TaskQueue { -public: - TaskQueue() = default; - virtual ~TaskQueue() = default; - - virtual void enqueue(std::function fn) = 0; - virtual void shutdown() = 0; - - virtual void on_idle(){}; -}; - -class ThreadPool : public TaskQueue { -public: - explicit ThreadPool(size_t n) : shutdown_(false) { - while (n) { - threads_.emplace_back(worker(*this)); - n--; - } - } - - ThreadPool(const ThreadPool &) = delete; - ~ThreadPool() override = default; - - void enqueue(std::function fn) override { - std::unique_lock lock(mutex_); - jobs_.push_back(fn); - cond_.notify_one(); - } - - void shutdown() override { - // Stop all worker threads... - { - std::unique_lock lock(mutex_); - shutdown_ = true; - } - - cond_.notify_all(); - - // Join... - for (auto &t : threads_) { - t.join(); - } - } - -private: - struct worker { - explicit worker(ThreadPool &pool) : pool_(pool) {} - - void operator()() { - for (;;) { - std::function fn; - { - std::unique_lock lock(pool_.mutex_); - - pool_.cond_.wait( - lock, [&] { return !pool_.jobs_.empty() || pool_.shutdown_; }); - - if (pool_.shutdown_ && pool_.jobs_.empty()) { break; } - - fn = pool_.jobs_.front(); - pool_.jobs_.pop_front(); - } - - assert(true == static_cast(fn)); - fn(); - } - } - - ThreadPool &pool_; - }; - friend struct worker; - - std::vector threads_; - std::list> jobs_; - - bool shutdown_; - - std::condition_variable cond_; - std::mutex mutex_; -}; - -using Logger = std::function; - -class Server { -public: - using Handler = std::function; - using HandlerWithContentReader = std::function; - using Expect100ContinueHandler = - std::function; - - Server(); - - virtual ~Server(); - - virtual bool is_valid() const; - - Server &Get(const char *pattern, Handler handler); - Server &Post(const char *pattern, Handler handler); - Server &Post(const char *pattern, HandlerWithContentReader handler); - Server &Put(const char *pattern, Handler handler); - Server &Put(const char *pattern, HandlerWithContentReader handler); - Server &Patch(const char *pattern, Handler handler); - Server &Patch(const char *pattern, HandlerWithContentReader handler); - Server &Delete(const char *pattern, Handler handler); - Server &Delete(const char *pattern, HandlerWithContentReader handler); - Server &Options(const char *pattern, Handler handler); - - [[deprecated]] bool set_base_dir(const char *dir, - const char *mount_point = nullptr); - bool set_mount_point(const char *mount_point, const char *dir); - bool remove_mount_point(const char *mount_point); - void set_file_extension_and_mimetype_mapping(const char *ext, - const char *mime); - void set_file_request_handler(Handler handler); - - void set_error_handler(Handler handler); - void set_logger(Logger logger); - - void set_expect_100_continue_handler(Expect100ContinueHandler handler); - - void set_keep_alive_max_count(size_t count); - void set_read_timeout(time_t sec, time_t usec = 0); - void set_write_timeout(time_t sec, time_t usec = 0); - void set_idle_interval(time_t sec, time_t usec = 0); - - void set_payload_max_length(size_t length); - - bool bind_to_port(const char *host, int port, int socket_flags = 0); - int bind_to_any_port(const char *host, int socket_flags = 0); - bool listen_after_bind(); - - bool listen(const char *host, int port, int socket_flags = 0); - - bool is_running() const; - void stop(); - - std::function new_task_queue; - -protected: - bool process_request(Stream &strm, bool last_connection, - bool &connection_close, - const std::function &setup_request); - - size_t keep_alive_max_count_ = CPPHTTPLIB_KEEPALIVE_MAX_COUNT; - time_t read_timeout_sec_ = CPPHTTPLIB_READ_TIMEOUT_SECOND; - time_t read_timeout_usec_ = CPPHTTPLIB_READ_TIMEOUT_USECOND; - time_t write_timeout_sec_ = CPPHTTPLIB_WRITE_TIMEOUT_SECOND; - time_t write_timeout_usec_ = CPPHTTPLIB_WRITE_TIMEOUT_USECOND; - time_t idle_interval_sec_ = CPPHTTPLIB_IDLE_INTERVAL_SECOND; - time_t idle_interval_usec_ = CPPHTTPLIB_IDLE_INTERVAL_USECOND; - size_t payload_max_length_ = CPPHTTPLIB_PAYLOAD_MAX_LENGTH; - -private: - using Handlers = std::vector>; - using HandlersForContentReader = - std::vector>; - - socket_t create_server_socket(const char *host, int port, - int socket_flags) const; - int bind_internal(const char *host, int port, int socket_flags); - bool listen_internal(); - - bool routing(Request &req, Response &res, Stream &strm); - bool handle_file_request(Request &req, Response &res, bool head = false); - bool dispatch_request(Request &req, Response &res, Handlers &handlers); - bool dispatch_request_for_content_reader(Request &req, Response &res, - ContentReader content_reader, - HandlersForContentReader &handlers); - - bool parse_request_line(const char *s, Request &req); - bool write_response(Stream &strm, bool last_connection, const Request &req, - Response &res); - bool write_content_with_provider(Stream &strm, const Request &req, - Response &res, const std::string &boundary, - const std::string &content_type); - bool read_content(Stream &strm, Request &req, Response &res); - bool - read_content_with_content_receiver(Stream &strm, Request &req, Response &res, - ContentReceiver receiver, - MultipartContentHeader multipart_header, - ContentReceiver multipart_receiver); - bool read_content_core(Stream &strm, Request &req, Response &res, - ContentReceiver receiver, - MultipartContentHeader mulitpart_header, - ContentReceiver multipart_receiver); - - virtual bool process_and_close_socket(socket_t sock); - - std::atomic is_running_; - std::atomic svr_sock_; - std::vector> base_dirs_; - std::map file_extension_and_mimetype_map_; - Handler file_request_handler_; - Handlers get_handlers_; - Handlers post_handlers_; - HandlersForContentReader post_handlers_for_content_reader_; - Handlers put_handlers_; - HandlersForContentReader put_handlers_for_content_reader_; - Handlers patch_handlers_; - HandlersForContentReader patch_handlers_for_content_reader_; - Handlers delete_handlers_; - HandlersForContentReader delete_handlers_for_content_reader_; - Handlers options_handlers_; - Handler error_handler_; - Logger logger_; - Expect100ContinueHandler expect_100_continue_handler_; -}; - -class Client { -public: - explicit Client(const std::string &host); - - explicit Client(const std::string &host, int port); - - explicit Client(const std::string &host, int port, - const std::string &client_cert_path, - const std::string &client_key_path); - - virtual ~Client(); - - virtual bool is_valid() const; - - std::shared_ptr Get(const char *path); - - std::shared_ptr Get(const char *path, const Headers &headers); - - std::shared_ptr Get(const char *path, Progress progress); - - std::shared_ptr Get(const char *path, const Headers &headers, - Progress progress); - - std::shared_ptr Get(const char *path, - ContentReceiver content_receiver); - - std::shared_ptr Get(const char *path, const Headers &headers, - ContentReceiver content_receiver); - - std::shared_ptr - Get(const char *path, ContentReceiver content_receiver, Progress progress); - - std::shared_ptr Get(const char *path, const Headers &headers, - ContentReceiver content_receiver, - Progress progress); - - std::shared_ptr Get(const char *path, const Headers &headers, - ResponseHandler response_handler, - ContentReceiver content_receiver); - - std::shared_ptr Get(const char *path, const Headers &headers, - ResponseHandler response_handler, - ContentReceiver content_receiver, - Progress progress); - - std::shared_ptr Head(const char *path); - - std::shared_ptr Head(const char *path, const Headers &headers); - - std::shared_ptr Post(const char *path); - - std::shared_ptr Post(const char *path, const std::string &body, - const char *content_type); - - std::shared_ptr Post(const char *path, const Headers &headers, - const std::string &body, - const char *content_type); - - std::shared_ptr Post(const char *path, size_t content_length, - ContentProvider content_provider, - const char *content_type); - - std::shared_ptr Post(const char *path, const Headers &headers, - size_t content_length, - ContentProvider content_provider, - const char *content_type); - - std::shared_ptr Post(const char *path, const Params ¶ms); - - std::shared_ptr Post(const char *path, const Headers &headers, - const Params ¶ms); - - std::shared_ptr Post(const char *path, - const MultipartFormDataItems &items); - - std::shared_ptr Post(const char *path, const Headers &headers, - const MultipartFormDataItems &items); - - std::shared_ptr Put(const char *path); - - std::shared_ptr Put(const char *path, const std::string &body, - const char *content_type); - - std::shared_ptr Put(const char *path, const Headers &headers, - const std::string &body, - const char *content_type); - - std::shared_ptr Put(const char *path, size_t content_length, - ContentProvider content_provider, - const char *content_type); - - std::shared_ptr Put(const char *path, const Headers &headers, - size_t content_length, - ContentProvider content_provider, - const char *content_type); - - std::shared_ptr Put(const char *path, const Params ¶ms); - - std::shared_ptr Put(const char *path, const Headers &headers, - const Params ¶ms); - - std::shared_ptr Patch(const char *path, const std::string &body, - const char *content_type); - - std::shared_ptr Patch(const char *path, const Headers &headers, - const std::string &body, - const char *content_type); - - std::shared_ptr Patch(const char *path, size_t content_length, - ContentProvider content_provider, - const char *content_type); - - std::shared_ptr Patch(const char *path, const Headers &headers, - size_t content_length, - ContentProvider content_provider, - const char *content_type); - - std::shared_ptr Delete(const char *path); - - std::shared_ptr Delete(const char *path, const std::string &body, - const char *content_type); - - std::shared_ptr Delete(const char *path, const Headers &headers); - - std::shared_ptr Delete(const char *path, const Headers &headers, - const std::string &body, - const char *content_type); - - std::shared_ptr Options(const char *path); - - std::shared_ptr Options(const char *path, const Headers &headers); - - bool send(const Request &req, Response &res); - - bool send(const std::vector &requests, - std::vector &responses); - - void stop(); - - [[deprecated]] void set_timeout_sec(time_t timeout_sec); - void set_connection_timeout(time_t sec, time_t usec = 0); - void set_read_timeout(time_t sec, time_t usec = 0); - void set_write_timeout(time_t sec, time_t usec = 0); - - void set_keep_alive_max_count(size_t count); - - void set_basic_auth(const char *username, const char *password); -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - void set_digest_auth(const char *username, const char *password); -#endif - - void set_follow_location(bool on); - - void set_compress(bool on); - - void set_decompress(bool on); - - void set_interface(const char *intf); - - void set_proxy(const char *host, int port); - void set_proxy_basic_auth(const char *username, const char *password); -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - void set_proxy_digest_auth(const char *username, const char *password); -#endif - - void set_logger(Logger logger); - -protected: - bool process_request(Stream &strm, const Request &req, Response &res, - bool last_connection, bool &connection_close); - - std::atomic sock_; - - const std::string host_; - const int port_; - const std::string host_and_port_; - - // Settings - std::string client_cert_path_; - std::string client_key_path_; - - time_t connection_timeout_sec_ = CPPHTTPLIB_CONNECTION_TIMEOUT_SECOND; - time_t connection_timeout_usec_ = CPPHTTPLIB_CONNECTION_TIMEOUT_USECOND; - time_t read_timeout_sec_ = CPPHTTPLIB_READ_TIMEOUT_SECOND; - time_t read_timeout_usec_ = CPPHTTPLIB_READ_TIMEOUT_USECOND; - time_t write_timeout_sec_ = CPPHTTPLIB_WRITE_TIMEOUT_SECOND; - time_t write_timeout_usec_ = CPPHTTPLIB_WRITE_TIMEOUT_USECOND; - - size_t keep_alive_max_count_ = CPPHTTPLIB_KEEPALIVE_MAX_COUNT; - - std::string basic_auth_username_; - std::string basic_auth_password_; -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - std::string digest_auth_username_; - std::string digest_auth_password_; -#endif - - bool follow_location_ = false; - - bool compress_ = false; - bool decompress_ = true; - - std::string interface_; - - std::string proxy_host_; - int proxy_port_; - - std::string proxy_basic_auth_username_; - std::string proxy_basic_auth_password_; -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - std::string proxy_digest_auth_username_; - std::string proxy_digest_auth_password_; -#endif - - Logger logger_; - - void copy_settings(const Client &rhs) { - client_cert_path_ = rhs.client_cert_path_; - client_key_path_ = rhs.client_key_path_; - connection_timeout_sec_ = rhs.connection_timeout_sec_; - read_timeout_sec_ = rhs.read_timeout_sec_; - read_timeout_usec_ = rhs.read_timeout_usec_; - write_timeout_sec_ = rhs.write_timeout_sec_; - write_timeout_usec_ = rhs.write_timeout_usec_; - keep_alive_max_count_ = rhs.keep_alive_max_count_; - basic_auth_username_ = rhs.basic_auth_username_; - basic_auth_password_ = rhs.basic_auth_password_; -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - digest_auth_username_ = rhs.digest_auth_username_; - digest_auth_password_ = rhs.digest_auth_password_; -#endif - follow_location_ = rhs.follow_location_; - compress_ = rhs.compress_; - decompress_ = rhs.decompress_; - interface_ = rhs.interface_; - proxy_host_ = rhs.proxy_host_; - proxy_port_ = rhs.proxy_port_; - proxy_basic_auth_username_ = rhs.proxy_basic_auth_username_; - proxy_basic_auth_password_ = rhs.proxy_basic_auth_password_; -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - proxy_digest_auth_username_ = rhs.proxy_digest_auth_username_; - proxy_digest_auth_password_ = rhs.proxy_digest_auth_password_; -#endif - logger_ = rhs.logger_; - } - -private: - socket_t create_client_socket() const; - bool read_response_line(Stream &strm, Response &res); - bool write_request(Stream &strm, const Request &req, bool last_connection); - bool redirect(const Request &req, Response &res); - bool handle_request(Stream &strm, const Request &req, Response &res, - bool last_connection, bool &connection_close); -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - bool connect(socket_t sock, Response &res, bool &error); -#endif - - std::shared_ptr send_with_content_provider( - const char *method, const char *path, const Headers &headers, - const std::string &body, size_t content_length, - ContentProvider content_provider, const char *content_type); - - virtual bool process_and_close_socket( - socket_t sock, size_t request_count, - std::function - callback); - - virtual bool is_ssl() const; -}; - -inline void Get(std::vector &requests, const char *path, - const Headers &headers) { - Request req; - req.method = "GET"; - req.path = path; - req.headers = headers; - requests.emplace_back(std::move(req)); -} - -inline void Get(std::vector &requests, const char *path) { - Get(requests, path, Headers()); -} - -inline void Post(std::vector &requests, const char *path, - const Headers &headers, const std::string &body, - const char *content_type) { - Request req; - req.method = "POST"; - req.path = path; - req.headers = headers; - if (content_type) { req.headers.emplace("Content-Type", content_type); } - req.body = body; - requests.emplace_back(std::move(req)); -} - -inline void Post(std::vector &requests, const char *path, - const std::string &body, const char *content_type) { - Post(requests, path, Headers(), body, content_type); -} - -inline void Post(std::vector &requests, const char *path, - size_t content_length, ContentProvider content_provider, - const char *content_type) { - Request req; - req.method = "POST"; - req.headers = Headers(); - req.path = path; - req.content_length = content_length; - req.content_provider = content_provider; - - if (content_type) { req.headers.emplace("Content-Type", content_type); } - - requests.emplace_back(std::move(req)); -} - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT -class SSLServer : public Server { -public: - SSLServer(const char *cert_path, const char *private_key_path, - const char *client_ca_cert_file_path = nullptr, - const char *client_ca_cert_dir_path = nullptr); - - SSLServer(X509 *cert, EVP_PKEY *private_key, - X509_STORE *client_ca_cert_store = nullptr); - - ~SSLServer() override; - - bool is_valid() const override; - -private: - bool process_and_close_socket(socket_t sock) override; - - SSL_CTX *ctx_; - std::mutex ctx_mutex_; -}; - -class SSLClient : public Client { -public: - explicit SSLClient(const std::string &host); - - explicit SSLClient(const std::string &host, int port); - - explicit SSLClient(const std::string &host, int port, - const std::string &client_cert_path, - const std::string &client_key_path); - - explicit SSLClient(const std::string &host, int port, X509 *client_cert, - EVP_PKEY *client_key); - - ~SSLClient() override; - - bool is_valid() const override; - - void set_ca_cert_path(const char *ca_cert_file_path, - const char *ca_cert_dir_path = nullptr); - - void set_ca_cert_store(X509_STORE *ca_cert_store); - - void enable_server_certificate_verification(bool enabled); - - long get_openssl_verify_result() const; - - SSL_CTX *ssl_context() const; - -private: - bool process_and_close_socket( - socket_t sock, size_t request_count, - std::function - callback) override; - bool is_ssl() const override; - - bool verify_host(X509 *server_cert) const; - bool verify_host_with_subject_alt_name(X509 *server_cert) const; - bool verify_host_with_common_name(X509 *server_cert) const; - bool check_host_name(const char *pattern, size_t pattern_len) const; - - SSL_CTX *ctx_; - std::mutex ctx_mutex_; - std::vector host_components_; - - std::string ca_cert_file_path_; - std::string ca_cert_dir_path_; - X509_STORE *ca_cert_store_ = nullptr; - bool server_certificate_verification_ = false; - long verify_result_ = 0; -}; -#endif - -class Client2 { -public: - explicit Client2(const char *scheme_host_port) - : Client2(scheme_host_port, std::string(), std::string()) {} - - explicit Client2(const char *scheme_host_port, - const std::string &client_cert_path, - const std::string &client_key_path) { - const static std::regex re(R"(^(https?)://([^:/?#]+)(?::(\d+))?)"); - - std::cmatch m; - if (std::regex_match(scheme_host_port, m, re)) { - auto scheme = m[1].str(); - auto host = m[2].str(); - auto port_str = m[3].str(); - - auto port = !port_str.empty() ? std::stoi(port_str) - : (scheme == "https" ? 443 : 80); - - if (scheme == "https") { -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - is_ssl_ = true; - cli_ = std::make_shared(host.c_str(), port, client_cert_path, - client_key_path); -#endif - } else { - cli_ = std::make_shared(host.c_str(), port, client_cert_path, - client_key_path); - } - } - } - - ~Client2() {} - - bool is_valid() const { return cli_ != nullptr; } - - std::shared_ptr Get(const char *path) { return cli_->Get(path); } - - std::shared_ptr Get(const char *path, const Headers &headers) { - return cli_->Get(path, headers); - } - - std::shared_ptr Get(const char *path, Progress progress) { - return cli_->Get(path, progress); - } - - std::shared_ptr Get(const char *path, const Headers &headers, - Progress progress) { - return cli_->Get(path, headers, progress); - } - - std::shared_ptr Get(const char *path, - ContentReceiver content_receiver) { - return cli_->Get(path, content_receiver); - } - - std::shared_ptr Get(const char *path, const Headers &headers, - ContentReceiver content_receiver) { - return cli_->Get(path, headers, content_receiver); - } - - std::shared_ptr - Get(const char *path, ContentReceiver content_receiver, Progress progress) { - return cli_->Get(path, content_receiver, progress); - } - - std::shared_ptr Get(const char *path, const Headers &headers, - ContentReceiver content_receiver, - Progress progress) { - return cli_->Get(path, headers, content_receiver, progress); - } - - std::shared_ptr Get(const char *path, const Headers &headers, - ResponseHandler response_handler, - ContentReceiver content_receiver) { - return cli_->Get(path, headers, response_handler, content_receiver); - } - - std::shared_ptr Get(const char *path, const Headers &headers, - ResponseHandler response_handler, - ContentReceiver content_receiver, - Progress progress) { - return cli_->Get(path, headers, response_handler, content_receiver, - progress); - } - - std::shared_ptr Head(const char *path) { return cli_->Head(path); } - - std::shared_ptr Head(const char *path, const Headers &headers) { - return cli_->Head(path, headers); - } - - std::shared_ptr Post(const char *path) { return cli_->Post(path); } - - std::shared_ptr Post(const char *path, const std::string &body, - const char *content_type) { - return cli_->Post(path, body, content_type); - } - - std::shared_ptr Post(const char *path, const Headers &headers, - const std::string &body, - const char *content_type) { - return cli_->Post(path, headers, body, content_type); - } - - std::shared_ptr Post(const char *path, size_t content_length, - ContentProvider content_provider, - const char *content_type) { - return cli_->Post(path, content_length, content_provider, content_type); - } - - std::shared_ptr Post(const char *path, const Headers &headers, - size_t content_length, - ContentProvider content_provider, - const char *content_type) { - return cli_->Post(path, headers, content_length, content_provider, - content_type); - } - - std::shared_ptr Post(const char *path, const Params ¶ms) { - return cli_->Post(path, params); - } - - std::shared_ptr Post(const char *path, const Headers &headers, - const Params ¶ms) { - return cli_->Post(path, headers, params); - } - - std::shared_ptr Post(const char *path, - const MultipartFormDataItems &items) { - return cli_->Post(path, items); - } - - std::shared_ptr Post(const char *path, const Headers &headers, - const MultipartFormDataItems &items) { - return cli_->Post(path, headers, items); - } - - std::shared_ptr Put(const char *path) { return cli_->Put(path); } - - std::shared_ptr Put(const char *path, const std::string &body, - const char *content_type) { - return cli_->Put(path, body, content_type); - } - - std::shared_ptr Put(const char *path, const Headers &headers, - const std::string &body, - const char *content_type) { - return cli_->Put(path, headers, body, content_type); - } - - std::shared_ptr Put(const char *path, size_t content_length, - ContentProvider content_provider, - const char *content_type) { - return cli_->Put(path, content_length, content_provider, content_type); - } - - std::shared_ptr Put(const char *path, const Headers &headers, - size_t content_length, - ContentProvider content_provider, - const char *content_type) { - return cli_->Put(path, headers, content_length, content_provider, - content_type); - } - - std::shared_ptr Put(const char *path, const Params ¶ms) { - return cli_->Put(path, params); - } - - std::shared_ptr Put(const char *path, const Headers &headers, - const Params ¶ms) { - return cli_->Put(path, headers, params); - } - - std::shared_ptr Patch(const char *path, const std::string &body, - const char *content_type) { - return cli_->Patch(path, body, content_type); - } - - std::shared_ptr Patch(const char *path, const Headers &headers, - const std::string &body, - const char *content_type) { - return cli_->Patch(path, headers, body, content_type); - } - - std::shared_ptr Patch(const char *path, size_t content_length, - ContentProvider content_provider, - const char *content_type) { - return cli_->Patch(path, content_length, content_provider, content_type); - } - - std::shared_ptr Patch(const char *path, const Headers &headers, - size_t content_length, - ContentProvider content_provider, - const char *content_type) { - return cli_->Patch(path, headers, content_length, content_provider, - content_type); - } - - std::shared_ptr Delete(const char *path) { - return cli_->Delete(path); - } - - std::shared_ptr Delete(const char *path, const std::string &body, - const char *content_type) { - return cli_->Delete(path, body, content_type); - } - - std::shared_ptr Delete(const char *path, const Headers &headers) { - return cli_->Delete(path, headers); - } - - std::shared_ptr Delete(const char *path, const Headers &headers, - const std::string &body, - const char *content_type) { - return cli_->Delete(path, headers, body, content_type); - } - - std::shared_ptr Options(const char *path) { - return cli_->Options(path); - } - - std::shared_ptr Options(const char *path, const Headers &headers) { - return cli_->Options(path, headers); - } - - bool send(const Request &req, Response &res) { return cli_->send(req, res); } - - bool send(const std::vector &requests, - std::vector &responses) { - return cli_->send(requests, responses); - } - - void stop() { cli_->stop(); } - - Client2 &set_connection_timeout(time_t sec, time_t usec) { - cli_->set_connection_timeout(sec, usec); - return *this; - } - - Client2 &set_read_timeout(time_t sec, time_t usec) { - cli_->set_read_timeout(sec, usec); - return *this; - } - - Client2 &set_keep_alive_max_count(size_t count) { - cli_->set_keep_alive_max_count(count); - return *this; - } - - Client2 &set_basic_auth(const char *username, const char *password) { - cli_->set_basic_auth(username, password); - return *this; - } - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - Client2 &set_digest_auth(const char *username, const char *password) { - cli_->set_digest_auth(username, password); - return *this; - } -#endif - - Client2 &set_follow_location(bool on) { - cli_->set_follow_location(on); - return *this; - } - - Client2 &set_compress(bool on) { - cli_->set_compress(on); - return *this; - } - - Client2 &set_decompress(bool on) { - cli_->set_decompress(on); - return *this; - } - - Client2 &set_interface(const char *intf) { - cli_->set_interface(intf); - return *this; - } - - Client2 &set_proxy(const char *host, int port) { - cli_->set_proxy(host, port); - return *this; - } - - Client2 &set_proxy_basic_auth(const char *username, const char *password) { - cli_->set_proxy_basic_auth(username, password); - return *this; - } - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - Client2 &set_proxy_digest_auth(const char *username, const char *password) { - cli_->set_proxy_digest_auth(username, password); - return *this; - } -#endif - - Client2 &set_logger(Logger logger) { - cli_->set_logger(logger); - return *this; - } - - // SSL -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - Client2 &set_ca_cert_path(const char *ca_cert_file_path, - const char *ca_cert_dir_path = nullptr) { - if (is_ssl_) { - static_cast(*cli_).set_ca_cert_path(ca_cert_file_path, - ca_cert_dir_path); - } - return *this; - } - - Client2 &set_ca_cert_store(X509_STORE *ca_cert_store) { - if (is_ssl_) { - static_cast(*cli_).set_ca_cert_store(ca_cert_store); - } - return *this; - } - - Client2 &enable_server_certificate_verification(bool enabled) { - if (is_ssl_) { - static_cast(*cli_).enable_server_certificate_verification( - enabled); - } - return *this; - } - - long get_openssl_verify_result() const { - if (is_ssl_) { - return static_cast(*cli_).get_openssl_verify_result(); - } - return -1; // NOTE: -1 doesn't match any of X509_V_ERR_??? - } - - SSL_CTX *ssl_context() const { - if (is_ssl_) { return static_cast(*cli_).ssl_context(); } - return nullptr; - } -#endif - -private: - bool is_ssl_ = false; - std::shared_ptr cli_; -}; - -// ---------------------------------------------------------------------------- - -/* - * Implementation - */ - -namespace detail { - -inline bool is_hex(char c, int &v) { - if (0x20 <= c && isdigit(c)) { - v = c - '0'; - return true; - } else if ('A' <= c && c <= 'F') { - v = c - 'A' + 10; - return true; - } else if ('a' <= c && c <= 'f') { - v = c - 'a' + 10; - return true; - } - return false; -} - -inline bool from_hex_to_i(const std::string &s, size_t i, size_t cnt, - int &val) { - if (i >= s.size()) { return false; } - - val = 0; - for (; cnt; i++, cnt--) { - if (!s[i]) { return false; } - int v = 0; - if (is_hex(s[i], v)) { - val = val * 16 + v; - } else { - return false; - } - } - return true; -} - -inline std::string from_i_to_hex(size_t n) { - const char *charset = "0123456789abcdef"; - std::string ret; - do { - ret = charset[n & 15] + ret; - n >>= 4; - } while (n > 0); - return ret; -} - -inline size_t to_utf8(int code, char *buff) { - if (code < 0x0080) { - buff[0] = (code & 0x7F); - return 1; - } else if (code < 0x0800) { - buff[0] = static_cast(0xC0 | ((code >> 6) & 0x1F)); - buff[1] = static_cast(0x80 | (code & 0x3F)); - return 2; - } else if (code < 0xD800) { - buff[0] = static_cast(0xE0 | ((code >> 12) & 0xF)); - buff[1] = static_cast(0x80 | ((code >> 6) & 0x3F)); - buff[2] = static_cast(0x80 | (code & 0x3F)); - return 3; - } else if (code < 0xE000) { // D800 - DFFF is invalid... - return 0; - } else if (code < 0x10000) { - buff[0] = static_cast(0xE0 | ((code >> 12) & 0xF)); - buff[1] = static_cast(0x80 | ((code >> 6) & 0x3F)); - buff[2] = static_cast(0x80 | (code & 0x3F)); - return 3; - } else if (code < 0x110000) { - buff[0] = static_cast(0xF0 | ((code >> 18) & 0x7)); - buff[1] = static_cast(0x80 | ((code >> 12) & 0x3F)); - buff[2] = static_cast(0x80 | ((code >> 6) & 0x3F)); - buff[3] = static_cast(0x80 | (code & 0x3F)); - return 4; - } - - // NOTREACHED - return 0; -} - -// NOTE: This code came up with the following stackoverflow post: -// https://stackoverflow.com/questions/180947/base64-decode-snippet-in-c -inline std::string base64_encode(const std::string &in) { - static const auto lookup = - "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; - - std::string out; - out.reserve(in.size()); - - int val = 0; - int valb = -6; - - for (auto c : in) { - val = (val << 8) + static_cast(c); - valb += 8; - while (valb >= 0) { - out.push_back(lookup[(val >> valb) & 0x3F]); - valb -= 6; - } - } - - if (valb > -6) { out.push_back(lookup[((val << 8) >> (valb + 8)) & 0x3F]); } - - while (out.size() % 4) { - out.push_back('='); - } - - return out; -} - -inline bool is_file(const std::string &path) { - struct stat st; - return stat(path.c_str(), &st) >= 0 && S_ISREG(st.st_mode); -} - -inline bool is_dir(const std::string &path) { - struct stat st; - return stat(path.c_str(), &st) >= 0 && S_ISDIR(st.st_mode); -} - -inline bool is_valid_path(const std::string &path) { - size_t level = 0; - size_t i = 0; - - // Skip slash - while (i < path.size() && path[i] == '/') { - i++; - } - - while (i < path.size()) { - // Read component - auto beg = i; - while (i < path.size() && path[i] != '/') { - i++; - } - - auto len = i - beg; - assert(len > 0); - - if (!path.compare(beg, len, ".")) { - ; - } else if (!path.compare(beg, len, "..")) { - if (level == 0) { return false; } - level--; - } else { - level++; - } - - // Skip slash - while (i < path.size() && path[i] == '/') { - i++; - } - } - - return true; -} - -inline void read_file(const std::string &path, std::string &out) { - std::ifstream fs(path, std::ios_base::binary); - fs.seekg(0, std::ios_base::end); - auto size = fs.tellg(); - fs.seekg(0); - out.resize(static_cast(size)); - fs.read(&out[0], size); -} - -inline std::string file_extension(const std::string &path) { - std::smatch m; - static auto re = std::regex("\\.([a-zA-Z0-9]+)$"); - if (std::regex_search(path, m, re)) { return m[1].str(); } - return std::string(); -} - -template void split(const char *b, const char *e, char d, Fn fn) { - int i = 0; - int beg = 0; - - while (e ? (b + i != e) : (b[i] != '\0')) { - if (b[i] == d) { - fn(&b[beg], &b[i]); - beg = i + 1; - } - i++; - } - - if (i) { fn(&b[beg], &b[i]); } -} - -// NOTE: until the read size reaches `fixed_buffer_size`, use `fixed_buffer` -// to store data. The call can set memory on stack for performance. -class stream_line_reader { -public: - stream_line_reader(Stream &strm, char *fixed_buffer, size_t fixed_buffer_size) - : strm_(strm), fixed_buffer_(fixed_buffer), - fixed_buffer_size_(fixed_buffer_size) {} - - const char *ptr() const { - if (glowable_buffer_.empty()) { - return fixed_buffer_; - } else { - return glowable_buffer_.data(); - } - } - - size_t size() const { - if (glowable_buffer_.empty()) { - return fixed_buffer_used_size_; - } else { - return glowable_buffer_.size(); - } - } - - bool end_with_crlf() const { - auto end = ptr() + size(); - return size() >= 2 && end[-2] == '\r' && end[-1] == '\n'; - } - - bool getline() { - fixed_buffer_used_size_ = 0; - glowable_buffer_.clear(); - - for (size_t i = 0;; i++) { - char byte; - auto n = strm_.read(&byte, 1); - - if (n < 0) { - return false; - } else if (n == 0) { - if (i == 0) { - return false; - } else { - break; - } - } - - append(byte); - - if (byte == '\n') { break; } - } - - return true; - } - -private: - void append(char c) { - if (fixed_buffer_used_size_ < fixed_buffer_size_ - 1) { - fixed_buffer_[fixed_buffer_used_size_++] = c; - fixed_buffer_[fixed_buffer_used_size_] = '\0'; - } else { - if (glowable_buffer_.empty()) { - assert(fixed_buffer_[fixed_buffer_used_size_] == '\0'); - glowable_buffer_.assign(fixed_buffer_, fixed_buffer_used_size_); - } - glowable_buffer_ += c; - } - } - - Stream &strm_; - char *fixed_buffer_; - const size_t fixed_buffer_size_; - size_t fixed_buffer_used_size_ = 0; - std::string glowable_buffer_; -}; - -inline int close_socket(socket_t sock) { -#ifdef _WIN32 - return closesocket(sock); -#else - return close(sock); -#endif -} - -template inline ssize_t handle_EINTR(T fn) { - ssize_t res = false; - while (true) { - res = fn(); - if (res < 0 && errno == EINTR) { continue; } - break; - } - return res; -} - -inline ssize_t select_read(socket_t sock, time_t sec, time_t usec) { -#ifdef CPPHTTPLIB_USE_POLL - struct pollfd pfd_read; - pfd_read.fd = sock; - pfd_read.events = POLLIN; - - auto timeout = static_cast(sec * 1000 + usec / 1000); - - return handle_EINTR([&]() { return poll(&pfd_read, 1, timeout); }); -#else - fd_set fds; - FD_ZERO(&fds); - FD_SET(sock, &fds); - - timeval tv; - tv.tv_sec = static_cast(sec); - tv.tv_usec = static_cast(usec); - - return handle_EINTR([&]() { - return select(static_cast(sock + 1), &fds, nullptr, nullptr, &tv); - }); -#endif -} - -inline ssize_t select_write(socket_t sock, time_t sec, time_t usec) { -#ifdef CPPHTTPLIB_USE_POLL - struct pollfd pfd_read; - pfd_read.fd = sock; - pfd_read.events = POLLOUT; - - auto timeout = static_cast(sec * 1000 + usec / 1000); - - return handle_EINTR([&]() { return poll(&pfd_read, 1, timeout); }); -#else - fd_set fds; - FD_ZERO(&fds); - FD_SET(sock, &fds); - - timeval tv; - tv.tv_sec = static_cast(sec); - tv.tv_usec = static_cast(usec); - - return handle_EINTR([&]() { - return select(static_cast(sock + 1), nullptr, &fds, nullptr, &tv); - }); -#endif -} - -inline bool wait_until_socket_is_ready(socket_t sock, time_t sec, time_t usec) { -#ifdef CPPHTTPLIB_USE_POLL - struct pollfd pfd_read; - pfd_read.fd = sock; - pfd_read.events = POLLIN | POLLOUT; - - auto timeout = static_cast(sec * 1000 + usec / 1000); - - auto poll_res = handle_EINTR([&]() { return poll(&pfd_read, 1, timeout); }); - - if (poll_res > 0 && pfd_read.revents & (POLLIN | POLLOUT)) { - int error = 0; - socklen_t len = sizeof(error); - auto res = getsockopt(sock, SOL_SOCKET, SO_ERROR, - reinterpret_cast(&error), &len); - return res >= 0 && !error; - } - return false; -#else - fd_set fdsr; - FD_ZERO(&fdsr); - FD_SET(sock, &fdsr); - - auto fdsw = fdsr; - auto fdse = fdsr; - - timeval tv; - tv.tv_sec = static_cast(sec); - tv.tv_usec = static_cast(usec); - - auto ret = handle_EINTR([&]() { - return select(static_cast(sock + 1), &fdsr, &fdsw, &fdse, &tv); - }); - - if (ret > 0 && (FD_ISSET(sock, &fdsr) || FD_ISSET(sock, &fdsw))) { - int error = 0; - socklen_t len = sizeof(error); - return getsockopt(sock, SOL_SOCKET, SO_ERROR, - reinterpret_cast(&error), &len) >= 0 && - !error; - } - return false; -#endif -} - -class SocketStream : public Stream { -public: - SocketStream(socket_t sock, time_t read_timeout_sec, time_t read_timeout_usec, - time_t write_timeout_sec, time_t write_timeout_usec); - ~SocketStream() override; - - bool is_readable() const override; - bool is_writable() const override; - ssize_t read(char *ptr, size_t size) override; - ssize_t write(const char *ptr, size_t size) override; - void get_remote_ip_and_port(std::string &ip, int &port) const override; - -private: - socket_t sock_; - time_t read_timeout_sec_; - time_t read_timeout_usec_; - time_t write_timeout_sec_; - time_t write_timeout_usec_; -}; - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT -class SSLSocketStream : public Stream { -public: - SSLSocketStream(socket_t sock, SSL *ssl, time_t read_timeout_sec, - time_t read_timeout_usec, time_t write_timeout_sec, - time_t write_timeout_usec); - ~SSLSocketStream() override; - - bool is_readable() const override; - bool is_writable() const override; - ssize_t read(char *ptr, size_t size) override; - ssize_t write(const char *ptr, size_t size) override; - void get_remote_ip_and_port(std::string &ip, int &port) const override; - -private: - socket_t sock_; - SSL *ssl_; - time_t read_timeout_sec_; - time_t read_timeout_usec_; - time_t write_timeout_sec_; - time_t write_timeout_usec_; -}; -#endif - -class BufferStream : public Stream { -public: - BufferStream() = default; - ~BufferStream() override = default; - - bool is_readable() const override; - bool is_writable() const override; - ssize_t read(char *ptr, size_t size) override; - ssize_t write(const char *ptr, size_t size) override; - void get_remote_ip_and_port(std::string &ip, int &port) const override; - - const std::string &get_buffer() const; - -private: - std::string buffer; - size_t position = 0; -}; - -template -inline bool process_socket(bool is_client_request, socket_t sock, - size_t keep_alive_max_count, time_t read_timeout_sec, - time_t read_timeout_usec, time_t write_timeout_sec, - time_t write_timeout_usec, T callback) { - assert(keep_alive_max_count > 0); - - auto ret = false; - - if (keep_alive_max_count > 1) { - auto count = keep_alive_max_count; - while (count > 0 && - (is_client_request || - select_read(sock, CPPHTTPLIB_KEEPALIVE_TIMEOUT_SECOND, - CPPHTTPLIB_KEEPALIVE_TIMEOUT_USECOND) > 0)) { - SocketStream strm(sock, read_timeout_sec, read_timeout_usec, - write_timeout_sec, write_timeout_usec); - auto last_connection = count == 1; - auto connection_close = false; - - ret = callback(strm, last_connection, connection_close); - if (!ret || connection_close) { break; } - - count--; - } - } else { // keep_alive_max_count is 0 or 1 - SocketStream strm(sock, read_timeout_sec, read_timeout_usec, - write_timeout_sec, write_timeout_usec); - auto dummy_connection_close = false; - ret = callback(strm, true, dummy_connection_close); - } - - return ret; -} - -template -inline bool -process_and_close_socket(bool is_client_request, socket_t sock, - size_t keep_alive_max_count, time_t read_timeout_sec, - time_t read_timeout_usec, time_t write_timeout_sec, - time_t write_timeout_usec, T callback) { - auto ret = process_socket(is_client_request, sock, keep_alive_max_count, - read_timeout_sec, read_timeout_usec, - write_timeout_sec, write_timeout_usec, callback); - close_socket(sock); - return ret; -} - -inline int shutdown_socket(socket_t sock) { -#ifdef _WIN32 - return shutdown(sock, SD_BOTH); -#else - return shutdown(sock, SHUT_RDWR); -#endif -} - -template -socket_t create_socket(const char *host, int port, Fn fn, - int socket_flags = 0) { - // Get address info - struct addrinfo hints; - struct addrinfo *result; - - memset(&hints, 0, sizeof(struct addrinfo)); - hints.ai_family = AF_UNSPEC; - hints.ai_socktype = SOCK_STREAM; - hints.ai_flags = socket_flags; - hints.ai_protocol = 0; - - auto service = std::to_string(port); - - if (getaddrinfo(host, service.c_str(), &hints, &result)) { - return INVALID_SOCKET; - } - - for (auto rp = result; rp; rp = rp->ai_next) { - // Create a socket -#ifdef _WIN32 - auto sock = WSASocketW(rp->ai_family, rp->ai_socktype, rp->ai_protocol, - nullptr, 0, WSA_FLAG_NO_HANDLE_INHERIT); - /** - * Since the WSA_FLAG_NO_HANDLE_INHERIT is only supported on Windows 7 SP1 - * and above the socket creation fails on older Windows Systems. - * - * Let's try to create a socket the old way in this case. - * - * Reference: - * https://docs.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-wsasocketa - * - * WSA_FLAG_NO_HANDLE_INHERIT: - * This flag is supported on Windows 7 with SP1, Windows Server 2008 R2 with - * SP1, and later - * - */ - if (sock == INVALID_SOCKET) { - sock = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol); - } -#else - auto sock = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol); -#endif - if (sock == INVALID_SOCKET) { continue; } - -#ifndef _WIN32 - if (fcntl(sock, F_SETFD, FD_CLOEXEC) == -1) { continue; } -#endif - - // Make 'reuse address' option available - int yes = 1; - setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, reinterpret_cast(&yes), - sizeof(yes)); - -#ifdef SO_REUSEPORT - setsockopt(sock, SOL_SOCKET, SO_REUSEPORT, reinterpret_cast(&yes), - sizeof(yes)); -#endif - - if (rp->ai_family == AF_INET6) { - int no = 0; - setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY, reinterpret_cast(&no), - sizeof(no)); - } - - // bind or connect - if (fn(sock, *rp)) { - freeaddrinfo(result); - return sock; - } - - close_socket(sock); - } - - freeaddrinfo(result); - return INVALID_SOCKET; -} - -inline void set_nonblocking(socket_t sock, bool nonblocking) { -#ifdef _WIN32 - auto flags = nonblocking ? 1UL : 0UL; - ioctlsocket(sock, FIONBIO, &flags); -#else - auto flags = fcntl(sock, F_GETFL, 0); - fcntl(sock, F_SETFL, - nonblocking ? (flags | O_NONBLOCK) : (flags & (~O_NONBLOCK))); -#endif -} - -inline bool is_connection_error() { -#ifdef _WIN32 - return WSAGetLastError() != WSAEWOULDBLOCK; -#else - return errno != EINPROGRESS; -#endif -} - -inline bool bind_ip_address(socket_t sock, const char *host) { - struct addrinfo hints; - struct addrinfo *result; - - memset(&hints, 0, sizeof(struct addrinfo)); - hints.ai_family = AF_UNSPEC; - hints.ai_socktype = SOCK_STREAM; - hints.ai_protocol = 0; - - if (getaddrinfo(host, "0", &hints, &result)) { return false; } - - auto ret = false; - for (auto rp = result; rp; rp = rp->ai_next) { - const auto &ai = *rp; - if (!::bind(sock, ai.ai_addr, static_cast(ai.ai_addrlen))) { - ret = true; - break; - } - } - - freeaddrinfo(result); - return ret; -} - -#ifndef _WIN32 -inline std::string if2ip(const std::string &ifn) { - struct ifaddrs *ifap; - getifaddrs(&ifap); - for (auto ifa = ifap; ifa; ifa = ifa->ifa_next) { - if (ifa->ifa_addr && ifn == ifa->ifa_name) { - if (ifa->ifa_addr->sa_family == AF_INET) { - auto sa = reinterpret_cast(ifa->ifa_addr); - char buf[INET_ADDRSTRLEN]; - if (inet_ntop(AF_INET, &sa->sin_addr, buf, INET_ADDRSTRLEN)) { - freeifaddrs(ifap); - return std::string(buf, INET_ADDRSTRLEN); - } - } - } - } - freeifaddrs(ifap); - return std::string(); -} -#endif - -inline socket_t create_client_socket(const char *host, int port, - time_t timeout_sec, time_t timeout_usec, - const std::string &intf) { - return create_socket( - host, port, [&](socket_t sock, struct addrinfo &ai) -> bool { - if (!intf.empty()) { -#ifndef _WIN32 - auto ip = if2ip(intf); - if (ip.empty()) { ip = intf; } - if (!bind_ip_address(sock, ip.c_str())) { return false; } -#endif - } - - set_nonblocking(sock, true); - - auto ret = - ::connect(sock, ai.ai_addr, static_cast(ai.ai_addrlen)); - if (ret < 0) { - if (is_connection_error() || - !wait_until_socket_is_ready(sock, timeout_sec, timeout_usec)) { - close_socket(sock); - return false; - } - } - - set_nonblocking(sock, false); - return true; - }); -} - -inline void get_remote_ip_and_port(const struct sockaddr_storage &addr, - socklen_t addr_len, std::string &ip, - int &port) { - if (addr.ss_family == AF_INET) { - port = ntohs(reinterpret_cast(&addr)->sin_port); - } else if (addr.ss_family == AF_INET6) { - port = - ntohs(reinterpret_cast(&addr)->sin6_port); - } - - std::array ipstr{}; - if (!getnameinfo(reinterpret_cast(&addr), addr_len, - ipstr.data(), static_cast(ipstr.size()), nullptr, - 0, NI_NUMERICHOST)) { - ip = ipstr.data(); - } -} - -inline void get_remote_ip_and_port(socket_t sock, std::string &ip, int &port) { - struct sockaddr_storage addr; - socklen_t addr_len = sizeof(addr); - - if (!getpeername(sock, reinterpret_cast(&addr), - &addr_len)) { - get_remote_ip_and_port(addr, addr_len, ip, port); - } -} - -inline const char * -find_content_type(const std::string &path, - const std::map &user_data) { - auto ext = file_extension(path); - - auto it = user_data.find(ext); - if (it != user_data.end()) { return it->second.c_str(); } - - if (ext == "txt") { - return "text/plain"; - } else if (ext == "html" || ext == "htm") { - return "text/html"; - } else if (ext == "css") { - return "text/css"; - } else if (ext == "jpeg" || ext == "jpg") { - return "image/jpg"; - } else if (ext == "png") { - return "image/png"; - } else if (ext == "gif") { - return "image/gif"; - } else if (ext == "svg") { - return "image/svg+xml"; - } else if (ext == "ico") { - return "image/x-icon"; - } else if (ext == "json") { - return "application/json"; - } else if (ext == "pdf") { - return "application/pdf"; - } else if (ext == "js") { - return "application/javascript"; - } else if (ext == "wasm") { - return "application/wasm"; - } else if (ext == "xml") { - return "application/xml"; - } else if (ext == "xhtml") { - return "application/xhtml+xml"; - } - return nullptr; -} - -inline const char *status_message(int status) { - switch (status) { - case 100: return "Continue"; - case 101: return "Switching Protocol"; - case 102: return "Processing"; - case 103: return "Early Hints"; - case 200: return "OK"; - case 201: return "Created"; - case 202: return "Accepted"; - case 203: return "Non-Authoritative Information"; - case 204: return "No Content"; - case 205: return "Reset Content"; - case 206: return "Partial Content"; - case 207: return "Multi-Status"; - case 208: return "Already Reported"; - case 226: return "IM Used"; - case 300: return "Multiple Choice"; - case 301: return "Moved Permanently"; - case 302: return "Found"; - case 303: return "See Other"; - case 304: return "Not Modified"; - case 305: return "Use Proxy"; - case 306: return "unused"; - case 307: return "Temporary Redirect"; - case 308: return "Permanent Redirect"; - case 400: return "Bad Request"; - case 401: return "Unauthorized"; - case 402: return "Payment Required"; - case 403: return "Forbidden"; - case 404: return "Not Found"; - case 405: return "Method Not Allowed"; - case 406: return "Not Acceptable"; - case 407: return "Proxy Authentication Required"; - case 408: return "Request Timeout"; - case 409: return "Conflict"; - case 410: return "Gone"; - case 411: return "Length Required"; - case 412: return "Precondition Failed"; - case 413: return "Payload Too Large"; - case 414: return "URI Too Long"; - case 415: return "Unsupported Media Type"; - case 416: return "Range Not Satisfiable"; - case 417: return "Expectation Failed"; - case 418: return "I'm a teapot"; - case 421: return "Misdirected Request"; - case 422: return "Unprocessable Entity"; - case 423: return "Locked"; - case 424: return "Failed Dependency"; - case 425: return "Too Early"; - case 426: return "Upgrade Required"; - case 428: return "Precondition Required"; - case 429: return "Too Many Requests"; - case 431: return "Request Header Fields Too Large"; - case 451: return "Unavailable For Legal Reasons"; - case 501: return "Not Implemented"; - case 502: return "Bad Gateway"; - case 503: return "Service Unavailable"; - case 504: return "Gateway Timeout"; - case 505: return "HTTP Version Not Supported"; - case 506: return "Variant Also Negotiates"; - case 507: return "Insufficient Storage"; - case 508: return "Loop Detected"; - case 510: return "Not Extended"; - case 511: return "Network Authentication Required"; - - default: - case 500: return "Internal Server Error"; - } -} - -#ifdef CPPHTTPLIB_ZLIB_SUPPORT -inline bool can_compress(const std::string &content_type) { - return !content_type.find("text/") || content_type == "image/svg+xml" || - content_type == "application/javascript" || - content_type == "application/json" || - content_type == "application/xml" || - content_type == "application/xhtml+xml"; -} - -inline bool compress(std::string &content) { - z_stream strm; - strm.zalloc = Z_NULL; - strm.zfree = Z_NULL; - strm.opaque = Z_NULL; - - auto ret = deflateInit2(&strm, Z_DEFAULT_COMPRESSION, Z_DEFLATED, 31, 8, - Z_DEFAULT_STRATEGY); - if (ret != Z_OK) { return false; } - - strm.avail_in = static_cast(content.size()); - strm.next_in = - const_cast(reinterpret_cast(content.data())); - - std::string compressed; - - std::array buff{}; - do { - strm.avail_out = buff.size(); - strm.next_out = reinterpret_cast(buff.data()); - ret = deflate(&strm, Z_FINISH); - assert(ret != Z_STREAM_ERROR); - compressed.append(buff.data(), buff.size() - strm.avail_out); - } while (strm.avail_out == 0); - - assert(ret == Z_STREAM_END); - assert(strm.avail_in == 0); - - content.swap(compressed); - - deflateEnd(&strm); - return true; -} - -class decompressor { -public: - decompressor() { - std::memset(&strm, 0, sizeof(strm)); - strm.zalloc = Z_NULL; - strm.zfree = Z_NULL; - strm.opaque = Z_NULL; - - // 15 is the value of wbits, which should be at the maximum possible value - // to ensure that any gzip stream can be decoded. The offset of 32 specifies - // that the stream type should be automatically detected either gzip or - // deflate. - is_valid_ = inflateInit2(&strm, 32 + 15) == Z_OK; - } - - ~decompressor() { inflateEnd(&strm); } - - bool is_valid() const { return is_valid_; } - - template - bool decompress(const char *data, size_t data_length, T callback) { - int ret = Z_OK; - - strm.avail_in = static_cast(data_length); - strm.next_in = const_cast(reinterpret_cast(data)); - - std::array buff{}; - do { - strm.avail_out = buff.size(); - strm.next_out = reinterpret_cast(buff.data()); - - ret = inflate(&strm, Z_NO_FLUSH); - assert(ret != Z_STREAM_ERROR); - switch (ret) { - case Z_NEED_DICT: - case Z_DATA_ERROR: - case Z_MEM_ERROR: inflateEnd(&strm); return false; - } - - if (!callback(buff.data(), buff.size() - strm.avail_out)) { - return false; - } - } while (strm.avail_out == 0); - - return ret == Z_OK || ret == Z_STREAM_END; - } - -private: - bool is_valid_; - z_stream strm; -}; -#endif - -inline bool has_header(const Headers &headers, const char *key) { - return headers.find(key) != headers.end(); -} - -inline const char *get_header_value(const Headers &headers, const char *key, - size_t id = 0, const char *def = nullptr) { - auto it = headers.find(key); - std::advance(it, static_cast(id)); - if (it != headers.end()) { return it->second.c_str(); } - return def; -} - -inline uint64_t get_header_value_uint64(const Headers &headers, const char *key, - uint64_t def = 0) { - auto it = headers.find(key); - if (it != headers.end()) { - return std::strtoull(it->second.data(), nullptr, 10); - } - return def; -} - -inline void parse_header(const char *beg, const char *end, Headers &headers) { - auto p = beg; - while (p < end && *p != ':') { - p++; - } - if (p < end) { - auto key_end = p; - p++; // skip ':' - while (p < end && (*p == ' ' || *p == '\t')) { - p++; - } - if (p < end) { - auto val_begin = p; - while (p < end) { - p++; - } - headers.emplace(std::string(beg, key_end), std::string(val_begin, end)); - } - } -} - -inline bool read_headers(Stream &strm, Headers &headers) { - const auto bufsiz = 2048; - char buf[bufsiz]; - stream_line_reader line_reader(strm, buf, bufsiz); - - for (;;) { - if (!line_reader.getline()) { return false; } - - // Check if the line ends with CRLF. - if (line_reader.end_with_crlf()) { - // Blank line indicates end of headers. - if (line_reader.size() == 2) { break; } - } else { - continue; // Skip invalid line. - } - - // Skip trailing spaces and tabs. - auto end = line_reader.ptr() + line_reader.size() - 2; - while (line_reader.ptr() < end && (end[-1] == ' ' || end[-1] == '\t')) { - end--; - } - - parse_header(line_reader.ptr(), end, headers); - } - - return true; -} - -inline bool read_content_with_length(Stream &strm, uint64_t len, - Progress progress, ContentReceiver out) { - char buf[CPPHTTPLIB_RECV_BUFSIZ]; - - uint64_t r = 0; - while (r < len) { - auto read_len = static_cast(len - r); - auto n = strm.read(buf, (std::min)(read_len, CPPHTTPLIB_RECV_BUFSIZ)); - if (n <= 0) { return false; } - - if (!out(buf, static_cast(n))) { return false; } - - r += static_cast(n); - - if (progress) { - if (!progress(r, len)) { return false; } - } - } - - return true; -} - -inline void skip_content_with_length(Stream &strm, uint64_t len) { - char buf[CPPHTTPLIB_RECV_BUFSIZ]; - uint64_t r = 0; - while (r < len) { - auto read_len = static_cast(len - r); - auto n = strm.read(buf, (std::min)(read_len, CPPHTTPLIB_RECV_BUFSIZ)); - if (n <= 0) { return; } - r += static_cast(n); - } -} - -inline bool read_content_without_length(Stream &strm, ContentReceiver out) { - char buf[CPPHTTPLIB_RECV_BUFSIZ]; - for (;;) { - auto n = strm.read(buf, CPPHTTPLIB_RECV_BUFSIZ); - if (n < 0) { - return false; - } else if (n == 0) { - return true; - } - if (!out(buf, static_cast(n))) { return false; } - } - - return true; -} - -inline bool read_content_chunked(Stream &strm, ContentReceiver out) { - const auto bufsiz = 16; - char buf[bufsiz]; - - stream_line_reader line_reader(strm, buf, bufsiz); - - if (!line_reader.getline()) { return false; } - - unsigned long chunk_len; - while (true) { - char *end_ptr; - - chunk_len = std::strtoul(line_reader.ptr(), &end_ptr, 16); - - if (end_ptr == line_reader.ptr()) { return false; } - if (chunk_len == ULONG_MAX) { return false; } - - if (chunk_len == 0) { break; } - - if (!read_content_with_length(strm, chunk_len, nullptr, out)) { - return false; - } - - if (!line_reader.getline()) { return false; } - - if (strcmp(line_reader.ptr(), "\r\n")) { break; } - - if (!line_reader.getline()) { return false; } - } - - if (chunk_len == 0) { - // Reader terminator after chunks - if (!line_reader.getline() || strcmp(line_reader.ptr(), "\r\n")) - return false; - } - - return true; -} - -inline bool is_chunked_transfer_encoding(const Headers &headers) { - return !strcasecmp(get_header_value(headers, "Transfer-Encoding", 0, ""), - "chunked"); -} - -template -bool read_content(Stream &strm, T &x, size_t payload_max_length, int &status, - Progress progress, ContentReceiver receiver, - bool decompress) { - - ContentReceiver out = [&](const char *buf, size_t n) { - return receiver(buf, n); - }; - -#ifdef CPPHTTPLIB_ZLIB_SUPPORT - decompressor decompressor; -#endif - - if (decompress) { -#ifdef CPPHTTPLIB_ZLIB_SUPPORT - std::string content_encoding = x.get_header_value("Content-Encoding"); - if (content_encoding.find("gzip") != std::string::npos || - content_encoding.find("deflate") != std::string::npos) { - if (!decompressor.is_valid()) { - status = 500; - return false; - } - - out = [&](const char *buf, size_t n) { - return decompressor.decompress(buf, n, [&](const char *buf, size_t n) { - return receiver(buf, n); - }); - }; - } -#else - if (x.get_header_value("Content-Encoding") == "gzip") { - status = 415; - return false; - } -#endif - } - - auto ret = true; - auto exceed_payload_max_length = false; - - if (is_chunked_transfer_encoding(x.headers)) { - ret = read_content_chunked(strm, out); - } else if (!has_header(x.headers, "Content-Length")) { - ret = read_content_without_length(strm, out); - } else { - auto len = get_header_value_uint64(x.headers, "Content-Length", 0); - if (len > payload_max_length) { - exceed_payload_max_length = true; - skip_content_with_length(strm, len); - ret = false; - } else if (len > 0) { - ret = read_content_with_length(strm, len, progress, out); - } - } - - if (!ret) { status = exceed_payload_max_length ? 413 : 400; } - - return ret; -} - -template -inline ssize_t write_headers(Stream &strm, const T &info, - const Headers &headers) { - ssize_t write_len = 0; - for (const auto &x : info.headers) { - if (x.first == "EXCEPTION_WHAT") { continue; } - auto len = - strm.write_format("%s: %s\r\n", x.first.c_str(), x.second.c_str()); - if (len < 0) { return len; } - write_len += len; - } - for (const auto &x : headers) { - auto len = - strm.write_format("%s: %s\r\n", x.first.c_str(), x.second.c_str()); - if (len < 0) { return len; } - write_len += len; - } - auto len = strm.write("\r\n"); - if (len < 0) { return len; } - write_len += len; - return write_len; -} - -inline bool write_data(Stream &strm, const char *d, size_t l) { - size_t offset = 0; - while (offset < l) { - auto length = strm.write(d + offset, l - offset); - if (length < 0) { return false; } - offset += static_cast(length); - } - return true; -} - -inline ssize_t write_content(Stream &strm, ContentProvider content_provider, - size_t offset, size_t length) { - size_t begin_offset = offset; - size_t end_offset = offset + length; - - auto ok = true; - - DataSink data_sink; - data_sink.write = [&](const char *d, size_t l) { - if (ok) { - offset += l; - if (!write_data(strm, d, l)) { ok = false; } - } - }; - data_sink.is_writable = [&](void) { return ok && strm.is_writable(); }; - - while (ok && offset < end_offset) { - if (!content_provider(offset, end_offset - offset, data_sink)) { - return -1; - } - if (!ok) { return -1; } - } - - return static_cast(offset - begin_offset); -} - -template -inline ssize_t write_content_chunked(Stream &strm, - ContentProvider content_provider, - T is_shutting_down) { - size_t offset = 0; - auto data_available = true; - ssize_t total_written_length = 0; - - auto ok = true; - - DataSink data_sink; - data_sink.write = [&](const char *d, size_t l) { - if (ok) { - data_available = l > 0; - offset += l; - - // Emit chunked response header and footer for each chunk - auto chunk = from_i_to_hex(l) + "\r\n" + std::string(d, l) + "\r\n"; - if (write_data(strm, chunk.data(), chunk.size())) { - total_written_length += chunk.size(); - } else { - ok = false; - } - } - }; - data_sink.done = [&](void) { - data_available = false; - if (ok) { - static const std::string done_marker("0\r\n\r\n"); - if (write_data(strm, done_marker.data(), done_marker.size())) { - total_written_length += done_marker.size(); - } else { - ok = false; - } - } - }; - data_sink.is_writable = [&](void) { return ok && strm.is_writable(); }; - - while (data_available && !is_shutting_down()) { - if (!content_provider(offset, 0, data_sink)) { return -1; } - if (!ok) { return -1; } - } - - return total_written_length; -} - -template -inline bool redirect(T &cli, const Request &req, Response &res, - const std::string &path) { - Request new_req = req; - new_req.path = path; - new_req.redirect_count -= 1; - - if (res.status == 303 && (req.method != "GET" && req.method != "HEAD")) { - new_req.method = "GET"; - new_req.body.clear(); - new_req.headers.clear(); - } - - Response new_res; - - auto ret = cli.send(new_req, new_res); - if (ret) { res = new_res; } - return ret; -} - -inline std::string encode_url(const std::string &s) { - std::string result; - - for (size_t i = 0; s[i]; i++) { - switch (s[i]) { - case ' ': result += "%20"; break; - case '+': result += "%2B"; break; - case '\r': result += "%0D"; break; - case '\n': result += "%0A"; break; - case '\'': result += "%27"; break; - case ',': result += "%2C"; break; - // case ':': result += "%3A"; break; // ok? probably... - case ';': result += "%3B"; break; - default: - auto c = static_cast(s[i]); - if (c >= 0x80) { - result += '%'; - char hex[4]; - auto len = snprintf(hex, sizeof(hex) - 1, "%02X", c); - assert(len == 2); - result.append(hex, static_cast(len)); - } else { - result += s[i]; - } - break; - } - } - - return result; -} - -inline std::string decode_url(const std::string &s, - bool convert_plus_to_space) { - std::string result; - - for (size_t i = 0; i < s.size(); i++) { - if (s[i] == '%' && i + 1 < s.size()) { - if (s[i + 1] == 'u') { - int val = 0; - if (from_hex_to_i(s, i + 2, 4, val)) { - // 4 digits Unicode codes - char buff[4]; - size_t len = to_utf8(val, buff); - if (len > 0) { result.append(buff, len); } - i += 5; // 'u0000' - } else { - result += s[i]; - } - } else { - int val = 0; - if (from_hex_to_i(s, i + 1, 2, val)) { - // 2 digits hex codes - result += static_cast(val); - i += 2; // '00' - } else { - result += s[i]; - } - } - } else if (convert_plus_to_space && s[i] == '+') { - result += ' '; - } else { - result += s[i]; - } - } - - return result; -} - -inline std::string params_to_query_str(const Params ¶ms) { - std::string query; - - for (auto it = params.begin(); it != params.end(); ++it) { - if (it != params.begin()) { query += "&"; } - query += it->first; - query += "="; - query += detail::encode_url(it->second); - } - - return query; -} - -inline void parse_query_text(const std::string &s, Params ¶ms) { - split(&s[0], &s[s.size()], '&', [&](const char *b, const char *e) { - std::string key; - std::string val; - split(b, e, '=', [&](const char *b2, const char *e2) { - if (key.empty()) { - key.assign(b2, e2); - } else { - val.assign(b2, e2); - } - }); - params.emplace(decode_url(key, true), decode_url(val, true)); - }); -} - -inline bool parse_multipart_boundary(const std::string &content_type, - std::string &boundary) { - auto pos = content_type.find("boundary="); - if (pos == std::string::npos) { return false; } - - boundary = content_type.substr(pos + 9); - return true; -} - -inline bool parse_range_header(const std::string &s, Ranges &ranges) { - static auto re_first_range = std::regex(R"(bytes=(\d*-\d*(?:,\s*\d*-\d*)*))"); - std::smatch m; - if (std::regex_match(s, m, re_first_range)) { - auto pos = static_cast(m.position(1)); - auto len = static_cast(m.length(1)); - bool all_valid_ranges = true; - split(&s[pos], &s[pos + len], ',', [&](const char *b, const char *e) { - if (!all_valid_ranges) return; - static auto re_another_range = std::regex(R"(\s*(\d*)-(\d*))"); - std::cmatch cm; - if (std::regex_match(b, e, cm, re_another_range)) { - ssize_t first = -1; - if (!cm.str(1).empty()) { - first = static_cast(std::stoll(cm.str(1))); - } - - ssize_t last = -1; - if (!cm.str(2).empty()) { - last = static_cast(std::stoll(cm.str(2))); - } - - if (first != -1 && last != -1 && first > last) { - all_valid_ranges = false; - return; - } - ranges.emplace_back(std::make_pair(first, last)); - } - }); - return all_valid_ranges; - } - return false; -} - -class MultipartFormDataParser { -public: - MultipartFormDataParser() = default; - - void set_boundary(std::string boundary) { boundary_ = std::move(boundary); } - - bool is_valid() const { return is_valid_; } - - template - bool parse(const char *buf, size_t n, T content_callback, U header_callback) { - static const std::regex re_content_type(R"(^Content-Type:\s*(.*?)\s*$)", - std::regex_constants::icase); - - static const std::regex re_content_disposition( - "^Content-Disposition:\\s*form-data;\\s*name=\"(.*?)\"(?:;\\s*filename=" - "\"(.*?)\")?\\s*$", - std::regex_constants::icase); - static const std::string dash_ = "--"; - static const std::string crlf_ = "\r\n"; - - buf_.append(buf, n); // TODO: performance improvement - - while (!buf_.empty()) { - switch (state_) { - case 0: { // Initial boundary - auto pattern = dash_ + boundary_ + crlf_; - if (pattern.size() > buf_.size()) { return true; } - auto pos = buf_.find(pattern); - if (pos != 0) { - is_done_ = true; - return false; - } - buf_.erase(0, pattern.size()); - off_ += pattern.size(); - state_ = 1; - break; - } - case 1: { // New entry - clear_file_info(); - state_ = 2; - break; - } - case 2: { // Headers - auto pos = buf_.find(crlf_); - while (pos != std::string::npos) { - // Empty line - if (pos == 0) { - if (!header_callback(file_)) { - is_valid_ = false; - is_done_ = false; - return false; - } - buf_.erase(0, crlf_.size()); - off_ += crlf_.size(); - state_ = 3; - break; - } - - auto header = buf_.substr(0, pos); - { - std::smatch m; - if (std::regex_match(header, m, re_content_type)) { - file_.content_type = m[1]; - } else if (std::regex_match(header, m, re_content_disposition)) { - file_.name = m[1]; - file_.filename = m[2]; - } - } - - buf_.erase(0, pos + crlf_.size()); - off_ += pos + crlf_.size(); - pos = buf_.find(crlf_); - } - break; - } - case 3: { // Body - { - auto pattern = crlf_ + dash_; - if (pattern.size() > buf_.size()) { return true; } - - auto pos = buf_.find(pattern); - if (pos == std::string::npos) { pos = buf_.size(); } - if (!content_callback(buf_.data(), pos)) { - is_valid_ = false; - is_done_ = false; - return false; - } - - off_ += pos; - buf_.erase(0, pos); - } - - { - auto pattern = crlf_ + dash_ + boundary_; - if (pattern.size() > buf_.size()) { return true; } - - auto pos = buf_.find(pattern); - if (pos != std::string::npos) { - if (!content_callback(buf_.data(), pos)) { - is_valid_ = false; - is_done_ = false; - return false; - } - - off_ += pos + pattern.size(); - buf_.erase(0, pos + pattern.size()); - state_ = 4; - } else { - if (!content_callback(buf_.data(), pattern.size())) { - is_valid_ = false; - is_done_ = false; - return false; - } - - off_ += pattern.size(); - buf_.erase(0, pattern.size()); - } - } - break; - } - case 4: { // Boundary - if (crlf_.size() > buf_.size()) { return true; } - if (buf_.find(crlf_) == 0) { - buf_.erase(0, crlf_.size()); - off_ += crlf_.size(); - state_ = 1; - } else { - auto pattern = dash_ + crlf_; - if (pattern.size() > buf_.size()) { return true; } - if (buf_.find(pattern) == 0) { - buf_.erase(0, pattern.size()); - off_ += pattern.size(); - is_valid_ = true; - state_ = 5; - } else { - is_done_ = true; - return true; - } - } - break; - } - case 5: { // Done - is_valid_ = false; - return false; - } - } - } - - return true; - } - -private: - void clear_file_info() { - file_.name.clear(); - file_.filename.clear(); - file_.content_type.clear(); - } - - std::string boundary_; - - std::string buf_; - size_t state_ = 0; - size_t is_valid_ = false; - size_t is_done_ = false; - size_t off_ = 0; - MultipartFormData file_; -}; - -inline std::string to_lower(const char *beg, const char *end) { - std::string out; - auto it = beg; - while (it != end) { - out += static_cast(::tolower(*it)); - it++; - } - return out; -} - -inline std::string make_multipart_data_boundary() { - static const char data[] = - "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; - - std::random_device seed_gen; - std::mt19937 engine(seed_gen()); - - std::string result = "--cpp-httplib-multipart-data-"; - - for (auto i = 0; i < 16; i++) { - result += data[engine() % (sizeof(data) - 1)]; - } - - return result; -} - -inline std::pair -get_range_offset_and_length(const Request &req, size_t content_length, - size_t index) { - auto r = req.ranges[index]; - - if (r.first == -1 && r.second == -1) { - return std::make_pair(0, content_length); - } - - auto slen = static_cast(content_length); - - if (r.first == -1) { - r.first = slen - r.second; - r.second = slen - 1; - } - - if (r.second == -1) { r.second = slen - 1; } - - return std::make_pair(r.first, r.second - r.first + 1); -} - -inline std::string make_content_range_header_field(size_t offset, size_t length, - size_t content_length) { - std::string field = "bytes "; - field += std::to_string(offset); - field += "-"; - field += std::to_string(offset + length - 1); - field += "/"; - field += std::to_string(content_length); - return field; -} - -template -bool process_multipart_ranges_data(const Request &req, Response &res, - const std::string &boundary, - const std::string &content_type, - SToken stoken, CToken ctoken, - Content content) { - for (size_t i = 0; i < req.ranges.size(); i++) { - ctoken("--"); - stoken(boundary); - ctoken("\r\n"); - if (!content_type.empty()) { - ctoken("Content-Type: "); - stoken(content_type); - ctoken("\r\n"); - } - - auto offsets = get_range_offset_and_length(req, res.body.size(), i); - auto offset = offsets.first; - auto length = offsets.second; - - ctoken("Content-Range: "); - stoken(make_content_range_header_field(offset, length, res.body.size())); - ctoken("\r\n"); - ctoken("\r\n"); - if (!content(offset, length)) { return false; } - ctoken("\r\n"); - } - - ctoken("--"); - stoken(boundary); - ctoken("--\r\n"); - - return true; -} - -inline std::string make_multipart_ranges_data(const Request &req, Response &res, - const std::string &boundary, - const std::string &content_type) { - std::string data; - - process_multipart_ranges_data( - req, res, boundary, content_type, - [&](const std::string &token) { data += token; }, - [&](const char *token) { data += token; }, - [&](size_t offset, size_t length) { - data += res.body.substr(offset, length); - return true; - }); - - return data; -} - -inline size_t -get_multipart_ranges_data_length(const Request &req, Response &res, - const std::string &boundary, - const std::string &content_type) { - size_t data_length = 0; - - process_multipart_ranges_data( - req, res, boundary, content_type, - [&](const std::string &token) { data_length += token.size(); }, - [&](const char *token) { data_length += strlen(token); }, - [&](size_t /*offset*/, size_t length) { - data_length += length; - return true; - }); - - return data_length; -} - -inline bool write_multipart_ranges_data(Stream &strm, const Request &req, - Response &res, - const std::string &boundary, - const std::string &content_type) { - return process_multipart_ranges_data( - req, res, boundary, content_type, - [&](const std::string &token) { strm.write(token); }, - [&](const char *token) { strm.write(token); }, - [&](size_t offset, size_t length) { - return write_content(strm, res.content_provider_, offset, length) >= 0; - }); -} - -inline std::pair -get_range_offset_and_length(const Request &req, const Response &res, - size_t index) { - auto r = req.ranges[index]; - - if (r.second == -1) { - r.second = static_cast(res.content_length_) - 1; - } - - return std::make_pair(r.first, r.second - r.first + 1); -} - -inline bool expect_content(const Request &req) { - if (req.method == "POST" || req.method == "PUT" || req.method == "PATCH" || - req.method == "PRI" || - (req.method == "DELETE" && req.has_header("Content-Length"))) { - return true; - } - // TODO: check if Content-Length is set - return false; -} - -inline bool has_crlf(const char *s) { - auto p = s; - while (*p) { - if (*p == '\r' || *p == '\n') { return true; } - p++; - } - return false; -} - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT -template -inline std::string message_digest(const std::string &s, Init init, - Update update, Final final, - size_t digest_length) { - using namespace std; - - std::vector md(digest_length, 0); - CTX ctx; - init(&ctx); - update(&ctx, s.data(), s.size()); - final(md.data(), &ctx); - - stringstream ss; - for (auto c : md) { - ss << setfill('0') << setw(2) << hex << (unsigned int)c; - } - return ss.str(); -} - -inline std::string MD5(const std::string &s) { - return message_digest(s, MD5_Init, MD5_Update, MD5_Final, - MD5_DIGEST_LENGTH); -} - -inline std::string SHA_256(const std::string &s) { - return message_digest(s, SHA256_Init, SHA256_Update, SHA256_Final, - SHA256_DIGEST_LENGTH); -} - -inline std::string SHA_512(const std::string &s) { - return message_digest(s, SHA512_Init, SHA512_Update, SHA512_Final, - SHA512_DIGEST_LENGTH); -} -#endif - -#ifdef _WIN32 -class WSInit { -public: - WSInit() { - WSADATA wsaData; - WSAStartup(0x0002, &wsaData); - } - - ~WSInit() { WSACleanup(); } -}; - -static WSInit wsinit_; -#endif - -} // namespace detail - -// Header utilities -inline std::pair make_range_header(Ranges ranges) { - std::string field = "bytes="; - auto i = 0; - for (auto r : ranges) { - if (i != 0) { field += ", "; } - if (r.first != -1) { field += std::to_string(r.first); } - field += '-'; - if (r.second != -1) { field += std::to_string(r.second); } - i++; - } - return std::make_pair("Range", field); -} - -inline std::pair -make_basic_authentication_header(const std::string &username, - const std::string &password, - bool is_proxy = false) { - auto field = "Basic " + detail::base64_encode(username + ":" + password); - auto key = is_proxy ? "Proxy-Authorization" : "Authorization"; - return std::make_pair(key, field); -} - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT -inline std::pair make_digest_authentication_header( - const Request &req, const std::map &auth, - size_t cnonce_count, const std::string &cnonce, const std::string &username, - const std::string &password, bool is_proxy = false) { - using namespace std; - - string nc; - { - stringstream ss; - ss << setfill('0') << setw(8) << hex << cnonce_count; - nc = ss.str(); - } - - auto qop = auth.at("qop"); - if (qop.find("auth-int") != std::string::npos) { - qop = "auth-int"; - } else { - qop = "auth"; - } - - std::string algo = "MD5"; - if (auth.find("algorithm") != auth.end()) { algo = auth.at("algorithm"); } - - string response; - { - auto H = algo == "SHA-256" - ? detail::SHA_256 - : algo == "SHA-512" ? detail::SHA_512 : detail::MD5; - - auto A1 = username + ":" + auth.at("realm") + ":" + password; - - auto A2 = req.method + ":" + req.path; - if (qop == "auth-int") { A2 += ":" + H(req.body); } - - response = H(H(A1) + ":" + auth.at("nonce") + ":" + nc + ":" + cnonce + - ":" + qop + ":" + H(A2)); - } - - auto field = "Digest username=\"" + username + "\", realm=\"" + - auth.at("realm") + "\", nonce=\"" + auth.at("nonce") + - "\", uri=\"" + req.path + "\", algorithm=" + algo + - ", qop=" + qop + ", nc=\"" + nc + "\", cnonce=\"" + cnonce + - "\", response=\"" + response + "\""; - - auto key = is_proxy ? "Proxy-Authorization" : "Authorization"; - return std::make_pair(key, field); -} -#endif - -inline bool parse_www_authenticate(const httplib::Response &res, - std::map &auth, - bool is_proxy) { - auto auth_key = is_proxy ? "Proxy-Authenticate" : "WWW-Authenticate"; - if (res.has_header(auth_key)) { - static auto re = std::regex(R"~((?:(?:,\s*)?(.+?)=(?:"(.*?)"|([^,]*))))~"); - auto s = res.get_header_value(auth_key); - auto pos = s.find(' '); - if (pos != std::string::npos) { - auto type = s.substr(0, pos); - if (type == "Basic") { - return false; - } else if (type == "Digest") { - s = s.substr(pos + 1); - auto beg = std::sregex_iterator(s.begin(), s.end(), re); - for (auto i = beg; i != std::sregex_iterator(); ++i) { - auto m = *i; - auto key = s.substr(static_cast(m.position(1)), - static_cast(m.length(1))); - auto val = m.length(2) > 0 - ? s.substr(static_cast(m.position(2)), - static_cast(m.length(2))) - : s.substr(static_cast(m.position(3)), - static_cast(m.length(3))); - auth[key] = val; - } - return true; - } - } - } - return false; -} - -// https://stackoverflow.com/questions/440133/how-do-i-create-a-random-alpha-numeric-string-in-c/440240#answer-440240 -inline std::string random_string(size_t length) { - auto randchar = []() -> char { - const char charset[] = "0123456789" - "ABCDEFGHIJKLMNOPQRSTUVWXYZ" - "abcdefghijklmnopqrstuvwxyz"; - const size_t max_index = (sizeof(charset) - 1); - return charset[static_cast(rand()) % max_index]; - }; - std::string str(length, 0); - std::generate_n(str.begin(), length, randchar); - return str; -} - -// Request implementation -inline bool Request::has_header(const char *key) const { - return detail::has_header(headers, key); -} - -inline std::string Request::get_header_value(const char *key, size_t id) const { - return detail::get_header_value(headers, key, id, ""); -} - -inline size_t Request::get_header_value_count(const char *key) const { - auto r = headers.equal_range(key); - return static_cast(std::distance(r.first, r.second)); -} - -inline void Request::set_header(const char *key, const char *val) { - if (!detail::has_crlf(key) && !detail::has_crlf(val)) { - headers.emplace(key, val); - } -} - -inline void Request::set_header(const char *key, const std::string &val) { - if (!detail::has_crlf(key) && !detail::has_crlf(val.c_str())) { - headers.emplace(key, val); - } -} - -inline bool Request::has_param(const char *key) const { - return params.find(key) != params.end(); -} - -inline std::string Request::get_param_value(const char *key, size_t id) const { - auto it = params.find(key); - std::advance(it, static_cast(id)); - if (it != params.end()) { return it->second; } - return std::string(); -} - -inline size_t Request::get_param_value_count(const char *key) const { - auto r = params.equal_range(key); - return static_cast(std::distance(r.first, r.second)); -} - -inline bool Request::is_multipart_form_data() const { - const auto &content_type = get_header_value("Content-Type"); - return !content_type.find("multipart/form-data"); -} - -inline bool Request::has_file(const char *key) const { - return files.find(key) != files.end(); -} - -inline MultipartFormData Request::get_file_value(const char *key) const { - auto it = files.find(key); - if (it != files.end()) { return it->second; } - return MultipartFormData(); -} - -// Response implementation -inline bool Response::has_header(const char *key) const { - return headers.find(key) != headers.end(); -} - -inline std::string Response::get_header_value(const char *key, - size_t id) const { - return detail::get_header_value(headers, key, id, ""); -} - -inline size_t Response::get_header_value_count(const char *key) const { - auto r = headers.equal_range(key); - return static_cast(std::distance(r.first, r.second)); -} - -inline void Response::set_header(const char *key, const char *val) { - if (!detail::has_crlf(key) && !detail::has_crlf(val)) { - headers.emplace(key, val); - } -} - -inline void Response::set_header(const char *key, const std::string &val) { - if (!detail::has_crlf(key) && !detail::has_crlf(val.c_str())) { - headers.emplace(key, val); - } -} - -inline void Response::set_redirect(const char *url, int stat) { - if (!detail::has_crlf(url)) { - set_header("Location", url); - if (300 <= stat && stat < 400) { - this->status = stat; - } else { - this->status = 302; - } - } -} - -inline void Response::set_content(const char *s, size_t n, - const char *content_type) { - body.assign(s, n); - set_header("Content-Type", content_type); -} - -inline void Response::set_content(std::string s, const char *content_type) { - body = std::move(s); - set_header("Content-Type", content_type); -} - -inline void -Response::set_content_provider(size_t in_length, ContentProvider provider, - std::function resource_releaser) { - assert(in_length > 0); - content_length_ = in_length; - content_provider_ = [provider](size_t offset, size_t length, DataSink &sink) { - return provider(offset, length, sink); - }; - content_provider_resource_releaser_ = resource_releaser; -} - -inline void Response::set_chunked_content_provider( - ChunkedContentProvider provider, std::function resource_releaser) { - content_length_ = 0; - content_provider_ = [provider](size_t offset, size_t, DataSink &sink) { - return provider(offset, sink); - }; - content_provider_resource_releaser_ = resource_releaser; -} - -// Rstream implementation -inline ssize_t Stream::write(const char *ptr) { - return write(ptr, strlen(ptr)); -} - -inline ssize_t Stream::write(const std::string &s) { - return write(s.data(), s.size()); -} - -template -inline ssize_t Stream::write_format(const char *fmt, const Args &... args) { - std::array buf; - -#if defined(_MSC_VER) && _MSC_VER < 1900 - auto sn = _snprintf_s(buf, bufsiz, buf.size() - 1, fmt, args...); -#else - auto sn = snprintf(buf.data(), buf.size() - 1, fmt, args...); -#endif - if (sn <= 0) { return sn; } - - auto n = static_cast(sn); - - if (n >= buf.size() - 1) { - std::vector glowable_buf(buf.size()); - - while (n >= glowable_buf.size() - 1) { - glowable_buf.resize(glowable_buf.size() * 2); -#if defined(_MSC_VER) && _MSC_VER < 1900 - n = static_cast(_snprintf_s(&glowable_buf[0], glowable_buf.size(), - glowable_buf.size() - 1, fmt, - args...)); -#else - n = static_cast( - snprintf(&glowable_buf[0], glowable_buf.size() - 1, fmt, args...)); -#endif - } - return write(&glowable_buf[0], n); - } else { - return write(buf.data(), n); - } -} - -namespace detail { - -// Socket stream implementation -inline SocketStream::SocketStream(socket_t sock, time_t read_timeout_sec, - time_t read_timeout_usec, - time_t write_timeout_sec, - time_t write_timeout_usec) - : sock_(sock), read_timeout_sec_(read_timeout_sec), - read_timeout_usec_(read_timeout_usec), - write_timeout_sec_(write_timeout_sec), - write_timeout_usec_(write_timeout_usec) {} - -inline SocketStream::~SocketStream() {} - -inline bool SocketStream::is_readable() const { - return select_read(sock_, read_timeout_sec_, read_timeout_usec_) > 0; -} - -inline bool SocketStream::is_writable() const { - return select_write(sock_, write_timeout_sec_, write_timeout_usec_) > 0; -} - -inline ssize_t SocketStream::read(char *ptr, size_t size) { - if (!is_readable()) { return -1; } - -#ifdef _WIN32 - if (size > static_cast((std::numeric_limits::max)())) { - return -1; - } - return recv(sock_, ptr, static_cast(size), 0); -#else - return handle_EINTR([&]() { return recv(sock_, ptr, size, 0); }); -#endif -} - -inline ssize_t SocketStream::write(const char *ptr, size_t size) { - if (!is_writable()) { return -1; } - -#ifdef _WIN32 - if (size > static_cast((std::numeric_limits::max)())) { - return -1; - } - return send(sock_, ptr, static_cast(size), 0); -#else - return handle_EINTR([&]() { return send(sock_, ptr, size, 0); }); -#endif -} - -inline void SocketStream::get_remote_ip_and_port(std::string &ip, - int &port) const { - return detail::get_remote_ip_and_port(sock_, ip, port); -} - -// Buffer stream implementation -inline bool BufferStream::is_readable() const { return true; } - -inline bool BufferStream::is_writable() const { return true; } - -inline ssize_t BufferStream::read(char *ptr, size_t size) { -#if defined(_MSC_VER) && _MSC_VER < 1900 - auto len_read = buffer._Copy_s(ptr, size, size, position); -#else - auto len_read = buffer.copy(ptr, size, position); -#endif - position += static_cast(len_read); - return static_cast(len_read); -} - -inline ssize_t BufferStream::write(const char *ptr, size_t size) { - buffer.append(ptr, size); - return static_cast(size); -} - -inline void BufferStream::get_remote_ip_and_port(std::string & /*ip*/, - int & /*port*/) const {} - -inline const std::string &BufferStream::get_buffer() const { return buffer; } - -} // namespace detail - -// HTTP server implementation -inline Server::Server() : is_running_(false), svr_sock_(INVALID_SOCKET) { -#ifndef _WIN32 - signal(SIGPIPE, SIG_IGN); -#endif - new_task_queue = [] { return new ThreadPool(CPPHTTPLIB_THREAD_POOL_COUNT); }; -} - -inline Server::~Server() {} - -inline Server &Server::Get(const char *pattern, Handler handler) { - get_handlers_.push_back(std::make_pair(std::regex(pattern), handler)); - return *this; -} - -inline Server &Server::Post(const char *pattern, Handler handler) { - post_handlers_.push_back(std::make_pair(std::regex(pattern), handler)); - return *this; -} - -inline Server &Server::Post(const char *pattern, - HandlerWithContentReader handler) { - post_handlers_for_content_reader_.push_back( - std::make_pair(std::regex(pattern), handler)); - return *this; -} - -inline Server &Server::Put(const char *pattern, Handler handler) { - put_handlers_.push_back(std::make_pair(std::regex(pattern), handler)); - return *this; -} - -inline Server &Server::Put(const char *pattern, - HandlerWithContentReader handler) { - put_handlers_for_content_reader_.push_back( - std::make_pair(std::regex(pattern), handler)); - return *this; -} - -inline Server &Server::Patch(const char *pattern, Handler handler) { - patch_handlers_.push_back(std::make_pair(std::regex(pattern), handler)); - return *this; -} - -inline Server &Server::Patch(const char *pattern, - HandlerWithContentReader handler) { - patch_handlers_for_content_reader_.push_back( - std::make_pair(std::regex(pattern), handler)); - return *this; -} - -inline Server &Server::Delete(const char *pattern, Handler handler) { - delete_handlers_.push_back(std::make_pair(std::regex(pattern), handler)); - return *this; -} - -inline Server &Server::Delete(const char *pattern, - HandlerWithContentReader handler) { - delete_handlers_for_content_reader_.push_back( - std::make_pair(std::regex(pattern), handler)); - return *this; -} - -inline Server &Server::Options(const char *pattern, Handler handler) { - options_handlers_.push_back(std::make_pair(std::regex(pattern), handler)); - return *this; -} - -inline bool Server::set_base_dir(const char *dir, const char *mount_point) { - return set_mount_point(mount_point, dir); -} - -inline bool Server::set_mount_point(const char *mount_point, const char *dir) { - if (detail::is_dir(dir)) { - std::string mnt = mount_point ? mount_point : "/"; - if (!mnt.empty() && mnt[0] == '/') { - base_dirs_.emplace_back(mnt, dir); - return true; - } - } - return false; -} - -inline bool Server::remove_mount_point(const char *mount_point) { - for (auto it = base_dirs_.begin(); it != base_dirs_.end(); ++it) { - if (it->first == mount_point) { - base_dirs_.erase(it); - return true; - } - } - return false; -} - -inline void Server::set_file_extension_and_mimetype_mapping(const char *ext, - const char *mime) { - file_extension_and_mimetype_map_[ext] = mime; -} - -inline void Server::set_file_request_handler(Handler handler) { - file_request_handler_ = std::move(handler); -} - -inline void Server::set_error_handler(Handler handler) { - error_handler_ = std::move(handler); -} - -inline void Server::set_logger(Logger logger) { logger_ = std::move(logger); } - -inline void -Server::set_expect_100_continue_handler(Expect100ContinueHandler handler) { - expect_100_continue_handler_ = std::move(handler); -} - -inline void Server::set_keep_alive_max_count(size_t count) { - keep_alive_max_count_ = count; -} - -inline void Server::set_read_timeout(time_t sec, time_t usec) { - read_timeout_sec_ = sec; - read_timeout_usec_ = usec; -} - -inline void Server::set_write_timeout(time_t sec, time_t usec) { - write_timeout_sec_ = sec; - write_timeout_usec_ = usec; -} - -inline void Server::set_idle_interval(time_t sec, time_t usec) { - idle_interval_sec_ = sec; - idle_interval_usec_ = usec; -} - -inline void Server::set_payload_max_length(size_t length) { - payload_max_length_ = length; -} - -inline bool Server::bind_to_port(const char *host, int port, int socket_flags) { - if (bind_internal(host, port, socket_flags) < 0) return false; - return true; -} -inline int Server::bind_to_any_port(const char *host, int socket_flags) { - return bind_internal(host, 0, socket_flags); -} - -inline bool Server::listen_after_bind() { return listen_internal(); } - -inline bool Server::listen(const char *host, int port, int socket_flags) { - return bind_to_port(host, port, socket_flags) && listen_internal(); -} - -inline bool Server::is_running() const { return is_running_; } - -inline void Server::stop() { - if (is_running_) { - assert(svr_sock_ != INVALID_SOCKET); - std::atomic sock(svr_sock_.exchange(INVALID_SOCKET)); - detail::shutdown_socket(sock); - detail::close_socket(sock); - } -} - -inline bool Server::parse_request_line(const char *s, Request &req) { - const static std::regex re( - "(GET|HEAD|POST|PUT|DELETE|CONNECT|OPTIONS|TRACE|PATCH|PRI) " - "(([^?]+)(?:\\?(.*?))?) (HTTP/1\\.[01])\r\n"); - - std::cmatch m; - if (std::regex_match(s, m, re)) { - req.version = std::string(m[5]); - req.method = std::string(m[1]); - req.target = std::string(m[2]); - req.path = detail::decode_url(m[3], false); - - // Parse query text - auto len = std::distance(m[4].first, m[4].second); - if (len > 0) { detail::parse_query_text(m[4], req.params); } - - return true; - } - - return false; -} - -inline bool Server::write_response(Stream &strm, bool last_connection, - const Request &req, Response &res) { - assert(res.status != -1); - - if (400 <= res.status && error_handler_) { error_handler_(req, res); } - - detail::BufferStream bstrm; - - // Response line - if (!bstrm.write_format("HTTP/1.1 %d %s\r\n", res.status, - detail::status_message(res.status))) { - return false; - } - - // Headers - if (last_connection || req.get_header_value("Connection") == "close") { - res.set_header("Connection", "close"); - } - - if (!last_connection && req.get_header_value("Connection") == "Keep-Alive") { - res.set_header("Connection", "Keep-Alive"); - } - - if (!res.has_header("Content-Type") && - (!res.body.empty() || res.content_length_ > 0)) { - res.set_header("Content-Type", "text/plain"); - } - - if (!res.has_header("Accept-Ranges") && req.method == "HEAD") { - res.set_header("Accept-Ranges", "bytes"); - } - - std::string content_type; - std::string boundary; - - if (req.ranges.size() > 1) { - boundary = detail::make_multipart_data_boundary(); - - auto it = res.headers.find("Content-Type"); - if (it != res.headers.end()) { - content_type = it->second; - res.headers.erase(it); - } - - res.headers.emplace("Content-Type", - "multipart/byteranges; boundary=" + boundary); - } - - if (res.body.empty()) { - if (res.content_length_ > 0) { - size_t length = 0; - if (req.ranges.empty()) { - length = res.content_length_; - } else if (req.ranges.size() == 1) { - auto offsets = - detail::get_range_offset_and_length(req, res.content_length_, 0); - auto offset = offsets.first; - length = offsets.second; - auto content_range = detail::make_content_range_header_field( - offset, length, res.content_length_); - res.set_header("Content-Range", content_range); - } else { - length = detail::get_multipart_ranges_data_length(req, res, boundary, - content_type); - } - res.set_header("Content-Length", std::to_string(length)); - } else { - if (res.content_provider_) { - res.set_header("Transfer-Encoding", "chunked"); - } else { - res.set_header("Content-Length", "0"); - } - } - } else { - if (req.ranges.empty()) { - ; - } else if (req.ranges.size() == 1) { - auto offsets = - detail::get_range_offset_and_length(req, res.body.size(), 0); - auto offset = offsets.first; - auto length = offsets.second; - auto content_range = detail::make_content_range_header_field( - offset, length, res.body.size()); - res.set_header("Content-Range", content_range); - res.body = res.body.substr(offset, length); - } else { - res.body = - detail::make_multipart_ranges_data(req, res, boundary, content_type); - } - -#ifdef CPPHTTPLIB_ZLIB_SUPPORT - // TODO: 'Accept-Encoding' has gzip, not gzip;q=0 - const auto &encodings = req.get_header_value("Accept-Encoding"); - if (encodings.find("gzip") != std::string::npos && - detail::can_compress(res.get_header_value("Content-Type"))) { - if (detail::compress(res.body)) { - res.set_header("Content-Encoding", "gzip"); - } - } -#endif - - auto length = std::to_string(res.body.size()); - res.set_header("Content-Length", length); - } - - if (!detail::write_headers(bstrm, res, Headers())) { return false; } - - // Flush buffer - auto &data = bstrm.get_buffer(); - strm.write(data.data(), data.size()); - - // Body - if (req.method != "HEAD") { - if (!res.body.empty()) { - if (!strm.write(res.body)) { return false; } - } else if (res.content_provider_) { - if (!write_content_with_provider(strm, req, res, boundary, - content_type)) { - return false; - } - } - } - - // Log - if (logger_) { logger_(req, res); } - - return true; -} - -inline bool -Server::write_content_with_provider(Stream &strm, const Request &req, - Response &res, const std::string &boundary, - const std::string &content_type) { - if (res.content_length_) { - if (req.ranges.empty()) { - if (detail::write_content(strm, res.content_provider_, 0, - res.content_length_) < 0) { - return false; - } - } else if (req.ranges.size() == 1) { - auto offsets = - detail::get_range_offset_and_length(req, res.content_length_, 0); - auto offset = offsets.first; - auto length = offsets.second; - if (detail::write_content(strm, res.content_provider_, offset, length) < - 0) { - return false; - } - } else { - if (!detail::write_multipart_ranges_data(strm, req, res, boundary, - content_type)) { - return false; - } - } - } else { - auto is_shutting_down = [this]() { - return this->svr_sock_ == INVALID_SOCKET; - }; - if (detail::write_content_chunked(strm, res.content_provider_, - is_shutting_down) < 0) { - return false; - } - } - return true; -} - -inline bool Server::read_content(Stream &strm, Request &req, Response &res) { - MultipartFormDataMap::iterator cur; - if (read_content_core( - strm, req, res, - // Regular - [&](const char *buf, size_t n) { - if (req.body.size() + n > req.body.max_size()) { return false; } - req.body.append(buf, n); - return true; - }, - // Multipart - [&](const MultipartFormData &file) { - cur = req.files.emplace(file.name, file); - return true; - }, - [&](const char *buf, size_t n) { - auto &content = cur->second.content; - if (content.size() + n > content.max_size()) { return false; } - content.append(buf, n); - return true; - })) { - const auto &content_type = req.get_header_value("Content-Type"); - if (!content_type.find("application/x-www-form-urlencoded")) { - detail::parse_query_text(req.body, req.params); - } - return true; - } - return false; -} - -inline bool Server::read_content_with_content_receiver( - Stream &strm, Request &req, Response &res, ContentReceiver receiver, - MultipartContentHeader multipart_header, - ContentReceiver multipart_receiver) { - return read_content_core(strm, req, res, receiver, multipart_header, - multipart_receiver); -} - -inline bool Server::read_content_core(Stream &strm, Request &req, Response &res, - ContentReceiver receiver, - MultipartContentHeader mulitpart_header, - ContentReceiver multipart_receiver) { - detail::MultipartFormDataParser multipart_form_data_parser; - ContentReceiver out; - - if (req.is_multipart_form_data()) { - const auto &content_type = req.get_header_value("Content-Type"); - std::string boundary; - if (!detail::parse_multipart_boundary(content_type, boundary)) { - res.status = 400; - return false; - } - - multipart_form_data_parser.set_boundary(std::move(boundary)); - out = [&](const char *buf, size_t n) { - return multipart_form_data_parser.parse(buf, n, multipart_receiver, - mulitpart_header); - }; - } else { - out = receiver; - } - - if (!detail::read_content(strm, req, payload_max_length_, res.status, - Progress(), out, true)) { - return false; - } - - if (req.is_multipart_form_data()) { - if (!multipart_form_data_parser.is_valid()) { - res.status = 400; - return false; - } - } - - return true; -} - -inline bool Server::handle_file_request(Request &req, Response &res, - bool head) { - for (const auto &kv : base_dirs_) { - const auto &mount_point = kv.first; - const auto &base_dir = kv.second; - // Prefix match - if (!req.path.find(mount_point)) { - std::string sub_path = "/" + req.path.substr(mount_point.size()); - if (detail::is_valid_path(sub_path)) { - auto path = base_dir + sub_path; - if (path.back() == '/') { path += "index.html"; } - - if (detail::is_file(path)) { - detail::read_file(path, res.body); - auto type = - detail::find_content_type(path, file_extension_and_mimetype_map_); - if (type) { res.set_header("Content-Type", type); } - res.status = 200; - if (!head && file_request_handler_) { - file_request_handler_(req, res); - } - return true; - } - } - } - } - return false; -} - -inline socket_t Server::create_server_socket(const char *host, int port, - int socket_flags) const { - return detail::create_socket( - host, port, - [](socket_t sock, struct addrinfo &ai) -> bool { - if (::bind(sock, ai.ai_addr, static_cast(ai.ai_addrlen))) { - return false; - } - if (::listen(sock, 5)) { // Listen through 5 channels - return false; - } - return true; - }, - socket_flags); -} - -inline int Server::bind_internal(const char *host, int port, int socket_flags) { - if (!is_valid()) { return -1; } - - svr_sock_ = create_server_socket(host, port, socket_flags); - if (svr_sock_ == INVALID_SOCKET) { return -1; } - - if (port == 0) { - struct sockaddr_storage addr; - socklen_t addr_len = sizeof(addr); - if (getsockname(svr_sock_, reinterpret_cast(&addr), - &addr_len) == -1) { - return -1; - } - if (addr.ss_family == AF_INET) { - return ntohs(reinterpret_cast(&addr)->sin_port); - } else if (addr.ss_family == AF_INET6) { - return ntohs(reinterpret_cast(&addr)->sin6_port); - } else { - return -1; - } - } else { - return port; - } -} - -inline bool Server::listen_internal() { - auto ret = true; - is_running_ = true; - - { - std::unique_ptr task_queue(new_task_queue()); - - while (svr_sock_ != INVALID_SOCKET) { -#ifndef _WIN32 - if (idle_interval_sec_ > 0 || idle_interval_usec_ > 0) { -#endif - auto val = detail::select_read(svr_sock_, idle_interval_sec_, - idle_interval_usec_); - if (val == 0) { // Timeout - task_queue->on_idle(); - continue; - } -#ifndef _WIN32 - } -#endif - socket_t sock = accept(svr_sock_, nullptr, nullptr); - - if (sock == INVALID_SOCKET) { - if (errno == EMFILE) { - // The per-process limit of open file descriptors has been reached. - // Try to accept new connections after a short sleep. - std::this_thread::sleep_for(std::chrono::milliseconds(1)); - continue; - } - if (svr_sock_ != INVALID_SOCKET) { - detail::close_socket(svr_sock_); - ret = false; - } else { - ; // The server socket was closed by user. - } - break; - } - -#if __cplusplus > 201703L - task_queue->enqueue([=, this]() { process_and_close_socket(sock); }); -#else - task_queue->enqueue([=]() { process_and_close_socket(sock); }); -#endif - } - - task_queue->shutdown(); - } - - is_running_ = false; - return ret; -} - -inline bool Server::routing(Request &req, Response &res, Stream &strm) { - // File handler - bool is_head_request = req.method == "HEAD"; - if ((req.method == "GET" || is_head_request) && - handle_file_request(req, res, is_head_request)) { - return true; - } - - if (detail::expect_content(req)) { - // Content reader handler - { - ContentReader reader( - [&](ContentReceiver receiver) { - return read_content_with_content_receiver(strm, req, res, receiver, - nullptr, nullptr); - }, - [&](MultipartContentHeader header, ContentReceiver receiver) { - return read_content_with_content_receiver(strm, req, res, nullptr, - header, receiver); - }); - - if (req.method == "POST") { - if (dispatch_request_for_content_reader( - req, res, reader, post_handlers_for_content_reader_)) { - return true; - } - } else if (req.method == "PUT") { - if (dispatch_request_for_content_reader( - req, res, reader, put_handlers_for_content_reader_)) { - return true; - } - } else if (req.method == "PATCH") { - if (dispatch_request_for_content_reader( - req, res, reader, patch_handlers_for_content_reader_)) { - return true; - } - } else if (req.method == "DELETE") { - if (dispatch_request_for_content_reader( - req, res, reader, delete_handlers_for_content_reader_)) { - return true; - } - } - } - - // Read content into `req.body` - if (!read_content(strm, req, res)) { return false; } - } - - // Regular handler - if (req.method == "GET" || req.method == "HEAD") { - return dispatch_request(req, res, get_handlers_); - } else if (req.method == "POST") { - return dispatch_request(req, res, post_handlers_); - } else if (req.method == "PUT") { - return dispatch_request(req, res, put_handlers_); - } else if (req.method == "DELETE") { - return dispatch_request(req, res, delete_handlers_); - } else if (req.method == "OPTIONS") { - return dispatch_request(req, res, options_handlers_); - } else if (req.method == "PATCH") { - return dispatch_request(req, res, patch_handlers_); - } - - res.status = 400; - return false; -} - -inline bool Server::dispatch_request(Request &req, Response &res, - Handlers &handlers) { - - try { - for (const auto &x : handlers) { - const auto &pattern = x.first; - const auto &handler = x.second; - - if (std::regex_match(req.path, req.matches, pattern)) { - handler(req, res); - return true; - } - } - } catch (const std::exception &ex) { - res.status = 500; - res.set_header("EXCEPTION_WHAT", ex.what()); - } catch (...) { - res.status = 500; - res.set_header("EXCEPTION_WHAT", "UNKNOWN"); - } - return false; -} - -inline bool Server::dispatch_request_for_content_reader( - Request &req, Response &res, ContentReader content_reader, - HandlersForContentReader &handlers) { - for (const auto &x : handlers) { - const auto &pattern = x.first; - const auto &handler = x.second; - - if (std::regex_match(req.path, req.matches, pattern)) { - handler(req, res, content_reader); - return true; - } - } - return false; -} - -inline bool -Server::process_request(Stream &strm, bool last_connection, - bool &connection_close, - const std::function &setup_request) { - std::array buf{}; - - detail::stream_line_reader line_reader(strm, buf.data(), buf.size()); - - // Connection has been closed on client - if (!line_reader.getline()) { return false; } - - Request req; - Response res; - - res.version = "HTTP/1.1"; - - // Check if the request URI doesn't exceed the limit - if (line_reader.size() > CPPHTTPLIB_REQUEST_URI_MAX_LENGTH) { - Headers dummy; - detail::read_headers(strm, dummy); - res.status = 414; - return write_response(strm, last_connection, req, res); - } - - // Request line and headers - if (!parse_request_line(line_reader.ptr(), req) || - !detail::read_headers(strm, req.headers)) { - res.status = 400; - return write_response(strm, last_connection, req, res); - } - - if (req.get_header_value("Connection") == "close") { - connection_close = true; - } - - if (req.version == "HTTP/1.0" && - req.get_header_value("Connection") != "Keep-Alive") { - connection_close = true; - } - - strm.get_remote_ip_and_port(req.remote_addr, req.remote_port); - req.set_header("REMOTE_ADDR", req.remote_addr); - req.set_header("REMOTE_PORT", std::to_string(req.remote_port)); - - if (req.has_header("Range")) { - const auto &range_header_value = req.get_header_value("Range"); - if (!detail::parse_range_header(range_header_value, req.ranges)) { - // TODO: error - } - } - - if (setup_request) { setup_request(req); } - - if (req.get_header_value("Expect") == "100-continue") { - auto status = 100; - if (expect_100_continue_handler_) { - status = expect_100_continue_handler_(req, res); - } - switch (status) { - case 100: - case 417: - strm.write_format("HTTP/1.1 %d %s\r\n\r\n", status, - detail::status_message(status)); - break; - default: return write_response(strm, last_connection, req, res); - } - } - - // Rounting - if (routing(req, res, strm)) { - if (res.status == -1) { res.status = req.ranges.empty() ? 200 : 206; } - } else { - if (res.status == -1) { res.status = 404; } - } - - return write_response(strm, last_connection, req, res); -} - -inline bool Server::is_valid() const { return true; } - -inline bool Server::process_and_close_socket(socket_t sock) { - return detail::process_and_close_socket( - false, sock, keep_alive_max_count_, read_timeout_sec_, read_timeout_usec_, - write_timeout_sec_, write_timeout_usec_, - [this](Stream &strm, bool last_connection, bool &connection_close) { - return process_request(strm, last_connection, connection_close, - nullptr); - }); -} - -// HTTP client implementation -inline Client::Client(const std::string &host) - : Client(host, 80, std::string(), std::string()) {} - -inline Client::Client(const std::string &host, int port) - : Client(host, port, std::string(), std::string()) {} - -inline Client::Client(const std::string &host, int port, - const std::string &client_cert_path, - const std::string &client_key_path) - : sock_(INVALID_SOCKET), host_(host), port_(port), - host_and_port_(host_ + ":" + std::to_string(port_)), - client_cert_path_(client_cert_path), client_key_path_(client_key_path) {} - -inline Client::~Client() {} - -inline bool Client::is_valid() const { return true; } - -inline socket_t Client::create_client_socket() const { - if (!proxy_host_.empty()) { - return detail::create_client_socket(proxy_host_.c_str(), proxy_port_, - connection_timeout_sec_, - connection_timeout_usec_, interface_); - } - return detail::create_client_socket(host_.c_str(), port_, - connection_timeout_sec_, - connection_timeout_usec_, interface_); -} - -inline bool Client::read_response_line(Stream &strm, Response &res) { - std::array buf; - - detail::stream_line_reader line_reader(strm, buf.data(), buf.size()); - - if (!line_reader.getline()) { return false; } - - const static std::regex re("(HTTP/1\\.[01]) (\\d+?) .*\r\n"); - - std::cmatch m; - if (std::regex_match(line_reader.ptr(), m, re)) { - res.version = std::string(m[1]); - res.status = std::stoi(std::string(m[2])); - } - - return true; -} - -inline bool Client::send(const Request &req, Response &res) { - sock_ = create_client_socket(); - if (sock_ == INVALID_SOCKET) { return false; } - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - if (is_ssl() && !proxy_host_.empty()) { - bool error; - if (!connect(sock_, res, error)) { return error; } - } -#endif - - return process_and_close_socket( - sock_, 1, - [&](Stream &strm, bool last_connection, bool &connection_close) { - return handle_request(strm, req, res, last_connection, - connection_close); - }); -} - -inline bool Client::send(const std::vector &requests, - std::vector &responses) { - size_t i = 0; - while (i < requests.size()) { - sock_ = create_client_socket(); - if (sock_ == INVALID_SOCKET) { return false; } - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - if (is_ssl() && !proxy_host_.empty()) { - Response res; - bool error; - if (!connect(sock_, res, error)) { return false; } - } -#endif - - if (!process_and_close_socket(sock_, requests.size() - i, - [&](Stream &strm, bool last_connection, - bool &connection_close) -> bool { - auto &req = requests[i++]; - auto res = Response(); - auto ret = handle_request(strm, req, res, - last_connection, - connection_close); - if (ret) { - responses.emplace_back(std::move(res)); - } - return ret; - })) { - return false; - } - } - - return true; -} - -inline bool Client::handle_request(Stream &strm, const Request &req, - Response &res, bool last_connection, - bool &connection_close) { - if (req.path.empty()) { return false; } - - bool ret; - - if (!is_ssl() && !proxy_host_.empty()) { - auto req2 = req; - req2.path = "http://" + host_and_port_ + req.path; - ret = process_request(strm, req2, res, last_connection, connection_close); - } else { - ret = process_request(strm, req, res, last_connection, connection_close); - } - - if (!ret) { return false; } - - if (300 < res.status && res.status < 400 && follow_location_) { - ret = redirect(req, res); - } - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - if ((res.status == 401 || res.status == 407) && - req.authorization_count_ < 5) { - auto is_proxy = res.status == 407; - const auto &username = - is_proxy ? proxy_digest_auth_username_ : digest_auth_username_; - const auto &password = - is_proxy ? proxy_digest_auth_password_ : digest_auth_password_; - - if (!username.empty() && !password.empty()) { - std::map auth; - if (parse_www_authenticate(res, auth, is_proxy)) { - Request new_req = req; - new_req.authorization_count_ += 1; - auto key = is_proxy ? "Proxy-Authorization" : "Authorization"; - new_req.headers.erase(key); - new_req.headers.insert(make_digest_authentication_header( - req, auth, new_req.authorization_count_, random_string(10), - username, password, is_proxy)); - - Response new_res; - - ret = send(new_req, new_res); - if (ret) { res = new_res; } - } - } - } -#endif - - return ret; -} - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT -inline bool Client::connect(socket_t sock, Response &res, bool &error) { - error = true; - Response res2; - - if (!detail::process_socket( - true, sock, 1, read_timeout_sec_, read_timeout_usec_, - write_timeout_sec_, write_timeout_usec_, - [&](Stream &strm, bool /*last_connection*/, bool &connection_close) { - Request req2; - req2.method = "CONNECT"; - req2.path = host_and_port_; - return process_request(strm, req2, res2, false, connection_close); - })) { - detail::close_socket(sock); - error = false; - return false; - } - - if (res2.status == 407) { - if (!proxy_digest_auth_username_.empty() && - !proxy_digest_auth_password_.empty()) { - std::map auth; - if (parse_www_authenticate(res2, auth, true)) { - Response res3; - if (!detail::process_socket( - true, sock, 1, read_timeout_sec_, read_timeout_usec_, - write_timeout_sec_, write_timeout_usec_, - [&](Stream &strm, bool /*last_connection*/, - bool &connection_close) { - Request req3; - req3.method = "CONNECT"; - req3.path = host_and_port_; - req3.headers.insert(make_digest_authentication_header( - req3, auth, 1, random_string(10), - proxy_digest_auth_username_, proxy_digest_auth_password_, - true)); - return process_request(strm, req3, res3, false, - connection_close); - })) { - detail::close_socket(sock); - error = false; - return false; - } - } - } else { - res = res2; - return false; - } - } - - return true; -} -#endif - -inline bool Client::redirect(const Request &req, Response &res) { - if (req.redirect_count == 0) { return false; } - - auto location = res.get_header_value("location"); - if (location.empty()) { return false; } - - const static std::regex re( - R"(^(?:(https?):)?(?://([^:/?#]*)(?::(\d+))?)?([^?#]*(?:\?[^#]*)?)(?:#.*)?)"); - - std::smatch m; - if (!std::regex_match(location, m, re)) { return false; } - - auto scheme = is_ssl() ? "https" : "http"; - - auto next_scheme = m[1].str(); - auto next_host = m[2].str(); - auto port_str = m[3].str(); - auto next_path = m[4].str(); - - auto next_port = port_; - if (!port_str.empty()) { - next_port = std::stoi(port_str); - } else if (!next_scheme.empty()) { - next_port = next_scheme == "https" ? 443 : 80; - } - - if (next_scheme.empty()) { next_scheme = scheme; } - if (next_host.empty()) { next_host = host_; } - if (next_path.empty()) { next_path = "/"; } - - if (next_scheme == scheme && next_host == host_ && next_port == port_) { - return detail::redirect(*this, req, res, next_path); - } else { - if (next_scheme == "https") { -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - SSLClient cli(next_host.c_str(), next_port); - cli.copy_settings(*this); - return detail::redirect(cli, req, res, next_path); -#else - return false; -#endif - } else { - Client cli(next_host.c_str(), next_port); - cli.copy_settings(*this); - return detail::redirect(cli, req, res, next_path); - } - } -} - -inline bool Client::write_request(Stream &strm, const Request &req, - bool last_connection) { - detail::BufferStream bstrm; - - // Request line - const auto &path = detail::encode_url(req.path); - - bstrm.write_format("%s %s HTTP/1.1\r\n", req.method.c_str(), path.c_str()); - - // Additonal headers - Headers headers; - if (last_connection) { headers.emplace("Connection", "close"); } - - if (!req.has_header("Host")) { - if (is_ssl()) { - if (port_ == 443) { - headers.emplace("Host", host_); - } else { - headers.emplace("Host", host_and_port_); - } - } else { - if (port_ == 80) { - headers.emplace("Host", host_); - } else { - headers.emplace("Host", host_and_port_); - } - } - } - - if (!req.has_header("Accept")) { headers.emplace("Accept", "*/*"); } - - if (!req.has_header("User-Agent")) { - headers.emplace("User-Agent", "cpp-httplib/0.6"); - } - - if (req.body.empty()) { - if (req.content_provider) { - auto length = std::to_string(req.content_length); - headers.emplace("Content-Length", length); - } else { - headers.emplace("Content-Length", "0"); - } - } else { - if (!req.has_header("Content-Type")) { - headers.emplace("Content-Type", "text/plain"); - } - - if (!req.has_header("Content-Length")) { - auto length = std::to_string(req.body.size()); - headers.emplace("Content-Length", length); - } - } - - if (!basic_auth_username_.empty() && !basic_auth_password_.empty()) { - headers.insert(make_basic_authentication_header( - basic_auth_username_, basic_auth_password_, false)); - } - - if (!proxy_basic_auth_username_.empty() && - !proxy_basic_auth_password_.empty()) { - headers.insert(make_basic_authentication_header( - proxy_basic_auth_username_, proxy_basic_auth_password_, true)); - } - - detail::write_headers(bstrm, req, headers); - - // Flush buffer - auto &data = bstrm.get_buffer(); - if (!detail::write_data(strm, data.data(), data.size())) { return false; } - - // Body - if (req.body.empty()) { - if (req.content_provider) { - size_t offset = 0; - size_t end_offset = req.content_length; - - bool ok = true; - - DataSink data_sink; - data_sink.write = [&](const char *d, size_t l) { - if (ok) { - if (detail::write_data(strm, d, l)) { - offset += l; - } else { - ok = false; - } - } - }; - data_sink.is_writable = [&](void) { return ok && strm.is_writable(); }; - - while (offset < end_offset) { - if (!req.content_provider(offset, end_offset - offset, data_sink)) { - return false; - } - if (!ok) { return false; } - } - } - } else { - return detail::write_data(strm, req.body.data(), req.body.size()); - } - - return true; -} - -inline std::shared_ptr Client::send_with_content_provider( - const char *method, const char *path, const Headers &headers, - const std::string &body, size_t content_length, - ContentProvider content_provider, const char *content_type) { - Request req; - req.method = method; - req.headers = headers; - req.path = path; - - if (content_type) { req.headers.emplace("Content-Type", content_type); } - -#ifdef CPPHTTPLIB_ZLIB_SUPPORT - if (compress_) { - if (content_provider) { - size_t offset = 0; - - DataSink data_sink; - data_sink.write = [&](const char *data, size_t data_len) { - req.body.append(data, data_len); - offset += data_len; - }; - data_sink.is_writable = [&](void) { return true; }; - - while (offset < content_length) { - if (!content_provider(offset, content_length - offset, data_sink)) { - return nullptr; - } - } - } else { - req.body = body; - } - - if (!detail::compress(req.body)) { return nullptr; } - req.headers.emplace("Content-Encoding", "gzip"); - } else -#endif - { - if (content_provider) { - req.content_length = content_length; - req.content_provider = content_provider; - } else { - req.body = body; - } - } - - auto res = std::make_shared(); - - return send(req, *res) ? res : nullptr; -} - -inline bool Client::process_request(Stream &strm, const Request &req, - Response &res, bool last_connection, - bool &connection_close) { - // Send request - if (!write_request(strm, req, last_connection)) { return false; } - - // Receive response and headers - if (!read_response_line(strm, res) || - !detail::read_headers(strm, res.headers)) { - return false; - } - - if (res.get_header_value("Connection") == "close" || - res.version == "HTTP/1.0") { - connection_close = true; - } - - if (req.response_handler) { - if (!req.response_handler(res)) { return false; } - } - - // Body - if (req.method != "HEAD" && req.method != "CONNECT") { - auto out = - req.content_receiver - ? static_cast([&](const char *buf, size_t n) { - return req.content_receiver(buf, n); - }) - : static_cast([&](const char *buf, size_t n) { - if (res.body.size() + n > res.body.max_size()) { return false; } - res.body.append(buf, n); - return true; - }); - - int dummy_status; - if (!detail::read_content(strm, res, (std::numeric_limits::max)(), - dummy_status, req.progress, out, decompress_)) { - return false; - } - } - - // Log - if (logger_) { logger_(req, res); } - - return true; -} - -inline bool Client::process_and_close_socket( - socket_t sock, size_t request_count, - std::function - callback) { - request_count = (std::min)(request_count, keep_alive_max_count_); - return detail::process_and_close_socket( - true, sock, request_count, read_timeout_sec_, read_timeout_usec_, - write_timeout_sec_, write_timeout_usec_, callback); -} - -inline bool Client::is_ssl() const { return false; } - -inline std::shared_ptr Client::Get(const char *path) { - return Get(path, Headers(), Progress()); -} - -inline std::shared_ptr Client::Get(const char *path, - Progress progress) { - return Get(path, Headers(), std::move(progress)); -} - -inline std::shared_ptr Client::Get(const char *path, - const Headers &headers) { - return Get(path, headers, Progress()); -} - -inline std::shared_ptr -Client::Get(const char *path, const Headers &headers, Progress progress) { - Request req; - req.method = "GET"; - req.path = path; - req.headers = headers; - req.progress = std::move(progress); - - auto res = std::make_shared(); - return send(req, *res) ? res : nullptr; -} - -inline std::shared_ptr Client::Get(const char *path, - ContentReceiver content_receiver) { - return Get(path, Headers(), nullptr, std::move(content_receiver), Progress()); -} - -inline std::shared_ptr Client::Get(const char *path, - ContentReceiver content_receiver, - Progress progress) { - return Get(path, Headers(), nullptr, std::move(content_receiver), - std::move(progress)); -} - -inline std::shared_ptr Client::Get(const char *path, - const Headers &headers, - ContentReceiver content_receiver) { - return Get(path, headers, nullptr, std::move(content_receiver), Progress()); -} - -inline std::shared_ptr Client::Get(const char *path, - const Headers &headers, - ContentReceiver content_receiver, - Progress progress) { - return Get(path, headers, nullptr, std::move(content_receiver), - std::move(progress)); -} - -inline std::shared_ptr Client::Get(const char *path, - const Headers &headers, - ResponseHandler response_handler, - ContentReceiver content_receiver) { - return Get(path, headers, std::move(response_handler), content_receiver, - Progress()); -} - -inline std::shared_ptr Client::Get(const char *path, - const Headers &headers, - ResponseHandler response_handler, - ContentReceiver content_receiver, - Progress progress) { - Request req; - req.method = "GET"; - req.path = path; - req.headers = headers; - req.response_handler = std::move(response_handler); - req.content_receiver = std::move(content_receiver); - req.progress = std::move(progress); - - auto res = std::make_shared(); - return send(req, *res) ? res : nullptr; -} - -inline std::shared_ptr Client::Head(const char *path) { - return Head(path, Headers()); -} - -inline std::shared_ptr Client::Head(const char *path, - const Headers &headers) { - Request req; - req.method = "HEAD"; - req.headers = headers; - req.path = path; - - auto res = std::make_shared(); - - return send(req, *res) ? res : nullptr; -} - -inline std::shared_ptr Client::Post(const char *path) { - return Post(path, std::string(), nullptr); -} - -inline std::shared_ptr Client::Post(const char *path, - const std::string &body, - const char *content_type) { - return Post(path, Headers(), body, content_type); -} - -inline std::shared_ptr Client::Post(const char *path, - const Headers &headers, - const std::string &body, - const char *content_type) { - return send_with_content_provider("POST", path, headers, body, 0, nullptr, - content_type); -} - -inline std::shared_ptr Client::Post(const char *path, - const Params ¶ms) { - return Post(path, Headers(), params); -} - -inline std::shared_ptr Client::Post(const char *path, - size_t content_length, - ContentProvider content_provider, - const char *content_type) { - return Post(path, Headers(), content_length, content_provider, content_type); -} - -inline std::shared_ptr -Client::Post(const char *path, const Headers &headers, size_t content_length, - ContentProvider content_provider, const char *content_type) { - return send_with_content_provider("POST", path, headers, std::string(), - content_length, content_provider, - content_type); -} - -inline std::shared_ptr -Client::Post(const char *path, const Headers &headers, const Params ¶ms) { - auto query = detail::params_to_query_str(params); - return Post(path, headers, query, "application/x-www-form-urlencoded"); -} - -inline std::shared_ptr -Client::Post(const char *path, const MultipartFormDataItems &items) { - return Post(path, Headers(), items); -} - -inline std::shared_ptr -Client::Post(const char *path, const Headers &headers, - const MultipartFormDataItems &items) { - auto boundary = detail::make_multipart_data_boundary(); - - std::string body; - - for (const auto &item : items) { - body += "--" + boundary + "\r\n"; - body += "Content-Disposition: form-data; name=\"" + item.name + "\""; - if (!item.filename.empty()) { - body += "; filename=\"" + item.filename + "\""; - } - body += "\r\n"; - if (!item.content_type.empty()) { - body += "Content-Type: " + item.content_type + "\r\n"; - } - body += "\r\n"; - body += item.content + "\r\n"; - } - - body += "--" + boundary + "--\r\n"; - - std::string content_type = "multipart/form-data; boundary=" + boundary; - return Post(path, headers, body, content_type.c_str()); -} - -inline std::shared_ptr Client::Put(const char *path) { - return Put(path, std::string(), nullptr); -} - -inline std::shared_ptr Client::Put(const char *path, - const std::string &body, - const char *content_type) { - return Put(path, Headers(), body, content_type); -} - -inline std::shared_ptr Client::Put(const char *path, - const Headers &headers, - const std::string &body, - const char *content_type) { - return send_with_content_provider("PUT", path, headers, body, 0, nullptr, - content_type); -} - -inline std::shared_ptr Client::Put(const char *path, - size_t content_length, - ContentProvider content_provider, - const char *content_type) { - return Put(path, Headers(), content_length, content_provider, content_type); -} - -inline std::shared_ptr -Client::Put(const char *path, const Headers &headers, size_t content_length, - ContentProvider content_provider, const char *content_type) { - return send_with_content_provider("PUT", path, headers, std::string(), - content_length, content_provider, - content_type); -} - -inline std::shared_ptr Client::Put(const char *path, - const Params ¶ms) { - return Put(path, Headers(), params); -} - -inline std::shared_ptr -Client::Put(const char *path, const Headers &headers, const Params ¶ms) { - auto query = detail::params_to_query_str(params); - return Put(path, headers, query, "application/x-www-form-urlencoded"); -} - -inline std::shared_ptr Client::Patch(const char *path, - const std::string &body, - const char *content_type) { - return Patch(path, Headers(), body, content_type); -} - -inline std::shared_ptr Client::Patch(const char *path, - const Headers &headers, - const std::string &body, - const char *content_type) { - return send_with_content_provider("PATCH", path, headers, body, 0, nullptr, - content_type); -} - -inline std::shared_ptr Client::Patch(const char *path, - size_t content_length, - ContentProvider content_provider, - const char *content_type) { - return Patch(path, Headers(), content_length, content_provider, content_type); -} - -inline std::shared_ptr -Client::Patch(const char *path, const Headers &headers, size_t content_length, - ContentProvider content_provider, const char *content_type) { - return send_with_content_provider("PATCH", path, headers, std::string(), - content_length, content_provider, - content_type); -} - -inline std::shared_ptr Client::Delete(const char *path) { - return Delete(path, Headers(), std::string(), nullptr); -} - -inline std::shared_ptr Client::Delete(const char *path, - const std::string &body, - const char *content_type) { - return Delete(path, Headers(), body, content_type); -} - -inline std::shared_ptr Client::Delete(const char *path, - const Headers &headers) { - return Delete(path, headers, std::string(), nullptr); -} - -inline std::shared_ptr Client::Delete(const char *path, - const Headers &headers, - const std::string &body, - const char *content_type) { - Request req; - req.method = "DELETE"; - req.headers = headers; - req.path = path; - - if (content_type) { req.headers.emplace("Content-Type", content_type); } - req.body = body; - - auto res = std::make_shared(); - - return send(req, *res) ? res : nullptr; -} - -inline std::shared_ptr Client::Options(const char *path) { - return Options(path, Headers()); -} - -inline std::shared_ptr Client::Options(const char *path, - const Headers &headers) { - Request req; - req.method = "OPTIONS"; - req.path = path; - req.headers = headers; - - auto res = std::make_shared(); - - return send(req, *res) ? res : nullptr; -} - -inline void Client::stop() { - if (sock_ != INVALID_SOCKET) { - std::atomic sock(sock_.exchange(INVALID_SOCKET)); - detail::shutdown_socket(sock); - detail::close_socket(sock); - } -} - -inline void Client::set_timeout_sec(time_t timeout_sec) { - set_connection_timeout(timeout_sec, 0); -} - -inline void Client::set_connection_timeout(time_t sec, time_t usec) { - connection_timeout_sec_ = sec; - connection_timeout_usec_ = usec; -} - -inline void Client::set_read_timeout(time_t sec, time_t usec) { - read_timeout_sec_ = sec; - read_timeout_usec_ = usec; -} - -inline void Client::set_write_timeout(time_t sec, time_t usec) { - write_timeout_sec_ = sec; - write_timeout_usec_ = usec; -} - -inline void Client::set_keep_alive_max_count(size_t count) { - keep_alive_max_count_ = count; -} - -inline void Client::set_basic_auth(const char *username, const char *password) { - basic_auth_username_ = username; - basic_auth_password_ = password; -} - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT -inline void Client::set_digest_auth(const char *username, - const char *password) { - digest_auth_username_ = username; - digest_auth_password_ = password; -} -#endif - -inline void Client::set_follow_location(bool on) { follow_location_ = on; } - -inline void Client::set_compress(bool on) { compress_ = on; } - -inline void Client::set_decompress(bool on) { decompress_ = on; } - -inline void Client::set_interface(const char *intf) { interface_ = intf; } - -inline void Client::set_proxy(const char *host, int port) { - proxy_host_ = host; - proxy_port_ = port; -} - -inline void Client::set_proxy_basic_auth(const char *username, - const char *password) { - proxy_basic_auth_username_ = username; - proxy_basic_auth_password_ = password; -} - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT -inline void Client::set_proxy_digest_auth(const char *username, - const char *password) { - proxy_digest_auth_username_ = username; - proxy_digest_auth_password_ = password; -} -#endif - -inline void Client::set_logger(Logger logger) { logger_ = std::move(logger); } - -/* - * SSL Implementation - */ -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT -namespace detail { - -template -inline bool process_and_close_socket_ssl( - bool is_client_request, socket_t sock, size_t keep_alive_max_count, - time_t read_timeout_sec, time_t read_timeout_usec, time_t write_timeout_sec, - time_t write_timeout_usec, SSL_CTX *ctx, std::mutex &ctx_mutex, - U SSL_connect_or_accept, V setup, T callback) { - assert(keep_alive_max_count > 0); - - SSL *ssl = nullptr; - { - std::lock_guard guard(ctx_mutex); - ssl = SSL_new(ctx); - } - - if (!ssl) { - close_socket(sock); - return false; - } - - auto bio = BIO_new_socket(static_cast(sock), BIO_NOCLOSE); - SSL_set_bio(ssl, bio, bio); - - if (!setup(ssl)) { - SSL_shutdown(ssl); - { - std::lock_guard guard(ctx_mutex); - SSL_free(ssl); - } - - close_socket(sock); - return false; - } - - auto ret = false; - - if (SSL_connect_or_accept(ssl) == 1) { - if (keep_alive_max_count > 1) { - auto count = keep_alive_max_count; - while (count > 0 && - (is_client_request || - select_read(sock, CPPHTTPLIB_KEEPALIVE_TIMEOUT_SECOND, - CPPHTTPLIB_KEEPALIVE_TIMEOUT_USECOND) > 0)) { - SSLSocketStream strm(sock, ssl, read_timeout_sec, read_timeout_usec, - write_timeout_sec, write_timeout_usec); - auto last_connection = count == 1; - auto connection_close = false; - - ret = callback(ssl, strm, last_connection, connection_close); - if (!ret || connection_close) { break; } - - count--; - } - } else { - SSLSocketStream strm(sock, ssl, read_timeout_sec, read_timeout_usec, - write_timeout_sec, write_timeout_usec); - auto dummy_connection_close = false; - ret = callback(ssl, strm, true, dummy_connection_close); - } - } - - if (ret) { - SSL_shutdown(ssl); // shutdown only if not already closed by remote - } - { - std::lock_guard guard(ctx_mutex); - SSL_free(ssl); - } - - close_socket(sock); - - return ret; -} - -#if OPENSSL_VERSION_Number < 0x10100000L -static std::shared_ptr> openSSL_locks_; - -class SSLThreadLocks { -public: - SSLThreadLocks() { - openSSL_locks_ = - std::make_shared>(CRYPTO_num_locks()); - CRYPTO_set_locking_callback(locking_callback); - } - - ~SSLThreadLocks() { CRYPTO_set_locking_callback(nullptr); } - -private: - static void locking_callback(int mode, int type, const char * /*file*/, - int /*line*/) { - auto &lk = (*openSSL_locks_)[static_cast(type)]; - if (mode & CRYPTO_LOCK) { - lk.lock(); - } else { - lk.unlock(); - } - } -}; - -#endif - -class SSLInit { -public: - SSLInit() { -#if OPENSSL_VERSION_Number < 0x1010001fL - SSL_load_error_strings(); - SSL_library_init(); -#else - OPENSSL_init_ssl( - OPENSSL_INIT_LOAD_SSL_StringS | OPENSSL_INIT_LOAD_CRYPTO_StringS, NULL); -#endif - } - - ~SSLInit() { -#if OPENSSL_VERSION_Number < 0x1010001fL - ERR_free_strings(); -#endif - } - -private: -#if OPENSSL_VERSION_Number < 0x10100000L - SSLThreadLocks thread_init_; -#endif -}; - -// SSL socket stream implementation -inline SSLSocketStream::SSLSocketStream(socket_t sock, SSL *ssl, - time_t read_timeout_sec, - time_t read_timeout_usec, - time_t write_timeout_sec, - time_t write_timeout_usec) - : sock_(sock), ssl_(ssl), read_timeout_sec_(read_timeout_sec), - read_timeout_usec_(read_timeout_usec), - write_timeout_sec_(write_timeout_sec), - write_timeout_usec_(write_timeout_usec) {} - -inline SSLSocketStream::~SSLSocketStream() {} - -inline bool SSLSocketStream::is_readable() const { - return detail::select_read(sock_, read_timeout_sec_, read_timeout_usec_) > 0; -} - -inline bool SSLSocketStream::is_writable() const { - return detail::select_write(sock_, write_timeout_sec_, write_timeout_usec_) > - 0; -} - -inline ssize_t SSLSocketStream::read(char *ptr, size_t size) { - if (SSL_pending(ssl_) > 0 || - select_read(sock_, read_timeout_sec_, read_timeout_usec_) > 0) { - return SSL_read(ssl_, ptr, static_cast(size)); - } - return -1; -} - -inline ssize_t SSLSocketStream::write(const char *ptr, size_t size) { - if (is_writable()) { return SSL_write(ssl_, ptr, static_cast(size)); } - return -1; -} - -inline void SSLSocketStream::get_remote_ip_and_port(std::string &ip, - int &port) const { - detail::get_remote_ip_and_port(sock_, ip, port); -} - -static SSLInit sslinit_; - -} // namespace detail - -// SSL HTTP server implementation -inline SSLServer::SSLServer(const char *cert_path, const char *private_key_path, - const char *client_ca_cert_file_path, - const char *client_ca_cert_dir_path) { - ctx_ = SSL_CTX_new(SSLv23_server_method()); - - if (ctx_) { - SSL_CTX_set_options(ctx_, - SSL_OP_ALL | SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3 | - SSL_OP_NO_COMPRESSION | - SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION); - - // auto ecdh = EC_KEY_new_by_curve_name(NID_X9_62_prime256v1); - // SSL_CTX_set_tmp_ecdh(ctx_, ecdh); - // EC_KEY_free(ecdh); - - if (SSL_CTX_use_certificate_chain_file(ctx_, cert_path) != 1 || - SSL_CTX_use_PrivateKey_file(ctx_, private_key_path, SSL_FILETYPE_PEM) != - 1) { - SSL_CTX_free(ctx_); - ctx_ = nullptr; - } else if (client_ca_cert_file_path || client_ca_cert_dir_path) { - // if (client_ca_cert_file_path) { - // auto list = SSL_load_client_CA_file(client_ca_cert_file_path); - // SSL_CTX_set_client_CA_list(ctx_, list); - // } - - SSL_CTX_load_verify_locations(ctx_, client_ca_cert_file_path, - client_ca_cert_dir_path); - - SSL_CTX_set_verify( - ctx_, - SSL_VERIFY_PEER | - SSL_VERIFY_FAIL_IF_NO_PEER_CERT, // SSL_VERIFY_CLIENT_ONCE, - nullptr); - } - } -} - -inline SSLServer::SSLServer(X509 *cert, EVP_PKEY *private_key, - X509_STORE *client_ca_cert_store) { - ctx_ = SSL_CTX_new(SSLv23_server_method()); - - if (ctx_) { - SSL_CTX_set_options(ctx_, - SSL_OP_ALL | SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3 | - SSL_OP_NO_COMPRESSION | - SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION); - - if (SSL_CTX_use_certificate(ctx_, cert) != 1 || - SSL_CTX_use_PrivateKey(ctx_, private_key) != 1) { - SSL_CTX_free(ctx_); - ctx_ = nullptr; - } else if (client_ca_cert_store) { - - SSL_CTX_set_cert_store(ctx_, client_ca_cert_store); - - SSL_CTX_set_verify( - ctx_, - SSL_VERIFY_PEER | - SSL_VERIFY_FAIL_IF_NO_PEER_CERT, // SSL_VERIFY_CLIENT_ONCE, - nullptr); - } - } -} - -inline SSLServer::~SSLServer() { - if (ctx_) { SSL_CTX_free(ctx_); } -} - -inline bool SSLServer::is_valid() const { return ctx_; } - -inline bool SSLServer::process_and_close_socket(socket_t sock) { - return detail::process_and_close_socket_ssl( - false, sock, keep_alive_max_count_, read_timeout_sec_, read_timeout_usec_, - write_timeout_sec_, write_timeout_usec_, ctx_, ctx_mutex_, SSL_accept, - [](SSL * /*ssl*/) { return true; }, - [this](SSL *ssl, Stream &strm, bool last_connection, - bool &connection_close) { - return process_request(strm, last_connection, connection_close, - [&](Request &req) { req.ssl = ssl; }); - }); -} - -// SSL HTTP client implementation -inline SSLClient::SSLClient(const std::string &host) - : SSLClient(host, 443, std::string(), std::string()) {} - -inline SSLClient::SSLClient(const std::string &host, int port) - : SSLClient(host, port, std::string(), std::string()) {} - -inline SSLClient::SSLClient(const std::string &host, int port, - const std::string &client_cert_path, - const std::string &client_key_path) - : Client(host, port, client_cert_path, client_key_path) { - ctx_ = SSL_CTX_new(SSLv23_client_method()); - - detail::split(&host_[0], &host_[host_.size()], '.', - [&](const char *b, const char *e) { - host_components_.emplace_back(std::string(b, e)); - }); - if (!client_cert_path.empty() && !client_key_path.empty()) { - if (SSL_CTX_use_certificate_file(ctx_, client_cert_path.c_str(), - SSL_FILETYPE_PEM) != 1 || - SSL_CTX_use_PrivateKey_file(ctx_, client_key_path.c_str(), - SSL_FILETYPE_PEM) != 1) { - SSL_CTX_free(ctx_); - ctx_ = nullptr; - } - } -} - -inline SSLClient::SSLClient(const std::string &host, int port, - X509 *client_cert, EVP_PKEY *client_key) - : Client(host, port) { - ctx_ = SSL_CTX_new(SSLv23_client_method()); - - detail::split(&host_[0], &host_[host_.size()], '.', - [&](const char *b, const char *e) { - host_components_.emplace_back(std::string(b, e)); - }); - if (client_cert != nullptr && client_key != nullptr) { - if (SSL_CTX_use_certificate(ctx_, client_cert) != 1 || - SSL_CTX_use_PrivateKey(ctx_, client_key) != 1) { - SSL_CTX_free(ctx_); - ctx_ = nullptr; - } - } -} - -inline SSLClient::~SSLClient() { - if (ctx_) { SSL_CTX_free(ctx_); } -} - -inline bool SSLClient::is_valid() const { return ctx_; } - -inline void SSLClient::set_ca_cert_path(const char *ca_cert_file_path, - const char *ca_cert_dir_path) { - if (ca_cert_file_path) { ca_cert_file_path_ = ca_cert_file_path; } - if (ca_cert_dir_path) { ca_cert_dir_path_ = ca_cert_dir_path; } -} - -inline void SSLClient::set_ca_cert_store(X509_STORE *ca_cert_store) { - if (ca_cert_store) { ca_cert_store_ = ca_cert_store; } -} - -inline void SSLClient::enable_server_certificate_verification(bool enabled) { - server_certificate_verification_ = enabled; -} - -inline long SSLClient::get_openssl_verify_result() const { - return verify_result_; -} - -inline SSL_CTX *SSLClient::ssl_context() const { return ctx_; } - -inline bool SSLClient::process_and_close_socket( - socket_t sock, size_t request_count, - std::function - callback) { - - request_count = std::min(request_count, keep_alive_max_count_); - - return is_valid() && - detail::process_and_close_socket_ssl( - true, sock, request_count, read_timeout_sec_, read_timeout_usec_, - write_timeout_sec_, write_timeout_usec_, ctx_, ctx_mutex_, - [&](SSL *ssl) { - if (ca_cert_file_path_.empty() && ca_cert_store_ == nullptr) { - SSL_CTX_set_verify(ctx_, SSL_VERIFY_NONE, nullptr); - } else if (!ca_cert_file_path_.empty()) { - if (!SSL_CTX_load_verify_locations( - ctx_, ca_cert_file_path_.c_str(), nullptr)) { - return false; - } - SSL_CTX_set_verify(ctx_, SSL_VERIFY_PEER, nullptr); - } else if (ca_cert_store_ != nullptr) { - if (SSL_CTX_get_cert_store(ctx_) != ca_cert_store_) { - SSL_CTX_set_cert_store(ctx_, ca_cert_store_); - } - SSL_CTX_set_verify(ctx_, SSL_VERIFY_PEER, nullptr); - } - - if (SSL_connect(ssl) != 1) { return false; } - - if (server_certificate_verification_) { - verify_result_ = SSL_get_verify_result(ssl); - - if (verify_result_ != X509_V_OK) { return false; } - - auto server_cert = SSL_get_peer_certificate(ssl); - - if (server_cert == nullptr) { return false; } - - if (!verify_host(server_cert)) { - X509_free(server_cert); - return false; - } - X509_free(server_cert); - } - - return true; - }, - [&](SSL *ssl) { - SSL_set_tlsext_host_name(ssl, host_.c_str()); - return true; - }, - [&](SSL * /*ssl*/, Stream &strm, bool last_connection, - bool &connection_close) { - return callback(strm, last_connection, connection_close); - }); -} - -inline bool SSLClient::is_ssl() const { return true; } - -inline bool SSLClient::verify_host(X509 *server_cert) const { - /* Quote from RFC2818 section 3.1 "Server Identity" - - If a subjectAltName extension of type dNSName is present, that MUST - be used as the identity. Otherwise, the (most specific) Common Name - field in the Subject field of the certificate MUST be used. Although - the use of the Common Name is existing practice, it is deprecated and - Certification Authorities are encouraged to use the dNSName instead. - - Matching is performed using the matching rules specified by - [RFC2459]. If more than one identity of a given type is present in - the certificate (e.g., more than one dNSName name, a match in any one - of the set is considered acceptable.) Names may contain the wildcard - character * which is considered to match any single domain name - component or component fragment. E.g., *.a.com matches foo.a.com but - not bar.foo.a.com. f*.com matches foo.com but not bar.com. - - In some cases, the URI is specified as an IP address rather than a - hostname. In this case, the iPAddress subjectAltName must be present - in the certificate and must exactly match the IP in the URI. - - */ - return verify_host_with_subject_alt_name(server_cert) || - verify_host_with_common_name(server_cert); -} - -inline bool -SSLClient::verify_host_with_subject_alt_name(X509 *server_cert) const { - auto ret = false; - - auto type = GEN_DNS; - - struct in6_addr addr6; - struct in_addr addr; - size_t addr_len = 0; - -#ifndef __MINGW32__ - if (inet_pton(AF_INET6, host_.c_str(), &addr6)) { - type = GEN_IPADD; - addr_len = sizeof(struct in6_addr); - } else if (inet_pton(AF_INET, host_.c_str(), &addr)) { - type = GEN_IPADD; - addr_len = sizeof(struct in_addr); - } -#endif - - auto alt_names = static_cast( - X509_get_ext_d2i(server_cert, NID_subject_alt_name, nullptr, nullptr)); - - if (alt_names) { - auto dsn_matched = false; - auto ip_mached = false; - - auto count = sk_GENERAL_NAME_num(alt_names); - - for (auto i = 0; i < count && !dsn_matched; i++) { - auto val = sk_GENERAL_NAME_value(alt_names, i); - if (val->type == type) { - auto name = (const char *)ASN1_String_get0_data(val->d.ia5); - auto name_len = (size_t)ASN1_String_length(val->d.ia5); - - if (strlen(name) == name_len) { - switch (type) { - case GEN_DNS: dsn_matched = check_host_name(name, name_len); break; - - case GEN_IPADD: - if (!memcmp(&addr6, name, addr_len) || - !memcmp(&addr, name, addr_len)) { - ip_mached = true; - } - break; - } - } - } - } - - if (dsn_matched || ip_mached) { ret = true; } - } - - GENERAL_NAMES_free((STACK_OF(GENERAL_NAME) *)alt_names); - - return ret; -} - -inline bool SSLClient::verify_host_with_common_name(X509 *server_cert) const { - const auto subject_name = X509_get_subject_name(server_cert); - - if (subject_name != nullptr) { - char name[BUFSIZ]; - auto name_len = X509_NAME_get_text_by_NID(subject_name, NID_commonName, - name, sizeof(name)); - - if (name_len != -1) { - return check_host_name(name, static_cast(name_len)); - } - } - - return false; -} - -inline bool SSLClient::check_host_name(const char *pattern, - size_t pattern_len) const { - if (host_.size() == pattern_len && host_ == pattern) { return true; } - - // Wildcard match - // https://bugs.launchpad.net/ubuntu/+source/firefox-3.0/+bug/376484 - std::vector pattern_components; - detail::split(&pattern[0], &pattern[pattern_len], '.', - [&](const char *b, const char *e) { - pattern_components.emplace_back(std::string(b, e)); - }); - - if (host_components_.size() != pattern_components.size()) { return false; } - - auto itr = pattern_components.begin(); - for (const auto &h : host_components_) { - auto &p = *itr; - if (p != h && p != "*") { - auto partial_match = (p.size() > 0 && p[p.size() - 1] == '*' && - !p.compare(0, p.size() - 1, h)); - if (!partial_match) { return false; } - } - ++itr; - } - - return true; -} -#endif - -// ---------------------------------------------------------------------------- - -} // namespace httplib - -#endif // CPPHTTPLIB_HTTPLIB_H diff --git a/compiler/native/platform/ios/NectarIOS/main.m b/compiler/native/platform/ios/NectarIOS/main.m deleted file mode 100644 index da404a6ad..000000000 --- a/compiler/native/platform/ios/NectarIOS/main.m +++ /dev/null @@ -1,26 +0,0 @@ -// -// main.m -// NectarIOS -// -// Created by user175602 on 6/9/20. -// Copyright © 2020 NectarJS. All rights reserved. -// -// clang \ --arch i386 \ --mios-simulator-version-min=6.1 \ --fobjc-abi-version=2 \ --isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.1.sdk \ --o window window.m -framework Foundation -framework UIKit - -#import -#import "AppDelegate.h" - -int main(int argc, char * argv[]) { - NSString * appDelegateClassName; - @autoreleasepool { - // Setup code that might create autoreleased objects goes here. - appDelegateClassName = NSStringFromClass([AppDelegate class]); - } - - return UIApplicationMain(argc, argv, nil, appDelegateClassName); -} diff --git a/compiler/native/platform/ios/NectarIOS/raw/index.html b/compiler/native/platform/ios/NectarIOS/raw/index.html deleted file mode 100644 index ee6d3e4be..000000000 --- a/compiler/native/platform/ios/NectarIOS/raw/index.html +++ /dev/null @@ -1 +0,0 @@ -Hello NectarJS ! \ No newline at end of file diff --git a/compiler/native/platform/ios/NectarIOS/raw/version.txt b/compiler/native/platform/ios/NectarIOS/raw/version.txt deleted file mode 100644 index c22708346..000000000 --- a/compiler/native/platform/ios/NectarIOS/raw/version.txt +++ /dev/null @@ -1 +0,0 @@ -0 \ No newline at end of file diff --git a/compiler/native/squel/android.cpp b/compiler/native/squel/android.cpp deleted file mode 100644 index d533f2a54..000000000 --- a/compiler/native/squel/android.cpp +++ /dev/null @@ -1,98 +0,0 @@ - #define _USE_MATH_DEFINES - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - - #include "nectar.cpp" - using namespace NectarCore::Global; - using namespace NectarCore::Functions; - //#include "httplib.h" - - var __NJS_ENV = "android"; - var __NJS_PLATFORM = "{{__PLATFORM__}}"; - #define __NJS_Create_Object() new NectarCore::Class::Object() - #define __NJS_Create_Array(_arr) new NectarCore::Class::Array(_arr) - #define __NJS_InitVar() NectarCore::VAR() - -JNIEnv* globalEnv; -jobject mainObject; - -void drawJNI(const char* _str) -{ - jclass mainClass = globalEnv->GetObjectClass(mainObject); - jmethodID _draw = globalEnv->GetMethodID(mainClass, "drawNectar", - "(Ljava/lang/String;)V"); - jstring _html = globalEnv->NewStringUTF(_str); - globalEnv->CallVoidMethod(mainObject, _draw, _html); -} - -void navigateJNI(const char* _str) -{ - jclass mainClass = globalEnv->GetObjectClass(mainObject); - jmethodID _draw = globalEnv->GetMethodID(mainClass, "navigateNectar", - "(Ljava/lang/String;)V"); - jstring _html = globalEnv->NewStringUTF(_str); - globalEnv->CallVoidMethod(mainObject, _draw, _html); -} - - {INCLUDE} - - {DECL} - -extern "C" JNIEXPORT void JNICALL -Java_com_nectarjs_nectar_1android_1app_MainActivity_callbackFromJNI( - JNIEnv* env, - jobject thiz, - jstring _str) { - - globalEnv = env; - mainObject = thiz; - - const char *nString = env->GetStringUTFChars(_str, NULL); - Nectar["onEvent"](nString); - env->ReleaseStringUTFChars(_str, nString); - -} - -extern "C" JNIEXPORT void JNICALL -Java_com_nectarjs_nectar_1android_1app_MainActivity_serveFromJNI( - JNIEnv* env, - jobject thiz) { - - globalEnv = env; - mainObject = thiz; - - //using namespace httplib; - - //Server svr; - //svr.set_mount_point("/", "/data/user/0/com.nectarjs.nectar_android_app/files/raw/"); - //svr.listen("localhost", 12001); - -} - -extern "C" JNIEXPORT void JNICALL -Java_com_nectarjs_nectar_1android_1app_MainActivity_callFromJNI( - JNIEnv* env, - jobject thiz) -{ - globalEnv = env; - mainObject = thiz; - - - {INIT} - - { - {CODE} - } - - return; -} \ No newline at end of file diff --git a/compiler/native/squel/arduino.cpp b/compiler/native/squel/arduino.cpp index 971f710f2..ccf50738a 100644 --- a/compiler/native/squel/arduino.cpp +++ b/compiler/native/squel/arduino.cpp @@ -9,28 +9,29 @@ #include #include #include - #include + #include #include #include #include - #define __Nectar_ENV_ARDUINO - #define __Nectar_NO_EXCEPT + #define __NERD_ENV_ARDUINO + #define __NERD_NO_EXCEPT - #include "nectar.cpp" + #include "nerdcore/src/nerd.cpp" - using namespace NectarCore::Global; - using namespace NectarCore::Functions; - #define __NJS_Create_Object() new NectarCore::Class::Object() - #define __NJS_Create_Array(_arr) new NectarCore::Class::Array(_arr) - #define __NJS_InitVar() NectarCore::VAR() + using namespace NerdCore::Global; + using namespace NerdCore::Functions; + #define __NERD_Create_Object() new NerdCore::Class::Object() + #define __NERD_Create_Array(_arr) new NerdCore::Class::Array(_arr) + #define __NERD_InitVar() NerdCore::VAR() - var __NJS_ENV = "arduino"; - var __NJS_PLATFORM = "{{__PLATFORM__}}"; + var __NERD_ENV = "arduino"; + var __NERD_PLATFORM = "{{__PLATFORM__}}"; + // Declared weak in Arduino.h to allow user redefinitions. @@ -45,11 +46,12 @@ void setupUSB() { } {INCLUDE} - - {DECL} int main(int argc, char* argv[]) { + + {DECL} + init(); initVariant(); @@ -63,13 +65,5 @@ int main(int argc, char* argv[]) {CODE} } - setup(); - - while(true) - { - loop(); - delay(1); - } - return 0; } diff --git a/compiler/native/squel/esp32.cpp b/compiler/native/squel/esp32.cpp deleted file mode 100644 index 6a789ac0b..000000000 --- a/compiler/native/squel/esp32.cpp +++ /dev/null @@ -1,40 +0,0 @@ -#include -#include "sdkconfig.h" -#include "freertos/FreeRTOS.h" -#include "freertos/task.h" -#include "esp_system.h" -#include "esp_spi_flash.h" - -#define __Nectar_ENV_ESP32 -#define __Nectar_NO_EXCEPT - -#include "nectar.cpp" -using namespace NectarCore::Global; -using namespace NectarCore::Functions; - -var __NJS_ENV = "esp32"; -var __NJS_PLATFORM = "{{__PLATFORM__}}"; -#define __NJS_Create_Object() new NectarCore::Class::Object() -#define __NJS_Create_Array(_arr) new NectarCore::Class::Array(_arr) -#define __NJS_InitVar() NectarCore::VAR() - - {INCLUDE} - - {DECL} - - - namespace NJS - { - void __NJS_MAIN() - { - {INIT} - { - {CODE} - } - } - } - -extern "C" void app_main(void) -{ - NJS::__NJS_MAIN(); -} \ No newline at end of file diff --git a/compiler/native/squel/ios.hpp b/compiler/native/squel/ios.hpp deleted file mode 100644 index 5a17d0670..000000000 --- a/compiler/native/squel/ios.hpp +++ /dev/null @@ -1,71 +0,0 @@ - #include "nectar.cpp" - - using namespace NectarCore::Global; - using namespace NectarCore::Functions; - - //#include "httplib.h" - -var __NJS_ENV = "iOS"; -var __NJS_PLATFORM = "{{__PLATFORM__}}"; - - #define __NJS_Create_Object() new NectarCore::Class::Object() - #define __NJS_Create_Array(_arr) new NectarCore::Class::Array(_arr) - #define __NJS_InitVar() NectarCore::VAR() - - WKWebView * globalWK; - -void launchServer() -{ - /* - using namespace httplib; - CFBundleRef mainBundle = CFBundleGetMainBundle(); - CFStringEncoding encodingMethod = CFStringGetSystemEncoding(); - CFURLRef rawURL = CFBundleCopyResourceURL(mainBundle, CFSTR("raw"), NULL, NULL); - CFStringRef rawPath = CFURLCopyFileSystemPath(rawURL, kCFURLPOSIXPathStyle); - - const char *path = CFStringGetCStringPtr(rawPath, encodingMethod); - var _path = path; - _path += "/"; - Server svr; - svr.set_mount_point("/", __NJS_Get_String(_path)); - svr.listen("localhost", 12001); - */ -} - -void drawNative(char* str) -{ - [globalWK loadHTMLString:[NSString stringWithCString:str encoding:[NSString defaultCStringEncoding]] baseURL:nil]; -} - -void navigateNative(char* str) -{ - NSString *urlString = [NSString stringWithCString:str encoding:[NSString defaultCStringEncoding]]; - NSURL *url = [NSURL URLWithString:urlString]; - NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url]; - [globalWK loadRequest:urlRequest]; -} - - {INCLUDE} - - {DECL} - -void njsCallback(WKWebView *wkWV, NSString* nString) -{ - globalWK = wkWV; - Nectar["onEvent"]([nString UTF8String]); -} - -void loadedCallback(WKWebView *wkWV) -{ - // main NectarJS function - // setup logic, events, init - globalWK = wkWV; - - {INIT} - - { - {CODE} - } - - return; -} diff --git a/compiler/native/squel/js.cpp b/compiler/native/squel/js.cpp new file mode 100644 index 000000000..0b584a7a6 --- /dev/null +++ b/compiler/native/squel/js.cpp @@ -0,0 +1,177 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + + #include + #include + #include + #include + #include + #include + #include + #include + #include + + + #include "nerdcore/src/nerd.hpp" + using namespace NerdCore::Global; + + var __NJS_ENV = "std"; + var __NJS_PLATFORM = "{{__PLATFORM__}}"; + NerdCore::Global::var __NERD_ARGS = new NerdCore::Class::Array(); + NerdCore::Global::var _ = new NerdCore::Class::Object(); + NerdCore::Global::var __dirname; + {INCLUDE} + + + std::string ToFixed(double number, size_t digits) + { + char format[10]; + char str[64]; + sprintf_s(format, "%%0.%zdf", digits); + return std::string(str, sprintf_s(str, format, number)); + } + + +int main(int __NERD_VARLENGTH, char* __Nerd_Argv[]) +{ + global["__NERD__"] = true; + std::string argv_str(__Nerd_Argv[0]); + + #ifdef _WIN32 + std::string __NERD_DIRNAME = argv_str.substr(0, argv_str.find_last_of("\\")); + #elif _WIN64 + std::string __NERD_DIRNAME = argv_str.substr(0, argv_str.find_last_of("\\")); + #else + std::string __NERD_DIRNAME = argv_str.substr(0, argv_str.find_last_of("/")); + #endif + if(__NERD_DIRNAME.size() == argv_str.size()) + { + __dirname = ""; + } + else + { + __dirname = __NERD_DIRNAME; + } + NerdCore::VAR __NERD_VARARGS[__NERD_VARLENGTH]; + for( int i = 0; i < __NERD_VARLENGTH; i++) + { + __NERD_ARGS[i] = __Nerd_Argv[i]; + __NERD_VARARGS[i] = __Nerd_Argv[i]; + } + + //NerdCore::VAR Object = __NERD_Create_Var_Scoped_Copy_Anon( return __NERD_THIS; ); + //NerdCore::VAR String = __NERD_Create_Var_Scoped_Copy_Anon( return __NERD_THIS; ); + {DECL} + + + Object["prototype"] = new NerdCore::Class::Object(); + Object["prototype"]["valueOf"] = __NERD_Create_Var_Scoped_Copy_Anon({ + return __NERD_THIS; + }); + + Object["prototype"]["toString"] = __NERD_Create_Var_Scoped_Copy_Anon({ + return __NERD_THIS; + }); + + String["prototype"] = new NerdCore::Class::Object(); + String["prototype"]["__proto__"] = Object["prototype"]; + String["prototype"]["valueOf"] = __NERD_Create_Var_Scoped_Copy_Anon({ + return ((char*)__NERD_OBJECT(__NERD_THIS)->bind); + }); + String["prototype"]["toString"] = __NERD_Create_Var_Scoped_Copy_Anon({ + return ((char*)__NERD_OBJECT(__NERD_THIS)->bind); + }); + + Array["prototype"] = new NerdCore::Class::Object(); + Array["prototype"]["__proto__"] = Object["prototype"]; + Array["prototype"]["indexOf"] = __NERD_Create_Var_Scoped_Copy_Anon({ + + if(__NERD_VARLENGTH == 0) + { + return -1; + } + else + { + int i = -1; + int _max = __NERD_ARRAY(__NERD_THIS)->value.size(); + while(++i < _max) + { + if(__NERD_ARRAY(__NERD_THIS)->value[i] == __NERD_VARARGS[0]) + { + return i; + } + } + return -1; + } + }); + Array["prototype"]["push"] = __NERD_Create_Var_Scoped_Copy_Anon({ + + if(__NERD_VARLENGTH == 0) + { + return 0; + } + else + { + for(int i = 0; i < __NERD_VARLENGTH; i++) + { + __NERD_ARRAY(__NERD_THIS)->value.push_back(__NERD_VARARGS[i]); + } + return __NERD_VARLENGTH; + } + }); + + Array["isArray"] = __NERD_Create_Var_Scoped_Copy_Anon({ + + if(__NERD_VARLENGTH == 0) + { + return false; + } + else + { + if(__NERD_VARARGS[0].type == NerdCore::Enum::Type::Array) + { + return true; + } + return false; + } + }); + + try + { + {INIT} + + #ifdef __NERD_INIT_RAND_SEED + srand (time(NULL)); + #endif + + { + {CODE} + } + } + catch(NerdCore::VAR __NERD_Global_Exception) + { + __NERD_Log_Console(__NERD_Global_Exception); + exit(1); + } + return 0; +} diff --git a/compiler/native/squel/node.cpp b/compiler/native/squel/node.cpp deleted file mode 100644 index 573f35acb..000000000 --- a/compiler/native/squel/node.cpp +++ /dev/null @@ -1,42 +0,0 @@ - #define __NJS_ENV_NODE - #include "uv.h" - #include "nectar.hpp" - - using namespace NectarCore::Global; - using namespace NectarCore::Functions; - - var __NJS_ENV = "node"; - var __NJS_PLATFORM = "{{__PLATFORM__}}"; - #define __NJS_Create_Object() new NectarCore::Class::Object() - #define __NJS_Create_Array(_arr) new NectarCore::Class::Array(_arr) - #define __NJS_InitVar() NectarCore::VAR() - - uv_loop_t *__NJS_UV_DEFAULT_LOOP = (uv_loop_t *)malloc(sizeof(uv_loop_t)); - - {INCLUDE} - - {DECL} - -int main(int argc, char* argv[]) -{ - uv_loop_init(__NJS_UV_DEFAULT_LOOP); - var __NJS_ARGS = __NJS_Create_Array(); - for( int i = 0; i < argc; i++) - { - __NJS_ARGS[i] = argv[i]; - } - - {INIT} - - { - {CODE}; - } - - uv_run(__NJS_UV_DEFAULT_LOOP, UV_RUN_DEFAULT); - - uv_loop_close(__NJS_UV_DEFAULT_LOOP); - free(__NJS_UV_DEFAULT_LOOP); - return 0; - - return 0; -} diff --git a/compiler/native/squel/std.cpp b/compiler/native/squel/std.cpp index 622636e45..e942ba626 100644 --- a/compiler/native/squel/std.cpp +++ b/compiler/native/squel/std.cpp @@ -1,48 +1,111 @@ - #define __Nectar_ENV_STD - #include "nectar.hpp" +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + + #include + #include + #include + #include + #include + #include + #include + #include + #include + + + #include "nerdcore/src/nerd.hpp" + using namespace NerdCore::Global; - using namespace NectarCore::Global; - using namespace NectarCore::Functions; - using namespace NectarCore::JS; var __NJS_ENV = "std"; var __NJS_PLATFORM = "{{__PLATFORM__}}"; - - #define __NJS_Create_Object() new NectarCore::Class::Object() - #define __NJS_Create_Array(_arr) new NectarCore::Class::Array(_arr) - #define __NJS_InitVar() NectarCore::VAR() + NerdCore::Global::var __NERD_ARGS = new NerdCore::Class::Array(); + NerdCore::Global::var _ = new NerdCore::Class::Object(); + NerdCore::Global::var __dirname; {INCLUDE} - - {DECL} -var window; // browser check + -int main(int argc, char* argv[]) +int main(int __NERD_VARLENGTH, char* __Nerd_Argv[]) { - var __NJS_ARGS = __NJS_Create_Array(); - for( int i = 0; i < argc; i++) + {DECL} + + Object["prototype"] = new NerdCore::Class::Object(); + Object["prototype"]["valueOf"] = __NERD_Create_Var_Scoped_Copy_Anon({ + return __NERD_THIS; + }); + + Object["prototype"]["toString"] = __NERD_Create_Var_Scoped_Copy_Anon({ + return __NERD_THIS; + }); + + String["prototype"] = new NerdCore::Class::Object(); + String["prototype"]["__proto__"] = Object["prototype"]; + String["prototype"]["valueOf"] = __NERD_Create_Var_Scoped_Copy_Anon({ + return ((char*)__NERD_OBJECT(__NERD_THIS)->bind); + }); + String["prototype"]["toString"] = __NERD_Create_Var_Scoped_Copy_Anon({ + return ((char*)__NERD_OBJECT(__NERD_THIS)->bind); + }); + + std::string argv_str(__Nerd_Argv[0]); + + #ifdef _WIN32 + std::string __NERD_DIRNAME = argv_str.substr(0, argv_str.find_last_of("\\")); + #elif _WIN64 + __NERD_DIRNAME = argv_str.substr(0, argv_str.find_last_of("\\")); + #else + __NERD_DIRNAME = argv_str.substr(0, argv_str.find_last_of("/")); + #endif + if(__NERD_DIRNAME.size() == argv_str.size()) { - __NJS_ARGS[i] = argv[i]; + __dirname = ""; + } + else + { + __dirname = __NERD_DIRNAME; + } + NerdCore::VAR __NERD_VARARGS[__NERD_VARLENGTH]; + for( int i = 0; i < __NERD_VARLENGTH; i++) + { + __NERD_ARGS[i] = __Nerd_Argv[i]; + __NERD_VARARGS[i] = __Nerd_Argv[i]; } try { - {INIT} - #ifdef __Nectar_INIT_RAND_SEED + #ifdef __NERD_INIT_RAND_SEED srand (time(NULL)); #endif + { {CODE} - - NectarCore::Event::Loop(); } - } - catch(NectarCore::VAR __Nectar_Global_Exception) + catch(NerdCore::VAR __NERD_Global_Exception) { - __Nectar_Log_Console(__Nectar_Global_Exception); + __NERD_Log_Console(__NERD_Global_Exception); exit(1); } return 0; diff --git a/compiler/native/squel/stm32.cpp b/compiler/native/squel/stm32.cpp deleted file mode 100644 index 28a8f1492..000000000 --- a/compiler/native/squel/stm32.cpp +++ /dev/null @@ -1,25 +0,0 @@ - #include "mbed.h" - #include "nectar.cpp" - - using namespace NectarCore::Global; - using namespace NectarCore::Functions; - - var __NJS_ENV = "stm32"; - var __NJS_PLATFORM = "{{__PLATFORM__}}"; - - #define __NJS_Create_Object() new NectarCore::Class::Object() - #define __NJS_Create_Array(_arr) new NectarCore::Class::Array(_arr) - #define __NJS_InitVar() NectarCore::VAR() - {INCLUDE} - - {DECL} - -int main() -{ - {INIT} - - { - {CODE} - } - return 0; -} diff --git a/compiler/native/squel/test.cpp b/compiler/native/squel/test.cpp deleted file mode 100644 index ffd5eeb58..000000000 --- a/compiler/native/squel/test.cpp +++ /dev/null @@ -1,41 +0,0 @@ - #define _USE_MATH_DEFINES - - #include "nectar.hpp" - using namespace NectarCore::Global; - using namespace NectarCore::Functions; - - var __NJS_ENV = "test"; - var __NJS_PLATFORM = "{{__PLATFORM__}}"; - -/*** $ERROR ***/ -NectarCore::VAR __NJS_DOLLAR_ERROR = __Nectar_Create_Var_Unscoped_Anon( __Nectar_Log_Console(__Nectar_VARARGS[0]); exit(1); return NectarCore::VAR(); ); -/* end $ERROR */ - #define __NJS_Create_Object() new NectarCore::Class::Object() - #define __NJS_Create_Array(_arr) new NectarCore::Class::Array(_arr) - #define __NJS_InitVar() NectarCore::VAR() - {INCLUDE} - - {DECL} - -int main(int argc, char* argv[]) -{ - var __NJS_ARGS = __NJS_Create_Array(); - for( int i = 0; i < argc; i++) - { - __NJS_ARGS[i] = NectarCore::VAR(argv[i]); - } - - try - { - {INIT} - { - {CODE} - } - } - catch(NectarCore::VAR __NJS_Global_Exception) - { - __Nectar_Log_Console(__NJS_Global_Exception); - exit(1); - } - return 0; -} diff --git a/compiler/native/squel/wasm.cpp b/compiler/native/squel/wasm.cpp index 79571d699..111edbb93 100644 --- a/compiler/native/squel/wasm.cpp +++ b/compiler/native/squel/wasm.cpp @@ -1,26 +1,24 @@ - #define __Nectar_ENV_WASM - #include "nectar.cpp" + #define __NERD_ENV_WASM + #include "nerdcore/src/nerd.hpp" - using namespace NectarCore::Global; - using namespace NectarCore::Functions; + using namespace NerdCore::Global; + using namespace NerdCore::Functions; - var __NJS_ENV = "wasm"; - var __NJS_PLATFORM = "{{__PLATFORM__}}"; - - #define __NJS_Create_Object() new NectarCore::Class::Object() - #define __NJS_Create_Array(_arr) new NectarCore::Class::Array(_arr) - #define __NJS_InitVar() NectarCore::VAR() + var __NERD_ENV = "wasm"; + var __NERD_PLATFORM = "{{__PLATFORM__}}"; + NerdCore::Global::var __NERD_ARGS = new NerdCore::Class::Array(); + {INCLUDE} - - {DECL} -int main(int argc, char* argv[]) +int main(int __NERD_VARLENGTH, char* __Nerd_Argv[]) { - var __NJS_ARGS = __NJS_Create_Array(); + {DECL} - for( int i = 0; i < argc; i++) + NerdCore::VAR __NERD_VARARGS[__NERD_VARLENGTH]; + for( int i = 0; i < __NERD_VARLENGTH; i++) { - __NJS_ARGS[i] = argv[i]; + __NERD_ARGS[i] = __Nerd_Argv[i]; + __NERD_VARARGS[i] = __Nerd_Argv[i]; } try @@ -28,19 +26,18 @@ int main(int argc, char* argv[]) {INIT} - #ifdef __Nectar_INIT_RAND_SEED + #ifdef __NERD_INIT_RAND_SEED srand (time(NULL)); #endif + { {CODE} - - NectarCore::Event::Loop(); } } - catch(NectarCore::VAR __Nectar_Global_Exception) + catch(NerdCore::VAR __NERD_Global_Exception) { - __Nectar_Log_Console(__Nectar_Global_Exception); + __NERD_Log_Console(__NERD_Global_Exception); exit(1); } return 0; diff --git a/compiler/native/visitor/helpers/arrayExpression.js b/compiler/native/visitor/helpers/arrayExpression.js deleted file mode 100644 index aa8f59030..000000000 --- a/compiler/native/visitor/helpers/arrayExpression.js +++ /dev/null @@ -1,30 +0,0 @@ -function arrayExpression(_path, _main) -{ - var prop = []; - var _rnd = RND(); - var _set = "__NJS_GEN_RND_" + RND(); - - var _setter = `inline NectarCore::VAR ${_set}() { NectarCore::VAR ${_rnd} = __NJS_Create_Array();`; - for(var i = 0; i < _path.elements.length; i++) - { - if(_path.elements[i].type == "NumericLiteral") _setter += `${_rnd}[${i}] = ${_path.elements[i].extra.raw};`; - else if(_path.elements[i].type == "ArrayExpression") - { - var _a = VISITOR.arrayExpression(_path.elements[i], _main); - COMPILER.DECL.push(_a.setter); - _setter += `${_rnd}[${i}] = ${_a.getter}();`; - } - else if (_path.elements[i].type == "StringLiteral") - { - if(_path.elements[i].extra.raw[0] && _path.elements[i].extra.raw[0] == "'") - { - _path.elements[i].extra.raw = '"' + _path.elements[i].value.replace(/\\/g, '\\\\').replace(/"/g, '\\\"') + '"'; - } - _setter += `${_rnd}[${i}] = ${babel.generate(_path.elements[i]).code};`; - } - else _setter += `${_rnd}[${i}] = ${babel.generate(_path.elements[i]).code};`; - } - _setter += `return ${_rnd};}`; - return {setter: _setter, getter: _set}; -} -module.exports = arrayExpression; \ No newline at end of file diff --git a/compiler/native/visitor/helpers/callExpression.js b/compiler/native/visitor/helpers/callExpression.js deleted file mode 100644 index 3fbf5b731..000000000 --- a/compiler/native/visitor/helpers/callExpression.js +++ /dev/null @@ -1,224 +0,0 @@ - var structManagement = require("./structManagement.js"); - var nativeManagement = require("./nativeManagement.js"); - var fixedArrayManagement = require("./fixedArrayManagement.js"); -function callExpression(_path, _main) -{ - - if(!_path.callee || !_path.callee.name) - { - VISITOR.disableFastFunction(_path.callee.name); - } - - if(_path.callee && _path.callee.name && (VISITOR.Nectar_START.indexOf(_path.callee.name.substring(0, 9)) > -1 || VISITOR.NO_MODIFY_CALL.indexOf(_path.callee.name) > -1)) - { - return ""; - } - - var _obj = _path.callee; - - // If using Nectar.functionStruct - if(_obj.type == "MemberExpression" && _obj.object.type == "Identifier" - && _obj.object.name == "Nectar") - { - if(_obj.property.type == "Identifier") - { - if(_obj.property.name == "createStruct") - { - var _args = structManagement.verifyArguments(_path.arguments); - if(_args.length < 2) - { - console.log("[!] Error: createStruct requires at least 2 parameters: name, member"); - process.exit(1); - } - else - { - var _name = _args.splice(0,1)[0]; - var _res = structManagement.createStruct(_name, _args); - _main.replaceWithSourceString(_res); - } - } - else if(_obj.property.name == "initStruct") - { - var _args = structManagement.verifyArguments(_path.arguments); - - if(_args.length != 1) - { - console.log("[!] Error: initStruct requires 1 parameter: name"); - process.exit(1); - } - else - { - var _name = _args.splice(0,1)[0]; - var _res = structManagement.initStruct(_name); - _main.replaceWithSourceString(_res); - } - } - else if(_obj.property.name == "initInt") - { - var _args = _path.arguments; - if(_args.length < 1 || _args.length < 2) - { - console.log("[!] Error: initInt requires 1 or 2 parameters: name, value"); - process.exit(1); - } - - nativeManagement.validateName(_args[0], "initInt"); - - if(_args[1] && _args[1].type == "StringLiteral") - { - console.log("[!] Error: initInt value parameter cannot be a String Literal"); - process.exit(1); - } - _main.insertBefore(babel.parse(nativeManagement.initInt(_args[0].value, _args[1].value))); - _main.replaceWithSourceString("__Nectar_Boolean_TRUE"); - } - else if(_obj.property.name == "initDouble") - { - var _args = _path.arguments; - if(_args.length < 1 || _args.length < 2) - { - console.log("[!] Error: initInt requires 1 or 2 parameters: name, value"); - process.exit(1); - } - - nativeManagement.validateName(_args[0], "initDouble"); - - if(_args[1] && _args[1].type == "StringLiteral") - { - console.log("[!] Error: initInt value parameter cannot be a String Literal"); - process.exit(1); - } - _main.insertBefore(babel.parse(nativeManagement.initDouble(_args[0].value, _args[1].value))); - _main.replaceWithSourceString("__Nectar_Boolean_TRUE"); - } - else if(_obj.property.name == "initString") - { - var _args = _path.arguments; - if(_args.length < 1 || _args.length < 2) - { - console.log("[!] Error: initInt requires 1 or 2 parameters: name, value"); - process.exit(1); - } - - nativeManagement.validateName(_args[0], "initString"); - - if(_args[1] && _args[1].type == "NumericLiteral") - { - console.log("[!] Error: initInt value parameter cannot be a Numeric Literal"); - process.exit(1); - } - if(_args[1] && _args[1].type == "StringLiteral") - { - _args[1].value = `"${_args[1].value}"`; - } - _main.insertBefore(babel.parse(nativeManagement.initString(_args[0].value, _args[1].value))); - _main.replaceWithSourceString("__Nectar_Boolean_TRUE"); - } - else if(_obj.property.name == "fixedArray") - { - var _args = _path.arguments; - if(_args.length != 1) - { - console.log("[!] Error: fixedArray requires 1 parameter: size"); - process.exit(1); - } - - fixedArrayManagement.validateLength(_args[0]); - _main.replaceWithSourceString(fixedArrayManagement.initFixedArray(_args[0].value)); - } - } - } - - // If using obj.NStruct() - if(_obj.type == "MemberExpression" && _obj.property.type == "Identifier" - && _obj.property.name == "NStruct") - { - var _args = structManagement.verifyArguments(_path.arguments); - if(_args.length != 1) - { - console.log("[!] Error: NStruct requires only 1 parameters: name"); - process.exit(1); - } - var exp = babel.generate(_path).code.split("."); - var index = -1; - for(var i = 0; i < exp.length; i++) - { - if(exp[i].indexOf("NStruct(") == 0) - { - index = i; - break; - } - } - var name = exp.splice(index, 1); - exp = exp.join("."); - if(_main.container.property) - { - var _member = _main.container.property.name; - var sAccess = structManagement.accessStruct(exp, _args[0], _member); - if(sAccess.struct) - { - _main.replaceWithSourceString(sAccess.code); - return; - } - else - { - // struct member does not exist - // we fall back on hashmap - _main.replaceWithSourceString(sAccess.code); - _main.container.property.type = "StringLiteral"; - _main.container.property.extra = { rawValue: _main.container.property.name, raw: '"' + _main.container.property.name +'"'}; - _main.container.property.value = _main.container.property.name; - _main.container.computed = true; - } - } - else - { - console.log("[!] Error: NStruct() call needs to be followed by a member accessor"); - process.exit(1); - } - } - - if(_obj.name) VISITOR.checkUndefVar(_obj.name); - - - var _fName = _path.callee.name; - - if(!COMPILER.INFO.CALL[_fName]) COMPILER.INFO.CALL[_fName] = []; - VISITOR.addFunctionVarParam(_fName, _path.arguments.length); - - if(_path.arguments.length > 0) - { - if(COMPILER.INFO.CALL[_fName].indexOf(_path.arguments.length) < 0) - { - COMPILER.INFO.CALL[_fName].push(_path.arguments.length); - } - - for(var i = 0; i < _path.arguments.length; i++) - { - VISITOR.addFunctionVarCall(_fName, _path.arguments[i].type); - - if(_path.arguments[i].type == "ArrayExpression") - { - var _arr = VISITOR.arrayExpression(_path.arguments[i]); - - COMPILER.DECL.push(_arr.setter); - } - else if(_path.arguments[i].type == "FunctionExpression") - { - var _tmp = "__Nectar_TMP_LAMBDA" + RND(); - var _gen = `${_tmp} = ${babel.generate(_path.arguments[i]).code}`; - _main.insertBefore(babel.parse(_gen).program.body[0].expression); - _path.arguments[i].type = "Identifier"; - _path.arguments[i].name = _tmp; - } - } - } - else - { - if(COMPILER.INFO.CALL[_fName].indexOf(0) < 0) - { - COMPILER.INFO.CALL[_fName].push(0); - } - } -} -module.exports = callExpression; \ No newline at end of file diff --git a/compiler/native/visitor/helpers/fixedArrayManagement.js b/compiler/native/visitor/helpers/fixedArrayManagement.js deleted file mode 100644 index d994a5046..000000000 --- a/compiler/native/visitor/helpers/fixedArrayManagement.js +++ /dev/null @@ -1,37 +0,0 @@ -var warning = false; -function sayExperimental() -{ - if(!warning) - { - warning = true; - console.log("[*] NectarJS FixedArray API is experimental and may change, please use it with caution"); - } -} - -function initFixedArray(_length) -{ - sayExperimental(); - return `__Nectar_Create_FixedArray(${_length})`; -} - -function validateLength(_length) -{ - if(_length.type == "StringLiteral") - { - console.log(`[!] Error: ${fn} name parameter can't be a String Literal`); - process.exit(1); - } - if(_length.value <= 0) - { - console.log(`[!] Error: Fixed Array length must be > 0`); - process.exit(1); - } -} - -var fixedArrayMgmt = -{ - initFixedArray: initFixedArray, - validateLength: validateLength, -} - -module.exports = fixedArrayMgmt; \ No newline at end of file diff --git a/compiler/native/visitor/helpers/helper.js b/compiler/native/visitor/helpers/helper.js deleted file mode 100644 index 0991bdb2f..000000000 --- a/compiler/native/visitor/helpers/helper.js +++ /dev/null @@ -1,104 +0,0 @@ -VISITOR.pushDeclVar = function(_name, _index) -{ - if(_index == undefined) - { - var currentScope = VISITOR.CURRENT_Function + 1; - COMPILER.VAR_STATE[currentScope].push(_name); - } - else COMPILER.VAR_STATE[_index].push(_name); -} - -VISITOR.getDeclVar = function(_name, _index) -{ - var _state; - if(_index == undefined) - { - var currentScope = VISITOR.CURRENT_Function + 1; - _state = COMPILER.VAR_STATE[currentScope].push(_name); - } - else _state =COMPILER.VAR_STATE[_index].push(_name); - console.log(_state); -} - -VISITOR.checkUndefVar = function(_name) -{ - var currentScope = VISITOR.CURRENT_Function + 1; - var _exists = false; - - for(var i = currentScope; i > -1; i--) - { - if(COMPILER.VAR_STATE[i].indexOf(_name) > -1) - { - _exists = true; - break; - } - else if(COMPILER.GLOBAL.indexOf(_name) > -1) - { - _exists = true; - break; - } - } - - if(!_exists) - { - COMPILER.VAR_STATE[currentScope].push(_name); - COMPILER.DECL.push( "var " + _name + ";"); - - } -} - -VISITOR.addFunctionVarInit = function(_name) -{ - if(VISITOR.CURRENT_Function > -1) - { - if(COMPILER.INFO.SCOPE[VISITOR.Function_STATE[VISITOR.CURRENT_Function]].init.indexOf(_name) < 0) - COMPILER.INFO.SCOPE[VISITOR.Function_STATE[VISITOR.CURRENT_Function]].init.push(_name); - } -} - -VISITOR.addFunctionVarUse = function(_value) -{ - if(VISITOR.CURRENT_Function > -1) - { - if(COMPILER.INFO.SCOPE[VISITOR.Function_STATE[VISITOR.CURRENT_Function]].use.indexOf(_value) < 0 && VISITOR.IGNORE.indexOf(_value) < 0) - COMPILER.INFO.SCOPE[VISITOR.Function_STATE[VISITOR.CURRENT_Function]].use.push(_value); - } -} - -VISITOR.addFunctionVarCall = function(_id, _type) -{ - if(COMPILER.INFO.SCOPE[_id] && COMPILER.INFO.SCOPE[_id].call.indexOf(_type) < 0) - COMPILER.INFO.SCOPE[_id].call.push(_type); -} - -VISITOR.addFunctionVarParam = function(_id, _number) -{ - if(COMPILER.INFO.SCOPE[_id] && COMPILER.INFO.SCOPE[_id].param.indexOf(_number) < 0) - COMPILER.INFO.SCOPE[_id].param.push(_number); -} - -VISITOR.disableFastFunction = function() -{ - if(COMPILER.INFO.SCOPE[VISITOR.Function_STATE[VISITOR.CURRENT_Function]]) - { - //COMPILER.INFO.SCOPE[VISITOR.Function_STATE[VISITOR.CURRENT_Function]].fast = false; - } -} - -VISITOR.readOnlyVar = function(_name) -{ - VISITOR.addFunctionVarInit(_name); - if(COMPILER.READ_ONLY.indexOf(_name) > -1) - { - console.log("[!] Fatal error: " + _name + " is a read only variable"); - process.exit(1); - } -} - -VISITOR.objectExpression = require("./objectExpression.js"); - -VISITOR.memberExpression = require("./memberExpression.js"); - -VISITOR.callExpression = require("./callExpression.js"); - -VISITOR.arrayExpression = require("./arrayExpression.js"); diff --git a/compiler/native/visitor/helpers/memberExpression.js b/compiler/native/visitor/helpers/memberExpression.js deleted file mode 100644 index 30251dc00..000000000 --- a/compiler/native/visitor/helpers/memberExpression.js +++ /dev/null @@ -1,52 +0,0 @@ -function memberExpression(_path, _root) -{ - - if(_path.type == "MemberExpression") - { - if(_path.object.type == "CallExpression") - { - if(_path.object.callee.property.type == "Identifier" && _path.object.callee.property.name == "NStruct" ) - { - return; - } - } - } - - var _obj = _path; - - if(_obj.object && _obj.object.type == "Identifier") - { - VISITOR.checkUndefVar(_obj.object.name); - VISITOR.readOnlyVar(_obj.object.name); - } - else if(_obj.object && _obj.object.type == "ThisExpression" && _root) - { - _obj.object.type = "Identifier"; - _obj.object.name = _root; - } - - while(_obj) - { - if(_obj.property && !_obj.computed) - { - if(_obj.property.type == "Identifier") - { - if(_obj.object.type == "CallExpression" && _obj.object.callee.property.name == "NStruct") - { - // nothing to do - } - else - { - _obj.property.type = "StringLiteral"; - _obj.property.extra = { rawValue: _obj.property.name, raw: '"' + _obj.property.name +'"'}; - _obj.property.value = _obj.property.name; - _obj.computed = true; - } - } - } - - if(_obj.object) _obj=_obj.object; - else { _obj = null; break; } - } -} -module.exports = memberExpression; \ No newline at end of file diff --git a/compiler/native/visitor/helpers/nativeManagement.js b/compiler/native/visitor/helpers/nativeManagement.js deleted file mode 100644 index 5534491d0..000000000 --- a/compiler/native/visitor/helpers/nativeManagement.js +++ /dev/null @@ -1,58 +0,0 @@ -var warning = false; -function sayExperimental() -{ - if(!warning) - { - warning = true; - console.log("[*] NectarJS Native API is experimental and may change, please use it with caution"); - } -} - -function initInt(_name, _value) -{ - sayExperimental(); - if(!_value) - { - _value = "0"; - } - return `__Nectar_Init_Int(${_name}, ${_value})`; -} - -function initDouble(_name, _value) -{ - sayExperimental(); - if(!_value) - { - _value = "0"; - } - return `__Nectar_Init_Double(${_name}, ${_value})`; -} - -function initString(_name, _value) -{ - sayExperimental(); - if(!_value) - { - _value = "\"\""; - } - return `__Nectar_Init_String(${_name}, ${_value})`; -} - -function validateName(_name, fn) -{ - if(_name.type != "StringLiteral") - { - console.log(`[!] Error: ${fn} name parameter has to be a String Literal`); - process.exit(1); - } -} - -var NativeMgmt = -{ - initInt: initInt, - initDouble: initDouble, - initString: initString, - validateName: validateName, -} - -module.exports = NativeMgmt; \ No newline at end of file diff --git a/compiler/native/visitor/helpers/objectExpression.js b/compiler/native/visitor/helpers/objectExpression.js deleted file mode 100644 index cb0d9a531..000000000 --- a/compiler/native/visitor/helpers/objectExpression.js +++ /dev/null @@ -1,90 +0,0 @@ -function objectExpression(_path, _name) -{ - var _code = ""; - - var _key; - var _value; - - if(_path.key.name) - { - - _key = _path.key.name; - } - else _key = _path.key.value; - - if(_path.value.name) - { - _value = _path.value.name; - COMPILER.INFO.VALUE.push(_value); - } - - else if(_path.value.type == "ObjectProperty") - { - _code += VISITOR.objectExpression(_path.value, _key); - } - else if(_path.value.type == "ArrayExpression") - { - var _arr = VISITOR.arrayExpression(_path.value, _key); - COMPILER.DECL.push(_arr.setter + ";"); - _code += _name + "[\"" + _key + "\"] = " + _arr.getter + "();" ; - } - else if(_path.value.type == "FunctionExpression") - { - var _value = RND(); - COMPILER.INFO.Function.push(_value); - _code += "var " + _value + " = " + babel.generate(_path.value).code + ";"; - } - else if(_path.value.type == "ObjectExpression") - { - var _subRND = RND(); - _code += "var " + _subRND + " = __NJS_Create_Object();"; - for(var i = 0; i < _path.value.properties.length; i++) - { - _code += VISITOR.objectExpression(_path.value.properties[i], _subRND); - } - _code += _name + "[\"" + _key + "\"] = " + _subRND + ";"; - } - else if(_path.value.type == "MemberExpression") - { - VISITOR.memberExpression(_path.value); - _code += _name + "[\"" + _key + "\"] = " + babel.generate(_path.value).code + ";"; - } - else if(_path.value.type == "BooleanLiteral") - { - _value = _path.value.value; - } - else if(_path.value.type == "BinaryExpression") - { - if(_path.value.operator == "===") - { - var _eq = "__Nectar_EQUAL_VALUE_AND_TYPE("; - _eq += babel.generate(_path.node.left).code + "," - _eq += babel.generate(_path.node.right).code + ")"; - _path.replaceWithSourceString(_eq); - } - else if(_path.value.operator == "!==") - { - var _not_eq = "__Nectar_NOT_EQUAL_VALUE_AND_TYPE("; - _not_eq += babel.generate(_path.node.left).code + "," - _not_eq += babel.generate(_path.node.right).code + ")"; - _path.replaceWithSourceString(_not_eq); - } - if(_path.value.left.type == "MemberExpression") VISITOR.memberExpression(_path.value.left, _name); - if(_path.value.right.type == "MemberExpression") VISITOR.memberExpression(_path.value.right, _name); - - _code += _name + "[\"" + _key + "\"] = " + babel.generate(_path.value).code + ";"; - } - else if(_path.value.type == "UnaryExpression") - { - _code += _name + "[\"" + _key + "\"] = " + babel.generate(_path.value).code + ";"; - } - else if(_path.value.extra) _value = _path.value.extra.raw; - else - { - console.log("Visitor VISITOR.objectExpression not implemented yet for " + _path.value.type); - process.exit(0); - } - if(_value) _code += _name + "[\"" + _key + "\"] = " + _value + ";"; - return _code; -} -module.exports = objectExpression; \ No newline at end of file diff --git a/compiler/native/visitor/helpers/structManagement.js b/compiler/native/visitor/helpers/structManagement.js deleted file mode 100644 index dc7f98ae5..000000000 --- a/compiler/native/visitor/helpers/structManagement.js +++ /dev/null @@ -1,124 +0,0 @@ -var supportedType = ["int", "double", "string"]; -var warning = false; -function sayExperimental() -{ - if(!warning) - { - warning = true; - console.log("[*] NectarJS Struct API is experimental and may change, please use it with caution"); - } -} -var StructList = {}; -var Key = 0; - -function structShouldntExist(_name) -{ - if(StructList[_name]) - { - console.log(`[!] Error: a Struct with name '${_name}' already exist`); - process.exit(1); - } -} - -function structShouldExist(_name) -{ - if(!StructList[_name]) - { - console.log(`[!] Error: a Struct with name '${_name}' does not exist`); - process.exit(1); - } -} - -function memberExists(_name, _member) -{ - structShouldExist(_name) - if(StructList[_name].members.indexOf(_member) < 0) - { - return false; - } - else return true; -} - -function createStruct(_name, _members) -{ - sayExperimental(); - structShouldntExist(_name); - - var _mOnly = []; - for(var i = 0; i < _members.length; i++) - { - _mOnly.push( _members[i].split(":")[0]); - } - - StructList[_name] = - { - members: _mOnly, - key: Key, - } - Key++; - var _m = ""; - for(var i = 0; i < _members.length; i++) - { - if(_members[i].indexOf(":") > 0) - { - _members[i] = _members[i].split(":"); - var _v = _members[i].splice(0,1); - _members[i] = _members[i].join(":"); - if(supportedType.indexOf(_members[i]) < 0) - { - console.log(`[!] Error: unsupported struct type '${_members[i]}', supported are: ${supportedType}`); - process.exit(1); - } - if(_members[i] == "string") _members[i] = "std::string"; - _m += `${_members[i]} ${_v};` - } - else _m += `var ${_members[i]};` - } - COMPILER.DECL.push(`struct __Nectar_STRUCT_${StructList[_name].key} { ${_m} };`); - return `true`; -} - -function initStruct(_name) -{ - sayExperimental(); - structShouldExist(_name); - return `__Nectar_Create_Struct(__Nectar_STRUCT_${StructList[_name].key})`; -} - -function accessStruct(_exp, _name, _member) -{ - if(memberExists(_name, _member)) - { - return {code: `__Nectar_Access_Struct(${_exp}, __Nectar_STRUCT_${StructList[_name].key})`, struct:true}; - } - else - { - return {code: _exp, struct:false}; - } -} - -function verifyArguments(_arguments) -{ - sayExperimental(); - var _args = []; - for(var i = 0; i < _arguments.length; i++) - { - if(_arguments[i].type != "StringLiteral") - { - console.log(`[!] Error: parameters of Nectar.createStruct() have to be String Literals`); - process.exit(1); - } - _args.push(_arguments[i].value); - } - return _args; -} - -var StructMgmt = -{ - createStruct: createStruct, - initStruct: initStruct, - accessStruct: accessStruct, - verifyArguments: verifyArguments, -} - -module.exports = StructMgmt; \ No newline at end of file diff --git a/compiler/native/visitor/plugin/ArrayExpression.js b/compiler/native/visitor/plugin/ArrayExpression.js deleted file mode 100644 index 799af21e4..000000000 --- a/compiler/native/visitor/plugin/ArrayExpression.js +++ /dev/null @@ -1,8 +0,0 @@ -function ArrayExpression(_path) -{ - var _arr = VISITOR.arrayExpression(_path.node, _path); - COMPILER.DECL.push(_arr.setter + ";"); - _path.replaceWithSourceString(_arr.getter + "()"); -} - -module.exports = ArrayExpression; \ No newline at end of file diff --git a/compiler/native/visitor/plugin/AssignmentExpression.js b/compiler/native/visitor/plugin/AssignmentExpression.js deleted file mode 100644 index 0f8662f0c..000000000 --- a/compiler/native/visitor/plugin/AssignmentExpression.js +++ /dev/null @@ -1,47 +0,0 @@ -function AssignmentExpression(_path) -{ - - if(_path.node.left.type == "MemberExpression") - { - VISITOR.memberExpression(_path.node.left); - - if(_path.node.right && _path.node.right.type == "ArrayExpression") - { - var _a = VISITOR.arrayExpression(_path.node.right); - COMPILER.DECL.push(_a.setter); - _path.node.right = babel.parse(_a.getter + "();"); - } - else if(_path.node.right && _path.node.right.type == "ObjectExpression") - { - var _objAssign = ""; - for(var i = 0; i < _path.node.right.properties.length; i++) - { - _objAssign += VISITOR.objectExpression(_path.node.right.properties[i], _path.node.left.name); - } - _path.insertAfter(babel.parse(_objAssign)); - _path.node.right = babel.parse("__NJS_Create_Object()"); - } - } - else if(_path.node.left.type == "Identifier") - { - VISITOR.checkUndefVar(_path.node.left.name); - VISITOR.readOnlyVar(_path.node.left.name); - if(_path.node.right.type == "ArrayExpression") - { - var _a = VISITOR.arrayExpression(_path.node.right); - _path.node.right = babel.parse(_a.getter + "();"); - } - else if(_path.node.right.type == "ObjectExpression") - { - var _objAssign = ""; - for(var i = 0; i < _path.node.right.properties.length; i++) - { - _objAssign += VISITOR.objectExpression(_path.node.right.properties[i], _path.node.left.name); - } - _path.insertAfter(babel.parse(_objAssign)); - _path.node.right = babel.parse("__NJS_Create_Object()"); - } - } - -} -module.exports = AssignmentExpression; \ No newline at end of file diff --git a/compiler/native/visitor/plugin/BinaryExpression.js b/compiler/native/visitor/plugin/BinaryExpression.js deleted file mode 100644 index eab184310..000000000 --- a/compiler/native/visitor/plugin/BinaryExpression.js +++ /dev/null @@ -1,31 +0,0 @@ -function BinaryExpression(_path) -{ - if(_path.node.right.type == "StringLiteral" && _path.node.left.type == "NumericLiteral") - { - var _rnd = "__Nectar_TMP_NUMLIT" + RND(); - COMPILER.DECL.push("var " + _rnd + " = \"" + _path.node.left.value + "\";"); - _path.node.left.type = "Identifier"; - _path.node.left.name = _rnd; - } - - if(_path.node.operator == "===") - { - var _eq = "__Nectar_EQUAL_VALUE_AND_TYPE("; - _eq += babel.generate(_path.node.left).code + "," - _eq += babel.generate(_path.node.right).code + ")"; - _path.replaceWithSourceString(_eq); - } - else if(_path.node.operator == "!==") - { - var _not_eq = "__Nectar_NOT_EQUAL_VALUE_AND_TYPE("; - _not_eq += babel.generate(_path.node.left).code + "," - _not_eq += babel.generate(_path.node.right).code + ")"; - _path.replaceWithSourceString(_not_eq); - } - // instanceof - else if(_path.node.operator == "instanceof") - { - _path.replaceWithSourceString(`__Nectar_instanceof(${babel.generate(_path.node.left).code},${babel.generate(_path.node.right).code})`); - } -} -module.exports = BinaryExpression; \ No newline at end of file diff --git a/compiler/native/visitor/plugin/BooleanLiteral.js b/compiler/native/visitor/plugin/BooleanLiteral.js deleted file mode 100644 index 5ca3f935a..000000000 --- a/compiler/native/visitor/plugin/BooleanLiteral.js +++ /dev/null @@ -1,7 +0,0 @@ -const TRUE = "__Nectar_Boolean_TRUE"; -const FALSE = "__Nectar_Boolean_FALSE"; -function BooleanLiteral(_path) -{ - _path.replaceWithSourceString(_path.node.value ? TRUE : FALSE); -} -module.exports = BooleanLiteral; \ No newline at end of file diff --git a/compiler/native/visitor/plugin/CallExpression.js b/compiler/native/visitor/plugin/CallExpression.js deleted file mode 100644 index 93d524058..000000000 --- a/compiler/native/visitor/plugin/CallExpression.js +++ /dev/null @@ -1,5 +0,0 @@ -function CallExpression(_path) -{ - VISITOR.callExpression(_path.node, _path); -} -module.exports = CallExpression; \ No newline at end of file diff --git a/compiler/native/visitor/plugin/CatchClause.js b/compiler/native/visitor/plugin/CatchClause.js deleted file mode 100644 index 3bf94351c..000000000 --- a/compiler/native/visitor/plugin/CatchClause.js +++ /dev/null @@ -1,12 +0,0 @@ -function CatchClause(_path) -{ - const paramPath = _path.get("param"); - if(!paramPath.node.name || paramPath.node.name != "e") - { - console.log("[Error] Catch clause needs an 'e' Exception argument."); - process.exit(1); - } - - paramPath.replaceWithSourceString("__Nectar_EXCEPTION_PARAMETER"); -} -module.exports = CatchClause; \ No newline at end of file diff --git a/compiler/native/visitor/plugin/ClassDeclaration.js b/compiler/native/visitor/plugin/ClassDeclaration.js deleted file mode 100644 index a098c0089..000000000 --- a/compiler/native/visitor/plugin/ClassDeclaration.js +++ /dev/null @@ -1,74 +0,0 @@ -var ClassDeclaration = -{ - enter(_path) - { - COMPILER.VAR_STATE.push([]); - VISITOR.pushDeclVar(_path.node.id.name, 0); - VISITOR.CURRENT_Function++; - VISITOR.Function_STATE.push(_path.node.id.name); - if(!COMPILER.INFO.SCOPE[_path.node.id.name]) COMPILER.INFO.SCOPE[_path.node.id.name] = {init:[], use:[], call:[], param: [], fast: true}; - var _class = " function __Nectar_CLASS_" + _path.node.id.name + "("; - var _ctor = ""; - var _body = ""; - var _static = ""; - var _globalParams = ""; - - if(_path.node.body && _path.node.body.body) - { - for(var o = 0; o < _path.node.body.body.length; o++) - { - if(_path.node.body.body[o].kind == "constructor") - { - _path.node.body.body[o].key == babel.parse(_path.node.id.name); - - for(var p = 0; p < _path.node.body.body[o].params.length; p++) - { - if(p > 0) _globalParams += ","; - _globalParams += _path.node.body.body[o].params[p].name; - } - - var _newBody = babel.generate(_path.node.body.body[o].body).code; - _newBody = _newBody.substring(1, _newBody.length -1); - _ctor += _newBody; - } - else if(_path.node.body.body[o].kind == "method") - { - var _method = ""; - if(_path.node.body.body[o].static) - { - _method = _path.node.id.name + "." + _path.node.body.body[o].key.name + "= function("; - } - else _method = "__Nectar_THIS." + _path.node.body.body[o].key.name + "= function("; - - var _params = ""; - for(var p = 0; p < _path.node.body.body[o].params.length; p++) - { - if(p > 0) _params += ","; - _params += _path.node.body.body[o].params[p].name; - } - _method += _params + ")\n"; - _method += "{\n'__NJS_CLASS_ANON__';" - _method += babel.generate(_path.node.body.body[o].body).code.substring(1); - - if(_path.node.body.body[o].static) _static += _method + "\n"; - else _body += _method + "\n"; - } - } - } - _class += _globalParams + "){\n"; - _class += _body; - _class += _ctor; - _class += "}"; - - var _n = babel.parse(_class); - _path.replaceWith(_n.program); - if(_static.length > 0) _path.insertAfter(babel.parse(_static)); - }, - exit(_path) - { - VISITOR.CURRENT_Function--; - VISITOR.Function_STATE.pop(); - COMPILER.VAR_STATE.pop(); - } -} -module.exports = ClassDeclaration; \ No newline at end of file diff --git a/compiler/native/visitor/plugin/ConditionalExpression.js b/compiler/native/visitor/plugin/ConditionalExpression.js deleted file mode 100644 index 37f0bfa3d..000000000 --- a/compiler/native/visitor/plugin/ConditionalExpression.js +++ /dev/null @@ -1,23 +0,0 @@ -function ConditionalExpression(_path) -{ - if(_path.node.consequent.type != _path.node.alternate.type) - { - - if(_path.node.alternate.type == "NumericLiteral" || _path.node.alternate.type == "StringLiteral" || _path.node.alternate.type == "UnaryExpression") - { - var _rnd = "__Nectar_TERNARY" + RND(); - COMPILER.DECL.push(`var ${_rnd} = ${_path.node.alternate.value}`); - _path.node.alternate.type = "Identifier"; - _path.node.alternate.name = _rnd; - } - if(_path.node.consequent.type == "NumericLiteral" || _path.node.consequent.type == "StringLiteral" || _path.node.consequent.type == "UnaryExpression") - { - var _rnd = "__Nectar_TERNARY" + RND(); - COMPILER.DECL.push(`var ${_rnd} = ${_path.node.consequent.value}`); - _path.node.consequent.type = "Identifier"; - _path.node.consequent.name = _rnd; - } - - } -} -module.exports = ConditionalExpression; \ No newline at end of file diff --git a/compiler/native/visitor/plugin/ExpressionStatement.js b/compiler/native/visitor/plugin/ExpressionStatement.js deleted file mode 100644 index 8ad8be491..000000000 --- a/compiler/native/visitor/plugin/ExpressionStatement.js +++ /dev/null @@ -1,14 +0,0 @@ -function ExpressionStatement(_path) -{ - if(_path.node.expression && _path.node.expression.type == "CallExpression" && !_path.node.expression.id - && _path.node.expression.callee && _path.node.expression.callee.type == "FunctionExpression") - { - var _nf = RND(); - var _code = "var " + _nf + " = " + babel.generate(_path.node.expression.callee).code + ";"; - var _ncode = `${_nf}()`; - _path.insertBefore(babel.parse(_code)); - _path.replaceWithSourceString(_ncode); - _path.skip; - } -} -module.exports = ExpressionStatement; \ No newline at end of file diff --git a/compiler/native/visitor/plugin/ForInStatement.js b/compiler/native/visitor/plugin/ForInStatement.js deleted file mode 100644 index b36ee5ed1..000000000 --- a/compiler/native/visitor/plugin/ForInStatement.js +++ /dev/null @@ -1,20 +0,0 @@ -function ForInStatement(_path) -{ - var _rnd = RND(); - var _count = RND(); - var _left = _path.node.left.declarations[0].id.name; - var _right = _path.node.right.name; - var _pre = "var " + _rnd + " = __Nectar_Object_Keys(" + _right + ");"; - var _loop = `for(var ${_count} = 0; ${_count} < ${_rnd}.length; ${_count}++){var ${_left} = ${_rnd}[${_count}];` - var _body = babel.generate(_path.node.body).code; - var _end = ""; - if(_body[0] == "{") - { - _body = _body.substring(1); - } - else _end = "}"; - _loop += _body + _end; - _path.insertBefore(babel.parse(_pre)); - _path.replaceWith(babel.parse(_loop)); -} -module.exports = ForInStatement; \ No newline at end of file diff --git a/compiler/native/visitor/plugin/FunctionDeclaration.js b/compiler/native/visitor/plugin/FunctionDeclaration.js deleted file mode 100644 index bdc91eca8..000000000 --- a/compiler/native/visitor/plugin/FunctionDeclaration.js +++ /dev/null @@ -1,46 +0,0 @@ -var FunctionDeclaration= -{ - enter(_path) - { - _path.node.VAR = {var:[], const:[]}; - if(_path.node.id) - { - COMPILER.VAR_STATE.push([]); - VISITOR.pushDeclVar(_path.node.id.name, 0); - - VISITOR.CURRENT_Function++; - VISITOR.Function_STATE.push(_path.node.id.name); - - if(!COMPILER.INFO.SCOPE[_path.node.id.name]) COMPILER.INFO.SCOPE[_path.node.id.name] = {init:[], use:[], call:[], param: [], fast: true}; - VISITOR.addFunctionVarInit(_path.node.id.name); - if(_path.node.params.length > 0) - { - for(var i = 0; i < _path.node.params.length; i++) - { - VISITOR.addFunctionVarInit(_path.node.params[i].name); - } - } - } - - }, - exit(_path) - { - var _hoistingVar = ""; - for(var i = 0; i < _path.node.VAR.var.length; i++) - { - _hoistingVar += "var " + _path.node.VAR.var[i] + ";"; - } - for(var i = 0; i < _path.node.VAR.const.length; i++) - { - _hoistingVar += "__Nectar_CONST " + _path.node.VAR.const[i] + ";"; - } - if(_hoistingVar.length > 0) _path.node.body.body.splice(0, 0, babel.parse(_hoistingVar)); - if(_path.node.id) - { - VISITOR.CURRENT_Function--; - VISITOR.Function_STATE.pop(); - COMPILER.VAR_STATE.pop(); - } - }, -} -module.exports = FunctionDeclaration; \ No newline at end of file diff --git a/compiler/native/visitor/plugin/Identifier.js b/compiler/native/visitor/plugin/Identifier.js deleted file mode 100644 index a823a76c8..000000000 --- a/compiler/native/visitor/plugin/Identifier.js +++ /dev/null @@ -1,11 +0,0 @@ -function Identifier(_path) -{ - if(_path.node.name.indexOf("$") > -1) - { - var _newId = _path.node.name.replace(/\$/, "__Nectar_DOLLAR_"); - VISITOR.addFunctionVarUse(_newId); - _path.replaceWith(babel.types.identifier(_newId)) - } - else VISITOR.addFunctionVarUse(_path.node.name); -} -module.exports = Identifier; \ No newline at end of file diff --git a/compiler/native/visitor/plugin/MemberExpression.js b/compiler/native/visitor/plugin/MemberExpression.js deleted file mode 100644 index c615fd055..000000000 --- a/compiler/native/visitor/plugin/MemberExpression.js +++ /dev/null @@ -1,5 +0,0 @@ -function MemberExpression(_path) -{ - VISITOR.memberExpression(_path.node); -} -module.exports = MemberExpression; \ No newline at end of file diff --git a/compiler/native/visitor/plugin/NewExpression.js b/compiler/native/visitor/plugin/NewExpression.js deleted file mode 100644 index 6bf158212..000000000 --- a/compiler/native/visitor/plugin/NewExpression.js +++ /dev/null @@ -1,6 +0,0 @@ -function NewExpression(_path) -{ - _path.node.type = "CallExpression"; - _path.node.callee.name = `__Nectar_NEW(${_path.node.callee.name})`; -} -module.exports = NewExpression; \ No newline at end of file diff --git a/compiler/native/visitor/plugin/NumericLiteral.js b/compiler/native/visitor/plugin/NumericLiteral.js deleted file mode 100644 index 84b92536f..000000000 --- a/compiler/native/visitor/plugin/NumericLiteral.js +++ /dev/null @@ -1,19 +0,0 @@ -function NumericLiteral(_path) -{ - if(_path.parent.type == "MemberExpression") - { - //_path.replaceWithSourceString("__Nectar_InitVar(" + _path.node.extra.raw + ")"); - //_path.skip(); - } - else if(_path.parent.type == "BinaryExpression") - { - var start = _path.node.start; - var end = _path.node.end; - if(_path.parent.left.start == start && _path.parent.left.end == end) - { - //_path.replaceWithSourceString("__Nectar_InitVar(" + _path.node.extra.raw + ")"); - //_path.skip(); - } - } -} -module.exports = NumericLiteral; \ No newline at end of file diff --git a/compiler/native/visitor/plugin/RegExpLiteral.js b/compiler/native/visitor/plugin/RegExpLiteral.js deleted file mode 100644 index cdb0d2de9..000000000 --- a/compiler/native/visitor/plugin/RegExpLiteral.js +++ /dev/null @@ -1,5 +0,0 @@ -function RegExpLiteral(_path) -{ - _path.replaceWithSourceString(`"${_path.node.extra.raw.replace(/\\/g, "\\\\")}"`); -} -module.exports = RegExpLiteral; \ No newline at end of file diff --git a/compiler/native/visitor/plugin/ReturnStatement.js b/compiler/native/visitor/plugin/ReturnStatement.js deleted file mode 100644 index 71aeeac50..000000000 --- a/compiler/native/visitor/plugin/ReturnStatement.js +++ /dev/null @@ -1,17 +0,0 @@ -function ReturnStatement(_path) -{ - if(_path.node && _path.node.argument && _path.node.argument.type == "MemberExpression") - { - const _arg = _path.get("argument"); - VISITOR.memberExpression(_path.node.argument); - } - else if(!_path.node.argument) - { - _path.node.argument = - { - "type":"Identifier", - "name": "undefined", - } - } -} -module.exports = ReturnStatement; \ No newline at end of file diff --git a/compiler/native/visitor/plugin/StringLiteral.js b/compiler/native/visitor/plugin/StringLiteral.js deleted file mode 100644 index ba76d236a..000000000 --- a/compiler/native/visitor/plugin/StringLiteral.js +++ /dev/null @@ -1,19 +0,0 @@ -function StringLiteral(_path) -{ - if(_path.node.extra.raw[0] && _path.node.extra.raw[0] == "'") - { - _path.node.extra.raw = '"' + _path.node.value.replace(/\\/g, '\\\\').replace(/"/g, '\\\"') + '"'; - } - - if(_path.parent.type == "MemberExpression" || _path.parent.type == "CallExpression" - || _path.parent.type == "AssignmentExpression" || _path.parent.type == "VariableDeclarator") - { - //nothing to do - } - else - { - _path.replaceWithSourceString("__Nectar_InitVar(" + _path.node.extra.raw + ")"); - _path.skip(); - } -} -module.exports = StringLiteral; \ No newline at end of file diff --git a/compiler/native/visitor/plugin/ThisExpression.js b/compiler/native/visitor/plugin/ThisExpression.js deleted file mode 100644 index 1a9783d51..000000000 --- a/compiler/native/visitor/plugin/ThisExpression.js +++ /dev/null @@ -1,6 +0,0 @@ -function ThisExpression(_path) -{ - _path.replaceWithSourceString("__Nectar_THIS"); -} - -module.exports = ThisExpression; \ No newline at end of file diff --git a/compiler/native/visitor/plugin/ThrowStatement.js b/compiler/native/visitor/plugin/ThrowStatement.js deleted file mode 100644 index 00ec2c1c6..000000000 --- a/compiler/native/visitor/plugin/ThrowStatement.js +++ /dev/null @@ -1,7 +0,0 @@ -function ThrowStatement(_path) -{ - var _err = "__Nectar_ERROR_" + RND(); - _path.insertBefore(babel.parse("var " + _err + " = " + babel.generate(_path.node.argument).code)); - _path.node.argument = babel.parse(_err); -} -module.exports = ThrowStatement; \ No newline at end of file diff --git a/compiler/native/visitor/plugin/UnaryExpression.js b/compiler/native/visitor/plugin/UnaryExpression.js deleted file mode 100644 index 33bae229f..000000000 --- a/compiler/native/visitor/plugin/UnaryExpression.js +++ /dev/null @@ -1,43 +0,0 @@ -function UnaryExpression(_path) -{ - // typeof - if (_path.node.operator == "typeof") - { - if (_path.node.argument.type == "MemberExpression") - { - VISITOR.memberExpression(_path.node.argument); - _path.replaceWithSourceString("__Nectar_typeof(" + babel.generate(_path.node.argument).code + ")"); - } - else - { - _path.replaceWithSourceString("__Nectar_typeof(" + babel.generate(_path.node.argument).code + ")"); - } - - - //_path.skip(); - } - // void - else if(_path.node.operator == "void") - { - var _rnd = "__Nectar_VOID_" + RND(); - COMPILER.DECL.push(`NectarCore::VAR ${_rnd}() { ${babel.generate(_path.node.arguments).code} return NectarCore::Global::undefined;};`); - VISITOR.pushDeclVar(_rnd); - _path.replaceWithSourceString(`${_rnd}()`); - } - else if(_path.node.operator == "delete") - { - if (_path.node.argument.type == "MemberExpression") - { - VISITOR.memberExpression(_path.node.argument); - - var _left = babel.generate(_path.node.argument.object).code; - var _right = _path.node.argument.property.extra.raw; - _path.replaceWithSourceString(`__Nectar_delete(${_left}, ${_right})`); - } - else - { - _path.replaceWithSourceString("__Nectar_Boolean_FALSE"); - } - } -} -module.exports = UnaryExpression; \ No newline at end of file diff --git a/compiler/native/visitor/plugin/VariableDeclaration.js b/compiler/native/visitor/plugin/VariableDeclaration.js deleted file mode 100644 index 39a8a17a3..000000000 --- a/compiler/native/visitor/plugin/VariableDeclaration.js +++ /dev/null @@ -1,86 +0,0 @@ -function VariableDeclaration(_path) -{ - if(_path.node.declarations) - { - var _hoisting = false; - for(var d = 0; d < _path.node.declarations.length; d++) - { - if(_path.node.declarations[d].id && _path.node.declarations[d].id.name) - { - VISITOR.pushDeclVar(_path.node.declarations[d].id.name); - VISITOR.readOnlyVar(_path.node.declarations[d].id.name); - if(COMPILER.ENV.name == "android" && COMPILER.STATE == "CODE") - { - if(VISITOR.CURRENT_Function < 0) _path.node.kind = ""; - COMPILER.DECL.push(" var " + _path.node.declarations[d].id.name + ";"); - } - else if(VISITOR.CURRENT_Function < 0) - { - if(_path.node.kind == "const") - { - _path.node.kind = "__Nectar_CONST"; - _path.insertAfter( babel.parse(`__Nectar_SET_CONST(${_path.node.declarations[d].id.name});`)); - } - else if(VISITOR.CURRENT_Function < 0) _path.node.kind = ""; - - if(COMPILER.INFO.HOISTING.indexOf(_path.node.declarations[d].id.name) < 0) - { - COMPILER.INFO.HOISTING.push(_path.node.declarations[d].id.name); - } - } - else if(_path.parent.type != "ForStatement" && (_path.node.kind == "var" || _path.node.kind == "const")) - { - const fnParent = _path.findParent(p => p && (p.type === 'Program' || p.type.includes('Function'))); - if(fnParent.node.VAR) - { - if(!_hoisting) _hoisting = true; - if(_path.node.kind == "var") - fnParent.node.VAR.var.push(_path.node.declarations[d].id.name); - else - fnParent.node.VAR.const.push(_path.node.declarations[d].id.name); - } - } - } - - if(_path.node.declarations.length == 1 && _path.node.declarations[0].init && _path.node.declarations[0].init.type == "NumericLiteral") - { - if(_path.parent.type == "ForStatement") - { - - _path.node.kind = "int"; - var _kind = "int" - var _right = babel.generate(_path.parentPath.node.test.right).code; - try - { - var _nbr = parseInt(_right); - if(_nbr > 2147483647 && _nbr < -2147483646) - { - _path.node.kind = "var"; - _kind = "var" - } - } - catch(e) - { - _path.node.kind = "var"; - _kind = "var" - } - if(_path.parentPath.node.test && _path.parentPath.node.test.type == "BinaryExpression") - { - var _new_int = "__Nectar_LOOP_INT" + RND(); - try - { - _path.parentPath.insertBefore(babel.parse(_new_int + " = " + babel.generate(_path.parentPath.node.test.right).code).program.body); - _path.parentPath.node.test = babel.parse( "(" + babel.generate(_path.parentPath.node.test.left).code + _path.parentPath.node.test.operator + _new_int + ")").program.body[0].expression; - COMPILER.DECL.push(_kind + " " + _new_int + ";"); - COMPILER.GLOBAL.push(_new_int); - }catch(e){} - } - - } - } - if(!(_path.node.declarations[d].init)) _path.node.declarations[d].init = babel.parse("__NJS_InitVar()"); - } - if(_hoisting) _path.node.kind = ""; - } -} -module.exports = VariableDeclaration; \ No newline at end of file diff --git a/compiler/native/visitor/plugin/VariableDeclarator.js b/compiler/native/visitor/plugin/VariableDeclarator.js deleted file mode 100644 index e4db25263..000000000 --- a/compiler/native/visitor/plugin/VariableDeclarator.js +++ /dev/null @@ -1,137 +0,0 @@ -var VariableDeclarator = -{ - enter(_path) - { - // Creating Arrays - if(_path.node.id && _path.node.id.name && _path.node.init && _path.node.init.type == "ArrayExpression") - { - var _newArray = ""; - var _name = _path.node.id.name; - var _el = _path.node.init.elements; - var _code = _name + " = __NJS_Create_Array();" - - for(var i = 0; i < _el.length; i++) - { - var _value; - if(_el[i].name) - { - _value = _el[i].name; - } - else if(_el[i].type == "NullLiteral") _value = "null"; - else if(_el[i].extra) _value = _el[i].extra.raw; - else if(_el[i].type == "ObjectProperty") - { - _o = true; - _code += VISITOR.objectExpression(_el[i], _name); - } - else if(_el[i].type == "ArrayExpression") - { - var _a = VISITOR.arrayExpression(_el[i]); - COMPILER.DECL.push(_a.setter + ";"); - _value = _a.getter + "()"; - } - else if(_el[i].type == "ObjectExpression") - { - var _obj = "__Nectar_TMP_OBJ_" + RND(); - var _set = "__Nectar_SET_OBJ_" + RND(); - VISITOR.pushDeclVar(_set); - var _setter = `inline NectarCore::VAR ${_set}() { var ${_obj} = __NJS_Create_Object();`; - - for(var j = 0; j < _el[i].properties.length; j++) - { - var _tmp = VISITOR.objectExpression(_el[i].properties[j], _obj); - _setter += _tmp + ";" - } - - _setter += `return ${_obj};}`; - COMPILER.DECL.push( _setter ); - _value = _set + "()"; - } - else - { - console.log("Visitor VariableDeclarator not implemented yet for " + _el[i].type); - process.exit(0); - } - _code += `${_name}[${i}] = ${_value};`; - - } - _path.replaceWith(babel.parse(_code)); - } - // Creating Object - else if(_path.node.id && _path.node.id.name && _path.node.init && _path.node.init.type == "ObjectExpression") - { - var _name = _path.node.id.name; - var _el = _path.node.init.properties; - var _code = _path.node.id.name + " = __NJS_Create_Object();" - - for(var i = 0; i < _el.length; i++) - { - var _o = false; - var _key; - var _value; - - if(_el[i].key &&_el[i].key.name) - { - _key = _el[i].key.name; - } - else _key = _el[i].key.value; - - if(_el[i].value && _el[i].value.name) - { - _value = _el[i].value.name; - } - else if(_el[i].type == "NullLiteral") _value = "null"; - else if(_el[i].type == "ObjectProperty") - { - _o = true; - _code += VISITOR.objectExpression(_el[i], _name); - } - else if(_el[i].value &&_el[i].value.extra) _value = _el[i].value.extra.raw; - else - { - console.log("Visitor VariableDeclarator not implemented yet for " + _el[i].type); - } - - if(_value && !_o) - { - _code += `${_name}["${_key}"] = ${_value};`; - COMPILER.INFO.VALUE.push(_value); - } - } - - _path.replaceWith(babel.parse(_code)); - } - else if(_path.node.init.type == "FunctionExpression") - { - _path.node.nectarId = "__Nectar_UNKNOWN" + RND(); - COMPILER.VAR_STATE.push([]); - VISITOR.pushDeclVar(_path.node.nectarId, 0); - VISITOR.CURRENT_Function++; - VISITOR.Function_STATE.push(_path.node.nectarId); - if(!COMPILER.INFO.SCOPE[_path.node.nectarId]) COMPILER.INFO.SCOPE[_path.node.nectarId] = {init:[], use:[], call:[], param: [], fast: true}; - - if(VISITOR.CURRENT_Function > -1) - { - var _directive = "\"SCOPED_FUNCTION\";"; - _path.node.init.body.body.splice(0, 0, babel.parse(_directive)); - } - } - - if(_path.node.init && _path.node.init.type == "File") - { - var _decl = babel.generate(_path.node).code; - if(_decl[_decl.length - 1] == ";") _decl = _decl.substring(0, _decl.length - 1); - _path.replaceWithSourceString(_decl); - } - }, - exit(_path) - { - if(_path.node.init.type == "FunctionExpression") - { - VISITOR.CURRENT_Function--; - VISITOR.Function_STATE.pop(); - COMPILER.VAR_STATE.pop(); - } - } -} -module.exports = VariableDeclarator; \ No newline at end of file diff --git a/compiler/native/visitor/visitor.js b/compiler/native/visitor/visitor.js deleted file mode 100644 index 504764584..000000000 --- a/compiler/native/visitor/visitor.js +++ /dev/null @@ -1,50 +0,0 @@ -global.VISITOR = {}; - -VISITOR.NO_MODIFY_CALL = ["require", "Object", "Array"]; -VISITOR.Nectar_START = ["__NJS_GEN", "__FFI"]; - -VISITOR.IGNORE = ["__Nectar_Call_Function", "__Nectar_Object_Set", "__Nectar_Object_Get", "__Nectar_VAR"]; -VISITOR.Function_STATE = []; - -VISITOR.CURRENT_Function = -1; - -require("./helpers/helper.js"); - -var njsVisitor = -{ - AssignmentExpression: require("./plugin/AssignmentExpression.js"), - BinaryExpression: require("./plugin/BinaryExpression.js"), - BooleanLiteral: require("./plugin/BooleanLiteral.js"), - CallExpression: require("./plugin/CallExpression.js"), - CatchClause: require("./plugin/CatchClause.js"), - ClassDeclaration: require("./plugin/ClassDeclaration.js"), - ExpressionStatement: require("./plugin/ExpressionStatement.js"), - ForInStatement: require("./plugin/ForInStatement.js"), - FunctionDeclaration: require("./plugin/FunctionDeclaration.js"), - Identifier: require("./plugin/Identifier.js"), - MemberExpression: require("./plugin/MemberExpression.js"), - NewExpression: require("./plugin/NewExpression.js"), - RegExpLiteral: require("./plugin/RegExpLiteral.js"), - ReturnStatement: require("./plugin/ReturnStatement.js"), - StringLiteral: require("./plugin/StringLiteral.js"), - ThisExpression: require("./plugin/ThisExpression.js"), - ThrowStatement: require("./plugin/ThrowStatement.js"), - UnaryExpression: require("./plugin/UnaryExpression.js"), - VariableDeclaration: require("./plugin/VariableDeclaration.js"), - VariableDeclarator: require("./plugin/VariableDeclarator.js"), - NumericLiteral: require("./plugin/NumericLiteral.js"), - ArrayExpression: require("./plugin/ArrayExpression.js"), - ConditionalExpression: require("./plugin/ConditionalExpression.js"), -}; - -var visitor = -{ - plugins: [ - function NectarJS() { - return { - visitor: njsVisitor, - }; - }, - ], -} -module.exports = visitor; diff --git a/compiler/self/base/cli/cliParser.ng b/compiler/self/base/cli/cliParser.ng new file mode 100644 index 000000000..5c79ed3ec --- /dev/null +++ b/compiler/self/base/cli/cliParser.ng @@ -0,0 +1,61 @@ +var parseCLI = function(args) +{ + var result = + { + error: false, + msg: "", + cli: {}, + stack: [], + useless: [] + }; + var useless = [0, 1]; + var withArgs = ["--target", "--spec", "--env", "--stack", "-o", "--preset", "--flash", "--compiler", "-c", "--build", "-b", "--option", "--register", "-r", "--setauthor", "--setid", "--setkey", "--setapi", "--setport", "--sethash", "--setsdk", "--setndk", "--setwin_inc_ucrt", "--setwin_lib_ucrt", "--setwin_lib_um", "--setxcode"]; + var noArgs = ["--install_external", "--debug", "--conserve", "--generate", "--config", "--reinit", "--example", "--examples" , "--prepare", "--project", "--run", "--clean", "--purge", "--check", "--no-check", "--verbose", "-v", "--tips", "--version", "--help", "-h", "--release", "--no-object-hashmap"]; + + + for(var i = 0; i < args.length; i++) + { + if( useless.indexOf(i) > -1 ) + { + result.useless.push(args[i]); + } + else if( withArgs.indexOf(args[i]) > -1) + { + if(args[i+1]) + { + result.cli[args[i]] = + { + state: true, + argument: args[i+1], + }; + i++; + } + else + { + result.error = true; + result.msg = "[!] Missing argument for " + args[i]; + break; + } + } + else if(noArgs.indexOf(args[i]) > -1) + { + result.cli[args[i]] = + { + state: true, + }; + } + else if(args[i].length > 0 && args[i][0] == "-") + { + if(withArgs.indexOf(args[i]) < 0 && noArgs.indexOf(args[i]) < 0) + { + result.error = true; + result.msg = "[!] Unknown parameter : " + args[i]; + break; + } + } + else result.stack.push(args[i]); + } + return result; +}; + +return parseCLI; \ No newline at end of file diff --git a/compiler/self/base/compiler/target.js b/compiler/self/base/compiler/target.js new file mode 100644 index 000000000..cd6bb5a29 --- /dev/null +++ b/compiler/self/base/compiler/target.js @@ -0,0 +1,30 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +var target = ["win-x86-32", "win-x86-64", "linux-x86-32", "linux-x86-64", "linux-arm32v7", + "arduino-uno", "arduino-mega1280", "arduino-mega2560", + "wasm", "wast", "asm-js", + "mac-osx", + "nucleo-l152re", "nucleo-l432kc" + ]; +module.exports = target; diff --git a/compiler/self/base/util/copyDirSync.js b/compiler/self/base/util/copyDirSync.js new file mode 100644 index 000000000..4c4a8cd91 --- /dev/null +++ b/compiler/self/base/util/copyDirSync.js @@ -0,0 +1,64 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +function copyDirSync( source, target ) +{ + var targetFile = target; + if ( fs.existsSync( target ) ) + { + if ( fs.lstatSync( target ).isDirectory() ) + { + targetFile = path.join( target, path.basename( source ) ); + } + } + fs.copyFileSync(source, targetFile); +} + +function copyFolderRecursiveSync( source, target, _root ) +{ + var files = []; + var targetFolder = path.join( target, path.basename( source ) ); + if(_root) targetFolder = target; + if ( !fs.existsSync( targetFolder ) ) + { + fs.mkdirSync( targetFolder ); + } + + if ( fs.lstatSync( source ).isDirectory() ) + { + files = fs.readdirSync( source ); + files.forEach( function ( file ) + { + var curSource = path.join( source, file ); + if ( fs.lstatSync( curSource ).isDirectory() ) + { + copyFolderRecursiveSync( curSource, targetFolder ); + } else + { + copyDirSync( curSource, targetFolder ); + } + } ); + } +} + +module.exports = copyFolderRecursiveSync; \ No newline at end of file diff --git a/compiler/self/base/util/copyRecursive.js b/compiler/self/base/util/copyRecursive.js new file mode 100644 index 000000000..fd2a7e54e --- /dev/null +++ b/compiler/self/base/util/copyRecursive.js @@ -0,0 +1,43 @@ +var copyRecursiveSync = function(src, dest) +{ + if(!fs.existsSync(src)) + { + console.log("[!] Warning: " + src + " doesn't exist"); + return; + } + if(fs.lstatSync( src ).isDirectory()) + { + var _newDest = path.dirname(dest); + copyDirSync(src, _newDest, true); + } + else + { + var _path = []; + + var _newDest = path.dirname(dest); + + _path.push(_newDest); + + while(path.dirname(_newDest) != _newDest) + { + _newDest = path.dirname(_newDest); + if(_newDest.indexOf(NERD_PATH) == 0) + { + _path.push(_newDest); + } + } + + for(var i = _path.length; i > -1; i--) + { + try + { + fs.mkdirSync(_path[i]); + } + catch(e){} + } + + fs.copyFileSync(src, dest); + } +}; + +module.exports = copyRecursiveSync; diff --git a/compiler/self/base/util/flash.js b/compiler/self/base/util/flash.js new file mode 100644 index 000000000..d1cc36402 --- /dev/null +++ b/compiler/self/base/util/flash.js @@ -0,0 +1,90 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +module.exports = Flash; +var fs = require("fs"); +var path = require("path"); + +function Flash(from, to, target, verb) +{ + switch(target) + { + case "uno": + execFlashArduino(from, to, "ATMEGA328P", "arduino", "19200", verb) + break; + case "mega1280": + execFlashArduino(from, to, "m1280", "arduino", "57600", verb) + break; + case "mega2560": + execFlashArduino(from, to, "m2560", "wiring", "115200", verb) + break; + case "nucleo-l152re": + case "nucleo-l432kc": + execFlashSTM32(from, to); + break; + default: + console.log("Nothing to do for target : " + target); + break; + } +} + +function execFlashArduino(from, to, model, driver, bauds, verb) +{ + var spawn = require('child_process').spawn; + var _flash = spawn('avrdude', ['-p', model, "-c", driver, "-P", to, "-b", bauds, "-F", "-U", "flash:w:"+from]); + + _flash.stdout.on('data', function(data) + { + if(verb) process.stdout.write(data.toString()); + }); + + _flash.stderr.on('data', function(data) + { + if(verb) process.stdout.write(data.toString()); + }); + + _flash.on('error', function(err) + { + console.log("[!] Error :"); + console.log(err) + }); + + _flash.on('close', function(code) + { + console.log("[+] Flashed") + }); +} + +function execFlashSTM32(from, to) +{ + try + { + fs.writeFileSync(path.join(to, from), fs.readFileSync(from)); + console.log("[+ Flashed]"); + } + catch(e) + { + console.log("[!] Your file is compiled, but an error occured while flashing, please try again.") + } + +} diff --git a/compiler/self/base/util/getExt.js b/compiler/self/base/util/getExt.js new file mode 100644 index 000000000..5b29b8577 --- /dev/null +++ b/compiler/self/base/util/getExt.js @@ -0,0 +1,64 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +module.exports = getExt; + +function getExt(target) +{ + switch(target) + { + case "wasm": + return ".wasm"; + break; + case "asm-js": + return ".asm.js"; + break; + case "wast": + return ".wast"; + break; + case "win-x86-32": + case "win-x86-64": + return "-" + target + ".exe"; + break; + case "nucleo-l432kc": + case "nucleo-l152re": + case "mac-osx": + case "linux-x86-32": + case "linux-x86-64": + case "linux-arm32v7": + return "-" + target + ".bin"; + break; + case "arduino-uno": + return "-" + target + ".hex"; + break; + case "arduino-mega1280": + return "-" + target + ".hex"; + break; + case "arduino-mega2560": + return "-" + target + ".hex"; + break; + default: + return ".bin"; + break; + } +} diff --git a/compiler/self/base/util/getTips.js b/compiler/self/base/util/getTips.js new file mode 100644 index 000000000..4c3f727ef --- /dev/null +++ b/compiler/self/base/util/getTips.js @@ -0,0 +1,64 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +module.exports = getTips; + +function getTips(target, file) +{ + switch(target) + { + case "wasm": + return ""; + break; + case "asm-js": + return "[*] Tips : run this file with node : 'node " + file + "', or embed it in a .html page with " + break; + case "wast": + return ""; + break; + case "win-x86-32": + case "win-x86-64": + return "[*] Tips : on Linux, you can run this .exe with Wine : 'wine " + file + "'" + break; + case "linux-x86-32": + case "linux-x86-64": + case "linux-arm32v7": + return "[*] Tips : on Linux, don't forget to : 'chmod +x " + file + "'." + break; + case "arduino-uno": + return "[*] Tips : avrdude -p ATMEGA328P -c arduino -P [COMPORT] -b 19200 -F -U flash:w:" + file; + break; + case "arduino-mega1280": + return "[*] Tips : avrdude -p m1280 -c arduino -P [COMPORT] -b 57600 -F -U flash:w:" + file; + break; + case "arduino-mega2560": + return "[*] Tips : avrdude -p m2560 -c wiring -P [COMPORT] -b 115200 -F -U flash:w:" + file; + break; + case "nucleo-l152re": + case "nucleo-l432kc": + return "[*] Connect your nucleo on your computer, and symple copy/paste " + file + " on the nucleo drive" + default: + return ""; + break; + } +} diff --git a/compiler/self/base/util/httpUtils.js b/compiler/self/base/util/httpUtils.js new file mode 100644 index 000000000..a0b0f72ff --- /dev/null +++ b/compiler/self/base/util/httpUtils.js @@ -0,0 +1,105 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +var http = require("http"); +var https = require("https"); + +module.exports.httpUtil = new httpUtil(http); +module.exports.httpsUtil = new httpUtil(https); + +/** + * httpUtil Catalog of standard http call + * @class httpUtil + * @name httpUtil + * @memberof WF + * +*/ +function httpUtil(httpHandler) +{ + + /** + * Send a http request. + * @memberof httpUtil + * @example wf.httpUtil.httpReq(opt, cbError, cbOk, "utf-8"); + * + */ + this.httpReq = function(opt, cbError, cbOk, encoding) + { + var data = ""; + if(opt.data) data = opt.data; + + if(!encoding) encoding = "utf8"; + opt.path = encodeURI(opt.path); + var request = httpHandler.request(opt); + request.on("error", function(err) + { + cbError(err); + + }); + request.on("response", function(response) + { + var data = ""; + response.on("data", function(chunk) + { + data += chunk.toString(encoding); + }); + response.on("end", function() + { + cbOk(data); + }); + }); + request.end(data); + return; + }; + + /** + * Send a http request and redirect output in a pipe, then call a callback when finished. + * @memberof httpUtil + * @example wf.httpUtil.httpReqPipe(opt, cbError, cbPipe, cbOk); + * + */ + this.httpReqPipe = function(opt, cbError,cbPipe, cbOk) + { + var data = ""; + if(opt.data) data = opt.data; + opt.path = encodeURI(opt.path); + var request = httpHandler.request(opt); + request.on("error", function(err) + { + cbError(err); + + }); + request.on("response", function(response) + { + if(cbPipe) + cbPipe(response); + response.on("end", function() + { + if(cbOk) + cbOk(); + }); + }); + request.end(data); + return; + }; +} diff --git a/compiler/self/base/util/rmdir.js b/compiler/self/base/util/rmdir.js new file mode 100644 index 000000000..6a14f9f18 --- /dev/null +++ b/compiler/self/base/util/rmdir.js @@ -0,0 +1,102 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +var rmdir = function(dir, callback) +{ + fs.readdir(dir, function(err, list) + { + if(err) + { + try + { + fs.unlink(dir, function(err) + { + callback(err); + }); + } + catch(e){} + } + else + { + var i = 0; + var j = list.length; + var cb = function(){ fs.rmdir(dir, function(err){if(callback && typeof(callback) == "function") callback(err);});}; + recursiveRm(dir, i, j, list, cb); + return; + } + }); + + function recursiveRm(from, i, j, list, cb) + { + + function nextFile() + { + i++; + if(i < j) + { + recursiveRm(from, i, j, list, cb); + } + else + { + if(cb && typeof cb == "function") + cb(); + } + } + var filename = ""; + + try + { + filename = path.join(from, list[i]); + } + catch(e) + { + nextFile(); + return; + } + + fs.stat(filename, function(err, stat) + { + if(err) + { + nextFile(); + } + else if(stat.isDirectory()) + { + if(filename) + { + rmdir(filename, nextFile); + } + else + { + nextFile(); + } + } + else + { + fs.unlink(filename, nextFile); + } + }); + } +}; + +module.exports = rmdir; \ No newline at end of file diff --git a/compiler/self/nerd.ng b/compiler/self/nerd.ng new file mode 100644 index 000000000..36ae737dc --- /dev/null +++ b/compiler/self/nerd.ng @@ -0,0 +1,39 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +_.VERSION = "0.1.1"; +_.fs = require("fs"); +_.console = require("console"); +_.os = require("os"); +_.path = require("path"); +_.process = require("process"); +_.querystring = require("querystring"); +_.child_process = require("child_process"); +_.execSync = _.child_process.execSync; +_.JSON = require("JSON"); + +_.extern = _.path.join(__dirname, "external"); + +_.console.log(_.extern); + +//var _parseCLI = require("./base/cli/cliParser.ng"); \ No newline at end of file diff --git a/docs/ADVANCED_USAGE.md b/docs/ADVANCED_USAGE.md deleted file mode 100644 index fa6e0a63f..000000000 --- a/docs/ADVANCED_USAGE.md +++ /dev/null @@ -1,114 +0,0 @@ -# Advanced usage - -## Table of contents - -* [Presets](#presets) -* [Environments](#environments) -* [Requirements and compilation](#requirements-and-compilation) -* - [Android](#android) -* - [iOS](#ios) -* - [Arduino](#arduino) -* - [STM32](#stm32) -* [Optimization](#optimization) -* - [Profiling](#profiling) -* [Compatibility Targets / Platforms](#compatibility-targetsplatforms) - -# Presets - -Select a compilation preset with `--preset [name]` - -It's recommended to use any of presets below instead -of passing optimization flags to compiler directly - -| Preset | Optimize for | -|--------|-----------------------| -| `speed`| Performance [default] | -| `size` | Output size | -| `none` | Compilation speed | - -# Environments - -Select a compilation environment with `--env [name]` - -NectarJS supports various compilation environments -and some of them provides global variables and APIs - -| Name | Environment | -|-----------|-------------------| -| `std` | *None* [default] | -| `node` | NodeJS | -| `arduino` | Arduino firmware* | -| `wasm` | WebAssembly file | -| `android` | Android APK* | - -* Some environments also need to specify compilation target with `--target [target]` - -# Requirements and compilation - -## Android - -1. Install Java, Android SDK (19+) and Android NDK (21+) - -2. Set path to SDK and NDK: - -`nectar --setsdk path_to_sdk --setndk path_to_ndk` - -> You can show your configuration with `nectar --config` - -3. Compile to Android APK file: - -`nectar app.js --env android` - -4. (Optional) Select your compilation target with `--target [release|debug]` - -## iOS - -1. Install Xcode - -2. Compile iOS app: - -`nectar app.js --env ios` - -3. (Optional) Compile and run app in device simulator with `--target 'iPhone-8, 13.5' --run` - -## Arduino - -1. Install a latest `avr-gcc` compiler that supports c++17 (download it [here](https://blog.zakkemble.net/avr-gcc-builds/)) - -2. Compile firmware for selected target: - -`nectar example/arduino-led.js --env arduino --target nano` - -3. (Optional) Flash new firmware to a connected board with `--flash` - -# STM32 - -1. Install `mbed-cli` and [set up environment](https://os.mbed.com/docs/mbed-os/v6.0/build-tools/install-and-set-up.html) - -2. Compile for selected target: - -`nectar example/stm32.js --env stm32 --target NUCLEO_F446RE` - - - -# Optimization - -## Profiling - -Profiling is a functionnality that improve the speed of your app by detecting the hot spots and improving their compilation. You have to compile your app twice: once before executing, and once after executing. - -These are the steps: - -1. Compile your app with the flags: `--profile gen --tmp perf`. --tmp value could be what you want, it's the target folder. -2. Execute your app -3. Recompile your app with the flags: `--profile use --tmp perf`. --tmp has to be the same value as step 1. -4. Enjoy your app get ~15% faster - - -# Compatibility targets/platforms - -Tests are made with GCC 7 and Clang 6 - -* All supported GCC platforms -* All supported Clang platforms -* All supported AVR-GCC platforms diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md deleted file mode 100644 index 929ce6125..000000000 --- a/docs/CHANGELOG.md +++ /dev/null @@ -1,86 +0,0 @@ -## VERSION 0.7.X -* Use c++17 -* Add void -* Add prototype support -* Update Fast Functions -* Refactoring -* Add Object.toString(), .toLocaleString(), .valueOf() -* Add simple event loop for std env -* Add --profile option - -## VERSION 0.6.X -* Add Variadic function support -* Add WASM support -* Add Low memory support -* Add STM32 supports -* Move extern to nectarjs_external module -* Add chaining functions -* Add try/catch/finally support -* Not necessary to declare variables -* Math support enhancement, thanks to Saiv46 - -## VERSION 0.5.X -* Adding memory management and cleaning without GC -* Adding this and new -* Adding Math, RegExp and Date module -* Optimizing Arduino support - -## VERSION 0.4.0 -* Adding a new memory manager -* Improving some bug -* Using std::string for string management - -## VERSION 0.3.X -* Adding Babel for generating code -* Fixing some bugs - -## VERSION 0.2.1 -* Starting new arch - -## VERSION 0.2.0 -* MODIFYING ARCH OF NectarJS -* Remove core -* Remove base -* Remove externe - -## VERSION 0.1.9 -* Add core/nativejs -* Add --caas switch -* Default local compilation with core/nativejs - -## VERSION 0.1.8 -* Add njs-http module -* Add process module (std & node env) -* Add static linking to mac-osx and win-x86* targets -* Corrected libuv error on mac-osx - -## VERSION 0.1.7 -* Added snap -* minor corrections - -## VERSION 0.1.6 -* Minor corrections - -## VERSION 0.1.5 -* Add STM32 Nucleo - -## VERSION 0.1.4 -* Minor optimizations - -## VERSION 0.1.3 -* Full https api -* Added port 443 by default if version is undefined in NectarJS configuration file -* Sandbox on https://nectar-lang.com/ is now updated on beta 0.1.X - -## VERSION 0.1.2 -* Added target and env for single mode - -## VERSION 0.1.1 -* Some examples are modified - -## VERSION 0.1.0 -* Syntax analyser is added -* mac-osx target is now Available -* env are added -* libuv support is added -* default api url and port modified diff --git a/docs/CODE_OF_CONDUCT.md b/docs/CODE_OF_CONDUCT.md deleted file mode 100644 index 3c278c033..000000000 --- a/docs/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,62 +0,0 @@ -# Our Pledge -We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation. - -We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community. - -# Our Standards -Examples of behavior that contributes to a positive environment for our community include: - -* Demonstrating empathy and kindness toward other people -* Being respectful of differing opinions, viewpoints, and experiences -* Giving and gracefully accepting constructive feedback -* Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience -* Focusing on what is best not just for us as individuals, but for the overall community - -Examples of unacceptable behavior include: - -* The use of sexualized language or imagery, and sexual attention or advances of any kind -* Trolling, insulting or derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others’ private information, such as a physical or email address, without their explicit permission -* Other conduct which could reasonably be considered inappropriate in a professional setting -* Enforcement Responsibilities - -Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful. - -Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate. - -# Scope -This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. - -# Enforcement -Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement here: [Conduct contact form](https://nectarjs.com/conduct). All complaints will be reviewed and investigated promptly and fairly. - -All community leaders are obligated to respect the privacy and security of the reporter of any incident. - -# Enforcement Guidelines -Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct: - -## 1. Correction -Community Impact: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community. - -Consequence: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested. - -## 2. Warning -Community Impact: A violation through a single incident or series of actions. - -Consequence: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban. - -## 3. Temporary Ban -Community Impact: A serious violation of community standards, including sustained inappropriate behavior. - -Consequence: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban. - -## 4. Permanent Ban -Community Impact: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals. - -Consequence: A permanent ban from any sort of public interaction within the community. - -## Attribution -This Code of Conduct is adapted from the Contributor Covenant, version 2.0, available at https://www.contributor-covenant.org/version/2/0/code_of_conduct.html. - -Community Impact Guidelines were inspired by Mozilla’s code of conduct enforcement ladder. diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md deleted file mode 100644 index 9f565e3dc..000000000 --- a/docs/CONTRIBUTING.md +++ /dev/null @@ -1,38 +0,0 @@ -# Contributing to NectarJS -We want to make contributing to this project as easy and transparent as possible. - -## Our Development Process -We use GitHub to sync code to and from our internal repository. We'll use GitHub to track issues and feature requests, as well as accept pull requests. - -## Pull Requests -We actively welcome your pull requests. - -1. Fork the repo and create your branch from `master`. -2. If you've added code that should be tested, add tests. -3. If you've changed APIs, update the documentation. -4. Ensure the test suite passes. -5. Make sure your code lints. - -## Contributor License Agreement ("CLA") -In order to accept your pull request, you will be asked to accept our CLA during the process. - -## Issues -We use GitHub issues to track public bugs. Please ensure your description is clear and has sufficient instructions to be able to reproduce the issue. - -## Write bug reports with detail, background, and sample code -**Great Bug Reports** tend to have: - -- A quick summary and/or background -- Steps to reproduce - - Be specific! - - Give sample code if you can. -- What you expected would happen -- What actually happens -- Notes (possibly including why you think this might be happening, or stuff you tried that didn't work) - -## Coding Style -* 80 character line length -* Run `npm run lint` to conform to our lint rules - -## License -By contributing to NectarJS, you agree that your contributions will be licensed under its license. diff --git a/docs/CONTRIBUTOR.md b/docs/CONTRIBUTOR.md deleted file mode 100644 index 9f7b4dd36..000000000 --- a/docs/CONTRIBUTOR.md +++ /dev/null @@ -1,27 +0,0 @@ -adrien-thierry - -arjndr - -MatBarre - -despair86 - -threepointone - -resynth1943 - -moshfeu - -lukaselmer - -krmax44 - -apoorvsingal - -xflotus - -saiv46 - -fwsGonzo - -wesley1989 diff --git a/docs/README.md b/docs/README.md deleted file mode 100644 index 0f749120f..000000000 --- a/docs/README.md +++ /dev/null @@ -1,326 +0,0 @@ -

- -[![Tweet](https://img.shields.io/twitter/url/http/shields.io.svg?style=social)](https://twitter.com/intent/tweet?text=Compile%20JavaScript%20into%20native%20binaries%20for%20Windows,Mac,Linux,iOS,Android,Arduino%20and%20more&url=https://github.com/NectarJS/nectarjs/&via=nectarjs&hashtags=javascript,js,native,compiler,nectarjs,nectar) - -
- -Javascript's God Mode: one language to rule them all. - -Code everything, everywhere, for everything, in JavaScript. - -No VM. No Bytecode. No packaging. No Garbage Collector. Fully compiled to native binaries. - -Help needed to integrate NodeJS std modules - -

- -# Table of contents - -* [About NectarJS](#about-nectarjs) -* - [Main objectives](#main-objectives) -* - [Changelog](./CHANGELOG.md) -* - [Sponsors](./SPONSORS.md) -* - [Contributors](./CONTRIBUTOR.md) - -* [Get started](#get-started) -* - [Installation](#installation) -* - [Usage](#usage) -* - [Advanced usage](./ADVANCED_USAGE.md) (platforms, optimization...) - -* [Benchmarks](#benchmarks) -* [Supported platforms](#supported-platforms) - -* [Development](#development) -* - [Contributing](./CONTRIBUTING.md) -* - [Code Of Conduct](./CODE_OF_CONDUCT.md) -* - [TODO](./TODO.md) -* - [Stores](#stores) -* - [ECMAScript Support](#ecmascript-support) - -# About NectarJS - -**NectarJS** is a **JavaScript native compiler** aiming to make JavaScript universal, NectarJS is able to compile native apps for Windows, Mac, Linux, iOS, Android, Raspberry, STM32 and more. - -> **NectarJS** is in active development, join us on [Discord](https://discord.gg/cpe2UuN) or [IRC](https://kiwiirc.com/client/irc.freenode.net/#nectarjs) if you need more information. - -- [Roadmap on Trello](https://trello.com/invite/b/6F4rvEj2/9d7677f9dc6b5bf2f5b33e45fc794182/nectarjs) - -- [Quick Start](https://nectarjs.com/docs/nectarjs/quick-start/) - -- [Quick Hack](https://nectarjs.com/docs/contribute/quick-hack/) - -- [NectarJS Documentation (WIP)](https://nectarjs.com/documentation/) - -## Main objectives -* Supporting EcmaScript 3 standard (then 5, 6 ...) -* Supporting NodeJS and NPM ecosystem -* Supporting a maximum of platforms (Windows, Mac, Linux, Android, Arduino, ...) -* Being secure -* Embeding debuging tools -* Compile everything that can be transpiled in JS: Ruby (Opal), Python (Transcript, Brython, JavaScrypthon), TypeScript ... - -## [Changelog](./CHANGELOG.md) - -## [Sponsors](./SPONSORS.md) - -## [Contributors](./CONTRIBUTOR.md) - - - -# Get started - -## Installation - -### Install NectarJS from NPM - -``` -npm install -g nectarjs -``` - -### Install GCC/CLang for your platform - -- Windows -Install Mingw and Clang for Windows here: http://winlibs.com/ or Clang here: https://releases.llvm.org/ - -You can also install Linux for Windows and use a linux system on Windows - -You need MinGW with POSIX threads - -- Linux / FreeBSD -Install it with your distro (apt install gcc, yum install gcc, ...). -You can use GCC, CLANG, as well as any derivative of those compilers (arm-gcc ...) - -- Apple iOS -Install xCode and you are ready. - - -You can check your installation with `npm start njs_test` - -## Usage - -Simplest way to use NectarJS: -``` -nectar file.js -``` - -The output file name will be automatically chosen regarding the target. You can specify another output with `-o something.out` - -You can select a preset (see [Advanced usage](./ADVANCED_USAGE.md)): -``` -nectar file.js --preset [none|speed|size] -``` - -You can also run the compiled executable just after compilation using --run: -``` -nectar file.js --run -``` - -You can enable the quiet mode with --quiet: -``` -nectar file.js --quiet -``` - -Changing the stack size (useful on Windows): -``` -nectar --stack 10000000 flood.js -``` - -You can install a module with: -``` -nectar -i module_name -``` - -You can see the module list and participate in their development here: https://github.com/NectarJS/nectar_modules - -You can initialize an empty module with the command: -``` -nectar --init-module module_name --author me -``` - -For more informations about compilation output, use `--verbose` - -For help, use `--help` - -## [Advanced usage](./ADVANCED_USAGE.md) - -# Benchmarks - -Compiled with GCC v10.2.0 on Windows - -| | NodeJS v12.8.1 | QuickJS 2020-07-05 | NectarJS v0.6.104 | -|-----------|----------------|--------------------|-------------------| -| sort(1e6) [No preset] | -| - Time: | 0.33s | - | **0.33s** | -| - Memory: | 7.0Mb | - | **1.0Mb** | -|- Filesize:| 28.6Mb | - | **424Kb** | -| sort(1e6) [+Size preset] | -|- Filesize:| 28.6Mb | - | **260Kb** | -| sort(1e6) [+Speed preset] | -| - Time: | 0.33s | - | **0.20s** | -| matrix(256) [No preset] | -| - Time: | 0.33s | - | **0.21s** | -| - Memory: | 7.0Mb | - | **1.0Mb** | -|- Filesize:| 28.6Mb | - | **405Kb** | -| matrix(256) [+Size preset] | -|- Filesize:| 28.6Mb | - | **251Kb** | -| matrix(1e6) [+Speed preset] | -| - Time: | 0.33s | - | **0.11s** | - -* _Some code can be evaluated compile-time_ - -# Supported platforms - -Actively tested for - -- Windows -* - win-x86-32 -* - win-x86-64 -- Linux -* - linux-x86-32 -* - linux-x86-64 -* - linux-arm32v7 -- Arduino -* - arduino-nano -* - arduino-uno -* - arduino-mega1280 -* - arduino-mega2560 -- STM32 Nucleo -* - nucleo-l152re -* - nucleo-l432kc -* - nucleo-f446re -- Mobile -* - android -- Web -* - wasm -* - wast -* - asm-js -- macOS -- Sun OS - -# Development - -This project is in heavy development and a lot features are not implemented yet. - -## [Contributing](./CONTRIBUTING.md) - -## [Code Of Conduct](./CODE_OF_CONDUCT.md) - -## [TODO](./TODO.md) - -## Stores - -NectarJS compiled apps are tested to be publishable on: - -- Apple Store -* - https://apps.apple.com/fr/app/hiphen-plant/id1523867733 - -## ECMAScript Support - -NectarJS already supports more than 80% of ES3. - -
-Prototype -
- -* .call() -* .bind() - -
- -
-Array -
- -* .length -* .push(value) - -
- -
-Class -
- -* constructor -* methods -* static methods - -
- -
-Console -
- -* .log(variadic) - -
- -
-JSON -
- -* .parse(str) -* .stringify(obj) - -
- -
-Math **(DONE)** -
- -* [All static methods and constants] - -
- -
-Object -
- -* .keys - -
- -
-performance -
- -* timeOrigin -* .now() - -
- -
-String -
- -* .length -* .toString() -* .indexOf(needle) -* .lastIndexOf(needle) -* .search(needle) -* .slice(start, end) -* .substring(start, end) -* .substr(start, end) -* .replace(needle, str) - -
- -
-Syntax -
- -* for -* while / do while -* if / else if / else -* try / catch / finally -* function / lambda -* class -* new -* typeof -* instanceof -* undefined -* null -* Infinite -* NaN / isNaN -* true / false - -
diff --git a/docs/SPONSORS.md b/docs/SPONSORS.md deleted file mode 100644 index 4c14d7f42..000000000 --- a/docs/SPONSORS.md +++ /dev/null @@ -1,6 +0,0 @@ -# Helpers - -* oss-supporter -* eCondos -* marcus-s-abildskov1 -* ar \ No newline at end of file diff --git a/docs/TODO.md b/docs/TODO.md deleted file mode 100644 index 221874e15..000000000 --- a/docs/TODO.md +++ /dev/null @@ -1,30 +0,0 @@ -* Add import - -* Add NectarJS REPL - -* put back project management - -* add a flag to check all availables cli flags - -* add strings functions -- startWith -- endWith -- ... - -* Add helpers flags to create modules - -* Add async support - - - ~~setTimeout, setInterval, setImmediate~~ - - async keyword support - -* add wildcard for multiple compilation at the same time : nectar *.js - -* add std NodeJS module for node env - -* Put back API compilation switch - -* Finish ES3 - -* Add arguments in function scope - diff --git a/example/apply.js b/example/apply.js deleted file mode 100644 index 2ab75ebfd..000000000 --- a/example/apply.js +++ /dev/null @@ -1,10 +0,0 @@ -function test(arg) -{ - console.log(arg); -} - -test("Direct call"); -test.apply(null, ["Apply"]); - -console.log("Math.min:", Math.min); -console.log("Math.min.apply(null, [4,5,6,1,9]):", Math.min.apply(null, [4,5,6,1,9])); \ No newline at end of file diff --git a/example/arduino-func-led.js b/example/arduino-func-led.js deleted file mode 100644 index df1bd201e..000000000 --- a/example/arduino-func-led.js +++ /dev/null @@ -1,16 +0,0 @@ -require("arduino-func"); - -var PIN_LED = LED_BUILTIN; - -function setup() -{ - arduino_pinMode(PIN_LED, OUTPUT); -} - -function loop() -{ - arduino_digitalWrite(PIN_LED, HIGH); - arduino_delay(1000); - arduino_digitalWrite(PIN_LED, LOW); - arduino_delay(500); -} diff --git a/example/arduino-lcd.ng b/example/arduino-lcd.ng new file mode 100644 index 000000000..71dc46f96 --- /dev/null +++ b/example/arduino-lcd.ng @@ -0,0 +1,16 @@ +var arduino = require("arduino"); +var LCD = require("arduino-lcd"); + +var lcd = LCD(8, 9, 4, 5, 6, 7); + +lcd.clear(); +lcd.begin(16, 2); +lcd.print("Chrono:"); + +while(true) +{ + lcd.setCursor(0,1); + var _sec = arduino.seconds(); + lcd.print(_sec); + arduino.delay(1); +} \ No newline at end of file diff --git a/example/arduino-led.js b/example/arduino-led.js deleted file mode 100644 index b56f92e61..000000000 --- a/example/arduino-led.js +++ /dev/null @@ -1,17 +0,0 @@ -var arduino = require("arduino"); - -var PIN_LED = LED_BUILTIN; - -function setup() -{ - arduino.pinMode(PIN_LED, arduino.output); // works also with OUTPUT -} - -function loop() -{ - //HIGH = 10; // Error: HIGH is read only in package.json of arduino - arduino.digitalWrite(PIN_LED, HIGH); - arduino.delay(1000); - arduino.digitalWrite(PIN_LED, LOW); - arduino.delay(500); -} diff --git a/example/arduino-spi.js b/example/arduino-spi.js deleted file mode 100644 index 397c3cbb4..000000000 --- a/example/arduino-spi.js +++ /dev/null @@ -1,13 +0,0 @@ -var arduino = require("arduino"); - -var spi = require("arduino-spi"); - -function setup() -{ - spi.beginTransaction(14000, MSBFIRST, SPI_MODE0); -} - -function loop() -{ - -} \ No newline at end of file diff --git a/example/arduino.ng b/example/arduino.ng new file mode 100644 index 000000000..e1e72566e --- /dev/null +++ b/example/arduino.ng @@ -0,0 +1,11 @@ +var arduino = require("arduino"); + +arduino.pinMode(arduino.led_builtin, arduino.output); + +while(true) +{ + arduino.digitalWrite(arduino.led_builtin, arduino.high); + arduino.delay(50); + arduino.digitalWrite(arduino.led_builtin, arduino.low); + arduino.delay(50); +} \ No newline at end of file diff --git a/example/args.js b/example/args.js deleted file mode 100644 index 2efdc7e90..000000000 --- a/example/args.js +++ /dev/null @@ -1,6 +0,0 @@ -var process = require("process"); - -for(var i = 0; i < process.argv.length; i++) -{ - console.log(process.argv[i]); -} diff --git a/example/args.ng b/example/args.ng new file mode 100644 index 000000000..62089f290 --- /dev/null +++ b/example/args.ng @@ -0,0 +1,28 @@ +var console = require("console"); + +var cliAgs = arguments(); // cli args + +console.log(); +console.log("Cli Args:"); +for(var i = 0; i < length_of(cliAgs); i++) +{ + console.log("cliAgs", i, ":", cliAgs[i]); +} + +var fn = function() +{ + var fnArgs = arguments(); // local function args + + for(var i = 0; i < length_of(fnArgs); i++) + { + console.log("fnArgs", i, ":", fnArgs[i]); + } +}; + +console.log(); +console.log(`FnArgs: fn(0, "one", 2, "three")`); +fn(0, "one", 2, "three"); + +console.log(); +console.log(`FnArgs: fn("Hello", "World", "!")`); +fn("Hello", "World", "!"); \ No newline at end of file diff --git a/example/array.js b/example/array.js deleted file mode 100644 index 44221dd04..000000000 --- a/example/array.js +++ /dev/null @@ -1,54 +0,0 @@ -var _loop = 10; -var _arr = []; -var _res = 0; - -for(var i = 0; i < _loop; i++) -{ - _arr[i] = i; - var a = 1; - var b; -} - -for(var j = 0; j < _loop; j++) -{ - _res += _arr[j]; -} - -console.log(_res); -console.log(_arr); -console.log("_arr.length: " + _arr.length); - -console.log("SLICE:"); -console.log("_arr.slice(2):", _arr.slice(2)); -console.log("_arr.slice(-1):", _arr.slice(-1)); -console.log("_arr.slice(-10):", _arr.slice(-10)); -console.log("_arr.slice(3, 6):", _arr.slice(3, 6)); -console.log("_arr.slice(3, -6):", _arr.slice(3, -6)); - - -console.log(); -console.log("SPLICE:"); -var _arr2 = [0,1,2,3,4,5,6,7,8,9] -console.log("_arr2.splice(1): return->", _arr2.splice(1), ", content->", _arr2); - -var _arr3 = [0,1,2,3,4,5,6,7,8,9] -console.log("_arr3.splice(3, 40): return->", _arr3.splice(3, 40), ", content->", _arr3); - -var _arr4 = [0,1,2,3,4,5,6,7,8,9] -console.log("_arr4.splice(8, 9, 'eight', 'nine', 10): return->", _arr4.splice(8, 9, 'eight', 'nine', 10), ", content->", _arr4); - -console.log(); - -console.log("POP:"); -_arr.pop(); -console.log("_arr.length after pop(): " + _arr.length); - -console.log("_arr.join(':'): " + _arr.join(':')); - -var ArrInArr = [["Inception"]]; -console.log(ArrInArr[0][0]); - -ArrInArr[1] = [["Double Inception"]]; -console.log(ArrInArr[1][0][0]); - -Array.prototype.slice.call([0,1,2], 2); \ No newline at end of file diff --git a/example/array_proto.js b/example/array_proto.js deleted file mode 100644 index 658a0bf0e..000000000 --- a/example/array_proto.js +++ /dev/null @@ -1,4 +0,0 @@ - -var a = new Array(); -console.log(a.test); -//Array.prototype.slice.call(); \ No newline at end of file diff --git a/example/array_push.js b/example/array_push.js deleted file mode 100644 index 40c80bd85..000000000 --- a/example/array_push.js +++ /dev/null @@ -1,6 +0,0 @@ -var arr = []; - -arr.push("ok"); -arr.push(1); - -console.log(arr); \ No newline at end of file diff --git a/example/async.js b/example/async.js deleted file mode 100644 index 4d9b7dad8..000000000 --- a/example/async.js +++ /dev/null @@ -1,28 +0,0 @@ -var _name = "NectarJS"; -var _delay = 500; -var _delayRepeat = 1000; - -function repeat() -{ - console.log("Repeated"); -} - -function delayed() -{ - console.log("I'm delayed by", _delay, "ms"); -} - -function immediateFN() -{ - console.log("Hello", _name, "!"); -} - -function normal() -{ - console.log("----------"); -} - -setInterval(repeat, _delayRepeat); -setTimeout(delayed, _delay); -setImmediate(immediateFN); -normal(); diff --git a/example/bignumber.js b/example/bignumber.js deleted file mode 100644 index 95f0ad3eb..000000000 --- a/example/bignumber.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - hikarine3 : https://github.com/hikarine3 - https://github.com/NectarJS/nectarjs/issues/81 -*/ -let num = 1; -for(let i=1;i<=100;i++){ - num *=i; - console.log(num); -} - -const x = Infinity; -console.log(x); \ No newline at end of file diff --git a/example/bind.js b/example/bind.js deleted file mode 100644 index b8eb0c3c2..000000000 --- a/example/bind.js +++ /dev/null @@ -1,19 +0,0 @@ -/* - Example from MDN web docs - Link: https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Function/bind -*/ - -var module = { - x: 42, - getX: function() { - return this.x; - } -}; - -const unboundGetX = module.getX; -console.log(unboundGetX()); // The function gets invoked at the global scope -// expected output: undefined - -const boundGetX = unboundGetX.bind(module); -console.log(boundGetX()); -// expected output: 42 \ No newline at end of file diff --git a/example/bool.js b/example/bool.js deleted file mode 100644 index 23733e988..000000000 --- a/example/bool.js +++ /dev/null @@ -1,25 +0,0 @@ -var test = true; - -console.log("Test is : " + test + " | and type -> " + typeof test); - -if(test) -{ - console.log("True !"); -} -else -{ - console.log("False ..."); -} - - -var i = 1; -var j = 1; -var u = undefined; -console.log("u is " + u); - -console.log(undefined == undefined) -console.log( u == undefined); -console.log(i == u); -console.log(i == j); - -console["log"](i); \ No newline at end of file diff --git a/example/call.js b/example/call.js deleted file mode 100644 index a2278c924..000000000 --- a/example/call.js +++ /dev/null @@ -1,13 +0,0 @@ -function _test() -{ - if(!this.a) this.a = 0; - this.a++; - return this; -} - -var a = _test(); -console.log(a); - -var _this = {a: 10}; -var b = _test.call(_this); -console.log(b); \ No newline at end of file diff --git a/example/chaining.js b/example/chaining.js deleted file mode 100644 index c487ad9c8..000000000 --- a/example/chaining.js +++ /dev/null @@ -1,3 +0,0 @@ -var a = "Test chaining functions"; -a = a.toString().split(" "); -console.log(a); \ No newline at end of file diff --git a/example/circular_array.ng b/example/circular_array.ng new file mode 100644 index 000000000..903957cb4 --- /dev/null +++ b/example/circular_array.ng @@ -0,0 +1,9 @@ +var console = require("console"); + +while (true) +{ + var x = ["Hello Circular Array"]; + var y = [x]; + x[1] = y; + console.log(x[1][0][0]); +} diff --git a/example/circular_fixed_array.ng b/example/circular_fixed_array.ng new file mode 100644 index 000000000..fc2ed37f0 --- /dev/null +++ b/example/circular_fixed_array.ng @@ -0,0 +1,10 @@ +var console = require("console"); + +while (true) +{ + var x = FixedArray(); + x[0] = "Hello Circular Fixed Array"; + var y = [x]; + x[1] = y; + console.log(x[1][0][0]); +} \ No newline at end of file diff --git a/example/circular_object.ng b/example/circular_object.ng new file mode 100644 index 000000000..d9ae74353 --- /dev/null +++ b/example/circular_object.ng @@ -0,0 +1,15 @@ +var console = require("console"); + +while (true) +{ + var x = + { + a: "Hello Circular Object" + }; // x = 1 + var y = + { + x: x + }; // x = 2 y = 1 + x.y = y; // x = 2 y = 2 + console.log(x.y.x.y.x.y.x.a); +} diff --git a/example/class.js b/example/class.js deleted file mode 100644 index 3f303d827..000000000 --- a/example/class.js +++ /dev/null @@ -1,24 +0,0 @@ -class Greeter -{ - constructor(value, age) - { - this.name = value; - this.age = age; - } - - Say() - { - console.log("Hello, my name is " + this.name + ", I'm " + this.age + "yo"); - } - - static Welcome(name) - { - console.log("Welcome to a new era of coding, " + name); - } -} - -var g = new Greeter("NectarJS", 3); - -g.Say(); - -Greeter.Welcome("John Doe"); \ No newline at end of file diff --git a/example/classTest.js b/example/classTest.js deleted file mode 100644 index d48d6e099..000000000 --- a/example/classTest.js +++ /dev/null @@ -1,31 +0,0 @@ -/* - testClass proposed by @wesley1989 on Discord to test classes implementation -*/ -function something(a) { - return a -} - -class Test{ - constructor(a){ - if(a instanceof Test){ - //this not working - a.map(something) - }else{ - return undefined - } - } - map(execFunc) { - execFunc() - } - static map(execFunc) { - execFunc() - } - -} -var t = new Test(null) -t.map(something) -Test.map(something) - -var t2 = new Test(t) -console.log(t,t2); - diff --git a/example/console_log_array.js b/example/console_log_array.js deleted file mode 100644 index c849ede70..000000000 --- a/example/console_log_array.js +++ /dev/null @@ -1,8 +0,0 @@ -var a = []; - -a[3] = "three"; - -a[10] = "ten"; - -console.log("Object.keys():", Object.keys(a)); -console.log("console.log():", a); \ No newline at end of file diff --git a/example/const.js b/example/const.js deleted file mode 100644 index f7e793bb4..000000000 --- a/example/const.js +++ /dev/null @@ -1,11 +0,0 @@ -const number = 42; -console.log(number); - -// number = 3; /* parse error */ - -const test = function() -{ - console.log("Const test:", number); -} - -test(); \ No newline at end of file diff --git a/example/const.ng b/example/const.ng new file mode 100644 index 000000000..a9dd0503f --- /dev/null +++ b/example/const.ng @@ -0,0 +1,10 @@ +var _world = "world"; +var _console = require("console"); + +var _fn = function(_const, assignable ) +{ + assignable = _world; + _console.log(_const, assignable); +}; + +_fn("hello", _world); \ No newline at end of file diff --git a/example/constructor.js b/example/constructor.js deleted file mode 100644 index 0327da4fb..000000000 --- a/example/constructor.js +++ /dev/null @@ -1,8 +0,0 @@ -function Mul(_num, _x) -{ - this.i = _num * _x; -} - -var m = new Mul(10, 3); - -console.dir(m.constructor); diff --git a/example/correctness.js b/example/correctness.js deleted file mode 100644 index c934da395..000000000 --- a/example/correctness.js +++ /dev/null @@ -1,53 +0,0 @@ -var elements = [undefined, null, NaN, 1, "str", [], [0,1,2], {"key":"value"}, {}]; - -// Binary operators -for(var i = 0; i < elements.length; i++) -{ - for(var j = 0; j < elements.length; j++) - { - console.log(elements[i], "+", elements[j], "=", elements[i] + elements[j], "- type:", typeof (elements[i] + elements[j])); - console.log(elements[i], "-", elements[j], "=", elements[i] - elements[j], "- type:", typeof (elements[i] - elements[j])); - console.log(elements[i], "*", elements[j], "=", elements[i] * elements[j], "- type:", typeof (elements[i] * elements[j])); - console.log(elements[i], "/", elements[j], "=", elements[i] / elements[j], "- type:", typeof (elements[i] / elements[j])); - console.log(elements[i], ">", elements[j], "=", elements[i] > elements[j], "- type:", typeof (elements[i] > elements[j])); - console.log(elements[i], "<", elements[j], "=", elements[i] < elements[j], "- type:", typeof (elements[i] < elements[j])); - console.log(elements[i], "%", elements[j], "=", elements[i] % elements[j], "- type:", typeof (elements[i] % elements[j])); - console.log(elements[i], "^", elements[j], "=", elements[i] ^ elements[j], "- type:", typeof (elements[i] ^ elements[j])); - console.log(elements[i], "&", elements[j], "=", elements[i] & elements[j], "- type:", typeof (elements[i] & elements[j])); - - console.log(elements[i], ">>", elements[j], "=", elements[i] >> elements[j], "- type:", typeof (elements[i] >> elements[j])); - console.log(elements[i], "<<", elements[j], "=", elements[i] << elements[j], "- type:", typeof (elements[i] << elements[j])); - console.log(elements[i], "==", elements[j], "=", elements[i] == elements[j], "- type:", typeof (elements[i] == elements[j])); - console.log(elements[i], "!=", elements[j], "=", elements[i] != elements[j], "- type:", typeof (elements[i] != elements[j])); - console.log(elements[i], "===", elements[j], "=", elements[i] === elements[j], "- type:", typeof (elements[i] === elements[j])); - console.log(elements[i], "!==", elements[j], "=", elements[i] !== elements[j], "- type:", typeof (elements[i] !== elements[j])); - } -} - -// Increment operators -for(var i = 0; i < elements.length; i++) -{ - var _left = Object.clone(elements[i]); - console.log(_left, "+=", elements[j], "=", _left += elements[j], "- type:", typeof _left); - _left = Object.clone(elements[i]); - console.log(_left, "*=", elements[j], "=", _left *= elements[j], "- type:", typeof _left); - _left = Object.clone(elements[i]); - console.log(_left, "-=", elements[j], "=", _left -= elements[j], "- type:", typeof _left); - _left = Object.clone(elements[i]); - console.log(_left, "/=", elements[j], "=", _left /= elements[j], "- type:", typeof _left); - _left = Object.clone(elements[i]); - console.log(_left, "%=", elements[j], "=", _left %= elements[j], "- type:", typeof _left); - _left = Object.clone(elements[i]); - console.log(_left, "^=", elements[j], "=", _left ^= elements[j], "- type:", typeof _left); - _left = Object.clone(elements[i]); - console.log(_left, "&=", elements[j], "=", _left &= elements[j], "- type:", typeof _left); -} - -// Unary operators -for(var i = 0; i < elements.length; i++) -{ - var _left = Object.clone(elements[i]); - console.log(_left, "++", "=", _left++, "- type:", typeof (_left)); - _left = Object.clone(elements[i]); - console.log(_left, "--", "=", _left--, "- type:", typeof (_left)); -} diff --git a/example/date.js b/example/date.js deleted file mode 100644 index 90eea00bd..000000000 --- a/example/date.js +++ /dev/null @@ -1,3 +0,0 @@ - -console.log("TS: " + _date.now()); -console.log("UTC: " + _date.now("UTC")); diff --git a/example/date.ng b/example/date.ng new file mode 100644 index 000000000..3585b609d --- /dev/null +++ b/example/date.ng @@ -0,0 +1,4 @@ +var date = require("date"); +var console = require("console"); + +console.log(date.now()); \ No newline at end of file diff --git a/example/delete.js b/example/delete.js deleted file mode 100644 index 1598c83c3..000000000 --- a/example/delete.js +++ /dev/null @@ -1,7 +0,0 @@ -var a = -{ - "b": "c" -}; -console.log("Before delete: ", a); -delete a.b; -console.log("After delete: ", a); \ No newline at end of file diff --git a/example/empty.js b/example/empty.js deleted file mode 100644 index e69de29bb..000000000 diff --git a/example/error.js b/example/error.js deleted file mode 100644 index 32c921c54..000000000 --- a/example/error.js +++ /dev/null @@ -1,12 +0,0 @@ -// error testing example - -function test() -{ - console.log('In Test'); -} - -test(a) - -var b = 3; - -notDeclared(); \ No newline at end of file diff --git a/example/eval.js b/example/eval.js deleted file mode 100644 index 04cfa1c6f..000000000 --- a/example/eval.js +++ /dev/null @@ -1 +0,0 @@ -eval("function(){}"); \ No newline at end of file diff --git a/example/exec.ng b/example/exec.ng new file mode 100644 index 000000000..6a3bbcad9 --- /dev/null +++ b/example/exec.ng @@ -0,0 +1,14 @@ +var console = require("console"); +var cp = require("child_process"); + +var _args = arguments(); + +if(_args[1]) +{ + console.log(cp.exec(_args[1])); +} +else +{ + console.log("[*] Usage:", _args[0], "process_to_launch"); + console.log("[*] example:", _args[0], "ls"); +} diff --git a/example/exit.ng b/example/exit.ng new file mode 100644 index 000000000..7b95eb643 --- /dev/null +++ b/example/exit.ng @@ -0,0 +1,3 @@ +var zero = 0; + +exit(zero); \ No newline at end of file diff --git a/example/fibo.js b/example/fibo.js deleted file mode 100644 index 4902bfc75..000000000 --- a/example/fibo.js +++ /dev/null @@ -1,6 +0,0 @@ -function fibonacci(n) -{ - if (n < 2) return n; - return fibonacci(n - 2) + fibonacci(n - 1); -} -console.log(fibonacci(45)); \ No newline at end of file diff --git a/example/fibo.ng b/example/fibo.ng new file mode 100644 index 000000000..e170daf04 --- /dev/null +++ b/example/fibo.ng @@ -0,0 +1,12 @@ +var console = require("console"); + +var fibonacci = function(n) +{ + if (n < 2) + { + return n; + } + + return fibonacci(n - 2) + fibonacci(n - 1); +}; +console.log(fibonacci(44)); \ No newline at end of file diff --git a/example/fiboit.js b/example/fiboit.js deleted file mode 100644 index d989b1ba4..000000000 --- a/example/fiboit.js +++ /dev/null @@ -1,13 +0,0 @@ - - var a = 1; - var b = 0; - var c = 0; - var n = 45; - while (n > 0) { - c = a; - a = b + a; - b = c; - n--; - } - console.log(b); - diff --git a/example/fiboit.ng b/example/fiboit.ng new file mode 100644 index 000000000..835839432 --- /dev/null +++ b/example/fiboit.ng @@ -0,0 +1,13 @@ +var _console = require("console"); +var a = 1; +var b = 0; +var c = 0; +var n = 102; +while (n > 0) +{ +c = a; +a = b + a; +b = c; +n--; +} +_console.log(b); \ No newline at end of file diff --git a/example/fixed_array.js b/example/fixed_array.js deleted file mode 100644 index fab268561..000000000 --- a/example/fixed_array.js +++ /dev/null @@ -1,6 +0,0 @@ -var t = 10; -var fa = Nectar.fixedArray(t); -fa[0] = "ok"; -console.log("fa[0]:", fa[0]); -console.log("fa.length:", fa.length); -console.log("fa.length:", fa [100]); diff --git a/example/flood.js b/example/flood.js deleted file mode 100644 index 1599c677c..000000000 --- a/example/flood.js +++ /dev/null @@ -1,57 +0,0 @@ -/*** From @HighCo on Discord ***/ -// nectar --stack 10000000 flood.js - -var size = 150; -var iterations = 1; - -function to_index(x, y) { - return y * size + x; -} -function flood_cell(grid, x, y, value) { - var index = to_index(x, y); - grid[index] = value; - value++; - console.log("flood_cell "+x+" "+y+" -> "+grid[index]); - - index = to_index(x - 1, y); - if (x > 0 && grid[index] == 0) - value = flood_cell(grid, x - 1, y, value); - - index = to_index(x + 1, y); - if (x < size - 1 && grid[index] == 0) - value = flood_cell(grid, x + 1, y, value); - - index = to_index(x, y - 1); - if (y > 0 && grid[index] == 0) - value = flood_cell(grid, x, y - 1, value); - - index = to_index(x, y + 1); - if (y < size - 1 && grid[index] == 0) - value = flood_cell(grid, x, y + 1, value); - - return value; -} -function flood_grid() { - console.log("flood_grid"); - var grid = []; - var i = 0; - for (let y = 0; y < size; y++) { - for (let x = 0; x < size; x++) { - let value = x % 2 == 0 && y % 2 == 0 ? -1 : 0; - grid[i] = value; - i++; - } - } - flood_cell(grid, size / 2, size / 2, 1); - return grid; -} -function flood() { - let sum = 0; - for (let i = 0; i < iterations; i++) { - let grid = flood_grid(); - let index = grid.length - 1; - sum += grid[index]; - } - console.log("sum: " + sum); -} -flood(); \ No newline at end of file diff --git a/example/for.js b/example/for.js deleted file mode 100644 index 43bd5f06f..000000000 --- a/example/for.js +++ /dev/null @@ -1,17 +0,0 @@ -var _object = -{ - "one" : 1, - "two" : "2", - "three" : "three" -}; - -console.log("Object.keys(_object).length: " + Object.keys(_object).length); - -console.log(); -console.log("for(var o in _object):"); -console.log(); - -for(var o in _object) -{ - console.log(o + ":" + _object[o]); -} diff --git a/example/freeze.js b/example/freeze.js deleted file mode 100644 index a5046efcf..000000000 --- a/example/freeze.js +++ /dev/null @@ -1,7 +0,0 @@ -var a = {value: "Frozen" }; - -Object.freeze(a); - -a.value = "Let it go"; - -console.log(a.value); \ No newline at end of file diff --git a/example/fs-async.js b/example/fs-async.js deleted file mode 100644 index e99c0bd32..000000000 --- a/example/fs-async.js +++ /dev/null @@ -1,7 +0,0 @@ -var fs = require("fs"); - -fs.readFile("nectar.js", function(err, data) -{ - if(!err) console.log(data.toString()) - else console.log(err); -}) \ No newline at end of file diff --git a/example/fs.js b/example/fs.js deleted file mode 100644 index 68e48fce6..000000000 --- a/example/fs.js +++ /dev/null @@ -1,25 +0,0 @@ -var fs = require("fs"); - -fs.readFile("nectar.js"); -/* -var file = "fs.txt"; - -var write = fs.writeFileSync(file, "Some content"); -var append = fs.appendFileSync(file, "\nContent added"); -if(write && append) -{ - console.log("[+] File '" + file + "' written."); - var content = fs.readFileSync(file); - - console.log("[+] File content: "); - console.log(content); - - - console.log("[*] Removing file"); - fs.unlinkSync(file); -} -else -{ - console.log("[!] couldn't write '" + file + "'"); -} -*/ \ No newline at end of file diff --git a/example/function.js b/example/function.js deleted file mode 100644 index 3b251633f..000000000 --- a/example/function.js +++ /dev/null @@ -1,8 +0,0 @@ -hello(); - -function hello() -{ - console.log("Hello !"); -} - -console.log(hello.toString()); \ No newline at end of file diff --git a/example/functional.ng b/example/functional.ng new file mode 100644 index 000000000..b395739ab --- /dev/null +++ b/example/functional.ng @@ -0,0 +1,21 @@ +var console = require("console"); + +var Functional = function() +{ + var obj = {}; + obj.fn = function(_arg) + { + console.write(_arg); + return obj; + }; + return obj; +}; + +var a = Functional(); +var b = a.fn("Hello "); +var c = b.fn("world"); +var d = c.fn("!"); + +console.log(""); + +d.fn("Good ").fn("Morning").fn("!"); diff --git a/example/hello.js b/example/hello.js deleted file mode 100644 index 635625ac8..000000000 --- a/example/hello.js +++ /dev/null @@ -1 +0,0 @@ -console.log("Hello world!"); \ No newline at end of file diff --git a/example/hello.ng b/example/hello.ng new file mode 100644 index 000000000..e15f5a074 --- /dev/null +++ b/example/hello.ng @@ -0,0 +1,2 @@ +var console = require("console"); +console.log("Hello", "World", "!"); \ No newline at end of file diff --git a/example/hoisting.js b/example/hoisting.js deleted file mode 100644 index bb2afda8c..000000000 --- a/example/hoisting.js +++ /dev/null @@ -1,20 +0,0 @@ -hoistedFunc(); - -var hoistedVar = "Hello !"; - -hoistedFunc(); - -function hoistedFunc() -{ - console.log(hoistedVar); -} - -function some(param) { - if (param) { - var a = 1; - } - return a; -} - -console.log("some():", some()); -console.log("some(1):", some(1)); \ No newline at end of file diff --git a/example/http.js b/example/http.js deleted file mode 100644 index 4eb1776b1..000000000 --- a/example/http.js +++ /dev/null @@ -1,14 +0,0 @@ -var http = require("http"); -var port = 8080; - -function listening() -{ - console.log("Listening on port:", port); -} - -function cbGet(req, res) -{ - res.end("Hello World!"); -} - -http.createServer().get("/", "Hello Nectar!").get("/cb", cbGet).listen(port, listening).run(); diff --git a/example/http.ng b/example/http.ng new file mode 100644 index 000000000..4582b7fca --- /dev/null +++ b/example/http.ng @@ -0,0 +1,25 @@ +var console = require("console"); +var http = require("http"); + +var _port = 8080; + +var _cb = function(req, res) +{ + /* API EXAMPLE + console.log(req.getUrl()); + console.log(req.getHeader("user-agent")); + console.log(req.getMethod()); + res.setHeader("server", "Nerd"); + res.setStatus(200); + res.write("test - "); + */ + + res.end("Hello Nerd World"); +}; + +var _listenCB = function() +{ + console.log("Listening on port", _port); +}; + +var server = http.createServer(_cb).listen(_port, _listenCB); diff --git a/example/http_post.ng b/example/http_post.ng new file mode 100644 index 000000000..cc940c1d2 --- /dev/null +++ b/example/http_post.ng @@ -0,0 +1,38 @@ +var console = require("console"); +var http = require("http"); + +var _port = 8080; + +var _endCB = function(req, res) +{ + res.end("Hello Nerd World"); +}; + +var _cb = function(req, res) +{ + if(req.getMethod() == "post") + { + req.data = ""; + req.onData = function(chunk, last) + { + console.log(chunk, last); + req.data += chunk; + if(last) + { + res.write("Received: " + req.data + "\n"); + _endCB(req, res); + } + }; + } + else + { + _endCB(req, res); + } +}; + +var _listenCB = function() +{ + console.log("Listening on port", _port); +}; + +var server = http.createServer(_cb).listen(_port, _listenCB); \ No newline at end of file diff --git a/example/infinity.js b/example/infinity.js deleted file mode 100644 index 4bfa60eb7..000000000 --- a/example/infinity.js +++ /dev/null @@ -1,11 +0,0 @@ -// Big number issues #81 -// Reported by https://github.com/hikarine3 - -var x = Infinity; -console.log(x); - -let num = 1.0; -for(let i=1;i<=100;i++){ - num *=i; - console.log(num); -} diff --git a/example/json.js b/example/json.js deleted file mode 100644 index 2622ddb07..000000000 --- a/example/json.js +++ /dev/null @@ -1,9 +0,0 @@ -var data = '{"one": 1, "two": "2", "arr":[{"sub": -1}, "un", 2.3, "trois"]}'; -console.log("data: " + data); - -data = JSON.parse(data); - -console.log("data.one: " + data.one + ":" + typeof data.one); -console.log("data.two: " + data.two + ":" + typeof data.two); - -console.log(JSON.stringify(data)); diff --git a/example/json.ng b/example/json.ng new file mode 100644 index 000000000..a1b057274 --- /dev/null +++ b/example/json.ng @@ -0,0 +1,13 @@ +var _json = require("JSON"); +var _console = require("console"); + +var obj = +{ + "key": "value", +}; + +var str = "{\"name\":\"Nerd\"}"; + + +_console.log(_json.stringify(obj)); +_console.log(_json.parse(str).name); \ No newline at end of file diff --git a/example/lambda-arg.js b/example/lambda-arg.js deleted file mode 100644 index 07d3ac2e2..000000000 --- a/example/lambda-arg.js +++ /dev/null @@ -1,6 +0,0 @@ -function test(_lambda) -{ - _lambda(); -} - -test(function(){console.log("Hello from Lambda")}); \ No newline at end of file diff --git a/example/lambda.js b/example/lambda.js deleted file mode 100644 index 8ef017f41..000000000 --- a/example/lambda.js +++ /dev/null @@ -1 +0,0 @@ -(function(){ console.log("in Lambda");})(); \ No newline at end of file diff --git a/example/let.js b/example/let.js deleted file mode 100644 index 1eb62af00..000000000 --- a/example/let.js +++ /dev/null @@ -1,2 +0,0 @@ -let test = "ok"; -console.log(test); \ No newline at end of file diff --git a/example/loop.js b/example/loop.js deleted file mode 100644 index 8c94237e6..000000000 --- a/example/loop.js +++ /dev/null @@ -1,11 +0,0 @@ -for(let i=0;i<100000;i++) -{ - for(let j = 0; j < 10; j++) - { - console.log("a"); - } -} - -for(let i=0;i<1000000;i++){ - console.log(1); -} diff --git a/example/loop.ng b/example/loop.ng new file mode 100644 index 000000000..1f9585795 --- /dev/null +++ b/example/loop.ng @@ -0,0 +1,31 @@ +var console = require("console"); +var a = 10; + +var obj = +{ + a: "a", + b: "b", + c: "c", + d: "d", +}; + +while(a--) +{ + console.log(a); +} + +for(var i = 0; i < 10; i++) +{ + console.log("i:", i); +} + +do +{ + console.log("a:", a); + a++; +}while(a < 10); + +for(var key in obj) +{ + console.log(key, ":", obj[key]); +} \ No newline at end of file diff --git a/example/match.ng b/example/match.ng new file mode 100644 index 000000000..c4d330fe5 --- /dev/null +++ b/example/match.ng @@ -0,0 +1,4 @@ +var console = require("console"); +var regexp = require("regexp"); + +console.log(regexp.match(".*.", "1234")); \ No newline at end of file diff --git a/example/math.js b/example/math.js deleted file mode 100644 index 08e3c6465..000000000 --- a/example/math.js +++ /dev/null @@ -1,66 +0,0 @@ -console.log("E: " + Math.E); -console.log("LN2: " + Math.LN2); -console.log("LOG2E: " + Math.LOG2E); -console.log("LOG10E: " + Math.LOG10E); -console.log("PI: " + Math.PI); -console.log("SQRT1_2: " + Math.SQRT1_2); -console.log("SQRT2: " + Math.SQRT2); - -console.log("Math.abs(-123): " + Math.abs(-123)); -console.log("Math.acos(0): " + Math.acos(0)); -console.log("Math.acosh(2): " + Math.acosh(2)); -console.log("Math.asin(1): " + Math.asin(1)); -console.log("Math.asinh(1): " + Math.asinh(1)); -console.log("Math.atan(1): " + Math.atan(1)); -console.log("Math.atanh(1): " + Math.atanh(1)); -console.log("Math.atan2(1): " + Math.atan2(1, 1)); -console.log("Math.cbrt(1): " + Math.cbrt(1)); -console.log("Math.ceil(1.0001): " + Math.ceil(1.0001)); -console.log("Math.clz32(1024): " + Math.clz32(1024)); -console.log("Math.cos(0): " + Math.cos(0)); -console.log("Math.cosh(0): " + Math.cosh(0)); -console.log("Math.exp(1): " + Math.exp(1)); -console.log("Math.expm1(1): " + Math.expm1(1)); -console.log("Math.floor(1.9999): " + Math.floor(1.9999)); -console.log("Math.fround(1.1): " + Math.fround(1.1)); -console.log("Math.hypot(-10, 10): " + Math.hypot(-10, 10)); -console.log("Math.imul(1e5, 1e5): " + Math.imul(1e5, 1e5)); -console.log("Math.log(0): " + Math.log(0)); -console.log("Math.log1p(-1): " + Math.log1p(-1)); -console.log("Math.log10(100): " + Math.log10(100)); -console.log("Math.log2(4): " + Math.log2(4)); -console.log("Math.max(1, -2, 3, -4, 5): " + Math.max(1, -2, 3, -4, 5)); -console.log("Math.min(-1, 2, -3, 4, -5): " + Math.min(-1, 2, -3, 4, -5)); -console.log("Math.pow(2, 8): " + Math.pow(2, 8)); -console.log("Math.random(): " + Math.random()); -console.log("Math.round(2.5): " + Math.round(2.5)); -console.log("Math.sign(-1.2): " + Math.sign(-1.2)); -console.log("Math.sin(1): " + Math.sin(1)); -console.log("Math.sinh(1): " + Math.sinh(1)); -console.log("Math.sqrt(36): " + Math.sqrt(36)); -console.log("Math.tan(1): " + Math.tan(1)); -console.log("Math.tanh(1): " + Math.tanh(1)); -console.log("Math.trunc(1.5): " + Math.trunc(1.5)); - -console.log("-------------"); - -var i = 11; -console.log("var i = 11;"); - -i++; -console.log("i++, i should be 12: " + i); - -i *= 2; -console.log("i *= 2, i should be 24: " + i); - -i /= 2; -console.log("i /= 2, i should be 12: " + i); - -i -= 2; -console.log("i -= 2, i should be 10: " + i); - -i %= 3; -console.log("i %= 3, i should be 1: " + i); - -i--; -console.log("i--. i should be 0: " + i); diff --git a/example/memory.js b/example/memory.js deleted file mode 100644 index 9a1dd967b..000000000 --- a/example/memory.js +++ /dev/null @@ -1,10 +0,0 @@ -var i = 100000000; - -console.log("[+] Starting Loop"); -while(i--) -{ - var a = {}; - a = 1; -} - -console.log("[*] Test successfully ended"); diff --git a/example/mobile.js b/example/mobile.js deleted file mode 100644 index 318f5e470..000000000 --- a/example/mobile.js +++ /dev/null @@ -1,9 +0,0 @@ -var _tpl = "

{{CONTENT}}


Text:
"; -_tpl += ""; - -Nectar.draw(_tpl.replace("{{CONTENT}}", "Hello NectarJS !")); - -Nectar.onEvent = function(_event) -{ - Nectar.draw(_tpl.replace("{{CONTENT}}", _event)); -}; \ No newline at end of file diff --git a/example/mobile_local_web.js b/example/mobile_local_web.js deleted file mode 100644 index cafbe4bdd..000000000 --- a/example/mobile_local_web.js +++ /dev/null @@ -1 +0,0 @@ -Nectar.navigate(Nectar.app_path); diff --git a/example/mysqlx.js b/example/mysqlx.js deleted file mode 100644 index 0245e6c56..000000000 --- a/example/mysqlx.js +++ /dev/null @@ -1,13 +0,0 @@ -var mysqlx = require("mysqlx"); - -var _db = mysqlx.connect("test:password@localhost"); - -_db.add('{"language":"JS","compiler":"NectarJS"}'); - -var _data = _db.find('compiler = "NectarJS"'); - -console.log(JSON.parse(_data).data[0]); - -_db.remove("true"); - -_db.close(); diff --git a/example/native.js b/example/native.js deleted file mode 100644 index c0cadfd80..000000000 --- a/example/native.js +++ /dev/null @@ -1,8 +0,0 @@ -Nectar.initInt("i", 10); -console.log("int:", i); - -Nectar.initDouble("d", 1000000000000); -console.log("double:", d); - -Nectar.initString("s", "Hello"); -console.log("string:", s); \ No newline at end of file diff --git a/example/native.ng b/example/native.ng new file mode 100644 index 000000000..2242d6803 --- /dev/null +++ b/example/native.ng @@ -0,0 +1,5 @@ +var inNative = "Hello from native"; + +{{ + std::cout << inNative << "!" << std::endl; +}} \ No newline at end of file diff --git a/example/nested_object.ng b/example/nested_object.ng new file mode 100644 index 000000000..ea77f834f --- /dev/null +++ b/example/nested_object.ng @@ -0,0 +1,16 @@ +var console = require("console"); + +var a = { + b: "ok", + c: "hello", + d: { + x: "z", + y: {}, + p: "q", + }, + e: "e", +}; + + + +console.log(a.d.p); \ No newline at end of file diff --git a/example/neural_network.js b/example/neural_network.js deleted file mode 100644 index 58a0e6133..000000000 --- a/example/neural_network.js +++ /dev/null @@ -1,256 +0,0 @@ -/* - Neural Network example by @wesley1989 - v1.3 -*/ - -function sigmoid(x) { - return 1 / (1 + Math.exp(-x)); -} - -function derivativeOfSigmoid(y){ - return y * (1 - y); -} - - class Matrix { - constructor(rows, cols) { - this.rows = rows; - this.cols = cols; - this.data = []; - for (let i = 0; i < this.rows; i++) { - this.data[i] = []; - for (let j = 0; j < this.cols; j++) { - this.data[i][j] = (Math.random() * 2) - 1; - } - } - } - - - static transposeMatrix(matrix) { - let result = new Matrix(matrix.cols, matrix.rows); - for (let i = 0; i < matrix.rows; i++) { - for (let j = 0; j < matrix.cols; j++) { - result.data[j][i] = matrix.data[i][j]; - } - } - return result; - } - - static dotProduct(matrix1, matrix2) { - if (matrix1.cols !== matrix2.rows) { - return 1; - } - let result = new Matrix(matrix1.rows, matrix2.cols); - for (let i = 0; i < result.rows; i++) { - for (let j = 0; j < result.cols; j++) { - let sum = 0; - for (let k = 0; k < matrix1.cols; k++) { - sum += matrix1.data[i][k] * matrix2.data[k][j]; - } - result.data[i][j] = sum; - } - } - return result; - } - - static fromArray(arr) { - let m = new Matrix(arr.length, 1); - for (let i = 0; i < arr.length; i++) { - m.data[i][0] = arr[i]; - } - return m; - } - - static subtract(a, b) { - let result = new Matrix(a.rows, a.cols); - for (let i = 0; i < result.rows; i++) { - for (let j = 0; j < result.cols; j++) { - result.data[i][j] = a.data[i][j] - b.data[i][j] - } - } - return result; - } - - static map(matrix, activation) { - let result = new Matrix(matrix.rows, matrix.cols); - for (let i = 0; i < matrix.rows; i++) { - for (let j = 0; j < matrix.cols; j++) { - result.data[i][j] = activation(matrix.data[i][j]) - } - } - return result; - } - - toArray() { - let arr = []; - for (let i = 0; i < this.rows; i++) { - for (let j = 0; j < this.cols; j++) { - arr.push(Number((this.data[i][j]).toFixed(2))); - } - } - return arr; - } - - add(n) { - if (n instanceof Matrix) { - for (let i = 0; i < this.rows; i++) { - for (let j = 0; j < this.cols; j++) { - this.data[i][j] += n.data[i][j]; - } - } - } else { - for (let i = 0; i < this.rows; i++) { - for (let j = 0; j < this.cols; j++) { - this.data[i][j] += n; - } - } - } - } - - - multiply(n) { - if (n instanceof Matrix) { - for (let i = 0; i < this.rows; i++) { - for (let j = 0; j < this.cols; j++) { - this.data[i][j] *= n.data[i][j]; - } - } - } else { - for (let i = 0; i < this.rows; i++) { - for (let j = 0; j < this.cols; j++) { - this.data[i][j] *= n; - } - } - } - } - - map(otherFunction) { - for (let i = 0; i < this.rows; i++) { - for (let j = 0; j < this.cols; j++) { - this.data[i][j] = otherFunction(this.data[i][j]) - } - } - } - } - - -class NeuralNetwork { - - // length of input - // length of output - constructor(input_length, output_length) { - // weights = (input length + output length) times 2 - // for a better nn training - this.weights_1 = new Matrix((input_length + output_length) * 2, input_length); - this.weights_2 = new Matrix(output_length, (input_length + output_length) * 2); - this.bias_1 = new Matrix((input_length + output_length) * 2, 1); - this.bias_2 = new Matrix(output_length, 1); - this.learning_rate = 0.9; - } - - - - feed_forward(inputs) { - let inputs_from = Matrix.fromArray(inputs); - let hidden = Matrix.dotProduct(this.weights_1, inputs_from); - hidden.add(this.bias_1); - hidden.map(sigmoid); - let output = Matrix.dotProduct(this.weights_2, hidden); - output.add(this.bias_2); - output.map(sigmoid); - return output.toArray(); - } - - // feedforward with backpropagation - train(input_array, target_array) { - let inputs = Matrix.fromArray(input_array); - - let hidden = Matrix.dotProduct(this.weights_1, inputs); - hidden.add(this.bias_1); - hidden.map(sigmoid); - - let outputs = Matrix.dotProduct(this.weights_2, hidden); - outputs.add(this.bias_2); - outputs.map(sigmoid); - - - let targets = Matrix.fromArray(target_array); - let output_errors = Matrix.subtract(targets, outputs); - - let gradients = Matrix.map(outputs,derivativeOfSigmoid); - gradients.multiply(output_errors); - gradients.multiply(this.learning_rate); - - let hidden_transposed = Matrix.transposeMatrix(hidden); - - let weights_2_deltas = Matrix.dotProduct(gradients, hidden_transposed); - - - - this.weights_2.add(weights_2_deltas); - this.bias_2.add(gradients); - let who_t = Matrix.transposeMatrix(this.weights_2); - let hidden_errors = Matrix.dotProduct(who_t, output_errors); - - let hidden_gradient = Matrix.map(hidden,derivativeOfSigmoid); - hidden_gradient.multiply(hidden_errors); - hidden_gradient.multiply(this.learning_rate); - - let inputs_transposed = Matrix.transposeMatrix(inputs); - let weights_1_deltas = Matrix.dotProduct(hidden_gradient, inputs_transposed); - this.weights_1.add(weights_1_deltas); - this.bias_1.add(hidden_gradient); - } - -} - - - -function shuffle(a) { - var j, x, i; - for (i = a.length - 1; i > 0; i--) { - j = Math.floor(Math.random() * (i + 1)); - x = a[i]; - a[i] = a[j]; - a[j] = x; - } - return a; - } - -// XOR example -// NeuralNetwork takes as params -// input and output length -// 2 inputs and 1 output - -var NN = new NeuralNetwork(2, 1); - -var defined_data = [ - { - input:[0,0], - output:[0] - }, - { - input:[0,1], - output:[1] -}, -{ - input:[1,0], - output:[1] -}, -{ - input:[1,1], - output:[0] -}, -] - -for (let i = 0; i < 1000; i++) { - var shuffled = shuffle(defined_data) - for (let j = 0; j < shuffled.length; j++) { - NN.train(shuffled[j].input,shuffled[j].output) - } -} - - -console.log("[0,1] =>", NN.feed_forward([0,1])); -console.log("[0,0] =>", NN.feed_forward([0,0])); -console.log("[1,0] =>", NN.feed_forward([1,0])); -console.log("[1,1] =>", NN.feed_forward([1,1])); \ No newline at end of file diff --git a/example/new.ng b/example/new.ng new file mode 100644 index 000000000..da792966c --- /dev/null +++ b/example/new.ng @@ -0,0 +1,20 @@ +var console = require("console"); + +var a = function() +{ + this.dic = "Hello"; + return this; +}; +a.prototype.dic = "ok"; +a.prototype = Object(); +a.prototype.talk = function() +{ + console.log(this.dic); +} + +var obj1 = new a(); +obj1.dic = "ownProp"; +obj1.talk(); + +var obj2 = new a(); +obj2.talk(); \ No newline at end of file diff --git a/example/nn4096.js b/example/nn4096.js deleted file mode 100644 index fd1998939..000000000 --- a/example/nn4096.js +++ /dev/null @@ -1,217 +0,0 @@ -function sigmoid(x) { - return 1 / (1 + Math.exp(-x)); -} - -function derivativeOfSigmoid(y){ - return y * (1 - y); -} - - class Matrix { - constructor(rows, cols) { - this.rows = rows; - this.cols = cols; - this.data = []; - for (let i = 0; i < this.rows; i++) { - this.data[i] = []; - for (let j = 0; j < this.cols; j++) { - this.data[i][j] = (Math.random() * 2) - 1; - } - } - } - - - static transposeMatrix(matrix) { - let result = new Matrix(matrix.cols, matrix.rows); - for (let i = 0; i < matrix.rows; i++) { - for (let j = 0; j < matrix.cols; j++) { - result.data[j][i] = matrix.data[i][j]; - } - } - return result; - } - - static dotProduct(matrix1, matrix2) { - if (matrix1.cols !== matrix2.rows) { - return 1; - } - let result = new Matrix(matrix1.rows, matrix2.cols); - for (let i = 0; i < result.rows; i++) { - for (let j = 0; j < result.cols; j++) { - let sum = 0; - for (let k = 0; k < matrix1.cols; k++) { - sum += matrix1.data[i][k] * matrix2.data[k][j]; - } - result.data[i][j] = sum; - } - } - return result; - } - - static fromArray(arr) { - let m = new Matrix(arr.length, 1); - for (let i = 0; i < arr.length; i++) { - m.data[i][0] = arr[i]; - } - return m; - } - - static subtract(a, b) { - let result = new Matrix(a.rows, a.cols); - for (let i = 0; i < result.rows; i++) { - for (let j = 0; j < result.cols; j++) { - var sub = a.data[i][j] - b.data[i][j] - result.data[i][j] = sub - } - } - return result; - } - - static map(matrix, activation) { - let result = new Matrix(matrix.rows, matrix.cols); - for (let i = 0; i < matrix.rows; i++) { - for (let j = 0; j < matrix.cols; j++) { - result.data[i][j] = activation(matrix.data[i][j]) - } - } - return result; - } - - toArray() { - let arr = []; - for (let i = 0; i < this.rows; i++) { - for (let j = 0; j < this.cols; j++) { - arr.push(Number((this.data[i][j]).toFixed(2))); - } - } - return arr; - } - - add(n) { - if (n instanceof Matrix) { - for (let i = 0; i < this.rows; i++) { - for (let j = 0; j < this.cols; j++) { - this.data[i][j] += n.data[i][j]; - } - } - } else { - for (let i = 0; i < this.rows; i++) { - for (let j = 0; j < this.cols; j++) { - this.data[i][j] += n; - } - } - } - } - - - multiply(n) { - if (n instanceof Matrix) { - for (let i = 0; i < this.rows; i++) { - for (let j = 0; j < this.cols; j++) { - this.data[i][j] *= n.data[i][j]; - } - } - } else { - for (let i = 0; i < this.rows; i++) { - for (let j = 0; j < this.cols; j++) { - this.data[i][j] *= n; - } - } - } - } - - map(otherFunction) { - for (let i = 0; i < this.rows; i++) { - for (let j = 0; j < this.cols; j++) { - this.data[i][j] = otherFunction(this.data[i][j]) - } - } - } - } - - -class NeuralNetwork { - - // length of input - // length of output - constructor(input_length, output_length) { - // weights = (input length + output length) times 2 - // for a better nn training - this.weights_1 = new Matrix((input_length + output_length) * 2, input_length); - this.weights_2 = new Matrix(output_length, (input_length + output_length) * 2); - this.bias_1 = new Matrix((input_length + output_length) * 2, 1); - this.bias_2 = new Matrix(output_length, 1); - this.learning_rate = 0.9; - } - - - - feed_forward(inputs) { - let inputs_from = Matrix.fromArray(inputs); - let hidden = Matrix.dotProduct(this.weights_1, inputs_from); - hidden.add(this.bias_1); - hidden.map(sigmoid); - let output = Matrix.dotProduct(this.weights_2, hidden); - output.add(this.bias_2); - output.map(sigmoid); - return output.toArray(); - } - - // feedforward with backpropagation - train(input_array, target_array) { - let inputs = Matrix.fromArray(input_array); - - let hidden = Matrix.dotProduct(this.weights_1, inputs); - hidden.add(this.bias_1); - hidden.map(sigmoid); - - let outputs = Matrix.dotProduct(this.weights_2, hidden); - outputs.add(this.bias_2); - outputs.map(sigmoid); - - - let targets = Matrix.fromArray(target_array); - let output_errors = Matrix.subtract(targets, outputs); - - let gradients_2 = Matrix.map(outputs,derivativeOfSigmoid); - gradients_2.multiply(output_errors); - gradients_2.multiply(this.learning_rate); - - let hidden_transposed = Matrix.transposeMatrix(hidden); - - let weights_2_deltas = Matrix.dotProduct(gradients_2, hidden_transposed); - - - - this.weights_2.add(weights_2_deltas); - this.bias_2.add(gradients_2); - - let who_t = Matrix.transposeMatrix(this.weights_2); - let hidden_errors = Matrix.dotProduct(who_t, output_errors); - - let gradients_1 = Matrix.map(hidden,derivativeOfSigmoid); - gradients_1.multiply(hidden_errors); - gradients_1.multiply(this.learning_rate); - - let inputs_transposed = Matrix.transposeMatrix(inputs); - let weights_1_deltas = Matrix.dotProduct(gradients_1, inputs_transposed); - this.weights_1.add(weights_1_deltas); - this.bias_1.add(gradients_1); - } - -} - -var inputs = [] - -for (let i = 0; i < 4096; i++) { - inputs.push((Math.random() * 2) - 1) -} - -var nn = new NeuralNetwork(4096,4096) - -var second = nn.feed_forward(inputs) -for (let i = 0; i < 4; i+=1) -{ - nn.train(inputs,second) -} - -console.log("[+] Training succeed"); \ No newline at end of file diff --git a/example/null.js b/example/null.js deleted file mode 100644 index 305a65f9a..000000000 --- a/example/null.js +++ /dev/null @@ -1,4 +0,0 @@ -var _null = null; -console.log(_null); -console.log("typeof null: " + typeof _null); - diff --git a/example/number.js b/example/number.js deleted file mode 100644 index f643ced53..000000000 --- a/example/number.js +++ /dev/null @@ -1,9 +0,0 @@ -console.log(1.); -console.log(1[0]); -console.log(1..toString()); -console.log(1..valueOf()); - -var i = 1.012345678; -console.log(i.toFixed(2)); -console.log(Number(i.toFixed(2))); -console.log(parseInt(i.toFixed(2))); \ No newline at end of file diff --git a/example/object.js b/example/object.js deleted file mode 100644 index 069aa51c8..000000000 --- a/example/object.js +++ /dev/null @@ -1,28 +0,0 @@ -var _str = "One string"; -var obj = -{ - "key": "value", - "a": 1, - "b": 2, - "subobj": - { - in: "in obj", - }, - "operation": this.a + this.b, - "str": _str, -}; - -obj.fn = function(_txt) { console.log("obj.fn(): " + _txt); }; - -console.log("obj.key: " + obj.key); -console.log("obj.a + obj.b: " + (obj.a + obj.b)); -console.log("obj.subobj.in: " + obj.subobj.in); -console.log("obj.operation this.a + this.b : " + obj.operation); -obj.fn("Hello !"); -console.log("obj.toString(): " + obj.toString()); - -console.log("obj.toString = 'Hello'"); -obj.toString = "Hello"; -console.log("obj.toString: " + obj.toString); - -console.log("obj.valueOf(): " + obj.valueOf()); \ No newline at end of file diff --git a/example/object_keys.ng b/example/object_keys.ng new file mode 100644 index 000000000..46d9ed80d --- /dev/null +++ b/example/object_keys.ng @@ -0,0 +1,12 @@ +var console = require("console"); +var object = require("object"); + +var obj = +{ + "a": 0, + "b": 1, + "c": 8, + "d": "ahah", +}; + +console.log(object.keys(obj)); \ No newline at end of file diff --git a/example/operation.js b/example/operation.js deleted file mode 100644 index d031da10c..000000000 --- a/example/operation.js +++ /dev/null @@ -1,5 +0,0 @@ -var a = 10; -var b = 12; -var c = a + b; -console.log(c); -console.log("Typeof c: " + typeof c); \ No newline at end of file diff --git a/example/os.ng b/example/os.ng new file mode 100644 index 000000000..a7a108754 --- /dev/null +++ b/example/os.ng @@ -0,0 +1,5 @@ +var os = require("os"); +var console = require("console"); + + +console.log(os.version(), os.arch()); \ No newline at end of file diff --git a/example/pack/test.txt b/example/pack/test.txt deleted file mode 100644 index 96c879774..000000000 --- a/example/pack/test.txt +++ /dev/null @@ -1 +0,0 @@ -test pack diff --git a/example/path.ng b/example/path.ng new file mode 100644 index 000000000..d113e9430 --- /dev/null +++ b/example/path.ng @@ -0,0 +1,4 @@ +var _path = require("path"); +var _console = require("console"); + +_console.log(_path.join("a", "b", "c")); \ No newline at end of file diff --git a/example/performance.js b/example/performance.js deleted file mode 100644 index 033f3a4a4..000000000 --- a/example/performance.js +++ /dev/null @@ -1,15 +0,0 @@ -var t1 = performance.now(); - -var str = ""; - -for(var i = 0; i < 1000; i++) -{ - str += i; -} - -var t2 = performance.now(); - -console.log(performance.timeOrigin); -console.log(t1); -console.log(t2); -console.log("Perf: " + (t2 - t1) + "ms"); \ No newline at end of file diff --git a/example/platform.js b/example/platform.js deleted file mode 100644 index a89743586..000000000 --- a/example/platform.js +++ /dev/null @@ -1,2 +0,0 @@ -console.log("Platform: " + __NJS_PLATFORM); -console.log("Env: " + __NJS_ENV); \ No newline at end of file diff --git a/example/print.js b/example/print.js deleted file mode 100644 index cba5ab397..000000000 --- a/example/print.js +++ /dev/null @@ -1,6 +0,0 @@ -var _obj = { one: 1, two: "2"}; -var _number = 10; -var _string = "hello"; -var _arr = [_number, _string, _obj]; - -console.log(_arr); diff --git a/example/prototype.js b/example/prototype.js deleted file mode 100644 index cc86f37aa..000000000 --- a/example/prototype.js +++ /dev/null @@ -1,15 +0,0 @@ -function protoObject(){} - -protoObject.prototype.hello = "Hello"; -protoObject.prototype.sayHello = function(){console.log(this.hello + " from prototype");}; - -var greeter = new protoObject(); - -console.log(greeter.hello); -greeter.sayHello(); - -console.log("greeter instanceof protoObject: " + (greeter instanceof protoObject)); - -function a(){}; -a.constructor = protoObject.constructor; -console.log(new a()); diff --git a/example/read_file_to_json.js b/example/read_file_to_json.js deleted file mode 100644 index f44afd0c4..000000000 --- a/example/read_file_to_json.js +++ /dev/null @@ -1,34 +0,0 @@ -/* - Example created by Richard https://github.com/raguayGuay - on issue https://github.com/NectarJS/nectarjs/issues/79 -*/ - -var fs = require("fs-std"); -var process = require("process"); - -var inputFile = fs.readFileSync(process.argv[2]); -var output = {}; -output.items = []; -inputFile = inputFile.toString().split("\n"); - -for(var i = 0; i < inputFile.length; i++) { - - if(inputFile[i] != "") { - var subitem = { - uid: inputFile[i], - type: "", - title: inputFile[i], - subtitle: process.argv[3], - arg: inputFile[i], - autocomplete: inputFile[i], - valid: true, - icon: { - type: "fileicon", - path: "~/Desktop" - } - }; - output.items.push(subitem); - } -} - -console.log(JSON.stringify(output)); \ No newline at end of file diff --git a/example/readfile.ng b/example/readfile.ng new file mode 100644 index 000000000..058f271a4 --- /dev/null +++ b/example/readfile.ng @@ -0,0 +1,13 @@ +var console = require("console"); +var fs = require("fs"); + +var args = arguments(); + +if(args[1]) +{ + console.log(fs.readFile(args[1])); +} +else +{ + console.log("[*] Usage:", args[0], " file_to_read.txt"); +} \ No newline at end of file diff --git a/example/regexp.js b/example/regexp.js deleted file mode 100644 index f4f5b823b..000000000 --- a/example/regexp.js +++ /dev/null @@ -1,4 +0,0 @@ -var re = new RegExp("world", "g"); -var text = "Hello world!"; - -console.log(re.exec(text)); \ No newline at end of file diff --git a/example/require.js b/example/require.js deleted file mode 100644 index 4c07318df..000000000 --- a/example/require.js +++ /dev/null @@ -1,4 +0,0 @@ -"!_package ./pack/"; - -var test = require("./required"); -console.log(test); diff --git a/example/required.js b/example/required.js deleted file mode 100644 index 7666babb0..000000000 --- a/example/required.js +++ /dev/null @@ -1,3 +0,0 @@ -console.log("Required"); - -module.exports = "ok"; \ No newline at end of file diff --git a/example/scope.js b/example/scope.js deleted file mode 100644 index f2a34c8ee..000000000 --- a/example/scope.js +++ /dev/null @@ -1,21 +0,0 @@ - -function a(_str) -{ - function _twice() - { - console.log(_str); - } - _twice(); -} - -function b(_str) -{ - function _twice() - { - console.log(_str); - } - _twice(); -} - -a("Hello "); -b("NectarJS ! "); \ No newline at end of file diff --git a/example/simple-http.js b/example/simple-http.js deleted file mode 100644 index ca122471c..000000000 --- a/example/simple-http.js +++ /dev/null @@ -1,21 +0,0 @@ -var http = require("njs-http"); -var host = "localhost"; -var port = 1337; - -function cb (req, res) -{ - console.log("Log: " + req.method + req.url); - - if(req.method == "POST") console.log("POST: " + req.data); - else if(req.method == "PUT") console.log("PUT: " + req.data); - - res.end("Hello NectarJS !"); -}; - -var options = -{ - static: "./", -}; - -console.log("Listening on " + host + ":" + port); -http.listen(host, port, cb, options); diff --git a/example/stm32.js b/example/stm32.js deleted file mode 100644 index 2a81400fc..000000000 --- a/example/stm32.js +++ /dev/null @@ -1,9 +0,0 @@ -var led = require("stm32_led"); - -var i = 1; -while (true) -{ - led.ledState(1, i); - Nectar.wait(1); - i = !i; -} diff --git a/example/string.js b/example/string.js deleted file mode 100644 index 1a0c99da2..000000000 --- a/example/string.js +++ /dev/null @@ -1,23 +0,0 @@ -var a = 'Hi, it\'s '; -var b = "NectarJS !"; -var c = a + b; -var arr = [0,1,2]; -var obj = {}; -var peq = {}; -peq += b; -console.log("a = Hi, it's "); -console.log("b = NectarJS !"); -console.log("a[0] = " + a[0]); -console.log("b[1] = " + b[1]); -console.log("c = a + b: " + c); -console.log('Typeof c: ' + typeof c); -console.log("Length: " + c.length); -console.log("c.split(',')[0]: " + c.split(',')[0]); // output: Hi -console.log("c.indexOf('NectarJS'): " + c.indexOf("NectarJS")); -console.log("c.slice(3): " + c.slice(3)); -console.log("c.slice(9, 17): " + c.slice(9, 17)); -console.log("c.replace('Hi', 'Hello'): " + c.replace('Hi', 'Hello')); -console.log("NectarJS + [0,1,2] : " + (b + arr)); -console.log("[0,1,2] + NectarJS : " + (arr + b)); -console.log("NectarJS + {} : " + (b + obj)); -console.log("{} += NectarJS : " + peq); \ No newline at end of file diff --git a/example/struct.js b/example/struct.js deleted file mode 100644 index 00f55349a..000000000 --- a/example/struct.js +++ /dev/null @@ -1,17 +0,0 @@ -Nectar.createStruct("test", "a:string", "b:int", "c:double"); - -function Test() -{ - var testStruct = Nectar.initStruct("test"); - testStruct.NStruct("test").a = "Hello Struct!"; - console.log(testStruct.NStruct("test").a); - return testStruct -} - -var retStruct = Test(); -retStruct.NStruct("test").a = "After return"; -console.log(retStruct.NStruct("test").a); - -// access to non struct member fall back on hashmap -retStruct.NStruct("test").x = "Fallback"; -console.log(retStruct.NStruct("test").x); \ No newline at end of file diff --git a/example/test.js b/example/test.js deleted file mode 100644 index 9e7225e30..000000000 --- a/example/test.js +++ /dev/null @@ -1,5 +0,0 @@ -var _ffi = require("test"); - -__FFI_SIMPLE_MSGBOX(); - -_ffi.msgBox("Hello !", "Nectar"); diff --git a/example/this.js b/example/this.js deleted file mode 100644 index 74e29856a..000000000 --- a/example/this.js +++ /dev/null @@ -1,14 +0,0 @@ -function classProto() -{ - this.hello = "Hello"; - function containedProto() - { - this.inside = "Inside containedProto"; - } - this.inception = new containedProto(); -} - -var gretter = new classProto(); - -console.log(gretter.hello); -console.log(gretter.inception.inside); diff --git a/example/thread.js b/example/thread.js deleted file mode 100644 index 059b8935e..000000000 --- a/example/thread.js +++ /dev/null @@ -1,29 +0,0 @@ -var thread = require("Thread"); - -var _hello = "Hello"; -var a = 0; - -function count() -{ - for(var i = 0; i < 1000; i++) - { - a+=i; - } -} - -function test() -{ - thread.lock(); // example lock - console.log(_hello, "!"); -} - -thread.run(test); - -for(var i = 0; i < 4; i++) // run 4 threads of count() -{ - thread.run(count); -} - -thread.waitForAll(); // wait for all threads to finish - -console.log(a); \ No newline at end of file diff --git a/example/thread.ng b/example/thread.ng new file mode 100644 index 000000000..4e5580c02 --- /dev/null +++ b/example/thread.ng @@ -0,0 +1,26 @@ +var _thread = require("thread"); +var thread = _thread(); + +var console = require("console"); + +var fn1 = function() +{ + for(var i = 0; i < 10; i++) + { + console.log("fn1"); + } +}; + +var fn2 = function() +{ + for(var i = 0; i < 10; i++) + { + console.log("fn2"); + } +}; + +thread.run(fn1); + +thread.run(fn2); + +thread.waitForAll(); diff --git a/example/throw.ng b/example/throw.ng new file mode 100644 index 000000000..ebaddd23e --- /dev/null +++ b/example/throw.ng @@ -0,0 +1,11 @@ +var console = require("console"); +var error = require("error"); + +try +{ + error.throw("An error"); +} +catch(e) +{ + console.log(e); +} \ No newline at end of file diff --git a/example/try_catch.js b/example/try_catch.js deleted file mode 100644 index 5064a28a1..000000000 --- a/example/try_catch.js +++ /dev/null @@ -1,12 +0,0 @@ -try -{ - throw {msg: "Exception raised", code: 1} -} -catch(e) -{ - console.log(e); -} -finally -{ - console.log("Cleaning"); -} diff --git a/example/typescript.ts b/example/typescript.ts deleted file mode 100644 index e6bc09c32..000000000 --- a/example/typescript.ts +++ /dev/null @@ -1,12 +0,0 @@ -class Greeter { - greeting: string; - constructor(message: string) { - this.greeting = message; - } - greet() { - return "Hello, " + this.greeting; - } -} - -let greeter = new Greeter("world"); -console.log(greeter.greet()); diff --git a/example/undef.js b/example/undef.js deleted file mode 100644 index dc166c009..000000000 --- a/example/undef.js +++ /dev/null @@ -1,12 +0,0 @@ -undef = "ok" - -for(i = 0; i < 1; i++) -{ - console.log("undef i loop ok"); -} - -oUnd.test = 1; -aUnd["test"] = 1; -aIntUnd[0] = 1; - -console.log(undef); diff --git a/example/undefined.js b/example/undefined.js deleted file mode 100644 index b510ad82f..000000000 --- a/example/undefined.js +++ /dev/null @@ -1,7 +0,0 @@ -var undef; -if(!undef) console.log("undef is undefined"); -else console.log("undef is defined"); - -var def = 1; -if(def) console.log("def is defined"); -else console.log("def is undefined"); diff --git a/example/unicode_var.js b/example/unicode_var.js deleted file mode 100644 index c8a9392ab..000000000 --- a/example/unicode_var.js +++ /dev/null @@ -1,3 +0,0 @@ -var a = 0; -var \u005F = 1; -console.log(\u005F); \ No newline at end of file diff --git a/example/variadic.js b/example/variadic.js deleted file mode 100644 index b311182ec..000000000 --- a/example/variadic.js +++ /dev/null @@ -1,11 +0,0 @@ -function test(_one, _two) -{ - if(_two) __NJS_Log_Console(_two); - else if(_one) __NJS_Log_Console(_one); - else __NJS_Log_Console("undefined"); -} - -test(); -test("First Arg"); -test("First Arg", "Second Arg"); - diff --git a/example/vector.js b/example/vector.js deleted file mode 100644 index 9b6aa682f..000000000 --- a/example/vector.js +++ /dev/null @@ -1,30 +0,0 @@ -/* - Vector proposed by @wesley1989 on Discord to test classes implementation -*/ -class Vector { - constructor(x,y){ - this.x = x | 0 - this.y = y | 0 - } - - add(n){ - this.x+=n - this.y+=n - } - - copy(vec){ - if(vec && (vec instanceof Vector)){ - this.x = vec.x - this.y = vec.y - } - } -} -var vec = new Vector() -console.log(vec); -vec = new Vector(8,9) -console.log(vec); -vec.add(4) -console.log(vec); -var vec2 = new Vector() -vec.copy(vec2) -console.log(vec); \ No newline at end of file diff --git a/example/void.js b/example/void.js deleted file mode 100644 index f36c6c167..000000000 --- a/example/void.js +++ /dev/null @@ -1,6 +0,0 @@ -console.log(void 0); - -var a = void 0; -console.log(a); - -void (function(){console.log("ok"); return 1;})(); \ No newline at end of file diff --git a/example/wasm.html b/example/wasm.html index 3c90a17b5..95ad3af14 100644 --- a/example/wasm.html +++ b/example/wasm.html @@ -5,8 +5,8 @@ function WasmLoaded() { - console.log(Module.callNectar("callFromJS", "Hello From NectarJS !")); + console.log(Module.call("callFromNerd", "Hello From Nerd !")); } - + diff --git a/example/wasm_binding.ng b/example/wasm_binding.ng new file mode 100644 index 000000000..73fcf2116 --- /dev/null +++ b/example/wasm_binding.ng @@ -0,0 +1,21 @@ +var wasm = require("wasm"); + +// function proto for binding : string(string) +var callFromNerd = function(_data) +{ + if(_data) + { + wasm.run("document.write('

" + _data + "

');"); + } + else + { + wasm.run("document.write('

No Data

');"); + } + return "Executed from wasm"; +}; + +// bind function to be executed in Browser env with Module.call(_functionName, _data); +wasm.bind("callFromNerd", callFromNerd); + +// Fire a JS function to know when env is set up, see wasm.html +wasm.run("WasmLoaded();"); \ No newline at end of file diff --git a/example/wasm_export.js b/example/wasm_export.js deleted file mode 100644 index be79ebcea..000000000 --- a/example/wasm_export.js +++ /dev/null @@ -1,15 +0,0 @@ -var WASM = require("WASM"); - -// function proto for binding : string(string) -function callFromJS(_data) -{ - if(!_data) WASM.run("document.write('

No Data

');"); - else WASM.run("document.write('

" + _data + "

');"); - return "Executed from WASM"; -} - -// bind function to be executed in Browser env with Module.callNectar(_functionName, _data); -WASM.bind("callFromJS", callFromJS); - -// Fire a JS function to know when env is set up, see wasm.html -WASM.run("WasmLoaded();"); \ No newline at end of file diff --git a/example/webview.js b/example/webview.js deleted file mode 100644 index dbca7a2db..000000000 --- a/example/webview.js +++ /dev/null @@ -1,6 +0,0 @@ -var webview = require("webview"); - -var content = "data:text/html,

Hello Nectar !

"; -var title = "NectarJS App"; - -webview.launch(content, title); diff --git a/example/with space.js b/example/with space.js deleted file mode 100644 index 28b12a9bd..000000000 --- a/example/with space.js +++ /dev/null @@ -1 +0,0 @@ -console.log("Hello space !"); \ No newline at end of file diff --git a/example/www/index.html b/example/www/index.html deleted file mode 100644 index 8a4d6fce1..000000000 --- a/example/www/index.html +++ /dev/null @@ -1 +0,0 @@ -Hello From NectarJS embeded HTTP Server \ No newline at end of file diff --git a/example/www/version.txt b/example/www/version.txt deleted file mode 100644 index c22708346..000000000 --- a/example/www/version.txt +++ /dev/null @@ -1 +0,0 @@ -0 \ No newline at end of file diff --git a/external/arduino/avr/LICENSE.txt b/external/arduino/avr/LICENSE.txt new file mode 100644 index 000000000..08794413e --- /dev/null +++ b/external/arduino/avr/LICENSE.txt @@ -0,0 +1,64 @@ +The contents of avr-libc are licensed with a Modified BSD License. + +All of this is supposed to be Free Software, Open Source, DFSG-free, +GPL-compatible, and OK to use in both free and proprietary applications. + +See the license information in the individual source files for details. + +Additions and corrections to this file are welcome. + +******************************************************************************* +Portions of avr-libc are Copyright (c) 1999-2010 +Keith Gudger, +Bjoern Haase, +Steinar Haugen, +Peter Jansen, +Reinhard Jessich, +Magnus Johansson, +Artur Lipowski, +Marek Michalkiewicz, +Colin O'Flynn, +Bob Paddock, +Reiner Patommel, +Michael Rickman, +Theodore A. Roth, +Juergen Schilling, +Philip Soeberg, +Anatoly Sokolov, +Nils Kristian Strom, +Michael Stumpf, +Stefan Swanepoel, +Eric B. Weddington, +Joerg Wunsch, +Dmitry Xmelkov, +The Regents of the University of California. +All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of the copyright holders nor the names of + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + +******************************************************************************* \ No newline at end of file diff --git a/external/arduino/avr/boards.txt b/external/arduino/avr/boards.txt new file mode 100644 index 000000000..1344fbb5c --- /dev/null +++ b/external/arduino/avr/boards.txt @@ -0,0 +1,1054 @@ +# See: http://code.google.com/p/arduino/wiki/Platforms + +menu.cpu=Processor + +############################################################## + +yun.name=Arduino Yún +yun.upload.via_ssh=true + +yun.vid.0=0x2341 +yun.pid.0=0x0041 +yun.vid.1=0x2341 +yun.pid.1=0x8041 +yun.vid.2=0x2A03 +yun.pid.2=0x0041 +yun.vid.3=0x2A03 +yun.pid.3=0x8041 + +yun.upload.tool=avrdude +yun.upload.protocol=avr109 +yun.upload.maximum_size=28672 +yun.upload.maximum_data_size=2560 +yun.upload.speed=57600 +yun.upload.disable_flushing=true +yun.upload.use_1200bps_touch=true +yun.upload.wait_for_upload_port=true + +yun.bootloader.tool=avrdude +yun.bootloader.low_fuses=0xff +yun.bootloader.high_fuses=0xd8 +yun.bootloader.extended_fuses=0xfb +yun.bootloader.file=caterina/Caterina-Yun.hex +yun.bootloader.noblink=caterina/Caterina-Yun-noblink.hex +yun.bootloader.unlock_bits=0x3F +yun.bootloader.lock_bits=0x2F + +yun.build.mcu=atmega32u4 +yun.build.f_cpu=16000000L +yun.build.vid=0x2341 +yun.build.pid=0x8041 +yun.build.usb_product="Arduino Yun" +yun.build.board=AVR_YUN +yun.build.core=arduino +yun.build.variant=yun +yun.build.extra_flags={build.usb_flags} + +############################################################## + +uno.name=Arduino Uno + +uno.vid.0=0x2341 +uno.pid.0=0x0043 +uno.vid.1=0x2341 +uno.pid.1=0x0001 +uno.vid.2=0x2A03 +uno.pid.2=0x0043 +uno.vid.3=0x2341 +uno.pid.3=0x0243 + +uno.upload.tool=avrdude +uno.upload.protocol=arduino +uno.upload.maximum_size=32256 +uno.upload.maximum_data_size=2048 +uno.upload.speed=115200 + +uno.bootloader.tool=avrdude +uno.bootloader.low_fuses=0xFF +uno.bootloader.high_fuses=0xDE +uno.bootloader.extended_fuses=0xFD +uno.bootloader.unlock_bits=0x3F +uno.bootloader.lock_bits=0x0F +uno.bootloader.file=optiboot/optiboot_atmega328.hex + +uno.build.mcu=atmega328p +uno.build.f_cpu=16000000L +uno.build.board=AVR_UNO +uno.build.core=arduino +uno.build.variant=standard + +############################################################## + +diecimila.name=Arduino Duemilanove or Diecimila + +diecimila.upload.tool=avrdude +diecimila.upload.protocol=arduino + +diecimila.bootloader.tool=avrdude +diecimila.bootloader.low_fuses=0xFF +diecimila.bootloader.unlock_bits=0x3F +diecimila.bootloader.lock_bits=0x0F + +diecimila.build.f_cpu=16000000L +diecimila.build.board=AVR_DUEMILANOVE +diecimila.build.core=arduino +diecimila.build.variant=standard + +## Arduino Duemilanove or Diecimila w/ ATmega328P +## ---------------------------------------------- +diecimila.menu.cpu.atmega328=ATmega328P + +diecimila.menu.cpu.atmega328.upload.maximum_size=30720 +diecimila.menu.cpu.atmega328.upload.maximum_data_size=2048 +diecimila.menu.cpu.atmega328.upload.speed=57600 + +diecimila.menu.cpu.atmega328.bootloader.high_fuses=0xDA +diecimila.menu.cpu.atmega328.bootloader.extended_fuses=0xFD +diecimila.menu.cpu.atmega328.bootloader.file=atmega/ATmegaBOOT_168_atmega328.hex + +diecimila.menu.cpu.atmega328.build.mcu=atmega328p + +## Arduino Duemilanove or Diecimila w/ ATmega168 +## --------------------------------------------- +diecimila.menu.cpu.atmega168=ATmega168 + +diecimila.menu.cpu.atmega168.upload.maximum_size=14336 +diecimila.menu.cpu.atmega168.upload.maximum_data_size=1024 +diecimila.menu.cpu.atmega168.upload.speed=19200 + +diecimila.menu.cpu.atmega168.bootloader.high_fuses=0xdd +diecimila.menu.cpu.atmega168.bootloader.extended_fuses=0xF8 +diecimila.menu.cpu.atmega168.bootloader.file=atmega/ATmegaBOOT_168_diecimila.hex + +diecimila.menu.cpu.atmega168.build.mcu=atmega168 + +############################################################## + +nano.name=Arduino Nano + +nano.upload.tool=avrdude +nano.upload.protocol=arduino + +nano.bootloader.tool=avrdude +nano.bootloader.unlock_bits=0x3F +nano.bootloader.lock_bits=0x0F + +nano.build.f_cpu=16000000L +nano.build.board=AVR_NANO +nano.build.core=arduino +nano.build.variant=eightanaloginputs + +## Arduino Nano w/ ATmega328P +## -------------------------- +nano.menu.cpu.atmega328=ATmega328P + +nano.menu.cpu.atmega328.upload.maximum_size=30720 +nano.menu.cpu.atmega328.upload.maximum_data_size=2048 +nano.menu.cpu.atmega328.upload.speed=115200 + +nano.menu.cpu.atmega328.bootloader.low_fuses=0xFF +nano.menu.cpu.atmega328.bootloader.high_fuses=0xDA +nano.menu.cpu.atmega328.bootloader.extended_fuses=0xFD +nano.menu.cpu.atmega328.bootloader.file=optiboot/optiboot_atmega328.hex + +nano.menu.cpu.atmega328.build.mcu=atmega328p + +## Arduino Nano w/ ATmega328P (old bootloader) +## -------------------------- +nano.menu.cpu.atmega328old=ATmega328P (Old Bootloader) + +nano.menu.cpu.atmega328old.upload.maximum_size=30720 +nano.menu.cpu.atmega328old.upload.maximum_data_size=2048 +nano.menu.cpu.atmega328old.upload.speed=57600 + +nano.menu.cpu.atmega328old.bootloader.low_fuses=0xFF +nano.menu.cpu.atmega328old.bootloader.high_fuses=0xDA +nano.menu.cpu.atmega328old.bootloader.extended_fuses=0xFD +nano.menu.cpu.atmega328old.bootloader.file=atmega/ATmegaBOOT_168_atmega328.hex + +nano.menu.cpu.atmega328old.build.mcu=atmega328p + +## Arduino Nano w/ ATmega168 +## ------------------------- +nano.menu.cpu.atmega168=ATmega168 + +nano.menu.cpu.atmega168.upload.maximum_size=14336 +nano.menu.cpu.atmega168.upload.maximum_data_size=1024 +nano.menu.cpu.atmega168.upload.speed=19200 + +nano.menu.cpu.atmega168.bootloader.low_fuses=0xff +nano.menu.cpu.atmega168.bootloader.high_fuses=0xdd +nano.menu.cpu.atmega168.bootloader.extended_fuses=0xF8 +nano.menu.cpu.atmega168.bootloader.file=atmega/ATmegaBOOT_168_diecimila.hex + +nano.menu.cpu.atmega168.build.mcu=atmega168 + +############################################################## + +mega.name=Arduino Mega or Mega 2560 + +mega.vid.0=0x2341 +mega.pid.0=0x0010 +mega.vid.1=0x2341 +mega.pid.1=0x0042 +mega.vid.2=0x2A03 +mega.pid.2=0x0010 +mega.vid.3=0x2A03 +mega.pid.3=0x0042 +mega.vid.4=0x2341 +mega.pid.4=0x0210 +mega.vid.5=0x2341 +mega.pid.5=0x0242 + +mega.upload.tool=avrdude +mega.upload.maximum_data_size=8192 + +mega.bootloader.tool=avrdude +mega.bootloader.low_fuses=0xFF +mega.bootloader.unlock_bits=0x3F +mega.bootloader.lock_bits=0x0F + +mega.build.f_cpu=16000000L +mega.build.core=arduino +mega.build.variant=mega +# default board may be overridden by the cpu menu +mega.build.board=AVR_MEGA2560 + +## Arduino Mega w/ ATmega2560 +## ------------------------- +mega.menu.cpu.atmega2560=ATmega2560 (Mega 2560) + +mega.menu.cpu.atmega2560.upload.protocol=wiring +mega.menu.cpu.atmega2560.upload.maximum_size=253952 +mega.menu.cpu.atmega2560.upload.speed=115200 + +mega.menu.cpu.atmega2560.bootloader.high_fuses=0xD8 +mega.menu.cpu.atmega2560.bootloader.extended_fuses=0xFD +mega.menu.cpu.atmega2560.bootloader.file=stk500v2/stk500boot_v2_mega2560.hex + +mega.menu.cpu.atmega2560.build.mcu=atmega2560 +mega.menu.cpu.atmega2560.build.board=AVR_MEGA2560 + +## Arduino Mega w/ ATmega1280 +## ------------------------- +mega.menu.cpu.atmega1280=ATmega1280 + +mega.menu.cpu.atmega1280.upload.protocol=arduino +mega.menu.cpu.atmega1280.upload.maximum_size=126976 +mega.menu.cpu.atmega1280.upload.speed=57600 + +mega.menu.cpu.atmega1280.bootloader.high_fuses=0xDA +mega.menu.cpu.atmega1280.bootloader.extended_fuses=0xF5 +mega.menu.cpu.atmega1280.bootloader.file=atmega/ATmegaBOOT_168_atmega1280.hex + +mega.menu.cpu.atmega1280.build.mcu=atmega1280 +mega.menu.cpu.atmega1280.build.board=AVR_MEGA + +############################################################## + +megaADK.name=Arduino Mega ADK + +megaADK.vid.0=0x2341 +megaADK.pid.0=0x003f +megaADK.vid.1=0x2341 +megaADK.pid.1=0x0044 +megaADK.vid.2=0x2A03 +megaADK.pid.2=0x003f +megaADK.vid.3=0x2A03 +megaADK.pid.3=0x0044 + +megaADK.upload.tool=avrdude +megaADK.upload.protocol=wiring +megaADK.upload.maximum_size=253952 +megaADK.upload.maximum_data_size=8192 +megaADK.upload.speed=115200 + +megaADK.bootloader.tool=avrdude +megaADK.bootloader.low_fuses=0xFF +megaADK.bootloader.high_fuses=0xD8 +megaADK.bootloader.extended_fuses=0xFD +megaADK.bootloader.file=stk500v2/stk500boot_v2_mega2560.hex +megaADK.bootloader.unlock_bits=0x3F +megaADK.bootloader.lock_bits=0x0F + +megaADK.build.mcu=atmega2560 +megaADK.build.f_cpu=16000000L +megaADK.build.board=AVR_ADK +megaADK.build.core=arduino +megaADK.build.variant=mega + +############################################################## + +leonardo.name=Arduino Leonardo +leonardo.vid.0=0x2341 +leonardo.pid.0=0x0036 +leonardo.vid.1=0x2341 +leonardo.pid.1=0x8036 +leonardo.vid.2=0x2A03 +leonardo.pid.2=0x0036 +leonardo.vid.3=0x2A03 +leonardo.pid.3=0x8036 + +leonardo.upload.tool=avrdude +leonardo.upload.protocol=avr109 +leonardo.upload.maximum_size=28672 +leonardo.upload.maximum_data_size=2560 +leonardo.upload.speed=57600 +leonardo.upload.disable_flushing=true +leonardo.upload.use_1200bps_touch=true +leonardo.upload.wait_for_upload_port=true + +leonardo.bootloader.tool=avrdude +leonardo.bootloader.low_fuses=0xff +leonardo.bootloader.high_fuses=0xd8 +leonardo.bootloader.extended_fuses=0xcb +leonardo.bootloader.file=caterina/Caterina-Leonardo.hex +leonardo.bootloader.unlock_bits=0x3F +leonardo.bootloader.lock_bits=0x2F + +leonardo.build.mcu=atmega32u4 +leonardo.build.f_cpu=16000000L +leonardo.build.vid=0x2341 +leonardo.build.pid=0x8036 +leonardo.build.usb_product="Arduino Leonardo" +leonardo.build.board=AVR_LEONARDO +leonardo.build.core=arduino +leonardo.build.variant=leonardo +leonardo.build.extra_flags={build.usb_flags} + +############################################################## + +leonardoeth.name=Arduino Leonardo ETH +leonardoeth.vid.0=0x2a03 +leonardoeth.pid.0=0x0040 +leonardoeth.vid.1=0x2a03 +leonardoeth.pid.1=0x8040 + +leonardoeth.upload.tool=avrdude +leonardoeth.upload.protocol=avr109 +leonardoeth.upload.maximum_size=28672 +leonardoeth.upload.maximum_data_size=2560 +leonardoeth.upload.speed=57600 +leonardoeth.upload.disable_flushing=true +leonardoeth.upload.use_1200bps_touch=true +leonardoeth.upload.wait_for_upload_port=true + +leonardoeth.bootloader.tool=avrdude +leonardoeth.bootloader.low_fuses=0xff +leonardoeth.bootloader.high_fuses=0xd8 +leonardoeth.bootloader.extended_fuses=0xcb +leonardoeth.bootloader.file=caterina/Caterina-LeonardoEthernet.hex +leonardoeth.bootloader.unlock_bits=0x3F +leonardoeth.bootloader.lock_bits=0x2F + +leonardoeth.build.mcu=atmega32u4 +leonardoeth.build.f_cpu=16000000L +leonardoeth.build.vid=0x2a03 +leonardoeth.build.pid=0x8040 +leonardoeth.build.usb_product="Arduino Leonardo ETH" +leonardoeth.build.board=AVR_LEONARDO_ETH +leonardoeth.build.core=arduino +leonardoeth.build.variant=leonardo +leonardoeth.build.extra_flags={build.usb_flags} + +############################################################## + +micro.name=Arduino Micro + +micro.vid.0=0x2341 +micro.pid.0=0x0037 +micro.vid.1=0x2341 +micro.pid.1=0x8037 +micro.vid.2=0x2A03 +micro.pid.2=0x0037 +micro.vid.3=0x2A03 +micro.pid.3=0x8037 +micro.vid.4=0x2341 +micro.pid.4=0x0237 +micro.vid.5=0x2341 +micro.pid.5=0x8237 + +micro.upload.tool=avrdude +micro.upload.protocol=avr109 +micro.upload.maximum_size=28672 +micro.upload.maximum_data_size=2560 +micro.upload.speed=57600 +micro.upload.disable_flushing=true +micro.upload.use_1200bps_touch=true +micro.upload.wait_for_upload_port=true + +micro.bootloader.tool=avrdude +micro.bootloader.low_fuses=0xff +micro.bootloader.high_fuses=0xd8 +micro.bootloader.extended_fuses=0xcb +micro.bootloader.file=caterina/Caterina-Micro.hex +micro.bootloader.unlock_bits=0x3F +micro.bootloader.lock_bits=0x2F + +micro.build.mcu=atmega32u4 +micro.build.f_cpu=16000000L +micro.build.vid=0x2341 +micro.build.pid=0x8037 +micro.build.usb_product="Arduino Micro" +micro.build.board=AVR_MICRO +micro.build.core=arduino +micro.build.variant=micro +micro.build.extra_flags={build.usb_flags} + +############################################################## + +esplora.name=Arduino Esplora +esplora.vid.0=0x2341 +esplora.pid.0=0x003C +esplora.vid.1=0x2341 +esplora.pid.1=0x803C +esplora.vid.2=0x2A03 +esplora.pid.2=0x003C +esplora.vid.3=0x2A03 +esplora.pid.3=0x803C + +esplora.upload.tool=avrdude +esplora.upload.protocol=avr109 +esplora.upload.maximum_size=28672 +esplora.upload.maximum_data_size=2560 +esplora.upload.speed=57600 +esplora.upload.disable_flushing=true +esplora.upload.use_1200bps_touch=true +esplora.upload.wait_for_upload_port=true + +esplora.bootloader.tool=avrdude +esplora.bootloader.low_fuses=0xff +esplora.bootloader.high_fuses=0xd8 +esplora.bootloader.extended_fuses=0xcb +esplora.bootloader.file=caterina/Caterina-Esplora.hex +esplora.bootloader.unlock_bits=0x3F +esplora.bootloader.lock_bits=0x2F + +esplora.build.mcu=atmega32u4 +esplora.build.f_cpu=16000000L +esplora.build.vid=0x2341 +esplora.build.pid=0x803c +esplora.build.usb_product="Arduino Esplora" +esplora.build.board=AVR_ESPLORA +esplora.build.core=arduino +esplora.build.variant=leonardo +esplora.build.extra_flags={build.usb_flags} + +############################################################## + +mini.name=Arduino Mini + +mini.upload.tool=avrdude +mini.upload.protocol=arduino + +mini.bootloader.tool=avrdude +mini.bootloader.low_fuses=0xff +mini.bootloader.unlock_bits=0x3F +mini.bootloader.lock_bits=0x0F + +mini.build.f_cpu=16000000L +mini.build.board=AVR_MINI +mini.build.core=arduino +mini.build.variant=eightanaloginputs + +## Arduino Mini w/ ATmega328P +## -------------------------- +mini.menu.cpu.atmega328=ATmega328P + +mini.menu.cpu.atmega328.upload.maximum_size=28672 +mini.menu.cpu.atmega328.upload.maximum_data_size=2048 +mini.menu.cpu.atmega328.upload.speed=115200 + +mini.menu.cpu.atmega328.bootloader.high_fuses=0xd8 +mini.menu.cpu.atmega328.bootloader.extended_fuses=0xFD +mini.menu.cpu.atmega328.bootloader.file=optiboot/optiboot_atmega328-Mini.hex + +mini.menu.cpu.atmega328.build.mcu=atmega328p + +## Arduino Mini w/ ATmega168 +## ------------------------- +mini.menu.cpu.atmega168=ATmega168 + +mini.menu.cpu.atmega168.upload.maximum_size=14336 +mini.menu.cpu.atmega168.upload.maximum_data_size=1024 +mini.menu.cpu.atmega168.upload.speed=19200 + +mini.menu.cpu.atmega168.bootloader.high_fuses=0xdd +mini.menu.cpu.atmega168.bootloader.extended_fuses=0xF8 +mini.menu.cpu.atmega168.bootloader.file=atmega/ATmegaBOOT_168_ng.hex + +mini.menu.cpu.atmega168.build.mcu=atmega168 + +############################################################## + +ethernet.name=Arduino Ethernet + +ethernet.upload.tool=avrdude +ethernet.upload.protocol=arduino +ethernet.upload.maximum_size=32256 +ethernet.upload.maximum_data_size=2048 +ethernet.upload.speed=115200 + +ethernet.bootloader.tool=avrdude +ethernet.bootloader.low_fuses=0xff +ethernet.bootloader.high_fuses=0xde +ethernet.bootloader.extended_fuses=0xFD +ethernet.bootloader.file=optiboot/optiboot_atmega328.hex +ethernet.bootloader.unlock_bits=0x3F +ethernet.bootloader.lock_bits=0x0F + +ethernet.build.variant=ethernet +ethernet.build.mcu=atmega328p +ethernet.build.f_cpu=16000000L +ethernet.build.board=AVR_ETHERNET +ethernet.build.core=arduino + +############################################################## + +fio.name=Arduino Fio + +fio.upload.tool=avrdude +fio.upload.protocol=arduino +fio.upload.maximum_size=30720 +fio.upload.maximum_data_size=2048 +fio.upload.speed=57600 + +fio.bootloader.tool=avrdude +fio.bootloader.low_fuses=0xFF +fio.bootloader.high_fuses=0xDA +fio.bootloader.extended_fuses=0xFD +fio.bootloader.file=atmega/ATmegaBOOT_168_atmega328_pro_8MHz.hex +fio.bootloader.unlock_bits=0x3F +fio.bootloader.lock_bits=0x0F + +fio.build.mcu=atmega328p +fio.build.f_cpu=8000000L +fio.build.board=AVR_FIO +fio.build.core=arduino +fio.build.variant=eightanaloginputs + +############################################################## + +bt.name=Arduino BT + +bt.upload.tool=avrdude +bt.upload.protocol=arduino +bt.upload.speed=19200 +bt.upload.disable_flushing=true + +bt.bootloader.tool=avrdude +bt.bootloader.low_fuses=0xff +bt.bootloader.unlock_bits=0x3F +bt.bootloader.lock_bits=0x0F + +bt.build.f_cpu=16000000L +bt.build.board=AVR_BT +bt.build.core=arduino +bt.build.variant=eightanaloginputs + +## Arduino BT w/ ATmega328P +## ------------------------ +bt.menu.cpu.atmega328=ATmega328P +bt.menu.cpu.atmega328.upload.maximum_size=28672 +bt.menu.cpu.atmega328.upload.maximum_data_size=2048 + +bt.menu.cpu.atmega328.bootloader.high_fuses=0xd8 +bt.menu.cpu.atmega328.bootloader.extended_fuses=0xFD +bt.menu.cpu.atmega328.bootloader.file=bt/ATmegaBOOT_168_atmega328_bt.hex + +bt.menu.cpu.atmega328.build.mcu=atmega328p + +## Arduino BT w/ ATmega168 +## ----------------------- +bt.menu.cpu.atmega168=ATmega168 +bt.menu.cpu.atmega168.upload.maximum_size=14336 +bt.menu.cpu.atmega168.upload.maximum_data_size=1024 + +bt.menu.cpu.atmega168.bootloader.high_fuses=0xdd +bt.menu.cpu.atmega168.bootloader.extended_fuses=0xF8 +bt.menu.cpu.atmega168.bootloader.file=bt/ATmegaBOOT_168.hex + +bt.menu.cpu.atmega168.build.mcu=atmega168 + +############################################################## + +LilyPadUSB.name=LilyPad Arduino USB +LilyPadUSB.vid.0=0x1B4F +LilyPadUSB.pid.0=0x9207 +LilyPadUSB.vid.1=0x1B4F +LilyPadUSB.pid.1=0x9208 + +LilyPadUSB.upload.tool=avrdude +LilyPadUSB.upload.protocol=avr109 +LilyPadUSB.upload.maximum_size=28672 +LilyPadUSB.upload.maximum_data_size=2560 +LilyPadUSB.upload.speed=57600 +LilyPadUSB.upload.disable_flushing=true +LilyPadUSB.upload.use_1200bps_touch=true +LilyPadUSB.upload.wait_for_upload_port=true + +LilyPadUSB.bootloader.tool=avrdude +LilyPadUSB.bootloader.low_fuses=0xff +LilyPadUSB.bootloader.high_fuses=0xd8 +LilyPadUSB.bootloader.extended_fuses=0xce +LilyPadUSB.bootloader.file=caterina-LilyPadUSB/Caterina-LilyPadUSB.hex +LilyPadUSB.bootloader.unlock_bits=0x3F +LilyPadUSB.bootloader.lock_bits=0x2F + +LilyPadUSB.build.mcu=atmega32u4 +LilyPadUSB.build.f_cpu=8000000L +LilyPadUSB.build.vid=0x1B4F +LilyPadUSB.build.pid=0x9208 +LilyPadUSB.build.usb_product="LilyPad USB" +LilyPadUSB.build.board=AVR_LILYPAD_USB +LilyPadUSB.build.core=arduino +LilyPadUSB.build.variant=leonardo +LilyPadUSB.build.extra_flags={build.usb_flags} + +############################################################## + +lilypad.name=LilyPad Arduino + +lilypad.upload.tool=avrdude +lilypad.upload.protocol=arduino + +lilypad.bootloader.tool=avrdude +lilypad.bootloader.unlock_bits=0x3F +lilypad.bootloader.lock_bits=0x0F + +lilypad.build.f_cpu=8000000L +lilypad.build.board=AVR_LILYPAD +lilypad.build.core=arduino +lilypad.build.variant=standard + +## LilyPad Arduino w/ ATmega328P +## ----------------------------- +lilypad.menu.cpu.atmega328=ATmega328P + +lilypad.menu.cpu.atmega328.upload.maximum_size=30720 +lilypad.menu.cpu.atmega328.upload.maximum_data_size=2048 +lilypad.menu.cpu.atmega328.upload.speed=57600 + +lilypad.menu.cpu.atmega328.bootloader.low_fuses=0xFF +lilypad.menu.cpu.atmega328.bootloader.high_fuses=0xDA +lilypad.menu.cpu.atmega328.bootloader.extended_fuses=0xFD +lilypad.menu.cpu.atmega328.bootloader.file=atmega/ATmegaBOOT_168_atmega328_pro_8MHz.hex + +lilypad.menu.cpu.atmega328.build.mcu=atmega328p + +## LilyPad Arduino w/ ATmega168 +## ---------------------------- +lilypad.menu.cpu.atmega168=ATmega168 + +lilypad.menu.cpu.atmega168.upload.maximum_size=14336 +lilypad.menu.cpu.atmega168.upload.maximum_data_size=1024 +lilypad.menu.cpu.atmega168.upload.speed=19200 + +lilypad.menu.cpu.atmega168.bootloader.low_fuses=0xe2 +lilypad.menu.cpu.atmega168.bootloader.high_fuses=0xdd +lilypad.menu.cpu.atmega168.bootloader.extended_fuses=0xF8 +lilypad.menu.cpu.atmega168.bootloader.file=lilypad/LilyPadBOOT_168.hex + +lilypad.menu.cpu.atmega168.build.mcu=atmega168 + +############################################################## + +pro.name=Arduino Pro or Pro Mini + +pro.upload.tool=avrdude +pro.upload.protocol=arduino + +pro.bootloader.tool=avrdude +pro.bootloader.unlock_bits=0x3F +pro.bootloader.lock_bits=0x0F + +pro.build.board=AVR_PRO +pro.build.core=arduino +pro.build.variant=eightanaloginputs + +## Arduino Pro or Pro Mini (5V, 16 MHz) w/ ATmega328P +## -------------------------------------------------- +pro.menu.cpu.16MHzatmega328=ATmega328P (5V, 16 MHz) + +pro.menu.cpu.16MHzatmega328.upload.maximum_size=30720 +pro.menu.cpu.16MHzatmega328.upload.maximum_data_size=2048 +pro.menu.cpu.16MHzatmega328.upload.speed=57600 + +pro.menu.cpu.16MHzatmega328.bootloader.low_fuses=0xFF +pro.menu.cpu.16MHzatmega328.bootloader.high_fuses=0xDA +pro.menu.cpu.16MHzatmega328.bootloader.extended_fuses=0xFD +pro.menu.cpu.16MHzatmega328.bootloader.file=atmega/ATmegaBOOT_168_atmega328.hex + +pro.menu.cpu.16MHzatmega328.build.mcu=atmega328p +pro.menu.cpu.16MHzatmega328.build.f_cpu=16000000L + +## Arduino Pro or Pro Mini (3.3V, 8 MHz) w/ ATmega328P +## --------------------------------------------------- +pro.menu.cpu.8MHzatmega328=ATmega328P (3.3V, 8 MHz) + +pro.menu.cpu.8MHzatmega328.upload.maximum_size=30720 +pro.menu.cpu.8MHzatmega328.upload.maximum_data_size=2048 +pro.menu.cpu.8MHzatmega328.upload.speed=57600 + +pro.menu.cpu.8MHzatmega328.bootloader.low_fuses=0xFF +pro.menu.cpu.8MHzatmega328.bootloader.high_fuses=0xDA +pro.menu.cpu.8MHzatmega328.bootloader.extended_fuses=0xFD +pro.menu.cpu.8MHzatmega328.bootloader.file=atmega/ATmegaBOOT_168_atmega328_pro_8MHz.hex + +pro.menu.cpu.8MHzatmega328.build.mcu=atmega328p +pro.menu.cpu.8MHzatmega328.build.f_cpu=8000000L + +## Arduino Pro or Pro Mini (5V, 16 MHz) w/ ATmega168 +## ------------------------------------------------- +pro.menu.cpu.16MHzatmega168=ATmega168 (5V, 16 MHz) + +pro.menu.cpu.16MHzatmega168.upload.maximum_size=14336 +pro.menu.cpu.16MHzatmega168.upload.maximum_data_size=1024 +pro.menu.cpu.16MHzatmega168.upload.speed=19200 + +pro.menu.cpu.16MHzatmega168.bootloader.low_fuses=0xff +pro.menu.cpu.16MHzatmega168.bootloader.high_fuses=0xdd +pro.menu.cpu.16MHzatmega168.bootloader.extended_fuses=0xF8 +pro.menu.cpu.16MHzatmega168.bootloader.file=atmega/ATmegaBOOT_168_diecimila.hex + +pro.menu.cpu.16MHzatmega168.build.mcu=atmega168 +pro.menu.cpu.16MHzatmega168.build.f_cpu=16000000L + +## Arduino Pro or Pro Mini (3.3V, 8 MHz) w/ ATmega168 +## -------------------------------------------------- +pro.menu.cpu.8MHzatmega168=ATmega168 (3.3V, 8 MHz) + +pro.menu.cpu.8MHzatmega168.upload.maximum_size=14336 +pro.menu.cpu.8MHzatmega168.upload.maximum_data_size=1024 +pro.menu.cpu.8MHzatmega168.upload.speed=19200 + +pro.menu.cpu.8MHzatmega168.bootloader.low_fuses=0xc6 +pro.menu.cpu.8MHzatmega168.bootloader.high_fuses=0xdd +pro.menu.cpu.8MHzatmega168.bootloader.extended_fuses=0xF8 +pro.menu.cpu.8MHzatmega168.bootloader.file=atmega/ATmegaBOOT_168_pro_8MHz.hex + +pro.menu.cpu.8MHzatmega168.build.mcu=atmega168 +pro.menu.cpu.8MHzatmega168.build.f_cpu=8000000L + +############################################################## + +atmegang.name=Arduino NG or older + +atmegang.upload.tool=avrdude +atmegang.upload.protocol=arduino +atmegang.upload.speed=19200 + +atmegang.bootloader.tool=avrdude +atmegang.bootloader.unlock_bits=0x3F +atmegang.bootloader.lock_bits=0x0F + +atmegang.build.mcu=atmegang +atmegang.build.f_cpu=16000000L +atmegang.build.board=AVR_NG +atmegang.build.core=arduino +atmegang.build.variant=standard + +## Arduino NG or older w/ ATmega168 +## -------------------------------- +atmegang.menu.cpu.atmega168=ATmega168 + +atmegang.menu.cpu.atmega168.upload.maximum_size=14336 +atmegang.menu.cpu.atmega168.upload.maximum_data_size=1024 + +atmegang.menu.cpu.atmega168.bootloader.low_fuses=0xff +atmegang.menu.cpu.atmega168.bootloader.high_fuses=0xdd +atmegang.menu.cpu.atmega168.bootloader.extended_fuses=0xF8 +atmegang.menu.cpu.atmega168.bootloader.file=atmega/ATmegaBOOT_168_ng.hex + +atmegang.menu.cpu.atmega168.build.mcu=atmega168 + +## Arduino NG or older w/ ATmega8 +## ------------------------------ +atmegang.menu.cpu.atmega8=ATmega8 + +atmegang.menu.cpu.atmega8.upload.maximum_size=7168 +atmegang.menu.cpu.atmega8.upload.maximum_data_size=1024 + +atmegang.menu.cpu.atmega8.bootloader.low_fuses=0xdf +atmegang.menu.cpu.atmega8.bootloader.high_fuses=0xca +atmegang.menu.cpu.atmega8.bootloader.extended_fuses= +atmegang.menu.cpu.atmega8.bootloader.file=atmega8/ATmegaBOOT-prod-firmware-2009-11-07.hex + +atmegang.menu.cpu.atmega8.build.mcu=atmega8 + +############################################################## + +robotControl.name=Arduino Robot Control +robotControl.vid.0=0x2341 +robotControl.pid.0=0x0038 +robotControl.vid.1=0x2341 +robotControl.pid.1=0x8038 +robotControl.vid.2=0x2A03 +robotControl.pid.2=0x0038 +robotControl.vid.3=0x2A03 +robotControl.pid.3=0x8038 + +robotControl.upload.tool=avrdude +robotControl.upload.protocol=avr109 +robotControl.upload.maximum_size=28672 +robotControl.upload.maximum_data_size=2560 +robotControl.upload.speed=57600 +robotControl.upload.disable_flushing=true +robotControl.upload.use_1200bps_touch=true +robotControl.upload.wait_for_upload_port=true + +robotControl.bootloader.tool=avrdude +robotControl.bootloader.low_fuses=0xff +robotControl.bootloader.high_fuses=0xd8 +robotControl.bootloader.extended_fuses=0xcb +robotControl.bootloader.file=caterina-Arduino_Robot/Caterina-Robot-Control.hex +robotControl.bootloader.unlock_bits=0x3F +robotControl.bootloader.lock_bits=0x2F + +robotControl.build.mcu=atmega32u4 +robotControl.build.f_cpu=16000000L +robotControl.build.vid=0x2341 +robotControl.build.pid=0x8038 +robotControl.build.usb_product="Robot Control" +robotControl.build.board=AVR_ROBOT_CONTROL +robotControl.build.core=arduino +robotControl.build.variant=robot_control +robotControl.build.extra_flags={build.usb_flags} + +############################################################## + +robotMotor.name=Arduino Robot Motor +robotMotor.vid.0=0x2341 +robotMotor.pid.0=0x0039 +robotMotor.vid.1=0x2341 +robotMotor.pid.1=0x8039 +robotMotor.vid.2=0x2A03 +robotMotor.pid.2=0x0039 +robotMotor.vid.3=0x2A03 +robotMotor.pid.3=0x8039 + +robotMotor.upload.tool=avrdude +robotMotor.upload.protocol=avr109 +robotMotor.upload.maximum_size=28672 +robotMotor.upload.maximum_data_size=2560 +robotMotor.upload.speed=57600 +robotMotor.upload.disable_flushing=true +robotMotor.upload.use_1200bps_touch=true +robotMotor.upload.wait_for_upload_port=true + +robotMotor.bootloader.tool=avrdude +robotMotor.bootloader.low_fuses=0xff +robotMotor.bootloader.high_fuses=0xd8 +robotMotor.bootloader.extended_fuses=0xcb +robotMotor.bootloader.file=caterina-Arduino_Robot/Caterina-Robot-Motor.hex +robotMotor.bootloader.unlock_bits=0x3F +robotMotor.bootloader.lock_bits=0x2F + +robotMotor.build.mcu=atmega32u4 +robotMotor.build.f_cpu=16000000L +robotMotor.build.vid=0x2341 +robotMotor.build.pid=0x8039 +robotMotor.build.usb_product="Robot Motor" +robotMotor.build.board=AVR_ROBOT_MOTOR +robotMotor.build.core=arduino +robotMotor.build.variant=robot_motor +robotMotor.build.extra_flags={build.usb_flags} + +############################################################## + +gemma.vid.0=0x2341 +gemma.pid.0=0x0c9f + +gemma.name=Arduino Gemma + +gemma.bootloader.low_fuses=0xF1 +gemma.bootloader.high_fuses=0xD5 +gemma.bootloader.extended_fuses=0xFE +gemma.bootloader.tool=avrdude +gemma.bootloader.lock_bits= +gemma.bootloader.unlock_bits= +gemma.bootloader.file=gemma/gemma_v1.hex + +gemma.build.mcu=attiny85 +gemma.build.f_cpu=8000000L +gemma.build.core=arduino +gemma.build.variant=gemma +gemma.build.board=AVR_GEMMA + +gemma.upload.tool=avrdude +gemma.upload.maximum_size=5310 + +############################################################## + +# Adafruit Circuit Playground 32u4 w/Caterina Configuration +circuitplay32u4cat.name=Adafruit Circuit Playground +circuitplay32u4cat.bootloader.low_fuses=0xff +circuitplay32u4cat.bootloader.high_fuses=0xd8 +circuitplay32u4cat.bootloader.extended_fuses=0xcb +circuitplay32u4cat.bootloader.file=caterina/Caterina-Circuitplay32u4.hex +circuitplay32u4cat.bootloader.unlock_bits=0x3F +circuitplay32u4cat.bootloader.lock_bits=0x2F +circuitplay32u4cat.bootloader.tool=avrdude +circuitplay32u4cat.build.mcu=atmega32u4 +circuitplay32u4cat.build.f_cpu=8000000L +circuitplay32u4cat.build.vid=0x239A +circuitplay32u4cat.build.pid=0x8011 +circuitplay32u4cat.build.core=arduino +circuitplay32u4cat.build.variant=circuitplay32u4 +circuitplay32u4cat.build.board=AVR_CIRCUITPLAY +circuitplay32u4cat.build.usb_product="Circuit Playground" +circuitplay32u4cat.build.usb_manufacturer="Adafruit" +circuitplay32u4cat.build.extra_flags={build.usb_flags} +circuitplay32u4cat.upload.protocol=avr109 +circuitplay32u4cat.upload.maximum_size=28672 +circuitplay32u4cat.upload.speed=57600 +circuitplay32u4cat.upload.disable_flushing=true +circuitplay32u4cat.upload.use_1200bps_touch=true +circuitplay32u4cat.upload.wait_for_upload_port=true +circuitplay32u4cat.upload.tool=avrdude +circuitplay32u4cat.vid.0=0x239A +circuitplay32u4cat.pid.0=0x8011 + +############################################################## + +yunmini.name=Arduino Yún Mini +yunmini.upload.via_ssh=true + +yunmini.vid.0=0x2a03 +yunmini.pid.0=0x0050 +yunmini.vid.1=0x2a03 +yunmini.pid.1=0x8050 + +yunmini.upload.tool=avrdude +yunmini.upload.protocol=avr109 +yunmini.upload.maximum_size=28672 +yunmini.upload.maximum_data_size=2560 +yunmini.upload.speed=57600 +yunmini.upload.disable_flushing=true +yunmini.upload.use_1200bps_touch=true +yunmini.upload.wait_for_upload_port=true + +yunmini.bootloader.tool=avrdude +yunmini.bootloader.low_fuses=0xff +yunmini.bootloader.high_fuses=0xd8 +yunmini.bootloader.extended_fuses=0xfb +yunmini.bootloader.file=caterina/Caterina-YunMini.hex +yunmini.bootloader.unlock_bits=0x3F +yunmini.bootloader.lock_bits=0x2F + +yunmini.build.mcu=atmega32u4 +yunmini.build.f_cpu=16000000L +yunmini.build.vid=0x2a03 +yunmini.build.pid=0x8050 +yunmini.build.usb_product="Arduino Yún Mini" +yunmini.build.board=AVR_YUNMINI +yunmini.build.core=arduino +yunmini.build.variant=yun +yunmini.build.extra_flags={build.usb_flags} + +############################################################## + +chiwawa.name=Arduino Industrial 101 +chiwawa.upload.via_ssh=true + +chiwawa.vid.0=0x2a03 +chiwawa.pid.0=0x0056 +chiwawa.vid.1=0x2a03 +chiwawa.pid.1=0x8056 + +chiwawa.upload.tool=avrdude +chiwawa.upload.protocol=avr109 +chiwawa.upload.maximum_size=28672 +chiwawa.upload.maximum_data_size=2560 +chiwawa.upload.speed=57600 +chiwawa.upload.disable_flushing=true +chiwawa.upload.use_1200bps_touch=true +chiwawa.upload.wait_for_upload_port=true + +chiwawa.bootloader.tool=avrdude +chiwawa.bootloader.low_fuses=0xff +chiwawa.bootloader.high_fuses=0xd8 +chiwawa.bootloader.extended_fuses=0xfb +chiwawa.bootloader.file=caterina/Caterina-Industrial101.hex +chiwawa.bootloader.unlock_bits=0x3F +chiwawa.bootloader.lock_bits=0x2F + +chiwawa.build.mcu=atmega32u4 +chiwawa.build.f_cpu=16000000L +chiwawa.build.vid=0x2a03 +chiwawa.build.pid=0x8056 +chiwawa.build.usb_product="Arduino Industrial 101" +chiwawa.build.board=AVR_INDUSTRIAL101 +chiwawa.build.core=arduino +chiwawa.build.variant=yun +chiwawa.build.extra_flags={build.usb_flags} + +############################################################## + +one.name=Linino One +one.upload.via_ssh=true + +one.vid.0=0x2a03 +one.pid.0=0x0001 +one.vid.1=0x2a03 +one.pid.1=0x8001 + +one.upload.tool=avrdude +one.upload.protocol=avr109 +one.upload.maximum_size=28672 +one.upload.maximum_data_size=2560 +one.upload.speed=57600 +one.upload.disable_flushing=true +one.upload.use_1200bps_touch=true +one.upload.wait_for_upload_port=true + +one.bootloader.tool=avrdude +one.bootloader.low_fuses=0xff +one.bootloader.high_fuses=0xd8 +one.bootloader.extended_fuses=0xfb +one.bootloader.file=caterina/Caterina-LininoOne.hex +one.bootloader.unlock_bits=0x3F +one.bootloader.lock_bits=0x2F + +one.build.mcu=atmega32u4 +one.build.f_cpu=16000000L +one.build.vid=0x2a03 +one.build.pid=0x8001 +one.build.usb_product="Linino One" +one.build.board=AVR_LININO_ONE +one.build.core=arduino +one.build.variant=yun +one.build.extra_flags={build.usb_flags} + +############################################################## + +unowifi.name=Arduino Uno WiFi +unowifi.vid.0=0x2A03 +unowifi.pid.0=0x0057 + +unowifi.upload.tool=avrdude +unowifi.upload.protocol=arduino +unowifi.upload.maximum_size=32256 +unowifi.upload.maximum_data_size=2048 +unowifi.upload.speed=115200 +unowifi.upload.network.endpoint_upload=/pgm/upload +unowifi.upload.network.endpoint_sync=/pgm/sync +unowifi.upload.network.sync_return=204:SYNC +unowifi.upload.network.endpoint_reset=/log/reset +unowifi.upload.network.port=80 + +unowifi.bootloader.tool=avrdude +unowifi.bootloader.low_fuses=0xFF +unowifi.bootloader.high_fuses=0xDE +unowifi.bootloader.extended_fuses=0x05 +unowifi.bootloader.unlock_bits=0x3F +unowifi.bootloader.lock_bits=0x0F +unowifi.bootloader.file=optiboot/optiboot_atmega328.hex + +unowifi.build.mcu=atmega328p +unowifi.build.f_cpu=16000000L +unowifi.build.board=AVR_UNO_WIFI_DEV_ED +unowifi.build.core=arduino +unowifi.build.variant=standard +unowifi.build.esp_ch_uart_br=19200 +unowifi.build.extra_flags=-DESP_CH_UART -DESP_CH_UART_BR={build.esp_ch_uart_br} diff --git a/external/arduino/avr/bootloaders/atmega/ATmegaBOOT_168.c b/external/arduino/avr/bootloaders/atmega/ATmegaBOOT_168.c new file mode 100644 index 000000000..304aa7c3b --- /dev/null +++ b/external/arduino/avr/bootloaders/atmega/ATmegaBOOT_168.c @@ -0,0 +1,1057 @@ +/**********************************************************/ +/* Serial Bootloader for Atmel megaAVR Controllers */ +/* */ +/* tested with ATmega8, ATmega128 and ATmega168 */ +/* should work with other mega's, see code for details */ +/* */ +/* ATmegaBOOT.c */ +/* */ +/* */ +/* 20090308: integrated Mega changes into main bootloader */ +/* source by D. Mellis */ +/* 20080930: hacked for Arduino Mega (with the 1280 */ +/* processor, backwards compatible) */ +/* by D. Cuartielles */ +/* 20070626: hacked for Arduino Diecimila (which auto- */ +/* resets when a USB connection is made to it) */ +/* by D. Mellis */ +/* 20060802: hacked for Arduino by D. Cuartielles */ +/* based on a previous hack by D. Mellis */ +/* and D. Cuartielles */ +/* */ +/* Monitor and debug functions were added to the original */ +/* code by Dr. Erik Lins, chip45.com. (See below) */ +/* */ +/* Thanks to Karl Pitrich for fixing a bootloader pin */ +/* problem and more informative LED blinking! */ +/* */ +/* For the latest version see: */ +/* http://www.chip45.com/ */ +/* */ +/* ------------------------------------------------------ */ +/* */ +/* based on stk500boot.c */ +/* Copyright (c) 2003, Jason P. Kyle */ +/* All rights reserved. */ +/* see avr1.org for original file and information */ +/* */ +/* This program is free software; you can redistribute it */ +/* and/or modify it under the terms of the GNU General */ +/* Public License as published by the Free Software */ +/* Foundation; either version 2 of the License, or */ +/* (at your option) any later version. */ +/* */ +/* This program is distributed in the hope that it will */ +/* be useful, but WITHOUT ANY WARRANTY; without even the */ +/* implied warranty of MERCHANTABILITY or FITNESS FOR A */ +/* PARTICULAR PURPOSE. See the GNU General Public */ +/* License for more details. */ +/* */ +/* You should have received a copy of the GNU General */ +/* Public License along with this program; if not, write */ +/* to the Free Software Foundation, Inc., */ +/* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +/* */ +/* Licence can be viewed at */ +/* http://www.fsf.org/licenses/gpl.txt */ +/* */ +/* Target = Atmel AVR m128,m64,m32,m16,m8,m162,m163,m169, */ +/* m8515,m8535. ATmega161 has a very small boot block so */ +/* isn't supported. */ +/* */ +/* Tested with m168 */ +/**********************************************************/ + + +/* some includes */ +#include +#include +#include +#include +#include +#include + +/* the current avr-libc eeprom functions do not support the ATmega168 */ +/* own eeprom write/read functions are used instead */ +#if !defined(__AVR_ATmega168__) || !defined(__AVR_ATmega328P__) || !defined(__AVR_ATmega328__) +#include +#endif + +/* Use the F_CPU defined in Makefile */ + +/* 20060803: hacked by DojoCorp */ +/* 20070626: hacked by David A. Mellis to decrease waiting time for auto-reset */ +/* set the waiting time for the bootloader */ +/* get this from the Makefile instead */ +/* #define MAX_TIME_COUNT (F_CPU>>4) */ + +/* 20070707: hacked by David A. Mellis - after this many errors give up and launch application */ +#define MAX_ERROR_COUNT 5 + +/* set the UART baud rate */ +/* 20060803: hacked by DojoCorp */ +//#define BAUD_RATE 115200 +#ifndef BAUD_RATE +#define BAUD_RATE 19200 +#endif + + +/* SW_MAJOR and MINOR needs to be updated from time to time to avoid warning message from AVR Studio */ +/* never allow AVR Studio to do an update !!!! */ +#define HW_VER 0x02 +#define SW_MAJOR 0x01 +#define SW_MINOR 0x10 + + +/* Adjust to suit whatever pin your hardware uses to enter the bootloader */ +/* ATmega128 has two UARTS so two pins are used to enter bootloader and select UART */ +/* ATmega1280 has four UARTS, but for Arduino Mega, we will only use RXD0 to get code */ +/* BL0... means UART0, BL1... means UART1 */ +#ifdef __AVR_ATmega128__ +#define BL_DDR DDRF +#define BL_PORT PORTF +#define BL_PIN PINF +#define BL0 PINF7 +#define BL1 PINF6 +#elif defined __AVR_ATmega1280__ +/* we just don't do anything for the MEGA and enter bootloader on reset anyway*/ +#else +/* other ATmegas have only one UART, so only one pin is defined to enter bootloader */ +#define BL_DDR DDRD +#define BL_PORT PORTD +#define BL_PIN PIND +#define BL PIND6 +#endif + + +/* onboard LED is used to indicate, that the bootloader was entered (3x flashing) */ +/* if monitor functions are included, LED goes on after monitor was entered */ +#if defined __AVR_ATmega128__ || defined __AVR_ATmega1280__ +/* Onboard LED is connected to pin PB7 (e.g. Crumb128, PROBOmega128, Savvy128, Arduino Mega) */ +#define LED_DDR DDRB +#define LED_PORT PORTB +#define LED_PIN PINB +#define LED PINB7 +#else +/* Onboard LED is connected to pin PB5 in Arduino NG, Diecimila, and Duomilanuove */ +/* other boards like e.g. Crumb8, Crumb168 are using PB2 */ +#define LED_DDR DDRB +#define LED_PORT PORTB +#define LED_PIN PINB +#define LED PINB5 +#endif + + +/* monitor functions will only be compiled when using ATmega128, due to bootblock size constraints */ +#if defined(__AVR_ATmega128__) || defined(__AVR_ATmega1280__) +#define MONITOR 1 +#endif + + +/* define various device id's */ +/* manufacturer byte is always the same */ +#define SIG1 0x1E // Yep, Atmel is the only manufacturer of AVR micros. Single source :( + +#if defined __AVR_ATmega1280__ +#define SIG2 0x97 +#define SIG3 0x03 +#define PAGE_SIZE 0x80U //128 words + +#elif defined __AVR_ATmega1281__ +#define SIG2 0x97 +#define SIG3 0x04 +#define PAGE_SIZE 0x80U //128 words + +#elif defined __AVR_ATmega128__ +#define SIG2 0x97 +#define SIG3 0x02 +#define PAGE_SIZE 0x80U //128 words + +#elif defined __AVR_ATmega64__ +#define SIG2 0x96 +#define SIG3 0x02 +#define PAGE_SIZE 0x80U //128 words + +#elif defined __AVR_ATmega32__ +#define SIG2 0x95 +#define SIG3 0x02 +#define PAGE_SIZE 0x40U //64 words + +#elif defined __AVR_ATmega16__ +#define SIG2 0x94 +#define SIG3 0x03 +#define PAGE_SIZE 0x40U //64 words + +#elif defined __AVR_ATmega8__ +#define SIG2 0x93 +#define SIG3 0x07 +#define PAGE_SIZE 0x20U //32 words + +#elif defined __AVR_ATmega88__ +#define SIG2 0x93 +#define SIG3 0x0a +#define PAGE_SIZE 0x20U //32 words + +#elif defined __AVR_ATmega168__ +#define SIG2 0x94 +#define SIG3 0x06 +#define PAGE_SIZE 0x40U //64 words + +#elif defined __AVR_ATmega328P__ +#define SIG2 0x95 +#define SIG3 0x0F +#define PAGE_SIZE 0x40U //64 words + +#elif defined __AVR_ATmega328__ +#define SIG2 0x95 +#define SIG3 0x14 +#define PAGE_SIZE 0x40U //64 words + +#elif defined __AVR_ATmega162__ +#define SIG2 0x94 +#define SIG3 0x04 +#define PAGE_SIZE 0x40U //64 words + +#elif defined __AVR_ATmega163__ +#define SIG2 0x94 +#define SIG3 0x02 +#define PAGE_SIZE 0x40U //64 words + +#elif defined __AVR_ATmega169__ +#define SIG2 0x94 +#define SIG3 0x05 +#define PAGE_SIZE 0x40U //64 words + +#elif defined __AVR_ATmega8515__ +#define SIG2 0x93 +#define SIG3 0x06 +#define PAGE_SIZE 0x20U //32 words + +#elif defined __AVR_ATmega8535__ +#define SIG2 0x93 +#define SIG3 0x08 +#define PAGE_SIZE 0x20U //32 words +#endif + + +/* function prototypes */ +void putch(char); +char getch(void); +void getNch(uint8_t); +void byte_response(uint8_t); +void nothing_response(void); +char gethex(void); +void puthex(char); +void flash_led(uint8_t); + +/* some variables */ +union address_union { + uint16_t word; + uint8_t byte[2]; +} address; + +union length_union { + uint16_t word; + uint8_t byte[2]; +} length; + +struct flags_struct { + unsigned eeprom : 1; + unsigned rampz : 1; +} flags; + +uint8_t buff[256]; +uint8_t address_high; + +uint8_t pagesz=0x80; + +uint8_t i; +uint8_t bootuart = 0; + +uint8_t error_count = 0; + +void (*app_start)(void) = 0x0000; + + +/* main program starts here */ +int main(void) +{ + uint8_t ch,ch2; + uint16_t w; + +#ifdef WATCHDOG_MODS + ch = MCUSR; + MCUSR = 0; + + WDTCSR |= _BV(WDCE) | _BV(WDE); + WDTCSR = 0; + + // Check if the WDT was used to reset, in which case we dont bootload and skip straight to the code. woot. + if (! (ch & _BV(EXTRF))) // if its a not an external reset... + app_start(); // skip bootloader +#else + asm volatile("nop\n\t"); +#endif + + /* set pin direction for bootloader pin and enable pullup */ + /* for ATmega128, two pins need to be initialized */ +#ifdef __AVR_ATmega128__ + BL_DDR &= ~_BV(BL0); + BL_DDR &= ~_BV(BL1); + BL_PORT |= _BV(BL0); + BL_PORT |= _BV(BL1); +#else + /* We run the bootloader regardless of the state of this pin. Thus, don't + put it in a different state than the other pins. --DAM, 070709 + This also applies to Arduino Mega -- DC, 080930 + BL_DDR &= ~_BV(BL); + BL_PORT |= _BV(BL); + */ +#endif + + +#ifdef __AVR_ATmega128__ + /* check which UART should be used for booting */ + if(bit_is_clear(BL_PIN, BL0)) { + bootuart = 1; + } + else if(bit_is_clear(BL_PIN, BL1)) { + bootuart = 2; + } +#endif + +#if defined __AVR_ATmega1280__ + /* the mega1280 chip has four serial ports ... we could eventually use any of them, or not? */ + /* however, we don't wanna confuse people, to avoid making a mess, we will stick to RXD0, TXD0 */ + bootuart = 1; +#endif + + /* check if flash is programmed already, if not start bootloader anyway */ + if(pgm_read_byte_near(0x0000) != 0xFF) { + +#ifdef __AVR_ATmega128__ + /* no UART was selected, start application */ + if(!bootuart) { + app_start(); + } +#else + /* check if bootloader pin is set low */ + /* we don't start this part neither for the m8, nor m168 */ + //if(bit_is_set(BL_PIN, BL)) { + // app_start(); + // } +#endif + } + +#ifdef __AVR_ATmega128__ + /* no bootuart was selected, default to uart 0 */ + if(!bootuart) { + bootuart = 1; + } +#endif + + + /* initialize UART(s) depending on CPU defined */ +#if defined(__AVR_ATmega128__) || defined(__AVR_ATmega1280__) + if(bootuart == 1) { + UBRR0L = (uint8_t)(F_CPU/(BAUD_RATE*16L)-1); + UBRR0H = (F_CPU/(BAUD_RATE*16L)-1) >> 8; + UCSR0A = 0x00; + UCSR0C = 0x06; + UCSR0B = _BV(TXEN0)|_BV(RXEN0); + } + if(bootuart == 2) { + UBRR1L = (uint8_t)(F_CPU/(BAUD_RATE*16L)-1); + UBRR1H = (F_CPU/(BAUD_RATE*16L)-1) >> 8; + UCSR1A = 0x00; + UCSR1C = 0x06; + UCSR1B = _BV(TXEN1)|_BV(RXEN1); + } +#elif defined __AVR_ATmega163__ + UBRR = (uint8_t)(F_CPU/(BAUD_RATE*16L)-1); + UBRRHI = (F_CPU/(BAUD_RATE*16L)-1) >> 8; + UCSRA = 0x00; + UCSRB = _BV(TXEN)|_BV(RXEN); +#elif defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) || defined (__AVR_ATmega328__) + +#ifdef DOUBLE_SPEED + UCSR0A = (1<> 8; +#else + UBRR0L = (uint8_t)(F_CPU/(BAUD_RATE*16L)-1); + UBRR0H = (F_CPU/(BAUD_RATE*16L)-1) >> 8; +#endif + + UCSR0B = (1<>8; // set baud rate + UBRRL = (((F_CPU/BAUD_RATE)/16)-1); + UCSRB = (1<> 8; + UCSRA = 0x00; + UCSRC = 0x06; + UCSRB = _BV(TXEN)|_BV(RXEN); +#endif + +#if defined __AVR_ATmega1280__ + /* Enable internal pull-up resistor on pin D0 (RX), in order + to supress line noise that prevents the bootloader from + timing out (DAM: 20070509) */ + /* feature added to the Arduino Mega --DC: 080930 */ + DDRE &= ~_BV(PINE0); + PORTE |= _BV(PINE0); +#endif + + + /* set LED pin as output */ + LED_DDR |= _BV(LED); + + + /* flash onboard LED to signal entering of bootloader */ +#if defined(__AVR_ATmega128__) || defined(__AVR_ATmega1280__) + // 4x for UART0, 5x for UART1 + flash_led(NUM_LED_FLASHES + bootuart); +#else + flash_led(NUM_LED_FLASHES); +#endif + + /* 20050803: by DojoCorp, this is one of the parts provoking the + system to stop listening, cancelled from the original */ + //putch('\0'); + + /* forever loop */ + for (;;) { + + /* get character from UART */ + ch = getch(); + + /* A bunch of if...else if... gives smaller code than switch...case ! */ + + /* Hello is anyone home ? */ + if(ch=='0') { + nothing_response(); + } + + + /* Request programmer ID */ + /* Not using PROGMEM string due to boot block in m128 being beyond 64kB boundry */ + /* Would need to selectively manipulate RAMPZ, and it's only 9 characters anyway so who cares. */ + else if(ch=='1') { + if (getch() == ' ') { + putch(0x14); + putch('A'); + putch('V'); + putch('R'); + putch(' '); + putch('I'); + putch('S'); + putch('P'); + putch(0x10); + } else { + if (++error_count == MAX_ERROR_COUNT) + app_start(); + } + } + + + /* AVR ISP/STK500 board commands DON'T CARE so default nothing_response */ + else if(ch=='@') { + ch2 = getch(); + if (ch2>0x85) getch(); + nothing_response(); + } + + + /* AVR ISP/STK500 board requests */ + else if(ch=='A') { + ch2 = getch(); + if(ch2==0x80) byte_response(HW_VER); // Hardware version + else if(ch2==0x81) byte_response(SW_MAJOR); // Software major version + else if(ch2==0x82) byte_response(SW_MINOR); // Software minor version + else if(ch2==0x98) byte_response(0x03); // Unknown but seems to be required by avr studio 3.56 + else byte_response(0x00); // Covers various unnecessary responses we don't care about + } + + + /* Device Parameters DON'T CARE, DEVICE IS FIXED */ + else if(ch=='B') { + getNch(20); + nothing_response(); + } + + + /* Parallel programming stuff DON'T CARE */ + else if(ch=='E') { + getNch(5); + nothing_response(); + } + + + /* P: Enter programming mode */ + /* R: Erase device, don't care as we will erase one page at a time anyway. */ + else if(ch=='P' || ch=='R') { + nothing_response(); + } + + + /* Leave programming mode */ + else if(ch=='Q') { + nothing_response(); +#ifdef WATCHDOG_MODS + // autoreset via watchdog (sneaky!) + WDTCSR = _BV(WDE); + while (1); // 16 ms +#endif + } + + + /* Set address, little endian. EEPROM in bytes, FLASH in words */ + /* Perhaps extra address bytes may be added in future to support > 128kB FLASH. */ + /* This might explain why little endian was used here, big endian used everywhere else. */ + else if(ch=='U') { + address.byte[0] = getch(); + address.byte[1] = getch(); + nothing_response(); + } + + + /* Universal SPI programming command, disabled. Would be used for fuses and lock bits. */ + else if(ch=='V') { + if (getch() == 0x30) { + getch(); + ch = getch(); + getch(); + if (ch == 0) { + byte_response(SIG1); + } else if (ch == 1) { + byte_response(SIG2); + } else { + byte_response(SIG3); + } + } else { + getNch(3); + byte_response(0x00); + } + } + + + /* Write memory, length is big endian and is in bytes */ + else if(ch=='d') { + length.byte[1] = getch(); + length.byte[0] = getch(); + flags.eeprom = 0; + if (getch() == 'E') flags.eeprom = 1; + for (w=0;w127) address_high = 0x01; //Only possible with m128, m256 will need 3rd address byte. FIXME + else address_high = 0x00; +#if defined(__AVR_ATmega128__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega1281__) + RAMPZ = address_high; +#endif + address.word = address.word << 1; //address * 2 -> byte location + /* if ((length.byte[0] & 0x01) == 0x01) length.word++; //Even up an odd number of bytes */ + if ((length.byte[0] & 0x01)) length.word++; //Even up an odd number of bytes + cli(); //Disable interrupts, just to be sure +#if defined(EEPE) + while(bit_is_set(EECR,EEPE)); //Wait for previous EEPROM writes to complete +#else + while(bit_is_set(EECR,EEWE)); //Wait for previous EEPROM writes to complete +#endif + asm volatile( + "clr r17 \n\t" //page_word_count + "lds r30,address \n\t" //Address of FLASH location (in bytes) + "lds r31,address+1 \n\t" + "ldi r28,lo8(buff) \n\t" //Start of buffer array in RAM + "ldi r29,hi8(buff) \n\t" + "lds r24,length \n\t" //Length of data to be written (in bytes) + "lds r25,length+1 \n\t" + "length_loop: \n\t" //Main loop, repeat for number of words in block + "cpi r17,0x00 \n\t" //If page_word_count=0 then erase page + "brne no_page_erase \n\t" + "wait_spm1: \n\t" + "lds r16,%0 \n\t" //Wait for previous spm to complete + "andi r16,1 \n\t" + "cpi r16,1 \n\t" + "breq wait_spm1 \n\t" + "ldi r16,0x03 \n\t" //Erase page pointed to by Z + "sts %0,r16 \n\t" + "spm \n\t" +#ifdef __AVR_ATmega163__ + ".word 0xFFFF \n\t" + "nop \n\t" +#endif + "wait_spm2: \n\t" + "lds r16,%0 \n\t" //Wait for previous spm to complete + "andi r16,1 \n\t" + "cpi r16,1 \n\t" + "breq wait_spm2 \n\t" + + "ldi r16,0x11 \n\t" //Re-enable RWW section + "sts %0,r16 \n\t" + "spm \n\t" +#ifdef __AVR_ATmega163__ + ".word 0xFFFF \n\t" + "nop \n\t" +#endif + "no_page_erase: \n\t" + "ld r0,Y+ \n\t" //Write 2 bytes into page buffer + "ld r1,Y+ \n\t" + + "wait_spm3: \n\t" + "lds r16,%0 \n\t" //Wait for previous spm to complete + "andi r16,1 \n\t" + "cpi r16,1 \n\t" + "breq wait_spm3 \n\t" + "ldi r16,0x01 \n\t" //Load r0,r1 into FLASH page buffer + "sts %0,r16 \n\t" + "spm \n\t" + + "inc r17 \n\t" //page_word_count++ + "cpi r17,%1 \n\t" + "brlo same_page \n\t" //Still same page in FLASH + "write_page: \n\t" + "clr r17 \n\t" //New page, write current one first + "wait_spm4: \n\t" + "lds r16,%0 \n\t" //Wait for previous spm to complete + "andi r16,1 \n\t" + "cpi r16,1 \n\t" + "breq wait_spm4 \n\t" +#ifdef __AVR_ATmega163__ + "andi r30,0x80 \n\t" // m163 requires Z6:Z1 to be zero during page write +#endif + "ldi r16,0x05 \n\t" //Write page pointed to by Z + "sts %0,r16 \n\t" + "spm \n\t" +#ifdef __AVR_ATmega163__ + ".word 0xFFFF \n\t" + "nop \n\t" + "ori r30,0x7E \n\t" // recover Z6:Z1 state after page write (had to be zero during write) +#endif + "wait_spm5: \n\t" + "lds r16,%0 \n\t" //Wait for previous spm to complete + "andi r16,1 \n\t" + "cpi r16,1 \n\t" + "breq wait_spm5 \n\t" + "ldi r16,0x11 \n\t" //Re-enable RWW section + "sts %0,r16 \n\t" + "spm \n\t" +#ifdef __AVR_ATmega163__ + ".word 0xFFFF \n\t" + "nop \n\t" +#endif + "same_page: \n\t" + "adiw r30,2 \n\t" //Next word in FLASH + "sbiw r24,2 \n\t" //length-2 + "breq final_write \n\t" //Finished + "rjmp length_loop \n\t" + "final_write: \n\t" + "cpi r17,0 \n\t" + "breq block_done \n\t" + "adiw r24,2 \n\t" //length+2, fool above check on length after short page write + "rjmp write_page \n\t" + "block_done: \n\t" + "clr __zero_reg__ \n\t" //restore zero register +#if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) || defined(__AVR_ATmega328__) || defined(__AVR_ATmega128__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega1281__) + : "=m" (SPMCSR) : "M" (PAGE_SIZE) : "r0","r16","r17","r24","r25","r28","r29","r30","r31" +#else + : "=m" (SPMCR) : "M" (PAGE_SIZE) : "r0","r16","r17","r24","r25","r28","r29","r30","r31" +#endif + ); + /* Should really add a wait for RWW section to be enabled, don't actually need it since we never */ + /* exit the bootloader without a power cycle anyhow */ + } + putch(0x14); + putch(0x10); + } else { + if (++error_count == MAX_ERROR_COUNT) + app_start(); + } + } + + + /* Read memory block mode, length is big endian. */ + else if(ch=='t') { + length.byte[1] = getch(); + length.byte[0] = getch(); +#if defined(__AVR_ATmega128__) || defined(__AVR_ATmega1280__) + if (address.word>0x7FFF) flags.rampz = 1; // No go with m256, FIXME + else flags.rampz = 0; +#endif + address.word = address.word << 1; // address * 2 -> byte location + if (getch() == 'E') flags.eeprom = 1; + else flags.eeprom = 0; + if (getch() == ' ') { // Command terminator + putch(0x14); + for (w=0;w < length.word;w++) { // Can handle odd and even lengths okay + if (flags.eeprom) { // Byte access EEPROM read +#if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) || defined(__AVR_ATmega328__) + while(EECR & (1<= 'a') { + return (a - 'a' + 0x0a); + } else if(a >= '0') { + return(a - '0'); + } + return a; +} + + +char gethex(void) { + return (gethexnib() << 4) + gethexnib(); +} + + +void puthex(char ch) { + char ah; + + ah = ch >> 4; + if(ah >= 0x0a) { + ah = ah - 0x0a + 'a'; + } else { + ah += '0'; + } + + ch &= 0x0f; + if(ch >= 0x0a) { + ch = ch - 0x0a + 'a'; + } else { + ch += '0'; + } + + putch(ah); + putch(ch); +} + + +void putch(char ch) +{ +#if defined(__AVR_ATmega128__) || defined(__AVR_ATmega1280__) + if(bootuart == 1) { + while (!(UCSR0A & _BV(UDRE0))); + UDR0 = ch; + } + else if (bootuart == 2) { + while (!(UCSR1A & _BV(UDRE1))); + UDR1 = ch; + } +#elif defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) || defined (__AVR_ATmega328__) + while (!(UCSR0A & _BV(UDRE0))); + UDR0 = ch; +#else + /* m8,16,32,169,8515,8535,163 */ + while (!(UCSRA & _BV(UDRE))); + UDR = ch; +#endif +} + + +char getch(void) +{ +#if defined(__AVR_ATmega128__) || defined(__AVR_ATmega1280__) + uint32_t count = 0; + if(bootuart == 1) { + while(!(UCSR0A & _BV(RXC0))) { + /* 20060803 DojoCorp:: Addon coming from the previous Bootloader*/ + /* HACKME:: here is a good place to count times*/ + count++; + if (count > MAX_TIME_COUNT) + app_start(); + } + + return UDR0; + } + else if(bootuart == 2) { + while(!(UCSR1A & _BV(RXC1))) { + /* 20060803 DojoCorp:: Addon coming from the previous Bootloader*/ + /* HACKME:: here is a good place to count times*/ + count++; + if (count > MAX_TIME_COUNT) + app_start(); + } + + return UDR1; + } + return 0; +#elif defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) || defined (__AVR_ATmega328__) + uint32_t count = 0; + while(!(UCSR0A & _BV(RXC0))){ + /* 20060803 DojoCorp:: Addon coming from the previous Bootloader*/ + /* HACKME:: here is a good place to count times*/ + count++; + if (count > MAX_TIME_COUNT) + app_start(); + } + return UDR0; +#else + /* m8,16,32,169,8515,8535,163 */ + uint32_t count = 0; + while(!(UCSRA & _BV(RXC))){ + /* 20060803 DojoCorp:: Addon coming from the previous Bootloader*/ + /* HACKME:: here is a good place to count times*/ + count++; + if (count > MAX_TIME_COUNT) + app_start(); + } + return UDR; +#endif +} + + +void getNch(uint8_t count) +{ + while(count--) { +#if defined(__AVR_ATmega128__) || defined(__AVR_ATmega1280__) + if(bootuart == 1) { + while(!(UCSR0A & _BV(RXC0))); + UDR0; + } + else if(bootuart == 2) { + while(!(UCSR1A & _BV(RXC1))); + UDR1; + } +#elif defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) || defined (__AVR_ATmega328__) + getch(); +#else + /* m8,16,32,169,8515,8535,163 */ + /* 20060803 DojoCorp:: Addon coming from the previous Bootloader*/ + //while(!(UCSRA & _BV(RXC))); + //UDR; + getch(); // need to handle time out +#endif + } +} + + +void byte_response(uint8_t val) +{ + if (getch() == ' ') { + putch(0x14); + putch(val); + putch(0x10); + } else { + if (++error_count == MAX_ERROR_COUNT) + app_start(); + } +} + + +void nothing_response(void) +{ + if (getch() == ' ') { + putch(0x14); + putch(0x10); + } else { + if (++error_count == MAX_ERROR_COUNT) + app_start(); + } +} + +void flash_led(uint8_t count) +{ + while (count--) { + LED_PORT |= _BV(LED); + _delay_ms(100); + LED_PORT &= ~_BV(LED); + _delay_ms(100); + } +} + + +/* end of file ATmegaBOOT.c */ diff --git a/external/arduino/avr/bootloaders/atmega/ATmegaBOOT_168_atmega1280.hex b/external/arduino/avr/bootloaders/atmega/ATmegaBOOT_168_atmega1280.hex new file mode 100644 index 000000000..ddae1db54 --- /dev/null +++ b/external/arduino/avr/bootloaders/atmega/ATmegaBOOT_168_atmega1280.hex @@ -0,0 +1,245 @@ +:020000021000EC +:10F000000C9472F80C9492F80C9492F80C9492F878 +:10F010000C9492F80C9492F80C9492F80C9492F848 +:10F020000C9492F80C9492F80C9492F80C9492F838 +:10F030000C9492F80C9492F80C9492F80C9492F828 +:10F040000C9492F80C9492F80C9492F80C9492F818 +:10F050000C9492F80C9492F80C9492F80C9492F808 +:10F060000C9492F80C9492F80C9492F80C9492F8F8 +:10F070000C9492F80C9492F80C9492F80C9492F8E8 +:10F080000C9492F80C9492F80C9492F80C9492F8D8 +:10F090000C9492F80C9492F80C9492F80C9492F8C8 +:10F0A0000C9492F80C9492F80C9492F80C9492F8B8 +:10F0B0000C9492F80C9492F80C9492F80C9492F8A8 +:10F0C0000C9492F80C9492F80C9492F80C9492F898 +:10F0D0000C9492F80C9492F80C9492F80C9492F888 +:10F0E0000C9492F811241FBECFEFD1E2DEBFCDBF4A +:10F0F00012E0A0E0B2E0EEEDFEEF01E00BBF02C0D7 +:10F1000007900D92A833B107D9F71BBE13E0A8E30F +:10F11000B2E001C01D92A334B107E1F70E9412FAD8 +:10F120000C946DFF0C9400F8982F959595959595F6 +:10F130009595905D8F708A301CF1282F295A809107 +:10F140003802813019F0823071F008958091C0004A +:10F1500085FFFCCF9093C6008091C00085FFFCCF57 +:10F160002093C60008958091C80085FFFCCF90933E +:10F17000CE008091C80085FFFCCF2093CE0008957B +:10F18000282F205DDCCF982F80913802813019F034 +:10F19000823041F008958091C00085FFFCCF9093AC +:10F1A000C60008958091C80085FFFCCF9093CE00E3 +:10F1B0000895EF92FF920F931F9380913802813050 +:10F1C00069F1823031F080E01F910F91FF90EF9054 +:10F1D0000895EE24FF2487018091C80087FD17C0A1 +:10F1E0000894E11CF11C011D111D81E4E81682E464 +:10F1F000F8068FE0080780E0180770F3E0913A0204 +:10F20000F0913B0209958091C80087FFE9CF80917A +:10F21000CE001F910F91FF90EF900895EE24FF24F0 +:10F2200087018091C00087FD17C00894E11CF11C84 +:10F23000011D111D81E4E81682E4F8068FE008073D +:10F2400080E0180770F3E0913A02F0913B020995D3 +:10F250008091C00087FFE9CF8091C6001F910F9178 +:10F26000FF90EF9008950E94D9F8982F809138026E +:10F27000813049F0823091F091366CF490330CF08B +:10F280009053892F08958091C00085FFFCCF909303 +:10F29000C60091369CF39755892F08958091C80038 +:10F2A00085FFFCCF9093CE00E7CF1F930E9433F9E8 +:10F2B000182F0E9433F91295107F810F1F91089526 +:10F2C000982F20913802992339F0213031F02230E3 +:10F2D00061F091509923C9F708958091C00087FF8C +:10F2E000FCCF8091C6009150F5CF8091C80087FF78 +:10F2F000FCCF8091CE009150EDCF1F93182F0E942C +:10F30000D9F8803249F0809139028F5F80933902B9 +:10F31000853091F11F910895809138028130B9F0C4 +:10F320008230C1F78091C80085FFFCCF84E18093D3 +:10F33000CE008091C80085FFFCCF1093CE00809155 +:10F34000C80085FFFCCF80E18093CE00E3CF8091A1 +:10F35000C00085FFFCCF84E18093C6008091C0008F +:10F3600085FFFCCF1093C6008091C00085FFFCCFC5 +:10F3700080E18093C600CECFE0913A02F0913B024B +:10F3800009951F9108950E94D9F8803241F080912B +:10F3900039028F5F80933902853029F10895809179 +:10F3A0003802813089F08230C9F78091C80085FF2A +:10F3B000FCCF84E18093CE008091C80085FFFCCF14 +:10F3C00080E18093CE0008958091C00085FFFCCF3E +:10F3D00084E18093C6008091C00085FFFCCF80E16E +:10F3E0008093C6000895E0913A02F0913B0209959E +:10F3F000089540E951E08823A1F02F9A28EE33E0E8 +:10F40000FA013197F1F721503040D1F72F9828EECB +:10F4100033E0FA013197F1F721503040D1F78150B4 +:10F4200061F708952F923F924F925F926F927F9271 +:10F430008F929F92AF92BF92CF92DF92EF92FF9204 +:10F440000F931F93CF93DF93000081E080933802E6 +:10F4500080E18093C4001092C5001092C00086E045 +:10F460008093C20088E18093C1006898709A279ABF +:10F4700081E00E94F9F9E4E1EE2E7EE1D72E67E902 +:10F48000C62E53E0B52E40E1A42E9924939431E486 +:10F49000832E26E5722E92E5692E80E2582E09E42D +:10F4A000402E13E5312EB0E52B2E0E94D9F8803383 +:10F4B000C9F1813309F452C0803409F4C8C08134E1 +:10F4C00009F4EAC0823489F1853409F4CAC0803570 +:10F4D00049F1823539F1813529F1853509F4ECC0DE +:10F4E000863509F409C1843609F428C1843709F442 +:10F4F000ABC1853709F473C2863709F4D9C08132AC +:10F5000009F4B7C2809139028F5F80933902853048 +:10F5100061F6E0913A02F0913B0209950E94D9F818 +:10F52000803339F60E94C3F9C0CF2091380293E1AD +:10F5300005C0223061F09923A9F391502130C9F719 +:10F540008091C00087FFFCCF8091C600F4CF8091EE +:10F55000C80087FFFCCF8091CE00EDCF0E94D9F884 +:10F56000803281F6809138028130D1F1823009F009 +:10F570009CCF8091C80085FFFCCFE092CE008091A7 +:10F58000C80085FFFCCF8092CE008091C80085FF27 +:10F59000FCCF7092CE008091C80085FFFCCF6092B6 +:10F5A000CE008091C80085FFFCCF5092CE008091A4 +:10F5B000C80085FFFCCF4092CE008091C80085FF37 +:10F5C000FCCF3092CE008091C80085FFFCCF209206 +:10F5D000CE008091C80085FFFCCFA092CE0065CF01 +:10F5E0008091C00085FFFCCFE092C6008091C000F2 +:10F5F00085FFFCCF8092C6008091C00085FFFCCFC4 +:10F600007092C6008091C00085FFFCCF6092C6005A +:10F610008091C00085FFFCCF5092C6008091C00051 +:10F6200085FFFCCF4092C6008091C00085FFFCCFD3 +:10F630003092C6008091C00085FFFCCF2092C600AA +:10F640008091C00085FFFCCFA092C6002ECF0E9403 +:10F65000D9F8863808F466CF0E94D9F80E94C3F919 +:10F6600024CF2091380294E0213041F0223069F01B +:10F67000992309F457CF91502130C1F78091C000F0 +:10F6800087FFFCCF8091C600F3CF8091C80087FF31 +:10F69000FCCF8091CE00ECCF0E94D9F8803841F1A8 +:10F6A000813809F447C0823809F4CAC08839E1F0CA +:10F6B00080E00E947DF9F9CE0E94D9F880933C0247 +:10F6C0000E94D9F880933D020E94C3F9EECE0E94B9 +:10F6D000D9F80E94D9F8182F0E94D9F8112309F4FB +:10F6E0007EC2113009F40AC283E00E947DF9DDCEAA +:10F6F00082E00E947DF9D9CE0E94D9F8803339F397 +:10F700002091380292E0213039F0223061F09923C3 +:10F7100079F291502130C9F78091C00087FFFCCF6A +:10F720008091C600F4CF8091C80087FFFCCF809104 +:10F73000CE00EDCF81E00E947DF9B7CE0E94D9F8CE +:10F7400080933F030E94D9F880933E038091420347 +:10F750008E7F809342030E94D9F8853409F4B3C1A7 +:10F7600080913E0390913F03892B89F000E010E0E7 +:10F770000E94D9F8F801E25CFD4F80830F5F1F4FB4 +:10F7800080913E0390913F030817190788F30E9468 +:10F79000D9F8803209F0B6CE8091420380FFB2C121 +:10F7A00040913C0250913D02440F551F50933D0241 +:10F7B00040933C0260913E0370913F0361157105D7 +:10F7C000F1F080E090E09A01280F391FFC01E25C23 +:10F7D000FD4FE081F999FECF1FBA32BD21BDE0BDDA +:10F7E0000FB6F894FA9AF99A0FBE01968617970702 +:10F7F00050F3460F571F50933D0240933C028091B7 +:10F800003802813081F0823009F04FCE8091C800FB +:10F8100085FFFCCFE092CE008091C80085FFFCCF31 +:10F82000A092CE0042CE8091C00085FFFCCFE09236 +:10F83000C6008091C00085FFFCCFA092C60035CEE7 +:10F8400080E10E947DF931CE0E94D9F880933F0378 +:10F850000E94D9F880933E0320913C0230913D02F2 +:10F8600037FD46C1809142038D7F80934203220F72 +:10F87000331F30933D0220933C020E94D9F8853417 +:10F8800009F430C1809142038E7F809342030E942D +:10F89000D9F8803209F009CE60913802613009F45C +:10F8A0006FC0623009F473C000913E0310913F03B2 +:10F8B0000115110509F440C080914203782F717041 +:10F8C000F82EF69481E0F82240913C0250913D02DE +:10F8D00020E030E013C0FF2009F060C0FA019491ED +:10F8E000613009F43BC0623009F441C0CA0101969D +:10F8F0002F5F3F4FAC0120173107D0F4772359F326 +:10F90000F999FECF52BD41BDF89A90B56130F9F03A +:10F91000623061F78091C80085FFFCCF9093CE00E4 +:10F92000CA0101962F5F3F4FAC012017310730F31A +:10F9300090933D0280933C02613009F4CAC062306A +:10F9400009F0B3CD8091C80085FFFCCF46CE8091F1 +:10F95000C00085FFFCCF9093C600C8CF8091C00047 +:10F9600085FDF9CF8091C00085FFF8CFF4CF80915D +:10F97000C80085FDD3CF8091C80085FFF8CFCECFDA +:10F980008091C00085FFFCCFE092C6008DCF8091B2 +:10F99000C80085FFFCCFE092CE0086CFCA01A0E070 +:10F9A000B0E080509040AF4FBF4FABBFFC0197918C +:10F9B000613061F0623009F099CF8091C80085FD17 +:10F9C000ADCF8091C80085FFF8CFA8CF8091C0004F +:10F9D00085FDC1CF8091C00085FFF8CFBCCF0E94CC +:10F9E000D9F8803209F08ECD80913802813011F142 +:10F9F000823009F05ACD8091C80085FFFCCFE0929B +:10FA0000CE008091C80085FFFCCFD092CE008091BF +:10FA1000C80085FFFCCFC092CE008091C80085FF52 +:10FA2000FCCFB092CE008091C80085FFFCCFA092A1 +:10FA3000CE003BCD8091C00085FFFCCFE092C60098 +:10FA40008091C00085FFFCCFD092C6008091C0009D +:10FA500085FFFCCFC092C6008091C00085FFFCCF1F +:10FA6000B092C6008091C00085FFFCCFA092C60076 +:10FA70001CCD0E94D9F8813209F017CD0E94D9F827 +:10FA8000813209F012CD279A2F98109240032091CD +:10FA90003802E1E491E00EC0223009F4A4C0909352 +:10FAA0004003E92FF0E0E050FE4FE0819F5FEE233E +:10FAB00009F4A0C0213081F78091C00085FFFCCF00 +:10FAC000E093C600ECCF80914203816080934203B3 +:10FAD00047CE8091C00085FDB7CD8091C00085FFE5 +:10FAE000F8CFB2CD80914203816080934203CFCEA4 +:10FAF00080914203826080934203B9CE87E90E94DD +:10FB00007DF9D3CC80913D028823880F880B892111 +:10FB1000809341038BBF80913C0290913D02880FFE +:10FB2000991F90933D0280933C0280913E0380FF99 +:10FB300009C080913E0390913F03019690933F034B +:10FB400080933E03F894F999FECF1127E0913C028F +:10FB5000F0913D02CEE3D2E080913E0390913F03CD +:10FB6000103091F40091570001700130D9F303E097 +:10FB700000935700E8950091570001700130D9F3C8 +:10FB800001E100935700E895099019900091570002 +:10FB900001700130D9F301E000935700E895139507 +:10FBA000103898F011270091570001700130D9F3F7 +:10FBB00005E000935700E89500915700017001306F +:10FBC000D9F301E100935700E8953296029709F0C6 +:10FBD000C7CF103011F00296E5CF112410CE8EE180 +:10FBE0000E947DF962CC8091C80085FFFCCFE09334 +:10FBF000CE0055CF7AE0B72E6DE0A62E5AE3952EB3 +:10FC000040E2842E3DE3732E90E3692E81E3582E6B +:10FC1000213009F442C0223009F45FC00E94D9F8B3 +:10FC2000982F20913802213089F1223009F44EC0FA +:10FC3000943709F46BC0923709F405C1973709F47A +:10FC40007BC0953799F0923609F4BDC09A3601F71A +:10FC5000E0913A02F0913B02099520913802D8CF09 +:10FC60008091C00085FFFCCF9093C6000E94D9F818 +:10FC7000982F80913802813099F38230B9F78091C2 +:10FC8000C80085FFFCCF9093CE00F0CF8091C000DC +:10FC900085FFFCCF9093C600CBCF8091C00085FF3D +:10FCA000FCCFB092C6008091C00085FFFCCFA0922F +:10FCB000C6008091C00085FFFCCF9092C600809165 +:10FCC000C00085FFFCCF8092C600A8CF8091C800FD +:10FCD00085FFFCCF9093CE00ABCF8091C80085FF0D +:10FCE000FCCFB092CE008091C80085FFFCCFA092DF +:10FCF000CE008091C80085FFFCCF9092CE0080910D +:10FD0000C80085FFFCCF8092CE0088CF1F9947C0E6 +:10FD10002F9A213051F0223009F07ACF8091C8001B +:10FD200085FFFCCF6092CE0073CF8091C00085FF2D +:10FD3000FCCF6092C6006CCF0E94D9F8982F8091BA +:10FD400038028130F1F0823009F4ABC00E9455F9DD +:10FD5000082F0E9455F9182F0E94D9F8982F8091EA +:10FD600038028130A9F0823009F4A2C00E9455F90E +:10FD7000D02ECC24F601E10FF11D808320913802B2 +:10FD800047CF8091C00085FFFCCF9093C600DECFA7 +:10FD90008091C00085FFFCCF9093C600E7CF2F98DD +:10FDA000213051F0223009F033CF8091C80085FF17 +:10FDB000FCCF5092CE002CCF8091C00085FFFCCFAD +:10FDC0005092C60025CF213041F1223081F080E8E9 +:10FDD00085BF109274001092750080E091E1FC01E3 +:10FDE000819180E091E13097D1F3CF01F8CF8091FC +:10FDF000C80085FFFCCF82E68093CE008091C800CA +:10FE000085FFFCCF85E78093CE008091C80085FFF9 +:10FE1000FCCF83E78093CE00DACF8091C00085FFCE +:10FE2000FCCF82E68093C6008091C00085FFFCCFA6 +:10FE300085E78093C6008091C00085FFFCCF83E7F3 +:10FE40008093C600C4CF0E94D9F8982F80913802C1 +:10FE50008130C9F08230D1F10E9455F9182F0E94EB +:10FE600055F9982F809138028130A1F0823039F114 +:10FE7000F12EEE24F701E90FF11D80810E9494F824 +:10FE800020913802C5CE8091C00085FFFCCF9093B1 +:10FE9000C600E2CF8091C00085FFFCCF7092C60003 +:10FEA000E7CF8091C80085FFFCCF9093CE004ECF66 +:10FEB0008091C80085FFFCCF9093CE0057CF8091F2 +:10FEC000C80085FFFCCF7092CE00D2CF8091C800D1 +:0EFED00085FFFCCF9093CE00BFCFF894FFCFFC +:10FEDE0041546D656761424F4F54202F204172642B +:10FEEE0075696E6F204D656761202D20284329208E +:10FEFE0041726475696E6F204C4C43202D20303951 +:08FF0E00303933300A0D008088 +:040000031000F000F9 +:00000001FF diff --git a/external/arduino/avr/bootloaders/atmega/ATmegaBOOT_168_atmega328.hex b/external/arduino/avr/bootloaders/atmega/ATmegaBOOT_168_atmega328.hex new file mode 100644 index 000000000..5a5eb8228 --- /dev/null +++ b/external/arduino/avr/bootloaders/atmega/ATmegaBOOT_168_atmega328.hex @@ -0,0 +1,125 @@ +:107800000C94343C0C94513C0C94513C0C94513CE1 +:107810000C94513C0C94513C0C94513C0C94513CB4 +:107820000C94513C0C94513C0C94513C0C94513CA4 +:107830000C94513C0C94513C0C94513C0C94513C94 +:107840000C94513C0C94513C0C94513C0C94513C84 +:107850000C94513C0C94513C0C94513C0C94513C74 +:107860000C94513C0C94513C11241FBECFEFD8E036 +:10787000DEBFCDBF11E0A0E0B1E0ECE9FFE702C060 +:1078800005900D92A230B107D9F712E0A2E0B1E065 +:1078900001C01D92AD30B107E1F70E942D3D0C945F +:1078A000CC3F0C94003C982F959595959595959582 +:1078B000905D8F708A307CF0282F295A8091C0000B +:1078C00085FFFCCF9093C6008091C00085FFFCCF60 +:1078D0002093C6000895282F205DF0CF982F809127 +:1078E000C00085FFFCCF9093C6000895EF92FF92F1 +:1078F0000F931F93EE24FF2487018091C00087FD22 +:1079000017C00894E11CF11C011D111D81E4E8164B +:1079100082E4F8068FE0080780E0180770F3E09132 +:107920000401F091050109958091C00087FFE9CF1E +:107930008091C6001F910F91FF90EF9008950E94D3 +:10794000763C982F8091C00085FFFCCF9093C600B5 +:1079500091362CF490330CF09053892F089597555D +:10796000892F08951F930E949F3C182F0E949F3CCF +:107970001295107F810F1F9108951F93182F882350 +:1079800021F00E94763C1150E1F71F9108951F935A +:10799000182F0E94763C803249F0809103018F5F5E +:1079A000809303018530C1F01F9108958091C0003C +:1079B00085FFFCCF84E18093C6008091C00085FFE5 +:1079C000FCCF1093C6008091C00085FFFCCF80E102 +:1079D0008093C6001F910895E0910401F091050184 +:1079E00009951F9108950E94763C803241F0809164 +:1079F00003018F5F80930301853081F008958091AA +:107A0000C00085FFFCCF84E18093C6008091C00058 +:107A100085FFFCCF80E18093C6000895E0910401CA +:107A2000F09105010995089540E951E08823A1F0FE +:107A30002D9A28EE33E0FA013197F1F721503040CA +:107A4000D1F72D9828EE33E0FA013197F1F7215064 +:107A50003040D1F7815061F708953F924F925F9285 +:107A60006F927F928F929F92AF92BF92CF92DF924E +:107A7000EF92FF920F931F93CF93DF93000080E16B +:107A80008093C4001092C50088E18093C10086E015 +:107A90008093C2005098589A259A81E00E94143D24 +:107AA00024E1F22E9EE1E92E85E9D82E0FE0C02ECA +:107AB00010E1B12EAA24A394B1E49B2EA6E58A2E50 +:107AC000F2E57F2EE0E26E2E79E4572E63E5462E36 +:107AD00050E5352E0E94763C8033B1F18133B9F107 +:107AE000803409F46FC0813409F476C0823409F41B +:107AF00085C0853409F488C0803531F1823521F1A3 +:107B0000813511F1853509F485C0863509F48DC0BC +:107B1000843609F496C0843709F403C1853709F423 +:107B200072C1863709F466C0809103018F5F80932C +:107B30000301853079F6E0910401F0910501099582 +:107B40000E94763C803351F60E94F33CC3CF0E94E2 +:107B5000763C803249F78091C00085FFFCCFF092DF +:107B6000C6008091C00085FFFCCF9092C600809136 +:107B7000C00085FFFCCF8092C6008091C00085FFC9 +:107B8000FCCF7092C6008091C00085FFFCCF609250 +:107B9000C6008091C00085FFFCCF5092C600809146 +:107BA000C00085FFFCCF4092C6008091C00085FFD9 +:107BB000FCCF3092C6008091C00085FFFCCFB09210 +:107BC000C60088CF0E94763C863808F4BDCF0E945C +:107BD000763C0E94F33C7ECF0E94763C803809F4CC +:107BE0009CC0813809F40BC1823809F43CC1883942 +:107BF00009F48FC080E00E94C73C6CCF84E10E94F2 +:107C0000BD3C0E94F33C66CF85E00E94BD3C0E94D3 +:107C1000F33C60CF0E94763C809306010E94763C44 +:107C2000809307010E94F33C55CF0E94763C80333D +:107C300009F41DC183E00E94BD3C80E00E94C73C66 +:107C400049CF0E94763C809309020E94763C809343 +:107C5000080280910C028E7F80930C020E94763C79 +:107C6000853409F415C18091080290910902892B8D +:107C700089F000E010E00E94763CF801E85FFE4FDA +:107C800080830F5F1F4F80910802909109020817AF +:107C9000190788F30E94763C803209F045CF809125 +:107CA0000C0280FF01C16091060170910701660F0F +:107CB000771F7093070160930601A0910802B091AD +:107CC00009021097C9F0E8E0F1E09B01AD014E0F09 +:107CD0005F1FF999FECF32BD21BD819180BDFA9A17 +:107CE000F99A2F5F3F4FE417F50799F76A0F7B1F4B +:107CF00070930701609306018091C00085FFFCCF5F +:107D0000F092C6008091C00085FFFCCFB092C60003 +:107D1000E1CE83E00E94C73CDDCE82E00E94C73CFA +:107D2000D9CE0E94763C809309020E94763C8093D3 +:107D300008028091060190910701880F991F909386 +:107D40000701809306010E94763C853409F4A6C0A1 +:107D500080910C028E7F80930C020E94763C8032D0 +:107D600009F0B8CE8091C00085FFFCCFF092C6002C +:107D7000609108027091090261157105B9F140E046 +:107D800050E080910C02A82FA170B82FB27011C0E2 +:107D9000BB2309F45CC0E0910601F0910701319624 +:107DA000F0930701E09306014F5F5F4F46175707B7 +:107DB000E8F4AA2369F3F999FECF209106013091E6 +:107DC000070132BD21BDF89A90B58091C00085FFB2 +:107DD000FCCF9093C6002F5F3F4F30930701209355 +:107DE00006014F5F5F4F4617570718F38091C00099 +:107DF00085FDE5CE8091C00085FFF8CFE0CE81E023 +:107E00000E94C73C67CE0E94763C803209F08CCE3F +:107E10008091C00085FFFCCFF092C6008091C00029 +:107E200085FFFCCFE092C6008091C00085FFFCCFAB +:107E3000D092C6008091C00085FFFCCFC092C600E2 +:107E40008091C00085FFFCCFB092C60043CEE09188 +:107E50000601F091070194918091C00085FFFCCF4D +:107E60009093C6009CCF80E10E94C73C33CE0E9415 +:107E7000763C0E94763C182F0E94763C112309F430 +:107E800083C0113009F484C08FE00E94C73C22CE29 +:107E900080910C02816080930C02E5CE80910C02EF +:107EA000816080930C0259CF809107018823880F4D +:107EB000880B8A2180930B02809106019091070123 +:107EC000880F991F90930701809306018091080203 +:107ED00080FF09C080910802909109020196909359 +:107EE000090280930802F894F999FECF1127E091D6 +:107EF0000601F0910701C8E0D1E08091080290915D +:107F00000902103091F40091570001700130D9F34B +:107F100003E000935700E89500915700017001308D +:107F2000D9F301E100935700E89509901990009169 +:107F3000570001700130D9F301E000935700E89534 +:107F40001395103498F011270091570001700130FB +:107F5000D9F305E000935700E895009157000170B0 +:107F60000130D9F301E100935700E895329602976A +:107F700009F0C7CF103011F00296E5CF112480919F +:107F8000C00085FFB9CEBCCE8EE10E94C73CA2CD19 +:0C7F900085E90E94C73C9ECDF894FFCF0D +:027F9C00800063 +:040000030000780081 +:00000001FF diff --git a/external/arduino/avr/bootloaders/atmega/ATmegaBOOT_168_atmega328_pro_8MHz.hex b/external/arduino/avr/bootloaders/atmega/ATmegaBOOT_168_atmega328_pro_8MHz.hex new file mode 100644 index 000000000..84134c248 --- /dev/null +++ b/external/arduino/avr/bootloaders/atmega/ATmegaBOOT_168_atmega328_pro_8MHz.hex @@ -0,0 +1,124 @@ +:107800000C94343C0C94513C0C94513C0C94513CE1 +:107810000C94513C0C94513C0C94513C0C94513CB4 +:107820000C94513C0C94513C0C94513C0C94513CA4 +:107830000C94513C0C94513C0C94513C0C94513C94 +:107840000C94513C0C94513C0C94513C0C94513C84 +:107850000C94513C0C94513C0C94513C0C94513C74 +:107860000C94513C0C94513C11241FBECFEFD8E036 +:10787000DEBFCDBF11E0A0E0B1E0EAE8FFE702C063 +:1078800005900D92A230B107D9F712E0A2E0B1E065 +:1078900001C01D92AD30B107E1F70E942D3D0C945F +:1078A000C33F0C94003C982F95959595959595958B +:1078B000905D8F708A307CF0282F295A8091C0000B +:1078C00085FFFCCF9093C6008091C00085FFFCCF60 +:1078D0002093C6000895282F205DF0CF982F809127 +:1078E000C00085FFFCCF9093C6000895EF92FF92F1 +:1078F0000F931F93EE24FF2487018091C00087FD22 +:1079000017C00894E11CF11C011D111D81E2E8164D +:1079100081EAF80687E0080780E0180770F3E09135 +:107920000401F091050109958091C00087FFE9CF1E +:107930008091C6001F910F91FF90EF9008950E94D3 +:10794000763C982F8091C00085FFFCCF9093C600B5 +:1079500091362CF490330CF09053892F089597555D +:10796000892F08951F930E949F3C182F0E949F3CCF +:107970001295107F810F1F9108951F93182F882350 +:1079800021F00E94763C1150E1F71F9108951F935A +:10799000182F0E94763C803249F0809103018F5F5E +:1079A000809303018530C1F01F9108958091C0003C +:1079B00085FFFCCF84E18093C6008091C00085FFE5 +:1079C000FCCF1093C6008091C00085FFFCCF80E102 +:1079D0008093C6001F910895E0910401F091050184 +:1079E00009951F9108950E94763C803241F0809164 +:1079F00003018F5F80930301853081F008958091AA +:107A0000C00085FFFCCF84E18093C6008091C00058 +:107A100085FFFCCF80E18093C6000895E0910401CA +:107A2000F09105010995089548EC50E08823A1F0F4 +:107A30002D9A28EE33E0FA013197F1F721503040CA +:107A4000D1F72D9828EE33E0FA013197F1F7215064 +:107A50003040D1F7815061F708953F924F925F9285 +:107A60006F927F928F929F92AF92BF92CF92DF924E +:107A7000EF92FF920F931F93CF93DF93000082E06A +:107A80008093C00080E18093C4001092C50088E11B +:107A90008093C10086E08093C2005098589A259A3E +:107AA00081E00E94143D24E1F22E9EE1E92E85E959 +:107AB000D82E0FE0C02E10E1B12EAA24A394B1E479 +:107AC0009B2EA6E58A2EF2E57F2EE0E26E2E79E46B +:107AD000572E63E5462E50E5352E0E94763C8033C6 +:107AE000B1F18133B9F1803409F46FC0813409F404 +:107AF00076C0823409F485C0853409F488C08035A5 +:107B000031F1823521F1813511F1853509F485C0D6 +:107B1000863509F48DC0843609F496C0843709F49B +:107B200003C1853709F472C1863709F466C08091B4 +:107B300003018F5F80930301853079F6E0910401A2 +:107B4000F091050109950E94763C803351F60E9420 +:107B5000F33CC3CF0E94763C803249F78091C0004D +:107B600085FFFCCFF092C6008091C00085FFFCCF5E +:107B70009092C6008091C00085FFFCCF8092C60025 +:107B80008091C00085FFFCCF7092C6008091C0003C +:107B900085FFFCCF6092C6008091C00085FFFCCFBE +:107BA0005092C6008091C00085FFFCCF4092C60075 +:107BB0008091C00085FFFCCF3092C6008091C0004C +:107BC00085FFFCCFB092C60088CF0E94763C8638F5 +:107BD00008F4BDCF0E94763C0E94F33C7ECF0E9409 +:107BE000763C803809F49CC0813809F40BC1823896 +:107BF00009F430C1883909F48FC080E00E94C73C85 +:107C00006CCF84E10E94BD3C0E94F33C66CF85E0CE +:107C10000E94BD3C0E94F33C60CF0E94763C809362 +:107C200006010E94763C809307010E94F33C55CFE9 +:107C30000E94763C803309F411C183E00E94BD3C70 +:107C400080E00E94C73C49CF0E94763C80930902A5 +:107C50000E94763C8093080280910C028E7F809374 +:107C60000C020E94763C853409F409C18091080217 +:107C700090910902892B89F000E010E00E94763C87 +:107C8000F801E85FFE4F80830F5F1F4F809108026D +:107C9000909109020817190788F30E94763C8032F8 +:107CA00009F045CF80910C0280FFF5C0609106017C +:107CB00070910701660F771F7093070160930601AB +:107CC000A0910802B09109021097C9F0E8E0F1E034 +:107CD0009B01AD014E0F5F1FF999FECF32BD21BD53 +:107CE000819180BDFA9AF99A2F5F3F4FE417F5070B +:107CF00099F76A0F7B1F70930701609306018091CB +:107D0000C00085FFFCCFF092C6008091C00085FFC7 +:107D1000FCCFB092C600E1CE83E00E94C73CDDCE2E +:107D200082E00E94C73CD9CE0E94763C8093090233 +:107D30000E94763C80930802809106019091070191 +:107D4000880F991F90930701809306010E94763C4B +:107D5000853409F49AC080910C028E7F80930C02C6 +:107D60000E94763C803209F0B8CE8091C00085FF39 +:107D7000FCCFF092C600A0910802B09109021097C2 +:107D8000C1F180910C02082F0170182F1695117007 +:107D9000E0910601F0910701AF014F5F5F4FBA011B +:107DA00020E030E00023B1F4112339F49491809164 +:107DB000C00085FFFCCF9093C6002F5F3F4FCB01E3 +:107DC0000196FA012A173B0780F4BC014F5F5F4F11 +:107DD000002351F3F999FECFF2BDE1BDF89A90B5B9 +:107DE0008091C00085FFFCCFE6CF709307016093C0 +:107DF00006018091C00085FDE5CE8091C00085FF21 +:107E0000F8CFE0CE81E00E94C73C67CE0E94763C6E +:107E1000803209F08CCE8091C00085FFFCCFF092BB +:107E2000C6008091C00085FFFCCFE092C600809123 +:107E3000C00085FFFCCFD092C6008091C00085FFB6 +:107E4000FCCFC092C6008091C00085FFFCCFB092ED +:107E5000C60043CE80E10E94C73C3FCE0E94763CE4 +:107E60000E94763C182F0E94763C112309F483C0AF +:107E7000113009F484C08FE00E94C73C2ECE80915F +:107E80000C02816080930C02F1CE80910C02816023 +:107E900080930C0265CF809107018823880F880B9F +:107EA0008A2180930B028091060190910701880F2F +:107EB000991F90930701809306018091080280FF2B +:107EC00009C08091080290910902019690930902DD +:107ED00080930802F894F999FECF1127E0910601EA +:107EE000F0910701C8E0D1E0809108029091090269 +:107EF000103091F40091570001700130D9F303E084 +:107F000000935700E8950091570001700130D9F3B4 +:107F100001E100935700E8950990199000915700EE +:107F200001700130D9F301E000935700E8951395F3 +:107F3000103498F011270091570001700130D9F3E7 +:107F400005E000935700E89500915700017001305B +:107F5000D9F301E100935700E8953296029709F0B2 +:107F6000C7CF103011F00296E5CF11248091C000E8 +:107F700085FFC5CEC8CE8EE10E94C73CAECD85E957 +:0A7F80000E94C73CAACDF894FFCF81 +:027F8A00800075 +:040000030000780081 +:00000001FF diff --git a/external/arduino/avr/bootloaders/atmega/ATmegaBOOT_168_diecimila.hex b/external/arduino/avr/bootloaders/atmega/ATmegaBOOT_168_diecimila.hex new file mode 100644 index 000000000..d0185b412 --- /dev/null +++ b/external/arduino/avr/bootloaders/atmega/ATmegaBOOT_168_diecimila.hex @@ -0,0 +1,126 @@ +:103800000C94341C0C94511C0C94511C0C94511CA1 +:103810000C94511C0C94511C0C94511C0C94511C74 +:103820000C94511C0C94511C0C94511C0C94511C64 +:103830000C94511C0C94511C0C94511C0C94511C54 +:103840000C94511C0C94511C0C94511C0C94511C44 +:103850000C94511C0C94511C0C94511C0C94511C34 +:103860000C94511C0C94511C11241FBECFEFD4E0BA +:10387000DEBFCDBF11E0A0E0B1E0E4EAFFE302C0AB +:1038800005900D92A230B107D9F712E0A2E0B1E0A5 +:1038900001C01D92AD30B107E1F70E94361D0C94B6 +:1038A000D01F0C94001C982F9595959595959595FE +:1038B000905D8F708A307CF0282F295A8091C0004B +:1038C00085FFFCCF9093C6008091C00085FFFCCFA0 +:1038D0002093C6000895282F205DF0CF982F809167 +:1038E000C00085FFFCCF9093C6000895EF92FF9231 +:1038F0000F931F93EE24FF2487018091C00087FD62 +:1039000017C00894E11CF11C011D111D81E4E8168B +:1039100082E4F8068FE0080780E0180770F3E09172 +:103920000401F091050109958091C00087FFE9CF5E +:103930008091C6001F910F91FF90EF9008950E9413 +:10394000761C982F8091C00085FFFCCF9093C60015 +:1039500091362CF490330CF09053892F089597559D +:10396000892F08951F930E949F1C182F0E949F1C4F +:103970001295107F810F1F910895882351F0982F81 +:1039800091508091C00087FFFCCF8091C6009923A1 +:10399000B9F708951F93182F0E94761C803249F0C2 +:1039A000809103018F5F809303018530C1F01F91E7 +:1039B00008958091C00085FFFCCF84E18093C6000C +:1039C0008091C00085FFFCCF1093C6008091C0009D +:1039D00085FFFCCF80E18093C6001F910895E091A0 +:1039E0000401F091050109951F9108950E94761C2C +:1039F000803241F0809103018F5F80930301853015 +:103A000081F008958091C00085FFFCCF84E1809310 +:103A1000C6008091C00085FFFCCF80E18093C60086 +:103A20000895E0910401F09105010995089510921F +:103A30000A028823D1F090E040E951E02D9A28EE67 +:103A400033E0FA013197F1F721503040D1F72D984A +:103A500028EE33E0FA013197F1F721503040D1F7E9 +:103A60009F5F981758F380930A0208953F924F92F0 +:103A70005F926F927F928F929F92AF92BF92CF92FE +:103A8000DF92EF92FF920F931F93CF93DF9300008B +:103A900083E38093C4001092C50088E18093C10045 +:103AA00086E08093C2005098589A259A81E00E943F +:103AB000171D44E1F42E3EE1E32E24E9D22E96E0D8 +:103AC000C92E80E1B82EAA24A39401E4902E16E515 +:103AD000812EB2E57B2EA0E26A2EF9E45F2EE3E5AB +:103AE0004E2E70E5372E0E94761C8033B1F1813363 +:103AF00009F441C0803409F479C0813409F48CC0E0 +:103B0000823471F1853409F47BC0803531F182351E +:103B100021F1813511F1853509F48DC0863509F41F +:103B20009DC0843609F4AEC0843709F41BC18537C3 +:103B300009F485C1863709F47AC0809103018F5F4B +:103B400080930301853079F6E0910401F09105013D +:103B500009950E94761C803351F60E94F61CC3CF53 +:103B600093E18091C00087FFFCCF8091C60099232C +:103B7000A1F39150F6CF0E94761C8032F1F680912D +:103B8000C00085FFFCCFF092C6008091C00085FF89 +:103B9000FCCF9092C6008091C00085FFFCCF809240 +:103BA000C6008091C00085FFFCCF7092C600809156 +:103BB000C00085FFFCCF6092C6008091C00085FFE9 +:103BC000FCCF5092C6008091C00085FFFCCF409290 +:103BD000C6008091C00085FFFCCF3092C600809166 +:103BE000C00085FFFCCFB092C6007DCF0E94761C3E +:103BF000863808F4B2CF0E94761C0E94F61C73CF60 +:103C000094E08091C00087FFFCCF8091C60099238B +:103C100009F4A3CF9150F5CF0E94761C8038D1F0E3 +:103C2000813861F1823809F499C0883979F080E0EF +:103C30000E94CA1C58CF0E94761C809306010E94E5 +:103C4000761C809307010E94F61C4DCF83E00E94F2 +:103C5000CA1C49CF82E00E94CA1C45CF0E94761C34 +:103C6000803309F486C192E08091C00087FFFCCFC9 +:103C70008091C6009923D9F29150F6CF81E00E943D +:103C8000CA1C31CF0E94761C809309020E94761CC8 +:103C90008093080280910C028E7F80930C020E9418 +:103CA000761C853429F480910C02816080930C028B +:103CB0008091080290910902892B89F000E010E0C0 +:103CC0000E94761CF801E85FFE4F80830F5F1F4F54 +:103CD00080910802909109020817190788F30E9441 +:103CE000761C803209F029CF80910C0280FFD1C070 +:103CF0004091060150910701440F551F5093070151 +:103D000040930601A0910802B09109021097C9F0F2 +:103D1000E8E0F1E09A01BD016E0F7F1FF999FECF37 +:103D200032BD21BD819180BDFA9AF99A2F5F3F4F34 +:103D3000E617F70799F74A0F5B1F50930701409367 +:103D400006018091C00085FFFCCFF092C6008091F3 +:103D5000C00085FFFCCFB092C600C5CE80E10E94B6 +:103D6000CA1CC1CE0E94761C809309020E94761C58 +:103D7000809308028091060190910701880F991F96 +:103D800090930701809306010E94761C853409F404 +:103D90007AC080910C028E7F80930C020E94761C68 +:103DA000803209F0A0CE8091C00085FFFCCFF09258 +:103DB000C600A0910802B09109021097B9F1809154 +:103DC0000C02182F1170082F0270E0910601F0917B +:103DD00007019F012F5F3F4FB90140E050E01123E1 +:103DE000B1F4002339F494918091C00085FFFCCF99 +:103DF0009093C6004F5F5F4FCB010196F9014A17C0 +:103E00005B0780F4BC012F5F3F4F112351F3F999F9 +:103E1000FECFF2BDE1BDF89A90B58091C00085FF5C +:103E2000FCCFE6CF70930701609306018091C0003C +:103E300085FDD9CE8091C00085FFF8CFD4CE0E94F9 +:103E4000761C803209F079CE8091C00085FFFCCFCE +:103E5000F092C6008091C00085FFFCCFE092C600C2 +:103E60008091C00085FFFCCFD092C6008091C00039 +:103E700085FFFCCFC092C6008091C00085FFFCCFBB +:103E8000B092C60030CE80910C02816080930C020B +:103E900085CF809107018823880F880B8A21809322 +:103EA0000B028091060190910701880F991F909352 +:103EB0000701809306018091080280FF09C080916C +:103EC00008029091090201969093090280930802DA +:103ED000F894F999FECF1127E0910601F0910701BE +:103EE000C8E0D1E08091080290910902103091F46D +:103EF0000091570001700130D9F303E0009357009F +:103F0000E8950091570001700130D9F301E1009369 +:103F10005700E89509901990009157000170013001 +:103F2000D9F301E000935700E8951395103498F009 +:103F300011270091570001700130D9F305E000937B +:103F40005700E8950091570001700130D9F301E165 +:103F500000935700E8953296029709F0C7CF1030CA +:103F600011F00296E5CF11248091C00085FFE9CEC3 +:103F7000ECCE0E94761C0E94761C182F0E94761CA4 +:103F8000112351F0113021F086E00E94CA1CABCD04 +:103F900084E90E94CA1CA7CD8EE10E94CA1CA3CD51 +:043FA000F894FFCFC3 +:023FA40080009B +:0400000300003800C1 +:00000001FF diff --git a/external/arduino/avr/bootloaders/atmega/ATmegaBOOT_168_ng.hex b/external/arduino/avr/bootloaders/atmega/ATmegaBOOT_168_ng.hex new file mode 100644 index 000000000..f63ba16fe --- /dev/null +++ b/external/arduino/avr/bootloaders/atmega/ATmegaBOOT_168_ng.hex @@ -0,0 +1,110 @@ +:103800000C94341C0C94511C0C94511C0C94511CA1 +:103810000C94511C0C94511C0C94511C0C94511C74 +:103820000C94511C0C94511C0C94511C0C94511C64 +:103830000C94511C0C94511C0C94511C0C94511C54 +:103840000C94511C0C94511C0C94511C0C94511C44 +:103850000C94511C0C94511C0C94511C0C94511C34 +:103860000C94511C0C94511C11241FBECFEFD4E0BA +:10387000DEBFCDBF11E0A0E0B1E0E4EAFEE302C0AC +:1038800005900D92A230B107D9F712E0A2E0B1E0A5 +:1038900001C01D92AD30B107E1F70E94ED1C0C9400 +:1038A000511F0C94001C482F10920A0280E08417CC +:1038B000E0F4582F2D9A28EE33E080E991E001974B +:1038C000F1F721503040C9F72D9828EE33E080E918 +:1038D00091E00197F1F721503040C9F7852F8F5FB4 +:1038E000582F841738F380930A020895EF92FF92BD +:1038F0000F931F93EE24FF2487018091C00087FD62 +:1039000017C00894E11CF11C011D111D81E0E8168F +:1039100082E1F8068AE7080780E0180770F3E09173 +:103920000201F091030109958091C00087FFE9CF62 +:103930008091C600992787FD90951F910F91FF9068 +:10394000EF900895982F8091C00085FFFCCF909351 +:10395000C60008950E94761C803271F080910401A7 +:103960008F5F80930401853009F00895E091020192 +:10397000F09103010995089584E10E94A21C80E161 +:103980000E94A21C0895CF93C82F0E94761C8032FB +:1039900041F0809104018F5F80930401853081F4B0 +:1039A0000AC084E10E94A21C8C2F0E94A21C80E10C +:1039B0000E94A21C05C0E0910201F091030109954B +:1039C000CF910895CF93C82FC150CF3F21F00E94CF +:1039D000761CC150E0F7CF910895CFEFD4E0DEBF61 +:1039E000CDBF000083E38093C4001092C50088E13E +:1039F0008093C10086E08093C2005098589A259A1F +:103A000083E00E94531C0E94761C8033B1F1813305 +:103A1000B9F1803409F455C0813409F45BC08234B3 +:103A200009F46DC0853409F470C0803531F18235F8 +:103A300021F1813511F1853509F46BC0863509F422 +:103A400073C0843609F47AC0843709F4CEC0853750 +:103A500009F429C1863709F44AC0809104018F5FB7 +:103A600080930401853079F6E0910201F091030121 +:103A700009950E94761C803351F60E94AA1CC3CF80 +:103A80000E94761CC82F803241F784E10E94A21C5C +:103A900081E40E94A21C86E50E94A21C82E50E948D +:103AA000A21C8C2F0E94A21C89E40E94A21C83E508 +:103AB0000E94A21C80E50E94A21C80E10E94A21C20 +:103AC000A2CF0E94761C8638C0F20E94761C0E940B +:103AD000AA1C99CF0E94761C803809F486C18138CF +:103AE00009F487C1823809F488C1883921F080E05F +:103AF0000E94C31C88CF83E00E94C31C84CF84E152 +:103B00000E94E21C0E94AA1C7ECF85E00E94E21C5B +:103B1000F9CF0E94761C809306010E94761C809348 +:103B200007010E94AA1C6FCF0E94761C803309F403 +:103B3000CAC083E00E94E21C80E0DACF0E94761CBB +:103B4000809309020E94761C8093080280910C02E7 +:103B50008E7F80930C020E94761C853409F4C4C0C9 +:103B600000E010E0809108029091090218161906F1 +:103B700070F4C8E0D1E00E94761C89930F5F1F4F5C +:103B8000809108029091090208171907A0F30E947A +:103B9000761C803209F061CF80910C0280FFAEC0AC +:103BA000E0910601F0910701EE0FFF1F00E010E029 +:103BB00020910802309109021216130680F4A8E041 +:103BC000B1E0F999FECFF2BDE1BD8D9180BDFA9AC9 +:103BD000F99A31960F5F1F4F0217130790F3F09376 +:103BE0000701E093060184E166CF0E94761C809372 +:103BF00009020E94761C8093080280910601909130 +:103C00000701880F991F90930701809306010E9476 +:103C1000761C853409F46EC080910C028E7F8093EF +:103C20000C020E94761C803209F0EDCE84E10E94E5 +:103C3000A21C00E010E02091080230910902121647 +:103C4000130608F03ACFE0910601F0910701809148 +:103C50000C0280FF1FC0F999FECFF2BDE1BDF89ABA +:103C600080B50E94A21CE0910601F09107013196F7 +:103C7000F0930701E09306012091080230910902B8 +:103C80000F5F1F4F0217130708F017CF80910C0228 +:103C900080FDE1CF869580FFB4C03196F093070197 +:103CA000E0930601EDCF0E94761C803209F0D5CE5C +:103CB00084E10E94A21C8EE10E94A21C84E90E9461 +:103CC000A21C86E0F8CE0E94761C0E94761CC82FAB +:103CD0000E94761CCC2309F47CC0C13009F47DC05D +:103CE00086E00E94C31C8FCE80910C02816080937D +:103CF0000C0236CF80910C02816091CF8091070138 +:103D000087FD6FC010920B02809106019091070110 +:103D1000880F991F909307018093060180910802F4 +:103D200080FF09C08091080290910902019690934A +:103D3000090280930802F894F999FECF1127E091C7 +:103D40000601F0910701C8E0D1E08091080290914E +:103D50000902103091F40091570001700130D9F33D +:103D600003E000935700E89500915700017001307F +:103D7000D9F301E100935700E8950990199000915B +:103D8000570001700130D9F301E000935700E89526 +:103D90001395103498F011270091570001700130ED +:103DA000D9F305E000935700E895009157000170A2 +:103DB0000130D9F301E100935700E895329602975C +:103DC00009F0C7CF103011F00296E5CF112484E13D +:103DD00072CE8EE10E94C31C16CE84E90E94C31CE1 +:103DE00012CE81E080930B028FCF82E00E94C31C31 +:103DF0000ACE81E00E94C31C06CE80E10E94C31C53 +:103E000002CE84910E94A21C2091080230910902E6 +:103E1000E0910601F091070140CFCF930E94761CFC +:103E2000C82F0E94A21CC13614F0C75503C0C0336E +:103E30000CF0C0538C2F992787FD9095CF91089552 +:103E40000F931F930E940D1F082F112707FD109538 +:103E500002951295107F1027007F10270E940D1FDA +:103E6000800F992787FD90951F910F910895CF930B +:103E7000C82F85958595859585958A3034F0895A22 +:103E8000CF70CA3034F0C95A05C0805DCF70CA30D7 +:103E9000D4F7C05D0E94A21C8C2F0E94A21CCF915F +:043EA0000895FFCFB3 +:023EA40080009C +:0400000300003800C1 +:00000001FF diff --git a/external/arduino/avr/bootloaders/atmega/ATmegaBOOT_168_pro_8MHz.hex b/external/arduino/avr/bootloaders/atmega/ATmegaBOOT_168_pro_8MHz.hex new file mode 100644 index 000000000..d26492568 --- /dev/null +++ b/external/arduino/avr/bootloaders/atmega/ATmegaBOOT_168_pro_8MHz.hex @@ -0,0 +1,126 @@ +:103800000C94341C0C94511C0C94511C0C94511CA1 +:103810000C94511C0C94511C0C94511C0C94511C74 +:103820000C94511C0C94511C0C94511C0C94511C64 +:103830000C94511C0C94511C0C94511C0C94511C54 +:103840000C94511C0C94511C0C94511C0C94511C44 +:103850000C94511C0C94511C0C94511C0C94511C34 +:103860000C94511C0C94511C11241FBECFEFD4E0BA +:10387000DEBFCDBF11E0A0E0B1E0EEEAFFE302C0A1 +:1038800005900D92A230B107D9F712E0A2E0B1E0A5 +:1038900001C01D92AD30B107E1F70E94331D0C94B9 +:1038A000D51F0C94001C982F9595959595959595F9 +:1038B000905D8F708A307CF0282F295A8091C0004B +:1038C00085FFFCCF9093C6008091C00085FFFCCFA0 +:1038D0002093C6000895282F205DF0CF982F809167 +:1038E000C00085FFFCCF9093C6000895EF92FF9231 +:1038F0000F931F93EE24FF2487018091C00087FD62 +:1039000017C00894E11CF11C011D111D81E2E8168D +:1039100081EAF80687E0080780E0180770F3E09175 +:103920000401F091050109958091C00087FFE9CF5E +:103930008091C6001F910F91FF90EF9008950E9413 +:10394000761C982F8091C00085FFFCCF9093C60015 +:1039500091362CF490330CF09053892F089597559D +:10396000892F08951F930E949F1C182F0E949F1C4F +:103970001295107F810F1F9108951F93182F882390 +:1039800021F00E94761C1150E1F71F9108951F93BA +:10399000182F0E94761C803249F0809103018F5FBE +:1039A000809303018530C1F01F9108958091C0007C +:1039B00085FFFCCF84E18093C6008091C00085FF25 +:1039C000FCCF1093C6008091C00085FFFCCF80E142 +:1039D0008093C6001F910895E0910401F0910501C4 +:1039E00009951F9108950E94761C803241F08091C4 +:1039F00003018F5F80930301853081F008958091EA +:103A0000C00085FFFCCF84E18093C6008091C00098 +:103A100085FFFCCF80E18093C6000895E09104010A +:103A2000F09105010995089510920A028823D1F0BA +:103A300090E048EC50E02D9A28EE33E0FA013197FF +:103A4000F1F721503040D1F72D9828EE33E0FA01FC +:103A50003197F1F721503040D1F79F5F981758F315 +:103A600080930A0208953F924F925F926F927F92E5 +:103A70008F929F92AF92BF92CF92DF92EF92FF927E +:103A80000F931F93CF93DF9394B714BE8091600080 +:103A90008861809360001092600091FF0CC289E100 +:103AA0008093C4001092C50088E18093C10086E035 +:103AB0008093C2005098589A259A81E00E94141D64 +:103AC00044E1F42E3EE1E32E24E9D22E96E0C92E05 +:103AD00080E1B82EAA24A39401E4902E16E5812E4D +:103AE000B2E57B2EA0E26A2EF9E45F2EE3E54E2ECE +:103AF00070E5372E0E94761C8033B9F18133C1F115 +:103B0000803409F470C0813409F477C0823409F438 +:103B100086C0853409F489C0803539F1823529F1B0 +:103B2000813509F4AFC1853509F485C0863509F4BE +:103B30008DC0843609F435C1843709F4C1C0853796 +:103B400009F490C0863709F466C0809103018F5F45 +:103B500080930301853071F6E0910401F091050135 +:103B600009950E94761C803349F60E94F31CC2CF4F +:103B70000E94761C803249F78091C00085FFFCCFFF +:103B8000F092C6008091C00085FFFCCF9092C600E5 +:103B90008091C00085FFFCCF8092C6008091C0005C +:103BA00085FFFCCF7092C6008091C00085FFFCCFDE +:103BB0006092C6008091C00085FFFCCF5092C60085 +:103BC0008091C00085FFFCCF4092C6008091C0006C +:103BD00085FFFCCF3092C6008091C00085FFFCCFEE +:103BE000B092C60087CF0E94761C863808F4BDCFFD +:103BF0000E94761C0E94F31C7DCF0E94761C8038A8 +:103C000009F45AC0813809F453C0823809F440C11C +:103C1000883909F449C080E00E94C71C6BCF84E159 +:103C20000E94BD1C0E94F31C65CF85E00E94BD1C54 +:103C30000E94F31C5FCF0E94761C809306010E94B5 +:103C4000761C809307010E94F31C54CF0E94761CBF +:103C5000803309F421C183E00E94BD1C80E00E94F2 +:103C6000C71C48CF0E94761C803209F06ECF80912D +:103C7000C00085FFFCCFF092C6008091C00085FF98 +:103C8000FCCFE092C6008091C00085FFFCCFD092AF +:103C9000C6008091C00085FFFCCFC092C600809115 +:103CA000C00085FFFCCF9CCF83E00E94C71C22CFC1 +:103CB00081E00E94C71C1ECF82E00E94C71C1ACF61 +:103CC0000E94761C809309020E94761C8093080251 +:103CD0008091060190910701880F991F9093070129 +:103CE000809306010E94761C853409F4C5C080913A +:103CF0000C028E7F80930C020E94761C803209F0A9 +:103D0000F9CE8091C00085FFFCCFF092C600609193 +:103D10000802709109026115710591F140E050E0CF +:103D200080910C02A82FA170B82FB27010C0BB23D5 +:103D300061F1E0910601F09107013196F0930701DE +:103D4000E09306014F5F5F4F46175707C8F4AA2359 +:103D500071F3F999FECF209106013091070132BD30 +:103D600021BDF89A90B58091C00085FFFCCF90935B +:103D7000C6002F5F3F4F3093070120930601E2CF2B +:103D80008091C00085FFFCCF2BCFE0910601F09120 +:103D9000070194918091C00085FFFCCF9093C600ED +:103DA000CCCF0E94761C809309020E94761C8093DF +:103DB000080280910C028E7F80930C020E94761C78 +:103DC000853429F480910C02816080930C028091EB +:103DD000080290910902892B89F000E010E00E940E +:103DE000761CF801E85FFE4F80830F5F1F4F8091C4 +:103DF0000802909109020817190788F30E94761C9F +:103E0000803209F0A2CE80910C0280FF62C0409106 +:103E1000060150910701440F551F5093070140932D +:103E20000601609108027091090261157105C9F0DF +:103E3000E8E0F1E09A01DB01AE0FBF1FF999FECF78 +:103E400032BD21BD819180BDFA9AF99A2F5F3F4F13 +:103E5000EA17FB0799F7460F571F50930701409346 +:103E600006018091C00085FFFCCFF092C6008091D2 +:103E7000C00085FFFCCFB4CE80910C02816080939E +:103E80000C023ACF0E94F31C88E080936000FFCFC1 +:103E900080E10E94C71C2ECE0E94761C0E94761CD8 +:103EA000182F0E94761C112381F0113051F086E00A +:103EB0000E94C71C1FCEE0910401F09105010995F5 +:103EC000EECD84E90E94C71C15CE8EE10E94C71C6E +:103ED00011CE809107018823880F880B8A21809357 +:103EE0000B028091060190910701880F991F909312 +:103EF0000701809306018091080280FF09C080912C +:103F00000802909109020196909309028093080299 +:103F1000F894F999FECF1127E0910601F09107017D +:103F2000C8E0D1E08091080290910902103091F42C +:103F30000091570001700130D9F303E0009357005E +:103F4000E8950091570001700130D9F301E1009329 +:103F50005700E895099019900091570001700130C1 +:103F6000D9F301E000935700E8951395103498F0C9 +:103F700011270091570001700130D9F305E000933B +:103F80005700E8950091570001700130D9F301E125 +:103F900000935700E8953296029709F0C7CF10308A +:0E3FA00011F00296E5CF11245CCFF894FFCF0C +:023FAE00800091 +:0400000300003800C1 +:00000001FF diff --git a/external/arduino/avr/bootloaders/atmega/Makefile b/external/arduino/avr/bootloaders/atmega/Makefile new file mode 100644 index 000000000..efe92e62a --- /dev/null +++ b/external/arduino/avr/bootloaders/atmega/Makefile @@ -0,0 +1,238 @@ +# Makefile for ATmegaBOOT +# E.Lins, 18.7.2005 +# +# Instructions +# +# To make bootloader .hex file: +# make diecimila +# make lilypad +# make ng +# etc... +# +# To burn bootloader .hex file: +# make diecimila_isp +# make lilypad_isp +# make ng_isp +# etc... + +# program name should not be changed... +PROGRAM = ATmegaBOOT_168 + +# enter the parameters for the avrdude isp tool +ISPTOOL = stk500v2 +ISPPORT = usb +ISPSPEED = -b 115200 + +MCU_TARGET = atmega168 +LDSECTION = --section-start=.text=0x3800 + +# the efuse should really be 0xf8; since, however, only the lower +# three bits of that byte are used on the atmega168, avrdude gets +# confused if you specify 1's for the higher bits, see: +# http://tinker.it/now/2007/02/24/the-tale-of-avrdude-atmega168-and-extended-bits-fuses/ +# +# similarly, the lock bits should be 0xff instead of 0x3f (to +# unlock the bootloader section) and 0xcf instead of 0x0f (to +# lock it), but since the high two bits of the lock byte are +# unused, avrdude would get confused. + +ISPFUSES = avrdude -c $(ISPTOOL) -p $(MCU_TARGET) -P $(ISPPORT) $(ISPSPEED) \ +-e -u -U lock:w:0x3f:m -U efuse:w:0x$(EFUSE):m -U hfuse:w:0x$(HFUSE):m -U lfuse:w:0x$(LFUSE):m +ISPFLASH = avrdude -c $(ISPTOOL) -p $(MCU_TARGET) -P $(ISPPORT) $(ISPSPEED) \ +-U flash:w:$(PROGRAM)_$(TARGET).hex -U lock:w:0x0f:m + +STK500 = "C:\Program Files\Atmel\AVR Tools\STK500\Stk500.exe" +STK500-1 = $(STK500) -e -d$(MCU_TARGET) -pf -vf -if$(PROGRAM)_$(TARGET).hex \ +-lFF -LFF -f$(HFUSE)$(LFUSE) -EF8 -ms -q -cUSB -I200kHz -s -wt +STK500-2 = $(STK500) -d$(MCU_TARGET) -ms -q -lCF -LCF -cUSB -I200kHz -s -wt + + +OBJ = $(PROGRAM).o +OPTIMIZE = -Os + +DEFS = +LIBS = + +CC = avr-gcc + +# Override is only needed by avr-lib build system. + +override CFLAGS = -g -Wall $(OPTIMIZE) -mmcu=$(MCU_TARGET) -DF_CPU=$(AVR_FREQ) $(DEFS) +override LDFLAGS = -Wl,$(LDSECTION) +#override LDFLAGS = -Wl,-Map,$(PROGRAM).map,$(LDSECTION) + +OBJCOPY = avr-objcopy +OBJDUMP = avr-objdump + +all: + +lilypad: TARGET = lilypad +lilypad: CFLAGS += '-DMAX_TIME_COUNT=F_CPU>>1' '-DNUM_LED_FLASHES=3' +lilypad: AVR_FREQ = 8000000L +lilypad: $(PROGRAM)_lilypad.hex + +lilypad_isp: lilypad +lilypad_isp: TARGET = lilypad +lilypad_isp: HFUSE = DD +lilypad_isp: LFUSE = E2 +lilypad_isp: EFUSE = 00 +lilypad_isp: isp + +lilypad_resonator: TARGET = lilypad_resonator +lilypad_resonator: CFLAGS += '-DMAX_TIME_COUNT=F_CPU>>4' '-DNUM_LED_FLASHES=3' +lilypad_resonator: AVR_FREQ = 8000000L +lilypad_resonator: $(PROGRAM)_lilypad_resonator.hex + +lilypad_resonator_isp: lilypad_resonator +lilypad_resonator_isp: TARGET = lilypad_resonator +lilypad_resonator_isp: HFUSE = DD +lilypad_resonator_isp: LFUSE = C6 +lilypad_resonator_isp: EFUSE = 00 +lilypad_resonator_isp: isp + +pro8: TARGET = pro_8MHz +pro8: CFLAGS += '-DMAX_TIME_COUNT=F_CPU>>4' '-DNUM_LED_FLASHES=1' '-DWATCHDOG_MODS' +pro8: AVR_FREQ = 8000000L +pro8: $(PROGRAM)_pro_8MHz.hex + +pro8_isp: pro8 +pro8_isp: TARGET = pro_8MHz +pro8_isp: HFUSE = DD +pro8_isp: LFUSE = C6 +pro8_isp: EFUSE = 00 +pro8_isp: isp + +pro16: TARGET = pro_16MHz +pro16: CFLAGS += '-DMAX_TIME_COUNT=F_CPU>>4' '-DNUM_LED_FLASHES=1' '-DWATCHDOG_MODS' +pro16: AVR_FREQ = 16000000L +pro16: $(PROGRAM)_pro_16MHz.hex + +pro16_isp: pro16 +pro16_isp: TARGET = pro_16MHz +pro16_isp: HFUSE = DD +pro16_isp: LFUSE = C6 +pro16_isp: EFUSE = 00 +pro16_isp: isp + +pro20: TARGET = pro_20mhz +pro20: CFLAGS += '-DMAX_TIME_COUNT=F_CPU>>4' '-DNUM_LED_FLASHES=1' '-DWATCHDOG_MODS' +pro20: AVR_FREQ = 20000000L +pro20: $(PROGRAM)_pro_20mhz.hex + +pro20_isp: pro20 +pro20_isp: TARGET = pro_20mhz +pro20_isp: HFUSE = DD +pro20_isp: LFUSE = C6 +pro20_isp: EFUSE = 00 +pro20_isp: isp + +diecimila: TARGET = diecimila +diecimila: CFLAGS += '-DMAX_TIME_COUNT=F_CPU>>4' '-DNUM_LED_FLASHES=1' +diecimila: AVR_FREQ = 16000000L +diecimila: $(PROGRAM)_diecimila.hex + +diecimila_isp: diecimila +diecimila_isp: TARGET = diecimila +diecimila_isp: HFUSE = DD +diecimila_isp: LFUSE = FF +diecimila_isp: EFUSE = 00 +diecimila_isp: isp + +ng: TARGET = ng +ng: CFLAGS += '-DMAX_TIME_COUNT=F_CPU>>1' '-DNUM_LED_FLASHES=3' +ng: AVR_FREQ = 16000000L +ng: $(PROGRAM)_ng.hex + +ng_isp: ng +ng_isp: TARGET = ng +ng_isp: HFUSE = DD +ng_isp: LFUSE = FF +ng_isp: EFUSE = 00 +ng_isp: isp + +atmega328: TARGET = atmega328 +atmega328: MCU_TARGET = atmega328p +atmega328: CFLAGS += '-DMAX_TIME_COUNT=F_CPU>>4' '-DNUM_LED_FLASHES=1' -DBAUD_RATE=57600 +atmega328: AVR_FREQ = 16000000L +atmega328: LDSECTION = --section-start=.text=0x7800 +atmega328: $(PROGRAM)_atmega328.hex + +atmega328_isp: atmega328 +atmega328_isp: TARGET = atmega328 +atmega328_isp: MCU_TARGET = atmega328p +atmega328_isp: HFUSE = DA +atmega328_isp: LFUSE = FF +atmega328_isp: EFUSE = 05 +atmega328_isp: isp + +atmega328_notp: TARGET = atmega328_notp +atmega328_notp: MCU_TARGET = atmega328 +atmega328_notp: CFLAGS += '-DMAX_TIME_COUNT=F_CPU>>4' '-DNUM_LED_FLASHES=1' -DBAUD_RATE=57600 +atmega328_notp: AVR_FREQ = 16000000L +atmega328_notp: LDSECTION = --section-start=.text=0x7800 +atmega328_notp: $(PROGRAM)_atmega328_notp.hex + +atmega328_notp_isp: atmega328_notp +atmega328_notp_isp: TARGET = atmega328 +atmega328_notp_isp: MCU_TARGET = atmega328 +atmega328_notp_isp: HFUSE = DA +atmega328_notp_isp: LFUSE = FF +atmega328_notp_isp: EFUSE = 05 +atmega328_notp_isp: isp + +atmega328_pro8: TARGET = atmega328_pro_8MHz +atmega328_pro8: MCU_TARGET = atmega328p +atmega328_pro8: CFLAGS += '-DMAX_TIME_COUNT=F_CPU>>4' '-DNUM_LED_FLASHES=1' -DBAUD_RATE=57600 -DDOUBLE_SPEED +atmega328_pro8: AVR_FREQ = 8000000L +atmega328_pro8: LDSECTION = --section-start=.text=0x7800 +atmega328_pro8: $(PROGRAM)_atmega328_pro_8MHz.hex + +atmega328_pro8_isp: atmega328_pro8 +atmega328_pro8_isp: TARGET = atmega328_pro_8MHz +atmega328_pro8_isp: MCU_TARGET = atmega328p +atmega328_pro8_isp: HFUSE = DA +atmega328_pro8_isp: LFUSE = FF +atmega328_pro8_isp: EFUSE = 05 +atmega328_pro8_isp: isp + +mega: TARGET = atmega1280 +mega: MCU_TARGET = atmega1280 +mega: CFLAGS += '-DMAX_TIME_COUNT=F_CPU>>4' '-DNUM_LED_FLASHES=0' -DBAUD_RATE=57600 +mega: AVR_FREQ = 16000000L +mega: LDSECTION = --section-start=.text=0x1F000 +mega: $(PROGRAM)_atmega1280.hex + +mega_isp: mega +mega_isp: TARGET = atmega1280 +mega_isp: MCU_TARGET = atmega1280 +mega_isp: HFUSE = DA +mega_isp: LFUSE = FF +mega_isp: EFUSE = F5 +mega_isp: isp + +isp: $(TARGET) + $(ISPFUSES) + $(ISPFLASH) + +isp-stk500: $(PROGRAM)_$(TARGET).hex + $(STK500-1) + $(STK500-2) + +%.elf: $(OBJ) + $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(LIBS) + +clean: + rm -rf *.o *.elf *.lst *.map *.sym *.lss *.eep *.srec *.bin *.hex + +%.lst: %.elf + $(OBJDUMP) -h -S $< > $@ + +%.hex: %.elf + $(OBJCOPY) -j .text -j .data -O ihex $< $@ + +%.srec: %.elf + $(OBJCOPY) -j .text -j .data -O srec $< $@ + +%.bin: %.elf + $(OBJCOPY) -j .text -j .data -O binary $< $@ + diff --git a/external/arduino/avr/bootloaders/atmega8/ATmegaBOOT-prod-firmware-2009-11-07.hex b/external/arduino/avr/bootloaders/atmega8/ATmegaBOOT-prod-firmware-2009-11-07.hex new file mode 100644 index 000000000..320fa4238 --- /dev/null +++ b/external/arduino/avr/bootloaders/atmega8/ATmegaBOOT-prod-firmware-2009-11-07.hex @@ -0,0 +1,66 @@ +:101C000012C02BC02AC029C028C027C026C025C0AA +:101C100024C023C022C021C020C01FC01EC01DC0C0 +:101C20001CC01BC01AC011241FBECFE5D4E0DEBF0C +:101C3000CDBF10E0A0E6B0E0E8EEFFE102C0059005 +:101C40000D92A236B107D9F711E0A2E6B0E001C0CB +:101C50001D92AA36B107E1F74FC0D2CFEF92FF92A3 +:101C60000F931F93EE24FF24870113C00894E11CF7 +:101C7000F11C011D111D81E0E81682E1F8068AE7DA +:101C8000080780E0180728F0E0916200F0916300F7 +:101C900009955F9BEBCF8CB1992787FD90951F919C +:101CA0000F91FF90EF9008955D9BFECF8CB9089542 +:101CB000D5DF803221F484E1F7DF80E1F5DF08959C +:101CC0001F93182FCBDF803231F484E1EDDF812FB9 +:101CD000EBDF80E1E9DF1F9108951F93CF93DF933E +:101CE000182FC0E0D0E002C0B9DF2196C117E0F3A1 +:101CF000DF91CF911F910895CFE5D4E0DEBFCDBF36 +:101D0000000010BC83E389B988E18AB986E880BD08 +:101D1000BD9A1092680130E2E0E0F0E02FE088B375 +:101D2000832788BBCF010197F1F7215027FFF7CF19 +:101D300020E12093680192DF803381F1813399F4AF +:101D40008DDF8032C1F784E1AFDF81E4ADDF86E56E +:101D5000ABDF82E5A9DF80E2A7DF89E4A5DF83E5C9 +:101D6000A3DF80E5C7C0803429F478DF8638B0F07F +:101D700075DF14C0813471F471DF803811F482E0B2 +:101D80001DC1813811F481E019C1823809F015C1F3 +:101D900082E114C1823421F484E19FDF89DFCBCF5B +:101DA000853411F485E0F9CF8035C1F38135B1F385 +:101DB0008235A1F3853539F451DF809364004EDF1D +:101DC00080936500EBCF863519F484E086DFF5C09B +:101DD000843609F093C042DF809367013FDF809330 +:101DE0006601809169018E7F8093690137DF8534B8 +:101DF00029F480916901816080936901C0E0D0E09D +:101E000006E610E005C02ADFF80181938F012196D4 +:101E10008091660190916701C817D907A0F31EDF72 +:101E2000803209F088CF8091690180FF1FC020E0D7 +:101E300030E0E6E6F0E012C0A0916400B0916500E9 +:101E40008191082EC5D08091640090916500019623 +:101E500090936500809364002F5F3F4F80916601EF +:101E6000909167012817390738F343C0F894E19936 +:101E7000FECF1127E0916400F0916500EE0FFF1F87 +:101E8000C6E6D0E0809166019091670180FF01C0B5 +:101E90000196103051F422D003E000935700E895EA +:101EA0001DD001E100935700E8950990199016D0D4 +:101EB00001E000935700E8951395103258F0112770 +:101EC0000DD005E000935700E89508D001E100939C +:101ED0005700E8953296029739F0DBCF0091570012 +:101EE00001700130D9F30895103011F00296E7CF58 +:101EF000112484E1D9DE80E1D7DE1DCF843709F0DB +:101F00004BC0ACDE80936701A9DE80936601A6DE3C +:101F100090916901853421F49160909369010DC01D +:101F20009E7F909369018091640090916500880F75 +:101F3000991F909365008093640090DE803209F0D1 +:101F4000FACE84E1B1DEC0E0D0E01EC0809169012C +:101F500080FF07C0A0916400B091650031D0802D52 +:101F600008C081FD07C0E0916400F0916500E49134 +:101F70008E2F9ADE80916400909165000196909377 +:101F800065008093640021968091660190916701BD +:101F9000C817D907D8F2AFCF853761F45FDE80323A +:101FA00009F0C9CE84E180DE8EE17EDE83E97CDE4D +:101FB00087E0A0CF863709F0BECE80E081DEBBCEC1 +:101FC000E199FECFBFBBAEBBE09A11960DB208956A +:101FD000E199FECFBFBBAEBB0DBA11960FB6F89418 +:081FE000E29AE19A0FBE089598 +:021FE800800077 +:0400000300001C00DD +:00000001FF diff --git a/external/arduino/avr/bootloaders/atmega8/ATmegaBOOT.c b/external/arduino/avr/bootloaders/atmega8/ATmegaBOOT.c new file mode 100644 index 000000000..8c8d22a96 --- /dev/null +++ b/external/arduino/avr/bootloaders/atmega8/ATmegaBOOT.c @@ -0,0 +1,507 @@ +/**********************************************************/ +/* Serial Bootloader for Atmel mega8 AVR Controller */ +/* */ +/* ATmegaBOOT.c */ +/* */ +/* Copyright (c) 2003, Jason P. Kyle */ +/* */ +/* Hacked by DojoCorp - ZGZ - MMX - IVR */ +/* Hacked by David A. Mellis */ +/* */ +/* This program is free software; you can redistribute it */ +/* and/or modify it under the terms of the GNU General */ +/* Public License as published by the Free Software */ +/* Foundation; either version 2 of the License, or */ +/* (at your option) any later version. */ +/* */ +/* This program is distributed in the hope that it will */ +/* be useful, but WITHOUT ANY WARRANTY; without even the */ +/* implied warranty of MERCHANTABILITY or FITNESS FOR A */ +/* PARTICULAR PURPOSE. See the GNU General Public */ +/* License for more details. */ +/* */ +/* You should have received a copy of the GNU General */ +/* Public License along with this program; if not, write */ +/* to the Free Software Foundation, Inc., */ +/* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +/* */ +/* Licence can be viewed at */ +/* http://www.fsf.org/licenses/gpl.txt */ +/* */ +/* Target = Atmel AVR m8 */ +/**********************************************************/ + +#include +#include +#include +#include +#include +#include + +//#define F_CPU 16000000 + +/* We, Malmoitians, like slow interaction + * therefore the slow baud rate ;-) + */ +//#define BAUD_RATE 9600 + +/* 6.000.000 is more or less 8 seconds at the + * speed configured here + */ +//#define MAX_TIME_COUNT 6000000 +#define MAX_TIME_COUNT (F_CPU>>1) +///#define MAX_TIME_COUNT_MORATORY 1600000 + +/* SW_MAJOR and MINOR needs to be updated from time to time to avoid warning message from AVR Studio */ +#define HW_VER 0x02 +#define SW_MAJOR 0x01 +#define SW_MINOR 0x12 + +// AVR-GCC compiler compatibility +// avr-gcc compiler v3.1.x and older doesn't support outb() and inb() +// if necessary, convert outb and inb to outp and inp +#ifndef outb + #define outb(sfr,val) (_SFR_BYTE(sfr) = (val)) +#endif +#ifndef inb + #define inb(sfr) _SFR_BYTE(sfr) +#endif + +/* defines for future compatibility */ +#ifndef cbi + #define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit)) +#endif +#ifndef sbi + #define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit)) +#endif + +/* Adjust to suit whatever pin your hardware uses to enter the bootloader */ +#define eeprom_rb(addr) eeprom_read_byte ((uint8_t *)(addr)) +#define eeprom_rw(addr) eeprom_read_word ((uint16_t *)(addr)) +#define eeprom_wb(addr, val) eeprom_write_byte ((uint8_t *)(addr), (uint8_t)(val)) + +/* Onboard LED is connected to pin PB5 */ +#define LED_DDR DDRB +#define LED_PORT PORTB +#define LED_PIN PINB +#define LED PINB5 + + +#define SIG1 0x1E // Yep, Atmel is the only manufacturer of AVR micros. Single source :( +#define SIG2 0x93 +#define SIG3 0x07 +#define PAGE_SIZE 0x20U //32 words + + +void putch(char); +char getch(void); +void getNch(uint8_t); +void byte_response(uint8_t); +void nothing_response(void); + +union address_union { + uint16_t word; + uint8_t byte[2]; +} address; + +union length_union { + uint16_t word; + uint8_t byte[2]; +} length; + +struct flags_struct { + unsigned eeprom : 1; + unsigned rampz : 1; +} flags; + +uint8_t buff[256]; +//uint8_t address_high; + +uint8_t pagesz=0x80; + +uint8_t i; +//uint8_t bootuart0=0,bootuart1=0; + + +void (*app_start)(void) = 0x0000; + +int main(void) +{ + uint8_t ch,ch2; + uint16_t w; + + //cbi(BL_DDR,BL); + //sbi(BL_PORT,BL); + + asm volatile("nop\n\t"); + + /* check if flash is programmed already, if not start bootloader anyway */ + //if(pgm_read_byte_near(0x0000) != 0xFF) { + + /* check if bootloader pin is set low */ + //if(bit_is_set(BL_PIN,BL)) app_start(); + //} + + /* initialize UART(s) depending on CPU defined */ + /* m8 */ + UBRRH = (((F_CPU/BAUD_RATE)/16)-1)>>8; // set baud rate + UBRRL = (((F_CPU/BAUD_RATE)/16)-1); + UCSRB = (1<> 8; + //UCSRA = 0x00; + //UCSRC = 0x86; + //UCSRB = _BV(TXEN)|_BV(RXEN); + + + /* this was giving uisp problems, so I removed it; without it, the boot + works on with uisp and avrdude on the mac (at least). */ + //putch('\0'); + + //uint32_t l; + //uint32_t time_count; + //time_count=0; + + /* set LED pin as output */ + sbi(LED_DDR,LED); + for (i = 0; i < 16; i++) { + outb(LED_PORT, inb(LED_PORT) ^ _BV(LED)); + _delay_loop_2(0); + } + + //for (l=0; l<40000000; l++) + //outb(LED_PORT, inb(LED_PORT) ^= _BV(LED)); + + /* flash onboard LED three times to signal entering of bootloader */ + //for(i=0; i<3; ++i) { + //for(l=0; l<40000000; ++l); + //sbi(LED_PORT,LED); + //for(l=0; l<40000000; ++l); + //cbi(LED_PORT,LED); + //} + + /* see comment at previous call to putch() */ + //putch('\0'); // this line is needed for the synchronization of the programmer + + /* forever */ + for (;;) { + //if((inb(UCSRA) & _BV(RXC))){ + /* get character from UART */ + ch = getch(); + + /* A bunch of if...else if... gives smaller code than switch...case ! */ + + /* Hello is anyone home ? */ + if(ch=='0') { + nothing_response(); + } + + /* Request programmer ID */ + /* Not using PROGMEM string due to boot block in m128 being beyond 64kB boundry */ + /* Would need to selectively manipulate RAMPZ, and it's only 9 characters anyway so who cares. */ + else if(ch=='1') { + if (getch() == ' ') { + putch(0x14); + putch('A'); + putch('V'); + putch('R'); + putch(' '); + putch('I'); + putch('S'); + putch('P'); + putch(0x10); + } + } + + /* AVR ISP/STK500 board commands DON'T CARE so default nothing_response */ + else if(ch=='@') { + ch2 = getch(); + if (ch2>0x85) getch(); + nothing_response(); + } + + /* AVR ISP/STK500 board requests */ + else if(ch=='A') { + ch2 = getch(); + if(ch2==0x80) byte_response(HW_VER); // Hardware version + else if(ch2==0x81) byte_response(SW_MAJOR); // Software major version + else if(ch2==0x82) byte_response(SW_MINOR); // Software minor version + //else if(ch2==0x98) byte_response(0x03); // Unknown but seems to be required by avr studio 3.56 + else byte_response(0x00); // Covers various unnecessary responses we don't care about + } + + /* Device Parameters DON'T CARE, DEVICE IS FIXED */ + else if(ch=='B') { + getNch(20); + nothing_response(); + } + + /* Parallel programming stuff DON'T CARE */ + else if(ch=='E') { + getNch(5); + nothing_response(); + } + + /* Enter programming mode */ + else if(ch=='P') { + nothing_response(); + // FIXME: modified only here by DojoCorp, Mumbai, India, 20050626 + //time_count=0; // exted the delay once entered prog.mode + } + + /* Leave programming mode */ + else if(ch=='Q') { + nothing_response(); + //time_count=MAX_TIME_COUNT_MORATORY; // once the programming is done, + // we should start the application + // but uisp has problems with this, + // therefore we just change the times + // and give the programmer 1 sec to react + } + + /* Erase device, don't care as we will erase one page at a time anyway. */ + else if(ch=='R') { + nothing_response(); + } + + /* Set address, little endian. EEPROM in bytes, FLASH in words */ + /* Perhaps extra address bytes may be added in future to support > 128kB FLASH. */ + /* This might explain why little endian was used here, big endian used everywhere else. */ + else if(ch=='U') { + address.byte[0] = getch(); + address.byte[1] = getch(); + nothing_response(); + } + + /* Universal SPI programming command, disabled. Would be used for fuses and lock bits. */ + else if(ch=='V') { + getNch(4); + byte_response(0x00); + } + + /* Write memory, length is big endian and is in bytes */ + else if(ch=='d') { + length.byte[1] = getch(); + length.byte[0] = getch(); + flags.eeprom = 0; + if (getch() == 'E') flags.eeprom = 1; + for (w=0;w127) address_high = 0x01; //Only possible with m128, m256 will need 3rd address byte. FIXME + //else address_high = 0x00; + + //address.word = address.word << 1; //address * 2 -> byte location + //if ((length.byte[0] & 0x01)) length.word++; //Even up an odd number of bytes + cli(); //Disable interrupts, just to be sure + while(bit_is_set(EECR,EEWE)); //Wait for previous EEPROM writes to complete + asm volatile( + "clr r17 \n\t" //page_word_count + "lds r30,address \n\t" //Address of FLASH location (in words) + "lds r31,address+1 \n\t" + "lsl r30 \n\t" //address * 2 -> byte location + "rol r31 \n\t" + "ldi r28,lo8(buff) \n\t" //Start of buffer array in RAM + "ldi r29,hi8(buff) \n\t" + "lds r24,length \n\t" //Length of data to be written (in bytes) + "lds r25,length+1 \n\t" + "sbrs r24,0 \n\t" //Even up an odd number of bytes + "rjmp length_loop \n\t" + "adiw r24,1 \n\t" + "length_loop: \n\t" //Main loop, repeat for number of words in block + "cpi r17,0x00 \n\t" //If page_word_count=0 then erase page + "brne no_page_erase \n\t" + "rcall wait_spm \n\t" +// "wait_spm1: \n\t" +// "lds r16,%0 \n\t" //Wait for previous spm to complete +// "andi r16,1 \n\t" +// "cpi r16,1 \n\t" +// "breq wait_spm1 \n\t" + "ldi r16,0x03 \n\t" //Erase page pointed to by Z + "sts %0,r16 \n\t" + "spm \n\t" + "rcall wait_spm \n\t" +// "wait_spm2: \n\t" +// "lds r16,%0 \n\t" //Wait for previous spm to complete +// "andi r16,1 \n\t" +// "cpi r16,1 \n\t" +// "breq wait_spm2 \n\t" + "ldi r16,0x11 \n\t" //Re-enable RWW section + "sts %0,r16 \n\t" + "spm \n\t" + "no_page_erase: \n\t" + "ld r0,Y+ \n\t" //Write 2 bytes into page buffer + "ld r1,Y+ \n\t" + + "rcall wait_spm \n\t" +// "wait_spm3: \n\t" +// "lds r16,%0 \n\t" //Wait for previous spm to complete +// "andi r16,1 \n\t" +// "cpi r16,1 \n\t" +// "breq wait_spm3 \n\t" + "ldi r16,0x01 \n\t" //Load r0,r1 into FLASH page buffer + "sts %0,r16 \n\t" + "spm \n\t" + + "inc r17 \n\t" //page_word_count++ + "cpi r17,%1 \n\t" + "brlo same_page \n\t" //Still same page in FLASH + "write_page: \n\t" + "clr r17 \n\t" //New page, write current one first + "rcall wait_spm \n\t" +// "wait_spm4: \n\t" +// "lds r16,%0 \n\t" //Wait for previous spm to complete +// "andi r16,1 \n\t" +// "cpi r16,1 \n\t" +// "breq wait_spm4 \n\t" + "ldi r16,0x05 \n\t" //Write page pointed to by Z + "sts %0,r16 \n\t" + "spm \n\t" + "rcall wait_spm \n\t" +// "wait_spm5: \n\t" +// "lds r16,%0 \n\t" //Wait for previous spm to complete +// "andi r16,1 \n\t" +// "cpi r16,1 \n\t" +// "breq wait_spm5 \n\t" + "ldi r16,0x11 \n\t" //Re-enable RWW section + "sts %0,r16 \n\t" + "spm \n\t" + "same_page: \n\t" + "adiw r30,2 \n\t" //Next word in FLASH + "sbiw r24,2 \n\t" //length-2 + "breq final_write \n\t" //Finished + "rjmp length_loop \n\t" + + "wait_spm: \n\t" + "lds r16,%0 \n\t" //Wait for previous spm to complete + "andi r16,1 \n\t" + "cpi r16,1 \n\t" + "breq wait_spm \n\t" + "ret \n\t" + + "final_write: \n\t" + "cpi r17,0 \n\t" + "breq block_done \n\t" + "adiw r24,2 \n\t" //length+2, fool above check on length after short page write + "rjmp write_page \n\t" + "block_done: \n\t" + "clr __zero_reg__ \n\t" //restore zero register + : "=m" (SPMCR) : "M" (PAGE_SIZE) : "r0","r16","r17","r24","r25","r28","r29","r30","r31"); + + /* Should really add a wait for RWW section to be enabled, don't actually need it since we never */ + /* exit the bootloader without a power cycle anyhow */ + } + putch(0x14); + putch(0x10); + } + } + + /* Read memory block mode, length is big endian. */ + else if(ch=='t') { + length.byte[1] = getch(); + length.byte[0] = getch(); + if (getch() == 'E') flags.eeprom = 1; + else { + flags.eeprom = 0; + address.word = address.word << 1; // address * 2 -> byte location + } + if (getch() == ' ') { // Command terminator + putch(0x14); + for (w=0;w < length.word;w++) { // Can handle odd and even lengths okay + if (flags.eeprom) { // Byte access EEPROM read + putch(eeprom_rb(address.word)); + address.word++; + } else { + if (!flags.rampz) putch(pgm_read_byte_near(address.word)); + address.word++; + } + } + putch(0x10); + } + } + + /* Get device signature bytes */ + else if(ch=='u') { + if (getch() == ' ') { + putch(0x14); + putch(SIG1); + putch(SIG2); + putch(SIG3); + putch(0x10); + } + } + + /* Read oscillator calibration byte */ + else if(ch=='v') { + byte_response(0x00); + } +// } else { +// time_count++; +// if (time_count>=MAX_TIME_COUNT) { +// app_start(); +// } +// } + } /* end of forever loop */ +} + +void putch(char ch) +{ + /* m8 */ + while (!(inb(UCSRA) & _BV(UDRE))); + outb(UDR,ch); +} + +char getch(void) +{ + /* m8 */ + uint32_t count = 0; + while(!(inb(UCSRA) & _BV(RXC))) { + /* HACKME:: here is a good place to count times*/ + count++; + if (count > MAX_TIME_COUNT) + app_start(); + } + return (inb(UDR)); +} + +void getNch(uint8_t count) +{ + uint8_t i; + for(i=0;i $@ + +size: $(PROGRAM).hex + $(SIZE) $^ + +# Rules for building the .text rom images + +text: hex bin srec + +hex: $(PROGRAM).hex +bin: $(PROGRAM).bin +srec: $(PROGRAM).srec + +%.hex: %.elf + $(OBJCOPY) -j .text -j .data -O ihex $< $@ + +%.srec: %.elf + $(OBJCOPY) -j .text -j .data -O srec $< $@ + +%.bin: %.elf + $(OBJCOPY) -j .text -j .data -O binary $< $@ diff --git a/external/arduino/avr/bootloaders/bt/ATmegaBOOT_168.c b/external/arduino/avr/bootloaders/bt/ATmegaBOOT_168.c new file mode 100644 index 000000000..d477e7a68 --- /dev/null +++ b/external/arduino/avr/bootloaders/bt/ATmegaBOOT_168.c @@ -0,0 +1,1043 @@ +/**********************************************************/ +/* Serial Bootloader for Atmel megaAVR Controllers */ +/* */ +/* tested with ATmega8, ATmega128 and ATmega168 */ +/* should work with other mega's, see code for details */ +/* */ +/* ATmegaBOOT.c */ +/* */ +/* build: 050815 */ +/* date : 15.08.2005 */ +/* */ +/* 20060802: hacked for Arduino by D. Cuartielles */ +/* based on a previous hack by D. Mellis */ +/* and D. Cuartielles */ +/* */ +/* Monitor and debug functions were added to the original */ +/* code by Dr. Erik Lins, chip45.com. (See below) */ +/* */ +/* Thanks to Karl Pitrich for fixing a bootloader pin */ +/* problem and more informative LED blinking! */ +/* */ +/* For the latest version see: */ +/* http://www.chip45.com/ */ +/* */ +/* ------------------------------------------------------ */ +/* */ +/* based on stk500boot.c */ +/* Copyright (c) 2003, Jason P. Kyle */ +/* All rights reserved. */ +/* see avr1.org for original file and information */ +/* */ +/* This program is free software; you can redistribute it */ +/* and/or modify it under the terms of the GNU General */ +/* Public License as published by the Free Software */ +/* Foundation; either version 2 of the License, or */ +/* (at your option) any later version. */ +/* */ +/* This program is distributed in the hope that it will */ +/* be useful, but WITHOUT ANY WARRANTY; without even the */ +/* implied warranty of MERCHANTABILITY or FITNESS FOR A */ +/* PARTICULAR PURPOSE. See the GNU General Public */ +/* License for more details. */ +/* */ +/* You should have received a copy of the GNU General */ +/* Public License along with this program; if not, write */ +/* to the Free Software Foundation, Inc., */ +/* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +/* */ +/* Licence can be viewed at */ +/* http://www.fsf.org/licenses/gpl.txt */ +/* */ +/* Target = Atmel AVR m128,m64,m32,m16,m8,m162,m163,m169, */ +/* m8515,m8535. ATmega161 has a very small boot block so */ +/* isn't supported. */ +/* */ +/* Tested with m128,m8,m163 - feel free to let me know */ +/* how/if it works for you. */ +/* */ +/**********************************************************/ + + +/* some includes */ +#include +#include +#include +#include +#include + + +#define set_output(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit)) +#define set_input(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit)) + + +#define high(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit)) +#define low(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit)) + + + + +/* the current avr-libc eeprom functions do not support the ATmega168 */ +/* own eeprom write/read functions are used instead */ +#if !defined(__AVR_ATmega168__) || !defined(__AVR_ATmega328P__) || !defined(__AVR_ATmega328__) +#include +#endif + +/* define F_CPU according to AVR_FREQ set in Makefile */ +/* Is there a better way to pass such a parameter from Makefile to source code ? */ + +#define F_CPU 16000000L + +#include + + +/* 20060803: hacked by DojoCorp */ +/* set the waiting time for the bootloader */ +#define MAX_TIME_COUNT (F_CPU>>1) + +/* set the UART baud rate */ +/* 20060803: hacked by DojoCorp */ +#define BAUD_RATE 115200 + + +/* SW_MAJOR and MINOR needs to be updated from time to time to avoid warning message from AVR Studio */ +/* never allow AVR Studio to do an update !!!! */ +#define HW_VER 0x02 +#define SW_MAJOR 0x01 +#define SW_MINOR 0x0f + + +/* Adjust to suit whatever pin your hardware uses to enter the bootloader */ +/* ATmega128 has two UARTS so two pins are used to enter bootloader and select UART */ +/* BL0... means UART0, BL1... means UART1 */ +#ifdef __AVR_ATmega128__ +#define BL_DDR DDRF +#define BL_PORT PORTF +#define BL_PIN PINF +#define BL0 PINF7 +#define BL1 PINF6 +#else +/* other ATmegas have only one UART, so only one pin is defined to enter bootloader */ +#define BL_DDR DDRD +#define BL_PORT PORTD +#define BL_PIN PIND +#define BL PIND6 +#endif + + +/* onboard LED is used to indicate, that the bootloader was entered (3x flashing) */ +/* if monitor functions are included, LED goes on after monitor was entered */ +#ifdef __AVR_ATmega128__ +/* Onboard LED is connected to pin PB7 (e.g. Crumb128, PROBOmega128, Savvy128) */ +#define LED_DDR DDRB +#define LED_PORT PORTB +#define LED_PIN PINB +#define LED PINB7 +#else +/* Onboard LED is connected to pin PB2 (e.g. Crumb8, Crumb168) */ +#define LED_DDR DDRB +#define LED_PORT PORTB +#define LED_PIN PINB +/* 20060803: hacked by DojoCorp, LED pin is B5 in Arduino */ +/* #define LED PINB2 */ +#define LED PINB5 +#endif + + +/* monitor functions will only be compiled when using ATmega128, due to bootblock size constraints */ +#ifdef __AVR_ATmega128__ +#define MONITOR +#endif + + +/* define various device id's */ +/* manufacturer byte is always the same */ +#define SIG1 0x1E // Yep, Atmel is the only manufacturer of AVR micros. Single source :( + +#if defined __AVR_ATmega128__ +#define SIG2 0x97 +#define SIG3 0x02 +#define PAGE_SIZE 0x80U //128 words + +#elif defined __AVR_ATmega64__ +#define SIG2 0x96 +#define SIG3 0x02 +#define PAGE_SIZE 0x80U //128 words + +#elif defined __AVR_ATmega32__ +#define SIG2 0x95 +#define SIG3 0x02 +#define PAGE_SIZE 0x40U //64 words + +#elif defined __AVR_ATmega16__ +#define SIG2 0x94 +#define SIG3 0x03 +#define PAGE_SIZE 0x40U //64 words + +#elif defined __AVR_ATmega8__ +#define SIG2 0x93 +#define SIG3 0x07 +#define PAGE_SIZE 0x20U //32 words + +#elif defined __AVR_ATmega88__ +#define SIG2 0x93 +#define SIG3 0x0a +#define PAGE_SIZE 0x20U //32 words + +#elif defined __AVR_ATmega168__ +#define SIG2 0x94 +#define SIG3 0x06 +#define PAGE_SIZE 0x40U //64 words + +#elif defined __AVR_ATmega328P__ +#define SIG2 0x95 +#define SIG3 0x0F +#define PAGE_SIZE 0x40U //64 words + +#elif defined __AVR_ATmega328__ +#define SIG2 0x95 +#define SIG3 0x14 +#define PAGE_SIZE 0x40U //64 words + +#elif defined __AVR_ATmega162__ +#define SIG2 0x94 +#define SIG3 0x04 +#define PAGE_SIZE 0x40U //64 words + +#elif defined __AVR_ATmega163__ +#define SIG2 0x94 +#define SIG3 0x02 +#define PAGE_SIZE 0x40U //64 words + +#elif defined __AVR_ATmega169__ +#define SIG2 0x94 +#define SIG3 0x05 +#define PAGE_SIZE 0x40U //64 words + +#elif defined __AVR_ATmega8515__ +#define SIG2 0x93 +#define SIG3 0x06 +#define PAGE_SIZE 0x20U //32 words + +#elif defined __AVR_ATmega8535__ +#define SIG2 0x93 +#define SIG3 0x08 +#define PAGE_SIZE 0x20U //32 words +#endif + + +/* function prototypes */ +void putch(char); +char getch(void); +void getNch(uint8_t); +void byte_response(uint8_t); +void nothing_response(void); +char gethex(void); +void puthex(char); +void flash_led(uint8_t); + +/* some variables */ +union address_union { + uint16_t word; + uint8_t byte[2]; +} address; + +union length_union { + uint16_t word; + uint8_t byte[2]; +} length; + +struct flags_struct { + unsigned eeprom : 1; + unsigned rampz : 1; +} flags; + +uint8_t buff[256]; +uint8_t address_high; + +uint8_t pagesz=0x80; + +uint8_t i; +uint8_t bootuart = 0; + +void (*app_start)(void) = 0x0000; + + +/* main program starts here */ +int main(void) +{ + uint8_t ch,ch2; + uint16_t w; + + asm volatile("nop\n\t"); + + /* set pin direction for bootloader pin and enable pullup */ + /* for ATmega128, two pins need to be initialized */ +#ifdef __AVR_ATmega128__ + BL_DDR &= ~_BV(BL0); + BL_DDR &= ~_BV(BL1); + BL_PORT |= _BV(BL0); + BL_PORT |= _BV(BL1); +#else + BL_DDR &= ~_BV(BL); + BL_PORT |= _BV(BL); +#endif + + +#ifdef __AVR_ATmega128__ + /* check which UART should be used for booting */ + if(bit_is_clear(BL_PIN, BL0)) { + bootuart = 1; + } + else if(bit_is_clear(BL_PIN, BL1)) { + bootuart = 2; + } +#endif + + /* check if flash is programmed already, if not start bootloader anyway */ + if(pgm_read_byte_near(0x0000) != 0xFF) { + +#ifdef __AVR_ATmega128__ + /* no UART was selected, start application */ + if(!bootuart) { + app_start(); + } +#else + /* check if bootloader pin is set low */ + /* we don't start this part neither for the m8, nor m168 */ + //if(bit_is_set(BL_PIN, BL)) { + // app_start(); + // } +#endif + } + +#ifdef __AVR_ATmega128__ + /* no bootuart was selected, default to uart 0 */ + if(!bootuart) { + bootuart = 1; + } +#endif + + + /* initialize UART(s) depending on CPU defined */ +#ifdef __AVR_ATmega128__ + if(bootuart == 1) { + UBRR0L = (uint8_t)(F_CPU/(BAUD_RATE*16L)-1); + UBRR0H = (F_CPU/(BAUD_RATE*16L)-1) >> 8; + UCSR0A = 0x00; + UCSR0C = 0x06; + UCSR0B = _BV(TXEN0)|_BV(RXEN0); + } + if(bootuart == 2) { + UBRR1L = (uint8_t)(F_CPU/(BAUD_RATE*16L)-1); + UBRR1H = (F_CPU/(BAUD_RATE*16L)-1) >> 8; + UCSR1A = 0x00; + UCSR1C = 0x06; + UCSR1B = _BV(TXEN1)|_BV(RXEN1); + } +#elif defined __AVR_ATmega163__ + UBRR = (uint8_t)(F_CPU/(BAUD_RATE*16L)-1); + UBRRHI = (F_CPU/(BAUD_RATE*16L)-1) >> 8; + UCSRA = 0x00; + UCSRB = _BV(TXEN)|_BV(RXEN); +#elif defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) || defined(__AVR_ATmega328__) + + UBRR0H = ((F_CPU / 16 + BAUD_RATE / 2) / BAUD_RATE - 1) >> 8; + UBRR0L = ((F_CPU / 16 + BAUD_RATE / 2) / BAUD_RATE - 1); + + + //UBRR0L = (uint8_t)(F_CPU/(BAUD_RATE*16L)-1); + //UBRR0H = (F_CPU/(BAUD_RATE*16L)-1) >> 8; + UCSR0B = (1<>8; // set baud rate + UBRRL = (((F_CPU/BAUD_RATE)/16)-1); + UCSRB = (1<> 8; + UCSRA = 0x00; + UCSRC = 0x06; + UCSRB = _BV(TXEN)|_BV(RXEN); +#endif + + /* set LED pin as output */ + LED_DDR |= _BV(LED); + + + + set_output(DDRD,PIND7); + high(PORTD,PD7); + for (i = 0; i < 16; i++) { + + _delay_loop_2(0); + } + + + low(PORTD,PD7); + + + /* flash onboard LED to signal entering of bootloader */ +#ifdef __AVR_ATmega128__ + // 4x for UART0, 5x for UART1 + flash_led(3 + bootuart); +#else + flash_led(3); +#endif + + /* 20050803: by DojoCorp, this is one of the parts provoking the + system to stop listening, cancelled from the original */ + //putch('\0'); + + + //message("SET BT PAGEMODE 3 2000 1"); +putch('S'); +putch('E'); +putch('T'); +putch(' '); +putch('B'); +putch('T'); +putch(' '); +putch('P'); +putch('A'); +putch('G'); +putch('E'); +putch('M'); +putch('O'); +putch('D'); +putch('E'); +putch(' '); +putch('3'); +putch(' '); +putch('2'); +putch('0'); +putch('0'); +putch('0'); +putch(' '); +putch('1'); +putch(0x0D); + + + //put_s("SET BT ROLE 0 f 7d00"); + putch('S'); + putch('E'); + putch('T'); + putch(' '); + putch('B'); + putch('T'); + putch(' '); + putch('R'); + putch('O'); + putch('L'); + putch('E'); + putch(' '); + putch('0'); + putch(' '); + putch('f'); + putch(' '); + putch('7'); + putch('d'); + putch('0'); + putch('0'); + putch(0x0D); + + + + + + + /* forever loop */ + for (;;) { + + /* get character from UART */ + ch = getch(); + + /* A bunch of if...else if... gives smaller code than switch...case ! */ + + /* Hello is anyone home ? */ + if(ch=='0') { + nothing_response(); + } + + + /* Request programmer ID */ + /* Not using PROGMEM string due to boot block in m128 being beyond 64kB boundry */ + /* Would need to selectively manipulate RAMPZ, and it's only 9 characters anyway so who cares. */ + else if(ch=='1') { + if (getch() == ' ') { + putch(0x14); + putch('A'); + putch('V'); + putch('R'); + putch(' '); + putch('I'); + putch('S'); + putch('P'); + putch(0x10); + } + } + + + /* AVR ISP/STK500 board commands DON'T CARE so default nothing_response */ + else if(ch=='@') { + ch2 = getch(); + if (ch2>0x85) getch(); + nothing_response(); + } + + + /* AVR ISP/STK500 board requests */ + else if(ch=='A') { + ch2 = getch(); + if(ch2==0x80) byte_response(HW_VER); // Hardware version + else if(ch2==0x81) byte_response(SW_MAJOR); // Software major version + else if(ch2==0x82) byte_response(SW_MINOR); // Software minor version + else if(ch2==0x98) byte_response(0x03); // Unknown but seems to be required by avr studio 3.56 + else byte_response(0x00); // Covers various unnecessary responses we don't care about + } + + + /* Device Parameters DON'T CARE, DEVICE IS FIXED */ + else if(ch=='B') { + getNch(20); + nothing_response(); + } + + + /* Parallel programming stuff DON'T CARE */ + else if(ch=='E') { + getNch(5); + nothing_response(); + } + + + /* Enter programming mode */ + else if(ch=='P') { + nothing_response(); + } + + + /* Leave programming mode */ + else if(ch=='Q') { + nothing_response(); + } + + + /* Erase device, don't care as we will erase one page at a time anyway. */ + else if(ch=='R') { + nothing_response(); + } + + + /* Set address, little endian. EEPROM in bytes, FLASH in words */ + /* Perhaps extra address bytes may be added in future to support > 128kB FLASH. */ + /* This might explain why little endian was used here, big endian used everywhere else. */ + else if(ch=='U') { + address.byte[0] = getch(); + address.byte[1] = getch(); + nothing_response(); + } + + + /* Universal SPI programming command, disabled. Would be used for fuses and lock bits. */ + else if(ch=='V') { + getNch(4); + byte_response(0x00); + } + + + /* Write memory, length is big endian and is in bytes */ + else if(ch=='d') { + length.byte[1] = getch(); + length.byte[0] = getch(); + flags.eeprom = 0; + if (getch() == 'E') flags.eeprom = 1; + for (w=0;w127) address_high = 0x01; //Only possible with m128, m256 will need 3rd address byte. FIXME + else address_high = 0x00; +#ifdef __AVR_ATmega128__ + RAMPZ = address_high; +#endif + address.word = address.word << 1; //address * 2 -> byte location + /* if ((length.byte[0] & 0x01) == 0x01) length.word++; //Even up an odd number of bytes */ + if ((length.byte[0] & 0x01)) length.word++; //Even up an odd number of bytes + cli(); //Disable interrupts, just to be sure + // HACKME: EEPE used to be EEWE + while(bit_is_set(EECR,EEPE)); //Wait for previous EEPROM writes to complete + asm volatile( + "clr r17 \n\t" //page_word_count + "lds r30,address \n\t" //Address of FLASH location (in bytes) + "lds r31,address+1 \n\t" + "ldi r28,lo8(buff) \n\t" //Start of buffer array in RAM + "ldi r29,hi8(buff) \n\t" + "lds r24,length \n\t" //Length of data to be written (in bytes) + "lds r25,length+1 \n\t" + "length_loop: \n\t" //Main loop, repeat for number of words in block + "cpi r17,0x00 \n\t" //If page_word_count=0 then erase page + "brne no_page_erase \n\t" + "wait_spm1: \n\t" + "lds r16,%0 \n\t" //Wait for previous spm to complete + "andi r16,1 \n\t" + "cpi r16,1 \n\t" + "breq wait_spm1 \n\t" + "ldi r16,0x03 \n\t" //Erase page pointed to by Z + "sts %0,r16 \n\t" + "spm \n\t" +#ifdef __AVR_ATmega163__ + ".word 0xFFFF \n\t" + "nop \n\t" +#endif + "wait_spm2: \n\t" + "lds r16,%0 \n\t" //Wait for previous spm to complete + "andi r16,1 \n\t" + "cpi r16,1 \n\t" + "breq wait_spm2 \n\t" + + "ldi r16,0x11 \n\t" //Re-enable RWW section + "sts %0,r16 \n\t" + "spm \n\t" +#ifdef __AVR_ATmega163__ + ".word 0xFFFF \n\t" + "nop \n\t" +#endif + "no_page_erase: \n\t" + "ld r0,Y+ \n\t" //Write 2 bytes into page buffer + "ld r1,Y+ \n\t" + + "wait_spm3: \n\t" + "lds r16,%0 \n\t" //Wait for previous spm to complete + "andi r16,1 \n\t" + "cpi r16,1 \n\t" + "breq wait_spm3 \n\t" + "ldi r16,0x01 \n\t" //Load r0,r1 into FLASH page buffer + "sts %0,r16 \n\t" + "spm \n\t" + + "inc r17 \n\t" //page_word_count++ + "cpi r17,%1 \n\t" + "brlo same_page \n\t" //Still same page in FLASH + "write_page: \n\t" + "clr r17 \n\t" //New page, write current one first + "wait_spm4: \n\t" + "lds r16,%0 \n\t" //Wait for previous spm to complete + "andi r16,1 \n\t" + "cpi r16,1 \n\t" + "breq wait_spm4 \n\t" +#ifdef __AVR_ATmega163__ + "andi r30,0x80 \n\t" // m163 requires Z6:Z1 to be zero during page write +#endif + "ldi r16,0x05 \n\t" //Write page pointed to by Z + "sts %0,r16 \n\t" + "spm \n\t" +#ifdef __AVR_ATmega163__ + ".word 0xFFFF \n\t" + "nop \n\t" + "ori r30,0x7E \n\t" // recover Z6:Z1 state after page write (had to be zero during write) +#endif + "wait_spm5: \n\t" + "lds r16,%0 \n\t" //Wait for previous spm to complete + "andi r16,1 \n\t" + "cpi r16,1 \n\t" + "breq wait_spm5 \n\t" + "ldi r16,0x11 \n\t" //Re-enable RWW section + "sts %0,r16 \n\t" + "spm \n\t" +#ifdef __AVR_ATmega163__ + ".word 0xFFFF \n\t" + "nop \n\t" +#endif + "same_page: \n\t" + "adiw r30,2 \n\t" //Next word in FLASH + "sbiw r24,2 \n\t" //length-2 + "breq final_write \n\t" //Finished + "rjmp length_loop \n\t" + "final_write: \n\t" + "cpi r17,0 \n\t" + "breq block_done \n\t" + "adiw r24,2 \n\t" //length+2, fool above check on length after short page write + "rjmp write_page \n\t" + "block_done: \n\t" + "clr __zero_reg__ \n\t" //restore zero register +#if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) || defined(__AVR_ATmega_328__) + : "=m" (SPMCSR) : "M" (PAGE_SIZE) : "r0","r16","r17","r24","r25","r28","r29","r30","r31" +#else + : "=m" (SPMCR) : "M" (PAGE_SIZE) : "r0","r16","r17","r24","r25","r28","r29","r30","r31" +#endif + ); + /* Should really add a wait for RWW section to be enabled, don't actually need it since we never */ + /* exit the bootloader without a power cycle anyhow */ + } + putch(0x14); + putch(0x10); + } + } + + + /* Read memory block mode, length is big endian. */ + else if(ch=='t') { + length.byte[1] = getch(); + length.byte[0] = getch(); +#if defined __AVR_ATmega128__ + if (address.word>0x7FFF) flags.rampz = 1; // No go with m256, FIXME + else flags.rampz = 0; +#endif + if (getch() == 'E') flags.eeprom = 1; + else { + flags.eeprom = 0; + address.word = address.word << 1; // address * 2 -> byte location + } + if (getch() == ' ') { // Command terminator + putch(0x14); + for (w=0;w < length.word;w++) { // Can handle odd and even lengths okay + if (flags.eeprom) { // Byte access EEPROM read +#if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) || defined(__AVR_ATmega328__) + while(EECR & (1<= 'a') { + ah = ah - 'a' + 0x0a; + } else if(ah >= '0') { + ah -= '0'; + } + if(al >= 'a') { + al = al - 'a' + 0x0a; + } else if(al >= '0') { + al -= '0'; + } + return (ah << 4) + al; +} + + +void puthex(char ch) { + char ah,al; + + ah = (ch & 0xf0) >> 4; + if(ah >= 0x0a) { + ah = ah - 0x0a + 'a'; + } else { + ah += '0'; + } + al = (ch & 0x0f); + if(al >= 0x0a) { + al = al - 0x0a + 'a'; + } else { + al += '0'; + } + putch(ah); + putch(al); +} + + +void putch(char ch) +{ +#ifdef __AVR_ATmega128__ + if(bootuart == 1) { + while (!(UCSR0A & _BV(UDRE0))); + UDR0 = ch; + } + else if (bootuart == 2) { + while (!(UCSR1A & _BV(UDRE1))); + UDR1 = ch; + } +#elif defined (__AVR_ATmega168__) || defined(__AVR_ATmega328P__) || defined(__AVR_ATmega328__) + while (!(UCSR0A & _BV(UDRE0))); + UDR0 = ch; +#else + /* m8,16,32,169,8515,8535,163 */ + while (!(UCSRA & _BV(UDRE))); + UDR = ch; +#endif +} + + +char getch(void) +{ +#ifdef __AVR_ATmega128__ + if(bootuart == 1) { + while(!(UCSR0A & _BV(RXC0))); + return UDR0; + } + else if(bootuart == 2) { + while(!(UCSR1A & _BV(RXC1))); + return UDR1; + } + return 0; +#elif defined (__AVR_ATmega168__) || defined(__AVR_ATmega328P__) || defined(__AVR_ATmega328__) + uint32_t count = 0; + while(!(UCSR0A & _BV(RXC0))){ + /* 20060803 DojoCorp:: Addon coming from the previous Bootloader*/ + /* HACKME:: here is a good place to count times*/ + count++; + if (count > MAX_TIME_COUNT) + app_start(); + } + return UDR0; +#else + /* m8,16,32,169,8515,8535,163 */ + uint32_t count = 0; + while(!(UCSRA & _BV(RXC))){ + /* 20060803 DojoCorp:: Addon coming from the previous Bootloader*/ + /* HACKME:: here is a good place to count times*/ + count++; + if (count > MAX_TIME_COUNT) + app_start(); + } + return UDR; +#endif +} + + +void getNch(uint8_t count) +{ + uint8_t i; + for(i=0;i $@ + +%.hex: %.elf + $(OBJCOPY) -j .text -j .data -O ihex $< $@ + +%.srec: %.elf + $(OBJCOPY) -j .text -j .data -O srec $< $@ + +%.bin: %.elf + $(OBJCOPY) -j .text -j .data -O binary $< $@ + diff --git a/external/arduino/avr/bootloaders/caterina-Arduino_Robot/Caterina-Robot-Control.hex b/external/arduino/avr/bootloaders/caterina-Arduino_Robot/Caterina-Robot-Control.hex new file mode 100644 index 000000000..ec7355b73 --- /dev/null +++ b/external/arduino/avr/bootloaders/caterina-Arduino_Robot/Caterina-Robot-Control.hex @@ -0,0 +1,258 @@ +:1070000055C000006EC000006CC000006AC00000E7 +:1070100068C0000066C0000064C0000062C00000DC +:1070200060C000005EC00000FCC400005AC0000048 +:1070300058C0000056C0000054C0000052C00000FC +:1070400050C000005DC000004CC000004AC00000FD +:1070500048C0000046C0000044C0000042C000001C +:1070600040C000003EC000003CC000003AC000002C +:1070700038C0000036C0000034C0000032C000003C +:1070800030C000002EC000002CC000002AC000004C +:1070900028C0000026C0000024C0000022C000005C +:1070A00020C000001EC000001CC0000011241FBE34 +:1070B000CFEFDAE0DEBFCDBF11E0A0E0B1E0E6E463 +:1070C000FFE702C005900D92AC3AB107D9F711E085 +:1070D000ACEAB1E001C01D92A53CB107E1F74FD386 +:1070E00030C78ECFF89410926F001092810081E02B +:1070F00085BF15BE47985D9A289A0C9400000895A4 +:107100001F920F920FB60F9211242F938F939F937C +:10711000EF93FF9310928500109284008091AC0150 +:107120009091AD01009741F001979093AD0180934C +:10713000AC01892B09F45D9A8091AE019091AF0169 +:10714000009741F001979093AF018093AE01892B96 +:1071500009F4289A8091B2019091B301019690931D +:10716000B3018093B201E0E0F0E0859194918F5FEC +:107170009F4F49F08091B0019091B1010196909399 +:10718000B1018093B001FF91EF919F918F912F9169 +:107190000F900FBE0F901F90189584E08093E90028 +:1071A0000DC08091E8008B778093E80003C08EB318 +:1071B000882351F08091E80082FFF9CF8091E800A8 +:1071C00085FFEFCF8091F1000895982F83E08093A1 +:1071D000E9008091E80085FD0DC08091E8008E7780 +:1071E0008093E80003C08EB3882369F08091E800A3 +:1071F00080FFF9CF9093F1005D9884E690E0909342 +:10720000AD018093AC0108954F925F926F927F928F +:107210008F929F92AF92BF92CF92DF92EF92FF92A6 +:107220000F931F93CF93DF9384E08093E9008091C5 +:10723000E80082FF57C2289884E690E09093AF015F +:107240008093AE01AADF182F853481F48CE49DE190 +:107250009093B1018093B00107B600FCFDCFF9997E +:10726000FECF81E180935700E89503C0843519F47F +:1072700094DF8DE00DC28C34E1F38035D1F3843797 +:1072800021F484E4A2DF80E003C2813611F489E5B1 +:10729000FFC18134B1F481DF182F7FDF90E0880FC8 +:1072A000991FAA2797FDA095BA2F312F330F20E001 +:1072B000442737FD4095542F822B932BA42BB52BBD +:1072C000B8C1803711F483E5E3C1833549F4C0E0E8 +:1072D000D1E089917ADF21E0C730D207D1F7D9C157 +:1072E000863521F481E371DF80E3D2C1833731F445 +:1072F00087E86BDF85E969DF8EE1CAC18536B9F4BD +:10730000E0E0F0E093E085E090935700E89507B661 +:1073100000FCFDCF80935700E89507B600FCFDCF39 +:10732000E058FF4FA0E7E030FA0771F7A2CF8237AD +:1073300039F4E1E0F0E089E0809357008491A8C13E +:10734000863439F4E0E0F0E089E0809357008491DE +:107350009FC18E3439F4E3E0F0E089E08093570078 +:10736000849196C1813539F4E2E0F0E089E08093C0 +:10737000570084918DC1823631F489E526DF80E0A3 +:1073800024DF80E885C1823419F0873609F0E5C032 +:107390001092B1011092B00100DF082FFEDEF82E2E +:1073A000FCDE682E8554823008F071C1902F80E099 +:1073B000CF2DD0E0C82BD92B10926F00173609F0D3 +:1073C0004BC081E180935700E895DD24CC24C39421 +:1073D0003FC0E090B501F090B6010091B701109167 +:1073E000B801B6E46B16D9F4ED2DF0E0EE29FF29D3 +:1073F000E4918E2FEADEDD2081F082E090E0A0E0D3 +:10740000B0E0E80EF91E0A1F1B1FE092B501F092D2 +:10741000B6010093B7011093B801DC2418C0D8015D +:10742000C701B695A7959795879575D5CEDE82E06D +:1074300090E0A0E0B0E0E80EF91E0A1F1B1FE092EA +:10744000B501F092B6010093B7011093B8012197EE +:10745000209709F0BECF7DC08090B5019090B60115 +:10746000A090B701B090B80196E4691609F05DC02C +:1074700083E0F40180935700E89507B600FCFDCF48 +:1074800054C0F6E46F1661F5772031F1E090B50154 +:10749000F090B6010091B7011091B8017EDED82EB0 +:1074A000CC24852D90E08C299D29F7010C01409278 +:1074B0005700E895112482E090E0A0E0B0E0E80EEB +:1074C000F91E0A1F1B1FE092B501F092B60100934E +:1074D000B7011093B80102C060DE582E742423C097 +:1074E000E090B501F090B6010091B7011091B8019C +:1074F00016950795F794E79450DE682FC70113D5CA +:107500008091B5019091B601A091B701B091B801F9 +:107510000296A11DB11D8093B5019093B601A09371 +:10752000B701B093B801219704C0552477244424AF +:107530004394209709F0A5CF96E4691641F485E0BD +:10754000F40180935700E89507B600FCFDCF8DE06D +:107550003CDE82E080936F009CC0833471F4009124 +:10756000B5011091B60119DE90E021E0F8010C019F +:1075700020935700E89511247CCE833619F5E090CE +:10758000B501F090B6010091B7011091B80105DE88 +:10759000F701E16090E021E00C0120935700E895AD +:1075A000112482E090E0A0E0B0E0E80EF91E0A1F8E +:1075B0001B1FE092B501F092B6010093B701109342 +:1075C000B80157CE8D3661F4E091B501F091B60166 +:1075D00085E080935700E89507B600FCFDCF49CEC3 +:1075E000823551F4E091B501F091B6010591149105 +:1075F000812FEBDD802F4CC0843421F5E090B50164 +:10760000F090B6010091B7011091B8011695079559 +:10761000F794E794C2DD682FC70185D48091B50146 +:107620009091B601A091B701B091B8010296A11D49 +:10763000B11D8093B5019093B601A093B701B093AB +:10764000B80117CE843609F5E090B501F090B60187 +:107650000091B7011091B801D801C701B695A7955F +:107660009795879558D4B1DD82E090E0A0E0B0E036 +:10767000E80EF91E0A1F1B1FE092B501F092B60139 +:107680000093B7011093B80104C08B3111F08FE360 +:107690009CDD83E08093E9009091E8008091E80010 +:1076A0008E778093E80095FF04C010C08EB38823C6 +:1076B000C9F08091E80080FFF9CF8091E8008E77D3 +:1076C0008093E80003C08EB3882361F08091E800C6 +:1076D00080FFF9CF84E08093E9008091E8008B7708 +:1076E0008093E800DF91CF911F910F91FF90EF9071 +:1076F000DF90CF90BF90AF909F908F907F906F90D2 +:107700005F904F9008959091BD01892F8F778132BE +:1077100049F58091BE018032A1F0813219F5913A8C +:1077200009F58091E800877F8093E8008CE091E084 +:1077300067E070E027D28091E8008B778093E800C3 +:107740000895913279F48091E800877F8093E80072 +:107750008CE091E067E070E079D28091E8008E776C +:107760008093E800089582E061EC42E0D1D083E0AC +:1077700061E842E1CDD084E060E842E1C9C01F93F6 +:10778000209100081092000844B714BE88E10FB69B +:10779000F89480936000109260000FBE80E8E0E0F3 +:1077A000F0E00FB6F89480936100E09361000FBEA3 +:1077B00031E035BF92E095BF3F9A209A559A809369 +:1077C00061001092610047985D9A289A1092890092 +:1077D0008AEF8093880090936F0083E0809381000C +:1077E000859194918F5F9F4F11F03093B401942F46 +:1077F00041FF19C0809109012817A9F08093000862 +:10780000789480911301882339F08091B20190918E +:10781000B3018F5E9240C8F310920008F89481E0A3 +:10782000809313010CC090FF04C08091B4018823A1 +:1078300051F493FF09C080910901281729F0809124 +:10784000B401882309F04EDCD4D078941092B101B1 +:107850001092B0011EEF20C0D7DC4BD38091B00155 +:107860009091B10181549F4110F0109213018091C9 +:10787000B9019091BA0101969093BA018093B90130 +:10788000292F97FF03C0512F591B252F220F28178F +:1078900010F4479801C0479A809113018823E1F6BC +:1078A0008091E00081608093E0001CDC80E090E04B +:1078B0001F910895FA01923049F0933061F09130B0 +:1078C000F9F484E191E022E130E01EC086E291E02B +:1078D0002EE330E019C0882329F484E691E024E007 +:1078E00030E012C0813029F488E691E028E230E0EF +:1078F0000BC0823029F482E991E028E130E004C035 +:1079000080E090E020E030E091838083C901089519 +:107910008093E9008091EB0081608093EB001092EE +:10792000ED006093EC004093ED008091EE00881F25 +:107930008827881F08958091BD0188238CF403C097 +:107940008EB38823B1F08091E80082FFF9CF809157 +:10795000E8008B778093E80008958EB3882349F080 +:107960008091E80080FFF9CF8091E8008E778093C6 +:10797000E8000895EF92FF920F931F9345D04CD0EB +:1079800008ED10E0F80180818F7780838081806826 +:10799000808380818F7D808319BC1EBA1092BB01C9 +:1079A00080EEE82EF12CF70180818B7F8083F80137 +:1079B00080818160808380E060E042E0A9DFE1EEC9 +:1079C000F0E080818E7F8083E2EEF0E08081816054 +:1079D0008083808188608083F70180818E7F8083AF +:1079E000F8018081806180831F910F91FF90EF905B +:1079F0000895E7EDF0E08081816080838AE482BFB2 +:107A000081E08093BC01B6CFE8EDF0E080818E7F0D +:107A100080831092E20008951092DA001092E10043 +:107A200008951F920F920FB60F9211242F933F9338 +:107A30004F935F936F937F938F939F93AF93BF9376 +:107A4000EF93FF938091DA0080FF1BC08091D800F4 +:107A500080FF17C08091DA008E7F8093DA008091DA +:107A6000D90080FF0BC080E189BD82E189BD09B4E6 +:107A700000FEFDCF81E08EBB3BD203C019BC1EBA15 +:107A800037D28091E10080FF17C08091E20080FF33 +:107A900013C08091E2008E7F8093E2008091E2002B +:107AA00080618093E2008091D80080628093D8004A +:107AB00019BC85E08EBB1CD28091E10084FF2CC0F4 +:107AC0008091E20084FF28C080E189BD82E189BD08 +:107AD00009B400FEFDCF8091D8008F7D8093D8003F +:107AE0008091E1008F7E8093E1008091E2008F7EA3 +:107AF0008093E2008091E20081608093E2008091B7 +:107B0000BB01882331F48091E30087FD02C081E04E +:107B100001C084E08EBBECD18091E10083FF21C0E5 +:107B20008091E20083FF1DC08091E100877F8093F8 +:107B3000E10082E08EBB1092BB018091E1008E7F5C +:107B40008093E1008091E2008E7F8093E20080913B +:107B5000E20080618093E20080E060E042E0D8DEF5 +:107B6000C7D1FF91EF91BF91AF919F918F917F917D +:107B70006F915F914F913F912F910F900FBE0F909A +:107B80001F9018959C014091C3015091C401461764 +:107B9000570718F4F90190E044C06115710511F020 +:107BA000AB01F8CF8091E8008E778093E80040E049 +:107BB00050E0F0CF8EB3882309F444C0853009F437 +:107BC00043C08091E80083FF02C081E00895809166 +:107BD000E80082FD31C08091E80080FF22C08091E2 +:107BE000F3009091F200782F60E0292F30E0262BEF +:107BF000372B07C081918093F100415050402F5F97 +:107C00003F4F4115510519F02830310598F390E0A8 +:107C10002830310509F491E08091E8008E77809357 +:107C2000E8004115510531F6992321F605C08EB3C0 +:107C3000882341F0853041F08091E80082FFF7CF42 +:107C400080E0089582E0089583E008959C01611525 +:107C5000710529F48091E8008B778093E800F901A1 +:107C600026C08EB3882391F1853091F18091E80090 +:107C700083FF02C081E008958091E80082FFF1CF88 +:107C800006C08091F10081936150704059F02091BD +:107C9000F3008091F200322F20E090E0822B932BB2 +:107CA000892B79F78091E8008B778093E800611544 +:107CB0007105B9F605C08EB3882341F0853041F0D7 +:107CC0008091E80080FFF7CF80E0089582E008957A +:107CD00083E008950F931F93DF93CF9300D0CDB728 +:107CE000DEB7EDEBF1E08091F100819381E0E53CBE +:107CF000F807C9F708DD8091E80083FFE4C08091B0 +:107D0000BD019091BE01953009F46DC0963040F4EC +:107D1000913081F1913070F0933009F0D4C02AC0D5 +:107D2000983009F4A3C0993009F4B2C0963009F034 +:107D3000CAC07CC0803809F4C6C0823809F0C3C00C +:107D40008091C10187708093E9008091EB001092CF +:107D5000E9002091E800277F2093E80090E025E0EB +:107D6000969587952A95E1F781708093F10010929E +:107D7000F10087C0882319F0823009F0A4C08F7108 +:107D8000823009F0A0C08091BF01882331F5209195 +:107D9000C101277009F497C02093E9008091EB009E +:107DA00080FF1BC0933021F48091EB00806213C0F0 +:107DB0008091EB0080618093EB0081E090E002C055 +:107DC000880F991F2A95E2F78093EA001092EA0043 +:107DD0008091EB0088608093EB001092E900809125 +:107DE000E800877F51C0882309F06DC01091BF0162 +:107DF0001F770FB7F8948091E800877F8093E800A1 +:107E00009ADD8091E80080FFFCCF8091E3008078CC +:107E1000812B8093E30080688093E300112311F4A9 +:107E200082E001C083E08EBB0FBF4DC0805882301E +:107E300008F049C08091BF019091C0016091C101DB +:107E4000AE014F5F5F4F36DDBC01009709F43BC0C8 +:107E50008091E800877F8093E80089819A8192DE93 +:107E60008091E8008B778093E8002DC0803859F529 +:107E70008091E800877F8093E8008091BB01809328 +:107E8000F1008091E8008E778093E80054DD1BC0FC +:107E90008823C9F49091BF019230A8F48091E80042 +:107EA000877F8093E8009093BB0145DD8091BB0103 +:107EB000882331F48091E30087FD02C081E001C096 +:107EC00084E08EBB50DC8091E80083FF0AC0809183 +:107ED000EB0080628093EB008091E800877F8093C5 +:107EE000E8000F900F90CF91DF911F910F910895AF +:107EF00008951F938EB3882361F01091E9001092CA +:107F0000E9008091E80083FF01C0E4DE1770109360 +:107F1000E9001F910895F999FECF92BD81BDF89AAD +:107F2000992780B50895262FF999FECF1FBA92BDE3 +:107F300081BD20BD0FB6F894FA9AF99A0FBE01964A +:067F40000895F894FFCF44 +:107F46004341544552494E41007700080000000065 +:107F56000000080112011001020000084123390047 +:107F660001000201000109023E00020100803209FF +:107F7600040000010202010005240010010424028D +:107F8600040524060001070582030800FF09040111 +:107F960000020A000000070504021000010705831D +:107FA6000210000104030904280352006F00620056 +:107FB6006F00740020004D006F0074006F007200A7 +:107FC600200042006F006100720064002000200063 +:107FD60000001803410072006400750069006E001D +:0C7FE6006F0020004C004C004300000025 +:040000030000700089 +:00000001FF diff --git a/external/arduino/avr/bootloaders/caterina-Arduino_Robot/Caterina-Robot-Motor.hex b/external/arduino/avr/bootloaders/caterina-Arduino_Robot/Caterina-Robot-Motor.hex new file mode 100644 index 000000000..2e6d22147 --- /dev/null +++ b/external/arduino/avr/bootloaders/caterina-Arduino_Robot/Caterina-Robot-Motor.hex @@ -0,0 +1,258 @@ +:1070000055C000006EC000006CC000006AC00000E7 +:1070100068C0000066C0000064C0000062C00000DC +:1070200060C000005EC00000FCC400005AC0000048 +:1070300058C0000056C0000054C0000052C00000FC +:1070400050C000005DC000004CC000004AC00000FD +:1070500048C0000046C0000044C0000042C000001C +:1070600040C000003EC000003CC000003AC000002C +:1070700038C0000036C0000034C0000032C000003C +:1070800030C000002EC000002CC000002AC000004C +:1070900028C0000026C0000024C0000022C000005C +:1070A00020C000001EC000001CC0000011241FBE34 +:1070B000CFEFDAE0DEBFCDBF11E0A0E0B1E0E6E463 +:1070C000FFE702C005900D92AC3AB107D9F711E085 +:1070D000ACEAB1E001C01D92A53CB107E1F74FD386 +:1070E00030C78ECFF89410926F001092810081E02B +:1070F00085BF15BE47985D9A289A0C9400000895A4 +:107100001F920F920FB60F9211242F938F939F937C +:10711000EF93FF9310928500109284008091AC0150 +:107120009091AD01009741F001979093AD0180934C +:10713000AC01892B09F45D9A8091AE019091AF0169 +:10714000009741F001979093AF018093AE01892B96 +:1071500009F4289A8091B2019091B301019690931D +:10716000B3018093B201E0E0F0E0859194918F5FEC +:107170009F4F49F08091B0019091B1010196909399 +:10718000B1018093B001FF91EF919F918F912F9169 +:107190000F900FBE0F901F90189584E08093E90028 +:1071A0000DC08091E8008B778093E80003C08EB318 +:1071B000882351F08091E80082FFF9CF8091E800A8 +:1071C00085FFEFCF8091F1000895982F83E08093A1 +:1071D000E9008091E80085FD0DC08091E8008E7780 +:1071E0008093E80003C08EB3882369F08091E800A3 +:1071F00080FFF9CF9093F1005D9884E690E0909342 +:10720000AD018093AC0108954F925F926F927F928F +:107210008F929F92AF92BF92CF92DF92EF92FF92A6 +:107220000F931F93CF93DF9384E08093E9008091C5 +:10723000E80082FF57C2289884E690E09093AF015F +:107240008093AE01AADF182F853481F48CE49DE190 +:107250009093B1018093B00107B600FCFDCFF9997E +:10726000FECF81E180935700E89503C0843519F47F +:1072700094DF8DE00DC28C34E1F38035D1F3843797 +:1072800021F484E4A2DF80E003C2813611F489E5B1 +:10729000FFC18134B1F481DF182F7FDF90E0880FC8 +:1072A000991FAA2797FDA095BA2F312F330F20E001 +:1072B000442737FD4095542F822B932BA42BB52BBD +:1072C000B8C1803711F483E5E3C1833549F4C0E0E8 +:1072D000D1E089917ADF21E0C730D207D1F7D9C157 +:1072E000863521F481E371DF80E3D2C1833731F445 +:1072F00087E86BDF85E969DF8EE1CAC18536B9F4BD +:10730000E0E0F0E093E085E090935700E89507B661 +:1073100000FCFDCF80935700E89507B600FCFDCF39 +:10732000E058FF4FA0E7E030FA0771F7A2CF8237AD +:1073300039F4E1E0F0E089E0809357008491A8C13E +:10734000863439F4E0E0F0E089E0809357008491DE +:107350009FC18E3439F4E3E0F0E089E08093570078 +:10736000849196C1813539F4E2E0F0E089E08093C0 +:10737000570084918DC1823631F489E526DF80E0A3 +:1073800024DF80E885C1823419F0873609F0E5C032 +:107390001092B1011092B00100DF082FFEDEF82E2E +:1073A000FCDE682E8554823008F071C1902F80E099 +:1073B000CF2DD0E0C82BD92B10926F00173609F0D3 +:1073C0004BC081E180935700E895DD24CC24C39421 +:1073D0003FC0E090B501F090B6010091B701109167 +:1073E000B801B6E46B16D9F4ED2DF0E0EE29FF29D3 +:1073F000E4918E2FEADEDD2081F082E090E0A0E0D3 +:10740000B0E0E80EF91E0A1F1B1FE092B501F092D2 +:10741000B6010093B7011093B801DC2418C0D8015D +:10742000C701B695A7959795879575D5CEDE82E06D +:1074300090E0A0E0B0E0E80EF91E0A1F1B1FE092EA +:10744000B501F092B6010093B7011093B8012197EE +:10745000209709F0BECF7DC08090B5019090B60115 +:10746000A090B701B090B80196E4691609F05DC02C +:1074700083E0F40180935700E89507B600FCFDCF48 +:1074800054C0F6E46F1661F5772031F1E090B50154 +:10749000F090B6010091B7011091B8017EDED82EB0 +:1074A000CC24852D90E08C299D29F7010C01409278 +:1074B0005700E895112482E090E0A0E0B0E0E80EEB +:1074C000F91E0A1F1B1FE092B501F092B60100934E +:1074D000B7011093B80102C060DE582E742423C097 +:1074E000E090B501F090B6010091B7011091B8019C +:1074F00016950795F794E79450DE682FC70113D5CA +:107500008091B5019091B601A091B701B091B801F9 +:107510000296A11DB11D8093B5019093B601A09371 +:10752000B701B093B801219704C0552477244424AF +:107530004394209709F0A5CF96E4691641F485E0BD +:10754000F40180935700E89507B600FCFDCF8DE06D +:107550003CDE82E080936F009CC0833471F4009124 +:10756000B5011091B60119DE90E021E0F8010C019F +:1075700020935700E89511247CCE833619F5E090CE +:10758000B501F090B6010091B7011091B80105DE88 +:10759000F701E16090E021E00C0120935700E895AD +:1075A000112482E090E0A0E0B0E0E80EF91E0A1F8E +:1075B0001B1FE092B501F092B6010093B701109342 +:1075C000B80157CE8D3661F4E091B501F091B60166 +:1075D00085E080935700E89507B600FCFDCF49CEC3 +:1075E000823551F4E091B501F091B6010591149105 +:1075F000812FEBDD802F4CC0843421F5E090B50164 +:10760000F090B6010091B7011091B8011695079559 +:10761000F794E794C2DD682FC70185D48091B50146 +:107620009091B601A091B701B091B8010296A11D49 +:10763000B11D8093B5019093B601A093B701B093AB +:10764000B80117CE843609F5E090B501F090B60187 +:107650000091B7011091B801D801C701B695A7955F +:107660009795879558D4B1DD82E090E0A0E0B0E036 +:10767000E80EF91E0A1F1B1FE092B501F092B60139 +:107680000093B7011093B80104C08B3111F08FE360 +:107690009CDD83E08093E9009091E8008091E80010 +:1076A0008E778093E80095FF04C010C08EB38823C6 +:1076B000C9F08091E80080FFF9CF8091E8008E77D3 +:1076C0008093E80003C08EB3882361F08091E800C6 +:1076D00080FFF9CF84E08093E9008091E8008B7708 +:1076E0008093E800DF91CF911F910F91FF90EF9071 +:1076F000DF90CF90BF90AF909F908F907F906F90D2 +:107700005F904F9008959091BD01892F8F778132BE +:1077100049F58091BE018032A1F0813219F5913A8C +:1077200009F58091E800877F8093E8008CE091E084 +:1077300067E070E027D28091E8008B778093E800C3 +:107740000895913279F48091E800877F8093E80072 +:107750008CE091E067E070E079D28091E8008E776C +:107760008093E800089582E061EC42E0D1D083E0AC +:1077700061E842E1CDD084E060E842E1C9C01F93F6 +:10778000209100081092000844B714BE88E10FB69B +:10779000F89480936000109260000FBE80E8E0E0F3 +:1077A000F0E00FB6F89480936100E09361000FBEA3 +:1077B00031E035BF92E095BF3F9A209A559A809369 +:1077C00061001092610047985D9A289A1092890092 +:1077D0008AEF8093880090936F0083E0809381000C +:1077E000859194918F5F9F4F11F03093B401942F46 +:1077F00041FF19C0809109012817A9F08093000862 +:10780000789480911301882339F08091B20190918E +:10781000B3018F5E9240C8F310920008F89481E0A3 +:10782000809313010CC090FF04C08091B4018823A1 +:1078300051F493FF09C080910901281729F0809124 +:10784000B401882309F04EDCD4D078941092B101B1 +:107850001092B0011EEF20C0D7DC4BD38091B00155 +:107860009091B10181549F4110F0109213018091C9 +:10787000B9019091BA0101969093BA018093B90130 +:10788000292F97FF03C0512F591B252F220F28178F +:1078900010F4479801C0479A809113018823E1F6BC +:1078A0008091E00081608093E0001CDC80E090E04B +:1078B0001F910895FA01923049F0933061F09130B0 +:1078C000F9F484E191E022E130E01EC086E291E02B +:1078D0002EE330E019C0882329F484E691E024E007 +:1078E00030E012C0813029F488E691E028E230E0EF +:1078F0000BC0823029F482E991E028E130E004C035 +:1079000080E090E020E030E091838083C901089519 +:107910008093E9008091EB0081608093EB001092EE +:10792000ED006093EC004093ED008091EE00881F25 +:107930008827881F08958091BD0188238CF403C097 +:107940008EB38823B1F08091E80082FFF9CF809157 +:10795000E8008B778093E80008958EB3882349F080 +:107960008091E80080FFF9CF8091E8008E778093C6 +:10797000E8000895EF92FF920F931F9345D04CD0EB +:1079800008ED10E0F80180818F7780838081806826 +:10799000808380818F7D808319BC1EBA1092BB01C9 +:1079A00080EEE82EF12CF70180818B7F8083F80137 +:1079B00080818160808380E060E042E0A9DFE1EEC9 +:1079C000F0E080818E7F8083E2EEF0E08081816054 +:1079D0008083808188608083F70180818E7F8083AF +:1079E000F8018081806180831F910F91FF90EF905B +:1079F0000895E7EDF0E08081816080838AE482BFB2 +:107A000081E08093BC01B6CFE8EDF0E080818E7F0D +:107A100080831092E20008951092DA001092E10043 +:107A200008951F920F920FB60F9211242F933F9338 +:107A30004F935F936F937F938F939F93AF93BF9376 +:107A4000EF93FF938091DA0080FF1BC08091D800F4 +:107A500080FF17C08091DA008E7F8093DA008091DA +:107A6000D90080FF0BC080E189BD82E189BD09B4E6 +:107A700000FEFDCF81E08EBB3BD203C019BC1EBA15 +:107A800037D28091E10080FF17C08091E20080FF33 +:107A900013C08091E2008E7F8093E2008091E2002B +:107AA00080618093E2008091D80080628093D8004A +:107AB00019BC85E08EBB1CD28091E10084FF2CC0F4 +:107AC0008091E20084FF28C080E189BD82E189BD08 +:107AD00009B400FEFDCF8091D8008F7D8093D8003F +:107AE0008091E1008F7E8093E1008091E2008F7EA3 +:107AF0008093E2008091E20081608093E2008091B7 +:107B0000BB01882331F48091E30087FD02C081E04E +:107B100001C084E08EBBECD18091E10083FF21C0E5 +:107B20008091E20083FF1DC08091E100877F8093F8 +:107B3000E10082E08EBB1092BB018091E1008E7F5C +:107B40008093E1008091E2008E7F8093E20080913B +:107B5000E20080618093E20080E060E042E0D8DEF5 +:107B6000C7D1FF91EF91BF91AF919F918F917F917D +:107B70006F915F914F913F912F910F900FBE0F909A +:107B80001F9018959C014091C3015091C401461764 +:107B9000570718F4F90190E044C06115710511F020 +:107BA000AB01F8CF8091E8008E778093E80040E049 +:107BB00050E0F0CF8EB3882309F444C0853009F437 +:107BC00043C08091E80083FF02C081E00895809166 +:107BD000E80082FD31C08091E80080FF22C08091E2 +:107BE000F3009091F200782F60E0292F30E0262BEF +:107BF000372B07C081918093F100415050402F5F97 +:107C00003F4F4115510519F02830310598F390E0A8 +:107C10002830310509F491E08091E8008E77809357 +:107C2000E8004115510531F6992321F605C08EB3C0 +:107C3000882341F0853041F08091E80082FFF7CF42 +:107C400080E0089582E0089583E008959C01611525 +:107C5000710529F48091E8008B778093E800F901A1 +:107C600026C08EB3882391F1853091F18091E80090 +:107C700083FF02C081E008958091E80082FFF1CF88 +:107C800006C08091F10081936150704059F02091BD +:107C9000F3008091F200322F20E090E0822B932BB2 +:107CA000892B79F78091E8008B778093E800611544 +:107CB0007105B9F605C08EB3882341F0853041F0D7 +:107CC0008091E80080FFF7CF80E0089582E008957A +:107CD00083E008950F931F93DF93CF9300D0CDB728 +:107CE000DEB7EDEBF1E08091F100819381E0E53CBE +:107CF000F807C9F708DD8091E80083FFE4C08091B0 +:107D0000BD019091BE01953009F46DC0963040F4EC +:107D1000913081F1913070F0933009F0D4C02AC0D5 +:107D2000983009F4A3C0993009F4B2C0963009F034 +:107D3000CAC07CC0803809F4C6C0823809F0C3C00C +:107D40008091C10187708093E9008091EB001092CF +:107D5000E9002091E800277F2093E80090E025E0EB +:107D6000969587952A95E1F781708093F10010929E +:107D7000F10087C0882319F0823009F0A4C08F7108 +:107D8000823009F0A0C08091BF01882331F5209195 +:107D9000C101277009F497C02093E9008091EB009E +:107DA00080FF1BC0933021F48091EB00806213C0F0 +:107DB0008091EB0080618093EB0081E090E002C055 +:107DC000880F991F2A95E2F78093EA001092EA0043 +:107DD0008091EB0088608093EB001092E900809125 +:107DE000E800877F51C0882309F06DC01091BF0162 +:107DF0001F770FB7F8948091E800877F8093E800A1 +:107E00009ADD8091E80080FFFCCF8091E3008078CC +:107E1000812B8093E30080688093E300112311F4A9 +:107E200082E001C083E08EBB0FBF4DC0805882301E +:107E300008F049C08091BF019091C0016091C101DB +:107E4000AE014F5F5F4F36DDBC01009709F43BC0C8 +:107E50008091E800877F8093E80089819A8192DE93 +:107E60008091E8008B778093E8002DC0803859F529 +:107E70008091E800877F8093E8008091BB01809328 +:107E8000F1008091E8008E778093E80054DD1BC0FC +:107E90008823C9F49091BF019230A8F48091E80042 +:107EA000877F8093E8009093BB0145DD8091BB0103 +:107EB000882331F48091E30087FD02C081E001C096 +:107EC00084E08EBB50DC8091E80083FF0AC0809183 +:107ED000EB0080628093EB008091E800877F8093C5 +:107EE000E8000F900F90CF91DF911F910F910895AF +:107EF00008951F938EB3882361F01091E9001092CA +:107F0000E9008091E80083FF01C0E4DE1770109360 +:107F1000E9001F910895F999FECF92BD81BDF89AAD +:107F2000992780B50895262FF999FECF1FBA92BDE3 +:107F300081BD20BD0FB6F894FA9AF99A0FBE01964A +:067F40000895F894FFCF44 +:107F46004341544552494E41007700080000000065 +:107F56000000080112011001020000084123380048 +:107F660001000201000109023E00020100803209FF +:107F7600040000010202010005240010010424028D +:107F8600040524060001070582030800FF09040111 +:107F960000020A000000070504021000010705831D +:107FA6000210000104030904280352006F00620056 +:107FB6006F007400200043006F006E0074007200B2 +:107FC6006F006C00200042006F00610072006400C8 +:107FD60000001803410072006400750069006E001D +:0C7FE6006F0020004C004C004300000025 +:040000030000700089 +:00000001FF diff --git a/external/arduino/avr/bootloaders/caterina-Arduino_Robot/Caterina-Robot.txt b/external/arduino/avr/bootloaders/caterina-Arduino_Robot/Caterina-Robot.txt new file mode 100644 index 000000000..5beb659a0 --- /dev/null +++ b/external/arduino/avr/bootloaders/caterina-Arduino_Robot/Caterina-Robot.txt @@ -0,0 +1,11 @@ +Builds against LUFA version 111009 +make version 3.81 +avrdude version 5.11 + +All AVR tools except avrdude were installed by CrossPack 20100115: +avr-gcc version 4.3.3 (GCC) +Thread model: single +Configured with: ../configure —prefix=/usr/local/CrossPack-AVR-20100115 —disable-dependency-tracking —disable-nls —disable-werror —target=avr —enable-languages=c,c++ —disable-nls —disable-libssp —with-dwarf2 +avr-libc version 1.6.7 +binutils version 2.19 + diff --git a/external/arduino/avr/bootloaders/caterina-Arduino_Robot/Caterina.c b/external/arduino/avr/bootloaders/caterina-Arduino_Robot/Caterina.c new file mode 100644 index 000000000..67ce49323 --- /dev/null +++ b/external/arduino/avr/bootloaders/caterina-Arduino_Robot/Caterina.c @@ -0,0 +1,780 @@ +/* + LUFA Library + Copyright (C) Dean Camera, 2011. + + dean [at] fourwalledcubicle [dot] com + www.lufa-lib.org +*/ + +/* + Copyright 2011 Dean Camera (dean [at] fourwalledcubicle [dot] com) + + Permission to use, copy, modify, distribute, and sell this + software and its documentation for any purpose is hereby granted + without fee, provided that the above copyright notice appear in + all copies and that both that the copyright notice and this + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the + software without specific, written prior permission. + + The author disclaim all warranties with regard to this + software, including all implied warranties of merchantability + and fitness. In no event shall the author be liable for any + special, indirect or consequential damages or any damages + whatsoever resulting from loss of use, data or profits, whether + in an action of contract, negligence or other tortious action, + arising out of or in connection with the use or performance of + this software. +*/ + +/** \file + * + * Main source file for the CDC class bootloader. This file contains the complete bootloader logic. + */ + +#define INCLUDE_FROM_CATERINA_C +#include "Caterina.h" + +/** Contains the current baud rate and other settings of the first virtual serial port. This must be retained as some + * operating systems will not open the port unless the settings can be set successfully. + */ +static CDC_LineEncoding_t LineEncoding = { .BaudRateBPS = 0, + .CharFormat = CDC_LINEENCODING_OneStopBit, + .ParityType = CDC_PARITY_None, + .DataBits = 8 }; + +/** Current address counter. This stores the current address of the FLASH or EEPROM as set by the host, + * and is used when reading or writing to the AVRs memory (either FLASH or EEPROM depending on the issued + * command.) + */ +static uint32_t CurrAddress; + +/** Flag to indicate if the bootloader should be running, or should exit and allow the application code to run + * via a watchdog reset. When cleared the bootloader will exit, starting the watchdog and entering an infinite + * loop until the AVR restarts and the application runs. + */ +static bool RunBootloader = true; + +/* Pulse generation counters to keep track of the time remaining for each pulse type */ +#define TX_RX_LED_PULSE_PERIOD 100 +uint16_t TxLEDPulse = 0; // time remaining for Tx LED pulse +uint16_t RxLEDPulse = 0; // time remaining for Rx LED pulse + +/* Bootloader timeout timer */ +// MAH 8/15/12- change so timeouts work properly when the chip is running at 8MHz instead of 16. +#define TIMEOUT_PERIOD 8000 +#define EXT_RESET_TIMEOUT_PERIOD 750 + + +/********************************************************************************************************* +LilyPadUSB bootloader code +The LilyPadUSB bootloader has been changed to remove the 8-second delay after external reset which is in +the Leonardo. To enter the bootloader, the user should execute TWO external resets within 750 ms; that is, +press the reset button twice, quickly.\ + +Some other changes were made to allow this code to compile tightly enough to fit in the alloted 4k of +bootloader space. +*/ +// MAH 8/15/12- added this flag to replace the bulky program memory reads to check for the presence of a sketch +// at the top of the memory space. +static bool sketchPresent = false; + +// MAH 8/15/12- make this volatile, since we modify it in one place and read it in another, we want to make +// sure we're always working on the copy in memory and not an erroneous value stored in a cache somewhere. +// This variable stores the length of time we've been in the bootloader when waiting for the 8 second delay. +volatile uint16_t Timeout = 0; +// MAH 8/15/12- added this for delay during startup. Did not use existing Timeout value b/c it only increments +// when there's a sketch at the top of the memory. +volatile uint16_t resetTimeout = 0; + +// MAH 8/15/12- let's make this an 8-bit value instead of 16- that saves on memory because 16-bit addition and +// comparison compiles to bulkier code. Note that this does *not* require a change to the Arduino core- we're +// just sort of ignoring the extra byte that the Arduino core puts at the next location. +uint8_t bootKey = 0x77; +volatile uint8_t *const bootKeyPtr = (volatile uint8_t *)0x0800; + +// StartSketch() is called to clean up our mess before passing execution to the sketch. +void StartSketch(void) +{ + cli(); + + /* Undo TIMER1 setup and clear the count before running the sketch */ + TIMSK1 = 0; + TCCR1B = 0; + + /* Relocate the interrupt vector table to the application section */ + MCUCR = (1 << IVCE); + MCUCR = 0; + + L_LED_OFF(); + TX_LED_OFF(); + RX_LED_OFF(); + + /* jump to beginning of application space */ + __asm__ volatile("jmp 0x0000"); + +} + +uint16_t LLEDPulse; + +/** Main program entry point. This routine configures the hardware required by the bootloader, then continuously + * runs the bootloader processing routine until it times out or is instructed to exit. + */ +int main(void) +{ + /* Save the value of the boot key memory before it is overwritten */ + uint8_t bootKeyPtrVal = *bootKeyPtr; + *bootKeyPtr = 0; + + /* Check the reason for the reset so we can act accordingly */ + uint8_t mcusr_state = MCUSR; // store the initial state of the Status register + MCUSR = 0; // clear all reset flags + + /* Watchdog may be configured with a 15 ms period so must disable it before going any further */ + // MAH 8/15/12- I removed this because wdt_disable() is the first thing SetupHardware() does- why + // do it twice right in a row? + //wdt_disable(); + + /* Setup hardware required for the bootloader */ + // MAH 8/15/12- Moved this up to before the bootloader go/no-go decision tree so I could use the + // timer in that decision tree. Removed the USBInit() call from it; if I'm not going to stay in + // the bootloader, there's no point spending the time initializing the USB. + // SetupHardware(); + wdt_disable(); + + // Disable clock division + clock_prescale_set(clock_div_1); + + // Relocate the interrupt vector table to the bootloader section + MCUCR = (1 << IVCE); + MCUCR = (1 << IVSEL); + + LED_SETUP(); + CPU_PRESCALE(0); + L_LED_OFF(); + TX_LED_OFF(); + RX_LED_OFF(); + + // Initialize TIMER1 to handle bootloader timeout and LED tasks. + // With 16 MHz clock and 1/64 prescaler, timer 1 is clocked at 250 kHz + // Our chosen compare match generates an interrupt every 1 ms. + // This interrupt is disabled selectively when doing memory reading, erasing, + // or writing since SPM has tight timing requirements. + + OCR1AH = 0; + OCR1AL = 250; + TIMSK1 = (1 << OCIE1A); // enable timer 1 output compare A match interrupt + TCCR1B = ((1 << CS11) | (1 << CS10)); // 1/64 prescaler on timer 1 input + + + // MAH 8/15/12- this replaces bulky pgm_read_word(0) calls later on, to save memory. + if (pgm_read_word(0) != 0xFFFF) sketchPresent = true; + +// MAH 26 Oct 2012- The "bootload or not?" section has been modified since the code released +// with Arduino 1.0.1. The simplest modification is the replacement of equivalence checks on +// the reset bits with masked checks, so if more than one reset occurs before the register is +// checked, the check doesn't fail and fall through to the bootloader unnecessarily. + +// The second, more in depth modification addresses behavior after an external reset (i.e., +// user pushes the reset button). The Leonardo treats all external resets as requests to +// re-enter the bootloader and wait for code to be loaded. It remains in bootloader mode for +// 8 seconds before continuing on to the sketch (if one is present). By defining RESET_DELAY +// equal to 1, this behavior will persist. + +// However, if RESET_DELAY is defined to 0, the reset timeout before loading the sketch drops +// to 750ms. If, during that 750ms, another external reset occurs, THEN an 8-second delay +// in the bootloader will occur. + + // This is the "no-8-second-delay" code. If this is the first time through the loop, we + // don't expect to see the bootKey in memory. + if ( (mcusr_state & (1< EXT_RESET_TIMEOUT_PERIOD) // resetTimeout is getting incremeted + RunBootloader = false; // in the timer1 ISR. + } + // If we make it past that while loop, it's sketch loading time! + *bootKeyPtr = 0; // clear out the bootKey; from now on, we want to treat a reset like + // a normal reset. + cli(); // Disable interrupts, in case no sketch is present. + RunBootloader = true; // We want to hang out in the bootloader if no sketch is present. + if (sketchPresent) StartSketch(); // If a sketch is present, go! Otherwise, wait around + // in the bootloader until one is uploaded. + } + // On a power-on reset, we ALWAYS want to go to the sketch. If there is one. + // This is a place where the old code had an equivalence and now there is a mask. + else if ( (mcusr_state & (1< TIMEOUT_PERIOD) + RunBootloader = false; + + // MAH 8/15/12- This used to be a function call- inlining it saves a few bytes. + LLEDPulse++; + uint8_t p = LLEDPulse >> 8; + if (p > 127) + p = 254-p; + p += p; + if (((uint8_t)LLEDPulse) > p) + L_LED_OFF(); + else + L_LED_ON(); + } + + /* Disconnect from the host - USB interface will be reset later along with the AVR */ + USB_Detach(); + + /* Jump to beginning of application space to run the sketch - do not reset */ + StartSketch(); +} + +// Timer1 is set up to provide periodic interrupts. This is used to flicker the LEDs during +// programming as well as to generate the clock counts which determine how long the board should +// remain in bootloading mode. + +ISR(TIMER1_COMPA_vect, ISR_BLOCK) +{ + /* Reset counter */ + TCNT1H = 0; + TCNT1L = 0; + + /* Check whether the TX or RX LED one-shot period has elapsed. if so, turn off the LED */ + if (TxLEDPulse && !(--TxLEDPulse)) + TX_LED_OFF(); + if (RxLEDPulse && !(--RxLEDPulse)) + RX_LED_OFF(); + resetTimeout++; // Needed for the "short reset delay" mode- governs the time the board waits + // for a second reset before loading the sketch. + if (pgm_read_word(0) != 0xFFFF) + Timeout++; +} + +// MAH 29 Oct 2012 Nothing below this point has to change for the LilyPadUSB support + +/** Event handler for the USB_ConfigurationChanged event. This configures the device's endpoints ready + * to relay data to and from the attached USB host. + */ +void EVENT_USB_Device_ConfigurationChanged(void) +{ + /* Setup CDC Notification, Rx and Tx Endpoints */ + Endpoint_ConfigureEndpoint(CDC_NOTIFICATION_EPNUM, EP_TYPE_INTERRUPT, + ENDPOINT_DIR_IN, CDC_NOTIFICATION_EPSIZE, + ENDPOINT_BANK_SINGLE); + + Endpoint_ConfigureEndpoint(CDC_TX_EPNUM, EP_TYPE_BULK, + ENDPOINT_DIR_IN, CDC_TXRX_EPSIZE, + ENDPOINT_BANK_SINGLE); + + Endpoint_ConfigureEndpoint(CDC_RX_EPNUM, EP_TYPE_BULK, + ENDPOINT_DIR_OUT, CDC_TXRX_EPSIZE, + ENDPOINT_BANK_SINGLE); +} + +/** Event handler for the USB_ControlRequest event. This is used to catch and process control requests sent to + * the device from the USB host before passing along unhandled control requests to the library for processing + * internally. + */ +void EVENT_USB_Device_ControlRequest(void) +{ + /* Ignore any requests that aren't directed to the CDC interface */ + if ((USB_ControlRequest.bmRequestType & (CONTROL_REQTYPE_TYPE | CONTROL_REQTYPE_RECIPIENT)) != + (REQTYPE_CLASS | REQREC_INTERFACE)) + { + return; + } + + /* Process CDC specific control requests */ + switch (USB_ControlRequest.bRequest) + { + case CDC_REQ_GetLineEncoding: + if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) + { + Endpoint_ClearSETUP(); + + /* Write the line coding data to the control endpoint */ + Endpoint_Write_Control_Stream_LE(&LineEncoding, sizeof(CDC_LineEncoding_t)); + Endpoint_ClearOUT(); + } + + break; + case CDC_REQ_SetLineEncoding: + if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) + { + Endpoint_ClearSETUP(); + + /* Read the line coding data in from the host into the global struct */ + Endpoint_Read_Control_Stream_LE(&LineEncoding, sizeof(CDC_LineEncoding_t)); + Endpoint_ClearIN(); + } + + break; + } +} + +#if !defined(NO_BLOCK_SUPPORT) +/** Reads or writes a block of EEPROM or FLASH memory to or from the appropriate CDC data endpoint, depending + * on the AVR910 protocol command issued. + * + * \param[in] Command Single character AVR910 protocol command indicating what memory operation to perform + */ +static void ReadWriteMemoryBlock(const uint8_t Command) +{ + uint16_t BlockSize; + char MemoryType; + + bool HighByte = false; + uint8_t LowByte = 0; + + BlockSize = (FetchNextCommandByte() << 8); + BlockSize |= FetchNextCommandByte(); + + MemoryType = FetchNextCommandByte(); + + if ((MemoryType != 'E') && (MemoryType != 'F')) + { + /* Send error byte back to the host */ + WriteNextResponseByte('?'); + + return; + } + + /* Disable timer 1 interrupt - can't afford to process nonessential interrupts + * while doing SPM tasks */ + TIMSK1 = 0; + + /* Check if command is to read memory */ + if (Command == 'g') + { + /* Re-enable RWW section */ + boot_rww_enable(); + + while (BlockSize--) + { + if (MemoryType == 'F') + { + /* Read the next FLASH byte from the current FLASH page */ + #if (FLASHEND > 0xFFFF) + WriteNextResponseByte(pgm_read_byte_far(CurrAddress | HighByte)); + #else + WriteNextResponseByte(pgm_read_byte(CurrAddress | HighByte)); + #endif + + /* If both bytes in current word have been read, increment the address counter */ + if (HighByte) + CurrAddress += 2; + + HighByte = !HighByte; + } + else + { + /* Read the next EEPROM byte into the endpoint */ + WriteNextResponseByte(eeprom_read_byte((uint8_t*)(intptr_t)(CurrAddress >> 1))); + + /* Increment the address counter after use */ + CurrAddress += 2; + } + } + } + else + { + uint32_t PageStartAddress = CurrAddress; + + if (MemoryType == 'F') + { + boot_page_erase(PageStartAddress); + boot_spm_busy_wait(); + } + + while (BlockSize--) + { + if (MemoryType == 'F') + { + /* If both bytes in current word have been written, increment the address counter */ + if (HighByte) + { + /* Write the next FLASH word to the current FLASH page */ + boot_page_fill(CurrAddress, ((FetchNextCommandByte() << 8) | LowByte)); + + /* Increment the address counter after use */ + CurrAddress += 2; + } + else + { + LowByte = FetchNextCommandByte(); + } + + HighByte = !HighByte; + } + else + { + /* Write the next EEPROM byte from the endpoint */ + eeprom_write_byte((uint8_t*)((intptr_t)(CurrAddress >> 1)), FetchNextCommandByte()); + + /* Increment the address counter after use */ + CurrAddress += 2; + } + } + + /* If in FLASH programming mode, commit the page after writing */ + if (MemoryType == 'F') + { + /* Commit the flash page to memory */ + boot_page_write(PageStartAddress); + + /* Wait until write operation has completed */ + boot_spm_busy_wait(); + } + + /* Send response byte back to the host */ + WriteNextResponseByte('\r'); + } + + /* Re-enable timer 1 interrupt disabled earlier in this routine */ + TIMSK1 = (1 << OCIE1A); +} +#endif + +/** Retrieves the next byte from the host in the CDC data OUT endpoint, and clears the endpoint bank if needed + * to allow reception of the next data packet from the host. + * + * \return Next received byte from the host in the CDC data OUT endpoint + */ +static uint8_t FetchNextCommandByte(void) +{ + /* Select the OUT endpoint so that the next data byte can be read */ + Endpoint_SelectEndpoint(CDC_RX_EPNUM); + + /* If OUT endpoint empty, clear it and wait for the next packet from the host */ + while (!(Endpoint_IsReadWriteAllowed())) + { + Endpoint_ClearOUT(); + + while (!(Endpoint_IsOUTReceived())) + { + if (USB_DeviceState == DEVICE_STATE_Unattached) + return 0; + } + } + + /* Fetch the next byte from the OUT endpoint */ + return Endpoint_Read_8(); +} + +/** Writes the next response byte to the CDC data IN endpoint, and sends the endpoint back if needed to free up the + * bank when full ready for the next byte in the packet to the host. + * + * \param[in] Response Next response byte to send to the host + */ +static void WriteNextResponseByte(const uint8_t Response) +{ + /* Select the IN endpoint so that the next data byte can be written */ + Endpoint_SelectEndpoint(CDC_TX_EPNUM); + + /* If IN endpoint full, clear it and wait until ready for the next packet to the host */ + if (!(Endpoint_IsReadWriteAllowed())) + { + Endpoint_ClearIN(); + + while (!(Endpoint_IsINReady())) + { + if (USB_DeviceState == DEVICE_STATE_Unattached) + return; + } + } + + /* Write the next byte to the IN endpoint */ + Endpoint_Write_8(Response); + + TX_LED_ON(); + TxLEDPulse = TX_RX_LED_PULSE_PERIOD; +} + +#define STK_OK 0x10 +#define STK_INSYNC 0x14 // ' ' +#define CRC_EOP 0x20 // 'SPACE' +#define STK_GET_SYNC 0x30 // '0' + +#define STK_GET_PARAMETER 0x41 // 'A' +#define STK_SET_DEVICE 0x42 // 'B' +#define STK_SET_DEVICE_EXT 0x45 // 'E' +#define STK_LOAD_ADDRESS 0x55 // 'U' +#define STK_UNIVERSAL 0x56 // 'V' +#define STK_PROG_PAGE 0x64 // 'd' +#define STK_READ_PAGE 0x74 // 't' +#define STK_READ_SIGN 0x75 // 'u' + +/** Task to read in AVR910 commands from the CDC data OUT endpoint, process them, perform the required actions + * and send the appropriate response back to the host. + */ +void CDC_Task(void) +{ + /* Select the OUT endpoint */ + Endpoint_SelectEndpoint(CDC_RX_EPNUM); + + /* Check if endpoint has a command in it sent from the host */ + if (!(Endpoint_IsOUTReceived())) + return; + + RX_LED_ON(); + RxLEDPulse = TX_RX_LED_PULSE_PERIOD; + + /* Read in the bootloader command (first byte sent from host) */ + uint8_t Command = FetchNextCommandByte(); + + if (Command == 'E') + { + /* We nearly run out the bootloader timeout clock, + * leaving just a few hundred milliseconds so the + * bootloder has time to respond and service any + * subsequent requests */ + Timeout = TIMEOUT_PERIOD - 500; + + /* Re-enable RWW section - must be done here in case + * user has disabled verification on upload. */ + boot_rww_enable_safe(); + + // Send confirmation byte back to the host + WriteNextResponseByte('\r'); + } + else if (Command == 'T') + { + FetchNextCommandByte(); + + // Send confirmation byte back to the host + WriteNextResponseByte('\r'); + } + else if ((Command == 'L') || (Command == 'P')) + { + // Send confirmation byte back to the host + WriteNextResponseByte('\r'); + } + else if (Command == 't') + { + // Return ATMEGA128 part code - this is only to allow AVRProg to use the bootloader + WriteNextResponseByte(0x44); + WriteNextResponseByte(0x00); + } + else if (Command == 'a') + { + // Indicate auto-address increment is supported + WriteNextResponseByte('Y'); + } + else if (Command == 'A') + { + // Set the current address to that given by the host + CurrAddress = (FetchNextCommandByte() << 9); + CurrAddress |= (FetchNextCommandByte() << 1); + + // Send confirmation byte back to the host + WriteNextResponseByte('\r'); + } + else if (Command == 'p') + { + // Indicate serial programmer back to the host + WriteNextResponseByte('S'); + } + else if (Command == 'S') + { + // Write the 7-byte software identifier to the endpoint + for (uint8_t CurrByte = 0; CurrByte < 7; CurrByte++) + WriteNextResponseByte(SOFTWARE_IDENTIFIER[CurrByte]); + } + else if (Command == 'V') + { + WriteNextResponseByte('0' + BOOTLOADER_VERSION_MAJOR); + WriteNextResponseByte('0' + BOOTLOADER_VERSION_MINOR); + } + else if (Command == 's') + { + WriteNextResponseByte(AVR_SIGNATURE_3); + WriteNextResponseByte(AVR_SIGNATURE_2); + WriteNextResponseByte(AVR_SIGNATURE_1); + } + else if (Command == 'e') + { + // Clear the application section of flash + for (uint32_t CurrFlashAddress = 0; CurrFlashAddress < BOOT_START_ADDR; CurrFlashAddress += SPM_PAGESIZE) + { + boot_page_erase(CurrFlashAddress); + boot_spm_busy_wait(); + boot_page_write(CurrFlashAddress); + boot_spm_busy_wait(); + } + + // Send confirmation byte back to the host + WriteNextResponseByte('\r'); + } + #if !defined(NO_LOCK_BYTE_WRITE_SUPPORT) + else if (Command == 'l') + { + // Set the lock bits to those given by the host + boot_lock_bits_set(FetchNextCommandByte()); + + // Send confirmation byte back to the host + WriteNextResponseByte('\r'); + } + #endif + else if (Command == 'r') + { + WriteNextResponseByte(boot_lock_fuse_bits_get(GET_LOCK_BITS)); + } + else if (Command == 'F') + { + WriteNextResponseByte(boot_lock_fuse_bits_get(GET_LOW_FUSE_BITS)); + } + else if (Command == 'N') + { + WriteNextResponseByte(boot_lock_fuse_bits_get(GET_HIGH_FUSE_BITS)); + } + else if (Command == 'Q') + { + WriteNextResponseByte(boot_lock_fuse_bits_get(GET_EXTENDED_FUSE_BITS)); + } + #if !defined(NO_BLOCK_SUPPORT) + else if (Command == 'b') + { + WriteNextResponseByte('Y'); + + // Send block size to the host + WriteNextResponseByte(SPM_PAGESIZE >> 8); + WriteNextResponseByte(SPM_PAGESIZE & 0xFF); + } + else if ((Command == 'B') || (Command == 'g')) + { + // Keep resetting the timeout counter if we're receiving self-programming instructions + Timeout = 0; + // Delegate the block write/read to a separate function for clarity + ReadWriteMemoryBlock(Command); + } + #endif + #if !defined(NO_FLASH_BYTE_SUPPORT) + else if (Command == 'C') + { + // Write the high byte to the current flash page + boot_page_fill(CurrAddress, FetchNextCommandByte()); + + // Send confirmation byte back to the host + WriteNextResponseByte('\r'); + } + else if (Command == 'c') + { + // Write the low byte to the current flash page + boot_page_fill(CurrAddress | 0x01, FetchNextCommandByte()); + + // Increment the address + CurrAddress += 2; + + // Send confirmation byte back to the host + WriteNextResponseByte('\r'); + } + else if (Command == 'm') + { + // Commit the flash page to memory + boot_page_write(CurrAddress); + + // Wait until write operation has completed + boot_spm_busy_wait(); + + // Send confirmation byte back to the host + WriteNextResponseByte('\r'); + } + else if (Command == 'R') + { + #if (FLASHEND > 0xFFFF) + uint16_t ProgramWord = pgm_read_word_far(CurrAddress); + #else + uint16_t ProgramWord = pgm_read_word(CurrAddress); + #endif + + WriteNextResponseByte(ProgramWord >> 8); + WriteNextResponseByte(ProgramWord & 0xFF); + } + #endif + #if !defined(NO_EEPROM_BYTE_SUPPORT) + else if (Command == 'D') + { + // Read the byte from the endpoint and write it to the EEPROM + eeprom_write_byte((uint8_t*)((intptr_t)(CurrAddress >> 1)), FetchNextCommandByte()); + + // Increment the address after use + CurrAddress += 2; + + // Send confirmation byte back to the host + WriteNextResponseByte('\r'); + } + else if (Command == 'd') + { + // Read the EEPROM byte and write it to the endpoint + WriteNextResponseByte(eeprom_read_byte((uint8_t*)((intptr_t)(CurrAddress >> 1)))); + + // Increment the address after use + CurrAddress += 2; + } + #endif + else if (Command != 27) + { + // Unknown (non-sync) command, return fail code + WriteNextResponseByte('?'); + } + + + /* Select the IN endpoint */ + Endpoint_SelectEndpoint(CDC_TX_EPNUM); + + /* Remember if the endpoint is completely full before clearing it */ + bool IsEndpointFull = !(Endpoint_IsReadWriteAllowed()); + + /* Send the endpoint data to the host */ + Endpoint_ClearIN(); + + /* If a full endpoint's worth of data was sent, we need to send an empty packet afterwards to signal end of transfer */ + if (IsEndpointFull) + { + while (!(Endpoint_IsINReady())) + { + if (USB_DeviceState == DEVICE_STATE_Unattached) + return; + } + + Endpoint_ClearIN(); + } + + /* Wait until the data has been sent to the host */ + while (!(Endpoint_IsINReady())) + { + if (USB_DeviceState == DEVICE_STATE_Unattached) + return; + } + + /* Select the OUT endpoint */ + Endpoint_SelectEndpoint(CDC_RX_EPNUM); + + /* Acknowledge the command from the host */ + Endpoint_ClearOUT(); +} + diff --git a/external/arduino/avr/bootloaders/caterina-Arduino_Robot/Caterina.h b/external/arduino/avr/bootloaders/caterina-Arduino_Robot/Caterina.h new file mode 100644 index 000000000..67ff1b3a4 --- /dev/null +++ b/external/arduino/avr/bootloaders/caterina-Arduino_Robot/Caterina.h @@ -0,0 +1,106 @@ +/* + LUFA Library + Copyright (C) Dean Camera, 2011. + + dean [at] fourwalledcubicle [dot] com + www.lufa-lib.org +*/ + +/* + Copyright 2011 Dean Camera (dean [at] fourwalledcubicle [dot] com) + + Permission to use, copy, modify, distribute, and sell this + software and its documentation for any purpose is hereby granted + without fee, provided that the above copyright notice appear in + all copies and that both that the copyright notice and this + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the + software without specific, written prior permission. + + The author disclaim all warranties with regard to this + software, including all implied warranties of merchantability + and fitness. In no event shall the author be liable for any + special, indirect or consequential damages or any damages + whatsoever resulting from loss of use, data or profits, whether + in an action of contract, negligence or other tortious action, + arising out of or in connection with the use or performance of + this software. +*/ + +/** \file + * + * Header file for BootloaderCDC.c. + */ + +#ifndef _CDC_H_ +#define _CDC_H_ + + /* Includes: */ + #include + #include + #include + #include + #include + #include + #include + + #include "Descriptors.h" + + #include + /* Macros: */ + /** Version major of the CDC bootloader. */ + #define BOOTLOADER_VERSION_MAJOR 0x01 + + /** Version minor of the CDC bootloader. */ + #define BOOTLOADER_VERSION_MINOR 0x00 + + /** Hardware version major of the CDC bootloader. */ + #define BOOTLOADER_HWVERSION_MAJOR 0x01 + + /** Hardware version minor of the CDC bootloader. */ + #define BOOTLOADER_HWVERSION_MINOR 0x00 + + /** Eight character bootloader firmware identifier reported to the host when requested */ + #define SOFTWARE_IDENTIFIER "CATERINA" + + #define CPU_PRESCALE(n) (CLKPR = 0x80, CLKPR = (n)) + #define LED_SETUP() DDRC |= (1<<7); DDRB |= (1<<0); DDRD |= (1<<5); + #define L_LED_OFF() PORTC &= ~(1<<7) + #define L_LED_ON() PORTC |= (1<<7) + #define L_LED_TOGGLE() PORTC ^= (1<<7) + #if DEVICE_PID == 0x0037 // polarity of the RX and TX LEDs is reversed on the Micro + #define TX_LED_OFF() PORTD &= ~(1<<5) + #define TX_LED_ON() PORTD |= (1<<5) + #define RX_LED_OFF() PORTB &= ~(1<<0) + #define RX_LED_ON() PORTB |= (1<<0) + #else + #define TX_LED_OFF() PORTD |= (1<<5) + #define TX_LED_ON() PORTD &= ~(1<<5) + #define RX_LED_OFF() PORTB |= (1<<0) + #define RX_LED_ON() PORTB &= ~(1<<0) + #endif + + /* Type Defines: */ + /** Type define for a non-returning pointer to the start of the loaded application in flash memory. */ + typedef void (*AppPtr_t)(void) ATTR_NO_RETURN; + + /* Function Prototypes: */ + void StartSketch(void); + void LEDPulse(void); + + void CDC_Task(void); + void SetupHardware(void); + + void EVENT_USB_Device_ConfigurationChanged(void); + + #if defined(INCLUDE_FROM_CATERINA_C) || defined(__DOXYGEN__) + #if !defined(NO_BLOCK_SUPPORT) + static void ReadWriteMemoryBlock(const uint8_t Command); + #endif + static uint8_t FetchNextCommandByte(void); + static void WriteNextResponseByte(const uint8_t Response); + #endif + +#endif + diff --git a/external/arduino/avr/bootloaders/caterina-Arduino_Robot/Descriptors.c b/external/arduino/avr/bootloaders/caterina-Arduino_Robot/Descriptors.c new file mode 100644 index 000000000..3ca9c83af --- /dev/null +++ b/external/arduino/avr/bootloaders/caterina-Arduino_Robot/Descriptors.c @@ -0,0 +1,270 @@ +/* + LUFA Library + Copyright (C) Dean Camera, 2011. + + dean [at] fourwalledcubicle [dot] com + www.lufa-lib.org +*/ + +/* + Copyright 2011 Dean Camera (dean [at] fourwalledcubicle [dot] com) + + Permission to use, copy, modify, distribute, and sell this + software and its documentation for any purpose is hereby granted + without fee, provided that the above copyright notice appear in + all copies and that both that the copyright notice and this + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the + software without specific, written prior permission. + + The author disclaim all warranties with regard to this + software, including all implied warranties of merchantability + and fitness. In no event shall the author be liable for any + special, indirect or consequential damages or any damages + whatsoever resulting from loss of use, data or profits, whether + in an action of contract, negligence or other tortious action, + arising out of or in connection with the use or performance of + this software. +*/ + +/** \file + * + * USB Device Descriptors, for library use when in USB device mode. Descriptors are special + * computer-readable structures which the host requests upon device enumeration, to determine + * the device's capabilities and functions. + */ + +#include "Descriptors.h" + +/** Device descriptor structure. This descriptor, located in SRAM memory, describes the overall + * device characteristics, including the supported USB version, control endpoint size and the + * number of device configurations. The descriptor is read out by the USB host when the enumeration + * process begins. + */ +const USB_Descriptor_Device_t DeviceDescriptor = +{ + .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device}, + + .USBSpecification = VERSION_BCD(01.10), + .Class = CDC_CSCP_CDCClass, + .SubClass = CDC_CSCP_NoSpecificSubclass, + .Protocol = CDC_CSCP_NoSpecificProtocol, + + .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE, + + .VendorID = DEVICE_VID, + .ProductID = DEVICE_PID, + .ReleaseNumber = VERSION_BCD(00.01), + + .ManufacturerStrIndex = 0x02, + .ProductStrIndex = 0x01, + .SerialNumStrIndex = NO_DESCRIPTOR, + + .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS +}; + +/** Configuration descriptor structure. This descriptor, located in SRAM memory, describes the usage + * of the device in one of its supported configurations, including information about any device interfaces + * and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting + * a configuration so that the host may correctly communicate with the USB device. + */ +const USB_Descriptor_Configuration_t ConfigurationDescriptor = +{ + .Config = + { + .Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration}, + + .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t), + .TotalInterfaces = 2, + + .ConfigurationNumber = 1, + .ConfigurationStrIndex = NO_DESCRIPTOR, + + .ConfigAttributes = USB_CONFIG_ATTR_BUSPOWERED, + + .MaxPowerConsumption = USB_CONFIG_POWER_MA(100) + }, + + .CDC_CCI_Interface = + { + .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, + + .InterfaceNumber = 0, + .AlternateSetting = 0, + + .TotalEndpoints = 1, + + .Class = CDC_CSCP_CDCClass, + .SubClass = CDC_CSCP_ACMSubclass, + .Protocol = CDC_CSCP_ATCommandProtocol, + + .InterfaceStrIndex = NO_DESCRIPTOR + }, + + .CDC_Functional_Header = + { + .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalHeader_t), .Type = DTYPE_CSInterface}, + .Subtype = 0x00, + + .CDCSpecification = VERSION_BCD(01.10), + }, + + .CDC_Functional_ACM = + { + .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalACM_t), .Type = DTYPE_CSInterface}, + .Subtype = 0x02, + + .Capabilities = 0x04, + }, + + .CDC_Functional_Union = + { + .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalUnion_t), .Type = DTYPE_CSInterface}, + .Subtype = 0x06, + + .MasterInterfaceNumber = 0, + .SlaveInterfaceNumber = 1, + }, + + .CDC_NotificationEndpoint = + { + .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, + + .EndpointAddress = (ENDPOINT_DIR_IN | CDC_NOTIFICATION_EPNUM), + .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), + .EndpointSize = CDC_NOTIFICATION_EPSIZE, + .PollingIntervalMS = 0xFF + }, + + .CDC_DCI_Interface = + { + .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, + + .InterfaceNumber = 1, + .AlternateSetting = 0, + + .TotalEndpoints = 2, + + .Class = CDC_CSCP_CDCDataClass, + .SubClass = CDC_CSCP_NoDataSubclass, + .Protocol = CDC_CSCP_NoDataProtocol, + + .InterfaceStrIndex = NO_DESCRIPTOR + }, + + .CDC_DataOutEndpoint = + { + .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, + + .EndpointAddress = (ENDPOINT_DIR_OUT | CDC_RX_EPNUM), + .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), + .EndpointSize = CDC_TXRX_EPSIZE, + .PollingIntervalMS = 0x01 + }, + + .CDC_DataInEndpoint = + { + .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, + + .EndpointAddress = (ENDPOINT_DIR_IN | CDC_TX_EPNUM), + .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), + .EndpointSize = CDC_TXRX_EPSIZE, + .PollingIntervalMS = 0x01 + } +}; + +/** Language descriptor structure. This descriptor, located in SRAM memory, is returned when the host requests + * the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate + * via the language ID table available at USB.org what languages the device supports for its string descriptors. + */ +const USB_Descriptor_String_t LanguageString = +{ + .Header = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String}, + + .UnicodeString = {LANGUAGE_ID_ENG} +}; + +/** Product descriptor string. This is a Unicode string containing the product's details in human readable form, + * and is read out upon request by the host when the appropriate string ID is requested, listed in the Device + * Descriptor. + */ +const USB_Descriptor_String_t ProductString = +{ + .Header = {.Size = USB_STRING_LEN(19), .Type = DTYPE_String}, + + #if DEVICE_PID == 0x0036 + .UnicodeString = L"Arduino Leonardo" + #elif DEVICE_PID == 0x0037 + .UnicodeString = L"Arduino Micro " + #elif DEVICE_PID == 0x0038 + .UnicodeString = L"Robot Control Board" + #elif DEVICE_PID == 0x0039 + .UnicodeString = L"Robot Motor Board " + #elif DEVICE_PID == 0x003C + .UnicodeString = L"Arduino Esplora " + #else + .UnicodeString = L"USB IO board " + #endif +}; + +const USB_Descriptor_String_t ManufacturerString = +{ + .Header = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String}, + + #if DEVICE_VID == 0x2341 + .UnicodeString = L"Arduino LLC" + #else + .UnicodeString = L"Unknown " + #endif +}; + +/** This function is called by the library when in device mode, and must be overridden (see LUFA library "USB Descriptors" + * documentation) by the application code so that the address and size of a requested descriptor can be given + * to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function + * is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the + * USB host. + */ +uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, + const uint8_t wIndex, + const void** const DescriptorAddress) +{ + const uint8_t DescriptorType = (wValue >> 8); + const uint8_t DescriptorNumber = (wValue & 0xFF); + + const void* Address = NULL; + uint16_t Size = NO_DESCRIPTOR; + + switch (DescriptorType) + { + case DTYPE_Device: + Address = &DeviceDescriptor; + Size = sizeof(USB_Descriptor_Device_t); + break; + case DTYPE_Configuration: + Address = &ConfigurationDescriptor; + Size = sizeof(USB_Descriptor_Configuration_t); + break; + case DTYPE_String: + if (!(DescriptorNumber)) + { + Address = &LanguageString; + Size = LanguageString.Header.Size; + } + else if (DescriptorNumber == DeviceDescriptor.ProductStrIndex) + { + Address = &ProductString; + Size = ProductString.Header.Size; + } else if (DescriptorNumber == DeviceDescriptor.ManufacturerStrIndex) + { + Address = &ManufacturerString; + Size = ManufacturerString.Header.Size; + } + + break; + } + + *DescriptorAddress = Address; + return Size; +} + diff --git a/external/arduino/avr/bootloaders/caterina-Arduino_Robot/Descriptors.h b/external/arduino/avr/bootloaders/caterina-Arduino_Robot/Descriptors.h new file mode 100644 index 000000000..c843bec82 --- /dev/null +++ b/external/arduino/avr/bootloaders/caterina-Arduino_Robot/Descriptors.h @@ -0,0 +1,139 @@ +/* + LUFA Library + Copyright (C) Dean Camera, 2011. + + dean [at] fourwalledcubicle [dot] com + www.lufa-lib.org +*/ + +/* + Copyright 2011 Dean Camera (dean [at] fourwalledcubicle [dot] com) + + Permission to use, copy, modify, distribute, and sell this + software and its documentation for any purpose is hereby granted + without fee, provided that the above copyright notice appear in + all copies and that both that the copyright notice and this + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the + software without specific, written prior permission. + + The author disclaim all warranties with regard to this + software, including all implied warranties of merchantability + and fitness. In no event shall the author be liable for any + special, indirect or consequential damages or any damages + whatsoever resulting from loss of use, data or profits, whether + in an action of contract, negligence or other tortious action, + arising out of or in connection with the use or performance of + this software. +*/ + +/** \file + * + * Header file for Descriptors.c. + */ + +#ifndef _DESCRIPTORS_H_ +#define _DESCRIPTORS_H_ + + /* Includes: */ + #include + + /* Macros: */ + #if defined(__AVR_AT90USB1287__) + #define AVR_SIGNATURE_1 0x1E + #define AVR_SIGNATURE_2 0x97 + #define AVR_SIGNATURE_3 0x82 + #elif defined(__AVR_AT90USB647__) + #define AVR_SIGNATURE_1 0x1E + #define AVR_SIGNATURE_2 0x96 + #define AVR_SIGNATURE_3 0x82 + #elif defined(__AVR_AT90USB1286__) + #define AVR_SIGNATURE_1 0x1E + #define AVR_SIGNATURE_2 0x97 + #define AVR_SIGNATURE_3 0x82 + #elif defined(__AVR_AT90USB646__) + #define AVR_SIGNATURE_1 0x1E + #define AVR_SIGNATURE_2 0x96 + #define AVR_SIGNATURE_3 0x82 + #elif defined(__AVR_ATmega32U6__) + #define AVR_SIGNATURE_1 0x1E + #define AVR_SIGNATURE_2 0x95 + #define AVR_SIGNATURE_3 0x88 + #elif defined(__AVR_ATmega32U4__) + #define AVR_SIGNATURE_1 0x1E + #define AVR_SIGNATURE_2 0x95 + #define AVR_SIGNATURE_3 0x87 + #elif defined(__AVR_ATmega16U4__) + #define AVR_SIGNATURE_1 0x1E + #define AVR_SIGNATURE_2 0x94 + #define AVR_SIGNATURE_3 0x88 + #elif defined(__AVR_ATmega32U2__) + #define AVR_SIGNATURE_1 0x1E + #define AVR_SIGNATURE_2 0x95 + #define AVR_SIGNATURE_3 0x8A + #elif defined(__AVR_ATmega16U2__) + #define AVR_SIGNATURE_1 0x1E + #define AVR_SIGNATURE_2 0x94 + #define AVR_SIGNATURE_3 0x89 + #elif defined(__AVR_AT90USB162__) + #define AVR_SIGNATURE_1 0x1E + #define AVR_SIGNATURE_2 0x94 + #define AVR_SIGNATURE_3 0x82 + #elif defined(__AVR_ATmega8U2__) + #define AVR_SIGNATURE_1 0x1E + #define AVR_SIGNATURE_2 0x93 + #define AVR_SIGNATURE_3 0x89 + #elif defined(__AVR_AT90USB82__) + #define AVR_SIGNATURE_1 0x1E + #define AVR_SIGNATURE_2 0x94 + #define AVR_SIGNATURE_3 0x82 + #else + #error The selected AVR part is not currently supported by this bootloader. + #endif + + /** Endpoint number for the CDC control interface event notification endpoint. */ + #define CDC_NOTIFICATION_EPNUM 2 + + /** Endpoint number for the CDC data interface TX (data IN) endpoint. */ + #define CDC_TX_EPNUM 3 + + /** Endpoint number for the CDC data interface RX (data OUT) endpoint. */ + #define CDC_RX_EPNUM 4 + + /** Size of the CDC data interface TX and RX data endpoint banks, in bytes. */ + #define CDC_TXRX_EPSIZE 16 + + /** Size of the CDC control interface notification endpoint bank, in bytes. */ + #define CDC_NOTIFICATION_EPSIZE 8 + + /* Type Defines: */ + /** Type define for the device configuration descriptor structure. This must be defined in the + * application code, as the configuration descriptor contains several sub-descriptors which + * vary between devices, and which describe the device's usage to the host. + */ + typedef struct + { + USB_Descriptor_Configuration_Header_t Config; + + // CDC Control Interface + USB_Descriptor_Interface_t CDC_CCI_Interface; + USB_CDC_Descriptor_FunctionalHeader_t CDC_Functional_Header; + USB_CDC_Descriptor_FunctionalACM_t CDC_Functional_ACM; + USB_CDC_Descriptor_FunctionalUnion_t CDC_Functional_Union; + USB_Descriptor_Endpoint_t CDC_NotificationEndpoint; + + // CDC Data Interface + USB_Descriptor_Interface_t CDC_DCI_Interface; + USB_Descriptor_Endpoint_t CDC_DataOutEndpoint; + USB_Descriptor_Endpoint_t CDC_DataInEndpoint; + } USB_Descriptor_Configuration_t; + + /* Function Prototypes: */ + uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, + const uint8_t wIndex, + const void** const DescriptorAddress) + ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); + +#endif + diff --git a/external/arduino/avr/bootloaders/caterina-Arduino_Robot/Makefile b/external/arduino/avr/bootloaders/caterina-Arduino_Robot/Makefile new file mode 100644 index 000000000..00385e453 --- /dev/null +++ b/external/arduino/avr/bootloaders/caterina-Arduino_Robot/Makefile @@ -0,0 +1,738 @@ +# Hey Emacs, this is a -*- makefile -*- +#---------------------------------------------------------------------------- +# WinAVR Makefile Template written by Eric B. Weddington, Jrg Wunsch, et al. +# >> Modified for use with the LUFA project. << +# +# Released to the Public Domain +# +# Additional material for this makefile was written by: +# Peter Fleury +# Tim Henigan +# Colin O'Flynn +# Reiner Patommel +# Markus Pfaff +# Sander Pool +# Frederik Rouleau +# Carlos Lamas +# Dean Camera +# Opendous Inc. +# Denver Gingerich +# +#---------------------------------------------------------------------------- +# On command line: +# +# make all = Make software. +# +# make clean = Clean out built project files. +# +# make coff = Convert ELF to AVR COFF. +# +# make extcoff = Convert ELF to AVR Extended COFF. +# +# make program = Download the hex file to the device, using avrdude. +# Please customize the avrdude settings below first! +# +# make doxygen = Generate DoxyGen documentation for the project (must have +# DoxyGen installed) +# +# make debug = Start either simulavr or avarice as specified for debugging, +# with avr-gdb or avr-insight as the front end for debugging. +# +# make filename.s = Just compile filename.c into the assembler code only. +# +# make filename.i = Create a preprocessed source file for use in submitting +# bug reports to the GCC project. +# +# To rebuild project do "make clean" then "make all". +#---------------------------------------------------------------------------- + +# USB vendor ID (VID) +# reuse of this VID by others is forbidden by USB-IF +# official Arduino LLC VID +VID = 0x2341 + + +# USB product ID (PID) +# official Leonardo PID +# PID = 0x0036 +# official Micro PID +# PID = 0x0037 +# official Arduino Robot Control Board PID +PID = 0x0038 +# official Arduino Robot Motor Board PID +# PID = 0x0039 +# official Esplora PID +# PID = 0x003C + +# MCU name +MCU = atmega32u4 + + +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + + +# Target board (see library "Board Types" documentation, NONE for projects not requiring +# LUFA board drivers). If USER is selected, put custom board drivers in a directory called +# "Board" inside the application directory. +BOARD = USER + + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + + +# Starting byte address of the bootloader, as a byte address - computed via the formula +# BOOT_START = ((FLASH_SIZE_KB - BOOT_SECTION_SIZE_KB) * 1024) +# +# Note that the bootloader size and start address given in AVRStudio is in words and not +# bytes, and so will need to be doubled to obtain the byte address needed by AVR-GCC. +FLASH_SIZE_KB = 32 +BOOT_SECTION_SIZE_KB = 4 +BOOT_START = 0x$(shell echo "obase=16; ($(FLASH_SIZE_KB) - $(BOOT_SECTION_SIZE_KB)) * 1024" | bc) + + +# Output format. (can be srec, ihex, binary) +FORMAT = ihex + + +# Target file name (without extension). +TARGET = Caterina + + +# Object files directory +# To put object files in current directory, use a dot (.), do NOT make +# this an empty or blank macro! +OBJDIR = . + + +# Path to the LUFA library +LUFA_PATH = LUFA-111009 + + +# LUFA library compile-time options and predefined tokens +LUFA_OPTS = -D USB_DEVICE_ONLY +LUFA_OPTS += -D DEVICE_STATE_AS_GPIOR=0 +LUFA_OPTS += -D ORDERED_EP_CONFIG +LUFA_OPTS += -D FIXED_CONTROL_ENDPOINT_SIZE=8 +LUFA_OPTS += -D FIXED_NUM_CONFIGURATIONS=1 +LUFA_OPTS += -D USE_RAM_DESCRIPTORS +LUFA_OPTS += -D USE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" +LUFA_OPTS += -D NO_INTERNAL_SERIAL +LUFA_OPTS += -D NO_DEVICE_SELF_POWER +LUFA_OPTS += -D NO_DEVICE_REMOTE_WAKEUP +LUFA_OPTS += -D NO_SOF_EVENTS + +#LUFA_OPTS += -D NO_BLOCK_SUPPORT +#LUFA_OPTS += -D NO_EEPROM_BYTE_SUPPORT +#LUFA_OPTS += -D NO_FLASH_BYTE_SUPPORT +LUFA_OPTS += -D NO_LOCK_BYTE_WRITE_SUPPORT + + +# Create the LUFA source path variables by including the LUFA root makefile +include $(LUFA_PATH)/LUFA/makefile + + +# List C source files here. (C dependencies are automatically generated.) +SRC = $(TARGET).c \ + Descriptors.c \ + $(LUFA_SRC_USB) \ + + +# List C++ source files here. (C dependencies are automatically generated.) +CPPSRC = + + +# List Assembler source files here. +# Make them always end in a capital .S. Files ending in a lowercase .s +# will not be considered source files but generated files (assembler +# output from the compiler), and will be deleted upon "make clean"! +# Even though the DOS/Win* filesystem matches both .s and .S the same, +# it will preserve the spelling of the filenames, and gcc itself does +# care about how the name is spelled on its command-line. +ASRC = + + +# Optimization level, can be [0, 1, 2, 3, s]. +# 0 = turn off optimization. s = optimize for size. +# (Note: 3 is not always the best optimization level. See avr-libc FAQ.) +OPT = s + + +# Debugging format. +# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs. +# AVR Studio 4.10 requires dwarf-2. +# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run. +DEBUG = dwarf-2 + + +# List any extra directories to look for include files here. +# Each directory must be seperated by a space. +# Use forward slashes for directory separators. +# For a directory that has spaces, enclose it in quotes. +EXTRAINCDIRS = $(LUFA_PATH)/ + + +# Compiler flag to set the C Standard level. +# c89 = "ANSI" C +# gnu89 = c89 plus GCC extensions +# c99 = ISO C99 standard (not yet fully implemented) +# gnu99 = c99 plus GCC extensions +CSTANDARD = -std=c99 + + +# Place -D or -U options here for C sources +CDEFS = -DF_CPU=$(F_CPU)UL +CDEFS += -DF_USB=$(F_USB)UL +CDEFS += -DBOARD=BOARD_$(BOARD) -DARCH=ARCH_$(ARCH) +CDEFS += -DBOOT_START_ADDR=$(BOOT_START)UL +CDEFS += -DDEVICE_VID=$(VID)UL +CDEFS += -DDEVICE_PID=$(PID)UL +CDEFS += $(LUFA_OPTS) + + +# Place -D or -U options here for ASM sources +ADEFS = -DF_CPU=$(F_CPU) +ADEFS += -DF_USB=$(F_USB)UL +ADEFS += -DBOARD=BOARD_$(BOARD) +ADEFS += -DBOOT_START_ADDR=$(BOOT_START)UL +ADEFS += $(LUFA_OPTS) + + +# Place -D or -U options here for C++ sources +CPPDEFS = -DF_CPU=$(F_CPU)UL +CPPDEFS += -DF_USB=$(F_USB)UL +CPPDEFS += -DBOARD=BOARD_$(BOARD) +CPPDEFS += -DBOOT_START_ADDR=$(BOOT_START)UL +CPPDEFS += $(LUFA_OPTS) +#CPPDEFS += -D__STDC_LIMIT_MACROS +#CPPDEFS += -D__STDC_CONSTANT_MACROS + + + +#---------------- Compiler Options C ---------------- +# -g*: generate debugging information +# -O*: optimization level +# -f...: tuning, see GCC manual and avr-libc documentation +# -Wall...: warning level +# -Wa,...: tell GCC to pass this to the assembler. +# -adhlns...: create assembler listing +CFLAGS = -g$(DEBUG) +CFLAGS += $(CDEFS) +CFLAGS += -O$(OPT) +CFLAGS += -funsigned-char +CFLAGS += -funsigned-bitfields +CFLAGS += -ffunction-sections +CFLAGS += -fno-inline-small-functions +CFLAGS += -fpack-struct +CFLAGS += -fshort-enums +CFLAGS += -fno-strict-aliasing +CFLAGS += -Wall +CFLAGS += -Wstrict-prototypes +#CFLAGS += -mshort-calls +#CFLAGS += -fno-unit-at-a-time +#CFLAGS += -Wundef +#CFLAGS += -Wunreachable-code +#CFLAGS += -Wsign-compare +CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst) +CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) +CFLAGS += $(CSTANDARD) + + +#---------------- Compiler Options C++ ---------------- +# -g*: generate debugging information +# -O*: optimization level +# -f...: tuning, see GCC manual and avr-libc documentation +# -Wall...: warning level +# -Wa,...: tell GCC to pass this to the assembler. +# -adhlns...: create assembler listing +CPPFLAGS = -g$(DEBUG) +CPPFLAGS += $(CPPDEFS) +CPPFLAGS += -O$(OPT) +CPPFLAGS += -funsigned-char +CPPFLAGS += -funsigned-bitfields +CPPFLAGS += -fpack-struct +CPPFLAGS += -fshort-enums +CPPFLAGS += -fno-exceptions +CPPFLAGS += -Wall +CPPFLAGS += -Wundef +#CPPFLAGS += -mshort-calls +#CPPFLAGS += -fno-unit-at-a-time +#CPPFLAGS += -Wstrict-prototypes +#CPPFLAGS += -Wunreachable-code +#CPPFLAGS += -Wsign-compare +CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst) +CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) +#CPPFLAGS += $(CSTANDARD) + + +#---------------- Assembler Options ---------------- +# -Wa,...: tell GCC to pass this to the assembler. +# -adhlns: create listing +# -gstabs: have the assembler create line number information; note that +# for use in COFF files, additional information about filenames +# and function names needs to be present in the assembler source +# files -- see avr-libc docs [FIXME: not yet described there] +# -listing-cont-lines: Sets the maximum number of continuation lines of hex +# dump that will be displayed for a given single line of source input. +ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100 + + +#---------------- Library Options ---------------- +# Minimalistic printf version +PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min + +# Floating point printf version (requires MATH_LIB = -lm below) +PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt + +# If this is left blank, then it will use the Standard printf version. +PRINTF_LIB = +#PRINTF_LIB = $(PRINTF_LIB_MIN) +#PRINTF_LIB = $(PRINTF_LIB_FLOAT) + + +# Minimalistic scanf version +SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min + +# Floating point + %[ scanf version (requires MATH_LIB = -lm below) +SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt + +# If this is left blank, then it will use the Standard scanf version. +SCANF_LIB = +#SCANF_LIB = $(SCANF_LIB_MIN) +#SCANF_LIB = $(SCANF_LIB_FLOAT) + + +MATH_LIB = -lm + + +# List any extra directories to look for libraries here. +# Each directory must be seperated by a space. +# Use forward slashes for directory separators. +# For a directory that has spaces, enclose it in quotes. +EXTRALIBDIRS = + + + +#---------------- External Memory Options ---------------- + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# used for variables (.data/.bss) and heap (malloc()). +#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# only used for heap (malloc()). +#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff + +EXTMEMOPTS = + + + +#---------------- Linker Options ---------------- +# -Wl,...: tell GCC to pass this to linker. +# -Map: create map file +# --cref: add cross reference to map file +LDFLAGS = -Wl,-Map=$(TARGET).map,--cref +LDFLAGS += -Wl,--section-start=.text=$(BOOT_START) +LDFLAGS += -Wl,--relax +LDFLAGS += -Wl,--gc-sections +LDFLAGS += $(EXTMEMOPTS) +LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS)) +LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) +#LDFLAGS += -T linker_script.x + + + +#---------------- Programming Options (avrdude) ---------------- + +# Programming hardware +# Type: avrdude -c ? +# to get a full listing. +# +#AVRDUDE_PROGRAMMER = avrispmkII +AVRDUDE_PROGRAMMER = usbtiny + +# com1 = serial port. Use lpt1 to connect to parallel port. +AVRDUDE_PORT = usb + +AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex +#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep + + +# Uncomment the following if you want avrdude's erase cycle counter. +# Note that this counter needs to be initialized first using -Yn, +# see avrdude manual. +#AVRDUDE_ERASE_COUNTER = -y + +# Uncomment the following if you do /not/ wish a verification to be +# performed after programming the device. +#AVRDUDE_NO_VERIFY = -V + +# Increase verbosity level. Please use this when submitting bug +# reports about avrdude. See +# to submit bug reports. +#AVRDUDE_VERBOSE = -v -v + +AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) +AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY) +AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE) +AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER) + + + +#---------------- Debugging Options ---------------- + +# For simulavr only - target MCU frequency. +DEBUG_MFREQ = $(F_CPU) + +# Set the DEBUG_UI to either gdb or insight. +# DEBUG_UI = gdb +DEBUG_UI = insight + +# Set the debugging back-end to either avarice, simulavr. +DEBUG_BACKEND = avarice +#DEBUG_BACKEND = simulavr + +# GDB Init Filename. +GDBINIT_FILE = __avr_gdbinit + +# When using avarice settings for the JTAG +JTAG_DEV = /dev/com1 + +# Debugging port used to communicate between GDB / avarice / simulavr. +DEBUG_PORT = 4242 + +# Debugging host used to communicate between GDB / avarice / simulavr, normally +# just set to localhost unless doing some sort of crazy debugging when +# avarice is running on a different computer. +DEBUG_HOST = localhost + + + +#============================================================================ + + +# Define programs and commands. +SHELL = sh +CC = avr-gcc +OBJCOPY = avr-objcopy +OBJDUMP = avr-objdump +SIZE = avr-size +AR = avr-ar rcs +NM = avr-nm +#AVRDUDE = /Applications/avrdude -C /Applications/avrdude.conf -B 1 +AVRDUDE = /home/david/tmp/Arduino-master/build/linux/dist/tools/avrdude -B 1 -C /home/david/tmp/Arduino-master/build/linux/dist/tools/avrdude.conf +REMOVE = rm -f +REMOVEDIR = rm -rf +COPY = cp +WINSHELL = cmd + + +# Define Messages +# English +MSG_ERRORS_NONE = Errors: none +MSG_BEGIN = -------- begin -------- +MSG_END = -------- end -------- +MSG_SIZE_BEFORE = Size before: +MSG_SIZE_AFTER = Size after: +MSG_COFF = Converting to AVR COFF: +MSG_EXTENDED_COFF = Converting to AVR Extended COFF: +MSG_FLASH = Creating load file for Flash: +MSG_EEPROM = Creating load file for EEPROM: +MSG_EXTENDED_LISTING = Creating Extended Listing: +MSG_SYMBOL_TABLE = Creating Symbol Table: +MSG_LINKING = Linking: +MSG_COMPILING = Compiling C: +MSG_COMPILING_CPP = Compiling C++: +MSG_ASSEMBLING = Assembling: +MSG_CLEANING = Cleaning project: +MSG_CREATING_LIBRARY = Creating library: + + + + +# Define all object files. +OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) + +# Define all listing files. +LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) + + +# Compiler flags to generate dependency files. +GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d + + +# Combine all necessary flags and optional flags. +# Add target processor to flags. +ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS) +ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS) +ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) + + + + + +# Default target. +all: begin gccversion sizebefore build sizeafter end + +# Change the build target to build a HEX file or a library. +build: elf hex eep lss sym +#build: lib + + +elf: $(TARGET).elf +hex: $(TARGET).hex +eep: $(TARGET).eep +lss: $(TARGET).lss +sym: $(TARGET).sym +LIBNAME=lib$(TARGET).a +lib: $(LIBNAME) + + + +# Eye candy. +# AVR Studio 3.x does not check make's exit code but relies on +# the following magic strings to be generated by the compile job. +begin: + @echo + @echo $(MSG_BEGIN) + +end: + @echo $(MSG_END) + @echo + + +# Display size of file. +HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex +ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf +MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) ) +FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr ) + + +sizebefore: + @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \ + 2>/dev/null; echo; fi + +sizeafter: + @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \ + 2>/dev/null; echo; fi + + + +# Display compiler version information. +gccversion : + @$(CC) --version + + +# Program the device. +program: $(TARGET).hex $(TARGET).eep + $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) + + +# Generate avr-gdb config/init file which does the following: +# define the reset signal, load the target file, connect to target, and set +# a breakpoint at main(). +gdb-config: + @$(REMOVE) $(GDBINIT_FILE) + @echo define reset >> $(GDBINIT_FILE) + @echo SIGNAL SIGHUP >> $(GDBINIT_FILE) + @echo end >> $(GDBINIT_FILE) + @echo file $(TARGET).elf >> $(GDBINIT_FILE) + @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE) +ifeq ($(DEBUG_BACKEND),simulavr) + @echo load >> $(GDBINIT_FILE) +endif + @echo break main >> $(GDBINIT_FILE) + +debug: gdb-config $(TARGET).elf +ifeq ($(DEBUG_BACKEND), avarice) + @echo Starting AVaRICE - Press enter when "waiting to connect" message displays. + @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \ + $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT) + @$(WINSHELL) /c pause + +else + @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \ + $(DEBUG_MFREQ) --port $(DEBUG_PORT) +endif + @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE) + + + + +# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. +COFFCONVERT = $(OBJCOPY) --debugging +COFFCONVERT += --change-section-address .data-0x800000 +COFFCONVERT += --change-section-address .bss-0x800000 +COFFCONVERT += --change-section-address .noinit-0x800000 +COFFCONVERT += --change-section-address .eeprom-0x810000 + + + +coff: $(TARGET).elf + @echo + @echo $(MSG_COFF) $(TARGET).cof + $(COFFCONVERT) -O coff-avr $< $(TARGET).cof + + +extcoff: $(TARGET).elf + @echo + @echo $(MSG_EXTENDED_COFF) $(TARGET).cof + $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof + + + +# Create final output files (.hex, .eep) from ELF output file. +%.hex: %.elf + @echo + @echo $(MSG_FLASH) $@ + $(OBJCOPY) -O $(FORMAT) -R .eeprom -R .fuse -R .lock $< $@ + +%.eep: %.elf + @echo + @echo $(MSG_EEPROM) $@ + -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ + --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0 + +# Create extended listing file from ELF output file. +%.lss: %.elf + @echo + @echo $(MSG_EXTENDED_LISTING) $@ + $(OBJDUMP) -h -S -z $< > $@ + +# Create a symbol table from ELF output file. +%.sym: %.elf + @echo + @echo $(MSG_SYMBOL_TABLE) $@ + $(NM) -n $< > $@ + + + +# Create library from object files. +.SECONDARY : $(TARGET).a +.PRECIOUS : $(OBJ) +%.a: $(OBJ) + @echo + @echo $(MSG_CREATING_LIBRARY) $@ + $(AR) $@ $(OBJ) + + +# Link: create ELF output file from object files. +.SECONDARY : $(TARGET).elf +.PRECIOUS : $(OBJ) +%.elf: $(OBJ) + @echo + @echo $(MSG_LINKING) $@ + $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS) + + +# Compile: create object files from C source files. +$(OBJDIR)/%.o : %.c + @echo + @echo $(MSG_COMPILING) $< + $(CC) -c $(ALL_CFLAGS) $< -o $@ + + +# Compile: create object files from C++ source files. +$(OBJDIR)/%.o : %.cpp + @echo + @echo $(MSG_COMPILING_CPP) $< + $(CC) -c $(ALL_CPPFLAGS) $< -o $@ + + +# Compile: create assembler files from C source files. +%.s : %.c + $(CC) -S $(ALL_CFLAGS) $< -o $@ + + +# Compile: create assembler files from C++ source files. +%.s : %.cpp + $(CC) -S $(ALL_CPPFLAGS) $< -o $@ + + +# Assemble: create object files from assembler source files. +$(OBJDIR)/%.o : %.S + @echo + @echo $(MSG_ASSEMBLING) $< + $(CC) -c $(ALL_ASFLAGS) $< -o $@ + + +# Create preprocessed source for use in sending a bug report. +%.i : %.c + $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ + + +# Target: clean project. +clean: begin clean_list end + +clean_list : + @echo + @echo $(MSG_CLEANING) + $(REMOVE) $(TARGET).hex + $(REMOVE) $(TARGET).eep + $(REMOVE) $(TARGET).cof + $(REMOVE) $(TARGET).elf + $(REMOVE) $(TARGET).map + $(REMOVE) $(TARGET).sym + $(REMOVE) $(TARGET).lss + $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) + $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) + $(REMOVE) $(SRC:.c=.s) + $(REMOVE) $(SRC:.c=.d) + $(REMOVE) $(SRC:.c=.i) + $(REMOVEDIR) .dep + +doxygen: + @echo Generating Project Documentation \($(TARGET)\)... + @doxygen Doxygen.conf + @echo Documentation Generation Complete. + +clean_doxygen: + rm -rf Documentation + +checksource: + @for f in $(SRC) $(CPPSRC) $(ASRC); do \ + if [ -f $$f ]; then \ + echo "Found Source File: $$f" ; \ + else \ + echo "Source File Not Found: $$f" ; \ + fi; done + + +# Create object files directory +$(shell mkdir $(OBJDIR) 2>/dev/null) + + +# Include the dependency files. +-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*) + + +# Listing of phony targets. +.PHONY : all begin finish end sizebefore sizeafter gccversion \ +build elf hex eep lss sym coff extcoff doxygen clean \ +clean_list clean_doxygen program debug gdb-config checksource + diff --git a/external/arduino/avr/bootloaders/caterina-Arduino_Robot/README.md b/external/arduino/avr/bootloaders/caterina-Arduino_Robot/README.md new file mode 100644 index 000000000..08235e0a4 --- /dev/null +++ b/external/arduino/avr/bootloaders/caterina-Arduino_Robot/README.md @@ -0,0 +1,27 @@ +Building the bootloader for the Arduino Robot +============================================= + +The Arduino Robot has two boards featuring the atmega32U4 processor from Atmel. Each one of them is identified as a different board at the USB level and has a different bootloader. + +The Arduino Robot Control board has the USB identifier 0x0038. This is the value configured by default in the Makefile. + +The Arduino Robot Motor board has the USB identifier 0x0039. If you want to compile/upload this version of the bootloader, you will have to edit the Makefile, comment away the like dedicated to the PID and uncomment the one that configures such variable accordingly. + +The general conditions for using these bootloaders require downloading a specific version of LUFA as explained here: + +1. Download the LUFA-111009 file (http://fourwalledcubicle.com/blog/2011/10/lufa-111009-released/). +2. Extract that file directly to the Caterina-Arduino_Robot bootloader directory. +3. Open a command prompt in the Caterina-Arduino_Robot bootloader directory. +4. Type 'make'. +5. Enjoy! + +Programming the bootloader for one of the Arduino Robot boards +1. Open a command prompt in the Caterina-Arduino_Robot folder. +2. Connect your programmer- use a 2x3 .1" header, pressed against the programming vias. +3. Edit the make file for it to include the right programmer (e.g. in my lab I have AVRMKII and USBTINY ISP) +4. Type 'make program' into the command prompt. + +Differences between this bootoloader and the standard one for Leonardo boards +============================================================================= + +This bootloader is different from the one on the standard Leonardo boards. To enter the bootloader, you need to double click the reset button. You need to click twice in less that 3/4 of a second (easy uh?). This bootloader, designed in the first place for the LilypadUSB, seems to be optimal for situations when users are e.g. using their robots in soccer competitions where they make direct manipulation of the board as it runs. diff --git a/external/arduino/avr/bootloaders/caterina-LilyPadUSB/Caterina-LilyPadUSB.hex b/external/arduino/avr/bootloaders/caterina-LilyPadUSB/Caterina-LilyPadUSB.hex new file mode 100644 index 000000000..d85ee45ed --- /dev/null +++ b/external/arduino/avr/bootloaders/caterina-LilyPadUSB/Caterina-LilyPadUSB.hex @@ -0,0 +1,259 @@ +:1070000055C000006EC000006CC000006AC00000E7 +:1070100068C0000066C0000064C0000062C00000DC +:1070200060C000005EC00000FCC400005AC0000048 +:1070300058C0000056C0000054C0000052C00000FC +:1070400050C000005DC000004CC000004AC00000FD +:1070500048C0000046C0000044C0000042C000001C +:1070600040C000003EC000003CC000003AC000002C +:1070700038C0000036C0000034C0000032C000003C +:1070800030C000002EC000002CC000002AC000004C +:1070900028C0000026C0000024C0000022C000005C +:1070A00020C000001EC000001CC0000011241FBE34 +:1070B000CFEFDAE0DEBFCDBF11E0A0E0B1E0E2E467 +:1070C000FFE702C005900D92A83BB107D9F711E088 +:1070D000A8EBB1E001C01D92A13DB107E1F74FD38C +:1070E0002EC78ECFF89410926F001092810081E02D +:1070F00085BF15BE47985D9A289A0C9400000895A4 +:107100001F920F920FB60F9211242F938F939F937C +:10711000EF93FF9310928500109284008091B80144 +:107120009091B901009741F001979093B901809334 +:10713000B801892B09F45D9A8091BA019091BB0145 +:10714000009741F001979093BB018093BA01892B7E +:1071500009F4289A8091BE019091BF010196909305 +:10716000BF018093BE01E0E0F0E0859194918F5FD4 +:107170009F4F49F08091BC019091BD010196909381 +:10718000BD018093BC01FF91EF919F918F912F9151 +:107190000F900FBE0F901F90189584E08093E90028 +:1071A0000DC08091E8008B778093E80003C08EB318 +:1071B000882351F08091E80082FFF9CF8091E800A8 +:1071C00085FFEFCF8091F1000895982F83E08093A1 +:1071D000E9008091E80085FD0DC08091E8008E7780 +:1071E0008093E80003C08EB3882369F08091E800A3 +:1071F00080FFF9CF9093F1005D9884E690E0909342 +:10720000B9018093B80108954F925F926F927F9277 +:107210008F929F92AF92BF92CF92DF92EF92FF92A6 +:107220000F931F93CF93DF9384E08093E9008091C5 +:10723000E80082FF57C2289884E690E09093BB0153 +:107240008093BA01AADF182F853481F48CEA9DE07F +:107250009093BD018093BC0107B600FCFDCFF99966 +:10726000FECF81E180935700E89503C0843519F47F +:1072700094DF8DE00DC28C34E1F38035D1F3843797 +:1072800021F484E4A2DF80E003C2813611F489E5B1 +:10729000FFC18134B1F481DF182F7FDF90E0880FC8 +:1072A000991FAA2797FDA095BA2F312F330F20E001 +:1072B000442737FD4095542F822B932BA42BB52BBD +:1072C000B8C1803711F483E5E3C1833549F4C0E0E8 +:1072D000D1E089917ADF21E0C730D207D1F7D9C157 +:1072E000863521F481E371DF80E3D2C1833731F445 +:1072F00087E86BDF85E969DF8EE1CAC18536B9F4BD +:10730000E0E0F0E093E085E090935700E89507B661 +:1073100000FCFDCF80935700E89507B600FCFDCF39 +:10732000E058FF4FA0E7E030FA0771F7A2CF8237AD +:1073300039F4E1E0F0E089E0809357008491A8C13E +:10734000863439F4E0E0F0E089E0809357008491DE +:107350009FC18E3439F4E3E0F0E089E08093570078 +:10736000849196C1813539F4E2E0F0E089E08093C0 +:10737000570084918DC1823631F489E526DF80E0A3 +:1073800024DF80E885C1823419F0873609F0E5C032 +:107390001092BD011092BC0100DF082FFEDEF82E16 +:1073A000FCDE682E8554823008F071C1902F80E099 +:1073B000CF2DD0E0C82BD92B10926F00173609F0D3 +:1073C0004BC081E180935700E895DD24CC24C39421 +:1073D0003FC0E090C101F090C2010091C301109143 +:1073E000C401B6E46B16D9F4ED2DF0E0EE29FF29C7 +:1073F000E4918E2FEADEDD2081F082E090E0A0E0D3 +:10740000B0E0E80EF91E0A1F1B1FE092C101F092C6 +:10741000C2010093C3011093C401DC2418C0D80139 +:10742000C701B695A7959795879573D5CEDE82E06F +:1074300090E0A0E0B0E0E80EF91E0A1F1B1FE092EA +:10744000C101F092C2010093C3011093C4012197BE +:10745000209709F0BECF7DC08090C1019090C201FD +:10746000A090C301B090C40196E4691609F05DC014 +:1074700083E0F40180935700E89507B600FCFDCF48 +:1074800054C0F6E46F1661F5772031F1E090C10148 +:10749000F090C2010091C3011091C4017EDED82E8C +:1074A000CC24852D90E08C299D29F7010C01409278 +:1074B0005700E895112482E090E0A0E0B0E0E80EEB +:1074C000F91E0A1F1B1FE092C101F092C201009336 +:1074D000C3011093C40102C060DE582E742423C07F +:1074E000E090C101F090C2010091C3011091C4016C +:1074F00016950795F794E79450DE682FC70111D5CC +:107500008091C1019091C201A091C301B091C401C9 +:107510000296A11DB11D8093C1019093C201A09359 +:10752000C301B093C401219704C055247724442497 +:107530004394209709F0A5CF96E4691641F485E0BD +:10754000F40180935700E89507B600FCFDCF8DE06D +:107550003CDE82E080936F009CC0833471F4009124 +:10756000C1011091C20119DE90E021E0F8010C0187 +:1075700020935700E89511247CCE833619F5E090CE +:10758000C101F090C2010091C3011091C40105DE58 +:10759000F701E16090E021E00C0120935700E895AD +:1075A000112482E090E0A0E0B0E0E80EF91E0A1F8E +:1075B0001B1FE092C101F092C2010093C30110931E +:1075C000C40157CE8D3661F4E091C101F091C20142 +:1075D00085E080935700E89507B600FCFDCF49CEC3 +:1075E000823551F4E091C101F091C20105911491ED +:1075F000812FEBDD802F4CC0843421F5E090C10158 +:10760000F090C2010091C3011091C4011695079535 +:10761000F794E794C2DD682FC70183D48091C1013C +:107620009091C201A091C301B091C4010296A11D25 +:10763000B11D8093C1019093C201A093C301B09387 +:10764000C40117CE843609F5E090C101F090C20163 +:107650000091C3011091C401D801C701B695A79547 +:107660009795879556D4B1DD82E090E0A0E0B0E038 +:10767000E80EF91E0A1F1B1FE092C101F092C20121 +:107680000093C3011093C40104C08B3111F08FE348 +:107690009CDD83E08093E9009091E8008091E80010 +:1076A0008E778093E80095FF04C010C08EB38823C6 +:1076B000C9F08091E80080FFF9CF8091E8008E77D3 +:1076C0008093E80003C08EB3882361F08091E800C6 +:1076D00080FFF9CF84E08093E9008091E8008B7708 +:1076E0008093E800DF91CF911F910F91FF90EF9071 +:1076F000DF90CF90BF90AF909F908F907F906F90D2 +:107700005F904F9008959091C901892F8F778132B2 +:1077100049F58091CA018032A1F0813219F5913A80 +:1077200009F58091E800877F8093E8008CE091E084 +:1077300067E070E025D28091E8008B778093E800C5 +:107740000895913279F48091E800877F8093E80072 +:107750008CE091E067E070E077D28091E8008E776E +:107760008093E800089582E061EC42E0D1D083E0AC +:1077700061E842E1CDD084E060E842E1C9C01F93F6 +:10778000209100081092000844B714BE88E10FB69B +:10779000F89480936000109260000FBE80E8E0E0F3 +:1077A000F0E00FB6F89480936100E09361000FBEA3 +:1077B00031E035BF92E095BF3F9A209A559A809369 +:1077C00061001092610047985D9A289A1092890092 +:1077D0008AEF8093880090936F0083E0809381000C +:1077E000859194918F5F9F4F11F03093C001942F3A +:1077F00041FF19C0809109012817A9F08093000862 +:10780000789480911301882339F08091BE01909182 +:10781000BF0188579140C8F310920008F89481E0A6 +:10782000809313010CC090FF04C08091C001882395 +:1078300051F493FF09C080910901281729F0809124 +:10784000C001882309F04EDCD4D078941092BD0199 +:107850001092BC011EEF20C0D7DC49D38091BC013F +:107860009091BD01815A9F4010F0109213018091B8 +:10787000C5019091C60101969093C6018093C50100 +:10788000292F97FF03C0512F591B252F220F28178F +:1078900010F4479801C0479A809113018823E1F6BC +:1078A0008091E00081608093E0001CDC80E090E04B +:1078B0001F910895FA01923049F0933061F09130B0 +:1078C000F9F484E191E022E130E01EC086E291E02B +:1078D0002EE330E019C0882329F484E691E024E007 +:1078E00030E012C0813029F488E691E022E230E0F5 +:1078F0000BC0823029F48CE891E02AE230E004C029 +:1079000080E090E020E030E091838083C901089519 +:107910008093E9008091EB0081608093EB001092EE +:10792000ED006093EC004093ED008091EE00881F25 +:107930008827881F08958091C90188238CF403C08B +:107940008EB38823B1F08091E80082FFF9CF809157 +:10795000E8008B778093E80008958EB3882349F080 +:107960008091E80080FFF9CF8091E8008E778093C6 +:10797000E8000895EF92FF920F931F9345D04CD0EB +:1079800008ED10E0F80180818F7780838081806826 +:10799000808380818F7D808319BC1EBA1092C701BD +:1079A00080EEE82EF12CF70180818B7F8083F80137 +:1079B00080818160808380E060E042E0A9DFE1EEC9 +:1079C000F0E080818E7F8083E2EEF0E08081816054 +:1079D0008083808188608083F70180818E7F8083AF +:1079E000F8018081806180831F910F91FF90EF905B +:1079F0000895E7EDF0E08081816080838AE482BFB2 +:107A000081E08093C801B6CFE8EDF0E080818E7F01 +:107A100080831092E20008951092DA001092E10043 +:107A200008951F920F920FB60F9211242F933F9338 +:107A30004F935F936F937F938F939F93AF93BF9376 +:107A4000EF93FF938091DA0080FF1AC08091D800F5 +:107A500080FF16C08091DA008E7F8093DA008091DB +:107A6000D90080FF0AC019BC82E089BD09B400FEBC +:107A7000FDCF81E08EBB3AD203C019BC1EBA36D20C +:107A80008091E10080FF17C08091E20080FF13C069 +:107A90008091E2008E7F8093E2008091E20080611D +:107AA0008093E2008091D80080628093D80019BC56 +:107AB00085E08EBB1BD28091E10084FF2BC08091BA +:107AC000E20084FF27C019BC82E089BD09B400FE32 +:107AD000FDCF8091D8008F7D8093D8008091E10008 +:107AE0008F7E8093E1008091E2008F7E8093E200A0 +:107AF0008091E20081608093E2008091C701882339 +:107B000031F48091E30087FD02C081E001C084E090 +:107B10008EBBECD18091E10083FF21C08091E20017 +:107B200083FF1DC08091E100877F8093E10082E0A8 +:107B30008EBB1092C7018091E1008E7F8093E1009F +:107B40008091E2008E7F8093E2008091E20080616C +:107B50008093E20080E060E042E0DADEC7D1FF918E +:107B6000EF91BF91AF919F918F917F916F915F91B5 +:107B70004F913F912F910F900FBE0F901F9018952E +:107B80009C014091CF015091D0014617570718F43E +:107B9000F90190E044C06115710511F0AB01F8CF17 +:107BA0008091E8008E778093E80040E050E0F0CFCD +:107BB0008EB3882309F444C0853009F443C0809112 +:107BC000E80083FF02C081E008958091E80082FD13 +:107BD00031C08091E80080FF22C08091F300909135 +:107BE000F200782F60E0292F30E0262B372B07C0DA +:107BF00081918093F100415050402F5F3F4F4115DC +:107C0000510519F02830310598F390E028303105FE +:107C100009F491E08091E8008E778093E8004115A7 +:107C2000510531F6992321F605C08EB3882341F022 +:107C3000853041F08091E80082FFF7CF80E0089521 +:107C400082E0089583E008959C016115710529F48F +:107C50008091E8008B778093E800F90126C08EB30D +:107C6000882391F1853091F18091E80083FF02C073 +:107C700081E008958091E80082FFF1CF06C08091F5 +:107C8000F10081936150704059F02091F300809190 +:107C9000F200322F20E090E0822B932B892B79F792 +:107CA0008091E8008B778093E80061157105B9F643 +:107CB00005C08EB3882341F0853041F08091E80003 +:107CC00080FFF7CF80E0089582E0089583E0089573 +:107CD0000F931F93DF93CF9300D0CDB7DEB7E9ECBE +:107CE000F1E08091F100819381E0E13DF807C9F76F +:107CF0000ADD8091E80083FFE4C08091C901909182 +:107D0000CA01953009F46DC0963040F4913081F18C +:107D1000913070F0933009F0D4C02AC0983009F443 +:107D2000A3C0993009F4B2C0963009F0CAC07CC033 +:107D3000803809F4C6C0823809F0C3C08091CD01F3 +:107D400087708093E9008091EB001092E900209108 +:107D5000E800277F2093E80090E025E0969587953E +:107D60002A95E1F781708093F1001092F10087C0AD +:107D7000882319F0823009F0A4C08F71823009F095 +:107D8000A0C08091CB01882331F52091CD012770CF +:107D900009F497C02093E9008091EB0080FF1BC09D +:107DA000933021F48091EB00806213C08091EB004E +:107DB00080618093EB0081E090E002C0880F991F02 +:107DC0002A95E2F78093EA001092EA008091EB0096 +:107DD00088608093EB001092E9008091E800877F33 +:107DE00051C0882309F06DC01091CB011F770FB7E8 +:107DF000F8948091E800877F8093E8009CDD809173 +:107E0000E80080FFFCCF8091E3008078812B809395 +:107E1000E30080688093E300112311F482E001C045 +:107E200083E08EBB0FBF4DC08058823008F049C040 +:107E30008091CB019091CC016091CD01AE014F5F5B +:107E40005F4F38DDBC01009709F43BC08091E8002A +:107E5000877F8093E80089819A8192DE8091E80093 +:107E60008B778093E8002DC0803859F58091E80029 +:107E7000877F8093E8008091C7018093F100809113 +:107E8000E8008E778093E80056DD1BC08823C9F494 +:107E90009091CB019230A8F48091E800877F809385 +:107EA000E8009093C70147DD8091C701882331F432 +:107EB0008091E30087FD02C081E001C084E08EBBB9 +:107EC00052DC8091E80083FF0AC08091EB00806261 +:107ED0008093EB008091E800877F8093E8000F900B +:107EE0000F90CF91DF911F910F91089508951F93E7 +:107EF0008EB3882361F01091E9001092E90080911F +:107F0000E80083FF01C0E4DE17701093E9001F91C1 +:107F10000895F999FECF92BD81BDF89A992780B551 +:107F20000895262FF999FECF1FBA92BD81BD20BDBD +:107F30000FB6F894FA9AF99A0FBE01960895F8943C +:027F4000FFCF71 +:107F42004341544552494E41007700080000000069 +:107F52000000080112011001020000084F1B0792E5 +:107F620001000201000109023E0002010080320903 +:107F72000400000102020100052400100104240291 +:107F8200040524060001070582030800FF09040115 +:107F920000020A0000000705040210000107058321 +:107FA200021000010403090422034C0069006C0062 +:107FB2007900500061006400550053004200200027 +:107FC2002000200020002000200000002A0353008F +:107FD2007000610072006B00460075006E002000A8 +:107FE20045006C0065006300740072006F006E0053 +:087FF200690063007300000048 +:040000030000700089 +:00000001FF diff --git a/external/arduino/avr/bootloaders/caterina-LilyPadUSB/Caterina.c b/external/arduino/avr/bootloaders/caterina-LilyPadUSB/Caterina.c new file mode 100644 index 000000000..296c62b5b --- /dev/null +++ b/external/arduino/avr/bootloaders/caterina-LilyPadUSB/Caterina.c @@ -0,0 +1,780 @@ +/* + LUFA Library + Copyright (C) Dean Camera, 2011. + + dean [at] fourwalledcubicle [dot] com + www.lufa-lib.org +*/ + +/* + Copyright 2011 Dean Camera (dean [at] fourwalledcubicle [dot] com) + + Permission to use, copy, modify, distribute, and sell this + software and its documentation for any purpose is hereby granted + without fee, provided that the above copyright notice appear in + all copies and that both that the copyright notice and this + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the + software without specific, written prior permission. + + The author disclaim all warranties with regard to this + software, including all implied warranties of merchantability + and fitness. In no event shall the author be liable for any + special, indirect or consequential damages or any damages + whatsoever resulting from loss of use, data or profits, whether + in an action of contract, negligence or other tortious action, + arising out of or in connection with the use or performance of + this software. +*/ + +/** \file + * + * Main source file for the CDC class bootloader. This file contains the complete bootloader logic. + */ + +#define INCLUDE_FROM_CATERINA_C +#include "Caterina.h" + +/** Contains the current baud rate and other settings of the first virtual serial port. This must be retained as some + * operating systems will not open the port unless the settings can be set successfully. + */ +static CDC_LineEncoding_t LineEncoding = { .BaudRateBPS = 0, + .CharFormat = CDC_LINEENCODING_OneStopBit, + .ParityType = CDC_PARITY_None, + .DataBits = 8 }; + +/** Current address counter. This stores the current address of the FLASH or EEPROM as set by the host, + * and is used when reading or writing to the AVRs memory (either FLASH or EEPROM depending on the issued + * command.) + */ +static uint32_t CurrAddress; + +/** Flag to indicate if the bootloader should be running, or should exit and allow the application code to run + * via a watchdog reset. When cleared the bootloader will exit, starting the watchdog and entering an infinite + * loop until the AVR restarts and the application runs. + */ +static bool RunBootloader = true; + +/* Pulse generation counters to keep track of the time remaining for each pulse type */ +#define TX_RX_LED_PULSE_PERIOD 100 +uint16_t TxLEDPulse = 0; // time remaining for Tx LED pulse +uint16_t RxLEDPulse = 0; // time remaining for Rx LED pulse + +/* Bootloader timeout timer */ +// MAH 8/15/12- change so timeouts work properly when the chip is running at 8MHz instead of 16. +#define TIMEOUT_PERIOD 4000 +#define EXT_RESET_TIMEOUT_PERIOD 375 + + +/********************************************************************************************************* +LilyPadUSB bootloader code +The LilyPadUSB bootloader has been changed to remove the 8-second delay after external reset which is in +the Leonardo. To enter the bootloader, the user should execute TWO external resets within 750 ms; that is, +press the reset button twice, quickly.\ + +Some other changes were made to allow this code to compile tightly enough to fit in the alloted 4k of +bootloader space. +*/ +// MAH 8/15/12- added this flag to replace the bulky program memory reads to check for the presence of a sketch +// at the top of the memory space. +static bool sketchPresent = false; + +// MAH 8/15/12- make this volatile, since we modify it in one place and read it in another, we want to make +// sure we're always working on the copy in memory and not an erroneous value stored in a cache somewhere. +// This variable stores the length of time we've been in the bootloader when waiting for the 8 second delay. +volatile uint16_t Timeout = 0; +// MAH 8/15/12- added this for delay during startup. Did not use existing Timeout value b/c it only increments +// when there's a sketch at the top of the memory. +volatile uint16_t resetTimeout = 0; + +// MAH 8/15/12- let's make this an 8-bit value instead of 16- that saves on memory because 16-bit addition and +// comparison compiles to bulkier code. Note that this does *not* require a change to the Arduino core- we're +// just sort of ignoring the extra byte that the Arduino core puts at the next location. +uint8_t bootKey = 0x77; +volatile uint8_t *const bootKeyPtr = (volatile uint8_t *)0x0800; + +// StartSketch() is called to clean up our mess before passing execution to the sketch. +void StartSketch(void) +{ + cli(); + + /* Undo TIMER1 setup and clear the count before running the sketch */ + TIMSK1 = 0; + TCCR1B = 0; + + /* Relocate the interrupt vector table to the application section */ + MCUCR = (1 << IVCE); + MCUCR = 0; + + L_LED_OFF(); + TX_LED_OFF(); + RX_LED_OFF(); + + /* jump to beginning of application space */ + __asm__ volatile("jmp 0x0000"); + +} + +uint16_t LLEDPulse; + +/** Main program entry point. This routine configures the hardware required by the bootloader, then continuously + * runs the bootloader processing routine until it times out or is instructed to exit. + */ +int main(void) +{ + /* Save the value of the boot key memory before it is overwritten */ + uint8_t bootKeyPtrVal = *bootKeyPtr; + *bootKeyPtr = 0; + + /* Check the reason for the reset so we can act accordingly */ + uint8_t mcusr_state = MCUSR; // store the initial state of the Status register + MCUSR = 0; // clear all reset flags + + /* Watchdog may be configured with a 15 ms period so must disable it before going any further */ + // MAH 8/15/12- I removed this because wdt_disable() is the first thing SetupHardware() does- why + // do it twice right in a row? + //wdt_disable(); + + /* Setup hardware required for the bootloader */ + // MAH 8/15/12- Moved this up to before the bootloader go/no-go decision tree so I could use the + // timer in that decision tree. Removed the USBInit() call from it; if I'm not going to stay in + // the bootloader, there's no point spending the time initializing the USB. + // SetupHardware(); + wdt_disable(); + + // Disable clock division + clock_prescale_set(clock_div_1); + + // Relocate the interrupt vector table to the bootloader section + MCUCR = (1 << IVCE); + MCUCR = (1 << IVSEL); + + LED_SETUP(); + CPU_PRESCALE(0); + L_LED_OFF(); + TX_LED_OFF(); + RX_LED_OFF(); + + // Initialize TIMER1 to handle bootloader timeout and LED tasks. + // With 16 MHz clock and 1/64 prescaler, timer 1 is clocked at 250 kHz + // Our chosen compare match generates an interrupt every 1 ms. + // This interrupt is disabled selectively when doing memory reading, erasing, + // or writing since SPM has tight timing requirements. + + OCR1AH = 0; + OCR1AL = 250; + TIMSK1 = (1 << OCIE1A); // enable timer 1 output compare A match interrupt + TCCR1B = ((1 << CS11) | (1 << CS10)); // 1/64 prescaler on timer 1 input + + + // MAH 8/15/12- this replaces bulky pgm_read_word(0) calls later on, to save memory. + if (pgm_read_word(0) != 0xFFFF) sketchPresent = true; + +// MAH 26 Oct 2012- The "bootload or not?" section has been modified since the code released +// with Arduino 1.0.1. The simplest modification is the replacement of equivalence checks on +// the reset bits with masked checks, so if more than one reset occurs before the register is +// checked, the check doesn't fail and fall through to the bootloader unnecessarily. + +// The second, more in depth modification addresses behavior after an external reset (i.e., +// user pushes the reset button). The Leonardo treats all external resets as requests to +// re-enter the bootloader and wait for code to be loaded. It remains in bootloader mode for +// 8 seconds before continuing on to the sketch (if one is present). By defining RESET_DELAY +// equal to 1, this behavior will persist. + +// However, if RESET_DELAY is defined to 0, the reset timeout before loading the sketch drops +// to 750ms. If, during that 750ms, another external reset occurs, THEN an 8-second delay +// in the bootloader will occur. + + // This is the "no-8-second-delay" code. If this is the first time through the loop, we + // don't expect to see the bootKey in memory. + if ( (mcusr_state & (1< EXT_RESET_TIMEOUT_PERIOD) // resetTimeout is getting incremeted + RunBootloader = false; // in the timer1 ISR. + } + // If we make it past that while loop, it's sketch loading time! + *bootKeyPtr = 0; // clear out the bootKey; from now on, we want to treat a reset like + // a normal reset. + cli(); // Disable interrupts, in case no sketch is present. + RunBootloader = true; // We want to hang out in the bootloader if no sketch is present. + if (sketchPresent) StartSketch(); // If a sketch is present, go! Otherwise, wait around + // in the bootloader until one is uploaded. + } + // On a power-on reset, we ALWAYS want to go to the sketch. If there is one. + // This is a place where the old code had an equivalence and now there is a mask. + else if ( (mcusr_state & (1< TIMEOUT_PERIOD) + RunBootloader = false; + + // MAH 8/15/12- This used to be a function call- inlining it saves a few bytes. + LLEDPulse++; + uint8_t p = LLEDPulse >> 8; + if (p > 127) + p = 254-p; + p += p; + if (((uint8_t)LLEDPulse) > p) + L_LED_OFF(); + else + L_LED_ON(); + } + + /* Disconnect from the host - USB interface will be reset later along with the AVR */ + USB_Detach(); + + /* Jump to beginning of application space to run the sketch - do not reset */ + StartSketch(); +} + +// Timer1 is set up to provide periodic interrupts. This is used to flicker the LEDs during +// programming as well as to generate the clock counts which determine how long the board should +// remain in bootloading mode. + +ISR(TIMER1_COMPA_vect, ISR_BLOCK) +{ + /* Reset counter */ + TCNT1H = 0; + TCNT1L = 0; + + /* Check whether the TX or RX LED one-shot period has elapsed. if so, turn off the LED */ + if (TxLEDPulse && !(--TxLEDPulse)) + TX_LED_OFF(); + if (RxLEDPulse && !(--RxLEDPulse)) + RX_LED_OFF(); + resetTimeout++; // Needed for the "short reset delay" mode- governs the time the board waits + // for a second reset before loading the sketch. + if (pgm_read_word(0) != 0xFFFF) + Timeout++; +} + +// MAH 29 Oct 2012 Nothing below this point has to change for the LilyPadUSB support + +/** Event handler for the USB_ConfigurationChanged event. This configures the device's endpoints ready + * to relay data to and from the attached USB host. + */ +void EVENT_USB_Device_ConfigurationChanged(void) +{ + /* Setup CDC Notification, Rx and Tx Endpoints */ + Endpoint_ConfigureEndpoint(CDC_NOTIFICATION_EPNUM, EP_TYPE_INTERRUPT, + ENDPOINT_DIR_IN, CDC_NOTIFICATION_EPSIZE, + ENDPOINT_BANK_SINGLE); + + Endpoint_ConfigureEndpoint(CDC_TX_EPNUM, EP_TYPE_BULK, + ENDPOINT_DIR_IN, CDC_TXRX_EPSIZE, + ENDPOINT_BANK_SINGLE); + + Endpoint_ConfigureEndpoint(CDC_RX_EPNUM, EP_TYPE_BULK, + ENDPOINT_DIR_OUT, CDC_TXRX_EPSIZE, + ENDPOINT_BANK_SINGLE); +} + +/** Event handler for the USB_ControlRequest event. This is used to catch and process control requests sent to + * the device from the USB host before passing along unhandled control requests to the library for processing + * internally. + */ +void EVENT_USB_Device_ControlRequest(void) +{ + /* Ignore any requests that aren't directed to the CDC interface */ + if ((USB_ControlRequest.bmRequestType & (CONTROL_REQTYPE_TYPE | CONTROL_REQTYPE_RECIPIENT)) != + (REQTYPE_CLASS | REQREC_INTERFACE)) + { + return; + } + + /* Process CDC specific control requests */ + switch (USB_ControlRequest.bRequest) + { + case CDC_REQ_GetLineEncoding: + if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) + { + Endpoint_ClearSETUP(); + + /* Write the line coding data to the control endpoint */ + Endpoint_Write_Control_Stream_LE(&LineEncoding, sizeof(CDC_LineEncoding_t)); + Endpoint_ClearOUT(); + } + + break; + case CDC_REQ_SetLineEncoding: + if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) + { + Endpoint_ClearSETUP(); + + /* Read the line coding data in from the host into the global struct */ + Endpoint_Read_Control_Stream_LE(&LineEncoding, sizeof(CDC_LineEncoding_t)); + Endpoint_ClearIN(); + } + + break; + } +} + +#if !defined(NO_BLOCK_SUPPORT) +/** Reads or writes a block of EEPROM or FLASH memory to or from the appropriate CDC data endpoint, depending + * on the AVR910 protocol command issued. + * + * \param[in] Command Single character AVR910 protocol command indicating what memory operation to perform + */ +static void ReadWriteMemoryBlock(const uint8_t Command) +{ + uint16_t BlockSize; + char MemoryType; + + bool HighByte = false; + uint8_t LowByte = 0; + + BlockSize = (FetchNextCommandByte() << 8); + BlockSize |= FetchNextCommandByte(); + + MemoryType = FetchNextCommandByte(); + + if ((MemoryType != 'E') && (MemoryType != 'F')) + { + /* Send error byte back to the host */ + WriteNextResponseByte('?'); + + return; + } + + /* Disable timer 1 interrupt - can't afford to process nonessential interrupts + * while doing SPM tasks */ + TIMSK1 = 0; + + /* Check if command is to read memory */ + if (Command == 'g') + { + /* Re-enable RWW section */ + boot_rww_enable(); + + while (BlockSize--) + { + if (MemoryType == 'F') + { + /* Read the next FLASH byte from the current FLASH page */ + #if (FLASHEND > 0xFFFF) + WriteNextResponseByte(pgm_read_byte_far(CurrAddress | HighByte)); + #else + WriteNextResponseByte(pgm_read_byte(CurrAddress | HighByte)); + #endif + + /* If both bytes in current word have been read, increment the address counter */ + if (HighByte) + CurrAddress += 2; + + HighByte = !HighByte; + } + else + { + /* Read the next EEPROM byte into the endpoint */ + WriteNextResponseByte(eeprom_read_byte((uint8_t*)(intptr_t)(CurrAddress >> 1))); + + /* Increment the address counter after use */ + CurrAddress += 2; + } + } + } + else + { + uint32_t PageStartAddress = CurrAddress; + + if (MemoryType == 'F') + { + boot_page_erase(PageStartAddress); + boot_spm_busy_wait(); + } + + while (BlockSize--) + { + if (MemoryType == 'F') + { + /* If both bytes in current word have been written, increment the address counter */ + if (HighByte) + { + /* Write the next FLASH word to the current FLASH page */ + boot_page_fill(CurrAddress, ((FetchNextCommandByte() << 8) | LowByte)); + + /* Increment the address counter after use */ + CurrAddress += 2; + } + else + { + LowByte = FetchNextCommandByte(); + } + + HighByte = !HighByte; + } + else + { + /* Write the next EEPROM byte from the endpoint */ + eeprom_write_byte((uint8_t*)((intptr_t)(CurrAddress >> 1)), FetchNextCommandByte()); + + /* Increment the address counter after use */ + CurrAddress += 2; + } + } + + /* If in FLASH programming mode, commit the page after writing */ + if (MemoryType == 'F') + { + /* Commit the flash page to memory */ + boot_page_write(PageStartAddress); + + /* Wait until write operation has completed */ + boot_spm_busy_wait(); + } + + /* Send response byte back to the host */ + WriteNextResponseByte('\r'); + } + + /* Re-enable timer 1 interrupt disabled earlier in this routine */ + TIMSK1 = (1 << OCIE1A); +} +#endif + +/** Retrieves the next byte from the host in the CDC data OUT endpoint, and clears the endpoint bank if needed + * to allow reception of the next data packet from the host. + * + * \return Next received byte from the host in the CDC data OUT endpoint + */ +static uint8_t FetchNextCommandByte(void) +{ + /* Select the OUT endpoint so that the next data byte can be read */ + Endpoint_SelectEndpoint(CDC_RX_EPNUM); + + /* If OUT endpoint empty, clear it and wait for the next packet from the host */ + while (!(Endpoint_IsReadWriteAllowed())) + { + Endpoint_ClearOUT(); + + while (!(Endpoint_IsOUTReceived())) + { + if (USB_DeviceState == DEVICE_STATE_Unattached) + return 0; + } + } + + /* Fetch the next byte from the OUT endpoint */ + return Endpoint_Read_8(); +} + +/** Writes the next response byte to the CDC data IN endpoint, and sends the endpoint back if needed to free up the + * bank when full ready for the next byte in the packet to the host. + * + * \param[in] Response Next response byte to send to the host + */ +static void WriteNextResponseByte(const uint8_t Response) +{ + /* Select the IN endpoint so that the next data byte can be written */ + Endpoint_SelectEndpoint(CDC_TX_EPNUM); + + /* If IN endpoint full, clear it and wait until ready for the next packet to the host */ + if (!(Endpoint_IsReadWriteAllowed())) + { + Endpoint_ClearIN(); + + while (!(Endpoint_IsINReady())) + { + if (USB_DeviceState == DEVICE_STATE_Unattached) + return; + } + } + + /* Write the next byte to the IN endpoint */ + Endpoint_Write_8(Response); + + TX_LED_ON(); + TxLEDPulse = TX_RX_LED_PULSE_PERIOD; +} + +#define STK_OK 0x10 +#define STK_INSYNC 0x14 // ' ' +#define CRC_EOP 0x20 // 'SPACE' +#define STK_GET_SYNC 0x30 // '0' + +#define STK_GET_PARAMETER 0x41 // 'A' +#define STK_SET_DEVICE 0x42 // 'B' +#define STK_SET_DEVICE_EXT 0x45 // 'E' +#define STK_LOAD_ADDRESS 0x55 // 'U' +#define STK_UNIVERSAL 0x56 // 'V' +#define STK_PROG_PAGE 0x64 // 'd' +#define STK_READ_PAGE 0x74 // 't' +#define STK_READ_SIGN 0x75 // 'u' + +/** Task to read in AVR910 commands from the CDC data OUT endpoint, process them, perform the required actions + * and send the appropriate response back to the host. + */ +void CDC_Task(void) +{ + /* Select the OUT endpoint */ + Endpoint_SelectEndpoint(CDC_RX_EPNUM); + + /* Check if endpoint has a command in it sent from the host */ + if (!(Endpoint_IsOUTReceived())) + return; + + RX_LED_ON(); + RxLEDPulse = TX_RX_LED_PULSE_PERIOD; + + /* Read in the bootloader command (first byte sent from host) */ + uint8_t Command = FetchNextCommandByte(); + + if (Command == 'E') + { + /* We nearly run out the bootloader timeout clock, + * leaving just a few hundred milliseconds so the + * bootloder has time to respond and service any + * subsequent requests */ + Timeout = TIMEOUT_PERIOD - 500; + + /* Re-enable RWW section - must be done here in case + * user has disabled verification on upload. */ + boot_rww_enable_safe(); + + // Send confirmation byte back to the host + WriteNextResponseByte('\r'); + } + else if (Command == 'T') + { + FetchNextCommandByte(); + + // Send confirmation byte back to the host + WriteNextResponseByte('\r'); + } + else if ((Command == 'L') || (Command == 'P')) + { + // Send confirmation byte back to the host + WriteNextResponseByte('\r'); + } + else if (Command == 't') + { + // Return ATMEGA128 part code - this is only to allow AVRProg to use the bootloader + WriteNextResponseByte(0x44); + WriteNextResponseByte(0x00); + } + else if (Command == 'a') + { + // Indicate auto-address increment is supported + WriteNextResponseByte('Y'); + } + else if (Command == 'A') + { + // Set the current address to that given by the host + CurrAddress = (FetchNextCommandByte() << 9); + CurrAddress |= (FetchNextCommandByte() << 1); + + // Send confirmation byte back to the host + WriteNextResponseByte('\r'); + } + else if (Command == 'p') + { + // Indicate serial programmer back to the host + WriteNextResponseByte('S'); + } + else if (Command == 'S') + { + // Write the 7-byte software identifier to the endpoint + for (uint8_t CurrByte = 0; CurrByte < 7; CurrByte++) + WriteNextResponseByte(SOFTWARE_IDENTIFIER[CurrByte]); + } + else if (Command == 'V') + { + WriteNextResponseByte('0' + BOOTLOADER_VERSION_MAJOR); + WriteNextResponseByte('0' + BOOTLOADER_VERSION_MINOR); + } + else if (Command == 's') + { + WriteNextResponseByte(AVR_SIGNATURE_3); + WriteNextResponseByte(AVR_SIGNATURE_2); + WriteNextResponseByte(AVR_SIGNATURE_1); + } + else if (Command == 'e') + { + // Clear the application section of flash + for (uint32_t CurrFlashAddress = 0; CurrFlashAddress < BOOT_START_ADDR; CurrFlashAddress += SPM_PAGESIZE) + { + boot_page_erase(CurrFlashAddress); + boot_spm_busy_wait(); + boot_page_write(CurrFlashAddress); + boot_spm_busy_wait(); + } + + // Send confirmation byte back to the host + WriteNextResponseByte('\r'); + } + #if !defined(NO_LOCK_BYTE_WRITE_SUPPORT) + else if (Command == 'l') + { + // Set the lock bits to those given by the host + boot_lock_bits_set(FetchNextCommandByte()); + + // Send confirmation byte back to the host + WriteNextResponseByte('\r'); + } + #endif + else if (Command == 'r') + { + WriteNextResponseByte(boot_lock_fuse_bits_get(GET_LOCK_BITS)); + } + else if (Command == 'F') + { + WriteNextResponseByte(boot_lock_fuse_bits_get(GET_LOW_FUSE_BITS)); + } + else if (Command == 'N') + { + WriteNextResponseByte(boot_lock_fuse_bits_get(GET_HIGH_FUSE_BITS)); + } + else if (Command == 'Q') + { + WriteNextResponseByte(boot_lock_fuse_bits_get(GET_EXTENDED_FUSE_BITS)); + } + #if !defined(NO_BLOCK_SUPPORT) + else if (Command == 'b') + { + WriteNextResponseByte('Y'); + + // Send block size to the host + WriteNextResponseByte(SPM_PAGESIZE >> 8); + WriteNextResponseByte(SPM_PAGESIZE & 0xFF); + } + else if ((Command == 'B') || (Command == 'g')) + { + // Keep resetting the timeout counter if we're receiving self-programming instructions + Timeout = 0; + // Delegate the block write/read to a separate function for clarity + ReadWriteMemoryBlock(Command); + } + #endif + #if !defined(NO_FLASH_BYTE_SUPPORT) + else if (Command == 'C') + { + // Write the high byte to the current flash page + boot_page_fill(CurrAddress, FetchNextCommandByte()); + + // Send confirmation byte back to the host + WriteNextResponseByte('\r'); + } + else if (Command == 'c') + { + // Write the low byte to the current flash page + boot_page_fill(CurrAddress | 0x01, FetchNextCommandByte()); + + // Increment the address + CurrAddress += 2; + + // Send confirmation byte back to the host + WriteNextResponseByte('\r'); + } + else if (Command == 'm') + { + // Commit the flash page to memory + boot_page_write(CurrAddress); + + // Wait until write operation has completed + boot_spm_busy_wait(); + + // Send confirmation byte back to the host + WriteNextResponseByte('\r'); + } + else if (Command == 'R') + { + #if (FLASHEND > 0xFFFF) + uint16_t ProgramWord = pgm_read_word_far(CurrAddress); + #else + uint16_t ProgramWord = pgm_read_word(CurrAddress); + #endif + + WriteNextResponseByte(ProgramWord >> 8); + WriteNextResponseByte(ProgramWord & 0xFF); + } + #endif + #if !defined(NO_EEPROM_BYTE_SUPPORT) + else if (Command == 'D') + { + // Read the byte from the endpoint and write it to the EEPROM + eeprom_write_byte((uint8_t*)((intptr_t)(CurrAddress >> 1)), FetchNextCommandByte()); + + // Increment the address after use + CurrAddress += 2; + + // Send confirmation byte back to the host + WriteNextResponseByte('\r'); + } + else if (Command == 'd') + { + // Read the EEPROM byte and write it to the endpoint + WriteNextResponseByte(eeprom_read_byte((uint8_t*)((intptr_t)(CurrAddress >> 1)))); + + // Increment the address after use + CurrAddress += 2; + } + #endif + else if (Command != 27) + { + // Unknown (non-sync) command, return fail code + WriteNextResponseByte('?'); + } + + + /* Select the IN endpoint */ + Endpoint_SelectEndpoint(CDC_TX_EPNUM); + + /* Remember if the endpoint is completely full before clearing it */ + bool IsEndpointFull = !(Endpoint_IsReadWriteAllowed()); + + /* Send the endpoint data to the host */ + Endpoint_ClearIN(); + + /* If a full endpoint's worth of data was sent, we need to send an empty packet afterwards to signal end of transfer */ + if (IsEndpointFull) + { + while (!(Endpoint_IsINReady())) + { + if (USB_DeviceState == DEVICE_STATE_Unattached) + return; + } + + Endpoint_ClearIN(); + } + + /* Wait until the data has been sent to the host */ + while (!(Endpoint_IsINReady())) + { + if (USB_DeviceState == DEVICE_STATE_Unattached) + return; + } + + /* Select the OUT endpoint */ + Endpoint_SelectEndpoint(CDC_RX_EPNUM); + + /* Acknowledge the command from the host */ + Endpoint_ClearOUT(); +} + diff --git a/external/arduino/avr/bootloaders/caterina-LilyPadUSB/Caterina.h b/external/arduino/avr/bootloaders/caterina-LilyPadUSB/Caterina.h new file mode 100644 index 000000000..7836ed759 --- /dev/null +++ b/external/arduino/avr/bootloaders/caterina-LilyPadUSB/Caterina.h @@ -0,0 +1,99 @@ +/* + LUFA Library + Copyright (C) Dean Camera, 2011. + + dean [at] fourwalledcubicle [dot] com + www.lufa-lib.org +*/ + +/* + Copyright 2011 Dean Camera (dean [at] fourwalledcubicle [dot] com) + + Permission to use, copy, modify, distribute, and sell this + software and its documentation for any purpose is hereby granted + without fee, provided that the above copyright notice appear in + all copies and that both that the copyright notice and this + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the + software without specific, written prior permission. + + The author disclaim all warranties with regard to this + software, including all implied warranties of merchantability + and fitness. In no event shall the author be liable for any + special, indirect or consequential damages or any damages + whatsoever resulting from loss of use, data or profits, whether + in an action of contract, negligence or other tortious action, + arising out of or in connection with the use or performance of + this software. +*/ + +/** \file + * + * Header file for BootloaderCDC.c. + */ + +#ifndef _CDC_H_ +#define _CDC_H_ + + /* Includes: */ + #include + #include + #include + #include + #include + #include + #include + + #include "Descriptors.h" + + #include + /* Macros: */ + /** Version major of the CDC bootloader. */ + #define BOOTLOADER_VERSION_MAJOR 0x01 + + /** Version minor of the CDC bootloader. */ + #define BOOTLOADER_VERSION_MINOR 0x00 + + /** Hardware version major of the CDC bootloader. */ + #define BOOTLOADER_HWVERSION_MAJOR 0x01 + + /** Hardware version minor of the CDC bootloader. */ + #define BOOTLOADER_HWVERSION_MINOR 0x00 + + /** Eight character bootloader firmware identifier reported to the host when requested */ + #define SOFTWARE_IDENTIFIER "CATERINA" + + #define CPU_PRESCALE(n) (CLKPR = 0x80, CLKPR = (n)) + #define LED_SETUP() DDRC |= (1<<7); DDRB |= (1<<0); DDRD |= (1<<5); + #define L_LED_OFF() PORTC &= ~(1<<7) + #define L_LED_ON() PORTC |= (1<<7) + #define L_LED_TOGGLE() PORTC ^= (1<<7) + #define TX_LED_OFF() PORTD |= (1<<5) + #define TX_LED_ON() PORTD &= ~(1<<5) + #define RX_LED_OFF() PORTB |= (1<<0) + #define RX_LED_ON() PORTB &= ~(1<<0) + + /* Type Defines: */ + /** Type define for a non-returning pointer to the start of the loaded application in flash memory. */ + typedef void (*AppPtr_t)(void) ATTR_NO_RETURN; + + /* Function Prototypes: */ + void StartSketch(void); + void LEDPulse(void); + + void CDC_Task(void); + void SetupHardware(void); + + void EVENT_USB_Device_ConfigurationChanged(void); + + #if defined(INCLUDE_FROM_CATERINA_C) || defined(__DOXYGEN__) + #if !defined(NO_BLOCK_SUPPORT) + static void ReadWriteMemoryBlock(const uint8_t Command); + #endif + static uint8_t FetchNextCommandByte(void); + static void WriteNextResponseByte(const uint8_t Response); + #endif + +#endif + diff --git a/external/arduino/avr/bootloaders/caterina-LilyPadUSB/Descriptors.c b/external/arduino/avr/bootloaders/caterina-LilyPadUSB/Descriptors.c new file mode 100644 index 000000000..a19707f2b --- /dev/null +++ b/external/arduino/avr/bootloaders/caterina-LilyPadUSB/Descriptors.c @@ -0,0 +1,260 @@ +/* + LUFA Library + Copyright (C) Dean Camera, 2011. + + dean [at] fourwalledcubicle [dot] com + www.lufa-lib.org +*/ + +/* + Copyright 2011 Dean Camera (dean [at] fourwalledcubicle [dot] com) + + Permission to use, copy, modify, distribute, and sell this + software and its documentation for any purpose is hereby granted + without fee, provided that the above copyright notice appear in + all copies and that both that the copyright notice and this + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the + software without specific, written prior permission. + + The author disclaim all warranties with regard to this + software, including all implied warranties of merchantability + and fitness. In no event shall the author be liable for any + special, indirect or consequential damages or any damages + whatsoever resulting from loss of use, data or profits, whether + in an action of contract, negligence or other tortious action, + arising out of or in connection with the use or performance of + this software. +*/ + +/** \file + * + * USB Device Descriptors, for library use when in USB device mode. Descriptors are special + * computer-readable structures which the host requests upon device enumeration, to determine + * the device's capabilities and functions. + */ + +#include "Descriptors.h" + +/** Device descriptor structure. This descriptor, located in SRAM memory, describes the overall + * device characteristics, including the supported USB version, control endpoint size and the + * number of device configurations. The descriptor is read out by the USB host when the enumeration + * process begins. + */ +const USB_Descriptor_Device_t DeviceDescriptor = +{ + .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device}, + + .USBSpecification = VERSION_BCD(01.10), + .Class = CDC_CSCP_CDCClass, + .SubClass = CDC_CSCP_NoSpecificSubclass, + .Protocol = CDC_CSCP_NoSpecificProtocol, + + .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE, + + .VendorID = DEVICE_VID, + .ProductID = DEVICE_PID, + .ReleaseNumber = VERSION_BCD(00.01), + + .ManufacturerStrIndex = 0x02, + .ProductStrIndex = 0x01, + .SerialNumStrIndex = NO_DESCRIPTOR, + + .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS +}; + +/** Configuration descriptor structure. This descriptor, located in SRAM memory, describes the usage + * of the device in one of its supported configurations, including information about any device interfaces + * and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting + * a configuration so that the host may correctly communicate with the USB device. + */ +const USB_Descriptor_Configuration_t ConfigurationDescriptor = +{ + .Config = + { + .Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration}, + + .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t), + .TotalInterfaces = 2, + + .ConfigurationNumber = 1, + .ConfigurationStrIndex = NO_DESCRIPTOR, + + .ConfigAttributes = USB_CONFIG_ATTR_BUSPOWERED, + + .MaxPowerConsumption = USB_CONFIG_POWER_MA(100) + }, + + .CDC_CCI_Interface = + { + .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, + + .InterfaceNumber = 0, + .AlternateSetting = 0, + + .TotalEndpoints = 1, + + .Class = CDC_CSCP_CDCClass, + .SubClass = CDC_CSCP_ACMSubclass, + .Protocol = CDC_CSCP_ATCommandProtocol, + + .InterfaceStrIndex = NO_DESCRIPTOR + }, + + .CDC_Functional_Header = + { + .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalHeader_t), .Type = DTYPE_CSInterface}, + .Subtype = 0x00, + + .CDCSpecification = VERSION_BCD(01.10), + }, + + .CDC_Functional_ACM = + { + .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalACM_t), .Type = DTYPE_CSInterface}, + .Subtype = 0x02, + + .Capabilities = 0x04, + }, + + .CDC_Functional_Union = + { + .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalUnion_t), .Type = DTYPE_CSInterface}, + .Subtype = 0x06, + + .MasterInterfaceNumber = 0, + .SlaveInterfaceNumber = 1, + }, + + .CDC_NotificationEndpoint = + { + .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, + + .EndpointAddress = (ENDPOINT_DIR_IN | CDC_NOTIFICATION_EPNUM), + .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), + .EndpointSize = CDC_NOTIFICATION_EPSIZE, + .PollingIntervalMS = 0xFF + }, + + .CDC_DCI_Interface = + { + .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, + + .InterfaceNumber = 1, + .AlternateSetting = 0, + + .TotalEndpoints = 2, + + .Class = CDC_CSCP_CDCDataClass, + .SubClass = CDC_CSCP_NoDataSubclass, + .Protocol = CDC_CSCP_NoDataProtocol, + + .InterfaceStrIndex = NO_DESCRIPTOR + }, + + .CDC_DataOutEndpoint = + { + .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, + + .EndpointAddress = (ENDPOINT_DIR_OUT | CDC_RX_EPNUM), + .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), + .EndpointSize = CDC_TXRX_EPSIZE, + .PollingIntervalMS = 0x01 + }, + + .CDC_DataInEndpoint = + { + .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, + + .EndpointAddress = (ENDPOINT_DIR_IN | CDC_TX_EPNUM), + .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), + .EndpointSize = CDC_TXRX_EPSIZE, + .PollingIntervalMS = 0x01 + } +}; + +/** Language descriptor structure. This descriptor, located in SRAM memory, is returned when the host requests + * the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate + * via the language ID table available at USB.org what languages the device supports for its string descriptors. + */ +const USB_Descriptor_String_t LanguageString = +{ + .Header = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String}, + + .UnicodeString = {LANGUAGE_ID_ENG} +}; + +/** Product descriptor string. This is a Unicode string containing the product's details in human readable form, + * and is read out upon request by the host when the appropriate string ID is requested, listed in the Device + * Descriptor. + */ +const USB_Descriptor_String_t ProductString = +{ + .Header = {.Size = USB_STRING_LEN(16), .Type = DTYPE_String}, + #if DEVICE_PID == 0x9207 + .UnicodeString = L"LilyPadUSB " + #else + .UnicodeString = L"USB IO board " + #endif +}; + +const USB_Descriptor_String_t ManufNameString = +{ + .Header = {.Size = USB_STRING_LEN(20), .Type = DTYPE_String}, + #if DEVICE_VID == 0x1B4F + .UnicodeString = L"SparkFun Electronics" + #else + .UnicodeString = L"Unknown " + #endif +}; + +/** This function is called by the library when in device mode, and must be overridden (see LUFA library "USB Descriptors" + * documentation) by the application code so that the address and size of a requested descriptor can be given + * to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function + * is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the + * USB host. + */ +uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, + const uint8_t wIndex, + const void** const DescriptorAddress) +{ + const uint8_t DescriptorType = (wValue >> 8); + const uint8_t DescriptorNumber = (wValue & 0xFF); + + const void* Address = NULL; + uint16_t Size = NO_DESCRIPTOR; + + switch (DescriptorType) + { + case DTYPE_Device: + Address = &DeviceDescriptor; + Size = sizeof(USB_Descriptor_Device_t); + break; + case DTYPE_Configuration: + Address = &ConfigurationDescriptor; + Size = sizeof(USB_Descriptor_Configuration_t); + break; + case DTYPE_String: + if (!(DescriptorNumber)) + { + Address = &LanguageString; + Size = LanguageString.Header.Size; + } + else if (DescriptorNumber == DeviceDescriptor.ProductStrIndex) + { + Address = &ProductString; + Size = ProductString.Header.Size; + } else if (DescriptorNumber == DeviceDescriptor.ManufacturerStrIndex) + { + Address = &ManufNameString; + Size = ManufNameString.Header.Size; + } + + break; + } + + *DescriptorAddress = Address; + return Size; +} + diff --git a/external/arduino/avr/bootloaders/caterina-LilyPadUSB/Descriptors.h b/external/arduino/avr/bootloaders/caterina-LilyPadUSB/Descriptors.h new file mode 100644 index 000000000..c843bec82 --- /dev/null +++ b/external/arduino/avr/bootloaders/caterina-LilyPadUSB/Descriptors.h @@ -0,0 +1,139 @@ +/* + LUFA Library + Copyright (C) Dean Camera, 2011. + + dean [at] fourwalledcubicle [dot] com + www.lufa-lib.org +*/ + +/* + Copyright 2011 Dean Camera (dean [at] fourwalledcubicle [dot] com) + + Permission to use, copy, modify, distribute, and sell this + software and its documentation for any purpose is hereby granted + without fee, provided that the above copyright notice appear in + all copies and that both that the copyright notice and this + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the + software without specific, written prior permission. + + The author disclaim all warranties with regard to this + software, including all implied warranties of merchantability + and fitness. In no event shall the author be liable for any + special, indirect or consequential damages or any damages + whatsoever resulting from loss of use, data or profits, whether + in an action of contract, negligence or other tortious action, + arising out of or in connection with the use or performance of + this software. +*/ + +/** \file + * + * Header file for Descriptors.c. + */ + +#ifndef _DESCRIPTORS_H_ +#define _DESCRIPTORS_H_ + + /* Includes: */ + #include + + /* Macros: */ + #if defined(__AVR_AT90USB1287__) + #define AVR_SIGNATURE_1 0x1E + #define AVR_SIGNATURE_2 0x97 + #define AVR_SIGNATURE_3 0x82 + #elif defined(__AVR_AT90USB647__) + #define AVR_SIGNATURE_1 0x1E + #define AVR_SIGNATURE_2 0x96 + #define AVR_SIGNATURE_3 0x82 + #elif defined(__AVR_AT90USB1286__) + #define AVR_SIGNATURE_1 0x1E + #define AVR_SIGNATURE_2 0x97 + #define AVR_SIGNATURE_3 0x82 + #elif defined(__AVR_AT90USB646__) + #define AVR_SIGNATURE_1 0x1E + #define AVR_SIGNATURE_2 0x96 + #define AVR_SIGNATURE_3 0x82 + #elif defined(__AVR_ATmega32U6__) + #define AVR_SIGNATURE_1 0x1E + #define AVR_SIGNATURE_2 0x95 + #define AVR_SIGNATURE_3 0x88 + #elif defined(__AVR_ATmega32U4__) + #define AVR_SIGNATURE_1 0x1E + #define AVR_SIGNATURE_2 0x95 + #define AVR_SIGNATURE_3 0x87 + #elif defined(__AVR_ATmega16U4__) + #define AVR_SIGNATURE_1 0x1E + #define AVR_SIGNATURE_2 0x94 + #define AVR_SIGNATURE_3 0x88 + #elif defined(__AVR_ATmega32U2__) + #define AVR_SIGNATURE_1 0x1E + #define AVR_SIGNATURE_2 0x95 + #define AVR_SIGNATURE_3 0x8A + #elif defined(__AVR_ATmega16U2__) + #define AVR_SIGNATURE_1 0x1E + #define AVR_SIGNATURE_2 0x94 + #define AVR_SIGNATURE_3 0x89 + #elif defined(__AVR_AT90USB162__) + #define AVR_SIGNATURE_1 0x1E + #define AVR_SIGNATURE_2 0x94 + #define AVR_SIGNATURE_3 0x82 + #elif defined(__AVR_ATmega8U2__) + #define AVR_SIGNATURE_1 0x1E + #define AVR_SIGNATURE_2 0x93 + #define AVR_SIGNATURE_3 0x89 + #elif defined(__AVR_AT90USB82__) + #define AVR_SIGNATURE_1 0x1E + #define AVR_SIGNATURE_2 0x94 + #define AVR_SIGNATURE_3 0x82 + #else + #error The selected AVR part is not currently supported by this bootloader. + #endif + + /** Endpoint number for the CDC control interface event notification endpoint. */ + #define CDC_NOTIFICATION_EPNUM 2 + + /** Endpoint number for the CDC data interface TX (data IN) endpoint. */ + #define CDC_TX_EPNUM 3 + + /** Endpoint number for the CDC data interface RX (data OUT) endpoint. */ + #define CDC_RX_EPNUM 4 + + /** Size of the CDC data interface TX and RX data endpoint banks, in bytes. */ + #define CDC_TXRX_EPSIZE 16 + + /** Size of the CDC control interface notification endpoint bank, in bytes. */ + #define CDC_NOTIFICATION_EPSIZE 8 + + /* Type Defines: */ + /** Type define for the device configuration descriptor structure. This must be defined in the + * application code, as the configuration descriptor contains several sub-descriptors which + * vary between devices, and which describe the device's usage to the host. + */ + typedef struct + { + USB_Descriptor_Configuration_Header_t Config; + + // CDC Control Interface + USB_Descriptor_Interface_t CDC_CCI_Interface; + USB_CDC_Descriptor_FunctionalHeader_t CDC_Functional_Header; + USB_CDC_Descriptor_FunctionalACM_t CDC_Functional_ACM; + USB_CDC_Descriptor_FunctionalUnion_t CDC_Functional_Union; + USB_Descriptor_Endpoint_t CDC_NotificationEndpoint; + + // CDC Data Interface + USB_Descriptor_Interface_t CDC_DCI_Interface; + USB_Descriptor_Endpoint_t CDC_DataOutEndpoint; + USB_Descriptor_Endpoint_t CDC_DataInEndpoint; + } USB_Descriptor_Configuration_t; + + /* Function Prototypes: */ + uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, + const uint8_t wIndex, + const void** const DescriptorAddress) + ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); + +#endif + diff --git a/external/arduino/avr/bootloaders/caterina-LilyPadUSB/Makefile b/external/arduino/avr/bootloaders/caterina-LilyPadUSB/Makefile new file mode 100644 index 000000000..0b5659a3c --- /dev/null +++ b/external/arduino/avr/bootloaders/caterina-LilyPadUSB/Makefile @@ -0,0 +1,716 @@ +# Hey Emacs, this is a -*- makefile -*- +#---------------------------------------------------------------------------- +# WinAVR Makefile Template written by Eric B. Weddington, Jrg Wunsch, et al. +# >> Modified for use with the LUFA project. << +# +# Released to the Public Domain +# +# Additional material for this makefile was written by: +# Peter Fleury +# Tim Henigan +# Colin O'Flynn +# Reiner Patommel +# Markus Pfaff +# Sander Pool +# Frederik Rouleau +# Carlos Lamas +# Dean Camera +# Opendous Inc. +# Denver Gingerich +# +#---------------------------------------------------------------------------- +# On command line: +# +# make all = Make software. +# +# make clean = Clean out built project files. +# +# make coff = Convert ELF to AVR COFF. +# +# make extcoff = Convert ELF to AVR Extended COFF. +# +# make program = Download the hex file to the device, using avrdude. +# Please customize the avrdude settings below first! +# +# make doxygen = Generate DoxyGen documentation for the project (must have +# DoxyGen installed) +# +# make debug = Start either simulavr or avarice as specified for debugging, +# with avr-gdb or avr-insight as the front end for debugging. +# +# make filename.s = Just compile filename.c into the assembler code only. +# +# make filename.i = Create a preprocessed source file for use in submitting +# bug reports to the GCC project. +# +# To rebuild project do "make clean" then "make all". +#---------------------------------------------------------------------------- + +# USB vendor ID (VID) +# official Arduino LLC VID = 0x2341 +# SparkFun VID = 0x1B4F +VID = 0x1B4F + +# USB product ID (PID) +# official Leonardo PID = 0x0036 +# SparkFun LilyPadUSB PID = 0x9207 +PID = 0x9207 + +# MCU name +MCU = atmega32u4 + +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Target board (see library "Board Types" documentation, NONE for projects not requiring +# LUFA board drivers). If USER is selected, put custom board drivers in a directory called +# "Board" inside the application directory. +BOARD = USER + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 8000000 + + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + + +# Starting byte address of the bootloader, as a byte address - computed via the formula +# BOOT_START = ((FLASH_SIZE_KB - BOOT_SECTION_SIZE_KB) * 1024) +# +# Note that the bootloader size and start address given in AVRStudio is in words and not +# bytes, and so will need to be doubled to obtain the byte address needed by AVR-GCC. +FLASH_SIZE_KB = 32 +BOOT_SECTION_SIZE_KB = 4 +BOOT_START = 0x$(shell echo "obase=16; ($(FLASH_SIZE_KB) - $(BOOT_SECTION_SIZE_KB)) * 1024" | bc) + + +# Output format. (can be srec, ihex, binary) +FORMAT = ihex + + +# Target file name (without extension). +TARGET = Caterina + + +# Object files directory +# To put object files in current directory, use a dot (.), do NOT make +# this an empty or blank macro! +OBJDIR = . + + +# Path to the LUFA library +LUFA_PATH = LUFA-111009 + + +# LUFA library compile-time options and predefined tokens +LUFA_OPTS = -D USB_DEVICE_ONLY +LUFA_OPTS += -D DEVICE_STATE_AS_GPIOR=0 +LUFA_OPTS += -D ORDERED_EP_CONFIG +LUFA_OPTS += -D FIXED_CONTROL_ENDPOINT_SIZE=8 +LUFA_OPTS += -D FIXED_NUM_CONFIGURATIONS=1 +LUFA_OPTS += -D USE_RAM_DESCRIPTORS +LUFA_OPTS += -D USE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" +LUFA_OPTS += -D NO_INTERNAL_SERIAL +LUFA_OPTS += -D NO_DEVICE_SELF_POWER +LUFA_OPTS += -D NO_DEVICE_REMOTE_WAKEUP +LUFA_OPTS += -D NO_SOF_EVENTS + +#LUFA_OPTS += -D NO_BLOCK_SUPPORT +#LUFA_OPTS += -D NO_EEPROM_BYTE_SUPPORT +#LUFA_OPTS += -D NO_FLASH_BYTE_SUPPORT +LUFA_OPTS += -D NO_LOCK_BYTE_WRITE_SUPPORT + + +# Create the LUFA source path variables by including the LUFA root makefile +include $(LUFA_PATH)/LUFA/makefile + + +# List C source files here. (C dependencies are automatically generated.) +SRC = $(TARGET).c \ + Descriptors.c \ + $(LUFA_SRC_USB) \ + + +# List C++ source files here. (C dependencies are automatically generated.) +CPPSRC = + + +# List Assembler source files here. +# Make them always end in a capital .S. Files ending in a lowercase .s +# will not be considered source files but generated files (assembler +# output from the compiler), and will be deleted upon "make clean"! +# Even though the DOS/Win* filesystem matches both .s and .S the same, +# it will preserve the spelling of the filenames, and gcc itself does +# care about how the name is spelled on its command-line. +ASRC = + + +# Optimization level, can be [0, 1, 2, 3, s]. +# 0 = turn off optimization. s = optimize for size. +# (Note: 3 is not always the best optimization level. See avr-libc FAQ.) +OPT = s + + +# Debugging format. +# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs. +# AVR Studio 4.10 requires dwarf-2. +# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run. +DEBUG = dwarf-2 + + +# List any extra directories to look for include files here. +# Each directory must be seperated by a space. +# Use forward slashes for directory separators. +# For a directory that has spaces, enclose it in quotes. +EXTRAINCDIRS = $(LUFA_PATH)/ + + +# Compiler flag to set the C Standard level. +# c89 = "ANSI" C +# gnu89 = c89 plus GCC extensions +# c99 = ISO C99 standard (not yet fully implemented) +# gnu99 = c99 plus GCC extensions +CSTANDARD = -std=c99 + + +# Place -D or -U options here for C sources +CDEFS = -DF_CPU=$(F_CPU)UL +CDEFS += -DF_USB=$(F_USB)UL +CDEFS += -DBOARD=BOARD_$(BOARD) -DARCH=ARCH_$(ARCH) +CDEFS += -DBOOT_START_ADDR=$(BOOT_START)UL +CDEFS += -DDEVICE_VID=$(VID)UL +CDEFS += -DDEVICE_PID=$(PID)UL +CDEFS += $(LUFA_OPTS) + + +# Place -D or -U options here for ASM sources +ADEFS = -DF_CPU=$(F_CPU) +ADEFS += -DF_USB=$(F_USB)UL +ADEFS += -DBOARD=BOARD_$(BOARD) +ADEFS += -DBOOT_START_ADDR=$(BOOT_START)UL +ADEFS += $(LUFA_OPTS) + + +# Place -D or -U options here for C++ sources +CPPDEFS = -DF_CPU=$(F_CPU)UL +CPPDEFS += -DF_USB=$(F_USB)UL +CPPDEFS += -DBOARD=BOARD_$(BOARD) +CPPDEFS += -DBOOT_START_ADDR=$(BOOT_START)UL +CPPDEFS += $(LUFA_OPTS) +#CPPDEFS += -D__STDC_LIMIT_MACROS +#CPPDEFS += -D__STDC_CONSTANT_MACROS + + + +#---------------- Compiler Options C ---------------- +# -g*: generate debugging information +# -O*: optimization level +# -f...: tuning, see GCC manual and avr-libc documentation +# -Wall...: warning level +# -Wa,...: tell GCC to pass this to the assembler. +# -adhlns...: create assembler listing +CFLAGS = -g$(DEBUG) +CFLAGS += $(CDEFS) +CFLAGS += -O$(OPT) +CFLAGS += -funsigned-char +CFLAGS += -funsigned-bitfields +CFLAGS += -ffunction-sections +CFLAGS += -fno-inline-small-functions +CFLAGS += -fpack-struct +CFLAGS += -fshort-enums +CFLAGS += -fno-strict-aliasing +CFLAGS += -Wall +CFLAGS += -Wstrict-prototypes +#CFLAGS += -mshort-calls +#CFLAGS += -fno-unit-at-a-time +#CFLAGS += -Wundef +#CFLAGS += -Wunreachable-code +#CFLAGS += -Wsign-compare +CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst) +CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) +CFLAGS += $(CSTANDARD) + + +#---------------- Compiler Options C++ ---------------- +# -g*: generate debugging information +# -O*: optimization level +# -f...: tuning, see GCC manual and avr-libc documentation +# -Wall...: warning level +# -Wa,...: tell GCC to pass this to the assembler. +# -adhlns...: create assembler listing +CPPFLAGS = -g$(DEBUG) +CPPFLAGS += $(CPPDEFS) +CPPFLAGS += -O$(OPT) +CPPFLAGS += -funsigned-char +CPPFLAGS += -funsigned-bitfields +CPPFLAGS += -fpack-struct +CPPFLAGS += -fshort-enums +CPPFLAGS += -fno-exceptions +CPPFLAGS += -Wall +CPPFLAGS += -Wundef +#CPPFLAGS += -mshort-calls +#CPPFLAGS += -fno-unit-at-a-time +#CPPFLAGS += -Wstrict-prototypes +#CPPFLAGS += -Wunreachable-code +#CPPFLAGS += -Wsign-compare +CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst) +CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) +#CPPFLAGS += $(CSTANDARD) + + +#---------------- Assembler Options ---------------- +# -Wa,...: tell GCC to pass this to the assembler. +# -adhlns: create listing +# -gstabs: have the assembler create line number information; note that +# for use in COFF files, additional information about filenames +# and function names needs to be present in the assembler source +# files -- see avr-libc docs [FIXME: not yet described there] +# -listing-cont-lines: Sets the maximum number of continuation lines of hex +# dump that will be displayed for a given single line of source input. +ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100 + + +#---------------- Library Options ---------------- +# Minimalistic printf version +PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min + +# Floating point printf version (requires MATH_LIB = -lm below) +PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt + +# If this is left blank, then it will use the Standard printf version. +PRINTF_LIB = +#PRINTF_LIB = $(PRINTF_LIB_MIN) +#PRINTF_LIB = $(PRINTF_LIB_FLOAT) + + +# Minimalistic scanf version +SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min + +# Floating point + %[ scanf version (requires MATH_LIB = -lm below) +SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt + +# If this is left blank, then it will use the Standard scanf version. +SCANF_LIB = +#SCANF_LIB = $(SCANF_LIB_MIN) +#SCANF_LIB = $(SCANF_LIB_FLOAT) + + +MATH_LIB = -lm + + +# List any extra directories to look for libraries here. +# Each directory must be seperated by a space. +# Use forward slashes for directory separators. +# For a directory that has spaces, enclose it in quotes. +EXTRALIBDIRS = + + + +#---------------- External Memory Options ---------------- + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# used for variables (.data/.bss) and heap (malloc()). +#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# only used for heap (malloc()). +#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff + +EXTMEMOPTS = + + + +#---------------- Linker Options ---------------- +# -Wl,...: tell GCC to pass this to linker. +# -Map: create map file +# --cref: add cross reference to map file +LDFLAGS = -Wl,-Map=$(TARGET).map,--cref +LDFLAGS += -Wl,--section-start=.text=$(BOOT_START) +LDFLAGS += -Wl,--relax +LDFLAGS += -Wl,--gc-sections +LDFLAGS += $(EXTMEMOPTS) +LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS)) +LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) +#LDFLAGS += -T linker_script.x + + + +#---------------- Programming Options (avrdude) ---------------- + +# Programming hardware +# Type: avrdude -c ? +# to get a full listing. +# +AVRDUDE_PROGRAMMER = avrispmkII + +# com1 = serial port. Use lpt1 to connect to parallel port. +AVRDUDE_PORT = usb + +AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex +#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep +AVRDUDE_WRITE_FUSES = -U efuse:w:0xce:m +AVRDUDE_WRITE_FUSES += -U hfuse:w:0xd8:m +AVRDUDE_WRITE_FUSES += -U lfuse:w:0xff:m + + +# Uncomment the following if you want avrdude's erase cycle counter. +# Note that this counter needs to be initialized first using -Yn, +# see avrdude manual. +#AVRDUDE_ERASE_COUNTER = -y + +# Uncomment the following if you do /not/ wish a verification to be +# performed after programming the device. +#AVRDUDE_NO_VERIFY = -V + +# Increase verbosity level. Please use this when submitting bug +# reports about avrdude. See +# to submit bug reports. +#AVRDUDE_VERBOSE = -v -v + +AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) +AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY) +AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE) +AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER) + + + +#---------------- Debugging Options ---------------- + +# For simulavr only - target MCU frequency. +DEBUG_MFREQ = $(F_CPU) + +# Set the DEBUG_UI to either gdb or insight. +# DEBUG_UI = gdb +DEBUG_UI = insight + +# Set the debugging back-end to either avarice, simulavr. +DEBUG_BACKEND = avarice +#DEBUG_BACKEND = simulavr + +# GDB Init Filename. +GDBINIT_FILE = __avr_gdbinit + +# When using avarice settings for the JTAG +JTAG_DEV = /dev/com1 + +# Debugging port used to communicate between GDB / avarice / simulavr. +DEBUG_PORT = 4242 + +# Debugging host used to communicate between GDB / avarice / simulavr, normally +# just set to localhost unless doing some sort of crazy debugging when +# avarice is running on a different computer. +DEBUG_HOST = localhost + + + +#============================================================================ + + +# Define programs and commands. +SHELL = sh +CC = avr-gcc +OBJCOPY = avr-objcopy +OBJDUMP = avr-objdump +SIZE = avr-size +AR = avr-ar rcs +NM = avr-nm +AVRDUDE = avrdude -B 1 +REMOVE = rm -f +REMOVEDIR = rm -rf +COPY = cp +WINSHELL = cmd + + +# Define Messages +# English +MSG_ERRORS_NONE = Errors: none +MSG_BEGIN = -------- begin -------- +MSG_END = -------- end -------- +MSG_SIZE_BEFORE = Size before: +MSG_SIZE_AFTER = Size after: +MSG_COFF = Converting to AVR COFF: +MSG_EXTENDED_COFF = Converting to AVR Extended COFF: +MSG_FLASH = Creating load file for Flash: +MSG_EEPROM = Creating load file for EEPROM: +MSG_EXTENDED_LISTING = Creating Extended Listing: +MSG_SYMBOL_TABLE = Creating Symbol Table: +MSG_LINKING = Linking: +MSG_COMPILING = Compiling C: +MSG_COMPILING_CPP = Compiling C++: +MSG_ASSEMBLING = Assembling: +MSG_CLEANING = Cleaning project: +MSG_CREATING_LIBRARY = Creating library: + + + + +# Define all object files. +OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) + +# Define all listing files. +LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) + + +# Compiler flags to generate dependency files. +GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d + + +# Combine all necessary flags and optional flags. +# Add target processor to flags. +ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS) +ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS) +ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) + + +# Default target. +all: begin gccversion sizebefore build sizeafter end + +# Change the build target to build a HEX file or a library. +build: elf hex eep lss sym +#build: lib + +elf: $(TARGET).elf +hex: $(TARGET).hex +eep: $(TARGET).eep +lss: $(TARGET).lss +sym: $(TARGET).sym +LIBNAME=lib$(TARGET).a +lib: $(LIBNAME) + + + +# Eye candy. +# AVR Studio 3.x does not check make's exit code but relies on +# the following magic strings to be generated by the compile job. +begin: + @echo + @echo $(MSG_BEGIN) + +end: + @echo $(MSG_END) + @echo + + +# Display size of file. +HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex +ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf +MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) ) +FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr ) + + +sizebefore: + @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \ + 2>/dev/null; echo; fi + +sizeafter: + @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \ + 2>/dev/null; echo; fi + + + +# Display compiler version information. +gccversion : + @$(CC) --version + + +# Program the device. +program: $(TARGET).hex $(TARGET).eep + $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) $(AVRDUDE_WRITE_FUSES) + + +# Generate avr-gdb config/init file which does the following: +# define the reset signal, load the target file, connect to target, and set +# a breakpoint at main(). +gdb-config: + @$(REMOVE) $(GDBINIT_FILE) + @echo define reset >> $(GDBINIT_FILE) + @echo SIGNAL SIGHUP >> $(GDBINIT_FILE) + @echo end >> $(GDBINIT_FILE) + @echo file $(TARGET).elf >> $(GDBINIT_FILE) + @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE) +ifeq ($(DEBUG_BACKEND),simulavr) + @echo load >> $(GDBINIT_FILE) +endif + @echo break main >> $(GDBINIT_FILE) + +debug: gdb-config $(TARGET).elf +ifeq ($(DEBUG_BACKEND), avarice) + @echo Starting AVaRICE - Press enter when "waiting to connect" message displays. + @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \ + $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT) + @$(WINSHELL) /c pause + +else + @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \ + $(DEBUG_MFREQ) --port $(DEBUG_PORT) +endif + @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE) + +# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. +COFFCONVERT = $(OBJCOPY) --debugging +COFFCONVERT += --change-section-address .data-0x800000 +COFFCONVERT += --change-section-address .bss-0x800000 +COFFCONVERT += --change-section-address .noinit-0x800000 +COFFCONVERT += --change-section-address .eeprom-0x810000 + +coff: $(TARGET).elf + @echo + @echo $(MSG_COFF) $(TARGET).cof + $(COFFCONVERT) -O coff-avr $< $(TARGET).cof + +extcoff: $(TARGET).elf + @echo + @echo $(MSG_EXTENDED_COFF) $(TARGET).cof + $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof + +# Create final output files (.hex, .eep) from ELF output file. +%.hex: %.elf + @echo + @echo $(MSG_FLASH) $@ + $(OBJCOPY) -O $(FORMAT) -R .eeprom -R .fuse -R .lock $< $@ + +%.eep: %.elf + @echo + @echo $(MSG_EEPROM) $@ + -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ + --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0 + +# Create extended listing file from ELF output file. +%.lss: %.elf + @echo + @echo $(MSG_EXTENDED_LISTING) $@ + $(OBJDUMP) -h -S -z $< > $@ + +# Create a symbol table from ELF output file. +%.sym: %.elf + @echo + @echo $(MSG_SYMBOL_TABLE) $@ + $(NM) -n $< > $@ + + + +# Create library from object files. +.SECONDARY : $(TARGET).a +.PRECIOUS : $(OBJ) +%.a: $(OBJ) + @echo + @echo $(MSG_CREATING_LIBRARY) $@ + $(AR) $@ $(OBJ) + + +# Link: create ELF output file from object files. +.SECONDARY : $(TARGET).elf +.PRECIOUS : $(OBJ) +%.elf: $(OBJ) + @echo + @echo $(MSG_LINKING) $@ + $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS) + + +# Compile: create object files from C source files. +$(OBJDIR)/%.o : %.c + @echo + @echo $(MSG_COMPILING) $< + $(CC) -c $(ALL_CFLAGS) $< -o $@ + + +# Compile: create object files from C++ source files. +$(OBJDIR)/%.o : %.cpp + @echo + @echo $(MSG_COMPILING_CPP) $< + $(CC) -c $(ALL_CPPFLAGS) $< -o $@ + + +# Compile: create assembler files from C source files. +%.s : %.c + $(CC) -S $(ALL_CFLAGS) $< -o $@ + + +# Compile: create assembler files from C++ source files. +%.s : %.cpp + $(CC) -S $(ALL_CPPFLAGS) $< -o $@ + + +# Assemble: create object files from assembler source files. +$(OBJDIR)/%.o : %.S + @echo + @echo $(MSG_ASSEMBLING) $< + $(CC) -c $(ALL_ASFLAGS) $< -o $@ + + +# Create preprocessed source for use in sending a bug report. +%.i : %.c + $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ + + +# Target: clean project. +clean: begin clean_list end + +clean_list : + @echo + @echo $(MSG_CLEANING) + $(REMOVE) $(TARGET).hex + $(REMOVE) $(TARGET).eep + $(REMOVE) $(TARGET).cof + $(REMOVE) $(TARGET).elf + $(REMOVE) $(TARGET).map + $(REMOVE) $(TARGET).sym + $(REMOVE) $(TARGET).lss + $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) + $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) + $(REMOVE) $(SRC:.c=.s) + $(REMOVE) $(SRC:.c=.d) + $(REMOVE) $(SRC:.c=.i) + $(REMOVEDIR) .dep + +doxygen: + @echo Generating Project Documentation \($(TARGET)\)... + @doxygen Doxygen.conf + @echo Documentation Generation Complete. + +clean_doxygen: + rm -rf Documentation + +checksource: + @for f in $(SRC) $(CPPSRC) $(ASRC); do \ + if [ -f $$f ]; then \ + echo "Found Source File: $$f" ; \ + else \ + echo "Source File Not Found: $$f" ; \ + fi; done + + +# Create object files directory +$(shell mkdir $(OBJDIR) 2>/dev/null) + + +# Include the dependency files. +-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*) + + +# Listing of phony targets. +.PHONY : all begin finish end sizebefore sizeafter gccversion \ +build elf hex eep lss sym coff extcoff doxygen clean \ +clean_list clean_doxygen program debug gdb-config checksource + diff --git a/external/arduino/avr/bootloaders/caterina-LilyPadUSB/Readme.txt b/external/arduino/avr/bootloaders/caterina-LilyPadUSB/Readme.txt new file mode 100644 index 000000000..d06661172 --- /dev/null +++ b/external/arduino/avr/bootloaders/caterina-LilyPadUSB/Readme.txt @@ -0,0 +1,11 @@ +Building the bootloader for the LilyPadUSB +1. Download the LUFA-111009 file (http://fourwalledcubicle.com/blog/2011/10/lufa-111009-released/). +2. Extract that file directly to the Caterina-LilyPadUSB bootloader directory. +3. Open a command prompt in the Caterina-LilyPadUSB bootloader directory. +4. Type 'make'. +5. Enjoy! + +Programming the bootloader for the LilyPadUSB +1. Open a command prompt in the Caterina-LilyPadUSB folder. +2. Connect your programmer- use a 2x3 .1" header, pressed against the programming vias. +3. Type 'make program' into the command prompt. \ No newline at end of file diff --git a/external/arduino/avr/bootloaders/caterina/Caterina-Circuitplay32u4.hex b/external/arduino/avr/bootloaders/caterina/Caterina-Circuitplay32u4.hex new file mode 100644 index 000000000..fe6d76287 --- /dev/null +++ b/external/arduino/avr/bootloaders/caterina/Caterina-Circuitplay32u4.hex @@ -0,0 +1,251 @@ +:1070000055C000006EC000006CC000006AC00000E7 +:1070100068C0000066C0000064C0000062C00000DC +:1070200060C000005EC00000B2C400005AC0000092 +:1070300058C0000056C0000054C0000052C00000FC +:1070400050C00000D7C000004CC000004AC0000083 +:1070500048C0000046C0000044C0000042C000001C +:1070600040C000003EC000003CC000003AC000002C +:1070700038C0000036C0000034C0000032C000003C +:1070800030C000002EC000002CC000002AC000004C +:1070900028C0000026C0000024C0000022C000005C +:1070A00020C000001EC000001CC0000011241FBE34 +:1070B000CFEFDAE0DEBFCDBF11E0A0E0B1E0E0EB62 +:1070C000FEE702C005900D92A43DB107D9F711E08B +:1070D000A4EDB1E001C01D92AA3EB107E1F755D37E +:1070E000E5C68ECF84E08093E9000DC08091E80072 +:1070F0008B778093E80003C08EB3882359F080918A +:10710000E80082FFF9CF8091E80085FFEFCF809102 +:10711000F100089580E0089593E09093E900909144 +:10712000E80095FF09C08093F10084E690E0909319 +:10713000D9018093D80108959091E8009E779093AB +:10714000E80003C09EB3992329F09091E80090FFD6 +:10715000F9CFE9CF0895F89410926F001092810052 +:10716000109285001092840081E085BF15BE47987B +:107170000C94000008958091DE019091DF0101964A +:107180009093DF018093DE01292F97FF03C03EEF2C +:10719000391B232F220F281710F447980895479A78 +:1071A000089584B7877F84BF88E10FB6F8948093F1 +:1071B0006000109260000FBE90E880E00FB6F89477 +:1071C00090936100809361000FBE81E085BF82E0F3 +:1071D00085BF3F9AE1E6F0E09083108247981092D5 +:1071E00089009DE79093880080936F0083E08093EF +:1071F0008100B5C31F920F920FB60F9211242F93E7 +:107200008F939F93EF93FF931092850010928400C9 +:107210008091D8019091D901009729F0019790931E +:10722000D9018093D8018091D6019091D701009720 +:1072300029F001979093D7018093D601E0E0F0E028 +:1072400085919491019649F08091D4019091D50156 +:1072500001969093D5018093D401FF91EF919F9176 +:107260008F912F910F900FBE0F901F90189542E0B5 +:1072700061EC82E007D342E161E883E003D342E1BD +:1072800060E884E0FFC28091E201982F9F779132FD +:1072900039F59091E301903291F0913209F5813AFC +:1072A000F9F48091E800877F8093E80067E070E060 +:1072B00083E091E01AD48091E8008B770FC081328F +:1072C00079F48091E800877F8093E80067E070E0C0 +:1072D00083E091E067D48091E8008E778093E800A6 +:1072E00008954F925F926F927F928F929F92AF928A +:1072F000BF92CF92DF92EF92FF920F931F93CF93A3 +:10730000DF9384E08093E9008091E80082FF2CC243 +:1073100084E690E09093D7018093D601E3DE082FB6 +:10732000853481F48CE195E29093D5018093D4016A +:1073300007B600FCFDCFF999FECF81E1809357009D +:10734000E89503C0843521F4CDDE8DE0E5DEE3C1B0 +:107350008C34D9F3803509F4F8CF843721F484E4F0 +:10736000DBDE80E0F3CF813611F489E5EFCF8134A5 +:1073700081F4B8DEC82FB6DE90E0880F991F3C2F4D +:10738000330F20E0822B932BAA2797FDA095BA2FCD +:1073900096C1803711F483E5D9CF833549F4CAEC1F +:1073A000D1E08991B9DE21E0C13DD207D1F7B3C167 +:1073B000863521F481E3B0DE80E3C8CF833731F432 +:1073C00087E8AADE85E9A8DE8EE1C0CF8536B9F46C +:1073D000E0E0F0E083E095E080935700E89507B6A1 +:1073E00000FCFDCF90935700E89507B600FCFDCF59 +:1073F000E058FF4FE11520E7F20771F7A6CF82377B +:1074000019F4E1E0F0E00EC0863419F4E0E0F0E0B9 +:1074100009C08E3419F4E3E0F0E004C0813539F49A +:10742000E2E0F0E089E08093570084918FCF8236CC +:1074300031F489E571DE80E06FDE80E887CF823449 +:1074400019F0873609F0D1C01092D5011092D401FD +:1074500049DEC82E47DED82E45DE182F85548230EF +:1074600010F08FE373CFDC2D80E0C82FCD29109270 +:107470006F00073609F041C081E180935700E8951D +:10748000B12C01E037C0C090DA01D090DB01E09070 +:10749000DC01F090DD011634B9F4EB2DF0E0EC29BD +:1074A000FD29849139DEBB2069F0E2E0CE0ED11CCB +:1074B000E11CF11CC092DA01D092DB01E092DC0108 +:1074C000F092DD01B02615C0D701C601B695A7958B +:1074D00097958795D5D420DEF2E0CF0ED11CE11C24 +:1074E000F11CC092DA01D092DB01E092DC01F09253 +:1074F000DD012197209739F674C08090DA019090D1 +:10750000DB01A090DC01B090DD01163409F057C01A +:1075100083E0F40180935700E89507B600FCFDCFA7 +:107520004EC0163439F5DD2009F14090DA01509053 +:10753000DB016090DC017090DD01D4DDF82EE12CE0 +:1075400097012C29F201090100935700E8951124B5 +:10755000F2E04F0E511C611C711C4092DA015092F6 +:10756000DB016092DC017092DD0102C0BBDDC82E40 +:10757000D02623C0B7DD682F8091DA019091DB011E +:10758000A091DC01B091DD01B695A79597958795FF +:107590007FD44091DA015091DB016091DC01709160 +:1075A000DD014E5F5F4F6F4F7F4F4093DA01509385 +:1075B000DB016093DC017093DD01219703C0C12CD6 +:1075C000D12C01E0209709F0ACCF163441F485E0CE +:1075D000F40180935700E89507B600FCFDCF8DE0DD +:1075E0009BDD82E080936F0096C0833471F4C0917C +:1075F000DA01D091DB0176DD90E021E0FE010C01A3 +:1076000020935700E8951124A0CE833611F5C09041 +:10761000DA01D090DB01E090DC01F090DD0162DD69 +:10762000B701A601416090E021E0FA010C0120932E +:107630005700E8951124F2E0CF0ED11CE11CF11C9B +:10764000C092DA01D092DB01E092DC01F092DD0120 +:107650007CCE8D3661F4E091DA01F091DB0185E0BA +:1076600080935700E89507B600FCFDCF6ECE8235BB +:1076700051F4E091DA01F091DB01C591D4918D2FA5 +:107680004BDD8C2F63CE843419F52CDD682F80916F +:10769000DA019091DB01A091DC01B091DD01B6959A +:1076A000A79597958795F4D38091DA019091DB01A6 +:1076B000A091DC01B091DD010296A11DB11D809366 +:1076C000DA019093DB01A093DC01B093DD013DCEA4 +:1076D0008436F1F4C090DA01D090DB01E090DC0157 +:1076E000F090DD01D701C601B695A79597958795CE +:1076F000C7D312DD22E0C20ED11CE11CF11CC092E6 +:10770000DA01D092DB01E092DC01F092DD0103C0EE +:107710008B3109F0A6CE83E08093E9009091E800D8 +:107720008091E8008E778093E80095FD11C08091EC +:10773000E80080FD04C08EB38111F9CF15C080919F +:10774000E8008E778093E80003C08EB3882361F051 +:107750008091E80080FFF9CF84E08093E900809178 +:10776000E8008B778093E800DF91CF911F910F9114 +:10777000FF90EF90DF90CF90BF90AF909F908F9051 +:107780007F906F905F904F90089580910008909146 +:107790000108109201081092000844B714BE28E1B5 +:1077A0000FB6F89420936000109260000FBEE0E0E6 +:1077B000F0E0259134912F3F3F4F79F040FF02C018 +:1077C000CADC0BC041FD09C0483039F420910001EA +:1077D000309101018217930799F7E3DC78941092B6 +:1077E000D5011092D4010CC07CDD39D38091D40135 +:1077F0009091D5018131974210F010920201BBDCCB +:10780000809102018111F0CF8091E000816080932E +:10781000E000A1DC80E090E00895292F30E03327DC +:107820002230310539F02330310549F0213031055E +:1078300089F00BC02EE330E08AE791E01EC0882378 +:1078400071F0813089F08230A1F020E030E080E0FA +:1078500090E013C022E130E088EB91E00EC024E01C +:1078600030E086E791E009C022E230E08CE391E06D +:1078700004C028E130E08AE091E0FA01918380833E +:10788000C90108958093E900EBEEF0E0808181600A +:107890008083EDEEF0E010826093EC0040838091F5 +:1078A000EE00881F8827881F08958091E20187FDD8 +:1078B00005C08091E80080FF0DC010C08091E800F5 +:1078C00082FD04C08EB38111F9CF08958091E80044 +:1078D0008B7707C08EB38111ECCF08958091E800BB +:1078E0008E778093E80008950F931F93CF93DF93D3 +:1078F00041D048D0C8EDD0E088818F7788838881D7 +:107900008068888388818F7D888319BC1EBA109215 +:10791000E00100EE10E0F80180818B7F8083888198 +:107920008160888342E060E080E0ACDFE1EEF0E07F +:1079300080818E7F8083E2EEF0E0808181608083B1 +:10794000808188608083F80180818E7F8083888138 +:1079500080618883DF91CF911F910F910895E7EDAA +:10796000F0E08081816080838AE482BF81E080933F +:10797000E101BACFE8EDF0E080818E7F8083109244 +:10798000E20008951092DA001092E10008951F922B +:107990000F920FB60F9211242F933F934F935F9343 +:1079A0006F937F938F939F93AF93BF93EF93FF93C7 +:1079B0008091DA0080FF19C08091D80080FF15C047 +:1079C0008091DA008E7F8093DA008091D90019BC13 +:1079D00080FF09C082E089BD09B400FEFDCF81E0CF +:1079E0008EBB3CD202C01EBA39D28091E10080FF2A +:1079F00017C08091E20080FF13C08091E2008E7F6B +:107A00008093E2008091E20080618093E2008091A7 +:107A1000D80080628093D80019BC85E08EBB1ED24E +:107A20008091E10084FF2BC08091E20084FF27C099 +:107A300019BC82E089BD09B400FEFDCF8091D80059 +:107A40008F7D8093D8008091E1008F7E8093E1004C +:107A50008091E2008F7E8093E2008091E20081605D +:107A60008093E2008091E001811104C08091E300E5 +:107A700087FF02C084E001C081E08EBBEFD180911E +:107A8000E10083FF21C08091E20083FF1DC080914F +:107A9000E100877F8093E10082E08EBB1092E001DD +:107AA0008091E1008E7F8093E1008091E2008E7FE3 +:107AB0008093E2008091E20080618093E20042E0E6 +:107AC00060E080E0DFDECAD1FF91EF91BF91AF911E +:107AD0009F918F917F916F915F914F913F912F91E6 +:107AE0000F900FBE0F901F9018954091E801509194 +:107AF000E9014617570748F06115710539F44091BF +:107B0000E8004E774093E80001C0BA01FC0140E074 +:107B100032C08EB3882309F441C0853009F440C0D7 +:107B20008091E80083FD38C08091E80082FD2EC07E +:107B30008091E80080FF1FC09091F3008091F200D7 +:107B4000392F20E0A901482BCA0106C0419140937A +:107B5000F1006150710901966115710519F08830C5 +:107B60009105A0F341E0089709F040E08091E8001A +:107B70008E778093E8006115710559F64111C9CFE0 +:107B800005C08EB3882351F0853051F08091E80014 +:107B900082FFF7CF80E0089581E0089582E00895A4 +:107BA00083E008956115710529F44091E8004B7751 +:107BB0004093E800AC0127C08EB38823B1F1853033 +:107BC00071F18091E80083FD2CC08091E80082FF74 +:107BD000F3CFFA0107C08091F1008193AF016150AA +:107BE000710961F0AF019091F3008091F200392F9B +:107BF00020E0D901A82BCD01892B69F78091E800FD +:107C00008B778093E80061157105B1F68091E800EB +:107C100080FD09C08EB3882341F08530B9F783E039 +:107C2000089581E0089580E0089582E00895EF923C +:107C3000FF920F931F93CF93DF9300D0CDB7DEB7A2 +:107C4000E2EEF1E08091F100819381E0EA3EF807F5 +:107C5000C9F719DB8091E80083FFE9C08091E20158 +:107C60009091E301953009F46FC038F4913071F1CF +:107C700070F0933009F0DBC029C0983009F4AAC035 +:107C8000993009F4B9C0963009F0D1C083C080386A +:107C900009F4CDC0823809F0CAC08091E601909104 +:107CA000E701877099278093E9009091EB0010928B +:107CB000E9008091E800877F8093E80095FB8827A2 +:107CC00080F98093F1001092F1008FC0882319F0A1 +:107CD000823009F0ACC08F71823009F0A8C0809169 +:107CE000E40181112BC08091E6019091E70187703A +:107CF0009927009709F49BC08093E9002091EB003D +:107D000020FF1CC02091E301233021F48091EB007F +:107D1000806212C09091EB0090619093EB0021E0A3 +:107D200030E001C0220F8A95EAF72093EA00109212 +:107D3000EA008091EB0088608093EB001092E900EC +:107D40008091E800877F54C0811171C00091E401E7 +:107D50001091E5010F771127E02EFFB6F89480917E +:107D6000E800877F8093E800A0DD8091E80080FF35 +:107D7000FCCF8091E3008078802B8093E3008068C3 +:107D80008093E300EE2011F083E001C082E08EBB1F +:107D9000FFBE4DC08058823008F049C0AE014F5F31 +:107DA0005F4F6091E6018091E4019091E50135DD3E +:107DB000009709F43CC02091E800277F2093E80059 +:107DC000BC0189819A8191DE8091E8008B77809354 +:107DD000E8002DC0803859F58091E800877F8093B6 +:107DE000E8008091E0018093F1008091E8008E77B7 +:107DF0008093E8005ADD1BC0811119C09091E40105 +:107E00009230A8F48091E800877F8093E8009093F7 +:107E1000E0014BDD8091E001811104C08091E3001D +:107E200087FF02C084E001C081E08EBB20DA809130 +:107E3000E80083FF0AC08091EB0080628093EB0032 +:107E40008091E800877F8093E8000F900F90DF918A +:107E5000CF911F910F91FF90EF9008950895CF93C8 +:107E60008EB3882359F0C091E900C7701092E900E1 +:107E70008091E80083FDDBDEC093E900CF91089597 +:107E8000F999FECF92BD81BDF89A992780B50895E2 +:107E9000262FF999FECF1FBA92BD81BD20BD0FB626 +:107EA000F894FA9AF99A0FBE01960895F894FFCFC4 +:107EB000777701000000000000081803410064000B +:107EC00061006600720075006900740020004900BE +:107ED0006E00640075007300740072006900650034 +:107EE000730020004C004C004300000022034100BE +:107EF0006400610066007200750069007400200073 +:107F0000430069007200630075006900740020007E +:107F100050006C0061007900670072006F0075000E +:107F20006E00640000000403090409023E0002011F +:107F30000080320904000001020201000524001043 +:107F40000104240204052406000107058203080039 +:107F5000FF09040100020A000000070504021000E6 +:107F60000107058302100001120110010200000840 +:107F70009A23110001000201000143415445524976 +:047F80004E4100006E +:040000030000700089 +:00000001FF diff --git a/external/arduino/avr/bootloaders/caterina/Caterina-Esplora.hex b/external/arduino/avr/bootloaders/caterina/Caterina-Esplora.hex new file mode 100644 index 000000000..b1bfb27c8 --- /dev/null +++ b/external/arduino/avr/bootloaders/caterina/Caterina-Esplora.hex @@ -0,0 +1,1024 @@ +:200000000C946E010C9496010C9496010C9496010C9496010C9496010C9496010C94960150 +:200020000C9496010C9496010C94F6040C947D050C9496010C9496010C9496010C949601BA +:200040000C9496010C9496010C9496010C9496010C9496010C9496010C9496010C94B501C9 +:200060000C9496010C9496010C9496010C9496010C9496010C9496010C9496010C949601C8 +:200080000C9496010C9496010C9496010C9496010C9496010C9496010C9496010C949601A8 +:2000A0000C9496010C9496010C94960100000000240027002A002D003000000000002500A4 +:2000C00028002B002E003100000000002300260029002C002F00040404040403040502027D +:2000E0000202040302020202060606060606040402020204040802011040804010204080A8 +:200100004080080204018040201002011080102040400000000200080E0000030401000BB2 +:200120000000070605040100080A0B0C0D09040309042203410072006400750069006E00CD +:200140006F0020004500730070006C006F007200610020001803410072006400750069000A +:200160006E006F0020004C004C004300120100020000004041233C8000010102000112011A +:2001800000020200004041233C8000010102000100C18081C1080B0002020201000904004C +:2001A000000102020000052400100105240101010424020605240600010705810310004094 +:2001C00009040100020A000000070502024000000705830240000005010902A1010901A186 +:2001E000008501050919012903150025019503750181029501750581030501093009310943 +:20020000381581257F750895038106C0C005010906A1018502050719E029E715002501754D +:20022000019508810295017508810395067508150025650507190029658100C0090402004C +:2002400001030000000921010100012265000705840340000100000000000000002A2B2895 +:200260000000000000000000000000000000000000000000002C9EB4A0A1A2A434A6A7A553 +:20028000AE362D3738271E1F20212223242526B333B62EB7B89F8485868788898A8B8C8D58 +:2002A0008E8F909192939495969798999A9B9C9D2F3130A3AD350405060708090A0B0C0D7C +:2002C0000E0F101112131415161718191A1B1C1DAFB1B0B5000032041007150811241FBE85 +:2002E000CFEFDAE0DEBFCDBF11E0A0E0B1E0E0EAF2E102C005900D92AC32B107D9F711E071 +:20030000ACE2B1E001C01D92AD39B107E1F712E0CCEDD2E004C02297FE010E944A09C63D07 +:20032000D107C9F70E946C030C944E090C9400008091000161E00E94390368EE73E080E043 +:2003400090E00E94FD018091000160E00E94390368EE73E080E090E00E94FD010895809196 +:20036000000161E00E94AC0208951F920F920FB60F9211242F933F938F939F93AF93BF93E5 +:200380008091300190913101A0913201B0913301309134010196A11DB11D232F2D5F2D3794 +:2003A00020F02D570196A11DB11D209334018093300190933101A0933201B0933301809117 +:2003C0002C0190912D01A0912E01B0912F010196A11DB11D80932C0190932D01A0932E01BA +:2003E000B0932F01BF91AF919F918F913F912F910F900FBE0F901F9018959B01AC017FB734 +:20040000F89480912C0190912D01A0912E01B0912F0166B5A89B05C06F3F19F00196A11DC3 +:20042000B11D7FBFBA2FA92F982F8827860F911DA11DB11D62E0880F991FAA1FBB1F6A9577 +:20044000D1F7BC012DC0FFB7F89480912C0190912D01A0912E01B0912F01E6B5A89B05C0E7 +:20046000EF3F19F00196A11DB11DFFBFBA2FA92F982F88278E0F911DA11DB11DE2E0880FFD +:20048000991FAA1FBB1FEA95D1F7861B970B885E9340C8F2215030404040504068517C4F8F +:2004A000211531054105510571F60895789484B5826084BD84B5816084BD85B5826085BD0F +:2004C00085B5816085BDEEE6F0E0808181608083E1E8F0E010828081826080838081816043 +:2004E0008083E0E8F0E0808181608083E1E9F0E0808182608083808181608083E0E9F0E07E +:20050000808181608083E1ECF0E0808184608083808182608083808181608083E3ECF0E007 +:20052000808181608083E0ECF0E0808182608083E2ECF0E0808181608083EAE7F0E080812F +:20054000846080838081826080838081816080838081806880830895CF93DF93482F50E0E5 +:20056000CA018C509F4FFC0134914A525F4FFA018491882369F190E0880F991FFC01E455D0 +:20058000FF4FA591B491FC01E654FF4FC591D491662351F42FB7F8948C91932F9095892362 +:2005A0008C93888189230BC0623061F42FB7F8948C91932F909589238C938881832B8883B2 +:2005C0002FBF06C09FB7F8948C91832B8C939FBFDF91CF910895883071F1893068F48230EF +:2005E00031F1833020F4813009F042C01DC0833089F08430E9F512C08B3059F18C3028F41C +:200600008930E9F08A30A1F51EC08C3031F18E3079F529C0809180008F7703C0809180003C +:200620008F7D80938000089584B58F7702C084B58F7D84BD0895809190008F7707C08091DB +:2006400090008F7D03C080919000877F8093900008958091C0008F7703C08091C0008F7DDD +:200660008093C00008958091C200877F8093C2000895FF920F931F93F62E482F50E0CA0144 +:200680008E5E9E4FFC012491CA018C509F4FFC0114914A525F4FFA0104910023C9F022239D +:2006A00019F0822F0E94EB02E02FF0E0EE0FFF1FE654FF4FA591B4919FB7F894FF2021F4DE +:2006C0008C911095812302C08C91812B8C939FBF1F910F91FF900895CF93DF930E94560262 +:2006E0008DE391E00E9433040E94AF01C0E0D0E00E9498012097E1F30E940000F9CF282F17 +:20070000809137018823C1F057FF1AC015C02898909336018091F1008193E217F307B9F75C +:200720004115510539F08091F200882319F48BE68093E800AFBF02C04FEF5FEFCA01089599 +:20074000AFB7F89427702093E9008091F200282F30E0241735070CF4A901FB019B01240F1E +:20076000311D94E6DACFDF93CF930F92CDB7DEB7BE016F5F7F4F41E050E00E947F03019712 +:2007800019F02FEF3FEF03C08981282F30E0C9010F90CF91DF910895FF920F931F93F82EEF +:2007A000142F052F40913A0150913B01212F302FC901DC01FB016EEF29C0F7FE02C0949125 +:2007C00001C09081209138013091390124173507ACF48091E8008570E1F38091E80082FF0F +:2007E00003C02FEF3FEF17C09093F100C90101968F739070892B11F46093E8002F5F3F4FEC +:200800003093390120933801119731961097A9F6812F902F9C01C9011F910F91FF900895E8 +:200820009C018091E80082FFFCCFF901260F311D03C08091F1008193E217F307D1F7289805 +:2008400084E6809336018BEF8093E800CB0108958093E9008091F200882319F08AE38093D3 +:20086000E800089508951092370181E08093D70080EA8093D80082E189BD09B400FEFDCFAC +:2008800061E070E080E090E00E94FD0180E98093D8008CE08093E2001092E000559A209A77 +:2008A00008955F926F927F928F929F92AF92BF92CF92DF92EF92FF920F931F93CF93DF93A8 +:2008C000E82E842E752E80913701882371F18B01242F352FC901EC017AEFF72E67E0962EC4 +:2008E0009E2050E4552E8E2D90E040E2A42EB12CA822B9223AE3632E20E4C22ED12CC82259 +:20090000D92258C09FB7F8949092E9008091E80085FD02C020E004C08091F200252D281B3E +:200920009FBF222361F4FA9419F42FEF3FEF4DC061E070E080E090E00E94FD013BC0822F1E +:2009400090E0C817D9070CF42C2FC21BD1094FB7F8949092E900A114B10421F406C01092D2 +:20096000F10021502223D9F719C0E7FC03C0F801922F10C0C801322F06C0FC010196E491FE +:20098000E093F10031503323C1F706C081918093F10091509923D1F7020F111D8091E800EB +:2009A00085FF05C0209729F4C114D10411F06092E8004FBF209709F0A5CF5D9884E68093F1 +:2009C0003501282D372DC9019C01C901DF91CF911F910F91FF90EF90DF90CF90BF90AF906D +:2009E0009F908F907F906F905F9008951F920F920FB60F9211242F933F934F935F936F93B8 +:200A00007F938F939F93AF93BF93EF93FF938091E1001092E100982F83FF0FC01092E900B0 +:200A200081E08093EB001092EC0082E38093ED001092370188E08093F00092FF34C083E037 +:200A40008093E9008091F200882319F08AE38093E8008FB7F89492E09093E9009091F20018 +:200A60008FBF992321F082E891E00E94530780913501882351F080913501815080933501F0 +:200A800080913501882309F45D9A80913601882351F0809136018150809336018091360191 +:200AA000882309F4289AFF91EF91BF91AF919F918F917F916F915F914F913F912F910F90CD +:200AC0000FBE0F901F9018950F931F93DF93CF930F92CDB7DEB719828E010F5F1F4FC8019D +:200AE0000E947907C8010E941209898190E00F90CF91DF911F910F9108951F920F920FB661 +:200B00000F921124EF92FF921F932F933F934F935F936F937F938F939F93AF93BF93EF9355 +:200B2000FF93DF93CF93CDB7DEB76197DEBFCDBF1092E9008091E80083FF0FC1FE01319679 +:200B40009E01275F3F4F03C08091F1008193E217F307D1F7289884E68093360182EF809356 +:200B6000E800998197FF05C08091E80080FFFCCF03C08EEF8093E800292F30E0C901807672 +:200B80009070892B09F0C2C08A81882329F41092F1001092F100D6C0813009F4D3C08330A3 +:200BA00009F4D0C0853049F48091E80080FFFCCF8B8180688093E300C5C0863009F07CC019 +:200BC0001C81EF80F8841230C1F51092E900109239011092380110923B0110923A010E94F6 +:200BE000640599E0FE013996DF01292F1D922A95E9F799871A8791E09E8790E8988B9AEF44 +:200C0000998B2091380130913901275F3F4F3C872B878D871092E9001092390110923801EC +:200C2000F0923B01E0923A0180E0BF0149E050E00E94CC030E94640585C01092E9001092E2 +:200C4000390110923801F0923B01E0923A01123241F482E290E00E940A09892B09F476C02B +:200C600071C0113079F488E0E816F10419F481E080933C0180913C01882309F06BC0ECE68D +:200C8000F1E013C0133009F061C08B81882319F4EEE2F1E00AC0823019F4E2E3F1E005C00A +:200CA000813009F053C0E4E5F1E0449180E8BF0150E00E94CC0346C0873009F447C08830C6 +:200CC00021F481E08093F1003DC08930D9F523703070232BD9F5E1E9F1E091E031E026E3A1 +:200CE0009093E9003093EB0084918093EC002093ED009F5F3196953099F78EE78093EA00FA +:200D00001092EA008B81809337011CC08F8198851092E900109239011092380190933B0146 +:200D200080933A018D81882329F4CE0101960E94850706C0823051F4CE0101960E94DB0754 +:200D4000882321F08EEF8093E80007C081E28093EB0003C0EEE7F1E0A8CF6196DEBFCDBF37 +:200D6000CF91DF91FF91EF91BF91AF919F918F917F916F915F914F913F912F911F91FF9004 +:200D8000EF900F900FBE0F901F90189520917E0130917F018091800190918101281B390B40 +:200DA0002F733070C901089520917E0130917F0180918001909181012817390719F42FEF3A +:200DC0003FEF09C0E0918001F0918101E25CFE4F8081282F30E0C901089520917E013091DC +:200DE0007F0180918001909181012817390719F42FEF3FEF13C0E0918001F0918101E25C60 +:200E0000FE4F2081809180019091810101968F739070909381018093800130E0C901089566 +:200E2000109285011092840188EE93E0A0E0B0E08093860190938701A0938801B09389019C +:200E400080E191E0909383018093820108950F931F93DF93CF930F92CDB7DEB78C0169838B +:200E600080910901882369F083E0BE016F5F7F4F41E050E00E9451041816190614F49C015B +:200E800007C081E090E0F8019383828320E030E0C9010F90CF91DF911F910F91089583E00D +:200EA0000E9428040895CF93DF9312C082E00E94B3032FEF8F3F9207C9F0E0917E01F091B8 +:200EC0007F01E25CFE4F8083D0937F01C0937E01C0917E01D0917F012196CF73D070809154 +:200EE000800190918101C817D90701F7DF91CF910895FC0180818E5F808380E865E971E0B5 +:200F000042E450E00E94CC030895FC0181819081913A59F4813209F04CC080E062E071E09A +:200F200047E050E00E94CC0342C0913209F041C0803239F482E091E067E070E00E9410042B +:200F400036C0823209F035C08281809309018091020190910301A0910401B0910501805B48 +:200F60009440A040B04019F58091090180FD12C087E797E790930108809300082BE088E1AE +:200F800090E00FB6F894A895809360000FBE209360000DC088E10FB6F89480936000109264 +:200FA00060000FBEA895109201081092000881E0089580E00895FC0191818081813A31F487 +:200FC000913089F080E0933089F40DC0813269F49B3021F4828180930A0105C09A3029F4AD +:200FE000828180930B0181E0089580E00895EF92FF920F931F938C01E62EDC01ED91FC91E5 +:201000000480F581E02D0995F82ED801ED91FC910680F781E02DC8016E2D09958F2D90E0E8 +:201020001F910F91FF90EF90089510929001109294011092930182E291E090939201809377 +:2010400091010895EF92FF920F931F93DF93CF930F92CDB7DEB789838B017A0184E0BE0137 +:201060006F5F7F4F41E050E00E94510484E4B801A7010E9451040F90CF91DF911F910F910D +:20108000FF90EF90089582E048E050E00E9422080895FC01168217821086118612861386F6 +:2010A00014823496BF010E9443080895DC01683810F0685829C0E62FF0E067FF13C0E0580A +:2010C000F04081E090E002C0880F991FEA95E2F7809514962C911497282314962C93149720 +:2010E00060E012C0EB5AFD4F6491662319F420E030E01DC067FF08C014968C9114978D7F29 +:2011000014968C9314976F77FD0190E0662321F08681861709F416829F5F31969630B1F701 +:20112000CD011496BD010E94430821E030E0C9010895CF93DF93DC01683810F0685825C01E +:20114000E62FF0E067FF12C0E058F04081E090E002C0880F991FEA95E2F714962C911497BE +:20116000282B14962C93149760E00FC0EB5AFD4F64916623D9F167FF08C014968C91149780 +:20118000826014968C9314976F7716968C9116978617A9F117968C911797861781F1189631 +:2011A0008C911897861759F119968C911997861731F11A968C911A97861709F11B968C915E +:2011C0001B978617E1F0ED01E0E0F0E09E2F8E81882321F4EA0FFB1F668306C09F5F31964E +:2011E0002196E630F10591F7963049F481E090E013969C938E93129720E030E007C0CD0189 +:201200001496BD010E94430821E030E0C901DF91CF91089580E867ED71E045E650E00E9427 +:20122000CC030895FC0180818F5F808380E86CE372E049E150E00E94CC030895CF92DF9210 +:20124000EF92FF920F931F93CF93DF937C016B018A01C0E0D0E00FC0D6016D916D01D701A6 +:20126000ED91FC910190F081E02DC7010995C80FD91F015010400115110571F7CE01DF91AB +:20128000CF911F910F91FF90EF90DF90CF900895EE0FFF1F0590F491E02D0994F894FFCFEC +:2012A0000D0000E100000000000001010000000027071E09C606ED06D4064F0753070000A0 +:2012C0000000F7071E09990856084908FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD +:2012E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E +:20130000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED +:20132000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCD +:20134000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD +:20136000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D +:20138000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6D +:2013A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4D +:2013C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2D +:2013E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D +:20140000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC +:20142000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCC +:20144000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAC +:20146000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8C +:20148000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C +:2014A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C +:2014C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C +:2014E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0C +:20150000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEB +:20152000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCB +:20154000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAB +:20156000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8B +:20158000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6B +:2015A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4B +:2015C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2B +:2015E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B +:20160000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA +:20162000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCA +:20164000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAA +:20166000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8A +:20168000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A +:2016A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4A +:2016C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A +:2016E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A +:20170000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9 +:20172000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9 +:20174000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9 +:20176000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF89 +:20178000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF69 +:2017A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF49 +:2017C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF29 +:2017E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF09 +:20180000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8 +:20182000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC8 +:20184000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA8 +:20186000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF88 +:20188000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF68 +:2018A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF48 +:2018C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF28 +:2018E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF08 +:20190000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7 +:20192000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7 +:20194000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA7 +:20196000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87 +:20198000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF67 +:2019A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF47 +:2019C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF27 +:2019E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07 +:201A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6 +:201A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC6 +:201A4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA6 +:201A6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF86 +:201A8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF66 +:201AA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF46 +:201AC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF26 +:201AE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF06 +:201B0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5 +:201B2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC5 +:201B4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5 +:201B6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF85 +:201B8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF65 +:201BA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF45 +:201BC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF25 +:201BE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05 +:201C0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4 +:201C2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4 +:201C4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA4 +:201C6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF84 +:201C8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF64 +:201CA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF44 +:201CC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF24 +:201CE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04 +:201D0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3 +:201D2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC3 +:201D4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA3 +:201D6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF83 +:201D8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF63 +:201DA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF43 +:201DC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF23 +:201DE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03 +:201E0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2 +:201E2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC2 +:201E4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA2 +:201E6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF82 +:201E8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF62 +:201EA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF42 +:201EC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF22 +:201EE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02 +:201F0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 +:201F2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC1 +:201F4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA1 +:201F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF81 +:201F8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF61 +:201FA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF41 +:201FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF21 +:201FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01 +:20200000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 +:20202000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 +:20204000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0 +:20206000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 +:20208000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60 +:2020A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40 +:2020C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20 +:2020E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +:20210000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF +:20212000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF +:20214000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F +:20216000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F +:20218000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F +:2021A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F +:2021C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F +:2021E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +:20220000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDE +:20222000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBE +:20224000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9E +:20226000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7E +:20228000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E +:2022A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E +:2022C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E +:2022E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE +:20230000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDD +:20232000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBD +:20234000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9D +:20236000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7D +:20238000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D +:2023A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D +:2023C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D +:2023E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD +:20240000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC +:20242000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBC +:20244000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9C +:20246000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C +:20248000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5C +:2024A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3C +:2024C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C +:2024E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC +:20250000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB +:20252000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBB +:20254000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9B +:20256000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7B +:20258000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B +:2025A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B +:2025C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1B +:2025E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB +:20260000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDA +:20262000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBA +:20264000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A +:20266000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7A +:20268000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5A +:2026A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3A +:2026C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1A +:2026E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA +:20270000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9 +:20272000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB9 +:20274000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99 +:20276000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF79 +:20278000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF59 +:2027A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF39 +:2027C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF19 +:2027E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9 +:20280000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8 +:20282000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB8 +:20284000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF98 +:20286000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF78 +:20288000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF58 +:2028A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF38 +:2028C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF18 +:2028E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8 +:20290000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7 +:20292000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB7 +:20294000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF97 +:20296000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77 +:20298000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF57 +:2029A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF37 +:2029C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF17 +:2029E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7 +:202A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6 +:202A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB6 +:202A4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF96 +:202A6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF76 +:202A8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF56 +:202AA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF36 +:202AC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF16 +:202AE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6 +:202B0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD5 +:202B2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5 +:202B4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF95 +:202B6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF75 +:202B8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF55 +:202BA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF35 +:202BC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF15 +:202BE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5 +:202C0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4 +:202C2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB4 +:202C4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF94 +:202C6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74 +:202C8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF54 +:202CA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF34 +:202CC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF14 +:202CE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4 +:202D0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3 +:202D2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB3 +:202D4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF93 +:202D6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF73 +:202D8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF53 +:202DA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF33 +:202DC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF13 +:202DE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3 +:202E0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD2 +:202E2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB2 +:202E4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF92 +:202E6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72 +:202E8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF52 +:202EA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF32 +:202EC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF12 +:202EE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2 +:202F0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD1 +:202F2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB1 +:202F4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF91 +:202F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF71 +:202F8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF51 +:202FA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF31 +:202FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF11 +:202FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1 +:20300000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0 +:20302000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0 +:20304000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90 +:20306000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70 +:20308000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50 +:2030A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30 +:2030C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF10 +:2030E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 +:20310000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF +:20312000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF +:20314000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F +:20316000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F +:20318000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F +:2031A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F +:2031C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F +:2031E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF +:20320000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE +:20322000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAE +:20324000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E +:20326000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E +:20328000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4E +:2032A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E +:2032C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E +:2032E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEE +:20330000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCD +:20332000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD +:20334000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D +:20336000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6D +:20338000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4D +:2033A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2D +:2033C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D +:2033E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED +:20340000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCC +:20342000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAC +:20344000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8C +:20346000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C +:20348000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C +:2034A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C +:2034C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0C +:2034E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC +:20350000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCB +:20352000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAB +:20354000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8B +:20356000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6B +:20358000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4B +:2035A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2B +:2035C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B +:2035E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEB +:20360000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCA +:20362000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAA +:20364000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8A +:20366000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A +:20368000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4A +:2036A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A +:2036C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A +:2036E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA +:20370000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9 +:20372000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9 +:20374000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF89 +:20376000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF69 +:20378000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF49 +:2037A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF29 +:2037C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF09 +:2037E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9 +:20380000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC8 +:20382000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA8 +:20384000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF88 +:20386000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF68 +:20388000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF48 +:2038A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF28 +:2038C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF08 +:2038E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8 +:20390000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7 +:20392000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA7 +:20394000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87 +:20396000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF67 +:20398000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF47 +:2039A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF27 +:2039C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07 +:2039E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7 +:203A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC6 +:203A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA6 +:203A4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF86 +:203A6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF66 +:203A8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF46 +:203AA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF26 +:203AC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF06 +:203AE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6 +:203B0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC5 +:203B2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5 +:203B4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF85 +:203B6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF65 +:203B8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF45 +:203BA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF25 +:203BC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05 +:203BE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5 +:203C0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4 +:203C2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA4 +:203C4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF84 +:203C6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF64 +:203C8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF44 +:203CA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF24 +:203CC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04 +:203CE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4 +:203D0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC3 +:203D2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA3 +:203D4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF83 +:203D6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF63 +:203D8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF43 +:203DA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF23 +:203DC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03 +:203DE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3 +:203E0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC2 +:203E2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA2 +:203E4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF82 +:203E6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF62 +:203E8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF42 +:203EA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF22 +:203EC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02 +:203EE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2 +:203F0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC1 +:203F2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA1 +:203F4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF81 +:203F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF61 +:203F8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF41 +:203FA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF21 +:203FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01 +:203FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 +:20400000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 +:20402000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0 +:20404000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 +:20406000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60 +:20408000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40 +:2040A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20 +:2040C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +:2040E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 +:20410000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF +:20412000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F +:20414000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F +:20416000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F +:20418000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F +:2041A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F +:2041C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +:2041E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF +:20420000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBE +:20422000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9E +:20424000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7E +:20426000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E +:20428000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E +:2042A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E +:2042C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE +:2042E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDE +:20430000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBD +:20432000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9D +:20434000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7D +:20436000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D +:20438000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D +:2043A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D +:2043C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD +:2043E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDD +:20440000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBC +:20442000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9C +:20444000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C +:20446000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5C +:20448000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3C +:2044A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C +:2044C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC +:2044E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC +:20450000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBB +:20452000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9B +:20454000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7B +:20456000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B +:20458000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B +:2045A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1B +:2045C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB +:2045E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB +:20460000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBA +:20462000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A +:20464000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7A +:20466000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5A +:20468000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3A +:2046A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1A +:2046C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA +:2046E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDA +:20470000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB9 +:20472000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99 +:20474000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF79 +:20476000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF59 +:20478000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF39 +:2047A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF19 +:2047C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9 +:2047E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9 +:20480000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB8 +:20482000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF98 +:20484000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF78 +:20486000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF58 +:20488000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF38 +:2048A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF18 +:2048C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8 +:2048E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8 +:20490000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB7 +:20492000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF97 +:20494000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77 +:20496000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF57 +:20498000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF37 +:2049A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF17 +:2049C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7 +:2049E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7 +:204A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB6 +:204A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF96 +:204A4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF76 +:204A6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF56 +:204A8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF36 +:204AA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF16 +:204AC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6 +:204AE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6 +:204B0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5 +:204B2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF95 +:204B4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF75 +:204B6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF55 +:204B8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF35 +:204BA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF15 +:204BC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5 +:204BE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD5 +:204C0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB4 +:204C2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF94 +:204C4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74 +:204C6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF54 +:204C8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF34 +:204CA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF14 +:204CC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4 +:204CE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4 +:204D0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB3 +:204D2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF93 +:204D4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF73 +:204D6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF53 +:204D8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF33 +:204DA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF13 +:204DC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3 +:204DE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3 +:204E0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB2 +:204E2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF92 +:204E4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72 +:204E6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF52 +:204E8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF32 +:204EA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF12 +:204EC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2 +:204EE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD2 +:204F0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB1 +:204F2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF91 +:204F4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF71 +:204F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF51 +:204F8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF31 +:204FA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF11 +:204FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1 +:204FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD1 +:20500000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0 +:20502000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90 +:20504000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70 +:20506000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50 +:20508000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30 +:2050A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF10 +:2050C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 +:2050E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0 +:20510000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF +:20512000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F +:20514000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F +:20516000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F +:20518000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F +:2051A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F +:2051C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF +:2051E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF +:20520000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAE +:20522000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E +:20524000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E +:20526000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4E +:20528000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E +:2052A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E +:2052C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEE +:2052E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE +:20530000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD +:20532000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D +:20534000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6D +:20536000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4D +:20538000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2D +:2053A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D +:2053C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED +:2053E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCD +:20540000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAC +:20542000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8C +:20544000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C +:20546000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C +:20548000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C +:2054A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0C +:2054C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC +:2054E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCC +:20550000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAB +:20552000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8B +:20554000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6B +:20556000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4B +:20558000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2B +:2055A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B +:2055C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEB +:2055E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCB +:20560000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAA +:20562000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8A +:20564000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A +:20566000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4A +:20568000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A +:2056A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A +:2056C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA +:2056E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCA +:20570000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9 +:20572000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF89 +:20574000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF69 +:20576000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF49 +:20578000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF29 +:2057A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF09 +:2057C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9 +:2057E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9 +:20580000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA8 +:20582000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF88 +:20584000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF68 +:20586000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF48 +:20588000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF28 +:2058A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF08 +:2058C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8 +:2058E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC8 +:20590000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA7 +:20592000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87 +:20594000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF67 +:20596000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF47 +:20598000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF27 +:2059A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07 +:2059C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7 +:2059E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7 +:205A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA6 +:205A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF86 +:205A4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF66 +:205A6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF46 +:205A8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF26 +:205AA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF06 +:205AC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6 +:205AE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC6 +:205B0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5 +:205B2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF85 +:205B4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF65 +:205B6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF45 +:205B8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF25 +:205BA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05 +:205BC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5 +:205BE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC5 +:205C0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA4 +:205C2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF84 +:205C4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF64 +:205C6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF44 +:205C8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF24 +:205CA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04 +:205CC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4 +:205CE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4 +:205D0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA3 +:205D2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF83 +:205D4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF63 +:205D6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF43 +:205D8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF23 +:205DA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03 +:205DC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3 +:205DE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC3 +:205E0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA2 +:205E2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF82 +:205E4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF62 +:205E6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF42 +:205E8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF22 +:205EA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02 +:205EC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2 +:205EE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC2 +:205F0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA1 +:205F2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF81 +:205F4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF61 +:205F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF41 +:205F8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF21 +:205FA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01 +:205FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 +:205FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC1 +:20600000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0 +:20602000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 +:20604000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60 +:20606000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40 +:20608000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20 +:2060A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +:2060C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 +:2060E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 +:20610000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F +:20612000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F +:20614000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F +:20616000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F +:20618000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F +:2061A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +:2061C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF +:2061E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF +:20620000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9E +:20622000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7E +:20624000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E +:20626000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E +:20628000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E +:2062A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE +:2062C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDE +:2062E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBE +:20630000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9D +:20632000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7D +:20634000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D +:20636000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D +:20638000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D +:2063A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD +:2063C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDD +:2063E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBD +:20640000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9C +:20642000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C +:20644000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5C +:20646000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3C +:20648000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C +:2064A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC +:2064C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC +:2064E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBC +:20650000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9B +:20652000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7B +:20654000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B +:20656000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B +:20658000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1B +:2065A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB +:2065C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB +:2065E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBB +:20660000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A +:20662000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7A +:20664000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5A +:20666000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3A +:20668000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1A +:2066A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA +:2066C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDA +:2066E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBA +:20670000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99 +:20672000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF79 +:20674000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF59 +:20676000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF39 +:20678000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF19 +:2067A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9 +:2067C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9 +:2067E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB9 +:20680000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF98 +:20682000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF78 +:20684000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF58 +:20686000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF38 +:20688000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF18 +:2068A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8 +:2068C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8 +:2068E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB8 +:20690000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF97 +:20692000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77 +:20694000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF57 +:20696000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF37 +:20698000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF17 +:2069A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7 +:2069C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7 +:2069E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB7 +:206A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF96 +:206A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF76 +:206A4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF56 +:206A6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF36 +:206A8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF16 +:206AA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6 +:206AC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6 +:206AE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB6 +:206B0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF95 +:206B2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF75 +:206B4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF55 +:206B6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF35 +:206B8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF15 +:206BA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5 +:206BC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD5 +:206BE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5 +:206C0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF94 +:206C2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74 +:206C4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF54 +:206C6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF34 +:206C8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF14 +:206CA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4 +:206CC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4 +:206CE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB4 +:206D0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF93 +:206D2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF73 +:206D4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF53 +:206D6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF33 +:206D8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF13 +:206DA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3 +:206DC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3 +:206DE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB3 +:206E0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF92 +:206E2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72 +:206E4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF52 +:206E6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF32 +:206E8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF12 +:206EA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2 +:206EC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD2 +:206EE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB2 +:206F0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF91 +:206F2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF71 +:206F4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF51 +:206F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF31 +:206F8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF11 +:206FA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1 +:206FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD1 +:206FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB1 +:2070000055C000006EC000006CC000006AC0000068C0000066C0000064C0000062C0000043 +:2070200060C000005EC00000F2C400005AC0000058C0000056C0000054C0000052C00000EE +:2070400050C0000078C000004CC000004AC0000048C0000046C0000044C0000042C00000BE +:2070600040C000003EC000003CC000003AC0000038C0000036C0000034C0000032C0000048 +:2070800030C000002EC000002CC000002AC0000028C0000026C0000024C0000022C00000A8 +:2070A00020C000001EC000001CC0000011241FBECFEFDAE0DEBFCDBF11E0A0E0B1E0E2E3BC +:2070C000FFE702C005900D92A83AB107D9F711E0A8EAB1E001C01D92AE3BB107E1F78FD30B +:2070E00026C78ECFF89410926F0010928100109285001092840081E085BF15BE47985D9AEB +:20710000289A0C94000008952091B2013091B3012F5F3F4F3093B3012093B201932F37FFA6 +:2071200003C08EEF831B982F990F921710F447980895479A08951F920F920FB60F9211246E +:207140002F938F939F93EF93FF9310928500109284008091A8019091A901009741F00197D3 +:207160009093A9018093A801892B09F45D9A8091AA019091AB01009741F001979093AB0126 +:207180008093AA01892B09F4289AE0E0F0E0859194918F5F9F4F49F08091AC019091AD0151 +:2071A00001969093AD018093AC01FF91EF919F918F912F910F900FBE0F901F90189584E0BC +:2071C0008093E9000DC08091E8008B778093E80003C08EB3882351F08091E80082FFF9CFBE +:2071E0008091E80085FFEFCF8091F1000895982F83E08093E9008091E80085FD0DC0809136 +:20720000E8008E778093E80003C08EB3882369F08091E80080FFF9CF9093F1005D9884E6CB +:2072200090E09093A9018093A80108954F925F926F927F928F929F92AF92BF92CF92DF921E +:20724000EF92FF920F931F93CF93DF9384E08093E9008091E80082FF57C2289884E690E067 +:207260009093AB018093AA01AADF182F853481F48CE49DE19093AD018093AC0107B600FC4B +:20728000FDCFF999FECF81E180935700E89503C0843519F494DF8DE00DC28C34E1F38035F9 +:2072A000D1F3843721F484E4A2DF80E003C2813611F489E5FFC18134B1F481DF182F7FDFE3 +:2072C00090E0880F991FAA2797FDA095BA2F312F330F20E0442737FD4095542F822B932B68 +:2072E000A42BB52BB8C1803711F483E5E3C1833549F4C0E0D1E089917ADF21E0C730D20714 +:20730000D1F7D9C1863521F481E371DF80E3D2C1833731F487E86BDF85E969DF8EE1CAC149 +:207320008536B9F4E0E0F0E093E085E090935700E89507B600FCFDCF80935700E89507B65D +:2073400000FCFDCFE058FF4FA0E7E030FA0771F7A2CF823739F4E1E0F0E089E08093570024 +:207360008491A8C1863439F4E0E0F0E089E08093570084919FC18E3439F4E3E0F0E089E0E5 +:2073800080935700849196C1813539F4E2E0F0E089E08093570084918DC1823631F489E521 +:2073A00026DF80E024DF80E885C1823419F0873609F0E5C01092AD011092AC0100DF082FE8 +:2073C000FEDEF82EFCDE682E8554823008F071C1902F80E0CF2DD0E0C82BD92B10926F00B3 +:2073E000173609F04BC081E180935700E895DD24CC24C3943FC0E090AE01F090AF010091CC +:20740000B0011091B101B6E46B16D9F4ED2DF0E0EE29FF29E4918E2FEADEDD2081F082E08D +:2074200090E0A0E0B0E0E80EF91E0A1F1B1FE092AE01F092AF010093B0011093B101DC2470 +:2074400018C0D801C701B695A7959795879559D5CEDE82E090E0A0E0B0E0E80EF91E0A1FF2 +:207460001B1FE092AE01F092AF010093B0011093B1012197209709F0BECF7DC08090AE01F5 +:207480009090AF01A090B001B090B10196E4691609F05DC083E0F40180935700E89507B63E +:2074A00000FCFDCF54C0F6E46F1661F5772031F1E090AE01F090AF010091B0011091B1019E +:2074C0007EDED82ECC24852D90E08C299D29F7010C0140925700E895112482E090E0A0E08B +:2074E000B0E0E80EF91E0A1F1B1FE092AE01F092AF010093B0011093B10102C060DE582E1A +:20750000742423C0E090AE01F090AF010091B0011091B10116950795F794E79450DE682FFA +:20752000C701F7D48091AE019091AF01A091B001B091B1010296A11DB11D8093AE01909349 +:20754000AF01A093B001B093B101219704C05524772444244394209709F0A5CF96E46916B6 +:2075600041F485E0F40180935700E89507B600FCFDCF8DE03CDE82E080936F009CC0833492 +:2075800071F40091AE011091AF0119DE90E021E0F8010C0120935700E89511247CCE8336C8 +:2075A00019F5E090AE01F090AF010091B0011091B10105DEF701E16090E021E00C0120938C +:2075C0005700E895112482E090E0A0E0B0E0E80EF91E0A1F1B1FE092AE01F092AF0100936A +:2075E000B0011093B10157CE8D3661F4E091AE01F091AF0185E080935700E89507B600FCF2 +:20760000FDCF49CE823551F4E091AE01F091AF0105911491812FEBDD802F4CC0843421F5FE +:20762000E090AE01F090AF010091B0011091B10116950795F794E794C2DD682FC70169D4DE +:207640008091AE019091AF01A091B001B091B1010296A11DB11D8093AE019093AF01A093D8 +:20766000B001B093B10117CE843609F5E090AE01F090AF010091B0011091B101D801C70142 +:20768000B695A795979587953CD4B1DD82E090E0A0E0B0E0E80EF91E0A1F1B1FE092AE010A +:2076A000F092AF010093B0011093B10104C08B3111F08FE39CDD83E08093E9009091E8002B +:2076C0008091E8008E778093E80095FF04C010C08EB38823C9F08091E80080FFF9CF809193 +:2076E000E8008E778093E80003C08EB3882361F08091E80080FFF9CF84E08093E9008091F1 +:20770000E8008B778093E800DF91CF911F910F91FF90EF90DF90CF90BF90AF909F908F90AC +:207720007F906F905F904F9008959091B601892F8F77813249F58091B7018032A1F081328A +:2077400019F5913A09F58091E800877F8093E8008DE091E067E070E00BD28091E8008B770B +:207760008093E8000895913279F48091E800877F8093E8008DE091E067E070E05DD2809192 +:20778000E8008E778093E800089582E061EC42E0B5D083E061E842E1B1D084E060E842E1EF +:2077A000ADC084B7877F84BF88E10FB6F89480936000109260000FBE20E880E090E00FB63F +:2077C000F89420936100809361000FBE81E085BF92E095BF3F9A209A559AE1E6F0E02083A1 +:2077E000108247985D9A289A109289008AEF8093880090936F0083E080938100F0C0409116 +:20780000000850910108109201081092000894B714BE88E10FB6F8948093600010926000D5 +:207820000FBE292F30E0F901E270F07091FD18C090FF05C0859194918F5F9F4F81F423FFFF +:207840000FC08091090190910A014817590741F0E0E0F0E0859194918F5F9F4F09F042DC64 +:20786000A0DF78941092AD011092AC010CC0DEDC36D38091AC019091AD0181549F4110F00D +:207880001092140141DC80911401882381F78091E00081608093E00025DC80E090E0089598 +:2078A000FA01923049F0933061F09130F9F485E191E022E130E01EC087E291E02EE330E04D +:2078C00019C0882329F485E691E024E030E012C0813029F489E691E022E230E00BC0823006 +:2078E00029F48DE891E028E130E004C080E090E020E030E091838083C90108958093E9004E +:207900008091EB0081608093EB001092ED006093EC004093ED008091EE00881F8827881F62 +:2079200008958091B60188238CF403C08EB38823B1F08091E80082FFF9CF8091E8008B772A +:207940008093E80008958EB3882349F08091E80080FFF9CF8091E8008E778093E800089594 +:20796000EF92FF920F931F9345D04CD008ED10E0F80180818F77808380818068808380819B +:207980008F7D808319BC1EBA1092B40180EEE82EF12CF70180818B7F8083F8018081816052 +:2079A000808380E060E042E0A9DFE1EEF0E080818E7F8083E2EEF0E0808181608083808144 +:2079C00088608083F70180818E7F8083F8018081806180831F910F91FF90EF900895E7ED06 +:2079E000F0E08081816080838AE482BF81E08093B501B6CFE8EDF0E080818E7F808310921C +:207A0000E20008951092DA001092E10008951F920F920FB60F9211242F933F934F935F93F6 +:207A20006F937F938F939F93AF93BF93EF93FF938091DA0080FF1BC08091D80080FF17C0B2 +:207A40008091DA008E7F8093DA008091D90080FF0BC080E189BD82E189BD09B400FEFDCF36 +:207A600081E08EBB3BD203C019BC1EBA37D28091E10080FF17C08091E20080FF13C0809138 +:207A8000E2008E7F8093E2008091E20080618093E2008091D80080628093D80019BC85E049 +:207AA0008EBB1CD28091E10084FF2CC08091E20084FF28C080E189BD82E189BD09B400FEC5 +:207AC000FDCF8091D8008F7D8093D8008091E1008F7E8093E1008091E2008F7E8093E20012 +:207AE0008091E20081608093E2008091B401882331F48091E30087FD02C081E001C084E067 +:207B00008EBBECD18091E10083FF21C08091E20083FF1DC08091E100877F8093E10082E06A +:207B20008EBB1092B4018091E1008E7F8093E1008091E2008E7F8093E2008091E2008061E9 +:207B40008093E20080E060E042E0D8DEC7D1FF91EF91BF91AF919F918F917F916F915F9130 +:207B60004F913F912F910F900FBE0F901F9018959C014091BC015091BD014617570718F49D +:207B8000F90190E044C06115710511F0AB01F8CF8091E8008E778093E80040E050E0F0CF0F +:207BA0008EB3882309F444C0853009F443C08091E80083FF02C081E008958091E80082FD70 +:207BC00031C08091E80080FF22C08091F3009091F200782F60E0292F30E0262B372B07C07A +:207BE00081918093F100415050402F5F3F4F4115510519F02830310598F390E02830310566 +:207C000009F491E08091E8008E778093E8004115510531F6992321F605C08EB3882341F075 +:207C2000853041F08091E80082FFF7CF80E0089582E0089583E008959C016115710529F47C +:207C40008091E8008B778093E800F90126C08EB3882391F1853091F18091E80083FF02C06C +:207C600081E008958091E80082FFF1CF06C08091F10081936150704059F02091F300809191 +:207C8000F200322F20E090E0822B932B892B79F78091E8008B778093E80061157105B9F601 +:207CA00005C08EB3882341F0853041F08091E80080FFF7CF80E0089582E0089583E00895C2 +:207CC0000F931F93DF93CF9300D0CDB7DEB7E6EBF1E08091F100819381E0EE3BF807C9F792 +:207CE00024DD8091E80083FFE4C08091B6019091B701953009F46DC0963040F4913081F1A7 +:207D0000913070F0933009F0D4C02AC0983009F4A3C0993009F4B2C0963009F0CAC07CC023 +:207D2000803809F4C6C0823809F0C3C08091BA0187708093E9008091EB001092E9002091DB +:207D4000E800277F2093E80090E025E0969587952A95E1F781708093F1001092F10087C0D8 +:207D6000882319F0823009F0A4C08F71823009F0A0C08091B801882331F52091BA01277097 +:207D800009F497C02093E9008091EB0080FF1BC0933021F48091EB00806213C08091EB0018 +:207DA00080618093EB0081E090E002C0880F991F2A95E2F78093EA001092EA008091EB00E5 +:207DC00088608093EB001092E9008091E800877F51C0882309F06DC01091B8011F770FB79B +:207DE000F8948091E800877F8093E8009ADD8091E80080FFFCCF8091E3008078812B809398 +:207E0000E30080688093E300112311F482E001C083E08EBB0FBF4DC08058823008F049C033 +:207E20008091B8019091B9016091BA01AE014F5F5F4F36DDBC01009709F43BC08091E8008E +:207E4000877F8093E80089819A8192DE8091E8008B778093E8002DC0803859F58091E800AA +:207E6000877F8093E8008091B4018093F1008091E8008E778093E80054DD1BC08823C9F4CA +:207E80009091B8019230A8F48091E800877F8093E8009093B40145DD8091B401882331F420 +:207EA0008091E30087FD02C081E001C084E08EBB6CDC8091E80083FF0AC08091EB0080624E +:207EC0008093EB008091E800877F8093E8000F900F90CF91DF911F910F91089508951F9360 +:207EE0008EB3882361F01091E9001092E9008091E80083FF01C0E4DE17701093E9001F916F +:207F00000895F999FECF92BD81BDF89A992780B50895262FF999FECF1FBA92BD81BD20BDBD +:207F20000FB6F894FA9AF99A0FBE01960895F894FFCF4341544552494E4100777700080031 +:207F400000000000000801120110010200000841233C0001000201000109023E00020100F9 +:207F600080320904000001020201000524001001042402040524060001070582030800FF0C +:207F800009040100020A000000070504021000010705830210000104030904220341007216 +:207FA000006400750069006E006F0020004500730070006C006F0072006100200000001874 +:1A7FC00003410072006400750069006E006F0020004C004C004300000000D7 +:00000001FF diff --git a/external/arduino/avr/bootloaders/caterina/Caterina-Esplora.txt b/external/arduino/avr/bootloaders/caterina/Caterina-Esplora.txt new file mode 100644 index 000000000..aef5df13d --- /dev/null +++ b/external/arduino/avr/bootloaders/caterina/Caterina-Esplora.txt @@ -0,0 +1,6 @@ +LUFA: 111009 +make: 3.81 +avrdude: 5.11.1 +avr-libc: 1.6.7 +binutils-avr: 2.19 +gcc-avr 4.3.3 diff --git a/external/arduino/avr/bootloaders/caterina/Caterina-Industrial101.hex b/external/arduino/avr/bootloaders/caterina/Caterina-Industrial101.hex new file mode 100644 index 000000000..1bad35467 --- /dev/null +++ b/external/arduino/avr/bootloaders/caterina/Caterina-Industrial101.hex @@ -0,0 +1,250 @@ +:107000005FC0000078C0000076C0000074C00000BF +:1070100072C0000070C000006EC000006CC00000B4 +:107020006AC0000068C00000DAC4000064C000004C +:1070300062C0000060C000005EC000005CC00000D4 +:107040005AC000009DC0000056C0000054C000009F +:1070500052C0000050C000004EC000004CC00000F4 +:107060004AC0000048C0000046C0000044C0000004 +:1070700042C0000040C000003EC000003CC0000014 +:107080003AC0000038C0000036C0000034C0000024 +:1070900032C0000030C000002EC000002CC0000034 +:1070A0002AC0000028C0000026C00000583E713EE3 +:1070B000153F713E153FA63EC83E153FE83EFA3EDD +:1070C00011241FBECFEFDAE0DEBFCDBF11E0A0E09C +:1070D000B1E0E4EBFEE702C005900D92A63BB107DC +:1070E000D9F721E0A6EBB1E001C01D92AF3CB20799 +:1070F000E1F720D3DDC684CF84E08093E90080915E +:10710000E80085FD0EC08091E8008B778093E80051 +:107110008091E80082FDF3CF8EB38111F9CF80E03A +:1071200008958091F100089593E09093E900909183 +:10713000E80095FF0AC08093F1005D9884E690E036 +:107140009093BD018093BC0108959091E8009E77D3 +:107150009093E8009091E80090FDEDCF9EB39111DF +:10716000F9CF0895F89410926F001092810081E099 +:1071700085BF15BE47985D9A289A0C940000089523 +:107180001F920F920FB60F9211242F938F939F93FC +:10719000EF93FF9310928500109284008091BC01C0 +:1071A0009091BD01009741F001979093BD018093AC +:1071B000BC01892B09F45D9A8091BA019091BB01C1 +:1071C000009741F001979093BB018093BA01892BFE +:1071D00009F4289A8091B6019091B7010196909395 +:1071E000B7018093B601E0E0F0E0859194910196BB +:1071F00049F08091B8019091B90101969093B9013D +:107200008093B801FF91EF919F918F912F910F90F3 +:107210000FBE0F901F90189542E061EC82E05AD3A8 +:1072200042E161E883E056D342E160E884E052C382 +:107230008091C701982F9F77913239F59091C801BD +:10724000903291F0913209F5813AF9F48091E80099 +:10725000877F8093E80067E070E082E091E070D47F +:107260008091E8008B770FC0813279F48091E8003B +:10727000877F8093E80067E070E082E091E0B9D416 +:107280008091E8008E778093E80008954F925F9296 +:107290006F927F928F929F92AF92BF92CF92DF9226 +:1072A000EF92FF92CF93DF9384E08093E900809187 +:1072B000E80082FF30C2289884E690E09093BB01FA +:1072C0008093BA0119DFD82F853481F48CE49DE1D5 +:1072D0009093B9018093B80107B600FCFDCFF999EE +:1072E000FECF81E180935700E89503C0843521F4F7 +:1072F00003DF8DE019DFE6C18C34D9F38035C9F3A3 +:10730000843721F484E410DF80E0F4CF813611F477 +:1073100089E5F0CF813491F4EFDEC82FEDDE90E007 +:10732000880F991F2C2F30E0322F2227330F822B0A +:10733000932BAA2797FDA095BA2F98C1803711F4F7 +:1073400083E5D8CF833549F4CDEAD1E08991ECDEED +:1073500021E0C43BD207D1F7B5C1863521F481E3E2 +:10736000E3DE80E3C7CF833731F487E8DDDE85E9EC +:10737000DBDE8EE1BFCF8536B9F4E0E0F0E083E0FC +:1073800095E080935700E89507B600FCFDCF9093F9 +:107390005700E89507B600FCFDCFE058FF4FE11518 +:1073A00020E7F20771F7A5CF823719F4E1E0F0E0AA +:1073B0000EC0863419F4E0E0F0E009C08E3419F410 +:1073C000E3E0F0E004C0813539F4E2E0F0E089E088 +:1073D0008093570084918ECF823631F489E5A4DE04 +:1073E00080E0A2DE80E886CF823419F0873609F08B +:1073F000D5C01092B9011092B8017EDED82E7CDE85 +:10740000E82E7ADEC82F8BEB8C0F823010F08FE3E2 +:1074100071CFF12CFD2810926F00D73609F045C0CE +:1074200081E180935700E8955701912CD1E0A11498 +:10743000B10409F4AFC0C090BF01D090C001E0908A +:10744000C101F090C201C634B9F4E92DF0E0EC2995 +:10745000FD29849169DE992069F082E0C80ED11C73 +:10746000E11CF11CC092BF01D092C001E092C101A9 +:10747000F092C2019D2615C0D701C601B695A79509 +:1074800097958795FFD450DEE2E0CE0ED11CE11C2B +:10749000F11CC092BF01D092C001E092C101F092F4 +:1074A000C201F1E0AF1AB108C2CF8090BF01909045 +:1074B000C001A090C101B090C201C63421F0C12C1E +:1074C000D12CD1E030C083E0F40180935700E895DF +:1074D00007B600FCFDCFF3CFC63461F5DD2039F1EE +:1074E0004090BF015090C0016090C1017090C201F6 +:1074F00003DE2C2D30E0382BF2010901D093570028 +:10750000E8951124F2E04F0E511C611C711C409251 +:10751000BF015092C0016092C1017092C201DD268C +:1075200021E0E21AF108E114F104B1F627C0E4DD2C +:10753000C82EF5CFE1DD682F8091BF019091C00189 +:10754000A091C101B091C201B695A7959795879575 +:10755000A1D44091BF015091C0016091C1017091CF +:10756000C2014E5F5F4F6F4F7F4F4093BF015093FB +:10757000C0016093C1017093C201D2CFC63441F4FF +:1075800085E0F40180935700E89507B600FCFDCF35 +:107590008DE0CADD82E080936F0094C0833471F483 +:1075A000C091BF01D091C001A7DD90E021E0FE01B4 +:1075B0000C0120935700E89511249BCE833601F5EA +:1075C000C090BF01D090C001E090C101F090C20115 +:1075D00093DDF601E16090E021E00C01209357007B +:1075E000E8951124F2E0CF0ED11CE11CF11CC092F1 +:1075F000BF01D092C001E092C101F092C20179CEE8 +:107600008D3661F4E091BF01F091C00185E0809377 +:107610005700E89507B600FCFDCF6BCE823551F4DC +:10762000E091BF01F091C001C591D4918D2F7CDD17 +:107630008C2F60CE843419F55FDD682F8091BF01F7 +:107640009091C001A091C101B091C201B695A795DA +:10765000979587951FD48091BF019091C001A0910B +:10766000C101B091C2010296A11DB11D8093BF015D +:107670009093C001A093C101B093C2013ACE843669 +:10768000F1F4C090BF01D090C001E090C101F09032 +:10769000C201D701C601B695A79597958795F2D3F4 +:1076A00043DD22E0C20ED11CE11CF11CC092BF01DF +:1076B000D092C001E092C101F092C20103C08B31AF +:1076C00009F0A5CE83E08093E9009091E8008091D5 +:1076D000E8008E778093E80095FD11C08091E80066 +:1076E00080FD04C08EB38111F9CF15C08091E800F0 +:1076F0008E778093E80003C08EB3882361F0809179 +:10770000E80080FFF9CF84E08093E9008091E800F1 +:107710008B778093E800DF91CF91FF90EF90DF901F +:10772000CF90BF90AF909F908F907F906F905F9021 +:107730004F900895CF93309100081092000824B71D +:1077400014BE88E10FB6F894809360001092600038 +:107750000FBE90E080E80FB6F8948093610090939C +:1077600061000FBE81E085BF82E085BF3F9A209A0D +:10777000559A90E8909361001092610047985D9A45 +:10778000289A109289009AEF9093880080936F0056 +:1077900083E080938100E0E0F0E085919491019690 +:1077A00019F081E08093BE0121FF20C0809100018B +:1077B0003817E1F0809300087894809101018823C4 +:1077C00039F08091B6019091B70188379140C8F3A4 +:1077D0001092010110920008F89481E08093010159 +:1077E0008091BE01882371F0BDDC0CC020FF04C075 +:1077F0008091BE018111F8CF23FF04C08091000168 +:107800003813EECFD4D078941092B9011092B80109 +:10781000CEEF80910101882301F138DD1CD38091E6 +:10782000B8019091B90181349F4110F0109201018B +:107830008091C3019091C40101969093C4018093FB +:10784000C301292F97FF02C02C2F291B220F2817B5 +:1078500010F44798DECF479ADCCF8091E00081603A +:107860008093E0007FDC80E090E0CF910895292FA5 +:1078700030E02230310539F02330310549F0213034 +:10788000310561F410C08EE390E02DE531E01EC0BB +:10789000882371F0813089F08230A1F080E090E09F +:1078A00020E030E013C082E190E02BE931E00EC02F +:1078B00084E090E029E531E009C08CE290E027E225 +:1078C00031E004C08CE190E029E031E0FA0131833D +:1078D000208308958093E900EBEEF0E080818160E1 +:1078E0008083EDEEF0E010826093EC0040838091A5 +:1078F000EE00881F8827881F08958091C70187FDA3 +:1079000005C08091E80080FF0DC010C08091E800A4 +:1079100082FD04C08EB38111F9CF08958091E800F3 +:107920008B7707C08EB38111ECCF08958091E8006A +:107930008E778093E80008950F931F93CF93DF9382 +:1079400041D048D0C8EDD0E088818F778883888186 +:107950008068888388818F7D888319BC1EBA1092C5 +:10796000C50100EE10E0F80180818B7F8083888163 +:107970008160888342E060E080E0ACDFE1EEF0E02F +:1079800080818E7F8083E2EEF0E080818160808361 +:10799000808188608083F80180818E7F80838881E8 +:1079A00080618883DF91CF911F910F910895E7ED5A +:1079B000F0E08081816080838AE482BF81E08093EF +:1079C000C601BACFE8EDF0E080818E7F808310920F +:1079D000E20008951092DA001092E10008951F92DB +:1079E0000F920FB60F9211242F933F934F935F93F3 +:1079F0006F937F938F939F93AF93BF93EF93FF9377 +:107A00008091DA0080FF1BC08091D80080FF17C0F2 +:107A10008091DA008E7F8093DA008091D90080FF18 +:107A20000BC080E189BD82E189BD09B400FEFDCFB4 +:107A300081E08EBB0FD203C019BC1EBA0BD280915D +:107A4000E10080FF17C08091E20080FF13C08091A9 +:107A5000E2008E7F8093E2008091E200806180935B +:107A6000E2008091D80080628093D80019BC85E044 +:107A70008EBBF0D18091E10084FF2CC08091E200A8 +:107A800084FF28C080E189BD82E189BD09B400FE80 +:107A9000FDCF8091D8008F7D8093D8008091E10048 +:107AA0008F7E8093E1008091E2008F7E8093E200E0 +:107AB0008091E20081608093E2008091C501811194 +:107AC00004C08091E30087FF02C084E001C081E030 +:107AD0008EBBC0D18091E10083FF21C08091E20084 +:107AE00083FF1DC08091E100877F8093E10082E0E9 +:107AF0008EBB1092C5018091E1008E7F8093E100E2 +:107B00008091E2008E7F8093E2008091E2008061AC +:107B10008093E20042E060E080E0DCDE9BD1FF91F8 +:107B2000EF91BF91AF919F918F917F916F915F91F5 +:107B30004F913F912F910F900FBE0F901F9018956E +:107B40002091CD013091CE012617370748F06115FD +:107B5000710539F42091E8002E772093E80001C0E8 +:107B6000B901FC0120E061157105A1F18EB38823F4 +:107B7000E1F18530E1F18091E80083FD34C080912E +:107B8000E80082FF06C08091E80082FF26C080E006 +:107B900008958091E80080FFE6CF2091F300809166 +:107BA000F20090E0922B6115710551F0883091053B +:107BB00038F421912093F100615071090196F3CFBF +:107BC00021E0089709F020E08091E8008E7780930B +:107BD000E800C9CF2111CACFD6CF8EB3882329F0B0 +:107BE000853089F604C081E0089582E0089583E03D +:107BF00008956115710529F42091E8002B772093F1 +:107C0000E8006115710521F12EB3222351F12530D1 +:107C100051F12091E80023FD20C02091E80022FFCF +:107C2000F3CFFC01CF014091F3002091F20030E04E +:107C3000342B232B09F38091F1008193CF01615004 +:107C4000710981F7D9CF8EB3882359F0853059F067 +:107C50008091E80080FFF7CF02C081E0089580E0C6 +:107C6000089582E0089583E008950F931F93CF93C2 +:107C7000DF9300D0CDB7DEB7E7ECF1E08091F10003 +:107C8000819381E0EF3CF807C9F7D2DA8091E800F0 +:107C900083FFCBC02091C7013091C801832F90E0B2 +:107CA0008A30910508F0C1C0FC01EA5AF74CE4C0E3 +:107CB000223809F0BAC08091CB0187708093E90027 +:107CC0009091EB001092E9008091E800877F80930B +:107CD000E80095FB882780F98093F1001092F1006D +:107CE00082C0822F8D7F09F0A0C0223009F09DC094 +:107CF0008091C901811124C02091CB01277009F422 +:107D000094C02093E9008091EB0080FF19C080911E +:107D1000EB00333011F4806211C080618093EB007E +:107D200081E090E0022E01C0880F0A94EAF7809368 +:107D3000EA001092EA008091EB0088608093EB00EB +:107D40001092E9008091E800877F50C021116DC03A +:107D50001091C9011F770FB7F8948091E800877FD1 +:107D60008093E800CADD8091E80080FFFCCF80911D +:107D7000E3008078812B8093E30080688093E300A8 +:107D8000112311F083E001C082E08EBB0FBF4DC014 +:107D90002058223008F049C0AE014F5F5F4F60911C +:107DA000CB018091C9019091CA0161DD009709F46E +:107DB0003CC02091E800277F2093E800BC01898126 +:107DC0009A81BEDE8091E8008B778093E8002DC019 +:107DD000203859F58091E800877F8093E8008091F2 +:107DE000C5018093F1008091E8008E778093E800D0 +:107DF00084DD1BC0211119C09091C9019230A8F4F3 +:107E00008091E800877F8093E8009093C50175DD3D +:107E10008091C501811104C08091E30087FF02C0F9 +:107E200084E001C081E08EBBF7D98091E80083FF38 +:107E30000AC08091EB0080628093EB008091E800A3 +:107E4000877F8093E8000F900F90DF91CF911F9173 +:107E50000F9108950895CF938EB3882359F0C09160 +:107E6000E900C7701092E9008091E80083FDFDDE13 +:107E7000C093E900CF910895EE0FFF1F0590F49194 +:107E8000E02D0994F999FECF92BD81BDF89A99270A +:107E900080B50895262FF999FECF1FBA92BD81BDF6 +:107EA00020BD0FB6F894FA9AF99A0FBE019608957C +:047EB000F894FFCF74 +:107EB4007701000000000000081C03410072006408 +:107EC40000750069006E006F002000730072006C82 +:107ED400002000200000002C0341007200640075A3 +:107EE4000069006E006F00200049006E0064007598 +:107EF40000730074007200690061006C002000319E +:107F04000030003100200000000403090409023E8F +:107F14000002010080320904000001020201000590 +:107F2400240010010424020405240600010705822C +:107F3400030800FF09040100020A00000007050409 +:107F44000210000107058302100001120110010252 +:107F5400000008032A5600010002010001434154B5 +:067F64004552494E4100A8 +:040000030000700089 +:00000001FF diff --git a/external/arduino/avr/bootloaders/caterina/Caterina-Leonardo.hex b/external/arduino/avr/bootloaders/caterina/Caterina-Leonardo.hex new file mode 100644 index 000000000..47053bc53 --- /dev/null +++ b/external/arduino/avr/bootloaders/caterina/Caterina-Leonardo.hex @@ -0,0 +1,1024 @@ +:200000000C946E010C9496010C9496010C9496010C9496010C9496010C9496010C94960150 +:200020000C9496010C9496010C94F6040C947D050C9496010C9496010C9496010C949601BA +:200040000C9496010C9496010C9496010C9496010C9496010C9496010C9496010C94B501C9 +:200060000C9496010C9496010C9496010C9496010C9496010C9496010C9496010C949601C8 +:200080000C9496010C9496010C9496010C9496010C9496010C9496010C9496010C949601A8 +:2000A0000C9496010C9496010C94960100000000240027002A002D003000000000002500A4 +:2000C00028002B002E003100000000002300260029002C002F00040404040403040502027D +:2000E0000202040302020202060606060606040402020204040802011040804010204080A8 +:200100004080080204018040201002011080102040400000000200080E0000030401000BB2 +:200120000000070605040100080A0B0C0D09040309042203410072006400750069006E00CD +:200140006F0020004C0065006F006E006100720064006F00180341007200640075006900CC +:200160006E006F0020004C004C004300120100020000004041233680000101020001120120 +:200180000002020000404123368000010102000100C18081C1080B00020202010009040052 +:2001A000000102020000052400100105240101010424020605240600010705810310004094 +:2001C00009040100020A000000070502024000000705830240000005010902A1010901A186 +:2001E000008501050919012903150025019503750181029501750581030501093009310943 +:20020000381581257F750895038106C0C005010906A1018502050719E029E715002501754D +:20022000019508810295017508810395067508150025650507190029658100C0090402004C +:2002400001030000000921010100012265000705840340000100000000000000002A2B2895 +:200260000000000000000000000000000000000000000000002C9EB4A0A1A2A434A6A7A553 +:20028000AE362D3738271E1F20212223242526B333B62EB7B89F8485868788898A8B8C8D58 +:2002A0008E8F909192939495969798999A9B9C9D2F3130A3AD350405060708090A0B0C0D7C +:2002C0000E0F101112131415161718191A1B1C1DAFB1B0B5000032041007150811241FBE85 +:2002E000CFEFDAE0DEBFCDBF11E0A0E0B1E0E0EAF2E102C005900D92AC32B107D9F711E071 +:20030000ACE2B1E001C01D92AD39B107E1F712E0CCEDD2E004C02297FE010E944A09C63D07 +:20032000D107C9F70E946C030C944E090C9400008091000161E00E94390368EE73E080E043 +:2003400090E00E94FD018091000160E00E94390368EE73E080E090E00E94FD010895809196 +:20036000000161E00E94AC0208951F920F920FB60F9211242F933F938F939F93AF93BF93E5 +:200380008091300190913101A0913201B0913301309134010196A11DB11D232F2D5F2D3794 +:2003A00020F02D570196A11DB11D209334018093300190933101A0933201B0933301809117 +:2003C0002C0190912D01A0912E01B0912F010196A11DB11D80932C0190932D01A0932E01BA +:2003E000B0932F01BF91AF919F918F913F912F910F900FBE0F901F9018959B01AC017FB734 +:20040000F89480912C0190912D01A0912E01B0912F0166B5A89B05C06F3F19F00196A11DC3 +:20042000B11D7FBFBA2FA92F982F8827860F911DA11DB11D62E0880F991FAA1FBB1F6A9577 +:20044000D1F7BC012DC0FFB7F89480912C0190912D01A0912E01B0912F01E6B5A89B05C0E7 +:20046000EF3F19F00196A11DB11DFFBFBA2FA92F982F88278E0F911DA11DB11DE2E0880FFD +:20048000991FAA1FBB1FEA95D1F7861B970B885E9340C8F2215030404040504068517C4F8F +:2004A000211531054105510571F60895789484B5826084BD84B5816084BD85B5826085BD0F +:2004C00085B5816085BDEEE6F0E0808181608083E1E8F0E010828081826080838081816043 +:2004E0008083E0E8F0E0808181608083E1E9F0E0808182608083808181608083E0E9F0E07E +:20050000808181608083E1ECF0E0808184608083808182608083808181608083E3ECF0E007 +:20052000808181608083E0ECF0E0808182608083E2ECF0E0808181608083EAE7F0E080812F +:20054000846080838081826080838081816080838081806880830895CF93DF93482F50E0E5 +:20056000CA018C509F4FFC0134914A525F4FFA018491882369F190E0880F991FFC01E455D0 +:20058000FF4FA591B491FC01E654FF4FC591D491662351F42FB7F8948C91932F9095892362 +:2005A0008C93888189230BC0623061F42FB7F8948C91932F909589238C938881832B8883B2 +:2005C0002FBF06C09FB7F8948C91832B8C939FBFDF91CF910895883071F1893068F48230EF +:2005E00031F1833020F4813009F042C01DC0833089F08430E9F512C08B3059F18C3028F41C +:200600008930E9F08A30A1F51EC08C3031F18E3079F529C0809180008F7703C0809180003C +:200620008F7D80938000089584B58F7702C084B58F7D84BD0895809190008F7707C08091DB +:2006400090008F7D03C080919000877F8093900008958091C0008F7703C08091C0008F7DDD +:200660008093C00008958091C200877F8093C2000895FF920F931F93F62E482F50E0CA0144 +:200680008E5E9E4FFC012491CA018C509F4FFC0114914A525F4FFA0104910023C9F022239D +:2006A00019F0822F0E94EB02E02FF0E0EE0FFF1FE654FF4FA591B4919FB7F894FF2021F4DE +:2006C0008C911095812302C08C91812B8C939FBF1F910F91FF900895CF93DF930E94560262 +:2006E0008DE391E00E9433040E94AF01C0E0D0E00E9498012097E1F30E940000F9CF282F17 +:20070000809137018823C1F057FF1AC015C02898909336018091F1008193E217F307B9F75C +:200720004115510539F08091F200882319F48BE68093E800AFBF02C04FEF5FEFCA01089599 +:20074000AFB7F89427702093E9008091F200282F30E0241735070CF4A901FB019B01240F1E +:20076000311D94E6DACFDF93CF930F92CDB7DEB7BE016F5F7F4F41E050E00E947F03019712 +:2007800019F02FEF3FEF03C08981282F30E0C9010F90CF91DF910895FF920F931F93F82EEF +:2007A000142F052F40913A0150913B01212F302FC901DC01FB016EEF29C0F7FE02C0949125 +:2007C00001C09081209138013091390124173507ACF48091E8008570E1F38091E80082FF0F +:2007E00003C02FEF3FEF17C09093F100C90101968F739070892B11F46093E8002F5F3F4FEC +:200800003093390120933801119731961097A9F6812F902F9C01C9011F910F91FF900895E8 +:200820009C018091E80082FFFCCFF901260F311D03C08091F1008193E217F307D1F7289805 +:2008400084E6809336018BEF8093E800CB0108958093E9008091F200882319F08AE38093D3 +:20086000E800089508951092370181E08093D70080EA8093D80082E189BD09B400FEFDCFAC +:2008800061E070E080E090E00E94FD0180E98093D8008CE08093E2001092E000559A209A77 +:2008A00008955F926F927F928F929F92AF92BF92CF92DF92EF92FF920F931F93CF93DF93A8 +:2008C000E82E842E752E80913701882371F18B01242F352FC901EC017AEFF72E67E0962EC4 +:2008E0009E2050E4552E8E2D90E040E2A42EB12CA822B9223AE3632E20E4C22ED12CC82259 +:20090000D92258C09FB7F8949092E9008091E80085FD02C020E004C08091F200252D281B3E +:200920009FBF222361F4FA9419F42FEF3FEF4DC061E070E080E090E00E94FD013BC0822F1E +:2009400090E0C817D9070CF42C2FC21BD1094FB7F8949092E900A114B10421F406C01092D2 +:20096000F10021502223D9F719C0E7FC03C0F801922F10C0C801322F06C0FC010196E491FE +:20098000E093F10031503323C1F706C081918093F10091509923D1F7020F111D8091E800EB +:2009A00085FF05C0209729F4C114D10411F06092E8004FBF209709F0A5CF5D9884E68093F1 +:2009C0003501282D372DC9019C01C901DF91CF911F910F91FF90EF90DF90CF90BF90AF906D +:2009E0009F908F907F906F905F9008951F920F920FB60F9211242F933F934F935F936F93B8 +:200A00007F938F939F93AF93BF93EF93FF938091E1001092E100982F83FF0FC01092E900B0 +:200A200081E08093EB001092EC0082E38093ED001092370188E08093F00092FF34C083E037 +:200A40008093E9008091F200882319F08AE38093E8008FB7F89492E09093E9009091F20018 +:200A60008FBF992321F082E891E00E94530780913501882351F080913501815080933501F0 +:200A800080913501882309F45D9A80913601882351F0809136018150809336018091360191 +:200AA000882309F4289AFF91EF91BF91AF919F918F917F916F915F914F913F912F910F90CD +:200AC0000FBE0F901F9018950F931F93DF93CF930F92CDB7DEB719828E010F5F1F4FC8019D +:200AE0000E947907C8010E941209898190E00F90CF91DF911F910F9108951F920F920FB661 +:200B00000F921124EF92FF921F932F933F934F935F936F937F938F939F93AF93BF93EF9355 +:200B2000FF93DF93CF93CDB7DEB76197DEBFCDBF1092E9008091E80083FF0FC1FE01319679 +:200B40009E01275F3F4F03C08091F1008193E217F307D1F7289884E68093360182EF809356 +:200B6000E800998197FF05C08091E80080FFFCCF03C08EEF8093E800292F30E0C901807672 +:200B80009070892B09F0C2C08A81882329F41092F1001092F100D6C0813009F4D3C08330A3 +:200BA00009F4D0C0853049F48091E80080FFFCCF8B8180688093E300C5C0863009F07CC019 +:200BC0001C81EF80F8841230C1F51092E900109239011092380110923B0110923A010E94F6 +:200BE000640599E0FE013996DF01292F1D922A95E9F799871A8791E09E8790E8988B9AEF44 +:200C0000998B2091380130913901275F3F4F3C872B878D871092E9001092390110923801EC +:200C2000F0923B01E0923A0180E0BF0149E050E00E94CC030E94640585C01092E9001092E2 +:200C4000390110923801F0923B01E0923A01123241F482E290E00E940A09892B09F476C02B +:200C600071C0113079F488E0E816F10419F481E080933C0180913C01882309F06BC0ECE68D +:200C8000F1E013C0133009F061C08B81882319F4EEE2F1E00AC0823019F4E2E3F1E005C00A +:200CA000813009F053C0E4E5F1E0449180E8BF0150E00E94CC0346C0873009F447C08830C6 +:200CC00021F481E08093F1003DC08930D9F523703070232BD9F5E1E9F1E091E031E026E3A1 +:200CE0009093E9003093EB0084918093EC002093ED009F5F3196953099F78EE78093EA00FA +:200D00001092EA008B81809337011CC08F8198851092E900109239011092380190933B0146 +:200D200080933A018D81882329F4CE0101960E94850706C0823051F4CE0101960E94DB0754 +:200D4000882321F08EEF8093E80007C081E28093EB0003C0EEE7F1E0A8CF6196DEBFCDBF37 +:200D6000CF91DF91FF91EF91BF91AF919F918F917F916F915F914F913F912F911F91FF9004 +:200D8000EF900F900FBE0F901F90189520917E0130917F018091800190918101281B390B40 +:200DA0002F733070C901089520917E0130917F0180918001909181012817390719F42FEF3A +:200DC0003FEF09C0E0918001F0918101E25CFE4F8081282F30E0C901089520917E013091DC +:200DE0007F0180918001909181012817390719F42FEF3FEF13C0E0918001F0918101E25C60 +:200E0000FE4F2081809180019091810101968F739070909381018093800130E0C901089566 +:200E2000109285011092840188EE93E0A0E0B0E08093860190938701A0938801B09389019C +:200E400080E191E0909383018093820108950F931F93DF93CF930F92CDB7DEB78C0169838B +:200E600080910901882369F083E0BE016F5F7F4F41E050E00E9451041816190614F49C015B +:200E800007C081E090E0F8019383828320E030E0C9010F90CF91DF911F910F91089583E00D +:200EA0000E9428040895CF93DF9312C082E00E94B3032FEF8F3F9207C9F0E0917E01F091B8 +:200EC0007F01E25CFE4F8083D0937F01C0937E01C0917E01D0917F012196CF73D070809154 +:200EE000800190918101C817D90701F7DF91CF910895FC0180818E5F808380E865E971E0B5 +:200F000042E450E00E94CC030895FC0181819081913A59F4813209F04CC080E062E071E09A +:200F200047E050E00E94CC0342C0913209F041C0803239F482E091E067E070E00E9410042B +:200F400036C0823209F035C08281809309018091020190910301A0910401B0910501805B48 +:200F60009440A040B04019F58091090180FD12C087E797E790930108809300082BE088E1AE +:200F800090E00FB6F894A895809360000FBE209360000DC088E10FB6F89480936000109264 +:200FA00060000FBEA895109201081092000881E0089580E00895FC0191818081813A31F487 +:200FC000913089F080E0933089F40DC0813269F49B3021F4828180930A0105C09A3029F4AD +:200FE000828180930B0181E0089580E00895EF92FF920F931F938C01E62EDC01ED91FC91E5 +:201000000480F581E02D0995F82ED801ED91FC910680F781E02DC8016E2D09958F2D90E0E8 +:201020001F910F91FF90EF90089510929001109294011092930182E291E090939201809377 +:2010400091010895EF92FF920F931F93DF93CF930F92CDB7DEB789838B017A0184E0BE0137 +:201060006F5F7F4F41E050E00E94510484E4B801A7010E9451040F90CF91DF911F910F910D +:20108000FF90EF90089582E048E050E00E9422080895FC01168217821086118612861386F6 +:2010A00014823496BF010E9443080895DC01683810F0685829C0E62FF0E067FF13C0E0580A +:2010C000F04081E090E002C0880F991FEA95E2F7809514962C911497282314962C93149720 +:2010E00060E012C0EB5AFD4F6491662319F420E030E01DC067FF08C014968C9114978D7F29 +:2011000014968C9314976F77FD0190E0662321F08681861709F416829F5F31969630B1F701 +:20112000CD011496BD010E94430821E030E0C9010895CF93DF93DC01683810F0685825C01E +:20114000E62FF0E067FF12C0E058F04081E090E002C0880F991FEA95E2F714962C911497BE +:20116000282B14962C93149760E00FC0EB5AFD4F64916623D9F167FF08C014968C91149780 +:20118000826014968C9314976F7716968C9116978617A9F117968C911797861781F1189631 +:2011A0008C911897861759F119968C911997861731F11A968C911A97861709F11B968C915E +:2011C0001B978617E1F0ED01E0E0F0E09E2F8E81882321F4EA0FFB1F668306C09F5F31964E +:2011E0002196E630F10591F7963049F481E090E013969C938E93129720E030E007C0CD0189 +:201200001496BD010E94430821E030E0C901DF91CF91089580E867ED71E045E650E00E9427 +:20122000CC030895FC0180818F5F808380E86CE372E049E150E00E94CC030895CF92DF9210 +:20124000EF92FF920F931F93CF93DF937C016B018A01C0E0D0E00FC0D6016D916D01D701A6 +:20126000ED91FC910190F081E02DC7010995C80FD91F015010400115110571F7CE01DF91AB +:20128000CF911F910F91FF90EF90DF90CF900895EE0FFF1F0590F491E02D0994F894FFCFEC +:2012A0000D0000E100000000000001010000000027071E09C606ED06D4064F0753070000A0 +:2012C0000000F7071E09990856084908FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD +:2012E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E +:20130000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED +:20132000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCD +:20134000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD +:20136000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D +:20138000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6D +:2013A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4D +:2013C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2D +:2013E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D +:20140000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC +:20142000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCC +:20144000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAC +:20146000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8C +:20148000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C +:2014A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C +:2014C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C +:2014E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0C +:20150000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEB +:20152000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCB +:20154000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAB +:20156000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8B +:20158000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6B +:2015A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4B +:2015C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2B +:2015E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B +:20160000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA +:20162000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCA +:20164000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAA +:20166000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8A +:20168000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A +:2016A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4A +:2016C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A +:2016E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A +:20170000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9 +:20172000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9 +:20174000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9 +:20176000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF89 +:20178000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF69 +:2017A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF49 +:2017C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF29 +:2017E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF09 +:20180000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8 +:20182000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC8 +:20184000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA8 +:20186000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF88 +:20188000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF68 +:2018A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF48 +:2018C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF28 +:2018E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF08 +:20190000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7 +:20192000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7 +:20194000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA7 +:20196000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87 +:20198000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF67 +:2019A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF47 +:2019C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF27 +:2019E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07 +:201A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6 +:201A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC6 +:201A4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA6 +:201A6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF86 +:201A8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF66 +:201AA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF46 +:201AC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF26 +:201AE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF06 +:201B0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5 +:201B2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC5 +:201B4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5 +:201B6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF85 +:201B8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF65 +:201BA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF45 +:201BC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF25 +:201BE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05 +:201C0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4 +:201C2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4 +:201C4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA4 +:201C6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF84 +:201C8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF64 +:201CA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF44 +:201CC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF24 +:201CE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04 +:201D0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3 +:201D2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC3 +:201D4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA3 +:201D6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF83 +:201D8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF63 +:201DA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF43 +:201DC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF23 +:201DE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03 +:201E0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2 +:201E2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC2 +:201E4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA2 +:201E6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF82 +:201E8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF62 +:201EA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF42 +:201EC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF22 +:201EE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02 +:201F0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 +:201F2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC1 +:201F4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA1 +:201F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF81 +:201F8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF61 +:201FA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF41 +:201FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF21 +:201FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01 +:20200000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 +:20202000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 +:20204000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0 +:20206000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 +:20208000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60 +:2020A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40 +:2020C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20 +:2020E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +:20210000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF +:20212000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF +:20214000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F +:20216000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F +:20218000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F +:2021A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F +:2021C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F +:2021E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +:20220000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDE +:20222000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBE +:20224000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9E +:20226000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7E +:20228000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E +:2022A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E +:2022C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E +:2022E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE +:20230000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDD +:20232000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBD +:20234000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9D +:20236000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7D +:20238000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D +:2023A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D +:2023C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D +:2023E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD +:20240000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC +:20242000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBC +:20244000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9C +:20246000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C +:20248000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5C +:2024A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3C +:2024C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C +:2024E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC +:20250000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB +:20252000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBB +:20254000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9B +:20256000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7B +:20258000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B +:2025A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B +:2025C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1B +:2025E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB +:20260000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDA +:20262000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBA +:20264000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A +:20266000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7A +:20268000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5A +:2026A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3A +:2026C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1A +:2026E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA +:20270000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9 +:20272000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB9 +:20274000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99 +:20276000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF79 +:20278000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF59 +:2027A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF39 +:2027C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF19 +:2027E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9 +:20280000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8 +:20282000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB8 +:20284000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF98 +:20286000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF78 +:20288000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF58 +:2028A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF38 +:2028C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF18 +:2028E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8 +:20290000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7 +:20292000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB7 +:20294000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF97 +:20296000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77 +:20298000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF57 +:2029A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF37 +:2029C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF17 +:2029E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7 +:202A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6 +:202A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB6 +:202A4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF96 +:202A6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF76 +:202A8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF56 +:202AA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF36 +:202AC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF16 +:202AE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6 +:202B0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD5 +:202B2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5 +:202B4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF95 +:202B6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF75 +:202B8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF55 +:202BA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF35 +:202BC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF15 +:202BE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5 +:202C0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4 +:202C2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB4 +:202C4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF94 +:202C6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74 +:202C8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF54 +:202CA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF34 +:202CC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF14 +:202CE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4 +:202D0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3 +:202D2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB3 +:202D4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF93 +:202D6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF73 +:202D8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF53 +:202DA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF33 +:202DC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF13 +:202DE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3 +:202E0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD2 +:202E2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB2 +:202E4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF92 +:202E6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72 +:202E8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF52 +:202EA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF32 +:202EC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF12 +:202EE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2 +:202F0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD1 +:202F2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB1 +:202F4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF91 +:202F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF71 +:202F8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF51 +:202FA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF31 +:202FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF11 +:202FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1 +:20300000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0 +:20302000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0 +:20304000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90 +:20306000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70 +:20308000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50 +:2030A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30 +:2030C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF10 +:2030E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 +:20310000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF +:20312000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF +:20314000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F +:20316000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F +:20318000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F +:2031A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F +:2031C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F +:2031E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF +:20320000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE +:20322000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAE +:20324000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E +:20326000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E +:20328000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4E +:2032A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E +:2032C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E +:2032E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEE +:20330000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCD +:20332000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD +:20334000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D +:20336000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6D +:20338000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4D +:2033A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2D +:2033C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D +:2033E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED +:20340000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCC +:20342000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAC +:20344000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8C +:20346000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C +:20348000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C +:2034A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C +:2034C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0C +:2034E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC +:20350000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCB +:20352000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAB +:20354000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8B +:20356000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6B +:20358000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4B +:2035A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2B +:2035C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B +:2035E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEB +:20360000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCA +:20362000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAA +:20364000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8A +:20366000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A +:20368000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4A +:2036A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A +:2036C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A +:2036E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA +:20370000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9 +:20372000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9 +:20374000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF89 +:20376000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF69 +:20378000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF49 +:2037A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF29 +:2037C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF09 +:2037E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9 +:20380000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC8 +:20382000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA8 +:20384000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF88 +:20386000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF68 +:20388000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF48 +:2038A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF28 +:2038C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF08 +:2038E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8 +:20390000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7 +:20392000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA7 +:20394000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87 +:20396000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF67 +:20398000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF47 +:2039A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF27 +:2039C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07 +:2039E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7 +:203A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC6 +:203A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA6 +:203A4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF86 +:203A6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF66 +:203A8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF46 +:203AA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF26 +:203AC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF06 +:203AE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6 +:203B0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC5 +:203B2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5 +:203B4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF85 +:203B6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF65 +:203B8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF45 +:203BA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF25 +:203BC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05 +:203BE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5 +:203C0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4 +:203C2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA4 +:203C4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF84 +:203C6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF64 +:203C8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF44 +:203CA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF24 +:203CC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04 +:203CE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4 +:203D0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC3 +:203D2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA3 +:203D4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF83 +:203D6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF63 +:203D8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF43 +:203DA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF23 +:203DC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03 +:203DE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3 +:203E0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC2 +:203E2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA2 +:203E4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF82 +:203E6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF62 +:203E8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF42 +:203EA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF22 +:203EC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02 +:203EE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2 +:203F0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC1 +:203F2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA1 +:203F4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF81 +:203F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF61 +:203F8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF41 +:203FA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF21 +:203FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01 +:203FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 +:20400000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 +:20402000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0 +:20404000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 +:20406000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60 +:20408000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40 +:2040A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20 +:2040C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +:2040E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 +:20410000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF +:20412000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F +:20414000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F +:20416000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F +:20418000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F +:2041A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F +:2041C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +:2041E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF +:20420000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBE +:20422000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9E +:20424000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7E +:20426000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E +:20428000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E +:2042A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E +:2042C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE +:2042E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDE +:20430000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBD +:20432000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9D +:20434000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7D +:20436000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D +:20438000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D +:2043A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D +:2043C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD +:2043E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDD +:20440000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBC +:20442000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9C +:20444000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C +:20446000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5C +:20448000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3C +:2044A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C +:2044C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC +:2044E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC +:20450000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBB +:20452000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9B +:20454000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7B +:20456000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B +:20458000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B +:2045A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1B +:2045C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB +:2045E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB +:20460000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBA +:20462000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A +:20464000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7A +:20466000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5A +:20468000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3A +:2046A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1A +:2046C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA +:2046E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDA +:20470000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB9 +:20472000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99 +:20474000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF79 +:20476000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF59 +:20478000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF39 +:2047A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF19 +:2047C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9 +:2047E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9 +:20480000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB8 +:20482000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF98 +:20484000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF78 +:20486000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF58 +:20488000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF38 +:2048A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF18 +:2048C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8 +:2048E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8 +:20490000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB7 +:20492000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF97 +:20494000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77 +:20496000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF57 +:20498000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF37 +:2049A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF17 +:2049C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7 +:2049E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7 +:204A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB6 +:204A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF96 +:204A4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF76 +:204A6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF56 +:204A8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF36 +:204AA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF16 +:204AC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6 +:204AE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6 +:204B0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5 +:204B2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF95 +:204B4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF75 +:204B6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF55 +:204B8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF35 +:204BA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF15 +:204BC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5 +:204BE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD5 +:204C0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB4 +:204C2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF94 +:204C4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74 +:204C6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF54 +:204C8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF34 +:204CA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF14 +:204CC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4 +:204CE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4 +:204D0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB3 +:204D2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF93 +:204D4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF73 +:204D6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF53 +:204D8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF33 +:204DA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF13 +:204DC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3 +:204DE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3 +:204E0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB2 +:204E2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF92 +:204E4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72 +:204E6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF52 +:204E8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF32 +:204EA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF12 +:204EC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2 +:204EE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD2 +:204F0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB1 +:204F2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF91 +:204F4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF71 +:204F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF51 +:204F8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF31 +:204FA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF11 +:204FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1 +:204FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD1 +:20500000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0 +:20502000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90 +:20504000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70 +:20506000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50 +:20508000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30 +:2050A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF10 +:2050C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 +:2050E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0 +:20510000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF +:20512000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F +:20514000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F +:20516000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F +:20518000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F +:2051A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F +:2051C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF +:2051E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF +:20520000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAE +:20522000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E +:20524000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E +:20526000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4E +:20528000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E +:2052A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E +:2052C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEE +:2052E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE +:20530000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD +:20532000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D +:20534000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6D +:20536000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4D +:20538000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2D +:2053A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D +:2053C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED +:2053E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCD +:20540000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAC +:20542000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8C +:20544000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C +:20546000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C +:20548000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C +:2054A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0C +:2054C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC +:2054E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCC +:20550000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAB +:20552000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8B +:20554000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6B +:20556000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4B +:20558000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2B +:2055A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B +:2055C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEB +:2055E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCB +:20560000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAA +:20562000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8A +:20564000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A +:20566000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4A +:20568000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A +:2056A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A +:2056C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA +:2056E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCA +:20570000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9 +:20572000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF89 +:20574000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF69 +:20576000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF49 +:20578000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF29 +:2057A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF09 +:2057C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9 +:2057E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9 +:20580000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA8 +:20582000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF88 +:20584000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF68 +:20586000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF48 +:20588000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF28 +:2058A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF08 +:2058C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8 +:2058E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC8 +:20590000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA7 +:20592000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87 +:20594000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF67 +:20596000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF47 +:20598000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF27 +:2059A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07 +:2059C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7 +:2059E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7 +:205A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA6 +:205A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF86 +:205A4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF66 +:205A6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF46 +:205A8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF26 +:205AA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF06 +:205AC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6 +:205AE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC6 +:205B0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5 +:205B2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF85 +:205B4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF65 +:205B6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF45 +:205B8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF25 +:205BA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05 +:205BC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5 +:205BE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC5 +:205C0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA4 +:205C2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF84 +:205C4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF64 +:205C6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF44 +:205C8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF24 +:205CA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04 +:205CC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4 +:205CE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4 +:205D0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA3 +:205D2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF83 +:205D4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF63 +:205D6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF43 +:205D8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF23 +:205DA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03 +:205DC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3 +:205DE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC3 +:205E0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA2 +:205E2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF82 +:205E4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF62 +:205E6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF42 +:205E8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF22 +:205EA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02 +:205EC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2 +:205EE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC2 +:205F0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA1 +:205F2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF81 +:205F4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF61 +:205F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF41 +:205F8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF21 +:205FA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01 +:205FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 +:205FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC1 +:20600000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0 +:20602000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 +:20604000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60 +:20606000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40 +:20608000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20 +:2060A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +:2060C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 +:2060E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 +:20610000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F +:20612000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F +:20614000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F +:20616000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F +:20618000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F +:2061A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +:2061C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF +:2061E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF +:20620000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9E +:20622000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7E +:20624000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E +:20626000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E +:20628000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E +:2062A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE +:2062C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDE +:2062E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBE +:20630000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9D +:20632000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7D +:20634000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D +:20636000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D +:20638000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D +:2063A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD +:2063C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDD +:2063E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBD +:20640000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9C +:20642000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C +:20644000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5C +:20646000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3C +:20648000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C +:2064A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC +:2064C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC +:2064E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBC +:20650000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9B +:20652000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7B +:20654000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B +:20656000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B +:20658000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1B +:2065A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB +:2065C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB +:2065E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBB +:20660000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A +:20662000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7A +:20664000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5A +:20666000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3A +:20668000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1A +:2066A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA +:2066C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDA +:2066E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBA +:20670000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99 +:20672000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF79 +:20674000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF59 +:20676000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF39 +:20678000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF19 +:2067A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9 +:2067C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9 +:2067E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB9 +:20680000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF98 +:20682000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF78 +:20684000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF58 +:20686000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF38 +:20688000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF18 +:2068A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8 +:2068C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8 +:2068E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB8 +:20690000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF97 +:20692000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77 +:20694000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF57 +:20696000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF37 +:20698000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF17 +:2069A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7 +:2069C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7 +:2069E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB7 +:206A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF96 +:206A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF76 +:206A4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF56 +:206A6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF36 +:206A8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF16 +:206AA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6 +:206AC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6 +:206AE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB6 +:206B0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF95 +:206B2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF75 +:206B4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF55 +:206B6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF35 +:206B8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF15 +:206BA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5 +:206BC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD5 +:206BE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5 +:206C0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF94 +:206C2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74 +:206C4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF54 +:206C6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF34 +:206C8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF14 +:206CA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4 +:206CC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4 +:206CE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB4 +:206D0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF93 +:206D2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF73 +:206D4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF53 +:206D6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF33 +:206D8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF13 +:206DA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3 +:206DC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3 +:206DE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB3 +:206E0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF92 +:206E2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72 +:206E4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF52 +:206E6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF32 +:206E8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF12 +:206EA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2 +:206EC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD2 +:206EE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB2 +:206F0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF91 +:206F2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF71 +:206F4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF51 +:206F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF31 +:206F8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF11 +:206FA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1 +:206FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD1 +:206FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB1 +:2070000055C000006EC000006CC000006AC0000068C0000066C0000064C0000062C0000043 +:2070200060C000005EC00000F2C400005AC0000058C0000056C0000054C0000052C00000EE +:2070400050C0000078C000004CC000004AC0000048C0000046C0000044C0000042C00000BE +:2070600040C000003EC000003CC000003AC0000038C0000036C0000034C0000032C0000048 +:2070800030C000002EC000002CC000002AC0000028C0000026C0000024C0000022C00000A8 +:2070A00020C000001EC000001CC0000011241FBECFEFDAE0DEBFCDBF11E0A0E0B1E0E2E3BC +:2070C000FFE702C005900D92A83AB107D9F711E0A8EAB1E001C01D92AE3BB107E1F78FD30B +:2070E00026C78ECFF89410926F0010928100109285001092840081E085BF15BE47985D9AEB +:20710000289A0C94000008952091B2013091B3012F5F3F4F3093B3012093B201932F37FFA6 +:2071200003C08EEF831B982F990F921710F447980895479A08951F920F920FB60F9211246E +:207140002F938F939F93EF93FF9310928500109284008091A8019091A901009741F00197D3 +:207160009093A9018093A801892B09F45D9A8091AA019091AB01009741F001979093AB0126 +:207180008093AA01892B09F4289AE0E0F0E0859194918F5F9F4F49F08091AC019091AD0151 +:2071A00001969093AD018093AC01FF91EF919F918F912F910F900FBE0F901F90189584E0BC +:2071C0008093E9000DC08091E8008B778093E80003C08EB3882351F08091E80082FFF9CFBE +:2071E0008091E80085FFEFCF8091F1000895982F83E08093E9008091E80085FD0DC0809136 +:20720000E8008E778093E80003C08EB3882369F08091E80080FFF9CF9093F1005D9884E6CB +:2072200090E09093A9018093A80108954F925F926F927F928F929F92AF92BF92CF92DF921E +:20724000EF92FF920F931F93CF93DF9384E08093E9008091E80082FF57C2289884E690E067 +:207260009093AB018093AA01AADF182F853481F48CE49DE19093AD018093AC0107B600FC4B +:20728000FDCFF999FECF81E180935700E89503C0843519F494DF8DE00DC28C34E1F38035F9 +:2072A000D1F3843721F484E4A2DF80E003C2813611F489E5FFC18134B1F481DF182F7FDFE3 +:2072C00090E0880F991FAA2797FDA095BA2F312F330F20E0442737FD4095542F822B932B68 +:2072E000A42BB52BB8C1803711F483E5E3C1833549F4C0E0D1E089917ADF21E0C730D20714 +:20730000D1F7D9C1863521F481E371DF80E3D2C1833731F487E86BDF85E969DF8EE1CAC149 +:207320008536B9F4E0E0F0E093E085E090935700E89507B600FCFDCF80935700E89507B65D +:2073400000FCFDCFE058FF4FA0E7E030FA0771F7A2CF823739F4E1E0F0E089E08093570024 +:207360008491A8C1863439F4E0E0F0E089E08093570084919FC18E3439F4E3E0F0E089E0E5 +:2073800080935700849196C1813539F4E2E0F0E089E08093570084918DC1823631F489E521 +:2073A00026DF80E024DF80E885C1823419F0873609F0E5C01092AD011092AC0100DF082FE8 +:2073C000FEDEF82EFCDE682E8554823008F071C1902F80E0CF2DD0E0C82BD92B10926F00B3 +:2073E000173609F04BC081E180935700E895DD24CC24C3943FC0E090AE01F090AF010091CC +:20740000B0011091B101B6E46B16D9F4ED2DF0E0EE29FF29E4918E2FEADEDD2081F082E08D +:2074200090E0A0E0B0E0E80EF91E0A1F1B1FE092AE01F092AF010093B0011093B101DC2470 +:2074400018C0D801C701B695A7959795879559D5CEDE82E090E0A0E0B0E0E80EF91E0A1FF2 +:207460001B1FE092AE01F092AF010093B0011093B1012197209709F0BECF7DC08090AE01F5 +:207480009090AF01A090B001B090B10196E4691609F05DC083E0F40180935700E89507B63E +:2074A00000FCFDCF54C0F6E46F1661F5772031F1E090AE01F090AF010091B0011091B1019E +:2074C0007EDED82ECC24852D90E08C299D29F7010C0140925700E895112482E090E0A0E08B +:2074E000B0E0E80EF91E0A1F1B1FE092AE01F092AF010093B0011093B10102C060DE582E1A +:20750000742423C0E090AE01F090AF010091B0011091B10116950795F794E79450DE682FFA +:20752000C701F7D48091AE019091AF01A091B001B091B1010296A11DB11D8093AE01909349 +:20754000AF01A093B001B093B101219704C05524772444244394209709F0A5CF96E46916B6 +:2075600041F485E0F40180935700E89507B600FCFDCF8DE03CDE82E080936F009CC0833492 +:2075800071F40091AE011091AF0119DE90E021E0F8010C0120935700E89511247CCE8336C8 +:2075A00019F5E090AE01F090AF010091B0011091B10105DEF701E16090E021E00C0120938C +:2075C0005700E895112482E090E0A0E0B0E0E80EF91E0A1F1B1FE092AE01F092AF0100936A +:2075E000B0011093B10157CE8D3661F4E091AE01F091AF0185E080935700E89507B600FCF2 +:20760000FDCF49CE823551F4E091AE01F091AF0105911491812FEBDD802F4CC0843421F5FE +:20762000E090AE01F090AF010091B0011091B10116950795F794E794C2DD682FC70169D4DE +:207640008091AE019091AF01A091B001B091B1010296A11DB11D8093AE019093AF01A093D8 +:20766000B001B093B10117CE843609F5E090AE01F090AF010091B0011091B101D801C70142 +:20768000B695A795979587953CD4B1DD82E090E0A0E0B0E0E80EF91E0A1F1B1FE092AE010A +:2076A000F092AF010093B0011093B10104C08B3111F08FE39CDD83E08093E9009091E8002B +:2076C0008091E8008E778093E80095FF04C010C08EB38823C9F08091E80080FFF9CF809193 +:2076E000E8008E778093E80003C08EB3882361F08091E80080FFF9CF84E08093E9008091F1 +:20770000E8008B778093E800DF91CF911F910F91FF90EF90DF90CF90BF90AF909F908F90AC +:207720007F906F905F904F9008959091B601892F8F77813249F58091B7018032A1F081328A +:2077400019F5913A09F58091E800877F8093E8008DE091E067E070E00BD28091E8008B770B +:207760008093E8000895913279F48091E800877F8093E8008DE091E067E070E05DD2809192 +:20778000E8008E778093E800089582E061EC42E0B5D083E061E842E1B1D084E060E842E1EF +:2077A000ADC084B7877F84BF88E10FB6F89480936000109260000FBE20E880E090E00FB63F +:2077C000F89420936100809361000FBE81E085BF92E095BF3F9A209A559AE1E6F0E02083A1 +:2077E000108247985D9A289A109289008AEF8093880090936F0083E080938100F0C0409116 +:20780000000850910108109201081092000894B714BE88E10FB6F8948093600010926000D5 +:207820000FBE292F30E0F901E270F07091FD18C090FF05C0859194918F5F9F4F81F423FFFF +:207840000FC08091090190910A014817590741F0E0E0F0E0859194918F5F9F4F09F042DC64 +:20786000A0DF78941092AD011092AC010CC0DEDC36D38091AC019091AD0181549F4110F00D +:207880001092140141DC80911401882381F78091E00081608093E00025DC80E090E0089598 +:2078A000FA01923049F0933061F09130F9F485E191E022E130E01EC087E291E02EE330E04D +:2078C00019C0882329F485E691E024E030E012C0813029F489E691E022E230E00BC0823006 +:2078E00029F48DE891E028E130E004C080E090E020E030E091838083C90108958093E9004E +:207900008091EB0081608093EB001092ED006093EC004093ED008091EE00881F8827881F62 +:2079200008958091B60188238CF403C08EB38823B1F08091E80082FFF9CF8091E8008B772A +:207940008093E80008958EB3882349F08091E80080FFF9CF8091E8008E778093E800089594 +:20796000EF92FF920F931F9345D04CD008ED10E0F80180818F77808380818068808380819B +:207980008F7D808319BC1EBA1092B40180EEE82EF12CF70180818B7F8083F8018081816052 +:2079A000808380E060E042E0A9DFE1EEF0E080818E7F8083E2EEF0E0808181608083808144 +:2079C00088608083F70180818E7F8083F8018081806180831F910F91FF90EF900895E7ED06 +:2079E000F0E08081816080838AE482BF81E08093B501B6CFE8EDF0E080818E7F808310921C +:207A0000E20008951092DA001092E10008951F920F920FB60F9211242F933F934F935F93F6 +:207A20006F937F938F939F93AF93BF93EF93FF938091DA0080FF1BC08091D80080FF17C0B2 +:207A40008091DA008E7F8093DA008091D90080FF0BC080E189BD82E189BD09B400FEFDCF36 +:207A600081E08EBB3BD203C019BC1EBA37D28091E10080FF17C08091E20080FF13C0809138 +:207A8000E2008E7F8093E2008091E20080618093E2008091D80080628093D80019BC85E049 +:207AA0008EBB1CD28091E10084FF2CC08091E20084FF28C080E189BD82E189BD09B400FEC5 +:207AC000FDCF8091D8008F7D8093D8008091E1008F7E8093E1008091E2008F7E8093E20012 +:207AE0008091E20081608093E2008091B401882331F48091E30087FD02C081E001C084E067 +:207B00008EBBECD18091E10083FF21C08091E20083FF1DC08091E100877F8093E10082E06A +:207B20008EBB1092B4018091E1008E7F8093E1008091E2008E7F8093E2008091E2008061E9 +:207B40008093E20080E060E042E0D8DEC7D1FF91EF91BF91AF919F918F917F916F915F9130 +:207B60004F913F912F910F900FBE0F901F9018959C014091BC015091BD014617570718F49D +:207B8000F90190E044C06115710511F0AB01F8CF8091E8008E778093E80040E050E0F0CF0F +:207BA0008EB3882309F444C0853009F443C08091E80083FF02C081E008958091E80082FD70 +:207BC00031C08091E80080FF22C08091F3009091F200782F60E0292F30E0262B372B07C07A +:207BE00081918093F100415050402F5F3F4F4115510519F02830310598F390E02830310566 +:207C000009F491E08091E8008E778093E8004115510531F6992321F605C08EB3882341F075 +:207C2000853041F08091E80082FFF7CF80E0089582E0089583E008959C016115710529F47C +:207C40008091E8008B778093E800F90126C08EB3882391F1853091F18091E80083FF02C06C +:207C600081E008958091E80082FFF1CF06C08091F10081936150704059F02091F300809191 +:207C8000F200322F20E090E0822B932B892B79F78091E8008B778093E80061157105B9F601 +:207CA00005C08EB3882341F0853041F08091E80080FFF7CF80E0089582E0089583E00895C2 +:207CC0000F931F93DF93CF9300D0CDB7DEB7E6EBF1E08091F100819381E0EE3BF807C9F792 +:207CE00024DD8091E80083FFE4C08091B6019091B701953009F46DC0963040F4913081F1A7 +:207D0000913070F0933009F0D4C02AC0983009F4A3C0993009F4B2C0963009F0CAC07CC023 +:207D2000803809F4C6C0823809F0C3C08091BA0187708093E9008091EB001092E9002091DB +:207D4000E800277F2093E80090E025E0969587952A95E1F781708093F1001092F10087C0D8 +:207D6000882319F0823009F0A4C08F71823009F0A0C08091B801882331F52091BA01277097 +:207D800009F497C02093E9008091EB0080FF1BC0933021F48091EB00806213C08091EB0018 +:207DA00080618093EB0081E090E002C0880F991F2A95E2F78093EA001092EA008091EB00E5 +:207DC00088608093EB001092E9008091E800877F51C0882309F06DC01091B8011F770FB79B +:207DE000F8948091E800877F8093E8009ADD8091E80080FFFCCF8091E3008078812B809398 +:207E0000E30080688093E300112311F482E001C083E08EBB0FBF4DC08058823008F049C033 +:207E20008091B8019091B9016091BA01AE014F5F5F4F36DDBC01009709F43BC08091E8008E +:207E4000877F8093E80089819A8192DE8091E8008B778093E8002DC0803859F58091E800AA +:207E6000877F8093E8008091B4018093F1008091E8008E778093E80054DD1BC08823C9F4CA +:207E80009091B8019230A8F48091E800877F8093E8009093B40145DD8091B401882331F420 +:207EA0008091E30087FD02C081E001C084E08EBB6CDC8091E80083FF0AC08091EB0080624E +:207EC0008093EB008091E800877F8093E8000F900F90CF91DF911F910F91089508951F9360 +:207EE0008EB3882361F01091E9001092E9008091E80083FF01C0E4DE17701093E9001F916F +:207F00000895F999FECF92BD81BDF89A992780B50895262FF999FECF1FBA92BD81BD20BDBD +:207F20000FB6F894FA9AF99A0FBE01960895F894FFCF4341544552494E4100777700080031 +:207F40000000000000080112011001020000084123360001000201000109023E00020100FF +:207F600080320904000001020201000524001001042402040524060001070582030800FF0C +:207F800009040100020A000000070504021000010705830210000104030904220341007216 +:207FA000006400750069006E006F0020004C0065006F006E006100720064006F0000001836 +:1A7FC00003410072006400750069006E006F0020004C004C004300000000D7 +:00000001FF diff --git a/external/arduino/avr/bootloaders/caterina/Caterina-Leonardo.txt b/external/arduino/avr/bootloaders/caterina/Caterina-Leonardo.txt new file mode 100644 index 000000000..5beb659a0 --- /dev/null +++ b/external/arduino/avr/bootloaders/caterina/Caterina-Leonardo.txt @@ -0,0 +1,11 @@ +Builds against LUFA version 111009 +make version 3.81 +avrdude version 5.11 + +All AVR tools except avrdude were installed by CrossPack 20100115: +avr-gcc version 4.3.3 (GCC) +Thread model: single +Configured with: ../configure —prefix=/usr/local/CrossPack-AVR-20100115 —disable-dependency-tracking —disable-nls —disable-werror —target=avr —enable-languages=c,c++ —disable-nls —disable-libssp —with-dwarf2 +avr-libc version 1.6.7 +binutils version 2.19 + diff --git a/external/arduino/avr/bootloaders/caterina/Caterina-LeonardoEthernet.hex b/external/arduino/avr/bootloaders/caterina/Caterina-LeonardoEthernet.hex new file mode 100644 index 000000000..65393e7f8 --- /dev/null +++ b/external/arduino/avr/bootloaders/caterina/Caterina-LeonardoEthernet.hex @@ -0,0 +1,250 @@ +:107000005FC0000078C0000076C0000074C00000BF +:1070100072C0000070C000006EC000006CC00000B4 +:107020006AC0000068C00000DAC4000064C000004C +:1070300062C0000060C000005EC000005CC00000D4 +:107040005AC000009DC0000056C0000054C000009F +:1070500052C0000050C000004EC000004CC00000F4 +:107060004AC0000048C0000046C0000044C0000004 +:1070700042C0000040C000003EC000003CC0000014 +:107080003AC0000038C0000036C0000034C0000024 +:1070900032C0000030C000002EC000002CC0000034 +:1070A0002AC0000028C0000026C00000583E713EE3 +:1070B000153F713E153FA63EC83E153FE83EFA3EDD +:1070C00011241FBECFEFDAE0DEBFCDBF11E0A0E09C +:1070D000B1E0E4EBFEE702C005900D92A23BB107E0 +:1070E000D9F721E0A2EBB1E001C01D92AB3CB207A1 +:1070F000E1F720D3DDC684CF84E08093E90080915E +:10710000E80085FD0EC08091E8008B778093E80051 +:107110008091E80082FDF3CF8EB38111F9CF80E03A +:1071200008958091F100089593E09093E900909183 +:10713000E80095FF0AC08093F1005D9884E690E036 +:107140009093B9018093B80108959091E8009E77DB +:107150009093E8009091E80090FDEDCF9EB39111DF +:10716000F9CF0895F89410926F001092810081E099 +:1071700085BF15BE47985D9A289A0C940000089523 +:107180001F920F920FB60F9211242F938F939F93FC +:10719000EF93FF9310928500109284008091B801C4 +:1071A0009091B901009741F001979093B9018093B4 +:1071B000B801892B09F45D9A8091B6019091B701CD +:1071C000009741F001979093B7018093B601892B06 +:1071D00009F4289A8091B2019091B301019690939D +:1071E000B3018093B201E0E0F0E0859194910196C3 +:1071F00049F08091B4019091B50101969093B50149 +:107200008093B401FF91EF919F918F912F910F90F7 +:107210000FBE0F901F90189542E061EC82E05AD3A8 +:1072200042E161E883E056D342E160E884E052C382 +:107230008091C301982F9F77913239F59091C401C5 +:10724000903291F0913209F5813AF9F48091E80099 +:10725000877F8093E80067E070E082E091E070D47F +:107260008091E8008B770FC0813279F48091E8003B +:10727000877F8093E80067E070E082E091E0B9D416 +:107280008091E8008E778093E80008954F925F9296 +:107290006F927F928F929F92AF92BF92CF92DF9226 +:1072A000EF92FF92CF93DF9384E08093E900809187 +:1072B000E80082FF30C2289884E690E09093B701FE +:1072C0008093B60119DFD82F853481F48CE49DE1D9 +:1072D0009093B5018093B40107B600FCFDCFF999F6 +:1072E000FECF81E180935700E89503C0843521F4F7 +:1072F00003DF8DE019DFE6C18C34D9F38035C9F3A3 +:10730000843721F484E410DF80E0F4CF813611F477 +:1073100089E5F0CF813491F4EFDEC82FEDDE90E007 +:10732000880F991F2C2F30E0322F2227330F822B0A +:10733000932BAA2797FDA095BA2F98C1803711F4F7 +:1073400083E5D8CF833549F4C9EAD1E08991ECDEF1 +:1073500021E0C03BD207D1F7B5C1863521F481E3E6 +:10736000E3DE80E3C7CF833731F487E8DDDE85E9EC +:10737000DBDE8EE1BFCF8536B9F4E0E0F0E083E0FC +:1073800095E080935700E89507B600FCFDCF9093F9 +:107390005700E89507B600FCFDCFE058FF4FE11518 +:1073A00020E7F20771F7A5CF823719F4E1E0F0E0AA +:1073B0000EC0863419F4E0E0F0E009C08E3419F410 +:1073C000E3E0F0E004C0813539F4E2E0F0E089E088 +:1073D0008093570084918ECF823631F489E5A4DE04 +:1073E00080E0A2DE80E886CF823419F0873609F08B +:1073F000D5C01092B5011092B4017EDED82E7CDE8D +:10740000E82E7ADEC82F8BEB8C0F823010F08FE3E2 +:1074100071CFF12CFD2810926F00D73609F045C0CE +:1074200081E180935700E8955701912CD1E0A11498 +:10743000B10409F4AFC0C090BB01D090BC01E09092 +:10744000BD01F090BE01C634B9F4E92DF0E0EC299D +:10745000FD29849169DE992069F082E0C80ED11C73 +:10746000E11CF11CC092BB01D092BC01E092BD01B5 +:10747000F092BE019D2615C0D701C601B695A7950D +:1074800097958795FFD450DEE2E0CE0ED11CE11C2B +:10749000F11CC092BB01D092BC01E092BD01F09200 +:1074A000BE01F1E0AF1AB108C2CF8090BB0190904D +:1074B000BC01A090BD01B090BE01C63421F0C12C2A +:1074C000D12CD1E030C083E0F40180935700E895DF +:1074D00007B600FCFDCFF3CFC63461F5DD2039F1EE +:1074E0004090BB015090BC016090BD017090BE0106 +:1074F00003DE2C2D30E0382BF2010901D093570028 +:10750000E8951124F2E04F0E511C611C711C409251 +:10751000BB015092BC016092BD017092BE01DD269C +:1075200021E0E21AF108E114F104B1F627C0E4DD2C +:10753000C82EF5CFE1DD682F8091BB019091BC0191 +:10754000A091BD01B091BE01B695A795979587957D +:10755000A1D44091BB015091BC016091BD017091DB +:10756000BE014E5F5F4F6F4F7F4F4093BB01509303 +:10757000BC016093BD017093BE01D2CFC63441F40B +:1075800085E0F40180935700E89507B600FCFDCF35 +:107590008DE0CADD82E080936F0094C0833471F483 +:1075A000C091BB01D091BC01A7DD90E021E0FE01BC +:1075B0000C0120935700E89511249BCE833601F5EA +:1075C000C090BB01D090BC01E090BD01F090BE0125 +:1075D00093DDF601E16090E021E00C01209357007B +:1075E000E8951124F2E0CF0ED11CE11CF11CC092F1 +:1075F000BB01D092BC01E092BD01F092BE0179CEF8 +:107600008D3661F4E091BB01F091BC0185E080937F +:107610005700E89507B600FCFDCF6BCE823551F4DC +:10762000E091BB01F091BC01C591D4918D2F7CDD1F +:107630008C2F60CE843419F55FDD682F8091BB01FB +:107640009091BC01A091BD01B091BE01B695A795E6 +:10765000979587951FD48091BB019091BC01A09113 +:10766000BD01B091BE010296A11DB11D8093BB0169 +:107670009093BC01A093BD01B093BE013ACE843675 +:10768000F1F4C090BB01D090BC01E090BD01F0903E +:10769000BE01D701C601B695A79597958795F2D3F8 +:1076A00043DD22E0C20ED11CE11CF11CC092BB01E3 +:1076B000D092BC01E092BD01F092BE0103C08B31BB +:1076C00009F0A5CE83E08093E9009091E8008091D5 +:1076D000E8008E778093E80095FD11C08091E80066 +:1076E00080FD04C08EB38111F9CF15C08091E800F0 +:1076F0008E778093E80003C08EB3882361F0809179 +:10770000E80080FFF9CF84E08093E9008091E800F1 +:107710008B778093E800DF91CF91FF90EF90DF901F +:10772000CF90BF90AF909F908F907F906F905F9021 +:107730004F900895CF93309100081092000824B71D +:1077400014BE88E10FB6F894809360001092600038 +:107750000FBE90E080E80FB6F8948093610090939C +:1077600061000FBE81E085BF82E085BF3F9A209A0D +:10777000559A90E8909361001092610047985D9A45 +:10778000289A109289009AEF9093880080936F0056 +:1077900083E080938100E0E0F0E085919491019690 +:1077A00019F081E08093BA0121FF20C0809100018F +:1077B0003817E1F0809300087894809101018823C4 +:1077C00039F08091B2019091B30188379140C8F3AC +:1077D0001092010110920008F89481E08093010159 +:1077E0008091BA01882371F0BDDC0CC020FF04C079 +:1077F0008091BA018111F8CF23FF04C0809100016C +:107800003813EECFD4D078941092B5011092B40111 +:10781000CEEF80910101882301F138DD1CD38091E6 +:10782000B4019091B50181349F4110F01092010193 +:107830008091BF019091C00101969093C001809307 +:10784000BF01292F97FF02C02C2F291B220F2817B9 +:1078500010F44798DECF479ADCCF8091E00081603A +:107860008093E0007FDC80E090E0CF910895292FA5 +:1078700030E02230310539F02330310549F0213034 +:10788000310561F410C08EE390E029E531E01EC0BF +:10789000882371F0813089F08230A1F080E090E09F +:1078A00020E030E013C082E190E027E931E00EC033 +:1078B00084E090E025E531E009C08CE290E027E229 +:1078C00031E004C08CE190E029E031E0FA0131833D +:1078D000208308958093E900EBEEF0E080818160E1 +:1078E0008083EDEEF0E010826093EC0040838091A5 +:1078F000EE00881F8827881F08958091C30187FDA7 +:1079000005C08091E80080FF0DC010C08091E800A4 +:1079100082FD04C08EB38111F9CF08958091E800F3 +:107920008B7707C08EB38111ECCF08958091E8006A +:107930008E778093E80008950F931F93CF93DF9382 +:1079400041D048D0C8EDD0E088818F778883888186 +:107950008068888388818F7D888319BC1EBA1092C5 +:10796000C10100EE10E0F80180818B7F8083888167 +:107970008160888342E060E080E0ACDFE1EEF0E02F +:1079800080818E7F8083E2EEF0E080818160808361 +:10799000808188608083F80180818E7F80838881E8 +:1079A00080618883DF91CF911F910F910895E7ED5A +:1079B000F0E08081816080838AE482BF81E08093EF +:1079C000C201BACFE8EDF0E080818E7F8083109213 +:1079D000E20008951092DA001092E10008951F92DB +:1079E0000F920FB60F9211242F933F934F935F93F3 +:1079F0006F937F938F939F93AF93BF93EF93FF9377 +:107A00008091DA0080FF1BC08091D80080FF17C0F2 +:107A10008091DA008E7F8093DA008091D90080FF18 +:107A20000BC080E189BD82E189BD09B400FEFDCFB4 +:107A300081E08EBB0FD203C019BC1EBA0BD280915D +:107A4000E10080FF17C08091E20080FF13C08091A9 +:107A5000E2008E7F8093E2008091E200806180935B +:107A6000E2008091D80080628093D80019BC85E044 +:107A70008EBBF0D18091E10084FF2CC08091E200A8 +:107A800084FF28C080E189BD82E189BD09B400FE80 +:107A9000FDCF8091D8008F7D8093D8008091E10048 +:107AA0008F7E8093E1008091E2008F7E8093E200E0 +:107AB0008091E20081608093E2008091C101811198 +:107AC00004C08091E30087FF02C084E001C081E030 +:107AD0008EBBC0D18091E10083FF21C08091E20084 +:107AE00083FF1DC08091E100877F8093E10082E0E9 +:107AF0008EBB1092C1018091E1008E7F8093E100E6 +:107B00008091E2008E7F8093E2008091E2008061AC +:107B10008093E20042E060E080E0DCDE9BD1FF91F8 +:107B2000EF91BF91AF919F918F917F916F915F91F5 +:107B30004F913F912F910F900FBE0F901F9018956E +:107B40002091C9013091CA012617370748F0611505 +:107B5000710539F42091E8002E772093E80001C0E8 +:107B6000B901FC0120E061157105A1F18EB38823F4 +:107B7000E1F18530E1F18091E80083FD34C080912E +:107B8000E80082FF06C08091E80082FF26C080E006 +:107B900008958091E80080FFE6CF2091F300809166 +:107BA000F20090E0922B6115710551F0883091053B +:107BB00038F421912093F100615071090196F3CFBF +:107BC00021E0089709F020E08091E8008E7780930B +:107BD000E800C9CF2111CACFD6CF8EB3882329F0B0 +:107BE000853089F604C081E0089582E0089583E03D +:107BF00008956115710529F42091E8002B772093F1 +:107C0000E8006115710521F12EB3222351F12530D1 +:107C100051F12091E80023FD20C02091E80022FFCF +:107C2000F3CFFC01CF014091F3002091F20030E04E +:107C3000342B232B09F38091F1008193CF01615004 +:107C4000710981F7D9CF8EB3882359F0853059F067 +:107C50008091E80080FFF7CF02C081E0089580E0C6 +:107C6000089582E0089583E008950F931F93CF93C2 +:107C7000DF9300D0CDB7DEB7E3ECF1E08091F10007 +:107C8000819381E0EB3CF807C9F7D2DA8091E800F4 +:107C900083FFCBC02091C3013091C401832F90E0BA +:107CA0008A30910508F0C1C0FC01EA5AF74CE4C0E3 +:107CB000223809F0BAC08091C70187708093E9002B +:107CC0009091EB001092E9008091E800877F80930B +:107CD000E80095FB882780F98093F1001092F1006D +:107CE00082C0822F8D7F09F0A0C0223009F09DC094 +:107CF0008091C501811124C02091C701277009F42A +:107D000094C02093E9008091EB0080FF19C080911E +:107D1000EB00333011F4806211C080618093EB007E +:107D200081E090E0022E01C0880F0A94EAF7809368 +:107D3000EA001092EA008091EB0088608093EB00EB +:107D40001092E9008091E800877F50C021116DC03A +:107D50001091C5011F770FB7F8948091E800877FD5 +:107D60008093E800CADD8091E80080FFFCCF80911D +:107D7000E3008078812B8093E30080688093E300A8 +:107D8000112311F083E001C082E08EBB0FBF4DC014 +:107D90002058223008F049C0AE014F5F5F4F60911C +:107DA000C7018091C5019091C60161DD009709F47A +:107DB0003CC02091E800277F2093E800BC01898126 +:107DC0009A81BEDE8091E8008B778093E8002DC019 +:107DD000203859F58091E800877F8093E8008091F2 +:107DE000C1018093F1008091E8008E778093E800D4 +:107DF00084DD1BC0211119C09091C5019230A8F4F7 +:107E00008091E800877F8093E8009093C10175DD41 +:107E10008091C101811104C08091E30087FF02C0FD +:107E200084E001C081E08EBBF7D98091E80083FF38 +:107E30000AC08091EB0080628093EB008091E800A3 +:107E4000877F8093E8000F900F90DF91CF911F9173 +:107E50000F9108950895CF938EB3882359F0C09160 +:107E6000E900C7701092E9008091E80083FDFDDE13 +:107E7000C093E900CF910895EE0FFF1F0590F49194 +:107E8000E02D0994F999FECF92BD81BDF89A99270A +:107E900080B50895262FF999FECF1FBA92BD81BDF6 +:107EA00020BD0FB6F894FA9AF99A0FBE019608957C +:047EB000F894FFCF74 +:107EB4007701000000000000081C03410072006408 +:107EC40000750069006E006F002000730072006C82 +:107ED400002000200000002C0341007200640075A3 +:107EE4000069006E006F0020004C0065006F006E9A +:107EF400006100720064006F0020004500540048D7 +:107F040000200000000403090409023E00020100ED +:107F1400803209040000010202010005240010015E +:107F2400042402040524060001070582030800FF57 +:107F340009040100020A0000000705040210000100 +:107F4400070583021000011201100102000008035A +:107F54002A40000100020100014341544552494EA8 +:027F64004100DA +:040000030000700089 +:00000001FF diff --git a/external/arduino/avr/bootloaders/caterina/Caterina-LininoOne.hex b/external/arduino/avr/bootloaders/caterina/Caterina-LininoOne.hex new file mode 100644 index 000000000..32e7c2bc4 --- /dev/null +++ b/external/arduino/avr/bootloaders/caterina/Caterina-LininoOne.hex @@ -0,0 +1,249 @@ +:107000005FC0000078C0000076C0000074C00000BF +:1070100072C0000070C000006EC000006CC00000B4 +:107020006AC0000068C00000DAC4000064C000004C +:1070300062C0000060C000005EC000005CC00000D4 +:107040005AC000009DC0000056C0000054C000009F +:1070500052C0000050C000004EC000004CC00000F4 +:107060004AC0000048C0000046C0000044C0000004 +:1070700042C0000040C000003EC000003CC0000014 +:107080003AC0000038C0000036C0000034C0000024 +:1070900032C0000030C000002EC000002CC0000034 +:1070A0002AC0000028C0000026C00000583E713EE3 +:1070B000153F713E153FA63EC83E153FE83EFA3EDD +:1070C00011241FBECFEFDAE0DEBFCDBF11E0A0E09C +:1070D000B1E0E4EBFEE702C005900D92A83AB107DB +:1070E000D9F721E0A8EAB1E001C01D92A13CB207A6 +:1070F000E1F720D3DDC684CF84E08093E90080915E +:10710000E80085FD0EC08091E8008B778093E80051 +:107110008091E80082FDF3CF8EB38111F9CF80E03A +:1071200008958091F100089593E09093E900909183 +:10713000E80095FF0AC08093F1005D9884E690E036 +:107140009093AF018093AE0108959091E8009E77EF +:107150009093E8009091E80090FDEDCF9EB39111DF +:10716000F9CF0895F89410926F001092810081E099 +:1071700085BF15BE47985D9A289A0C940000089523 +:107180001F920F920FB60F9211242F938F939F93FC +:10719000EF93FF9310928500109284008091AE01CE +:1071A0009091AF01009741F001979093AF018093C8 +:1071B000AE01892B09F45D9A8091AC019091AD01EB +:1071C000009741F001979093AD018093AC01892B1A +:1071D00009F4289A8091A8019091A90101969093B1 +:1071E000A9018093A801E0E0F0E0859194910196D7 +:1071F00049F08091AA019091AB0101969093AB0167 +:107200008093AA01FF91EF919F918F912F910F9001 +:107210000FBE0F901F90189542E061EC82E05AD3A8 +:1072200042E161E883E056D342E160E884E052C382 +:107230008091B901982F9F77913239F59091BA01D9 +:10724000903291F0913209F5813AF9F48091E80099 +:10725000877F8093E80067E070E082E091E070D47F +:107260008091E8008B770FC0813279F48091E8003B +:10727000877F8093E80067E070E082E091E0B9D416 +:107280008091E8008E778093E80008954F925F9296 +:107290006F927F928F929F92AF92BF92CF92DF9226 +:1072A000EF92FF92CF93DF9384E08093E900809187 +:1072B000E80082FF30C2289884E690E09093AD0108 +:1072C0008093AC0119DFD82F853481F48CE49DE1E3 +:1072D0009093AB018093AA0107B600FCFDCFF9990A +:1072E000FECF81E180935700E89503C0843521F4F7 +:1072F00003DF8DE019DFE6C18C34D9F38035C9F3A3 +:10730000843721F484E410DF80E0F4CF813611F477 +:1073100089E5F0CF813491F4EFDEC82FEDDE90E007 +:10732000880F991F2C2F30E0322F2227330F822B0A +:10733000932BAA2797FDA095BA2F98C1803711F4F7 +:1073400083E5D8CF833549F4CFE9D1E08991ECDEEC +:1073500021E0C63AD207D1F7B5C1863521F481E3E1 +:10736000E3DE80E3C7CF833731F487E8DDDE85E9EC +:10737000DBDE8EE1BFCF8536B9F4E0E0F0E083E0FC +:1073800095E080935700E89507B600FCFDCF9093F9 +:107390005700E89507B600FCFDCFE058FF4FE11518 +:1073A00020E7F20771F7A5CF823719F4E1E0F0E0AA +:1073B0000EC0863419F4E0E0F0E009C08E3419F410 +:1073C000E3E0F0E004C0813539F4E2E0F0E089E088 +:1073D0008093570084918ECF823631F489E5A4DE04 +:1073E00080E0A2DE80E886CF823419F0873609F08B +:1073F000D5C01092AB011092AA017EDED82E7CDEA1 +:10740000E82E7ADEC82F8BEB8C0F823010F08FE3E2 +:1074100071CFF12CFD2810926F00D73609F045C0CE +:1074200081E180935700E8955701912CD1E0A11498 +:10743000B10409F4AFC0C090B101D090B201E090A6 +:10744000B301F090B401C634B9F4E92DF0E0EC29B1 +:10745000FD29849169DE992069F082E0C80ED11C73 +:10746000E11CF11CC092B101D092B201E092B301D3 +:10747000F092B4019D2615C0D701C601B695A79517 +:1074800097958795FFD450DEE2E0CE0ED11CE11C2B +:10749000F11CC092B101D092B201E092B301F0921E +:1074A000B401F1E0AF1AB108C2CF8090B101909061 +:1074B000B201A090B301B090B401C63421F0C12C48 +:1074C000D12CD1E030C083E0F40180935700E895DF +:1074D00007B600FCFDCFF3CFC63461F5DD2039F1EE +:1074E0004090B1015090B2016090B3017090B4012E +:1074F00003DE2C2D30E0382BF2010901D093570028 +:10750000E8951124F2E04F0E511C611C711C409251 +:10751000B1015092B2016092B3017092B401DD26C4 +:1075200021E0E21AF108E114F104B1F627C0E4DD2C +:10753000C82EF5CFE1DD682F8091B1019091B201A5 +:10754000A091B301B091B401B695A7959795879591 +:10755000A1D44091B1015091B2016091B3017091F9 +:10756000B4014E5F5F4F6F4F7F4F4093B101509317 +:10757000B2016093B3017093B401D2CFC63441F429 +:1075800085E0F40180935700E89507B600FCFDCF35 +:107590008DE0CADD82E080936F0094C0833471F483 +:1075A000C091B101D091B201A7DD90E021E0FE01D0 +:1075B0000C0120935700E89511249BCE833601F5EA +:1075C000C090B101D090B201E090B301F090B4014D +:1075D00093DDF601E16090E021E00C01209357007B +:1075E000E8951124F2E0CF0ED11CE11CF11CC092F1 +:1075F000B101D092B201E092B301F092B40179CE20 +:107600008D3661F4E091B101F091B20185E0809393 +:107610005700E89507B600FCFDCF6BCE823551F4DC +:10762000E091B101F091B201C591D4918D2F7CDD33 +:107630008C2F60CE843419F55FDD682F8091B10105 +:107640009091B201A091B301B091B401B695A79504 +:10765000979587951FD48091B1019091B201A09127 +:10766000B301B091B4010296A11DB11D8093B10187 +:107670009093B201A093B301B093B4013ACE843693 +:10768000F1F4C090B101D090B201E090B301F0905C +:10769000B401D701C601B695A79597958795F2D302 +:1076A00043DD22E0C20ED11CE11CF11CC092B101ED +:1076B000D092B201E092B301F092B40103C08B31D9 +:1076C00009F0A5CE83E08093E9009091E8008091D5 +:1076D000E8008E778093E80095FD11C08091E80066 +:1076E00080FD04C08EB38111F9CF15C08091E800F0 +:1076F0008E778093E80003C08EB3882361F0809179 +:10770000E80080FFF9CF84E08093E9008091E800F1 +:107710008B778093E800DF91CF91FF90EF90DF901F +:10772000CF90BF90AF909F908F907F906F905F9021 +:107730004F900895CF93309100081092000824B71D +:1077400014BE88E10FB6F894809360001092600038 +:107750000FBE90E080E80FB6F8948093610090939C +:1077600061000FBE81E085BF82E085BF3F9A209A0D +:10777000559A90E8909361001092610047985D9A45 +:10778000289A109289009AEF9093880080936F0056 +:1077900083E080938100E0E0F0E085919491019690 +:1077A00019F081E08093B00121FF20C08091000199 +:1077B0003817E1F0809300087894809101018823C4 +:1077C00039F08091A8019091A90188379140C8F3C0 +:1077D0001092010110920008F89481E08093010159 +:1077E0008091B001882371F0BDDC0CC020FF04C083 +:1077F0008091B0018111F8CF23FF04C08091000176 +:107800003813EECFD4D078941092AB011092AA0125 +:10781000CEEF80910101882301F138DD1CD38091E6 +:10782000AA019091AB0181349F4110F010920101A7 +:107830008091B5019091B60101969093B601809325 +:10784000B501292F97FF02C02C2F291B220F2817C3 +:1078500010F44798DECF479ADCCF8091E00081603A +:107860008093E0007FDC80E090E0CF910895292FA5 +:1078700030E02230310539F02330310549F0213034 +:10788000310561F410C08EE390E02FE431E01EC0BA +:10789000882371F0813089F08230A1F080E090E09F +:1078A00020E030E013C082E190E02DE831E00EC02E +:1078B00084E090E02BE431E009C082E290E027E22E +:1078C00031E004C08CE190E029E031E0FA0131833D +:1078D000208308958093E900EBEEF0E080818160E1 +:1078E0008083EDEEF0E010826093EC0040838091A5 +:1078F000EE00881F8827881F08958091B90187FDB1 +:1079000005C08091E80080FF0DC010C08091E800A4 +:1079100082FD04C08EB38111F9CF08958091E800F3 +:107920008B7707C08EB38111ECCF08958091E8006A +:107930008E778093E80008950F931F93CF93DF9382 +:1079400041D048D0C8EDD0E088818F778883888186 +:107950008068888388818F7D888319BC1EBA1092C5 +:10796000B70100EE10E0F80180818B7F8083888171 +:107970008160888342E060E080E0ACDFE1EEF0E02F +:1079800080818E7F8083E2EEF0E080818160808361 +:10799000808188608083F80180818E7F80838881E8 +:1079A00080618883DF91CF911F910F910895E7ED5A +:1079B000F0E08081816080838AE482BF81E08093EF +:1079C000B801BACFE8EDF0E080818E7F808310921D +:1079D000E20008951092DA001092E10008951F92DB +:1079E0000F920FB60F9211242F933F934F935F93F3 +:1079F0006F937F938F939F93AF93BF93EF93FF9377 +:107A00008091DA0080FF1BC08091D80080FF17C0F2 +:107A10008091DA008E7F8093DA008091D90080FF18 +:107A20000BC080E189BD82E189BD09B400FEFDCFB4 +:107A300081E08EBB0FD203C019BC1EBA0BD280915D +:107A4000E10080FF17C08091E20080FF13C08091A9 +:107A5000E2008E7F8093E2008091E200806180935B +:107A6000E2008091D80080628093D80019BC85E044 +:107A70008EBBF0D18091E10084FF2CC08091E200A8 +:107A800084FF28C080E189BD82E189BD09B400FE80 +:107A9000FDCF8091D8008F7D8093D8008091E10048 +:107AA0008F7E8093E1008091E2008F7E8093E200E0 +:107AB0008091E20081608093E2008091B7018111A2 +:107AC00004C08091E30087FF02C084E001C081E030 +:107AD0008EBBC0D18091E10083FF21C08091E20084 +:107AE00083FF1DC08091E100877F8093E10082E0E9 +:107AF0008EBB1092B7018091E1008E7F8093E100F0 +:107B00008091E2008E7F8093E2008091E2008061AC +:107B10008093E20042E060E080E0DCDE9BD1FF91F8 +:107B2000EF91BF91AF919F918F917F916F915F91F5 +:107B30004F913F912F910F900FBE0F901F9018956E +:107B40002091BF013091C0012617370748F0611519 +:107B5000710539F42091E8002E772093E80001C0E8 +:107B6000B901FC0120E061157105A1F18EB38823F4 +:107B7000E1F18530E1F18091E80083FD34C080912E +:107B8000E80082FF06C08091E80082FF26C080E006 +:107B900008958091E80080FFE6CF2091F300809166 +:107BA000F20090E0922B6115710551F0883091053B +:107BB00038F421912093F100615071090196F3CFBF +:107BC00021E0089709F020E08091E8008E7780930B +:107BD000E800C9CF2111CACFD6CF8EB3882329F0B0 +:107BE000853089F604C081E0089582E0089583E03D +:107BF00008956115710529F42091E8002B772093F1 +:107C0000E8006115710521F12EB3222351F12530D1 +:107C100051F12091E80023FD20C02091E80022FFCF +:107C2000F3CFFC01CF014091F3002091F20030E04E +:107C3000342B232B09F38091F1008193CF01615004 +:107C4000710981F7D9CF8EB3882359F0853059F067 +:107C50008091E80080FFF7CF02C081E0089580E0C6 +:107C6000089582E0089583E008950F931F93CF93C2 +:107C7000DF9300D0CDB7DEB7E9EBF1E08091F10002 +:107C8000819381E0E13CF807C9F7D2DA8091E800FE +:107C900083FFCBC02091B9013091BA01832F90E0CE +:107CA0008A30910508F0C1C0FC01EA5AF74CE4C0E3 +:107CB000223809F0BAC08091BD0187708093E90035 +:107CC0009091EB001092E9008091E800877F80930B +:107CD000E80095FB882780F98093F1001092F1006D +:107CE00082C0822F8D7F09F0A0C0223009F09DC094 +:107CF0008091BB01811124C02091BD01277009F43E +:107D000094C02093E9008091EB0080FF19C080911E +:107D1000EB00333011F4806211C080618093EB007E +:107D200081E090E0022E01C0880F0A94EAF7809368 +:107D3000EA001092EA008091EB0088608093EB00EB +:107D40001092E9008091E800877F50C021116DC03A +:107D50001091BB011F770FB7F8948091E800877FDF +:107D60008093E800CADD8091E80080FFFCCF80911D +:107D7000E3008078812B8093E30080688093E300A8 +:107D8000112311F083E001C082E08EBB0FBF4DC014 +:107D90002058223008F049C0AE014F5F5F4F60911C +:107DA000BD018091BB019091BC0161DD009709F498 +:107DB0003CC02091E800277F2093E800BC01898126 +:107DC0009A81BEDE8091E8008B778093E8002DC019 +:107DD000203859F58091E800877F8093E8008091F2 +:107DE000B7018093F1008091E8008E778093E800DE +:107DF00084DD1BC0211119C09091BB019230A8F401 +:107E00008091E800877F8093E8009093B70175DD4B +:107E10008091B701811104C08091E30087FF02C007 +:107E200084E001C081E08EBBF7D98091E80083FF38 +:107E30000AC08091EB0080628093EB008091E800A3 +:107E4000877F8093E8000F900F90DF91CF911F9173 +:107E50000F9108950895CF938EB3882359F0C09160 +:107E6000E900C7701092E9008091E80083FDFDDE13 +:107E7000C093E900CF910895EE0FFF1F0590F49194 +:107E8000E02D0994F999FECF92BD81BDF89A99270A +:107E900080B50895262FF999FECF1FBA92BD81BDF6 +:107EA00020BD0FB6F894FA9AF99A0FBE019608957C +:047EB000F894FFCF74 +:107EB4007701000000000000081C0364006F0067E5 +:107EC400002000680075006E0074006500720020D8 +:107ED4000041004700000022034C0069006E006965 +:107EE400006E006F0020004F006E0065002000202F +:107EF40000200020002000200000000403090409E1 +:107F0400023E000201008032090400000102020165 +:107F140000052400100104240204052406000107BE +:107F24000582030800FF09040100020A000000079B +:107F3400050402100001070583021000011201105C +:107F44000102000008032A010001000201000143AC +:087F540041544552494E410021 +:040000030000700089 +:00000001FF diff --git a/external/arduino/avr/bootloaders/caterina/Caterina-Micro.hex b/external/arduino/avr/bootloaders/caterina/Caterina-Micro.hex new file mode 100644 index 000000000..804dfd3a7 --- /dev/null +++ b/external/arduino/avr/bootloaders/caterina/Caterina-Micro.hex @@ -0,0 +1,1024 @@ +:200000000C946E010C9496010C9496010C9496010C9496010C9496010C9496010C94960150 +:200020000C9496010C9496010C94F8040C947F050C9496010C9496010C9496010C949601B6 +:200040000C9496010C9496010C9496010C9496010C9496010C9496010C9496010C94B501C9 +:200060000C9496010C9496010C9496010C9496010C9496010C9496010C9496010C949601C8 +:200080000C9496010C9496010C9496010C9496010C9496010C9496010C9496010C949601A8 +:2000A0000C9496010C9496010C94960100000000240027002A002D003000000000002500A4 +:2000C00028002B002E003100000000002300260029002C002F00040404040403040502027D +:2000E0000202040302020202060606060606040402020204040802011040804010204080A8 +:200100004080080204018040201002011080102040400000000200080E0000030401000BB2 +:200120000000070605040100080A0B0C0D09040309042203410072006400750069006E00CD +:200140006F0020004D006900630072006F00200020002000180341007200640075006900A6 +:200160006E006F0020004C004C00430012010002000000404123378000010102000112011F +:200180000002020000404123378000010102000100C18081C1080B00020202010009040051 +:2001A000000102020000052400100105240101010424020605240600010705810310004094 +:2001C00009040100020A000000070502024000000705830240000005010902A1010901A186 +:2001E000008501050919012903150025019503750181029501750581030501093009310943 +:20020000381581257F750895038106C0C005010906A1018502050719E029E715002501754D +:20022000019508810295017508810395067508150025650507190029658100C0090402004C +:2002400001030000000921010100012265000705840340000100000000000000002A2B2895 +:200260000000000000000000000000000000000000000000002C9EB4A0A1A2A434A6A7A553 +:20028000AE362D3738271E1F20212223242526B333B62EB7B89F8485868788898A8B8C8D58 +:2002A0008E8F909192939495969798999A9B9C9D2F3130A3AD350405060708090A0B0C0D7C +:2002C0000E0F101112131415161718191A1B1C1DAFB1B0B5000032041207170811241FBE81 +:2002E000CFEFDAE0DEBFCDBF11E0A0E0B1E0E4EAF2E102C005900D92AC32B107D9F711E06D +:20030000ACE2B1E001C01D92AD39B107E1F712E0CCEDD2E004C02297FE010E944C09C63D05 +:20032000D107C9F70E946C030C9450090C9400008091000161E00E94390368EE73E080E041 +:2003400090E00E94FD018091000160E00E94390368EE73E080E090E00E94FD010895809196 +:20036000000161E00E94AC0208951F920F920FB60F9211242F933F938F939F93AF93BF93E5 +:200380008091300190913101A0913201B0913301309134010196A11DB11D232F2D5F2D3794 +:2003A00020F02D570196A11DB11D209334018093300190933101A0933201B0933301809117 +:2003C0002C0190912D01A0912E01B0912F010196A11DB11D80932C0190932D01A0932E01BA +:2003E000B0932F01BF91AF919F918F913F912F910F900FBE0F901F9018959B01AC017FB734 +:20040000F89480912C0190912D01A0912E01B0912F0166B5A89B05C06F3F19F00196A11DC3 +:20042000B11D7FBFBA2FA92F982F8827860F911DA11DB11D62E0880F991FAA1FBB1F6A9577 +:20044000D1F7BC012DC0FFB7F89480912C0190912D01A0912E01B0912F01E6B5A89B05C0E7 +:20046000EF3F19F00196A11DB11DFFBFBA2FA92F982F88278E0F911DA11DB11DE2E0880FFD +:20048000991FAA1FBB1FEA95D1F7861B970B885E9340C8F2215030404040504068517C4F8F +:2004A000211531054105510571F60895789484B5826084BD84B5816084BD85B5826085BD0F +:2004C00085B5816085BDEEE6F0E0808181608083E1E8F0E010828081826080838081816043 +:2004E0008083E0E8F0E0808181608083E1E9F0E0808182608083808181608083E0E9F0E07E +:20050000808181608083E1ECF0E0808184608083808182608083808181608083E3ECF0E007 +:20052000808181608083E0ECF0E0808182608083E2ECF0E0808181608083EAE7F0E080812F +:20054000846080838081826080838081816080838081806880830895CF93DF93482F50E0E5 +:20056000CA018C509F4FFC0134914A525F4FFA018491882369F190E0880F991FFC01E455D0 +:20058000FF4FA591B491FC01E654FF4FC591D491662351F42FB7F8948C91932F9095892362 +:2005A0008C93888189230BC0623061F42FB7F8948C91932F909589238C938881832B8883B2 +:2005C0002FBF06C09FB7F8948C91832B8C939FBFDF91CF910895883071F1893068F48230EF +:2005E00031F1833020F4813009F042C01DC0833089F08430E9F512C08B3059F18C3028F41C +:200600008930E9F08A30A1F51EC08C3031F18E3079F529C0809180008F7703C0809180003C +:200620008F7D80938000089584B58F7702C084B58F7D84BD0895809190008F7707C08091DB +:2006400090008F7D03C080919000877F8093900008958091C0008F7703C08091C0008F7DDD +:200660008093C00008958091C200877F8093C2000895FF920F931F93F62E482F50E0CA0144 +:200680008E5E9E4FFC012491CA018C509F4FFC0114914A525F4FFA0104910023C9F022239D +:2006A00019F0822F0E94EB02E02FF0E0EE0FFF1FE654FF4FA591B4919FB7F894FF2021F4DE +:2006C0008C911095812302C08C91812B8C939FBF1F910F91FF900895CF93DF930E94560262 +:2006E0008DE391E00E9433040E94AF01C0E0D0E00E9498012097E1F30E940000F9CF282F17 +:20070000809137018823C1F057FF1AC015C0289A909336018091F1008193E217F307B9F75A +:200720004115510539F08091F200882319F48BE68093E800AFBF02C04FEF5FEFCA01089599 +:20074000AFB7F89427702093E9008091F200282F30E0241735070CF4A901FB019B01240F1E +:20076000311D94E6DACFDF93CF930F92CDB7DEB7BE016F5F7F4F41E050E00E947F03019712 +:2007800019F02FEF3FEF03C08981282F30E0C9010F90CF91DF910895FF920F931F93F82EEF +:2007A000142F052F40913A0150913B01212F302FC901DC01FB016EEF29C0F7FE02C0949125 +:2007C00001C09081209138013091390124173507ACF48091E8008570E1F38091E80082FF0F +:2007E00003C02FEF3FEF17C09093F100C90101968F739070892B11F46093E8002F5F3F4FEC +:200800003093390120933801119731961097A9F6812F902F9C01C9011F910F91FF900895E8 +:200820009C018091E80082FFFCCFF901260F311D03C08091F1008193E217F307D1F7289A03 +:2008400084E6809336018BEF8093E800CB0108958093E9008091F200882319F08AE38093D3 +:20086000E800089508951092370181E08093D70080EA8093D80082E189BD09B400FEFDCFAC +:2008800061E070E080E090E00E94FD0180E98093D8008CE08093E2001092E000559A209A77 +:2008A0005D98289808955F926F927F928F929F92AF92BF92CF92DF92EF92FF920F931F93C7 +:2008C000CF93DF93E82E842E752E80913701882371F18B01242F352FC901EC017AEFF72EFB +:2008E00067E0962E9E2050E4552E8E2D90E040E2A42EB12CA822B9223AE3632E20E4C22E35 +:20090000D12CC822D92258C09FB7F8949092E9008091E80085FD02C020E004C08091F200EC +:20092000252D281B9FBF222361F4FA9419F42FEF3FEF4DC061E070E080E090E00E94FD0135 +:200940003BC0822F90E0C817D9070CF42C2FC21BD1094FB7F8949092E900A114B10421F48E +:2009600006C01092F10021502223D9F719C0E7FC03C0F801922F10C0C801322F06C0FC01A2 +:200980000196E491E093F10031503323C1F706C081918093F10091509923D1F7020F111DD8 +:2009A0008091E80085FF05C0209729F4C114D10411F06092E8004FBF209709F0A5CF5D9A73 +:2009C00084E680933501282D372DC9019C01C901DF91CF911F910F91FF90EF90DF90CF907E +:2009E000BF90AF909F908F907F906F905F9008951F920F920FB60F9211242F933F934F931E +:200A00005F936F937F938F939F93AF93BF93EF93FF938091E1001092E100982F83FF0FC047 +:200A20001092E90081E08093EB001092EC0082E38093ED001092370188E08093F00092FF03 +:200A400034C083E08093E9008091F200882319F08AE38093E8008FB7F89492E09093E900D4 +:200A60009091F2008FBF992321F082E891E00E94550780913501882351F080913501815024 +:200A80008093350180913501882309F45D9880913601882351F08091360181508093360192 +:200AA00080913601882309F42898FF91EF91BF91AF919F918F917F916F915F914F913F91E6 +:200AC0002F910F900FBE0F901F9018950F931F93DF93CF930F92CDB7DEB719828E010F5F75 +:200AE0001F4FC8010E947B07C8010E941409898190E00F90CF91DF911F910F9108951F928C +:200B00000F920FB60F921124EF92FF921F932F933F934F935F936F937F938F939F93AF93C3 +:200B2000BF93EF93FF93DF93CF93CDB7DEB76197DEBFCDBF1092E9008091E80083FF0FC16B +:200B4000FE0131969E01275F3F4F03C08091F1008193E217F307D1F7289A84E68093360112 +:200B600082EF8093E800998197FF05C08091E80080FFFCCF03C08EEF8093E800292F30E0AE +:200B8000C90180769070892B09F0C2C08A81882329F41092F1001092F100D6C0813009F429 +:200BA000D3C0833009F4D0C0853049F48091E80080FFFCCF8B8180688093E300C5C0863008 +:200BC00009F07CC01C81EF80F8841230C1F51092E900109239011092380110923B0110929E +:200BE0003A010E94660599E0FE013996DF01292F1D922A95E9F799871A8791E09E8790E811 +:200C0000988B9AEF998B2091380130913901275F3F4F3C872B878D871092E900109239011B +:200C200010923801F0923B01E0923A0180E0BF0149E050E00E94CC030E94660585C0109290 +:200C4000E9001092390110923801F0923B01E0923A01123241F482E290E00E940C09892BD1 +:200C600009F476C071C0113079F488E0E816F10419F481E080933C0180913C01882309F057 +:200C80006BC0ECE6F1E013C0133009F061C08B81882319F4EEE2F1E00AC0823019F4E2E3A3 +:200CA000F1E005C0813009F053C0E4E5F1E0449180E8BF0150E00E94CC0346C0873009F4EF +:200CC00047C0883021F481E08093F1003DC08930D9F523703070232BD9F5E1E9F1E091E0FC +:200CE00031E026E39093E9003093EB0084918093EC002093ED009F5F3196953099F78EE7DD +:200D00008093EA001092EA008B81809337011CC08F8198851092E9001092390110923801A8 +:200D200090933B0180933A018D81882329F4CE0101960E94870706C0823051F4CE01019677 +:200D40000E94DD07882321F08EEF8093E80007C081E28093EB0003C0EEE7F1E0A8CF6196DA +:200D6000DEBFCDBFCF91DF91FF91EF91BF91AF919F918F917F916F915F914F913F912F911A +:200D80001F91FF90EF900F900FBE0F901F90189520917E0130917F01809180019091810188 +:200DA000281B390B2F733070C901089520917E0130917F01809180019091810128173907DE +:200DC00019F42FEF3FEF09C0E0918001F0918101E25CFE4F8081282F30E0C90108952091F1 +:200DE0007E0130917F0180918001909181012817390719F42FEF3FEF13C0E0918001F091E0 +:200E00008101E25CFE4F2081809180019091810101968F739070909381018093800130E00D +:200E2000C9010895109285011092840188EE93E0A0E0B0E08093860190938701A093880102 +:200E4000B093890180E191E0909383018093820108950F931F93DF93CF930F92CDB7DEB737 +:200E60008C01698380910901882369F083E0BE016F5F7F4F41E050E00E9453041816190685 +:200E800014F49C0107C081E090E0F8019383828320E030E0C9010F90CF91DF911F910F9168 +:200EA000089583E00E9428040895CF93DF9312C082E00E94B3032FEF8F3F9207C9F0E091B8 +:200EC0007E01F0917F01E25CFE4F8083D0937F01C0937E01C0917E01D0917F012196CF73A5 +:200EE000D0708091800190918101C817D90701F7DF91CF910895FC0180818E5F808380E803 +:200F000065E971E042E450E00E94CC030895FC0181819081913A59F4813209F04CC080E08E +:200F200062E071E047E050E00E94CC0342C0913209F041C0803239F482E091E067E070E04E +:200F40000E94100436C0823209F035C08281809309018091020190910301A0910401B09173 +:200F60000501805B9440A040B04019F58091090180FD12C087E797E7909301088093000841 +:200F80002BE088E190E00FB6F894A895809360000FBE209360000DC088E10FB6F8948093F2 +:200FA0006000109260000FBEA895109201081092000881E0089580E00895FC019181808165 +:200FC000813A31F4913089F080E0933089F40DC0813269F49B3021F4828180930A0105C0B4 +:200FE0009A3029F4828180930B0181E0089580E00895EF92FF920F931F938C01E62EDC0109 +:20100000ED91FC910480F581E02D0995F82ED801ED91FC910680F781E02DC8016E2D099509 +:201020008F2D90E01F910F91FF90EF90089510929001109294011092930182E291E09093F1 +:201040009201809391010895EF92FF920F931F93DF93CF930F92CDB7DEB789838B017A01B4 +:2010600084E0BE016F5F7F4F41E050E00E94530484E4B801A7010E9453040F90CF91DF9136 +:201080001F910F91FF90EF90089582E048E050E00E9424080895FC011682178210861186D5 +:2010A0001286138614823496BF010E9445080895DC01683810F0685829C0E62FF0E067FFE2 +:2010C00013C0E058F04081E090E002C0880F991FEA95E2F7809514962C911497282314967F +:2010E0002C93149760E012C0EB5AFD4F6491662319F420E030E01DC067FF08C014968C9176 +:2011000014978D7F14968C9314976F77FD0190E0662321F08681861709F416829F5F3196B8 +:201120009630B1F7CD011496BD010E94450821E030E0C9010895CF93DF93DC01683810F053 +:20114000685825C0E62FF0E067FF12C0E058F04081E090E002C0880F991FEA95E2F7149681 +:201160002C911497282B14962C93149760E00FC0EB5AFD4F64916623D9F167FF08C01496E0 +:201180008C911497826014968C9314976F7716968C9116978617A9F117968C911797861789 +:2011A00081F118968C911897861759F119968C911997861731F11A968C911A97861709F10C +:2011C0001B968C911B978617E1F0ED01E0E0F0E09E2F8E81882321F4EA0FFB1F668306C045 +:2011E0009F5F31962196E630F10591F7963049F481E090E013969C938E93129720E030E059 +:2012000007C0CD011496BD010E94450821E030E0C901DF91CF91089580E867ED71E045E662 +:2012200050E00E94CC030895FC0180818F5F808380E86CE372E049E150E00E94CC03089510 +:20124000CF92DF92EF92FF920F931F93CF93DF937C016B018A01C0E0D0E00FC0D6016D911A +:201260006D01D701ED91FC910190F081E02DC7010995C80FD91F015010400115110571F7A4 +:20128000CE01DF91CF911F910F91FF90EF90DF90CF900895EE0FFF1F0590F491E02D099407 +:2012A000F894FFCF0D0000E100000000000001010000000029072009C806EF06D606510794 +:2012C000550700000000F90720099B0858084B08FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF43 +:2012E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E +:20130000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED +:20132000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCD +:20134000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD +:20136000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D +:20138000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6D +:2013A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4D +:2013C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2D +:2013E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D +:20140000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC +:20142000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCC +:20144000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAC +:20146000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8C +:20148000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C +:2014A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C +:2014C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C +:2014E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0C +:20150000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEB +:20152000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCB +:20154000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAB +:20156000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8B +:20158000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6B +:2015A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4B +:2015C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2B +:2015E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B +:20160000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA +:20162000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCA +:20164000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAA +:20166000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8A +:20168000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A +:2016A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4A +:2016C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A +:2016E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A +:20170000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9 +:20172000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9 +:20174000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9 +:20176000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF89 +:20178000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF69 +:2017A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF49 +:2017C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF29 +:2017E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF09 +:20180000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8 +:20182000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC8 +:20184000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA8 +:20186000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF88 +:20188000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF68 +:2018A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF48 +:2018C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF28 +:2018E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF08 +:20190000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7 +:20192000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7 +:20194000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA7 +:20196000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87 +:20198000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF67 +:2019A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF47 +:2019C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF27 +:2019E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07 +:201A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6 +:201A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC6 +:201A4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA6 +:201A6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF86 +:201A8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF66 +:201AA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF46 +:201AC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF26 +:201AE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF06 +:201B0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5 +:201B2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC5 +:201B4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5 +:201B6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF85 +:201B8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF65 +:201BA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF45 +:201BC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF25 +:201BE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05 +:201C0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4 +:201C2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4 +:201C4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA4 +:201C6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF84 +:201C8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF64 +:201CA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF44 +:201CC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF24 +:201CE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04 +:201D0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3 +:201D2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC3 +:201D4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA3 +:201D6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF83 +:201D8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF63 +:201DA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF43 +:201DC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF23 +:201DE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03 +:201E0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2 +:201E2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC2 +:201E4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA2 +:201E6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF82 +:201E8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF62 +:201EA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF42 +:201EC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF22 +:201EE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02 +:201F0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 +:201F2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC1 +:201F4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA1 +:201F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF81 +:201F8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF61 +:201FA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF41 +:201FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF21 +:201FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01 +:20200000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 +:20202000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 +:20204000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0 +:20206000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 +:20208000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60 +:2020A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40 +:2020C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20 +:2020E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +:20210000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF +:20212000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF +:20214000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F +:20216000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F +:20218000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F +:2021A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F +:2021C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F +:2021E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +:20220000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDE +:20222000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBE +:20224000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9E +:20226000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7E +:20228000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E +:2022A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E +:2022C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E +:2022E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE +:20230000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDD +:20232000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBD +:20234000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9D +:20236000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7D +:20238000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D +:2023A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D +:2023C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D +:2023E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD +:20240000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC +:20242000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBC +:20244000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9C +:20246000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C +:20248000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5C +:2024A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3C +:2024C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C +:2024E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC +:20250000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB +:20252000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBB +:20254000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9B +:20256000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7B +:20258000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B +:2025A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B +:2025C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1B +:2025E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB +:20260000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDA +:20262000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBA +:20264000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A +:20266000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7A +:20268000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5A +:2026A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3A +:2026C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1A +:2026E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA +:20270000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9 +:20272000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB9 +:20274000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99 +:20276000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF79 +:20278000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF59 +:2027A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF39 +:2027C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF19 +:2027E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9 +:20280000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8 +:20282000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB8 +:20284000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF98 +:20286000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF78 +:20288000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF58 +:2028A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF38 +:2028C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF18 +:2028E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8 +:20290000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7 +:20292000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB7 +:20294000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF97 +:20296000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77 +:20298000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF57 +:2029A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF37 +:2029C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF17 +:2029E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7 +:202A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6 +:202A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB6 +:202A4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF96 +:202A6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF76 +:202A8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF56 +:202AA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF36 +:202AC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF16 +:202AE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6 +:202B0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD5 +:202B2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5 +:202B4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF95 +:202B6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF75 +:202B8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF55 +:202BA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF35 +:202BC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF15 +:202BE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5 +:202C0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4 +:202C2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB4 +:202C4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF94 +:202C6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74 +:202C8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF54 +:202CA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF34 +:202CC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF14 +:202CE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4 +:202D0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3 +:202D2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB3 +:202D4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF93 +:202D6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF73 +:202D8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF53 +:202DA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF33 +:202DC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF13 +:202DE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3 +:202E0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD2 +:202E2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB2 +:202E4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF92 +:202E6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72 +:202E8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF52 +:202EA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF32 +:202EC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF12 +:202EE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2 +:202F0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD1 +:202F2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB1 +:202F4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF91 +:202F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF71 +:202F8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF51 +:202FA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF31 +:202FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF11 +:202FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1 +:20300000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0 +:20302000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0 +:20304000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90 +:20306000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70 +:20308000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50 +:2030A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30 +:2030C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF10 +:2030E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 +:20310000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF +:20312000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF +:20314000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F +:20316000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F +:20318000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F +:2031A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F +:2031C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F +:2031E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF +:20320000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE +:20322000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAE +:20324000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E +:20326000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E +:20328000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4E +:2032A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E +:2032C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E +:2032E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEE +:20330000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCD +:20332000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD +:20334000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D +:20336000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6D +:20338000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4D +:2033A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2D +:2033C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D +:2033E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED +:20340000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCC +:20342000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAC +:20344000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8C +:20346000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C +:20348000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C +:2034A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C +:2034C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0C +:2034E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC +:20350000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCB +:20352000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAB +:20354000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8B +:20356000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6B +:20358000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4B +:2035A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2B +:2035C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B +:2035E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEB +:20360000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCA +:20362000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAA +:20364000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8A +:20366000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A +:20368000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4A +:2036A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A +:2036C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A +:2036E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA +:20370000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9 +:20372000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9 +:20374000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF89 +:20376000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF69 +:20378000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF49 +:2037A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF29 +:2037C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF09 +:2037E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9 +:20380000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC8 +:20382000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA8 +:20384000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF88 +:20386000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF68 +:20388000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF48 +:2038A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF28 +:2038C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF08 +:2038E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8 +:20390000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7 +:20392000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA7 +:20394000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87 +:20396000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF67 +:20398000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF47 +:2039A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF27 +:2039C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07 +:2039E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7 +:203A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC6 +:203A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA6 +:203A4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF86 +:203A6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF66 +:203A8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF46 +:203AA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF26 +:203AC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF06 +:203AE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6 +:203B0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC5 +:203B2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5 +:203B4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF85 +:203B6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF65 +:203B8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF45 +:203BA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF25 +:203BC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05 +:203BE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5 +:203C0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4 +:203C2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA4 +:203C4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF84 +:203C6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF64 +:203C8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF44 +:203CA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF24 +:203CC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04 +:203CE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4 +:203D0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC3 +:203D2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA3 +:203D4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF83 +:203D6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF63 +:203D8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF43 +:203DA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF23 +:203DC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03 +:203DE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3 +:203E0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC2 +:203E2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA2 +:203E4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF82 +:203E6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF62 +:203E8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF42 +:203EA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF22 +:203EC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02 +:203EE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2 +:203F0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC1 +:203F2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA1 +:203F4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF81 +:203F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF61 +:203F8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF41 +:203FA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF21 +:203FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01 +:203FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 +:20400000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 +:20402000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0 +:20404000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 +:20406000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60 +:20408000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40 +:2040A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20 +:2040C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +:2040E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 +:20410000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF +:20412000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F +:20414000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F +:20416000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F +:20418000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F +:2041A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F +:2041C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +:2041E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF +:20420000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBE +:20422000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9E +:20424000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7E +:20426000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E +:20428000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E +:2042A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E +:2042C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE +:2042E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDE +:20430000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBD +:20432000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9D +:20434000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7D +:20436000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D +:20438000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D +:2043A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D +:2043C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD +:2043E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDD +:20440000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBC +:20442000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9C +:20444000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C +:20446000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5C +:20448000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3C +:2044A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C +:2044C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC +:2044E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC +:20450000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBB +:20452000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9B +:20454000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7B +:20456000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B +:20458000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B +:2045A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1B +:2045C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB +:2045E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB +:20460000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBA +:20462000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A +:20464000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7A +:20466000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5A +:20468000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3A +:2046A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1A +:2046C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA +:2046E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDA +:20470000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB9 +:20472000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99 +:20474000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF79 +:20476000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF59 +:20478000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF39 +:2047A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF19 +:2047C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9 +:2047E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9 +:20480000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB8 +:20482000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF98 +:20484000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF78 +:20486000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF58 +:20488000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF38 +:2048A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF18 +:2048C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8 +:2048E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8 +:20490000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB7 +:20492000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF97 +:20494000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77 +:20496000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF57 +:20498000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF37 +:2049A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF17 +:2049C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7 +:2049E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7 +:204A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB6 +:204A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF96 +:204A4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF76 +:204A6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF56 +:204A8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF36 +:204AA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF16 +:204AC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6 +:204AE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6 +:204B0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5 +:204B2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF95 +:204B4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF75 +:204B6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF55 +:204B8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF35 +:204BA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF15 +:204BC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5 +:204BE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD5 +:204C0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB4 +:204C2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF94 +:204C4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74 +:204C6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF54 +:204C8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF34 +:204CA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF14 +:204CC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4 +:204CE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4 +:204D0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB3 +:204D2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF93 +:204D4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF73 +:204D6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF53 +:204D8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF33 +:204DA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF13 +:204DC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3 +:204DE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3 +:204E0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB2 +:204E2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF92 +:204E4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72 +:204E6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF52 +:204E8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF32 +:204EA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF12 +:204EC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2 +:204EE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD2 +:204F0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB1 +:204F2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF91 +:204F4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF71 +:204F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF51 +:204F8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF31 +:204FA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF11 +:204FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1 +:204FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD1 +:20500000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0 +:20502000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90 +:20504000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70 +:20506000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50 +:20508000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30 +:2050A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF10 +:2050C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 +:2050E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0 +:20510000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF +:20512000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F +:20514000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F +:20516000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F +:20518000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F +:2051A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F +:2051C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF +:2051E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF +:20520000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAE +:20522000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E +:20524000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E +:20526000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4E +:20528000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E +:2052A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E +:2052C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEE +:2052E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE +:20530000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD +:20532000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D +:20534000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6D +:20536000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4D +:20538000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2D +:2053A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D +:2053C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED +:2053E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCD +:20540000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAC +:20542000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8C +:20544000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C +:20546000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C +:20548000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C +:2054A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0C +:2054C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC +:2054E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCC +:20550000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAB +:20552000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8B +:20554000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6B +:20556000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4B +:20558000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2B +:2055A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B +:2055C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEB +:2055E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCB +:20560000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAA +:20562000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8A +:20564000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A +:20566000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4A +:20568000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A +:2056A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A +:2056C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA +:2056E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCA +:20570000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9 +:20572000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF89 +:20574000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF69 +:20576000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF49 +:20578000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF29 +:2057A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF09 +:2057C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9 +:2057E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9 +:20580000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA8 +:20582000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF88 +:20584000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF68 +:20586000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF48 +:20588000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF28 +:2058A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF08 +:2058C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8 +:2058E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC8 +:20590000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA7 +:20592000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87 +:20594000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF67 +:20596000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF47 +:20598000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF27 +:2059A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07 +:2059C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7 +:2059E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7 +:205A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA6 +:205A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF86 +:205A4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF66 +:205A6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF46 +:205A8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF26 +:205AA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF06 +:205AC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6 +:205AE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC6 +:205B0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5 +:205B2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF85 +:205B4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF65 +:205B6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF45 +:205B8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF25 +:205BA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05 +:205BC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5 +:205BE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC5 +:205C0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA4 +:205C2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF84 +:205C4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF64 +:205C6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF44 +:205C8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF24 +:205CA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04 +:205CC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4 +:205CE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4 +:205D0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA3 +:205D2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF83 +:205D4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF63 +:205D6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF43 +:205D8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF23 +:205DA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03 +:205DC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3 +:205DE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC3 +:205E0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA2 +:205E2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF82 +:205E4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF62 +:205E6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF42 +:205E8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF22 +:205EA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02 +:205EC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2 +:205EE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC2 +:205F0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA1 +:205F2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF81 +:205F4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF61 +:205F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF41 +:205F8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF21 +:205FA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01 +:205FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 +:205FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC1 +:20600000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0 +:20602000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 +:20604000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60 +:20606000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40 +:20608000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20 +:2060A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +:2060C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 +:2060E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 +:20610000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F +:20612000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F +:20614000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F +:20616000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F +:20618000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F +:2061A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +:2061C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF +:2061E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF +:20620000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9E +:20622000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7E +:20624000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E +:20626000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E +:20628000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E +:2062A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE +:2062C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDE +:2062E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBE +:20630000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9D +:20632000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7D +:20634000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D +:20636000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D +:20638000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D +:2063A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD +:2063C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDD +:2063E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBD +:20640000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9C +:20642000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C +:20644000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5C +:20646000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3C +:20648000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C +:2064A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC +:2064C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC +:2064E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBC +:20650000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9B +:20652000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7B +:20654000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B +:20656000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B +:20658000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1B +:2065A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB +:2065C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB +:2065E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBB +:20660000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A +:20662000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7A +:20664000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5A +:20666000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3A +:20668000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1A +:2066A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA +:2066C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDA +:2066E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBA +:20670000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99 +:20672000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF79 +:20674000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF59 +:20676000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF39 +:20678000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF19 +:2067A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9 +:2067C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9 +:2067E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB9 +:20680000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF98 +:20682000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF78 +:20684000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF58 +:20686000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF38 +:20688000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF18 +:2068A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8 +:2068C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8 +:2068E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB8 +:20690000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF97 +:20692000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77 +:20694000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF57 +:20696000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF37 +:20698000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF17 +:2069A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7 +:2069C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7 +:2069E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB7 +:206A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF96 +:206A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF76 +:206A4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF56 +:206A6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF36 +:206A8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF16 +:206AA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6 +:206AC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6 +:206AE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB6 +:206B0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF95 +:206B2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF75 +:206B4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF55 +:206B6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF35 +:206B8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF15 +:206BA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5 +:206BC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD5 +:206BE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5 +:206C0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF94 +:206C2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74 +:206C4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF54 +:206C6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF34 +:206C8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF14 +:206CA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4 +:206CC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4 +:206CE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB4 +:206D0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF93 +:206D2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF73 +:206D4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF53 +:206D6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF33 +:206D8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF13 +:206DA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3 +:206DC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3 +:206DE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB3 +:206E0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF92 +:206E2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72 +:206E4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF52 +:206E6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF32 +:206E8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF12 +:206EA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2 +:206EC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD2 +:206EE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB2 +:206F0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF91 +:206F2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF71 +:206F4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF51 +:206F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF31 +:206F8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF11 +:206FA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1 +:206FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD1 +:206FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB1 +:2070000055C000006EC000006CC000006AC0000068C0000066C0000064C0000062C0000043 +:2070200060C000005EC00000F2C400005AC0000058C0000056C0000054C0000052C00000EE +:2070400050C0000078C000004CC000004AC0000048C0000046C0000044C0000042C00000BE +:2070600040C000003EC000003CC000003AC0000038C0000036C0000034C0000032C0000048 +:2070800030C000002EC000002CC000002AC0000028C0000026C0000024C0000022C00000A8 +:2070A00020C000001EC000001CC0000011241FBECFEFDAE0DEBFCDBF11E0A0E0B1E0E2E3BC +:2070C000FFE702C005900D92A83AB107D9F711E0A8EAB1E001C01D92AE3BB107E1F78FD30B +:2070E00026C78ECFF89410926F0010928100109285001092840081E085BF15BE47985D98ED +:2071000028980C94000008952091B2013091B3012F5F3F4F3093B3012093B201932F37FFA8 +:2071200003C08EEF831B982F990F921710F447980895479A08951F920F920FB60F9211246E +:207140002F938F939F93EF93FF9310928500109284008091A8019091A901009741F00197D3 +:207160009093A9018093A801892B09F45D988091AA019091AB01009741F001979093AB0128 +:207180008093AA01892B09F42898E0E0F0E0859194918F5F9F4F49F08091AC019091AD0153 +:2071A00001969093AD018093AC01FF91EF919F918F912F910F900FBE0F901F90189584E0BC +:2071C0008093E9000DC08091E8008B778093E80003C08EB3882351F08091E80082FFF9CFBE +:2071E0008091E80085FFEFCF8091F1000895982F83E08093E9008091E80085FD0DC0809136 +:20720000E8008E778093E80003C08EB3882369F08091E80080FFF9CF9093F1005D9A84E6C9 +:2072200090E09093A9018093A80108954F925F926F927F928F929F92AF92BF92CF92DF921E +:20724000EF92FF920F931F93CF93DF9384E08093E9008091E80082FF57C2289A84E690E065 +:207260009093AB018093AA01AADF182F853481F48CE49DE19093AD018093AC0107B600FC4B +:20728000FDCFF999FECF81E180935700E89503C0843519F494DF8DE00DC28C34E1F38035F9 +:2072A000D1F3843721F484E4A2DF80E003C2813611F489E5FFC18134B1F481DF182F7FDFE3 +:2072C00090E0880F991FAA2797FDA095BA2F312F330F20E0442737FD4095542F822B932B68 +:2072E000A42BB52BB8C1803711F483E5E3C1833549F4C0E0D1E089917ADF21E0C730D20714 +:20730000D1F7D9C1863521F481E371DF80E3D2C1833731F487E86BDF85E969DF8EE1CAC149 +:207320008536B9F4E0E0F0E093E085E090935700E89507B600FCFDCF80935700E89507B65D +:2073400000FCFDCFE058FF4FA0E7E030FA0771F7A2CF823739F4E1E0F0E089E08093570024 +:207360008491A8C1863439F4E0E0F0E089E08093570084919FC18E3439F4E3E0F0E089E0E5 +:2073800080935700849196C1813539F4E2E0F0E089E08093570084918DC1823631F489E521 +:2073A00026DF80E024DF80E885C1823419F0873609F0E5C01092AD011092AC0100DF082FE8 +:2073C000FEDEF82EFCDE682E8554823008F071C1902F80E0CF2DD0E0C82BD92B10926F00B3 +:2073E000173609F04BC081E180935700E895DD24CC24C3943FC0E090AE01F090AF010091CC +:20740000B0011091B101B6E46B16D9F4ED2DF0E0EE29FF29E4918E2FEADEDD2081F082E08D +:2074200090E0A0E0B0E0E80EF91E0A1F1B1FE092AE01F092AF010093B0011093B101DC2470 +:2074400018C0D801C701B695A7959795879559D5CEDE82E090E0A0E0B0E0E80EF91E0A1FF2 +:207460001B1FE092AE01F092AF010093B0011093B1012197209709F0BECF7DC08090AE01F5 +:207480009090AF01A090B001B090B10196E4691609F05DC083E0F40180935700E89507B63E +:2074A00000FCFDCF54C0F6E46F1661F5772031F1E090AE01F090AF010091B0011091B1019E +:2074C0007EDED82ECC24852D90E08C299D29F7010C0140925700E895112482E090E0A0E08B +:2074E000B0E0E80EF91E0A1F1B1FE092AE01F092AF010093B0011093B10102C060DE582E1A +:20750000742423C0E090AE01F090AF010091B0011091B10116950795F794E79450DE682FFA +:20752000C701F7D48091AE019091AF01A091B001B091B1010296A11DB11D8093AE01909349 +:20754000AF01A093B001B093B101219704C05524772444244394209709F0A5CF96E46916B6 +:2075600041F485E0F40180935700E89507B600FCFDCF8DE03CDE82E080936F009CC0833492 +:2075800071F40091AE011091AF0119DE90E021E0F8010C0120935700E89511247CCE8336C8 +:2075A00019F5E090AE01F090AF010091B0011091B10105DEF701E16090E021E00C0120938C +:2075C0005700E895112482E090E0A0E0B0E0E80EF91E0A1F1B1FE092AE01F092AF0100936A +:2075E000B0011093B10157CE8D3661F4E091AE01F091AF0185E080935700E89507B600FCF2 +:20760000FDCF49CE823551F4E091AE01F091AF0105911491812FEBDD802F4CC0843421F5FE +:20762000E090AE01F090AF010091B0011091B10116950795F794E794C2DD682FC70169D4DE +:207640008091AE019091AF01A091B001B091B1010296A11DB11D8093AE019093AF01A093D8 +:20766000B001B093B10117CE843609F5E090AE01F090AF010091B0011091B101D801C70142 +:20768000B695A795979587953CD4B1DD82E090E0A0E0B0E0E80EF91E0A1F1B1FE092AE010A +:2076A000F092AF010093B0011093B10104C08B3111F08FE39CDD83E08093E9009091E8002B +:2076C0008091E8008E778093E80095FF04C010C08EB38823C9F08091E80080FFF9CF809193 +:2076E000E8008E778093E80003C08EB3882361F08091E80080FFF9CF84E08093E9008091F1 +:20770000E8008B778093E800DF91CF911F910F91FF90EF90DF90CF90BF90AF909F908F90AC +:207720007F906F905F904F9008959091B601892F8F77813249F58091B7018032A1F081328A +:2077400019F5913A09F58091E800877F8093E8008DE091E067E070E00BD28091E8008B770B +:207760008093E8000895913279F48091E800877F8093E8008DE091E067E070E05DD2809192 +:20778000E8008E778093E800089582E061EC42E0B5D083E061E842E1B1D084E060E842E1EF +:2077A000ADC084B7877F84BF88E10FB6F89480936000109260000FBE20E880E090E00FB63F +:2077C000F89420936100809361000FBE81E085BF92E095BF3F9A209A559AE1E6F0E02083A1 +:2077E000108247985D982898109289008AEF8093880090936F0083E080938100F0C040911A +:20780000000850910108109201081092000894B714BE88E10FB6F8948093600010926000D5 +:207820000FBE292F30E0F901E270F07091FD18C090FF05C0859194918F5F9F4F81F423FFFF +:207840000FC08091090190910A014817590741F0E0E0F0E0859194918F5F9F4F09F042DC64 +:20786000A0DF78941092AD011092AC010CC0DEDC36D38091AC019091AD0181549F4110F00D +:207880001092140141DC80911401882381F78091E00081608093E00025DC80E090E0089598 +:2078A000FA01923049F0933061F09130F9F485E191E022E130E01EC087E291E02EE330E04D +:2078C00019C0882329F485E691E024E030E012C0813029F489E691E022E230E00BC0823006 +:2078E00029F48DE891E028E130E004C080E090E020E030E091838083C90108958093E9004E +:207900008091EB0081608093EB001092ED006093EC004093ED008091EE00881F8827881F62 +:2079200008958091B60188238CF403C08EB38823B1F08091E80082FFF9CF8091E8008B772A +:207940008093E80008958EB3882349F08091E80080FFF9CF8091E8008E778093E800089594 +:20796000EF92FF920F931F9345D04CD008ED10E0F80180818F77808380818068808380819B +:207980008F7D808319BC1EBA1092B40180EEE82EF12CF70180818B7F8083F8018081816052 +:2079A000808380E060E042E0A9DFE1EEF0E080818E7F8083E2EEF0E0808181608083808144 +:2079C00088608083F70180818E7F8083F8018081806180831F910F91FF90EF900895E7ED06 +:2079E000F0E08081816080838AE482BF81E08093B501B6CFE8EDF0E080818E7F808310921C +:207A0000E20008951092DA001092E10008951F920F920FB60F9211242F933F934F935F93F6 +:207A20006F937F938F939F93AF93BF93EF93FF938091DA0080FF1BC08091D80080FF17C0B2 +:207A40008091DA008E7F8093DA008091D90080FF0BC080E189BD82E189BD09B400FEFDCF36 +:207A600081E08EBB3BD203C019BC1EBA37D28091E10080FF17C08091E20080FF13C0809138 +:207A8000E2008E7F8093E2008091E20080618093E2008091D80080628093D80019BC85E049 +:207AA0008EBB1CD28091E10084FF2CC08091E20084FF28C080E189BD82E189BD09B400FEC5 +:207AC000FDCF8091D8008F7D8093D8008091E1008F7E8093E1008091E2008F7E8093E20012 +:207AE0008091E20081608093E2008091B401882331F48091E30087FD02C081E001C084E067 +:207B00008EBBECD18091E10083FF21C08091E20083FF1DC08091E100877F8093E10082E06A +:207B20008EBB1092B4018091E1008E7F8093E1008091E2008E7F8093E2008091E2008061E9 +:207B40008093E20080E060E042E0D8DEC7D1FF91EF91BF91AF919F918F917F916F915F9130 +:207B60004F913F912F910F900FBE0F901F9018959C014091BC015091BD014617570718F49D +:207B8000F90190E044C06115710511F0AB01F8CF8091E8008E778093E80040E050E0F0CF0F +:207BA0008EB3882309F444C0853009F443C08091E80083FF02C081E008958091E80082FD70 +:207BC00031C08091E80080FF22C08091F3009091F200782F60E0292F30E0262B372B07C07A +:207BE00081918093F100415050402F5F3F4F4115510519F02830310598F390E02830310566 +:207C000009F491E08091E8008E778093E8004115510531F6992321F605C08EB3882341F075 +:207C2000853041F08091E80082FFF7CF80E0089582E0089583E008959C016115710529F47C +:207C40008091E8008B778093E800F90126C08EB3882391F1853091F18091E80083FF02C06C +:207C600081E008958091E80082FFF1CF06C08091F10081936150704059F02091F300809191 +:207C8000F200322F20E090E0822B932B892B79F78091E8008B778093E80061157105B9F601 +:207CA00005C08EB3882341F0853041F08091E80080FFF7CF80E0089582E0089583E00895C2 +:207CC0000F931F93DF93CF9300D0CDB7DEB7E6EBF1E08091F100819381E0EE3BF807C9F792 +:207CE00024DD8091E80083FFE4C08091B6019091B701953009F46DC0963040F4913081F1A7 +:207D0000913070F0933009F0D4C02AC0983009F4A3C0993009F4B2C0963009F0CAC07CC023 +:207D2000803809F4C6C0823809F0C3C08091BA0187708093E9008091EB001092E9002091DB +:207D4000E800277F2093E80090E025E0969587952A95E1F781708093F1001092F10087C0D8 +:207D6000882319F0823009F0A4C08F71823009F0A0C08091B801882331F52091BA01277097 +:207D800009F497C02093E9008091EB0080FF1BC0933021F48091EB00806213C08091EB0018 +:207DA00080618093EB0081E090E002C0880F991F2A95E2F78093EA001092EA008091EB00E5 +:207DC00088608093EB001092E9008091E800877F51C0882309F06DC01091B8011F770FB79B +:207DE000F8948091E800877F8093E8009ADD8091E80080FFFCCF8091E3008078812B809398 +:207E0000E30080688093E300112311F482E001C083E08EBB0FBF4DC08058823008F049C033 +:207E20008091B8019091B9016091BA01AE014F5F5F4F36DDBC01009709F43BC08091E8008E +:207E4000877F8093E80089819A8192DE8091E8008B778093E8002DC0803859F58091E800AA +:207E6000877F8093E8008091B4018093F1008091E8008E778093E80054DD1BC08823C9F4CA +:207E80009091B8019230A8F48091E800877F8093E8009093B40145DD8091B401882331F420 +:207EA0008091E30087FD02C081E001C084E08EBB6CDC8091E80083FF0AC08091EB0080624E +:207EC0008093EB008091E800877F8093E8000F900F90CF91DF911F910F91089508951F9360 +:207EE0008EB3882361F01091E9001092E9008091E80083FF01C0E4DE17701093E9001F916F +:207F00000895F999FECF92BD81BDF89A992780B50895262FF999FECF1FBA92BD81BD20BDBD +:207F20000FB6F894FA9AF99A0FBE01960895F894FFCF4341544552494E4100777700080031 +:207F40000000000000080112011001020000084123370001000201000109023E00020100FE +:207F600080320904000001020201000524001001042402040524060001070582030800FF0C +:207F800009040100020A000000070504021000010705830210000104030904220341007216 +:207FA000006400750069006E006F0020004D006900630072006F0020002000200000001810 +:1A7FC00003410072006400750069006E006F0020004C004C004300000000D7 +:00000001FF diff --git a/external/arduino/avr/bootloaders/caterina/Caterina-Micro.txt b/external/arduino/avr/bootloaders/caterina/Caterina-Micro.txt new file mode 100644 index 000000000..5beb659a0 --- /dev/null +++ b/external/arduino/avr/bootloaders/caterina/Caterina-Micro.txt @@ -0,0 +1,11 @@ +Builds against LUFA version 111009 +make version 3.81 +avrdude version 5.11 + +All AVR tools except avrdude were installed by CrossPack 20100115: +avr-gcc version 4.3.3 (GCC) +Thread model: single +Configured with: ../configure —prefix=/usr/local/CrossPack-AVR-20100115 —disable-dependency-tracking —disable-nls —disable-werror —target=avr —enable-languages=c,c++ —disable-nls —disable-libssp —with-dwarf2 +avr-libc version 1.6.7 +binutils version 2.19 + diff --git a/external/arduino/avr/bootloaders/caterina/Caterina-Yun-noblink.hex b/external/arduino/avr/bootloaders/caterina/Caterina-Yun-noblink.hex new file mode 100644 index 000000000..b2efb17ff --- /dev/null +++ b/external/arduino/avr/bootloaders/caterina/Caterina-Yun-noblink.hex @@ -0,0 +1,258 @@ +:1070000055C000006EC000006CC000006AC00000E7 +:1070100068C0000066C0000064C0000062C00000DC +:1070200060C000005EC00000FCC400005AC0000048 +:1070300058C0000056C0000054C0000052C00000FC +:1070400050C000005DC000004CC000004AC00000FD +:1070500048C0000046C0000044C0000042C000001C +:1070600040C000003EC000003CC000003AC000002C +:1070700038C0000036C0000034C0000032C000003C +:1070800030C000002EC000002CC000002AC000004C +:1070900028C0000026C0000024C0000022C000005C +:1070A00020C000001EC000001CC0000011241FBE34 +:1070B000CFEFDAE0DEBFCDBF11E0A0E0B1E0E6E463 +:1070C000FFE702C005900D92A63AB107D9F711E08B +:1070D000A6EAB1E001C01D92AF3BB107E1F74FD383 +:1070E00030C78ECFF89410926F001092810081E02B +:1070F00085BF15BE47985D9A289A0C9400000895A4 +:107100001F920F920FB60F9211242F938F939F937C +:10711000EF93FF9310928500109284008091A60156 +:107120009091A701009741F001979093A701809358 +:10713000A601892B09F45D9A8091A8019091A9017B +:10714000009741F001979093A9018093A801892BA2 +:1071500009F4289A8091AC019091AD010196909329 +:10716000AD018093AC01E0E0F0E0859194918F5FF8 +:107170009F4F49F08091AA019091AB0101969093A5 +:10718000AB018093AA01FF91EF919F918F912F9175 +:107190000F900FBE0F901F90189584E08093E90028 +:1071A0000DC08091E8008B778093E80003C08EB318 +:1071B000882351F08091E80082FFF9CF8091E800A8 +:1071C00085FFEFCF8091F1000895982F83E08093A1 +:1071D000E9008091E80085FD0DC08091E8008E7780 +:1071E0008093E80003C08EB3882369F08091E800A3 +:1071F00080FFF9CF9093F1005D9884E690E0909342 +:10720000A7018093A60108954F925F926F927F929B +:107210008F929F92AF92BF92CF92DF92EF92FF92A6 +:107220000F931F93CF93DF9384E08093E9008091C5 +:10723000E80082FF57C2289884E690E09093A90165 +:107240008093A801AADF182F853481F48CE49DE196 +:107250009093AB018093AA0107B600FCFDCFF9998A +:10726000FECF81E180935700E89503C0843519F47F +:1072700094DF8DE00DC28C34E1F38035D1F3843797 +:1072800021F484E4A2DF80E003C2813611F489E5B1 +:10729000FFC18134B1F481DF182F7FDF90E0880FC8 +:1072A000991FAA2797FDA095BA2F312F330F20E001 +:1072B000442737FD4095542F822B932BA42BB52BBD +:1072C000B8C1803711F483E5E3C1833549F4C0E0E8 +:1072D000D1E089917ADF21E0C730D207D1F7D9C157 +:1072E000863521F481E371DF80E3D2C1833731F445 +:1072F00087E86BDF85E969DF8EE1CAC18536B9F4BD +:10730000E0E0F0E093E085E090935700E89507B661 +:1073100000FCFDCF80935700E89507B600FCFDCF39 +:10732000E058FF4FA0E7E030FA0771F7A2CF8237AD +:1073300039F4E1E0F0E089E0809357008491A8C13E +:10734000863439F4E0E0F0E089E0809357008491DE +:107350009FC18E3439F4E3E0F0E089E08093570078 +:10736000849196C1813539F4E2E0F0E089E08093C0 +:10737000570084918DC1823631F489E526DF80E0A3 +:1073800024DF80E885C1823419F0873609F0E5C032 +:107390001092AB011092AA0100DF082FFEDEF82E3A +:1073A000FCDE682E8554823008F071C1902F80E099 +:1073B000CF2DD0E0C82BD92B10926F00173609F0D3 +:1073C0004BC081E180935700E895DD24CC24C39421 +:1073D0003FC0E090AF01F090B0010091B101109179 +:1073E000B201B6E46B16D9F4ED2DF0E0EE29FF29D9 +:1073F000E4918E2FEADEDD2081F082E090E0A0E0D3 +:10740000B0E0E80EF91E0A1F1B1FE092AF01F092D8 +:10741000B0010093B1011093B201DC2418C0D8016F +:10742000C701B695A7959795879575D5CEDE82E06D +:1074300090E0A0E0B0E0E80EF91E0A1F1B1FE092EA +:10744000AF01F092B0010093B1011093B201219706 +:10745000209709F0BECF7DC08090AF019090B00121 +:10746000A090B101B090B20196E4691609F05DC038 +:1074700083E0F40180935700E89507B600FCFDCF48 +:1074800054C0F6E46F1661F5772031F1E090AF015A +:10749000F090B0010091B1011091B2017EDED82EC2 +:1074A000CC24852D90E08C299D29F7010C01409278 +:1074B0005700E895112482E090E0A0E0B0E0E80EEB +:1074C000F91E0A1F1B1FE092AF01F092B00100935A +:1074D000B1011093B20102C060DE582E742423C0A3 +:1074E000E090AF01F090B0010091B1011091B201B4 +:1074F00016950795F794E79450DE682FC70113D5CA +:107500008091AF019091B001A091B101B091B20111 +:107510000296A11DB11D8093AF019093B001A0937D +:10752000B101B093B201219704C0552477244424BB +:107530004394209709F0A5CF96E4691641F485E0BD +:10754000F40180935700E89507B600FCFDCF8DE06D +:107550003CDE82E080936F009CC0833471F4009124 +:10756000AF011091B00119DE90E021E0F8010C01AB +:1075700020935700E89511247CCE833619F5E090CE +:10758000AF01F090B0010091B1011091B20105DEA0 +:10759000F701E16090E021E00C0120935700E895AD +:1075A000112482E090E0A0E0B0E0E80EF91E0A1F8E +:1075B0001B1FE092AF01F092B0010093B101109354 +:1075C000B20157CE8D3661F4E091AF01F091B00178 +:1075D00085E080935700E89507B600FCFDCF49CEC3 +:1075E000823551F4E091AF01F091B0010591149111 +:1075F000812FEBDD802F4CC0843421F5E090AF016A +:10760000F090B0010091B1011091B201169507956B +:10761000F794E794C2DD682FC70185D48091AF014C +:107620009091B001A091B101B091B2010296A11D5B +:10763000B11D8093AF019093B001A093B101B093BD +:10764000B20117CE843609F5E090AF01F090B00199 +:107650000091B1011091B201D801C701B695A7956B +:107660009795879558D4B1DD82E090E0A0E0B0E036 +:10767000E80EF91E0A1F1B1FE092AF01F092B00145 +:107680000093B1011093B20104C08B3111F08FE36C +:107690009CDD83E08093E9009091E8008091E80010 +:1076A0008E778093E80095FF04C010C08EB38823C6 +:1076B000C9F08091E80080FFF9CF8091E8008E77D3 +:1076C0008093E80003C08EB3882361F08091E800C6 +:1076D00080FFF9CF84E08093E9008091E8008B7708 +:1076E0008093E800DF91CF911F910F91FF90EF9071 +:1076F000DF90CF90BF90AF909F908F907F906F90D2 +:107700005F904F9008959091B701892F8F778132C4 +:1077100049F58091B8018032A1F0813219F5913A92 +:1077200009F58091E800877F8093E8008CE091E084 +:1077300067E070E027D28091E8008B778093E800C3 +:107740000895913279F48091E800877F8093E80072 +:107750008CE091E067E070E079D28091E8008E776C +:107760008093E800089582E061EC42E0D1D083E0AC +:1077700061E842E1CDD084E060E842E1C9C01F93F6 +:10778000209100081092000844B714BE88E10FB69B +:10779000F89480936000109260000FBE80E8E0E0F3 +:1077A000F0E00FB6F89480936100E09361000FBEA3 +:1077B00031E035BF92E095BF3F9A209A559A809369 +:1077C00061001092610047985D9A289A1092890092 +:1077D0008AEF8093880090936F0083E0809381000C +:1077E000859194918F5F9F4F11F03093AE01942F4C +:1077F00041FF19C0809109012817A9F08093000862 +:10780000789480911301882339F08091AC01909194 +:10781000AD018F5E9240C8F310920008F89481E0A9 +:10782000809313010CC090FF04C08091AE018823A7 +:1078300051F493FF09C080910901281729F0809124 +:10784000AE01882309F04EDCD4D078941092AB01BD +:107850001092AA011EEF20C0D7DC4BD38091AA0161 +:107860009091AB0181549F4110F0109213018091CF +:10787000B3019091B40101969093B4018093B30148 +:10788000292F97FF03C0512F591B252F220F28178F +:1078900010F4479801C0479A809113018823E1F6BC +:1078A0008091E00081608093E0001CDC80E090E04B +:1078B0001F910895FA01923049F0933061F09130B0 +:1078C000F9F484E191E022E130E01EC086E291E02B +:1078D0002EE330E019C0882329F484E691E024E007 +:1078E00030E012C0813029F488E691E022E230E0F5 +:1078F0000BC0823029F48CE891E028E130E004C02C +:1079000080E090E020E030E091838083C901089519 +:107910008093E9008091EB0081608093EB001092EE +:10792000ED006093EC004093ED008091EE00881F25 +:107930008827881F08958091B70188238CF403C09D +:107940008EB38823B1F08091E80082FFF9CF809157 +:10795000E8008B778093E80008958EB3882349F080 +:107960008091E80080FFF9CF8091E8008E778093C6 +:10797000E8000895EF92FF920F931F9345D04CD0EB +:1079800008ED10E0F80180818F7780838081806826 +:10799000808380818F7D808319BC1EBA1092B501CF +:1079A00080EEE82EF12CF70180818B7F8083F80137 +:1079B00080818160808380E060E042E0A9DFE1EEC9 +:1079C000F0E080818E7F8083E2EEF0E08081816054 +:1079D0008083808188608083F70180818E7F8083AF +:1079E000F8018081806180831F910F91FF90EF905B +:1079F0000895E7EDF0E08081816080838AE482BFB2 +:107A000081E08093B601B6CFE8EDF0E080818E7F13 +:107A100080831092E20008951092DA001092E10043 +:107A200008951F920F920FB60F9211242F933F9338 +:107A30004F935F936F937F938F939F93AF93BF9376 +:107A4000EF93FF938091DA0080FF1BC08091D800F4 +:107A500080FF17C08091DA008E7F8093DA008091DA +:107A6000D90080FF0BC080E189BD82E189BD09B4E6 +:107A700000FEFDCF81E08EBB3BD203C019BC1EBA15 +:107A800037D28091E10080FF17C08091E20080FF33 +:107A900013C08091E2008E7F8093E2008091E2002B +:107AA00080618093E2008091D80080628093D8004A +:107AB00019BC85E08EBB1CD28091E10084FF2CC0F4 +:107AC0008091E20084FF28C080E189BD82E189BD08 +:107AD00009B400FEFDCF8091D8008F7D8093D8003F +:107AE0008091E1008F7E8093E1008091E2008F7EA3 +:107AF0008093E2008091E20081608093E2008091B7 +:107B0000B501882331F48091E30087FD02C081E054 +:107B100001C084E08EBBECD18091E10083FF21C0E5 +:107B20008091E20083FF1DC08091E100877F8093F8 +:107B3000E10082E08EBB1092B5018091E1008E7F62 +:107B40008093E1008091E2008E7F8093E20080913B +:107B5000E20080618093E20080E060E042E0D8DEF5 +:107B6000C7D1FF91EF91BF91AF919F918F917F917D +:107B70006F915F914F913F912F910F900FBE0F909A +:107B80001F9018959C014091BD015091BE01461770 +:107B9000570718F4F90190E044C06115710511F020 +:107BA000AB01F8CF8091E8008E778093E80040E049 +:107BB00050E0F0CF8EB3882309F444C0853009F437 +:107BC00043C08091E80083FF02C081E00895809166 +:107BD000E80082FD31C08091E80080FF22C08091E2 +:107BE000F3009091F200782F60E0292F30E0262BEF +:107BF000372B07C081918093F100415050402F5F97 +:107C00003F4F4115510519F02830310598F390E0A8 +:107C10002830310509F491E08091E8008E77809357 +:107C2000E8004115510531F6992321F605C08EB3C0 +:107C3000882341F0853041F08091E80082FFF7CF42 +:107C400080E0089582E0089583E008959C01611525 +:107C5000710529F48091E8008B778093E800F901A1 +:107C600026C08EB3882391F1853091F18091E80090 +:107C700083FF02C081E008958091E80082FFF1CF88 +:107C800006C08091F10081936150704059F02091BD +:107C9000F3008091F200322F20E090E0822B932BB2 +:107CA000892B79F78091E8008B778093E800611544 +:107CB0007105B9F605C08EB3882341F0853041F0D7 +:107CC0008091E80080FFF7CF80E0089582E008957A +:107CD00083E008950F931F93DF93CF9300D0CDB728 +:107CE000DEB7E7EBF1E08091F100819381E0EF3BBB +:107CF000F807C9F708DD8091E80083FFE4C08091B0 +:107D0000B7019091B801953009F46DC0963040F4F8 +:107D1000913081F1913070F0933009F0D4C02AC0D5 +:107D2000983009F4A3C0993009F4B2C0963009F034 +:107D3000CAC07CC0803809F4C6C0823809F0C3C00C +:107D40008091BB0187708093E9008091EB001092D5 +:107D5000E9002091E800277F2093E80090E025E0EB +:107D6000969587952A95E1F781708093F10010929E +:107D7000F10087C0882319F0823009F0A4C08F7108 +:107D8000823009F0A0C08091B901882331F520919B +:107D9000BB01277009F497C02093E9008091EB00A4 +:107DA00080FF1BC0933021F48091EB00806213C0F0 +:107DB0008091EB0080618093EB0081E090E002C055 +:107DC000880F991F2A95E2F78093EA001092EA0043 +:107DD0008091EB0088608093EB001092E900809125 +:107DE000E800877F51C0882309F06DC01091B90168 +:107DF0001F770FB7F8948091E800877F8093E800A1 +:107E00009ADD8091E80080FFFCCF8091E3008078CC +:107E1000812B8093E30080688093E300112311F4A9 +:107E200082E001C083E08EBB0FBF4DC0805882301E +:107E300008F049C08091B9019091BA016091BB01ED +:107E4000AE014F5F5F4F36DDBC01009709F43BC0C8 +:107E50008091E800877F8093E80089819A8192DE93 +:107E60008091E8008B778093E8002DC0803859F529 +:107E70008091E800877F8093E8008091B50180932E +:107E8000F1008091E8008E778093E80054DD1BC0FC +:107E90008823C9F49091B9019230A8F48091E80048 +:107EA000877F8093E8009093B50145DD8091B5010F +:107EB000882331F48091E30087FD02C081E001C096 +:107EC00084E08EBB50DC8091E80083FF0AC0809183 +:107ED000EB0080628093EB008091E800877F8093C5 +:107EE000E8000F900F90CF91DF911F910F910895AF +:107EF00008951F938EB3882361F01091E9001092CA +:107F0000E9008091E80083FF01C0E4DE1770109360 +:107F1000E9001F910895F999FECF92BD81BDF89AAD +:107F2000992780B50895262FF999FECF1FBA92BDE3 +:107F300081BD20BD0FB6F894FA9AF99A0FBE01964A +:067F40000895F894FFCF44 +:107F46004341544552494E41007700080000000065 +:107F5600000008011201100102000008412341003F +:107F660001000201000109023E00020100803209FF +:107F7600040000010202010005240010010424028D +:107F8600040524060001070582030800FF09040111 +:107F960000020A000000070504021000010705831D +:107FA6000210000104030904220341007200640068 +:107FB600750069006E006F002000590075006E00A4 +:107FC60020002000200020002000000018034100AF +:107FD60072006400750069006E006F0020004C009E +:067FE6004C004300000006 +:040000030000700089 +:00000001FF diff --git a/external/arduino/avr/bootloaders/caterina/Caterina-Yun.hex b/external/arduino/avr/bootloaders/caterina/Caterina-Yun.hex new file mode 100644 index 000000000..1d76eb019 --- /dev/null +++ b/external/arduino/avr/bootloaders/caterina/Caterina-Yun.hex @@ -0,0 +1,1025 @@ +:200000000C9475010C949D010C949D010C949D010C949D010C949D010C949D010C949D0118 +:200020000C949D010C949D010C940C050C9493050C949D010C949D010C949D010C949D0163 +:200040000C949D010C949D010C949D010C949D010C949D010C949D010C949D010C94BC0191 +:200060000C949D010C949D010C949D010C949D010C949D010C949D010C949D010C949D0190 +:200080000C949D010C949D010C949D010C949D010C949D010C949D010C949D010C949D0170 +:2000A0000C949D010C949D010C949D0100000000240027002A002D0030000000000025008F +:2000C00028002B002E003100000000002300260029002C002F00040404040403040502027D +:2000E0000202040302020202060606060606040402020204040802011040804010204080A8 +:200100004080080204018040201002011080102040400000000200080E0000030401000BB2 +:2001200000000000000000000000000000000000070605040100080A0B0C0D090403090455 +:200140002203410072006400750069006E006F002000590075006E002000200020002000CC +:2001600020001803410072006400750069006E006F0020004C004C00430012010002000062 +:2001800000404123418000010102000112010002020000404123418000010102000100C1B3 +:2001A0008081C1080B000202020100090400000102020000052400100105240101010424C3 +:2001C000020605240600010705810310004009040100020A00000007050202400000070591 +:2001E000830240000005010902A1010901A100850105091901290315002501950375018138 +:200200000295017505810305010930093109381581257F750895038106C0C005010906A182 +:20022000018502050719E029E7150025017501950881029501750881039506750815002567 +:20024000650507190029658100C009040200010300000009210101000122650007058403EB +:2002600040000100000000000000002A2B28000000000000000000000000000000000000C0 +:200280000000002C9EB4A0A1A2A434A6A7A5AE362D3738271E1F20212223242526B333B6BE +:2002A0002EB7B89F8485868788898A8B8C8D8E8F909192939495969798999A9B9C9D2F31F5 +:2002C00030A3AD350405060708090A0B0C0D0E0F101112131415161718191A1B1C1DAFB15C +:2002E000B0B50000480426072B0811241FBECFEFDAE0DEBFCDBF11E0A0E0B1E0EEECF2E18B +:2003000002C005900D92AC32B107D9F711E0ACE2B1E001C01D92AD39B107E1F712E0CAEEE1 +:20032000D2E004C02297FE010E946109C43ED107C9F70E9482030C9465090C940000809103 +:20034000000161E00E944F0368EE73E080E090E00E945A028091000160E00E944F0368EE54 +:2003600073E080E090E00E945A0208958091000161E00E94C20208951F920F920FB60F92B1 +:2003800011242F933F938F939F93AF93BF938091300190913101A0913201B091330130917D +:2003A00034010196A11DB11D232F2D5F2D3720F02D570196A11DB11D2093340180933001C0 +:2003C00090933101A0933201B093330180912C0190912D01A0912E01B0912F010196A11D38 +:2003E000B11D80932C0190932D01A0932E01B0932F01BF91AF919F918F913F912F910F90BA +:200400000FBE0F901F901895789484B5826084BD84B5816084BD85B5826085BD85B58160D8 +:2004200085BDEEE6F0E0808181608083E1E8F0E01082808182608083808181608083E0E833 +:20044000F0E0808181608083E1E9F0E0808182608083808181608083E0E9F0E08081816007 +:200460008083E1ECF0E0808184608083808182608083808181608083E3ECF0E080818160A8 +:200480008083E0ECF0E0808182608083E2ECF0E0808181608083EAE7F0E0808184608083CB +:2004A0008081826080838081816080838081806880830895EF92FF920F931F93CF93DF93AE +:2004C0007B018C013FB7F89480912C0190912D01A0912E01B0912F0126B5A89B05C02F3FE2 +:2004E00019F00196A11DB11D3FBFBA2FA92F982F8827820F911DA11DB11D52E0880F991F4F +:20050000AA1FBB1F5A95D1F7EC0130C00E9434093FB7F89480912C0190912D01A0912E0156 +:20052000B0912F0126B5A89B05C02F3F19F00196A11DB11D3FBFBA2FA92F982F8827820F07 +:20054000911DA11DB11D32E0880F991FAA1FBB1F3A95D1F78C1B9D0B885E9340B8F2089478 +:20056000E108F10801091109C851DC4FE114F1040105110559F6DF91CF911F910F91FF902D +:20058000EF900895CF93DF93482F50E0CA018C509F4FFC0134914A525F4FFA018491882368 +:2005A00069F190E0880F991FFC01E455FF4FA591B491FC01E654FF4FC591D491662351F415 +:2005C0002FB7F8948C91932F909589238C93888189230BC0623061F42FB7F8948C91932F22 +:2005E000909589238C938881832B88832FBF06C09FB7F8948C91832B8C939FBFDF91CF919B +:200600000895883071F1893068F4823031F1833020F4813009F042C01DC0833089F084300A +:20062000E9F512C08B3059F18C3028F48930E9F08A30A1F51EC08C3031F18E3079F529C07A +:20064000809180008F7703C0809180008F7D80938000089584B58F7702C084B58F7D84BDEC +:200660000895809190008F7707C0809190008F7D03C080919000877F809390000895809107 +:20068000C0008F7703C08091C0008F7D8093C00008958091C200877F8093C2000895FF92A8 +:2006A0000F931F93F62E482F50E0CA018E5E9E4FFC012491CA018C509F4FFC0114914A52F2 +:2006C0005F4FFA0104910023C9F0222319F0822F0E940103E02FF0E0EE0FFF1FE654FF4FD9 +:2006E000A591B4919FB7F894FF2021F48C911095812302C08C91812B8C939FBF1F910F91AB +:20070000FF900895CF93DF930E9404028DE391E00E9449040E94B601C0E0D0E00E949F0176 +:200720002097E1F30E940000F9CF282F809137018823C1F057FF1AC015C0289890933601A9 +:200740008091F1008193E217F307B9F74115510539F08091F200882319F48BE68093E800E4 +:20076000AFBF02C04FEF5FEFCA010895AFB7F89427702093E9008091F200282F30E024178B +:2007800035070CF4A901FB019B01240F311D94E6DACFDF93CF930F92CDB7DEB7BE016F5F1C +:2007A0007F4F41E050E00E949503019719F02FEF3FEF03C08981282F30E0C9010F90CF91F6 +:2007C000DF910895FF920F931F93F82E142F052F40913A0150913B01212F302FC901DC010B +:2007E000FB016EEF29C0F7FE02C0949101C09081209138013091390124173507ACF48091FC +:20080000E8008570E1F38091E80082FF03C02FEF3FEF17C09093F100C90101968F73907050 +:20082000892B11F46093E8002F5F3F4F3093390120933801119731961097A9F6812F902FFB +:200840009C01C9011F910F91FF9008959C018091E80082FFFCCFF901260F311D03C0809182 +:20086000F1008193E217F307D1F7289884E6809336018BEF8093E800CB0108958093E9006A +:200880008091F200882319F08AE38093E800089508951092370181E08093D70080EA80935D +:2008A000D80082E189BD09B400FEFDCF61E070E080E090E00E945A0280E98093D8008CE011 +:2008C0008093E2001092E000559A209A08955F926F927F928F929F92AF92BF92CF92DF92A2 +:2008E000EF92FF920F931F93CF93DF93E82E842E752E80913701882371F18B01242F352FBA +:20090000C901EC017AEFF72E67E0962E9E2050E4552E8E2D90E040E2A42EB12CA822B92271 +:200920003AE3632E20E4C22ED12CC822D92258C09FB7F8949092E9008091E80085FD02C0F1 +:2009400020E004C08091F200252D281B9FBF222361F4FA9419F42FEF3FEF4DC061E070E0BE +:2009600080E090E00E945A023BC0822F90E0C817D9070CF42C2FC21BD1094FB7F894909208 +:20098000E900A114B10421F406C01092F10021502223D9F719C0E7FC03C0F801922F10C007 +:2009A000C801322F06C0FC010196E491E093F10031503323C1F706C081918093F10091508E +:2009C0009923D1F7020F111D8091E80085FF05C0209729F4C114D10411F06092E8004FBFAB +:2009E000209709F0A5CF5D9884E680933501282D372DC9019C01C901DF91CF911F910F9121 +:200A0000FF90EF90DF90CF90BF90AF909F908F907F906F905F9008951F920F920FB60F92CC +:200A200011242F933F934F935F936F937F938F939F93AF93BF93EF93FF938091E100109275 +:200A4000E100982F83FF0FC01092E90081E08093EB001092EC0082E38093ED0010923701E6 +:200A600088E08093F00092FF34C083E08093E9008091F200882319F08AE38093E8008FB7C2 +:200A8000F89492E09093E9009091F2008FBF992321F082E891E00E9469078091350188233F +:200AA00051F08091350181508093350180913501882309F45D9A80913601882351F0809169 +:200AC000360181508093360180913601882309F4289AFF91EF91BF91AF919F918F917F9112 +:200AE0006F915F914F913F912F910F900FBE0F901F9018950F931F93DF93CF930F92CDB7E2 +:200B0000DEB719828E010F5F1F4FC8010E948F07C8010E942809898190E00F90CF91DF91B4 +:200B20001F910F9108951F920F920FB60F921124EF92FF921F932F933F934F935F936F93AD +:200B40007F938F939F93AF93BF93EF93FF93DF93CF93CDB7DEB76197DEBFCDBF1092E900EE +:200B60008091E80083FF0FC1FE0131969E01275F3F4F03C08091F1008193E217F307D1F71D +:200B8000289884E68093360182EF8093E800998197FF05C08091E80080FFFCCF03C08EEF7D +:200BA0008093E800292F30E0C90180769070892B09F0C2C08A81882329F41092F1001092DB +:200BC000F100D6C0813009F4D3C0833009F4D0C0853049F48091E80080FFFCCF8B818068E4 +:200BE0008093E300C5C0863009F07CC01C81EF80F8841230C1F51092E90010923901109206 +:200C0000380110923B0110923A010E947A0599E0FE013996DF01292F1D922A95E9F79987D2 +:200C20001A8791E09E8790E8988B9AEF998B2091380130913901275F3F4F3C872B878D87B3 +:200C40001092E9001092390110923801F0923B01E0923A0180E0BF0149E050E00E94E203E7 +:200C60000E947A0585C01092E9001092390110923801F0923B01E0923A01123241F482E284 +:200C800090E00E942009892B09F476C071C0113079F488E0E816F10419F481E080933C013A +:200CA00080913C01882309F06BC0EAE7F1E013C0133009F061C08B81882319F4ECE3F1E0E1 +:200CC0000AC0823019F4E0E4F1E005C0813009F053C0E2E6F1E0449180E8BF0150E00E940C +:200CE000E20346C0873009F447C0883021F481E08093F1003DC08930D9F523703070232B17 +:200D0000D9F5EFE9F1E091E031E026E39093E9003093EB0084918093EC002093ED009F5F65 +:200D20003196953099F78EE78093EA001092EA008B81809337011CC08F8198851092E900AE +:200D4000109239011092380190933B0180933A018D81882329F4CE0101960E949B0706C0E9 +:200D6000823051F4CE0101960E94F107882321F08EEF8093E80007C081E28093EB0003C05D +:200D8000ECE8F1E0A8CF6196DEBFCDBFCF91DF91FF91EF91BF91AF919F918F917F916F9147 +:200DA0005F914F913F912F911F91FF90EF900F900FBE0F901F90189520917E0130917F013D +:200DC0008091800190918101281B390B2F733070C901089520917E0130917F0180918001AB +:200DE000909181012817390719F42FEF3FEF09C0E0918001F0918101E25CFE4F8081282FD7 +:200E000030E0C901089520917E0130917F0180918001909181012817390719F42FEF3FEFDD +:200E200013C0E0918001F0918101E25CFE4F2081809180019091810101968F7390709093CD +:200E400081018093800130E0C9010895109285011092840188EE93E0A0E0B0E08093860123 +:200E600090938701A0938801B093890180E191E0909383018093820108950F931F93DF93CC +:200E8000CF930F92CDB7DEB78C01698380910901882369F083E0BE016F5F7F4F41E050E08F +:200EA0000E9467041816190614F49C0107C081E090E0F8019383828320E030E0C9010F900E +:200EC000CF91DF911F910F91089583E00E943E040895CF93DF9312C082E00E94C9032FEFDD +:200EE0008F3F9207C9F0E0917E01F0917F01E25CFE4F8083D0937F01C0937E01C0917E01CE +:200F0000D0917F012196CF73D0708091800190918101C817D90701F7DF91CF910895FC0161 +:200F200080818E5F808380E863EA71E042E450E00E94E2030895FC0181819081913A59F418 +:200F4000813209F04CC080E062E071E047E050E00E94E20342C0913209F041C0803239F46A +:200F600082E091E067E070E00E94260436C0823209F035C08281809309018091020190914E +:200F80000301A0910401B0910501805B9440A040B04019F58091090180FD12C087E797E7ED +:200FA00090930108809300082BE088E190E00FB6F894A895809360000FBE209360000DC058 +:200FC00088E10FB6F89480936000109260000FBEA895109201081092000881E0089580E025 +:200FE0000895FC0191818081813A31F4913089F080E0933089F40DC0813269F49B3021F4CD +:20100000828180930A0105C09A3029F4828180930B0181E0089580E00895EF92FF920F9332 +:201020001F938C01E62EDC01ED91FC910480F581E02D0995F82ED801ED91FC910680F781C8 +:20104000E02DC8016E2D09958F2D90E01F910F91FF90EF900895109290011092940110924E +:20106000930182E291E090939201809391010895EF92FF920F931F93DF93CF930F92CDB7B0 +:20108000DEB789838B017A0184E0BE016F5F7F4F41E050E00E94670484E4B801A7010E9420 +:2010A00067040F90CF91DF911F910F91FF90EF90089582E048E050E00E9438080895FC0125 +:2010C00016821782108611861286138614823496BF010E9459080895DC01683810F0685884 +:2010E00029C0E62FF0E067FF13C0E058F04081E090E002C0880F991FEA95E2F78095149688 +:201100002C911497282314962C93149760E012C0ED59FD4F6491662319F420E030E01DC0EC +:2011200067FF08C014968C9114978D7F14968C9314976F77FD0190E0662321F086818617FD +:2011400009F416829F5F31969630B1F7CD011496BD010E94590821E030E0C9010895CF93B4 +:20116000DF93DC01683810F0685825C0E62FF0E067FF12C0E058F04081E090E002C0880F2C +:20118000991FEA95E2F714962C911497282B14962C93149760E00FC0ED59FD4F64916623A7 +:2011A000D9F167FF08C014968C911497826014968C9314976F7716968C9116978617A9F1DC +:2011C00017968C911797861781F118968C911897861759F119968C911997861731F11A963C +:2011E0008C911A97861709F11B968C911B978617E1F0ED01E0E0F0E09E2F8E81882321F482 +:20120000EA0FFB1F668306C09F5F31962196E630F10591F7963049F481E090E013969C9350 +:201220008E93129720E030E007C0CD011496BD010E94590821E030E0C901DF91CF9108958C +:2012400080E865EE71E045E650E00E94E2030895FC0180818F5F808380E86AE472E049E1E2 +:2012600050E00E94E20308950895CF92DF92EF92FF920F931F93CF93DF937C016B018A01FD +:20128000C0E0D0E00FC0D6016D916D01D701ED91FC910190F081E02DC7010995C80FD91FC5 +:2012A000015010400115110571F7CE01DF91CF911F910F91FF90EF90DF90CF900895EE0F94 +:2012C000FF1F0590F491E02D0994F894FFCF0D0000E10000000000000101000000003D079E +:2012E0003509DC060307EA0665076907000000000D083509AF086C085F08FFFFFFFFFFFF19 +:20130000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED +:20132000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCD +:20134000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD +:20136000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D +:20138000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6D +:2013A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4D +:2013C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2D +:2013E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D +:20140000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC +:20142000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCC +:20144000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAC +:20146000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8C +:20148000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C +:2014A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C +:2014C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C +:2014E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0C +:20150000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEB +:20152000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCB +:20154000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAB +:20156000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8B +:20158000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6B +:2015A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4B +:2015C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2B +:2015E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B +:20160000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA +:20162000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCA +:20164000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAA +:20166000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8A +:20168000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A +:2016A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4A +:2016C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A +:2016E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A +:20170000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9 +:20172000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9 +:20174000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9 +:20176000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF89 +:20178000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF69 +:2017A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF49 +:2017C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF29 +:2017E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF09 +:20180000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8 +:20182000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC8 +:20184000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA8 +:20186000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF88 +:20188000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF68 +:2018A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF48 +:2018C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF28 +:2018E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF08 +:20190000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7 +:20192000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7 +:20194000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA7 +:20196000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87 +:20198000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF67 +:2019A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF47 +:2019C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF27 +:2019E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07 +:201A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6 +:201A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC6 +:201A4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA6 +:201A6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF86 +:201A8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF66 +:201AA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF46 +:201AC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF26 +:201AE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF06 +:201B0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5 +:201B2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC5 +:201B4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5 +:201B6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF85 +:201B8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF65 +:201BA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF45 +:201BC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF25 +:201BE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05 +:201C0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4 +:201C2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4 +:201C4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA4 +:201C6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF84 +:201C8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF64 +:201CA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF44 +:201CC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF24 +:201CE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04 +:201D0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3 +:201D2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC3 +:201D4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA3 +:201D6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF83 +:201D8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF63 +:201DA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF43 +:201DC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF23 +:201DE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03 +:201E0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2 +:201E2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC2 +:201E4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA2 +:201E6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF82 +:201E8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF62 +:201EA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF42 +:201EC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF22 +:201EE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02 +:201F0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 +:201F2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC1 +:201F4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA1 +:201F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF81 +:201F8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF61 +:201FA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF41 +:201FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF21 +:201FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01 +:20200000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 +:20202000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 +:20204000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0 +:20206000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 +:20208000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60 +:2020A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40 +:2020C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20 +:2020E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +:20210000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF +:20212000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF +:20214000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F +:20216000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F +:20218000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F +:2021A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F +:2021C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F +:2021E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +:20220000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDE +:20222000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBE +:20224000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9E +:20226000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7E +:20228000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E +:2022A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E +:2022C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E +:2022E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE +:20230000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDD +:20232000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBD +:20234000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9D +:20236000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7D +:20238000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D +:2023A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D +:2023C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D +:2023E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD +:20240000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC +:20242000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBC +:20244000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9C +:20246000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C +:20248000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5C +:2024A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3C +:2024C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C +:2024E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC +:20250000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB +:20252000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBB +:20254000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9B +:20256000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7B +:20258000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B +:2025A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B +:2025C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1B +:2025E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB +:20260000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDA +:20262000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBA +:20264000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A +:20266000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7A +:20268000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5A +:2026A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3A +:2026C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1A +:2026E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA +:20270000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9 +:20272000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB9 +:20274000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99 +:20276000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF79 +:20278000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF59 +:2027A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF39 +:2027C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF19 +:2027E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9 +:20280000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8 +:20282000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB8 +:20284000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF98 +:20286000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF78 +:20288000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF58 +:2028A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF38 +:2028C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF18 +:2028E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8 +:20290000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7 +:20292000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB7 +:20294000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF97 +:20296000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77 +:20298000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF57 +:2029A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF37 +:2029C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF17 +:2029E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7 +:202A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6 +:202A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB6 +:202A4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF96 +:202A6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF76 +:202A8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF56 +:202AA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF36 +:202AC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF16 +:202AE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6 +:202B0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD5 +:202B2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5 +:202B4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF95 +:202B6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF75 +:202B8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF55 +:202BA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF35 +:202BC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF15 +:202BE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5 +:202C0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4 +:202C2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB4 +:202C4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF94 +:202C6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74 +:202C8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF54 +:202CA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF34 +:202CC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF14 +:202CE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4 +:202D0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3 +:202D2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB3 +:202D4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF93 +:202D6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF73 +:202D8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF53 +:202DA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF33 +:202DC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF13 +:202DE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3 +:202E0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD2 +:202E2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB2 +:202E4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF92 +:202E6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72 +:202E8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF52 +:202EA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF32 +:202EC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF12 +:202EE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2 +:202F0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD1 +:202F2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB1 +:202F4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF91 +:202F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF71 +:202F8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF51 +:202FA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF31 +:202FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF11 +:202FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1 +:20300000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0 +:20302000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0 +:20304000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90 +:20306000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70 +:20308000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50 +:2030A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30 +:2030C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF10 +:2030E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 +:20310000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF +:20312000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF +:20314000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F +:20316000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F +:20318000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F +:2031A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F +:2031C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F +:2031E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF +:20320000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE +:20322000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAE +:20324000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E +:20326000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E +:20328000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4E +:2032A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E +:2032C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E +:2032E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEE +:20330000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCD +:20332000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD +:20334000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D +:20336000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6D +:20338000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4D +:2033A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2D +:2033C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D +:2033E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED +:20340000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCC +:20342000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAC +:20344000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8C +:20346000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C +:20348000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C +:2034A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C +:2034C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0C +:2034E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC +:20350000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCB +:20352000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAB +:20354000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8B +:20356000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6B +:20358000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4B +:2035A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2B +:2035C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B +:2035E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEB +:20360000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCA +:20362000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAA +:20364000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8A +:20366000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A +:20368000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4A +:2036A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A +:2036C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A +:2036E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA +:20370000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9 +:20372000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9 +:20374000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF89 +:20376000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF69 +:20378000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF49 +:2037A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF29 +:2037C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF09 +:2037E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9 +:20380000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC8 +:20382000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA8 +:20384000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF88 +:20386000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF68 +:20388000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF48 +:2038A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF28 +:2038C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF08 +:2038E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8 +:20390000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7 +:20392000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA7 +:20394000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87 +:20396000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF67 +:20398000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF47 +:2039A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF27 +:2039C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07 +:2039E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7 +:203A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC6 +:203A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA6 +:203A4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF86 +:203A6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF66 +:203A8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF46 +:203AA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF26 +:203AC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF06 +:203AE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6 +:203B0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC5 +:203B2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5 +:203B4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF85 +:203B6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF65 +:203B8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF45 +:203BA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF25 +:203BC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05 +:203BE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5 +:203C0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4 +:203C2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA4 +:203C4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF84 +:203C6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF64 +:203C8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF44 +:203CA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF24 +:203CC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04 +:203CE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4 +:203D0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC3 +:203D2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA3 +:203D4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF83 +:203D6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF63 +:203D8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF43 +:203DA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF23 +:203DC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03 +:203DE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3 +:203E0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC2 +:203E2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA2 +:203E4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF82 +:203E6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF62 +:203E8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF42 +:203EA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF22 +:203EC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02 +:203EE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2 +:203F0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC1 +:203F2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA1 +:203F4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF81 +:203F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF61 +:203F8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF41 +:203FA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF21 +:203FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01 +:203FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 +:20400000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 +:20402000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0 +:20404000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 +:20406000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60 +:20408000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40 +:2040A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20 +:2040C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +:2040E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 +:20410000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF +:20412000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F +:20414000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F +:20416000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F +:20418000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F +:2041A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F +:2041C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +:2041E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF +:20420000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBE +:20422000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9E +:20424000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7E +:20426000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E +:20428000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E +:2042A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E +:2042C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE +:2042E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDE +:20430000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBD +:20432000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9D +:20434000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7D +:20436000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D +:20438000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D +:2043A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D +:2043C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD +:2043E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDD +:20440000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBC +:20442000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9C +:20444000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C +:20446000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5C +:20448000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3C +:2044A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C +:2044C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC +:2044E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC +:20450000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBB +:20452000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9B +:20454000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7B +:20456000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B +:20458000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B +:2045A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1B +:2045C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB +:2045E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB +:20460000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBA +:20462000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A +:20464000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7A +:20466000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5A +:20468000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3A +:2046A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1A +:2046C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA +:2046E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDA +:20470000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB9 +:20472000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99 +:20474000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF79 +:20476000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF59 +:20478000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF39 +:2047A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF19 +:2047C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9 +:2047E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9 +:20480000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB8 +:20482000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF98 +:20484000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF78 +:20486000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF58 +:20488000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF38 +:2048A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF18 +:2048C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8 +:2048E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8 +:20490000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB7 +:20492000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF97 +:20494000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77 +:20496000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF57 +:20498000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF37 +:2049A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF17 +:2049C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7 +:2049E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7 +:204A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB6 +:204A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF96 +:204A4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF76 +:204A6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF56 +:204A8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF36 +:204AA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF16 +:204AC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6 +:204AE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6 +:204B0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5 +:204B2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF95 +:204B4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF75 +:204B6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF55 +:204B8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF35 +:204BA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF15 +:204BC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5 +:204BE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD5 +:204C0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB4 +:204C2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF94 +:204C4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74 +:204C6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF54 +:204C8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF34 +:204CA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF14 +:204CC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4 +:204CE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4 +:204D0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB3 +:204D2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF93 +:204D4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF73 +:204D6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF53 +:204D8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF33 +:204DA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF13 +:204DC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3 +:204DE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3 +:204E0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB2 +:204E2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF92 +:204E4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72 +:204E6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF52 +:204E8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF32 +:204EA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF12 +:204EC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2 +:204EE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD2 +:204F0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB1 +:204F2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF91 +:204F4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF71 +:204F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF51 +:204F8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF31 +:204FA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF11 +:204FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1 +:204FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD1 +:20500000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0 +:20502000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90 +:20504000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70 +:20506000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50 +:20508000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30 +:2050A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF10 +:2050C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 +:2050E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0 +:20510000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF +:20512000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F +:20514000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F +:20516000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F +:20518000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F +:2051A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F +:2051C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF +:2051E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF +:20520000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAE +:20522000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E +:20524000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E +:20526000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4E +:20528000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E +:2052A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E +:2052C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEE +:2052E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE +:20530000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD +:20532000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D +:20534000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6D +:20536000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4D +:20538000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2D +:2053A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D +:2053C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED +:2053E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCD +:20540000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAC +:20542000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8C +:20544000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C +:20546000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C +:20548000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C +:2054A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0C +:2054C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC +:2054E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCC +:20550000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAB +:20552000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8B +:20554000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6B +:20556000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4B +:20558000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2B +:2055A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B +:2055C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEB +:2055E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCB +:20560000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAA +:20562000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8A +:20564000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A +:20566000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4A +:20568000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A +:2056A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A +:2056C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA +:2056E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCA +:20570000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9 +:20572000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF89 +:20574000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF69 +:20576000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF49 +:20578000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF29 +:2057A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF09 +:2057C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9 +:2057E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9 +:20580000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA8 +:20582000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF88 +:20584000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF68 +:20586000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF48 +:20588000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF28 +:2058A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF08 +:2058C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8 +:2058E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC8 +:20590000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA7 +:20592000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87 +:20594000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF67 +:20596000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF47 +:20598000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF27 +:2059A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07 +:2059C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7 +:2059E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7 +:205A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA6 +:205A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF86 +:205A4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF66 +:205A6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF46 +:205A8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF26 +:205AA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF06 +:205AC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6 +:205AE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC6 +:205B0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5 +:205B2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF85 +:205B4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF65 +:205B6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF45 +:205B8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF25 +:205BA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05 +:205BC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5 +:205BE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC5 +:205C0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA4 +:205C2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF84 +:205C4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF64 +:205C6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF44 +:205C8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF24 +:205CA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04 +:205CC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4 +:205CE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4 +:205D0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA3 +:205D2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF83 +:205D4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF63 +:205D6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF43 +:205D8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF23 +:205DA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03 +:205DC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3 +:205DE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC3 +:205E0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA2 +:205E2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF82 +:205E4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF62 +:205E6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF42 +:205E8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF22 +:205EA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02 +:205EC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2 +:205EE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC2 +:205F0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA1 +:205F2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF81 +:205F4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF61 +:205F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF41 +:205F8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF21 +:205FA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01 +:205FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 +:205FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC1 +:20600000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0 +:20602000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 +:20604000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60 +:20606000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40 +:20608000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20 +:2060A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +:2060C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 +:2060E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 +:20610000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F +:20612000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F +:20614000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F +:20616000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F +:20618000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F +:2061A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +:2061C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF +:2061E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF +:20620000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9E +:20622000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7E +:20624000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E +:20626000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E +:20628000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E +:2062A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE +:2062C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDE +:2062E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBE +:20630000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9D +:20632000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7D +:20634000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D +:20636000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D +:20638000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D +:2063A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD +:2063C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDD +:2063E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBD +:20640000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9C +:20642000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C +:20644000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5C +:20646000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3C +:20648000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C +:2064A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC +:2064C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC +:2064E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBC +:20650000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9B +:20652000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7B +:20654000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B +:20656000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B +:20658000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1B +:2065A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB +:2065C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB +:2065E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBB +:20660000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A +:20662000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7A +:20664000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5A +:20666000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3A +:20668000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1A +:2066A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA +:2066C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDA +:2066E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBA +:20670000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99 +:20672000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF79 +:20674000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF59 +:20676000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF39 +:20678000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF19 +:2067A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9 +:2067C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9 +:2067E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB9 +:20680000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF98 +:20682000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF78 +:20684000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF58 +:20686000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF38 +:20688000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF18 +:2068A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8 +:2068C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8 +:2068E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB8 +:20690000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF97 +:20692000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77 +:20694000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF57 +:20696000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF37 +:20698000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF17 +:2069A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7 +:2069C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7 +:2069E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB7 +:206A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF96 +:206A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF76 +:206A4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF56 +:206A6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF36 +:206A8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF16 +:206AA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6 +:206AC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6 +:206AE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB6 +:206B0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF95 +:206B2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF75 +:206B4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF55 +:206B6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF35 +:206B8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF15 +:206BA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5 +:206BC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD5 +:206BE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5 +:206C0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF94 +:206C2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74 +:206C4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF54 +:206C6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF34 +:206C8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF14 +:206CA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4 +:206CC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4 +:206CE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB4 +:206D0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF93 +:206D2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF73 +:206D4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF53 +:206D6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF33 +:206D8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF13 +:206DA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3 +:206DC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3 +:206DE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB3 +:206E0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF92 +:206E2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72 +:206E4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF52 +:206E6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF32 +:206E8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF12 +:206EA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2 +:206EC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD2 +:206EE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB2 +:206F0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF91 +:206F2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF71 +:206F4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF51 +:206F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF31 +:206F8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF11 +:206FA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1 +:206FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD1 +:206FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB1 +:2070000055C000006EC000006CC000006AC0000068C0000066C0000064C0000062C0000043 +:2070200060C000005EC00000FCC400005AC0000058C0000056C0000054C0000052C00000E4 +:2070400050C000005DC000004CC000004AC0000048C0000046C0000044C0000042C00000D9 +:2070600040C000003EC000003CC000003AC0000038C0000036C0000034C0000032C0000048 +:2070800030C000002EC000002CC000002AC0000028C0000026C0000024C0000022C00000A8 +:2070A00020C000001EC000001CC0000011241FBECFEFDAE0DEBFCDBF11E0A0E0B1E0E6E4B7 +:2070C000FFE702C005900D92A63AB107D9F711E0A6EAB1E001C01D92AF3BB107E1F74FD34E +:2070E00030C78ECFF89410926F001092810081E085BF15BE47985D9A289A0C94000008952F +:207100001F920F920FB60F9211242F938F939F93EF93FF9310928500109284008091A60153 +:207120009091A701009741F001979093A7018093A601892B09F45D9A8091A8019091A90174 +:20714000009741F001979093A9018093A801892B09F4289A8091AC019091AD01019690938C +:20716000AD018093AC01E0E0F0E0859194918F5F9F4F49F08091AA019091AB01019690937E +:20718000AB018093AA01FF91EF919F918F912F910F900FBE0F901F90189584E08093E9009E +:2071A0000DC08091E8008B778093E80003C08EB3882351F08091E80082FFF9CF8091E800E1 +:2071C00085FFEFCF8091F1000895982F83E08093E9008091E80085FD0DC08091E8008E7762 +:2071E0008093E80003C08EB3882369F08091E80080FFF9CF9093F1005D9884E690E0909346 +:20720000A7018093A60108954F925F926F927F928F929F92AF92BF92CF92DF92EF92FF92C3 +:207220000F931F93CF93DF9384E08093E9008091E80082FF57C2289884E690E09093A901CC +:207240008093A801AADF182F853481F48CE49DE19093AB018093AA0107B600FCFDCFF999E2 +:20726000FECF81E180935700E89503C0843519F494DF8DE00DC28C34E1F38035D1F38437F8 +:2072800021F484E4A2DF80E003C2813611F489E5FFC18134B1F481DF182F7FDF90E0880F7B +:2072A000991FAA2797FDA095BA2F312F330F20E0442737FD4095542F822B932BA42BB52BE0 +:2072C000B8C1803711F483E5E3C1833549F4C0E0D1E089917ADF21E0C730D207D1F7D9C181 +:2072E000863521F481E371DF80E3D2C1833731F487E86BDF85E969DF8EE1CAC18536B9F464 +:20730000E0E0F0E093E085E090935700E89507B600FCFDCF80935700E89507B600FCFDCF1D +:20732000E058FF4FA0E7E030FA0771F7A2CF823739F4E1E0F0E089E0809357008491A8C18E +:20734000863439F4E0E0F0E089E08093570084919FC18E3439F4E3E0F0E089E08093570019 +:20736000849196C1813539F4E2E0F0E089E08093570084918DC1823631F489E526DF80E046 +:2073800024DF80E885C1823419F0873609F0E5C01092AB011092AA0100DF082FFEDEF82E6F +:2073A000FCDE682E8554823008F071C1902F80E0CF2DD0E0C82BD92B10926F00173609F08F +:2073C0004BC081E180935700E895DD24CC24C3943FC0E090AF01F090B0010091B1011091DD +:2073E000B201B6E46B16D9F4ED2DF0E0EE29FF29E4918E2FEADEDD2081F082E090E0A0E00F +:20740000B0E0E80EF91E0A1F1B1FE092AF01F092B0010093B1011093B201DC2418C0D801CB +:20742000C701B695A7959795879575D5CEDE82E090E0A0E0B0E0E80EF91E0A1F1B1FE092FB +:20744000AF01F092B0010093B1011093B2012197209709F0BECF7DC08090AF019090B001EB +:20746000A090B101B090B20196E4691609F05DC083E0F40180935700E89507B600FCFDCF64 +:2074800054C0F6E46F1661F5772031F1E090AF01F090B0010091B1011091B2017EDED82E20 +:2074A000CC24852D90E08C299D29F7010C0140925700E895112482E090E0A0E0B0E0E80E87 +:2074C000F91E0A1F1B1FE092AF01F092B0010093B1011093B20102C060DE582E742423C041 +:2074E000E090AF01F090B0010091B1011091B20116950795F794E79450DE682FC70113D5E2 +:207500008091AF019091B001A091B101B091B2010296A11DB11D8093AF019093B001A09313 +:20752000B101B093B201219704C05524772444244394209709F0A5CF96E4691641F485E01D +:20754000F40180935700E89507B600FCFDCF8DE03CDE82E080936F009CC0833471F4009156 +:20756000AF011091B00119DE90E021E0F8010C0120935700E89511247CCE833619F5E0905E +:20758000AF01F090B0010091B1011091B20105DEF701E16090E021E00C0120935700E89552 +:2075A000112482E090E0A0E0B0E0E80EF91E0A1F1B1FE092AF01F092B0010093B101109307 +:2075C000B20157CE8D3661F4E091AF01F091B00185E080935700E89507B600FCFDCF49CE80 +:2075E000823551F4E091AF01F091B00105911491812FEBDD802F4CC0843421F5E090AF01E0 +:20760000F090B0010091B1011091B20116950795F794E794C2DD682FC70185D48091AF013D +:207620009091B001A091B101B091B2010296A11DB11D8093AF019093B001A093B101B093BE +:20764000B20117CE843609F5E090AF01F090B0010091B1011091B201D801C701B695A795CA +:207660009795879558D4B1DD82E090E0A0E0B0E0E80EF91E0A1F1B1FE092AF01F092B00161 +:207680000093B1011093B20104C08B3111F08FE39CDD83E08093E9009091E8008091E80082 +:2076A0008E778093E80095FF04C010C08EB38823C9F08091E80080FFF9CF8091E8008E77BF +:2076C0008093E80003C08EB3882361F08091E80080FFF9CF84E08093E9008091E8008B7714 +:2076E0008093E800DF91CF911F910F91FF90EF90DF90CF90BF90AF909F908F907F906F90A9 +:207700005F904F9008959091B701892F8F77813249F58091B8018032A1F0813219F5913ADD +:2077200009F58091E800877F8093E8008CE091E067E070E027D28091E8008B778093E800EE +:207740000895913279F48091E800877F8093E8008CE091E067E070E079D28091E8008E77A5 +:207760008093E800089582E061EC42E0D1D083E061E842E1CDD084E060E842E1C9C01F9389 +:20778000209100081092000844B714BE88E10FB6F89480936000109260000FBE80E8E0E095 +:2077A000F0E00FB6F89480936100E09361000FBE31E035BF92E095BF3F9A209A559A809333 +:2077C00061001092610047985D9A289A109289008AEF8093880090936F0083E080938100E5 +:2077E000859194918F5F9F4F11F03093AE01942F41FF19C0809109012817A9F08093000815 +:20780000789480911301882339F08091AC019091AD018F5E9240C8F310920008F89481E0C5 +:20782000809313010CC090FF04C08091AE01882351F493FF09C080910901281729F0809173 +:20784000AE01882309F04EDCD4D078941092AB011092AA011EEF20C0D7DC4BD38091AA01E6 +:207860009091AB0181549F4110F0109213018091B3019091B40101969093B4018093B301FF +:20788000292F97FF03C0512F591B252F220F281710F4479801C0479A809113018823E1F653 +:2078A0008091E00081608093E0001CDC80E090E01F910895FA01923049F0933061F0913023 +:2078C000F9F484E191E022E130E01EC086E291E02EE330E019C0882329F484E691E024E07A +:2078E00030E012C0813029F488E691E022E230E00BC0823029F48CE891E028E130E004C089 +:2079000080E090E020E030E091838083C90108958093E9008091EB0081608093EB00109290 +:20792000ED006093EC004093ED008091EE00881F8827881F08958091B70188238CF403C06B +:207940008EB38823B1F08091E80082FFF9CF8091E8008B778093E80008958EB3882349F0A0 +:207960008091E80080FFF9CF8091E8008E778093E8000895EF92FF920F931F9345D04CD09A +:2079800008ED10E0F80180818F77808380818068808380818F7D808319BC1EBA1092B501FE +:2079A00080EEE82EF12CF70180818B7F8083F80180818160808380E060E042E0A9DFE1EE29 +:2079C000F0E080818E7F8083E2EEF0E0808181608083808188608083F70180818E7F80834C +:2079E000F8018081806180831F910F91FF90EF900895E7EDF0E08081816080838AE482BF76 +:207A000081E08093B601B6CFE8EDF0E080818E7F80831092E20008951092DA001092E100E0 +:207A200008951F920F920FB60F9211242F933F934F935F936F937F938F939F93AF93BF9358 +:207A4000EF93FF938091DA0080FF1BC08091D80080FF17C08091DA008E7F8093DA00809198 +:207A6000D90080FF0BC080E189BD82E189BD09B400FEFDCF81E08EBB3BD203C019BC1EBAE5 +:207A800037D28091E10080FF17C08091E20080FF13C08091E2008E7F8093E2008091E20068 +:207AA00080618093E2008091D80080628093D80019BC85E08EBB1CD28091E10084FF2CC068 +:207AC0008091E20084FF28C080E189BD82E189BD09B400FEFDCF8091D8008F7D8093D80091 +:207AE0008091E1008F7E8093E1008091E2008F7E8093E2008091E20081608093E2008091C4 +:207B0000B501882331F48091E30087FD02C081E001C084E08EBBECD18091E10083FF21C0C4 +:207B20008091E20083FF1DC08091E100877F8093E10082E08EBB1092B5018091E1008E7F05 +:207B40008093E1008091E2008E7F8093E2008091E20080618093E20080E060E042E0D8DEFB +:207B6000C7D1FF91EF91BF91AF919F918F917F916F915F914F913F912F910F900FBE0F9002 +:207B80001F9018959C014091BD015091BE014617570718F4F90190E044C06115710511F09B +:207BA000AB01F8CF8091E8008E778093E80040E050E0F0CF8EB3882309F444C0853009F4AB +:207BC00043C08091E80083FF02C081E008958091E80082FD31C08091E80080FF22C0809193 +:207BE000F3009091F200782F60E0292F30E0262B372B07C081918093F100415050402F5FF1 +:207C00003F4F4115510519F02830310598F390E02830310509F491E08091E8008E7780938B +:207C2000E8004115510531F6992321F605C08EB3882341F0853041F08091E80082FFF7CFAE +:207C400080E0089582E0089583E008959C016115710529F48091E8008B778093E800F90192 +:207C600026C08EB3882391F1853091F18091E80083FF02C081E008958091E80082FFF1CF04 +:207C800006C08091F10081936150704059F02091F3008091F200322F20E090E0822B932B7B +:207CA000892B79F78091E8008B778093E80061157105B9F605C08EB3882341F0853041F047 +:207CC0008091E80080FFF7CF80E0089582E0089583E008950F931F93DF93CF9300D0CDB7EE +:207CE000DEB7E7EBF1E08091F100819381E0EF3BF807C9F708DD8091E80083FFE4C08091D7 +:207D0000B7019091B801953009F46DC0963040F4913081F1913070F0933009F0D4C02AC05A +:207D2000983009F4A3C0993009F4B2C0963009F0CAC07CC0803809F4C6C0823809F0C3C0ED +:207D40008091BB0187708093E9008091EB001092E9002091E800277F2093E80090E025E08D +:207D6000969587952A95E1F781708093F1001092F10087C0882319F0823009F0A4C08F7193 +:207D8000823009F0A0C08091B901882331F52091BB01277009F497C02093E9008091EB004C +:207DA00080FF1BC0933021F48091EB00806213C08091EB0080618093EB0081E090E002C072 +:207DC000880F991F2A95E2F78093EA001092EA008091EB0088608093EB001092E9008091B5 +:207DE000E800877F51C0882309F06DC01091B9011F770FB7F8948091E800877F8093E80076 +:207E00009ADD8091E80080FFFCCF8091E3008078812B8093E30080688093E300112311F403 +:207E200082E001C083E08EBB0FBF4DC08058823008F049C08091B9019091BA016091BB01B9 +:207E4000AE014F5F5F4F36DDBC01009709F43BC08091E800877F8093E80089819A8192DE29 +:207E60008091E8008B778093E8002DC0803859F58091E800877F8093E8008091B501809345 +:207E8000F1008091E8008E778093E80054DD1BC08823C9F49091B9019230A8F48091E80052 +:207EA000877F8093E8009093B50145DD8091B501882331F48091E30087FD02C081E001C0D3 +:207EC00084E08EBB50DC8091E80083FF0AC08091EB0080628093EB008091E800877F809396 +:207EE000E8000F900F90CF91DF911F910F91089508951F938EB3882361F01091E9001092E7 +:207F0000E9008091E80083FF01C0E4DE17701093E9001F910895F999FECF92BD81BDF89A9C +:207F2000992780B50895262FF999FECF1FBA92BD81BD20BD0FB6F894FA9AF99A0FBE0196DC +:207F40000895F894FFCF4341544552494E4100770008000000000000080112011001020035 +:207F600000084123410001000201000109023E000201008032090400000102020100052415 +:207F8000001001042402040524060001070582030800FF09040100020A00000007050402AE +:207FA00010000107058302100001040309042203410072006400750069006E006F002000E3 +:207FC000590075006E002000200020002000200000001803410072006400750069006E0047 +:0C7FE0006F0020004C004C00430000002B +:00000001FF diff --git a/external/arduino/avr/bootloaders/caterina/Caterina-YunMini.hex b/external/arduino/avr/bootloaders/caterina/Caterina-YunMini.hex new file mode 100644 index 000000000..7a309052f --- /dev/null +++ b/external/arduino/avr/bootloaders/caterina/Caterina-YunMini.hex @@ -0,0 +1,250 @@ +:107000005FC0000078C0000076C0000074C00000BF +:1070100072C0000070C000006EC000006CC00000B4 +:107020006AC0000068C00000D1C4000064C0000055 +:1070300062C0000060C000005EC000005CC00000D4 +:107040005AC000009CC0000056C0000054C00000A0 +:1070500052C0000050C000004EC000004CC00000F4 +:107060004AC0000048C0000046C0000044C0000004 +:1070700042C0000040C000003EC000003CC0000014 +:107080003AC0000038C0000036C0000034C0000024 +:1070900032C0000030C000002EC000002CC0000034 +:1070A0002AC0000028C0000026C00000553E6E3EE9 +:1070B000173F6E3E173FA83ECA3E173FEA3EFC3ED2 +:1070C00011241FBECFEFDAE0DEBFCDBF11E0A0E09C +:1070D000B1E0E8EBFEE702C005900D92A23BB107DC +:1070E000D9F711E0A2EBB1E001C01D92AB3CB107B2 +:1070F000E1F71BD3DFC684CF84E08093E900809161 +:10710000E80085FD0DC08091E8008B778093E80052 +:107110008091E80082FDF3CF8EB38111F9CF02C0D8 +:107120008091F100089593E09093E9009091E80038 +:1071300095FF0AC08093F1005D9884E690E09093FB +:10714000B9018093B80108959091E8009E779093DB +:10715000E8009091E80090FDEDCF9EB39111F9CF3A +:107160000895F89410926F001092810081E085BF1D +:1071700015BE47985D9A289A0C94000008951F92B6 +:107180000F920FB60F9211242F938F939F93EF932B +:10719000FF9310928500109284008091B801909125 +:1071A000B901009741F001979093B9018093B8011C +:1071B000892B09F45D9A8091B6019091B7010097EF +:1071C00041F001979093B7018093B601892B09F4A0 +:1071D000289A8091B2019091B30101969093B301E6 +:1071E0008093B201E0E0F0E085919491019649F03E +:1071F0008091B4019091B50101969093B50180936F +:10720000B401FF91EF919F918F912F910F900FBE3D +:107210000F901F90189542E061EC82E054D342E158 +:1072200061E883E050D342E160E884E04CC38091A0 +:10723000C301982F9F77913239F59091C401903214 +:1072400091F0913209F5813AF9F48091E800877F55 +:107250008093E80067E070E082E091E068D480917C +:10726000E8008B770FC0813279F48091E800877F46 +:107270008093E80067E070E082E091E0B5D480910F +:10728000E8008E778093E80008956F927F928F9246 +:107290009F92AF92BF92CF92DF92EF92FF920F93A5 +:1072A0001F93CF93DF9384E08093E9008091E800FF +:1072B00082FF2CC2289884E690E09093B7018093D7 +:1072C000B6011ADFC82F853481F48CE49DE19093D8 +:1072D000B5018093B40107B600FCFDCFF999FECF4C +:1072E00081E180935700E89503C0843521F404DFE1 +:1072F0008DE019DFE2C18C34D9F38035C9F38437CE +:1073000021F484E410DF80E0F4CF813611F489E5C4 +:10731000F0CF813491F4F0DEC82FEEDE90E0880FDC +:10732000991F2C2F30E0322F2227330F822B932BE3 +:10733000AA2797FDA095BA2F94C1803711F483E551 +:10734000D8CF833549F4C9EAD1E01C2F195F899160 +:10735000EADE1C13FCCFB1C1863521F481E3E3DE04 +:1073600080E3C7CF833731F487E8DDDE85E9DBDEF4 +:107370008EE1BFCF8536B9F4E0E0F0E083E095E040 +:1073800080935700E89507B600FCFDCF9093570017 +:10739000E89507B600FCFDCFE058FF4FE11520E768 +:1073A000F20771F7A5CF823719F4E1E0F0E00EC0E3 +:1073B000863419F4E0E0F0E009C08E3419F4E3E01B +:1073C000F0E004C0813539F4E2E0F0E089E0809338 +:1073D000570084918ECF823631F489E5A4DE80E0B7 +:1073E000A2DE80E886CF823419F0873609F0D1C05A +:1073F0001092B5011092B4017FDE082F7DDED82FE8 +:107400007BDE182F8BEB810F823010F08FE371CF72 +:107410002D2F30E0302B10926F00C73609F043C09B +:1074200081E180935700E895E90100E0BB24B39423 +:10743000209709F4AAC0C090BB01D090BC01E09095 +:10744000BD01F090BE011634B9F4E02FF0E0EC2954 +:10745000FD29849168DE002369F082E0C80ED11C0A +:10746000E11CF11CC092BB01D092BC01E092BD01B5 +:10747000F092BE010B2515C0D701C601B695A795A0 +:107480009795879501D54FDEE2E0CE0ED11CE11C29 +:10749000F11CC092BB01D092BC01E092BD01F09200 +:1074A000BE012197C5CF8090BB019090BC01A090F8 +:1074B000BD01B090BE01163441F483E0F401809325 +:1074C0005700E89507B600FCFDCFE901712C00E0FC +:1074D00066246394209709F44CC0163431F50023D8 +:1074E00001F1C090BB01D090BC01E090BD01F090D3 +:1074F000BE0102DE272D30E0382BF6010901609233 +:107500005700E8951124F2E0CF0ED11CE11CF11CCC +:10751000C092BB01D092BC01E092BD01F092BE01CD +:1075200002C0EADD782E062522C0E6DD682F8091B4 +:10753000BB019091BC01A091BD01B091BE01B69577 +:10754000A79597958795A8D48091BB019091BC0190 +:10755000A091BD01B091BE010296A11DB11D809305 +:10756000BB019093BC01A093BD01B093BE012197D4 +:10757000B1CF163441F485E0F40180935700E895CB +:1075800007B600FCFDCF8DE0CEDD82E080936F007A +:1075900094C0833471F4C091BB01D091BC01ACDDC7 +:1075A00090E021E0FE010C0120935700E8951124A2 +:1075B0009FCE833601F5C090BB01D090BC01E09016 +:1075C000BD01F090BE0198DDF601E16090E021E0A0 +:1075D0000C0120935700E8951124F2E0CF0ED11C46 +:1075E000E11CF11CC092BB01D092BC01E092BD0134 +:1075F000F092BE017DCE8D3661F4E091BB01F09139 +:10760000BC0185E080935700E89507B600FCFDCFEC +:107610006FCE823551F4E091BB01F091BC01C59170 +:10762000D4918D2F80DD8C2F64CE843419F564DDE8 +:10763000682F8091BB019091BC01A091BD01B091D8 +:10764000BE01B695A7959795879526D48091BB01E5 +:107650009091BC01A091BD01B091BE010296A11D07 +:10766000B11D8093BB019093BC01A093BD01B09369 +:10767000BE013ECE8436F1F4C090BB01D090BC0177 +:10768000E090BD01F090BE01D701C601B695A79567 +:1076900097958795F9D347DD22E0C20ED11CE11CF6 +:1076A000F11CC092BB01D092BC01E092BD01F092EE +:1076B000BE0103C08B3109F0A9CE83E08093E900BD +:1076C0009091E8008091E8008E778093E80095FD26 +:1076D00011C08091E80080FD04C08EB38111F9CF04 +:1076E00015C08091E8008E778093E80003C08EB3C8 +:1076F000882361F08091E80080FFF9CF84E08093D7 +:10770000E9008091E8008B778093E800DF91CF91CA +:107710001F910F91FF90EF90DF90CF90BF90AF90AF +:107720009F908F907F906F900895CF9390910008D5 +:107730001092000884B714BE28E10FB6F894209385 +:107740006000109260000FBE40E820E00FB6F89491 +:1077500040936100209361000FBE21E025BF32E01D +:1077600035BF3F9A209A559A40936100109261006C +:1077700047985D9A289A109289004AEF40938800B2 +:1077800030936F0033E030938100E0E0F0E045910A +:1077900054914F3F5F4F11F02093BA0181FF20C0F9 +:1077A000209100019217E1F02093000878948091D5 +:1077B0000101882339F08091B2019091B30188379B +:1077C0009140C8F31092010110920008F89481E0F2 +:1077D000809301018091BA01882371F0C2DC0CC052 +:1077E00080FF04C02091BA012111F8CF83FF04C0AB +:1077F000809100019813EECFD1D078941092B5010A +:107800001092B401CEEF80910101882301F13DDD9A +:1078100024D38091B4019091B50181349F4110F03F +:10782000109201018091BF019091C0010196909347 +:10783000C0018093BF01292F97FF02C02C2F291B65 +:10784000220F281710F44798DECF479ADCCF80919B +:10785000E00081608093E00084DC80E090E0CF91E4 +:107860000895292F30E02230310559F023303105B9 +:1078700069F021303105F9F482E190E027E931E047 +:107880001EC08EE390E029E531E019C0882349F05D +:10789000813061F0823079F48CE190E029E031E0D0 +:1078A0000EC084E090E025E531E009C08CE290E074 +:1078B00027E231E004C080E090E020E030E0FA010F +:1078C0003183208308958093E900EBEEF0E080811E +:1078D00081608083EDEEF0E010826093EC004083E5 +:1078E0008091EE00881F8827881F08958091C3012A +:1078F00087FF0FC08091E80082FD04C08EB3811124 +:10790000F9CF10C08091E8008B770AC08EB388232E +:1079100049F08091E80080FFF9CF8091E8008E77F0 +:107920008093E80008950F931F93CF93DF9341D086 +:1079300048D0C8EDD0E088818F77888388818068BF +:10794000888388818F7D888319BC1EBA1092C101FB +:1079500000EE10E0F80180818B7F80838881816058 +:10796000888342E060E080E0AEDFE1EEF0E080811D +:107970008E7F8083E2EEF0E0808181608083808171 +:1079800088608083F80180818E7F80838881806118 +:107990008883DF91CF911F910F910895E7EDF0E07B +:1079A0008081816080838AE482BF81E08093C2010C +:1079B000BACFE8EDF0E080818E7F80831092E20004 +:1079C00008951092DA001092E10008951F920F922C +:1079D0000FB60F9211242F933F934F935F936F93A2 +:1079E0007F938F939F93AF93BF93EF93FF93809178 +:1079F000DA0080FF1BC08091D80080FF17C0809103 +:107A0000DA008E7F8093DA008091D90080FF0BC06E +:107A100080E189BD82E189BD09B400FEFDCF81E02E +:107A20008EBB1AD203C019BC1EBA16D28091E100D7 +:107A300080FF17C08091E20080FF13C08091E200B8 +:107A40008E7F8093E2008091E20080618093E2006B +:107A50008091D80080628093D80019BC85E08EBBED +:107A6000FBD18091E10084FF2CC08091E20084FF73 +:107A700028C080E189BD82E189BD09B400FEFDCF47 +:107A80008091D8008F7D8093D8008091E1008F7E17 +:107A90008093E1008091E2008F7E8093E2008091EC +:107AA000E20081608093E2008091C101811106C0F3 +:107AB0008091E30087FD02C081E001C084E08EBBBD +:107AC000CBD18091E10083FF21C08091E20083FF50 +:107AD0001DC08091E100877F8093E10082E08EBB32 +:107AE0001092C1018091E1008E7F8093E10080912E +:107AF000E2008E7F8093E2008091E20080618093BB +:107B0000E20042E060E080E0DEDEA6D1FF91EF918E +:107B1000BF91AF919F918F917F916F915F914F91A5 +:107B20003F912F910F900FBE0F901F9018952091AD +:107B3000C9013091CA012617370748F06115710550 +:107B400039F42091E8002E772093E80001C0B901B4 +:107B500040E061157105A1F12EB3222309F440C064 +:107B6000253009F43FC02091E80023FD37C0209163 +:107B7000E80022FD2DC02091E80020FFEACF4091CF +:107B8000F3002091F20030E0342BFC01CF016115AD +:107B9000710559F02830310540F481918093F1004E +:107BA000615071092F5F3F4FF1CF41E0283031051F +:107BB00009F040E02091E8002E772093E800C9CF3B +:107BC0004111CACF05C08EB3882351F0853051F0E2 +:107BD0008091E80082FFF7CF80E0089581E008956A +:107BE00082E0089583E008956115710529F42091DC +:107BF000E8002B772093E800FC016115710531F155 +:107C00008EB3882359F1853059F18091E80083FDC6 +:107C100023C08091E80082FFF0CF2091F300809193 +:107C2000F20090E0922B892B31F08091F10081934A +:107C30006150710991F78091E8008B778093E8009B +:107C4000DCCF8EB3882351F0853051F08091E8006D +:107C500080FFF7CF80E0089581E0089582E00895E5 +:107C600083E008950F931F93CF93DF9300D0CDB798 +:107C7000DEB7E3ECF1E088E08E0F9091F100919394 +:107C80008E13FBCFD4DA8091E80083FFD0C08091BF +:107C9000C301E091C4014E2F50E04A30510508F075 +:107CA000C6C0FA01EA5AF74CE9C0823809F0BFC0F1 +:107CB0008091C70187708093E9008091EB0010925A +:107CC000E9009091E800977F9093E80085FB882772 +:107CD00080F98093F1001092F10087C0982F9D7F6A +:107CE00009F0A5C0823009F0A2C08091C5018111C0 +:107CF00029C08091C701877009F499C08093E90079 +:107D00009091EB0090FF1EC09091C401933021F43C +:107D10008091EB00806214C09091EB009061909391 +:107D2000EB0021E030E0A90102C0440F551F8A9505 +:107D3000E2F74093EA001092EA008091EB0088603D +:107D40008093EB001092E9008091E800877F50C09B +:107D500081116DC01091C5011F770FB7F894809104 +:107D6000E800877F8093E800C1DD8091E80080FF14 +:107D7000FCCF8091E3008078812B8093E3008068C2 +:107D80008093E300111102C082E001C083E08EBB4A +:107D90000FBF4DC08058823008F049C0AE014F5F20 +:107DA0005F4F6091C7018091C5019091C60159DD77 +:107DB000BC01009709F43BC09091E800977F909335 +:107DC000E80089819A81B3DE8091E8008B77809307 +:107DD000E8002DC0803859F58091E800877F8093B6 +:107DE000E8008091C1018093F1008091E8008E77D6 +:107DF0008093E8007BDD1BC0811119C09091C50103 +:107E00009230A8F48091E800877F8093E8009093F7 +:107E1000C1016CDD8091C101811106C08091E30038 +:107E200087FD02C081E001C084E08EBBF4D980915F +:107E3000E80083FF0AC08091EB0080628093EB0032 +:107E40008091E800877F8093E8000F900F90DF918A +:107E5000CF911F910F9108950895CF938EB38823EA +:107E600059F0C091E900C7701092E9008091E800D4 +:107E700083FDF8DEC093E900CF910895EE0FFF1F58 +:107E80000590F491E02D0994F999FECF92BD81BD42 +:107E9000F89A992780B50895262FF999FECF1FBA31 +:107EA00092BD81BD20BD0FB6F894FA9AF99A0FBE23 +:087EB00001960895F894FFCF3C +:107EB8007701000000000000081C03410072006404 +:107EC80000750069006E006F002000730072006C7E +:107ED800002000200000002C03410072006400759F +:107EE8000069006E006F002000590075006E002DBB +:107EF800004D0069006E006900200020002000206D +:107F080000200000000403090409023E00020100E9 +:107F1800803209040000010202010005240010015A +:107F2800042402040524060001070582030800FF53 +:107F380009040100020A00000007050402100001FC +:107F48000705830210000112011001020000080356 +:107F58002A50000100020100014341544552494E94 +:027F68004100D6 +:040000030000700089 +:00000001FF diff --git a/external/arduino/avr/bootloaders/caterina/Caterina.c b/external/arduino/avr/bootloaders/caterina/Caterina.c new file mode 100644 index 000000000..0204873ac --- /dev/null +++ b/external/arduino/avr/bootloaders/caterina/Caterina.c @@ -0,0 +1,714 @@ +/* + LUFA Library + Copyright (C) Dean Camera, 2011. + + dean [at] fourwalledcubicle [dot] com + www.lufa-lib.org +*/ + +/* + Copyright 2011 Dean Camera (dean [at] fourwalledcubicle [dot] com) + + Permission to use, copy, modify, distribute, and sell this + software and its documentation for any purpose is hereby granted + without fee, provided that the above copyright notice appear in + all copies and that both that the copyright notice and this + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the + software without specific, written prior permission. + + The author disclaim all warranties with regard to this + software, including all implied warranties of merchantability + and fitness. In no event shall the author be liable for any + special, indirect or consequential damages or any damages + whatsoever resulting from loss of use, data or profits, whether + in an action of contract, negligence or other tortious action, + arising out of or in connection with the use or performance of + this software. +*/ + +/** \file + * + * Main source file for the CDC class bootloader. This file contains the complete bootloader logic. + */ + +#define INCLUDE_FROM_CATERINA_C +#include "Caterina.h" + +/** Contains the current baud rate and other settings of the first virtual serial port. This must be retained as some + * operating systems will not open the port unless the settings can be set successfully. + */ +static CDC_LineEncoding_t LineEncoding = { .BaudRateBPS = 0, + .CharFormat = CDC_LINEENCODING_OneStopBit, + .ParityType = CDC_PARITY_None, + .DataBits = 8 }; + +/** Current address counter. This stores the current address of the FLASH or EEPROM as set by the host, + * and is used when reading or writing to the AVRs memory (either FLASH or EEPROM depending on the issued + * command.) + */ +static uint32_t CurrAddress; + +/** Flag to indicate if the bootloader should be running, or should exit and allow the application code to run + * via a watchdog reset. When cleared the bootloader will exit, starting the watchdog and entering an infinite + * loop until the AVR restarts and the application runs. + */ +static bool RunBootloader = true; + +/* Pulse generation counters to keep track of the time remaining for each pulse type */ +#define TX_RX_LED_PULSE_PERIOD 100 +uint16_t TxLEDPulse = 0; // time remaining for Tx LED pulse +uint16_t RxLEDPulse = 0; // time remaining for Rx LED pulse + +/* Bootloader timeout timer */ +#define TIMEOUT_PERIOD 8000 +uint16_t Timeout = 0; + +uint16_t bootKey = 0x7777; +volatile uint16_t *const bootKeyPtr = (volatile uint16_t *)0x0800; + +void StartSketch(void) +{ + cli(); + + /* Undo TIMER1 setup and clear the count before running the sketch */ + TIMSK1 = 0; + TCCR1B = 0; + TCNT1H = 0; // 16-bit write to TCNT1 requires high byte be written first + TCNT1L = 0; + + /* Relocate the interrupt vector table to the application section */ + MCUCR = (1 << IVCE); + MCUCR = 0; + + L_LED_OFF(); + TX_LED_OFF(); + RX_LED_OFF(); + + /* jump to beginning of application space */ + __asm__ volatile("jmp 0x0000"); +} + +/* Breathing animation on L LED indicates bootloader is running */ +uint16_t LLEDPulse; +void LEDPulse(void) +{ + LLEDPulse++; + uint8_t p = LLEDPulse >> 8; + if (p > 127) + p = 254-p; + p += p; + if (((uint8_t)LLEDPulse) > p) + L_LED_OFF(); + else + L_LED_ON(); +} + +/** Main program entry point. This routine configures the hardware required by the bootloader, then continuously + * runs the bootloader processing routine until it times out or is instructed to exit. + */ +int main(void) +{ + /* Save the value of the boot key memory before it is overwritten */ + uint16_t bootKeyPtrVal = *bootKeyPtr; + *bootKeyPtr = 0; + + /* Check the reason for the reset so we can act accordingly */ + uint8_t mcusr_state = MCUSR; // store the initial state of the Status register + MCUSR = 0; // clear all reset flags + + /* Watchdog may be configured with a 15 ms period so must disable it before going any further */ + wdt_disable(); + + if (mcusr_state & (1< TIMEOUT_PERIOD) + RunBootloader = false; + + LEDPulse(); + } + + /* Disconnect from the host - USB interface will be reset later along with the AVR */ + USB_Detach(); + + /* Jump to beginning of application space to run the sketch - do not reset */ + StartSketch(); +} + +/** Configures all hardware required for the bootloader. */ +void SetupHardware(void) +{ + /* Disable watchdog if enabled by bootloader/fuses */ + MCUSR &= ~(1 << WDRF); + wdt_disable(); + + /* Disable clock division */ + clock_prescale_set(clock_div_1); + + /* Relocate the interrupt vector table to the bootloader section */ + MCUCR = (1 << IVCE); + MCUCR = (1 << IVSEL); + + LED_SETUP(); + CPU_PRESCALE(0); + L_LED_OFF(); + TX_LED_OFF(); + RX_LED_OFF(); + + /* Initialize TIMER1 to handle bootloader timeout and LED tasks. + * With 16 MHz clock and 1/64 prescaler, timer 1 is clocked at 250 kHz + * Our chosen compare match generates an interrupt every 1 ms. + * This interrupt is disabled selectively when doing memory reading, erasing, + * or writing since SPM has tight timing requirements. + */ + OCR1AH = 0; + OCR1AL = 250; + TIMSK1 = (1 << OCIE1A); // enable timer 1 output compare A match interrupt + TCCR1B = ((1 << CS11) | (1 << CS10)); // 1/64 prescaler on timer 1 input + + /* Initialize USB Subsystem */ + USB_Init(); +} + +//uint16_t ctr = 0; +ISR(TIMER1_COMPA_vect, ISR_BLOCK) +{ + /* Reset counter */ + TCNT1H = 0; + TCNT1L = 0; + + /* Check whether the TX or RX LED one-shot period has elapsed. if so, turn off the LED */ + if (TxLEDPulse && !(--TxLEDPulse)) + TX_LED_OFF(); + if (RxLEDPulse && !(--RxLEDPulse)) + RX_LED_OFF(); + + if (pgm_read_word(0) != 0xFFFF) + Timeout++; +} + +/** Event handler for the USB_ConfigurationChanged event. This configures the device's endpoints ready + * to relay data to and from the attached USB host. + */ +void EVENT_USB_Device_ConfigurationChanged(void) +{ + /* Setup CDC Notification, Rx and Tx Endpoints */ + Endpoint_ConfigureEndpoint(CDC_NOTIFICATION_EPNUM, EP_TYPE_INTERRUPT, + ENDPOINT_DIR_IN, CDC_NOTIFICATION_EPSIZE, + ENDPOINT_BANK_SINGLE); + + Endpoint_ConfigureEndpoint(CDC_TX_EPNUM, EP_TYPE_BULK, + ENDPOINT_DIR_IN, CDC_TXRX_EPSIZE, + ENDPOINT_BANK_SINGLE); + + Endpoint_ConfigureEndpoint(CDC_RX_EPNUM, EP_TYPE_BULK, + ENDPOINT_DIR_OUT, CDC_TXRX_EPSIZE, + ENDPOINT_BANK_SINGLE); +} + +/** Event handler for the USB_ControlRequest event. This is used to catch and process control requests sent to + * the device from the USB host before passing along unhandled control requests to the library for processing + * internally. + */ +void EVENT_USB_Device_ControlRequest(void) +{ + /* Ignore any requests that aren't directed to the CDC interface */ + if ((USB_ControlRequest.bmRequestType & (CONTROL_REQTYPE_TYPE | CONTROL_REQTYPE_RECIPIENT)) != + (REQTYPE_CLASS | REQREC_INTERFACE)) + { + return; + } + + /* Process CDC specific control requests */ + switch (USB_ControlRequest.bRequest) + { + case CDC_REQ_GetLineEncoding: + if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) + { + Endpoint_ClearSETUP(); + + /* Write the line coding data to the control endpoint */ + Endpoint_Write_Control_Stream_LE(&LineEncoding, sizeof(CDC_LineEncoding_t)); + Endpoint_ClearOUT(); + } + + break; + case CDC_REQ_SetLineEncoding: + if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) + { + Endpoint_ClearSETUP(); + + /* Read the line coding data in from the host into the global struct */ + Endpoint_Read_Control_Stream_LE(&LineEncoding, sizeof(CDC_LineEncoding_t)); + Endpoint_ClearIN(); + } + + break; + } +} + +#if !defined(NO_BLOCK_SUPPORT) +/** Reads or writes a block of EEPROM or FLASH memory to or from the appropriate CDC data endpoint, depending + * on the AVR910 protocol command issued. + * + * \param[in] Command Single character AVR910 protocol command indicating what memory operation to perform + */ +static void ReadWriteMemoryBlock(const uint8_t Command) +{ + uint16_t BlockSize; + char MemoryType; + + bool HighByte = false; + uint8_t LowByte = 0; + + BlockSize = (FetchNextCommandByte() << 8); + BlockSize |= FetchNextCommandByte(); + + MemoryType = FetchNextCommandByte(); + + if ((MemoryType != 'E') && (MemoryType != 'F')) + { + /* Send error byte back to the host */ + WriteNextResponseByte('?'); + + return; + } + + /* Disable timer 1 interrupt - can't afford to process nonessential interrupts + * while doing SPM tasks */ + TIMSK1 = 0; + + /* Check if command is to read memory */ + if (Command == 'g') + { + /* Re-enable RWW section */ + boot_rww_enable(); + + while (BlockSize--) + { + if (MemoryType == 'F') + { + /* Read the next FLASH byte from the current FLASH page */ + #if (FLASHEND > 0xFFFF) + WriteNextResponseByte(pgm_read_byte_far(CurrAddress | HighByte)); + #else + WriteNextResponseByte(pgm_read_byte(CurrAddress | HighByte)); + #endif + + /* If both bytes in current word have been read, increment the address counter */ + if (HighByte) + CurrAddress += 2; + + HighByte = !HighByte; + } + else + { + /* Read the next EEPROM byte into the endpoint */ + WriteNextResponseByte(eeprom_read_byte((uint8_t*)(intptr_t)(CurrAddress >> 1))); + + /* Increment the address counter after use */ + CurrAddress += 2; + } + } + } + else + { + uint32_t PageStartAddress = CurrAddress; + + if (MemoryType == 'F') + { + boot_page_erase(PageStartAddress); + boot_spm_busy_wait(); + } + + while (BlockSize--) + { + if (MemoryType == 'F') + { + /* If both bytes in current word have been written, increment the address counter */ + if (HighByte) + { + /* Write the next FLASH word to the current FLASH page */ + boot_page_fill(CurrAddress, ((FetchNextCommandByte() << 8) | LowByte)); + + /* Increment the address counter after use */ + CurrAddress += 2; + } + else + { + LowByte = FetchNextCommandByte(); + } + + HighByte = !HighByte; + } + else + { + /* Write the next EEPROM byte from the endpoint */ + eeprom_write_byte((uint8_t*)((intptr_t)(CurrAddress >> 1)), FetchNextCommandByte()); + + /* Increment the address counter after use */ + CurrAddress += 2; + } + } + + /* If in FLASH programming mode, commit the page after writing */ + if (MemoryType == 'F') + { + /* Commit the flash page to memory */ + boot_page_write(PageStartAddress); + + /* Wait until write operation has completed */ + boot_spm_busy_wait(); + } + + /* Send response byte back to the host */ + WriteNextResponseByte('\r'); + } + + /* Re-enable timer 1 interrupt disabled earlier in this routine */ + TIMSK1 = (1 << OCIE1A); +} +#endif + +/** Retrieves the next byte from the host in the CDC data OUT endpoint, and clears the endpoint bank if needed + * to allow reception of the next data packet from the host. + * + * \return Next received byte from the host in the CDC data OUT endpoint + */ +static uint8_t FetchNextCommandByte(void) +{ + /* Select the OUT endpoint so that the next data byte can be read */ + Endpoint_SelectEndpoint(CDC_RX_EPNUM); + + /* If OUT endpoint empty, clear it and wait for the next packet from the host */ + while (!(Endpoint_IsReadWriteAllowed())) + { + Endpoint_ClearOUT(); + + while (!(Endpoint_IsOUTReceived())) + { + if (USB_DeviceState == DEVICE_STATE_Unattached) + return 0; + } + } + + /* Fetch the next byte from the OUT endpoint */ + return Endpoint_Read_8(); +} + +/** Writes the next response byte to the CDC data IN endpoint, and sends the endpoint back if needed to free up the + * bank when full ready for the next byte in the packet to the host. + * + * \param[in] Response Next response byte to send to the host + */ +static void WriteNextResponseByte(const uint8_t Response) +{ + /* Select the IN endpoint so that the next data byte can be written */ + Endpoint_SelectEndpoint(CDC_TX_EPNUM); + + /* If IN endpoint full, clear it and wait until ready for the next packet to the host */ + if (!(Endpoint_IsReadWriteAllowed())) + { + Endpoint_ClearIN(); + + while (!(Endpoint_IsINReady())) + { + if (USB_DeviceState == DEVICE_STATE_Unattached) + return; + } + } + + /* Write the next byte to the IN endpoint */ + Endpoint_Write_8(Response); + + TX_LED_ON(); + TxLEDPulse = TX_RX_LED_PULSE_PERIOD; +} + +#define STK_OK 0x10 +#define STK_INSYNC 0x14 // ' ' +#define CRC_EOP 0x20 // 'SPACE' +#define STK_GET_SYNC 0x30 // '0' + +#define STK_GET_PARAMETER 0x41 // 'A' +#define STK_SET_DEVICE 0x42 // 'B' +#define STK_SET_DEVICE_EXT 0x45 // 'E' +#define STK_LOAD_ADDRESS 0x55 // 'U' +#define STK_UNIVERSAL 0x56 // 'V' +#define STK_PROG_PAGE 0x64 // 'd' +#define STK_READ_PAGE 0x74 // 't' +#define STK_READ_SIGN 0x75 // 'u' + +/** Task to read in AVR910 commands from the CDC data OUT endpoint, process them, perform the required actions + * and send the appropriate response back to the host. + */ +void CDC_Task(void) +{ + /* Select the OUT endpoint */ + Endpoint_SelectEndpoint(CDC_RX_EPNUM); + + /* Check if endpoint has a command in it sent from the host */ + if (!(Endpoint_IsOUTReceived())) + return; + + RX_LED_ON(); + RxLEDPulse = TX_RX_LED_PULSE_PERIOD; + + /* Read in the bootloader command (first byte sent from host) */ + uint8_t Command = FetchNextCommandByte(); + + if (Command == 'E') + { + /* We nearly run out the bootloader timeout clock, + * leaving just a few hundred milliseconds so the + * bootloder has time to respond and service any + * subsequent requests */ + Timeout = TIMEOUT_PERIOD - 500; + + /* Re-enable RWW section - must be done here in case + * user has disabled verification on upload. */ + boot_rww_enable_safe(); + + // Send confirmation byte back to the host + WriteNextResponseByte('\r'); + } + else if (Command == 'T') + { + FetchNextCommandByte(); + + // Send confirmation byte back to the host + WriteNextResponseByte('\r'); + } + else if ((Command == 'L') || (Command == 'P')) + { + // Send confirmation byte back to the host + WriteNextResponseByte('\r'); + } + else if (Command == 't') + { + // Return ATMEGA128 part code - this is only to allow AVRProg to use the bootloader + WriteNextResponseByte(0x44); + WriteNextResponseByte(0x00); + } + else if (Command == 'a') + { + // Indicate auto-address increment is supported + WriteNextResponseByte('Y'); + } + else if (Command == 'A') + { + // Set the current address to that given by the host + CurrAddress = (FetchNextCommandByte() << 9); + CurrAddress |= (FetchNextCommandByte() << 1); + + // Send confirmation byte back to the host + WriteNextResponseByte('\r'); + } + else if (Command == 'p') + { + // Indicate serial programmer back to the host + WriteNextResponseByte('S'); + } + else if (Command == 'S') + { + // Write the 7-byte software identifier to the endpoint + for (uint8_t CurrByte = 0; CurrByte < 7; CurrByte++) + WriteNextResponseByte(SOFTWARE_IDENTIFIER[CurrByte]); + } + else if (Command == 'V') + { + WriteNextResponseByte('0' + BOOTLOADER_VERSION_MAJOR); + WriteNextResponseByte('0' + BOOTLOADER_VERSION_MINOR); + } + else if (Command == 's') + { + WriteNextResponseByte(AVR_SIGNATURE_3); + WriteNextResponseByte(AVR_SIGNATURE_2); + WriteNextResponseByte(AVR_SIGNATURE_1); + } + else if (Command == 'e') + { + // Clear the application section of flash + for (uint32_t CurrFlashAddress = 0; CurrFlashAddress < BOOT_START_ADDR; CurrFlashAddress += SPM_PAGESIZE) + { + boot_page_erase(CurrFlashAddress); + boot_spm_busy_wait(); + boot_page_write(CurrFlashAddress); + boot_spm_busy_wait(); + } + + // Send confirmation byte back to the host + WriteNextResponseByte('\r'); + } + #if !defined(NO_LOCK_BYTE_WRITE_SUPPORT) + else if (Command == 'l') + { + // Set the lock bits to those given by the host + boot_lock_bits_set(FetchNextCommandByte()); + + // Send confirmation byte back to the host + WriteNextResponseByte('\r'); + } + #endif + else if (Command == 'r') + { + WriteNextResponseByte(boot_lock_fuse_bits_get(GET_LOCK_BITS)); + } + else if (Command == 'F') + { + WriteNextResponseByte(boot_lock_fuse_bits_get(GET_LOW_FUSE_BITS)); + } + else if (Command == 'N') + { + WriteNextResponseByte(boot_lock_fuse_bits_get(GET_HIGH_FUSE_BITS)); + } + else if (Command == 'Q') + { + WriteNextResponseByte(boot_lock_fuse_bits_get(GET_EXTENDED_FUSE_BITS)); + } + #if !defined(NO_BLOCK_SUPPORT) + else if (Command == 'b') + { + WriteNextResponseByte('Y'); + + // Send block size to the host + WriteNextResponseByte(SPM_PAGESIZE >> 8); + WriteNextResponseByte(SPM_PAGESIZE & 0xFF); + } + else if ((Command == 'B') || (Command == 'g')) + { + // Keep resetting the timeout counter if we're receiving self-programming instructions + Timeout = 0; + // Delegate the block write/read to a separate function for clarity + ReadWriteMemoryBlock(Command); + } + #endif + #if !defined(NO_FLASH_BYTE_SUPPORT) + else if (Command == 'C') + { + // Write the high byte to the current flash page + boot_page_fill(CurrAddress, FetchNextCommandByte()); + + // Send confirmation byte back to the host + WriteNextResponseByte('\r'); + } + else if (Command == 'c') + { + // Write the low byte to the current flash page + boot_page_fill(CurrAddress | 0x01, FetchNextCommandByte()); + + // Increment the address + CurrAddress += 2; + + // Send confirmation byte back to the host + WriteNextResponseByte('\r'); + } + else if (Command == 'm') + { + // Commit the flash page to memory + boot_page_write(CurrAddress); + + // Wait until write operation has completed + boot_spm_busy_wait(); + + // Send confirmation byte back to the host + WriteNextResponseByte('\r'); + } + else if (Command == 'R') + { + #if (FLASHEND > 0xFFFF) + uint16_t ProgramWord = pgm_read_word_far(CurrAddress); + #else + uint16_t ProgramWord = pgm_read_word(CurrAddress); + #endif + + WriteNextResponseByte(ProgramWord >> 8); + WriteNextResponseByte(ProgramWord & 0xFF); + } + #endif + #if !defined(NO_EEPROM_BYTE_SUPPORT) + else if (Command == 'D') + { + // Read the byte from the endpoint and write it to the EEPROM + eeprom_write_byte((uint8_t*)((intptr_t)(CurrAddress >> 1)), FetchNextCommandByte()); + + // Increment the address after use + CurrAddress += 2; + + // Send confirmation byte back to the host + WriteNextResponseByte('\r'); + } + else if (Command == 'd') + { + // Read the EEPROM byte and write it to the endpoint + WriteNextResponseByte(eeprom_read_byte((uint8_t*)((intptr_t)(CurrAddress >> 1)))); + + // Increment the address after use + CurrAddress += 2; + } + #endif + else if (Command != 27) + { + // Unknown (non-sync) command, return fail code + WriteNextResponseByte('?'); + } + + + /* Select the IN endpoint */ + Endpoint_SelectEndpoint(CDC_TX_EPNUM); + + /* Remember if the endpoint is completely full before clearing it */ + bool IsEndpointFull = !(Endpoint_IsReadWriteAllowed()); + + /* Send the endpoint data to the host */ + Endpoint_ClearIN(); + + /* If a full endpoint's worth of data was sent, we need to send an empty packet afterwards to signal end of transfer */ + if (IsEndpointFull) + { + while (!(Endpoint_IsINReady())) + { + if (USB_DeviceState == DEVICE_STATE_Unattached) + return; + } + + Endpoint_ClearIN(); + } + + /* Wait until the data has been sent to the host */ + while (!(Endpoint_IsINReady())) + { + if (USB_DeviceState == DEVICE_STATE_Unattached) + return; + } + + /* Select the OUT endpoint */ + Endpoint_SelectEndpoint(CDC_RX_EPNUM); + + /* Acknowledge the command from the host */ + Endpoint_ClearOUT(); +} + diff --git a/external/arduino/avr/bootloaders/caterina/Caterina.h b/external/arduino/avr/bootloaders/caterina/Caterina.h new file mode 100644 index 000000000..67ff1b3a4 --- /dev/null +++ b/external/arduino/avr/bootloaders/caterina/Caterina.h @@ -0,0 +1,106 @@ +/* + LUFA Library + Copyright (C) Dean Camera, 2011. + + dean [at] fourwalledcubicle [dot] com + www.lufa-lib.org +*/ + +/* + Copyright 2011 Dean Camera (dean [at] fourwalledcubicle [dot] com) + + Permission to use, copy, modify, distribute, and sell this + software and its documentation for any purpose is hereby granted + without fee, provided that the above copyright notice appear in + all copies and that both that the copyright notice and this + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the + software without specific, written prior permission. + + The author disclaim all warranties with regard to this + software, including all implied warranties of merchantability + and fitness. In no event shall the author be liable for any + special, indirect or consequential damages or any damages + whatsoever resulting from loss of use, data or profits, whether + in an action of contract, negligence or other tortious action, + arising out of or in connection with the use or performance of + this software. +*/ + +/** \file + * + * Header file for BootloaderCDC.c. + */ + +#ifndef _CDC_H_ +#define _CDC_H_ + + /* Includes: */ + #include + #include + #include + #include + #include + #include + #include + + #include "Descriptors.h" + + #include + /* Macros: */ + /** Version major of the CDC bootloader. */ + #define BOOTLOADER_VERSION_MAJOR 0x01 + + /** Version minor of the CDC bootloader. */ + #define BOOTLOADER_VERSION_MINOR 0x00 + + /** Hardware version major of the CDC bootloader. */ + #define BOOTLOADER_HWVERSION_MAJOR 0x01 + + /** Hardware version minor of the CDC bootloader. */ + #define BOOTLOADER_HWVERSION_MINOR 0x00 + + /** Eight character bootloader firmware identifier reported to the host when requested */ + #define SOFTWARE_IDENTIFIER "CATERINA" + + #define CPU_PRESCALE(n) (CLKPR = 0x80, CLKPR = (n)) + #define LED_SETUP() DDRC |= (1<<7); DDRB |= (1<<0); DDRD |= (1<<5); + #define L_LED_OFF() PORTC &= ~(1<<7) + #define L_LED_ON() PORTC |= (1<<7) + #define L_LED_TOGGLE() PORTC ^= (1<<7) + #if DEVICE_PID == 0x0037 // polarity of the RX and TX LEDs is reversed on the Micro + #define TX_LED_OFF() PORTD &= ~(1<<5) + #define TX_LED_ON() PORTD |= (1<<5) + #define RX_LED_OFF() PORTB &= ~(1<<0) + #define RX_LED_ON() PORTB |= (1<<0) + #else + #define TX_LED_OFF() PORTD |= (1<<5) + #define TX_LED_ON() PORTD &= ~(1<<5) + #define RX_LED_OFF() PORTB |= (1<<0) + #define RX_LED_ON() PORTB &= ~(1<<0) + #endif + + /* Type Defines: */ + /** Type define for a non-returning pointer to the start of the loaded application in flash memory. */ + typedef void (*AppPtr_t)(void) ATTR_NO_RETURN; + + /* Function Prototypes: */ + void StartSketch(void); + void LEDPulse(void); + + void CDC_Task(void); + void SetupHardware(void); + + void EVENT_USB_Device_ConfigurationChanged(void); + + #if defined(INCLUDE_FROM_CATERINA_C) || defined(__DOXYGEN__) + #if !defined(NO_BLOCK_SUPPORT) + static void ReadWriteMemoryBlock(const uint8_t Command); + #endif + static uint8_t FetchNextCommandByte(void); + static void WriteNextResponseByte(const uint8_t Response); + #endif + +#endif + diff --git a/external/arduino/avr/bootloaders/caterina/Descriptors.c b/external/arduino/avr/bootloaders/caterina/Descriptors.c new file mode 100644 index 000000000..9ca7de47a --- /dev/null +++ b/external/arduino/avr/bootloaders/caterina/Descriptors.c @@ -0,0 +1,266 @@ +/* + LUFA Library + Copyright (C) Dean Camera, 2011. + + dean [at] fourwalledcubicle [dot] com + www.lufa-lib.org +*/ + +/* + Copyright 2011 Dean Camera (dean [at] fourwalledcubicle [dot] com) + + Permission to use, copy, modify, distribute, and sell this + software and its documentation for any purpose is hereby granted + without fee, provided that the above copyright notice appear in + all copies and that both that the copyright notice and this + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the + software without specific, written prior permission. + + The author disclaim all warranties with regard to this + software, including all implied warranties of merchantability + and fitness. In no event shall the author be liable for any + special, indirect or consequential damages or any damages + whatsoever resulting from loss of use, data or profits, whether + in an action of contract, negligence or other tortious action, + arising out of or in connection with the use or performance of + this software. +*/ + +/** \file + * + * USB Device Descriptors, for library use when in USB device mode. Descriptors are special + * computer-readable structures which the host requests upon device enumeration, to determine + * the device's capabilities and functions. + */ + +#include "Descriptors.h" + +/** Device descriptor structure. This descriptor, located in SRAM memory, describes the overall + * device characteristics, including the supported USB version, control endpoint size and the + * number of device configurations. The descriptor is read out by the USB host when the enumeration + * process begins. + */ +const USB_Descriptor_Device_t DeviceDescriptor = +{ + .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device}, + + .USBSpecification = VERSION_BCD(01.10), + .Class = CDC_CSCP_CDCClass, + .SubClass = CDC_CSCP_NoSpecificSubclass, + .Protocol = CDC_CSCP_NoSpecificProtocol, + + .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE, + + .VendorID = DEVICE_VID, + .ProductID = DEVICE_PID, + .ReleaseNumber = VERSION_BCD(00.01), + + .ManufacturerStrIndex = 0x02, + .ProductStrIndex = 0x01, + .SerialNumStrIndex = NO_DESCRIPTOR, + + .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS +}; + +/** Configuration descriptor structure. This descriptor, located in SRAM memory, describes the usage + * of the device in one of its supported configurations, including information about any device interfaces + * and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting + * a configuration so that the host may correctly communicate with the USB device. + */ +const USB_Descriptor_Configuration_t ConfigurationDescriptor = +{ + .Config = + { + .Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration}, + + .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t), + .TotalInterfaces = 2, + + .ConfigurationNumber = 1, + .ConfigurationStrIndex = NO_DESCRIPTOR, + + .ConfigAttributes = USB_CONFIG_ATTR_BUSPOWERED, + + .MaxPowerConsumption = USB_CONFIG_POWER_MA(100) + }, + + .CDC_CCI_Interface = + { + .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, + + .InterfaceNumber = 0, + .AlternateSetting = 0, + + .TotalEndpoints = 1, + + .Class = CDC_CSCP_CDCClass, + .SubClass = CDC_CSCP_ACMSubclass, + .Protocol = CDC_CSCP_ATCommandProtocol, + + .InterfaceStrIndex = NO_DESCRIPTOR + }, + + .CDC_Functional_Header = + { + .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalHeader_t), .Type = DTYPE_CSInterface}, + .Subtype = 0x00, + + .CDCSpecification = VERSION_BCD(01.10), + }, + + .CDC_Functional_ACM = + { + .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalACM_t), .Type = DTYPE_CSInterface}, + .Subtype = 0x02, + + .Capabilities = 0x04, + }, + + .CDC_Functional_Union = + { + .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalUnion_t), .Type = DTYPE_CSInterface}, + .Subtype = 0x06, + + .MasterInterfaceNumber = 0, + .SlaveInterfaceNumber = 1, + }, + + .CDC_NotificationEndpoint = + { + .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, + + .EndpointAddress = (ENDPOINT_DIR_IN | CDC_NOTIFICATION_EPNUM), + .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), + .EndpointSize = CDC_NOTIFICATION_EPSIZE, + .PollingIntervalMS = 0xFF + }, + + .CDC_DCI_Interface = + { + .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, + + .InterfaceNumber = 1, + .AlternateSetting = 0, + + .TotalEndpoints = 2, + + .Class = CDC_CSCP_CDCDataClass, + .SubClass = CDC_CSCP_NoDataSubclass, + .Protocol = CDC_CSCP_NoDataProtocol, + + .InterfaceStrIndex = NO_DESCRIPTOR + }, + + .CDC_DataOutEndpoint = + { + .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, + + .EndpointAddress = (ENDPOINT_DIR_OUT | CDC_RX_EPNUM), + .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), + .EndpointSize = CDC_TXRX_EPSIZE, + .PollingIntervalMS = 0x01 + }, + + .CDC_DataInEndpoint = + { + .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, + + .EndpointAddress = (ENDPOINT_DIR_IN | CDC_TX_EPNUM), + .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), + .EndpointSize = CDC_TXRX_EPSIZE, + .PollingIntervalMS = 0x01 + } +}; + +/** Language descriptor structure. This descriptor, located in SRAM memory, is returned when the host requests + * the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate + * via the language ID table available at USB.org what languages the device supports for its string descriptors. + */ +const USB_Descriptor_String_t LanguageString = +{ + .Header = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String}, + + .UnicodeString = {LANGUAGE_ID_ENG} +}; + +/** Product descriptor string. This is a Unicode string containing the product's details in human readable form, + * and is read out upon request by the host when the appropriate string ID is requested, listed in the Device + * Descriptor. + */ +const USB_Descriptor_String_t ProductString = +{ + .Header = {.Size = USB_STRING_LEN(16), .Type = DTYPE_String}, + + #if DEVICE_PID == 0x0036 + .UnicodeString = L"Arduino Leonardo" + #elif DEVICE_PID == 0x0037 + .UnicodeString = L"Arduino Micro " + #elif DEVICE_PID == 0x003C + .UnicodeString = L"Arduino Esplora " + #else + .UnicodeString = L"USB IO board " + #endif +}; + +const USB_Descriptor_String_t ManufNameString = +{ + .Header = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String}, + + #if DEVICE_VID == 0x2341 + .UnicodeString = L"Arduino LLC" + #else + .UnicodeString = L"Unknown " + #endif +}; + +/** This function is called by the library when in device mode, and must be overridden (see LUFA library "USB Descriptors" + * documentation) by the application code so that the address and size of a requested descriptor can be given + * to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function + * is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the + * USB host. + */ +uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, + const uint8_t wIndex, + const void** const DescriptorAddress) +{ + const uint8_t DescriptorType = (wValue >> 8); + const uint8_t DescriptorNumber = (wValue & 0xFF); + + const void* Address = NULL; + uint16_t Size = NO_DESCRIPTOR; + + switch (DescriptorType) + { + case DTYPE_Device: + Address = &DeviceDescriptor; + Size = sizeof(USB_Descriptor_Device_t); + break; + case DTYPE_Configuration: + Address = &ConfigurationDescriptor; + Size = sizeof(USB_Descriptor_Configuration_t); + break; + case DTYPE_String: + if (!(DescriptorNumber)) + { + Address = &LanguageString; + Size = LanguageString.Header.Size; + } + else if (DescriptorNumber == DeviceDescriptor.ProductStrIndex) + { + Address = &ProductString; + Size = ProductString.Header.Size; + } else if (DescriptorNumber == DeviceDescriptor.ManufacturerStrIndex) + { + Address = &ManufNameString; + Size = ManufNameString.Header.Size; + } + + break; + } + + *DescriptorAddress = Address; + return Size; +} + diff --git a/external/arduino/avr/bootloaders/caterina/Descriptors.h b/external/arduino/avr/bootloaders/caterina/Descriptors.h new file mode 100644 index 000000000..c843bec82 --- /dev/null +++ b/external/arduino/avr/bootloaders/caterina/Descriptors.h @@ -0,0 +1,139 @@ +/* + LUFA Library + Copyright (C) Dean Camera, 2011. + + dean [at] fourwalledcubicle [dot] com + www.lufa-lib.org +*/ + +/* + Copyright 2011 Dean Camera (dean [at] fourwalledcubicle [dot] com) + + Permission to use, copy, modify, distribute, and sell this + software and its documentation for any purpose is hereby granted + without fee, provided that the above copyright notice appear in + all copies and that both that the copyright notice and this + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the + software without specific, written prior permission. + + The author disclaim all warranties with regard to this + software, including all implied warranties of merchantability + and fitness. In no event shall the author be liable for any + special, indirect or consequential damages or any damages + whatsoever resulting from loss of use, data or profits, whether + in an action of contract, negligence or other tortious action, + arising out of or in connection with the use or performance of + this software. +*/ + +/** \file + * + * Header file for Descriptors.c. + */ + +#ifndef _DESCRIPTORS_H_ +#define _DESCRIPTORS_H_ + + /* Includes: */ + #include + + /* Macros: */ + #if defined(__AVR_AT90USB1287__) + #define AVR_SIGNATURE_1 0x1E + #define AVR_SIGNATURE_2 0x97 + #define AVR_SIGNATURE_3 0x82 + #elif defined(__AVR_AT90USB647__) + #define AVR_SIGNATURE_1 0x1E + #define AVR_SIGNATURE_2 0x96 + #define AVR_SIGNATURE_3 0x82 + #elif defined(__AVR_AT90USB1286__) + #define AVR_SIGNATURE_1 0x1E + #define AVR_SIGNATURE_2 0x97 + #define AVR_SIGNATURE_3 0x82 + #elif defined(__AVR_AT90USB646__) + #define AVR_SIGNATURE_1 0x1E + #define AVR_SIGNATURE_2 0x96 + #define AVR_SIGNATURE_3 0x82 + #elif defined(__AVR_ATmega32U6__) + #define AVR_SIGNATURE_1 0x1E + #define AVR_SIGNATURE_2 0x95 + #define AVR_SIGNATURE_3 0x88 + #elif defined(__AVR_ATmega32U4__) + #define AVR_SIGNATURE_1 0x1E + #define AVR_SIGNATURE_2 0x95 + #define AVR_SIGNATURE_3 0x87 + #elif defined(__AVR_ATmega16U4__) + #define AVR_SIGNATURE_1 0x1E + #define AVR_SIGNATURE_2 0x94 + #define AVR_SIGNATURE_3 0x88 + #elif defined(__AVR_ATmega32U2__) + #define AVR_SIGNATURE_1 0x1E + #define AVR_SIGNATURE_2 0x95 + #define AVR_SIGNATURE_3 0x8A + #elif defined(__AVR_ATmega16U2__) + #define AVR_SIGNATURE_1 0x1E + #define AVR_SIGNATURE_2 0x94 + #define AVR_SIGNATURE_3 0x89 + #elif defined(__AVR_AT90USB162__) + #define AVR_SIGNATURE_1 0x1E + #define AVR_SIGNATURE_2 0x94 + #define AVR_SIGNATURE_3 0x82 + #elif defined(__AVR_ATmega8U2__) + #define AVR_SIGNATURE_1 0x1E + #define AVR_SIGNATURE_2 0x93 + #define AVR_SIGNATURE_3 0x89 + #elif defined(__AVR_AT90USB82__) + #define AVR_SIGNATURE_1 0x1E + #define AVR_SIGNATURE_2 0x94 + #define AVR_SIGNATURE_3 0x82 + #else + #error The selected AVR part is not currently supported by this bootloader. + #endif + + /** Endpoint number for the CDC control interface event notification endpoint. */ + #define CDC_NOTIFICATION_EPNUM 2 + + /** Endpoint number for the CDC data interface TX (data IN) endpoint. */ + #define CDC_TX_EPNUM 3 + + /** Endpoint number for the CDC data interface RX (data OUT) endpoint. */ + #define CDC_RX_EPNUM 4 + + /** Size of the CDC data interface TX and RX data endpoint banks, in bytes. */ + #define CDC_TXRX_EPSIZE 16 + + /** Size of the CDC control interface notification endpoint bank, in bytes. */ + #define CDC_NOTIFICATION_EPSIZE 8 + + /* Type Defines: */ + /** Type define for the device configuration descriptor structure. This must be defined in the + * application code, as the configuration descriptor contains several sub-descriptors which + * vary between devices, and which describe the device's usage to the host. + */ + typedef struct + { + USB_Descriptor_Configuration_Header_t Config; + + // CDC Control Interface + USB_Descriptor_Interface_t CDC_CCI_Interface; + USB_CDC_Descriptor_FunctionalHeader_t CDC_Functional_Header; + USB_CDC_Descriptor_FunctionalACM_t CDC_Functional_ACM; + USB_CDC_Descriptor_FunctionalUnion_t CDC_Functional_Union; + USB_Descriptor_Endpoint_t CDC_NotificationEndpoint; + + // CDC Data Interface + USB_Descriptor_Interface_t CDC_DCI_Interface; + USB_Descriptor_Endpoint_t CDC_DataOutEndpoint; + USB_Descriptor_Endpoint_t CDC_DataInEndpoint; + } USB_Descriptor_Configuration_t; + + /* Function Prototypes: */ + uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, + const uint8_t wIndex, + const void** const DescriptorAddress) + ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); + +#endif + diff --git a/external/arduino/avr/bootloaders/caterina/Esplora-prod-firmware-2012-12-10.hex b/external/arduino/avr/bootloaders/caterina/Esplora-prod-firmware-2012-12-10.hex new file mode 100644 index 000000000..b1bfb27c8 --- /dev/null +++ b/external/arduino/avr/bootloaders/caterina/Esplora-prod-firmware-2012-12-10.hex @@ -0,0 +1,1024 @@ +:200000000C946E010C9496010C9496010C9496010C9496010C9496010C9496010C94960150 +:200020000C9496010C9496010C94F6040C947D050C9496010C9496010C9496010C949601BA +:200040000C9496010C9496010C9496010C9496010C9496010C9496010C9496010C94B501C9 +:200060000C9496010C9496010C9496010C9496010C9496010C9496010C9496010C949601C8 +:200080000C9496010C9496010C9496010C9496010C9496010C9496010C9496010C949601A8 +:2000A0000C9496010C9496010C94960100000000240027002A002D003000000000002500A4 +:2000C00028002B002E003100000000002300260029002C002F00040404040403040502027D +:2000E0000202040302020202060606060606040402020204040802011040804010204080A8 +:200100004080080204018040201002011080102040400000000200080E0000030401000BB2 +:200120000000070605040100080A0B0C0D09040309042203410072006400750069006E00CD +:200140006F0020004500730070006C006F007200610020001803410072006400750069000A +:200160006E006F0020004C004C004300120100020000004041233C8000010102000112011A +:2001800000020200004041233C8000010102000100C18081C1080B0002020201000904004C +:2001A000000102020000052400100105240101010424020605240600010705810310004094 +:2001C00009040100020A000000070502024000000705830240000005010902A1010901A186 +:2001E000008501050919012903150025019503750181029501750581030501093009310943 +:20020000381581257F750895038106C0C005010906A1018502050719E029E715002501754D +:20022000019508810295017508810395067508150025650507190029658100C0090402004C +:2002400001030000000921010100012265000705840340000100000000000000002A2B2895 +:200260000000000000000000000000000000000000000000002C9EB4A0A1A2A434A6A7A553 +:20028000AE362D3738271E1F20212223242526B333B62EB7B89F8485868788898A8B8C8D58 +:2002A0008E8F909192939495969798999A9B9C9D2F3130A3AD350405060708090A0B0C0D7C +:2002C0000E0F101112131415161718191A1B1C1DAFB1B0B5000032041007150811241FBE85 +:2002E000CFEFDAE0DEBFCDBF11E0A0E0B1E0E0EAF2E102C005900D92AC32B107D9F711E071 +:20030000ACE2B1E001C01D92AD39B107E1F712E0CCEDD2E004C02297FE010E944A09C63D07 +:20032000D107C9F70E946C030C944E090C9400008091000161E00E94390368EE73E080E043 +:2003400090E00E94FD018091000160E00E94390368EE73E080E090E00E94FD010895809196 +:20036000000161E00E94AC0208951F920F920FB60F9211242F933F938F939F93AF93BF93E5 +:200380008091300190913101A0913201B0913301309134010196A11DB11D232F2D5F2D3794 +:2003A00020F02D570196A11DB11D209334018093300190933101A0933201B0933301809117 +:2003C0002C0190912D01A0912E01B0912F010196A11DB11D80932C0190932D01A0932E01BA +:2003E000B0932F01BF91AF919F918F913F912F910F900FBE0F901F9018959B01AC017FB734 +:20040000F89480912C0190912D01A0912E01B0912F0166B5A89B05C06F3F19F00196A11DC3 +:20042000B11D7FBFBA2FA92F982F8827860F911DA11DB11D62E0880F991FAA1FBB1F6A9577 +:20044000D1F7BC012DC0FFB7F89480912C0190912D01A0912E01B0912F01E6B5A89B05C0E7 +:20046000EF3F19F00196A11DB11DFFBFBA2FA92F982F88278E0F911DA11DB11DE2E0880FFD +:20048000991FAA1FBB1FEA95D1F7861B970B885E9340C8F2215030404040504068517C4F8F +:2004A000211531054105510571F60895789484B5826084BD84B5816084BD85B5826085BD0F +:2004C00085B5816085BDEEE6F0E0808181608083E1E8F0E010828081826080838081816043 +:2004E0008083E0E8F0E0808181608083E1E9F0E0808182608083808181608083E0E9F0E07E +:20050000808181608083E1ECF0E0808184608083808182608083808181608083E3ECF0E007 +:20052000808181608083E0ECF0E0808182608083E2ECF0E0808181608083EAE7F0E080812F +:20054000846080838081826080838081816080838081806880830895CF93DF93482F50E0E5 +:20056000CA018C509F4FFC0134914A525F4FFA018491882369F190E0880F991FFC01E455D0 +:20058000FF4FA591B491FC01E654FF4FC591D491662351F42FB7F8948C91932F9095892362 +:2005A0008C93888189230BC0623061F42FB7F8948C91932F909589238C938881832B8883B2 +:2005C0002FBF06C09FB7F8948C91832B8C939FBFDF91CF910895883071F1893068F48230EF +:2005E00031F1833020F4813009F042C01DC0833089F08430E9F512C08B3059F18C3028F41C +:200600008930E9F08A30A1F51EC08C3031F18E3079F529C0809180008F7703C0809180003C +:200620008F7D80938000089584B58F7702C084B58F7D84BD0895809190008F7707C08091DB +:2006400090008F7D03C080919000877F8093900008958091C0008F7703C08091C0008F7DDD +:200660008093C00008958091C200877F8093C2000895FF920F931F93F62E482F50E0CA0144 +:200680008E5E9E4FFC012491CA018C509F4FFC0114914A525F4FFA0104910023C9F022239D +:2006A00019F0822F0E94EB02E02FF0E0EE0FFF1FE654FF4FA591B4919FB7F894FF2021F4DE +:2006C0008C911095812302C08C91812B8C939FBF1F910F91FF900895CF93DF930E94560262 +:2006E0008DE391E00E9433040E94AF01C0E0D0E00E9498012097E1F30E940000F9CF282F17 +:20070000809137018823C1F057FF1AC015C02898909336018091F1008193E217F307B9F75C +:200720004115510539F08091F200882319F48BE68093E800AFBF02C04FEF5FEFCA01089599 +:20074000AFB7F89427702093E9008091F200282F30E0241735070CF4A901FB019B01240F1E +:20076000311D94E6DACFDF93CF930F92CDB7DEB7BE016F5F7F4F41E050E00E947F03019712 +:2007800019F02FEF3FEF03C08981282F30E0C9010F90CF91DF910895FF920F931F93F82EEF +:2007A000142F052F40913A0150913B01212F302FC901DC01FB016EEF29C0F7FE02C0949125 +:2007C00001C09081209138013091390124173507ACF48091E8008570E1F38091E80082FF0F +:2007E00003C02FEF3FEF17C09093F100C90101968F739070892B11F46093E8002F5F3F4FEC +:200800003093390120933801119731961097A9F6812F902F9C01C9011F910F91FF900895E8 +:200820009C018091E80082FFFCCFF901260F311D03C08091F1008193E217F307D1F7289805 +:2008400084E6809336018BEF8093E800CB0108958093E9008091F200882319F08AE38093D3 +:20086000E800089508951092370181E08093D70080EA8093D80082E189BD09B400FEFDCFAC +:2008800061E070E080E090E00E94FD0180E98093D8008CE08093E2001092E000559A209A77 +:2008A00008955F926F927F928F929F92AF92BF92CF92DF92EF92FF920F931F93CF93DF93A8 +:2008C000E82E842E752E80913701882371F18B01242F352FC901EC017AEFF72E67E0962EC4 +:2008E0009E2050E4552E8E2D90E040E2A42EB12CA822B9223AE3632E20E4C22ED12CC82259 +:20090000D92258C09FB7F8949092E9008091E80085FD02C020E004C08091F200252D281B3E +:200920009FBF222361F4FA9419F42FEF3FEF4DC061E070E080E090E00E94FD013BC0822F1E +:2009400090E0C817D9070CF42C2FC21BD1094FB7F8949092E900A114B10421F406C01092D2 +:20096000F10021502223D9F719C0E7FC03C0F801922F10C0C801322F06C0FC010196E491FE +:20098000E093F10031503323C1F706C081918093F10091509923D1F7020F111D8091E800EB +:2009A00085FF05C0209729F4C114D10411F06092E8004FBF209709F0A5CF5D9884E68093F1 +:2009C0003501282D372DC9019C01C901DF91CF911F910F91FF90EF90DF90CF90BF90AF906D +:2009E0009F908F907F906F905F9008951F920F920FB60F9211242F933F934F935F936F93B8 +:200A00007F938F939F93AF93BF93EF93FF938091E1001092E100982F83FF0FC01092E900B0 +:200A200081E08093EB001092EC0082E38093ED001092370188E08093F00092FF34C083E037 +:200A40008093E9008091F200882319F08AE38093E8008FB7F89492E09093E9009091F20018 +:200A60008FBF992321F082E891E00E94530780913501882351F080913501815080933501F0 +:200A800080913501882309F45D9A80913601882351F0809136018150809336018091360191 +:200AA000882309F4289AFF91EF91BF91AF919F918F917F916F915F914F913F912F910F90CD +:200AC0000FBE0F901F9018950F931F93DF93CF930F92CDB7DEB719828E010F5F1F4FC8019D +:200AE0000E947907C8010E941209898190E00F90CF91DF911F910F9108951F920F920FB661 +:200B00000F921124EF92FF921F932F933F934F935F936F937F938F939F93AF93BF93EF9355 +:200B2000FF93DF93CF93CDB7DEB76197DEBFCDBF1092E9008091E80083FF0FC1FE01319679 +:200B40009E01275F3F4F03C08091F1008193E217F307D1F7289884E68093360182EF809356 +:200B6000E800998197FF05C08091E80080FFFCCF03C08EEF8093E800292F30E0C901807672 +:200B80009070892B09F0C2C08A81882329F41092F1001092F100D6C0813009F4D3C08330A3 +:200BA00009F4D0C0853049F48091E80080FFFCCF8B8180688093E300C5C0863009F07CC019 +:200BC0001C81EF80F8841230C1F51092E900109239011092380110923B0110923A010E94F6 +:200BE000640599E0FE013996DF01292F1D922A95E9F799871A8791E09E8790E8988B9AEF44 +:200C0000998B2091380130913901275F3F4F3C872B878D871092E9001092390110923801EC +:200C2000F0923B01E0923A0180E0BF0149E050E00E94CC030E94640585C01092E9001092E2 +:200C4000390110923801F0923B01E0923A01123241F482E290E00E940A09892B09F476C02B +:200C600071C0113079F488E0E816F10419F481E080933C0180913C01882309F06BC0ECE68D +:200C8000F1E013C0133009F061C08B81882319F4EEE2F1E00AC0823019F4E2E3F1E005C00A +:200CA000813009F053C0E4E5F1E0449180E8BF0150E00E94CC0346C0873009F447C08830C6 +:200CC00021F481E08093F1003DC08930D9F523703070232BD9F5E1E9F1E091E031E026E3A1 +:200CE0009093E9003093EB0084918093EC002093ED009F5F3196953099F78EE78093EA00FA +:200D00001092EA008B81809337011CC08F8198851092E900109239011092380190933B0146 +:200D200080933A018D81882329F4CE0101960E94850706C0823051F4CE0101960E94DB0754 +:200D4000882321F08EEF8093E80007C081E28093EB0003C0EEE7F1E0A8CF6196DEBFCDBF37 +:200D6000CF91DF91FF91EF91BF91AF919F918F917F916F915F914F913F912F911F91FF9004 +:200D8000EF900F900FBE0F901F90189520917E0130917F018091800190918101281B390B40 +:200DA0002F733070C901089520917E0130917F0180918001909181012817390719F42FEF3A +:200DC0003FEF09C0E0918001F0918101E25CFE4F8081282F30E0C901089520917E013091DC +:200DE0007F0180918001909181012817390719F42FEF3FEF13C0E0918001F0918101E25C60 +:200E0000FE4F2081809180019091810101968F739070909381018093800130E0C901089566 +:200E2000109285011092840188EE93E0A0E0B0E08093860190938701A0938801B09389019C +:200E400080E191E0909383018093820108950F931F93DF93CF930F92CDB7DEB78C0169838B +:200E600080910901882369F083E0BE016F5F7F4F41E050E00E9451041816190614F49C015B +:200E800007C081E090E0F8019383828320E030E0C9010F90CF91DF911F910F91089583E00D +:200EA0000E9428040895CF93DF9312C082E00E94B3032FEF8F3F9207C9F0E0917E01F091B8 +:200EC0007F01E25CFE4F8083D0937F01C0937E01C0917E01D0917F012196CF73D070809154 +:200EE000800190918101C817D90701F7DF91CF910895FC0180818E5F808380E865E971E0B5 +:200F000042E450E00E94CC030895FC0181819081913A59F4813209F04CC080E062E071E09A +:200F200047E050E00E94CC0342C0913209F041C0803239F482E091E067E070E00E9410042B +:200F400036C0823209F035C08281809309018091020190910301A0910401B0910501805B48 +:200F60009440A040B04019F58091090180FD12C087E797E790930108809300082BE088E1AE +:200F800090E00FB6F894A895809360000FBE209360000DC088E10FB6F89480936000109264 +:200FA00060000FBEA895109201081092000881E0089580E00895FC0191818081813A31F487 +:200FC000913089F080E0933089F40DC0813269F49B3021F4828180930A0105C09A3029F4AD +:200FE000828180930B0181E0089580E00895EF92FF920F931F938C01E62EDC01ED91FC91E5 +:201000000480F581E02D0995F82ED801ED91FC910680F781E02DC8016E2D09958F2D90E0E8 +:201020001F910F91FF90EF90089510929001109294011092930182E291E090939201809377 +:2010400091010895EF92FF920F931F93DF93CF930F92CDB7DEB789838B017A0184E0BE0137 +:201060006F5F7F4F41E050E00E94510484E4B801A7010E9451040F90CF91DF911F910F910D +:20108000FF90EF90089582E048E050E00E9422080895FC01168217821086118612861386F6 +:2010A00014823496BF010E9443080895DC01683810F0685829C0E62FF0E067FF13C0E0580A +:2010C000F04081E090E002C0880F991FEA95E2F7809514962C911497282314962C93149720 +:2010E00060E012C0EB5AFD4F6491662319F420E030E01DC067FF08C014968C9114978D7F29 +:2011000014968C9314976F77FD0190E0662321F08681861709F416829F5F31969630B1F701 +:20112000CD011496BD010E94430821E030E0C9010895CF93DF93DC01683810F0685825C01E +:20114000E62FF0E067FF12C0E058F04081E090E002C0880F991FEA95E2F714962C911497BE +:20116000282B14962C93149760E00FC0EB5AFD4F64916623D9F167FF08C014968C91149780 +:20118000826014968C9314976F7716968C9116978617A9F117968C911797861781F1189631 +:2011A0008C911897861759F119968C911997861731F11A968C911A97861709F11B968C915E +:2011C0001B978617E1F0ED01E0E0F0E09E2F8E81882321F4EA0FFB1F668306C09F5F31964E +:2011E0002196E630F10591F7963049F481E090E013969C938E93129720E030E007C0CD0189 +:201200001496BD010E94430821E030E0C901DF91CF91089580E867ED71E045E650E00E9427 +:20122000CC030895FC0180818F5F808380E86CE372E049E150E00E94CC030895CF92DF9210 +:20124000EF92FF920F931F93CF93DF937C016B018A01C0E0D0E00FC0D6016D916D01D701A6 +:20126000ED91FC910190F081E02DC7010995C80FD91F015010400115110571F7CE01DF91AB +:20128000CF911F910F91FF90EF90DF90CF900895EE0FFF1F0590F491E02D0994F894FFCFEC +:2012A0000D0000E100000000000001010000000027071E09C606ED06D4064F0753070000A0 +:2012C0000000F7071E09990856084908FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD +:2012E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E +:20130000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED +:20132000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCD +:20134000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD +:20136000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D +:20138000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6D +:2013A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4D +:2013C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2D +:2013E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D +:20140000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC +:20142000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCC +:20144000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAC +:20146000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8C +:20148000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C +:2014A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C +:2014C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C +:2014E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0C +:20150000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEB +:20152000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCB +:20154000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAB +:20156000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8B +:20158000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6B +:2015A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4B +:2015C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2B +:2015E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B +:20160000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA +:20162000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCA +:20164000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAA +:20166000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8A +:20168000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A +:2016A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4A +:2016C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A +:2016E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A +:20170000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9 +:20172000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9 +:20174000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9 +:20176000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF89 +:20178000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF69 +:2017A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF49 +:2017C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF29 +:2017E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF09 +:20180000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8 +:20182000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC8 +:20184000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA8 +:20186000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF88 +:20188000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF68 +:2018A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF48 +:2018C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF28 +:2018E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF08 +:20190000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7 +:20192000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7 +:20194000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA7 +:20196000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87 +:20198000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF67 +:2019A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF47 +:2019C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF27 +:2019E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07 +:201A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6 +:201A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC6 +:201A4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA6 +:201A6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF86 +:201A8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF66 +:201AA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF46 +:201AC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF26 +:201AE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF06 +:201B0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5 +:201B2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC5 +:201B4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5 +:201B6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF85 +:201B8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF65 +:201BA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF45 +:201BC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF25 +:201BE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05 +:201C0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4 +:201C2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4 +:201C4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA4 +:201C6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF84 +:201C8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF64 +:201CA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF44 +:201CC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF24 +:201CE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04 +:201D0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3 +:201D2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC3 +:201D4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA3 +:201D6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF83 +:201D8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF63 +:201DA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF43 +:201DC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF23 +:201DE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03 +:201E0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2 +:201E2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC2 +:201E4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA2 +:201E6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF82 +:201E8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF62 +:201EA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF42 +:201EC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF22 +:201EE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02 +:201F0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 +:201F2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC1 +:201F4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA1 +:201F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF81 +:201F8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF61 +:201FA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF41 +:201FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF21 +:201FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01 +:20200000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 +:20202000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 +:20204000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0 +:20206000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 +:20208000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60 +:2020A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40 +:2020C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20 +:2020E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +:20210000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF +:20212000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF +:20214000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F +:20216000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F +:20218000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F +:2021A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F +:2021C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F +:2021E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +:20220000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDE +:20222000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBE +:20224000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9E +:20226000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7E +:20228000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E +:2022A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E +:2022C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E +:2022E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE +:20230000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDD +:20232000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBD +:20234000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9D +:20236000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7D +:20238000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D +:2023A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D +:2023C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D +:2023E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD +:20240000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC +:20242000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBC +:20244000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9C +:20246000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C +:20248000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5C +:2024A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3C +:2024C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C +:2024E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC +:20250000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB +:20252000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBB +:20254000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9B +:20256000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7B +:20258000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B +:2025A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B +:2025C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1B +:2025E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB +:20260000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDA +:20262000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBA +:20264000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A +:20266000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7A +:20268000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5A +:2026A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3A +:2026C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1A +:2026E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA +:20270000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9 +:20272000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB9 +:20274000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99 +:20276000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF79 +:20278000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF59 +:2027A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF39 +:2027C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF19 +:2027E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9 +:20280000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8 +:20282000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB8 +:20284000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF98 +:20286000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF78 +:20288000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF58 +:2028A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF38 +:2028C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF18 +:2028E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8 +:20290000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7 +:20292000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB7 +:20294000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF97 +:20296000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77 +:20298000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF57 +:2029A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF37 +:2029C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF17 +:2029E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7 +:202A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6 +:202A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB6 +:202A4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF96 +:202A6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF76 +:202A8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF56 +:202AA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF36 +:202AC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF16 +:202AE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6 +:202B0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD5 +:202B2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5 +:202B4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF95 +:202B6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF75 +:202B8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF55 +:202BA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF35 +:202BC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF15 +:202BE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5 +:202C0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4 +:202C2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB4 +:202C4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF94 +:202C6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74 +:202C8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF54 +:202CA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF34 +:202CC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF14 +:202CE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4 +:202D0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3 +:202D2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB3 +:202D4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF93 +:202D6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF73 +:202D8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF53 +:202DA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF33 +:202DC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF13 +:202DE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3 +:202E0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD2 +:202E2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB2 +:202E4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF92 +:202E6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72 +:202E8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF52 +:202EA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF32 +:202EC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF12 +:202EE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2 +:202F0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD1 +:202F2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB1 +:202F4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF91 +:202F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF71 +:202F8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF51 +:202FA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF31 +:202FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF11 +:202FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1 +:20300000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0 +:20302000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0 +:20304000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90 +:20306000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70 +:20308000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50 +:2030A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30 +:2030C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF10 +:2030E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 +:20310000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF +:20312000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF +:20314000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F +:20316000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F +:20318000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F +:2031A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F +:2031C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F +:2031E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF +:20320000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE +:20322000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAE +:20324000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E +:20326000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E +:20328000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4E +:2032A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E +:2032C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E +:2032E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEE +:20330000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCD +:20332000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD +:20334000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D +:20336000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6D +:20338000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4D +:2033A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2D +:2033C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D +:2033E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED +:20340000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCC +:20342000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAC +:20344000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8C +:20346000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C +:20348000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C +:2034A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C +:2034C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0C +:2034E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC +:20350000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCB +:20352000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAB +:20354000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8B +:20356000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6B +:20358000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4B +:2035A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2B +:2035C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B +:2035E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEB +:20360000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCA +:20362000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAA +:20364000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8A +:20366000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A +:20368000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4A +:2036A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A +:2036C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A +:2036E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA +:20370000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9 +:20372000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9 +:20374000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF89 +:20376000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF69 +:20378000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF49 +:2037A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF29 +:2037C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF09 +:2037E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9 +:20380000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC8 +:20382000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA8 +:20384000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF88 +:20386000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF68 +:20388000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF48 +:2038A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF28 +:2038C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF08 +:2038E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8 +:20390000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7 +:20392000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA7 +:20394000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87 +:20396000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF67 +:20398000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF47 +:2039A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF27 +:2039C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07 +:2039E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7 +:203A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC6 +:203A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA6 +:203A4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF86 +:203A6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF66 +:203A8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF46 +:203AA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF26 +:203AC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF06 +:203AE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6 +:203B0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC5 +:203B2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5 +:203B4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF85 +:203B6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF65 +:203B8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF45 +:203BA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF25 +:203BC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05 +:203BE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5 +:203C0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4 +:203C2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA4 +:203C4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF84 +:203C6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF64 +:203C8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF44 +:203CA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF24 +:203CC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04 +:203CE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4 +:203D0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC3 +:203D2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA3 +:203D4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF83 +:203D6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF63 +:203D8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF43 +:203DA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF23 +:203DC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03 +:203DE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3 +:203E0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC2 +:203E2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA2 +:203E4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF82 +:203E6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF62 +:203E8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF42 +:203EA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF22 +:203EC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02 +:203EE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2 +:203F0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC1 +:203F2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA1 +:203F4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF81 +:203F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF61 +:203F8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF41 +:203FA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF21 +:203FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01 +:203FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 +:20400000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 +:20402000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0 +:20404000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 +:20406000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60 +:20408000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40 +:2040A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20 +:2040C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +:2040E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 +:20410000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF +:20412000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F +:20414000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F +:20416000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F +:20418000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F +:2041A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F +:2041C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +:2041E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF +:20420000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBE +:20422000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9E +:20424000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7E +:20426000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E +:20428000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E +:2042A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E +:2042C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE +:2042E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDE +:20430000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBD +:20432000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9D +:20434000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7D +:20436000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D +:20438000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D +:2043A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D +:2043C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD +:2043E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDD +:20440000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBC +:20442000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9C +:20444000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C +:20446000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5C +:20448000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3C +:2044A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C +:2044C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC +:2044E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC +:20450000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBB +:20452000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9B +:20454000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7B +:20456000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B +:20458000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B +:2045A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1B +:2045C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB +:2045E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB +:20460000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBA +:20462000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A +:20464000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7A +:20466000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5A +:20468000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3A +:2046A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1A +:2046C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA +:2046E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDA +:20470000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB9 +:20472000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99 +:20474000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF79 +:20476000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF59 +:20478000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF39 +:2047A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF19 +:2047C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9 +:2047E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9 +:20480000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB8 +:20482000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF98 +:20484000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF78 +:20486000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF58 +:20488000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF38 +:2048A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF18 +:2048C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8 +:2048E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8 +:20490000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB7 +:20492000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF97 +:20494000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77 +:20496000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF57 +:20498000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF37 +:2049A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF17 +:2049C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7 +:2049E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7 +:204A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB6 +:204A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF96 +:204A4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF76 +:204A6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF56 +:204A8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF36 +:204AA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF16 +:204AC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6 +:204AE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6 +:204B0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5 +:204B2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF95 +:204B4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF75 +:204B6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF55 +:204B8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF35 +:204BA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF15 +:204BC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5 +:204BE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD5 +:204C0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB4 +:204C2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF94 +:204C4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74 +:204C6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF54 +:204C8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF34 +:204CA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF14 +:204CC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4 +:204CE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4 +:204D0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB3 +:204D2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF93 +:204D4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF73 +:204D6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF53 +:204D8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF33 +:204DA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF13 +:204DC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3 +:204DE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3 +:204E0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB2 +:204E2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF92 +:204E4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72 +:204E6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF52 +:204E8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF32 +:204EA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF12 +:204EC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2 +:204EE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD2 +:204F0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB1 +:204F2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF91 +:204F4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF71 +:204F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF51 +:204F8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF31 +:204FA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF11 +:204FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1 +:204FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD1 +:20500000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0 +:20502000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90 +:20504000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70 +:20506000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50 +:20508000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30 +:2050A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF10 +:2050C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 +:2050E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0 +:20510000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF +:20512000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F +:20514000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F +:20516000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F +:20518000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F +:2051A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F +:2051C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF +:2051E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF +:20520000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAE +:20522000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E +:20524000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E +:20526000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4E +:20528000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E +:2052A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E +:2052C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEE +:2052E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE +:20530000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD +:20532000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D +:20534000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6D +:20536000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4D +:20538000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2D +:2053A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D +:2053C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED +:2053E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCD +:20540000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAC +:20542000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8C +:20544000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C +:20546000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C +:20548000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C +:2054A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0C +:2054C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC +:2054E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCC +:20550000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAB +:20552000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8B +:20554000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6B +:20556000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4B +:20558000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2B +:2055A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B +:2055C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEB +:2055E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCB +:20560000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAA +:20562000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8A +:20564000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A +:20566000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4A +:20568000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A +:2056A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A +:2056C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA +:2056E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCA +:20570000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9 +:20572000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF89 +:20574000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF69 +:20576000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF49 +:20578000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF29 +:2057A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF09 +:2057C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9 +:2057E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9 +:20580000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA8 +:20582000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF88 +:20584000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF68 +:20586000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF48 +:20588000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF28 +:2058A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF08 +:2058C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8 +:2058E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC8 +:20590000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA7 +:20592000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87 +:20594000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF67 +:20596000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF47 +:20598000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF27 +:2059A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07 +:2059C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7 +:2059E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7 +:205A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA6 +:205A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF86 +:205A4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF66 +:205A6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF46 +:205A8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF26 +:205AA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF06 +:205AC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6 +:205AE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC6 +:205B0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5 +:205B2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF85 +:205B4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF65 +:205B6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF45 +:205B8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF25 +:205BA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05 +:205BC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5 +:205BE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC5 +:205C0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA4 +:205C2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF84 +:205C4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF64 +:205C6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF44 +:205C8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF24 +:205CA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04 +:205CC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4 +:205CE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4 +:205D0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA3 +:205D2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF83 +:205D4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF63 +:205D6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF43 +:205D8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF23 +:205DA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03 +:205DC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3 +:205DE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC3 +:205E0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA2 +:205E2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF82 +:205E4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF62 +:205E6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF42 +:205E8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF22 +:205EA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02 +:205EC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2 +:205EE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC2 +:205F0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA1 +:205F2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF81 +:205F4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF61 +:205F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF41 +:205F8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF21 +:205FA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01 +:205FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 +:205FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC1 +:20600000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0 +:20602000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 +:20604000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60 +:20606000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40 +:20608000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20 +:2060A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +:2060C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 +:2060E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 +:20610000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F +:20612000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F +:20614000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F +:20616000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F +:20618000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F +:2061A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +:2061C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF +:2061E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF +:20620000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9E +:20622000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7E +:20624000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E +:20626000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E +:20628000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E +:2062A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE +:2062C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDE +:2062E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBE +:20630000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9D +:20632000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7D +:20634000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D +:20636000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D +:20638000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D +:2063A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD +:2063C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDD +:2063E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBD +:20640000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9C +:20642000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C +:20644000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5C +:20646000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3C +:20648000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C +:2064A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC +:2064C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC +:2064E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBC +:20650000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9B +:20652000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7B +:20654000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B +:20656000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B +:20658000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1B +:2065A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB +:2065C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB +:2065E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBB +:20660000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A +:20662000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7A +:20664000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5A +:20666000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3A +:20668000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1A +:2066A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA +:2066C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDA +:2066E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBA +:20670000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99 +:20672000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF79 +:20674000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF59 +:20676000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF39 +:20678000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF19 +:2067A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9 +:2067C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9 +:2067E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB9 +:20680000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF98 +:20682000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF78 +:20684000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF58 +:20686000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF38 +:20688000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF18 +:2068A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8 +:2068C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8 +:2068E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB8 +:20690000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF97 +:20692000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77 +:20694000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF57 +:20696000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF37 +:20698000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF17 +:2069A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7 +:2069C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7 +:2069E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB7 +:206A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF96 +:206A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF76 +:206A4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF56 +:206A6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF36 +:206A8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF16 +:206AA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6 +:206AC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6 +:206AE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB6 +:206B0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF95 +:206B2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF75 +:206B4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF55 +:206B6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF35 +:206B8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF15 +:206BA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5 +:206BC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD5 +:206BE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5 +:206C0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF94 +:206C2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74 +:206C4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF54 +:206C6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF34 +:206C8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF14 +:206CA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4 +:206CC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4 +:206CE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB4 +:206D0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF93 +:206D2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF73 +:206D4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF53 +:206D6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF33 +:206D8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF13 +:206DA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3 +:206DC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3 +:206DE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB3 +:206E0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF92 +:206E2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72 +:206E4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF52 +:206E6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF32 +:206E8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF12 +:206EA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2 +:206EC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD2 +:206EE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB2 +:206F0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF91 +:206F2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF71 +:206F4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF51 +:206F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF31 +:206F8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF11 +:206FA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1 +:206FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD1 +:206FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB1 +:2070000055C000006EC000006CC000006AC0000068C0000066C0000064C0000062C0000043 +:2070200060C000005EC00000F2C400005AC0000058C0000056C0000054C0000052C00000EE +:2070400050C0000078C000004CC000004AC0000048C0000046C0000044C0000042C00000BE +:2070600040C000003EC000003CC000003AC0000038C0000036C0000034C0000032C0000048 +:2070800030C000002EC000002CC000002AC0000028C0000026C0000024C0000022C00000A8 +:2070A00020C000001EC000001CC0000011241FBECFEFDAE0DEBFCDBF11E0A0E0B1E0E2E3BC +:2070C000FFE702C005900D92A83AB107D9F711E0A8EAB1E001C01D92AE3BB107E1F78FD30B +:2070E00026C78ECFF89410926F0010928100109285001092840081E085BF15BE47985D9AEB +:20710000289A0C94000008952091B2013091B3012F5F3F4F3093B3012093B201932F37FFA6 +:2071200003C08EEF831B982F990F921710F447980895479A08951F920F920FB60F9211246E +:207140002F938F939F93EF93FF9310928500109284008091A8019091A901009741F00197D3 +:207160009093A9018093A801892B09F45D9A8091AA019091AB01009741F001979093AB0126 +:207180008093AA01892B09F4289AE0E0F0E0859194918F5F9F4F49F08091AC019091AD0151 +:2071A00001969093AD018093AC01FF91EF919F918F912F910F900FBE0F901F90189584E0BC +:2071C0008093E9000DC08091E8008B778093E80003C08EB3882351F08091E80082FFF9CFBE +:2071E0008091E80085FFEFCF8091F1000895982F83E08093E9008091E80085FD0DC0809136 +:20720000E8008E778093E80003C08EB3882369F08091E80080FFF9CF9093F1005D9884E6CB +:2072200090E09093A9018093A80108954F925F926F927F928F929F92AF92BF92CF92DF921E +:20724000EF92FF920F931F93CF93DF9384E08093E9008091E80082FF57C2289884E690E067 +:207260009093AB018093AA01AADF182F853481F48CE49DE19093AD018093AC0107B600FC4B +:20728000FDCFF999FECF81E180935700E89503C0843519F494DF8DE00DC28C34E1F38035F9 +:2072A000D1F3843721F484E4A2DF80E003C2813611F489E5FFC18134B1F481DF182F7FDFE3 +:2072C00090E0880F991FAA2797FDA095BA2F312F330F20E0442737FD4095542F822B932B68 +:2072E000A42BB52BB8C1803711F483E5E3C1833549F4C0E0D1E089917ADF21E0C730D20714 +:20730000D1F7D9C1863521F481E371DF80E3D2C1833731F487E86BDF85E969DF8EE1CAC149 +:207320008536B9F4E0E0F0E093E085E090935700E89507B600FCFDCF80935700E89507B65D +:2073400000FCFDCFE058FF4FA0E7E030FA0771F7A2CF823739F4E1E0F0E089E08093570024 +:207360008491A8C1863439F4E0E0F0E089E08093570084919FC18E3439F4E3E0F0E089E0E5 +:2073800080935700849196C1813539F4E2E0F0E089E08093570084918DC1823631F489E521 +:2073A00026DF80E024DF80E885C1823419F0873609F0E5C01092AD011092AC0100DF082FE8 +:2073C000FEDEF82EFCDE682E8554823008F071C1902F80E0CF2DD0E0C82BD92B10926F00B3 +:2073E000173609F04BC081E180935700E895DD24CC24C3943FC0E090AE01F090AF010091CC +:20740000B0011091B101B6E46B16D9F4ED2DF0E0EE29FF29E4918E2FEADEDD2081F082E08D +:2074200090E0A0E0B0E0E80EF91E0A1F1B1FE092AE01F092AF010093B0011093B101DC2470 +:2074400018C0D801C701B695A7959795879559D5CEDE82E090E0A0E0B0E0E80EF91E0A1FF2 +:207460001B1FE092AE01F092AF010093B0011093B1012197209709F0BECF7DC08090AE01F5 +:207480009090AF01A090B001B090B10196E4691609F05DC083E0F40180935700E89507B63E +:2074A00000FCFDCF54C0F6E46F1661F5772031F1E090AE01F090AF010091B0011091B1019E +:2074C0007EDED82ECC24852D90E08C299D29F7010C0140925700E895112482E090E0A0E08B +:2074E000B0E0E80EF91E0A1F1B1FE092AE01F092AF010093B0011093B10102C060DE582E1A +:20750000742423C0E090AE01F090AF010091B0011091B10116950795F794E79450DE682FFA +:20752000C701F7D48091AE019091AF01A091B001B091B1010296A11DB11D8093AE01909349 +:20754000AF01A093B001B093B101219704C05524772444244394209709F0A5CF96E46916B6 +:2075600041F485E0F40180935700E89507B600FCFDCF8DE03CDE82E080936F009CC0833492 +:2075800071F40091AE011091AF0119DE90E021E0F8010C0120935700E89511247CCE8336C8 +:2075A00019F5E090AE01F090AF010091B0011091B10105DEF701E16090E021E00C0120938C +:2075C0005700E895112482E090E0A0E0B0E0E80EF91E0A1F1B1FE092AE01F092AF0100936A +:2075E000B0011093B10157CE8D3661F4E091AE01F091AF0185E080935700E89507B600FCF2 +:20760000FDCF49CE823551F4E091AE01F091AF0105911491812FEBDD802F4CC0843421F5FE +:20762000E090AE01F090AF010091B0011091B10116950795F794E794C2DD682FC70169D4DE +:207640008091AE019091AF01A091B001B091B1010296A11DB11D8093AE019093AF01A093D8 +:20766000B001B093B10117CE843609F5E090AE01F090AF010091B0011091B101D801C70142 +:20768000B695A795979587953CD4B1DD82E090E0A0E0B0E0E80EF91E0A1F1B1FE092AE010A +:2076A000F092AF010093B0011093B10104C08B3111F08FE39CDD83E08093E9009091E8002B +:2076C0008091E8008E778093E80095FF04C010C08EB38823C9F08091E80080FFF9CF809193 +:2076E000E8008E778093E80003C08EB3882361F08091E80080FFF9CF84E08093E9008091F1 +:20770000E8008B778093E800DF91CF911F910F91FF90EF90DF90CF90BF90AF909F908F90AC +:207720007F906F905F904F9008959091B601892F8F77813249F58091B7018032A1F081328A +:2077400019F5913A09F58091E800877F8093E8008DE091E067E070E00BD28091E8008B770B +:207760008093E8000895913279F48091E800877F8093E8008DE091E067E070E05DD2809192 +:20778000E8008E778093E800089582E061EC42E0B5D083E061E842E1B1D084E060E842E1EF +:2077A000ADC084B7877F84BF88E10FB6F89480936000109260000FBE20E880E090E00FB63F +:2077C000F89420936100809361000FBE81E085BF92E095BF3F9A209A559AE1E6F0E02083A1 +:2077E000108247985D9A289A109289008AEF8093880090936F0083E080938100F0C0409116 +:20780000000850910108109201081092000894B714BE88E10FB6F8948093600010926000D5 +:207820000FBE292F30E0F901E270F07091FD18C090FF05C0859194918F5F9F4F81F423FFFF +:207840000FC08091090190910A014817590741F0E0E0F0E0859194918F5F9F4F09F042DC64 +:20786000A0DF78941092AD011092AC010CC0DEDC36D38091AC019091AD0181549F4110F00D +:207880001092140141DC80911401882381F78091E00081608093E00025DC80E090E0089598 +:2078A000FA01923049F0933061F09130F9F485E191E022E130E01EC087E291E02EE330E04D +:2078C00019C0882329F485E691E024E030E012C0813029F489E691E022E230E00BC0823006 +:2078E00029F48DE891E028E130E004C080E090E020E030E091838083C90108958093E9004E +:207900008091EB0081608093EB001092ED006093EC004093ED008091EE00881F8827881F62 +:2079200008958091B60188238CF403C08EB38823B1F08091E80082FFF9CF8091E8008B772A +:207940008093E80008958EB3882349F08091E80080FFF9CF8091E8008E778093E800089594 +:20796000EF92FF920F931F9345D04CD008ED10E0F80180818F77808380818068808380819B +:207980008F7D808319BC1EBA1092B40180EEE82EF12CF70180818B7F8083F8018081816052 +:2079A000808380E060E042E0A9DFE1EEF0E080818E7F8083E2EEF0E0808181608083808144 +:2079C00088608083F70180818E7F8083F8018081806180831F910F91FF90EF900895E7ED06 +:2079E000F0E08081816080838AE482BF81E08093B501B6CFE8EDF0E080818E7F808310921C +:207A0000E20008951092DA001092E10008951F920F920FB60F9211242F933F934F935F93F6 +:207A20006F937F938F939F93AF93BF93EF93FF938091DA0080FF1BC08091D80080FF17C0B2 +:207A40008091DA008E7F8093DA008091D90080FF0BC080E189BD82E189BD09B400FEFDCF36 +:207A600081E08EBB3BD203C019BC1EBA37D28091E10080FF17C08091E20080FF13C0809138 +:207A8000E2008E7F8093E2008091E20080618093E2008091D80080628093D80019BC85E049 +:207AA0008EBB1CD28091E10084FF2CC08091E20084FF28C080E189BD82E189BD09B400FEC5 +:207AC000FDCF8091D8008F7D8093D8008091E1008F7E8093E1008091E2008F7E8093E20012 +:207AE0008091E20081608093E2008091B401882331F48091E30087FD02C081E001C084E067 +:207B00008EBBECD18091E10083FF21C08091E20083FF1DC08091E100877F8093E10082E06A +:207B20008EBB1092B4018091E1008E7F8093E1008091E2008E7F8093E2008091E2008061E9 +:207B40008093E20080E060E042E0D8DEC7D1FF91EF91BF91AF919F918F917F916F915F9130 +:207B60004F913F912F910F900FBE0F901F9018959C014091BC015091BD014617570718F49D +:207B8000F90190E044C06115710511F0AB01F8CF8091E8008E778093E80040E050E0F0CF0F +:207BA0008EB3882309F444C0853009F443C08091E80083FF02C081E008958091E80082FD70 +:207BC00031C08091E80080FF22C08091F3009091F200782F60E0292F30E0262B372B07C07A +:207BE00081918093F100415050402F5F3F4F4115510519F02830310598F390E02830310566 +:207C000009F491E08091E8008E778093E8004115510531F6992321F605C08EB3882341F075 +:207C2000853041F08091E80082FFF7CF80E0089582E0089583E008959C016115710529F47C +:207C40008091E8008B778093E800F90126C08EB3882391F1853091F18091E80083FF02C06C +:207C600081E008958091E80082FFF1CF06C08091F10081936150704059F02091F300809191 +:207C8000F200322F20E090E0822B932B892B79F78091E8008B778093E80061157105B9F601 +:207CA00005C08EB3882341F0853041F08091E80080FFF7CF80E0089582E0089583E00895C2 +:207CC0000F931F93DF93CF9300D0CDB7DEB7E6EBF1E08091F100819381E0EE3BF807C9F792 +:207CE00024DD8091E80083FFE4C08091B6019091B701953009F46DC0963040F4913081F1A7 +:207D0000913070F0933009F0D4C02AC0983009F4A3C0993009F4B2C0963009F0CAC07CC023 +:207D2000803809F4C6C0823809F0C3C08091BA0187708093E9008091EB001092E9002091DB +:207D4000E800277F2093E80090E025E0969587952A95E1F781708093F1001092F10087C0D8 +:207D6000882319F0823009F0A4C08F71823009F0A0C08091B801882331F52091BA01277097 +:207D800009F497C02093E9008091EB0080FF1BC0933021F48091EB00806213C08091EB0018 +:207DA00080618093EB0081E090E002C0880F991F2A95E2F78093EA001092EA008091EB00E5 +:207DC00088608093EB001092E9008091E800877F51C0882309F06DC01091B8011F770FB79B +:207DE000F8948091E800877F8093E8009ADD8091E80080FFFCCF8091E3008078812B809398 +:207E0000E30080688093E300112311F482E001C083E08EBB0FBF4DC08058823008F049C033 +:207E20008091B8019091B9016091BA01AE014F5F5F4F36DDBC01009709F43BC08091E8008E +:207E4000877F8093E80089819A8192DE8091E8008B778093E8002DC0803859F58091E800AA +:207E6000877F8093E8008091B4018093F1008091E8008E778093E80054DD1BC08823C9F4CA +:207E80009091B8019230A8F48091E800877F8093E8009093B40145DD8091B401882331F420 +:207EA0008091E30087FD02C081E001C084E08EBB6CDC8091E80083FF0AC08091EB0080624E +:207EC0008093EB008091E800877F8093E8000F900F90CF91DF911F910F91089508951F9360 +:207EE0008EB3882361F01091E9001092E9008091E80083FF01C0E4DE17701093E9001F916F +:207F00000895F999FECF92BD81BDF89A992780B50895262FF999FECF1FBA92BD81BD20BDBD +:207F20000FB6F894FA9AF99A0FBE01960895F894FFCF4341544552494E4100777700080031 +:207F400000000000000801120110010200000841233C0001000201000109023E00020100F9 +:207F600080320904000001020201000524001001042402040524060001070582030800FF0C +:207F800009040100020A000000070504021000010705830210000104030904220341007216 +:207FA000006400750069006E006F0020004500730070006C006F0072006100200000001874 +:1A7FC00003410072006400750069006E006F0020004C004C004300000000D7 +:00000001FF diff --git a/external/arduino/avr/bootloaders/caterina/Esplora-prod-firmware-2012-12-10.txt b/external/arduino/avr/bootloaders/caterina/Esplora-prod-firmware-2012-12-10.txt new file mode 100644 index 000000000..aef5df13d --- /dev/null +++ b/external/arduino/avr/bootloaders/caterina/Esplora-prod-firmware-2012-12-10.txt @@ -0,0 +1,6 @@ +LUFA: 111009 +make: 3.81 +avrdude: 5.11.1 +avr-libc: 1.6.7 +binutils-avr: 2.19 +gcc-avr 4.3.3 diff --git a/external/arduino/avr/bootloaders/caterina/Leonardo-prod-firmware-2012-04-26.hex b/external/arduino/avr/bootloaders/caterina/Leonardo-prod-firmware-2012-04-26.hex new file mode 100644 index 000000000..de7b53c7a --- /dev/null +++ b/external/arduino/avr/bootloaders/caterina/Leonardo-prod-firmware-2012-04-26.hex @@ -0,0 +1,1024 @@ +:200000000C946E010C9496010C9496010C9496010C9496010C9496010C9496010C94960150 +:200020000C9496010C9496010C9410050C949B050C9496010C9496010C9496010C94960181 +:200040000C9496010C9496010C9496010C9496010C9496010C9496010C9496010C94B501C9 +:200060000C9496010C9496010C9496010C9496010C9496010C9496010C9496010C949601C8 +:200080000C9496010C9496010C9496010C9496010C9496010C9496010C9496010C949601A8 +:2000A0000C9496010C9496010C94960100000000240027002A002D003000000000002500A4 +:2000C00028002B002E003100000000002300260029002C002F00040404040403040502027D +:2000E0000202040302020202060606060606040402020204040802011040804010204080A8 +:200100004080080204018040201002011080102040400000000200080E0000030401000BB2 +:200120000000070605040100080A0B0C0D09040309042203410072006400750069006E00CD +:200140006F0020004C0065006F006E006100720064006F00180341007200640075006900CC +:200160006E006F0020004C004C004300120100020000004041233680000101020001120120 +:200180000002020000404123368000010102000100C18081C1080B00020202010009040052 +:2001A000000102020000052400100105240101010424020605240600010705810310004094 +:2001C00009040100020A000000070502024000000705830240000005010902A1010901A186 +:2001E000008501050919012903150025019503750181029501750581030501093009310943 +:20020000381581257F750895038106C0C005010906A1018502050719E029E715002501754D +:20022000019508810295017508810395067508150025650507190029658100C0090402004C +:2002400001030000000921010100012265000705840340000100000000000000002A2B2895 +:200260000000000000000000000000000000000000000000002C9EB4A0A1A2A434A6A7A553 +:20028000AE362D3738271E1F20212223242526B333B62EB7B89F8485868788898A8B8C8D58 +:2002A0008E8F909192939495969798999A9B9C9D2F3130A3AD350405060708090A0B0C0D7C +:2002C0000E0F101112131415161718191A1B1C1DAFB1B0B500004C042E072C0811241FBE36 +:2002E000CFEFDAE0DEBFCDBF11E0A0E0B1E0EEECF2E102C005900D92AC32B107D9F711E061 +:20030000ACE2B1E001C01D92AD39B107E1F712E0CCEDD2E004C02297FE010E946109C63DF0 +:20032000D107C9F70E9486030C9465090C9400008091000161E00E94530364E873E080E002 +:2003400090E00E94FD018091000160E00E9453036CE474E080E090E00E94FD010895809181 +:20036000000161E00E94B60208951F920F920FB60F9211242F933F938F939F93AF93BF93DB +:200380008091300190913101A0913201B0913301309134010196A11DB11D232F2D5F2D3794 +:2003A00020F02D570196A11DB11D209334018093300190933101A0933201B0933301809117 +:2003C0002C0190912D01A0912E01B0912F010196A11DB11D80932C0190932D01A0932E01BA +:2003E000B0932F01BF91AF919F918F913F912F910F900FBE0F901F9018959B01AC017FB734 +:20040000F89480912C0190912D01A0912E01B0912F0166B5A89B05C06F3F19F00196A11DC3 +:20042000B11D7FBFBA2FA92F982F8827860F911DA11DB11D62E0880F991FAA1FBB1F6A9577 +:20044000D1F7BC012DC0FFB7F89480912C0190912D01A0912E01B0912F01E6B5A89B05C0E7 +:20046000EF3F19F00196A11DB11DFFBFBA2FA92F982F88278E0F911DA11DB11DE2E0880FFD +:20048000991FAA1FBB1FEA95D1F7861B970B885E9340C8F2215030404040504068517C4F8F +:2004A000211531054105510571F60895789484B5826084BD84B5816084BD85B5826085BD0F +:2004C00085B5816085BDEEE6F0E0808181608083E1E8F0E010828081826080838081816043 +:2004E0008083E0E8F0E0808181608083E1EBF0E0808184608083E0EBF0E080818160808378 +:20050000E1E9F0E0808182608083808181608083E0E9F0E0808181608083E1ECF0E080815A +:2005200084608083808182608083808181608083E3ECF0E0808181608083E0ECF0E08081E8 +:2005400082608083E2ECF0E0808181608083EAE7F0E08081846080838081826080838081C3 +:20056000816080838081806880830895CF93DF93482F50E0CA018C509F4FFC0134914A52A0 +:200580005F4FFA018491882369F190E0880F991FFC01E455FF4FA591B491FC01E654FF4F55 +:2005A000C591D491662351F42FB7F8948C91932F909589238C93888189230BC0623061F40A +:2005C0002FB7F8948C91932F909589238C938881832B88832FBF06C09FB7F8948C91832BB7 +:2005E0008C939FBFDF91CF9108958730C1F1883080F48330F9F0843030F4813029F182308B +:2006000009F050C024C08430C9F0863009F04AC022C08A3091F18B3030F4883031F1893037 +:2006200009F040C026C08C3091F18C3060F18E30C9F533C0809180008F7703C08091800036 +:200640008F7D80938000089584B58F7702C084B58F7D84BD08958091B0008F7703C080919F +:20066000B0008F7D8093B0000895809190008F7707C0809190008F7D03C080919000877FD9 +:200680008093900008958091C0008F7703C08091C0008F7D8093C00008958091C200877F5A +:2006A0008093C2000895FF920F931F93F62E482F50E0CA018E5E9E4FFC012491CA018C501B +:2006C0009F4FFC0114914A525F4FFA0104910023C9F0222319F0822F0E94F502E02FF0E05D +:2006E000EE0FFF1FE654FF4FA591B4919FB7F894FF2021F48C911095812302C08C91812BD5 +:200700008C939FBF1F910F91FF900895CF93DF930E9456028DE391E00E944D040E94AF01EC +:20072000C0E0D0E00E9498012097E1F30E940000F9CF282F809137018823C1F057FF1AC00D +:2007400015C02898909336018091F1008193E217F307B9F74115510539F08091F20088236E +:2007600019F48BE68093E800AFBF02C04FEF5FEFCA010895AFB7F89427702093E9008091A6 +:20078000F200282F30E0241735070CF4A901FB019B01240F311D94E6DACFDF93CF930F922E +:2007A000CDB7DEB7BE016F5F7F4F41E050E00E949903019719F02FEF3FEF03C08981282F25 +:2007C00030E0C9010F90CF91DF910895FF920F931F93F82E142F052F40913A0150913B0188 +:2007E000212F302FC901DC01FB016EEF29C0F7FE02C0949101C090812091380130913901CE +:2008000024173507ACF48091E8008570E1F38091E80082FF03C02FEF3FEF17C09093F1008B +:20082000C90101968F739070892B11F46093E8002F5F3F4F3093390120933801119731964D +:200840001097A9F6812F902F9C01C9011F910F91FF9008959C018091E80082FFFCCFF90124 +:20086000260F311D03C08091F1008193E217F307D1F7289884E6809336018BEF8093E80078 +:20088000CB0108958093E9008091F200882319F08AE38093E800089508951092370181E05F +:2008A0008093D70080EA8093D80082E189BD09B400FEFDCF61E070E080E090E00E94FD01C8 +:2008C00080E98093D8008CE08093E2001092E000559A209A08955F926F927F928F929F9246 +:2008E000AF92BF92CF92DF92EF92FF920F931F93CF93DF93E82E842E752E809137018823FB +:2009000071F18B01242F352FC901EC017AEFF72E67E0962E9E2050E4552E8E2D90E040E220 +:20092000A42EB12CA822B9223AE3632E20E4C22ED12CC822D92258C09FB7F8949092E900DA +:200940008091E80085FD02C020E004C08091F200252D281B9FBF222361F4FA9419F42FEF4D +:200960003FEF4DC061E070E080E090E00E94FD013BC0822F90E0C817D9070CF42C2FC21B28 +:20098000D1094FB7F8949092E900A114B10421F406C01092F10021502223D9F719C0E7FCC6 +:2009A00003C0F801922F10C0C801322F06C0FC010196E491E093F10031503323C1F706C038 +:2009C00081918093F10091509923D1F7020F111D8091E80085FF05C0209729F4C114D1049D +:2009E00011F06092E8004FBF209709F0A5CF5D9884E680933501282D372DC9019C01C90158 +:200A0000DF91CF911F910F91FF90EF90DF90CF90BF90AF909F908F907F906F905F90089564 +:200A20001F920F920FB60F9211241F932F933F934F935F936F937F938F939F93AF93BF93B3 +:200A4000EF93FF938091E1001092E100982F83FF0FC01092E90081E08093EB001092EC007D +:200A600082E38093ED001092370188E08093F00092FF36C083E08093E9008091F200882338 +:200A800049F08AE38093E80005C082E891E00E94710701C012E09FB7F8941093E9008091C9 +:200AA000F2009FBF882389F780913501882351F08091350181508093350180913501882335 +:200AC00009F45D9A80913601882351F08091360181508093360180913601882309F4289AD9 +:200AE000FF91EF91BF91AF919F918F917F916F915F914F913F912F911F910F900FBE0F90DB +:200B00001F9018950F931F93DF93CF930F92CDB7DEB719828E010F5F1F4FC8010E9490078F +:200B2000C8010E942909898190E00F90CF91DF911F910F9108951F920F920FB60F92112455 +:200B4000EF92FF921F932F933F934F935F936F937F938F939F93AF93BF93EF93FF93DF93E7 +:200B6000CF93CDB7DEB76197DEBFCDBF1092E9008091E80083FF0FC1FE0131969E01275F18 +:200B80003F4F03C08091F1008193E217F307D1F7289884E68093360182EF8093E800998139 +:200BA00097FF05C08091E80080FFFCCF03C08EEF8093E800292F30E0C90180769070892B80 +:200BC00009F0C2C08A81882329F41092F1001092F100D6C0813009F4D3C0833009F4D0C08A +:200BE000853049F48091E80080FFFCCF8B8180688093E300C5C0863009F07CC01C81EF805A +:200C0000F8841230C1F51092E900109239011092380110923B0110923A010E94820599E0C1 +:200C2000FE013996DF01292F1D922A95E9F799871A8791E09E8790E8988B9AEF998B209110 +:200C4000380130913901275F3F4F3C872B878D871092E9001092390110923801F0923B01C3 +:200C6000E0923A0180E0BF0149E050E00E94E6030E94820585C01092E9001092390110924C +:200C80003801F0923B01E0923A01123241F482E290E00E942109892B09F476C071C011303E +:200CA00079F488E0E816F10419F481E080933C0180913C01882309F06BC0ECE6F1E013C01B +:200CC000133009F061C08B81882319F4EEE2F1E00AC0823019F4E2E3F1E005C0813009F0C4 +:200CE00053C0E4E5F1E0449180E8BF0150E00E94E60346C0873009F447C0883021F481E0A0 +:200D00008093F1003DC08930D9F523703070232BD9F5E1E9F1E091E031E026E39093E900CA +:200D20003093EB0084918093EC002093ED009F5F3196953099F78EE78093EA001092EA0039 +:200D40008B81809337011CC08F8198851092E900109239011092380190933B0180933A0144 +:200D60008D81882329F4CE0101960E949C0706C0823051F4CE0101960E94F207882321F078 +:200D80008EEF8093E80007C081E28093EB0003C0EEE7F1E0A8CF6196DEBFCDBFCF91DF91E3 +:200DA000FF91EF91BF91AF919F918F917F916F915F914F913F912F911F91FF90EF900F9076 +:200DC0000FBE0F901F90189520917E0130917F018091800190918101281B390B2F733070DC +:200DE000C901089520917E0130917F0180918001909181012817390719F42FEF3FEF09C045 +:200E0000E0918001F0918101E25CFE4F8081282F30E0C901089520917E0130917F01809101 +:200E20008001909181012817390719F42FEF3FEF13C0E0918001F0918101E25CFE4F2081C2 +:200E4000809180019091810101968F739070909381018093800130E0C901089510928501EC +:200E60001092840188EE93E0A0E0B0E08093860190938701A0938801B093890180E191E0B2 +:200E8000909383018093820108950F931F93DF93CF930F92CDB7DEB78C0169838091090102 +:200EA000882369F083E0BE016F5F7F4F41E050E00E946B041816190614F49C0107C081E0F4 +:200EC00090E0F8019383828320E030E0C9010F90CF91DF911F910F91089583E00E9442040D +:200EE000089582E00E94CD03482F20917E0130917F012F5F3F4F2F73307080918001909188 +:200F000081012817390759F0E0917E01F0917F01E25CFE4F408330937F0120937E01089536 +:200F2000FC0180818E5F808380E865E971E042E450E00E94E6030895FC0181819081913A63 +:200F400059F4813209F04CC080E062E071E047E050E00E94E60342C0913209F041C0803246 +:200F600039F482E091E067E070E00E942A0436C0823209F035C0828180930901809102013E +:200F800090910301A0910401B0910501805B9440A040B04019F58091090180FD12C087E74A +:200FA00097E790930108809300082BE088E190E00FB6F894A895809360000FBE20936000A7 +:200FC0000DC088E10FB6F89480936000109260000FBEA895109201081092000881E00895B8 +:200FE00080E00895FC0191818081813A31F4913089F080E0933089F40DC0813269F49B3082 +:2010000021F4828180930A0105C09A3029F4828180930B0181E0089580E00895EF92FF92BF +:201020000F931F938C01E62EDC01ED91FC910480F581E02D0995F82ED801ED91FC9106809E +:20104000F781E02DC8016E2D09958F2D90E01F910F91FF90EF900895109290011092940178 +:201060001092930182E291E090939201809391010895EF92FF920F931F93DF93CF930F9292 +:20108000CDB7DEB789838B017A0184E0BE016F5F7F4F41E050E00E946B0484E4B801A7013A +:2010A0000E946B040F90CF91DF911F910F91FF90EF90089582E048E050E00E94390808957B +:2010C000FC0116821782108611861286138614823496BF010E945A080895DC01683810F046 +:2010E000685829C0E62FF0E067FF13C0E058F04081E090E002C0880F991FEA95E2F7809572 +:2011000014962C911497282314962C93149760E012C0EB5AFD4F6491662319F420E030E020 +:201120001DC067FF08C014968C9114978D7F14968C9314976F77FD0190E0662321F08681BD +:20114000861709F416829F5F31969630B1F7CD011496BD010E945A0821E030E0C901089578 +:20116000CF93DF93DC01683810F0685825C0E62FF0E067FF12C0E058F04081E090E002C061 +:20118000880F991FEA95E2F714962C911497282B14962C93149760E00FC0EB5AFD4F64919A +:2011A0006623D9F167FF08C014968C911497826014968C9314976F7716968C9116978617ED +:2011C000A9F117968C911797861781F118968C911897861759F119968C911997861731F152 +:2011E0001A968C911A97861709F11B968C911B978617E1F0ED01E0E0F0E09E2F8E818823E7 +:2012000021F4EA0FFB1F668306C09F5F31962196E630F10591F7963049F481E090E013966A +:201220009C938E93129720E030E007C0CD011496BD010E945A0821E030E0C901DF91CF91F9 +:20124000089580E867ED71E045E650E00E94E6030895FC0180818F5F808380E86CE372E069 +:2012600049E150E00E94E6030895CF92DF92EF92FF920F931F93CF93DF937C016B018A016C +:20128000C0E0D0E00FC0D6016D916D01D701ED91FC910190F081E02DC7010995C80FD91FC5 +:2012A000015010400115110571F7CE01DF91CF911F910F91FF90EF90DF90CF900895EE0F94 +:2012C000FF1F0590F491E02D0994F894FFCF0D0000E1000000000000010100000000450796 +:2012E0003509E4060B07F2066D077107000000000E083509B0086D086008FFFFFFFFFFFFED +:20130000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED +:20132000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCD +:20134000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD +:20136000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D +:20138000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6D +:2013A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4D +:2013C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2D +:2013E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D +:20140000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC +:20142000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCC +:20144000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAC +:20146000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8C +:20148000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C +:2014A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C +:2014C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C +:2014E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0C +:20150000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEB +:20152000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCB +:20154000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAB +:20156000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8B +:20158000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6B +:2015A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4B +:2015C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2B +:2015E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B +:20160000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA +:20162000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCA +:20164000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAA +:20166000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8A +:20168000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A +:2016A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4A +:2016C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A +:2016E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A +:20170000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9 +:20172000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9 +:20174000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9 +:20176000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF89 +:20178000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF69 +:2017A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF49 +:2017C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF29 +:2017E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF09 +:20180000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8 +:20182000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC8 +:20184000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA8 +:20186000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF88 +:20188000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF68 +:2018A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF48 +:2018C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF28 +:2018E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF08 +:20190000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7 +:20192000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7 +:20194000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA7 +:20196000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87 +:20198000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF67 +:2019A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF47 +:2019C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF27 +:2019E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07 +:201A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6 +:201A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC6 +:201A4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA6 +:201A6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF86 +:201A8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF66 +:201AA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF46 +:201AC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF26 +:201AE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF06 +:201B0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5 +:201B2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC5 +:201B4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5 +:201B6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF85 +:201B8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF65 +:201BA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF45 +:201BC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF25 +:201BE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05 +:201C0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4 +:201C2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4 +:201C4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA4 +:201C6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF84 +:201C8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF64 +:201CA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF44 +:201CC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF24 +:201CE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04 +:201D0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3 +:201D2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC3 +:201D4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA3 +:201D6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF83 +:201D8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF63 +:201DA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF43 +:201DC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF23 +:201DE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03 +:201E0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2 +:201E2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC2 +:201E4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA2 +:201E6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF82 +:201E8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF62 +:201EA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF42 +:201EC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF22 +:201EE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02 +:201F0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 +:201F2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC1 +:201F4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA1 +:201F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF81 +:201F8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF61 +:201FA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF41 +:201FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF21 +:201FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01 +:20200000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 +:20202000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 +:20204000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0 +:20206000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 +:20208000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60 +:2020A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40 +:2020C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20 +:2020E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +:20210000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF +:20212000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF +:20214000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F +:20216000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F +:20218000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F +:2021A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F +:2021C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F +:2021E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +:20220000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDE +:20222000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBE +:20224000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9E +:20226000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7E +:20228000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E +:2022A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E +:2022C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E +:2022E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE +:20230000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDD +:20232000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBD +:20234000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9D +:20236000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7D +:20238000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D +:2023A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D +:2023C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D +:2023E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD +:20240000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC +:20242000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBC +:20244000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9C +:20246000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C +:20248000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5C +:2024A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3C +:2024C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C +:2024E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC +:20250000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB +:20252000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBB +:20254000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9B +:20256000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7B +:20258000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B +:2025A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B +:2025C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1B +:2025E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB +:20260000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDA +:20262000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBA +:20264000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A +:20266000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7A +:20268000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5A +:2026A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3A +:2026C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1A +:2026E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA +:20270000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9 +:20272000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB9 +:20274000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99 +:20276000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF79 +:20278000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF59 +:2027A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF39 +:2027C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF19 +:2027E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9 +:20280000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8 +:20282000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB8 +:20284000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF98 +:20286000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF78 +:20288000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF58 +:2028A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF38 +:2028C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF18 +:2028E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8 +:20290000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7 +:20292000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB7 +:20294000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF97 +:20296000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77 +:20298000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF57 +:2029A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF37 +:2029C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF17 +:2029E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7 +:202A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6 +:202A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB6 +:202A4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF96 +:202A6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF76 +:202A8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF56 +:202AA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF36 +:202AC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF16 +:202AE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6 +:202B0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD5 +:202B2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5 +:202B4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF95 +:202B6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF75 +:202B8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF55 +:202BA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF35 +:202BC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF15 +:202BE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5 +:202C0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4 +:202C2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB4 +:202C4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF94 +:202C6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74 +:202C8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF54 +:202CA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF34 +:202CC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF14 +:202CE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4 +:202D0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3 +:202D2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB3 +:202D4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF93 +:202D6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF73 +:202D8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF53 +:202DA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF33 +:202DC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF13 +:202DE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3 +:202E0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD2 +:202E2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB2 +:202E4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF92 +:202E6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72 +:202E8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF52 +:202EA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF32 +:202EC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF12 +:202EE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2 +:202F0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD1 +:202F2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB1 +:202F4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF91 +:202F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF71 +:202F8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF51 +:202FA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF31 +:202FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF11 +:202FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1 +:20300000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0 +:20302000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0 +:20304000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90 +:20306000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70 +:20308000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50 +:2030A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30 +:2030C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF10 +:2030E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 +:20310000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF +:20312000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF +:20314000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F +:20316000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F +:20318000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F +:2031A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F +:2031C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F +:2031E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF +:20320000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE +:20322000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAE +:20324000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E +:20326000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E +:20328000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4E +:2032A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E +:2032C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E +:2032E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEE +:20330000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCD +:20332000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD +:20334000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D +:20336000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6D +:20338000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4D +:2033A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2D +:2033C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D +:2033E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED +:20340000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCC +:20342000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAC +:20344000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8C +:20346000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C +:20348000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C +:2034A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C +:2034C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0C +:2034E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC +:20350000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCB +:20352000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAB +:20354000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8B +:20356000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6B +:20358000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4B +:2035A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2B +:2035C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B +:2035E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEB +:20360000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCA +:20362000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAA +:20364000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8A +:20366000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A +:20368000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4A +:2036A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A +:2036C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A +:2036E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA +:20370000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9 +:20372000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9 +:20374000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF89 +:20376000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF69 +:20378000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF49 +:2037A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF29 +:2037C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF09 +:2037E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9 +:20380000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC8 +:20382000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA8 +:20384000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF88 +:20386000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF68 +:20388000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF48 +:2038A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF28 +:2038C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF08 +:2038E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8 +:20390000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7 +:20392000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA7 +:20394000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87 +:20396000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF67 +:20398000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF47 +:2039A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF27 +:2039C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07 +:2039E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7 +:203A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC6 +:203A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA6 +:203A4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF86 +:203A6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF66 +:203A8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF46 +:203AA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF26 +:203AC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF06 +:203AE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6 +:203B0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC5 +:203B2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5 +:203B4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF85 +:203B6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF65 +:203B8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF45 +:203BA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF25 +:203BC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05 +:203BE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5 +:203C0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4 +:203C2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA4 +:203C4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF84 +:203C6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF64 +:203C8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF44 +:203CA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF24 +:203CC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04 +:203CE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4 +:203D0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC3 +:203D2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA3 +:203D4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF83 +:203D6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF63 +:203D8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF43 +:203DA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF23 +:203DC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03 +:203DE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3 +:203E0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC2 +:203E2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA2 +:203E4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF82 +:203E6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF62 +:203E8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF42 +:203EA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF22 +:203EC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02 +:203EE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2 +:203F0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC1 +:203F2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA1 +:203F4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF81 +:203F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF61 +:203F8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF41 +:203FA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF21 +:203FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01 +:203FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 +:20400000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 +:20402000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0 +:20404000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 +:20406000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60 +:20408000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40 +:2040A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20 +:2040C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +:2040E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 +:20410000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF +:20412000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F +:20414000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F +:20416000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F +:20418000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F +:2041A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F +:2041C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +:2041E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF +:20420000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBE +:20422000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9E +:20424000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7E +:20426000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E +:20428000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E +:2042A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E +:2042C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE +:2042E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDE +:20430000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBD +:20432000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9D +:20434000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7D +:20436000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D +:20438000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D +:2043A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D +:2043C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD +:2043E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDD +:20440000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBC +:20442000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9C +:20444000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C +:20446000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5C +:20448000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3C +:2044A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C +:2044C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC +:2044E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC +:20450000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBB +:20452000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9B +:20454000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7B +:20456000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B +:20458000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B +:2045A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1B +:2045C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB +:2045E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB +:20460000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBA +:20462000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A +:20464000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7A +:20466000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5A +:20468000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3A +:2046A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1A +:2046C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA +:2046E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDA +:20470000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB9 +:20472000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99 +:20474000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF79 +:20476000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF59 +:20478000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF39 +:2047A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF19 +:2047C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9 +:2047E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9 +:20480000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB8 +:20482000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF98 +:20484000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF78 +:20486000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF58 +:20488000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF38 +:2048A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF18 +:2048C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8 +:2048E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8 +:20490000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB7 +:20492000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF97 +:20494000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77 +:20496000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF57 +:20498000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF37 +:2049A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF17 +:2049C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7 +:2049E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7 +:204A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB6 +:204A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF96 +:204A4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF76 +:204A6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF56 +:204A8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF36 +:204AA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF16 +:204AC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6 +:204AE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6 +:204B0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5 +:204B2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF95 +:204B4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF75 +:204B6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF55 +:204B8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF35 +:204BA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF15 +:204BC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5 +:204BE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD5 +:204C0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB4 +:204C2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF94 +:204C4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74 +:204C6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF54 +:204C8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF34 +:204CA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF14 +:204CC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4 +:204CE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4 +:204D0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB3 +:204D2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF93 +:204D4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF73 +:204D6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF53 +:204D8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF33 +:204DA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF13 +:204DC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3 +:204DE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3 +:204E0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB2 +:204E2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF92 +:204E4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72 +:204E6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF52 +:204E8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF32 +:204EA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF12 +:204EC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2 +:204EE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD2 +:204F0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB1 +:204F2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF91 +:204F4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF71 +:204F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF51 +:204F8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF31 +:204FA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF11 +:204FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1 +:204FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD1 +:20500000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0 +:20502000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90 +:20504000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70 +:20506000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50 +:20508000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30 +:2050A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF10 +:2050C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 +:2050E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0 +:20510000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF +:20512000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F +:20514000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F +:20516000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F +:20518000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F +:2051A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F +:2051C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF +:2051E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF +:20520000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAE +:20522000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E +:20524000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E +:20526000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4E +:20528000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E +:2052A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E +:2052C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEE +:2052E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE +:20530000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD +:20532000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D +:20534000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6D +:20536000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4D +:20538000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2D +:2053A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D +:2053C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED +:2053E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCD +:20540000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAC +:20542000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8C +:20544000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C +:20546000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C +:20548000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C +:2054A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0C +:2054C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC +:2054E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCC +:20550000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAB +:20552000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8B +:20554000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6B +:20556000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4B +:20558000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2B +:2055A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B +:2055C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEB +:2055E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCB +:20560000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAA +:20562000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8A +:20564000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A +:20566000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4A +:20568000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A +:2056A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A +:2056C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA +:2056E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCA +:20570000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9 +:20572000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF89 +:20574000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF69 +:20576000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF49 +:20578000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF29 +:2057A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF09 +:2057C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9 +:2057E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9 +:20580000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA8 +:20582000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF88 +:20584000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF68 +:20586000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF48 +:20588000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF28 +:2058A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF08 +:2058C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8 +:2058E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC8 +:20590000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA7 +:20592000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87 +:20594000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF67 +:20596000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF47 +:20598000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF27 +:2059A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07 +:2059C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7 +:2059E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7 +:205A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA6 +:205A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF86 +:205A4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF66 +:205A6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF46 +:205A8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF26 +:205AA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF06 +:205AC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6 +:205AE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC6 +:205B0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5 +:205B2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF85 +:205B4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF65 +:205B6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF45 +:205B8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF25 +:205BA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05 +:205BC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5 +:205BE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC5 +:205C0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA4 +:205C2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF84 +:205C4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF64 +:205C6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF44 +:205C8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF24 +:205CA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04 +:205CC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4 +:205CE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4 +:205D0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA3 +:205D2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF83 +:205D4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF63 +:205D6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF43 +:205D8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF23 +:205DA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03 +:205DC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3 +:205DE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC3 +:205E0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA2 +:205E2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF82 +:205E4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF62 +:205E6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF42 +:205E8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF22 +:205EA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02 +:205EC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2 +:205EE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC2 +:205F0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA1 +:205F2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF81 +:205F4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF61 +:205F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF41 +:205F8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF21 +:205FA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01 +:205FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 +:205FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC1 +:20600000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0 +:20602000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 +:20604000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60 +:20606000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40 +:20608000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20 +:2060A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +:2060C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 +:2060E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 +:20610000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F +:20612000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F +:20614000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F +:20616000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F +:20618000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F +:2061A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +:2061C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF +:2061E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF +:20620000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9E +:20622000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7E +:20624000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E +:20626000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E +:20628000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E +:2062A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE +:2062C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDE +:2062E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBE +:20630000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9D +:20632000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7D +:20634000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D +:20636000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D +:20638000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D +:2063A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD +:2063C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDD +:2063E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBD +:20640000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9C +:20642000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C +:20644000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5C +:20646000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3C +:20648000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C +:2064A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC +:2064C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC +:2064E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBC +:20650000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9B +:20652000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7B +:20654000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B +:20656000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B +:20658000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1B +:2065A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB +:2065C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB +:2065E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBB +:20660000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A +:20662000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7A +:20664000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5A +:20666000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3A +:20668000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1A +:2066A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA +:2066C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDA +:2066E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBA +:20670000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99 +:20672000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF79 +:20674000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF59 +:20676000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF39 +:20678000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF19 +:2067A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9 +:2067C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9 +:2067E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB9 +:20680000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF98 +:20682000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF78 +:20684000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF58 +:20686000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF38 +:20688000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF18 +:2068A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8 +:2068C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8 +:2068E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB8 +:20690000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF97 +:20692000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77 +:20694000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF57 +:20696000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF37 +:20698000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF17 +:2069A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7 +:2069C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7 +:2069E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB7 +:206A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF96 +:206A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF76 +:206A4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF56 +:206A6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF36 +:206A8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF16 +:206AA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6 +:206AC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6 +:206AE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB6 +:206B0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF95 +:206B2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF75 +:206B4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF55 +:206B6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF35 +:206B8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF15 +:206BA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5 +:206BC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD5 +:206BE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5 +:206C0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF94 +:206C2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74 +:206C4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF54 +:206C6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF34 +:206C8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF14 +:206CA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4 +:206CC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4 +:206CE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB4 +:206D0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF93 +:206D2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF73 +:206D4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF53 +:206D6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF33 +:206D8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF13 +:206DA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3 +:206DC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3 +:206DE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB3 +:206E0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF92 +:206E2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72 +:206E4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF52 +:206E6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF32 +:206E8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF12 +:206EA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2 +:206EC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD2 +:206EE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB2 +:206F0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF91 +:206F2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF71 +:206F4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF51 +:206F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF31 +:206F8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF11 +:206FA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1 +:206FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD1 +:206FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB1 +:2070000055C000006EC000006CC000006AC0000068C0000066C0000064C0000062C0000043 +:2070200060C000005EC00000EEC400005AC0000058C0000056C0000054C0000052C00000F2 +:2070400050C0000078C000004CC000004AC0000048C0000046C0000044C0000042C00000BE +:2070600040C000003EC000003CC000003AC0000038C0000036C0000034C0000032C0000048 +:2070800030C000002EC000002CC000002AC0000028C0000026C0000024C0000022C00000A8 +:2070A00020C000001EC000001CC0000011241FBECFEFDAE0DEBFCDBF11E0A0E0B1E0EAE2B5 +:2070C000FFE702C005900D92A83AB107D9F711E0A8EAB1E001C01D92AE3BB107E1F78FD30B +:2070E00022C78ECFF89410926F0010928100109285001092840081E085BF15BE47985D9AEF +:20710000289A0C94000008952091B2013091B3012F5F3F4F3093B3012093B201932F37FFA6 +:2071200003C08EEF831B982F990F921710F447980895479A08951F920F920FB60F9211246E +:207140002F938F939F93EF93FF9310928500109284008091A8019091A901009741F00197D3 +:207160009093A9018093A801892B09F45D9A8091AA019091AB01009741F001979093AB0126 +:207180008093AA01892B09F4289AE0E0F0E0859194918F5F9F4F49F08091AC019091AD0151 +:2071A00001969093AD018093AC01FF91EF919F918F912F910F900FBE0F901F90189584E0BC +:2071C0008093E9000DC08091E8008B778093E80003C08EB3882351F08091E80082FFF9CFBE +:2071E0008091E80085FFEFCF8091F1000895982F83E08093E9008091E80085FD0DC0809136 +:20720000E8008E778093E80003C08EB3882369F08091E80080FFF9CF9093F1005D9884E6CB +:2072200090E09093A9018093A80108954F925F926F927F928F929F92AF92BF92CF92DF921E +:20724000EF92FF920F931F93CF93DF9384E08093E9008091E80082FF57C2289884E690E067 +:207260009093AB018093AA01AADF182F853481F48CE49DE19093AD018093AC0107B600FC4B +:20728000FDCFF999FECF81E180935700E89503C0843519F494DF8DE00DC28C34E1F38035F9 +:2072A000D1F3843721F484E4A2DF80E003C2813611F489E5FFC18134B1F481DF182F7FDFE3 +:2072C00090E0880F991FAA2797FDA095BA2F312F330F20E0442737FD4095542F822B932B68 +:2072E000A42BB52BB8C1803711F483E5E3C1833549F4C0E0D1E089917ADF21E0C730D20714 +:20730000D1F7D9C1863521F481E371DF80E3D2C1833731F487E86BDF85E969DF8EE1CAC149 +:207320008536B9F4E0E0F0E093E085E090935700E89507B600FCFDCF80935700E89507B65D +:2073400000FCFDCFE058FF4FA0E7E030FA0771F7A2CF823739F4E1E0F0E089E08093570024 +:207360008491A8C1863439F4E0E0F0E089E08093570084919FC18E3439F4E3E0F0E089E0E5 +:2073800080935700849196C1813539F4E2E0F0E089E08093570084918DC1823631F489E521 +:2073A00026DF80E024DF80E885C1823419F0873609F0E5C01092AD011092AC0100DF082FE8 +:2073C000FEDEF82EFCDE682E8554823008F071C1902F80E0CF2DD0E0C82BD92B10926F00B3 +:2073E000173609F04BC081E180935700E895DD24CC24C3943FC0E090AE01F090AF010091CC +:20740000B0011091B101B6E46B16D9F4ED2DF0E0EE29FF29E4918E2FEADEDD2081F082E08D +:2074200090E0A0E0B0E0E80EF91E0A1F1B1FE092AE01F092AF010093B0011093B101DC2470 +:2074400018C0D801C701B695A7959795879555D5CEDE82E090E0A0E0B0E0E80EF91E0A1FF6 +:207460001B1FE092AE01F092AF010093B0011093B1012197209709F0BECF7DC08090AE01F5 +:207480009090AF01A090B001B090B10196E4691609F05DC083E0F40180935700E89507B63E +:2074A00000FCFDCF54C0F6E46F1661F5772031F1E090AE01F090AF010091B0011091B1019E +:2074C0007EDED82ECC24852D90E08C299D29F7010C0140925700E895112482E090E0A0E08B +:2074E000B0E0E80EF91E0A1F1B1FE092AE01F092AF010093B0011093B10102C060DE582E1A +:20750000742423C0E090AE01F090AF010091B0011091B10116950795F794E79450DE682FFA +:20752000C701F3D48091AE019091AF01A091B001B091B1010296A11DB11D8093AE0190934D +:20754000AF01A093B001B093B101219704C05524772444244394209709F0A5CF96E46916B6 +:2075600041F485E0F40180935700E89507B600FCFDCF8DE03CDE82E080936F009CC0833492 +:2075800071F40091AE011091AF0119DE90E021E0F8010C0120935700E89511247CCE8336C8 +:2075A00019F5E090AE01F090AF010091B0011091B10105DEF701E16090E021E00C0120938C +:2075C0005700E895112482E090E0A0E0B0E0E80EF91E0A1F1B1FE092AE01F092AF0100936A +:2075E000B0011093B10157CE8D3661F4E091AE01F091AF0185E080935700E89507B600FCF2 +:20760000FDCF49CE823551F4E091AE01F091AF0105911491812FEBDD802F4CC0843421F5FE +:20762000E090AE01F090AF010091B0011091B10116950795F794E794C2DD682FC70165D4E2 +:207640008091AE019091AF01A091B001B091B1010296A11DB11D8093AE019093AF01A093D8 +:20766000B001B093B10117CE843609F5E090AE01F090AF010091B0011091B101D801C70142 +:20768000B695A7959795879538D4B1DD82E090E0A0E0B0E0E80EF91E0A1F1B1FE092AE010E +:2076A000F092AF010093B0011093B10104C08B3111F08FE39CDD83E08093E9009091E8002B +:2076C0008091E8008E778093E80095FF04C010C08EB38823C9F08091E80080FFF9CF809193 +:2076E000E8008E778093E80003C08EB3882361F08091E80080FFF9CF84E08093E9008091F1 +:20770000E8008B778093E800DF91CF911F910F91FF90EF90DF90CF90BF90AF909F908F90AC +:207720007F906F905F904F9008959091B601892F8F77813249F58091B7018032A1F081328A +:2077400019F5913A09F58091E800877F8093E8008DE091E067E070E007D28091E8008B770F +:207760008093E8000895913279F48091E800877F8093E8008DE091E067E070E059D2809196 +:20778000E8008E778093E800089582E061EC42E0B1D083E061E842E1ADD084E060E842E1F7 +:2077A000A9C084B7877F84BF88E10FB6F89480936000109260000FBE20E880E090E00FB643 +:2077C000F89420936100809361000FBE81E085BF92E095BF3F9A209A559AE1E6F0E02083A1 +:2077E000108247985D9A289A109289008AEF8093880090936F0083E080938100ECC040911A +:20780000000850910108109201081092000824B714BE88E10FB6F894809360001092600045 +:207820000FBE822F90E0FC01E270F07021FD14C0213019F4859194910BC0283069F480918F +:20784000090190910A014817590731F0859194918F5F9F4F09F046DCA4DF78941092AD0101 +:207860001092AC010CC0E2DC36D38091AC019091AD0181549F4110F01092140145DC8091FB +:207880001401882381F78091E00081608093E00029DC80E090E00895FA01923049F09330C0 +:2078A00061F09130F9F485E191E022E130E01EC087E291E02EE330E019C0882329F485E6FA +:2078C00091E024E030E012C0813029F489E691E022E230E00BC0823029F48DE891E028E106 +:2078E00030E004C080E090E020E030E091838083C90108958093E9008091EB00816080936A +:20790000EB001092ED006093EC004093ED008091EE00881F8827881F08958091B601882342 +:207920008CF403C08EB38823B1F08091E80082FFF9CF8091E8008B778093E80008958EB361 +:20794000882349F08091E80080FFF9CF8091E8008E778093E8000895EF92FF920F931F9307 +:2079600045D04CD008ED10E0F80180818F77808380818068808380818F7D808319BC1EBA45 +:207980001092B40180EEE82EF12CF70180818B7F8083F80180818160808380E060E042E049 +:2079A000A9DFE1EEF0E080818E7F8083E2EEF0E0808181608083808188608083F701808125 +:2079C0008E7F8083F8018081806180831F910F91FF90EF900895E7EDF0E080818160808335 +:2079E0008AE482BF81E08093B501B6CFE8EDF0E080818E7F80831092E20008951092DA00D6 +:207A00001092E10008951F920F920FB60F9211242F933F934F935F936F937F938F939F9389 +:207A2000AF93BF93EF93FF938091DA0080FF1BC08091D80080FF17C08091DA008E7F80930F +:207A4000DA008091D90080FF0BC080E189BD82E189BD09B400FEFDCF81E08EBB3BD203C0C7 +:207A600019BC1EBA37D28091E10080FF17C08091E20080FF13C08091E2008E7F8093E200CE +:207A80008091E20080618093E2008091D80080628093D80019BC85E08EBB1CD28091E10004 +:207AA00084FF2CC08091E20084FF28C080E189BD82E189BD09B400FEFDCF8091D8008F7D2D +:207AC0008093D8008091E1008F7E8093E1008091E2008F7E8093E2008091E20081608093EC +:207AE000E2008091B401882331F48091E30087FD02C081E001C084E08EBBECD18091E10056 +:207B000083FF21C08091E20083FF1DC08091E100877F8093E10082E08EBB1092B4018091B1 +:207B2000E1008E7F8093E1008091E2008E7F8093E2008091E20080618093E20080E060E005 +:207B400042E0D8DEC7D1FF91EF91BF91AF919F918F917F916F915F914F913F912F910F90B6 +:207B60000FBE0F901F9018959C014091BC015091BD014617570718F4F90190E044C06115C8 +:207B8000710511F0AB01F8CF8091E8008E778093E80040E050E0F0CF8EB3882309F444C006 +:207BA000853009F443C08091E80083FF02C081E008958091E80082FD31C08091E80080FFF4 +:207BC00022C08091F3009091F200782F60E0292F30E0262B372B07C081918093F10041503C +:207BE00050402F5F3F4F4115510519F02830310598F390E02830310509F491E08091E800A6 +:207C00008E778093E8004115510531F6992321F605C08EB3882341F0853041F08091E800FD +:207C200082FFF7CF80E0089582E0089583E008959C016115710529F48091E8008B7780934D +:207C4000E800F90126C08EB3882391F1853091F18091E80083FF02C081E008958091E80083 +:207C600082FFF1CF06C08091F10081936150704059F02091F3008091F200322F20E090E0C5 +:207C8000822B932B892B79F78091E8008B778093E80061157105B9F605C08EB3882341F0E2 +:207CA000853041F08091E80080FFF7CF80E0089582E0089583E008950F931F93DF93CF937C +:207CC00000D0CDB7DEB7E6EBF1E08091F100819381E0EE3BF807C9F728DD8091E80083FF3A +:207CE000E4C08091B6019091B701953009F46DC0963040F4913081F1913070F0933009F046 +:207D0000D4C02AC0983009F4A3C0993009F4B2C0963009F0CAC07CC0803809F4C6C082380B +:207D200009F0C3C08091BA0187708093E9008091EB001092E9002091E800277F2093E800A7 +:207D400090E025E0969587952A95E1F781708093F1001092F10087C0882319F0823009F0A2 +:207D6000A4C08F71823009F0A0C08091B801882331F52091BA01277009F497C02093E90006 +:207D80008091EB0080FF1BC0933021F48091EB00806213C08091EB0080618093EB0081E0C8 +:207DA00090E002C0880F991F2A95E2F78093EA001092EA008091EB0088608093EB0010929D +:207DC000E9008091E800877F51C0882309F06DC01091B8011F770FB7F8948091E800877F98 +:207DE0008093E8009ADD8091E80080FFFCCF8091E3008078812B8093E30080688093E30062 +:207E0000112311F482E001C083E08EBB0FBF4DC08058823008F049C08091B8019091B9014F +:207E20006091BA01AE014F5F5F4F36DDBC01009709F43BC08091E800877F8093E800898128 +:207E40009A8192DE8091E8008B778093E8002DC0803859F58091E800877F8093E8008091A3 +:207E6000B4018093F1008091E8008E778093E80054DD1BC08823C9F49091B8019230A8F4A4 +:207E80008091E800877F8093E8009093B40145DD8091B401882331F48091E30087FD02C01E +:207EA00081E001C084E08EBB70DC8091E80083FF0AC08091EB0080628093EB008091E8008D +:207EC000877F8093E8000F900F90CF91DF911F910F91089508951F938EB3882361F0109179 +:207EE000E9001092E9008091E80083FF01C0E4DE17701093E9001F910895F999FECF92BD02 +:207F000081BDF89A992780B50895262FF999FECF1FBA92BD81BD20BD0FB6F894FA9AF99A90 +:207F20000FBE01960895F894FFCF4341544552494E4100777700080000000000000801128E +:207F4000011001020000084123360001000201000109023E00020100803209040000010258 +:207F60000201000524001001042402040524060001070582030800FF09040100020A0000B4 +:207F8000000705040210000107058302100001040309042203410072006400750069006E80 +:207FA000006F0020004C0065006F006E006100720064006F00000018034100720064007557 +:127FC0000069006E006F0020004C004C0043000000006E +:00000001FF diff --git a/external/arduino/avr/bootloaders/caterina/Leonardo-prod-firmware-2012-04-26.txt b/external/arduino/avr/bootloaders/caterina/Leonardo-prod-firmware-2012-04-26.txt new file mode 100644 index 000000000..5beb659a0 --- /dev/null +++ b/external/arduino/avr/bootloaders/caterina/Leonardo-prod-firmware-2012-04-26.txt @@ -0,0 +1,11 @@ +Builds against LUFA version 111009 +make version 3.81 +avrdude version 5.11 + +All AVR tools except avrdude were installed by CrossPack 20100115: +avr-gcc version 4.3.3 (GCC) +Thread model: single +Configured with: ../configure —prefix=/usr/local/CrossPack-AVR-20100115 —disable-dependency-tracking —disable-nls —disable-werror —target=avr —enable-languages=c,c++ —disable-nls —disable-libssp —with-dwarf2 +avr-libc version 1.6.7 +binutils version 2.19 + diff --git a/external/arduino/avr/bootloaders/caterina/Leonardo-prod-firmware-2012-12-10.hex b/external/arduino/avr/bootloaders/caterina/Leonardo-prod-firmware-2012-12-10.hex new file mode 100644 index 000000000..47053bc53 --- /dev/null +++ b/external/arduino/avr/bootloaders/caterina/Leonardo-prod-firmware-2012-12-10.hex @@ -0,0 +1,1024 @@ +:200000000C946E010C9496010C9496010C9496010C9496010C9496010C9496010C94960150 +:200020000C9496010C9496010C94F6040C947D050C9496010C9496010C9496010C949601BA +:200040000C9496010C9496010C9496010C9496010C9496010C9496010C9496010C94B501C9 +:200060000C9496010C9496010C9496010C9496010C9496010C9496010C9496010C949601C8 +:200080000C9496010C9496010C9496010C9496010C9496010C9496010C9496010C949601A8 +:2000A0000C9496010C9496010C94960100000000240027002A002D003000000000002500A4 +:2000C00028002B002E003100000000002300260029002C002F00040404040403040502027D +:2000E0000202040302020202060606060606040402020204040802011040804010204080A8 +:200100004080080204018040201002011080102040400000000200080E0000030401000BB2 +:200120000000070605040100080A0B0C0D09040309042203410072006400750069006E00CD +:200140006F0020004C0065006F006E006100720064006F00180341007200640075006900CC +:200160006E006F0020004C004C004300120100020000004041233680000101020001120120 +:200180000002020000404123368000010102000100C18081C1080B00020202010009040052 +:2001A000000102020000052400100105240101010424020605240600010705810310004094 +:2001C00009040100020A000000070502024000000705830240000005010902A1010901A186 +:2001E000008501050919012903150025019503750181029501750581030501093009310943 +:20020000381581257F750895038106C0C005010906A1018502050719E029E715002501754D +:20022000019508810295017508810395067508150025650507190029658100C0090402004C +:2002400001030000000921010100012265000705840340000100000000000000002A2B2895 +:200260000000000000000000000000000000000000000000002C9EB4A0A1A2A434A6A7A553 +:20028000AE362D3738271E1F20212223242526B333B62EB7B89F8485868788898A8B8C8D58 +:2002A0008E8F909192939495969798999A9B9C9D2F3130A3AD350405060708090A0B0C0D7C +:2002C0000E0F101112131415161718191A1B1C1DAFB1B0B5000032041007150811241FBE85 +:2002E000CFEFDAE0DEBFCDBF11E0A0E0B1E0E0EAF2E102C005900D92AC32B107D9F711E071 +:20030000ACE2B1E001C01D92AD39B107E1F712E0CCEDD2E004C02297FE010E944A09C63D07 +:20032000D107C9F70E946C030C944E090C9400008091000161E00E94390368EE73E080E043 +:2003400090E00E94FD018091000160E00E94390368EE73E080E090E00E94FD010895809196 +:20036000000161E00E94AC0208951F920F920FB60F9211242F933F938F939F93AF93BF93E5 +:200380008091300190913101A0913201B0913301309134010196A11DB11D232F2D5F2D3794 +:2003A00020F02D570196A11DB11D209334018093300190933101A0933201B0933301809117 +:2003C0002C0190912D01A0912E01B0912F010196A11DB11D80932C0190932D01A0932E01BA +:2003E000B0932F01BF91AF919F918F913F912F910F900FBE0F901F9018959B01AC017FB734 +:20040000F89480912C0190912D01A0912E01B0912F0166B5A89B05C06F3F19F00196A11DC3 +:20042000B11D7FBFBA2FA92F982F8827860F911DA11DB11D62E0880F991FAA1FBB1F6A9577 +:20044000D1F7BC012DC0FFB7F89480912C0190912D01A0912E01B0912F01E6B5A89B05C0E7 +:20046000EF3F19F00196A11DB11DFFBFBA2FA92F982F88278E0F911DA11DB11DE2E0880FFD +:20048000991FAA1FBB1FEA95D1F7861B970B885E9340C8F2215030404040504068517C4F8F +:2004A000211531054105510571F60895789484B5826084BD84B5816084BD85B5826085BD0F +:2004C00085B5816085BDEEE6F0E0808181608083E1E8F0E010828081826080838081816043 +:2004E0008083E0E8F0E0808181608083E1E9F0E0808182608083808181608083E0E9F0E07E +:20050000808181608083E1ECF0E0808184608083808182608083808181608083E3ECF0E007 +:20052000808181608083E0ECF0E0808182608083E2ECF0E0808181608083EAE7F0E080812F +:20054000846080838081826080838081816080838081806880830895CF93DF93482F50E0E5 +:20056000CA018C509F4FFC0134914A525F4FFA018491882369F190E0880F991FFC01E455D0 +:20058000FF4FA591B491FC01E654FF4FC591D491662351F42FB7F8948C91932F9095892362 +:2005A0008C93888189230BC0623061F42FB7F8948C91932F909589238C938881832B8883B2 +:2005C0002FBF06C09FB7F8948C91832B8C939FBFDF91CF910895883071F1893068F48230EF +:2005E00031F1833020F4813009F042C01DC0833089F08430E9F512C08B3059F18C3028F41C +:200600008930E9F08A30A1F51EC08C3031F18E3079F529C0809180008F7703C0809180003C +:200620008F7D80938000089584B58F7702C084B58F7D84BD0895809190008F7707C08091DB +:2006400090008F7D03C080919000877F8093900008958091C0008F7703C08091C0008F7DDD +:200660008093C00008958091C200877F8093C2000895FF920F931F93F62E482F50E0CA0144 +:200680008E5E9E4FFC012491CA018C509F4FFC0114914A525F4FFA0104910023C9F022239D +:2006A00019F0822F0E94EB02E02FF0E0EE0FFF1FE654FF4FA591B4919FB7F894FF2021F4DE +:2006C0008C911095812302C08C91812B8C939FBF1F910F91FF900895CF93DF930E94560262 +:2006E0008DE391E00E9433040E94AF01C0E0D0E00E9498012097E1F30E940000F9CF282F17 +:20070000809137018823C1F057FF1AC015C02898909336018091F1008193E217F307B9F75C +:200720004115510539F08091F200882319F48BE68093E800AFBF02C04FEF5FEFCA01089599 +:20074000AFB7F89427702093E9008091F200282F30E0241735070CF4A901FB019B01240F1E +:20076000311D94E6DACFDF93CF930F92CDB7DEB7BE016F5F7F4F41E050E00E947F03019712 +:2007800019F02FEF3FEF03C08981282F30E0C9010F90CF91DF910895FF920F931F93F82EEF +:2007A000142F052F40913A0150913B01212F302FC901DC01FB016EEF29C0F7FE02C0949125 +:2007C00001C09081209138013091390124173507ACF48091E8008570E1F38091E80082FF0F +:2007E00003C02FEF3FEF17C09093F100C90101968F739070892B11F46093E8002F5F3F4FEC +:200800003093390120933801119731961097A9F6812F902F9C01C9011F910F91FF900895E8 +:200820009C018091E80082FFFCCFF901260F311D03C08091F1008193E217F307D1F7289805 +:2008400084E6809336018BEF8093E800CB0108958093E9008091F200882319F08AE38093D3 +:20086000E800089508951092370181E08093D70080EA8093D80082E189BD09B400FEFDCFAC +:2008800061E070E080E090E00E94FD0180E98093D8008CE08093E2001092E000559A209A77 +:2008A00008955F926F927F928F929F92AF92BF92CF92DF92EF92FF920F931F93CF93DF93A8 +:2008C000E82E842E752E80913701882371F18B01242F352FC901EC017AEFF72E67E0962EC4 +:2008E0009E2050E4552E8E2D90E040E2A42EB12CA822B9223AE3632E20E4C22ED12CC82259 +:20090000D92258C09FB7F8949092E9008091E80085FD02C020E004C08091F200252D281B3E +:200920009FBF222361F4FA9419F42FEF3FEF4DC061E070E080E090E00E94FD013BC0822F1E +:2009400090E0C817D9070CF42C2FC21BD1094FB7F8949092E900A114B10421F406C01092D2 +:20096000F10021502223D9F719C0E7FC03C0F801922F10C0C801322F06C0FC010196E491FE +:20098000E093F10031503323C1F706C081918093F10091509923D1F7020F111D8091E800EB +:2009A00085FF05C0209729F4C114D10411F06092E8004FBF209709F0A5CF5D9884E68093F1 +:2009C0003501282D372DC9019C01C901DF91CF911F910F91FF90EF90DF90CF90BF90AF906D +:2009E0009F908F907F906F905F9008951F920F920FB60F9211242F933F934F935F936F93B8 +:200A00007F938F939F93AF93BF93EF93FF938091E1001092E100982F83FF0FC01092E900B0 +:200A200081E08093EB001092EC0082E38093ED001092370188E08093F00092FF34C083E037 +:200A40008093E9008091F200882319F08AE38093E8008FB7F89492E09093E9009091F20018 +:200A60008FBF992321F082E891E00E94530780913501882351F080913501815080933501F0 +:200A800080913501882309F45D9A80913601882351F0809136018150809336018091360191 +:200AA000882309F4289AFF91EF91BF91AF919F918F917F916F915F914F913F912F910F90CD +:200AC0000FBE0F901F9018950F931F93DF93CF930F92CDB7DEB719828E010F5F1F4FC8019D +:200AE0000E947907C8010E941209898190E00F90CF91DF911F910F9108951F920F920FB661 +:200B00000F921124EF92FF921F932F933F934F935F936F937F938F939F93AF93BF93EF9355 +:200B2000FF93DF93CF93CDB7DEB76197DEBFCDBF1092E9008091E80083FF0FC1FE01319679 +:200B40009E01275F3F4F03C08091F1008193E217F307D1F7289884E68093360182EF809356 +:200B6000E800998197FF05C08091E80080FFFCCF03C08EEF8093E800292F30E0C901807672 +:200B80009070892B09F0C2C08A81882329F41092F1001092F100D6C0813009F4D3C08330A3 +:200BA00009F4D0C0853049F48091E80080FFFCCF8B8180688093E300C5C0863009F07CC019 +:200BC0001C81EF80F8841230C1F51092E900109239011092380110923B0110923A010E94F6 +:200BE000640599E0FE013996DF01292F1D922A95E9F799871A8791E09E8790E8988B9AEF44 +:200C0000998B2091380130913901275F3F4F3C872B878D871092E9001092390110923801EC +:200C2000F0923B01E0923A0180E0BF0149E050E00E94CC030E94640585C01092E9001092E2 +:200C4000390110923801F0923B01E0923A01123241F482E290E00E940A09892B09F476C02B +:200C600071C0113079F488E0E816F10419F481E080933C0180913C01882309F06BC0ECE68D +:200C8000F1E013C0133009F061C08B81882319F4EEE2F1E00AC0823019F4E2E3F1E005C00A +:200CA000813009F053C0E4E5F1E0449180E8BF0150E00E94CC0346C0873009F447C08830C6 +:200CC00021F481E08093F1003DC08930D9F523703070232BD9F5E1E9F1E091E031E026E3A1 +:200CE0009093E9003093EB0084918093EC002093ED009F5F3196953099F78EE78093EA00FA +:200D00001092EA008B81809337011CC08F8198851092E900109239011092380190933B0146 +:200D200080933A018D81882329F4CE0101960E94850706C0823051F4CE0101960E94DB0754 +:200D4000882321F08EEF8093E80007C081E28093EB0003C0EEE7F1E0A8CF6196DEBFCDBF37 +:200D6000CF91DF91FF91EF91BF91AF919F918F917F916F915F914F913F912F911F91FF9004 +:200D8000EF900F900FBE0F901F90189520917E0130917F018091800190918101281B390B40 +:200DA0002F733070C901089520917E0130917F0180918001909181012817390719F42FEF3A +:200DC0003FEF09C0E0918001F0918101E25CFE4F8081282F30E0C901089520917E013091DC +:200DE0007F0180918001909181012817390719F42FEF3FEF13C0E0918001F0918101E25C60 +:200E0000FE4F2081809180019091810101968F739070909381018093800130E0C901089566 +:200E2000109285011092840188EE93E0A0E0B0E08093860190938701A0938801B09389019C +:200E400080E191E0909383018093820108950F931F93DF93CF930F92CDB7DEB78C0169838B +:200E600080910901882369F083E0BE016F5F7F4F41E050E00E9451041816190614F49C015B +:200E800007C081E090E0F8019383828320E030E0C9010F90CF91DF911F910F91089583E00D +:200EA0000E9428040895CF93DF9312C082E00E94B3032FEF8F3F9207C9F0E0917E01F091B8 +:200EC0007F01E25CFE4F8083D0937F01C0937E01C0917E01D0917F012196CF73D070809154 +:200EE000800190918101C817D90701F7DF91CF910895FC0180818E5F808380E865E971E0B5 +:200F000042E450E00E94CC030895FC0181819081913A59F4813209F04CC080E062E071E09A +:200F200047E050E00E94CC0342C0913209F041C0803239F482E091E067E070E00E9410042B +:200F400036C0823209F035C08281809309018091020190910301A0910401B0910501805B48 +:200F60009440A040B04019F58091090180FD12C087E797E790930108809300082BE088E1AE +:200F800090E00FB6F894A895809360000FBE209360000DC088E10FB6F89480936000109264 +:200FA00060000FBEA895109201081092000881E0089580E00895FC0191818081813A31F487 +:200FC000913089F080E0933089F40DC0813269F49B3021F4828180930A0105C09A3029F4AD +:200FE000828180930B0181E0089580E00895EF92FF920F931F938C01E62EDC01ED91FC91E5 +:201000000480F581E02D0995F82ED801ED91FC910680F781E02DC8016E2D09958F2D90E0E8 +:201020001F910F91FF90EF90089510929001109294011092930182E291E090939201809377 +:2010400091010895EF92FF920F931F93DF93CF930F92CDB7DEB789838B017A0184E0BE0137 +:201060006F5F7F4F41E050E00E94510484E4B801A7010E9451040F90CF91DF911F910F910D +:20108000FF90EF90089582E048E050E00E9422080895FC01168217821086118612861386F6 +:2010A00014823496BF010E9443080895DC01683810F0685829C0E62FF0E067FF13C0E0580A +:2010C000F04081E090E002C0880F991FEA95E2F7809514962C911497282314962C93149720 +:2010E00060E012C0EB5AFD4F6491662319F420E030E01DC067FF08C014968C9114978D7F29 +:2011000014968C9314976F77FD0190E0662321F08681861709F416829F5F31969630B1F701 +:20112000CD011496BD010E94430821E030E0C9010895CF93DF93DC01683810F0685825C01E +:20114000E62FF0E067FF12C0E058F04081E090E002C0880F991FEA95E2F714962C911497BE +:20116000282B14962C93149760E00FC0EB5AFD4F64916623D9F167FF08C014968C91149780 +:20118000826014968C9314976F7716968C9116978617A9F117968C911797861781F1189631 +:2011A0008C911897861759F119968C911997861731F11A968C911A97861709F11B968C915E +:2011C0001B978617E1F0ED01E0E0F0E09E2F8E81882321F4EA0FFB1F668306C09F5F31964E +:2011E0002196E630F10591F7963049F481E090E013969C938E93129720E030E007C0CD0189 +:201200001496BD010E94430821E030E0C901DF91CF91089580E867ED71E045E650E00E9427 +:20122000CC030895FC0180818F5F808380E86CE372E049E150E00E94CC030895CF92DF9210 +:20124000EF92FF920F931F93CF93DF937C016B018A01C0E0D0E00FC0D6016D916D01D701A6 +:20126000ED91FC910190F081E02DC7010995C80FD91F015010400115110571F7CE01DF91AB +:20128000CF911F910F91FF90EF90DF90CF900895EE0FFF1F0590F491E02D0994F894FFCFEC +:2012A0000D0000E100000000000001010000000027071E09C606ED06D4064F0753070000A0 +:2012C0000000F7071E09990856084908FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD +:2012E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E +:20130000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED +:20132000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCD +:20134000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD +:20136000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D +:20138000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6D +:2013A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4D +:2013C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2D +:2013E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D +:20140000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC +:20142000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCC +:20144000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAC +:20146000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8C +:20148000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C +:2014A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C +:2014C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C +:2014E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0C +:20150000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEB +:20152000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCB +:20154000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAB +:20156000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8B +:20158000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6B +:2015A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4B +:2015C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2B +:2015E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B +:20160000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA +:20162000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCA +:20164000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAA +:20166000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8A +:20168000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A +:2016A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4A +:2016C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A +:2016E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A +:20170000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9 +:20172000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9 +:20174000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9 +:20176000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF89 +:20178000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF69 +:2017A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF49 +:2017C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF29 +:2017E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF09 +:20180000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8 +:20182000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC8 +:20184000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA8 +:20186000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF88 +:20188000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF68 +:2018A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF48 +:2018C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF28 +:2018E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF08 +:20190000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7 +:20192000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7 +:20194000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA7 +:20196000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87 +:20198000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF67 +:2019A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF47 +:2019C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF27 +:2019E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07 +:201A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6 +:201A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC6 +:201A4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA6 +:201A6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF86 +:201A8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF66 +:201AA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF46 +:201AC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF26 +:201AE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF06 +:201B0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5 +:201B2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC5 +:201B4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5 +:201B6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF85 +:201B8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF65 +:201BA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF45 +:201BC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF25 +:201BE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05 +:201C0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4 +:201C2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4 +:201C4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA4 +:201C6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF84 +:201C8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF64 +:201CA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF44 +:201CC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF24 +:201CE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04 +:201D0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3 +:201D2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC3 +:201D4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA3 +:201D6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF83 +:201D8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF63 +:201DA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF43 +:201DC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF23 +:201DE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03 +:201E0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2 +:201E2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC2 +:201E4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA2 +:201E6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF82 +:201E8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF62 +:201EA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF42 +:201EC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF22 +:201EE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02 +:201F0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 +:201F2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC1 +:201F4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA1 +:201F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF81 +:201F8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF61 +:201FA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF41 +:201FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF21 +:201FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01 +:20200000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 +:20202000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 +:20204000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0 +:20206000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 +:20208000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60 +:2020A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40 +:2020C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20 +:2020E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +:20210000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF +:20212000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF +:20214000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F +:20216000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F +:20218000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F +:2021A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F +:2021C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F +:2021E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +:20220000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDE +:20222000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBE +:20224000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9E +:20226000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7E +:20228000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E +:2022A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E +:2022C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E +:2022E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE +:20230000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDD +:20232000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBD +:20234000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9D +:20236000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7D +:20238000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D +:2023A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D +:2023C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D +:2023E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD +:20240000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC +:20242000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBC +:20244000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9C +:20246000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C +:20248000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5C +:2024A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3C +:2024C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C +:2024E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC +:20250000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB +:20252000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBB +:20254000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9B +:20256000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7B +:20258000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B +:2025A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B +:2025C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1B +:2025E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB +:20260000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDA +:20262000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBA +:20264000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A +:20266000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7A +:20268000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5A +:2026A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3A +:2026C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1A +:2026E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA +:20270000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9 +:20272000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB9 +:20274000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99 +:20276000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF79 +:20278000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF59 +:2027A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF39 +:2027C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF19 +:2027E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9 +:20280000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8 +:20282000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB8 +:20284000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF98 +:20286000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF78 +:20288000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF58 +:2028A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF38 +:2028C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF18 +:2028E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8 +:20290000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7 +:20292000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB7 +:20294000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF97 +:20296000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77 +:20298000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF57 +:2029A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF37 +:2029C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF17 +:2029E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7 +:202A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6 +:202A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB6 +:202A4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF96 +:202A6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF76 +:202A8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF56 +:202AA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF36 +:202AC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF16 +:202AE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6 +:202B0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD5 +:202B2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5 +:202B4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF95 +:202B6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF75 +:202B8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF55 +:202BA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF35 +:202BC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF15 +:202BE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5 +:202C0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4 +:202C2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB4 +:202C4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF94 +:202C6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74 +:202C8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF54 +:202CA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF34 +:202CC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF14 +:202CE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4 +:202D0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3 +:202D2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB3 +:202D4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF93 +:202D6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF73 +:202D8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF53 +:202DA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF33 +:202DC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF13 +:202DE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3 +:202E0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD2 +:202E2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB2 +:202E4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF92 +:202E6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72 +:202E8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF52 +:202EA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF32 +:202EC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF12 +:202EE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2 +:202F0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD1 +:202F2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB1 +:202F4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF91 +:202F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF71 +:202F8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF51 +:202FA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF31 +:202FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF11 +:202FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1 +:20300000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0 +:20302000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0 +:20304000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90 +:20306000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70 +:20308000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50 +:2030A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30 +:2030C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF10 +:2030E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 +:20310000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF +:20312000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF +:20314000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F +:20316000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F +:20318000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F +:2031A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F +:2031C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F +:2031E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF +:20320000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE +:20322000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAE +:20324000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E +:20326000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E +:20328000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4E +:2032A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E +:2032C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E +:2032E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEE +:20330000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCD +:20332000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD +:20334000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D +:20336000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6D +:20338000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4D +:2033A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2D +:2033C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D +:2033E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED +:20340000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCC +:20342000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAC +:20344000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8C +:20346000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C +:20348000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C +:2034A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C +:2034C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0C +:2034E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC +:20350000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCB +:20352000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAB +:20354000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8B +:20356000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6B +:20358000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4B +:2035A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2B +:2035C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B +:2035E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEB +:20360000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCA +:20362000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAA +:20364000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8A +:20366000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A +:20368000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4A +:2036A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A +:2036C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A +:2036E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA +:20370000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9 +:20372000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9 +:20374000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF89 +:20376000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF69 +:20378000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF49 +:2037A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF29 +:2037C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF09 +:2037E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9 +:20380000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC8 +:20382000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA8 +:20384000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF88 +:20386000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF68 +:20388000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF48 +:2038A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF28 +:2038C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF08 +:2038E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8 +:20390000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7 +:20392000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA7 +:20394000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87 +:20396000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF67 +:20398000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF47 +:2039A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF27 +:2039C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07 +:2039E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7 +:203A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC6 +:203A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA6 +:203A4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF86 +:203A6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF66 +:203A8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF46 +:203AA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF26 +:203AC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF06 +:203AE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6 +:203B0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC5 +:203B2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5 +:203B4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF85 +:203B6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF65 +:203B8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF45 +:203BA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF25 +:203BC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05 +:203BE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5 +:203C0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4 +:203C2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA4 +:203C4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF84 +:203C6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF64 +:203C8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF44 +:203CA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF24 +:203CC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04 +:203CE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4 +:203D0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC3 +:203D2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA3 +:203D4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF83 +:203D6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF63 +:203D8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF43 +:203DA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF23 +:203DC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03 +:203DE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3 +:203E0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC2 +:203E2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA2 +:203E4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF82 +:203E6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF62 +:203E8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF42 +:203EA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF22 +:203EC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02 +:203EE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2 +:203F0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC1 +:203F2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA1 +:203F4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF81 +:203F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF61 +:203F8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF41 +:203FA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF21 +:203FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01 +:203FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 +:20400000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 +:20402000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0 +:20404000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 +:20406000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60 +:20408000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40 +:2040A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20 +:2040C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +:2040E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 +:20410000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF +:20412000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F +:20414000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F +:20416000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F +:20418000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F +:2041A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F +:2041C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +:2041E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF +:20420000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBE +:20422000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9E +:20424000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7E +:20426000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E +:20428000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E +:2042A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E +:2042C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE +:2042E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDE +:20430000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBD +:20432000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9D +:20434000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7D +:20436000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D +:20438000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D +:2043A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D +:2043C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD +:2043E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDD +:20440000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBC +:20442000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9C +:20444000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C +:20446000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5C +:20448000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3C +:2044A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C +:2044C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC +:2044E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC +:20450000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBB +:20452000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9B +:20454000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7B +:20456000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B +:20458000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B +:2045A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1B +:2045C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB +:2045E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB +:20460000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBA +:20462000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A +:20464000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7A +:20466000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5A +:20468000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3A +:2046A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1A +:2046C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA +:2046E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDA +:20470000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB9 +:20472000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99 +:20474000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF79 +:20476000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF59 +:20478000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF39 +:2047A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF19 +:2047C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9 +:2047E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9 +:20480000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB8 +:20482000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF98 +:20484000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF78 +:20486000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF58 +:20488000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF38 +:2048A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF18 +:2048C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8 +:2048E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8 +:20490000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB7 +:20492000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF97 +:20494000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77 +:20496000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF57 +:20498000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF37 +:2049A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF17 +:2049C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7 +:2049E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7 +:204A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB6 +:204A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF96 +:204A4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF76 +:204A6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF56 +:204A8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF36 +:204AA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF16 +:204AC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6 +:204AE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6 +:204B0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5 +:204B2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF95 +:204B4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF75 +:204B6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF55 +:204B8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF35 +:204BA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF15 +:204BC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5 +:204BE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD5 +:204C0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB4 +:204C2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF94 +:204C4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74 +:204C6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF54 +:204C8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF34 +:204CA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF14 +:204CC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4 +:204CE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4 +:204D0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB3 +:204D2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF93 +:204D4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF73 +:204D6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF53 +:204D8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF33 +:204DA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF13 +:204DC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3 +:204DE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3 +:204E0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB2 +:204E2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF92 +:204E4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72 +:204E6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF52 +:204E8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF32 +:204EA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF12 +:204EC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2 +:204EE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD2 +:204F0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB1 +:204F2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF91 +:204F4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF71 +:204F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF51 +:204F8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF31 +:204FA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF11 +:204FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1 +:204FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD1 +:20500000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0 +:20502000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90 +:20504000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70 +:20506000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50 +:20508000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30 +:2050A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF10 +:2050C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 +:2050E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0 +:20510000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF +:20512000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F +:20514000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F +:20516000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F +:20518000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F +:2051A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F +:2051C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF +:2051E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF +:20520000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAE +:20522000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E +:20524000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E +:20526000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4E +:20528000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E +:2052A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E +:2052C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEE +:2052E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE +:20530000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD +:20532000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D +:20534000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6D +:20536000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4D +:20538000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2D +:2053A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D +:2053C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED +:2053E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCD +:20540000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAC +:20542000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8C +:20544000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C +:20546000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C +:20548000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C +:2054A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0C +:2054C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC +:2054E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCC +:20550000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAB +:20552000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8B +:20554000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6B +:20556000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4B +:20558000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2B +:2055A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B +:2055C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEB +:2055E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCB +:20560000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAA +:20562000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8A +:20564000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A +:20566000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4A +:20568000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A +:2056A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A +:2056C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA +:2056E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCA +:20570000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9 +:20572000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF89 +:20574000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF69 +:20576000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF49 +:20578000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF29 +:2057A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF09 +:2057C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9 +:2057E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9 +:20580000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA8 +:20582000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF88 +:20584000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF68 +:20586000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF48 +:20588000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF28 +:2058A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF08 +:2058C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8 +:2058E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC8 +:20590000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA7 +:20592000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87 +:20594000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF67 +:20596000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF47 +:20598000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF27 +:2059A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07 +:2059C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7 +:2059E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7 +:205A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA6 +:205A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF86 +:205A4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF66 +:205A6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF46 +:205A8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF26 +:205AA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF06 +:205AC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6 +:205AE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC6 +:205B0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5 +:205B2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF85 +:205B4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF65 +:205B6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF45 +:205B8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF25 +:205BA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05 +:205BC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5 +:205BE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC5 +:205C0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA4 +:205C2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF84 +:205C4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF64 +:205C6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF44 +:205C8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF24 +:205CA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04 +:205CC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4 +:205CE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4 +:205D0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA3 +:205D2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF83 +:205D4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF63 +:205D6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF43 +:205D8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF23 +:205DA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03 +:205DC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3 +:205DE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC3 +:205E0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA2 +:205E2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF82 +:205E4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF62 +:205E6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF42 +:205E8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF22 +:205EA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02 +:205EC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2 +:205EE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC2 +:205F0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA1 +:205F2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF81 +:205F4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF61 +:205F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF41 +:205F8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF21 +:205FA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01 +:205FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 +:205FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC1 +:20600000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0 +:20602000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 +:20604000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60 +:20606000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40 +:20608000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20 +:2060A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +:2060C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 +:2060E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 +:20610000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F +:20612000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F +:20614000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F +:20616000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F +:20618000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F +:2061A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +:2061C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF +:2061E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF +:20620000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9E +:20622000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7E +:20624000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E +:20626000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E +:20628000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E +:2062A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE +:2062C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDE +:2062E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBE +:20630000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9D +:20632000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7D +:20634000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D +:20636000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D +:20638000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D +:2063A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD +:2063C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDD +:2063E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBD +:20640000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9C +:20642000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C +:20644000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5C +:20646000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3C +:20648000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C +:2064A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC +:2064C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC +:2064E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBC +:20650000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9B +:20652000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7B +:20654000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B +:20656000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B +:20658000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1B +:2065A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB +:2065C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB +:2065E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBB +:20660000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A +:20662000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7A +:20664000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5A +:20666000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3A +:20668000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1A +:2066A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA +:2066C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDA +:2066E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBA +:20670000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99 +:20672000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF79 +:20674000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF59 +:20676000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF39 +:20678000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF19 +:2067A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9 +:2067C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9 +:2067E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB9 +:20680000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF98 +:20682000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF78 +:20684000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF58 +:20686000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF38 +:20688000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF18 +:2068A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8 +:2068C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8 +:2068E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB8 +:20690000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF97 +:20692000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77 +:20694000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF57 +:20696000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF37 +:20698000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF17 +:2069A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7 +:2069C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7 +:2069E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB7 +:206A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF96 +:206A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF76 +:206A4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF56 +:206A6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF36 +:206A8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF16 +:206AA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6 +:206AC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6 +:206AE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB6 +:206B0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF95 +:206B2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF75 +:206B4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF55 +:206B6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF35 +:206B8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF15 +:206BA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5 +:206BC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD5 +:206BE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5 +:206C0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF94 +:206C2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74 +:206C4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF54 +:206C6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF34 +:206C8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF14 +:206CA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4 +:206CC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4 +:206CE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB4 +:206D0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF93 +:206D2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF73 +:206D4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF53 +:206D6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF33 +:206D8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF13 +:206DA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3 +:206DC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3 +:206DE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB3 +:206E0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF92 +:206E2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72 +:206E4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF52 +:206E6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF32 +:206E8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF12 +:206EA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2 +:206EC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD2 +:206EE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB2 +:206F0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF91 +:206F2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF71 +:206F4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF51 +:206F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF31 +:206F8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF11 +:206FA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1 +:206FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD1 +:206FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB1 +:2070000055C000006EC000006CC000006AC0000068C0000066C0000064C0000062C0000043 +:2070200060C000005EC00000F2C400005AC0000058C0000056C0000054C0000052C00000EE +:2070400050C0000078C000004CC000004AC0000048C0000046C0000044C0000042C00000BE +:2070600040C000003EC000003CC000003AC0000038C0000036C0000034C0000032C0000048 +:2070800030C000002EC000002CC000002AC0000028C0000026C0000024C0000022C00000A8 +:2070A00020C000001EC000001CC0000011241FBECFEFDAE0DEBFCDBF11E0A0E0B1E0E2E3BC +:2070C000FFE702C005900D92A83AB107D9F711E0A8EAB1E001C01D92AE3BB107E1F78FD30B +:2070E00026C78ECFF89410926F0010928100109285001092840081E085BF15BE47985D9AEB +:20710000289A0C94000008952091B2013091B3012F5F3F4F3093B3012093B201932F37FFA6 +:2071200003C08EEF831B982F990F921710F447980895479A08951F920F920FB60F9211246E +:207140002F938F939F93EF93FF9310928500109284008091A8019091A901009741F00197D3 +:207160009093A9018093A801892B09F45D9A8091AA019091AB01009741F001979093AB0126 +:207180008093AA01892B09F4289AE0E0F0E0859194918F5F9F4F49F08091AC019091AD0151 +:2071A00001969093AD018093AC01FF91EF919F918F912F910F900FBE0F901F90189584E0BC +:2071C0008093E9000DC08091E8008B778093E80003C08EB3882351F08091E80082FFF9CFBE +:2071E0008091E80085FFEFCF8091F1000895982F83E08093E9008091E80085FD0DC0809136 +:20720000E8008E778093E80003C08EB3882369F08091E80080FFF9CF9093F1005D9884E6CB +:2072200090E09093A9018093A80108954F925F926F927F928F929F92AF92BF92CF92DF921E +:20724000EF92FF920F931F93CF93DF9384E08093E9008091E80082FF57C2289884E690E067 +:207260009093AB018093AA01AADF182F853481F48CE49DE19093AD018093AC0107B600FC4B +:20728000FDCFF999FECF81E180935700E89503C0843519F494DF8DE00DC28C34E1F38035F9 +:2072A000D1F3843721F484E4A2DF80E003C2813611F489E5FFC18134B1F481DF182F7FDFE3 +:2072C00090E0880F991FAA2797FDA095BA2F312F330F20E0442737FD4095542F822B932B68 +:2072E000A42BB52BB8C1803711F483E5E3C1833549F4C0E0D1E089917ADF21E0C730D20714 +:20730000D1F7D9C1863521F481E371DF80E3D2C1833731F487E86BDF85E969DF8EE1CAC149 +:207320008536B9F4E0E0F0E093E085E090935700E89507B600FCFDCF80935700E89507B65D +:2073400000FCFDCFE058FF4FA0E7E030FA0771F7A2CF823739F4E1E0F0E089E08093570024 +:207360008491A8C1863439F4E0E0F0E089E08093570084919FC18E3439F4E3E0F0E089E0E5 +:2073800080935700849196C1813539F4E2E0F0E089E08093570084918DC1823631F489E521 +:2073A00026DF80E024DF80E885C1823419F0873609F0E5C01092AD011092AC0100DF082FE8 +:2073C000FEDEF82EFCDE682E8554823008F071C1902F80E0CF2DD0E0C82BD92B10926F00B3 +:2073E000173609F04BC081E180935700E895DD24CC24C3943FC0E090AE01F090AF010091CC +:20740000B0011091B101B6E46B16D9F4ED2DF0E0EE29FF29E4918E2FEADEDD2081F082E08D +:2074200090E0A0E0B0E0E80EF91E0A1F1B1FE092AE01F092AF010093B0011093B101DC2470 +:2074400018C0D801C701B695A7959795879559D5CEDE82E090E0A0E0B0E0E80EF91E0A1FF2 +:207460001B1FE092AE01F092AF010093B0011093B1012197209709F0BECF7DC08090AE01F5 +:207480009090AF01A090B001B090B10196E4691609F05DC083E0F40180935700E89507B63E +:2074A00000FCFDCF54C0F6E46F1661F5772031F1E090AE01F090AF010091B0011091B1019E +:2074C0007EDED82ECC24852D90E08C299D29F7010C0140925700E895112482E090E0A0E08B +:2074E000B0E0E80EF91E0A1F1B1FE092AE01F092AF010093B0011093B10102C060DE582E1A +:20750000742423C0E090AE01F090AF010091B0011091B10116950795F794E79450DE682FFA +:20752000C701F7D48091AE019091AF01A091B001B091B1010296A11DB11D8093AE01909349 +:20754000AF01A093B001B093B101219704C05524772444244394209709F0A5CF96E46916B6 +:2075600041F485E0F40180935700E89507B600FCFDCF8DE03CDE82E080936F009CC0833492 +:2075800071F40091AE011091AF0119DE90E021E0F8010C0120935700E89511247CCE8336C8 +:2075A00019F5E090AE01F090AF010091B0011091B10105DEF701E16090E021E00C0120938C +:2075C0005700E895112482E090E0A0E0B0E0E80EF91E0A1F1B1FE092AE01F092AF0100936A +:2075E000B0011093B10157CE8D3661F4E091AE01F091AF0185E080935700E89507B600FCF2 +:20760000FDCF49CE823551F4E091AE01F091AF0105911491812FEBDD802F4CC0843421F5FE +:20762000E090AE01F090AF010091B0011091B10116950795F794E794C2DD682FC70169D4DE +:207640008091AE019091AF01A091B001B091B1010296A11DB11D8093AE019093AF01A093D8 +:20766000B001B093B10117CE843609F5E090AE01F090AF010091B0011091B101D801C70142 +:20768000B695A795979587953CD4B1DD82E090E0A0E0B0E0E80EF91E0A1F1B1FE092AE010A +:2076A000F092AF010093B0011093B10104C08B3111F08FE39CDD83E08093E9009091E8002B +:2076C0008091E8008E778093E80095FF04C010C08EB38823C9F08091E80080FFF9CF809193 +:2076E000E8008E778093E80003C08EB3882361F08091E80080FFF9CF84E08093E9008091F1 +:20770000E8008B778093E800DF91CF911F910F91FF90EF90DF90CF90BF90AF909F908F90AC +:207720007F906F905F904F9008959091B601892F8F77813249F58091B7018032A1F081328A +:2077400019F5913A09F58091E800877F8093E8008DE091E067E070E00BD28091E8008B770B +:207760008093E8000895913279F48091E800877F8093E8008DE091E067E070E05DD2809192 +:20778000E8008E778093E800089582E061EC42E0B5D083E061E842E1B1D084E060E842E1EF +:2077A000ADC084B7877F84BF88E10FB6F89480936000109260000FBE20E880E090E00FB63F +:2077C000F89420936100809361000FBE81E085BF92E095BF3F9A209A559AE1E6F0E02083A1 +:2077E000108247985D9A289A109289008AEF8093880090936F0083E080938100F0C0409116 +:20780000000850910108109201081092000894B714BE88E10FB6F8948093600010926000D5 +:207820000FBE292F30E0F901E270F07091FD18C090FF05C0859194918F5F9F4F81F423FFFF +:207840000FC08091090190910A014817590741F0E0E0F0E0859194918F5F9F4F09F042DC64 +:20786000A0DF78941092AD011092AC010CC0DEDC36D38091AC019091AD0181549F4110F00D +:207880001092140141DC80911401882381F78091E00081608093E00025DC80E090E0089598 +:2078A000FA01923049F0933061F09130F9F485E191E022E130E01EC087E291E02EE330E04D +:2078C00019C0882329F485E691E024E030E012C0813029F489E691E022E230E00BC0823006 +:2078E00029F48DE891E028E130E004C080E090E020E030E091838083C90108958093E9004E +:207900008091EB0081608093EB001092ED006093EC004093ED008091EE00881F8827881F62 +:2079200008958091B60188238CF403C08EB38823B1F08091E80082FFF9CF8091E8008B772A +:207940008093E80008958EB3882349F08091E80080FFF9CF8091E8008E778093E800089594 +:20796000EF92FF920F931F9345D04CD008ED10E0F80180818F77808380818068808380819B +:207980008F7D808319BC1EBA1092B40180EEE82EF12CF70180818B7F8083F8018081816052 +:2079A000808380E060E042E0A9DFE1EEF0E080818E7F8083E2EEF0E0808181608083808144 +:2079C00088608083F70180818E7F8083F8018081806180831F910F91FF90EF900895E7ED06 +:2079E000F0E08081816080838AE482BF81E08093B501B6CFE8EDF0E080818E7F808310921C +:207A0000E20008951092DA001092E10008951F920F920FB60F9211242F933F934F935F93F6 +:207A20006F937F938F939F93AF93BF93EF93FF938091DA0080FF1BC08091D80080FF17C0B2 +:207A40008091DA008E7F8093DA008091D90080FF0BC080E189BD82E189BD09B400FEFDCF36 +:207A600081E08EBB3BD203C019BC1EBA37D28091E10080FF17C08091E20080FF13C0809138 +:207A8000E2008E7F8093E2008091E20080618093E2008091D80080628093D80019BC85E049 +:207AA0008EBB1CD28091E10084FF2CC08091E20084FF28C080E189BD82E189BD09B400FEC5 +:207AC000FDCF8091D8008F7D8093D8008091E1008F7E8093E1008091E2008F7E8093E20012 +:207AE0008091E20081608093E2008091B401882331F48091E30087FD02C081E001C084E067 +:207B00008EBBECD18091E10083FF21C08091E20083FF1DC08091E100877F8093E10082E06A +:207B20008EBB1092B4018091E1008E7F8093E1008091E2008E7F8093E2008091E2008061E9 +:207B40008093E20080E060E042E0D8DEC7D1FF91EF91BF91AF919F918F917F916F915F9130 +:207B60004F913F912F910F900FBE0F901F9018959C014091BC015091BD014617570718F49D +:207B8000F90190E044C06115710511F0AB01F8CF8091E8008E778093E80040E050E0F0CF0F +:207BA0008EB3882309F444C0853009F443C08091E80083FF02C081E008958091E80082FD70 +:207BC00031C08091E80080FF22C08091F3009091F200782F60E0292F30E0262B372B07C07A +:207BE00081918093F100415050402F5F3F4F4115510519F02830310598F390E02830310566 +:207C000009F491E08091E8008E778093E8004115510531F6992321F605C08EB3882341F075 +:207C2000853041F08091E80082FFF7CF80E0089582E0089583E008959C016115710529F47C +:207C40008091E8008B778093E800F90126C08EB3882391F1853091F18091E80083FF02C06C +:207C600081E008958091E80082FFF1CF06C08091F10081936150704059F02091F300809191 +:207C8000F200322F20E090E0822B932B892B79F78091E8008B778093E80061157105B9F601 +:207CA00005C08EB3882341F0853041F08091E80080FFF7CF80E0089582E0089583E00895C2 +:207CC0000F931F93DF93CF9300D0CDB7DEB7E6EBF1E08091F100819381E0EE3BF807C9F792 +:207CE00024DD8091E80083FFE4C08091B6019091B701953009F46DC0963040F4913081F1A7 +:207D0000913070F0933009F0D4C02AC0983009F4A3C0993009F4B2C0963009F0CAC07CC023 +:207D2000803809F4C6C0823809F0C3C08091BA0187708093E9008091EB001092E9002091DB +:207D4000E800277F2093E80090E025E0969587952A95E1F781708093F1001092F10087C0D8 +:207D6000882319F0823009F0A4C08F71823009F0A0C08091B801882331F52091BA01277097 +:207D800009F497C02093E9008091EB0080FF1BC0933021F48091EB00806213C08091EB0018 +:207DA00080618093EB0081E090E002C0880F991F2A95E2F78093EA001092EA008091EB00E5 +:207DC00088608093EB001092E9008091E800877F51C0882309F06DC01091B8011F770FB79B +:207DE000F8948091E800877F8093E8009ADD8091E80080FFFCCF8091E3008078812B809398 +:207E0000E30080688093E300112311F482E001C083E08EBB0FBF4DC08058823008F049C033 +:207E20008091B8019091B9016091BA01AE014F5F5F4F36DDBC01009709F43BC08091E8008E +:207E4000877F8093E80089819A8192DE8091E8008B778093E8002DC0803859F58091E800AA +:207E6000877F8093E8008091B4018093F1008091E8008E778093E80054DD1BC08823C9F4CA +:207E80009091B8019230A8F48091E800877F8093E8009093B40145DD8091B401882331F420 +:207EA0008091E30087FD02C081E001C084E08EBB6CDC8091E80083FF0AC08091EB0080624E +:207EC0008093EB008091E800877F8093E8000F900F90CF91DF911F910F91089508951F9360 +:207EE0008EB3882361F01091E9001092E9008091E80083FF01C0E4DE17701093E9001F916F +:207F00000895F999FECF92BD81BDF89A992780B50895262FF999FECF1FBA92BD81BD20BDBD +:207F20000FB6F894FA9AF99A0FBE01960895F894FFCF4341544552494E4100777700080031 +:207F40000000000000080112011001020000084123360001000201000109023E00020100FF +:207F600080320904000001020201000524001001042402040524060001070582030800FF0C +:207F800009040100020A000000070504021000010705830210000104030904220341007216 +:207FA000006400750069006E006F0020004C0065006F006E006100720064006F0000001836 +:1A7FC00003410072006400750069006E006F0020004C004C004300000000D7 +:00000001FF diff --git a/external/arduino/avr/bootloaders/caterina/Leonardo-prod-firmware-2012-12-10.txt b/external/arduino/avr/bootloaders/caterina/Leonardo-prod-firmware-2012-12-10.txt new file mode 100644 index 000000000..5beb659a0 --- /dev/null +++ b/external/arduino/avr/bootloaders/caterina/Leonardo-prod-firmware-2012-12-10.txt @@ -0,0 +1,11 @@ +Builds against LUFA version 111009 +make version 3.81 +avrdude version 5.11 + +All AVR tools except avrdude were installed by CrossPack 20100115: +avr-gcc version 4.3.3 (GCC) +Thread model: single +Configured with: ../configure —prefix=/usr/local/CrossPack-AVR-20100115 —disable-dependency-tracking —disable-nls —disable-werror —target=avr —enable-languages=c,c++ —disable-nls —disable-libssp —with-dwarf2 +avr-libc version 1.6.7 +binutils version 2.19 + diff --git a/external/arduino/avr/bootloaders/caterina/Makefile b/external/arduino/avr/bootloaders/caterina/Makefile new file mode 100644 index 000000000..884e3040d --- /dev/null +++ b/external/arduino/avr/bootloaders/caterina/Makefile @@ -0,0 +1,732 @@ +# Hey Emacs, this is a -*- makefile -*- +#---------------------------------------------------------------------------- +# WinAVR Makefile Template written by Eric B. Weddington, Jrg Wunsch, et al. +# >> Modified for use with the LUFA project. << +# +# Released to the Public Domain +# +# Additional material for this makefile was written by: +# Peter Fleury +# Tim Henigan +# Colin O'Flynn +# Reiner Patommel +# Markus Pfaff +# Sander Pool +# Frederik Rouleau +# Carlos Lamas +# Dean Camera +# Opendous Inc. +# Denver Gingerich +# +#---------------------------------------------------------------------------- +# On command line: +# +# make all = Make software. +# +# make clean = Clean out built project files. +# +# make coff = Convert ELF to AVR COFF. +# +# make extcoff = Convert ELF to AVR Extended COFF. +# +# make program = Download the hex file to the device, using avrdude. +# Please customize the avrdude settings below first! +# +# make doxygen = Generate DoxyGen documentation for the project (must have +# DoxyGen installed) +# +# make debug = Start either simulavr or avarice as specified for debugging, +# with avr-gdb or avr-insight as the front end for debugging. +# +# make filename.s = Just compile filename.c into the assembler code only. +# +# make filename.i = Create a preprocessed source file for use in submitting +# bug reports to the GCC project. +# +# To rebuild project do "make clean" then "make all". +#---------------------------------------------------------------------------- + +# USB vendor ID (VID) +# reuse of this VID by others is forbidden by USB-IF +# official Arduino LLC VID +# VID = 0x2341 + + +# USB product ID (PID) +# official Leonardo PID +# PID = 0x0036 +# official Micro PID +# PID = 0x0037 +# official Esplora PID +# PID = 0x003C + +# MCU name +MCU = atmega32u4 + + +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + + +# Target board (see library "Board Types" documentation, NONE for projects not requiring +# LUFA board drivers). If USER is selected, put custom board drivers in a directory called +# "Board" inside the application directory. +BOARD = USER + + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + + +# Starting byte address of the bootloader, as a byte address - computed via the formula +# BOOT_START = ((FLASH_SIZE_KB - BOOT_SECTION_SIZE_KB) * 1024) +# +# Note that the bootloader size and start address given in AVRStudio is in words and not +# bytes, and so will need to be doubled to obtain the byte address needed by AVR-GCC. +FLASH_SIZE_KB = 32 +BOOT_SECTION_SIZE_KB = 4 +BOOT_START = 0x$(shell echo "obase=16; ($(FLASH_SIZE_KB) - $(BOOT_SECTION_SIZE_KB)) * 1024" | bc) + + +# Output format. (can be srec, ihex, binary) +FORMAT = ihex + + +# Target file name (without extension). +TARGET = Caterina + + +# Object files directory +# To put object files in current directory, use a dot (.), do NOT make +# this an empty or blank macro! +OBJDIR = . + + +# Path to the LUFA library +LUFA_PATH = ../../../../../../LUFA/LUFA-111009 + + +# LUFA library compile-time options and predefined tokens +LUFA_OPTS = -D USB_DEVICE_ONLY +LUFA_OPTS += -D DEVICE_STATE_AS_GPIOR=0 +LUFA_OPTS += -D ORDERED_EP_CONFIG +LUFA_OPTS += -D FIXED_CONTROL_ENDPOINT_SIZE=8 +LUFA_OPTS += -D FIXED_NUM_CONFIGURATIONS=1 +LUFA_OPTS += -D USE_RAM_DESCRIPTORS +LUFA_OPTS += -D USE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" +LUFA_OPTS += -D NO_INTERNAL_SERIAL +LUFA_OPTS += -D NO_DEVICE_SELF_POWER +LUFA_OPTS += -D NO_DEVICE_REMOTE_WAKEUP +LUFA_OPTS += -D NO_SOF_EVENTS + +#LUFA_OPTS += -D NO_BLOCK_SUPPORT +#LUFA_OPTS += -D NO_EEPROM_BYTE_SUPPORT +#LUFA_OPTS += -D NO_FLASH_BYTE_SUPPORT +LUFA_OPTS += -D NO_LOCK_BYTE_WRITE_SUPPORT + + +# Create the LUFA source path variables by including the LUFA root makefile +include $(LUFA_PATH)/LUFA/makefile + + +# List C source files here. (C dependencies are automatically generated.) +SRC = $(TARGET).c \ + Descriptors.c \ + $(LUFA_SRC_USB) \ + + +# List C++ source files here. (C dependencies are automatically generated.) +CPPSRC = + + +# List Assembler source files here. +# Make them always end in a capital .S. Files ending in a lowercase .s +# will not be considered source files but generated files (assembler +# output from the compiler), and will be deleted upon "make clean"! +# Even though the DOS/Win* filesystem matches both .s and .S the same, +# it will preserve the spelling of the filenames, and gcc itself does +# care about how the name is spelled on its command-line. +ASRC = + + +# Optimization level, can be [0, 1, 2, 3, s]. +# 0 = turn off optimization. s = optimize for size. +# (Note: 3 is not always the best optimization level. See avr-libc FAQ.) +OPT = s + + +# Debugging format. +# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs. +# AVR Studio 4.10 requires dwarf-2. +# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run. +DEBUG = dwarf-2 + + +# List any extra directories to look for include files here. +# Each directory must be seperated by a space. +# Use forward slashes for directory separators. +# For a directory that has spaces, enclose it in quotes. +EXTRAINCDIRS = $(LUFA_PATH)/ + + +# Compiler flag to set the C Standard level. +# c89 = "ANSI" C +# gnu89 = c89 plus GCC extensions +# c99 = ISO C99 standard (not yet fully implemented) +# gnu99 = c99 plus GCC extensions +CSTANDARD = -std=c99 + + +# Place -D or -U options here for C sources +CDEFS = -DF_CPU=$(F_CPU)UL +CDEFS += -DF_USB=$(F_USB)UL +CDEFS += -DBOARD=BOARD_$(BOARD) -DARCH=ARCH_$(ARCH) +CDEFS += -DBOOT_START_ADDR=$(BOOT_START)UL +CDEFS += -DDEVICE_VID=$(VID)UL +CDEFS += -DDEVICE_PID=$(PID)UL +CDEFS += $(LUFA_OPTS) + + +# Place -D or -U options here for ASM sources +ADEFS = -DF_CPU=$(F_CPU) +ADEFS += -DF_USB=$(F_USB)UL +ADEFS += -DBOARD=BOARD_$(BOARD) +ADEFS += -DBOOT_START_ADDR=$(BOOT_START)UL +ADEFS += $(LUFA_OPTS) + + +# Place -D or -U options here for C++ sources +CPPDEFS = -DF_CPU=$(F_CPU)UL +CPPDEFS += -DF_USB=$(F_USB)UL +CPPDEFS += -DBOARD=BOARD_$(BOARD) +CPPDEFS += -DBOOT_START_ADDR=$(BOOT_START)UL +CPPDEFS += $(LUFA_OPTS) +#CPPDEFS += -D__STDC_LIMIT_MACROS +#CPPDEFS += -D__STDC_CONSTANT_MACROS + + + +#---------------- Compiler Options C ---------------- +# -g*: generate debugging information +# -O*: optimization level +# -f...: tuning, see GCC manual and avr-libc documentation +# -Wall...: warning level +# -Wa,...: tell GCC to pass this to the assembler. +# -adhlns...: create assembler listing +CFLAGS = -g$(DEBUG) +CFLAGS += $(CDEFS) +CFLAGS += -O$(OPT) +CFLAGS += -funsigned-char +CFLAGS += -funsigned-bitfields +CFLAGS += -ffunction-sections +CFLAGS += -fno-inline-small-functions +CFLAGS += -fpack-struct +CFLAGS += -fshort-enums +CFLAGS += -fno-strict-aliasing +CFLAGS += -Wall +CFLAGS += -Wstrict-prototypes +#CFLAGS += -mshort-calls +#CFLAGS += -fno-unit-at-a-time +#CFLAGS += -Wundef +#CFLAGS += -Wunreachable-code +#CFLAGS += -Wsign-compare +CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst) +CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) +CFLAGS += $(CSTANDARD) + + +#---------------- Compiler Options C++ ---------------- +# -g*: generate debugging information +# -O*: optimization level +# -f...: tuning, see GCC manual and avr-libc documentation +# -Wall...: warning level +# -Wa,...: tell GCC to pass this to the assembler. +# -adhlns...: create assembler listing +CPPFLAGS = -g$(DEBUG) +CPPFLAGS += $(CPPDEFS) +CPPFLAGS += -O$(OPT) +CPPFLAGS += -funsigned-char +CPPFLAGS += -funsigned-bitfields +CPPFLAGS += -fpack-struct +CPPFLAGS += -fshort-enums +CPPFLAGS += -fno-exceptions +CPPFLAGS += -Wall +CPPFLAGS += -Wundef +#CPPFLAGS += -mshort-calls +#CPPFLAGS += -fno-unit-at-a-time +#CPPFLAGS += -Wstrict-prototypes +#CPPFLAGS += -Wunreachable-code +#CPPFLAGS += -Wsign-compare +CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst) +CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) +#CPPFLAGS += $(CSTANDARD) + + +#---------------- Assembler Options ---------------- +# -Wa,...: tell GCC to pass this to the assembler. +# -adhlns: create listing +# -gstabs: have the assembler create line number information; note that +# for use in COFF files, additional information about filenames +# and function names needs to be present in the assembler source +# files -- see avr-libc docs [FIXME: not yet described there] +# -listing-cont-lines: Sets the maximum number of continuation lines of hex +# dump that will be displayed for a given single line of source input. +ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100 + + +#---------------- Library Options ---------------- +# Minimalistic printf version +PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min + +# Floating point printf version (requires MATH_LIB = -lm below) +PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt + +# If this is left blank, then it will use the Standard printf version. +PRINTF_LIB = +#PRINTF_LIB = $(PRINTF_LIB_MIN) +#PRINTF_LIB = $(PRINTF_LIB_FLOAT) + + +# Minimalistic scanf version +SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min + +# Floating point + %[ scanf version (requires MATH_LIB = -lm below) +SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt + +# If this is left blank, then it will use the Standard scanf version. +SCANF_LIB = +#SCANF_LIB = $(SCANF_LIB_MIN) +#SCANF_LIB = $(SCANF_LIB_FLOAT) + + +MATH_LIB = -lm + + +# List any extra directories to look for libraries here. +# Each directory must be seperated by a space. +# Use forward slashes for directory separators. +# For a directory that has spaces, enclose it in quotes. +EXTRALIBDIRS = + + + +#---------------- External Memory Options ---------------- + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# used for variables (.data/.bss) and heap (malloc()). +#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# only used for heap (malloc()). +#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff + +EXTMEMOPTS = + + + +#---------------- Linker Options ---------------- +# -Wl,...: tell GCC to pass this to linker. +# -Map: create map file +# --cref: add cross reference to map file +LDFLAGS = -Wl,-Map=$(TARGET).map,--cref +LDFLAGS += -Wl,--section-start=.text=$(BOOT_START) +LDFLAGS += -Wl,--relax +LDFLAGS += -Wl,--gc-sections +LDFLAGS += $(EXTMEMOPTS) +LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS)) +LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) +#LDFLAGS += -T linker_script.x + + + +#---------------- Programming Options (avrdude) ---------------- + +# Programming hardware +# Type: avrdude -c ? +# to get a full listing. +# +AVRDUDE_PROGRAMMER = avrispmkII + +# com1 = serial port. Use lpt1 to connect to parallel port. +AVRDUDE_PORT = usb + +AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex +#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep + + +# Uncomment the following if you want avrdude's erase cycle counter. +# Note that this counter needs to be initialized first using -Yn, +# see avrdude manual. +#AVRDUDE_ERASE_COUNTER = -y + +# Uncomment the following if you do /not/ wish a verification to be +# performed after programming the device. +#AVRDUDE_NO_VERIFY = -V + +# Increase verbosity level. Please use this when submitting bug +# reports about avrdude. See +# to submit bug reports. +#AVRDUDE_VERBOSE = -v -v + +AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) +AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY) +AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE) +AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER) + + + +#---------------- Debugging Options ---------------- + +# For simulavr only - target MCU frequency. +DEBUG_MFREQ = $(F_CPU) + +# Set the DEBUG_UI to either gdb or insight. +# DEBUG_UI = gdb +DEBUG_UI = insight + +# Set the debugging back-end to either avarice, simulavr. +DEBUG_BACKEND = avarice +#DEBUG_BACKEND = simulavr + +# GDB Init Filename. +GDBINIT_FILE = __avr_gdbinit + +# When using avarice settings for the JTAG +JTAG_DEV = /dev/com1 + +# Debugging port used to communicate between GDB / avarice / simulavr. +DEBUG_PORT = 4242 + +# Debugging host used to communicate between GDB / avarice / simulavr, normally +# just set to localhost unless doing some sort of crazy debugging when +# avarice is running on a different computer. +DEBUG_HOST = localhost + + + +#============================================================================ + + +# Define programs and commands. +SHELL = sh +CC = avr-gcc +OBJCOPY = avr-objcopy +OBJDUMP = avr-objdump +SIZE = avr-size +AR = avr-ar rcs +NM = avr-nm +AVRDUDE = /Applications/avrdude -C /Applications/avrdude.conf -B 1 +REMOVE = rm -f +REMOVEDIR = rm -rf +COPY = cp +WINSHELL = cmd + + +# Define Messages +# English +MSG_ERRORS_NONE = Errors: none +MSG_BEGIN = -------- begin -------- +MSG_END = -------- end -------- +MSG_SIZE_BEFORE = Size before: +MSG_SIZE_AFTER = Size after: +MSG_COFF = Converting to AVR COFF: +MSG_EXTENDED_COFF = Converting to AVR Extended COFF: +MSG_FLASH = Creating load file for Flash: +MSG_EEPROM = Creating load file for EEPROM: +MSG_EXTENDED_LISTING = Creating Extended Listing: +MSG_SYMBOL_TABLE = Creating Symbol Table: +MSG_LINKING = Linking: +MSG_COMPILING = Compiling C: +MSG_COMPILING_CPP = Compiling C++: +MSG_ASSEMBLING = Assembling: +MSG_CLEANING = Cleaning project: +MSG_CREATING_LIBRARY = Creating library: + + + + +# Define all object files. +OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) + +# Define all listing files. +LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) + + +# Compiler flags to generate dependency files. +GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d + + +# Combine all necessary flags and optional flags. +# Add target processor to flags. +ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS) +ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS) +ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) + + + + + +# Default target. +all: begin gccversion sizebefore build sizeafter end + +# Change the build target to build a HEX file or a library. +build: elf hex eep lss sym +#build: lib + + +elf: $(TARGET).elf +hex: $(TARGET).hex +eep: $(TARGET).eep +lss: $(TARGET).lss +sym: $(TARGET).sym +LIBNAME=lib$(TARGET).a +lib: $(LIBNAME) + + + +# Eye candy. +# AVR Studio 3.x does not check make's exit code but relies on +# the following magic strings to be generated by the compile job. +begin: + @echo + @echo $(MSG_BEGIN) + +end: + @echo $(MSG_END) + @echo + + +# Display size of file. +HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex +ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf +MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) ) +FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr ) + + +sizebefore: + @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \ + 2>/dev/null; echo; fi + +sizeafter: + @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \ + 2>/dev/null; echo; fi + + + +# Display compiler version information. +gccversion : + @$(CC) --version + + +# Program the device. +program: $(TARGET).hex $(TARGET).eep + $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) + + +# Generate avr-gdb config/init file which does the following: +# define the reset signal, load the target file, connect to target, and set +# a breakpoint at main(). +gdb-config: + @$(REMOVE) $(GDBINIT_FILE) + @echo define reset >> $(GDBINIT_FILE) + @echo SIGNAL SIGHUP >> $(GDBINIT_FILE) + @echo end >> $(GDBINIT_FILE) + @echo file $(TARGET).elf >> $(GDBINIT_FILE) + @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE) +ifeq ($(DEBUG_BACKEND),simulavr) + @echo load >> $(GDBINIT_FILE) +endif + @echo break main >> $(GDBINIT_FILE) + +debug: gdb-config $(TARGET).elf +ifeq ($(DEBUG_BACKEND), avarice) + @echo Starting AVaRICE - Press enter when "waiting to connect" message displays. + @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \ + $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT) + @$(WINSHELL) /c pause + +else + @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \ + $(DEBUG_MFREQ) --port $(DEBUG_PORT) +endif + @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE) + + + + +# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. +COFFCONVERT = $(OBJCOPY) --debugging +COFFCONVERT += --change-section-address .data-0x800000 +COFFCONVERT += --change-section-address .bss-0x800000 +COFFCONVERT += --change-section-address .noinit-0x800000 +COFFCONVERT += --change-section-address .eeprom-0x810000 + + + +coff: $(TARGET).elf + @echo + @echo $(MSG_COFF) $(TARGET).cof + $(COFFCONVERT) -O coff-avr $< $(TARGET).cof + + +extcoff: $(TARGET).elf + @echo + @echo $(MSG_EXTENDED_COFF) $(TARGET).cof + $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof + + + +# Create final output files (.hex, .eep) from ELF output file. +%.hex: %.elf + @echo + @echo $(MSG_FLASH) $@ + $(OBJCOPY) -O $(FORMAT) -R .eeprom -R .fuse -R .lock $< $@ + +%.eep: %.elf + @echo + @echo $(MSG_EEPROM) $@ + -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ + --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0 + +# Create extended listing file from ELF output file. +%.lss: %.elf + @echo + @echo $(MSG_EXTENDED_LISTING) $@ + $(OBJDUMP) -h -S -z $< > $@ + +# Create a symbol table from ELF output file. +%.sym: %.elf + @echo + @echo $(MSG_SYMBOL_TABLE) $@ + $(NM) -n $< > $@ + + + +# Create library from object files. +.SECONDARY : $(TARGET).a +.PRECIOUS : $(OBJ) +%.a: $(OBJ) + @echo + @echo $(MSG_CREATING_LIBRARY) $@ + $(AR) $@ $(OBJ) + + +# Link: create ELF output file from object files. +.SECONDARY : $(TARGET).elf +.PRECIOUS : $(OBJ) +%.elf: $(OBJ) + @echo + @echo $(MSG_LINKING) $@ + $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS) + + +# Compile: create object files from C source files. +$(OBJDIR)/%.o : %.c + @echo + @echo $(MSG_COMPILING) $< + $(CC) -c $(ALL_CFLAGS) $< -o $@ + + +# Compile: create object files from C++ source files. +$(OBJDIR)/%.o : %.cpp + @echo + @echo $(MSG_COMPILING_CPP) $< + $(CC) -c $(ALL_CPPFLAGS) $< -o $@ + + +# Compile: create assembler files from C source files. +%.s : %.c + $(CC) -S $(ALL_CFLAGS) $< -o $@ + + +# Compile: create assembler files from C++ source files. +%.s : %.cpp + $(CC) -S $(ALL_CPPFLAGS) $< -o $@ + + +# Assemble: create object files from assembler source files. +$(OBJDIR)/%.o : %.S + @echo + @echo $(MSG_ASSEMBLING) $< + $(CC) -c $(ALL_ASFLAGS) $< -o $@ + + +# Create preprocessed source for use in sending a bug report. +%.i : %.c + $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ + + +# Target: clean project. +clean: begin clean_list end + +clean_list : + @echo + @echo $(MSG_CLEANING) + $(REMOVE) $(TARGET).hex + $(REMOVE) $(TARGET).eep + $(REMOVE) $(TARGET).cof + $(REMOVE) $(TARGET).elf + $(REMOVE) $(TARGET).map + $(REMOVE) $(TARGET).sym + $(REMOVE) $(TARGET).lss + $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) + $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) + $(REMOVE) $(SRC:.c=.s) + $(REMOVE) $(SRC:.c=.d) + $(REMOVE) $(SRC:.c=.i) + $(REMOVEDIR) .dep + +doxygen: + @echo Generating Project Documentation \($(TARGET)\)... + @doxygen Doxygen.conf + @echo Documentation Generation Complete. + +clean_doxygen: + rm -rf Documentation + +checksource: + @for f in $(SRC) $(CPPSRC) $(ASRC); do \ + if [ -f $$f ]; then \ + echo "Found Source File: $$f" ; \ + else \ + echo "Source File Not Found: $$f" ; \ + fi; done + + +# Create object files directory +$(shell mkdir $(OBJDIR) 2>/dev/null) + + +# Include the dependency files. +-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*) + + +# Listing of phony targets. +.PHONY : all begin finish end sizebefore sizeafter gccversion \ +build elf hex eep lss sym coff extcoff doxygen clean \ +clean_list clean_doxygen program debug gdb-config checksource + diff --git a/external/arduino/avr/bootloaders/caterina/Micro-prod-firmware-2012-11-23.hex b/external/arduino/avr/bootloaders/caterina/Micro-prod-firmware-2012-11-23.hex new file mode 100644 index 000000000..1e1762256 --- /dev/null +++ b/external/arduino/avr/bootloaders/caterina/Micro-prod-firmware-2012-11-23.hex @@ -0,0 +1,1024 @@ +:200000000C946E010C9496010C9496010C9496010C9496010C9496010C9496010C94960150 +:200020000C9496010C9496010C94F8040C947F050C9496010C9496010C9496010C949601B6 +:200040000C9496010C9496010C9496010C9496010C9496010C9496010C9496010C94B501C9 +:200060000C9496010C9496010C9496010C9496010C9496010C9496010C9496010C949601C8 +:200080000C9496010C9496010C9496010C9496010C9496010C9496010C9496010C949601A8 +:2000A0000C9496010C9496010C94960100000000240027002A002D003000000000002500A4 +:2000C00028002B002E003100000000002300260029002C002F00040404040403040502027D +:2000E0000202040302020202060606060606040402020204040802011040804010204080A8 +:200100004080080204018040201002011080102040400000000200080E0000030401000BB2 +:200120000000070605040100080A0B0C0D09040309042203410072006400750069006E00CD +:200140006F0020004D006900630072006F00200020002000180341007200640075006900A6 +:200160006E006F0020004C004C00430012010002000000404123378000010102000112011F +:200180000002020000404123378000010102000100C18081C1080B00020202010009040051 +:2001A000000102020000052400100105240101010424020605240600010705810310004094 +:2001C00009040100020A000000070502024000000705830240000005010902A1010901A186 +:2001E000008501050919012903150025019503750181029501750581030501093009310943 +:20020000381581257F750895038106C0C005010906A1018502050719E029E715002501754D +:20022000019508810295017508810395067508150025650507190029658100C0090402004C +:2002400001030000000921010100012265000705840340000100000000000000002A2B2895 +:200260000000000000000000000000000000000000000000002C9EB4A0A1A2A434A6A7A553 +:20028000AE362D3738271E1F20212223242526B333B62EB7B89F8485868788898A8B8C8D58 +:2002A0008E8F909192939495969798999A9B9C9D2F3130A3AD350405060708090A0B0C0D7C +:2002C0000E0F101112131415161718191A1B1C1DAFB1B0B5000032041207170811241FBE81 +:2002E000CFEFDAE0DEBFCDBF11E0A0E0B1E0E4EAF2E102C005900D92AC32B107D9F711E06D +:20030000ACE2B1E001C01D92AD39B107E1F712E0CCEDD2E004C02297FE010E944C09C63D05 +:20032000D107C9F70E946C030C9450090C9400008091000161E00E94390368EE73E080E041 +:2003400090E00E94FD018091000160E00E94390368EE73E080E090E00E94FD010895809196 +:20036000000161E00E94AC0208951F920F920FB60F9211242F933F938F939F93AF93BF93E5 +:200380008091300190913101A0913201B0913301309134010196A11DB11D232F2D5F2D3794 +:2003A00020F02D570196A11DB11D209334018093300190933101A0933201B0933301809117 +:2003C0002C0190912D01A0912E01B0912F010196A11DB11D80932C0190932D01A0932E01BA +:2003E000B0932F01BF91AF919F918F913F912F910F900FBE0F901F9018959B01AC017FB734 +:20040000F89480912C0190912D01A0912E01B0912F0166B5A89B05C06F3F19F00196A11DC3 +:20042000B11D7FBFBA2FA92F982F8827860F911DA11DB11D62E0880F991FAA1FBB1F6A9577 +:20044000D1F7BC012DC0FFB7F89480912C0190912D01A0912E01B0912F01E6B5A89B05C0E7 +:20046000EF3F19F00196A11DB11DFFBFBA2FA92F982F88278E0F911DA11DB11DE2E0880FFD +:20048000991FAA1FBB1FEA95D1F7861B970B885E9340C8F2215030404040504068517C4F8F +:2004A000211531054105510571F60895789484B5826084BD84B5816084BD85B5826085BD0F +:2004C00085B5816085BDEEE6F0E0808181608083E1E8F0E010828081826080838081816043 +:2004E0008083E0E8F0E0808181608083E1E9F0E0808182608083808181608083E0E9F0E07E +:20050000808181608083E1ECF0E0808184608083808182608083808181608083E3ECF0E007 +:20052000808181608083E0ECF0E0808182608083E2ECF0E0808181608083EAE7F0E080812F +:20054000846080838081826080838081816080838081806880830895CF93DF93482F50E0E5 +:20056000CA018C509F4FFC0134914A525F4FFA018491882369F190E0880F991FFC01E455D0 +:20058000FF4FA591B491FC01E654FF4FC591D491662351F42FB7F8948C91932F9095892362 +:2005A0008C93888189230BC0623061F42FB7F8948C91932F909589238C938881832B8883B2 +:2005C0002FBF06C09FB7F8948C91832B8C939FBFDF91CF910895883071F1893068F48230EF +:2005E00031F1833020F4813009F042C01DC0833089F08430E9F512C08B3059F18C3028F41C +:200600008930E9F08A30A1F51EC08C3031F18E3079F529C0809180008F7703C0809180003C +:200620008F7D80938000089584B58F7702C084B58F7D84BD0895809190008F7707C08091DB +:2006400090008F7D03C080919000877F8093900008958091C0008F7703C08091C0008F7DDD +:200660008093C00008958091C200877F8093C2000895FF920F931F93F62E482F50E0CA0144 +:200680008E5E9E4FFC012491CA018C509F4FFC0114914A525F4FFA0104910023C9F022239D +:2006A00019F0822F0E94EB02E02FF0E0EE0FFF1FE654FF4FA591B4919FB7F894FF2021F4DE +:2006C0008C911095812302C08C91812B8C939FBF1F910F91FF900895CF93DF930E94560262 +:2006E0008DE391E00E9433040E94AF01C0E0D0E00E9498012097E1F30E940000F9CF282F17 +:20070000809137018823C1F057FF1AC015C0289A909336018091F1008193E217F307B9F75A +:200720004115510539F08091F200882319F48BE68093E800AFBF02C04FEF5FEFCA01089599 +:20074000AFB7F89427702093E9008091F200282F30E0241735070CF4A901FB019B01240F1E +:20076000311D94E6DACFDF93CF930F92CDB7DEB7BE016F5F7F4F41E050E00E947F03019712 +:2007800019F02FEF3FEF03C08981282F30E0C9010F90CF91DF910895FF920F931F93F82EEF +:2007A000142F052F40913A0150913B01212F302FC901DC01FB016EEF29C0F7FE02C0949125 +:2007C00001C09081209138013091390124173507ACF48091E8008570E1F38091E80082FF0F +:2007E00003C02FEF3FEF17C09093F100C90101968F739070892B11F46093E8002F5F3F4FEC +:200800003093390120933801119731961097A9F6812F902F9C01C9011F910F91FF900895E8 +:200820009C018091E80082FFFCCFF901260F311D03C08091F1008193E217F307D1F7289A03 +:2008400084E6809336018BEF8093E800CB0108958093E9008091F200882319F08AE38093D3 +:20086000E800089508951092370181E08093D70080EA8093D80082E189BD09B400FEFDCFAC +:2008800061E070E080E090E00E94FD0180E98093D8008CE08093E2001092E000559A209A77 +:2008A0005D98289808955F926F927F928F929F92AF92BF92CF92DF92EF92FF920F931F93C7 +:2008C000CF93DF93E82E842E752E80913701882371F18B01242F352FC901EC017AEFF72EFB +:2008E00067E0962E9E2050E4552E8E2D90E040E2A42EB12CA822B9223AE3632E20E4C22E35 +:20090000D12CC822D92258C09FB7F8949092E9008091E80085FD02C020E004C08091F200EC +:20092000252D281B9FBF222361F4FA9419F42FEF3FEF4DC061E070E080E090E00E94FD0135 +:200940003BC0822F90E0C817D9070CF42C2FC21BD1094FB7F8949092E900A114B10421F48E +:2009600006C01092F10021502223D9F719C0E7FC03C0F801922F10C0C801322F06C0FC01A2 +:200980000196E491E093F10031503323C1F706C081918093F10091509923D1F7020F111DD8 +:2009A0008091E80085FF05C0209729F4C114D10411F06092E8004FBF209709F0A5CF5D9A73 +:2009C00084E680933501282D372DC9019C01C901DF91CF911F910F91FF90EF90DF90CF907E +:2009E000BF90AF909F908F907F906F905F9008951F920F920FB60F9211242F933F934F931E +:200A00005F936F937F938F939F93AF93BF93EF93FF938091E1001092E100982F83FF0FC047 +:200A20001092E90081E08093EB001092EC0082E38093ED001092370188E08093F00092FF03 +:200A400034C083E08093E9008091F200882319F08AE38093E8008FB7F89492E09093E900D4 +:200A60009091F2008FBF992321F082E891E00E94550780913501882351F080913501815024 +:200A80008093350180913501882309F45D9880913601882351F08091360181508093360192 +:200AA00080913601882309F42898FF91EF91BF91AF919F918F917F916F915F914F913F91E6 +:200AC0002F910F900FBE0F901F9018950F931F93DF93CF930F92CDB7DEB719828E010F5F75 +:200AE0001F4FC8010E947B07C8010E941409898190E00F90CF91DF911F910F9108951F928C +:200B00000F920FB60F921124EF92FF921F932F933F934F935F936F937F938F939F93AF93C3 +:200B2000BF93EF93FF93DF93CF93CDB7DEB76197DEBFCDBF1092E9008091E80083FF0FC16B +:200B4000FE0131969E01275F3F4F03C08091F1008193E217F307D1F7289A84E68093360112 +:200B600082EF8093E800998197FF05C08091E80080FFFCCF03C08EEF8093E800292F30E0AE +:200B8000C90180769070892B09F0C2C08A81882329F41092F1001092F100D6C0813009F429 +:200BA000D3C0833009F4D0C0853049F48091E80080FFFCCF8B8180688093E300C5C0863008 +:200BC00009F07CC01C81EF80F8841230C1F51092E900109239011092380110923B0110929E +:200BE0003A010E94660599E0FE013996DF01292F1D922A95E9F799871A8791E09E8790E811 +:200C0000988B9AEF998B2091380130913901275F3F4F3C872B878D871092E900109239011B +:200C200010923801F0923B01E0923A0180E0BF0149E050E00E94CC030E94660585C0109290 +:200C4000E9001092390110923801F0923B01E0923A01123241F482E290E00E940C09892BD1 +:200C600009F476C071C0113079F488E0E816F10419F481E080933C0180913C01882309F057 +:200C80006BC0ECE6F1E013C0133009F061C08B81882319F4EEE2F1E00AC0823019F4E2E3A3 +:200CA000F1E005C0813009F053C0E4E5F1E0449180E8BF0150E00E94CC0346C0873009F4EF +:200CC00047C0883021F481E08093F1003DC08930D9F523703070232BD9F5E1E9F1E091E0FC +:200CE00031E026E39093E9003093EB0084918093EC002093ED009F5F3196953099F78EE7DD +:200D00008093EA001092EA008B81809337011CC08F8198851092E9001092390110923801A8 +:200D200090933B0180933A018D81882329F4CE0101960E94870706C0823051F4CE01019677 +:200D40000E94DD07882321F08EEF8093E80007C081E28093EB0003C0EEE7F1E0A8CF6196DA +:200D6000DEBFCDBFCF91DF91FF91EF91BF91AF919F918F917F916F915F914F913F912F911A +:200D80001F91FF90EF900F900FBE0F901F90189520917E0130917F01809180019091810188 +:200DA000281B390B2F733070C901089520917E0130917F01809180019091810128173907DE +:200DC00019F42FEF3FEF09C0E0918001F0918101E25CFE4F8081282F30E0C90108952091F1 +:200DE0007E0130917F0180918001909181012817390719F42FEF3FEF13C0E0918001F091E0 +:200E00008101E25CFE4F2081809180019091810101968F739070909381018093800130E00D +:200E2000C9010895109285011092840188EE93E0A0E0B0E08093860190938701A093880102 +:200E4000B093890180E191E0909383018093820108950F931F93DF93CF930F92CDB7DEB737 +:200E60008C01698380910901882369F083E0BE016F5F7F4F41E050E00E9453041816190685 +:200E800014F49C0107C081E090E0F8019383828320E030E0C9010F90CF91DF911F910F9168 +:200EA000089583E00E9428040895CF93DF9312C082E00E94B3032FEF8F3F9207C9F0E091B8 +:200EC0007E01F0917F01E25CFE4F8083D0937F01C0937E01C0917E01D0917F012196CF73A5 +:200EE000D0708091800190918101C817D90701F7DF91CF910895FC0180818E5F808380E803 +:200F000065E971E042E450E00E94CC030895FC0181819081913A59F4813209F04CC080E08E +:200F200062E071E047E050E00E94CC0342C0913209F041C0803239F482E091E067E070E04E +:200F40000E94100436C0823209F035C08281809309018091020190910301A0910401B09173 +:200F60000501805B9440A040B04019F58091090180FD12C087E797E7909301088093000841 +:200F80002BE088E190E00FB6F894A895809360000FBE209360000DC088E10FB6F8948093F2 +:200FA0006000109260000FBEA895109201081092000881E0089580E00895FC019181808165 +:200FC000813A31F4913089F080E0933089F40DC0813269F49B3021F4828180930A0105C0B4 +:200FE0009A3029F4828180930B0181E0089580E00895EF92FF920F931F938C01E62EDC0109 +:20100000ED91FC910480F581E02D0995F82ED801ED91FC910680F781E02DC8016E2D099509 +:201020008F2D90E01F910F91FF90EF90089510929001109294011092930182E291E09093F1 +:201040009201809391010895EF92FF920F931F93DF93CF930F92CDB7DEB789838B017A01B4 +:2010600084E0BE016F5F7F4F41E050E00E94530484E4B801A7010E9453040F90CF91DF9136 +:201080001F910F91FF90EF90089582E048E050E00E9424080895FC011682178210861186D5 +:2010A0001286138614823496BF010E9445080895DC01683810F0685829C0E62FF0E067FFE2 +:2010C00013C0E058F04081E090E002C0880F991FEA95E2F7809514962C911497282314967F +:2010E0002C93149760E012C0EB5AFD4F6491662319F420E030E01DC067FF08C014968C9176 +:2011000014978D7F14968C9314976F77FD0190E0662321F08681861709F416829F5F3196B8 +:201120009630B1F7CD011496BD010E94450821E030E0C9010895CF93DF93DC01683810F053 +:20114000685825C0E62FF0E067FF12C0E058F04081E090E002C0880F991FEA95E2F7149681 +:201160002C911497282B14962C93149760E00FC0EB5AFD4F64916623D9F167FF08C01496E0 +:201180008C911497826014968C9314976F7716968C9116978617A9F117968C911797861789 +:2011A00081F118968C911897861759F119968C911997861731F11A968C911A97861709F10C +:2011C0001B968C911B978617E1F0ED01E0E0F0E09E2F8E81882321F4EA0FFB1F668306C045 +:2011E0009F5F31962196E630F10591F7963049F481E090E013969C938E93129720E030E059 +:2012000007C0CD011496BD010E94450821E030E0C901DF91CF91089580E867ED71E045E662 +:2012200050E00E94CC030895FC0180818F5F808380E86CE372E049E150E00E94CC03089510 +:20124000CF92DF92EF92FF920F931F93CF93DF937C016B018A01C0E0D0E00FC0D6016D911A +:201260006D01D701ED91FC910190F081E02DC7010995C80FD91F015010400115110571F7A4 +:20128000CE01DF91CF911F910F91FF90EF90DF90CF900895EE0FFF1F0590F491E02D099407 +:2012A000F894FFCF0D0000E100000000000001010000000029072009C806EF06D606510794 +:2012C000550700000000F90720099B0858084B08FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF43 +:2012E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E +:20130000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED +:20132000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCD +:20134000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD +:20136000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D +:20138000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6D +:2013A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4D +:2013C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2D +:2013E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D +:20140000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC +:20142000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCC +:20144000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAC +:20146000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8C +:20148000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C +:2014A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C +:2014C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C +:2014E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0C +:20150000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEB +:20152000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCB +:20154000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAB +:20156000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8B +:20158000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6B +:2015A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4B +:2015C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2B +:2015E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B +:20160000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA +:20162000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCA +:20164000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAA +:20166000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8A +:20168000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A +:2016A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4A +:2016C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A +:2016E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A +:20170000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9 +:20172000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9 +:20174000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9 +:20176000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF89 +:20178000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF69 +:2017A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF49 +:2017C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF29 +:2017E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF09 +:20180000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8 +:20182000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC8 +:20184000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA8 +:20186000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF88 +:20188000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF68 +:2018A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF48 +:2018C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF28 +:2018E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF08 +:20190000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7 +:20192000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7 +:20194000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA7 +:20196000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87 +:20198000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF67 +:2019A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF47 +:2019C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF27 +:2019E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07 +:201A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6 +:201A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC6 +:201A4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA6 +:201A6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF86 +:201A8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF66 +:201AA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF46 +:201AC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF26 +:201AE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF06 +:201B0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5 +:201B2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC5 +:201B4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5 +:201B6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF85 +:201B8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF65 +:201BA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF45 +:201BC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF25 +:201BE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05 +:201C0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4 +:201C2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4 +:201C4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA4 +:201C6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF84 +:201C8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF64 +:201CA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF44 +:201CC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF24 +:201CE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04 +:201D0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3 +:201D2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC3 +:201D4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA3 +:201D6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF83 +:201D8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF63 +:201DA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF43 +:201DC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF23 +:201DE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03 +:201E0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2 +:201E2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC2 +:201E4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA2 +:201E6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF82 +:201E8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF62 +:201EA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF42 +:201EC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF22 +:201EE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02 +:201F0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 +:201F2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC1 +:201F4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA1 +:201F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF81 +:201F8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF61 +:201FA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF41 +:201FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF21 +:201FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01 +:20200000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 +:20202000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 +:20204000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0 +:20206000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 +:20208000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60 +:2020A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40 +:2020C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20 +:2020E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +:20210000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF +:20212000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF +:20214000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F +:20216000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F +:20218000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F +:2021A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F +:2021C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F +:2021E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +:20220000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDE +:20222000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBE +:20224000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9E +:20226000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7E +:20228000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E +:2022A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E +:2022C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E +:2022E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE +:20230000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDD +:20232000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBD +:20234000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9D +:20236000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7D +:20238000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D +:2023A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D +:2023C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D +:2023E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD +:20240000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC +:20242000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBC +:20244000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9C +:20246000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C +:20248000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5C +:2024A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3C +:2024C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C +:2024E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC +:20250000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB +:20252000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBB +:20254000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9B +:20256000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7B +:20258000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B +:2025A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B +:2025C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1B +:2025E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB +:20260000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDA +:20262000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBA +:20264000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A +:20266000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7A +:20268000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5A +:2026A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3A +:2026C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1A +:2026E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA +:20270000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9 +:20272000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB9 +:20274000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99 +:20276000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF79 +:20278000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF59 +:2027A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF39 +:2027C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF19 +:2027E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9 +:20280000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8 +:20282000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB8 +:20284000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF98 +:20286000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF78 +:20288000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF58 +:2028A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF38 +:2028C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF18 +:2028E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8 +:20290000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7 +:20292000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB7 +:20294000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF97 +:20296000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77 +:20298000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF57 +:2029A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF37 +:2029C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF17 +:2029E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7 +:202A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6 +:202A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB6 +:202A4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF96 +:202A6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF76 +:202A8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF56 +:202AA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF36 +:202AC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF16 +:202AE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6 +:202B0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD5 +:202B2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5 +:202B4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF95 +:202B6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF75 +:202B8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF55 +:202BA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF35 +:202BC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF15 +:202BE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5 +:202C0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4 +:202C2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB4 +:202C4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF94 +:202C6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74 +:202C8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF54 +:202CA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF34 +:202CC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF14 +:202CE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4 +:202D0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3 +:202D2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB3 +:202D4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF93 +:202D6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF73 +:202D8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF53 +:202DA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF33 +:202DC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF13 +:202DE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3 +:202E0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD2 +:202E2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB2 +:202E4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF92 +:202E6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72 +:202E8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF52 +:202EA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF32 +:202EC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF12 +:202EE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2 +:202F0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD1 +:202F2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB1 +:202F4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF91 +:202F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF71 +:202F8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF51 +:202FA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF31 +:202FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF11 +:202FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1 +:20300000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0 +:20302000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0 +:20304000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90 +:20306000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70 +:20308000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50 +:2030A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30 +:2030C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF10 +:2030E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 +:20310000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF +:20312000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF +:20314000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F +:20316000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F +:20318000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F +:2031A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F +:2031C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F +:2031E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF +:20320000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE +:20322000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAE +:20324000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E +:20326000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E +:20328000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4E +:2032A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E +:2032C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E +:2032E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEE +:20330000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCD +:20332000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD +:20334000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D +:20336000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6D +:20338000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4D +:2033A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2D +:2033C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D +:2033E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED +:20340000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCC +:20342000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAC +:20344000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8C +:20346000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C +:20348000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C +:2034A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C +:2034C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0C +:2034E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC +:20350000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCB +:20352000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAB +:20354000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8B +:20356000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6B +:20358000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4B +:2035A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2B +:2035C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B +:2035E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEB +:20360000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCA +:20362000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAA +:20364000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8A +:20366000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A +:20368000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4A +:2036A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A +:2036C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A +:2036E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA +:20370000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9 +:20372000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9 +:20374000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF89 +:20376000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF69 +:20378000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF49 +:2037A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF29 +:2037C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF09 +:2037E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9 +:20380000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC8 +:20382000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA8 +:20384000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF88 +:20386000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF68 +:20388000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF48 +:2038A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF28 +:2038C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF08 +:2038E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8 +:20390000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7 +:20392000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA7 +:20394000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87 +:20396000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF67 +:20398000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF47 +:2039A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF27 +:2039C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07 +:2039E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7 +:203A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC6 +:203A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA6 +:203A4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF86 +:203A6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF66 +:203A8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF46 +:203AA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF26 +:203AC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF06 +:203AE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6 +:203B0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC5 +:203B2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5 +:203B4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF85 +:203B6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF65 +:203B8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF45 +:203BA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF25 +:203BC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05 +:203BE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5 +:203C0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4 +:203C2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA4 +:203C4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF84 +:203C6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF64 +:203C8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF44 +:203CA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF24 +:203CC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04 +:203CE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4 +:203D0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC3 +:203D2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA3 +:203D4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF83 +:203D6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF63 +:203D8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF43 +:203DA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF23 +:203DC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03 +:203DE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3 +:203E0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC2 +:203E2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA2 +:203E4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF82 +:203E6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF62 +:203E8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF42 +:203EA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF22 +:203EC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02 +:203EE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2 +:203F0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC1 +:203F2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA1 +:203F4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF81 +:203F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF61 +:203F8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF41 +:203FA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF21 +:203FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01 +:203FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 +:20400000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 +:20402000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0 +:20404000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 +:20406000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60 +:20408000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40 +:2040A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20 +:2040C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +:2040E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 +:20410000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF +:20412000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F +:20414000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F +:20416000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F +:20418000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F +:2041A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F +:2041C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +:2041E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF +:20420000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBE +:20422000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9E +:20424000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7E +:20426000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E +:20428000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E +:2042A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E +:2042C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE +:2042E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDE +:20430000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBD +:20432000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9D +:20434000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7D +:20436000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D +:20438000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D +:2043A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D +:2043C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD +:2043E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDD +:20440000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBC +:20442000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9C +:20444000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C +:20446000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5C +:20448000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3C +:2044A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C +:2044C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC +:2044E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC +:20450000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBB +:20452000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9B +:20454000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7B +:20456000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B +:20458000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B +:2045A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1B +:2045C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB +:2045E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB +:20460000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBA +:20462000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A +:20464000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7A +:20466000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5A +:20468000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3A +:2046A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1A +:2046C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA +:2046E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDA +:20470000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB9 +:20472000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99 +:20474000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF79 +:20476000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF59 +:20478000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF39 +:2047A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF19 +:2047C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9 +:2047E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9 +:20480000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB8 +:20482000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF98 +:20484000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF78 +:20486000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF58 +:20488000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF38 +:2048A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF18 +:2048C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8 +:2048E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8 +:20490000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB7 +:20492000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF97 +:20494000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77 +:20496000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF57 +:20498000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF37 +:2049A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF17 +:2049C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7 +:2049E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7 +:204A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB6 +:204A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF96 +:204A4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF76 +:204A6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF56 +:204A8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF36 +:204AA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF16 +:204AC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6 +:204AE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6 +:204B0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5 +:204B2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF95 +:204B4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF75 +:204B6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF55 +:204B8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF35 +:204BA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF15 +:204BC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5 +:204BE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD5 +:204C0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB4 +:204C2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF94 +:204C4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74 +:204C6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF54 +:204C8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF34 +:204CA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF14 +:204CC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4 +:204CE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4 +:204D0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB3 +:204D2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF93 +:204D4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF73 +:204D6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF53 +:204D8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF33 +:204DA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF13 +:204DC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3 +:204DE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3 +:204E0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB2 +:204E2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF92 +:204E4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72 +:204E6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF52 +:204E8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF32 +:204EA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF12 +:204EC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2 +:204EE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD2 +:204F0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB1 +:204F2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF91 +:204F4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF71 +:204F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF51 +:204F8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF31 +:204FA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF11 +:204FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1 +:204FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD1 +:20500000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0 +:20502000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90 +:20504000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70 +:20506000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50 +:20508000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30 +:2050A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF10 +:2050C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 +:2050E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0 +:20510000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF +:20512000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F +:20514000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F +:20516000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F +:20518000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F +:2051A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F +:2051C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF +:2051E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF +:20520000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAE +:20522000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E +:20524000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E +:20526000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4E +:20528000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E +:2052A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E +:2052C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEE +:2052E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE +:20530000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD +:20532000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D +:20534000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6D +:20536000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4D +:20538000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2D +:2053A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D +:2053C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED +:2053E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCD +:20540000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAC +:20542000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8C +:20544000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C +:20546000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C +:20548000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C +:2054A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0C +:2054C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC +:2054E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCC +:20550000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAB +:20552000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8B +:20554000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6B +:20556000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4B +:20558000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2B +:2055A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B +:2055C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEB +:2055E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCB +:20560000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAA +:20562000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8A +:20564000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A +:20566000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4A +:20568000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A +:2056A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A +:2056C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA +:2056E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCA +:20570000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9 +:20572000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF89 +:20574000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF69 +:20576000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF49 +:20578000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF29 +:2057A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF09 +:2057C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9 +:2057E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9 +:20580000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA8 +:20582000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF88 +:20584000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF68 +:20586000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF48 +:20588000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF28 +:2058A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF08 +:2058C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8 +:2058E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC8 +:20590000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA7 +:20592000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87 +:20594000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF67 +:20596000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF47 +:20598000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF27 +:2059A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07 +:2059C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7 +:2059E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7 +:205A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA6 +:205A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF86 +:205A4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF66 +:205A6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF46 +:205A8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF26 +:205AA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF06 +:205AC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6 +:205AE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC6 +:205B0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5 +:205B2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF85 +:205B4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF65 +:205B6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF45 +:205B8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF25 +:205BA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05 +:205BC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5 +:205BE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC5 +:205C0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA4 +:205C2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF84 +:205C4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF64 +:205C6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF44 +:205C8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF24 +:205CA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04 +:205CC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4 +:205CE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4 +:205D0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA3 +:205D2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF83 +:205D4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF63 +:205D6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF43 +:205D8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF23 +:205DA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03 +:205DC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3 +:205DE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC3 +:205E0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA2 +:205E2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF82 +:205E4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF62 +:205E6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF42 +:205E8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF22 +:205EA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02 +:205EC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2 +:205EE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC2 +:205F0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA1 +:205F2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF81 +:205F4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF61 +:205F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF41 +:205F8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF21 +:205FA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01 +:205FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 +:205FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC1 +:20600000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0 +:20602000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 +:20604000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60 +:20606000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40 +:20608000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20 +:2060A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +:2060C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 +:2060E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 +:20610000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F +:20612000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F +:20614000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F +:20616000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F +:20618000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F +:2061A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +:2061C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF +:2061E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF +:20620000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9E +:20622000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7E +:20624000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E +:20626000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E +:20628000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E +:2062A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE +:2062C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDE +:2062E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBE +:20630000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9D +:20632000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7D +:20634000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D +:20636000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D +:20638000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D +:2063A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD +:2063C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDD +:2063E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBD +:20640000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9C +:20642000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C +:20644000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5C +:20646000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3C +:20648000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C +:2064A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC +:2064C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC +:2064E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBC +:20650000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9B +:20652000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7B +:20654000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B +:20656000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B +:20658000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1B +:2065A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB +:2065C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB +:2065E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBB +:20660000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A +:20662000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7A +:20664000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5A +:20666000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3A +:20668000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1A +:2066A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA +:2066C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDA +:2066E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBA +:20670000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99 +:20672000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF79 +:20674000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF59 +:20676000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF39 +:20678000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF19 +:2067A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9 +:2067C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9 +:2067E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB9 +:20680000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF98 +:20682000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF78 +:20684000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF58 +:20686000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF38 +:20688000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF18 +:2068A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8 +:2068C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8 +:2068E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB8 +:20690000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF97 +:20692000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77 +:20694000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF57 +:20696000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF37 +:20698000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF17 +:2069A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7 +:2069C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7 +:2069E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB7 +:206A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF96 +:206A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF76 +:206A4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF56 +:206A6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF36 +:206A8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF16 +:206AA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6 +:206AC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6 +:206AE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB6 +:206B0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF95 +:206B2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF75 +:206B4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF55 +:206B6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF35 +:206B8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF15 +:206BA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5 +:206BC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD5 +:206BE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5 +:206C0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF94 +:206C2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74 +:206C4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF54 +:206C6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF34 +:206C8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF14 +:206CA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4 +:206CC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4 +:206CE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB4 +:206D0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF93 +:206D2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF73 +:206D4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF53 +:206D6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF33 +:206D8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF13 +:206DA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3 +:206DC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3 +:206DE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB3 +:206E0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF92 +:206E2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72 +:206E4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF52 +:206E6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF32 +:206E8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF12 +:206EA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2 +:206EC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD2 +:206EE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB2 +:206F0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF91 +:206F2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF71 +:206F4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF51 +:206F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF31 +:206F8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF11 +:206FA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1 +:206FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD1 +:206FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB1 +:2070000055C000006EC000006CC000006AC0000068C0000066C0000064C0000062C0000043 +:2070200060C000005EC00000EEC400005AC0000058C0000056C0000054C0000052C00000F2 +:2070400050C0000078C000004CC000004AC0000048C0000046C0000044C0000042C00000BE +:2070600040C000003EC000003CC000003AC0000038C0000036C0000034C0000032C0000048 +:2070800030C000002EC000002CC000002AC0000028C0000026C0000024C0000022C00000A8 +:2070A00020C000001EC000001CC0000011241FBECFEFDAE0DEBFCDBF11E0A0E0B1E0EAE2B5 +:2070C000FFE702C005900D92A83AB107D9F711E0A8EAB1E001C01D92AE3BB107E1F78FD30B +:2070E00022C78ECFF89410926F0010928100109285001092840081E085BF15BE47985D98F1 +:2071000028980C94000008952091B2013091B3012F5F3F4F3093B3012093B201932F37FFA8 +:2071200003C08EEF831B982F990F921710F447980895479A08951F920F920FB60F9211246E +:207140002F938F939F93EF93FF9310928500109284008091A8019091A901009741F00197D3 +:207160009093A9018093A801892B09F45D988091AA019091AB01009741F001979093AB0128 +:207180008093AA01892B09F42898E0E0F0E0859194918F5F9F4F49F08091AC019091AD0153 +:2071A00001969093AD018093AC01FF91EF919F918F912F910F900FBE0F901F90189584E0BC +:2071C0008093E9000DC08091E8008B778093E80003C08EB3882351F08091E80082FFF9CFBE +:2071E0008091E80085FFEFCF8091F1000895982F83E08093E9008091E80085FD0DC0809136 +:20720000E8008E778093E80003C08EB3882369F08091E80080FFF9CF9093F1005D9A84E6C9 +:2072200090E09093A9018093A80108954F925F926F927F928F929F92AF92BF92CF92DF921E +:20724000EF92FF920F931F93CF93DF9384E08093E9008091E80082FF57C2289A84E690E065 +:207260009093AB018093AA01AADF182F853481F48CE49DE19093AD018093AC0107B600FC4B +:20728000FDCFF999FECF81E180935700E89503C0843519F494DF8DE00DC28C34E1F38035F9 +:2072A000D1F3843721F484E4A2DF80E003C2813611F489E5FFC18134B1F481DF182F7FDFE3 +:2072C00090E0880F991FAA2797FDA095BA2F312F330F20E0442737FD4095542F822B932B68 +:2072E000A42BB52BB8C1803711F483E5E3C1833549F4C0E0D1E089917ADF21E0C730D20714 +:20730000D1F7D9C1863521F481E371DF80E3D2C1833731F487E86BDF85E969DF8EE1CAC149 +:207320008536B9F4E0E0F0E093E085E090935700E89507B600FCFDCF80935700E89507B65D +:2073400000FCFDCFE058FF4FA0E7E030FA0771F7A2CF823739F4E1E0F0E089E08093570024 +:207360008491A8C1863439F4E0E0F0E089E08093570084919FC18E3439F4E3E0F0E089E0E5 +:2073800080935700849196C1813539F4E2E0F0E089E08093570084918DC1823631F489E521 +:2073A00026DF80E024DF80E885C1823419F0873609F0E5C01092AD011092AC0100DF082FE8 +:2073C000FEDEF82EFCDE682E8554823008F071C1902F80E0CF2DD0E0C82BD92B10926F00B3 +:2073E000173609F04BC081E180935700E895DD24CC24C3943FC0E090AE01F090AF010091CC +:20740000B0011091B101B6E46B16D9F4ED2DF0E0EE29FF29E4918E2FEADEDD2081F082E08D +:2074200090E0A0E0B0E0E80EF91E0A1F1B1FE092AE01F092AF010093B0011093B101DC2470 +:2074400018C0D801C701B695A7959795879555D5CEDE82E090E0A0E0B0E0E80EF91E0A1FF6 +:207460001B1FE092AE01F092AF010093B0011093B1012197209709F0BECF7DC08090AE01F5 +:207480009090AF01A090B001B090B10196E4691609F05DC083E0F40180935700E89507B63E +:2074A00000FCFDCF54C0F6E46F1661F5772031F1E090AE01F090AF010091B0011091B1019E +:2074C0007EDED82ECC24852D90E08C299D29F7010C0140925700E895112482E090E0A0E08B +:2074E000B0E0E80EF91E0A1F1B1FE092AE01F092AF010093B0011093B10102C060DE582E1A +:20750000742423C0E090AE01F090AF010091B0011091B10116950795F794E79450DE682FFA +:20752000C701F3D48091AE019091AF01A091B001B091B1010296A11DB11D8093AE0190934D +:20754000AF01A093B001B093B101219704C05524772444244394209709F0A5CF96E46916B6 +:2075600041F485E0F40180935700E89507B600FCFDCF8DE03CDE82E080936F009CC0833492 +:2075800071F40091AE011091AF0119DE90E021E0F8010C0120935700E89511247CCE8336C8 +:2075A00019F5E090AE01F090AF010091B0011091B10105DEF701E16090E021E00C0120938C +:2075C0005700E895112482E090E0A0E0B0E0E80EF91E0A1F1B1FE092AE01F092AF0100936A +:2075E000B0011093B10157CE8D3661F4E091AE01F091AF0185E080935700E89507B600FCF2 +:20760000FDCF49CE823551F4E091AE01F091AF0105911491812FEBDD802F4CC0843421F5FE +:20762000E090AE01F090AF010091B0011091B10116950795F794E794C2DD682FC70165D4E2 +:207640008091AE019091AF01A091B001B091B1010296A11DB11D8093AE019093AF01A093D8 +:20766000B001B093B10117CE843609F5E090AE01F090AF010091B0011091B101D801C70142 +:20768000B695A7959795879538D4B1DD82E090E0A0E0B0E0E80EF91E0A1F1B1FE092AE010E +:2076A000F092AF010093B0011093B10104C08B3111F08FE39CDD83E08093E9009091E8002B +:2076C0008091E8008E778093E80095FF04C010C08EB38823C9F08091E80080FFF9CF809193 +:2076E000E8008E778093E80003C08EB3882361F08091E80080FFF9CF84E08093E9008091F1 +:20770000E8008B778093E800DF91CF911F910F91FF90EF90DF90CF90BF90AF909F908F90AC +:207720007F906F905F904F9008959091B601892F8F77813249F58091B7018032A1F081328A +:2077400019F5913A09F58091E800877F8093E8008DE091E067E070E007D28091E8008B770F +:207760008093E8000895913279F48091E800877F8093E8008DE091E067E070E059D2809196 +:20778000E8008E778093E800089582E061EC42E0B1D083E061E842E1ADD084E060E842E1F7 +:2077A000A9C084B7877F84BF88E10FB6F89480936000109260000FBE20E880E090E00FB643 +:2077C000F89420936100809361000FBE81E085BF92E095BF3F9A209A559AE1E6F0E02083A1 +:2077E000108247985D982898109289008AEF8093880090936F0083E080938100ECC040911E +:20780000000850910108109201081092000824B714BE88E10FB6F894809360001092600045 +:207820000FBE822F90E0FC01E270F07021FD14C0213019F4859194910BC0283069F480918F +:20784000090190910A014817590731F0859194918F5F9F4F09F046DCA4DF78941092AD0101 +:207860001092AC010CC0E2DC36D38091AC019091AD0181549F4110F01092140145DC8091FB +:207880001401882381F78091E00081608093E00029DC80E090E00895FA01923049F09330C0 +:2078A00061F09130F9F485E191E022E130E01EC087E291E02EE330E019C0882329F485E6FA +:2078C00091E024E030E012C0813029F489E691E022E230E00BC0823029F48DE891E028E106 +:2078E00030E004C080E090E020E030E091838083C90108958093E9008091EB00816080936A +:20790000EB001092ED006093EC004093ED008091EE00881F8827881F08958091B601882342 +:207920008CF403C08EB38823B1F08091E80082FFF9CF8091E8008B778093E80008958EB361 +:20794000882349F08091E80080FFF9CF8091E8008E778093E8000895EF92FF920F931F9307 +:2079600045D04CD008ED10E0F80180818F77808380818068808380818F7D808319BC1EBA45 +:207980001092B40180EEE82EF12CF70180818B7F8083F80180818160808380E060E042E049 +:2079A000A9DFE1EEF0E080818E7F8083E2EEF0E0808181608083808188608083F701808125 +:2079C0008E7F8083F8018081806180831F910F91FF90EF900895E7EDF0E080818160808335 +:2079E0008AE482BF81E08093B501B6CFE8EDF0E080818E7F80831092E20008951092DA00D6 +:207A00001092E10008951F920F920FB60F9211242F933F934F935F936F937F938F939F9389 +:207A2000AF93BF93EF93FF938091DA0080FF1BC08091D80080FF17C08091DA008E7F80930F +:207A4000DA008091D90080FF0BC080E189BD82E189BD09B400FEFDCF81E08EBB3BD203C0C7 +:207A600019BC1EBA37D28091E10080FF17C08091E20080FF13C08091E2008E7F8093E200CE +:207A80008091E20080618093E2008091D80080628093D80019BC85E08EBB1CD28091E10004 +:207AA00084FF2CC08091E20084FF28C080E189BD82E189BD09B400FEFDCF8091D8008F7D2D +:207AC0008093D8008091E1008F7E8093E1008091E2008F7E8093E2008091E20081608093EC +:207AE000E2008091B401882331F48091E30087FD02C081E001C084E08EBBECD18091E10056 +:207B000083FF21C08091E20083FF1DC08091E100877F8093E10082E08EBB1092B4018091B1 +:207B2000E1008E7F8093E1008091E2008E7F8093E2008091E20080618093E20080E060E005 +:207B400042E0D8DEC7D1FF91EF91BF91AF919F918F917F916F915F914F913F912F910F90B6 +:207B60000FBE0F901F9018959C014091BC015091BD014617570718F4F90190E044C06115C8 +:207B8000710511F0AB01F8CF8091E8008E778093E80040E050E0F0CF8EB3882309F444C006 +:207BA000853009F443C08091E80083FF02C081E008958091E80082FD31C08091E80080FFF4 +:207BC00022C08091F3009091F200782F60E0292F30E0262B372B07C081918093F10041503C +:207BE00050402F5F3F4F4115510519F02830310598F390E02830310509F491E08091E800A6 +:207C00008E778093E8004115510531F6992321F605C08EB3882341F0853041F08091E800FD +:207C200082FFF7CF80E0089582E0089583E008959C016115710529F48091E8008B7780934D +:207C4000E800F90126C08EB3882391F1853091F18091E80083FF02C081E008958091E80083 +:207C600082FFF1CF06C08091F10081936150704059F02091F3008091F200322F20E090E0C5 +:207C8000822B932B892B79F78091E8008B778093E80061157105B9F605C08EB3882341F0E2 +:207CA000853041F08091E80080FFF7CF80E0089582E0089583E008950F931F93DF93CF937C +:207CC00000D0CDB7DEB7E6EBF1E08091F100819381E0EE3BF807C9F728DD8091E80083FF3A +:207CE000E4C08091B6019091B701953009F46DC0963040F4913081F1913070F0933009F046 +:207D0000D4C02AC0983009F4A3C0993009F4B2C0963009F0CAC07CC0803809F4C6C082380B +:207D200009F0C3C08091BA0187708093E9008091EB001092E9002091E800277F2093E800A7 +:207D400090E025E0969587952A95E1F781708093F1001092F10087C0882319F0823009F0A2 +:207D6000A4C08F71823009F0A0C08091B801882331F52091BA01277009F497C02093E90006 +:207D80008091EB0080FF1BC0933021F48091EB00806213C08091EB0080618093EB0081E0C8 +:207DA00090E002C0880F991F2A95E2F78093EA001092EA008091EB0088608093EB0010929D +:207DC000E9008091E800877F51C0882309F06DC01091B8011F770FB7F8948091E800877F98 +:207DE0008093E8009ADD8091E80080FFFCCF8091E3008078812B8093E30080688093E30062 +:207E0000112311F482E001C083E08EBB0FBF4DC08058823008F049C08091B8019091B9014F +:207E20006091BA01AE014F5F5F4F36DDBC01009709F43BC08091E800877F8093E800898128 +:207E40009A8192DE8091E8008B778093E8002DC0803859F58091E800877F8093E8008091A3 +:207E6000B4018093F1008091E8008E778093E80054DD1BC08823C9F49091B8019230A8F4A4 +:207E80008091E800877F8093E8009093B40145DD8091B401882331F48091E30087FD02C01E +:207EA00081E001C084E08EBB70DC8091E80083FF0AC08091EB0080628093EB008091E8008D +:207EC000877F8093E8000F900F90CF91DF911F910F91089508951F938EB3882361F0109179 +:207EE000E9001092E9008091E80083FF01C0E4DE17701093E9001F910895F999FECF92BD02 +:207F000081BDF89A992780B50895262FF999FECF1FBA92BD81BD20BD0FB6F894FA9AF99A90 +:207F20000FBE01960895F894FFCF4341544552494E4100777700080000000000000801128E +:207F4000011001020000084123370001000201000109023E00020100803209040000010257 +:207F60000201000524001001042402040524060001070582030800FF09040100020A0000B4 +:207F8000000705040210000107058302100001040309042203410072006400750069006E80 +:207FA000006F0020004D006900630072006F00200020002000000018034100720064007531 +:127FC0000069006E006F0020004C004C0043000000006E +:00000001FF diff --git a/external/arduino/avr/bootloaders/caterina/Micro-prod-firmware-2012-11-23.txt b/external/arduino/avr/bootloaders/caterina/Micro-prod-firmware-2012-11-23.txt new file mode 100644 index 000000000..5beb659a0 --- /dev/null +++ b/external/arduino/avr/bootloaders/caterina/Micro-prod-firmware-2012-11-23.txt @@ -0,0 +1,11 @@ +Builds against LUFA version 111009 +make version 3.81 +avrdude version 5.11 + +All AVR tools except avrdude were installed by CrossPack 20100115: +avr-gcc version 4.3.3 (GCC) +Thread model: single +Configured with: ../configure —prefix=/usr/local/CrossPack-AVR-20100115 —disable-dependency-tracking —disable-nls —disable-werror —target=avr —enable-languages=c,c++ —disable-nls —disable-libssp —with-dwarf2 +avr-libc version 1.6.7 +binutils version 2.19 + diff --git a/external/arduino/avr/bootloaders/caterina/Micro-prod-firmware-2012-12-10.hex b/external/arduino/avr/bootloaders/caterina/Micro-prod-firmware-2012-12-10.hex new file mode 100644 index 000000000..804dfd3a7 --- /dev/null +++ b/external/arduino/avr/bootloaders/caterina/Micro-prod-firmware-2012-12-10.hex @@ -0,0 +1,1024 @@ +:200000000C946E010C9496010C9496010C9496010C9496010C9496010C9496010C94960150 +:200020000C9496010C9496010C94F8040C947F050C9496010C9496010C9496010C949601B6 +:200040000C9496010C9496010C9496010C9496010C9496010C9496010C9496010C94B501C9 +:200060000C9496010C9496010C9496010C9496010C9496010C9496010C9496010C949601C8 +:200080000C9496010C9496010C9496010C9496010C9496010C9496010C9496010C949601A8 +:2000A0000C9496010C9496010C94960100000000240027002A002D003000000000002500A4 +:2000C00028002B002E003100000000002300260029002C002F00040404040403040502027D +:2000E0000202040302020202060606060606040402020204040802011040804010204080A8 +:200100004080080204018040201002011080102040400000000200080E0000030401000BB2 +:200120000000070605040100080A0B0C0D09040309042203410072006400750069006E00CD +:200140006F0020004D006900630072006F00200020002000180341007200640075006900A6 +:200160006E006F0020004C004C00430012010002000000404123378000010102000112011F +:200180000002020000404123378000010102000100C18081C1080B00020202010009040051 +:2001A000000102020000052400100105240101010424020605240600010705810310004094 +:2001C00009040100020A000000070502024000000705830240000005010902A1010901A186 +:2001E000008501050919012903150025019503750181029501750581030501093009310943 +:20020000381581257F750895038106C0C005010906A1018502050719E029E715002501754D +:20022000019508810295017508810395067508150025650507190029658100C0090402004C +:2002400001030000000921010100012265000705840340000100000000000000002A2B2895 +:200260000000000000000000000000000000000000000000002C9EB4A0A1A2A434A6A7A553 +:20028000AE362D3738271E1F20212223242526B333B62EB7B89F8485868788898A8B8C8D58 +:2002A0008E8F909192939495969798999A9B9C9D2F3130A3AD350405060708090A0B0C0D7C +:2002C0000E0F101112131415161718191A1B1C1DAFB1B0B5000032041207170811241FBE81 +:2002E000CFEFDAE0DEBFCDBF11E0A0E0B1E0E4EAF2E102C005900D92AC32B107D9F711E06D +:20030000ACE2B1E001C01D92AD39B107E1F712E0CCEDD2E004C02297FE010E944C09C63D05 +:20032000D107C9F70E946C030C9450090C9400008091000161E00E94390368EE73E080E041 +:2003400090E00E94FD018091000160E00E94390368EE73E080E090E00E94FD010895809196 +:20036000000161E00E94AC0208951F920F920FB60F9211242F933F938F939F93AF93BF93E5 +:200380008091300190913101A0913201B0913301309134010196A11DB11D232F2D5F2D3794 +:2003A00020F02D570196A11DB11D209334018093300190933101A0933201B0933301809117 +:2003C0002C0190912D01A0912E01B0912F010196A11DB11D80932C0190932D01A0932E01BA +:2003E000B0932F01BF91AF919F918F913F912F910F900FBE0F901F9018959B01AC017FB734 +:20040000F89480912C0190912D01A0912E01B0912F0166B5A89B05C06F3F19F00196A11DC3 +:20042000B11D7FBFBA2FA92F982F8827860F911DA11DB11D62E0880F991FAA1FBB1F6A9577 +:20044000D1F7BC012DC0FFB7F89480912C0190912D01A0912E01B0912F01E6B5A89B05C0E7 +:20046000EF3F19F00196A11DB11DFFBFBA2FA92F982F88278E0F911DA11DB11DE2E0880FFD +:20048000991FAA1FBB1FEA95D1F7861B970B885E9340C8F2215030404040504068517C4F8F +:2004A000211531054105510571F60895789484B5826084BD84B5816084BD85B5826085BD0F +:2004C00085B5816085BDEEE6F0E0808181608083E1E8F0E010828081826080838081816043 +:2004E0008083E0E8F0E0808181608083E1E9F0E0808182608083808181608083E0E9F0E07E +:20050000808181608083E1ECF0E0808184608083808182608083808181608083E3ECF0E007 +:20052000808181608083E0ECF0E0808182608083E2ECF0E0808181608083EAE7F0E080812F +:20054000846080838081826080838081816080838081806880830895CF93DF93482F50E0E5 +:20056000CA018C509F4FFC0134914A525F4FFA018491882369F190E0880F991FFC01E455D0 +:20058000FF4FA591B491FC01E654FF4FC591D491662351F42FB7F8948C91932F9095892362 +:2005A0008C93888189230BC0623061F42FB7F8948C91932F909589238C938881832B8883B2 +:2005C0002FBF06C09FB7F8948C91832B8C939FBFDF91CF910895883071F1893068F48230EF +:2005E00031F1833020F4813009F042C01DC0833089F08430E9F512C08B3059F18C3028F41C +:200600008930E9F08A30A1F51EC08C3031F18E3079F529C0809180008F7703C0809180003C +:200620008F7D80938000089584B58F7702C084B58F7D84BD0895809190008F7707C08091DB +:2006400090008F7D03C080919000877F8093900008958091C0008F7703C08091C0008F7DDD +:200660008093C00008958091C200877F8093C2000895FF920F931F93F62E482F50E0CA0144 +:200680008E5E9E4FFC012491CA018C509F4FFC0114914A525F4FFA0104910023C9F022239D +:2006A00019F0822F0E94EB02E02FF0E0EE0FFF1FE654FF4FA591B4919FB7F894FF2021F4DE +:2006C0008C911095812302C08C91812B8C939FBF1F910F91FF900895CF93DF930E94560262 +:2006E0008DE391E00E9433040E94AF01C0E0D0E00E9498012097E1F30E940000F9CF282F17 +:20070000809137018823C1F057FF1AC015C0289A909336018091F1008193E217F307B9F75A +:200720004115510539F08091F200882319F48BE68093E800AFBF02C04FEF5FEFCA01089599 +:20074000AFB7F89427702093E9008091F200282F30E0241735070CF4A901FB019B01240F1E +:20076000311D94E6DACFDF93CF930F92CDB7DEB7BE016F5F7F4F41E050E00E947F03019712 +:2007800019F02FEF3FEF03C08981282F30E0C9010F90CF91DF910895FF920F931F93F82EEF +:2007A000142F052F40913A0150913B01212F302FC901DC01FB016EEF29C0F7FE02C0949125 +:2007C00001C09081209138013091390124173507ACF48091E8008570E1F38091E80082FF0F +:2007E00003C02FEF3FEF17C09093F100C90101968F739070892B11F46093E8002F5F3F4FEC +:200800003093390120933801119731961097A9F6812F902F9C01C9011F910F91FF900895E8 +:200820009C018091E80082FFFCCFF901260F311D03C08091F1008193E217F307D1F7289A03 +:2008400084E6809336018BEF8093E800CB0108958093E9008091F200882319F08AE38093D3 +:20086000E800089508951092370181E08093D70080EA8093D80082E189BD09B400FEFDCFAC +:2008800061E070E080E090E00E94FD0180E98093D8008CE08093E2001092E000559A209A77 +:2008A0005D98289808955F926F927F928F929F92AF92BF92CF92DF92EF92FF920F931F93C7 +:2008C000CF93DF93E82E842E752E80913701882371F18B01242F352FC901EC017AEFF72EFB +:2008E00067E0962E9E2050E4552E8E2D90E040E2A42EB12CA822B9223AE3632E20E4C22E35 +:20090000D12CC822D92258C09FB7F8949092E9008091E80085FD02C020E004C08091F200EC +:20092000252D281B9FBF222361F4FA9419F42FEF3FEF4DC061E070E080E090E00E94FD0135 +:200940003BC0822F90E0C817D9070CF42C2FC21BD1094FB7F8949092E900A114B10421F48E +:2009600006C01092F10021502223D9F719C0E7FC03C0F801922F10C0C801322F06C0FC01A2 +:200980000196E491E093F10031503323C1F706C081918093F10091509923D1F7020F111DD8 +:2009A0008091E80085FF05C0209729F4C114D10411F06092E8004FBF209709F0A5CF5D9A73 +:2009C00084E680933501282D372DC9019C01C901DF91CF911F910F91FF90EF90DF90CF907E +:2009E000BF90AF909F908F907F906F905F9008951F920F920FB60F9211242F933F934F931E +:200A00005F936F937F938F939F93AF93BF93EF93FF938091E1001092E100982F83FF0FC047 +:200A20001092E90081E08093EB001092EC0082E38093ED001092370188E08093F00092FF03 +:200A400034C083E08093E9008091F200882319F08AE38093E8008FB7F89492E09093E900D4 +:200A60009091F2008FBF992321F082E891E00E94550780913501882351F080913501815024 +:200A80008093350180913501882309F45D9880913601882351F08091360181508093360192 +:200AA00080913601882309F42898FF91EF91BF91AF919F918F917F916F915F914F913F91E6 +:200AC0002F910F900FBE0F901F9018950F931F93DF93CF930F92CDB7DEB719828E010F5F75 +:200AE0001F4FC8010E947B07C8010E941409898190E00F90CF91DF911F910F9108951F928C +:200B00000F920FB60F921124EF92FF921F932F933F934F935F936F937F938F939F93AF93C3 +:200B2000BF93EF93FF93DF93CF93CDB7DEB76197DEBFCDBF1092E9008091E80083FF0FC16B +:200B4000FE0131969E01275F3F4F03C08091F1008193E217F307D1F7289A84E68093360112 +:200B600082EF8093E800998197FF05C08091E80080FFFCCF03C08EEF8093E800292F30E0AE +:200B8000C90180769070892B09F0C2C08A81882329F41092F1001092F100D6C0813009F429 +:200BA000D3C0833009F4D0C0853049F48091E80080FFFCCF8B8180688093E300C5C0863008 +:200BC00009F07CC01C81EF80F8841230C1F51092E900109239011092380110923B0110929E +:200BE0003A010E94660599E0FE013996DF01292F1D922A95E9F799871A8791E09E8790E811 +:200C0000988B9AEF998B2091380130913901275F3F4F3C872B878D871092E900109239011B +:200C200010923801F0923B01E0923A0180E0BF0149E050E00E94CC030E94660585C0109290 +:200C4000E9001092390110923801F0923B01E0923A01123241F482E290E00E940C09892BD1 +:200C600009F476C071C0113079F488E0E816F10419F481E080933C0180913C01882309F057 +:200C80006BC0ECE6F1E013C0133009F061C08B81882319F4EEE2F1E00AC0823019F4E2E3A3 +:200CA000F1E005C0813009F053C0E4E5F1E0449180E8BF0150E00E94CC0346C0873009F4EF +:200CC00047C0883021F481E08093F1003DC08930D9F523703070232BD9F5E1E9F1E091E0FC +:200CE00031E026E39093E9003093EB0084918093EC002093ED009F5F3196953099F78EE7DD +:200D00008093EA001092EA008B81809337011CC08F8198851092E9001092390110923801A8 +:200D200090933B0180933A018D81882329F4CE0101960E94870706C0823051F4CE01019677 +:200D40000E94DD07882321F08EEF8093E80007C081E28093EB0003C0EEE7F1E0A8CF6196DA +:200D6000DEBFCDBFCF91DF91FF91EF91BF91AF919F918F917F916F915F914F913F912F911A +:200D80001F91FF90EF900F900FBE0F901F90189520917E0130917F01809180019091810188 +:200DA000281B390B2F733070C901089520917E0130917F01809180019091810128173907DE +:200DC00019F42FEF3FEF09C0E0918001F0918101E25CFE4F8081282F30E0C90108952091F1 +:200DE0007E0130917F0180918001909181012817390719F42FEF3FEF13C0E0918001F091E0 +:200E00008101E25CFE4F2081809180019091810101968F739070909381018093800130E00D +:200E2000C9010895109285011092840188EE93E0A0E0B0E08093860190938701A093880102 +:200E4000B093890180E191E0909383018093820108950F931F93DF93CF930F92CDB7DEB737 +:200E60008C01698380910901882369F083E0BE016F5F7F4F41E050E00E9453041816190685 +:200E800014F49C0107C081E090E0F8019383828320E030E0C9010F90CF91DF911F910F9168 +:200EA000089583E00E9428040895CF93DF9312C082E00E94B3032FEF8F3F9207C9F0E091B8 +:200EC0007E01F0917F01E25CFE4F8083D0937F01C0937E01C0917E01D0917F012196CF73A5 +:200EE000D0708091800190918101C817D90701F7DF91CF910895FC0180818E5F808380E803 +:200F000065E971E042E450E00E94CC030895FC0181819081913A59F4813209F04CC080E08E +:200F200062E071E047E050E00E94CC0342C0913209F041C0803239F482E091E067E070E04E +:200F40000E94100436C0823209F035C08281809309018091020190910301A0910401B09173 +:200F60000501805B9440A040B04019F58091090180FD12C087E797E7909301088093000841 +:200F80002BE088E190E00FB6F894A895809360000FBE209360000DC088E10FB6F8948093F2 +:200FA0006000109260000FBEA895109201081092000881E0089580E00895FC019181808165 +:200FC000813A31F4913089F080E0933089F40DC0813269F49B3021F4828180930A0105C0B4 +:200FE0009A3029F4828180930B0181E0089580E00895EF92FF920F931F938C01E62EDC0109 +:20100000ED91FC910480F581E02D0995F82ED801ED91FC910680F781E02DC8016E2D099509 +:201020008F2D90E01F910F91FF90EF90089510929001109294011092930182E291E09093F1 +:201040009201809391010895EF92FF920F931F93DF93CF930F92CDB7DEB789838B017A01B4 +:2010600084E0BE016F5F7F4F41E050E00E94530484E4B801A7010E9453040F90CF91DF9136 +:201080001F910F91FF90EF90089582E048E050E00E9424080895FC011682178210861186D5 +:2010A0001286138614823496BF010E9445080895DC01683810F0685829C0E62FF0E067FFE2 +:2010C00013C0E058F04081E090E002C0880F991FEA95E2F7809514962C911497282314967F +:2010E0002C93149760E012C0EB5AFD4F6491662319F420E030E01DC067FF08C014968C9176 +:2011000014978D7F14968C9314976F77FD0190E0662321F08681861709F416829F5F3196B8 +:201120009630B1F7CD011496BD010E94450821E030E0C9010895CF93DF93DC01683810F053 +:20114000685825C0E62FF0E067FF12C0E058F04081E090E002C0880F991FEA95E2F7149681 +:201160002C911497282B14962C93149760E00FC0EB5AFD4F64916623D9F167FF08C01496E0 +:201180008C911497826014968C9314976F7716968C9116978617A9F117968C911797861789 +:2011A00081F118968C911897861759F119968C911997861731F11A968C911A97861709F10C +:2011C0001B968C911B978617E1F0ED01E0E0F0E09E2F8E81882321F4EA0FFB1F668306C045 +:2011E0009F5F31962196E630F10591F7963049F481E090E013969C938E93129720E030E059 +:2012000007C0CD011496BD010E94450821E030E0C901DF91CF91089580E867ED71E045E662 +:2012200050E00E94CC030895FC0180818F5F808380E86CE372E049E150E00E94CC03089510 +:20124000CF92DF92EF92FF920F931F93CF93DF937C016B018A01C0E0D0E00FC0D6016D911A +:201260006D01D701ED91FC910190F081E02DC7010995C80FD91F015010400115110571F7A4 +:20128000CE01DF91CF911F910F91FF90EF90DF90CF900895EE0FFF1F0590F491E02D099407 +:2012A000F894FFCF0D0000E100000000000001010000000029072009C806EF06D606510794 +:2012C000550700000000F90720099B0858084B08FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF43 +:2012E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E +:20130000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED +:20132000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCD +:20134000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD +:20136000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D +:20138000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6D +:2013A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4D +:2013C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2D +:2013E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D +:20140000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC +:20142000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCC +:20144000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAC +:20146000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8C +:20148000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C +:2014A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C +:2014C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C +:2014E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0C +:20150000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEB +:20152000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCB +:20154000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAB +:20156000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8B +:20158000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6B +:2015A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4B +:2015C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2B +:2015E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B +:20160000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA +:20162000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCA +:20164000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAA +:20166000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8A +:20168000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A +:2016A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4A +:2016C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A +:2016E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A +:20170000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9 +:20172000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9 +:20174000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9 +:20176000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF89 +:20178000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF69 +:2017A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF49 +:2017C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF29 +:2017E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF09 +:20180000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8 +:20182000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC8 +:20184000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA8 +:20186000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF88 +:20188000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF68 +:2018A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF48 +:2018C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF28 +:2018E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF08 +:20190000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7 +:20192000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7 +:20194000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA7 +:20196000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87 +:20198000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF67 +:2019A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF47 +:2019C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF27 +:2019E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07 +:201A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6 +:201A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC6 +:201A4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA6 +:201A6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF86 +:201A8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF66 +:201AA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF46 +:201AC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF26 +:201AE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF06 +:201B0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5 +:201B2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC5 +:201B4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5 +:201B6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF85 +:201B8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF65 +:201BA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF45 +:201BC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF25 +:201BE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05 +:201C0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4 +:201C2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4 +:201C4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA4 +:201C6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF84 +:201C8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF64 +:201CA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF44 +:201CC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF24 +:201CE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04 +:201D0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3 +:201D2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC3 +:201D4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA3 +:201D6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF83 +:201D8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF63 +:201DA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF43 +:201DC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF23 +:201DE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03 +:201E0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2 +:201E2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC2 +:201E4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA2 +:201E6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF82 +:201E8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF62 +:201EA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF42 +:201EC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF22 +:201EE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02 +:201F0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 +:201F2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC1 +:201F4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA1 +:201F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF81 +:201F8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF61 +:201FA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF41 +:201FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF21 +:201FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01 +:20200000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 +:20202000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 +:20204000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0 +:20206000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 +:20208000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60 +:2020A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40 +:2020C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20 +:2020E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +:20210000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF +:20212000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF +:20214000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F +:20216000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F +:20218000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F +:2021A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F +:2021C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F +:2021E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +:20220000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDE +:20222000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBE +:20224000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9E +:20226000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7E +:20228000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E +:2022A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E +:2022C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E +:2022E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE +:20230000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDD +:20232000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBD +:20234000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9D +:20236000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7D +:20238000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D +:2023A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D +:2023C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D +:2023E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD +:20240000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC +:20242000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBC +:20244000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9C +:20246000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C +:20248000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5C +:2024A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3C +:2024C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C +:2024E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC +:20250000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB +:20252000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBB +:20254000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9B +:20256000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7B +:20258000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B +:2025A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B +:2025C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1B +:2025E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB +:20260000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDA +:20262000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBA +:20264000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A +:20266000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7A +:20268000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5A +:2026A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3A +:2026C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1A +:2026E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA +:20270000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9 +:20272000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB9 +:20274000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99 +:20276000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF79 +:20278000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF59 +:2027A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF39 +:2027C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF19 +:2027E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9 +:20280000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8 +:20282000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB8 +:20284000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF98 +:20286000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF78 +:20288000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF58 +:2028A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF38 +:2028C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF18 +:2028E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8 +:20290000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7 +:20292000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB7 +:20294000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF97 +:20296000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77 +:20298000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF57 +:2029A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF37 +:2029C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF17 +:2029E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7 +:202A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6 +:202A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB6 +:202A4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF96 +:202A6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF76 +:202A8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF56 +:202AA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF36 +:202AC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF16 +:202AE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6 +:202B0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD5 +:202B2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5 +:202B4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF95 +:202B6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF75 +:202B8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF55 +:202BA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF35 +:202BC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF15 +:202BE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5 +:202C0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4 +:202C2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB4 +:202C4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF94 +:202C6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74 +:202C8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF54 +:202CA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF34 +:202CC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF14 +:202CE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4 +:202D0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3 +:202D2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB3 +:202D4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF93 +:202D6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF73 +:202D8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF53 +:202DA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF33 +:202DC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF13 +:202DE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3 +:202E0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD2 +:202E2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB2 +:202E4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF92 +:202E6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72 +:202E8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF52 +:202EA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF32 +:202EC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF12 +:202EE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2 +:202F0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD1 +:202F2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB1 +:202F4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF91 +:202F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF71 +:202F8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF51 +:202FA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF31 +:202FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF11 +:202FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1 +:20300000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0 +:20302000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0 +:20304000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90 +:20306000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70 +:20308000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50 +:2030A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30 +:2030C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF10 +:2030E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 +:20310000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF +:20312000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF +:20314000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F +:20316000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F +:20318000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F +:2031A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F +:2031C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F +:2031E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF +:20320000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE +:20322000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAE +:20324000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E +:20326000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E +:20328000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4E +:2032A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E +:2032C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E +:2032E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEE +:20330000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCD +:20332000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD +:20334000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D +:20336000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6D +:20338000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4D +:2033A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2D +:2033C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D +:2033E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED +:20340000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCC +:20342000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAC +:20344000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8C +:20346000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C +:20348000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C +:2034A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C +:2034C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0C +:2034E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC +:20350000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCB +:20352000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAB +:20354000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8B +:20356000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6B +:20358000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4B +:2035A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2B +:2035C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B +:2035E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEB +:20360000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCA +:20362000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAA +:20364000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8A +:20366000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A +:20368000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4A +:2036A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A +:2036C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A +:2036E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA +:20370000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9 +:20372000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9 +:20374000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF89 +:20376000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF69 +:20378000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF49 +:2037A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF29 +:2037C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF09 +:2037E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9 +:20380000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC8 +:20382000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA8 +:20384000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF88 +:20386000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF68 +:20388000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF48 +:2038A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF28 +:2038C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF08 +:2038E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8 +:20390000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7 +:20392000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA7 +:20394000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87 +:20396000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF67 +:20398000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF47 +:2039A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF27 +:2039C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07 +:2039E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7 +:203A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC6 +:203A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA6 +:203A4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF86 +:203A6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF66 +:203A8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF46 +:203AA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF26 +:203AC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF06 +:203AE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6 +:203B0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC5 +:203B2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5 +:203B4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF85 +:203B6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF65 +:203B8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF45 +:203BA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF25 +:203BC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05 +:203BE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5 +:203C0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4 +:203C2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA4 +:203C4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF84 +:203C6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF64 +:203C8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF44 +:203CA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF24 +:203CC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04 +:203CE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4 +:203D0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC3 +:203D2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA3 +:203D4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF83 +:203D6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF63 +:203D8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF43 +:203DA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF23 +:203DC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03 +:203DE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3 +:203E0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC2 +:203E2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA2 +:203E4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF82 +:203E6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF62 +:203E8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF42 +:203EA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF22 +:203EC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02 +:203EE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2 +:203F0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC1 +:203F2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA1 +:203F4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF81 +:203F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF61 +:203F8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF41 +:203FA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF21 +:203FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01 +:203FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 +:20400000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 +:20402000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0 +:20404000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 +:20406000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60 +:20408000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40 +:2040A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20 +:2040C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +:2040E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 +:20410000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF +:20412000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F +:20414000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F +:20416000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F +:20418000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F +:2041A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F +:2041C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +:2041E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF +:20420000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBE +:20422000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9E +:20424000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7E +:20426000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E +:20428000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E +:2042A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E +:2042C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE +:2042E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDE +:20430000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBD +:20432000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9D +:20434000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7D +:20436000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D +:20438000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D +:2043A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D +:2043C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD +:2043E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDD +:20440000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBC +:20442000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9C +:20444000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C +:20446000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5C +:20448000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3C +:2044A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C +:2044C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC +:2044E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC +:20450000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBB +:20452000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9B +:20454000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7B +:20456000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B +:20458000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B +:2045A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1B +:2045C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB +:2045E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB +:20460000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBA +:20462000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A +:20464000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7A +:20466000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5A +:20468000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3A +:2046A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1A +:2046C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA +:2046E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDA +:20470000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB9 +:20472000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99 +:20474000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF79 +:20476000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF59 +:20478000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF39 +:2047A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF19 +:2047C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9 +:2047E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9 +:20480000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB8 +:20482000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF98 +:20484000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF78 +:20486000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF58 +:20488000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF38 +:2048A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF18 +:2048C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8 +:2048E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8 +:20490000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB7 +:20492000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF97 +:20494000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77 +:20496000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF57 +:20498000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF37 +:2049A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF17 +:2049C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7 +:2049E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7 +:204A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB6 +:204A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF96 +:204A4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF76 +:204A6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF56 +:204A8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF36 +:204AA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF16 +:204AC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6 +:204AE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6 +:204B0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5 +:204B2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF95 +:204B4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF75 +:204B6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF55 +:204B8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF35 +:204BA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF15 +:204BC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5 +:204BE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD5 +:204C0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB4 +:204C2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF94 +:204C4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74 +:204C6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF54 +:204C8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF34 +:204CA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF14 +:204CC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4 +:204CE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4 +:204D0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB3 +:204D2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF93 +:204D4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF73 +:204D6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF53 +:204D8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF33 +:204DA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF13 +:204DC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3 +:204DE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3 +:204E0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB2 +:204E2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF92 +:204E4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72 +:204E6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF52 +:204E8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF32 +:204EA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF12 +:204EC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2 +:204EE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD2 +:204F0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB1 +:204F2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF91 +:204F4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF71 +:204F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF51 +:204F8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF31 +:204FA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF11 +:204FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1 +:204FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD1 +:20500000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0 +:20502000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90 +:20504000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70 +:20506000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50 +:20508000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30 +:2050A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF10 +:2050C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 +:2050E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0 +:20510000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF +:20512000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F +:20514000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F +:20516000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F +:20518000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F +:2051A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F +:2051C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF +:2051E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF +:20520000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAE +:20522000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E +:20524000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E +:20526000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4E +:20528000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E +:2052A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E +:2052C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEE +:2052E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE +:20530000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD +:20532000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D +:20534000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6D +:20536000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4D +:20538000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2D +:2053A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D +:2053C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED +:2053E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCD +:20540000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAC +:20542000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8C +:20544000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C +:20546000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C +:20548000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C +:2054A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0C +:2054C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC +:2054E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCC +:20550000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAB +:20552000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8B +:20554000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6B +:20556000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4B +:20558000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2B +:2055A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B +:2055C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEB +:2055E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCB +:20560000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAA +:20562000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8A +:20564000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A +:20566000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4A +:20568000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A +:2056A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A +:2056C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA +:2056E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCA +:20570000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9 +:20572000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF89 +:20574000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF69 +:20576000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF49 +:20578000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF29 +:2057A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF09 +:2057C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9 +:2057E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9 +:20580000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA8 +:20582000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF88 +:20584000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF68 +:20586000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF48 +:20588000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF28 +:2058A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF08 +:2058C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8 +:2058E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC8 +:20590000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA7 +:20592000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87 +:20594000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF67 +:20596000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF47 +:20598000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF27 +:2059A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07 +:2059C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7 +:2059E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7 +:205A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA6 +:205A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF86 +:205A4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF66 +:205A6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF46 +:205A8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF26 +:205AA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF06 +:205AC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6 +:205AE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC6 +:205B0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5 +:205B2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF85 +:205B4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF65 +:205B6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF45 +:205B8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF25 +:205BA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05 +:205BC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5 +:205BE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC5 +:205C0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA4 +:205C2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF84 +:205C4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF64 +:205C6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF44 +:205C8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF24 +:205CA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04 +:205CC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4 +:205CE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4 +:205D0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA3 +:205D2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF83 +:205D4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF63 +:205D6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF43 +:205D8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF23 +:205DA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03 +:205DC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3 +:205DE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC3 +:205E0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA2 +:205E2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF82 +:205E4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF62 +:205E6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF42 +:205E8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF22 +:205EA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02 +:205EC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2 +:205EE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC2 +:205F0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA1 +:205F2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF81 +:205F4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF61 +:205F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF41 +:205F8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF21 +:205FA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01 +:205FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 +:205FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC1 +:20600000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0 +:20602000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 +:20604000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60 +:20606000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40 +:20608000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20 +:2060A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +:2060C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 +:2060E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 +:20610000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F +:20612000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F +:20614000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F +:20616000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F +:20618000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F +:2061A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +:2061C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF +:2061E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF +:20620000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9E +:20622000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7E +:20624000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E +:20626000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E +:20628000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E +:2062A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE +:2062C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDE +:2062E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBE +:20630000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9D +:20632000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7D +:20634000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D +:20636000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D +:20638000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D +:2063A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD +:2063C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDD +:2063E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBD +:20640000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9C +:20642000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C +:20644000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5C +:20646000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3C +:20648000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C +:2064A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC +:2064C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC +:2064E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBC +:20650000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9B +:20652000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7B +:20654000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B +:20656000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B +:20658000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1B +:2065A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB +:2065C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB +:2065E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBB +:20660000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A +:20662000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7A +:20664000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5A +:20666000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3A +:20668000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1A +:2066A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA +:2066C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDA +:2066E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBA +:20670000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99 +:20672000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF79 +:20674000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF59 +:20676000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF39 +:20678000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF19 +:2067A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9 +:2067C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9 +:2067E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB9 +:20680000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF98 +:20682000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF78 +:20684000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF58 +:20686000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF38 +:20688000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF18 +:2068A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8 +:2068C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8 +:2068E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB8 +:20690000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF97 +:20692000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77 +:20694000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF57 +:20696000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF37 +:20698000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF17 +:2069A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7 +:2069C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7 +:2069E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB7 +:206A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF96 +:206A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF76 +:206A4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF56 +:206A6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF36 +:206A8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF16 +:206AA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6 +:206AC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6 +:206AE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB6 +:206B0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF95 +:206B2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF75 +:206B4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF55 +:206B6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF35 +:206B8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF15 +:206BA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5 +:206BC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD5 +:206BE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5 +:206C0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF94 +:206C2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74 +:206C4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF54 +:206C6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF34 +:206C8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF14 +:206CA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4 +:206CC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4 +:206CE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB4 +:206D0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF93 +:206D2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF73 +:206D4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF53 +:206D6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF33 +:206D8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF13 +:206DA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3 +:206DC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3 +:206DE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB3 +:206E0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF92 +:206E2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72 +:206E4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF52 +:206E6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF32 +:206E8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF12 +:206EA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2 +:206EC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD2 +:206EE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB2 +:206F0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF91 +:206F2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF71 +:206F4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF51 +:206F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF31 +:206F8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF11 +:206FA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1 +:206FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD1 +:206FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB1 +:2070000055C000006EC000006CC000006AC0000068C0000066C0000064C0000062C0000043 +:2070200060C000005EC00000F2C400005AC0000058C0000056C0000054C0000052C00000EE +:2070400050C0000078C000004CC000004AC0000048C0000046C0000044C0000042C00000BE +:2070600040C000003EC000003CC000003AC0000038C0000036C0000034C0000032C0000048 +:2070800030C000002EC000002CC000002AC0000028C0000026C0000024C0000022C00000A8 +:2070A00020C000001EC000001CC0000011241FBECFEFDAE0DEBFCDBF11E0A0E0B1E0E2E3BC +:2070C000FFE702C005900D92A83AB107D9F711E0A8EAB1E001C01D92AE3BB107E1F78FD30B +:2070E00026C78ECFF89410926F0010928100109285001092840081E085BF15BE47985D98ED +:2071000028980C94000008952091B2013091B3012F5F3F4F3093B3012093B201932F37FFA8 +:2071200003C08EEF831B982F990F921710F447980895479A08951F920F920FB60F9211246E +:207140002F938F939F93EF93FF9310928500109284008091A8019091A901009741F00197D3 +:207160009093A9018093A801892B09F45D988091AA019091AB01009741F001979093AB0128 +:207180008093AA01892B09F42898E0E0F0E0859194918F5F9F4F49F08091AC019091AD0153 +:2071A00001969093AD018093AC01FF91EF919F918F912F910F900FBE0F901F90189584E0BC +:2071C0008093E9000DC08091E8008B778093E80003C08EB3882351F08091E80082FFF9CFBE +:2071E0008091E80085FFEFCF8091F1000895982F83E08093E9008091E80085FD0DC0809136 +:20720000E8008E778093E80003C08EB3882369F08091E80080FFF9CF9093F1005D9A84E6C9 +:2072200090E09093A9018093A80108954F925F926F927F928F929F92AF92BF92CF92DF921E +:20724000EF92FF920F931F93CF93DF9384E08093E9008091E80082FF57C2289A84E690E065 +:207260009093AB018093AA01AADF182F853481F48CE49DE19093AD018093AC0107B600FC4B +:20728000FDCFF999FECF81E180935700E89503C0843519F494DF8DE00DC28C34E1F38035F9 +:2072A000D1F3843721F484E4A2DF80E003C2813611F489E5FFC18134B1F481DF182F7FDFE3 +:2072C00090E0880F991FAA2797FDA095BA2F312F330F20E0442737FD4095542F822B932B68 +:2072E000A42BB52BB8C1803711F483E5E3C1833549F4C0E0D1E089917ADF21E0C730D20714 +:20730000D1F7D9C1863521F481E371DF80E3D2C1833731F487E86BDF85E969DF8EE1CAC149 +:207320008536B9F4E0E0F0E093E085E090935700E89507B600FCFDCF80935700E89507B65D +:2073400000FCFDCFE058FF4FA0E7E030FA0771F7A2CF823739F4E1E0F0E089E08093570024 +:207360008491A8C1863439F4E0E0F0E089E08093570084919FC18E3439F4E3E0F0E089E0E5 +:2073800080935700849196C1813539F4E2E0F0E089E08093570084918DC1823631F489E521 +:2073A00026DF80E024DF80E885C1823419F0873609F0E5C01092AD011092AC0100DF082FE8 +:2073C000FEDEF82EFCDE682E8554823008F071C1902F80E0CF2DD0E0C82BD92B10926F00B3 +:2073E000173609F04BC081E180935700E895DD24CC24C3943FC0E090AE01F090AF010091CC +:20740000B0011091B101B6E46B16D9F4ED2DF0E0EE29FF29E4918E2FEADEDD2081F082E08D +:2074200090E0A0E0B0E0E80EF91E0A1F1B1FE092AE01F092AF010093B0011093B101DC2470 +:2074400018C0D801C701B695A7959795879559D5CEDE82E090E0A0E0B0E0E80EF91E0A1FF2 +:207460001B1FE092AE01F092AF010093B0011093B1012197209709F0BECF7DC08090AE01F5 +:207480009090AF01A090B001B090B10196E4691609F05DC083E0F40180935700E89507B63E +:2074A00000FCFDCF54C0F6E46F1661F5772031F1E090AE01F090AF010091B0011091B1019E +:2074C0007EDED82ECC24852D90E08C299D29F7010C0140925700E895112482E090E0A0E08B +:2074E000B0E0E80EF91E0A1F1B1FE092AE01F092AF010093B0011093B10102C060DE582E1A +:20750000742423C0E090AE01F090AF010091B0011091B10116950795F794E79450DE682FFA +:20752000C701F7D48091AE019091AF01A091B001B091B1010296A11DB11D8093AE01909349 +:20754000AF01A093B001B093B101219704C05524772444244394209709F0A5CF96E46916B6 +:2075600041F485E0F40180935700E89507B600FCFDCF8DE03CDE82E080936F009CC0833492 +:2075800071F40091AE011091AF0119DE90E021E0F8010C0120935700E89511247CCE8336C8 +:2075A00019F5E090AE01F090AF010091B0011091B10105DEF701E16090E021E00C0120938C +:2075C0005700E895112482E090E0A0E0B0E0E80EF91E0A1F1B1FE092AE01F092AF0100936A +:2075E000B0011093B10157CE8D3661F4E091AE01F091AF0185E080935700E89507B600FCF2 +:20760000FDCF49CE823551F4E091AE01F091AF0105911491812FEBDD802F4CC0843421F5FE +:20762000E090AE01F090AF010091B0011091B10116950795F794E794C2DD682FC70169D4DE +:207640008091AE019091AF01A091B001B091B1010296A11DB11D8093AE019093AF01A093D8 +:20766000B001B093B10117CE843609F5E090AE01F090AF010091B0011091B101D801C70142 +:20768000B695A795979587953CD4B1DD82E090E0A0E0B0E0E80EF91E0A1F1B1FE092AE010A +:2076A000F092AF010093B0011093B10104C08B3111F08FE39CDD83E08093E9009091E8002B +:2076C0008091E8008E778093E80095FF04C010C08EB38823C9F08091E80080FFF9CF809193 +:2076E000E8008E778093E80003C08EB3882361F08091E80080FFF9CF84E08093E9008091F1 +:20770000E8008B778093E800DF91CF911F910F91FF90EF90DF90CF90BF90AF909F908F90AC +:207720007F906F905F904F9008959091B601892F8F77813249F58091B7018032A1F081328A +:2077400019F5913A09F58091E800877F8093E8008DE091E067E070E00BD28091E8008B770B +:207760008093E8000895913279F48091E800877F8093E8008DE091E067E070E05DD2809192 +:20778000E8008E778093E800089582E061EC42E0B5D083E061E842E1B1D084E060E842E1EF +:2077A000ADC084B7877F84BF88E10FB6F89480936000109260000FBE20E880E090E00FB63F +:2077C000F89420936100809361000FBE81E085BF92E095BF3F9A209A559AE1E6F0E02083A1 +:2077E000108247985D982898109289008AEF8093880090936F0083E080938100F0C040911A +:20780000000850910108109201081092000894B714BE88E10FB6F8948093600010926000D5 +:207820000FBE292F30E0F901E270F07091FD18C090FF05C0859194918F5F9F4F81F423FFFF +:207840000FC08091090190910A014817590741F0E0E0F0E0859194918F5F9F4F09F042DC64 +:20786000A0DF78941092AD011092AC010CC0DEDC36D38091AC019091AD0181549F4110F00D +:207880001092140141DC80911401882381F78091E00081608093E00025DC80E090E0089598 +:2078A000FA01923049F0933061F09130F9F485E191E022E130E01EC087E291E02EE330E04D +:2078C00019C0882329F485E691E024E030E012C0813029F489E691E022E230E00BC0823006 +:2078E00029F48DE891E028E130E004C080E090E020E030E091838083C90108958093E9004E +:207900008091EB0081608093EB001092ED006093EC004093ED008091EE00881F8827881F62 +:2079200008958091B60188238CF403C08EB38823B1F08091E80082FFF9CF8091E8008B772A +:207940008093E80008958EB3882349F08091E80080FFF9CF8091E8008E778093E800089594 +:20796000EF92FF920F931F9345D04CD008ED10E0F80180818F77808380818068808380819B +:207980008F7D808319BC1EBA1092B40180EEE82EF12CF70180818B7F8083F8018081816052 +:2079A000808380E060E042E0A9DFE1EEF0E080818E7F8083E2EEF0E0808181608083808144 +:2079C00088608083F70180818E7F8083F8018081806180831F910F91FF90EF900895E7ED06 +:2079E000F0E08081816080838AE482BF81E08093B501B6CFE8EDF0E080818E7F808310921C +:207A0000E20008951092DA001092E10008951F920F920FB60F9211242F933F934F935F93F6 +:207A20006F937F938F939F93AF93BF93EF93FF938091DA0080FF1BC08091D80080FF17C0B2 +:207A40008091DA008E7F8093DA008091D90080FF0BC080E189BD82E189BD09B400FEFDCF36 +:207A600081E08EBB3BD203C019BC1EBA37D28091E10080FF17C08091E20080FF13C0809138 +:207A8000E2008E7F8093E2008091E20080618093E2008091D80080628093D80019BC85E049 +:207AA0008EBB1CD28091E10084FF2CC08091E20084FF28C080E189BD82E189BD09B400FEC5 +:207AC000FDCF8091D8008F7D8093D8008091E1008F7E8093E1008091E2008F7E8093E20012 +:207AE0008091E20081608093E2008091B401882331F48091E30087FD02C081E001C084E067 +:207B00008EBBECD18091E10083FF21C08091E20083FF1DC08091E100877F8093E10082E06A +:207B20008EBB1092B4018091E1008E7F8093E1008091E2008E7F8093E2008091E2008061E9 +:207B40008093E20080E060E042E0D8DEC7D1FF91EF91BF91AF919F918F917F916F915F9130 +:207B60004F913F912F910F900FBE0F901F9018959C014091BC015091BD014617570718F49D +:207B8000F90190E044C06115710511F0AB01F8CF8091E8008E778093E80040E050E0F0CF0F +:207BA0008EB3882309F444C0853009F443C08091E80083FF02C081E008958091E80082FD70 +:207BC00031C08091E80080FF22C08091F3009091F200782F60E0292F30E0262B372B07C07A +:207BE00081918093F100415050402F5F3F4F4115510519F02830310598F390E02830310566 +:207C000009F491E08091E8008E778093E8004115510531F6992321F605C08EB3882341F075 +:207C2000853041F08091E80082FFF7CF80E0089582E0089583E008959C016115710529F47C +:207C40008091E8008B778093E800F90126C08EB3882391F1853091F18091E80083FF02C06C +:207C600081E008958091E80082FFF1CF06C08091F10081936150704059F02091F300809191 +:207C8000F200322F20E090E0822B932B892B79F78091E8008B778093E80061157105B9F601 +:207CA00005C08EB3882341F0853041F08091E80080FFF7CF80E0089582E0089583E00895C2 +:207CC0000F931F93DF93CF9300D0CDB7DEB7E6EBF1E08091F100819381E0EE3BF807C9F792 +:207CE00024DD8091E80083FFE4C08091B6019091B701953009F46DC0963040F4913081F1A7 +:207D0000913070F0933009F0D4C02AC0983009F4A3C0993009F4B2C0963009F0CAC07CC023 +:207D2000803809F4C6C0823809F0C3C08091BA0187708093E9008091EB001092E9002091DB +:207D4000E800277F2093E80090E025E0969587952A95E1F781708093F1001092F10087C0D8 +:207D6000882319F0823009F0A4C08F71823009F0A0C08091B801882331F52091BA01277097 +:207D800009F497C02093E9008091EB0080FF1BC0933021F48091EB00806213C08091EB0018 +:207DA00080618093EB0081E090E002C0880F991F2A95E2F78093EA001092EA008091EB00E5 +:207DC00088608093EB001092E9008091E800877F51C0882309F06DC01091B8011F770FB79B +:207DE000F8948091E800877F8093E8009ADD8091E80080FFFCCF8091E3008078812B809398 +:207E0000E30080688093E300112311F482E001C083E08EBB0FBF4DC08058823008F049C033 +:207E20008091B8019091B9016091BA01AE014F5F5F4F36DDBC01009709F43BC08091E8008E +:207E4000877F8093E80089819A8192DE8091E8008B778093E8002DC0803859F58091E800AA +:207E6000877F8093E8008091B4018093F1008091E8008E778093E80054DD1BC08823C9F4CA +:207E80009091B8019230A8F48091E800877F8093E8009093B40145DD8091B401882331F420 +:207EA0008091E30087FD02C081E001C084E08EBB6CDC8091E80083FF0AC08091EB0080624E +:207EC0008093EB008091E800877F8093E8000F900F90CF91DF911F910F91089508951F9360 +:207EE0008EB3882361F01091E9001092E9008091E80083FF01C0E4DE17701093E9001F916F +:207F00000895F999FECF92BD81BDF89A992780B50895262FF999FECF1FBA92BD81BD20BDBD +:207F20000FB6F894FA9AF99A0FBE01960895F894FFCF4341544552494E4100777700080031 +:207F40000000000000080112011001020000084123370001000201000109023E00020100FE +:207F600080320904000001020201000524001001042402040524060001070582030800FF0C +:207F800009040100020A000000070504021000010705830210000104030904220341007216 +:207FA000006400750069006E006F0020004D006900630072006F0020002000200000001810 +:1A7FC00003410072006400750069006E006F0020004C004C004300000000D7 +:00000001FF diff --git a/external/arduino/avr/bootloaders/caterina/Micro-prod-firmware-2012-12-10.txt b/external/arduino/avr/bootloaders/caterina/Micro-prod-firmware-2012-12-10.txt new file mode 100644 index 000000000..5beb659a0 --- /dev/null +++ b/external/arduino/avr/bootloaders/caterina/Micro-prod-firmware-2012-12-10.txt @@ -0,0 +1,11 @@ +Builds against LUFA version 111009 +make version 3.81 +avrdude version 5.11 + +All AVR tools except avrdude were installed by CrossPack 20100115: +avr-gcc version 4.3.3 (GCC) +Thread model: single +Configured with: ../configure —prefix=/usr/local/CrossPack-AVR-20100115 —disable-dependency-tracking —disable-nls —disable-werror —target=avr —enable-languages=c,c++ —disable-nls —disable-libssp —with-dwarf2 +avr-libc version 1.6.7 +binutils version 2.19 + diff --git a/external/arduino/avr/bootloaders/gemma/README.md b/external/arduino/avr/bootloaders/gemma/README.md new file mode 100644 index 000000000..2653e48c6 --- /dev/null +++ b/external/arduino/avr/bootloaders/gemma/README.md @@ -0,0 +1,14 @@ +Arduino Gemma Bootloader +======================== + +The Arduino Gemma Bootloader is based on the Adafruit Trinket/Gemma Bootloader. In the Arduino Gemma bootloader the USB VID&PID, the Manufacturer name and the Device name parameters are changed. + +The source code of the bootloader of the version used at the compile time can be found at the following link: https://github.com/adafruit/Adafruit-Trinket-Gemma-Bootloader/tree/3bc1bb561273535d4d493518a233a3a1fccf6b76 + +The *'usbconfig.h'* and the *'usbconfig.patch'* files are provided if you want to recompile the bootloader. +You only need to replace the original *'usbconfig.h'* file with this one or patch it with the provided patch file. + +**Please note: you cannot use the Arduino USB VID/PID for your own non-Gemma products or projects. Purchase a USB VID for yourself at** http://www.usb.org/developers/vendor/ + + + diff --git a/external/arduino/avr/bootloaders/gemma/avrdude.conf b/external/arduino/avr/bootloaders/gemma/avrdude.conf new file mode 100644 index 000000000..2e1aebbce --- /dev/null +++ b/external/arduino/avr/bootloaders/gemma/avrdude.conf @@ -0,0 +1,14389 @@ +# AVRDUDE Configuration File +# +# This file contains configuration data used by AVRDUDE which describes +# the programming hardware pinouts and also provides part definitions. +# AVRDUDE's "-C" command line option specifies the location of the +# configuration file. The "-c" option names the programmer configuration +# which must match one of the entry's "id" parameter. The "-p" option +# identifies which part AVRDUDE is going to be programming and must match +# one of the parts' "id" parameter. +# +# Possible entry formats are: +# +# programmer +# parent # optional parent +# id = [, [, ] ...] ; # are quoted strings +# desc = ; # quoted string +# type = ; # programmer type, quoted string +# # supported programmer types can be listed by "-c ?type" +# connection_type = parallel | serial | usb +# baudrate = ; # baudrate for avr910-programmer +# vcc = [, ... ] ; # pin number(s) +# buff = [, ... ] ; # pin number(s) +# reset = ; # pin number +# sck = ; # pin number +# mosi = ; # pin number +# miso = ; # pin number +# errled = ; # pin number +# rdyled = ; # pin number +# pgmled = ; # pin number +# vfyled = ; # pin number +# usbvid = ; # USB VID (Vendor ID) +# usbpid = ; # USB PID (Product ID) +# usbdev = ; # USB interface or other device info +# usbvendor = ; # USB Vendor Name +# usbproduct = ; # USB Product Name +# usbsn = ; # USB Serial Number +# +# To invert a bit, use = ~ , the spaces are important. +# For a pin list all pins must be inverted. +# A single pin can be specified as usual = ~ , for lists +# specify it as follows = ~ ( [, ... ] ) . +# ; +# +# part +# id = ; # quoted string +# desc = ; # quoted string +# has_jtag = ; # part has JTAG i/f +# has_debugwire = ; # part has debugWire i/f +# has_pdi = ; # part has PDI i/f +# has_tpi = ; # part has TPI i/f +# devicecode = ; # deprecated, use stk500_devcode +# stk500_devcode = ; # numeric +# avr910_devcode = ; # numeric +# signature = ; # signature bytes +# chip_erase_delay = ; # micro-seconds +# reset = dedicated | io; +# retry_pulse = reset | sck; +# pgm_enable = ; +# chip_erase = ; +# chip_erase_delay = ; # chip erase delay (us) +# # STK500 parameters (parallel programming IO lines) +# pagel = ; # pin name in hex, i.e., 0xD7 +# bs2 = ; # pin name in hex, i.e., 0xA0 +# serial = ; # can use serial downloading +# parallel = ; # can use par. programming +# # STK500v2 parameters, to be taken from Atmel's XML files +# timeout = ; +# stabdelay = ; +# cmdexedelay = ; +# synchloops = ; +# bytedelay = ; +# pollvalue = ; +# pollindex = ; +# predelay = ; +# postdelay = ; +# pollmethod = ; +# mode = ; +# delay = ; +# blocksize = ; +# readsize = ; +# hvspcmdexedelay = ; +# # STK500v2 HV programming parameters, from XML +# pp_controlstack = , , ...; # PP only +# hvsp_controlstack = , , ...; # HVSP only +# hventerstabdelay = ; +# progmodedelay = ; # PP only +# latchcycles = ; +# togglevtg = ; +# poweroffdelay = ; +# resetdelayms = ; +# resetdelayus = ; +# hvleavestabdelay = ; +# resetdelay = ; +# synchcycles = ; # HVSP only +# chiperasepulsewidth = ; # PP only +# chiperasepolltimeout = ; +# chiperasetime = ; # HVSP only +# programfusepulsewidth = ; # PP only +# programfusepolltimeout = ; +# programlockpulsewidth = ; # PP only +# programlockpolltimeout = ; +# # JTAG ICE mkII parameters, also from XML files +# allowfullpagebitstream = ; +# enablepageprogramming = ; +# idr = ; # IO addr of IDR (OCD) reg. +# rampz = ; # IO addr of RAMPZ reg. +# spmcr = ; # mem addr of SPMC[S]R reg. +# eecr = ; # mem addr of EECR reg. +# # (only when != 0x3c) +# is_at90s1200 = ; # AT90S1200 part +# is_avr32 = ; # AVR32 part +# +# memory +# paged = ; # yes / no +# size = ; # bytes +# page_size = ; # bytes +# num_pages = ; # numeric +# min_write_delay = ; # micro-seconds +# max_write_delay = ; # micro-seconds +# readback_p1 = ; # byte value +# readback_p2 = ; # byte value +# pwroff_after_write = ; # yes / no +# read = ; +# write = ; +# read_lo = ; +# read_hi = ; +# write_lo = ; +# write_hi = ; +# loadpage_lo = ; +# loadpage_hi = ; +# writepage = ; +# ; +# ; +# +# If any of the above parameters are not specified, the default value +# of 0 is used for numerics or the empty string ("") for string +# values. If a required parameter is left empty, AVRDUDE will +# complain. +# +# Parts can also inherit parameters from previously defined parts +# using the following syntax. In this case specified integer and +# string values override parameter values from the parent part. New +# memory definitions are added to the definitions inherited from the +# parent. +# +# part parent # quoted string +# id = ; # quoted string +# +# ; +# +# NOTES: +# * 'devicecode' is the device code used by the STK500 (see codes +# listed below) +# * Not all memory types will implement all instructions. +# * AVR Fuse bits and Lock bits are implemented as a type of memory. +# * Example memory types are: +# "flash", "eeprom", "fuse", "lfuse" (low fuse), "hfuse" (high +# fuse), "signature", "calibration", "lock" +# * The memory type specified on the avrdude command line must match +# one of the memory types defined for the specified chip. +# * The pwroff_after_write flag causes avrdude to attempt to +# power the device off and back on after an unsuccessful write to +# the affected memory area if VCC programmer pins are defined. If +# VCC pins are not defined for the programmer, a message +# indicating that the device needs a power-cycle is printed out. +# This flag was added to work around a problem with the +# at90s4433/2333's; see the at90s4433 errata at: +# +# http://www.atmel.com/dyn/resources/prod_documents/doc1280.pdf +# +# INSTRUCTION FORMATS +# +# Instruction formats are specified as a comma seperated list of +# string values containing information (bit specifiers) about each +# of the 32 bits of the instruction. Bit specifiers may be one of +# the following formats: +# +# '1' = the bit is always set on input as well as output +# +# '0' = the bit is always clear on input as well as output +# +# 'x' = the bit is ignored on input and output +# +# 'a' = the bit is an address bit, the bit-number matches this bit +# specifier's position within the current instruction byte +# +# 'aN' = the bit is the Nth address bit, bit-number = N, i.e., a12 +# is address bit 12 on input, a0 is address bit 0. +# +# 'i' = the bit is an input data bit +# +# 'o' = the bit is an output data bit +# +# Each instruction must be composed of 32 bit specifiers. The +# instruction specification closely follows the instruction data +# provided in Atmel's data sheets for their parts. +# +# See below for some examples. +# +# +# The following are STK500 part device codes to use for the +# "devicecode" field of the part. These came from Atmel's software +# section avr061.zip which accompanies the application note +# AVR061 available from: +# +# http://www.atmel.com/dyn/resources/prod_documents/doc2525.pdf +# + +#define ATTINY10 0x10 /* the _old_ one that never existed! */ +#define ATTINY11 0x11 +#define ATTINY12 0x12 +#define ATTINY15 0x13 +#define ATTINY13 0x14 + +#define ATTINY22 0x20 +#define ATTINY26 0x21 +#define ATTINY28 0x22 +#define ATTINY2313 0x23 + +#define AT90S1200 0x33 + +#define AT90S2313 0x40 +#define AT90S2323 0x41 +#define AT90S2333 0x42 +#define AT90S2343 0x43 + +#define AT90S4414 0x50 +#define AT90S4433 0x51 +#define AT90S4434 0x52 +#define ATMEGA48 0x59 + +#define AT90S8515 0x60 +#define AT90S8535 0x61 +#define AT90C8534 0x62 +#define ATMEGA8515 0x63 +#define ATMEGA8535 0x64 + +#define ATMEGA8 0x70 +#define ATMEGA88 0x73 +#define ATMEGA168 0x86 + +#define ATMEGA161 0x80 +#define ATMEGA163 0x81 +#define ATMEGA16 0x82 +#define ATMEGA162 0x83 +#define ATMEGA169 0x84 + +#define ATMEGA323 0x90 +#define ATMEGA32 0x91 + +#define ATMEGA64 0xA0 + +#define ATMEGA103 0xB1 +#define ATMEGA128 0xB2 +#define AT90CAN128 0xB3 +#define AT90CAN64 0xB3 +#define AT90CAN32 0xB3 + +#define AT86RF401 0xD0 + +#define AT89START 0xE0 +#define AT89S51 0xE0 +#define AT89S52 0xE1 + +# The following table lists the devices in the original AVR910 +# appnote: +# |Device |Signature | Code | +# +-------+----------+------+ +# |tiny12 | 1E 90 05 | 0x55 | +# |tiny15 | 1E 90 06 | 0x56 | +# | | | | +# | S1200 | 1E 90 01 | 0x13 | +# | | | | +# | S2313 | 1E 91 01 | 0x20 | +# | S2323 | 1E 91 02 | 0x48 | +# | S2333 | 1E 91 05 | 0x34 | +# | S2343 | 1E 91 03 | 0x4C | +# | | | | +# | S4414 | 1E 92 01 | 0x28 | +# | S4433 | 1E 92 03 | 0x30 | +# | S4434 | 1E 92 02 | 0x6C | +# | | | | +# | S8515 | 1E 93 01 | 0x38 | +# | S8535 | 1E 93 03 | 0x68 | +# | | | | +# |mega32 | 1E 95 01 | 0x72 | +# |mega83 | 1E 93 05 | 0x65 | +# |mega103| 1E 97 01 | 0x41 | +# |mega161| 1E 94 01 | 0x60 | +# |mega163| 1E 94 02 | 0x64 | + +# Appnote AVR109 also has a table of AVR910 device codes, which +# lists: +# dev avr910 signature +# ATmega8 0x77 0x1E 0x93 0x07 +# ATmega8515 0x3B 0x1E 0x93 0x06 +# ATmega8535 0x6A 0x1E 0x93 0x08 +# ATmega16 0x75 0x1E 0x94 0x03 +# ATmega162 0x63 0x1E 0x94 0x04 +# ATmega163 0x66 0x1E 0x94 0x02 +# ATmega169 0x79 0x1E 0x94 0x05 +# ATmega32 0x7F 0x1E 0x95 0x02 +# ATmega323 0x73 0x1E 0x95 0x01 +# ATmega64 0x46 0x1E 0x96 0x02 +# ATmega128 0x44 0x1E 0x97 0x02 +# +# These codes refer to "BOOT" device codes which are apparently +# different than standard device codes, for whatever reasons +# (often one above the standard code). + +# There are several extended versions of AVR910 implementations around +# in the Internet. These add the following codes (only devices that +# actually exist are listed): + +# ATmega8515 0x3A +# ATmega128 0x43 +# ATmega64 0x45 +# ATtiny26 0x5E +# ATmega8535 0x69 +# ATmega32 0x72 +# ATmega16 0x74 +# ATmega8 0x76 +# ATmega169 0x78 + +# +# Overall avrdude defaults; suitable for ~/.avrduderc +# +default_parallel = "/dev/parport0"; +default_serial = "/dev/ttyS0"; +# default_bitclock = 2.5; + +# Turn off safemode by default +#default_safemode = no; + + +# +# PROGRAMMER DEFINITIONS +# + +# http://wiring.org.co/ +# Basically STK500v2 protocol, with some glue to trigger the +# bootloader. +programmer + id = "wiring"; + desc = "Wiring"; + type = "wiring"; + connection_type = serial; +; + +programmer + id = "arduino"; + desc = "Arduino"; + type = "arduino"; + connection_type = serial; +; +# this will interface with the chips on these programmers: +# +# http://real.kiev.ua/old/avreal/en/adapters +# http://www.amontec.com/jtagkey.shtml, jtagkey-tiny.shtml +# http://www.olimex.com/dev/arm-usb-ocd.html, arm-usb-tiny.html +# http://www.ethernut.de/en/hardware/turtelizer/index.html +# http://elk.informatik.fh-augsburg.de/hhweb/doc/openocd/usbjtag/usbjtag.html +# http://dangerousprototypes.com/docs/FT2232_breakout_board +# http://www.ftdichip.com/Products/Modules/DLPModules.htm,DLP-2232*,DLP-USB1232H +# http://flashrom.org/FT2232SPI_Programmer +# +# The drivers will look for a specific device and use the first one found. +# If you have mulitple devices, then look for unique information (like SN) +# And fill that in here. +# +# Note that the pin numbers for the main ISP signals (reset, sck, +# mosi, miso) are fixed and cannot be changed, since they must match +# the way the Multi-Protocol Synchronous Serial Engine (MPSSE) of +# these FTDI ICs has been designed. + +programmer + id = "avrftdi"; + desc = "FT2232D based generic programmer"; + type = "avrftdi"; + connection_type = usb; + usbvid = 0x0403; + usbpid = 0x6010; + usbvendor = ""; + usbproduct = ""; + usbdev = "A"; + usbsn = ""; +#ISP-signals - lower ADBUS-Nibble (default) + reset = 3; + sck = 0; + mosi = 1; + miso = 2; +#LED SIGNALs - higher ADBUS-Nibble +# errled = 4; +# rdyled = 5; +# pgmled = 6; +# vfyled = 7; +#Buffer Signal - ACBUS - Nibble +# buff = 8; +; +# This is an implementation of the above with a buffer IC (74AC244) and +# 4 LEDs directly attached, all active low. +programmer + id = "2232HIO"; + desc = "FT2232H based generic programmer"; + type = "avrftdi"; + connection_type = usb; + usbvid = 0x0403; +# Note: This PID is reserved for generic H devices and +# should be programmed into the EEPROM +# usbpid = 0x8A48; + usbpid = 0x6010; + usbdev = "A"; + usbvendor = ""; + usbproduct = ""; + usbsn = ""; +#ISP-signals + reset = 3; + sck = 0; + mosi = 1; + miso = 2; + buff = ~4; +#LED SIGNALs + errled = ~ 11; + rdyled = ~ 14; + pgmled = ~ 13; + vfyled = ~ 12; +; + +#The FT4232H can be treated as FT2232H, but it has a different USB +#device ID of 0x6011. +programmer parent "avrftdi" + id = "4232h"; + desc = "FT4232H based generic programmer"; + usbpid = 0x6011; +; + +programmer + id = "jtagkey"; + desc = "Amontec JTAGKey, JTAGKey-Tiny and JTAGKey2"; + type = "avrftdi"; + connection_type = usb; + usbvid = 0x0403; +# Note: This PID is used in all JTAGKey variants + usbpid = 0xCFF8; + usbdev = "A"; + usbvendor = ""; + usbproduct = ""; + usbsn = ""; +#ISP-signals => 20 - Pin connector on JTAGKey + reset = 3; # TMS 7 violet + sck = 0; # TCK 9 white + mosi = 1; # TDI 5 green + miso = 2; # TDO 13 orange + buff = ~4; +# VTG VREF 1 brown with red tip +# GND GND 20 black +# The colors are on the 20 pin breakout cable +# from Amontec +; + +# On the adapter you can read "O-Link". On the PCB is printed "OpenJTAG v3.1" +# You can find it as "OpenJTAG ARM JTAG USB" in the internet. +# (But there are also several projects called Open JTAG, eg. +# http://www.openjtag.org, which are completely different.) +# http://www.100ask.net/shop/english.html (website seems to be outdated) +# http://item.taobao.com/item.htm?id=1559277013 +# http://www.micro4you.com/store/openjtag-arm-jtag-usb.html (schematics!) +# some other sources which call it O-Link +# http://www.andahammer.com/olink/ +# http://www.developmentboard.net/31-o-link-debugger.html +# http://armwerks.com/catalog/o-link-debugger-copy/ +# or just have a look at ebay ... +# It is basically the same entry as jtagkey with different usb ids. +programmer parent "jtagkey" + id = "o-link"; + desc = "O-Link, OpenJTAG from www.100ask.net"; + usbvid = 0x1457; + usbpid = 0x5118; + usbvendor = "www.100ask.net"; + usbproduct = "USB<=>JTAG&RS232"; +; + +# http://wiki.openmoko.org/wiki/Debug_Board_v3 +programmer + id = "openmoko"; + desc = "Openmoko debug board (v3)"; + type = "avrftdi"; + usbvid = 0x1457; + usbpid = 0x5118; + usbdev = "A"; + usbvendor = ""; + usbproduct = ""; + usbsn = ""; + reset = 3; # TMS 7 + sck = 0; # TCK 9 + mosi = 1; # TDI 5 + miso = 2; # TDO 13 +; + +# Only Rev. A boards. +# Schematic and user manual: http://www.cs.put.poznan.pl/wswitala/download/pdf/811EVBK.pdf +programmer + id = "lm3s811"; + desc = "Luminary Micro LM3S811 Eval Board (Rev. A)"; + type = "avrftdi"; + connection_type = usb; + usbvid = 0x0403; + usbpid = 0xbcd9; + usbvendor = "LMI"; + usbproduct = "LM3S811 Evaluation Board"; + usbdev = "A"; + usbsn = ""; +#ISP-signals - lower ACBUS-Nibble (default) + reset = 3; + sck = 0; + mosi = 1; + miso = 2; +# Enable correct buffers + buff = 7; +; + +programmer + id = "avrisp"; + desc = "Atmel AVR ISP"; + type = "stk500"; + connection_type = serial; +; + +programmer + id = "avrispv2"; + desc = "Atmel AVR ISP V2"; + type = "stk500v2"; + connection_type = serial; +; + +programmer + id = "avrispmkII"; + desc = "Atmel AVR ISP mkII"; + type = "stk500v2"; + connection_type = usb; +; + +programmer parent "avrispmkII" + id = "avrisp2"; +; + +programmer + id = "buspirate"; + desc = "The Bus Pirate"; + type = "buspirate"; + connection_type = serial; +; + +programmer + id = "buspirate_bb"; + desc = "The Bus Pirate (bitbang interface, supports TPI)"; + type = "buspirate_bb"; + connection_type = serial; + # pins are bits in bitbang byte (numbers are 87654321) + # 1|POWER|PULLUP|AUX|MOSI|CLK|MISO|CS + reset = 1; + sck = 3; + mosi = 4; + miso = 2; + #vcc = 7; This is internally set independent of this setting. +; + +# This is supposed to be the "default" STK500 entry. +# Attempts to select the correct firmware version +# by probing for it. Better use one of the entries +# below instead. +programmer + id = "stk500"; + desc = "Atmel STK500"; + type = "stk500generic"; + connection_type = serial; +; + +programmer + id = "stk500v1"; + desc = "Atmel STK500 Version 1.x firmware"; + type = "stk500"; + connection_type = serial; +; + +programmer + id = "mib510"; + desc = "Crossbow MIB510 programming board"; + type = "stk500"; + connection_type = serial; +; + +programmer + id = "stk500v2"; + desc = "Atmel STK500 Version 2.x firmware"; + type = "stk500v2"; + connection_type = serial; +; + +programmer + id = "stk500pp"; + desc = "Atmel STK500 V2 in parallel programming mode"; + type = "stk500pp"; + connection_type = serial; +; + +programmer + id = "stk500hvsp"; + desc = "Atmel STK500 V2 in high-voltage serial programming mode"; + type = "stk500hvsp"; + connection_type = serial; +; + +programmer + id = "stk600"; + desc = "Atmel STK600"; + type = "stk600"; + connection_type = usb; +; + +programmer + id = "stk600pp"; + desc = "Atmel STK600 in parallel programming mode"; + type = "stk600pp"; + connection_type = usb; +; + +programmer + id = "stk600hvsp"; + desc = "Atmel STK600 in high-voltage serial programming mode"; + type = "stk600hvsp"; + connection_type = usb; +; + +programmer + id = "avr910"; + desc = "Atmel Low Cost Serial Programmer"; + type = "avr910"; + connection_type = serial; +; + +programmer + id = "ft245r"; + desc = "FT245R Synchronous BitBang"; + type = "ftdi_syncbb"; + connection_type = usb; + miso = 1; # D1 + sck = 0; # D0 + mosi = 2; # D2 + reset = 4; # D4 +; + +programmer + id = "ft232r"; + desc = "FT232R Synchronous BitBang"; + type = "ftdi_syncbb"; + connection_type = usb; + miso = 1; # RxD + sck = 0; # RTS + mosi = 2; # TxD + reset = 4; # DTR +; + +# see http://www.bitwizard.nl/wiki/index.php/FTDI_ATmega +programmer + id = "bwmega"; + desc = "BitWizard ftdi_atmega builtin programmer"; + type = "ftdi_syncbb"; + connection_type = usb; + miso = 5; # DSR + sck = 6; # DCD + mosi = 3; # CTS + reset = 7; # RI +; + +# see http://www.geocities.jp/arduino_diecimila/bootloader/index_en.html +# Note: pins are numbered from 1! +programmer + id = "arduino-ft232r"; + desc = "Arduino: FT232R connected to ISP"; + type = "ftdi_syncbb"; + connection_type = usb; + miso = 3; # CTS X3(1) + sck = 5; # DSR X3(2) + mosi = 6; # DCD X3(3) + reset = 7; # RI X3(4) +; + +# website mentioned above uses this id +programmer parent "arduino-ft232r" + id = "diecimila"; + desc = "alias for arduino-ft232r"; +; + +programmer + id = "usbasp"; + desc = "USBasp, http://www.fischl.de/usbasp/"; + type = "usbasp"; + connection_type = usb; + usbvid = 0x16C0; # VOTI + usbpid = 0x05DC; # Obdev's free shared PID + usbvendor = "www.fischl.de"; + usbproduct = "USBasp"; + + # following variants are autodetected for id "usbasp" + + # original usbasp from fischl.de + # see above "usbasp" + + # old usbasp from fischl.de + #usbvid = 0x03EB; # ATMEL + #usbpid = 0xC7B4; # (unoffical) USBasp + #usbvendor = "www.fischl.de"; + #usbproduct = "USBasp"; + + # NIBObee (only if -P nibobee is given on command line) + # see below "nibobee" +; + +programmer + id = "nibobee"; + desc = "NIBObee"; + type = "usbasp"; + connection_type = usb; + usbvid = 0x16C0; # VOTI + usbpid = 0x092F; # NIBObee PID + usbvendor = "www.nicai-systems.com"; + usbproduct = "NIBObee"; +; + +programmer + id = "usbasp-clone"; + desc = "Any usbasp clone with correct VID/PID"; + type = "usbasp"; + connection_type = usb; + usbvid = 0x16C0; # VOTI + usbpid = 0x05DC; # Obdev's free shared PID + #usbvendor = ""; + #usbproduct = ""; +; + +programmer + id = "usbtiny"; + desc = "USBtiny simple USB programmer, http://www.ladyada.net/make/usbtinyisp/"; + type = "usbtiny"; + connection_type = usb; + usbvid = 0x1781; + usbpid = 0x0c9f; +; + +programmer + id = "arduinogemma"; + desc = "Arduino Gemma. Based on USBtiny"; + type = "usbtiny"; + connection_type = usb; + usbvid = 0x2341; + usbpid = 0x0c9f; +; + +programmer + id = "arduinoisp"; + desc = " "; + type = "usbtiny"; + connection_type = usb; + usbvid = 0x2341; + usbpid = 0x0049; +; + +programmer + id = "butterfly"; + desc = "Atmel Butterfly Development Board"; + type = "butterfly"; + connection_type = serial; +; + +programmer + id = "avr109"; + desc = "Atmel AppNote AVR109 Boot Loader"; + type = "butterfly"; + connection_type = serial; +; + +programmer + id = "avr911"; + desc = "Atmel AppNote AVR911 AVROSP"; + type = "butterfly"; + connection_type = serial; +; + +# suggested in http://forum.mikrokopter.de/topic-post48317.html +programmer + id = "mkbutterfly"; + desc = "Mikrokopter.de Butterfly"; + type = "butterfly_mk"; + connection_type = serial; +; + +programmer parent "mkbutterfly" + id = "butterfly_mk"; +; + +programmer + id = "jtagmkI"; + desc = "Atmel JTAG ICE (mkI)"; + baudrate = 115200; # default is 115200 + type = "jtagmki"; + connection_type = serial; +; + +# easier to type +programmer parent "jtagmkI" + id = "jtag1"; +; + +# easier to type +programmer parent "jtag1" + id = "jtag1slow"; + baudrate = 19200; +; + +# The JTAG ICE mkII has both, serial and USB connectivity. As it is +# mostly used through USB these days (AVR Studio 5 only supporting it +# that way), we make connection_type = usb the default. Users are +# still free to use a serial port with the -P option. + +programmer + id = "jtagmkII"; + desc = "Atmel JTAG ICE mkII"; + baudrate = 19200; # default is 19200 + type = "jtagmkii"; + connection_type = usb; +; + +# easier to type +programmer parent "jtagmkII" + id = "jtag2slow"; +; + +# JTAG ICE mkII @ 115200 Bd +programmer parent "jtag2slow" + id = "jtag2fast"; + baudrate = 115200; +; + +# make the fast one the default, people will love that +programmer parent "jtag2fast" + id = "jtag2"; +; + +# JTAG ICE mkII in ISP mode +programmer + id = "jtag2isp"; + desc = "Atmel JTAG ICE mkII in ISP mode"; + baudrate = 115200; + type = "jtagmkii_isp"; + connection_type = usb; +; + +# JTAG ICE mkII in debugWire mode +programmer + id = "jtag2dw"; + desc = "Atmel JTAG ICE mkII in debugWire mode"; + baudrate = 115200; + type = "jtagmkii_dw"; + connection_type = usb; +; + +# JTAG ICE mkII in AVR32 mode +programmer + id = "jtagmkII_avr32"; + desc = "Atmel JTAG ICE mkII im AVR32 mode"; + baudrate = 115200; + type = "jtagmkii_avr32"; + connection_type = usb; +; + +# JTAG ICE mkII in AVR32 mode +programmer + id = "jtag2avr32"; + desc = "Atmel JTAG ICE mkII im AVR32 mode"; + baudrate = 115200; + type = "jtagmkii_avr32"; + connection_type = usb; +; + +# JTAG ICE mkII in PDI mode +programmer + id = "jtag2pdi"; + desc = "Atmel JTAG ICE mkII PDI mode"; + baudrate = 115200; + type = "jtagmkii_pdi"; + connection_type = usb; +; + +# AVR Dragon in JTAG mode +programmer + id = "dragon_jtag"; + desc = "Atmel AVR Dragon in JTAG mode"; + baudrate = 115200; + type = "dragon_jtag"; + connection_type = usb; +; + +# AVR Dragon in ISP mode +programmer + id = "dragon_isp"; + desc = "Atmel AVR Dragon in ISP mode"; + baudrate = 115200; + type = "dragon_isp"; + connection_type = usb; +; + +# AVR Dragon in PP mode +programmer + id = "dragon_pp"; + desc = "Atmel AVR Dragon in PP mode"; + baudrate = 115200; + type = "dragon_pp"; + connection_type = usb; +; + +# AVR Dragon in HVSP mode +programmer + id = "dragon_hvsp"; + desc = "Atmel AVR Dragon in HVSP mode"; + baudrate = 115200; + type = "dragon_hvsp"; + connection_type = usb; +; + +# AVR Dragon in debugWire mode +programmer + id = "dragon_dw"; + desc = "Atmel AVR Dragon in debugWire mode"; + baudrate = 115200; + type = "dragon_dw"; + connection_type = usb; +; + +# AVR Dragon in PDI mode +programmer + id = "dragon_pdi"; + desc = "Atmel AVR Dragon in PDI mode"; + baudrate = 115200; + type = "dragon_pdi"; + connection_type = usb; +; + +programmer + id = "jtag3"; + desc = "Atmel AVR JTAGICE3 in JTAG mode"; + type = "jtagice3"; + connection_type = usb; +; + +programmer + id = "jtag3pdi"; + desc = "Atmel AVR JTAGICE3 in PDI mode"; + type = "jtagice3_pdi"; + connection_type = usb; +; + +programmer + id = "jtag3dw"; + desc = "Atmel AVR JTAGICE3 in debugWIRE mode"; + type = "jtagice3_dw"; + connection_type = usb; +; + +programmer + id = "jtag3isp"; + desc = "Atmel AVR JTAGICE3 in ISP mode"; + type = "jtagice3_isp"; + connection_type = usb; +; + + +programmer + id = "pavr"; + desc = "Jason Kyle's pAVR Serial Programmer"; + type = "avr910"; + connection_type = serial; +; + +programmer + id = "pickit2"; + desc = "MicroChip's PICkit2 Programmer"; + type = "pickit2"; + connection_type = usb; +; + +# Parallel port programmers. + +programmer + id = "bsd"; + desc = "Brian Dean's Programmer, http://www.bsdhome.com/avrdude/"; + type = "par"; + connection_type = parallel; + vcc = 2, 3, 4, 5; + reset = 7; + sck = 8; + mosi = 9; + miso = 10; +; + +programmer + id = "stk200"; + desc = "STK200"; + type = "par"; + connection_type = parallel; + buff = 4, 5; + sck = 6; + mosi = 7; + reset = 9; + miso = 10; +; + +# The programming dongle used by the popular Ponyprog +# utility. It is almost similar to the STK200 one, +# except that there is a LED indicating that the +# programming is currently in progress. + +programmer parent "stk200" + id = "pony-stk200"; + desc = "Pony Prog STK200"; + pgmled = 8; +; + +programmer + id = "dt006"; + desc = "Dontronics DT006"; + type = "par"; + connection_type = parallel; + reset = 4; + sck = 5; + mosi = 2; + miso = 11; +; + +programmer parent "dt006" + id = "bascom"; + desc = "Bascom SAMPLE programming cable"; +; + +programmer + id = "alf"; + desc = "Nightshade ALF-PgmAVR, http://nightshade.homeip.net/"; + type = "par"; + connection_type = parallel; + vcc = 2, 3, 4, 5; + buff = 6; + reset = 7; + sck = 8; + mosi = 9; + miso = 10; + errled = 1; + rdyled = 14; + pgmled = 16; + vfyled = 17; +; + +programmer + id = "sp12"; + desc = "Steve Bolt's Programmer"; + type = "par"; + connection_type = parallel; + vcc = 4,5,6,7,8; + reset = 3; + sck = 2; + mosi = 9; + miso = 11; +; + +programmer + id = "picoweb"; + desc = "Picoweb Programming Cable, http://www.picoweb.net/"; + type = "par"; + connection_type = parallel; + reset = 2; + sck = 3; + mosi = 4; + miso = 13; +; + +programmer + id = "abcmini"; + desc = "ABCmini Board, aka Dick Smith HOTCHIP"; + type = "par"; + connection_type = parallel; + reset = 4; + sck = 3; + mosi = 2; + miso = 10; +; + +programmer + id = "futurlec"; + desc = "Futurlec.com programming cable."; + type = "par"; + connection_type = parallel; + reset = 3; + sck = 2; + mosi = 1; + miso = 10; +; + + +# From the contributor of the "xil" jtag cable: +# The "vcc" definition isn't really vcc (the cable gets its power from +# the programming circuit) but is necessary to switch one of the +# buffer lines (trying to add it to the "buff" lines doesn't work in +# avrdude versions before 5.5j). +# With this, TMS connects to RESET, TDI to MOSI, TDO to MISO and TCK +# to SCK (plus vcc/gnd of course) +programmer + id = "xil"; + desc = "Xilinx JTAG cable"; + type = "par"; + connection_type = parallel; + mosi = 2; + sck = 3; + reset = 4; + buff = 5; + miso = 13; + vcc = 6; +; + + +programmer + id = "dapa"; + desc = "Direct AVR Parallel Access cable"; + type = "par"; + connection_type = parallel; + vcc = 3; + reset = 16; + sck = 1; + mosi = 2; + miso = 11; +; + +programmer + id = "atisp"; + desc = "AT-ISP V1.1 programming cable for AVR-SDK1 from micro-research.co.th"; + type = "par"; + connection_type = parallel; + reset = ~6; + sck = ~8; + mosi = ~7; + miso = ~10; +; + +programmer + id = "ere-isp-avr"; + desc = "ERE ISP-AVR "; + type = "par"; + connection_type = parallel; + reset = ~4; + sck = 3; + mosi = 2; + miso = 10; +; + +programmer + id = "blaster"; + desc = "Altera ByteBlaster"; + type = "par"; + connection_type = parallel; + sck = 2; + miso = 11; + reset = 3; + mosi = 8; + buff = 14; +; + +# It is almost same as pony-stk200, except vcc on pin 5 to auto +# disconnect port (download on http://electropol.free.fr/spip/spip.php?article27) +programmer parent "pony-stk200" + id = "frank-stk200"; + desc = "Frank STK200"; + buff = ; # delete buff pin assignment + vcc = 5; +; + +# The AT98ISP Cable is a simple parallel dongle for AT89 family. +# http://www.atmel.com/dyn/products/tools_card.asp?tool_id=2877 +programmer + id = "89isp"; + desc = "Atmel at89isp cable"; + type = "par"; + connection_type = parallel; + reset = 17; + sck = 1; + mosi = 2; + miso = 10; +; + + +#This programmer bitbangs GPIO lines using the Linux sysfs GPIO interface +# +#To enable it set the configuration below to match the GPIO lines connected to the +#relevant ISP header pins and uncomment the entry definition. In case you don't +#have the required permissions to edit this system wide config file put the +#entry in a separate .conf file and use it with -C+.conf +#on the command line. +# +#To check if your avrdude build has support for the linuxgpio programmer compiled in, +#use -c?type on the command line and look for linuxgpio in the list. If it's not available +#you need pass the --enable-linuxgpio=yes option to configure and recompile avrdude. +# +#programmer +# id = "linuxgpio"; +# desc = "Use the Linux sysfs interface to bitbang GPIO lines"; +# type = "linuxgpio"; +# reset = ?; +# sck = ?; +# mosi = ?; +# miso = ?; +#; + +#This programmer bitbangs GPIO lines using the Linux sysfs GPIO interface and direct +#GPIO memory registers read/write. +# +#To enable it set the configuration below to match the GPIO lines connected to the +#relevant ISP header pins and uncomment the entry definition. In case you don't +#have the required permissions to edit this system wide config file put the +#entry in a separate .conf file and use it with -C+.conf +#on the command line. +# +#To check if your avrdude build has support for the arduinotre programmer compiled in, +#use -c?type on the command line and look for arduinotre in the list. If it's not available +#you need pass the --enable-arduinotre=yes option to configure and recompile avrdude. +# +#programmer +# id = "arduinotre"; +# desc = "Arduino TRE bitbanging using GPIO registers"; +# type = "arduinotre"; +# reset = ~65; +# sck = 49; +# mosi = 48; +# miso = 61; +#; + +# some ultra cheap programmers use bitbanging on the +# serialport. +# +# PC - DB9 - Pins for RS232: +# +# GND 5 -- |O +# | O| <- 9 RI +# DTR 4 <- |O | +# | O| <- 8 CTS +# TXD 3 <- |O | +# | O| -> 7 RTS +# RXD 2 -> |O | +# | O| <- 6 DSR +# DCD 1 -> |O +# +# Using RXD is currently not supported. +# Using RI is not supported under Win32 but is supported under Posix. + +# serial ponyprog design (dasa2 in uisp) +# reset=!txd sck=rts mosi=dtr miso=cts + +programmer + id = "ponyser"; + desc = "design ponyprog serial, reset=!txd sck=rts mosi=dtr miso=cts"; + type = "serbb"; + connection_type = serial; + reset = ~3; + sck = 7; + mosi = 4; + miso = 8; +; + +# Same as above, different name +# reset=!txd sck=rts mosi=dtr miso=cts + +programmer parent "ponyser" + id = "siprog"; + desc = "Lancos SI-Prog "; +; + +# unknown (dasa in uisp) +# reset=rts sck=dtr mosi=txd miso=cts + +programmer + id = "dasa"; + desc = "serial port banging, reset=rts sck=dtr mosi=txd miso=cts"; + type = "serbb"; + connection_type = serial; + reset = 7; + sck = 4; + mosi = 3; + miso = 8; +; + +# unknown (dasa3 in uisp) +# reset=!dtr sck=rts mosi=txd miso=cts + +programmer + id = "dasa3"; + desc = "serial port banging, reset=!dtr sck=rts mosi=txd miso=cts"; + type = "serbb"; + connection_type = serial; + reset = ~4; + sck = 7; + mosi = 3; + miso = 8; +; + +# C2N232i (jumper configuration "auto") +# reset=dtr sck=!rts mosi=!txd miso=!cts + +programmer + id = "c2n232i"; + desc = "serial port banging, reset=dtr sck=!rts mosi=!txd miso=!cts"; + type = "serbb"; + connection_type = serial; + reset = 4; + sck = ~7; + mosi = ~3; + miso = ~8; +; + +# +# PART DEFINITIONS +# + +#------------------------------------------------------------ +# ATtiny11 +#------------------------------------------------------------ + +# This is an HVSP-only device. + +part + id = "t11"; + desc = "ATtiny11"; + stk500_devcode = 0x11; + signature = 0x1e 0x90 0x04; + chip_erase_delay = 20000; + + timeout = 200; + hvsp_controlstack = + 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x00, + 0x68, 0x78, 0x68, 0x68, 0x00, 0x00, 0x68, 0x78, + 0x78, 0x00, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10, + 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + hvspcmdexedelay = 0; + synchcycles = 6; + latchcycles = 1; + togglevtg = 1; + poweroffdelay = 25; + resetdelayms = 0; + resetdelayus = 50; + hvleavestabdelay = 100; + resetdelay = 25; + chiperasepolltimeout = 40; + chiperasetime = 0; + programfusepolltimeout = 25; + programlockpolltimeout = 25; + + memory "eeprom" + size = 64; + blocksize = 64; + readsize = 256; + delay = 5; + ; + + memory "flash" + size = 1024; + blocksize = 128; + readsize = 256; + delay = 3; + ; + + memory "signature" + size = 3; + ; + + memory "lock" + size = 1; + ; + + memory "calibration" + size = 1; + ; + + memory "fuse" + size = 1; + ; +; + +#------------------------------------------------------------ +# ATtiny12 +#------------------------------------------------------------ + +part + id = "t12"; + desc = "ATtiny12"; + stk500_devcode = 0x12; + avr910_devcode = 0x55; + signature = 0x1e 0x90 0x05; + chip_erase_delay = 20000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + hvsp_controlstack = + 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x00, + 0x68, 0x78, 0x68, 0x68, 0x00, 0x00, 0x68, 0x78, + 0x78, 0x00, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10, + 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x00; + hventerstabdelay = 100; + hvspcmdexedelay = 0; + synchcycles = 6; + latchcycles = 1; + togglevtg = 1; + poweroffdelay = 25; + resetdelayms = 0; + resetdelayus = 50; + hvleavestabdelay = 100; + resetdelay = 25; + chiperasepolltimeout = 40; + chiperasetime = 0; + programfusepolltimeout = 25; + programlockpolltimeout = 25; + + memory "eeprom" + size = 64; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 x x x x x x x x", + "x x a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 x x x x x x x x", + "x x a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 8; + blocksize = 64; + readsize = 256; + ; + + memory "flash" + size = 1024; + min_write_delay = 4500; + max_write_delay = 20000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 5; + blocksize = 128; + readsize = 256; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x o o x"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "fuse" + size = 1; + read = "0 1 0 1 0 0 0 0 x x x x x x x x", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 x x x x x", + "x x x x x x x x i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; +; + +#------------------------------------------------------------ +# ATtiny13 +#------------------------------------------------------------ + +part + id = "t13"; + desc = "ATtiny13"; + has_debugwire = yes; + flash_instr = 0xB4, 0x0E, 0x1E; + eeprom_instr = 0xBB, 0xFE, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D, + 0xBC, 0x0E, 0xB4, 0x0E, 0xBA, 0x0D, 0xBB, 0xBC, + 0x99, 0xE1, 0xBB, 0xAC; + stk500_devcode = 0x14; + signature = 0x1e 0x90 0x07; + chip_erase_delay = 4000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + hvsp_controlstack = + 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x66, + 0x68, 0x78, 0x68, 0x68, 0x7A, 0x6A, 0x68, 0x78, + 0x78, 0x7D, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10, + 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + hvspcmdexedelay = 0; + synchcycles = 6; + latchcycles = 1; + togglevtg = 1; + poweroffdelay = 25; + resetdelayms = 0; + resetdelayus = 90; + hvleavestabdelay = 100; + resetdelay = 25; + chiperasepolltimeout = 40; + chiperasetime = 0; + programfusepolltimeout = 25; + programlockpolltimeout = 25; + + ocdrev = 0; + + memory "eeprom" + size = 64; + page_size = 4; + min_write_delay = 4000; + max_write_delay = 4000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 0 0 0 x x x x x", + "x x a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 0 0 0 x x x x x", + "x x a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " x x a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 5; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 1024; + page_size = 32; + num_pages = 32; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 0 0 0 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 0 0 0 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x x a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x x a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 0 0 0 a8", + " a7 a6 a5 a4 x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 32; + readsize = 256; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + + memory "lock" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "calibration" + size = 2; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 a0 o o o o o o o o"; + ; + + memory "lfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + ; + +; + + +#------------------------------------------------------------ +# ATtiny15 +#------------------------------------------------------------ + +part + id = "t15"; + desc = "ATtiny15"; + stk500_devcode = 0x13; + avr910_devcode = 0x56; + signature = 0x1e 0x90 0x06; + chip_erase_delay = 8200; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + hvsp_controlstack = + 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x00, + 0x68, 0x78, 0x68, 0x68, 0x00, 0x00, 0x68, 0x78, + 0x78, 0x00, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10, + 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x00; + hventerstabdelay = 100; + hvspcmdexedelay = 5; + synchcycles = 6; + latchcycles = 16; + togglevtg = 1; + poweroffdelay = 25; + resetdelayms = 0; + resetdelayus = 50; + hvleavestabdelay = 100; + resetdelay = 25; + chiperasepolltimeout = 40; + chiperasetime = 0; + programfusepolltimeout = 25; + programlockpolltimeout = 25; + + memory "eeprom" + size = 64; + min_write_delay = 8200; + max_write_delay = 8200; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 x x x x x x x x", + "x x a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 x x x x x x x x", + "x x a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 10; + blocksize = 64; + readsize = 256; + ; + + memory "flash" + size = 1024; + min_write_delay = 4100; + max_write_delay = 4100; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 5; + blocksize = 128; + readsize = 256; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x o o x"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "fuse" + size = 1; + read = "0 1 0 1 0 0 0 0 x x x x x x x x", + "x x x x x x x x o o o o x x o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 x x x x x", + "x x x x x x x x i i i i 1 1 i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; +; + +#------------------------------------------------------------ +# AT90s1200 +#------------------------------------------------------------ + +part + id = "1200"; + desc = "AT90S1200"; + is_at90s1200 = yes; + stk500_devcode = 0x33; + avr910_devcode = 0x13; + signature = 0x1e 0x90 0x01; + pagel = 0xd7; + bs2 = 0xa0; + chip_erase_delay = 20000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 1; + bytedelay = 0; + pollindex = 0; + pollvalue = 0xFF; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 15; + chiperasepolltimeout = 0; + programfusepulsewidth = 2; + programfusepolltimeout = 0; + programlockpulsewidth = 0; + programlockpolltimeout = 1; + + memory "eeprom" + size = 64; + min_write_delay = 4000; + max_write_delay = 9000; + readback_p1 = 0x00; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 x x x x x x x x", + "x x a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 x x x x x x x x", + "x x a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 20; + blocksize = 32; + readsize = 256; + ; + memory "flash" + size = 1024; + min_write_delay = 4000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x02; + delay = 15; + blocksize = 128; + readsize = 256; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "fuse" + size = 1; + ; + memory "lock" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + ; + ; + +#------------------------------------------------------------ +# AT90s4414 +#------------------------------------------------------------ + +part + id = "4414"; + desc = "AT90S4414"; + stk500_devcode = 0x50; + avr910_devcode = 0x28; + signature = 0x1e 0x92 0x01; + chip_erase_delay = 20000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 15; + chiperasepolltimeout = 0; + programfusepulsewidth = 2; + programfusepolltimeout = 0; + programlockpulsewidth = 0; + programlockpolltimeout = 1; + + memory "eeprom" + size = 256; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0x80; + readback_p2 = 0x7f; + read = " 1 0 1 0 0 0 0 0 x x x x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0 x x x x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 64; + readsize = 256; + ; + memory "flash" + size = 4096; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0x7f; + readback_p2 = 0x7f; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write_lo = " 0 1 0 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 64; + readsize = 256; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "fuse" + size = 1; + ; + memory "lock" + size = 1; + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + ; + +#------------------------------------------------------------ +# AT90s2313 +#------------------------------------------------------------ + +part + id = "2313"; + desc = "AT90S2313"; + stk500_devcode = 0x40; + avr910_devcode = 0x20; + signature = 0x1e 0x91 0x01; + chip_erase_delay = 20000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 15; + chiperasepolltimeout = 0; + programfusepulsewidth = 2; + programfusepolltimeout = 0; + programlockpulsewidth = 0; + programlockpolltimeout = 1; + + memory "eeprom" + size = 128; + min_write_delay = 4000; + max_write_delay = 9000; + readback_p1 = 0x80; + readback_p2 = 0x7f; + read = "1 0 1 0 0 0 0 0 x x x x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 x x x x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 64; + readsize = 256; + ; + memory "flash" + size = 2048; + min_write_delay = 4000; + max_write_delay = 9000; + readback_p1 = 0x7f; + readback_p2 = 0x7f; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "fuse" + size = 1; + ; + memory "lock" + size = 1; + write = "1 0 1 0 1 1 0 0 1 1 1 x x i i x", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + ; + +#------------------------------------------------------------ +# AT90s2333 +#------------------------------------------------------------ + +part + id = "2333"; +##### WARNING: No XML file for device 'AT90S2333'! ##### + desc = "AT90S2333"; + stk500_devcode = 0x42; + avr910_devcode = 0x34; + signature = 0x1e 0x91 0x05; + chip_erase_delay = 20000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 15; + chiperasepolltimeout = 0; + programfusepulsewidth = 2; + programfusepolltimeout = 0; + programlockpulsewidth = 0; + programlockpolltimeout = 1; + + memory "eeprom" + size = 128; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0x00; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 x x x x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 x x x x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + + memory "flash" + size = 2048; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "fuse" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + pwroff_after_write = yes; + read = "0 1 0 1 0 0 0 0 x x x x x x x x", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 i i i i i", + "x x x x x x x x x x x x x x x x"; + ; + memory "lock" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x o o x"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + ; + ; + + +#------------------------------------------------------------ +# AT90s2343 (also AT90s2323 and ATtiny22) +#------------------------------------------------------------ + +part + id = "2343"; + desc = "AT90S2343"; + stk500_devcode = 0x43; + avr910_devcode = 0x4c; + signature = 0x1e 0x91 0x03; + chip_erase_delay = 18000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + hvsp_controlstack = + 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x00, + 0x68, 0x78, 0x68, 0x68, 0x00, 0x00, 0x68, 0x78, + 0x78, 0x00, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10, + 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x00; + hventerstabdelay = 100; + hvspcmdexedelay = 0; + synchcycles = 6; + latchcycles = 1; + togglevtg = 0; + poweroffdelay = 25; + resetdelayms = 0; + resetdelayus = 50; + hvleavestabdelay = 100; + resetdelay = 25; + chiperasepolltimeout = 40; + chiperasetime = 0; + programfusepolltimeout = 25; + programlockpolltimeout = 25; + + memory "eeprom" + size = 128; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0x00; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0", + "x a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0", + "x a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 64; + readsize = 256; + ; + memory "flash" + size = 2048; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 128; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "fuse" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x o o o x x x x o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 1 1 1 1 i", + "x x x x x x x x x x x x x x x x"; + ; + memory "lock" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x o o o x x x x o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + ; + ; + + +#------------------------------------------------------------ +# AT90s4433 +#------------------------------------------------------------ + +part + id = "4433"; + desc = "AT90S4433"; + stk500_devcode = 0x51; + avr910_devcode = 0x30; + signature = 0x1e 0x92 0x03; + chip_erase_delay = 20000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 15; + chiperasepolltimeout = 0; + programfusepulsewidth = 2; + programfusepolltimeout = 0; + programlockpulsewidth = 0; + programlockpolltimeout = 1; + + memory "eeprom" + size = 256; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0x00; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0 x x x x x x x x", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0 x x x x x x x x", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + memory "flash" + size = 4096; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write_lo = " 0 1 0 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "fuse" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + pwroff_after_write = yes; + read = "0 1 0 1 0 0 0 0 x x x x x x x x", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 i i i i i", + "x x x x x x x x x x x x x x x x"; + ; + memory "lock" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x o o x"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + ; + ; + +#------------------------------------------------------------ +# AT90s4434 +#------------------------------------------------------------ + +part + id = "4434"; +##### WARNING: No XML file for device 'AT90S4434'! ##### + desc = "AT90S4434"; + stk500_devcode = 0x52; + avr910_devcode = 0x6c; + signature = 0x1e 0x92 0x02; + chip_erase_delay = 20000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + memory "eeprom" + size = 256; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0x00; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0 x x x x x x x x", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0 x x x x x x x x", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + ; + memory "flash" + size = 4096; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write_lo = " 0 1 0 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "fuse" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + read = "0 1 0 1 0 0 0 0 x x x x x x x x", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 i i i i i", + "x x x x x x x x x x x x x x x x"; + ; + memory "lock" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x o o x"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + ; + ; + +#------------------------------------------------------------ +# AT90s8515 +#------------------------------------------------------------ + +part + id = "8515"; + desc = "AT90S8515"; + stk500_devcode = 0x60; + avr910_devcode = 0x38; + signature = 0x1e 0x93 0x01; + chip_erase_delay = 20000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + resetdelay = 15; + chiperasepulsewidth = 15; + chiperasepolltimeout = 0; + programfusepulsewidth = 2; + programfusepolltimeout = 0; + programlockpulsewidth = 0; + programlockpolltimeout = 1; + + memory "eeprom" + size = 512; + min_write_delay = 4000; + max_write_delay = 9000; + readback_p1 = 0x80; + readback_p2 = 0x7f; + read = " 1 0 1 0 0 0 0 0 x x x x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0 x x x x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + memory "flash" + size = 8192; + min_write_delay = 4000; + max_write_delay = 9000; + readback_p1 = 0x7f; + readback_p2 = 0x7f; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write_lo = " 0 1 0 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "fuse" + size = 1; + ; + memory "lock" + size = 1; + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + ; + +#------------------------------------------------------------ +# AT90s8535 +#------------------------------------------------------------ + +part + id = "8535"; + desc = "AT90S8535"; + stk500_devcode = 0x61; + avr910_devcode = 0x68; + signature = 0x1e 0x93 0x03; + chip_erase_delay = 20000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 15; + chiperasepolltimeout = 0; + programfusepulsewidth = 2; + programfusepolltimeout = 0; + programlockpulsewidth = 0; + programlockpolltimeout = 1; + + memory "eeprom" + size = 512; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0x00; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0 x x x x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0 x x x x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + memory "flash" + size = 8192; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write_lo = " 0 1 0 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "fuse" + size = 1; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x x x o"; + write = "1 0 1 0 1 1 0 0 1 0 1 1 1 1 1 i", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x o o x x x x x x"; + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + ; + +#------------------------------------------------------------ +# ATmega103 +#------------------------------------------------------------ + +part + id = "m103"; + desc = "ATmega103"; + stk500_devcode = 0xB1; + avr910_devcode = 0x41; + signature = 0x1e 0x97 0x01; + chip_erase_delay = 112000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x8E, 0x9E, 0x2E, 0x3E, 0xAE, 0xBE, + 0x4E, 0x5E, 0xCE, 0xDE, 0x6E, 0x7E, 0xEE, 0xDE, + 0x66, 0x76, 0xE6, 0xF6, 0x6A, 0x7A, 0xEA, 0x7A, + 0x7F, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 15; + chiperasepolltimeout = 0; + programfusepulsewidth = 2; + programfusepolltimeout = 0; + programlockpulsewidth = 0; + programlockpolltimeout = 10; + + memory "eeprom" + size = 4096; + min_write_delay = 4000; + max_write_delay = 9000; + readback_p1 = 0x80; + readback_p2 = 0x7f; + read = " 1 0 1 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 64; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 131072; + page_size = 256; + num_pages = 512; + min_write_delay = 22000; + max_write_delay = 56000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x11; + delay = 70; + blocksize = 256; + readsize = 256; + ; + + memory "fuse" + size = 1; + read = "0 1 0 1 0 0 0 0 x x x x x x x x", + "x x x x x x x x x x o x o 1 o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 1 i 1 i i", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x o o x"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + + +#------------------------------------------------------------ +# ATmega64 +#------------------------------------------------------------ + +part + id = "m64"; + desc = "ATmega64"; + has_jtag = yes; + stk500_devcode = 0xA0; + avr910_devcode = 0x45; + signature = 0x1e 0x96 0x02; + chip_erase_delay = 9000; + pagel = 0xD7; + bs2 = 0xA0; + reset = dedicated; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 6; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x22; + spmcr = 0x68; + allowfullpagebitstream = yes; + + ocdrev = 2; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 2048; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 20; + blocksize = 64; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 65536; + page_size = 256; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " x a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x21; + delay = 6; + blocksize = 128; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 4; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + + + + +#------------------------------------------------------------ +# ATmega128 +#------------------------------------------------------------ + +part + id = "m128"; + desc = "ATmega128"; + has_jtag = yes; + stk500_devcode = 0xB2; + avr910_devcode = 0x43; + signature = 0x1e 0x97 0x02; + chip_erase_delay = 9000; + pagel = 0xD7; + bs2 = 0xA0; + reset = dedicated; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 6; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x22; + spmcr = 0x68; + rampz = 0x3b; + allowfullpagebitstream = yes; + + ocdrev = 1; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 4096; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 64; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 131072; + page_size = 256; + num_pages = 512; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x21; + delay = 6; + blocksize = 128; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 4; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# AT90CAN128 +#------------------------------------------------------------ + +part + id = "c128"; + desc = "AT90CAN128"; + has_jtag = yes; + stk500_devcode = 0xB3; +# avr910_devcode = 0x43; + signature = 0x1e 0x97 0x81; + chip_erase_delay = 9000; + pagel = 0xD7; + bs2 = 0xA0; + reset = dedicated; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 6; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + rampz = 0x3b; + eecr = 0x3f; + allowfullpagebitstream = no; + + ocdrev = 3; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 4096; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + + mode = 0x41; + delay = 20; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 131072; + page_size = 256; + num_pages = 512; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 256; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# AT90CAN64 +#------------------------------------------------------------ + +part + id = "c64"; + desc = "AT90CAN64"; + has_jtag = yes; + stk500_devcode = 0xB3; +# avr910_devcode = 0x43; + signature = 0x1e 0x96 0x81; + chip_erase_delay = 9000; + pagel = 0xD7; + bs2 = 0xA0; + reset = dedicated; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 6; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + rampz = 0x3b; + eecr = 0x3f; + allowfullpagebitstream = no; + + ocdrev = 3; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 2048; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + + mode = 0x41; + delay = 20; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 65536; + page_size = 256; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 256; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# AT90CAN32 +#------------------------------------------------------------ + +part + id = "c32"; + desc = "AT90CAN32"; + has_jtag = yes; + stk500_devcode = 0xB3; +# avr910_devcode = 0x43; + signature = 0x1e 0x95 0x81; + chip_erase_delay = 9000; + pagel = 0xD7; + bs2 = 0xA0; + reset = dedicated; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 6; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + rampz = 0x3b; + eecr = 0x3f; + allowfullpagebitstream = no; + + ocdrev = 3; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 1024; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + + mode = 0x41; + delay = 20; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 32768; + page_size = 256; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 256; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + + +#------------------------------------------------------------ +# ATmega16 +#------------------------------------------------------------ + +part + id = "m16"; + desc = "ATmega16"; + has_jtag = yes; + stk500_devcode = 0x82; + avr910_devcode = 0x74; + signature = 0x1e 0x94 0x03; + pagel = 0xd7; + bs2 = 0xa0; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 100; + latchcycles = 6; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + resetdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + allowfullpagebitstream = yes; + + ocdrev = 2; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ + size = 512; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x04; + delay = 10; + blocksize = 128; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 16384; + page_size = 128; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x21; + delay = 6; + blocksize = 128; + readsize = 256; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "calibration" + size = 4; + + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + ; + + +#------------------------------------------------------------ +# ATmega164P +#------------------------------------------------------------ + +# close to ATmega16 + +part parent "m16" + id = "m164p"; + desc = "ATmega164P"; + signature = 0x1e 0x94 0x0a; + + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + allowfullpagebitstream = no; + chip_erase_delay = 55000; + + ocdrev = 3; + ; + + +#------------------------------------------------------------ +# ATmega324P +#------------------------------------------------------------ + +# similar to ATmega164P + +part + id = "m324p"; + desc = "ATmega324P"; + has_jtag = yes; + stk500_devcode = 0x82; # no STK500v1 support, use the ATmega16 one + avr910_devcode = 0x74; + signature = 0x1e 0x95 0x08; + pagel = 0xd7; + bs2 = 0xa0; + chip_erase_delay = 55000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + allowfullpagebitstream = no; + + ocdrev = 3; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ + size = 1024; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 128; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 32768; + page_size = 128; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x21; + delay = 6; + blocksize = 256; + readsize = 256; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x 1 1 1 1 1 i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 1; + + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + + +#------------------------------------------------------------ +# ATmega324PA +#------------------------------------------------------------ + +# similar to ATmega324P + +part parent "m324p" + id = "m324pa"; + desc = "ATmega324PA"; + signature = 0x1e 0x95 0x11; + + ocdrev = 3; + ; + + +#------------------------------------------------------------ +# ATmega644 +#------------------------------------------------------------ + +# similar to ATmega164 + +part + id = "m644"; + desc = "ATmega644"; + has_jtag = yes; + stk500_devcode = 0x82; # no STK500v1 support, use the ATmega16 one + avr910_devcode = 0x74; + signature = 0x1e 0x96 0x09; + pagel = 0xd7; + bs2 = 0xa0; + chip_erase_delay = 55000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 6; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + allowfullpagebitstream = no; + + ocdrev = 3; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 2048; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 128; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 65536; + page_size = 256; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x21; + delay = 6; + blocksize = 256; + readsize = 256; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x 1 1 1 1 1 i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 1; + + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega644P +#------------------------------------------------------------ + +# similar to ATmega164p + +part parent "m644" + id = "m644p"; + desc = "ATmega644P"; + signature = 0x1e 0x96 0x0a; + + ocdrev = 3; + ; + + + +#------------------------------------------------------------ +# ATmega1284P +#------------------------------------------------------------ + +# similar to ATmega164p + +part + id = "m1284p"; + desc = "ATmega1284P"; + has_jtag = yes; + stk500_devcode = 0x82; # no STK500v1 support, use the ATmega16 one + avr910_devcode = 0x74; + signature = 0x1e 0x97 0x05; + pagel = 0xd7; + bs2 = 0xa0; + chip_erase_delay = 55000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 6; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + allowfullpagebitstream = no; + + ocdrev = 3; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 4096; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 128; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 131072; + page_size = 256; + num_pages = 512; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 256; + readsize = 256; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x 1 1 1 1 1 i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 1; + + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + + + +#------------------------------------------------------------ +# ATmega162 +#------------------------------------------------------------ + +part + id = "m162"; + desc = "ATmega162"; + has_jtag = yes; + stk500_devcode = 0x83; + avr910_devcode = 0x63; + signature = 0x1e 0x94 0x04; + chip_erase_delay = 9000; + pagel = 0xd7; + bs2 = 0xa0; + + idr = 0x04; + spmcr = 0x57; + allowfullpagebitstream = yes; + + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + ocdrev = 2; + + memory "flash" + paged = yes; + size = 16384; + page_size = 128; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + mode = 0x41; + delay = 10; + blocksize = 128; + readsize = 256; + + ; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 6; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ + size = 512; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + + read = " 1 0 1 0 0 0 0 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 20; + blocksize = 4; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 16000; + max_write_delay = 16000; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 16000; + max_write_delay = 16000; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "efuse" + size = 1; + min_write_delay = 16000; + max_write_delay = 16000; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x 1 1 1 1 1 i i i"; + ; + + memory "lock" + size = 1; + min_write_delay = 16000; + max_write_delay = 16000; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "signature" + size = 3; + + read = "0 0 1 1 0 0 0 0 0 0 x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 1; + + read = "0 0 1 1 1 0 0 0 0 0 x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; +; + + + +#------------------------------------------------------------ +# ATmega163 +#------------------------------------------------------------ + +part + id = "m163"; + desc = "ATmega163"; + stk500_devcode = 0x81; + avr910_devcode = 0x64; + signature = 0x1e 0x94 0x02; + chip_erase_delay = 32000; + pagel = 0xd7; + bs2 = 0xa0; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 30; + programfusepulsewidth = 0; + programfusepolltimeout = 2; + programlockpulsewidth = 0; + programlockpolltimeout = 2; + + + memory "eeprom" + size = 512; + min_write_delay = 4000; + max_write_delay = 4000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + mode = 0x41; + delay = 20; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 16384; + page_size = 128; + num_pages = 128; + min_write_delay = 16000; + max_write_delay = 16000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " x x x a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x11; + delay = 20; + blocksize = 128; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o x x o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i 1 1 i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x x x x x 1 o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x 1 1 1 1 1 i i i"; + ; + + memory "lock" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x 0 x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega169 +#------------------------------------------------------------ + +part + id = "m169"; + desc = "ATmega169"; + has_jtag = yes; + stk500_devcode = 0x85; + avr910_devcode = 0x78; + signature = 0x1e 0x94 0x05; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + + ocdrev = 2; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ + size = 512; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 20; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 16384; + page_size = 128; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " x x x a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 128; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + ; + + memory "lock" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega329 +#------------------------------------------------------------ + +part + id = "m329"; + desc = "ATmega329"; + has_jtag = yes; +# stk500_devcode = 0x85; # no STK500 support, only STK500v2 +# avr910_devcode = 0x?; # try the ATmega169 one: + avr910_devcode = 0x75; + signature = 0x1e 0x95 0x03; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + + ocdrev = 3; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ + size = 1024; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 20; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 32768; + page_size = 128; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " x x x a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 256; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "efuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x i i i"; + ; + + memory "lock" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega329P +#------------------------------------------------------------ +# Identical to ATmega329 except of the signature + +part parent "m329" + id = "m329p"; + desc = "ATmega329P"; + signature = 0x1e 0x95 0x0b; + + ocdrev = 3; + ; + +#------------------------------------------------------------ +# ATmega3290 +#------------------------------------------------------------ + +# identical to ATmega329 + +part parent "m329" + id = "m3290"; + desc = "ATmega3290"; + signature = 0x1e 0x95 0x04; + + ocdrev = 3; + ; + +#------------------------------------------------------------ +# ATmega3290P +#------------------------------------------------------------ + +# identical to ATmega3290 except of the signature + +part parent "m3290" + id = "m3290p"; + desc = "ATmega3290P"; + signature = 0x1e 0x95 0x0c; + + ocdrev = 3; + ; + +#------------------------------------------------------------ +# ATmega649 +#------------------------------------------------------------ + +part + id = "m649"; + desc = "ATmega649"; + has_jtag = yes; +# stk500_devcode = 0x85; # no STK500 support, only STK500v2 +# avr910_devcode = 0x?; # try the ATmega169 one: + avr910_devcode = 0x75; + signature = 0x1e 0x96 0x03; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + + ocdrev = 3; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 2048; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 20; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 65536; + page_size = 256; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " x x x a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 256; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "efuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x i i i"; + ; + + memory "lock" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega6490 +#------------------------------------------------------------ + +# identical to ATmega649 + +part parent "m649" + id = "m6490"; + desc = "ATmega6490"; + signature = 0x1e 0x96 0x04; + + ocdrev = 3; + ; + +#------------------------------------------------------------ +# ATmega32 +#------------------------------------------------------------ + +part + id = "m32"; + desc = "ATmega32"; + has_jtag = yes; + stk500_devcode = 0x91; + avr910_devcode = 0x72; + signature = 0x1e 0x95 0x02; + chip_erase_delay = 9000; + pagel = 0xd7; + bs2 = 0xa0; + reset = dedicated; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 6; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + allowfullpagebitstream = yes; + + ocdrev = 2; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ + size = 1024; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x04; + delay = 10; + blocksize = 64; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 32768; + page_size = 128; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x21; + delay = 6; + blocksize = 64; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "lock" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 4; + read = "0 0 1 1 1 0 0 0 0 0 x x x x x x", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega161 +#------------------------------------------------------------ + +part + id = "m161"; + desc = "ATmega161"; + stk500_devcode = 0x80; + avr910_devcode = 0x60; + signature = 0x1e 0x94 0x01; + chip_erase_delay = 28000; + pagel = 0xd7; + bs2 = 0xa0; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 30; + programfusepulsewidth = 0; + programfusepolltimeout = 2; + programlockpulsewidth = 0; + programlockpolltimeout = 2; + + memory "eeprom" + size = 512; + min_write_delay = 3400; + max_write_delay = 3400; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 5; + blocksize = 128; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 16384; + page_size = 128; + num_pages = 128; + min_write_delay = 14000; + max_write_delay = 14000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " x x x a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x21; + delay = 16; + blocksize = 128; + readsize = 256; + ; + + memory "fuse" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 0 0 0 0 x x x x x x x x", + "x x x x x x x x x o x o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 x x x x x", + "x x x x x x x x 1 i 1 i i i i i"; + ; + + memory "lock" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + + +#------------------------------------------------------------ +# ATmega8 +#------------------------------------------------------------ + +part + id = "m8"; + desc = "ATmega8"; + stk500_devcode = 0x70; + avr910_devcode = 0x76; + signature = 0x1e 0x93 0x07; + pagel = 0xd7; + bs2 = 0xc2; + chip_erase_delay = 10000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 2; + resetdelayus = 0; + hvleavestabdelay = 15; + resetdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "eeprom" + size = 512; + page_size = 4; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 20; + blocksize = 128; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 8192; + page_size = 64; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 0 x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 0 x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x21; + delay = 10; + blocksize = 64; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "lock" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "calibration" + size = 4; + read = "0 0 1 1 1 0 0 0 0 0 x x x x x x", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + + + +#------------------------------------------------------------ +# ATmega8515 +#------------------------------------------------------------ + +part + id = "m8515"; + desc = "ATmega8515"; + stk500_devcode = 0x63; + avr910_devcode = 0x3A; + signature = 0x1e 0x93 0x06; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 6; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "eeprom" + size = 512; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 20; + blocksize = 128; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 8192; + page_size = 64; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 0 x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 0 x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x21; + delay = 6; + blocksize = 64; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "lock" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "calibration" + size = 4; + read = "0 0 1 1 1 0 0 0 0 0 x x x x x x", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + + + + +#------------------------------------------------------------ +# ATmega8535 +#------------------------------------------------------------ + +part + id = "m8535"; + desc = "ATmega8535"; + stk500_devcode = 0x64; + avr910_devcode = 0x69; + signature = 0x1e 0x93 0x08; + pagel = 0xd7; + bs2 = 0xa0; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 6; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "eeprom" + size = 512; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 20; + blocksize = 128; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 8192; + page_size = 64; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 0 x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 0 x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x21; + delay = 6; + blocksize = 64; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "lock" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "calibration" + size = 4; + read = "0 0 1 1 1 0 0 0 0 0 x x x x x x", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + + +#------------------------------------------------------------ +# ATtiny26 +#------------------------------------------------------------ + +part + id = "t26"; + desc = "ATtiny26"; + stk500_devcode = 0x21; + avr910_devcode = 0x5e; + signature = 0x1e 0x91 0x09; + pagel = 0xb3; + bs2 = 0xb2; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0xC4, 0xE4, 0xC4, 0xE4, 0xCC, 0xEC, 0xCC, 0xEC, + 0xD4, 0xF4, 0xD4, 0xF4, 0xDC, 0xFC, 0xDC, 0xFC, + 0xC8, 0xE8, 0xD8, 0xF8, 0x4C, 0x6C, 0x5C, 0x7C, + 0xEC, 0xBC, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 2; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "eeprom" + size = 128; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 x x x x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 x x x x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 10; + blocksize = 64; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 2048; + page_size = 32; + num_pages = 64; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x x x x a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x x x x a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 x x x x", + " x x x x x x x x"; + + mode = 0x21; + delay = 6; + blocksize = 16; + readsize = 256; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x x o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 1 i i", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x x x x i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x x x x o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 4; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + +; + + +#------------------------------------------------------------ +# ATtiny261 +#------------------------------------------------------------ +# Close to ATtiny26 + +part + id = "t261"; + desc = "ATtiny261"; + has_debugwire = yes; + flash_instr = 0xB4, 0x00, 0x10; + eeprom_instr = 0xBB, 0xFF, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D, + 0xBC, 0x00, 0xB4, 0x00, 0xBA, 0x0D, 0xBB, 0xBC, + 0x99, 0xE1, 0xBB, 0xAC; +# stk500_devcode = 0x21; +# avr910_devcode = 0x5e; + signature = 0x1e 0x91 0x0c; + pagel = 0xb3; + bs2 = 0xb2; + chip_erase_delay = 4000; + + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0xC4, 0xE4, 0xC4, 0xE4, 0xCC, 0xEC, 0xCC, 0xEC, + 0xD4, 0xF4, 0xD4, 0xF4, 0xDC, 0xFC, 0xDC, 0xFC, + 0xC8, 0xE8, 0xD8, 0xF8, 0x4C, 0x6C, 0x5C, 0x7C, + 0xEC, 0xBC, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 2; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + ocdrev = 1; + + memory "eeprom" + paged = no; + size = 128; + page_size = 4; + num_pages = 32; + min_write_delay = 4000; + max_write_delay = 4000; + readback_p1 = 0xff; + readback_p2 = 0xff; + + read = "1 0 1 0 0 0 0 0 x x x x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 x x x x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " x a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 2048; + page_size = 32; + num_pages = 64; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x x x x a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x x x x a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 32; + readsize = 256; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x x o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 1 i i", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 4500; + max_write_delay = 4500; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 4500; + max_write_delay = 4500; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 4500; + max_write_delay = 4500; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x x x x x x x x o"; + min_write_delay = 4500; + max_write_delay = 4500; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + +; + + +#------------------------------------------------------------ +# ATtiny461 +#------------------------------------------------------------ +# Close to ATtiny261 + +part + id = "t461"; + desc = "ATtiny461"; + has_debugwire = yes; + flash_instr = 0xB4, 0x00, 0x10; + eeprom_instr = 0xBB, 0xFF, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D, + 0xBC, 0x00, 0xB4, 0x00, 0xBA, 0x0D, 0xBB, 0xBC, + 0x99, 0xE1, 0xBB, 0xAC; +# stk500_devcode = 0x21; +# avr910_devcode = 0x5e; + signature = 0x1e 0x92 0x08; + pagel = 0xb3; + bs2 = 0xb2; + chip_erase_delay = 4000; + + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0xC4, 0xE4, 0xC4, 0xE4, 0xCC, 0xEC, 0xCC, 0xEC, + 0xD4, 0xF4, 0xD4, 0xF4, 0xDC, 0xFC, 0xDC, 0xFC, + 0xC8, 0xE8, 0xD8, 0xF8, 0x4C, 0x6C, 0x5C, 0x7C, + 0xEC, 0xBC, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 2; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + ocdrev = 1; + + memory "eeprom" + paged = no; + size = 256; + page_size = 4; + num_pages = 64; + min_write_delay = 4000; + max_write_delay = 4000; + readback_p1 = 0xff; + readback_p2 = 0xff; + + read = " 1 0 1 0 0 0 0 0 x x x x x x x x", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0 x x x x x x x x", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 4096; + page_size = 64; + num_pages = 64; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 64; + readsize = 256; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x x o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 1 i i", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 4500; + max_write_delay = 4500; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 4500; + max_write_delay = 4500; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 4500; + max_write_delay = 4500; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x x x x x x x x o"; + min_write_delay = 4500; + max_write_delay = 4500; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + +; + + +#------------------------------------------------------------ +# ATtiny861 +#------------------------------------------------------------ +# Close to ATtiny461 + +part + id = "t861"; + desc = "ATtiny861"; + has_debugwire = yes; + flash_instr = 0xB4, 0x00, 0x10; + eeprom_instr = 0xBB, 0xFF, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D, + 0xBC, 0x00, 0xB4, 0x00, 0xBA, 0x0D, 0xBB, 0xBC, + 0x99, 0xE1, 0xBB, 0xAC; +# stk500_devcode = 0x21; +# avr910_devcode = 0x5e; + signature = 0x1e 0x93 0x0d; + pagel = 0xb3; + bs2 = 0xb2; + chip_erase_delay = 4000; + + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0xC4, 0xE4, 0xC4, 0xE4, 0xCC, 0xEC, 0xCC, 0xEC, + 0xD4, 0xF4, 0xD4, 0xF4, 0xDC, 0xFC, 0xDC, 0xFC, + 0xC8, 0xE8, 0xD8, 0xF8, 0x4C, 0x6C, 0x5C, 0x7C, + 0xEC, 0xBC, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 2; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + ocdrev = 1; + + memory "eeprom" + paged = no; + size = 512; + num_pages = 128; + page_size = 4; + min_write_delay = 4000; + max_write_delay = 4000; + readback_p1 = 0xff; + readback_p2 = 0xff; + + read = " 1 0 1 0 0 0 0 0 x x x x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0 x x x x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 8192; + page_size = 64; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 64; + readsize = 256; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x x o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 1 i i", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 4500; + max_write_delay = 4500; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 4500; + max_write_delay = 4500; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 4500; + max_write_delay = 4500; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x x x x x x x x o"; + min_write_delay = 4500; + max_write_delay = 4500; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + +; + + +#------------------------------------------------------------ +# ATmega48 +#------------------------------------------------------------ + +part + id = "m48"; + desc = "ATmega48"; + has_debugwire = yes; + flash_instr = 0xB6, 0x01, 0x11; + eeprom_instr = 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4, 0x00, + 0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB, 0xBF, + 0x99, 0xF9, 0xBB, 0xAF; + stk500_devcode = 0x59; +# avr910_devcode = 0x; + signature = 0x1e 0x92 0x05; + pagel = 0xd7; + bs2 = 0xc2; + chip_erase_delay = 45000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + resetdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + ocdrev = 1; + + memory "eeprom" + paged = no; + page_size = 4; + size = 256; + min_write_delay = 3600; + max_write_delay = 3600; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 x x x x x", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 20; + blocksize = 4; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 4096; + page_size = 64; + num_pages = 64; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0x00; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 64; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "efuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x x x x x x x x o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; + ; + + memory "lock" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega48P +#------------------------------------------------------------ + +part parent "m48" + id = "m48p"; + desc = "ATmega48P"; + signature = 0x1e 0x92 0x0a; + + ocdrev = 1; + ; + +#------------------------------------------------------------ +# ATmega88 +#------------------------------------------------------------ + +part + id = "m88"; + desc = "ATmega88"; + has_debugwire = yes; + flash_instr = 0xB6, 0x01, 0x11; + eeprom_instr = 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4, 0x00, + 0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB, 0xBF, + 0x99, 0xF9, 0xBB, 0xAF; + stk500_devcode = 0x73; +# avr910_devcode = 0x; + signature = 0x1e 0x93 0x0a; + pagel = 0xd7; + bs2 = 0xc2; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + resetdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + ocdrev = 1; + + memory "eeprom" + paged = no; + page_size = 4; + size = 512; + min_write_delay = 3600; + max_write_delay = 3600; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 20; + blocksize = 4; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 8192; + page_size = 64; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 64; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "efuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x x x x x x o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x i i i"; + ; + + memory "lock" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega88P +#------------------------------------------------------------ + +part parent "m88" + id = "m88p"; + desc = "ATmega88P"; + signature = 0x1e 0x93 0x0f; + + ocdrev = 1; + ; + +#------------------------------------------------------------ +# ATmega168 +#------------------------------------------------------------ + +part + id = "m168"; + desc = "ATmega168"; + has_debugwire = yes; + flash_instr = 0xB6, 0x01, 0x11; + eeprom_instr = 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4, 0x00, + 0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB, 0xBF, + 0x99, 0xF9, 0xBB, 0xAF; + stk500_devcode = 0x86; + # avr910_devcode = 0x; + signature = 0x1e 0x94 0x06; + pagel = 0xd7; + bs2 = 0xc2; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + resetdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + ocdrev = 1; + + memory "eeprom" + paged = no; + page_size = 4; + size = 512; + min_write_delay = 3600; + max_write_delay = 3600; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 20; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 16384; + page_size = 128; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 128; + readsize = 256; + + ; + + memory "lfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "efuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x x x x x x o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x i i i"; + ; + + memory "lock" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; +; + +#------------------------------------------------------------ +# ATmega168P +#------------------------------------------------------------ + +part parent "m168" + id = "m168p"; + desc = "ATmega168P"; + signature = 0x1e 0x94 0x0b; + + ocdrev = 1; +; + +#------------------------------------------------------------ +# ATtiny88 +#------------------------------------------------------------ + +part + id = "t88"; + desc = "ATtiny88"; + has_debugwire = yes; + flash_instr = 0xB6, 0x01, 0x11; + eeprom_instr = 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4, 0x00, + 0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB, 0xBF, + 0x99, 0xF9, 0xBB, 0xAF; + stk500_devcode = 0x73; +# avr910_devcode = 0x; + signature = 0x1e 0x93 0x11; + pagel = 0xd7; + bs2 = 0xc2; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + resetdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + ocdrev = 1; + + memory "eeprom" + paged = no; + page_size = 4; + size = 64; + min_write_delay = 3600; + max_write_delay = 3600; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " x a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 20; + blocksize = 4; + readsize = 64; + ; + memory "flash" + paged = yes; + size = 8192; + page_size = 64; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 64; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "efuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x x x x x x o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; + ; + + memory "lock" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega328 +#------------------------------------------------------------ + +part + id = "m328"; + desc = "ATmega328"; + has_debugwire = yes; + flash_instr = 0xB6, 0x01, 0x11; + eeprom_instr = 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4, 0x00, + 0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB, 0xBF, + 0x99, 0xF9, 0xBB, 0xAF; + stk500_devcode = 0x86; + # avr910_devcode = 0x; + signature = 0x1e 0x95 0x14; + pagel = 0xd7; + bs2 = 0xc2; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + resetdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + ocdrev = 1; + + memory "eeprom" + paged = no; + page_size = 4; + size = 1024; + min_write_delay = 3600; + max_write_delay = 3600; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 20; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 32768; + page_size = 128; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 128; + readsize = 256; + + ; + + memory "lfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "efuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x x x x x x o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x i i i"; + ; + + memory "lock" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; +; + +part parent "m328" + id = "m328p"; + desc = "ATmega328P"; + signature = 0x1e 0x95 0x0F; + + ocdrev = 1; +; + +#------------------------------------------------------------ +# ATtiny2313 +#------------------------------------------------------------ + +part + id = "t2313"; + desc = "ATtiny2313"; + has_debugwire = yes; + flash_instr = 0xB2, 0x0F, 0x1F; + eeprom_instr = 0xBB, 0xFE, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D, + 0xBA, 0x0F, 0xB2, 0x0F, 0xBA, 0x0D, 0xBB, 0xBC, + 0x99, 0xE1, 0xBB, 0xAC; + stk500_devcode = 0x23; +## Use the ATtiny26 devcode: + avr910_devcode = 0x5e; + signature = 0x1e 0x91 0x0a; + pagel = 0xD4; + bs2 = 0xD6; + reset = io; + chip_erase_delay = 9000; + + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0E, 0x1E, 0x2E, 0x3E, 0x2E, 0x3E, + 0x4E, 0x5E, 0x4E, 0x5E, 0x6E, 0x7E, 0x6E, 0x7E, + 0x26, 0x36, 0x66, 0x76, 0x2A, 0x3A, 0x6A, 0x7A, + 0x2E, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + ocdrev = 0; + + memory "eeprom" + size = 128; + paged = no; + page_size = 4; + min_write_delay = 4000; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 0 0 0 x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 0 0 0 x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " x a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 4; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 2048; + page_size = 32; + num_pages = 64; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 0 0 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 0 0 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + +# The information in the data sheet of April/2004 is wrong, this works: + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x x a3 a2 a1 a0", + " i i i i i i i i"; + +# The information in the data sheet of April/2004 is wrong, this works: + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x x a3 a2 a1 a0", + " i i i i i i i i"; + +# The information in the data sheet of April/2004 is wrong, this works: + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 0 0 a9 a8", + " a7 a6 a5 a4 x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 32; + readsize = 256; + ; +# ATtiny2313 has Signature Bytes: 0x1E 0x91 0x0A. + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "lock" + size = 1; + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; +# The Tiny2313 has calibration data for both 4 MHz and 8 MHz. +# The information in the data sheet of April/2004 is wrong, this works: + + memory "calibration" + size = 2; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATtiny4313 +#------------------------------------------------------------ + +part + id = "t4313"; + desc = "ATtiny4313"; + has_debugwire = yes; + flash_instr = 0xB2, 0x0F, 0x1F; + eeprom_instr = 0xBB, 0xFE, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D, + 0xBA, 0x0F, 0xB2, 0x0F, 0xBA, 0x0D, 0xBB, 0xBC, + 0x99, 0xE1, 0xBB, 0xAC; + stk500_devcode = 0x23; +## Use the ATtiny26 devcode: + avr910_devcode = 0x5e; + signature = 0x1e 0x92 0x0d; + pagel = 0xD4; + bs2 = 0xD6; + reset = io; + chip_erase_delay = 9000; + + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0E, 0x1E, 0x2E, 0x3E, 0x2E, 0x3E, + 0x4E, 0x5E, 0x4E, 0x5E, 0x6E, 0x7E, 0x6E, 0x7E, + 0x26, 0x36, 0x66, 0x76, 0x2A, 0x3A, 0x6A, 0x7A, + 0x2E, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + ocdrev = 0; + + memory "eeprom" + size = 256; + paged = no; + page_size = 4; + min_write_delay = 4000; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 0 0 0 x x x x x", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 0 0 0 x x x x x", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 4; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 4096; + page_size = 64; + num_pages = 64; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 32; + readsize = 256; + ; +# ATtiny4313 has Signature Bytes: 0x1E 0x92 0x0D. + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "lock" + size = 1; + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 2; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# AT90PWM2 +#------------------------------------------------------------ + +part + id = "pwm2"; + desc = "AT90PWM2"; + has_debugwire = yes; + flash_instr = 0xB6, 0x01, 0x11; + eeprom_instr = 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4, 0x00, + 0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB, 0xBF, + 0x99, 0xF9, 0xBB, 0xAF; + stk500_devcode = 0x65; +## avr910_devcode = ?; + signature = 0x1e 0x93 0x81; + pagel = 0xD8; + bs2 = 0xE2; + reset = io; + chip_erase_delay = 9000; + + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "eeprom" + size = 512; + paged = no; + page_size = 4; + min_write_delay = 4000; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 0 0 0 x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 0 0 0 x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 4; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 8192; + page_size = 64; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 64; + readsize = 256; + ; +# AT90PWM2 has Signature Bytes: 0x1E 0x93 0x81. + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "lock" + size = 1; + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# AT90PWM3 +#------------------------------------------------------------ + +# Completely identical to AT90PWM2 (including the signature!) + +part parent "pwm2" + id = "pwm3"; + desc = "AT90PWM3"; + ; + +#------------------------------------------------------------ +# AT90PWM2B +#------------------------------------------------------------ +# Same as AT90PWM2 but different signature. + +part parent "pwm2" + id = "pwm2b"; + desc = "AT90PWM2B"; + signature = 0x1e 0x93 0x83; + + ocdrev = 1; + ; + +#------------------------------------------------------------ +# AT90PWM3B +#------------------------------------------------------------ + +# Completely identical to AT90PWM2B (including the signature!) + +part parent "pwm2b" + id = "pwm3b"; + desc = "AT90PWM3B"; + + ocdrev = 1; + ; + +#------------------------------------------------------------ +# AT90PWM316 +#------------------------------------------------------------ + +# Similar to AT90PWM3B, but with 16 kiB flash, 512 B EEPROM, and 1024 B SRAM. + +part parent "pwm3b" + id = "pwm316"; + desc = "AT90PWM316"; + signature = 0x1e 0x94 0x83; + + ocdrev = 1; + + memory "flash" + paged = yes; + size = 16384; + page_size = 128; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x21; + delay = 6; + blocksize = 128; + readsize = 256; + ; + ; + +#------------------------------------------------------------ +# ATtiny25 +#------------------------------------------------------------ + +part + id = "t25"; + desc = "ATtiny25"; + has_debugwire = yes; + flash_instr = 0xB4, 0x02, 0x12; + eeprom_instr = 0xBB, 0xFF, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D, + 0xBC, 0x02, 0xB4, 0x02, 0xBA, 0x0D, 0xBB, 0xBC, + 0x99, 0xE1, 0xBB, 0xAC; +## no STK500 devcode in XML file, use the ATtiny45 one + stk500_devcode = 0x14; +## avr910_devcode = ?; +## Try the AT90S2313 devcode: + avr910_devcode = 0x20; + signature = 0x1e 0x91 0x08; + reset = io; + chip_erase_delay = 4500; + + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + hvsp_controlstack = + 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x66, + 0x68, 0x78, 0x68, 0x68, 0x7A, 0x6A, 0x68, 0x78, + 0x78, 0x7D, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10, + 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x00; + hventerstabdelay = 100; + hvspcmdexedelay = 0; + synchcycles = 6; + latchcycles = 1; + togglevtg = 1; + poweroffdelay = 25; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 100; + resetdelay = 25; + chiperasepolltimeout = 40; + chiperasetime = 0; + programfusepolltimeout = 25; + programlockpolltimeout = 25; + + ocdrev = 1; + + memory "eeprom" + size = 128; + paged = no; + page_size = 4; + min_write_delay = 4000; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 0 0 0 x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 0 0 0 x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " x a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 4; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 2048; + page_size = 32; + num_pages = 64; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 0 0 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 0 0 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x x a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x x a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 0 0 a9 a8", + " a7 a6 a5 a4 x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 32; + readsize = 256; + ; +# ATtiny25 has Signature Bytes: 0x1E 0x91 0x08. + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "lock" + size = 1; + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 2; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATtiny45 +#------------------------------------------------------------ + +part + id = "t45"; + desc = "ATtiny45"; + has_debugwire = yes; + flash_instr = 0xB4, 0x02, 0x12; + eeprom_instr = 0xBB, 0xFF, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D, + 0xBC, 0x02, 0xB4, 0x02, 0xBA, 0x0D, 0xBB, 0xBC, + 0x99, 0xE1, 0xBB, 0xAC; + stk500_devcode = 0x14; +## avr910_devcode = ?; +## Try the AT90S2313 devcode: + avr910_devcode = 0x20; + signature = 0x1e 0x92 0x06; + reset = io; + chip_erase_delay = 4500; + + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + hvsp_controlstack = + 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x66, + 0x68, 0x78, 0x68, 0x68, 0x7A, 0x6A, 0x68, 0x78, + 0x78, 0x7D, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10, + 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + hvspcmdexedelay = 0; + synchcycles = 6; + latchcycles = 1; + togglevtg = 1; + poweroffdelay = 25; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 100; + resetdelay = 25; + chiperasepolltimeout = 40; + chiperasetime = 0; + programfusepolltimeout = 25; + programlockpolltimeout = 25; + + ocdrev = 1; + + memory "eeprom" + size = 256; + page_size = 4; + min_write_delay = 4000; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 0 0 0 x x x x x", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 0 0 0 x x x x x", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 4; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 4096; + page_size = 64; + num_pages = 64; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 32; + readsize = 256; + ; +# ATtiny45 has Signature Bytes: 0x1E 0x92 0x08. (Data sheet 2586C-AVR-06/05 (doc2586.pdf) indicates otherwise!) + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "lock" + size = 1; + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 2; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATtiny85 +#------------------------------------------------------------ + +part + id = "t85"; + desc = "ATtiny85"; + has_debugwire = yes; + flash_instr = 0xB4, 0x02, 0x12; + eeprom_instr = 0xBB, 0xFF, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D, + 0xBC, 0x02, 0xB4, 0x02, 0xBA, 0x0D, 0xBB, 0xBC, + 0x99, 0xE1, 0xBB, 0xAC; +## no STK500 devcode in XML file, use the ATtiny45 one + stk500_devcode = 0x14; +## avr910_devcode = ?; +## Try the AT90S2313 devcode: + avr910_devcode = 0x20; + signature = 0x1e 0x93 0x0b; + reset = io; + chip_erase_delay = 400000; + + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + hvsp_controlstack = + 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x66, + 0x68, 0x78, 0x68, 0x68, 0x7A, 0x6A, 0x68, 0x78, + 0x78, 0x7D, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10, + 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x00; + hventerstabdelay = 100; + hvspcmdexedelay = 0; + synchcycles = 6; + latchcycles = 1; + togglevtg = 1; + poweroffdelay = 25; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 100; + resetdelay = 25; + chiperasepolltimeout = 40; + chiperasetime = 0; + programfusepolltimeout = 25; + programlockpolltimeout = 25; + + ocdrev = 1; + + memory "eeprom" + size = 512; + paged = no; + page_size = 4; + min_write_delay = 4000; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 0 0 0 x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 0 0 0 x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 12; + blocksize = 4; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 8192; + page_size = 64; + num_pages = 128; + min_write_delay = 30000; + max_write_delay = 30000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 32; + readsize = 256; + ; +# ATtiny85 has Signature Bytes: 0x1E 0x93 0x08. + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "lock" + size = 1; + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 2; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega640 +#------------------------------------------------------------ +# Almost same as ATmega1280, except for different memory sizes + +part + id = "m640"; + desc = "ATmega640"; + signature = 0x1e 0x96 0x08; + has_jtag = yes; +# stk500_devcode = 0xB2; +# avr910_devcode = 0x43; + chip_erase_delay = 9000; + pagel = 0xD7; + bs2 = 0xA0; + reset = dedicated; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + rampz = 0x3b; + allowfullpagebitstream = no; + + ocdrev = 3; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 4096; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0x00; + readback_p2 = 0x00; + read = " 1 0 1 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 65536; + page_size = 256; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0x00; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 256; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega1280 +#------------------------------------------------------------ + +part + id = "m1280"; + desc = "ATmega1280"; + signature = 0x1e 0x97 0x03; + has_jtag = yes; +# stk500_devcode = 0xB2; +# avr910_devcode = 0x43; + chip_erase_delay = 9000; + pagel = 0xD7; + bs2 = 0xA0; + reset = dedicated; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + rampz = 0x3b; + allowfullpagebitstream = no; + + ocdrev = 3; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 4096; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0x00; + readback_p2 = 0x00; + read = " 1 0 1 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 131072; + page_size = 256; + num_pages = 512; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0x00; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 256; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega1281 +#------------------------------------------------------------ +# Identical to ATmega1280 + +part parent "m1280" + id = "m1281"; + desc = "ATmega1281"; + signature = 0x1e 0x97 0x04; + + ocdrev = 3; + ; + +#------------------------------------------------------------ +# ATmega2560 +#------------------------------------------------------------ + +part + id = "m2560"; + desc = "ATmega2560"; + signature = 0x1e 0x98 0x01; + has_jtag = yes; +# stk500_devcode = 0xB2; +# avr910_devcode = 0x43; + chip_erase_delay = 9000; + pagel = 0xD7; + bs2 = 0xA0; + reset = dedicated; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + rampz = 0x3b; + allowfullpagebitstream = no; + + ocdrev = 4; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 4096; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0x00; + readback_p2 = 0x00; + read = " 1 0 1 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 262144; + page_size = 256; + num_pages = 1024; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0x00; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + load_ext_addr = " 0 1 0 0 1 1 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 0 a16", + " 0 0 0 0 0 0 0 0"; + + mode = 0x41; + delay = 10; + blocksize = 256; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega2561 +#------------------------------------------------------------ + +part parent "m2560" + id = "m2561"; + desc = "ATmega2561"; + signature = 0x1e 0x98 0x02; + + ocdrev = 4; + ; + +#------------------------------------------------------------ +# ATmega128RFA1 +#------------------------------------------------------------ +# Identical to ATmega2561 but half the ROM + +part parent "m2561" + id = "m128rfa1"; + desc = "ATmega128RFA1"; + signature = 0x1e 0xa7 0x01; + chip_erase_delay = 55000; + bs2 = 0xE2; + + ocdrev = 3; + + memory "flash" + paged = yes; + size = 131072; + page_size = 256; + num_pages = 512; + min_write_delay = 50000; + max_write_delay = 50000; + readback_p1 = 0x00; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 20; + blocksize = 256; + readsize = 256; + ; + ; + +#------------------------------------------------------------ +# ATmega256RFR2 +#------------------------------------------------------------ + +part parent "m2561" + id = "m256rfr2"; + desc = "ATmega256RFR2"; + signature = 0x1e 0xa8 0x02; + chip_erase_delay = 55000; + bs2 = 0xE2; + + + ocdrev = 4; + ; + +#------------------------------------------------------------ +# ATmega128RFR2 +#------------------------------------------------------------ + +part parent "m128rfa1" + id = "m128rfr2"; + desc = "ATmega128RFR2"; + signature = 0x1e 0xa7 0x02; + + + ocdrev = 3; + ; + +#------------------------------------------------------------ +# ATmega64RFR2 +#------------------------------------------------------------ + +part parent "m128rfa1" + id = "m64rfr2"; + desc = "ATmega64RFR2"; + signature = 0x1e 0xa6 0x02; + + + ocdrev = 3; + + memory "flash" + paged = yes; + size = 65536; + page_size = 256; + num_pages = 256; + min_write_delay = 50000; + max_write_delay = 50000; + readback_p1 = 0x00; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 20; + blocksize = 256; + readsize = 256; + ; + ; + +#------------------------------------------------------------ +# ATmega2564RFR2 +#------------------------------------------------------------ + +part parent "m256rfr2" + id = "m2564rfr2"; + desc = "ATmega2564RFR2"; + signature = 0x1e 0xa8 0x03; + ; + +#------------------------------------------------------------ +# ATmega1284RFR2 +#------------------------------------------------------------ + +part parent "m128rfr2" + id = "m1284rfr2"; + desc = "ATmega1284RFR2"; + signature = 0x1e 0xa7 0x03; + ; + +#------------------------------------------------------------ +# ATmega644RFR2 +#------------------------------------------------------------ + +part parent "m64rfr2" + id = "m644rfr2"; + desc = "ATmega644RFR2"; + signature = 0x1e 0xa6 0x03; + ; + +#------------------------------------------------------------ +# ATtiny24 +#------------------------------------------------------------ + +part + id = "t24"; + desc = "ATtiny24"; + has_debugwire = yes; + flash_instr = 0xB4, 0x07, 0x17; + eeprom_instr = 0xBB, 0xFF, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D, + 0xBC, 0x07, 0xB4, 0x07, 0xBA, 0x0D, 0xBB, 0xBC, + 0x99, 0xE1, 0xBB, 0xAC; +## no STK500 devcode in XML file, use the ATtiny45 one + stk500_devcode = 0x14; +## avr910_devcode = ?; +## Try the AT90S2313 devcode: + avr910_devcode = 0x20; + signature = 0x1e 0x91 0x0b; + reset = io; + chip_erase_delay = 4500; + + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + hvsp_controlstack = + 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x66, + 0x68, 0x78, 0x68, 0x68, 0x7A, 0x6A, 0x68, 0x78, + 0x78, 0x7D, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10, + 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x0F; + hventerstabdelay = 100; + hvspcmdexedelay = 0; + synchcycles = 6; + latchcycles = 1; + togglevtg = 1; + poweroffdelay = 25; + resetdelayms = 0; + resetdelayus = 70; + hvleavestabdelay = 100; + resetdelay = 25; + chiperasepolltimeout = 40; + chiperasetime = 0; + programfusepolltimeout = 25; + programlockpolltimeout = 25; + + ocdrev = 1; + + memory "eeprom" + size = 128; + paged = no; + page_size = 4; + min_write_delay = 4000; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 0 0 0 x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 0 0 0 x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " x a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 4; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 2048; + page_size = 32; + num_pages = 64; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 0 0 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 0 0 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x x a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x x a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 0 0 a9 a8", + " a7 a6 a5 a4 x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 32; + readsize = 256; + ; +# ATtiny24 has Signature Bytes: 0x1E 0x91 0x0B. + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "lock" + size = 1; + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x x x x x x x i i"; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATtiny44 +#------------------------------------------------------------ + +part + id = "t44"; + desc = "ATtiny44"; + has_debugwire = yes; + flash_instr = 0xB4, 0x07, 0x17; + eeprom_instr = 0xBB, 0xFF, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D, + 0xBC, 0x07, 0xB4, 0x07, 0xBA, 0x0D, 0xBB, 0xBC, + 0x99, 0xE1, 0xBB, 0xAC; +## no STK500 devcode in XML file, use the ATtiny45 one + stk500_devcode = 0x14; +## avr910_devcode = ?; +## Try the AT90S2313 devcode: + avr910_devcode = 0x20; + signature = 0x1e 0x92 0x07; + reset = io; + chip_erase_delay = 4500; + + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + hvsp_controlstack = + 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x66, + 0x68, 0x78, 0x68, 0x68, 0x7A, 0x6A, 0x68, 0x78, + 0x78, 0x7D, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10, + 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x0F; + hventerstabdelay = 100; + hvspcmdexedelay = 0; + synchcycles = 6; + latchcycles = 1; + togglevtg = 1; + poweroffdelay = 25; + resetdelayms = 0; + resetdelayus = 70; + hvleavestabdelay = 100; + resetdelay = 25; + chiperasepolltimeout = 40; + chiperasetime = 0; + programfusepolltimeout = 25; + programlockpolltimeout = 25; + + ocdrev = 1; + + memory "eeprom" + size = 256; + paged = no; + page_size = 4; + min_write_delay = 4000; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 0 0 0 x x x x x", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 0 0 0 x x x x x", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " x a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 4; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 4096; + page_size = 64; + num_pages = 64; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 32; + readsize = 256; + ; +# ATtiny44 has Signature Bytes: 0x1E 0x92 0x07. + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "lock" + size = 1; + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x x x x x x x i i"; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATtiny84 +#------------------------------------------------------------ + +part + id = "t84"; + desc = "ATtiny84"; + has_debugwire = yes; + flash_instr = 0xB4, 0x07, 0x17; + eeprom_instr = 0xBB, 0xFF, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D, + 0xBC, 0x07, 0xB4, 0x07, 0xBA, 0x0D, 0xBB, 0xBC, + 0x99, 0xE1, 0xBB, 0xAC; +## no STK500 devcode in XML file, use the ATtiny45 one + stk500_devcode = 0x14; +## avr910_devcode = ?; +## Try the AT90S2313 devcode: + avr910_devcode = 0x20; + signature = 0x1e 0x93 0x0c; + reset = io; + chip_erase_delay = 4500; + + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + hvsp_controlstack = + 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x66, + 0x68, 0x78, 0x68, 0x68, 0x7A, 0x6A, 0x68, 0x78, + 0x78, 0x7D, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10, + 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x0F; + hventerstabdelay = 100; + hvspcmdexedelay = 0; + synchcycles = 6; + latchcycles = 1; + togglevtg = 1; + poweroffdelay = 25; + resetdelayms = 0; + resetdelayus = 70; + hvleavestabdelay = 100; + resetdelay = 25; + chiperasepolltimeout = 40; + chiperasetime = 0; + programfusepolltimeout = 25; + programlockpolltimeout = 25; + + ocdrev = 1; + + memory "eeprom" + size = 512; + paged = no; + page_size = 4; + min_write_delay = 4000; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 0 0 0 x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 0 0 0 x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " x a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 4; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 8192; + page_size = 64; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 32; + readsize = 256; + ; +# ATtiny84 has Signature Bytes: 0x1E 0x93 0x0C. + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + + memory "lock" + size = 1; + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x x x x x x x i i"; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATtiny43U +#------------------------------------------------------------ + +part + id = "t43u"; + desc = "ATtiny43u"; + has_debugwire = yes; + flash_instr = 0xB4, 0x07, 0x17; + eeprom_instr = 0xBB, 0xFF, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D, + 0xBC, 0x07, 0xB4, 0x07, 0xBA, 0x0D, 0xBB, 0xBC, + 0x99, 0xE1, 0xBB, 0xAC; + stk500_devcode = 0x14; +## avr910_devcode = ?; +## Try the AT90S2313 devcode: + avr910_devcode = 0x20; + signature = 0x1e 0x92 0x0C; + reset = io; + chip_erase_delay = 1000; + + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + pp_controlstack = 0x0E, 0x1E, 0x0E, 0x1E, 0x2E, 0x3E, 0x2E, 0x3E, 0x4E, 0x5E, + 0x4E, 0x5E, 0x6E, 0x7E, 0x6E, 0x7E, 0x06, 0x16, 0x46, 0x56, + 0x0A, 0x1A, 0x4A, 0x5A, 0x1E, 0x7C, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + hvspcmdexedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 20; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + resetdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + memory "eeprom" + size = 64; + paged = yes; + page_size = 4; + num_pages = 16; + min_write_delay = 4000; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 0 0 0 x x x x x", + "0 0 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 0 0 0 x x x x x", + "0 0 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " 0 0 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 5; + blocksize = 4; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 4096; + page_size = 64; + num_pages = 64; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 64; + readsize = 256; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "lock" + size = 1; + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 4500; + max_write_delay = 4500; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 4500; + max_write_delay = 4500; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 4500; + max_write_delay = 4500; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 4500; + max_write_delay = 4500; + ; + + memory "calibration" + size = 2; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 a0 o o o o o o o o"; + ; +; + +#------------------------------------------------------------ +# ATmega32u4 +#------------------------------------------------------------ + +part + id = "m32u4"; + desc = "ATmega32U4"; + signature = 0x1e 0x95 0x87; + has_jtag = yes; +# stk500_devcode = 0xB2; +# avr910_devcode = 0x43; + chip_erase_delay = 9000; + pagel = 0xD7; + bs2 = 0xA0; + reset = dedicated; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + rampz = 0x3b; + allowfullpagebitstream = no; + + ocdrev = 3; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ + size = 1024; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0x00; + readback_p2 = 0x00; + read = " 1 0 1 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 20; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 32768; + page_size = 128; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0x00; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 128; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# AT90USB646 +#------------------------------------------------------------ + +part + id = "usb646"; + desc = "AT90USB646"; + signature = 0x1e 0x96 0x82; + has_jtag = yes; +# stk500_devcode = 0xB2; +# avr910_devcode = 0x43; + chip_erase_delay = 9000; + pagel = 0xD7; + bs2 = 0xA0; + reset = dedicated; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + rampz = 0x3b; + allowfullpagebitstream = no; + + ocdrev = 3; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 2048; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0x00; + readback_p2 = 0x00; + read = " 1 0 1 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 65536; + page_size = 256; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0x00; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 256; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# AT90USB647 +#------------------------------------------------------------ +# identical to AT90USB646 + +part parent "usb646" + id = "usb647"; + desc = "AT90USB647"; + signature = 0x1e 0x96 0x82; + + ocdrev = 3; + ; + +#------------------------------------------------------------ +# AT90USB1286 +#------------------------------------------------------------ + +part + id = "usb1286"; + desc = "AT90USB1286"; + signature = 0x1e 0x97 0x82; + has_jtag = yes; +# stk500_devcode = 0xB2; +# avr910_devcode = 0x43; + chip_erase_delay = 9000; + pagel = 0xD7; + bs2 = 0xA0; + reset = dedicated; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + rampz = 0x3b; + allowfullpagebitstream = no; + + ocdrev = 3; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 4096; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0x00; + readback_p2 = 0x00; + read = " 1 0 1 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 131072; + page_size = 256; + num_pages = 512; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0x00; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 256; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# AT90USB1287 +#------------------------------------------------------------ +# identical to AT90USB1286 + +part parent "usb1286" + id = "usb1287"; + desc = "AT90USB1287"; + signature = 0x1e 0x97 0x82; + + ocdrev = 3; + ; + +#------------------------------------------------------------ +# AT90USB162 +#------------------------------------------------------------ + +part + id = "usb162"; + desc = "AT90USB162"; + has_jtag = no; + has_debugwire = yes; + signature = 0x1e 0x94 0x82; + chip_erase_delay = 9000; + reset = io; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + pagel = 0xD7; + bs2 = 0xC6; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + ocdrev = 1; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ + size = 512; + num_pages = 128; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0x00; + readback_p2 = 0x00; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 20; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 16384; + page_size = 128; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0x00; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 128; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# AT90USB82 +#------------------------------------------------------------ +# Changes against AT90USB162 (beside IDs) +# memory "flash" +# size = 8192; +# num_pages = 64; + +part + id = "usb82"; + desc = "AT90USB82"; + has_jtag = no; + has_debugwire = yes; + signature = 0x1e 0x93 0x82; + chip_erase_delay = 9000; + reset = io; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + pagel = 0xD7; + bs2 = 0xC6; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + ocdrev = 1; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ + size = 512; + num_pages = 128; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0x00; + readback_p2 = 0x00; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 20; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 8192; + page_size = 128; + num_pages = 64; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0x00; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 128; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega32U2 +#------------------------------------------------------------ +# Changes against AT90USB162 (beside IDs) +# memory "flash" +# size = 32768; +# num_pages = 256; +# memory "eeprom" +# size = 1024; +# num_pages = 256; +part + id = "m32u2"; + desc = "ATmega32U2"; + has_jtag = no; + has_debugwire = yes; + signature = 0x1e 0x95 0x8a; + chip_erase_delay = 9000; + reset = io; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + pagel = 0xD7; + bs2 = 0xC6; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + ocdrev = 1; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ + size = 1024; + num_pages = 256; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0x00; + readback_p2 = 0x00; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 20; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 32768; + page_size = 128; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0x00; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 128; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; +#------------------------------------------------------------ +# ATmega16U2 +#------------------------------------------------------------ +# Changes against ATmega32U2 (beside IDs) +# memory "flash" +# size = 16384; +# num_pages = 128; +# memory "eeprom" +# size = 512; +# num_pages = 128; +part + id = "m16u2"; + desc = "ATmega16U2"; + has_jtag = no; + has_debugwire = yes; + signature = 0x1e 0x94 0x89; + chip_erase_delay = 9000; + reset = io; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + pagel = 0xD7; + bs2 = 0xC6; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + ocdrev = 1; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ + size = 512; + num_pages = 128; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0x00; + readback_p2 = 0x00; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 20; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 16384; + page_size = 128; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0x00; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 128; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega8U2 +#------------------------------------------------------------ +# Changes against ATmega16U2 (beside IDs) +# memory "flash" +# size = 8192; +# page_size = 64; +# blocksize = 64; + +part + id = "m8u2"; + desc = "ATmega8U2"; + has_jtag = no; + has_debugwire = yes; + signature = 0x1e 0x93 0x89; + chip_erase_delay = 9000; + reset = io; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + pagel = 0xD7; + bs2 = 0xC6; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + ocdrev = 1; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ + size = 512; + num_pages = 128; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0x00; + readback_p2 = 0x00; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 20; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 8192; + page_size = 64; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0x00; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 64; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; +#------------------------------------------------------------ +# ATmega325 +#------------------------------------------------------------ + +part + id = "m325"; + desc = "ATmega325"; + signature = 0x1e 0x95 0x05; + has_jtag = yes; +# stk500_devcode = 0x??; # No STK500v1 support? +# avr910_devcode = 0x??; # Try the ATmega16 one + avr910_devcode = 0x74; + pagel = 0xd7; + bs2 = 0xa0; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0"; + + chip_erase = "1 0 1 0 1 1 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"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + allowfullpagebitstream = no; + + ocdrev = 3; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ + size = 1024; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 0 0 0 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 0 0 0 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 0 0 0 0 a9 a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 32768; + page_size = 128; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 0 0 0 0 0", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 0 0 0 0 0", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 128; + readsize = 256; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 0 0 0 0 0", + "0 0 0 0 0 0 0 0 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "0 0 0 0 0 0 0 0 i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "0 0 0 0 0 0 0 0 i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "0 0 0 0 0 0 0 0 1 1 1 1 1 i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 1; + + read = "0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega645 +#------------------------------------------------------------ + +part + id = "m645"; + desc = "ATmega645"; + signature = 0x1E 0x96 0x05; + has_jtag = yes; +# stk500_devcode = 0x??; # No STK500v1 support? +# avr910_devcode = 0x??; # Try the ATmega16 one + avr910_devcode = 0x74; + pagel = 0xd7; + bs2 = 0xa0; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0"; + + chip_erase = "1 0 1 0 1 1 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"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + allowfullpagebitstream = no; + + ocdrev = 3; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 2048; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 65536; + page_size = 256; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 0 0 0 0 0", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 0 0 0 0 0", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " 0 0 0 0 0 0 0 0"; + + mode = 0x41; + delay = 10; + blocksize = 128; + readsize = 256; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 0 0 0 0 0", + "0 0 0 0 0 0 0 0 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "0 0 0 0 0 0 0 0 i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "0 0 0 0 0 0 0 0 i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "0 0 0 0 0 0 0 0 1 1 1 1 1 i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 1; + + read = "0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega3250 +#------------------------------------------------------------ + +part parent "m325" + id = "m3250"; + desc = "ATmega3250"; + signature = 0x1E 0x95 0x06; + + ocdrev = 3; + ; + +#------------------------------------------------------------ +# ATmega6450 +#------------------------------------------------------------ + +part parent "m645" + id = "m6450"; + desc = "ATmega6450"; + signature = 0x1E 0x96 0x06; + + ocdrev = 3; + ; + +#------------------------------------------------------------ +# AVR XMEGA family common values +#------------------------------------------------------------ + +part + id = ".xmega"; + desc = "AVR XMEGA family common values"; + has_pdi = yes; + nvm_base = 0x01c0; + mcu_base = 0x0090; + + memory "signature" + size = 3; + offset = 0x1000090; + ; + + memory "prodsig" + size = 0x32; + offset = 0x8e0200; + page_size = 0x32; + readsize = 0x32; + ; + + memory "fuse1" + size = 1; + offset = 0x8f0021; + ; + + memory "fuse2" + size = 1; + offset = 0x8f0022; + ; + + memory "fuse4" + size = 1; + offset = 0x8f0024; + ; + + memory "fuse5" + size = 1; + offset = 0x8f0025; + ; + + memory "lock" + size = 1; + offset = 0x8f0027; + ; + + memory "data" + # SRAM, only used to supply the offset + offset = 0x1000000; + ; +; + +#------------------------------------------------------------ +# ATxmega16A4U +#------------------------------------------------------------ + +part parent ".xmega" + id = "x16a4u"; + desc = "ATxmega16A4U"; + signature = 0x1e 0x94 0x41; + + memory "eeprom" + size = 0x400; + offset = 0x8c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x4000; + offset = 0x800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "apptable" + size = 0x1000; + offset = 0x803000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "boot" + size = 0x1000; + offset = 0x804000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "flash" + size = 0x5000; + offset = 0x800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "usersig" + size = 0x100; + offset = 0x8e0400; + page_size = 0x100; + readsize = 0x100; + ; +; + +#------------------------------------------------------------ +# ATxmega16C4 +#------------------------------------------------------------ + +part parent "x16a4u" + id = "x16c4"; + desc = "ATxmega16C4"; + signature = 0x1e 0x95 0x44; +; + +#------------------------------------------------------------ +# ATxmega16D4 +#------------------------------------------------------------ + +part parent "x16a4u" + id = "x16d4"; + desc = "ATxmega16D4"; + signature = 0x1e 0x94 0x42; +; + +#------------------------------------------------------------ +# ATxmega16A4 +#------------------------------------------------------------ + +part parent "x16a4u" + id = "x16a4"; + desc = "ATxmega16A4"; + signature = 0x1e 0x94 0x41; + has_jtag = yes; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; +; + +#------------------------------------------------------------ +# ATxmega32A4U +#------------------------------------------------------------ + +part parent ".xmega" + id = "x32a4u"; + desc = "ATxmega32A4U"; + signature = 0x1e 0x95 0x41; + + memory "eeprom" + size = 0x400; + offset = 0x8c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x8000; + offset = 0x800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "apptable" + size = 0x1000; + offset = 0x807000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "boot" + size = 0x1000; + offset = 0x808000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "flash" + size = 0x9000; + offset = 0x800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "usersig" + size = 0x100; + offset = 0x8e0400; + page_size = 0x100; + readsize = 0x100; + ; +; + +#------------------------------------------------------------ +# ATxmega32C4 +#------------------------------------------------------------ + +part parent "x32a4u" + id = "x32c4"; + desc = "ATxmega32C4"; + signature = 0x1e 0x94 0x43; +; + +#------------------------------------------------------------ +# ATxmega32D4 +#------------------------------------------------------------ + +part parent "x32a4u" + id = "x32d4"; + desc = "ATxmega32D4"; + signature = 0x1e 0x95 0x42; +; + +#------------------------------------------------------------ +# ATxmega32A4 +#------------------------------------------------------------ + +part parent "x32a4u" + id = "x32a4"; + desc = "ATxmega32A4"; + signature = 0x1e 0x95 0x41; + has_jtag = yes; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; +; + +#------------------------------------------------------------ +# ATxmega64A4U +#------------------------------------------------------------ + +part parent ".xmega" + id = "x64a4u"; + desc = "ATxmega64A4U"; + signature = 0x1e 0x96 0x46; + + memory "eeprom" + size = 0x800; + offset = 0x8c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x10000; + offset = 0x800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "apptable" + size = 0x1000; + offset = 0x80f000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "boot" + size = 0x1000; + offset = 0x810000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "flash" + size = 0x11000; + offset = 0x800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "usersig" + size = 0x100; + offset = 0x8e0400; + page_size = 0x100; + readsize = 0x100; + ; +; + +#------------------------------------------------------------ +# ATxmega64C3 +#------------------------------------------------------------ + +part parent "x64a4u" + id = "x64c3"; + desc = "ATxmega64C3"; + signature = 0x1e 0x96 0x49; +; + +#------------------------------------------------------------ +# ATxmega64D3 +#------------------------------------------------------------ + +part parent "x64a4u" + id = "x64d3"; + desc = "ATxmega64D3"; + signature = 0x1e 0x96 0x4a; +; + +#------------------------------------------------------------ +# ATxmega64D4 +#------------------------------------------------------------ + +part parent "x64a4u" + id = "x64d4"; + desc = "ATxmega64D4"; + signature = 0x1e 0x96 0x47; +; + +#------------------------------------------------------------ +# ATxmega64A1 +#------------------------------------------------------------ + +part parent "x64a4u" + id = "x64a1"; + desc = "ATxmega64A1"; + signature = 0x1e 0x96 0x4e; + has_jtag = yes; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; +; + +#------------------------------------------------------------ +# ATxmega64A1U +#------------------------------------------------------------ + +part parent "x64a1" + id = "x64a1u"; + desc = "ATxmega64A1U"; + signature = 0x1e 0x96 0x4e; +; + +#------------------------------------------------------------ +# ATxmega64A3 +#------------------------------------------------------------ + +part parent "x64a1" + id = "x64a3"; + desc = "ATxmega64A3"; + signature = 0x1e 0x96 0x42; +; + +#------------------------------------------------------------ +# ATxmega64A3U +#------------------------------------------------------------ + +part parent "x64a1" + id = "x64a3u"; + desc = "ATxmega64A3U"; + signature = 0x1e 0x96 0x42; +; + +#------------------------------------------------------------ +# ATxmega64A4 +#------------------------------------------------------------ + +part parent "x64a1" + id = "x64a4"; + desc = "ATxmega64A4"; + signature = 0x1e 0x96 0x46; +; + +#------------------------------------------------------------ +# ATxmega64B1 +#------------------------------------------------------------ + +part parent "x64a1" + id = "x64b1"; + desc = "ATxmega64B1"; + signature = 0x1e 0x96 0x52; +; + +#------------------------------------------------------------ +# ATxmega64B3 +#------------------------------------------------------------ + +part parent "x64a1" + id = "x64b3"; + desc = "ATxmega64B3"; + signature = 0x1e 0x96 0x51; +; + +#------------------------------------------------------------ +# ATxmega128C3 +#------------------------------------------------------------ + +part parent ".xmega" + id = "x128c3"; + desc = "ATxmega128C3"; + signature = 0x1e 0x97 0x52; + + memory "eeprom" + size = 0x800; + offset = 0x8c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x20000; + offset = 0x800000; + page_size = 0x200; + readsize = 0x100; + ; + + memory "apptable" + size = 0x2000; + offset = 0x81e000; + page_size = 0x200; + readsize = 0x100; + ; + + memory "boot" + size = 0x2000; + offset = 0x820000; + page_size = 0x200; + readsize = 0x100; + ; + + memory "flash" + size = 0x22000; + offset = 0x800000; + page_size = 0x200; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x200; + readsize = 0x100; + ; +; + +#------------------------------------------------------------ +# ATxmega128D3 +#------------------------------------------------------------ + +part parent "x128c3" + id = "x128d3"; + desc = "ATxmega128D3"; + signature = 0x1e 0x97 0x48; +; + +#------------------------------------------------------------ +# ATxmega128D4 +#------------------------------------------------------------ + +part parent "x128c3" + id = "x128d4"; + desc = "ATxmega128D4"; + signature = 0x1e 0x97 0x47; +; + +#------------------------------------------------------------ +# ATxmega128A1 +#------------------------------------------------------------ + +part parent "x128c3" + id = "x128a1"; + desc = "ATxmega128A1"; + signature = 0x1e 0x97 0x4c; + has_jtag = yes; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; +; + +#------------------------------------------------------------ +# ATxmega128A1 revision D +#------------------------------------------------------------ + +part parent "x128a1" + id = "x128a1d"; + desc = "ATxmega128A1revD"; + signature = 0x1e 0x97 0x41; +; + +#------------------------------------------------------------ +# ATxmega128A1U +#------------------------------------------------------------ + +part parent "x128a1" + id = "x128a1u"; + desc = "ATxmega128A1U"; + signature = 0x1e 0x97 0x4c; +; + +#------------------------------------------------------------ +# ATxmega128A3 +#------------------------------------------------------------ + +part parent "x128a1" + id = "x128a3"; + desc = "ATxmega128A3"; + signature = 0x1e 0x97 0x42; +; + +#------------------------------------------------------------ +# ATxmega128A3U +#------------------------------------------------------------ + +part parent "x128a1" + id = "x128a3u"; + desc = "ATxmega128A3U"; + signature = 0x1e 0x97 0x42; +; + +#------------------------------------------------------------ +# ATxmega128A4 +#------------------------------------------------------------ + +part parent ".xmega" + id = "x128a4"; + desc = "ATxmega128A4"; + signature = 0x1e 0x97 0x46; + has_jtag = yes; + + memory "eeprom" + size = 0x800; + offset = 0x8c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x20000; + offset = 0x800000; + page_size = 0x200; + readsize = 0x100; + ; + + memory "apptable" + size = 0x1000; + offset = 0x81f000; + page_size = 0x200; + readsize = 0x100; + ; + + memory "boot" + size = 0x2000; + offset = 0x820000; + page_size = 0x200; + readsize = 0x100; + ; + + memory "flash" + size = 0x22000; + offset = 0x800000; + page_size = 0x200; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x200; + readsize = 0x100; + ; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; +; + +#------------------------------------------------------------ +# ATxmega128A4U +#------------------------------------------------------------ + +part parent ".xmega" + id = "x128a4u"; + desc = "ATxmega128A4U"; + signature = 0x1e 0x97 0x46; + + memory "eeprom" + size = 0x800; + offset = 0x8c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x20000; + offset = 0x800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "apptable" + size = 0x1000; + offset = 0x81f000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "boot" + size = 0x2000; + offset = 0x820000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "flash" + size = 0x22000; + offset = 0x800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "usersig" + size = 0x100; + offset = 0x8e0400; + page_size = 0x100; + readsize = 0x100; + ; +; + +#------------------------------------------------------------ +# ATxmega128B1 +#------------------------------------------------------------ + +part parent ".xmega" + id = "x128b1"; + desc = "ATxmega128B1"; + signature = 0x1e 0x97 0x4d; + has_jtag = yes; + + memory "eeprom" + size = 0x800; + offset = 0x8c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x20000; + offset = 0x800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "apptable" + size = 0x2000; + offset = 0x81e000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "boot" + size = 0x2000; + offset = 0x820000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "flash" + size = 0x22000; + offset = 0x800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "usersig" + size = 0x100; + offset = 0x8e0400; + page_size = 0x100; + readsize = 0x100; + ; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; +; + +#------------------------------------------------------------ +# ATxmega128B3 +#------------------------------------------------------------ + +part parent "x128b1" + id = "x128b3"; + desc = "ATxmega128B3"; + signature = 0x1e 0x97 0x4b; +; + +#------------------------------------------------------------ +# ATxmega192C3 +#------------------------------------------------------------ + +part parent ".xmega" + id = "x192c3"; + desc = "ATxmega192C3"; + signature = 0x1e 0x97 0x51; + + memory "eeprom" + size = 0x800; + offset = 0x8c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x30000; + offset = 0x800000; + page_size = 0x200; + readsize = 0x100; + ; + + memory "apptable" + size = 0x2000; + offset = 0x82e000; + page_size = 0x200; + readsize = 0x100; + ; + + memory "boot" + size = 0x2000; + offset = 0x830000; + page_size = 0x200; + readsize = 0x100; + ; + + memory "flash" + size = 0x32000; + offset = 0x800000; + page_size = 0x200; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x200; + readsize = 0x100; + ; +; + +#------------------------------------------------------------ +# ATxmega192D3 +#------------------------------------------------------------ + +part parent "x192c3" + id = "x192d3"; + desc = "ATxmega192D3"; + signature = 0x1e 0x97 0x49; +; + +#------------------------------------------------------------ +# ATxmega192A1 +#------------------------------------------------------------ + +part parent "x192c3" + id = "x192a1"; + desc = "ATxmega192A1"; + signature = 0x1e 0x97 0x4e; + has_jtag = yes; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; +; + +#------------------------------------------------------------ +# ATxmega192A3 +#------------------------------------------------------------ + +part parent "x192a1" + id = "x192a3"; + desc = "ATxmega192A3"; + signature = 0x1e 0x97 0x44; +; + +#------------------------------------------------------------ +# ATxmega192A3U +#------------------------------------------------------------ + +part parent "x192a1" + id = "x192a3u"; + desc = "ATxmega192A3U"; + signature = 0x1e 0x97 0x44; +; + +#------------------------------------------------------------ +# ATxmega256C3 +#------------------------------------------------------------ + +part parent ".xmega" + id = "x256c3"; + desc = "ATxmega256C3"; + signature = 0x1e 0x98 0x46; + + memory "eeprom" + size = 0x1000; + offset = 0x8c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x40000; + offset = 0x800000; + page_size = 0x200; + readsize = 0x100; + ; + + memory "apptable" + size = 0x2000; + offset = 0x83e000; + page_size = 0x200; + readsize = 0x100; + ; + + memory "boot" + size = 0x2000; + offset = 0x840000; + page_size = 0x200; + readsize = 0x100; + ; + + memory "flash" + size = 0x42000; + offset = 0x800000; + page_size = 0x200; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x200; + readsize = 0x100; + ; +; + +#------------------------------------------------------------ +# ATxmega256D3 +#------------------------------------------------------------ + +part parent "x256c3" + id = "x256d3"; + desc = "ATxmega256D3"; + signature = 0x1e 0x98 0x44; +; + +#------------------------------------------------------------ +# ATxmega256A1 +#------------------------------------------------------------ + +part parent "x256c3" + id = "x256a1"; + desc = "ATxmega256A1"; + signature = 0x1e 0x98 0x46; + has_jtag = yes; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; +; + +#------------------------------------------------------------ +# ATxmega256A3 +#------------------------------------------------------------ + +part parent "x256a1" + id = "x256a3"; + desc = "ATxmega256A3"; + signature = 0x1e 0x98 0x42; +; + +#------------------------------------------------------------ +# ATxmega256A3U +#------------------------------------------------------------ + +part parent "x256a1" + id = "x256a3u"; + desc = "ATxmega256A3U"; + signature = 0x1e 0x98 0x42; +; + +#------------------------------------------------------------ +# ATxmega256A3B +#------------------------------------------------------------ + +part parent "x256a1" + id = "x256a3b"; + desc = "ATxmega256A3B"; + signature = 0x1e 0x98 0x43; +; + +#------------------------------------------------------------ +# ATxmega256A3BU +#------------------------------------------------------------ + +part parent "x256a1" + id = "x256a3bu"; + desc = "ATxmega256A3BU"; + signature = 0x1e 0x98 0x43; +; + +#------------------------------------------------------------ +# ATxmega384C3 +#------------------------------------------------------------ + +part parent ".xmega" + id = "x384c3"; + desc = "ATxmega384C3"; + signature = 0x1e 0x98 0x45; + + memory "eeprom" + size = 0x1000; + offset = 0x8c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x60000; + offset = 0x800000; + page_size = 0x200; + readsize = 0x100; + ; + + memory "apptable" + size = 0x2000; + offset = 0x85e000; + page_size = 0x200; + readsize = 0x100; + ; + + memory "boot" + size = 0x2000; + offset = 0x860000; + page_size = 0x200; + readsize = 0x100; + ; + + memory "flash" + size = 0x62000; + offset = 0x800000; + page_size = 0x200; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x200; + readsize = 0x100; + ; +; + +#------------------------------------------------------------ +# ATxmega384D3 +#------------------------------------------------------------ + +part parent "x384c3" + id = "x384d3"; + desc = "ATxmega384D3"; + signature = 0x1e 0x98 0x47; +; + +#------------------------------------------------------------ +# ATxmega8E5 +#------------------------------------------------------------ + +part parent ".xmega" + id = "x8e5"; + desc = "ATxmega8E5"; + signature = 0x1e 0x93 0x41; + + memory "eeprom" + size = 0x0200; + offset = 0x08c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x2000; + offset = 0x0800000; + page_size = 0x80; + readsize = 0x100; + ; + + memory "apptable" + size = 0x800; + offset = 0x00801800; + page_size = 0x80; + readsize = 0x100; + ; + + memory "boot" + size = 0x800; + offset = 0x00804000; + page_size = 0x80; + readsize = 0x100; + ; + + memory "flash" + size = 0x2800; + offset = 0x0800000; + page_size = 0x80; + readsize = 0x100; + ; + + memory "usersig" + size = 0x80; + offset = 0x8e0400; + page_size = 0x80; + readsize = 0x100; + ; +; + +#------------------------------------------------------------ +# ATxmega16E5 +#------------------------------------------------------------ + +part parent ".xmega" + id = "x16e5"; + desc = "ATxmega16E5"; + signature = 0x1e 0x94 0x45; + + memory "eeprom" + size = 0x0200; + offset = 0x08c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x4000; + offset = 0x0800000; + page_size = 0x80; + readsize = 0x100; + ; + + memory "apptable" + size = 0x1000; + offset = 0x00803000; + page_size = 0x80; + readsize = 0x100; + ; + + memory "boot" + size = 0x1000; + offset = 0x00804000; + page_size = 0x80; + readsize = 0x100; + ; + + memory "flash" + size = 0x5000; + offset = 0x0800000; + page_size = 0x80; + readsize = 0x100; + ; + + memory "usersig" + size = 0x80; + offset = 0x8e0400; + page_size = 0x80; + readsize = 0x100; + ; +; + +#------------------------------------------------------------ +# ATxmega32E5 +#------------------------------------------------------------ + +part parent ".xmega" + id = "x32e5"; + desc = "ATxmega32E5"; + signature = 0x1e 0x95 0x4c; + + memory "eeprom" + size = 0x0400; + offset = 0x08c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x8000; + offset = 0x0800000; + page_size = 0x80; + readsize = 0x100; + ; + + memory "apptable" + size = 0x1000; + offset = 0x00807000; + page_size = 0x80; + readsize = 0x100; + ; + + memory "boot" + size = 0x1000; + offset = 0x00804000; + page_size = 0x80; + readsize = 0x100; + ; + + memory "flash" + size = 0x9000; + offset = 0x0800000; + page_size = 0x80; + readsize = 0x100; + ; + + memory "usersig" + size = 0x80; + offset = 0x8e0400; + page_size = 0x80; + readsize = 0x100; + ; +; + +#------------------------------------------------------------ +# AVR32UC3A0512 +#------------------------------------------------------------ + +part + id = "uc3a0512"; + desc = "AT32UC3A0512"; + signature = 0xED 0xC0 0x3F; + has_jtag = yes; + is_avr32 = yes; + + memory "flash" + paged = yes; + page_size = 512; # bytes + readsize = 512; # bytes + num_pages = 1024; # could be set dynamicly + size = 0x00080000; # could be set dynamicly + offset = 0x80000000; + ; +; + +part parent "uc3a0512" + id = "ucr2"; + desc = "deprecated, use 'uc3a0512'"; +; + +#------------------------------------------------------------ +# ATtiny1634. +#------------------------------------------------------------ + +part + id = "t1634"; + desc = "ATtiny1634"; + has_debugwire = yes; + flash_instr = 0xB6, 0x01, 0x11; + eeprom_instr = 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4, 0x00, + 0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB, 0xBF, + 0x99, 0xF9, 0xBB, 0xAF; + stk500_devcode = 0x86; + # avr910_devcode = 0x; + signature = 0x1e 0x94 0x12; + pagel = 0xB3; + bs2 = 0xB1; + reset = io; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0E, 0x1E, 0x2E, 0x3E, 0x2E, 0x3E, + 0x4E, 0x5E, 0x4E, 0x5E, 0x6E, 0x7E, 0x6E, 0x7E, + 0x26, 0x36, 0x66, 0x76, 0x2A, 0x3A, 0x6A, 0x7A, + 0x2E, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + resetdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "eeprom" + paged = no; + page_size = 4; + size = 256; + min_write_delay = 3600; + max_write_delay = 3600; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 5; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 16384; + page_size = 32; + num_pages = 512; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 128; + readsize = 256; + + ; + + memory "lfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "efuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x x x x o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x i i i i i"; + ; + + memory "lock" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 1 1 1 1 i i"; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; +; + +#------------------------------------------------------------ +# Common values for reduced core tinys (4/5/9/10/20/40) +#------------------------------------------------------------ + +part + id = ".reduced_core_tiny"; + desc = "Common values for reduced core tinys"; + has_tpi = yes; + + memory "signature" + size = 3; + offset = 0x3fc0; + page_size = 16; + ; + + memory "fuse" + size = 1; + offset = 0x3f40; + page_size = 16; + blocksize = 4; + ; + + memory "calibration" + size = 1; + offset = 0x3f80; + page_size = 16; + ; + + memory "lockbits" + size = 1; + offset = 0x3f00; + page_size = 16; + ; +; + +#------------------------------------------------------------ +# ATtiny4 +#------------------------------------------------------------ + +part parent ".reduced_core_tiny" + id = "t4"; + desc = "ATtiny4"; + signature = 0x1e 0x8f 0x0a; + + memory "flash" + size = 512; + offset = 0x4000; + page_size = 16; + blocksize = 128; + ; +; + +#------------------------------------------------------------ +# ATtiny5 +#------------------------------------------------------------ + +part parent "t4" + id = "t5"; + desc = "ATtiny5"; + signature = 0x1e 0x8f 0x09; +; + +#------------------------------------------------------------ +# ATtiny9 +#------------------------------------------------------------ + +part parent ".reduced_core_tiny" + id = "t9"; + desc = "ATtiny9"; + signature = 0x1e 0x90 0x08; + + memory "flash" + size = 1024; + offset = 0x4000; + page_size = 16; + blocksize = 128; + ; +; + +#------------------------------------------------------------ +# ATtiny10 +#------------------------------------------------------------ + +part parent "t9" + id = "t10"; + desc = "ATtiny10"; + signature = 0x1e 0x90 0x03; +; + +#------------------------------------------------------------ +# ATtiny20 +#------------------------------------------------------------ + +part parent ".reduced_core_tiny" + id = "t20"; + desc = "ATtiny20"; + signature = 0x1e 0x91 0x0F; + + memory "flash" + size = 2048; + offset = 0x4000; + page_size = 16; + blocksize = 128; + ; +; + +#------------------------------------------------------------ +# ATtiny40 +#------------------------------------------------------------ + +part parent ".reduced_core_tiny" + id = "t40"; + desc = "ATtiny40"; + signature = 0x1e 0x92 0x0E; + + memory "flash" + size = 4096; + offset = 0x4000; + page_size = 64; + blocksize = 128; + ; +; + +#------------------------------------------------------------ +# ATmega406 +#------------------------------------------------------------ + +part + id = "m406"; + desc = "ATMEGA406"; + has_jtag = yes; + signature = 0x1e 0x95 0x07; + + # STK500 parameters (parallel programming IO lines) + pagel = 0xa7; + bs2 = 0xa0; + serial = no; + parallel = yes; + + # STK500v2 HV programming parameters, from XML + pp_controlstack = 0x0e, 0x1e, 0x0f, 0x1f, 0x2e, 0x3e, 0x2f, 0x3f, + 0x4e, 0x5e, 0x4f, 0x5f, 0x6e, 0x7e, 0x6f, 0x7f, + 0x66, 0x76, 0x67, 0x77, 0x6a, 0x7a, 0x6b, 0x7b, + 0xbe, 0xfd, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + + # JTAG ICE mkII parameters, also from XML files + allowfullpagebitstream = no; + enablepageprogramming = yes; + idr = 0x51; + rampz = 0x00; + spmcr = 0x57; + eecr = 0x3f; + + memory "eeprom" + paged = no; + size = 512; + page_size = 4; + blocksize = 4; + readsize = 4; + num_pages = 128; + ; + + memory "flash" + paged = yes; + size = 40960; + page_size = 128; + blocksize = 128; + readsize = 128; + num_pages = 320; + ; + + memory "hfuse" + size = 1; + ; + + memory "lfuse" + size = 1; + ; + + memory "lockbits" + size = 1; + ; + + memory "signature" + size = 3; + ; +; + + diff --git a/external/arduino/avr/bootloaders/gemma/gemma_v1.hex b/external/arduino/avr/bootloaders/gemma/gemma_v1.hex new file mode 100644 index 000000000..4b688763c --- /dev/null +++ b/external/arduino/avr/bootloaders/gemma/gemma_v1.hex @@ -0,0 +1,182 @@ +:100000005FCA5FCA5FCA5FCA5FCA5FCA5FCA5FCAA8 +:1014C00033C05FC08BC05DC05CC05BC05AC059C038 +:1014D00058C057C056C055C054C053C052C009026E +:1014E0001200010100803209040000000000000029 +:1014F00012011001FF00000841239F0C00010102AE +:1015000000010C03470065006D006D0061001603CB +:10151000410072006400750069006E006F002E00CB +:10152000630063000403090411241FBECFE5D2E069 +:10153000DEBFCDBF84B7877F84BF88E10FB6F89444 +:1015400081BD11BC0FBE91E080E80FB6F89486BD56 +:1015500096BD0FBE0AEA0F9310E0A0E6B0E0EEEDF4 +:10156000FFE102C005900D92A236B107D9F711E054 +:10157000A2E6B0E001C01D92A832B107E1F7EDD3B9 +:101580002CC59ECFA82FB92F80E090E041E050EA13 +:10159000609530E009C02D9182279795879510F0CE +:1015A00084279527305EC8F36F5FA8F30895EADFBC +:1015B0008D939D930895A6E088279927AA9569F0B1 +:1015C0000197E1F3B399FCCFB39BFECF81E099275C +:1015D000A6B3019611F0A871D9F70895CF93CFB7AC +:1015E000CF93C0915F02CA3A21F0CF91CFBFCF9184 +:1015F00065CFCC27C395B39BE9F7B39B0BC0B39BD7 +:1016000009C0B39B07C0B39B05C0B39B03C0B39B8A +:1016100001C0D3C00F92DF93C0910B01DD27CE5ED6 +:10162000DE4F012EB39B03C0DF910F90E6CF2F93C7 +:101630000F931F934F932FEF4F6F06B303FB20F9C8 +:101640005F933F9350E03BE065C016B301265029FD +:1016500053FDC89556B3012703FB25F92F7306B335 +:10166000B1F05027102713FB26F906B22230F0F014 +:1016700000C016B3012703FB27F90126502906B243 +:101680002430E8F54F77206816B30000F6CF5027D6 +:101690004F7D206206B2102F000000C006B3002666 +:1016A0005029102713FB26F906B2E2CF4F7B06B371 +:1016B000206400C0DACF01265029187106B269F102 +:1016C0004E7F2160012F16B328C0002650294D7F80 +:1016D00006B22260102F29C0012650294B7F06B286 +:1016E0002460012F2DC016B301265029477F2860A2 +:1016F000000006B22EC04F7E06B3206130C04227E4 +:1017000006B3499300265029102706B24FEF13FB6A +:1017100020F9297F16B379F2187159F10126502961 +:1017200006B2012703FB21F9237F06B371F20026DD +:1017300050293150D0F006B2102713FB22F9277E32 +:1017400016B351F201265029012703FB06B223F9F3 +:101750002F7C49F2000006B3102713FB24F9002662 +:10176000502906B22F7939F270CF10E21ABF002744 +:1017700017C03B503195C31BD04010E21ABF0881FF +:10178000033CF9F00B34E9F0209109011981110FA4 +:101790001213EDCF093651F10D3211F0013E39F738 +:1017A000009310013F915F914F911F910F912F91E5 +:1017B000DF910F90CAB7C5FD1DCFCF91CFBFCF919D +:1017C000189520911001222369F310910E01112325 +:1017D00021F5343022F130930E0120930A0110914B +:1017E0000B013BE0311B30930B0119C000910E013E +:1017F00001309CF40AE53091610034FD11C0009382 +:101800006100CEEFD0E010C0052710E000C021C07D +:10181000052710E0C89508BB14C03AE501C032EDB9 +:10182000032EC0E0D0E032E017B31861C39A08B3CA +:1018300017BB58E120E84FEF20FF052708BB27958D +:1018400017951C3F28F700004552B0F720FF0527E9 +:10185000279508BB17951C3FB8F629913A9561F773 +:10186000077E10910F01110F08BBC250D04011F03C +:101870001093090110E21ABF086017B3177E402FBA +:10188000477E54E05A95F1F708BB17BB48BB8ACF97 +:101890002091F9003091FA002D3B3441B8F421E059 +:1018A0002093F600F894E091F900F091FA000C0111 +:1018B00020935700E895112478948091F900909135 +:1018C000FA0002969093FA008093F90008958091AF +:1018D000F600882309F43DC08091F9009091FA0048 +:1018E000813C944108F035C0F8948091F9009091C2 +:1018F000FA008238944118F1809166009091670057 +:101900008F559A409F70906CEEEBF4E121E00C0152 +:1019100020935700E895112480916E0090916F00FC +:101920008C559A409F70906CECEBF4E10C01209385 +:101930005700E8951124789481E080936400E09149 +:10194000F900F091FA00329785E080935700E8950E +:1019500078941092F6000895FF920F931F93CF93FF +:10196000DF9380910E01835087FD5AC190910B0146 +:10197000ACE0B0E0A91BB109AE5EBE4F31E03093E0 +:10198000620090910A019D3209F00AC1883009F085 +:1019900045C183EC8093FE008AE58093610010923C +:1019A000FD008C91807609F47DC01092F3001092B6 +:1019B000F5001092F40011962C911197213009F442 +:1019C00069C0263021F481E08093FC0067C0273095 +:1019D00009F040C03093FC0089EE90E090930D0137 +:1019E00080930C0113969C9113979093EB001092A7 +:1019F000EC0012968C911297803379F491114CC0BF +:101A00001496EC911497F0E0EE0FFF1F81E28093A3 +:101A10005700E491E093EC003FC08C3A81F4903899 +:101A2000D9F514968C911497811136C015968C9126 +:101A30001597811131C081E08093E8002DC08C346E +:101A400059F515968C911597811126C081E08093E8 +:101A5000E70022C0283009F4B6CF14968D919C91EE +:101A600015979093FA008093F90016968C9116972B +:101A70008093F10087EF820F843080F48FE788BD78 +:101A80003093FB002093F2002A3051F081E08093E4 +:101A9000FC0006C021E077C024E075C020E073C0E0 +:101AA0002FEF68C012969C91129710920701119621 +:101AB0008C911197811106C01092080187E091E086 +:101AC00022E052C0853019F490930F013FC0863058 +:101AD000B9F513968C911397813019F480EF94E146 +:101AE00004C0823041F48EED94E190930D01809317 +:101AF0000C0122E121C08330F1F4911108C084E28D +:101B000095E190930D0180930C0124E015C0913074 +:101B100041F48EE095E190930D0180930C0126E154 +:101B20000BC0923041F482E095E190930D018093D7 +:101B30000C012CE001C020E080E48093FD0018C07F +:101B4000883079F0893031F49093110187E091E089 +:101B500020E00AC021E08A3009F020E087E091E02F +:101B600003C081E191E021E090930D0180930C018D +:101B70002F3F49F48C9187FF02C016962C9180E884 +:101B80008093FD000AC017968C911797811105C0AC +:101B900016968C91821708F4282F209360003EC07F +:101BA0009091FD0097FF3AC09091F100182F98177F +:101BB00008F4192F092F011B0093F1001092FC006B +:101BC0008091F2008A3029F0011128C01092600043 +:101BD00025C0FA2ECA2FDB2F8C2F8F198117A0F763 +:101BE0008091F9009091FA008034910590F421E001 +:101BF00020936500FC01EE0FFF1FEA59FF4F28817B +:101C000039813183208302969093FA008093F90002 +:101C100003C0888199813CDE2296DECF10920E01AE +:101C20008091610084FF7BC0809160008F3F09F448 +:101C300076C0182F893008F018E0811B809360006F +:101C40008091FE0098E889278093FE00112309F413 +:101C50005AC08091FD0087FF38C08091F100811744 +:101C600008F4182F811B8093F1003091F200E0916D +:101C7000F900F091FA0020E0AFEFB0E0211700F595 +:101C80003B3009F4FFCF3930D9F7E034F10560F487 +:101C9000EF01CC0FDD1FCA59DF4F888199818D93E9 +:101CA0009D932E5F3296EACFEC3B84E1F80710F06B +:101CB0008FEF01C084918C9311962F5F3196DECF08 +:101CC000F093FA00E093F9001EC0E0910C01F0914E +:101CD0000D0186FF0BC08FEF90E0DC0124912D9366 +:101CE0003196212F280F2A13F9CF09C08FEF90E0EA +:101CF000DC0121912D93212F280F2A13FACFF09385 +:101D00000D01E0930C01612F8FEF90E050DC1C5F20 +:101D10001C3019F08FEF809360001093610084E114 +:101D200096B3987131F48150D9F710920F01109247 +:101D30000901C1E08111C0E0809163008C1739F086 +:101D4000C11103C0F89401D17894C0936300DF916E +:101D5000CF911F910F91FF900895C1B7B99A83E277 +:101D60008ABD81E083BFAC9A8BB780628BBFBB9A80 +:101D70002FE132E18AE0215030408040E1F700C09D +:101D80000000BB987894E8DD8091E800882321F179 +:101D900082E090E09093F8008093F70013C0CF01A9 +:101DA0008F739927892B21F483E080935700E8955E +:101DB000D3DD8091F7009091F80002969093F8009F +:101DC0008093F700E091F700F091F800E03C94E197 +:101DD000F90728F31092E8008091E700882329F0A2 +:101DE000BBDD75DD1092E700B7DD809162008823CE +:101DF00041F08091FC00811104C08091FB008111B1 +:101E0000C2CF80916200882371F08091E600811139 +:101E10000AC088B5805F88BD88B5811104C08AB5C5 +:101E200090E189278ABD8091E6008F5F8093E6006C +:101E30008EEC90E00197F1F78091F4009091F5001D +:101E400001969093F5008093F4002091F3000097A1 +:101E500011F42F5F00C02093F30030916200311124 +:101E600005C081323EE4930708F05AC03091FC006F +:101E7000332321F08131974208F052C080916200F3 +:101E8000882309F480CF8091FB0081117CCF23301F +:101E900008F479CF45C080916400811149C08CEB72 +:101EA00094E19093FA008093F90081E08093F6002A +:101EB0000EDD3EC0DF01AA0FBB1FAA59BF4F8D9197 +:101EC0009C919F012B7F232B31F4E054FB4E859195 +:101ED0009491805A954FDCDCE091F900F091FA0082 +:101EE000E034F10538F3F3DC10925F0217BA13BE49 +:101EF0001ABC03C081B78F5F81BF81B78C17D0F345 +:101F000003C081B7815081BF81B7C817D0F391E07A +:101F100080E80FB6F89486BD96BD0FBED0CA13C038 +:101F200015BA1BBEF894809165008111B4CFDCCF47 +:101F3000E0E0F0E083E080935700E8951092FA002B +:101F40001092F900C9CF80E090E0DF92EF92FF920B +:101F50000F931F93CF93DF9390E080E80FB6F89430 +:101F600086BD96BD0FBE08E010E0F12C80E8E82E9B +:101F7000DF2CDE0CD1BE1FDBEC01C43389E0D807B7 +:101F80000CF4FD2CE694015011090115110581F79F +:101F90001F2D8FEF8F0D81BF21B730E0812F90E093 +:101FA00001968217930784F006DB8453994097FFCC +:101FB00003C09195819591098C179D0714F4F1B692 +:101FC000EC0181B78F5FE7CFF1BEDF91CF911F9119 +:0E1FD0000F91FF90EF90DF900895F894FFCFEF +:021FDE00FF5AA8 +:04000003000014C025 +:00000001FF diff --git a/external/arduino/avr/bootloaders/gemma/usbconfig.h b/external/arduino/avr/bootloaders/gemma/usbconfig.h new file mode 100644 index 000000000..ca0c02134 --- /dev/null +++ b/external/arduino/avr/bootloaders/gemma/usbconfig.h @@ -0,0 +1,351 @@ +/* Name: usbconfig.h + * Project: V-USB, virtual USB port for Atmel's(r) AVR(r) microcontrollers + * Author: Christian Starkjohann + * Creation Date: 2005-04-01 + * Tabsize: 4 + * Copyright: (c) 2005 by OBJECTIVE DEVELOPMENT Software GmbH + * License: GNU GPL v2 or v3 (see License.txt) + */ + +/* Modified by me@frank-zhao.com for project GemmaBoot + * + * GemmaBoot is a bootloader that emulates a USBtinyISP (from Adafruit Industries) + * + * Gemma will use GemmaBoot + * + * This code is heavily derived from USBaspLoader, but also from USBtiny, with USBtinyISP's settings + + Copyright (c) 2013 Adafruit Industries + All rights reserved. + + GemmaBoot is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of + the License, or (at your option) any later version. + + GemmaBoot is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with GemmaBoot. If not, see + . +*/ + +#ifndef __usbconfig_h_included__ +#define __usbconfig_h_included__ + +/* YOU SHOULD NOT NEED TO MODIFY THIS FILE! All configurations are supposed + * to go into bootloaderconfig.h! + */ + +/* ---------------------------- Hardware Config ---------------------------- */ + +/* All the port and pin assignments, as well as the clock speed and CRC + setting are now in bootloaderconfig.h: */ + +#include "bootloaderconfig.h" + +/* --------------------------- Functional Range ---------------------------- */ + +#define USB_CFG_HAVE_INTRIN_ENDPOINT 0 +/* Define this to 1 if you want to compile a version with two endpoints: The + * default control endpoint 0 and an interrupt-in endpoint (any other endpoint + * number). + */ +#define USB_CFG_HAVE_INTRIN_ENDPOINT3 0 +/* Define this to 1 if you want to compile a version with three endpoints: The + * default control endpoint 0, an interrupt-in endpoint 3 (or the number + * configured below) and a catch-all default interrupt-in endpoint as above. + * You must also define USB_CFG_HAVE_INTRIN_ENDPOINT to 1 for this feature. + */ +#define USB_CFG_EP3_NUMBER 3 +/* If the so-called endpoint 3 is used, it can now be configured to any other + * endpoint number (except 0) with this macro. Default if undefined is 3. + */ +/* #define USB_INITIAL_DATATOKEN USBPID_DATA1 */ +/* The above macro defines the startup condition for data toggling on the + * interrupt/bulk endpoints 1 and 3. Defaults to USBPID_DATA1. + * Since the token is toggled BEFORE sending any data, the first packet is + * sent with the oposite value of this configuration! + */ +#define USB_CFG_IMPLEMENT_HALT 0 +/* Define this to 1 if you also want to implement the ENDPOINT_HALT feature + * for endpoint 1 (interrupt endpoint). Although you may not need this feature, + * it is required by the standard. We have made it a config option because it + * bloats the code considerably. + */ +#define USB_CFG_SUPPRESS_INTR_CODE 0 +/* Define this to 1 if you want to declare interrupt-in endpoints, but don't + * want to send any data over them. If this macro is defined to 1, functions + * usbSetInterrupt() and usbSetInterrupt3() are omitted. This is useful if + * you need the interrupt-in endpoints in order to comply to an interface + * (e.g. HID), but never want to send any data. This option saves a couple + * of bytes in flash memory and the transmit buffers in RAM. + */ +#define USB_CFG_INTR_POLL_INTERVAL 10 +/* If you compile a version with endpoint 1 (interrupt-in), this is the poll + * interval. The value is in milliseconds and must not be less than 10 ms for + * low speed devices. + */ +#ifndef USB_CFG_IS_SELF_POWERED // allow bootloaderconfig.h to override +#define USB_CFG_IS_SELF_POWERED 0 +#endif +/* Define this to 1 if the device has its own power supply. Set it to 0 if the + * device is powered from the USB bus. + */ +#ifndef USB_CFG_MAX_BUS_POWER // allow bootloaderconfig.h to override +#define USB_CFG_MAX_BUS_POWER 100 +#endif +/* Set this variable to the maximum USB bus power consumption of your device. + * The value is in milliamperes. [It will be divided by two since USB + * communicates power requirements in units of 2 mA.] + */ +#define USB_CFG_IMPLEMENT_FN_WRITE 1 +/* Set this to 1 if you want usbFunctionWrite() to be called for control-out + * transfers. Set it to 0 if you don't need it and want to save a couple of + * bytes. + */ +#define USB_CFG_IMPLEMENT_FN_READ 1 +/* Set this to 1 if you need to send control replies which are generated + * "on the fly" when usbFunctionRead() is called. If you only want to send + * data from a static buffer, set it to 0 and return the data from + * usbFunctionSetup(). This saves a couple of bytes. + */ +#define USB_CFG_IMPLEMENT_FN_WRITEOUT 0 +/* Define this to 1 if you want to use interrupt-out (or bulk out) endpoints. + * You must implement the function usbFunctionWriteOut() which receives all + * interrupt/bulk data sent to any endpoint other than 0. The endpoint number + * can be found in 'usbRxToken'. + */ +#define USB_CFG_HAVE_FLOWCONTROL 0 +/* Define this to 1 if you want flowcontrol over USB data. See the definition + * of the macros usbDisableAllRequests() and usbEnableAllRequests() in + * usbdrv.h. + */ +#define USB_CFG_DRIVER_FLASH_PAGE 0 +/* If the device has more than 64 kBytes of flash, define this to the 64 k page + * where the driver's constants (descriptors) are located. Or in other words: + * Define this to 1 for boot loaders on the ATMega128. + */ +#define USB_CFG_LONG_TRANSFERS 0 +/* Define this to 1 if you want to send/receive blocks of more than 254 bytes + * in a single control-in or control-out transfer. Note that the capability + * for long transfers increases the driver size. + */ +#ifndef __ASSEMBLER__ +extern volatile char usbHasRxed; +#endif +#define USB_RX_USER_HOOK(data, len) do { usbHasRxed = 1; } while (0); +/* This macro is a hook if you want to do unconventional things. If it is + * defined, it's inserted at the beginning of received message processing. + * If you eat the received message and don't want default processing to + * proceed, do a return after doing your things. One possible application + * (besides debugging) is to flash a status LED on each packet. + */ +/* #define USB_RESET_HOOK(resetStarts) if(!resetStarts){hadUsbReset();} */ +/* This macro is a hook if you need to know when an USB RESET occurs. It has + * one parameter which distinguishes between the start of RESET state and its + * end. + */ +/* #define USB_SET_ADDRESS_HOOK() hadAddressAssigned(); */ +/* This macro (if defined) is executed when a USB SET_ADDRESS request was + * received. + */ +#define USB_COUNT_SOF 0 +/* define this macro to 1 if you need the global variable "usbSofCount" which + * counts SOF packets. This feature requires that the hardware interrupt is + * connected to D- instead of D+. + */ +/* #ifdef __ASSEMBLER__ + * macro myAssemblerMacro + * in YL, TCNT0 + * sts timer0Snapshot, YL + * endm + * #endif + * #define USB_SOF_HOOK myAssemblerMacro + * This macro (if defined) is executed in the assembler module when a + * Start Of Frame condition is detected. It is recommended to define it to + * the name of an assembler macro which is defined here as well so that more + * than one assembler instruction can be used. The macro may use the register + * YL and modify SREG. If it lasts longer than a couple of cycles, USB messages + * immediately after an SOF pulse may be lost and must be retried by the host. + * What can you do with this hook? Since the SOF signal occurs exactly every + * 1 ms (unless the host is in sleep mode), you can use it to tune OSCCAL in + * designs running on the internal RC oscillator. + * Please note that Start Of Frame detection works only if D- is wired to the + * interrupt, not D+. THIS IS DIFFERENT THAN MOST EXAMPLES! + */ +#define USB_CFG_CHECK_DATA_TOGGLING 0 +/* define this macro to 1 if you want to filter out duplicate data packets + * sent by the host. Duplicates occur only as a consequence of communication + * errors, when the host does not receive an ACK. Please note that you need to + * implement the filtering yourself in usbFunctionWriteOut() and + * usbFunctionWrite(). Use the global usbCurrentDataToken and a static variable + * for each control- and out-endpoint to check for duplicate packets. + */ +#define USB_CFG_HAVE_MEASURE_FRAME_LENGTH 1 +/* define this macro to 1 if you want the function usbMeasureFrameLength() + * compiled in. This function can be used to calibrate the AVR's RC oscillator. + */ +#define USB_USE_FAST_CRC 0 +/* The assembler module has two implementations for the CRC algorithm. One is + * faster, the other is smaller. This CRC routine is only used for transmitted + * messages where timing is not critical. The faster routine needs 31 cycles + * per byte while the smaller one needs 61 to 69 cycles. The faster routine + * may be worth the 32 bytes bigger code size if you transmit lots of data and + * run the AVR close to its limit. + */ + +/* -------------------------- Device Description --------------------------- */ + +#define USB_CFG_VENDOR_ID 0x41, 0x23 /* = 0x16c0 = 5824 = voti.nl */ +/* USB vendor ID for the device, low byte first. If you have registered your + * own Vendor ID, define it here. Otherwise you may use one of obdev's free + * shared VID/PID pairs. Be sure to read USB-IDs-for-free.txt for rules! + */ +#define USB_CFG_DEVICE_ID 0x9F, 0x0c /* = 0x05dc = 1500 */ +/* This is the ID of the product, low byte first. It is interpreted in the + * scope of the vendor ID. If you have registered your own VID with usb.org + * or if you have licensed a PID from somebody else, define it here. Otherwise + * you may use one of obdev's free shared VID/PID pairs. See the file + * USB-IDs-for-free.txt for details! + */ +#define USB_CFG_DEVICE_VERSION 0x00, 0x01 +/* Version number of the device: Minor number first, then major number. + */ +#define USB_CFG_VENDOR_NAME 'A','r','d','u','i','n','o','.','c','c' +#define USB_CFG_VENDOR_NAME_LEN 10 +/* These two values define the vendor name returned by the USB device. The name + * must be given as a list of characters under single quotes. The characters + * are interpreted as Unicode (UTF-16) entities. + * If you don't want a vendor name string, undefine these macros. + * ALWAYS define a vendor name containing your Internet domain name if you use + * obdev's free shared VID/PID pair. See the file USB-IDs-for-free.txt for + * details. + */ +#define USB_CFG_DEVICE_NAME 'G','e','m','m','a' +#define USB_CFG_DEVICE_NAME_LEN 5 +/* Same as above for the device name. If you don't want a device name, undefine + * the macros. See the file USB-IDs-for-free.txt before you assign a name if + * you use a shared VID/PID. + */ +/*#define USB_CFG_SERIAL_NUMBER 'N', 'o', 'n', 'e' */ +/*#define USB_CFG_SERIAL_NUMBER_LEN 0 */ +/* Same as above for the serial number. If you don't want a serial number, + * undefine the macros. + * It may be useful to provide the serial number through other means than at + * compile time. See the section about descriptor properties below for how + * to fine tune control over USB descriptors such as the string descriptor + * for the serial number. + */ +#define USB_CFG_DEVICE_CLASS 0xFF /* set to 0 if deferred to interface */ +#define USB_CFG_DEVICE_SUBCLASS 0 +/* See USB specification if you want to conform to an existing device class. + * Class 0xff is "vendor specific". + */ +#define USB_CFG_INTERFACE_CLASS 0 /* define class here if not at device level */ +#define USB_CFG_INTERFACE_SUBCLASS 0 +#define USB_CFG_INTERFACE_PROTOCOL 0 +/* See USB specification if you want to conform to an existing device class or + * protocol. The following classes must be set at interface level: + * HID class is 3, no subclass and protocol required (but may be useful!) + * CDC class is 2, use subclass 2 and protocol 1 for ACM + */ +/* #define USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH 42 */ +/* Define this to the length of the HID report descriptor, if you implement + * an HID device. Otherwise don't define it or define it to 0. + * If you use this define, you must add a PROGMEM character array named + * "usbHidReportDescriptor" to your code which contains the report descriptor. + * Don't forget to keep the array and this define in sync! + */ + +#define USB_PUBLIC static +/* Use the define above if you #include usbdrv.c instead of linking against it. + * This technique saves a couple of bytes in flash memory. + */ + +/* ------------------- Fine Control over USB Descriptors ------------------- */ +/* If you don't want to use the driver's default USB descriptors, you can + * provide our own. These can be provided as (1) fixed length static data in + * flash memory, (2) fixed length static data in RAM or (3) dynamically at + * runtime in the function usbFunctionDescriptor(). See usbdrv.h for more + * information about this function. + * Descriptor handling is configured through the descriptor's properties. If + * no properties are defined or if they are 0, the default descriptor is used. + * Possible properties are: + * + USB_PROP_IS_DYNAMIC: The data for the descriptor should be fetched + * at runtime via usbFunctionDescriptor(). If the usbMsgPtr mechanism is + * used, the data is in FLASH by default. Add property USB_PROP_IS_RAM if + * you want RAM pointers. + * + USB_PROP_IS_RAM: The data returned by usbFunctionDescriptor() or found + * in static memory is in RAM, not in flash memory. + * + USB_PROP_LENGTH(len): If the data is in static memory (RAM or flash), + * the driver must know the descriptor's length. The descriptor itself is + * found at the address of a well known identifier (see below). + * List of static descriptor names (must be declared PROGMEM if in flash): + * char usbDescriptorDevice[]; + * char usbDescriptorConfiguration[]; + * char usbDescriptorHidReport[]; + * char usbDescriptorString0[]; + * int usbDescriptorStringVendor[]; + * int usbDescriptorStringDevice[]; + * int usbDescriptorStringSerialNumber[]; + * Other descriptors can't be provided statically, they must be provided + * dynamically at runtime. + * + * Descriptor properties are or-ed or added together, e.g.: + * #define USB_CFG_DESCR_PROPS_DEVICE (USB_PROP_IS_RAM | USB_PROP_LENGTH(18)) + * + * The following descriptors are defined: + * USB_CFG_DESCR_PROPS_DEVICE + * USB_CFG_DESCR_PROPS_CONFIGURATION + * USB_CFG_DESCR_PROPS_STRINGS + * USB_CFG_DESCR_PROPS_STRING_0 + * USB_CFG_DESCR_PROPS_STRING_VENDOR + * USB_CFG_DESCR_PROPS_STRING_PRODUCT + * USB_CFG_DESCR_PROPS_STRING_SERIAL_NUMBER + * USB_CFG_DESCR_PROPS_HID + * USB_CFG_DESCR_PROPS_HID_REPORT + * USB_CFG_DESCR_PROPS_UNKNOWN (for all descriptors not handled by the driver) + * + * Note about string descriptors: String descriptors are not just strings, they + * are Unicode strings prefixed with a 2 byte header. Example: + * int serialNumberDescriptor[] = { + * USB_STRING_DESCRIPTOR_HEADER(6), + * 'S', 'e', 'r', 'i', 'a', 'l' + * }; + */ + +#define USB_CFG_DESCR_PROPS_DEVICE 0 +#define USB_CFG_DESCR_PROPS_CONFIGURATION 0 +#define USB_CFG_DESCR_PROPS_STRINGS 0 +#define USB_CFG_DESCR_PROPS_STRING_0 0 +#define USB_CFG_DESCR_PROPS_STRING_VENDOR 0 +#define USB_CFG_DESCR_PROPS_STRING_PRODUCT 0 +#define USB_CFG_DESCR_PROPS_STRING_SERIAL_NUMBER 0 +#define USB_CFG_DESCR_PROPS_HID 0 +#define USB_CFG_DESCR_PROPS_HID_REPORT 0 +#define USB_CFG_DESCR_PROPS_UNKNOWN 0 + +#define usbMsgPtr_t unsigned short // scalar type yields shortest code + +/* ----------------------- Optional MCU Description ------------------------ */ + +/* The following configurations have working defaults in usbdrv.h. You + * usually don't need to set them explicitly. Only if you want to run + * the driver on a device which is not yet supported or with a compiler + * which is not fully supported (such as IAR C) or if you use a differnt + * interrupt than INT0, you may have to define some of these. + */ +#define USB_INTR_CFG PCMSK +#define USB_INTR_CFG_SET (1 << USB_CFG_DPLUS_BIT) +#define USB_INTR_CFG_CLR 0 +#define USB_INTR_ENABLE GIMSK +#define USB_INTR_ENABLE_BIT PCIE +#define USB_INTR_PENDING GIFR +#define USB_INTR_PENDING_BIT PCIF +#define USB_INTR_VECTOR PCINT0_vect + +#endif /* __usbconfig_h_included__ */ diff --git a/external/arduino/avr/bootloaders/gemma/usbconfig.patch b/external/arduino/avr/bootloaders/gemma/usbconfig.patch new file mode 100644 index 000000000..1abb15832 --- /dev/null +++ b/external/arduino/avr/bootloaders/gemma/usbconfig.patch @@ -0,0 +1,24 @@ +203c203 +< #define USB_CFG_VENDOR_ID 0x81, 0x17 /* = 0x16c0 = 5824 = voti.nl */ +--- +> #define USB_CFG_VENDOR_ID 0x41, 0x23 /* = 0x16c0 = 5824 = voti.nl */ +208c208 +< #define USB_CFG_DEVICE_ID 0x9F, 0x0C /* = 0x05dc = 1500 */ +--- +> #define USB_CFG_DEVICE_ID 0x9F, 0x0c /* = 0x05dc = 1500 */ +215c215 +< #define USB_CFG_DEVICE_VERSION 0x05, 0x01 +--- +> #define USB_CFG_DEVICE_VERSION 0x00, 0x01 +218,219c218,219 +< #define USB_CFG_VENDOR_NAME 'A','d','a','f','r','u','i','t' +< #define USB_CFG_VENDOR_NAME_LEN 8 +--- +> #define USB_CFG_VENDOR_NAME 'A','r','d','u','i','n','o','.','c','c' +> #define USB_CFG_VENDOR_NAME_LEN 10 +228,229c228,229 +< #define USB_CFG_DEVICE_NAME 'T','r','i','n','k','e','t' +< #define USB_CFG_DEVICE_NAME_LEN 7 +--- +> #define USB_CFG_DEVICE_NAME 'G','e','m','m','a' +> #define USB_CFG_DEVICE_NAME_LEN 5 diff --git a/external/arduino/avr/bootloaders/lilypad/LilyPadBOOT_168.hex b/external/arduino/avr/bootloaders/lilypad/LilyPadBOOT_168.hex new file mode 100644 index 000000000..0c7a4bd96 --- /dev/null +++ b/external/arduino/avr/bootloaders/lilypad/LilyPadBOOT_168.hex @@ -0,0 +1,117 @@ +:103800000C94341C0C944F1C0C944F1C0C944F1CA7 +:103810000C944F1C0C944F1C0C944F1C0C944F1C7C +:103820000C944F1C0C944F1C0C944F1C0C944F1C6C +:103830000C944F1C0C944F1C0C944F1C0C944F1C5C +:103840000C944F1C0C944F1C0C944F1C0C944F1C4C +:103850000C944F1C0C944F1C0C944F1C0C944F1C3C +:103860000C944F1C0C944F1C11241FBECFEFD4E0BE +:10387000DEBFCDBF11E0A0E0B1E0E8E1FFE302C0B0 +:1038800005900D92A230B107D9F712E0A2E0B1E0A5 +:1038900001C01D92AD30B107E1F70C94311D0C94BD +:1038A000001CCF93DF93CDB7DEB724970FB6F89403 +:1038B000DEBF0FBECDBF382F882309F433E010924E +:1038C0000A02332309F44BC020E02D9A19821A8290 +:1038D0001B821C8289819A81AB81BC8180549F416B +:1038E000A040B040A0F489819A81AB81BC8101964F +:1038F000A11DB11D89839A83AB83BC8389819A8181 +:10390000AB81BC8180549F41A040B04060F32D98B2 +:1039100019821A821B821C8289819A81AB81BC81A7 +:1039200080549F41A040B040A0F489819A81AB812E +:10393000BC810196A11DB11D89839A83AB83BC8391 +:1039400089819A81AB81BC8180549F41A040B04065 +:1039500060F32F5F231708F4B8CF20930A02249650 +:103960000FB6F894DEBF0FBECDBFDF91CF910895A3 +:10397000EF92FF920F931F93EE24FF248701809113 +:10398000C00087FD17C00894E11CF11C011D111D2A +:1039900081E0E81689E0F8068DE3080780E0180763 +:1039A00070F3E0910201F091030109958091C0004C +:1039B00087FFE9CF8091C600992787FD90951F91D9 +:1039C0000F91FF90EF900895982F8091C00085FF90 +:1039D000FCCF9093C60008950E94B81C803271F00D +:1039E000809104018F5F80930401853009F0089570 +:1039F000E0910201F09103010995089584E10E948C +:103A0000E41C80E10E94E41C08951F93182F0E947B +:103A1000B81C803269F0809104018F5F80930401AB +:103A2000853079F4E0910201F0910301099509C014 +:103A300084E10E94E41C812F0E94E41C80E10E942A +:103A4000E41C1F910895282F882351F090E0809165 +:103A5000C00087FFFCCF8091C6009F5F2917B9F790 +:103A60000895CFEFD4E0DEBFCDBF000089E18093A1 +:103A7000C4001092C50088E18093C10086E0809365 +:103A8000C2005098589A259A83E00E94511C0E94C7 +:103A9000B81C8033B1F18133B9F1803409F454C0DA +:103AA000813409F45AC0823409F469C0853409F4B8 +:103AB0006CC0803531F1813521F1823511F18535C8 +:103AC00009F4B2C0863509F4BAC0843609F463C07B +:103AD000843709F4BBC0853709F40EC1863709F471 +:103AE0004AC0809104018F5F80930401853079F68C +:103AF000E0910201F091030109950E94B81C803306 +:103B000051F60E94EC1CC3CF0E94B81C803249F7CA +:103B100084E10E94E41C81E40E94E41C86E50E948A +:103B2000E41C82E50E94E41C80E20E94E41C89E41B +:103B30000E94E41C83E50E94E41C80E50E94E41CD2 +:103B400080E10E94E41CA3CF0E94B81C8638C8F212 +:103B50000E94B81C0E94EC1C9ACF0E94B81C8038AE +:103B600009F4F7C0813809F4F8C0823809F4F9C0C3 +:103B7000883909F4BDC080E00E94051D88CF84E12A +:103B80000E94231D0E94EC1C82CF85E00E94231D11 +:103B90000E94EC1C7CCF0E94B81C809309020E94FA +:103BA000B81C8093080280910C028E7F80930C02D7 +:103BB0000E94B81C853409F4C6C080910802909117 +:103BC0000902892B09F0ADC00E94B81C803209F0AF +:103BD00088CF80910C0280FFC8C08091080290912C +:103BE00009020097D1F02091060130910701E8E029 +:103BF000F1E0AC014E0F5F1FF999FECF32BD21BD40 +:103C0000819180BDFA9AF99A2F5F3F4F4E175F0757 +:103C100099F7309307012093060184E10E94E41C88 +:103C200080E10E94E41C33CF0E94B81C80930601FF +:103C30000E94B81C809307010E94EC1C28CF84E0EE +:103C40000E94231D80E00E94051D21CF0E94B81C08 +:103C5000809309020E94B81C809308020E94B81C3D +:103C6000853409F4F4C080910C028E7F80930C029D +:103C70008091060190910701880F991F9093070189 +:103C8000809306010E94B81C803209F000CF84E1C5 +:103C90000E94E41C2091080230910902211531058F +:103CA00019F1C0E0D0E0E0910601F09107018091A8 +:103CB0000C0280FFC4C0F999FECFF2BDE1BDF89AB5 +:103CC00080B50E94E41CE0910601F0910701319655 +:103CD000F0930701E0930601209108023091090258 +:103CE0002196C217D30718F380E10E94E41CCFCEBF +:103CF00083E00E94051DCBCE0E94B81C803209F0E3 +:103D0000F0CE84E10E94E41C8EE10E94E41C84E970 +:103D10000E94E41C86E00E94E41C80E10E94E41CF6 +:103D2000B6CEC0E0D0E008E011E00E94B81CF80177 +:103D300081938F0121968091080290910902C81702 +:103D4000D90798F341CF80910C02816080930C02D7 +:103D500034CF82E00E94051D9ACE81E00E94051DAD +:103D600096CE80E10E94051D92CE8091070187FDCD +:103D700080C010920B028091060190910701880F7C +:103D8000991F90930701809306018091080280FF9C +:103D900009C080910802909109020196909309024E +:103DA00080930802F894F999FECF1127E09106015B +:103DB000F0910701C8E0D1E08091080290910902DA +:103DC000103091F40091570001700130D9F303E0F5 +:103DD00000935700E8950091570001700130D9F326 +:103DE00001E100935700E895099019900091570060 +:103DF00001700130D9F301E000935700E895139565 +:103E0000103498F011270091570001700130D9F358 +:103E100005E000935700E8950091570001700130CC +:103E2000D9F301E100935700E8953296029709F023 +:103E3000C7CF103011F00296E5CF1124EECE81FFEE +:103E40000CC03196F0930701E093060149CF8091B1 +:103E50000C02816080930C0215CF84910E94E41CB7 +:103E60002091080230910902E0910601F0910701CA +:103E7000E8CF81E080930B027ECF0F931F930E94C7 +:103E8000B81C182F0E94E41C0E94B81C082F0E9426 +:103E9000E41C11362CF0175501363CF0075508C0CC +:103EA0001033D4F310530136CCF700330CF0005329 +:103EB0001295107F100F812F992787FD90951F91E4 +:103EC0000F9108951F93282F992787FD9095807F44 +:103ED00090709595879595958795959587959595E6 +:103EE00087958A304CF0982F995A822F8F708A309C +:103EF0004CF0182F195A08C0982F905D822F8F70A0 +:103F00008A30BCF7182F105D892F0E94E41C812F86 +:083F10000E94E41C1F910895BA +:023F1800800027 +:0400000300003800C1 +:00000001FF diff --git a/external/arduino/avr/bootloaders/lilypad/src/ATmegaBOOT.c b/external/arduino/avr/bootloaders/lilypad/src/ATmegaBOOT.c new file mode 100644 index 000000000..415babee7 --- /dev/null +++ b/external/arduino/avr/bootloaders/lilypad/src/ATmegaBOOT.c @@ -0,0 +1,977 @@ +/**********************************************************/ +/* Serial Bootloader for Atmel megaAVR Controllers */ +/* */ +/* tested with ATmega8, ATmega128 and ATmega168 */ +/* should work with other mega's, see code for details */ +/* */ +/* ATmegaBOOT.c */ +/* */ +/* 20070626: hacked for Arduino Diecimila (which auto- */ +/* resets when a USB connection is made to it) */ +/* by D. Mellis */ +/* 20060802: hacked for Arduino by D. Cuartielles */ +/* based on a previous hack by D. Mellis */ +/* and D. Cuartielles */ +/* */ +/* Monitor and debug functions were added to the original */ +/* code by Dr. Erik Lins, chip45.com. (See below) */ +/* */ +/* Thanks to Karl Pitrich for fixing a bootloader pin */ +/* problem and more informative LED blinking! */ +/* */ +/* For the latest version see: */ +/* http://www.chip45.com/ */ +/* */ +/* ------------------------------------------------------ */ +/* */ +/* based on stk500boot.c */ +/* Copyright (c) 2003, Jason P. Kyle */ +/* All rights reserved. */ +/* see avr1.org for original file and information */ +/* */ +/* This program is free software; you can redistribute it */ +/* and/or modify it under the terms of the GNU General */ +/* Public License as published by the Free Software */ +/* Foundation; either version 2 of the License, or */ +/* (at your option) any later version. */ +/* */ +/* This program is distributed in the hope that it will */ +/* be useful, but WITHOUT ANY WARRANTY; without even the */ +/* implied warranty of MERCHANTABILITY or FITNESS FOR A */ +/* PARTICULAR PURPOSE. See the GNU General Public */ +/* License for more details. */ +/* */ +/* You should have received a copy of the GNU General */ +/* Public License along with this program; if not, write */ +/* to the Free Software Foundation, Inc., */ +/* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +/* */ +/* Licence can be viewed at */ +/* http://www.fsf.org/licenses/gpl.txt */ +/* */ +/* Target = Atmel AVR m128,m64,m32,m16,m8,m162,m163,m169, */ +/* m8515,m8535. ATmega161 has a very small boot block so */ +/* isn't supported. */ +/* */ +/* Tested with m168 */ +/**********************************************************/ + + +/* some includes */ +#include +#include +#include +#include +#include + + +/* the current avr-libc eeprom functions do not support the ATmega168 */ +/* own eeprom write/read functions are used instead */ +#ifndef __AVR_ATmega168__ +#include +#endif + +/* Use the F_CPU defined in Makefile */ + +/* 20060803: hacked by DojoCorp */ +/* 20070626: hacked by David A. Mellis to decrease waiting time for auto-reset */ +/* set the waiting time for the bootloader */ +/* get this from the Makefile instead */ +/* #define MAX_TIME_COUNT (F_CPU>>4) */ + +/* 20070707: hacked by David A. Mellis - after this many errors give up and launch application */ +#define MAX_ERROR_COUNT 5 + +/* set the UART baud rate */ +/* 20060803: hacked by DojoCorp */ +//#define BAUD_RATE 115200 +#define BAUD_RATE 19200 + + +/* SW_MAJOR and MINOR needs to be updated from time to time to avoid warning message from AVR Studio */ +/* never allow AVR Studio to do an update !!!! */ +#define HW_VER 0x02 +#define SW_MAJOR 0x01 +#define SW_MINOR 0x10 + + +/* Adjust to suit whatever pin your hardware uses to enter the bootloader */ +/* ATmega128 has two UARTS so two pins are used to enter bootloader and select UART */ +/* BL0... means UART0, BL1... means UART1 */ +#ifdef __AVR_ATmega128__ +#define BL_DDR DDRF +#define BL_PORT PORTF +#define BL_PIN PINF +#define BL0 PINF7 +#define BL1 PINF6 +#else +/* other ATmegas have only one UART, so only one pin is defined to enter bootloader */ +#define BL_DDR DDRD +#define BL_PORT PORTD +#define BL_PIN PIND +#define BL PIND6 +#endif + + +/* onboard LED is used to indicate, that the bootloader was entered (3x flashing) */ +/* if monitor functions are included, LED goes on after monitor was entered */ +#ifdef __AVR_ATmega128__ +/* Onboard LED is connected to pin PB7 (e.g. Crumb128, PROBOmega128, Savvy128) */ +#define LED_DDR DDRB +#define LED_PORT PORTB +#define LED_PIN PINB +#define LED PINB7 +#else +/* Onboard LED is connected to pin PB2 (e.g. Crumb8, Crumb168) */ +#define LED_DDR DDRB +#define LED_PORT PORTB +#define LED_PIN PINB +/* 20060803: hacked by DojoCorp, LED pin is B5 in Arduino */ +/* #define LED PINB2 */ +#define LED PINB5 +#endif + + +/* monitor functions will only be compiled when using ATmega128, due to bootblock size constraints */ +#ifdef __AVR_ATmega128__ +#define MONITOR +#endif + + +/* define various device id's */ +/* manufacturer byte is always the same */ +#define SIG1 0x1E // Yep, Atmel is the only manufacturer of AVR micros. Single source :( + +#if defined __AVR_ATmega128__ +#define SIG2 0x97 +#define SIG3 0x02 +#define PAGE_SIZE 0x80U //128 words + +#elif defined __AVR_ATmega64__ +#define SIG2 0x96 +#define SIG3 0x02 +#define PAGE_SIZE 0x80U //128 words + +#elif defined __AVR_ATmega32__ +#define SIG2 0x95 +#define SIG3 0x02 +#define PAGE_SIZE 0x40U //64 words + +#elif defined __AVR_ATmega16__ +#define SIG2 0x94 +#define SIG3 0x03 +#define PAGE_SIZE 0x40U //64 words + +#elif defined __AVR_ATmega8__ +#define SIG2 0x93 +#define SIG3 0x07 +#define PAGE_SIZE 0x20U //32 words + +#elif defined __AVR_ATmega88__ +#define SIG2 0x93 +#define SIG3 0x0a +#define PAGE_SIZE 0x20U //32 words + +#elif defined __AVR_ATmega168__ +#define SIG2 0x94 +#define SIG3 0x06 +#define PAGE_SIZE 0x40U //64 words + +#elif defined __AVR_ATmega162__ +#define SIG2 0x94 +#define SIG3 0x04 +#define PAGE_SIZE 0x40U //64 words + +#elif defined __AVR_ATmega163__ +#define SIG2 0x94 +#define SIG3 0x02 +#define PAGE_SIZE 0x40U //64 words + +#elif defined __AVR_ATmega169__ +#define SIG2 0x94 +#define SIG3 0x05 +#define PAGE_SIZE 0x40U //64 words + +#elif defined __AVR_ATmega8515__ +#define SIG2 0x93 +#define SIG3 0x06 +#define PAGE_SIZE 0x20U //32 words + +#elif defined __AVR_ATmega8535__ +#define SIG2 0x93 +#define SIG3 0x08 +#define PAGE_SIZE 0x20U //32 words +#endif + + +/* function prototypes */ +void putch(char); +char getch(void); +void getNch(uint8_t); +void byte_response(uint8_t); +void nothing_response(void); +char gethex(void); +void puthex(char); +void flash_led(uint8_t); + +/* some variables */ +union address_union { + uint16_t word; + uint8_t byte[2]; +} address; + +union length_union { + uint16_t word; + uint8_t byte[2]; +} length; + +struct flags_struct { + unsigned eeprom : 1; + unsigned rampz : 1; +} flags; + +uint8_t buff[256]; +uint8_t address_high; + +uint8_t pagesz=0x80; + +uint8_t i; +uint8_t bootuart = 0; + +uint8_t error_count = 0; + +void (*app_start)(void) = 0x0000; + + +/* main program starts here */ +int main(void) +{ + uint8_t ch,ch2; + uint16_t w; + + asm volatile("nop\n\t"); + + /* set pin direction for bootloader pin and enable pullup */ + /* for ATmega128, two pins need to be initialized */ +#ifdef __AVR_ATmega128__ + BL_DDR &= ~_BV(BL0); + BL_DDR &= ~_BV(BL1); + BL_PORT |= _BV(BL0); + BL_PORT |= _BV(BL1); +#else + /* We run the bootloader regardless of the state of this pin. Thus, don't + put it in a different state than the other pins. --DAM, 070709 + BL_DDR &= ~_BV(BL); + BL_PORT |= _BV(BL); + */ +#endif + + +#ifdef __AVR_ATmega128__ + /* check which UART should be used for booting */ + if(bit_is_clear(BL_PIN, BL0)) { + bootuart = 1; + } + else if(bit_is_clear(BL_PIN, BL1)) { + bootuart = 2; + } +#endif + + /* check if flash is programmed already, if not start bootloader anyway */ + if(pgm_read_byte_near(0x0000) != 0xFF) { + +#ifdef __AVR_ATmega128__ + /* no UART was selected, start application */ + if(!bootuart) { + app_start(); + } +#else + /* check if bootloader pin is set low */ + /* we don't start this part neither for the m8, nor m168 */ + //if(bit_is_set(BL_PIN, BL)) { + // app_start(); + // } +#endif + } + +#ifdef __AVR_ATmega128__ + /* no bootuart was selected, default to uart 0 */ + if(!bootuart) { + bootuart = 1; + } +#endif + + + /* initialize UART(s) depending on CPU defined */ +#ifdef __AVR_ATmega128__ + if(bootuart == 1) { + UBRR0L = (uint8_t)(F_CPU/(BAUD_RATE*16L)-1); + UBRR0H = (F_CPU/(BAUD_RATE*16L)-1) >> 8; + UCSR0A = 0x00; + UCSR0C = 0x06; + UCSR0B = _BV(TXEN0)|_BV(RXEN0); + } + if(bootuart == 2) { + UBRR1L = (uint8_t)(F_CPU/(BAUD_RATE*16L)-1); + UBRR1H = (F_CPU/(BAUD_RATE*16L)-1) >> 8; + UCSR1A = 0x00; + UCSR1C = 0x06; + UCSR1B = _BV(TXEN1)|_BV(RXEN1); + } +#elif defined __AVR_ATmega163__ + UBRR = (uint8_t)(F_CPU/(BAUD_RATE*16L)-1); + UBRRHI = (F_CPU/(BAUD_RATE*16L)-1) >> 8; + UCSRA = 0x00; + UCSRB = _BV(TXEN)|_BV(RXEN); +#elif defined __AVR_ATmega168__ + UBRR0L = (uint8_t)(F_CPU/(BAUD_RATE*16L)-1); + UBRR0H = (F_CPU/(BAUD_RATE*16L)-1) >> 8; + UCSR0B = (1<>8; // set baud rate + UBRRL = (((F_CPU/BAUD_RATE)/16)-1); + UCSRB = (1<> 8; + UCSRA = 0x00; + UCSRC = 0x06; + UCSRB = _BV(TXEN)|_BV(RXEN); +#endif + + /* set LED pin as output */ + LED_DDR |= _BV(LED); + + + /* flash onboard LED to signal entering of bootloader */ +#ifdef __AVR_ATmega128__ + // 4x for UART0, 5x for UART1 + flash_led(NUM_LED_FLASHES + bootuart); +#else + flash_led(NUM_LED_FLASHES); +#endif + + /* 20050803: by DojoCorp, this is one of the parts provoking the + system to stop listening, cancelled from the original */ + //putch('\0'); + + + /* forever loop */ + for (;;) { + + /* get character from UART */ + ch = getch(); + + /* A bunch of if...else if... gives smaller code than switch...case ! */ + + /* Hello is anyone home ? */ + if(ch=='0') { + nothing_response(); + } + + + /* Request programmer ID */ + /* Not using PROGMEM string due to boot block in m128 being beyond 64kB boundry */ + /* Would need to selectively manipulate RAMPZ, and it's only 9 characters anyway so who cares. */ + else if(ch=='1') { + if (getch() == ' ') { + putch(0x14); + putch('A'); + putch('V'); + putch('R'); + putch(' '); + putch('I'); + putch('S'); + putch('P'); + putch(0x10); + } else { + if (++error_count == MAX_ERROR_COUNT) + app_start(); + } + } + + + /* AVR ISP/STK500 board commands DON'T CARE so default nothing_response */ + else if(ch=='@') { + ch2 = getch(); + if (ch2>0x85) getch(); + nothing_response(); + } + + + /* AVR ISP/STK500 board requests */ + else if(ch=='A') { + ch2 = getch(); + if(ch2==0x80) byte_response(HW_VER); // Hardware version + else if(ch2==0x81) byte_response(SW_MAJOR); // Software major version + else if(ch2==0x82) byte_response(SW_MINOR); // Software minor version + else if(ch2==0x98) byte_response(0x03); // Unknown but seems to be required by avr studio 3.56 + else byte_response(0x00); // Covers various unnecessary responses we don't care about + } + + + /* Device Parameters DON'T CARE, DEVICE IS FIXED */ + else if(ch=='B') { + getNch(20); + nothing_response(); + } + + + /* Parallel programming stuff DON'T CARE */ + else if(ch=='E') { + getNch(5); + nothing_response(); + } + + + /* Enter programming mode */ + else if(ch=='P') { + nothing_response(); + } + + + /* Leave programming mode */ + else if(ch=='Q') { + nothing_response(); + } + + + /* Erase device, don't care as we will erase one page at a time anyway. */ + else if(ch=='R') { + nothing_response(); + } + + + /* Set address, little endian. EEPROM in bytes, FLASH in words */ + /* Perhaps extra address bytes may be added in future to support > 128kB FLASH. */ + /* This might explain why little endian was used here, big endian used everywhere else. */ + else if(ch=='U') { + address.byte[0] = getch(); + address.byte[1] = getch(); + nothing_response(); + } + + + /* Universal SPI programming command, disabled. Would be used for fuses and lock bits. */ + else if(ch=='V') { + getNch(4); + byte_response(0x00); + } + + + /* Write memory, length is big endian and is in bytes */ + else if(ch=='d') { + length.byte[1] = getch(); + length.byte[0] = getch(); + flags.eeprom = 0; + if (getch() == 'E') flags.eeprom = 1; + for (w=0;w127) address_high = 0x01; //Only possible with m128, m256 will need 3rd address byte. FIXME + else address_high = 0x00; +#ifdef __AVR_ATmega128__ + RAMPZ = address_high; +#endif + address.word = address.word << 1; //address * 2 -> byte location + /* if ((length.byte[0] & 0x01) == 0x01) length.word++; //Even up an odd number of bytes */ + if ((length.byte[0] & 0x01)) length.word++; //Even up an odd number of bytes + cli(); //Disable interrupts, just to be sure + // HACKME: EEPE used to be EEWE + while(bit_is_set(EECR,EEPE)); //Wait for previous EEPROM writes to complete + asm volatile( + "clr r17 \n\t" //page_word_count + "lds r30,address \n\t" //Address of FLASH location (in bytes) + "lds r31,address+1 \n\t" + "ldi r28,lo8(buff) \n\t" //Start of buffer array in RAM + "ldi r29,hi8(buff) \n\t" + "lds r24,length \n\t" //Length of data to be written (in bytes) + "lds r25,length+1 \n\t" + "length_loop: \n\t" //Main loop, repeat for number of words in block + "cpi r17,0x00 \n\t" //If page_word_count=0 then erase page + "brne no_page_erase \n\t" + "wait_spm1: \n\t" + "lds r16,%0 \n\t" //Wait for previous spm to complete + "andi r16,1 \n\t" + "cpi r16,1 \n\t" + "breq wait_spm1 \n\t" + "ldi r16,0x03 \n\t" //Erase page pointed to by Z + "sts %0,r16 \n\t" + "spm \n\t" +#ifdef __AVR_ATmega163__ + ".word 0xFFFF \n\t" + "nop \n\t" +#endif + "wait_spm2: \n\t" + "lds r16,%0 \n\t" //Wait for previous spm to complete + "andi r16,1 \n\t" + "cpi r16,1 \n\t" + "breq wait_spm2 \n\t" + + "ldi r16,0x11 \n\t" //Re-enable RWW section + "sts %0,r16 \n\t" + "spm \n\t" +#ifdef __AVR_ATmega163__ + ".word 0xFFFF \n\t" + "nop \n\t" +#endif + "no_page_erase: \n\t" + "ld r0,Y+ \n\t" //Write 2 bytes into page buffer + "ld r1,Y+ \n\t" + + "wait_spm3: \n\t" + "lds r16,%0 \n\t" //Wait for previous spm to complete + "andi r16,1 \n\t" + "cpi r16,1 \n\t" + "breq wait_spm3 \n\t" + "ldi r16,0x01 \n\t" //Load r0,r1 into FLASH page buffer + "sts %0,r16 \n\t" + "spm \n\t" + + "inc r17 \n\t" //page_word_count++ + "cpi r17,%1 \n\t" + "brlo same_page \n\t" //Still same page in FLASH + "write_page: \n\t" + "clr r17 \n\t" //New page, write current one first + "wait_spm4: \n\t" + "lds r16,%0 \n\t" //Wait for previous spm to complete + "andi r16,1 \n\t" + "cpi r16,1 \n\t" + "breq wait_spm4 \n\t" +#ifdef __AVR_ATmega163__ + "andi r30,0x80 \n\t" // m163 requires Z6:Z1 to be zero during page write +#endif + "ldi r16,0x05 \n\t" //Write page pointed to by Z + "sts %0,r16 \n\t" + "spm \n\t" +#ifdef __AVR_ATmega163__ + ".word 0xFFFF \n\t" + "nop \n\t" + "ori r30,0x7E \n\t" // recover Z6:Z1 state after page write (had to be zero during write) +#endif + "wait_spm5: \n\t" + "lds r16,%0 \n\t" //Wait for previous spm to complete + "andi r16,1 \n\t" + "cpi r16,1 \n\t" + "breq wait_spm5 \n\t" + "ldi r16,0x11 \n\t" //Re-enable RWW section + "sts %0,r16 \n\t" + "spm \n\t" +#ifdef __AVR_ATmega163__ + ".word 0xFFFF \n\t" + "nop \n\t" +#endif + "same_page: \n\t" + "adiw r30,2 \n\t" //Next word in FLASH + "sbiw r24,2 \n\t" //length-2 + "breq final_write \n\t" //Finished + "rjmp length_loop \n\t" + "final_write: \n\t" + "cpi r17,0 \n\t" + "breq block_done \n\t" + "adiw r24,2 \n\t" //length+2, fool above check on length after short page write + "rjmp write_page \n\t" + "block_done: \n\t" + "clr __zero_reg__ \n\t" //restore zero register +#if defined __AVR_ATmega168__ + : "=m" (SPMCSR) : "M" (PAGE_SIZE) : "r0","r16","r17","r24","r25","r28","r29","r30","r31" +#else + : "=m" (SPMCR) : "M" (PAGE_SIZE) : "r0","r16","r17","r24","r25","r28","r29","r30","r31" +#endif + ); + /* Should really add a wait for RWW section to be enabled, don't actually need it since we never */ + /* exit the bootloader without a power cycle anyhow */ + } + putch(0x14); + putch(0x10); + } else { + if (++error_count == MAX_ERROR_COUNT) + app_start(); + } + } + + + /* Read memory block mode, length is big endian. */ + else if(ch=='t') { + length.byte[1] = getch(); + length.byte[0] = getch(); +#if defined __AVR_ATmega128__ + if (address.word>0x7FFF) flags.rampz = 1; // No go with m256, FIXME + else flags.rampz = 0; +#endif + if (getch() == 'E') flags.eeprom = 1; + else { + flags.eeprom = 0; + address.word = address.word << 1; // address * 2 -> byte location + } + if (getch() == ' ') { // Command terminator + putch(0x14); + for (w=0;w < length.word;w++) { // Can handle odd and even lengths okay + if (flags.eeprom) { // Byte access EEPROM read +#ifdef __AVR_ATmega168__ + while(EECR & (1<= 'a') { + ah = ah - 'a' + 0x0a; + } else if(ah >= '0') { + ah -= '0'; + } + if(al >= 'a') { + al = al - 'a' + 0x0a; + } else if(al >= '0') { + al -= '0'; + } + return (ah << 4) + al; +} + + +void puthex(char ch) { + char ah,al; + + ah = (ch & 0xf0) >> 4; + if(ah >= 0x0a) { + ah = ah - 0x0a + 'a'; + } else { + ah += '0'; + } + al = (ch & 0x0f); + if(al >= 0x0a) { + al = al - 0x0a + 'a'; + } else { + al += '0'; + } + putch(ah); + putch(al); +} + + +void putch(char ch) +{ +#ifdef __AVR_ATmega128__ + if(bootuart == 1) { + while (!(UCSR0A & _BV(UDRE0))); + UDR0 = ch; + } + else if (bootuart == 2) { + while (!(UCSR1A & _BV(UDRE1))); + UDR1 = ch; + } +#elif defined __AVR_ATmega168__ + while (!(UCSR0A & _BV(UDRE0))); + UDR0 = ch; +#else + /* m8,16,32,169,8515,8535,163 */ + while (!(UCSRA & _BV(UDRE))); + UDR = ch; +#endif +} + + +char getch(void) +{ +#ifdef __AVR_ATmega128__ + if(bootuart == 1) { + while(!(UCSR0A & _BV(RXC0))); + return UDR0; + } + else if(bootuart == 2) { + while(!(UCSR1A & _BV(RXC1))); + return UDR1; + } + return 0; +#elif defined __AVR_ATmega168__ + uint32_t count = 0; + while(!(UCSR0A & _BV(RXC0))){ + /* 20060803 DojoCorp:: Addon coming from the previous Bootloader*/ + /* HACKME:: here is a good place to count times*/ + count++; + if (count > MAX_TIME_COUNT) + app_start(); + } + return UDR0; +#else + /* m8,16,32,169,8515,8535,163 */ + uint32_t count = 0; + while(!(UCSRA & _BV(RXC))){ + /* 20060803 DojoCorp:: Addon coming from the previous Bootloader*/ + /* HACKME:: here is a good place to count times*/ + count++; + if (count > MAX_TIME_COUNT) + app_start(); + } + return UDR; +#endif +} + + +void getNch(uint8_t count) +{ + uint8_t i; + for(i=0;i $@ + +%.srec: %.elf + $(OBJCOPY) -j .text -j .data -O srec $< $@ + +%.bin: %.elf + $(OBJCOPY) -j .text -j .data -O binary $< $@ + +clean: + rm -rf *.o *.elf *.lst *.map *.sym *.lss *.eep *.srec *.bin *.hex + +install: + avrdude -p m168 -c stk500v2 -P /dev/cu.USA19H1b1P1.1 -e -u -U lock:w:0x3f:m -U efuse:w:0x00:m -U hfuse:w:0xdd:m -U lfuse:w:0xe2:m + avrdude -p m168 -c stk500v2 -P /dev/cu.USA19H1b1P1.1 -e -u -U flash:w:ATmegaBOOT_168.hex -U lock:w:0x0f:m diff --git a/external/arduino/avr/bootloaders/optiboot/Makefile b/external/arduino/avr/bootloaders/optiboot/Makefile new file mode 100644 index 000000000..f8d137de9 --- /dev/null +++ b/external/arduino/avr/bootloaders/optiboot/Makefile @@ -0,0 +1,450 @@ +# Makefile for ATmegaBOOT +# E.Lins, 18.7.2005 +# +# Instructions +# +# To make bootloader .hex file: +# make diecimila +# make lilypad +# make ng +# etc... +# +# To burn bootloader .hex file: +# make diecimila_isp +# make lilypad_isp +# make ng_isp +# etc... + +# program name should not be changed... +PROGRAM = optiboot + +# The default behavior is to build using tools that are in the users +# current path variables, but we can also build using an installed +# Arduino user IDE setup, or the Arduino source tree. +# Uncomment this next lines to build within the arduino environment, +# using the arduino-included avrgcc toolset (mac and pc) +# ENV ?= arduino +# ENV ?= arduinodev +# OS ?= macosx +# OS ?= windows + + +# enter the parameters for the avrdude isp tool +ISPTOOL = stk500v2 +ISPPORT = usb +ISPSPEED = -b 115200 + +MCU_TARGET = atmega168 +LDSECTIONS = -Wl,--section-start=.text=0x3e00 -Wl,--section-start=.version=0x3ffe + +# Build environments +# Start of some ugly makefile-isms to allow optiboot to be built +# in several different environments. See the README.TXT file for +# details. + +# default +fixpath = $(1) + +ifeq ($(ENV), arduino) +# For Arduino, we assume that we're connected to the optiboot directory +# included with the arduino distribution, which means that the full set +# of avr-tools are "right up there" in standard places. +TOOLROOT = ../../../tools +GCCROOT = $(TOOLROOT)/avr/bin/ +AVRDUDE_CONF = -C$(TOOLROOT)/avr/etc/avrdude.conf + +ifeq ($(OS), windows) +# On windows, SOME of the tool paths will need to have backslashes instead +# of forward slashes (because they use windows cmd.exe for execution instead +# of a unix/mingw shell?) We also have to ensure that a consistent shell +# is used even if a unix shell is installed (ie as part of WINAVR) +fixpath = $(subst /,\,$1) +SHELL = cmd.exe +endif + +else ifeq ($(ENV), arduinodev) +# Arduino IDE source code environment. Use the unpacked compilers created +# by the build (you'll need to do "ant build" first.) +ifeq ($(OS), macosx) +TOOLROOT = ../../../../build/macosx/work/Arduino.app/Contents/Resources/Java/hardware/tools +endif +ifeq ($(OS), windows) +TOOLROOT = ../../../../build/windows/work/hardware/tools +endif + +GCCROOT = $(TOOLROOT)/avr/bin/ +AVRDUDE_CONF = -C$(TOOLROOT)/avr/etc/avrdude.conf + +else +GCCROOT = +AVRDUDE_CONF = +endif +# +# End of build environment code. + + +# the efuse should really be 0xf8; since, however, only the lower +# three bits of that byte are used on the atmega168, avrdude gets +# confused if you specify 1's for the higher bits, see: +# http://tinker.it/now/2007/02/24/the-tale-of-avrdude-atmega168-and-extended-bits-fuses/ +# +# similarly, the lock bits should be 0xff instead of 0x3f (to +# unlock the bootloader section) and 0xcf instead of 0x2f (to +# lock it), but since the high two bits of the lock byte are +# unused, avrdude would get confused. + +ISPFUSES = $(GCCROOT)avrdude $(AVRDUDE_CONF) -c $(ISPTOOL) \ + -p $(MCU_TARGET) -P $(ISPPORT) $(ISPSPEED) \ + -e -u -U lock:w:0x3f:m -U efuse:w:0x$(EFUSE):m \ + -U hfuse:w:0x$(HFUSE):m -U lfuse:w:0x$(LFUSE):m +ISPFLASH = $(GCCROOT)avrdude $(AVRDUDE_CONF) -c $(ISPTOOL) \ + -p $(MCU_TARGET) -P $(ISPPORT) $(ISPSPEED) \ + -U flash:w:$(PROGRAM)_$(TARGET).hex -U lock:w:0x2f:m + +STK500 = "C:\Program Files\Atmel\AVR Tools\STK500\Stk500.exe" +STK500-1 = $(STK500) -e -d$(MCU_TARGET) -pf -vf -if$(PROGRAM)_$(TARGET).hex \ +-lFF -LFF -f$(HFUSE)$(LFUSE) -EF8 -ms -q -cUSB -I200kHz -s -wt +STK500-2 = $(STK500) -d$(MCU_TARGET) -ms -q -lCF -LCF -cUSB -I200kHz -s -wt + +OBJ = $(PROGRAM).o +OPTIMIZE = -Os -fno-inline-small-functions -fno-split-wide-types -mshort-calls + +DEFS = +LIBS = + +CC = $(GCCROOT)avr-gcc + +# Override is only needed by avr-lib build system. + +override CFLAGS = -g -Wall $(OPTIMIZE) -mmcu=$(MCU_TARGET) -DF_CPU=$(AVR_FREQ) $(DEFS) +override LDFLAGS = $(LDSECTIONS) -Wl,--relax -Wl,--gc-sections -nostartfiles -nostdlib + +OBJCOPY = $(GCCROOT)avr-objcopy +OBJDUMP = $(call fixpath,$(GCCROOT)avr-objdump) + +SIZE = $(GCCROOT)avr-size + +# Test platforms +# Virtual boot block test +virboot328: TARGET = atmega328 +virboot328: MCU_TARGET = atmega328p +virboot328: CFLAGS += '-DLED_START_FLASHES=3' '-DBAUD_RATE=115200' '-DVIRTUAL_BOOT' +virboot328: AVR_FREQ = 16000000L +virboot328: LDSECTIONS = -Wl,--section-start=.text=0x7e00 -Wl,--section-start=.version=0x7ffe +virboot328: $(PROGRAM)_atmega328.hex +virboot328: $(PROGRAM)_atmega328.lst + +# 20MHz clocked platforms +# +# These are capable of 230400 baud, or 115200 baud on PC (Arduino Avrdude issue) +# + +pro20: TARGET = pro_20mhz +pro20: MCU_TARGET = atmega168 +pro20: CFLAGS += '-DLED_START_FLASHES=3' '-DBAUD_RATE=115200' +pro20: AVR_FREQ = 20000000L +pro20: $(PROGRAM)_pro_20mhz.hex +pro20: $(PROGRAM)_pro_20mhz.lst + +pro20_isp: pro20 +pro20_isp: TARGET = pro_20mhz +# 2.7V brownout +pro20_isp: HFUSE = DD +# Full swing xtal (20MHz) 258CK/14CK+4.1ms +pro20_isp: LFUSE = C6 +# 512 byte boot +pro20_isp: EFUSE = 04 +pro20_isp: isp + +# 16MHz clocked platforms +# +# These are capable of 230400 baud, or 115200 baud on PC (Arduino Avrdude issue) +# + +pro16: TARGET = pro_16MHz +pro16: MCU_TARGET = atmega168 +pro16: CFLAGS += '-DLED_START_FLASHES=3' '-DBAUD_RATE=115200' +pro16: AVR_FREQ = 16000000L +pro16: $(PROGRAM)_pro_16MHz.hex +pro16: $(PROGRAM)_pro_16MHz.lst + +pro16_isp: pro16 +pro16_isp: TARGET = pro_16MHz +# 2.7V brownout +pro16_isp: HFUSE = DD +# Full swing xtal (20MHz) 258CK/14CK+4.1ms +pro16_isp: LFUSE = C6 +# 512 byte boot +pro16_isp: EFUSE = 04 +pro16_isp: isp + +# Diecimila, Duemilanove with m168, and NG use identical bootloaders +# Call it "atmega168" for generality and clarity, keep "diecimila" for +# backward compatibility of makefile +# +atmega168: TARGET = atmega168 +atmega168: MCU_TARGET = atmega168 +atmega168: CFLAGS += '-DLED_START_FLASHES=3' '-DBAUD_RATE=115200' +atmega168: AVR_FREQ = 16000000L +atmega168: $(PROGRAM)_atmega168.hex +atmega168: $(PROGRAM)_atmega168.lst + +atmega168_isp: atmega168 +atmega168_isp: TARGET = atmega168 +# 2.7V brownout +atmega168_isp: HFUSE = DD +# Low power xtal (16MHz) 16KCK/14CK+65ms +atmega168_isp: LFUSE = FF +# 512 byte boot +atmega168_isp: EFUSE = 04 +atmega168_isp: isp + +diecimila: TARGET = diecimila +diecimila: MCU_TARGET = atmega168 +diecimila: CFLAGS += '-DLED_START_FLASHES=3' '-DBAUD_RATE=115200' +diecimila: AVR_FREQ = 16000000L +diecimila: $(PROGRAM)_diecimila.hex +diecimila: $(PROGRAM)_diecimila.lst + +diecimila_isp: diecimila +diecimila_isp: TARGET = diecimila +# 2.7V brownout +diecimila_isp: HFUSE = DD +# Low power xtal (16MHz) 16KCK/14CK+65ms +diecimila_isp: LFUSE = FF +# 512 byte boot +diecimila_isp: EFUSE = 04 +diecimila_isp: isp + +atmega328: TARGET = atmega328 +atmega328: MCU_TARGET = atmega328p +atmega328: CFLAGS += '-DLED_START_FLASHES=3' '-DBAUD_RATE=115200' +atmega328: AVR_FREQ = 16000000L +atmega328: LDSECTIONS = -Wl,--section-start=.text=0x7e00 -Wl,--section-start=.version=0x7ffe +atmega328: $(PROGRAM)_atmega328.hex +atmega328: $(PROGRAM)_atmega328.lst + +atmega328_isp: atmega328 +atmega328_isp: TARGET = atmega328 +atmega328_isp: MCU_TARGET = atmega328p +# 512 byte boot, SPIEN +atmega328_isp: HFUSE = DE +# Low power xtal (16MHz) 16KCK/14CK+65ms +atmega328_isp: LFUSE = FF +# 2.7V brownout +atmega328_isp: EFUSE = 05 +atmega328_isp: isp + +# Sanguino has a minimum boot size of 1024 bytes, so enable extra functions +# +sanguino: TARGET = atmega644p +sanguino: MCU_TARGET = atmega644p +sanguino: CFLAGS += '-DLED_START_FLASHES=3' '-DBAUD_RATE=115200' '-DBIGBOOT' +sanguino: AVR_FREQ = 16000000L +sanguino: LDSECTIONS = -Wl,--section-start=.text=0xfc00 +sanguino: $(PROGRAM)_atmega644p.hex +sanguino: $(PROGRAM)_atmega644p.lst + +sanguino_isp: sanguino +sanguino_isp: TARGET = atmega644p +sanguino_isp: MCU_TARGET = atmega644p +# 1024 byte boot +sanguino_isp: HFUSE = DE +# Low power xtal (16MHz) 16KCK/14CK+65ms +sanguino_isp: LFUSE = FF +# 2.7V brownout +sanguino_isp: EFUSE = 05 +sanguino_isp: isp + +# Mega has a minimum boot size of 1024 bytes, so enable extra functions +#mega: TARGET = atmega1280 +mega: MCU_TARGET = atmega1280 +mega: CFLAGS += '-DLED_START_FLASHES=3' '-DBAUD_RATE=115200' '-DBIGBOOT' +mega: AVR_FREQ = 16000000L +mega: LDSECTIONS = -Wl,--section-start=.text=0x1fc00 +mega: $(PROGRAM)_atmega1280.hex +mega: $(PROGRAM)_atmega1280.lst + +mega_isp: mega +mega_isp: TARGET = atmega1280 +mega_isp: MCU_TARGET = atmega1280 +# 1024 byte boot +mega_isp: HFUSE = DE +# Low power xtal (16MHz) 16KCK/14CK+65ms +mega_isp: LFUSE = FF +# 2.7V brownout +mega_isp: EFUSE = 05 +mega_isp: isp + +# ATmega8 +# +atmega8: TARGET = atmega8 +atmega8: MCU_TARGET = atmega8 +atmega8: CFLAGS += '-DLED_START_FLASHES=3' '-DBAUD_RATE=115200' +atmega8: AVR_FREQ = 16000000L +atmega8: LDSECTIONS = -Wl,--section-start=.text=0x1e00 -Wl,--section-start=.version=0x1ffe +atmega8: $(PROGRAM)_atmega8.hex +atmega8: $(PROGRAM)_atmega8.lst + +atmega8_isp: atmega8 +atmega8_isp: TARGET = atmega8 +atmega8_isp: MCU_TARGET = atmega8 +# SPIEN, CKOPT, Bootsize=512B +atmega8_isp: HFUSE = CC +# 2.7V brownout, Low power xtal (16MHz) 16KCK/14CK+65ms +atmega8_isp: LFUSE = BF +atmega8_isp: isp + +# ATmega88 +# +atmega88: TARGET = atmega88 +atmega88: MCU_TARGET = atmega88 +atmega88: CFLAGS += '-DLED_START_FLASHES=3' '-DBAUD_RATE=115200' +atmega88: AVR_FREQ = 16000000L +atmega88: LDSECTIONS = -Wl,--section-start=.text=0x1e00 -Wl,--section-start=.version=0x1ffe +atmega88: $(PROGRAM)_atmega88.hex +atmega88: $(PROGRAM)_atmega88.lst + +atmega88_isp: atmega88 +atmega88_isp: TARGET = atmega88 +atmega88_isp: MCU_TARGET = atmega88 +# 2.7V brownout +atmega88_isp: HFUSE = DD +# Low power xtal (16MHz) 16KCK/14CK+65ms +atemga88_isp: LFUSE = FF +# 512 byte boot +atmega88_isp: EFUSE = 04 +atmega88_isp: isp + + +# 8MHz clocked platforms +# +# These are capable of 115200 baud +# + +lilypad: TARGET = lilypad +lilypad: MCU_TARGET = atmega168 +lilypad: CFLAGS += '-DLED_START_FLASHES=3' '-DBAUD_RATE=115200' +lilypad: AVR_FREQ = 8000000L +lilypad: $(PROGRAM)_lilypad.hex +lilypad: $(PROGRAM)_lilypad.lst + +lilypad_isp: lilypad +lilypad_isp: TARGET = lilypad +# 2.7V brownout +lilypad_isp: HFUSE = DD +# Internal 8MHz osc (8MHz) Slow rising power +lilypad_isp: LFUSE = E2 +# 512 byte boot +lilypad_isp: EFUSE = 04 +lilypad_isp: isp + +lilypad_resonator: TARGET = lilypad_resonator +lilypad_resonator: MCU_TARGET = atmega168 +lilypad_resonator: CFLAGS += '-DLED_START_FLASHES=3' '-DBAUD_RATE=115200' +lilypad_resonator: AVR_FREQ = 8000000L +lilypad_resonator: $(PROGRAM)_lilypad_resonator.hex +lilypad_resonator: $(PROGRAM)_lilypad_resonator.lst + +lilypad_resonator_isp: lilypad_resonator +lilypad_resonator_isp: TARGET = lilypad_resonator +# 2.7V brownout +lilypad_resonator_isp: HFUSE = DD +# Full swing xtal (20MHz) 258CK/14CK+4.1ms +lilypad_resonator_isp: LFUSE = C6 +# 512 byte boot +lilypad_resonator_isp: EFUSE = 04 +lilypad_resonator_isp: isp + +pro8: TARGET = pro_8MHz +pro8: MCU_TARGET = atmega168 +pro8: CFLAGS += '-DLED_START_FLASHES=3' '-DBAUD_RATE=115200' +pro8: AVR_FREQ = 8000000L +pro8: $(PROGRAM)_pro_8MHz.hex +pro8: $(PROGRAM)_pro_8MHz.lst + +pro8_isp: pro8 +pro8_isp: TARGET = pro_8MHz +# 2.7V brownout +pro8_isp: HFUSE = DD +# Full swing xtal (20MHz) 258CK/14CK+4.1ms +pro8_isp: LFUSE = C6 +# 512 byte boot +pro8_isp: EFUSE = 04 +pro8_isp: isp + +atmega328_pro8: TARGET = atmega328_pro_8MHz +atmega328_pro8: MCU_TARGET = atmega328p +atmega328_pro8: CFLAGS += '-DLED_START_FLASHES=3' '-DBAUD_RATE=115200' +atmega328_pro8: AVR_FREQ = 8000000L +atmega328_pro8: LDSECTIONS = -Wl,--section-start=.text=0x7e00 -Wl,--section-start=.version=0x7ffe +atmega328_pro8: $(PROGRAM)_atmega328_pro_8MHz.hex +atmega328_pro8: $(PROGRAM)_atmega328_pro_8MHz.lst + +atmega328_pro8_isp: atmega328_pro8 +atmega328_pro8_isp: TARGET = atmega328_pro_8MHz +atmega328_pro8_isp: MCU_TARGET = atmega328p +# 512 byte boot, SPIEN +atmega328_pro8_isp: HFUSE = DE +# Low power xtal (16MHz) 16KCK/14CK+65ms +atmega328_pro8_isp: LFUSE = FF +# 2.7V brownout +atmega328_pro8_isp: EFUSE = 05 +atmega328_pro8_isp: isp + +# 1MHz clocked platforms +# +# These are capable of 9600 baud +# + +luminet: TARGET = luminet +luminet: MCU_TARGET = attiny84 +luminet: CFLAGS += '-DLED_START_FLASHES=3' '-DSOFT_UART' '-DBAUD_RATE=9600' +luminet: CFLAGS += '-DVIRTUAL_BOOT_PARTITION' +luminet: AVR_FREQ = 1000000L +luminet: LDSECTIONS = -Wl,--section-start=.text=0x1d00 -Wl,--section-start=.version=0x1efe +luminet: $(PROGRAM)_luminet.hex +luminet: $(PROGRAM)_luminet.lst + +luminet_isp: luminet +luminet_isp: TARGET = luminet +luminet_isp: MCU_TARGET = attiny84 +# Brownout disabled +luminet_isp: HFUSE = DF +# 1MHz internal oscillator, slowly rising power +luminet_isp: LFUSE = 62 +# Self-programming enable +luminet_isp: EFUSE = FE +luminet_isp: isp + +# +# Generic build instructions +# +# + +isp: $(TARGET) + $(ISPFUSES) + $(ISPFLASH) + +isp-stk500: $(PROGRAM)_$(TARGET).hex + $(STK500-1) + $(STK500-2) + +%.elf: $(OBJ) + $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(LIBS) + $(SIZE) $@ + +clean: + rm -rf *.o *.elf *.lst *.map *.sym *.lss *.eep *.srec *.bin *.hex + +%.lst: %.elf + $(OBJDUMP) -h -S $< > $@ + +%.hex: %.elf + $(OBJCOPY) -j .text -j .data -j .version --set-section-flags .version=alloc,load -O ihex $< $@ + +%.srec: %.elf + $(OBJCOPY) -j .text -j .data -j .version --set-section-flags .version=alloc,load -O srec $< $@ + +%.bin: %.elf + $(OBJCOPY) -j .text -j .data -j .version --set-section-flags .version=alloc,load -O binary $< $@ diff --git a/external/arduino/avr/bootloaders/optiboot/README.TXT b/external/arduino/avr/bootloaders/optiboot/README.TXT new file mode 100644 index 000000000..cd79cd953 --- /dev/null +++ b/external/arduino/avr/bootloaders/optiboot/README.TXT @@ -0,0 +1,81 @@ +This directory contains the Optiboot small bootloader for AVR +microcontrollers, somewhat modified specifically for the Arduino +environment. + +Optiboot is more fully described here: http://code.google.com/p/optiboot/ +and is the work of Peter Knight (aka Cathedrow), building on work of Jason P +Kyle, Spiff, and Ladyada. Arduino-specific modification are by Bill +Westfield (aka WestfW) + +Arduino-specific issues are tracked as part of the Arduino project +at http://code.google.com/p/arduino + + +------------------------------------------------------------ +Building optiboot for Arduino. + +Production builds of optiboot for Arduino are done on a Mac in "unix mode" +using CrossPack-AVR-20100115. CrossPack tracks WINAVR (for windows), which +is just a package of avr-gcc and related utilities, so similar builds should +work on Windows or Linux systems. + +One of the Arduino-specific changes is modifications to the makefile to +allow building optiboot using only the tools installed as part of the +Arduino environment, or the Arduino source development tree. All three +build procedures should yield identical binaries (.hex files) (although +this may change if compiler versions drift apart between CrossPack and +the Arduino IDE.) + + +Building Optiboot in the Arduino IDE Install. + +Work in the .../hardware/arduino/bootloaders/optiboot/ and use the +"omake " command, which just generates a command that uses +the arduino-included "make" utility with a command like: + make OS=windows ENV=arduino +or make OS=macosx ENV=arduino +On windows, this assumes you're using the windows command shell. If +you're using a cygwin or mingw shell, or have one of those in your +path, the build will probably break due to slash vs backslash issues. +On a Mac, if you have the developer tools installed, you can use the +Apple-supplied version of make. +The makefile uses relative paths ("../../../tools/" and such) to find +the programs it needs, so you need to work in the existing optiboot +directory (or something created at the same "level") for it to work. + + +Building Optiboot in the Arduino Source Development Install. + +In this case, there is no special shell script, and you're assumed to +have "make" installed somewhere in your path. +Build the Arduino source ("ant build") to unpack the tools into the +expected directory. +Work in Arduino/hardware/arduino/bootloaders/optiboot and use + make OS=windows ENV=arduinodev +or make OS=macosx ENV=arduinodev + + +Programming Chips Using the _isp Targets + +The CPU targets have corresponding ISP targets that will actuall +program the bootloader into a chip. "atmega328_isp" for the atmega328, +for example. These will set the fuses and lock bits as appropriate as +well as uploading the bootloader code. + +The makefiles default to using a USB programmer, but you can use +a serial programmer like ArduinoISP by changing the appropriate +variables when you invoke make: + + make ISPTOOL=stk500v1 ISPPORT=/dev/tty.usbserial-A20e1eAN \ + ISPSPEED=-b19200 atmega328_isp + +The "atmega8_isp" target does not currently work, because the mega8 +doesn't have the "extended" fuse that the generic ISP target wants to +pass on to avrdude. You'll need to run avrdude manually. + + +Standard Targets + +I've reduced the pre-built and source-version-controlled targets +(.hex and .lst files included in the git repository) to just the +three basic 16MHz targets: atmega8, atmega16, atmega328. diff --git a/external/arduino/avr/bootloaders/optiboot/boot.h b/external/arduino/avr/bootloaders/optiboot/boot.h new file mode 100644 index 000000000..71170a5df --- /dev/null +++ b/external/arduino/avr/bootloaders/optiboot/boot.h @@ -0,0 +1,846 @@ +/* Modified to use out for SPM access +** Peter Knight, Optiboot project http://optiboot.googlecode.com +** +** Todo: Tidy up +** +** "_short" routines execute 1 cycle faster and use 1 less word of flash +** by using "out" instruction instead of "sts". +** +** Additional elpm variants that trust the value of RAMPZ +*/ + +/* Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007 Eric B. Weddington + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + * Neither the name of the copyright holders nor the names of + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. */ + +#ifndef _AVR_BOOT_H_ +#define _AVR_BOOT_H_ 1 + +/** \file */ +/** \defgroup avr_boot : Bootloader Support Utilities + \code + #include + #include + \endcode + + The macros in this module provide a C language interface to the + bootloader support functionality of certain AVR processors. These + macros are designed to work with all sizes of flash memory. + + Global interrupts are not automatically disabled for these macros. It + is left up to the programmer to do this. See the code example below. + Also see the processor datasheet for caveats on having global interrupts + enabled during writing of the Flash. + + \note Not all AVR processors provide bootloader support. See your + processor datasheet to see if it provides bootloader support. + + \todo From email with Marek: On smaller devices (all except ATmega64/128), + __SPM_REG is in the I/O space, accessible with the shorter "in" and "out" + instructions - since the boot loader has a limited size, this could be an + important optimization. + + \par API Usage Example + The following code shows typical usage of the boot API. + + \code + #include + #include + #include + + void boot_program_page (uint32_t page, uint8_t *buf) + { + uint16_t i; + uint8_t sreg; + + // Disable interrupts. + + sreg = SREG; + cli(); + + eeprom_busy_wait (); + + boot_page_erase (page); + boot_spm_busy_wait (); // Wait until the memory is erased. + + for (i=0; i +#include +#include +#include + +/* Check for SPM Control Register in processor. */ +#if defined (SPMCSR) +# define __SPM_REG SPMCSR +#elif defined (SPMCR) +# define __SPM_REG SPMCR +#else +# error AVR processor does not provide bootloader support! +#endif + + +/* Check for SPM Enable bit. */ +#if defined(SPMEN) +# define __SPM_ENABLE SPMEN +#elif defined(SELFPRGEN) +# define __SPM_ENABLE SELFPRGEN +#else +# error Cannot find SPM Enable bit definition! +#endif + +/** \ingroup avr_boot + \def BOOTLOADER_SECTION + + Used to declare a function or variable to be placed into a + new section called .bootloader. This section and its contents + can then be relocated to any address (such as the bootloader + NRWW area) at link-time. */ + +#define BOOTLOADER_SECTION __attribute__ ((section (".bootloader"))) + +/* Create common bit definitions. */ +#ifdef ASB +#define __COMMON_ASB ASB +#else +#define __COMMON_ASB RWWSB +#endif + +#ifdef ASRE +#define __COMMON_ASRE ASRE +#else +#define __COMMON_ASRE RWWSRE +#endif + +/* Define the bit positions of the Boot Lock Bits. */ + +#define BLB12 5 +#define BLB11 4 +#define BLB02 3 +#define BLB01 2 + +/** \ingroup avr_boot + \def boot_spm_interrupt_enable() + Enable the SPM interrupt. */ + +#define boot_spm_interrupt_enable() (__SPM_REG |= (uint8_t)_BV(SPMIE)) + +/** \ingroup avr_boot + \def boot_spm_interrupt_disable() + Disable the SPM interrupt. */ + +#define boot_spm_interrupt_disable() (__SPM_REG &= (uint8_t)~_BV(SPMIE)) + +/** \ingroup avr_boot + \def boot_is_spm_interrupt() + Check if the SPM interrupt is enabled. */ + +#define boot_is_spm_interrupt() (__SPM_REG & (uint8_t)_BV(SPMIE)) + +/** \ingroup avr_boot + \def boot_rww_busy() + Check if the RWW section is busy. */ + +#define boot_rww_busy() (__SPM_REG & (uint8_t)_BV(__COMMON_ASB)) + +/** \ingroup avr_boot + \def boot_spm_busy() + Check if the SPM instruction is busy. */ + +#define boot_spm_busy() (__SPM_REG & (uint8_t)_BV(__SPM_ENABLE)) + +/** \ingroup avr_boot + \def boot_spm_busy_wait() + Wait while the SPM instruction is busy. */ + +#define boot_spm_busy_wait() do{}while(boot_spm_busy()) + +#define __BOOT_PAGE_ERASE (_BV(__SPM_ENABLE) | _BV(PGERS)) +#define __BOOT_PAGE_WRITE (_BV(__SPM_ENABLE) | _BV(PGWRT)) +#define __BOOT_PAGE_FILL _BV(__SPM_ENABLE) +#define __BOOT_RWW_ENABLE (_BV(__SPM_ENABLE) | _BV(__COMMON_ASRE)) +#define __BOOT_LOCK_BITS_SET (_BV(__SPM_ENABLE) | _BV(BLBSET)) + +#define __boot_page_fill_short(address, data) \ +(__extension__({ \ + __asm__ __volatile__ \ + ( \ + "movw r0, %3\n\t" \ + "out %0, %1\n\t" \ + "spm\n\t" \ + "clr r1\n\t" \ + : \ + : "i" (_SFR_IO_ADDR(__SPM_REG)), \ + "r" ((uint8_t)__BOOT_PAGE_FILL), \ + "z" ((uint16_t)address), \ + "r" ((uint16_t)data) \ + : "r0" \ + ); \ +})) + +#define __boot_page_fill_normal(address, data) \ +(__extension__({ \ + __asm__ __volatile__ \ + ( \ + "movw r0, %3\n\t" \ + "sts %0, %1\n\t" \ + "spm\n\t" \ + "clr r1\n\t" \ + : \ + : "i" (_SFR_MEM_ADDR(__SPM_REG)), \ + "r" ((uint8_t)__BOOT_PAGE_FILL), \ + "z" ((uint16_t)address), \ + "r" ((uint16_t)data) \ + : "r0" \ + ); \ +})) + +#define __boot_page_fill_alternate(address, data)\ +(__extension__({ \ + __asm__ __volatile__ \ + ( \ + "movw r0, %3\n\t" \ + "sts %0, %1\n\t" \ + "spm\n\t" \ + ".word 0xffff\n\t" \ + "nop\n\t" \ + "clr r1\n\t" \ + : \ + : "i" (_SFR_MEM_ADDR(__SPM_REG)), \ + "r" ((uint8_t)__BOOT_PAGE_FILL), \ + "z" ((uint16_t)address), \ + "r" ((uint16_t)data) \ + : "r0" \ + ); \ +})) + +#define __boot_page_fill_extended(address, data) \ +(__extension__({ \ + __asm__ __volatile__ \ + ( \ + "movw r0, %4\n\t" \ + "movw r30, %A3\n\t" \ + "sts %1, %C3\n\t" \ + "sts %0, %2\n\t" \ + "spm\n\t" \ + "clr r1\n\t" \ + : \ + : "i" (_SFR_MEM_ADDR(__SPM_REG)), \ + "i" (_SFR_MEM_ADDR(RAMPZ)), \ + "r" ((uint8_t)__BOOT_PAGE_FILL), \ + "r" ((uint32_t)address), \ + "r" ((uint16_t)data) \ + : "r0", "r30", "r31" \ + ); \ +})) + +#define __boot_page_fill_extended_short(address, data) \ +(__extension__({ \ + __asm__ __volatile__ \ + ( \ + "movw r0, %4\n\t" \ + "movw r30, %A3\n\t" \ + "out %1, %C3\n\t" \ + "out %0, %2\n\t" \ + "spm\n\t" \ + "clr r1\n\t" \ + : \ + : "i" (_SFR_IO_ADDR(__SPM_REG)), \ + "i" (_SFR_IO_ADDR(RAMPZ)), \ + "r" ((uint8_t)__BOOT_PAGE_FILL), \ + "r" ((uint32_t)address), \ + "r" ((uint16_t)data) \ + : "r0", "r30", "r31" \ + ); \ +})) + +#define __boot_page_erase_short(address) \ +(__extension__({ \ + __asm__ __volatile__ \ + ( \ + "out %0, %1\n\t" \ + "spm\n\t" \ + : \ + : "i" (_SFR_IO_ADDR(__SPM_REG)), \ + "r" ((uint8_t)__BOOT_PAGE_ERASE), \ + "z" ((uint16_t)address) \ + ); \ +})) + + +#define __boot_page_erase_normal(address) \ +(__extension__({ \ + __asm__ __volatile__ \ + ( \ + "sts %0, %1\n\t" \ + "spm\n\t" \ + : \ + : "i" (_SFR_MEM_ADDR(__SPM_REG)), \ + "r" ((uint8_t)__BOOT_PAGE_ERASE), \ + "z" ((uint16_t)address) \ + ); \ +})) + +#define __boot_page_erase_alternate(address) \ +(__extension__({ \ + __asm__ __volatile__ \ + ( \ + "sts %0, %1\n\t" \ + "spm\n\t" \ + ".word 0xffff\n\t" \ + "nop\n\t" \ + : \ + : "i" (_SFR_MEM_ADDR(__SPM_REG)), \ + "r" ((uint8_t)__BOOT_PAGE_ERASE), \ + "z" ((uint16_t)address) \ + ); \ +})) + +#define __boot_page_erase_extended(address) \ +(__extension__({ \ + __asm__ __volatile__ \ + ( \ + "movw r30, %A3\n\t" \ + "sts %1, %C3\n\t" \ + "sts %0, %2\n\t" \ + "spm\n\t" \ + : \ + : "i" (_SFR_MEM_ADDR(__SPM_REG)), \ + "i" (_SFR_MEM_ADDR(RAMPZ)), \ + "r" ((uint8_t)__BOOT_PAGE_ERASE), \ + "r" ((uint32_t)address) \ + : "r30", "r31" \ + ); \ +})) +#define __boot_page_erase_extended_short(address) \ +(__extension__({ \ + __asm__ __volatile__ \ + ( \ + "movw r30, %A3\n\t" \ + "out %1, %C3\n\t" \ + "out %0, %2\n\t" \ + "spm\n\t" \ + : \ + : "i" (_SFR_IO_ADDR(__SPM_REG)), \ + "i" (_SFR_IO_ADDR(RAMPZ)), \ + "r" ((uint8_t)__BOOT_PAGE_ERASE), \ + "r" ((uint32_t)address) \ + : "r30", "r31" \ + ); \ +})) + +#define __boot_page_write_short(address) \ +(__extension__({ \ + __asm__ __volatile__ \ + ( \ + "out %0, %1\n\t" \ + "spm\n\t" \ + : \ + : "i" (_SFR_IO_ADDR(__SPM_REG)), \ + "r" ((uint8_t)__BOOT_PAGE_WRITE), \ + "z" ((uint16_t)address) \ + ); \ +})) + +#define __boot_page_write_normal(address) \ +(__extension__({ \ + __asm__ __volatile__ \ + ( \ + "sts %0, %1\n\t" \ + "spm\n\t" \ + : \ + : "i" (_SFR_MEM_ADDR(__SPM_REG)), \ + "r" ((uint8_t)__BOOT_PAGE_WRITE), \ + "z" ((uint16_t)address) \ + ); \ +})) + +#define __boot_page_write_alternate(address) \ +(__extension__({ \ + __asm__ __volatile__ \ + ( \ + "sts %0, %1\n\t" \ + "spm\n\t" \ + ".word 0xffff\n\t" \ + "nop\n\t" \ + : \ + : "i" (_SFR_MEM_ADDR(__SPM_REG)), \ + "r" ((uint8_t)__BOOT_PAGE_WRITE), \ + "z" ((uint16_t)address) \ + ); \ +})) + +#define __boot_page_write_extended(address) \ +(__extension__({ \ + __asm__ __volatile__ \ + ( \ + "movw r30, %A3\n\t" \ + "sts %1, %C3\n\t" \ + "sts %0, %2\n\t" \ + "spm\n\t" \ + : \ + : "i" (_SFR_MEM_ADDR(__SPM_REG)), \ + "i" (_SFR_MEM_ADDR(RAMPZ)), \ + "r" ((uint8_t)__BOOT_PAGE_WRITE), \ + "r" ((uint32_t)address) \ + : "r30", "r31" \ + ); \ +})) +#define __boot_page_write_extended_short(address) \ +(__extension__({ \ + __asm__ __volatile__ \ + ( \ + "movw r30, %A3\n\t" \ + "out %1, %C3\n\t" \ + "out %0, %2\n\t" \ + "spm\n\t" \ + : \ + : "i" (_SFR_IO_ADDR(__SPM_REG)), \ + "i" (_SFR_IO_ADDR(RAMPZ)), \ + "r" ((uint8_t)__BOOT_PAGE_WRITE), \ + "r" ((uint32_t)address) \ + : "r30", "r31" \ + ); \ +})) + +#define __boot_rww_enable_short() \ +(__extension__({ \ + __asm__ __volatile__ \ + ( \ + "out %0, %1\n\t" \ + "spm\n\t" \ + : \ + : "i" (_SFR_IO_ADDR(__SPM_REG)), \ + "r" ((uint8_t)__BOOT_RWW_ENABLE) \ + ); \ +})) + +#define __boot_rww_enable() \ +(__extension__({ \ + __asm__ __volatile__ \ + ( \ + "sts %0, %1\n\t" \ + "spm\n\t" \ + : \ + : "i" (_SFR_MEM_ADDR(__SPM_REG)), \ + "r" ((uint8_t)__BOOT_RWW_ENABLE) \ + ); \ +})) + +#define __boot_rww_enable_alternate() \ +(__extension__({ \ + __asm__ __volatile__ \ + ( \ + "sts %0, %1\n\t" \ + "spm\n\t" \ + ".word 0xffff\n\t" \ + "nop\n\t" \ + : \ + : "i" (_SFR_MEM_ADDR(__SPM_REG)), \ + "r" ((uint8_t)__BOOT_RWW_ENABLE) \ + ); \ +})) + +/* From the mega16/mega128 data sheets (maybe others): + + Bits by SPM To set the Boot Loader Lock bits, write the desired data to + R0, write "X0001001" to SPMCR and execute SPM within four clock cycles + after writing SPMCR. The only accessible Lock bits are the Boot Lock bits + that may prevent the Application and Boot Loader section from any + software update by the MCU. + + If bits 5..2 in R0 are cleared (zero), the corresponding Boot Lock bit + will be programmed if an SPM instruction is executed within four cycles + after BLBSET and SPMEN (or SELFPRGEN) are set in SPMCR. The Z-pointer is + don't care during this operation, but for future compatibility it is + recommended to load the Z-pointer with $0001 (same as used for reading the + Lock bits). For future compatibility It is also recommended to set bits 7, + 6, 1, and 0 in R0 to 1 when writing the Lock bits. When programming the + Lock bits the entire Flash can be read during the operation. */ + +#define __boot_lock_bits_set_short(lock_bits) \ +(__extension__({ \ + uint8_t value = (uint8_t)(~(lock_bits)); \ + __asm__ __volatile__ \ + ( \ + "ldi r30, 1\n\t" \ + "ldi r31, 0\n\t" \ + "mov r0, %2\n\t" \ + "out %0, %1\n\t" \ + "spm\n\t" \ + : \ + : "i" (_SFR_IO_ADDR(__SPM_REG)), \ + "r" ((uint8_t)__BOOT_LOCK_BITS_SET), \ + "r" (value) \ + : "r0", "r30", "r31" \ + ); \ +})) + +#define __boot_lock_bits_set(lock_bits) \ +(__extension__({ \ + uint8_t value = (uint8_t)(~(lock_bits)); \ + __asm__ __volatile__ \ + ( \ + "ldi r30, 1\n\t" \ + "ldi r31, 0\n\t" \ + "mov r0, %2\n\t" \ + "sts %0, %1\n\t" \ + "spm\n\t" \ + : \ + : "i" (_SFR_MEM_ADDR(__SPM_REG)), \ + "r" ((uint8_t)__BOOT_LOCK_BITS_SET), \ + "r" (value) \ + : "r0", "r30", "r31" \ + ); \ +})) + +#define __boot_lock_bits_set_alternate(lock_bits) \ +(__extension__({ \ + uint8_t value = (uint8_t)(~(lock_bits)); \ + __asm__ __volatile__ \ + ( \ + "ldi r30, 1\n\t" \ + "ldi r31, 0\n\t" \ + "mov r0, %2\n\t" \ + "sts %0, %1\n\t" \ + "spm\n\t" \ + ".word 0xffff\n\t" \ + "nop\n\t" \ + : \ + : "i" (_SFR_MEM_ADDR(__SPM_REG)), \ + "r" ((uint8_t)__BOOT_LOCK_BITS_SET), \ + "r" (value) \ + : "r0", "r30", "r31" \ + ); \ +})) + +/* + Reading lock and fuse bits: + + Similarly to writing the lock bits above, set BLBSET and SPMEN (or + SELFPRGEN) bits in __SPMREG, and then (within four clock cycles) issue an + LPM instruction. + + Z address: contents: + 0x0000 low fuse bits + 0x0001 lock bits + 0x0002 extended fuse bits + 0x0003 high fuse bits + + Sounds confusing, doesn't it? + + Unlike the macros in pgmspace.h, no need to care for non-enhanced + cores here as these old cores do not provide SPM support anyway. + */ + +/** \ingroup avr_boot + \def GET_LOW_FUSE_BITS + address to read the low fuse bits, using boot_lock_fuse_bits_get + */ +#define GET_LOW_FUSE_BITS (0x0000) +/** \ingroup avr_boot + \def GET_LOCK_BITS + address to read the lock bits, using boot_lock_fuse_bits_get + */ +#define GET_LOCK_BITS (0x0001) +/** \ingroup avr_boot + \def GET_EXTENDED_FUSE_BITS + address to read the extended fuse bits, using boot_lock_fuse_bits_get + */ +#define GET_EXTENDED_FUSE_BITS (0x0002) +/** \ingroup avr_boot + \def GET_HIGH_FUSE_BITS + address to read the high fuse bits, using boot_lock_fuse_bits_get + */ +#define GET_HIGH_FUSE_BITS (0x0003) + +/** \ingroup avr_boot + \def boot_lock_fuse_bits_get(address) + + Read the lock or fuse bits at \c address. + + Parameter \c address can be any of GET_LOW_FUSE_BITS, + GET_LOCK_BITS, GET_EXTENDED_FUSE_BITS, or GET_HIGH_FUSE_BITS. + + \note The lock and fuse bits returned are the physical values, + i.e. a bit returned as 0 means the corresponding fuse or lock bit + is programmed. + */ +#define boot_lock_fuse_bits_get_short(address) \ +(__extension__({ \ + uint8_t __result; \ + __asm__ __volatile__ \ + ( \ + "ldi r30, %3\n\t" \ + "ldi r31, 0\n\t" \ + "out %1, %2\n\t" \ + "lpm %0, Z\n\t" \ + : "=r" (__result) \ + : "i" (_SFR_IO_ADDR(__SPM_REG)), \ + "r" ((uint8_t)__BOOT_LOCK_BITS_SET), \ + "M" (address) \ + : "r0", "r30", "r31" \ + ); \ + __result; \ +})) + +#define boot_lock_fuse_bits_get(address) \ +(__extension__({ \ + uint8_t __result; \ + __asm__ __volatile__ \ + ( \ + "ldi r30, %3\n\t" \ + "ldi r31, 0\n\t" \ + "sts %1, %2\n\t" \ + "lpm %0, Z\n\t" \ + : "=r" (__result) \ + : "i" (_SFR_MEM_ADDR(__SPM_REG)), \ + "r" ((uint8_t)__BOOT_LOCK_BITS_SET), \ + "M" (address) \ + : "r0", "r30", "r31" \ + ); \ + __result; \ +})) + +/** \ingroup avr_boot + \def boot_signature_byte_get(address) + + Read the Signature Row byte at \c address. For some MCU types, + this function can also retrieve the factory-stored oscillator + calibration bytes. + + Parameter \c address can be 0-0x1f as documented by the datasheet. + \note The values are MCU type dependent. +*/ + +#define __BOOT_SIGROW_READ (_BV(__SPM_ENABLE) | _BV(SIGRD)) + +#define boot_signature_byte_get_short(addr) \ +(__extension__({ \ + uint16_t __addr16 = (uint16_t)(addr); \ + uint8_t __result; \ + __asm__ __volatile__ \ + ( \ + "out %1, %2\n\t" \ + "lpm %0, Z" "\n\t" \ + : "=r" (__result) \ + : "i" (_SFR_IO_ADDR(__SPM_REG)), \ + "r" ((uint8_t) __BOOT_SIGROW_READ), \ + "z" (__addr16) \ + ); \ + __result; \ +})) + +#define boot_signature_byte_get(addr) \ +(__extension__({ \ + uint16_t __addr16 = (uint16_t)(addr); \ + uint8_t __result; \ + __asm__ __volatile__ \ + ( \ + "sts %1, %2\n\t" \ + "lpm %0, Z" "\n\t" \ + : "=r" (__result) \ + : "i" (_SFR_MEM_ADDR(__SPM_REG)), \ + "r" ((uint8_t) __BOOT_SIGROW_READ), \ + "z" (__addr16) \ + ); \ + __result; \ +})) + +/** \ingroup avr_boot + \def boot_page_fill(address, data) + + Fill the bootloader temporary page buffer for flash + address with data word. + + \note The address is a byte address. The data is a word. The AVR + writes data to the buffer a word at a time, but addresses the buffer + per byte! So, increment your address by 2 between calls, and send 2 + data bytes in a word format! The LSB of the data is written to the lower + address; the MSB of the data is written to the higher address.*/ + +/** \ingroup avr_boot + \def boot_page_erase(address) + + Erase the flash page that contains address. + + \note address is a byte address in flash, not a word address. */ + +/** \ingroup avr_boot + \def boot_page_write(address) + + Write the bootloader temporary page buffer + to flash page that contains address. + + \note address is a byte address in flash, not a word address. */ + +/** \ingroup avr_boot + \def boot_rww_enable() + + Enable the Read-While-Write memory section. */ + +/** \ingroup avr_boot + \def boot_lock_bits_set(lock_bits) + + Set the bootloader lock bits. + + \param lock_bits A mask of which Boot Loader Lock Bits to set. + + \note In this context, a 'set bit' will be written to a zero value. + Note also that only BLBxx bits can be programmed by this command. + + For example, to disallow the SPM instruction from writing to the Boot + Loader memory section of flash, you would use this macro as such: + + \code + boot_lock_bits_set (_BV (BLB11)); + \endcode + + \note Like any lock bits, the Boot Loader Lock Bits, once set, + cannot be cleared again except by a chip erase which will in turn + also erase the boot loader itself. */ + +/* Normal versions of the macros use 16-bit addresses. + Extended versions of the macros use 32-bit addresses. + Alternate versions of the macros use 16-bit addresses and require special + instruction sequences after LPM. + + FLASHEND is defined in the ioXXXX.h file. + USHRT_MAX is defined in . */ + +#if defined(__AVR_ATmega161__) || defined(__AVR_ATmega163__) \ + || defined(__AVR_ATmega323__) + +/* Alternate: ATmega161/163/323 and 16 bit address */ +#define boot_page_fill(address, data) __boot_page_fill_alternate(address, data) +#define boot_page_erase(address) __boot_page_erase_alternate(address) +#define boot_page_write(address) __boot_page_write_alternate(address) +#define boot_rww_enable() __boot_rww_enable_alternate() +#define boot_lock_bits_set(lock_bits) __boot_lock_bits_set_alternate(lock_bits) + +#elif (FLASHEND > USHRT_MAX) + +/* Extended: >16 bit address */ +#define boot_page_fill(address, data) __boot_page_fill_extended_short(address, data) +#define boot_page_erase(address) __boot_page_erase_extended_short(address) +#define boot_page_write(address) __boot_page_write_extended_short(address) +#define boot_rww_enable() __boot_rww_enable_short() +#define boot_lock_bits_set(lock_bits) __boot_lock_bits_set_short(lock_bits) + +#else + +/* Normal: 16 bit address */ +#define boot_page_fill(address, data) __boot_page_fill_short(address, data) +#define boot_page_erase(address) __boot_page_erase_short(address) +#define boot_page_write(address) __boot_page_write_short(address) +#define boot_rww_enable() __boot_rww_enable_short() +#define boot_lock_bits_set(lock_bits) __boot_lock_bits_set_short(lock_bits) + +#endif + +/** \ingroup avr_boot + + Same as boot_page_fill() except it waits for eeprom and spm operations to + complete before filling the page. */ + +#define boot_page_fill_safe(address, data) \ +do { \ + boot_spm_busy_wait(); \ + eeprom_busy_wait(); \ + boot_page_fill(address, data); \ +} while (0) + +/** \ingroup avr_boot + + Same as boot_page_erase() except it waits for eeprom and spm operations to + complete before erasing the page. */ + +#define boot_page_erase_safe(address) \ +do { \ + boot_spm_busy_wait(); \ + eeprom_busy_wait(); \ + boot_page_erase (address); \ +} while (0) + +/** \ingroup avr_boot + + Same as boot_page_write() except it waits for eeprom and spm operations to + complete before writing the page. */ + +#define boot_page_write_safe(address) \ +do { \ + boot_spm_busy_wait(); \ + eeprom_busy_wait(); \ + boot_page_write (address); \ +} while (0) + +/** \ingroup avr_boot + + Same as boot_rww_enable() except waits for eeprom and spm operations to + complete before enabling the RWW mameory. */ + +#define boot_rww_enable_safe() \ +do { \ + boot_spm_busy_wait(); \ + eeprom_busy_wait(); \ + boot_rww_enable(); \ +} while (0) + +/** \ingroup avr_boot + + Same as boot_lock_bits_set() except waits for eeprom and spm operations to + complete before setting the lock bits. */ + +#define boot_lock_bits_set_safe(lock_bits) \ +do { \ + boot_spm_busy_wait(); \ + eeprom_busy_wait(); \ + boot_lock_bits_set (lock_bits); \ +} while (0) + +#endif /* _AVR_BOOT_H_ */ diff --git a/external/arduino/avr/bootloaders/optiboot/makeall b/external/arduino/avr/bootloaders/optiboot/makeall new file mode 100644 index 000000000..f076bc7f5 --- /dev/null +++ b/external/arduino/avr/bootloaders/optiboot/makeall @@ -0,0 +1,20 @@ +#!/bin/bash +make clean +# +# The "big three" standard bootloaders. +make atmega8 +make atmega168 +make atmega328 +# +# additional buildable platforms of +# somewhat questionable support level +make lilypad +make lilypad_resonator +make pro8 +make pro16 +make pro20 +make atmega328_pro8 +make sanguino +make mega +make atmega88 +make luminet diff --git a/external/arduino/avr/bootloaders/optiboot/omake b/external/arduino/avr/bootloaders/optiboot/omake new file mode 100644 index 000000000..cc7c6bc29 --- /dev/null +++ b/external/arduino/avr/bootloaders/optiboot/omake @@ -0,0 +1,2 @@ +echo ../../../tools/avr/bin/make OS=macosx ENV=arduino $* +../../../tools/avr/bin/make OS=macosx ENV=arduino $* diff --git a/external/arduino/avr/bootloaders/optiboot/omake.bat b/external/arduino/avr/bootloaders/optiboot/omake.bat new file mode 100644 index 000000000..f6815dacc --- /dev/null +++ b/external/arduino/avr/bootloaders/optiboot/omake.bat @@ -0,0 +1 @@ +..\..\..\tools\avr\utils\bin\make OS=windows ENV=arduino %* diff --git a/external/arduino/avr/bootloaders/optiboot/optiboot.c b/external/arduino/avr/bootloaders/optiboot/optiboot.c new file mode 100644 index 000000000..bd3a1db9b --- /dev/null +++ b/external/arduino/avr/bootloaders/optiboot/optiboot.c @@ -0,0 +1,672 @@ +/**********************************************************/ +/* Optiboot bootloader for Arduino */ +/* */ +/* http://optiboot.googlecode.com */ +/* */ +/* Arduino-maintained version : See README.TXT */ +/* http://code.google.com/p/arduino/ */ +/* */ +/* Heavily optimised bootloader that is faster and */ +/* smaller than the Arduino standard bootloader */ +/* */ +/* Enhancements: */ +/* Fits in 512 bytes, saving 1.5K of code space */ +/* Background page erasing speeds up programming */ +/* Higher baud rate speeds up programming */ +/* Written almost entirely in C */ +/* Customisable timeout with accurate timeconstant */ +/* Optional virtual UART. No hardware UART required. */ +/* Optional virtual boot partition for devices without. */ +/* */ +/* What you lose: */ +/* Implements a skeleton STK500 protocol which is */ +/* missing several features including EEPROM */ +/* programming and non-page-aligned writes */ +/* High baud rate breaks compatibility with standard */ +/* Arduino flash settings */ +/* */ +/* Fully supported: */ +/* ATmega168 based devices (Diecimila etc) */ +/* ATmega328P based devices (Duemilanove etc) */ +/* */ +/* Alpha test */ +/* ATmega1280 based devices (Arduino Mega) */ +/* */ +/* Work in progress: */ +/* ATmega644P based devices (Sanguino) */ +/* ATtiny84 based devices (Luminet) */ +/* */ +/* Does not support: */ +/* USB based devices (eg. Teensy) */ +/* */ +/* Assumptions: */ +/* The code makes several assumptions that reduce the */ +/* code size. They are all true after a hardware reset, */ +/* but may not be true if the bootloader is called by */ +/* other means or on other hardware. */ +/* No interrupts can occur */ +/* UART and Timer 1 are set to their reset state */ +/* SP points to RAMEND */ +/* */ +/* Code builds on code, libraries and optimisations from: */ +/* stk500boot.c by Jason P. Kyle */ +/* Arduino bootloader http://www.arduino.cc */ +/* Spiff's 1K bootloader http://spiffie.org/know/arduino_1k_bootloader/bootloader.shtml */ +/* avr-libc project http://nongnu.org/avr-libc */ +/* Adaboot http://www.ladyada.net/library/arduino/bootloader.html */ +/* AVR305 Atmel Application Note */ +/* */ +/* This program is free software; you can redistribute it */ +/* and/or modify it under the terms of the GNU General */ +/* Public License as published by the Free Software */ +/* Foundation; either version 2 of the License, or */ +/* (at your option) any later version. */ +/* */ +/* This program is distributed in the hope that it will */ +/* be useful, but WITHOUT ANY WARRANTY; without even the */ +/* implied warranty of MERCHANTABILITY or FITNESS FOR A */ +/* PARTICULAR PURPOSE. See the GNU General Public */ +/* License for more details. */ +/* */ +/* You should have received a copy of the GNU General */ +/* Public License along with this program; if not, write */ +/* to the Free Software Foundation, Inc., */ +/* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +/* */ +/* Licence can be viewed at */ +/* http://www.fsf.org/licenses/gpl.txt */ +/* */ +/**********************************************************/ + + +/**********************************************************/ +/* */ +/* Optional defines: */ +/* */ +/**********************************************************/ +/* */ +/* BIG_BOOT: */ +/* Build a 1k bootloader, not 512 bytes. This turns on */ +/* extra functionality. */ +/* */ +/* BAUD_RATE: */ +/* Set bootloader baud rate. */ +/* */ +/* LUDICROUS_SPEED: */ +/* 230400 baud :-) */ +/* */ +/* SOFT_UART: */ +/* Use AVR305 soft-UART instead of hardware UART. */ +/* */ +/* LED_START_FLASHES: */ +/* Number of LED flashes on bootup. */ +/* */ +/* LED_DATA_FLASH: */ +/* Flash LED when transferring data. For boards without */ +/* TX or RX LEDs, or for people who like blinky lights. */ +/* */ +/* SUPPORT_EEPROM: */ +/* Support reading and writing from EEPROM. This is not */ +/* used by Arduino, so off by default. */ +/* */ +/* TIMEOUT_MS: */ +/* Bootloader timeout period, in milliseconds. */ +/* 500,1000,2000,4000,8000 supported. */ +/* */ +/**********************************************************/ + +/**********************************************************/ +/* Version Numbers! */ +/* */ +/* Arduino Optiboot now includes this Version number in */ +/* the source and object code. */ +/* */ +/* Version 3 was released as zip from the optiboot */ +/* repository and was distributed with Arduino 0022. */ +/* Version 4 starts with the arduino repository commit */ +/* that brought the arduino repository up-to-date with */ +/* the optiboot source tree changes since v3. */ +/* */ +/**********************************************************/ + +/**********************************************************/ +/* Edit History: */ +/* */ +/* 4.4 WestfW: add initialization of address to keep */ +/* the compiler happy. Change SC'ed targets. */ +/* Return the SW version via READ PARAM */ +/* 4.3 WestfW: catch framing errors in getch(), so that */ +/* AVRISP works without HW kludges. */ +/* http://code.google.com/p/arduino/issues/detail?id=368n*/ +/* 4.2 WestfW: reduce code size, fix timeouts, change */ +/* verifySpace to use WDT instead of appstart */ +/* 4.1 WestfW: put version number in binary. */ +/**********************************************************/ + +#define OPTIBOOT_MAJVER 4 +#define OPTIBOOT_MINVER 4 + +#define MAKESTR(a) #a +#define MAKEVER(a, b) MAKESTR(a*256+b) + +asm(" .section .version\n" + "optiboot_version: .word " MAKEVER(OPTIBOOT_MAJVER, OPTIBOOT_MINVER) "\n" + " .section .text\n"); + +#include +#include +#include + +// uses sts instructions, but this version uses out instructions +// This saves cycles and program memory. +#include "boot.h" + + +// We don't use as those routines have interrupt overhead we don't need. + +#include "pin_defs.h" +#include "stk500.h" + +#ifndef LED_START_FLASHES +#define LED_START_FLASHES 0 +#endif + +#ifdef LUDICROUS_SPEED +#define BAUD_RATE 230400L +#endif + +/* set the UART baud rate defaults */ +#ifndef BAUD_RATE +#if F_CPU >= 8000000L +#define BAUD_RATE 115200L // Highest rate Avrdude win32 will support +#elsif F_CPU >= 1000000L +#define BAUD_RATE 9600L // 19200 also supported, but with significant error +#elsif F_CPU >= 128000L +#define BAUD_RATE 4800L // Good for 128kHz internal RC +#else +#define BAUD_RATE 1200L // Good even at 32768Hz +#endif +#endif + +/* Switch in soft UART for hard baud rates */ +#if (F_CPU/BAUD_RATE) > 280 // > 57600 for 16MHz +#ifndef SOFT_UART +#define SOFT_UART +#endif +#endif + +/* Watchdog settings */ +#define WATCHDOG_OFF (0) +#define WATCHDOG_16MS (_BV(WDE)) +#define WATCHDOG_32MS (_BV(WDP0) | _BV(WDE)) +#define WATCHDOG_64MS (_BV(WDP1) | _BV(WDE)) +#define WATCHDOG_125MS (_BV(WDP1) | _BV(WDP0) | _BV(WDE)) +#define WATCHDOG_250MS (_BV(WDP2) | _BV(WDE)) +#define WATCHDOG_500MS (_BV(WDP2) | _BV(WDP0) | _BV(WDE)) +#define WATCHDOG_1S (_BV(WDP2) | _BV(WDP1) | _BV(WDE)) +#define WATCHDOG_2S (_BV(WDP2) | _BV(WDP1) | _BV(WDP0) | _BV(WDE)) +#ifndef __AVR_ATmega8__ +#define WATCHDOG_4S (_BV(WDP3) | _BV(WDE)) +#define WATCHDOG_8S (_BV(WDP3) | _BV(WDP0) | _BV(WDE)) +#endif + +/* Function Prototypes */ +/* The main function is in init9, which removes the interrupt vector table */ +/* we don't need. It is also 'naked', which means the compiler does not */ +/* generate any entry or exit code itself. */ +int main(void) __attribute__ ((naked)) __attribute__ ((section (".init9"))); +void putch(char); +uint8_t getch(void); +static inline void getNch(uint8_t); /* "static inline" is a compiler hint to reduce code size */ +void verifySpace(); +static inline void flash_led(uint8_t); +uint8_t getLen(); +static inline void watchdogReset(); +void watchdogConfig(uint8_t x); +#ifdef SOFT_UART +void uartDelay() __attribute__ ((naked)); +#endif +void appStart() __attribute__ ((naked)); + +#if defined(__AVR_ATmega168__) +#define RAMSTART (0x100) +#define NRWWSTART (0x3800) +#elif defined(__AVR_ATmega328P__) || defined(__AVR_ATmega328__) +#define RAMSTART (0x100) +#define NRWWSTART (0x7000) +#elif defined (__AVR_ATmega644P__) +#define RAMSTART (0x100) +#define NRWWSTART (0xE000) +#elif defined(__AVR_ATtiny84__) +#define RAMSTART (0x100) +#define NRWWSTART (0x0000) +#elif defined(__AVR_ATmega1280__) +#define RAMSTART (0x200) +#define NRWWSTART (0xE000) +#elif defined(__AVR_ATmega8__) || defined(__AVR_ATmega88__) +#define RAMSTART (0x100) +#define NRWWSTART (0x1800) +#endif + +/* C zero initialises all global variables. However, that requires */ +/* These definitions are NOT zero initialised, but that doesn't matter */ +/* This allows us to drop the zero init code, saving us memory */ +#define buff ((uint8_t*)(RAMSTART)) +#ifdef VIRTUAL_BOOT_PARTITION +#define rstVect (*(uint16_t*)(RAMSTART+SPM_PAGESIZE*2+4)) +#define wdtVect (*(uint16_t*)(RAMSTART+SPM_PAGESIZE*2+6)) +#endif + +/* main program starts here */ +int main(void) { + uint8_t ch; + + /* + * Making these local and in registers prevents the need for initializing + * them, and also saves space because code no longer stores to memory. + * (initializing address keeps the compiler happy, but isn't really + * necessary, and uses 4 bytes of flash.) + */ + register uint16_t address = 0; + register uint8_t length; + + // After the zero init loop, this is the first code to run. + // + // This code makes the following assumptions: + // No interrupts will execute + // SP points to RAMEND + // r1 contains zero + // + // If not, uncomment the following instructions: + // cli(); + asm volatile ("clr __zero_reg__"); +#ifdef __AVR_ATmega8__ + SP=RAMEND; // This is done by hardware reset +#endif + + // Adaboot no-wait mod + ch = MCUSR; + MCUSR = 0; + if (!(ch & _BV(EXTRF))) appStart(); + +#if LED_START_FLASHES > 0 + // Set up Timer 1 for timeout counter + TCCR1B = _BV(CS12) | _BV(CS10); // div 1024 +#endif +#ifndef SOFT_UART +#ifdef __AVR_ATmega8__ + UCSRA = _BV(U2X); //Double speed mode USART + UCSRB = _BV(RXEN) | _BV(TXEN); // enable Rx & Tx + UCSRC = _BV(URSEL) | _BV(UCSZ1) | _BV(UCSZ0); // config USART; 8N1 + UBRRL = (uint8_t)( (F_CPU + BAUD_RATE * 4L) / (BAUD_RATE * 8L) - 1 ); +#else + UCSR0A = _BV(U2X0); //Double speed mode USART0 + UCSR0B = _BV(RXEN0) | _BV(TXEN0); + UCSR0C = _BV(UCSZ00) | _BV(UCSZ01); + UBRR0L = (uint8_t)( (F_CPU + BAUD_RATE * 4L) / (BAUD_RATE * 8L) - 1 ); +#endif +#endif + + // Set up watchdog to trigger after 500ms + watchdogConfig(WATCHDOG_1S); + + /* Set LED pin as output */ + LED_DDR |= _BV(LED); + +#ifdef SOFT_UART + /* Set TX pin as output */ + UART_DDR |= _BV(UART_TX_BIT); +#endif + +#if LED_START_FLASHES > 0 + /* Flash onboard LED to signal entering of bootloader */ + flash_led(LED_START_FLASHES * 2); +#endif + + /* Forever loop */ + for (;;) { + /* get character from UART */ + ch = getch(); + + if(ch == STK_GET_PARAMETER) { + unsigned char which = getch(); + verifySpace(); + if (which == 0x82) { + /* + * Send optiboot version as "minor SW version" + */ + putch(OPTIBOOT_MINVER); + } else if (which == 0x81) { + putch(OPTIBOOT_MAJVER); + } else { + /* + * GET PARAMETER returns a generic 0x03 reply for + * other parameters - enough to keep Avrdude happy + */ + putch(0x03); + } + } + else if(ch == STK_SET_DEVICE) { + // SET DEVICE is ignored + getNch(20); + } + else if(ch == STK_SET_DEVICE_EXT) { + // SET DEVICE EXT is ignored + getNch(5); + } + else if(ch == STK_LOAD_ADDRESS) { + // LOAD ADDRESS + uint16_t newAddress; + newAddress = getch(); + newAddress = (newAddress & 0xff) | (getch() << 8); +#ifdef RAMPZ + // Transfer top bit to RAMPZ + RAMPZ = (newAddress & 0x8000) ? 1 : 0; +#endif + newAddress += newAddress; // Convert from word address to byte address + address = newAddress; + verifySpace(); + } + else if(ch == STK_UNIVERSAL) { + // UNIVERSAL command is ignored + getNch(4); + putch(0x00); + } + /* Write memory, length is big endian and is in bytes */ + else if(ch == STK_PROG_PAGE) { + // PROGRAM PAGE - we support flash programming only, not EEPROM + uint8_t *bufPtr; + uint16_t addrPtr; + + getch(); /* getlen() */ + length = getch(); + getch(); + + // If we are in RWW section, immediately start page erase + if (address < NRWWSTART) __boot_page_erase_short((uint16_t)(void*)address); + + // While that is going on, read in page contents + bufPtr = buff; + do *bufPtr++ = getch(); + while (--length); + + // If we are in NRWW section, page erase has to be delayed until now. + // Todo: Take RAMPZ into account + if (address >= NRWWSTART) __boot_page_erase_short((uint16_t)(void*)address); + + // Read command terminator, start reply + verifySpace(); + + // If only a partial page is to be programmed, the erase might not be complete. + // So check that here + boot_spm_busy_wait(); + +#ifdef VIRTUAL_BOOT_PARTITION + if ((uint16_t)(void*)address == 0) { + // This is the reset vector page. We need to live-patch the code so the + // bootloader runs. + // + // Move RESET vector to WDT vector + uint16_t vect = buff[0] | (buff[1]<<8); + rstVect = vect; + wdtVect = buff[8] | (buff[9]<<8); + vect -= 4; // Instruction is a relative jump (rjmp), so recalculate. + buff[8] = vect & 0xff; + buff[9] = vect >> 8; + + // Add jump to bootloader at RESET vector + buff[0] = 0x7f; + buff[1] = 0xce; // rjmp 0x1d00 instruction + } +#endif + + // Copy buffer into programming buffer + bufPtr = buff; + addrPtr = (uint16_t)(void*)address; + ch = SPM_PAGESIZE / 2; + do { + uint16_t a; + a = *bufPtr++; + a |= (*bufPtr++) << 8; + __boot_page_fill_short((uint16_t)(void*)addrPtr,a); + addrPtr += 2; + } while (--ch); + + // Write from programming buffer + __boot_page_write_short((uint16_t)(void*)address); + boot_spm_busy_wait(); + +#if defined(RWWSRE) + // Reenable read access to flash + boot_rww_enable(); +#endif + + } + /* Read memory block mode, length is big endian. */ + else if(ch == STK_READ_PAGE) { + // READ PAGE - we only read flash + getch(); /* getlen() */ + length = getch(); + getch(); + + verifySpace(); +#ifdef VIRTUAL_BOOT_PARTITION + do { + // Undo vector patch in bottom page so verify passes + if (address == 0) ch=rstVect & 0xff; + else if (address == 1) ch=rstVect >> 8; + else if (address == 8) ch=wdtVect & 0xff; + else if (address == 9) ch=wdtVect >> 8; + else ch = pgm_read_byte_near(address); + address++; + putch(ch); + } while (--length); +#else +#ifdef __AVR_ATmega1280__ +// do putch(pgm_read_byte_near(address++)); +// while (--length); + do { + uint8_t result; + __asm__ ("elpm %0,Z\n":"=r"(result):"z"(address)); + putch(result); + address++; + } + while (--length); +#else + do putch(pgm_read_byte_near(address++)); + while (--length); +#endif +#endif + } + + /* Get device signature bytes */ + else if(ch == STK_READ_SIGN) { + // READ SIGN - return what Avrdude wants to hear + verifySpace(); + putch(SIGNATURE_0); + putch(SIGNATURE_1); + putch(SIGNATURE_2); + } + else if (ch == 'Q') { + // Adaboot no-wait mod + watchdogConfig(WATCHDOG_16MS); + verifySpace(); + } + else { + // This covers the response to commands like STK_ENTER_PROGMODE + verifySpace(); + } + putch(STK_OK); + } +} + +void putch(char ch) { +#ifndef SOFT_UART + while (!(UCSR0A & _BV(UDRE0))); + UDR0 = ch; +#else + __asm__ __volatile__ ( + " com %[ch]\n" // ones complement, carry set + " sec\n" + "1: brcc 2f\n" + " cbi %[uartPort],%[uartBit]\n" + " rjmp 3f\n" + "2: sbi %[uartPort],%[uartBit]\n" + " nop\n" + "3: rcall uartDelay\n" + " rcall uartDelay\n" + " lsr %[ch]\n" + " dec %[bitcnt]\n" + " brne 1b\n" + : + : + [bitcnt] "d" (10), + [ch] "r" (ch), + [uartPort] "I" (_SFR_IO_ADDR(UART_PORT)), + [uartBit] "I" (UART_TX_BIT) + : + "r25" + ); +#endif +} + +uint8_t getch(void) { + uint8_t ch; + +#ifdef LED_DATA_FLASH +#ifdef __AVR_ATmega8__ + LED_PORT ^= _BV(LED); +#else + LED_PIN |= _BV(LED); +#endif +#endif + +#ifdef SOFT_UART + __asm__ __volatile__ ( + "1: sbic %[uartPin],%[uartBit]\n" // Wait for start edge + " rjmp 1b\n" + " rcall uartDelay\n" // Get to middle of start bit + "2: rcall uartDelay\n" // Wait 1 bit period + " rcall uartDelay\n" // Wait 1 bit period + " clc\n" + " sbic %[uartPin],%[uartBit]\n" + " sec\n" + " dec %[bitCnt]\n" + " breq 3f\n" + " ror %[ch]\n" + " rjmp 2b\n" + "3:\n" + : + [ch] "=r" (ch) + : + [bitCnt] "d" (9), + [uartPin] "I" (_SFR_IO_ADDR(UART_PIN)), + [uartBit] "I" (UART_RX_BIT) + : + "r25" +); +#else + while(!(UCSR0A & _BV(RXC0))) + ; + if (!(UCSR0A & _BV(FE0))) { + /* + * A Framing Error indicates (probably) that something is talking + * to us at the wrong bit rate. Assume that this is because it + * expects to be talking to the application, and DON'T reset the + * watchdog. This should cause the bootloader to abort and run + * the application "soon", if it keeps happening. (Note that we + * don't care that an invalid char is returned...) + */ + watchdogReset(); + } + + ch = UDR0; +#endif + +#ifdef LED_DATA_FLASH +#ifdef __AVR_ATmega8__ + LED_PORT ^= _BV(LED); +#else + LED_PIN |= _BV(LED); +#endif +#endif + + return ch; +} + +#ifdef SOFT_UART +// AVR350 equation: #define UART_B_VALUE (((F_CPU/BAUD_RATE)-23)/6) +// Adding 3 to numerator simulates nearest rounding for more accurate baud rates +#define UART_B_VALUE (((F_CPU/BAUD_RATE)-20)/6) +#if UART_B_VALUE > 255 +#error Baud rate too slow for soft UART +#endif + +void uartDelay() { + __asm__ __volatile__ ( + "ldi r25,%[count]\n" + "1:dec r25\n" + "brne 1b\n" + "ret\n" + ::[count] "M" (UART_B_VALUE) + ); +} +#endif + +void getNch(uint8_t count) { + do getch(); while (--count); + verifySpace(); +} + +void verifySpace() { + if (getch() != CRC_EOP) { + watchdogConfig(WATCHDOG_16MS); // shorten WD timeout + while (1) // and busy-loop so that WD causes + ; // a reset and app start. + } + putch(STK_INSYNC); +} + +#if LED_START_FLASHES > 0 +void flash_led(uint8_t count) { + do { + TCNT1 = -(F_CPU/(1024*16)); + TIFR1 = _BV(TOV1); + while(!(TIFR1 & _BV(TOV1))); +#ifdef __AVR_ATmega8__ + LED_PORT ^= _BV(LED); +#else + LED_PIN |= _BV(LED); +#endif + watchdogReset(); + } while (--count); +} +#endif + +// Watchdog functions. These are only safe with interrupts turned off. +void watchdogReset() { + __asm__ __volatile__ ( + "wdr\n" + ); +} + +void watchdogConfig(uint8_t x) { + WDTCSR = _BV(WDCE) | _BV(WDE); + WDTCSR = x; +} + +void appStart() { + watchdogConfig(WATCHDOG_OFF); + __asm__ __volatile__ ( +#ifdef VIRTUAL_BOOT_PARTITION + // Jump to WDT vector + "ldi r30,4\n" + "clr r31\n" +#else + // Jump to RST vector + "clr r30\n" + "clr r31\n" +#endif + "ijmp\n" + ); +} diff --git a/external/arduino/avr/bootloaders/optiboot/optiboot_atmega168.hex b/external/arduino/avr/bootloaders/optiboot/optiboot_atmega168.hex new file mode 100644 index 000000000..9c4d33fb1 --- /dev/null +++ b/external/arduino/avr/bootloaders/optiboot/optiboot_atmega168.hex @@ -0,0 +1,35 @@ +:103E0000112484B714BE81FFF0D085E08093810037 +:103E100082E08093C00088E18093C10086E08093B7 +:103E2000C20080E18093C4008EE0C9D0259A86E06C +:103E300020E33CEF91E0309385002093840096BB13 +:103E4000B09BFECF1D9AA8958150A9F7CC24DD2404 +:103E500088248394B5E0AB2EA1E19A2EF3E0BF2E27 +:103E6000A2D0813461F49FD0082FAFD0023811F076 +:103E7000013811F484E001C083E08DD089C0823420 +:103E800011F484E103C0853419F485E0A6D080C024 +:103E9000853579F488D0E82EFF2485D0082F10E0EE +:103EA000102F00270E291F29000F111F8ED0680127 +:103EB0006FC0863521F484E090D080E0DECF843678 +:103EC00009F040C070D06FD0082F6DD080E0C816C8 +:103ED00088E3D80618F4F601B7BEE895C0E0D1E053 +:103EE00062D089930C17E1F7F0E0CF16F8E3DF0614 +:103EF00018F0F601B7BEE89568D007B600FCFDCF14 +:103F0000A601A0E0B1E02C9130E011968C911197C0 +:103F100090E0982F8827822B932B1296FA010C01A0 +:103F200087BEE89511244E5F5F4FF1E0A038BF07D0 +:103F300051F7F601A7BEE89507B600FCFDCF97BE86 +:103F4000E89526C08437B1F42ED02DD0F82E2BD092 +:103F50003CD0F601EF2C8F010F5F1F4F84911BD0D7 +:103F6000EA94F801C1F70894C11CD11CFA94CF0C53 +:103F7000D11C0EC0853739F428D08EE10CD084E9ED +:103F80000AD086E07ACF813511F488E018D01DD0B0 +:103F900080E101D065CF982F8091C00085FFFCCFD4 +:103FA0009093C60008958091C00087FFFCCF809158 +:103FB000C00084FD01C0A8958091C6000895E0E688 +:103FC000F0E098E1908380830895EDDF803219F06E +:103FD00088E0F5DFFFCF84E1DECF1F93182FE3DF0A +:103FE0001150E9F7F2DF1F91089580E0E8DFEE2736 +:043FF000FF2709940A +:023FFE000404B9 +:0400000300003E00BB +:00000001FF diff --git a/external/arduino/avr/bootloaders/optiboot/optiboot_atmega168.lst b/external/arduino/avr/bootloaders/optiboot/optiboot_atmega168.lst new file mode 100644 index 000000000..06316dbba --- /dev/null +++ b/external/arduino/avr/bootloaders/optiboot/optiboot_atmega168.lst @@ -0,0 +1,598 @@ + +optiboot_atmega168.elf: file format elf32-avr + +Sections: +Idx Name Size VMA LMA File off Algn + 0 .text 000001f4 00003e00 00003e00 00000054 2**1 + CONTENTS, ALLOC, LOAD, READONLY, CODE + 1 .version 00000002 00003ffe 00003ffe 00000248 2**0 + CONTENTS, READONLY + 2 .debug_aranges 00000028 00000000 00000000 0000024a 2**0 + CONTENTS, READONLY, DEBUGGING + 3 .debug_pubnames 0000005f 00000000 00000000 00000272 2**0 + CONTENTS, READONLY, DEBUGGING + 4 .debug_info 000002a8 00000000 00000000 000002d1 2**0 + CONTENTS, READONLY, DEBUGGING + 5 .debug_abbrev 00000178 00000000 00000000 00000579 2**0 + CONTENTS, READONLY, DEBUGGING + 6 .debug_line 00000488 00000000 00000000 000006f1 2**0 + CONTENTS, READONLY, DEBUGGING + 7 .debug_frame 00000080 00000000 00000000 00000b7c 2**2 + CONTENTS, READONLY, DEBUGGING + 8 .debug_str 0000014f 00000000 00000000 00000bfc 2**0 + CONTENTS, READONLY, DEBUGGING + 9 .debug_loc 000002d8 00000000 00000000 00000d4b 2**0 + CONTENTS, READONLY, DEBUGGING + 10 .debug_ranges 00000078 00000000 00000000 00001023 2**0 + CONTENTS, READONLY, DEBUGGING + +Disassembly of section .text: + +00003e00
: +#define rstVect (*(uint16_t*)(RAMSTART+SPM_PAGESIZE*2+4)) +#define wdtVect (*(uint16_t*)(RAMSTART+SPM_PAGESIZE*2+6)) +#endif + +/* main program starts here */ +int main(void) { + 3e00: 11 24 eor r1, r1 +#ifdef __AVR_ATmega8__ + SP=RAMEND; // This is done by hardware reset +#endif + + // Adaboot no-wait mod + ch = MCUSR; + 3e02: 84 b7 in r24, 0x34 ; 52 + MCUSR = 0; + 3e04: 14 be out 0x34, r1 ; 52 + if (!(ch & _BV(EXTRF))) appStart(); + 3e06: 81 ff sbrs r24, 1 + 3e08: f0 d0 rcall .+480 ; 0x3fea + +#if LED_START_FLASHES > 0 + // Set up Timer 1 for timeout counter + TCCR1B = _BV(CS12) | _BV(CS10); // div 1024 + 3e0a: 85 e0 ldi r24, 0x05 ; 5 + 3e0c: 80 93 81 00 sts 0x0081, r24 + UCSRA = _BV(U2X); //Double speed mode USART + UCSRB = _BV(RXEN) | _BV(TXEN); // enable Rx & Tx + UCSRC = _BV(URSEL) | _BV(UCSZ1) | _BV(UCSZ0); // config USART; 8N1 + UBRRL = (uint8_t)( (F_CPU + BAUD_RATE * 4L) / (BAUD_RATE * 8L) - 1 ); +#else + UCSR0A = _BV(U2X0); //Double speed mode USART0 + 3e10: 82 e0 ldi r24, 0x02 ; 2 + 3e12: 80 93 c0 00 sts 0x00C0, r24 + UCSR0B = _BV(RXEN0) | _BV(TXEN0); + 3e16: 88 e1 ldi r24, 0x18 ; 24 + 3e18: 80 93 c1 00 sts 0x00C1, r24 + UCSR0C = _BV(UCSZ00) | _BV(UCSZ01); + 3e1c: 86 e0 ldi r24, 0x06 ; 6 + 3e1e: 80 93 c2 00 sts 0x00C2, r24 + UBRR0L = (uint8_t)( (F_CPU + BAUD_RATE * 4L) / (BAUD_RATE * 8L) - 1 ); + 3e22: 80 e1 ldi r24, 0x10 ; 16 + 3e24: 80 93 c4 00 sts 0x00C4, r24 +#endif +#endif + + // Set up watchdog to trigger after 500ms + watchdogConfig(WATCHDOG_1S); + 3e28: 8e e0 ldi r24, 0x0E ; 14 + 3e2a: c9 d0 rcall .+402 ; 0x3fbe + + /* Set LED pin as output */ + LED_DDR |= _BV(LED); + 3e2c: 25 9a sbi 0x04, 5 ; 4 + 3e2e: 86 e0 ldi r24, 0x06 ; 6 +} + +#if LED_START_FLASHES > 0 +void flash_led(uint8_t count) { + do { + TCNT1 = -(F_CPU/(1024*16)); + 3e30: 20 e3 ldi r18, 0x30 ; 48 + 3e32: 3c ef ldi r19, 0xFC ; 252 + TIFR1 = _BV(TOV1); + 3e34: 91 e0 ldi r25, 0x01 ; 1 +} + +#if LED_START_FLASHES > 0 +void flash_led(uint8_t count) { + do { + TCNT1 = -(F_CPU/(1024*16)); + 3e36: 30 93 85 00 sts 0x0085, r19 + 3e3a: 20 93 84 00 sts 0x0084, r18 + TIFR1 = _BV(TOV1); + 3e3e: 96 bb out 0x16, r25 ; 22 + while(!(TIFR1 & _BV(TOV1))); + 3e40: b0 9b sbis 0x16, 0 ; 22 + 3e42: fe cf rjmp .-4 ; 0x3e40 +#ifdef __AVR_ATmega8__ + LED_PORT ^= _BV(LED); +#else + LED_PIN |= _BV(LED); + 3e44: 1d 9a sbi 0x03, 5 ; 3 +} +#endif + +// Watchdog functions. These are only safe with interrupts turned off. +void watchdogReset() { + __asm__ __volatile__ ( + 3e46: a8 95 wdr + LED_PORT ^= _BV(LED); +#else + LED_PIN |= _BV(LED); +#endif + watchdogReset(); + } while (--count); + 3e48: 81 50 subi r24, 0x01 ; 1 + 3e4a: a9 f7 brne .-22 ; 0x3e36 + 3e4c: cc 24 eor r12, r12 + 3e4e: dd 24 eor r13, r13 + ch = SPM_PAGESIZE / 2; + do { + uint16_t a; + a = *bufPtr++; + a |= (*bufPtr++) << 8; + __boot_page_fill_short((uint16_t)(void*)addrPtr,a); + 3e50: 88 24 eor r8, r8 + 3e52: 83 94 inc r8 + addrPtr += 2; + } while (--ch); + + // Write from programming buffer + __boot_page_write_short((uint16_t)(void*)address); + 3e54: b5 e0 ldi r27, 0x05 ; 5 + 3e56: ab 2e mov r10, r27 + boot_spm_busy_wait(); + +#if defined(RWWSRE) + // Reenable read access to flash + boot_rww_enable(); + 3e58: a1 e1 ldi r26, 0x11 ; 17 + 3e5a: 9a 2e mov r9, r26 + do *bufPtr++ = getch(); + while (--length); + + // If we are in NRWW section, page erase has to be delayed until now. + // Todo: Take RAMPZ into account + if (address >= NRWWSTART) __boot_page_erase_short((uint16_t)(void*)address); + 3e5c: f3 e0 ldi r31, 0x03 ; 3 + 3e5e: bf 2e mov r11, r31 +#endif + + /* Forever loop */ + for (;;) { + /* get character from UART */ + ch = getch(); + 3e60: a2 d0 rcall .+324 ; 0x3fa6 + + if(ch == STK_GET_PARAMETER) { + 3e62: 81 34 cpi r24, 0x41 ; 65 + 3e64: 61 f4 brne .+24 ; 0x3e7e + unsigned char which = getch(); + 3e66: 9f d0 rcall .+318 ; 0x3fa6 + 3e68: 08 2f mov r16, r24 + verifySpace(); + 3e6a: af d0 rcall .+350 ; 0x3fca + if (which == 0x82) { + 3e6c: 02 38 cpi r16, 0x82 ; 130 + 3e6e: 11 f0 breq .+4 ; 0x3e74 + /* + * Send optiboot version as "minor SW version" + */ + putch(OPTIBOOT_MINVER); + } else if (which == 0x81) { + 3e70: 01 38 cpi r16, 0x81 ; 129 + 3e72: 11 f4 brne .+4 ; 0x3e78 + putch(OPTIBOOT_MAJVER); + 3e74: 84 e0 ldi r24, 0x04 ; 4 + 3e76: 01 c0 rjmp .+2 ; 0x3e7a + } else { + /* + * GET PARAMETER returns a generic 0x03 reply for + * other parameters - enough to keep Avrdude happy + */ + putch(0x03); + 3e78: 83 e0 ldi r24, 0x03 ; 3 + 3e7a: 8d d0 rcall .+282 ; 0x3f96 + 3e7c: 89 c0 rjmp .+274 ; 0x3f90 + } + } + else if(ch == STK_SET_DEVICE) { + 3e7e: 82 34 cpi r24, 0x42 ; 66 + 3e80: 11 f4 brne .+4 ; 0x3e86 + // SET DEVICE is ignored + getNch(20); + 3e82: 84 e1 ldi r24, 0x14 ; 20 + 3e84: 03 c0 rjmp .+6 ; 0x3e8c + } + else if(ch == STK_SET_DEVICE_EXT) { + 3e86: 85 34 cpi r24, 0x45 ; 69 + 3e88: 19 f4 brne .+6 ; 0x3e90 + // SET DEVICE EXT is ignored + getNch(5); + 3e8a: 85 e0 ldi r24, 0x05 ; 5 + 3e8c: a6 d0 rcall .+332 ; 0x3fda + 3e8e: 80 c0 rjmp .+256 ; 0x3f90 + } + else if(ch == STK_LOAD_ADDRESS) { + 3e90: 85 35 cpi r24, 0x55 ; 85 + 3e92: 79 f4 brne .+30 ; 0x3eb2 + // LOAD ADDRESS + uint16_t newAddress; + newAddress = getch(); + 3e94: 88 d0 rcall .+272 ; 0x3fa6 + newAddress = (newAddress & 0xff) | (getch() << 8); + 3e96: e8 2e mov r14, r24 + 3e98: ff 24 eor r15, r15 + 3e9a: 85 d0 rcall .+266 ; 0x3fa6 + 3e9c: 08 2f mov r16, r24 + 3e9e: 10 e0 ldi r17, 0x00 ; 0 + 3ea0: 10 2f mov r17, r16 + 3ea2: 00 27 eor r16, r16 + 3ea4: 0e 29 or r16, r14 + 3ea6: 1f 29 or r17, r15 +#ifdef RAMPZ + // Transfer top bit to RAMPZ + RAMPZ = (newAddress & 0x8000) ? 1 : 0; +#endif + newAddress += newAddress; // Convert from word address to byte address + 3ea8: 00 0f add r16, r16 + 3eaa: 11 1f adc r17, r17 + address = newAddress; + verifySpace(); + 3eac: 8e d0 rcall .+284 ; 0x3fca + 3eae: 68 01 movw r12, r16 + 3eb0: 6f c0 rjmp .+222 ; 0x3f90 + } + else if(ch == STK_UNIVERSAL) { + 3eb2: 86 35 cpi r24, 0x56 ; 86 + 3eb4: 21 f4 brne .+8 ; 0x3ebe + // UNIVERSAL command is ignored + getNch(4); + 3eb6: 84 e0 ldi r24, 0x04 ; 4 + 3eb8: 90 d0 rcall .+288 ; 0x3fda + putch(0x00); + 3eba: 80 e0 ldi r24, 0x00 ; 0 + 3ebc: de cf rjmp .-68 ; 0x3e7a + } + /* Write memory, length is big endian and is in bytes */ + else if(ch == STK_PROG_PAGE) { + 3ebe: 84 36 cpi r24, 0x64 ; 100 + 3ec0: 09 f0 breq .+2 ; 0x3ec4 + 3ec2: 40 c0 rjmp .+128 ; 0x3f44 + // PROGRAM PAGE - we support flash programming only, not EEPROM + uint8_t *bufPtr; + uint16_t addrPtr; + + getch(); /* getlen() */ + 3ec4: 70 d0 rcall .+224 ; 0x3fa6 + length = getch(); + 3ec6: 6f d0 rcall .+222 ; 0x3fa6 + 3ec8: 08 2f mov r16, r24 + getch(); + 3eca: 6d d0 rcall .+218 ; 0x3fa6 + + // If we are in RWW section, immediately start page erase + if (address < NRWWSTART) __boot_page_erase_short((uint16_t)(void*)address); + 3ecc: 80 e0 ldi r24, 0x00 ; 0 + 3ece: c8 16 cp r12, r24 + 3ed0: 88 e3 ldi r24, 0x38 ; 56 + 3ed2: d8 06 cpc r13, r24 + 3ed4: 18 f4 brcc .+6 ; 0x3edc + 3ed6: f6 01 movw r30, r12 + 3ed8: b7 be out 0x37, r11 ; 55 + 3eda: e8 95 spm + 3edc: c0 e0 ldi r28, 0x00 ; 0 + 3ede: d1 e0 ldi r29, 0x01 ; 1 + + // While that is going on, read in page contents + bufPtr = buff; + do *bufPtr++ = getch(); + 3ee0: 62 d0 rcall .+196 ; 0x3fa6 + 3ee2: 89 93 st Y+, r24 + while (--length); + 3ee4: 0c 17 cp r16, r28 + 3ee6: e1 f7 brne .-8 ; 0x3ee0 + + // If we are in NRWW section, page erase has to be delayed until now. + // Todo: Take RAMPZ into account + if (address >= NRWWSTART) __boot_page_erase_short((uint16_t)(void*)address); + 3ee8: f0 e0 ldi r31, 0x00 ; 0 + 3eea: cf 16 cp r12, r31 + 3eec: f8 e3 ldi r31, 0x38 ; 56 + 3eee: df 06 cpc r13, r31 + 3ef0: 18 f0 brcs .+6 ; 0x3ef8 + 3ef2: f6 01 movw r30, r12 + 3ef4: b7 be out 0x37, r11 ; 55 + 3ef6: e8 95 spm + + // Read command terminator, start reply + verifySpace(); + 3ef8: 68 d0 rcall .+208 ; 0x3fca + + // If only a partial page is to be programmed, the erase might not be complete. + // So check that here + boot_spm_busy_wait(); + 3efa: 07 b6 in r0, 0x37 ; 55 + 3efc: 00 fc sbrc r0, 0 + 3efe: fd cf rjmp .-6 ; 0x3efa + 3f00: a6 01 movw r20, r12 + 3f02: a0 e0 ldi r26, 0x00 ; 0 + 3f04: b1 e0 ldi r27, 0x01 ; 1 + bufPtr = buff; + addrPtr = (uint16_t)(void*)address; + ch = SPM_PAGESIZE / 2; + do { + uint16_t a; + a = *bufPtr++; + 3f06: 2c 91 ld r18, X + 3f08: 30 e0 ldi r19, 0x00 ; 0 + a |= (*bufPtr++) << 8; + 3f0a: 11 96 adiw r26, 0x01 ; 1 + 3f0c: 8c 91 ld r24, X + 3f0e: 11 97 sbiw r26, 0x01 ; 1 + 3f10: 90 e0 ldi r25, 0x00 ; 0 + 3f12: 98 2f mov r25, r24 + 3f14: 88 27 eor r24, r24 + 3f16: 82 2b or r24, r18 + 3f18: 93 2b or r25, r19 +#define rstVect (*(uint16_t*)(RAMSTART+SPM_PAGESIZE*2+4)) +#define wdtVect (*(uint16_t*)(RAMSTART+SPM_PAGESIZE*2+6)) +#endif + +/* main program starts here */ +int main(void) { + 3f1a: 12 96 adiw r26, 0x02 ; 2 + ch = SPM_PAGESIZE / 2; + do { + uint16_t a; + a = *bufPtr++; + a |= (*bufPtr++) << 8; + __boot_page_fill_short((uint16_t)(void*)addrPtr,a); + 3f1c: fa 01 movw r30, r20 + 3f1e: 0c 01 movw r0, r24 + 3f20: 87 be out 0x37, r8 ; 55 + 3f22: e8 95 spm + 3f24: 11 24 eor r1, r1 + addrPtr += 2; + 3f26: 4e 5f subi r20, 0xFE ; 254 + 3f28: 5f 4f sbci r21, 0xFF ; 255 + } while (--ch); + 3f2a: f1 e0 ldi r31, 0x01 ; 1 + 3f2c: a0 38 cpi r26, 0x80 ; 128 + 3f2e: bf 07 cpc r27, r31 + 3f30: 51 f7 brne .-44 ; 0x3f06 + + // Write from programming buffer + __boot_page_write_short((uint16_t)(void*)address); + 3f32: f6 01 movw r30, r12 + 3f34: a7 be out 0x37, r10 ; 55 + 3f36: e8 95 spm + boot_spm_busy_wait(); + 3f38: 07 b6 in r0, 0x37 ; 55 + 3f3a: 00 fc sbrc r0, 0 + 3f3c: fd cf rjmp .-6 ; 0x3f38 + +#if defined(RWWSRE) + // Reenable read access to flash + boot_rww_enable(); + 3f3e: 97 be out 0x37, r9 ; 55 + 3f40: e8 95 spm + 3f42: 26 c0 rjmp .+76 ; 0x3f90 +#endif + + } + /* Read memory block mode, length is big endian. */ + else if(ch == STK_READ_PAGE) { + 3f44: 84 37 cpi r24, 0x74 ; 116 + 3f46: b1 f4 brne .+44 ; 0x3f74 + // READ PAGE - we only read flash + getch(); /* getlen() */ + 3f48: 2e d0 rcall .+92 ; 0x3fa6 + length = getch(); + 3f4a: 2d d0 rcall .+90 ; 0x3fa6 + 3f4c: f8 2e mov r15, r24 + getch(); + 3f4e: 2b d0 rcall .+86 ; 0x3fa6 + + verifySpace(); + 3f50: 3c d0 rcall .+120 ; 0x3fca + 3f52: f6 01 movw r30, r12 + 3f54: ef 2c mov r14, r15 + putch(result); + address++; + } + while (--length); +#else + do putch(pgm_read_byte_near(address++)); + 3f56: 8f 01 movw r16, r30 + 3f58: 0f 5f subi r16, 0xFF ; 255 + 3f5a: 1f 4f sbci r17, 0xFF ; 255 + 3f5c: 84 91 lpm r24, Z+ + 3f5e: 1b d0 rcall .+54 ; 0x3f96 + while (--length); + 3f60: ea 94 dec r14 + 3f62: f8 01 movw r30, r16 + 3f64: c1 f7 brne .-16 ; 0x3f56 +#define rstVect (*(uint16_t*)(RAMSTART+SPM_PAGESIZE*2+4)) +#define wdtVect (*(uint16_t*)(RAMSTART+SPM_PAGESIZE*2+6)) +#endif + +/* main program starts here */ +int main(void) { + 3f66: 08 94 sec + 3f68: c1 1c adc r12, r1 + 3f6a: d1 1c adc r13, r1 + 3f6c: fa 94 dec r15 + 3f6e: cf 0c add r12, r15 + 3f70: d1 1c adc r13, r1 + 3f72: 0e c0 rjmp .+28 ; 0x3f90 +#endif +#endif + } + + /* Get device signature bytes */ + else if(ch == STK_READ_SIGN) { + 3f74: 85 37 cpi r24, 0x75 ; 117 + 3f76: 39 f4 brne .+14 ; 0x3f86 + // READ SIGN - return what Avrdude wants to hear + verifySpace(); + 3f78: 28 d0 rcall .+80 ; 0x3fca + putch(SIGNATURE_0); + 3f7a: 8e e1 ldi r24, 0x1E ; 30 + 3f7c: 0c d0 rcall .+24 ; 0x3f96 + putch(SIGNATURE_1); + 3f7e: 84 e9 ldi r24, 0x94 ; 148 + 3f80: 0a d0 rcall .+20 ; 0x3f96 + putch(SIGNATURE_2); + 3f82: 86 e0 ldi r24, 0x06 ; 6 + 3f84: 7a cf rjmp .-268 ; 0x3e7a + } + else if (ch == 'Q') { + 3f86: 81 35 cpi r24, 0x51 ; 81 + 3f88: 11 f4 brne .+4 ; 0x3f8e + // Adaboot no-wait mod + watchdogConfig(WATCHDOG_16MS); + 3f8a: 88 e0 ldi r24, 0x08 ; 8 + 3f8c: 18 d0 rcall .+48 ; 0x3fbe + verifySpace(); + } + else { + // This covers the response to commands like STK_ENTER_PROGMODE + verifySpace(); + 3f8e: 1d d0 rcall .+58 ; 0x3fca + } + putch(STK_OK); + 3f90: 80 e1 ldi r24, 0x10 ; 16 + 3f92: 01 d0 rcall .+2 ; 0x3f96 + 3f94: 65 cf rjmp .-310 ; 0x3e60 + +00003f96 : + } +} + +void putch(char ch) { + 3f96: 98 2f mov r25, r24 +#ifndef SOFT_UART + while (!(UCSR0A & _BV(UDRE0))); + 3f98: 80 91 c0 00 lds r24, 0x00C0 + 3f9c: 85 ff sbrs r24, 5 + 3f9e: fc cf rjmp .-8 ; 0x3f98 + UDR0 = ch; + 3fa0: 90 93 c6 00 sts 0x00C6, r25 + [uartBit] "I" (UART_TX_BIT) + : + "r25" + ); +#endif +} + 3fa4: 08 95 ret + +00003fa6 : + [uartBit] "I" (UART_RX_BIT) + : + "r25" +); +#else + while(!(UCSR0A & _BV(RXC0))) + 3fa6: 80 91 c0 00 lds r24, 0x00C0 + 3faa: 87 ff sbrs r24, 7 + 3fac: fc cf rjmp .-8 ; 0x3fa6 + ; + if (!(UCSR0A & _BV(FE0))) { + 3fae: 80 91 c0 00 lds r24, 0x00C0 + 3fb2: 84 fd sbrc r24, 4 + 3fb4: 01 c0 rjmp .+2 ; 0x3fb8 +} +#endif + +// Watchdog functions. These are only safe with interrupts turned off. +void watchdogReset() { + __asm__ __volatile__ ( + 3fb6: a8 95 wdr + * don't care that an invalid char is returned...) + */ + watchdogReset(); + } + + ch = UDR0; + 3fb8: 80 91 c6 00 lds r24, 0x00C6 + LED_PIN |= _BV(LED); +#endif +#endif + + return ch; +} + 3fbc: 08 95 ret + +00003fbe : + "wdr\n" + ); +} + +void watchdogConfig(uint8_t x) { + WDTCSR = _BV(WDCE) | _BV(WDE); + 3fbe: e0 e6 ldi r30, 0x60 ; 96 + 3fc0: f0 e0 ldi r31, 0x00 ; 0 + 3fc2: 98 e1 ldi r25, 0x18 ; 24 + 3fc4: 90 83 st Z, r25 + WDTCSR = x; + 3fc6: 80 83 st Z, r24 +} + 3fc8: 08 95 ret + +00003fca : + do getch(); while (--count); + verifySpace(); +} + +void verifySpace() { + if (getch() != CRC_EOP) { + 3fca: ed df rcall .-38 ; 0x3fa6 + 3fcc: 80 32 cpi r24, 0x20 ; 32 + 3fce: 19 f0 breq .+6 ; 0x3fd6 + watchdogConfig(WATCHDOG_16MS); // shorten WD timeout + 3fd0: 88 e0 ldi r24, 0x08 ; 8 + 3fd2: f5 df rcall .-22 ; 0x3fbe + 3fd4: ff cf rjmp .-2 ; 0x3fd4 + while (1) // and busy-loop so that WD causes + ; // a reset and app start. + } + putch(STK_INSYNC); + 3fd6: 84 e1 ldi r24, 0x14 ; 20 +} + 3fd8: de cf rjmp .-68 ; 0x3f96 + +00003fda : + ::[count] "M" (UART_B_VALUE) + ); +} +#endif + +void getNch(uint8_t count) { + 3fda: 1f 93 push r17 + 3fdc: 18 2f mov r17, r24 + do getch(); while (--count); + 3fde: e3 df rcall .-58 ; 0x3fa6 + 3fe0: 11 50 subi r17, 0x01 ; 1 + 3fe2: e9 f7 brne .-6 ; 0x3fde + verifySpace(); + 3fe4: f2 df rcall .-28 ; 0x3fca +} + 3fe6: 1f 91 pop r17 + 3fe8: 08 95 ret + +00003fea : + WDTCSR = _BV(WDCE) | _BV(WDE); + WDTCSR = x; +} + +void appStart() { + watchdogConfig(WATCHDOG_OFF); + 3fea: 80 e0 ldi r24, 0x00 ; 0 + 3fec: e8 df rcall .-48 ; 0x3fbe + __asm__ __volatile__ ( + 3fee: ee 27 eor r30, r30 + 3ff0: ff 27 eor r31, r31 + 3ff2: 09 94 ijmp diff --git a/external/arduino/avr/bootloaders/optiboot/optiboot_atmega328-Mini.hex b/external/arduino/avr/bootloaders/optiboot/optiboot_atmega328-Mini.hex new file mode 100644 index 000000000..02266ee8f --- /dev/null +++ b/external/arduino/avr/bootloaders/optiboot/optiboot_atmega328-Mini.hex @@ -0,0 +1,33 @@ +:107E000085E08093810082E08093C00088E18093C8 +:107E1000C10086E08093C20080E18093C40084B7F3 +:107E200014BE81FFD0D089E2C8D0259A86E020E335 +:107E30003CEF91E0309385002093840096BBB09B8B +:107E4000FECF1D9AA8958150A9F7DD24D394A5E013 +:107E5000EA2EF1E1FF2EA4D0813421F481E0BED0DE +:107E600083E024C0823411F484E103C0853419F422 +:107E700085E0B4D08AC08535A1F492D0082F10E0F7 +:107E800010930102009300028BD090E0982F882776 +:107E9000802B912B880F991F9093010280930002F1 +:107EA00073C0863529F484E099D080E071D06DC02C +:107EB000843609F043C07CD0E0910002F0910102C9 +:107EC00083E080935700E895C0E0D1E069D08993C2 +:107ED000809102028150809302028823B9F778D002 +:107EE00007B600FCFDCF4091000250910102A0E0D6 +:107EF000B1E02C9130E011968C91119790E0982F81 +:107F00008827822B932B1296FA010C01D0925700EE +:107F1000E89511244E5F5F4FF1E0A038BF0749F7A5 +:107F2000E0910002F0910102E0925700E89507B657 +:107F300000FCFDCFF0925700E89527C08437B9F4D4 +:107F400037D046D0E0910002F09101023196F093D3 +:107F50000102E09300023197E4918E2F19D08091B5 +:107F60000202815080930202882361F70EC0853798 +:107F700039F42ED08EE10CD085E90AD08FE096CF6F +:107F8000813511F488E019D023D080E101D063CF8E +:107F9000982F8091C00085FFFCCF9093C600089574 +:107FA000A8958091C00087FFFCCF8091C6000895FE +:107FB000F7DFF6DF80930202F3CFE0E6F0E098E12E +:107FC00090838083089580E0F8DFEE27FF270994EF +:107FD000E7DF803209F0F7DF84E1DACF1F93182F53 +:0C7FE000DFDF1150E9F7F4DF1F91089576 +:0400000300007E007B +:00000001FF diff --git a/external/arduino/avr/bootloaders/optiboot/optiboot_atmega328.hex b/external/arduino/avr/bootloaders/optiboot/optiboot_atmega328.hex new file mode 100644 index 000000000..2a09a245d --- /dev/null +++ b/external/arduino/avr/bootloaders/optiboot/optiboot_atmega328.hex @@ -0,0 +1,35 @@ +:107E0000112484B714BE81FFF0D085E080938100F7 +:107E100082E08093C00088E18093C10086E0809377 +:107E2000C20080E18093C4008EE0C9D0259A86E02C +:107E300020E33CEF91E0309385002093840096BBD3 +:107E4000B09BFECF1D9AA8958150A9F7CC24DD24C4 +:107E500088248394B5E0AB2EA1E19A2EF3E0BF2EE7 +:107E6000A2D0813461F49FD0082FAFD0023811F036 +:107E7000013811F484E001C083E08DD089C08234E0 +:107E800011F484E103C0853419F485E0A6D080C0E4 +:107E9000853579F488D0E82EFF2485D0082F10E0AE +:107EA000102F00270E291F29000F111F8ED06801E7 +:107EB0006FC0863521F484E090D080E0DECF843638 +:107EC00009F040C070D06FD0082F6DD080E0C81688 +:107ED00080E7D80618F4F601B7BEE895C0E0D1E017 +:107EE00062D089930C17E1F7F0E0CF16F0E7DF06D8 +:107EF00018F0F601B7BEE89568D007B600FCFDCFD4 +:107F0000A601A0E0B1E02C9130E011968C91119780 +:107F100090E0982F8827822B932B1296FA010C0160 +:107F200087BEE89511244E5F5F4FF1E0A038BF0790 +:107F300051F7F601A7BEE89507B600FCFDCF97BE46 +:107F4000E89526C08437B1F42ED02DD0F82E2BD052 +:107F50003CD0F601EF2C8F010F5F1F4F84911BD097 +:107F6000EA94F801C1F70894C11CD11CFA94CF0C13 +:107F7000D11C0EC0853739F428D08EE10CD085E9AC +:107F80000AD08FE07ACF813511F488E018D01DD067 +:107F900080E101D065CF982F8091C00085FFFCCF94 +:107FA0009093C60008958091C00087FFFCCF809118 +:107FB000C00084FD01C0A8958091C6000895E0E648 +:107FC000F0E098E1908380830895EDDF803219F02E +:107FD00088E0F5DFFFCF84E1DECF1F93182FE3DFCA +:107FE0001150E9F7F2DF1F91089580E0E8DFEE27F6 +:047FF000FF270994CA +:027FFE00040479 +:0400000300007E007B +:00000001FF diff --git a/external/arduino/avr/bootloaders/optiboot/optiboot_atmega328.lst b/external/arduino/avr/bootloaders/optiboot/optiboot_atmega328.lst new file mode 100644 index 000000000..d9dd4cc20 --- /dev/null +++ b/external/arduino/avr/bootloaders/optiboot/optiboot_atmega328.lst @@ -0,0 +1,598 @@ + +optiboot_atmega328.elf: file format elf32-avr + +Sections: +Idx Name Size VMA LMA File off Algn + 0 .text 000001f4 00007e00 00007e00 00000054 2**1 + CONTENTS, ALLOC, LOAD, READONLY, CODE + 1 .version 00000002 00007ffe 00007ffe 00000248 2**0 + CONTENTS, READONLY + 2 .debug_aranges 00000028 00000000 00000000 0000024a 2**0 + CONTENTS, READONLY, DEBUGGING + 3 .debug_pubnames 0000005f 00000000 00000000 00000272 2**0 + CONTENTS, READONLY, DEBUGGING + 4 .debug_info 000002a8 00000000 00000000 000002d1 2**0 + CONTENTS, READONLY, DEBUGGING + 5 .debug_abbrev 00000178 00000000 00000000 00000579 2**0 + CONTENTS, READONLY, DEBUGGING + 6 .debug_line 00000488 00000000 00000000 000006f1 2**0 + CONTENTS, READONLY, DEBUGGING + 7 .debug_frame 00000080 00000000 00000000 00000b7c 2**2 + CONTENTS, READONLY, DEBUGGING + 8 .debug_str 0000014f 00000000 00000000 00000bfc 2**0 + CONTENTS, READONLY, DEBUGGING + 9 .debug_loc 000002d8 00000000 00000000 00000d4b 2**0 + CONTENTS, READONLY, DEBUGGING + 10 .debug_ranges 00000078 00000000 00000000 00001023 2**0 + CONTENTS, READONLY, DEBUGGING + +Disassembly of section .text: + +00007e00
: +#define rstVect (*(uint16_t*)(RAMSTART+SPM_PAGESIZE*2+4)) +#define wdtVect (*(uint16_t*)(RAMSTART+SPM_PAGESIZE*2+6)) +#endif + +/* main program starts here */ +int main(void) { + 7e00: 11 24 eor r1, r1 +#ifdef __AVR_ATmega8__ + SP=RAMEND; // This is done by hardware reset +#endif + + // Adaboot no-wait mod + ch = MCUSR; + 7e02: 84 b7 in r24, 0x34 ; 52 + MCUSR = 0; + 7e04: 14 be out 0x34, r1 ; 52 + if (!(ch & _BV(EXTRF))) appStart(); + 7e06: 81 ff sbrs r24, 1 + 7e08: f0 d0 rcall .+480 ; 0x7fea + +#if LED_START_FLASHES > 0 + // Set up Timer 1 for timeout counter + TCCR1B = _BV(CS12) | _BV(CS10); // div 1024 + 7e0a: 85 e0 ldi r24, 0x05 ; 5 + 7e0c: 80 93 81 00 sts 0x0081, r24 + UCSRA = _BV(U2X); //Double speed mode USART + UCSRB = _BV(RXEN) | _BV(TXEN); // enable Rx & Tx + UCSRC = _BV(URSEL) | _BV(UCSZ1) | _BV(UCSZ0); // config USART; 8N1 + UBRRL = (uint8_t)( (F_CPU + BAUD_RATE * 4L) / (BAUD_RATE * 8L) - 1 ); +#else + UCSR0A = _BV(U2X0); //Double speed mode USART0 + 7e10: 82 e0 ldi r24, 0x02 ; 2 + 7e12: 80 93 c0 00 sts 0x00C0, r24 + UCSR0B = _BV(RXEN0) | _BV(TXEN0); + 7e16: 88 e1 ldi r24, 0x18 ; 24 + 7e18: 80 93 c1 00 sts 0x00C1, r24 + UCSR0C = _BV(UCSZ00) | _BV(UCSZ01); + 7e1c: 86 e0 ldi r24, 0x06 ; 6 + 7e1e: 80 93 c2 00 sts 0x00C2, r24 + UBRR0L = (uint8_t)( (F_CPU + BAUD_RATE * 4L) / (BAUD_RATE * 8L) - 1 ); + 7e22: 80 e1 ldi r24, 0x10 ; 16 + 7e24: 80 93 c4 00 sts 0x00C4, r24 +#endif +#endif + + // Set up watchdog to trigger after 500ms + watchdogConfig(WATCHDOG_1S); + 7e28: 8e e0 ldi r24, 0x0E ; 14 + 7e2a: c9 d0 rcall .+402 ; 0x7fbe + + /* Set LED pin as output */ + LED_DDR |= _BV(LED); + 7e2c: 25 9a sbi 0x04, 5 ; 4 + 7e2e: 86 e0 ldi r24, 0x06 ; 6 +} + +#if LED_START_FLASHES > 0 +void flash_led(uint8_t count) { + do { + TCNT1 = -(F_CPU/(1024*16)); + 7e30: 20 e3 ldi r18, 0x30 ; 48 + 7e32: 3c ef ldi r19, 0xFC ; 252 + TIFR1 = _BV(TOV1); + 7e34: 91 e0 ldi r25, 0x01 ; 1 +} + +#if LED_START_FLASHES > 0 +void flash_led(uint8_t count) { + do { + TCNT1 = -(F_CPU/(1024*16)); + 7e36: 30 93 85 00 sts 0x0085, r19 + 7e3a: 20 93 84 00 sts 0x0084, r18 + TIFR1 = _BV(TOV1); + 7e3e: 96 bb out 0x16, r25 ; 22 + while(!(TIFR1 & _BV(TOV1))); + 7e40: b0 9b sbis 0x16, 0 ; 22 + 7e42: fe cf rjmp .-4 ; 0x7e40 +#ifdef __AVR_ATmega8__ + LED_PORT ^= _BV(LED); +#else + LED_PIN |= _BV(LED); + 7e44: 1d 9a sbi 0x03, 5 ; 3 +} +#endif + +// Watchdog functions. These are only safe with interrupts turned off. +void watchdogReset() { + __asm__ __volatile__ ( + 7e46: a8 95 wdr + LED_PORT ^= _BV(LED); +#else + LED_PIN |= _BV(LED); +#endif + watchdogReset(); + } while (--count); + 7e48: 81 50 subi r24, 0x01 ; 1 + 7e4a: a9 f7 brne .-22 ; 0x7e36 + 7e4c: cc 24 eor r12, r12 + 7e4e: dd 24 eor r13, r13 + ch = SPM_PAGESIZE / 2; + do { + uint16_t a; + a = *bufPtr++; + a |= (*bufPtr++) << 8; + __boot_page_fill_short((uint16_t)(void*)addrPtr,a); + 7e50: 88 24 eor r8, r8 + 7e52: 83 94 inc r8 + addrPtr += 2; + } while (--ch); + + // Write from programming buffer + __boot_page_write_short((uint16_t)(void*)address); + 7e54: b5 e0 ldi r27, 0x05 ; 5 + 7e56: ab 2e mov r10, r27 + boot_spm_busy_wait(); + +#if defined(RWWSRE) + // Reenable read access to flash + boot_rww_enable(); + 7e58: a1 e1 ldi r26, 0x11 ; 17 + 7e5a: 9a 2e mov r9, r26 + do *bufPtr++ = getch(); + while (--length); + + // If we are in NRWW section, page erase has to be delayed until now. + // Todo: Take RAMPZ into account + if (address >= NRWWSTART) __boot_page_erase_short((uint16_t)(void*)address); + 7e5c: f3 e0 ldi r31, 0x03 ; 3 + 7e5e: bf 2e mov r11, r31 +#endif + + /* Forever loop */ + for (;;) { + /* get character from UART */ + ch = getch(); + 7e60: a2 d0 rcall .+324 ; 0x7fa6 + + if(ch == STK_GET_PARAMETER) { + 7e62: 81 34 cpi r24, 0x41 ; 65 + 7e64: 61 f4 brne .+24 ; 0x7e7e + unsigned char which = getch(); + 7e66: 9f d0 rcall .+318 ; 0x7fa6 + 7e68: 08 2f mov r16, r24 + verifySpace(); + 7e6a: af d0 rcall .+350 ; 0x7fca + if (which == 0x82) { + 7e6c: 02 38 cpi r16, 0x82 ; 130 + 7e6e: 11 f0 breq .+4 ; 0x7e74 + /* + * Send optiboot version as "minor SW version" + */ + putch(OPTIBOOT_MINVER); + } else if (which == 0x81) { + 7e70: 01 38 cpi r16, 0x81 ; 129 + 7e72: 11 f4 brne .+4 ; 0x7e78 + putch(OPTIBOOT_MAJVER); + 7e74: 84 e0 ldi r24, 0x04 ; 4 + 7e76: 01 c0 rjmp .+2 ; 0x7e7a + } else { + /* + * GET PARAMETER returns a generic 0x03 reply for + * other parameters - enough to keep Avrdude happy + */ + putch(0x03); + 7e78: 83 e0 ldi r24, 0x03 ; 3 + 7e7a: 8d d0 rcall .+282 ; 0x7f96 + 7e7c: 89 c0 rjmp .+274 ; 0x7f90 + } + } + else if(ch == STK_SET_DEVICE) { + 7e7e: 82 34 cpi r24, 0x42 ; 66 + 7e80: 11 f4 brne .+4 ; 0x7e86 + // SET DEVICE is ignored + getNch(20); + 7e82: 84 e1 ldi r24, 0x14 ; 20 + 7e84: 03 c0 rjmp .+6 ; 0x7e8c + } + else if(ch == STK_SET_DEVICE_EXT) { + 7e86: 85 34 cpi r24, 0x45 ; 69 + 7e88: 19 f4 brne .+6 ; 0x7e90 + // SET DEVICE EXT is ignored + getNch(5); + 7e8a: 85 e0 ldi r24, 0x05 ; 5 + 7e8c: a6 d0 rcall .+332 ; 0x7fda + 7e8e: 80 c0 rjmp .+256 ; 0x7f90 + } + else if(ch == STK_LOAD_ADDRESS) { + 7e90: 85 35 cpi r24, 0x55 ; 85 + 7e92: 79 f4 brne .+30 ; 0x7eb2 + // LOAD ADDRESS + uint16_t newAddress; + newAddress = getch(); + 7e94: 88 d0 rcall .+272 ; 0x7fa6 + newAddress = (newAddress & 0xff) | (getch() << 8); + 7e96: e8 2e mov r14, r24 + 7e98: ff 24 eor r15, r15 + 7e9a: 85 d0 rcall .+266 ; 0x7fa6 + 7e9c: 08 2f mov r16, r24 + 7e9e: 10 e0 ldi r17, 0x00 ; 0 + 7ea0: 10 2f mov r17, r16 + 7ea2: 00 27 eor r16, r16 + 7ea4: 0e 29 or r16, r14 + 7ea6: 1f 29 or r17, r15 +#ifdef RAMPZ + // Transfer top bit to RAMPZ + RAMPZ = (newAddress & 0x8000) ? 1 : 0; +#endif + newAddress += newAddress; // Convert from word address to byte address + 7ea8: 00 0f add r16, r16 + 7eaa: 11 1f adc r17, r17 + address = newAddress; + verifySpace(); + 7eac: 8e d0 rcall .+284 ; 0x7fca + 7eae: 68 01 movw r12, r16 + 7eb0: 6f c0 rjmp .+222 ; 0x7f90 + } + else if(ch == STK_UNIVERSAL) { + 7eb2: 86 35 cpi r24, 0x56 ; 86 + 7eb4: 21 f4 brne .+8 ; 0x7ebe + // UNIVERSAL command is ignored + getNch(4); + 7eb6: 84 e0 ldi r24, 0x04 ; 4 + 7eb8: 90 d0 rcall .+288 ; 0x7fda + putch(0x00); + 7eba: 80 e0 ldi r24, 0x00 ; 0 + 7ebc: de cf rjmp .-68 ; 0x7e7a + } + /* Write memory, length is big endian and is in bytes */ + else if(ch == STK_PROG_PAGE) { + 7ebe: 84 36 cpi r24, 0x64 ; 100 + 7ec0: 09 f0 breq .+2 ; 0x7ec4 + 7ec2: 40 c0 rjmp .+128 ; 0x7f44 + // PROGRAM PAGE - we support flash programming only, not EEPROM + uint8_t *bufPtr; + uint16_t addrPtr; + + getch(); /* getlen() */ + 7ec4: 70 d0 rcall .+224 ; 0x7fa6 + length = getch(); + 7ec6: 6f d0 rcall .+222 ; 0x7fa6 + 7ec8: 08 2f mov r16, r24 + getch(); + 7eca: 6d d0 rcall .+218 ; 0x7fa6 + + // If we are in RWW section, immediately start page erase + if (address < NRWWSTART) __boot_page_erase_short((uint16_t)(void*)address); + 7ecc: 80 e0 ldi r24, 0x00 ; 0 + 7ece: c8 16 cp r12, r24 + 7ed0: 80 e7 ldi r24, 0x70 ; 112 + 7ed2: d8 06 cpc r13, r24 + 7ed4: 18 f4 brcc .+6 ; 0x7edc + 7ed6: f6 01 movw r30, r12 + 7ed8: b7 be out 0x37, r11 ; 55 + 7eda: e8 95 spm + 7edc: c0 e0 ldi r28, 0x00 ; 0 + 7ede: d1 e0 ldi r29, 0x01 ; 1 + + // While that is going on, read in page contents + bufPtr = buff; + do *bufPtr++ = getch(); + 7ee0: 62 d0 rcall .+196 ; 0x7fa6 + 7ee2: 89 93 st Y+, r24 + while (--length); + 7ee4: 0c 17 cp r16, r28 + 7ee6: e1 f7 brne .-8 ; 0x7ee0 + + // If we are in NRWW section, page erase has to be delayed until now. + // Todo: Take RAMPZ into account + if (address >= NRWWSTART) __boot_page_erase_short((uint16_t)(void*)address); + 7ee8: f0 e0 ldi r31, 0x00 ; 0 + 7eea: cf 16 cp r12, r31 + 7eec: f0 e7 ldi r31, 0x70 ; 112 + 7eee: df 06 cpc r13, r31 + 7ef0: 18 f0 brcs .+6 ; 0x7ef8 + 7ef2: f6 01 movw r30, r12 + 7ef4: b7 be out 0x37, r11 ; 55 + 7ef6: e8 95 spm + + // Read command terminator, start reply + verifySpace(); + 7ef8: 68 d0 rcall .+208 ; 0x7fca + + // If only a partial page is to be programmed, the erase might not be complete. + // So check that here + boot_spm_busy_wait(); + 7efa: 07 b6 in r0, 0x37 ; 55 + 7efc: 00 fc sbrc r0, 0 + 7efe: fd cf rjmp .-6 ; 0x7efa + 7f00: a6 01 movw r20, r12 + 7f02: a0 e0 ldi r26, 0x00 ; 0 + 7f04: b1 e0 ldi r27, 0x01 ; 1 + bufPtr = buff; + addrPtr = (uint16_t)(void*)address; + ch = SPM_PAGESIZE / 2; + do { + uint16_t a; + a = *bufPtr++; + 7f06: 2c 91 ld r18, X + 7f08: 30 e0 ldi r19, 0x00 ; 0 + a |= (*bufPtr++) << 8; + 7f0a: 11 96 adiw r26, 0x01 ; 1 + 7f0c: 8c 91 ld r24, X + 7f0e: 11 97 sbiw r26, 0x01 ; 1 + 7f10: 90 e0 ldi r25, 0x00 ; 0 + 7f12: 98 2f mov r25, r24 + 7f14: 88 27 eor r24, r24 + 7f16: 82 2b or r24, r18 + 7f18: 93 2b or r25, r19 +#define rstVect (*(uint16_t*)(RAMSTART+SPM_PAGESIZE*2+4)) +#define wdtVect (*(uint16_t*)(RAMSTART+SPM_PAGESIZE*2+6)) +#endif + +/* main program starts here */ +int main(void) { + 7f1a: 12 96 adiw r26, 0x02 ; 2 + ch = SPM_PAGESIZE / 2; + do { + uint16_t a; + a = *bufPtr++; + a |= (*bufPtr++) << 8; + __boot_page_fill_short((uint16_t)(void*)addrPtr,a); + 7f1c: fa 01 movw r30, r20 + 7f1e: 0c 01 movw r0, r24 + 7f20: 87 be out 0x37, r8 ; 55 + 7f22: e8 95 spm + 7f24: 11 24 eor r1, r1 + addrPtr += 2; + 7f26: 4e 5f subi r20, 0xFE ; 254 + 7f28: 5f 4f sbci r21, 0xFF ; 255 + } while (--ch); + 7f2a: f1 e0 ldi r31, 0x01 ; 1 + 7f2c: a0 38 cpi r26, 0x80 ; 128 + 7f2e: bf 07 cpc r27, r31 + 7f30: 51 f7 brne .-44 ; 0x7f06 + + // Write from programming buffer + __boot_page_write_short((uint16_t)(void*)address); + 7f32: f6 01 movw r30, r12 + 7f34: a7 be out 0x37, r10 ; 55 + 7f36: e8 95 spm + boot_spm_busy_wait(); + 7f38: 07 b6 in r0, 0x37 ; 55 + 7f3a: 00 fc sbrc r0, 0 + 7f3c: fd cf rjmp .-6 ; 0x7f38 + +#if defined(RWWSRE) + // Reenable read access to flash + boot_rww_enable(); + 7f3e: 97 be out 0x37, r9 ; 55 + 7f40: e8 95 spm + 7f42: 26 c0 rjmp .+76 ; 0x7f90 +#endif + + } + /* Read memory block mode, length is big endian. */ + else if(ch == STK_READ_PAGE) { + 7f44: 84 37 cpi r24, 0x74 ; 116 + 7f46: b1 f4 brne .+44 ; 0x7f74 + // READ PAGE - we only read flash + getch(); /* getlen() */ + 7f48: 2e d0 rcall .+92 ; 0x7fa6 + length = getch(); + 7f4a: 2d d0 rcall .+90 ; 0x7fa6 + 7f4c: f8 2e mov r15, r24 + getch(); + 7f4e: 2b d0 rcall .+86 ; 0x7fa6 + + verifySpace(); + 7f50: 3c d0 rcall .+120 ; 0x7fca + 7f52: f6 01 movw r30, r12 + 7f54: ef 2c mov r14, r15 + putch(result); + address++; + } + while (--length); +#else + do putch(pgm_read_byte_near(address++)); + 7f56: 8f 01 movw r16, r30 + 7f58: 0f 5f subi r16, 0xFF ; 255 + 7f5a: 1f 4f sbci r17, 0xFF ; 255 + 7f5c: 84 91 lpm r24, Z+ + 7f5e: 1b d0 rcall .+54 ; 0x7f96 + while (--length); + 7f60: ea 94 dec r14 + 7f62: f8 01 movw r30, r16 + 7f64: c1 f7 brne .-16 ; 0x7f56 +#define rstVect (*(uint16_t*)(RAMSTART+SPM_PAGESIZE*2+4)) +#define wdtVect (*(uint16_t*)(RAMSTART+SPM_PAGESIZE*2+6)) +#endif + +/* main program starts here */ +int main(void) { + 7f66: 08 94 sec + 7f68: c1 1c adc r12, r1 + 7f6a: d1 1c adc r13, r1 + 7f6c: fa 94 dec r15 + 7f6e: cf 0c add r12, r15 + 7f70: d1 1c adc r13, r1 + 7f72: 0e c0 rjmp .+28 ; 0x7f90 +#endif +#endif + } + + /* Get device signature bytes */ + else if(ch == STK_READ_SIGN) { + 7f74: 85 37 cpi r24, 0x75 ; 117 + 7f76: 39 f4 brne .+14 ; 0x7f86 + // READ SIGN - return what Avrdude wants to hear + verifySpace(); + 7f78: 28 d0 rcall .+80 ; 0x7fca + putch(SIGNATURE_0); + 7f7a: 8e e1 ldi r24, 0x1E ; 30 + 7f7c: 0c d0 rcall .+24 ; 0x7f96 + putch(SIGNATURE_1); + 7f7e: 85 e9 ldi r24, 0x95 ; 149 + 7f80: 0a d0 rcall .+20 ; 0x7f96 + putch(SIGNATURE_2); + 7f82: 8f e0 ldi r24, 0x0F ; 15 + 7f84: 7a cf rjmp .-268 ; 0x7e7a + } + else if (ch == 'Q') { + 7f86: 81 35 cpi r24, 0x51 ; 81 + 7f88: 11 f4 brne .+4 ; 0x7f8e + // Adaboot no-wait mod + watchdogConfig(WATCHDOG_16MS); + 7f8a: 88 e0 ldi r24, 0x08 ; 8 + 7f8c: 18 d0 rcall .+48 ; 0x7fbe + verifySpace(); + } + else { + // This covers the response to commands like STK_ENTER_PROGMODE + verifySpace(); + 7f8e: 1d d0 rcall .+58 ; 0x7fca + } + putch(STK_OK); + 7f90: 80 e1 ldi r24, 0x10 ; 16 + 7f92: 01 d0 rcall .+2 ; 0x7f96 + 7f94: 65 cf rjmp .-310 ; 0x7e60 + +00007f96 : + } +} + +void putch(char ch) { + 7f96: 98 2f mov r25, r24 +#ifndef SOFT_UART + while (!(UCSR0A & _BV(UDRE0))); + 7f98: 80 91 c0 00 lds r24, 0x00C0 + 7f9c: 85 ff sbrs r24, 5 + 7f9e: fc cf rjmp .-8 ; 0x7f98 + UDR0 = ch; + 7fa0: 90 93 c6 00 sts 0x00C6, r25 + [uartBit] "I" (UART_TX_BIT) + : + "r25" + ); +#endif +} + 7fa4: 08 95 ret + +00007fa6 : + [uartBit] "I" (UART_RX_BIT) + : + "r25" +); +#else + while(!(UCSR0A & _BV(RXC0))) + 7fa6: 80 91 c0 00 lds r24, 0x00C0 + 7faa: 87 ff sbrs r24, 7 + 7fac: fc cf rjmp .-8 ; 0x7fa6 + ; + if (!(UCSR0A & _BV(FE0))) { + 7fae: 80 91 c0 00 lds r24, 0x00C0 + 7fb2: 84 fd sbrc r24, 4 + 7fb4: 01 c0 rjmp .+2 ; 0x7fb8 +} +#endif + +// Watchdog functions. These are only safe with interrupts turned off. +void watchdogReset() { + __asm__ __volatile__ ( + 7fb6: a8 95 wdr + * don't care that an invalid char is returned...) + */ + watchdogReset(); + } + + ch = UDR0; + 7fb8: 80 91 c6 00 lds r24, 0x00C6 + LED_PIN |= _BV(LED); +#endif +#endif + + return ch; +} + 7fbc: 08 95 ret + +00007fbe : + "wdr\n" + ); +} + +void watchdogConfig(uint8_t x) { + WDTCSR = _BV(WDCE) | _BV(WDE); + 7fbe: e0 e6 ldi r30, 0x60 ; 96 + 7fc0: f0 e0 ldi r31, 0x00 ; 0 + 7fc2: 98 e1 ldi r25, 0x18 ; 24 + 7fc4: 90 83 st Z, r25 + WDTCSR = x; + 7fc6: 80 83 st Z, r24 +} + 7fc8: 08 95 ret + +00007fca : + do getch(); while (--count); + verifySpace(); +} + +void verifySpace() { + if (getch() != CRC_EOP) { + 7fca: ed df rcall .-38 ; 0x7fa6 + 7fcc: 80 32 cpi r24, 0x20 ; 32 + 7fce: 19 f0 breq .+6 ; 0x7fd6 + watchdogConfig(WATCHDOG_16MS); // shorten WD timeout + 7fd0: 88 e0 ldi r24, 0x08 ; 8 + 7fd2: f5 df rcall .-22 ; 0x7fbe + 7fd4: ff cf rjmp .-2 ; 0x7fd4 + while (1) // and busy-loop so that WD causes + ; // a reset and app start. + } + putch(STK_INSYNC); + 7fd6: 84 e1 ldi r24, 0x14 ; 20 +} + 7fd8: de cf rjmp .-68 ; 0x7f96 + +00007fda : + ::[count] "M" (UART_B_VALUE) + ); +} +#endif + +void getNch(uint8_t count) { + 7fda: 1f 93 push r17 + 7fdc: 18 2f mov r17, r24 + do getch(); while (--count); + 7fde: e3 df rcall .-58 ; 0x7fa6 + 7fe0: 11 50 subi r17, 0x01 ; 1 + 7fe2: e9 f7 brne .-6 ; 0x7fde + verifySpace(); + 7fe4: f2 df rcall .-28 ; 0x7fca +} + 7fe6: 1f 91 pop r17 + 7fe8: 08 95 ret + +00007fea : + WDTCSR = _BV(WDCE) | _BV(WDE); + WDTCSR = x; +} + +void appStart() { + watchdogConfig(WATCHDOG_OFF); + 7fea: 80 e0 ldi r24, 0x00 ; 0 + 7fec: e8 df rcall .-48 ; 0x7fbe + __asm__ __volatile__ ( + 7fee: ee 27 eor r30, r30 + 7ff0: ff 27 eor r31, r31 + 7ff2: 09 94 ijmp diff --git a/external/arduino/avr/bootloaders/optiboot/optiboot_atmega8.hex b/external/arduino/avr/bootloaders/optiboot/optiboot_atmega8.hex new file mode 100644 index 000000000..2278b244a --- /dev/null +++ b/external/arduino/avr/bootloaders/optiboot/optiboot_atmega8.hex @@ -0,0 +1,33 @@ +:101E000011248FE594E09EBF8DBF84B714BE81FF7F +:101E1000E2D085E08EBD82E08BB988E18AB986E8A0 +:101E200080BD80E189B98EE0C2D0BD9A96E020E302 +:101E30003CEF54E040E23DBD2CBD58BF08B602FE69 +:101E4000FDCF88B3842788BBA8959150A1F7CC24F7 +:101E5000DD2488248394B5E0AB2EA1E19A2EF3E033 +:101E6000BF2E9ED0813461F49BD0082FA4D00238BD +:101E700011F0013811F484E001C083E08DD089C0F5 +:101E8000823411F484E103C0853419F485E09BD0D9 +:101E900080C0853579F484D0E82EFF2481D0082FC6 +:101EA00010E0102F00270E291F29000F111F83D0CB +:101EB00068016FC0863521F484E085D080E0DECFF4 +:101EC000843609F040C06CD06BD0082F69D080E018 +:101ED000C81688E1D80618F4F601B7BEE895C0E048 +:101EE000D1E05ED089930C17E1F7F0E0CF16F8E16E +:101EF000DF0618F0F601B7BEE8955DD007B600FC26 +:101F0000FDCFA601A0E0B1E02C9130E011968C91BC +:101F1000119790E0982F8827822B932B1296FA0125 +:101F20000C0187BEE89511244E5F5F4FF1E0A034AD +:101F3000BF0751F7F601A7BEE89507B600FCFDCF35 +:101F400097BEE89526C08437B1F42AD029D0F82E60 +:101F500027D031D0F601EF2C8F010F5F1F4F8491F6 +:101F60001BD0EA94F801C1F70894C11CD11CFA9463 +:101F7000CF0CD11C0EC0853739F41DD08EE10CD0AA +:101F800083E90AD087E07ACF813511F488E00FD059 +:101F900012D080E101D065CF5D9BFECF8CB9089552 +:101FA0005F9BFECF5C9901C0A8958CB1089598E124 +:101FB00091BD81BD0895F4DF803219F088E0F7DF2C +:101FC000FFCF84E1E9CF1F93182FEADF1150E9F723 +:101FD000F2DF1F91089580E0EADFEE27FF270994E2 +:021FFE000404D9 +:0400000300001E00DB +:00000001FF diff --git a/external/arduino/avr/bootloaders/optiboot/optiboot_atmega8.lst b/external/arduino/avr/bootloaders/optiboot/optiboot_atmega8.lst new file mode 100644 index 000000000..d92189582 --- /dev/null +++ b/external/arduino/avr/bootloaders/optiboot/optiboot_atmega8.lst @@ -0,0 +1,604 @@ + +optiboot_atmega8.elf: file format elf32-avr + +Sections: +Idx Name Size VMA LMA File off Algn + 0 .text 000001e0 00001e00 00001e00 00000054 2**1 + CONTENTS, ALLOC, LOAD, READONLY, CODE + 1 .version 00000002 00001ffe 00001ffe 00000234 2**0 + CONTENTS, READONLY + 2 .debug_aranges 00000028 00000000 00000000 00000236 2**0 + CONTENTS, READONLY, DEBUGGING + 3 .debug_pubnames 0000005f 00000000 00000000 0000025e 2**0 + CONTENTS, READONLY, DEBUGGING + 4 .debug_info 000002a6 00000000 00000000 000002bd 2**0 + CONTENTS, READONLY, DEBUGGING + 5 .debug_abbrev 00000169 00000000 00000000 00000563 2**0 + CONTENTS, READONLY, DEBUGGING + 6 .debug_line 00000498 00000000 00000000 000006cc 2**0 + CONTENTS, READONLY, DEBUGGING + 7 .debug_frame 00000080 00000000 00000000 00000b64 2**2 + CONTENTS, READONLY, DEBUGGING + 8 .debug_str 0000014f 00000000 00000000 00000be4 2**0 + CONTENTS, READONLY, DEBUGGING + 9 .debug_loc 000002ba 00000000 00000000 00000d33 2**0 + CONTENTS, READONLY, DEBUGGING + 10 .debug_ranges 00000078 00000000 00000000 00000fed 2**0 + CONTENTS, READONLY, DEBUGGING + +Disassembly of section .text: + +00001e00
: +#define rstVect (*(uint16_t*)(RAMSTART+SPM_PAGESIZE*2+4)) +#define wdtVect (*(uint16_t*)(RAMSTART+SPM_PAGESIZE*2+6)) +#endif + +/* main program starts here */ +int main(void) { + 1e00: 11 24 eor r1, r1 + // + // If not, uncomment the following instructions: + // cli(); + asm volatile ("clr __zero_reg__"); +#ifdef __AVR_ATmega8__ + SP=RAMEND; // This is done by hardware reset + 1e02: 8f e5 ldi r24, 0x5F ; 95 + 1e04: 94 e0 ldi r25, 0x04 ; 4 + 1e06: 9e bf out 0x3e, r25 ; 62 + 1e08: 8d bf out 0x3d, r24 ; 61 +#endif + + // Adaboot no-wait mod + ch = MCUSR; + 1e0a: 84 b7 in r24, 0x34 ; 52 + MCUSR = 0; + 1e0c: 14 be out 0x34, r1 ; 52 + if (!(ch & _BV(EXTRF))) appStart(); + 1e0e: 81 ff sbrs r24, 1 + 1e10: e2 d0 rcall .+452 ; 0x1fd6 + +#if LED_START_FLASHES > 0 + // Set up Timer 1 for timeout counter + TCCR1B = _BV(CS12) | _BV(CS10); // div 1024 + 1e12: 85 e0 ldi r24, 0x05 ; 5 + 1e14: 8e bd out 0x2e, r24 ; 46 +#endif +#ifndef SOFT_UART +#ifdef __AVR_ATmega8__ + UCSRA = _BV(U2X); //Double speed mode USART + 1e16: 82 e0 ldi r24, 0x02 ; 2 + 1e18: 8b b9 out 0x0b, r24 ; 11 + UCSRB = _BV(RXEN) | _BV(TXEN); // enable Rx & Tx + 1e1a: 88 e1 ldi r24, 0x18 ; 24 + 1e1c: 8a b9 out 0x0a, r24 ; 10 + UCSRC = _BV(URSEL) | _BV(UCSZ1) | _BV(UCSZ0); // config USART; 8N1 + 1e1e: 86 e8 ldi r24, 0x86 ; 134 + 1e20: 80 bd out 0x20, r24 ; 32 + UBRRL = (uint8_t)( (F_CPU + BAUD_RATE * 4L) / (BAUD_RATE * 8L) - 1 ); + 1e22: 80 e1 ldi r24, 0x10 ; 16 + 1e24: 89 b9 out 0x09, r24 ; 9 + UBRR0L = (uint8_t)( (F_CPU + BAUD_RATE * 4L) / (BAUD_RATE * 8L) - 1 ); +#endif +#endif + + // Set up watchdog to trigger after 500ms + watchdogConfig(WATCHDOG_1S); + 1e26: 8e e0 ldi r24, 0x0E ; 14 + 1e28: c2 d0 rcall .+388 ; 0x1fae + + /* Set LED pin as output */ + LED_DDR |= _BV(LED); + 1e2a: bd 9a sbi 0x17, 5 ; 23 + 1e2c: 96 e0 ldi r25, 0x06 ; 6 +} + +#if LED_START_FLASHES > 0 +void flash_led(uint8_t count) { + do { + TCNT1 = -(F_CPU/(1024*16)); + 1e2e: 20 e3 ldi r18, 0x30 ; 48 + 1e30: 3c ef ldi r19, 0xFC ; 252 + TIFR1 = _BV(TOV1); + 1e32: 54 e0 ldi r21, 0x04 ; 4 + while(!(TIFR1 & _BV(TOV1))); +#ifdef __AVR_ATmega8__ + LED_PORT ^= _BV(LED); + 1e34: 40 e2 ldi r20, 0x20 ; 32 +} + +#if LED_START_FLASHES > 0 +void flash_led(uint8_t count) { + do { + TCNT1 = -(F_CPU/(1024*16)); + 1e36: 3d bd out 0x2d, r19 ; 45 + 1e38: 2c bd out 0x2c, r18 ; 44 + TIFR1 = _BV(TOV1); + 1e3a: 58 bf out 0x38, r21 ; 56 + while(!(TIFR1 & _BV(TOV1))); + 1e3c: 08 b6 in r0, 0x38 ; 56 + 1e3e: 02 fe sbrs r0, 2 + 1e40: fd cf rjmp .-6 ; 0x1e3c +#ifdef __AVR_ATmega8__ + LED_PORT ^= _BV(LED); + 1e42: 88 b3 in r24, 0x18 ; 24 + 1e44: 84 27 eor r24, r20 + 1e46: 88 bb out 0x18, r24 ; 24 +} +#endif + +// Watchdog functions. These are only safe with interrupts turned off. +void watchdogReset() { + __asm__ __volatile__ ( + 1e48: a8 95 wdr + LED_PORT ^= _BV(LED); +#else + LED_PIN |= _BV(LED); +#endif + watchdogReset(); + } while (--count); + 1e4a: 91 50 subi r25, 0x01 ; 1 + 1e4c: a1 f7 brne .-24 ; 0x1e36 + 1e4e: cc 24 eor r12, r12 + 1e50: dd 24 eor r13, r13 + ch = SPM_PAGESIZE / 2; + do { + uint16_t a; + a = *bufPtr++; + a |= (*bufPtr++) << 8; + __boot_page_fill_short((uint16_t)(void*)addrPtr,a); + 1e52: 88 24 eor r8, r8 + 1e54: 83 94 inc r8 + addrPtr += 2; + } while (--ch); + + // Write from programming buffer + __boot_page_write_short((uint16_t)(void*)address); + 1e56: b5 e0 ldi r27, 0x05 ; 5 + 1e58: ab 2e mov r10, r27 + boot_spm_busy_wait(); + +#if defined(RWWSRE) + // Reenable read access to flash + boot_rww_enable(); + 1e5a: a1 e1 ldi r26, 0x11 ; 17 + 1e5c: 9a 2e mov r9, r26 + do *bufPtr++ = getch(); + while (--length); + + // If we are in NRWW section, page erase has to be delayed until now. + // Todo: Take RAMPZ into account + if (address >= NRWWSTART) __boot_page_erase_short((uint16_t)(void*)address); + 1e5e: f3 e0 ldi r31, 0x03 ; 3 + 1e60: bf 2e mov r11, r31 +#endif + + /* Forever loop */ + for (;;) { + /* get character from UART */ + ch = getch(); + 1e62: 9e d0 rcall .+316 ; 0x1fa0 + + if(ch == STK_GET_PARAMETER) { + 1e64: 81 34 cpi r24, 0x41 ; 65 + 1e66: 61 f4 brne .+24 ; 0x1e80 + unsigned char which = getch(); + 1e68: 9b d0 rcall .+310 ; 0x1fa0 + 1e6a: 08 2f mov r16, r24 + verifySpace(); + 1e6c: a4 d0 rcall .+328 ; 0x1fb6 + if (which == 0x82) { + 1e6e: 02 38 cpi r16, 0x82 ; 130 + 1e70: 11 f0 breq .+4 ; 0x1e76 + /* + * Send optiboot version as "minor SW version" + */ + putch(OPTIBOOT_MINVER); + } else if (which == 0x81) { + 1e72: 01 38 cpi r16, 0x81 ; 129 + 1e74: 11 f4 brne .+4 ; 0x1e7a + putch(OPTIBOOT_MAJVER); + 1e76: 84 e0 ldi r24, 0x04 ; 4 + 1e78: 01 c0 rjmp .+2 ; 0x1e7c + } else { + /* + * GET PARAMETER returns a generic 0x03 reply for + * other parameters - enough to keep Avrdude happy + */ + putch(0x03); + 1e7a: 83 e0 ldi r24, 0x03 ; 3 + 1e7c: 8d d0 rcall .+282 ; 0x1f98 + 1e7e: 89 c0 rjmp .+274 ; 0x1f92 + } + } + else if(ch == STK_SET_DEVICE) { + 1e80: 82 34 cpi r24, 0x42 ; 66 + 1e82: 11 f4 brne .+4 ; 0x1e88 + // SET DEVICE is ignored + getNch(20); + 1e84: 84 e1 ldi r24, 0x14 ; 20 + 1e86: 03 c0 rjmp .+6 ; 0x1e8e + } + else if(ch == STK_SET_DEVICE_EXT) { + 1e88: 85 34 cpi r24, 0x45 ; 69 + 1e8a: 19 f4 brne .+6 ; 0x1e92 + // SET DEVICE EXT is ignored + getNch(5); + 1e8c: 85 e0 ldi r24, 0x05 ; 5 + 1e8e: 9b d0 rcall .+310 ; 0x1fc6 + 1e90: 80 c0 rjmp .+256 ; 0x1f92 + } + else if(ch == STK_LOAD_ADDRESS) { + 1e92: 85 35 cpi r24, 0x55 ; 85 + 1e94: 79 f4 brne .+30 ; 0x1eb4 + // LOAD ADDRESS + uint16_t newAddress; + newAddress = getch(); + 1e96: 84 d0 rcall .+264 ; 0x1fa0 + newAddress = (newAddress & 0xff) | (getch() << 8); + 1e98: e8 2e mov r14, r24 + 1e9a: ff 24 eor r15, r15 + 1e9c: 81 d0 rcall .+258 ; 0x1fa0 + 1e9e: 08 2f mov r16, r24 + 1ea0: 10 e0 ldi r17, 0x00 ; 0 + 1ea2: 10 2f mov r17, r16 + 1ea4: 00 27 eor r16, r16 + 1ea6: 0e 29 or r16, r14 + 1ea8: 1f 29 or r17, r15 +#ifdef RAMPZ + // Transfer top bit to RAMPZ + RAMPZ = (newAddress & 0x8000) ? 1 : 0; +#endif + newAddress += newAddress; // Convert from word address to byte address + 1eaa: 00 0f add r16, r16 + 1eac: 11 1f adc r17, r17 + address = newAddress; + verifySpace(); + 1eae: 83 d0 rcall .+262 ; 0x1fb6 + 1eb0: 68 01 movw r12, r16 + 1eb2: 6f c0 rjmp .+222 ; 0x1f92 + } + else if(ch == STK_UNIVERSAL) { + 1eb4: 86 35 cpi r24, 0x56 ; 86 + 1eb6: 21 f4 brne .+8 ; 0x1ec0 + // UNIVERSAL command is ignored + getNch(4); + 1eb8: 84 e0 ldi r24, 0x04 ; 4 + 1eba: 85 d0 rcall .+266 ; 0x1fc6 + putch(0x00); + 1ebc: 80 e0 ldi r24, 0x00 ; 0 + 1ebe: de cf rjmp .-68 ; 0x1e7c + } + /* Write memory, length is big endian and is in bytes */ + else if(ch == STK_PROG_PAGE) { + 1ec0: 84 36 cpi r24, 0x64 ; 100 + 1ec2: 09 f0 breq .+2 ; 0x1ec6 + 1ec4: 40 c0 rjmp .+128 ; 0x1f46 + // PROGRAM PAGE - we support flash programming only, not EEPROM + uint8_t *bufPtr; + uint16_t addrPtr; + + getch(); /* getlen() */ + 1ec6: 6c d0 rcall .+216 ; 0x1fa0 + length = getch(); + 1ec8: 6b d0 rcall .+214 ; 0x1fa0 + 1eca: 08 2f mov r16, r24 + getch(); + 1ecc: 69 d0 rcall .+210 ; 0x1fa0 + + // If we are in RWW section, immediately start page erase + if (address < NRWWSTART) __boot_page_erase_short((uint16_t)(void*)address); + 1ece: 80 e0 ldi r24, 0x00 ; 0 + 1ed0: c8 16 cp r12, r24 + 1ed2: 88 e1 ldi r24, 0x18 ; 24 + 1ed4: d8 06 cpc r13, r24 + 1ed6: 18 f4 brcc .+6 ; 0x1ede + 1ed8: f6 01 movw r30, r12 + 1eda: b7 be out 0x37, r11 ; 55 + 1edc: e8 95 spm + 1ede: c0 e0 ldi r28, 0x00 ; 0 + 1ee0: d1 e0 ldi r29, 0x01 ; 1 + + // While that is going on, read in page contents + bufPtr = buff; + do *bufPtr++ = getch(); + 1ee2: 5e d0 rcall .+188 ; 0x1fa0 + 1ee4: 89 93 st Y+, r24 + while (--length); + 1ee6: 0c 17 cp r16, r28 + 1ee8: e1 f7 brne .-8 ; 0x1ee2 + + // If we are in NRWW section, page erase has to be delayed until now. + // Todo: Take RAMPZ into account + if (address >= NRWWSTART) __boot_page_erase_short((uint16_t)(void*)address); + 1eea: f0 e0 ldi r31, 0x00 ; 0 + 1eec: cf 16 cp r12, r31 + 1eee: f8 e1 ldi r31, 0x18 ; 24 + 1ef0: df 06 cpc r13, r31 + 1ef2: 18 f0 brcs .+6 ; 0x1efa + 1ef4: f6 01 movw r30, r12 + 1ef6: b7 be out 0x37, r11 ; 55 + 1ef8: e8 95 spm + + // Read command terminator, start reply + verifySpace(); + 1efa: 5d d0 rcall .+186 ; 0x1fb6 + + // If only a partial page is to be programmed, the erase might not be complete. + // So check that here + boot_spm_busy_wait(); + 1efc: 07 b6 in r0, 0x37 ; 55 + 1efe: 00 fc sbrc r0, 0 + 1f00: fd cf rjmp .-6 ; 0x1efc + 1f02: a6 01 movw r20, r12 + 1f04: a0 e0 ldi r26, 0x00 ; 0 + 1f06: b1 e0 ldi r27, 0x01 ; 1 + bufPtr = buff; + addrPtr = (uint16_t)(void*)address; + ch = SPM_PAGESIZE / 2; + do { + uint16_t a; + a = *bufPtr++; + 1f08: 2c 91 ld r18, X + 1f0a: 30 e0 ldi r19, 0x00 ; 0 + a |= (*bufPtr++) << 8; + 1f0c: 11 96 adiw r26, 0x01 ; 1 + 1f0e: 8c 91 ld r24, X + 1f10: 11 97 sbiw r26, 0x01 ; 1 + 1f12: 90 e0 ldi r25, 0x00 ; 0 + 1f14: 98 2f mov r25, r24 + 1f16: 88 27 eor r24, r24 + 1f18: 82 2b or r24, r18 + 1f1a: 93 2b or r25, r19 +#define rstVect (*(uint16_t*)(RAMSTART+SPM_PAGESIZE*2+4)) +#define wdtVect (*(uint16_t*)(RAMSTART+SPM_PAGESIZE*2+6)) +#endif + +/* main program starts here */ +int main(void) { + 1f1c: 12 96 adiw r26, 0x02 ; 2 + ch = SPM_PAGESIZE / 2; + do { + uint16_t a; + a = *bufPtr++; + a |= (*bufPtr++) << 8; + __boot_page_fill_short((uint16_t)(void*)addrPtr,a); + 1f1e: fa 01 movw r30, r20 + 1f20: 0c 01 movw r0, r24 + 1f22: 87 be out 0x37, r8 ; 55 + 1f24: e8 95 spm + 1f26: 11 24 eor r1, r1 + addrPtr += 2; + 1f28: 4e 5f subi r20, 0xFE ; 254 + 1f2a: 5f 4f sbci r21, 0xFF ; 255 + } while (--ch); + 1f2c: f1 e0 ldi r31, 0x01 ; 1 + 1f2e: a0 34 cpi r26, 0x40 ; 64 + 1f30: bf 07 cpc r27, r31 + 1f32: 51 f7 brne .-44 ; 0x1f08 + + // Write from programming buffer + __boot_page_write_short((uint16_t)(void*)address); + 1f34: f6 01 movw r30, r12 + 1f36: a7 be out 0x37, r10 ; 55 + 1f38: e8 95 spm + boot_spm_busy_wait(); + 1f3a: 07 b6 in r0, 0x37 ; 55 + 1f3c: 00 fc sbrc r0, 0 + 1f3e: fd cf rjmp .-6 ; 0x1f3a + +#if defined(RWWSRE) + // Reenable read access to flash + boot_rww_enable(); + 1f40: 97 be out 0x37, r9 ; 55 + 1f42: e8 95 spm + 1f44: 26 c0 rjmp .+76 ; 0x1f92 +#endif + + } + /* Read memory block mode, length is big endian. */ + else if(ch == STK_READ_PAGE) { + 1f46: 84 37 cpi r24, 0x74 ; 116 + 1f48: b1 f4 brne .+44 ; 0x1f76 + // READ PAGE - we only read flash + getch(); /* getlen() */ + 1f4a: 2a d0 rcall .+84 ; 0x1fa0 + length = getch(); + 1f4c: 29 d0 rcall .+82 ; 0x1fa0 + 1f4e: f8 2e mov r15, r24 + getch(); + 1f50: 27 d0 rcall .+78 ; 0x1fa0 + + verifySpace(); + 1f52: 31 d0 rcall .+98 ; 0x1fb6 + 1f54: f6 01 movw r30, r12 + 1f56: ef 2c mov r14, r15 + putch(result); + address++; + } + while (--length); +#else + do putch(pgm_read_byte_near(address++)); + 1f58: 8f 01 movw r16, r30 + 1f5a: 0f 5f subi r16, 0xFF ; 255 + 1f5c: 1f 4f sbci r17, 0xFF ; 255 + 1f5e: 84 91 lpm r24, Z+ + 1f60: 1b d0 rcall .+54 ; 0x1f98 + while (--length); + 1f62: ea 94 dec r14 + 1f64: f8 01 movw r30, r16 + 1f66: c1 f7 brne .-16 ; 0x1f58 +#define rstVect (*(uint16_t*)(RAMSTART+SPM_PAGESIZE*2+4)) +#define wdtVect (*(uint16_t*)(RAMSTART+SPM_PAGESIZE*2+6)) +#endif + +/* main program starts here */ +int main(void) { + 1f68: 08 94 sec + 1f6a: c1 1c adc r12, r1 + 1f6c: d1 1c adc r13, r1 + 1f6e: fa 94 dec r15 + 1f70: cf 0c add r12, r15 + 1f72: d1 1c adc r13, r1 + 1f74: 0e c0 rjmp .+28 ; 0x1f92 +#endif +#endif + } + + /* Get device signature bytes */ + else if(ch == STK_READ_SIGN) { + 1f76: 85 37 cpi r24, 0x75 ; 117 + 1f78: 39 f4 brne .+14 ; 0x1f88 + // READ SIGN - return what Avrdude wants to hear + verifySpace(); + 1f7a: 1d d0 rcall .+58 ; 0x1fb6 + putch(SIGNATURE_0); + 1f7c: 8e e1 ldi r24, 0x1E ; 30 + 1f7e: 0c d0 rcall .+24 ; 0x1f98 + putch(SIGNATURE_1); + 1f80: 83 e9 ldi r24, 0x93 ; 147 + 1f82: 0a d0 rcall .+20 ; 0x1f98 + putch(SIGNATURE_2); + 1f84: 87 e0 ldi r24, 0x07 ; 7 + 1f86: 7a cf rjmp .-268 ; 0x1e7c + } + else if (ch == 'Q') { + 1f88: 81 35 cpi r24, 0x51 ; 81 + 1f8a: 11 f4 brne .+4 ; 0x1f90 + // Adaboot no-wait mod + watchdogConfig(WATCHDOG_16MS); + 1f8c: 88 e0 ldi r24, 0x08 ; 8 + 1f8e: 0f d0 rcall .+30 ; 0x1fae + verifySpace(); + } + else { + // This covers the response to commands like STK_ENTER_PROGMODE + verifySpace(); + 1f90: 12 d0 rcall .+36 ; 0x1fb6 + } + putch(STK_OK); + 1f92: 80 e1 ldi r24, 0x10 ; 16 + 1f94: 01 d0 rcall .+2 ; 0x1f98 + 1f96: 65 cf rjmp .-310 ; 0x1e62 + +00001f98 : + } +} + +void putch(char ch) { +#ifndef SOFT_UART + while (!(UCSR0A & _BV(UDRE0))); + 1f98: 5d 9b sbis 0x0b, 5 ; 11 + 1f9a: fe cf rjmp .-4 ; 0x1f98 + UDR0 = ch; + 1f9c: 8c b9 out 0x0c, r24 ; 12 + [uartBit] "I" (UART_TX_BIT) + : + "r25" + ); +#endif +} + 1f9e: 08 95 ret + +00001fa0 : + [uartBit] "I" (UART_RX_BIT) + : + "r25" +); +#else + while(!(UCSR0A & _BV(RXC0))) + 1fa0: 5f 9b sbis 0x0b, 7 ; 11 + 1fa2: fe cf rjmp .-4 ; 0x1fa0 + ; + if (!(UCSR0A & _BV(FE0))) { + 1fa4: 5c 99 sbic 0x0b, 4 ; 11 + 1fa6: 01 c0 rjmp .+2 ; 0x1faa +} +#endif + +// Watchdog functions. These are only safe with interrupts turned off. +void watchdogReset() { + __asm__ __volatile__ ( + 1fa8: a8 95 wdr + * don't care that an invalid char is returned...) + */ + watchdogReset(); + } + + ch = UDR0; + 1faa: 8c b1 in r24, 0x0c ; 12 + LED_PIN |= _BV(LED); +#endif +#endif + + return ch; +} + 1fac: 08 95 ret + +00001fae : + "wdr\n" + ); +} + +void watchdogConfig(uint8_t x) { + WDTCSR = _BV(WDCE) | _BV(WDE); + 1fae: 98 e1 ldi r25, 0x18 ; 24 + 1fb0: 91 bd out 0x21, r25 ; 33 + WDTCSR = x; + 1fb2: 81 bd out 0x21, r24 ; 33 +} + 1fb4: 08 95 ret + +00001fb6 : + do getch(); while (--count); + verifySpace(); +} + +void verifySpace() { + if (getch() != CRC_EOP) { + 1fb6: f4 df rcall .-24 ; 0x1fa0 + 1fb8: 80 32 cpi r24, 0x20 ; 32 + 1fba: 19 f0 breq .+6 ; 0x1fc2 + watchdogConfig(WATCHDOG_16MS); // shorten WD timeout + 1fbc: 88 e0 ldi r24, 0x08 ; 8 + 1fbe: f7 df rcall .-18 ; 0x1fae + 1fc0: ff cf rjmp .-2 ; 0x1fc0 + while (1) // and busy-loop so that WD causes + ; // a reset and app start. + } + putch(STK_INSYNC); + 1fc2: 84 e1 ldi r24, 0x14 ; 20 +} + 1fc4: e9 cf rjmp .-46 ; 0x1f98 + +00001fc6 : + ::[count] "M" (UART_B_VALUE) + ); +} +#endif + +void getNch(uint8_t count) { + 1fc6: 1f 93 push r17 + 1fc8: 18 2f mov r17, r24 + do getch(); while (--count); + 1fca: ea df rcall .-44 ; 0x1fa0 + 1fcc: 11 50 subi r17, 0x01 ; 1 + 1fce: e9 f7 brne .-6 ; 0x1fca + verifySpace(); + 1fd0: f2 df rcall .-28 ; 0x1fb6 +} + 1fd2: 1f 91 pop r17 + 1fd4: 08 95 ret + +00001fd6 : + WDTCSR = _BV(WDCE) | _BV(WDE); + WDTCSR = x; +} + +void appStart() { + watchdogConfig(WATCHDOG_OFF); + 1fd6: 80 e0 ldi r24, 0x00 ; 0 + 1fd8: ea df rcall .-44 ; 0x1fae + __asm__ __volatile__ ( + 1fda: ee 27 eor r30, r30 + 1fdc: ff 27 eor r31, r31 + 1fde: 09 94 ijmp diff --git a/external/arduino/avr/bootloaders/optiboot/pin_defs.h b/external/arduino/avr/bootloaders/optiboot/pin_defs.h new file mode 100644 index 000000000..61ce64ee1 --- /dev/null +++ b/external/arduino/avr/bootloaders/optiboot/pin_defs.h @@ -0,0 +1,80 @@ +#if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) || defined(__AVR_ATmega328__) || defined(__AVR_ATmega88) || defined(__AVR_ATmega8__) || defined(__AVR_ATmega88__) +/* Onboard LED is connected to pin PB5 in Arduino NG, Diecimila, and Duemilanove */ +#define LED_DDR DDRB +#define LED_PORT PORTB +#define LED_PIN PINB +#define LED PINB5 + +/* Ports for soft UART */ +#ifdef SOFT_UART +#define UART_PORT PORTD +#define UART_PIN PIND +#define UART_DDR DDRD +#define UART_TX_BIT 1 +#define UART_RX_BIT 0 +#endif +#endif + +#if defined(__AVR_ATmega8__) + //Name conversion R.Wiersma + #define UCSR0A UCSRA + #define UDR0 UDR + #define UDRE0 UDRE + #define RXC0 RXC + #define FE0 FE + #define TIFR1 TIFR + #define WDTCSR WDTCR +#endif + +/* Luminet support */ +#if defined(__AVR_ATtiny84__) +/* Red LED is connected to pin PA4 */ +#define LED_DDR DDRA +#define LED_PORT PORTA +#define LED_PIN PINA +#define LED PINA4 +/* Ports for soft UART - left port only for now. TX/RX on PA2/PA3 */ +#ifdef SOFT_UART +#define UART_PORT PORTA +#define UART_PIN PINA +#define UART_DDR DDRA +#define UART_TX_BIT 2 +#define UART_RX_BIT 3 +#endif +#endif + +/* Sanguino support */ +#if defined(__AVR_ATmega644P__) +/* Onboard LED is connected to pin PB0 on Sanguino */ +#define LED_DDR DDRB +#define LED_PORT PORTB +#define LED_PIN PINB +#define LED PINB0 + +/* Ports for soft UART */ +#ifdef SOFT_UART +#define UART_PORT PORTD +#define UART_PIN PIND +#define UART_DDR DDRD +#define UART_TX_BIT 1 +#define UART_RX_BIT 0 +#endif +#endif + +/* Mega support */ +#if defined(__AVR_ATmega1280__) +/* Onboard LED is connected to pin PB7 on Arduino Mega */ +#define LED_DDR DDRB +#define LED_PORT PORTB +#define LED_PIN PINB +#define LED PINB7 + +/* Ports for soft UART */ +#ifdef SOFT_UART +#define UART_PORT PORTE +#define UART_PIN PINE +#define UART_DDR DDRE +#define UART_TX_BIT 1 +#define UART_RX_BIT 0 +#endif +#endif diff --git a/external/arduino/avr/bootloaders/optiboot/stk500.h b/external/arduino/avr/bootloaders/optiboot/stk500.h new file mode 100644 index 000000000..ca0dd91df --- /dev/null +++ b/external/arduino/avr/bootloaders/optiboot/stk500.h @@ -0,0 +1,39 @@ +/* STK500 constants list, from AVRDUDE */ +#define STK_OK 0x10 +#define STK_FAILED 0x11 // Not used +#define STK_UNKNOWN 0x12 // Not used +#define STK_NODEVICE 0x13 // Not used +#define STK_INSYNC 0x14 // ' ' +#define STK_NOSYNC 0x15 // Not used +#define ADC_CHANNEL_ERROR 0x16 // Not used +#define ADC_MEASURE_OK 0x17 // Not used +#define PWM_CHANNEL_ERROR 0x18 // Not used +#define PWM_ADJUST_OK 0x19 // Not used +#define CRC_EOP 0x20 // 'SPACE' +#define STK_GET_SYNC 0x30 // '0' +#define STK_GET_SIGN_ON 0x31 // '1' +#define STK_SET_PARAMETER 0x40 // '@' +#define STK_GET_PARAMETER 0x41 // 'A' +#define STK_SET_DEVICE 0x42 // 'B' +#define STK_SET_DEVICE_EXT 0x45 // 'E' +#define STK_ENTER_PROGMODE 0x50 // 'P' +#define STK_LEAVE_PROGMODE 0x51 // 'Q' +#define STK_CHIP_ERASE 0x52 // 'R' +#define STK_CHECK_AUTOINC 0x53 // 'S' +#define STK_LOAD_ADDRESS 0x55 // 'U' +#define STK_UNIVERSAL 0x56 // 'V' +#define STK_PROG_FLASH 0x60 // '`' +#define STK_PROG_DATA 0x61 // 'a' +#define STK_PROG_FUSE 0x62 // 'b' +#define STK_PROG_LOCK 0x63 // 'c' +#define STK_PROG_PAGE 0x64 // 'd' +#define STK_PROG_FUSE_EXT 0x65 // 'e' +#define STK_READ_FLASH 0x70 // 'p' +#define STK_READ_DATA 0x71 // 'q' +#define STK_READ_FUSE 0x72 // 'r' +#define STK_READ_LOCK 0x73 // 's' +#define STK_READ_PAGE 0x74 // 't' +#define STK_READ_SIGN 0x75 // 'u' +#define STK_READ_OSCCAL 0x76 // 'v' +#define STK_READ_FUSE_EXT 0x77 // 'w' +#define STK_READ_OSCCAL_EXT 0x78 // 'x' diff --git a/external/arduino/avr/bootloaders/stk500v2/License.txt b/external/arduino/avr/bootloaders/stk500v2/License.txt new file mode 100644 index 000000000..a66eb905e --- /dev/null +++ b/external/arduino/avr/bootloaders/stk500v2/License.txt @@ -0,0 +1,280 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS diff --git a/external/arduino/avr/bootloaders/stk500v2/Makefile b/external/arduino/avr/bootloaders/stk500v2/Makefile new file mode 100644 index 000000000..5148cb0ba --- /dev/null +++ b/external/arduino/avr/bootloaders/stk500v2/Makefile @@ -0,0 +1,587 @@ +# ---------------------------------------------------------------------------- +# Makefile to compile and link stk500boot bootloader +# Author: Peter Fleury +# based on WinAVR Makefile Template written by Eric B. Weddington, Jrg Wunsch, et al. +# +# Adjust F_CPU below to the clock frequency in Mhz of your AVR target +# Adjust BOOTLOADER_ADDRESS to your AVR target +# +#---------------------------------------------------------------------------- +# On command line: +# +# make all = Make software. +# +# make clean = Clean out built project files. +# +# make coff = Convert ELF to AVR COFF. +# +# make extcoff = Convert ELF to AVR Extended COFF. +# +# make program = Download the hex file to the device, using avrdude. +# Please customize the avrdude settings below first! +# +# make debug = Start either simulavr or avarice as specified for debugging, +# with avr-gdb or avr-insight as the front end for debugging. +# +# make filename.s = Just compile filename.c into the assembler code only. +# +# make filename.i = Create a preprocessed source file for use in submitting +# bug reports to the GCC project. +# +# To rebuild project do "make clean" then "make all". +#---------------------------------------------------------------------------- +# = Mark Sproul msproul-at-skychariot.com + + +# MCU name +#MCU = atmega128 + + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +#F_CPU = 16000000 + + +# Bootloader +# Please adjust if using a different AVR +# 0x0e00*2=0x1C00 for ATmega8 512 words Boot Size +# 0xFC00*2=0x1F800 for ATmega128 1024 words Boot Size +# 0xF800*2=0x1F000 for ATmega1280 +# 0xF000*2=0x1E000 for ATmega1280 +#BOOTLOADER_ADDRESS = 1E000 + + +# Output format. (can be srec, ihex, binary) +FORMAT = ihex + + +# Target file name (without extension). +TARGET = stk500boot + + +# List C source files here. (C dependencies are automatically generated.) +SRC = stk500boot.c + + +# List Assembler source files here. +# Make them always end in a capital .S. Files ending in a lowercase .s +# will not be considered source files but generated files (assembler +# output from the compiler), and will be deleted upon "make clean"! +# Even though the DOS/Win* filesystem matches both .s and .S the same, +# it will preserve the spelling of the filenames, and gcc itself does +# care about how the name is spelled on its command-line. +ASRC = + + +# Optimization level, can be [0, 1, 2, 3, s]. +# 0 = turn off optimization. s = optimize for size. +# (Note: 3 is not always the best optimization level. See avr-libc FAQ.) +OPT = s + + +# Debugging format. +# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs. +# AVR Studio 4.10 requires dwarf-2. +# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run. +DEBUG = dwarf-2 + + +# List any extra directories to look for include files here. +# Each directory must be seperated by a space. +# Use forward slashes for directory separators. +# For a directory that has spaces, enclose it in quotes. +EXTRAINCDIRS = + + +# Compiler flag to set the C Standard level. +# c89 = "ANSI" C +# gnu89 = c89 plus GCC extensions +# c99 = ISO C99 standard (not yet fully implemented) +# gnu99 = c99 plus GCC extensions +CSTANDARD = -std=gnu99 + + +# Place -D or -U options here +CDEFS = -DF_CPU=$(F_CPU)UL + + +# Place -I options here +CINCS = + + + +#---------------- Compiler Options ---------------- +# -g*: generate debugging information +# -O*: optimization level +# -f...: tuning, see GCC manual and avr-libc documentation +# -Wall...: warning level +# -Wa,...: tell GCC to pass this to the assembler. +# -adhlns...: create assembler listing +CFLAGS = -g$(DEBUG) +CFLAGS += $(CDEFS) $(CINCS) +CFLAGS += -O$(OPT) +CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -fno-jump-tables +CFLAGS += -Wall -Wstrict-prototypes +CFLAGS += -Wa,-adhlns=$(<:.c=.lst) +CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) +CFLAGS += $(CSTANDARD) + + +#---------------- Assembler Options ---------------- +# -Wa,...: tell GCC to pass this to the assembler. +# -ahlms: create listing +# -gstabs: have the assembler create line number information; note that +# for use in COFF files, additional information about filenames +# and function names needs to be present in the assembler source +# files -- see avr-libc docs [FIXME: not yet described there] +ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs + + +#---------------- Library Options ---------------- +# Minimalistic printf version +PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min + +# Floating point printf version (requires MATH_LIB = -lm below) +PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt + +# If this is left blank, then it will use the Standard printf version. +PRINTF_LIB = +#PRINTF_LIB = $(PRINTF_LIB_MIN) +#PRINTF_LIB = $(PRINTF_LIB_FLOAT) + + +# Minimalistic scanf version +SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min + +# Floating point + %[ scanf version (requires MATH_LIB = -lm below) +SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt + +# If this is left blank, then it will use the Standard scanf version. +SCANF_LIB = +#SCANF_LIB = $(SCANF_LIB_MIN) +#SCANF_LIB = $(SCANF_LIB_FLOAT) + + +MATH_LIB = -lm + + + +#---------------- External Memory Options ---------------- + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# used for variables (.data/.bss) and heap (malloc()). +#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# only used for heap (malloc()). +#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff + +EXTMEMOPTS = + + + + +#---------------- Linker Options ---------------- +# -Wl,...: tell GCC to pass this to linker. +# -Map: create map file +# --cref: add cross reference to map file +LDFLAGS = -Wl,-Map=$(TARGET).map,--cref +LDFLAGS += $(EXTMEMOPTS) +LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) + + +#--------------- bootloader linker Options ------- +# BOOTLOADER_ADDRESS (=Start of Boot Loader section +# in bytes - not words) is defined above. +#LDFLAGS += -Wl,--section-start=.text=$(BOOTLOADER_ADDRESS) -nostartfiles -nodefaultlibs +#LDFLAGS += -Wl,--section-start=.text=$(BOOTLOADER_ADDRESS) -nostartfiles +LDFLAGS += -Wl,--section-start=.text=$(BOOTLOADER_ADDRESS) + +#---------------- Programming Options (avrdude) ---------------- + +# Programming hardware: alf avr910 avrisp bascom bsd +# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500 +# +# Type: avrdude -c ? +# to get a full listing. +# +AVRDUDE_PROGRAMMER = stk500v2 + +# com1 = serial port. Use lpt1 to connect to parallel port. +AVRDUDE_PORT = com1 # programmer connected to serial device + +AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex +#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep + + +# Uncomment the following if you want avrdude's erase cycle counter. +# Note that this counter needs to be initialized first using -Yn, +# see avrdude manual. +#AVRDUDE_ERASE_COUNTER = -y + +# Uncomment the following if you do /not/ wish a verification to be +# performed after programming the device. +#AVRDUDE_NO_VERIFY = -V + +# Increase verbosity level. Please use this when submitting bug +# reports about avrdude. See +# to submit bug reports. +#AVRDUDE_VERBOSE = -v -v + +AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) +AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY) +AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE) +AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER) + + + +#---------------- Debugging Options ---------------- + +# For simulavr only - target MCU frequency. +DEBUG_MFREQ = $(F_CPU) + +# Set the DEBUG_UI to either gdb or insight. +# DEBUG_UI = gdb +DEBUG_UI = insight + +# Set the debugging back-end to either avarice, simulavr. +DEBUG_BACKEND = avarice +#DEBUG_BACKEND = simulavr + +# GDB Init Filename. +GDBINIT_FILE = __avr_gdbinit + +# When using avarice settings for the JTAG +JTAG_DEV = /dev/com1 + +# Debugging port used to communicate between GDB / avarice / simulavr. +DEBUG_PORT = 4242 + +# Debugging host used to communicate between GDB / avarice / simulavr, normally +# just set to localhost unless doing some sort of crazy debugging when +# avarice is running on a different computer. +DEBUG_HOST = localhost + + + +#============================================================================ + + +# Define programs and commands. +SHELL = sh +CC = avr-gcc +OBJCOPY = avr-objcopy +OBJDUMP = avr-objdump +SIZE = avr-size +NM = avr-nm +AVRDUDE = avrdude +REMOVE = rm -f +COPY = cp +WINSHELL = cmd + + +# Define Messages +# English +MSG_ERRORS_NONE = Errors: none +MSG_BEGIN = -------- begin -------- +MSG_END = -------- end -------- +MSG_SIZE_BEFORE = Size before: +MSG_SIZE_AFTER = Size after: +MSG_COFF = Converting to AVR COFF: +MSG_EXTENDED_COFF = Converting to AVR Extended COFF: +MSG_FLASH = Creating load file for Flash: +MSG_EEPROM = Creating load file for EEPROM: +MSG_EXTENDED_LISTING = Creating Extended Listing: +MSG_SYMBOL_TABLE = Creating Symbol Table: +MSG_LINKING = Linking: +MSG_COMPILING = Compiling: +MSG_ASSEMBLING = Assembling: +MSG_CLEANING = Cleaning project: + + + + +# Define all object files. +OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) + +# Define all listing files. +LST = $(SRC:.c=.lst) $(ASRC:.S=.lst) + + +# Compiler flags to generate dependency files. +GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d + + +# Combine all necessary flags and optional flags. +# Add target processor to flags. +ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS) +ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) + + + +############################################################ +# May 25, 2010 Adding 1280 support +mega1280: MCU = atmega1280 +mega1280: F_CPU = 16000000 +mega1280: BOOTLOADER_ADDRESS = 1E000 +mega1280: CFLAGS += -D_MEGA_BOARD_ +mega1280: begin gccversion sizebefore build sizeafter end + mv $(TARGET).hex stk500boot_v2_mega1280.hex + + +############################################################ +# Jul 6, 2010 Adding 2560 support +mega2560: MCU = atmega2560 +mega2560: F_CPU = 16000000 +mega2560: BOOTLOADER_ADDRESS = 3E000 +mega2560: CFLAGS += -D_MEGA_BOARD_ +mega2560: begin gccversion sizebefore build sizeafter end + mv $(TARGET).hex stk500boot_v2_mega2560.hex + + +############################################################ +#Initial config on Amber128 board +# avrdude: Device signature = 0x1e9702 +# avrdude: safemode: lfuse reads as 8F +# avrdude: safemode: hfuse reads as CB +# avrdude: safemode: efuse reads as FF +# Jul 17, 2010 Adding 128 support +############################################################ +amber128: MCU = atmega128 +#amber128: F_CPU = 16000000 +amber128: F_CPU = 14745600 +amber128: BOOTLOADER_ADDRESS = 1E000 +amber128: CFLAGS += -D_BOARD_AMBER128_ +amber128: begin gccversion sizebefore build sizeafter end + mv $(TARGET).hex stk500boot_v2_amber128.hex + +############################################################ +# Aug 23, 2010 Adding atmega2561 support +m2561: MCU = atmega2561 +m2561: F_CPU = 8000000 +m2561: BOOTLOADER_ADDRESS = 3E000 +m2561: CFLAGS += -D_ANDROID_2561_ -DBAUDRATE=57600 +m2561: begin gccversion sizebefore build sizeafter end + mv $(TARGET).hex stk500boot_v2_android2561.hex + + +############################################################ +# avrdude: Device signature = 0x1e9801 +# avrdude: safemode: lfuse reads as EC +# avrdude: safemode: hfuse reads as 18 +# avrdude: safemode: efuse reads as FD +# Aug 23, 2010 Adding cerebot 2560 @ 8mhz +#avrdude -P usb -c usbtiny -p m2560 -v -U flash:w:/Arduino/WiringBootV2_upd1/stk500boot_v2_cerebotplus.hex +############################################################ +cerebot: MCU = atmega2560 +cerebot: F_CPU = 8000000 +cerebot: BOOTLOADER_ADDRESS = 3E000 +cerebot: CFLAGS += -D_CEREBOTPLUS_BOARD_ -DBAUDRATE=38400 -DUART_BAUDRATE_DOUBLE_SPEED=1 +cerebot: begin gccversion sizebefore build sizeafter end + mv $(TARGET).hex stk500boot_v2_cerebotplus.hex + + +############################################################ +# Aug 23, 2010 Adding atmega2561 support +penguino: MCU = atmega32 +penguino: F_CPU = 16000000 +penguino: BOOTLOADER_ADDRESS = 7800 +penguino: CFLAGS += -D_PENGUINO_ -DBAUDRATE=57600 +penguino: begin gccversion sizebefore build sizeafter end + mv $(TARGET).hex stk500boot_v2_penguino.hex + + +# Default target. +all: begin gccversion sizebefore build sizeafter end + +build: elf hex eep lss sym +#build: hex eep lss sym + +elf: $(TARGET).elf +hex: $(TARGET).hex +eep: $(TARGET).eep +lss: $(TARGET).lss +sym: $(TARGET).sym + + + +# Eye candy. +# AVR Studio 3.x does not check make's exit code but relies on +# the following magic strings to be generated by the compile job. +begin: + @echo + @echo $(MSG_BEGIN) + +end: + @echo $(MSG_END) + @echo + + +# Display size of file. +HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex +ELFSIZE = $(SIZE) --format=avr --mcu=$(MCU) $(TARGET).elf + +sizebefore: + @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \ + 2>/dev/null; echo; fi + +sizeafter: + @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \ + 2>/dev/null; echo; fi + + + +# Display compiler version information. +gccversion : + @$(CC) --version + + + +# Program the device. +program: $(TARGET).hex $(TARGET).eep + $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) + + +# Generate avr-gdb config/init file which does the following: +# define the reset signal, load the target file, connect to target, and set +# a breakpoint at main(). +gdb-config: + @$(REMOVE) $(GDBINIT_FILE) + @echo define reset >> $(GDBINIT_FILE) + @echo SIGNAL SIGHUP >> $(GDBINIT_FILE) + @echo end >> $(GDBINIT_FILE) + @echo file $(TARGET).elf >> $(GDBINIT_FILE) + @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE) +ifeq ($(DEBUG_BACKEND),simulavr) + @echo load >> $(GDBINIT_FILE) +endif + @echo break main >> $(GDBINIT_FILE) + +debug: gdb-config $(TARGET).elf +ifeq ($(DEBUG_BACKEND), avarice) + @echo Starting AVaRICE - Press enter when "waiting to connect" message displays. + @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \ + $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT) + @$(WINSHELL) /c pause + +else + @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \ + $(DEBUG_MFREQ) --port $(DEBUG_PORT) +endif + @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE) + + + + +# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. +COFFCONVERT=$(OBJCOPY) --debugging \ +--change-section-address .data-0x800000 \ +--change-section-address .bss-0x800000 \ +--change-section-address .noinit-0x800000 \ +--change-section-address .eeprom-0x810000 + + + +coff: $(TARGET).elf + @echo + @echo $(MSG_COFF) $(TARGET).cof + $(COFFCONVERT) -O coff-avr $< $(TARGET).cof + + +extcoff: $(TARGET).elf + @echo + @echo $(MSG_EXTENDED_COFF) $(TARGET).cof + $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof + + +# Create final output files (.hex, .eep) from ELF output file. +%.hex: %.elf + @echo + @echo $(MSG_FLASH) $@ + $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ + +%.eep: %.elf + @echo + @echo $(MSG_EEPROM) $@ + -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ + --change-section-lma .eeprom=0 -O $(FORMAT) $< $@ + +# Create extended listing file from ELF output file. +%.lss: %.elf + @echo + @echo $(MSG_EXTENDED_LISTING) $@ + $(OBJDUMP) -h -S $< > $@ + +# Create a symbol table from ELF output file. +%.sym: %.elf + @echo + @echo $(MSG_SYMBOL_TABLE) $@ + $(NM) -n $< > $@ + + + +# Link: create ELF output file from object files. +.SECONDARY : $(TARGET).elf +.PRECIOUS : $(OBJ) +%.elf: $(OBJ) + @echo + @echo $(MSG_LINKING) $@ + $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS) + + +# Compile: create object files from C source files. +%.o : %.c + @echo + @echo $(MSG_COMPILING) $< + $(CC) -c $(ALL_CFLAGS) $< -o $@ + + +# Compile: create assembler files from C source files. +%.s : %.c + $(CC) -S $(ALL_CFLAGS) $< -o $@ + + +# Assemble: create object files from assembler source files. +%.o : %.S + @echo + @echo $(MSG_ASSEMBLING) $< + $(CC) -c $(ALL_ASFLAGS) $< -o $@ + +# Create preprocessed source for use in sending a bug report. +%.i : %.c + $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ + + +# Target: clean project. +clean: begin clean_list end + +clean_list : + @echo + @echo $(MSG_CLEANING) + $(REMOVE) *.hex + $(REMOVE) *.eep + $(REMOVE) *.cof + $(REMOVE) *.elf + $(REMOVE) *.map + $(REMOVE) *.sym + $(REMOVE) *.lss + $(REMOVE) $(OBJ) + $(REMOVE) $(LST) + $(REMOVE) $(SRC:.c=.s) + $(REMOVE) $(SRC:.c=.d) + $(REMOVE) .dep/* + + + +# Include the dependency files. +-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*) + + +# Listing of phony targets. +.PHONY : all begin finish end sizebefore sizeafter gccversion \ +build elf hex eep lss sym coff extcoff \ +clean clean_list program debug gdb-config + diff --git a/external/arduino/avr/bootloaders/stk500v2/Mega2560-prod-firmware-2011-06-29.hex b/external/arduino/avr/bootloaders/stk500v2/Mega2560-prod-firmware-2011-06-29.hex new file mode 100644 index 000000000..a2213eee6 --- /dev/null +++ b/external/arduino/avr/bootloaders/stk500v2/Mega2560-prod-firmware-2011-06-29.hex @@ -0,0 +1,513 @@ +:020000023000CC +:10E000000D94F6F20D941FF30D941FF30D941FF36E +:10E010000D941FF30D941FF30D941FF30D941FF334 +:10E020000D941FF30D941FF30D941FF30D941FF324 +:10E030000D941FF30D941FF30D941FF30D941FF314 +:10E040000D941FF30D941FF30D941FF30D941FF304 +:10E050000D941FF30D941FF30D941FF30D941FF3F4 +:10E060000D941FF30D941FF30D941FF30D941FF3E4 +:10E070000D941FF30D941FF30D941FF30D941FF3D4 +:10E080000D941FF30D941FF30D941FF30D941FF3C4 +:10E090000D941FF30D941FF30D941FF30D941FF3B4 +:10E0A0000D941FF30D941FF30D941FF30D941FF3A4 +:10E0B0000D941FF30D941FF30D941FF30D941FF394 +:10E0C0000D941FF30D941FF30D941FF30D941FF384 +:10E0D0000D941FF30D941FF30D941FF30D941FF374 +:10E0E0000D941FF341546D65676132353630004140 +:10E0F000726475696E6F206578706C6F72657220DE +:10E1000073746B3530305632206279204D4C530099 +:10E11000426F6F746C6F616465723E004875683F52 +:10E1200000436F6D70696C6564206F6E20203D2028 +:10E1300000435055205479706520202020203D2038 +:10E14000005F5F4156525F415243485F5F203D2070 +:10E1500000415652204C69624320566572203D2092 +:10E16000004743432056657273696F6E20203D203F +:10E1700000435055207369676E61747572653D2068 +:10E18000004C6F77206675736520202020203D208D +:10E1900000486967682066757365202020203D204F +:10E1A00000457874206675736520202020203D206E +:10E1B000004C6F636B2066757365202020203D2026 +:10E1C00000536570202039203230313000312E3636 +:10E1D0002E3700342E332E33005623202020414486 +:10E1E00044522020206F7020636F6465202020201F +:10E1F00020696E737472756374696F6E20616464F4 +:10E2000072202020496E74657272757074006E6F92 +:10E2100020766563746F7200726A6D702020006AE8 +:10E220006D7020005768617420706F72743A0050EE +:10E230006F7274206E6F7420737570706F72746576 +:10E2400064004D7573742062652061206C65747480 +:10E2500065720020005772697474696E67204545C5 +:10E260000052656164696E6720454500656570729E +:10E270006F6D206572726F7220636F756E743D00F2 +:10E28000504F525400303D5A65726F206164647281 +:10E290006573732063747273003F3D435055207360 +:10E2A0007461747300403D454550524F4D20746574 +:10E2B000737400423D426C696E6B204C45440045CE +:10E2C0003D44756D7020454550524F4D00463D44CC +:10E2D000756D7020464C41534800483D48656C7050 +:10E2E000004C3D4C69737420492F4F20506F72745D +:10E2F0007300513D517569742026206A756D702038 +:10E30000746F20757365722070676D00523D44759F +:10E310006D702052414D00563D73686F7720696ED5 +:10E320007465727275707420566563746F727300D1 +:10E33000593D506F727420626C696E6B002A0052F6 +:10E340004553455400494E543000494E543100491C +:10E350004E543200494E543300494E543400494E15 +:10E36000543500494E543600494E54370050434905 +:10E370004E5430005043494E5431005043494E549E +:10E3800032005744540054494D45523020434F4DBC +:10E3900050410054494D45523020434F4D504200AA +:10E3A00054494D455230204F56460054494D455230 +:10E3B0003120434150540054494D45523120434F80 +:10E3C0004D50410054494D45523120434F4D50422C +:10E3D0000054494D45523120434F4D50430054495C +:10E3E0004D455231204F56460054494D455232203A +:10E3F000434F4D50410054494D45523220434F4DFB +:10E4000050420054494D455232204F56460054491F +:10E410004D45523320434150540054494D455233E9 +:10E4200020434F4D50410054494D45523320434FF6 +:10E430004D50420054494D45523320434F4D5043B7 +:10E440000054494D455233204F56460054494D45DE +:10E45000523420434150540054494D4552342043D6 +:10E460004F4D50410054494D45523420434F4D507B +:10E47000420054494D45523420434F4D50430054BF +:10E48000494D455234204F56460054494D4552356A +:10E4900020434150540054494D45523520434F4D7F +:10E4A00050410054494D45523520434F4D50420094 +:10E4B00054494D45523520434F4D50430054494D2A +:10E4C000455235204F564600555341525430205244 +:10E4D000580055534152543020554452450055532D +:10E4E0004152543020545800555341525431205217 +:10E4F000580055534152543120554452450055530C +:10E5000041525431205458005553415254322052F4 +:10E5100058005553415254322055445245005553EA +:10E5200041525432205458005553415254332052D2 +:10E5300058005553415254332055445245005553C9 +:10E5400041525433205458005350492053544300EF +:10E5500041444300414E414C4F4720434F4D5000F2 +:10E560004545205245414459005457490053504DA8 +:10E57000205245414459002A003FE345E34AE34F16 +:10E58000E354E359E35EE363E368E36DE374E37B41 +:10E59000E382E3E9E3F6E303E4ABE3B7E3C4E3D107 +:10E5A000E3DEE386E393E3A0E348E5C8E4D2E4DEF8 +:10E5B000E454E550E560E50EE41AE427E434E44170 +:10E5C000E4E8E4F2E4FEE469E56DE54CE458E46572 +:10E5D000E472E47FE48AE496E4A3E4B0E4BDE408F2 +:10E5E000E512E51EE528E532E53EE50011241FBEF3 +:10E5F000CFEFD1E2DEBFCDBF01E00CBF12E0A0E063 +:10E60000B2E0EAEDFFEF03E00BBF02C007900D920E +:10E61000A030B107D9F712E0A0E0B2E001C01D922E +:10E62000AC30B107E1F70F94FBF40D94EBFF01E27E +:10E630000EBF0FEF0DBF11241FBE0D94FBF40D9400 +:10E6400000F020E030E040ED57E005C0FA013197DE +:10E65000F1F72F5F3F4F28173907C0F308959C014A +:10E66000442737FD4095542FDA01C901860F911DCB +:10E67000A11DB11DABBFFC018791882369F0809378 +:10E68000C6008091C00086FFFCCF8091C0008064EE +:10E690008093C0006F5FE8CF08958DE08093C6003F +:10E6A0008091C00086FFFCCF8091C0008064809381 +:10E6B000C0008AE08093C6008091C00086FFFCCF36 +:10E6C0008091C00080648093C00008950F942FF360 +:10E6D0000F944DF30895FC019081992359F0909384 +:10E6E000C6008091C00086FFFCCF8091C00080648E +:10E6F0008093C0003196992379F70895282F982F99 +:10E7000092959F70892F805D8A3308F0895F80938E +:10E71000C6008091C00086FFFCCF8091C00080645D +:10E720008093C000822F8F70982F905D9A3308F0ED +:10E73000995F9093C6008091C00086FFFCCF8091C6 +:10E74000C00080648093C00008959C01FB01853661 +:10E7500091051CF46330710594F0C90164E670E022 +:10E760000F948CFF605D7F4F6093C6008091C00066 +:10E7700086FFFCCF8091C00080648093C0002B3066 +:10E78000310514F43297B4F0C90164E670E00F94D7 +:10E790008CFF6AE070E00F948CFF605D7F4F6093A8 +:10E7A000C6008091C00086FFFCCF8091C0008064CD +:10E7B0008093C000C9016AE070E00F948CFFC0969E +:10E7C0008093C6008091C00086FFFCCF8091C0007E +:10E7D00080648093C0000895282F277020642093C0 +:10E7E0007C0020917B0086958695869590E08170CF +:10E7F000907033E0880F991F3A95E1F7277F282B17 +:10E8000020937B0080917A00806480937A008091CD +:10E810007A0086FDFCCF2091780040917900942FFA +:10E8200080E030E0282B392BC90108951F93182F61 +:10E8300080E892EE60E00F942FF31093C600809171 +:10E84000C00086FFFCCF8091C00080648093C00030 +:10E850000F944DF31F9108952F923F924F925F9224 +:10E860006F927F928F929F92AF92BF92CF92DF92E0 +:10E87000EF92FF920F931F93DF93CF93CDB7DEB745 +:10E8800062970FB6F894DEBF0FBECDBF382E622E52 +:10E89000CA01DB015C016D01772460E2262E2E01A6 +:10E8A0000894411C511C8BC081E0A81680E0B8067A +:10E8B00081E0C80680E0D80628F0C601AA27BB2759 +:10E8C0000F947EF3BB27AD2D9C2D8B2D0F947EF3E3 +:10E8D0008A2D0F947EF32092C6008091C00086FF9F +:10E8E000FCCF8091C00080648093C0009DE2909333 +:10E8F000C6008091C00086FFFCCF8091C00080647C +:10E900008093C0002092C6008091C00086FFFCCF9B +:10E910008091C00080648093C000198286017501D7 +:10E9200088249924A1E03A1651F03A1620F0B2E07A +:10E930003B1661F409C00BBFF701779007C0C70110 +:10E940000F94D5FF782E02C0F7017080872D0F94A9 +:10E950007EF32092C6008091C00086FFFCCF80919C +:10E96000C00080648093C000872D8052F401EF7056 +:10E97000F0708F3520F4E40DF51D708204C0E40DB5 +:10E98000F51D8EE280830894E11CF11C011D111D10 +:10E990000894811C911C90E18916910409F0C2CF62 +:10E9A00080E190E0A0E0B0E0A80EB91ECA1EDB1E18 +:10E9B000198AC2010F946BF30F944DF36A94662089 +:10E9C00009F072CF62960FB6F894DEBF0FBECDBFCE +:10E9D000CF91DF911F910F91FF90EF90DF90CF903B +:10E9E000BF90AF909F908F907F906F905F904F906F +:10E9F0003F902F9008952F923F924F925F926F9287 +:10EA00007F928F929F92AF92BF92CF92DF92EF92BE +:10EA1000FF920F931F93DF93CF93CDB7DEB7CD5304 +:10EA2000D1400FB6F894DEBF0FBECDBF279A2F9A04 +:10EA30008091C00082608093C00080E18093C40018 +:10EA400088E18093C1000000EE24FF248701B4E038 +:10EA5000AB2EB12CCC24DD2424C0C5010197F1F7E5 +:10EA60000894E11CF11C011D111D21E2E2162EE4A7 +:10EA7000F20620E0020720E0120718F0A1E0CA2EFB +:10EA8000D12CC801B70128E53BE140E050E00F94EC +:10EA90009FFF611571058105910519F485B18058B5 +:10EAA00085B98091C00087FD03C0C114D104A9F2CB +:10EAB000A6014F5F5F4FC25EDE4F59834883CE5140 +:10EAC000D140C25EDE4F68817981CE51D140613044 +:10EAD000710511F00D946EFFC05DDE4F1982188232 +:10EAE000C053D14060E0C15DDE4F1882CF52D140AB +:10EAF000AA24BB24C05EDE4F188219821A821B82B0 +:10EB0000C052D140CE5CDE4F188219821A821B821D +:10EB1000C253D14080E090E0A0E0B0E0ABBFFC0188 +:10EB2000A791B691C45CDE4FB983A883CC53D14082 +:10EB30000D9469FFC25EDE4FE881F981CE51D1406C +:10EB4000319709F52091C600C25EDE4F1982188206 +:10EB5000CE51D14022C02F5F3F4F4F4F5F4F2130EA +:10EB6000F2E13F07FAE74F07F0E05F0780F0C45C8F +:10EB7000DE4F08811981CC53D1400F5F1F4F19F030 +:10EB8000EE27FF27099420E030E040E050E080913C +:10EB9000C00087FFE0CF2091C600213209F094C663 +:10EBA0000894A11CB11C33E0A316B10409F08EC671 +:10EBB00000E010E018C041E24093C6008091C00020 +:10EBC00086FFFCCF8091C00080648093C0002F5FDF +:10EBD0003F4F2931310579F70F944DF30F5F1F4FE8 +:10EBE0000530110519F020E030E0E5CF1092080261 +:10EBF0001092090210920A0210920B021092040263 +:10EC00001092050210920602109207021092000262 +:10EC10001092010210920202109203028FEE90EE07 +:10EC200060E00F9466F380E191EE60E00F942FF3C3 +:10EC30008091C00087FFFCCF9091C600903608F00D +:10EC40009F759032B8F09093C6008091C00086FF07 +:10EC5000FCCF8091C00080648093C00080E28093EC +:10EC6000C6008091C00086FFFCCF8091C000806408 +:10EC70008093C000983409F4DBC19934B8F492341D +:10EC800009F45DC1933458F4903319F1903308F4CA +:10EC900018C69F33A1F1903409F013C6BDC0953456 +:10ECA00009F474C1963409F00CC69CC1923509F47C +:10ECB0002FC2933538F49C3409F4F9C1913509F029 +:10ECC00000C61CC2963509F449C2993509F0F9C548 +:10ECD0009CC485E892EE62E00F9466F31092040201 +:10ECE000109205021092060210920702109208027A +:10ECF0001092090210920A0210920B0217C189E9C0 +:10ED000092EE62E00F9466F38FEE90EE60E00F9467 +:10ED100066F381E291EE60E00F942FF381EC91EEC7 +:10ED200060E00F9466F381E391EE60E00F942FF3BF +:10ED300084EE90EE60E00F9466F381E491EE60E083 +:10ED40000F942FF386E090E061E070E00F94A5F35C +:10ED50000F944DF381E691EE60E00F942FF383ED75 +:10ED600091EE60E00F9466F381E591EE60E00F9420 +:10ED70002FF38DEC91EE60E00F9466F381E791EE56 +:10ED800060E00F942FF38EE10F947EF388E90F94E7 +:10ED90007EF381E00F947EF30F944DF381E891EEC2 +:10EDA00060E00F942FF319E0E0E0F0E010935700DB +:10EDB000E4918E2F0F947EF30F944DF381E991EE41 +:10EDC00060E00F942FF3E3E0F0E010935700E4913C +:10EDD0008E2F0F947EF30F944DF381EA91EE60E055 +:10EDE0000F942FF3E2E0F0E010935700E4918E2FA0 +:10EDF0000F947EF30F944DF381EB91EE60E00F944E +:10EE00002FF3E1E0F0E0109357001491812F0F945D +:10EE10007EF30F944DF307CF85EA92EE62E00F94F4 +:10EE200066F385E592EE60E00F9466F30F944DF380 +:10EE300000E010E019C0C8016F2D0F94DDFFFF2026 +:10EE400031F483E592EE60E00F942FF30BC0F09263 +:10EE5000C6008091C00086FFFCCF8091C000806416 +:10EE60008093C0000F5F1F4FC80181519F41AA27A7 +:10EE700097FDA095BA2FABBFFC01F7905AE2F516AB +:10EE800021F062E000301607B1F60F944DF30F94B5 +:10EE90004DF381E692EE60E00F9466F30F944DF32C +:10EEA000CC24DD2400E010E01EC0C8010F94D5FF83 +:10EEB000F82E882331F483E592EE60E00F942FF36F +:10EEC0000BC08093C6008091C00086FFFCCF80916C +:10EED000C00080648093C000FE1419F00894C11C27 +:10EEE000D11C0F5F1F4FC80181519F41AA2797FD79 +:10EEF000A095BA2FABBFFC01E7907AE2E71621F0AC +:10EF000082E00030180789F60F944DF30F944DF30B +:10EF10008CE692EE60E00F942FF3C60161E070E0A2 +:10EF20000F94A5F30F944DF30F944DF3109200023C +:10EF300010920102109202021092030274CE83EB2F +:10EF400092EE62E00F9466F3279A2F9A16C02F98DC +:10EF500080E090E0E0EDF7E03197F1F7019684363C +:10EF60009105C1F72F9A80E090E0E0EDF7E031974E +:10EF7000F1F7019684369105C1F78091C00087FFB3 +:10EF8000E6CF8091C00087FFFCCF95C48FEB92EE57 +:10EF900062E00F9466F3409100025091010260918B +:10EFA00002027091030281E020E10F942CF4809121 +:10EFB000000290910102A0910202B09103028050E0 +:10EFC0009F4FAF4FBF4F8093000290930102A093D9 +:10EFD0000202B093030280509041A040B04008F478 +:10EFE00022CEA4CF8DEC92EE62E00F9466F34091B6 +:10EFF000040250910502609106027091070280E0C0 +:10F0000020E10F942CF48091040290910502A091CC +:10F010000602B091070280509F4FAF4FBF4F8093C1 +:10F02000040290930502A0930602B0930702FBCD61 +:10F030008AED92EE62E00F9466F385E892EE60E06E +:10F040000F9466F389E992EE60E00F9466F385EA27 +:10F0500092EE60E00F9466F383EB92EE60E00F9423 +:10F0600066F38FEB92EE60E00F9466F38DEC92EE18 +:10F0700060E00F9466F38AED92EE60E00F9466F321 +:10F0800081EE92EE60E00F9466F382EF92EE60E024 +:10F090000F9466F38CE093EE60E00F9466F387E1E3 +:10F0A00093EE60E00F9466F380E393EEB9CD81EECA +:10F0B00092EE62E00F9466F381E40F9416F482E41A +:10F0C0000F9416F483E40F9416F484E40F9416F46A +:10F0D00085E40F9416F486E40F9416F487E40F94F5 +:10F0E00016F488E40F9416F48AE40F9416F48BE473 +:10F0F0000F9416F48CE40F9416F495CD82EF92EEF3 +:10F1000062E00F9466F399249394AA24BB2445C427 +:10F110008CE093EE62E00F9466F340910802509108 +:10F12000090260910A0270910B0282E020E10F94C3 +:10F130002CF48091080290910902A0910A02B091EA +:10F140000B0280509F4FAF4FBF4F809308029093A8 +:10F150000902A0930A02B0930B0265CD87E193EEFA +:10F1600062E00F9466F384EE90EE60E00F9466F335 +:10F1700089ED91EE60E00F9466F309E715EECC5D42 +:10F18000DE4F19830883C452D1406624772443019B +:10F19000CA5DDE4F19821882C652D140A401930184 +:10F1A0005695479537952795C85DDE4F2883398357 +:10F1B0004A835B83C852D140CA5DDE4F4881598182 +:10F1C000C652D1404F5F5F4FCA5DDE4F59834883BF +:10F1D000C652D140CA0162E070E00F94A5F350E23C +:10F1E0005093C6008091C00086FFFCCF8091C00084 +:10F1F00080648093C0006DE26093C6008091C0007F +:10F2000086FFFCCF8091C00080648093C00070E2D4 +:10F210007093C6008091C00086FFFCCF8091C00033 +:10F2200080648093C000C85DDE4FE880F9800A8169 +:10F230001B81C852D140BB27A12F902F8F2D0F9437 +:10F240007EF3C85DDE4F8881C852D1400F947EF3B3 +:10F2500070E2F72EF092C6008091C00086FFFCCFCE +:10F260008091C00080648093C0000DE30093C600CD +:10F270008091C00086FFFCCF8091C00080648093A5 +:10F28000C00010E21093C6008091C00086FFFCCF42 +:10F290008091C00080648093C0008BBEF3012791F1 +:10F2A000C45DDE4F2883CC52D140A22EBB24CC2497 +:10F2B000DD240894611C711C811C911C8BBEF30120 +:10F2C0008791282E332444245524142D032DF22C09 +:10F2D000EE24EA0CFB1C0C1D1D1D0894611C711C06 +:10F2E000811C911C8BBEF3013791C35DDE4F3883C7 +:10F2F000CD52D1400894611C711C811C911C8BBEA5 +:10F30000F3014791C25DDE4F4883CE52D1402DEFCD +:10F310003FEF4FEF5FEF620E731E841E951E0F943A +:10F320007EF330E23093C6008091C00086FFFCCFB0 +:10F330008091C00080648093C000C45DDE4F8881EE +:10F34000CC52D1400F947EF340E24093C6008091AE +:10F35000C00086FFFCCF8091C00080648093C00015 +:10F36000C25DDE4F8881CE52D1400F947EF350E2D1 +:10F370005093C6008091C00086FFFCCF8091C000F2 +:10F3800080648093C000C35DDE4F8881CD52D14040 +:10F390000F947EF360E26093C6008091C00086FF08 +:10F3A000FCCF8091C00080648093C0007FEFE7169F +:10F3B0007FEFF70670E0070770E0170731F48EE083 +:10F3C00092EE60E00F942FF3DFC0D801C701807088 +:10F3D000907CA070B0708050904CA040B040D1F5AF +:10F3E0002FEF3FE340E050E0E222F3220423152315 +:10F3F000C85DDE4FA880B980CA80DB80C852D1408A +:10F40000AE0CBF1CC01ED11EAA0CBB1CCC1CDD1C2C +:10F4100088E192EE60E00F942FF3BB27A12F902F8D +:10F420008F2D0F947EF38E2D0F947EF330E2309368 +:10F43000C6008091C00086FFFCCF8091C000806430 +:10F440008093C0004EE34093C6008091C00086FFC9 +:10F45000FCCF87C06EE07EEF80E090E0E622F722EE +:10F46000082319237CE0E71674E9F70670E0070724 +:10F4700070E0170709F088C0C25DDE4F8881CE5268 +:10F48000D140E82EFF2400E010E0102F0F2DFE2CBD +:10F49000EE24C35DDE4F9881CD52D140E90EF11CC0 +:10F4A000011D111DD601C50181709070A070B07052 +:10F4B000DC0199278827E80EF91E0A1F1B1F20EF81 +:10F4C00030E040E050E0A222B322C422D522F1E194 +:10F4D000AA0CBB1CCC1CDD1CFA95D1F7EA0CFB1C5A +:10F4E0000C1D1D1D41E050E060E070E0242235223B +:10F4F00046225722E5E1220C331C441C551CEA9598 +:10F50000D1F7E20CF31C041D151D57016801AA0C6C +:10F51000BB1CCC1CDD1C8FE192EE60E00F942FF33E +:10F52000C801AA27BB270F947EF3BB27A12F902FDA +:10F530008F2D0F947EF38E2D0F947EF350E2509317 +:10F54000C6008091C00086FFFCCF8091C00080641F +:10F550008093C0006EE36093C6008091C00086FF78 +:10F56000FCCF8091C00080648093C000C601AA27B0 +:10F57000BB270F947EF3BB27AD2D9C2D8B2D0F94B5 +:10F580007EF38A2D0F947EF370E27093C600809113 +:10F59000C00086FFFCCF8091C00080648093C000D3 +:10F5A000CC5DDE4FE881F981C452D140CF01AA275A +:10F5B00097FDA095BA2FABBFFC018791969160E0B3 +:10F5C0000F942FF30F944DF3CC5DDE4F088119811A +:10F5D000C452D1400E5F1F4FCC5DDE4F19830883AC +:10F5E000C452D140CA5DDE4F28813981C652D14014 +:10F5F0002933310509F417CB44E050E060E070E0B6 +:10F60000640E751E861E971EC9CD80E393EE62E0E0 +:10F610000F9466F384E292EE60E00F942FF38091F2 +:10F62000C00087FFFCCF1091C6001F751093C60065 +:10F630008091C00086FFFCCF8091C00080648093E1 +:10F64000C0000F944DF3812F81548A3108F036C1E8 +:10F65000163409F495C0173490F4133409F44EC0ED +:10F66000143430F41134F1F0123409F01DC130C0FB +:10F67000143409F459C0153409F016C16BC01A349A +:10F6800009F4C4C01B3438F4173409F48FC018349B +:10F6900009F00AC1A1C01B3409F4D2C01C3409F01E +:10F6A00003C1E8C08FEF81B90DC082B1809582B9E6 +:10F6B00080E090E0E0EDF7E03197F1F70196883CCB +:10F6C0009105C1F78091C00087FFEFCF12B8EFC05E +:10F6D0008FEF84B90DC085B1809585B980E090E049 +:10F6E000E0EDF7E03197F1F70196883C9105C1F71D +:10F6F0008091C00087FFEFCF15B8D9C08FEF87B9D1 +:10F700000DC088B1809588B980E090E0E0EDF7E029 +:10F710003197F1F70196883C9105C1F78091C000BF +:10F7200087FFEFCF18B8C3C08FEF8AB90DC08BB178 +:10F7300080958BB980E090E0E0EDF7E03197F1F74C +:10F740000196883C9105C1F78091C00087FFEFCFFB +:10F750001BB8ADC08FEF8DB90DC08EB180958EB93D +:10F7600080E090E0E0EDF7E03197F1F70196883C1A +:10F770009105C1F78091C00087FFEFCF1EB897C0F9 +:10F780008FEF80BB0DC081B3809581BB80E090E09E +:10F79000E0EDF7E03197F1F70196883C9105C1F76C +:10F7A0008091C00087FFEFCF11BA81C08FEF83BB7C +:10F7B0000DC084B3809584BB80E090E0E0EDF7E07D +:10F7C0003197F1F70196883C9105C1F78091C0000F +:10F7D00087FFEFCF14BA6BC08FEF809301010FC08A +:10F7E0008091020180958093020180E090E0E0ED3D +:10F7F000F7E03197F1F70196883C9105C1F78091C8 +:10F80000C00087FFEDCF1092020151C08FEF8093AF +:10F8100004010FC08091050180958093050180E06F +:10F8200090E0E0EDF7E03197F1F70196883C910523 +:10F83000C1F78091C00087FFEDCF1092050137C05E +:10F840008FEF809307010FC080910801809580930E +:10F85000080180E090E0E0EDF7E03197F1F70196E4 +:10F86000883C9105C1F78091C00087FFEDCF1092D1 +:10F8700008011DC08FEF80930A010FC080910B011A +:10F88000809580930B0180E090E0E0EDF7E0319708 +:10F89000F1F70196883C9105C1F78091C00087FF80 +:10F8A000EDCF10920B0103C08FE292EEB9C98091A7 +:10F8B000C00087FFFCCF8091C600B5C982E492EEFC +:10F8C000AFC98CE191EEACC9AA24BB24933061F19D +:10F8D000943028F4913089F0923008F508C09530C2 +:10F8E000B1F1953040F1963009F053C04EC02B3144 +:10F8F00009F020C991E06BE11DC9213041F0C15DE3 +:10F90000DE4F5881CF52D140251709F002C362273C +:10F91000C15DDE4F2883CF52D14092E00BC9B22F98 +:10F92000A0E0622793E006C9822F90E0A82BB92BB4 +:10F93000622794E0FFC82E3009F0EBC2622795E001 +:10F94000C05DDE4F19821882C053D140F3C8E1E098 +:10F95000F0E0EC0FFD1FC05DDE4FE880F980C05382 +:10F96000D140EE0DFF1D208387010F5F1F4FC05D4B +:10F97000DE4F19830883C053D14062270A171B0743 +:10F9800009F0D8C8D80196E0D5C8261709F0C1C239 +:10F9900003C0973009F0CEC899248981833109F4D6 +:10F9A000FCC08431C8F4863009F4C2C0873050F4FA +:10F9B000823009F4F0C0833009F458C0813009F076 +:10F9C0000AC23EC0813109F462C0823108F0A6C08B +:10F9D000803109F000C2DFC0883109F472C089317A +:10F9E00050F4853109F4D9C0853108F477C18631E6 +:10F9F00009F0F1C173C18A3109F457C08A3108F4A2 +:10FA00007CC08B3109F446C08D3109F0E4C18D8191 +:10FA1000803311F090E00AC08F81882311F49EE1B9 +:10FA200005C0813011F091E001C098E91A821B8273 +:10FA30008D818C831D829E831F8227E030E0CFC1A1 +:10FA40001A8288E08B8381E48C8386E58D8382E54E +:10FA50008E8389E48F8383E5888780E589878FE5B6 +:10FA60008A8782E38B872BE030E0B9C18A818139B4 +:10FA700041F0823941F0803911F48FE005C080E017 +:10FA800003C082E001C08AE01A828B8344C09924BB +:10FA9000939481C08D81882311F48EE12CC0813034 +:10FAA00011F081E028C088E926C01A82E1E0F0E088 +:10FAB00089E08093570084918B831C8224E030E09E +:10FAC0008EC18B81803589F48C81883039F4E2E0F5 +:10FAD000F0E089E08093570084910DC0E0E0F0E011 +:10FAE00089E080935700849106C0E3E0F0E089E06C +:10FAF0008093570084911A82DFCF8D81836C99E0C7 +:10FB0000E1E0F0E0082E90935700E89507B600FC7E +:10FB1000FDCF1A821B8223E030E061C11A82CE5CE5 +:10FB2000DE4F188219821A821B82C253D14055C1FE +:10FB30008A8190E0A0E0B0E0582F442733272227A5 +:10FB40008B8190E0A0E0B0E0DC0199278827282B8A +:10FB5000392B4A2B5B2B8D8190E0A0E0B0E0282B65 +:10FB6000392B4A2B5B2B8C8190E0A0E0B0E0BA2FC0 +:10FB7000A92F982F8827282B392B4A2B5B2B220F54 +:10FB8000331F441F551FC05EDE4F288339834A83CD +:10FB90005B83C052D1401A8220C19A812B8183316C +:10FBA00049F0C05EDE4F488159816A817B81C05235 +:10FBB000D1408AC0CE5CDE4F488159816A817B8109 +:10FBC000C253D140403080EC580783E0680780E0A2 +:10FBD0007807F0F483E0FA0160935B0080935700AC +:10FBE000E89507B600FCFDCFCE5CDE4F4881598119 +:10FBF0006A817B81C253D14040505F4F6F4F7F4F2E +:10FC0000CE5CDE4F488359836A837B83C253D140E5 +:10FC1000C95CDE4F9883C753D140CA5CDE4F18825F +:10FC2000C653D140022F10E0CA5CDE4F6881798153 +:10FC3000C653D140062B172BC05EDE4F4881598139 +:10FC40006A817B81C052D140DE011B9631E08C91EC +:10FC500011962C9111971296C75CDE4F2883C953D9 +:10FC6000D140C85CDE4F1882C853D14090E0C85CD8 +:10FC7000DE4FE881F981C853D1408E2B9F2B0C01B8 +:10FC8000FA0160935B0030935700E89511244E5FB2 +:10FC90005F4F6F4F7F4F02501040C9F685E0C05E46 +:10FCA000DE4FE880F9800A811B81C052D140F70104 +:10FCB00000935B0080935700E89507B600FCFDCFEA +:10FCC00081E180935700E8951A82C05EDE4F488339 +:10FCD00059836A837B83C052D1407FC0FA80C55C60 +:10FCE000DE4FF882CB53D140C65CDE4F1882CA5338 +:10FCF000D1408B81C82EDD24C65CDE4F088119817E +:10FD0000CA53D140C02AD12A1A828981BE016D5FAF +:10FD10007F4F843121F59601C05EDE4FE880F98087 +:10FD20000A811B81C052D1400BBFF7018791969188 +:10FD3000DB018C9311969C936E5F7F4FD801C701B6 +:10FD40000296A11DB11DC05EDE4F88839983AA83F0 +:10FD5000BB83C052D14022503040F1F636C0C05E65 +:10FD6000DE4F288139814A815B81C052D14008949D +:10FD7000C108D108760100E010E00894C11CD11C34 +:10FD80000894E11CF11C011D111DE20EF31E041F5D +:10FD9000151F21BDBB27A52F942F832F82BD2F5F59 +:10FDA0003F4F4F4F5F4FF89A80B5DB018D93BD01F8 +:10FDB0002E153F054007510761F7C05EDE4F2883CF +:10FDC00039834A835B83C052D14096012D5F3F4FF8 +:10FDD000FB01108204C080EC8A8322E030E08BE1DA +:10FDE0008093C6008091C00086FFFCCF8091C00048 +:10FDF00080648093C000C15DDE4FF881CF52D14056 +:10FE0000F093C6008091C00086FFFCCF8091C000B7 +:10FE100080648093C000432F3093C6008091C0005F +:10FE200086FFFCCF8091C00080648093C000922F39 +:10FE30002093C6008091C00086FFFCCF8091C00057 +:10FE400080648093C0008EE08093C6008091C000E3 +:10FE500086FFFCCF8091C00080648093C00065E184 +:10FE6000C15DDE4FE880CF52D1406E2569276427FF +:10FE7000FE01319610C090819093C6008091C00021 +:10FE800086FFFCCF31968091C00080648093C000D3 +:10FE90006927215030402115310569F76093C6006C +:10FEA0008091C00086FFFCCF8091C0008064809369 +:10FEB000C00085B1805885B9992081F4C15DDE4FBD +:10FEC0000881CF52D1400F5FC15DDE4F0883CF5212 +:10FED000D14090E0A0E0B0E00D949AF527982F98DB +:10FEE00080E090E020ED37E0F9013197F1F70196DD +:10FEF00084369105C9F700008091C0008D7F809302 +:10FF0000C00081E180935700E895EE27FF27099410 +:10FF1000FFCF90E00D949AF597FB092E07260AD0A3 +:10FF200077FD04D02ED006D000201AF4709561958C +:10FF30007F4F0895F6F7909581959F4F0895A1E220 +:10FF40001A2EAA1BBB1BFD010DC0AA1FBB1FEE1F53 +:10FF5000FF1FA217B307E407F50720F0A21BB30B9E +:10FF6000E40BF50B661F771F881F991F1A9469F71A +:10FF700060957095809590959B01AC01BD01CF0176 +:10FF80000895AA1BBB1B51E107C0AA1FBB1FA617E0 +:10FF9000B70710F0A61BB70B881F991F5A95A9F732 +:10FFA00080959095BC01CD010895F999FECF92BD41 +:10FFB00081BDF89A992780B50895262FF999FECF2B +:10FFC0001FBA92BD81BD20BD0FB6F894FA9AF99A76 +:0AFFD0000FBE01960895F894FFCFCC +:040000033000E000E9 +:00000001FF diff --git a/external/arduino/avr/bootloaders/stk500v2/STK500V2.pnproj b/external/arduino/avr/bootloaders/stk500v2/STK500V2.pnproj new file mode 100644 index 000000000..d935019e1 --- /dev/null +++ b/external/arduino/avr/bootloaders/stk500v2/STK500V2.pnproj @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/external/arduino/avr/bootloaders/stk500v2/STK500V2.pnps b/external/arduino/avr/bootloaders/stk500v2/STK500V2.pnps new file mode 100644 index 000000000..f85cde5e7 --- /dev/null +++ b/external/arduino/avr/bootloaders/stk500v2/STK500V2.pnps @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/external/arduino/avr/bootloaders/stk500v2/avr_cpunames.h b/external/arduino/avr/bootloaders/stk500v2/avr_cpunames.h new file mode 100644 index 000000000..ad0ed9c02 --- /dev/null +++ b/external/arduino/avr/bootloaders/stk500v2/avr_cpunames.h @@ -0,0 +1,189 @@ +//************************************************************************************************** +//* +//* Atmel AVR CPU name strings +//* +//************************************************************************************************** +//* Sep 19, 2010 Started on avr_cpunames.h +//************************************************************************************************** + +//#include "avr_cpunames.h" + +//************************************************************************************************** + + +#if defined (__AVR_AT94K__) + #define _AVR_CPU_NAME_ "AT94k" +#elif defined (__AVR_AT43USB320__) +#elif defined (__AVR_AT43USB355__) +#elif defined (__AVR_AT76C711__) +#elif defined (__AVR_AT86RF401__) +#elif defined (__AVR_AT90PWM1__) +#elif defined (__AVR_AT90PWM2__) +#elif defined (__AVR_AT90PWM2B__) +#elif defined (__AVR_AT90PWM3__) +#elif defined (__AVR_AT90PWM3B__) +#elif defined (__AVR_AT90PWM216__) +#elif defined (__AVR_AT90PWM316__) +#elif defined (__AVR_ATmega32C1__) +#elif defined (__AVR_ATmega32M1__) +#elif defined (__AVR_ATmega32U4__) + #define _AVR_CPU_NAME_ "ATmega32U4" +#elif defined (__AVR_ATmega32U6__) + #define _AVR_CPU_NAME_ "ATmega32U6" +#elif defined (__AVR_ATmega128__) + #define _AVR_CPU_NAME_ "Atmega128" +#elif defined (__AVR_ATmega1280__) + #define _AVR_CPU_NAME_ "ATmega1280" +#elif defined (__AVR_ATmega1281__) + #define _AVR_CPU_NAME_ "ATmega1281" +#elif defined (__AVR_ATmega1284P__) + #define _AVR_CPU_NAME_ "ATmega1284" +#elif defined (__AVR_ATmega128RFA1__) + #define _AVR_CPU_NAME_ "ATmega128RFA1" +#elif defined (__AVR_ATmega2560__) + #define _AVR_CPU_NAME_ "ATmega2560" +#elif defined (__AVR_ATmega2561__) + #define _AVR_CPU_NAME_ "ATmega2561" +#elif defined (__AVR_AT90CAN32__) + #define _AVR_CPU_NAME_ "AT90CAN32" +#elif defined (__AVR_AT90CAN64__) + #define _AVR_CPU_NAME_ "AT90CAN64" +#elif defined (__AVR_AT90CAN128__) + #define _AVR_CPU_NAME_ "AT90CAN128" +#elif defined (__AVR_AT90USB82__) + #define _AVR_CPU_NAME_ "AT90USB82" +#elif defined (__AVR_AT90USB162__) + #define _AVR_CPU_NAME_ "AT90USB162" +#elif defined (__AVR_AT90USB646__) + #define _AVR_CPU_NAME_ "AT90USB646" +#elif defined (__AVR_AT90USB647__) + #define _AVR_CPU_NAME_ "AT90USB647" +#elif defined (__AVR_AT90USB1286__) + #define _AVR_CPU_NAME_ "AT90USB1286" +#elif defined (__AVR_AT90USB1287__) + #define _AVR_CPU_NAME_ "AT90USB1287" +#elif defined (__AVR_ATmega64__) + #define _AVR_CPU_NAME_ "ATmega64" +#elif defined (__AVR_ATmega640__) + #define _AVR_CPU_NAME_ "ATmega640" +#elif defined (__AVR_ATmega644__) + #define _AVR_CPU_NAME_ "ATmega644" +#elif defined (__AVR_ATmega644P__) + #define _AVR_CPU_NAME_ "ATmega644P" +#elif defined (__AVR_ATmega645__) + #define _AVR_CPU_NAME_ "ATmega645" +#elif defined (__AVR_ATmega6450__) + #define _AVR_CPU_NAME_ "ATmega6450" +#elif defined (__AVR_ATmega649__) + #define _AVR_CPU_NAME_ "ATmega649" +#elif defined (__AVR_ATmega6490__) + #define _AVR_CPU_NAME_ "ATmega6490" +#elif defined (__AVR_ATmega103__) + #define _AVR_CPU_NAME_ "ATmega103" +#elif defined (__AVR_ATmega32__) + #define _AVR_CPU_NAME_ "Atmega32" +#elif defined (__AVR_ATmega323__) + #define _AVR_CPU_NAME_ "ATmega323" +#elif defined (__AVR_ATmega324P__) + #define _AVR_CPU_NAME_ "ATmega324P" +#elif defined (__AVR_ATmega325__) + #define _AVR_CPU_NAME_ "ATmega325" +#elif defined (__AVR_ATmega325P__) + #define _AVR_CPU_NAME_ "ATmega325P" +#elif defined (__AVR_ATmega3250__) + #define _AVR_CPU_NAME_ "ATmega3250" +#elif defined (__AVR_ATmega3250P__) + #define _AVR_CPU_NAME_ "ATmega3250P" +#elif defined (__AVR_ATmega328P__) + #define _AVR_CPU_NAME_ "ATmega328P" +#elif defined (__AVR_ATmega329__) + #define _AVR_CPU_NAME_ "ATmega329" +#elif defined (__AVR_ATmega329P__) + #define _AVR_CPU_NAME_ "ATmega329P" +#elif defined (__AVR_ATmega3290__) + #define _AVR_CPU_NAME_ "ATmega3290" +#elif defined (__AVR_ATmega3290P__) + #define _AVR_CPU_NAME_ "ATmega3290P" +#elif defined (__AVR_ATmega32HVB__) + #define _AVR_CPU_NAME_ "ATmega32HVB" +#elif defined (__AVR_ATmega406__) + #define _AVR_CPU_NAME_ "ATmega406" +#elif defined (__AVR_ATmega16__) + #define _AVR_CPU_NAME_ "Atmega16" +#elif defined (__AVR_ATmega161__) + #define _AVR_CPU_NAME_ "ATmega161" +#elif defined (__AVR_ATmega162__) + #define _AVR_CPU_NAME_ "ATmega162" +#elif defined (__AVR_ATmega163__) + #define _AVR_CPU_NAME_ "ATmega163" +#elif defined (__AVR_ATmega164P__) + #define _AVR_CPU_NAME_ "ATmega164P" +#elif defined (__AVR_ATmega165__) + #define _AVR_CPU_NAME_ "ATmega165" +#elif defined (__AVR_ATmega165P__) + #define _AVR_CPU_NAME_ "ATmega165P" +#elif defined (__AVR_ATmega168__) + #define _AVR_CPU_NAME_ "ATmega168" +#elif defined (__AVR_ATmega168P__) + #define _AVR_CPU_NAME_ "ATmega168P" +#elif defined (__AVR_ATmega169__) + #define _AVR_CPU_NAME_ "Atmega169" +#elif defined (__AVR_ATmega169P__) + #define _AVR_CPU_NAME_ "ATmega169P" +#elif defined (__AVR_ATmega8HVA__) + #define _AVR_CPU_NAME_ "ATmega8HVA" +#elif defined (__AVR_ATmega16HVA__) + #define _AVR_CPU_NAME_ "ATmega16HVA" +#elif defined (__AVR_ATmega8__) + #define _AVR_CPU_NAME_ "ATmega8" +#elif defined (__AVR_ATmega48__) + #define _AVR_CPU_NAME_ "ATmega48" +#elif defined (__AVR_ATmega48P__) + #define _AVR_CPU_NAME_ "ATmega48P" +#elif defined (__AVR_ATmega88__) + #define _AVR_CPU_NAME_ "ATmega88" +#elif defined (__AVR_ATmega88P__) + #define _AVR_CPU_NAME_ "ATmega88P" +#elif defined (__AVR_ATmega8515__) + #define _AVR_CPU_NAME_ "ATmega8515" +#elif defined (__AVR_ATmega8535__) + #define _AVR_CPU_NAME_ "ATmega8535" +#elif defined (__AVR_AT90S8535__) +#elif defined (__AVR_AT90C8534__) +#elif defined (__AVR_AT90S8515__) +#elif defined (__AVR_AT90S4434__) +#elif defined (__AVR_AT90S4433__) +#elif defined (__AVR_AT90S4414__) +#elif defined (__AVR_ATtiny22__) +#elif defined (__AVR_ATtiny26__) +#elif defined (__AVR_AT90S2343__) +#elif defined (__AVR_AT90S2333__) +#elif defined (__AVR_AT90S2323__) +#elif defined (__AVR_AT90S2313__) +#elif defined (__AVR_ATtiny2313__) + #define _AVR_CPU_NAME_ "ATtiny2313" +#elif defined (__AVR_ATtiny13__) +#elif defined (__AVR_ATtiny13A__) +#elif defined (__AVR_ATtiny25__) +#elif defined (__AVR_ATtiny45__) +#elif defined (__AVR_ATtiny85__) +#elif defined (__AVR_ATtiny24__) +#elif defined (__AVR_ATtiny44__) +#elif defined (__AVR_ATtiny84__) +#elif defined (__AVR_ATtiny261__) +#elif defined (__AVR_ATtiny461__) +#elif defined (__AVR_ATtiny861__) +#elif defined (__AVR_ATtiny43U__) +#elif defined (__AVR_ATtiny48__) +#elif defined (__AVR_ATtiny88__) +#elif defined (__AVR_ATtiny167__) +#elif defined (__AVR_ATmega8U2__) + #define _AVR_CPU_NAME_ "ATmega8U2" +#else + #error cpu not defined +#endif + + +#if !defined (_AVR_CPU_NAME_) +// #define _AVR_CPU_NAME_ "UNKNOWN" +#endif diff --git a/external/arduino/avr/bootloaders/stk500v2/avrinterruptnames.h b/external/arduino/avr/bootloaders/stk500v2/avrinterruptnames.h new file mode 100644 index 000000000..e7e3ed953 --- /dev/null +++ b/external/arduino/avr/bootloaders/stk500v2/avrinterruptnames.h @@ -0,0 +1,1040 @@ +//************************************************************************************************** +//* +//* interrupt vector names +//* +//* It is important to note that the vector numbers listed here +//* are the ATMEL documentation numbers. The Arduino numbers are 1 less +//* This is because the Atmel docs start numbering the interrupts at 1 +//* when it is actually vector #0 in the table. +//************************************************************************************************** +//* Jun 1, 2010 Added support for ATmega1281 +//* Jun 30, 2010 Putting in more ifdefs to conserve space +//* Jul 3, 2010 More #ifdefs to conserve space and testing on most of my boards +//* Jul 4, 2010 Started using vector defs for #ifdefs as defined in +//* Jul 13, 2010 Added support for __AVR_ATmega128__ +//* Aug 26, 2010 Added support for __AVR_ATmega2561__ +//* Sep 13, 2010 Added support for __AVR_AT90CAN32__ __AVR_AT90CAN64__ __AVR_AT90CAN128__ +//************************************************************************************************** + +//#include "avrinterruptnames.h" + +//************************************************************************************************** +//* this defines the interrupt vectors and allows us to compile ONLY those strings that are actually +//* in the target CPU. This way we do not have to keep making changes based on cpu, it will be +//* automatic even if we add a new CPU +#ifndef _AVR_IO_H_ + #include +#endif +//************************************************************************************************** + +#ifdef __MWERKS__ + #define prog_char char + #define PGM_P char * +#endif + + prog_char gAvrInt_RESET[] PROGMEM = "RESET"; +#ifdef INT0_vect + prog_char gAvrInt_INT0[] PROGMEM = "INT0"; +#endif +#ifdef INT1_vect + prog_char gAvrInt_INT1[] PROGMEM = "INT1"; +#endif +#ifdef INT2_vect + prog_char gAvrInt_INT2[] PROGMEM = "INT2"; +#endif +#ifdef INT3_vect + prog_char gAvrInt_INT3[] PROGMEM = "INT3"; +#endif +#ifdef INT4_vect + prog_char gAvrInt_INT4[] PROGMEM = "INT4"; +#endif +#ifdef INT5_vect + prog_char gAvrInt_INT5[] PROGMEM = "INT5"; +#endif +#ifdef INT6_vect + prog_char gAvrInt_INT6[] PROGMEM = "INT6"; +#endif +#ifdef INT7_vect + prog_char gAvrInt_INT7[] PROGMEM = "INT7"; +#endif +#ifdef PCINT0_vect + prog_char gAvrInt_PCINT0[] PROGMEM = "PCINT0"; +#endif +#ifdef PCINT1_vect + prog_char gAvrInt_PCINT1[] PROGMEM = "PCINT1"; +#endif +#ifdef PCINT2_vect + prog_char gAvrInt_PCINT2[] PROGMEM = "PCINT2"; +#endif +#ifdef PCINT3_vect + prog_char gAvrInt_PCINT3[] PROGMEM = "PCINT3"; +#endif +#ifdef WDT_vect + prog_char gAvrInt_WDT[] PROGMEM = "WDT"; +#endif +#ifdef TIMER0_COMP_vect + prog_char gAvrInt_TIMER0_COMP[] PROGMEM = "TIMER0 COMP"; +#endif +#ifdef TIMER0_COMPA_vect + prog_char gAvrInt_TIMER0_COMPA[] PROGMEM = "TIMER0 COMPA"; +#endif +#ifdef TIMER0_COMPB_vect + prog_char gAvrInt_TIMER0_COMPB[] PROGMEM = "TIMER0 COMPB"; +#endif +#ifdef TIMER0_OVF_vect + prog_char gAvrInt_TIMER0_OVF[] PROGMEM = "TIMER0 OVF"; +#endif +#ifdef TIMER1_CAPT_vect + prog_char gAvrInt_TIMER1_CAPT[] PROGMEM = "TIMER1 CAPT"; +#endif +#ifdef TIMER1_COMPA_vect + prog_char gAvrInt_TIMER1_COMPA[] PROGMEM = "TIMER1 COMPA"; +#endif +#ifdef TIMER1_COMPB_vect + prog_char gAvrInt_TIMER1_COMPB[] PROGMEM = "TIMER1 COMPB"; +#endif +#ifdef TIMER1_COMPC_vect + prog_char gAvrInt_TIMER1_COMPC[] PROGMEM = "TIMER1 COMPC"; +#endif +#ifdef TIMER1_OVF_vect + prog_char gAvrInt_TIMER1_OVF[] PROGMEM = "TIMER1 OVF"; +#endif +#ifdef TIMER2_COMP_vect + prog_char gAvrInt_TIMER2_COMP[] PROGMEM = "TIMER2 COMP"; +#endif +#ifdef TIMER2_COMPA_vect + prog_char gAvrInt_TIMER2_COMPA[] PROGMEM = "TIMER2 COMPA"; +#endif +#ifdef TIMER2_COMPB_vect + prog_char gAvrInt_TIMER2_COMPB[] PROGMEM = "TIMER2 COMPB"; +#endif +#ifdef TIMER2_OVF_vect + prog_char gAvrInt_TIMER2_OVF[] PROGMEM = "TIMER2 OVF"; +#endif +#ifdef TIMER3_CAPT_vect + prog_char gAvrInt_TIMER3_CAPT[] PROGMEM = "TIMER3 CAPT"; +#endif +#ifdef TIMER3_COMPA_vect + prog_char gAvrInt_TIMER3_COMPA[] PROGMEM = "TIMER3 COMPA"; +#endif +#ifdef TIMER3_COMPB_vect + prog_char gAvrInt_TIMER3_COMPB[] PROGMEM = "TIMER3 COMPB"; +#endif +#ifdef TIMER3_COMPC_vect + prog_char gAvrInt_TIMER3_COMPC[] PROGMEM = "TIMER3 COMPC"; +#endif +#ifdef TIMER3_OVF_vect + prog_char gAvrInt_TIMER3_OVF[] PROGMEM = "TIMER3 OVF"; +#endif +#ifdef TIMER4_CAPT_vect + prog_char gAvrInt_TIMER4_CAPT[] PROGMEM = "TIMER4 CAPT"; +#endif +#ifdef TIMER4_COMPA_vect + prog_char gAvrInt_TIMER4_COMPA[] PROGMEM = "TIMER4 COMPA"; +#endif +#ifdef TIMER4_COMPB_vect + prog_char gAvrInt_TIMER4_COMPB[] PROGMEM = "TIMER4 COMPB"; +#endif +#ifdef TIMER4_COMPC_vect + prog_char gAvrInt_TIMER4_COMPC[] PROGMEM = "TIMER4 COMPC"; +#endif +#ifdef TIMER4_COMPD_vect + prog_char gAvrInt_TIMER4_COMPD[] PROGMEM = "TIMER4 COMPD"; +#endif +#ifdef TIMER4_OVF_vect + prog_char gAvrInt_TIMER4_OVF[] PROGMEM = "TIMER4 OVF"; +#endif +#ifdef TIMER4_FPF_vect + prog_char gAvrInt_TIMER4_FPF[] PROGMEM = "TIMER4 Fault Protection"; +#endif +#ifdef TIMER5_CAPT_vect + prog_char gAvrInt_TIMER5_CAPT[] PROGMEM = "TIMER5 CAPT"; +#endif +#ifdef TIMER5_COMPA_vect + prog_char gAvrInt_TIMER5_COMPA[] PROGMEM = "TIMER5 COMPA"; +#endif +#ifdef TIMER5_COMPB_vect + prog_char gAvrInt_TIMER5_COMPB[] PROGMEM = "TIMER5 COMPB"; +#endif +#ifdef TIMER5_COMPC_vect + prog_char gAvrInt_TIMER5_COMPC[] PROGMEM = "TIMER5 COMPC"; +#endif +#ifdef TIMER5_OVF_vect + prog_char gAvrInt_TIMER5_OVF[] PROGMEM = "TIMER5 OVF"; +#endif + +//* when there is only 1 usart +#if defined(USART_RX_vect) || defined(USART_RXC_vect) + prog_char gAvrInt_USART_RX[] PROGMEM = "USART RX"; +#endif +#if defined(USART_UDRE_vect) + prog_char gAvrInt_USART_UDRE[] PROGMEM = "USART UDRE"; +#endif +#if defined(USART_TX_vect) || defined(USART_TXC_vect) + prog_char gAvrInt_USART_TX[] PROGMEM = "USART TX"; +#endif + + +//* usart 0 +#if defined(USART0_RX_vect) + prog_char gAvrInt_USART0_RX[] PROGMEM = "USART0 RX"; +#endif +#if defined(USART0_UDRE_vect) + prog_char gAvrInt_USART0_UDRE[] PROGMEM = "USART0 UDRE"; +#endif +#if defined(USART0_TX_vect) + prog_char gAvrInt_USART0_TX[] PROGMEM = "USART0 TX"; +#endif + + +//* usart 1 +#ifdef USART1_RX_vect + prog_char gAvrInt_USART1_RX[] PROGMEM = "USART1 RX"; +#endif +#ifdef USART1_UDRE_vect + prog_char gAvrInt_USART1_UDRE[] PROGMEM = "USART1 UDRE"; +#endif +#ifdef USART1_TX_vect + prog_char gAvrInt_USART1_TX[] PROGMEM = "USART1 TX"; +#endif + +//* usart 2 +#ifdef USART2_RX_vect + prog_char gAvrInt_USART2_RX[] PROGMEM = "USART2 RX"; +#endif +#ifdef USART2_UDRE_vect + prog_char gAvrInt_USART2_UDRE[] PROGMEM = "USART2 UDRE"; +#endif +#ifdef USART2_TX_vect + prog_char gAvrInt_USART2_TX[] PROGMEM = "USART2 TX"; +#endif + +//* usart 3 +#ifdef USART3_RX_vect + prog_char gAvrInt_USART3_RX[] PROGMEM = "USART3 RX"; +#endif +#ifdef USART3_UDRE_vect + prog_char gAvrInt_USART3_UDRE[] PROGMEM = "USART3 UDRE"; +#endif +#ifdef USART3_TX_vect + prog_char gAvrInt_USART3_TX[] PROGMEM = "USART3 TX"; +#endif +#ifdef SPI_STC_vect + prog_char gAvrInt_SPI_STC[] PROGMEM = "SPI STC"; +#endif +#ifdef ADC_vect + prog_char gAvrInt_ADC[] PROGMEM = "ADC"; +#endif +#if defined(ANALOG_COMP_vect) || defined(ANA_COMP_vect) + prog_char gAvrInt_ANALOG_COMP[] PROGMEM = "ANALOG COMP"; +#endif +#if defined(EE_READY_vect) || defined(EE_RDY_vect) + prog_char gAvrInt_EE_READY[] PROGMEM = "EE READY"; +#endif +#ifdef TWI_vect + prog_char gAvrInt_TWI[] PROGMEM = "TWI"; +#endif +#if defined(SPM_READY_vect) || defined(SPM_RDY_vect) + prog_char gAvrInt_SPM_READY[] PROGMEM = "SPM READY"; +#endif +#ifdef USI_START_vect + prog_char gAvrInt_USI_START[] PROGMEM = "USI START"; +#endif +#ifdef USI_OVERFLOW_vect + prog_char gAvrInt_USI_OVERFLOW[] PROGMEM = "USI OVERFLOW"; +#endif +#ifdef USB_GEN_vect + prog_char gAvrInt_USB_General[] PROGMEM = "USB General"; +#endif +#ifdef USB_COM_vect + prog_char gAvrInt_USB_Endpoint[] PROGMEM = "USB Endpoint"; +#endif + +#ifdef LCD_vect + prog_char gAvrInt_LCD_StartFrame[] PROGMEM = "LCD Start of Frame"; +#endif + +//* these are for the chips with CAN bus support +#ifdef CANIT_vect + prog_char gAvrInt_CAN_TrafnsferCE[] PROGMEM = "CAN Transfer Complete or Error"; +#endif +#ifdef OVRIT_vect + prog_char gAvrInt_CAN_TimerOverRun[] PROGMEM = "CAN Timer Overrun"; +#endif + +//* these are for __AVR_ATmega128RFA1__ +#ifdef TRX24_PLL_LOCK_vect + prog_char gAvrInt_TRN_PLL_LOCK[] PROGMEM = "TRX24_PLL_LOCK"; +#endif +#ifdef TRX24_PLL_UNLOCK_vect + prog_char gAvrInt_TRN_PLL_UNLOCK[] PROGMEM = "TRX24_PLL_UNLOCK"; +#endif +#ifdef TRX24_RX_START_vect + prog_char gAvrInt_TRN_RX_START[] PROGMEM = "TRX24_RX_START"; +#endif +#ifdef TRX24_RX_END_vect + prog_char gAvrInt_TRN_RX_END[] PROGMEM = "TRX24_RX_END"; +#endif +#ifdef TRX24_CCA_ED_DONE_vect + prog_char gAvrInt_TRN_CAAED_DONE[] PROGMEM = "TRX24_CCA_ED_DONE"; +#endif +#ifdef TRX24_XAH_AMI_vect + prog_char gAvrInt_TRN_FRAME_MATCH[] PROGMEM = "TRX24_FRAME_ADDRESS_MATCH"; +#endif +#ifdef TRX24_TX_END_vect + prog_char gAvrInt_TRN_TX_END[] PROGMEM = "TRX24_TX_END"; +#endif +#ifdef TRX24_AWAKE_vect + prog_char gAvrInt_TRN_AWAKE[] PROGMEM = "TRX24_AWAKE"; +#endif +#ifdef SCNT_CMP1_vect + prog_char gAvrInt_SCNT_CMP1[] PROGMEM = "SCNT_CMP1"; +#endif +#ifdef SCNT_CMP2_vect + prog_char gAvrInt_SCNT_CMP2[] PROGMEM = "SCNT_CMP2"; +#endif +#ifdef SCNT_CMP3_vect + prog_char gAvrInt_SCNT_CMP3[] PROGMEM = "SCNT_CMP3"; +#endif +#ifdef SCNT_OVFL_vect + prog_char gAvrInt_SCNT_OVFL[] PROGMEM = "SCNT_OVFL"; +#endif +#ifdef SCNT_BACKOFF_vect + prog_char gAvrInt_SCNT_BACKOFF[] PROGMEM = "SCNT_BACKOFF"; +#endif +#ifdef AES_READY_vect + prog_char gAvrInt_AES_READY[] PROGMEM = "AES_READY"; +#endif +#ifdef BAT_LOW_vect + prog_char gAvrInt_BAT_LOW[] PROGMEM = "BAT_LOW"; +#endif + + + +//************************************************************************************************** +//* these do not have vector defs and have to be done by CPU type +#if defined(__AVR_ATmega645__ ) || defined(__AVR_ATmega1281__) || defined(__AVR_ATmega2561__) + prog_char gAvrInt_NOT_USED[] PROGMEM = "NOT_USED"; +#endif +#if defined(__AVR_ATmega32U4__) || defined(__AVR_ATmega128RFA1__) + prog_char gAvrInt_RESERVED[] PROGMEM = "Reserved"; +#endif + + prog_char gAvrInt_END[] PROGMEM = "*"; + + + + + +//************************************************************************************************** +#if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) || defined(__AVR_ATmega328__) +#pragma mark __AVR_ATmega168__ / __AVR_ATmega328P__ / __AVR_ATmega328__ + +#define _INTERRUPT_NAMES_DEFINED_ + +PGM_P gInterruptNameTable[] PROGMEM = +{ + + gAvrInt_RESET, // 1 + gAvrInt_INT0, // 2 + gAvrInt_INT1, // 3 + gAvrInt_PCINT0, // 4 + gAvrInt_PCINT1, // 5 + gAvrInt_PCINT2, // 6 + gAvrInt_WDT, // 7 + gAvrInt_TIMER2_COMPA, // 8 + gAvrInt_TIMER2_COMPB, // 9 + gAvrInt_TIMER2_OVF, // 10 + gAvrInt_TIMER1_CAPT, // 11 + gAvrInt_TIMER1_COMPA, // 12 + gAvrInt_TIMER1_COMPB, // 13 + gAvrInt_TIMER1_OVF, // 14 + gAvrInt_TIMER0_COMPA, // 15 + gAvrInt_TIMER0_COMPB, // 16 + gAvrInt_TIMER0_OVF, // 17 + gAvrInt_SPI_STC, // 18 + gAvrInt_USART_RX, // 19 + gAvrInt_USART_UDRE, // 20 + gAvrInt_USART_TX, // 21 + gAvrInt_ADC, // 22 + gAvrInt_EE_READY, // 23 + gAvrInt_ANALOG_COMP, // 24 + gAvrInt_TWI, // 25 + gAvrInt_SPM_READY, // 26 +}; + +#endif + +//************************************************************************************************** +#if defined(__AVR_ATmega169__) +#pragma mark __AVR_ATmega169__ + +#define _INTERRUPT_NAMES_DEFINED_ + +PGM_P gInterruptNameTable[] PROGMEM = +{ + + gAvrInt_RESET, // 1 + gAvrInt_INT0, // 2 + gAvrInt_PCINT0, // 3 + gAvrInt_PCINT1, // 4 + gAvrInt_TIMER2_COMP, // 5 + gAvrInt_TIMER2_OVF, // 6 + gAvrInt_TIMER1_CAPT, // 7 + gAvrInt_TIMER1_COMPA, // 8 + gAvrInt_TIMER1_COMPB, // 9 + gAvrInt_TIMER1_OVF, // 10 + gAvrInt_TIMER0_COMP, // 11 + gAvrInt_TIMER0_OVF, // 12 + gAvrInt_SPI_STC, // 13 + gAvrInt_USART0_RX, // 14 + gAvrInt_USART0_UDRE, // 15 + gAvrInt_USART0_TX, // 16 + gAvrInt_USI_START, // 17 + gAvrInt_USI_OVERFLOW, // 18 + gAvrInt_ANALOG_COMP, // 19 + gAvrInt_ADC, // 20 + gAvrInt_EE_READY, // 21 + gAvrInt_SPM_READY, // 22 + gAvrInt_LCD_StartFrame, // 23 + +}; + +#endif + + +//************************************************************************************************** +#if defined(__AVR_ATmega640__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega1281__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega2561__) +#pragma mark __AVR_ATmega640__ __AVR_ATmega1280__ __AVR_ATmega1281__ __AVR_ATmega2560__ __AVR_ATmega2561__ + +#define _INTERRUPT_NAMES_DEFINED_ + +PGM_P gInterruptNameTable[] PROGMEM = +{ + + gAvrInt_RESET, // 1 + gAvrInt_INT0, // 2 + gAvrInt_INT1, // 3 + gAvrInt_INT2, // 4 + gAvrInt_INT3, // 5 + gAvrInt_INT4, // 6 + gAvrInt_INT5, // 7 + gAvrInt_INT6, // 8 + gAvrInt_INT7, // 9 + gAvrInt_PCINT0, // 10 + gAvrInt_PCINT1, // 11 +#if defined(__AVR_ATmega640__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) + gAvrInt_PCINT2, // 12 +#else + gAvrInt_NOT_USED, // 12 +#endif + gAvrInt_WDT, // 13 + gAvrInt_TIMER2_COMPA, // 14 + gAvrInt_TIMER2_COMPB, // 15 + gAvrInt_TIMER2_OVF, // 16 + gAvrInt_TIMER1_CAPT, // 17 + gAvrInt_TIMER1_COMPA, // 18 + gAvrInt_TIMER1_COMPB, // 19 + gAvrInt_TIMER1_COMPC, // 20 + gAvrInt_TIMER1_OVF, // 21 + gAvrInt_TIMER0_COMPA, // 22 + gAvrInt_TIMER0_COMPB, // 23 + gAvrInt_TIMER0_OVF, // 24 + gAvrInt_SPI_STC, // 25 + + gAvrInt_USART0_RX, // 26 + gAvrInt_USART0_UDRE, // 27 + gAvrInt_USART0_TX, // 28 + gAvrInt_ANALOG_COMP, // 29 + gAvrInt_ADC, // 30 + gAvrInt_EE_READY, // 31 + + gAvrInt_TIMER3_CAPT, // 32 + gAvrInt_TIMER3_COMPA, // 33 + gAvrInt_TIMER3_COMPB, // 34 + gAvrInt_TIMER3_COMPC, // 35 + gAvrInt_TIMER3_OVF, // 36 + + gAvrInt_USART1_RX, // 37 + gAvrInt_USART1_UDRE, // 38 + gAvrInt_USART1_TX, // 39 + gAvrInt_TWI, // 40 + gAvrInt_SPM_READY, // 41 +#if defined(__AVR_ATmega640__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) + gAvrInt_TIMER4_CAPT, // 42 +#else + gAvrInt_NOT_USED, // 42 +#endif + gAvrInt_TIMER4_COMPA, // 43 + gAvrInt_TIMER4_COMPB, // 44 + gAvrInt_TIMER4_COMPC, // 45 + gAvrInt_TIMER4_OVF, // 46 +#if defined(__AVR_ATmega640__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) + gAvrInt_TIMER5_CAPT, // 47 +#else + gAvrInt_NOT_USED, // 47 +#endif + gAvrInt_TIMER5_COMPA, // 48 + gAvrInt_TIMER5_COMPB, // 49 + gAvrInt_TIMER5_COMPC, // 50 + gAvrInt_TIMER5_OVF, // 51 + +#if defined(__AVR_ATmega640__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) + gAvrInt_USART2_RX, // 52 + gAvrInt_USART2_UDRE, // 53 + gAvrInt_USART2_TX, // 54 + + gAvrInt_USART3_RX, // 55 + gAvrInt_USART3_UDRE, // 56 + gAvrInt_USART3_TX, // 57 +#endif + +}; + +#endif + + + +//************************************************************************************************** +#if defined(__AVR_ATmega324P__ ) || defined(__AVR_ATmega644__ ) || defined(__AVR_ATmega644P__) || defined(__AVR_ATmega1284P__) +#pragma mark __AVR_ATmega324P__ __AVR_ATmega644__ __AVR_ATmega644P__ __AVR_ATmega1284P__ + +#define _INTERRUPT_NAMES_DEFINED_ + +PGM_P gInterruptNameTable[] PROGMEM = +{ + + gAvrInt_RESET, // 1 + gAvrInt_INT0, // 2 + gAvrInt_INT1, // 3 + gAvrInt_INT2, // 4 + gAvrInt_PCINT0, // 5 + gAvrInt_PCINT1, // 6 + gAvrInt_PCINT2, // 7 + gAvrInt_PCINT3, // 8 + gAvrInt_WDT, // 9 + gAvrInt_TIMER2_COMPA, // 10 + gAvrInt_TIMER2_COMPB, // 11 + gAvrInt_TIMER2_OVF, // 12 + gAvrInt_TIMER1_CAPT, // 13 + gAvrInt_TIMER1_COMPA, // 14 + gAvrInt_TIMER1_COMPB, // 15 + gAvrInt_TIMER1_OVF, // 16 + gAvrInt_TIMER0_COMPA, // 17 + gAvrInt_TIMER0_COMPB, // 18 + gAvrInt_TIMER0_OVF, // 19 + gAvrInt_SPI_STC, // 20 + gAvrInt_USART0_RX, // 21 + gAvrInt_USART0_UDRE, // 22 + gAvrInt_USART0_TX, // 23 + gAvrInt_ANALOG_COMP, // 24 + gAvrInt_ADC, // 25 + gAvrInt_EE_READY, // 26 + gAvrInt_TWI, // 27 + gAvrInt_SPM_READY, // 28 + +#if defined(__AVR_ATmega324P__ ) || defined(__AVR_ATmega644P__) + gAvrInt_USART1_RX, // 29 + gAvrInt_USART1_UDRE, // 30 + gAvrInt_USART1_TX, // 31 +#endif + +}; + + +#endif + +//************************************************************************************************** +#if defined(__AVR_ATmega1284P__ ) +#pragma mark __AVR_ATmega1284P__ + +#define _INTERRUPT_NAMES_DEFINED_ + +PGM_P gInterruptNameTable[] PROGMEM = +{ + + gAvrInt_RESET, // 1 + gAvrInt_INT0, // 2 + gAvrInt_INT1, // 3 + gAvrInt_INT2, // 4 + gAvrInt_PCINT0, // 5 + gAvrInt_PCINT1, // 6 + gAvrInt_PCINT2, // 7 + gAvrInt_PCINT3, // 8 + gAvrInt_WDT, // 9 + gAvrInt_TIMER2_COMPA, // 10 + gAvrInt_TIMER2_COMPB, // 11 + gAvrInt_TIMER2_OVF, // 12 + gAvrInt_TIMER1_CAPT, // 13 + gAvrInt_TIMER1_COMPA, // 14 + gAvrInt_TIMER1_COMPB, // 15 + gAvrInt_TIMER1_OVF, // 16 + gAvrInt_TIMER0_COMPA, // 17 + gAvrInt_TIMER0_COMPB, // 18 + gAvrInt_TIMER0_OVF, // 19 + gAvrInt_SPI_STC, // 20 + gAvrInt_USART0_RX, // 21 + gAvrInt_USART0_UDRE, // 22 + gAvrInt_USART0_TX, // 23 + gAvrInt_ANALOG_COMP, // 24 + gAvrInt_ADC, // 25 + gAvrInt_EE_READY, // 26 + gAvrInt_TWI, // 27 + gAvrInt_SPM_READY, // 28 + + gAvrInt_USART1_RX, // 29 + gAvrInt_USART1_UDRE, // 30 + gAvrInt_USART1_TX, // 31 + //* these are NOT documented in doc8272.pdf + //* they are in iom1284p.h + gAvrInt_TIMER3_CAPT, // 32 + gAvrInt_TIMER3_COMPA, // 33 + gAvrInt_TIMER3_COMPB, // 34 + gAvrInt_TIMER3_OVF, // 35 + + +}; + + +#endif + + +//************************************************************************************************** +#if defined(__AVR_ATmega645__ ) +#pragma mark __AVR_ATmega645__ + +#define _INTERRUPT_NAMES_DEFINED_ + +PGM_P gInterruptNameTable[] PROGMEM = +{ + + gAvrInt_RESET, // 1 + gAvrInt_INT0, // 2 + gAvrInt_PCINT0, // 3 + gAvrInt_PCINT1, // 4 + gAvrInt_TIMER2_COMP, // 5 + gAvrInt_TIMER2_OVF, // 6 + gAvrInt_TIMER1_CAPT, // 7 + gAvrInt_TIMER1_COMPA, // 8 + gAvrInt_TIMER1_COMPB, // 9 + gAvrInt_TIMER1_OVF, // 10 + gAvrInt_TIMER0_COMP, // 11 + gAvrInt_TIMER0_OVF, // 12 + gAvrInt_SPI_STC, // 13 + gAvrInt_USART0_RX, // 14 + gAvrInt_USART0_UDRE, // 15 + gAvrInt_USART0_TX, // 16 + gAvrInt_USI_START, // 17 + gAvrInt_USI_OVERFLOW, // 18 + gAvrInt_ANALOG_COMP, // 19 + gAvrInt_ADC, // 20 + gAvrInt_EE_READY, // 21 + gAvrInt_SPM_READY, // 22 + gAvrInt_NOT_USED, // 23 + +#if defined(__AVR_ATmega3250__) || defined(__AVR_ATmega6450__) + gAvrInt_PCINT2, // 24 + gAvrInt_PCINT3, // 25 +#endif +}; + + +#endif + +//************************************************************************************************** +#if defined(__AVR_ATmega16__ ) +#pragma mark __AVR_ATmega16__ + +#define _INTERRUPT_NAMES_DEFINED_ + +PGM_P gInterruptNameTable[] PROGMEM = +{ + + gAvrInt_RESET, // 1 + gAvrInt_INT0, // 2 + gAvrInt_INT1, // 3 + gAvrInt_TIMER2_COMP, // 4 + gAvrInt_TIMER2_OVF, // 5 + gAvrInt_TIMER1_CAPT, // 6 + gAvrInt_TIMER1_COMPA, // 7 + gAvrInt_TIMER1_COMPB, // 8 + gAvrInt_TIMER1_OVF, // 9 + gAvrInt_TIMER0_OVF, // 10 + gAvrInt_SPI_STC, // 11 + gAvrInt_USART_RX, // 12 + gAvrInt_USART_UDRE, // 13 + gAvrInt_USART_TX, // 14 + gAvrInt_ADC, // 15 + gAvrInt_EE_READY, // 16 + gAvrInt_ANALOG_COMP, // 17 + gAvrInt_TWI, // 18 + gAvrInt_INT2, // 19 + gAvrInt_TIMER0_COMP, // 20 + gAvrInt_SPM_READY, // 21 + +}; + + +#endif + +//************************************************************************************************** +#if defined(__AVR_ATmega32__ ) +#pragma mark __AVR_ATmega32__ + +#define _INTERRUPT_NAMES_DEFINED_ + +PGM_P gInterruptNameTable[] PROGMEM = +{ + + gAvrInt_RESET, // 1 + gAvrInt_INT0, // 2 + gAvrInt_INT1, // 3 + gAvrInt_INT2, // 4 + gAvrInt_TIMER2_COMP, // 5 + gAvrInt_TIMER2_OVF, // 6 + gAvrInt_TIMER1_CAPT, // 7 + gAvrInt_TIMER1_COMPA, // 8 + gAvrInt_TIMER1_COMPB, // 9 + gAvrInt_TIMER1_OVF, // 10 + gAvrInt_TIMER0_COMP, // 11 + gAvrInt_TIMER0_OVF, // 12 + gAvrInt_SPI_STC, // 13 + gAvrInt_USART_RX, // 14 + gAvrInt_USART_UDRE, // 15 + gAvrInt_USART_TX, // 16 + gAvrInt_ADC, // 17 + gAvrInt_EE_READY, // 18 + gAvrInt_ANALOG_COMP, // 19 + gAvrInt_TWI, // 20 + gAvrInt_SPM_READY, // 21 + +}; + + +#endif + +//************************************************************************************************** +#if defined(__AVR_ATmega32U4__) +#pragma mark __AVR_ATmega32U4__ +//* teensy 2.0 +//* http://www.pjrc.com/teensy/pinout.html +#define _INTERRUPT_NAMES_DEFINED_ + + +PGM_P gInterruptNameTable[] PROGMEM = +{ + + gAvrInt_RESET, // 1 + gAvrInt_INT0, // 2 + gAvrInt_INT1, // 3 + gAvrInt_INT2, // 4 + gAvrInt_INT3, // 5 + gAvrInt_RESERVED, // 6 + gAvrInt_RESERVED, // 7 + gAvrInt_INT6, // 8 + gAvrInt_RESERVED, // 9 + gAvrInt_PCINT0, // 10 + gAvrInt_USB_General, // 11 + gAvrInt_USB_Endpoint, // 12 + gAvrInt_WDT, // 13 + gAvrInt_RESERVED, // 14 + gAvrInt_RESERVED, // 15 + gAvrInt_RESERVED, // 16 + gAvrInt_TIMER1_CAPT, // 17 + gAvrInt_TIMER1_COMPA, // 18 + gAvrInt_TIMER1_COMPB, // 19 + gAvrInt_TIMER1_COMPC, // 20 + gAvrInt_TIMER1_OVF, // 21 + gAvrInt_TIMER0_COMPA, // 22 + gAvrInt_TIMER0_COMPB, // 23 + gAvrInt_TIMER0_OVF, // 24 + gAvrInt_SPI_STC, // 25 + + gAvrInt_USART1_RX, // 26 + gAvrInt_USART1_UDRE, // 27 + gAvrInt_USART1_TX, // 28 + gAvrInt_ANALOG_COMP, // 29 + + gAvrInt_ADC, // 30 + gAvrInt_EE_READY, // 31 + + gAvrInt_TIMER3_CAPT, // 32 + gAvrInt_TIMER3_COMPA, // 33 + gAvrInt_TIMER3_COMPB, // 34 + gAvrInt_TIMER3_COMPC, // 35 + gAvrInt_TIMER3_OVF, // 36 + gAvrInt_TWI, // 37 + gAvrInt_SPM_READY, // 38 + + gAvrInt_TIMER4_COMPA, // 39 + gAvrInt_TIMER4_COMPB, // 40 + gAvrInt_TIMER4_COMPD, // 41 + gAvrInt_TIMER4_OVF, // 42 + gAvrInt_TIMER4_FPF, // 43 +}; + +#endif + +//************************************************************************************************** +#if defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB1287__) +#pragma mark __AVR_AT90USB1286__ +//* teensy++ 2.0 +//* http://www.pjrc.com/teensy/pinout.html +#define _INTERRUPT_NAMES_DEFINED_ + + +PGM_P gInterruptNameTable[] PROGMEM = +{ + + gAvrInt_RESET, // 1 + gAvrInt_INT0, // 2 + gAvrInt_INT1, // 3 + gAvrInt_INT2, // 4 + gAvrInt_INT3, // 5 + gAvrInt_INT4, // 6 + gAvrInt_INT5, // 7 + gAvrInt_INT6, // 8 + gAvrInt_INT7, // 9 + gAvrInt_PCINT0, // 10 + gAvrInt_USB_General, // 11 + gAvrInt_USB_Endpoint, // 12 + gAvrInt_WDT, // 13 + gAvrInt_TIMER2_COMPA, // 14 + gAvrInt_TIMER2_COMPB, // 15 + gAvrInt_TIMER2_OVF, // 16 + gAvrInt_TIMER1_CAPT, // 17 + gAvrInt_TIMER1_COMPA, // 18 + gAvrInt_TIMER1_COMPB, // 19 + gAvrInt_TIMER1_COMPC, // 20 + gAvrInt_TIMER1_OVF, // 21 + gAvrInt_TIMER0_COMPA, // 22 + gAvrInt_TIMER0_COMPB, // 23 + gAvrInt_TIMER0_OVF, // 24 + gAvrInt_SPI_STC, // 25 + + gAvrInt_USART1_RX, // 26 + gAvrInt_USART1_UDRE, // 27 + gAvrInt_USART1_TX, // 28 + gAvrInt_ANALOG_COMP, // 29 + + gAvrInt_ADC, // 30 + gAvrInt_EE_READY, // 31 + + gAvrInt_TIMER3_CAPT, // 32 + gAvrInt_TIMER3_COMPA, // 33 + gAvrInt_TIMER3_COMPB, // 34 + gAvrInt_TIMER3_COMPC, // 35 + gAvrInt_TIMER3_OVF, // 36 + gAvrInt_TWI, // 37 + gAvrInt_SPM_READY, // 38 + +}; + +#endif + + + + +//************************************************************************************************** +#if defined(__AVR_ATmega128__) || defined(__AVR_ATmega64__) +#pragma mark __AVR_ATmega64__ __AVR_ATmega128__ +#define _INTERRUPT_NAMES_DEFINED_ + + +PGM_P gInterruptNameTable[] PROGMEM = +{ + + gAvrInt_RESET, // 1 + gAvrInt_INT0, // 2 + gAvrInt_INT1, // 3 + gAvrInt_INT2, // 4 + gAvrInt_INT3, // 5 + gAvrInt_INT4, // 6 + gAvrInt_INT5, // 7 + gAvrInt_INT6, // 8 + gAvrInt_INT7, // 9 + gAvrInt_TIMER2_COMP, // 10 + gAvrInt_TIMER2_OVF, // 11 + gAvrInt_TIMER1_CAPT, // 12 + gAvrInt_TIMER1_COMPA, // 13 + gAvrInt_TIMER1_COMPB, // 14 + gAvrInt_TIMER1_OVF, // 15 + gAvrInt_TIMER0_COMP, // 16 + gAvrInt_TIMER0_OVF, // 17 + gAvrInt_SPI_STC, // 18 + gAvrInt_USART0_RX, // 19 + gAvrInt_USART0_UDRE, // 20 + gAvrInt_USART0_TX, // 21 + gAvrInt_ADC, // 22 + gAvrInt_EE_READY, // 23 + gAvrInt_ANALOG_COMP, // 24 + gAvrInt_TIMER1_COMPC, // 25 + gAvrInt_TIMER3_CAPT, // 26 + gAvrInt_TIMER3_COMPA, // 27 + gAvrInt_TIMER3_COMPB, // 28 + gAvrInt_TIMER3_COMPC, // 29 + gAvrInt_TIMER3_OVF, // 30 + gAvrInt_USART1_RX, // 31 + gAvrInt_USART1_UDRE, // 32 + gAvrInt_USART1_TX, // 33 + gAvrInt_TWI, // 34 + gAvrInt_SPM_READY, // 35 + +}; + +#endif + +//************************************************************************************************** +#if defined(__AVR_AT90CAN32__) || defined(__AVR_AT90CAN64__) || defined(__AVR_AT90CAN128__) +#pragma mark __AVR_AT90CAN32__ __AVR_AT90CAN64__ __AVR_AT90CAN128__ + +#define _INTERRUPT_NAMES_DEFINED_ + +PGM_P gInterruptNameTable[] PROGMEM = +{ + + gAvrInt_RESET, // 1 + gAvrInt_INT0, // 2 + gAvrInt_INT1, // 3 + gAvrInt_INT2, // 4 + gAvrInt_INT3, // 5 + gAvrInt_INT4, // 6 + gAvrInt_INT5, // 7 + gAvrInt_INT6, // 8 + gAvrInt_INT7, // 9 + gAvrInt_TIMER2_COMP, // 10 + gAvrInt_TIMER2_OVF, // 11 + gAvrInt_TIMER1_CAPT, // 12 + gAvrInt_TIMER1_COMPA, // 13 + gAvrInt_TIMER1_COMPB, // 14 + gAvrInt_TIMER1_COMPC, // 15 + gAvrInt_TIMER1_OVF, // 16 + gAvrInt_TIMER0_COMP, // 17 + gAvrInt_TIMER0_OVF, // 18 + gAvrInt_CAN_TrafnsferCE, // 19 + gAvrInt_CAN_TimerOverRun, // 20 + gAvrInt_SPI_STC, // 21 + gAvrInt_USART0_RX, // 22 + gAvrInt_USART0_UDRE, // 23 + gAvrInt_USART0_TX, // 24 + gAvrInt_ANALOG_COMP, // 25 + gAvrInt_ADC, // 26 + gAvrInt_EE_READY, // 27 + gAvrInt_TIMER3_CAPT, // 28 + gAvrInt_TIMER3_COMPA, // 29 + gAvrInt_TIMER3_COMPB, // 30 + gAvrInt_TIMER3_COMPC, // 31 + gAvrInt_TIMER3_OVF, // 32 + gAvrInt_USART1_RX, // 33 + gAvrInt_USART1_UDRE, // 34 + gAvrInt_USART1_TX, // 35 + gAvrInt_TWI, // 36 + gAvrInt_SPM_READY, // 37 +}; + +#endif + +//************************************************************************************************** +#if defined (__AVR_ATmega128RFA1__) +#pragma mark __AVR_ATmega128RFA1__ +#define _INTERRUPT_NAMES_DEFINED_ + +PGM_P gInterruptNameTable[] PROGMEM = +{ + //* Atmel changed the number scheme for interrupt vectors + gAvrInt_RESET, // 0 + gAvrInt_INT0, // 1 + gAvrInt_INT1, // 2 + gAvrInt_INT2, // 3 + gAvrInt_INT3, // 4 + gAvrInt_INT4, // 5 + gAvrInt_INT5, // 6 + gAvrInt_INT6, // 7 + gAvrInt_INT7, // 8 + gAvrInt_PCINT0, // 9 + gAvrInt_PCINT1, // 10 + gAvrInt_PCINT2, // 11 + gAvrInt_WDT, // 12 + gAvrInt_TIMER2_COMPA, // 13 + gAvrInt_TIMER2_COMPB, // 14 + gAvrInt_TIMER2_OVF, // 15 + gAvrInt_TIMER1_CAPT, // 16 + gAvrInt_TIMER1_COMPA, // 17 + gAvrInt_TIMER1_COMPB, // 18 + gAvrInt_TIMER1_COMPC, // 19 + gAvrInt_TIMER1_OVF, // 20 + gAvrInt_TIMER0_COMPA, // 21 + gAvrInt_TIMER0_COMPB, // 22 + gAvrInt_TIMER0_OVF, // 23 + gAvrInt_SPI_STC, // 24 + gAvrInt_USART0_RX, // 25 + gAvrInt_USART0_UDRE, // 26 + gAvrInt_USART0_TX, // 27 + gAvrInt_ANALOG_COMP, // 28 + gAvrInt_ADC, // 29 + gAvrInt_EE_READY, // 30 + gAvrInt_TIMER3_CAPT, // 31 + gAvrInt_TIMER3_COMPA, // 32 + gAvrInt_TIMER3_COMPB, // 33 + gAvrInt_TIMER3_COMPC, // 34 + gAvrInt_TIMER3_OVF, // 35 + gAvrInt_USART1_RX, // 36 + gAvrInt_USART1_UDRE, // 37 + gAvrInt_USART1_TX, // 38 + gAvrInt_TWI, // 39 + gAvrInt_SPM_READY, // 40 + gAvrInt_TIMER4_CAPT, // 41 + gAvrInt_TIMER4_COMPA, // 42 + gAvrInt_TIMER4_COMPB, // 43 + gAvrInt_TIMER4_COMPC, // 44 + gAvrInt_TIMER4_OVF, // 45 + gAvrInt_TIMER5_CAPT, // 46 + gAvrInt_TIMER5_COMPA, // 47 + gAvrInt_TIMER5_COMPB, // 48 + gAvrInt_TIMER5_COMPC, // 49 + gAvrInt_TIMER5_OVF, // 50 +#if 1 + gAvrInt_RESERVED, // 51 + gAvrInt_RESERVED, // 52 + gAvrInt_RESERVED, // 53 + + gAvrInt_RESERVED, // 54 + gAvrInt_RESERVED, // 55 + gAvrInt_RESERVED, // 56 + +#else + gAvrInt_USART2_RX, // 51 + gAvrInt_USART2_UDRE, // 52 + gAvrInt_USART2_TX, // 53 + + gAvrInt_USART3_RX, // 54 + gAvrInt_USART3_UDRE, // 55 + gAvrInt_USART3_TX, // 56 +#endif + gAvrInt_TRN_PLL_LOCK, // 57 + gAvrInt_TRN_PLL_UNLOCK, // 58 + gAvrInt_TRN_RX_START, // 59 + gAvrInt_TRN_RX_END, // 60 + gAvrInt_TRN_CAAED_DONE, // 61 + gAvrInt_TRN_FRAME_MATCH,// 62 + gAvrInt_TRN_TX_END, // 63 + gAvrInt_TRN_AWAKE, // 64 + + gAvrInt_SCNT_CMP1, // 65 + gAvrInt_SCNT_CMP2, // 66 + gAvrInt_SCNT_CMP3, // 67 + gAvrInt_SCNT_OVFL, // 68 + gAvrInt_SCNT_BACKOFF, // 69 + gAvrInt_AES_READY, // 70 + gAvrInt_BAT_LOW, // 71 + + +}; + +#endif + + +#if !defined(_INTERRUPT_NAMES_DEFINED_) + #warning No interrupt string defs for this cpu +#endif + diff --git a/external/arduino/avr/bootloaders/stk500v2/command.h b/external/arduino/avr/bootloaders/stk500v2/command.h new file mode 100644 index 000000000..03b1b38af --- /dev/null +++ b/external/arduino/avr/bootloaders/stk500v2/command.h @@ -0,0 +1,114 @@ +//**** ATMEL AVR - A P P L I C A T I O N N O T E ************************ +//* +//* Title: AVR068 - STK500 Communication Protocol +//* Filename: command.h +//* Version: 1.0 +//* Last updated: 31.01.2005 +//* +//* Support E-mail: avr@atmel.com +//* +//************************************************************************** + +// *****************[ STK message constants ]*************************** + +#define MESSAGE_START 0x1B //= ESC = 27 decimal +#define TOKEN 0x0E + +// *****************[ STK general command constants ]************************** + +#define CMD_SIGN_ON 0x01 +#define CMD_SET_PARAMETER 0x02 +#define CMD_GET_PARAMETER 0x03 +#define CMD_SET_DEVICE_PARAMETERS 0x04 +#define CMD_OSCCAL 0x05 +#define CMD_LOAD_ADDRESS 0x06 +#define CMD_FIRMWARE_UPGRADE 0x07 + + +// *****************[ STK ISP command constants ]****************************** + +#define CMD_ENTER_PROGMODE_ISP 0x10 +#define CMD_LEAVE_PROGMODE_ISP 0x11 +#define CMD_CHIP_ERASE_ISP 0x12 +#define CMD_PROGRAM_FLASH_ISP 0x13 +#define CMD_READ_FLASH_ISP 0x14 +#define CMD_PROGRAM_EEPROM_ISP 0x15 +#define CMD_READ_EEPROM_ISP 0x16 +#define CMD_PROGRAM_FUSE_ISP 0x17 +#define CMD_READ_FUSE_ISP 0x18 +#define CMD_PROGRAM_LOCK_ISP 0x19 +#define CMD_READ_LOCK_ISP 0x1A +#define CMD_READ_SIGNATURE_ISP 0x1B +#define CMD_READ_OSCCAL_ISP 0x1C +#define CMD_SPI_MULTI 0x1D + +// *****************[ STK PP command constants ]******************************* + +#define CMD_ENTER_PROGMODE_PP 0x20 +#define CMD_LEAVE_PROGMODE_PP 0x21 +#define CMD_CHIP_ERASE_PP 0x22 +#define CMD_PROGRAM_FLASH_PP 0x23 +#define CMD_READ_FLASH_PP 0x24 +#define CMD_PROGRAM_EEPROM_PP 0x25 +#define CMD_READ_EEPROM_PP 0x26 +#define CMD_PROGRAM_FUSE_PP 0x27 +#define CMD_READ_FUSE_PP 0x28 +#define CMD_PROGRAM_LOCK_PP 0x29 +#define CMD_READ_LOCK_PP 0x2A +#define CMD_READ_SIGNATURE_PP 0x2B +#define CMD_READ_OSCCAL_PP 0x2C + +#define CMD_SET_CONTROL_STACK 0x2D + +// *****************[ STK HVSP command constants ]***************************** + +#define CMD_ENTER_PROGMODE_HVSP 0x30 +#define CMD_LEAVE_PROGMODE_HVSP 0x31 +#define CMD_CHIP_ERASE_HVSP 0x32 +#define CMD_PROGRAM_FLASH_HVSP ` 0x33 +#define CMD_READ_FLASH_HVSP 0x34 +#define CMD_PROGRAM_EEPROM_HVSP 0x35 +#define CMD_READ_EEPROM_HVSP 0x36 +#define CMD_PROGRAM_FUSE_HVSP 0x37 +#define CMD_READ_FUSE_HVSP 0x38 +#define CMD_PROGRAM_LOCK_HVSP 0x39 +#define CMD_READ_LOCK_HVSP 0x3A +#define CMD_READ_SIGNATURE_HVSP 0x3B +#define CMD_READ_OSCCAL_HVSP 0x3C + +// *****************[ STK status constants ]*************************** + +// Success +#define STATUS_CMD_OK 0x00 + +// Warnings +#define STATUS_CMD_TOUT 0x80 +#define STATUS_RDY_BSY_TOUT 0x81 +#define STATUS_SET_PARAM_MISSING 0x82 + +// Errors +#define STATUS_CMD_FAILED 0xC0 +#define STATUS_CKSUM_ERROR 0xC1 +#define STATUS_CMD_UNKNOWN 0xC9 + +// *****************[ STK parameter constants ]*************************** +#define PARAM_BUILD_NUMBER_LOW 0x80 +#define PARAM_BUILD_NUMBER_HIGH 0x81 +#define PARAM_HW_VER 0x90 +#define PARAM_SW_MAJOR 0x91 +#define PARAM_SW_MINOR 0x92 +#define PARAM_VTARGET 0x94 +#define PARAM_VADJUST 0x95 +#define PARAM_OSC_PSCALE 0x96 +#define PARAM_OSC_CMATCH 0x97 +#define PARAM_SCK_DURATION 0x98 +#define PARAM_TOPCARD_DETECT 0x9A +#define PARAM_STATUS 0x9C +#define PARAM_DATA 0x9D +#define PARAM_RESET_POLARITY 0x9E +#define PARAM_CONTROLLER_INIT 0x9F + +// *****************[ STK answer constants ]*************************** + +#define ANSWER_CKSUM_ERROR 0xB0 + diff --git a/external/arduino/avr/bootloaders/stk500v2/stk500boot.c b/external/arduino/avr/bootloaders/stk500v2/stk500boot.c new file mode 100644 index 000000000..0b49dffc5 --- /dev/null +++ b/external/arduino/avr/bootloaders/stk500v2/stk500boot.c @@ -0,0 +1,2122 @@ +/***************************************************************************** +Title: STK500v2 compatible bootloader + Modified for Wiring board ATMega128-16MHz +Author: Peter Fleury http://jump.to/fleury +Compiler: avr-gcc 3.4.5 or 4.1 / avr-libc 1.4.3 +Hardware: All AVRs with bootloader support, tested with ATmega8 +License: GNU General Public License + +Modified: Worapoht Kornkaewwattanakul http://www.avride.com +Date: 17 October 2007 +Update: 1st, 29 Dec 2007 : Enable CMD_SPI_MULTI but ignore unused command by return 0x00 byte response.. +Compiler: WINAVR20060421 +Description: add timeout feature like previous Wiring bootloader + +DESCRIPTION: + This program allows an AVR with bootloader capabilities to + read/write its own Flash/EEprom. To enter Programming mode + an input pin is checked. If this pin is pulled low, programming mode + is entered. If not, normal execution is done from $0000 + "reset" vector in Application area. + Size fits into a 1024 word bootloader section + when compiled with avr-gcc 4.1 + (direct replace on Wiring Board without fuse setting changed) + +USAGE: + - Set AVR MCU type and clock-frequency (F_CPU) in the Makefile. + - Set baud rate below (AVRISP only works with 115200 bps) + - compile/link the bootloader with the supplied Makefile + - program the "Boot Flash section size" (BOOTSZ fuses), + for boot-size 1024 words: program BOOTSZ01 + - enable the BOOT Reset Vector (program BOOTRST) + - Upload the hex file to the AVR using any ISP programmer + - Program Boot Lock Mode 3 (program BootLock 11 and BootLock 12 lock bits) // (leave them) + - Reset your AVR while keeping PROG_PIN pulled low // (for enter bootloader by switch) + - Start AVRISP Programmer (AVRStudio/Tools/Program AVR) + - AVRISP will detect the bootloader + - Program your application FLASH file and optional EEPROM file using AVRISP + +Note: + Erasing the device without flashing, through AVRISP GUI button "Erase Device" + is not implemented, due to AVRStudio limitations. + Flash is always erased before programming. + + AVRdude: + Please uncomment #define REMOVE_CMD_SPI_MULTI when using AVRdude. + Comment #define REMOVE_PROGRAM_LOCK_BIT_SUPPORT to reduce code size + Read Fuse Bits and Read/Write Lock Bits is not supported + +NOTES: + Based on Atmel Application Note AVR109 - Self-programming + Based on Atmel Application Note AVR068 - STK500v2 Protocol + +LICENSE: + Copyright (C) 2006 Peter Fleury + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + +*****************************************************************************/ + +//************************************************************************ +//* Edit History +//************************************************************************ +//* Jul 7, 2010 = Mark Sproul msproul@skycharoit.com +//* Jul 7, 2010 Working on mega2560. No Auto-restart +//* Jul 7, 2010 Switched to 8K bytes (4K words) so that we have room for the monitor +//* Jul 8, 2010 Found older version of source that had auto restart, put that code back in +//* Jul 8, 2010 Adding monitor code +//* Jul 11, 2010 Added blinking LED while waiting for download to start +//* Jul 11, 2010 Added EEPROM test +//* Jul 29, 2010 Added recchar_timeout for timing out on bootloading +//* Aug 23, 2010 Added support for atmega2561 +//* Aug 26, 2010 Removed support for BOOT_BY_SWITCH +//* Sep 8, 2010 Added support for atmega16 +//* Nov 9, 2010 Issue 392:Fixed bug that 3 !!! in code would cause it to jump to monitor +//* Jun 24, 2011 Removed analogRead (was not used) +//* Dec 29, 2011 Issue 181: added watch dog timmer support +//* Dec 29, 2011 Issue 505: bootloader is comparing the seqNum to 1 or the current sequence +//* Jan 1, 2012 Issue 543: CMD_CHIP_ERASE_ISP now returns STATUS_CMD_FAILED instead of STATUS_CMD_OK +//* Jan 1, 2012 Issue 543: Write EEPROM now does something (NOT TESTED) +//* Jan 1, 2012 Issue 544: stk500v2 bootloader doesn't support reading fuses +//************************************************************************ + +//************************************************************************ +//* these are used to test issues +//* http://code.google.com/p/arduino/issues/detail?id=505 +//* Reported by mark.stubbs, Mar 14, 2011 +//* The STK500V2 bootloader is comparing the seqNum to 1 or the current sequence +//* (IE: Requiring the sequence to be 1 or match seqNum before continuing). +//* The correct behavior is for the STK500V2 to accept the PC's sequence number, and echo it back for the reply message. +#define _FIX_ISSUE_505_ +//************************************************************************ +//* Issue 181: added watch dog timmer support +#define _FIX_ISSUE_181_ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "command.h" + + +#if defined(_MEGA_BOARD_) || defined(_BOARD_AMBER128_) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) \ + || defined(__AVR_ATmega2561__) || defined(__AVR_ATmega1284P__) || defined(ENABLE_MONITOR) + #undef ENABLE_MONITOR + #define ENABLE_MONITOR + static void RunMonitor(void); +#endif + +#ifndef EEWE + #define EEWE 1 +#endif +#ifndef EEMWE + #define EEMWE 2 +#endif + +//#define _DEBUG_SERIAL_ +//#define _DEBUG_WITH_LEDS_ + + +/* + * Uncomment the following lines to save code space + */ +//#define REMOVE_PROGRAM_LOCK_BIT_SUPPORT // disable program lock bits +//#define REMOVE_BOOTLOADER_LED // no LED to show active bootloader +//#define REMOVE_CMD_SPI_MULTI // disable processing of SPI_MULTI commands, Remark this line for AVRDUDE +// + + + +//************************************************************************ +//* LED on pin "PROGLED_PIN" on port "PROGLED_PORT" +//* indicates that bootloader is active +//* PG2 -> LED on Wiring board +//************************************************************************ +#define BLINK_LED_WHILE_WAITING + +#ifdef _MEGA_BOARD_ + #define PROGLED_PORT PORTB + #define PROGLED_DDR DDRB + #define PROGLED_PIN PINB7 +#elif defined( _BOARD_AMBER128_ ) + //* this is for the amber 128 http://www.soc-robotics.com/ + //* onbarod led is PORTE4 + #define PROGLED_PORT PORTD + #define PROGLED_DDR DDRD + #define PROGLED_PIN PINE7 +#elif defined( _CEREBOTPLUS_BOARD_ ) || defined(_CEREBOT_II_BOARD_) + //* this is for the Cerebot 2560 board and the Cerebot-ii + //* onbarod leds are on PORTE4-7 + #define PROGLED_PORT PORTE + #define PROGLED_DDR DDRE + #define PROGLED_PIN PINE7 +#elif defined( _PENGUINO_ ) + //* this is for the Penguino + //* onbarod led is PORTE4 + #define PROGLED_PORT PORTC + #define PROGLED_DDR DDRC + #define PROGLED_PIN PINC6 +#elif defined( _ANDROID_2561_ ) || defined( __AVR_ATmega2561__ ) + //* this is for the Boston Android 2561 + //* onbarod led is PORTE4 + #define PROGLED_PORT PORTA + #define PROGLED_DDR DDRA + #define PROGLED_PIN PINA3 +#elif defined( _BOARD_MEGA16 ) + //* onbarod led is PORTA7 + #define PROGLED_PORT PORTA + #define PROGLED_DDR DDRA + #define PROGLED_PIN PINA7 + #define UART_BAUDRATE_DOUBLE_SPEED 0 + +#elif defined( _BOARD_BAHBOT_ ) + //* dosent have an onboard LED but this is what will probably be added to this port + #define PROGLED_PORT PORTB + #define PROGLED_DDR DDRB + #define PROGLED_PIN PINB0 + +#elif defined( _BOARD_ROBOTX_ ) + #define PROGLED_PORT PORTB + #define PROGLED_DDR DDRB + #define PROGLED_PIN PINB6 +#elif defined( _BOARD_CUSTOM1284_BLINK_B0_ ) + #define PROGLED_PORT PORTB + #define PROGLED_DDR DDRB + #define PROGLED_PIN PINB0 +#elif defined( _BOARD_CUSTOM1284_ ) + #define PROGLED_PORT PORTD + #define PROGLED_DDR DDRD + #define PROGLED_PIN PIND5 +#elif defined( _AVRLIP_ ) + #define PROGLED_PORT PORTB + #define PROGLED_DDR DDRB + #define PROGLED_PIN PINB5 +#elif defined( _BOARD_STK500_ ) + #define PROGLED_PORT PORTA + #define PROGLED_DDR DDRA + #define PROGLED_PIN PINA7 +#elif defined( _BOARD_STK502_ ) + #define PROGLED_PORT PORTB + #define PROGLED_DDR DDRB + #define PROGLED_PIN PINB5 +#elif defined( _BOARD_STK525_ ) + #define PROGLED_PORT PORTB + #define PROGLED_DDR DDRB + #define PROGLED_PIN PINB7 +#else + #define PROGLED_PORT PORTG + #define PROGLED_DDR DDRG + #define PROGLED_PIN PING2 +#endif + + + +/* + * define CPU frequency in Mhz here if not defined in Makefile + */ +#ifndef F_CPU + #define F_CPU 16000000UL +#endif + +#define _BLINK_LOOP_COUNT_ (F_CPU / 2250) +/* + * UART Baudrate, AVRStudio AVRISP only accepts 115200 bps + */ + +#ifndef BAUDRATE + #define BAUDRATE 115200 +#endif + +/* + * Enable (1) or disable (0) USART double speed operation + */ +#ifndef UART_BAUDRATE_DOUBLE_SPEED + #if defined (__AVR_ATmega32__) + #define UART_BAUDRATE_DOUBLE_SPEED 0 + #else + #define UART_BAUDRATE_DOUBLE_SPEED 1 + #endif +#endif + +/* + * HW and SW version, reported to AVRISP, must match version of AVRStudio + */ +#define CONFIG_PARAM_BUILD_NUMBER_LOW 0 +#define CONFIG_PARAM_BUILD_NUMBER_HIGH 0 +#define CONFIG_PARAM_HW_VER 0x0F +#define CONFIG_PARAM_SW_MAJOR 2 +#define CONFIG_PARAM_SW_MINOR 0x0A + +/* + * Calculate the address where the bootloader starts from FLASHEND and BOOTSIZE + * (adjust BOOTSIZE below and BOOTLOADER_ADDRESS in Makefile if you want to change the size of the bootloader) + */ +//#define BOOTSIZE 1024 +#if FLASHEND > 0x0F000 + #define BOOTSIZE 8192 +#else + #define BOOTSIZE 2048 +#endif + +#define APP_END (FLASHEND -(2*BOOTSIZE) + 1) + +/* + * Signature bytes are not available in avr-gcc io_xxx.h + */ +#if defined (__AVR_ATmega8__) + #define SIGNATURE_BYTES 0x1E9307 +#elif defined (__AVR_ATmega16__) + #define SIGNATURE_BYTES 0x1E9403 +#elif defined (__AVR_ATmega32__) + #define SIGNATURE_BYTES 0x1E9502 +#elif defined (__AVR_ATmega8515__) + #define SIGNATURE_BYTES 0x1E9306 +#elif defined (__AVR_ATmega8535__) + #define SIGNATURE_BYTES 0x1E9308 +#elif defined (__AVR_ATmega162__) + #define SIGNATURE_BYTES 0x1E9404 +#elif defined (__AVR_ATmega128__) + #define SIGNATURE_BYTES 0x1E9702 +#elif defined (__AVR_ATmega1280__) + #define SIGNATURE_BYTES 0x1E9703 +#elif defined (__AVR_ATmega2560__) + #define SIGNATURE_BYTES 0x1E9801 +#elif defined (__AVR_ATmega2561__) + #define SIGNATURE_BYTES 0x1e9802 +#elif defined (__AVR_ATmega1284P__) + #define SIGNATURE_BYTES 0x1e9705 +#elif defined (__AVR_ATmega640__) + #define SIGNATURE_BYTES 0x1e9608 +#elif defined (__AVR_ATmega64__) + #define SIGNATURE_BYTES 0x1E9602 +#elif defined (__AVR_ATmega169__) + #define SIGNATURE_BYTES 0x1e9405 +#elif defined (__AVR_AT90USB1287__) + #define SIGNATURE_BYTES 0x1e9782 +#else + #error "no signature definition for MCU available" +#endif + + +#if defined(_BOARD_ROBOTX_) || defined(__AVR_AT90USB1287__) || defined(__AVR_AT90USB1286__) + #define UART_BAUD_RATE_LOW UBRR1L + #define UART_STATUS_REG UCSR1A + #define UART_CONTROL_REG UCSR1B + #define UART_ENABLE_TRANSMITTER TXEN1 + #define UART_ENABLE_RECEIVER RXEN1 + #define UART_TRANSMIT_COMPLETE TXC1 + #define UART_RECEIVE_COMPLETE RXC1 + #define UART_DATA_REG UDR1 + #define UART_DOUBLE_SPEED U2X1 + +#elif defined(__AVR_ATmega8__) || defined(__AVR_ATmega16__) || defined(__AVR_ATmega32__) \ + || defined(__AVR_ATmega8515__) || defined(__AVR_ATmega8535__) + /* ATMega8 with one USART */ + #define UART_BAUD_RATE_LOW UBRRL + #define UART_STATUS_REG UCSRA + #define UART_CONTROL_REG UCSRB + #define UART_ENABLE_TRANSMITTER TXEN + #define UART_ENABLE_RECEIVER RXEN + #define UART_TRANSMIT_COMPLETE TXC + #define UART_RECEIVE_COMPLETE RXC + #define UART_DATA_REG UDR + #define UART_DOUBLE_SPEED U2X + +#elif defined(__AVR_ATmega64__) || defined(__AVR_ATmega128__) || defined(__AVR_ATmega162__) \ + || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega2561__) + /* ATMega with two USART, use UART0 */ + #define UART_BAUD_RATE_LOW UBRR0L + #define UART_STATUS_REG UCSR0A + #define UART_CONTROL_REG UCSR0B + #define UART_ENABLE_TRANSMITTER TXEN0 + #define UART_ENABLE_RECEIVER RXEN0 + #define UART_TRANSMIT_COMPLETE TXC0 + #define UART_RECEIVE_COMPLETE RXC0 + #define UART_DATA_REG UDR0 + #define UART_DOUBLE_SPEED U2X0 +#elif defined(UBRR0L) && defined(UCSR0A) && defined(TXEN0) + /* ATMega with two USART, use UART0 */ + #define UART_BAUD_RATE_LOW UBRR0L + #define UART_STATUS_REG UCSR0A + #define UART_CONTROL_REG UCSR0B + #define UART_ENABLE_TRANSMITTER TXEN0 + #define UART_ENABLE_RECEIVER RXEN0 + #define UART_TRANSMIT_COMPLETE TXC0 + #define UART_RECEIVE_COMPLETE RXC0 + #define UART_DATA_REG UDR0 + #define UART_DOUBLE_SPEED U2X0 +#elif defined(UBRRL) && defined(UCSRA) && defined(UCSRB) && defined(TXEN) && defined(RXEN) + //* catch all + #define UART_BAUD_RATE_LOW UBRRL + #define UART_STATUS_REG UCSRA + #define UART_CONTROL_REG UCSRB + #define UART_ENABLE_TRANSMITTER TXEN + #define UART_ENABLE_RECEIVER RXEN + #define UART_TRANSMIT_COMPLETE TXC + #define UART_RECEIVE_COMPLETE RXC + #define UART_DATA_REG UDR + #define UART_DOUBLE_SPEED U2X +#else + #error "no UART definition for MCU available" +#endif + + + +/* + * Macro to calculate UBBR from XTAL and baudrate + */ +#if defined(__AVR_ATmega32__) && UART_BAUDRATE_DOUBLE_SPEED + #define UART_BAUD_SELECT(baudRate,xtalCpu) ((xtalCpu / 4 / baudRate - 1) / 2) +#elif defined(__AVR_ATmega32__) + #define UART_BAUD_SELECT(baudRate,xtalCpu) ((xtalCpu / 8 / baudRate - 1) / 2) +#elif UART_BAUDRATE_DOUBLE_SPEED + #define UART_BAUD_SELECT(baudRate,xtalCpu) (((float)(xtalCpu))/(((float)(baudRate))*8.0)-1.0+0.5) +#else + #define UART_BAUD_SELECT(baudRate,xtalCpu) (((float)(xtalCpu))/(((float)(baudRate))*16.0)-1.0+0.5) +#endif + + +/* + * States used in the receive state machine + */ +#define ST_START 0 +#define ST_GET_SEQ_NUM 1 +#define ST_MSG_SIZE_1 2 +#define ST_MSG_SIZE_2 3 +#define ST_GET_TOKEN 4 +#define ST_GET_DATA 5 +#define ST_GET_CHECK 6 +#define ST_PROCESS 7 + +/* + * use 16bit address variable for ATmegas with <= 64K flash + */ +#if defined(RAMPZ) + typedef uint32_t address_t; +#else + typedef uint16_t address_t; +#endif + +/* + * function prototypes + */ +static void sendchar(char c); +static unsigned char recchar(void); + +/* + * since this bootloader is not linked against the avr-gcc crt1 functions, + * to reduce the code size, we need to provide our own initialization + */ +void __jumpMain (void) __attribute__ ((naked)) __attribute__ ((section (".init9"))); +#include + +//#define SPH_REG 0x3E +//#define SPL_REG 0x3D + +//***************************************************************************** +void __jumpMain(void) +{ +//* July 17, 2010 Added stack pointer initialzation +//* the first line did not do the job on the ATmega128 + + asm volatile ( ".set __stack, %0" :: "i" (RAMEND) ); + +//* set stack pointer to top of RAM + + asm volatile ( "ldi 16, %0" :: "i" (RAMEND >> 8) ); + asm volatile ( "out %0,16" :: "i" (AVR_STACK_POINTER_HI_ADDR) ); + + asm volatile ( "ldi 16, %0" :: "i" (RAMEND & 0x0ff) ); + asm volatile ( "out %0,16" :: "i" (AVR_STACK_POINTER_LO_ADDR) ); + + asm volatile ( "clr __zero_reg__" ); // GCC depends on register r1 set to 0 + asm volatile ( "out %0, __zero_reg__" :: "I" (_SFR_IO_ADDR(SREG)) ); // set SREG to 0 + asm volatile ( "jmp main"); // jump to main() +} + + +//***************************************************************************** +void delay_ms(unsigned int timedelay) +{ + unsigned int i; + for (i=0;i> 1) +//***************************************************************************** +static unsigned char recchar_timeout(void) +{ +uint32_t count = 0; + + while (!(UART_STATUS_REG & (1 << UART_RECEIVE_COMPLETE))) + { + // wait for data + count++; + if (count > MAX_TIME_COUNT) + { + unsigned int data; + #if (FLASHEND > 0x10000) + data = pgm_read_word_far(0); //* get the first word of the user program + #else + data = pgm_read_word_near(0); //* get the first word of the user program + #endif + if (data != 0xffff) //* make sure its valid before jumping to it. + { + asm volatile( + "clr r30 \n\t" + "clr r31 \n\t" + "ijmp \n\t" + ); + } + count = 0; + } + } + return UART_DATA_REG; +} + +//* for watch dog timer startup +void (*app_start)(void) = 0x0000; + + +//***************************************************************************** +int main(void) +{ + address_t address = 0; + address_t eraseAddress = 0; + unsigned char msgParseState; + unsigned int ii = 0; + unsigned char checksum = 0; + unsigned char seqNum = 0; + unsigned int msgLength = 0; + unsigned char msgBuffer[285]; + unsigned char c, *p; + unsigned char isLeave = 0; + + unsigned long boot_timeout; + unsigned long boot_timer; + unsigned int boot_state; +#ifdef ENABLE_MONITOR + unsigned int exPointCntr = 0; + unsigned int rcvdCharCntr = 0; +#endif + + //* some chips dont set the stack properly + asm volatile ( ".set __stack, %0" :: "i" (RAMEND) ); + asm volatile ( "ldi 16, %0" :: "i" (RAMEND >> 8) ); + asm volatile ( "out %0,16" :: "i" (AVR_STACK_POINTER_HI_ADDR) ); + asm volatile ( "ldi 16, %0" :: "i" (RAMEND & 0x0ff) ); + asm volatile ( "out %0,16" :: "i" (AVR_STACK_POINTER_LO_ADDR) ); + +#ifdef _FIX_ISSUE_181_ + //************************************************************************ + //* Dec 29, 2011 Issue #181, added watch dog timmer support + //* handle the watch dog timer + uint8_t mcuStatusReg; + mcuStatusReg = MCUSR; + + __asm__ __volatile__ ("cli"); + __asm__ __volatile__ ("wdr"); + MCUSR = 0; + WDTCSR |= _BV(WDCE) | _BV(WDE); + WDTCSR = 0; + __asm__ __volatile__ ("sei"); + // check if WDT generated the reset, if so, go straight to app + if (mcuStatusReg & _BV(WDRF)) + { + app_start(); + } + //************************************************************************ +#endif + + + boot_timer = 0; + boot_state = 0; + +#ifdef BLINK_LED_WHILE_WAITING +// boot_timeout = 90000; //* should be about 4 seconds +// boot_timeout = 170000; + boot_timeout = 20000; //* should be about 1 second +#else + boot_timeout = 3500000; // 7 seconds , approx 2us per step when optimize "s" +#endif + /* + * Branch to bootloader or application code ? + */ + +#ifndef REMOVE_BOOTLOADER_LED + /* PROG_PIN pulled low, indicate with LED that bootloader is active */ + PROGLED_DDR |= (1< boot_timeout) + { + boot_state = 1; // (after ++ -> boot_state=2 bootloader timeout, jump to main 0x00000 ) + } + #ifdef BLINK_LED_WHILE_WAITING + if ((boot_timer % _BLINK_LOOP_COUNT_) == 0) + { + //* toggle the LED + PROGLED_PORT ^= (1<> 16) & 0x000000FF; + } + else if ( signatureIndex == 1 ) + { + answerByte = (SIGNATURE_BYTES >> 8) & 0x000000FF; + } + else + { + answerByte = SIGNATURE_BYTES & 0x000000FF; + } + } + else if ( msgBuffer[4] & 0x50 ) + { + //* Issue 544: stk500v2 bootloader doesn't support reading fuses + //* I cant find the docs that say what these are supposed to be but this was figured out by trial and error + // answerByte = boot_lock_fuse_bits_get(GET_LOW_FUSE_BITS); + // answerByte = boot_lock_fuse_bits_get(GET_HIGH_FUSE_BITS); + // answerByte = boot_lock_fuse_bits_get(GET_EXTENDED_FUSE_BITS); + if (msgBuffer[4] == 0x50) + { + answerByte = boot_lock_fuse_bits_get(GET_LOW_FUSE_BITS); + } + else if (msgBuffer[4] == 0x58) + { + answerByte = boot_lock_fuse_bits_get(GET_HIGH_FUSE_BITS); + } + else + { + answerByte = 0; + } + } + else + { + answerByte = 0; // for all others command are not implemented, return dummy value for AVRDUDE happy + } + if ( !flag ) + { + msgLength = 7; + msgBuffer[1] = STATUS_CMD_OK; + msgBuffer[2] = 0; + msgBuffer[3] = msgBuffer[4]; + msgBuffer[4] = 0; + msgBuffer[5] = answerByte; + msgBuffer[6] = STATUS_CMD_OK; + } + } + break; + #endif + case CMD_SIGN_ON: + msgLength = 11; + msgBuffer[1] = STATUS_CMD_OK; + msgBuffer[2] = 8; + msgBuffer[3] = 'A'; + msgBuffer[4] = 'V'; + msgBuffer[5] = 'R'; + msgBuffer[6] = 'I'; + msgBuffer[7] = 'S'; + msgBuffer[8] = 'P'; + msgBuffer[9] = '_'; + msgBuffer[10] = '2'; + break; + + case CMD_GET_PARAMETER: + { + unsigned char value; + + switch(msgBuffer[1]) + { + case PARAM_BUILD_NUMBER_LOW: + value = CONFIG_PARAM_BUILD_NUMBER_LOW; + break; + case PARAM_BUILD_NUMBER_HIGH: + value = CONFIG_PARAM_BUILD_NUMBER_HIGH; + break; + case PARAM_HW_VER: + value = CONFIG_PARAM_HW_VER; + break; + case PARAM_SW_MAJOR: + value = CONFIG_PARAM_SW_MAJOR; + break; + case PARAM_SW_MINOR: + value = CONFIG_PARAM_SW_MINOR; + break; + default: + value = 0; + break; + } + msgLength = 3; + msgBuffer[1] = STATUS_CMD_OK; + msgBuffer[2] = value; + } + break; + + case CMD_LEAVE_PROGMODE_ISP: + isLeave = 1; + //* fall thru + + case CMD_SET_PARAMETER: + case CMD_ENTER_PROGMODE_ISP: + msgLength = 2; + msgBuffer[1] = STATUS_CMD_OK; + break; + + case CMD_READ_SIGNATURE_ISP: + { + unsigned char signatureIndex = msgBuffer[4]; + unsigned char signature; + + if ( signatureIndex == 0 ) + signature = (SIGNATURE_BYTES >>16) & 0x000000FF; + else if ( signatureIndex == 1 ) + signature = (SIGNATURE_BYTES >> 8) & 0x000000FF; + else + signature = SIGNATURE_BYTES & 0x000000FF; + + msgLength = 4; + msgBuffer[1] = STATUS_CMD_OK; + msgBuffer[2] = signature; + msgBuffer[3] = STATUS_CMD_OK; + } + break; + + case CMD_READ_LOCK_ISP: + msgLength = 4; + msgBuffer[1] = STATUS_CMD_OK; + msgBuffer[2] = boot_lock_fuse_bits_get( GET_LOCK_BITS ); + msgBuffer[3] = STATUS_CMD_OK; + break; + + case CMD_READ_FUSE_ISP: + { + unsigned char fuseBits; + + if ( msgBuffer[2] == 0x50 ) + { + if ( msgBuffer[3] == 0x08 ) + fuseBits = boot_lock_fuse_bits_get( GET_EXTENDED_FUSE_BITS ); + else + fuseBits = boot_lock_fuse_bits_get( GET_LOW_FUSE_BITS ); + } + else + { + fuseBits = boot_lock_fuse_bits_get( GET_HIGH_FUSE_BITS ); + } + msgLength = 4; + msgBuffer[1] = STATUS_CMD_OK; + msgBuffer[2] = fuseBits; + msgBuffer[3] = STATUS_CMD_OK; + } + break; + + #ifndef REMOVE_PROGRAM_LOCK_BIT_SUPPORT + case CMD_PROGRAM_LOCK_ISP: + { + unsigned char lockBits = msgBuffer[4]; + + lockBits = (~lockBits) & 0x3C; // mask BLBxx bits + boot_lock_bits_set(lockBits); // and program it + boot_spm_busy_wait(); + + msgLength = 3; + msgBuffer[1] = STATUS_CMD_OK; + msgBuffer[2] = STATUS_CMD_OK; + } + break; + #endif + case CMD_CHIP_ERASE_ISP: + eraseAddress = 0; + msgLength = 2; + // msgBuffer[1] = STATUS_CMD_OK; + msgBuffer[1] = STATUS_CMD_FAILED; //* isue 543, return FAILED instead of OK + break; + + case CMD_LOAD_ADDRESS: + #if defined(RAMPZ) + address = ( ((address_t)(msgBuffer[1])<<24)|((address_t)(msgBuffer[2])<<16)|((address_t)(msgBuffer[3])<<8)|(msgBuffer[4]) )<<1; + #else + address = ( ((msgBuffer[3])<<8)|(msgBuffer[4]) )<<1; //convert word to byte address + #endif + msgLength = 2; + msgBuffer[1] = STATUS_CMD_OK; + break; + + case CMD_PROGRAM_FLASH_ISP: + case CMD_PROGRAM_EEPROM_ISP: + { + unsigned int size = ((msgBuffer[1])<<8) | msgBuffer[2]; + unsigned char *p = msgBuffer+10; + unsigned int data; + unsigned char highByte, lowByte; + address_t tempaddress = address; + + + if ( msgBuffer[0] == CMD_PROGRAM_FLASH_ISP ) + { + // erase only main section (bootloader protection) + if (eraseAddress < APP_END ) + { + boot_page_erase(eraseAddress); // Perform page erase + boot_spm_busy_wait(); // Wait until the memory is erased. + eraseAddress += SPM_PAGESIZE; // point to next page to be erase + } + + /* Write FLASH */ + do { + lowByte = *p++; + highByte = *p++; + + data = (highByte << 8) | lowByte; + boot_page_fill(address,data); + + address = address + 2; // Select next word in memory + size -= 2; // Reduce number of bytes to write by two + } while (size); // Loop until all bytes written + + boot_page_write(tempaddress); + boot_spm_busy_wait(); + boot_rww_enable(); // Re-enable the RWW section + } + else + { + //* issue 543, this should work, It has not been tested. + uint16_t ii = address >> 1; + /* write EEPROM */ + while (size) { + eeprom_write_byte((uint8_t*)ii, *p++); + address+=2; // Select next EEPROM byte + ii++; + size--; + } + } + msgLength = 2; + msgBuffer[1] = STATUS_CMD_OK; + } + break; + + case CMD_READ_FLASH_ISP: + case CMD_READ_EEPROM_ISP: + { + unsigned int size = ((msgBuffer[1])<<8) | msgBuffer[2]; + unsigned char *p = msgBuffer+1; + msgLength = size+3; + + *p++ = STATUS_CMD_OK; + if (msgBuffer[0] == CMD_READ_FLASH_ISP ) + { + unsigned int data; + + // Read FLASH + do { + //#if defined(RAMPZ) + #if (FLASHEND > 0x10000) + data = pgm_read_word_far(address); + #else + data = pgm_read_word_near(address); + #endif + *p++ = (unsigned char)data; //LSB + *p++ = (unsigned char)(data >> 8); //MSB + address += 2; // Select next word in memory + size -= 2; + }while (size); + } + else + { + /* Read EEPROM */ + do { + EEARL = address; // Setup EEPROM address + EEARH = ((address >> 8)); + address++; // Select next EEPROM byte + EECR |= (1<>8)&0xFF); + sendchar(c); + checksum ^= c; + + c = msgLength&0x00FF; + sendchar(c); + checksum ^= c; + + sendchar(TOKEN); + checksum ^= TOKEN; + + p = msgBuffer; + while ( msgLength ) + { + c = *p++; + sendchar(c); + checksum ^=c; + msgLength--; + } + sendchar(checksum); + seqNum++; + + #ifndef REMOVE_BOOTLOADER_LED + //* toggle the LED + PROGLED_PORT ^= (1< + + +base address = f000 +avrdude: Device signature = 0x1e9703 +avrdude: safemode: lfuse reads as FF +avrdude: safemode: hfuse reads as D8 +avrdude: safemode: efuse reads as F5 +avrdude> +*/ + +//************************************************************************ +#ifdef ENABLE_MONITOR +#include + +unsigned long gRamIndex; +unsigned long gFlashIndex; +unsigned long gEepromIndex; + + +#define true 1 +#define false 0 + +#include "avr_cpunames.h" + +#ifndef _AVR_CPU_NAME_ + #error cpu name not defined +#endif + +#ifdef _VECTORS_SIZE + #define kInterruptVectorCount (_VECTORS_SIZE / 4) +#else + #define kInterruptVectorCount 23 +#endif + + +void PrintDecInt(int theNumber, int digitCnt); + +#ifdef _AVR_CPU_NAME_ + const char gTextMsg_CPU_Name[] PROGMEM = _AVR_CPU_NAME_; +#else + const char gTextMsg_CPU_Name[] PROGMEM = "UNKNOWN"; +#endif + + const char gTextMsg_Explorer[] PROGMEM = "Arduino explorer stk500V2 by MLS"; + const char gTextMsg_Prompt[] PROGMEM = "Bootloader>"; + const char gTextMsg_HUH[] PROGMEM = "Huh?"; + const char gTextMsg_COMPILED_ON[] PROGMEM = "Compiled on = "; + const char gTextMsg_CPU_Type[] PROGMEM = "CPU Type = "; + const char gTextMsg_AVR_ARCH[] PROGMEM = "__AVR_ARCH__= "; + const char gTextMsg_AVR_LIBC[] PROGMEM = "AVR LibC Ver= "; + const char gTextMsg_GCC_VERSION[] PROGMEM = "GCC Version = "; + const char gTextMsg_CPU_SIGNATURE[] PROGMEM = "CPU ID = "; + const char gTextMsg_FUSE_BYTE_LOW[] PROGMEM = "Low fuse = "; + const char gTextMsg_FUSE_BYTE_HIGH[] PROGMEM = "High fuse = "; + const char gTextMsg_FUSE_BYTE_EXT[] PROGMEM = "Ext fuse = "; + const char gTextMsg_FUSE_BYTE_LOCK[] PROGMEM = "Lock fuse = "; + const char gTextMsg_GCC_DATE_STR[] PROGMEM = __DATE__; + const char gTextMsg_AVR_LIBC_VER_STR[] PROGMEM = __AVR_LIBC_VERSION_STRING__; + const char gTextMsg_GCC_VERSION_STR[] PROGMEM = __VERSION__; + const char gTextMsg_VECTOR_HEADER[] PROGMEM = "V# ADDR op code instruction addr Interrupt"; + const char gTextMsg_noVector[] PROGMEM = "no vector"; + const char gTextMsg_rjmp[] PROGMEM = "rjmp "; + const char gTextMsg_jmp[] PROGMEM = "jmp "; + const char gTextMsg_WHAT_PORT[] PROGMEM = "What port:"; + const char gTextMsg_PortNotSupported[] PROGMEM = "Port not supported"; + const char gTextMsg_MustBeLetter[] PROGMEM = "Must be a letter"; + const char gTextMsg_SPACE[] PROGMEM = " "; + const char gTextMsg_WriteToEEprom[] PROGMEM = "Writting EE"; + const char gTextMsg_ReadingEEprom[] PROGMEM = "Reading EE"; + const char gTextMsg_EEPROMerrorCnt[] PROGMEM = "EE err cnt="; + const char gTextMsg_PORT[] PROGMEM = "PORT"; + + +//************************************************************************ +//* Help messages + const char gTextMsg_HELP_MSG_0[] PROGMEM = "0=Zero addr"; + const char gTextMsg_HELP_MSG_QM[] PROGMEM = "?=CPU stats"; + const char gTextMsg_HELP_MSG_AT[] PROGMEM = "@=EEPROM test"; + const char gTextMsg_HELP_MSG_B[] PROGMEM = "B=Blink LED"; + const char gTextMsg_HELP_MSG_E[] PROGMEM = "E=Dump EEPROM"; + const char gTextMsg_HELP_MSG_F[] PROGMEM = "F=Dump FLASH"; + const char gTextMsg_HELP_MSG_H[] PROGMEM = "H=Help"; + const char gTextMsg_HELP_MSG_L[] PROGMEM = "L=List I/O Ports"; +// const char gTextMsg_HELP_MSG_Q[] PROGMEM = "Q=Quit & jump to user pgm"; + const char gTextMsg_HELP_MSG_Q[] PROGMEM = "Q=Quit"; + const char gTextMsg_HELP_MSG_R[] PROGMEM = "R=Dump RAM"; + const char gTextMsg_HELP_MSG_V[] PROGMEM = "V=show interrupt Vectors"; + const char gTextMsg_HELP_MSG_Y[] PROGMEM = "Y=Port blink"; + + const char gTextMsg_END[] PROGMEM = "*"; + + +//************************************************************************ +void PrintFromPROGMEM(const void *dataPtr, unsigned char offset) +{ +char theChar; + + dataPtr += offset; + + do { + #if (FLASHEND > 0x10000) + theChar = pgm_read_byte_far((uint16_t)dataPtr++); + #else + theChar = pgm_read_byte_near((uint16_t)dataPtr++); + #endif + if (theChar != 0) + { + sendchar(theChar); + } + } while (theChar != 0); +} + +//************************************************************************ +void PrintNewLine(void) +{ + sendchar(0x0d); + sendchar(0x0a); +} + + +//************************************************************************ +void PrintFromPROGMEMln(const void *dataPtr, unsigned char offset) +{ + PrintFromPROGMEM(dataPtr, offset); + + PrintNewLine(); +} + + +//************************************************************************ +void PrintString(char *textString) +{ +char theChar; +int ii; + + theChar = 1; + ii = 0; + while (theChar != 0) + { + theChar = textString[ii]; + if (theChar != 0) + { + sendchar(theChar); + } + ii++; + } +} + +//************************************************************************ +void PrintHexByte(unsigned char theByte) +{ +char theChar; + + theChar = 0x30 + ((theByte >> 4) & 0x0f); + if (theChar > 0x39) + { + theChar += 7; + } + sendchar(theChar ); + + theChar = 0x30 + (theByte & 0x0f); + if (theChar > 0x39) + { + theChar += 7; + } + sendchar(theChar ); +} + +//************************************************************************ +void PrintDecInt(int theNumber, int digitCnt) +{ +int theChar; +int myNumber; + + myNumber = theNumber; + + if ((myNumber > 100) || (digitCnt >= 3)) + { + theChar = 0x30 + myNumber / 100; + sendchar(theChar ); + } + + if ((myNumber > 10) || (digitCnt >= 2)) + { + theChar = 0x30 + ((myNumber % 100) / 10 ); + sendchar(theChar ); + } + theChar = 0x30 + (myNumber % 10); + sendchar(theChar ); +} + + + + +//************************************************************************ +static void PrintCPUstats(void) +{ +unsigned char fuseByte; + + PrintFromPROGMEMln(gTextMsg_Explorer, 0); + + PrintFromPROGMEM(gTextMsg_COMPILED_ON, 0); + PrintFromPROGMEMln(gTextMsg_GCC_DATE_STR, 0); + + PrintFromPROGMEM(gTextMsg_CPU_Type, 0); + PrintFromPROGMEMln(gTextMsg_CPU_Name, 0); + + PrintFromPROGMEM(gTextMsg_AVR_ARCH, 0); + PrintDecInt(__AVR_ARCH__, 1); + PrintNewLine(); + + PrintFromPROGMEM(gTextMsg_GCC_VERSION, 0); + PrintFromPROGMEMln(gTextMsg_GCC_VERSION_STR, 0); + + //* these can be found in avr/version.h + PrintFromPROGMEM(gTextMsg_AVR_LIBC, 0); + PrintFromPROGMEMln(gTextMsg_AVR_LIBC_VER_STR, 0); + +#if defined(SIGNATURE_0) + PrintFromPROGMEM(gTextMsg_CPU_SIGNATURE, 0); + //* these can be found in avr/iomxxx.h + PrintHexByte(SIGNATURE_0); + PrintHexByte(SIGNATURE_1); + PrintHexByte(SIGNATURE_2); + PrintNewLine(); +#endif + + +#if defined(GET_LOW_FUSE_BITS) + //* fuse settings + PrintFromPROGMEM(gTextMsg_FUSE_BYTE_LOW, 0); + fuseByte = boot_lock_fuse_bits_get(GET_LOW_FUSE_BITS); + PrintHexByte(fuseByte); + PrintNewLine(); + + PrintFromPROGMEM(gTextMsg_FUSE_BYTE_HIGH, 0); + fuseByte = boot_lock_fuse_bits_get(GET_HIGH_FUSE_BITS); + PrintHexByte(fuseByte); + PrintNewLine(); + + PrintFromPROGMEM(gTextMsg_FUSE_BYTE_EXT, 0); + fuseByte = boot_lock_fuse_bits_get(GET_EXTENDED_FUSE_BITS); + PrintHexByte(fuseByte); + PrintNewLine(); + + PrintFromPROGMEM(gTextMsg_FUSE_BYTE_LOCK, 0); + fuseByte = boot_lock_fuse_bits_get(GET_LOCK_BITS); + PrintHexByte(fuseByte); + PrintNewLine(); + +#endif + +} + + +//************************************************************************ +static void BlinkLED(void) +{ + PROGLED_DDR |= (1< 0) + { + if (myAddressPointer > 0x10000) + { + PrintHexByte((myAddressPointer >> 16) & 0x00ff); + } + PrintHexByte((myAddressPointer >> 8) & 0x00ff); + PrintHexByte(myAddressPointer & 0x00ff); + sendchar(0x20); + sendchar('-'); + sendchar(0x20); + + asciiDump[0] = 0; + for (ii=0; ii<16; ii++) + { + switch(dumpWhat) + { + case kDUMP_FLASH: + #if (FLASHEND > 0x10000) + theValue = pgm_read_byte_far(myAddressPointer); + #else + theValue = pgm_read_byte_near(myAddressPointer); + #endif + break; + + case kDUMP_EEPROM: + theValue = eeprom_read_byte((uint8_t *)(uint16_t)myAddressPointer); + break; + + case kDUMP_RAM: + theValue = ramPtr[myAddressPointer]; + break; + + } + PrintHexByte(theValue); + sendchar(0x20); + if ((theValue >= 0x20) && (theValue < 0x7f)) + { + asciiDump[ii % 16] = theValue; + } + else + { + asciiDump[ii % 16] = '.'; + } + + myAddressPointer++; + } + asciiDump[16] = 0; + PrintString(asciiDump); + PrintNewLine(); + + numRows--; + } +} + + + +//************************************************************************ +//* returns amount of extended memory +static void EEPROMtest(void) +{ +int ii; +char theChar; +char theEEPROMchar; +int errorCount; + + PrintFromPROGMEMln(gTextMsg_WriteToEEprom, 0); + PrintNewLine(); + ii = 0; +#if (FLASHEND > 0x10000) + while (((theChar = pgm_read_byte_far(((uint16_t)gTextMsg_Explorer) + ii)) != '*') && (ii < 512)) +#else + while (((theChar = pgm_read_byte_near(((uint16_t)gTextMsg_Explorer) + ii)) != '*') && (ii < 512)) +#endif + { + eeprom_write_byte((uint8_t *)ii, theChar); + if (theChar == 0) + { + PrintFromPROGMEM(gTextMsg_SPACE, 0); + } + else + { + sendchar(theChar); + } + ii++; + } + + //* no go back through and test + PrintNewLine(); + PrintNewLine(); + PrintFromPROGMEMln(gTextMsg_ReadingEEprom, 0); + PrintNewLine(); + errorCount = 0; + ii = 0; +#if (FLASHEND > 0x10000) + while (((theChar = pgm_read_byte_far((uint16_t)gTextMsg_Explorer + ii)) != '*') && (ii < 512)) +#else + while (((theChar = pgm_read_byte_near((uint16_t)gTextMsg_Explorer + ii)) != '*') && (ii < 512)) +#endif + { + theEEPROMchar = eeprom_read_byte((uint8_t *)ii); + if (theEEPROMchar == 0) + { + PrintFromPROGMEM(gTextMsg_SPACE, 0); + } + else + { + sendchar(theEEPROMchar); + } + if (theEEPROMchar != theChar) + { + errorCount++; + } + ii++; + } + PrintNewLine(); + PrintNewLine(); + PrintFromPROGMEM(gTextMsg_EEPROMerrorCnt, 0); + PrintDecInt(errorCount, 1); + PrintNewLine(); + PrintNewLine(); + + gEepromIndex = 0; //* set index back to zero for next eeprom dump + +} + + + +#if (FLASHEND > 0x08000) +//* this includes the interrupt names for the monitor portion. There is no longer enough +//* memory to include this +// #include "avrinterruptnames.h" +// #ifndef _INTERRUPT_NAMES_DEFINED_ +// #warning Interrupt vectors not defined +// #endif +#endif + +//************************************************************************ +static void VectorDisplay(void) +{ +unsigned long byte1; +unsigned long byte2; +unsigned long byte3; +unsigned long byte4; +unsigned long word1; +unsigned long word2; +int vectorIndex; +unsigned long myMemoryPtr; +unsigned long wordMemoryAddress; +unsigned long realitiveAddr; +unsigned long myFullAddress; +unsigned long absoluteAddr; +#if defined(_INTERRUPT_NAMES_DEFINED_) + long stringPointer; +#endif + + myMemoryPtr = 0; + vectorIndex = 0; + PrintFromPROGMEMln(gTextMsg_CPU_Name, 0); + PrintFromPROGMEMln(gTextMsg_VECTOR_HEADER, 0); + // V# ADDR op code + // 1 - 0000 = C3 BB 00 00 rjmp 03BB >000776 RESET + while (vectorIndex < kInterruptVectorCount) + { + wordMemoryAddress = myMemoryPtr / 2; + // 01 - 0000 = 12 34 + PrintDecInt(vectorIndex + 1, 2); + sendchar(0x20); + sendchar('-'); + sendchar(0x20); + PrintHexByte((wordMemoryAddress >> 8) & 0x00ff); + PrintHexByte((wordMemoryAddress) & 0x00ff); + sendchar(0x20); + sendchar('='); + sendchar(0x20); + + + //* the AVR is LITTLE ENDIAN, swap the byte order + #if (FLASHEND > 0x10000) + byte1 = pgm_read_byte_far(myMemoryPtr++); + byte2 = pgm_read_byte_far(myMemoryPtr++); + byte3 = pgm_read_byte_far(myMemoryPtr++); + byte4 = pgm_read_byte_far(myMemoryPtr++); + #else + byte1 = pgm_read_byte_near(myMemoryPtr++); + byte2 = pgm_read_byte_near(myMemoryPtr++); + byte3 = pgm_read_byte_near(myMemoryPtr++); + byte4 = pgm_read_byte_near(myMemoryPtr++); + #endif + word1 = (byte2 << 8) + byte1; + word2 = (byte4 << 8) + byte3; + + + PrintHexByte(byte2); + sendchar(0x20); + PrintHexByte(byte1); + sendchar(0x20); + PrintHexByte(byte4); + sendchar(0x20); + PrintHexByte(byte3); + sendchar(0x20); + + if (word1 == 0xffff) + { + PrintFromPROGMEM(gTextMsg_noVector, 0); + } + else if ((word1 & 0xc000) == 0xc000) + { + //* rjmp instruction + realitiveAddr = word1 & 0x3FFF; + absoluteAddr = wordMemoryAddress + realitiveAddr; //* add the offset to the current address + absoluteAddr = absoluteAddr << 1; //* multiply by 2 for byte address + + PrintFromPROGMEM(gTextMsg_rjmp, 0); + PrintHexByte((realitiveAddr >> 8) & 0x00ff); + PrintHexByte((realitiveAddr) & 0x00ff); + sendchar(0x20); + sendchar('>'); + PrintHexByte((absoluteAddr >> 16) & 0x00ff); + PrintHexByte((absoluteAddr >> 8) & 0x00ff); + PrintHexByte((absoluteAddr) & 0x00ff); + + } + else if ((word1 & 0xfE0E) == 0x940c) + { + //* jmp instruction, this is REALLY complicated, refer to the instruction manual (JMP) + myFullAddress = ((byte1 & 0x01) << 16) + + ((byte1 & 0xf0) << 17) + + ((byte2 & 0x01) << 21) + + word2; + + absoluteAddr = myFullAddress << 1; + + PrintFromPROGMEM(gTextMsg_jmp, 0); + PrintHexByte((myFullAddress >> 16) & 0x00ff); + PrintHexByte((myFullAddress >> 8) & 0x00ff); + PrintHexByte((myFullAddress) & 0x00ff); + sendchar(0x20); + sendchar('>'); + PrintHexByte((absoluteAddr >> 16) & 0x00ff); + PrintHexByte((absoluteAddr >> 8) & 0x00ff); + PrintHexByte((absoluteAddr) & 0x00ff); + } + + #if defined(_INTERRUPT_NAMES_DEFINED_) + sendchar(0x20); + #if (FLASHEND > 0x10000) + stringPointer = pgm_read_word_far(&(gInterruptNameTable[vectorIndex])); + #else + stringPointer = pgm_read_word_near(&(gInterruptNameTable[vectorIndex])); + #endif + PrintFromPROGMEM((char *)stringPointer, 0); + #endif + PrintNewLine(); + + vectorIndex++; + } +} + +//************************************************************************ +static void PrintAvailablePort(char thePortLetter) +{ + PrintFromPROGMEM(gTextMsg_PORT, 0); + sendchar(thePortLetter); + PrintNewLine(); +} + +//************************************************************************ +static void ListAvailablePorts(void) +{ + +#ifdef DDRA + PrintAvailablePort('A'); +#endif + +#ifdef DDRB + PrintAvailablePort('B'); +#endif + +#ifdef DDRC + PrintAvailablePort('C'); +#endif + +#ifdef DDRD + PrintAvailablePort('D'); +#endif + +#ifdef DDRE + PrintAvailablePort('E'); +#endif + +#ifdef DDRF + PrintAvailablePort('F'); +#endif + +#ifdef DDRG + PrintAvailablePort('G'); +#endif + +#ifdef DDRH + PrintAvailablePort('H'); +#endif + +#ifdef DDRI + PrintAvailablePort('I'); +#endif + +#ifdef DDRJ + PrintAvailablePort('J'); +#endif + +#ifdef DDRK + PrintAvailablePort('K'); +#endif + +#ifdef DDRL + PrintAvailablePort('L'); +#endif + +} + +//************************************************************************ +static void AVR_PortOutput(void) +{ +char portLetter; +char getCharFlag; + + PrintFromPROGMEM(gTextMsg_WHAT_PORT, 0); + + portLetter = recchar(); + portLetter = portLetter & 0x5f; + sendchar(portLetter); + PrintNewLine(); + + if ((portLetter >= 'A') && (portLetter <= 'Z')) + { + getCharFlag = true; + switch(portLetter) + { + #ifdef DDRA + case 'A': + DDRA = 0xff; + while (!Serial_Available()) + { + PORTA ^= 0xff; + delay_ms(200); + } + PORTA = 0; + break; + #endif + + #ifdef DDRB + case 'B': + DDRB = 0xff; + while (!Serial_Available()) + { + PORTB ^= 0xff; + delay_ms(200); + } + PORTB = 0; + break; + #endif + + #ifdef DDRC + case 'C': + DDRC = 0xff; + while (!Serial_Available()) + { + PORTC ^= 0xff; + delay_ms(200); + } + PORTC = 0; + break; + #endif + + #ifdef DDRD + case 'D': + DDRD = 0xff; + while (!Serial_Available()) + { + PORTD ^= 0xff; + delay_ms(200); + } + PORTD = 0; + break; + #endif + + #ifdef DDRE + case 'E': + DDRE = 0xff; + while (!Serial_Available()) + { + PORTE ^= 0xff; + delay_ms(200); + } + PORTE = 0; + break; + #endif + + #ifdef DDRF + case 'F': + DDRF = 0xff; + while (!Serial_Available()) + { + PORTF ^= 0xff; + delay_ms(200); + } + PORTF = 0; + break; + #endif + + #ifdef DDRG + case 'G': + DDRG = 0xff; + while (!Serial_Available()) + { + PORTG ^= 0xff; + delay_ms(200); + } + PORTG = 0; + break; + #endif + + #ifdef DDRH + case 'H': + DDRH = 0xff; + while (!Serial_Available()) + { + PORTH ^= 0xff; + delay_ms(200); + } + PORTH = 0; + break; + #endif + + #ifdef DDRI + case 'I': + DDRI = 0xff; + while (!Serial_Available()) + { + PORTI ^= 0xff; + delay_ms(200); + } + PORTI = 0; + break; + #endif + + #ifdef DDRJ + case 'J': + DDRJ = 0xff; + while (!Serial_Available()) + { + PORTJ ^= 0xff; + delay_ms(200); + } + PORTJ = 0; + break; + #endif + + #ifdef DDRK + case 'K': + DDRK = 0xff; + while (!Serial_Available()) + { + PORTK ^= 0xff; + delay_ms(200); + } + PORTK = 0; + break; + #endif + + #ifdef DDRL + case 'L': + DDRL = 0xff; + while (!Serial_Available()) + { + PORTL ^= 0xff; + delay_ms(200); + } + PORTL = 0; + break; + #endif + + default: + PrintFromPROGMEMln(gTextMsg_PortNotSupported, 0); + getCharFlag = false; + break; + } + if (getCharFlag) + { + recchar(); + } + } + else + { + PrintFromPROGMEMln(gTextMsg_MustBeLetter, 0); + } +} + + +//******************************************************************* +static void PrintHelp(void) +{ + PrintFromPROGMEMln(gTextMsg_HELP_MSG_0, 0); + PrintFromPROGMEMln(gTextMsg_HELP_MSG_QM, 0); + PrintFromPROGMEMln(gTextMsg_HELP_MSG_AT, 0); + PrintFromPROGMEMln(gTextMsg_HELP_MSG_B, 0); + PrintFromPROGMEMln(gTextMsg_HELP_MSG_E, 0); + PrintFromPROGMEMln(gTextMsg_HELP_MSG_F, 0); + PrintFromPROGMEMln(gTextMsg_HELP_MSG_H, 0); + + PrintFromPROGMEMln(gTextMsg_HELP_MSG_L, 0); + PrintFromPROGMEMln(gTextMsg_HELP_MSG_Q, 0); + PrintFromPROGMEMln(gTextMsg_HELP_MSG_R, 0); + PrintFromPROGMEMln(gTextMsg_HELP_MSG_V, 0); + PrintFromPROGMEMln(gTextMsg_HELP_MSG_Y, 0); +} + +//************************************************************************ +static void RunMonitor(void) +{ +char keepGoing; +unsigned char theChar; +int ii, jj; + + for (ii=0; ii<5; ii++) + { + for (jj=0; jj<25; jj++) + { + sendchar('!'); + } + PrintNewLine(); + } + + gRamIndex = 0; + gFlashIndex = 0; + gEepromIndex = 0; + + PrintFromPROGMEMln(gTextMsg_Explorer, 0); + + keepGoing = 1; + while (keepGoing) + { + PrintFromPROGMEM(gTextMsg_Prompt, 0); + theChar = recchar(); + if (theChar >= 0x60) + { + theChar = theChar & 0x5F; + } + + if (theChar >= 0x20) + { + sendchar(theChar); + sendchar(0x20); + } + + switch(theChar) + { + case '0': + PrintFromPROGMEMln(gTextMsg_HELP_MSG_0, 2); + gFlashIndex = 0; + gRamIndex = 0; + gEepromIndex = 0; + break; + + case '?': + PrintFromPROGMEMln(gTextMsg_HELP_MSG_QM, 2); + PrintCPUstats(); + break; + + case '@': + PrintFromPROGMEMln(gTextMsg_HELP_MSG_AT, 2); + EEPROMtest(); + break; + + case 'B': + PrintFromPROGMEMln(gTextMsg_HELP_MSG_B, 2); + BlinkLED(); + break; + + case 'E': + PrintFromPROGMEMln(gTextMsg_HELP_MSG_E, 2); + DumpHex(kDUMP_EEPROM, gEepromIndex, 16); + gEepromIndex += 256; + if (gEepromIndex > E2END) + { + gEepromIndex = 0; + } + break; + + case 'F': + PrintFromPROGMEMln(gTextMsg_HELP_MSG_F, 2); + DumpHex(kDUMP_FLASH, gFlashIndex, 16); + gFlashIndex += 256; + break; + + case 'H': + PrintFromPROGMEMln(gTextMsg_HELP_MSG_H, 2); + PrintHelp(); + break; + + case 'L': + PrintFromPROGMEMln(gTextMsg_HELP_MSG_L, 2); + ListAvailablePorts(); + break; + + case 'Q': + PrintFromPROGMEMln(gTextMsg_HELP_MSG_Q, 2); + keepGoing = false; + break; + + case 'R': + PrintFromPROGMEMln(gTextMsg_HELP_MSG_R, 2); + DumpHex(kDUMP_RAM, gRamIndex, 16); + gRamIndex += 256; + break; + + case 'V': + PrintFromPROGMEMln(gTextMsg_HELP_MSG_V, 2); + VectorDisplay(); + break; + + case 'Y': + PrintFromPROGMEMln(gTextMsg_HELP_MSG_Y, 2); + AVR_PortOutput(); + break; + + default: + PrintFromPROGMEMln(gTextMsg_HUH, 0); + break; + } + } +} + +#endif + diff --git a/external/arduino/avr/bootloaders/stk500v2/stk500boot.ppg b/external/arduino/avr/bootloaders/stk500v2/stk500boot.ppg new file mode 100644 index 000000000..a8929d706 --- /dev/null +++ b/external/arduino/avr/bootloaders/stk500v2/stk500boot.ppg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/external/arduino/avr/bootloaders/stk500v2/stk500boot_v2_mega2560.hex b/external/arduino/avr/bootloaders/stk500v2/stk500boot_v2_mega2560.hex new file mode 100644 index 000000000..c52e690a1 --- /dev/null +++ b/external/arduino/avr/bootloaders/stk500v2/stk500boot_v2_mega2560.hex @@ -0,0 +1,469 @@ +:020000023000CC +:10E000000D9489F10D94B2F10D94B2F10D94B2F129 +:10E010000D94B2F10D94B2F10D94B2F10D94B2F1F0 +:10E020000D94B2F10D94B2F10D94B2F10D94B2F1E0 +:10E030000D94B2F10D94B2F10D94B2F10D94B2F1D0 +:10E040000D94B2F10D94B2F10D94B2F10D94B2F1C0 +:10E050000D94B2F10D94B2F10D94B2F10D94B2F1B0 +:10E060000D94B2F10D94B2F10D94B2F10D94B2F1A0 +:10E070000D94B2F10D94B2F10D94B2F10D94B2F190 +:10E080000D94B2F10D94B2F10D94B2F10D94B2F180 +:10E090000D94B2F10D94B2F10D94B2F10D94B2F170 +:10E0A0000D94B2F10D94B2F10D94B2F10D94B2F160 +:10E0B0000D94B2F10D94B2F10D94B2F10D94B2F150 +:10E0C0000D94B2F10D94B2F10D94B2F10D94B2F140 +:10E0D0000D94B2F10D94B2F10D94B2F10D94B2F130 +:10E0E0000D94B2F141546D656761323536300041AF +:10E0F000726475696E6F206578706C6F72657220DE +:10E1000073746B3530305632206279204D4C530099 +:10E11000426F6F746C6F616465723E004875683F52 +:10E1200000436F6D70696C6564206F6E203D200048 +:10E130004350552054797065202020203D20005FF9 +:10E140005F4156525F415243485F5F3D2000415658 +:10E1500052204C696243205665723D20004743437C +:10E160002056657273696F6E203D20004350552024 +:10E1700049442020202020203D20004C6F7720663D +:10E18000757365202020203D20004869676820665F +:10E190007573652020203D200045787420667573D6 +:10E1A00065202020203D20004C6F636B2066757336 +:10E1B000652020203D20004D617220203720323024 +:10E1C000313300312E362E3800342E332E350056A2 +:10E1D00023202020414444522020206F7020636F70 +:10E1E00064652020202020696E73747275637469E1 +:10E1F0006F6E2061646472202020496E74657272B3 +:10E20000757074006E6F20766563746F7200726A49 +:10E210006D702020006A6D70200057686174207056 +:10E220006F72743A00506F7274206E6F7420737541 +:10E2300070706F72746564004D7573742062652030 +:10E2400061206C6574746572002000577269747483 +:10E25000696E672045450052656164696E672045B7 +:10E26000450045452065727220636E743D00504F35 +:10E27000525400303D5A65726F2061646472003FF1 +:10E280003D43505520737461747300403D454550C3 +:10E29000524F4D207465737400423D426C696E6B41 +:10E2A000204C454400453D44756D70204545505215 +:10E2B0004F4D00463D44756D7020464C415348001B +:10E2C000483D48656C70004C3D4C69737420492F83 +:10E2D0004F20506F72747300513D51756974005234 +:10E2E0003D44756D702052414D00563D73686F7707 +:10E2F00020696E7465727275707420566563746FF0 +:10E30000727300593D506F727420626C696E6B00BD +:10E310002A0011241FBECFEFD1E2DEBFCDBF01E046 +:10E320000CBF12E0A0E0B2E0EEE1FDEF03E00BBFB6 +:10E3300002C007900D92A030B107D9F712E0A0E01B +:10E34000B2E001C01D92AE30B107E1F70F9460F367 +:10E350000D948DFE01E20EBF0FEF0DBF11241FBE05 +:10E360000D9460F30D9400F020E030E040ED57E0B4 +:10E3700005C0FA013197F1F72F5F3F4F2817390792 +:10E38000C0F308959C01260F311DC901A0E0B0E043 +:10E390002F5F3F4FABBFFC018791882361F08093D3 +:10E3A000C6008091C00086FFFCCF8091C0008064D1 +:10E3B0008093C000EACF08958DE08093C6008091DD +:10E3C000C00086FFFCCF8091C00080648093C000B5 +:10E3D0008AE08093C6008091C00086FFFCCF8091C8 +:10E3E000C00080648093C00008950F94C2F10F9420 +:10E3F000DCF10895FC019081992359F09093C600B7 +:10E400008091C00086FFFCCF8091C0008064809323 +:10E41000C0003196992379F70895282F982F929567 +:10E420009F70892F805D8A3308F0895F8093C600D2 +:10E430008091C00086FFFCCF8091C00080648093F3 +:10E44000C000822F8F70982F905D9A3308F0995FEB +:10E450009093C6008091C00086FFFCCF8091C000E1 +:10E4600080648093C00008959C01FB01853691056E +:10E470001CF46330710594F0C90164E670E00F94F8 +:10E480002EFE605D7F4F6093C6008091C00086FFC6 +:10E49000FCCF8091C00080648093C0002B30310598 +:10E4A00014F43297B4F0C90164E670E00F942EFEC4 +:10E4B0006AE070E00F942EFE605D7F4F6093C600AF +:10E4C0008091C00086FFFCCF8091C0008064809363 +:10E4D000C000C9016AE070E00F942EFEC0968093E0 +:10E4E000C6008091C00086FFFCCF8091C000806490 +:10E4F0008093C00008951F93182F8EE692EE60E07F +:10E500000F94C2F11093C6008091C00086FFFCCF2B +:10E510008091C00080648093C0000F94DCF11F9153 +:10E5200008952F923F924F925F926F927F928F92B7 +:10E530009F92AF92BF92CF92DF92EF92FF920F9392 +:10E540001F93DF93CF93CDB7DEB762970FB6F894E2 +:10E55000DEBF0FBECDBF382E622ECA01DB015C01CB +:10E560006D01772420E2222E2E010894411C511CBB +:10E570008BC081E0A81680E0B80681E0C80680E084 +:10E58000D80628F0C601AA27BB270F940DF2BB2797 +:10E59000AD2D9C2D8B2D0F940DF28A2D0F940DF225 +:10E5A0002092C6008091C00086FFFCCF8091C00001 +:10E5B00080648093C0009DE29093C6008091C0006B +:10E5C00086FFFCCF8091C00080648093C0002092C1 +:10E5D000C6008091C00086FFFCCF8091C00080649F +:10E5E0008093C00019828601750188249924A1E0D6 +:10E5F0003A1651F03A1620F0B2E03B1661F409C029 +:10E600000BBFF701779007C0C7010F9477FE782EF4 +:10E6100002C0F7017080872D0F940DF22092C60082 +:10E620008091C00086FFFCCF8091C0008064809301 +:10E63000C000872D8052F401EF70F0708F3520F408 +:10E64000E40DF51D708204C0E40DF51D8EE280839B +:10E650000894E11CF11C011D111D0894811C911CE2 +:10E6600090E18916910409F0C2CF80E190E0A0E02A +:10E67000B0E0A80EB91ECA1EDB1E198AC2010F9493 +:10E68000FAF10F94DCF16A94662009F072CF629679 +:10E690000FB6F894DEBF0FBECDBFCF91DF911F91B3 +:10E6A0000F91FF90EF90DF90CF90BF90AF909F9031 +:10E6B0008F907F906F905F904F903F902F90089534 +:10E6C0002F923F924F925F926F927F928F929F9282 +:10E6D000AF92BF92CF92DF92EF92FF920F931F9370 +:10E6E000DF93CF93CDB7DEB7CD53D1400FB6F894BB +:10E6F000DEBF0FBECDBF01E20EBF0FEF0DBF94B75F +:10E70000F894A89514BE80916000886180936000A1 +:10E7100010926000789493FF05C0E0910002F091A0 +:10E7200001021995279A2F9A8091C00082608093E8 +:10E73000C00080E18093C40088E18093C1000000A4 +:10E74000EE24FF24870144E0A42EB12CCC24DD2448 +:10E7500024C0C5010197F1F70894E11CF11C011DCB +:10E76000111D21E2E2162EE4F20620E0020720E06D +:10E77000120718F031E0C32ED12CC801B70127ECE5 +:10E780003BE140E050E00F9441FE611571058105C9 +:10E79000910519F485B1805885B98091C00087FD35 +:10E7A00003C0C114D104A9F2A6014F5F5F4FC25E3E +:10E7B000DE4F59834883CE51D140C25EDE4F8881FF +:10E7C0009981CE51D140019711F00D9410FEC05D9A +:10E7D000DE4F19821882C053D14060E0C15DDE4F28 +:10E7E0001882CF52D14088249924C35DDE4F19820C +:10E7F0001882CD52D140C05EDE4F188219821A8233 +:10E800001B82C052D140CE5CDE4F188219821A8220 +:10E810001B82C253D140EE24FF2487010BBFF701B6 +:10E8200007911691C45CDE4F19830883CC53D14005 +:10E830000D940BFEC25EDE4F28813981CE51D1404E +:10E840002130310509F52091C600C25EDE4F1982E4 +:10E850001882CE51D14022C02F5F3F4F4F4F5F4FA4 +:10E86000213082E138078AE7480780E0580780F0C6 +:10E87000C45CDE4FE881F981CC53D140EF5FFF4F9C +:10E8800019F0EE27FF27099420E030E040E050E047 +:10E890008091C00087FFE0CF2091C600C35DDE4FAE +:10E8A00048815981CD52D1404F5F5F4FC35DDE4FEC +:10E8B00059834883CD52D140213209F063C64A3092 +:10E8C000510508F05FC60894811C911C53E0851621 +:10E8D000910409F059C600E010E018C081E280936D +:10E8E000C6008091C00086FFFCCF8091C00080648C +:10E8F0008093C0002F5F3F4F2931310579F70F9486 +:10E90000DCF10F5F1F4F0530110519F020E030E0FA +:10E91000E5CF10920A0210920B0210920C02109294 +:10E920000D02109206021092070210920802109235 +:10E930000902109202021092030210920402109235 +:10E9400005028FEE90EE60E00F94F5F180E191EE1C +:10E9500060E00F94C2F18091C00087FFFCCF9091DE +:10E96000C600903608F09F759032B8F09093C600BC +:10E970008091C00086FFFCCF8091C00080648093AE +:10E98000C000A0E2A093C6008091C00086FFFCCF2B +:10E990008091C00080648093C000983409F4D7C18E +:10E9A0009934B8F4923409F459C1933458F490333B +:10E9B00019F1903308F4E3C59F33A1F1903409F0C5 +:10E9C000DEC5BDC0953409F470C1963409F0D7C5D1 +:10E9D00098C1923509F42BC2933538F49C3409F46C +:10E9E000F5C1913509F0CBC518C2963509F445C279 +:10E9F000993509F0C4C567C483E792EE62E00F94CD +:10EA0000F5F110920602109207021092080210927D +:10EA1000090210920A0210920B0210920C0210923C +:10EA20000D0213C18FE792EE62E00F94F5F18FEEC5 +:10EA300090EE60E00F94F5F181E291EE60E00F94CA +:10EA4000C2F187EB91EE60E00F94F5F180E391EE77 +:10EA500060E00F94C2F184EE90EE60E00F94F5F167 +:10EA60008FE391EE60E00F94C2F186E090E061E008 +:10EA700070E00F9434F20F94DCF18DE591EE60E0DC +:10EA80000F94C2F189EC91EE60E00F94F5F18EE401 +:10EA900091EE60E00F94C2F183EC91EE60E00F9490 +:10EAA000F5F18CE691EE60E00F94C2F18EE10F94E7 +:10EAB0000DF288E90F940DF281E00F940DF20F949E +:10EAC000DCF18BE791EE60E00F94C2F119E0E0E039 +:10EAD000F0E010935700E4918E2F0F940DF20F94F5 +:10EAE000DCF18AE891EE60E00F94C2F1E3E0F0E03F +:10EAF00010935700E4918E2F0F940DF20F94DCF1D8 +:10EB000089E991EE60E00F94C2F1E2E0F0E0109349 +:10EB10005700E4918E2F0F940DF20F94DCF188EAE8 +:10EB200091EE60E00F94C2F1E1E0F0E01093570045 +:10EB30001491812F0F940DF20F94DCF107CF8BE825 +:10EB400092EE62E00F94F5F18BE492EE60E00F94A8 +:10EB5000F5F10F94DCF100E010E019C0C8016F2D51 +:10EB60000F947FFEFF2031F489E492EE60E00F9471 +:10EB7000C2F10BC0F092C6008091C00086FFFCCFAE +:10EB80008091C00080648093C0000F5F1F4FC80158 +:10EB900081519F41A0E0B0E0ABBFFC01F790BAE229 +:10EBA000FB1621F0E2E000301E07C1F60F94DCF105 +:10EBB0000F94DCF187E592EE60E00F94F5F10F948D +:10EBC000DCF1CC24DD2400E010E01EC0C8010F946D +:10EBD00077FEF82E882331F489E492EE60E00F94FA +:10EBE000C2F10BC08093C6008091C00086FFFCCFAD +:10EBF0008091C00080648093C000FE1419F00894D6 +:10EC0000C11CD11C0F5F1F4FC80181519F41A0E063 +:10EC1000B0E0ABBFFC01E790FAE2EF1621F022E092 +:10EC20000030120799F60F94DCF10F94DCF182E6C4 +:10EC300092EE60E00F94C2F1C60161E070E00F94C3 +:10EC400034F20F94DCF10F94DCF110920202109276 +:10EC50000302109204021092050278CE89E992EE26 +:10EC600062E00F94F5F1279A2F9A16C02F9880E052 +:10EC700090E0E0EDF7E03197F1F7019684369105E9 +:10EC8000C1F72F9A80E090E0E0EDF7E03197F1F7DF +:10EC9000019684369105C1F78091C00087FFE6CFC9 +:10ECA0008091C00087FFFCCF64C485EA92EE62E0E9 +:10ECB0000F94F5F140910202509103026091040219 +:10ECC0007091050281E020E10F9491F2809102029F +:10ECD00090910302A0910402B091050280509F4FD1 +:10ECE000AF4FBF4F8093020290930302A0930402A0 +:10ECF000B093050280509041A040B04008F426CE69 +:10ED0000A4CF83EB92EE62E00F94F5F140910602FE +:10ED100050910702609108027091090280E020E1A1 +:10ED20000F9491F28091060290910702A09108023F +:10ED3000B091090280509F4FAF4FBF4F80930602A2 +:10ED400090930702A0930802B0930902FFCD80ECD4 +:10ED500092EE62E00F94F5F183E792EE60E00F949B +:10ED6000F5F18FE792EE60E00F94F5F18BE892EE0B +:10ED700060E00F94F5F189E992EE60E00F94F5F10F +:10ED800085EA92EE60E00F94F5F183EB92EE60E09D +:10ED90000F94F5F180EC92EE60E00F94F5F187ECC2 +:10EDA00092EE60E00F94F5F188ED92EE60E00F9442 +:10EDB000F5F18FED92EE60E00F94F5F18AEE92EEB0 +:10EDC00060E00F94F5F183E093EEBDCD87EC92EE19 +:10EDD00062E00F94F5F181E40F947BF282E40F94EA +:10EDE0007BF283E40F947BF284E40F947BF285E45E +:10EDF0000F947BF286E40F947BF287E40F947BF20E +:10EE000088E40F947BF28AE40F947BF28BE40F94F6 +:10EE10007BF28CE40F947BF299CD88ED92EE62E068 +:10EE20000F94F5F1772473948824992409C48FED05 +:10EE300092EE62E00F94F5F140910A0250910B02BC +:10EE400060910C0270910D0282E020E10F9491F22A +:10EE500080910A0290910B02A0910C02B0910D02D8 +:10EE600080509F4FAF4FBF4F80930A0290930B0289 +:10EE7000A0930C02B0930D0269CD8AEE92EE62E08F +:10EE80000F94F5F184EE90EE60E00F94F5F18FECC5 +:10EE900091EE60E00F94F5F1662477244301CC5D98 +:10EEA000DE4F19821882C452D140D401C301B695F5 +:10EEB000A79597958795CA5DDE4F88839983AA8326 +:10EEC000BB83C652D140CC5DDE4FA881B981C4520C +:10EED000D1401196CC5DDE4FB983A883C452D14096 +:10EEE000CD0162E070E00F9434F2B0E2B093C6005E +:10EEF0008091C00086FFFCCF8091C0008064809329 +:10EF0000C000EDE2E093C6008091C00086FFFCCF18 +:10EF10008091C00080648093C000F0E2F093C6004E +:10EF20008091C00086FFFCCF8091C00080648093F8 +:10EF3000C000CA5DDE4FE880F9800A811B81C6529D +:10EF4000D140BB27A12F902F8F2D0F940DF2CA5DBA +:10EF5000DE4F8881C652D1400F940DF2B0E2FB2EF5 +:10EF6000F092C6008091C00086FFFCCF8091C00067 +:10EF700080648093C0000DE30093C6008091C000C0 +:10EF800086FFFCCF8091C00080648093C00010E2B7 +:10EF90001093C6008091C00086FFFCCF8091C00016 +:10EFA00080648093C0008BBEF3012791C65DDE4F65 +:10EFB0002883CA52D140A22EBB24CC24DD2408943D +:10EFC000611C711C811C911C8BBEF3018791282E42 +:10EFD0003324442455240894611C711C811C911C09 +:10EFE0008BBEF3013791C55DDE4F3883CB52D140E4 +:10EFF0000894611C711C811C911C8BBEF30147910C +:10F00000C45DDE4F4883CC52D140ADEFEA2EAFEF66 +:10F01000FA2EAFEF0A2FAFEF1A2F6E0C7F1C801E57 +:10F02000911E142D032DF22CEE24EA0CFB1C0C1D5A +:10F030001D1D0F940DF220E22093C6008091C000A8 +:10F0400086FFFCCF8091C00080648093C000C65DC5 +:10F05000DE4F8881CA52D1400F940DF230E23093D6 +:10F06000C6008091C00086FFFCCF8091C000806404 +:10F070008093C000C45DDE4F8881CC52D1400F9494 +:10F080000DF240E24093C6008091C00086FFFCCFA5 +:10F090008091C00080648093C000C55DDE4F888190 +:10F0A000CB52D1400F940DF250E25093C6008091A4 +:10F0B000C00086FFFCCF8091C00080648093C000B8 +:10F0C0008FEFE8168FEFF80680E0080780E018075A +:10F0D00031F484E092EE60E00F94C2F1DFC0D80119 +:10F0E000C7018070907CA070B0708050904CA040A0 +:10F0F000B040D1F52FEF3FE340E050E0E222F322B1 +:10F1000004231523CA5DDE4FA880B980CA80DB8046 +:10F11000C652D140AE0CBF1CC01ED11EAA0CBB1CD7 +:10F12000CC1CDD1C8EE092EE60E00F94C2F1BB2798 +:10F13000A12F902F8F2D0F940DF28E2D0F940DF285 +:10F1400030E23093C6008091C00086FFFCCF8091F2 +:10F15000C00080648093C0004EE34093C60080915D +:10F16000C00086FFFCCF87C08EE09EEFA0E0B0E03D +:10F17000E822F9220A231B239CE0E91694E9F90608 +:10F1800090E0090790E0190709F088C0C45DDE4FE0 +:10F19000A881CC52D140EA2EFF2400E010E0102FCD +:10F1A0000F2DFE2CEE24C55DDE4FB881CB52D14031 +:10F1B000EB0EF11C011D111DD601C501817090706F +:10F1C000A070B070DC0199278827E80EF91E0A1F8D +:10F1D0001B1F20EF30E040E050E0A222B322C42207 +:10F1E000D52241E1AA0CBB1CCC1CDD1C4A95D1F7F1 +:10F1F000EA0CFB1C0C1D1D1D81E090E0A0E0B0E0BE +:10F20000282239224A225B2235E1220C331C441C7D +:10F21000551C3A95D1F7E20CF31C041D151D57013E +:10F220006801AA0CBB1CCC1CDD1C85E192EE60E0E1 +:10F230000F94C2F1C801AA27BB270F940DF2BB2778 +:10F24000A12F902F8F2D0F940DF28E2D0F940DF274 +:10F2500090E29093C6008091C00086FFFCCF809121 +:10F26000C00080648093C000AEE3A093C60080918C +:10F27000C00086FFFCCF8091C00080648093C000F6 +:10F28000C601AA27BB270F940DF2BB27AD2D9C2DDD +:10F290008B2D0F940DF28A2D0F940DF20F94DCF14B +:10F2A000CC5DDE4FE881F981C452D140F99709F471 +:10F2B0004DCBF4E0EF2EF12C012D112D6E0C7F1CA7 +:10F2C000801E911EF2CD83E093EE62E00F94F5F183 +:10F2D0008AE192EE60E00F94C2F18091C00087FF56 +:10F2E000FCCF1091C6001F751093C6008091C0001E +:10F2F00086FFFCCF8091C00080648093C0000F9493 +:10F30000DCF1812F81548A3108F036C1163409F4BA +:10F3100095C0173490F4133409F44EC0143430F40B +:10F320001134F1F0123409F01DC130C0143409F465 +:10F3300059C0153409F016C16BC01A3409F4C4C0A1 +:10F340001B3438F4173409F48FC0183409F00AC19B +:10F35000A1C01B3409F4D2C01C3409F003C1E8C0B9 +:10F360008FEF81B90DC082B1809582B980E090E0C5 +:10F37000E0EDF7E03197F1F70196883C9105C1F790 +:10F380008091C00087FFEFCF12B8EFC08FEF84B934 +:10F390000DC085B1809585B980E090E0E0EDF7E0A3 +:10F3A0003197F1F70196883C9105C1F78091C00033 +:10F3B00087FFEFCF15B8D9C08FEF87B90DC088B1DF +:10F3C000809588B980E090E0E0EDF7E03197F1F7C3 +:10F3D0000196883C9105C1F78091C00087FFEFCF6F +:10F3E00018B8C3C08FEF8AB90DC08BB180958BB9A7 +:10F3F00080E090E0E0EDF7E03197F1F70196883C8E +:10F400009105C1F78091C00087FFEFCF1BB8ADC059 +:10F410008FEF8DB90DC08EB180958EB980E090E0F0 +:10F42000E0EDF7E03197F1F70196883C9105C1F7DF +:10F430008091C00087FFEFCF1EB897C08FEF80BBD1 +:10F440000DC081B3809581BB80E090E0E0EDF7E0F6 +:10F450003197F1F70196883C9105C1F78091C00082 +:10F4600087FFEFCF11BA81C08FEF83BB0DC084B38C +:10F47000809584BB80E090E0E0EDF7E03197F1F714 +:10F480000196883C9105C1F78091C00087FFEFCFBE +:10F4900014BA6BC08FEF809301010FC080910201FD +:10F4A00080958093020180E090E0E0EDF7E03197F5 +:10F4B000F1F70196883C9105C1F78091C00087FF64 +:10F4C000EDCF1092020151C08FEF809304010FC065 +:10F4D0008091050180958093050180E090E0E0ED4A +:10F4E000F7E03197F1F70196883C9105C1F78091DB +:10F4F000C00087FFEDCF1092050137C08FEF8093DA +:10F5000007010FC08091080180958093080180E079 +:10F5100090E0E0EDF7E03197F1F70196883C910536 +:10F52000C1F78091C00087FFEDCF109208011DC088 +:10F530008FEF80930A010FC080910B01809580931B +:10F540000B0180E090E0E0EDF7E03197F1F70196F4 +:10F55000883C9105C1F78091C00087FFEDCF1092E4 +:10F560000B0103C085E292EEEEC98091C00087FFD7 +:10F57000FCCF8091C600EAC988E392EEE4C98CE131 +:10F5800091EEE1C988249924933011F1943028F444 +:10F59000913089F09230B8F408C0953061F195301F +:10F5A000F0F0963009F048C043C02B3109F042C951 +:10F5B00091E06BE13FC96227C15DDE4F2883CF52E6 +:10F5C000D14092E037C9B22FA0E0622793E032C960 +:10F5D000822F90E0A82BB92B622794E02BC92E3004 +:10F5E00009F039C3622795E0C05DDE4F19821882A9 +:10F5F000C053D1401FC9E1E0F0E0EC0FFD1FC05D3A +:10F60000DE4F08811981C053D140E00FF11F2083E4 +:10F610000F5F1F4FC05DDE4F19830883C053D14079 +:10F6200062270A171B0709F005C9D80196E002C92D +:10F63000261709F010C303C0973009F0FBC87724E0 +:10F640009981933109F412C19431C8F4963009F4C8 +:10F65000D8C0973050F4923009F406C1933009F4C1 +:10F660006DC0913009F059C253C0913109F477C08F +:10F67000923108F0BBC0903109F04FC2F5C098310B +:10F6800009F487C0993150F4953109F4EFC09531F0 +:10F6900008F4C6C1963109F040C2C2C19A3109F4DA +:10F6A0006CC09A3108F491C09B3109F45BC09D3164 +:10F6B00009F033C29D81903359F48F81882311F46E +:10F6C0009EE11CC0813011F091E018C098E916C08D +:10F6D000892F807591F0903539F4E0E0F0E089E011 +:10F6E0008093570094910AC0983539F4E3E0F0E034 +:10F6F00089E080935700949101C090E01A821B82A8 +:10F700008D818C831D829E831F8227E030E009C299 +:10F710001A8288E08B8381E48C8386E58D8382E581 +:10F720008E8389E48F8383E5888780E589878FE5E9 +:10F730008A8782E38B872BE030E0F3C18A818139AD +:10F7400041F0823941F0803911F48FE005C080E04A +:10F7500003C082E001C08AE01A828B8344C0772410 +:10F76000739482C08D81882311F48EE12CC0813086 +:10F7700011F081E028C088E926C01A82E1E0F0E0BB +:10F7800089E08093570084918B831C8224E030E0D1 +:10F79000C8C18B81803589F48C81883039F4E2E0EE +:10F7A000F0E089E08093570084910DC0E0E0F0E044 +:10F7B00089E080935700849106C0E3E0F0E089E09F +:10F7C0008093570084911A82DFCF8D81836C99E0FA +:10F7D000E1E0F0E0082E90935700E89507B600FCB2 +:10F7E000FDCF1A821B8223E030E09BC180EC8A832C +:10F7F000CE5CDE4F188219821A821B82C253D1401E +:10F800008EC18A8190E0A0E0B0E0582F44273327D2 +:10F8100022278B8190E0A0E0B0E0DC0199278827C7 +:10F82000282B392B4A2B5B2B8D8190E0A0E0B0E098 +:10F83000282B392B4A2B5B2B8C8190E0A0E0B0E089 +:10F84000BA2FA92F982F8827282B392B4A2B5B2BCF +:10F85000220F331F441F551FC05EDE4F288339839C +:10F860004A835B83C052D1401A8259C13A81C95C34 +:10F87000DE4F3883C753D140CA5CDE4F1882C6536F +:10F88000D1408B81C82EDD24CA5CDE4F488159816E +:10F89000C653D140C42AD52A933109F082C0CE5C28 +:10F8A000DE4F88819981AA81BB81C253D1408050AB +:10F8B000904CA340B04030F583E0CE5CDE4FE88052 +:10F8C000F9800A811B81C253D140F70100935B008C +:10F8D00080935700E89507B600FCFDCFCE5CDE4F65 +:10F8E000088119812A813B81C253D14000501F4FAA +:10F8F0002F4F3F4FCE5CDE4F088319832A833B8313 +:10F90000C253D140C05EDE4F488159816A817B81FC +:10F91000C052D140DE011B9631E08C9111962C91A2 +:10F9200011971296C75CDE4F2883C953D140C85C3B +:10F93000DE4F1882C853D14090E0C85CDE4FE881AA +:10F94000F981C853D1408E2B9F2B0C01FA01609393 +:10F950005B0030935700E89511244E5F5F4F6F4F67 +:10F960007F4F0EEFE02E0FEFF02ECE0CDF1CC114F8 +:10F97000D10499F685E0C05EDE4F088119812A81A5 +:10F980003B81C052D140F80120935B008093570027 +:10F99000E89507B600FCFDCF81E180935700E8951C +:10F9A00035C0C05EDE4F88819981AA81BB81C0527B +:10F9B000D140B695A795979587957C018601ABE0D8 +:10F9C000AA2EB12CAC0EBD1E0BC0D5016D915D01F0 +:10F9D000C7010F947FFE0894E11CF11C01501040F8 +:10F9E0000115110591F7A60160E070E0440F551F65 +:10F9F000661F771FC05EDE4FE880F9800A811B8199 +:10FA0000C052D1404E0D5F1D601F711F1A82C05E33 +:10FA1000DE4F488359836A837B83C052D1407FC0C5 +:10FA2000FA80C55CDE4FF882CB53D140C65CDE4F16 +:10FA30001882CA53D1408B81C82EDD24C65CDE4FAC +:10FA400008811981CA53D140C02AD12A1A828981DA +:10FA5000BE016D5F7F4F843121F59601C05EDE4FA0 +:10FA6000E880F9800A811B81C052D1400BBFF701A9 +:10FA700087919691DB018C9311969C936E5F7F4FDB +:10FA8000D801C7010296A11DB11DC05EDE4F88835B +:10FA90009983AA83BB83C052D14022503040F1F6F3 +:10FAA00036C0C05EDE4F288139814A815B81C052F9 +:10FAB000D1400894C108D108760100E010E0089414 +:10FAC000C11CD11C0894E11CF11C011D111DE20E8A +:10FAD000F31E041F151F21BDBB27A52F942F832FB5 +:10FAE00082BD2F5F3F4F4F4F5F4FF89A80B5DB01CC +:10FAF0008D93BD012E153F054007510761F7C05E8C +:10FB0000DE4F288339834A835B83C052D1409601FC +:10FB10002D5F3F4FFB01108204C080EC8A8322E0FE +:10FB200030E08BE18093C6008091C00086FFFCCF5F +:10FB30008091C00080648093C000C15DDE4FF88179 +:10FB4000CF52D140F093C6008091C00086FFFCCF19 +:10FB50008091C00080648093C000432F3093C60022 +:10FB60008091C00086FFFCCF8091C00080648093AC +:10FB7000C000922F2093C6008091C00086FFFCCF6A +:10FB80008091C00080648093C0008EE08093C600A6 +:10FB90008091C00086FFFCCF8091C000806480937C +:10FBA000C00065E1C15DDE4FE880CF52D1406E25D7 +:10FBB00069276427FE01319610C090819093C6009A +:10FBC0008091C00086FFFCCF31968091C000806498 +:10FBD0008093C0006927215030402115310569F715 +:10FBE0006093C6008091C00086FFFCCF8091C0006A +:10FBF00080648093C00085B1805885B9772081F4F6 +:10FC0000C15DDE4F0881CF52D1400F5FC15DDE4F35 +:10FC10000883CF52D14090E0A0E0B0E00D941AF4F8 +:10FC200027982F9880E090E020ED37E0F901319798 +:10FC3000F1F7019684369105C9F700008091C00064 +:10FC40008D7F8093C00081E180935700E895EE2777 +:10FC5000FF270994FFCF90E00D941AF497FB092E2B +:10FC600007260AD077FD04D02ED006D000201AF443 +:10FC7000709561957F4F0895F6F7909581959F4F08 +:10FC80000895A1E21A2EAA1BBB1BFD010DC0AA1FDD +:10FC9000BB1FEE1FFF1FA217B307E407F50720F0F5 +:10FCA000A21BB30BE40BF50B661F771F881F991F70 +:10FCB0001A9469F760957095809590959B01AC01B9 +:10FCC000BD01CF010895AA1BBB1B51E107C0AA1FAC +:10FCD000BB1FA617B70710F0A61BB70B881F991FED +:10FCE0005A95A9F780959095BC01CD010895F99991 +:10FCF000FECF92BD81BDF89A992780B50895262F31 +:10FD0000F999FECF1FBA92BD81BD20BD0FB6F89400 +:0EFD1000FA9AF99A0FBE01960895F894FFCF63 +:040000033000E000E9 +:00000001FF diff --git a/external/arduino/avr/cores/arduino/Arduino.h b/external/arduino/avr/cores/arduino/Arduino.h new file mode 100644 index 000000000..298f880b7 --- /dev/null +++ b/external/arduino/avr/cores/arduino/Arduino.h @@ -0,0 +1,260 @@ +/* + Arduino.h - Main include file for the Arduino SDK + Copyright (c) 2005-2013 Arduino Team. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef Arduino_h +#define Arduino_h + +#include +#include +#include +#include + +#include +#include +#include + +#include "binary.h" + +#ifdef __cplusplus +extern "C"{ +#endif + +void yield(void); + +#define HIGH 0x1 +#define LOW 0x0 + +#define INPUT 0x0 +#define OUTPUT 0x1 +#define INPUT_PULLUP 0x2 + +#define PI 3.1415926535897932384626433832795 +#define HALF_PI 1.5707963267948966192313216916398 +#define TWO_PI 6.283185307179586476925286766559 +#define DEG_TO_RAD 0.017453292519943295769236907684886 +#define RAD_TO_DEG 57.295779513082320876798154814105 +#define EULER 2.718281828459045235360287471352 + +#define SERIAL 0x0 +#define DISPLAY 0x1 + +#define LSBFIRST 0 +#define MSBFIRST 1 + +#define CHANGE 1 +#define FALLING 2 +#define RISING 3 + +#if defined(__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) + #define DEFAULT 0 + #define EXTERNAL 1 + #define INTERNAL1V1 2 + #define INTERNAL INTERNAL1V1 +#elif defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__) + #define DEFAULT 0 + #define EXTERNAL 4 + #define INTERNAL1V1 8 + #define INTERNAL INTERNAL1V1 + #define INTERNAL2V56 9 + #define INTERNAL2V56_EXTCAP 13 +#else +#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__) || defined(__AVR_ATmega644__) || defined(__AVR_ATmega644A__) || defined(__AVR_ATmega644P__) || defined(__AVR_ATmega644PA__) +#define INTERNAL1V1 2 +#define INTERNAL2V56 3 +#else +#define INTERNAL 3 +#endif +#define DEFAULT 1 +#define EXTERNAL 0 +#endif + +// undefine stdlib's abs if encountered +#ifdef abs +#undef abs +#endif + +#define min(a,b) ((a)<(b)?(a):(b)) +#define max(a,b) ((a)>(b)?(a):(b)) +#define abs(x) ((x)>0?(x):-(x)) +#define constrain(amt,low,high) ((amt)<(low)?(low):((amt)>(high)?(high):(amt))) +#define round(x) ((x)>=0?(long)((x)+0.5):(long)((x)-0.5)) +#define radians(deg) ((deg)*DEG_TO_RAD) +#define degrees(rad) ((rad)*RAD_TO_DEG) +#define sq(x) ((x)*(x)) + +#define interrupts() sei() +#define noInterrupts() cli() + +#define clockCyclesPerMicrosecond() ( F_CPU / 1000000L ) +#define clockCyclesToMicroseconds(a) ( (a) / clockCyclesPerMicrosecond() ) +#define microsecondsToClockCycles(a) ( (a) * clockCyclesPerMicrosecond() ) + +#define lowByte(w) ((uint8_t) ((w) & 0xff)) +#define highByte(w) ((uint8_t) ((w) >> 8)) + +#define bitRead(value, bit) (((value) >> (bit)) & 0x01) +#define bitSet(value, bit) ((value) |= (1UL << (bit))) +#define bitClear(value, bit) ((value) &= ~(1UL << (bit))) +#define bitToggle(value, bit) ((value) ^= (1UL << (bit))) +#define bitWrite(value, bit, bitvalue) ((bitvalue) ? bitSet(value, bit) : bitClear(value, bit)) + +// avr-libc defines _NOP() since 1.6.2 +#ifndef _NOP +#define _NOP() do { __asm__ volatile ("nop"); } while (0) +#endif + +typedef unsigned int word; + +#define bit(b) (1UL << (b)) + +typedef bool boolean; +typedef uint8_t byte; + +void init(void); +void initVariant(void); + +int atexit(void (*func)()) __attribute__((weak)); + +void pinMode(uint8_t pin, uint8_t mode); +void digitalWrite(uint8_t pin, uint8_t val); +int digitalRead(uint8_t pin); +int analogRead(uint8_t pin); +void analogReference(uint8_t mode); +void analogWrite(uint8_t pin, int val); + +unsigned long millis(void); +unsigned long micros(void); +void delay(unsigned long ms); +void delayMicroseconds(unsigned int us); +unsigned long pulseIn(uint8_t pin, uint8_t state, unsigned long timeout); +unsigned long pulseInLong(uint8_t pin, uint8_t state, unsigned long timeout); + +void shiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t val); +uint8_t shiftIn(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder); + +void attachInterrupt(uint8_t interruptNum, void (*userFunc)(void), int mode); +void detachInterrupt(uint8_t interruptNum); + +//void setup(void); +//void loop(void); + +// Get the bit location within the hardware port of the given virtual pin. +// This comes from the pins_*.c file for the active board configuration. + +#define analogInPinToBit(P) (P) + +// On the ATmega1280, the addresses of some of the port registers are +// greater than 255, so we can't store them in uint8_t's. +extern const uint16_t PROGMEM port_to_mode_PGM[]; +extern const uint16_t PROGMEM port_to_input_PGM[]; +extern const uint16_t PROGMEM port_to_output_PGM[]; + +extern const uint8_t PROGMEM digital_pin_to_port_PGM[]; +// extern const uint8_t PROGMEM digital_pin_to_bit_PGM[]; +extern const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[]; +extern const uint8_t PROGMEM digital_pin_to_timer_PGM[]; + +// Get the bit location within the hardware port of the given virtual pin. +// This comes from the pins_*.c file for the active board configuration. +// +// These perform slightly better as macros compared to inline functions +// +#define digitalPinToPort(P) ( pgm_read_byte( digital_pin_to_port_PGM + (P) ) ) +#define digitalPinToBitMask(P) ( pgm_read_byte( digital_pin_to_bit_mask_PGM + (P) ) ) +#define digitalPinToTimer(P) ( pgm_read_byte( digital_pin_to_timer_PGM + (P) ) ) +#define analogInPinToBit(P) (P) +#define portOutputRegister(P) ( (volatile uint8_t *)( pgm_read_word( port_to_output_PGM + (P))) ) +#define portInputRegister(P) ( (volatile uint8_t *)( pgm_read_word( port_to_input_PGM + (P))) ) +#define portModeRegister(P) ( (volatile uint8_t *)( pgm_read_word( port_to_mode_PGM + (P))) ) + +#define NOT_A_PIN 0 +#define NOT_A_PORT 0 + +#define NOT_AN_INTERRUPT -1 + +#ifdef ARDUINO_MAIN +#define PA 1 +#define PB 2 +#define PC 3 +#define PD 4 +#define PE 5 +#define PF 6 +#define PG 7 +#define PH 8 +#define PJ 10 +#define PK 11 +#define PL 12 +#endif + +#define NOT_ON_TIMER 0 +#define TIMER0A 1 +#define TIMER0B 2 +#define TIMER1A 3 +#define TIMER1B 4 +#define TIMER1C 5 +#define TIMER2 6 +#define TIMER2A 7 +#define TIMER2B 8 + +#define TIMER3A 9 +#define TIMER3B 10 +#define TIMER3C 11 +#define TIMER4A 12 +#define TIMER4B 13 +#define TIMER4C 14 +#define TIMER4D 15 +#define TIMER5A 16 +#define TIMER5B 17 +#define TIMER5C 18 + +#ifdef __cplusplus +} // extern "C" +#endif + +#ifdef __cplusplus +#include "WCharacter.h" +#include "WString.h" +#include "HardwareSerial.h" +#include "USBAPI.h" +#if defined(HAVE_HWSERIAL0) && defined(HAVE_CDCSERIAL) +#error "Targets with both UART0 and CDC serial not supported" +#endif + +uint16_t makeWord(uint16_t w); +uint16_t makeWord(byte h, byte l); + +#define word(...) makeWord(__VA_ARGS__) + +unsigned long pulseIn(uint8_t pin, uint8_t state, unsigned long timeout = 1000000L); +unsigned long pulseInLong(uint8_t pin, uint8_t state, unsigned long timeout = 1000000L); + +void tone(uint8_t _pin, unsigned int frequency, unsigned long duration = 0); +void noTone(uint8_t _pin); + +// WMath prototypes +long random(long); +long random(long, long); +void randomSeed(unsigned long); +long map(long, long, long, long, long); + +#endif + +#include "pins_arduino.h" + +#endif diff --git a/external/arduino/avr/cores/arduino/CDC.cpp b/external/arduino/avr/cores/arduino/CDC.cpp new file mode 100644 index 000000000..4ff6b9b42 --- /dev/null +++ b/external/arduino/avr/cores/arduino/CDC.cpp @@ -0,0 +1,302 @@ + + +/* Copyright (c) 2011, Peter Barrett +** +** Permission to use, copy, modify, and/or distribute this software for +** any purpose with or without fee is hereby granted, provided that the +** above copyright notice and this permission notice appear in all copies. +** +** THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL +** WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED +** WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR +** BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES +** OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +** WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +** ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +** SOFTWARE. +*/ + +#include "USBAPI.h" +#include +#include + +#if defined(USBCON) + +typedef struct +{ + u32 dwDTERate; + u8 bCharFormat; + u8 bParityType; + u8 bDataBits; + u8 lineState; +} LineInfo; + +static volatile LineInfo _usbLineInfo = { 57600, 0x00, 0x00, 0x00, 0x00 }; +static volatile int32_t breakValue = -1; + +static u8 wdtcsr_save; + +#define WEAK __attribute__ ((weak)) + +extern const CDCDescriptor _cdcInterface PROGMEM; +const CDCDescriptor _cdcInterface = +{ + D_IAD(0,2,CDC_COMMUNICATION_INTERFACE_CLASS,CDC_ABSTRACT_CONTROL_MODEL,0), + + // CDC communication interface + D_INTERFACE(CDC_ACM_INTERFACE,1,CDC_COMMUNICATION_INTERFACE_CLASS,CDC_ABSTRACT_CONTROL_MODEL,0), + D_CDCCS(CDC_HEADER,0x10,0x01), // Header (1.10 bcd) + D_CDCCS(CDC_CALL_MANAGEMENT,1,1), // Device handles call management (not) + D_CDCCS4(CDC_ABSTRACT_CONTROL_MANAGEMENT,6), // SET_LINE_CODING, GET_LINE_CODING, SET_CONTROL_LINE_STATE supported + D_CDCCS(CDC_UNION,CDC_ACM_INTERFACE,CDC_DATA_INTERFACE), // Communication interface is master, data interface is slave 0 + D_ENDPOINT(USB_ENDPOINT_IN (CDC_ENDPOINT_ACM),USB_ENDPOINT_TYPE_INTERRUPT,0x10,0x40), + + // CDC data interface + D_INTERFACE(CDC_DATA_INTERFACE,2,CDC_DATA_INTERFACE_CLASS,0,0), + D_ENDPOINT(USB_ENDPOINT_OUT(CDC_ENDPOINT_OUT),USB_ENDPOINT_TYPE_BULK,USB_EP_SIZE,0), + D_ENDPOINT(USB_ENDPOINT_IN (CDC_ENDPOINT_IN ),USB_ENDPOINT_TYPE_BULK,USB_EP_SIZE,0) +}; + +bool isLUFAbootloader() +{ + return pgm_read_word(FLASHEND - 1) == NEW_LUFA_SIGNATURE; +} + +int CDC_GetInterface(u8* interfaceNum) +{ + interfaceNum[0] += 2; // uses 2 + return USB_SendControl(TRANSFER_PGM,&_cdcInterface,sizeof(_cdcInterface)); +} + +bool CDC_Setup(USBSetup& setup) +{ + u8 r = setup.bRequest; + u8 requestType = setup.bmRequestType; + + if (REQUEST_DEVICETOHOST_CLASS_INTERFACE == requestType) + { + if (CDC_GET_LINE_CODING == r) + { + USB_SendControl(0,(void*)&_usbLineInfo,7); + return true; + } + } + + if (REQUEST_HOSTTODEVICE_CLASS_INTERFACE == requestType) + { + if (CDC_SEND_BREAK == r) + { + breakValue = ((uint16_t)setup.wValueH << 8) | setup.wValueL; + } + + if (CDC_SET_LINE_CODING == r) + { + USB_RecvControl((void*)&_usbLineInfo,7); + } + + if (CDC_SET_CONTROL_LINE_STATE == r) + { + _usbLineInfo.lineState = setup.wValueL; + + // auto-reset into the bootloader is triggered when the port, already + // open at 1200 bps, is closed. this is the signal to start the watchdog + // with a relatively long period so it can finish housekeeping tasks + // like servicing endpoints before the sketch ends + + uint16_t magic_key_pos = MAGIC_KEY_POS; + +// If we don't use the new RAMEND directly, check manually if we have a newer bootloader. +// This is used to keep compatible with the old leonardo bootloaders. +// You are still able to set the magic key position manually to RAMEND-1 to save a few bytes for this check. +#if MAGIC_KEY_POS != (RAMEND-1) + // For future boards save the key in the inproblematic RAMEND + // Which is reserved for the main() return value (which will never return) + if (isLUFAbootloader()) { + // horray, we got a new bootloader! + magic_key_pos = (RAMEND-1); + } +#endif + + // We check DTR state to determine if host port is open (bit 0 of lineState). + if (1200 == _usbLineInfo.dwDTERate && (_usbLineInfo.lineState & 0x01) == 0) + { +#if MAGIC_KEY_POS != (RAMEND-1) + // Backup ram value if its not a newer bootloader and it hasn't already been saved. + // This should avoid memory corruption at least a bit, not fully + if (magic_key_pos != (RAMEND-1) && *(uint16_t *)magic_key_pos != MAGIC_KEY) { + *(uint16_t *)(RAMEND-1) = *(uint16_t *)magic_key_pos; + } +#endif + // Store boot key + *(uint16_t *)magic_key_pos = MAGIC_KEY; + // Save the watchdog state in case the reset is aborted. + wdtcsr_save = WDTCSR; + wdt_enable(WDTO_120MS); + } + else if (*(uint16_t *)magic_key_pos == MAGIC_KEY) + { + // Most OSs do some intermediate steps when configuring ports and DTR can + // twiggle more than once before stabilizing. + // To avoid spurious resets we set the watchdog to 120ms and eventually + // cancel if DTR goes back high. + // Cancellation is only done if an auto-reset was started, which is + // indicated by the magic key having been set. + + wdt_reset(); + // Restore the watchdog state in case the sketch was using it. + WDTCSR |= (1<= 0) { + return 1 + USB_Available(CDC_RX); + } + return USB_Available(CDC_RX); +} + +int Serial_::peek(void) +{ + if (peek_buffer < 0) + peek_buffer = USB_Recv(CDC_RX); + return peek_buffer; +} + +int Serial_::read(void) +{ + if (peek_buffer >= 0) { + int c = peek_buffer; + peek_buffer = -1; + return c; + } + return USB_Recv(CDC_RX); +} + +int Serial_::availableForWrite(void) +{ + return USB_SendSpace(CDC_TX); +} + +void Serial_::flush(void) +{ + USB_Flush(CDC_TX); +} + +size_t Serial_::write(uint8_t c) +{ + return write(&c, 1); +} + +size_t Serial_::write(const uint8_t *buffer, size_t size) +{ + /* only try to send bytes if the high-level CDC connection itself + is open (not just the pipe) - the OS should set lineState when the port + is opened and clear lineState when the port is closed. + bytes sent before the user opens the connection or after + the connection is closed are lost - just like with a UART. */ + + // TODO - ZE - check behavior on different OSes and test what happens if an + // open connection isn't broken cleanly (cable is yanked out, host dies + // or locks up, or host virtual serial port hangs) + if (_usbLineInfo.lineState > 0) { + int r = USB_Send(CDC_TX,buffer,size); + if (r > 0) { + return r; + } else { + setWriteError(); + return 0; + } + } + setWriteError(); + return 0; +} + +// This operator is a convenient way for a sketch to check whether the +// port has actually been configured and opened by the host (as opposed +// to just being connected to the host). It can be used, for example, in +// setup() before printing to ensure that an application on the host is +// actually ready to receive and display the data. +// We add a short delay before returning to fix a bug observed by Federico +// where the port is configured (lineState != 0) but not quite opened. +Serial_::operator bool() { + bool result = false; + if (_usbLineInfo.lineState > 0) + result = true; + delay(10); + return result; +} + +unsigned long Serial_::baud() { + // Disable interrupts while reading a multi-byte value + uint32_t baudrate; + ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { + baudrate = _usbLineInfo.dwDTERate; + } + return baudrate; +} + +uint8_t Serial_::stopbits() { + return _usbLineInfo.bCharFormat; +} + +uint8_t Serial_::paritytype() { + return _usbLineInfo.bParityType; +} + +uint8_t Serial_::numbits() { + return _usbLineInfo.bDataBits; +} + +bool Serial_::dtr() { + return _usbLineInfo.lineState & 0x1; +} + +bool Serial_::rts() { + return _usbLineInfo.lineState & 0x2; +} + +int32_t Serial_::readBreak() { + int32_t ret; + // Disable IRQs while reading and clearing breakValue to make + // sure we don't overwrite a value just set by the ISR. + ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { + ret = breakValue; + breakValue = -1; + } + return ret; +} + +Serial_ Serial; + +#endif /* if defined(USBCON) */ diff --git a/external/arduino/avr/cores/arduino/Client.h b/external/arduino/avr/cores/arduino/Client.h new file mode 100644 index 000000000..b8e5d935f --- /dev/null +++ b/external/arduino/avr/cores/arduino/Client.h @@ -0,0 +1,45 @@ +/* + Client.h - Base class that provides Client + Copyright (c) 2011 Adrian McEwen. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef client_h +#define client_h +#include "Print.h" +#include "Stream.h" +#include "IPAddress.h" + +class Client : public Stream { + +public: + virtual int connect(IPAddress ip, uint16_t port) =0; + virtual int connect(const char *host, uint16_t port) =0; + virtual size_t write(uint8_t) =0; + virtual size_t write(const uint8_t *buf, size_t size) =0; + virtual int available() = 0; + virtual int read() = 0; + virtual int read(uint8_t *buf, size_t size) = 0; + virtual int peek() = 0; + virtual void flush() = 0; + virtual void stop() = 0; + virtual uint8_t connected() = 0; + virtual operator bool() = 0; +protected: + uint8_t* rawIPAddress(IPAddress& addr) { return addr.raw_address(); }; +}; + +#endif diff --git a/external/arduino/avr/cores/arduino/HardwareSerial.cpp b/external/arduino/avr/cores/arduino/HardwareSerial.cpp new file mode 100644 index 000000000..e99d503d8 --- /dev/null +++ b/external/arduino/avr/cores/arduino/HardwareSerial.cpp @@ -0,0 +1,281 @@ +/* + HardwareSerial.cpp - Hardware serial library for Wiring + Copyright (c) 2006 Nicholas Zambetti. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Modified 23 November 2006 by David A. Mellis + Modified 28 September 2010 by Mark Sproul + Modified 14 August 2012 by Alarus + Modified 3 December 2013 by Matthijs Kooijman +*/ + +#include +#include +#include +#include +#include +#include "Arduino.h" + +#include "HardwareSerial.h" +#include "HardwareSerial_private.h" + +// this next line disables the entire HardwareSerial.cpp, +// this is so I can support Attiny series and any other chip without a uart +#if defined(HAVE_HWSERIAL0) || defined(HAVE_HWSERIAL1) || defined(HAVE_HWSERIAL2) || defined(HAVE_HWSERIAL3) + +// SerialEvent functions are weak, so when the user doesn't define them, +// the linker just sets their address to 0 (which is checked below). +// The Serialx_available is just a wrapper around Serialx.available(), +// but we can refer to it weakly so we don't pull in the entire +// HardwareSerial instance if the user doesn't also refer to it. +#if defined(HAVE_HWSERIAL0) + void serialEvent() __attribute__((weak)); + bool Serial0_available() __attribute__((weak)); +#endif + +#if defined(HAVE_HWSERIAL1) + void serialEvent1() __attribute__((weak)); + bool Serial1_available() __attribute__((weak)); +#endif + +#if defined(HAVE_HWSERIAL2) + void serialEvent2() __attribute__((weak)); + bool Serial2_available() __attribute__((weak)); +#endif + +#if defined(HAVE_HWSERIAL3) + void serialEvent3() __attribute__((weak)); + bool Serial3_available() __attribute__((weak)); +#endif + +void serialEventRun(void) +{ +#if defined(HAVE_HWSERIAL0) + if (Serial0_available && serialEvent && Serial0_available()) serialEvent(); +#endif +#if defined(HAVE_HWSERIAL1) + if (Serial1_available && serialEvent1 && Serial1_available()) serialEvent1(); +#endif +#if defined(HAVE_HWSERIAL2) + if (Serial2_available && serialEvent2 && Serial2_available()) serialEvent2(); +#endif +#if defined(HAVE_HWSERIAL3) + if (Serial3_available && serialEvent3 && Serial3_available()) serialEvent3(); +#endif +} + +// macro to guard critical sections when needed for large TX buffer sizes +#if (SERIAL_TX_BUFFER_SIZE>256) +#define TX_BUFFER_ATOMIC ATOMIC_BLOCK(ATOMIC_RESTORESTATE) +#else +#define TX_BUFFER_ATOMIC +#endif + +// Actual interrupt handlers ////////////////////////////////////////////////////////////// + +void HardwareSerial::_tx_udr_empty_irq(void) +{ + // If interrupts are enabled, there must be more data in the output + // buffer. Send the next byte + unsigned char c = _tx_buffer[_tx_buffer_tail]; + _tx_buffer_tail = (_tx_buffer_tail + 1) % SERIAL_TX_BUFFER_SIZE; + + *_udr = c; + + // clear the TXC bit -- "can be cleared by writing a one to its bit + // location". This makes sure flush() won't return until the bytes + // actually got written. Other r/w bits are preserved, and zeroes + // written to the rest. + +#ifdef MPCM0 + *_ucsra = ((*_ucsra) & ((1 << U2X0) | (1 << MPCM0))) | (1 << TXC0); +#else + *_ucsra = ((*_ucsra) & ((1 << U2X0) | (1 << TXC0))); +#endif + + if (_tx_buffer_head == _tx_buffer_tail) { + // Buffer empty, so disable interrupts + cbi(*_ucsrb, UDRIE0); + } +} + +// Public Methods ////////////////////////////////////////////////////////////// + +void HardwareSerial::begin(unsigned long baud, byte config) +{ + // Try u2x mode first + uint16_t baud_setting = (F_CPU / 4 / baud - 1) / 2; + *_ucsra = 1 << U2X0; + + // hardcoded exception for 57600 for compatibility with the bootloader + // shipped with the Duemilanove and previous boards and the firmware + // on the 8U2 on the Uno and Mega 2560. Also, The baud_setting cannot + // be > 4095, so switch back to non-u2x mode if the baud rate is too + // low. + if (((F_CPU == 16000000UL) && (baud == 57600)) || (baud_setting >4095)) + { + *_ucsra = 0; + baud_setting = (F_CPU / 8 / baud - 1) / 2; + } + + // assign the baud_setting, a.k.a. ubrr (USART Baud Rate Register) + *_ubrrh = baud_setting >> 8; + *_ubrrl = baud_setting; + + _written = false; + + //set the data bits, parity, and stop bits +#if defined(__AVR_ATmega8__) + config |= 0x80; // select UCSRC register (shared with UBRRH) +#endif + *_ucsrc = config; + + sbi(*_ucsrb, RXEN0); + sbi(*_ucsrb, TXEN0); + sbi(*_ucsrb, RXCIE0); + cbi(*_ucsrb, UDRIE0); +} + +void HardwareSerial::end() +{ + // wait for transmission of outgoing data + flush(); + + cbi(*_ucsrb, RXEN0); + cbi(*_ucsrb, TXEN0); + cbi(*_ucsrb, RXCIE0); + cbi(*_ucsrb, UDRIE0); + + // clear any received data + _rx_buffer_head = _rx_buffer_tail; +} + +int HardwareSerial::available(void) +{ + return ((unsigned int)(SERIAL_RX_BUFFER_SIZE + _rx_buffer_head - _rx_buffer_tail)) % SERIAL_RX_BUFFER_SIZE; +} + +int HardwareSerial::peek(void) +{ + if (_rx_buffer_head == _rx_buffer_tail) { + return -1; + } else { + return _rx_buffer[_rx_buffer_tail]; + } +} + +int HardwareSerial::read(void) +{ + // if the head isn't ahead of the tail, we don't have any characters + if (_rx_buffer_head == _rx_buffer_tail) { + return -1; + } else { + unsigned char c = _rx_buffer[_rx_buffer_tail]; + _rx_buffer_tail = (rx_buffer_index_t)(_rx_buffer_tail + 1) % SERIAL_RX_BUFFER_SIZE; + return c; + } +} + +int HardwareSerial::availableForWrite(void) +{ + tx_buffer_index_t head; + tx_buffer_index_t tail; + + TX_BUFFER_ATOMIC { + head = _tx_buffer_head; + tail = _tx_buffer_tail; + } + if (head >= tail) return SERIAL_TX_BUFFER_SIZE - 1 - head + tail; + return tail - head - 1; +} + +void HardwareSerial::flush() +{ + // If we have never written a byte, no need to flush. This special + // case is needed since there is no way to force the TXC (transmit + // complete) bit to 1 during initialization + if (!_written) + return; + + while (bit_is_set(*_ucsrb, UDRIE0) || bit_is_clear(*_ucsra, TXC0)) { + if (bit_is_clear(SREG, SREG_I) && bit_is_set(*_ucsrb, UDRIE0)) + // Interrupts are globally disabled, but the DR empty + // interrupt should be enabled, so poll the DR empty flag to + // prevent deadlock + if (bit_is_set(*_ucsra, UDRE0)) + _tx_udr_empty_irq(); + } + // If we get here, nothing is queued anymore (DRIE is disabled) and + // the hardware finished tranmission (TXC is set). +} + +size_t HardwareSerial::write(uint8_t c) +{ + _written = true; + // If the buffer and the data register is empty, just write the byte + // to the data register and be done. This shortcut helps + // significantly improve the effective datarate at high (> + // 500kbit/s) bitrates, where interrupt overhead becomes a slowdown. + if (_tx_buffer_head == _tx_buffer_tail && bit_is_set(*_ucsra, UDRE0)) { + // If TXC is cleared before writing UDR and the previous byte + // completes before writing to UDR, TXC will be set but a byte + // is still being transmitted causing flush() to return too soon. + // So writing UDR must happen first. + // Writing UDR and clearing TC must be done atomically, otherwise + // interrupts might delay the TXC clear so the byte written to UDR + // is transmitted (setting TXC) before clearing TXC. Then TXC will + // be cleared when no bytes are left, causing flush() to hang + ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { + *_udr = c; +#ifdef MPCM0 + *_ucsra = ((*_ucsra) & ((1 << U2X0) | (1 << MPCM0))) | (1 << TXC0); +#else + *_ucsra = ((*_ucsra) & ((1 << U2X0) | (1 << TXC0))); +#endif + } + return 1; + } + tx_buffer_index_t i = (_tx_buffer_head + 1) % SERIAL_TX_BUFFER_SIZE; + + // If the output buffer is full, there's nothing for it other than to + // wait for the interrupt handler to empty it a bit + while (i == _tx_buffer_tail) { + if (bit_is_clear(SREG, SREG_I)) { + // Interrupts are disabled, so we'll have to poll the data + // register empty flag ourselves. If it is set, pretend an + // interrupt has happened and call the handler to free up + // space for us. + if(bit_is_set(*_ucsra, UDRE0)) + _tx_udr_empty_irq(); + } else { + // nop, the interrupt handler will free up space for us + } + } + + _tx_buffer[_tx_buffer_head] = c; + + // make atomic to prevent execution of ISR between setting the + // head pointer and setting the interrupt flag resulting in buffer + // retransmission + ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { + _tx_buffer_head = i; + sbi(*_ucsrb, UDRIE0); + } + + return 1; +} + +#endif // whole file diff --git a/external/arduino/avr/cores/arduino/HardwareSerial.h b/external/arduino/avr/cores/arduino/HardwareSerial.h new file mode 100644 index 000000000..17000c2cc --- /dev/null +++ b/external/arduino/avr/cores/arduino/HardwareSerial.h @@ -0,0 +1,161 @@ +/* + HardwareSerial.h - Hardware serial library for Wiring + Copyright (c) 2006 Nicholas Zambetti. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Modified 28 September 2010 by Mark Sproul + Modified 14 August 2012 by Alarus + Modified 3 December 2013 by Matthijs Kooijman +*/ + +#ifndef HardwareSerial_h +#define HardwareSerial_h + +#include + +#include "Stream.h" + +// Define constants and variables for buffering incoming serial data. We're +// using a ring buffer (I think), in which head is the index of the location +// to which to write the next incoming character and tail is the index of the +// location from which to read. +// NOTE: a "power of 2" buffer size is reccomended to dramatically +// optimize all the modulo operations for ring buffers. +// WARNING: When buffer sizes are increased to > 256, the buffer index +// variables are automatically increased in size, but the extra +// atomicity guards needed for that are not implemented. This will +// often work, but occasionally a race condition can occur that makes +// Serial behave erratically. See https://github.com/arduino/Arduino/issues/2405 +#if !defined(SERIAL_TX_BUFFER_SIZE) +#if ((RAMEND - RAMSTART) < 1023) +#define SERIAL_TX_BUFFER_SIZE 16 +#else +#define SERIAL_TX_BUFFER_SIZE 64 +#endif +#endif +#if !defined(SERIAL_RX_BUFFER_SIZE) +#if ((RAMEND - RAMSTART) < 1023) +#define SERIAL_RX_BUFFER_SIZE 16 +#else +#define SERIAL_RX_BUFFER_SIZE 64 +#endif +#endif +#if (SERIAL_TX_BUFFER_SIZE>256) +typedef uint16_t tx_buffer_index_t; +#else +typedef uint8_t tx_buffer_index_t; +#endif +#if (SERIAL_RX_BUFFER_SIZE>256) +typedef uint16_t rx_buffer_index_t; +#else +typedef uint8_t rx_buffer_index_t; +#endif + +// Define config for Serial.begin(baud, config); +#define SERIAL_5N1 0x00 +#define SERIAL_6N1 0x02 +#define SERIAL_7N1 0x04 +#define SERIAL_8N1 0x06 +#define SERIAL_5N2 0x08 +#define SERIAL_6N2 0x0A +#define SERIAL_7N2 0x0C +#define SERIAL_8N2 0x0E +#define SERIAL_5E1 0x20 +#define SERIAL_6E1 0x22 +#define SERIAL_7E1 0x24 +#define SERIAL_8E1 0x26 +#define SERIAL_5E2 0x28 +#define SERIAL_6E2 0x2A +#define SERIAL_7E2 0x2C +#define SERIAL_8E2 0x2E +#define SERIAL_5O1 0x30 +#define SERIAL_6O1 0x32 +#define SERIAL_7O1 0x34 +#define SERIAL_8O1 0x36 +#define SERIAL_5O2 0x38 +#define SERIAL_6O2 0x3A +#define SERIAL_7O2 0x3C +#define SERIAL_8O2 0x3E + +class HardwareSerial : public Stream +{ + protected: + volatile uint8_t * const _ubrrh; + volatile uint8_t * const _ubrrl; + volatile uint8_t * const _ucsra; + volatile uint8_t * const _ucsrb; + volatile uint8_t * const _ucsrc; + volatile uint8_t * const _udr; + // Has any byte been written to the UART since begin() + bool _written; + + volatile rx_buffer_index_t _rx_buffer_head; + volatile rx_buffer_index_t _rx_buffer_tail; + volatile tx_buffer_index_t _tx_buffer_head; + volatile tx_buffer_index_t _tx_buffer_tail; + + // Don't put any members after these buffers, since only the first + // 32 bytes of this struct can be accessed quickly using the ldd + // instruction. + unsigned char _rx_buffer[SERIAL_RX_BUFFER_SIZE]; + unsigned char _tx_buffer[SERIAL_TX_BUFFER_SIZE]; + + public: + inline HardwareSerial( + volatile uint8_t *ubrrh, volatile uint8_t *ubrrl, + volatile uint8_t *ucsra, volatile uint8_t *ucsrb, + volatile uint8_t *ucsrc, volatile uint8_t *udr); + void begin(unsigned long baud) { begin(baud, SERIAL_8N1); } + void begin(unsigned long, uint8_t); + void end(); + virtual int available(void); + virtual int peek(void); + virtual int read(void); + virtual int availableForWrite(void); + virtual void flush(void); + virtual size_t write(uint8_t); + inline size_t write(unsigned long n) { return write((uint8_t)n); } + inline size_t write(long n) { return write((uint8_t)n); } + inline size_t write(unsigned int n) { return write((uint8_t)n); } + inline size_t write(int n) { return write((uint8_t)n); } + using Print::write; // pull in write(str) and write(buf, size) from Print + operator bool() { return true; } + + // Interrupt handlers - Not intended to be called externally + inline void _rx_complete_irq(void); + void _tx_udr_empty_irq(void); +}; + +#if defined(UBRRH) || defined(UBRR0H) + extern HardwareSerial Serial; + #define HAVE_HWSERIAL0 +#endif +#if defined(UBRR1H) + extern HardwareSerial Serial1; + #define HAVE_HWSERIAL1 +#endif +#if defined(UBRR2H) + extern HardwareSerial Serial2; + #define HAVE_HWSERIAL2 +#endif +#if defined(UBRR3H) + extern HardwareSerial Serial3; + #define HAVE_HWSERIAL3 +#endif + +extern void serialEventRun(void) __attribute__((weak)); + +#endif diff --git a/external/arduino/avr/cores/arduino/HardwareSerial0.cpp b/external/arduino/avr/cores/arduino/HardwareSerial0.cpp new file mode 100644 index 000000000..7d47ed2f6 --- /dev/null +++ b/external/arduino/avr/cores/arduino/HardwareSerial0.cpp @@ -0,0 +1,79 @@ +/* + HardwareSerial0.cpp - Hardware serial library for Wiring + Copyright (c) 2006 Nicholas Zambetti. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Modified 23 November 2006 by David A. Mellis + Modified 28 September 2010 by Mark Sproul + Modified 14 August 2012 by Alarus + Modified 3 December 2013 by Matthijs Kooijman +*/ + +#include "Arduino.h" +#include "HardwareSerial.h" +#include "HardwareSerial_private.h" + +// Each HardwareSerial is defined in its own file, since the linker pulls +// in the entire file when any element inside is used. --gc-sections can +// additionally cause unused symbols to be dropped, but ISRs have the +// "used" attribute so are never dropped and they keep the +// HardwareSerial instance in as well. Putting each instance in its own +// file prevents the linker from pulling in any unused instances in the +// first place. + +#if defined(HAVE_HWSERIAL0) + +#if defined(USART_RX_vect) + ISR(USART_RX_vect) +#elif defined(USART0_RX_vect) + ISR(USART0_RX_vect) +#elif defined(USART_RXC_vect) + ISR(USART_RXC_vect) // ATmega8 +#else + #error "Don't know what the Data Received vector is called for Serial" +#endif + { + Serial._rx_complete_irq(); + } + +#if defined(UART0_UDRE_vect) +ISR(UART0_UDRE_vect) +#elif defined(UART_UDRE_vect) +ISR(UART_UDRE_vect) +#elif defined(USART0_UDRE_vect) +ISR(USART0_UDRE_vect) +#elif defined(USART_UDRE_vect) +ISR(USART_UDRE_vect) +#else + #error "Don't know what the Data Register Empty vector is called for Serial" +#endif +{ + Serial._tx_udr_empty_irq(); +} + +#if defined(UBRRH) && defined(UBRRL) + HardwareSerial Serial(&UBRRH, &UBRRL, &UCSRA, &UCSRB, &UCSRC, &UDR); +#else + HardwareSerial Serial(&UBRR0H, &UBRR0L, &UCSR0A, &UCSR0B, &UCSR0C, &UDR0); +#endif + +// Function that can be weakly referenced by serialEventRun to prevent +// pulling in this file if it's not otherwise used. +bool Serial0_available() { + return Serial.available(); +} + +#endif // HAVE_HWSERIAL0 diff --git a/external/arduino/avr/cores/arduino/HardwareSerial1.cpp b/external/arduino/avr/cores/arduino/HardwareSerial1.cpp new file mode 100644 index 000000000..a345cdbbc --- /dev/null +++ b/external/arduino/avr/cores/arduino/HardwareSerial1.cpp @@ -0,0 +1,69 @@ +/* + HardwareSerial1.cpp - Hardware serial library for Wiring + Copyright (c) 2006 Nicholas Zambetti. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Modified 23 November 2006 by David A. Mellis + Modified 28 September 2010 by Mark Sproul + Modified 14 August 2012 by Alarus + Modified 3 December 2013 by Matthijs Kooijman +*/ + +#include "Arduino.h" +#include "HardwareSerial.h" +#include "HardwareSerial_private.h" + +// Each HardwareSerial is defined in its own file, since the linker pulls +// in the entire file when any element inside is used. --gc-sections can +// additionally cause unused symbols to be dropped, but ISRs have the +// "used" attribute so are never dropped and they keep the +// HardwareSerial instance in as well. Putting each instance in its own +// file prevents the linker from pulling in any unused instances in the +// first place. + +#if defined(HAVE_HWSERIAL1) + +#if defined(UART1_RX_vect) +ISR(UART1_RX_vect) +#elif defined(USART1_RX_vect) +ISR(USART1_RX_vect) +#else +#error "Don't know what the Data Register Empty vector is called for Serial1" +#endif +{ + Serial1._rx_complete_irq(); +} + +#if defined(UART1_UDRE_vect) +ISR(UART1_UDRE_vect) +#elif defined(USART1_UDRE_vect) +ISR(USART1_UDRE_vect) +#else +#error "Don't know what the Data Register Empty vector is called for Serial1" +#endif +{ + Serial1._tx_udr_empty_irq(); +} + +HardwareSerial Serial1(&UBRR1H, &UBRR1L, &UCSR1A, &UCSR1B, &UCSR1C, &UDR1); + +// Function that can be weakly referenced by serialEventRun to prevent +// pulling in this file if it's not otherwise used. +bool Serial1_available() { + return Serial1.available(); +} + +#endif // HAVE_HWSERIAL1 diff --git a/external/arduino/avr/cores/arduino/HardwareSerial2.cpp b/external/arduino/avr/cores/arduino/HardwareSerial2.cpp new file mode 100644 index 000000000..8e433b6fc --- /dev/null +++ b/external/arduino/avr/cores/arduino/HardwareSerial2.cpp @@ -0,0 +1,57 @@ +/* + HardwareSerial2.cpp - Hardware serial library for Wiring + Copyright (c) 2006 Nicholas Zambetti. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Modified 23 November 2006 by David A. Mellis + Modified 28 September 2010 by Mark Sproul + Modified 14 August 2012 by Alarus + Modified 3 December 2013 by Matthijs Kooijman +*/ + +#include "Arduino.h" +#include "HardwareSerial.h" +#include "HardwareSerial_private.h" + +// Each HardwareSerial is defined in its own file, since the linker pulls +// in the entire file when any element inside is used. --gc-sections can +// additionally cause unused symbols to be dropped, but ISRs have the +// "used" attribute so are never dropped and they keep the +// HardwareSerial instance in as well. Putting each instance in its own +// file prevents the linker from pulling in any unused instances in the +// first place. + +#if defined(HAVE_HWSERIAL2) + +ISR(USART2_RX_vect) +{ + Serial2._rx_complete_irq(); +} + +ISR(USART2_UDRE_vect) +{ + Serial2._tx_udr_empty_irq(); +} + +HardwareSerial Serial2(&UBRR2H, &UBRR2L, &UCSR2A, &UCSR2B, &UCSR2C, &UDR2); + +// Function that can be weakly referenced by serialEventRun to prevent +// pulling in this file if it's not otherwise used. +bool Serial2_available() { + return Serial2.available(); +} + +#endif // HAVE_HWSERIAL2 diff --git a/external/arduino/avr/cores/arduino/HardwareSerial3.cpp b/external/arduino/avr/cores/arduino/HardwareSerial3.cpp new file mode 100644 index 000000000..26aaee81d --- /dev/null +++ b/external/arduino/avr/cores/arduino/HardwareSerial3.cpp @@ -0,0 +1,57 @@ +/* + HardwareSerial3.cpp - Hardware serial library for Wiring + Copyright (c) 2006 Nicholas Zambetti. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Modified 23 November 2006 by David A. Mellis + Modified 28 September 2010 by Mark Sproul + Modified 14 August 2012 by Alarus + Modified 3 December 2013 by Matthijs Kooijman +*/ + +#include "Arduino.h" +#include "HardwareSerial.h" +#include "HardwareSerial_private.h" + +// Each HardwareSerial is defined in its own file, since the linker pulls +// in the entire file when any element inside is used. --gc-sections can +// additionally cause unused symbols to be dropped, but ISRs have the +// "used" attribute so are never dropped and they keep the +// HardwareSerial instance in as well. Putting each instance in its own +// file prevents the linker from pulling in any unused instances in the +// first place. + +#if defined(HAVE_HWSERIAL3) + +ISR(USART3_RX_vect) +{ + Serial3._rx_complete_irq(); +} + +ISR(USART3_UDRE_vect) +{ + Serial3._tx_udr_empty_irq(); +} + +HardwareSerial Serial3(&UBRR3H, &UBRR3L, &UCSR3A, &UCSR3B, &UCSR3C, &UDR3); + +// Function that can be weakly referenced by serialEventRun to prevent +// pulling in this file if it's not otherwise used. +bool Serial3_available() { + return Serial3.available(); +} + +#endif // HAVE_HWSERIAL3 diff --git a/external/arduino/avr/cores/arduino/HardwareSerial_private.h b/external/arduino/avr/cores/arduino/HardwareSerial_private.h new file mode 100644 index 000000000..761a5e559 --- /dev/null +++ b/external/arduino/avr/cores/arduino/HardwareSerial_private.h @@ -0,0 +1,123 @@ +/* + HardwareSerial_private.h - Hardware serial library for Wiring + Copyright (c) 2006 Nicholas Zambetti. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Modified 23 November 2006 by David A. Mellis + Modified 28 September 2010 by Mark Sproul + Modified 14 August 2012 by Alarus +*/ + +#include "wiring_private.h" + +// this next line disables the entire HardwareSerial.cpp, +// this is so I can support Attiny series and any other chip without a uart +#if defined(HAVE_HWSERIAL0) || defined(HAVE_HWSERIAL1) || defined(HAVE_HWSERIAL2) || defined(HAVE_HWSERIAL3) + +// Ensure that the various bit positions we use are available with a 0 +// postfix, so we can always use the values for UART0 for all UARTs. The +// alternative, passing the various values for each UART to the +// HardwareSerial constructor also works, but makes the code bigger and +// slower. +#if !defined(TXC0) +#if defined(TXC) +// Some chips like ATmega8 don't have UPE, only PE. The other bits are +// named as expected. +#if !defined(UPE) && defined(PE) +#define UPE PE +#endif +// On ATmega8, the uart and its bits are not numbered, so there is no TXC0 etc. +#define TXC0 TXC +#define RXEN0 RXEN +#define TXEN0 TXEN +#define RXCIE0 RXCIE +#define UDRIE0 UDRIE +#define U2X0 U2X +#define UPE0 UPE +#define UDRE0 UDRE +#elif defined(TXC1) +// Some devices have uart1 but no uart0 +#define TXC0 TXC1 +#define RXEN0 RXEN1 +#define TXEN0 TXEN1 +#define RXCIE0 RXCIE1 +#define UDRIE0 UDRIE1 +#define U2X0 U2X1 +#define UPE0 UPE1 +#define UDRE0 UDRE1 +#else +#error No UART found in HardwareSerial.cpp +#endif +#endif // !defined TXC0 + +// Check at compiletime that it is really ok to use the bit positions of +// UART0 for the other UARTs as well, in case these values ever get +// changed for future hardware. +#if defined(TXC1) && (TXC1 != TXC0 || RXEN1 != RXEN0 || RXCIE1 != RXCIE0 || \ + UDRIE1 != UDRIE0 || U2X1 != U2X0 || UPE1 != UPE0 || \ + UDRE1 != UDRE0) +#error "Not all bit positions for UART1 are the same as for UART0" +#endif +#if defined(TXC2) && (TXC2 != TXC0 || RXEN2 != RXEN0 || RXCIE2 != RXCIE0 || \ + UDRIE2 != UDRIE0 || U2X2 != U2X0 || UPE2 != UPE0 || \ + UDRE2 != UDRE0) +#error "Not all bit positions for UART2 are the same as for UART0" +#endif +#if defined(TXC3) && (TXC3 != TXC0 || RXEN3 != RXEN0 || RXCIE3 != RXCIE0 || \ + UDRIE3 != UDRIE0 || U3X3 != U3X0 || UPE3 != UPE0 || \ + UDRE3 != UDRE0) +#error "Not all bit positions for UART3 are the same as for UART0" +#endif + +// Constructors //////////////////////////////////////////////////////////////// + +HardwareSerial::HardwareSerial( + volatile uint8_t *ubrrh, volatile uint8_t *ubrrl, + volatile uint8_t *ucsra, volatile uint8_t *ucsrb, + volatile uint8_t *ucsrc, volatile uint8_t *udr) : + _ubrrh(ubrrh), _ubrrl(ubrrl), + _ucsra(ucsra), _ucsrb(ucsrb), _ucsrc(ucsrc), + _udr(udr), + _rx_buffer_head(0), _rx_buffer_tail(0), + _tx_buffer_head(0), _tx_buffer_tail(0) +{ +} + +// Actual interrupt handlers ////////////////////////////////////////////////////////////// + +void HardwareSerial::_rx_complete_irq(void) +{ + if (bit_is_clear(*_ucsra, UPE0)) { + // No Parity error, read byte and store it in the buffer if there is + // room + unsigned char c = *_udr; + rx_buffer_index_t i = (unsigned int)(_rx_buffer_head + 1) % SERIAL_RX_BUFFER_SIZE; + + // if we should be storing the received character into the location + // just before the tail (meaning that the head would advance to the + // current location of the tail), we're about to overflow the buffer + // and so we don't write the character or advance the head. + if (i != _rx_buffer_tail) { + _rx_buffer[_rx_buffer_head] = c; + _rx_buffer_head = i; + } + } else { + // Parity error, read byte but discard it + *_udr; + }; +} + +#endif // whole file diff --git a/external/arduino/avr/cores/arduino/IPAddress.cpp b/external/arduino/avr/cores/arduino/IPAddress.cpp new file mode 100644 index 000000000..d9fe5be1d --- /dev/null +++ b/external/arduino/avr/cores/arduino/IPAddress.cpp @@ -0,0 +1,114 @@ +/* + IPAddress.cpp - Base class that provides IPAddress + Copyright (c) 2011 Adrian McEwen. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include + +IPAddress::IPAddress() +{ + _address.dword = 0; +} + +IPAddress::IPAddress(uint8_t first_octet, uint8_t second_octet, uint8_t third_octet, uint8_t fourth_octet) +{ + _address.bytes[0] = first_octet; + _address.bytes[1] = second_octet; + _address.bytes[2] = third_octet; + _address.bytes[3] = fourth_octet; +} + +IPAddress::IPAddress(uint32_t address) +{ + _address.dword = address; +} + +IPAddress::IPAddress(const uint8_t *address) +{ + memcpy(_address.bytes, address, sizeof(_address.bytes)); +} + +bool IPAddress::fromString(const char *address) +{ + uint16_t acc = 0; // Accumulator + uint8_t dots = 0; + + while (*address) + { + char c = *address++; + if (c >= '0' && c <= '9') + { + acc = acc * 10 + (c - '0'); + if (acc > 255) { + // Value out of [0..255] range + return false; + } + } + else if (c == '.') + { + if (dots == 3) { + // Too much dots (there must be 3 dots) + return false; + } + _address.bytes[dots++] = acc; + acc = 0; + } + else + { + // Invalid char + return false; + } + } + + if (dots != 3) { + // Too few dots (there must be 3 dots) + return false; + } + _address.bytes[3] = acc; + return true; +} + +IPAddress& IPAddress::operator=(const uint8_t *address) +{ + memcpy(_address.bytes, address, sizeof(_address.bytes)); + return *this; +} + +IPAddress& IPAddress::operator=(uint32_t address) +{ + _address.dword = address; + return *this; +} + +bool IPAddress::operator==(const uint8_t* addr) const +{ + return memcmp(addr, _address.bytes, sizeof(_address.bytes)) == 0; +} + +size_t IPAddress::printTo(Print& p) const +{ + size_t n = 0; + for (int i =0; i < 3; i++) + { + n += p.print(_address.bytes[i], DEC); + n += p.print('.'); + } + n += p.print(_address.bytes[3], DEC); + return n; +} + diff --git a/external/arduino/avr/cores/arduino/IPAddress.h b/external/arduino/avr/cores/arduino/IPAddress.h new file mode 100644 index 000000000..d762f2c02 --- /dev/null +++ b/external/arduino/avr/cores/arduino/IPAddress.h @@ -0,0 +1,78 @@ +/* + IPAddress.h - Base class that provides IPAddress + Copyright (c) 2011 Adrian McEwen. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef IPAddress_h +#define IPAddress_h + +#include +#include "Printable.h" +#include "WString.h" + +// A class to make it easier to handle and pass around IP addresses + +class IPAddress : public Printable { +private: + union { + uint8_t bytes[4]; // IPv4 address + uint32_t dword; + } _address; + + // Access the raw byte array containing the address. Because this returns a pointer + // to the internal structure rather than a copy of the address this function should only + // be used when you know that the usage of the returned uint8_t* will be transient and not + // stored. + uint8_t* raw_address() { return _address.bytes; }; + +public: + // Constructors + IPAddress(); + IPAddress(uint8_t first_octet, uint8_t second_octet, uint8_t third_octet, uint8_t fourth_octet); + IPAddress(uint32_t address); + IPAddress(const uint8_t *address); + + bool fromString(const char *address); + bool fromString(const String &address) { return fromString(address.c_str()); } + + // Overloaded cast operator to allow IPAddress objects to be used where a pointer + // to a four-byte uint8_t array is expected + operator uint32_t() const { return _address.dword; }; + bool operator==(const IPAddress& addr) const { return _address.dword == addr._address.dword; }; + bool operator==(const uint8_t* addr) const; + + // Overloaded index operator to allow getting and setting individual octets of the address + uint8_t operator[](int index) const { return _address.bytes[index]; }; + uint8_t& operator[](int index) { return _address.bytes[index]; }; + + // Overloaded copy operators to allow initialisation of IPAddress objects from other types + IPAddress& operator=(const uint8_t *address); + IPAddress& operator=(uint32_t address); + + virtual size_t printTo(Print& p) const; + + friend class EthernetClass; + friend class UDP; + friend class Client; + friend class Server; + friend class DhcpClass; + friend class DNSClient; +}; + +const IPAddress INADDR_NONE(0,0,0,0); + +#endif diff --git a/external/arduino/avr/cores/arduino/PluggableUSB.cpp b/external/arduino/avr/cores/arduino/PluggableUSB.cpp new file mode 100644 index 000000000..c489d9f1a --- /dev/null +++ b/external/arduino/avr/cores/arduino/PluggableUSB.cpp @@ -0,0 +1,115 @@ +/* + PluggableUSB.cpp + Copyright (c) 2015 Arduino LLC + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include "USBAPI.h" +#include "PluggableUSB.h" + +#if defined(USBCON) +#ifdef PLUGGABLE_USB_ENABLED + +extern uint8_t _initEndpoints[]; + +int PluggableUSB_::getInterface(uint8_t* interfaceCount) +{ + int sent = 0; + PluggableUSBModule* node; + for (node = rootNode; node; node = node->next) { + int res = node->getInterface(interfaceCount); + if (res < 0) + return -1; + sent += res; + } + return sent; +} + +int PluggableUSB_::getDescriptor(USBSetup& setup) +{ + PluggableUSBModule* node; + for (node = rootNode; node; node = node->next) { + int ret = node->getDescriptor(setup); + // ret!=0 -> request has been processed + if (ret) + return ret; + } + return 0; +} + +void PluggableUSB_::getShortName(char *iSerialNum) +{ + PluggableUSBModule* node; + for (node = rootNode; node; node = node->next) { + iSerialNum += node->getShortName(iSerialNum); + } + *iSerialNum = 0; +} + +bool PluggableUSB_::setup(USBSetup& setup) +{ + PluggableUSBModule* node; + for (node = rootNode; node; node = node->next) { + if (node->setup(setup)) { + return true; + } + } + return false; +} + +bool PluggableUSB_::plug(PluggableUSBModule *node) +{ + if ((lastEp + node->numEndpoints) > USB_ENDPOINTS) { + return false; + } + + if (!rootNode) { + rootNode = node; + } else { + PluggableUSBModule *current = rootNode; + while (current->next) { + current = current->next; + } + current->next = node; + } + + node->pluggedInterface = lastIf; + node->pluggedEndpoint = lastEp; + lastIf += node->numInterfaces; + for (uint8_t i = 0; i < node->numEndpoints; i++) { + _initEndpoints[lastEp] = node->endpointType[i]; + lastEp++; + } + return true; + // restart USB layer??? +} + +PluggableUSB_& PluggableUSB() +{ + static PluggableUSB_ obj; + return obj; +} + +PluggableUSB_::PluggableUSB_() : lastIf(CDC_ACM_INTERFACE + CDC_INTERFACE_COUNT), + lastEp(CDC_FIRST_ENDPOINT + CDC_ENPOINT_COUNT), + rootNode(NULL) +{ + // Empty +} + +#endif + +#endif /* if defined(USBCON) */ diff --git a/external/arduino/avr/cores/arduino/PluggableUSB.h b/external/arduino/avr/cores/arduino/PluggableUSB.h new file mode 100644 index 000000000..507f0df9b --- /dev/null +++ b/external/arduino/avr/cores/arduino/PluggableUSB.h @@ -0,0 +1,74 @@ +/* + PluggableUSB.h + Copyright (c) 2015 Arduino LLC + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef PUSB_h +#define PUSB_h + +#include "USBAPI.h" +#include + +#if defined(USBCON) + +class PluggableUSBModule { +public: + PluggableUSBModule(uint8_t numEps, uint8_t numIfs, uint8_t *epType) : + numEndpoints(numEps), numInterfaces(numIfs), endpointType(epType) + { } + +protected: + virtual bool setup(USBSetup& setup) = 0; + virtual int getInterface(uint8_t* interfaceCount) = 0; + virtual int getDescriptor(USBSetup& setup) = 0; + virtual uint8_t getShortName(char *name) { name[0] = 'A'+pluggedInterface; return 1; } + + uint8_t pluggedInterface; + uint8_t pluggedEndpoint; + + const uint8_t numEndpoints; + const uint8_t numInterfaces; + const uint8_t *endpointType; + + PluggableUSBModule *next = NULL; + + friend class PluggableUSB_; +}; + +class PluggableUSB_ { +public: + PluggableUSB_(); + bool plug(PluggableUSBModule *node); + int getInterface(uint8_t* interfaceCount); + int getDescriptor(USBSetup& setup); + bool setup(USBSetup& setup); + void getShortName(char *iSerialNum); + +private: + uint8_t lastIf; + uint8_t lastEp; + PluggableUSBModule* rootNode; +}; + +// Replacement for global singleton. +// This function prevents static-initialization-order-fiasco +// https://isocpp.org/wiki/faq/ctors#static-init-order-on-first-use +PluggableUSB_& PluggableUSB(); + +#endif + +#endif diff --git a/external/arduino/avr/cores/arduino/Print.cpp b/external/arduino/avr/cores/arduino/Print.cpp new file mode 100644 index 000000000..1e4c99a65 --- /dev/null +++ b/external/arduino/avr/cores/arduino/Print.cpp @@ -0,0 +1,266 @@ +/* + Print.cpp - Base class that provides print() and println() + Copyright (c) 2008 David A. Mellis. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Modified 23 November 2006 by David A. Mellis + Modified 03 August 2015 by Chuck Todd + */ + +#include +#include +#include +#include +#include "Arduino.h" + +#include "Print.h" + +// Public Methods ////////////////////////////////////////////////////////////// + +/* default implementation: may be overridden */ +size_t Print::write(const uint8_t *buffer, size_t size) +{ + size_t n = 0; + while (size--) { + if (write(*buffer++)) n++; + else break; + } + return n; +} + +size_t Print::print(const __FlashStringHelper *ifsh) +{ + PGM_P p = reinterpret_cast(ifsh); + size_t n = 0; + while (1) { + unsigned char c = pgm_read_byte(p++); + if (c == 0) break; + if (write(c)) n++; + else break; + } + return n; +} + +size_t Print::print(const String &s) +{ + return write(s.c_str(), s.length()); +} + +size_t Print::print(const char str[]) +{ + return write(str); +} + +size_t Print::print(char c) +{ + return write(c); +} + +size_t Print::print(unsigned char b, int base) +{ + return print((unsigned long) b, base); +} + +size_t Print::print(int n, int base) +{ + return print((long) n, base); +} + +size_t Print::print(unsigned int n, int base) +{ + return print((unsigned long) n, base); +} + +size_t Print::print(long n, int base) +{ + if (base == 0) { + return write(n); + } else if (base == 10) { + if (n < 0) { + int t = print('-'); + n = -n; + return printNumber(n, 10) + t; + } + return printNumber(n, 10); + } else { + return printNumber(n, base); + } +} + +size_t Print::print(unsigned long n, int base) +{ + if (base == 0) return write(n); + else return printNumber(n, base); +} + +size_t Print::print(double n, int digits) +{ + return printFloat(n, digits); +} + +size_t Print::println(const __FlashStringHelper *ifsh) +{ + size_t n = print(ifsh); + n += println(); + return n; +} + +size_t Print::print(const Printable& x) +{ + return x.printTo(*this); +} + +size_t Print::println(void) +{ + return write("\r\n"); +} + +size_t Print::println(const String &s) +{ + size_t n = print(s); + n += println(); + return n; +} + +size_t Print::println(const char c[]) +{ + size_t n = print(c); + n += println(); + return n; +} + +size_t Print::println(char c) +{ + size_t n = print(c); + n += println(); + return n; +} + +size_t Print::println(unsigned char b, int base) +{ + size_t n = print(b, base); + n += println(); + return n; +} + +size_t Print::println(int num, int base) +{ + size_t n = print(num, base); + n += println(); + return n; +} + +size_t Print::println(unsigned int num, int base) +{ + size_t n = print(num, base); + n += println(); + return n; +} + +size_t Print::println(long num, int base) +{ + size_t n = print(num, base); + n += println(); + return n; +} + +size_t Print::println(unsigned long num, int base) +{ + size_t n = print(num, base); + n += println(); + return n; +} + +size_t Print::println(double num, int digits) +{ + size_t n = print(num, digits); + n += println(); + return n; +} + +size_t Print::println(const Printable& x) +{ + size_t n = print(x); + n += println(); + return n; +} + +// Private Methods ///////////////////////////////////////////////////////////// + +size_t Print::printNumber(unsigned long n, uint8_t base) +{ + char buf[8 * sizeof(long) + 1]; // Assumes 8-bit chars plus zero byte. + char *str = &buf[sizeof(buf) - 1]; + + *str = '\0'; + + // prevent crash if called with base == 1 + if (base < 2) base = 10; + + do { + char c = n % base; + n /= base; + + *--str = c < 10 ? c + '0' : c + 'A' - 10; + } while(n); + + return write(str); +} + +size_t Print::printFloat(double number, uint8_t digits) +{ + size_t n = 0; + + if (isnan(number)) return print("nan"); + if (isinf(number)) return print("inf"); + if (number > 4294967040.0) return print ("ovf"); // constant determined empirically + if (number <-4294967040.0) return print ("ovf"); // constant determined empirically + + // Handle negative numbers + if (number < 0.0) + { + n += print('-'); + number = -number; + } + + // Round correctly so that print(1.999, 2) prints as "2.00" + double rounding = 0.5; + for (uint8_t i=0; i 0) { + n += print('.'); + } + + // Extract digits from the remainder one at a time + while (digits-- > 0) + { + remainder *= 10.0; + unsigned int toPrint = (unsigned int)(remainder); + n += print(toPrint); + remainder -= toPrint; + } + + return n; +} diff --git a/external/arduino/avr/cores/arduino/Print.h b/external/arduino/avr/cores/arduino/Print.h new file mode 100644 index 000000000..058a2abbd --- /dev/null +++ b/external/arduino/avr/cores/arduino/Print.h @@ -0,0 +1,93 @@ +/* + Print.h - Base class that provides print() and println() + Copyright (c) 2008 David A. Mellis. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef Print_h +#define Print_h + +#include +#include // for size_t + +#include "WString.h" +#include "Printable.h" + +#define DEC 10 +#define HEX 16 +#define OCT 8 +#ifdef BIN // Prevent warnings if BIN is previously defined in "iotnx4.h" or similar +#undef BIN +#endif +#define BIN 2 + +class Print +{ + private: + int write_error; + size_t printNumber(unsigned long, uint8_t); + size_t printFloat(double, uint8_t); + protected: + void setWriteError(int err = 1) { write_error = err; } + public: + Print() : write_error(0) {} + + int getWriteError() { return write_error; } + void clearWriteError() { setWriteError(0); } + + virtual size_t write(uint8_t) = 0; + size_t write(const char *str) { + if (str == NULL) return 0; + return write((const uint8_t *)str, strlen(str)); + } + virtual size_t write(const uint8_t *buffer, size_t size); + size_t write(const char *buffer, size_t size) { + return write((const uint8_t *)buffer, size); + } + + // default to zero, meaning "a single write may block" + // should be overriden by subclasses with buffering + virtual int availableForWrite() { return 0; } + + size_t print(const __FlashStringHelper *); + size_t print(const String &); + size_t print(const char[]); + size_t print(char); + size_t print(unsigned char, int = DEC); + size_t print(int, int = DEC); + size_t print(unsigned int, int = DEC); + size_t print(long, int = DEC); + size_t print(unsigned long, int = DEC); + size_t print(double, int = 2); + size_t print(const Printable&); + + size_t println(const __FlashStringHelper *); + size_t println(const String &s); + size_t println(const char[]); + size_t println(char); + size_t println(unsigned char, int = DEC); + size_t println(int, int = DEC); + size_t println(unsigned int, int = DEC); + size_t println(long, int = DEC); + size_t println(unsigned long, int = DEC); + size_t println(double, int = 2); + size_t println(const Printable&); + size_t println(void); + + virtual void flush() { /* Empty implementation for backward compatibility */ } +}; + +#endif diff --git a/external/arduino/avr/cores/arduino/Printable.h b/external/arduino/avr/cores/arduino/Printable.h new file mode 100644 index 000000000..2a1b2e9f2 --- /dev/null +++ b/external/arduino/avr/cores/arduino/Printable.h @@ -0,0 +1,40 @@ +/* + Printable.h - Interface class that allows printing of complex types + Copyright (c) 2011 Adrian McEwen. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef Printable_h +#define Printable_h + +#include + +class Print; + +/** The Printable class provides a way for new classes to allow themselves to be printed. + By deriving from Printable and implementing the printTo method, it will then be possible + for users to print out instances of this class by passing them into the usual + Print::print and Print::println methods. +*/ + +class Printable +{ + public: + virtual size_t printTo(Print& p) const = 0; +}; + +#endif + diff --git a/external/arduino/avr/cores/arduino/Server.h b/external/arduino/avr/cores/arduino/Server.h new file mode 100644 index 000000000..69e3e39fe --- /dev/null +++ b/external/arduino/avr/cores/arduino/Server.h @@ -0,0 +1,30 @@ +/* + Server.h - Base class that provides Server + Copyright (c) 2011 Adrian McEwen. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef server_h +#define server_h + +#include "Print.h" + +class Server : public Print { +public: + virtual void begin() =0; +}; + +#endif diff --git a/external/arduino/avr/cores/arduino/Stream.cpp b/external/arduino/avr/cores/arduino/Stream.cpp new file mode 100644 index 000000000..9eff66382 --- /dev/null +++ b/external/arduino/avr/cores/arduino/Stream.cpp @@ -0,0 +1,318 @@ +/* + Stream.cpp - adds parsing methods to Stream class + Copyright (c) 2008 David A. Mellis. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Created July 2011 + parsing functions based on TextFinder library by Michael Margolis + + findMulti/findUntil routines written by Jim Leonard/Xuth + */ + +#include "Arduino.h" +#include "Stream.h" + +#define PARSE_TIMEOUT 1000 // default number of milli-seconds to wait + +// protected method to read stream with timeout +int Stream::timedRead() +{ + int c; + _startMillis = millis(); + do { + c = read(); + if (c >= 0) return c; + } while(millis() - _startMillis < _timeout); + return -1; // -1 indicates timeout +} + +// protected method to peek stream with timeout +int Stream::timedPeek() +{ + int c; + _startMillis = millis(); + do { + c = peek(); + if (c >= 0) return c; + } while(millis() - _startMillis < _timeout); + return -1; // -1 indicates timeout +} + +// returns peek of the next digit in the stream or -1 if timeout +// discards non-numeric characters +int Stream::peekNextDigit(LookaheadMode lookahead, bool detectDecimal) +{ + int c; + while (1) { + c = timedPeek(); + + if( c < 0 || + c == '-' || + (c >= '0' && c <= '9') || + (detectDecimal && c == '.')) return c; + + switch( lookahead ){ + case SKIP_NONE: return -1; // Fail code. + case SKIP_WHITESPACE: + switch( c ){ + case ' ': + case '\t': + case '\r': + case '\n': break; + default: return -1; // Fail code. + } + case SKIP_ALL: + break; + } + read(); // discard non-numeric + } +} + +// Public Methods +////////////////////////////////////////////////////////////// + +void Stream::setTimeout(unsigned long timeout) // sets the maximum number of milliseconds to wait +{ + _timeout = timeout; +} + + // find returns true if the target string is found +bool Stream::find(char *target) +{ + return findUntil(target, strlen(target), NULL, 0); +} + +// reads data from the stream until the target string of given length is found +// returns true if target string is found, false if timed out +bool Stream::find(char *target, size_t length) +{ + return findUntil(target, length, NULL, 0); +} + +// as find but search ends if the terminator string is found +bool Stream::findUntil(char *target, char *terminator) +{ + return findUntil(target, strlen(target), terminator, strlen(terminator)); +} + +// reads data from the stream until the target string of the given length is found +// search terminated if the terminator string is found +// returns true if target string is found, false if terminated or timed out +bool Stream::findUntil(char *target, size_t targetLen, char *terminator, size_t termLen) +{ + if (terminator == NULL) { + MultiTarget t[1] = {{target, targetLen, 0}}; + return findMulti(t, 1) == 0 ? true : false; + } else { + MultiTarget t[2] = {{target, targetLen, 0}, {terminator, termLen, 0}}; + return findMulti(t, 2) == 0 ? true : false; + } +} + +// returns the first valid (long) integer value from the current position. +// lookahead determines how parseInt looks ahead in the stream. +// See LookaheadMode enumeration at the top of the file. +// Lookahead is terminated by the first character that is not a valid part of an integer. +// Once parsing commences, 'ignore' will be skipped in the stream. +long Stream::parseInt(LookaheadMode lookahead, char ignore) +{ + bool isNegative = false; + long value = 0; + int c; + + c = peekNextDigit(lookahead, false); + // ignore non numeric leading characters + if(c < 0) + return 0; // zero returned if timeout + + do{ + if(c == ignore) + ; // ignore this character + else if(c == '-') + isNegative = true; + else if(c >= '0' && c <= '9') // is c a digit? + value = value * 10 + c - '0'; + read(); // consume the character we got with peek + c = timedPeek(); + } + while( (c >= '0' && c <= '9') || c == ignore ); + + if(isNegative) + value = -value; + return value; +} + +// as parseInt but returns a floating point value +float Stream::parseFloat(LookaheadMode lookahead, char ignore) +{ + bool isNegative = false; + bool isFraction = false; + long value = 0; + int c; + float fraction = 1.0; + + c = peekNextDigit(lookahead, true); + // ignore non numeric leading characters + if(c < 0) + return 0; // zero returned if timeout + + do{ + if(c == ignore) + ; // ignore + else if(c == '-') + isNegative = true; + else if (c == '.') + isFraction = true; + else if(c >= '0' && c <= '9') { // is c a digit? + value = value * 10 + c - '0'; + if(isFraction) + fraction *= 0.1; + } + read(); // consume the character we got with peek + c = timedPeek(); + } + while( (c >= '0' && c <= '9') || (c == '.' && !isFraction) || c == ignore ); + + if(isNegative) + value = -value; + if(isFraction) + return value * fraction; + else + return value; +} + +// read characters from stream into buffer +// terminates if length characters have been read, or timeout (see setTimeout) +// returns the number of characters placed in the buffer +// the buffer is NOT null terminated. +// +size_t Stream::readBytes(char *buffer, size_t length) +{ + size_t count = 0; + while (count < length) { + int c = timedRead(); + if (c < 0) break; + *buffer++ = (char)c; + count++; + } + return count; +} + + +// as readBytes with terminator character +// terminates if length characters have been read, timeout, or if the terminator character detected +// returns the number of characters placed in the buffer (0 means no valid data found) + +size_t Stream::readBytesUntil(char terminator, char *buffer, size_t length) +{ + size_t index = 0; + while (index < length) { + int c = timedRead(); + if (c < 0 || c == terminator) break; + *buffer++ = (char)c; + index++; + } + return index; // return number of characters, not including null terminator +} + +String Stream::readString() +{ + String ret; + int c = timedRead(); + while (c >= 0) + { + ret += (char)c; + c = timedRead(); + } + return ret; +} + +String Stream::readStringUntil(char terminator) +{ + String ret; + int c = timedRead(); + while (c >= 0 && c != terminator) + { + ret += (char)c; + c = timedRead(); + } + return ret; +} + +int Stream::findMulti( struct Stream::MultiTarget *targets, int tCount) { + // any zero length target string automatically matches and would make + // a mess of the rest of the algorithm. + for (struct MultiTarget *t = targets; t < targets+tCount; ++t) { + if (t->len <= 0) + return t - targets; + } + + while (1) { + int c = timedRead(); + if (c < 0) + return -1; + + for (struct MultiTarget *t = targets; t < targets+tCount; ++t) { + // the simple case is if we match, deal with that first. + if (c == t->str[t->index]) { + if (++t->index == t->len) + return t - targets; + else + continue; + } + + // if not we need to walk back and see if we could have matched further + // down the stream (ie '1112' doesn't match the first position in '11112' + // but it will match the second position so we can't just reset the current + // index to 0 when we find a mismatch. + if (t->index == 0) + continue; + + int origIndex = t->index; + do { + --t->index; + // first check if current char works against the new current index + if (c != t->str[t->index]) + continue; + + // if it's the only char then we're good, nothing more to check + if (t->index == 0) { + t->index++; + break; + } + + // otherwise we need to check the rest of the found string + int diff = origIndex - t->index; + size_t i; + for (i = 0; i < t->index; ++i) { + if (t->str[i] != t->str[i + diff]) + break; + } + + // if we successfully got through the previous loop then our current + // index is good. + if (i == t->index) { + t->index++; + break; + } + + // otherwise we just try the next index + } while (t->index); + } + } + // unreachable + return -1; +} diff --git a/external/arduino/avr/cores/arduino/Stream.h b/external/arduino/avr/cores/arduino/Stream.h new file mode 100644 index 000000000..8e950c731 --- /dev/null +++ b/external/arduino/avr/cores/arduino/Stream.h @@ -0,0 +1,129 @@ +/* + Stream.h - base class for character-based streams. + Copyright (c) 2010 David A. Mellis. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + parsing functions based on TextFinder library by Michael Margolis +*/ + +#ifndef Stream_h +#define Stream_h + +#include +#include "Print.h" + +// compatability macros for testing +/* +#define getInt() parseInt() +#define getInt(ignore) parseInt(ignore) +#define getFloat() parseFloat() +#define getFloat(ignore) parseFloat(ignore) +#define getString( pre_string, post_string, buffer, length) +readBytesBetween( pre_string, terminator, buffer, length) +*/ + +// This enumeration provides the lookahead options for parseInt(), parseFloat() +// The rules set out here are used until either the first valid character is found +// or a time out occurs due to lack of input. +enum LookaheadMode{ + SKIP_ALL, // All invalid characters are ignored. + SKIP_NONE, // Nothing is skipped, and the stream is not touched unless the first waiting character is valid. + SKIP_WHITESPACE // Only tabs, spaces, line feeds & carriage returns are skipped. +}; + +#define NO_IGNORE_CHAR '\x01' // a char not found in a valid ASCII numeric field + +class Stream : public Print +{ + protected: + unsigned long _timeout; // number of milliseconds to wait for the next char before aborting timed read + unsigned long _startMillis; // used for timeout measurement + int timedRead(); // read stream with timeout + int timedPeek(); // peek stream with timeout + int peekNextDigit(LookaheadMode lookahead, bool detectDecimal); // returns the next numeric digit in the stream or -1 if timeout + + public: + virtual int available() = 0; + virtual int read() = 0; + virtual int peek() = 0; + + Stream() {_timeout=1000;} + +// parsing methods + + void setTimeout(unsigned long timeout); // sets maximum milliseconds to wait for stream data, default is 1 second + unsigned long getTimeout(void) { return _timeout; } + + bool find(char *target); // reads data from the stream until the target string is found + bool find(uint8_t *target) { return find ((char *)target); } + // returns true if target string is found, false if timed out (see setTimeout) + + bool find(char *target, size_t length); // reads data from the stream until the target string of given length is found + bool find(uint8_t *target, size_t length) { return find ((char *)target, length); } + // returns true if target string is found, false if timed out + + bool find(char target) { return find (&target, 1); } + + bool findUntil(char *target, char *terminator); // as find but search ends if the terminator string is found + bool findUntil(uint8_t *target, char *terminator) { return findUntil((char *)target, terminator); } + + bool findUntil(char *target, size_t targetLen, char *terminate, size_t termLen); // as above but search ends if the terminate string is found + bool findUntil(uint8_t *target, size_t targetLen, char *terminate, size_t termLen) {return findUntil((char *)target, targetLen, terminate, termLen); } + + long parseInt(LookaheadMode lookahead = SKIP_ALL, char ignore = NO_IGNORE_CHAR); + // returns the first valid (long) integer value from the current position. + // lookahead determines how parseInt looks ahead in the stream. + // See LookaheadMode enumeration at the top of the file. + // Lookahead is terminated by the first character that is not a valid part of an integer. + // Once parsing commences, 'ignore' will be skipped in the stream. + + float parseFloat(LookaheadMode lookahead = SKIP_ALL, char ignore = NO_IGNORE_CHAR); + // float version of parseInt + + size_t readBytes( char *buffer, size_t length); // read chars from stream into buffer + size_t readBytes( uint8_t *buffer, size_t length) { return readBytes((char *)buffer, length); } + // terminates if length characters have been read or timeout (see setTimeout) + // returns the number of characters placed in the buffer (0 means no valid data found) + + size_t readBytesUntil( char terminator, char *buffer, size_t length); // as readBytes with terminator character + size_t readBytesUntil( char terminator, uint8_t *buffer, size_t length) { return readBytesUntil(terminator, (char *)buffer, length); } + // terminates if length characters have been read, timeout, or if the terminator character detected + // returns the number of characters placed in the buffer (0 means no valid data found) + + // Arduino String functions to be added here + String readString(); + String readStringUntil(char terminator); + + protected: + long parseInt(char ignore) { return parseInt(SKIP_ALL, ignore); } + float parseFloat(char ignore) { return parseFloat(SKIP_ALL, ignore); } + // These overload exists for compatibility with any class that has derived + // Stream and used parseFloat/Int with a custom ignore character. To keep + // the public API simple, these overload remains protected. + + struct MultiTarget { + const char *str; // string you're searching for + size_t len; // length of string you're searching for + size_t index; // index used by the search routine. + }; + + // This allows you to search for an arbitrary number of strings. + // Returns index of the target that is found first or -1 if timeout occurs. + int findMulti(struct MultiTarget *targets, int tCount); +}; + +#undef NO_IGNORE_CHAR +#endif diff --git a/external/arduino/avr/cores/arduino/Tone.cpp b/external/arduino/avr/cores/arduino/Tone.cpp new file mode 100644 index 000000000..1bfb3e379 --- /dev/null +++ b/external/arduino/avr/cores/arduino/Tone.cpp @@ -0,0 +1,619 @@ +/* Tone.cpp + + A Tone Generator Library + + Written by Brett Hagman + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Version Modified By Date Comments +------- ----------- -------- -------- +0001 B Hagman 09/08/02 Initial coding +0002 B Hagman 09/08/18 Multiple pins +0003 B Hagman 09/08/18 Moved initialization from constructor to begin() +0004 B Hagman 09/09/26 Fixed problems with ATmega8 +0005 B Hagman 09/11/23 Scanned prescalars for best fit on 8 bit timers + 09/11/25 Changed pin toggle method to XOR + 09/11/25 Fixed timer0 from being excluded +0006 D Mellis 09/12/29 Replaced objects with functions +0007 M Sproul 10/08/29 Changed #ifdefs from cpu to register +0008 S Kanemoto 12/06/22 Fixed for Leonardo by @maris_HY +0009 J Reucker 15/04/10 Issue #292 Fixed problems with ATmega8 (thanks to Pete62) +0010 jipp 15/04/13 added additional define check #2923 +*************************************************/ + +#include +#include +#include "Arduino.h" +#include "pins_arduino.h" + +#if defined(__AVR_ATmega8__) || defined(__AVR_ATmega128__) +#define TCCR2A TCCR2 +#define TCCR2B TCCR2 +#define COM2A1 COM21 +#define COM2A0 COM20 +#define OCR2A OCR2 +#define TIMSK2 TIMSK +#define OCIE2A OCIE2 +#define TIMER2_COMPA_vect TIMER2_COMP_vect +#define TIMSK1 TIMSK +#endif + +// timerx_toggle_count: +// > 0 - duration specified +// = 0 - stopped +// < 0 - infinitely (until stop() method called, or new play() called) + +#if !defined(__AVR_ATmega8__) +volatile long timer0_toggle_count; +volatile uint8_t *timer0_pin_port; +volatile uint8_t timer0_pin_mask; +#endif + +volatile long timer1_toggle_count; +volatile uint8_t *timer1_pin_port; +volatile uint8_t timer1_pin_mask; +volatile long timer2_toggle_count; +volatile uint8_t *timer2_pin_port; +volatile uint8_t timer2_pin_mask; + +#if defined(TIMSK3) +volatile long timer3_toggle_count; +volatile uint8_t *timer3_pin_port; +volatile uint8_t timer3_pin_mask; +#endif + +#if defined(TIMSK4) +volatile long timer4_toggle_count; +volatile uint8_t *timer4_pin_port; +volatile uint8_t timer4_pin_mask; +#endif + +#if defined(TIMSK5) +volatile long timer5_toggle_count; +volatile uint8_t *timer5_pin_port; +volatile uint8_t timer5_pin_mask; +#endif + + +#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) + +#define AVAILABLE_TONE_PINS 1 +#define USE_TIMER2 + +const uint8_t PROGMEM tone_pin_to_timer_PGM[] = { 2 /*, 3, 4, 5, 1, 0 */ }; +static uint8_t tone_pins[AVAILABLE_TONE_PINS] = { 255 /*, 255, 255, 255, 255, 255 */ }; + +#elif defined(__AVR_ATmega8__) + +#define AVAILABLE_TONE_PINS 1 +#define USE_TIMER2 + +const uint8_t PROGMEM tone_pin_to_timer_PGM[] = { 2 /*, 1 */ }; +static uint8_t tone_pins[AVAILABLE_TONE_PINS] = { 255 /*, 255 */ }; + +#elif defined(__AVR_ATmega32U4__) + +#define AVAILABLE_TONE_PINS 1 +#define USE_TIMER3 + +const uint8_t PROGMEM tone_pin_to_timer_PGM[] = { 3 /*, 1 */ }; +static uint8_t tone_pins[AVAILABLE_TONE_PINS] = { 255 /*, 255 */ }; + +#else + +#define AVAILABLE_TONE_PINS 1 +#define USE_TIMER2 + +// Leave timer 0 to last. +const uint8_t PROGMEM tone_pin_to_timer_PGM[] = { 2 /*, 1, 0 */ }; +static uint8_t tone_pins[AVAILABLE_TONE_PINS] = { 255 /*, 255, 255 */ }; + +#endif + + + +static int8_t toneBegin(uint8_t _pin) +{ + int8_t _timer = -1; + + // if we're already using the pin, the timer should be configured. + for (int i = 0; i < AVAILABLE_TONE_PINS; i++) { + if (tone_pins[i] == _pin) { + return pgm_read_byte(tone_pin_to_timer_PGM + i); + } + } + + // search for an unused timer. + for (int i = 0; i < AVAILABLE_TONE_PINS; i++) { + if (tone_pins[i] == 255) { + tone_pins[i] = _pin; + _timer = pgm_read_byte(tone_pin_to_timer_PGM + i); + break; + } + } + + if (_timer != -1) + { + // Set timer specific stuff + // All timers in CTC mode + // 8 bit timers will require changing prescalar values, + // whereas 16 bit timers are set to either ck/1 or ck/64 prescalar + switch (_timer) + { + #if defined(TCCR0A) && defined(TCCR0B) && defined(WGM01) + case 0: + // 8 bit timer + TCCR0A = 0; + TCCR0B = 0; + bitWrite(TCCR0A, WGM01, 1); + bitWrite(TCCR0B, CS00, 1); + timer0_pin_port = portOutputRegister(digitalPinToPort(_pin)); + timer0_pin_mask = digitalPinToBitMask(_pin); + break; + #endif + + #if defined(TCCR1A) && defined(TCCR1B) && defined(WGM12) + case 1: + // 16 bit timer + TCCR1A = 0; + TCCR1B = 0; + bitWrite(TCCR1B, WGM12, 1); + bitWrite(TCCR1B, CS10, 1); + timer1_pin_port = portOutputRegister(digitalPinToPort(_pin)); + timer1_pin_mask = digitalPinToBitMask(_pin); + break; + #endif + + #if defined(TCCR2A) && defined(TCCR2B) + case 2: + // 8 bit timer + TCCR2A = 0; + TCCR2B = 0; + bitWrite(TCCR2A, WGM21, 1); + bitWrite(TCCR2B, CS20, 1); + timer2_pin_port = portOutputRegister(digitalPinToPort(_pin)); + timer2_pin_mask = digitalPinToBitMask(_pin); + break; + #endif + + #if defined(TCCR3A) && defined(TCCR3B) && defined(TIMSK3) + case 3: + // 16 bit timer + TCCR3A = 0; + TCCR3B = 0; + bitWrite(TCCR3B, WGM32, 1); + bitWrite(TCCR3B, CS30, 1); + timer3_pin_port = portOutputRegister(digitalPinToPort(_pin)); + timer3_pin_mask = digitalPinToBitMask(_pin); + break; + #endif + + #if defined(TCCR4A) && defined(TCCR4B) && defined(TIMSK4) + case 4: + // 16 bit timer + TCCR4A = 0; + TCCR4B = 0; + #if defined(WGM42) + bitWrite(TCCR4B, WGM42, 1); + #elif defined(CS43) + // TODO this may not be correct + // atmega32u4 + bitWrite(TCCR4B, CS43, 1); + #endif + bitWrite(TCCR4B, CS40, 1); + timer4_pin_port = portOutputRegister(digitalPinToPort(_pin)); + timer4_pin_mask = digitalPinToBitMask(_pin); + break; + #endif + + #if defined(TCCR5A) && defined(TCCR5B) && defined(TIMSK5) + case 5: + // 16 bit timer + TCCR5A = 0; + TCCR5B = 0; + bitWrite(TCCR5B, WGM52, 1); + bitWrite(TCCR5B, CS50, 1); + timer5_pin_port = portOutputRegister(digitalPinToPort(_pin)); + timer5_pin_mask = digitalPinToBitMask(_pin); + break; + #endif + } + } + + return _timer; +} + + + +// frequency (in hertz) and duration (in milliseconds). + +void tone(uint8_t _pin, unsigned int frequency, unsigned long duration) +{ + uint8_t prescalarbits = 0b001; + long toggle_count = 0; + uint32_t ocr = 0; + int8_t _timer; + + _timer = toneBegin(_pin); + + if (_timer >= 0) + { + // Set the pinMode as OUTPUT + pinMode(_pin, OUTPUT); + + // if we are using an 8 bit timer, scan through prescalars to find the best fit + if (_timer == 0 || _timer == 2) + { + ocr = F_CPU / frequency / 2 - 1; + prescalarbits = 0b001; // ck/1: same for both timers + if (ocr > 255) + { + ocr = F_CPU / frequency / 2 / 8 - 1; + prescalarbits = 0b010; // ck/8: same for both timers + + if (_timer == 2 && ocr > 255) + { + ocr = F_CPU / frequency / 2 / 32 - 1; + prescalarbits = 0b011; + } + + if (ocr > 255) + { + ocr = F_CPU / frequency / 2 / 64 - 1; + prescalarbits = _timer == 0 ? 0b011 : 0b100; + + if (_timer == 2 && ocr > 255) + { + ocr = F_CPU / frequency / 2 / 128 - 1; + prescalarbits = 0b101; + } + + if (ocr > 255) + { + ocr = F_CPU / frequency / 2 / 256 - 1; + prescalarbits = _timer == 0 ? 0b100 : 0b110; + if (ocr > 255) + { + // can't do any better than /1024 + ocr = F_CPU / frequency / 2 / 1024 - 1; + prescalarbits = _timer == 0 ? 0b101 : 0b111; + } + } + } + } + +#if defined(TCCR0B) + if (_timer == 0) + { + TCCR0B = (TCCR0B & 0b11111000) | prescalarbits; + } + else +#endif +#if defined(TCCR2B) + { + TCCR2B = (TCCR2B & 0b11111000) | prescalarbits; + } +#else + { + // dummy place holder to make the above ifdefs work + } +#endif + } + else + { + // two choices for the 16 bit timers: ck/1 or ck/64 + ocr = F_CPU / frequency / 2 - 1; + + prescalarbits = 0b001; + if (ocr > 0xffff) + { + ocr = F_CPU / frequency / 2 / 64 - 1; + prescalarbits = 0b011; + } + + if (_timer == 1) + { +#if defined(TCCR1B) + TCCR1B = (TCCR1B & 0b11111000) | prescalarbits; +#endif + } +#if defined(TCCR3B) + else if (_timer == 3) + TCCR3B = (TCCR3B & 0b11111000) | prescalarbits; +#endif +#if defined(TCCR4B) + else if (_timer == 4) + TCCR4B = (TCCR4B & 0b11111000) | prescalarbits; +#endif +#if defined(TCCR5B) + else if (_timer == 5) + TCCR5B = (TCCR5B & 0b11111000) | prescalarbits; +#endif + + } + + + // Calculate the toggle count + if (duration > 0) + { + toggle_count = 2 * frequency * duration / 1000; + } + else + { + toggle_count = -1; + } + + // Set the OCR for the given timer, + // set the toggle count, + // then turn on the interrupts + switch (_timer) + { + +#if defined(OCR0A) && defined(TIMSK0) && defined(OCIE0A) + case 0: + OCR0A = ocr; + timer0_toggle_count = toggle_count; + bitWrite(TIMSK0, OCIE0A, 1); + break; +#endif + + case 1: +#if defined(OCR1A) && defined(TIMSK1) && defined(OCIE1A) + OCR1A = ocr; + timer1_toggle_count = toggle_count; + bitWrite(TIMSK1, OCIE1A, 1); +#elif defined(OCR1A) && defined(TIMSK) && defined(OCIE1A) + // this combination is for at least the ATmega32 + OCR1A = ocr; + timer1_toggle_count = toggle_count; + bitWrite(TIMSK, OCIE1A, 1); +#endif + break; + +#if defined(OCR2A) && defined(TIMSK2) && defined(OCIE2A) + case 2: + OCR2A = ocr; + timer2_toggle_count = toggle_count; + bitWrite(TIMSK2, OCIE2A, 1); + break; +#endif + +#if defined(OCR3A) && defined(TIMSK3) && defined(OCIE3A) + case 3: + OCR3A = ocr; + timer3_toggle_count = toggle_count; + bitWrite(TIMSK3, OCIE3A, 1); + break; +#endif + +#if defined(OCR4A) && defined(TIMSK4) && defined(OCIE4A) + case 4: + OCR4A = ocr; + timer4_toggle_count = toggle_count; + bitWrite(TIMSK4, OCIE4A, 1); + break; +#endif + +#if defined(OCR5A) && defined(TIMSK5) && defined(OCIE5A) + case 5: + OCR5A = ocr; + timer5_toggle_count = toggle_count; + bitWrite(TIMSK5, OCIE5A, 1); + break; +#endif + + } + } +} + + +// XXX: this function only works properly for timer 2 (the only one we use +// currently). for the others, it should end the tone, but won't restore +// proper PWM functionality for the timer. +void disableTimer(uint8_t _timer) +{ + switch (_timer) + { + case 0: + #if defined(TIMSK0) + TIMSK0 = 0; + #elif defined(TIMSK) + TIMSK = 0; // atmega32 + #endif + break; + +#if defined(TIMSK1) && defined(OCIE1A) + case 1: + bitWrite(TIMSK1, OCIE1A, 0); + break; +#endif + + case 2: + #if defined(TIMSK2) && defined(OCIE2A) + bitWrite(TIMSK2, OCIE2A, 0); // disable interrupt + #endif + #if defined(TCCR2A) && defined(WGM20) + TCCR2A = (1 << WGM20); + #endif + #if defined(TCCR2B) && defined(CS22) + TCCR2B = (TCCR2B & 0b11111000) | (1 << CS22); + #endif + #if defined(OCR2A) + OCR2A = 0; + #endif + break; + +#if defined(TIMSK3) && defined(OCIE3A) + case 3: + bitWrite(TIMSK3, OCIE3A, 0); + break; +#endif + +#if defined(TIMSK4) && defined(OCIE4A) + case 4: + bitWrite(TIMSK4, OCIE4A, 0); + break; +#endif + +#if defined(TIMSK5) && defined(OCIE5A) + case 5: + bitWrite(TIMSK5, OCIE5A, 0); + break; +#endif + } +} + + +void noTone(uint8_t _pin) +{ + int8_t _timer = -1; + + for (int i = 0; i < AVAILABLE_TONE_PINS; i++) { + if (tone_pins[i] == _pin) { + _timer = pgm_read_byte(tone_pin_to_timer_PGM + i); + tone_pins[i] = 255; + break; + } + } + + disableTimer(_timer); + + digitalWrite(_pin, 0); +} + +#ifdef USE_TIMER0 +ISR(TIMER0_COMPA_vect) +{ + if (timer0_toggle_count != 0) + { + // toggle the pin + *timer0_pin_port ^= timer0_pin_mask; + + if (timer0_toggle_count > 0) + timer0_toggle_count--; + } + else + { + disableTimer(0); + *timer0_pin_port &= ~(timer0_pin_mask); // keep pin low after stop + } +} +#endif + + +#ifdef USE_TIMER1 +ISR(TIMER1_COMPA_vect) +{ + if (timer1_toggle_count != 0) + { + // toggle the pin + *timer1_pin_port ^= timer1_pin_mask; + + if (timer1_toggle_count > 0) + timer1_toggle_count--; + } + else + { + disableTimer(1); + *timer1_pin_port &= ~(timer1_pin_mask); // keep pin low after stop + } +} +#endif + + +#ifdef USE_TIMER2 +ISR(TIMER2_COMPA_vect) +{ + + if (timer2_toggle_count != 0) + { + // toggle the pin + *timer2_pin_port ^= timer2_pin_mask; + + if (timer2_toggle_count > 0) + timer2_toggle_count--; + } + else + { + // need to call noTone() so that the tone_pins[] entry is reset, so the + // timer gets initialized next time we call tone(). + // XXX: this assumes timer 2 is always the first one used. + noTone(tone_pins[0]); +// disableTimer(2); +// *timer2_pin_port &= ~(timer2_pin_mask); // keep pin low after stop + } +} +#endif + + +#ifdef USE_TIMER3 +ISR(TIMER3_COMPA_vect) +{ + if (timer3_toggle_count != 0) + { + // toggle the pin + *timer3_pin_port ^= timer3_pin_mask; + + if (timer3_toggle_count > 0) + timer3_toggle_count--; + } + else + { + disableTimer(3); + *timer3_pin_port &= ~(timer3_pin_mask); // keep pin low after stop + } +} +#endif + + +#ifdef USE_TIMER4 +ISR(TIMER4_COMPA_vect) +{ + if (timer4_toggle_count != 0) + { + // toggle the pin + *timer4_pin_port ^= timer4_pin_mask; + + if (timer4_toggle_count > 0) + timer4_toggle_count--; + } + else + { + disableTimer(4); + *timer4_pin_port &= ~(timer4_pin_mask); // keep pin low after stop + } +} +#endif + + +#ifdef USE_TIMER5 +ISR(TIMER5_COMPA_vect) +{ + if (timer5_toggle_count != 0) + { + // toggle the pin + *timer5_pin_port ^= timer5_pin_mask; + + if (timer5_toggle_count > 0) + timer5_toggle_count--; + } + else + { + disableTimer(5); + *timer5_pin_port &= ~(timer5_pin_mask); // keep pin low after stop + } +} +#endif diff --git a/external/arduino/avr/cores/arduino/USBAPI.h b/external/arduino/avr/cores/arduino/USBAPI.h new file mode 100644 index 000000000..701a14f78 --- /dev/null +++ b/external/arduino/avr/cores/arduino/USBAPI.h @@ -0,0 +1,209 @@ +/* + USBAPI.h + Copyright (c) 2005-2014 Arduino. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef __USBAPI__ +#define __USBAPI__ + +#include +#include +#include +#include +#include + +typedef unsigned char u8; +typedef unsigned short u16; +typedef unsigned long u32; + +#include "Arduino.h" + +// This definitions is usefull if you want to reduce the EP_SIZE to 16 +// at the moment only 64 and 16 as EP_SIZE for all EPs are supported except the control endpoint +#ifndef USB_EP_SIZE +#define USB_EP_SIZE 64 +#endif + +#if defined(USBCON) + +#include "USBDesc.h" +#include "USBCore.h" + +//================================================================================ +//================================================================================ +// USB + +#define EP_TYPE_CONTROL (0x00) +#define EP_TYPE_BULK_IN ((1<256) +#error Please lower the CDC Buffer size +#endif + +class Serial_ : public Stream +{ +private: + int peek_buffer; +public: + Serial_() { peek_buffer = -1; }; + void begin(unsigned long); + void begin(unsigned long, uint8_t); + void end(void); + + virtual int available(void); + virtual int peek(void); + virtual int read(void); + virtual int availableForWrite(void); + virtual void flush(void); + virtual size_t write(uint8_t); + virtual size_t write(const uint8_t*, size_t); + using Print::write; // pull in write(str) and write(buf, size) from Print + operator bool(); + + volatile uint8_t _rx_buffer_head; + volatile uint8_t _rx_buffer_tail; + unsigned char _rx_buffer[SERIAL_BUFFER_SIZE]; + + // This method allows processing "SEND_BREAK" requests sent by + // the USB host. Those requests indicate that the host wants to + // send a BREAK signal and are accompanied by a single uint16_t + // value, specifying the duration of the break. The value 0 + // means to end any current break, while the value 0xffff means + // to start an indefinite break. + // readBreak() will return the value of the most recent break + // request, but will return it at most once, returning -1 when + // readBreak() is called again (until another break request is + // received, which is again returned once). + // This also mean that if two break requests are received + // without readBreak() being called in between, the value of the + // first request is lost. + // Note that the value returned is a long, so it can return + // 0-0xffff as well as -1. + int32_t readBreak(); + + // These return the settings specified by the USB host for the + // serial port. These aren't really used, but are offered here + // in case a sketch wants to act on these settings. + uint32_t baud(); + uint8_t stopbits(); + uint8_t paritytype(); + uint8_t numbits(); + bool dtr(); + bool rts(); + enum { + ONE_STOP_BIT = 0, + ONE_AND_HALF_STOP_BIT = 1, + TWO_STOP_BITS = 2, + }; + enum { + NO_PARITY = 0, + ODD_PARITY = 1, + EVEN_PARITY = 2, + MARK_PARITY = 3, + SPACE_PARITY = 4, + }; + +}; +extern Serial_ Serial; + +#define HAVE_CDCSERIAL + +//================================================================================ +//================================================================================ +// Low level API + +typedef struct +{ + uint8_t bmRequestType; + uint8_t bRequest; + uint8_t wValueL; + uint8_t wValueH; + uint16_t wIndex; + uint16_t wLength; +} USBSetup; + +//================================================================================ +//================================================================================ +// MSC 'Driver' + +int MSC_GetInterface(uint8_t* interfaceNum); +int MSC_GetDescriptor(int i); +bool MSC_Setup(USBSetup& setup); +bool MSC_Data(uint8_t rx,uint8_t tx); + +//================================================================================ +//================================================================================ +// CSC 'Driver' + +int CDC_GetInterface(uint8_t* interfaceNum); +int CDC_GetDescriptor(int i); +bool CDC_Setup(USBSetup& setup); + +//================================================================================ +//================================================================================ + +#define TRANSFER_PGM 0x80 +#define TRANSFER_RELEASE 0x40 +#define TRANSFER_ZERO 0x20 + +int USB_SendControl(uint8_t flags, const void* d, int len); +int USB_RecvControl(void* d, int len); +int USB_RecvControlLong(void* d, int len); + +uint8_t USB_Available(uint8_t ep); +uint8_t USB_SendSpace(uint8_t ep); +int USB_Send(uint8_t ep, const void* data, int len); // blocking +int USB_Recv(uint8_t ep, void* data, int len); // non-blocking +int USB_Recv(uint8_t ep); // non-blocking +void USB_Flush(uint8_t ep); + +#endif + +#endif /* if defined(USBCON) */ diff --git a/external/arduino/avr/cores/arduino/USBCore.cpp b/external/arduino/avr/cores/arduino/USBCore.cpp new file mode 100644 index 000000000..dc6bc387e --- /dev/null +++ b/external/arduino/avr/cores/arduino/USBCore.cpp @@ -0,0 +1,863 @@ + + +/* Copyright (c) 2010, Peter Barrett +** Sleep/Wakeup support added by Michael Dreher +** +** Permission to use, copy, modify, and/or distribute this software for +** any purpose with or without fee is hereby granted, provided that the +** above copyright notice and this permission notice appear in all copies. +** +** THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL +** WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED +** WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR +** BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES +** OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +** WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +** ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +** SOFTWARE. +*/ + +#include "USBAPI.h" +#include "PluggableUSB.h" +#include + +#if defined(USBCON) + +/** Pulse generation counters to keep track of the number of milliseconds remaining for each pulse type */ +#define TX_RX_LED_PULSE_MS 100 +volatile u8 TxLEDPulse; /**< Milliseconds remaining for data Tx LED pulse */ +volatile u8 RxLEDPulse; /**< Milliseconds remaining for data Rx LED pulse */ + +//================================================================== +//================================================================== + +extern const u16 STRING_LANGUAGE[] PROGMEM; +extern const u8 STRING_PRODUCT[] PROGMEM; +extern const u8 STRING_MANUFACTURER[] PROGMEM; +extern const DeviceDescriptor USB_DeviceDescriptorIAD PROGMEM; + +const u16 STRING_LANGUAGE[2] = { + (3<<8) | (2+2), + 0x0409 // English +}; + +#ifndef USB_PRODUCT +// If no product is provided, use USB IO Board +#define USB_PRODUCT "USB IO Board" +#endif + +const u8 STRING_PRODUCT[] PROGMEM = USB_PRODUCT; + +#if USB_VID == 0x2341 +# if defined(USB_MANUFACTURER) +# undef USB_MANUFACTURER +# endif +# define USB_MANUFACTURER "Arduino LLC" +#elif USB_VID == 0x1b4f +# if defined(USB_MANUFACTURER) +# undef USB_MANUFACTURER +# endif +# define USB_MANUFACTURER "SparkFun" +#elif !defined(USB_MANUFACTURER) +// Fall through to unknown if no manufacturer name was provided in a macro +# define USB_MANUFACTURER "Unknown" +#endif + +const u8 STRING_MANUFACTURER[] PROGMEM = USB_MANUFACTURER; + + +#define DEVICE_CLASS 0x02 + +// DEVICE DESCRIPTOR +const DeviceDescriptor USB_DeviceDescriptorIAD = + D_DEVICE(0xEF,0x02,0x01,64,USB_VID,USB_PID,0x100,IMANUFACTURER,IPRODUCT,ISERIAL,1); + +//================================================================== +//================================================================== + +volatile u8 _usbConfiguration = 0; +volatile u8 _usbCurrentStatus = 0; // meaning of bits see usb_20.pdf, Figure 9-4. Information Returned by a GetStatus() Request to a Device +volatile u8 _usbSuspendState = 0; // copy of UDINT to check SUSPI and WAKEUPI bits + +static inline void WaitIN(void) +{ + while (!(UEINTX & (1< len) { + n = len; + } + + { + LockEP lock(ep); + // Frame may have been released by the SOF interrupt handler + if (!ReadWriteAllowed()) + continue; + + len -= n; + if (ep & TRANSFER_ZERO) + { + while (n--) + Send8(0); + } + else if (ep & TRANSFER_PGM) + { + while (n--) + Send8(pgm_read_byte(data++)); + } + else + { + while (n--) + Send8(*data++); + } + + if (sendZlp) { + ReleaseTX(); + sendZlp = false; + } else if (!ReadWriteAllowed()) { // ...release if buffer is full... + ReleaseTX(); + if (len == 0) sendZlp = true; + } else if ((len == 0) && (ep & TRANSFER_RELEASE)) { // ...or if forced with TRANSFER_RELEASE + // XXX: TRANSFER_RELEASE is never used can be removed? + ReleaseTX(); + } + } + } + TXLED1; // light the TX LED + TxLEDPulse = TX_RX_LED_PULSE_MS; + return r; +} + +u8 _initEndpoints[USB_ENDPOINTS] = +{ + 0, // Control Endpoint + + EP_TYPE_INTERRUPT_IN, // CDC_ENDPOINT_ACM + EP_TYPE_BULK_OUT, // CDC_ENDPOINT_OUT + EP_TYPE_BULK_IN, // CDC_ENDPOINT_IN + + // Following endpoints are automatically initialized to 0 +}; + +#define EP_SINGLE_64 0x32 // EP0 +#define EP_DOUBLE_64 0x36 // Other endpoints +#define EP_SINGLE_16 0x12 + +static +void InitEP(u8 index, u8 type, u8 size) +{ + UENUM = index; + UECONX = (1< 64){ + recvLength = 64; + } + + // Write data to fit to the end (not the beginning) of the array + WaitOUT(); + Recv((u8*)d + len - length, recvLength); + ClearOUT(); + length -= recvLength; + } + return len; +} + +static u8 SendInterfaces() +{ + u8 interfaces = 0; + + CDC_GetInterface(&interfaces); + +#ifdef PLUGGABLE_USB_ENABLED + PluggableUSB().getInterface(&interfaces); +#endif + + return interfaces; +} + +// Construct a dynamic configuration descriptor +// This really needs dynamic endpoint allocation etc +// TODO +static +bool SendConfiguration(int maxlen) +{ + // Count and measure interfaces + InitControl(0); + u8 interfaces = SendInterfaces(); + ConfigDescriptor config = D_CONFIG(_cmark + sizeof(ConfigDescriptor),interfaces); + + // Now send them + InitControl(maxlen); + USB_SendControl(0,&config,sizeof(ConfigDescriptor)); + SendInterfaces(); + return true; +} + +static +bool SendDescriptor(USBSetup& setup) +{ + u8 t = setup.wValueH; + if (USB_CONFIGURATION_DESCRIPTOR_TYPE == t) + return SendConfiguration(setup.wLength); + + InitControl(setup.wLength); +#ifdef PLUGGABLE_USB_ENABLED + int ret = PluggableUSB().getDescriptor(setup); + if (ret != 0) { + return (ret > 0 ? true : false); + } +#endif + + const u8* desc_addr = 0; + if (USB_DEVICE_DESCRIPTOR_TYPE == t) + { + desc_addr = (const u8*)&USB_DeviceDescriptorIAD; + } + else if (USB_STRING_DESCRIPTOR_TYPE == t) + { + if (setup.wValueL == 0) { + desc_addr = (const u8*)&STRING_LANGUAGE; + } + else if (setup.wValueL == IPRODUCT) { + return USB_SendStringDescriptor(STRING_PRODUCT, strlen(USB_PRODUCT), TRANSFER_PGM); + } + else if (setup.wValueL == IMANUFACTURER) { + return USB_SendStringDescriptor(STRING_MANUFACTURER, strlen(USB_MANUFACTURER), TRANSFER_PGM); + } + else if (setup.wValueL == ISERIAL) { +#ifdef PLUGGABLE_USB_ENABLED + char name[ISERIAL_MAX_LEN]; + PluggableUSB().getShortName(name); + return USB_SendStringDescriptor((uint8_t*)name, strlen(name), 0); +#endif + } + else + return false; + } + + if (desc_addr == 0) + return false; + u8 desc_length = pgm_read_byte(desc_addr); + + USB_SendControl(TRANSFER_PGM,desc_addr,desc_length); + return true; +} + +// Endpoint 0 interrupt +ISR(USB_COM_vect) +{ + SetEP(0); + if (!ReceivedSetupInt()) + return; + + USBSetup setup; + Recv((u8*)&setup,8); + ClearSetupInt(); + + u8 requestType = setup.bmRequestType; + if (requestType & REQUEST_DEVICETOHOST) + WaitIN(); + else + ClearIN(); + + bool ok = true; + if (REQUEST_STANDARD == (requestType & REQUEST_TYPE)) + { + // Standard Requests + u8 r = setup.bRequest; + u16 wValue = setup.wValueL | (setup.wValueH << 8); + if (GET_STATUS == r) + { + if (requestType == (REQUEST_DEVICETOHOST | REQUEST_STANDARD | REQUEST_DEVICE)) + { + Send8(_usbCurrentStatus); + Send8(0); + } + else + { + // TODO: handle the HALT state of an endpoint here + // see "Figure 9-6. Information Returned by a GetStatus() Request to an Endpoint" in usb_20.pdf for more information + Send8(0); + Send8(0); + } + } + else if (CLEAR_FEATURE == r) + { + if((requestType == (REQUEST_HOSTTODEVICE | REQUEST_STANDARD | REQUEST_DEVICE)) + && (wValue == DEVICE_REMOTE_WAKEUP)) + { + _usbCurrentStatus &= ~FEATURE_REMOTE_WAKEUP_ENABLED; + } + } + else if (SET_FEATURE == r) + { + if((requestType == (REQUEST_HOSTTODEVICE | REQUEST_STANDARD | REQUEST_DEVICE)) + && (wValue == DEVICE_REMOTE_WAKEUP)) + { + _usbCurrentStatus |= FEATURE_REMOTE_WAKEUP_ENABLED; + } + } + else if (SET_ADDRESS == r) + { + WaitIN(); + UDADDR = setup.wValueL | (1<> 8) & 0xFF) + +#define CDC_V1_10 0x0110 +#define CDC_COMMUNICATION_INTERFACE_CLASS 0x02 + +#define CDC_CALL_MANAGEMENT 0x01 +#define CDC_ABSTRACT_CONTROL_MODEL 0x02 +#define CDC_HEADER 0x00 +#define CDC_ABSTRACT_CONTROL_MANAGEMENT 0x02 +#define CDC_UNION 0x06 +#define CDC_CS_INTERFACE 0x24 +#define CDC_CS_ENDPOINT 0x25 +#define CDC_DATA_INTERFACE_CLASS 0x0A + +#define MSC_SUBCLASS_SCSI 0x06 +#define MSC_PROTOCOL_BULK_ONLY 0x50 + +#ifndef USB_VERSION +#define USB_VERSION 0x200 +#endif + +// Device +typedef struct { + u8 len; // 18 + u8 dtype; // 1 USB_DEVICE_DESCRIPTOR_TYPE + u16 usbVersion; // 0x200 or 0x210 + u8 deviceClass; + u8 deviceSubClass; + u8 deviceProtocol; + u8 packetSize0; // Packet 0 + u16 idVendor; + u16 idProduct; + u16 deviceVersion; // 0x100 + u8 iManufacturer; + u8 iProduct; + u8 iSerialNumber; + u8 bNumConfigurations; +} DeviceDescriptor; + +// Config +typedef struct { + u8 len; // 9 + u8 dtype; // 2 + u16 clen; // total length + u8 numInterfaces; + u8 config; + u8 iconfig; + u8 attributes; + u8 maxPower; +} ConfigDescriptor; + +// String + +// Interface +typedef struct +{ + u8 len; // 9 + u8 dtype; // 4 + u8 number; + u8 alternate; + u8 numEndpoints; + u8 interfaceClass; + u8 interfaceSubClass; + u8 protocol; + u8 iInterface; +} InterfaceDescriptor; + +// Endpoint +typedef struct +{ + u8 len; // 7 + u8 dtype; // 5 + u8 addr; + u8 attr; + u16 packetSize; + u8 interval; +} EndpointDescriptor; + +// Interface Association Descriptor +// Used to bind 2 interfaces together in CDC compostite device +typedef struct +{ + u8 len; // 8 + u8 dtype; // 11 + u8 firstInterface; + u8 interfaceCount; + u8 functionClass; + u8 funtionSubClass; + u8 functionProtocol; + u8 iInterface; +} IADDescriptor; + +// CDC CS interface descriptor +typedef struct +{ + u8 len; // 5 + u8 dtype; // 0x24 + u8 subtype; + u8 d0; + u8 d1; +} CDCCSInterfaceDescriptor; + +typedef struct +{ + u8 len; // 4 + u8 dtype; // 0x24 + u8 subtype; + u8 d0; +} CDCCSInterfaceDescriptor4; + +typedef struct +{ + u8 len; + u8 dtype; // 0x24 + u8 subtype; // 1 + u8 bmCapabilities; + u8 bDataInterface; +} CMFunctionalDescriptor; + +typedef struct +{ + u8 len; + u8 dtype; // 0x24 + u8 subtype; // 1 + u8 bmCapabilities; +} ACMFunctionalDescriptor; + +typedef struct +{ + // IAD + IADDescriptor iad; // Only needed on compound device + + // Control + InterfaceDescriptor cif; // + CDCCSInterfaceDescriptor header; + CMFunctionalDescriptor callManagement; // Call Management + ACMFunctionalDescriptor controlManagement; // ACM + CDCCSInterfaceDescriptor functionalDescriptor; // CDC_UNION + EndpointDescriptor cifin; + + // Data + InterfaceDescriptor dif; + EndpointDescriptor in; + EndpointDescriptor out; +} CDCDescriptor; + +typedef struct +{ + InterfaceDescriptor msc; + EndpointDescriptor in; + EndpointDescriptor out; +} MSCDescriptor; + + +#define D_DEVICE(_class,_subClass,_proto,_packetSize0,_vid,_pid,_version,_im,_ip,_is,_configs) \ + { 18, 1, USB_VERSION, _class,_subClass,_proto,_packetSize0,_vid,_pid,_version,_im,_ip,_is,_configs } + +#define D_CONFIG(_totalLength,_interfaces) \ + { 9, 2, _totalLength,_interfaces, 1, 0, USB_CONFIG_BUS_POWERED | USB_CONFIG_REMOTE_WAKEUP, USB_CONFIG_POWER_MA(USB_CONFIG_POWER) } + +#define D_INTERFACE(_n,_numEndpoints,_class,_subClass,_protocol) \ + { 9, 4, _n, 0, _numEndpoints, _class,_subClass, _protocol, 0 } + +#define D_ENDPOINT(_addr,_attr,_packetSize, _interval) \ + { 7, 5, _addr,_attr,_packetSize, _interval } + +#define D_IAD(_firstInterface, _count, _class, _subClass, _protocol) \ + { 8, 11, _firstInterface, _count, _class, _subClass, _protocol, 0 } + +#define D_CDCCS(_subtype,_d0,_d1) { 5, 0x24, _subtype, _d0, _d1 } +#define D_CDCCS4(_subtype,_d0) { 4, 0x24, _subtype, _d0 } + +// Bootloader related fields +// Old Caterina bootloader places the MAGIC key into unsafe RAM locations (it can be rewritten +// by the running sketch before to actual reboot). +// Newer bootloaders, recognizable by the LUFA "signature" at the end of the flash, can handle both +// the usafe and the safe location. +#ifndef MAGIC_KEY +#define MAGIC_KEY 0x7777 +#endif + +#ifndef MAGIC_KEY_POS +#define MAGIC_KEY_POS 0x0800 +#endif + +#ifndef NEW_LUFA_SIGNATURE +#define NEW_LUFA_SIGNATURE 0xDCFB +#endif + +#endif diff --git a/external/arduino/avr/cores/arduino/USBDesc.h b/external/arduino/avr/cores/arduino/USBDesc.h new file mode 100644 index 000000000..c0dce079e --- /dev/null +++ b/external/arduino/avr/cores/arduino/USBDesc.h @@ -0,0 +1,46 @@ +/* + Copyright (c) 2011, Peter Barrett + Copyright (c) 2015, Arduino LLC + + Permission to use, copy, modify, and/or distribute this software for + any purpose with or without fee is hereby granted, provided that the + above copyright notice and this permission notice appear in all copies. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL + WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR + BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES + OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, + ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS + SOFTWARE. + */ + +#define PLUGGABLE_USB_ENABLED + +#if defined(EPRST6) +#define USB_ENDPOINTS 7 // AtMegaxxU4 +#else +#define USB_ENDPOINTS 5 // AtMegaxxU2 +#endif + +#define ISERIAL_MAX_LEN 20 + +#define CDC_INTERFACE_COUNT 2 +#define CDC_ENPOINT_COUNT 3 + +#define CDC_ACM_INTERFACE 0 // CDC ACM +#define CDC_DATA_INTERFACE 1 // CDC Data +#define CDC_FIRST_ENDPOINT 1 +#define CDC_ENDPOINT_ACM (CDC_FIRST_ENDPOINT) // CDC First +#define CDC_ENDPOINT_OUT (CDC_FIRST_ENDPOINT+1) +#define CDC_ENDPOINT_IN (CDC_FIRST_ENDPOINT+2) + +#define INTERFACE_COUNT (MSC_INTERFACE + MSC_INTERFACE_COUNT) + +#define CDC_RX CDC_ENDPOINT_OUT +#define CDC_TX CDC_ENDPOINT_IN + +#define IMANUFACTURER 1 +#define IPRODUCT 2 +#define ISERIAL 3 \ No newline at end of file diff --git a/external/arduino/avr/cores/arduino/Udp.h b/external/arduino/avr/cores/arduino/Udp.h new file mode 100644 index 000000000..89f31c676 --- /dev/null +++ b/external/arduino/avr/cores/arduino/Udp.h @@ -0,0 +1,89 @@ +/* + * Udp.cpp: Library to send/receive UDP packets. + * + * NOTE: UDP is fast, but has some important limitations (thanks to Warren Gray for mentioning these) + * 1) UDP does not guarantee the order in which assembled UDP packets are received. This + * might not happen often in practice, but in larger network topologies, a UDP + * packet can be received out of sequence. + * 2) UDP does not guard against lost packets - so packets *can* disappear without the sender being + * aware of it. Again, this may not be a concern in practice on small local networks. + * For more information, see http://www.cafeaulait.org/course/week12/35.html + * + * MIT License: + * Copyright (c) 2008 Bjoern Hartmann + * 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. + * + * bjoern@cs.stanford.edu 12/30/2008 + */ + +#ifndef udp_h +#define udp_h + +#include +#include + +class UDP : public Stream { + +public: + virtual uint8_t begin(uint16_t) =0; // initialize, start listening on specified port. Returns 1 if successful, 0 if there are no sockets available to use + virtual uint8_t beginMulticast(IPAddress, uint16_t) { return 0; } // initialize, start listening on specified multicast IP address and port. Returns 1 if successful, 0 on failure + virtual void stop() =0; // Finish with the UDP socket + + // Sending UDP packets + + // Start building up a packet to send to the remote host specific in ip and port + // Returns 1 if successful, 0 if there was a problem with the supplied IP address or port + virtual int beginPacket(IPAddress ip, uint16_t port) =0; + // Start building up a packet to send to the remote host specific in host and port + // Returns 1 if successful, 0 if there was a problem resolving the hostname or port + virtual int beginPacket(const char *host, uint16_t port) =0; + // Finish off this packet and send it + // Returns 1 if the packet was sent successfully, 0 if there was an error + virtual int endPacket() =0; + // Write a single byte into the packet + virtual size_t write(uint8_t) =0; + // Write size bytes from buffer into the packet + virtual size_t write(const uint8_t *buffer, size_t size) =0; + + // Start processing the next available incoming packet + // Returns the size of the packet in bytes, or 0 if no packets are available + virtual int parsePacket() =0; + // Number of bytes remaining in the current packet + virtual int available() =0; + // Read a single byte from the current packet + virtual int read() =0; + // Read up to len bytes from the current packet and place them into buffer + // Returns the number of bytes read, or 0 if none are available + virtual int read(unsigned char* buffer, size_t len) =0; + // Read up to len characters from the current packet and place them into buffer + // Returns the number of characters read, or 0 if none are available + virtual int read(char* buffer, size_t len) =0; + // Return the next byte from the current packet without moving on to the next byte + virtual int peek() =0; + virtual void flush() =0; // Finish reading the current packet + + // Return the IP address of the host who sent the current incoming packet + virtual IPAddress remoteIP() =0; + // Return the port of the host who sent the current incoming packet + virtual uint16_t remotePort() =0; +protected: + uint8_t* rawIPAddress(IPAddress& addr) { return addr.raw_address(); }; +}; + +#endif diff --git a/external/arduino/avr/cores/arduino/WCharacter.h b/external/arduino/avr/cores/arduino/WCharacter.h new file mode 100644 index 000000000..79733b50a --- /dev/null +++ b/external/arduino/avr/cores/arduino/WCharacter.h @@ -0,0 +1,168 @@ +/* + WCharacter.h - Character utility functions for Wiring & Arduino + Copyright (c) 2010 Hernando Barragan. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef Character_h +#define Character_h + +#include + +// WCharacter.h prototypes +inline boolean isAlphaNumeric(int c) __attribute__((always_inline)); +inline boolean isAlpha(int c) __attribute__((always_inline)); +inline boolean isAscii(int c) __attribute__((always_inline)); +inline boolean isWhitespace(int c) __attribute__((always_inline)); +inline boolean isControl(int c) __attribute__((always_inline)); +inline boolean isDigit(int c) __attribute__((always_inline)); +inline boolean isGraph(int c) __attribute__((always_inline)); +inline boolean isLowerCase(int c) __attribute__((always_inline)); +inline boolean isPrintable(int c) __attribute__((always_inline)); +inline boolean isPunct(int c) __attribute__((always_inline)); +inline boolean isSpace(int c) __attribute__((always_inline)); +inline boolean isUpperCase(int c) __attribute__((always_inline)); +inline boolean isHexadecimalDigit(int c) __attribute__((always_inline)); +inline int toAscii(int c) __attribute__((always_inline)); +inline int toLowerCase(int c) __attribute__((always_inline)); +inline int toUpperCase(int c)__attribute__((always_inline)); + + +// Checks for an alphanumeric character. +// It is equivalent to (isalpha(c) || isdigit(c)). +inline boolean isAlphaNumeric(int c) +{ + return ( isalnum(c) == 0 ? false : true); +} + + +// Checks for an alphabetic character. +// It is equivalent to (isupper(c) || islower(c)). +inline boolean isAlpha(int c) +{ + return ( isalpha(c) == 0 ? false : true); +} + + +// Checks whether c is a 7-bit unsigned char value +// that fits into the ASCII character set. +inline boolean isAscii(int c) +{ + return ( isascii (c) == 0 ? false : true); +} + + +// Checks for a blank character, that is, a space or a tab. +inline boolean isWhitespace(int c) +{ + return ( isblank (c) == 0 ? false : true); +} + + +// Checks for a control character. +inline boolean isControl(int c) +{ + return ( iscntrl (c) == 0 ? false : true); +} + + +// Checks for a digit (0 through 9). +inline boolean isDigit(int c) +{ + return ( isdigit (c) == 0 ? false : true); +} + + +// Checks for any printable character except space. +inline boolean isGraph(int c) +{ + return ( isgraph (c) == 0 ? false : true); +} + + +// Checks for a lower-case character. +inline boolean isLowerCase(int c) +{ + return (islower (c) == 0 ? false : true); +} + + +// Checks for any printable character including space. +inline boolean isPrintable(int c) +{ + return ( isprint (c) == 0 ? false : true); +} + + +// Checks for any printable character which is not a space +// or an alphanumeric character. +inline boolean isPunct(int c) +{ + return ( ispunct (c) == 0 ? false : true); +} + + +// Checks for white-space characters. For the avr-libc library, +// these are: space, formfeed ('\f'), newline ('\n'), carriage +// return ('\r'), horizontal tab ('\t'), and vertical tab ('\v'). +inline boolean isSpace(int c) +{ + return ( isspace (c) == 0 ? false : true); +} + + +// Checks for an uppercase letter. +inline boolean isUpperCase(int c) +{ + return ( isupper (c) == 0 ? false : true); +} + + +// Checks for a hexadecimal digits, i.e. one of 0 1 2 3 4 5 6 7 +// 8 9 a b c d e f A B C D E F. +inline boolean isHexadecimalDigit(int c) +{ + return ( isxdigit (c) == 0 ? false : true); +} + + +// Converts c to a 7-bit unsigned char value that fits into the +// ASCII character set, by clearing the high-order bits. +inline int toAscii(int c) +{ + return toascii (c); +} + + +// Warning: +// Many people will be unhappy if you use this function. +// This function will convert accented letters into random +// characters. + +// Converts the letter c to lower case, if possible. +inline int toLowerCase(int c) +{ + return tolower (c); +} + + +// Converts the letter c to upper case, if possible. +inline int toUpperCase(int c) +{ + return toupper (c); +} + +#endif \ No newline at end of file diff --git a/external/arduino/avr/cores/arduino/WInterrupts.c b/external/arduino/avr/cores/arduino/WInterrupts.c new file mode 100644 index 000000000..38ea15800 --- /dev/null +++ b/external/arduino/avr/cores/arduino/WInterrupts.c @@ -0,0 +1,379 @@ +/* -*- mode: jde; c-basic-offset: 2; indent-tabs-mode: nil -*- */ + +/* + Part of the Wiring project - http://wiring.uniandes.edu.co + + Copyright (c) 2004-05 Hernando Barragan + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General + Public License along with this library; if not, write to the + Free Software Foundation, Inc., 59 Temple Place, Suite 330, + Boston, MA 02111-1307 USA + + Modified 24 November 2006 by David A. Mellis + Modified 1 August 2010 by Mark Sproul +*/ + +#include +#include +#include +#include +#include + +#include "wiring_private.h" + +static void nothing(void) { +} + +static volatile voidFuncPtr intFunc[EXTERNAL_NUM_INTERRUPTS] = { +#if EXTERNAL_NUM_INTERRUPTS > 8 + #warning There are more than 8 external interrupts. Some callbacks may not be initialized. + nothing, +#endif +#if EXTERNAL_NUM_INTERRUPTS > 7 + nothing, +#endif +#if EXTERNAL_NUM_INTERRUPTS > 6 + nothing, +#endif +#if EXTERNAL_NUM_INTERRUPTS > 5 + nothing, +#endif +#if EXTERNAL_NUM_INTERRUPTS > 4 + nothing, +#endif +#if EXTERNAL_NUM_INTERRUPTS > 3 + nothing, +#endif +#if EXTERNAL_NUM_INTERRUPTS > 2 + nothing, +#endif +#if EXTERNAL_NUM_INTERRUPTS > 1 + nothing, +#endif +#if EXTERNAL_NUM_INTERRUPTS > 0 + nothing, +#endif +}; + +void attachInterrupt(uint8_t interruptNum, void (*userFunc)(void), int mode) { + if(interruptNum < EXTERNAL_NUM_INTERRUPTS) { + intFunc[interruptNum] = userFunc; + + // Configure the interrupt mode (trigger on low input, any change, rising + // edge, or falling edge). The mode constants were chosen to correspond + // to the configuration bits in the hardware register, so we simply shift + // the mode into place. + + // Enable the interrupt. + + switch (interruptNum) { +#if defined(__AVR_ATmega32U4__) + // I hate doing this, but the register assignment differs between the 1280/2560 + // and the 32U4. Since avrlib defines registers PCMSK1 and PCMSK2 that aren't + // even present on the 32U4 this is the only way to distinguish between them. + case 0: + EICRA = (EICRA & ~((1<= howbig) { + return howsmall; + } + long diff = howbig - howsmall; + return random(diff) + howsmall; +} + +long map(long x, long in_min, long in_max, long out_min, long out_max) +{ + return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; +} + +unsigned int makeWord(unsigned int w) { return w; } +unsigned int makeWord(unsigned char h, unsigned char l) { return (h << 8) | l; } diff --git a/external/arduino/avr/cores/arduino/WString.cpp b/external/arduino/avr/cores/arduino/WString.cpp new file mode 100644 index 000000000..043fda7c0 --- /dev/null +++ b/external/arduino/avr/cores/arduino/WString.cpp @@ -0,0 +1,750 @@ +/* + WString.cpp - String library for Wiring & Arduino + ...mostly rewritten by Paul Stoffregen... + Copyright (c) 2009-10 Hernando Barragan. All rights reserved. + Copyright 2011, Paul Stoffregen, paul@pjrc.com + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include "WString.h" + +/*********************************************/ +/* Constructors */ +/*********************************************/ + +String::String(const char *cstr) +{ + init(); + if (cstr) copy(cstr, strlen(cstr)); +} + +String::String(const String &value) +{ + init(); + *this = value; +} + +String::String(const __FlashStringHelper *pstr) +{ + init(); + *this = pstr; +} + +#if __cplusplus >= 201103L || defined(__GXX_EXPERIMENTAL_CXX0X__) +String::String(String &&rval) +{ + init(); + move(rval); +} +String::String(StringSumHelper &&rval) +{ + init(); + move(rval); +} +#endif + +String::String(char c) +{ + init(); + char buf[2]; + buf[0] = c; + buf[1] = 0; + *this = buf; +} + +String::String(unsigned char value, unsigned char base) +{ + init(); + char buf[1 + 8 * sizeof(unsigned char)]; + utoa(value, buf, base); + *this = buf; +} + +String::String(int value, unsigned char base) +{ + init(); + char buf[2 + 8 * sizeof(int)]; + itoa(value, buf, base); + *this = buf; +} + +String::String(unsigned int value, unsigned char base) +{ + init(); + char buf[1 + 8 * sizeof(unsigned int)]; + utoa(value, buf, base); + *this = buf; +} + +String::String(long value, unsigned char base) +{ + init(); + char buf[2 + 8 * sizeof(long)]; + ltoa(value, buf, base); + *this = buf; +} + +String::String(unsigned long value, unsigned char base) +{ + init(); + char buf[1 + 8 * sizeof(unsigned long)]; + ultoa(value, buf, base); + *this = buf; +} + +String::String(float value, unsigned char decimalPlaces) +{ + init(); + char buf[33]; + *this = dtostrf(value, (decimalPlaces + 2), decimalPlaces, buf); +} + +String::String(double value, unsigned char decimalPlaces) +{ + init(); + char buf[33]; + *this = dtostrf(value, (decimalPlaces + 2), decimalPlaces, buf); +} + +String::~String() +{ + if (buffer) free(buffer); +} + +/*********************************************/ +/* Memory Management */ +/*********************************************/ + +inline void String::init(void) +{ + buffer = NULL; + capacity = 0; + len = 0; +} + +void String::invalidate(void) +{ + if (buffer) free(buffer); + buffer = NULL; + capacity = len = 0; +} + +unsigned char String::reserve(unsigned int size) +{ + if (buffer && capacity >= size) return 1; + if (changeBuffer(size)) { + if (len == 0) buffer[0] = 0; + return 1; + } + return 0; +} + +unsigned char String::changeBuffer(unsigned int maxStrLen) +{ + char *newbuffer = (char *)realloc(buffer, maxStrLen + 1); + if (newbuffer) { + buffer = newbuffer; + capacity = maxStrLen; + return 1; + } + return 0; +} + +/*********************************************/ +/* Copy and Move */ +/*********************************************/ + +String & String::copy(const char *cstr, unsigned int length) +{ + if (!reserve(length)) { + invalidate(); + return *this; + } + len = length; + strcpy(buffer, cstr); + return *this; +} + +String & String::copy(const __FlashStringHelper *pstr, unsigned int length) +{ + if (!reserve(length)) { + invalidate(); + return *this; + } + len = length; + strcpy_P(buffer, (PGM_P)pstr); + return *this; +} + +#if __cplusplus >= 201103L || defined(__GXX_EXPERIMENTAL_CXX0X__) +void String::move(String &rhs) +{ + if (buffer) { + if (rhs && capacity >= rhs.len) { + strcpy(buffer, rhs.buffer); + len = rhs.len; + rhs.len = 0; + return; + } else { + free(buffer); + } + } + buffer = rhs.buffer; + capacity = rhs.capacity; + len = rhs.len; + rhs.buffer = NULL; + rhs.capacity = 0; + rhs.len = 0; +} +#endif + +String & String::operator = (const String &rhs) +{ + if (this == &rhs) return *this; + + if (rhs.buffer) copy(rhs.buffer, rhs.len); + else invalidate(); + + return *this; +} + +#if __cplusplus >= 201103L || defined(__GXX_EXPERIMENTAL_CXX0X__) +String & String::operator = (String &&rval) +{ + if (this != &rval) move(rval); + return *this; +} + +String & String::operator = (StringSumHelper &&rval) +{ + if (this != &rval) move(rval); + return *this; +} +#endif + +String & String::operator = (const char *cstr) +{ + if (cstr) copy(cstr, strlen(cstr)); + else invalidate(); + + return *this; +} + +String & String::operator = (const __FlashStringHelper *pstr) +{ + if (pstr) copy(pstr, strlen_P((PGM_P)pstr)); + else invalidate(); + + return *this; +} + +/*********************************************/ +/* concat */ +/*********************************************/ + +unsigned char String::concat(const String &s) +{ + return concat(s.buffer, s.len); +} + +unsigned char String::concat(const char *cstr, unsigned int length) +{ + unsigned int newlen = len + length; + if (!cstr) return 0; + if (length == 0) return 1; + if (!reserve(newlen)) return 0; + strcpy(buffer + len, cstr); + len = newlen; + return 1; +} + +unsigned char String::concat(const char *cstr) +{ + if (!cstr) return 0; + return concat(cstr, strlen(cstr)); +} + +unsigned char String::concat(char c) +{ + char buf[2]; + buf[0] = c; + buf[1] = 0; + return concat(buf, 1); +} + +unsigned char String::concat(unsigned char num) +{ + char buf[1 + 3 * sizeof(unsigned char)]; + itoa(num, buf, 10); + return concat(buf, strlen(buf)); +} + +unsigned char String::concat(int num) +{ + char buf[2 + 3 * sizeof(int)]; + itoa(num, buf, 10); + return concat(buf, strlen(buf)); +} + +unsigned char String::concat(unsigned int num) +{ + char buf[1 + 3 * sizeof(unsigned int)]; + utoa(num, buf, 10); + return concat(buf, strlen(buf)); +} + +unsigned char String::concat(long num) +{ + char buf[2 + 3 * sizeof(long)]; + ltoa(num, buf, 10); + return concat(buf, strlen(buf)); +} + +unsigned char String::concat(unsigned long num) +{ + char buf[1 + 3 * sizeof(unsigned long)]; + ultoa(num, buf, 10); + return concat(buf, strlen(buf)); +} + +unsigned char String::concat(float num) +{ + char buf[20]; + char* string = dtostrf(num, 4, 2, buf); + return concat(string, strlen(string)); +} + +unsigned char String::concat(double num) +{ + char buf[20]; + char* string = dtostrf(num, 4, 2, buf); + return concat(string, strlen(string)); +} + +unsigned char String::concat(const __FlashStringHelper * str) +{ + if (!str) return 0; + int length = strlen_P((const char *) str); + if (length == 0) return 1; + unsigned int newlen = len + length; + if (!reserve(newlen)) return 0; + strcpy_P(buffer + len, (const char *) str); + len = newlen; + return 1; +} + +/*********************************************/ +/* Concatenate */ +/*********************************************/ + +StringSumHelper & operator + (const StringSumHelper &lhs, const String &rhs) +{ + StringSumHelper &a = const_cast(lhs); + if (!a.concat(rhs.buffer, rhs.len)) a.invalidate(); + return a; +} + +StringSumHelper & operator + (const StringSumHelper &lhs, const char *cstr) +{ + StringSumHelper &a = const_cast(lhs); + if (!cstr || !a.concat(cstr, strlen(cstr))) a.invalidate(); + return a; +} + +StringSumHelper & operator + (const StringSumHelper &lhs, char c) +{ + StringSumHelper &a = const_cast(lhs); + if (!a.concat(c)) a.invalidate(); + return a; +} + +StringSumHelper & operator + (const StringSumHelper &lhs, unsigned char num) +{ + StringSumHelper &a = const_cast(lhs); + if (!a.concat(num)) a.invalidate(); + return a; +} + +StringSumHelper & operator + (const StringSumHelper &lhs, int num) +{ + StringSumHelper &a = const_cast(lhs); + if (!a.concat(num)) a.invalidate(); + return a; +} + +StringSumHelper & operator + (const StringSumHelper &lhs, unsigned int num) +{ + StringSumHelper &a = const_cast(lhs); + if (!a.concat(num)) a.invalidate(); + return a; +} + +StringSumHelper & operator + (const StringSumHelper &lhs, long num) +{ + StringSumHelper &a = const_cast(lhs); + if (!a.concat(num)) a.invalidate(); + return a; +} + +StringSumHelper & operator + (const StringSumHelper &lhs, unsigned long num) +{ + StringSumHelper &a = const_cast(lhs); + if (!a.concat(num)) a.invalidate(); + return a; +} + +StringSumHelper & operator + (const StringSumHelper &lhs, float num) +{ + StringSumHelper &a = const_cast(lhs); + if (!a.concat(num)) a.invalidate(); + return a; +} + +StringSumHelper & operator + (const StringSumHelper &lhs, double num) +{ + StringSumHelper &a = const_cast(lhs); + if (!a.concat(num)) a.invalidate(); + return a; +} + +StringSumHelper & operator + (const StringSumHelper &lhs, const __FlashStringHelper *rhs) +{ + StringSumHelper &a = const_cast(lhs); + if (!a.concat(rhs)) a.invalidate(); + return a; +} + +/*********************************************/ +/* Comparison */ +/*********************************************/ + +int String::compareTo(const String &s) const +{ + if (!buffer || !s.buffer) { + if (s.buffer && s.len > 0) return 0 - *(unsigned char *)s.buffer; + if (buffer && len > 0) return *(unsigned char *)buffer; + return 0; + } + return strcmp(buffer, s.buffer); +} + +unsigned char String::equals(const String &s2) const +{ + return (len == s2.len && compareTo(s2) == 0); +} + +unsigned char String::equals(const char *cstr) const +{ + if (len == 0) return (cstr == NULL || *cstr == 0); + if (cstr == NULL) return buffer[0] == 0; + return strcmp(buffer, cstr) == 0; +} + +unsigned char String::operator<(const String &rhs) const +{ + return compareTo(rhs) < 0; +} + +unsigned char String::operator>(const String &rhs) const +{ + return compareTo(rhs) > 0; +} + +unsigned char String::operator<=(const String &rhs) const +{ + return compareTo(rhs) <= 0; +} + +unsigned char String::operator>=(const String &rhs) const +{ + return compareTo(rhs) >= 0; +} + +unsigned char String::equalsIgnoreCase( const String &s2 ) const +{ + if (this == &s2) return 1; + if (len != s2.len) return 0; + if (len == 0) return 1; + const char *p1 = buffer; + const char *p2 = s2.buffer; + while (*p1) { + if (tolower(*p1++) != tolower(*p2++)) return 0; + } + return 1; +} + +unsigned char String::startsWith( const String &s2 ) const +{ + if (len < s2.len) return 0; + return startsWith(s2, 0); +} + +unsigned char String::startsWith( const String &s2, unsigned int offset ) const +{ + if (offset > len - s2.len || !buffer || !s2.buffer) return 0; + return strncmp( &buffer[offset], s2.buffer, s2.len ) == 0; +} + +unsigned char String::endsWith( const String &s2 ) const +{ + if ( len < s2.len || !buffer || !s2.buffer) return 0; + return strcmp(&buffer[len - s2.len], s2.buffer) == 0; +} + +/*********************************************/ +/* Character Access */ +/*********************************************/ + +char String::charAt(unsigned int loc) const +{ + return operator[](loc); +} + +void String::setCharAt(unsigned int loc, char c) +{ + if (loc < len) buffer[loc] = c; +} + +char & String::operator[](unsigned int index) +{ + static char dummy_writable_char; + if (index >= len || !buffer) { + dummy_writable_char = 0; + return dummy_writable_char; + } + return buffer[index]; +} + +char String::operator[]( unsigned int index ) const +{ + if (index >= len || !buffer) return 0; + return buffer[index]; +} + +void String::getBytes(unsigned char *buf, unsigned int bufsize, unsigned int index) const +{ + if (!bufsize || !buf) return; + if (index >= len) { + buf[0] = 0; + return; + } + unsigned int n = bufsize - 1; + if (n > len - index) n = len - index; + strncpy((char *)buf, buffer + index, n); + buf[n] = 0; +} + +/*********************************************/ +/* Search */ +/*********************************************/ + +int String::indexOf(char c) const +{ + return indexOf(c, 0); +} + +int String::indexOf( char ch, unsigned int fromIndex ) const +{ + if (fromIndex >= len) return -1; + const char* temp = strchr(buffer + fromIndex, ch); + if (temp == NULL) return -1; + return temp - buffer; +} + +int String::indexOf(const String &s2) const +{ + return indexOf(s2, 0); +} + +int String::indexOf(const String &s2, unsigned int fromIndex) const +{ + if (fromIndex >= len) return -1; + const char *found = strstr(buffer + fromIndex, s2.buffer); + if (found == NULL) return -1; + return found - buffer; +} + +int String::lastIndexOf( char theChar ) const +{ + return lastIndexOf(theChar, len - 1); +} + +int String::lastIndexOf(char ch, unsigned int fromIndex) const +{ + if (fromIndex >= len) return -1; + char tempchar = buffer[fromIndex + 1]; + buffer[fromIndex + 1] = '\0'; + char* temp = strrchr( buffer, ch ); + buffer[fromIndex + 1] = tempchar; + if (temp == NULL) return -1; + return temp - buffer; +} + +int String::lastIndexOf(const String &s2) const +{ + return lastIndexOf(s2, len - s2.len); +} + +int String::lastIndexOf(const String &s2, unsigned int fromIndex) const +{ + if (s2.len == 0 || len == 0 || s2.len > len) return -1; + if (fromIndex >= len) fromIndex = len - 1; + int found = -1; + for (char *p = buffer; p <= buffer + fromIndex; p++) { + p = strstr(p, s2.buffer); + if (!p) break; + if ((unsigned int)(p - buffer) <= fromIndex) found = p - buffer; + } + return found; +} + +String String::substring(unsigned int left, unsigned int right) const +{ + if (left > right) { + unsigned int temp = right; + right = left; + left = temp; + } + String out; + if (left >= len) return out; + if (right > len) right = len; + char temp = buffer[right]; // save the replaced character + buffer[right] = '\0'; + out = buffer + left; // pointer arithmetic + buffer[right] = temp; //restore character + return out; +} + +/*********************************************/ +/* Modification */ +/*********************************************/ + +void String::replace(char find, char replace) +{ + if (!buffer) return; + for (char *p = buffer; *p; p++) { + if (*p == find) *p = replace; + } +} + +void String::replace(const String& find, const String& replace) +{ + if (len == 0 || find.len == 0) return; + int diff = replace.len - find.len; + char *readFrom = buffer; + char *foundAt; + if (diff == 0) { + while ((foundAt = strstr(readFrom, find.buffer)) != NULL) { + memcpy(foundAt, replace.buffer, replace.len); + readFrom = foundAt + replace.len; + } + } else if (diff < 0) { + char *writeTo = buffer; + while ((foundAt = strstr(readFrom, find.buffer)) != NULL) { + unsigned int n = foundAt - readFrom; + memcpy(writeTo, readFrom, n); + writeTo += n; + memcpy(writeTo, replace.buffer, replace.len); + writeTo += replace.len; + readFrom = foundAt + find.len; + len += diff; + } + strcpy(writeTo, readFrom); + } else { + unsigned int size = len; // compute size needed for result + while ((foundAt = strstr(readFrom, find.buffer)) != NULL) { + readFrom = foundAt + find.len; + size += diff; + } + if (size == len) return; + if (size > capacity && !changeBuffer(size)) return; // XXX: tell user! + int index = len - 1; + while (index >= 0 && (index = lastIndexOf(find, index)) >= 0) { + readFrom = buffer + index + find.len; + memmove(readFrom + diff, readFrom, len - (readFrom - buffer)); + len += diff; + buffer[len] = 0; + memcpy(buffer + index, replace.buffer, replace.len); + index--; + } + } +} + +void String::remove(unsigned int index){ + // Pass the biggest integer as the count. The remove method + // below will take care of truncating it at the end of the + // string. + remove(index, (unsigned int)-1); +} + +void String::remove(unsigned int index, unsigned int count){ + if (index >= len) { return; } + if (count <= 0) { return; } + if (count > len - index) { count = len - index; } + char *writeTo = buffer + index; + len = len - count; + strncpy(writeTo, buffer + index + count,len - index); + buffer[len] = 0; +} + +void String::toLowerCase(void) +{ + if (!buffer) return; + for (char *p = buffer; *p; p++) { + *p = tolower(*p); + } +} + +void String::toUpperCase(void) +{ + if (!buffer) return; + for (char *p = buffer; *p; p++) { + *p = toupper(*p); + } +} + +void String::trim(void) +{ + if (!buffer || len == 0) return; + char *begin = buffer; + while (isspace(*begin)) begin++; + char *end = buffer + len - 1; + while (isspace(*end) && end >= begin) end--; + len = end + 1 - begin; + if (begin > buffer) memcpy(buffer, begin, len); + buffer[len] = 0; +} + +/*********************************************/ +/* Parsing / Conversion */ +/*********************************************/ + +long String::toInt(void) const +{ + if (buffer) return atol(buffer); + return 0; +} + +float String::toFloat(void) const +{ + return float(toDouble()); +} + +double String::toDouble(void) const +{ + if (buffer) return atof(buffer); + return 0; +} diff --git a/external/arduino/avr/cores/arduino/WString.h b/external/arduino/avr/cores/arduino/WString.h new file mode 100644 index 000000000..77709c3ba --- /dev/null +++ b/external/arduino/avr/cores/arduino/WString.h @@ -0,0 +1,229 @@ +/* + WString.h - String library for Wiring & Arduino + ...mostly rewritten by Paul Stoffregen... + Copyright (c) 2009-10 Hernando Barragan. All right reserved. + Copyright 2011, Paul Stoffregen, paul@pjrc.com + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef String_class_h +#define String_class_h +#ifdef __cplusplus + +#include +#include +#include +#include + +// When compiling programs with this class, the following gcc parameters +// dramatically increase performance and memory (RAM) efficiency, typically +// with little or no increase in code size. +// -felide-constructors +// -std=c++0x + +class __FlashStringHelper; +#define F(string_literal) (reinterpret_cast(PSTR(string_literal))) + +// An inherited class for holding the result of a concatenation. These +// result objects are assumed to be writable by subsequent concatenations. +class StringSumHelper; + +// The string class +class String +{ + // use a function pointer to allow for "if (s)" without the + // complications of an operator bool(). for more information, see: + // http://www.artima.com/cppsource/safebool.html + typedef void (String::*StringIfHelperType)() const; + void StringIfHelper() const {} + +public: + // constructors + // creates a copy of the initial value. + // if the initial value is null or invalid, or if memory allocation + // fails, the string will be marked as invalid (i.e. "if (s)" will + // be false). + String(const char *cstr = ""); + String(const String &str); + String(const __FlashStringHelper *str); + #if __cplusplus >= 201103L || defined(__GXX_EXPERIMENTAL_CXX0X__) + String(String &&rval); + String(StringSumHelper &&rval); + #endif + explicit String(char c); + explicit String(unsigned char, unsigned char base=10); + explicit String(int, unsigned char base=10); + explicit String(unsigned int, unsigned char base=10); + explicit String(long, unsigned char base=10); + explicit String(unsigned long, unsigned char base=10); + explicit String(float, unsigned char decimalPlaces=2); + explicit String(double, unsigned char decimalPlaces=2); + ~String(void); + + // memory management + // return true on success, false on failure (in which case, the string + // is left unchanged). reserve(0), if successful, will validate an + // invalid string (i.e., "if (s)" will be true afterwards) + unsigned char reserve(unsigned int size); + inline unsigned int length(void) const {return len;} + + // creates a copy of the assigned value. if the value is null or + // invalid, or if the memory allocation fails, the string will be + // marked as invalid ("if (s)" will be false). + String & operator = (const String &rhs); + String & operator = (const char *cstr); + String & operator = (const __FlashStringHelper *str); + #if __cplusplus >= 201103L || defined(__GXX_EXPERIMENTAL_CXX0X__) + String & operator = (String &&rval); + String & operator = (StringSumHelper &&rval); + #endif + + // concatenate (works w/ built-in types) + + // returns true on success, false on failure (in which case, the string + // is left unchanged). if the argument is null or invalid, the + // concatenation is considered unsucessful. + unsigned char concat(const String &str); + unsigned char concat(const char *cstr); + unsigned char concat(char c); + unsigned char concat(unsigned char c); + unsigned char concat(int num); + unsigned char concat(unsigned int num); + unsigned char concat(long num); + unsigned char concat(unsigned long num); + unsigned char concat(float num); + unsigned char concat(double num); + unsigned char concat(const __FlashStringHelper * str); + + // if there's not enough memory for the concatenated value, the string + // will be left unchanged (but this isn't signalled in any way) + String & operator += (const String &rhs) {concat(rhs); return (*this);} + String & operator += (const char *cstr) {concat(cstr); return (*this);} + String & operator += (char c) {concat(c); return (*this);} + String & operator += (unsigned char num) {concat(num); return (*this);} + String & operator += (int num) {concat(num); return (*this);} + String & operator += (unsigned int num) {concat(num); return (*this);} + String & operator += (long num) {concat(num); return (*this);} + String & operator += (unsigned long num) {concat(num); return (*this);} + String & operator += (float num) {concat(num); return (*this);} + String & operator += (double num) {concat(num); return (*this);} + String & operator += (const __FlashStringHelper *str){concat(str); return (*this);} + + friend StringSumHelper & operator + (const StringSumHelper &lhs, const String &rhs); + friend StringSumHelper & operator + (const StringSumHelper &lhs, const char *cstr); + friend StringSumHelper & operator + (const StringSumHelper &lhs, char c); + friend StringSumHelper & operator + (const StringSumHelper &lhs, unsigned char num); + friend StringSumHelper & operator + (const StringSumHelper &lhs, int num); + friend StringSumHelper & operator + (const StringSumHelper &lhs, unsigned int num); + friend StringSumHelper & operator + (const StringSumHelper &lhs, long num); + friend StringSumHelper & operator + (const StringSumHelper &lhs, unsigned long num); + friend StringSumHelper & operator + (const StringSumHelper &lhs, float num); + friend StringSumHelper & operator + (const StringSumHelper &lhs, double num); + friend StringSumHelper & operator + (const StringSumHelper &lhs, const __FlashStringHelper *rhs); + + // comparison (only works w/ Strings and "strings") + operator StringIfHelperType() const { return buffer ? &String::StringIfHelper : 0; } + int compareTo(const String &s) const; + unsigned char equals(const String &s) const; + unsigned char equals(const char *cstr) const; + unsigned char operator == (const String &rhs) const {return equals(rhs);} + unsigned char operator == (const char *cstr) const {return equals(cstr);} + unsigned char operator != (const String &rhs) const {return !equals(rhs);} + unsigned char operator != (const char *cstr) const {return !equals(cstr);} + unsigned char operator < (const String &rhs) const; + unsigned char operator > (const String &rhs) const; + unsigned char operator <= (const String &rhs) const; + unsigned char operator >= (const String &rhs) const; + unsigned char equalsIgnoreCase(const String &s) const; + unsigned char startsWith( const String &prefix) const; + unsigned char startsWith(const String &prefix, unsigned int offset) const; + unsigned char endsWith(const String &suffix) const; + + // character acccess + char charAt(unsigned int index) const; + void setCharAt(unsigned int index, char c); + char operator [] (unsigned int index) const; + char& operator [] (unsigned int index); + void getBytes(unsigned char *buf, unsigned int bufsize, unsigned int index=0) const; + void toCharArray(char *buf, unsigned int bufsize, unsigned int index=0) const + { getBytes((unsigned char *)buf, bufsize, index); } + const char* c_str() const { return buffer; } + char* begin() { return buffer; } + char* end() { return buffer + length(); } + const char* begin() const { return c_str(); } + const char* end() const { return c_str() + length(); } + + // search + int indexOf( char ch ) const; + int indexOf( char ch, unsigned int fromIndex ) const; + int indexOf( const String &str ) const; + int indexOf( const String &str, unsigned int fromIndex ) const; + int lastIndexOf( char ch ) const; + int lastIndexOf( char ch, unsigned int fromIndex ) const; + int lastIndexOf( const String &str ) const; + int lastIndexOf( const String &str, unsigned int fromIndex ) const; + String substring( unsigned int beginIndex ) const { return substring(beginIndex, len); }; + String substring( unsigned int beginIndex, unsigned int endIndex ) const; + + // modification + void replace(char find, char replace); + void replace(const String& find, const String& replace); + void remove(unsigned int index); + void remove(unsigned int index, unsigned int count); + void toLowerCase(void); + void toUpperCase(void); + void trim(void); + + // parsing/conversion + long toInt(void) const; + float toFloat(void) const; + double toDouble(void) const; + +protected: + char *buffer; // the actual char array + unsigned int capacity; // the array length minus one (for the '\0') + unsigned int len; // the String length (not counting the '\0') +protected: + void init(void); + void invalidate(void); + unsigned char changeBuffer(unsigned int maxStrLen); + unsigned char concat(const char *cstr, unsigned int length); + + // copy and move + String & copy(const char *cstr, unsigned int length); + String & copy(const __FlashStringHelper *pstr, unsigned int length); + #if __cplusplus >= 201103L || defined(__GXX_EXPERIMENTAL_CXX0X__) + void move(String &rhs); + #endif +}; + +class StringSumHelper : public String +{ +public: + StringSumHelper(const String &s) : String(s) {} + StringSumHelper(const char *p) : String(p) {} + StringSumHelper(char c) : String(c) {} + StringSumHelper(unsigned char num) : String(num) {} + StringSumHelper(int num) : String(num) {} + StringSumHelper(unsigned int num) : String(num) {} + StringSumHelper(long num) : String(num) {} + StringSumHelper(unsigned long num) : String(num) {} + StringSumHelper(float num) : String(num) {} + StringSumHelper(double num) : String(num) {} +}; + +#endif // __cplusplus +#endif // String_class_h diff --git a/external/arduino/avr/cores/arduino/abi.cpp b/external/arduino/avr/cores/arduino/abi.cpp new file mode 100644 index 000000000..8d719b8e6 --- /dev/null +++ b/external/arduino/avr/cores/arduino/abi.cpp @@ -0,0 +1,35 @@ +/* + Copyright (c) 2014 Arduino. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include + +extern "C" void __cxa_pure_virtual(void) __attribute__ ((__noreturn__)); +extern "C" void __cxa_deleted_virtual(void) __attribute__ ((__noreturn__)); + +void __cxa_pure_virtual(void) { + // We might want to write some diagnostics to uart in this case + //std::terminate(); + abort(); +} + +void __cxa_deleted_virtual(void) { + // We might want to write some diagnostics to uart in this case + //std::terminate(); + abort(); +} + diff --git a/external/arduino/avr/cores/arduino/binary.h b/external/arduino/avr/cores/arduino/binary.h new file mode 100644 index 000000000..aec4c733d --- /dev/null +++ b/external/arduino/avr/cores/arduino/binary.h @@ -0,0 +1,534 @@ +/* + binary.h - Definitions for binary constants + Copyright (c) 2006 David A. Mellis. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef Binary_h +#define Binary_h + +#define B0 0 +#define B00 0 +#define B000 0 +#define B0000 0 +#define B00000 0 +#define B000000 0 +#define B0000000 0 +#define B00000000 0 +#define B1 1 +#define B01 1 +#define B001 1 +#define B0001 1 +#define B00001 1 +#define B000001 1 +#define B0000001 1 +#define B00000001 1 +#define B10 2 +#define B010 2 +#define B0010 2 +#define B00010 2 +#define B000010 2 +#define B0000010 2 +#define B00000010 2 +#define B11 3 +#define B011 3 +#define B0011 3 +#define B00011 3 +#define B000011 3 +#define B0000011 3 +#define B00000011 3 +#define B100 4 +#define B0100 4 +#define B00100 4 +#define B000100 4 +#define B0000100 4 +#define B00000100 4 +#define B101 5 +#define B0101 5 +#define B00101 5 +#define B000101 5 +#define B0000101 5 +#define B00000101 5 +#define B110 6 +#define B0110 6 +#define B00110 6 +#define B000110 6 +#define B0000110 6 +#define B00000110 6 +#define B111 7 +#define B0111 7 +#define B00111 7 +#define B000111 7 +#define B0000111 7 +#define B00000111 7 +#define B1000 8 +#define B01000 8 +#define B001000 8 +#define B0001000 8 +#define B00001000 8 +#define B1001 9 +#define B01001 9 +#define B001001 9 +#define B0001001 9 +#define B00001001 9 +#define B1010 10 +#define B01010 10 +#define B001010 10 +#define B0001010 10 +#define B00001010 10 +#define B1011 11 +#define B01011 11 +#define B001011 11 +#define B0001011 11 +#define B00001011 11 +#define B1100 12 +#define B01100 12 +#define B001100 12 +#define B0001100 12 +#define B00001100 12 +#define B1101 13 +#define B01101 13 +#define B001101 13 +#define B0001101 13 +#define B00001101 13 +#define B1110 14 +#define B01110 14 +#define B001110 14 +#define B0001110 14 +#define B00001110 14 +#define B1111 15 +#define B01111 15 +#define B001111 15 +#define B0001111 15 +#define B00001111 15 +#define B10000 16 +#define B010000 16 +#define B0010000 16 +#define B00010000 16 +#define B10001 17 +#define B010001 17 +#define B0010001 17 +#define B00010001 17 +#define B10010 18 +#define B010010 18 +#define B0010010 18 +#define B00010010 18 +#define B10011 19 +#define B010011 19 +#define B0010011 19 +#define B00010011 19 +#define B10100 20 +#define B010100 20 +#define B0010100 20 +#define B00010100 20 +#define B10101 21 +#define B010101 21 +#define B0010101 21 +#define B00010101 21 +#define B10110 22 +#define B010110 22 +#define B0010110 22 +#define B00010110 22 +#define B10111 23 +#define B010111 23 +#define B0010111 23 +#define B00010111 23 +#define B11000 24 +#define B011000 24 +#define B0011000 24 +#define B00011000 24 +#define B11001 25 +#define B011001 25 +#define B0011001 25 +#define B00011001 25 +#define B11010 26 +#define B011010 26 +#define B0011010 26 +#define B00011010 26 +#define B11011 27 +#define B011011 27 +#define B0011011 27 +#define B00011011 27 +#define B11100 28 +#define B011100 28 +#define B0011100 28 +#define B00011100 28 +#define B11101 29 +#define B011101 29 +#define B0011101 29 +#define B00011101 29 +#define B11110 30 +#define B011110 30 +#define B0011110 30 +#define B00011110 30 +#define B11111 31 +#define B011111 31 +#define B0011111 31 +#define B00011111 31 +#define B100000 32 +#define B0100000 32 +#define B00100000 32 +#define B100001 33 +#define B0100001 33 +#define B00100001 33 +#define B100010 34 +#define B0100010 34 +#define B00100010 34 +#define B100011 35 +#define B0100011 35 +#define B00100011 35 +#define B100100 36 +#define B0100100 36 +#define B00100100 36 +#define B100101 37 +#define B0100101 37 +#define B00100101 37 +#define B100110 38 +#define B0100110 38 +#define B00100110 38 +#define B100111 39 +#define B0100111 39 +#define B00100111 39 +#define B101000 40 +#define B0101000 40 +#define B00101000 40 +#define B101001 41 +#define B0101001 41 +#define B00101001 41 +#define B101010 42 +#define B0101010 42 +#define B00101010 42 +#define B101011 43 +#define B0101011 43 +#define B00101011 43 +#define B101100 44 +#define B0101100 44 +#define B00101100 44 +#define B101101 45 +#define B0101101 45 +#define B00101101 45 +#define B101110 46 +#define B0101110 46 +#define B00101110 46 +#define B101111 47 +#define B0101111 47 +#define B00101111 47 +#define B110000 48 +#define B0110000 48 +#define B00110000 48 +#define B110001 49 +#define B0110001 49 +#define B00110001 49 +#define B110010 50 +#define B0110010 50 +#define B00110010 50 +#define B110011 51 +#define B0110011 51 +#define B00110011 51 +#define B110100 52 +#define B0110100 52 +#define B00110100 52 +#define B110101 53 +#define B0110101 53 +#define B00110101 53 +#define B110110 54 +#define B0110110 54 +#define B00110110 54 +#define B110111 55 +#define B0110111 55 +#define B00110111 55 +#define B111000 56 +#define B0111000 56 +#define B00111000 56 +#define B111001 57 +#define B0111001 57 +#define B00111001 57 +#define B111010 58 +#define B0111010 58 +#define B00111010 58 +#define B111011 59 +#define B0111011 59 +#define B00111011 59 +#define B111100 60 +#define B0111100 60 +#define B00111100 60 +#define B111101 61 +#define B0111101 61 +#define B00111101 61 +#define B111110 62 +#define B0111110 62 +#define B00111110 62 +#define B111111 63 +#define B0111111 63 +#define B00111111 63 +#define B1000000 64 +#define B01000000 64 +#define B1000001 65 +#define B01000001 65 +#define B1000010 66 +#define B01000010 66 +#define B1000011 67 +#define B01000011 67 +#define B1000100 68 +#define B01000100 68 +#define B1000101 69 +#define B01000101 69 +#define B1000110 70 +#define B01000110 70 +#define B1000111 71 +#define B01000111 71 +#define B1001000 72 +#define B01001000 72 +#define B1001001 73 +#define B01001001 73 +#define B1001010 74 +#define B01001010 74 +#define B1001011 75 +#define B01001011 75 +#define B1001100 76 +#define B01001100 76 +#define B1001101 77 +#define B01001101 77 +#define B1001110 78 +#define B01001110 78 +#define B1001111 79 +#define B01001111 79 +#define B1010000 80 +#define B01010000 80 +#define B1010001 81 +#define B01010001 81 +#define B1010010 82 +#define B01010010 82 +#define B1010011 83 +#define B01010011 83 +#define B1010100 84 +#define B01010100 84 +#define B1010101 85 +#define B01010101 85 +#define B1010110 86 +#define B01010110 86 +#define B1010111 87 +#define B01010111 87 +#define B1011000 88 +#define B01011000 88 +#define B1011001 89 +#define B01011001 89 +#define B1011010 90 +#define B01011010 90 +#define B1011011 91 +#define B01011011 91 +#define B1011100 92 +#define B01011100 92 +#define B1011101 93 +#define B01011101 93 +#define B1011110 94 +#define B01011110 94 +#define B1011111 95 +#define B01011111 95 +#define B1100000 96 +#define B01100000 96 +#define B1100001 97 +#define B01100001 97 +#define B1100010 98 +#define B01100010 98 +#define B1100011 99 +#define B01100011 99 +#define B1100100 100 +#define B01100100 100 +#define B1100101 101 +#define B01100101 101 +#define B1100110 102 +#define B01100110 102 +#define B1100111 103 +#define B01100111 103 +#define B1101000 104 +#define B01101000 104 +#define B1101001 105 +#define B01101001 105 +#define B1101010 106 +#define B01101010 106 +#define B1101011 107 +#define B01101011 107 +#define B1101100 108 +#define B01101100 108 +#define B1101101 109 +#define B01101101 109 +#define B1101110 110 +#define B01101110 110 +#define B1101111 111 +#define B01101111 111 +#define B1110000 112 +#define B01110000 112 +#define B1110001 113 +#define B01110001 113 +#define B1110010 114 +#define B01110010 114 +#define B1110011 115 +#define B01110011 115 +#define B1110100 116 +#define B01110100 116 +#define B1110101 117 +#define B01110101 117 +#define B1110110 118 +#define B01110110 118 +#define B1110111 119 +#define B01110111 119 +#define B1111000 120 +#define B01111000 120 +#define B1111001 121 +#define B01111001 121 +#define B1111010 122 +#define B01111010 122 +#define B1111011 123 +#define B01111011 123 +#define B1111100 124 +#define B01111100 124 +#define B1111101 125 +#define B01111101 125 +#define B1111110 126 +#define B01111110 126 +#define B1111111 127 +#define B01111111 127 +#define B10000000 128 +#define B10000001 129 +#define B10000010 130 +#define B10000011 131 +#define B10000100 132 +#define B10000101 133 +#define B10000110 134 +#define B10000111 135 +#define B10001000 136 +#define B10001001 137 +#define B10001010 138 +#define B10001011 139 +#define B10001100 140 +#define B10001101 141 +#define B10001110 142 +#define B10001111 143 +#define B10010000 144 +#define B10010001 145 +#define B10010010 146 +#define B10010011 147 +#define B10010100 148 +#define B10010101 149 +#define B10010110 150 +#define B10010111 151 +#define B10011000 152 +#define B10011001 153 +#define B10011010 154 +#define B10011011 155 +#define B10011100 156 +#define B10011101 157 +#define B10011110 158 +#define B10011111 159 +#define B10100000 160 +#define B10100001 161 +#define B10100010 162 +#define B10100011 163 +#define B10100100 164 +#define B10100101 165 +#define B10100110 166 +#define B10100111 167 +#define B10101000 168 +#define B10101001 169 +#define B10101010 170 +#define B10101011 171 +#define B10101100 172 +#define B10101101 173 +#define B10101110 174 +#define B10101111 175 +#define B10110000 176 +#define B10110001 177 +#define B10110010 178 +#define B10110011 179 +#define B10110100 180 +#define B10110101 181 +#define B10110110 182 +#define B10110111 183 +#define B10111000 184 +#define B10111001 185 +#define B10111010 186 +#define B10111011 187 +#define B10111100 188 +#define B10111101 189 +#define B10111110 190 +#define B10111111 191 +#define B11000000 192 +#define B11000001 193 +#define B11000010 194 +#define B11000011 195 +#define B11000100 196 +#define B11000101 197 +#define B11000110 198 +#define B11000111 199 +#define B11001000 200 +#define B11001001 201 +#define B11001010 202 +#define B11001011 203 +#define B11001100 204 +#define B11001101 205 +#define B11001110 206 +#define B11001111 207 +#define B11010000 208 +#define B11010001 209 +#define B11010010 210 +#define B11010011 211 +#define B11010100 212 +#define B11010101 213 +#define B11010110 214 +#define B11010111 215 +#define B11011000 216 +#define B11011001 217 +#define B11011010 218 +#define B11011011 219 +#define B11011100 220 +#define B11011101 221 +#define B11011110 222 +#define B11011111 223 +#define B11100000 224 +#define B11100001 225 +#define B11100010 226 +#define B11100011 227 +#define B11100100 228 +#define B11100101 229 +#define B11100110 230 +#define B11100111 231 +#define B11101000 232 +#define B11101001 233 +#define B11101010 234 +#define B11101011 235 +#define B11101100 236 +#define B11101101 237 +#define B11101110 238 +#define B11101111 239 +#define B11110000 240 +#define B11110001 241 +#define B11110010 242 +#define B11110011 243 +#define B11110100 244 +#define B11110101 245 +#define B11110110 246 +#define B11110111 247 +#define B11111000 248 +#define B11111001 249 +#define B11111010 250 +#define B11111011 251 +#define B11111100 252 +#define B11111101 253 +#define B11111110 254 +#define B11111111 255 + +#endif diff --git a/external/arduino/avr/cores/arduino/hooks.c b/external/arduino/avr/cores/arduino/hooks.c new file mode 100644 index 000000000..255bee607 --- /dev/null +++ b/external/arduino/avr/cores/arduino/hooks.c @@ -0,0 +1,32 @@ +/* + Copyright (c) 2012 Arduino. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/** + * Empty yield() hook. + * + * This function is intended to be used by library writers to build + * libraries or sketches that supports cooperative threads. + * + * Its defined as a weak symbol and it can be redefined to implement a + * real cooperative scheduler. + */ +static void __empty() { + // Empty +} +//void yield(void) __attribute__ ((weak, alias("__empty"))); +void yield() {__empty();} \ No newline at end of file diff --git a/external/arduino/avr/cores/arduino/main.cpp b/external/arduino/avr/cores/arduino/main.cpp new file mode 100644 index 000000000..434cd403c --- /dev/null +++ b/external/arduino/avr/cores/arduino/main.cpp @@ -0,0 +1,52 @@ +/* + main.cpp - Main loop for Arduino sketches + Copyright (c) 2005-2013 Arduino Team. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include + +// Declared weak in Arduino.h to allow user redefinitions. +int atexit(void (* /*func*/ )()) { return 0; } + +// Weak empty variant initialization function. +// May be redefined by variant files. +void initVariant() __attribute__((weak)); +void initVariant() { } + +void setupUSB() __attribute__((weak)); +void setupUSB() { } + +int main(void) +{ + init(); + + initVariant(); + +#if defined(USBCON) + USBDevice.attach(); +#endif + + setup(); + + for (;;) { + loop(); + if (serialEventRun) serialEventRun(); + } + + return 0; +} + diff --git a/external/arduino/avr/cores/arduino/new.cpp b/external/arduino/avr/cores/arduino/new.cpp new file mode 100644 index 000000000..fc30cf887 --- /dev/null +++ b/external/arduino/avr/cores/arduino/new.cpp @@ -0,0 +1,41 @@ +/* + Copyright (c) 2014 Arduino. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include + +void *operator new(size_t size) { + return malloc(size); +} + +void *operator new[](size_t size) { + return malloc(size); +} + +void * operator new(size_t size, void * ptr) noexcept { + (void)size; + return ptr; +} + +void operator delete(void * ptr) { + free(ptr); +} + +void operator delete[](void * ptr) { + free(ptr); +} + diff --git a/external/arduino/avr/cores/arduino/new.h b/external/arduino/avr/cores/arduino/new.h new file mode 100644 index 000000000..a48b9e28d --- /dev/null +++ b/external/arduino/avr/cores/arduino/new.h @@ -0,0 +1,31 @@ +/* + Copyright (c) 2014 Arduino. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef NEW_H +#define NEW_H + +#include + +void * operator new(size_t size); +void * operator new[](size_t size); +//void * operator new(size_t size, void * ptr) noexcept; +void operator delete(void * ptr); +void operator delete[](void * ptr); + +#endif + diff --git a/external/arduino/avr/cores/arduino/wiring.c b/external/arduino/avr/cores/arduino/wiring.c new file mode 100644 index 000000000..972713581 --- /dev/null +++ b/external/arduino/avr/cores/arduino/wiring.c @@ -0,0 +1,392 @@ +/* + wiring.c - Partial implementation of the Wiring API for the ATmega8. + Part of Arduino - http://www.arduino.cc/ + + Copyright (c) 2005-2006 David A. Mellis + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General + Public License along with this library; if not, write to the + Free Software Foundation, Inc., 59 Temple Place, Suite 330, + Boston, MA 02111-1307 USA +*/ + +#include "wiring_private.h" + +// the prescaler is set so that timer0 ticks every 64 clock cycles, and the +// the overflow handler is called every 256 ticks. +#define MICROSECONDS_PER_TIMER0_OVERFLOW (clockCyclesToMicroseconds(64 * 256)) + +// the whole number of milliseconds per timer0 overflow +#define MILLIS_INC (MICROSECONDS_PER_TIMER0_OVERFLOW / 1000) + +// the fractional number of milliseconds per timer0 overflow. we shift right +// by three to fit these numbers into a byte. (for the clock speeds we care +// about - 8 and 16 MHz - this doesn't lose precision.) +#define FRACT_INC ((MICROSECONDS_PER_TIMER0_OVERFLOW % 1000) >> 3) +#define FRACT_MAX (1000 >> 3) + +volatile unsigned long timer0_overflow_count = 0; +volatile unsigned long timer0_millis = 0; +static unsigned char timer0_fract = 0; + +#if defined(TIM0_OVF_vect) +ISR(TIM0_OVF_vect) +#else +ISR(TIMER0_OVF_vect) +#endif +{ + // copy these to local variables so they can be stored in registers + // (volatile variables must be read from memory on every access) + unsigned long m = timer0_millis; + unsigned char f = timer0_fract; + + m += MILLIS_INC; + f += FRACT_INC; + if (f >= FRACT_MAX) { + f -= FRACT_MAX; + m += 1; + } + + timer0_fract = f; + timer0_millis = m; + timer0_overflow_count++; +} + +unsigned long millis() +{ + unsigned long m; + uint8_t oldSREG = SREG; + + // disable interrupts while we read timer0_millis or we might get an + // inconsistent value (e.g. in the middle of a write to timer0_millis) + cli(); + m = timer0_millis; + SREG = oldSREG; + + return m; +} + +unsigned long micros() { + unsigned long m; + uint8_t oldSREG = SREG, t; + + cli(); + m = timer0_overflow_count; +#if defined(TCNT0) + t = TCNT0; +#elif defined(TCNT0L) + t = TCNT0L; +#else + #error TIMER 0 not defined +#endif + +#ifdef TIFR0 + if ((TIFR0 & _BV(TOV0)) && (t < 255)) + m++; +#else + if ((TIFR & _BV(TOV0)) && (t < 255)) + m++; +#endif + + SREG = oldSREG; + + return ((m << 8) + t) * (64 / clockCyclesPerMicrosecond()); +} + +void delay(unsigned long ms) +{ + uint32_t start = micros(); + + while (ms > 0) { + yield(); + while ( ms > 0 && (micros() - start) >= 1000) { + ms--; + start += 1000; + } + } +} + +/* Delay for the given number of microseconds. Assumes a 1, 8, 12, 16, 20 or 24 MHz clock. */ +void delayMicroseconds(unsigned int us) +{ + // call = 4 cycles + 2 to 4 cycles to init us(2 for constant delay, 4 for variable) + + // calling avrlib's delay_us() function with low values (e.g. 1 or + // 2 microseconds) gives delays longer than desired. + //delay_us(us); +#if F_CPU >= 24000000L + // for the 24 MHz clock for the aventurous ones, trying to overclock + + // zero delay fix + if (!us) return; // = 3 cycles, (4 when true) + + // the following loop takes a 1/6 of a microsecond (4 cycles) + // per iteration, so execute it six times for each microsecond of + // delay requested. + us *= 6; // x6 us, = 7 cycles + + // account for the time taken in the preceeding commands. + // we just burned 22 (24) cycles above, remove 5, (5*4=20) + // us is at least 6 so we can substract 5 + us -= 5; //=2 cycles + +#elif F_CPU >= 20000000L + // for the 20 MHz clock on rare Arduino boards + + // for a one-microsecond delay, simply return. the overhead + // of the function call takes 18 (20) cycles, which is 1us + __asm__ __volatile__ ( + "nop" "\n\t" + "nop" "\n\t" + "nop" "\n\t" + "nop"); //just waiting 4 cycles + if (us <= 1) return; // = 3 cycles, (4 when true) + + // the following loop takes a 1/5 of a microsecond (4 cycles) + // per iteration, so execute it five times for each microsecond of + // delay requested. + us = (us << 2) + us; // x5 us, = 7 cycles + + // account for the time taken in the preceeding commands. + // we just burned 26 (28) cycles above, remove 7, (7*4=28) + // us is at least 10 so we can substract 7 + us -= 7; // 2 cycles + +#elif F_CPU >= 16000000L + // for the 16 MHz clock on most Arduino boards + + // for a one-microsecond delay, simply return. the overhead + // of the function call takes 14 (16) cycles, which is 1us + if (us <= 1) return; // = 3 cycles, (4 when true) + + // the following loop takes 1/4 of a microsecond (4 cycles) + // per iteration, so execute it four times for each microsecond of + // delay requested. + us <<= 2; // x4 us, = 4 cycles + + // account for the time taken in the preceeding commands. + // we just burned 19 (21) cycles above, remove 5, (5*4=20) + // us is at least 8 so we can substract 5 + us -= 5; // = 2 cycles, + +#elif F_CPU >= 12000000L + // for the 12 MHz clock if somebody is working with USB + + // for a 1 microsecond delay, simply return. the overhead + // of the function call takes 14 (16) cycles, which is 1.5us + if (us <= 1) return; // = 3 cycles, (4 when true) + + // the following loop takes 1/3 of a microsecond (4 cycles) + // per iteration, so execute it three times for each microsecond of + // delay requested. + us = (us << 1) + us; // x3 us, = 5 cycles + + // account for the time taken in the preceeding commands. + // we just burned 20 (22) cycles above, remove 5, (5*4=20) + // us is at least 6 so we can substract 5 + us -= 5; //2 cycles + +#elif F_CPU >= 8000000L + // for the 8 MHz internal clock + + // for a 1 and 2 microsecond delay, simply return. the overhead + // of the function call takes 14 (16) cycles, which is 2us + if (us <= 2) return; // = 3 cycles, (4 when true) + + // the following loop takes 1/2 of a microsecond (4 cycles) + // per iteration, so execute it twice for each microsecond of + // delay requested. + us <<= 1; //x2 us, = 2 cycles + + // account for the time taken in the preceeding commands. + // we just burned 17 (19) cycles above, remove 4, (4*4=16) + // us is at least 6 so we can substract 4 + us -= 4; // = 2 cycles + +#else + // for the 1 MHz internal clock (default settings for common Atmega microcontrollers) + + // the overhead of the function calls is 14 (16) cycles + if (us <= 16) return; //= 3 cycles, (4 when true) + if (us <= 25) return; //= 3 cycles, (4 when true), (must be at least 25 if we want to substract 22) + + // compensate for the time taken by the preceeding and next commands (about 22 cycles) + us -= 22; // = 2 cycles + // the following loop takes 4 microseconds (4 cycles) + // per iteration, so execute it us/4 times + // us is at least 4, divided by 4 gives us 1 (no zero delay bug) + us >>= 2; // us div 4, = 4 cycles + + +#endif + + // busy wait + __asm__ __volatile__ ( + "1: sbiw %0,1" "\n\t" // 2 cycles + "brne 1b" : "=w" (us) : "0" (us) // 2 cycles + ); + // return = 4 cycles +} + +void init() +{ + // this needs to be called before setup() or some functions won't + // work there + sei(); + + // on the ATmega168, timer 0 is also used for fast hardware pwm + // (using phase-correct PWM would mean that timer 0 overflowed half as often + // resulting in different millis() behavior on the ATmega8 and ATmega168) +#if defined(TCCR0A) && defined(WGM01) + sbi(TCCR0A, WGM01); + sbi(TCCR0A, WGM00); +#endif + + // set timer 0 prescale factor to 64 +#if defined(__AVR_ATmega128__) + // CPU specific: different values for the ATmega128 + sbi(TCCR0, CS02); +#elif defined(TCCR0) && defined(CS01) && defined(CS00) + // this combination is for the standard atmega8 + sbi(TCCR0, CS01); + sbi(TCCR0, CS00); +#elif defined(TCCR0B) && defined(CS01) && defined(CS00) + // this combination is for the standard 168/328/1280/2560 + sbi(TCCR0B, CS01); + sbi(TCCR0B, CS00); +#elif defined(TCCR0A) && defined(CS01) && defined(CS00) + // this combination is for the __AVR_ATmega645__ series + sbi(TCCR0A, CS01); + sbi(TCCR0A, CS00); +#else + #error Timer 0 prescale factor 64 not set correctly +#endif + + // enable timer 0 overflow interrupt +#if defined(TIMSK) && defined(TOIE0) + sbi(TIMSK, TOIE0); +#elif defined(TIMSK0) && defined(TOIE0) + sbi(TIMSK0, TOIE0); +#else + #error Timer 0 overflow interrupt not set correctly +#endif + + // timers 1 and 2 are used for phase-correct hardware pwm + // this is better for motors as it ensures an even waveform + // note, however, that fast pwm mode can achieve a frequency of up + // 8 MHz (with a 16 MHz clock) at 50% duty cycle + +#if defined(TCCR1B) && defined(CS11) && defined(CS10) + TCCR1B = 0; + + // set timer 1 prescale factor to 64 + sbi(TCCR1B, CS11); +#if F_CPU >= 8000000L + sbi(TCCR1B, CS10); +#endif +#elif defined(TCCR1) && defined(CS11) && defined(CS10) + sbi(TCCR1, CS11); +#if F_CPU >= 8000000L + sbi(TCCR1, CS10); +#endif +#endif + // put timer 1 in 8-bit phase correct pwm mode +#if defined(TCCR1A) && defined(WGM10) + sbi(TCCR1A, WGM10); +#endif + + // set timer 2 prescale factor to 64 +#if defined(TCCR2) && defined(CS22) + sbi(TCCR2, CS22); +#elif defined(TCCR2B) && defined(CS22) + sbi(TCCR2B, CS22); +//#else + // Timer 2 not finished (may not be present on this CPU) +#endif + + // configure timer 2 for phase correct pwm (8-bit) +#if defined(TCCR2) && defined(WGM20) + sbi(TCCR2, WGM20); +#elif defined(TCCR2A) && defined(WGM20) + sbi(TCCR2A, WGM20); +//#else + // Timer 2 not finished (may not be present on this CPU) +#endif + +#if defined(TCCR3B) && defined(CS31) && defined(WGM30) + sbi(TCCR3B, CS31); // set timer 3 prescale factor to 64 + sbi(TCCR3B, CS30); + sbi(TCCR3A, WGM30); // put timer 3 in 8-bit phase correct pwm mode +#endif + +#if defined(TCCR4A) && defined(TCCR4B) && defined(TCCR4D) /* beginning of timer4 block for 32U4 and similar */ + sbi(TCCR4B, CS42); // set timer4 prescale factor to 64 + sbi(TCCR4B, CS41); + sbi(TCCR4B, CS40); + sbi(TCCR4D, WGM40); // put timer 4 in phase- and frequency-correct PWM mode + sbi(TCCR4A, PWM4A); // enable PWM mode for comparator OCR4A + sbi(TCCR4C, PWM4D); // enable PWM mode for comparator OCR4D +#else /* beginning of timer4 block for ATMEGA1280 and ATMEGA2560 */ +#if defined(TCCR4B) && defined(CS41) && defined(WGM40) + sbi(TCCR4B, CS41); // set timer 4 prescale factor to 64 + sbi(TCCR4B, CS40); + sbi(TCCR4A, WGM40); // put timer 4 in 8-bit phase correct pwm mode +#endif +#endif /* end timer4 block for ATMEGA1280/2560 and similar */ + +#if defined(TCCR5B) && defined(CS51) && defined(WGM50) + sbi(TCCR5B, CS51); // set timer 5 prescale factor to 64 + sbi(TCCR5B, CS50); + sbi(TCCR5A, WGM50); // put timer 5 in 8-bit phase correct pwm mode +#endif + +#if defined(ADCSRA) + // set a2d prescaler so we are inside the desired 50-200 KHz range. + #if F_CPU >= 16000000 // 16 MHz / 128 = 125 KHz + sbi(ADCSRA, ADPS2); + sbi(ADCSRA, ADPS1); + sbi(ADCSRA, ADPS0); + #elif F_CPU >= 8000000 // 8 MHz / 64 = 125 KHz + sbi(ADCSRA, ADPS2); + sbi(ADCSRA, ADPS1); + cbi(ADCSRA, ADPS0); + #elif F_CPU >= 4000000 // 4 MHz / 32 = 125 KHz + sbi(ADCSRA, ADPS2); + cbi(ADCSRA, ADPS1); + sbi(ADCSRA, ADPS0); + #elif F_CPU >= 2000000 // 2 MHz / 16 = 125 KHz + sbi(ADCSRA, ADPS2); + cbi(ADCSRA, ADPS1); + cbi(ADCSRA, ADPS0); + #elif F_CPU >= 1000000 // 1 MHz / 8 = 125 KHz + cbi(ADCSRA, ADPS2); + sbi(ADCSRA, ADPS1); + sbi(ADCSRA, ADPS0); + #else // 128 kHz / 2 = 64 KHz -> This is the closest you can get, the prescaler is 2 + cbi(ADCSRA, ADPS2); + cbi(ADCSRA, ADPS1); + sbi(ADCSRA, ADPS0); + #endif + // enable a2d conversions + sbi(ADCSRA, ADEN); +#endif + + // the bootloader connects pins 0 and 1 to the USART; disconnect them + // here so they can be used as normal digital i/o; they will be + // reconnected in Serial.begin() +#if defined(UCSRB) + UCSRB = 0; +#elif defined(UCSR0B) + UCSR0B = 0; +#endif +} diff --git a/external/arduino/avr/cores/arduino/wiring_analog.c b/external/arduino/avr/cores/arduino/wiring_analog.c new file mode 100644 index 000000000..967c2b976 --- /dev/null +++ b/external/arduino/avr/cores/arduino/wiring_analog.c @@ -0,0 +1,294 @@ +/* + wiring_analog.c - analog input and output + Part of Arduino - http://www.arduino.cc/ + + Copyright (c) 2005-2006 David A. Mellis + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General + Public License along with this library; if not, write to the + Free Software Foundation, Inc., 59 Temple Place, Suite 330, + Boston, MA 02111-1307 USA + + Modified 28 September 2010 by Mark Sproul +*/ + +#include "wiring_private.h" +#include "pins_arduino.h" + +uint8_t analog_reference = DEFAULT; + +void analogReference(uint8_t mode) +{ + // can't actually set the register here because the default setting + // will connect AVCC and the AREF pin, which would cause a short if + // there's something connected to AREF. + analog_reference = mode; +} + +int analogRead(uint8_t pin) +{ + uint8_t low, high; + +#if defined(analogPinToChannel) +#if defined(__AVR_ATmega32U4__) + if (pin >= 18) pin -= 18; // allow for channel or pin numbers +#endif + pin = analogPinToChannel(pin); +#elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) + if (pin >= 54) pin -= 54; // allow for channel or pin numbers +#elif defined(__AVR_ATmega32U4__) + if (pin >= 18) pin -= 18; // allow for channel or pin numbers +#elif defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__) || defined(__AVR_ATmega644__) || defined(__AVR_ATmega644A__) || defined(__AVR_ATmega644P__) || defined(__AVR_ATmega644PA__) + if (pin >= 24) pin -= 24; // allow for channel or pin numbers +#else + if (pin >= 14) pin -= 14; // allow for channel or pin numbers +#endif + +#if defined(ADCSRB) && defined(MUX5) + // the MUX5 bit of ADCSRB selects whether we're reading from channels + // 0 to 7 (MUX5 low) or 8 to 15 (MUX5 high). + ADCSRB = (ADCSRB & ~(1 << MUX5)) | (((pin >> 3) & 0x01) << MUX5); +#endif + + // set the analog reference (high two bits of ADMUX) and select the + // channel (low 4 bits). this also sets ADLAR (left-adjust result) + // to 0 (the default). +#if defined(ADMUX) +#if defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__) + ADMUX = (analog_reference << 4) | (pin & 0x07); +#else + ADMUX = (analog_reference << 6) | (pin & 0x07); +#endif +#endif + + // without a delay, we seem to read from the wrong channel + //delay(1); + +#if defined(ADCSRA) && defined(ADCL) + // start the conversion + sbi(ADCSRA, ADSC); + + // ADSC is cleared when the conversion finishes + while (bit_is_set(ADCSRA, ADSC)); + + // we have to read ADCL first; doing so locks both ADCL + // and ADCH until ADCH is read. reading ADCL second would + // cause the results of each conversion to be discarded, + // as ADCL and ADCH would be locked when it completed. + low = ADCL; + high = ADCH; +#else + // we dont have an ADC, return 0 + low = 0; + high = 0; +#endif + + // combine the two bytes + return (high << 8) | low; +} + +// Right now, PWM output only works on the pins with +// hardware support. These are defined in the appropriate +// pins_*.c file. For the rest of the pins, we default +// to digital output. +void analogWrite(uint8_t pin, int val) +{ + // We need to make sure the PWM output is enabled for those pins + // that support it, as we turn it off when digitally reading or + // writing with them. Also, make sure the pin is in output mode + // for consistenty with Wiring, which doesn't require a pinMode + // call for the analog output pins. + pinMode(pin, OUTPUT); + if (val == 0) + { + digitalWrite(pin, LOW); + } + else if (val == 255) + { + digitalWrite(pin, HIGH); + } + else + { + switch(digitalPinToTimer(pin)) + { + // XXX fix needed for atmega8 + #if defined(TCCR0) && defined(COM00) && !defined(__AVR_ATmega8__) + case TIMER0A: + // connect pwm to pin on timer 0 + sbi(TCCR0, COM00); + OCR0 = val; // set pwm duty + break; + #endif + + #if defined(TCCR0A) && defined(COM0A1) + case TIMER0A: + // connect pwm to pin on timer 0, channel A + sbi(TCCR0A, COM0A1); + OCR0A = val; // set pwm duty + break; + #endif + + #if defined(TCCR0A) && defined(COM0B1) + case TIMER0B: + // connect pwm to pin on timer 0, channel B + sbi(TCCR0A, COM0B1); + OCR0B = val; // set pwm duty + break; + #endif + + #if defined(TCCR1A) && defined(COM1A1) + case TIMER1A: + // connect pwm to pin on timer 1, channel A + sbi(TCCR1A, COM1A1); + OCR1A = val; // set pwm duty + break; + #endif + + #if defined(TCCR1A) && defined(COM1B1) + case TIMER1B: + // connect pwm to pin on timer 1, channel B + sbi(TCCR1A, COM1B1); + OCR1B = val; // set pwm duty + break; + #endif + + #if defined(TCCR1A) && defined(COM1C1) + case TIMER1C: + // connect pwm to pin on timer 1, channel B + sbi(TCCR1A, COM1C1); + OCR1C = val; // set pwm duty + break; + #endif + + #if defined(TCCR2) && defined(COM21) + case TIMER2: + // connect pwm to pin on timer 2 + sbi(TCCR2, COM21); + OCR2 = val; // set pwm duty + break; + #endif + + #if defined(TCCR2A) && defined(COM2A1) + case TIMER2A: + // connect pwm to pin on timer 2, channel A + sbi(TCCR2A, COM2A1); + OCR2A = val; // set pwm duty + break; + #endif + + #if defined(TCCR2A) && defined(COM2B1) + case TIMER2B: + // connect pwm to pin on timer 2, channel B + sbi(TCCR2A, COM2B1); + OCR2B = val; // set pwm duty + break; + #endif + + #if defined(TCCR3A) && defined(COM3A1) + case TIMER3A: + // connect pwm to pin on timer 3, channel A + sbi(TCCR3A, COM3A1); + OCR3A = val; // set pwm duty + break; + #endif + + #if defined(TCCR3A) && defined(COM3B1) + case TIMER3B: + // connect pwm to pin on timer 3, channel B + sbi(TCCR3A, COM3B1); + OCR3B = val; // set pwm duty + break; + #endif + + #if defined(TCCR3A) && defined(COM3C1) + case TIMER3C: + // connect pwm to pin on timer 3, channel C + sbi(TCCR3A, COM3C1); + OCR3C = val; // set pwm duty + break; + #endif + + #if defined(TCCR4A) + case TIMER4A: + //connect pwm to pin on timer 4, channel A + sbi(TCCR4A, COM4A1); + #if defined(COM4A0) // only used on 32U4 + cbi(TCCR4A, COM4A0); + #endif + OCR4A = val; // set pwm duty + break; + #endif + + #if defined(TCCR4A) && defined(COM4B1) + case TIMER4B: + // connect pwm to pin on timer 4, channel B + sbi(TCCR4A, COM4B1); + OCR4B = val; // set pwm duty + break; + #endif + + #if defined(TCCR4A) && defined(COM4C1) + case TIMER4C: + // connect pwm to pin on timer 4, channel C + sbi(TCCR4A, COM4C1); + OCR4C = val; // set pwm duty + break; + #endif + + #if defined(TCCR4C) && defined(COM4D1) + case TIMER4D: + // connect pwm to pin on timer 4, channel D + sbi(TCCR4C, COM4D1); + #if defined(COM4D0) // only used on 32U4 + cbi(TCCR4C, COM4D0); + #endif + OCR4D = val; // set pwm duty + break; + #endif + + + #if defined(TCCR5A) && defined(COM5A1) + case TIMER5A: + // connect pwm to pin on timer 5, channel A + sbi(TCCR5A, COM5A1); + OCR5A = val; // set pwm duty + break; + #endif + + #if defined(TCCR5A) && defined(COM5B1) + case TIMER5B: + // connect pwm to pin on timer 5, channel B + sbi(TCCR5A, COM5B1); + OCR5B = val; // set pwm duty + break; + #endif + + #if defined(TCCR5A) && defined(COM5C1) + case TIMER5C: + // connect pwm to pin on timer 5, channel C + sbi(TCCR5A, COM5C1); + OCR5C = val; // set pwm duty + break; + #endif + + case NOT_ON_TIMER: + default: + if (val < 128) { + digitalWrite(pin, LOW); + } else { + digitalWrite(pin, HIGH); + } + } + } +} + diff --git a/external/arduino/avr/cores/arduino/wiring_digital.c b/external/arduino/avr/cores/arduino/wiring_digital.c new file mode 100644 index 000000000..27a62fc6c --- /dev/null +++ b/external/arduino/avr/cores/arduino/wiring_digital.c @@ -0,0 +1,179 @@ +/* + wiring_digital.c - digital input and output functions + Part of Arduino - http://www.arduino.cc/ + + Copyright (c) 2005-2006 David A. Mellis + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General + Public License along with this library; if not, write to the + Free Software Foundation, Inc., 59 Temple Place, Suite 330, + Boston, MA 02111-1307 USA + + Modified 28 September 2010 by Mark Sproul +*/ + +#define ARDUINO_MAIN +#include "wiring_private.h" +#include "pins_arduino.h" + +void pinMode(uint8_t pin, uint8_t mode) +{ + uint8_t bit = digitalPinToBitMask(pin); + uint8_t port = digitalPinToPort(pin); + volatile uint8_t *reg, *out; + + if (port == NOT_A_PIN) return; + + // JWS: can I let the optimizer do this? + reg = portModeRegister(port); + out = portOutputRegister(port); + + if (mode == INPUT) { + uint8_t oldSREG = SREG; + cli(); + *reg &= ~bit; + *out &= ~bit; + SREG = oldSREG; + } else if (mode == INPUT_PULLUP) { + uint8_t oldSREG = SREG; + cli(); + *reg &= ~bit; + *out |= bit; + SREG = oldSREG; + } else { + uint8_t oldSREG = SREG; + cli(); + *reg |= bit; + SREG = oldSREG; + } +} + +// Forcing this inline keeps the callers from having to push their own stuff +// on the stack. It is a good performance win and only takes 1 more byte per +// user than calling. (It will take more bytes on the 168.) +// +// But shouldn't this be moved into pinMode? Seems silly to check and do on +// each digitalread or write. +// +// Mark Sproul: +// - Removed inline. Save 170 bytes on atmega1280 +// - changed to a switch statment; added 32 bytes but much easier to read and maintain. +// - Added more #ifdefs, now compiles for atmega645 +// +//static inline void turnOffPWM(uint8_t timer) __attribute__ ((always_inline)); +//static inline void turnOffPWM(uint8_t timer) +static void turnOffPWM(uint8_t timer) +{ + switch (timer) + { + #if defined(TCCR1A) && defined(COM1A1) + case TIMER1A: cbi(TCCR1A, COM1A1); break; + #endif + #if defined(TCCR1A) && defined(COM1B1) + case TIMER1B: cbi(TCCR1A, COM1B1); break; + #endif + #if defined(TCCR1A) && defined(COM1C1) + case TIMER1C: cbi(TCCR1A, COM1C1); break; + #endif + + #if defined(TCCR2) && defined(COM21) + case TIMER2: cbi(TCCR2, COM21); break; + #endif + + #if defined(TCCR0A) && defined(COM0A1) + case TIMER0A: cbi(TCCR0A, COM0A1); break; + #endif + + #if defined(TCCR0A) && defined(COM0B1) + case TIMER0B: cbi(TCCR0A, COM0B1); break; + #endif + #if defined(TCCR2A) && defined(COM2A1) + case TIMER2A: cbi(TCCR2A, COM2A1); break; + #endif + #if defined(TCCR2A) && defined(COM2B1) + case TIMER2B: cbi(TCCR2A, COM2B1); break; + #endif + + #if defined(TCCR3A) && defined(COM3A1) + case TIMER3A: cbi(TCCR3A, COM3A1); break; + #endif + #if defined(TCCR3A) && defined(COM3B1) + case TIMER3B: cbi(TCCR3A, COM3B1); break; + #endif + #if defined(TCCR3A) && defined(COM3C1) + case TIMER3C: cbi(TCCR3A, COM3C1); break; + #endif + + #if defined(TCCR4A) && defined(COM4A1) + case TIMER4A: cbi(TCCR4A, COM4A1); break; + #endif + #if defined(TCCR4A) && defined(COM4B1) + case TIMER4B: cbi(TCCR4A, COM4B1); break; + #endif + #if defined(TCCR4A) && defined(COM4C1) + case TIMER4C: cbi(TCCR4A, COM4C1); break; + #endif + #if defined(TCCR4C) && defined(COM4D1) + case TIMER4D: cbi(TCCR4C, COM4D1); break; + #endif + + #if defined(TCCR5A) + case TIMER5A: cbi(TCCR5A, COM5A1); break; + case TIMER5B: cbi(TCCR5A, COM5B1); break; + case TIMER5C: cbi(TCCR5A, COM5C1); break; + #endif + } +} + +void digitalWrite(uint8_t pin, uint8_t val) +{ + uint8_t timer = digitalPinToTimer(pin); + uint8_t bit = digitalPinToBitMask(pin); + uint8_t port = digitalPinToPort(pin); + volatile uint8_t *out; + + if (port == NOT_A_PIN) return; + + // If the pin that support PWM output, we need to turn it off + // before doing a digital write. + if (timer != NOT_ON_TIMER) turnOffPWM(timer); + + out = portOutputRegister(port); + + uint8_t oldSREG = SREG; + cli(); + + if (val == LOW) { + *out &= ~bit; + } else { + *out |= bit; + } + + SREG = oldSREG; +} + +int digitalRead(uint8_t pin) +{ + uint8_t timer = digitalPinToTimer(pin); + uint8_t bit = digitalPinToBitMask(pin); + uint8_t port = digitalPinToPort(pin); + + if (port == NOT_A_PIN) return LOW; + + // If the pin that support PWM output, we need to turn it off + // before getting a digital reading. + if (timer != NOT_ON_TIMER) turnOffPWM(timer); + + if (*portInputRegister(port) & bit) return HIGH; + return LOW; +} diff --git a/external/arduino/avr/cores/arduino/wiring_private.h b/external/arduino/avr/cores/arduino/wiring_private.h new file mode 100644 index 000000000..a277b1484 --- /dev/null +++ b/external/arduino/avr/cores/arduino/wiring_private.h @@ -0,0 +1,72 @@ +/* + wiring_private.h - Internal header file. + Part of Arduino - http://www.arduino.cc/ + + Copyright (c) 2005-2006 David A. Mellis + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General + Public License along with this library; if not, write to the + Free Software Foundation, Inc., 59 Temple Place, Suite 330, + Boston, MA 02111-1307 USA +*/ + +#ifndef WiringPrivate_h +#define WiringPrivate_h + +#include +#include +#include +#include + +#include "Arduino.h" + +#ifdef __cplusplus +extern "C"{ +#endif + +#ifndef cbi +#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit)) +#endif +#ifndef sbi +#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit)) +#endif + +uint32_t countPulseASM(volatile uint8_t *port, uint8_t bit, uint8_t stateMask, unsigned long maxloops); + +#define EXTERNAL_INT_0 0 +#define EXTERNAL_INT_1 1 +#define EXTERNAL_INT_2 2 +#define EXTERNAL_INT_3 3 +#define EXTERNAL_INT_4 4 +#define EXTERNAL_INT_5 5 +#define EXTERNAL_INT_6 6 +#define EXTERNAL_INT_7 7 + +#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega128RFA1__) || defined(__AVR_ATmega256RFR2__) || \ + defined(__AVR_AT90USB82__) || defined(__AVR_AT90USB162__) || defined(__AVR_ATmega32U2__) || defined(__AVR_ATmega16U2__) || defined(__AVR_ATmega8U2__) +#define EXTERNAL_NUM_INTERRUPTS 8 +#elif defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__) || defined(__AVR_ATmega644__) || defined(__AVR_ATmega644A__) || defined(__AVR_ATmega644P__) || defined(__AVR_ATmega644PA__) +#define EXTERNAL_NUM_INTERRUPTS 3 +#elif defined(__AVR_ATmega32U4__) +#define EXTERNAL_NUM_INTERRUPTS 5 +#else +#define EXTERNAL_NUM_INTERRUPTS 2 +#endif + +typedef void (*voidFuncPtr)(void); + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif diff --git a/external/arduino/avr/cores/arduino/wiring_pulse.S b/external/arduino/avr/cores/arduino/wiring_pulse.S new file mode 100644 index 000000000..1dd22e625 --- /dev/null +++ b/external/arduino/avr/cores/arduino/wiring_pulse.S @@ -0,0 +1,178 @@ +/* + wiring_pulse.s - pulseInASM() function in different flavours + Part of Arduino - http://www.arduino.cc/ + + Copyright (c) 2014 Martino Facchin + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General + Public License along with this library; if not, write to the + Free Software Foundation, Inc., 59 Temple Place, Suite 330, + Boston, MA 02111-1307 USA +*/ + +/* + * The following routine was generated by avr-gcc 4.8.3 with the following parameters + * -gstabs -Wa,-ahlmsd=output.lst -dp -fverbose-asm -O2 + * on the original C function + * + * unsigned long pulseInSimpl(volatile uint8_t *port, uint8_t bit, uint8_t stateMask, unsigned long maxloops) + * { + * unsigned long width = 0; + * // wait for any previous pulse to end + * while ((*port & bit) == stateMask) + * if (--maxloops == 0) + * return 0; + * + * // wait for the pulse to start + * while ((*port & bit) != stateMask) + * if (--maxloops == 0) + * return 0; + * + * // wait for the pulse to stop + * while ((*port & bit) == stateMask) { + * if (++width == maxloops) + * return 0; + * } + * return width; + * } + * + * some compiler outputs were removed but the rest of the code is untouched + */ + +#include + +.section .text + +.global countPulseASM + +countPulseASM: + +.LM0: +.LFBB1: + push r12 ; ; 130 pushqi1/1 [length = 1] + push r13 ; ; 131 pushqi1/1 [length = 1] + push r14 ; ; 132 pushqi1/1 [length = 1] + push r15 ; ; 133 pushqi1/1 [length = 1] + push r16 ; ; 134 pushqi1/1 [length = 1] + push r17 ; ; 135 pushqi1/1 [length = 1] +/* prologue: function */ +/* frame size = 0 */ +/* stack size = 6 */ +.L__stack_usage = 6 + mov r30,r24 ; port, port ; 2 *movhi/1 [length = 2] + mov r31,r25 ; port, port +/* unsigned long width = 0; +*** // wait for any previous pulse to end +*** while ((*port & bit) == stateMask) +*/ +.LM1: + rjmp .L2 ; ; 181 jump [length = 1] +.L4: +/* if (--maxloops == 0) */ +.LM2: + subi r16,1 ; maxloops, ; 17 addsi3/2 [length = 4] + sbc r17, r1 ; maxloops + sbc r18, r1 ; maxloops + sbc r19, r1 ; maxloops + breq .L13 ; , ; 19 branch [length = 1] +.L2: +/* if (--maxloops == 0) */ +.LM3: + ld r25,Z ; D.1554, *port_7(D) ; 22 movqi_insn/4 [length = 1] + and r25,r22 ; D.1554, bit ; 24 andqi3/1 [length = 1] + cp r25,r20 ; D.1554, stateMask ; 25 *cmpqi/2 [length = 1] + breq .L4 ; , ; 26 branch [length = 1] + rjmp .L6 ; ; 184 jump [length = 1] +.L7: +/* return 0; +*** +*** // wait for the pulse to start +*** while ((*port & bit) != stateMask) +*** if (--maxloops == 0) +*/ +.LM4: + subi r16,1 ; maxloops, ; 31 addsi3/2 [length = 4] + sbc r17, r1 ; maxloops + sbc r18, r1 ; maxloops + sbc r19, r1 ; maxloops + breq .L13 ; , ; 33 branch [length = 1] +.L6: +/* if (--maxloops == 0) */ +.LM5: + ld r25,Z ; D.1554, *port_7(D) ; 41 movqi_insn/4 [length = 1] + and r25,r22 ; D.1554, bit ; 43 andqi3/1 [length = 1] + cpse r25,r20 ; D.1554, stateMask ; 44 enable_interrupt-3 [length = 1] + rjmp .L7 ; + mov r12, r1 ; width ; 7 *movsi/2 [length = 4] + mov r13, r1 ; width + mov r14, r1 ; width + mov r15, r1 ; width + rjmp .L9 ; ; 186 jump [length = 1] +.L10: +/* return 0; +*** +*** // wait for the pulse to stop +*** while ((*port & bit) == stateMask) { +*** if (++width == maxloops) +*/ +.LM6: + ldi r24,-1 ; , ; 50 addsi3/3 [length = 5] + sub r12,r24 ; width, + sbc r13,r24 ; width, + sbc r14,r24 ; width, + sbc r15,r24 ; width, + cp r16,r12 ; maxloops, width ; 51 *cmpsi/2 [length = 4] + cpc r17,r13 ; maxloops, width + cpc r18,r14 ; maxloops, width + cpc r19,r15 ; maxloops, width + breq .L13 ; , ; 52 branch [length = 1] +.L9: +/* if (++width == maxloops) */ +.LM7: + ld r24,Z ; D.1554, *port_7(D) ; 60 movqi_insn/4 [length = 1] + and r24,r22 ; D.1554, bit ; 62 andqi3/1 [length = 1] + cp r24,r20 ; D.1554, stateMask ; 63 *cmpqi/2 [length = 1] + breq .L10 ; , ; 64 branch [length = 1] +/* return 0; +*** } +*** return width; +*/ +.LM8: + mov r22,r12 ; D.1553, width ; 108 movqi_insn/1 [length = 1] + mov r23,r13 ; D.1553, width ; 109 movqi_insn/1 [length = 1] + mov r24,r14 ; D.1553, width ; 110 movqi_insn/1 [length = 1] + mov r25,r15 ; D.1553, width ; 111 movqi_insn/1 [length = 1] +/* epilogue start */ +.LM9: + pop r17 ; ; 171 popqi [length = 1] + pop r16 ; ; 172 popqi [length = 1] + pop r15 ; ; 173 popqi [length = 1] + pop r14 ; ; 174 popqi [length = 1] + pop r13 ; ; 175 popqi [length = 1] + pop r12 ; ; 176 popqi [length = 1] + ret ; 177 return_from_epilogue [length = 1] +.L13: +.LM10: + ldi r22,0 ; D.1553 ; 120 movqi_insn/1 [length = 1] + ldi r23,0 ; D.1553 ; 121 movqi_insn/1 [length = 1] + ldi r24,0 ; D.1553 ; 122 movqi_insn/1 [length = 1] + ldi r25,0 ; D.1553 ; 123 movqi_insn/1 [length = 1] +/* epilogue start */ +.LM11: + pop r17 ; ; 138 popqi [length = 1] + pop r16 ; ; 139 popqi [length = 1] + pop r15 ; ; 140 popqi [length = 1] + pop r14 ; ; 141 popqi [length = 1] + pop r13 ; ; 142 popqi [length = 1] + pop r12 ; ; 143 popqi [length = 1] + ret ; 144 return_from_epilogue [length = 1] diff --git a/external/arduino/avr/cores/arduino/wiring_pulse.c b/external/arduino/avr/cores/arduino/wiring_pulse.c new file mode 100644 index 000000000..d6e04347e --- /dev/null +++ b/external/arduino/avr/cores/arduino/wiring_pulse.c @@ -0,0 +1,93 @@ +/* + wiring_pulse.c - pulseIn() function + Part of Arduino - http://www.arduino.cc/ + + Copyright (c) 2005-2006 David A. Mellis + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General + Public License along with this library; if not, write to the + Free Software Foundation, Inc., 59 Temple Place, Suite 330, + Boston, MA 02111-1307 USA +*/ + +#include "wiring_private.h" +#include "pins_arduino.h" + +/* Measures the length (in microseconds) of a pulse on the pin; state is HIGH + * or LOW, the type of pulse to measure. Works on pulses from 2-3 microseconds + * to 3 minutes in length, but must be called at least a few dozen microseconds + * before the start of the pulse. + * + * This function performs better with short pulses in noInterrupt() context + */ +unsigned long pulseIn(uint8_t pin, uint8_t state, unsigned long timeout) +{ + // cache the port and bit of the pin in order to speed up the + // pulse width measuring loop and achieve finer resolution. calling + // digitalRead() instead yields much coarser resolution. + uint8_t bit = digitalPinToBitMask(pin); + uint8_t port = digitalPinToPort(pin); + uint8_t stateMask = (state ? bit : 0); + + // convert the timeout from microseconds to a number of times through + // the initial loop; it takes approximately 16 clock cycles per iteration + unsigned long maxloops = microsecondsToClockCycles(timeout)/16; + + unsigned long width = countPulseASM(portInputRegister(port), bit, stateMask, maxloops); + + // prevent clockCyclesToMicroseconds to return bogus values if countPulseASM timed out + if (width) + return clockCyclesToMicroseconds(width * 16 + 16); + else + return 0; +} + +/* Measures the length (in microseconds) of a pulse on the pin; state is HIGH + * or LOW, the type of pulse to measure. Works on pulses from 2-3 microseconds + * to 3 minutes in length, but must be called at least a few dozen microseconds + * before the start of the pulse. + * + * ATTENTION: + * this function relies on micros() so cannot be used in noInterrupt() context + */ +unsigned long pulseInLong(uint8_t pin, uint8_t state, unsigned long timeout) +{ + // cache the port and bit of the pin in order to speed up the + // pulse width measuring loop and achieve finer resolution. calling + // digitalRead() instead yields much coarser resolution. + uint8_t bit = digitalPinToBitMask(pin); + uint8_t port = digitalPinToPort(pin); + uint8_t stateMask = (state ? bit : 0); + + unsigned long startMicros = micros(); + + // wait for any previous pulse to end + while ((*portInputRegister(port) & bit) == stateMask) { + if (micros() - startMicros > timeout) + return 0; + } + + // wait for the pulse to start + while ((*portInputRegister(port) & bit) != stateMask) { + if (micros() - startMicros > timeout) + return 0; + } + + unsigned long start = micros(); + // wait for the pulse to stop + while ((*portInputRegister(port) & bit) == stateMask) { + if (micros() - startMicros > timeout) + return 0; + } + return micros() - start; +} diff --git a/external/arduino/avr/cores/arduino/wiring_shift.c b/external/arduino/avr/cores/arduino/wiring_shift.c new file mode 100644 index 000000000..a9b3be5fe --- /dev/null +++ b/external/arduino/avr/cores/arduino/wiring_shift.c @@ -0,0 +1,56 @@ +/* + wiring_shift.c - shiftOut() function + Part of Arduino - http://www.arduino.cc/ + + Copyright (c) 2005-2006 David A. Mellis + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General + Public License along with this library; if not, write to the + Free Software Foundation, Inc., 59 Temple Place, Suite 330, + Boston, MA 02111-1307 USA +*/ + +#include "wiring_private.h" + +uint8_t shiftIn(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder) { + uint8_t value = 0; + uint8_t i; + + for (i = 0; i < 8; ++i) { + digitalWrite(clockPin, HIGH); + if (bitOrder == LSBFIRST) + value |= digitalRead(dataPin) << i; + else + value |= digitalRead(dataPin) << (7 - i); + digitalWrite(clockPin, LOW); + } + return value; +} + +void shiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t val) +{ + uint8_t i; + + for (i = 0; i < 8; i++) { + if (bitOrder == LSBFIRST) { + digitalWrite(dataPin, val & 1); + val >>= 1; + } else { + digitalWrite(dataPin, (val & 128) != 0); + val <<= 1; + } + + digitalWrite(clockPin, HIGH); + digitalWrite(clockPin, LOW); + } +} diff --git a/external/arduino/avr/extras/pack.hourlybuild.bash b/external/arduino/avr/extras/pack.hourlybuild.bash new file mode 100644 index 000000000..b3a269f79 --- /dev/null +++ b/external/arduino/avr/extras/pack.hourlybuild.bash @@ -0,0 +1,51 @@ +#!/bin/bash -ex + +# pack.*.bash - Bash script to help packaging avr core releases. +# Copyright (c) 2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +BUILD_NUMBER=$1 +CURR_TIME=`date "+%Y-%m-%d %H:%M"` +CURR_TIME_SED=`date "+%Y\\-%m\\-%d %H:%M"` +VERSION=9.9.9-Hourly + +PWD=`pwd` +FOLDERNAME=`basename $PWD` +THIS_SCRIPT_NAME=`basename $0` +FILENAME=package_avr-hourly-b${BUILD_NUMBER}.tar.bz2 + +rm -f $FILENAME + +# Change name in platform.txt +sed -i "s/name=.*/name=SAMD Hourly Build ${BUILD_NUMBER} (${CURR_TIME})/" platform.txt + +cd .. +tar --transform "s|$FOLDERNAME|avr-hourly_b${BUILD_NUMBER}|g" --exclude=extras/** --exclude=.git* --exclude=.idea -cjf $FILENAME $FOLDERNAME +cd - + +mv ../$FILENAME . + +CHKSUM=`sha256sum $FILENAME | awk '{ print $1 }'` +SIZE=`wc -c $FILENAME | awk '{ print $1 }'` + +cat extras/package_index.json.Hourly.template | +sed "s/%%BUILD_NUMBER%%/${BUILD_NUMBER}/" | +sed "s/%%CURR_TIME%%/${CURR_TIME_SED}/" | +sed "s/%%VERSION%%/${VERSION}/" | +sed "s/%%FILENAME%%/${FILENAME}/" | +sed "s/%%CHECKSUM%%/${CHKSUM}/" | +sed "s/%%SIZE%%/${SIZE}/" > package_avr-hourly-build_index.json + diff --git a/external/arduino/avr/extras/pack.pullrequest.bash b/external/arduino/avr/extras/pack.pullrequest.bash new file mode 100644 index 000000000..64f5b955d --- /dev/null +++ b/external/arduino/avr/extras/pack.pullrequest.bash @@ -0,0 +1,50 @@ +#!/bin/bash -ex + +# pack.*.bash - Bash script to help packaging avr core releases. +# Copyright (c) 2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +PR_NUMBER=$1 +BUILD_NUMBER=$2 +VERSION=`grep version= platform.txt | sed 's/version=//g'` + +PWD=`pwd` +FOLDERNAME=`basename $PWD` +THIS_SCRIPT_NAME=`basename $0` +FILENAME=package_avr-b${BUILD_NUMBER}.tar.bz2 + +rm -f $FILENAME + +# Change name in platform.txt +sed -i "s/name=.*/name=SAMD Pull request #${PR_NUMBER} (Build ${BUILD_NUMBER})/" platform.txt + +cd .. +tar --transform "s|$FOLDERNAME|avr-PR${PR_NUMBER}_b${BUILD_NUMBER}|g" --exclude=extras/** --exclude=.git* --exclude=.idea -cjf $FILENAME $FOLDERNAME +cd - + +mv ../$FILENAME . + +CHKSUM=`sha256sum $FILENAME | awk '{ print $1 }'` +SIZE=`wc -c $FILENAME | awk '{ print $1 }'` + +cat extras/package_index.json.PR.template | +sed s/%%PR_NUMBER%%/${PR_NUMBER}/ | +sed s/%%BUILD_NUMBER%%/${BUILD_NUMBER}/ | +sed s/%%VERSION%%/${VERSION}-build-${BUILD_NUMBER}/ | +sed s/%%FILENAME%%/${FILENAME}/ | +sed s/%%CHECKSUM%%/${CHKSUM}/ | +sed s/%%SIZE%%/${SIZE}/ > package_avr-b${BUILD_NUMBER}_index.json + diff --git a/external/arduino/avr/extras/pack.release.bash b/external/arduino/avr/extras/pack.release.bash new file mode 100644 index 000000000..a2999d505 --- /dev/null +++ b/external/arduino/avr/extras/pack.release.bash @@ -0,0 +1,33 @@ +#!/bin/bash -ex + +# pack.*.bash - Bash script to help packaging avr core releases. +# Copyright (c) 2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +VERSION=`grep version= platform.txt | sed 's/version=//g'` + +PWD=`pwd` +FOLDERNAME=`basename $PWD` +THIS_SCRIPT_NAME=`basename $0` + +rm -f avr-$VERSION.tar.bz2 + +cd .. +tar --transform "s|$FOLDERNAME|$FOLDERNAME-$VERSION|g" --exclude=extras/** --exclude=.git* --exclude=.idea -cjf avr-$VERSION.tar.bz2 $FOLDERNAME +cd - + +mv ../avr-$VERSION.tar.bz2 . + diff --git a/external/arduino/avr/extras/package_index.json.Hourly.template b/external/arduino/avr/extras/package_index.json.Hourly.template new file mode 100644 index 000000000..85c3665b2 --- /dev/null +++ b/external/arduino/avr/extras/package_index.json.Hourly.template @@ -0,0 +1,72 @@ +{ + "packages": [ + { + "name": "arduino-beta", + "maintainer": "Arduino Betatesting", + "websiteURL": "http://www.arduino.cc/", + "email": "packages@arduino.cc", + "help": { + "online": "http://www.arduino.cc/en/Reference/HomePage" + }, + "platforms": [ + { + "name": "Arduino AVR core - Hourly build", + "architecture": "avr", + "version": "%%VERSION%%", + "category": "Arduino", + "url": "http://downloads.arduino.cc/Hourly/avr/%%FILENAME%%", + "archiveFileName": "%%FILENAME%%", + "checksum": "SHA-256:%%CHECKSUM%%", + "size": "%%SIZE%%", + "boards": [ + {"name": "Arduino Yún"}, + {"name": "Arduino Uno"}, + {"name": "Arduino Uno WiFi"}, + {"name": "Arduino Diecimila"}, + {"name": "Arduino Nano"}, + {"name": "Arduino Mega"}, + {"name": "Arduino MegaADK"}, + {"name": "Arduino Leonardo"}, + {"name": "Arduino Leonardo Ethernet"}, + {"name": "Arduino Micro"}, + {"name": "Arduino Esplora"}, + {"name": "Arduino Mini"}, + {"name": "Arduino Ethernet"}, + {"name": "Arduino Fio"}, + {"name": "Arduino BT"}, + {"name": "Arduino LilyPadUSB"}, + {"name": "Arduino Lilypad"}, + {"name": "Arduino Pro"}, + {"name": "Arduino ATMegaNG"}, + {"name": "Arduino Robot Control"}, + {"name": "Arduino Robot Motor"}, + {"name": "Arduino Gemma"}, + {"name": "Adafruit Circuit Playground"}, + {"name": "Arduino Yún Mini"}, + {"name": "Arduino Industrial 101"}, + {"name": "Linino One"} + ], + "toolsDependencies": [ + { + "packager": "arduino", + "name": "avr-gcc", + "version": "4.9.2-atmel3.5.4-arduino2" + }, + { + "packager": "arduino", + "name": "avrdude", + "version": "6.3.0-arduino9" + }, + { + "packager": "arduino", + "name": "arduinoOTA", + "version": "1.1.1" + } + ] + } + ], + "tools": [ + ] + } + ] +} diff --git a/external/arduino/avr/extras/package_index.json.PR.template b/external/arduino/avr/extras/package_index.json.PR.template new file mode 100644 index 000000000..f1d21f319 --- /dev/null +++ b/external/arduino/avr/extras/package_index.json.PR.template @@ -0,0 +1,72 @@ +{ + "packages": [ + { + "name": "arduino-beta", + "maintainer": "Arduino Betatesting", + "websiteURL": "http://www.arduino.cc/", + "email": "packages@arduino.cc", + "help": { + "online": "http://www.arduino.cc/en/Reference/HomePage" + }, + "platforms": [ + { + "name": "Arduino AVR core - Pull request #%%PR_NUMBER%% (build %%BUILD_NUMBER%%)", + "architecture": "avr", + "version": "%%VERSION%%", + "category": "Arduino", + "url": "http://downloads.arduino.cc/PR/a/%%FILENAME%%", + "archiveFileName": "%%FILENAME%%", + "checksum": "SHA-256:%%CHECKSUM%%", + "size": "%%SIZE%%", + "boards": [ + {"name": "Arduino Yún"}, + {"name": "Arduino Uno"}, + {"name": "Arduino Uno WiFi"}, + {"name": "Arduino Diecimila"}, + {"name": "Arduino Nano"}, + {"name": "Arduino Mega"}, + {"name": "Arduino MegaADK"}, + {"name": "Arduino Leonardo"}, + {"name": "Arduino Leonardo Ethernet"}, + {"name": "Arduino Micro"}, + {"name": "Arduino Esplora"}, + {"name": "Arduino Mini"}, + {"name": "Arduino Ethernet"}, + {"name": "Arduino Fio"}, + {"name": "Arduino BT"}, + {"name": "Arduino LilyPadUSB"}, + {"name": "Arduino Lilypad"}, + {"name": "Arduino Pro"}, + {"name": "Arduino ATMegaNG"}, + {"name": "Arduino Robot Control"}, + {"name": "Arduino Robot Motor"}, + {"name": "Arduino Gemma"}, + {"name": "Adafruit Circuit Playground"}, + {"name": "Arduino Yún Mini"}, + {"name": "Arduino Industrial 101"}, + {"name": "Linino One"} + ], + "toolsDependencies": [ + { + "packager": "arduino", + "name": "avr-gcc", + "version": "4.9.2-atmel3.5.4-arduino2" + }, + { + "packager": "arduino", + "name": "avrdude", + "version": "6.3.0-arduino9" + }, + { + "packager": "arduino", + "name": "arduinoOTA", + "version": "1.1.1" + } + ] + } + ], + "tools": [ + ] + } + ] +} diff --git a/external/arduino/avr/firmwares/arduinoISP/readme.txt b/external/arduino/avr/firmwares/arduinoISP/readme.txt new file mode 100644 index 000000000..a150f9622 --- /dev/null +++ b/external/arduino/avr/firmwares/arduinoISP/readme.txt @@ -0,0 +1,5 @@ + +You can download the ArduinoISP firmware source files from: + +https://github.com/arduino/ArduinoISP + diff --git a/external/arduino/avr/firmwares/atmegaxxu2/Arduino-COMBINED-dfu-usbserial-atmega16u2-Mega2560-Rev3.hex b/external/arduino/avr/firmwares/atmegaxxu2/Arduino-COMBINED-dfu-usbserial-atmega16u2-Mega2560-Rev3.hex new file mode 100644 index 000000000..61c5321fc --- /dev/null +++ b/external/arduino/avr/firmwares/atmegaxxu2/Arduino-COMBINED-dfu-usbserial-atmega16u2-Mega2560-Rev3.hex @@ -0,0 +1,467 @@ +:1000000090C00000A9C00000A7C00000A5C000006B +:10001000A3C00000A1C000009FC000009DC0000060 +:100020009BC0000099C0000097C0000048C40000B9 +:100030000CC4000091C000008FC000008DC0000003 +:100040008BC0000089C0000087C0000085C0000090 +:1000500083C0000081C000007FC0000002C100001A +:100060007BC0000079C0000077C0000075C00000B0 +:1000700073C0000071C000006FC000006DC00000C0 +:100080006BC0000069C0000067C0000065C00000D0 +:1000900063C0000061C000001201100102000008EE +:1000A0004123420001000102DC0109023E0002017D +:1000B00000C0320904000001020201000524000111 +:1000C0001004240206052406000107058203080027 +:1000D000FF09040100020A000000070504024000B5 +:1000E00001070583024000010403090432034100B3 +:1000F00072006400750069006E006F002000280027 +:100100007700770077002E006100720064007500B0 +:1001100069006E006F002E0063006300290000007C +:10012000000011241FBECFEFD2E0DEBFCDBF11E033 +:10013000A0E0B1E0ECEAFFE002C005900D92A6312C +:10014000B107D9F712E0A6E1B1E001C01D92AF32CC +:10015000B107E1F7F1D028C753CF9C01DC01AE57BE +:10016000BF4FED91FC91119741911196FC93EE9345 +:1001700080589F4FE817F90711F42D933C939FB7D0 +:10018000F894F901EC57FF4F8081815080839FBF25 +:10019000842F0895DF92EF92FF920F931F93FC013B +:1001A0008489813019F0823021F405C040E3D42ED7 +:1001B00004C0DD2402C030E2D32E8389823011F4E2 +:1001C00088E0D82A8589873031F0883031F0863050 +:1001D00031F482E003C084E001C086E0D82A1092A6 +:1001E000C9001092C8001092CA00E784F088018903 +:1001F000128980E0E81681EEF80680E0080780E0CA +:10020000180719F420E130E00FC0C801B701969536 +:1002100087957795679560587B47814E9F4FA801DA +:100220009701A0D6215030403093CD002093CC00D0 +:10023000D092CA0080E0E81681EEF80680E0080758 +:1002400080E0180711F082E001C080E08093C800D0 +:1002500088E98093C9001F910F91FF90EF90DF9084 +:1002600008951F920F920FB60F9211242F938F9320 +:100270009F93EF93FF939091CE008EB38430F1F46F +:10028000E0919901F0919A019083E0919901F091A8 +:100290009A01CF01019690939A018093990189590F +:1002A000914021F489E191E0928381839FB7F89492 +:1002B00080919D018F5F80939D019FBFFF91EF9182 +:1002C0009F918F912F910F900FBE0F901F901895B7 +:1002D000FC01858580FF02C05F9808955F9A0895AC +:1002E00080E091E0D5C580E091E088C584B7877F44 +:1002F00084BF28E10FB6F89420936000109260004C +:100300000FBE87E690E09093CD008093CC0086E00E +:100310008093CA001092C8002093C900539A5A9A39 +:100320008AB180638AB98BB180638BB983D284E050 +:1003300085BD5F9A579A08950F931F93CF93DF93CC +:10034000D5DF2FB7F8948EE991E090931F02809348 +:100350001E0290932102809320022FBF2FB7F894A2 +:1003600089E191E090939A018093990190939C0187 +:1003700080939B012FBF7894CEE9D1E003E08FB743 +:10038000F894909122028FBF903809F180E091E0BB +:10039000ABD497FD1CC0E0911E02F0911F02808338 +:1003A000E0911E02F0911F02CF01019690931F026F +:1003B00080931E028E51924011F4D283C1839FB765 +:1003C000F894809122028F5F809322029FBF8FB7A3 +:1003D000F89410919D018FBFA89902C0113678F151 +:1003E000A89A80919D01882361F05D980093160181 +:1003F00008C089E191E0B1DE682F80E091E0DAD4B5 +:1004000011501123B1F780911601882351F080918A +:10041000160181508093160180911601882309F4FA +:100420005D9A80911701882351F0809117018150C6 +:100430008093170180911701882309F45C9A8FB784 +:10044000F894909122028FBF992369F08EE991E090 +:1004500084DE982F8091C80085FFFCCF9093CE005A +:100460005C980093170180E091E095D42AD487CF5F +:10047000DA01923049F0933061F09130F9F4E8E913 +:10048000F0E022E130E01EC0EAEAF0E02EE330E0E6 +:1004900019C0813049F0813018F0823079F408C0F9 +:1004A000E8EEF0E0849107C0ECEEF0E0849103C048 +:1004B000E0E2F1E08491282F30E004C0E0E0F0E0D9 +:1004C00020E030E0ED93FC93C901089528E030E08E +:1004D00040E003C04F5F220F331F28173907D0F3C6 +:1004E000842F8295807F08958093E9008091EB00AE +:1004F00081608093EB001092ED006093EC004093DC +:10050000ED008091EE00881F8827881F08951092C3 +:10051000F40090E09093E9001092F0001092E8004F +:100520001092ED008091EB008E7F8093EB009F5F37 +:10053000953081F708958091270288238CF403C0B9 +:100540008EB38823B1F08091E80082FFF9CF8091CB +:10055000E8008B778093E80008958EB3882349F0F4 +:100560008091E80080FFF9CF8091E8008E7780933A +:10057000E800089594E68091EC0080FF05C080912A +:10058000E80080FF05C023C08091E80082FD1FC005 +:100590008EB3882311F482E008958EB3853011F470 +:1005A00083E008958091EB0085FF02C081E008950B +:1005B0008091E10082FFDFCF8091E1008B7F80930B +:1005C000E100992311F484E008959150D4CF80E0A4 +:1005D00008959C0140912D0250912E024617570715 +:1005E00018F4F90120E038C06115710511F0AB0174 +:1005F000F8CF8091E8008E778093E80040E050E0EB +:10060000F0CF8091E80083FF02C081E008958091DF +:10061000E80082FD2DC08EB3882381F18EB3853032 +:1006200079F18091E80080FF17C09091F20006C038 +:1006300081918093F100415050409F5F41155105D9 +:1006400011F09830A8F320E0983009F421E080916F +:10065000E8008E778093E8004115510591F622233A +:1006600081F606C08EB3882349F08EB3853041F001 +:100670008091E80082FFF6CF80E0089582E008953F +:1006800083E008959C0140912D0250912E0246175F +:10069000570710F490E03BC06115710511F0AB01F4 +:1006A000F9CF8091E8008E778093E80040E050E039 +:1006B000F1CF8091E80083FF02C081E0089580912E +:1006C000E80082FD30C08EB3882399F18EB3853067 +:1006D00091F18091E80080FF1AC08091F20009C07A +:1006E000F9012F5F3F4FE491E093F10041505040FA +:1006F0008F5F4115510511F0883090F390E08830FC +:1007000009F491E08091E8008E778093E80041152C +:10071000510579F6992369F606C08EB3882349F00E +:100720008EB3853041F08091E80082FFF6CF80E003 +:10073000089582E0089583E008959C016115710594 +:1007400029F48091E8008B778093E800F90120C0BC +:100750008091E80083FF02C081E008958EB3882372 +:1007600039F18EB3853031F18091E80082FFF0CF0E +:1007700006C08091F10081936150704021F080911A +:10078000F2008823B1F78091E8008B778093E8002E +:1007900061157105E9F606C08EB3882349F08EB362 +:1007A000853041F08091E80080FFF6CF80E0089529 +:1007B00082E0089583E0089542D044D01EBA10929A +:1007C0002502109224021092230284E089BD89B58B +:1007D000826089BD09B400FEFDCF8091D800982FBA +:1007E0009F779093D80080688093D80080916300B1 +:1007F0008E7F809363008091D8008F7D8093D80096 +:100800008091E0008E7F8093E0008091E1008E7FF8 +:100810008093E1008091E20081608093E20080910A +:10082000E100877F8093E1008091E20088608093FF +:10083000E2000895C1DF81E08093260208951092BE +:10084000E20008951092E10008951F920F920FB6F2 +:100850000F9211241F932F933F934F935F936F93A6 +:100860007F938F939F93AF93BF93EF93FF93E9EEA3 +:10087000F0E0108117701082E0EFF0E08081877F58 +:1008800080837894C3D0F894A9EEB0E01C92E0EF96 +:10089000F0E08081886080831C93FF91EF91BF918D +:1008A000AF919F918F917F916F915F914F913F9108 +:1008B0002F911F910F900FBE0F901F9018951F92B0 +:1008C0000F920FB60F9211242F933F934F935F9384 +:1008D0006F937F938F939F93AF93BF93EF93FF9308 +:1008E0008091E10080FF1BC08091E20080FF17C073 +:1008F0008091E1008E7F8093E1008091E2008E7F05 +:100900008093E2008091E20080618093E200809118 +:10091000D80080628093D80019BC1EBAD1D18091D2 +:10092000E10084FF29C08091E20084FF25C084E0BB +:1009300089BD89B5826089BD09B400FEFDCF809173 +:10094000D8008F7D8093D8008091E1008F7E8093C6 +:10095000E1008091E2008F7E8093E2008091E200CE +:1009600081608093E20080912502882311F481E068 +:1009700001C084E08EBBA4D18091E10083FF27C039 +:100980008091E20083FF23C08091E100877F809304 +:10099000E10082E08EBB109225028091E1008E7F03 +:1009A0008093E1008091E2008E7F8093E20080914D +:1009B000E20080618093E200AADD80E060E042E036 +:1009C00093DD8091F00088608093F00079D1809170 +:1009D000E10082FF0AC08091E20082FF06C08091A0 +:1009E000E1008B7F8093E1006BD1FF91EF91BF918C +:1009F000AF919F918F917F916F915F914F913F91B7 +:100A00002F910F900FBE0F901F9018951F93DF939B +:100A1000CF93CDB7DEB7AC970FB6F894DEBF0FBE5D +:100A2000CDBFE7E2F2E08091F100819322E0EF3266 +:100A3000F207C9F78091270230912802353009F476 +:100A400087C0363040F43130C9F1313070F0333086 +:100A500009F01DC133C0383009F4EFC0393009F452 +:100A6000FEC0363009F013C192C0803821F08238C0 +:100A700009F00DC108C090912302809124028823BF +:100A800099F0926011C080912B0287708093E900E9 +:100A90008091EB0090E025E0969587952A95E1F707 +:100AA000982F91701092E9008091E800877F8093E1 +:100AB000E8009093F1001092F100CAC0882319F069 +:100AC000823009F0E4C090E08F719070009721F0BF +:100AD000029709F0DDC00CC080912902813009F035 +:100AE000D7C010922402333069F5809324022AC0C3 +:100AF00080912902882331F520912B02277009F477 +:100B0000C7C02093E9008091EB0080FFC1C0333063 +:100B100021F48091EB00806213C08091EB00806132 +:100B20008093EB0081E090E002C0880F991F2A9526 +:100B3000E2F78093EA001092EA008091EB0088606F +:100B40008093EB001092E9008091E800877F83C0DA +:100B5000882309F09CC0109129028091E800877FCA +:100B60008093E800E8DC04C08EB3882309F490C0C9 +:100B70008091E80080FFF8CF812F8F7711F492E009 +:100B800001C093E09EBB80688093E30081C08058E1 +:100B9000823008F07CC08091290290912A0223E0E3 +:100BA0008C3D920799F55FB7F894DE0115964EE0FB +:100BB00020E030E061E2E42FF0E0609357008491A0 +:100BC00020FF03C082958F704F5F982F9F70892FF1 +:100BD000805D8A3308F0895F8C9311961C9211977F +:100BE0002F5F3F4F12962431310529F75FBF8AE20C +:100BF0008B8383E08C838091E800877F8093E8007B +:100C0000CE0103966AE270E0E4DC11C060912B0231 +:100C1000AE014F5F5F4F2CDCBC010097C9F18091A2 +:100C2000E800877F8093E80089819A812BDD80919D +:100C3000E8008B778093E8002BC0803841F58091E5 +:100C4000E800877F8093E800809125028093F1007F +:100C50008091E8008E778093E8006DDC19C08823CE +:100C6000B1F490912902923098F48091E800877F46 +:100C70008093E800909325025EDC80912502882312 +:100C800011F483E001C084E08EBB2DDB01C028DBC2 +:100C90008091E80083FF0AC08091EB00806280931E +:100CA000EB008091E800877F8093E800AC960FB658 +:100CB000F894DEBF0FBECDBFCF91DF911F91089595 +:100CC00008951F938EB3882361F01091E90010926C +:100CD000E9008091E80083FF01C098DE177010934F +:100CE000E9001F9108950895FC018EB3843021F529 +:100CF00087859089A189B2890097A105B105E1F0A6 +:100D000085818093E9008091E80082FF15C0809181 +:100D1000F200882319F42FEF3FEF04C08091F10017 +:100D2000282F30E08091F200882341F48091E80080 +:100D30008B778093E80002C02FEF3FEFC901089541 +:100D4000FC018EB3843011F587859089A189B28921 +:100D50000097A105B105D1F081818093E9008091D0 +:100D6000F2008823A9F09091E8008091E8008E7746 +:100D70008093E80095FD0CC0FDDB982F882349F493 +:100D80008091E8008E778093E80003C092E001C074 +:100D900090E0892F0895FC018EB3843051F487854B +:100DA0009089A189B2890097A105B10511F0CF0101 +:100DB000C7CF08951F93FC01162F8EB38430D9F44A +:100DC00087859089A189B2890097A105B10599F01D +:100DD00081818093E9008091E80085FD08C08091C1 +:100DE000E8008E778093E800C5DB882329F4109310 +:100DF000F10080E001C082E01F9108950F931F93DE +:100E0000CF93DF93EC010D96FC0189E0DF011D9289 +:100E10008A95E9F72A813B8109818C81882311F425 +:100E200010E001C014E0C90151DB182B1260802FC3 +:100E300061E8412F59DB882329F12E813F810D8103 +:100E40008885882311F410E001C014E0C9013EDB5D +:100E5000182B1260802F60E8412F46DB882391F029 +:100E60002A853B8509858C85882311F410E001C013 +:100E700014E0C9012BDB182B1260802F61EC412F8D +:100E800033DB01C080E0DF91CF911F910F91089576 +:100E9000CF93DF93EC018091E80083FF60C08881ED +:100EA00090E020912B0230912C022817390709F08D +:100EB00056C080912802813261F0823220F4803263 +:100EC00009F04DC019C0823269F1833209F047C080 +:100ED00038C080912702813A09F041C08091E80032 +:100EE000877F8093E800CE010F9667E070E071DBAA +:100EF0008091E8008B7713C080912702813279F5C9 +:100F00008091E800877F8093E800CE010F9667E02C +:100F100070E013DCCE013ED98091E8008E7780939B +:100F2000E8001DC0809127028132C9F48091E80059 +:100F3000877F8093E800809129028D87CE01C8D9F0 +:100F40000DC080912702813251F48091E800877FA3 +:100F50008093E800CE0160912902C5DEECDADF91D2 +:100F6000CF910895A1E21A2EAA1BBB1BFD010DC053 +:100F7000AA1FBB1FEE1FFF1FA217B307E407F50749 +:100F800020F0A21BB30BE40BF50B661F771F881F25 +:100F9000991F1A9469F760957095809590959B01BB +:0C0FA000AC01BD01CF010895F894FFCF13 +:100FAC0000034000000440000002080000000000A4 +:060FBC000000000000002F +:103000004BC0000064C0000062C0000060C000004F +:103010005EC000005CC000005AC0000058C0000044 +:1030200056C0000054C0000052C00000EEC40000B2 +:103030004EC000004CC000004AC0000048C0000064 +:1030400046C0000044C0000042C0000040C0000074 +:103050003EC000003CC000003AC0000038C0000084 +:1030600036C0000034C0000032C0000030C0000094 +:103070002EC000002CC000002AC0000028C00000A4 +:1030800026C0000024C0000022C0000020C00000B4 +:103090001EC000001CC0000011241FBECFEFD2E0F4 +:1030A000DEBFCDBF11E0A0E0B1E0EAEFFCE302C07B +:1030B00005900D92AA33B107D9F711E0AAE3B1E068 +:1030C00001C01D92AB35B107E1F772D314C698CF9A +:1030D000982F15C08091F200882371F48091E80048 +:1030E0008B7F8093E80003C08EB3882351F08091DA +:1030F000E80082FFF9CF02C08091F100915099233E +:1031000049F7089520914A01309149018091480181 +:103110009091470180933F0190934001C9018093B2 +:103120004101909342010895DF93CF9300D000D0E6 +:1031300000D0CDB7DEB780914501843009F45AC084 +:10314000853030F4813059F0833009F0D7C01FC08A +:10315000853009F4A0C0863009F0D0C0C3C080918A +:103160004601823008F0CAC0CDDF80914601882335 +:1031700061F480913F019091400123E0FC01209394 +:103180005700E89507B600FCFDCF85E008C08091A8 +:103190004601882311F0823029F4B4DF89E080935E +:1031A0000101ACC0813009F0A9C020E030E040E06E +:1031B00050E0F90184918F3F81F0CA01AA27BB2713 +:1031C00080933E013093400120933F018AE0809339 +:1031D000010185E080933B0191C02F5F3F4F4F4F2E +:1031E0005F4F2030F0E33F07F0E04F07F0E05F076C +:1031F00001F784C080914601833051F581E08093CE +:103200003A0180914B0190914C01892B71F0809192 +:103210004701813009F072C080914A0190914901C3 +:1032200090933D0180933C0169C0809147018823C0 +:1032300061F42CE088E190E00FB6F894A8958093B3 +:1032400060000FBE2093600059C01092000156C06C +:10325000882309F053C0809147018F3F09F04EC089 +:10326000E0E0F0E093E085E090935700E89507B642 +:1032700000FCFDCF80935700E89507B600FCFDCF1A +:10328000E058FF4F20E3E030F20771F781E18093CF +:103290005700E89533C0DE011196E5E0F1E083E0E8 +:1032A00001900D928150E1F7DE011496E2E0F1E029 +:1032B00083E001900D928150E1F790914701809158 +:1032C0004601882329F4FE01E90FF11D818107C021 +:1032D0008130A1F4FE01BC97E90FF11D808180933C +:1032E00050010CC080914601833041F48091470128 +:1032F000882321F48091480180933E0126960FB6E1 +:10330000F894DEBF0FBECDBFCF91DF9108952F920D +:103310003F924F925F926F927F929F92AF92BF9235 +:10332000CF92DF92EF92FF920F931F93CF93DF9391 +:103330008091590190915A0190934C0180934B01D7 +:1033400080914D01882351F080914D0181508093EF +:103350004D0180914D01882309F45D9A80914E01C1 +:10336000882351F080914E01815080934E018091CD +:103370004E01882309F45C9A80915401833009F44A +:10338000B2C1843030F4813071F0823009F0E3C191 +:1033900011C1853009F4C5C1853008F4BAC1863041 +:1033A00009F0D9C1CDC15C9883E080934E01809132 +:1033B000E800877F8093E80080913A01882329F014 +:1033C000B3DE5D9A5C9A10923A0120914B013091E4 +:1033D0004C012115310529F42AC08EB3882309F444 +:1033E000BAC18091E80082FFF8CF8091F10080930C +:1033F00045012150304030934C0120934B01E6E4CD +:10340000F1E00CC08091F10081932150304081E0C7 +:10341000EB34F80719F43183208308C08091F2005F +:10342000882381F730934C0120934B017DDE8091FE +:103430000101853009F0BAC080914B0190914C0197 +:10344000892B21F482E080930101B0C08AE140DE43 +:1034500080913F018F713CDEC0914101D0914201CA +:1034600020913F013091400121968E01021B130BE8 +:10347000219780914601882309F093C01801369462 +:103480002794C901A0913E01B0E09C01AD0162E02A +:10349000E62EF12C012D112DE20EF31E041F151F37 +:1034A00059016A0190E099249394B5E0A3E048C0E3 +:1034B0008091F200882371F48091E8008B7F8093E3 +:1034C000E80004C08EB3882309F445C18091E80068 +:1034D00082FFF8CF0894210831088091F100682F0D +:1034E0008091F100782FF5010B0190925700E8953B +:1034F00011249F5F903419F021143104A1F4F901D3 +:10350000B0935700E89507B600FCFDCF21143104B5 +:1035100051F0F701A0935700E89507B600FCFDCFE6 +:10352000A801970190E042E0442E512C612C712CAF +:10353000E40CF51C061D171DA40CB51CC61CD71CDD +:103540002114310409F0B4CFD0934001C0933F015E +:1035500081E180935700E89527C08091F20088238D +:1035600071F48091E8008B7F8093E80004C08EB3F3 +:10357000882309F4F0C08091E80082FFF8CF6091C1 +:10358000F10080913F0190914001A7D380913F01CC +:103590009091400101969093400180933F0101502A +:1035A000104001151105C9F680E192DD8091E80017 +:1035B0008B7FC3C08091E800877F8093E8005D988F +:1035C00083E080934D0104C08EB3882309F4C3C007 +:1035D0008091E80080FFF8CF80910101893091F05F +:1035E0008A3069F480914601813049F480913F012D +:1035F000909140018093F1009093F1009BC08091E5 +:10360000500196C0609141017091420120913F01AB +:10361000309140016F5F7F4F7B01E21AF30A6150E6 +:10362000704080914601882389F58701169507959A +:10363000C901A0913E01B0E09C01AD011FC0809185 +:10364000F200803271F48091E8008E7F8093E80070 +:1036500004C08EB3882309F47EC08091E80080FF07 +:10366000F8CFF901859194918093F1009093F10046 +:10367000015010402E5F3F4F4F4F5F4F0115110516 +:10368000F1F67093400160933F0129C0823039F513 +:1036900023C08091F200803271F48091E8008E7F27 +:1036A0008093E80004C08EB3882309F454C080914D +:1036B000E80080FFF8CF00913F0110914001C80160 +:1036C00004D38093F1000F5F1F4F109340010093CC +:1036D0003F010894E108F108E114F104D1F682E019 +:1036E0008093010127C08091E800877F8093E800E4 +:1036F00080913B018093F1001092F1001092F10053 +:103700001092F100809101018093F1001092F1007C +:1037100011C08091E800877F8093E80010923B0100 +:1037200019C08091E800877F8093E80080910101B3 +:103730008093F1008091E8008E7F8093E8000AC0BA +:103740008091E800877F8093E8005D9A5C9A82E030 +:103750008093010187D0DF91CF911F910F91FF904E +:10376000EF90DF90CF90BF90AF909F907F906F9041 +:103770005F904F903F902F9008952BD181E085BFAF +:1037800015BE089584B7877F84BF88E10FB6F8948B +:1037900080936000109260000FBE81E085BF82E0E0 +:1037A00085BF8AB180638AB98BB180638BB90CC144 +:1037B000E9DF789401C080D2809100018823D9F795 +:1037C00080913A018823B9F7D8DFE0913C01F0916C +:1037D0003D010995FA01923071F0933089F09130F2 +:1037E00029F488E091E022E130E019C080E090E027 +:1037F00020E030E014C08AE191E02BE130E00FC01E +:10380000882339F480913501282F30E085E391E059 +:1038100006C080914301282F30E083E491E091833A +:103820008083C90108958091EB0081608093EB0053 +:103830001092ED006093EC004093ED008091EE005B +:10384000881F8827881F08951092F4001092F000B6 +:103850001092E8001092ED00EBEEF0E080818E7F98 +:10386000808308958091530188238CF403C08EB324 +:103870008823B1F08091E80082FFF9CF8091E800C1 +:103880008B7F8093E80008958EB3882349F0809160 +:10389000E80080FFF9CF8091E8008E7F8093E800F8 +:1038A00008959C014091590150915A0146175707BC +:1038B00018F4F90120E038C06115710511F0AB0171 +:1038C000F8CF8091E8008E7F8093E80040E050E0E0 +:1038D000F0CF8091E80083FF02C081E008958091DD +:1038E000E80082FD2DC08EB3882381F18EB3853030 +:1038F00079F18091E80080FF17C09091F20006C036 +:1039000081918093F100415050409F5F41155105D6 +:1039100011F09032A8F320E0903209F421E0809178 +:10392000E8008E7F8093E8004115510591F622232F +:1039300081F606C08EB3882349F08EB3853041F0FE +:103940008091E80082FFF6CF80E0089582E008953C +:1039500083E0089554D056D01EBA1092510184E0ED +:1039600089BD89B5826089BD09B400FEFDCF809113 +:10397000D800982F9F779093D80080688093D800C4 +:10398000809163008E7F809363008091D8008F7D4B +:103990008093D8008091E0008E7F8093E00080913A +:1039A000E1008E7F8093E1008091E200816080934E +:1039B000E2008091E100877F8093E1008091E20046 +:1039C00088608093E2000895C5DF81E08093520112 +:1039D0000895C0DFE0EEF0E0808181608083E8ED53 +:1039E000F0E080818F7780830AD00CD019BCE3E6A9 +:1039F000F0E08081816080831092520108951092DE +:103A0000E20008951092E10008951F920F920FB600 +:103A10000F9211242F933F934F935F936F937F9354 +:103A20008F939F93AF93BF93EF93FF938091E100A8 +:103A300080FF1BC08091E20080FF17C08091E100F1 +:103A40008E7F8093E1008091E2008E7F8093E20080 +:103A50008091E20080618093E2008091D8008062D2 +:103A60008093D80019BC1EBA26D18091E10084FF52 +:103A700029C08091E20084FF25C084E089BD89B51A +:103A8000826089BD09B400FEFDCF8091D8008F7D92 +:103A90008093D8008091E1008F7E8093E100809137 +:103AA000E2008F7E8093E2008091E200816080934B +:103AB000E20080915101882311F481E001C084E08B +:103AC0008EBBF9D08091E10083FF22C08091E2009B +:103AD00083FF1EC08091E100877F8093E10082E038 +:103AE0008EBB109251018091E1008E7F8093E100A6 +:103AF0008091E2008E7F8093E2008091E2008061FD +:103B00008093E200A1DE80E060E042E28CDED3D070 +:103B10008091E10082FF0AC08091E20082FF06C02E +:103B20008091E1008B7F8093E100C5D0FF91EF9100 +:103B3000BF91AF919F918F917F916F915F914F91C5 +:103B40003F912F910F900FBE0F901F9018951F93CC +:103B5000DF93CF9300D0CDB7DEB7E3E5F1E08091FE +:103B6000F100819381E0EB35F807C9F7909153019B +:103B700080915401853011F1863040F48130B9F0E4 +:103B8000813070F0833009F081C011C0883009F4B1 +:103B900053C0893009F462C0863009F077C02DC067 +:103BA000903809F474C0923809F070C070C099233D +:103BB00009F46DC0923009F069C069C0992309F019 +:103BC00065C0109155018091E800877F8093E800DF +:103BD00049DE04C08EB3882309F459C08091E800FF +:103BE00080FFF8CF812F8F7711F492E001C093E02E +:103BF0009EBB80688093E3004AC09058923008F0E2 +:103C000045C0809155019091560160915701AE01D8 +:103C10004F5F5F4FDFDDBC010097C9F18091E80085 +:103C2000877F8093E80089819A813BDE8091E8005C +:103C30008B7F8093E8002BC0903841F58091E8009D +:103C4000877F8093E800809151018093F1008091FB +:103C5000E8008E7F8093E80005DE19C09923B1F457 +:103C600090915501923098F48091E800877F80937D +:103C7000E80090935101F6DD80915101882311F401 +:103C800083E001C084E08EBB16D001C040DB809190 +:103C9000E80083FF0AC08091EB0080628093EB0014 +:103CA0008091E800877F8093E8000F900F90CF917C +:103CB000DF911F91089508958EB3882329F0809194 +:103CC000E80083FF01C043CF0895F999FECF92BD6C +:103CD00081BDF89A992780B50895262FF999FECFCE +:103CE0001FBA92BD81BD20BD0FB6F894FA9AF99A19 +:0A3CF0000FBE01960895F894FFCF6F +:103CFA0001021E948920DCFB120110010000002041 +:103D0A00EB03EF2F00000001000109021B00010173 +:103D1A000080320904000000FE01020009210300AC +:0A3D2A0000000C000104030904006E +:0400000300003000C9 +:00000001FF diff --git a/external/arduino/avr/firmwares/atmegaxxu2/Arduino-COMBINED-dfu-usbserial-atmega16u2-MegaADK-Rev3.hex b/external/arduino/avr/firmwares/atmegaxxu2/Arduino-COMBINED-dfu-usbserial-atmega16u2-MegaADK-Rev3.hex new file mode 100644 index 000000000..8b087b984 --- /dev/null +++ b/external/arduino/avr/firmwares/atmegaxxu2/Arduino-COMBINED-dfu-usbserial-atmega16u2-MegaADK-Rev3.hex @@ -0,0 +1,467 @@ +:1000000090C00000A9C00000A7C00000A5C000006B +:10001000A3C00000A1C000009FC000009DC0000060 +:100020009BC0000099C0000097C0000048C40000B9 +:100030000CC4000091C000008FC000008DC0000003 +:100040008BC0000089C0000087C0000085C0000090 +:1000500083C0000081C000007FC0000002C100001A +:100060007BC0000079C0000077C0000075C00000B0 +:1000700073C0000071C000006FC000006DC00000C0 +:100080006BC0000069C0000067C0000065C00000D0 +:1000900063C0000061C000001201100102000008EE +:1000A0004123440001000102DC0109023E0002017B +:1000B00000C0320904000001020201000524000111 +:1000C0001004240206052406000107058203080027 +:1000D000FF09040100020A000000070504024000B5 +:1000E00001070583024000010403090432034100B3 +:1000F00072006400750069006E006F002000280027 +:100100007700770077002E006100720064007500B0 +:1001100069006E006F002E0063006300290000007C +:10012000000011241FBECFEFD2E0DEBFCDBF11E033 +:10013000A0E0B1E0ECEAFFE002C005900D92A6312C +:10014000B107D9F712E0A6E1B1E001C01D92AF32CC +:10015000B107E1F7F1D028C753CF9C01DC01AE57BE +:10016000BF4FED91FC91119741911196FC93EE9345 +:1001700080589F4FE817F90711F42D933C939FB7D0 +:10018000F894F901EC57FF4F8081815080839FBF25 +:10019000842F0895DF92EF92FF920F931F93FC013B +:1001A0008489813019F0823021F405C040E3D42ED7 +:1001B00004C0DD2402C030E2D32E8389823011F4E2 +:1001C00088E0D82A8589873031F0883031F0863050 +:1001D00031F482E003C084E001C086E0D82A1092A6 +:1001E000C9001092C8001092CA00E784F088018903 +:1001F000128980E0E81681EEF80680E0080780E0CA +:10020000180719F420E130E00FC0C801B701969536 +:1002100087957795679560587B47814E9F4FA801DA +:100220009701A0D6215030403093CD002093CC00D0 +:10023000D092CA0080E0E81681EEF80680E0080758 +:1002400080E0180711F082E001C080E08093C800D0 +:1002500088E98093C9001F910F91FF90EF90DF9084 +:1002600008951F920F920FB60F9211242F938F9320 +:100270009F93EF93FF939091CE008EB38430F1F46F +:10028000E0919901F0919A019083E0919901F091A8 +:100290009A01CF01019690939A018093990189590F +:1002A000914021F489E191E0928381839FB7F89492 +:1002B00080919D018F5F80939D019FBFFF91EF9182 +:1002C0009F918F912F910F900FBE0F901F901895B7 +:1002D000FC01858580FF02C05F9808955F9A0895AC +:1002E00080E091E0D5C580E091E088C584B7877F44 +:1002F00084BF28E10FB6F89420936000109260004C +:100300000FBE87E690E09093CD008093CC0086E00E +:100310008093CA001092C8002093C900539A5A9A39 +:100320008AB180638AB98BB180638BB983D284E050 +:1003300085BD5F9A579A08950F931F93CF93DF93CC +:10034000D5DF2FB7F8948EE991E090931F02809348 +:100350001E0290932102809320022FBF2FB7F894A2 +:1003600089E191E090939A018093990190939C0187 +:1003700080939B012FBF7894CEE9D1E003E08FB743 +:10038000F894909122028FBF903809F180E091E0BB +:10039000ABD497FD1CC0E0911E02F0911F02808338 +:1003A000E0911E02F0911F02CF01019690931F026F +:1003B00080931E028E51924011F4D283C1839FB765 +:1003C000F894809122028F5F809322029FBF8FB7A3 +:1003D000F89410919D018FBFA89902C0113678F151 +:1003E000A89A80919D01882361F05D980093160181 +:1003F00008C089E191E0B1DE682F80E091E0DAD4B5 +:1004000011501123B1F780911601882351F080918A +:10041000160181508093160180911601882309F4FA +:100420005D9A80911701882351F0809117018150C6 +:100430008093170180911701882309F45C9A8FB784 +:10044000F894909122028FBF992369F08EE991E090 +:1004500084DE982F8091C80085FFFCCF9093CE005A +:100460005C980093170180E091E095D42AD487CF5F +:10047000DA01923049F0933061F09130F9F4E8E913 +:10048000F0E022E130E01EC0EAEAF0E02EE330E0E6 +:1004900019C0813049F0813018F0823079F408C0F9 +:1004A000E8EEF0E0849107C0ECEEF0E0849103C048 +:1004B000E0E2F1E08491282F30E004C0E0E0F0E0D9 +:1004C00020E030E0ED93FC93C901089528E030E08E +:1004D00040E003C04F5F220F331F28173907D0F3C6 +:1004E000842F8295807F08958093E9008091EB00AE +:1004F00081608093EB001092ED006093EC004093DC +:10050000ED008091EE00881F8827881F08951092C3 +:10051000F40090E09093E9001092F0001092E8004F +:100520001092ED008091EB008E7F8093EB009F5F37 +:10053000953081F708958091270288238CF403C0B9 +:100540008EB38823B1F08091E80082FFF9CF8091CB +:10055000E8008B778093E80008958EB3882349F0F4 +:100560008091E80080FFF9CF8091E8008E7780933A +:10057000E800089594E68091EC0080FF05C080912A +:10058000E80080FF05C023C08091E80082FD1FC005 +:100590008EB3882311F482E008958EB3853011F470 +:1005A00083E008958091EB0085FF02C081E008950B +:1005B0008091E10082FFDFCF8091E1008B7F80930B +:1005C000E100992311F484E008959150D4CF80E0A4 +:1005D00008959C0140912D0250912E024617570715 +:1005E00018F4F90120E038C06115710511F0AB0174 +:1005F000F8CF8091E8008E778093E80040E050E0EB +:10060000F0CF8091E80083FF02C081E008958091DF +:10061000E80082FD2DC08EB3882381F18EB3853032 +:1006200079F18091E80080FF17C09091F20006C038 +:1006300081918093F100415050409F5F41155105D9 +:1006400011F09830A8F320E0983009F421E080916F +:10065000E8008E778093E8004115510591F622233A +:1006600081F606C08EB3882349F08EB3853041F001 +:100670008091E80082FFF6CF80E0089582E008953F +:1006800083E008959C0140912D0250912E0246175F +:10069000570710F490E03BC06115710511F0AB01F4 +:1006A000F9CF8091E8008E778093E80040E050E039 +:1006B000F1CF8091E80083FF02C081E0089580912E +:1006C000E80082FD30C08EB3882399F18EB3853067 +:1006D00091F18091E80080FF1AC08091F20009C07A +:1006E000F9012F5F3F4FE491E093F10041505040FA +:1006F0008F5F4115510511F0883090F390E08830FC +:1007000009F491E08091E8008E778093E80041152C +:10071000510579F6992369F606C08EB3882349F00E +:100720008EB3853041F08091E80082FFF6CF80E003 +:10073000089582E0089583E008959C016115710594 +:1007400029F48091E8008B778093E800F90120C0BC +:100750008091E80083FF02C081E008958EB3882372 +:1007600039F18EB3853031F18091E80082FFF0CF0E +:1007700006C08091F10081936150704021F080911A +:10078000F2008823B1F78091E8008B778093E8002E +:1007900061157105E9F606C08EB3882349F08EB362 +:1007A000853041F08091E80080FFF6CF80E0089529 +:1007B00082E0089583E0089542D044D01EBA10929A +:1007C0002502109224021092230284E089BD89B58B +:1007D000826089BD09B400FEFDCF8091D800982FBA +:1007E0009F779093D80080688093D80080916300B1 +:1007F0008E7F809363008091D8008F7D8093D80096 +:100800008091E0008E7F8093E0008091E1008E7FF8 +:100810008093E1008091E20081608093E20080910A +:10082000E100877F8093E1008091E20088608093FF +:10083000E2000895C1DF81E08093260208951092BE +:10084000E20008951092E10008951F920F920FB6F2 +:100850000F9211241F932F933F934F935F936F93A6 +:100860007F938F939F93AF93BF93EF93FF93E9EEA3 +:10087000F0E0108117701082E0EFF0E08081877F58 +:1008800080837894C3D0F894A9EEB0E01C92E0EF96 +:10089000F0E08081886080831C93FF91EF91BF918D +:1008A000AF919F918F917F916F915F914F913F9108 +:1008B0002F911F910F900FBE0F901F9018951F92B0 +:1008C0000F920FB60F9211242F933F934F935F9384 +:1008D0006F937F938F939F93AF93BF93EF93FF9308 +:1008E0008091E10080FF1BC08091E20080FF17C073 +:1008F0008091E1008E7F8093E1008091E2008E7F05 +:100900008093E2008091E20080618093E200809118 +:10091000D80080628093D80019BC1EBAD1D18091D2 +:10092000E10084FF29C08091E20084FF25C084E0BB +:1009300089BD89B5826089BD09B400FEFDCF809173 +:10094000D8008F7D8093D8008091E1008F7E8093C6 +:10095000E1008091E2008F7E8093E2008091E200CE +:1009600081608093E20080912502882311F481E068 +:1009700001C084E08EBBA4D18091E10083FF27C039 +:100980008091E20083FF23C08091E100877F809304 +:10099000E10082E08EBB109225028091E1008E7F03 +:1009A0008093E1008091E2008E7F8093E20080914D +:1009B000E20080618093E200AADD80E060E042E036 +:1009C00093DD8091F00088608093F00079D1809170 +:1009D000E10082FF0AC08091E20082FF06C08091A0 +:1009E000E1008B7F8093E1006BD1FF91EF91BF918C +:1009F000AF919F918F917F916F915F914F913F91B7 +:100A00002F910F900FBE0F901F9018951F93DF939B +:100A1000CF93CDB7DEB7AC970FB6F894DEBF0FBE5D +:100A2000CDBFE7E2F2E08091F100819322E0EF3266 +:100A3000F207C9F78091270230912802353009F476 +:100A400087C0363040F43130C9F1313070F0333086 +:100A500009F01DC133C0383009F4EFC0393009F452 +:100A6000FEC0363009F013C192C0803821F08238C0 +:100A700009F00DC108C090912302809124028823BF +:100A800099F0926011C080912B0287708093E900E9 +:100A90008091EB0090E025E0969587952A95E1F707 +:100AA000982F91701092E9008091E800877F8093E1 +:100AB000E8009093F1001092F100CAC0882319F069 +:100AC000823009F0E4C090E08F719070009721F0BF +:100AD000029709F0DDC00CC080912902813009F035 +:100AE000D7C010922402333069F5809324022AC0C3 +:100AF00080912902882331F520912B02277009F477 +:100B0000C7C02093E9008091EB0080FFC1C0333063 +:100B100021F48091EB00806213C08091EB00806132 +:100B20008093EB0081E090E002C0880F991F2A9526 +:100B3000E2F78093EA001092EA008091EB0088606F +:100B40008093EB001092E9008091E800877F83C0DA +:100B5000882309F09CC0109129028091E800877FCA +:100B60008093E800E8DC04C08EB3882309F490C0C9 +:100B70008091E80080FFF8CF812F8F7711F492E009 +:100B800001C093E09EBB80688093E30081C08058E1 +:100B9000823008F07CC08091290290912A0223E0E3 +:100BA0008C3D920799F55FB7F894DE0115964EE0FB +:100BB00020E030E061E2E42FF0E0609357008491A0 +:100BC00020FF03C082958F704F5F982F9F70892FF1 +:100BD000805D8A3308F0895F8C9311961C9211977F +:100BE0002F5F3F4F12962431310529F75FBF8AE20C +:100BF0008B8383E08C838091E800877F8093E8007B +:100C0000CE0103966AE270E0E4DC11C060912B0231 +:100C1000AE014F5F5F4F2CDCBC010097C9F18091A2 +:100C2000E800877F8093E80089819A812BDD80919D +:100C3000E8008B778093E8002BC0803841F58091E5 +:100C4000E800877F8093E800809125028093F1007F +:100C50008091E8008E778093E8006DDC19C08823CE +:100C6000B1F490912902923098F48091E800877F46 +:100C70008093E800909325025EDC80912502882312 +:100C800011F483E001C084E08EBB2DDB01C028DBC2 +:100C90008091E80083FF0AC08091EB00806280931E +:100CA000EB008091E800877F8093E800AC960FB658 +:100CB000F894DEBF0FBECDBFCF91DF911F91089595 +:100CC00008951F938EB3882361F01091E90010926C +:100CD000E9008091E80083FF01C098DE177010934F +:100CE000E9001F9108950895FC018EB3843021F529 +:100CF00087859089A189B2890097A105B105E1F0A6 +:100D000085818093E9008091E80082FF15C0809181 +:100D1000F200882319F42FEF3FEF04C08091F10017 +:100D2000282F30E08091F200882341F48091E80080 +:100D30008B778093E80002C02FEF3FEFC901089541 +:100D4000FC018EB3843011F587859089A189B28921 +:100D50000097A105B105D1F081818093E9008091D0 +:100D6000F2008823A9F09091E8008091E8008E7746 +:100D70008093E80095FD0CC0FDDB982F882349F493 +:100D80008091E8008E778093E80003C092E001C074 +:100D900090E0892F0895FC018EB3843051F487854B +:100DA0009089A189B2890097A105B10511F0CF0101 +:100DB000C7CF08951F93FC01162F8EB38430D9F44A +:100DC00087859089A189B2890097A105B10599F01D +:100DD00081818093E9008091E80085FD08C08091C1 +:100DE000E8008E778093E800C5DB882329F4109310 +:100DF000F10080E001C082E01F9108950F931F93DE +:100E0000CF93DF93EC010D96FC0189E0DF011D9289 +:100E10008A95E9F72A813B8109818C81882311F425 +:100E200010E001C014E0C90151DB182B1260802FC3 +:100E300061E8412F59DB882329F12E813F810D8103 +:100E40008885882311F410E001C014E0C9013EDB5D +:100E5000182B1260802F60E8412F46DB882391F029 +:100E60002A853B8509858C85882311F410E001C013 +:100E700014E0C9012BDB182B1260802F61EC412F8D +:100E800033DB01C080E0DF91CF911F910F91089576 +:100E9000CF93DF93EC018091E80083FF60C08881ED +:100EA00090E020912B0230912C022817390709F08D +:100EB00056C080912802813261F0823220F4803263 +:100EC00009F04DC019C0823269F1833209F047C080 +:100ED00038C080912702813A09F041C08091E80032 +:100EE000877F8093E800CE010F9667E070E071DBAA +:100EF0008091E8008B7713C080912702813279F5C9 +:100F00008091E800877F8093E800CE010F9667E02C +:100F100070E013DCCE013ED98091E8008E7780939B +:100F2000E8001DC0809127028132C9F48091E80059 +:100F3000877F8093E800809129028D87CE01C8D9F0 +:100F40000DC080912702813251F48091E800877FA3 +:100F50008093E800CE0160912902C5DEECDADF91D2 +:100F6000CF910895A1E21A2EAA1BBB1BFD010DC053 +:100F7000AA1FBB1FEE1FFF1FA217B307E407F50749 +:100F800020F0A21BB30BE40BF50B661F771F881F25 +:100F9000991F1A9469F760957095809590959B01BB +:0C0FA000AC01BD01CF010895F894FFCF13 +:100FAC0000034000000440000002080000000000A4 +:060FBC000000000000002F +:103000004BC0000064C0000062C0000060C000004F +:103010005EC000005CC000005AC0000058C0000044 +:1030200056C0000054C0000052C00000EEC40000B2 +:103030004EC000004CC000004AC0000048C0000064 +:1030400046C0000044C0000042C0000040C0000074 +:103050003EC000003CC000003AC0000038C0000084 +:1030600036C0000034C0000032C0000030C0000094 +:103070002EC000002CC000002AC0000028C00000A4 +:1030800026C0000024C0000022C0000020C00000B4 +:103090001EC000001CC0000011241FBECFEFD2E0F4 +:1030A000DEBFCDBF11E0A0E0B1E0EAEFFCE302C07B +:1030B00005900D92AA33B107D9F711E0AAE3B1E068 +:1030C00001C01D92AB35B107E1F772D314C698CF9A +:1030D000982F15C08091F200882371F48091E80048 +:1030E0008B7F8093E80003C08EB3882351F08091DA +:1030F000E80082FFF9CF02C08091F100915099233E +:1031000049F7089520914A01309149018091480181 +:103110009091470180933F0190934001C9018093B2 +:103120004101909342010895DF93CF9300D000D0E6 +:1031300000D0CDB7DEB780914501843009F45AC084 +:10314000853030F4813059F0833009F0D7C01FC08A +:10315000853009F4A0C0863009F0D0C0C3C080918A +:103160004601823008F0CAC0CDDF80914601882335 +:1031700061F480913F019091400123E0FC01209394 +:103180005700E89507B600FCFDCF85E008C08091A8 +:103190004601882311F0823029F4B4DF89E080935E +:1031A0000101ACC0813009F0A9C020E030E040E06E +:1031B00050E0F90184918F3F81F0CA01AA27BB2713 +:1031C00080933E013093400120933F018AE0809339 +:1031D000010185E080933B0191C02F5F3F4F4F4F2E +:1031E0005F4F2030F0E33F07F0E04F07F0E05F076C +:1031F00001F784C080914601833051F581E08093CE +:103200003A0180914B0190914C01892B71F0809192 +:103210004701813009F072C080914A0190914901C3 +:1032200090933D0180933C0169C0809147018823C0 +:1032300061F42CE088E190E00FB6F894A8958093B3 +:1032400060000FBE2093600059C01092000156C06C +:10325000882309F053C0809147018F3F09F04EC089 +:10326000E0E0F0E093E085E090935700E89507B642 +:1032700000FCFDCF80935700E89507B600FCFDCF1A +:10328000E058FF4F20E3E030F20771F781E18093CF +:103290005700E89533C0DE011196E5E0F1E083E0E8 +:1032A00001900D928150E1F7DE011496E2E0F1E029 +:1032B00083E001900D928150E1F790914701809158 +:1032C0004601882329F4FE01E90FF11D818107C021 +:1032D0008130A1F4FE01BC97E90FF11D808180933C +:1032E00050010CC080914601833041F48091470128 +:1032F000882321F48091480180933E0126960FB6E1 +:10330000F894DEBF0FBECDBFCF91DF9108952F920D +:103310003F924F925F926F927F929F92AF92BF9235 +:10332000CF92DF92EF92FF920F931F93CF93DF9391 +:103330008091590190915A0190934C0180934B01D7 +:1033400080914D01882351F080914D0181508093EF +:103350004D0180914D01882309F45D9A80914E01C1 +:10336000882351F080914E01815080934E018091CD +:103370004E01882309F45C9A80915401833009F44A +:10338000B2C1843030F4813071F0823009F0E3C191 +:1033900011C1853009F4C5C1853008F4BAC1863041 +:1033A00009F0D9C1CDC15C9883E080934E01809132 +:1033B000E800877F8093E80080913A01882329F014 +:1033C000B3DE5D9A5C9A10923A0120914B013091E4 +:1033D0004C012115310529F42AC08EB3882309F444 +:1033E000BAC18091E80082FFF8CF8091F10080930C +:1033F00045012150304030934C0120934B01E6E4CD +:10340000F1E00CC08091F10081932150304081E0C7 +:10341000EB34F80719F43183208308C08091F2005F +:10342000882381F730934C0120934B017DDE8091FE +:103430000101853009F0BAC080914B0190914C0197 +:10344000892B21F482E080930101B0C08AE140DE43 +:1034500080913F018F713CDEC0914101D0914201CA +:1034600020913F013091400121968E01021B130BE8 +:10347000219780914601882309F093C01801369462 +:103480002794C901A0913E01B0E09C01AD0162E02A +:10349000E62EF12C012D112DE20EF31E041F151F37 +:1034A00059016A0190E099249394B5E0A3E048C0E3 +:1034B0008091F200882371F48091E8008B7F8093E3 +:1034C000E80004C08EB3882309F445C18091E80068 +:1034D00082FFF8CF0894210831088091F100682F0D +:1034E0008091F100782FF5010B0190925700E8953B +:1034F00011249F5F903419F021143104A1F4F901D3 +:10350000B0935700E89507B600FCFDCF21143104B5 +:1035100051F0F701A0935700E89507B600FCFDCFE6 +:10352000A801970190E042E0442E512C612C712CAF +:10353000E40CF51C061D171DA40CB51CC61CD71CDD +:103540002114310409F0B4CFD0934001C0933F015E +:1035500081E180935700E89527C08091F20088238D +:1035600071F48091E8008B7F8093E80004C08EB3F3 +:10357000882309F4F0C08091E80082FFF8CF6091C1 +:10358000F10080913F0190914001A7D380913F01CC +:103590009091400101969093400180933F0101502A +:1035A000104001151105C9F680E192DD8091E80017 +:1035B0008B7FC3C08091E800877F8093E8005D988F +:1035C00083E080934D0104C08EB3882309F4C3C007 +:1035D0008091E80080FFF8CF80910101893091F05F +:1035E0008A3069F480914601813049F480913F012D +:1035F000909140018093F1009093F1009BC08091E5 +:10360000500196C0609141017091420120913F01AB +:10361000309140016F5F7F4F7B01E21AF30A6150E6 +:10362000704080914601882389F58701169507959A +:10363000C901A0913E01B0E09C01AD011FC0809185 +:10364000F200803271F48091E8008E7F8093E80070 +:1036500004C08EB3882309F47EC08091E80080FF07 +:10366000F8CFF901859194918093F1009093F10046 +:10367000015010402E5F3F4F4F4F5F4F0115110516 +:10368000F1F67093400160933F0129C0823039F513 +:1036900023C08091F200803271F48091E8008E7F27 +:1036A0008093E80004C08EB3882309F454C080914D +:1036B000E80080FFF8CF00913F0110914001C80160 +:1036C00004D38093F1000F5F1F4F109340010093CC +:1036D0003F010894E108F108E114F104D1F682E019 +:1036E0008093010127C08091E800877F8093E800E4 +:1036F00080913B018093F1001092F1001092F10053 +:103700001092F100809101018093F1001092F1007C +:1037100011C08091E800877F8093E80010923B0100 +:1037200019C08091E800877F8093E80080910101B3 +:103730008093F1008091E8008E7F8093E8000AC0BA +:103740008091E800877F8093E8005D9A5C9A82E030 +:103750008093010187D0DF91CF911F910F91FF904E +:10376000EF90DF90CF90BF90AF909F907F906F9041 +:103770005F904F903F902F9008952BD181E085BFAF +:1037800015BE089584B7877F84BF88E10FB6F8948B +:1037900080936000109260000FBE81E085BF82E0E0 +:1037A00085BF8AB180638AB98BB180638BB90CC144 +:1037B000E9DF789401C080D2809100018823D9F795 +:1037C00080913A018823B9F7D8DFE0913C01F0916C +:1037D0003D010995FA01923071F0933089F09130F2 +:1037E00029F488E091E022E130E019C080E090E027 +:1037F00020E030E014C08AE191E02BE130E00FC01E +:10380000882339F480913501282F30E085E391E059 +:1038100006C080914301282F30E083E491E091833A +:103820008083C90108958091EB0081608093EB0053 +:103830001092ED006093EC004093ED008091EE005B +:10384000881F8827881F08951092F4001092F000B6 +:103850001092E8001092ED00EBEEF0E080818E7F98 +:10386000808308958091530188238CF403C08EB324 +:103870008823B1F08091E80082FFF9CF8091E800C1 +:103880008B7F8093E80008958EB3882349F0809160 +:10389000E80080FFF9CF8091E8008E7F8093E800F8 +:1038A00008959C014091590150915A0146175707BC +:1038B00018F4F90120E038C06115710511F0AB0171 +:1038C000F8CF8091E8008E7F8093E80040E050E0E0 +:1038D000F0CF8091E80083FF02C081E008958091DD +:1038E000E80082FD2DC08EB3882381F18EB3853030 +:1038F00079F18091E80080FF17C09091F20006C036 +:1039000081918093F100415050409F5F41155105D6 +:1039100011F09032A8F320E0903209F421E0809178 +:10392000E8008E7F8093E8004115510591F622232F +:1039300081F606C08EB3882349F08EB3853041F0FE +:103940008091E80082FFF6CF80E0089582E008953C +:1039500083E0089554D056D01EBA1092510184E0ED +:1039600089BD89B5826089BD09B400FEFDCF809113 +:10397000D800982F9F779093D80080688093D800C4 +:10398000809163008E7F809363008091D8008F7D4B +:103990008093D8008091E0008E7F8093E00080913A +:1039A000E1008E7F8093E1008091E200816080934E +:1039B000E2008091E100877F8093E1008091E20046 +:1039C00088608093E2000895C5DF81E08093520112 +:1039D0000895C0DFE0EEF0E0808181608083E8ED53 +:1039E000F0E080818F7780830AD00CD019BCE3E6A9 +:1039F000F0E08081816080831092520108951092DE +:103A0000E20008951092E10008951F920F920FB600 +:103A10000F9211242F933F934F935F936F937F9354 +:103A20008F939F93AF93BF93EF93FF938091E100A8 +:103A300080FF1BC08091E20080FF17C08091E100F1 +:103A40008E7F8093E1008091E2008E7F8093E20080 +:103A50008091E20080618093E2008091D8008062D2 +:103A60008093D80019BC1EBA26D18091E10084FF52 +:103A700029C08091E20084FF25C084E089BD89B51A +:103A8000826089BD09B400FEFDCF8091D8008F7D92 +:103A90008093D8008091E1008F7E8093E100809137 +:103AA000E2008F7E8093E2008091E200816080934B +:103AB000E20080915101882311F481E001C084E08B +:103AC0008EBBF9D08091E10083FF22C08091E2009B +:103AD00083FF1EC08091E100877F8093E10082E038 +:103AE0008EBB109251018091E1008E7F8093E100A6 +:103AF0008091E2008E7F8093E2008091E2008061FD +:103B00008093E200A1DE80E060E042E28CDED3D070 +:103B10008091E10082FF0AC08091E20082FF06C02E +:103B20008091E1008B7F8093E100C5D0FF91EF9100 +:103B3000BF91AF919F918F917F916F915F914F91C5 +:103B40003F912F910F900FBE0F901F9018951F93CC +:103B5000DF93CF9300D0CDB7DEB7E3E5F1E08091FE +:103B6000F100819381E0EB35F807C9F7909153019B +:103B700080915401853011F1863040F48130B9F0E4 +:103B8000813070F0833009F081C011C0883009F4B1 +:103B900053C0893009F462C0863009F077C02DC067 +:103BA000903809F474C0923809F070C070C099233D +:103BB00009F46DC0923009F069C069C0992309F019 +:103BC00065C0109155018091E800877F8093E800DF +:103BD00049DE04C08EB3882309F459C08091E800FF +:103BE00080FFF8CF812F8F7711F492E001C093E02E +:103BF0009EBB80688093E3004AC09058923008F0E2 +:103C000045C0809155019091560160915701AE01D8 +:103C10004F5F5F4FDFDDBC010097C9F18091E80085 +:103C2000877F8093E80089819A813BDE8091E8005C +:103C30008B7F8093E8002BC0903841F58091E8009D +:103C4000877F8093E800809151018093F1008091FB +:103C5000E8008E7F8093E80005DE19C09923B1F457 +:103C600090915501923098F48091E800877F80937D +:103C7000E80090935101F6DD80915101882311F401 +:103C800083E001C084E08EBB16D001C040DB809190 +:103C9000E80083FF0AC08091EB0080628093EB0014 +:103CA0008091E800877F8093E8000F900F90CF917C +:103CB000DF911F91089508958EB3882329F0809194 +:103CC000E80083FF01C043CF0895F999FECF92BD6C +:103CD00081BDF89A992780B50895262FF999FECFCE +:103CE0001FBA92BD81BD20BD0FB6F894FA9AF99A19 +:0A3CF0000FBE01960895F894FFCF6F +:103CFA0001021E948920DCFB120110010000002041 +:103D0A00EB03EF2F00000001000109021B00010173 +:103D1A000080320904000000FE01020009210300AC +:0A3D2A0000000C000104030904006E +:0400000300003000C9 +:00000001FF diff --git a/external/arduino/avr/firmwares/atmegaxxu2/Arduino-COMBINED-dfu-usbserial-atmega16u2-Uno-Rev3.hex b/external/arduino/avr/firmwares/atmegaxxu2/Arduino-COMBINED-dfu-usbserial-atmega16u2-Uno-Rev3.hex new file mode 100644 index 000000000..441dd20a7 --- /dev/null +++ b/external/arduino/avr/firmwares/atmegaxxu2/Arduino-COMBINED-dfu-usbserial-atmega16u2-Uno-Rev3.hex @@ -0,0 +1,467 @@ +:1000000090C00000A9C00000A7C00000A5C000006B +:10001000A3C00000A1C000009FC000009DC0000060 +:100020009BC0000099C0000097C0000048C40000B9 +:100030000CC4000091C000008FC000008DC0000003 +:100040008BC0000089C0000087C0000085C0000090 +:1000500083C0000081C000007FC0000002C100001A +:100060007BC0000079C0000077C0000075C00000B0 +:1000700073C0000071C000006FC000006DC00000C0 +:100080006BC0000069C0000067C0000065C00000D0 +:1000900063C0000061C000001201100102000008EE +:1000A0004123430001000102DC0109023E0002017C +:1000B00000C0320904000001020201000524000111 +:1000C0001004240206052406000107058203080027 +:1000D000FF09040100020A000000070504024000B5 +:1000E00001070583024000010403090432034100B3 +:1000F00072006400750069006E006F002000280027 +:100100007700770077002E006100720064007500B0 +:1001100069006E006F002E0063006300290000007C +:10012000000011241FBECFEFD2E0DEBFCDBF11E033 +:10013000A0E0B1E0ECEAFFE002C005900D92A6312C +:10014000B107D9F712E0A6E1B1E001C01D92AF32CC +:10015000B107E1F7F1D028C753CF9C01DC01AE57BE +:10016000BF4FED91FC91119741911196FC93EE9345 +:1001700080589F4FE817F90711F42D933C939FB7D0 +:10018000F894F901EC57FF4F8081815080839FBF25 +:10019000842F0895DF92EF92FF920F931F93FC013B +:1001A0008489813019F0823021F405C040E3D42ED7 +:1001B00004C0DD2402C030E2D32E8389823011F4E2 +:1001C00088E0D82A8589873031F0883031F0863050 +:1001D00031F482E003C084E001C086E0D82A1092A6 +:1001E000C9001092C8001092CA00E784F088018903 +:1001F000128980E0E81681EEF80680E0080780E0CA +:10020000180719F420E130E00FC0C801B701969536 +:1002100087957795679560587B47814E9F4FA801DA +:100220009701A0D6215030403093CD002093CC00D0 +:10023000D092CA0080E0E81681EEF80680E0080758 +:1002400080E0180711F082E001C080E08093C800D0 +:1002500088E98093C9001F910F91FF90EF90DF9084 +:1002600008951F920F920FB60F9211242F938F9320 +:100270009F93EF93FF939091CE008EB38430F1F46F +:10028000E0919901F0919A019083E0919901F091A8 +:100290009A01CF01019690939A018093990189590F +:1002A000914021F489E191E0928381839FB7F89492 +:1002B00080919D018F5F80939D019FBFFF91EF9182 +:1002C0009F918F912F910F900FBE0F901F901895B7 +:1002D000FC01858580FF02C05F9808955F9A0895AC +:1002E00080E091E0D5C580E091E088C584B7877F44 +:1002F00084BF28E10FB6F89420936000109260004C +:100300000FBE87E690E09093CD008093CC0086E00E +:100310008093CA001092C8002093C900539A5A9A39 +:100320008AB180638AB98BB180638BB983D284E050 +:1003300085BD5F9A579A08950F931F93CF93DF93CC +:10034000D5DF2FB7F8948EE991E090931F02809348 +:100350001E0290932102809320022FBF2FB7F894A2 +:1003600089E191E090939A018093990190939C0187 +:1003700080939B012FBF7894CEE9D1E003E08FB743 +:10038000F894909122028FBF903809F180E091E0BB +:10039000ABD497FD1CC0E0911E02F0911F02808338 +:1003A000E0911E02F0911F02CF01019690931F026F +:1003B00080931E028E51924011F4D283C1839FB765 +:1003C000F894809122028F5F809322029FBF8FB7A3 +:1003D000F89410919D018FBFA89902C0113678F151 +:1003E000A89A80919D01882361F05D980093160181 +:1003F00008C089E191E0B1DE682F80E091E0DAD4B5 +:1004000011501123B1F780911601882351F080918A +:10041000160181508093160180911601882309F4FA +:100420005D9A80911701882351F0809117018150C6 +:100430008093170180911701882309F45C9A8FB784 +:10044000F894909122028FBF992369F08EE991E090 +:1004500084DE982F8091C80085FFFCCF9093CE005A +:100460005C980093170180E091E095D42AD487CF5F +:10047000DA01923049F0933061F09130F9F4E8E913 +:10048000F0E022E130E01EC0EAEAF0E02EE330E0E6 +:1004900019C0813049F0813018F0823079F408C0F9 +:1004A000E8EEF0E0849107C0ECEEF0E0849103C048 +:1004B000E0E2F1E08491282F30E004C0E0E0F0E0D9 +:1004C00020E030E0ED93FC93C901089528E030E08E +:1004D00040E003C04F5F220F331F28173907D0F3C6 +:1004E000842F8295807F08958093E9008091EB00AE +:1004F00081608093EB001092ED006093EC004093DC +:10050000ED008091EE00881F8827881F08951092C3 +:10051000F40090E09093E9001092F0001092E8004F +:100520001092ED008091EB008E7F8093EB009F5F37 +:10053000953081F708958091270288238CF403C0B9 +:100540008EB38823B1F08091E80082FFF9CF8091CB +:10055000E8008B778093E80008958EB3882349F0F4 +:100560008091E80080FFF9CF8091E8008E7780933A +:10057000E800089594E68091EC0080FF05C080912A +:10058000E80080FF05C023C08091E80082FD1FC005 +:100590008EB3882311F482E008958EB3853011F470 +:1005A00083E008958091EB0085FF02C081E008950B +:1005B0008091E10082FFDFCF8091E1008B7F80930B +:1005C000E100992311F484E008959150D4CF80E0A4 +:1005D00008959C0140912D0250912E024617570715 +:1005E00018F4F90120E038C06115710511F0AB0174 +:1005F000F8CF8091E8008E778093E80040E050E0EB +:10060000F0CF8091E80083FF02C081E008958091DF +:10061000E80082FD2DC08EB3882381F18EB3853032 +:1006200079F18091E80080FF17C09091F20006C038 +:1006300081918093F100415050409F5F41155105D9 +:1006400011F09830A8F320E0983009F421E080916F +:10065000E8008E778093E8004115510591F622233A +:1006600081F606C08EB3882349F08EB3853041F001 +:100670008091E80082FFF6CF80E0089582E008953F +:1006800083E008959C0140912D0250912E0246175F +:10069000570710F490E03BC06115710511F0AB01F4 +:1006A000F9CF8091E8008E778093E80040E050E039 +:1006B000F1CF8091E80083FF02C081E0089580912E +:1006C000E80082FD30C08EB3882399F18EB3853067 +:1006D00091F18091E80080FF1AC08091F20009C07A +:1006E000F9012F5F3F4FE491E093F10041505040FA +:1006F0008F5F4115510511F0883090F390E08830FC +:1007000009F491E08091E8008E778093E80041152C +:10071000510579F6992369F606C08EB3882349F00E +:100720008EB3853041F08091E80082FFF6CF80E003 +:10073000089582E0089583E008959C016115710594 +:1007400029F48091E8008B778093E800F90120C0BC +:100750008091E80083FF02C081E008958EB3882372 +:1007600039F18EB3853031F18091E80082FFF0CF0E +:1007700006C08091F10081936150704021F080911A +:10078000F2008823B1F78091E8008B778093E8002E +:1007900061157105E9F606C08EB3882349F08EB362 +:1007A000853041F08091E80080FFF6CF80E0089529 +:1007B00082E0089583E0089542D044D01EBA10929A +:1007C0002502109224021092230284E089BD89B58B +:1007D000826089BD09B400FEFDCF8091D800982FBA +:1007E0009F779093D80080688093D80080916300B1 +:1007F0008E7F809363008091D8008F7D8093D80096 +:100800008091E0008E7F8093E0008091E1008E7FF8 +:100810008093E1008091E20081608093E20080910A +:10082000E100877F8093E1008091E20088608093FF +:10083000E2000895C1DF81E08093260208951092BE +:10084000E20008951092E10008951F920F920FB6F2 +:100850000F9211241F932F933F934F935F936F93A6 +:100860007F938F939F93AF93BF93EF93FF93E9EEA3 +:10087000F0E0108117701082E0EFF0E08081877F58 +:1008800080837894C3D0F894A9EEB0E01C92E0EF96 +:10089000F0E08081886080831C93FF91EF91BF918D +:1008A000AF919F918F917F916F915F914F913F9108 +:1008B0002F911F910F900FBE0F901F9018951F92B0 +:1008C0000F920FB60F9211242F933F934F935F9384 +:1008D0006F937F938F939F93AF93BF93EF93FF9308 +:1008E0008091E10080FF1BC08091E20080FF17C073 +:1008F0008091E1008E7F8093E1008091E2008E7F05 +:100900008093E2008091E20080618093E200809118 +:10091000D80080628093D80019BC1EBAD1D18091D2 +:10092000E10084FF29C08091E20084FF25C084E0BB +:1009300089BD89B5826089BD09B400FEFDCF809173 +:10094000D8008F7D8093D8008091E1008F7E8093C6 +:10095000E1008091E2008F7E8093E2008091E200CE +:1009600081608093E20080912502882311F481E068 +:1009700001C084E08EBBA4D18091E10083FF27C039 +:100980008091E20083FF23C08091E100877F809304 +:10099000E10082E08EBB109225028091E1008E7F03 +:1009A0008093E1008091E2008E7F8093E20080914D +:1009B000E20080618093E200AADD80E060E042E036 +:1009C00093DD8091F00088608093F00079D1809170 +:1009D000E10082FF0AC08091E20082FF06C08091A0 +:1009E000E1008B7F8093E1006BD1FF91EF91BF918C +:1009F000AF919F918F917F916F915F914F913F91B7 +:100A00002F910F900FBE0F901F9018951F93DF939B +:100A1000CF93CDB7DEB7AC970FB6F894DEBF0FBE5D +:100A2000CDBFE7E2F2E08091F100819322E0EF3266 +:100A3000F207C9F78091270230912802353009F476 +:100A400087C0363040F43130C9F1313070F0333086 +:100A500009F01DC133C0383009F4EFC0393009F452 +:100A6000FEC0363009F013C192C0803821F08238C0 +:100A700009F00DC108C090912302809124028823BF +:100A800099F0926011C080912B0287708093E900E9 +:100A90008091EB0090E025E0969587952A95E1F707 +:100AA000982F91701092E9008091E800877F8093E1 +:100AB000E8009093F1001092F100CAC0882319F069 +:100AC000823009F0E4C090E08F719070009721F0BF +:100AD000029709F0DDC00CC080912902813009F035 +:100AE000D7C010922402333069F5809324022AC0C3 +:100AF00080912902882331F520912B02277009F477 +:100B0000C7C02093E9008091EB0080FFC1C0333063 +:100B100021F48091EB00806213C08091EB00806132 +:100B20008093EB0081E090E002C0880F991F2A9526 +:100B3000E2F78093EA001092EA008091EB0088606F +:100B40008093EB001092E9008091E800877F83C0DA +:100B5000882309F09CC0109129028091E800877FCA +:100B60008093E800E8DC04C08EB3882309F490C0C9 +:100B70008091E80080FFF8CF812F8F7711F492E009 +:100B800001C093E09EBB80688093E30081C08058E1 +:100B9000823008F07CC08091290290912A0223E0E3 +:100BA0008C3D920799F55FB7F894DE0115964EE0FB +:100BB00020E030E061E2E42FF0E0609357008491A0 +:100BC00020FF03C082958F704F5F982F9F70892FF1 +:100BD000805D8A3308F0895F8C9311961C9211977F +:100BE0002F5F3F4F12962431310529F75FBF8AE20C +:100BF0008B8383E08C838091E800877F8093E8007B +:100C0000CE0103966AE270E0E4DC11C060912B0231 +:100C1000AE014F5F5F4F2CDCBC010097C9F18091A2 +:100C2000E800877F8093E80089819A812BDD80919D +:100C3000E8008B778093E8002BC0803841F58091E5 +:100C4000E800877F8093E800809125028093F1007F +:100C50008091E8008E778093E8006DDC19C08823CE +:100C6000B1F490912902923098F48091E800877F46 +:100C70008093E800909325025EDC80912502882312 +:100C800011F483E001C084E08EBB2DDB01C028DBC2 +:100C90008091E80083FF0AC08091EB00806280931E +:100CA000EB008091E800877F8093E800AC960FB658 +:100CB000F894DEBF0FBECDBFCF91DF911F91089595 +:100CC00008951F938EB3882361F01091E90010926C +:100CD000E9008091E80083FF01C098DE177010934F +:100CE000E9001F9108950895FC018EB3843021F529 +:100CF00087859089A189B2890097A105B105E1F0A6 +:100D000085818093E9008091E80082FF15C0809181 +:100D1000F200882319F42FEF3FEF04C08091F10017 +:100D2000282F30E08091F200882341F48091E80080 +:100D30008B778093E80002C02FEF3FEFC901089541 +:100D4000FC018EB3843011F587859089A189B28921 +:100D50000097A105B105D1F081818093E9008091D0 +:100D6000F2008823A9F09091E8008091E8008E7746 +:100D70008093E80095FD0CC0FDDB982F882349F493 +:100D80008091E8008E778093E80003C092E001C074 +:100D900090E0892F0895FC018EB3843051F487854B +:100DA0009089A189B2890097A105B10511F0CF0101 +:100DB000C7CF08951F93FC01162F8EB38430D9F44A +:100DC00087859089A189B2890097A105B10599F01D +:100DD00081818093E9008091E80085FD08C08091C1 +:100DE000E8008E778093E800C5DB882329F4109310 +:100DF000F10080E001C082E01F9108950F931F93DE +:100E0000CF93DF93EC010D96FC0189E0DF011D9289 +:100E10008A95E9F72A813B8109818C81882311F425 +:100E200010E001C014E0C90151DB182B1260802FC3 +:100E300061E8412F59DB882329F12E813F810D8103 +:100E40008885882311F410E001C014E0C9013EDB5D +:100E5000182B1260802F60E8412F46DB882391F029 +:100E60002A853B8509858C85882311F410E001C013 +:100E700014E0C9012BDB182B1260802F61EC412F8D +:100E800033DB01C080E0DF91CF911F910F91089576 +:100E9000CF93DF93EC018091E80083FF60C08881ED +:100EA00090E020912B0230912C022817390709F08D +:100EB00056C080912802813261F0823220F4803263 +:100EC00009F04DC019C0823269F1833209F047C080 +:100ED00038C080912702813A09F041C08091E80032 +:100EE000877F8093E800CE010F9667E070E071DBAA +:100EF0008091E8008B7713C080912702813279F5C9 +:100F00008091E800877F8093E800CE010F9667E02C +:100F100070E013DCCE013ED98091E8008E7780939B +:100F2000E8001DC0809127028132C9F48091E80059 +:100F3000877F8093E800809129028D87CE01C8D9F0 +:100F40000DC080912702813251F48091E800877FA3 +:100F50008093E800CE0160912902C5DEECDADF91D2 +:100F6000CF910895A1E21A2EAA1BBB1BFD010DC053 +:100F7000AA1FBB1FEE1FFF1FA217B307E407F50749 +:100F800020F0A21BB30BE40BF50B661F771F881F25 +:100F9000991F1A9469F760957095809590959B01BB +:0C0FA000AC01BD01CF010895F894FFCF13 +:100FAC0000034000000440000002080000000000A4 +:060FBC000000000000002F +:103000004BC0000064C0000062C0000060C000004F +:103010005EC000005CC000005AC0000058C0000044 +:1030200056C0000054C0000052C00000EEC40000B2 +:103030004EC000004CC000004AC0000048C0000064 +:1030400046C0000044C0000042C0000040C0000074 +:103050003EC000003CC000003AC0000038C0000084 +:1030600036C0000034C0000032C0000030C0000094 +:103070002EC000002CC000002AC0000028C00000A4 +:1030800026C0000024C0000022C0000020C00000B4 +:103090001EC000001CC0000011241FBECFEFD2E0F4 +:1030A000DEBFCDBF11E0A0E0B1E0EAEFFCE302C07B +:1030B00005900D92AA33B107D9F711E0AAE3B1E068 +:1030C00001C01D92AB35B107E1F772D314C698CF9A +:1030D000982F15C08091F200882371F48091E80048 +:1030E0008B7F8093E80003C08EB3882351F08091DA +:1030F000E80082FFF9CF02C08091F100915099233E +:1031000049F7089520914A01309149018091480181 +:103110009091470180933F0190934001C9018093B2 +:103120004101909342010895DF93CF9300D000D0E6 +:1031300000D0CDB7DEB780914501843009F45AC084 +:10314000853030F4813059F0833009F0D7C01FC08A +:10315000853009F4A0C0863009F0D0C0C3C080918A +:103160004601823008F0CAC0CDDF80914601882335 +:1031700061F480913F019091400123E0FC01209394 +:103180005700E89507B600FCFDCF85E008C08091A8 +:103190004601882311F0823029F4B4DF89E080935E +:1031A0000101ACC0813009F0A9C020E030E040E06E +:1031B00050E0F90184918F3F81F0CA01AA27BB2713 +:1031C00080933E013093400120933F018AE0809339 +:1031D000010185E080933B0191C02F5F3F4F4F4F2E +:1031E0005F4F2030F0E33F07F0E04F07F0E05F076C +:1031F00001F784C080914601833051F581E08093CE +:103200003A0180914B0190914C01892B71F0809192 +:103210004701813009F072C080914A0190914901C3 +:1032200090933D0180933C0169C0809147018823C0 +:1032300061F42CE088E190E00FB6F894A8958093B3 +:1032400060000FBE2093600059C01092000156C06C +:10325000882309F053C0809147018F3F09F04EC089 +:10326000E0E0F0E093E085E090935700E89507B642 +:1032700000FCFDCF80935700E89507B600FCFDCF1A +:10328000E058FF4F20E3E030F20771F781E18093CF +:103290005700E89533C0DE011196E5E0F1E083E0E8 +:1032A00001900D928150E1F7DE011496E2E0F1E029 +:1032B00083E001900D928150E1F790914701809158 +:1032C0004601882329F4FE01E90FF11D818107C021 +:1032D0008130A1F4FE01BC97E90FF11D808180933C +:1032E00050010CC080914601833041F48091470128 +:1032F000882321F48091480180933E0126960FB6E1 +:10330000F894DEBF0FBECDBFCF91DF9108952F920D +:103310003F924F925F926F927F929F92AF92BF9235 +:10332000CF92DF92EF92FF920F931F93CF93DF9391 +:103330008091590190915A0190934C0180934B01D7 +:1033400080914D01882351F080914D0181508093EF +:103350004D0180914D01882309F45D9A80914E01C1 +:10336000882351F080914E01815080934E018091CD +:103370004E01882309F45C9A80915401833009F44A +:10338000B2C1843030F4813071F0823009F0E3C191 +:1033900011C1853009F4C5C1853008F4BAC1863041 +:1033A00009F0D9C1CDC15C9883E080934E01809132 +:1033B000E800877F8093E80080913A01882329F014 +:1033C000B3DE5D9A5C9A10923A0120914B013091E4 +:1033D0004C012115310529F42AC08EB3882309F444 +:1033E000BAC18091E80082FFF8CF8091F10080930C +:1033F00045012150304030934C0120934B01E6E4CD +:10340000F1E00CC08091F10081932150304081E0C7 +:10341000EB34F80719F43183208308C08091F2005F +:10342000882381F730934C0120934B017DDE8091FE +:103430000101853009F0BAC080914B0190914C0197 +:10344000892B21F482E080930101B0C08AE140DE43 +:1034500080913F018F713CDEC0914101D0914201CA +:1034600020913F013091400121968E01021B130BE8 +:10347000219780914601882309F093C01801369462 +:103480002794C901A0913E01B0E09C01AD0162E02A +:10349000E62EF12C012D112DE20EF31E041F151F37 +:1034A00059016A0190E099249394B5E0A3E048C0E3 +:1034B0008091F200882371F48091E8008B7F8093E3 +:1034C000E80004C08EB3882309F445C18091E80068 +:1034D00082FFF8CF0894210831088091F100682F0D +:1034E0008091F100782FF5010B0190925700E8953B +:1034F00011249F5F903419F021143104A1F4F901D3 +:10350000B0935700E89507B600FCFDCF21143104B5 +:1035100051F0F701A0935700E89507B600FCFDCFE6 +:10352000A801970190E042E0442E512C612C712CAF +:10353000E40CF51C061D171DA40CB51CC61CD71CDD +:103540002114310409F0B4CFD0934001C0933F015E +:1035500081E180935700E89527C08091F20088238D +:1035600071F48091E8008B7F8093E80004C08EB3F3 +:10357000882309F4F0C08091E80082FFF8CF6091C1 +:10358000F10080913F0190914001A7D380913F01CC +:103590009091400101969093400180933F0101502A +:1035A000104001151105C9F680E192DD8091E80017 +:1035B0008B7FC3C08091E800877F8093E8005D988F +:1035C00083E080934D0104C08EB3882309F4C3C007 +:1035D0008091E80080FFF8CF80910101893091F05F +:1035E0008A3069F480914601813049F480913F012D +:1035F000909140018093F1009093F1009BC08091E5 +:10360000500196C0609141017091420120913F01AB +:10361000309140016F5F7F4F7B01E21AF30A6150E6 +:10362000704080914601882389F58701169507959A +:10363000C901A0913E01B0E09C01AD011FC0809185 +:10364000F200803271F48091E8008E7F8093E80070 +:1036500004C08EB3882309F47EC08091E80080FF07 +:10366000F8CFF901859194918093F1009093F10046 +:10367000015010402E5F3F4F4F4F5F4F0115110516 +:10368000F1F67093400160933F0129C0823039F513 +:1036900023C08091F200803271F48091E8008E7F27 +:1036A0008093E80004C08EB3882309F454C080914D +:1036B000E80080FFF8CF00913F0110914001C80160 +:1036C00004D38093F1000F5F1F4F109340010093CC +:1036D0003F010894E108F108E114F104D1F682E019 +:1036E0008093010127C08091E800877F8093E800E4 +:1036F00080913B018093F1001092F1001092F10053 +:103700001092F100809101018093F1001092F1007C +:1037100011C08091E800877F8093E80010923B0100 +:1037200019C08091E800877F8093E80080910101B3 +:103730008093F1008091E8008E7F8093E8000AC0BA +:103740008091E800877F8093E8005D9A5C9A82E030 +:103750008093010187D0DF91CF911F910F91FF904E +:10376000EF90DF90CF90BF90AF909F907F906F9041 +:103770005F904F903F902F9008952BD181E085BFAF +:1037800015BE089584B7877F84BF88E10FB6F8948B +:1037900080936000109260000FBE81E085BF82E0E0 +:1037A00085BF8AB180638AB98BB180638BB90CC144 +:1037B000E9DF789401C080D2809100018823D9F795 +:1037C00080913A018823B9F7D8DFE0913C01F0916C +:1037D0003D010995FA01923071F0933089F09130F2 +:1037E00029F488E091E022E130E019C080E090E027 +:1037F00020E030E014C08AE191E02BE130E00FC01E +:10380000882339F480913501282F30E085E391E059 +:1038100006C080914301282F30E083E491E091833A +:103820008083C90108958091EB0081608093EB0053 +:103830001092ED006093EC004093ED008091EE005B +:10384000881F8827881F08951092F4001092F000B6 +:103850001092E8001092ED00EBEEF0E080818E7F98 +:10386000808308958091530188238CF403C08EB324 +:103870008823B1F08091E80082FFF9CF8091E800C1 +:103880008B7F8093E80008958EB3882349F0809160 +:10389000E80080FFF9CF8091E8008E7F8093E800F8 +:1038A00008959C014091590150915A0146175707BC +:1038B00018F4F90120E038C06115710511F0AB0171 +:1038C000F8CF8091E8008E7F8093E80040E050E0E0 +:1038D000F0CF8091E80083FF02C081E008958091DD +:1038E000E80082FD2DC08EB3882381F18EB3853030 +:1038F00079F18091E80080FF17C09091F20006C036 +:1039000081918093F100415050409F5F41155105D6 +:1039100011F09032A8F320E0903209F421E0809178 +:10392000E8008E7F8093E8004115510591F622232F +:1039300081F606C08EB3882349F08EB3853041F0FE +:103940008091E80082FFF6CF80E0089582E008953C +:1039500083E0089554D056D01EBA1092510184E0ED +:1039600089BD89B5826089BD09B400FEFDCF809113 +:10397000D800982F9F779093D80080688093D800C4 +:10398000809163008E7F809363008091D8008F7D4B +:103990008093D8008091E0008E7F8093E00080913A +:1039A000E1008E7F8093E1008091E200816080934E +:1039B000E2008091E100877F8093E1008091E20046 +:1039C00088608093E2000895C5DF81E08093520112 +:1039D0000895C0DFE0EEF0E0808181608083E8ED53 +:1039E000F0E080818F7780830AD00CD019BCE3E6A9 +:1039F000F0E08081816080831092520108951092DE +:103A0000E20008951092E10008951F920F920FB600 +:103A10000F9211242F933F934F935F936F937F9354 +:103A20008F939F93AF93BF93EF93FF938091E100A8 +:103A300080FF1BC08091E20080FF17C08091E100F1 +:103A40008E7F8093E1008091E2008E7F8093E20080 +:103A50008091E20080618093E2008091D8008062D2 +:103A60008093D80019BC1EBA26D18091E10084FF52 +:103A700029C08091E20084FF25C084E089BD89B51A +:103A8000826089BD09B400FEFDCF8091D8008F7D92 +:103A90008093D8008091E1008F7E8093E100809137 +:103AA000E2008F7E8093E2008091E200816080934B +:103AB000E20080915101882311F481E001C084E08B +:103AC0008EBBF9D08091E10083FF22C08091E2009B +:103AD00083FF1EC08091E100877F8093E10082E038 +:103AE0008EBB109251018091E1008E7F8093E100A6 +:103AF0008091E2008E7F8093E2008091E2008061FD +:103B00008093E200A1DE80E060E042E28CDED3D070 +:103B10008091E10082FF0AC08091E20082FF06C02E +:103B20008091E1008B7F8093E100C5D0FF91EF9100 +:103B3000BF91AF919F918F917F916F915F914F91C5 +:103B40003F912F910F900FBE0F901F9018951F93CC +:103B5000DF93CF9300D0CDB7DEB7E3E5F1E08091FE +:103B6000F100819381E0EB35F807C9F7909153019B +:103B700080915401853011F1863040F48130B9F0E4 +:103B8000813070F0833009F081C011C0883009F4B1 +:103B900053C0893009F462C0863009F077C02DC067 +:103BA000903809F474C0923809F070C070C099233D +:103BB00009F46DC0923009F069C069C0992309F019 +:103BC00065C0109155018091E800877F8093E800DF +:103BD00049DE04C08EB3882309F459C08091E800FF +:103BE00080FFF8CF812F8F7711F492E001C093E02E +:103BF0009EBB80688093E3004AC09058923008F0E2 +:103C000045C0809155019091560160915701AE01D8 +:103C10004F5F5F4FDFDDBC010097C9F18091E80085 +:103C2000877F8093E80089819A813BDE8091E8005C +:103C30008B7F8093E8002BC0903841F58091E8009D +:103C4000877F8093E800809151018093F1008091FB +:103C5000E8008E7F8093E80005DE19C09923B1F457 +:103C600090915501923098F48091E800877F80937D +:103C7000E80090935101F6DD80915101882311F401 +:103C800083E001C084E08EBB16D001C040DB809190 +:103C9000E80083FF0AC08091EB0080628093EB0014 +:103CA0008091E800877F8093E8000F900F90CF917C +:103CB000DF911F91089508958EB3882329F0809194 +:103CC000E80083FF01C043CF0895F999FECF92BD6C +:103CD00081BDF89A992780B50895262FF999FECFCE +:103CE0001FBA92BD81BD20BD0FB6F894FA9AF99A19 +:0A3CF0000FBE01960895F894FFCF6F +:103CFA0001021E948920DCFB120110010000002041 +:103D0A00EB03EF2F00000001000109021B00010173 +:103D1A000080320904000000FE01020009210300AC +:0A3D2A0000000C000104030904006E +:0400000300003000C9 +:00000001FF diff --git a/external/arduino/avr/firmwares/atmegaxxu2/Genuino-COMBINED-dfu-usbserial-atmega16u2-Mega2560-R3.hex b/external/arduino/avr/firmwares/atmegaxxu2/Genuino-COMBINED-dfu-usbserial-atmega16u2-Mega2560-R3.hex new file mode 100644 index 000000000..80c358b68 --- /dev/null +++ b/external/arduino/avr/firmwares/atmegaxxu2/Genuino-COMBINED-dfu-usbserial-atmega16u2-Mega2560-R3.hex @@ -0,0 +1,490 @@ +:200000009EC00000B7C00000B5C00000B3C00000B1C00000AFC00000ADC00000ABC000006B +:20002000A9C00000A7C00000A5C00000FCC30000A1C400009FC000009DC000009BC0000050 +:2000400099C0000097C0000095C0000093C0000091C000008FC000008DC00000C6C10000D4 +:2000600089C0000087C0000085C0000083C0000081C00000160538052206380522067A05C3 +:2000800097052206EA05FC052403470065006E00750069006E006F0020004D006500670077 +:2000A00061002000320035003600300000003A03410072006400750069006E006F002000C3 +:2000C0004C004C004300200028007700770077002E00610072006400750069006E006F0078 +:2000E0002E0063006300290000000403090409023E00020100C0320904000001020201007E +:200100000524000110042402060524060001070582030800FF09040100020A000000070587 +:2001200004024000010705830240000112011001020000084123420201000102DC011124BA +:200140001FBECFEFD2E0DEBFCDBF11E0A0E0B1E0EEE4FFE002C005900D92A631B107D9F721 +:2001600012E0A6E1B1E001C01D92AF32B107E1F764D0EBC645CFFC01E058FF4FA081B181C5 +:200180006C93A081B1819D012F5F3F4F318320832E173F0721F412969C938E9311972FB7D6 +:2001A000F894FC01EC57FF4F80818F5F80832FBF0895DC01AE57BF4FED91FC911197419133 +:2001C0001196FC93EE939C0120583F4FE217F30711F48D939C932FB7F894FC01EC57FF4F7E +:2001E0009081915090832FBF842F089584B7877F84BF88E10FB6F894809360001092600009 +:200200000FBE87E690E09093CD008093CC0086E08093CA001092C80088E18093C900539A86 +:200220005A9A8AB180638AB98BB180638BB9F0D284E085BD5F9A579A0895D8DF2FB7F894EE +:200240008EE991E090931F0280931E0290932102809320022FBF2FB7F89489E191E0909366 +:200260009A018093990190939C0180939B012FBF7894D3E09FB7F894809122029FBF8038ED +:2002800049F080E091E00ED697FD04C0682F8EE991E071DF8FB7F894C0919D018FBFA899F9 +:2002A00002C0C13658F1A89A80919D01882319F05D98D0931601CC2349F089E191E079DFCD +:2002C000682F80E091E093D5C150F5CF80911601882341F0809116018150809316018111C0 +:2002E00001C05D9A80911701882341F080911701815080931701811101C05C9A9FB7F894F1 +:20030000809122029FBF882361F08EE991E051DF9091C80095FFFCCF8093CE005C98D093B6 +:20032000170180E091E0B0D59AD4A4CF80E091E011C580E091E0A5C41F93CF93DF93EC011A +:200340008C89813031F0823011F010E003C010E201C010E38B89823009F418608D898730A2 +:2003600031F0883031F0863029F4126003C0146001C016601092C9001092C8001092CA008F +:200380002F85388949895A89211581EE38074105510571F0CA01B90196958795779567957E +:2003A00060587B47814E9F4FA8D52150310902C020E130E03093CD002093CC001093CA008F +:2003C0008F859889A989BA898115914EA105B10511F480E001C082E08093C80088E98093BB +:2003E000C900DF91CF911F9108951F920F920FB60F9211242F933F934F935F936F937F93AE +:200400008F939F93AF93BF93EF93FF936091CE008EB3843019F489E191E0ADDEFF91EF91A9 +:20042000BF91AF919F918F917F916F915F914F913F912F910F900FBE0F901F901895FC0108 +:20044000858580FF02C05F9808955F9A0895292F33272230310559F02330310569F0213071 +:200460003105F9F482E190E02CE231E01EC08EE390E02EEE30E019C099278130910541F06B +:200480008230910541F0892B61F4EAEEF0E005C0EEEAF0E002C0E8E8F0E0849190E09F013E +:2004A00004C080E090E020E030E0FA0131832083089528E030E040E02817390720F44F5F30 +:2004C000220F331FF9CF842F8295807F08958093E900EBEEF0E0808181608083EDEEF0E036 +:2004E00010826093EC0040838091EE00881F8827881F08951092F40080E08093E90010929B +:20050000F0001092E8001092ED009091EB009E7F9093EB008F5F853081F7089580912702A9 +:2005200087FD05C08091E80080FF0DC010C08091E80082FD04C08EB38111F9CF08958091D8 +:20054000E8008B7707C08EB38111ECCF08958091E8008E778093E800089585E69091EC00B1 +:2005600090FF05C09091E80090FF05C01BC09091E80092FD17C09EB39923B1F09EB39530BC +:20058000A9F09091EB0095FD13C09091E10092FFE5CF9091E1009B7F9093E1008150F1F632 +:2005A00084E0089580E0089582E0089583E0089581E0089520912D0230912E0226173707F4 +:2005C00048F06115710539F42091E8002E772093E80001C0B90130E06115710591F1209147 +:2005E000E80023FD38C02091E80022FF06C08091E80082FF29C080E008952EB3222369F19B +:200600002EB3253061F12091E80020FFE5CF2091F200FC01CF016115710549F0283038F4CD +:2006200081918093F100615071092F5FF3CF31E0283009F030E02091E8002E772093E800DE +:20064000CBCF3111CCCFD3CF8EB3882331F08EB3853069F604C081E0089582E0089583E0FB +:20066000089520912D0230912E022617370748F06115710539F42091E8002E772093E80067 +:2006800001C0B90130E06115710599F12091E80023FD39C02091E80022FF06C08091E8002E +:2006A00082FF2AC080E008952EB3222371F12EB3253069F12091E80020FFE5CF2091F200AB +:2006C000FC01CF016115710551F0283040F484918093F100615071092F5F3196F2CF31E029 +:2006E000283009F030E02091E8002E772093E800CACF3111CBCFD2CF8EB3882331F08EB35C +:20070000853061F604C081E0089582E0089583E008956115710529F42091E8002B77209315 +:20072000E8006115710549F12091E80023FD2AC02EB3222359F12EB3253051F12091E80087 +:2007400022FFF2CFFC018091F200882371F09F012F5F3F4FC9014091F10040836150710975 +:2007600061157105C9F2F901EECFCF01D5CF8EB3882361F08EB3853059F08091E80080FFB3 +:20078000F6CF02C081E0089580E0089582E0089583E0089542D044D01EBA1092250210926F +:2007A00024021092230284E089BD89B5826089BD09B400FEFDCF8091D800982F9F779093CC +:2007C000D80080688093D800809163008E7F809363008091D8008F7D8093D8008091E000A6 +:2007E0008E7F8093E0008091E1008E7F8093E1008091E20081608093E2008091E100877F45 +:200800008093E1008091E20088608093E2000895C1DF81E08093260208951092E20008957D +:200820001092E10008951F920F920FB60F9211242F933F934F935F936F937F938F939F93DB +:20084000AF93BF93EF93FF938091E10080FF1BC08091E20080FF17C08091E1008E7F809349 +:20086000E1008091E2008E7F8093E2008091E20080618093E2008091D80080628093D80023 +:2008800019BC1EBAEBD18091E10084FF29C08091E20084FF25C084E089BD89B5826089BD26 +:2008A00009B400FEFDCF8091D8008F7D8093D8008091E1008F7E8093E1008091E2008F7EDE +:2008C0008093E2008091E20081608093E20080912502882311F084E001C081E08EBBBED118 +:2008E0008091E10083FF27C08091E20083FF23C08091E100877F8093E10082E08EBB10920C +:2009000025028091E1008E7F8093E1008091E2008E7F8093E2008091E20080618093E200FF +:20092000E9DD42E060E080E0D2DD8091F00088608093F00093D18091E10082FF0AC08091E2 +:20094000E20082FF06C08091E1008B7F8093E10085D1FF91EF91BF91AF919F918F917F9128 +:200960006F915F914F913F912F910F900FBE0F901F9018951F920F920FB60F9211242F9301 +:200980003F934F935F936F937F938F939F93AF93BF93CF93EF93FF93E9EEF0E0C081C77020 +:2009A0001082E0EFF0E08081877F808378941CD0F894E9EEF0E01082A0EFB0E08C9188601B +:2009C0008C93C083FF91EF91CF91BF91AF919F918F917F916F915F914F913F912F910F9056 +:2009E0000FBE0F901F9018951F93CF93DF93CDB7DEB7AA970FB6F894DEBF0FBECDBFE7E23F +:200A0000F2E08091F100819322E0EF32F207C9F72091270230912802832F90E08A309105DB +:200A200008F010C1FC01E65CFF4F89C2203881F0223809F007C180912B0287708093E90000 +:200A40008091EB0085FB882780F91092E90006C08091230290912402911182609091E80097 +:200A6000977F9093E8008093F1001092F100BDC0822F8D7F09F0E6C0222319F0223061F0F4 +:200A8000D2C080912902813009F0CDC0333009F080E08093240228C080912902811124C0C2 +:200AA00020912B02277009F4BEC02093E9008091EB0080FFB8C08091EB00333011F4806271 +:200AC00011C080618093EB0081E090E0022E01C0880F0A94EAF78093EA001092EA008091F4 +:200AE000EB0088608093EB001092E9008091E800877F7EC02111A6C0109129028091E80000 +:200B0000877F8093E8000ADD8091E80080FD04C08EB38111F9CF87C0812F8F7711F093E0A7 +:200B200001C092E09EBB80688093E3007CC02058223008F087C08091290290912A028C3DB4 +:200B400023E0920781F583E08A838AE289834FB7F894DE01139620E03EE051E2E32FF0E04E +:200B600050935700E49120FF03C0E295EF703F5FEF7090E39E0F9A3310F0E95C01C0E92F06 +:200B80008E2F90E08D939D932F5F243139F74FBF8091E800877F8093E8006AE270E0CE0152 +:200BA000019608DD11C0AE014F5F5F4F60912B024EDC0097C1F12091E800277F2093E80072 +:200BC000BC0189819A814DDD8091E8008B778093E80029C02038B1F58091E800877F80931A +:200BE000E800809125028093F1008091E8008E778093E80093DC17C0211124C09091290230 +:200C0000923088F48091E800877F8093E8009093250284DC80912502882311F084E001C0E9 +:200C200083E08EBB83DB8091E80083FF0DC08091EB0080628093EB008091E800877F809374 +:200C4000E80002C076DBEFCFAA960FB6F894DEBF0FBECDBFDF91CF911F9108950895CF9338 +:200C60008EB3882359F0C091E900C7701092E9008091E80083FDB8DEC093E900CF910895FB +:200C80000895CF93DF93EC018091E80083FF5FC0888190E020912B0230912C022817390797 +:200CA00009F055C080912802813249F018F48032C9F04DC0823261F18332C9F148C08091ED +:200CC0002702813A09F043C08091E800877F8093E80067E070E0CE010F966CDC8091E800EE +:200CE0008B7713C080912702813289F58091E800877F8093E80067E070E0CE010F9609DDC9 +:200D0000CE011ADB8091E8008E778093E8001FC0809127028132D9F48091E800877F80936B +:200D2000E800809129028D87CE0189DB0DC080912702813261F48091E800877F8093E8003F +:200D400060912902CE019CDFDF91CF91E7CBDF91CF9108950F931F93CF93DF93EC01FC012C +:200D60003D9689E0DF011D928A95E9F72A813B818C81882311F014E001C010E00981C90190 +:200D800098DB412F482B426061E8802FA0DB882341F12E813F818885882311F014E001C02E +:200DA00010E00D81C90185DB412F482B426060E8802F8DDB8823A9F02A853B858C85882338 +:200DC00011F014E001C010E0C985C90172DB412F482B426061EC8C2FDF91CF911F910F915B +:200DE00076CB80E0DF91CF911F910F910895CF93C62F2EB32430E9F4FC01478550896189A0 +:200E00007289452B462B472BA1F081818093E9008091E80085FF04C0C093F10080E00AC046 +:200E20008091E8008E778093E80097DB8823A1F301C082E0CF9108952EB3243019F5FC01A8 +:200E40004785508961897289452B462B472BD1F081818093E9008091F200882389F09091AE +:200E6000E8008091E8008E778093E80095FD08C074DB811108C08091E8008E778093E80095 +:200E800080E0089582E008952EB3243051F4FC014785508961897289452B462B472B09F009 +:200EA000CBCF08952EB3243019F08FEF9FEF0895FC014785508961897289452B462B472B3A +:200EC000A1F385818093E9008091E80082FFEDCF8091F200882321F02091F10030E002C013 +:200EE0002FEF3FEF8091F200811105C08091E8008B778093E800C9010895A1E21A2EAA1B5F +:200F0000BB1BFD010DC0AA1FBB1FEE1FFF1FA217B307E407F50720F0A21BB30BE40BF50B8E +:200F2000661F771F881F991F1A9469F760957095809590959B01AC01BD01CF010895EE0F84 +:200F4000FF1F0590F491E02D0994F894FFCF000340000004400000020800000000000000C4 +:200F600000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D +:200F800020F0A21BB30BE40BF50B661F771F881F991F1A9469F760957095809590959B017F +:200FA000AC01BD01CF010895F894FFCF00034000000440000002080000000000000000006E +:200FC0000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F +:200FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF11 +:20100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 +:20102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0 +:20104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0 +:20106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90 +:20108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70 +:2010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50 +:2010C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30 +:2010E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF10 +:20110000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF +:20112000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF +:20114000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF +:20116000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F +:20118000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F +:2011A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F +:2011C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F +:2011E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F +:20120000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEE +:20122000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE +:20124000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAE +:20126000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E +:20128000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E +:2012A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4E +:2012C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E +:2012E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E +:20130000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED +:20132000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCD +:20134000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD +:20136000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D +:20138000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6D +:2013A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4D +:2013C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2D +:2013E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D +:20140000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC +:20142000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCC +:20144000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAC +:20146000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8C +:20148000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C +:2014A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C +:2014C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C +:2014E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0C +:20150000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEB +:20152000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCB +:20154000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAB +:20156000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8B +:20158000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6B +:2015A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4B +:2015C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2B +:2015E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B +:20160000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA +:20162000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCA +:20164000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAA +:20166000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8A +:20168000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A +:2016A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4A +:2016C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A +:2016E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A +:20170000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9 +:20172000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9 +:20174000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9 +:20176000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF89 +:20178000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF69 +:2017A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF49 +:2017C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF29 +:2017E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF09 +:20180000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8 +:20182000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC8 +:20184000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA8 +:20186000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF88 +:20188000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF68 +:2018A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF48 +:2018C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF28 +:2018E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF08 +:20190000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7 +:20192000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7 +:20194000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA7 +:20196000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87 +:20198000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF67 +:2019A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF47 +:2019C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF27 +:2019E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07 +:201A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6 +:201A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC6 +:201A4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA6 +:201A6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF86 +:201A8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF66 +:201AA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF46 +:201AC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF26 +:201AE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF06 +:201B0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5 +:201B2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC5 +:201B4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5 +:201B6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF85 +:201B8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF65 +:201BA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF45 +:201BC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF25 +:201BE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05 +:201C0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4 +:201C2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4 +:201C4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA4 +:201C6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF84 +:201C8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF64 +:201CA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF44 +:201CC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF24 +:201CE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04 +:201D0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3 +:201D2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC3 +:201D4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA3 +:201D6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF83 +:201D8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF63 +:201DA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF43 +:201DC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF23 +:201DE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03 +:201E0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2 +:201E2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC2 +:201E4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA2 +:201E6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF82 +:201E8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF62 +:201EA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF42 +:201EC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF22 +:201EE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02 +:201F0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 +:201F2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC1 +:201F4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA1 +:201F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF81 +:201F8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF61 +:201FA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF41 +:201FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF21 +:201FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01 +:20200000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 +:20202000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 +:20204000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0 +:20206000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 +:20208000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60 +:2020A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40 +:2020C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20 +:2020E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +:20210000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF +:20212000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF +:20214000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F +:20216000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F +:20218000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F +:2021A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F +:2021C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F +:2021E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +:20220000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDE +:20222000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBE +:20224000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9E +:20226000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7E +:20228000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E +:2022A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E +:2022C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E +:2022E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE +:20230000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDD +:20232000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBD +:20234000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9D +:20236000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7D +:20238000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D +:2023A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D +:2023C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D +:2023E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD +:20240000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC +:20242000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBC +:20244000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9C +:20246000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C +:20248000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5C +:2024A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3C +:2024C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C +:2024E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC +:20250000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB +:20252000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBB +:20254000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9B +:20256000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7B +:20258000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B +:2025A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B +:2025C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1B +:2025E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB +:20260000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDA +:20262000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBA +:20264000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A +:20266000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7A +:20268000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5A +:2026A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3A +:2026C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1A +:2026E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA +:20270000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9 +:20272000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB9 +:20274000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99 +:20276000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF79 +:20278000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF59 +:2027A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF39 +:2027C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF19 +:2027E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9 +:20280000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8 +:20282000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB8 +:20284000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF98 +:20286000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF78 +:20288000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF58 +:2028A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF38 +:2028C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF18 +:2028E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8 +:20290000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7 +:20292000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB7 +:20294000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF97 +:20296000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77 +:20298000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF57 +:2029A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF37 +:2029C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF17 +:2029E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7 +:202A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6 +:202A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB6 +:202A4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF96 +:202A6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF76 +:202A8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF56 +:202AA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF36 +:202AC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF16 +:202AE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6 +:202B0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD5 +:202B2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5 +:202B4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF95 +:202B6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF75 +:202B8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF55 +:202BA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF35 +:202BC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF15 +:202BE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5 +:202C0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4 +:202C2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB4 +:202C4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF94 +:202C6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74 +:202C8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF54 +:202CA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF34 +:202CC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF14 +:202CE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4 +:202D0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3 +:202D2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB3 +:202D4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF93 +:202D6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF73 +:202D8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF53 +:202DA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF33 +:202DC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF13 +:202DE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3 +:202E0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD2 +:202E2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB2 +:202E4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF92 +:202E6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72 +:202E8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF52 +:202EA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF32 +:202EC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF12 +:202EE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2 +:202F0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD1 +:202F2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB1 +:202F4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF91 +:202F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF71 +:202F8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF51 +:202FA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF31 +:202FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF11 +:202FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1 +:203000004BC0000064C0000062C0000060C000005EC000005CC000005AC0000058C00000D3 +:2030200056C0000054C0000052C00000CBC400004EC000004CC000004AC0000048C0000099 +:2030400046C0000044C0000042C0000040C000003EC000003CC000003AC0000038C0000078 +:2030600036C0000034C0000032C0000030C000002EC000002CC000002AC0000028C00000D8 +:2030800026C0000024C0000022C0000020C000001EC000001CC0000011241FBECFEFD2E068 +:2030A000DEBFCDBF11E0A0E0B1E0E4EBFCE302C005900D92A836B107D9F711E0A8E6B1E0CB +:2030C00001C01D92A738B107E1F74FD3F1C598CF982F15C08091F200882371F48091E8002A +:2030E0008B7F8093E80003C08EB3882351F08091E80082FFF9CF02C08091F1009150992338 +:2031000049F708952091760130917501809174019091730180936D0190936E01C901809368 +:203120006F0190937001089580917101843009F45AC0853030F4813059F0833009F0C3C09E +:203140001FC0853009F4A0C0863009F0BCC0AFC080917201823008F0B6C0D4DF8091720109 +:20316000882361F480916D0190916E0123E0FC0120935700E89507B600FCFDCF85E008C007 +:2031800080917201882311F0823029F4BBDF89E0809301010895813009F095C020E030E06C +:2031A00040E050E0F90184918F3F81F0CA01AA27BB2780936C0130936E0120936D018AE0B6 +:2031C0008093010185E08093690108952F5F3F4F4F4F5F4F2030F0E33F07F0E04F07F0E094 +:2031E0005F0701F7089580917201833051F581E0809368018091770190917801892B71F042 +:2032000080917301813009F05EC0809176019091750190936B0180936A0108958091730113 +:20322000882361F42CE088E190E00FB6F894A895809360000FBE2093600008951092000188 +:203240000895882309F03FC0809173018F3F09F03AC0E0E0F0E093E085E090935700E89589 +:2032600007B600FCFDCF80935700E89507B600FCFDCFE058FF4F20E3E030F20771F781E101 +:2032800080935700E8950895E091730180917201882321F4F0E0EB5FFE4F05C0813099F417 +:2032A000F0E0EE52FF4F808180937C01089580917201833041F480917301882321F48091C0 +:2032C000740180936C0108952F923F924F925F926F927F929F92AF92BF92CF92DF92EF92D0 +:2032E000FF920F931F93CF93DF938091850190918601909378018093770180917901882379 +:2033000051F08091790181508093790180917901882309F45D9A80917A01882351F08091D0 +:203320007A01815080937A0180917A01882309F45C9A80918001833009F4B2C1843030F4FC +:20334000813071F0823009F0E3C111C1853009F4C5C1853008F4BAC1863009F0D9C1CDC1FF +:203360005C9883E080937A018091E800877F8093E80080916801882329F0D6DE5D9A5C9A8F +:203380001092680120917701309178012115310529F42AC08EB3882309F4BAC18091E800EF +:2033A00082FFF8CF8091F10080937101215030403093780120937701E2E7F1E00CC080917F +:2033C000F10081932150304081E0E737F80719F43183208308C08091F200882381F7309374 +:2033E000780120937701A0DE80910101853009F0BAC08091770190917801892B21F482E022 +:2034000080930101B0C08AE163DE80916D018F715FDEC0916F01D091700120916D0130914C +:203420006E0121968E01021B130B219780917201882309F093C0180136942794C901A091D0 +:203440006C01B0E09C01AD0162E0E62EF12C012D112DE20EF31E041F151F59016A0190E0B8 +:2034600099249394B5E0A3E048C08091F200882371F48091E8008B7F8093E80004C08EB332 +:20348000882309F445C18091E80082FFF8CF0894210831088091F100682F8091F100782FFD +:2034A000F5010B0190925700E89511249F5F903419F021143104A1F4F901B0935700E89504 +:2034C00007B600FCFDCF2114310451F0F701A0935700E89507B600FCFDCFA801970190E087 +:2034E00042E0442E512C612C712CE40CF51C061D171DA40CB51CC61CD71C2114310409F080 +:20350000B4CFD0936E01C0936D0181E180935700E89527C08091F200882371F48091E80059 +:203520008B7F8093E80004C08EB3882309F4F0C08091E80082FFF8CF6091F10080916D0187 +:2035400090916E01A7D380916D0190916E01019690936E0180936D010150104001151105DB +:20356000C9F680E1B5DD8091E8008B7FC3C08091E800877F8093E8005D9883E08093790134 +:2035800004C08EB3882309F4C3C08091E80080FFF8CF80910101893091F08A3069F4809147 +:2035A0007201813049F480916D0190916E018093F1009093F1009BC080917C0196C0609153 +:2035C0006F017091700120916D0130916E016F5F7F4F7B01E21AF30A6150704080917201C4 +:2035E000882389F5870116950795C901A0916C01B0E09C01AD011FC08091F200803271F497 +:203600008091E8008E7F8093E80004C08EB3882309F47EC08091E80080FFF8CFF90185916F +:2036200094918093F1009093F100015010402E5F3F4F4F4F5F4F01151105F1F670936E01C0 +:2036400060936D0129C0823039F523C08091F200803271F48091E8008E7F8093E80004C07E +:203660008EB3882309F454C08091E80080FFF8CF00916D0110916E01C80104D38093F1005B +:203680000F5F1F4F10936E0100936D010894E108F108E114F104D1F682E08093010127C0AE +:2036A0008091E800877F8093E800809169018093F1001092F1001092F1001092F1008091C7 +:2036C00001018093F1001092F10011C08091E800877F8093E8001092690119C08091E800A8 +:2036E000877F8093E800809101018093F1008091E8008E7F8093E8000AC08091E800877FE8 +:203700008093E8005D9A5C9A82E08093010187D0DF91CF911F910F91FF90EF90DF90CF90F7 +:20372000BF90AF909F907F906F905F904F903F902F9008952BD181E085BF15BE089584B779 +:20374000877F84BF88E10FB6F89480936000109260000FBE81E085BF82E085BF8AB18063BB +:203760008AB98BB180638BB90CC1E9DF789401C080D2809100018823D9F78091680188233D +:20378000B9F7D8DFE0916A01F0916B010995FA01923071F0933089F0913029F488E091E04A +:2037A00022E130E019C080E090E020E030E014C08AE191E02BE130E00FC0882339F48091B9 +:2037C0003501282F30E085E391E006C080913901282F30E089E391E091838083C9010895A0 +:2037E0008091EB0081608093EB001092ED006093EC004093ED008091EE00881F8827881FC4 +:2038000008951092F4001092F0001092E8001092ED00EBEEF0E080818E7F80830895809162 +:203820007F0188238CF403C08EB38823B1F08091E80082FFF9CF8091E8008B7F8093E8004D +:2038400008958EB3882349F08091E80080FFF9CF8091E8008E7F8093E80008959C0140915A +:203860008501509186014617570718F4F90120E038C06115710511F0AB01F8CF8091E80048 +:203880008E7F8093E80040E050E0F0CF8091E80083FF02C081E008958091E80082FD2DC071 +:2038A0008EB3882381F18EB3853079F18091E80080FF17C09091F20006C081918093F1000C +:2038C000415050409F5F4115510511F09032A8F320E0903209F421E08091E8008E7F8093E6 +:2038E000E8004115510591F6222381F606C08EB3882349F08EB3853041F08091E80082FF65 +:20390000F6CF80E0089582E0089583E0089554D056D01EBA10927D0184E089BD89B58260DA +:2039200089BD09B400FEFDCF8091D800982F9F779093D80080688093D800809163008E7FA5 +:20394000809363008091D8008F7D8093D8008091E0008E7F8093E0008091E1008E7F80930E +:20396000E1008091E20081608093E2008091E100877F8093E1008091E20088608093E200E1 +:203980000895C5DF81E080937E010895C0DFE0EEF0E0808181608083E8EDF0E080818F7788 +:2039A00080830AD00CD019BCE3E6F0E080818160808310927E0108951092E200089510927A +:2039C000E10008951F920F920FB60F9211242F933F934F935F936F937F938F939F93AF936A +:2039E000BF93EF93FF938091E10080FF1BC08091E20080FF17C08091E1008E7F8093E100D9 +:203A00008091E2008E7F8093E2008091E20080618093E2008091D80080628093D80019BC5D +:203A20001EBA26D18091E10084FF29C08091E20084FF25C084E089BD89B5826089BD09B431 +:203A400000FEFDCF8091D8008F7D8093D8008091E1008F7E8093E1008091E2008F7E8093B6 +:203A6000E2008091E20081608093E20080917D01882311F481E001C084E08EBBF9D08091B3 +:203A8000E10083FF22C08091E20083FF1EC08091E100877F8093E10082E08EBB10927D01D7 +:203AA0008091E1008E7F8093E1008091E2008E7F8093E2008091E20080618093E200A1DED6 +:203AC00080E060E042E28CDED3D08091E10082FF0AC08091E20082FF06C08091E1008B7FA2 +:203AE0008093E100C5D0FF91EF91BF91AF919F918F917F916F915F914F913F912F910F903E +:203B00000FBE0F901F9018951F93DF93CF9300D0CDB7DEB7EFE7F1E08091F100819381E050 +:203B2000E738F807C9F790917F0180918001853011F1863040F48130B9F0813070F08330B5 +:203B400009F081C011C0883009F453C0893009F462C0863009F077C02DC0903809F474C0EE +:203B6000923809F070C070C0992309F46DC0923009F069C069C0992309F065C01091810132 +:203B80008091E800877F8093E80049DE04C08EB3882309F459C08091E80080FFF8CF812F4F +:203BA0008F7711F492E001C093E09EBB80688093E3004AC09058923008F045C080918101D9 +:203BC0009091820160918301AE014F5F5F4FDFDDBC010097C9F18091E800877F8093E800FD +:203BE00089819A813BDE8091E8008B7F8093E8002BC0903841F58091E800877F8093E800A6 +:203C000080917D018093F1008091E8008E7F8093E80005DE19C09923B1F49091810192308E +:203C200098F48091E800877F8093E80090937D01F6DD80917D01882311F483E001C084E0C3 +:203C40008EBB16D001C040DB8091E80083FF0AC08091EB0080628093EB008091E800877F39 +:203C60008093E8000F900F90CF91DF911F91089508958EB3882329F08091E80083FF01C010 +:203C800043CF0895F999FECF92BD81BDF89A992780B50895262FF999FECF1FBA92BD81BD4B +:203CA00020BD0FB6F894FA9AF99A0FBE01960895F894FFCF01021E948920DCFB12011001FB +:203CC00000000020EB03EF2F00000001000109021B0001010080320904000000FE010200CE +:203CE0000921030000000C0001040309042C03410054006D0065006700610031003600555C +:1C3D00000032002000440046005500200020002000200020002000200000000096 +:00000001FF diff --git a/external/arduino/avr/firmwares/atmegaxxu2/Genuino-COMBINED-dfu-usbserial-atmega16u2-Uno-R3.hex b/external/arduino/avr/firmwares/atmegaxxu2/Genuino-COMBINED-dfu-usbserial-atmega16u2-Uno-R3.hex new file mode 100644 index 000000000..a6fe19413 --- /dev/null +++ b/external/arduino/avr/firmwares/atmegaxxu2/Genuino-COMBINED-dfu-usbserial-atmega16u2-Uno-R3.hex @@ -0,0 +1,490 @@ +:2000000098C00000B1C00000AFC00000ADC00000ABC00000A9C00000A7C00000A5C000009B +:20002000A3C00000A1C000009FC00000F6C300009BC4000099C0000097C0000095C0000080 +:2000400093C0000091C000008FC000008DC000008BC0000089C0000087C00000C0C1000004 +:2000600083C0000081C000007FC000007DC000007BC00000100532051C0632051C06740505 +:2000800091051C06E405F6051803470065006E00750069006E006F00200055006E006F0082 +:2000A00000003A03410072006400750069006E006F0020004C004C00430020002800770077 +:2000C000770077002E00610072006400750069006E006F002E0063006300290000000403EE +:2000E000090409023E00020100C03209040000010202010005240001100424020605240609 +:200100000001070582030800FF09040100020A000000070504024000010705830240000107 +:2001200012011001020000084123430201000102DC0111241FBECFEFD2E0DEBFCDBF11E06B +:20014000A0E0B1E0E2E4FFE002C005900D92A631B107D9F712E0A6E1B1E001C01D92AF3239 +:20016000B107E1F764D0EBC64BCFFC01E058FF4FA081B1816C93A081B1819D012F5F3F4F0E +:20018000318320832E173F0721F412969C938E9311972FB7F894FC01EC57FF4F80818F5FD9 +:2001A00080832FBF0895DC01AE57BF4FED91FC91119741911196FC93EE939C0120583F4FE2 +:2001C000E217F30711F48D939C932FB7F894FC01EC57FF4F9081915090832FBF842F089595 +:2001E00084B7877F84BF88E10FB6F89480936000109260000FBE87E690E09093CD0080939F +:20020000CC0086E08093CA001092C80088E18093C900539A5A9A8AB180638AB98BB18063BF +:200220008BB9F0D284E085BD5F9A579A0895D8DF2FB7F8948EE991E090931F0280931E0203 +:2002400090932102809320022FBF2FB7F89489E191E090939A018093990190939C018093AA +:200260009B012FBF7894D3E09FB7F894809122029FBF803849F080E091E00ED697FD04C0C2 +:20028000682F8EE991E071DF8FB7F894C0919D018FBFA89902C0C13658F1A89A80919D014C +:2002A000882319F05D98D0931601CC2349F089E191E079DF682F80E091E093D5C150F5CF1B +:2002C00080911601882341F080911601815080931601811101C05D9A80911701882341F0A8 +:2002E00080911701815080931701811101C05C9A9FB7F894809122029FBF882361F08EE9A8 +:2003000091E051DF9091C80095FFFCCF8093CE005C98D093170180E091E0B0D59AD4A4CF6D +:2003200080E091E011C580E091E0A5C41F93CF93DF93EC018C89813031F0823011F010E0DF +:2003400003C010E201C010E38B89823009F418608D89873031F0883031F0863029F41260ED +:2003600003C0146001C016601092C9001092C8001092CA002F85388949895A89211581EEFF +:2003800038074105510571F0CA01B901969587957795679560587B47814E9F4FA8D5215028 +:2003A000310902C020E130E03093CD002093CC001093CA008F859889A989BA898115914E95 +:2003C000A105B10511F480E001C082E08093C80088E98093C900DF91CF911F9108951F9243 +:2003E0000F920FB60F9211242F933F934F935F936F937F938F939F93AF93BF93EF93FF9349 +:200400006091CE008EB3843019F489E191E0ADDEFF91EF91BF91AF919F918F917F916F91B5 +:200420005F914F913F912F910F900FBE0F901F901895FC01858580FF02C05F9808955F9A20 +:200440000895292F33272230310559F02330310569F021303105F9F482E190E020E231E040 +:200460001EC08EE390E022EE30E019C099278130910541F08230910541F0892B61F4EEED2F +:20048000F0E005C0E2EAF0E002C0E8E8F0E0849190E09F0104C080E090E020E030E0FA0105 +:2004A00031832083089528E030E040E02817390720F44F5F220F331FF9CF842F8295807FBB +:2004C00008958093E900EBEEF0E0808181608083EDEEF0E010826093EC0040838091EE0017 +:2004E000881F8827881F08951092F40080E08093E9001092F0001092E8001092ED009091A4 +:20050000EB009E7F9093EB008F5F853081F708958091270287FD05C08091E80080FF0DC045 +:2005200010C08091E80082FD04C08EB38111F9CF08958091E8008B7707C08EB38111ECCF27 +:2005400008958091E8008E778093E800089585E69091EC0090FF05C09091E80090FF05C03F +:200560001BC09091E80092FD17C09EB39923B1F09EB39530A9F09091EB0095FD13C0909142 +:20058000E10092FFE5CF9091E1009B7F9093E1008150F1F684E0089580E0089582E0089560 +:2005A00083E0089581E0089520912D0230912E022617370748F06115710539F42091E80007 +:2005C0002E772093E80001C0B90130E06115710591F12091E80023FD38C02091E80022FF77 +:2005E00006C08091E80082FF29C080E008952EB3222369F12EB3253061F12091E80020FF15 +:20060000E5CF2091F200FC01CF016115710549F0283038F481918093F100615071092F5F3E +:20062000F3CF31E0283009F030E02091E8002E772093E800CBCF3111CCCFD3CF8EB38823A8 +:2006400031F08EB3853069F604C081E0089582E0089583E0089520912D0230912E02261755 +:20066000370748F06115710539F42091E8002E772093E80001C0B90130E06115710599F111 +:200680002091E80023FD39C02091E80022FF06C08091E80082FF2AC080E008952EB32223A1 +:2006A00071F12EB3253069F12091E80020FFE5CF2091F200FC01CF016115710551F02830E7 +:2006C00040F484918093F100615071092F5F3196F2CF31E0283009F030E02091E8002E77DC +:2006E0002093E800CACF3111CBCFD2CF8EB3882331F08EB3853061F604C081E0089582E0CB +:20070000089583E008956115710529F42091E8002B772093E8006115710549F12091E8009E +:2007200023FD2AC02EB3222359F12EB3253051F12091E80022FFF2CFFC018091F2008823A1 +:2007400071F09F012F5F3F4FC9014091F10040836150710961157105C9F2F901EECFCF01D4 +:20076000D5CF8EB3882361F08EB3853059F08091E80080FFF6CF02C081E0089580E008955F +:2007800082E0089583E0089542D044D01EBA10922502109224021092230284E089BD89B51C +:2007A000826089BD09B400FEFDCF8091D800982F9F779093D80080688093D8008091630082 +:2007C0008E7F809363008091D8008F7D8093D8008091E0008E7F8093E0008091E1008E7FC6 +:2007E0008093E1008091E20081608093E2008091E100877F8093E1008091E2008860809362 +:20080000E2000895C1DF81E08093260208951092E20008951092E10008951F920F920FB628 +:200820000F9211242F933F934F935F936F937F938F939F93AF93BF93EF93FF938091E10078 +:2008400080FF1BC08091E20080FF17C08091E1008E7F8093E1008091E2008E7F8093E2000D +:200860008091E20080618093E2008091D80080628093D80019BC1EBAEBD18091E10084FF1B +:2008800029C08091E20084FF25C084E089BD89B5826089BD09B400FEFDCF8091D8008F7D88 +:2008A0008093D8008091E1008F7E8093E1008091E2008F7E8093E2008091E200816080937E +:2008C000E20080912502882311F084E001C081E08EBBBED18091E10083FF27C08091E200A6 +:2008E00083FF23C08091E100877F8093E10082E08EBB109225028091E1008E7F8093E10040 +:200900008091E2008E7F8093E2008091E20080618093E200E9DD42E060E080E0D2DD8091D1 +:20092000F00088608093F00093D18091E10082FF0AC08091E20082FF06C08091E1008B7F05 +:200940008093E10085D1FF91EF91BF91AF919F918F917F916F915F914F913F912F910F904E +:200960000FBE0F901F9018951F920F920FB60F9211242F933F934F935F936F937F938F9324 +:200980009F93AF93BF93CF93EF93FF93E9EEF0E0C081C7701082E0EFF0E08081877F8083C1 +:2009A00078941CD0F894E9EEF0E01082A0EFB0E08C9188608C93C083FF91EF91CF91BF9134 +:2009C000AF919F918F917F916F915F914F913F912F910F900FBE0F901F9018951F93CF939C +:2009E000DF93CDB7DEB7AA970FB6F894DEBF0FBECDBFE7E2F2E08091F100819322E0EF3210 +:200A0000F207C9F72091270230912802832F90E08A30910508F010C1FC01E65CFF4F89C245 +:200A2000203881F0223809F007C180912B0287708093E9008091EB0085FB882780F910925B +:200A4000E90006C08091230290912402911182609091E800977F9093E8008093F100109216 +:200A6000F100BDC0822F8D7F09F0E6C0222319F0223061F0D2C080912902813009F0CDC0B6 +:200A8000333009F080E08093240228C080912902811124C020912B02277009F4BEC0209324 +:200AA000E9008091EB0080FFB8C08091EB00333011F4806211C080618093EB0081E090E093 +:200AC000022E01C0880F0A94EAF78093EA001092EA008091EB0088608093EB001092E90019 +:200AE0008091E800877F7EC02111A6C0109129028091E800877F8093E8000ADD8091E8007B +:200B000080FD04C08EB38111F9CF87C0812F8F7711F093E001C092E09EBB80688093E3001E +:200B20007CC02058223008F087C08091290290912A028C3D23E0920781F583E08A838AE230 +:200B400089834FB7F894DE01139620E03EE051E2E32FF0E050935700E49120FF03C0E29534 +:200B6000EF703F5FEF7090E39E0F9A3310F0E95C01C0E92F8E2F90E08D939D932F5F2431AE +:200B800039F74FBF8091E800877F8093E8006AE270E0CE01019608DD11C0AE014F5F5F4F5A +:200BA00060912B024EDC0097C1F12091E800277F2093E800BC0189819A814DDD8091E800C5 +:200BC0008B778093E80029C02038B1F58091E800877F8093E800809125028093F1008091EA +:200BE000E8008E778093E80093DC17C0211124C090912902923088F48091E800877F809315 +:200C0000E8009093250284DC80912502882311F084E001C083E08EBB83DB8091E80083FFB4 +:200C20000DC08091EB0080628093EB008091E800877F8093E80002C076DBEFCFAA960FB63B +:200C4000F894DEBF0FBECDBFDF91CF911F9108950895CF938EB3882359F0C091E900C77050 +:200C60001092E9008091E80083FDB8DEC093E900CF9108950895CF93DF93EC018091E8004A +:200C800083FF5FC0888190E020912B0230912C022817390709F055C080912802813249F0B9 +:200CA00018F48032C9F04DC0823261F18332C9F148C080912702813A09F043C08091E80049 +:200CC000877F8093E80067E070E0CE010F966CDC8091E8008B7713C080912702813289F587 +:200CE0008091E800877F8093E80067E070E0CE010F9609DDCE011ADB8091E8008E77809334 +:200D0000E8001FC0809127028132D9F48091E800877F8093E800809129028D87CE0189DBD5 +:200D20000DC080912702813261F48091E800877F8093E80060912902CE019CDFDF91CF9174 +:200D4000E7CBDF91CF9108950F931F93CF93DF93EC01FC013D9689E0DF011D928A95E9F798 +:200D60002A813B818C81882311F014E001C010E00981C90198DB412F482B426061E8802F6A +:200D8000A0DB882341F12E813F818885882311F014E001C010E00D81C90185DB412F482B93 +:200DA000426060E8802F8DDB8823A9F02A853B858C85882311F014E001C010E0C985C90105 +:200DC00072DB412F482B426061EC8C2FDF91CF911F910F9176CB80E0DF91CF911F910F9158 +:200DE0000895CF93C62F2EB32430E9F4FC014785508961897289452B462B472BA1F0818180 +:200E00008093E9008091E80085FF04C0C093F10080E00AC08091E8008E778093E80097DBBC +:200E20008823A1F301C082E0CF9108952EB3243019F5FC014785508961897289452B462BA8 +:200E4000472BD1F081818093E9008091F200882389F09091E8008091E8008E778093E80038 +:200E600095FD08C074DB811108C08091E8008E778093E80080E0089582E008952EB3243045 +:200E800051F4FC014785508961897289452B462B472B09F0CBCF08952EB3243019F08FEF47 +:200EA0009FEF0895FC014785508961897289452B462B472BA1F385818093E9008091E8009E +:200EC00082FFEDCF8091F200882321F02091F10030E002C02FEF3FEF8091F200811105C0FC +:200EE0008091E8008B778093E800C9010895A1E21A2EAA1BBB1BFD010DC0AA1FBB1FEE1FB4 +:200F0000FF1FA217B307E407F50720F0A21BB30BE40BF50B661F771F881F991F1A9469F757 +:200F200060957095809590959B01AC01BD01CF010895EE0FFF1F0590F491E02D0994F8949E +:200F4000FFCF00034000000440000002080000000000000000000000FFFFFFFFFFFFFFFF3A +:200F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF91 +:200F800020F0A21BB30BE40BF50B661F771F881F991F1A9469F760957095809590959B017F +:200FA000AC01BD01CF010895F894FFCF00034000000440000002080000000000000000006E +:200FC0000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F +:200FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF11 +:20100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 +:20102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0 +:20104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0 +:20106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90 +:20108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70 +:2010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50 +:2010C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30 +:2010E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF10 +:20110000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF +:20112000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF +:20114000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF +:20116000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F +:20118000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F +:2011A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F +:2011C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F +:2011E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F +:20120000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEE +:20122000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE +:20124000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAE +:20126000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E +:20128000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E +:2012A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4E +:2012C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E +:2012E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E +:20130000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED +:20132000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCD +:20134000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD +:20136000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D +:20138000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6D +:2013A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4D +:2013C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2D +:2013E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D +:20140000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC +:20142000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCC +:20144000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAC +:20146000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8C +:20148000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C +:2014A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C +:2014C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C +:2014E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0C +:20150000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEB +:20152000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCB +:20154000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAB +:20156000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8B +:20158000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6B +:2015A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4B +:2015C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2B +:2015E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B +:20160000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA +:20162000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCA +:20164000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAA +:20166000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8A +:20168000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A +:2016A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4A +:2016C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A +:2016E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A +:20170000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9 +:20172000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9 +:20174000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9 +:20176000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF89 +:20178000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF69 +:2017A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF49 +:2017C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF29 +:2017E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF09 +:20180000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8 +:20182000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC8 +:20184000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA8 +:20186000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF88 +:20188000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF68 +:2018A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF48 +:2018C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF28 +:2018E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF08 +:20190000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7 +:20192000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7 +:20194000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA7 +:20196000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87 +:20198000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF67 +:2019A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF47 +:2019C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF27 +:2019E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07 +:201A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6 +:201A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC6 +:201A4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA6 +:201A6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF86 +:201A8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF66 +:201AA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF46 +:201AC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF26 +:201AE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF06 +:201B0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5 +:201B2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC5 +:201B4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5 +:201B6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF85 +:201B8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF65 +:201BA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF45 +:201BC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF25 +:201BE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05 +:201C0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4 +:201C2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4 +:201C4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA4 +:201C6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF84 +:201C8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF64 +:201CA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF44 +:201CC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF24 +:201CE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04 +:201D0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3 +:201D2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC3 +:201D4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA3 +:201D6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF83 +:201D8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF63 +:201DA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF43 +:201DC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF23 +:201DE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03 +:201E0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2 +:201E2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC2 +:201E4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA2 +:201E6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF82 +:201E8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF62 +:201EA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF42 +:201EC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF22 +:201EE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02 +:201F0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 +:201F2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC1 +:201F4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA1 +:201F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF81 +:201F8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF61 +:201FA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF41 +:201FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF21 +:201FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01 +:20200000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 +:20202000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 +:20204000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0 +:20206000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 +:20208000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60 +:2020A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40 +:2020C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20 +:2020E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +:20210000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF +:20212000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF +:20214000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F +:20216000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F +:20218000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F +:2021A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F +:2021C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F +:2021E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +:20220000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDE +:20222000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBE +:20224000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9E +:20226000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7E +:20228000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E +:2022A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E +:2022C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E +:2022E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE +:20230000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDD +:20232000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBD +:20234000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9D +:20236000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7D +:20238000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D +:2023A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D +:2023C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D +:2023E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD +:20240000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC +:20242000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBC +:20244000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9C +:20246000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C +:20248000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5C +:2024A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3C +:2024C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C +:2024E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC +:20250000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB +:20252000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBB +:20254000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9B +:20256000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7B +:20258000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B +:2025A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B +:2025C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1B +:2025E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB +:20260000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDA +:20262000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBA +:20264000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A +:20266000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7A +:20268000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5A +:2026A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3A +:2026C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1A +:2026E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA +:20270000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9 +:20272000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB9 +:20274000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99 +:20276000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF79 +:20278000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF59 +:2027A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF39 +:2027C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF19 +:2027E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9 +:20280000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8 +:20282000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB8 +:20284000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF98 +:20286000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF78 +:20288000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF58 +:2028A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF38 +:2028C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF18 +:2028E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8 +:20290000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7 +:20292000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB7 +:20294000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF97 +:20296000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77 +:20298000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF57 +:2029A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF37 +:2029C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF17 +:2029E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7 +:202A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6 +:202A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB6 +:202A4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF96 +:202A6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF76 +:202A8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF56 +:202AA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF36 +:202AC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF16 +:202AE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6 +:202B0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD5 +:202B2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5 +:202B4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF95 +:202B6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF75 +:202B8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF55 +:202BA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF35 +:202BC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF15 +:202BE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5 +:202C0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4 +:202C2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB4 +:202C4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF94 +:202C6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF74 +:202C8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF54 +:202CA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF34 +:202CC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF14 +:202CE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4 +:202D0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3 +:202D2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB3 +:202D4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF93 +:202D6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF73 +:202D8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF53 +:202DA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF33 +:202DC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF13 +:202DE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3 +:202E0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD2 +:202E2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB2 +:202E4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF92 +:202E6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72 +:202E8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF52 +:202EA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF32 +:202EC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF12 +:202EE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2 +:202F0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD1 +:202F2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB1 +:202F4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF91 +:202F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF71 +:202F8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF51 +:202FA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF31 +:202FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF11 +:202FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1 +:203000004BC0000064C0000062C0000060C000005EC000005CC000005AC0000058C00000D3 +:2030200056C0000054C0000052C00000CBC400004EC000004CC000004AC0000048C0000099 +:2030400046C0000044C0000042C0000040C000003EC000003CC000003AC0000038C0000078 +:2030600036C0000034C0000032C0000030C000002EC000002CC000002AC0000028C00000D8 +:2030800026C0000024C0000022C0000020C000001EC000001CC0000011241FBECFEFD2E068 +:2030A000DEBFCDBF11E0A0E0B1E0E4EBFCE302C005900D92A836B107D9F711E0A8E6B1E0CB +:2030C00001C01D92A738B107E1F74FD3F1C598CF982F15C08091F200882371F48091E8002A +:2030E0008B7F8093E80003C08EB3882351F08091E80082FFF9CF02C08091F1009150992338 +:2031000049F708952091760130917501809174019091730180936D0190936E01C901809368 +:203120006F0190937001089580917101843009F45AC0853030F4813059F0833009F0C3C09E +:203140001FC0853009F4A0C0863009F0BCC0AFC080917201823008F0B6C0D4DF8091720109 +:20316000882361F480916D0190916E0123E0FC0120935700E89507B600FCFDCF85E008C007 +:2031800080917201882311F0823029F4BBDF89E0809301010895813009F095C020E030E06C +:2031A00040E050E0F90184918F3F81F0CA01AA27BB2780936C0130936E0120936D018AE0B6 +:2031C0008093010185E08093690108952F5F3F4F4F4F5F4F2030F0E33F07F0E04F07F0E094 +:2031E0005F0701F7089580917201833051F581E0809368018091770190917801892B71F042 +:2032000080917301813009F05EC0809176019091750190936B0180936A0108958091730113 +:20322000882361F42CE088E190E00FB6F894A895809360000FBE2093600008951092000188 +:203240000895882309F03FC0809173018F3F09F03AC0E0E0F0E093E085E090935700E89589 +:2032600007B600FCFDCF80935700E89507B600FCFDCFE058FF4F20E3E030F20771F781E101 +:2032800080935700E8950895E091730180917201882321F4F0E0EB5FFE4F05C0813099F417 +:2032A000F0E0EE52FF4F808180937C01089580917201833041F480917301882321F48091C0 +:2032C000740180936C0108952F923F924F925F926F927F929F92AF92BF92CF92DF92EF92D0 +:2032E000FF920F931F93CF93DF938091850190918601909378018093770180917901882379 +:2033000051F08091790181508093790180917901882309F45D9A80917A01882351F08091D0 +:203320007A01815080937A0180917A01882309F45C9A80918001833009F4B2C1843030F4FC +:20334000813071F0823009F0E3C111C1853009F4C5C1853008F4BAC1863009F0D9C1CDC1FF +:203360005C9883E080937A018091E800877F8093E80080916801882329F0D6DE5D9A5C9A8F +:203380001092680120917701309178012115310529F42AC08EB3882309F4BAC18091E800EF +:2033A00082FFF8CF8091F10080937101215030403093780120937701E2E7F1E00CC080917F +:2033C000F10081932150304081E0E737F80719F43183208308C08091F200882381F7309374 +:2033E000780120937701A0DE80910101853009F0BAC08091770190917801892B21F482E022 +:2034000080930101B0C08AE163DE80916D018F715FDEC0916F01D091700120916D0130914C +:203420006E0121968E01021B130B219780917201882309F093C0180136942794C901A091D0 +:203440006C01B0E09C01AD0162E0E62EF12C012D112DE20EF31E041F151F59016A0190E0B8 +:2034600099249394B5E0A3E048C08091F200882371F48091E8008B7F8093E80004C08EB332 +:20348000882309F445C18091E80082FFF8CF0894210831088091F100682F8091F100782FFD +:2034A000F5010B0190925700E89511249F5F903419F021143104A1F4F901B0935700E89504 +:2034C00007B600FCFDCF2114310451F0F701A0935700E89507B600FCFDCFA801970190E087 +:2034E00042E0442E512C612C712CE40CF51C061D171DA40CB51CC61CD71C2114310409F080 +:20350000B4CFD0936E01C0936D0181E180935700E89527C08091F200882371F48091E80059 +:203520008B7F8093E80004C08EB3882309F4F0C08091E80082FFF8CF6091F10080916D0187 +:2035400090916E01A7D380916D0190916E01019690936E0180936D010150104001151105DB +:20356000C9F680E1B5DD8091E8008B7FC3C08091E800877F8093E8005D9883E08093790134 +:2035800004C08EB3882309F4C3C08091E80080FFF8CF80910101893091F08A3069F4809147 +:2035A0007201813049F480916D0190916E018093F1009093F1009BC080917C0196C0609153 +:2035C0006F017091700120916D0130916E016F5F7F4F7B01E21AF30A6150704080917201C4 +:2035E000882389F5870116950795C901A0916C01B0E09C01AD011FC08091F200803271F497 +:203600008091E8008E7F8093E80004C08EB3882309F47EC08091E80080FFF8CFF90185916F +:2036200094918093F1009093F100015010402E5F3F4F4F4F5F4F01151105F1F670936E01C0 +:2036400060936D0129C0823039F523C08091F200803271F48091E8008E7F8093E80004C07E +:203660008EB3882309F454C08091E80080FFF8CF00916D0110916E01C80104D38093F1005B +:203680000F5F1F4F10936E0100936D010894E108F108E114F104D1F682E08093010127C0AE +:2036A0008091E800877F8093E800809169018093F1001092F1001092F1001092F1008091C7 +:2036C00001018093F1001092F10011C08091E800877F8093E8001092690119C08091E800A8 +:2036E000877F8093E800809101018093F1008091E8008E7F8093E8000AC08091E800877FE8 +:203700008093E8005D9A5C9A82E08093010187D0DF91CF911F910F91FF90EF90DF90CF90F7 +:20372000BF90AF909F907F906F905F904F903F902F9008952BD181E085BF15BE089584B779 +:20374000877F84BF88E10FB6F89480936000109260000FBE81E085BF82E085BF8AB18063BB +:203760008AB98BB180638BB90CC1E9DF789401C080D2809100018823D9F78091680188233D +:20378000B9F7D8DFE0916A01F0916B010995FA01923071F0933089F0913029F488E091E04A +:2037A00022E130E019C080E090E020E030E014C08AE191E02BE130E00FC0882339F48091B9 +:2037C0003501282F30E085E391E006C080913901282F30E089E391E091838083C9010895A0 +:2037E0008091EB0081608093EB001092ED006093EC004093ED008091EE00881F8827881FC4 +:2038000008951092F4001092F0001092E8001092ED00EBEEF0E080818E7F80830895809162 +:203820007F0188238CF403C08EB38823B1F08091E80082FFF9CF8091E8008B7F8093E8004D +:2038400008958EB3882349F08091E80080FFF9CF8091E8008E7F8093E80008959C0140915A +:203860008501509186014617570718F4F90120E038C06115710511F0AB01F8CF8091E80048 +:203880008E7F8093E80040E050E0F0CF8091E80083FF02C081E008958091E80082FD2DC071 +:2038A0008EB3882381F18EB3853079F18091E80080FF17C09091F20006C081918093F1000C +:2038C000415050409F5F4115510511F09032A8F320E0903209F421E08091E8008E7F8093E6 +:2038E000E8004115510591F6222381F606C08EB3882349F08EB3853041F08091E80082FF65 +:20390000F6CF80E0089582E0089583E0089554D056D01EBA10927D0184E089BD89B58260DA +:2039200089BD09B400FEFDCF8091D800982F9F779093D80080688093D800809163008E7FA5 +:20394000809363008091D8008F7D8093D8008091E0008E7F8093E0008091E1008E7F80930E +:20396000E1008091E20081608093E2008091E100877F8093E1008091E20088608093E200E1 +:203980000895C5DF81E080937E010895C0DFE0EEF0E0808181608083E8EDF0E080818F7788 +:2039A00080830AD00CD019BCE3E6F0E080818160808310927E0108951092E200089510927A +:2039C000E10008951F920F920FB60F9211242F933F934F935F936F937F938F939F93AF936A +:2039E000BF93EF93FF938091E10080FF1BC08091E20080FF17C08091E1008E7F8093E100D9 +:203A00008091E2008E7F8093E2008091E20080618093E2008091D80080628093D80019BC5D +:203A20001EBA26D18091E10084FF29C08091E20084FF25C084E089BD89B5826089BD09B431 +:203A400000FEFDCF8091D8008F7D8093D8008091E1008F7E8093E1008091E2008F7E8093B6 +:203A6000E2008091E20081608093E20080917D01882311F481E001C084E08EBBF9D08091B3 +:203A8000E10083FF22C08091E20083FF1EC08091E100877F8093E10082E08EBB10927D01D7 +:203AA0008091E1008E7F8093E1008091E2008E7F8093E2008091E20080618093E200A1DED6 +:203AC00080E060E042E28CDED3D08091E10082FF0AC08091E20082FF06C08091E1008B7FA2 +:203AE0008093E100C5D0FF91EF91BF91AF919F918F917F916F915F914F913F912F910F903E +:203B00000FBE0F901F9018951F93DF93CF9300D0CDB7DEB7EFE7F1E08091F100819381E050 +:203B2000E738F807C9F790917F0180918001853011F1863040F48130B9F0813070F08330B5 +:203B400009F081C011C0883009F453C0893009F462C0863009F077C02DC0903809F474C0EE +:203B6000923809F070C070C0992309F46DC0923009F069C069C0992309F065C01091810132 +:203B80008091E800877F8093E80049DE04C08EB3882309F459C08091E80080FFF8CF812F4F +:203BA0008F7711F492E001C093E09EBB80688093E3004AC09058923008F045C080918101D9 +:203BC0009091820160918301AE014F5F5F4FDFDDBC010097C9F18091E800877F8093E800FD +:203BE00089819A813BDE8091E8008B7F8093E8002BC0903841F58091E800877F8093E800A6 +:203C000080917D018093F1008091E8008E7F8093E80005DE19C09923B1F49091810192308E +:203C200098F48091E800877F8093E80090937D01F6DD80917D01882311F483E001C084E0C3 +:203C40008EBB16D001C040DB8091E80083FF0AC08091EB0080628093EB008091E800877F39 +:203C60008093E8000F900F90CF91DF911F91089508958EB3882329F08091E80083FF01C010 +:203C800043CF0895F999FECF92BD81BDF89A992780B50895262FF999FECF1FBA92BD81BD4B +:203CA00020BD0FB6F894FA9AF99A0FBE01960895F894FFCF01021E948920DCFB12011001FB +:203CC00000000020EB03EF2F00000001000109021B0001010080320904000000FE010200CE +:203CE0000921030000000C0001040309042C03410054006D0065006700610031003600555C +:1C3D00000032002000440046005500200020002000200020002000200000000096 +:00000001FF diff --git a/external/arduino/avr/firmwares/atmegaxxu2/MEGA-dfu_and_usbserial_combined.hex b/external/arduino/avr/firmwares/atmegaxxu2/MEGA-dfu_and_usbserial_combined.hex new file mode 100644 index 000000000..e22196ca1 --- /dev/null +++ b/external/arduino/avr/firmwares/atmegaxxu2/MEGA-dfu_and_usbserial_combined.hex @@ -0,0 +1,234 @@ +:20000000A2C00000BBC00000B9C00000B7C00000B5C00000B3C00000B1C00000AFC000004B +:20002000ADC00000ABC00000A9C000005AC400001EC40000A3C00000A1C000009FC000005C +:200040009DC000009BC0000099C0000097C0000095C0000093C0000091C0000014C100006A +:200060008DC000008BC0000089C0000087C0000085C0000083C0000081C000007FC0000050 +:200080007DC000007BC0000079C0000077C0000075C0000073C000001201100102000008E2 +:2000A0004123100001000102DC0109023E00020100C0320904000001020201000524000170 +:2000C00010042402060524060001070582030800FF09040100020A000000070504024000AC +:2000E0000107058302400001040309043203410072006400750069006E006F0020002800CA +:200100007700770077002E00610072006400750069006E006F002E0063006300290000003D +:200120002403410072006400750069006E006F0020004D00650067006100200032003500A5 +:2001400036003000000011241FBECFEFD2E0DEBFCDBF11E0A0E0B1E0E0EDFFE002C0059089 +:200160000D92A631B107D9F712E0A6E1B1E001C01D92AF32B107E1F7F1D028C741CF9C0139 +:20018000DC01AE57BF4FED91FC91119741911196FC93EE9380589F4FE817F90711F42D93A9 +:2001A0003C939FB7F894F901EC57FF4F8081815080839FBF842F0895DF92EF92FF920F935B +:2001C0001F93FC018489813019F0823021F405C040E3D42E04C0DD2402C030E2D32E838952 +:2001E000823011F488E0D82A8589873031F0883031F0863031F482E003C084E001C086E094 +:20020000D82A1092C9001092C8001092CA00E784F0880189128980E0E81681EEF80680E068 +:20022000080780E0180719F420E130E00FC0C801B701969587957795679560587B47814E2A +:200240009F4FA8019701A0D6215030403093CD002093CC00D092CA0080E0E81681EEF80612 +:2002600080E0080780E0180711F082E001C080E08093C80088E98093C9001F910F91FF9005 +:20028000EF90DF9008951F920F920FB60F9211242F938F939F93EF93FF939091CE008EB38C +:2002A0008430F1F4E0919901F0919A019083E0919901F0919A01CF01019690939A0180930C +:2002C00099018959914021F489E191E0928381839FB7F89480919D018F5F80939D019FBF3A +:2002E000FF91EF919F918F912F910F900FBE0F901F901895FC01858580FF02C05F9808959B +:200300005F9A089580E091E0D5C580E091E088C584B7877F84BF28E10FB6F89420936000CD +:20032000109260000FBE87E690E09093CD008093CC0086E08093CA001092C8002093C90019 +:20034000539A5A9A8AB180638AB98BB180638BB983D284E085BD5F9A579A08950F931F9322 +:20036000CF93DF93D5DF2FB7F8948EE991E090931F0280931E0290932102809320022FBFBB +:200380002FB7F89489E191E090939A018093990190939C0180939B012FBF7894CEE9D1E0D4 +:2003A00003E08FB7F894909122028FBF903809F180E091E0ABD497FD1CC0E0911E02F09161 +:2003C0001F028083E0911E02F0911F02CF01019690931F0280931E028E51924011F4D283DD +:2003E000C1839FB7F894809122028F5F809322029FBF8FB7F89410919D018FBFA89902C0BD +:20040000113678F1A89A80919D01882361F05D980093160108C089E191E0B1DE682F80E077 +:2004200091E0DAD411501123B1F780911601882351F0809116018150809316018091160101 +:20044000882309F45D9A80911701882351F08091170181508093170180911701882309F4F2 +:200460005C9A8FB7F894909122028FBF992369F08EE991E084DE982F8091C80085FFFCCFD3 +:200480009093CE005C980093170180E091E095D42AD487CFDA01923049F0933061F0913093 +:2004A000F9F4E8E9F0E022E130E01EC0EAEAF0E02EE330E019C0813049F0813018F08230CA +:2004C00079F408C0E8EEF0E0849107C0ECEEF0E0849103C0E0E2F1E08491282F30E004C010 +:2004E000E0E0F0E020E030E0ED93FC93C901089528E030E040E003C04F5F220F331F28177B +:200500003907D0F3842F8295807F08958093E9008091EB0081608093EB001092ED00609319 +:20052000EC004093ED008091EE00881F8827881F08951092F40090E09093E9001092F000D2 +:200540001092E8001092ED008091EB008E7F8093EB009F5F953081F70895809127028823BE +:200560008CF403C08EB38823B1F08091E80082FFF9CF8091E8008B778093E80008958EB395 +:20058000882349F08091E80080FFF9CF8091E8008E778093E800089594E68091EC0080FFAB +:2005A00005C08091E80080FF05C023C08091E80082FD1FC08EB3882311F482E008958EB3CE +:2005C000853011F483E008958091EB0085FF02C081E008958091E10082FFDFCF8091E1000E +:2005E0008B7F8093E100992311F484E008959150D4CF80E008959C0140912D0250912E020C +:200600004617570718F4F90120E038C06115710511F0AB01F8CF8091E8008E778093E800C8 +:2006200040E050E0F0CF8091E80083FF02C081E008958091E80082FD2DC08EB3882381F1AD +:200640008EB3853079F18091E80080FF17C09091F20006C081918093F100415050409F5FDD +:200660004115510511F09830A8F320E0983009F421E08091E8008E778093E80041155105FF +:2006800091F6222381F606C08EB3882349F08EB3853041F08091E80082FFF6CF80E00895C9 +:2006A00082E0089583E008959C0140912D0250912E024617570710F490E03BC06115710577 +:2006C00011F0AB01F9CF8091E8008E778093E80040E050E0F1CF8091E80083FF02C081E0FE +:2006E00008958091E80082FD30C08EB3882399F18EB3853091F18091E80080FF1AC08091A4 +:20070000F20009C0F9012F5F3F4FE491E093F100415050408F5F4115510511F0883090F338 +:2007200090E0883009F491E08091E8008E778093E8004115510579F6992369F606C08EB3ED +:20074000882349F08EB3853041F08091E80082FFF6CF80E0089582E0089583E008959C01B6 +:200760006115710529F48091E8008B778093E800F90120C08091E80083FF02C081E0089565 +:200780008EB3882339F18EB3853031F18091E80082FFF0CF06C08091F100819361507040B5 +:2007A00021F08091F2008823B1F78091E8008B778093E80061157105E9F606C08EB388235F +:2007C00049F08EB3853041F08091E80080FFF6CF80E0089582E0089583E0089542D044D05A +:2007E0001EBA10922502109224021092230284E089BD89B5826089BD09B400FEFDCF809121 +:20080000D800982F9F779093D80080688093D800809163008E7F809363008091D8008F7D69 +:200820008093D8008091E0008E7F8093E0008091E1008E7F8093E1008091E2008160809302 +:20084000E2008091E100877F8093E1008091E20088608093E2000895C1DF81E08093260221 +:2008600008951092E20008951092E10008951F920F920FB60F9211241F932F933F934F9385 +:200880005F936F937F938F939F93AF93BF93EF93FF93E9EEF0E0108117701082E0EFF0E066 +:2008A0008081877F80837894C3D0F894A9EEB0E01C92E0EFF0E08081886080831C93FF9164 +:2008C000EF91BF91AF919F918F917F916F915F914F913F912F911F910F900FBE0F901F90DE +:2008E00018951F920F920FB60F9211242F933F934F935F936F937F938F939F93AF93BF93FA +:20090000EF93FF938091E10080FF1BC08091E20080FF17C08091E1008E7F8093E10080912A +:20092000E2008E7F8093E2008091E20080618093E2008091D80080628093D80019BC1EBAA7 +:20094000D1D18091E10084FF29C08091E20084FF25C084E089BD89B5826089BD09B400FE71 +:20096000FDCF8091D8008F7D8093D8008091E1008F7E8093E1008091E2008F7E8093E200E3 +:200980008091E20081608093E20080912502882311F481E001C084E08EBBA4D18091E10070 +:2009A00083FF27C08091E20083FF23C08091E100877F8093E10082E08EBB10922502809105 +:2009C000E1008E7F8093E1008091E2008E7F8093E2008091E20080618093E200AADD80E090 +:2009E00060E042E093DD8091F00088608093F00079D18091E10082FF0AC08091E20082FF3E +:200A000006C08091E1008B7F8093E1006BD1FF91EF91BF91AF919F918F917F916F915F91F4 +:200A20004F913F912F910F900FBE0F901F9018951F93DF93CF93CDB7DEB7AC970FB6F894AC +:200A4000DEBF0FBECDBFE7E2F2E08091F100819322E0EF32F207C9F78091270230912802EE +:200A6000353009F487C0363040F43130C9F1313070F0333009F01DC133C0383009F4EFC016 +:200A8000393009F4FEC0363009F013C192C0803821F0823809F00DC108C090912302809144 +:200AA0002402882399F0926011C080912B0287708093E9008091EB0090E025E09695879530 +:200AC0002A95E1F7982F91701092E9008091E800877F8093E8009093F1001092F100CAC001 +:200AE000882319F0823009F0E4C090E08F719070009721F0029709F0DDC00CC080912902A4 +:200B0000813009F0D7C010922402333069F5809324022AC080912902882331F520912B02FD +:200B2000277009F4C7C02093E9008091EB0080FFC1C0333021F48091EB00806213C08091C8 +:200B4000EB0080618093EB0081E090E002C0880F991F2A95E2F78093EA001092EA008091B7 +:200B6000EB0088608093EB001092E9008091E800877F83C0882309F09CC0109129028091FA +:200B8000E800877F8093E800E8DC04C08EB3882309F490C08091E80080FFF8CF812F8F77B6 +:200BA00011F492E001C093E09EBB80688093E30081C08058823008F07CC0809129029091F7 +:200BC0002A0223E08C3D920799F55FB7F894DE0115964EE020E030E061E2E42FF0E0609373 +:200BE0005700849120FF03C082958F704F5F982F9F70892F805D8A3308F0895F8C93119615 +:200C00001C9211972F5F3F4F12962431310529F75FBF8AE28B8383E08C838091E800877F06 +:200C20008093E800CE0103966AE270E0E4DC11C060912B02AE014F5F5F4F2CDCBC0100979F +:200C4000C9F18091E800877F8093E80089819A812BDD8091E8008B778093E8002BC080381A +:200C600041F58091E800877F8093E800809125028093F1008091E8008E778093E8006DDCC6 +:200C800019C08823B1F490912902923098F48091E800877F8093E800909325025EDC809102 +:200CA0002502882311F483E001C084E08EBB2DDB01C028DB8091E80083FF0AC08091EB007F +:200CC00080628093EB008091E800877F8093E800AC960FB6F894DEBF0FBECDBFCF91DF91E1 +:200CE0001F91089508951F938EB3882361F01091E9001092E9008091E80083FF01C098DE54 +:200D000017701093E9001F9108950895FC018EB3843021F587859089A189B2890097A10507 +:200D2000B105E1F085818093E9008091E80082FF15C08091F200882319F42FEF3FEF04C010 +:200D40008091F100282F30E08091F200882341F48091E8008B778093E80002C02FEF3FEF43 +:200D6000C9010895FC018EB3843011F587859089A189B2890097A105B105D1F081818093C1 +:200D8000E9008091F2008823A9F09091E8008091E8008E778093E80095FD0CC0FDDB982F24 +:200DA000882349F48091E8008E778093E80003C092E001C090E0892F0895FC018EB38430A5 +:200DC00051F487859089A189B2890097A105B10511F0CF01C7CF08951F93FC01162F8EB318 +:200DE0008430D9F487859089A189B2890097A105B10599F081818093E9008091E80085FDF3 +:200E000008C08091E8008E778093E800C5DB882329F41093F10080E001C082E01F91089545 +:200E20000F931F93CF93DF93EC010D96FC0189E0DF011D928A95E9F72A813B8109818C8108 +:200E4000882311F410E001C014E0C90151DB182B1260802F61E8412F59DB882329F12E8182 +:200E60003F810D818885882311F410E001C014E0C9013EDB182B1260802F60E8412F46DBA2 +:200E8000882391F02A853B8509858C85882311F410E001C014E0C9012BDB182B1260802F8F +:200EA00061EC412F33DB01C080E0DF91CF911F910F910895CF93DF93EC018091E80083FF4D +:200EC00060C0888190E020912B0230912C022817390709F056C080912802813261F082322B +:200EE00020F4803209F04DC019C0823269F1833209F047C038C080912702813A09F041C0A3 +:200F00008091E800877F8093E800CE010F9667E070E071DB8091E8008B7713C08091270278 +:200F2000813279F58091E800877F8093E800CE010F9667E070E013DCCE013ED98091E800BD +:200F40008E778093E8001DC0809127028132C9F48091E800877F8093E800809129028D87C0 +:200F6000CE01C8D90DC080912702813251F48091E800877F8093E800CE0160912902C5DE7A +:200F8000ECDADF91CF910895A1E21A2EAA1BBB1BFD010DC0AA1FBB1FEE1FFF1FA217B307AC +:200FA000E407F50720F0A21BB30BE40BF50B661F771F881F991F1A9469F760957095809539 +:200FC00090959B01AC01BD01CF010895F894FFCF000340000004400000020800000000008D +:200FE000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B +:201000004BC0000064C0000062C0000060C000005EC000005CC000005AC0000058C00000F3 +:2010200056C0000054C0000052C00000CBC400004EC000004CC000004AC0000048C00000B9 +:2010400046C0000044C0000042C0000040C000003EC000003CC000003AC0000038C0000098 +:2010600036C0000034C0000032C0000030C000002EC000002CC000002AC0000028C00000F8 +:2010800026C0000024C0000022C0000020C000001EC000001CC0000011241FBECFEFD2E088 +:2010A000DEBFCDBF11E0A0E0B1E0E4EBFCE102C005900D92A836B107D9F711E0A8E6B1E0ED +:2010C00001C01D92A738B107E1F74FD3F1C598CF982F15C08091F200882371F48091E8004A +:2010E0008B7F8093E80003C08EB3882351F08091E80082FFF9CF02C08091F1009150992358 +:2011000049F708952091760130917501809174019091730180936D0190936E01C901809388 +:201120006F0190937001089580917101843009F45AC0853030F4813059F0833009F0C3C0BE +:201140001FC0853009F4A0C0863009F0BCC0AFC080917201823008F0B6C0D4DF8091720129 +:20116000882361F480916D0190916E0123E0FC0120935700E89507B600FCFDCF85E008C027 +:2011800080917201882311F0823029F4BBDF89E0809301010895813009F095C020E030E08C +:2011A00040E050E0F90184918F3F81F0CA01AA27BB2780936C0130936E0120936D018AE0D6 +:2011C0008093010185E08093690108952F5F3F4F4F4F5F4F2030F0E13F07F0E04F07F0E0B6 +:2011E0005F0701F7089580917201833051F581E0809368018091770190917801892B71F062 +:2012000080917301813009F05EC0809176019091750190936B0180936A0108958091730133 +:20122000882361F42CE088E190E00FB6F894A895809360000FBE20936000089510920001A8 +:201240000895882309F03FC0809173018F3F09F03AC0E0E0F0E093E085E090935700E895A9 +:2012600007B600FCFDCF80935700E89507B600FCFDCFE058FF4F20E1E030F20771F781E123 +:2012800080935700E8950895E091730180917201882321F4F0E0EB5FFE4F05C0813099F437 +:2012A000F0E0EE52FF4F808180937C01089580917201833041F480917301882321F48091E0 +:2012C000740180936C0108952F923F924F925F926F927F929F92AF92BF92CF92DF92EF92F0 +:2012E000FF920F931F93CF93DF938091850190918601909378018093770180917901882399 +:2013000051F08091790181508093790180917901882309F45D9A80917A01882351F08091F0 +:201320007A01815080937A0180917A01882309F45C9A80918001833009F4B2C1843030F41C +:20134000813071F0823009F0E3C111C1853009F4C5C1853008F4BAC1863009F0D9C1CDC11F +:201360005C9883E080937A018091E800877F8093E80080916801882329F0D6DE5D9A5C9AAF +:201380001092680120917701309178012115310529F42AC08EB3882309F4BAC18091E8000F +:2013A00082FFF8CF8091F10080937101215030403093780120937701E2E7F1E00CC080919F +:2013C000F10081932150304081E0E737F80719F43183208308C08091F200882381F7309394 +:2013E000780120937701A0DE80910101853009F0BAC08091770190917801892B21F482E042 +:2014000080930101B0C08AE163DE80916D018F715FDEC0916F01D091700120916D0130916C +:201420006E0121968E01021B130B219780917201882309F093C0180136942794C901A091F0 +:201440006C01B0E09C01AD0162E0E62EF12C012D112DE20EF31E041F151F59016A0190E0D8 +:2014600099249394B5E0A3E048C08091F200882371F48091E8008B7F8093E80004C08EB352 +:20148000882309F445C18091E80082FFF8CF0894210831088091F100682F8091F100782F1D +:2014A000F5010B0190925700E89511249F5F903419F021143104A1F4F901B0935700E89524 +:2014C00007B600FCFDCF2114310451F0F701A0935700E89507B600FCFDCFA801970190E0A7 +:2014E00042E0442E512C612C712CE40CF51C061D171DA40CB51CC61CD71C2114310409F0A0 +:20150000B4CFD0936E01C0936D0181E180935700E89527C08091F200882371F48091E80079 +:201520008B7F8093E80004C08EB3882309F4F0C08091E80082FFF8CF6091F10080916D01A7 +:2015400090916E01A7D380916D0190916E01019690936E0180936D010150104001151105FB +:20156000C9F680E1B5DD8091E8008B7FC3C08091E800877F8093E8005D9883E08093790154 +:2015800004C08EB3882309F4C3C08091E80080FFF8CF80910101893091F08A3069F4809167 +:2015A0007201813049F480916D0190916E018093F1009093F1009BC080917C0196C0609173 +:2015C0006F017091700120916D0130916E016F5F7F4F7B01E21AF30A6150704080917201E4 +:2015E000882389F5870116950795C901A0916C01B0E09C01AD011FC08091F200803271F4B7 +:201600008091E8008E7F8093E80004C08EB3882309F47EC08091E80080FFF8CFF90185918F +:2016200094918093F1009093F100015010402E5F3F4F4F4F5F4F01151105F1F670936E01E0 +:2016400060936D0129C0823039F523C08091F200803271F48091E8008E7F8093E80004C09E +:201660008EB3882309F454C08091E80080FFF8CF00916D0110916E01C80104D38093F1007B +:201680000F5F1F4F10936E0100936D010894E108F108E114F104D1F682E08093010127C0CE +:2016A0008091E800877F8093E800809169018093F1001092F1001092F1001092F1008091E7 +:2016C00001018093F1001092F10011C08091E800877F8093E8001092690119C08091E800C8 +:2016E000877F8093E800809101018093F1008091E8008E7F8093E8000AC08091E800877F08 +:201700008093E8005D9A5C9A82E08093010187D0DF91CF911F910F91FF90EF90DF90CF9017 +:20172000BF90AF909F907F906F905F904F903F902F9008952BD181E085BF15BE089584B799 +:20174000877F84BF88E10FB6F89480936000109260000FBE81E085BF82E085BF8AB18063DB +:201760008AB98BB180638BB90CC1E9DF789401C080D2809100018823D9F78091680188235D +:20178000B9F7D8DFE0916A01F0916B010995FA01923071F0933089F0913029F488E091E06A +:2017A00022E130E019C080E090E020E030E014C08AE191E02BE130E00FC0882339F48091D9 +:2017C0003501282F30E085E391E006C080913901282F30E089E391E091838083C9010895C0 +:2017E0008091EB0081608093EB001092ED006093EC004093ED008091EE00881F8827881FE4 +:2018000008951092F4001092F0001092E8001092ED00EBEEF0E080818E7F80830895809182 +:201820007F0188238CF403C08EB38823B1F08091E80082FFF9CF8091E8008B7F8093E8006D +:2018400008958EB3882349F08091E80080FFF9CF8091E8008E7F8093E80008959C0140917A +:201860008501509186014617570718F4F90120E038C06115710511F0AB01F8CF8091E80068 +:201880008E7F8093E80040E050E0F0CF8091E80083FF02C081E008958091E80082FD2DC091 +:2018A0008EB3882381F18EB3853079F18091E80080FF17C09091F20006C081918093F1002C +:2018C000415050409F5F4115510511F09032A8F320E0903209F421E08091E8008E7F809306 +:2018E000E8004115510591F6222381F606C08EB3882349F08EB3853041F08091E80082FF85 +:20190000F6CF80E0089582E0089583E0089554D056D01EBA10927D0184E089BD89B58260FA +:2019200089BD09B400FEFDCF8091D800982F9F779093D80080688093D800809163008E7FC5 +:20194000809363008091D8008F7D8093D8008091E0008E7F8093E0008091E1008E7F80932E +:20196000E1008091E20081608093E2008091E100877F8093E1008091E20088608093E20001 +:201980000895C5DF81E080937E010895C0DFE0EEF0E0808181608083E8EDF0E080818F77A8 +:2019A00080830AD00CD019BCE3E6F0E080818160808310927E0108951092E200089510929A +:2019C000E10008951F920F920FB60F9211242F933F934F935F936F937F938F939F93AF938A +:2019E000BF93EF93FF938091E10080FF1BC08091E20080FF17C08091E1008E7F8093E100F9 +:201A00008091E2008E7F8093E2008091E20080618093E2008091D80080628093D80019BC7D +:201A20001EBA26D18091E10084FF29C08091E20084FF25C084E089BD89B5826089BD09B451 +:201A400000FEFDCF8091D8008F7D8093D8008091E1008F7E8093E1008091E2008F7E8093D6 +:201A6000E2008091E20081608093E20080917D01882311F481E001C084E08EBBF9D08091D3 +:201A8000E10083FF22C08091E20083FF1EC08091E100877F8093E10082E08EBB10927D01F7 +:201AA0008091E1008E7F8093E1008091E2008E7F8093E2008091E20080618093E200A1DEF6 +:201AC00080E060E042E28CDED3D08091E10082FF0AC08091E20082FF06C08091E1008B7FC2 +:201AE0008093E100C5D0FF91EF91BF91AF919F918F917F916F915F914F913F912F910F905E +:201B00000FBE0F901F9018951F93DF93CF9300D0CDB7DEB7EFE7F1E08091F100819381E070 +:201B2000E738F807C9F790917F0180918001853011F1863040F48130B9F0813070F08330D5 +:201B400009F081C011C0883009F453C0893009F462C0863009F077C02DC0903809F474C00E +:201B6000923809F070C070C0992309F46DC0923009F069C069C0992309F065C01091810152 +:201B80008091E800877F8093E80049DE04C08EB3882309F459C08091E80080FFF8CF812F6F +:201BA0008F7711F492E001C093E09EBB80688093E3004AC09058923008F045C080918101F9 +:201BC0009091820160918301AE014F5F5F4FDFDDBC010097C9F18091E800877F8093E8001D +:201BE00089819A813BDE8091E8008B7F8093E8002BC0903841F58091E800877F8093E800C6 +:201C000080917D018093F1008091E8008E7F8093E80005DE19C09923B1F4909181019230AE +:201C200098F48091E800877F8093E80090937D01F6DD80917D01882311F483E001C084E0E3 +:201C40008EBB16D001C040DB8091E80083FF0AC08091EB0080628093EB008091E800877F59 +:201C60008093E8000F900F90CF91DF911F91089508958EB3882329F08091E80083FF01C030 +:201C800043CF0895F999FECF92BD81BDF89A992780B50895262FF999FECF1FBA92BD81BD6B +:201CA00020BD0FB6F894FA9AF99A0FBE01960895F894FFCF01021E938220DCFB1201100123 +:201CC00000000020EB03F72F00000001000109021B0001010080320904000000FE010200E6 +:201CE0000921030000000C0001040309042C03410072006400750069006E006F0020004D28 +:1C1D000000650067006100200032003500360030002000440046005500000000AE +:00000001FF diff --git a/external/arduino/avr/firmwares/atmegaxxu2/README.txt b/external/arduino/avr/firmwares/atmegaxxu2/README.txt new file mode 100644 index 000000000..386dcf020 --- /dev/null +++ b/external/arduino/avr/firmwares/atmegaxxu2/README.txt @@ -0,0 +1,33 @@ +Arduino Uno and Mega 2560 Firmwares for the ATmega8U2 + +This directory contains the firmwares used on the ATmega8U2 on the Arduino +Uno and Arduino Mega 2560. The arduino-usbdfu directory contains the DFU +bootloader on the 8U2; the arduino-usbserial directory contains the actual +usb to serial firmware. Both should be compiled against LUFA 100807. The +two .hex files in this directory combine the dfu and serial firmwares into +a single file to burn onto the 8U2. + +To burn (Uno): +avrdude -p at90usb82 -F -P usb -c avrispmkii -U flash:w:UNO-dfu_and_usbserial_combined.hex -U lfuse:w:0xFF:m -U hfuse:w:0xD9:m -U efuse:w:0xF4:m -U lock:w:0x0F:m + +To burn (Mega 2560): +avrdude -p at90usb82 -F -P usb -c avrispmkii -U flash:w:MEGA-dfu_and_usbserial_combined.hex -U lfuse:w:0xFF:m -U hfuse:w:0xD9:m -U efuse:w:0xF4:m -U lock:w:0x0F:m + + +Note on USB Vendor IDs (VID) and Product IDs (PID): The arduino-usbdfu +project uses Atmel's VID and MCU-specific PIDs to maintain compatibility +with their FLIP software. The source code to the arduino-usbserial +project includes Atmel's VID and a PID donated by them to LUFA. This +PID is used in LUFA's USBtoSerial project, which forms the basis for +arduino-usbserial. According to the LUFA documentation, this VID/PID +combination is: + + "For use in testing of LUFA powered devices during development only, + by non-commercial entities. All devices must accept collisions on this + VID/PID range (from other in-development LUFA devices) to be resolved + by using a unique release number in the Device Descriptor. No devices + using this VID/PID combination may be released to the general public." + +The production version of the arduino-usbserial firmware uses the +Arduino VID. This is only for use with official Arduino hardware and +should not be used on other products. \ No newline at end of file diff --git a/external/arduino/avr/firmwares/atmegaxxu2/UNO-dfu_and_usbserial_combined.hex b/external/arduino/avr/firmwares/atmegaxxu2/UNO-dfu_and_usbserial_combined.hex new file mode 100644 index 000000000..60acf44c5 --- /dev/null +++ b/external/arduino/avr/firmwares/atmegaxxu2/UNO-dfu_and_usbserial_combined.hex @@ -0,0 +1,234 @@ +:200000009CC00000B5C00000B3C00000B1C00000AFC00000ADC00000ABC00000A9C000007B +:20002000A7C00000A5C00000A3C0000054C4000018C400009DC000009BC0000099C000008C +:2000400097C0000095C0000093C0000091C000008FC000008DC000008BC000000EC100009A +:2000600087C0000085C0000083C0000081C000007FC000007DC000007BC0000079C0000080 +:2000800077C0000075C0000073C0000071C000006FC000006DC00000120110010200000806 +:2000A0004123010001000102DC0109023E00020100C032090400000102020100052400017F +:2000C00010042402060524060001070582030800FF09040100020A000000070504024000AC +:2000E0000107058302400001040309043203410072006400750069006E006F0020002800CA +:200100007700770077002E00610072006400750069006E006F002E0063006300290000003D +:200120001803410072006400750069006E006F00200055006E006F00000011241FBECFEFB0 +:20014000D2E0DEBFCDBF11E0A0E0B1E0E4ECFFE002C005900D92A631B107D9F712E0A6E145 +:20016000B1E001C01D92AF32B107E1F7F1D028C747CF9C01DC01AE57BF4FED91FC91119707 +:2001800041911196FC93EE9380589F4FE817F90711F42D933C939FB7F894F901EC57FF4F10 +:2001A0008081815080839FBF842F0895DF92EF92FF920F931F93FC018489813019F082306F +:2001C00021F405C040E3D42E04C0DD2402C030E2D32E8389823011F488E0D82A8589873094 +:2001E00031F0883031F0863031F482E003C084E001C086E0D82A1092C9001092C800109201 +:20020000CA00E784F0880189128980E0E81681EEF80680E0080780E0180719F420E130E035 +:200220000FC0C801B701969587957795679560587B47814E9F4FA8019701A0D62150304050 +:200240003093CD002093CC00D092CA0080E0E81681EEF80680E0080780E0180711F082E047 +:2002600001C080E08093C80088E98093C9001F910F91FF90EF90DF9008951F920F920FB6B4 +:200280000F9211242F938F939F93EF93FF939091CE008EB38430F1F4E0919901F0919A016E +:2002A0009083E0919901F0919A01CF01019690939A01809399018959914021F489E191E08F +:2002C000928381839FB7F89480919D018F5F80939D019FBFFF91EF919F918F912F910F90B8 +:2002E0000FBE0F901F901895FC01858580FF02C05F9808955F9A089580E091E0D5C580E0F9 +:2003000091E088C584B7877F84BF28E10FB6F89420936000109260000FBE87E690E090935F +:20032000CD008093CC0086E08093CA001092C8002093C900539A5A9A8AB180638AB98BB16A +:2003400080638BB983D284E085BD5F9A579A08950F931F93CF93DF93D5DF2FB7F8948EE92F +:2003600091E090931F0280931E0290932102809320022FBF2FB7F89489E191E090939A0121 +:200380008093990190939C0180939B012FBF7894CEE9D1E003E08FB7F894909122028FBF97 +:2003A000903809F180E091E0ABD497FD1CC0E0911E02F0911F028083E0911E02F0911F0252 +:2003C000CF01019690931F0280931E028E51924011F4D283C1839FB7F894809122028F5FEB +:2003E000809322029FBF8FB7F89410919D018FBFA89902C0113678F1A89A80919D018823BA +:2004000061F05D980093160108C089E191E0B1DE682F80E091E0DAD411501123B1F7809156 +:200420001601882351F08091160181508093160180911601882309F45D9A809117018823FB +:2004400051F08091170181508093170180911701882309F45C9A8FB7F894909122028FBF0A +:20046000992369F08EE991E084DE982F8091C80085FFFCCF9093CE005C980093170180E03E +:2004800091E095D42AD487CFDA01923049F0933061F09130F9F4E8E9F0E022E130E01EC004 +:2004A000EAEAF0E02EE330E019C0813049F0813018F0823079F408C0E8EEF0E0849107C092 +:2004C000ECEEF0E0849103C0E0E2F1E08491282F30E004C0E0E0F0E020E030E0ED93FC9318 +:2004E000C901089528E030E040E003C04F5F220F331F28173907D0F3842F8295807F0895C1 +:200500008093E9008091EB0081608093EB001092ED006093EC004093ED008091EE00881F30 +:200520008827881F08951092F40090E09093E9001092F0001092E8001092ED008091EB000F +:200540008E7F8093EB009F5F953081F708958091270288238CF403C08EB38823B1F08091F2 +:20056000E80082FFF9CF8091E8008B778093E80008958EB3882349F08091E80080FFF9CF52 +:200580008091E8008E778093E800089594E68091EC0080FF05C08091E80080FF05C023C0EA +:2005A0008091E80082FD1FC08EB3882311F482E008958EB3853011F483E008958091EB00FD +:2005C00085FF02C081E008958091E10082FFDFCF8091E1008B7F8093E100992311F484E0A1 +:2005E00008959150D4CF80E008959C0140912D0250912E024617570718F4F90120E038C076 +:200600006115710511F0AB01F8CF8091E8008E778093E80040E050E0F0CF8091E80083FFF7 +:2006200002C081E008958091E80082FD2DC08EB3882381F18EB3853079F18091E80080FF5F +:2006400017C09091F20006C081918093F100415050409F5F4115510511F09830A8F320E0A5 +:20066000983009F421E08091E8008E778093E8004115510591F6222381F606C08EB388231A +:2006800049F08EB3853041F08091E80082FFF6CF80E0089582E0089583E008959C01409151 +:2006A0002D0250912E024617570710F490E03BC06115710511F0AB01F9CF8091E8008E7771 +:2006C0008093E80040E050E0F1CF8091E80083FF02C081E008958091E80082FD30C08EB32B +:2006E000882399F18EB3853091F18091E80080FF1AC08091F20009C0F9012F5F3F4FE491A4 +:20070000E093F100415050408F5F4115510511F0883090F390E0883009F491E08091E800EF +:200720008E778093E8004115510579F6992369F606C08EB3882349F08EB3853041F0809160 +:20074000E80082FFF6CF80E0089582E0089583E008959C016115710529F48091E8008B77CE +:200760008093E800F90120C08091E80083FF02C081E008958EB3882339F18EB3853031F13B +:200780008091E80082FFF0CF06C08091F10081936150704021F08091F2008823B1F780916B +:2007A000E8008B778093E80061157105E9F606C08EB3882349F08EB3853041F08091E8007E +:2007C00080FFF6CF80E0089582E0089583E0089542D044D01EBA10922502109224021092A8 +:2007E000230284E089BD89B5826089BD09B400FEFDCF8091D800982F9F779093D800806894 +:200800008093D800809163008E7F809363008091D8008F7D8093D8008091E0008E7F809305 +:20082000E0008091E1008E7F8093E1008091E20081608093E2008091E100877F8093E10030 +:200840008091E20088608093E2000895C1DF81E08093260208951092E20008951092E100AE +:2008600008951F920F920FB60F9211241F932F933F934F935F936F937F938F939F93AF932A +:20088000BF93EF93FF93E9EEF0E0108117701082E0EFF0E08081877F80837894C3D0F894CD +:2008A000A9EEB0E01C92E0EFF0E08081886080831C93FF91EF91BF91AF919F918F917F9129 +:2008C0006F915F914F913F912F911F910F900FBE0F901F9018951F920F920FB60F921124B4 +:2008E0002F933F934F935F936F937F938F939F93AF93BF93EF93FF938091E10080FF1BC034 +:200900008091E20080FF17C08091E1008E7F8093E1008091E2008E7F8093E2008091E200B3 +:2009200080618093E2008091D80080628093D80019BC1EBAD1D18091E10084FF29C080916D +:20094000E20084FF25C084E089BD89B5826089BD09B400FEFDCF8091D8008F7D8093D800D6 +:200960008091E1008F7E8093E1008091E2008F7E8093E2008091E20081608093E2008091B5 +:200980002502882311F481E001C084E08EBBA4D18091E10083FF27C08091E20083FF23C089 +:2009A0008091E100877F8093E10082E08EBB109225028091E1008E7F8093E1008091E200F1 +:2009C0008E7F8093E2008091E20080618093E200AADD80E060E042E093DD8091F0008860AA +:2009E0008093F00079D18091E10082FF0AC08091E20082FF06C08091E1008B7F8093E10043 +:200A00006BD1FF91EF91BF91AF919F918F917F916F915F914F913F912F910F900FBE0F902F +:200A20001F9018951F93DF93CF93CDB7DEB7AC970FB6F894DEBF0FBECDBFE7E2F2E0809185 +:200A4000F100819322E0EF32F207C9F78091270230912802353009F487C0363040F43130EC +:200A6000C9F1313070F0333009F01DC133C0383009F4EFC0393009F4FEC0363009F013C163 +:200A800092C0803821F0823809F00DC108C09091230280912402882399F0926011C080916D +:200AA0002B0287708093E9008091EB0090E025E0969587952A95E1F7982F91701092E90074 +:200AC0008091E800877F8093E8009093F1001092F100CAC0882319F0823009F0E4C090E078 +:200AE0008F719070009721F0029709F0DDC00CC080912902813009F0D7C0109224023330AB +:200B000069F5809324022AC080912902882331F520912B02277009F4C7C02093E9008091A1 +:200B2000EB0080FFC1C0333021F48091EB00806213C08091EB0080618093EB0081E090E0F5 +:200B400002C0880F991F2A95E2F78093EA001092EA008091EB0088608093EB001092E900F6 +:200B60008091E800877F83C0882309F09CC0109129028091E800877F8093E800E8DC04C0E5 +:200B80008EB3882309F490C08091E80080FFF8CF812F8F7711F492E001C093E09EBB80683B +:200BA0008093E30081C08058823008F07CC08091290290912A0223E08C3D920799F55FB7AE +:200BC000F894DE0115964EE020E030E061E2E42FF0E060935700849120FF03C082958F7044 +:200BE0004F5F982F9F70892F805D8A3308F0895F8C9311961C9211972F5F3F4F129624310A +:200C0000310529F75FBF8AE28B8383E08C838091E800877F8093E800CE0103966AE270E076 +:200C2000E4DC11C060912B02AE014F5F5F4F2CDCBC010097C9F18091E800877F8093E800EA +:200C400089819A812BDD8091E8008B778093E8002BC0803841F58091E800877F8093E8009E +:200C6000809125028093F1008091E8008E778093E8006DDC19C08823B1F4909129029230BF +:200C800098F48091E800877F8093E800909325025EDC80912502882311F483E001C084E0DA +:200CA0008EBB2DDB01C028DB8091E80083FF0AC08091EB0080628093EB008091E800877FFF +:200CC0008093E800AC960FB6F894DEBF0FBECDBFCF91DF911F91089508951F938EB3882338 +:200CE00061F01091E9001092E9008091E80083FF01C098DE17701093E9001F9108950895DF +:200D0000FC018EB3843021F587859089A189B2890097A105B105E1F085818093E90080916A +:200D2000E80082FF15C08091F200882319F42FEF3FEF04C08091F100282F30E08091F2003E +:200D4000882341F48091E8008B778093E80002C02FEF3FEFC9010895FC018EB3843011F550 +:200D600087859089A189B2890097A105B105D1F081818093E9008091F2008823A9F09091CF +:200D8000E8008091E8008E778093E80095FD0CC0FDDB982F882349F48091E8008E7780937C +:200DA000E80003C092E001C090E0892F0895FC018EB3843051F487859089A189B289009738 +:200DC000A105B10511F0CF01C7CF08951F93FC01162F8EB38430D9F487859089A189B28973 +:200DE0000097A105B10599F081818093E9008091E80085FD08C08091E8008E778093E8003D +:200E0000C5DB882329F41093F10080E001C082E01F9108950F931F93CF93DF93EC010D964E +:200E2000FC0189E0DF011D928A95E9F72A813B8109818C81882311F410E001C014E0C901A1 +:200E400051DB182B1260802F61E8412F59DB882329F12E813F810D818885882311F410E0A6 +:200E600001C014E0C9013EDB182B1260802F60E8412F46DB882391F02A853B8509858C8563 +:200E8000882311F410E001C014E0C9012BDB182B1260802F61EC412F33DB01C080E0DF916D +:200EA000CF911F910F910895CF93DF93EC018091E80083FF60C0888190E020912B02309171 +:200EC0002C022817390709F056C080912802813261F0823220F4803209F04DC019C082320A +:200EE00069F1833209F047C038C080912702813A09F041C08091E800877F8093E800CE0133 +:200F00000F9667E070E071DB8091E8008B7713C080912702813279F58091E800877F80930E +:200F2000E800CE010F9667E070E013DCCE013ED98091E8008E778093E8001DC080912702D9 +:200F40008132C9F48091E800877F8093E800809129028D87CE01C8D90DC0809127028132AD +:200F600051F48091E800877F8093E800CE0160912902C5DEECDADF91CF910895A1E21A2EA6 +:200F8000AA1BBB1BFD010DC0AA1FBB1FEE1FFF1FA217B307E407F50720F0A21BB30BE40B49 +:200FA000F50B661F771F881F991F1A9469F760957095809590959B01AC01BD01CF01089501 +:200FC000F894FFCF00034000000440000002080000000000000000000000FFFFFFFFFFFF2C +:200FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF11 +:201000004BC0000064C0000062C0000060C000005EC000005CC000005AC0000058C00000F3 +:2010200056C0000054C0000052C00000CBC400004EC000004CC000004AC0000048C00000B9 +:2010400046C0000044C0000042C0000040C000003EC000003CC000003AC0000038C0000098 +:2010600036C0000034C0000032C0000030C000002EC000002CC000002AC0000028C00000F8 +:2010800026C0000024C0000022C0000020C000001EC000001CC0000011241FBECFEFD2E088 +:2010A000DEBFCDBF11E0A0E0B1E0E4EBFCE102C005900D92AC35B107D9F711E0ACE5B1E0E7 +:2010C00001C01D92AB37B107E1F74FD3F1C598CF982F15C08091F200882371F48091E80047 +:2010E0008B7F8093E80003C08EB3882351F08091E80082FFF9CF02C08091F1009150992358 +:2011000049F7089520916A013091690180916801909167018093610190936201C9018093D0 +:20112000630190936401089580916501843009F45AC0853030F4813059F0833009F0C3C0E2 +:201140001FC0853009F4A0C0863009F0BCC0AFC080916601823008F0B6C0D4DF8091660141 +:20116000882361F4809161019091620123E0FC0120935700E89507B600FCFDCF85E008C03F +:2011800080916601882311F0823029F4BBDF89E0809301010895813009F095C020E030E098 +:2011A00040E050E0F90184918F3F81F0CA01AA27BB278093600130936201209361018AE0FA +:2011C0008093010185E080935D0108952F5F3F4F4F4F5F4F2030F0E13F07F0E04F07F0E0C2 +:2011E0005F0701F7089580916601833051F581E080935C0180916B0190916C01892B71F092 +:2012000080916701813009F05EC080916A019091690190935F0180935E010895809167017B +:20122000882361F42CE088E190E00FB6F894A895809360000FBE20936000089510920001A8 +:201240000895882309F03FC0809167018F3F09F03AC0E0E0F0E093E085E090935700E895B5 +:2012600007B600FCFDCF80935700E89507B600FCFDCFE058FF4F20E1E030F20771F781E123 +:2012800080935700E8950895E091670180916601882321F4F0E0EB5FFE4F05C0813099F44F +:2012A000F0E0EE52FF4F808180937001089580916601833041F480916701882321F4809104 +:2012C00068018093600108952F923F924F925F926F927F929F92AF92BF92CF92DF92EF9208 +:2012E000FF920F931F93CF93DF938091790190917A0190936C0180936B0180916D018823D5 +:2013000051F080916D01815080936D0180916D01882309F45D9A80916E01882351F0809120 +:201320006E01815080936E0180916E01882309F45C9A80917401833009F4B2C1843030F44C +:20134000813071F0823009F0E3C111C1853009F4C5C1853008F4BAC1863009F0D9C1CDC11F +:201360005C9883E080936E018091E800877F8093E80080915C01882329F0D6DE5D9A5C9AC7 +:2013800010925C0120916B0130916C012115310529F42AC08EB3882309F4BAC18091E80033 +:2013A00082FFF8CF8091F100809365012150304030936C0120936B01E6E6F1E00CC08091C0 +:2013C000F10081932150304081E0EB36F80719F43183208308C08091F200882381F7309391 +:2013E0006C0120936B01A0DE80910101853009F0BAC080916B0190916C01892B21F482E072 +:2014000080930101B0C08AE163DE809161018F715FDEC0916301D09164012091610130919C +:20142000620121968E01021B130B219780916601882309F093C0180136942794C901A09108 +:201440006001B0E09C01AD0162E0E62EF12C012D112DE20EF31E041F151F59016A0190E0E4 +:2014600099249394B5E0A3E048C08091F200882371F48091E8008B7F8093E80004C08EB352 +:20148000882309F445C18091E80082FFF8CF0894210831088091F100682F8091F100782F1D +:2014A000F5010B0190925700E89511249F5F903419F021143104A1F4F901B0935700E89524 +:2014C00007B600FCFDCF2114310451F0F701A0935700E89507B600FCFDCFA801970190E0A7 +:2014E00042E0442E512C612C712CE40CF51C061D171DA40CB51CC61CD71C2114310409F0A0 +:20150000B4CFD0936201C093610181E180935700E89527C08091F200882371F48091E80091 +:201520008B7F8093E80004C08EB3882309F4F0C08091E80082FFF8CF6091F10080916101B3 +:2015400090916201A7D3809161019091620101969093620180936101015010400115110537 +:20156000C9F680E1B5DD8091E8008B7FC3C08091E800877F8093E8005D9883E080936D0160 +:2015800004C08EB3882309F4C3C08091E80080FFF8CF80910101893091F08A3069F4809167 +:2015A0006601813049F480916101909162018093F1009093F1009BC08091700196C06091A3 +:2015C00063017091640120916101309162016F5F7F4F7B01E21AF30A615070408091660120 +:2015E000882389F5870116950795C901A0916001B0E09C01AD011FC08091F200803271F4C3 +:201600008091E8008E7F8093E80004C08EB3882309F47EC08091E80080FFF8CFF90185918F +:2016200094918093F1009093F100015010402E5F3F4F4F4F5F4F01151105F1F670936201EC +:201640006093610129C0823039F523C08091F200803271F48091E8008E7F8093E80004C0AA +:201660008EB3882309F454C08091E80080FFF8CF0091610110916201C80104D38093F10093 +:201680000F5F1F4F10936201009361010894E108F108E114F104D1F682E08093010127C0E6 +:2016A0008091E800877F8093E80080915D018093F1001092F1001092F1001092F1008091F3 +:2016C00001018093F1001092F10011C08091E800877F8093E80010925D0119C08091E800D4 +:2016E000877F8093E800809101018093F1008091E8008E7F8093E8000AC08091E800877F08 +:201700008093E8005D9A5C9A82E08093010187D0DF91CF911F910F91FF90EF90DF90CF9017 +:20172000BF90AF909F907F906F905F904F903F902F9008952BD181E085BF15BE089584B799 +:20174000877F84BF88E10FB6F89480936000109260000FBE81E085BF82E085BF8AB18063DB +:201760008AB98BB180638BB90CC1E9DF789401C080D2809100018823D9F780915C01882369 +:20178000B9F7D8DFE0915E01F0915F010995FA01923071F0933089F0913029F488E091E082 +:2017A00022E130E019C080E090E020E030E014C08AE191E02BE130E00FC0882339F48091D9 +:2017C0003501282F30E085E391E006C080913901282F30E089E391E091838083C9010895C0 +:2017E0008091EB0081608093EB001092ED006093EC004093ED008091EE00881F8827881FE4 +:2018000008951092F4001092F0001092E8001092ED00EBEEF0E080818E7F80830895809182 +:20182000730188238CF403C08EB38823B1F08091E80082FFF9CF8091E8008B7F8093E80079 +:2018400008958EB3882349F08091E80080FFF9CF8091E8008E7F8093E80008959C0140917A +:20186000790150917A014617570718F4F90120E038C06115710511F0AB01F8CF8091E80080 +:201880008E7F8093E80040E050E0F0CF8091E80083FF02C081E008958091E80082FD2DC091 +:2018A0008EB3882381F18EB3853079F18091E80080FF17C09091F20006C081918093F1002C +:2018C000415050409F5F4115510511F09032A8F320E0903209F421E08091E8008E7F809306 +:2018E000E8004115510591F6222381F606C08EB3882349F08EB3853041F08091E80082FF85 +:20190000F6CF80E0089582E0089583E0089554D056D01EBA1092710184E089BD89B5826006 +:2019200089BD09B400FEFDCF8091D800982F9F779093D80080688093D800809163008E7FC5 +:20194000809363008091D8008F7D8093D8008091E0008E7F8093E0008091E1008E7F80932E +:20196000E1008091E20081608093E2008091E100877F8093E1008091E20088608093E20001 +:201980000895C5DF81E0809372010895C0DFE0EEF0E0808181608083E8EDF0E080818F77B4 +:2019A00080830AD00CD019BCE3E6F0E08081816080831092720108951092E20008951092A6 +:2019C000E10008951F920F920FB60F9211242F933F934F935F936F937F938F939F93AF938A +:2019E000BF93EF93FF938091E10080FF1BC08091E20080FF17C08091E1008E7F8093E100F9 +:201A00008091E2008E7F8093E2008091E20080618093E2008091D80080628093D80019BC7D +:201A20001EBA26D18091E10084FF29C08091E20084FF25C084E089BD89B5826089BD09B451 +:201A400000FEFDCF8091D8008F7D8093D8008091E1008F7E8093E1008091E2008F7E8093D6 +:201A6000E2008091E20081608093E20080917101882311F481E001C084E08EBBF9D08091DF +:201A8000E10083FF22C08091E20083FF1EC08091E100877F8093E10082E08EBB1092710103 +:201AA0008091E1008E7F8093E1008091E2008E7F8093E2008091E20080618093E200A1DEF6 +:201AC00080E060E042E28CDED3D08091E10082FF0AC08091E20082FF06C08091E1008B7FC2 +:201AE0008093E100C5D0FF91EF91BF91AF919F918F917F916F915F914F913F912F910F905E +:201B00000FBE0F901F9018951F93DF93CF9300D0CDB7DEB7E3E7F1E08091F100819381E07C +:201B2000EB37F807C9F79091730180917401853011F1863040F48130B9F0813070F08330EA +:201B400009F081C011C0883009F453C0893009F462C0863009F077C02DC0903809F474C00E +:201B6000923809F070C070C0992309F46DC0923009F069C069C0992309F065C0109175015E +:201B80008091E800877F8093E80049DE04C08EB3882309F459C08091E80080FFF8CF812F6F +:201BA0008F7711F492E001C093E09EBB80688093E3004AC09058923008F045C08091750105 +:201BC0009091760160917701AE014F5F5F4FDFDDBC010097C9F18091E800877F8093E80035 +:201BE00089819A813BDE8091E8008B7F8093E8002BC0903841F58091E800877F8093E800C6 +:201C0000809171018093F1008091E8008E7F8093E80005DE19C09923B1F4909175019230C6 +:201C200098F48091E800877F8093E80090937101F6DD80917101882311F483E001C084E0FB +:201C40008EBB16D001C040DB8091E80083FF0AC08091EB0080628093EB008091E800877F59 +:201C60008093E8000F900F90CF91DF911F91089508958EB3882329F08091E80083FF01C030 +:201C800043CF0895F999FECF92BD81BDF89A992780B50895262FF999FECF1FBA92BD81BD6B +:201CA00020BD0FB6F894FA9AF99A0FBE01960895F894FFCF01021E938220DCFB1201100123 +:201CC00000000020EB03F72F00000001000109021B0001010080320904000000FE010200E6 +:201CE0000921030000000C0001040309042003410072006400750069006E006F002000552C +:101D0000006E006F002000440046005500000000F7 +:00000001FF diff --git a/external/arduino/avr/firmwares/atmegaxxu2/arduino-usbdfu/Arduino-usbdfu.c b/external/arduino/avr/firmwares/atmegaxxu2/arduino-usbdfu/Arduino-usbdfu.c new file mode 100644 index 000000000..18c761f7a --- /dev/null +++ b/external/arduino/avr/firmwares/atmegaxxu2/arduino-usbdfu/Arduino-usbdfu.c @@ -0,0 +1,728 @@ +/* + LUFA Library + Copyright (C) Dean Camera, 2010. + + dean [at] fourwalledcubicle [dot] com + www.fourwalledcubicle.com +*/ + +/* + Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com) + + Permission to use, copy, modify, distribute, and sell this + software and its documentation for any purpose is hereby granted + without fee, provided that the above copyright notice appear in + all copies and that both that the copyright notice and this + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the + software without specific, written prior permission. + + The author disclaim all warranties with regard to this + software, including all implied warranties of merchantability + and fitness. In no event shall the author be liable for any + special, indirect or consequential damages or any damages + whatsoever resulting from loss of use, data or profits, whether + in an action of contract, negligence or other tortious action, + arising out of or in connection with the use or performance of + this software. +*/ + +/** \file + * + * Main source file for the DFU class bootloader. This file contains the complete bootloader logic. + */ + +#define INCLUDE_FROM_BOOTLOADER_C +#include "Arduino-usbdfu.h" + +/** Flag to indicate if the bootloader should be running, or should exit and allow the application code to run + * via a soft reset. When cleared, the bootloader will abort, the USB interface will shut down and the application + * jumped to via an indirect jump to location 0x0000 (or other location specified by the host). + */ +bool RunBootloader = true; + +/** Flag to indicate if the bootloader is waiting to exit. When the host requests the bootloader to exit and + * jump to the application address it specifies, it sends two sequential commands which must be properly + * acknowledged. Upon reception of the first the RunBootloader flag is cleared and the WaitForExit flag is set, + * causing the bootloader to wait for the final exit command before shutting down. + */ +bool WaitForExit = false; + +/** Current DFU state machine state, one of the values in the DFU_State_t enum. */ +uint8_t DFU_State = dfuIDLE; + +/** Status code of the last executed DFU command. This is set to one of the values in the DFU_Status_t enum after + * each operation, and returned to the host when a Get Status DFU request is issued. + */ +uint8_t DFU_Status = OK; + +/** Data containing the DFU command sent from the host. */ +DFU_Command_t SentCommand; + +/** Response to the last issued Read Data DFU command. Unlike other DFU commands, the read command + * requires a single byte response from the bootloader containing the read data when the next DFU_UPLOAD command + * is issued by the host. + */ +uint8_t ResponseByte; + +/** Pointer to the start of the user application. By default this is 0x0000 (the reset vector), however the host + * may specify an alternate address when issuing the application soft-start command. + */ +AppPtr_t AppStartPtr = (AppPtr_t)0x0000; + +/** 64-bit flash page number. This is concatenated with the current 16-bit address on USB AVRs containing more than + * 64KB of flash memory. + */ +uint8_t Flash64KBPage = 0; + +/** Memory start address, indicating the current address in the memory being addressed (either FLASH or EEPROM + * depending on the issued command from the host). + */ +uint16_t StartAddr = 0x0000; + +/** Memory end address, indicating the end address to read to/write from in the memory being addressed (either FLASH + * of EEPROM depending on the issued command from the host). + */ +uint16_t EndAddr = 0x0000; + + +/** Pulse generation counters to keep track of the number of milliseconds remaining for each pulse type */ +volatile struct +{ + uint8_t TxLEDPulse; /**< Milliseconds remaining for data Tx LED pulse */ + uint8_t RxLEDPulse; /**< Milliseconds remaining for data Rx LED pulse */ + uint8_t PingPongLEDPulse; /**< Milliseconds remaining for enumeration Tx/Rx ping-pong LED pulse */ +} PulseMSRemaining; + +/** Main program entry point. This routine configures the hardware required by the bootloader, then continuously + * runs the bootloader processing routine until instructed to soft-exit, or hard-reset via the watchdog to start + * the loaded application code. + */ +int main(void) +{ + /* Configure hardware required by the bootloader */ + SetupHardware(); + + /* Enable global interrupts so that the USB stack can function */ + sei(); + + /* Run the USB management task while the bootloader is supposed to be running */ + while (RunBootloader || WaitForExit) + USB_USBTask(); + + /* Reset configured hardware back to their original states for the user application */ + ResetHardware(); + + /* Start the user application */ + AppStartPtr(); +} + +/** Configures all hardware required for the bootloader. */ +void SetupHardware(void) +{ + /* Disable watchdog if enabled by bootloader/fuses */ + MCUSR &= ~(1 << WDRF); + wdt_disable(); + + /* Disable clock division */ +// clock_prescale_set(clock_div_1); + + /* Relocate the interrupt vector table to the bootloader section */ + MCUCR = (1 << IVCE); + MCUCR = (1 << IVSEL); + + LEDs_Init(); + + /* Initialize the USB subsystem */ + USB_Init(); +} + +/** Resets all configured hardware required for the bootloader back to their original states. */ +void ResetHardware(void) +{ + /* Shut down the USB subsystem */ + USB_ShutDown(); + + /* Relocate the interrupt vector table back to the application section */ + MCUCR = (1 << IVCE); + MCUCR = 0; +} + +/** Event handler for the USB_UnhandledControlRequest event. This is used to catch standard and class specific + * control requests that are not handled internally by the USB library (including the DFU commands, which are + * all issued via the control endpoint), so that they can be handled appropriately for the application. + */ +void EVENT_USB_Device_UnhandledControlRequest(void) +{ + /* Get the size of the command and data from the wLength value */ + SentCommand.DataSize = USB_ControlRequest.wLength; + + /* Turn off TX LED(s) once the TX pulse period has elapsed */ + if (PulseMSRemaining.TxLEDPulse && !(--PulseMSRemaining.TxLEDPulse)) + LEDs_TurnOffLEDs(LEDMASK_TX); + + /* Turn off RX LED(s) once the RX pulse period has elapsed */ + if (PulseMSRemaining.RxLEDPulse && !(--PulseMSRemaining.RxLEDPulse)) + LEDs_TurnOffLEDs(LEDMASK_RX); + + switch (USB_ControlRequest.bRequest) + { + case DFU_DNLOAD: + LEDs_TurnOnLEDs(LEDMASK_RX); + PulseMSRemaining.RxLEDPulse = TX_RX_LED_PULSE_MS; + + Endpoint_ClearSETUP(); + + /* Check if bootloader is waiting to terminate */ + if (WaitForExit) + { + /* Bootloader is terminating - process last received command */ + ProcessBootloaderCommand(); + + /* Turn off TX/RX status LEDs so that they're not left on when application starts */ + LEDs_TurnOffLEDs(LEDMASK_TX); + LEDs_TurnOffLEDs(LEDMASK_RX); + + /* Indicate that the last command has now been processed - free to exit bootloader */ + WaitForExit = false; + } + + /* If the request has a data stage, load it into the command struct */ + if (SentCommand.DataSize) + { + while (!(Endpoint_IsOUTReceived())) + { + if (USB_DeviceState == DEVICE_STATE_Unattached) + return; + } + + /* First byte of the data stage is the DNLOAD request's command */ + SentCommand.Command = Endpoint_Read_Byte(); + + /* One byte of the data stage is the command, so subtract it from the total data bytes */ + SentCommand.DataSize--; + + /* Load in the rest of the data stage as command parameters */ + for (uint8_t DataByte = 0; (DataByte < sizeof(SentCommand.Data)) && + Endpoint_BytesInEndpoint(); DataByte++) + { + SentCommand.Data[DataByte] = Endpoint_Read_Byte(); + SentCommand.DataSize--; + } + + /* Process the command */ + ProcessBootloaderCommand(); + } + + /* Check if currently downloading firmware */ + if (DFU_State == dfuDNLOAD_IDLE) + { + if (!(SentCommand.DataSize)) + { + DFU_State = dfuIDLE; + } + else + { + /* Throw away the filler bytes before the start of the firmware */ + DiscardFillerBytes(DFU_FILLER_BYTES_SIZE); + + /* Throw away the packet alignment filler bytes before the start of the firmware */ + DiscardFillerBytes(StartAddr % FIXED_CONTROL_ENDPOINT_SIZE); + + /* Calculate the number of bytes remaining to be written */ + uint16_t BytesRemaining = ((EndAddr - StartAddr) + 1); + + if (IS_ONEBYTE_COMMAND(SentCommand.Data, 0x00)) // Write flash + { + /* Calculate the number of words to be written from the number of bytes to be written */ + uint16_t WordsRemaining = (BytesRemaining >> 1); + + union + { + uint16_t Words[2]; + uint32_t Long; + } CurrFlashAddress = {.Words = {StartAddr, Flash64KBPage}}; + + uint32_t CurrFlashPageStartAddress = CurrFlashAddress.Long; + uint8_t WordsInFlashPage = 0; + + while (WordsRemaining--) + { + /* Check if endpoint is empty - if so clear it and wait until ready for next packet */ + if (!(Endpoint_BytesInEndpoint())) + { + Endpoint_ClearOUT(); + + while (!(Endpoint_IsOUTReceived())) + { + if (USB_DeviceState == DEVICE_STATE_Unattached) + return; + } + } + + /* Write the next word into the current flash page */ + boot_page_fill(CurrFlashAddress.Long, Endpoint_Read_Word_LE()); + + /* Adjust counters */ + WordsInFlashPage += 1; + CurrFlashAddress.Long += 2; + + /* See if an entire page has been written to the flash page buffer */ + if ((WordsInFlashPage == (SPM_PAGESIZE >> 1)) || !(WordsRemaining)) + { + /* Commit the flash page to memory */ + boot_page_write(CurrFlashPageStartAddress); + boot_spm_busy_wait(); + + /* Check if programming incomplete */ + if (WordsRemaining) + { + CurrFlashPageStartAddress = CurrFlashAddress.Long; + WordsInFlashPage = 0; + + /* Erase next page's temp buffer */ + boot_page_erase(CurrFlashAddress.Long); + boot_spm_busy_wait(); + } + } + } + + /* Once programming complete, start address equals the end address */ + StartAddr = EndAddr; + + /* Re-enable the RWW section of flash */ + boot_rww_enable(); + } + else // Write EEPROM + { + while (BytesRemaining--) + { + /* Check if endpoint is empty - if so clear it and wait until ready for next packet */ + if (!(Endpoint_BytesInEndpoint())) + { + Endpoint_ClearOUT(); + + while (!(Endpoint_IsOUTReceived())) + { + if (USB_DeviceState == DEVICE_STATE_Unattached) + return; + } + } + + /* Read the byte from the USB interface and write to to the EEPROM */ + eeprom_write_byte((uint8_t*)StartAddr, Endpoint_Read_Byte()); + + /* Adjust counters */ + StartAddr++; + } + } + + /* Throw away the currently unused DFU file suffix */ + DiscardFillerBytes(DFU_FILE_SUFFIX_SIZE); + } + } + + Endpoint_ClearOUT(); + + Endpoint_ClearStatusStage(); + + break; + case DFU_UPLOAD: + Endpoint_ClearSETUP(); + + LEDs_TurnOnLEDs(LEDMASK_TX); + PulseMSRemaining.TxLEDPulse = TX_RX_LED_PULSE_MS; + + while (!(Endpoint_IsINReady())) + { + if (USB_DeviceState == DEVICE_STATE_Unattached) + return; + } + + if (DFU_State != dfuUPLOAD_IDLE) + { + if ((DFU_State == dfuERROR) && IS_ONEBYTE_COMMAND(SentCommand.Data, 0x01)) // Blank Check + { + /* Blank checking is performed in the DFU_DNLOAD request - if we get here we've told the host + that the memory isn't blank, and the host is requesting the first non-blank address */ + Endpoint_Write_Word_LE(StartAddr); + } + else + { + /* Idle state upload - send response to last issued command */ + Endpoint_Write_Byte(ResponseByte); + } + } + else + { + /* Determine the number of bytes remaining in the current block */ + uint16_t BytesRemaining = ((EndAddr - StartAddr) + 1); + + if (IS_ONEBYTE_COMMAND(SentCommand.Data, 0x00)) // Read FLASH + { + /* Calculate the number of words to be written from the number of bytes to be written */ + uint16_t WordsRemaining = (BytesRemaining >> 1); + + union + { + uint16_t Words[2]; + uint32_t Long; + } CurrFlashAddress = {.Words = {StartAddr, Flash64KBPage}}; + + while (WordsRemaining--) + { + /* Check if endpoint is full - if so clear it and wait until ready for next packet */ + if (Endpoint_BytesInEndpoint() == FIXED_CONTROL_ENDPOINT_SIZE) + { + Endpoint_ClearIN(); + + while (!(Endpoint_IsINReady())) + { + if (USB_DeviceState == DEVICE_STATE_Unattached) + return; + } + } + + /* Read the flash word and send it via USB to the host */ + #if (FLASHEND > 0xFFFF) + Endpoint_Write_Word_LE(pgm_read_word_far(CurrFlashAddress.Long)); + #else + Endpoint_Write_Word_LE(pgm_read_word(CurrFlashAddress.Long)); + #endif + + /* Adjust counters */ + CurrFlashAddress.Long += 2; + } + + /* Once reading is complete, start address equals the end address */ + StartAddr = EndAddr; + } + else if (IS_ONEBYTE_COMMAND(SentCommand.Data, 0x02)) // Read EEPROM + { + while (BytesRemaining--) + { + /* Check if endpoint is full - if so clear it and wait until ready for next packet */ + if (Endpoint_BytesInEndpoint() == FIXED_CONTROL_ENDPOINT_SIZE) + { + Endpoint_ClearIN(); + + while (!(Endpoint_IsINReady())) + { + if (USB_DeviceState == DEVICE_STATE_Unattached) + return; + } + } + + /* Read the EEPROM byte and send it via USB to the host */ + Endpoint_Write_Byte(eeprom_read_byte((uint8_t*)StartAddr)); + + /* Adjust counters */ + StartAddr++; + } + } + + /* Return to idle state */ + DFU_State = dfuIDLE; + } + + Endpoint_ClearIN(); + + Endpoint_ClearStatusStage(); + break; + case DFU_GETSTATUS: + Endpoint_ClearSETUP(); + + /* Write 8-bit status value */ + Endpoint_Write_Byte(DFU_Status); + + /* Write 24-bit poll timeout value */ + Endpoint_Write_Byte(0); + Endpoint_Write_Word_LE(0); + + /* Write 8-bit state value */ + Endpoint_Write_Byte(DFU_State); + + /* Write 8-bit state string ID number */ + Endpoint_Write_Byte(0); + + Endpoint_ClearIN(); + + Endpoint_ClearStatusStage(); + break; + case DFU_CLRSTATUS: + Endpoint_ClearSETUP(); + + /* Reset the status value variable to the default OK status */ + DFU_Status = OK; + + Endpoint_ClearStatusStage(); + break; + case DFU_GETSTATE: + Endpoint_ClearSETUP(); + + /* Write the current device state to the endpoint */ + Endpoint_Write_Byte(DFU_State); + + Endpoint_ClearIN(); + + Endpoint_ClearStatusStage(); + break; + case DFU_ABORT: + Endpoint_ClearSETUP(); + + /* Turn off TX/RX status LEDs so that they're not left on when application starts */ + LEDs_TurnOffLEDs(LEDMASK_TX); + LEDs_TurnOffLEDs(LEDMASK_RX); + + /* Reset the current state variable to the default idle state */ + DFU_State = dfuIDLE; + + Endpoint_ClearStatusStage(); + break; + } +} + +/** Routine to discard the specified number of bytes from the control endpoint stream. This is used to + * discard unused bytes in the stream from the host, including the memory program block suffix. + * + * \param[in] NumberOfBytes Number of bytes to discard from the host from the control endpoint + */ +static void DiscardFillerBytes(uint8_t NumberOfBytes) +{ + while (NumberOfBytes--) + { + if (!(Endpoint_BytesInEndpoint())) + { + Endpoint_ClearOUT(); + + /* Wait until next data packet received */ + while (!(Endpoint_IsOUTReceived())) + { + if (USB_DeviceState == DEVICE_STATE_Unattached) + return; + } + } + else + { + Endpoint_Discard_Byte(); + } + } +} + +/** Routine to process an issued command from the host, via a DFU_DNLOAD request wrapper. This routine ensures + * that the command is allowed based on the current secure mode flag value, and passes the command off to the + * appropriate handler function. + */ +static void ProcessBootloaderCommand(void) +{ + /* Check if device is in secure mode */ +// if (IsSecure) +// { +// /* Don't process command unless it is a READ or chip erase command */ +// if (!(((SentCommand.Command == COMMAND_WRITE) && +// IS_TWOBYTE_COMMAND(SentCommand.Data, 0x00, 0xFF)) || +// (SentCommand.Command == COMMAND_READ))) +// { +// /* Set the state and status variables to indicate the error */ +// DFU_State = dfuERROR; +// DFU_Status = errWRITE; +// +// /* Stall command */ +// Endpoint_StallTransaction(); +// +// /* Don't process the command */ +// return; +// } +// } + + /* Dispatch the required command processing routine based on the command type */ + switch (SentCommand.Command) + { + case COMMAND_PROG_START: + ProcessMemProgCommand(); + break; + case COMMAND_DISP_DATA: + ProcessMemReadCommand(); + break; + case COMMAND_WRITE: + ProcessWriteCommand(); + break; + case COMMAND_READ: + ProcessReadCommand(); + break; + case COMMAND_CHANGE_BASE_ADDR: + if (IS_TWOBYTE_COMMAND(SentCommand.Data, 0x03, 0x00)) // Set 64KB flash page command + Flash64KBPage = SentCommand.Data[2]; + break; + } +} + +/** Routine to concatenate the given pair of 16-bit memory start and end addresses from the host, and store them + * in the StartAddr and EndAddr global variables. + */ +static void LoadStartEndAddresses(void) +{ + union + { + uint8_t Bytes[2]; + uint16_t Word; + } Address[2] = {{.Bytes = {SentCommand.Data[2], SentCommand.Data[1]}}, + {.Bytes = {SentCommand.Data[4], SentCommand.Data[3]}}}; + + /* Load in the start and ending read addresses from the sent data packet */ + StartAddr = Address[0].Word; + EndAddr = Address[1].Word; +} + +/** Handler for a Memory Program command issued by the host. This routine handles the preparations needed + * to write subsequent data from the host into the specified memory. + */ +static void ProcessMemProgCommand(void) +{ + if (IS_ONEBYTE_COMMAND(SentCommand.Data, 0x00) || // Write FLASH command + IS_ONEBYTE_COMMAND(SentCommand.Data, 0x01)) // Write EEPROM command + { + /* Load in the start and ending read addresses */ + LoadStartEndAddresses(); + + /* If FLASH is being written to, we need to pre-erase the first page to write to */ + if (IS_ONEBYTE_COMMAND(SentCommand.Data, 0x00)) + { + union + { + uint16_t Words[2]; + uint32_t Long; + } CurrFlashAddress = {.Words = {StartAddr, Flash64KBPage}}; + + /* Erase the current page's temp buffer */ + boot_page_erase(CurrFlashAddress.Long); + boot_spm_busy_wait(); + } + + /* Set the state so that the next DNLOAD requests reads in the firmware */ + DFU_State = dfuDNLOAD_IDLE; + } +} + +/** Handler for a Memory Read command issued by the host. This routine handles the preparations needed + * to read subsequent data from the specified memory out to the host, as well as implementing the memory + * blank check command. + */ +static void ProcessMemReadCommand(void) +{ + if (IS_ONEBYTE_COMMAND(SentCommand.Data, 0x00) || // Read FLASH command + IS_ONEBYTE_COMMAND(SentCommand.Data, 0x02)) // Read EEPROM command + { + /* Load in the start and ending read addresses */ + LoadStartEndAddresses(); + + /* Set the state so that the next UPLOAD requests read out the firmware */ + DFU_State = dfuUPLOAD_IDLE; + } + else if (IS_ONEBYTE_COMMAND(SentCommand.Data, 0x01)) // Blank check FLASH command + { + uint32_t CurrFlashAddress = 0; + + while (CurrFlashAddress < BOOT_START_ADDR) + { + /* Check if the current byte is not blank */ + #if (FLASHEND > 0xFFFF) + if (pgm_read_byte_far(CurrFlashAddress) != 0xFF) + #else + if (pgm_read_byte(CurrFlashAddress) != 0xFF) + #endif + { + /* Save the location of the first non-blank byte for response back to the host */ + Flash64KBPage = (CurrFlashAddress >> 16); + StartAddr = CurrFlashAddress; + + /* Set state and status variables to the appropriate error values */ + DFU_State = dfuERROR; + DFU_Status = errCHECK_ERASED; + + break; + } + + CurrFlashAddress++; + } + } +} + +/** Handler for a Data Write command issued by the host. This routine handles non-programming commands such as + * bootloader exit (both via software jumps and hardware watchdog resets) and flash memory erasure. + */ +static void ProcessWriteCommand(void) +{ + if (IS_ONEBYTE_COMMAND(SentCommand.Data, 0x03)) // Start application + { + /* Indicate that the bootloader is terminating */ + WaitForExit = true; + + /* Check if data supplied for the Start Program command - no data executes the program */ + if (SentCommand.DataSize) + { + if (SentCommand.Data[1] == 0x01) // Start via jump + { + union + { + uint8_t Bytes[2]; + AppPtr_t FuncPtr; + } Address = {.Bytes = {SentCommand.Data[4], SentCommand.Data[3]}}; + + /* Load in the jump address into the application start address pointer */ + AppStartPtr = Address.FuncPtr; + } + } + else + { + if (SentCommand.Data[1] == 0x00) // Start via watchdog + { + /* Start the watchdog to reset the AVR once the communications are finalized */ + wdt_enable(WDTO_250MS); + } + else // Start via jump + { + /* Set the flag to terminate the bootloader at next opportunity */ + RunBootloader = false; + } + } + } + else if (IS_TWOBYTE_COMMAND(SentCommand.Data, 0x00, 0xFF)) // Erase flash + { + uint32_t CurrFlashAddress = 0; + + /* Clear the application section of flash */ + while (CurrFlashAddress < BOOT_START_ADDR) + { + boot_page_erase(CurrFlashAddress); + boot_spm_busy_wait(); + boot_page_write(CurrFlashAddress); + boot_spm_busy_wait(); + + CurrFlashAddress += SPM_PAGESIZE; + } + + /* Re-enable the RWW section of flash as writing to the flash locks it out */ + boot_rww_enable(); + + /* Memory has been erased, reset the security bit so that programming/reading is allowed */ +// IsSecure = false; + } +} + +/** Handler for a Data Read command issued by the host. This routine handles bootloader information retrieval + * commands such as device signature and bootloader version retrieval. + */ +static void ProcessReadCommand(void) +{ + const uint8_t BootloaderInfo[3] = {BOOTLOADER_VERSION, BOOTLOADER_ID_BYTE1, BOOTLOADER_ID_BYTE2}; + const uint8_t SignatureInfo[3] = {AVR_SIGNATURE_1, AVR_SIGNATURE_2, AVR_SIGNATURE_3}; + + uint8_t DataIndexToRead = SentCommand.Data[1]; + + if (IS_ONEBYTE_COMMAND(SentCommand.Data, 0x00)) // Read bootloader info + ResponseByte = BootloaderInfo[DataIndexToRead]; + else if (IS_ONEBYTE_COMMAND(SentCommand.Data, 0x01)) // Read signature byte + ResponseByte = SignatureInfo[DataIndexToRead - 0x30]; +} diff --git a/external/arduino/avr/firmwares/atmegaxxu2/arduino-usbdfu/Arduino-usbdfu.h b/external/arduino/avr/firmwares/atmegaxxu2/arduino-usbdfu/Arduino-usbdfu.h new file mode 100644 index 000000000..4adc7e554 --- /dev/null +++ b/external/arduino/avr/firmwares/atmegaxxu2/arduino-usbdfu/Arduino-usbdfu.h @@ -0,0 +1,220 @@ +/* + LUFA Library + Copyright (C) Dean Camera, 2010. + + dean [at] fourwalledcubicle [dot] com + www.fourwalledcubicle.com +*/ + +/* + Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com) + + Permission to use, copy, modify, distribute, and sell this + software and its documentation for any purpose is hereby granted + without fee, provided that the above copyright notice appear in + all copies and that both that the copyright notice and this + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the + software without specific, written prior permission. + + The author disclaim all warranties with regard to this + software, including all implied warranties of merchantability + and fitness. In no event shall the author be liable for any + special, indirect or consequential damages or any damages + whatsoever resulting from loss of use, data or profits, whether + in an action of contract, negligence or other tortious action, + arising out of or in connection with the use or performance of + this software. +*/ + +/** \file + * + * Header file for Arduino-usbdfu.c. + */ + +#ifndef _ARDUINO_USB_DFU_BOOTLOADER_H_ +#define _ARDUINO_USB_DFU_BOOTLOADER_H_ + + /* Includes: */ + #include + #include + #include + #include + #include + #include + #include + #include + + #include "Descriptors.h" + + #include + #include + + /* Macros: */ + /** LED mask for the library LED driver, to indicate TX activity. */ + #define LEDMASK_TX LEDS_LED1 + + /** LED mask for the library LED driver, to indicate RX activity. */ + #define LEDMASK_RX LEDS_LED2 + + /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */ + #define LEDMASK_ERROR (LEDS_LED1 | LEDS_LED2) + + /** LED mask for the library LED driver, to indicate that the USB interface is busy. */ + #define LEDMASK_BUSY (LEDS_LED1 | LEDS_LED2) + + /** Configuration define. Define this token to true to case the bootloader to reject all memory commands + * until a memory erase has been performed. When used in conjunction with the lockbits of the AVR, this + * can protect the AVR's firmware from being dumped from a secured AVR. When false, memory operations are + * allowed at any time. + */ +// #define SECURE_MODE false + + /** Major bootloader version number. */ + #define BOOTLOADER_VERSION_MINOR 2 + + /** Minor bootloader version number. */ + #define BOOTLOADER_VERSION_REV 0 + + /** Complete bootloader version number expressed as a packed byte, constructed from the + * two individual bootloader version macros. + */ + #define BOOTLOADER_VERSION ((BOOTLOADER_VERSION_MINOR << 4) | BOOTLOADER_VERSION_REV) + + /** First byte of the bootloader identification bytes, used to identify a device's bootloader. */ + #define BOOTLOADER_ID_BYTE1 0xDC + + /** Second byte of the bootloader identification bytes, used to identify a device's bootloader. */ + #define BOOTLOADER_ID_BYTE2 0xFB + + /** Convenience macro, used to determine if the issued command is the given one-byte long command. + * + * \param[in] dataarr Command byte array to check against + * \param[in] cb1 First command byte to check + */ + #define IS_ONEBYTE_COMMAND(dataarr, cb1) (dataarr[0] == (cb1)) + + /** Convenience macro, used to determine if the issued command is the given two-byte long command. + * + * \param[in] dataarr Command byte array to check against + * \param[in] cb1 First command byte to check + * \param[in] cb2 Second command byte to check + */ + #define IS_TWOBYTE_COMMAND(dataarr, cb1, cb2) ((dataarr[0] == (cb1)) && (dataarr[1] == (cb2))) + + /** Length of the DFU file suffix block, appended to the end of each complete memory write command. + * The DFU file suffix is currently unused (but is designed to give extra file information, such as + * a CRC of the complete firmware for error checking) and so is discarded. + */ + #define DFU_FILE_SUFFIX_SIZE 16 + + /** Length of the DFU file filler block, appended to the start of each complete memory write command. + * Filler bytes are added to the start of each complete memory write command, and must be discarded. + */ + #define DFU_FILLER_BYTES_SIZE 26 + + /** DFU class command request to detach from the host. */ + #define DFU_DETATCH 0x00 + + /** DFU class command request to send data from the host to the bootloader. */ + #define DFU_DNLOAD 0x01 + + /** DFU class command request to send data from the bootloader to the host. */ + #define DFU_UPLOAD 0x02 + + /** DFU class command request to get the current DFU status and state from the bootloader. */ + #define DFU_GETSTATUS 0x03 + + /** DFU class command request to reset the current DFU status and state variables to their defaults. */ + #define DFU_CLRSTATUS 0x04 + + /** DFU class command request to get the current DFU state of the bootloader. */ + #define DFU_GETSTATE 0x05 + + /** DFU class command request to abort the current multi-request transfer and return to the dfuIDLE state. */ + #define DFU_ABORT 0x06 + + /** DFU command to begin programming the device's memory. */ + #define COMMAND_PROG_START 0x01 + + /** DFU command to begin reading the device's memory. */ + #define COMMAND_DISP_DATA 0x03 + + /** DFU command to issue a write command. */ + #define COMMAND_WRITE 0x04 + + /** DFU command to issue a read command. */ + #define COMMAND_READ 0x05 + + /** DFU command to issue a memory base address change command, to set the current 64KB flash page + * that subsequent flash operations should use. */ + #define COMMAND_CHANGE_BASE_ADDR 0x06 + + /* Type Defines: */ + /** Type define for a non-returning function pointer to the loaded application. */ + typedef void (*AppPtr_t)(void) ATTR_NO_RETURN; + + /** Type define for a structure containing a complete DFU command issued by the host. */ + typedef struct + { + uint8_t Command; /**< Single byte command to perform, one of the COMMAND_* macro values */ + uint8_t Data[5]; /**< Command parameters */ + uint16_t DataSize; /**< Size of the command parameters */ + } DFU_Command_t; + + /* Enums: */ + /** DFU bootloader states. Refer to the DFU class specification for information on each state. */ + enum DFU_State_t + { + appIDLE = 0, + appDETACH = 1, + dfuIDLE = 2, + dfuDNLOAD_SYNC = 3, + dfuDNBUSY = 4, + dfuDNLOAD_IDLE = 5, + dfuMANIFEST_SYNC = 6, + dfuMANIFEST = 7, + dfuMANIFEST_WAIT_RESET = 8, + dfuUPLOAD_IDLE = 9, + dfuERROR = 10 + }; + + /** DFU command status error codes. Refer to the DFU class specification for information on each error code. */ + enum DFU_Status_t + { + OK = 0, + errTARGET = 1, + errFILE = 2, + errWRITE = 3, + errERASE = 4, + errCHECK_ERASED = 5, + errPROG = 6, + errVERIFY = 7, + errADDRESS = 8, + errNOTDONE = 9, + errFIRMWARE = 10, + errVENDOR = 11, + errUSBR = 12, + errPOR = 13, + errUNKNOWN = 14, + errSTALLEDPKT = 15 + }; + + /* Function Prototypes: */ + void SetupHardware(void); + void ResetHardware(void); + + void EVENT_USB_Device_UnhandledControlRequest(void); + + #if defined(INCLUDE_FROM_BOOTLOADER_C) + static void DiscardFillerBytes(uint8_t NumberOfBytes); + static void ProcessBootloaderCommand(void); + static void LoadStartEndAddresses(void); + static void ProcessMemProgCommand(void); + static void ProcessMemReadCommand(void); + static void ProcessWriteCommand(void); + static void ProcessReadCommand(void); + #endif + +#endif /* _ARDUINO_USB_DFU_BOOTLOADER_H_ */ diff --git a/external/arduino/avr/firmwares/atmegaxxu2/arduino-usbdfu/Board/LEDs.h b/external/arduino/avr/firmwares/atmegaxxu2/arduino-usbdfu/Board/LEDs.h new file mode 100644 index 000000000..41465f22d --- /dev/null +++ b/external/arduino/avr/firmwares/atmegaxxu2/arduino-usbdfu/Board/LEDs.h @@ -0,0 +1,110 @@ +/* + LUFA Library + Copyright (C) Dean Camera, 2010. + + dean [at] fourwalledcubicle [dot] com + www.fourwalledcubicle.com +*/ + +/* + Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com) + + Permission to use, copy, modify, distribute, and sell this + software and its documentation for any purpose is hereby granted + without fee, provided that the above copyright notice appear in + all copies and that both that the copyright notice and this + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the + software without specific, written prior permission. + + The author disclaim all warranties with regard to this + software, including all implied warranties of merchantability + and fitness. In no event shall the author be liable for any + special, indirect or consequential damages or any damages + whatsoever resulting from loss of use, data or profits, whether + in an action of contract, negligence or other tortious action, + arising out of or in connection with the use or performance of + this software. +*/ + +/* + Board LEDs driver for the Benito board, from www.dorkbotpdx.org. +*/ + +#ifndef __LEDS_ARDUINOUNO_H__ +#define __LEDS_ARDUINOUNO_H__ + + /* Includes: */ + #include + +/* Enable C linkage for C++ Compilers: */ + #if defined(__cplusplus) + extern "C" { + #endif + + /* Preprocessor Checks: */ + #if !defined(INCLUDE_FROM_LEDS_H) + #error Do not include this file directly. Include LUFA/Drivers/Board/LEDS.h instead. + #endif + + /* Public Interface - May be used in end-application: */ + /* Macros: */ + /** LED mask for the first LED on the board. */ + #define LEDS_LED1 (1 << 5) + + /** LED mask for the second LED on the board. */ + #define LEDS_LED2 (1 << 4) + + /** LED mask for all the LEDs on the board. */ + #define LEDS_ALL_LEDS (LEDS_LED1 | LEDS_LED2) + + /** LED mask for the none of the board LEDs */ + #define LEDS_NO_LEDS 0 + + /* Inline Functions: */ + #if !defined(__DOXYGEN__) + static inline void LEDs_Init(void) + { + DDRD |= LEDS_ALL_LEDS; + PORTD |= LEDS_ALL_LEDS; + } + + static inline void LEDs_TurnOnLEDs(const uint8_t LEDMask) + { + PORTD &= ~LEDMask; + } + + static inline void LEDs_TurnOffLEDs(const uint8_t LEDMask) + { + PORTD |= LEDMask; + } + + static inline void LEDs_SetAllLEDs(const uint8_t LEDMask) + { + PORTD = ((PORTD | LEDS_ALL_LEDS) & ~LEDMask); + } + + static inline void LEDs_ChangeLEDs(const uint8_t LEDMask, const uint8_t ActiveMask) + { + PORTD = ((PORTD | ActiveMask) & ~LEDMask); + } + + static inline void LEDs_ToggleLEDs(const uint8_t LEDMask) + { + PORTD ^= LEDMask; + } + + static inline uint8_t LEDs_GetLEDs(void) ATTR_WARN_UNUSED_RESULT; + static inline uint8_t LEDs_GetLEDs(void) + { + return (PORTD & LEDS_ALL_LEDS); + } + #endif + + /* Disable C linkage for C++ Compilers: */ + #if defined(__cplusplus) + } + #endif + +#endif diff --git a/external/arduino/avr/firmwares/atmegaxxu2/arduino-usbdfu/Descriptors.c b/external/arduino/avr/firmwares/atmegaxxu2/arduino-usbdfu/Descriptors.c new file mode 100644 index 000000000..1ec1cd223 --- /dev/null +++ b/external/arduino/avr/firmwares/atmegaxxu2/arduino-usbdfu/Descriptors.c @@ -0,0 +1,189 @@ +/* + LUFA Library + Copyright (C) Dean Camera, 2010. + + dean [at] fourwalledcubicle [dot] com + www.fourwalledcubicle.com +*/ + +/* + Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com) + + Permission to use, copy, modify, distribute, and sell this + software and its documentation for any purpose is hereby granted + without fee, provided that the above copyright notice appear in + all copies and that both that the copyright notice and this + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the + software without specific, written prior permission. + + The author disclaim all warranties with regard to this + software, including all implied warranties of merchantability + and fitness. In no event shall the author be liable for any + special, indirect or consequential damages or any damages + whatsoever resulting from loss of use, data or profits, whether + in an action of contract, negligence or other tortious action, + arising out of or in connection with the use or performance of + this software. +*/ + +/** \file + * + * USB Device Descriptors, for library use when in USB device mode. Descriptors are special + * computer-readable structures which the host requests upon device enumeration, to determine + * the device's capabilities and functions. + */ + +#include "Descriptors.h" + +/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall + * device characteristics, including the supported USB version, control endpoint size and the + * number of device configurations. The descriptor is read out by the USB host when the enumeration + * process begins. + */ +USB_Descriptor_Device_t DeviceDescriptor = +{ + .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device}, + + .USBSpecification = VERSION_BCD(01.10), + .Class = 0x00, + .SubClass = 0x00, + .Protocol = 0x00, + + .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE, + + .VendorID = 0x03EB, // Atmel + .ProductID = PRODUCT_ID_CODE, // MCU-dependent + .ReleaseNumber = 0x0000, + + .ManufacturerStrIndex = NO_DESCRIPTOR, + .ProductStrIndex = 0x01, + .SerialNumStrIndex = NO_DESCRIPTOR, + + .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS +}; + +/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage + * of the device in one of its supported configurations, including information about any device interfaces + * and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting + * a configuration so that the host may correctly communicate with the USB device. + */ +USB_Descriptor_Configuration_t ConfigurationDescriptor = +{ + .Config = + { + .Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration}, + + .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t), + .TotalInterfaces = 1, + + .ConfigurationNumber = 1, + .ConfigurationStrIndex = NO_DESCRIPTOR, + + .ConfigAttributes = USB_CONFIG_ATTR_BUSPOWERED, + + .MaxPowerConsumption = USB_CONFIG_POWER_MA(100) + }, + + .DFU_Interface = + { + .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, + + .InterfaceNumber = 0, + .AlternateSetting = 0, + + .TotalEndpoints = 0, + + .Class = 0xFE, + .SubClass = 0x01, + .Protocol = 0x02, + + .InterfaceStrIndex = NO_DESCRIPTOR + }, + + .DFU_Functional = + { + .Header = {.Size = sizeof(USB_DFU_Functional_Descriptor_t), .Type = DTYPE_DFUFunctional}, + + .Attributes = (ATTR_CAN_UPLOAD | ATTR_CAN_DOWNLOAD), + + .DetachTimeout = 0x0000, + .TransferSize = 0x0c00, + + .DFUSpecification = VERSION_BCD(01.01) + } +}; + +/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests + * the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate + * via the language ID table available at USB.org what languages the device supports for its string descriptors. + */ +USB_Descriptor_String_t LanguageString = +{ + .Header = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String}, + + .UnicodeString = {LANGUAGE_ID_ENG} +}; + +/** Product descriptor string. This is a Unicode string containing the product's details in human readable form, + * and is read out upon request by the host when the appropriate string ID is requested, listed in the Device + * Descriptor. + */ +USB_Descriptor_String_t ProductString = +{ + #if (ARDUINO_MODEL_PID == ARDUINO_UNO_PID) + .Header = {.Size = USB_STRING_LEN(15), .Type = DTYPE_String}, + + .UnicodeString = L"Arduino Uno DFU" + #elif (ARDUINO_MODEL_PID == ARDUINO_MEGA2560_PID) + .Header = {.Size = USB_STRING_LEN(21), .Type = DTYPE_String}, + + .UnicodeString = L"Arduino Mega 2560 DFU" + #endif +}; + +/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors" + * documentation) by the application code so that the address and size of a requested descriptor can be given + * to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function + * is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the + * USB host. + */ +uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, + const uint8_t wIndex, + void** const DescriptorAddress) +{ + const uint8_t DescriptorType = (wValue >> 8); + const uint8_t DescriptorNumber = (wValue & 0xFF); + + void* Address = NULL; + uint16_t Size = NO_DESCRIPTOR; + + switch (DescriptorType) + { + case DTYPE_Device: + Address = &DeviceDescriptor; + Size = sizeof(USB_Descriptor_Device_t); + break; + case DTYPE_Configuration: + Address = &ConfigurationDescriptor; + Size = sizeof(USB_Descriptor_Configuration_t); + break; + case DTYPE_String: + if (!(DescriptorNumber)) + { + Address = &LanguageString; + Size = LanguageString.Header.Size; + } + else + { + Address = &ProductString; + Size = ProductString.Header.Size; + } + + break; + } + + *DescriptorAddress = Address; + return Size; +} diff --git a/external/arduino/avr/firmwares/atmegaxxu2/arduino-usbdfu/Descriptors.h b/external/arduino/avr/firmwares/atmegaxxu2/arduino-usbdfu/Descriptors.h new file mode 100644 index 000000000..cb3a8ca1d --- /dev/null +++ b/external/arduino/avr/firmwares/atmegaxxu2/arduino-usbdfu/Descriptors.h @@ -0,0 +1,177 @@ +/* + LUFA Library + Copyright (C) Dean Camera, 2010. + + dean [at] fourwalledcubicle [dot] com + www.fourwalledcubicle.com +*/ + +/* + Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com) + + Permission to use, copy, modify, distribute, and sell this + software and its documentation for any purpose is hereby granted + without fee, provided that the above copyright notice appear in + all copies and that both that the copyright notice and this + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the + software without specific, written prior permission. + + The author disclaim all warranties with regard to this + software, including all implied warranties of merchantability + and fitness. In no event shall the author be liable for any + special, indirect or consequential damages or any damages + whatsoever resulting from loss of use, data or profits, whether + in an action of contract, negligence or other tortious action, + arising out of or in connection with the use or performance of + this software. +*/ + +/** \file + * + * Header file for Descriptors.c. + */ + +#ifndef _DESCRIPTORS_H_ +#define _DESCRIPTORS_H_ + + /* Includes: */ + #include + + /* Product-specific definitions: */ + #define ARDUINO_UNO_PID 0x0001 + #define ARDUINO_MEGA2560_PID 0x0010 + + /* Macros: */ + /** Descriptor type value for a DFU class functional descriptor. */ + #define DTYPE_DFUFunctional 0x21 + + /** DFU attribute mask, indicating that the DFU device will detach and re-attach when a DFU_DETACH + * command is issued, rather than the host issuing a USB Reset. + */ + #define ATTR_WILL_DETATCH (1 << 3) + + /** DFU attribute mask, indicating that the DFU device can communicate during the manifestation phase + * (memory programming phase). + */ + #define ATTR_MANEFESTATION_TOLLERANT (1 << 2) + + /** DFU attribute mask, indicating that the DFU device can accept DFU_UPLOAD requests to send data from + * the device to the host. + */ + #define ATTR_CAN_UPLOAD (1 << 1) + + /** DFU attribute mask, indicating that the DFU device can accept DFU_DNLOAD requests to send data from + * the host to the device. + */ + #define ATTR_CAN_DOWNLOAD (1 << 0) + + #if defined(__AVR_AT90USB1287__) + #define PRODUCT_ID_CODE 0x2FFB + #define AVR_SIGNATURE_1 0x1E + #define AVR_SIGNATURE_2 0x97 + #define AVR_SIGNATURE_3 0x82 + #elif defined(__AVR_AT90USB1286__) + #define PRODUCT_ID_CODE 0x2FFB + #define AVR_SIGNATURE_1 0x1E + #define AVR_SIGNATURE_2 0x97 + #define AVR_SIGNATURE_3 0x82 + #elif defined(__AVR_AT90USB647__) + #define PRODUCT_ID_CODE 0x2FF9 + #define AVR_SIGNATURE_1 0x1E + #define AVR_SIGNATURE_2 0x96 + #define AVR_SIGNATURE_3 0x82 + #elif defined(__AVR_AT90USB646__) + #define PRODUCT_ID_CODE 0x2FF9 + #define AVR_SIGNATURE_1 0x1E + #define AVR_SIGNATURE_2 0x96 + #define AVR_SIGNATURE_3 0x82 + #elif defined(__AVR_ATmega32U6__) + #define PRODUCT_ID_CODE 0x2FFB + #define AVR_SIGNATURE_1 0x1E + #define AVR_SIGNATURE_2 0x95 + #define AVR_SIGNATURE_3 0x88 + #elif defined(__AVR_ATmega32U4__) + #define PRODUCT_ID_CODE 0x2FF4 + #define AVR_SIGNATURE_1 0x1E + #define AVR_SIGNATURE_2 0x95 + #define AVR_SIGNATURE_3 0x87 + #elif defined(__AVR_ATmega32U2__) + #define PRODUCT_ID_CODE 0x2FF0 + #define AVR_SIGNATURE_1 0x1E + #define AVR_SIGNATURE_2 0x95 + #define AVR_SIGNATURE_3 0x8A + #elif defined(__AVR_ATmega16U4__) + #define PRODUCT_ID_CODE 0x2FF3 + #define AVR_SIGNATURE_1 0x1E + #define AVR_SIGNATURE_2 0x94 + #define AVR_SIGNATURE_3 0x88 + #elif defined(__AVR_ATmega16U2__) + #define PRODUCT_ID_CODE 0x2FEF + #define AVR_SIGNATURE_1 0x1E + #define AVR_SIGNATURE_2 0x94 + #define AVR_SIGNATURE_3 0x89 + #elif defined(__AVR_AT90USB162__) + #define PRODUCT_ID_CODE 0x2FFA + #define AVR_SIGNATURE_1 0x1E + #define AVR_SIGNATURE_2 0x94 + #define AVR_SIGNATURE_3 0x82 + #elif defined(__AVR_AT90USB82__) + #define PRODUCT_ID_CODE 0x2FEE + #define AVR_SIGNATURE_1 0x1E + #define AVR_SIGNATURE_2 0x93 + #define AVR_SIGNATURE_3 0x89 + #elif defined(__AVR_ATmega8U2__) + #define PRODUCT_ID_CODE 0x2FF7 + #define AVR_SIGNATURE_1 0x1E + #define AVR_SIGNATURE_2 0x93 + #define AVR_SIGNATURE_3 0x82 + #else + #error The selected AVR part is not currently supported by this bootloader. + #endif + + #if !defined(PRODUCT_ID_CODE) + #error Current AVR model is not supported by this bootloader. + #endif + + /* Type Defines: */ + /** Type define for a DFU class function descriptor. This descriptor gives DFU class information + * to the host when read, indicating the DFU device's capabilities. + */ + typedef struct + { + USB_Descriptor_Header_t Header; /**< Standard descriptor header structure */ + + uint8_t Attributes; /**< DFU device attributes, a mask comprising of the + * ATTR_* macros listed in this source file + */ + uint16_t DetachTimeout; /**< Timeout in milliseconds between a USB_DETACH + * command being issued and the device detaching + * from the USB bus + */ + uint16_t TransferSize; /**< Maximum number of bytes the DFU device can accept + * from the host in a transaction + */ + uint16_t DFUSpecification; /**< BCD packed DFU specification number this DFU + * device complies with + */ + } USB_DFU_Functional_Descriptor_t; + + /** Type define for the device configuration descriptor structure. This must be defined in the + * application code, as the configuration descriptor contains several sub-descriptors which + * vary between devices, and which describe the device's usage to the host. + */ + typedef struct + { + USB_Descriptor_Configuration_Header_t Config; + USB_Descriptor_Interface_t DFU_Interface; + USB_DFU_Functional_Descriptor_t DFU_Functional; + } USB_Descriptor_Configuration_t; + + /* Function Prototypes: */ + uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, + const uint8_t wIndex, + void** const DescriptorAddress) ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); + +#endif diff --git a/external/arduino/avr/firmwares/atmegaxxu2/arduino-usbdfu/makefile b/external/arduino/avr/firmwares/atmegaxxu2/arduino-usbdfu/makefile new file mode 100644 index 000000000..04a052175 --- /dev/null +++ b/external/arduino/avr/firmwares/atmegaxxu2/arduino-usbdfu/makefile @@ -0,0 +1,710 @@ +# Hey Emacs, this is a -*- makefile -*- +#---------------------------------------------------------------------------- +# WinAVR Makefile Template written by Eric B. Weddington, Jrg Wunsch, et al. +# >> Modified for use with the LUFA project. << +# +# Released to the Public Domain +# +# Additional material for this makefile was written by: +# Peter Fleury +# Tim Henigan +# Colin O'Flynn +# Reiner Patommel +# Markus Pfaff +# Sander Pool +# Frederik Rouleau +# Carlos Lamas +# Dean Camera +# Opendous Inc. +# Denver Gingerich +# +#---------------------------------------------------------------------------- +# On command line: +# +# make all = Make software. +# +# make clean = Clean out built project files. +# +# make coff = Convert ELF to AVR COFF. +# +# make extcoff = Convert ELF to AVR Extended COFF. +# +# make program = Download the hex file to the device, using avrdude. +# Please customize the avrdude settings below first! +# +# make doxygen = Generate DoxyGen documentation for the project (must have +# DoxyGen installed) +# +# make debug = Start either simulavr or avarice as specified for debugging, +# with avr-gdb or avr-insight as the front end for debugging. +# +# make filename.s = Just compile filename.c into the assembler code only. +# +# make filename.i = Create a preprocessed source file for use in submitting +# bug reports to the GCC project. +# +# To rebuild project do "make clean" then "make all". +#---------------------------------------------------------------------------- + + +# MCU name +MCU = atmega8u2 +MCU_AVRDUDE = at90usb82 + +# Specify the Arduino model using the assigned PID. This is used by Descriptors.c +# to set the product descriptor string (for DFU we must use the PID for each +# chip that dfu-bootloader or Flip expect) +# Uno PID: +ARDUINO_MODEL_PID = 0x0001 +# Mega 2560 PID: +#ARDUINO_MODEL_PID = 0x0010 + +# Target board (see library "Board Types" documentation, NONE for projects not requiring +# LUFA board drivers). If USER is selected, put custom board drivers in a directory called +# "Board" inside the application directory. +BOARD = USER + + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_CLOCK below, as it is sourced by +# F_CLOCK after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# Input clock frequency. +# This will define a symbol, F_CLOCK, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_CLOCK = $(F_CPU) + + +# Starting byte address of the bootloader, as a byte address - computed via the formula +# BOOT_START = ((TOTAL_FLASH_BYTES - BOOTLOADER_SECTION_SIZE_BYTES) * 1024) +# +# Note that the bootloader size and start address given in AVRStudio is in words and not +# bytes, and so will need to be doubled to obtain the byte address needed by AVR-GCC. +BOOT_START = 0x1000 + + +# Output format. (can be srec, ihex, binary) +FORMAT = ihex + + +# Target file name (without extension). +TARGET = Arduino-usbdfu + + +# Object files directory +# To put object files in current directory, use a dot (.), do NOT make +# this an empty or blank macro! +OBJDIR = . + + +# Path to the LUFA library +LUFA_PATH = ../.. + + +# LUFA library compile-time options and predefined tokens +LUFA_OPTS = -D USB_DEVICE_ONLY +LUFA_OPTS += -D DEVICE_STATE_AS_GPIOR=0 +LUFA_OPTS += -D CONTROL_ONLY_DEVICE +LUFA_OPTS += -D FIXED_CONTROL_ENDPOINT_SIZE=32 +LUFA_OPTS += -D FIXED_NUM_CONFIGURATIONS=1 +LUFA_OPTS += -D USE_RAM_DESCRIPTORS +LUFA_OPTS += -D USE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" +LUFA_OPTS += -D NO_INTERNAL_SERIAL +LUFA_OPTS += -D NO_DEVICE_SELF_POWER +LUFA_OPTS += -D NO_DEVICE_REMOTE_WAKEUP +LUFA_OPTS += -D NO_STREAM_CALLBACKS + + +# Create the LUFA source path variables by including the LUFA root makefile +include $(LUFA_PATH)/LUFA/makefile + + +# List C source files here. (C dependencies are automatically generated.) +SRC = $(TARGET).c \ + Descriptors.c \ + $(LUFA_SRC_USB) \ + + +# List C++ source files here. (C dependencies are automatically generated.) +CPPSRC = + + +# List Assembler source files here. +# Make them always end in a capital .S. Files ending in a lowercase .s +# will not be considered source files but generated files (assembler +# output from the compiler), and will be deleted upon "make clean"! +# Even though the DOS/Win* filesystem matches both .s and .S the same, +# it will preserve the spelling of the filenames, and gcc itself does +# care about how the name is spelled on its command-line. +ASRC = + + +# Optimization level, can be [0, 1, 2, 3, s]. +# 0 = turn off optimization. s = optimize for size. +# (Note: 3 is not always the best optimization level. See avr-libc FAQ.) +OPT = s + + +# Debugging format. +# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs. +# AVR Studio 4.10 requires dwarf-2. +# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run. +DEBUG = dwarf-2 + + +# List any extra directories to look for include files here. +# Each directory must be seperated by a space. +# Use forward slashes for directory separators. +# For a directory that has spaces, enclose it in quotes. +EXTRAINCDIRS = $(LUFA_PATH)/ + + +# Compiler flag to set the C Standard level. +# c89 = "ANSI" C +# gnu89 = c89 plus GCC extensions +# c99 = ISO C99 standard (not yet fully implemented) +# gnu99 = c99 plus GCC extensions +CSTANDARD = -std=c99 + + +# Place -D or -U options here for C sources +CDEFS = -DF_CPU=$(F_CPU)UL +CDEFS += -DARDUINO_MODEL_PID=$(ARDUINO_MODEL_PID) +CDEFS += -DF_CLOCK=$(F_CLOCK)UL +CDEFS += -DBOARD=BOARD_$(BOARD) +CDEFS += -DBOOT_START_ADDR=$(BOOT_START)UL +CDEFS += -DTX_RX_LED_PULSE_MS=3 +CDEFS += $(LUFA_OPTS) + + +# Place -D or -U options here for ASM sources +ADEFS = -DF_CPU=$(F_CPU) +ADEFS += -DF_CLOCK=$(F_CLOCK)UL +ADEFS += -DBOARD=BOARD_$(BOARD) +CDEFS += -DBOOT_START_ADDR=$(BOOT_START)UL +ADEFS += $(LUFA_OPTS) + +# Place -D or -U options here for C++ sources +CPPDEFS = -DF_CPU=$(F_CPU)UL +CPPDEFS += -DF_CLOCK=$(F_CLOCK)UL +CPPDEFS += -DBOARD=BOARD_$(BOARD) +CDEFS += -DBOOT_START_ADDR=$(BOOT_START)UL +CPPDEFS += $(LUFA_OPTS) +#CPPDEFS += -D__STDC_LIMIT_MACROS +#CPPDEFS += -D__STDC_CONSTANT_MACROS + + + +#---------------- Compiler Options C ---------------- +# -g*: generate debugging information +# -O*: optimization level +# -f...: tuning, see GCC manual and avr-libc documentation +# -Wall...: warning level +# -Wa,...: tell GCC to pass this to the assembler. +# -adhlns...: create assembler listing +CFLAGS = -g$(DEBUG) +CFLAGS += $(CDEFS) +CFLAGS += -O$(OPT) +CFLAGS += -funsigned-char +CFLAGS += -funsigned-bitfields +CFLAGS += -ffunction-sections +CFLAGS += -fno-inline-small-functions +CFLAGS += -fpack-struct +CFLAGS += -fshort-enums +CFLAGS += -fno-strict-aliasing +CFLAGS += -Wall +CFLAGS += -Wstrict-prototypes +#CFLAGS += -mshort-calls +#CFLAGS += -fno-unit-at-a-time +#CFLAGS += -Wundef +#CFLAGS += -Wunreachable-code +#CFLAGS += -Wsign-compare +CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst) +CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) +CFLAGS += $(CSTANDARD) + + +#---------------- Compiler Options C++ ---------------- +# -g*: generate debugging information +# -O*: optimization level +# -f...: tuning, see GCC manual and avr-libc documentation +# -Wall...: warning level +# -Wa,...: tell GCC to pass this to the assembler. +# -adhlns...: create assembler listing +CPPFLAGS = -g$(DEBUG) +CPPFLAGS += $(CPPDEFS) +CPPFLAGS += -O$(OPT) +CPPFLAGS += -funsigned-char +CPPFLAGS += -funsigned-bitfields +CPPFLAGS += -fpack-struct +CPPFLAGS += -fshort-enums +CPPFLAGS += -fno-exceptions +CPPFLAGS += -Wall +CPPFLAGS += -Wundef +#CPPFLAGS += -mshort-calls +#CPPFLAGS += -fno-unit-at-a-time +#CPPFLAGS += -Wstrict-prototypes +#CPPFLAGS += -Wunreachable-code +#CPPFLAGS += -Wsign-compare +CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst) +CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) +#CPPFLAGS += $(CSTANDARD) + + +#---------------- Assembler Options ---------------- +# -Wa,...: tell GCC to pass this to the assembler. +# -adhlns: create listing +# -gstabs: have the assembler create line number information; note that +# for use in COFF files, additional information about filenames +# and function names needs to be present in the assembler source +# files -- see avr-libc docs [FIXME: not yet described there] +# -listing-cont-lines: Sets the maximum number of continuation lines of hex +# dump that will be displayed for a given single line of source input. +ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100 + + +#---------------- Library Options ---------------- +# Minimalistic printf version +PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min + +# Floating point printf version (requires MATH_LIB = -lm below) +PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt + +# If this is left blank, then it will use the Standard printf version. +PRINTF_LIB = +#PRINTF_LIB = $(PRINTF_LIB_MIN) +#PRINTF_LIB = $(PRINTF_LIB_FLOAT) + + +# Minimalistic scanf version +SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min + +# Floating point + %[ scanf version (requires MATH_LIB = -lm below) +SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt + +# If this is left blank, then it will use the Standard scanf version. +SCANF_LIB = +#SCANF_LIB = $(SCANF_LIB_MIN) +#SCANF_LIB = $(SCANF_LIB_FLOAT) + + +MATH_LIB = -lm + + +# List any extra directories to look for libraries here. +# Each directory must be seperated by a space. +# Use forward slashes for directory separators. +# For a directory that has spaces, enclose it in quotes. +EXTRALIBDIRS = + + + +#---------------- External Memory Options ---------------- + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# used for variables (.data/.bss) and heap (malloc()). +#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# only used for heap (malloc()). +#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff + +EXTMEMOPTS = + + + +#---------------- Linker Options ---------------- +# -Wl,...: tell GCC to pass this to linker. +# -Map: create map file +# --cref: add cross reference to map file +LDFLAGS = -Wl,-Map=$(TARGET).map,--cref +LDFLAGS += -Wl,--section-start=.text=$(BOOT_START) +LDFLAGS += -Wl,--relax +LDFLAGS += -Wl,--gc-sections +LDFLAGS += $(EXTMEMOPTS) +LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS)) +LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) +#LDFLAGS += -T linker_script.x + + + +#---------------- Programming Options (avrdude) ---------------- + +# Fuse settings for Arduino Uno DFU bootloader project +AVRDUDE_FUSES = -U efuse:w:0xF4:m -U hfuse:w:0xD9:m -U lfuse:w:0xFF:m + +# Lock settings for Arduino Uno DFU bootloader project +AVRDUDE_LOCK = -U lock:w:0x0F:m + +# Programming hardware +# Type: avrdude -c ? +# to get a full listing. +# +AVRDUDE_PROGRAMMER = avrispmkii + +# com1 = serial port. Use lpt1 to connect to parallel port. +AVRDUDE_PORT = usb + +AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex +#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep + +# Uncomment the following if you want avrdude's erase cycle counter. +# Note that this counter needs to be initialized first using -Yn, +# see avrdude manual. +#AVRDUDE_ERASE_COUNTER = -y + +# Uncomment the following if you do /not/ wish a verification to be +# performed after programming the device. +#AVRDUDE_NO_VERIFY = -V + +# Increase verbosity level. Please use this when submitting bug +# reports about avrdude. See +# to submit bug reports. +#AVRDUDE_VERBOSE = -v -v + +AVRDUDE_FLAGS = -p $(MCU_AVRDUDE) -F -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) +AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY) +AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE) +AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER) + + + +#---------------- Debugging Options ---------------- + +# For simulavr only - target MCU frequency. +DEBUG_MFREQ = $(F_CPU) + +# Set the DEBUG_UI to either gdb or insight. +# DEBUG_UI = gdb +DEBUG_UI = insight + +# Set the debugging back-end to either avarice, simulavr. +DEBUG_BACKEND = avarice +#DEBUG_BACKEND = simulavr + +# GDB Init Filename. +GDBINIT_FILE = __avr_gdbinit + +# When using avarice settings for the JTAG +JTAG_DEV = /dev/com1 + +# Debugging port used to communicate between GDB / avarice / simulavr. +DEBUG_PORT = 4242 + +# Debugging host used to communicate between GDB / avarice / simulavr, normally +# just set to localhost unless doing some sort of crazy debugging when +# avarice is running on a different computer. +DEBUG_HOST = localhost + + + +#============================================================================ + + +# Define programs and commands. +SHELL = sh +CC = avr-gcc +OBJCOPY = avr-objcopy +OBJDUMP = avr-objdump +SIZE = avr-size +AR = avr-ar rcs +NM = avr-nm +AVRDUDE = avrdude +REMOVE = rm -f +REMOVEDIR = rm -rf +COPY = cp +WINSHELL = cmd + + +# Define Messages +# English +MSG_ERRORS_NONE = Errors: none +MSG_BEGIN = -------- begin -------- +MSG_END = -------- end -------- +MSG_SIZE_BEFORE = Size before: +MSG_SIZE_AFTER = Size after: +MSG_COFF = Converting to AVR COFF: +MSG_EXTENDED_COFF = Converting to AVR Extended COFF: +MSG_FLASH = Creating load file for Flash: +MSG_EEPROM = Creating load file for EEPROM: +MSG_EXTENDED_LISTING = Creating Extended Listing: +MSG_SYMBOL_TABLE = Creating Symbol Table: +MSG_LINKING = Linking: +MSG_COMPILING = Compiling C: +MSG_COMPILING_CPP = Compiling C++: +MSG_ASSEMBLING = Assembling: +MSG_CLEANING = Cleaning project: +MSG_CREATING_LIBRARY = Creating library: + + + + +# Define all object files. +OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) + +# Define all listing files. +LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) + + +# Compiler flags to generate dependency files. +GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d + + +# Combine all necessary flags and optional flags. +# Add target processor to flags. +ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS) +ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS) +ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) + + + + + +# Default target. +all: begin gccversion sizebefore build sizeafter end + +# Change the build target to build a HEX file or a library. +build: elf hex eep lss sym +#build: lib + + +elf: $(TARGET).elf +hex: $(TARGET).hex +eep: $(TARGET).eep +lss: $(TARGET).lss +sym: $(TARGET).sym +LIBNAME=lib$(TARGET).a +lib: $(LIBNAME) + + + +# Eye candy. +# AVR Studio 3.x does not check make's exit code but relies on +# the following magic strings to be generated by the compile job. +begin: + @echo + @echo $(MSG_BEGIN) + +end: + @echo $(MSG_END) + @echo + + +# Display size of file. +HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex +ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf +MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) ) +FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr ) + + +sizebefore: + @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \ + 2>/dev/null; echo; fi + +sizeafter: + @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \ + 2>/dev/null; echo; fi + + + +# Display compiler version information. +gccversion : + @$(CC) --version + + +# Program the device. +program: $(TARGET).hex $(TARGET).eep + $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) $(AVRDUDE_FUSES) $(AVRDUDE_LOCK) + + +# Generate avr-gdb config/init file which does the following: +# define the reset signal, load the target file, connect to target, and set +# a breakpoint at main(). +gdb-config: + @$(REMOVE) $(GDBINIT_FILE) + @echo define reset >> $(GDBINIT_FILE) + @echo SIGNAL SIGHUP >> $(GDBINIT_FILE) + @echo end >> $(GDBINIT_FILE) + @echo file $(TARGET).elf >> $(GDBINIT_FILE) + @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE) +ifeq ($(DEBUG_BACKEND),simulavr) + @echo load >> $(GDBINIT_FILE) +endif + @echo break main >> $(GDBINIT_FILE) + +debug: gdb-config $(TARGET).elf +ifeq ($(DEBUG_BACKEND), avarice) + @echo Starting AVaRICE - Press enter when "waiting to connect" message displays. + @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \ + $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT) + @$(WINSHELL) /c pause + +else + @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \ + $(DEBUG_MFREQ) --port $(DEBUG_PORT) +endif + @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE) + + + + +# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. +COFFCONVERT = $(OBJCOPY) --debugging +COFFCONVERT += --change-section-address .data-0x800000 +COFFCONVERT += --change-section-address .bss-0x800000 +COFFCONVERT += --change-section-address .noinit-0x800000 +COFFCONVERT += --change-section-address .eeprom-0x810000 + + + +coff: $(TARGET).elf + @echo + @echo $(MSG_COFF) $(TARGET).cof + $(COFFCONVERT) -O coff-avr $< $(TARGET).cof + + +extcoff: $(TARGET).elf + @echo + @echo $(MSG_EXTENDED_COFF) $(TARGET).cof + $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof + + + +# Create final output files (.hex, .eep) from ELF output file. +%.hex: %.elf + @echo + @echo $(MSG_FLASH) $@ + $(OBJCOPY) -O $(FORMAT) -R .eeprom -R .fuse -R .lock $< $@ + +%.eep: %.elf + @echo + @echo $(MSG_EEPROM) $@ + -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ + --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0 + +# Create extended listing file from ELF output file. +%.lss: %.elf + @echo + @echo $(MSG_EXTENDED_LISTING) $@ + $(OBJDUMP) -h -S -z $< > $@ + +# Create a symbol table from ELF output file. +%.sym: %.elf + @echo + @echo $(MSG_SYMBOL_TABLE) $@ + $(NM) -n $< > $@ + + + +# Create library from object files. +.SECONDARY : $(TARGET).a +.PRECIOUS : $(OBJ) +%.a: $(OBJ) + @echo + @echo $(MSG_CREATING_LIBRARY) $@ + $(AR) $@ $(OBJ) + + +# Link: create ELF output file from object files. +.SECONDARY : $(TARGET).elf +.PRECIOUS : $(OBJ) +%.elf: $(OBJ) + @echo + @echo $(MSG_LINKING) $@ + $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS) + + +# Compile: create object files from C source files. +$(OBJDIR)/%.o : %.c + @echo + @echo $(MSG_COMPILING) $< + $(CC) -c $(ALL_CFLAGS) $< -o $@ + + +# Compile: create object files from C++ source files. +$(OBJDIR)/%.o : %.cpp + @echo + @echo $(MSG_COMPILING_CPP) $< + $(CC) -c $(ALL_CPPFLAGS) $< -o $@ + + +# Compile: create assembler files from C source files. +%.s : %.c + $(CC) -S $(ALL_CFLAGS) $< -o $@ + + +# Compile: create assembler files from C++ source files. +%.s : %.cpp + $(CC) -S $(ALL_CPPFLAGS) $< -o $@ + + +# Assemble: create object files from assembler source files. +$(OBJDIR)/%.o : %.S + @echo + @echo $(MSG_ASSEMBLING) $< + $(CC) -c $(ALL_ASFLAGS) $< -o $@ + + +# Create preprocessed source for use in sending a bug report. +%.i : %.c + $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ + + +# Target: clean project. +clean: begin clean_list end + +clean_list : + @echo + @echo $(MSG_CLEANING) + $(REMOVE) $(TARGET).hex + $(REMOVE) $(TARGET).eep + $(REMOVE) $(TARGET).cof + $(REMOVE) $(TARGET).elf + $(REMOVE) $(TARGET).map + $(REMOVE) $(TARGET).sym + $(REMOVE) $(TARGET).lss + $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o) + $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst) + $(REMOVE) $(SRC:.c=.s) + $(REMOVE) $(SRC:.c=.d) + $(REMOVE) $(SRC:.c=.i) + $(REMOVEDIR) .dep + +doxygen: + @echo Generating Project Documentation... + @doxygen Doxygen.conf + @echo Documentation Generation Complete. + +clean_doxygen: + rm -rf Documentation + +# Create object files directory +$(shell mkdir $(OBJDIR) 2>/dev/null) + + +# Include the dependency files. +-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*) + + +# Listing of phony targets. +.PHONY : all begin finish end sizebefore sizeafter gccversion \ +build elf hex eep lss sym coff extcoff doxygen clean \ +clean_list clean_doxygen program debug gdb-config diff --git a/external/arduino/avr/firmwares/atmegaxxu2/arduino-usbdfu/readme.txt b/external/arduino/avr/firmwares/atmegaxxu2/arduino-usbdfu/readme.txt new file mode 100644 index 000000000..e376679c2 --- /dev/null +++ b/external/arduino/avr/firmwares/atmegaxxu2/arduino-usbdfu/readme.txt @@ -0,0 +1,7 @@ +To setup the project and program an ATMEG8U2 with the Arduino USB DFU bootloader: +1. unpack the source into LUFA's Bootloader directory +2. set ARDUINO_MODEL_PID in the makefile as appropriate +3. do "make clean; make; make program" + +Check that the board enumerates as either "Arduino Uno DFU" or "Arduino Mega 2560 DFU". Test by uploading the Arduino-usbserial application firmware (see instructions in Arduino-usbserial directory) + diff --git a/external/arduino/avr/firmwares/atmegaxxu2/arduino-usbserial/Arduino-usbserial-atmega16u2-Mega2560-Rev3.hex b/external/arduino/avr/firmwares/atmegaxxu2/arduino-usbserial/Arduino-usbserial-atmega16u2-Mega2560-Rev3.hex new file mode 100644 index 000000000..6ff364479 --- /dev/null +++ b/external/arduino/avr/firmwares/atmegaxxu2/arduino-usbserial/Arduino-usbserial-atmega16u2-Mega2560-Rev3.hex @@ -0,0 +1,254 @@ +:1000000090C00000A9C00000A7C00000A5C000006B +:10001000A3C00000A1C000009FC000009DC0000060 +:100020009BC0000099C0000097C0000048C40000B9 +:100030000CC4000091C000008FC000008DC0000003 +:100040008BC0000089C0000087C0000085C0000090 +:1000500083C0000081C000007FC0000002C100001A +:100060007BC0000079C0000077C0000075C00000B0 +:1000700073C0000071C000006FC000006DC00000C0 +:100080006BC0000069C0000067C0000065C00000D0 +:1000900063C0000061C000001201100102000008EE +:1000A0004123420001000102DC0109023E0002017D +:1000B00000C0320904000001020201000524000111 +:1000C0001004240206052406000107058203080027 +:1000D000FF09040100020A000000070504024000B5 +:1000E00001070583024000010403090432034100B3 +:1000F00072006400750069006E006F002000280027 +:100100007700770077002E006100720064007500B0 +:1001100069006E006F002E0063006300290000007C +:10012000000011241FBECFEFD2E0DEBFCDBF11E033 +:10013000A0E0B1E0ECEAFFE002C005900D92A6312C +:10014000B107D9F712E0A6E1B1E001C01D92AF32CC +:10015000B107E1F7F1D028C753CF9C01DC01AE57BE +:10016000BF4FED91FC91119741911196FC93EE9345 +:1001700080589F4FE817F90711F42D933C939FB7D0 +:10018000F894F901EC57FF4F8081815080839FBF25 +:10019000842F0895DF92EF92FF920F931F93FC013B +:1001A0008489813019F0823021F405C040E3D42ED7 +:1001B00004C0DD2402C030E2D32E8389823011F4E2 +:1001C00088E0D82A8589873031F0883031F0863050 +:1001D00031F482E003C084E001C086E0D82A1092A6 +:1001E000C9001092C8001092CA00E784F088018903 +:1001F000128980E0E81681EEF80680E0080780E0CA +:10020000180719F420E130E00FC0C801B701969536 +:1002100087957795679560587B47814E9F4FA801DA +:100220009701A0D6215030403093CD002093CC00D0 +:10023000D092CA0080E0E81681EEF80680E0080758 +:1002400080E0180711F082E001C080E08093C800D0 +:1002500088E98093C9001F910F91FF90EF90DF9084 +:1002600008951F920F920FB60F9211242F938F9320 +:100270009F93EF93FF939091CE008EB38430F1F46F +:10028000E0919901F0919A019083E0919901F091A8 +:100290009A01CF01019690939A018093990189590F +:1002A000914021F489E191E0928381839FB7F89492 +:1002B00080919D018F5F80939D019FBFFF91EF9182 +:1002C0009F918F912F910F900FBE0F901F901895B7 +:1002D000FC01858580FF02C05F9808955F9A0895AC +:1002E00080E091E0D5C580E091E088C584B7877F44 +:1002F00084BF28E10FB6F89420936000109260004C +:100300000FBE87E690E09093CD008093CC0086E00E +:100310008093CA001092C8002093C900539A5A9A39 +:100320008AB180638AB98BB180638BB983D284E050 +:1003300085BD5F9A579A08950F931F93CF93DF93CC +:10034000D5DF2FB7F8948EE991E090931F02809348 +:100350001E0290932102809320022FBF2FB7F894A2 +:1003600089E191E090939A018093990190939C0187 +:1003700080939B012FBF7894CEE9D1E003E08FB743 +:10038000F894909122028FBF903809F180E091E0BB +:10039000ABD497FD1CC0E0911E02F0911F02808338 +:1003A000E0911E02F0911F02CF01019690931F026F +:1003B00080931E028E51924011F4D283C1839FB765 +:1003C000F894809122028F5F809322029FBF8FB7A3 +:1003D000F89410919D018FBFA89902C0113678F151 +:1003E000A89A80919D01882361F05D980093160181 +:1003F00008C089E191E0B1DE682F80E091E0DAD4B5 +:1004000011501123B1F780911601882351F080918A +:10041000160181508093160180911601882309F4FA +:100420005D9A80911701882351F0809117018150C6 +:100430008093170180911701882309F45C9A8FB784 +:10044000F894909122028FBF992369F08EE991E090 +:1004500084DE982F8091C80085FFFCCF9093CE005A +:100460005C980093170180E091E095D42AD487CF5F +:10047000DA01923049F0933061F09130F9F4E8E913 +:10048000F0E022E130E01EC0EAEAF0E02EE330E0E6 +:1004900019C0813049F0813018F0823079F408C0F9 +:1004A000E8EEF0E0849107C0ECEEF0E0849103C048 +:1004B000E0E2F1E08491282F30E004C0E0E0F0E0D9 +:1004C00020E030E0ED93FC93C901089528E030E08E +:1004D00040E003C04F5F220F331F28173907D0F3C6 +:1004E000842F8295807F08958093E9008091EB00AE +:1004F00081608093EB001092ED006093EC004093DC +:10050000ED008091EE00881F8827881F08951092C3 +:10051000F40090E09093E9001092F0001092E8004F +:100520001092ED008091EB008E7F8093EB009F5F37 +:10053000953081F708958091270288238CF403C0B9 +:100540008EB38823B1F08091E80082FFF9CF8091CB +:10055000E8008B778093E80008958EB3882349F0F4 +:100560008091E80080FFF9CF8091E8008E7780933A +:10057000E800089594E68091EC0080FF05C080912A +:10058000E80080FF05C023C08091E80082FD1FC005 +:100590008EB3882311F482E008958EB3853011F470 +:1005A00083E008958091EB0085FF02C081E008950B +:1005B0008091E10082FFDFCF8091E1008B7F80930B +:1005C000E100992311F484E008959150D4CF80E0A4 +:1005D00008959C0140912D0250912E024617570715 +:1005E00018F4F90120E038C06115710511F0AB0174 +:1005F000F8CF8091E8008E778093E80040E050E0EB +:10060000F0CF8091E80083FF02C081E008958091DF +:10061000E80082FD2DC08EB3882381F18EB3853032 +:1006200079F18091E80080FF17C09091F20006C038 +:1006300081918093F100415050409F5F41155105D9 +:1006400011F09830A8F320E0983009F421E080916F +:10065000E8008E778093E8004115510591F622233A +:1006600081F606C08EB3882349F08EB3853041F001 +:100670008091E80082FFF6CF80E0089582E008953F +:1006800083E008959C0140912D0250912E0246175F +:10069000570710F490E03BC06115710511F0AB01F4 +:1006A000F9CF8091E8008E778093E80040E050E039 +:1006B000F1CF8091E80083FF02C081E0089580912E +:1006C000E80082FD30C08EB3882399F18EB3853067 +:1006D00091F18091E80080FF1AC08091F20009C07A +:1006E000F9012F5F3F4FE491E093F10041505040FA +:1006F0008F5F4115510511F0883090F390E08830FC +:1007000009F491E08091E8008E778093E80041152C +:10071000510579F6992369F606C08EB3882349F00E +:100720008EB3853041F08091E80082FFF6CF80E003 +:10073000089582E0089583E008959C016115710594 +:1007400029F48091E8008B778093E800F90120C0BC +:100750008091E80083FF02C081E008958EB3882372 +:1007600039F18EB3853031F18091E80082FFF0CF0E +:1007700006C08091F10081936150704021F080911A +:10078000F2008823B1F78091E8008B778093E8002E +:1007900061157105E9F606C08EB3882349F08EB362 +:1007A000853041F08091E80080FFF6CF80E0089529 +:1007B00082E0089583E0089542D044D01EBA10929A +:1007C0002502109224021092230284E089BD89B58B +:1007D000826089BD09B400FEFDCF8091D800982FBA +:1007E0009F779093D80080688093D80080916300B1 +:1007F0008E7F809363008091D8008F7D8093D80096 +:100800008091E0008E7F8093E0008091E1008E7FF8 +:100810008093E1008091E20081608093E20080910A +:10082000E100877F8093E1008091E20088608093FF +:10083000E2000895C1DF81E08093260208951092BE +:10084000E20008951092E10008951F920F920FB6F2 +:100850000F9211241F932F933F934F935F936F93A6 +:100860007F938F939F93AF93BF93EF93FF93E9EEA3 +:10087000F0E0108117701082E0EFF0E08081877F58 +:1008800080837894C3D0F894A9EEB0E01C92E0EF96 +:10089000F0E08081886080831C93FF91EF91BF918D +:1008A000AF919F918F917F916F915F914F913F9108 +:1008B0002F911F910F900FBE0F901F9018951F92B0 +:1008C0000F920FB60F9211242F933F934F935F9384 +:1008D0006F937F938F939F93AF93BF93EF93FF9308 +:1008E0008091E10080FF1BC08091E20080FF17C073 +:1008F0008091E1008E7F8093E1008091E2008E7F05 +:100900008093E2008091E20080618093E200809118 +:10091000D80080628093D80019BC1EBAD1D18091D2 +:10092000E10084FF29C08091E20084FF25C084E0BB +:1009300089BD89B5826089BD09B400FEFDCF809173 +:10094000D8008F7D8093D8008091E1008F7E8093C6 +:10095000E1008091E2008F7E8093E2008091E200CE +:1009600081608093E20080912502882311F481E068 +:1009700001C084E08EBBA4D18091E10083FF27C039 +:100980008091E20083FF23C08091E100877F809304 +:10099000E10082E08EBB109225028091E1008E7F03 +:1009A0008093E1008091E2008E7F8093E20080914D +:1009B000E20080618093E200AADD80E060E042E036 +:1009C00093DD8091F00088608093F00079D1809170 +:1009D000E10082FF0AC08091E20082FF06C08091A0 +:1009E000E1008B7F8093E1006BD1FF91EF91BF918C +:1009F000AF919F918F917F916F915F914F913F91B7 +:100A00002F910F900FBE0F901F9018951F93DF939B +:100A1000CF93CDB7DEB7AC970FB6F894DEBF0FBE5D +:100A2000CDBFE7E2F2E08091F100819322E0EF3266 +:100A3000F207C9F78091270230912802353009F476 +:100A400087C0363040F43130C9F1313070F0333086 +:100A500009F01DC133C0383009F4EFC0393009F452 +:100A6000FEC0363009F013C192C0803821F08238C0 +:100A700009F00DC108C090912302809124028823BF +:100A800099F0926011C080912B0287708093E900E9 +:100A90008091EB0090E025E0969587952A95E1F707 +:100AA000982F91701092E9008091E800877F8093E1 +:100AB000E8009093F1001092F100CAC0882319F069 +:100AC000823009F0E4C090E08F719070009721F0BF +:100AD000029709F0DDC00CC080912902813009F035 +:100AE000D7C010922402333069F5809324022AC0C3 +:100AF00080912902882331F520912B02277009F477 +:100B0000C7C02093E9008091EB0080FFC1C0333063 +:100B100021F48091EB00806213C08091EB00806132 +:100B20008093EB0081E090E002C0880F991F2A9526 +:100B3000E2F78093EA001092EA008091EB0088606F +:100B40008093EB001092E9008091E800877F83C0DA +:100B5000882309F09CC0109129028091E800877FCA +:100B60008093E800E8DC04C08EB3882309F490C0C9 +:100B70008091E80080FFF8CF812F8F7711F492E009 +:100B800001C093E09EBB80688093E30081C08058E1 +:100B9000823008F07CC08091290290912A0223E0E3 +:100BA0008C3D920799F55FB7F894DE0115964EE0FB +:100BB00020E030E061E2E42FF0E0609357008491A0 +:100BC00020FF03C082958F704F5F982F9F70892FF1 +:100BD000805D8A3308F0895F8C9311961C9211977F +:100BE0002F5F3F4F12962431310529F75FBF8AE20C +:100BF0008B8383E08C838091E800877F8093E8007B +:100C0000CE0103966AE270E0E4DC11C060912B0231 +:100C1000AE014F5F5F4F2CDCBC010097C9F18091A2 +:100C2000E800877F8093E80089819A812BDD80919D +:100C3000E8008B778093E8002BC0803841F58091E5 +:100C4000E800877F8093E800809125028093F1007F +:100C50008091E8008E778093E8006DDC19C08823CE +:100C6000B1F490912902923098F48091E800877F46 +:100C70008093E800909325025EDC80912502882312 +:100C800011F483E001C084E08EBB2DDB01C028DBC2 +:100C90008091E80083FF0AC08091EB00806280931E +:100CA000EB008091E800877F8093E800AC960FB658 +:100CB000F894DEBF0FBECDBFCF91DF911F91089595 +:100CC00008951F938EB3882361F01091E90010926C +:100CD000E9008091E80083FF01C098DE177010934F +:100CE000E9001F9108950895FC018EB3843021F529 +:100CF00087859089A189B2890097A105B105E1F0A6 +:100D000085818093E9008091E80082FF15C0809181 +:100D1000F200882319F42FEF3FEF04C08091F10017 +:100D2000282F30E08091F200882341F48091E80080 +:100D30008B778093E80002C02FEF3FEFC901089541 +:100D4000FC018EB3843011F587859089A189B28921 +:100D50000097A105B105D1F081818093E9008091D0 +:100D6000F2008823A9F09091E8008091E8008E7746 +:100D70008093E80095FD0CC0FDDB982F882349F493 +:100D80008091E8008E778093E80003C092E001C074 +:100D900090E0892F0895FC018EB3843051F487854B +:100DA0009089A189B2890097A105B10511F0CF0101 +:100DB000C7CF08951F93FC01162F8EB38430D9F44A +:100DC00087859089A189B2890097A105B10599F01D +:100DD00081818093E9008091E80085FD08C08091C1 +:100DE000E8008E778093E800C5DB882329F4109310 +:100DF000F10080E001C082E01F9108950F931F93DE +:100E0000CF93DF93EC010D96FC0189E0DF011D9289 +:100E10008A95E9F72A813B8109818C81882311F425 +:100E200010E001C014E0C90151DB182B1260802FC3 +:100E300061E8412F59DB882329F12E813F810D8103 +:100E40008885882311F410E001C014E0C9013EDB5D +:100E5000182B1260802F60E8412F46DB882391F029 +:100E60002A853B8509858C85882311F410E001C013 +:100E700014E0C9012BDB182B1260802F61EC412F8D +:100E800033DB01C080E0DF91CF911F910F91089576 +:100E9000CF93DF93EC018091E80083FF60C08881ED +:100EA00090E020912B0230912C022817390709F08D +:100EB00056C080912802813261F0823220F4803263 +:100EC00009F04DC019C0823269F1833209F047C080 +:100ED00038C080912702813A09F041C08091E80032 +:100EE000877F8093E800CE010F9667E070E071DBAA +:100EF0008091E8008B7713C080912702813279F5C9 +:100F00008091E800877F8093E800CE010F9667E02C +:100F100070E013DCCE013ED98091E8008E7780939B +:100F2000E8001DC0809127028132C9F48091E80059 +:100F3000877F8093E800809129028D87CE01C8D9F0 +:100F40000DC080912702813251F48091E800877FA3 +:100F50008093E800CE0160912902C5DEECDADF91D2 +:100F6000CF910895A1E21A2EAA1BBB1BFD010DC053 +:100F7000AA1FBB1FEE1FFF1FA217B307E407F50749 +:100F800020F0A21BB30BE40BF50B661F771F881F25 +:100F9000991F1A9469F760957095809590959B01BB +:0C0FA000AC01BD01CF010895F894FFCF13 +:100FAC0000034000000440000002080000000000A4 +:060FBC000000000000002F +:00000001FF diff --git a/external/arduino/avr/firmwares/atmegaxxu2/arduino-usbserial/Arduino-usbserial-atmega16u2-MegaADK-Rev3.hex b/external/arduino/avr/firmwares/atmegaxxu2/arduino-usbserial/Arduino-usbserial-atmega16u2-MegaADK-Rev3.hex new file mode 100644 index 000000000..1ca40e2e5 --- /dev/null +++ b/external/arduino/avr/firmwares/atmegaxxu2/arduino-usbserial/Arduino-usbserial-atmega16u2-MegaADK-Rev3.hex @@ -0,0 +1,254 @@ +:1000000090C00000A9C00000A7C00000A5C000006B +:10001000A3C00000A1C000009FC000009DC0000060 +:100020009BC0000099C0000097C0000048C40000B9 +:100030000CC4000091C000008FC000008DC0000003 +:100040008BC0000089C0000087C0000085C0000090 +:1000500083C0000081C000007FC0000002C100001A +:100060007BC0000079C0000077C0000075C00000B0 +:1000700073C0000071C000006FC000006DC00000C0 +:100080006BC0000069C0000067C0000065C00000D0 +:1000900063C0000061C000001201100102000008EE +:1000A0004123440001000102DC0109023E0002017B +:1000B00000C0320904000001020201000524000111 +:1000C0001004240206052406000107058203080027 +:1000D000FF09040100020A000000070504024000B5 +:1000E00001070583024000010403090432034100B3 +:1000F00072006400750069006E006F002000280027 +:100100007700770077002E006100720064007500B0 +:1001100069006E006F002E0063006300290000007C +:10012000000011241FBECFEFD2E0DEBFCDBF11E033 +:10013000A0E0B1E0ECEAFFE002C005900D92A6312C +:10014000B107D9F712E0A6E1B1E001C01D92AF32CC +:10015000B107E1F7F1D028C753CF9C01DC01AE57BE +:10016000BF4FED91FC91119741911196FC93EE9345 +:1001700080589F4FE817F90711F42D933C939FB7D0 +:10018000F894F901EC57FF4F8081815080839FBF25 +:10019000842F0895DF92EF92FF920F931F93FC013B +:1001A0008489813019F0823021F405C040E3D42ED7 +:1001B00004C0DD2402C030E2D32E8389823011F4E2 +:1001C00088E0D82A8589873031F0883031F0863050 +:1001D00031F482E003C084E001C086E0D82A1092A6 +:1001E000C9001092C8001092CA00E784F088018903 +:1001F000128980E0E81681EEF80680E0080780E0CA +:10020000180719F420E130E00FC0C801B701969536 +:1002100087957795679560587B47814E9F4FA801DA +:100220009701A0D6215030403093CD002093CC00D0 +:10023000D092CA0080E0E81681EEF80680E0080758 +:1002400080E0180711F082E001C080E08093C800D0 +:1002500088E98093C9001F910F91FF90EF90DF9084 +:1002600008951F920F920FB60F9211242F938F9320 +:100270009F93EF93FF939091CE008EB38430F1F46F +:10028000E0919901F0919A019083E0919901F091A8 +:100290009A01CF01019690939A018093990189590F +:1002A000914021F489E191E0928381839FB7F89492 +:1002B00080919D018F5F80939D019FBFFF91EF9182 +:1002C0009F918F912F910F900FBE0F901F901895B7 +:1002D000FC01858580FF02C05F9808955F9A0895AC +:1002E00080E091E0D5C580E091E088C584B7877F44 +:1002F00084BF28E10FB6F89420936000109260004C +:100300000FBE87E690E09093CD008093CC0086E00E +:100310008093CA001092C8002093C900539A5A9A39 +:100320008AB180638AB98BB180638BB983D284E050 +:1003300085BD5F9A579A08950F931F93CF93DF93CC +:10034000D5DF2FB7F8948EE991E090931F02809348 +:100350001E0290932102809320022FBF2FB7F894A2 +:1003600089E191E090939A018093990190939C0187 +:1003700080939B012FBF7894CEE9D1E003E08FB743 +:10038000F894909122028FBF903809F180E091E0BB +:10039000ABD497FD1CC0E0911E02F0911F02808338 +:1003A000E0911E02F0911F02CF01019690931F026F +:1003B00080931E028E51924011F4D283C1839FB765 +:1003C000F894809122028F5F809322029FBF8FB7A3 +:1003D000F89410919D018FBFA89902C0113678F151 +:1003E000A89A80919D01882361F05D980093160181 +:1003F00008C089E191E0B1DE682F80E091E0DAD4B5 +:1004000011501123B1F780911601882351F080918A +:10041000160181508093160180911601882309F4FA +:100420005D9A80911701882351F0809117018150C6 +:100430008093170180911701882309F45C9A8FB784 +:10044000F894909122028FBF992369F08EE991E090 +:1004500084DE982F8091C80085FFFCCF9093CE005A +:100460005C980093170180E091E095D42AD487CF5F +:10047000DA01923049F0933061F09130F9F4E8E913 +:10048000F0E022E130E01EC0EAEAF0E02EE330E0E6 +:1004900019C0813049F0813018F0823079F408C0F9 +:1004A000E8EEF0E0849107C0ECEEF0E0849103C048 +:1004B000E0E2F1E08491282F30E004C0E0E0F0E0D9 +:1004C00020E030E0ED93FC93C901089528E030E08E +:1004D00040E003C04F5F220F331F28173907D0F3C6 +:1004E000842F8295807F08958093E9008091EB00AE +:1004F00081608093EB001092ED006093EC004093DC +:10050000ED008091EE00881F8827881F08951092C3 +:10051000F40090E09093E9001092F0001092E8004F +:100520001092ED008091EB008E7F8093EB009F5F37 +:10053000953081F708958091270288238CF403C0B9 +:100540008EB38823B1F08091E80082FFF9CF8091CB +:10055000E8008B778093E80008958EB3882349F0F4 +:100560008091E80080FFF9CF8091E8008E7780933A +:10057000E800089594E68091EC0080FF05C080912A +:10058000E80080FF05C023C08091E80082FD1FC005 +:100590008EB3882311F482E008958EB3853011F470 +:1005A00083E008958091EB0085FF02C081E008950B +:1005B0008091E10082FFDFCF8091E1008B7F80930B +:1005C000E100992311F484E008959150D4CF80E0A4 +:1005D00008959C0140912D0250912E024617570715 +:1005E00018F4F90120E038C06115710511F0AB0174 +:1005F000F8CF8091E8008E778093E80040E050E0EB +:10060000F0CF8091E80083FF02C081E008958091DF +:10061000E80082FD2DC08EB3882381F18EB3853032 +:1006200079F18091E80080FF17C09091F20006C038 +:1006300081918093F100415050409F5F41155105D9 +:1006400011F09830A8F320E0983009F421E080916F +:10065000E8008E778093E8004115510591F622233A +:1006600081F606C08EB3882349F08EB3853041F001 +:100670008091E80082FFF6CF80E0089582E008953F +:1006800083E008959C0140912D0250912E0246175F +:10069000570710F490E03BC06115710511F0AB01F4 +:1006A000F9CF8091E8008E778093E80040E050E039 +:1006B000F1CF8091E80083FF02C081E0089580912E +:1006C000E80082FD30C08EB3882399F18EB3853067 +:1006D00091F18091E80080FF1AC08091F20009C07A +:1006E000F9012F5F3F4FE491E093F10041505040FA +:1006F0008F5F4115510511F0883090F390E08830FC +:1007000009F491E08091E8008E778093E80041152C +:10071000510579F6992369F606C08EB3882349F00E +:100720008EB3853041F08091E80082FFF6CF80E003 +:10073000089582E0089583E008959C016115710594 +:1007400029F48091E8008B778093E800F90120C0BC +:100750008091E80083FF02C081E008958EB3882372 +:1007600039F18EB3853031F18091E80082FFF0CF0E +:1007700006C08091F10081936150704021F080911A +:10078000F2008823B1F78091E8008B778093E8002E +:1007900061157105E9F606C08EB3882349F08EB362 +:1007A000853041F08091E80080FFF6CF80E0089529 +:1007B00082E0089583E0089542D044D01EBA10929A +:1007C0002502109224021092230284E089BD89B58B +:1007D000826089BD09B400FEFDCF8091D800982FBA +:1007E0009F779093D80080688093D80080916300B1 +:1007F0008E7F809363008091D8008F7D8093D80096 +:100800008091E0008E7F8093E0008091E1008E7FF8 +:100810008093E1008091E20081608093E20080910A +:10082000E100877F8093E1008091E20088608093FF +:10083000E2000895C1DF81E08093260208951092BE +:10084000E20008951092E10008951F920F920FB6F2 +:100850000F9211241F932F933F934F935F936F93A6 +:100860007F938F939F93AF93BF93EF93FF93E9EEA3 +:10087000F0E0108117701082E0EFF0E08081877F58 +:1008800080837894C3D0F894A9EEB0E01C92E0EF96 +:10089000F0E08081886080831C93FF91EF91BF918D +:1008A000AF919F918F917F916F915F914F913F9108 +:1008B0002F911F910F900FBE0F901F9018951F92B0 +:1008C0000F920FB60F9211242F933F934F935F9384 +:1008D0006F937F938F939F93AF93BF93EF93FF9308 +:1008E0008091E10080FF1BC08091E20080FF17C073 +:1008F0008091E1008E7F8093E1008091E2008E7F05 +:100900008093E2008091E20080618093E200809118 +:10091000D80080628093D80019BC1EBAD1D18091D2 +:10092000E10084FF29C08091E20084FF25C084E0BB +:1009300089BD89B5826089BD09B400FEFDCF809173 +:10094000D8008F7D8093D8008091E1008F7E8093C6 +:10095000E1008091E2008F7E8093E2008091E200CE +:1009600081608093E20080912502882311F481E068 +:1009700001C084E08EBBA4D18091E10083FF27C039 +:100980008091E20083FF23C08091E100877F809304 +:10099000E10082E08EBB109225028091E1008E7F03 +:1009A0008093E1008091E2008E7F8093E20080914D +:1009B000E20080618093E200AADD80E060E042E036 +:1009C00093DD8091F00088608093F00079D1809170 +:1009D000E10082FF0AC08091E20082FF06C08091A0 +:1009E000E1008B7F8093E1006BD1FF91EF91BF918C +:1009F000AF919F918F917F916F915F914F913F91B7 +:100A00002F910F900FBE0F901F9018951F93DF939B +:100A1000CF93CDB7DEB7AC970FB6F894DEBF0FBE5D +:100A2000CDBFE7E2F2E08091F100819322E0EF3266 +:100A3000F207C9F78091270230912802353009F476 +:100A400087C0363040F43130C9F1313070F0333086 +:100A500009F01DC133C0383009F4EFC0393009F452 +:100A6000FEC0363009F013C192C0803821F08238C0 +:100A700009F00DC108C090912302809124028823BF +:100A800099F0926011C080912B0287708093E900E9 +:100A90008091EB0090E025E0969587952A95E1F707 +:100AA000982F91701092E9008091E800877F8093E1 +:100AB000E8009093F1001092F100CAC0882319F069 +:100AC000823009F0E4C090E08F719070009721F0BF +:100AD000029709F0DDC00CC080912902813009F035 +:100AE000D7C010922402333069F5809324022AC0C3 +:100AF00080912902882331F520912B02277009F477 +:100B0000C7C02093E9008091EB0080FFC1C0333063 +:100B100021F48091EB00806213C08091EB00806132 +:100B20008093EB0081E090E002C0880F991F2A9526 +:100B3000E2F78093EA001092EA008091EB0088606F +:100B40008093EB001092E9008091E800877F83C0DA +:100B5000882309F09CC0109129028091E800877FCA +:100B60008093E800E8DC04C08EB3882309F490C0C9 +:100B70008091E80080FFF8CF812F8F7711F492E009 +:100B800001C093E09EBB80688093E30081C08058E1 +:100B9000823008F07CC08091290290912A0223E0E3 +:100BA0008C3D920799F55FB7F894DE0115964EE0FB +:100BB00020E030E061E2E42FF0E0609357008491A0 +:100BC00020FF03C082958F704F5F982F9F70892FF1 +:100BD000805D8A3308F0895F8C9311961C9211977F +:100BE0002F5F3F4F12962431310529F75FBF8AE20C +:100BF0008B8383E08C838091E800877F8093E8007B +:100C0000CE0103966AE270E0E4DC11C060912B0231 +:100C1000AE014F5F5F4F2CDCBC010097C9F18091A2 +:100C2000E800877F8093E80089819A812BDD80919D +:100C3000E8008B778093E8002BC0803841F58091E5 +:100C4000E800877F8093E800809125028093F1007F +:100C50008091E8008E778093E8006DDC19C08823CE +:100C6000B1F490912902923098F48091E800877F46 +:100C70008093E800909325025EDC80912502882312 +:100C800011F483E001C084E08EBB2DDB01C028DBC2 +:100C90008091E80083FF0AC08091EB00806280931E +:100CA000EB008091E800877F8093E800AC960FB658 +:100CB000F894DEBF0FBECDBFCF91DF911F91089595 +:100CC00008951F938EB3882361F01091E90010926C +:100CD000E9008091E80083FF01C098DE177010934F +:100CE000E9001F9108950895FC018EB3843021F529 +:100CF00087859089A189B2890097A105B105E1F0A6 +:100D000085818093E9008091E80082FF15C0809181 +:100D1000F200882319F42FEF3FEF04C08091F10017 +:100D2000282F30E08091F200882341F48091E80080 +:100D30008B778093E80002C02FEF3FEFC901089541 +:100D4000FC018EB3843011F587859089A189B28921 +:100D50000097A105B105D1F081818093E9008091D0 +:100D6000F2008823A9F09091E8008091E8008E7746 +:100D70008093E80095FD0CC0FDDB982F882349F493 +:100D80008091E8008E778093E80003C092E001C074 +:100D900090E0892F0895FC018EB3843051F487854B +:100DA0009089A189B2890097A105B10511F0CF0101 +:100DB000C7CF08951F93FC01162F8EB38430D9F44A +:100DC00087859089A189B2890097A105B10599F01D +:100DD00081818093E9008091E80085FD08C08091C1 +:100DE000E8008E778093E800C5DB882329F4109310 +:100DF000F10080E001C082E01F9108950F931F93DE +:100E0000CF93DF93EC010D96FC0189E0DF011D9289 +:100E10008A95E9F72A813B8109818C81882311F425 +:100E200010E001C014E0C90151DB182B1260802FC3 +:100E300061E8412F59DB882329F12E813F810D8103 +:100E40008885882311F410E001C014E0C9013EDB5D +:100E5000182B1260802F60E8412F46DB882391F029 +:100E60002A853B8509858C85882311F410E001C013 +:100E700014E0C9012BDB182B1260802F61EC412F8D +:100E800033DB01C080E0DF91CF911F910F91089576 +:100E9000CF93DF93EC018091E80083FF60C08881ED +:100EA00090E020912B0230912C022817390709F08D +:100EB00056C080912802813261F0823220F4803263 +:100EC00009F04DC019C0823269F1833209F047C080 +:100ED00038C080912702813A09F041C08091E80032 +:100EE000877F8093E800CE010F9667E070E071DBAA +:100EF0008091E8008B7713C080912702813279F5C9 +:100F00008091E800877F8093E800CE010F9667E02C +:100F100070E013DCCE013ED98091E8008E7780939B +:100F2000E8001DC0809127028132C9F48091E80059 +:100F3000877F8093E800809129028D87CE01C8D9F0 +:100F40000DC080912702813251F48091E800877FA3 +:100F50008093E800CE0160912902C5DEECDADF91D2 +:100F6000CF910895A1E21A2EAA1BBB1BFD010DC053 +:100F7000AA1FBB1FEE1FFF1FA217B307E407F50749 +:100F800020F0A21BB30BE40BF50B661F771F881F25 +:100F9000991F1A9469F760957095809590959B01BB +:0C0FA000AC01BD01CF010895F894FFCF13 +:100FAC0000034000000440000002080000000000A4 +:060FBC000000000000002F +:00000001FF diff --git a/external/arduino/avr/firmwares/atmegaxxu2/arduino-usbserial/Arduino-usbserial-atmega16u2-Uno-Rev3.hex b/external/arduino/avr/firmwares/atmegaxxu2/arduino-usbserial/Arduino-usbserial-atmega16u2-Uno-Rev3.hex new file mode 100644 index 000000000..711fabfb2 --- /dev/null +++ b/external/arduino/avr/firmwares/atmegaxxu2/arduino-usbserial/Arduino-usbserial-atmega16u2-Uno-Rev3.hex @@ -0,0 +1,254 @@ +:1000000090C00000A9C00000A7C00000A5C000006B +:10001000A3C00000A1C000009FC000009DC0000060 +:100020009BC0000099C0000097C0000048C40000B9 +:100030000CC4000091C000008FC000008DC0000003 +:100040008BC0000089C0000087C0000085C0000090 +:1000500083C0000081C000007FC0000002C100001A +:100060007BC0000079C0000077C0000075C00000B0 +:1000700073C0000071C000006FC000006DC00000C0 +:100080006BC0000069C0000067C0000065C00000D0 +:1000900063C0000061C000001201100102000008EE +:1000A0004123430001000102DC0109023E0002017C +:1000B00000C0320904000001020201000524000111 +:1000C0001004240206052406000107058203080027 +:1000D000FF09040100020A000000070504024000B5 +:1000E00001070583024000010403090432034100B3 +:1000F00072006400750069006E006F002000280027 +:100100007700770077002E006100720064007500B0 +:1001100069006E006F002E0063006300290000007C +:10012000000011241FBECFEFD2E0DEBFCDBF11E033 +:10013000A0E0B1E0ECEAFFE002C005900D92A6312C +:10014000B107D9F712E0A6E1B1E001C01D92AF32CC +:10015000B107E1F7F1D028C753CF9C01DC01AE57BE +:10016000BF4FED91FC91119741911196FC93EE9345 +:1001700080589F4FE817F90711F42D933C939FB7D0 +:10018000F894F901EC57FF4F8081815080839FBF25 +:10019000842F0895DF92EF92FF920F931F93FC013B +:1001A0008489813019F0823021F405C040E3D42ED7 +:1001B00004C0DD2402C030E2D32E8389823011F4E2 +:1001C00088E0D82A8589873031F0883031F0863050 +:1001D00031F482E003C084E001C086E0D82A1092A6 +:1001E000C9001092C8001092CA00E784F088018903 +:1001F000128980E0E81681EEF80680E0080780E0CA +:10020000180719F420E130E00FC0C801B701969536 +:1002100087957795679560587B47814E9F4FA801DA +:100220009701A0D6215030403093CD002093CC00D0 +:10023000D092CA0080E0E81681EEF80680E0080758 +:1002400080E0180711F082E001C080E08093C800D0 +:1002500088E98093C9001F910F91FF90EF90DF9084 +:1002600008951F920F920FB60F9211242F938F9320 +:100270009F93EF93FF939091CE008EB38430F1F46F +:10028000E0919901F0919A019083E0919901F091A8 +:100290009A01CF01019690939A018093990189590F +:1002A000914021F489E191E0928381839FB7F89492 +:1002B00080919D018F5F80939D019FBFFF91EF9182 +:1002C0009F918F912F910F900FBE0F901F901895B7 +:1002D000FC01858580FF02C05F9808955F9A0895AC +:1002E00080E091E0D5C580E091E088C584B7877F44 +:1002F00084BF28E10FB6F89420936000109260004C +:100300000FBE87E690E09093CD008093CC0086E00E +:100310008093CA001092C8002093C900539A5A9A39 +:100320008AB180638AB98BB180638BB983D284E050 +:1003300085BD5F9A579A08950F931F93CF93DF93CC +:10034000D5DF2FB7F8948EE991E090931F02809348 +:100350001E0290932102809320022FBF2FB7F894A2 +:1003600089E191E090939A018093990190939C0187 +:1003700080939B012FBF7894CEE9D1E003E08FB743 +:10038000F894909122028FBF903809F180E091E0BB +:10039000ABD497FD1CC0E0911E02F0911F02808338 +:1003A000E0911E02F0911F02CF01019690931F026F +:1003B00080931E028E51924011F4D283C1839FB765 +:1003C000F894809122028F5F809322029FBF8FB7A3 +:1003D000F89410919D018FBFA89902C0113678F151 +:1003E000A89A80919D01882361F05D980093160181 +:1003F00008C089E191E0B1DE682F80E091E0DAD4B5 +:1004000011501123B1F780911601882351F080918A +:10041000160181508093160180911601882309F4FA +:100420005D9A80911701882351F0809117018150C6 +:100430008093170180911701882309F45C9A8FB784 +:10044000F894909122028FBF992369F08EE991E090 +:1004500084DE982F8091C80085FFFCCF9093CE005A +:100460005C980093170180E091E095D42AD487CF5F +:10047000DA01923049F0933061F09130F9F4E8E913 +:10048000F0E022E130E01EC0EAEAF0E02EE330E0E6 +:1004900019C0813049F0813018F0823079F408C0F9 +:1004A000E8EEF0E0849107C0ECEEF0E0849103C048 +:1004B000E0E2F1E08491282F30E004C0E0E0F0E0D9 +:1004C00020E030E0ED93FC93C901089528E030E08E +:1004D00040E003C04F5F220F331F28173907D0F3C6 +:1004E000842F8295807F08958093E9008091EB00AE +:1004F00081608093EB001092ED006093EC004093DC +:10050000ED008091EE00881F8827881F08951092C3 +:10051000F40090E09093E9001092F0001092E8004F +:100520001092ED008091EB008E7F8093EB009F5F37 +:10053000953081F708958091270288238CF403C0B9 +:100540008EB38823B1F08091E80082FFF9CF8091CB +:10055000E8008B778093E80008958EB3882349F0F4 +:100560008091E80080FFF9CF8091E8008E7780933A +:10057000E800089594E68091EC0080FF05C080912A +:10058000E80080FF05C023C08091E80082FD1FC005 +:100590008EB3882311F482E008958EB3853011F470 +:1005A00083E008958091EB0085FF02C081E008950B +:1005B0008091E10082FFDFCF8091E1008B7F80930B +:1005C000E100992311F484E008959150D4CF80E0A4 +:1005D00008959C0140912D0250912E024617570715 +:1005E00018F4F90120E038C06115710511F0AB0174 +:1005F000F8CF8091E8008E778093E80040E050E0EB +:10060000F0CF8091E80083FF02C081E008958091DF +:10061000E80082FD2DC08EB3882381F18EB3853032 +:1006200079F18091E80080FF17C09091F20006C038 +:1006300081918093F100415050409F5F41155105D9 +:1006400011F09830A8F320E0983009F421E080916F +:10065000E8008E778093E8004115510591F622233A +:1006600081F606C08EB3882349F08EB3853041F001 +:100670008091E80082FFF6CF80E0089582E008953F +:1006800083E008959C0140912D0250912E0246175F +:10069000570710F490E03BC06115710511F0AB01F4 +:1006A000F9CF8091E8008E778093E80040E050E039 +:1006B000F1CF8091E80083FF02C081E0089580912E +:1006C000E80082FD30C08EB3882399F18EB3853067 +:1006D00091F18091E80080FF1AC08091F20009C07A +:1006E000F9012F5F3F4FE491E093F10041505040FA +:1006F0008F5F4115510511F0883090F390E08830FC +:1007000009F491E08091E8008E778093E80041152C +:10071000510579F6992369F606C08EB3882349F00E +:100720008EB3853041F08091E80082FFF6CF80E003 +:10073000089582E0089583E008959C016115710594 +:1007400029F48091E8008B778093E800F90120C0BC +:100750008091E80083FF02C081E008958EB3882372 +:1007600039F18EB3853031F18091E80082FFF0CF0E +:1007700006C08091F10081936150704021F080911A +:10078000F2008823B1F78091E8008B778093E8002E +:1007900061157105E9F606C08EB3882349F08EB362 +:1007A000853041F08091E80080FFF6CF80E0089529 +:1007B00082E0089583E0089542D044D01EBA10929A +:1007C0002502109224021092230284E089BD89B58B +:1007D000826089BD09B400FEFDCF8091D800982FBA +:1007E0009F779093D80080688093D80080916300B1 +:1007F0008E7F809363008091D8008F7D8093D80096 +:100800008091E0008E7F8093E0008091E1008E7FF8 +:100810008093E1008091E20081608093E20080910A +:10082000E100877F8093E1008091E20088608093FF +:10083000E2000895C1DF81E08093260208951092BE +:10084000E20008951092E10008951F920F920FB6F2 +:100850000F9211241F932F933F934F935F936F93A6 +:100860007F938F939F93AF93BF93EF93FF93E9EEA3 +:10087000F0E0108117701082E0EFF0E08081877F58 +:1008800080837894C3D0F894A9EEB0E01C92E0EF96 +:10089000F0E08081886080831C93FF91EF91BF918D +:1008A000AF919F918F917F916F915F914F913F9108 +:1008B0002F911F910F900FBE0F901F9018951F92B0 +:1008C0000F920FB60F9211242F933F934F935F9384 +:1008D0006F937F938F939F93AF93BF93EF93FF9308 +:1008E0008091E10080FF1BC08091E20080FF17C073 +:1008F0008091E1008E7F8093E1008091E2008E7F05 +:100900008093E2008091E20080618093E200809118 +:10091000D80080628093D80019BC1EBAD1D18091D2 +:10092000E10084FF29C08091E20084FF25C084E0BB +:1009300089BD89B5826089BD09B400FEFDCF809173 +:10094000D8008F7D8093D8008091E1008F7E8093C6 +:10095000E1008091E2008F7E8093E2008091E200CE +:1009600081608093E20080912502882311F481E068 +:1009700001C084E08EBBA4D18091E10083FF27C039 +:100980008091E20083FF23C08091E100877F809304 +:10099000E10082E08EBB109225028091E1008E7F03 +:1009A0008093E1008091E2008E7F8093E20080914D +:1009B000E20080618093E200AADD80E060E042E036 +:1009C00093DD8091F00088608093F00079D1809170 +:1009D000E10082FF0AC08091E20082FF06C08091A0 +:1009E000E1008B7F8093E1006BD1FF91EF91BF918C +:1009F000AF919F918F917F916F915F914F913F91B7 +:100A00002F910F900FBE0F901F9018951F93DF939B +:100A1000CF93CDB7DEB7AC970FB6F894DEBF0FBE5D +:100A2000CDBFE7E2F2E08091F100819322E0EF3266 +:100A3000F207C9F78091270230912802353009F476 +:100A400087C0363040F43130C9F1313070F0333086 +:100A500009F01DC133C0383009F4EFC0393009F452 +:100A6000FEC0363009F013C192C0803821F08238C0 +:100A700009F00DC108C090912302809124028823BF +:100A800099F0926011C080912B0287708093E900E9 +:100A90008091EB0090E025E0969587952A95E1F707 +:100AA000982F91701092E9008091E800877F8093E1 +:100AB000E8009093F1001092F100CAC0882319F069 +:100AC000823009F0E4C090E08F719070009721F0BF +:100AD000029709F0DDC00CC080912902813009F035 +:100AE000D7C010922402333069F5809324022AC0C3 +:100AF00080912902882331F520912B02277009F477 +:100B0000C7C02093E9008091EB0080FFC1C0333063 +:100B100021F48091EB00806213C08091EB00806132 +:100B20008093EB0081E090E002C0880F991F2A9526 +:100B3000E2F78093EA001092EA008091EB0088606F +:100B40008093EB001092E9008091E800877F83C0DA +:100B5000882309F09CC0109129028091E800877FCA +:100B60008093E800E8DC04C08EB3882309F490C0C9 +:100B70008091E80080FFF8CF812F8F7711F492E009 +:100B800001C093E09EBB80688093E30081C08058E1 +:100B9000823008F07CC08091290290912A0223E0E3 +:100BA0008C3D920799F55FB7F894DE0115964EE0FB +:100BB00020E030E061E2E42FF0E0609357008491A0 +:100BC00020FF03C082958F704F5F982F9F70892FF1 +:100BD000805D8A3308F0895F8C9311961C9211977F +:100BE0002F5F3F4F12962431310529F75FBF8AE20C +:100BF0008B8383E08C838091E800877F8093E8007B +:100C0000CE0103966AE270E0E4DC11C060912B0231 +:100C1000AE014F5F5F4F2CDCBC010097C9F18091A2 +:100C2000E800877F8093E80089819A812BDD80919D +:100C3000E8008B778093E8002BC0803841F58091E5 +:100C4000E800877F8093E800809125028093F1007F +:100C50008091E8008E778093E8006DDC19C08823CE +:100C6000B1F490912902923098F48091E800877F46 +:100C70008093E800909325025EDC80912502882312 +:100C800011F483E001C084E08EBB2DDB01C028DBC2 +:100C90008091E80083FF0AC08091EB00806280931E +:100CA000EB008091E800877F8093E800AC960FB658 +:100CB000F894DEBF0FBECDBFCF91DF911F91089595 +:100CC00008951F938EB3882361F01091E90010926C +:100CD000E9008091E80083FF01C098DE177010934F +:100CE000E9001F9108950895FC018EB3843021F529 +:100CF00087859089A189B2890097A105B105E1F0A6 +:100D000085818093E9008091E80082FF15C0809181 +:100D1000F200882319F42FEF3FEF04C08091F10017 +:100D2000282F30E08091F200882341F48091E80080 +:100D30008B778093E80002C02FEF3FEFC901089541 +:100D4000FC018EB3843011F587859089A189B28921 +:100D50000097A105B105D1F081818093E9008091D0 +:100D6000F2008823A9F09091E8008091E8008E7746 +:100D70008093E80095FD0CC0FDDB982F882349F493 +:100D80008091E8008E778093E80003C092E001C074 +:100D900090E0892F0895FC018EB3843051F487854B +:100DA0009089A189B2890097A105B10511F0CF0101 +:100DB000C7CF08951F93FC01162F8EB38430D9F44A +:100DC00087859089A189B2890097A105B10599F01D +:100DD00081818093E9008091E80085FD08C08091C1 +:100DE000E8008E778093E800C5DB882329F4109310 +:100DF000F10080E001C082E01F9108950F931F93DE +:100E0000CF93DF93EC010D96FC0189E0DF011D9289 +:100E10008A95E9F72A813B8109818C81882311F425 +:100E200010E001C014E0C90151DB182B1260802FC3 +:100E300061E8412F59DB882329F12E813F810D8103 +:100E40008885882311F410E001C014E0C9013EDB5D +:100E5000182B1260802F60E8412F46DB882391F029 +:100E60002A853B8509858C85882311F410E001C013 +:100E700014E0C9012BDB182B1260802F61EC412F8D +:100E800033DB01C080E0DF91CF911F910F91089576 +:100E9000CF93DF93EC018091E80083FF60C08881ED +:100EA00090E020912B0230912C022817390709F08D +:100EB00056C080912802813261F0823220F4803263 +:100EC00009F04DC019C0823269F1833209F047C080 +:100ED00038C080912702813A09F041C08091E80032 +:100EE000877F8093E800CE010F9667E070E071DBAA +:100EF0008091E8008B7713C080912702813279F5C9 +:100F00008091E800877F8093E800CE010F9667E02C +:100F100070E013DCCE013ED98091E8008E7780939B +:100F2000E8001DC0809127028132C9F48091E80059 +:100F3000877F8093E800809129028D87CE01C8D9F0 +:100F40000DC080912702813251F48091E800877FA3 +:100F50008093E800CE0160912902C5DEECDADF91D2 +:100F6000CF910895A1E21A2EAA1BBB1BFD010DC053 +:100F7000AA1FBB1FEE1FFF1FA217B307E407F50749 +:100F800020F0A21BB30BE40BF50B661F771F881F25 +:100F9000991F1A9469F760957095809590959B01BB +:0C0FA000AC01BD01CF010895F894FFCF13 +:100FAC0000034000000440000002080000000000A4 +:060FBC000000000000002F +:00000001FF diff --git a/external/arduino/avr/firmwares/atmegaxxu2/arduino-usbserial/Arduino-usbserial-mega.hex b/external/arduino/avr/firmwares/atmegaxxu2/arduino-usbserial/Arduino-usbserial-mega.hex new file mode 100644 index 000000000..1aaa2f466 --- /dev/null +++ b/external/arduino/avr/firmwares/atmegaxxu2/arduino-usbserial/Arduino-usbserial-mega.hex @@ -0,0 +1,256 @@ +:10000000A2C00000BBC00000B9C00000B7C0000023 +:10001000B5C00000B3C00000B1C00000AFC0000018 +:10002000ADC00000ABC00000A9C000005AC4000071 +:100030001EC40000A3C00000A1C000009FC00000BB +:100040009DC000009BC0000099C0000097C0000048 +:1000500095C0000093C0000091C0000014C10000D2 +:100060008DC000008BC0000089C0000087C0000068 +:1000700085C0000083C0000081C000007FC0000078 +:100080007DC000007BC0000079C0000077C0000088 +:1000900075C0000073C000001201100102000008CA +:1000A0004123100001000102DC0109023E000201AF +:1000B00000C0320904000001020201000524000111 +:1000C0001004240206052406000107058203080027 +:1000D000FF09040100020A000000070504024000B5 +:1000E00001070583024000010403090432034100B3 +:1000F00072006400750069006E006F002000280027 +:100100007700770077002E006100720064007500B0 +:1001100069006E006F002E0063006300290000007C +:100120002403410072006400750069006E006F00D6 +:1001300020004D006500670061002000320035009E +:1001400036003000000011241FBECFEFD2E0DEBF2A +:10015000CDBF11E0A0E0B1E0E0EDFFE002C005900E +:100160000D92A631B107D9F712E0A6E1B1E001C0C6 +:100170001D92AF32B107E1F7F1D028C741CF9C0102 +:10018000DC01AE57BF4FED91FC9111974191119653 +:10019000FC93EE9380589F4FE817F90711F42D93C5 +:1001A0003C939FB7F894F901EC57FF4F8081815041 +:1001B00080839FBF842F0895DF92EF92FF920F9369 +:1001C0001F93FC018489813019F0823021F405C02D +:1001D00040E3D42E04C0DD2402C030E2D32E838954 +:1001E000823011F488E0D82A8589873031F0883050 +:1001F00031F0863031F482E003C084E001C086E053 +:10020000D82A1092C9001092C8001092CA00E78440 +:10021000F0880189128980E0E81681EEF80680E016 +:10022000080780E0180719F420E130E00FC0C8018A +:10023000B701969587957795679560587B47814E6E +:100240009F4FA8019701A0D6215030403093CD0098 +:100250002093CC00D092CA0080E0E81681EEF80628 +:1002600080E0080780E0180711F082E001C080E01C +:100270008093C80088E98093C9001F910F91FF9077 +:10028000EF90DF9008951F920F920FB60F921124F6 +:100290002F938F939F93EF93FF939091CE008EB304 +:1002A0008430F1F4E0919901F0919A019083E0910A +:1002B0009901F0919A01CF01019690939A01809350 +:1002C00099018959914021F489E191E092838183D8 +:1002D0009FB7F89480919D018F5F80939D019FBF90 +:1002E000FF91EF919F918F912F910F900FBE0F90E3 +:1002F0001F901895FC01858580FF02C05F980895C6 +:100300005F9A089580E091E0D5C580E091E088C5CE +:1003100084B7877F84BF28E10FB6F89420936000EC +:10032000109260000FBE87E690E09093CD0080931E +:10033000CC0086E08093CA001092C8002093C900C8 +:10034000539A5A9A8AB180638AB98BB180638BB908 +:1003500083D284E085BD5F9A579A08950F931F93C7 +:10036000CF93DF93D5DF2FB7F8948EE991E0909388 +:100370001F0280931E0290932102809320022FBFC0 +:100380002FB7F89489E191E090939A0180939901B5 +:1003900090939C0180939B012FBF7894CEE9D1E08C +:1003A00003E08FB7F894909122028FBF903809F143 +:1003B00080E091E0ABD497FD1CC0E0911E02F0916B +:1003C0001F028083E0911E02F0911F02CF0101966F +:1003D00090931F0280931E028E51924011F4D2839B +:1003E000C1839FB7F894809122028F5F809322028D +:1003F0009FBF8FB7F89410919D018FBFA89902C03D +:10040000113678F1A89A80919D01882361F05D985A +:100410000093160108C089E191E0B1DE682F80E009 +:1004200091E0DAD411501123B1F78091160188239D +:1004300051F0809116018150809316018091160130 +:10044000882309F45D9A80911701882351F08091E7 +:10045000170181508093170180911701882309F4B7 +:100460005C9A8FB7F894909122028FBF992369F01C +:100470008EE991E084DE982F8091C80085FFFCCF43 +:100480009093CE005C980093170180E091E095D4A2 +:100490002AD487CFDA01923049F0933061F091305D +:1004A000F9F4E8E9F0E022E130E01EC0EAEAF0E029 +:1004B0002EE330E019C0813049F0813018F08230ED +:1004C00079F408C0E8EEF0E0849107C0ECEEF0E0CB +:1004D000849103C0E0E2F1E08491282F30E004C071 +:1004E000E0E0F0E020E030E0ED93FC93C9010895F6 +:1004F00028E030E040E003C04F5F220F331F281791 +:100500003907D0F3842F8295807F08958093E90086 +:100510008091EB0081608093EB001092ED0060937E +:10052000EC004093ED008091EE00881F8827881F23 +:1005300008951092F40090E09093E9001092F0007A +:100540001092E8001092ED008091EB008E7F809376 +:10055000EB009F5F953081F70895809127028823F3 +:100560008CF403C08EB38823B1F08091E80082FF41 +:10057000F9CF8091E8008B778093E80008958EB3DF +:10058000882349F08091E80080FFF9CF8091E8004E +:100590008E778093E800089594E68091EC0080FFC8 +:1005A00005C08091E80080FF05C023C08091E8006D +:1005B00082FD1FC08EB3882311F482E008958EB3AC +:1005C000853011F483E008958091EB0085FF02C02F +:1005D00081E008958091E10082FFDFCF8091E1000A +:1005E0008B7F8093E100992311F484E0089591506A +:1005F000D4CF80E008959C0140912D0250912E02AD +:100600004617570718F4F90120E038C06115710545 +:1006100011F0AB01F8CF8091E8008E778093E8006D +:1006200040E050E0F0CF8091E80083FF02C081E01D +:1006300008958091E80082FD2DC08EB3882381F15A +:100640008EB3853079F18091E80080FF17C09091DA +:10065000F20006C081918093F100415050409F5FAD +:100660004115510511F09830A8F320E0983009F4B5 +:1006700021E08091E8008E778093E80041155105D4 +:1006800091F6222381F606C08EB3882349F08EB3FB +:10069000853041F08091E80082FFF6CF80E0089538 +:1006A00082E0089583E008959C0140912D025091CD +:1006B0002E024617570710F490E03BC061157105F4 +:1006C00011F0AB01F9CF8091E8008E778093E800BC +:1006D00040E050E0F1CF8091E80083FF02C081E06C +:1006E00008958091E80082FD30C08EB3882399F18F +:1006F0008EB3853091F18091E80080FF1AC080911F +:10070000F20009C0F9012F5F3F4FE491E093F1003F +:10071000415050408F5F4115510511F0883090F3E2 +:1007200090E0883009F491E08091E8008E77809322 +:10073000E8004115510579F6992369F606C08EB394 +:10074000882349F08EB3853041F08091E80082FF24 +:10075000F6CF80E0089582E0089583E008959C013B +:100760006115710529F48091E8008B778093E8008A +:10077000F90120C08091E80083FF02C081E0089564 +:100780008EB3882339F18EB3853031F18091E80042 +:1007900082FFF0CF06C08091F100819361507040DC +:1007A00021F08091F2008823B1F78091E8008B77E7 +:1007B0008093E80061157105E9F606C08EB38823C1 +:1007C00049F08EB3853041F08091E80080FFF6CF8C +:1007D00080E0089582E0089583E0089542D044D0F7 +:1007E0001EBA10922502109224021092230284E075 +:1007F00089BD89B5826089BD09B400FEFDCF8091B5 +:10080000D800982F9F779093D80080688093D80065 +:10081000809163008E7F809363008091D8008F7DEC +:100820008093D8008091E0008E7F8093E0008091DB +:10083000E1008E7F8093E1008091E20081608093EF +:10084000E2008091E100877F8093E1008091E200E7 +:1008500088608093E2000895C1DF81E080932602E2 +:1008600008951092E20008951092E10008951F92F9 +:100870000F920FB60F9211241F932F933F934F9314 +:100880005F936F937F938F939F93AF93BF93EF93F8 +:10089000FF93E9EEF0E0108117701082E0EFF0E0D6 +:1008A0008081877F80837894C3D0F894A9EEB0E0EC +:1008B0001C92E0EFF0E08081886080831C93FF91C0 +:1008C000EF91BF91AF919F918F917F916F915F91C8 +:1008D0004F913F912F911F910F900FBE0F901F903E +:1008E00018951F920F920FB60F9211242F933F93DA +:1008F0004F935F936F937F938F939F93AF93BF9328 +:10090000EF93FF938091E10080FF1BC08091E20094 +:1009100080FF17C08091E1008E7F8093E10080917D +:10092000E2008E7F8093E2008091E20080618093FC +:10093000E2008091D80080628093D80019BC1EBA72 +:10094000D1D18091E10084FF29C08091E20084FF31 +:1009500025C084E089BD89B5826089BD09B400FEE7 +:10096000FDCF8091D8008F7D8093D8008091E100E9 +:100970008F7E8093E1008091E2008F7E8093E20081 +:100980008091E20081608093E200809125028823BB +:1009900011F481E001C084E08EBBA4D18091E1001C +:1009A00083FF27C08091E20083FF23C08091E10094 +:1009B000877F8093E10082E08EBB109225028091B8 +:1009C000E1008E7F8093E1008091E2008E7F809332 +:1009D000E2008091E20080618093E200AADD80E085 +:1009E00060E042E093DD8091F00088608093F00049 +:1009F00079D18091E10082FF0AC08091E20082FFFC +:100A000006C08091E1008B7F8093E1006BD1FF9164 +:100A1000EF91BF91AF919F918F917F916F915F9176 +:100A20004F913F912F910F900FBE0F901F901895EF +:100A30001F93DF93CF93CDB7DEB7AC970FB6F89483 +:100A4000DEBF0FBECDBFE7E2F2E08091F1008193FF +:100A500022E0EF32F207C9F7809127023091280295 +:100A6000353009F487C0363040F43130C9F13130C7 +:100A700070F0333009F01DC133C0383009F4EFC0D5 +:100A8000393009F4FEC0363009F013C192C0803805 +:100A900021F0823809F00DC108C0909123028091A5 +:100AA0002402882399F0926011C080912B028770F4 +:100AB0008093E9008091EB0090E025E09695879582 +:100AC0002A95E1F7982F91701092E9008091E80043 +:100AD000877F8093E8009093F1001092F100CAC0E4 +:100AE000882319F0823009F0E4C090E08F71907093 +:100AF000009721F0029709F0DDC00CC08091290217 +:100B0000813009F0D7C010922402333069F5809308 +:100B100024022AC080912902882331F520912B02DA +:100B2000277009F4C7C02093E9008091EB0080FF93 +:100B3000C1C0333021F48091EB00806213C08091FA +:100B4000EB0080618093EB0081E090E002C0880FB1 +:100B5000991F2A95E2F78093EA001092EA008091AB +:100B6000EB0088608093EB001092E9008091E80030 +:100B7000877F83C0882309F09CC01091290280914F +:100B8000E800877F8093E800E8DC04C08EB3882308 +:100B900009F490C08091E80080FFF8CF812F8F7713 +:100BA00011F492E001C093E09EBB80688093E30063 +:100BB00081C08058823008F07CC0809129029091D9 +:100BC0002A0223E08C3D920799F55FB7F894DE0185 +:100BD00015964EE020E030E061E2E42FF0E0609313 +:100BE0005700849120FF03C082958F704F5F982F2C +:100BF0009F70892F805D8A3308F0895F8C931196EE +:100C00001C9211972F5F3F4F12962431310529F71F +:100C10005FBF8AE28B8383E08C838091E800877FCB +:100C20008093E800CE0103966AE270E0E4DC11C034 +:100C300060912B02AE014F5F5F4F2CDCBC0100972F +:100C4000C9F18091E800877F8093E80089819A81CB +:100C50002BDD8091E8008B778093E8002BC08038F3 +:100C600041F58091E800877F8093E800809125021C +:100C70008093F1008091E8008E778093E8006DDC2E +:100C800019C08823B1F490912902923098F4809190 +:100C9000E800877F8093E800909325025EDC8091D6 +:100CA0002502882311F483E001C084E08EBB2DDB94 +:100CB00001C028DB8091E80083FF0AC08091EB002F +:100CC00080628093EB008091E800877F8093E8004A +:100CD000AC960FB6F894DEBF0FBECDBFCF91DF91BB +:100CE0001F91089508951F938EB3882361F010918A +:100CF000E9001092E9008091E80083FF01C098DECE +:100D000017701093E9001F9108950895FC018EB3A8 +:100D1000843021F587859089A189B2890097A10542 +:100D2000B105E1F085818093E9008091E80082FFC0 +:100D300015C08091F200882319F42FEF3FEF04C013 +:100D40008091F100282F30E08091F200882341F457 +:100D50008091E8008B778093E80002C02FEF3FEF8F +:100D6000C9010895FC018EB3843011F587859089FF +:100D7000A189B2890097A105B105D1F08181809345 +:100D8000E9008091F2008823A9F09091E800809119 +:100D9000E8008E778093E80095FD0CC0FDDB982F6E +:100DA000882349F48091E8008E778093E80003C09F +:100DB00092E001C090E0892F0895FC018EB3843049 +:100DC00051F487859089A189B2890097A105B10561 +:100DD00011F0CF01C7CF08951F93FC01162F8EB3DA +:100DE0008430D9F487859089A189B2890097A105BB +:100DF000B10599F081818093E9008091E80085FD3B +:100E000008C08091E8008E778093E800C5DB8823D6 +:100E100029F41093F10080E001C082E01F91089551 +:100E20000F931F93CF93DF93EC010D96FC0189E0A4 +:100E3000DF011D928A95E9F72A813B8109818C8126 +:100E4000882311F410E001C014E0C90151DB182B14 +:100E50001260802F61E8412F59DB882329F12E8110 +:100E60003F810D818885882311F410E001C014E0D2 +:100E7000C9013EDB182B1260802F60E8412F46DB52 +:100E8000882391F02A853B8509858C85882311F478 +:100E900010E001C014E0C9012BDB182B1260802F79 +:100EA00061EC412F33DB01C080E0DF91CF911F91D6 +:100EB0000F910895CF93DF93EC018091E80083FFB9 +:100EC00060C0888190E020912B0230912C0228177D +:100ED000390709F056C080912802813261F08232D0 +:100EE00020F4803209F04DC019C0823269F183329A +:100EF00009F047C038C080912702813A09F041C00B +:100F00008091E800877F8093E800CE010F9667E02C +:100F100070E071DB8091E8008B7713C0809127022D +:100F2000813279F58091E800877F8093E800CE01D7 +:100F30000F9667E070E013DCCE013ED98091E800A7 +:100F40008E778093E8001DC0809127028132C9F41A +:100F50008091E800877F8093E800809129028D8747 +:100F6000CE01C8D90DC080912702813251F4809101 +:100F7000E800877F8093E800CE0160912902C5DEFA +:100F8000ECDADF91CF910895A1E21A2EAA1BBB1BC8 +:100F9000FD010DC0AA1FBB1FEE1FFF1FA217B30745 +:100FA000E407F50720F0A21BB30BE40BF50B661F5B +:100FB000771F881F991F1A9469F76095709580951F +:100FC00090959B01AC01BD01CF010895F894FFCF2E +:100FD0000003400000044000000208000000000080 +:060FE0000000000000000B +:00000001FF diff --git a/external/arduino/avr/firmwares/atmegaxxu2/arduino-usbserial/Arduino-usbserial-uno.hex b/external/arduino/avr/firmwares/atmegaxxu2/arduino-usbserial/Arduino-usbserial-uno.hex new file mode 100644 index 000000000..6c59d3fd1 --- /dev/null +++ b/external/arduino/avr/firmwares/atmegaxxu2/arduino-usbserial/Arduino-usbserial-uno.hex @@ -0,0 +1,256 @@ +:100000009CC00000B5C00000B3C00000B1C000003B +:10001000AFC00000ADC00000ABC00000A9C0000030 +:10002000A7C00000A5C00000A3C0000054C4000089 +:1000300018C400009DC000009BC0000099C00000D3 +:1000400097C0000095C0000093C0000091C0000060 +:100050008FC000008DC000008BC000000EC10000EA +:1000600087C0000085C0000083C0000081C0000080 +:100070007FC000007DC000007BC0000079C0000090 +:1000800077C0000075C0000073C0000071C00000A0 +:100090006FC000006DC000001201100102000008D6 +:1000A0004123010001000102DC0109023E000201BE +:1000B00000C0320904000001020201000524000111 +:1000C0001004240206052406000107058203080027 +:1000D000FF09040100020A000000070504024000B5 +:1000E00001070583024000010403090432034100B3 +:1000F00072006400750069006E006F002000280027 +:100100007700770077002E006100720064007500B0 +:1001100069006E006F002E0063006300290000007C +:100120001803410072006400750069006E006F00E2 +:10013000200055006E006F00000011241FBECFEF9D +:10014000D2E0DEBFCDBF11E0A0E0B1E0E4ECFFE023 +:1001500002C005900D92A631B107D9F712E0A6E1D1 +:10016000B1E001C01D92AF32B107E1F7F1D028C76D +:1001700047CF9C01DC01AE57BF4FED91FC91119729 +:1001800041911196FC93EE9380589F4FE817F90721 +:1001900011F42D933C939FB7F894F901EC57FF4F5E +:1001A0008081815080839FBF842F0895DF92EF92DA +:1001B000FF920F931F93FC018489813019F08230E4 +:1001C00021F405C040E3D42E04C0DD2402C030E297 +:1001D000D32E8389823011F488E0D82A858987302C +:1001E00031F0883031F0863031F482E003C084E0B1 +:1001F00001C086E0D82A1092C9001092C80010925F +:10020000CA00E784F0880189128980E0E81681EE4F +:10021000F80680E0080780E0180719F420E130E0D4 +:100220000FC0C801B7019695879577956795605877 +:100230007B47814E9F4FA8019701A0D621503040A7 +:100240003093CD002093CC00D092CA0080E0E81615 +:1002500081EEF80680E0080780E0180711F082E0E0 +:1002600001C080E08093C80088E98093C9001F9195 +:100270000F91FF90EF90DF9008951F920F920FB6AD +:100280000F9211242F938F939F93EF93FF9390914D +:10029000CE008EB38430F1F4E0919901F0919A018F +:1002A0009083E0919901F0919A01CF01019690938A +:1002B0009A01809399018959914021F489E191E053 +:1002C000928381839FB7F89480919D018F5F809383 +:1002D0009D019FBFFF91EF919F918F912F910F9063 +:1002E0000FBE0F901F901895FC01858580FF02C0FE +:1002F0005F9808955F9A089580E091E0D5C580E009 +:1003000091E088C584B7877F84BF28E10FB6F89451 +:1003100020936000109260000FBE87E690E09093FB +:10032000CD008093CC0086E08093CA001092C80074 +:100330002093C900539A5A9A8AB180638AB98BB1C3 +:1003400080638BB983D284E085BD5F9A579A089504 +:100350000F931F93CF93DF93D5DF2FB7F8948EE9D8 +:1003600091E090931F0280931E029093210280934C +:1003700020022FBF2FB7F89489E191E090939A0162 +:100380008093990190939C0180939B012FBF789457 +:10039000CEE9D1E003E08FB7F894909122028FBFAD +:1003A000903809F180E091E0ABD497FD1CC0E0915A +:1003B0001E02F0911F028083E0911E02F0911F0245 +:1003C000CF01019690931F0280931E028E5192409E +:1003D00011F4D283C1839FB7F894809122028F5F7A +:1003E000809322029FBF8FB7F89410919D018FBF19 +:1003F000A89902C0113678F1A89A80919D018823AE +:1004000061F05D980093160108C089E191E0B1DECA +:10041000682F80E091E0DAD411501123B1F7809178 +:100420001601882351F080911601815080931601A6 +:1004300080911601882309F45D9A80911701882321 +:1004400051F080911701815080931701809117011D +:10045000882309F45C9A8FB7F894909122028FBF99 +:10046000992369F08EE991E084DE982F8091C8008D +:1004700085FFFCCF9093CE005C980093170180E03D +:1004800091E095D42AD487CFDA01923049F09330A5 +:1004900061F09130F9F4E8E9F0E022E130E01EC0CB +:1004A000EAEAF0E02EE330E019C0813049F0813013 +:1004B00018F0823079F408C0E8EEF0E0849107C0CB +:1004C000ECEEF0E0849103C0E0E2F1E08491282FAB +:1004D00030E004C0E0E0F0E020E030E0ED93FC9399 +:1004E000C901089528E030E040E003C04F5F220FCB +:1004F000331F28173907D0F3842F8295807F089502 +:100500008093E9008091EB0081608093EB00109272 +:10051000ED006093EC004093ED008091EE00881FA9 +:100520008827881F08951092F40090E09093E900C6 +:100530001092F0001092E8001092ED008091EB0014 +:100540008E7F8093EB009F5F953081F708958091B7 +:10055000270288238CF403C08EB38823B1F08091E6 +:10056000E80082FFF9CF8091E8008B778093E80064 +:1005700008958EB3882349F08091E80080FFF9CF79 +:100580008091E8008E778093E800089594E680914A +:10059000EC0080FF05C08091E80080FF05C023C00B +:1005A0008091E80082FD1FC08EB3882311F482E0A1 +:1005B00008958EB3853011F483E008958091EB00A7 +:1005C00085FF02C081E008958091E10082FFDFCFC6 +:1005D0008091E1008B7F8093E100992311F484E006 +:1005E00008959150D4CF80E008959C0140912D0250 +:1005F00050912E024617570718F4F90120E038C031 +:100600006115710511F0AB01F8CF8091E8008E778C +:100610008093E80040E050E0F0CF8091E80083FF55 +:1006200002C081E008958091E80082FD2DC08EB364 +:10063000882381F18EB3853079F18091E80080FFC5 +:1006400017C09091F20006C081918093F100415053 +:1006500050409F5F4115510511F09830A8F320E0FC +:10066000983009F421E08091E8008E778093E800CB +:100670004115510591F6222381F606C08EB38823D9 +:1006800049F08EB3853041F08091E80082FFF6CFCB +:1006900080E0089582E0089583E008959C014091F0 +:1006A0002D0250912E024617570710F490E03BC0E0 +:1006B0006115710511F0AB01F9CF8091E8008E77DB +:1006C0008093E80040E050E0F1CF8091E80083FFA4 +:1006D00002C081E008958091E80082FD30C08EB3B1 +:1006E000882399F18EB3853091F18091E80080FFE5 +:1006F0001AC08091F20009C0F9012F5F3F4FE491C9 +:10070000E093F100415050408F5F4115510511F0C9 +:10071000883090F390E0883009F491E08091E8000F +:100720008E778093E8004115510579F6992369F693 +:1007300006C08EB3882349F08EB3853041F0809196 +:10074000E80082FFF6CF80E0089582E0089583E01C +:1007500008959C016115710529F48091E8008B775B +:100760008093E800F90120C08091E80083FF02C077 +:1007700081E008958EB3882339F18EB3853031F14D +:100780008091E80082FFF0CF06C08091F100819354 +:100790006150704021F08091F2008823B1F7809180 +:1007A000E8008B778093E80061157105E9F606C0D3 +:1007B0008EB3882349F08EB3853041F08091E800F4 +:1007C00080FFF6CF80E0089582E0089583E00895E9 +:1007D00042D044D01EBA10922502109224021092E8 +:1007E000230284E089BD89B5826089BD09B400FE19 +:1007F000FDCF8091D800982F9F779093D800806884 +:100800008093D800809163008E7F809363008091F5 +:10081000D8008F7D8093D8008091E0008E7F8093F8 +:10082000E0008091E1008E7F8093E1008091E20002 +:1008300081608093E2008091E100877F8093E100F6 +:100840008091E20088608093E2000895C1DF81E03A +:100850008093260208951092E20008951092E1001C +:1008600008951F920F920FB60F9211241F932F938A +:100870003F934F935F936F937F938F939F93AF9328 +:10088000BF93EF93FF93E9EEF0E0108117701082B1 +:10089000E0EFF0E08081877F80837894C3D0F89484 +:1008A000A9EEB0E01C92E0EFF0E0808188608083E8 +:1008B0001C93FF91EF91BF91AF919F918F917F9189 +:1008C0006F915F914F913F912F911F910F900FBEAC +:1008D0000F901F9018951F920F920FB60F92112430 +:1008E0002F933F934F935F936F937F938F939F9338 +:1008F000AF93BF93EF93FF938091E10080FF1BC004 +:100900008091E20080FF17C08091E1008E7F80938C +:10091000E1008091E2008E7F8093E2008091E2000E +:1009200080618093E2008091D80080628093D8003B +:1009300019BC1EBAD1D18091E10084FF29C08091F9 +:10094000E20084FF25C084E089BD89B5826089BD4D +:1009500009B400FEFDCF8091D8008F7D8093D80030 +:100960008091E1008F7E8093E1008091E2008F7E94 +:100970008093E2008091E20081608093E2008091A8 +:100980002502882311F481E001C084E08EBBA4D14C +:100990008091E10083FF27C08091E20083FF23C0A4 +:1009A0008091E100877F8093E10082E08EBB10920E +:1009B00025028091E1008E7F8093E1008091E2002A +:1009C0008E7F8093E2008091E20080618093E2005C +:1009D000AADD80E060E042E093DD8091F000886075 +:1009E0008093F00079D18091E10082FF0AC080916C +:1009F000E20082FF06C08091E1008B7F8093E100DE +:100A00006BD1FF91EF91BF91AF919F918F917F91AA +:100A10006F915F914F913F912F910F900FBE0F906B +:100A20001F9018951F93DF93CF93CDB7DEB7AC9788 +:100A30000FB6F894DEBF0FBECDBFE7E2F2E08091C3 +:100A4000F100819322E0EF32F207C9F7809127028B +:100A500030912802353009F487C0363040F4313007 +:100A6000C9F1313070F0333009F01DC133C0383076 +:100A700009F4EFC0393009F4FEC0363009F013C173 +:100A800092C0803821F0823809F00DC108C09091E1 +:100A9000230280912402882399F0926011C08091F2 +:100AA0002B0287708093E9008091EB0090E025E0B5 +:100AB000969587952A95E1F7982F91701092E90005 +:100AC0008091E800877F8093E8009093F100109276 +:100AD000F100CAC0882319F0823009F0E4C090E028 +:100AE0008F719070009721F0029709F0DDC00CC063 +:100AF00080912902813009F0D7C01092240233304E +:100B000069F5809324022AC080912902882331F557 +:100B100020912B02277009F4C7C02093E90080912F +:100B2000EB0080FFC1C0333021F48091EB00806284 +:100B300013C08091EB0080618093EB0081E090E036 +:100B400002C0880F991F2A95E2F78093EA0010925D +:100B5000EA008091EB0088608093EB001092E9003E +:100B60008091E800877F83C0882309F09CC01091A2 +:100B700029028091E800877F8093E800E8DC04C0C8 +:100B80008EB3882309F490C08091E80080FFF8CFED +:100B9000812F8F7711F492E001C093E09EBB8068B3 +:100BA0008093E30081C08058823008F07CC080913F +:100BB000290290912A0223E08C3D920799F55FB7B4 +:100BC000F894DE0115964EE020E030E061E2E42F7B +:100BD000F0E060935700849120FF03C082958F70EE +:100BE0004F5F982F9F70892F805D8A3308F0895F4F +:100BF0008C9311961C9211972F5F3F4F12962431C0 +:100C0000310529F75FBF8AE28B8383E08C83809173 +:100C1000E800877F8093E800CE0103966AE270E0E7 +:100C2000E4DC11C060912B02AE014F5F5F4F2CDC02 +:100C3000BC010097C9F18091E800877F8093E800AC +:100C400089819A812BDD8091E8008B778093E80081 +:100C50002BC0803841F58091E800877F8093E800C1 +:100C6000809125028093F1008091E8008E77809337 +:100C7000E8006DDC19C08823B1F49091290292300C +:100C800098F48091E800877F8093E8009093250294 +:100C90005EDC80912502882311F483E001C084E0AA +:100CA0008EBB2DDB01C028DB8091E80083FF0AC0EA +:100CB0008091EB0080628093EB008091E800877F59 +:100CC0008093E800AC960FB6F894DEBF0FBECDBFA0 +:100CD000CF91DF911F91089508951F938EB38823BC +:100CE00061F01091E9001092E9008091E80083FF23 +:100CF00001C098DE17701093E9001F9108950895C0 +:100D0000FC018EB3843021F587859089A189B28951 +:100D10000097A105B105E1F085818093E9008091FC +:100D2000E80082FF15C08091F200882319F42FEFAC +:100D30003FEF04C08091F100282F30E08091F20055 +:100D4000882341F48091E8008B778093E80002C00B +:100D50002FEF3FEFC9010895FC018EB3843011F5E8 +:100D600087859089A189B2890097A105B105D1F045 +:100D700081818093E9008091F2008823A9F090910D +:100D8000E8008091E8008E778093E80095FD0CC024 +:100D9000FDDB982F882349F48091E8008E778093BB +:100DA000E80003C092E001C090E0892F0895FC01A3 +:100DB0008EB3843051F487859089A189B2890097D8 +:100DC000A105B10511F0CF01C7CF08951F93FC0114 +:100DD000162F8EB38430D9F487859089A189B28982 +:100DE0000097A105B10599F081818093E900809178 +:100DF000E80085FD08C08091E8008E778093E800C8 +:100E0000C5DB882329F41093F10080E001C082E063 +:100E10001F9108950F931F93CF93DF93EC010D96CD +:100E2000FC0189E0DF011D928A95E9F72A813B8167 +:100E300009818C81882311F410E001C014E0C901FC +:100E400051DB182B1260802F61E8412F59DB88237A +:100E500029F12E813F810D818885882311F410E0CE +:100E600001C014E0C9013EDB182B1260802F60E83E +:100E7000412F46DB882391F02A853B8509858C85A7 +:100E8000882311F410E001C014E0C9012BDB182BFA +:100E90001260802F61EC412F33DB01C080E0DF91D5 +:100EA000CF911F910F910895CF93DF93EC01809123 +:100EB000E80083FF60C0888190E020912B02309190 +:100EC0002C022817390709F056C080912802813278 +:100ED00061F0823220F4803209F04DC019C08232B4 +:100EE00069F1833209F047C038C080912702813A06 +:100EF00009F041C08091E800877F8093E800CE012F +:100F00000F9667E070E071DB8091E8008B7713C08B +:100F100080912702813279F58091E800877F809364 +:100F2000E800CE010F9667E070E013DCCE013ED9F9 +:100F30008091E8008E778093E8001DC080912702A1 +:100F40008132C9F48091E800877F8093E800809126 +:100F500029028D87CE01C8D90DC080912702813228 +:100F600051F48091E800877F8093E800CE01609182 +:100F70002902C5DEECDADF91CF910895A1E21A2EA5 +:100F8000AA1BBB1BFD010DC0AA1FBB1FEE1FFF1F2D +:100F9000A217B307E407F50720F0A21BB30BE40B7D +:100FA000F50B661F771F881F991F1A9469F76095C4 +:100FB0007095809590959B01AC01BD01CF0108957E +:040FC000F894FFCFD3 +:100FC400000340000004400000020800000000008C +:060FD40000000000000017 +:00000001FF diff --git a/external/arduino/avr/firmwares/atmegaxxu2/arduino-usbserial/Arduino-usbserial.c b/external/arduino/avr/firmwares/atmegaxxu2/arduino-usbserial/Arduino-usbserial.c new file mode 100644 index 000000000..efa9998fa --- /dev/null +++ b/external/arduino/avr/firmwares/atmegaxxu2/arduino-usbserial/Arduino-usbserial.c @@ -0,0 +1,242 @@ +/* + LUFA Library + Copyright (C) Dean Camera, 2010. + + dean [at] fourwalledcubicle [dot] com + www.fourwalledcubicle.com +*/ + +/* + Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com) + + Permission to use, copy, modify, distribute, and sell this + software and its documentation for any purpose is hereby granted + without fee, provided that the above copyright notice appear in + all copies and that both that the copyright notice and this + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the + software without specific, written prior permission. + + The author disclaim all warranties with regard to this + software, including all implied warranties of merchantability + and fitness. In no event shall the author be liable for any + special, indirect or consequential damages or any damages + whatsoever resulting from loss of use, data or profits, whether + in an action of contract, negligence or other tortious action, + arising out of or in connection with the use or performance of + this software. +*/ + +/** \file + * + * Main source file for the Arduino-usbserial project. This file contains the main tasks of + * the project and is responsible for the initial application hardware configuration. + */ + +#include "Arduino-usbserial.h" + +/** Circular buffer to hold data from the host before it is sent to the device via the serial port. */ +RingBuff_t USBtoUSART_Buffer; + +/** Circular buffer to hold data from the serial port before it is sent to the host. */ +RingBuff_t USARTtoUSB_Buffer; + +/** Pulse generation counters to keep track of the number of milliseconds remaining for each pulse type */ +volatile struct +{ + uint8_t TxLEDPulse; /**< Milliseconds remaining for data Tx LED pulse */ + uint8_t RxLEDPulse; /**< Milliseconds remaining for data Rx LED pulse */ + uint8_t PingPongLEDPulse; /**< Milliseconds remaining for enumeration Tx/Rx ping-pong LED pulse */ +} PulseMSRemaining; + +/** LUFA CDC Class driver interface configuration and state information. This structure is + * passed to all CDC Class driver functions, so that multiple instances of the same class + * within a device can be differentiated from one another. + */ +USB_ClassInfo_CDC_Device_t VirtualSerial_CDC_Interface = + { + .Config = + { + .ControlInterfaceNumber = 0, + + .DataINEndpointNumber = CDC_TX_EPNUM, + .DataINEndpointSize = CDC_TXRX_EPSIZE, + .DataINEndpointDoubleBank = false, + + .DataOUTEndpointNumber = CDC_RX_EPNUM, + .DataOUTEndpointSize = CDC_TXRX_EPSIZE, + .DataOUTEndpointDoubleBank = false, + + .NotificationEndpointNumber = CDC_NOTIFICATION_EPNUM, + .NotificationEndpointSize = CDC_NOTIFICATION_EPSIZE, + .NotificationEndpointDoubleBank = false, + }, + }; + +/** Main program entry point. This routine contains the overall program flow, including initial + * setup of all components and the main program loop. + */ +int main(void) +{ + SetupHardware(); + + RingBuffer_InitBuffer(&USBtoUSART_Buffer); + RingBuffer_InitBuffer(&USARTtoUSB_Buffer); + + sei(); + + for (;;) + { + /* Only try to read in bytes from the CDC interface if the transmit buffer is not full */ + if (!(RingBuffer_IsFull(&USBtoUSART_Buffer))) + { + int16_t ReceivedByte = CDC_Device_ReceiveByte(&VirtualSerial_CDC_Interface); + + /* Read bytes from the USB OUT endpoint into the USART transmit buffer */ + if (!(ReceivedByte < 0)) + RingBuffer_Insert(&USBtoUSART_Buffer, ReceivedByte); + } + + /* Check if the UART receive buffer flush timer has expired or the buffer is nearly full */ + RingBuff_Count_t BufferCount = RingBuffer_GetCount(&USARTtoUSB_Buffer); + if ((TIFR0 & (1 << TOV0)) || (BufferCount > BUFFER_NEARLY_FULL)) + { + TIFR0 |= (1 << TOV0); + + if (USARTtoUSB_Buffer.Count) { + LEDs_TurnOnLEDs(LEDMASK_TX); + PulseMSRemaining.TxLEDPulse = TX_RX_LED_PULSE_MS; + } + + /* Read bytes from the USART receive buffer into the USB IN endpoint */ + while (BufferCount--) + CDC_Device_SendByte(&VirtualSerial_CDC_Interface, RingBuffer_Remove(&USARTtoUSB_Buffer)); + + /* Turn off TX LED(s) once the TX pulse period has elapsed */ + if (PulseMSRemaining.TxLEDPulse && !(--PulseMSRemaining.TxLEDPulse)) + LEDs_TurnOffLEDs(LEDMASK_TX); + + /* Turn off RX LED(s) once the RX pulse period has elapsed */ + if (PulseMSRemaining.RxLEDPulse && !(--PulseMSRemaining.RxLEDPulse)) + LEDs_TurnOffLEDs(LEDMASK_RX); + } + + /* Load the next byte from the USART transmit buffer into the USART */ + if (!(RingBuffer_IsEmpty(&USBtoUSART_Buffer))) { + Serial_TxByte(RingBuffer_Remove(&USBtoUSART_Buffer)); + + LEDs_TurnOnLEDs(LEDMASK_RX); + PulseMSRemaining.RxLEDPulse = TX_RX_LED_PULSE_MS; + } + + CDC_Device_USBTask(&VirtualSerial_CDC_Interface); + USB_USBTask(); + } +} + +/** Configures the board hardware and chip peripherals for the demo's functionality. */ +void SetupHardware(void) +{ + /* Disable watchdog if enabled by bootloader/fuses */ + MCUSR &= ~(1 << WDRF); + wdt_disable(); + + /* Hardware Initialization */ + Serial_Init(9600, false); + LEDs_Init(); + USB_Init(); + + /* Start the flush timer so that overflows occur rapidly to push received bytes to the USB interface */ + TCCR0B = (1 << CS02); + + /* Pull target /RESET line high */ + AVR_RESET_LINE_PORT |= AVR_RESET_LINE_MASK; + AVR_RESET_LINE_DDR |= AVR_RESET_LINE_MASK; +} + +/** Event handler for the library USB Configuration Changed event. */ +void EVENT_USB_Device_ConfigurationChanged(void) +{ + CDC_Device_ConfigureEndpoints(&VirtualSerial_CDC_Interface); +} + +/** Event handler for the library USB Unhandled Control Request event. */ +void EVENT_USB_Device_UnhandledControlRequest(void) +{ + CDC_Device_ProcessControlRequest(&VirtualSerial_CDC_Interface); +} + +/** Event handler for the CDC Class driver Line Encoding Changed event. + * + * \param[in] CDCInterfaceInfo Pointer to the CDC class interface configuration structure being referenced + */ +void EVENT_CDC_Device_LineEncodingChanged(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) +{ + uint8_t ConfigMask = 0; + + switch (CDCInterfaceInfo->State.LineEncoding.ParityType) + { + case CDC_PARITY_Odd: + ConfigMask = ((1 << UPM11) | (1 << UPM10)); + break; + case CDC_PARITY_Even: + ConfigMask = (1 << UPM11); + break; + } + + if (CDCInterfaceInfo->State.LineEncoding.CharFormat == CDC_LINEENCODING_TwoStopBits) + ConfigMask |= (1 << USBS1); + + switch (CDCInterfaceInfo->State.LineEncoding.DataBits) + { + case 6: + ConfigMask |= (1 << UCSZ10); + break; + case 7: + ConfigMask |= (1 << UCSZ11); + break; + case 8: + ConfigMask |= ((1 << UCSZ11) | (1 << UCSZ10)); + break; + } + + /* Must turn off USART before reconfiguring it, otherwise incorrect operation may occur */ + UCSR1B = 0; + UCSR1A = 0; + UCSR1C = 0; + + /* Special case 57600 baud for compatibility with the ATmega328 bootloader. */ + UBRR1 = (CDCInterfaceInfo->State.LineEncoding.BaudRateBPS == 57600) + ? SERIAL_UBBRVAL(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS) + : SERIAL_2X_UBBRVAL(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS); + + UCSR1C = ConfigMask; + UCSR1A = (CDCInterfaceInfo->State.LineEncoding.BaudRateBPS == 57600) ? 0 : (1 << U2X1); + UCSR1B = ((1 << RXCIE1) | (1 << TXEN1) | (1 << RXEN1)); +} + +/** ISR to manage the reception of data from the serial port, placing received bytes into a circular buffer + * for later transmission to the host. + */ +ISR(USART1_RX_vect, ISR_BLOCK) +{ + uint8_t ReceivedByte = UDR1; + + if (USB_DeviceState == DEVICE_STATE_Configured) + RingBuffer_Insert(&USARTtoUSB_Buffer, ReceivedByte); +} + +/** Event handler for the CDC Class driver Host-to-Device Line Encoding Changed event. + * + * \param[in] CDCInterfaceInfo Pointer to the CDC class interface configuration structure being referenced + */ +void EVENT_CDC_Device_ControLineStateChanged(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) +{ + bool CurrentDTRState = (CDCInterfaceInfo->State.ControlLineStates.HostToDevice & CDC_CONTROL_LINE_OUT_DTR); + + if (CurrentDTRState) + AVR_RESET_LINE_PORT &= ~AVR_RESET_LINE_MASK; + else + AVR_RESET_LINE_PORT |= AVR_RESET_LINE_MASK; +} diff --git a/external/arduino/avr/firmwares/atmegaxxu2/arduino-usbserial/Arduino-usbserial.h b/external/arduino/avr/firmwares/atmegaxxu2/arduino-usbserial/Arduino-usbserial.h new file mode 100644 index 000000000..2183512c8 --- /dev/null +++ b/external/arduino/avr/firmwares/atmegaxxu2/arduino-usbserial/Arduino-usbserial.h @@ -0,0 +1,79 @@ +/* + LUFA Library + Copyright (C) Dean Camera, 2010. + + dean [at] fourwalledcubicle [dot] com + www.fourwalledcubicle.com +*/ + +/* + Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com) + + Permission to use, copy, modify, distribute, and sell this + software and its documentation for any purpose is hereby granted + without fee, provided that the above copyright notice appear in + all copies and that both that the copyright notice and this + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the + software without specific, written prior permission. + + The author disclaim all warranties with regard to this + software, including all implied warranties of merchantability + and fitness. In no event shall the author be liable for any + special, indirect or consequential damages or any damages + whatsoever resulting from loss of use, data or profits, whether + in an action of contract, negligence or other tortious action, + arising out of or in connection with the use or performance of + this software. +*/ + +/** \file + * + * Header file for Arduino-usbserial.c. + */ + +#ifndef _ARDUINO_USBSERIAL_H_ +#define _ARDUINO_USBSERIAL_H_ + + /* Includes: */ + #include + #include + #include + #include + + #include "Descriptors.h" + + #include "Lib/LightweightRingBuff.h" + + #include + #include + #include + #include + #include + + /* Macros: */ + /** LED mask for the library LED driver, to indicate TX activity. */ + #define LEDMASK_TX LEDS_LED1 + + /** LED mask for the library LED driver, to indicate RX activity. */ + #define LEDMASK_RX LEDS_LED2 + + /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */ + #define LEDMASK_ERROR (LEDS_LED1 | LEDS_LED2) + + /** LED mask for the library LED driver, to indicate that the USB interface is busy. */ + #define LEDMASK_BUSY (LEDS_LED1 | LEDS_LED2) + + /* Function Prototypes: */ + void SetupHardware(void); + + void EVENT_USB_Device_Connect(void); + void EVENT_USB_Device_Disconnect(void); + void EVENT_USB_Device_ConfigurationChanged(void); + void EVENT_USB_Device_UnhandledControlRequest(void); + + void EVENT_CDC_Device_LineEncodingChanged(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo); + void EVENT_CDC_Device_ControLineStateChanged(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo); + +#endif /* _ARDUINO_USBSERIAL_H_ */ diff --git a/external/arduino/avr/firmwares/atmegaxxu2/arduino-usbserial/Board/LEDs.h b/external/arduino/avr/firmwares/atmegaxxu2/arduino-usbserial/Board/LEDs.h new file mode 100644 index 000000000..41465f22d --- /dev/null +++ b/external/arduino/avr/firmwares/atmegaxxu2/arduino-usbserial/Board/LEDs.h @@ -0,0 +1,110 @@ +/* + LUFA Library + Copyright (C) Dean Camera, 2010. + + dean [at] fourwalledcubicle [dot] com + www.fourwalledcubicle.com +*/ + +/* + Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com) + + Permission to use, copy, modify, distribute, and sell this + software and its documentation for any purpose is hereby granted + without fee, provided that the above copyright notice appear in + all copies and that both that the copyright notice and this + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the + software without specific, written prior permission. + + The author disclaim all warranties with regard to this + software, including all implied warranties of merchantability + and fitness. In no event shall the author be liable for any + special, indirect or consequential damages or any damages + whatsoever resulting from loss of use, data or profits, whether + in an action of contract, negligence or other tortious action, + arising out of or in connection with the use or performance of + this software. +*/ + +/* + Board LEDs driver for the Benito board, from www.dorkbotpdx.org. +*/ + +#ifndef __LEDS_ARDUINOUNO_H__ +#define __LEDS_ARDUINOUNO_H__ + + /* Includes: */ + #include + +/* Enable C linkage for C++ Compilers: */ + #if defined(__cplusplus) + extern "C" { + #endif + + /* Preprocessor Checks: */ + #if !defined(INCLUDE_FROM_LEDS_H) + #error Do not include this file directly. Include LUFA/Drivers/Board/LEDS.h instead. + #endif + + /* Public Interface - May be used in end-application: */ + /* Macros: */ + /** LED mask for the first LED on the board. */ + #define LEDS_LED1 (1 << 5) + + /** LED mask for the second LED on the board. */ + #define LEDS_LED2 (1 << 4) + + /** LED mask for all the LEDs on the board. */ + #define LEDS_ALL_LEDS (LEDS_LED1 | LEDS_LED2) + + /** LED mask for the none of the board LEDs */ + #define LEDS_NO_LEDS 0 + + /* Inline Functions: */ + #if !defined(__DOXYGEN__) + static inline void LEDs_Init(void) + { + DDRD |= LEDS_ALL_LEDS; + PORTD |= LEDS_ALL_LEDS; + } + + static inline void LEDs_TurnOnLEDs(const uint8_t LEDMask) + { + PORTD &= ~LEDMask; + } + + static inline void LEDs_TurnOffLEDs(const uint8_t LEDMask) + { + PORTD |= LEDMask; + } + + static inline void LEDs_SetAllLEDs(const uint8_t LEDMask) + { + PORTD = ((PORTD | LEDS_ALL_LEDS) & ~LEDMask); + } + + static inline void LEDs_ChangeLEDs(const uint8_t LEDMask, const uint8_t ActiveMask) + { + PORTD = ((PORTD | ActiveMask) & ~LEDMask); + } + + static inline void LEDs_ToggleLEDs(const uint8_t LEDMask) + { + PORTD ^= LEDMask; + } + + static inline uint8_t LEDs_GetLEDs(void) ATTR_WARN_UNUSED_RESULT; + static inline uint8_t LEDs_GetLEDs(void) + { + return (PORTD & LEDS_ALL_LEDS); + } + #endif + + /* Disable C linkage for C++ Compilers: */ + #if defined(__cplusplus) + } + #endif + +#endif diff --git a/external/arduino/avr/firmwares/atmegaxxu2/arduino-usbserial/Descriptors.c b/external/arduino/avr/firmwares/atmegaxxu2/arduino-usbserial/Descriptors.c new file mode 100644 index 000000000..f81b154b7 --- /dev/null +++ b/external/arduino/avr/firmwares/atmegaxxu2/arduino-usbserial/Descriptors.c @@ -0,0 +1,277 @@ +/* + LUFA Library + Copyright (C) Dean Camera, 2010. + + dean [at] fourwalledcubicle [dot] com + www.fourwalledcubicle.com +*/ + +/* + Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com) + + Permission to use, copy, modify, distribute, and sell this + software and its documentation for any purpose is hereby granted + without fee, provided that the above copyright notice appear in + all copies and that both that the copyright notice and this + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the + software without specific, written prior permission. + + The author disclaim all warranties with regard to this + software, including all implied warranties of merchantability + and fitness. In no event shall the author be liable for any + special, indirect or consequential damages or any damages + whatsoever resulting from loss of use, data or profits, whether + in an action of contract, negligence or other tortious action, + arising out of or in connection with the use or performance of + this software. +*/ + +/** \file + * + * USB Device Descriptors, for library use when in USB device mode. Descriptors are special + * computer-readable structures which the host requests upon device enumeration, to determine + * the device's capabilities and functions. + */ + +#include "Descriptors.h" + +/* On some devices, there is a factory set internal serial number which can be automatically sent to the host as + * the device's serial number when the Device Descriptor's .SerialNumStrIndex entry is set to USE_INTERNAL_SERIAL. + * This allows the host to track a device across insertions on different ports, allowing them to retain allocated + * resources like COM port numbers and drivers. On demos using this feature, give a warning on unsupported devices + * so that the user can supply their own serial number descriptor instead or remove the USE_INTERNAL_SERIAL value + * from the Device Descriptor (forcing the host to generate a serial number for each device from the VID, PID and + * port location). + */ +#if (USE_INTERNAL_SERIAL == NO_DESCRIPTOR) + #warning USE_INTERNAL_SERIAL is not available on this AVR - please manually construct a device serial descriptor. +#endif + +/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall + * device characteristics, including the supported USB version, control endpoint size and the + * number of device configurations. The descriptor is read out by the USB host when the enumeration + * process begins. + */ +const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = +{ + .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device}, + + .USBSpecification = VERSION_BCD(01.10), + .Class = 0x02, + .SubClass = 0x00, + .Protocol = 0x00, + + .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE, + + .VendorID = 0x03EB, // Atmel + + .ProductID = 0x204B, // LUFA USB to Serial Demo Application + .ReleaseNumber = 0x0001, + + .ManufacturerStrIndex = 0x01, + .ProductStrIndex = 0x02, + .SerialNumStrIndex = USE_INTERNAL_SERIAL, + + .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS +}; + +/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage + * of the device in one of its supported configurations, including information about any device interfaces + * and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting + * a configuration so that the host may correctly communicate with the USB device. + */ +const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor = +{ + .Config = + { + .Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration}, + + .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t), + .TotalInterfaces = 2, + + .ConfigurationNumber = 1, + .ConfigurationStrIndex = NO_DESCRIPTOR, + + .ConfigAttributes = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED), + + .MaxPowerConsumption = USB_CONFIG_POWER_MA(100) + }, + + .CDC_CCI_Interface = + { + .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, + + .InterfaceNumber = 0, + .AlternateSetting = 0, + + .TotalEndpoints = 1, + + .Class = 0x02, + .SubClass = 0x02, + .Protocol = 0x01, + + .InterfaceStrIndex = NO_DESCRIPTOR + }, + + .CDC_Functional_IntHeader = + { + .Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24}, + .SubType = 0x00, + + .Data = {0x01, 0x10} + }, + + .CDC_Functional_AbstractControlManagement = + { + .Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(1)), .Type = 0x24}, + .SubType = 0x02, + + .Data = {0x06} + }, + + .CDC_Functional_Union = + { + .Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24}, + .SubType = 0x06, + + .Data = {0x00, 0x01} + }, + + .CDC_NotificationEndpoint = + { + .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, + + .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC_NOTIFICATION_EPNUM), + .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), + .EndpointSize = CDC_NOTIFICATION_EPSIZE, + .PollingIntervalMS = 0xFF + }, + + .CDC_DCI_Interface = + { + .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, + + .InterfaceNumber = 1, + .AlternateSetting = 0, + + .TotalEndpoints = 2, + + .Class = 0x0A, + .SubClass = 0x00, + .Protocol = 0x00, + + .InterfaceStrIndex = NO_DESCRIPTOR + }, + + .CDC_DataOutEndpoint = + { + .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, + + .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_OUT | CDC_RX_EPNUM), + .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), + .EndpointSize = CDC_TXRX_EPSIZE, + .PollingIntervalMS = 0x01 + }, + + .CDC_DataInEndpoint = + { + .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, + + .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC_TX_EPNUM), + .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), + .EndpointSize = CDC_TXRX_EPSIZE, + .PollingIntervalMS = 0x01 + } +}; + +/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests + * the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate + * via the language ID table available at USB.org what languages the device supports for its string descriptors. + */ +const USB_Descriptor_String_t PROGMEM LanguageString = +{ + .Header = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String}, + + .UnicodeString = {LANGUAGE_ID_ENG} +}; + +/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable + * form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device + * Descriptor. + */ +const USB_Descriptor_String_t PROGMEM ManufacturerString = +{ + .Header = {.Size = USB_STRING_LEN(24), .Type = DTYPE_String}, + + .UnicodeString = L"Arduino (www.arduino.cc)" +}; + +/** Product descriptor string. This is a Unicode string containing the product's details in human readable form, + * and is read out upon request by the host when the appropriate string ID is requested, listed in the Device + * Descriptor. + */ +const USB_Descriptor_String_t PROGMEM ProductString = +{ + #if (ARDUINO_MODEL_PID == ARDUINO_UNO_PID) + .Header = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String}, + + .UnicodeString = L"Arduino Uno" + #elif (ARDUINO_MODEL_PID == ARDUINO_MEGA2560_PID) + .Header = {.Size = USB_STRING_LEN(17), .Type = DTYPE_String}, + + .UnicodeString = L"Arduino Mega 2560" + #endif + +}; + +/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors" + * documentation) by the application code so that the address and size of a requested descriptor can be given + * to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function + * is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the + * USB host. + */ +uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, + const uint8_t wIndex, + void** const DescriptorAddress) +{ + const uint8_t DescriptorType = (wValue >> 8); + const uint8_t DescriptorNumber = (wValue & 0xFF); + + void* Address = NULL; + uint16_t Size = NO_DESCRIPTOR; + + switch (DescriptorType) + { + case DTYPE_Device: + Address = (void*)&DeviceDescriptor; + Size = sizeof(USB_Descriptor_Device_t); + break; + case DTYPE_Configuration: + Address = (void*)&ConfigurationDescriptor; + Size = sizeof(USB_Descriptor_Configuration_t); + break; + case DTYPE_String: + switch (DescriptorNumber) + { + case 0x00: + Address = (void*)&LanguageString; + Size = pgm_read_byte(&LanguageString.Header.Size); + break; + case 0x01: + Address = (void*)&ManufacturerString; + Size = pgm_read_byte(&ManufacturerString.Header.Size); + break; + case 0x02: + Address = (void*)&ProductString; + Size = pgm_read_byte(&ProductString.Header.Size); + break; + } + + break; + } + + *DescriptorAddress = Address; + return Size; +} diff --git a/external/arduino/avr/firmwares/atmegaxxu2/arduino-usbserial/Descriptors.h b/external/arduino/avr/firmwares/atmegaxxu2/arduino-usbserial/Descriptors.h new file mode 100644 index 000000000..2bce3d78e --- /dev/null +++ b/external/arduino/avr/firmwares/atmegaxxu2/arduino-usbserial/Descriptors.h @@ -0,0 +1,88 @@ +/* + LUFA Library + Copyright (C) Dean Camera, 2010. + + dean [at] fourwalledcubicle [dot] com + www.fourwalledcubicle.com +*/ + +/* + Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com) + + Permission to use, copy, modify, distribute, and sell this + software and its documentation for any purpose is hereby granted + without fee, provided that the above copyright notice appear in + all copies and that both that the copyright notice and this + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the + software without specific, written prior permission. + + The author disclaim all warranties with regard to this + software, including all implied warranties of merchantability + and fitness. In no event shall the author be liable for any + special, indirect or consequential damages or any damages + whatsoever resulting from loss of use, data or profits, whether + in an action of contract, negligence or other tortious action, + arising out of or in connection with the use or performance of + this software. +*/ + +/** \file + * + * Header file for Descriptors.c. + */ + +#ifndef _DESCRIPTORS_H_ +#define _DESCRIPTORS_H_ + + /* Includes: */ + #include + + #include + #include + + /* Product-specific definitions: */ + #define ARDUINO_UNO_PID 0x0001 + #define ARDUINO_MEGA2560_PID 0x0010 + + /* Macros: */ + /** Endpoint number of the CDC device-to-host notification IN endpoint. */ + #define CDC_NOTIFICATION_EPNUM 2 + + /** Endpoint number of the CDC device-to-host data IN endpoint. */ + #define CDC_TX_EPNUM 3 + + /** Endpoint number of the CDC host-to-device data OUT endpoint. */ + #define CDC_RX_EPNUM 4 + + /** Size in bytes of the CDC device-to-host notification IN endpoint. */ + #define CDC_NOTIFICATION_EPSIZE 8 + + /** Size in bytes of the CDC data IN and OUT endpoints. */ + #define CDC_TXRX_EPSIZE 64 + + /* Type Defines: */ + /** Type define for the device configuration descriptor structure. This must be defined in the + * application code, as the configuration descriptor contains several sub-descriptors which + * vary between devices, and which describe the device's usage to the host. + */ + typedef struct + { + USB_Descriptor_Configuration_Header_t Config; + USB_Descriptor_Interface_t CDC_CCI_Interface; + CDC_FUNCTIONAL_DESCRIPTOR(2) CDC_Functional_IntHeader; + CDC_FUNCTIONAL_DESCRIPTOR(1) CDC_Functional_AbstractControlManagement; + CDC_FUNCTIONAL_DESCRIPTOR(2) CDC_Functional_Union; + USB_Descriptor_Endpoint_t CDC_NotificationEndpoint; + USB_Descriptor_Interface_t CDC_DCI_Interface; + USB_Descriptor_Endpoint_t CDC_DataOutEndpoint; + USB_Descriptor_Endpoint_t CDC_DataInEndpoint; + } USB_Descriptor_Configuration_t; + + /* Function Prototypes: */ + uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, + const uint8_t wIndex, + void** const DescriptorAddress) ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); + +#endif diff --git a/external/arduino/avr/firmwares/atmegaxxu2/arduino-usbserial/Genuino-usbserial-atmega16u2-Mega2560-R3.hex b/external/arduino/avr/firmwares/atmegaxxu2/arduino-usbserial/Genuino-usbserial-atmega16u2-Mega2560-R3.hex new file mode 100644 index 000000000..5393cf613 --- /dev/null +++ b/external/arduino/avr/firmwares/atmegaxxu2/arduino-usbserial/Genuino-usbserial-atmega16u2-Mega2560-R3.hex @@ -0,0 +1,248 @@ +:100000009EC00000B7C00000B5C00000B3C0000033 +:10001000B1C00000AFC00000ADC00000ABC0000028 +:10002000A9C00000A7C00000A5C00000FCC30000DC +:10003000A1C400009FC000009DC000009BC0000044 +:1000400099C0000097C0000095C0000093C0000058 +:1000500091C000008FC000008DC00000C6C100002C +:1000600089C0000087C0000085C0000083C0000078 +:1000700081C00000160538052206380522067A05DB +:1000800097052206EA05FC052403470065006E007B +:10009000750069006E006F0020004D00650067006C +:1000A00061002000320035003600300000003A03C5 +:1000B000410072006400750069006E006F0020004E +:1000C0004C004C00430020002800770077007700A8 +:1000D0002E00610072006400750069006E006F0000 +:1000E0002E006300630029000000040309040902D4 +:1000F0003E00020100C032090400000102020100BA +:100100000524000110042402060524060001070549 +:1001100082030800FF09040100020A00000007052D +:100120000402400001070583024000011201100192 +:10013000020000084123420201000102DC011124F7 +:100140001FBECFEFD2E0DEBFCDBF11E0A0E0B1E037 +:10015000EEE4FFE002C005900D92A631B107D9F799 +:1001600012E0A6E1B1E001C01D92AF32B107E1F7A4 +:1001700064D0EBC645CFFC01E058FF4FA081B181B0 +:100180006C93A081B1819D012F5F3F4F318320830C +:100190002E173F0721F412969C938E9311972FB739 +:1001A000F894FC01EC57FF4F80818F5F80832FBF55 +:1001B0000895DC01AE57BF4FED91FC91119741912D +:1001C0001196FC93EE939C0120583F4FE217F307E2 +:1001D00011F48D939C932FB7F894FC01EC57FF4FCB +:1001E0009081915090832FBF842F089584B7877F8B +:1001F00084BF88E10FB6F89480936000109260008D +:100200000FBE87E690E09093CD008093CC0086E00F +:100210008093CA001092C80088E18093C900539A65 +:100220005A9A8AB180638AB98BB180638BB9F0D254 +:1002300084E085BD5F9A579A0895D8DF2FB7F89468 +:100240008EE991E090931F0280931E029093210209 +:10025000809320022FBF2FB7F89489E191E090930B +:100260009A018093990190939C0180939B012FBFE9 +:100270007894D3E09FB7F894809122029FBF803892 +:1002800049F080E091E00ED697FD04C0682F8EE91A +:1002900091E071DF8FB7F894C0919D018FBFA8994D +:1002A00002C0C13658F1A89A80919D01882319F0A7 +:1002B0005D98D0931601CC2349F089E191E079DF74 +:1002C000682F80E091E093D5C150F5CF8091160161 +:1002D000882341F08091160181508093160181118D +:1002E00001C05D9A80911701882341F08091170128 +:1002F000815080931701811101C05C9A9FB7F894D7 +:10030000809122029FBF882361F08EE991E051DF46 +:100310009091C80095FFFCCF8093CE005C98D0935D +:10032000170180E091E0B0D59AD4A4CF80E091E0AD +:1003300011C580E091E0A5C41F93CF93DF93EC013A +:100340008C89813031F0823011F010E003C010E26E +:1003500001C010E38B89823009F418608D898730E1 +:1003600031F0883031F0863029F4126003C0146017 +:1003700001C016601092C9001092C8001092CA0005 +:100380002F85388949895A89211581EE3807410519 +:10039000510571F0CA01B9019695879577956795D2 +:1003A00060587B47814E9F4FA8D52150310902C02C +:1003B00020E130E03093CD002093CC001093CA00B0 +:1003C0008F859889A989BA898115914EA105B105B2 +:1003D00011F480E001C082E08093C80088E9809336 +:1003E000C900DF91CF911F9108951F920F920FB610 +:1003F0000F9211242F933F934F935F936F937F93AB +:100400008F939F93AF93BF93EF93FF936091CE0031 +:100410008EB3843019F489E191E0ADDEFF91EF9164 +:10042000BF91AF919F918F917F916F915F914F910C +:100430003F912F910F900FBE0F901F901895FC01C8 +:10044000858580FF02C05F9808955F9A0895292FDF +:1004500033272230310559F02330310569F021303E +:100460003105F9F482E190E02CE231E01EC08EE328 +:1004700090E02EEE30E019C099278130910541F0CF +:100480008230910541F0892B61F4EAEEF0E005C07D +:10049000EEEAF0E002C0E8E8F0E0849190E09F012D +:1004A00004C080E090E020E030E0FA013183208356 +:1004B000089528E030E040E02817390720F44F5F26 +:1004C000220F331FF9CF842F8295807F0895809368 +:1004D000E900EBEEF0E0808181608083EDEEF0E0FA +:1004E00010826093EC0040838091EE00881F882783 +:1004F000881F08951092F40080E08093E900109224 +:10050000F0001092E8001092ED009091EB009E7FB9 +:100510009093EB008F5F853081F7089580912702DB +:1005200087FD05C08091E80080FF0DC010C080915C +:10053000E80082FD04C08EB38111F9CF0895809147 +:10054000E8008B7707C08EB38111ECCF08958091BE +:10055000E8008E778093E800089585E69091EC009E +:1005600090FF05C09091E80090FF05C01BC09091DE +:10057000E80092FD17C09EB39923B1F09EB3953069 +:10058000A9F09091EB0095FD13C09091E10092FFCE +:10059000E5CF9091E1009B7F9093E1008150F1F6CF +:1005A00084E0089580E0089582E0089583E008954E +:1005B00081E0089520912D0230912E0226173707F1 +:1005C00048F06115710539F42091E8002E772093E9 +:1005D000E80001C0B90130E06115710591F1209189 +:1005E000E80023FD38C02091E80022FF06C080917A +:1005F000E80082FF29C080E008952EB3222369F12C +:100600002EB3253061F12091E80020FFE5CF209145 +:10061000F200FC01CF016115710549F0283038F472 +:1006200081918093F100615071092F5FF3CF31E028 +:10063000283009F030E02091E8002E772093E80080 +:10064000CBCF3111CCCFD3CF8EB3882331F08EB343 +:10065000853069F604C081E0089582E0089583E062 +:10066000089520912D0230912E022617370748F069 +:100670006115710539F42091E8002E772093E80088 +:1006800001C0B90130E06115710599F12091E800D0 +:1006900023FD39C02091E80022FF06C08091E800C8 +:1006A00082FF2AC080E008952EB3222371F12EB379 +:1006B000253069F12091E80020FFE5CF2091F2007C +:1006C000FC01CF016115710551F0283040F484918F +:1006D0008093F100615071092F5F3196F2CF31E0C4 +:1006E000283009F030E02091E8002E772093E800D0 +:1006F000CACF3111CBCFD2CF8EB3882331F08EB396 +:10070000853061F604C081E0089582E0089583E0B9 +:1007100008956115710529F42091E8002B77209345 +:10072000E8006115710549F12091E80023FD2AC018 +:100730002EB3222359F12EB3253051F12091E80038 +:1007400022FFF2CFFC018091F200882371F09F011B +:100750002F5F3F4FC9014091F10040836150710903 +:1007600061157105C9F2F901EECFCF01D5CF8EB376 +:10077000882361F08EB3853059F08091E80080FFC6 +:10078000F6CF02C081E0089580E0089582E00895E8 +:1007900083E0089542D044D01EBA109225021092F0 +:1007A00024021092230284E089BD89B5826089BD4C +:1007B00009B400FEFDCF8091D800982F9F779093C9 +:1007C000D80080688093D800809163008E7F8093EA +:1007D00063008091D8008F7D8093D8008091E000E5 +:1007E0008E7F8093E0008091E1008E7F8093E10016 +:1007F0008091E20081608093E2008091E100877F38 +:100800008093E1008091E20088608093E200089587 +:10081000C1DF81E08093260208951092E2000895DE +:100820001092E10008951F920F920FB60F921124BB +:100830002F933F934F935F936F937F938F939F93E8 +:10084000AF93BF93EF93FF938091E10080FF1BC0B4 +:100850008091E20080FF17C08091E1008E7F80933D +:10086000E1008091E2008E7F8093E2008091E200BF +:1008700080618093E2008091D80080628093D800EC +:1008800019BC1EBAEBD18091E10084FF29C0809190 +:10089000E20084FF25C084E089BD89B5826089BDFE +:1008A00009B400FEFDCF8091D8008F7D8093D800E1 +:1008B0008091E1008F7E8093E1008091E2008F7E45 +:1008C0008093E2008091E20081608093E200809159 +:1008D0002502882311F084E001C081E08EBBBED1E7 +:1008E0008091E10083FF27C08091E20083FF23C055 +:1008F0008091E100877F8093E10082E08EBB1092BF +:1009000025028091E1008E7F8093E1008091E200DA +:100910008E7F8093E2008091E20080618093E2000C +:10092000E9DD42E060E080E0D2DD8091F0008860A7 +:100930008093F00093D18091E10082FF0AC0809102 +:10094000E20082FF06C08091E1008B7F8093E1008E +:1009500085D1FF91EF91BF91AF919F918F917F9141 +:100960006F915F914F913F912F910F900FBE0F901C +:100970001F9018951F920F920FB60F9211242F936C +:100980003F934F935F936F937F938F939F93AF9317 +:10099000BF93CF93EF93FF93E9EEF0E0C081C77070 +:1009A0001082E0EFF0E08081877F808378941CD014 +:1009B000F894E9EEF0E01082A0EFB0E08C9188604E +:1009C0008C93C083FF91EF91CF91BF91AF919F9195 +:1009D0008F917F916F915F914F913F912F910F90E8 +:1009E0000FBE0F901F9018951F93CF93DF93CDB735 +:1009F000DEB7AA970FB6F894DEBF0FBECDBFE7E211 +:100A0000F2E08091F100819322E0EF32F207C9F722 +:100A10002091270230912802832F90E08A3091059F +:100A200008F010C1FC01E65CFF4F89C2203881F05C +:100A3000223809F007C180912B0287708093E9006A +:100A40008091EB0085FB882780F91092E90006C0B1 +:100A50008091230290912402911182609091E8008C +:100A6000977F9093E8008093F1001092F100BDC051 +:100A7000822F8D7F09F0E6C0222319F0223061F029 +:100A8000D2C080912902813009F0CDC0333009F005 +:100A900080E08093240228C080912902811124C023 +:100AA00020912B02277009F4BEC02093E9008091A9 +:100AB000EB0080FFB8C08091EB00333011F480620E +:100AC00011C080618093EB0081E090E0022E01C0B4 +:100AD000880F0A94EAF78093EA001092EA00809166 +:100AE000EB0088608093EB001092E9008091E800B1 +:100AF000877F7EC02111A6C0109129028091E80055 +:100B0000877F8093E8000ADD8091E80080FD04C0C3 +:100B10008EB38111F9CF87C0812F8F7711F093E0C9 +:100B200001C092E09EBB80688093E3007CC02058A7 +:100B3000223008F087C08091290290912A028C3DD2 +:100B400023E0920781F583E08A838AE289834FB7A5 +:100B5000F894DE01139620E03EE051E2E32FF0E04E +:100B600050935700E49120FF03C0E295EF703F5F80 +:100B7000EF7090E39E0F9A3310F0E95C01C0E92F0B +:100B80008E2F90E08D939D932F5F243139F74FBFC7 +:100B90008091E800877F8093E8006AE270E0CE01F0 +:100BA000019608DD11C0AE014F5F5F4F60912B02CF +:100BB0004EDC0097C1F12091E800277F2093E800E8 +:100BC000BC0189819A814DDD8091E8008B7780930B +:100BD000E80029C02038B1F58091E800877F809334 +:100BE000E800809125028093F1008091E8008E77E3 +:100BF0008093E80093DC17C0211124C09091290252 +:100C0000923088F48091E800877F8093E800909389 +:100C1000250284DC80912502882311F084E001C044 +:100C200083E08EBB83DB8091E80083FF0DC0809161 +:100C3000EB0080628093EB008091E800877F8093D7 +:100C4000E80002C076DBEFCFAA960FB6F894DEBFBD +:100C50000FBECDBFDF91CF911F9108950895CF931F +:100C60008EB3882359F0C091E900C7701092E90053 +:100C70008091E80083FDB8DEC093E900CF9108952C +:100C80000895CF93DF93EC018091E80083FF5FC06C +:100C9000888190E020912B0230912C02281739078F +:100CA00009F055C080912802813249F018F4803251 +:100CB000C9F04DC0823261F18332C9F148C08091E0 +:100CC0002702813A09F043C08091E800877F809332 +:100CD000E80067E070E0CE010F966CDC8091E800E0 +:100CE0008B7713C080912702813289F58091E800CB +:100CF000877F8093E80067E070E0CE010F9609DD02 +:100D0000CE011ADB8091E8008E778093E8001FC047 +:100D1000809127028132D9F48091E800877F809307 +:100D2000E800809129028D87CE0189DB0DC080917A +:100D30002702813261F48091E800877F8093E80088 +:100D400060912902CE019CDFDF91CF91E7CBDF914B +:100D5000CF9108950F931F93CF93DF93EC01FC0184 +:100D60003D9689E0DF011D928A95E9F72A813B8152 +:100D70008C81882311F014E001C010E00981C901C1 +:100D800098DB412F482B426061E8802FA0DB88234D +:100D900041F12E813F818885882311F014E001C044 +:100DA00010E00D81C90185DB412F482B426060E8CE +:100DB000802F8DDB8823A9F02A853B858C858823AD +:100DC00011F014E001C010E0C985C90172DB412FA8 +:100DD000482B426061EC8C2FDF91CF911F910F91D6 +:100DE00076CB80E0DF91CF911F910F910895CF9343 +:100DF000C62F2EB32430E9F4FC0147855089618960 +:100E00007289452B462B472BA1F081818093E90005 +:100E10008091E80085FF04C0C093F10080E00AC023 +:100E20008091E8008E778093E80097DB8823A1F318 +:100E300001C082E0CF9108952EB3243019F5FC0152 +:100E40004785508961897289452B462B472BD1F004 +:100E500081818093E9008091F200882389F090914C +:100E6000E8008091E8008E778093E80095FD08C047 +:100E700074DB811108C08091E8008E778093E800D0 +:100E800080E0089582E008952EB3243051F4FC01EF +:100E90004785508961897289452B462B472B09F07C +:100EA000CBCF08952EB3243019F08FEF9FEF089524 +:100EB000FC014785508961897289452B462B472B58 +:100EC000A1F385818093E9008091E80082FFEDCF56 +:100ED0008091F200882321F02091F10030E002C0DF +:100EE0002FEF3FEF8091F200811105C08091E80063 +:100EF0008B778093E800C9010895A1E21A2EAA1BFE +:100F0000BB1BFD010DC0AA1FBB1FEE1FFF1FA217B9 +:100F1000B307E407F50720F0A21BB30BE40BF50BB6 +:100F2000661F771F881F991F1A9469F7609570953F +:100F3000809590959B01AC01BD01CF010895EE0F06 +:0E0F4000FF1F0590F491E02D0994F894FFCF67 +:100F4E000003400000044000000208000000000002 +:060F5E000000000000008D +:00000001FF diff --git a/external/arduino/avr/firmwares/atmegaxxu2/arduino-usbserial/Genuino-usbserial-atmega16u2-Uno-R3.hex b/external/arduino/avr/firmwares/atmegaxxu2/arduino-usbserial/Genuino-usbserial-atmega16u2-Uno-R3.hex new file mode 100644 index 000000000..3abf6adba --- /dev/null +++ b/external/arduino/avr/firmwares/atmegaxxu2/arduino-usbserial/Genuino-usbserial-atmega16u2-Uno-R3.hex @@ -0,0 +1,248 @@ +:1000000098C00000B1C00000AFC00000ADC000004B +:10001000ABC00000A9C00000A7C00000A5C0000040 +:10002000A3C00000A1C000009FC00000F6C30000F4 +:100030009BC4000099C0000097C0000095C000005C +:1000400093C0000091C000008FC000008DC0000070 +:100050008BC0000089C0000087C00000C0C1000044 +:1000600083C0000081C000007FC000007DC0000090 +:100070007BC00000100532051C0632051C06740505 +:1000800091051C06E405F6051803470065006E009F +:10009000750069006E006F00200055006E006F0053 +:1000A00000003A03410072006400750069006E00B0 +:1000B0006F0020004C004C00430020002800770017 +:1000C000770077002E0061007200640075006900FF +:1000D0006E006F002E00630063002900000004031F +:1000E000090409023E00020100C0320904000001B7 +:1000F0000202010005240001100424020605240662 +:100100000001070582030800FF09040100020A003C +:1001100000000705040240000107058302400001BA +:1001200012011001020000084123430201000102F4 +:10013000DC0111241FBECFEFD2E0DEBFCDBF11E046 +:10014000A0E0B1E0E2E4FFE002C005900D92A6312C +:10015000B107D9F712E0A6E1B1E001C01D92AF32BC +:10016000B107E1F764D0EBC64BCFFC01E058FF4F7D +:10017000A081B1816C93A081B1819D012F5F3F4F20 +:10018000318320832E173F0721F412969C938E9380 +:1001900011972FB7F894FC01EC57FF4F80818F5FC8 +:1001A00080832FBF0895DC01AE57BF4FED91FC91C6 +:1001B000119741911196FC93EE939C0120583F4F6B +:1001C000E217F30711F48D939C932FB7F894FC0179 +:1001D000EC57FF4F9081915090832FBF842F08954B +:1001E00084B7877F84BF88E10FB6F894809360005E +:1001F000109260000FBE87E690E09093CD00809350 +:10020000CC0086E08093CA001092C80088E18093F9 +:10021000C900539A5A9A8AB180638AB98BB18063B4 +:100220008BB9F0D284E085BD5F9A579A0895D8DFE4 +:100230002FB7F8948EE991E090931F0280931E02ED +:1002400090932102809320022FBF2FB7F89489E169 +:1002500091E090939A018093990190939C018093EF +:100260009B012FBF7894D3E09FB7F894809122022E +:100270009FBF803849F080E091E00ED697FD04C022 +:10028000682F8EE991E071DF8FB7F894C0919D01DE +:100290008FBFA89902C0C13658F1A89A80919D01DC +:1002A000882319F05D98D0931601CC2349F089E199 +:1002B00091E079DF682F80E091E093D5C150F5CFD0 +:1002C00080911601882341F080911601815080931E +:1002D0001601811101C05D9A80911701882341F0B8 +:1002E00080911701815080931701811101C05C9AA0 +:1002F0009FB7F894809122029FBF882361F08EE916 +:1003000091E051DF9091C80095FFFCCF8093CE0023 +:100310005C98D093170180E091E0B0D59AD4A4CF37 +:1003200080E091E011C580E091E0A5C41F93CF93D8 +:10033000DF93EC018C89813031F0823011F010E0D4 +:1003400003C010E201C010E38B89823009F4186009 +:100350008D89873031F0883031F0863029F4126091 +:1003600003C0146001C016601092C9001092C8004A +:100370001092CA002F85388949895A89211581EE42 +:1003800038074105510571F0CA01B9019695879565 +:100390007795679560587B47814E9F4FA8D5215030 +:1003A000310902C020E130E03093CD002093CC0031 +:1003B0001093CA008F859889A989BA898115914EB1 +:1003C000A105B10511F480E001C082E08093C8006E +:1003D00088E98093C900DF91CF911F9108951F9202 +:1003E0000F920FB60F9211242F933F934F935F9369 +:1003F0006F937F938F939F93AF93BF93EF93FF93ED +:100400006091CE008EB3843019F489E191E0ADDEC5 +:10041000FF91EF91BF91AF919F918F917F916F91DC +:100420005F914F913F912F910F900FBE0F901F90B2 +:100430001895FC01858580FF02C05F9808955F9A3A +:100440000895292F33272230310559F02330310503 +:1004500069F021303105F9F482E190E020E231E0E9 +:100460001EC08EE390E022EE30E019C09927813063 +:10047000910541F08230910541F0892B61F4EEED58 +:10048000F0E005C0E2EAF0E002C0E8E8F0E08491C4 +:1004900090E09F0104C080E090E020E030E0FA01AD +:1004A00031832083089528E030E040E028173907A1 +:1004B00020F44F5F220F331FF9CF842F8295807F66 +:1004C00008958093E900EBEEF0E080818160808305 +:1004D000EDEEF0E010826093EC0040838091EE003E +:1004E000881F8827881F08951092F40080E0809369 +:1004F000E9001092F0001092E8001092ED00909147 +:10050000EB009E7F9093EB008F5F853081F708951D +:100510008091270287FD05C08091E80080FF0DC013 +:1005200010C08091E80082FD04C08EB38111F9CF24 +:1005300008958091E8008B7707C08EB38111ECCFCE +:1005400008958091E8008E778093E800089585E60D +:100550009091EC0090FF05C09091E80090FF05C0DD +:100560001BC09091E80092FD17C09EB39923B1F093 +:100570009EB39530A9F09091EB0095FD13C090913A +:10058000E10092FFE5CF9091E1009B7F9093E10025 +:100590008150F1F684E0089580E0089582E00895A6 +:1005A00083E0089581E0089520912D0230912E027C +:1005B0002617370748F06115710539F42091E800D6 +:1005C0002E772093E80001C0B90130E06115710574 +:1005D00091F12091E80023FD38C02091E80022FF2E +:1005E00006C08091E80082FF29C080E008952EB304 +:1005F000222369F12EB3253061F12091E80020FF1C +:10060000E5CF2091F200FC01CF016115710549F0A1 +:10061000283038F481918093F100615071092F5F87 +:10062000F3CF31E0283009F030E02091E8002E7758 +:100630002093E800CBCF3111CCCFD3CF8EB388231A +:1006400031F08EB3853069F604C081E0089582E010 +:10065000089583E0089520912D0230912E022617EF +:10066000370748F06115710539F42091E8002E77BD +:100670002093E80001C0B90130E06115710599F1DE +:100680002091E80023FD39C02091E80022FF06C038 +:100690008091E80082FF2AC080E008952EB32223D3 +:1006A00071F12EB3253069F12091E80020FFE5CFEC +:1006B0002091F200FC01CF016115710551F0283045 +:1006C00040F484918093F100615071092F5F31965D +:1006D000F2CF31E0283009F030E02091E8002E77A9 +:1006E0002093E800CACF3111CBCFD2CF8EB388236D +:1006F00031F08EB3853061F604C081E0089582E068 +:10070000089583E008956115710529F42091E800AA +:100710002B772093E8006115710549F12091E800DD +:1007200023FD2AC02EB3222359F12EB3253051F1D7 +:100730002091E80022FFF2CFFC018091F200882393 +:1007400071F09F012F5F3F4FC9014091F10040833D +:100750006150710961157105C9F2F901EECFCF0140 +:10076000D5CF8EB3882361F08EB3853059F0809158 +:10077000E80080FFF6CF02C081E0089580E0089590 +:1007800082E0089583E0089542D044D01EBA1092CA +:100790002502109224021092230284E089BD89B5BB +:1007A000826089BD09B400FEFDCF8091D800982FEA +:1007B0009F779093D80080688093D80080916300E1 +:1007C0008E7F809363008091D8008F7D8093D800C6 +:1007D0008091E0008E7F8093E0008091E1008E7F29 +:1007E0008093E1008091E20081608093E20080913B +:1007F000E100877F8093E1008091E2008860809330 +:10080000E2000895C1DF81E08093260208951092EE +:10081000E20008951092E10008951F920F920FB622 +:100820000F9211242F933F934F935F936F937F9376 +:100830008F939F93AF93BF93EF93FF938091E100CA +:1008400080FF1BC08091E20080FF17C08091E10013 +:100850008E7F8093E1008091E2008E7F8093E200A2 +:100860008091E20080618093E2008091D8008062F4 +:100870008093D80019BC1EBAEBD18091E10084FFAF +:1008800029C08091E20084FF25C084E089BD89B53C +:10089000826089BD09B400FEFDCF8091D8008F7DB4 +:1008A0008093D8008091E1008F7E8093E100809159 +:1008B000E2008F7E8093E2008091E200816080936D +:1008C000E20080912502882311F084E001C081E0DC +:1008D0008EBBBED18091E10083FF27C08091E200F2 +:1008E00083FF23C08091E100877F8093E10082E055 +:1008F0008EBB109225028091E1008E7F8093E100F3 +:100900008091E2008E7F8093E2008091E20080611E +:100910008093E200E9DD42E060E080E0D2DD80919A +:10092000F00088608093F00093D18091E10082FF15 +:100930000AC08091E20082FF06C08091E1008B7FB7 +:100940008093E10085D1FF91EF91BF91AF919F918D +:100950008F917F916F915F914F913F912F910F9068 +:100960000FBE0F901F9018951F920F920FB60F9207 +:1009700011242F933F934F935F936F937F938F93A4 +:100980009F93AF93BF93CF93EF93FF93E9EEF0E084 +:10099000C081C7701082E0EFF0E08081877F8083A4 +:1009A00078941CD0F894E9EEF0E01082A0EFB0E06B +:1009B0008C9188608C93C083FF91EF91CF91BF9110 +:1009C000AF919F918F917F916F915F914F913F91E7 +:1009D0002F910F900FBE0F901F9018951F93CF93DC +:1009E000DF93CDB7DEB7AA970FB6F894DEBF0FBE80 +:1009F000CDBFE7E2F2E08091F100819322E0EF3297 +:100A0000F207C9F72091270230912802832F90E046 +:100A10008A30910508F010C1FC01E65CFF4F89C2E5 +:100A2000203881F0223809F007C180912B028770AD +:100A30008093E9008091EB0085FB882780F9109274 +:100A4000E90006C0809123029091240291118260F6 +:100A50009091E800977F9093E8008093F1001092C6 +:100A6000F100BDC0822F8D7F09F0E6C0222319F06E +:100A7000223061F0D2C080912902813009F0CDC0CE +:100A8000333009F080E08093240228C0809129024D +:100A9000811124C020912B02277009F4BEC020933D +:100AA000E9008091EB0080FFB8C08091EB0033300B +:100AB00011F4806211C080618093EB0081E090E0CE +:100AC000022E01C0880F0A94EAF78093EA00109280 +:100AD000EA008091EB0088608093EB001092E900BF +:100AE0008091E800877F7EC02111A6C01091290265 +:100AF0008091E800877F8093E8000ADD8091E8001C +:100B000080FD04C08EB38111F9CF87C0812F8F770C +:100B100011F093E001C092E09EBB80688093E300F7 +:100B20007CC02058223008F087C080912902909123 +:100B30002A028C3D23E0920781F583E08A838AE2D2 +:100B400089834FB7F894DE01139620E03EE051E22E +:100B5000E32FF0E050935700E49120FF03C0E295AB +:100B6000EF703F5FEF7090E39E0F9A3310F0E95CF7 +:100B700001C0E92F8E2F90E08D939D932F5F24313C +:100B800039F74FBF8091E800877F8093E8006AE2E1 +:100B900070E0CE01019608DD11C0AE014F5F5F4FDE +:100BA00060912B024EDC0097C1F12091E800277F75 +:100BB0002093E800BC0189819A814DDD8091E80095 +:100BC0008B778093E80029C02038B1F58091E80048 +:100BD000877F8093E800809125028093F1008091C7 +:100BE000E8008E778093E80093DC17C0211124C0C1 +:100BF00090912902923088F48091E800877F809359 +:100C0000E8009093250284DC80912502882311F06E +:100C100084E001C083E08EBB83DB8091E80083FF2A +:100C20000DC08091EB0080628093EB008091E80022 +:100C3000877F8093E80002C076DBEFCFAA960FB6DD +:100C4000F894DEBF0FBECDBFDF91CF911F91089505 +:100C50000895CF938EB3882359F0C091E900C770EF +:100C60001092E9008091E80083FDB8DEC093E900AE +:100C7000CF9108950895CF93DF93EC018091E80020 +:100C800083FF5FC0888190E020912B0230912C027D +:100C90002817390709F055C080912802813249F0A0 +:100CA00018F48032C9F04DC0823261F18332C9F14B +:100CB00048C080912702813A09F043C08091E80042 +:100CC000877F8093E80067E070E0CE010F966CDCD0 +:100CD0008091E8008B7713C080912702813289F5DB +:100CE0008091E800877F8093E80067E070E0CE01A4 +:100CF0000F9609DDCE011ADB8091E8008E77809394 +:100D0000E8001FC0809127028132D9F48091E80069 +:100D1000877F8093E800809129028D87CE0189DB4F +:100D20000DC080912702813261F48091E800877FB5 +:100D30008093E80060912902CE019CDFDF91CF9182 +:100D4000E7CBDF91CF9108950F931F93CF93DF935C +:100D5000EC01FC013D9689E0DF011D928A95E9F7DF +:100D60002A813B818C81882311F014E001C010E0BE +:100D70000981C90198DB412F482B426061E8802F2F +:100D8000A0DB882341F12E813F818885882311F0E3 +:100D900014E001C010E00D81C90185DB412F482B13 +:100DA000426060E8802F8DDB8823A9F02A853B858F +:100DB0008C85882311F014E001C010E0C985C901B9 +:100DC00072DB412F482B426061EC8C2FDF91CF9179 +:100DD0001F910F9176CB80E0DF91CF911F910F9102 +:100DE0000895CF93C62F2EB32430E9F4FC01478534 +:100DF000508961897289452B462B472BA1F081814F +:100E00008093E9008091E80085FF04C0C093F10061 +:100E100080E00AC08091E8008E778093E80097DB3D +:100E20008823A1F301C082E0CF9108952EB324302E +:100E300019F5FC014785508961897289452B462B3C +:100E4000472BD1F081818093E9008091F2008823C3 +:100E500089F09091E8008091E8008E778093E80017 +:100E600095FD08C074DB811108C08091E8008E7781 +:100E70008093E80080E0089582E008952EB3243046 +:100E800051F4FC014785508961897289452B462BB5 +:100E9000472B09F0CBCF08952EB3243019F08FEFF4 +:100EA0009FEF0895FC014785508961897289452B20 +:100EB000462B472BA1F385818093E9008091E800C0 +:100EC00082FFEDCF8091F200882321F02091F10084 +:100ED00030E002C02FEF3FEF8091F200811105C09A +:100EE0008091E8008B778093E800C9010895A1E222 +:100EF0001A2EAA1BBB1BFD010DC0AA1FBB1FEE1F94 +:100F0000FF1FA217B307E407F50720F0A21BB30BDE +:100F1000E40BF50B661F771F881F991F1A9469F75A +:100F200060957095809590959B01AC01BD01CF01B6 +:100F30000895EE0FFF1F0590F491E02D0994F894A9 +:020F4000FFCFE1 +:100F4200000340000004400000020800000000000E +:060F520000000000000099 +:00000001FF diff --git a/external/arduino/avr/firmwares/atmegaxxu2/arduino-usbserial/Lib/LightweightRingBuff.h b/external/arduino/avr/firmwares/atmegaxxu2/arduino-usbserial/Lib/LightweightRingBuff.h new file mode 100644 index 000000000..5a9a125c1 --- /dev/null +++ b/external/arduino/avr/firmwares/atmegaxxu2/arduino-usbserial/Lib/LightweightRingBuff.h @@ -0,0 +1,197 @@ +/* + LUFA Library + Copyright (C) Dean Camera, 2010. + + dean [at] fourwalledcubicle [dot] com + www.fourwalledcubicle.com +*/ + +/* + Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com) + + Permission to use, copy, modify, distribute, and sell this + software and its documentation for any purpose is hereby granted + without fee, provided that the above copyright notice appear in + all copies and that both that the copyright notice and this + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the + software without specific, written prior permission. + + The author disclaim all warranties with regard to this + software, including all implied warranties of merchantability + and fitness. In no event shall the author be liable for any + special, indirect or consequential damages or any damages + whatsoever resulting from loss of use, data or profits, whether + in an action of contract, negligence or other tortious action, + arising out of or in connection with the use or performance of + this software. +*/ + +/** \file + * + * Ultra lightweight ring buffer, for fast insertion/deletion. + */ + +#ifndef _ULW_RING_BUFF_H_ +#define _ULW_RING_BUFF_H_ + + /* Includes: */ + #include + + #include + #include + + /* Defines: */ + /** Size of each ring buffer, in data elements - must be between 1 and 255. */ + #define BUFFER_SIZE 128 + + /** Maximum number of data elements to buffer before forcing a flush. + * Must be less than BUFFER_SIZE + */ + #define BUFFER_NEARLY_FULL 96 + + /** Type of data to store into the buffer. */ + #define RingBuff_Data_t uint8_t + + /** Datatype which may be used to store the count of data stored in a buffer, retrieved + * via a call to \ref RingBuffer_GetCount(). + */ + #if (BUFFER_SIZE <= 0xFF) + #define RingBuff_Count_t uint8_t + #else + #define RingBuff_Count_t uint16_t + #endif + + /* Type Defines: */ + /** Type define for a new ring buffer object. Buffers should be initialized via a call to + * \ref RingBuffer_InitBuffer() before use. + */ + typedef struct + { + RingBuff_Data_t Buffer[BUFFER_SIZE]; /**< Internal ring buffer data, referenced by the buffer pointers. */ + RingBuff_Data_t* In; /**< Current storage location in the circular buffer */ + RingBuff_Data_t* Out; /**< Current retrieval location in the circular buffer */ + RingBuff_Count_t Count; + } RingBuff_t; + + /* Inline Functions: */ + /** Initializes a ring buffer ready for use. Buffers must be initialized via this function + * before any operations are called upon them. Already initialized buffers may be reset + * by re-initializing them using this function. + * + * \param[out] Buffer Pointer to a ring buffer structure to initialize + */ + static inline void RingBuffer_InitBuffer(RingBuff_t* const Buffer) + { + ATOMIC_BLOCK(ATOMIC_RESTORESTATE) + { + Buffer->In = Buffer->Buffer; + Buffer->Out = Buffer->Buffer; + } + } + + /** Retrieves the minimum number of bytes stored in a particular buffer. This value is computed + * by entering an atomic lock on the buffer while the IN and OUT locations are fetched, so that + * the buffer cannot be modified while the computation takes place. This value should be cached + * when reading out the contents of the buffer, so that as small a time as possible is spent + * in an atomic lock. + * + * \note The value returned by this function is guaranteed to only be the minimum number of bytes + * stored in the given buffer; this value may change as other threads write new data and so + * the returned number should be used only to determine how many successive reads may safely + * be performed on the buffer. + * + * \param[in] Buffer Pointer to a ring buffer structure whose count is to be computed + */ + static inline RingBuff_Count_t RingBuffer_GetCount(RingBuff_t* const Buffer) + { + RingBuff_Count_t Count; + + ATOMIC_BLOCK(ATOMIC_RESTORESTATE) + { + Count = Buffer->Count; + } + + return Count; + } + + /** Atomically determines if the specified ring buffer contains any free space. This should + * be tested before storing data to the buffer, to ensure that no data is lost due to a + * buffer overrun. + * + * \param[in,out] Buffer Pointer to a ring buffer structure to insert into + * + * \return Boolean true if the buffer contains no free space, false otherwise + */ + static inline bool RingBuffer_IsFull(RingBuff_t* const Buffer) + { + return (RingBuffer_GetCount(Buffer) == BUFFER_SIZE); + } + + /** Atomically determines if the specified ring buffer contains any data. This should + * be tested before removing data from the buffer, to ensure that the buffer does not + * underflow. + * + * If the data is to be removed in a loop, store the total number of bytes stored in the + * buffer (via a call to the \ref RingBuffer_GetCount() function) in a temporary variable + * to reduce the time spent in atomicity locks. + * + * \param[in,out] Buffer Pointer to a ring buffer structure to insert into + * + * \return Boolean true if the buffer contains no free space, false otherwise + */ + static inline bool RingBuffer_IsEmpty(RingBuff_t* const Buffer) + { + return (RingBuffer_GetCount(Buffer) == 0); + } + + /** Inserts an element into the ring buffer. + * + * \note Only one execution thread (main program thread or an ISR) may insert into a single buffer + * otherwise data corruption may occur. Insertion and removal may occur from different execution + * threads. + * + * \param[in,out] Buffer Pointer to a ring buffer structure to insert into + * \param[in] Data Data element to insert into the buffer + */ + static inline void RingBuffer_Insert(RingBuff_t* const Buffer, + const RingBuff_Data_t Data) + { + *Buffer->In = Data; + + if (++Buffer->In == &Buffer->Buffer[BUFFER_SIZE]) + Buffer->In = Buffer->Buffer; + + ATOMIC_BLOCK(ATOMIC_RESTORESTATE) + { + Buffer->Count++; + } + } + + /** Removes an element from the ring buffer. + * + * \note Only one execution thread (main program thread or an ISR) may remove from a single buffer + * otherwise data corruption may occur. Insertion and removal may occur from different execution + * threads. + * + * \param[in,out] Buffer Pointer to a ring buffer structure to retrieve from + * + * \return Next data element stored in the buffer + */ + static inline RingBuff_Data_t RingBuffer_Remove(RingBuff_t* const Buffer) + { + RingBuff_Data_t Data = *Buffer->Out; + + if (++Buffer->Out == &Buffer->Buffer[BUFFER_SIZE]) + Buffer->Out = Buffer->Buffer; + + ATOMIC_BLOCK(ATOMIC_RESTORESTATE) + { + Buffer->Count--; + } + + return Data; + } + +#endif diff --git a/external/arduino/avr/firmwares/atmegaxxu2/arduino-usbserial/makefile b/external/arduino/avr/firmwares/atmegaxxu2/arduino-usbserial/makefile new file mode 100644 index 000000000..de518efcb --- /dev/null +++ b/external/arduino/avr/firmwares/atmegaxxu2/arduino-usbserial/makefile @@ -0,0 +1,776 @@ +# Hey Emacs, this is a -*- makefile -*- +#---------------------------------------------------------------------------- +# WinAVR Makefile Template written by Eric B. Weddington, Jrg Wunsch, et al. +# >> Modified for use with the LUFA project. << +# +# Released to the Public Domain +# +# Additional material for this makefile was written by: +# Peter Fleury +# Tim Henigan +# Colin O'Flynn +# Reiner Patommel +# Markus Pfaff +# Sander Pool +# Frederik Rouleau +# Carlos Lamas +# Dean Camera +# Opendous Inc. +# Denver Gingerich +# +#---------------------------------------------------------------------------- +# On command line: +# +# make all = Make software. +# +# make clean = Clean out built project files. +# +# make coff = Convert ELF to AVR COFF. +# +# make extcoff = Convert ELF to AVR Extended COFF. +# +# make program = Download the hex file to the device, using avrdude. +# Please customize the avrdude settings below first! +# +# make dfu = Download the hex file to the device, using dfu-programmer (must +# have dfu-programmer installed). +# +# make flip = Download the hex file to the device, using Atmel FLIP (must +# have Atmel FLIP installed). +# +# make dfu-ee = Download the eeprom file to the device, using dfu-programmer +# (must have dfu-programmer installed). +# +# make flip-ee = Download the eeprom file to the device, using Atmel FLIP +# (must have Atmel FLIP installed). +# +# make doxygen = Generate DoxyGen documentation for the project (must have +# DoxyGen installed) +# +# make debug = Start either simulavr or avarice as specified for debugging, +# with avr-gdb or avr-insight as the front end for debugging. +# +# make filename.s = Just compile filename.c into the assembler code only. +# +# make filename.i = Create a preprocessed source file for use in submitting +# bug reports to the GCC project. +# +# To rebuild project do "make clean" then "make all". +#---------------------------------------------------------------------------- + +# MCU name(s) +# Since the ATMEGA8U2 part is not directly supported by the current +# versions of either avrdude or dfu-programmer, we specify a dummy +# part; AT90USB82 which is close enough in memory size and organization +MCU = atmega8u2 +MCU_AVRDUDE = at90usb82 +MCU_DFU = at90usb82 + +# Specify the Arduino model using the assigned PID. This is used by Descriptors.c +# to set PID and product descriptor string +# Uno PID: +ARDUINO_MODEL_PID = 0x0001 +# Mega 2560 PID: +#ARDUINO_MODEL_PID = 0x0010 + + +# Target board (see library "Board Types" documentation, NONE for projects not requiring +# LUFA board drivers). If USER is selected, put custom board drivers in a directory called +# "Board" inside the application directory. +BOARD = USER + + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_CLOCK below, as it is sourced by +# F_CLOCK after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# Input clock frequency. +# This will define a symbol, F_CLOCK, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_CLOCK = $(F_CPU) + + +# Output format. (can be srec, ihex, binary) +FORMAT = ihex + + +# Target file name (without extension). +TARGET = Arduino-usbserial + + +# Object files directory +# To put object files in current directory, use a dot (.), do NOT make +# this an empty or blank macro! +OBJDIR = . + + +# Path to the LUFA library +LUFA_PATH = ../.. + + +# LUFA library compile-time options +LUFA_OPTS = -D USB_DEVICE_ONLY +LUFA_OPTS += -D FIXED_CONTROL_ENDPOINT_SIZE=8 +LUFA_OPTS += -D FIXED_NUM_CONFIGURATIONS=1 +LUFA_OPTS += -D USE_FLASH_DESCRIPTORS +LUFA_OPTS += -D INTERRUPT_CONTROL_ENDPOINT +LUFA_OPTS += -D DEVICE_STATE_AS_GPIOR=0 +LUFA_OPTS += -D USE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" + + +# Create the LUFA source path variables by including the LUFA root makefile +include $(LUFA_PATH)/LUFA/makefile + + +# List C source files here. (C dependencies are automatically generated.) +SRC = $(TARGET).c \ + Descriptors.c \ + $(LUFA_SRC_USB) \ + $(LUFA_SRC_USBCLASS) \ + $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Device.c \ + $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c \ + $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/HostStandardReq.c \ + $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c \ + $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c \ + $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/USBController.c \ + $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c \ + $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/USBInterrupt.c \ + $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c \ + $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/DeviceStandardReq.c \ + $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c \ + $(LUFA_PATH)/LUFA/Drivers/USB/Class/Device/CDC.c \ + $(LUFA_PATH)/LUFA/Drivers/USB/Class/Host/CDC.c + + +# List C++ source files here. (C dependencies are automatically generated.) +CPPSRC = + + +# List Assembler source files here. +# Make them always end in a capital .S. Files ending in a lowercase .s +# will not be considered source files but generated files (assembler +# output from the compiler), and will be deleted upon "make clean"! +# Even though the DOS/Win* filesystem matches both .s and .S the same, +# it will preserve the spelling of the filenames, and gcc itself does +# care about how the name is spelled on its command-line. +ASRC = + + +# Optimization level, can be [0, 1, 2, 3, s]. +# 0 = turn off optimization. s = optimize for size. +# (Note: 3 is not always the best optimization level. See avr-libc FAQ.) +OPT = s + + +# Debugging format. +# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs. +# AVR Studio 4.10 requires dwarf-2. +# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run. +DEBUG = dwarf-2 + + +# List any extra directories to look for include files here. +# Each directory must be seperated by a space. +# Use forward slashes for directory separators. +# For a directory that has spaces, enclose it in quotes. +EXTRAINCDIRS = $(LUFA_PATH)/ + + +# Compiler flag to set the C Standard level. +# c89 = "ANSI" C +# gnu89 = c89 plus GCC extensions +# c99 = ISO C99 standard (not yet fully implemented) +# gnu99 = c99 plus GCC extensions +CSTANDARD = -std=gnu99 + + +# Place -D or -U options here for C sources +CDEFS = -DF_CPU=$(F_CPU)UL +CDEFS += -DF_CLOCK=$(F_CLOCK)UL +CDEFS += -DARDUINO_MODEL_PID=$(ARDUINO_MODEL_PID) +CDEFS += -DBOARD=BOARD_$(BOARD) +CDEFS += $(LUFA_OPTS) +CDEFS += -DAVR_RESET_LINE_PORT="PORTD" +CDEFS += -DAVR_RESET_LINE_DDR="DDRD" +CDEFS += -DAVR_RESET_LINE_MASK="(1 << 7)" +CDEFS += -DTX_RX_LED_PULSE_MS=3 +CDEFS += -DPING_PONG_LED_PULSE_MS=100 + +# Place -D or -U options here for ASM sources +ADEFS = -DF_CPU=$(F_CPU) +ADEFS += -DF_CLOCK=$(F_CLOCK)UL +ADEFS += -DBOARD=BOARD_$(BOARD) +ADEFS += $(LUFA_OPTS) + +# Place -D or -U options here for C++ sources +CPPDEFS = -DF_CPU=$(F_CPU)UL +CPPDEFS += -DF_CLOCK=$(F_CLOCK)UL +CPPDEFS += -DBOARD=BOARD_$(BOARD) +CPPDEFS += $(LUFA_OPTS) +#CPPDEFS += -D__STDC_LIMIT_MACROS +#CPPDEFS += -D__STDC_CONSTANT_MACROS + + + +#---------------- Compiler Options C ---------------- +# -g*: generate debugging information +# -O*: optimization level +# -f...: tuning, see GCC manual and avr-libc documentation +# -Wall...: warning level +# -Wa,...: tell GCC to pass this to the assembler. +# -adhlns...: create assembler listing +CFLAGS = -g$(DEBUG) +CFLAGS += $(CDEFS) +CFLAGS += -O$(OPT) +CFLAGS += -funsigned-char +CFLAGS += -funsigned-bitfields +CFLAGS += -ffunction-sections +CFLAGS += -fno-inline-small-functions +CFLAGS += -fpack-struct +CFLAGS += -fshort-enums +CFLAGS += -fno-strict-aliasing +CFLAGS += -Wall +CFLAGS += -Wstrict-prototypes +#CFLAGS += -mshort-calls +#CFLAGS += -fno-unit-at-a-time +#CFLAGS += -Wundef +#CFLAGS += -Wunreachable-code +#CFLAGS += -Wsign-compare +CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst) +CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) +CFLAGS += $(CSTANDARD) + + +#---------------- Compiler Options C++ ---------------- +# -g*: generate debugging information +# -O*: optimization level +# -f...: tuning, see GCC manual and avr-libc documentation +# -Wall...: warning level +# -Wa,...: tell GCC to pass this to the assembler. +# -adhlns...: create assembler listing +CPPFLAGS = -g$(DEBUG) +CPPFLAGS += $(CPPDEFS) +CPPFLAGS += -O$(OPT) +CPPFLAGS += -funsigned-char +CPPFLAGS += -funsigned-bitfields +CPPFLAGS += -fpack-struct +CPPFLAGS += -fshort-enums +CPPFLAGS += -fno-exceptions +CPPFLAGS += -Wall +CPPFLAGS += -Wundef +CFLAGS += -Wundef +#CPPFLAGS += -mshort-calls +#CPPFLAGS += -fno-unit-at-a-time +#CPPFLAGS += -Wstrict-prototypes +#CPPFLAGS += -Wunreachable-code +#CPPFLAGS += -Wsign-compare +CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst) +CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) +#CPPFLAGS += $(CSTANDARD) + + +#---------------- Assembler Options ---------------- +# -Wa,...: tell GCC to pass this to the assembler. +# -adhlns: create listing +# -gstabs: have the assembler create line number information; note that +# for use in COFF files, additional information about filenames +# and function names needs to be present in the assembler source +# files -- see avr-libc docs [FIXME: not yet described there] +# -listing-cont-lines: Sets the maximum number of continuation lines of hex +# dump that will be displayed for a given single line of source input. +ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100 + + +#---------------- Library Options ---------------- +# Minimalistic printf version +PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min + +# Floating point printf version (requires MATH_LIB = -lm below) +PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt + +# If this is left blank, then it will use the Standard printf version. +PRINTF_LIB = +#PRINTF_LIB = $(PRINTF_LIB_MIN) +#PRINTF_LIB = $(PRINTF_LIB_FLOAT) + + +# Minimalistic scanf version +SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min + +# Floating point + %[ scanf version (requires MATH_LIB = -lm below) +SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt + +# If this is left blank, then it will use the Standard scanf version. +SCANF_LIB = +#SCANF_LIB = $(SCANF_LIB_MIN) +#SCANF_LIB = $(SCANF_LIB_FLOAT) + + +MATH_LIB = -lm + + +# List any extra directories to look for libraries here. +# Each directory must be seperated by a space. +# Use forward slashes for directory separators. +# For a directory that has spaces, enclose it in quotes. +EXTRALIBDIRS = + + + +#---------------- External Memory Options ---------------- + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# used for variables (.data/.bss) and heap (malloc()). +#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# only used for heap (malloc()). +#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff + +EXTMEMOPTS = + + + +#---------------- Linker Options ---------------- +# -Wl,...: tell GCC to pass this to linker. +# -Map: create map file +# --cref: add cross reference to map file +LDFLAGS = -Wl,-Map=$(TARGET).map,--cref +LDFLAGS += -Wl,--relax +LDFLAGS += -Wl,--gc-sections +LDFLAGS += $(EXTMEMOPTS) +LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS)) +LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) +#LDFLAGS += -T linker_script.x + + + +#---------------- Programming Options (avrdude) ---------------- + +# Programming hardware +# Type: avrdude -c ? +# to get a full listing. +# +AVRDUDE_PROGRAMMER = avrispmkii + +# com1 = serial port. Use lpt1 to connect to parallel port. +AVRDUDE_PORT = usb + +AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex +#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep + + +# Uncomment the following if you want avrdude's erase cycle counter. +# Note that this counter needs to be initialized first using -Yn, +# see avrdude manual. +#AVRDUDE_ERASE_COUNTER = -y + +# Uncomment the following if you do /not/ wish a verification to be +# performed after programming the device. +#AVRDUDE_NO_VERIFY = -V + +# Increase verbosity level. Please use this when submitting bug +# reports about avrdude. See +# to submit bug reports. +#AVRDUDE_VERBOSE = -v -v + +AVRDUDE_FORCE = -F + +AVRDUDE_FLAGS = -p $(MCU_AVRDUDE) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) +AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY) +AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE) +AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER) +AVRDUDE_FLAGS += $(AVRDUDE_FORCE) + + + +#---------------- Debugging Options ---------------- + +# For simulavr only - target MCU frequency. +DEBUG_MFREQ = $(F_CPU) + +# Set the DEBUG_UI to either gdb or insight. +# DEBUG_UI = gdb +DEBUG_UI = insight + +# Set the debugging back-end to either avarice, simulavr. +DEBUG_BACKEND = avarice +#DEBUG_BACKEND = simulavr + +# GDB Init Filename. +GDBINIT_FILE = __avr_gdbinit + +# When using avarice settings for the JTAG +JTAG_DEV = /dev/com1 + +# Debugging port used to communicate between GDB / avarice / simulavr. +DEBUG_PORT = 4242 + +# Debugging host used to communicate between GDB / avarice / simulavr, normally +# just set to localhost unless doing some sort of crazy debugging when +# avarice is running on a different computer. +DEBUG_HOST = localhost + + + +#============================================================================ + + +# Define programs and commands. +SHELL = sh +CC = avr-gcc +OBJCOPY = avr-objcopy +OBJDUMP = avr-objdump +SIZE = avr-size +AR = avr-ar rcs +NM = avr-nm +AVRDUDE = avrdude +REMOVE = rm -f +REMOVEDIR = rm -rf +COPY = cp +WINSHELL = cmd + +# Define Messages +# English +MSG_ERRORS_NONE = Errors: none +MSG_BEGIN = -------- begin -------- +MSG_END = -------- end -------- +MSG_SIZE_BEFORE = Size before: +MSG_SIZE_AFTER = Size after: +MSG_COFF = Converting to AVR COFF: +MSG_EXTENDED_COFF = Converting to AVR Extended COFF: +MSG_FLASH = Creating load file for Flash: +MSG_EEPROM = Creating load file for EEPROM: +MSG_EXTENDED_LISTING = Creating Extended Listing: +MSG_SYMBOL_TABLE = Creating Symbol Table: +MSG_LINKING = Linking: +MSG_COMPILING = Compiling C: +MSG_COMPILING_CPP = Compiling C++: +MSG_ASSEMBLING = Assembling: +MSG_CLEANING = Cleaning project: +MSG_CREATING_LIBRARY = Creating library: + + + + +# Define all object files. +OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) + +# Define all listing files. +LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) + + +# Compiler flags to generate dependency files. +GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d + + +# Combine all necessary flags and optional flags. +# Add target processor to flags. +ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS) +ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS) +ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) + + + + + +# Default target. +#all: begin gccversion sizebefore build checkinvalidevents showliboptions showtarget sizeafter end +all: begin gccversion sizebefore build showliboptions showtarget sizeafter end + +# Change the build target to build a HEX file or a library. +build: elf hex eep lss sym asm +#build: lib + + +elf: $(TARGET).elf +hex: $(TARGET).hex +eep: $(TARGET).eep +lss: $(TARGET).lss +sym: $(TARGET).sym +asm: $(TARGET).s +LIBNAME=lib$(TARGET).a +lib: $(LIBNAME) + + + +# Eye candy. +# AVR Studio 3.x does not check make's exit code but relies on +# the following magic strings to be generated by the compile job. +begin: + @echo + @echo $(MSG_BEGIN) + +end: + @echo $(MSG_END) + @echo + + +# Display size of file. +HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex +ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf +MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) ) +FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr ) + +sizebefore: + @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \ + 2>/dev/null; echo; fi + +sizeafter: + @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \ + 2>/dev/null; echo; fi + +#$(LUFA_PATH)/LUFA/LUFA_Events.lst: +# @make -C $(LUFA_PATH)/LUFA/ LUFA_Events.lst + +#checkinvalidevents: $(LUFA_PATH)/LUFA/LUFA_Events.lst +# @echo +# @echo Checking for invalid events... +# @$(shell) avr-nm $(OBJ) | sed -n -e 's/^.*EVENT_/EVENT_/p' | \ +# grep -F -v --file=$(LUFA_PATH)/LUFA/LUFA_Events.lst > InvalidEvents.tmp || true +# @sed -n -e 's/^/ WARNING - INVALID EVENT NAME: /p' InvalidEvents.tmp +# @if test -s InvalidEvents.tmp; then exit 1; fi + +showliboptions: + @echo + @echo ---- Compile Time Library Options ---- + @for i in $(LUFA_OPTS:-D%=%); do \ + echo $$i; \ + done + @echo -------------------------------------- + +showtarget: + @echo + @echo --------- Target Information --------- + @echo AVR Model: $(MCU) + @echo Board: $(BOARD) + @echo Clock: $(F_CPU)Hz CPU, $(F_CLOCK)Hz Master + @echo -------------------------------------- + + +# Display compiler version information. +gccversion : + @$(CC) --version + + +# Program the device. +program: $(TARGET).hex $(TARGET).eep + $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) + +flip: $(TARGET).hex + batchisp -hardware usb -device $(MCU_DFU) -operation erase f + batchisp -hardware usb -device $(MCU_DFU) -operation loadbuffer $(TARGET).hex program + batchisp -hardware usb -device $(MCU_DFU) -operation start reset 0 + +dfu: $(TARGET).hex + dfu-programmer $(MCU_DFU) erase + dfu-programmer $(MCU_DFU) flash --debug 1 $(TARGET).hex + dfu-programmer $(MCU_DFU) reset + + +flip-ee: $(TARGET).hex $(TARGET).eep + $(COPY) $(TARGET).eep $(TARGET)eep.hex + batchisp -hardware usb -device $(MCU_DFU) -operation memory EEPROM erase + batchisp -hardware usb -device $(MCU_DFU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program + batchisp -hardware usb -device $(MCU_DFU) -operation start reset 0 + $(REMOVE) $(TARGET)eep.hex + +dfu-ee: $(TARGET).hex $(TARGET).eep + dfu-programmer $(MCU_DFU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep + dfu-programmer $(MCU_DFU) reset + + +# Generate avr-gdb config/init file which does the following: +# define the reset signal, load the target file, connect to target, and set +# a breakpoint at main(). +gdb-config: + @$(REMOVE) $(GDBINIT_FILE) + @echo define reset >> $(GDBINIT_FILE) + @echo SIGNAL SIGHUP >> $(GDBINIT_FILE) + @echo end >> $(GDBINIT_FILE) + @echo file $(TARGET).elf >> $(GDBINIT_FILE) + @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE) +ifeq ($(DEBUG_BACKEND),simulavr) + @echo load >> $(GDBINIT_FILE) +endif + @echo break main >> $(GDBINIT_FILE) + +debug: gdb-config $(TARGET).elf +ifeq ($(DEBUG_BACKEND), avarice) + @echo Starting AVaRICE - Press enter when "waiting to connect" message displays. + @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \ + $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT) + @$(WINSHELL) /c pause + +else + @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \ + $(DEBUG_MFREQ) --port $(DEBUG_PORT) +endif + @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE) + + + + +# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. +COFFCONVERT = $(OBJCOPY) --debugging +COFFCONVERT += --change-section-address .data-0x800000 +COFFCONVERT += --change-section-address .bss-0x800000 +COFFCONVERT += --change-section-address .noinit-0x800000 +COFFCONVERT += --change-section-address .eeprom-0x810000 + + + +coff: $(TARGET).elf + @echo + @echo $(MSG_COFF) $(TARGET).cof + $(COFFCONVERT) -O coff-avr $< $(TARGET).cof + + +extcoff: $(TARGET).elf + @echo + @echo $(MSG_EXTENDED_COFF) $(TARGET).cof + $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof + + + +# Create final output files (.hex, .eep) from ELF output file. +%.hex: %.elf + @echo + @echo $(MSG_FLASH) $@ + $(OBJCOPY) -O $(FORMAT) -R .eeprom -R .fuse -R .lock $< $@ + +%.eep: %.elf + @echo + @echo $(MSG_EEPROM) $@ + -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ + --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0 + +# Create extended listing file from ELF output file. +%.lss: %.elf + @echo + @echo $(MSG_EXTENDED_LISTING) $@ + $(OBJDUMP) -h -S -z $< > $@ + +# Create a symbol table from ELF output file. +%.sym: %.elf + @echo + @echo $(MSG_SYMBOL_TABLE) $@ + $(NM) -n $< > $@ + + + +# Create library from object files. +.SECONDARY : $(TARGET).a +.PRECIOUS : $(OBJ) +%.a: $(OBJ) + @echo + @echo $(MSG_CREATING_LIBRARY) $@ + $(AR) $@ $(OBJ) + + +# Link: create ELF output file from object files. +.SECONDARY : $(TARGET).elf +.PRECIOUS : $(OBJ) +%.elf: $(OBJ) + @echo + @echo $(MSG_LINKING) $@ + $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS) + + +# Compile: create object files from C source files. +$(OBJDIR)/%.o : %.c + @echo + @echo $(MSG_COMPILING) $< + $(CC) -c $(ALL_CFLAGS) $< -o $@ + + +# Compile: create object files from C++ source files. +$(OBJDIR)/%.o : %.cpp + @echo + @echo $(MSG_COMPILING_CPP) $< + $(CC) -c $(ALL_CPPFLAGS) $< -o $@ + + +# Compile: create assembler files from C source files. +%.s : %.c + $(CC) -S $(ALL_CFLAGS) $< -o $@ + + +# Compile: create assembler files from C++ source files. +%.s : %.cpp + $(CC) -S $(ALL_CPPFLAGS) $< -o $@ + + +# Assemble: create object files from assembler source files. +$(OBJDIR)/%.o : %.S + @echo + @echo $(MSG_ASSEMBLING) $< + $(CC) -c $(ALL_ASFLAGS) $< -o $@ + + +# Create preprocessed source for use in sending a bug report. +%.i : %.c + $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ + + +# Target: clean project. +clean: begin clean_list clean_binary end + +clean_binary: + $(REMOVE) $(TARGET).hex + +clean_list: + @echo $(MSG_CLEANING) + $(REMOVE) $(TARGET).hex + $(REMOVE) $(TARGET).eep + $(REMOVE) $(TARGET).cof + $(REMOVE) $(TARGET).elf + $(REMOVE) $(TARGET).map + $(REMOVE) $(TARGET).sym + $(REMOVE) $(TARGET).lss + $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o) + $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst) + $(REMOVE) $(SRC:.c=.s) + $(REMOVE) $(SRC:.c=.d) + $(REMOVE) $(SRC:.c=.i) + $(REMOVEDIR) .dep + +doxygen: + @echo Generating Project Documentation... + @doxygen Doxygen.conf + @echo Documentation Generation Complete. + +clean_doxygen: + rm -rf Documentation + +# Create object files directory +$(shell mkdir $(OBJDIR) 2>/dev/null) + + +# Include the dependency files. +-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*) + + +# Listing of phony targets. +.PHONY : all begin finish end sizebefore sizeafter gccversion \ +build elf hex eep lss sym coff extcoff doxygen clean \ +clean_list clean_doxygen program dfu flip flip-ee dfu-ee \ +debug gdb-config diff --git a/external/arduino/avr/firmwares/atmegaxxu2/arduino-usbserial/readme.txt b/external/arduino/avr/firmwares/atmegaxxu2/arduino-usbserial/readme.txt new file mode 100644 index 000000000..289326b13 --- /dev/null +++ b/external/arduino/avr/firmwares/atmegaxxu2/arduino-usbserial/readme.txt @@ -0,0 +1,13 @@ +To setup the project and upload the Arduino usbserial application firmware to an ATMEGA8U2 using the Arduino USB DFU bootloader: +1. unpack the source into LUFA's Projects directory +2. set ARDUINO_MODEL_PID in the makefile as appropriate +3. do "make clean; make" +4. put the 8U2 into USB DFU mode: +4.a. assert and hold the 8U2's RESET line +4.b. assert and hold the 8U2's HWB line +4.c. release the 8U2's RESET line +4.d. release the 8U2's HWB line +5. confirm that the board enumerates as either "Arduino Uno DFU" or "Arduino Mega 2560 DFU" +6. do "make dfu" (OS X or Linux - dfu-programmer must be installed first) or "make flip" (Windows - Flip must be installed first) + +Check that the board enumerates as either "Arduino Uno" or "Arduino Mega 2560". Test by uploading a new Arduino sketch from the Arduino IDE. diff --git a/external/arduino/avr/firmwares/wifishield/binary/wifiHD.elf b/external/arduino/avr/firmwares/wifishield/binary/wifiHD.elf new file mode 100644 index 000000000..d4a8bde55 Binary files /dev/null and b/external/arduino/avr/firmwares/wifishield/binary/wifiHD.elf differ diff --git a/external/arduino/avr/firmwares/wifishield/binary/wifiHD.hex b/external/arduino/avr/firmwares/wifishield/binary/wifiHD.hex new file mode 100644 index 000000000..0122587ff --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/binary/wifiHD.hex @@ -0,0 +1,16358 @@ +:0200000480007A +:10000000E08F100000000000000000000000000071 +:1000100000000000000000000000000000000000E0 +:1000200000000000000000000000000000000000D0 +:1000300000000000000000000000000000000000C0 +:1000400000000000000000000000000000000000B0 +:1000500000000000000000000000000000000000A0 +:100060000000000000000000000000000000000090 +:100070000000000000000000000000000000000080 +:100080000000000000000000000000000000000070 +:100090000000000000000000000000000000000060 +:1000A0000000000000000000000000000000000050 +:1000B0000000000000000000000000000000000040 +:1000C0000000000000000000000000000000000030 +:1000D0000000000000000000000000000000000020 +:1000E0000000000000000000000000000000000010 +:1000F0000000000000000000000000000000000000 +:1001000000000000000000000000000000000000EF +:1001100000000000000000000000000000000000DF +:1001200000000000000000000000000000000000CF +:1001300000000000000000000000000000000000BF +:1001400000000000000000000000000000000000AF +:10015000000000000000000000000000000000009F +:10016000000000000000000000000000000000008F +:10017000000000000000000000000000000000007F +:10018000000000000000000000000000000000006F +:10019000000000000000000000000000000000005F +:1001A000000000000000000000000000000000004F +:1001B000000000000000000000000000000000003F +:1001C000000000000000000000000000000000002F +:1001D000000000000000000000000000000000001F +:1001E000000000000000000000000000000000000F +:1001F00000000000000000000000000000000000FF +:1002000000000000000000000000000000000000EE +:1002100000000000000000000000000000000000DE +:1002200000000000000000000000000000000000CE +:1002300000000000000000000000000000000000BE +:1002400000000000000000000000000000000000AE +:10025000000000000000000000000000000000009E +:10026000000000000000000000000000000000008E +:10027000000000000000000000000000000000007E +:10028000000000000000000000000000000000006E +:10029000000000000000000000000000000000005E +:1002A000000000000000000000000000000000004E +:1002B000000000000000000000000000000000003E +:1002C000000000000000000000000000000000002E +:1002D000000000000000000000000000000000001E +:1002E000000000000000000000000000000000000E +:1002F00000000000000000000000000000000000FE +:1003000000000000000000000000000000000000ED +:1003100000000000000000000000000000000000DD +:1003200000000000000000000000000000000000CD +:1003300000000000000000000000000000000000BD +:1003400000000000000000000000000000000000AD +:10035000000000000000000000000000000000009D +:10036000000000000000000000000000000000008D +:10037000000000000000000000000000000000007D +:10038000000000000000000000000000000000006D +:10039000000000000000000000000000000000005D +:1003A000000000000000000000000000000000004D +:1003B000000000000000000000000000000000003D +:1003C000000000000000000000000000000000002D +:1003D000000000000000000000000000000000001D +:1003E000000000000000000000000000000000000D +:1003F00000000000000000000000000000000000FD +:1004000000000000000000000000000000000000EC +:1004100000000000000000000000000000000000DC +:1004200000000000000000000000000000000000CC +:1004300000000000000000000000000000000000BC +:1004400000000000000000000000000000000000AC +:10045000000000000000000000000000000000009C +:10046000000000000000000000000000000000008C +:10047000000000000000000000000000000000007C +:10048000000000000000000000000000000000006C +:10049000000000000000000000000000000000005C +:1004A000000000000000000000000000000000004C +:1004B000000000000000000000000000000000003C +:1004C000000000000000000000000000000000002C +:1004D000000000000000000000000000000000001C +:1004E000000000000000000000000000000000000C +:1004F00000000000000000000000000000000000FC +:1005000000000000000000000000000000000000EB +:1005100000000000000000000000000000000000DB +:1005200000000000000000000000000000000000CB +:1005300000000000000000000000000000000000BB +:1005400000000000000000000000000000000000AB +:10055000000000000000000000000000000000009B +:10056000000000000000000000000000000000008B +:10057000000000000000000000000000000000007B +:10058000000000000000000000000000000000006B +:10059000000000000000000000000000000000005B +:1005A000000000000000000000000000000000004B +:1005B000000000000000000000000000000000003B +:1005C000000000000000000000000000000000002B +:1005D000000000000000000000000000000000001B +:1005E000000000000000000000000000000000000B +:1005F00000000000000000000000000000000000FB +:1006000000000000000000000000000000000000EA +:1006100000000000000000000000000000000000DA +:1006200000000000000000000000000000000000CA +:1006300000000000000000000000000000000000BA +:1006400000000000000000000000000000000000AA +:10065000000000000000000000000000000000009A +:10066000000000000000000000000000000000008A +:10067000000000000000000000000000000000007A +:10068000000000000000000000000000000000006A +:10069000000000000000000000000000000000005A +:1006A000000000000000000000000000000000004A +:1006B000000000000000000000000000000000003A +:1006C000000000000000000000000000000000002A +:1006D000000000000000000000000000000000001A +:1006E000000000000000000000000000000000000A +:1006F00000000000000000000000000000000000FA +:1007000000000000000000000000000000000000E9 +:1007100000000000000000000000000000000000D9 +:1007200000000000000000000000000000000000C9 +:1007300000000000000000000000000000000000B9 +:1007400000000000000000000000000000000000A9 +:100750000000000000000000000000000000000099 +:100760000000000000000000000000000000000089 +:100770000000000000000000000000000000000079 +:100780000000000000000000000000000000000069 +:100790000000000000000000000000000000000059 +:1007A0000000000000000000000000000000000049 +:1007B0000000000000000000000000000000000039 +:1007C0000000000000000000000000000000000029 +:1007D0000000000000000000000000000000000019 +:1007E0000000000000000000000000000000000009 +:1007F00000000000000000000000000000000000F9 +:1008000000000000000000000000000000000000E8 +:1008100000000000000000000000000000000000D8 +:1008200000000000000000000000000000000000C8 +:1008300000000000000000000000000000000000B8 +:1008400000000000000000000000000000000000A8 +:100850000000000000000000000000000000000098 +:100860000000000000000000000000000000000088 +:100870000000000000000000000000000000000078 +:100880000000000000000000000000000000000068 +:100890000000000000000000000000000000000058 +:1008A0000000000000000000000000000000000048 +:1008B0000000000000000000000000000000000038 +:1008C0000000000000000000000000000000000028 +:1008D0000000000000000000000000000000000018 +:1008E0000000000000000000000000000000000008 +:1008F00000000000000000000000000000000000F8 +:1009000000000000000000000000000000000000E7 +:1009100000000000000000000000000000000000D7 +:1009200000000000000000000000000000000000C7 +:1009300000000000000000000000000000000000B7 +:1009400000000000000000000000000000000000A7 +:100950000000000000000000000000000000000097 +:100960000000000000000000000000000000000087 +:100970000000000000000000000000000000000077 +:100980000000000000000000000000000000000067 +:100990000000000000000000000000000000000057 +:1009A0000000000000000000000000000000000047 +:1009B0000000000000000000000000000000000037 +:1009C0000000000000000000000000000000000027 +:1009D0000000000000000000000000000000000017 +:1009E0000000000000000000000000000000000007 +:1009F00000000000000000000000000000000000F7 +:100A000000000000000000000000000000000000E6 +:100A100000000000000000000000000000000000D6 +:100A200000000000000000000000000000000000C6 +:100A300000000000000000000000000000000000B6 +:100A400000000000000000000000000000000000A6 +:100A50000000000000000000000000000000000096 +:100A60000000000000000000000000000000000086 +:100A70000000000000000000000000000000000076 +:100A80000000000000000000000000000000000066 +:100A90000000000000000000000000000000000056 +:100AA0000000000000000000000000000000000046 +:100AB0000000000000000000000000000000000036 +:100AC0000000000000000000000000000000000026 +:100AD0000000000000000000000000000000000016 +:100AE0000000000000000000000000000000000006 +:100AF00000000000000000000000000000000000F6 +:100B000000000000000000000000000000000000E5 +:100B100000000000000000000000000000000000D5 +:100B200000000000000000000000000000000000C5 +:100B300000000000000000000000000000000000B5 +:100B400000000000000000000000000000000000A5 +:100B50000000000000000000000000000000000095 +:100B60000000000000000000000000000000000085 +:100B70000000000000000000000000000000000075 +:100B80000000000000000000000000000000000065 +:100B90000000000000000000000000000000000055 +:100BA0000000000000000000000000000000000045 +:100BB0000000000000000000000000000000000035 +:100BC0000000000000000000000000000000000025 +:100BD0000000000000000000000000000000000015 +:100BE0000000000000000000000000000000000005 +:100BF00000000000000000000000000000000000F5 +:100C000000000000000000000000000000000000E4 +:100C100000000000000000000000000000000000D4 +:100C200000000000000000000000000000000000C4 +:100C300000000000000000000000000000000000B4 +:100C400000000000000000000000000000000000A4 +:100C50000000000000000000000000000000000094 +:100C60000000000000000000000000000000000084 +:100C70000000000000000000000000000000000074 +:100C80000000000000000000000000000000000064 +:100C90000000000000000000000000000000000054 +:100CA0000000000000000000000000000000000044 +:100CB0000000000000000000000000000000000034 +:100CC0000000000000000000000000000000000024 +:100CD0000000000000000000000000000000000014 +:100CE0000000000000000000000000000000000004 +:100CF00000000000000000000000000000000000F4 +:100D000000000000000000000000000000000000E3 +:100D100000000000000000000000000000000000D3 +:100D200000000000000000000000000000000000C3 +:100D300000000000000000000000000000000000B3 +:100D400000000000000000000000000000000000A3 +:100D50000000000000000000000000000000000093 +:100D60000000000000000000000000000000000083 +:100D70000000000000000000000000000000000073 +:100D80000000000000000000000000000000000063 +:100D90000000000000000000000000000000000053 +:100DA0000000000000000000000000000000000043 +:100DB0000000000000000000000000000000000033 +:100DC0000000000000000000000000000000000023 +:100DD0000000000000000000000000000000000013 +:100DE0000000000000000000000000000000000003 +:100DF00000000000000000000000000000000000F3 +:100E000000000000000000000000000000000000E2 +:100E100000000000000000000000000000000000D2 +:100E200000000000000000000000000000000000C2 +:100E300000000000000000000000000000000000B2 +:100E400000000000000000000000000000000000A2 +:100E50000000000000000000000000000000000092 +:100E60000000000000000000000000000000000082 +:100E70000000000000000000000000000000000072 +:100E80000000000000000000000000000000000062 +:100E90000000000000000000000000000000000052 +:100EA0000000000000000000000000000000000042 +:100EB0000000000000000000000000000000000032 +:100EC0000000000000000000000000000000000022 +:100ED0000000000000000000000000000000000012 +:100EE0000000000000000000000000000000000002 +:100EF00000000000000000000000000000000000F2 +:100F000000000000000000000000000000000000E1 +:100F100000000000000000000000000000000000D1 +:100F200000000000000000000000000000000000C1 +:100F300000000000000000000000000000000000B1 +:100F400000000000000000000000000000000000A1 +:100F50000000000000000000000000000000000091 +:100F60000000000000000000000000000000000081 +:100F70000000000000000000000000000000000071 +:100F80000000000000000000000000000000000061 +:100F90000000000000000000000000000000000051 +:100FA0000000000000000000000000000000000041 +:100FB0000000000000000000000000000000000031 +:100FC0000000000000000000000000000000000021 +:100FD0000000000000000000000000000000000011 +:100FE0000000000000000000000000000000000001 +:100FF00000000000000000000000000000000000F1 +:1010000000000000000000000000000000000000E0 +:1010100000000000000000000000000000000000D0 +:1010200000000000000000000000000000000000C0 +:1010300000000000000000000000000000000000B0 +:1010400000000000000000000000000000000000A0 +:101050000000000000000000000000000000000090 +:101060000000000000000000000000000000000080 +:101070000000000000000000000000000000000070 +:101080000000000000000000000000000000000060 +:101090000000000000000000000000000000000050 +:1010A0000000000000000000000000000000000040 +:1010B0000000000000000000000000000000000030 +:1010C0000000000000000000000000000000000020 +:1010D0000000000000000000000000000000000010 +:1010E0000000000000000000000000000000000000 +:1010F00000000000000000000000000000000000F0 +:1011000000000000000000000000000000000000DF +:1011100000000000000000000000000000000000CF +:1011200000000000000000000000000000000000BF +:1011300000000000000000000000000000000000AF +:10114000000000000000000000000000000000009F +:10115000000000000000000000000000000000008F +:10116000000000000000000000000000000000007F +:10117000000000000000000000000000000000006F +:10118000000000000000000000000000000000005F +:10119000000000000000000000000000000000004F +:1011A000000000000000000000000000000000003F +:1011B000000000000000000000000000000000002F +:1011C000000000000000000000000000000000001F +:1011D000000000000000000000000000000000000F +:1011E00000000000000000000000000000000000FF +:1011F00000000000000000000000000000000000EF +:1012000000000000000000000000000000000000DE +:1012100000000000000000000000000000000000CE +:1012200000000000000000000000000000000000BE +:1012300000000000000000000000000000000000AE +:10124000000000000000000000000000000000009E +:10125000000000000000000000000000000000008E +:10126000000000000000000000000000000000007E +:10127000000000000000000000000000000000006E +:10128000000000000000000000000000000000005E +:10129000000000000000000000000000000000004E +:1012A000000000000000000000000000000000003E +:1012B000000000000000000000000000000000002E +:1012C000000000000000000000000000000000001E +:1012D000000000000000000000000000000000000E +:1012E00000000000000000000000000000000000FE +:1012F00000000000000000000000000000000000EE +:1013000000000000000000000000000000000000DD +:1013100000000000000000000000000000000000CD +:1013200000000000000000000000000000000000BD +:1013300000000000000000000000000000000000AD +:10134000000000000000000000000000000000009D +:10135000000000000000000000000000000000008D +:10136000000000000000000000000000000000007D +:10137000000000000000000000000000000000006D +:10138000000000000000000000000000000000005D +:10139000000000000000000000000000000000004D +:1013A000000000000000000000000000000000003D +:1013B000000000000000000000000000000000002D +:1013C000000000000000000000000000000000001D +:1013D000000000000000000000000000000000000D +:1013E00000000000000000000000000000000000FD +:1013F00000000000000000000000000000000000ED +:1014000000000000000000000000000000000000DC +:1014100000000000000000000000000000000000CC +:1014200000000000000000000000000000000000BC +:1014300000000000000000000000000000000000AC +:10144000000000000000000000000000000000009C +:10145000000000000000000000000000000000008C +:10146000000000000000000000000000000000007C +:10147000000000000000000000000000000000006C +:10148000000000000000000000000000000000005C +:10149000000000000000000000000000000000004C +:1014A000000000000000000000000000000000003C +:1014B000000000000000000000000000000000002C +:1014C000000000000000000000000000000000001C +:1014D000000000000000000000000000000000000C +:1014E00000000000000000000000000000000000FC +:1014F00000000000000000000000000000000000EC +:1015000000000000000000000000000000000000DB +:1015100000000000000000000000000000000000CB +:1015200000000000000000000000000000000000BB +:1015300000000000000000000000000000000000AB +:10154000000000000000000000000000000000009B +:10155000000000000000000000000000000000008B +:10156000000000000000000000000000000000007B +:10157000000000000000000000000000000000006B +:10158000000000000000000000000000000000005B +:10159000000000000000000000000000000000004B +:1015A000000000000000000000000000000000003B +:1015B000000000000000000000000000000000002B +:1015C000000000000000000000000000000000001B +:1015D000000000000000000000000000000000000B +:1015E00000000000000000000000000000000000FB +:1015F00000000000000000000000000000000000EB +:1016000000000000000000000000000000000000DA +:1016100000000000000000000000000000000000CA +:1016200000000000000000000000000000000000BA +:1016300000000000000000000000000000000000AA +:10164000000000000000000000000000000000009A +:10165000000000000000000000000000000000008A +:10166000000000000000000000000000000000007A +:10167000000000000000000000000000000000006A +:10168000000000000000000000000000000000005A +:10169000000000000000000000000000000000004A +:1016A000000000000000000000000000000000003A +:1016B000000000000000000000000000000000002A +:1016C000000000000000000000000000000000001A +:1016D000000000000000000000000000000000000A +:1016E00000000000000000000000000000000000FA +:1016F00000000000000000000000000000000000EA +:1017000000000000000000000000000000000000D9 +:1017100000000000000000000000000000000000C9 +:1017200000000000000000000000000000000000B9 +:1017300000000000000000000000000000000000A9 +:101740000000000000000000000000000000000099 +:101750000000000000000000000000000000000089 +:101760000000000000000000000000000000000079 +:101770000000000000000000000000000000000069 +:101780000000000000000000000000000000000059 +:101790000000000000000000000000000000000049 +:1017A0000000000000000000000000000000000039 +:1017B0000000000000000000000000000000000029 +:1017C0000000000000000000000000000000000019 +:1017D0000000000000000000000000000000000009 +:1017E00000000000000000000000000000000000F9 +:1017F00000000000000000000000000000000000E9 +:1018000000000000000000000000000000000000D8 +:1018100000000000000000000000000000000000C8 +:1018200000000000000000000000000000000000B8 +:1018300000000000000000000000000000000000A8 +:101840000000000000000000000000000000000098 +:101850000000000000000000000000000000000088 +:101860000000000000000000000000000000000078 +:101870000000000000000000000000000000000068 +:101880000000000000000000000000000000000058 +:101890000000000000000000000000000000000048 +:1018A0000000000000000000000000000000000038 +:1018B0000000000000000000000000000000000028 +:1018C0000000000000000000000000000000000018 +:1018D0000000000000000000000000000000000008 +:1018E00000000000000000000000000000000000F8 +:1018F00000000000000000000000000000000000E8 +:1019000000000000000000000000000000000000D7 +:1019100000000000000000000000000000000000C7 +:1019200000000000000000000000000000000000B7 +:1019300000000000000000000000000000000000A7 +:101940000000000000000000000000000000000097 +:101950000000000000000000000000000000000087 +:101960000000000000000000000000000000000077 +:101970000000000000000000000000000000000067 +:101980000000000000000000000000000000000057 +:101990000000000000000000000000000000000047 +:1019A0000000000000000000000000000000000037 +:1019B0000000000000000000000000000000000027 +:1019C0000000000000000000000000000000000017 +:1019D0000000000000000000000000000000000007 +:1019E00000000000000000000000000000000000F7 +:1019F00000000000000000000000000000000000E7 +:101A000000000000000000000000000000000000D6 +:101A100000000000000000000000000000000000C6 +:101A200000000000000000000000000000000000B6 +:101A300000000000000000000000000000000000A6 +:101A40000000000000000000000000000000000096 +:101A50000000000000000000000000000000000086 +:101A60000000000000000000000000000000000076 +:101A70000000000000000000000000000000000066 +:101A80000000000000000000000000000000000056 +:101A90000000000000000000000000000000000046 +:101AA0000000000000000000000000000000000036 +:101AB0000000000000000000000000000000000026 +:101AC0000000000000000000000000000000000016 +:101AD0000000000000000000000000000000000006 +:101AE00000000000000000000000000000000000F6 +:101AF00000000000000000000000000000000000E6 +:101B000000000000000000000000000000000000D5 +:101B100000000000000000000000000000000000C5 +:101B200000000000000000000000000000000000B5 +:101B300000000000000000000000000000000000A5 +:101B40000000000000000000000000000000000095 +:101B50000000000000000000000000000000000085 +:101B60000000000000000000000000000000000075 +:101B70000000000000000000000000000000000065 +:101B80000000000000000000000000000000000055 +:101B90000000000000000000000000000000000045 +:101BA0000000000000000000000000000000000035 +:101BB0000000000000000000000000000000000025 +:101BC0000000000000000000000000000000000015 +:101BD0000000000000000000000000000000000005 +:101BE00000000000000000000000000000000000F5 +:101BF00000000000000000000000000000000000E5 +:101C000000000000000000000000000000000000D4 +:101C100000000000000000000000000000000000C4 +:101C200000000000000000000000000000000000B4 +:101C300000000000000000000000000000000000A4 +:101C40000000000000000000000000000000000094 +:101C50000000000000000000000000000000000084 +:101C60000000000000000000000000000000000074 +:101C70000000000000000000000000000000000064 +:101C80000000000000000000000000000000000054 +:101C90000000000000000000000000000000000044 +:101CA0000000000000000000000000000000000034 +:101CB0000000000000000000000000000000000024 +:101CC0000000000000000000000000000000000014 +:101CD0000000000000000000000000000000000004 +:101CE00000000000000000000000000000000000F4 +:101CF00000000000000000000000000000000000E4 +:101D000000000000000000000000000000000000D3 +:101D100000000000000000000000000000000000C3 +:101D200000000000000000000000000000000000B3 +:101D300000000000000000000000000000000000A3 +:101D40000000000000000000000000000000000093 +:101D50000000000000000000000000000000000083 +:101D60000000000000000000000000000000000073 +:101D70000000000000000000000000000000000063 +:101D80000000000000000000000000000000000053 +:101D90000000000000000000000000000000000043 +:101DA0000000000000000000000000000000000033 +:101DB0000000000000000000000000000000000023 +:101DC0000000000000000000000000000000000013 +:101DD0000000000000000000000000000000000003 +:101DE00000000000000000000000000000000000F3 +:101DF00000000000000000000000000000000000E3 +:101E000000000000000000000000000000000000D2 +:101E100000000000000000000000000000000000C2 +:101E200000000000000000000000000000000000B2 +:101E300000000000000000000000000000000000A2 +:101E40000000000000000000000000000000000092 +:101E50000000000000000000000000000000000082 +:101E60000000000000000000000000000000000072 +:101E70000000000000000000000000000000000062 +:101E80000000000000000000000000000000000052 +:101E90000000000000000000000000000000000042 +:101EA0000000000000000000000000000000000032 +:101EB0000000000000000000000000000000000022 +:101EC0000000000000000000000000000000000012 +:101ED0000000000000000000000000000000000002 +:101EE00000000000000000000000000000000000F2 +:101EF00000000000000000000000000000000000E2 +:101F000000000000000000000000000000000000D1 +:101F100000000000000000000000000000000000C1 +:101F200000000000000000000000000000000000B1 +:101F300000000000000000000000000000000000A1 +:101F40000000000000000000000000000000000091 +:101F50000000000000000000000000000000000081 +:101F60000000000000000000000000000000000071 +:101F70000000000000000000000000000000000061 +:101F80000000000000000000000000000000000051 +:101F90000000000000000000000000000000000041 +:101FA0000000000000000000000000000000000031 +:101FB0000000000000000000000000000000000021 +:101FC0000000000000000000000000000000000011 +:101FD0000000000000000000000000000000000001 +:101FE00000000000000000000000000000000000F1 +:101FF00000000000000000000000000000000000E1 +:08200000481F000080013E04AE +:102008003038F00C19005EBC5C7C4848F00C003994 +:10201800F00C093BB22A5EFC000011C0F80815015B +:102028003039F20C1800E08800035EFDF00B000B5D +:102038004828F00B032C5EFC00007B08580CC0D02D +:1020480048787829F00900293008720A143CC060E1 +:102058002FF82F895848CFA13FF85EF800007B0879 +:102068003038F00C18005EBCF60C001C30094838FB +:10207800F00C09295EFC000000007B085EFFD70316 +:10208800D4011988301EB6881998B6BEEA18FFFF21 +:10209800E818FF80B6AEB698580AC0301588C0A8B0 +:1020A80048981188F4081800C0303038C03848788B +:1020B80011B8B6C83EE8B6D83008B6E8302C306853 +:1020C800B208D802000016AB00000008D40130188E +:1020D800198EB68E199CB6A8EA1CFFFFE81CFF8073 +:1020E800B6B8B69C580AC0A0158CE06A00FFF00C80 +:1020F8001800F4081710F9B80001B6C83EE8B6D8B9 +:102108003008B6E8302C3068B208D802D421202D27 +:102118004AAA189E1698129674075807C071FACAE8 +:10212800FFF814F7F01F0026C4681989B6891999B1 +:10213800EA19FFFFE819FF80B6993039B0A9740988 +:102148007219F20C1618B0F9B0CCF9D9C108F3D944 +:10215800C208B0ECB0D9304BB0BB74097229F20C8C +:102168001618F169000CF16C0009F9D9C108F3D906 +:10217800C208F16C000BF16B0008F169000A7409E0 +:10218800300A7239F16A00133EEAF16A0012F20A63 +:102198001618F1690011F16A000EF16B000DF5D9FE +:1021A800C108F3D9C208F16A0010F169000F302C98 +:1021B8003138AC082FEDD8220000152C800020D42F +:1021C8003038F00C18005EBCF60C001B48F8F00B19 +:1021D800032858085E0C704958195E1C7029581954 +:1021E800C09148B8F00C003C9828B42878089508A5 +:1021F8005EFC71E85808F0091700F1F91001F1F8D0 +:10220800120A9509B4285EFC00007B08000011C082 +:10221800D4314BC8300A10941499910A1893301A83 +:102228004B984BA7910A3EE14B921296C0280A9907 +:10223800E0682710C0485808C5602018664AE21AA6 +:102248000201E04A0201CF81C4F8F2C5FFFFE20AA9 +:102258001800CEE10F9BF7DBC0C15825E0890005C7 +:102268003038300AC2E80FAA3038C148580BC0A02D +:10227800EE08070EEE08000CA96E2FE8199C1C0842 +:10228800C058F0CCFFFFEE080708201AF80800082D +:102298005C5A10395F9CEC0A18005F9EFDEC000C3C +:1022A800EC0C1800CE4110395F09F9DAC008EC0CC3 +:1022B80018005F0CF9E90009EC091800C020D83AA9 +:1022C800840C3009F20C1900CB34201D5C6A1ADB2F +:1022D8001AD849081ADA490C1AD51AD8F01F000F6B +:1022E8002FADCA6BDA3A662A68085C5A2FF8EE09ED +:1022F8000B0A8908E0480063FE9AFFA9305CD832CF +:10230800000014B0000011B8000014B8000016A2B4 +:102318008003792C80037AB0800094C4D431202DB6 +:102328004C68149570081896169712945808C0713E +:10233800FACAFFF814F8F01F0042CC38198830198F +:10234800B6881998B6A9EA18FFFFE818FF80B6986A +:102358004BC89088EDB80002C171189330023EE175 +:102368000788201D4B8C1AD8F01F00382FF22FED4C +:102378000788E2081800C0502FF3E0420400CF118C +:102388004B3CF01F00320DC83099F2081800E08865 +:1023980000114B09920A3009F20A1900E0840091F1 +:1023A8001AD84AD84ADC1AD8F01F00282FEDC88856 +:1023B800E0450032C290A3684A99E0450033C5D091 +:1023C800129B7209F2080309EECAFFFCF3360020DB +:1023D8003009AEB6C088760CF808030CF809070C6B +:1023E8002FF914CCEC091900CF7349A99289EDB9DA +:1023F8000004C5F149A97209F2080308499C1AD8D2 +:1024080049581AD8C538304BA368495A7409F20894 +:10241800030972C9AEBBF20B1618AEC9AEFBF7D9E9 +:10242800C108F3D9C208AEDBAEE948A99289EDB973 +:102438000004C1903046C3D80000152C800020D479 +:10244800000016A080037AF0800094C4800384D42E +:10245800000016A28003785880037AF8000015203F +:1024680080037B187409F208030870C8496C1AD8ED +:10247800304649681AD8C1A8301AAEBA720AF408A8 +:10248800030AF53A0038AECA491A948AEDBA00042C +:10249800C0303016C0E87209F2080308F138003875 +:1024A80048CC1AD8301648981AD8F01F000B2FEDD0 +:1024B8003EE80C07AEC83008AED82FB6A806302CB8 +:1024C8002FEDD83280037B2880037858000016A2AD +:1024D80080037B38800094C4D421204D4A981897F3 +:1024E800118A580AC0313FF6C0D84A7811BC118EFB +:1024F800119611A8B166EDEE1186EDE81086F9E6A1 +:1025080010064A289088EDB80002C0E14A08201D4C +:102518004A0C1ADA1AD61AD8505B5049F01F001E16 +:102528002FCD4009401B49D870085808C081FACA05 +:10253800FFF00E9C14F8F01F001AC2080F88B68826 +:102548000F98EA18FFFFE818FF80B6983018B6A869 +:102558003048B6B8F1D6C108B6E83EE8EC0A161815 +:10256800B6F6F7680008B6CA3008EDD6C208F768AC +:102578000009B6D63098302CB2082FCDD8220000EA +:102588000000152800007B28000016A28003782090 +:1025980080037B48800094C40000152C800020D460 +:1025A800D401580BC0313FF8C0C8178A17B917981B +:1025B800B168F1EA118817AAF1EA1088F3E810085F +:1025C800F00A161848E9B28AF5D8C208B2B8B29A21 +:1025D800F5D8C108B2AA48B99289EDB90002C0A1DC +:1025E800201D1AD848881ADC488C1AD8F01F000811 +:1025F8002FCD30194878B089D802000000007B2818 +:10260800000016A28003799C80037B74800094C428 +:1026180000001528D431204D4AE8189570081697FF +:1026280012965808C071FACAFFF014F8F01F002A71 +:10263800C4D84AA89088EDB80002C1711894300334 +:102648003EE20988201D4A6C1AD8F01F00262FF395 +:102658002FED0988E4081800C0502FF4E043040067 +:10266800CF114A1CF01F001F0B880BCCAE880B98AB +:10267800EA18FFFFE818FF80AE983004BA445014F7 +:102688003025FACAFFFCAEA5301BF01F0018304AEF +:10269800EF64000CEF6500084018F0091618AEF852 +:1026A800AEC99A49AEBAF5D8C108F1D8C208EF69DF +:1026B800000AAED8AEEA3EE8F3D9C108EF68000BCD +:1026C800EF69000930C8302CAC082FCDD832000093 +:1026D8000000152C800020D4000016A080037AF09A +:1026E800800094C4800384D4800021C8D40148A801 +:1026F8009088EDB80002C0E148887008201D1AD8FB +:10270800487811881AD84878487C1AD8F01F0007EA +:102718002FCDDA0A000016A200000008000016AB50 +:10272800800379E480037BA8800094C4D42148E620 +:10273800189E30076C0C580CC0A02FF72EC6E04727 +:102748000024CF91489CF01F000ADC2A4866EE0757 +:102758000027EC070027EF680010AECE8F0B8F2AFA +:102768008F39D822000011E080037BC4800094C414 +:10277800D4214C8618970C9A302830094C6B310CB0 +:10278800F01F00460C9A302830094C5B311CF01FB2 +:1027980000430C9A302830094C2B312CF01F003F95 +:1027A8000E990C9A30284C0B314CF01F003C0E99B6 +:1027B8000C9A30284BDB315CF01F00383018300998 +:1027C8004BBA4BCB320CF01F003530184BA73009F1 +:1027D8000E9B4BAA321CF01F00310E9B301830099B +:1027E8004B7A322CF01F002D4B6532390A9A0E9B1A +:1027F8003018129CF01F002932490A9A0E9B301893 +:10280800129CF01F002632590A9A0E9B3018129C0F +:10281800F01F00220A9A32690E9B3018129CF01F92 +:10282800001F0C9A302830094A7B336CF01F001BBC +:102838000E9B301830094A5A327CF01F00180C9A47 +:10284800302830094A2B330CF01F00144A1533394D +:102858000A9A0E9B3018129CF01F001033190A9A1E +:102868000E9B3018129CF01F000D0A9A33290E9BFC +:102878003018129CF01F00090C9A30283009496B57 +:10288800334CF01F00060E9B30183009493AC278C5 +:10289800800020D48000427C8000273480004118CA +:1028A8008000433080003FD080003EA88000208810 +:1028B800800026F48000208480002114800035ECFC +:1028C80080003514800034A480004B5480003740C9 +:1028D8008000232480003678800024E0335CF01FD9 +:1028E80000370C9A302830094B5B328CF01F0033CC +:1028F8000C9A302830094B3B32DCF01F00300C9A20 +:10290800302830094B0B32ECF01F002C0E9B30188E +:1029180030094AEA329CF01F00290E9B3018300912 +:102928004ABA32CCF01F00250E9B301830094A9A5B +:1029380032BCF01F00220C9A304830094A6B344CE4 +:10294800F01F001E0E9B301830094A4A32ACF01FA7 +:10295800001B0E9B301830094A1A345CF01F001710 +:102968000E9B3018300949FA32FCF01F00140E9BF8 +:102978003018300949CA337CF01F00100E9B3018FC +:10298800300949AA338CF01F000D0C9A30483009E1 +:10299800497B346CF01F00090C9A30283009495BD8 +:1029A800339CF01F00060E9B30183009492A33ACBF +:1029B800F01F0002D82200008000273480003D88E4 +:1029C80080003AC8800038B4800033FC800030D4DE +:1029D800800032848000375C800032088000300438 +:1029E8008000332880002F8C80002EC4800038841B +:1029F800800037CC8000261CD4013038580B5F1972 +:102A0800F00C18005F88F3E80008C060F40C0019A7 +:102A180048D8F009092B48D89088EDB80001C111B1 +:102A280048B848C9580AF20A1700F00A171048A807 +:102A38001ADA1ADB1ADC489C1AD8F01F00092FCDC5 +:102A4800D802000000007B08000016A280037BDC8F +:102A580080037BE4800378C080037BF0800094C40B +:102A6800D401580BF60A1700F7FA180BF01F0002EA +:102A7800D802000080002A00D401320A300B483CFA +:102A8800F01F0003D802000000007B088002E8BCA9 +:102A9800D421206D3087FAC6FFF00E9A4C6B18953A +:102AA8000C9CF01F0046304B0C9CF01F0045300872 +:102AB800FB68000DBA88FB680009FB68000BFB681F +:102AC800000CEE784240501830480E9BFB67000817 +:102AD800FB68000A300AFE7C2400F01F003A1897B1 +:102AE800C0F04B989088EDB80002C0814B78201D4B +:102AF8004B7C1AD8F01F00372FED301CC5A8E06AB0 +:102B0800F980EA1A03371A9BFE7C2400F01F003272 +:102B1800582CC0D14AC89008EE081900C0844AB899 +:102B2800201D4AEC1AD8F01F002B2FEDD303300AD2 +:102B3800E06B01204AACF01F002BD503E1B8000080 +:102B4800EE180001F5D8C201C020D303FE78240096 +:102B58003019705BF7D9D001915B705BF7D9D0C1A0 +:102B6800915B705BF7D9D081915B580AC020D5037F +:102B7800FE7C2400F01F001C0A9CF01F001C364A33 +:102B8800300B49BCF01F001BE06A0400300B49AC55 +:102B9800F01F0018E06A0400300B498CF01F001584 +:102BA800F01F0017497830079107F01F00170E9C97 +:102BB8002FADD822800382078002E7368000A280EA +:102BC8008000A618000016A2800379BC80037C0848 +:102BD800800094C48000A73C80037C2880002C10CF +:102BE8008000A3A08000A7EC80002778000014B81C +:102BF8008002E8BC00000DB8000009B880002A80F7 +:102C0800000000088000751CD401E1B80000EE182F +:102C18000001F5D8C201C020D303FE782400301982 +:102C2800706BF7D9D001916B706BF7D9D0C1916BEC +:102C3800706BF7D9D081916B580AC020D503FE7C00 +:102C480024007848EDB80000C0F1F01F0016C0C19C +:102C5800319CF01F0015495890092FF9B009301917 +:102C68004938B089C1B8E1B80000EE180001F5D8BC +:102C7800C201C020D303FE7824003019705BF7D955 +:102C8800D001915B705BF7D9D0C1915B705BF7D9CC +:102C9800D081915B580AC020D503D402D603000026 +:102CA800800022188000A2E6000014B40000151C61 +:102CB800D4313006189714931694950618983E093F +:102CC800C2C81095118A2FF8F20A1800C251580686 +:102CD800C21049E890093008F0091900C064089B3F +:102CE8000E9C5C7BF01F001A49A890093008F00977 +:102CF8001900C1040C070F98201D1AD849681AD466 +:102D08001AD690881AD84958495C1AD8F01F001565 +:102D18002FAD8706C1882FF60836CD4548D89009CB +:102D28003008F0091900C0353005C0D8201D48A862 +:102D38001AD690881AD8489848BC1AD83005F01F77 +:102D480000092FCD0A9CD832000016A680013DB498 +:102D5800000016A2000014B4800378D080037C48D9 +:102D6800800094C480037C6CD42118971696F01FB9 +:102D780000325F080E3C5F191895F1E91009C03060 +:102D88005808C5710B893E08F0091800C5210B9930 +:102D98003008F0091800C4D5E2190040C0E1EACAB9 +:102DA800FFFD0BAC1298C068158B2FF92FFB160A84 +:102DB80016081839CFA5C2384A089088EDB800021D +:102DC800C0D149F8201D49FC1AD8F01F001FF7D6BA +:102DD800C0100E9CF01F001D2FED3009EACAFFFD40 +:102DE8000BAC1298C0A81587159B2FF9F7E7108B25 +:102DF8002FEB160AF60800081839CF6510053EE9CA +:102E08000BB8F2081800C021DA2A4919920A3009C9 +:102E1800F20A1900C0E4201D1AD848E890881AD888 +:102E2800487848DC1AD8F01F0008300C2FCDD8227B +:102E3800D82A000080002CB8000016A080037974FE +:102E480080037C84800094C480013DB4000016A2F5 +:102E5800000014B480037C8CD4014918581CC0713C +:102E68003039334C9109F01F000FC0683049334C9A +:102E78009109F01F000D48D89088EDB80002C0D124 +:102E880048787008201D1AD848981AD8489848AC2D +:102E98001AD8F01F000A2FCDD80200000000000841 +:102EA8008000A2E68000A300000016A280037A3CFE +:102EB8008003821080037CB0800094C4D421FACDB2 +:102EC80001004AC81697700512965805C071FACACB +:102ED800FF0014F5F01F0028C4A81989301AB68914 +:102EE8001999B6AAEA19FFFFE819FF80B69919B926 +:102EF800F4091800C20119C53FF8F0051800C1B05F +:102F0800E06A00FF300B1A9CF01F001C1A9430086E +:102F1800C048E8080B082FF80A38CFC51A94AEB590 +:102F2800EEC8FFFCFA050009C038093A10CA123485 +:102F3800CFD1C15849256A0CF01F00120A98EECA71 +:102F4800FFFCEBDCC0083009AEB5C068700BF609B1 +:102F5800070B2FF914CBEA091900CF933EE80A07AB +:102F6800AEC83008AED82FB5302CAC052C0DD82201 +:102F78000000152C800020D48002E8BC0000011459 +:102F88008002EDD0D421202D49981697700E129604 +:102F9800580EC071FACAFFF814FEF01F0016C25886 +:102FA8001989B6891998EA18FFFFE818FF80B698BA +:102FB80030184915B6A86A0CF01F0010EEC9FFFCBE +:102FC8005C5C3008AEBCC0686A0AF408070A2FF8CF +:102FD80012CAF8081900CF933EE818072FBCAEC8EC +:102FE8003008AED8AC0C302C2FEDD8220000152CB0 +:102FF800800020D4000001148002EDD0D421202DBF +:103008004AE818967008169712955808C071FACAB7 +:10301800FFF814F8F01F002AC4D84AA811D4303891 +:10302800F0041800E08B0046FACAFFFC1A9B089CC3 +:10303800F01F00250D88C300AE880D98EA18FFFF21 +:10304800E818FF80AE983018AEA81BC8AEB89A280A +:10305800AEC83008C0B8F3D8C010400BF1DAB010D1 +:10306800EE09000AF6090709B4D9F0CAFFFF9A2940 +:10307800F2081900CF13F1D9C010EE0800083EEA93 +:10308800B0DA9AA82FA910073008AEE8AA09089C58 +:10309800F01F000EC0E8AE880D98EA18FFFFE81888 +:1030A800FF80AECCAE98AEAC3EE8AEB83048AA08C9 +:1030B800302C2FEDD82200000000152C800020D4E1 +:1030C80000000DB880006BF480006FBCD431202D57 +:1030D8004C5818967008169712955808C071BAE897 +:1030E800FACAFFFAF01F0041C728F8C8FFFDC3C09D +:1030F80011842FF4F0040004C37009893018F00912 +:103108001800C67109993EE8F0091800C6214B88D5 +:1031180090093008F0091900C5C44B681AD44B6CE3 +:103128001AD8F01F00362FEDC548099309A9F3E313 +:1031380010835C83C54809893018F0091800C1510B +:1031480009993EE8F0091800C1014A989009300829 +:10315800F0091900C0A44A781AD44A7C1AD8F01F7A +:1031680000272FEDC02830030DB43018F0041800E4 +:10317800C2D10DCC3038F00C1800E08B0028F5D304 +:10318800C008FACBFFF9F01F001E0D88C120AE88D9 +:103198000D98EA18FFFFE818FF80AEB4AE98AEA409 +:1031A8001BF8AEC83EE8AED83008AEE83068C0D8E4 +:1031B800AE880D98EA18FFFFE818FF80AE983EE841 +:1031C800AECCAEB8AEAC3048AA08302C2FEDD83211 +:1031D80009883029F2081800CA9030032FF8100423 +:1031E800CAB1CC3B0000152C800020D4000016A2E8 +:1031F8008003780C80037CBC800094C480006FE05E +:10320800D421202D49A81697700E1296580EC07119 +:10321800FACAFFF814FEF01F0017C2681989301A9D +:10322800B6891999B6AAEA19FFFFE819FF80B69975 +:1032380019B9F4091800C0D119C83039F2081800B2 +:10324800E08B000848C9F208033CF01F000CC028B6 +:10325800300C3018AEB83EE8AECCAED83008AEE888 +:10326800302C3068AC082FEDD82200000000152C57 +:10327800800020D400007B0880004D78D421202DC8 +:103288004A181697700E1296580EC071FACAFFF8AF +:1032980014FEF01F001EC3481989301AB6891999FF +:1032A800B6AAEA19FFFFE819FF80B69919B9F40917 +:1032B8001800C0B119CC3038F00C1800E08B0006AB +:1032C800F01F00135C8CC028300C3028AEB83EE8E4 +:1032D800AECCAEE85C7CF8081608AED83008AEF87C +:1032E8003078AC0848B89088EDB80002C08148A88A +:1032F8001ADC48AC1AD8F01F000A2FED302C2FED3D +:10330800D82200000000152C800020D480006D38E1 +:10331800000016A8800378A880037CD8800094C495 +:10332800D421202D4AA81697700512965805C07109 +:10333800FACAFFF814F5F01F0027C4781989301A63 +:10334800B6891999B6AAEA19FFFFE819FF80B69954 +:10335800303819B919C5F40918005F09F0051800C3 +:103368005F881268C19049C8F00503345804C060EA +:10337800089C301BF01F0019C10849989009E809FA +:103388001900C0A449781AD5497C1AD8F01F00172B +:10339800089C2FEDC028300C3018AEB83EE8AECCF3 +:1033A800AED83008AEE83068AC0849189088EDB857 +:1033B8000002C0A148B8201D1ADC48EC1AD51AD85A +:1033C800F01F000A2FCD302C2FEDD8220000152C2D +:1033D800800020D400007B0880004F1C000016A647 +:1033E8008003794080037CEC800094C4000016A818 +:1033F80080037D10D421202D4A181697700E12963E +:10340800580EC071FACAFFF814FEF01F001EC34818 +:103418001989301AB6891999B6AAEA19FFFFE81965 +:10342800FF80B69919B9F4091800C0F119C83039E4 +:10343800F2081800E08B000A4939F2080038300B0E +:10344800701CF01F0012C028300C3018AEB83EE8CF +:10345800AECCAED83008AEE83068AC0848C8908822 +:10346800EDB80002C08148B81ADC48BC1AD8F01F71 +:10347800000B2FED302C2FEDD82200000000152C6A +:10348800800020D400007B0880004F1C000016A894 +:1034980080037A6480037D28800094C4D40149584D +:1034A8009088EDB80002C08149381ADC493C1AD826 +:1034B800F01F00132FED49383009118AF20A18005D +:1034C800C021DC0AB089F01F0010581CC1004898C0 +:1034D80090093008F0091900C025DA0A48681ADC92 +:1034E80048AC1AD8F01F0006301C2FEDD802000097 +:1034F800000016A28003798480037D38800094C47C +:10350800000016AA80019EF880037D54D421202D46 +:103518004B281496700E16971295580EC071FACA59 +:10352800FFF814FEF01F002EC5681989B68919988E +:10353800EA18FFFFE818FF803014B698B6A4F01F09 +:103548000029C3E0E0460025C260E0460026C3200B +:10355800EEC9FFFCE0460024C0F0129AF9380020BA +:103568003009AEB8C058F809070B2FF914CBF00989 +:103578001900CFA3C28830682DACAEB8306A3008C5 +:10358800198B12CB2FF8201C5C88F4081900CF91F6 +:103598003068C19878C8F0091618AEF93049AEC835 +:1035A800AEB9F3D8C108F1D8C208AED9AEE83048F0 +:1035B800C0A8AEB4F9380038AEC83018C048AEB4A8 +:1035C800AECC18983EE91007AEC93009AED92FB86D +:1035D800302CAA082FEDD8220000152C800020D40A +:1035E8008001997CD421202D49F8189670081697E7 +:1035F80012955808C041FACAFFF8C1881988B688D8 +:103608001998EA18FFFFE818FF803019B698306853 +:10361800B6A9B6B81A9CF01F0015581CC0B00A9974 +:103628000E9B0C9CFACAFFF8300814F8F01F001023 +:10363800C1881BD8AEC81BC8AED81BB8AEE81BA83B +:10364800AEF81B98EF6800081B88EF6800093EE891 +:10365800EF68000A3008EF68000B302C30B8AA0871 +:103668002FEDD8220000152C80019128800020D44D +:10367800D421FACD010016961A971A9C173AF01F12 +:103688000025FAC9FF000D88F20800083009F16921 +:10369800FF004A189088EDB80002C08149F81AD78F +:1036A80049FC1AD8F01F001F2FED300849E749FAE6 +:1036B800AE88AE98AEA8AEB8B488109949CA0E9B29 +:1036C8001A9C1A96F01F001B5C5CC040E06C00FF5F +:1036D800C1E849189088EDB80002C1510F8A0FB9A6 +:1036E8000F98B168F1EA11880FAAF1EA1088F3E897 +:1036F8001008201D1AD848981AD648FC1AD8F01F66 +:1037080000092FCD30194898301CB0892C0DD822CB +:103718008002E736000016A280037A7C80037D646D +:10372800800094C400007B2800001528800025A88C +:103738008000C4C080037D84D401F01F0006E068C7 +:1037480000FF581CF00C1710F9BC0001D80200004B +:10375800800199CCD42118971696335CF01F001677 +:103768005827C1F10D980D89F1E910893018F00931 +:103778001900C1710DA80DBA0DC9303BF608180023 +:10378800E0880004300CC04848CBF608033CA96A1E +:10379800ECCBFFFB120A5C7AF01F00091897C028CF +:1037A8003FF7335CF01F0007E06C00FF5817F9BCC7 +:1037B8000001D8228000A30000007B08800053C0CD +:1037C8008000A2E6D421202D581CC4211789F809AD +:1037D8001800C3E1F6C8FFFE1796C170118AF20AF5 +:1037E8001800C131119A3EE9F20A1800C0E149B93E +:1037F800920A3009F20A1900C0841AD84988499CEB +:103808001AD8F01F00192FED3008FACAFFF8300B4C +:1038180014E80C9CF01F00159A3A18973038F006F7 +:103828001800E0880004300CC0484918F006033C32 +:103838005C7A0E9BF01F000F18950C9CF01F000E71 +:103848000E9CF01F000E5815C0310A9CC038E06C61 +:1038580000FF2FEDD8220000000016A28003795C3B +:1038680080037CBC800094C4800072DC00007B086C +:103878008000514080006E188002E28CD401582CE0 +:10388800C13117981789F1E910893018F009190022 +:10389800C0B117C817BA17ACA96A2FBBF00A000A3B +:1038A8005C7AF01F0002DA0A80007380D421581C69 +:1038B800C391580BC0311697C1E81788F80818004B +:1038C800C3411797C33817893018F0091800C13158 +:1038D80017993EE8F0091800C0E1497890093008C6 +:1038E800F0091900C08449581ADB495C1AD8F01F3E +:1038F80000152FED49089088EDB80002C08148F8FE +:103908001AD7491C1AD8F01F000F2FED3038F007CE +:103918001800E08B000848D8F007033CF01F000CA3 +:10392800DA2AE06C00FFD82230072FF8100BCCC140 +:10393800CE2B0000000016A2800379F880037CBC1F +:10394800800094C480037DA800007B088000599CF7 +:10395800D421202D4B981896169414971295908878 +:10396800EDB80002C1314B694B685805F2081700E1 +:10397800201D1AD816985C781ADA1AD84B281ADC3F +:103988004B2C1AD8F01F00322FAD3038F007180032 +:10399800E0880005E06C00FFC8584AE8F0070338E3 +:1039A80050085808C1504A59920A3009F20A1900B9 +:1039B800C0841AD84A484A8C1AD8F01F00252FED1F +:1039C800400CF01F002630094A28F00709391A9CD4 +:1039D800E06A04005016300B1ADC14981AD75C748D +:1039E8001ADB16991AD5089C1ADA169A1AD6F01FF5 +:1039F800001C49282FAD580CC3819088EDB80002EF +:103A0800C1511AD71AD41AD6403850461AD848D8AD +:103A180048B95805F2051700F005171048A81AD537 +:103A2800490C1AD8F01F000A2FAD0E9C400BF01F4E +:103A3800000E301CC3780000000016A280037DC869 +:103A480080037DC4800379C480037DCC800094C446 +:103A580000007B0880037DF88000599C80005D642D +:103A680080037E2480002A689088EDB80002C15146 +:103A78001AD71AD41AD6403850461AD848B848C95E +:103A88005805F2051700F005171048A81AD548ACD4 +:103A98001AD8F01F000A2FAD300948983FFCF007EC +:103AA80009392FEDD822000080037DC480037DC82A +:103AB800800379C480037E50800094C400007B0892 +:103AC800D431584CE081008E580BC2A01785F805F8 +:103AD8001800E081008A179817A7B167EFE81187E7 +:103AE80017B8EFE8108717C8F1E71007C7E80B8980 +:103AF8003018F0091800C7E10B993EE8F0091800E2 +:103B0800C7914C2890093008F0091900C7344C08AF +:103B18001AD54C0C1AD8F01F00402FEDC6B81697CE +:103B28003006C1F80B960BA8F1E610865C86C688AD +:103B380007893018F0091800C72107993EE8F009ED +:103B48001800C6D14B1890093008F0091900C6743E +:103B58004AF81AD34AFC1AD8F01F002F2FEDC5F8DF +:103B68003005C1B80795C61809893018F00918003A +:103B7800C61109993EE8F0091800C5C14A389009EC +:103B88003008F0091900C5644A181AD44A1C1AD812 +:103B9800F01F00212FEDC4E83003C1A80993C50820 +:103BA80009893018F0091800C13109993EE8F0096F +:103BB8001800C0E1495890093008F0091900C0847C +:103BC80049381AD4493C1AD8F01F00132FED06992A +:103BD8000A9AF7D6C0100E9CF01F0010581CC0306F +:103BE800E06C00FFD83230072FF5F6050005C80154 +:103BF800C98B0B833028F0031800C95030062FF307 +:103C0800EA030003C961CADB000016A280037A98A0 +:103C180080037CBC800094C4800039580784301825 +:103C2800F0041800CA0030052FF4E6040004C9D1D6 +:103C3800CB4B09883019F2081800CB1030032FF845 +:103C48001004CAF1CC5B0000D421202D3038169620 +:103C58001494F00B1800E08B0072300750074BA843 +:103C68001188EE081800C0B04B889008EE081900BB +:103C7800C654201D4B684B7C1AD8C0F84B69138971 +:103C8800F0091800C0E14B589008EE081900C56407 +:103C9800201D4AF84B2C1AD8F01F00322FEDC4E82B +:103CA8001A9AE0690400501712981ADAEBDCC0106F +:103CB8001ADB0E9A1AD70E9B1AD40A9C1AD93019F5 +:103CC8001AD7F01F00294A182FAD580CC1B1908897 +:103CD800EDB80002C1114A584A595804F2041700B5 +:103CE800F004171049A81AD64A2C1AD51AD41AD88B +:103CF800F01F001C2FCD0C9C400BF01F001F301C28 +:103D0800C1F89008EE081900C11449884989580477 +:103D1800F2041700F004171048D81AD6497C1AD5AF +:103D28001AD41AD8F01F000F2FCDA17630092FF61C +:103D380049383FFCF0060929C038E06C00FF2FED38 +:103D4800D822000000007B07000016A280037A102A +:103D580080037E80000016AB000016A680037EA0BC +:103D6800800094C480005D6480037DC480037DC8A6 +:103D780080037EB880002A6880037EDC00007B0810 +:103D8800D421583CC661580BC24017843028F0042F +:103D98001800C621179717A8F1E710875C87C5D8C0 +:103DA80009893018F0091800C5D109993EE8F009C9 +:103DB8001800C5814B6890093008F0091900C5241E +:103DC8004B481AD44B4C1AD8F01F00342FEDC4A816 +:103DD80016973006C1B80996C4B80B893018F0098F +:103DE8001800C4B10B993EE8F0091800C4614A886C +:103DF80090093008F0091900C4044A681AD54A6CB9 +:103E08001AD8F01F00262FEDC3883004C1A80B94E0 +:103E1800C3A80B893018F0091800C1310B993EE886 +:103E2800F0091800C0E149A890093008F009190004 +:103E3800C08449881AD5498C1AD8F01F00182FED6C +:103E48000E9C089A0C9B5C7CF01F0015581CC03017 +:103E5800E06C00FFD82230072FF4F6040004CA11E2 +:103E6800CB9B09853018F0051800CB6030062FF57C +:103E7800E8050005CB31CCAB0B883019F2081800E7 +:103E8800CC7030042FF81005CC51CDBB000016A221 +:103E98008003791480037CBC800094C480003C506B +:103EA800D431204D1495740A501A18961788301971 +:103EB800F2081800C771F6C7FFFE1794C1700F8982 +:103EC800F0091800C1310F993EE8F0091800C0E167 +:103ED8004B7890093008F0091900C0844B581AD75C +:103EE8004B5C1AD8F01F00352FED4B189088EDB8B1 +:103EF8000002C0A14AF81AD44B1C1AD61AD51AD8EF +:103F0800F01F002E2FCD3028F0041800E08B004B56 +:103F18003006304030114A624A63C3E80F88E0082F +:103F28001800C4010F990FA8B168F1E911880FB9F9 +:103F3800F1E910880FC92FB7F3E810085807C170C6 +:103F48000F89E2091800C1310F993EEAF4091800F7 +:103F5800C0E18409300AF4091900C0941AD7496CE1 +:103F68001AD35028F01F00152FED400850388489C7 +:103F7800EDB90002C0A11AD84029492C1AD91AD67D +:103F88001AD3F01F000E2FCDF9D6C008FACBFFF4D4 +:103F98002FF6F01F000D0836CC253008301CAAC8B3 +:103FA800C038E06C00FF2FCDD8320000000016A208 +:103FB80080037A4C80037CBC800094C480037F0813 +:103FC80080037F308000C19CD431203D3019149487 +:103FD800189674051788F2081800E0810085F6C75E +:103FE800FFFE1792C1700F89F0091800C1310F99AF +:103FF8003EE8F0091800C0E14BD890093008F009F4 +:104008001900C0844BB81AD74BBC1AD8F01F003B14 +:104018002FED4B789088EDB80002C0A14B581AD20A +:104028004B7C1AD61AD41AD8F01F00342FCD30384A +:10403800F0021800E08B005830064AD04AD1FAC383 +:10404800FFF8C4B80F88304AF4081800C4C10F99A3 +:104058000FA8B168F1E911880FB9F1E910880FC903 +:104068002FB7F3E810085807C1800F89301AF409F0 +:104078001800C1310F993EEAF4091800C0E180091F +:10408800300AF4091900C0941AD749BC1AD150282B +:10409800F01F001A2FED400850288089EDB9000262 +:1040A800C0911AD8497C1AD51AD61AD1F01F001314 +:1040B8002FCD5816C0805826C0B0069B0A9CF01F0A +:1040C8000012C0A8069B0A9CF01F0010C058069B4F +:1040D8000A9CF01F000F2FF60436CB553008301C11 +:1040E800A8C8C038E06C00FF2FDDD832000016A247 +:1040F800800378F080037CBC800094C480037F0830 +:1041080080037F308000CBC88000CA748000CA92C8 +:10411800D421FACD00884C6816979088EDB8000233 +:10412800C0B14C48201D1ADC1AD84C384C3C1AD85F +:10413800F01F00432FCD344A300BFAC6FFFC0C9C0D +:10414800F01F0040306AE06B00FFFACCFFDBF01F85 +:10415800003D0F8A31F8F00A1800E08B008930889A +:10416800EECBFFFFFB68003C0C9CF01F00370F896B +:10417800FB6900244AE89088EDB80002C0A14AE82B +:10418800201D4B2C1AD91AD61AD8F01F002D2FCD66 +:104198000F882FF8FAC6FFB810070C9C0E9B173A29 +:1041A800F01F002BFAC9FF780F88F20800083009C1 +:1041B800F169FFC049E89088EDB80002C0B10F88E6 +:1041C800201D1AD849C81AD64A2C1AD8F01F001C24 +:1041D8002FCD0F8A3018FAC7FFFC3089FACBFFB809 +:1041E8000E9CF01F001D581CC0C0491890093008CB +:1041F800F0091900C3C44908498C1AD81AD8C0E86C +:10420800497CF01F000F0E9C300BF01F001618970A +:10421800581CC080201D1ADC493CF01F00092FEDF6 +:10422800C268492CF01F00060E9CC238000016A276 +:1042380080037A248003787080037F50800094C4C0 +:104248008002E8BC8002E73680037CB08002EE0C76 +:1042580080037F648001908480037F7880037FA03F +:10426800800099A880037FB880037FC0E06C00FFBE +:104278002DEDD822D42120AD4A461697178A31F859 +:10428800F00A1800E08B002FFAC5FFF92FFB0A9CF3 +:10429800F01F001F0F88FAC9FFD8FB680027100914 +:1042A8003008F368FFDF8C88EDB80002C0814998B8 +:1042B8001AD5499C1AD8F01F00192FED300BFACCEB +:1042C800FFF9F01F00171897581CC1B048F890095B +:1042D8003008F0091900C1541ADC48E8491C1AD8FA +:1042E800C0D88C093008F0091900C0353FF7C098CC +:1042F800201D488848CC1AD83FF7F01F00082FED3A +:104308000E9C2F6DD8220000000016A28002E7360E +:10431800800378E080037B18800094C4800099A80B +:1043280080037D5480037FC4D431216D4D281697B6 +:104338009088EDB80002C0B14D08201D1ADC1AD8CB +:104348004CF84D0C1AD8F01F00502FCD321AFAC66F +:10435800FFFD300B0C9CF01F004D0F8A31F8F00A5E +:104368001800E08B0085EECBFFFF0C9CF01F004887 +:104378000F88FB6800234C089088EDB80002C081C4 +:104388004BF81AD64C3C1AD8F01F003F2FED0F8679 +:104398002FF6EE060006FAC7FFAC0C9B0E9C173AE8 +:1043A800F01F003D0D88FAC9FFA8F20800080E9C0E +:1043B8003003F163FFFCF01F00393038EFDCC00830 +:1043C8000D89F00718005FB53018F00918005F185C +:1043D80010450A94E6051800C4A1ECCBFFFDFAC30A +:1043E800FFDC2FE6069C0D8AF01F002B0D88FAC90A +:1043F800FFA8F2080008069BF165FFCCFAC5FFC0CC +:104408000A9CF01F002730D81896F00C18005F1986 +:104418003058F00C18005F18F3E80008E808180096 +:10442800C261FAC4FFB2306AE06B00FF089CF01F5B +:1044380000170C9B08990A9A0E9CF01F001A0E9CF4 +:10444800F01F0019300BFACCFFFDF01F0018581CA4 +:10445800C100489890093008F0091900C0844888BC +:104468001ADC493C1AD8F01F00082FEDE06C00FF59 +:104478002EADD832000016A280037888800379AC6C +:1044880080037F50800094C48002E8BC8002E73635 +:1044980080037FE48002EE0C8002DC2C80009868A8 +:1044A8008001927080019258800099A880037D5401 +:1044B800D401319CF01F0010E06B00EFFE7C280057 +:1044C800F01F000E581CC060FE7C2800F01F000C76 +:1044D800CFC0319CF01F000B48B890093008F00994 +:1044E8001900C0844898201D489C1AD8F01F00095C +:1044F8002FEDD8028000A3008000A7FA8000A7F261 +:104508008000A2E6000016A28003790880037FF0ED +:10451800800094C4D431202D3008FAC7FFF81696CD +:10452800189514930EE81694098B0A9C2FF4F01F23 +:104538000009581CC0B00E9B0A9CF01F0007089881 +:104548000C18E6081900CF13300C2FEDD8320000F4 +:104558008000A7FA8000A816D421202D30081496D0 +:10456800F80C002C129AFAC9FFF812E84A88F00CE5 +:10457800002C169578280C9B0A9C5D184A583049DF +:10458800319C9109F01F00249ABA0C9BFE7C2400F0 +:10459800F01F00221897319CF01F00214A189088BC +:1045A800EDB80002C0414A0CF01F002049D890889D +:1045B800EDB80002C0D149E8201D49EC1AD8F01F17 +:1045C800001B49D80A9C908BF01F001C2FED4958FE +:1045D8009088EDB80002C041499CF01F00144918AA +:1045E8009088EDB80002C0C14918201D491C1AD88E +:1045F800F01F000E9AFB0C9CF01F00102FED9A394B +:1046080049080E9CB0092FEDD8220000000011E0E7 +:10461800000011B88000A3008000451C8000A2E6BD +:10462800000016A080038008800094C480037800EE +:1046380080037C84000011BE80013DB48003800C9F +:10464800000011BCD431202D4BC43048E8C3FFF022 +:10465800BAF81897199616910C90F8C2FFFD2FC456 +:104668003005E21000400988EC081800C4B107883A +:104678003029F2081800C1F10A9C4B08EA05002508 +:10468800029AF00500240E9BE8C5FFF46839F01F74 +:10469800002CC030301CC4E868086A0A049B0FACC0 +:1046A8005D18BAFCE216004030181BF9F009180032 +:1046B800C3C1C3D85800E00A1700F9BA0100E8F8E6 +:1046C800FFFC049B0FAC5D18BAFC30190788F20890 +:1046D8001800C0B10A9C4998EA050025029AF0051D +:1046E80000250E9B6A39C0A83049F2081800C0A1FD +:1046F800029A0E9B0A9CFAC9FFF9F01F0011C170BB +:10470800C1882FF52EC42EC3E0450024CAD148D84D +:1047180090093008F0091900C08448B81AD648BC76 +:104728001AD8F01F000B2FED302CC048304CC02891 +:10473800300C2FEDD8320000000011E080004560F9 +:10474800000016A28003789880038010800094C42B +:10475800D421202D4BD8910C30094BD8118AF20A5C +:104768001800E08000DAB08930085018E1B800007D +:10477800EE180001F5D8C201C020D303FE7824004A +:104788003019706BF7D9D001916B706BF7D9D0C124 +:10479800916B706BF7D9D081916B580AC020D50303 +:1047A8004AC7FACAFFFC6E0B4ABCF01F002C1896C9 +:1047B800C6E04AB8303A6E09910A401B4A98161961 +:1047C800B009E06A03FFF4091900E0880005E06910 +:1047D8000400B0094A064A37EC0B000B4A2C8E8AB3 +:1047E800F01F002230084A2BAC8849FCF01F00213A +:1047F800584CC2204A089088EDB80002C0C149F858 +:10480800201D49FC1AD8F01F001F8E8B496CF01F21 +:10481800001E2FED49889088EDB80002C0D1497874 +:10482800201D497C1AD8F01F00174988490C908B25 +:10483800F01F00152FED4879300893084899B20801 +:1048480048799308C46800000000152C0000151C66 +:10485800000014B0000014B880002D70000011B8DA +:10486800000011BE00000DB88002E736000009B84C +:104878008000464C000016A0800379D880037C8411 +:10488800800094C480013DB4000011BCF01F0024D6 +:104898004A489008EC081900C0A44A3890881AD8E9 +:1048A8004A284A3C1AD8F01F00232FED4A289009BD +:1048B8003008F0091900C0644A084A1C909BF01F90 +:1048C80000214A19300893084A09B20849C9B28830 +:1048D800E06B0120FE7C0D80F01F001DE1B8000098 +:1048E800EE180001F5D8C201C020D303FE782400D9 +:1048F8003019705BF7D9D001915B705BF7D9D0C1E3 +:10490800915B705BF7D9D081915B580AC020D503C1 +:10491800319CF01F00102FEDD8220000800044B811 +:10492800000016A2000014B4800379D88003802CFC +:10493800800094C4000016A6000014B0000014B84B +:1049480080013DB4000011B8000011BE8000A20033 +:104958008000A300D431207D4B6730054B664B782F +:104968001188EA081800EC081710EE0817004B4CDD +:104978001AD8F01F00344B481188EA081800EC07D1 +:1049880017104B2C50074B2230074B23F01F002DDC +:104998000E942FED4B01CBD86A005800E08000B28E +:1049A80080286009201D1AD95028F01F002C602A81 +:1049B8002FFD580AE60A1700E20A171040185C781B +:1049C80060491AD84A681ADC1ADA4A6A5809F40996 +:1049D8001700F00917104A4C1AD91AD01AD61AD744 +:1049E800F01F001860482F8D5808C431E0C9FFBC7B +:1049F800720A580AC0E0744B201D49CC1ADB1ADA37 +:104A08001AD850595048F01F000F2FCD40084019B0 +:104A18002FF82FC95848CED161585808C610704988 +:104A2800493C1AD91AD8F01F00072FEDC598000085 +:104A3800800380548003805C000016AB8003806094 +:104A4800800094C400007B078003807400007B080A +:104A580080037BE480037BDC800096A880037DC410 +:104A680080037DC880038088800380B8800380D05D +:104A780061E85808C350F11900127008201D1AD8AF +:104A8800507850395028F01F002761EA2FFDF53B78 +:104A9800001040291AD940281AD81ADC4A2C1ADBE7 +:104AA8001ADA50B8F01F0021FACAFFE00C9B5084B4 +:104AB800FB5400240E9CF01F001E2FBD40305050A8 +:104AC8001AD0FB1800145028F01F00162FFD4018AC +:104AD8001AD81AD01ADC497CF01F00142FCD0E9C6E +:104AE800F01F001549594968580CF2081710201D85 +:104AF800494C1AD8F01F000D493CF01F000C2FED4F +:104B08002FF62FC55826FE91FF492FF75847C0505A +:104B1800E40700353006C41BF01F000C2FADD83257 +:104B2800800096A8800380E8800094C4800021C893 +:104B380080038114800070788003812C8003812891 +:104B480080038130800381408000D680D431204D9D +:104B58004BE812911896169711895809C1A119881E +:104B6800B6881998EA18FFFFE818FF80B6C9B69802 +:104B7800B6A93EE8B6B83048A2084B589088EDB8B8 +:104B88000002E08100E7201D4B284B3C1AD8C228C0 +:104B9800FACCFFF4F01F0031403366105800C1E131 +:104BA8000D88AE880D98EA18FFFFE818FF80AEA0C0 +:104BB800AE9830093EE8AEC9AEB83048A2084A48B7 +:104BC8009088EDB80002E08100C5201D4A184A4CC3 +:104BD8001AD8F01F00242FEDCBC858B0F9B0020A3C +:104BE80030044A12C0786408F004032C2FF4F01F34 +:104BF800001F641849C51034CF736A0C3004F01FC5 +:104C0800001B8B14661B580BC460A36B301CF01F71 +:104C180000188B0CC3A1497CC1486608F002030B3D +:104C28006A080408501B5008F01F00134008910C34 +:104C3800401B6A082FF4F002030C580CC20148FC10 +:104C4800F01F0008C2880000000016AA000016A283 +:104C58008003783C8003816080018F048003817C1D +:104C6800800094C4000015208002E28C8002DC3CA5 +:104C7800800381988002E2A4800381C0344AF01F37 +:104C880000376A182FF88B18E8021502344C66189A +:104C98001034CC430D88AE880D98EA18FFFFE81849 +:104CA800FF803005AE98AEA030364AD20A984AD96D +:104CB8000E93640AEA0B1502F40B030AF537002079 +:104CC800F4070B08ECCCFFFF2FF7E60C000C5C5741 +:104CD800300AE6060B07C0886404E80B0304E80AF8 +:104CE80007042FFA18C40E9EEE0A1900CF630E9A15 +:104CF8002FFAF4060006928A5C56EDBA0002C1D17A +:104D0800640A202DF40B0304503950281A9C306A89 +:104D1800E8CBFFDFF01F001168CA1ADAE93A003859 +:104D28001ADA491A1AD7491C1AD41AD51ADAF01FEE +:104D380000102F8D400840192FF50035CBB53EE8FF +:104D4800E6060B08069730080C07AE982FF6A20661 +:104D5800302C2FCDD83200008002E7360000152015 +:104D6800000016A28003783C800381E4800094C48C +:104D780048781188580CC0215EFF5C68100C300818 +:104D8800F9390015F00918005F1C5EFC00001530A9 +:104D9800D4211897580CC2A04968F129000030089E +:104DA800F2CA0004F00900065836F5D8E9062FF8CB +:104DB800EE06002C791C163CC17148F89088EDB8B5 +:104DC8000001C0A148D81ADB48DC1AD61AD71AD86D +:104DD800F01F000C2FCDF9D6C00830082F06EE06BC +:104DE80000278F18D8225848CDE1E06C00FFD82260 +:104DF80000001530000016A2800382688003830437 +:104E0800800094C4D42118971695580CC2B04978DC +:104E1800F12900003008F2CB0004F00900065836EA +:104E2800F7D8E9062FF8EE06002A751A580AC03096 +:104E38000A3AC16148E89088EDB80001C0A148D895 +:104E48001AD548DC1AD61AD71AD8F01F000C2FCD5D +:104E5800EE060027F9D6C008EF450044D822584886 +:104E6800CDD1E06C00FFD82200001530000016A25A +:104E780080038CF080038304800094C4D4211897A5 +:104E8800580CC2A049E8F12A00003008F4CC00040C +:104E9800F00A00065836F9D8E9062FF8EE06002978 +:104EA80073195809C170580BC0F049689088EDB85B +:104EB8000001C0A149481AD9494C1AD61AD71AD89C +:104EC800F01F00132FCDEE06002748D8B0866F1CC0 +:104ED800D8225848CDE1580BC10048A8900930089D +:104EE800F0091900C0A448881AD748AC1AD8F01F8E +:104EF8000008300C2FEDD822D82A00000000153009 +:104F0800000016A280038CB880038304800094C438 +:104F180080038324D4214CB816951188189730063D +:104F2800EC081800E08000B6300BF01F004718941A +:104F38005807E0800097580C5F19EC0518005F08C7 +:104F4800F3E81008EC081800E080008C4BF8908813 +:104F5800EDB80002C3314BE811894BE89088EDB8F1 +:104F68000001C2C15C69EE09002871185808C041E7 +:104F7800109E1096C098EE09000AF53E0015F2CA78 +:104F8800FFF8EE0A03266F5A201D580AF40C170082 +:104F9800F5FC10045808F00B1700F1FB10041ADE9A +:104FA8001AD61ADC1ADA1ADB1AD84AB81AD74ABC3F +:104FB8001AD91AD8F01F002A2F6D5805C3D068488F +:104FC80058485F1958085F181268C3304A08118991 +:104FD8004A089088EDB80001C2C15C69EE09002852 +:104FE80071185808C04110951096C098EE09000A2B +:104FF800F5350015F2CAFFF8EE0A03266F5A201D90 +:10500800580AF40C1700F5FC10045808F00B1700A8 +:10501800F1FB10041AD51AD61ADC1ADA1ADB1AD8D8 +:1050280048D81AD748DC1AD91AD8F01F000D2F6DA6 +:10503800E93C0013D8226F58F13C0013D822000035 +:10504800000016AB80004E84000016A80000153042 +:10505800000016A28003828C80038348800094C4D9 +:1050680048D890093008F0091900C1345807EE08EB +:105078001700EE041700EFF810151AD848781AD45C +:10508800487C1AD71AD8F01F0007300C2FCDD82229 +:10509800D82A0000000016A88003828C8003838C25 +:1050A800800094C4D421580CC25049D8F12900007A +:1050B8003008F2CA0004F00900075837F5D8E907A4 +:1050C8002FF8F807002E7D1E163EC12149589088FA +:1050D800EDB80001C0A149481ADB1AD71ADC493CCF +:1050E8001AD8F01F00132FCD0E9C5C5CD8225848AC +:1050F800CE31490890093008F0091900C045E06C24 +:1051080000FFD8224888201D1ADB1ADC48AC1AD8C0 +:10511800F01F0007E06C00FF2FCDD82200001530EB +:10512800000016A6800382BC80038304800094C418 +:10513800000016A2800383C0D421580C5F18580BB6 +:105148005F1918961695F3E800081494C590580A44 +:10515800C5704AC89088EDB80001C0C114985C7841 +:10516800201D1AD84A881ADB4A8C1AD8F01F002842 +:105178002FCD4A889088EDB80001C0D14A28201D5B +:105188004A5C1AD8F01F0022089B0A9C5C7BF01F1F +:1051980000232FED300A5C74149C089BF01F00203C +:1051A8001897C0E149789008F8081900C29449682E +:1051B8001AD649CC1AD8F01F00162FEDC1C8089A84 +:1051C8000A9B781CF01F00180E9B6DECF01F00174F +:1051D8005C5CC12048B890093008F0091900C08407 +:1051E80048981AD6492C1AD8F01F00092FED0E9CA2 +:1051F800F01F0010DC2A0E9CF01F000EDA2ADC2AB1 +:10520800000016A280038CE4800383E8800094C425 +:10521800000016A080037C8480013DB48000D31870 +:10522800800383FC8002E7368001153880038428D8 +:105238008000D13CD421149518971696580CC0417B +:10524800E06C00F6D822F01F00163FF8E9DCC00831 +:10525800F0041800C041E06C00FFD822491890887B +:10526800EDB80001C0E16C48201D1AD848E85C651B +:1052780048EC1AD51AD61AD71AD8F01F000D2FAD38 +:105288006C4858485F0948B8B0893008EE040004F3 +:10529800E9680068F01F00088F7CD82A800050ACAD +:1052A800000016A280038D1080038450800094C4EF +:1052B80000007B0780009504D43118971695F01FDD +:1052C80000353FF8EDDCC008F0061800C5E0EE0632 +:1052D80000083009F1690015ECC8FFF8EE0803244E +:1052E8005804C5304AC89088EDB80001C0A14AB832 +:1052F800201D4ABC1AD41AD41AD8F01F002A2FCD60 +:10530800EB1800726EF91238F20817B00838F0047A +:1053180017804A589088EDB80001C051F01F00234B +:105328004A38910CECC8FFEA3019EE08032B089AAA +:105338000A9C5C7AF01F001FE7DCC008C19049A8EE +:105348009088EDB80001C0F16A48201DF3D3B00879 +:105358001AD91AD41AD849181AD5497C1AD8F01F5C +:1053680000112FAD0C073008EF680015C10830197F +:10537800ECC8FFF8EE060006ED690015EE080329F3 +:105388000819EE080929C038E06300FF069CD832E6 +:10539800800050AC000016A680038C7880038474CB +:1053A800800094C4000016A2800095040000153403 +:1053B800800109C08003848CD43116941493189703 +:1053C800580CC1014AB89008F8081900E08400D3C5 +:1053D8004A98201D4A9C1AD8F01F00293FFC2FED3F +:1053E800D832300BF01F0027189B18960E9CF01F20 +:1053F80000263FF8EBDCC008F0051800E08000BB91 +:105408004A289088EDB80001C0E1F1D3C010201DF2 +:105418001AD849981AD449EC1AD61AD71AD8F01FAC +:1054280000182FAD49B89088EDB80001C0D14928BF +:10543800201D499C1AD8F01F0012F7D3C010089CF1 +:10544800F01F00162FED49189088EDB80001C4B17F +:105458004938118948789088EDB80001C4415C69E1 +:10546800EE09002871185808C1C11092109EC21880 +:10547800000016A280038D20800384C0800094C49D +:1054880080004E84800050AC000016A6800384D8AB +:10549800000016A080037C8480013DB40000153014 +:1054A800EE09000AF5320015F2CAFFF8EE0A032EDB +:1054B8006F5A201D580AF40C1700F5FC1004580800 +:1054C800F00B1700F1FB10041AD21ADE1ADC1ADAF4 +:1054D8001ADB1AD84A881AD74A8C1AD91AD8F01F50 +:1054E80000282F6D5806C46058045F183009F2036D +:1054F80019005F1AF5E80008F2081800C3B0EAC8F6 +:10550800FFEAEE08032C580CC3506C4858785F0B20 +:1055180058485F0AF7EA100AF20A1800C0515828DA +:10552800C0305838C2715C73089B069AF01F00158A +:10553800EAC9FFEA300AEE090328F0030B0A4928F2 +:105548009088EDB80001C0A1EE0903281AD848A830 +:1055580048EC1AD8F01F000A2FED48DB0C9C2F8569 +:10556800EE050923F01F000B0C9B0E9CF01F000A90 +:10557800DA3ADC3A80038D2080038348800094C4A3 +:105588008002E736000016A6800384FC800055A040 +:105598008000D662800052C0D431149518971696B0 +:1055A800580CC041E06C00F6D832F01F001D3FF8DF +:1055B800E9DCC008F0041800C041E06C00FFD832F4 +:1055C8003009EE040008F16900683019F169001526 +:1055D80049489088EDB80001C171E8C8FFF8EE08A5 +:1055E8000323F01F00114918201D1AD37008F8086A +:1055F80001081AD848E85C7548EC1AD51AD61AD8A2 +:10560800F01F000D2FAD2F84EE04032C580CC06042 +:105618000C9B0E9CF01F0009300CD832800050AC57 +:10562800000016A2800095040000153480038D50F8 +:1056380080038508800094C4800052C0D421189744 +:10564800580CC1C0F01F000E18965BFCC060EF3B01 +:10565800000B5C5CF01F000B48B89088EDB80001A7 +:10566800C0A148A8201D48AC1AD61AD71AD8F01FCE +:1056780000092FCD30094888B089D82280002044FD +:1056880080002068000016A280038D3C80038538C6 +:10569800800094C400007B07D4314898189711897A +:1056A80048889088EDB80001C3015C69F8090028B2 +:1056B80071185808C08110951096C0D80000153090 +:1056C800000016A2F809000AF5350015F2CAFFF81D +:1056D800F80A03266F5A201D580AF40C1700F5FC27 +:1056E80010045808F00B1700F1FB10041AD51AD64D +:1056F8001ADC1ADA1ADB1AD84C281AD74C2C1AD901 +:105708001AD8F01F00422F6D0E9C3005F01F004084 +:10571800EEC6FFBC0A924BF34BA45C5CF01F003E44 +:105728006C08300B2FF5109C5808C1D0F01F003BB7 +:105738006C0C300BF01F003A6C0C300BF01F00396A +:105748006C0C300BF01F00388688EDB80001C0B132 +:10575800201D1AD26C0870484B4C1AD81AD4F01F66 +:10576800002B2FCD2FC65845CDC16F5C580CC1D02A +:10577800300BF01F002A300B6F5CF01F002D6F5CA0 +:10578800F01F002C4A385C5C9088EDB80001C0D14D +:10579800201D5C6C1ADC6F5870481AD849984A6CFE +:1057A8001AD8F01F001A2FCD6FEC580CC060F01FEC +:1057B80000236FECF01F00224A28F1260000495808 +:1057C8009088EDB80001C0E1ECC8FFEAEE080328B4 +:1057D800201D1AD848B81AD649BC1AD8F01F000B91 +:1057E8002FCD2EA6EE06032C580CC060F01F001714 +:1057F8003008EE0609280E9CF01F0014D83200006D +:1058080080038CC880038348800094C480002044AF +:10581800000016A280006F288000D6588000D6624B +:105828008000D65C8000D668800385608000D66ED4 +:105838008000E50480038588800111C88001122852 +:1058480000001530800385B08002E28CD4211897BF +:10585800580CE080007EF01F00413FF8EDDCC008E6 +:10586800F0061800C750EE0600287114089CF01FB7 +:10587800003CEBDCC008C0D10A9B089CF01F003933 +:105888000A9B089CF01F00380A9B089CF01F0037F1 +:105898004B789088EDB80001C0D1F1D5B0081AD87E +:1058A80068481AD84B381AD44B3C1AD8F01F003322 +:1058B8002FCD4AF43FF8F0051800C1718809300867 +:1058C800F0091900C0D4EE0600287118201D1AD856 +:1058D8004AB81AD64ABC1AD8F01F00282FCD0C0790 +:1058E8003018EF68006CC368EE0600083009F169EB +:1058F800006CEE0600280E9C711BF01F00238888A0 +:10590800EDB80001C0E1ECC8FFEAEE080328201D4D +:105918001AD849B81AD649DC1AD8F01F00182FCD62 +:105928002EA6EE06032C580CC060F01F0019300894 +:10593800EE06092848E89088EDB80001C0B149088A +:10594800201D494C1AD8F01F000D2FEDC038E06516 +:1059580000FF0A9CD8220000800050AC8000E504BB +:105968008000D6588000D6628000D65C000016A25F +:1059780080038D2C800385CC800094C480038CD850 +:10598800800385F880004D98800385B08002E28C02 +:1059980080038624D4211897580CC0E14BE890085E +:1059A800F8081900C7744BD8201D4BDC1AD8F01F13 +:1059B800003D2FEDD82278264BB85806C121F12595 +:1059C8000000F01F003A0E9CEF34000BF01F003867 +:1059D800089B5C5CF01F00370A07EF660068D82256 +:1059E80011894AD89088EDB80001C2C15C69F809EC +:1059F800002871185808C04110951096C098F809E9 +:105A0800000AF5350015F2CAFFF8F80A03266F5A9E +:105A1800201D580AF40C1700F5FC10045808F00B68 +:105A28001700F1FB10041AD51AD61ADC1ADA1ADB99 +:105A38001AD849A81AD74A0C1AD91AD8F01F001927 +:105A48002F6D4998F1260000ECC5FFF0EE05002502 +:105A58006A1C580CC1F078485898C1C05808C1A0B1 +:105A6800F01F001648C85C5C9088EDB80001C0C102 +:105A7800201D5C6C1ADC6A181AD84888490C1AD898 +:105A8800F01F00082FCDEE0600260E9C6D1BF01FA0 +:105A9800000DD822000016A2800382988003864455 +:105AA800800094C400001530800056A08000204477 +:105AB800800020688003834880010CEC8003865CAA +:105AC80080005854D4214B0818979009169630082E +:105AD800F0091900C0F44AD8F12800001AD8F1DBFF +:105AE800B0081AD84AA81ADC4AAC1AD8F01F002AFB +:105AF8002FCD4AA811893008F0091800C0414A8CF6 +:105B0800F01F00253FB8F0061800C3C15807C110A0 +:105B180049E830091188F2081800C0B53039F20890 +:105B28001800E08900075C68EE080028711BC0288F +:105B3800300B0E9CF01F001B49389088EDB800010F +:105B4800C1114928F1280000201DF0C9FFEAEE091B +:105B580003291AD91AD848E8493C1AD8F01F000E68 +:105B68002FCD48A6ED2800002EA8EE08032C580CCF +:105B7800C090F01F000EED28000030092EA8EE0896 +:105B88000929D822000016A200001530800382A837 +:105B980080038680800094C4000016AB800386B41E +:105BA80080004D98800385B08002E28CD42118973C +:105BB8001696580CC4E04A8890093008F009190074 +:105BC800C0C4F1DBB0081ADC1AD84A481ADC4A4CBF +:105BD8001AD8F01F00242FCD4A3811893008F0094F +:105BE8001800C0414A1CF01F001F3FB8F0061800FB +:105BF800C301499890093008F0091900C084497810 +:105C08001AD749BC1AD8F01F00172FED0E9CF01FA9 +:105C180000194998F126000048F89088EDB800016D +:105C2800C0E1ECC8FFEAEE080328201D1AD848B8DE +:105C38001AD6492C1AD8F01F000B2FCD2EA6EE0627 +:105C4800032C580CC060F01F000E3008EE0609281F +:105C5800D8220000000016A2800382D0800386C8E4 +:105C6800800094C4000016AB800386B4800386F8D5 +:105C78008000564400001530800385B08002E28C15 +:105C8800D4311897149678CC94CAF80A000A8FCAA7 +:105C98001093169512946E385808C1504A5CF01F3C +:105CA8000026EF18001A3509F0090D083008F00928 +:105CB8001900C0414A1CF01F0020EF08001A2FF8F5 +:105CC800EF58001A49E89088EDB80001C171202DFD +:105CD800304A1A9C089BF01F001BF01F001BEF386E +:105CE8000014F3D3C01050091ADC1AD849781AD610 +:105CF800497C1AD8F01F00102FAD0A9AEF3B001408 +:105D08000C9CF01F001409890998B168F1E9118801 +:105D180009A9F1E9108809BBEF3C0014F5D3C010BC +:105D2800104BF01F000D0C9CF01F000CD832000027 +:105D380080037FB4800094C4800384D4000016A23A +:105D48008002E736800096A88003827C800387184B +:105D580080007130800020088000D13CD431204D73 +:105D6800502C503BFAC4FFCC10916800681268238D +:105D780068386846129568545819E088000E4B58E0 +:105D880090093008F0091900E08402B0201D4B2862 +:105D98004B2C1AD8C2F85801C0C14AE89008E2084A +:105DA8001900E08402A3201D4AB84ADC1AD8C22888 +:105DB8005802C0C14A789008E4081900E0840296A5 +:105DC800201D4A584A7C1AD8C158501A500837CB57 +:105DD800301CF01F0025401A18974008C10149D807 +:105DE8009008F8081900E0840281201D49A849FCA0 +:105DF8001AD8F01F001F2FEDE08F0278402999383C +:105E0800B829300840395C729900B831992599DA77 +:105E180099E999F29943F9480050F9480044F9483A +:105E28000048F948004C5803E080008C3058F95875 +:105E38000074F01F0010EF4C00784865580CC1D171 +:105E48008A08F8081900E084020C1AD748A8C8582C +:105E5800000016A280038CA880038744800387640F +:105E6800800387848002DC3C800387A8800094C478 +:105E780080011200800382F88A88EDB80001C131E0 +:105E88006E08201D8EA51AD8F01F00366FE8500541 +:105E98001ADC1AD84B481AD84B484B5C1AD8F01F52 +:105EA80000352FAD6E258EAA6FEC5805C1210E9BCB +:105EB800F01F00315C5CC2504B089008EA081900DA +:105EC800E08401CF1AD74A984ADC1AD8E08F0175C6 +:105ED8004ACBF01F002DF5DCC008C0E04A789009D5 +:105EE8003008F0091900E08401BC201D5C6A49F8FB +:105EF8001ADA1AD7C499EF3C0014149BF01F002338 +:105F08006FEC0E9A4A2BF01F002349C8908CE21CB4 +:105F18000002E08001A76FE8F11900141AD970197E +:105F28001AD9F11900121AD970081AD848E81AD8DB +:105F380048E8499C1AD8F01F000F2FADE08F018F59 +:105F4800F01F00161892C2F148C89008F808190006 +:105F5800E08401871AD749281AD8492CC2D90000E9 +:105F6800800096A88003825C800382F88003880CF6 +:105F7800800094C480011320000016A280038824A6 +:105F88008003B409800112608000200880005C88CA +:105F9800800111F8800388848000E34080038C6CC2 +:105FA800800387E04B880E9BB083F01F0038EF63B7 +:105FB800006FEF63006CEF63006DEF63006E6E2897 +:105FC8004B355808E08100BD049B0E9CF01F003142 +:105FD800E7DCB0086EFCF01F0030E6C8FFEAEE0808 +:105FE800092C8A88EDB80001C0A14AC8201D1ADC16 +:105FF8004ABC1AD31AD8F01F002B2FCD2EA34A451E +:10600800EE0303285808C0B18A09F0091900E08492 +:1060180001281AD74A184A4C1AD8CCE84A3B049C9B +:10602800F01F00234A3B049CF01F00234A3B049CBA +:10603800F01F0023304A4A3B049CF01F00234A38D3 +:106048003009B0898A88EDB80001C0C1EE03032881 +:10605800201D1AD849181AD249DC1AD8F01F001185 +:106068002FCD4898118948A89088EDB80001C5310E +:106078005C69EE09002871185808C2B11093109590 +:10608800C3080000000015308000D658000016A292 +:1060980080004E0C8002E2A480038C6C800388A8E8 +:1060A800800094C4800388C480005BB48000D668F4 +:1060B800800069888000D65C800055A08000D66288 +:1060C800800067B48000D67200007B07800388F4E4 +:1060D800EE09000AF5330015F2CAFFF8EE0A0325A7 +:1060E800201D5808F00B1700F1FB10046F5A580ACE +:1060F800F40C1700F5FC10041AD31AD51ADC1ADAB6 +:106108001ADB1AD84B681AD74B6C1AD91AD8F01F51 +:1061180000362F6D049C4B598EAA0E9BF01F00343D +:106128005C5CE080009F4B3890093008F00919004A +:10613800E08400971AD74AA84AFC1AD8C3D88A8894 +:10614800EDB80001C0F1301B0E9CF01F002C6F58F9 +:106158001ADC1AD84A281AD74A9C1AD8F01F0022E3 +:106168002FCD8EAA4A7B049CF01F00275C5CC120BF +:106178004A0890093008F0091900C724201D5C6CF2 +:1061880049781ADC1AD71AD84A0CF01F00172FCDF5 +:10619800C678049CE06B00FFF01F001DEF4C005414 +:1061A8004945580CC0D18A08F8081900C5941AD76F +:1061B80048B8498C1AD8F01F000C2FEDC5188A88EA +:1061C8004959E21800021389C4505C69EE09002895 +:1061D80071185808C2211095109BC27880038C6CE6 +:1061E80080038348800094C48000523C8000E350C0 +:1061F800000016A28003891080004E84800389382D +:106208008003B4098000D7708003884C8000DC04C8 +:106218008003896400001530EE09000AF535001581 +:10622800F2CAFFF8EE0A032B7843201D5808F00A3B +:106238001700F1FA10041AD51ADB1AD31ADC1ADA85 +:106248001AD84AC81AD74ACC1AD91AD8F01F002B1C +:106258002F6D4ABB6F5CF01F002B300CC0283FFC31 +:106268004A95580CC0E08A093008F0091900C3A4FF +:106278004A68201D4A6C1AD8F01F00202FEDC32849 +:106288008A88EDB80001C2914A284A396E204A31FD +:106298005800F2001700F00017108E226E484A09C5 +:1062A8006EF35808F20117108E355818C0316FEC8C +:1062B800C058301B0E9CF01F001B49481AD05C7256 +:1062C8001AD15C751AD21AD31AD51ADC496C1AD7A6 +:1062D8001AD8F01F000A2F8D8907EF660014300CBA +:1062E800C0580E9CF01F00113FFC2FCDD832000083 +:1062F80080038C6C80038348800094C480006434DD +:106308008000D66E000016A280038CA880038988BE +:1063180080037BDC80037BE480037DC880037DC42D +:1063280080004E84800389A8800056A0D431203D87 +:10633800300730194B38E06504001892169191091E +:10634800E06007D00A9350070E964AF4C22826CC7C +:1063580058ACE08B001F4ADEFC0C032F3016C198A6 +:106368003006C178680CF01F002AE7DCB010C118AD +:1063780030185008C0E8680CF01F0025EBDCB0109E +:10638800C0883017C068680CF01F0021E1DCB0102D +:106398004A0A029B049CF01F00205BFCCD91580622 +:1063A800C161498870080438C0A4E208032BFACCFC +:1063B800FFF8F01F001A402B580BC0A14988201D78 +:1063C800498C1AD8F01F00182FEDC198300B502BAC +:1063D800F1D5C0100C99FAC5FFFC300650161AD535 +:1063E8001AD6402E5C731ADEF9D0C0101AD70C9A50 +:1063F8001AD31ADB0C9BF01F000D2FAD2FDDD83AF6 +:1064080000007AB800007AC0800382208002DC2C69 +:10641800800389E08002E278800098FC0000000C8C +:10642800800389EC800094C480005D64D4211897AF +:106438001696580CC041E06C00F6D8224C1890888B +:10644800EDB80001C0A14C08201D1ADB1ADC4BFC7A +:106458001AD8F01F003F2FCD4BA89088EDB8000147 +:10646800C0F16C481AD8ED1800241AD8ED18001C91 +:106478001AD84B584B7C1AD8F01F00352FCD0C9BDF +:106488000E9CF01F0035EDDCB008ECC8FFEAEE0802 +:1064980003285808C0804B18201D4B1C1AD8F01F21 +:1064A800002C2FED6EFCF01F002FECC8FFEAEE0861 +:1064B800092C4A489088EDB80001C0A14A28201D3F +:1064C8001ADC4A9C1AD61AD8F01F00212FCDECC826 +:1064D800FFEAEE0803285808C10149A99209F00902 +:1064E8001900C08449881AD74A0C1AD8F01F001816 +:1064F8002FEDE06C00FFD8220E9B2F06EE0600263B +:106508006C1CF01F001B49BB6C1CF01F001B49BB17 +:106518006C1CF01F001B6C1C304A49ABF01F001AA2 +:106528000E9CF01F001A583CE08B00075C5C300A98 +:106538000E9BF01F0017F01F00178F7CD82A000051 +:10654800000016A2800382E8800389F0800094C4CA +:1065580080038A1480004E0C80038A3880039DC013 +:106568008002E2A4800388A8800388C48000D658EB +:10657800800069888000D65C80005ACC8000D6688C +:106588008000659C8000D6728000204480002A002C +:1065980080009504D43118971695580CC041E06CCA +:1065A80000F6D832F01F00473FF8EDDCC008F006CF +:1065B8001800C041E06C00FFD832ECC8FFF8EE08C4 +:1065C80003285808EFD6E108F1F91868F7B901FF70 +:1065D800F1F91E68EE0600083049F1380068F20843 +:1065E8001800E088001E4B89920A3009F20A190047 +:1065F800C0A41AD84B581AD74B5C1AD51AD8F01F12 +:1066080000352FCD0C070A9C3006301BEF6600685A +:10661800F01F0031E06C00FBEF66006CD8325805C3 +:10662800C1504AE89088EDB80001C101EAF800A815 +:106638001AD8EAF8009C1AD8EB3800AD1AD84A38AC +:106648004A7C1AD8F01F00232FCDECC8FFF8EE08BB +:1066580003245804C1D049C89088EDB80001C1810D +:10666800EE060008301BF1330068F132006C0E9C16 +:10667800F01F001C4958201D1AD41AD21AD31AD751 +:106688001AD51ADC498C1AD8F01F00122F8D0A9BD4 +:106698000E9CF01F0016EE0600033002E738006C6F +:1066A800E4081800C7100A9CF01F00113FF8E9DC45 +:1066B800C008F0041800C1D13018E768006CC4A8FD +:1066C800800050AC000016A280038C8C80038A4C9A +:1066D800800094C48000E124000016A880038A7C0E +:1066E80080004E8480038AB0800052C08000E50498 +:1066F800EE060028E762006C711B0E9CF01F002359 +:106708004A389088EDB80001C0E1ECC8FFEAEE080D +:106718000328201D1AD849F81AD649FC1AD8F01FA0 +:10672800001F2FCDECC3FFEAEE03032C580CC0600A +:10673800F01F001B3008EE03092849589088EDB86F +:106748000001C0814938201D496C1AD8F01F001378 +:106758002FED48F89088EDB80001C1610E9C301B00 +:106768000C07EF37006CF01F001048A81AD65C64BD +:106778001AD41AD71ADC48DC1AD51AD8F01F000721 +:10678800300C2FADD832D83A80004D98000016A2B0 +:1067980080038C8C800385B0800094C48002E28CD6 +:1067A8008003862480004E8480038AF0D4311897B1 +:1067B8001695580CC041E06C00F6D832F01F003E28 +:1067C8003FF8EDDCC008F0061800C041E06C00FF9F +:1067D800D8324BA89088EDB80001C1A1EE06000898 +:1067E800F1340068F133006C4B58301B11820E9C59 +:1067F800F01F00344B48201D1AD21AD31AD41AD7C6 +:106808001AD51ADC4B1C1AD8F01F00312F8DEE0652 +:1068180000083009F13A006CF20A1800C060F1393A +:1068280000682FF9F1690068EE060008F134006885 +:106838003088F0041800E08800224A68900930087F +:10684800F0091900C104301B0E9CF01F001E49E816 +:10685800201D1AD41AD71ADC49FC1AD51AD8F01FE9 +:10686800001C2FAD30080C070A9CEF680068301B2D +:10687800F01F001AE06C00FBD83249181189300863 +:10688800F0091800C0500A9B0E9CF01F0015EE0678 +:1068980000043008E939006CF0091800C6100A9C99 +:1068A800F01F00103FF8F00C1800C1D13018E9684B +:1068B800006CC3E8800050AC000016A800007B07FD +:1068C80080004E848003824C80038B2C800094C40B +:1068D800000016A280038B6C8000E124800052C067 +:1068E8008000E5040E9CF01F001F49F89088EDB861 +:1068F8000001C0E1ECC8FFEAEE080328201D1AD801 +:1069080049A81AD649AC1AD8F01F001A2FCDECC4E2 +:10691800FFEAEE04032C580CC060F01F0017300883 +:10692800EE040928EE0600083009F169006C48E811 +:106938009088EDB80001C1410E9C301BEE060006A0 +:10694800ED37006CF01F000D48881AD71ADC48CCC8 +:106958001AD51AD8F01F0007300C2FCDD832D83AE4 +:1069680080005644000016A28003824C800385B044 +:10697800800094C48002E28C80004E8480038B984F +:10698800D4311294580A5F1830091497F204180089 +:106998005F0318961695E7E80008F2081800C55036 +:1069A800335CF01F00406CC98EC8F20800088DC81F +:1069B8006C385808C0614BC89088EDB80001C231E6 +:1069C8004BA89088EDB80001C0918EC81AD84B88A2 +:1069D8004B8C1AD8F01F00382FED4B889088EDB8F3 +:1069E8000001C0C14B28201D4B5C1AD8F01F003293 +:1069F8008ECB6E1CF01F00332FEDED08001A2FF818 +:106A0800ED58001A0A9AED3B00140E9CF01F002E58 +:106A18004A689088EDB80001C1218EC8201D1AD897 +:106A28001ADCED38001430091AD91AD71AD51AD831 +:106A380049F84A6C1AD8F01F00202F8D0E9CF01FC1 +:106A48000024335CF01F002358075F081063C160FF +:106A580049689088EDB80001C0C1201D1AD5ED38ED +:106A680000141AD8492849CC1AD8F01F00132FCD82 +:106A78000A9B0C9CF01F0019C1385804C11048B873 +:106A880090093008F0091900C0B44898201D5C64CA +:106A98001AD7493C1AD41AD8F01F00072FCDD83A74 +:106AA8008000A300000016A6000016A280038C98A0 +:106AB80080038BC8800094C4000016A080037C84E7 +:106AC80080013DB48000713080038BD88000D13CB8 +:106AD8008000A2E680038C108000585480038C3C10 +:106AE800D42148C8189716969088EDB80001C0A11F +:106AF8004898201D1ADB1ADC488C1AD8F01F0008A9 +:106B08002FCDF7D6C0100E9CF01F0006D82200002B +:106B1800000016A280038D0480038C50800094C46A +:106B28008000D984D4213007C1B80C9C0E9B2FF665 +:106B3800F01F000D1895C0F078485808C0C1F01F24 +:106B4800000B0A9CEB35000BF01F00090A9B5C5CEC +:106B5800F01F00085846CEA12FF75827C03030063E +:106B6800CE5BD82280002024800056A080002044DC +:106B780080002068D4214978F00C07085808C071B3 +:106B88004959F20C070AF00A1800C1F04929F20C19 +:106B9800070AF4081800C1904909F80C001CF0080D +:106BA8000017A567EE0C0027120748D99289EDB99E +:106BB8000004C0C11AD848B81ADA48BC1AD71AD87B +:106BC800F01F000A2FCDC02830070E9CD8220000E5 +:106BD8000000153C0000153800007B2C000016A6AC +:106BE8008003901080038DE0800094C4D421169710 +:106BF8001496F01F0005C0609828AC087808301C6F +:106C08008F08D82280006B7CD43149B849B91092DA +:106C1800F00C0708F20C070718961AD7498C1AD8EF +:106C2800EC060014F01F001749732FEDA36431E53B +:106C3800EE070018A568E8080008E60800087009CB +:106C48005809C0C090BA90AB1ADB1AD9702848FC12 +:106C58001AD81ADAF01F000B2FCD2FF7E406070811 +:106C68005C57EE051800F9B70000EE081800CE11C1 +:106C7800D8320000000015380000153C80038DF460 +:106C8800800094C400007B2C80038E0CD431201D1E +:106C98004A181896F00C07073005F80C001849F048 +:106CA800A36849F149F231E349F4EE070019A569EF +:106CB800F0090009E0090009720A580AC1D0923B9C +:106CC800922A8289F40B010CE2190010F8050005DC +:106CD8005C855809C1105C7B5C7AF3D5C010201D17 +:106CE800492C1AD91ADB1ADA1AD61AD25068F01FA8 +:106CF80000102FAD40082FF7E80607095C57EE0390 +:106D08001800F9B70000EE091800CD010A9C2FFD04 +:106D1800D83200000000153C00007B2C000016A6AD +:106D280080038DA00000153880038E28800094C44D +:106D3800D421F01F000B48B8EFDCB0109088EDB8F4 +:106D48000004C0A10E985C781AD84878487C1AD8F4 +:106D5800F01F00072FED0E9CD822000080006C94D5 +:106D6800000016A680038D7080038E4C800094C4AA +:106D7800D4214A181897169631D9F20C1800E088D1 +:106D8800000F90093008F0091900C33449B81ADC1B +:106D980049BC1AD8F01F001B2FEDD822F60B001A99 +:106DA8009088F80C0019E2180010A569F20A002969 +:106DB800495AF40903055808C0A04908201D1ADCDF +:106DC800492C1AD51AD8F01F000F2FCD0A9CF01F96 +:106DD80000103008EC060016EE07001748A9A56752 +:106DE800EE060026F20600068D288D08AC28AC3881 +:106DF800D8220000000016A280038DD080038E6880 +:106E0800800094C400007B2C80038E888002E28C72 +:106E1800D4314948F80C00121896F00C0707A36201 +:106E2800491331E44915EE070018A568E40800087D +:106E3800E60803085808C0500E9C0C9BF01F000C75 +:106E48002FF7EA0607085C57EE041800F9B70000A8 +:106E5800EE081800CE914839300CF2060B08D832EB +:106E68000000153C00007B2C0000153880006D7870 +:106E7800D4211897580CC0E14A189008F80819004E +:106E8800C3C44A08201D4A0C1AD8F01F00202FED51 +:106E9800D82249FAF40B070CF8CEFFFFF80C001CB7 +:106EA800A56CF40B0B0E3008F60B0019F809002935 +:106EB800498CF809000993289308B228B23831E9B7 +:106EC800F20E1800C031F40B0B0848D89088EDB8C2 +:106ED8000004C10148E8F00B07081AD848E8F00B8D +:106EE80007081AD848781AD748CC1AD8F01F0007CC +:106EF8002FCD0E9CF01F000AD8220000000016A219 +:106F080080038D8480038E98800094C40000153C13 +:106F180000007B2C0000153880038DE08002E28C95 +:106F2800D42118970E9CF01F0005C060780C0E9BAA +:106F3800F01F0003CF8BD82280006B7C80006E7816 +:106F4800D421496818971696149512949088EDB82C +:106F58000001C0C14928201D1AD91ADA1ADB1ADC27 +:106F6800490C1AD8F01F00102FAD301B0A9CF01FD7 +:106F7800000FC080301B0A9CF01F000C784858088E +:106F8800C0510C9B0E9CF01F000A5804C0500A9B6D +:106F9800089CF01F0008D822000016A280038D600C +:106FA80080038EAC800094C48000202480006AE8AE +:106FB80080006E78D4211897F01F00061898C02119 +:106FC800D8220E9A782C700990ABF01F0003DA2AA9 +:106FD80080006B7C80006F48D42116961494189515 +:106FE800F01F001E1897C021D8229838982B7809CE +:106FF800F6081900C2B2F5D8C0105804C050F20AF9 +:107008000708AC88C068F20A0709AC892FF8B838B5 +:1070180049389088EDB80004C0D10D881AD86E0898 +:107028001AD88EB81AD848F848FC1AD8F01F000F9A +:107038002FCD8E3B8E28F6081900C0710A9A5C7B0A +:107048006E2C6E09F01F000ADA2A0A9A5C7B782CEB +:10705800F01F0007D82A000080006B7C000016A6ED +:1070680080038D9080038ED4800094C480006F4884 +:10707800D4211897F01F00231896C021D8224A2837 +:107088009088EDB80004C0D178081AD898A81AD802 +:107098008CB81AD849D849EC1AD8F01F001E2FCD41 +:1070A8008C398C28F0091900C020DA2A49A8908860 +:1070B800EDB80004C1614998201DF0070709498807 +:1070C8001AD9F00707081AD8F20818005F191AD950 +:1070D8006C081AD848D8493C1AD8F01F000E2FADB2 +:1070E8006C2C6C090E9A8CABF01F000F48C8F00787 +:1070F800070948A8F0070708F00918005F1CD822FC +:1071080080006B7C000016A680038DBC80038EE88F +:10711800800094C4000016A2000015380000153C39 +:1071280080038F0080006F48D43118951697149308 +:10713800580CC0311894CBD8F60B001A4A58F00BEB +:107148000708F0080019A569F20A00294A2AF40973 +:1071580003095809C1604A1A940B300AF40B190044 +:10716800C0A4201D1AD849E81AD949EC1AD8F01F2A +:10717800001E2FCD49780E9BF007070CF01F001B4F +:10718800301B8ACCF01F001A18961894E0800092E1 +:10719800189B30098ACA0A9CF01F00168A485C8C22 +:1071A800F00C1900C2C048D9920A3009F20A190035 +:1071B800C0B45C781AD848A81AD648FC1AD51AD888 +:1071C800F01F00092FCD0C9C3004F01F000CC718CD +:1071D8000000153800007B2C000016A280039004E4 +:1071E80080038F2C800094C480006D788002DC3C82 +:1071F8008000CEC480038F548002E28C4AE9F207F3 +:10720800070AF4CBFFFFF40A001AA56AEE07001874 +:10721800F2070B0BF40800284A8AF4080008300A21 +:107228009123B02C9106B03A31E8F00B1800C03128 +:10723800F2070B0A4A084A29F0070708F207070964 +:10724800F0091800C1C149F9920A3009F20A190077 +:10725800C0A4201D1AD81AD849B849CC1AD8F01F8A +:10726800001C2FCD4948F00707095809F9BA01FF52 +:10727800F3DAE109F9B9001DF0070B0949189088FC +:10728800EDB80004C1618AC848DAF407070A201D6E +:107298000D891ADA488AF407070A1ADA1AD91AD8A5 +:1072A80048981AD648BC1AD71AD8F01F00092F8D4B +:1072B800089CD8320000153800007B2C0000153CD3 +:1072C800000016A28003900480038F90800094C46D +:1072D80080038FBCD431203D1690502A1895F01F9A +:1072E8000021301BE5DCB010F9D2C010F01F001EE1 +:1072F8001896C2C049D8EA050019F0050707A3691E +:10730800189431E849A1189349ABEE070016A56611 +:10731800F2060006F60600066C0B580BC0B0089C77 +:107328008CAA50095018F01F00148CAA4018140495 +:1073380040092FF7E205070A5C57EE081800F9B76D +:107348000000EE0A1800CE110696402A5800E1F611 +:107358001A00580AF5F21C000C9C2FDDD8320000E8 +:1073680080006C948002DC3C0000153C000015385D +:1073780000007B2C8002E736D431303818971693FA +:107388001494F00C1800E088001B48989009300805 +:10739800F0091900C0353005CA2848681ADC3005DC +:1073A8001AD8485CF01F00052FEDC998000016A2F6 +:1073B80080038DB080038FE0800094C4F80C001A1D +:1073C8004C88F00C0708F0080019A569F20A002992 +:1073D8004C5AF40903095809C1604C4A940B300A05 +:1073E800F40B1900C0A4201D1AD84C181AD94C1C2B +:1073F8001AD8F01F00412FCD4BA80E9BF007070CA1 +:10740800F01F003E0892301B5C72049CF01F003C89 +:1074180018961895C640049A069BF01F003AEE0786 +:1074280000184B03E6070702E4020012A562E4080D +:1074380000224AD83001F0020002300B8506A4244D +:10744800A4310E9CF01F0030852CE60707082FF8A2 +:10745800E6070B0831E9F2081800C031E6070B010E +:107468004A084AA9F0070708F2070709F0091800AF +:10747800C1C149E9920A3009F20A1900C0A4201DC5 +:107488001AD81AD849A84A2C1AD8F01F001B2FCD91 +:107498004948F00707095809F9BA01FFF3DAE10981 +:1074A800F9B9001DF0070B0949089088EDB80004E8 +:1074B800C1610D884959F2070709201D1AD9489951 +:1074C800F20707091AD91AD848985C74491C1AD4C3 +:1074D8001AD61AD71AD8F01F00082F8D0A9CD8324E +:1074E8000000153800007B2C000016A280038DB028 +:1074F80080038F2C800094C480006D788002DC3C6F +:107508008002E736800020240000153C80038F901D +:1075180080038FBCD401E06A05A0300B482CF01F13 +:107528000003D80200007B2C8002E8BCD421202D67 +:10753800FE782800501C500B3FF7109E301CC308E3 +:10754800300B7049EDB90001CFD17049EDB9000990 +:10755800CFD140195809C0B01396F2C5FFFE138960 +:107568005015EDE91089F7D9D010C038F7D7D010E9 +:10757800913B7049EDB90000CFD17C2B40095C8B61 +:107588005809C080B29BF7DBC108B28B40092FE9CC +:107598005009F80A1900E0880006202A5C8A580A6F +:1075A800CD01FE78280070482FEDD822580CC06015 +:1075B800FE782800300A7019C058FE78280030FA82 +:1075C8007019F3DAD20491195EFC202D3008E069B5 +:1075D80013885018F8090249C058401A2FF82FFA92 +:1075E800501A1238CFB12FED5EFCD703D401303CCE +:1075F800F01F0005C060303CF01F0004F01F0004BD +:10760800D402D6038000A3708000A38880014014B0 +:10761800D401580CC060300B303CF01F0004D80275 +:10762800303CF01F0003D8028000A31A8000A35C3E +:10763800D401202D3008B888303CF01F0022303C9F +:10764800F01F0021309CF01F001F307CF01F001D30 +:107658003008501840192FF950192FF8E04861A840 +:10766800CFA1309CF01F00193008501840192FF98D +:1076780050192FF8E05886A0CFA1307CF01F0013D6 +:10768800340B300A492CF01F0013FE782800302AEA +:1076980070C9F3DAD108308A91C970C9F3DAD08495 +:1076A800301A91C970C9F3DAD06191C970C9F3DA97 +:1076B800D001303C91C9F01F00082FEDD80A000016 +:1076C8008000A2A88000A2BE8000A2E6800075F417 +:1076D8008000A3A08000A388D42120AD4C68E3B823 +:1076E8000001D5533017FE6810007109F3D7D20294 +:1076F800303AF1490040E06B1B00EA1B00B7FE7C02 +:107708000C00F01F003E310A201D30081ADA0E99CD +:10771800109B308AFE7C0C00F01F003930080E994F +:107728000E9A109BFE7C0C00F01F0036300BFE7C7E +:107738000C00F01F0035FE7C0C00F01F0034300CEC +:107748001ADC18981899189A1ADC189BFE7C0C00F9 +:10775800F01F002F0E9CF01F002F302BFE7C0C001A +:10776800F01F002DF01F002DD503304AFAC7FFD0B7 +:107778004ABB0E9CF01F002B302B0E9CF01F002ADA +:10778800FAC8FFDC4A99722C109B912CE06AF980A8 +:10779800EA1A0337F2E40000FE7C1800F0E5000066 +:1077A800F01F0023308A4A3B0E9CF01F001E310A4E +:1077B800FAC6FFEC300B0C9CF01F001F3018304B42 +:1077C800FB68002149DCF01F00180C9BFE7C280098 +:1077D800F01F001B3009FE7C2800129B129AF01F34 +:1077E80000190E9C0E96304BF01F000F2FCDFAC7D4 +:1077F800FFD8C2D8800376008000A5088000A4B016 +:107808008000A4CE8000A4E68000A4F48000A470C8 +:107818008000A2228000A4FE8000A3D080039038BC +:107828008002E7368000A2808003901C8000AA1C9A +:10783800800390308002E8BC800390288000A66214 +:107848008000A69C0D8C2FE6F01F000F0E36CFB1DE +:10785800FACBFFFCFE7C2800F01F000C3009FE7CF0 +:107868002800129A129BF01F000AFE7C2800F01FC5 +:107878000009302CF01F0008FE7C2800F01F0005CE +:107888002F6DD8228000A2BE8000A6628000A69C30 +:107898008000A7EC8000A2E6D42130A81896F00C4E +:1078A8001800C0C1E067271020175BF7C13030DB34 +:1078B800FE7C1800F01F0008CF81E0672710201712 +:1078C8005BF7C0800C9BFE7C1800F01F0003CF8183 +:1078D800D822DC2A8000A9AED401178A17B91798D4 +:1078E800B168F1EA118817AAF1EA1088F3E81008DC +:1078F8001AD81ADC483CF01F00042FEDD80200000B +:1079080080039064800094C4D421202D4AB811D9F2 +:10791800BAD97009500911C8BAC81A961895169498 +:10792800581CE08900064A6CF01F0026C448761CE3 +:10793800F01F0025201DEFDCC0084A4C1AD7F01FA5 +:1079480000212FED5825C2A0682CF01F001F201D14 +:10795800EDDCC00849EC1AD6F01F001A30182FEDDC +:10796800F0061800C111305A49AB0E9CF01F001ADE +:1079780030AA49AB0E9CF01F00180E9C308A498B28 +:10798800F01F0015C1883028F0061800C141300AE0 +:107998000E9C149BF01F0013C0E83038F007180045 +:1079A800E08B000A300B0E9CF01F000F1A9B306A08 +:1079B800F01F000E2FEDD82A800396B88003909808 +:1079C800800094C48002DC2C800390C4800390D093 +:1079D800800390E480007380800390EC800390F82B +:1079E800800072DC8000202480005140D421189649 +:1079F8001695582CC45176174B3B0E9CF01F00333C +:107A08001896C1014B2CF01F00334B38FE798000CB +:107A1800B0094B28B0064B28B0064B28B006E08FBB +:107A280001C44B1B0E9CF01F0029C1D14AA89088A5 +:107A3800201D4AEC1AD8F01F00274A8890884ACCA3 +:107A48005008F01F00244A6890884AAC5008F01F7C +:107A580000214A4890884A8C5008F01F001E2FEDDC +:107A6800E08F01A30E9C4A5BF01F0018C0C14A4C6E +:107A7800F01F0018E06900FF4978E08F0195582C45 +:107A8800E089000749FCF01F0013E08F018E762C77 +:107A9800F01F001D18975836E08101876A1649BB08 +:107AA8000C9CF01F000AC53148B85807E08A000846 +:107AB8009009A1A9B0095817C2A1C3089009A1C982 +:107AC800B009C2C8800391048002ECC88003910801 +:107AD800800094C4000016A2000016A6000016A09C +:107AE800000016A8800391148003911C8003913430 +:107AF8008003914C800391648003E18C8003917C26 +:107B0800800391888002DC2C800392144B799208C0 +:107B1800A1A8B2085827C071C0D84B499208A1C87B +:107B2800B208C0884B299208A1A8B2085837C0717A +:107B3800C0A84AF99208A1C8B208C0584AD9920800 +:107B4800A1A8CAC84AB99208A1C8CA884AAB0C9C5D +:107B5800F01F002AC2F14AA85807E08A00089009D5 +:107B6800A3A9B0095817C061C0C89009A3C9B00932 +:107B7800C08849E99208A3A8B2085827C071C0D89C +:107B880049A99208A3C8B208C08849999208A3A82D +:107B9800B2085837C071C0A849599208A3C8B2089A +:107BA800C05849499208A3A8C79849299208A3C868 +:107BB800C758494B0C9CF01F0011C3E149085807EE +:107BC800E08A00089009A1B9B0095817C061C1B886 +:107BD8009009A1D9B009C17848499208A1B8B2085A +:107BE8005827C161C1C80000000016A6000016A0F1 +:107BF800000016A88003921C8002ECC8000016A2A0 +:107C0800800392204B699208A1D8B208C0884B59CA +:107C18009208A1B8B2085837C071C0A84B19920889 +:107C2800A1D8B208C0584B099208A1B8C3784AE94C +:107C38009208A1D8C3384ADB0C9CF01F002DC30161 +:107C48004AC85807E08A00089009A3B9B00958172C +:107C5800C061C0C89009A3D9B009C0884A09920870 +:107C6800A3B8B2085827C071C0D849D99208A3D878 +:107C7800B208C08849B99208A3B8B2085837C07189 +:107C8800C0A849899208A3D8B208C058496992087F +:107C9800A3B8C04849499208A3D8B208C858496B44 +:107CA8000C9CF01F0013C3D149285807E08A00082C +:107CB8009009A5A9B0095817C061C0C89009A5C9FD +:107CC800B009C08848699208A5A8B2085827C151C8 +:107CD800C1B848399208A5C8B208C168000016A6FC +:107CE800000016A0000016A8800392248002ECC8A9 +:107CF800000016A2800392284AC99208A5A8B208D3 +:107D08005837C071C0A84A999208A5C8B208C05887 +:107D18004A799208A5A8CC2B4A599208A5C8CBEB5A +:107D28000C9C4A4BF01F0024C3F14A485807E08ACC +:107D3800000B9009EA19FFFFE8198000B0095817ED +:107D4800C071C1089009F3D9C00FB009C0B849C9BA +:107D58009208EA18FFFFE8188000B2085827C08187 +:107D6800C11849789009F3D9C00FB009C0B848F9CB +:107D78009208EA18FFFFE8188000B2085837C08157 +:107D8800C0E848A89009F3D9C00FB009C08848894D +:107D98009208EA18FFFFE8188000C80B48489009C5 +:107DA800F3D9C00FB009D82A000016A0000016A801 +:107DB800800392308002ECC8000016A2000016A6CC +:107DC800D421582CC2717617495B0E9CF01F001500 +:107DD800C1211897494CF01F0015201D494C1AD78E +:107DE800F01F00120E9C2FF7F01F00122FED5847BE +:107DF800CF51C1380E9CF01F0010201DEFDCC008C9 +:107E080048BC1AD7F01F00090E9CF01F000A2FED7E +:107E1800C04848ACF01F0005D82A000080039238FB +:107E28008002ECC88003923C800094C4800390C414 +:107E380080006C108002DC2C80039250D421207DBD +:107E4800306A18951696FAC7FFEAE06B00FF0E9C99 +:107E5800F01F00385825C1B16C1C4B7BF01F003750 +:107E68001896C4B14B6CF01F00370E9B0C9CF01F8A +:107E780000360E9B301CF01F00340E9B0A9CF01F2E +:107E880000320E9B303CF01F0030C5085825E08AB0 +:107E980000356C1CF01F002D6C2B1897500B169C8E +:107EA800F01F002B58DC5F04585C5F08E9E81008F5 +:107EB800ECC5FFFC109418963008FACCFFF8400B7C +:107EC800F0041800C0500C9AF01F0022C238F01FAE +:107ED800002258375F98580C5F091896F3E8100885 +:107EE800E8081800C0A15807C085C0916A08118920 +:107EF8003308F0091800C030498CC098585C5F18E6 +:107F080058DC5F19F3E80008C050495CF01F000D09 +:107F1800C0D85C570C9BFAC9FFEAFACAFFF80E9C56 +:107F2800F01F00100E9CF01F00102F9DD82A000093 +:107F38008002E8BC800392808002ECC880039288AB +:107F4800800094C48001921C8002DC2C8002EDD059 +:107F58008002EE0C800098688003929C800392DC7B +:107F68008001927080019258D421204D4ABC149609 +:107F7800F01F002B1A9CF01F002B581CC0504AAC55 +:107F8800F01F0027C0A81A9CF01F0028201D1ADC2B +:107F98004A7CF01F00232FEDF01F002618974A6C2B +:107FA800F01F001F5807C0514A4CF01F001DC04861 +:107FB8000E9CF01F00234A376E0CF01F0023C1F0FF +:107FC8006E087018201D1AD8F01F0020500C4A0C9B +:107FD800F01F00136E0870285008F01F001C500C8A +:107FE80049CCF01F000F6E0870385008F01F0017BA +:107FF800500C499CF01F000A2FEDC048497CF01F27 +:108008000008497CF01F00060DC93018F009180057 +:10801800C2A1494CC298000080039314800094C404 +:10802800800191288003932C8000967080039348E8 +:108038008001997C80039358800393A880009784DB +:10804800000080D08000CAE4800096A8800393686E +:10805800800393788003938880039398800393B078 +:10806800800393B8493CF01F0014FACCFFF4300B9E +:10807800F01F0012301B4037FACCFFF8F01F000F3A +:10808800201D1AD750574047F01F000D500C48DCF0 +:10809800F01F000950075047F01F0009500C48AC6A +:1080A800F01F0005F01F0009300C2FED2FCDD8224E +:1080B800800393C4800094C48000C1EC800096A81B +:1080C800800393D080039DC08000495CD421202D7B +:1080D8001695584CE089000649ECF01F001FC3684C +:1080E800FACCFFFC761BF01F001D6A2C4014F01F11 +:1080F800001C18976A3CF01F001A18966A4CF01F6B +:108108000018501418951ADC496C1AD61AD71AD4C4 +:10811800F01F0011089CF3D5C008F5D6C0080E9BC7 +:108128005C7BF01F00112FCD5BFCC10148F8900962 +:108138003008F0091900C0A448D81AD548DC1AD666 +:108148001AD71AD8F01F00042FCD2FEDD82A000017 +:10815800800393DC800094C4800098FC8002DC2CAF +:108168008003941480003958000016A280039054AC +:1081780080039448D4211695583CE089000649CCE0 +:10818800F01F001CC338761CF01F001B18976A2CC0 +:10819800F01F001918966A3CF01F00174978201D37 +:1081A80018941AD649651AD7580CF0051710495C67 +:1081B8001AD5F01F0010089AF7D6C0085C5A0E9C12 +:1081C8005C7CF01F00112FCD5BFCC10148F89009C1 +:1081D8003008F0091900C0A448D81AD648DC1AD7C4 +:1081E8001AD51AD8F01F00032FCDD82A80039488F7 +:1081F800800094C48002DC2C80037DC480037DC889 +:10820800800394B880003C50000016A28003969C1E +:10821800800394DCD421206D1697582CE089000641 +:108228004A4CF01F0025C438761CF01F00246E2B22 +:10823800F8C700011A9CF01F0022304A1A9BFAC6A0 +:10824800FFEC0C9CF01F001F201D40681AD8F01F7F +:10825800001E1ADC49DC1AD7F01F00170C9B0E9C75 +:108268005C5CF01F001BFACCFFE0300BF01F00191C +:10827800301B4087FACCFFE4F01F00162FDD505763 +:108288001AD74056F01F00101AD71ADC492C50870D +:10829800F01F00092FDD50461AD6F01F000B1AD622 +:1082A8001ADC48EC5076F01F00042FCD2FADD82AE9 +:1082B80080039510800094C48002DC2C800098FC18 +:1082C8008002E736800096A8800395388000C19C1C +:1082D8008000C1EC8003955480039564D421FACDC5 +:1082E8000108581CE0890006491CF01F0012C1D87B +:1082F800F6C9FFFCF8CA0001FAC7FFFCE06B0100F1 +:108308000E9CF01F000DC110300948CAFACBFEFCC4 +:108318000E9CF01F000B5C5CC0814418489C1AD866 +:108328001AD7F01F00042FED2BEDD82A800395747F +:10833800800094C480009710800078E08000C4C05A +:1083480080039064D43121AD18961695582CE08995 +:1083580000064A1CF01F0021C3B8FAC7FFFC344AC4 +:10836800300B0E9CF01F001E306AE06B00FFFACC49 +:10837800FFDBF01F001BFAC4FFB8EAC9FFFCECCA18 +:108388000002320B089CF01F00171893C210189AAD +:10839800089B0E9CF01F00143088FB6300242016F5 +:1083A800EA060326FB68003C0C9CF01F00100C9B9F +:1083B800189A30180E9C3089F01F000D581CC08088 +:1083C80048C8201D48CC1AD8F01F00042FED2E6D88 +:1083D800D83A000080039590800094C48002E8BCDD +:1083E800800097108002E7368002EDD080019084EB +:1083F80080039048800395B4D42121AD1696582C5B +:10840800C05049BCF01F001BC308FAC7FFFC344A20 +:10841800300B0E9CF01F0018306AE06B00FFFACC9E +:10842800FFDBF01F0015ECC9FFFC301AFAC6FFB8D5 +:10843800320B0C9CF01F00111895C170189A0C9BF8 +:108448000E9CF01F000F3088FB6500240E9CFB6813 +:10845800003CF01F000C581CC08048B8201D48BCC8 +:108468001AD8F01F00042FED2E6DD82A800395D45A +:10847800800094C48002E8BC800097108002E73630 +:1084880080018FF8800396AC800395ECD431204DA1 +:108498001493189516947406582CC091761C304A7B +:1084A8004A7BF01F0028C0513018C458584CC0806F +:1084B8004A5CF01F00264A6CF01F0024C3D8761BC4 +:1084C8001A9CF01F00240A9A1A9BFACCFFF4F01F9A +:1084D80000224A289088EDB80002C0B1201D40480B +:1084E8001AD849F81AD649FC1AD8F01F00182FCD07 +:1084F800FAC7FFF40C9C0E9BF01F001B682B1A9CFC +:10850800F01F0014304A1A9B0E9CF01F00130E9B9C +:108518000C9CF01F0016683B1A9CF01F000E304A96 +:108528001A9B0E9CF01F000C0E9B0C9CF01F001059 +:108538001A953008A6C82FCDD83A0000800392803B +:108548008002EDE680039610800094C48003964074 +:10855800800098FC8002E736000016A28003903C59 +:10856800800396688000CBC88000CA928000CA74D5 +:10857800D421212D581CE0890006491CF01F001148 +:10858800C1C8F6C9FFFCF8CA0001FAC7FFD8320B08 +:108598000E9CF01F000D1896C1000E9B189AFAC782 +:1085A800FFF90E9CF01F0009300BFB6600270E9C9C +:1085B800F01F0007F01F00072EEDD82A80039684CD +:1085C800800094C4800097108002E736800099A844 +:1085D8008000998CD401F01F0003F01F0003D80A13 +:1085E80080019EF880009820D40148BE1898300970 +:1085F8007C0C580CC0A1F2090019487EFC0900291E +:10860800932A9318930BD8022FF92F4E58F9CF11AC +:10861800DC0A000000001544D401484CF01F000497 +:1086280030194848B089D802800396C0800094C4A5 +:10863800000015F8D4314B68169570065806C050DE +:108648005816E08100BAC938580CE08000B5F01F10 +:1086580000314B18910C1897580CE08000AD19891F +:10866800EC091800C0415805C460C4284AB44AC37C +:108678008906C188EC060018E60800287012049CD8 +:108688005802C0E0F01F002718910E9CF01F00252B +:108698000E9BE20C0D4A049CF01F0023C3102FF61A +:1086A8008906680649D258E6FE98FFE658F6C28160 +:1086B8005805C210049749DCF01F001D3008498690 +:1086C8008508C128F0080018EC0800287009580926 +:1086D800C0807018201D497C1AD8F01F00152FED96 +:1086E8006E082FF88F086E0858E8FE98FFED492CA1 +:1086F800F01F000F4888700CF01F0010C5C80E9CB2 +:1087080048FB49074906F01F0011C2C8000016407F +:108718008002ED8400001644000015400000154456 +:108728008002EDD08002EDE6800396C8800094C4F4 +:10873800800396E0800396C48002E28C80039364F1 +:10874800000015FC000016008002EEB86E08EC0868 +:10875800092C2FF88F085908C070498B300CF01F6E +:108768000018580CCF41301949689109496949786E +:108778007008F0080018F20800284959702A720C8D +:108788007008494B5D18581CC1705805C040492CE9 +:10879800F01F001248E83007340A0E9B910748DCA6 +:1087A800F01F000F48F8700CF01F000F4858301CDD +:1087B8009107D832D83ADA3A800393648002EEB847 +:1087C800000016400000154400001540000015FC8C +:1087D80000001600800396C4800094C48002E8BCA0 +:1087E800000016448002E28CD421202D1897FACB81 +:1087F800FFFCFE7C1800F01F0012583CC080584C4B +:10880800C081E0690100FE7818009109301CC15848 +:10881800401C58DCC03130ACC0B8588CC081F01F47 +:108828000009320CF01F00071BFCC0285C5CF01F1D +:1088380000054018300CAE882FEDD8228000A9C260 +:10884800800078A0D431202D30A1FAC0FFF930D2B1 +:10885800308349B749B630043005009CF01F001A30 +:10886800C2A11BF8E20818005F0AE40818005F09B3 +:10887800124AF80A1800C0904929491A1298740B2C +:10888800950CF20B0B0CC188E6081800C0916E0815 +:108898002018F00C17708F0CEC0C0B04C0686E09D4 +:1088A800EC090B082FF98F096E08E0480050CD61DC +:1088B8008F05CD4B3008109C2FEDD832000016489C +:1088C8000000164C800087F0D401F01F0004301B14 +:1088D800F01F0003D80200008000884C8000863C0E +:1088E800D4314974169714951293580BC0B1680C7B +:1088F800580CC0311896C2181696F01F0012890736 +:10890800C1C868085808C0C1E06C0200F01F000E1A +:10891800890CC061189648DCF01F000DC0E80A9C5D +:10892800E066020048650C33E60617806A0B0C9A6D +:10893800F01F00086A088F080C9CD8320000169CAB +:108948008002E28C8002E2A4800396E8800094C44E +:10895800800090B4D401F01F0002D80A800091086A +:10896800D4213008FAC4FFEC19C9F0091800F9B885 +:108978000100E9F81A01E9F81A02E9F81A004A1898 +:108988001AD84A1818971AD8089B3008E8C9FFF867 +:10899800E8CAFFFC780CF01F001D8F0C2FED580C57 +:1089A800C021DC2AF01F001A300949AA301BE06CEC +:1089B8001388F01F00193009498A301BE06C00FA4F +:1089C800F01F00153009496A301BE06C01F4F01FF4 +:1089D80000123009493A301BE06CEA60F01F000EC3 +:1089E8003009491A301BE06C03E8F01F000B30090E +:1089F80048EA301BE06C03E8F01F0007DA2A0000A1 +:108A08008001365C80013C948000CCA88000CAB00C +:108A180080008A708000956C80008A6480008A5883 +:108A280080008A4C80008A4080008A34D401F01F7C +:108A38000002D8028000C664D401F01F0002D802E8 +:108A480080012984D401F01F0002D8028000B8B048 +:108A5800D401F01F0002D8028000C074D401F01FB6 +:108A68000002D8028000E68CD401F01F0002D80270 +:108A78008001326430194828B0895EFC000016AACB +:108A8800D401319CF01F0003319CF01F0003D80271 +:108A98008000A2D28000A2E6D421204D3FF819C957 +:108AA8001897F0091800F9B80001EFF80E0430081B +:108AB800201D1AD850581AD81AD850685058F01F84 +:108AC800001C49CB6E0CF01F001C0E9949BA49CB0B +:108AD80049CCF01F001D2FCD581CC08049B8201D5F +:108AE80049BC1AD8F01F001B2FEDF01F001BF01F08 +:108AF800001B0E9CF01F001AC0F049A8900930080E +:108B0800F0091900C0F44988201D498C1AD8F01FB3 +:108B180000112FEDC07830194958319CB089F01FE9 +:108B280000153018EF6800082FCDD822800089681A +:108B380080008C5C8000CAEE80008B7C80008BDC1F +:108B480080008A7C80009A188003973C80039DC02F +:108B5800800094C48000998C80019EF880002A9837 +:108B6800000016A28003972880039758000016A4D7 +:108B78008000A300D4211897333CF01F000F300663 +:108B88000FD8EC081800C0C048CCF01F000D6E0CC0 +:108B9800F01F000C6E0CF01F000CAED6C07848BC5D +:108BA800F01F00076E0CF01F000A3FFCF01F0009C1 +:108BB800D82200008000A2E680039774800094C445 +:108BC8008000B1D88000AE50800397908000CABC66 +:108BD80080002E60D42116971896333CF01F00149D +:108BE8000C9CF01F0014201D1ADC493CF01F0013D8 +:108BF80030182FED0FC6F0061800C121490CF01FE0 +:108C0800000F6E0CF01F000F48F849095C5CF20C6D +:108C18001700F00C1710F01F0009AED6C0486E0CF4 +:108C2800F01F000BF01F000BD82200008000A300EB +:108C3800800096E48003979C800094C4800397B8D2 +:108C48008000B950800397D080037FC08000CB8814 +:108C58008000C690D42149471896F01F0014189533 +:108C6800C110301CF01F00126C18201D1AD8F01FFC +:108C78000011500C490CF01F001130182FEDAE8870 +:108C8800D822AE8CF01F000E48E89008EA081900B8 +:108C9800C08448D8201D48DC1AD8F01F00082FEDE2 +:108CA800D8220000000016AB8000CAE480002E60C5 +:108CB800800096A8800397D8800094C480006B2C0D +:108CC800000016A28003995C800397E8D4211897C6 +:108CD800F01F0027300A4A7B4A7CF01F0028300A20 +:108CE8004A7B4A8CF01F00254A7B300A4A7CF01FD9 +:108CF80000230E9A4A6B4A7CF01F0020300A4A6B08 +:108D08004A6CF01F001E4A6B300A4A6CF01F001BA9 +:108D18000E9A4A5B4A5CF01F0019300A4A4B4A5CBB +:108D2800F01F0016300A4A4B4A4CF01F0014300A54 +:108D38004A3B4A4CF01F0011300A4A3B4A3CF01F9C +:108D4800000F300A4A2B4A3CF01F000C300A4A2B0D +:108D58004A2CF01F000A300A4A1B4A2CF01F000751 +:108D6800300A4A1B4A1CF01F0005D82280008620C2 +:108D7800800085DC80039804800085F08000857879 +:108D88008003980C80007E448003981480007F70D4 +:108D98008003981C800079F48003982480007DC8A3 +:108DA8008003982C80008494800398348000633476 +:108DB800800398408000834C80039848800084009A +:108DC80080039850800082E4800398588000821CB9 +:108DD800800398608000817C80039868800080D43C +:108DE800800398748000791080039880D4211897A4 +:108DF800F01F000BF01F000BF01F000BF01F000B03 +:108E08006E0CF01F000B48B811893008F0091800E3 +:108E1800C0406E0CF01F0008D82200008000951496 +:108E2800800088D080009504800193A080013BBC1D +:108E3800000016A480004758D421202D3029EE7850 +:108E48000000F1D9D1A23019F1D9D0033007501858 +:108E58000E9B5007337CF01F000F1A9BFE7C3800D6 +:108E6800F01F000D0E9BE06A01A4FE7C3800F01F85 +:108E7800000B0E9BE06A0348FE7C3800F01F0008D8 +:108E88000E9BFE7C3800F01F00072FEDD822000053 +:108E98008000A2308000A8388000A8F08000A926B1 +:108EA8008000A8D4D401333CF01F0009334CF01FD4 +:108EB8000008335CF01F0006333CF01F0006334CFB +:108EC800F01F0004335CF01F0003D8028000A2A842 +:108ED8008000A2E6D421202DF01F0034F01F0034BA +:108EE800F01F0034F01F0034E06C1B00EA1C00B7D0 +:108EF800F01F00324B28201D4B2C1AD8F01F0032CF +:108F080030CB301CF01F00312FED1897580CC08162 +:108F18004AF8201D4AFC1AD8F01F002B2FED344BBD +:108F2800301CF01F002A8F0CC0814A98201D4A9CD3 +:108F38001AD8F01F00252FED3FF80E9CAEC8F01F81 +:108F48000026300B169CF01F0025F01F0025F01F8F +:108F58000025C0804A48201D49EC1AD8F01F001A85 +:108F68002FEDFACAFFFC0E9B4A0CF01F0021581C7B +:108F7800C0C1401A49FB0E9CF01F001F581CC0516D +:108F88000E9CF01F001ECFDB58CCC04058DCC061DF +:108F9800C03849BCC04849BCC02849BCF01F000AB9 +:108FA800F01F001ACFEB000080008A88800076E06E +:108FB80080008EAC80008E408000AAE88003970C69 +:108FC80080039888800094C48002DC3C800398A8C1 +:108FD80080039DC080008CD4800095C88000C8E4C0 +:108FE8008000895C800398B8800088E880013E880A +:108FF80080008AA0800193BC80008DF4800398E4EF +:109008008003990C8003993080009514D4314A1458 +:1090180058095F081296189716951493A888E06067 +:109028000100E06100FFC2E88920A868E203190096 +:10903800E069FFFFE7D9E828E9F88A02E06901005A +:1090480088E8F2080108682989151039E9F8BA0290 +:10905800EE021608049CF01F0010301CF01F000FD1 +:10906800F01F000F5806C090049CF01F000E301C23 +:10907800F01F000DF01F000D6828101310071005D1 +:109088005C83F1D7C0085803CD01069CD832000094 +:10909800000016AC8000A0408000A19880009ED4FB +:1090A80080009F5C8000A17080009E94D4013009EC +:1090B8005C7AF01F0002D80280009014D40148584E +:1090C80090E9701B120C702AF01F0003D8020000F0 +:1090D800000016AC8002E736D4014888189B118A34 +:1090E8003009F20A1800C07090E9701C120B702A3F +:1090F800F01F0003D8020000000016AC8002E7361B +:10910800D421208D48D8F0E60008FAE70008F0EAF4 +:109118000000FAC8FFF0FAEB0000F0E70008F0EBF7 +:109128000000E06CF980EA1C0337F01F0005300CE2 +:109138002FCD2FCDD82200008003996C8000A1C0CC +:10914800D401FAC9FFFCF01F0002D80280031C1CDE +:10915800D401F01F0002D8028002EE88D401F01F6B +:109168000002D8028002ECACD401F01F0002D80241 +:109178008002F0ECD401F01F0002D8028002E71050 +:10918800D401F01F0002D8028002EE2CD401F01F97 +:109198000002D8028002ED84D401F01F0002D80238 +:1091A8008002ECC8D401F01F0002D8028002EE0C45 +:1091B800D401F01F0002D8028002EDD0D401F01FC4 +:1091C8000002D8028002E87ED401F01F0002D80213 +:1091D8008002E8BCD401F01F0002D8028002E73602 +:1091E800D401F01F0002D8028002E28CD401F01FE3 +:1091F8000002D8028002E8D0D401F01F0002D80291 +:109208008002E2A4D401580CC0707808B08B7808AA +:109218002FF89908D802F9DBC008F01F0002D8021D +:10922800800078A0D431189616971495580AE08AC9 +:1092380000153008109AC0282FF8EE08070BF40B19 +:109248001800CFB10A38F9B50400EBD8E515EDB927 +:109258000001C0313303C0283203E9D9C001C090EE +:109268003004C1082FF42015069B0C9CF01F000D3C +:109278005805FE99FFF9C0682FF42FF70C9CF01FD2 +:1092880000090F8B580BCF91C0782FF42015069B3F +:109298000C9CF01F00045805FE99FFF9089CD83271 +:1092A8008000920CD431204DFAC4FFCC109368177B +:1092B800189568041698580BC0B13308BADB08999A +:1092C800069ABAC8FACBFFFCF01F001FC3985809CA +:1092D8005F1B58AA5F09F7E90009C0605808C04435 +:1092E8005C383016C0283006EECB003A3009FAC791 +:1092F800FFF00EF9C0B8F00A0D00029912985898BC +:10930800F1DBE9082D080EF800985808CF515806E7 +:10931800C1005803C0B0EDB40001C08132DB0A9C23 +:109328002013F01F000A3016C04832D830060EF855 +:109338000899069A0E9B0A9CF01F00030C0C2FCD6F +:10934800D83200008000922C8000920CD431203D4D +:109358003007500A18951696325432D3330230919A +:109368003730C978E8081800E081008E2FF60D889C +:109378005808E0800093E8081800E0800085E608B7 +:109388001800F9B90100F7B600FFF9B90001C038B3 +:109398002FF6A1B90D88E4081800CFB03008C048EE +:1093A800F80E00182FF60D8AF008002EF4CC0030C5 +:1093B800F4CB0030E20B1800FE98FFF4E00A180026 +:1093C800C0A1109A4008110B50084B98580BF00B8D +:1093D8001700C548364BF60A1800C0A1361B400ACC +:1093E8001ADB1AD93019740B2FCA502AC358370BF5 +:1093F800F60A1800C121361A40091ADAF2CAFFFC27 +:10940800501A308A1ADA720B3009310A0A9CF01F96 +:1094180000292FED1807C3C8378BF60A1800C0417A +:10942800400A361BC078358BF60A1800C091400AEE +:10943800341B1ADB1AD9740B2FCA502ACE6B375B30 +:10944800F60A1800C0B1361B400A1ADB1AD93009CF +:10945800740B2FCA502A30AACDAB363BF60A180037 +:10946800C171109A4008700B2FC8FB6B0008500898 +:10947800FACBFFF83008FB6800090A9CF01F000EC1 +:109488001807C0682FF70D8B0A9CF01F000C2FF6E9 +:109498000D885808FE91FF685805EBF81000F9B9D7 +:1094A8000100F1F91E000E9C2FDDD8328003997C53 +:1094B800800092AC8000922C8000920CD401189B02 +:1094C800FACAFFFC300CF01F0002D8028000935447 +:1094D800D40148A972082FF89308F2F800CC58086C +:1094E800C040F2FC00D45D18FE780D003019918957 +:1094F8007078D402D6030000000001184838F0F94B +:1095080000D0700CB33C5EFC00000118D431495601 +:1095180030020C9730152F46EEC1FF2C0E930E9497 +:109528000D88E4081800C18166086E291039E08B9F +:1095380000146C185808C0306C2C5D180D98EA0897 +:109548001800E9F80000EFF90001F3D8E008EFF897 +:109558000A02EDF51E002EC62EC70236CE21D832DD +:1095680000000118D431300E189830A5494C1C96CB +:109578002FCCFCC3FFFF1897F9340008EC0418003F +:10958800C071FDD3C0082ECCEA0E1800CF311C9C48 +:1095980048B530030A96FC0E002EEAF500D0F00517 +:1095A8000D048F040D08EF630008EC0E0026080870 +:1095B800EF6B00098F188D498D3AD83200000118D9 +:1095C800D421300A16971896328B495CF01F001583 +:1095D800300AFE7C0D00149BF01F00134935FE7CF9 +:1095E8000D00EAFB00D0F60B1073A19BF01F0010D2 +:1095F800FE7C0D00F01F000FFE7C0D00F01F000E1A +:10960800EAC9FF2CEB4600CCEB4700D430182F45B5 +:10961800AA882EC51235CFD1D8220000800094D850 +:109628008000A3A08000A594000001188000A580F8 +:109638008000A57A8000A562D401306AF01F00027C +:109648005F0CD8028002E710D401F93A0020F738FD +:109658000020F4081800C020D80AF01F00035F0C8F +:10966800D80200008002E710D42119D919881AD924 +:1096780019C91AD919B91AD919A91AD91999486732 +:109688001AD9486A1AD8312B0E9CF01F00050E9C77 +:109698002FADD822000016E0800399848002EC40A8 +:1096A800D4214058F5D8C008F00916181ADAF5D8A8 +:1096B800C108F1D8C2081ADA48671AD8486A1AD90C +:1096C800310B0E9CF01F00050E9C2FCDD8220000F8 +:1096D800000016F4800399A48002EC40D421488746 +:1096E8001896321A300B0E9CF01F00060C9BED3AB0 +:1096F80000200E9CF01F00040E9CD822000016BC0F +:109708008002E8BC8002E736D431300318971696F9 +:109718001491129218950694C1D805002FF4009C54 +:10972800F01F0012F80300030C33E0880009201D25 +:1097380048FC1AD6F01F000F2FEDC108201DEE05BA +:10974800010B1AD00A9C0C0B48BAF01F000C2FED25 +:1097580018050234CE350E35C021D83A30080AF83B +:10976800EA07010CD83200008002EDD0800399B4DA +:10977800800094C4800399CC8002EC40D4211897CF +:109788002DFCF01F001B201D1ADC49ACF01F001A2D +:109798000E9CF01F001A500C499CF01F00176EC851 +:1097A800498C5008F01F00146EF82FED5818C0416E +:1097B800495CF01F0011EF3800383049F2081800F2 +:1097C800C0E03059F2081800C0603029F2081800CB +:1097D800C091C03848DCC04848DCC02848DCF01FCD +:1097E800000648DCF01F0004D822000080009670B4 +:1097F800800399CC800094C4800096E4800399D0BB +:10980800800399D8800399E8800399F480039A0823 +:1098180080039A1C800384D4D421202DFACCFFFC29 +:10982800F01F000C401870185808C04148ACF01FD1 +:10983800000B3007C0887008F007032CF01F0008E1 +:109848002FF75C57401870191237CF632FEDD822C5 +:1098580080018F0480039A40800094C4800097841C +:10986800D431202D300818921696BAE8169CF01FAD +:10987800001DEDBC0000C04149BCF01F001C3007B2 +:109888002FF649B30E94FAC5FFFCC208660BF6081A +:109898000709E2190044C210E04700405F9C0D8AA6 +:1098A800F60A0709E21900445F09F9E91009E8090D +:1098B8001800C131BADABAC8310A300B0A9C2FE64F +:1098C800F01F000CE4070B0C2FF7ED38FFFF5808CA +:1098D800CDE10E9C5C5CC028300C2FEDD832000026 +:1098E8008002EDD080039A50800094C40000049C4C +:1098F8008002F0ECD421204D1A981AD8FAC8FFF843 +:109908001AD8FAC8FFF01AD8FAC8FFE818971AD870 +:10991800169C49BBF01F001B2FCD584CC221403864 +:10992800E04800FFE08B001E402B580BC1A5E04B20 +:1099380000FFE089001740195809C135E04900FFC8 +:10994800E0890010400A580AC0C5E04A00FFE089D3 +:109958000009B16BF7E811881448F1E91088C028AC +:109968003008F0091618AEB8AE890E9CF3D8C208B4 +:10997800F1D8C108AE99AEA82FCDD82280039A603D +:109988008002EBF4486870085808F9BC00FFF9B980 +:109998000101F1F91E10F9BC01015EFC0000170479 +:1099A800D4214988169770085808C021DC2A580C19 +:1099B800C080189B321AF0CCFFEFF01F0013C0389C +:1099C800F16C003148F85807C080700C0E9B306A63 +:1099D8002CECF01F000DC088700C306A2CECE06B8A +:1099E80000FFF01F000A48787008F139003130088C +:1099F800F0091800C021DA2AF01F0005DA2A000051 +:109A0800000017048002E7368002E8BC80019EF857 +:109A1800D4314A241896169714951292680358035D +:109A2800C3B1338B301CF01F001E890C189BC0B1CA +:109A380049C89088EDB80003C2F1201D49A849BC67 +:109A48001AD8C10849ACF01F001B49691891581C65 +:109A5800C0E09288EDB80003C1F1201D4928496C87 +:109A68001AD8F01F00163FFC2FEDD8326808913243 +:109A7800F16300109106911791259288EDB80003C3 +:109A8800C020D8324888201D48DC1AD8F01F000BA7 +:109A9800029C2FEDD832DC3A000017048002DC3C2F +:109AA800000016A280039A8080039AE080009AC87A +:109AB80080018F2480039AF8800094C480039B203F +:109AC800D431202D1697581CC290C083582CC670CC +:109AD8004A78583CE08101A8C998F01F00264A48F6 +:109AE80018969088EDB80003C0A1F01F00234A38EB +:109AF8001ADC4A3C1AD8F01F00232FED333CF01F24 +:109B08000022334CF01F00216E185808E08001979E +:109B18006E3B0C9C5D18E08F019249589088EDB817 +:109B28000003C08149A8201D49AC1AD8F01F0015B0 +:109B38002FED334CF01F0014333CF01F0014EF39A5 +:109B480000103008F0091800E0800179F01F0012B9 +:109B5800581CE080017448689088EDB80003E081E3 +:109B6800016E201D48A848DC1AD8C659000016A264 +:109B78008001997C800096E480039AC880039B3812 +:109B8800800094C48000A3008000A2E680039CE8C3 +:109B980080039B5480019EF880039B784B589088E3 +:109BA800EDB80003C0814B48201D4B4C1AD8F01F5C +:109BB80000342FED4AF89088EDB80003C0814B18A7 +:109BC800201D4B1C1AD8F01F002E2FED333CF01F20 +:109BD800002F6E285808C0306E3C5D18EF39001011 +:109BE8003008F0091800E080012AF01F0029581CED +:109BF800E080012549F89088EDB80003E081011F55 +:109C0800201D4A084A3C1AD8C1699088EDB800035B +:109C1800C0814A18201D4A1C1AD8F01F00192FEDC0 +:109C28006E085808C0306E3C5D18EF3900103008D7 +:109C3800F0091800E0800103EF390031F00918003D +:109C4800E08000FDF01F00161894FACCFFFCF01F0E +:109C58000015581CC591401870185808C550300593 +:109C6800EEC1FFEFEEC3FFCE0A960A92C488000049 +:109C7800000016A280039ABC80039BAC800094C4A9 +:109C880080039A9880039BC48000A2E680019EF816 +:109C980080039BE880039AA880039C1C8001997C20 +:109CA80080018F04EF390031E4091800C080700882 +:109CB800029CF005032BF01F0041C1F0306A4C0BE9 +:109CC800069CF01F0040C0A040187008069CF005D4 +:109CD800032B2DFBF01F003CC1005806C0A0401804 +:109CE8006CC97008F005032870C81039E0890006AF +:109CF80040187008F00503262FF55C5540187019B8 +:109D08001235CD13C02830060C34C0415804E08108 +:109D1800009658065F1858045F19F1E90009C20057 +:109D2800089B0C9CF01F0025C1D068C8FE58FFC0D6 +:109D3800E08400856CCAF0C9FFF71439E084007F1D +:109D48004A299289EDB90003C0D1201D1ADA1AD820 +:109D580049F84A0C1AD8F01F00202FCDC0385808EF +:109D6800C0C0202DECCBFFDF306A1A9CF01F001B0F +:109D7800F01F001B2FEDC17849489088EDB800030B +:109D8800C0C1EECCFFEFF01F001749181ADC496C70 +:109D98001AD8F01F00112FEDEECCFFEFEF3B00318A +:109DA800F01F0012588CC060589CC2F0581CC21199 +:109DB800C458F01F000FC4288000965080039C38B8 +:109DC8008002EDE680009640000016A280039A8C7F +:109DD80080039C40800094C48002E73680019DDCAB +:109DE800800096E480039C6880019EA0800199CC45 +:109DF80049489088EDB80003C0814938201D493C86 +:109E08001AD8F01F00132FEDF01F0012581CC16064 +:109E180048C89088EDB80003C111201D48A848EC37 +:109E28001AD8C0989088EDB80003C081201D48B8A2 +:109E380048BC1AD8F01F00062FED2FEDD8320000CD +:109E4800000016A280039A8C80039C94800094C41E +:109E580080019EF880039CB080039ABC80039CCC50 +:109E6800D4012FEC580BC080F7DCC008FE7C28001A +:109E7800F01F0005D802F7DCC008FE7C2800F01FA0 +:109E88000003D8028000A6C68000A716D42148C7C0 +:109E9800C098300BFE7C2800F01F000A6E082FF8CF +:109EA8008F086E0CF7DCC008CF51F9DCC288F01FB0 +:109EB800000630194858B089D82200000000170859 +:109EC8008000A7FA80009E680000170CD40148683B +:109ED800300B700CF9DCC288F01F000430094848C8 +:109EE800B089D8020000170880009E680000170C8F +:109EF800D421202D4948301B700CF9DCC288F01F92 +:109F08000013E06B00D7FE7C2800F01F0011FAC791 +:109F1800FFFAE06B00FFFE7C2800F01F000D0E9B8F +:109F2800FE7C2800F01F000B9AB8EDB80007CF217F +:109F38004858300B700CF9DCC288F01F00042FED74 +:109F4800D82200000000170880009E688000A7FA49 +:109F58008000A816D421202D49B8A96C910C49B8C5 +:109F680011893008F0091800C030F01F00193009B5 +:109F780049684957B0896E0C301BF9DCC288F01F5C +:109F88000015E06B0082FE7C2800F01F00136E08AD +:109F9800F3D8C008FAC7FFF8F7D8C10CFE7C280030 +:109FA800F3EB109B0EDBB18BF01F000B0FABFE7CAD +:109FB8002800F01F00090FBBFE7C2800F01F0006D8 +:109FC8002FEDDA2A000017080000170C80009EF811 +:109FD80080009E688000A7FAD42149381897118913 +:109FE8003008F0091800C0604908700CA98CF01FEF +:109FF8000010EEC6FF000F3BFE7C2800F01F000D8E +:10A008000C37CFA14898300B700CF8CCFF00910C9E +:10A01800F9DCC288F01F000830194838301CB089B4 +:10A02800D82200000000170C0000170880009F5C71 +:10A038008000A7FA80009E68D421202D4A78A96C58 +:10A04800910C4A7811893008F0091800C030F01FC7 +:10A05800002530094A284A17B0896E0C301BF9DCF4 +:10A06800C288F01F0021E06B00D2FE7C2800F01FA0 +:10A07800001F6E08F3D8C008FAC7FFF8F7D8C10C5C +:10A08800FE7C2800F3EB109B0EDBB18BF01F001752 +:10A098000FABFE7C2800F01F00150FBBFE7C2800CC +:10A0A800F01F0012E06B00FFFE7C2800F01F000F7D +:10A0B800E06B00FFFE7C2800F01F000CE06B00FF47 +:10A0C800FE7C2800F01F0009E06B00FFFE7C2800E2 +:10A0D800F01F00062FEDDA2A000017080000170C01 +:10A0E80080009EF880009E688000A7FAD421202D69 +:10A0F800498818973009118AF20A1800C070B08987 +:10A108004958700CA98CF01F0015FAC5FFFAEEC665 +:10A11800FF00E06B00FFFE7C2800F01F00110A9B87 +:10A12800FE7C2800F01F000F9A380EC80C37CF218C +:10A138004898300B700CF8CCFF00910CF9DCC28801 +:10A14800F01F000930194838301CB0892FEDD8228B +:10A158000000170C000017088000A0408000A7FA34 +:10A168008000A81680009E68D4211897C088F01F28 +:10A178000006486CF01F000620175C87483C58070B +:10A18800CF71DA2A800090C40000171080009FE089 +:10A19800D4211897C088F01F0006486CF01F0006ED +:10A1A80020175C87483C5807CF71DA2A8000A0F452 +:10A1B80000001710800090E0D4213027FAC4FFEC8B +:10A1C8001896A887C0C80C9A089BFE7C2800F01F28 +:10A1D8000009C020D82A09882FF8A8880988EE081D +:10A1E8001800FE98FFF230094838301CB089D82290 +:10A1F8008000A73C0000170CE1B80000EE18000131 +:10A20800F1D8C201C020D3033019F20B094B994B86 +:10A21800783958085E0CD5035EFCFE681400700996 +:10A22800F3DCD0C191095EFCF8081605A968E0289E +:10A23800F000581BC0D0C063582BC0F0583BC12059 +:10A248005EFF3019F20C0949916991A9C108F60C11 +:10A25800094B915B91ABC0B83019F20C094991696F +:10A26800C0583019F20C0949915991993019F20CDA +:10A27800094C912C5EFDD703D4213007189616940B +:10A288000E95C0880D9B0D8C2FF72FE6F01F00044C +:10A2980018450837CF830A9CD82200008000A230D6 +:10A2A8003018F00C0948A59CA96CE02CF000F9487E +:10A2B800004899185EFC3018F00C0948A59CA96C58 +:10A2C800E02CF000F94800745EFC3018F00C0948E6 +:10A2D800A59CA96CE02CF000F94800785EFC3018C9 +:10A2E800F00C0948A59CA96CE02CF000F948005432 +:10A2F800F948004499185EFC3018F00C0948A59CF0 +:10A30800A96CE02CF000F9480058F9480044991865 +:10A318005EFC301AF8081605F40C0949A968E0280B +:10A32800F000F14900C4143BC080C043582BC0F171 +:10A33800C098F14900A8C038F14900A4F14900B813 +:10A34800C078F14900A8F14900B4C0285EFAF14983 +:10A3580000945EFD3018F00C0948A59CA96CE02C0F +:10A36800F000F94800985EFCF8081605A968E0288E +:10A37800F000F0F800D0F00C0A4CF9DCC0015EFCEB +:10A388003018F00C0948A59CA96CE02CF000F9489D +:10A3980000D85EFCC008D703F3DBC0054898A59B2E +:10A3A800F00B00387018F009092C4878F5DAC0026B +:10A3B800F00A0329FE780800F00B09295EFC00006A +:10A3C80080039CFC8003773CD42148F8E3B8000163 +:10A3D80048E848F9700E48FC3008FE7B0800C0E8E1 +:10A3E8007216EC0A00262FFA8D0C0E3ACFA3F60847 +:10A3F800092E2F892FF85948C0407207300ACF6BB1 +:10A40800D8220000800376008003773C80039CFC00 +:10A418008000A39CE0680083FE790800F00C010C22 +:10A42800F20C0328F0CAFFC0F20A032C580C5E0C89 +:10A438004869F80C1200F2080038F80C111F70185F +:10A44800F00C032C5EFC000080039CFC78C83019DB +:10A45800F1D9D10399C85EFC78C83019F1D9D00177 +:10A46800F1DBD20399C85EFCD421FAC4FFEC68176B +:10A47800680EEFD7C003FDDEC0013004E9D7D00372 +:10A48800E9DED0E1E9D7D103E9DED1E1E9DAD203A7 +:10A49800E9DBD2E1E9D8D303E9D9D3E199147958B2 +:10A4A800EDB80005CFD1D822D4213007405E2F8BDC +:10A4B800EFD8D021EFD9D104EFDAD204EFDED306FA +:10A4C800F80B0927D822F5E910192F8BF3E8102883 +:10A4D800F80B0329F3D8D043F80B09295EFC2F8B1E +:10A4E800F80B0328A1A8F80B09285EFC7958EDB8E9 +:10A4F8000000CFD15EFC7808F1DBD00299085EFC41 +:10A50800EC5BBB9FE08B0004304BC138E068C6BFF2 +:10A51800EA18002D103BE08B0004305BC0A8E0680F +:10A528001200EA18007A103BF9BB0306F9BB0207D0 +:10A5380078A8F1DBD00399A878A8F1DAD10399A813 +:10A548007808A3A899087958EDB80007CFD17808FA +:10A558003019F1D9D00299085EFC7808EDB80004EA +:10A56800CFD07808A1A899087808EDB80004CFD012 +:10A578005EFC301899485EFC7808EDB80004CFD02E +:10A58800992B7808EDB80004CFD05EFCD42130F8C0 +:10A5980014951697F00A18005FBA30181896F00B41 +:10A5A80018005FB9F5E91009C020D82AF00B180087 +:10A5B800C0A1FE7C0C00F01F0015300BFE7C0C00C7 +:10A5C800F01F00136C08EDB80004CFD0A377B1A733 +:10A5D800EFE510878D076C08EDB80004CFD06C0844 +:10A5E800E2180010CFD18D186C08EDB80004CFD058 +:10A5F8006C08EDB80004CFD03FF88D286C08EDB892 +:10A608000004CFD0DA2A00008000A4548000A4609F +:10A618003038F00A18005FB93078F00B18005F88FE +:10A62800F3E81008C1913108F00B1800E08B001511 +:10A63800E06800809908208BF4081601F5DAC0015B +:10A64800F1EB104B580AF9BA0100F9BA0002F7EA1F +:10A65800100A99CA5EFD302C5EFCD4013019189896 +:10A66800F73B000DF20B1800E0880004302CD802EC +:10A67800300AE06900809909301E7019149CF3DED5 +:10A68800D001F3DBD081F3DAD0E130FAF3DAD20487 +:10A698009119D802D4013018F00B18005FBEF00AE7 +:10A6A80018005FB81C48C030302CD8027818F1DB8D +:10A6B800D021F1DAD041F1D9D3089918D80A7819FC +:10A6C8001898EA19000F9919781CE21C0004C100B7 +:10A6D80030E9F20B1800E08B001A7019B16B300CDE +:10A6E800EA1BFFF0E81BFFFF126B911B5EFC303981 +:10A6F800F20B1800E08B000B70192F0B301AF40BBB +:10A70800094B5CDB126B911B5EFC302C5EFCE06835 +:10A718002710C0585808C0215EFF20187849EDB9A5 +:10A728000009CF917818EA18000F9918FC18010051 +:10A7380099085EFDD4313036F737000CEC07180065 +:10A74800E08B0050F733000B301EFC031800E08B41 +:10A758000049F73800083079F2081800E08800420C +:10A768003109F2081800E08B003D7619F205160150 +:10A77800F4050005EA090D04E8C90001E04900FEF6 +:10A78800E08B0030F0CA00080E923008EC1200018D +:10A79800A197F1D7D001F1D2D021F1D3D061F1DA6C +:10A7A800D084F73A0009F1D4D1081789F1DAD20830 +:10A7B800F73A000AF1DAD308FC091800C0C0C093C0 +:10A7C800302AF4091800C090EC091800C0A1C0781C +:10A7D80099C8C06899D8C04899E8C02899F8D83A63 +:10A7E800302CD832301899085EFC784CF9DCC0213E +:10A7F8005EFCE0682710C0585808C0215EFF20188A +:10A808007849EDB90001CF915C7B993B5EFDE0682A +:10A818002710C0585808C0215EFF20187849E2194F +:10A828000201E0490201CF717828300CB6085EFCBD +:10A8380076095829E08800035EFE7618A769109B00 +:10A84800E61BC000120CF3D8C003AFB91649109B21 +:10A85800E61B30001649109BE61B0C001649109B9E +:10A86800E61B03001649109BE61B00C01649109B07 +:10A87800E61B00301649109BE61B000C1649109B7E +:10A88800E61B00031649109BE21B60001649109B4B +:10A89800E21B10001649109BE21B0C001649109B86 +:10A8A800E21B03002FCC1649109BE21B0080109A74 +:10A8B8001649E21A0008109BE2180030E21B00401B +:10A8C8001649F3E81008144899085EFDF6081506BD +:10A8D800582BF9BC0BFFF9D8E80CF9B80805F9F8BA +:10A8E8008A00F9BC08005EFC582BE08800035EFE75 +:10A8F800F6081506F80800082FC87008EDB8000F0C +:10A90800C0C1A76BF3DAC010160C2ECC7808E0187B +:10A918000000F3E810089908F9DAC0105EFC582B1B +:10A92800E08800035EFEA76B160C7818EDB8000FE0 +:10A93800C0A12E4CF3DAC0107808E0180000F3E844 +:10A9480010089908F9DAC0105EFCD401F60E150457 +:10A958001C3AF9BE0210F9BE0308FC0B024BF608BC +:10A968001601F00A003AF40B0D0AF4091603F2C8AE +:10A978000001E048FFFEE0880003DA0A7818E86B77 +:10A988000000E418FFF7E018FECF590EF60E171076 +:10A99800F9BE0000FDE810089918F5DAC003F3EADB +:10A9A80011099989D80A7858EDB80001C030302CBF +:10A9B8005EFCF7DBC009997B5EFD7858E21800E081 +:10A9C800C030304C5EFC7859EDB90000F9BC010389 +:10A9D800F9F90006F00C1700E06A01FFF3DAE02845 +:10A9E800F7F80A005EFCE1B80000EE180001F1D8A3 +:10A9F800C201C020D3033FF9993978595808C020BB +:10AA0800D50330089918999899A8EA68610C9908AB +:10AA18005EFCD703D421201D500A16961897F01F04 +:10AA2800002F400A5806C5500DC83049F2081800D2 +:10AA3800E08800503095EA081800E08B004B0DD9EB +:10AA48003078F0091800E08B00458C39E068010186 +:10AA5800F0091900E08B003EED3900083038F009A4 +:10AA68001800E08B00376C0B0E9CF01F001D581C63 +:10AA7800C3000DC8EA081800C0416E18B1B8C05824 +:10AA880020586E19F3E810688F186E19ED3A00080F +:10AA98000DD8A978F1EA10E812488F18302A8C38B6 +:10AAA800F3D8C010F4081900E08800086E18ADB893 +:10AAB8008F1820298FA9C0586E18F1E910C98F196D +:10AAC8006E18E018FFF08F18300C35088F08C02872 +:10AAD800301C2FFDD82200008000A9EE8000A9526A +:10AAE8004828910C5EFC0000000018E8D431189842 +:10AAF800783E580EC620F90600105806C5E0300901 +:10AB08003FF3129A3344C1780E91E8071800C0A1A8 +:10AB1800F2CAFFFEF4C9FFFF5C7A5C89FC0A070AE7 +:10AB2800C0A8F6071800C4A05C75FC050709E4096D +:10AB380000095C89EC091900C0F2F2C5FFFFF9D9D8 +:10AB4800C0105C85FC0C000CEAC2FFFF19870E914F +:10AB5800E6071800CDA1580AC3003019F20A1800F8 +:10AB6800C0617028E06900802948C0C87028302971 +:10AB7800F20A1800C0412D483409C0482D48E06940 +:10AB880000C0300C3FF7C0D8F60A1800C1705C7ED0 +:10AB9800F00E070CEC0C000C5C8CF20C1900C0D207 +:10ABA800F8CEFFFF5C7C5C8EF00C000CFCC6FFFF4F +:10ABB800198AEE0A1800CE91300CD832D401F9085F +:10ABC800001CF3D8C010F2CEFFFE140EE04E004475 +:10ABD800E088000F48F8201D1AD8E06804E31AD866 +:10ABE80048D848EC1AD8F01F000E2FCDC008786E50 +:10ABF800FC090009F36B00F02FF8786BF3D8C0104C +:10AC0800F6090009F36A00F02FF8F958001CD80279 +:10AC180080039DC480039E0880039D9C800094C48B +:10AC2800D4013439F908001CF2081900E088000F33 +:10AC380048C8201D1AD8E06804EE1AD848A848BCAD +:10AC48001AD8F01F000B2FCDC008786AF3D8C010AF +:10AC5800F4090009F36B00F02FF8F958001CD8022A +:10AC680080039DC480039E5080039D9C800094C4F3 +:10AC7800D401580CC0E14B18201D1AD8E068062BE7 +:10AC88001AD84AF84AFC1AD8F01F002F2FCDC0084E +:10AC9800786A580AC0E14A98201D1AD8E068062C3C +:10ACA8001AD84AA84A7C1AD8F01F00272FCDC00806 +:10ACB800F908001C3439F2081900E088000F49F837 +:10ACC800201D1AD8E068062D1AD84A1849DC1AD867 +:10ACD800F01F001D2FCDC008F7D8C010160A3FFB83 +:10ACE800F56B00F02FF8129B5C88300AF958001CAD +:10ACF800C1584928201D1AD8E06806321AD8494890 +:10AD0800490C1AD8F01F00102FCDC008F1DEB01082 +:10AD1800786EFC090009F36A00F0F0CEFFFFF3D863 +:10AD2800C010F6081900FE98FFF3F958001CF3D973 +:10AD3800C002CE01D802000080039DC480039E8C0F +:10AD480080039D9C800094C480039EB080039EDC99 +:10AD5800D401F908001CF3D8C010F2CAFFFEE04A7B +:10AD68000044E088000F4918201D1AD8E06804F54F +:10AD78001AD848F848FC1AD8F01F000F2FCDC00881 +:10AD8800786AF4090009F5DBC108F36A00F02FF8C6 +:10AD9800786AF3D8C010F4090009F36B00F02FF8B3 +:10ADA800F958001CD802000080039DC480039F1C32 +:10ADB80080039D9C800094C4D401F908001CF3D83A +:10ADC800C010F2CAFFFCE04A0044E088000F49B80E +:10ADD800201D1AD8E06804FD1AD84998499C1AD849 +:10ADE800F01F00192FCDC008786AF4090009F60A87 +:10ADF8001618F36A00F0786A2FF8F3D8C010F4092F +:10AE08000009F5DBC208F36A00F0786A2FF8F3D876 +:10AE1800C010F4090009F5DBC108F36A00F02FF847 +:10AE2800786AF3D8C010F4090009F36B00F02FF822 +:10AE3800F958001CD802000080039DC480039F605D +:10AE480080039D9C800094C4D421F9380035A3D890 +:10AE5800F9680035189678A75807C2406E1C580C38 +:10AE6800C050F01F001130088F186E285808C09184 +:10AE78006E355805C061EF090010EA091900C0E0F5 +:10AE880048A8201D1AD8E06804C51AD84888489CE4 +:10AE98001AD8F01F00092FCDC0080E9CF01F00071C +:10AEA8008DA5D8228001122880039DC480039FA00D +:10AEB80080039D9C800094C48002E28CD421189762 +:10AEC800782C580CC050F01F000830088F286E3CB2 +:10AED800580CC070F01F00043008EF5800108F386D +:10AEE800D82200008002E28CD4211896580CC0E1C8 +:10AEF8004AE8201D1AD8E06805D11AD84AC84ADCA1 +:10AF08001AD8F01F002D2FCDC00878A75807C0E128 +:10AF18004A68201D1AD8E06805D31AD84A784A5CCE +:10AF28001AD8F01F00252FCDC0086E585808C0E069 +:10AF380049E8201D1AD8E06805D41AD84A0849DC1F +:10AF48001AD8F01F001D2FCDC0086E655805C0E047 +:10AF58004968201D1AD8E06805D51AD84998495C6F +:10AF68001AD8F01F00152FCDC0080A9AE06B0134DB +:10AF78000A9CF01F00158F5CC041E06C00FFD822CE +:10AF88009859E0680133F0091900E08B00214878EE +:10AF9800201D1AD8E06805DD1AD848C8485C1AD8B8 +:10AFA800F01F00052FCDC00880039DC480039FB407 +:10AFB80080039D9C800094C480039FD880039FFCDD +:10AFC8008003A0288000D3188003A054EF38001312 +:10AFD800EA081800C0514D3870092FF991097818FE +:10AFE800301B8F684CF9720A8F0AB09BB08B306B9C +:10AFF800B0ABF40B1618B0CBF7DAC2083009B0FAC8 +:10B00800B0DBF5DAC108305BB0B9F1690008F16965 +:10B018000009F169000AF169000BF169000CF16996 +:10B02800000DF169000EF169000FB0EAEF3A001265 +:10B03800F60A18005F0C30ABF60A18005F0BF9EB44 +:10B04800100BF20B1800C0513049F20A1800C0D199 +:10B058000DC9F169000C0DD9F169000D0DE9F1690F +:10B06800000E0DF9F169000F3009ECCAFFD1F16942 +:10B078000010F1690011F1690012F1690013F1691A +:10B088000014F1690015F1690016F1690017F169FA +:10B098000018F1690019F169001AF169001BF0CB79 +:10B0A800FFE4ED35002E3106EA091900F9BC02006B +:10B0B800F5FC380016CC2FF92FFA5C89EC09190039 +:10B0C800CF413009F0CAFFD4129C340B14CC2FF9AD +:10B0D8005C89F6091900CFB13009F0CAFF94129CB7 +:10B0E800E06B008014CC2FF95C89F6091900CFB108 +:10B0F8003639F16900EFF16900EC3829F16900EDA2 +:10B108003539F16900EE344A3009F0C8FF10EF59BB +:10B11800001C10C92FF95C89F4091900CFB1D82A8D +:10B12800000001F0D421580CC0E14A28201D1AD88B +:10B13800E06806141AD84A084A0C1AD8F01F0020EA +:10B148002FCDC00878A75807C0E149A8201D1AD8F4 +:10B15800E06806161AD849B8498C1AD8F01F0018A2 +:10B168002FCDC0086E5C580CC0E14928201D1AD8A4 +:10B17800E06806171AD84948490C1AD8F01F001079 +:10B188002FCDC0086E685808C0E148A8201D1AD8FD +:10B19800E06806181AD848D8488C1AD8F01F000852 +:10B1A8002FCDC008F01F000A30088F688F58D822AA +:10B1B80080039DC48003A09880039D9C800094C454 +:10B1C8008003A0BC8003A0E08003A10C8000D13CD8 +:10B1D800D42130D878A7EF390012F0091800EFF819 +:10B1E8001E12F9B80100EFF81E13300818968FE800 +:10B1F8008F988FB88FA88FD88FC8EF48004CEF482A +:10B208000048EF480044F01F0029EBDCC008C201E9 +:10B21800301A335B0E9CF01F0026307B0E9CF01F0B +:10B2280000250E9CF01F00246E5CEF0B001CF6CB73 +:10B23800FF105C7BF01F00210C983439EECAFFDC4C +:10B248006E5B6E1CF01F001E0C9CF01F001EEF387A +:10B2580000132FF85C58EF6800133099F2081800B3 +:10B26800E0880005E0692710C058E06903E8F009A4 +:10B2780002495C79E06801F4F2C9FE0DF2080C0895 +:10B288000C9CEF58001EF01F00100C9C48FBF01F90 +:10B2980000100C9C48DBF01F000F0C9C48BBF01FF3 +:10B2A800000E0A9CD82200008000AEF08000ABC4DB +:10B2B8008000AC288000AC788000D2108001139008 +:10B2C8008000B12C8000CABC8003B4098000CBC8C0 +:10B2D8008000CA748000CA92D421305878A7EF3908 +:10B2E8000012F0091800EFF81E12F9B80100EFF883 +:10B2F8001E131896F01F0026EBDCC008C2A1301AF6 +:10B30800335B0E9CF01F0023303B0E9CF01F002285 +:10B31800302A339B0E9CF01F001FED1B002C0E9C47 +:10B32800F01F001E0E9CF01F001E6E5CEF0B001C31 +:10B33800F6CBFF105C7BF01F001B0C983439EECA6B +:10B34800FFDC6E5B6E1CF01F00180C9CF01F0017D2 +:10B35800EF3800132FF85C58EF6800133099F208A3 +:10B368001800E0880005E0694E20C058E06907D061 +:10B37800F00902495C790A9CF2C9FE0DE06801F403 +:10B38800F2080C08EF58001ED82200008000AEF02A +:10B398008000ABC48000AC288000AD588000AC7839 +:10B3A8008000D210800113908000B12CD42118960F +:10B3B800580CC0E14AF8201D1AD8E06802F51AD8DE +:10B3C8004AD84AEC1AD8F01F002E2FCDC00878A70B +:10B3D8005807C4E0EF3900123088F0091800C4811A +:10B3E80017B8178A1799B169F3EA118917AAF3EA06 +:10B3F8001089F1E910096EA81039C3A130C8EF68A7 +:10B4080000123008EF680013F01F001E5C5CC28158 +:10B41800301A335B0E9CF01F001C304B0E9CF01F43 +:10B42800001B304A332B0E9CF01F00176EAB0E9C8E +:10B43800F01F00170E9CF01F00176E5CEF0B001C2E +:10B44800F6CBFF105C7BF01F00140C983439493A96 +:10B458006E5B6E1CF01F00120C9CF01F0012EF3880 +:10B4680000132FF8EF6800133148EF58001ED82258 +:10B4780080039DC48003A13880039D9C800094C4F0 +:10B488008000AEF08000ABC48000AC288000ADC066 +:10B498008000AC788000D2108003B405800113903E +:10B4A8008000B12CD421303878A7EF390012F00988 +:10B4B8001800EFF81E12F9B80100EFF81E131896DD +:10B4C800F01F002AEBDCC008C321301A335B0E9C46 +:10B4D800F01F0027303B0E9CF01F0026302A339BBC +:10B4E8000E9CF01F0023E06B02400E9CF01F002210 +:10B4F800304A332B0E9CF01F001E6EAB0E9CF01FC3 +:10B50800001F0E9CF01F001E6E5CEF0B001CF6CB9C +:10B51800FF105C7BF01F001B0C98343949AA6E5B46 +:10B528006E1CF01F001A0C9CF01F0019EF38001356 +:10B538002FF85C58EF6800133099F2081800E0887B +:10B548000005E0692710C058E06903E8F0090249DE +:10B558005C790A9CF2C9FE0DE06801F4F2080C0857 +:10B56800EF58001ED82200008000AEF08000ABC467 +:10B578008000AC288000AD588000ADC08000AC7859 +:10B588008000D2108003B405800113908000B12C94 +:10B59800D4214BD811B9118B119A11A8B16AF5EBC6 +:10B5A800118AF5E81088F3E8100878A78FA8EF3912 +:10B5B80000123068F0091800EFF81E12F9B80100FF +:10B5C800EFF81E131896F01F0031EBDCC008C3E13A +:10B5D800301A335B0E9CF01F002E301B0E9CF01FA0 +:10B5E800002D302A339B0E9CF01F0029ED1B002CE8 +:10B5F8000E9CF01F0029304A337B0E9CF01F00245C +:10B60800301B0E9CF01F0023303B0E9CF01F0021C6 +:10B6180031CB0E9CF01F001F306B0E9CF01F001DDD +:10B628000E9CF01F001E6E5CEF0B001CF6CBFF108B +:10B638005C7BF01F001B0C98343949AA6E5B6E1CAA +:10B64800F01F00190C9CF01F0019EF3800132FF899 +:10B658005C58EF6800133059F2081800E0880005BC +:10B66800FE79EA60C058E06903E8F20809495C79A4 +:10B678000A9CF2C9FE0DE06801F4F2080C08EF58C4 +:10B68800001ED8228003B4098000AEF08000ABC44D +:10B698008000AC288000AD588000AC788000D210C3 +:10B6A8008003B405800113908000B12CD421301898 +:10B6B80078A7EF390012F0091800EFF81E12F9B850 +:10B6C8000100EFF81E131896F01F0039EBDCC008D4 +:10B6D800C501301A335B0E9CF01F0036303B0E9CC0 +:10B6E800F01F0035302A339B0E9CF01F0032ED1BF3 +:10B6F800002C0E9CF01F0031304A332B0E9CF01F9B +:10B70800002D6EAB0E9CF01F002E304A336B0E9C42 +:10B71800F01F00286E9B0E9CF01F0029304A337BD7 +:10B728000E9CF01F0024301B0E9CF01F0023303BA2 +:10B738000E9CF01F002131CB0E9CF01F001F306BB8 +:10B748000E9CF01F001D0E9CF01F001E6E5CEF0B80 +:10B75800001CF6CBFF105C7BF01F001B0C983439E3 +:10B7680049AA6E5B6E1CF01F001A0C9CF01F001992 +:10B77800EF3800132FF85C58EF6800133059F208BF +:10B788001800E0880005FE79EA60C058E06903E81F +:10B79800F20809495C790A9CF2C9FE0DE06801F4D7 +:10B7A800F2080C08EF58001ED82200008000AEF006 +:10B7B8008000ABC48000AC288000AD588000ADC0CC +:10B7C8008000AC788000D2108003B405800113900B +:10B7D8008000B12CD421304878A7EF390012F00945 +:10B7E8001800EFF81E12F9B80100EFF81E131896AA +:10B7F800F01F0025EBDCC008C291301A335B0E9CA9 +:10B80800F01F0022303B0E9CF01F0021302A339B92 +:10B818000E9CF01F001EED1B002C0E9CF01F001D3F +:10B828000E9CF01F001D6E5CEF0B001CF6CBFF108A +:10B838005C7BF01F001A0C983439499A6E5B6E1CB9 +:10B84800F01F00180C9CF01F0018EF3800132FF899 +:10B858005C58EF6800133099F2081800E08800057A +:10B86800E0692710C058E06903E8F00902495C79EB +:10B878000A9CF2C9FE0DE06801F4F2080C08EF58C2 +:10B88800001ED8228000AEF08000ABC48000AC2837 +:10B898008000AD588000AC788000D2108003B405D9 +:10B8A800800113908000B12CD4314A5830167007AB +:10B8B80030A20C9330043055C3E86EA85808C3A0D2 +:10B8C800F1090022F2CA0001F15A0022EC0919001C +:10B8D800C151F1380012E40818005F0AE6081800A0 +:10B8E8005F09F5E91009E8091800C041EA081800DD +:10B8F800C2110E9CF01F0013C1D8F1090020F2CA32 +:10B908000001F15A0020EC091900C141F138001278 +:10B91800E40818005F0AE60818005F09F5E910094D +:10B92800E8091800C041EA081800C0410E9CF01F41 +:10B9380000066E075807CC21D8320000000080CCE2 +:10B948008000B7DC8000B2E0D4211896580CC0E122 +:10B958004C08201D1AD8E068024E1AD84BE84BFC58 +:10B968001AD8F01F003F2FCDC008F9380035A3D8EA +:10B97800F968003578A7F909002CE068023FF0095A +:10B988001900E088008B5807C091350CF01F00356E +:10B998001897E08000838DACC2E86E1C580CC0304C +:10B9A800F01F00316E585808C0E04AA8201D1AD868 +:10B9B800E068026C1AD84AD84A8C1AD8F01F0028B6 +:10B9C8002FCDC0086E285808C0916E385808C0613D +:10B9D800EF090010F0091900C0E049E8201D1AD845 +:10B9E800E068026E1AD84A2849CC1AD8F01F001C01 +:10B9F8002FCDC008350A300B0E9CF01F001EF01F1B +:10BA0800001E8F1C1895C0610E9CF01F001C8DA590 +:10BA1800C178344A49ABF01F001B499B343A6E1C6D +:10BA2800F01F00190C9A499B6E1CF01F00190C9C02 +:10BA3800F01F00185C5CC0700C9CF01F0017E06CD5 +:10BA480000FFD822ED380035A3B8ED680035D822BC +:10BA580080039DC48003A13880039D9C800094C40A +:10BA68008002E2A4800112288003A14880039FA0DD +:10BA78008002E8BC800112008002E28C8003B409D5 +:10BA880080011260800113208000BBBC800111F886 +:10BA98008000B5988000AE50E06C00FFD82200000E +:10BAA800D421202D1896580CC0E14BA8201D1AD877 +:10BAB800E06803781AD84B884B8C1AD8F01F0038E6 +:10BAC8002FCDC00878A75807C0E14B28201D1AD8E9 +:10BAD800E068037A1AD84B384B0C1AD8F01F00309C +:10BAE8002FCDC0086F295BF9C1102E2933C8E06A31 +:10BAF800FFFFF2080D081438F40817B0EF580020BB +:10BB08005808F9B80001EFF80C106F395BF9C1104B +:10BB18002E2933C8E06AFFFFF2080D081438F4082C +:10BB280017B0EF5800225808F9B80001EFF80C11C7 +:10BB38006EB850185808C041FC18FF0050186EC85D +:10BB480050085808C0716EA84019F3E80008A1A869 +:10BB58005008EECBFFD80C9CF01F0013FACBFFFC6B +:10BB68000C9CF01F00121A9B0C9CF01F00110C9CDF +:10BB7800F01F0010EF39001230A8F0091800EFF894 +:10BB88001E12F9B80100EFF81E132FEDD82200009D +:10BB980080039DC48003A16080039D9C800094C4A1 +:10BBA8008003A17C8000CBC88000CA928000CA7440 +:10BBB8008000CB88D43178A71896149574186E290C +:10BBC8005809C0916E395809C061EF0B0010F20B8B +:10BBD8001900C0E04BE8201D1AD8E06805651AD89E +:10BBE8004BC84BDC1AD8F01F003D2FCDC0088A5B2C +:10BBF80032BAF40B1900E088020F118B302AF40BCB +:10BC08001800E0810209F93C002EECCBFFD1F0CA04 +:10BC1800FFE4C0982FF917345C59153EFC0418004E +:10BC2800E08101FAF8091800CF6311FA11CB11D994 +:10BC380011E8B169F3EB1189F3E810896E08F5E9A9 +:10BC480010091039E08101E80E9CF01F00258A4C8C +:10BC5800E06800F0F00C1900E088000FF8CC00F064 +:10BC6800EF5C00105C7CF01F001F8F3CC051EF5C44 +:10BC78000010E08F01D1E06C00F0F01F001A8F2C4B +:10BC88001894C0C16E3C580CE08001C6F01F001625 +:10BC9800EF5400108F34E08F01BF189B3009E06A21 +:10BCA80000F00A9CF01F0011E06800F0F00C190089 +:10BCB800C2004878201D1AD8E068052E1AD848C84E +:10BCC800485C1AD8F01F00052FCDC00880039DC41A +:10BCD80080039FA080039D9C800094C48000AEC414 +:10BCE8008002E2A48002E28C8000CEC48003A1948A +:10BCF8006E3B580BE08001B2E06900F0EF1A0010CB +:10BD08000A9CF01F0036EF080010F8081900E080C0 +:10BD180001A54B38201D1AD8E06805351AD84B18EC +:10BD28004B1C1AD8F01F00312FCDC00819A8305A63 +:10BD3800F4081800E0810100EF3800123019F20809 +:10BD48001800E08100EC30086CA4333B89D889B82E +:10BD580089C8089CF01F0026C0F0F8C8FFFC19AB82 +:10BD6800119919BA1188B16AF5EB118AF5E81088AA +:10BD78001248E948004433AB089CF01F001DC0E09E +:10BD8800F8C8FFFC19AB119919BA1188B16AF5EB1B +:10BD9800118AF5E810881248C0386918A198E9484E +:10BDA800004833BB089CF01F0012C0E0F8C8FFFC35 +:10BDB80019AB119919BA1188B16AF5EB118AF5E82E +:10BDC80010881248C0286918E948004C6828F0C94A +:10BDD800FFF0C0F11298C1C88000CEC480039DC492 +:10BDE8008003A1C880039D9C800094C48000AAF4AD +:10BDF800F1390013F13B0010F13A0011F13800124B +:10BE0800B16AF5EB118AF5E81088F3E8100889A8FB +:10BE1800301B089CF01F0084C0E0F8C8FFFC19AB79 +:10BE2800119919BA1188B16AF5EB118AF5E81088E9 +:10BE3800124889B8303B089CF01F007BC0E0F8C866 +:10BE4800FFFC19AB119919BA1188B16AF5EB118A7F +:10BE5800F5E81088124889C831CB089CF01F007299 +:10BE6800C0E0F8C8FFFC19AB119919BA1188B16A7A +:10BE7800F5EB118AF5E81088124889D8306B089CD0 +:10BE8800F01F00691892C2E01998A38889E8582819 +:10BE9800F9B80B02E9F8BA0E3003C1D8E608150262 +:10BEA800E6C9FFF22FE8E8090029E4080008113E76 +:10BEB800113AB16AF5EE118A118EF5EE108A1191D8 +:10BEC800069CF5E11001F2CBFFFC93112FF3F01F54 +:10BED80000575C5368E81033CE23069C4D4BF01F87 +:10BEE80000536CA43008E93A00123089EF58001E5C +:10BEF800F20A1800E9F91E12E9F81E130C9C300A20 +:10BF0800E8CBFFD8F01F004BE93800132FF8E96899 +:10BF180000133018E958001EC7E820383029F20805 +:10BF28001800E08B007930080C9CEF58001EF01FB9 +:10BF38000042C7183069F2081800C3513019EF38A9 +:10BF48000012F20818005F0B3039F20818005F0978 +:10BF5800F7E91009C0813049F2081800C040F40818 +:10BF68001800C5916CA40C9C3003EF53001EF01F01 +:10BF780000330C9C4AEBF01F00320C9C4ACBF01F9C +:10BF880000310C9C4AABF01F0030E939001230C870 +:10BF98000C9CF0091800E9F31E13E9F81E12F01FB3 +:10BFA800002BC398302AF4081800C351EF38001248 +:10BFB800F2081800C30130086CA4EF58001E336B58 +:10BFC800089CF01F0019C270F8C8FFFC19AB119942 +:10BFD80019BA1188B16AF5EB118AF5E81088124888 +:10BFE80089986828F0C9FFF0C0311298C108F13962 +:10BFF8000013F13B0010F13A0011F1380012B16A58 +:10C00800F5EB118AF5E81088F3E8100889A80C9C6C +:10C01800F01F000F0E9CF01F000F0A9CF01F000E6F +:10C02800D83200008000AAF48000C19C8003B409C3 +:10C038008001384C8000BAA88000CABC8000CBC8F8 +:10C048008000CA748000CA928000B5988000B6B497 +:10C058008000AEC48000D13C335B0E9CF01F00030F +:10C06800FE91FE66CD8B00008000AAF4D4314C18F6 +:10C07800301370073002069430813050C7686EA6BE +:10C088005806C720ED05001EE6051900E0880006E1 +:10C098002015ED55001EC688E6051900C651ED3875 +:10C0A8000012306AED52001EF40818005F0A30C909 +:10C0B800F20818005F09F5E91009300AF4091800B8 +:10C0C800C501E8081800C0B1ED380013E0081800F1 +:10C0D800E08B00360E9CF01F0028C468E2081800A8 +:10C0E800C191ED380013E8081800E08B0010300A01 +:10C0F800ECCBFFD80E9CF01F0021ED380013ED5556 +:10C10800001E2FF8ED680013C2F80E9CF01F001CEB +:10C11800C2B8E0081800C0510E9CF01F001AC248AF +:10C128003049F2081800C0F1ED380013E208180091 +:10C13800E08B00060E9CF01F0014C1680E9CF01FD7 +:10C148000013C0F83039F2081800C0E1ED380013C8 +:10C15800E8081800E08B00060E9CF01F000DC04890 +:10C168000E9CF01F000C6E075807C8A1D8320000BB +:10C17800000080CC8000B6B48001384C8000BAA89A +:10C188008000B2E08000B7DC8000B1D88000B4AC99 +:10C198008000B598D4013019F20C1800E08B001D0E +:10C1A800580B5F1A48D9720958095F19F5E900094F +:10C1B800C13017B9178E179A17A8B16AF5EE118A08 +:10C1C800F5E81088F3E81008C0704858304AF00CB9 +:10C1D800002CF01F0004D80200001D5800001D505C +:10C1E8008002E736D42130181897F00B1800E08B3E +:10C1F80000074868304AF00B002BC038304A484BDB +:10C20800F01F00040E9CD82200001D508003B409C2 +:10C218008002E736D4313013189516911492E60C43 +:10C228001800E088000F4BB8201D1AD8E0680246B5 +:10C238001AD84B984B9C1AD8F01F00392FCDC0083C +:10C248004B89F20C0028F20C072B11BA119911A88E +:10C25800B169F3EB1189F3E81088F5E81008C0E13B +:10C268004AC8201D1AD8E06802471AD84AE84ABCCA +:10C278001AD8F01F002B2FCDC008300AE06B011030 +:10C28800149CF01F002A1897C041E06600FFC758A9 +:10C2980078045804C0E049F8201D1AD8E068024D17 +:10C2A8001AD84A3849DC1AD8F01F001D2FCDC0080B +:10C2B800781630CA089B0C9CF01F001EECC9FFF4CE +:10C2C800AC92ACD3E5D2C110ACA3ACC42011AC8203 +:10C2D80032EC2FF1F2C8FFFF300AC05810CBF5D26C +:10C2E800C0082FF1038BF4C2FFFFE80B18005F139F +:10C2F800F80B18005F16E7E60006E8061800CEF10E +:10C30800B28A0389E8091800C1601099CE3B000081 +:10C318008003A1E48003A22880039D9C800094C42C +:10C3280000001D508003A2408000D3188003A2643F +:10C338008002E8BCF0CBFFFB10C9B089B0A9301966 +:10C34800B099B0B96E180E9C101B5C7BF01F000CE6 +:10C3580048C848D6F0050025335A6C0C0A9BF01FD4 +:10C36800000B6C0C0A9A33590E9BF01F0009EDDC88 +:10C37800C0080E9CF01F00070C9CD8328000D21019 +:10C3880000001D5000001D5880011320800114F08A +:10C398008000D13CD421189A303CF80A1800E08873 +:10C3A800000F4BE8201D1AD8E068028A1AD84BC83B +:10C3B8004BCC1AD8F01F003C2FCDC0084BB8E06713 +:10C3C8000118F4070247F007000730180F8B169979 +:10C3D800F00B1800C0A0C603302BF6091800C0F0F7 +:10C3E800F8091800C4C1C4383008AEABAEB8AE986E +:10C3F800EECBFFF43028300CAE88C3680FA92019A3 +:10C408005C59AEA9C4910FBB2FFB5C5BAEBB0F9C04 +:10C41800304EFC0B1800C251F20C1800C1214A4AD8 +:10C4280015FB15CE15DC15EAB16CF9EE118CF9EA9D +:10C43800108AF7EA100AC050AEB9AEA8AE98D82252 +:10C44800EEF801105808C070EEFA0114300BEECC6B +:10C45800FFF45D183008AE883008EF480110D82284 +:10C46800AEABEECBFFF4F01F0013D8226E282018D5 +:10C478008F28C121EF480110AE88D8224878201DA6 +:10C488001AD8E06802C61AD848B8486C1AD8F01FFB +:10C4980000062FCDC008D8228003A1E48003A28023 +:10C4A80080039D9C800094C4000018F000001D507B +:10C4B8008000C21C8003A29CD431580B5F081292E2 +:10C4C80016974BB914967209189558095F04F1E448 +:10C4D8001004E08100B6580CE08000B31989E8091F +:10C4E8001800E08000AEF01F0033E04C00FFE08B46 +:10C4F80000A84B1B0A9CF01F0031C08137F8AEA47E +:10C50800AE88AE9C3018AEB8D8320A9CF01F002C0A +:10C51800F8081618AE88F1DCC208AEBCAE98F1DC9B +:10C52800C108AEA85BFCE081008F4A63300430305C +:10C5380006910788E0081800C171E80400280A9CE1 +:10C54800F00B1503101B2FFBE20B003B2FCBF01F4A +:10C55800001BC0A1E0680118B13449A8F004000428 +:10C56800E8F8010CC0782FF4E6C3FEE85844CE2161 +:10C578003FF8F0091618AE89F3D8C208AEB8AE99DC +:10C58800F3D8C108AEA95BF8C5E1300748E848DB35 +:10C59800118A0E9C0E9930313043F2C0FFFF178488 +:10C5A80016985804C1211297C358000000001D585E +:10C5B8008002EDD08003A2BC8002ECC880011E106E +:10C5C800000018F0000018ECE2041800C0C117C8F9 +:10C5D800F4080104F40801081838E08A0005F9D4C1 +:10C5E800C0081297F3D0C008F6CBFEE8E609180099 +:10C5F800CD513039F2071800E08B0027494BE0682D +:10C608000118EE080248F6080008118BF20B180012 +:10C61800C1B1F4C9FFFFB0CAF1460110301AF142A6 +:10C628000114B08AF0CCFFF448A80A9BB089F01F27 +:10C63800000A0E9CF01F0009E06C00F2D832E06C92 +:10C6480000F7D832D83AE06C00FFD832000018F072 +:10C65800000018EC8002ED708000C39CD40148985B +:10C6680070085808C0D0300CF01F0007301CF01FAD +:10C678000006302CF01F0004303CF01F0003D802E5 +:10C6880000001D588000C39CD421494C4946F01F26 +:10C6980000156C0518975805C1E1F01F00138D0CA3 +:10C6A800C1A0492B0A9AF01F00120A9A491B6C0C68 +:10C6B800F01F00116C085808C0E05807C0C0EE0908 +:10C6C800161848E8B0B7B089F3D7C208EFD7C10841 +:10C6D800B099B0A7D82200008003A2C800001D5856 +:10C6E80080011E10800112008003B40980011260CD +:10C6F8008000C704800111F800001D50D431E068A3 +:10C7080002001496944AF00A1900E08B00E331986D +:10C71800F00A1900E08800DE4DF75C7A30090E9BBC +:10C728000C9CF01F005E8C48F8081900E08100D2CC +:10C738000F993038F0091800E08B00CCE06501183B +:10C74800AB394D75120530290B8AF20A1800E081C1 +:10C7580000C1AA880FBAF5DAC004AADA0FD80FCB3D +:10C76800F1EB108B0FF80FEC5C8BF1EC108C3009AF +:10C778005C8C0FA8F2081800E084009DF20A1800EB +:10C788005F18301AF40B18005F1AF5E81008F20861 +:10C798001800E0810090EAC4FFF42F4708980F8939 +:10C7A800129AE21A00C0E04A00C0C1502FF7C098A0 +:10C7B800F3DBC0082FF7118BF40B1800C7B12FF863 +:10C7C800F2CB00010F8A5809CF41F20A1800C03095 +:10C7D8002FF8CE6B4B0B30082F4B1739129AE21AF1 +:10C7E80000C0E04A00C0C060120B1789F0091800A9 +:10C7F800CF51F1DCC0082FBB300E301A3047C58846 +:10C808001739129CE21C00C0E04C00C0C060120B3B +:10C818001789FC091800CF512FFB17CC17D9B1691C +:10C82800F3EC118917ECF7330008F3EC108917A221 +:10C8380017FC1781F9E91009F73C0009F9E3108C96 +:10C8480017B35C8CE7E2108317925C83E5E11082F2 +:10C85800F4021900C281F4031900C251EE0C190048 +:10C86800C2218B29E8593A80E0880005E8783A80A7 +:10C878008B28EAC7FEF42F6B304A0E9CF01F000984 +:10C88800EAF801105808C250EAFA01140E9B089CF5 +:10C898005D18C1F800001D5C8000CEC4000018F0CF +:10C8A8008002E7365C7C20182F6C5C58180B5808FF +:10C8B800CA81EAF801105808C070EAFA0114300B6E +:10C8C800EACCFFF45D183008AA883008EB4801105C +:10C8D8000C9CF01F0002D8328000D13CD401F01F1C +:10C8E8000003F01F0003D8028000C8F88000C6903B +:10C8F800D42149A949ABF2CCFEC4F2C8FF54300A8E +:10C90800F2C9FF50910A930AB22A172EF14EFFFC82 +:10C918002F092F081838CF71492949382FD9149C65 +:10C92800E019FFFCF0C6FFDC48D7490E910CEE0A6F +:10C938000405189BC098700493042FFB9109FC0A06 +:10C9480005045C8B0809EA0B1900CF632FC82FEA8E +:10C958000C38CED1D8220000000080D48003A2D8A1 +:10C9680000001F5C000072E88003A394D401580BF8 +:10C97800C200F1DBC002C0E048F8201D1AD8E06808 +:10C98800016B1AD848D848EC1AD8F01F000E2FCDE2 +:10C99800C00848D8F00C03299709F00C092B48B8AF +:10C9A800A56CF00C000CF8CCFF54780820189908F6 +:10C9B800D80200008003A2EC8003A33080039D9C72 +:10C9C800800094C4000072E8000080D4D421189834 +:10C9D800588CE088000F49F8201D1AD8E068013DFE +:10C9E8001AD849D849DC1AD8F01F001D2FCDC00825 +:10C9F80049CE49D9FC0C032CF0CAFFF5580CC230BB +:10CA0800A56AF00B15047807F20B000BFC08092740 +:10CA1800F6CBFF5414097608720A2FF8103AF3F887 +:10CA28003A009708F1DCC002C13048A8201D1AD886 +:10CA3800E068014F1AD848D8488C1AD8F01F000867 +:10CA48002FCDC008A56A140992282FF8B228D82239 +:10CA58008003A2EC8003A35080039D9C800094C4B3 +:10CA6800000072E8000080D48003A370580BC0C097 +:10CA780017B8178A179917ABB169F3EA1189F3EB5D +:10CA8800108BF1EB100B993B5EFC580BC0C017B82C +:10CA9800178A179917ABB169F3EA1189F3EB108B71 +:10CAA800F1EB100B992B5EFC4828910C5EFC000002 +:10CAB800000080D0D4211897F9380035EDB800006F +:10CAC800C0D1A1C8F968003578885808C0205D1819 +:10CAD8006E785808C0300E9C5D18D822F93C003595 +:10CAE800F9DCC0015EFC580CF9FB1A075EFCD703A1 +:10CAF800D421300A18971696302C96CBF01F001ABE +:10CB08001895C041E06600FFC2B80C9BF01F0017E3 +:10CB1800EDDCC008C0500A9CF01F0015C2180A9826 +:10CB280070095809C0301298CFCB6EF95809C15016 +:10CB38006F095809C0E148F8201D1AD8E068025367 +:10CB48001AD848D848DC1AD8F01F000D2FCDC008D5 +:10CB58009305EF480040C048EF4800408FF50C9C13 +:10CB6800D82200008000D3188000CF988000D13CE4 +:10CB78008003A3A88003A44480039D9C800094C4E0 +:10CB8800D4211897F9380035EDB80000C170A1A874 +:10CB9800F968003578885808C0205D186E785808FC +:10CBA800C0300E9C5D18EF380035EDB80005C06147 +:10CBB8000E9CEECBFFFCF01F0002D8228001370C40 +:10CBC800D42117881799B169F3E8118917A8F3E8F0 +:10CBD800108917B81697F1E91009189678181039BE +:10CBE800C27049A8700CC0A8780978356C1810393B +:10CBF800C041301BF01F00160A9C580CCF614958E1 +:10CC08007008C14870095809C1006C1A1439C0D19C +:10CC18000F8A0F99B169F3EA11890FAAF3EA10890B +:10CC28000FBAF5E91009910970385808CEC10F8A72 +:10CC38000FB90F98B168F1EA11880FAAF1EA1088C4 +:10CC4800F3E810088D18D8220000820C8000E12437 +:10CC580000008214D421149712961895F01F001022 +:10CC68005807C0C00FB80F8A0F990FA7B169F3EA28 +:10CC78001189F3E71087F1E710078B275806C0C022 +:10CC88000DB80D8A0D990DA6B169F3EA1189F3E67D +:10CC98001086F1E610068B36D82200008000CBC83B +:10CCA800D4213006999899169926993699A6997695 +:10CCB800998699F6F94600404908FAC4FFEC681EBF +:10CCC8006804F96600351185F96500382FF5B085D7 +:10CCD8001897994EF01F000A0E9C5D145C5C4898EA +:10CCE800580CEC071710F1F90000EFF90A00F1F7FA +:10CCF8000A000E9CD82200000000730C8000CC5C57 +:10CD0800000080CC1898300CC0482FFC70085C5C80 +:10CD18005808CFC15EFC580CF9F81207F9B901019F +:10CD2800F1D9E108F9F81C075EFCD703D401580CC7 +:10CD38005F08580B5F09F3E81008C1304978201DD7 +:10CD48001AD8E068028F1AD84958496C1AD8F01FC7 +:10CD580000162FCDC008964AF4080008B848129C5F +:10CD6800984878095809CF819859F0091900C0E006 +:10CD780048A8201D1AD8E06802971AD848B8489CD5 +:10CD88001AD8F01F00092FCDC0089649990BF20850 +:10CD98000008B848D80200008003A4708003A4B437 +:10CDA80080039D9C800094C48003A4ECD421169732 +:10CDB800F01F00065807EFF81207F9B90101F1D979 +:10CDC800E108EFF81C07D8228000CD34D421580C94 +:10CDD800C0E14B58201D1AD8E06801B01AD84B386A +:10CDE8004B3C1AD8F01F00332FCDC008580BC03168 +:10CDF800169CD8223008F00B1900C154F60911000E +:10CE080098585C89F2081900C0F24A78201D1AD88F +:10CE1800E06801B71AD84A884A5C1AD8F01F00257A +:10CE28002FCDC0081699F93E000C300A3037F40EA1 +:10CE380019005F08EE0E19005F061497104678185F +:10CE4800F4061800C0A0F00B01099919F8CAFFF000 +:10CE58001439C2029918DA2A201E3017EE0E19006A +:10CE6800E08B000CF40B1900C1D4985AF20A19008F +:10CE7800C19316189918C0E848B8201D1AD8E06858 +:10CE880001E61AD848D848AC1AD8F01F000A2FCDA6 +:10CE9800C00898581608B8589848F00B000BB84BBB +:10CEA800D82ADA2A8003A47080039EA480039D9C5C +:10CEB800800094C48003A51C8003A53CD43116913E +:10CEC8001497580CC0E14AD8201D1AD8E068033ED0 +:10CED8001AD84AB84ABC1AD8F01F002B2FCDC00860 +:10CEE800580BC070300518960A920A930A90C388A6 +:10CEF8004A28201D1AD8E068033F1AD84A384A1C25 +:10CF08001AD8F01F00212FCDC0085809C0A08C588E +:10CF1800F208010AF0091900C043F3DAB010C1F8A9 +:10CF2800F1D9C0108C54E8090109EE091900EE097D +:10CF380017B06C1BE9D9B010F9D5C010100BE20C72 +:10CF4800000C089A5C7AF01F0012E8030003081727 +:10CF5800E80500055C835C855C8730096C0658062B +:10CF68005F1AE40719005F18F5E80008E0081800E0 +:10CF7800CCD1069CD83200008003A4708003A5B0F1 +:10CF880080039D9C800094C48003A5D08002E7366E +:10CF9800D431580C5F08580B5F0918961697F3E8B8 +:10CFA8001008C06198499648F0091900C0E24C7809 +:10CFB800201D1AD8E06802FE1AD84C584C5C1AD8C2 +:10CFC800F01F00452FCDC00830050A945806C0E16F +:10CFD8004BE8201D1AD8E06803031AD84BF84BDC3D +:10CFE8001AD8F01F003D2FCDC0088C5808995C79DD +:10CFF8008E53F5D8C010F7D3C010121AF3D5C0104D +:10D00800F6090109123AE7D5E413E8091750F1D9EE +:10D01800E51308985C786C1C100CF1D5C0105C8383 +:10D028006E1BF5D3C010100BF01F002DE604000492 +:10D038008C585C84F0041900E088000F4A38201DE1 +:10D048001AD8E068030F1AD84A684A2C1AD8F01F71 +:10D0580000222FCDC008F0041900EDF60000F9B445 +:10D068000000E60500058E585C85F0051900E0888B +:10D07800000F4968201D1AD8E06803151AD849A876 +:10D08800494C1AD8F01F00142FCDC008F00519001C +:10D09800EFF72000F9B502005807C2908E598E4864 +:10D0A800F0091900C2416E085808C2104878201DBE +:10D0B8001AD8E068031F1AD848C8486C1AD8F01F55 +:10D0C80000062FCDC00800008003A4708003A5F4DB +:10D0D80080039D9C800094C48003A6248002E736C8 +:10D0E8008003A6348003A64C8003A6685806C16056 +:10D0F8008C598C48F0091900C1116C085808C0E017 +:10D108004898201D1AD8E06803241AD84878488C13 +:10D118001AD8F01F00082FCDC0085807FE91FF58F5 +:10D128000E9CD8328003A4708003A66880039D9C5F +:10D13800800094C4D421189B580CC0E14AB8201D23 +:10D148001AD8E068021C1AD84A984AAC1AD8F01FB4 +:10D15800002A2FCDC008F939000C3038F009180022 +:10D16800E088000F4A18201D1AD8E06802281AD84B +:10D178004A284A0C1AD8F01F00202FCDC0083007C3 +:10D18800303530169679F2C800015C885809C0E13C +:10D198004968201D1AD8E06802351AD84988495CC0 +:10D1A8001AD8F01F00152FCDC008B6785808C1B19D +:10D1B800F738000C169CF0C900017604EA0819003B +:10D1C800C031308CC068EC091900E08B0006307C57 +:10D1D800F01F000CC038F01F000C2FF7089B5C579D +:10D1E8005804CD110E9CD8228003A47080039EA4FD +:10D1F80080039D9C800094C48003A6948003A6AC01 +:10D208008000C9748002E28CD421580CC0E14B988C +:10D21800201D1AD8E068015F1AD84B784B7C1AD8C1 +:10D22800F01F00372FCDC0083019F938000CF2086C +:10D2380018005F1A3039F20818005F19F5E900097B +:10D24800C1405808C1203029F2081800C0E04A98A7 +:10D25800201D1AD8E06801631AD84AA84A7C1AD84F +:10D26800F01F00272FCDC0089848F00B1900C3F213 +:10D27800F3D8C0101897F1DBB0105C7B121BC27892 +:10D28800E04BFFFEE08A000F49A8201D1AD8E0688D +:10D2980001771AD849C8499C1AD8F01F00192FCD10 +:10D2A800C0088E481608AE486E075807C0E14918EE +:10D2B800201D1AD8E068017B1AD8494848FC1AD8BA +:10D2C800F01F000F2FCDC008F1DAB0108E59F00909 +:10D2D800010AF2081900FE9BFFD5AE48AE586E0C45 +:10D2E800580CC030F01F000A30088F08D822000000 +:10D2F8008003A4708003A70080039D9C800094C4D1 +:10D308008003A7188003A7348003A7488000D13C76 +:10D31800D431202D16971495581CC0B0C083582CB2 +:10D32800C040583CC0B1C1783004C0583144C0280E +:10D3380030042EC42E445C84C0F84C08201D1AD832 +:10D34800E06800D11AD84BE84BEC1AD8F01F003E21 +:10D358002FCDC00830045825E08B00065815E08210 +:10D3680000DDCBF85835E08100E6308CF01F00373F +:10D378001896E08000F25C740E99E8C8FFFD5C79AD +:10D38800E018FFFCB847E06A02443000F4080108DE +:10D39800F8040004F0090D472ED4E014FFFCAC5744 +:10D3A8009914F965000C99005C77F8C3FDAC0E047C +:10D3B8000833C0E24A18201D1AD8E06800EB1AD8D2 +:10D3C8004A384A0C1AD8F01F00202FCDC008580838 +:10D3D800E089000F4998201D1AD8E06800ED1AD896 +:10D3E80049C8498C1AD8F01F00182FCDC008F20779 +:10D3F800010700980A9918943015E0610243B8753E +:10D40800E0620244C6A850195008308CF01F000F83 +:10D418000E9B189A5C8BF4CEFFF0F6011900F60CFF +:10D428001720E40C173040194008580AC1610C9CB9 +:10D438001496F01F0009C9088003A4708003A76030 +:10D4480080039D9C800094C48000C9D48003A77C7D +:10D458008003A7B08000D13C9508890AF569000CC3 +:10D46800F560000DE047FFFFC0E14BD8201D1AD83A +:10D47800E06801071AD84BB84BBC1AD8F01F003B1C +:10D488002FCDC008951EB45CB44BFDDEC002C0E0D1 +:10D498004B38201D1AD8E068010D1AD84B484B2C80 +:10D4A8001AD8F01F00322FCDC0085C7C8CDB18170F +:10D4B80014946C1CF80B000B1633C0E24A88201D2C +:10D4C8001AD8E06801101AD84AA84A7C1AD8F01F5E +:10D4D80000272FCDC008B4755807FE99FF96C3786A +:10D4E8000E985C782FD8E018FFFC5C74E8CCFFED50 +:10D4F800E01CFFFC100CF01F00201896C2D030086A +:10D50800F8040004AC572ED4B847E014FFFCF968BF +:10D51800000C99149908C1B8307CF01F00181896AF +:10D52800C1B03008AC57F965000CB847990899188C +:10D53800C0E848B8201D1AD8E068013D1AD8490843 +:10D54800489C1AD8F01F00092FCDC0083018AC78B5 +:10D558003008ED68000D0C9C2FEDD8328003A470C4 +:10D568008003A7E480039D9C800094C48003A7F8EF +:10D578008003A77C8002E2A48000C9D48003A82885 +:10D58800D43149B8781918951094300CF2C2FFF4C8 +:10D59800F3310009700718961893C1E8EF380010A6 +:10D5A8000238C1716E585808C1400A9A0E9B6E6CB9 +:10D5B80004995D18C0E05806C0410C95301CC0A8FD +:10D5C8006E388D3868088F388907301C3005C028B8 +:10D5D800300C0E966E37E60C18005F0858075F1976 +:10D5E800F3E80008E6081800CDA1D832000073104F +:10D5F800E06C00FB5EFCD421E067040078A8F90B1E +:10D60800002C78C9F5DBC010F90E003C100AEE0EAC +:10D618001900E0880005E06E0400C0285C7EF4096B +:10D628000107EE0E010EC076F95B002E78CCF40CE3 +:10D63800010CD822F009010A580AE08A00063008CD +:10D64800F958002ED82AF2080108F958002ED82ACD +:10D65800996B5EFCF94B008C5EFCF94B00885EFC14 +:10D66800F94B00985EFC998B5EFCF96A0039F94B1E +:10D6780000945EFC5EFC5EFC48A87008C028703808 +:10D688005808CFE148887008C02870385808CFE19A +:10D6980048687008C02870385808CFE15EFC000060 +:10D6A8000000820C0000821400008220D4014A6825 +:10D6B8007008C30870495809C0E14A48201D1AD8A3 +:10D6C800E06805AC1AD84A284A2C1AD8F01F00225C +:10D6D8002FCDC0085819C0E149C8201D1AD8E068E4 +:10D6E80005AD1AD849D849BC1AD8F01F001B2FCD50 +:10D6F800C00858A9C0E14958201D1AD8E06805AEED +:10D708001AD84978493C1AD8F01F00132FCDC00801 +:10D7180070385808CD0149387008C128704958A98F +:10D72800C0E048A8201D1AD8E06805B11AD848E812 +:10D73800488C1AD8F01F00082FCDC0087038580838 +:10D74800CEE1DA0A0000820C8003A8688003A8AC46 +:10D7580080039D9C800094C48003A8D88003A904FA +:10D76800000082208003A934D43118961497784891 +:10D778005808C0E04C48201D1AD8E068011A1AD889 +:10D788004C284C3C1AD8F01F00432FCDC008580A2B +:10D79800C3514C19720C4C19720A4C19109E9207FD +:10D7A8004C08E069100070052FF70A985C87EE0EA8 +:10D7B8001900F2071790C088F104001C0E93EE04BC +:10D7C8001900CF3070385808CF811898C088F104F4 +:10D7D800001C0E93EE041900CE8070385808CF81D3 +:10D7E8001498C088F104001C0E93EE041900CDD0E3 +:10D7F80070385808CF814AA8B0074A887008C1F81D +:10D80800F109001C0E93EE091900C181700A580A2B +:10D81800E0800099580BE0800096178C1799B16941 +:10D82800F3EC118917ACF3EC108917BCF9E910096E +:10D83800E0800089123AE080008670385808CE11DE +:10D8480049887008C1A8F109001CEE091900C141F6 +:10D85800700A580AC770580BC750178C1799B169C6 +:10D86800F3EC118917ACF3EC108917BCF9E910092E +:10D87800C690123AC67070385808CE6148A870052C +:10D888000A98C2D88003A8688003A96080039D9C79 +:10D89800800094C40000822000008214000001F877 +:10D8A8000000820C0000821CF109001C0E93EE0996 +:10D8B8001900C141700A580AC450580BC430178C5B +:10D8C8001799B169F3EC118917ACF3EC108917BCFF +:10D8D800F9E91009C370123AC35070385808CE518C +:10D8E80049A87008C158F109001CEE091900C0F1D7 +:10D8F800178A1799B169F3EA118917AAF3EA108907 +:10D9080017BAF5E91009700A123AC1C070385808F8 +:10D91800CEB1580BC11017891798B168F1E9118871 +:10D9280017A9F1E9108817B9F3E81008C050304A70 +:10D938000C9CF01F00078D354868ED57001C9106B8 +:10D94800D83AE06C00F5D832000082208002E73631 +:10D958000000821CD4211897169CF01F0008C0B044 +:10D96800F908002C5808C0702288EE081900F00742 +:10D9780017305C870E9CD82280012228D421F90810 +:10D98800002C1897F3D8C010E06CFFFFF5DBC0102F +:10D99800F8090109123AE08A000F4948201D1AD8EF +:10D9A800E06801BD1AD84928492C1AD8F01F00127E +:10D9B8002FCDC008100BE0680800EF5B002CF00BBF +:10D9C8001900EFF8BC160E9CF01F000CE04C01FF8C +:10D9D800E08A000AEF380026A1B80E9CEF680026FE +:10D9E800F01F0007D82200008003A8688003A988D8 +:10D9F80080039D9C800094C48000D5FE80010CECBF +:10DA0800D4211896304CF01F000A1897C0E0ECE8B3 +:10DA18000000F8E90000ECE80008F8E900086C48A4 +:10DA28009948781CF01F00030E9CD8228000C9D4A6 +:10DA38008000CD1ED4211896580CC0311897C0B854 +:10DA4800781C580CC030F01F000518970C9B304C00 +:10DA5800F01F00030E9CD8228000D13C8000C974BE +:10DA6800D42130071896C0880C9C6C06F01F00055E +:10DA7800F80700075C575806CF810E9CD822000093 +:10DA88008000DA3CD4217848189758A85F1A5808BB +:10DA98005F19F5E90009C2005818C1E0F8FC0084D4 +:10DAA800580CC060F01F000D3008EF4800843FF8A4 +:10DAB800EEFC0080EF58003AF01F000930066FECCA +:10DAC800EF460080F01F00066FFCF01F0005EF46D0 +:10DAD800007CEF460078D8228000D13C8000DA68CC +:10DAE800D421169778081638C04176389908C11895 +:10DAF8004B899308C0A870390E39C0614B599308F7 +:10DB08006E399139C06812985808CF614B1993083B +:10DB180030060E9C8F36F01F00306E4858A85F19EB +:10DB280058185F181268EC081800C0C0EF380026B3 +:10DB3800EDB80000C071A1B80E9CEF680026F01F78 +:10DB480000276E485818C3206FE85808C0E04A48B4 +:10DB5800201D1AD8E06804F91AD84A284A2C1AD87D +:10DB6800F01F00222FCDC0086FF85808C0E049C840 +:10DB7800201D1AD8E06804FA1AD849D849AC1AD82E +:10DB8800F01F001A2FCDC008EEF800805808C0E03A +:10DB98004938201D1AD8E06804FC1AD84958492C7D +:10DBA8001AD8F01F00122FCDC00830088F48F01F78 +:10DBB8000012C0E148A8201D1AD8E06805021AD84A +:10DBC80048E8489C1AD8F01F00092FCDC008D82271 +:10DBD800000082188000DA8C80010CEC8003A868B1 +:10DBE8008003A9AC80039D9C800094C48003A9C4D1 +:10DBF8008003A9E08000D6B48003A9F8D42118973F +:10DC080078485808C0E04A68201D1AD8E0680175AD +:10DC18001AD84A484A4C1AD8F01F00242FCDC008F9 +:10DC2800303CF01F00231896C380EF08001CF958F9 +:10DC3800001C6E6899688E48A1B8B8483018994891 +:10DC4800EF38000BF968000BEF38000AF968000A92 +:10DC58006E089908497972080E38C0316E38C108C3 +:10DC680049599308C0A870390E39C06149299308E9 +:10DC78006E399139C06812985808CF6148E99308FD +:10DC880030080E9B8F38302CF01F000C48C948D83C +:10DC98008D8970098D3991060C9CD8228003A8685B +:10DCA8008003AA1880039D9C800094C48000C9D476 +:10DCB8000000821C000082188000C9748000D5F81A +:10DCC80000008214D431204D4B583005700910964D +:10DCD8002FF90A9491090A934B2830627007E08F54 +:10DCE800019E6E485808C0E14AF8201D1AD8E0681D +:10DCF80002571AD84AD84AEC1AD8F01F002E2FCD4E +:10DD0800C0085818C0E14A88201D1AD8E06802588F +:10DD18001AD84A984A6C1AD8F01F00262FCDC00886 +:10DD280058A8C0E14A08201D1AD8E06802591AD834 +:10DD38004A2849FC1AD8F01F001F2FCDC0085828C0 +:10DD4800C071EF38004EE4081800E0800081EF3819 +:10DD5800004E30CAF4081800C7A0EF3800AC10997C +:10DD6800E8081800C300EEF900A82FF9EF4900A849 +:10DD7800493A100AF53AFFFF1439C6B33009EF499A +:10DD880000A8E4081800F9B90801F1D9E808EFF883 +:10DD98008EAC0E9CF01F000BC5C80000000082105E +:10DDA8000000820C8003A8688003AA3C80039D9C25 +:10DDB800800094C48003AA688003AA948003AC38C6 +:10DDC80080010A20EF08003AE6081900F9B90401B1 +:10DDD800F1D9E408EFF84C1D6FF85808C3A0EF0913 +:10DDE800003AEF08004CF0091900C3356E4858286E +:10DDF800C100EF09004AEF0800484CD1A3581208A7 +:10DE0800EF39004EE2090709F0090948EF58004CBC +:10DE1800EF080060EF090056F0091900F00917B083 +:10DE2800EF08003CF3D9C02FEF590058F00A15014C +:10DE3800F0091900EFFA3C2CEF08003CEF53003AC8 +:10DE4800EF5800560E9CF01F003BC0383018C02811 +:10DE580030086E495869C0B16C0B6EDAF60A010ACF +:10DE6800E04A0028E08800042FF85C588ECAEDBA12 +:10DE78000003C39158495F0A58795F091449E809B2 +:10DE88001800C3106C0AEEFC00A0EEF100A4F80123 +:10DE980002416ED9EEFB009CF4090109E20B000E69 +:10DEA800E06A01F4FC0A0D00FAE100080039E08894 +:10DEB80000062FF830115C58C178EF3100ADE20C44 +:10DEC800034BF60A0D0A1439E088000E50180E9C10 +:10DED800F01F0019EF3900AD30012FF9EF6900ADDF +:10DEE8004018C0283001EEFC0080580CC1106ED9D3 +:10DEF8006C0A121AEF09004CF2091006123AC08394 +:10DF08005018F01F000E30004018EF4000806E4996 +:10DF18005839C1516C0A6ED9F4090109E049002841 +:10DF2800E08800182FF85C58C14800008003A85802 +:10DF3800800110608001109C8000DA685899C091B7 +:10DF48006C0A6ED9F4090109E04900F0E08B00047D +:10DF58005808C4900E9CF01F00434C385805C14027 +:10DF680070081037C0E14C18201D1AD8E06802E488 +:10DF78001AD84BF84BFC1AD8F01F003F2FCDC00819 +:10DF88006E388B38C13870090E39C0E04B78201DC7 +:10DF98001AD8E06802E81AD84B884B6C1AD8F01FD8 +:10DFA80000362FCDC0086E399109EEF80098580850 +:10DFB800C0403FBB6E6C5D185801C0F0EF180024DC +:10DFC800201DEEC9FFFC1AD80E9AEF18001C6EAB84 +:10DFD8006F7CF01F002B2FED0E9B302C6E37F01F3F +:10DFE8000029C1C8EF3900382FF9EF690038EF3A36 +:10DFF8000039F20A1800E08B0010EF680038EEF8DC +:10E0080000945808C0600E9B6E6C5D185C5CC04143 +:10E018000E9CF01F001D0E956E375807FE91FE638B +:10E0280049A849B410957006C6086C4858A8C0E0BD +:10E0380048E8201D1AD8E068030C1AD8495848DC6B +:10E048001AD8F01F000D2FCDC00868096CD8F20847 +:10E058000108E04800F0E08B004C0C976C36C4587F +:10E068008000DA8C0000820C8003A8688003AAC4B0 +:10E0780080039D9C800094C48003AAF08001023430 +:10E088008000C97480010CEC00008220000082101E +:10E098008003AB1C6A081036C0E149A8201D1AD8B5 +:10E0A800E068031B1AD84988498C1AD8F01F001851 +:10E0B8002FCDC0086C388F38C1386A080C38C0E0DA +:10E0C8004908201D1AD8E068031F1AD8491848FCC7 +:10E0D8001AD8F01F000F2FCDC0086C388B080C9B86 +:10E0E800302C6C36F01F000C5806CA01C0780C9C06 +:10E0F800F01F000A5807CCF1CE1B2FCDD8320000F4 +:10E108008003A8688003AB4C80039D9C800094C466 +:10E118008003AB748000C9748000DA8CD431202D60 +:10E1280018951691784858A8C0A1189B4A2CF01F3A +:10E1380000230A9B302CF01F0022C3B8780850082F +:10E148007818F903001C5018F9020024797778A68A +:10E15800F8F400987860189B49ACF01F00186BFC25 +:10E16800580CC030F01F00186BEC580CC030F01F72 +:10E178000016EAFC0080580CC030F01F00130A9B00 +:10E18800302CF01F000F5804C040009C3FBB5D14AA +:10E198005801C0F0201D5C72F1D3C0101AD20C9B3C +:10E1A800FAC9FFF4FACAFFF80E9CF01F00082FED19 +:10E1B8002FEDD832000082208000DAE88000C97490 +:10E1C8000000820C8000DA6880010234D42118969D +:10E1D800302CF01F00511897C5114D084D0A189999 +:10E1E8007008740BC0A870DAF60A010A123AF4092A +:10E1F8001720F00C172070385808CF61580CC04011 +:10E20800301BF01F0048302CF01F00431897C30143 +:10E218004C584C3A18997008740E37FBC178F13A8B +:10E228000014EC0A1800E08B000DF60A1800E08BC9 +:10E23800000970D7FC0701071237C033109CC0389B +:10E24800169A12977038149B0E995808CE91580C4C +:10E25800C040301BF01F0033302CF01F002F1897E0 +:10E26800C5704B28F10900D42019F15900D44AF897 +:10E27800F10900D42019F15900D4E06A00B0300B3C +:10E288000E9CF01F002B3408EF6800143FF8EF686D +:10E29800000B4A384A7A70097408F2080008950891 +:10E2A800EF48006CEF480068EF48005CEF4800500A +:10E2B8003008EF6800ADEF680038E0680800EF58F4 +:10E2C800002EEF58002C3068EF58004AEF58004CE9 +:10E2D800E0681000EF580072E0680200EF58003C58 +:10E2E8003FF8EF58003A3018EF5800564928EF48E1 +:10E2F800008CE068DD00EA18006DEF48009CE078CB +:10E3080024F88FD9EF4800A03098EF4800A40E9C5D +:10E31800D82200008000C9D40000822000008210AA +:10E328008000E1240000820C000080D48002E8BC58 +:10E33800000001F48000E5ECD401340CF01F000269 +:10E34800D80200008000E1D4D431189714961293B3 +:10E35800169578445804C0E04C98201D1AD8E068F7 +:10E36800020A1AD84C784C8C1AD8F01F00482FCDC6 +:10E37800C008580BC041E06600F7CB78304A140C4F +:10E38800F01F0043EF560024EF08001CE8081900AE +:10E39800C34110944BF84C0970064C08720B700C72 +:10E3A8004BF9E06A100092082FF80C995C88F00489 +:10E3B8001900F4081790C078F30E001CF00E19002D +:10E3C800CF4072395809CF911899C078F30E001CC4 +:10E3D800F00E1900CEA072395809CF911699C0785D +:10E3E800F30E001CF00E1900CE0072395809CF91B7 +:10E3F8004AB9B208EF58001C4AA84AB9700A72080C +:10E40800F40800089308EF48005CF0C90001E068D0 +:10E418000800EF580060EF58002CEF58002E300825 +:10E428008FC88FA8E0680200EF49006CEF490050E0 +:10E43800EF58003C0A9BE06C0200F01F001C5C8C4B +:10E44800F808100AEF5800583018EF430090EF58BA +:10E458000056EF5C003C30288F48495972080E3846 +:10E46800C0316E38C2C849399308C26870390E394C +:10E47800C221490993086E399139C2288003A868D6 +:10E488008003AB9C80039D9C800094C48002E73687 +:10E498000000820C0000821400008220000001F8B5 +:10E4A80000008210000001F48000D95C0000821C8A +:10E4B8000000821812985808CDA148D9930848D866 +:10E4C80070098F3991073019201D30081AD9109A10 +:10E4D8003029109B0E9CF01F00082FEDEDDCC008C2 +:10E4E800C0410E9CF01F00050C9CD8320000821819 +:10E4F8000000820C8001035080010CECD421189795 +:10E5080078465826C390E08B00075806C0C05816B6 +:10E51800C071C2785846C370C3635876C3C030060A +:10E528000C97C4184A8972081838C0317838C1085D +:10E538004A699308C0A870390E39C0614A399308EE +:10E548006E399139C06812985808CF6149F9930813 +:10E5580030080E9B8F38302C1097F01F001DC0A874 +:10E56800189B49CCF01F001C0E9B303CF01F001874 +:10E5780030070E96C188189B498CF01F00170E9B18 +:10E588000C9CCF5B301BF01F0016EDDCC008C0B13F +:10E598003058C088301BF01F0012EDDCC008C031B5 +:10E5A80030988F4858075F193008F00618005F0A3E +:10E5B800F5E90009F0091800C0400E9CF01F000999 +:10E5C8000C9CD8220000821C000082188000C974AC +:10E5D800000082148000DAE80000820C80010A0042 +:10E5E80080010CECD421169C1497580AC08094CB57 +:10E5F800F01F00070E9CF01F0007D82A5809C030EA +:10E60800149CD822F01F00045C5CD8228000D984B6 +:10E618008000D13C8000E504D42149887007C2A855 +:10E62800EEFB0084580BC140169AEEF8008C58088F +:10E63800C06030090E9B6E6C5D18C078169A1099F0 +:10E648000E9B109CF01F000E5C5CEFFC0A21EF385B +:10E658000026EDB80000C0D1A1B80E9CEF680026D6 +:10E66800F01F0008EF380026E018FFFCEF680026CE +:10E678006E375807CD61D8220000820C8000E5EC87 +:10E6880080010CECD401F01F0007487913882FF89B +:10E698005C58B288EDB80000C031F01F0004D80201 +:10E6A8008000E620000073148000DCCCD4314A6876 +:10E6B80070063058ED3E000C2EC6A58EF00E1900DF +:10E6C800E0880040205E3008A36E30175C8E302151 +:10E6D8003042E7DEC010E06401FFE0650200C2E8F6 +:10E6E800F5D8C010EC0A070BEE0B1800C080C293D7 +:10E6F800EC0A0009E20B1800C1B1C0382FF8C1D8E4 +:10E70800139BE40B1800C1D12FDA063AC1A413BA3F +:10E718002FC813A95C88F5E910895C89F2CA000141 +:10E72800E80A1900EA0917B0F959003CC0781399AA +:10E738005809C070F20800085C88FC081900CD135D +:10E74800D832000000007318D4217848189616971C +:10E75800F138000DEDB80000C1C1169C3007F01F5C +:10E768000020C368F138000DEDB80000C0E16C4826 +:10E77800F13A000CF139000DF3EA1089A1A9F16909 +:10E78800000DA989F169000C6E07F01F0016C0285A +:10E7980049555807C1D06E4811C411DBB16BF7E475 +:10E7A800118B11E48EEEF7E4108B6A0A8CE911F4F0 +:10E7B8000E9CE9EB100B16191409F20E010ECD3759 +:10E7C800C098141B6C1CAC6B5C7BF01F00088D0799 +:10E7D800D8225809FE99FFF7CFBB00008000DA68FD +:10E7E8008000DA3C0000731C8000D210D4314C58F1 +:10E7F80018971188EDB80004E081020C79994C282B +:10E80800F90C006070086FAAF208010BC186103974 +:10E81800C0614BE87008F4080108C1164BB87008CD +:10E82800103AC2914BA87008F139000FF138000E68 +:10E83800F3E81088F8081900E088001E4B487009B2 +:10E84800F338000FF339000EF1E910884AE972092C +:10E858005C88EF490064EF5800604AC97209EF49C3 +:10E8680000685808C080EF3900AC3008F00918007B +:10E87800EFF81EAC4A586F497008F009010B580BA5 +:10E88800E089004C3006EF5600704A2B960BEC0BD3 +:10E898001900C3215C7CEF160060F80A000A6FAC0F +:10E8A800EC0C000C143CC281EF0A003AF60A19007D +:10E8B800C2351039C211EF3800542FF85C58EF6890 +:10E8C80000543039F2081800E088000FEF090056AC +:10E8D800EF08003C12085C88F2081900E088014A39 +:10E8E800EF580056C469F2081800E08101430E9CF5 +:10E8F800F01F0009C3E93008EF680054C3A90000FD +:10E90800000073280000731C0000732400007318B3 +:10E91800000073208001016A5CD91009E08600D1EB +:10E928006F7912185808E08900CCEF380026EDB846 +:10E938000002C081A3C8EF680026EF080058EF580E +:10E948000056300A4D39EF6A004E720BEF6A0054D8 +:10E9580072096F48EF490050F6080108EF09007284 +:10E96800EF580070F2080008EF09004AEF580072EB +:10E97800EF080048A358F2080008EF58004C6E480A +:10E988005838E0880066EF080056EF090058F0098B +:10E998001900E0880006EF09003C1009C0A8EF192B +:10E9A800003CB339F7D8C010F20B0C0AF408000980 +:10E9B8005C89F0091900E088004CEF590056C488BA +:10E9C8006C08EF030074EF48007C6C1CF01F0032E9 +:10E9D800F8031900C0E24B18201D1AD8E06803B3E9 +:10E9E8001AD84AF84AFC1AD8F01F002F2FCDC008B1 +:10E9F800EF0800705808C09020186C49F339000DD2 +:10EA0800EDB90000EFF80C38EF0300746C1CF01F30 +:10EA1800002218130C9CEF530074F01F0024EF0819 +:10EA28000074EA081900C1606FF85808C1316FE82E +:10EA38005808C1014998201D1AD8E06803BF1AD8A0 +:10EA480049B8498C1AD8F01F00182FCDC0084914AE +:10EA580030056FF65806C2D06C4811CBF139000D5D +:10EA6800F3D9C0025F1A11D9B169F3EB118911EB1F +:10EA7800F3EB108911F81248680912188CE9F409A7 +:10EA8800000912085808FE9AFF9DE08F045F0000F5 +:10EA9800000073248000CD0C8003AC608003ACA818 +:10EAA80080039D9C800094C48000DA3C8003ACD035 +:10EAB8003FF8EF58003A3008EF680038C5A830082A +:10EAC800EF580070C5686C08EF030074EF480078D1 +:10EAD8006C1CF01F0021F8031900C0E249F8201D42 +:10EAE8001AD8E06803E01AD849D849EC1AD8F01FB8 +:10EAF800001E2FCDC008EF0800705808C0902018DD +:10EB08006C49F339000DEDB90000EFF80C38EF034C +:10EB180000746C1CF01F001018130C9CEF53007449 +:10EB2800F01F0012EF080074EA081900C2406FF8DD +:10EB38005808C2116FE85808C1E14888201D1AD842 +:10EB4800E06803EA1AD848A8486C1AD8F01F0006EB +:10EB58002FCDC0088000CD0C8003AC608003ACA82A +:10EB680080039D9C800094C48000DA3C8003ACD074 +:10EB78004C5430056FE65806C2106C4811CCF13978 +:10EB8800000D11DAF3D9C002B16AF5EC118A11EC63 +:10EB980011F858095F1B6809F5EC108AF1EA100AA8 +:10EBA8008CE8F20A010AF6080008F4080108C066B1 +:10EBB8006F7810195809FE9AFF886F085808C29094 +:10EBC8004B196F1A7209F4090109C2374AFB760B0F +:10EBD800EF0A0048F6080108F40B140316185C88BD +:10EBE800F00A000A5C8AEF09004AF40B14035C4837 +:10EBF800EF5A0048F20A14021419F2080008F6083D +:10EC08000009EF58004AEF59004C3008EF4800401F +:10EC180049F84A09900A6EA8580AE0800381720BE5 +:10EC2800F60911FF1009E08600B15C7AF0C9FFFF10 +:10EC38001619F20A010A580AE08900A849697216E9 +:10EC48005806C0E14958201D1AD8E06804461AD869 +:10EC58004938494C1AD8F01F00142FCDC008F00BC2 +:10EC6800010BE04B7FFEE08A002348C8201D1AD81C +:10EC7800E06804471AD848D848AC1AD8F01F000AE8 +:10EC88002FCDC008000073240000821000007320FC +:10EC98000000731C000073348003AC608003ACF088 +:10ECA80080039D9C800094C48003AD008CD81638E6 +:10ECB800C3148C48F3D8C0101639C0E44AB8201DD4 +:10ECC8001AD8E06804491AD84A984AAC1AD8F01FEA +:10ECD800002A2FCDC0081618300A5C88C058AC48E6 +:10ECE800AC5A121B6C068CD91639CFA55C3B0C9C10 +:10ECF8005C8BF01F0022C21049C8201D1AD8E0689A +:10ED080004561AD849E849BC1AD8F01F001B2FCD61 +:10ED1800C0085C3B0C9C5C8BF01F0018C0E04938B5 +:10ED2800201D1AD8E068045B1AD84958491C1AD81B +:10ED3800F01F00112FCDC0086C1A4929932A492ABF +:10ED48006EA8740B926C9508F80B000A101AB26A38 +:10ED5800F00A16187249B2F8B2CAF5D8C208F1D842 +:10ED6800C108B2DAB2E8C1B88003AC608003AD1064 +:10ED780080039D9C800094C48000CDD48003AD2086 +:10ED8800000073340000731C101BC097EF38002676 +:10ED9800A1B80E9CEF680026F01F00424C256EA912 +:10EDA8006A08F009010AE08602B7F0CAFFFFEF1B04 +:10EDB800002C121A161A580AE08902AE1039E0819E +:10EDC80001F54BA8906A7048F139000DF3D9C002DB +:10EDD8005F19F40900094B6AB409EF0A002CF20A1A +:10EDE8001900C462F13A000CF139000DF3EA1089F8 +:10EDF8005C89EDB90000C081E219FFFEF169000DE0 +:10EE0800A989F169000C4A98EF0A002CB06A704988 +:10EE1800F339000DEDB90001C031201AB06A4A3645 +:10EE28008CEB6C1CF01F00238C696C48F138000DCA +:10EE3800F1D8C0025F18F208000849D9B20849A9F8 +:10EE480072095C78EF1A002C12086EA9F4090009FF +:10EE58001238C0E04988201D1AD8E068048B1AD8F7 +:10EE68004968497C1AD8F01F00172FCDC008EEF664 +:10EE780000805806E08000BE48C46848F138000D9C +:10EE8800EDB80000C080C4B8109C7008EF4800803E +:10EE9800F01F000DEEF800805808CF71CAA80000D6 +:10EEA80080010CEC0000731C000073340000732018 +:10EEB8008000D2108003AC608003AD3480039D9C39 +:10EEC800800094C48000DA3CF138000DEDB80000F1 +:10EED800C1F16848F139000DF13A000CF3EA108AE3 +:10EEE8005C8A1499A1A95C79F20B1608EDBA0001A5 +:10EEF800C0F0F169000DF16B000C68488869F138C1 +:10EF0800000DF1D8C0025F18F2080008A6086C05C9 +:10EF18000A96F01F00455805C041C6984C324C432C +:10EF28006C4811C5868A11D9B169F3E5118911E5D3 +:10EF38008CEBF3E510890C9C11F5EBE91009F40949 +:10EF48000109640A1409F20B010BCBF7E08F0201E7 +:10EF58004B89EEF80080704811FB11C511DC11E8EF +:10EF6800B16CF9E5118CF9E81088F7E81008F00A97 +:10EF7800010A5C8AB26A7248F138000DEDB80001E6 +:10EF8800C031201AB26A4AB58AEB6A1CF01F002AFF +:10EF98008A696A48F138000DF1D8C0025F18F20892 +:10EFA80000084A39B2085C784A097209F009000A6F +:10EFB800EEF80080704811FB11CC11D911E8B16945 +:10EFC800F3EC1189F3E81089F7E91009123AC0E067 +:10EFD80049A8201D1AD8E06804C31AD84988499C52 +:10EFE8001AD8F01F00192FCDC0080C95EF450080E6 +:10EFF80048F848E9908A7209F40900098FA990082D +:10F00800EF09002CF0091900C22248C8201D1AD89F +:10F01800E06804CD1AD848D848AC1AD8F01F000ABE +:10F028002FCDC0088000DA3C0000731C000073205C +:10F03800000073348000D2108003AC608003AD6C94 +:10F0480080039D9C800094C48003ADA810190E9C79 +:10F05800EF59002CF01F004A4CA8300A7019924B47 +:10F06800F40B1900C0504C8A9509300991194C5875 +:10F078007048F138000DEDB80000C5B14C3913885F +:10F08800A5B8B288C56881098CEAF13B000DF7DBA9 +:10F09800C0025F1BF60A000A14098FA9EF0A002CA8 +:10F0A800F138000D8C69F1D8C002F7D9C0105808A2 +:10F0B8005F1EF9DAC010FC0B000B163CC0E44B488D +:10F0C800201D1AD8E06804F21AD84B284B2C1AD8FD +:10F0D800F01F00322FCDC008F409010958085F1845 +:10F0E800F20801080E9CEF58002CF01F00256C1B3D +:10F0F8009648E2081900C090680C580CC040F01FF0 +:10F108000028C028890B8D126C48F138000DEDB825 +:10F118000000C0810B88A5B8AA886E485848EFF34C +:10F128000A046C080C9CEF480080F01F001EC07891 +:10F1380049D030014944300249453073EEF6008029 +:10F148005806C1006C4811CB11D9B169F3EB11898C +:10F1580011EB6EAAF3EB108911FBF7E910091439CA +:10F16800C930EF380026EDB80000C041A1C80E9C98 +:10F17800CE68A1A8EF680026D83200008000D5FE2E +:10F18800000073340000732C000073298003AC6006 +:10F198008003ADC880039D9C800094C48000CD345A +:10F1A8008000DA3C0000731C0E9CF01F0040EEF655 +:10F1B80000805806C0714BECF01F003EEF4C0080F9 +:10F1C800D8326A093005F2CCFFFF6C4811CB11DA4E +:10F1D800B16AF5EB118A11EBF5EB108A11FBF7EA2E +:10F1E800100A1439C1214B2C8C689869F009190050 +:10F1F800E08800B4F01F002FE08000B05805EBFC59 +:10F208001A00EFFC0A20C0D85805C0D1F20A010B39 +:10F21800C4574A7CF01F0027E08000A0EF4C008014 +:10F228000C9BC3986A4B17F417C217D317EBB1633B +:10F23800E7E21183E7EB108BE9EB100B5CDB120BB9 +:10F24800C2D6F80A010B580BE0890029498CF01F37 +:10F2580000191897E08000826A4811F911CA11DB79 +:10F2680011E8B16BF7EA118BF7E8108B4928F3EB3B +:10F27800100B70088AE9101916095809E08A000964 +:10F28800F00B010B6A1CAA6B5C7BF01F000C8B0750 +:10F298000C9B0E9CF01F000AD8326C0B0C95580B77 +:10F2A800C1001696C93B000080010BF000007334C2 +:10F2B8008000DA080000731C8000D2108000E7503C +:10F2C80014195809E08A004AF138000DEDB8000019 +:10F2D800C4404A3CF01F00238D0CC3F06C4811F960 +:10F2E80011CA11DB11E8B16BF7EA118BF7E8108B43 +:10F2F80049D8F3EB100B70088CE910191609580956 +:10F30800E08A002CF00B010B6C1CAC6B5C7BF01FD3 +:10F318000017D8320E9CF01F0016D832720BF60870 +:10F328000109C0A62FFBEF19002CF60801081218D6 +:10F338005808E08A00130E9CEF380026A1B8EF6841 +:10F348000026F01F000CD8323008FE9FFBB4580985 +:10F35800FE99FE00FE9FFE4BD83200000000733479 +:10F368008000DA080000731C8000D21080010BF0C6 +:10F3780080010CECD4314B86ED0800922FF87819F7 +:10F388004B65ED5800928B091388F1D8C004F20838 +:10F39800002818971693109C4B148908F01F003109 +:10F3A8006A080E9C118BF7DBC004A36B5C3BF01F53 +:10F3B800002EC0718E493138F0091900E08B000B1E +:10F3C8004A580E9CF109009A2FF9F159009AE08FDA +:10F3D80003026A0C069B2F0CF01F0024C0B16A0AB6 +:10F3E800FC19E000F5380010B968E618F00012388A +:10F3F800C0A149980E9CF10900A02FF9F15900A06D +:10F40800E08F02E9F4CBFFF48EC830692F0A0E9C16 +:10F41800F01F00175C8CC080ED0800980E9C2FF838 +:10F42800ED580098C11868080E9CF13B000CA58B9C +:10F43800F60B10FCF01F000CC1C0ED08009A0E9CE2 +:10F448002FF8ED58009AED0800962FF8ED58009621 +:10F45800E08F02C6000080D40000733000007318EB +:10F468008000D67C8000CDD48001255880011E2CD8 +:10F47800680811CA11D9B169F3EA118911EAF3EAE6 +:10F48800108911FAF5E91009F20A1618B0CAF5D967 +:10F49800C208B0F9B0DAF5D9C108B0EA4B28910929 +:10F4A8006808F1390008F13A0009B16AF5E9118AEA +:10F4B800F139000AF5E9108AF139000BF3EA100A6C +:10F4C800F4091618F1690008F3DAC208F16A000BAA +:10F4D800F1690009F3DAC108F169000A4A386804D9 +:10F4E800910AE938000DF5D8C002F1D8C0064A0BD8 +:10F4F800B6884A086A09580A5F1A8E4514055C8559 +:10F50800B00549D87006CA586C485808C0E149B8CF +:10F51800201D1AD8E06800B71AD84998499C1AD80B +:10F52800F01F00192FCDC00858A8C0E14938201D88 +:10F538001AD8E06800B81AD84948492C1AD8F01FD8 +:10F5480000122FCDC0085818C24148C8201D1AD82B +:10F55800E06800B91AD848E848AC1AD8F01F000A81 +:10F568002FCDC0080000731C00007324000073280E +:10F57800000073200000820C8003AC608003ADF0B3 +:10F5880080039D9C800094C48003AE188003AE4421 +:10F59800098A0998F1EA1088ED0A0024F00A19008E +:10F5A800C56109AA09B8F1EA1088ED0A001CF00A39 +:10F5B8001900C4D1F33A000CF338000DB168F1EA30 +:10F5C8001188F33A000EF1EA1088F33A000FF5E8D3 +:10F5D80010086C1A103AC3B1F33A0010F33800114E +:10F5E800B168F1EA1188F33A0012F1EA1088F33AA7 +:10F5F8000013F5E810086C0A103AC2916C380C3800 +:10F60800C0E14CA8201D1AD8E06800C21AD84C885E +:10F618004C8C1AD8F01F00482FCDC008580CC06079 +:10F6280099384C6870098D3991066C380C38E0812E +:10F6380001A14BE8201D1AD8E06800C81AD84C0868 +:10F648004BCC1AD8F01F003C2FCDC0080C9C6C3650 +:10F658005806FE91FF5BE08F05296C4858A8C0E06A +:10F668004B28201D1AD8E06800D21AD84B584B1CDA +:10F678001AD8F01F00312FCDC008098B0998ED0A60 +:10F688000024F1EB1088F00A1900C77109AC09BB16 +:10F69800ED08001CF7EC108BF6081900C6E1F33CE6 +:10F6A800000CF33B000DB16BF7EC118BF33C000E33 +:10F6B800F7EC108BF33C000FF9EB100B6C1C163CAD +:10F6C800C5C1F33C0010F33B0011B16BF7EC118B93 +:10F6D800F33C0012F7EC108BF33C0013F9EB100B22 +:10F6E8006C0C163CC4A1498B178CEDBC0002E08061 +:10F6F800013AEDBC0001C2D1494B6CAC760BF60C5B +:10F70800010CC2D6ED14002C081C580CE089002806 +:10F718005C7A201D5C751ADA48DCEA0B000B5C7811 +:10F72800F2CAFFF0780CC7688003AC608003AE6C47 +:10F7380080039D9C800094C40000820C8003AE98D6 +:10F748008003AEC4000073280000731C00007324FB +:10F75800EDBC0000C0414CC870088DD84CB8900969 +:10F768003008F0091900E08000FEED3800260C9CF6 +:10F77800A1B8ED680026CF486C365806FE91FF6F99 +:10F788004C3870050C98CF286A0A580AC130F33CE7 +:10F798000010F33B0011B16BF7EC118BF33C001236 +:10F7A800F7EC108BF33C0013F9EB100B163AE081E1 +:10F7B80000DC09AB09BAF5EB108AEB0B001CF40B63 +:10F7C8001900E08100D25808C0706A3991394B0895 +:10F7D80070098B3991054AF81188EDB80004C1F118 +:10F7E8004AD8700913AB139A13B8201D1389F1EB8B +:10F7F8001088F5E910894A5B1AD9968C4A794A8BA0 +:10F808007209760BF2CAFFF0F80B000B4A5C780C11 +:10F818002FFC2F49F01F00242FEDCA48EDB8000136 +:10F82800E08100A1EB3C0014F01F00201896C08175 +:10F8380049F8F109009C2FF9F159009CC938497819 +:10F848007008F0C9FFF0C0311298C108F1390013EF +:10F85800F13B0010F13A0011F1380012B16AF5EBF2 +:10F86800118AF5E81088F3E810088D08EB08001CE9 +:10F87800ED58001C48987008F0C9FFF4C1A112980F +:10F88800C27800000000821000007320000082147B +:10F898000000732800007318000073300000731C08 +:10F8A80000007324800102348000E1D4000080D479 +:10F8B800F139000FF13B000CF13A000DF138000E60 +:10F8C800B16AF5EB118AF5E81088F3E810088D188D +:10F8D8004C587008118B1199F3EB1089ED590024DD +:10F8E80030398D494C197209F2CBFFFF8DCB8DABA6 +:10F8F800F13B000FF138000EF7E81088ED5800587A +:10F90800ED5800608A48E2180199AC486A684B8A49 +:10F918002019740C8D688D3C6A889506ED49006441 +:10F928008D880C9CF01F0033ECCBFFFCED1C003CD9 +:10F93800F01F00313019ED5C003C201D30081AD949 +:10F94800109A3129109B0C9CF01F002C2FED5C5C49 +:10F95800C0600C9C300BF01F002AC0480C9CF01FA4 +:10F9680000290E9CC3C80A986A355805FE91FF0EF7 +:10F9780049D56A08F13C000DF9DCC006F01F0022E9 +:10F988005806E08003504A188E4A6A09911791492F +:10F99800B06A30096E1A9109912A49D8910949D853 +:10F9A800B089ECFA0084580AC3C0ECF8008C5808F7 +:10F9B800C0500C9B6C6C5D18C06810990C9B109C17 +:10F9C800F01F00155C5CC041ED4C0084C2A80E9C81 +:10F9D8004928F10900962FF9F1590096F01F0010F7 +:10F9E800D8320000000073180000731C0000820C5D +:10F9F8008000E6B48000D95C800103508000E124D7 +:10FA080080010CEC8000D67E000073340000732C5B +:10FA1800000073298000E5EC000080D48000D13C10 +:10FA28004A9891064A981188EDB80002C3216C489B +:10FA38005828C0814A6870096D781039E081026BD6 +:10FA4800C1D84A49720A6CA9F4090109E08602631F +:10FA5800ED1A002C14195809E089025DE08F032182 +:10FA680049D8201D1AD8E06802271AD849B849CCC5 +:10FA78001AD8F01F001C2FCDC00849B91388A3B8A5 +:10FA8800B288ED380026A1C8ED680026E08F024351 +:10FA9800EDB80001C0616C4820285818E08B00A21E +:10FAA800492870088DD830080C9CED6800ADF01F0F +:10FAB80000106C4820285878E08B022D48D9F208AD +:10FAC800032F000000008224000073280000732424 +:10FAD8000000731C8003AC608003AEF480039D9C1F +:10FAE800800094C400007329000082108000E6B4EE +:10FAF8008003AC404CF811891298E218001259287A +:10FB0800C7A14CD8700A6DF8704811FB11C711DCF9 +:10FB180011E8B16CF9E7118CF9E81088F7E81008DA +:10FB28002FF8103AC681ED0800722FF8ED580072D0 +:10FB38004C287008ED4A0050F0CA00012FF88DC813 +:10FB48008DA84BF87008F139000FF138000EF3E872 +:10FB58001088ED5800603048ED4A00648D48EC0884 +:10FB6800000BED1C003CF01F00375C8CF808100AF5 +:10FB7800ED5C003CED580058ED0900563018F009CE +:10FB88001900C021A17CED5C0056ED0800745808EE +:10FB9800C0E14AD8201D1AD8E06802591AD84AB8D4 +:10FBA8004ABC1AD8F01F002B2FCDC00820186DFCB6 +:10FBB800ED5800747808ED48007C5808F9B800FF43 +:10FBC800F9B80100EDF81E4EED58003AF01F00227A +:10FBD800ECF800905808C050300A0C9B6C6C5D180B +:10FBE800ED380026A1B80C9CED680026F01F001B1C +:10FBF800E08F0191EDB90004E081018D4908700999 +:10FC080013AB139A13B8201D1389F1EB1088F5E98B +:10FC18001089493B1AD9968C4929488B7209760B69 +:10FC2800F2CAFFF0F80B000B483C780CC7980000AC +:10FC380000007328000073240000731C0000731870 +:10FC48008000D95C8003AC608003AF1480039D9C66 +:10FC5800800094C48000DA3C80010CEC0000732022 +:10FC6800000073304C281188EDB80004C5E14C1829 +:10FC7800700C6D485CD81808C3D66D78F808010870 +:10FC88005808E089003830488D486C885808C0E129 +:10FC98004B98201D1AD8E068027E1AD84B784B8CF6 +:10FCA8001AD8F01F00382FCDC008300A0C9B6C6C96 +:10FCB8005D185C5CC0700C9C301BF01F0033E08F3B +:10FCC80001A7ED0700560C9CF01F0030ED080070EE +:10FCD8005808F9B901FFF1D9E108EDF81C383019D5 +:10FCE800ED08003CF2071900C021A178ED58005634 +:10FCF800C2E84A78700913AB139A13B81389F1EB69 +:10FD08001088F5E910894A3B201D1AD94A29968797 +:10FD180072094A2BF2CAFFF0760BEE0B000B2F4943 +:10FD2800F01F001F2FEDCF68EDB80001E08100F350 +:10FD380049A870096CA820181039E08100EC0C9CC7 +:10FD4800F01F0018CE780C9CF01F0010496811882D +:10FD5800EDB80005E08100DFED380026A1B80C9C65 +:10FD6800ED680026F01F00113078CC1800007328C9 +:10FD7800000073248003AC608003AF2C80039D9C3B +:10FD8800800094C48000E1248000E7F40000731828 +:10FD980000007320000073300000731C80010234DF +:10FDA800800101000000732980010CEC0C9CF01FFD +:10FDB800003E4BE84BE91188E2180020C2D01388B6 +:10FDC800EDB80004C1F14BB870096D781039C1A1C4 +:10FDD800ED380026A1B80C9CED680026F01F00360F +:10FDE8000C9CF01F00364B6972080C38C5604B59E3 +:10FDF8009308C05870390C39C69012985808CFB17A +:10FE0800C6D8ED380026A1B80C9CED680026F01F76 +:10FE1800002A3088C6C81388EDB80004E081007B4A +:10FE28004A4870096D781039C7513068C6080C9C6B +:10FE3800F01F001D49D81188EDB80005C6B1ED388E +:10FE48000026A1B80C9CED680026F01F001B0C9C36 +:10FE5800F01F001A49A972080C38C1F04999930893 +:10FE6800C05870390C39C32012985808CFB1C368EC +:10FE78000C9CF01F000D48E81188EDB80004C4A1DF +:10FE880048C870096D781039C4510C9CF01F000BDC +:10FE980048B972080C38C0316C38C21848999308B0 +:10FEA800C1B800008000E7F400007329000073283F +:10FEB8000000732480010CEC8000DA8C0000820CB6 +:10FEC8000000821870390C39C0614C0993086C39EC +:10FED8009139C06812985808CF614BC99308300807 +:10FEE8008D384BB870098D39910630A88D48C128D6 +:10FEF8000C9CF01F00384B881188EDB80004C0A195 +:10FF08004B6870096D781039C0514B591388A5A8F2 +:10FF1800B2884B381188EDB80003C091ECF800980E +:10FF28005808C0803FAB6C6C5D18C048EDB8000441 +:10FF3800C0A10C9B4ABCF01F002C0C9B302CF01F5E +:10FF4800002BC658ED0A0070580AC090ECF80088DB +:10FF58005808C0505C7A0C9B6C6C5D184A48700855 +:10FF68005808C24049C91389EDB90003F1F9080DD1 +:10FF7800F9BA0001F3DAE039F1F90E0D49CAECF8E3 +:10FF8800008C5808C070740A30090C9B6C6C5D18A2 +:10FF9800C0781099740A0C9B109CF01F00165C5CCA +:10FFA800C05049387008ED48008448D81188EDB829 +:10FFB8000005C271ECF8008C5808C1D030090C9BC0 +:10FFC800129A6C6C5D18C1D800008218000082205B +:10FFD8008000E7F4000073280000732400007329F0 +:10FFE8000000820C8000DAE88000C9740000732CDD +:08FFF8008000E5EC10990C9B60 +:02000004800179 +:10000000109A109CF01F002E30094AE80C9C9109B0 +:10001000F01F002D30064AB891064AC76E1C580CD6 +:10002000C330F01F002B8F16C2F86A0BF738000D93 +:10003000EDB80002C2604A78F10C00A02FFCF15C20 +:1000400000A0F10C00962FFCF15C0096179C17A6FF +:1000500017B8178BF9EB108B201D49F972091ADBC1 +:1000600049EB968CF2CAFFF0F1E6108849CB2F4994 +:10007000760BF80B000B49BC780CF01F001B2FED22 +:100080000E9CF01F0013F01F0019C1714988201D3C +:100090001AD8E06801771AD84968497C1AD8F01F45 +:1000A00000172FCDC0085808FE90FCE0FE9FFCEB27 +:1000B00049387006FE9FFB67D83200008000E5ECEF +:1000C0000000822480010CEC000073348000D13CDD +:1000D000000080D400007330000073200000731C07 +:1000E00000007324800102348000D6B48003AC6029 +:1000F0008003AF4080039D9C800094C40000822058 +:10010000D42179F95809C3107208F8CEFF88F9484C +:10011000007C79E8C038109E70085808C1C0704B48 +:1001200017F617C417D5B165EBE41185724A17EBC2 +:1001300015F7EBEB108B15C5EDEB100B15D615EA8B +:10014000B166EDE51186EDEA108AEFEA100AF60ACB +:10015000010ACE2693089D093008F9480040F93875 +:10016000004E2FF8F968004ED822D42179F95809A9 +:10017000C600F9380026EDB80002C5B07208F8CE06 +:10018000FF88F948007C79E8C038109E700858084C +:10019000C1C0704B17F617C417D5B165EBE41185D4 +:1001A000724A17EB15F7EBEB108B15C5EDEB100B47 +:1001B00015D615EAB166EDE51186EDEA108AEFEA8B +:1001C000100AF60A010ACE26930830089D09F9485C +:1001D0000040F938004E2FF8F9090056F968004E32 +:1001E000F5D9C02FF9080060F7D8C02FF009190021 +:1001F000F60817B0F4081780F9580058F908003CC1 +:10020000F00915015C78A178F91A0058103AF9F94B +:100210005C2CF9380026A3A8F909003CF9680026EF +:10022000F20815011009F90800581009F95900568B +:10023000D822D703D43118941693149112921096A1 +:100240004097300A314B301CF01F00391895C6D04A +:1002500098593138F0091900E08B000F4B58201DD8 +:100260001AD8E068031F1AD84B384B4C1AD8F01F25 +:1002700000342FCDC0080E9878175C78AEB8A988E6 +:10028000AEA8E0685014EF68000DA988EF68000C74 +:10029000E8081618AEC8F1D4C208AED8E608161899 +:1002A000EF680008F1D3C208F3D6C010EF68000968 +:1002B000AE993088A9893006AEF4EF63000BAE89A1 +:1002C000EF66000FEF660012EF660013EF66001096 +:1002D000EF660011EF68000E3069049A029BE9D4C2 +:1002E000C108E7D3C108AEE4EF63000A98C8F01F65 +:1002F00000155C7CEF6C0011A98CEF6C0010201DC8 +:10030000491C30671AD70C98F9070090049A2FF708 +:10031000029BE06900FFF95700900A9CF01F000B58 +:100320000A9CF01F000B2FEDD83200008000D3187C +:100330008003AF5C8003AFA480039D9C800094C4C5 +:1003400080011E2C000080D4800122948000D13CCA +:10035000D43120BD14915098414A505A12961897A2 +:100360003009F20119005F08F20A18005F0AF1EA89 +:10037000000AF20A1800C110F3D6C002C0E14C789E +:10038000201D1AD8E06800AD1AD84C584C5C1AD819 +:10039000F01F00452FCDC008580B5F195089126817 +:1003A000C0E04BE8201D1AD8E06800AF1AD84BF81F +:1003B0004BCC1AD8F01F003C2FCDC008EF080072BC +:1003C000E2081900C0B2EF380026EA18FFFFE8186B +:1003D000FF80EF680026E08F02E34058F3D8C001A9 +:1003E000E2180002F9B8010CF009002950296FB099 +:1003F000EF02007431F8F0021900E08800144AC8D6 +:10040000F109009C2FF9F159009CE06C00FFEF38D6 +:100410000026EA18FFFFE818FF80EF680026E08F4B +:1004200002C36FF85802C2605808C1404028A38830 +:100430002FB8AD685C883003503B50A8F7D1B0109E +:10044000409A504BF5DAC001069406980695506A1A +:10045000C3796FE85808CEB14908201D1AD8E06862 +:1004600000D01AD8493848FC1AD8F01F000F2FCDF9 +:10047000C0085808C0416FE85808CD904878201D42 +:100480001AD8E06800D31AD848B8486C1AD8F01FB8 +:1004900000062FCDC00800008003AF5C8003AFD4FE +:1004A00080039D9C800094C48003B028000080D409 +:1004B0008003B0688003B0A450195008EF03003CDB +:1004C000304CF01F0042401918954008E080023C73 +:1004D000300B990B991B5809C0301894C118580853 +:1004E000C0E14BB8201D1AD8E06800EF1AD84B982D +:1004F0004B9C1AD8F01F00392FCDC008910C5C73AB +:10050000402A4069E60A010840435C73E6080D434F +:100510005C835809C3904028300AE608000B149CFD +:100520005C7BF01F002F8B1CE080020EF5D3C01007 +:10053000402B98D9F40B00081039C0E44A48201D1C +:100540001AD8E06800FF1AD84A684A3C1AD8F01F47 +:1005500000232FCDC008501AF01F0023401A18980E +:1005600040895809C0A0402B6A195008721C160C0B +:10057000403BF01F001E4008F00200026A185C8237 +:1005800070188B28C3D8406A402B149CF01F0014AD +:100590008B1CE08001D9F01F0014407AF8020002A1 +:1005A0005C82580AC2D0F7D3C010301A303CF01F1A +:1005B000000C189B6A1C580BC1C1F01F000D40694C +:1005C0008B19E08F01C100008000C9D48003AF5CAB +:1005D0008003B0D880039D9C800094C48000D31811 +:1005E0008003B0E88000CD0C8002E7368000D13C6B +:1005F000403897182FF28B285C82F01F003F320B97 +:10060000F6021900E08B01A0AA63314B6A1CF01FAF +:10061000003BC0904BA8F10900A42FF9F15900A4A8 +:10062000E08F0192EF39001C6A1870188B48B0896E +:10063000EF39001DB099EF3900246A48B0A9EF39AD +:100640000025B0B9E00916186A48B0C9F3D0C2084D +:10065000B0F0B0D9F3D0C108B0E96A48F16C00132A +:10066000F16C00126A48F13A000CF139000DF3EA1E +:100670001089E019FFC0EDE910095C79F169000DFE +:10068000A989F169000C405AEB6A000E404806182F +:100690005C88F3D3C0105048403B6A48120B503B73 +:1006A00040AA1200F139000DF3D9C006F5E910098E +:1006B0005C79F169000DA989F169000C0A98300A8A +:1006C000404BF40B19005F1B507B169A58045F09CE +:1006D000300B124AF60A1800FE91FEF0F5D2B01067 +:1006E000503A6FE05800E08000C260085808C0909F +:1006F0001090CFCB8000CD348000CDD4000080D4CA +:1007000080EA6048F139000DF3D9C0025F1B140B79 +:10071000E08000C45809E08100C1F7D6C0025F0C38 +:10072000301BF60618005F0BF9EB100BF20B1800EC +:10073000E08000B488EBEF19003C140B123BE08919 +:1007400000ADE13B000EE939000EF20B1800E0812C +:1007500000A5684911FE13FB504B11CC11DBB16BA6 +:10076000F7EC118B11ECF7EC108BFDEB100B160A6C +:1007700013CB13D8B168F1EB118813EB4049F1EBBF +:100780001088F3E81008103AE08100884028681CBF +:10079000F00B11EC5C8BF01F0037C0E04B68201DA4 +:1007A0001AD8E06801691AD84B484B5C1AD8F01F78 +:1007B00000352FCDC0086818905AF80A1900C0A15A +:1007C00070098919910C4032109C20125C82F01F34 +:1007D000002EF1D6C001681BC220580BC05188689A +:1007E000F6081900C0E04A48201D1AD8E0680177D1 +:1007F0001AD84A684A2C1AD8F01F00222FCDC008F8 +:100800006048F13A000CF139000DF3EA1089A1A912 +:10081000F169000DA989F169000CC1E8580BC050BD +:100820009659F0091900C0E14938201D1AD8E0682E +:10083000017A1AD84968492C1AD8F01F00122FCD16 +:10084000C008601CF01F001380698868F208000867 +:10085000A068680881080835E0051700E1F3020682 +:10086000089B304CF01F000CC198EF440078C16821 +:100870008000CDD48003AF5C8003B11C80039D9CBD +:10088000800094C48000D13C8003B1308003B1501B +:100890008000CD348000C97481040C98EDB600014D +:1008A000C040EDB60000C0312FF15C81EDD6C00133 +:1008B000EFF81826F9B90120F1D9E138EFF81E2632 +:1008C0006FB9F1D1C010F2080008EF520074EF4880 +:1008D000006CEF0800720218EF5800725802C14015 +:1008E0006FF85808C1116FE85808C0E14AF8201D98 +:1008F0001AD8E06801A11AD84AD84AEC1AD8F01FD1 +:10090000002E2FCDC00858055F193008F0031900DC +:100910005F1AF5E90009F0091800C4406A48580850 +:10092000C410409CE21C0002C3D1F13A000CF13922 +:10093000000DF3EA1089A3B9F169000DA989F169E5 +:10094000000CC318EF380026EA18FFFFE818FF80F4 +:10095000EF6800264998F109009C2FF9F159009C95 +:100960005804C040089CF01F0016EF0900743008BE +:10097000F0091900C1406FF85808C1116FE8580814 +:10098000C0E148A8201D1AD8E06801B41AD84888E8 +:10099000488C1AD8F01F00082FCDC008E06C00FF6B +:1009A000C028300C2F5DD8328003AF5C8003B16467 +:1009B00080039D9C800094C4000080D48000DA688D +:1009C000D421784E1298587E5F07584E5F09EFE9A0 +:1009D0001009C081582EC060583EC040E06C00F83D +:1009E000D822580AC031149CD822201D30095C7AC4 +:1009F0001AD9F01F00032FED5C5CD8228001035050 +:100A0000D4013008201D109A16991AD8149B30185A +:100A1000F01F00032FED5C5CD80200008001035042 +:100A2000D431189679F45804C05179E45804E08020 +:100A300000CE6848F133000DE7D3C001C06088697B +:100A40003008F00919005F03300A5C53301C14337E +:100A5000F9BB0114F9BB0015F01F005D1895E0808B +:100A600000B698593138F0091900E08B000F4D9805 +:100A7000201D1AD8E068040F1AD84D784D7C1AD87A +:100A8000F01F00572FCDC008684811FA11CB11D9BB +:100A900011E8B169F3EB1189F3E81089ED38001C16 +:100AA0007817F5E91009AE88EF3A000CED38001D13 +:100AB000AE98EF38000DF1EA1088ED3A0024AEAAA6 +:100AC000ED3B0025AEBBF20B1618AEF9AECBF7D955 +:100AD000C208F3D9C108AEDBAEE9ED390028EF69F1 +:100AE0000008ED390029EF690009ED39002AEF69A6 +:100AF000000AED39002BE018FFC0EF69000BA5A834 +:100B00005C88F5D8C010EF6A000DF40B1608EF6B87 +:100B1000000CED39002EEF69000EF1D8C006300947 +:100B2000E8185000ED3A002F5C78EF6A000FEF688C +:100B3000000DEF690011EF690012EF690013EF6912 +:100B40000010A988EF68000CED19002E6CA8F208BF +:100B500000088DC85803C110EF39000CEF38000DA4 +:100B6000F1E91088E018FFC0E8180011EF68000DE7 +:100B7000A988EF68000CC068682811897818F169A5 +:100B80000014ECC4FFFC8AC83069089A0C9B0A9CCC +:100B9000F01F00145C7CEF6C0011A98C4929EF6CEC +:100BA0000010F30C00902FFCF35C0090306C201DC3 +:100BB000ED39000B089A1ADC0C9B30080A9CF01FD8 +:100BC000000B0A9CF01F000A2FEDD8328000D318CA +:100BD0008003AF5C8003AFA480039D9C800094C41D +:100BE00080011E2C000080D4800122948000D13C22 +:100BF000D431300A1895314B301CF01F003918934E +:100C0000C041E06C00FED832EB380026EB39001C06 +:100C1000E018FFFCEB6800266B787817AE89EB399B +:100C2000001DAE99EB390024F00B1618AEA9F3D8CD +:100C3000C208EB3A0025AEF8F1D8C108AECBAEBA87 +:100C4000AED9AEE86AA8F0091618EF690008F3D823 +:100C5000C208E06A5010EF690009F3D8C1083004F7 +:100C6000EF68000BEF69000AF40B1608EB19002E71 +:100C7000EF6B000CEF6A000DEF69000FEF640012DC +:100C8000EF640013EF640010EF640011F20A16081D +:100C9000F2080008EF6A000E8BC8EAC6FFFC0A9B48 +:100CA0000C9A98C83069F01F000F5C7CEF6C001143 +:100CB000A98CEF6C0010306CEB38000AEB39000B9C +:100CC000201D0C9A1ADC0A9B069CF01F0007069C4C +:100CD000F01F0006089C2FEDD83200008000D318CA +:100CE00080011E2C800122948000D13CD431202D23 +:100CF0004AE8189770081838E08001A3F9080056F0 +:100D0000F9090060F0091900F20817805C785008B2 +:100D100079E6F9380026E2180002C1E05806C170F1 +:100D20008CEB6C48794911CCF609010911DBB16BE8 +:100D3000F7EC118B11FA11E8F7E81088400BF5E891 +:100D40001008F20800081638E08800070E9CF01F13 +:100D500000185C5CC7696FF55805C0B1EEC9FF8427 +:100D6000EEC2FFFC5019300349214930C2B9109539 +:100D70006A085808CFD1CF3BF13C000CF139000D87 +:100D8000F3EC108C5C8CEDBC0002C1F148B8201D66 +:100D90001AD8E06802471AD8489848AC1AD8F01F09 +:100DA000000A2FCDC00800000000822480010BF053 +:100DB000000080D4000082108003AF5C8003B18407 +:100DC00080039D9C800094C46FF95809C150EF3B8B +:100DD00000261699E2190044C0F16FE95809E08035 +:100DE0000133720E580EC081926EEF09003CF20E74 +:100DF0001900E08301296C09EF4900786E495829F0 +:100E0000C0E0A5AC5C7CF16C000DA98CF16C000C11 +:100E1000EF390026E019FFFCEF6900266EA9F20AFF +:100E20001618F16A0008F5D9C208F16A0009F5D967 +:100E3000C108F169000BF16A000AEF1A002EF16A8D +:100E4000000FF40B1608F16B000EF40900098FC9AE +:100E5000ED39000EEDB90000C061E06B0200EA1B45 +:100E60000204915BEF08003A3FF9F2081900F9B863 +:100E70000000EFF80C1D6E085808C071049CF01FAC +:100E80000075C45078188F086F085808C121600990 +:100E90006C48EF49004011F911CB11DA11E8B16A41 +:100EA000F5EB118AF5E81088F3E81008EF480044E4 +:100EB0006C1C6C4478199848985A9914E8090109EF +:100EC000121A1218B85AB84830695C78049A0E9B06 +:100ED000E9630010E9630011F01F005F30695C7C7A +:100EE000E96C0011A98CE96C0010E30800902FF860 +:100EF000201DE35800901AD9049AEF38000AEF3900 +:100F0000000B0E9B6C1CF01F00552FED6C4811FA66 +:100F1000F139000DF3D9C0025F1B11CC8CE9F60941 +:100F2000000911DB11E8B16BF7EC118BF7E81088C1 +:100F3000F5E810086F7AF2080008101AC037EF4879 +:100F4000005C5809C3B08D036FF85808C041EF46E4 +:100F5000007CC3286C4A15FE15C46A4915DBB16BC9 +:100F6000F7E4118B15E4F7E4108BFDEB100B13CEB7 +:100F700013FC13DAB16AF5EE118A13EEF5EE108A5E +:100F8000144CF60C010CC177401AC058109A700826 +:100F90005808C0E0704913C413FC13DEB16EFDE4C1 +:100FA000118E13E4FDE4108E1C4C161CCF068D0828 +:100FB0009506C0788B060C95C0480C9CF01F002845 +:100FC0006FE65806C3706C4811CC6F4A8CEB11D990 +:100FD000141BB169F3EC118911ECF3EC108911FCCD +:100FE000F9E91009F6090009400B1639FE98FEC60A +:100FF000EF3900AC3008F0091800C1C18CEB6C4827 +:10100000F60A010A11F911CC11DB11E8B16BF7EC0A +:10101000118BF7E81088F3E81008100AEF18006049 +:10102000103AF9B80B00EFF8BA2AF9B80B01EFF84B +:10103000BEACEF380026F1D8C007EF680026300CB0 +:101040002FEDD832E21B00A0FE91FED7CD2B000081 +:101050008001222880011E2C800122948000DA3C2D +:10106000D401189879FA580AC170149B7609580966 +:10107000C030129BCFCB71EC970CF1490040F14985 +:10108000007CF139004E2FF9F14A0078109CF1698B +:10109000004EF01F0002D80280010CECD431300A5F +:1010A0001896314B301CF01F00401895C7B0985966 +:1010B0003138F0091900E08B000F4BC8201D1AD8F9 +:1010C000E06803C91AD84BA84BAC1AD8F01F003AF5 +:1010D0002FCDC008ED39001C78176D78AE89ED3939 +:1010E000001DAE99ED3900242018AEA9F00B16189A +:1010F000ED3A0025F3D8C208AEF8F1D8C108AECB5E +:10110000AEBAAED9AEE86CA8F0091618EF690008BF +:10111000F3D8C208E06A5010EF690009F3D8C1089B +:101120003004EF68000BEF69000AF40B1608ED19A4 +:10113000002EEF6B000CEF6A000DEF69000FEF64FB +:101140000012EF640013EF640010EF640011F20A64 +:101150001608F2080008EF6A000E8DC8ECC3FFFC09 +:1011600098C83069069A0C9BF01F00145C7CEF6CE9 +:101170000011A98C4929EF6C0010F30C00902FFC92 +:10118000F35C0090306C201DED39000B08981ADCE0 +:10119000069A0C9B0A9CF01F000B0A9CF01F000A89 +:1011A0002FEDD8328000D3188003AF5C8003AFA44A +:1011B00080039D9C800094C480011E2C000080D47C +:1011C000800122948000D13CF9390010A3C948A8BD +:1011D000F969001011BA118B119911A8B169F3EBDB +:1011E0001189F3E81088F5E8100899183008F958C3 +:1011F00000145EFC8003B409997A996B5EFCD703F6 +:10120000D421301CF01F00071897C080320A300B21 +:10121000F01F00053FF8EF68000B0E9CD82200007D +:101220008000C9D48002E8BCD40148C9189B720868 +:101230001838C0D178389308C0C870395809C060D0 +:101240001639F7F90003F1F90A0370385808CF612D +:10125000301CF01F0003D802000082288000C974EF +:10126000D4214AB83009700E1C98C148103CC111F5 +:101270005809C0E04A78201D1AD8E06802541AD8EC +:101280004A584A6C1AD8F01F00262FCDC0083019D2 +:1012900070385808CEC1580BC0C017B817861797BA +:1012A00017ABB167EFE61187EFEB108BF1EB100B8B +:1012B000990B580AC2211C98E06A1000E0667FFF73 +:1012C0003007C0C8F10B0012F40B1900C061F6CA58 +:1012D000FFFF1C985C8AC0287038EC0A19005F1563 +:1012E00058085F1BEBEB000BEE0B1800CEC1580843 +:1012F000C040E06C00F5D822F95A00125809C0200D +:10130000D82A993E4828910C129CD82200008228A5 +:101310008003B19C8003B1E080039D9C800094C455 +:10132000D4213008169614951897F9090012F0097F +:101330001900C071300A189BF01F00145C5CC231A8 +:101340005806C0C00DB80D8A0D990DA6B169F3EA13 +:101350001189F3E61086F1E61006EF380010A3A815 +:101360008F16EF680010EF55001448987008109C15 +:10137000C0581837C021D82A783C580CCFB18F38C4 +:1013800048389107D82200008001126000008228AE +:10139000D43112971093169414911895F9090012EC +:1013A0003008F0091900C091300A189BF01F004561 +:1013B000E5DCC008E0810084308B089CF01F00420F +:1013C000C0310896C0E8300A308B301CF01F003F57 +:1013D0001896C041E06200FFC728089BF01F003C40 +:1013E0008C593078F0091900E08B000F4B98201DC4 +:1013F0001AD8E06801C51AD84B784B8C1AD8F01F60 +:1014000000382FCDC008EB3900120E986C175C78AD +:10141000AE893009EB3A0013AEB8AE9AA988AEF99E +:10142000AEE9AEA86A085808C041E6C2FFFCC10890 +:1014300066191238C0C00836C041E06200F7C3F830 +:101440000C9CE06200F7F01F0027C3980A928CC83A +:10145000F0091608AED8AEC9EB390010EDB900009E +:10146000C1403119029A049B0C9CF01F001F5C8C38 +:10147000F1DCC010AEF8A988AEE8580CF9B800FF4E +:10148000EFF80E07EFF80E0631181AD3049BEB396C +:10149000000B029A1AD80C9CEB38000AF01F0013BC +:1014A0002FEDE5DCC0080836C0400C9CF01F000D95 +:1014B00048F8F10900782FF9F1590078049CD832E6 +:1014C000800112608000CDD48000D3188000CDB49C +:1014D0008003B19C8003B1EC80039D9C800094C488 +:1014E0008000D13C80011E2C80012064000080D44B +:1014F000D421202D1897501B149C500A1296F01FCF +:10150000000C401B1898400AC0A148A8E06C00FCE1 +:10151000F10900862FF9F1590086C078F3D6C01082 +:101520000E9CF01F00055C5C2FEDD8228001222864 +:10153000000080D480011390D401F8CAFFFCF9198F +:101540000014F01F00035C5CD8020000800114F05E +:10155000D431203D4D98F109007A2FF9F159007AE4 +:10156000781716910F8818955C8898CAF3D8C0042C +:101570002FE9A369123AC0A5F1D8C004F00B1502F7 +:101580005C3BF01F004F1894C0904CC80A9CF109B6 +:1015900000822FF9F1590082C1D96A12EECCFFF016 +:1015A000029B502CF01F004705980583F1E3108340 +:1015B00005B805AE1896F1EE108E5C835C8E34484B +:1015C000F00E1900C2413438F0031900E081008B9D +:1015D00062A85808E080008770145804E0800083F7 +:1015E00068185808E0800092EF3A000CEF39000DBF +:1015F000B169F3EA1189EF3A000EF3EA1089EF3A84 +:10160000000FF5E910091238C6D1C7F84AE8089961 +:10161000700A089B1498500AC618F10C0012FC0CB2 +:101620001900C5A15806C041700C580CC1B0EF306C +:101630000010EF3C0011B16CF9E0118CEF3000129A +:10164000F9E0108CEF300013F60618005F1AE1EC99 +:10165000100C700018305F0CF5EC100CF60C180034 +:10166000C3B05804E08100D6F13C0010E21C000435 +:10167000F0041700CCE8701C580CC150EF3A000C75 +:10168000EF30000DB160E1EA11805010401AEF30E8 +:10169000000EF5E010805010EF30000F401A14409B +:1016A000003CC1A1400A10945809C0F0703893382A +:1016B000893A48589104C148000080D48000CDD4B4 +:1016C00080012558000082284C88F109008E2FF9EE +:1016D000F159008EC058109970385808C9F1580453 +:1016E000C141EF3A0010EF380011B168F1EA1188FA +:1016F000EF3A00126219F1EA1088EF3A0013F5E8A8 +:1017000010081039C6D1300405F805E9F1E9108850 +:10171000C130402A8AC83119EECBFFF40A9CF01F71 +:1017200000345C8CC0904B180A9CF10900802FF9A2 +:10173000F1590080C4F83F8B0A9CF01F002EC0E0D6 +:101740004AD8201D1AD8E06801141AD84AB84ACCE1 +:101750001AD8F01F002C2FCDC0085804C0D06866DE +:101760005806C3E0089BF1D3C010EEC9FFF40A9AF3 +:10177000687C5D16C5585806C261EF380010FC1928 +:10178000E000B968E618F0001238C1D00F8B0A9C4F +:10179000F7DBC0042FEBA36BF01F00166A180E389E +:1017A000C0E04958201D1AD8E068012F1AD84968AE +:1017B000493C1AD8F01F00132FCDC008303B0A9CBB +:1017C000F01F001248980A9CF10900882FF9F1597E +:1017D0000088F109007E2FF9F159007EC0280A9C8B +:1017E000F01F000BC1D80000000080D480011E2C27 +:1017F0008000CDD48003B19C8003B11C80039D9CEC +:10180000800094C48003B21C800118FC8000D13C8D +:10181000F10C0014E60C1900FE91FF5FC2DB2FDD16 +:10182000D8320000D431189316921494324B300AF7 +:10183000301CF01F00241897C43098593238F00932 +:101840001900E08B000F4A08201D1AD8E068012E0D +:101850001AD849E849EC1AD8F01F001E2FCDC0084D +:101860007816661531CAAC94AC823004ACC4ACD4E2 +:10187000ACE4ACF4661B781C2F8CF01F00170C9C9A +:10188000ACA4ACB48EDBF01F00155C7CACBCA98CA6 +:10189000ACAC201D492C30161AD60898F906006009 +:1018A000EACAFFF4E06900FF089B2FF6F9560060D2 +:1018B0000E9CF01F000C0E9CF01F000B2FEDD83279 +:1018C0008000D3188003B2308003B27880039D9CDF +:1018D000800094C48002E73680011F4A000080D453 +:1018E000800122948000D13CD401F5DBC00830BBDC +:1018F000F01F0002D802000080011824D401F5DB9B +:10190000C008303BF01F0002D802000080011824FC +:10191000D4314C62E50800622FF81694E558006255 +:10192000781618970D85EBD5C004A365EA0311005E +:101930005C83069BF01F003EE08101788E493038C1 +:10194000F0091900E08801726E1811893088F009D9 +:101950001800E081015DED380010ED310011B1613A +:10196000E3E81181ED380012E3E81081ED3800134F +:10197000089BF1E11001ECCCFFF0F01F002EC071CC +:10198000E611F000FC18E0001031C0914A780E9C7E +:10199000F10900742FF9F1590074C4498E49307867 +:1019A000F0091900E08801420E9CF01F00235C8CB6 +:1019B000C0A00E9CF01F0021E50800682FF8E55834 +:1019C0000068D832330B0E9CF01F0019C6E00A9B4A +:1019D0000E9CF01F0017189AC0E04998201D1AD8D5 +:1019E000E06800981AD84978497C1AD8F01F001787 +:1019F0002FCDC0088ECB302CF01F00151892E08040 +:101A0000011F98D9EAC8FFF81039C25248C8201DF2 +:101A10001AD8E06800A21AD848E848BC1AD8F01FC3 +:101A2000000B2FCDC0080000000080D48000CDD472 +:101A30008001255880011FAC8000D13C8003B2306A +:101A40008003B2A480039D9C800094C48000D318BE +:101A50008003B2D80E9BF01F00445C5CC0E04C38A1 +:101A6000201D1AD8E06800A51AD84C184C1C1AD8AA +:101A7000F01F00412FCDC008069B6416049CF01F88 +:101A8000003FC0E04B98201D1AD8E06800AB1AD880 +:101A90004BB84B8C1AD8F01F00382FCDC0080E9CC5 +:101AA0000497F01F0038C1383D0B0E9CF01F003327 +:101AB000C0E04AE8201D1AD8E06800B51AD84B08E3 +:101AC0004ACC1AD8F01F002C2FCDC008ED3A000CDC +:101AD000ED39000DB169F3EA1189ED3A000EED3BE5 +:101AE0000010F3EA1089ED3A000FF5E91009ED3A1C +:101AF0000011B16AF5EB118AED3B0012F5EB108A8B +:101B0000ED3B0013F7EA100AF40B16186E18ED6A95 +:101B1000000FED6B000CF7DAC208F5DAC108ED6AC8 +:101B2000000EF20A1618ED690013ED6A0010ED6B55 +:101B3000000DF5D9C208F3D9C108ED6A0011ED69AD +:101B40000012300911AAB08911B9F3EA1089FE7A9E +:101B5000F7FE5C89F4091900E0880016F2C9F7FF66 +:101B6000C14800008000CF988003B2308003B310DA +:101B700080039D9C800094C48000CDD48003B33842 +:101B80008000D13CF2C9F8005C79B0B9A989B0A94C +:101B9000ED380009E818FF00ED680009A988ED6834 +:101BA00000083008314BED68000BED68000A0C9C12 +:101BB000F01F00284A885C7CED6C000BA98CED6C52 +:101BC000000AF10900602FF90A9BF15900600E9C90 +:101BD000F01F00221898C0E04A18201D1AD8E068AB +:101BE00000D71AD849F84A0C1AD8F01F00202FCD78 +:101BF000C00830191AD4189A1AD9ECCBFFF4E0694E +:101C000000FF0E9CF01F001A2FEDC0B8E508007011 +:101C10002FF8E5580070E50800662FF8E5580066D3 +:101C20000E9CF01F0014D8320E9CF01F001248A822 +:101C3000F109006A2FF9F159006AD8320E9CF01FA1 +:101C4000000D4858F10900742FF9F1590074D83289 +:101C500080011F4A000080D48000CDD48003B230C0 +:101C60008003B36C80039D9C800094C48001206439 +:101C70008000D13CD431205D30951988FAC9FFF03D +:101C8000FACEFFFC5009330231033056F0C9003060 +:101C9000EA091800E08B00BAE4081800C03030A749 +:101CA000C1582FFC35891988F20818005F0A378956 +:101CB000F20818005F09F5E91009F9B70008F7BC48 +:101CC00001FFF9B70110F9F81800F8CAFFFF300951 +:101CD0003191F2070244F0C000301004F4CC00014E +:101CE000EA001800E08B0005E8C90030C1E80E9456 +:101CF000E6071800C1D1F0C400615C54EC04180080 +:101D0000E088000EF0C00041EC001800E08B0011EC +:101D1000E2041800E0880004341CC028361C2F6838 +:101D2000F00C010CF9E9104915882FFACD3B32EA85 +:101D3000F4081800C0814008103EC6701CA92FFC92 +:101D40001988CA5B5808C28030CAF40818005F1CA2 +:101D5000320AF40818005F1A146C300AF40C1800E8 +:101D6000C1B030DCF80818005F1730ACF808180074 +:101D70005F1CEFEC000CF40C1800C0E030BC309796 +:101D8000F80818005F1CEE0818005F18F9E8000852 +:101D9000F4081800C3A1FAC8FFFC101EA34E2FFEC2 +:101DA000582EC0B0E0890005580EC2F0C298583EC7 +:101DB000C0F0584EC251C168E064FFFFEA1400FF52 +:101DC0000839E08B00234018F3E81189C198E049F5 +:101DD000FFFFE08B001B4018402AB968F1EA1108A8 +:101DE000C0D8E04900FFE08B0011402A4018B968D4 +:101DF000F1EA1108403AF1EA1088F1E91009580BAC +:101E0000F7F91A00301CC028300C2FBDD832D70388 +:101E1000D401202DFACBFFFCF01F0004F9BC00FF19 +:101E2000FBFC10012FEDD80280011C74D431202D51 +:101E3000300630110C9EC4A898557812E7D5B01022 +:101E4000049430075008C0B8E92800000990202306 +:101E5000E1E810805C835C702FE40007E203190066 +:101E6000FE9BFFF40A944008E214FFFEE7D5C00190 +:101E700008023000E0031900C0400584A964080787 +:101E8000E9D7C010B187E80700070E94E0140000FE +:101E9000C060E9D7C010B187E80700075C77EBD5D1 +:101EA000C001EE0E000EEFDEC010B18EEE0E000E81 +:101EB0005805C0B0EFDEC108EC061101A96E5C56F2 +:101EC000FDDEC010EFEE100E780C580CCB615806FA +:101ED000C080F9DEC108A96EFDDEC010F9EE100E5B +:101EE00017B715BC17851796B166EDE5118617ABC8 +:101EF0001585EDEB108B5C781596EFEB100B15AAA2 +:101F0000EFDBC010B166B18BEDE511860E0BEDEA8B +:101F1000108AF9EA100AF40C1610F5DAC010F60A65 +:101F2000000A180AF4090009F2080008F00E000E71 +:101F3000F1DEC010B18EF00E000EF9DEC010B18ED1 +:101F40001C0C5CDC5C8C2FEDD832D4213008189945 +:101F5000F5DBB010301EC0B8F32600001397202A1E +:101F6000EFE610875C8A5C772FE90E08FC0A1900FF +:101F7000FE9BFFF41699E219FFFE120CEDBB000068 +:101F8000C0411989A9691208F3D8C010B188F208B4 +:101F900000081099E0190000C060F3D8C010B188A3 +:101FA000F20800085CD8F9D8B010D822D431300A31 +:101FB000301414981495C488985B7816EFDBB01031 +:101FC0000C9E3009C0B8FD2200001D932027E7E2D7 +:101FD00010835C875C732FEE06090E93E8071900E7 +:101FE000FE9BFFF3169EE21EFFFE1C06FDDBC001FA +:101FF000EA0E1900C0400D8EA96E1C09FDD9C01053 +:10200000B189FC090009129EE01E0000C060FDD9E4 +:10201000C010B189FC0900095C79F7DBC001F20846 +:102020000008F3D8C010B188F2080008580BC0B0FF +:10203000F3D8C108F40A1101A9685C5AF1D8C0109C +:10204000F3E81008780C580CCB81580AC080F3D8FC +:10205000C108A968F1D8C010F3E810085CD8F9D815 +:10206000B010D832D431201DFAC4FFD8169712937D +:102070001092681518966801580AE0800091500A7D +:10208000314BF01F0055400AC0A04D48E06C00FEE7 +:10209000F109005C2FF9F159005CCC286C148C59C3 +:1020A0003138F0091900E08B000F4CD8201D1AD8E8 +:1020B000E068022C1AD84CB84CBC1AD8F01F004B60 +:1020C0002FCDC0085C53E3E310815C71E961000926 +:1020D000A981E9610008158B1598B168F1EB1188A9 +:1020E00015ABF1EB108815BBF7E81008F00B1618CC +:1020F000E9680013E96B0010F7D8C208F1D8C108ED +:10210000E96B0011E9680012E81245005C72A892C0 +:10211000E4031608A883ED380008A8A8ED380009E4 +:102120004B39A8FCA8B8A8EC9208F7D8C010A8DBD7 +:10213000A98BA8CB2FF8B2085807C0D00F8B0FB9C6 +:102140000F98B168F1EB11880FABF1EB1088F3E851 +:102150001008C051EAC8FFFCEBF81001F00916188E +:10216000E968000FE969000CF3D8C208F1D8C1088A +:10217000E969000DE968000E3008E968000BE968BC +:10218000000A500A314B089CF01F001A5C7CE96C75 +:10219000000BA98CE96C000A400AC038781A2F0A93 +:1021A00048E8F10900482FF9F1590048158B1599B5 +:1021B000B169F3EB118915AB6A18F3EB108915BB04 +:1021C000F7E910091039C1910C9B0A9CF01F000A15 +:1021D000C26800008000CDD4000080D48003B3909A +:1021E0008003B3D880039D9C800094C40000734892 +:1021F00080011F4A8000CAF8EB08002C5808C0B0C4 +:102200008C49F0091900E08800070A9B0C9CF01F1C +:102210000006C0580C9B0A9C6A585D185C5C2FFD38 +:10222000D8320000800125A0D42149781896700783 +:10223000C1680E9CF01F0015C1100D8B0D98B16880 +:10224000F1EB11880DAB6E1AF1EB10886E290DBB06 +:10225000F7E8100814581268C1306E075807CEA16D +:1022600048B66C0C580CC040F01F0008C08148985C +:10227000F10900562FF9F1590056C0286C070E9C41 +:10228000D8220000000080CC8000CAE4000080D08A +:10229000000080D4D421204D1897503B149C502A24 +:1022A000501950084096F01F000D403B402A40193D +:1022B0004008C0A148A8E06C00FCF10900562FF9C5 +:1022C000F1590056C0881ADC0E9C1AD6F01F000582 +:1022D0002FED5C5C2FCDD82280012228000080D415 +:1022E00080012064D4314C05EB08004A2FF87817A0 +:1022F000EB58004A0F980F831694F1E31083189659 +:10230000E609160C3048F0091900C090F01F00379C +:10231000EB08005C2FF8EB58005CC2980FB8E7D3CD +:10232000C1040FA2A363F1E2108298585C82E60810 +:102330001900C0539848E4081900C0B20C9CF01F63 +:10234000002B4A98F10900522FF9F1590052C86840 +:10235000069B0E9CF01F00265C8CC0F00C9CF01FAE +:102360000023EB0800502FF8EB580050EB08004E0C +:102370002FF8EB58004ECD48F7D2C0100C9CEEC0A1 +:10238000FFF0F01F001C0895301249B10A9CF01FA5 +:10239000001BC1D0EAC8FFFCC1A06A185808C17070 +:1023A000EF3A0010EF390011B169F3EA1189EF3A01 +:1023B0000012F3EA1089EF3A0013F5E91009103919 +:1023C000C2A00A9B009CF01F000EC2515802E3F508 +:1023D0001000EBF5000030020835EBF50000580561 +:1023E000CD61C9F8000080D48000D13C80011F4A33 +:1023F0008000D210000080CC8000CAE48001255803 +:10240000EE03000307B807A9F1E910893448F00981 +:102410001900C2A0EF39000CEF38000DB168F1E9E6 +:102420001188EF39000EF1E91088EF39000FF3E859 +:102430001008C1B0089BEECCFFF4F01F003DC0A116 +:10244000EF38000CFC19E000B968E618F00012380B +:10245000C0C10C9CF01F00374B78F109004E2FF9DA +:10246000F159004EC5D808955805C0510C9CF01F75 +:102470000031C5680FE90FF8F1E91088F1D8C00EF6 +:10248000C0700C9CF01F002D1896C4A078174AC885 +:1024900091044AC8089B91070C9CF01F002BC3B104 +:1024A000EF3800095868C0B05918C0405818C11119 +:1024B000C0B8089B0C9CF01F0025C2D8089B0C9C40 +:1024C000F01F0023C288089B0C9CF01F0022C2381A +:1024D000089BEECCFFF0F01F0016C0F1EF380010A3 +:1024E000FC19E000B968E618F0001238C0608D17DA +:1024F000302B0C9CF01F00180C9CF01F000E48E8BD +:10250000F10900582FF9F1590058F109004E2FF93F +:10251000F159004E48A93008930848A99308D83AC1 +:10252000EF3800095918FE91FF77C6BB8001255886 +:102530008000D13C000080D4800129BC0000822CA6 +:10254000000082308000D588800115508000F37C27 +:1025500080011910800118FC19B9198A1998B168FD +:10256000F1EA118819AAF1EA1088F3E81008F0C915 +:1025700000015BD9E08800035EFFF7390035EDB953 +:102580000001C0E1761A1438C0B07629105A126AD8 +:10259000C0715CD9F3E8000812385F0C5EFC5EFD88 +:1025A000D431209D503B506A781B403AF519002CDD +:1025B000F2C80013502B5078214917EA17F8F1EAB6 +:1025C00010885C88109BF1D8C00DE21B2000984356 +:1025D000505B2143308B5018F20B0C0A1897F3DA3A +:1025E000B0105C8312985049A37830025C88314067 +:1025F0005088C938401B405AF1DBC00D14485008C0 +:10260000E3D3B010F1D3C01040791039E08900064F +:10261000400B4081ADBB500B300A314B302CF01FCA +:1026200000421894C3708E58313AF4081900E08BB8 +:10263000000F4BE8201D1AD8E06802C31AD84BC817 +:102640004BCC1AD8F01F003C2FCDC008314A402B8C +:10265000781CF01F003A6E19F1D0C010F208000883 +:102660006816EBD1B0108F188E58F0000100AE50F4 +:10267000C2188E52EA021900EA0217205C82C19049 +:10268000302A300B303CF01F0028C071089CF01F2E +:10269000002CE06C00FFC4586E18B842B852189B6A +:1026A00099180415089C5C85F01F00265805C02069 +:1026B0006E075805CDF1ED65000B40085C78ACF86D +:1026C000A988ACE8E2C8FFEC5C78ACB8A988314BCB +:1026D000ACA8ED65000A0C9CF01F001B5C7CED6C47 +:1026E000000BA98CED6C000A4039406A7258089BB7 +:1026F000129C5D18495BF70800302FF8089CF758CA +:102700000030F01F000F40180213404AE1D2B01011 +:1027100014085C835C8850185803FE91FF6D069C7A +:102720002F7DD8328000D3188003B4108003B45CAE +:1027300080039D9C800094C48002E7368000D13CD9 +:102740008000CD3480011F4A000080D4D40148F8B5 +:1027500070091839C04178099109C128580BC0E1A6 +:1027600048B8201D1AD8E06801341AD8489848ACF7 +:102770001AD8F01F000A2FCDC00878089708189BB8 +:10278000305CF01F0007D8020000734C8003B410C7 +:102790008003B47C80039D9C800094C48000C97435 +:1027A000D43118971696183BC0E14BC8201D1AD893 +:1027B000E06800A41AD84BA84BAC1AD8F01F003A16 +:1027C0002FCDC008580BC11076081838C0E04B3820 +:1027D000201D1AD8E06800A61AD84B484B1C1AD8FE +:1027E000F01F00312FCDC0086E156A1811CA11D91B +:1027F000F3EA1089C0303004C1D8118A1199109CB5 +:10280000B169F3EA118911AA11B8F3EA10891248E3 +:10281000314A8F18EECBFFF8F01F0025301B0A9CC1 +:10282000F01F00240A9CF01F002418940A9CF01F3B +:1028300000236E15C1486A1811B9118A119311A8A5 +:10284000B163E7EA1183E7E81083F3E31003F01FB5 +:10285000001A18040A9C0695F01F00180A9C5805D7 +:10286000CEB10C9B0E9CF01F001649689009F5D95B +:10287000C010083AC0E44898201D1AD8E06800C784 +:102880001AD84918487C1AD8F01F00072FCDC00865 +:102890000819089CB009D8328003B4108003B4989A +:1028A00080039D9C800094C48003B4A48002E7361A +:1028B000800118E88000CD0C8000D13C8001274CBD +:1028C000000073508003B4B8D431300618971692C4 +:1028D0004AB30C94300566080A9B0A9CC3E8EF3A99 +:1028E000000CEF39000DB169F3EA1189EF3A000EDF +:1028F000F3EA1089EF3A000FF5E91009705A123A1D +:10290000C1B1EF3A0010EF390011B169F3EA118952 +:10291000EF3A0012F3EA1089EF3A0013F5E91009D3 +:10292000706A123AC0910FCA0FD9F3EA1089906AFF +:10293000F20A1900C0D02FF5580CC090F13A001FD0 +:10294000F939001FF20A1800E08B0003109C70098F +:102950005809F00B171012985808CC21580CC04099 +:10296000F01F0008180658155F9804365F59F3E801 +:102970000008E8081800CAF10C9CD8320000734C1B +:10298000800127A0D42148C83007700CC108F9384D +:10299000001F7806F0C900015808C050F969001FEF +:1029A0001897C0480E9BF01F00050C9C580CCF01D7 +:1029B000D82200000000734C800127A0D431201DD4 +:1029C0004CD8F10900322FF9F159003278161895D8 +:1029D0000D835C83F3D3C004A3695949C080F10916 +:1029E00000442FF9F1590044E08F02570DF80DE132 +:1029F000F1E110810DB80DA24C07F1E21082F01F39 +:102A000000408E885C815C821894F808000858A801 +:102A1000E08A000D189B0C9CF01F003AC5708E8850 +:102A2000E808000858A8E08900524B783009700780 +:102A30005009C3D8ED39000CED38000DB168F1E94B +:102A40001188ED39000EF1E91088ED39000FF3E837 +:102A500010086E591039C291ED390010ED3800118F +:102A6000B168F1E91188ED390012F1E91088ED390A +:102A70000013F3E810086E691039C1710DC90DD843 +:102A8000F1E910888E69F0091900C0F149A8F1092F +:102A900000462FF9F15900460DE90DF8F1E91088CB +:102AA000F1D8C00DC360C3F850076E075807CC318A +:102AB000E08F021E089B0C9CF01F0012083CC065B2 +:102AC000305CF01F00121897C09148B8F109003C23 +:102AD0002FF9F159003CE08F01E0320A300B0E9CD7 +:102AE000F01F000B30394888EF69001F70098F090B +:102AF0009107C138000080D4000073508000CD0CD5 +:102B0000800128C80000734C8000C9D48002E8BC52 +:102B10008EF8F1D8C00DC070314A0C9BEECCFFF896 +:102B2000F01F004F4CF89009F20400045C84B004DC +:102B30000DE8A598EDB80000C120EF38001EE3D1E4 +:102B4000C00DE7D3C004A371E60310FCE20200024B +:102B5000A1A80602EF68001EEF52001C6A1811BB04 +:102B6000300A11AEF7EE108E118BB09AB0AAB0BA3F +:102B7000B08A1499F5DBC00411FBF40A10FC11ECC7 +:102B8000F7EC108CF9DCB00DA37CF7DCC010B0DBE7 +:102B9000A98B180EB0CB140E10935C8E3016F5DE98 +:102BA000C010B0FAA98AB0EA6E11029BC548761A25 +:102BB00015C015D2E5E010825C82E40C1900C292C7 +:102BC000F6021618B0BBB082E5DBC208F7DBC1081D +:102BD000B092B0AB5809E080008213E213FBF7E239 +:102BE000108BF60C1900E08300FF15DB15CAF7EA1D +:102BF000108AF40E1900E08B00F7EA0A1618B2B535 +:102C0000B28AF5D5C208EBD5C108B29AB2A5C6788A +:102C1000E40C1900E08000E815E015FBF7E0108BEC +:102C2000F60C1900E08300E05809C09013FB13E98B +:102C3000F7E91089E4091900F9B601001582159B1E +:102C40001499B16BF7E2118B15A215BAF7E2108B4C +:102C5000F5EB100B580BCAC1C52900008002E736FE +:102C60000000735013EB13FA11CCF5EB108A11DB53 +:102C7000F7EC108BF60A1900E088000F4BC8201DF6 +:102C80001AD8E068018E1AD84BA84BBC1AD8F01F8E +:102C9000003B2FCDC008EA0B1618B28BF7D5C2083F +:102CA000B2B5B29BEBD5C108B2A511CB11D9F3EBEC +:102CB0001089F20A1900F9B60100C1185801C0E0E4 +:102CC0004AB8201D1AD8E06801971AD84AC84AACF9 +:102CD0001AD8F01F002A2FCDC0088F15EF39001E1B +:102CE000EDB90000E08100E45806E08000E16E19D3 +:102CF000721A15CB15D9F3EB1089E08100D9118B2D +:102D000011951099B165EBEB118511AB11B8EBEB97 +:102D10001085F1E51005C1A807F86A1907EB13CC77 +:102D2000F1EB108B13D8F1EC1088F00B1900E08157 +:102D300000BF13881395B165EBE8118513A81293B2 +:102D4000EBE8108513B8F1E510055805CE61123A8D +:102D5000C1A14878201D1AD8E06801B91AD848984E +:102D6000485C1AD8F01F00052FCDC0088003B410AE +:102D70008003B4D480039D9C800094C48003B4F489 +:102D80008003B52C138A1398B168F1EA118813AA4D +:102D9000F1EA108813BAF5E81008C0E04C68201D6D +:102DA0001AD8E06801BB1AD84C484C5C1AD8F01FFE +:102DB00000452FCDC00813F813E9F1E91088EF0999 +:102DC000001C5C88F0091900C1704BB8201D1AD88E +:102DD000E06801BD1AD84BC84B9C1AD8F01F0039C7 +:102DE0002FCDC0080A9CF01F00394B9818143006EC +:102DF000B0040A9CC5982EC8EF58001C6E187016B7 +:102E00000D880D94B164E9E811840DA8E9E81084F7 +:102E10000DB8314AF1E41004EECBFFF80C9CF01F22 +:102E2000002DEF38001CACA8EF38001D0C9CED65A0 +:102E3000000BACB8ACE5ACF5ED65000A314BF01F0A +:102E400000265C7CED6C000BA98CED6C000A6E1604 +:102E5000C1586815089C3ECBF01F0020089B0C9CB5 +:102E6000F01F001F0B890BB80B94B164E9E91184C2 +:102E70000BA9E9E91084F1E410045804CEB10E9CCA +:102E8000400BF01F00180C9C49178E05F01F000F17 +:102E90001815AE05C0D849480A9CF109003630061D +:102EA0002FF9F1590036F01F0011C02830060C9C94 +:102EB0002FFDD8328003B4108003B53C80039D9C65 +:102EC000800094C48003B5608000CD0C0000735076 +:102ED0008002E73680011F4A8000CDD48000CD34C7 +:102EE0008001274C000080D48000D13C305CF01F72 +:102EF00000061897FE91FDF3FE9FFDDE5809FE9136 +:102F0000FEB3CDDA8000C9D4D4211898F937002E49 +:102F1000761E306CF8071800C0E04948201D1AD80A +:102F2000E06801B41AD84928492C1AD8F01F0012B9 +:102F30002FCDC008306C201C5C5CF20C0706FC0C2A +:102F40000007EF66000EF40C0706EF660014580C3D +:102F5000CF313089FD6C001BFD69001A109C706830 +:102F60005D185C5CD82200008003B5948003B5DC5A +:102F700080039D9C800094C4D4211897580CC0E114 +:102F800049D8201D1AD8E06800941AD849B849CC0D +:102F90001AD8F01F001C2FCDC00878185808C0E1BF +:102FA0004958201D1AD8E06800951AD84968494C3C +:102FB0001AD8F01F00142FCDC0086E186E06109C92 +:102FC0005808C0E148C8201D1AD8E06800991AD8EE +:102FD00048E848BC1AD8F01F000B2FCDC008F01FDE +:102FE000000C0E9B306C0C97F01F000A5806CE6147 +:102FF000D82200008003B5948003B62080039D9CF6 +:10300000800094C48003B62C8003B63C8000D13C81 +:103010008000C974D431201D500B1897580CC0C0C3 +:103020004D084D19118CF80815031818F2080028DE +:1030300070495829C0D030AA30094CBE129C1C924D +:10304000129B2ECE1298149314911490C1980F8A4B +:103050000F99B169F3EA11890FAA7018F3EA108980 +:103060000FBAF5E910091039CE714C08F109002E9C +:103070002FF9F159002ECE480C990A9C089B30A6D6 +:10308000EC031800C0A1FCF6FFFC5806C0611296C4 +:10309000189516941093C498FCF6FFFC5816C2417C +:1030A0005807C0F00F860F95B165EBE611850FA6A6 +:1030B000EBE610850FB6EDE5100564160C35C26021 +:1030C00064051D865805C080F2061800C2B3189525 +:1030D0001694109AC2A80C94F6061800C2331296E1 +:1030E00018951090C2285826C1D15807C1300F86B4 +:1030F0000F95B165EBE611850FA6EBE610850FB6CF +:10310000EDE5100564160C35C0514969109CB28874 +:10311000C9781D85F8051800C053129616941091B1 +:10312000C0481296189516942FF82E4E5C582E42D1 +:1031300030A9F2081800CA11F2031800C061400655 +:10314000EDB60000E081007B4005E2150002E08161 +:1031500000763098F0031800E089000A5C53C498A8 +:103160000000735200007354000080D430A8F001B6 +:103170001800C180E7D1C0084B38E60915030619CD +:10318000F00903285808C2304B08201D1AD8E068FF +:1031900001761AD84AE84AFC1AD8F01F002F2FCD22 +:1031A000C008F0001800C040E7D0C008C108E20A1B +:1031B0001800C4404A48E7DAC008E60615030616B8 +:1031C000F00600266C0CF01F00258D053098F003EA +:1031D0001800E088000F49D8201D1AD8E068018C3B +:1031E0001AD849F849BC1AD8F01F001B2FCDC008C7 +:1031F0004959E6081503300A0618F2080028F0C9F4 +:10320000FFF0930A5807C0D00F8B0FBA0F99B1691E +:10321000F3EB11890FABF3EB1089F5E91009911964 +:103220004899E60815030618F20800282F08300907 +:10323000069CB0C948B8B083C038E06C00FF2FFDD1 +:10324000D8320000000073548003B5948003B64C5C +:1032500080039D9C800094C480012F788003B66415 +:1032600000007352D431494730050E963EF42EC704 +:10327000ECC3FED40F882FF85C58AE88EEF9FFFC43 +:103280005829C061E8081800E08B0009C0F85819F7 +:10329000C0D1F2081800E088000A6C0C580CC0403D +:1032A000F01F00068D05EF45FFFC2E472E46063722 +:1032B000CE21D8320000735480012F78D431306889 +:1032C0001293189616951497F939002EF0091800E4 +:1032D000C0E04B78201D1AD8E06801DA1AD84B58A4 +:1032E0004B5C1AD8F01F00352FCDC008580BC5C055 +:1032F00017891798B168F1E9118817A9F1E91088C1 +:1033000017B9F3E81008C500189B0A9CF01F002CA1 +:103310001894C4A10B88FC19E000B968E618F00005 +:103320001238C420069B0A9CF01F00265C5CE80C47 +:103330001800C3C55C6C4A49F8081503302AF00C24 +:10334000010CF20C00289166F0C9FFF0930A0FDA25 +:10335000F16A000D0FCAF16A000C0FBAF16A000B96 +:103360000FAAF16A000A0F9A1095F16A0009ECC3DE +:10337000FFD10F8AB2C4F16A0008C0F87009701456 +:103380008B09F01F00120E99069A089B0C9CF01FE7 +:103390000010089CF01F000F6A08306C109B580842 +:1033A000CEE1109CD832E06C00F6D8328003B594A0 +:1033B0008003B67880039D9C800094C480012558CA +:1033C00080013014000073548000C97480012F08FC +:1033D0008000D13CD421189E580CC0E14958201DD2 +:1033E0001AD8E068024A1AD84938494C1AD8F01F4E +:1033F00000142FCDC008761AF4C8FFE4F137000F8F +:10340000F136000CF139000DF138000E782BB1695E +:10341000F3E61189F3E810897818EFE910091059DB +:103420001669C061F4CBFFD82ECAF01F0006D8225F +:103430008003B5948003A13880039D9C800094C4D0 +:10344000800132BCD431202D189616911495580C59 +:10345000C0E14CA8201D1AD8E068027F1AD84C8819 +:103460004C8C1AD8F01F00482FCDC00894593378DF +:10347000F0091900E08B000A4C48149CF109002265 +:103480002FF9F1590022C3087414E8C7FFE40F981C +:103490000F89F1E910893018F0091900C1E10FD83E +:1034A0000FC9F1E91089E0680604F0091900C1515B +:1034B0000FB80FA9F1E91089E0680800F0091900B8 +:1034C000C0C1E938001BE939001AF1E91089E06848 +:1034D0000806F0091900C0E04AC80A9CF109002852 +:1034E0002FF9F1590028F109001E2FF9F159001E9A +:1034F000CA184A68F109001A2FF9E8C3FFD6F15932 +:10350000001AFAC2FFFC304A069B049CF01F002000 +:10351000EF380018EF390019B169F3E81189EF3875 +:10352000001AF3E81089EF38001BF1E910096C1854 +:103530005808C0C01039C0A1049B3019E8CAFFDC8C +:103540000C9CF01F00143018C0A83009EECAFFF818 +:10355000FACBFFFC0C9CF01F000F30080FEA0FF9AC +:10356000F3EA1089301AF4091900C1503028F00923 +:103570001900C591C52800008003B5948003A138C7 +:1035800080039D9C800094C4000080D48002E736B4 +:10359000800132BC5808C4D03008AEE83028304A28 +:1035A000AEF8EECBFFF2EECCFFE8F01F0025304A7C +:1035B000069CEC0A000BF01F0022ED39002E30684B +:1035C000F0091800C0E049F8201D1AD8E06802D9B7 +:1035D0001AD849D849DC1AD8F01F001D2FCDC008D1 +:1035E000306820185C58EE080009F33B0008F36BC4 +:1035F0000012E808000AF56B000EE208070BF36BF7 +:103600000008E2080709F56900145808CEB10C9CBF +:103610006C680A9B5D18C0D80C9CFACBFFFCF01FAD +:10362000000DC07848C8F109002C2FF9F159002C81 +:103630000A9CF01F000A2FEDD83200008002E73606 +:103640008003B5948003B5DC80039D9C800094C406 +:103650008000B3B4000080D48000D13CD42178191C +:10366000F338001BF339001A1697F1E91088189601 +:10367000E0690800F2081900C070E0690806F20865 +:103680001900C231C1C8189B0E9CF01F00173E4B99 +:103690000C9CF01F0016C0E04958201D1AD8E068A5 +:1036A00004A41AD84938494C1AD8F01F00142FCD59 +:1036B000C0080E9B0C9CF01F0012C148189A169C63 +:1036C0002D1BF01F0010C0E848F8F10900282FF961 +:1036D000F1590028F109001E2FF9F159001EF01FC1 +:1036E000000BD82A800133D48000CDD48003B59458 +:1036F0008003B36C80039D9C800094C4800122E40D +:1037000080013444000080D48000D13CD431300AA0 +:1037100018941691303C338BF01F0042E8C8FFD15B +:103720001895580CC0A14C08E06700FFF10900246F +:103730002FF9F1590024C738985A3379F20A190041 +:10374000E08B000F4B98201D1AD8E06804311AD87E +:103750004B784B8C1AD8F01F00382FCDC008300999 +:103760007813E6C7FFE4AEE93019AEF93069E93AFB +:10377000002EF20A1800C0E04AC8201D1AD8E068DE +:1037800004391AD84AD84ABC1AD8F01F002B2FCDBA +:10379000C00830664AAB4ABA20165C56F006070CE1 +:1037A000EE060009F36C0008F606070CF36C001235 +:1037B000F406070CE6060009F36C000EF006070C91 +:1037C000F36C00145806CE913042EECCFFF2E802C2 +:1037D000000B049AF01F001C049A029BEECCFFE839 +:1037E000F01F00193069AED2AEC9AEB6AE863088D1 +:1037F000301AAEA8AE9AE769001BE768001A089C69 +:1038000068680A9B5D184888F10900182FF9EFDCF9 +:10381000C008F15900180A9CF01F000C0E9CD83209 +:103820008000D318000080D48003B5948003B6A034 +:1038300080039D9C800094C48003B5DC8003B71690 +:103840008003B58D8002E7368000D13CD4211694E8 +:103850001896189B1497089CF01F00541895E08147 +:1038600000DF09890998B168F1E9118809A9F1E92E +:10387000108809B9FC1AE000F3E810081099E6195D +:10388000F0001439E08000CC5808E08000C9301BFB +:10389000089CF01F00475C5CEA0C1800C0545807F5 +:1038A000E08100CBCC184C39EBDCB008EA081503FA +:1038B0000A18F20800282F0870095809F9B9000100 +:1038C000F1F90A004BB9EA0815030A18F2080028B2 +:1038D0007048F0C900015819E088000F4B68201D9E +:1038E0001AD8E06803A51AD84B484B5C1AD8F01FC9 +:1038F00000352FCDC00858185F0858075F09F3E856 +:103900001008C041E06400FFC078089B0C9CF01FC9 +:10391000002EE9DCC0085807E08000854A5AEA0911 +:1039200015030A19A369F409000870485828C0B1A2 +:103930002F890E9BF40900090C9CECCAFFD1F01FE3 +:103940000023C6B85818C6E110990E98905B904AAB +:10395000F40B1900C111700A580AC0E04968201D13 +:103960001AD8E06803C41AD84998495C1AD8F01FDD +:1039700000152FCDC008F13A000CF20A1800C05112 +:1039800070085808CE41C51890CB300A303CF01F63 +:1039900000111896C4F00E9BF01F000F5C5CC1F084 +:1039A0000C9CF01F000EC468800125588001301463 +:1039B000000073548003B5948003B6D480039D9CAB +:1039C000800094C48001370C80012F088003B6FC6E +:1039D0008000D3188000CF988000D13C306CF01F5D +:1039E000001AC170300899169908EA081503F00505 +:1039F00001054968F00500256A045804C07008985C +:103A000068045804CFD1910CC0288B0C089CD82294 +:103A10000C9CF01F000F089C5C5CD822E06C00F648 +:103A2000D822089C5C5CD8220E960E9CF01F0009E0 +:103A3000CD6B089C5C5C4888F10900242FF9F15992 +:103A40000024D8228000C9D4000073548000D13CE7 +:103A50008000CD1E000080D4D421202D169618970A +:103A6000149531CB0C9CF01F0027C0804A68E06C95 +:103A700000FE90592FF9B059C4180E9B0A9CF01FF4 +:103A80000023C3410B890B98B168F1E911880BA998 +:103A9000F1E910880BB9FC1AE000F3E8100810995E +:103AA000E619F0001439C0F13019BAA935E9BAC9DC +:103AB000F3D8C207BAF8BAD9A988BABCBAE8FAC921 +:103AC000FFFEC1586E1912586E291268C0906E38E8 +:103AD0005808C041E06C00FCC118EEC5FFF40C9A18 +:103AE0000A9B0E9CF01F000AC08848A90C9B0E9CE4 +:103AF000EECAFFD1F01F00085C5C2FEDD822000059 +:103B00008000CDD4000080D4800125588001384C3D +:103B10008003B58D80012F0878983019B0895EFC3C +:103B2000D4217897EF380024EF390025F0091800E8 +:103B3000C021D82AEE080028201D701630086C1904 +:103B40008CCA8CDB20EA1AD620EBF2CCFFF2F01FF5 +:103B500000182FED587CC0F0581CC0310C95C138AE +:103B6000EF3800242FF8F1D8C0030C9CEF68002434 +:103B7000F01F0010E06C00F4D8228ADB6A1CF01FF2 +:103B8000000E6A055805CFA1EF3800242FF8F1D8B0 +:103B9000C0030C9CEF680024F01F00064878E06C1E +:103BA00000F290092FF9B009D82200008001933467 +:103BB0008000D13C80013F7C000080D4D421204D86 +:103BC0001896F01F002D5806C5306C955805C50095 +:103BD0000B885808C4D0E0680600300ABA68E06B69 +:103BE0000600303CF01F00251897C3F03008FACBD0 +:103BF000FFF4AA88781CF01F00229A6B580BC35060 +:103C00005C7BFAC8FFF2FAC9FFFCFACAFFF86E1C27 +:103C1000F01F001C586CC2606E18402B101B40181F +:103C20005C5B0E9C100B5C7BF01F001749789019B1 +:103C30002FF9B0196E19F338001BF339001AF1E9A6 +:103C40001088E0690800F2081900C060E069080601 +:103C5000F2081900C0716C480C9B0E9C5D185C5CEE +:103C6000C0400E9CF01F000A0C9CF01F000A2FCDD4 +:103C7000D822000080013FA08000D31880013F5867 +:103C8000800192DC8000D210000080D48000D13C02 +:103C900080013B20D4211897580CC0E149B8201D61 +:103CA0001AD8E06801491AD8499849AC1AD8F01FC7 +:103CB000001A2FCDC008499899983778F9680036CE +:103CC00036C8F9680037496899584968189B996857 +:103CD000495CF01F0016496CF01F00163628EF688B +:103CE00000353068EECCFFD1EF68002EF01F0012D7 +:103CF000581CC040E06C00F4D822E06805DC300CB1 +:103D0000EF58002CD82200008003B71C8003A13894 +:103D100080039D9C800094C40000746C80013A581C +:103D200080013D5880013B1880013E6880013D388C +:103D300080018F4480019128D40116985C7A189BE9 +:103D40002F29109C5C79F01F00045C7CF9BC00FFFB +:103D5000D80200008000CEC4D42131B918977898D9 +:103D6000965AF20A1900E08B0005E06C00F4D822A4 +:103D7000F1390025F13C0024F2CAFFFFF5DAC00357 +:103D8000183AC041E06C00F2D822F16A0025F0092F +:103D90000028169C911B3F26F01F00050E9CF01F6B +:103DA0000005EC0C1800CFB0D82A00008000CD1E12 +:103DB00080013B20D42130061897E9DBC01030A5E4 +:103DC000C138EE060708201D48BC1AD8F01F000BAA +:103DD0002FED5806C080EC050C085809C041488CEE +:103DE000F01F00062FF60836CED5486CF01F0003F2 +:103DF000D822000080037AF0800094C48003B76862 +:103E0000800384D448CD48D0E3B00001D55348C0E6 +:103E100048C10230C06248C2A505A1240230CFD3F8 +:103E200048A048B10230C06230023003A122023003 +:103E3000CFE3488F000100008003760000000008F7 +:103E4000000009B88003F480000009B800008CC8A5 +:103E500080008EDCD4013018F96800087808580812 +:103E6000C030781C5D18D802D4014869930C931BAC +:103E7000F33800085808C040129CF01F0003DA0A0B +:103E80000000749880013E54D421201D1895169688 +:103E90001494300B30CA49DCF01F001D300B49DC94 +:103EA000F01F001D300B49DCF01F001D497B49DC71 +:103EB000F01F001D1897581CC0400E9C2FFDD822E3 +:103EC000F01F001A1897581CCF910C9B0A9C49862A +:103ED0008D07F01F00181897581CC04030088D0837 +:103EE000CEDB30088D08F01F00141897581CCE61E7 +:103EF000FACBFFFD302CF01F0011F9B701FFFBF8E2 +:103F00000803E9F80A00CDAB00007498800091D056 +:103F100080013F8C80018F3080013F3C80019F6099 +:103F200080013E54800144588001440C0000749488 +:103F300080018F488001443080014110D401169CDB +:103F4000580BC041F01F0004D802300B301CF01F8A +:103F50000002D80280014110D4014879F3380008EA +:103F60005808C021DC0A3008F3680008F01F00037D +:103F7000DA0A00000000749880014284D4015C7B5E +:103F8000F01F0002DA0A00008001433CD401169CB5 +:103F9000F7DAC010F01F0002D80200008001433C95 +:103FA000EBCD40C0203DF01F00164969F3380008F2 +:103FB0005808C04072085808C0402FDDE3CD80C0CB +:103FC000E0680100FAC6FFF4E06C01000CE8F01FA5 +:103FD000000E0C9B1897F01F000D9A5B580BC0A0A9 +:103FE0005C7BFAC8FFF81A99FACAFFFC0E9CF01F16 +:103FF00000080E9CF01F0007CE1B0000800140A4AB +:10400000000074988000920080013F58800192DC8B +:10401000800091E8D40148583019701CF1690009FA +:10402000700A5D1AD8020000000074A8EBCD40CCE5 +:10403000206D49A6FAC7FFF46C2E8F2EECE200002B +:10404000EEE3000016961093FACEFFF0580CC22053 +:104050007C08FC1C8000F1EC100BF4081509BBB8BF +:10406000F1E611C812481648301C9D08F01F000CDC +:104070000E9C30CA1A9BF01F000BFB38000AA68862 +:10408000FB39000B300CA699F01F00052FADE3CDD6 +:1040900080CC7C0BCE3B00008003B774800075B4ED +:1040A00080007534EBCD4080201D4987EF38000833 +:1040B000EDB80000C071EF3900093008F0091800B0 +:1040C000C0402FFDE3CD808030091A98129B129CCE +:1040D000305AF01F000F3FF91B88F2081800CF205C +:1040E0001B98EDB80001CEE13008301C109B302940 +:1040F000E06A00F0F01F000630186E1CEF6800093F +:104100006E095D19CDFB0000000074A88001402CF1 +:10411000EBCD40C0201D301AF40C1800C1B0C08394 +:104120003028F00C1800C2602FFDE3CFC0C01A97F2 +:10413000300630091A98E06A00F1129B301CF01F1B +:1041400000161B98EC081800CF51300C2FFDE3CD62 +:1041500080C018961A9730191A98E06A00F1300B4F +:10416000129CF01F000D1B98EC081800CF51300C6A +:10417000CEEB48A8F1390008F9D9C001F7FA1E00C2 +:10418000F9BC0100F9B8005AF7F80E002FFDE3CD95 +:1041900080C000008001402C000074A8EBCD406876 +:1041A00048F516961893AA4B301CF01F000E0A9C77 +:1041B000310A300BF01F000C069BF5D6C010300CF6 +:1041C000F01F0009304A300B488CF01F0007300CFC +:1041D000F01F00040C9CE3CD80680000000002107A +:1041E000800075B4800075348003B780EBCD40400B +:1041F00020ED30083009FAE90018FAE90000FAE980 +:104200000008FAE9001049BBFAC6FFD4762A8D2AC5 +:10421000F6E80000301CECE90000F01F0017320A3D +:10422000300B1A9CF01F00150C9C30CAFACBFFE033 +:10423000F01F0012300CF01F00103019FB38002A5C +:10424000F2081800C0503FFC2F2DE3CD804048C835 +:10425000F1390008F9D9C001CF8030083039304A2F +:10426000109B301CF01F00072F2DE3CF8040000073 +:104270008003B784800075B480007534000074A892 +:104280008001402CD42130094A881695F169000933 +:104290001896320BF01F00268C085CC82FE8F7D860 +:1042A000B010AA0BEFDCB010F6C90007E06805F902 +:1042B000F0091900E08B00300D890D98F208180004 +:1042C000C220F6071900C182E0640200F9D7C010CD +:1042D0005C7B181BEC0C000CE04B0200E80B17B0E9 +:1042E0005C7BF01F00138A0B0E0CEFDCB010EE0BA2 +:1042F0001900FE9BFFED48F83009118AF20A1800F8 +:10430000C0D1D8220DA8F2081800CDC10DB8F2080E +:104310001800CD813008AA08D822F5DBC010486CFF +:104320000C9BF01F0006D822000074A88001419C5D +:10433000000074A48003B76C8001447CD4314A38F7 +:1043400018921695118A3009F20A1800C3615805AF +:10435000C33049F83004F0C0FFF4E0610200C22825 +:10436000E06602000C970C93301CA006F01F0019A9 +:10437000300B497C314AF01F0018E404000C0E9AFF +:10438000300BF01F0015304A300B494CF01F001263 +:10439000300CF01F0010EA0601080604EBD8B0103C +:1043A000C0B0E2051900FE9BFFDDEDD5B010EFD6E1 +:1043B000C0100E93CDABD832F5DBC010189B488CE3 +:1043C000F01F0008CC5B0000000074A4000001FC9A +:1043D000800075B4800075348003B7808003B770A7 +:1043E0008001447CD401201D3009301C1A98E06AF9 +:1043F00000F5129BF01F0004314CF01F00042FFD4C +:10440000D80200008001402C800075D2D401F01F3A +:104410000007F01F0007C03030CCD802F01F0003A7 +:10442000F01F0003CFA1DA0A800143E4800141ECD0 +:10443000D401314CF01F0006F01F0006C03030CC14 +:10444000D802301CF01F0004DA0A0000800075D288 +:10445000800141EC80007618D4014878910C911BC2 +:10446000F0CCFFF8F01F0005F9BC010CF9BC00010D +:10447000D8020000000074A8800076385EFCD703E4 +:10448000EBCD40F849C56A096A181039C2F08B0CA7 +:10449000EAC7FFF0EAC6FFF4EEC30010EAC4FF70FB +:1044A0000F89EDB90000C091EDB90001C0616C0940 +:1044B0006A081039E08800082F072F060837CF1147 +:1044C000E3CD80F86E19300B169C5D190F883FDA2A +:1044D000F1EA0009EDB80002C0716609EEF8FFF8D4 +:1044E00012088D08CEABAE89CE8B5809CD118B1C2E +:1044F0008B0CCCFB000074B8EBCD408048CE1897F5 +:10450000300AFCCBFFF0F408150417892F88FC084B +:10451000000CEDB90000C0512FFA2F0B588ACF4183 +:104520003018F96800088F0AE3CF9080000074B853 +:104530002FFC4849A56C18091388A1D8B2885EFCE5 +:10454000000074B82FFC4848A56C30091808B089E1 +:104550005EFC0000000074B8EBCD40E0189E14979C +:104560001295587BE08B002C496AF6C8FFFFA568BE +:10457000F408000C1989EDB90001C1F0F608150422 +:104580001296F4080008A1B6F60915012FF9F409EE +:10459000093E740AB8869157FC0A000A913A5805F8 +:1045A000F9BC0001F9B90104EDD9E138F9F81E00B0 +:1045B000F9BC0101E3CD80E0E3CF80E0E3CFC0E0D0 +:1045C000000074B848387019700C121C5EFC0000B2 +:1045D000000074B85EFC300899085EFC1899780CED +:1045E000580CF9B80001F3F80A005EFC300899088D +:1045F0005EFC300899085EFC5EFC5EFC5EFC5EFCC6 +:10460000D401580BC110F80B000B300A487E7C090E +:10461000F40900092FDAF208141FB98810091019DB +:1046200018C9163CCF51D802000074B85EFD5EFF79 +:104630005EFF5EFF5EFF3FDC5EFC78082FF89908A6 +:104640005EFCD401780820189908C020D80A5D1BA8 +:10465000DA0A301899085EFCD401F01F0002D80273 +:1046600080016D6CEBCD406048784889F5DBC01067 +:104670001895189B7006720C5D160A9CF01F0004BA +:10468000E3CF906000007540000074B4800091E8B2 +:10469000D401E06A0088300B485CF01F0006F01F70 +:1046A00000064868300C9118910CD802000074B8CC +:1046B000800091D0800146C000008B545EFCD7037F +:1046C000D401F01F0011F01F0011301B4909169C86 +:1046D000490AF01F00114919491A301B303CF01FDC +:1046E000000EF01F0010300A301BE06C00F0F01FCD +:1046F000000EF01F000E300A302C149BF01F000C2F +:10470000D80A0000800148C0800147888003B79024 +:10471000800146BC800148548003B794800157A4AF +:104720008001499C800147E0800149F480014730C5 +:104730004828F00C092B5EFC00007548EBCD40E0EA +:104740004905189716966A085808C0205D1848E869 +:10475000F007032C580CC061C088F0061800C09008 +:104760002F8C19885808CFA16A085808C080C00843 +:1047700078193028F0091800FE9BFFF8E3CD80E09F +:1047800000007544000075485EFCD703EBCD40FC8B +:104790004935189630120A94EAC3FFF46A0858089B +:1047A000C0D068385808C19030185806CF805816C5 +:1047B000C0305808CF40E3CD80FC48976E28701970 +:1047C000703C700B5D196E2870296E188F29103996 +:1047D000EFF20A003008CEAB0697CF1B000084B47E +:1047E000EBCD40C018961497580BC24049789009F9 +:1047F000F6091900E088001BF60B00184949F20879 +:10480000002C781A74085808C171741E7428103E60 +:10481000C1507C283009951895099D369D07FD6B80 +:10482000001078089D18E3CD80C0307B305CF01F0D +:104830000009E3CD80C0741ECEDB306B305CF01F0E +:104840000005E3CD80C00000000002200000755C80 +:104850008001473CEBCD408049281497129E581B9D +:104860005F8A9009F80919005FB81468C130F80C24 +:10487000001AF60B0019F4CCFFFF48BB48B8F60A43 +:10488000002AF0090029952EF60C09299507E3CD99 +:104890008080302B305CF01F0006E3CD808000006C +:1048A000000002200000755C000084B48001473CD9 +:1048B000D401307B305CF01F0002D8028001473CFD +:1048C000EBCD404030084AB9B2884ABA940858083B +:1048D000C4D04AA95C784AABF00800184A9EA36885 +:1048E000300C2F88F6CAFFF4F20800082F89930CC9 +:1048F000F34AFFFCF34EFFF82F491039CF91F6CE63 +:10490000FFE84A1A49EB301C970C972A971A14981B +:10491000F4C9FED42EC8F148FFF41238CFC1F54ACD +:1049200001342F4BF4CAFEC01C3BCEF1E06A00807C +:10493000300B496CF01F00164948F0C9FF902F0852 +:10494000F148FFFC491A1238CFB130064918F54634 +:10495000007C910A9116310A0C9B48FCF01F000C58 +:1049600048E80C9C9106E3CD8040485BCC9B00005E +:1049700000007598000002200000755C000084B4FF +:10498000800148B0000082340000759C800091D006 +:1049900000007630000076200000761C4848485918 +:1049A000485A91099119913A912A5EFC000002241B +:1049B000800149D4800149EC48484859485A911926 +:1049C0009109913A912A5EFC00000224800149D4A9 +:1049D000800149EC48494858311AEA1A4000143C11 +:1049E0005E085E19800149D480014A0C481C5EFCB7 +:1049F000800149ECD4013019300A303BFC1C4000E6 +:104A0000F01F0002D8020000800186C8EBCD408074 +:104A10004B373099EA194000123CC310E088001F60 +:104A200030B9EA194000123CC2A0C4233139EA1956 +:104A30004000123CC500E069078AEA198000123C78 +:104A4000C241761CF01F0027300A4A77149B314C74 +:104A5000F01F00260E9CE3CD80803019EA1940003B +:104A6000123CC320E08800153079EA194000123C5E +:104A7000C0603089EA194000123CC0713019300A18 +:104A8000303BF01F001B49B70E9CE3CD8080FC1922 +:104A90004000123CCFA130194978300AF149004456 +:104AA000304C149BF01F00110E9CE3CD8080301918 +:104AB000300A303B30ACEA1C4000F01F000D48D7F4 +:104AC0000E9CE3CD8080302B300CF01F000C0E9C30 +:104AD000E3CD808048470E9CE3CD808080014A0C66 +:104AE0008001DA2C800149D480014658800186C8B3 +:104AF000800152F0000087F480018390D401201DD2 +:104B00001A9CF01F0008C07040085818E088000682 +:104B1000F01F00052FFDD802F01F00042FFDD80262 +:104B200080015F4480015EDC80015EB4EBCD40F823 +:104B3000201DFEF805EA189716951496103AC3A0A2 +:104B4000FEF805E0103AC610FEF805DC103AC06029 +:104B50000C970E9C2FFDE3CD80F8E068018CEA18DD +:104B60008000103CE08000F7E068078AEA188000C7 +:104B7000103CE08000ADE0680186EA188000103C3F +:104B8000CE8176170E9CF01F0169F01F0169C0915C +:104B9000FEF805A0EEEA0000F0EB00006E29912976 +:104BA0000C97FEFA0592300BFEFC0590F01F016495 +:104BB000CD1BF01F015F1894C4D1E0680184EA188E +:104BC00080001037E0800185E08B00D2E0680107AB +:104BD000EA1880001037E08001A0E0680183EA183D +:104BE00080001037CB616A170E9CF01F0156E080E1 +:104BF0000230FEF905523048F34800440E9B334C16 +:104C00000C97F01F0152CA6BFEF4053CE0680112DC +:104C1000EA188000E8F300F8103CC540E08B006320 +:104C2000E0680107EA188000103CE08000F7E068C7 +:104C3000010DEA188000103CE080010DE0680105DC +:104C4000EA188000103CC851761C1497F01F0140F0 +:104C5000C81BFEF304F2E0680188EA188000E6F45D +:104C600000F81037E08001B0E08B00ABE068018312 +:104C7000EA1880001037E080018BE0680184EA18B0 +:104C800080001037E080016EE0680107EA188000BC +:104C90001037FE91FF5F6A18303CF13B000BF01FAC +:104CA000012D3019300A303B30CCEA1C4000F01F97 +:104CB000012A300AFEF70470149B301CF01F0127F4 +:104CC000C49B761C1497F01F0126C44B6A1CF01F6E +:104CD0000125300AFEF70490149B314CF01F011F90 +:104CE000C39BE068018AEA188000103CE08000CB9A +:104CF000E068078AEA188000103CCE90E068011551 +:104D0000EA188000103CFE91FF2576150A9CF01FE2 +:104D100001170BC93048F0091800E08001BBE08B97 +:104D2000019B3008F0091800E08001BF6738301996 +:104D300011EAF20A1800E08001DD0A9CF01F010C64 +:104D4000FE90FF08300A0C97305C149BF01F0103A3 +:104D5000C01B76170E9CF01F0107F01F00F5C4F171 +:104D60000E9B33DC0C97F01F00F9CF4AE068018AF4 +:104D7000EA1880001037E08000BDE068078AEA1872 +:104D800080001037E0800099E0680188EA18800010 +:104D90001037FE91FEDF6A170E9CF01F00F7C0A0CF +:104DA000F01F00F63069FEF8039EFEF60376F14927 +:104DB00000440E9B336C0C97F01F00E4CCBAE06803 +:104DC000018EEA1880001037E08000B7E068078A9B +:104DD000EA1880001037FE90FF7BE068018AEA182D +:104DE00080001037FE91FEB66A160C9CF01F00E49E +:104DF0001897E0800114FEF7032ACACA3099FEF81A +:104E000003460C97F1490044FEFA032C300BFEFCDC +:104E10000372F01F00CBC9EA76150A9CF01F00DA76 +:104E2000302B169CF01F00D9FEF702FCF01F00C0CB +:104E30001896E08100DD0A9B337CF01F00C40C9AB9 +:104E40003019303B30ECEA1C4000F01F00C3FE9FDD +:104E5000FE8276160C9CF01F00CE302B304CFEF7F5 +:104E600002C6F01F00CAF01F00B2E08000EC30194B +:104E7000300A303B310CEA1C4000F01F00B7FE9FA7 +:104E8000FE6A76150A9CF01F00BE1897E08000BAF3 +:104E9000300A302C149BF01F00B13078E9480044F0 +:104EA000F01F00A3FE91FE560A9B0C9733BCF01F27 +:104EB00000A7FE9FFE506A1CF01F00AA089AFEF78A +:104EC00002A6089B314CF01F00A5FE9FFE446A1706 +:104ED0000E9CF01F00B0C060FEF9026C3058F34821 +:104EE00000440E9B335C0C97F01F0098FE9FFE332E +:104EF0006A170E9CF01F00A2C0803069FEF80248BD +:104F0000FEF60220F14900440E9B33BC0C97F01FC3 +:104F1000008FFE9FFE206A1B337CF01F008C089AD6 +:104F2000FEF702043019303B30ECEA1C4000F01F61 +:104F3000008AFE9FFE106938301911EAF20A180043 +:104F4000FE90FE086A1CF01F0094FE91FE03189A62 +:104F5000189BFEF70246301CF01F0080FE9FFDFBF1 +:104F60006A150A9CF01F008B1897E08000874F2A73 +:104F7000300BFEFC022AF01F00721897E08000AE92 +:104F800030580C97E7480044FE9FFDE56A150A9CDF +:104F9000F01F006C1897E08000956938301911EA0D +:104FA000F20A1800FE91FDD64E3A300B4FDCF01F8E +:104FB00000641897E08000A930480C97E748004447 +:104FC000FE9FFDC96A160C9CF01F006B1897C2600B +:104FD000F01F006A30684D37E7480044FE9FFDBB74 +:104FE000EACBFFFC301A30DCF01F005C3019300ACD +:104FF000303B30CCEA1C4000F01F0057FE9FFDAB59 +:10500000F01F004BFE90FF4E0E9A3019303B30CC13 +:10501000EA1C4000F01F0050C44B303B30CCEA1C6F +:10502000400030190E9AF01F004C0DEB304CF01F71 +:1050300000490E9A0E9B301C4BB7F01F0048FE9F94 +:10504000FD8A0C9B33ACF01F0041FE9FFD844D3662 +:10505000FE9FFDD63068F0091800FE98FE693828DA +:10506000F0091800FE91FD76300A0C97325C149B13 +:10507000F01F003AFE9FFD6F189A303B30CCEA1CBF +:1050800040003019F01F0034EB3B000D303CCD0BDD +:105090003008FACBFFFC0C9716F8301A30ECF01FF2 +:1050A000002FFE9FFD580A9CF01F003FFE90FD520E +:1050B000300A0C97306C149BF01F0028FE9FFD4BAC +:1050C0000BCB302CF01F00230E9A0E9B301C4B375D +:1050D000F01F0022FE9FFD3F189A303B30CCEA1CA7 +:1050E00040003019F01F001CEB3B000D301CCA0BB8 +:1050F00048D7F01F000FFE91FF750A9B338CF01FFD +:105100000013FE9FFD28189A303B30CCEA1C40006B +:105110003019F01F00110BCB301CC8AB800152F0CE +:10512000800151A8800156388001D9AC800185E406 +:105130000000763880018E9C8001E03C8001EF20E9 +:105140008001E88C000087F480016D6C8001E2D45E +:1051500080018390800186C8800146588001E00864 +:105160008001DA2C800149D48001E2FC80016D4A83 +:105170008001D9C88001E4D080014AFC8001E4307C +:105180008001E0D48001D9FC800183A08001D9E8AE +:105190008001E81C8001E3DC80014A0C8001E7B853 +:1051A0008001E58880016D48EBCD40C04C96189792 +:1051B0003138EA184000103CE0800087E088002485 +:1051C000E068010DEA188000103CC150E088004002 +:1051D000E0680115EA188000103CC0D0E068018A40 +:1051E000EA188000103CC070E0680112EA188000E4 +:1051F000103CC3910E9C4B7AF01F003718960C9C04 +:10520000E3CD80C03018EA184000103CC510E0889B +:10521000002E30D8EA184000103CC1003108EA18CE +:105220004000103CC3F030C8EA184000103CC1B147 +:10523000301C302BF01F00290E9C3019300A303BF7 +:10524000F01F00274A760C9CE3CD80C0E068010582 +:10525000EA188000103CCCF0E0680107EA188000F2 +:10526000103CCC900C9CE3CD80C0E04C008ACC304C +:10527000FC184000103CCF71307949B8300AF14930 +:105280000044149B302CF01F0019300A30FC149B92 +:10529000F01F0016302B300CF01F00100C9CE3CDDB +:1052A00080C0303C302BF01F000D0E9CCC7B48E9B9 +:1052B0007298ABC8300A9398149B303CF01F000BD7 +:1052C0000C9CE3CD80C048A60C9CE3CD80C00000C0 +:1052D000800151A880014B2C800183A0800186C8E9 +:1052E00080015638000087F480014658800149D477 +:1052F000D421FACD00E4FEF602E21898FEF502E0B1 +:10530000ECF700F83109EA194000123CE08000D5C2 +:10531000E08B003630A9EA194000123CE08000C260 +:10532000E088005330C9EA194000123CE08000A830 +:10533000C6A330D9EA194000123CE080011930F9C7 +:10534000EA194000123CC3D1FEFA0298300BFEFC71 +:105350000296F01F00A61896C341189BFEFA02841D +:10536000FEFC028CF01F00A1304C301BF01F00A18E +:105370000C9A0C9B301CF01F00A0C238E06901841D +:10538000EA198000123CE0880011E0690188EA19FE +:105390008000123CC100E08B00A5E0690186EA199B +:1053A0008000123CC0E1C078E0690183EA19800006 +:1053B000123CC363109CFEFA0226F01F0090189561 +:1053C0000A9C2C7DD8223079EA194000123CC7C0D3 +:1053D000E08800973089EA194000123CE08000CF55 +:1053E0003099EA194000123CCEC14FEA300BFEFC66 +:1053F000020EF01F007E1894E08000CF3048ED4888 +:105400000044CDFB4F7A300B4FECF01F0078CD916C +:10541000189A189B4FC5301CF01F0077CD2BE06900 +:105420000107EA198000123CCC60E0690115EA1915 +:105430008000123CC1203139EA194000123CCC11E5 +:10544000300A301C149BF01F006C300A304C149B47 +:105450004EE5F01F0069CB5B6F38301911EAF20A94 +:105460001800C72076160C9CF01F00690C9CF01FDA +:1054700000694E98580CF0051710CA3B303B3019A4 +:10548000300AF01F0066302B303CF01F005A300A03 +:10549000301C149BF01F00584E150A9C2C7DD822FE +:1054A0004D0A300B4DFCF01F00511897C3B0305817 +:1054B000ED480044C86B303B3019300AF01F0057EC +:1054C000302B304CCE3B6C9BE21B0040C2414C5A0F +:1054D0004D5CF01F0046C9D03028ED480044C71B82 +:1054E000E069018AEA198000123CFE90FF65E069DC +:1054F000018EEA198000123CFE91FF64C5CBFC19B5 +:105500004000123CFE91FF5E300A149B149CF01F79 +:10551000003AC57B300A4BC5149B301CF01F003687 +:10552000C50B30481A9BBAE8336CF01F00400E9A46 +:105530003019303B30ECEA1C4000F01F00384B893A +:105540004BB89119C3EB76170E9CF01F00310FC9B1 +:105550003068F0091800FE9BFF354B15F01F003531 +:10556000C2A10E9B338CF01F0031C2BB4AC530195B +:10557000300A303BF01F0029C24B49AA300B4AAC1D +:10558000F01F001ACAA1304849F5BAC81A9B334C1B +:10559000F01F0026C16B306AEECBFFE2FACCFFFCB5 +:1055A000F01F002530481A9BBA68335CF01F001FBB +:1055B000089ACBFB3019300A303B30CCEA1C400053 +:1055C000F01F00160FCB305CF01F000A300A301CB1 +:1055D000149BF01F0009CF5A000087F4800152F09D +:1055E00080018E9C8001E7548001EF208001E03C27 +:1055F000800183908001465880014B2C8001E58812 +:105600008001DA5480014A0C800149D48001E2FC17 +:1056100080016D48800151A8800186C880015638FC +:105620008001E7B88001EA8C80016D6C00000224E3 +:10563000800185E48002E736EBCD40804C9731084D +:10564000EA184000103CC6F0E088001DE068018CBC +:10565000EA188000103CC3B0E088002EE068019397 +:10566000EA188000103CC440E0680194EA18800009 +:10567000103CC2714BC7761CF01F003C0E9CE3CD62 +:10568000808030C8EA184000103CC400E088001D4B +:1056900030D8EA184000103CC21030E8EA18400048 +:1056A000103CC0F14B2A300B4B2CF01F00330E9CEA +:1056B000E3CD8080E0680186EA188000103CC0706D +:1056C0000E9CE3CD8080E04C008ACFB14A5AF01F97 +:1056D000002B18970E9CE3CD8080F01F00294A4ACA +:1056E000300B4A8CF01F00240E9CE3CD8080761C8A +:1056F000F01F0025F01F0025C0514A5B33CCF01F7E +:10570000002549970E9CE3CD80804A39731858983C +:10571000CD803098496AF3480044300B49FCF01FB3 +:105720000016CCFB49C973185888CCB03088F348B0 +:105730000044F2F900F87338301911EAF20A18003F +:10574000C0A03019300A303B30DCEA1C4000F01FAA +:105750000014CB7B486A300B492CF01F0007CB1B91 +:105760008001563880014A0C8001DA4680018E9C07 +:105770008001E03C8001EF2080014B2C80015E34F1 +:105780008001DA448001DA48800185E4000076383F +:1057900080016D6C000087F48001E0D4800186C830 +:1057A0008001E094EBCD40F84A37189416956E18B6 +:1057B0006E090E930E96C118300B301CEA1C400087 +:1057C0005D19300B6C39FC1C40005D196C388D285C +:1057D0006E186E091238C2001039C190300B301C9F +:1057E000EA1C40005D19300B6E19FC1C40005D196D +:1057F0006E188F086E296E381039CDF10A9B089CFF +:105800005D19873C6629123CCF71CE3B0A9B089CF0 +:105810005D198F1CCF0B5805C0706A085818C060FE +:105820000A9CF01F0006E3CD80F8EACCFFFCF01FD5 +:105830000004CF7B00000224800091E88001D3A8FF +:105840004878F14C00F8580CF9F81004F9B9010146 +:10585000F1D9E108F9F81A045EFC0000000087F4B1 +:10586000EBCD40C04948FAC6FFF4F0F700F4580702 +:10587000C051C1E8F8C70008C1B0EECAFFDC740827 +:10588000204D502815C9FB69000C15D8FB68000D88 +:105890006C0850080DC9BAC90DD8BAD8F01F000756 +:1058A0002FCD580CC0516E2C580CCE5118970E9C11 +:1058B000E3CD80C0000087F480018898D40149D9E5 +:1058C000F2F800F41838C0B078285808C2B0784808 +:1058D000201899482F8CF01F0018D802580CF9F89E +:1058E0001004F9BA01FFF1DAE108F9F81A043008F6 +:1058F000F34800F448FA78285808C180F0C9000835 +:10590000F54900F4CE8072482FF89348F4F900F47A +:105910005809CE10724820182F8C9348F01F0006AB +:10592000D80278385808CD41D802F54800F4CD3B6C +:10593000000087F48001F2A0D4014989F2F800F058 +:105940001838C0A078085808C240784820189948EC +:10595000F01F0013D802580CF9F81004F9BA01FF2F +:10596000F1DAE108F9F81A043008F34800F0780A8F +:10597000F34A00F0580ACED074482FF89548487979 +:10598000F2F900F05809CE50724820189348CE1B07 +:1059900078185808CDB1CDFB000087F48001F2A043 +:1059A000EBCD40801897580AC2C07858F608010815 +:1059B0001438E08800274948F0FB00F8580BC190E4 +:1059C000F8CAFFDC15D8204DFB68000D740950297A +:1059D00015C8F6CAFFDCFB68000C7408500815C92E +:1059E000BAC915D8BAD8F01F00092FCD580CC091EC +:1059F0000E9CF01F00070E9CF01F0006E3CF908066 +:105A0000E3CF8080000087F48001889880015938B6 +:105A1000800158BCD4214A141895E8F700F05807C3 +:105A2000C27079383006704AC02810976F387049B4 +:105A30001439E08A00086E080E965808CF710E9649 +:105A400010970A37C0D06A085808C0B00A9CF01FE7 +:105A500000145806C1300A9B0C9CF01F0012D8227B +:105A60006A185808CF416A482FF88B48CF3BE94C59 +:105A700000F078482FF89948D8220A9B0E9CF01F16 +:105A800000090E9CE94500F0F01F00050E9B0A9CE2 +:105A9000F01F0004D8220000000087F48001F2A06B +:105AA0008001F28CEBCD40C04A48FAC7FFF4F0F613 +:105AB00000F05806C051C3D86C065806C3A06D3814 +:105AC000707C2F4CF8E80000212DFAE90024F8EA58 +:105AD0000008FAEB002CF8E80010FAE90034F8EAC4 +:105AE0000018FAEB003CF9380020FB680044F93953 +:105AF0000021FB690045EEE80000FAE90000EEEA4B +:105B00000008FAEB0008EEE80010FAE90010EEEAEF +:105B10000018FAEB0018EF380020FB680020EF397E +:105B20000021FB690021F01F00062EED580CCC501F +:105B30000C9CE3CD80C00000000087F48001891038 +:105B4000EBCD40E0205D7608502817C9FB69000CBA +:105B500017D81697FB68000DF8CBFFE2306A18964D +:105B60001A9CF01F0034F01F00342FCD580CC05188 +:105B7000300C2FFDE3CD80E06E7C2F4CF8E8000068 +:105B8000212DFAE90024F8EA0008FAEB002CF8E8E5 +:105B90000010FAE90034F8EA0018FAEB003CF93892 +:105BA0000020FB680044F9390021FB6900456D388D +:105BB000707C2F4CF8E80000FAE90000F8EA0008D1 +:105BC000FAEB0008F8E80010FAE90010F8EA00180B +:105BD000FAEB0018F9380020FB680020F9390021A1 +:105BE000FB690021F01F00152EED580CCC20320B64 +:105BF000300CF01F00131895CBC0189A0E99491B52 +:105C0000F01F00110BF93008F0091800EDF800132F +:105C1000F1F90807EBF90E07FACCFFFC6D3818D83C +:105C20001A9CED45004CF01F0009301CCA3B0000D7 +:105C30008002E73680018898800189108001D8DCD5 +:105C40008001D3EC8001AD408001D3A8EBCD40C0F2 +:105C500049C649D86C09700A1439C05530070E9CE2 +:105C6000E3CD80C0350CF01F00191897CF906C0859 +:105C70002FF8350A8D08300BF01F0015320B300C51 +:105C8000F01F0014EF4C004C1898C16030084929EF +:105C90008F680E9CF30A017C8F28EF5A001CEF6876 +:105CA000002A8FF88F488F58EF4800408F188F08D0 +:105CB0008F38E3CD80C00E9C1097F01F0008CD0BED +:105CC000000076440000025880009200800091D0CD +:105CD0008001D8DC00000260800091E8EBCD4080BC +:105CE000189778485808E08A0004E3CD8080793816 +:105CF0005808C0402B4CF01F000648697208201855 +:105D00000E9C9308F01F0004E3CD80808001D3A88F +:105D100000007644800091E8D4014899F2FC00F834 +:105D2000580CC0A07848201899483008F34800F86B +:105D3000F01F0004D802F34C00F8D802000087F4EA +:105D400080015CDCEBCD40F84B131894E6F700F8CB +:105D50005807C060189B0E9CF01F002EC1D1E6F7BB +:105D600000F05807C4203006C1285806C0706F38AC +:105D70006D39704A7248103AC064E6F800F80E387F +:105D8000EE0617106E070E955807C0900E9C089BE4 +:105D9000F01F0020CEB00E9CE3CD80F8F01F001E57 +:105DA00058065F18580C5F0918971069EA0918001F +:105DB000C201089B306AEECCFFDCF01F0018089B84 +:105DC000306AEECCFFE2F01F00156F3A0899149C80 +:105DD000493BF01F001430080E9C8F088F18F01FED +:105DE00000120E9CE3CD80F8F01F000B1897CE2B0D +:105DF0000C9CF01F000E0C9CF01F000D0C9CF01F63 +:105E0000000DF01F00051897CD51CC6B000087F4F2 +:105E100080015B4080015C4C800091DC8001D3EC10 +:105E20008001AD4080015A1480015938800158BC6E +:105E300080015CDCEBCD40E04905EAF700F458074F +:105E4000C0D1C158F0C600080E9CF01F000D0E9C7A +:105E5000F01F000C5806C0B00C976E285808CF31C0 +:105E60000E9CF01F00070E9CF01F00063008EB4848 +:105E700000F4E3CD80E00000000087F4800158BC0E +:105E800080015CDC580CC04078185B98C110489ABF +:105E900074991298EDB90001F9BC0101F9BB001029 +:105EA000F3DBE038F5F80A09F9BC00015EFC5EFDA1 +:105EB000000087F4489A7498109CF0091604E21CBC +:105EC0000002F9BB0110F1DBE138F5F81A09F9B865 +:105ED0000101F3D8E12C5EFC000087F4489A749825 +:105EE000109CF0091604E21C0002F9BB01EFF1DB83 +:105EF000E128F5F81A09F9B80101F3D8E12C5EFCA4 +:105F0000000087F448887099129CA589E21C000261 +:105F1000F9BA0101F3DAE148F9B90101F1D9E12C4B +:105F20005EFC0000000087F418994868709CE21C31 +:105F30000002F1F8103FF3F81A00F9BC01015EFC11 +:105F4000000087F418994868709CE21C0002F1F880 +:105F50001041F3F81A00F9BC01015EFC000087F45F +:105F600018984859729CE21C0002F3F81A41F9BCD7 +:105F700001015EFC000087F44839300C7298A7C814 +:105F800093985EFC000087F44839300C7298A5D8CD +:105F900093985EFC000087F4D401E06A0100300BA6 +:105FA000482CF01F0003DA0A00007648800091D0E8 +:105FB000EBCD40C04A0A18967498109CE21C00026F +:105FC000C1D0F4F700F85807C1801099E2190020F9 +:105FD000C270A5C8A7A8F4FB00BC95983009497AFF +:105FE000E06CEA60F01F00163008F0061800C100EF +:105FF0003018F0061800C040301CE3CD80C0311CC2 +:10600000EECBFFE2306AF01F000FE3CF90C0312CDF +:10601000EECBFFE2306AF01F000BE3CF90C0A5B8D3 +:10602000F4FB00B89598E06CEA60487AF01F000431 +:10603000CDCB0000000087F480015F7880014558D7 +:106040008001465880015F88D401F01F0002D80209 +:1060500080018040D40148687098E2180002C03185 +:10606000109CD802F01F0003D8020000000087F443 +:10607000800183FCD40148687098E2180002C031A6 +:10608000109CD802F01F0003D8020000000087F423 +:10609000800183D8D431FACD0188E06A0168300BE1 +:1060A0001A9CF01F002CFAC6FE541A901A9CF01F7E +:1060B000002A581CC03029EDD832FAC5FFF8401824 +:1060C000F0081016EA0800081035C4120A97FAC43E +:1060D000FE98ECC1FFF8C09840182EA7F0081016E3 +:1060E000EA0800081037C3326C08204D50280DC94B +:1060F000FB69000C0DD80E9BFB68000D306A1A9CE2 +:10610000F01F0016F01F00162FCD580CCE60EECBFE +:10611000FFFA310AFACCFE88F01F0010E2E8000016 +:10612000310AE8E90000089BE2E20008FACCFE88A8 +:10613000E8E30008F01F000BCD01189B316A0E9CAC +:10614000F01F0004009CF01F0008CB6B29EDD83A2B +:10615000800091D0800160748002E73680018898C9 +:106160008000917C80016054D431FACD018CE06ACA +:106170000168300BFACCFFFCF01F0050FAC5FE504E +:10618000FACCFFFCF01F004E581CC03029DDD8327D +:10619000402858F8E088007FF0081016FAC1FFF494 +:1061A000E20800081031E0820087E06801685018BA +:1061B000EACBFFF8FAC6FFF002973004FAC0FE946B +:1061C000500BC0C85804C36040282EA7F008101612 +:1061D0002EA6E20800081037C4926A08204D502805 +:1061E0000BC9FB69000C0BD80E9BFB68000D306AD5 +:1061F0001A9CF01F0034F01F00342FCD580CCE3005 +:10620000ECCBFFFE310AFACCFE84F01F002E400BCF +:10621000F6E80000310AE0E90000FACCFE84F6E27C +:106220000008009BE0E30008F01F0028CB005804A2 +:10623000CCC10F89E8091800CC810F98F20818002A +:10624000CC410FA9F0091800CC010FB8F2081800D2 +:10625000CBC10D89F0091800CB810FD8F2081800C6 +:10626000F9B40100EE041700CB0B5804C2400A9B9E +:10627000306A089CF01F0013EACBFFF8310AE8CC23 +:10628000FFFAF01F0010FACCFFFCF01F001129DD0F +:10629000D832F00A1110FAC1FFF4F40A1016E2081D +:1062A000000C300BF01F00053108E0690168502830 +:1062B0005019C7FB3FDCC6BB800091D080016074E1 +:1062C0008002E736800188988000917C80016054CC +:1062D000EBCD40C0208DBACBBA8A189B4968709C20 +:1062E000E21C0002C06118970E9C2F8DE3CD80C088 +:1062F0003008FAC6FFF8504850281A99FACAFFFC2D +:106300000C9CF01F000EC111189740285808C0407F +:106310000C9CF01F000B404C580CCE70F01F000975 +:106320000E9C2F8DE3CD80C00C9CF01F0007581CE5 +:106330005F07CECB000087F48001E1308001D3A855 +:10634000800091E880018E9CEBCD40C0201D491754 +:1063500018966E9CE21C0002C0412FFDE3CD80C068 +:106360001A9CF01F000DEF4600FCEEF801105808D3 +:10637000C051301C2FFDE3CD80C0EECCFEECEF3AD7 +:10638000011BEF3B011AF01F0005301CCF4B000032 +:10639000000087F4800177A4800162D0EBCD4080BB +:1063A000201DBA8C48C76E98EDB80001C0402FFD83 +:1063B000E3CF808030181A99300A308B487CF01F68 +:1063C0000008581CCF511B88EF4801202FFDE3CD5A +:1063D00080800000000087F48003B7A08001776C04 +:1063E000D401201D48B91898729CE21C0002C0E03C +:1063F000300AF368004C308BFAC9FFFC486C12F885 +:106400003018F01F0006581C5F0C2FFDD80200004A +:10641000000087F48003B7A88001776CD401203D89 +:10642000BA8C496A749CE21C0002C0312FDDD8028C +:106430001B8B3038F00B1800E089001DE06832003B +:10644000EA18312EE069352EEA19312EFAE90004F6 +:10645000F4F800F8F3DBB008300A5808F1F91A0F25 +:10646000308B30181A99FACCFFFCF01F0005581C2D +:10647000CDE03FECCDCB0000000087F48001776CCD +:10648000D421206D4A0618976C98EDB80001C040E1 +:10649000300C2FADD822584C5FB8E04C00FF5F198C +:1064A0001268C0303FECCF6B300814995028169A10 +:1064B0005008189B1A951A9CF01F0014CEA01A9C25 +:1064C000F01F0013400818945808C0401A9CF01F91 +:1064D0000011402C580CC030F01F000F5814CD9103 +:1064E0006C98EDB80007C0C15837E08B000AEE0881 +:1064F000150648A9300A1009089C930ACCBB301C29 +:10650000CC9B0000000087F48001E1A480018E9CF8 +:106510008001D3A8800091E800007648EBCD40C010 +:10652000202D496718966E98E2180002C2103FF8B5 +:10653000FACAFFFEBAF8BAA8BAB8BAC8BAD8BAE85E +:10654000300BF01F000F6E98EDB80007C0E1583611 +:10655000E08B000CEC081506300A48A9301C100925 +:10656000930A2FEDE3CD80C02FEDE3CF90C0109CB8 +:106570002FEDE3CD80C00000000087F4800164802F +:1065800000007648EBCD40C0202D49F66C9CE21C03 +:106590000002C2703FF8BAF8BAA8BAB8BAC8BAD8F6 +:1065A000BAE8ECFB00F8580BC260F6CCFFE2303AD8 +:1065B000300BF01F0016FAC7FFFE301CF01F00144E +:1065C000303B0E9A300CF01F00136C99300B129870 +:1065D000ED4B0110A3D88D98EDB90007C050301CC9 +:1065E0002FEDE3CD80C0E06A010048BCF01F000B36 +:1065F000301CCF7BFAC7FFFE303A0E9CF01F000321 +:10660000CDDB0000000087F4800162D08001651CB2 +:106610008001648000007648800091D0D43120DD74 +:10662000FB690010FB68000CFAC9FFA8FEF7023CEA +:1066300018956E981696149272307201E218000244 +:1066400072147223C041300C2F3DD832E04B002031 +:10665000E08800043FFCCF9B584CE08B002158DBC6 +:106660005FBA301BFB380010F60818005F09126A89 +:10667000C030580CC1413078FACCFFD4FB680033ED +:10668000F01F007B3008303C50785058F01F0079E4 +:1066900058D6C070E08B00315856C0303FECCD5B0F +:1066A00030683019FB680033EF49011CFACCFFCD8C +:1066B000F01F0071501C1AD31AD41AD1FB38001CD9 +:1066C00004991AD80C9AFB380043FACCFFDC0A9BD9 +:1066D000F01F006A2FCD580CC1B140585808C05067 +:1066E000FACCFFECF01F0066407C580CCAD0F01FBB +:1066F0000065300CCAAB5906C6C0E0460020CCF19C +:1067000030283029FB680033EF49011CCD0BFACC4F +:10671000FFECF01F005D500C40585808C050FACCF8 +:10672000FFECF01F0057407C580CC030F01F0055A4 +:1067300040085818C8915800EFF81009F9B9010835 +:10674000F1D9E138EFF81A093009FB380010F208E6 +:106750001800C051F9D5B008F01F004C6E98EDB884 +:106760000001C0514C18F0F800FC501840185808AF +:10677000C080FB3A0010FB3B000C089CF01F00445B +:10678000306A089BEECCFEECF01F0042301AFACBC8 +:10679000FFF4EECCFEE6F01F003FEECCFEE5301A33 +:1067A000FACBFFF0F01F003B3018EF480110FB68F8 +:1067B00000326E9C4AD7EDBC0001C120EDBC000741 +:1067C000C061FB38000C50285845C1E1301CC3DBC8 +:1067D00030483039FB680033EF49011CC68B300864 +:1067E0004ADB1099109A109CF01F002CC3401ADC51 +:1067F0003018FAC9FFCA300A308B4A9CF01F0029B2 +:106800006E9C2FFDCDCBEA0915064A780C9AF0094B +:106810000007049BEF650026EF560024EECCFFFC3A +:10682000F01F001C089BEF610036306AEECCFFD8E9 +:10683000F01F00185803C110069B308AEECCFFD21F +:10684000F01F001440288FF0EF68003830188F08D0 +:10685000109CCFBA6E9CCB3B069B308AEECCFFD20D +:10686000F01F0012CF0B0000000087F4800177A416 +:106870008001EF6C80017BD88001E2148001D3A8F5 +:10688000800091E880018E9C8001641C800162D0B0 +:10689000800091DC80015E8480016AF48003B798F7 +:1068A0008001773000007648800091D0EBCD40C069 +:1068B000300749A60E98A7682FF7EC08000B76085A +:1068C0005808C0F10E985847CF714957EF3C004C1B +:1068D000F01F0014EEFC0100F01F0013E3CF90C086 +:1068E00076F8F6C9FFD2F73C00261AD8F6C8FFD8CA +:1068F0001AD91AD8F7390036F6CAFFFC1AD9F73870 +:106900000038F7390027F71B0024F01F00082FCDAF +:10691000581CCD90E3CF80C000007648000087F47B +:10692000800163E0800163488001661C7808301CA8 +:10693000F80A094C201C106C5EFCD70348787008DC +:106940005808C0901838C041C078103CC05070B88A +:106950005808CFC15EFD5EFF0000778C189A48F89A +:10696000709CE21C00025E0C70A8EDB80000C03004 +:10697000305C5EFC48AC780B583BE089000D300978 +:106980004888F00B003891189109950BF6C8FFFF65 +:1069900099085EFF3FDC5EFC000087F4000077880A +:1069A0000000776848D972A8EDB80000C1313008FE +:1069B000780A99D848ABF60A003A741999E974181C +:1069C000F8C9FFCC910C7808301CF60800389119F2 +:1069D0005EFC305C5EFC0000000087F4000077681D +:1069E000EBCD40C0189778B95809C18078C893C8D2 +:1069F0006EC891096E3C580CC050F01F000B300857 +:106A00008F3833CA6EA635AB0E9CF01F00080C9B66 +:106A10000E9CF01F0007E3CF80C078C94858911939 +:106A200078B9CE7B800091E8800091D0800183B05E +:106A30000000778CEBCD40801897580CC180789877 +:106A40005D1848F972095809C051C11872B958093E +:106A5000C0E01237CFC16E785808C0B06E3C580CF9 +:106A6000C060F01F000830088F588F38E3CF908047 +:106A70000E9C301BF01F0004E3CF90800000778C49 +:106A8000800091E8800169E0EBCD4080496972A8FF +:106A9000EDB80000C040305CE3CD8080493870091B +:106AA0001839E08A001E4928F00C00376E09580991 +:106AB000C15072DA580AF3F8000EEFF80A01F3FA3F +:106AC000000DF3F8100EF5F81A0E72E8129C910AF8 +:106AD000F01F00086E095809CED1E3CF90803FCC5B +:106AE000E3CD8080000087F400007788000077689D +:106AF00080016A34EBCD40F81897169614951294DD +:106B0000109333CCF01F000CC1403008990799B89E +:106B10009938995899889996994599649973487ABA +:106B2000301899A8741999C9930CF8C8FFD495180E +:106B3000E3CD80F8800092000000778CD401202DF6 +:106B4000500A48C972A8EDB80000C040305C2FED73 +:106B5000D80248981A99F00B032A3048FA08000B1B +:106B6000F01F0006581CF9BC0001F9BC01FECF0B58 +:106B7000000087F4000077488001F1D8EBCD40C0D9 +:106B8000201D4AC618976CA8EDB80000C441580CE7 +:106B9000C3F0789B580BC3C0780A580AC3954A695A +:106BA000F20A033850085808C061C1A870D85008CC +:106BB0005808C1601037CFB1F40815036EDA580ACF +:106BC000F3D8E009EFF8000EF3F80A01EFF8100E21 +:106BD000F5F81A0E400870DA70E9930A6E9B3F9838 +:106BE0008F18580BC0300E9C5D1B6E8B581BC0500D +:106BF000582BC150580BC0516E2A1A9CF01F000F21 +:106C00000E9C301BF01F000E2FFDE3CF90C02FFD18 +:106C1000E3CF90C0305C2FFDE3CD80C0ECF801B82D +:106C20000E38CEF130094838F14901B8CEAB00003A +:106C3000000087F40000776880016B3C800169E008 +:106C4000D40148C9169E72A8F1D8C001C031305C89 +:106C5000D8024898304A76A9F00C032C1ADAF6C804 +:106C6000FFF833CAF01F00052FFD581C5F0CD80237 +:106C7000000087F4000077488001F164D431204D92 +:106C800030084931189650285018FAC5FFF4FAC256 +:106C9000FFF802901A93FAC4FFFCC098E006032A9A +:106CA000F01F000C0E9B401CF01F000B3049049B92 +:106CB0000A9AE206032CF01F0009304818970A9937 +:106CC0001A9B089C5817CEB02FCDD83200007748B9 +:106CD0008001F1D880016B7C8001F0B4EBCD40E005 +:106CE000201D49356AA8A1A8300A49298BA8149704 +:106CF000930A14984906EC08002C2FF748FA303B09 +:106D0000F01F000F581CC0F10E985887CF5148D87B +:106D1000300991189109301B1A9CF01F000B2FFDB0 +:106D2000E3CD80E06AA8A1C88BA8CF2B000087F430 +:106D300000007788000077488001692C8001F05CB2 +:106D40000000778C8001695C5EFD5EFFEBCD4080CA +:106D5000189778785808C030788C5D180E9CF01F12 +:106D60000003E3CD80800000800091E8D4314B1017 +:106D70001895169260095809C58030047258721926 +:106D80000A38F7B400FF5809CFA10891E80C1502A2 +:106D9000F01F00291893C46060075807C2303006FE +:106DA000C0486E175807C1E06E580A38CFB10E9C24 +:106DB000F01F0022E60609276E485808C0F06E1939 +:106DC0005809EFF80002E1F80A01EFF90001EFF8C5 +:106DD0001002F3F81A026E2891092FF66E17580761 +:106DE000CE415804C1A006953006C0380836C154BB +:106DF0006A07049C6E686E8B5D18491B0E9CF01F21 +:106E000000112FF62FC56E485808CF100E9C48CBA6 +:106E1000F01F000C0836CED5069CF01F000B029C1C +:106E2000D8321891029CD83212941291CB0B0000E8 +:106E300000007794800092008001463A80016D4CFA +:106E400080014642800091E8EBCD4080324CF01F3B +:106E500000081897C080324A300BF01F00060E9CC5 +:106E6000F01F00050E9CE3CD8080000080009200A2 +:106E7000800091D080014652EBCD40FC18961695CB +:106E80001494129310924077F01F000AC100995693 +:106E900099359964998799739942487A3008991875 +:106EA00074199929930CF8C8FFFC9518E3CD80FC60 +:106EB00080016E4800007794D431FACEFFDC189739 +:106EC00016901491129310927C157C04580CC26099 +:106ED00078095809C26049A66C085808C051C09882 +:106EE00070185808C0601039CFC13018109CD832C3 +:106EF000F01F0014C13099509931996399859972A6 +:106F00009944300899186C199929930CF8C8FFFC1A +:106F10008D188F0C3018109CD8323008109CD83245 +:106F200008981AD50499069A029B009CF01F000647 +:106F30002FFD580C5F188F0CCDAB0000000077942C +:106F400080016E4880016E78EBCD40404856ECCC15 +:106F5000FFF8F01F000530088D168D08E3CD804046 +:106F600000007794800145D6EBCD40807847785A71 +:106F70006E18103AE0880004E3CF8080783B6E0CF6 +:106F8000F01F000B6E285808C0406E1B6E0C5D1879 +:106F90006E3CE04C002BC050300A149BF01F0005E3 +:106FA0000E9CF01F0005E3CF90800000800091DC74 +:106FB00080014658800091E8EBCD40C0203D30086C +:106FC00018979928990814961A9C308AF01F001176 +:106FD000FACBFFF80E9CF01F00102FED580CC101EA +:106FE0006E085808C0400E9CF01F000C6E2C580C08 +:106FF000C040F01F000B300C2FFDE3CD80C05806C1 +:10700000FBF81000EDF81A002FFDE3CF90C0000050 +:107010008002E7368001DE6C8001D3A8800091E811 +:10702000EBCD40C0189778185B98C0C0783B580BE0 +:10703000C17078465806C04078685908C050E3CF00 +:1070400090C0E3CF80C0785A590AE08800153FF815 +:107050008D28ECCCFFF4F01F000CE3CF90C0784CEF +:10706000580CCEE06E685908CEB12F4CF01F0006C8 +:10707000E3CF90C06C0CF01F00056E5830198D18CE +:107080008D29CE8B8001A25C800091DCEBCD40E0AD +:10709000201D1697E04C0081E0800088E08A0027E0 +:1070A000E04C0083C2F0C2B4760A1A9C300BF01F89 +:1070B0000064E08A004F585CC490314CF01F0061BE +:1070C0004008913C4009723A580AC7A06E0830093E +:1070D000990899399919EF380008992840083149D9 +:1070E000301A91594008911AC1D8584CC4A0E04CAC +:1070F0000080C330300C2FFDE3CD80E0E04C0085F4 +:10710000CFA16E0A300B1A9CF01F004DE08A0022BE +:10711000585CC1C0EF3900084008300A9119400896 +:10712000915A301B400CF01F0048581CCE41400CB7 +:10713000F01F0046C0B0400B76785808C070300C85 +:10714000F01F0043581C5F0CCD7B2FFDE3CF90E078 +:107150003FEC2FFDE3CD80E07645760A1A9C300B9C +:10716000F01F0037FE9AFFF6585CCF005805C49117 +:1071700040089135400993550FCA4008911ACD2B0C +:107180007626760A1A9C300BF01F002DFE9AFFE23D +:10719000585CCDC05806C1914008301A913640095C +:1071A00093564008911ACBEB760A1A9C300BF01FCD +:1071B0000024FE9AFFCF585CCC900FC9CAEB3FD891 +:1071C00093184009935ACAEBECC5FFED0A9CF01FD7 +:1071D000001D4008913C1899400A743B580BC2406E +:1071E0006E080C9A93089336EECBFFF430162F0CF2 +:1071F0009316F01F00184008915540099316C92BAB +:1072000040060A9CF01F000F8D3C4009723C580C50 +:10721000C1000A9A6E5BF01F000F400891550FC91C +:1072200040089119C7FB3FD895184009935BC7AB3D +:107230003FD893184009935CC75B000080016B3C0A +:1072400080009200800169A48001693C80016C404B +:10725000800091DCEBCD40FC4C151696189476021C +:107260006A095909E088001B4BE7C15878BA580AE7 +:10727000F9F8000CEFF80A01F9F8100CF5F81A0CFF +:10728000201978C8910A8B09F01F00376A0959093B +:10729000E08800056E0C580CCEA16C2338086C36C3 +:1072A000ECCCFFCCF0041800C260F01F003018973F +:1072B000C2F0B8C464080C9A990899A6069B2CCC15 +:1072C0008F9CF01F002B3808F0041800C2303818CB +:1072D000F0041800C2B04A3B30088FB8761A8FCA43 +:1072E0009507EEC9FFD46A0897192FF8301C8B0850 +:1072F000E3CD80FC64495809CD90ECC8FFC9E01883 +:10730000FFFCF009000CF01F00191897CD31E3CDF8 +:1073100080FC318A049BEECCFFF4F01F00156E7ADE +:107320008F2A580AC1018F8ACD7BEEC6FFF4318ABD +:10733000300B0C9CF01F000F049B0C9C308AF01F3C +:10734000000CCCAB6EA82FD8E018FFFC6E9C100C84 +:107350008F8C645BF01F0006CBFB0000000077A061 +:1073600000000234800091E880009200800091DCEF +:10737000800091D0D421207D1297FACEFFD04B29E6 +:1073800018947298EDB80001C040300C2F9DD8229F +:10739000FCE800003006BB295C7A50265046FAC54E +:1073A000FFF8FAC9FFE00A9CF01F00282FED580CE7 +:1073B000C2D05807C0B08F368F5640680E9B0C9CC9 +:1073C0008F28F01F0023581CC2E11A9CF01F0021D7 +:1073D0005BBCC29040076E4C580CC070F01F001E82 +:1073E00030088F388F4840075807C0401A9CF01F5C +:1073F000001B402C580CC030F01F00175804FBF83D +:107400001006E9F81A002F9DDA2A40085808C040F3 +:107410001A9CF01F0012402C580CCB80F01F000E5D +:107420002F9DD82A40085808C0401A9CF01F000B16 +:10743000402C580CC0313FDCCAABF01F00073FDCCA +:10744000CA6B0000000087F48001DF7480016C408B +:1074500080018E9C800091E88001D3A8EBCD40E0B4 +:10746000208D149616951897308A300BF01F001354 +:1074700059F6E08800052F8DE3CF80E00A9B0C9A37 +:107480001A9CF01F000FFAC9FFE030080C09FACC73 +:107490000001F368FFE0F8C6FFFF300B30AA0C9C38 +:1074A000F01F000832EB0ECC0C9CF01F0007CF4100 +:1074B0002F8DE3CF90E00000800091D0800091DC20 +:1074C0008000917080009164D43120AD189E109599 +:1074D00014974C781292709CE21C0002C0511896CE +:1074E0000C9C2F6DD832169AFAC6FFE41C9B0C9C9C +:1074F000F01F00400C9BFAC3FFFCFACAFFDC069C9D +:10750000F01F003D1896581CCEC15807C2F10E91CD +:107510000E90069CF01F0039401818945808C0407F +:10752000069CF01F0037403C580CC030F01F00355F +:107530005BB4C4D05807C170E06B0BB8E0CCFFF46B +:10754000F01F00315BDCC3A0582CC07060285BF8D2 +:10755000C04060188508CC5B029C301B3006F01FD1 +:10756000002BCBFB40988B08CBCB3FF8310C8B0822 +:10757000F01F002718941890C280F8C8FFF4500834 +:10758000109CF01F00248907640930088919089AA3 +:1075900031094A1B109CF01F00211891C20040982D +:1075A000189B9928300CF01F001E581CCB300C9BE8 +:1075B000029C3FD6F01F001BC94B029C301BF01FE2 +:1075C000001340988B08C8DB3FD6C8BB5807CFD004 +:1075D000029C301B3FD6F01F000DC83B400CF01F33 +:1075E0000012089C3FD6F01F0007C7BB000087F4BD +:1075F0008001745C80016FB880018E9C8001D3A8EB +:10760000800091E88001A22880016B7C80009200BC +:107610008001A28C8001702080016AF480016C409E +:10762000800169E08001A27CEBCD40E0209D49F81B +:1076300018991495709CE21C0002C06118960C9C6D +:107640002F7DE3CD80E0169AFAC6FFE8129B0C9CD2 +:10765000F01F00170C9B1A97FACAFFE01A9CF01F44 +:1076600000151896581CCEC11A9CF01F0013400834 +:1076700018965808C0401A9CF01F0010402C580C57 +:10768000C030F01F000F5BB6C0313FD6CD9B300C31 +:107690008B3C8B5C40880A9B8B28F01F000A581C8F +:1076A000CCF03FD6CCDB0000000087F48001745C96 +:1076B00080016FB880018E9C8001D3A8800091E882 +:1076C00080016C40EBCD40FC1895169414921293F7 +:1076D00010974076310CF01F0012C1D099369905F1 +:1076E00099149927189A3008310948EB109CF01F1B +:1076F000000E1896C100069B049C0C9AF01F000B0C +:107700001897581CC0500C9C301BF01F00090E9C91 +:10771000E3CD80FC30070E9CE3CD80FC800092001E +:1077200080016F6880016AF480017628800169E039 +:10773000EBCD406E202D4086129310951491169A31 +:10774000189B1A9CF01F0008069B0C99FAE2000097 +:107750000A9ABB23029CF01F00052FED2FEDE3CD0D +:10776000806E00008001745C80017374EBCD406812 +:10777000202D129310961495169A189B1A9CF01FA0 +:107780000008FAE800000C9ABB29069B0A9C300905 +:10779000F01F00042FED2FEDE3CD80688001745CB5 +:1077A00080017374EBCD40401896303CF01F00040C +:1077B0007848301C8D08E3CD804000008001EF6CDC +:1077C000EBCD406048A618952F060C9CF01F0009D1 +:1077D000303CF01F0009310AF8CBFF8C0A9CF01FE7 +:1077E00000070C9CF01F0006E3CF9060000087F4B8 +:1077F000800145F88001EF6C800091DC800145FA42 +:10780000D42149461894ECC5FFF00A9CF01F0012E1 +:10781000ECF700F85807C0C06F38707B2F4B322A46 +:10782000089CF01F000E0A9CF01F000DDA2A303C65 +:10783000F01F000CC060F9380088EE081800C06026 +:10784000ECCCFFF0F01F0006D82AF8CBFF78CE8BE7 +:10785000000087F4800145F88002E736800145FA90 +:107860008001EF6CEBCD40E049061895ECC7FFF0C6 +:107870000E9CF01F000F303CF01F000EECF600F8DD +:107880005806C0C0ECCBFFE2306A0A9CF01F000A29 +:107890000E9CF01F000AE3CF90E00E9CF01F000743 +:1078A0000C9CE3CD80E00000000087F4800145F8E7 +:1078B0008001EF6C8002E736800145FAEBCD404055 +:1078C000209DE04B0020E08B001CBABB580BC1B1DF +:1078D0003FF8BAA849162F060C9CF01F0011303C47 +:1078E000F01F0010322AFACBFFFEF8CCFF78F01F11 +:1078F000000E0C9CF01F000D2F7DE3CF90402F7DDC +:10790000E3CFC0403008169ABAA8189BFACCFFFC07 +:10791000F01F0007CE0B0000000087F4800145FC3B +:107920008001EF6C8002E736800145FE800091DC2B +:10793000EBCD40E01895303CF01F000B1897C110BC +:1079400048A62F060C9CF01F000A0A9B306AEECC5A +:10795000FF56F01F00080C9CF01F0007E3CF90E0DB +:10796000E3CD80E08001EF6C000087F4800145FCEE +:10797000800091DC800145FED401F01F0002D80296 +:1079800080017930EBCD40EC202D18961697586B7E +:10799000C0503FFC2FEDE3CD80ECFACCFFF8E06364 +:1079A000312EEA13322EE0623100EA12312EB92371 +:1079B00016980C99300A308B1A9CF01F0010301C5E +:1079C000F01F000F48F81893F0C5FFF00A9CF01F55 +:1079D000000E5803C0C00E9A0C9B069CF01F000BB3 +:1079E0000A9CF01F000B2FEDE3CF90EC0A9CF01FD8 +:1079F0000008069CCD0B00008001776C8001EF6CC5 +:107A0000000087F4800145FC800091DC800145FE88 +:107A1000EBCD40E01897303CF01F0018EEC8000195 +:107A200018955818E0880004E3CF80E058175F09E4 +:107A300049366D1858385F0AF5E90009C0E1582742 +:107A40005F08F5E80008C030E3CF90E0F01F000DBC +:107A5000C0A18B47E3CF90E0F01F000B6D185838A2 +:107A60005F0ACEEB303CF01F000578485818CF2055 +:107A7000F01F0005CEFB00008001EF6C000087F4D2 +:107A800080017BC88001F340EBCD40F81696189337 +:107A900076085858E08A002A49A83064F0C5FFF0FB +:107AA00097040A9CF01F0018301CF01F001818974C +:107AB000C160202D189B089A1A9CF01F0015F01F1A +:107AC00000152FED580CC1616C0A0E9B069CF01F2F +:107AD00000120A9CF01F0011E3CF90F80A9CF01FDF +:107AE000000F0E9CE3CD80F830683FFC9708E3CD93 +:107AF00080F80A9CF01F00093FBCE3CD80F800002D +:107B0000000087F4800145F88001EF6C8002E736C1 +:107B1000800188B0800091DC800145FA0050F200BD +:107B2000000FAC003008F9480320F94803245EFC3C +:107B3000EBCD40C016971496F8FE0320FCCBFFFF58 +:107B4000F60A141FE069851FEA1951EBF60904488B +:107B5000A5591419F8FA0324F2091064121B143BF6 +:107B6000C0B0F94B0320F80E0927FCC8FF9CF808A9 +:107B70000926E3CF90C0E3CF80C0D401189EF8FC63 +:107B80000324FCF803201838C1F0F8C8FF9CFC0C53 +:107B9000032CFC08032930089709E069851FEA19BE +:107BA00051EBFCFB0324FC0B09282FFBF6090448CE +:107BB000F60A141FA5591419F2091064F6090109EF +:107BC000FD490324D802D80A4838F0F900F85809CA +:107BD0005F1C5EFC000087F43018198CF00C180054 +:107BE0005F0A3058F00C18005F09124AC0F1306883 +:107BF000F00C1800C0B03028F00C1800C080584CB1 +:107C0000F9BC0003F9BC01005EFC5EFF302C5EFC99 +:107C100048C8F0F800FC5818C0D0C0635828C0D03D +:107C20005838C0505EFF580C5F0C5EFC583C5F8CAF +:107C30005EFC581C5F8C5EFC582C5F8C5EFC000068 +:107C4000000087F4EBCD40C01897169E740A580ABE +:107C5000C0D0753A580AC0A0747A580AC0704FF85C +:107C6000F0F901045889E0880004E3CF80C04FC8D0 +:107C7000F009032F94D8EDB80004CF813008301CF0 +:107C80009D08E3CD80C0F53900C83FF8F009180021 +:107C9000CED0F51B00D2580BCE90F51C00D030266C +:107CA000F4FA00D8F40C002811B9EC091800E080AF +:107CB00000BFF8C8FFFF3009F40800280C9CF0CA88 +:107CC000FFFDC07815882FCAF8081800E08000B0C2 +:107CD0002FF91639CF85CCABF53900C83FF8F0093C +:107CE0001800CC40F51B00D2580BCC00F51C00D07E +:107CF0003016F4FA00D8F40C002811B9EC09180079 +:107D0000E08000A4F8C8FFFF3009F40800280C9CAC +:107D1000F0CAFFFDC07815882FCAF8081800E08067 +:107D200000952FF91639CF85CA1BF53900A43FF805 +:107D3000F0091800C9B0F51B00B2580BC970F51C4A +:107D400000B03026F4FA00B8F40C002811B9EC09A0 +:107D50001800C660F8C8FFFF3009F40800280C9C22 +:107D6000F0CAFFFDC06815882FCAF8081800C58042 +:107D70002FF91639CF95C7ABF53900A43FF8F009B4 +:107D80001800FE90FF74F51B00B2580BFE90FF6FB9 +:107D9000F51C00B03026F4FA00B8F40C002811B934 +:107DA000EC091800C3D0F8C8FFFF3009F408002818 +:107DB0000C9CF0CAFFFDC06815882FCAF80818008F +:107DC000C2F02FF91639CF95C51BF53900A43FF83D +:107DD000F0091800FE90FF4BF51B00B2580BFE9007 +:107DE000FF46F51C00B03016F4FA00B8F40C002879 +:107DF00011B9EC091800C220F8C8FFFF3009F408D7 +:107E000000280C9CF0CAFFFDC06815882FCAF8082E +:107E10001800C1402FF9123BFE99FFF9C27B3028B0 +:107E2000AE8830199D09129CE3CD80C03028AE8801 +:107E30003029301C9D09E3CD80C03018AE88301940 +:107E40009D09129CE3CD80C03018AE883029301CCB +:107E50009D09E3CD80C00000000087F48003B7B027 +:107E60003028F00C1800C390E088001B3048F00C5C +:107E70001800C3503058F00C1800C21030093028D8 +:107E8000F00B1800C160F00B1800E08B001B3018DD +:107E9000F00B1800C100300812385F5C5EFC30182F +:107EA000F00C1800CEC130193028F00B1800CEC1EC +:107EB0003038C02830181039CF045EFE3029CE0B80 +:107EC0003048F00B1800C0703058F00B1800CE414D +:107ED0003028CF2B3048CF0B3039CD2B3049CD0B4C +:107EE000D431307977387075B8891894581AC0D061 +:107EF000C043582AC4C0D83A7738707A94D9EDB9BB +:107F00000004E0800087DA3AEB3900A43FF8F0097A +:107F10001800CF20EB0800B03009F2081900CF405C +:107F2000149112923006307B30533060C1A8E007C4 +:107F30001800C2B03028F0071800C7A03048EE087B +:107F40001800F9BC0003F9BC0100F01F003CE9F780 +:107F50001E002FF6EB1800B00C38FE9AFFD6098BE6 +:107F6000EAF800B8F006002811B70E9CF01F0034A4 +:107F7000FE9AFFF1E20718005F08E60718005F09A4 +:107F80001248E4081800CD40301CCE0BEB3900C875 +:107F90003FF8F0091800CB00EB0800D03009F208D8 +:107FA0001900CB2012913006307B301230533060F4 +:107FB000C1A8E0071800C2B03028F0071800C3A01D +:107FC0003048EE081800F9BC0003F9BC0100F01FAE +:107FD000001BE9F71E002FF6EB1800D00C38FE9AB4 +:107FE000FF94098BEAF800D8F006002811B70E9C20 +:107FF000F01F0013FE9AFFF1E40718005F08E60780 +:1080000018005F091248E2081800CD40301CCE0B62 +:10801000307B305CF01F000AFE9AFF77301CF01FA7 +:108020000007FE90FF723058301CA888D832302CE0 +:10803000C8DB302CCCDB000080017C1080017E602E +:108040003008484A48499508951893085EFC000096 +:10805000000089EC00008C5CEBCD4080189E198BF1 +:10806000580BC130300A3017149CFC0A00092FFA53 +:1080700013982018EE080948F9E81008F9D8B0104C +:10808000163ACF45E3CD8080169CE3CD80807938C9 +:10809000707A3308F53900C8F0091800C0205EFD79 +:1080A000F51800D4E218000C5848C0E0E08A000837 +:1080B0005888C08058C8CF41310C5EFC5808CF01A9 +:1080C0005EFF304C5EFC302C5EFCD703EBCD40E015 +:1080D00030081896109A169C8D084927760E301590 +:1080E000109BC0A8F80A00082FFA11C9EE0B070868 +:1080F000A7D91039C0A01C3ACF652FFB58DBE08B05 +:10810000000E300A780ECF8B6C08EA0B0949124832 +:108110008D082FFB58DBFE98FFF6E3CF90E00000C0 +:108120008003B7F4EBCD40C030069906149EF8C723 +:10813000FFFC1799EC091800C0E00C9AF60A000839 +:1081400011A90EC978082FF899082FFA1798143832 +:10815000FE99FFF61D993008F0091800C0F0300BA9 +:10816000FC0B000811A9EE0B0B0978082FF89908F1 +:108170002FFB1D981638FE99FFF5E3CF90C0EBCD8D +:1081800040F816941897780B68065806E08A002C79 +:10819000F6C8FFFCE8C5FFFCF8080003300E2FCC42 +:1081A000EA0E070A580BE08A00130FC81458F1D8DA +:1081B000C007C1503009C078F80907081458F1D831 +:1081C000C007C0D02FF9123BFE99FFF8597BE08B16 +:1081D000000706CA6E0B2FFB8F0B68062FFE1C369E +:1081E000FE99FFE0E3CF90F8EBCD40FE1894169295 +:1081F0001497780676055805E08A0025ECC8FFFC40 +:10820000F6C3FFFCF8080001300EF4CCFFFCE60ECC +:10821000070A6E0B580BE08A00120FC81458F1D8E9 +:10822000C007C1203009C078F80907081458F1D8F0 +:10823000C007C0A02FF91639CF852FFE1C35FE9937 +:10824000FFE8E3CF90FE5976FE9BFFF902CA68066D +:108250002FF689062FFE64051C35FE99FFDACF2B19 +:10826000D42178045804E08A0027F8C7FFFC493875 +:108270000F8B700C11C6580CE08A0017F0C5FFFC7C +:10828000300EEDEB2008F1D8C007C0F00A9A300993 +:10829000C0782FFA15881658F1D8C007C0602FF99A +:1082A000123CFE99FFF8D82A2FFE2FF7083EC03463 +:1082B0000F8BCE8BDA2A00000000023CD4211897E5 +:1082C00076055805E08A0026F6C6FFFCF8CEFFFCCE +:1082D000300B1694C0482FFB0A3BC1B4EC0B070AC5 +:1082E000E80A1800CF946E0C580CE08A00120FC8F0 +:1082F0001458F1D8C007CF003009C078FC0907082E +:108300001458F1D8C007CE802FF91839CF85D82A54 +:10831000DA2A3248F00C1800C110E08800113488C5 +:10832000F00C1800C0B0E08800183608F00C1800F7 +:10833000C05036C8F00C1800C0E15EFF3128F00CC8 +:108340001800CFC03188F00C1800CF8030C8F00C76 +:108350001800CF405EFD3308F00C1800CFC1CEEB03 +:10836000EBCD40E078055805E08A0010F8C6FFFC28 +:108370003007C0380A37C0940D8C2FF72FF6F01F46 +:108380000004CF90E3CF90E0E3CF80E08001831240 +:108390004838F14B01DCF14C01D85EFC000087F459 +:1083A0004838F14B01ECF14C01E85EFC000087F429 +:1083B000EBCD40801697581BC050582BC080E3CFA0 +:1083C0008080F01F00050E9CE3CD8080F01F00022E +:1083D000E3CF9080800091E8D401580CC070486BC6 +:1083E000760AE04A0168E0880003D80AF01F00031B +:1083F000DA0A0000000089EC800091DCD401580CFE +:10840000C0A078185908E08B0007780AE04A016894 +:10841000E0880003D80A189B482CF01F0003DA0AF2 +:10842000000089EC800091DCEBCD4040350A1896C5 +:10843000F01F000330088D48E3CD8040800091DCC0 +:10844000D401306AF01F0002D8020000800091DCE5 +:10845000D401300CF01F0002DA0A000080016C7CAD +:10846000D421201D189414971296169A1095189BD3 +:108470001A9CF01F001CE08A0032585CC27058063B +:108480005F1858075F191268C241300840099338D5 +:10849000400A95584008301B9115400CF01F0012FF +:1084A000581CC100400C78785808C090189B089C54 +:1084B000F01F000E581CC0A03FDCC098301BF01FFE +:1084C000000C400C78785808CF21301C2FFDD822A2 +:1084D0004008913740099356CDEB3FEC2FFDD82251 +:1084E00080016B3C800169A480016C40800169E0DF +:1084F000EBCD40C018971696303CF01F00283DD8B1 +:108500003079AE88AE9935083F29300BAEB8AEC988 +:1085100030283019AED8EF6B0008AEABAEEBAEF939 +:1085200058065F1AF8F900BC58095F181468F60875 +:108530001800C310F8F800D05818F9B80008EFF880 +:108540000E08F8F800CC5818EFF80808F9B900043C +:10855000F1D9E038EFF80E08F8F800C85818EFF82D +:108560000808F9B90002F1D9E038EFF80E08F8F878 +:1085700000C45818EFF80808F9B90001F1D9E0383B +:10858000EFF80E08F8F900D4EF380008F1E91048C8 +:10859000EF680008E3CD80C08001EF6CEBCD404078 +:1085A0001896303C5C76F01F000E5876E088000488 +:1085B000E3CF804048B8F006032FF90C00C6E3CDA6 +:1085C0008040F90C00CAE3CD8040F90C00CEE3CD29 +:1085D0008040F90C00D2E3CD804000008001EF6CB8 +:1085E0008003B7D4D40130DCF01F0002784CD802ED +:1085F0008001EF6CEBCD40FC207D31CA1893300B2D +:108600001A9C1A92F01F001266045804E08A00189F +:10861000E6C6FFFC30070D852FF72FF60A9CF01FEA +:10862000000DC0A14008FACAFFE4F0C9FFFF100A1C +:108630005009F565FFE80E34FE99FFEF1A9B069C82 +:1086400031CAF01F00052F9DE3CD80FC800091D042 +:1086500080018312800091DCEBCD40E0207D300B67 +:10866000189731CA1A9CF01F00171A956E0B580BF9 +:10867000E08A0024300AFAC6FFFCEEC9FFFC0C9C1D +:10868000149EC0582FF9143BE08A000D2FFA13886E +:10869000FC081800CF8418C82FF96E0B143BFE9904 +:1086A000FFF7F80601061A9B50060E9C31CAF01F10 +:1086B00000062F9DE3CD80E0FAC6FFFC0C9CCF2B7B +:1086C000800091D0800091DCD421129618971695E5 +:1086D0001494580CC1205809C111314CF01F0009E5 +:1086E000C0C09907B8C599249936487A7419994930 +:1086F000930CF8C8FFF49518D822F01F0004D82274 +:1087000080009200000077A4800147E0EBCD40C0DC +:108710001896580CC110308CF01F000C1897C090A0 +:108720000C9CF01F000B8F1C1898C0A030188F08ED +:108730000E9CE3CD80C018970E9CE3CD80C00E9CAC +:108740001097F01F0004CF5B800092008001D920B9 +:10875000800091E8EBCD40C049566C075807C180B6 +:108760006E395809EFF80004EDF80A01EFF810042B +:10877000F3F81A046E4891096E2A0FCB6E0CF01FA5 +:10878000000D0E9CF01F000C6C075807CEA148B8D6 +:10879000F0C7FFEC0E9CF01F000AC071302CF01FD8 +:1087A00000090E9CF01F0008E3CD80C0000077A4F4 +:1087B000800147E0800091E8000087F4800145DCFB +:1087C0008001478C800145ECD4014848300991185C +:1087D0009109F01F0003D802000077A4800187549C +:1087E000EBCD40FE4A0618976C0816951494201895 +:1087F000E0480167E0880004E3CFC0FE580A5F1933 +:108800006C1A300B580A5F181268F6081800CF501F +:10881000183A5FB858FC5F891268F6081800CED085 +:1088200016910C92C0B82FF7641958F75F8A0E3969 +:108830005FB81468E2081800CE00EE031016306A24 +:10884000E6CCFFF80A9BEC0C000CF01F0008CEC130 +:10885000485B089C060B310A2F2BF01F00050E9C6D +:10886000E3CD80FE000089EC8000917C800091DCEB +:10887000EBCD40E018951697300C18960E9A0A9B8F +:108880002F07F01F0005C0452FF62FFCCF8B0C9C47 +:10889000E3CD80E0800187E0D401306AFACCFFFCB0 +:1088A000FACBFFF4F01F00025F0CD8028000917C2D +:1088B000EBCD4068205D3FF8FACAFFDC15D9FB68B4 +:1088C0000013FB68000EFB68000FFB680010FB68DC +:1088D0000011FB680012FAC6FFF8ACD974088D08C5 +:1088E00015C9FAC3FFFEACC93065FACBFFF20A9A8C +:1088F000069CF01F00060A9A069B0C9CF01F0004C1 +:108900005F0C2FBDE3CD80688002E7368000917C4C +:10891000D401FACBFFFCF73900241788F0091800BE +:10892000C020D80AF73A00251798F4081800CFA1FC +:10893000F6CCFFFE2DABF01F00035F0CD802000049 +:108940008000917CEBCD4040211D303CF01F001E8B +:10895000322A1896FACBFFB4FA0A000CF01F001B5B +:10896000ECC6FF78ECE80000FAE90000ECEA000849 +:10897000FAEB0008ECE80010FAE90010ECEA001845 +:10898000FAEB0018ED380020FB680020ED390021DB +:10899000FB690021FB3A00221B88F4081800C05034 +:1089A000300C2EFDE3CD80401B9AFB380023F408E9 +:1089B0001800CF71FACBFFFEFACCFFDCF01F0004E9 +:1089C0005F0CCF0B8001EF6C8002E7368000917C5A +:1089D000EBCD40E0203D4B571896EF3900943FF81F +:1089E000F0091800C3507938707C2F4CF8E800006B +:1089F000209DFAE90000F8EA0008FAEB0008F8E820 +:108A00000010FAE90010F8EA0018FAEB0018F9383B +:108A10000020FB680020F9390021FB690021F01FCC +:108A200000242F7D580CC0412FDDE3CD80E0202DA8 +:108A3000EEC7FF4A306A0E9B1A9CF01F001EF01F03 +:108A4000001E2FED580CC1C02FDDE3CF90E0F8CB16 +:108A5000FFE2306A1A9CF01F0017EECBFF4AFAC6FD +:108A6000FFFA306A0C9CF01F00130C9B1A9C306AB2 +:108A70001A95F01F00125F0C2FDDE3CD80E0ECCBE8 +:108A8000FFE2FAC5FFFA306A0A9CF01F000A0E9B4B +:108A9000306A1A9CF01F00071A9B0A9C306A1A96CB +:108AA000F01F00065F0CCC1B0000026080018944AF +:108AB0008002E736800188B08000917CD401201DBF +:108AC000500C580CC0401A9CF01F00022FFDD80219 +:108AD0008001D3A8D401201D500C580CC0401A9C12 +:108AE000F01F00022FFDD8028001D3A8EBCD40C0BB +:108AF000E06B00E41896300CF01F000A1897C0E0F5 +:108B0000E06A00E40C9BF01F0008ECC9FFF8EECA15 +:108B1000FFF8486B0E9CF01F00060E9CE3CD80C052 +:108B20008001D8DC800091DC8001D3EC8001ACA80E +:108B3000EBCD40C0E06B00EC1896300CF01F000A43 +:108B40001897C0E0E06A00EC0C9BF01F0008ECC92D +:108B5000FFF0EECAFFF0486B0E9CF01F00060E9C63 +:108B6000E3CD80C08001D8DC800091DC8001D3ECB3 +:108B70008001ACA8EBCD40FE129210914A88F0F92A +:108B800000F818933DD8733C316916977874AE8815 +:108B9000AE9930083509AEA8AEB93F283019301665 +:108BA00014954A0B303AAEC8AED9AE36EECCFFF8CB +:108BB000F01F001D069CEF65000BAE76AE66308B95 +:108BC000F01F001A8F5CC290303A496BF01F0016FC +:108BD0006E58B0B28EE86E5C303AF808002C491B33 +:108BE000F01F00116E598EE8F2080028B0B1E919A3 +:108BF00000B0E91800B21208E93900A5A3682F08EF +:108C00001039C030E3CF90FE0F9830092FE8EF59AC +:108C10000010AE98E3CF90FEE3CD80FE000087F415 +:108C200080017B1C800091DC8001D3ECD431201DBD +:108C3000314E1697330BAE9EAE8B1090FACBFFD809 +:108C40007618500818921493129176055805E08A08 +:108C50000006EA0815042EA8AE983016303AAE1673 +:108C600049E4EECCFFFCE8CBFFFCF01F001D049CA8 +:108C7000AEF3AE56AE46AE75EA0B15042F8BF01F61 +:108C800000198F4CC280303AE8CBFFFCF01F001473 +:108C90006E48B0B18EC86E4CE8CBFFFCF808002CD3 +:108CA000303AF01F000F6E498EC8F2080028B0B0AD +:108CB0003289AE695805E08A000D6E488EC98EDC97 +:108CC000EA0A1504120C400BF00C002CF01F0004F3 +:108CD0002FFDDA3A2FFDD83280017B1C800091DC19 +:108CE0008001D3ECEBCD40E0201D500B1897580CC1 +:108CF000C070169A4C4C0E9BF01F0044C6404C4668 +:108D000030080DA9F0091800C050301C2FFDE3CD2C +:108D100080E0ECCCFFE4F01F003FCF815807C2F0A9 +:108D2000301CF01F003DC3304B751A9B4B6CF01F7D +:108D3000003B1897C320F01F003A3018ED4C00CCD0 +:108D4000ACA80E9C3005400BED5500D04B07F01F32 +:108D500000351896581CC3F1EECCFFE4F01F00322A +:108D60004B28F1090142EA091900CD006E98EDB8CF +:108D7000000ECCC0F01F002E0C9CCC9B4A25EAF9BB +:108D80000320EAF803241039CCC1CD0BECCCFFE46E +:108D9000F01F0025301CCBBBECF801245818C04054 +:108DA000301CF01F0024ECCCFFE4F01F001FEAF998 +:108DB0000324EAF803201238CA90301CF01F001672 +:108DC000301CCA5B492AF50B00D2F80B1900C0A071 +:108DD0003FBCC9DBEECCFFE4AEA5F01F00133FBCE7 +:108DE000C96B3018F55800D24909F3080142F6085A +:108DF0001900CEF07498EDB8000ECEB0F01F000C44 +:108E00003FBCC85B000084CC80017B30000087F44D +:108E1000800145DC80019F3080017B7A800145C460 +:108E200080014664800145EC000002608001FBFC8B +:108E30008001A128EBCD40C01897F01F0015C1B0EC +:108E40006E4849468D186E598D2930096E2C8F2930 +:108E50006E486E3BE2180080F9B80001EDF80E0292 +:108E6000F01F000D1897581CC0803008300CACA8BB +:108E7000E3CD80C0E3CF90C0F01F00083008ED4C78 +:108E800000CCED5800D00E9CE3CD80C08001C6A080 +:108E9000000087F480014664800145C4EBCD40802A +:108EA000491A18977498EDB80001C111F4F801241B +:108EB0005818C0A07848951878599529F01F000BCC +:108EC000C091E3CD8080109CE3CD80803FBCE3CD9A +:108ED000808030086E2C6E3B8F28F01F0005E3CD9C +:108EE00080800000000087F48001C6A080018CE42F +:108EF000106104000000000040200700FFFFFFFF9A +:108F0000000000004869F2F802045828C0205EFE04 +:108F1000580CCFE0F2C8FFF099085EFF000077AC74 +:108F20005EFDD7034828912C913B5EFF000077AC93 +:108F300048384849910C930B5EFC000000007540D6 +:108F4000000074B45EFCD703D431202D500C3008DF +:108F5000FAC1FFF81690109402D84A424A43E269D7 +:108F60005A4C089A0819029B009C40085D181895F5 +:108F70005804C0B1584CF80A1780F9BA0B0449DB01 +:108F8000401CF01F001DC2E140165805C1000A97A1 +:108F90005907EE0A1780F9BA0B100C9B1417140628 +:108FA00064085C7A660C5D185807CF310A04E24405 +:108FB0005A4BFE98FFD65875E088000D4018EACC51 +:108FC000000848CBF00C000C2F8B308AF01F000AF1 +:108FD000C0913009009C129A129B40085D182FED39 +:108FE000DA3A30DC2FEDD83200007540000074B45E +:108FF00080018EF08000917CEBCD40FC49F8189404 +:10900000F0C3FDDCF0C7FFBC3072C0B8321A089B59 +:109010000A9CF01F001B1896C1D02C470637C16070 +:10902000EEC5002C5804CF316E08109C5808CF6054 +:10903000F01F00148F04EF44FFF86E185808CEE1BB +:109040008F248F322C470637CEC15804C0D0E3CFCF +:10905000C0FC6ABC580CC080F01F000A8B968BB60F +:109060006AC85808C030E3CF90FC8BD8301C3078E9 +:109070008BE8E3CD80FC0000000077AC8000917CA1 +:10908000800091E8EBCD40FE109114961895169251 +:109090001293F4C80008E0480037E08B00185859D4 +:1090A000C18049D8F0C4FE08F0C7FFE86EB8580880 +:1090B000C1300E9C321A0A9BF01F0018C1D02C47F9 +:1090C0000837CF51307CE3CD80FE30ACE3CD80FE5D +:1090D000129CE3CD80FEECCBFFFF049CF01F001040 +:1090E0000A9B8FBC8F968FD18FE30E9C321AF01F94 +:1090F000000DE3CF90FE6EBCF01F000B049CECCB88 +:10910000FFFFF01F00078FE38FBC8F968FD1E3CF57 +:1091100090FE0000000077AC8000917C8000918878 +:10912000800091DC800091E8D401487BF6F80204CD +:109130005828C020DC0AF6CBFE04306AF01F00037A +:10914000DA0A0000000077AC800091DCEBCD40FE35 +:10915000209D580B5F09580A5F08169314941069F4 +:10916000C341580BC4514A9264585808C2E03005B4 +:10917000FAC1FFFD0A970A9CC0D8ED3A0020FB38DF +:109180000023F4081800C2E00E9C64580E38E088F2 +:10919000001E64482FF7F00C03265803CEF1306A06 +:1091A000089B5804C0A0202D1A9CF01F0019F01F26 +:1091B00000192FED580CC0E05805C0506AC96CC8A2 +:1091C0001238CE350C95CE1B30050A9C2F7DE3CD91 +:1091D00080FE306A089BECCCFFDFF01F000FCD5102 +:1091E000CECB029B0C9CF01F000CCCF1CD9B189BAE +:1091F000069AFACCFFFDF01F0009FB6300234832FA +:1092000064585808CB51CE1B000077AC8002E7367B +:10921000800188B08000917C800091DCEBCD4060C3 +:10922000306A202D169618951A9CF01F0009F01F21 +:1092300000090C9A5F0B0A9CF01F00072FED581CC9 +:10924000F9BC0001F9BC01FFE3CD80608002E73684 +:10925000800188B080016480D4015C6CF01F000440 +:10926000581CF9BC0001F9BC01FFD8028001641C44 +:10927000EBCD406E202D1293189116921495300B61 +:10928000308A1A9CF01F0012306A069B1A96202D15 +:109290001A9CF01F0010F01F001030085F091AD848 +:1092A0000A9A1AD6049B1AD3029C1AD83038F01F97 +:1092B000000B2FAD5BFCC070581CF9BC01FF2FEDFB +:1092C000E3CD806E304C2FEDE3CD806E800091D0E9 +:1092D0008002E736800188B08001661CEBCD406ECD +:1092E00010911892169314951296F01F00113008E1 +:1092F0000C991AD80A9A1AD1069B049CF01F000DEB +:109300002FED583CE0890007582CC085306CE3CD28 +:10931000806E584CC070E3CFC06E5BECC050581CE0 +:10932000CFB1E3CF906E30BCE3CD806E8001A1DC85 +:109330008001F7D8EBCD4040201D10964978F0FE13 +:109340000204582EC0503FFC2FFDE3CD804030EE8C +:10935000FAC8FFFC10DE300E1A985C761ADE1AD6B8 +:10936000F01F000F2FEDFE5CFC17E0890010FE5C83 +:10937000FC16C114FE5CFB4FC070FE5CFBB4C0B0B9 +:10938000FE5CFAECCE11307CCE0B5BECC040581C7E +:10939000CDB1CDBB30BCCD9B000077AC8001F54496 +:1093A000D4014858F0F902045809C030F01F0003F6 +:1093B000D8020000000077AC80014480EBCD40E88B +:1093C0004D56189514971693E06A0218300B0C9CB2 +:1093D000F01F00524D288D05700C8D133005A36CC5 +:1093E000ED450204F01F004F8D4CC031E3CFC0E8C3 +:1093F0000A9CF01F004D581CCFA11AD5F1D7C00808 +:109400000A990A9A310B320CF01F00482FFD581CA4 +:10941000CEE1F01F0047581CCEA11AD50A980A9930 +:109420004C4A0A9B302CF01F00442FFD580CCDF005 +:1094300030670A981AD70A994BEA0A9B322CF01F18 +:10944000003E2FFD580CCD3030780A991AD84B9A2F +:109450000A980A9B323CF01F00382FFD580CCC7044 +:109460001AD50E9C0A980A994B2A0A9BF01F0032C3 +:109470002FFD580CCBC030270A981AD70A994ADA20 +:109480000A9B304CF01F002C2FFD580CCB001AD734 +:109490000A984A8A0A990A9B305CF01F00272FFD20 +:1094A000580CCA50301C0A981ADC0A994A1A0A9BAE +:1094B000F01F00212FFD580CC9A030390A981AD985 +:1094C00049CA0A990A9B31CCF01F001B2FFD580C8A +:1094D000C8E0F01F001A581CC8A1F01F0019581C42 +:1094E000FE91FF860A980C9730490C9A495B0A9CBA +:1094F000F01F0015FE90FF7C189A308B493CF01F3E +:109500000014581CFE91FF74ED4C0204EF45020C50 +:10951000E3CD80E8000077AC800091D000000258D5 +:1095200080009200800200AC8002067C8001FFB4C3 +:109530008001984C80016E788001FD8C8001A00034 +:109540008001955080016AF48003B8048001762878 +:10955000EBCD40E078185B98C031E3CFC0E078569F +:109560005866CFC1783B0C9A4985EAC7FE040E9C29 +:10957000F01F0017303A497B0E9CF01F0017C131D5 +:10958000F01F00163026EB460204F01F00150C9C5D +:10959000F01F00146A195809C14048C8700C5D19C1 +:1095A000E3CF80E037A83C49EB6801FC30E80C9B36 +:1095B0000E9CEB6901FDEB6801FEF01F000BCE1B5A +:1095C000129CE3CD80E00000000077AC800091DCCD +:1095D0008003B80C8000917C8001FD8080020290A5 +:1095E0008002023480017984EBCD40FC7875580B01 +:1095F000F9B80100F7F81A001693EB3900C83FF8E4 +:10960000F0091800C250EB0900D03008F009190029 +:10961000C4D0307430073022EE061502EAF800D8C4 +:109620000C082FF711BC089BF01F0027E08A0009E7 +:10963000EAF800D80C0811B45803E7F21A00EB1846 +:1096400000D00E38FE99FFEA089CE3CD80FCEB3891 +:1096500000A4F2081800C250EB0900B03008F0096D +:109660001900C240307430073012EE061502EAF8D5 +:1096700000B80C082FF711BC089BF01F0013E08AFC +:109680000009EAF800B80C0811B45803E7F21A0010 +:10969000EB1800B00E38FE99FFEA089CE3CD80FC81 +:1096A000787992D8EDB80004C040307CE3CD80FCDE +:1096B000307B305CF01F0004FE9AFFF9305CE3CD94 +:1096C00080FC000080017E60D431201D4D876E58E3 +:1096D0005808C0E030060C996E48F009032CF01FC2 +:1096E00000552FF66E580C990C38FE9BFFF730068C +:1096F0001A9B8F560C9CF01F00501A94400C580C6B +:10970000C0312FFDD832A36CF01F004C1890CFA0B1 +:10971000400A0C9BA36AF01F004A40085808E08AE0 +:1097200000260C950096C0782FF52FC640080A3801 +:10973000E08A001D350CF01F00418D0CCF614009FF +:109740005809E08A000F009530062FF66A0C580C75 +:10975000C040F01F003840092FC50C39FE99FFF7B3 +:10976000009CF01F00342FFDD8321A9B009CF01F84 +:1097700000324B4972084009F0090D488F585808CB +:10978000CE00300408930891A363E003000264084C +:109790006E467135344CF01F0029F9410040060631 +:1097A0008D0C6A796E48F2CBFFF2F0030306F33AB0 +:1097B000000D0C9CF01F00246A78F139000D306A0E +:1097C000ED690020ECCCFFDF640B2E2BF01F001E98 +:1097D000029B0A9CF01F001DED6C00386A498DC980 +:1097E0006A585808F9B805008DD86A79F338005ED0 +:1097F000ED6800276A7992C88DA80BF9ED59002C05 +:1098000030290BEAF20A1800E2081710F9B8000133 +:109810008DF830286E49F20309062FF4F00A18007B +:1098200008936E580838FE9BFFB1C8AB000077ACB8 +:10983000800091E88002105880009200800091D052 +:1098400000000258800091DC800195E8EBCD40C01B +:10985000201D1696582BC680E0880013586BC590C3 +:10986000587BC2D0583BC4804C076E295809C05061 +:109870004BE80C9C703B5D192FFDE3CD80C0580B6D +:10988000C0F14BA7EEF902085819C6C0EEF8020C59 +:109890003019A1D8EF690210EF48020CCE7B581B9B +:1098A000CE414B273008EEF9020C4B1AA3A9EF6802 +:1098B0000210A1D9B488EF49020CCD8B4ACA3008F6 +:1098C0001589F0091800C4C14A87EEF8020CEDB8FA +:1098D0000001CD31EF380210F2081800CCE1F01F82 +:1098E0000025F01F0025EEF8020C3016E018FFF9F5 +:1098F000EF48020CCBBBF01F002049C7EEF9020C69 +:10990000EDB90004CBA11298A5C8EF48020CCAEB30 +:1099100049673019EEF8020CEF690210A1D8300641 +:10992000EF48020CCA3B4917EEF8020CA3C81A9C78 +:10993000EF48020CF01F001140085828C050F01FDB +:10994000000DF01F000D300A4898B08AEF39021060 +:10995000F4091800C9204858F16A0210C87BB4887D +:10996000C8CB4838B089C89B000077AC000079C4E8 +:1099700080021298800196C8800177A4D401201D2E +:1099800048F9F2F802045828C0302FFDD80AF339FC +:1099900002103008F0091800C0711A9CF01F00096D +:1099A00040085828CF31F01F0008CF00F8CAFFE266 +:1099B000300B169CF01F00052FFDD802000077AC7D +:1099C000800177A4800210FC8001914CEBCD408097 +:1099D000201D4967EEF802045828C0503FFC2FFDB7 +:1099E000E3CD8080F01F0012C051302C2FFDE3CD5D +:1099F0008080EEF9020CEDB90002CF10EDB9000144 +:109A0000C031309CCEDB1A9CF01F000A4008580879 +:109A1000CED0F01F0009581CCE21EEF8020CA3A8EE +:109A2000EF48020CCDDB0000000077AC800210FC98 +:109A3000800211088001F370EBCD40C020AD189872 +:109A40001697580BC07076DC581CC0402F6DE3CDC4 +:109A500080C0109BF13A0020FAC6FFFE0C9CF01F5C +:109A6000001B0C9B209D322A1A9CF01F0019F01F2E +:109A700000192F7D580CCEB0793CFACBFFDCF01FDB +:109A8000001640985818C150C0923058F808180075 +:109A9000F9BC0003F9BC0102CDAB5828C030301C22 +:109AA000CD6B5807C0D06EC85808C0A0305CCCFB46 +:109AB0005807C0806EC85808C050304CCC8B307CE2 +:109AC000CC6B306CCC4B00008002113C8002E7363E +:109AD0008001F2BC800195E8D43120EDFEF3029CB8 +:109AE000FAC1FFA4E6F8020C18971694E2180006D3 +:109AF000C040309C2F2DD832F01F00A1C040308CC8 +:109B00002F2DD832E74C02085807C130BA8CF5D453 +:109B1000C008FAC6FFFEBA9A0E9B0C9CF01F009973 +:109B20000C9C1B9BF01F0098581CC0802F2DDC3A0A +:109B3000BA97BA87FAC6FFFECF4B029CF01F00937C +:109B40001892581CCF41029A089B0E9CF01F00905F +:109B50001890C580E6C7FFE8E6C6FE08EF3A002089 +:109B6000E1380020F4081800E08000A02C470C37F2 +:109B7000CF6130070E950E9B009CF01F0086E136EA +:109B800000381897CD40585CE08000C2E08B00B9E7 +:109B9000583CE08000B4584CC020300CF01F007ED0 +:109BA0003048F0061800E08000A83054E80618009D +:109BB000E08000983028F0061800E080009A300C11 +:109BC000F01F0076E8061800E080008F300CF01FD0 +:109BD00000745837E08B007960F85818C710301CB3 +:109BE000F01F0070300B4F0CF01F0070CA00F01F08 +:109BF0000070581CC9C1E6F8020CA1B8E748020C75 +:109C0000C7ABFAC5FFCE306A029B0A9CF01F005D0D +:109C1000FAC6FFDE0C9CF01F00673FF81AD00C9BC1 +:109C20001AD2310A1AD8204D1A9CF01F00630A9BE1 +:109C3000202D306A1A9CF01F00600499209DE6CC0C +:109C4000FDECFB380069FAEA0048FAE20050FB68D4 +:109C50000021FAEB0000FB380068FAEA0058FAE34A +:109C60000008FAE20060FAEB0010FAE30018FB6863 +:109C70000020303A0098129B4C03F01F00502EED4C +:109C80001895581CFE91FF54009BE6FC0214F01F2F +:109C9000004C5BBCC620580CC3E1189BE6FC0214C8 +:109CA000F01F00483FFCC27B0E9C009BF01F00464B +:109CB000FE91FF5E6EB55805EA071700C5DB302C34 +:109CC000F01F0038C90B5805FE90FF320A9AE13B9D +:109CD0000020009CF01F003D3018E7480208C7DB59 +:109CE000301CF01F002E301CF01F002DC73B302C05 +:109CF000F01F002AC6CB303CCFCB301CC50B586CB4 +:109D0000C080587CFE91FF4B308CC49B307CC47B60 +:109D1000305CC45B344CF01F002E089A18960E9BE2 +:109D2000F01F0018029B306AED640020ECCCFFDFCE +:109D3000F01F001400991AD60A984A6A009B31CC89 +:109D4000F01F00252FFD580CC0E0E6F8020C0A9C1D +:109D5000A1B8E748020CCCFA009BE6FC0214F01F05 +:109D60000019CC8A189BE6FC0214F01F00160C9C0C +:109D7000F01F001A3FFCCBFA000077AC800210FC09 +:109D8000800091DC800178BC800179788001914C61 +:109D900080019A3880015F60800163488001639C84 +:109DA00080017A1080018F208001FD408001F3A0A6 +:109DB000800177C08002E73680020BFC80020A70C7 +:109DC00080020B408000917C800214708000920021 +:109DD00080019E0080016E78800091E8D401202DE2 +:109DE000FACAFFF415D8BAD87409500915C8300B4F +:109DF000BAC8169CF01F00022FEDD80280019AD835 +:109E0000EBCD40E049F51697EAFC0214300BF01F49 +:109E1000001EF01F001EEEC6FFDFEF3B00200C9A75 +:109E20000E9CF01F001BC150EAF8020CA1D8202D97 +:109E30000C9BEB48020C306A1A9CEF360020F01F96 +:109E400000150C9B0E9CF01F00142FED581CC060D9 +:109E5000EAF8020CEDB80001C0600E9CF01F000F84 +:109E6000E3CD80E0301B300CF01F000D302B300CA8 +:109E7000F01F000B0E9CF01F0009E3CD80E00000F6 +:109E8000000077AC80020B40800196C88001914CA5 +:109E90008002E73680019AD8800091E88001984CD2 +:109EA000EBCD40E0202D18951697580CC0513FFC83 +:109EB0002FEDE3CD80E0580BCFB0E04B0020FE9BB0 +:109EC000FFF8FAC6FFFE306AE06B00FF0C9CF01F43 +:109ED0000008306A202D0C9B1A9CF01F00060E9B78 +:109EE0000A9CF01F00052FEDCE4B0000800091D0A2 +:109EF0008002E73680019AD8EBCD408048B7EEF873 +:109F000002045828C030E3CFC080F01F0009581C5D +:109F1000F9BC0109EFF80083F9B90010F1D9E03874 +:109F2000EFF80A83E3CD8080000077AC80020A84DA +:109F3000D40148B9F338000A104CF36C000A7218C7 +:109F40005808C0B05828C0803028726C9318301B55 +:109F500072595D19D80AD80ADA0A0000000079C8D7 +:109F60004828916B915C5EFC000079C8EBCD40C045 +:109F7000203D5CBBBA89502B109714965CC85C8856 +:109F80005807C0513FFC2FDDE3CD80C05C784959B4 +:109F90005018B28C3048FAC9FFF8300A306B492C9F +:109FA000F01F0012581CCEF11B89491A1898B48969 +:109FB000306B1A99300A48FCF01F000C581CCE3147 +:109FC00048D8300AB007306B304848CCFA0800094E +:109FD000F01F0006581CCD7148989146CD5B0000DB +:109FE00000007A288003B8108001776C0000025CC2 +:109FF0008003B8180000025E8003B820000079C812 +:10A00000EBCD40C030074A161AD78D078D17ED6784 +:10A010000008ED670009ED67000A8D378D470E983F +:10A020000E9949BA0E9B302CF01F001A2FFD580CC8 +:10A03000C0413FFCE3CD80C01AD70E980E99496A03 +:10A040000E9B304CF01F00132FFD580CCF301AD749 +:10A050000E980E99491A0E9B32ECF01F000E2FFD40 +:10A06000580CCE8031483019E06A138830AB0E9C12 +:10A07000F01F000B581CCDE10E9BECCCFFF4F01F41 +:10A080000009581CCD71CD7B000079C88001A0F07B +:10A0900080016E788001A1A08001A0A480019F6C46 +:10A0A000800144F8D401F01F000E48EA74085838C3 +:10A0B000C12030289508F539000A3008F009180049 +:10A0C000C020D8023018300B9518487C487AF01F11 +:10A0D0000008D80230089508D80200008001DA365E +:10A0E000000079C88001DA5880018E348001EF20A9 +:10A0F000EBCD408048973018EF6800086E4958094A +:10A10000C0A0308CF01F00066E4C3009485A6E3BE0 +:10A11000F01F0005E3CD8080000079C880019F30EA +:10A120008001A1CC80014558D4014989F80C11FF68 +:10A13000F338000A106CF36C000AC1E1F33800092F +:10A14000F8081800C19072185808C161F338000867 +:10A15000F8081800C06072085808C0F05818C0C04D +:10A160003018300B931848AA48ACF01F000B300B86 +:10A17000331CF01F000AD802301B485A930B488C3E +:10A18000F01F0005D8020000000079C880018E345D +:10A190008001DA588001EF2080016D6C8001DA8443 +:10A1A000EBCD404048766C3CF01F0007308CF01F30 +:10A1B000000730083009ED6800088D09E3CD8040C4 +:10A1C000000079C8800145308001A128D401308C7D +:10A1D000F01F0002D80A00008001A128EBCD4080CA +:10A1E00048E76E185828C030E3CD80806E58300B99 +:10A1F0006E6C5D18300B8F1B4899F2FA0324F2F84D +:10A2000003201438C040169CF01F0006300B332C7E +:10A21000F01F0005E3CD8080000079C8000084CCE9 +:10A2200080018CE480016D6CEBCD40C018971696D0 +:10A23000F01F0009C0C06E0C581CC0700C9B0E9C17 +:10A24000F01F0006CF91302CE3CD80C03FDCE3CD82 +:10A2500080C000008001462C80014636EBCD404096 +:10A26000301818969908F01F00040C9CF01F00038A +:10A27000E3CD80408001463280014634D401580C41 +:10A28000C030F01F0002D80280014630D4013008EF +:10A290009908F01F0002D8028001462ED401189EB2 +:10A2A000580AC0C196199688F9D9C010103CC165EA +:10A2B000F2C8FFFF973AB618D802581AC06096192C +:10A2C000F2C8FFFFB618D802969996881039C0F4E4 +:10A2D0007648F0090709B889CF3B1D897648F00C0C +:10A2E0000B099619F2C8FFFFB618D8023008973844 +:10A2F000B8889619F2C8FFFFB618D802EBCD408097 +:10A300001897580AC1D1961C9689FDDCC010FCC86C +:10A31000FFFF1238F7FA4A03F7F85004F1DEE508B8 +:10A32000EFF95801F1F95E00EFFA5800F1FA5E0119 +:10A33000F7FC5201F8C8FFFEB618E3CD8080581A2A +:10A34000C070961CF8C8FFFEB618E3CD8080969AC0 +:10A350009689F4C8FFFF1238C09476481408119902 +:10A36000B889118AB89A961CCEEB30089738B8088D +:10A37000961CF8C8FFFEB618E3CD8080EBCD408078 +:10A38000189E169C580AC0F1961B9889EFDBC010E6 +:10A39000EEC8FFFD1238C205F6C8FFFC993AB8189E +:10A3A000E3CD8080581AC070981BF6C8FFFCB8181F +:10A3B000E3CD8080969B9889F6C8FFFD1238C1C412 +:10A3C000784A160A15B8BC8815A9BC991598BCA876 +:10A3D0001589BCB9CEAB1DB8784A0E0AB4881DA940 +:10A3E000B4991D98B4A81D89B4B9981BF6C8FFFC90 +:10A3F000B818E3CD8080300899389D08981BF6C8BE +:10A40000FFFCB818E3CD8080EBCD4068189316951B +:10A410001496F01F000C0C9A0A9BE6CCFFFFF01F6D +:10A4200000090C9A0A9BE6CCFFFEF01F00060C9A6E +:10A430000A9BE6CCFFFDF01F0003E3CD806800001F +:10A440008001A29CD4211697189596141496F01F9B +:10A4500000080C9A0E9BEACCFFFEF01F00060BC80A +:10A460005808F1D4E108EFF81C01D8228001A2FCC1 +:10A470008001A408EBCD4068189316951496F01F40 +:10A4800000060C9A0A9BE6CCFFFCF01F0003E3CD0C +:10A49000806800008001A37CEBCD4068189316957E +:10A4A0001496F01F00090C9A0A9BE6CCFFFCF01FE3 +:10A4B00000070C9A0A9BE6CCFFFAF01F0004E3CDDC +:10A4C000806800008001A37C8001A2FCEBCD406885 +:10A4D000189316951496F01F000F0C9A0A9BE6CC61 +:10A4E000FFFCF01F000D0C9A0A9BE6CCFFFBF01F4F +:10A4F000000A0C9A0A9BE6CCFFFAF01F00070C9AA0 +:10A500000A9BE6CCFFF9F01F0004E3CD8068000051 +:10A510008001A37C8001A29CEBCD40681893169526 +:10A520001496F01F000C0C9A0A9BE6CCFFFCF01F5F +:10A53000000A0C9A0A9BE6CCFFFAF01F00080C9A5E +:10A540000A9BE6CCFFF9F01F0005E3CD8068000010 +:10A550008001A37C8001A2FC8001A29CEBCD40681D +:10A56000189316951496F01F00150C9A0A9BE6CCCA +:10A57000FFFCF01F00120C9A0A9BE6CCFFF8F01FBC +:10A5800000100C9A0A9BE6CCFFF6F01F000D0C9A07 +:10A590000A9BE6CCFFF4F01F00090C9A0A9BE6CC5C +:10A5A000FFF0F01F00070C9A0A9BE6CCFFEEF01FAD +:10A5B0000004E3CD806800008001A37C8001A2FC40 +:10A5C000EBCD4068189316951496F01F00090C9A6D +:10A5D0000A9BE6CCFFFCF01F00060C9A0A9BE6CC17 +:10A5E000FFF8F01F0003E3CD806800008001A37C2A +:10A5F000EBCD4068189316951496F01F00060C9A40 +:10A600000A9BE6CCFFFCF01F0003E3CD806800004E +:10A610008001A37CEBCD4068189316951496F01F2B +:10A62000000C0C9A0A9BE6CCFFFCF01F00090C9A68 +:10A630000A9BE6CCFFF8F01F00060C9A0A9BE6CCBA +:10A64000FFF4F01F0003E3CD806800008001A37CCD +:10A65000EBCD4068189316951496F01F00330C9AB2 +:10A660000A9BE6CCFFFCF01F00300C9A0A9BE6CC5C +:10A67000FFF8F01F002D0C9A0A9BE6CCFFF4F01FA8 +:10A68000002B0C9A0A9BE6CCFFF2F01F00280C9AD4 +:10A690000A9BE6CCFFF0F01F00250C9A0A9BE6CC43 +:10A6A000FFEEF01F00220C9A0A9BE6CCFFECF01F95 +:10A6B000001F0C9A0A9BE6CCFFEAF01F001C0C9AC4 +:10A6C0000A9BE6CCFFE8F01F00190C9A0A9BE6CC27 +:10A6D000FFE6F01F00160C9A0A9BE6CCFFE4F01F81 +:10A6E00000130C9A0A9BE6CCFFE2F01F00110C9AB3 +:10A6F0000A9BE6CCFFE1F01F000E0C9A0A9BE6CC09 +:10A70000FFE0F01F00090C9A0A9BE6CCFFDCF01F6B +:10A7100000060C9A0A9BE6CCFFD8F01F0005E3CD9B +:10A72000806800008001A37C8001A2FC8001A29CC3 +:10A73000EBCD4068189316951496F01F00120C9AF2 +:10A740000A9BE6CCFFFCF01F00100C9A0A9BE6CC9B +:10A75000FFFBF01F000D0C9A0A9BE6CCFFFAF01FDE +:10A76000000A0C9A0A9BE6CCFFF9F01F00070C9A2E +:10A770000A9BE6CCFFF8F01F0004E3CD80680000E0 +:10A780008001A37C8001A29CEBCD406818931695B4 +:10A790001496F01F00060C9A0A9BE6CCFFFCF01FF3 +:10A7A0000003E3CD806800008001A37CEBCD40680E +:10A7B000189316951496F01F00060C9A0A9BE6CC87 +:10A7C000FFFCF01F0003E3CD806800008001A37C44 +:10A7D000EBCD4068189316951496F01F00060C9A5E +:10A7E0000A9BE6CCFFFCF01F0003E3CD806800006D +:10A7F0008001A37CEBCD4068189316951496F01F4A +:10A8000000060C9A0A9BE6CCFFFCF01F0003E3CD88 +:10A81000806800008001A37CEBCD406818931695FA +:10A820001496F01F00060C9A0A9BE6CCFFFCF01F62 +:10A830000003E3CD806800008001A37CEBCD40687D +:10A84000189316951496F01F00060C9A0A9BE6CCF6 +:10A85000FFFCF01F0003E3CD806800008001A37CB3 +:10A86000EBCD4068189316951496F01F00060C9ACD +:10A870000A9BE6CCFFFCF01F0003E3CD80680000DC +:10A880008001A37CEBCD4068189316951496F01FB9 +:10A8900000060C9A0A9BE6CCFFFCF01F0003E3CDF8 +:10A8A000806800008001A37CEBCD4068189316956A +:10A8B0001496F01F00060C9A0A9BE6CCFFFCF01FD2 +:10A8C0000004E3CD806800008001A37C8001A650D5 +:10A8D000EBCD4068189316951496F01F00060C9A5D +:10A8E0000A9BE6CCFFFCF01F0003E3CD806800006C +:10A8F0008001A37CEBCD4068189316951496F01F49 +:10A9000000090C9A0A9BE6CCFFFCF01F00060C9A8B +:10A910000A9BE6CCFFF8F01F0003E3CD806800003F +:10A920008001A37CEBCD4068189316951496F01F18 +:10A9300000060C9A0A9BE6CCFFFCF01F0003E3CD57 +:10A94000806800008001A37CEBCD406818931695C9 +:10A950001496F01F00090C9A0A9BE6CCFFFCF01F2E +:10A9600000060C9A0A9BE6CCFFF8F01F0003E3CD2B +:10A97000806800008001A37CEBCD40681893169599 +:10A980001496F01F00090C9A0A9BE6CCFFFCF01FFE +:10A9900000060C9A0A9BE6CCFFF8F01F0003E3CDFB +:10A9A000806800008001A37CEBCD40681893169569 +:10A9B0001496F01F00060C9A0A9BE6CCFFFCF01FD1 +:10A9C0000003E3CD806800008001A37CEBCD4068EC +:10A9D000189316951496F01F00090C9A0A9BE6CC62 +:10A9E000FFFCF01F00060C9A0A9BE6CCFFF8F01F54 +:10A9F0000003E3CD806800008001A37CEBCD4068BC +:10AA0000189316951496F01F00060C9A0A9BE6CC34 +:10AA1000FFFCF01F0003E3CD806800008001A37CF1 +:10AA2000EBCD4068189316951496F01F00090C9A08 +:10AA30000A9BE6CCFFFCF01F00060C9A0A9BE6CCB2 +:10AA4000FFF8F01F0003E3CD806800008001A37CC5 +:10AA5000EBCD4068189316951496F01F00090C9AD8 +:10AA60000A9BE6CCFFFCF01F00060C9A0A9BE6CC82 +:10AA7000FFF8F01F0003E3CD806800008001A37C95 +:10AA8000EBCD4068189316951496F01F00060C9AAB +:10AA90000A9BE6CCFFFCF01F0003E3CD80680000BA +:10AAA0008001A37CEBCD4068189316951496F01F97 +:10AAB00000060C9A0A9BE6CCFFFCF01F0003E3CDD6 +:10AAC000806800008001A37CEBCD40681893169548 +:10AAD0001496F01F00060C9A0A9BE6CCFFFCF01FB0 +:10AAE0000003E3CD806800008001A37CEBCD4068CB +:10AAF000189316951496F01F00060C9A0A9BE6CC44 +:10AB0000FFFCF01F0004E3CD806800008001A37CFF +:10AB10008001A29CEBCD4068189316951496F01F07 +:10AB200000060C9A0A9BE6CCFFFCF01F0004E3CD64 +:10AB3000806800008001A37C8001D434EBCD4068A4 +:10AB4000189316951496F01F00330C9A0A9BE6CCC6 +:10AB5000FFDEF01F00310C9A0A9BE6CCFFD4F01FF9 +:10AB6000002F0C9A0A9BE6CCFFC2F01F002D0C9A16 +:10AB70000A9BE6CCFFBFF01F002B0C9A0A9BE6CC89 +:10AB8000FFBCF01F00290C9A0A9BE6CCFFB0F01F17 +:10AB900000270C9A0A9BE6CCFFACF01F00250C9A0C +:10ABA0000A9BE6CCFFA4F01F00230C9A0A9BE6CC7C +:10ABB000FF9CF01F00210C9A0A9BE6CCFF98F01F27 +:10ABC000001F0C9A0A9BE6CCFF8CF01F001D0C9A0C +:10ABD0000A9BE6CCFF72F01F001B0C9A0A9BE6CC86 +:10ABE000FF68F01F00190C9A0A9BE6CCFF44F01F87 +:10ABF00000170C9A0A9BE6CCFF50F01F00150C9A28 +:10AC00000A9BE6CCFF30F01F0013E3CD8068000004 +:10AC10008001D3448001D2DC8001D2748001CAF863 +:10AC20008001C9D88001D8608001CA688001CA9CAF +:10AC30008001CA0C8001C9A48001D4348001CDB444 +:10AC40008001CE848001D5588001D6B08001D4E443 +:10AC50008001CFFCEBCD4068189316951496F01F39 +:10AC6000000F0C9A0A9BE6CCFFFCF01F000D0C9A1B +:10AC70000A9BE6CCFFFAF01F000B0C9A0A9BE6CC6D +:10AC8000FFF9F01F00080C9A0A9BE6CCFFF8F01FB2 +:10AC90000006E3CD806800008001A37C8001A2FC57 +:10ACA0008001A29C8001AB3CEBCD406C14951296C8 +:10ACB00018921693E06A00DC129B0A9CF01F001A9F +:10ACC000ECC9FF98EACAFF98069B049CF01F001786 +:10ACD000ECC9FFBCEACAFFBC069B049CF01F001431 +:10ACE000ECC9FF68EACAFF68069B049CF01F0011CC +:10ACF000ECC9FF50EACAFF50069B049CF01F000EEF +:10AD0000ECC9FF44EACAFF44069B049CF01F000BF9 +:10AD1000ECC9FF30EACAFF30069B049CF01F000814 +:10AD2000E3CD806C8002E7368001D1588001D24C9F +:10AD30008001D1E88001D1C08001D21C8001CF9C6C +:10AD4000EBCD40EC1296F2E80000F4E90000ECE8EC +:10AD50000008F4E90008ECE20010F4E30010ECE86D +:10AD6000001814971695F4E90018E06B00E85D15DB +:10AD70008F7CC0D030CA6C7BF01F00066E7A6C7975 +:10AD8000149C0A9B2F492F4AF01F0003E3CD80EC4F +:10AD9000800091DC8001ACA8EBCD40C014971696E2 +:10ADA00074385808C160949E948AF60E00081438CE +:10ADB000F5DEE916F9B80900EFF89A03580CC090CF +:10ADC0005809C0C1189B0C9A6E4C1C0CF01F000A4D +:10ADD0008E180C08AE18E3CD80C05819CFA16E4B69 +:10ADE0000C9A1C0BF01F00048E180C08AE18E3CD53 +:10ADF00080C00000800091DCEBCD40E016971496F7 +:10AE00001895581AC0B0F01F000C0C99189B0E9A98 +:10AE10000A9CF01F000AE3CD80E09698968614996C +:10AE20001016169A0C9BF01F00053008EA060B0856 +:10AE3000E3CD80E0800091B88001AD98EBCD406813 +:10AE4000189316951496F01F00060C9A0A9BE6CCF0 +:10AE5000FFFCF01F0004E3CD806800008001A37CAC +:10AE60008001ADF8EBCD4068189316951496F01F4D +:10AE700000060C9A0A9BE6CCFFFCF01F0004E3CD11 +:10AE8000806800008001A37C8001ADF8EBCD4068B4 +:10AE9000189316951496F01F000F0C9A0A9BE6CC97 +:10AEA000FFFCF01F000C0C9A0A9BE6CCFFF8F01F89 +:10AEB00000090C9A0A9BE6CCFFF4F01F00060C99DF +:10AEC0000A9AE6CCFFF0320BF01F0003E3CD806856 +:10AED0008001A37C8001AD98EBCD40681893169556 +:10AEE0001496F01F000C0C9A0A9BE6CCFFFCF01F96 +:10AEF00000090C9A0A9BE6CCFFF8F01F00060C999B +:10AF00000A9AE6CCFFF4320BF01F0003E3CD806811 +:10AF10008001A37C8001AD98EBCD40681893169515 +:10AF20001496F01F000C0C9A0A9BE6CCFFFCF01F55 +:10AF300000090C9A0A9BE6CCFFF8F01F00070C9959 +:10AF40000A9AE6CCFFF7303BF01F0004E3CD80689F +:10AF50008001A37C8001A29C8001AD98EBCD40686C +:10AF6000189316951496F01F00180C9A0A9BE6CCBD +:10AF7000FFFCF01F00150C9A0A9BE6CCFFF8F01FAF +:10AF800000120C9A0A9BE6CCFFF4F01F000F0C9AFB +:10AF90000A9BE6CCFFF0F01F000C0C9A0A9BE6CC53 +:10AFA000FFECF01F000A0C9A0A9BE6CCFFEAF01FA8 +:10AFB00000080C990A9AE6CCFFE9303BF01F000527 +:10AFC000E3CD80688001A37C8001A2FC8001A29C6B +:10AFD0008001AD98EBCD4068189316951496F01F3C +:10AFE00000280C9A0A9BE6CCFFFCF01F00250C9A67 +:10AFF0000A9BE6CCFFF8F01F00220C9A0A9BE6CCD5 +:10B00000FFF4F01F00200C9A0A9BE6CCFFF2F01F21 +:10B01000001E0C9A0A9BE6CCFFF1F01F001B0C9A55 +:10B020000A9BE6CCFFF0F01F00180C9A0A9BE6CCB6 +:10B03000FFEFF01F00150C9A0A9BE6CCFFEEF01F05 +:10B0400000120C990A9AE6CCFFED306BF01F000F4E +:10B050000C9A0A9BE6CCFFE7F01F000B0C9A0A9BA8 +:10B06000E6CCFFE6F01F00080C990A9AE6CCFFE553 +:10B07000320BF01F0006E3CD806800008001A37C46 +:10B080008001A2FC8001A29C8001AD98EBCD4068BC +:10B09000189316951496F01F00150C9A0A9BE6CC8F +:10B0A000FFFCF01F00120C9A0A9BE6CCFFF8F01F81 +:10B0B000000F0C9A0A9BE6CCFFF4F01F000C0C9AD0 +:10B0C0000A9BE6CCFFF0F01F000A0C9A0A9BE6CC24 +:10B0D000FFEEF01F00080C990A9AE6CCFFED303B1A +:10B0E000F01F0005E3CD80688001A37C8001A2FCF5 +:10B0F0008001A29C8001AD98EBCD40681893169515 +:10B100001496F01F00120C9A0A9BE6CCFFFCF01F6D +:10B1100000100C9A0A9BE6CCFFFBF01F000D0C9967 +:10B120000A9AE6CCFFFA302BF01F000A0C9A0A9B11 +:10B13000E6CCFFF8F01F00050C9A0A9BE6CCFFF462 +:10B14000F01F0002E3CD80688001A37C8001A29CF7 +:10B150008001AD98EBCD4068189316951496F01FBA +:10B1600000120C9A0A9BE6CCFFFCF01F00100C9A10 +:10B170000A9BE6CCFFFBF01F000D0C990A9AE6CC67 +:10B18000FFFA302BF01F000A0C9A0A9BE6CCFFF85E +:10B19000F01F00050C9A0A9BE6CCFFF4F01F00029A +:10B1A000E3CD80688001A37C8001A29C8001AD98E2 +:10B1B000EBCD4068189316951496F01F000C0C9A6E +:10B1C0000A9BE6CCFFFCF01F000A0C9A0A9BE6CC17 +:10B1D000FFFBF01F00070C990A9AE6CCFFFA302B10 +:10B1E000F01F0004E3CD80688001A37C8001A29C55 +:10B1F0008001AD98EBCD4068189316951496F01F1A +:10B2000000090C9A0A9BE6CCFFFCF01F00070C9982 +:10B210000A9AE6CCFFFB303BF01F0004E3CD8068C8 +:10B220008001A37C8001A29C8001AD98EBCD406899 +:10B23000189316951496F01F00090C9A0A9BE6CCF9 +:10B24000FFFCF01F00070C990A9AE6CCFFFB303B8D +:10B25000F01F0004E3CD80688001A37C8001A29CE4 +:10B260008001AD98EBCD4068189316951496F01FA9 +:10B2700000090C9A0A9BE6CCFFFCF01F00070C9912 +:10B280000A9AE6CCFFFB303BF01F0004E3CD806858 +:10B290008001A37C8001A29C8001AD98EBCD406829 +:10B2A000189316951496F01F000C0C9A0A9BE6CC86 +:10B2B000FFFCF01F00090C9A0A9BE6CCFFF8F01F78 +:10B2C00000070C990A9AE6CCFFF7303BF01F000408 +:10B2D000E3CD80688001A37C8001A29C8001AD98B1 +:10B2E000EBCD4068189316951496F01F000C0C9A3D +:10B2F0000A9BE6CCFFFCF01F00090C9A0A9BE6CCE7 +:10B30000FFF8F01F00070C990A9AE6CCFFF7303BD4 +:10B31000F01F0004E3CD80688001A37C8001A29C23 +:10B320008001AD98EBCD4068189316951496F01FE8 +:10B33000000C0C9A0A9BE6CCFFFCF01F00090C9A4B +:10B340000A9BE6CCFFF8F01F00070C990A9AE6CC9E +:10B35000FFF7303BF01F0004E3CD80688001A37C41 +:10B360008001A29C8001AD98EBCD406818931695A2 +:10B370001496F01F000C0C9A0A9BE6CCFFFCF01F01 +:10B3800000090C9A0A9BE6CCFFF8F01F00070C9905 +:10B390000A9AE6CCFFF7303BF01F0004E3CD80684B +:10B3A0008001A37C8001A29C8001AD98EBCD406818 +:10B3B000189316951496F01F00090C9A0A9BE6CC78 +:10B3C000FFFCF01F00070C990A9AE6CCFFFB303B0C +:10B3D000F01F0004E3CD80688001A37C8001A29C63 +:10B3E0008001AD98EBCD4068169514961893F01F28 +:10B3F00000220C990A9AE6CCFFFC308BF01F001F4C +:10B400000C9A0A9BE6CCFFF4F01F001B0C9A0A9BD7 +:10B41000E6CCFFF0F01F00180C9A0A9BE6CCFFEC7C +:10B42000F01F00150C9A0A9BE6CCFFE8F01F0012F3 +:10B430000C9A0A9BE6CCFFE4F01F000F0C9A0A9BC3 +:10B44000E6CCFFE0F01F000E0C9A0A9BE6CCFFDE74 +:10B45000F01F000B0C9A0A9BE6CCFFDCF01F0008E3 +:10B460000C990A9AE6CCFFDA302BF01F0004E3CDEA +:10B47000806800008001A37C8001AD988001A2FC5F +:10B48000EBCD4068189316951496F01F00090C9A9E +:10B490000A9BE6CCFFFCF01F00070C990A9AE6CC49 +:10B4A000FFFB303BF01F0004E3CD80688001A37CEC +:10B4B0008001A29C8001AD98EBCD40681695149652 +:10B4C0001893F01F00060C990A9AE6CCFFFC308B0B +:10B4D000F01F0003E3CD80688001A37C8001AD985C +:10B4E000EBCD4068189316951496F01F00090C9A3E +:10B4F0000A9BE6CCFFFCF01F00070C990A9AE6CCE9 +:10B50000FFFB303BF01F0004E3CD80688001A37C8B +:10B510008001A29C8001AD98EBCD406818931695F0 +:10B520001496F01F00100C9A0A9BE6CCFFFCF01F4B +:10B53000000E0C990A9AE6CCFFFB306BF01F000B53 +:10B540000A9AE6CCFFF50C99306BF01F00080C9AB4 +:10B550000A9BE6CCFFEFF01F0004E3CD80680000FB +:10B560008001A37C8001A29C8001AD98EBCD406856 +:10B57000169514961893F01F000C0C990A9AE6CCB5 +:10B58000FFFC306BF01F00090C9A0A9BE6CCFFF61B +:10B59000F01F00070C9A0A9BE6CCFFF5F01F000491 +:10B5A000E3CD80688001A37C8001AD988001A29CDE +:10B5B000EBCD4068169514961893F01F000D0C996A +:10B5C0000A9AE6CCFFFC306BF01F000A0A9AE6CC20 +:10B5D000FFF60C99302BF01F00070C9A0A9BE6CC63 +:10B5E000FFF4F01F0005E3CD806800008001A37C1C +:10B5F0008001AD988001AB3CEBCD40681695149668 +:10B600001893F01F000D0C990A9AE6CCFFFC306BE2 +:10B61000F01F000A0A9AE6CCFFF60C99302BF01FB7 +:10B6200000070C9A0A9BE6CCFFF4F01F0005E3CD5F +:10B63000806800008001A37C8001AD988001AB3C54 +:10B64000EBCD4068169514961893F01F00100C99D6 +:10B650000A9AE6CCFFFC306BF01F000D0C9A0A9B97 +:10B66000E6CCFFF6F01F000B0C9A0A9BE6CCFFF429 +:10B67000F01F00080C990A9AE6CCFFF2302BF01F5D +:10B680000004E3CD806800008001A37C8001AD98B8 +:10B690008001A2FCEBCD4068169514961893F01F1C +:10B6A000000A0C990A9AE6CCFFFC306BF01F0007E9 +:10B6B0000C990A9AE6CCFFF6302BF01F0004E3CD7C +:10B6C000806800008001A37C8001AD98EBCD4068CC +:10B6D000169514961893F01F000A0C990A9AE6CC56 +:10B6E000FFFC306BF01F00070C990A9AE6CCFFF6BE +:10B6F000302BF01F0004E3CD806800008001A37CA4 +:10B700008001AD98EBCD4068189316951496F01F04 +:10B7100000220C9A0A9BE6CCFFFCF01F00200C9A3A +:10B720000A9BE6CCFFFAF01F001D0C9A0A9BE6CCA0 +:10B73000FFF8F01F001A0C990A9AE6CCFFF6306B5E +:10B74000F01F00170C9A0A9BE6CCFFF0F01F0015C3 +:10B750000C9A0A9BE6CCFFEFF01F00120C990A9A94 +:10B76000E6CCFFEE302BF01F000E0C9A0A9BE6CCC5 +:10B77000FFECF01F00090C9A0A9BE6CCFFE8F01FD3 +:10B7800000060C9A0A9BE6CCFFE4F01F0007E3CD0D +:10B79000806800008001A37C8001A2FC8001AD983C +:10B7A0008001A29C8001AB3CEBCD406816951496BD +:10B7B0001893F01F000C0C990A9AE6CCFFFC306B32 +:10B7C000F01F00090C9A0A9BE6CCFFF6F01F000759 +:10B7D0000C9A0A9BE6CCFFF5F01F0004E3CD8068CD +:10B7E0008001A37C8001AD988001A29CEBCD4068D4 +:10B7F000169514961893F01F000C0C990A9AE6CC33 +:10B80000FFFC306BF01F00090C9A0A9BE6CCFFF698 +:10B81000F01F00070C9A0A9BE6CCFFF5F01F00040E +:10B82000E3CD80688001A37C8001AD988001A29C5B +:10B83000EBCD4068189316951496F01F00120C9AE1 +:10B840000A9BE6CCFFFCF01F00100C9A0A9BE6CC8A +:10B85000FFFAF01F000D0C9A0A9BE6CCFFF8F01FD0 +:10B86000000A0A9AE6CCFFF60C99306BF01F00072D +:10B870000C9A0A9BE6CCFFF0F01F0005E3CD806830 +:10B880008001A37C8001A2FC8001AD988001AB3CCB +:10B89000EBCD4068189316951496F01F00100C9A83 +:10B8A0000A9BE6CCFFFCF01F000E0C9A0A9BE6CC2C +:10B8B000FFFAF01F000B0C990A9AE6CCFFF8306BE8 +:10B8C000F01F00080C990A9AE6CCFFF2302BF01F0B +:10B8D0000005E3CD806800008001A37C8001A2FC0C +:10B8E0008001AD98EBCD4068189316951496F01F23 +:10B8F00000090C9A0A9BE6CCFFFFF01F00060C998A +:10B900000A9AE6CCFFFE302BF01F0003E3CD8068DF +:10B910008001A29C8001AD98EBCD406816951496ED +:10B920001893F01F00130C990A9AE6CCFFFF306BB6 +:10B93000F01F00100C9A0A9BE6CCFFF9F01F000CD8 +:10B940000C9A0A9BE6CCFFF8F01F00090A9AE6CC95 +:10B95000FFF70C99306BF01F00070C9A0A9BE6CC9E +:10B96000FFF1F01F0003E3CD806800008001A29C7E +:10B970008001AD98EBCD4068189316951496F01F92 +:10B9800000060C9A0A9BE6CCFFFCF01F0004E3CDF6 +:10B99000806800008001A37C8001B918EBCD40686D +:10B9A0001696149518931499169A306BF01F000888 +:10B9B0000A9A0C9BE6CCFFFAF01F00060A9A0C9B31 +:10B9C000E6CCFFF9F01F0003E3CD80688001AD985D +:10B9D0008001A29CEBCD4068189316951496F01F39 +:10B9E00000060C9A0A9BE6CCFFFCF01F0004E3CD96 +:10B9F000806800008001A37C8001B99CEBCD406889 +:10BA0000189316951496F01F00090C9A0A9BE6CC21 +:10BA1000FFFFF01F00060C990A9AE6CCFFFE306B80 +:10BA2000F01F0003E3CD80688001A29C8001AD98E7 +:10BA3000EBCD4068189316951496F01F00060C9AEB +:10BA40000A9BE6CCFFFCF01F0004E3CD80680000F9 +:10BA50008001A37C8001B9FCD4011499169A308B23 +:10BA6000F01F0002D80200008001AD98EBCD4068C5 +:10BA7000169514961893F01F00090A9AE6CCFFFC5D +:10BA80000C99306BF01F00060C9A0A9BE6CCFFF66F +:10BA9000F01F0004E3CD80688001A37C8001AD9895 +:10BAA0008001A2FCEBCD4068189316951496F01F08 +:10BAB00000090C9A0A9BE6CCFFFCF01F00070C99CA +:10BAC0000A9AE6CCFFFB303BF01F0004E3CD806810 +:10BAD0008001A37C8001A29C8001AD98D4011499BF +:10BAE000169A320BF01F0002D80200008001AD98B8 +:10BAF000EBCD4068189316951496F01F00180C9A19 +:10BB00000A9BE6CCFFE0F01F00160C9A0A9BE6CCDD +:10BB1000FFDEF01F00140C9A0A9BE6CCFFDDF01F3D +:10BB200000110C990A9AE6CCFFDC306BF01F000E76 +:10BB30000C9A0A9BE6CCFFD6F01F000C0C9A0A9BCD +:10BB4000E6CCFFCEF01F00070C9A0A9BE6CCFFCD97 +:10BB5000F01F0004E3CD80688001BADC8001A2FC04 +:10BB60008001A29C8001AD988001BA58EBCD40685D +:10BB7000189316951496F01F00060C9A0A9BE6CCB3 +:10BB8000FFFCF01F0004E3CD806800008001A37C6F +:10BB90008001BAF0D4011499169A303BF01F0002CC +:10BBA000D80200008001AD98EBCD40E018971695C3 +:10BBB0001496F01F000D6E1C580CC0800C990A9A48 +:10BBC0006E0BF01F000AE3CD80E05816C0918A99F1 +:10BBD0006A4812088F186E098A181208AA18E3CD4D +:10BBE00080E000008001A37C8001AD98EBCD40682F +:10BBF000189316951496F01F00060C9A0A9BE6CC33 +:10BC0000FFFCF01F0004E3CD806800008001A37CEE +:10BC10008001BBA8EBCD4068189316951496F01FD1 +:10BC200000100C9A0A9BE6CCFFFCF01F000E0C994A +:10BC30000A9AE6CCFFFB303BF01F000B0A9AE6CCD9 +:10BC4000FFF80C99308BF01F00080C9A0A9BE6CC89 +:10BC5000FFF0F01F0006E3CD806800008001A37CA8 +:10BC60008001A29C8001AD988001BBA8EBCD40680B +:10BC7000169514961893F01F00090A9AE6CCFFFC5B +:10BC80000C99308BF01F00060C9A0A9BE6CCFFF44F +:10BC9000F01F0004E3CD80688001A37C8001AD9893 +:10BCA0008001BBA8EBCD40801697189B580AC0F1C5 +:10BCB0008E1C8E89FDDCC010FCC8FFF91238C285CD +:10BCC000F8C8FFF88F3AAE18E3CD8080581AC070DC +:10BCD0008E1CF8C8FFF8AE18E3CD80808E9A8E894E +:10BCE000F4C8FFF91238C2C46E48140811F9B889B3 +:10BCF00011EAB89A11D9B8A911CAB8BA11B9B8C914 +:10BD000011AAB8DA1199B8E9118AB8FACE2B17F846 +:10BD10006E4A1C0AB48817E9B49917D8B4A817C991 +:10BD2000B4B917B8B4C817A9B4D91798B4E8178923 +:10BD3000B4F98E1CF8C8FFF8AE18E3CD8080300B44 +:10BD4000308A8F3BF01F00028E1CCC4B800091D0BC +:10BD5000EBCD4068189316951496F01F000C0C9AC2 +:10BD60000A9BE6CCFFF8F01F000A0C9A0A9BE6CC6F +:10BD7000FFF6F01F00070C9A0A9BE6CCFFF4F01FB9 +:10BD80000005E3CD806800008001BCA48001A2FC16 +:10BD90008001AB3CEBCD40F8206D169714961499BA +:10BDA0001895169A306BF01F002D0C9A0E9BEACC5A +:10BDB000FFFAF01F002B0C9A0E9BEACCFFF9F01F44 +:10BDC00000280C9A0E9BEACCFFF8F01F00260C9A74 +:10BDD0000E9BEACCFFF0F01F00240C9A0E9BEACCDD +:10BDE000FFECF01F0021318A0E9B1A9CF01F001FF0 +:10BDF000EAC3FFE81A940C9A1A9B069CF01F001ADB +:10BE00005816C1801A9B0C9A6A7CF01F00199A98E8 +:10BE10008E992048F00901098B690C9A069C0E9BAB +:10BE2000F01F00116A698E181208AE182FADE3CD0D +:10BE300080F86A698E182FC81208E06B00E8BA080B +:10BE40006E5CF01F000C8B7CCF20505C1A9B0C9A10 +:10BE5000F01F0007CE3B00008001AD988001A29C3E +:10BE60008001BCA48001A37C800091DC8001BD50D6 +:10BE70008001D3ECEBCD4068189316951496F01F13 +:10BE800000120C9A0A9BE6CCFFFCF01F00100C9AE3 +:10BE90000A9BE6CCFFFAF01F000D0C9A0A9BE6CC39 +:10BEA000FFF8F01F00090C9A0A9BE6CCFFF4F01F84 +:10BEB00000060C9A0A9BE6CCFFF0F01F0005E3CDCC +:10BEC000806800008001A37C8001A2FC8001BD94F9 +:10BED000EBCD40E0189716951496F01F000B0C9AC6 +:10BEE0000A9BEECCFFFCF01F00090FD93008F009C7 +:10BEF0001800C0700C9A0A9BEECCFFF8F01F0004EB +:10BF0000E3CD80E08001A37C8001B8E48001BD9492 +:10BF1000EBCD4060202D301A18951696FACCFFFE16 +:10BF2000F01F00089A181BF92FE8F0090109AC0965 +:10BF30001BCA8B5A1BD88B482FEDE3CD80600000C5 +:10BF40008001A444EBCD40E07808975818971696E6 +:10BF50007859E049003FE0880004E3CF80E0FEF834 +:10BF6000029AF009032F78455815E0800127E04533 +:10BF70000080CF41780C301AF01F00A1E3CF90E091 +:10BF800078485808C391780C301AF01F009EE3CF10 +:10BF900090E07848F0C90005E049008FFE9BFFDF84 +:10BFA000FEF80264F009032F7848E0480081E08041 +:10BFB000010CE08A002BE0480083E0800118E08556 +:10BFC0000110E0480085CCA1780C301AF01F008FDA +:10BFD000E3CF90E0780C301AF01F008DE3CF90E0B3 +:10BFE0007848F0C90001E049009BFE9BFFB8FEF8CD +:10BFF0000222F009032FE0480081CB01780C301AAF +:10C00000F01F0085E3CF90E05848E08000E4E0486E +:10C010000080CA41781A300B780CF01F00806E0C3B +:10C020000C9B301AF01F007EE3CF90E0780C301AA2 +:10C03000F01F007CE3CF90E0780C301AF01F007AFC +:10C04000E3CF90E0780C301AF01F0078E3CF90E057 +:10C05000780C301AF01F0076E3CF90E0780C301A9D +:10C06000F01F0074E3CF90E0780C301AF01F0072DC +:10C07000E3CF90E0780C301AF01F0070E3CF90E02F +:10C08000780C301AF01F006EE3CF90E0780C301A75 +:10C09000F01F006CE3CF90E0780C301AF01F006ABC +:10C0A000E3CF90E0780C301AF01F0068E3CF90E007 +:10C0B000780C301AF01F0066E3CF90E0780C301A4D +:10C0C000F01F0064E3CF90E0780C301AF01F00629C +:10C0D000E3CF90E0780C301AF01F0060E3CF90E0DF +:10C0E000780C301AF01F005EE3CF90E0780C301A25 +:10C0F000F01F005CE3CF90E0780C301AF01F005A7C +:10C10000E3CF90E0780C301AF01F0058E3CF90E0B6 +:10C11000780C301AF01F0056E3CF90E0780C301AFC +:10C12000F01F0054E3CF90E0780C301AF01F00525B +:10C13000E3CF90E0780C301AF01F0050E3CF90E08E +:10C14000780C301AF01F004EE3CF90E0780C301AD4 +:10C15000F01F004CE3CF90E0780C301AF01F004A3B +:10C16000E3CF90E0780C301AF01F0048E3CF90E066 +:10C17000780C301AF01F0046E3CF90E0780C301AAC +:10C18000F01F0044E3CF90E0780C301AF01F00421B +:10C19000E3CF90E0780C301AF01F0040E3CF90E03E +:10C1A000780C301AF01F003EE3CF90E0780C301A84 +:10C1B000F01F003CE3CF90E0780C0A9AF01F003AA1 +:10C1C0000A9CE3CD80E0780C301AF01F0038E3CFF2 +:10C1D00090E0780C301AF01F0036E3CF90E0780C36 +:10C1E000301AF01F0034E3CF90E0780C301AF01FC3 +:10C1F0000032E3CF90E000008003B8288001AAEC71 +:10C200008001A4988003B9288001B3248001A37C15 +:10C210008003BB688001A4CC800091D08001BC1455 +:10C220008001BAA48001A4748001BA6C8001AC546E +:10C230008001AA808001AE8C8001AAC88001AAA4D6 +:10C240008001AA208001AF5C8001A9CC8001A9787F +:10C250008001A9488001A8F48001A8D08001A884A9 +:10C260008001A8608001B1548001B1B08001B1F4B7 +:10C270008001A8188001AA508001B0F88001A83C74 +:10C280008001A7F48001B4E08001B56C8001B5B0F5 +:10C290008001B5F88001B6408001BED08001B5189C +:10C2A0008001B9748001AE3C8001B3AC8001A6145A +:10C2B0008001B3688001B2E0EBCD40C012971499C1 +:10C2C0008E96109A582CC280E08A0008584CC360A1 +:10C2D000587CC190E3CF80C0580CC0A0581CCFB18F +:10C2E00058EBFE9BFFF9FEF80312F00B032F580BDF +:10C2F000CF21129C0E9BF01F00C28E98F006010CFD +:10C30000E3CD80C0202BE04B007FFE9BFFE5FEF8D5 +:10C3100002F2F00B032F582BE080015DE089001A38 +:10C32000580BC260581BCD71129C0E9BF01F00B6BB +:10C330008E98F006010CE3CD80C0580BCCC1129C46 +:10C340000E9BF01F00B28E98F006010CE3CD80C06A +:10C35000584BC170E0850148585BCBD1129C0E9BB5 +:10C36000F01F00AB8E98F006010CE3CD80C0129C4C +:10C370000E9BF01F00A88E98F006010CE3CD80C044 +:10C38000129C0E9BF01F00A48E98F006010CE3CDCA +:10C3900080C0129C0E9BF01F00A18E98F006010C2D +:10C3A000E3CD80C0129C0E9BF01F009D8E98F0067E +:10C3B000010CE3CD80C0129C0E9BF01F009A8E985A +:10C3C000F006010CE3CD80C0129C0E9BF01F00967E +:10C3D0008E98F006010CE3CD80C0129C0E9BF01FDE +:10C3E00000938E98F006010CE3CD80C0129C0E9B4A +:10C3F000F01F008F8E98F006010CE3CD80C0129CD8 +:10C400000E9BF01F008C8E98F006010CE3CD80C0CF +:10C41000129C0E9BF01F00888E98F006010CE3CD55 +:10C4200080C0129C0E9BF01F00858E98F006010CB8 +:10C43000E3CD80C0129C0E9BF01F00818E98F00609 +:10C44000010CE3CD80C0129C0E9BF01F007E8E98E5 +:10C45000F006010CE3CD80C0129C0E9BF01F007A09 +:10C460008E98F006010CE3CD80C0129C0E9BF01F4D +:10C4700000778E98F006010CE3CD80C0129C0E9BD5 +:10C48000F01F00738E98F006010CE3CD80C0129C63 +:10C490000E9BF01F00708E98F006010CE3CD80C05B +:10C4A000129C0E9BF01F006C8E98F006010CE3CDE1 +:10C4B00080C0129C0E9BF01F00698E98F006010C44 +:10C4C000E3CD80C0129C0E9BF01F00658E98F00695 +:10C4D000010CE3CD80C0129C0E9BF01F00628E9871 +:10C4E000F006010CE3CD80C0129C0E9BF01F005E95 +:10C4F0008E98F006010CE3CD80C0129C0E9BF01FBD +:10C50000005B8E98F006010CE3CD80C0129C0E9B60 +:10C51000F01F00578E98F006010CE3CD80C0129CEE +:10C520000E9BF01F00548E98F006010CE3CD80C0E6 +:10C53000129C0E9BF01F00508E98F006010CE3CD6C +:10C5400080C0129C0E9BF01F004D8E98F006010CCF +:10C55000E3CD80C0129C0E9BF01F00498E98F00620 +:10C56000010CE3CD80C0129C0E9BF01F00468E98FC +:10C57000F006010CE3CD80C0129C0E9BF01F004220 +:10C580008E98F006010CE3CD80C0129C0E9BF01F2C +:10C59000003F8E98F006010CE3CD80C0129C0E9BEC +:10C5A000F01F003B8E98F006010CE3CD80C0129C7A +:10C5B0000E9BF01F00388E98F006010CE3CD80C072 +:10C5C000129C0E9BF01F00348E98F006010CE3CDF8 +:10C5D00080C0129C0E9BF01F00318E98F006010C5B +:10C5E000E3CD80C0129C0E9BF01F002D8E98F006AC +:10C5F000010CE3CD80C000008003BDD88001A49869 +:10C600008003BE148001BC6C8001AE648001A5C0B3 +:10C610008001B4B88001A5F08001B8308001B29CDF +:10C620008001B6948001B6CC8001B9D48001BA30C3 +:10C630008001BB6C8001B7048001B7EC8001BA6C4B +:10C640008001B8908001BE748001A5188001A55CAE +:10C650008001B7A88001A7308001A7888001AE8C37 +:10C660008001AED88001A7D08001AB148001AF1843 +:10C670008001A9FC8001A9A88001AFD48001A92470 +:10C680008001B08C8001A8A88001B22C8001A7ACE9 +:10C690008001B2648001BBEC8001B4808001B3E40E +:10C6A000EBCD40FE208D306A18977853784578019D +:10C6B000FAC2FFE6300B049CF01F00384B88F139BA +:10C6C000010BE06AFFFFFB69001E300B1A9CF01F94 +:10C6D0000035302A1A9B049CF01F0033029A302840 +:10C6E0001A990A9B069CF01F00319A194B08F9D938 +:10C6F000C0101188103CF9B60200F1DCE318E06AC2 +:10C7000000FFF1DAE326EDD9E309FBF93C01F9D6A4 +:10C71000E30C1A944A78118A580AC060F4C80001E0 +:10C72000F9E80008C2918F3CF01F00238F2CC31042 +:10C730006E3A300BF01F0019FB66001F6E2BFB6377 +:10C74000001CFB65001D8E78F5D8C01020281A9CAF +:10C75000FB58001AF01F0013049C1A9B300AF01FAC +:10C7600000121A99029A0A9B069C3008F01F000FCB +:10C770002F8DE3CF90FE9A18F4C90001F9E9000962 +:10C78000F40901095C591208120CBA181206CCCB34 +:10C790002F8DE3CD80FE0000800091D0000087F453 +:10C7A0008001C7B88001A4448001C2B8000079E5C7 +:10C7B000000079E48000920030083019B838B818C9 +:10C7C000B828B80A3008994B993999285EFCD703E4 +:10C7D000EBCD4068189316951496F01F00090C9A3B +:10C7E0000A9BE6CCFFFFF01F00060C9A0A9BE6CCE2 +:10C7F000FFFEF01F0004E3CD806800008001A29CD2 +:10C800008001A2FCEBCD40681696149518931499FC +:10C81000169A303BF01F00050A9A0C9BE6CCFFFDF0 +:10C82000F01F0003E3CD80688001AD988001A29CD9 +:10C83000EBCD40681696149518931499169A303BD0 +:10C84000F01F00050A9A0C9BE6CCFFFDF01F0003C9 +:10C85000E3CD80688001AD988001A29CD431FACEEE +:10C86000FFDC189616971494129210907C157C0198 +:10C87000581AC2D0C153582AC1300D893FF8F00967 +:10C880001800C2100D98E2081900E08B0005E008BE +:10C890001900C6E23FF83009AC88AC99D83A8E1836 +:10C8A000AE383FF80D89F0091800C0D00C9C089AEA +:10C8B0000E9BF01F0034089A0E9BECCCFFFFF01F7C +:10C8C0000031CDCB3008300CAC98D83296285808BF +:10C8D000C4C0B618AE3830088B08AC983FFAAC8AA2 +:10C8E0008E198E08F2081900FE98FFEE1494ECC31E +:10C8F000FFFFC1D8E8081800EDF41E000D9A8E184D +:10C900008E89F408000B5C781019123AE089002631 +:10C91000AE1B6A082FF88B080D89E8091800CB3187 +:10C920008E198E08F2081900FE98FFCEAE39301A23 +:10C930000E9B0C9CF01F0013301A0E9B069CF01FE0 +:10C9400000110D88E4081800CD618E888E990D9A2B +:10C950001218103AE08A000E3FF83009AC88AC9902 +:10C960008E182028AE08C8AB9618B628CB4BDA3AFA +:10C970006A0A6E293018F00A094810498F29C7EB56 +:10C980008001A29CEBCD4040201D1A9E9AF65C7857 +:10C990001ADE1AD6F01F00032FED2FFDE3CD8040E5 +:10C9A0008001C85CEBCD40E0302818951AD8169667 +:10C9B00014973069F01F00072FFD580CC0700E9AB5 +:10C9C0000C9BEACCFFFEF01F0004E3CD80E00000EA +:10C9D0008001C9848001A2FCEBCD40E0301818959D +:10C9E0001AD81696149732A9F01F00072FFD580C7D +:10C9F000C0700E9A0C9BEACCFFFEF01F0004E3CD42 +:10CA000080E000008001C9848001A29CEBCD40E061 +:10CA1000305818951AD8169614973029F01F001020 +:10CA20002FFD580CC190EACCFFFE0E9A0C9BF01F14 +:10CA3000000D0E9A0C9BEACCFFFCF01F000B0E9A27 +:10CA40000C9BEACCFFFBF01F00080E9A0C9BEACC73 +:10CA5000FFFAF01F0005E3CD80E000008001C984EB +:10CA60008001A2FC8001A29CEBCD40E0301818951B +:10CA70001AD8169614973039F01F00072FFD580C5E +:10CA8000C0700E9A0C9BEACCFFFEF01F0004E3CDB1 +:10CA900080E000008001C9848001A29CEBCD40E0D1 +:10CAA000306818951AD8169614973049F01F001060 +:10CAB0002FFD580CC190EACCFFFE0E9A0C9BF01F84 +:10CAC000000D0E9A0C9BEACCFFFDF01F000A0E9A97 +:10CAD0000C9BEACCFFFCF01F00080E9A0C9BEACCE2 +:10CAE000FFFAF01F0005E3CD80E000008001C9845B +:10CAF0008001A29C8001A2FCEBCD40E0301818958B +:10CB00001AD81696149730A9F01F00072FFD580C5D +:10CB1000C0700E9A0C9BEACCFFFEF01F0004E3CD20 +:10CB200080E000008001C9848001A29CD43120BD36 +:10CB30005019500818961697581AC390C272E06898 +:10CB400000FDE06900DD1AD8300A3018F01F005CE3 +:10CB50002FFD580CC1E0300A0E9BECCCFFFEF01FFD +:10CB60000059300A0E9BECCCFFFDF01F0056300A36 +:10CB70000E9BECCCFFFCF01F0053ECCCFFFB0E9B9C +:10CB8000300AF01F0050301CC048582AC040301CEA +:10CB90002F5DD83219893FF8F0091800E080008B2A +:10CBA0009618301C2FA8B6182F5DD832761850581A +:10CBB000B1485038760A504AF6E80008F8C2FFFE3D +:10CBC000FAE90018F8C3FFFDF6EA0010F8C9FFFB08 +:10CBD000FAEB0020F8C4FFFC50293FF5FAC0FFD85B +:10CBE000E06100FDC0680D998E382FE81208AE286C +:10CBF0001AD030181AD1E06900DD109A0E9B0C9CF7 +:10CC0000F01F00312FED580CC4105805FBF5500AE9 +:10CC1000FBF8400AF9B90401F1D9E408EBD8E405BE +:10CC2000301A0E9B049CF01F0027301A0E9B069CA6 +:10CC3000F01F0024301A0E9B089CF01F00220DA844 +:10CC40003009F2081800CD010DB83509F2081800B6 +:10CC5000CCB10DC83F29F2081800CC61301A0E9BE8 +:10CC6000402CF01F00180DD84019F2081800CBC155 +:10CC70004038301CAE28F80509496E2812488F2824 +:10CC800040095809C8509305C84B4038FB58001458 +:10CC9000FAE80020EEE90010FAEA0010EEEB0000DE +:10CCA000FAE80018EEE90008AC9C3FF8AC882F5D6C +:10CCB000D8323008B898300CC6CB00008001C98447 +:10CCC0008001A29C8001C85CD431207D1895169704 +:10CCD00014961293581AC110C0B2300830290C9A19 +:10CCE0000E9B0A9CF01F0032C5712F9DD832582A26 +:10CCF000CF50301C2F9DD83276185018760AF0008D +:10CD00001410500A1A91F6E80008F8C4FFFAFAE97C +:10CD100000083FF6F6EA0010FAC2FFE8FAEB00104E +:10CD2000C1A85806FBF65006FBF84006F9B9040105 +:10CD3000F1D9E408EDD8E406301A0E9B089CF01FE8 +:10CD4000001D0BE8E6081800C1D00B998E382FE8BB +:10CD50001208AE2804983029301A0E9B0A9CF01F46 +:10CD60000014CE01BA20E2E80010EEE90010E2E87B +:10CD70000000EEE90000E2EA0008EEEB00082F9D5B +:10CD8000D83230186E29F006094AAE201449109C9A +:10CD90008F292F9DD8320B982FF8EACCFFFA0C9AE6 +:10CDA0000E9BAA98F01F0003301CCA5B8001CB2C9D +:10CDB0008001A29CEBCD40EC206D301918971693A2 +:10CDC0001495F01F002DC0412FADE3CD80ECEECCCB +:10CDD000FFF90A9A069BF01F00290A9A069BEECCDF +:10CDE000FFF8F01F00260A9A069BEECCFFF7F01F13 +:10CDF00000230A9A069BEECCFFF6F01F00210A9A48 +:10CE0000069BEECCFFF2F01F001E0A9A069BEECCAA +:10CE1000FFEEF01F001B0A9A069BEECCFFEAF01F04 +:10CE2000001858055F0858255F091248CCE06608CD +:10CE30005008661886160A9A5018EBD8B010BA1522 +:10CE4000E6E80008FAE900082026E6E20010E068BB +:10CE500000FD0A16AE961A9BFAE300100E9C1AD833 +:10CE6000E06900DD3018F01F00072FFD2FADE3CD86 +:10CE700080EC00008001CCC88001A29C8001C7D05A +:10CE80008001C984EBCD40EC206D18971693149562 +:10CE9000582AC18119893FF8F0091800F9F91801D9 +:10CEA000F7F81201F9BA0102F1DAE108F1D9E10863 +:10CEB000F7F81C01F9B80000F9F80E012FADE3CD29 +:10CEC00080EC3009F01F0019CFA0EECCFFF90A9AD0 +:10CED000069BF01F00170A9A069BEECCFFF8F01F86 +:10CEE00000145805CEC166085008661886160A9ABE +:10CEF0005018EBD8B010BA15E6E80008FAE90008B7 +:10CF00002026E6E20010E06800FD0A16AE961A9BA5 +:10CF1000FAE300100E9C1AD8E06900DD3018F01F0B +:10CF200000052FFDCCCB00008001CCC88001A29C65 +:10CF30008001C984D42112951497580A5F095805B5 +:10CF40005F08169A1248C2510B986E29F0C4FFFE72 +:10CF5000F2C800015BD8E08B0015129C089B5D1A9B +:10CF600018965806C0C06E086E192FF80809089A5E +:10CF70000A9B8F088F190C9CF01F00080C9CD8226C +:10CF8000089B5D1A300818968F2C8F188F08CEAB2F +:10CF900030060C9CD8220000800091DCEBCD40FCD8 +:10CFA00012951494580A5F0958055F0818921248A0 +:10CFB0001693C191300995296A085808E08A00162D +:10CFC00012966A270E99089A069B049CF01F000B84 +:10CFD0002FF6EEF7FFF86A085807F7B701F80C3894 +:10CFE000FE99FFF2E3CD80FCEAE80000F4E90000DE +:10CFF0006A2A892AE3CD80FC8001CF34EBCD40FC46 +:10D0000018931695581AC2C0C053582AC5E0E3CDEC +:10D0100080FC782778085808FE9AFFFB7819580991 +:10D02000FE9AFFF79698300612087649F208000437 +:10D030000F9A0E9B2FEA1414089CF01F00332FF652 +:10D04000EEF7FFF866085807F7B701F80C38FE99B5 +:10D05000FFF166198A181208AA18E3CD80FC9628F9 +:10D060005808C3C0B618F9D8B010AA3C300830121E +:10D0700087088718872810948A1C8A0E189AFC0C37 +:10D080001900C212F7DAC0106A46EC0B00081199B9 +:10D09000F2C7FFFE5827C250F1DEC0101618103735 +:10D0A000E0890020E40409496A2B2FF4F3EB00081F +:10D0B000C1C0F4070008AA18F9D8B010189AFC0CDF +:10D0C0001900CE13E3CD80FC781C580CFE9AFFA10A +:10D0D00096181808B618E3CD80FC961CB62CCC6BBD +:10D0E000AA0CFDDCB010CCBBF3EB1008069A8A99B1 +:10D0F0008B28EC090009485B6A5CF01F00058A1A5E +:10D100008A0ECD8B800091DC8001D3EC8001CF347E +:10D11000EBCD40F83FF510941697149340661388B2 +:10D12000EA081800C05130070E9CE3CD80F858047F +:10D130005F1858065F991268CF700C9B5D1718979F +:10D14000C0600C9A089BF01F0004CEFBA685A69C2D +:10D15000CECB0000800091DCEBCD40C0129EF2E807 +:10D160000000F4E9000014977C2A8F2A18961D8984 +:10D17000169C3FF8F0091800C1401D993058F0097D +:10D180001800E088000F2039E06A5556EA1A555514 +:10D19000F20B141FF20A04481619F2090019C028EC +:10D1A00030091AD9189B1C990C9C7C280E9AF01FE8 +:10D1B00000042FFD8F2CE3CD80C000008001D11032 +:10D1C000EBCD406CF2E20000F4E3000072289528F9 +:10D1D0001495722813961AD6F01F00032FFD8B2C7E +:10D1E000E3CD806C8001D110EBCD406FF2E2000006 +:10D1F000F4E30000F2E00008F4E10008F2E20010BD +:10D20000F4E300101495725813961AD6F01F000319 +:10D210002FFD8B5CE3CD806F8001D110EBCD406F93 +:10D22000F2E20000F4E30000F2E00008F4E100089C +:10D23000724895481495724813961AD6F01F000349 +:10D240002FFD8B4CE3CD806F8001D110EBCD406C76 +:10D25000F2E20000F4E30000722895281495722889 +:10D2600013961AD6F01F00032FFD8B2CE3CD806C94 +:10D270008001D110D421310418971AD41696149530 +:10D2800030183329F01F00142FFD580CC0B058057A +:10D29000C0E18C986C4C0F9A100CEECBFFFEF01F87 +:10D2A000000F0F998C181208AC18D8225815CFA16E +:10D2B0000F9AE80A1800E08800073FF83009AE88A6 +:10D2C000AE99CF0B8C986C4BEECCFFFE100BF01F81 +:10D2D0000003CE8B8001C984800091DCD4213018FA +:10D2E000189716961495308410991AD4F01F0014CC +:10D2F0002FFD580CC0B05805C0E18C986C4C0F9AAB +:10D30000100CEECBFFFEF01F000F0F998C181208C7 +:10D31000AC18D8225815CFA10F9AE80A1800E08857 +:10D3200000073FF83009AE88AE99CF0B8C986C4B54 +:10D33000EECCFFFE100BF01F0003CE8B8001C984E2 +:10D34000800091DCEBCD40E0320930081AD9189505 +:10D35000169714961099F01F00132FFD580CC0F06B +:10D360005806C0F18E986E4C0B9A100CEACBFFFE5B +:10D37000F01F000D0B998E181208AE18E3CD80E057 +:10D380005816CF918E986E4B0B9A100BEACCFFFE7D +:10D39000F01F00050B998E181208AE18CF0B000075 +:10D3A0008001C984800091ACD421201D7809189691 +:10D3B000F2C800015BD8E08B0014F2C80008C0E09E +:10D3C0001A943005C0280E98500870079105680C13 +:10D3D000F01F00068D055807CF712FFDD8223008A9 +:10D3E00099082FFDD8220000800091E8EBCD40C0C5 +:10D3F00018971696F6CCFFF8F01F000DC130EEF826 +:10D40000FFF8EEC900089908F8C7FFF8930C9916C1 +:10D410000C9AE06B00FF0E9CF01F00060E9CE3CD03 +:10D4200080C018970E9CE3CD80C000008000920061 +:10D43000800091D0EBCD40FC32E818931AD81692B8 +:10D44000149430683079F01F00232FFD580CC03140 +:10D45000E3CD80FC089A049BE6CCFFFEF01F001E83 +:10D4600007993058F0091800E088001F2039E06A59 +:10D470005556EA1A5555F20B141FF20A0448F20BDE +:10D4800001055814C18030060C972FF6662C0899B8 +:10D490000E0C049A2FD7303BF01F00100C35FE996C +:10D4A000FFF6E3CD80FC5814F9B80000E7F80A0253 +:10D4B000E3CD80FCEA050017645C0E9BF01F0008BA +:10D4C000872CCC700E9A300BF01F0006CDDB0000CD +:10D4D0008001C9848001BB948001AD988001D3ECA8 +:10D4E000800091D0D421189616951497582AC161BE +:10D4F00019893FF8F0091800F9F91801F7F8120135 +:10D50000F9BA0102F1DAE108F1D9E108F7F81C01F2 +:10D51000F9B80000F9F80E01D82230083049F01FA0 +:10D52000000CC0C00D98F0C400045817C0800E99BC +:10D530000A9A089B6C2CF01F0007D822089B6A5C93 +:10D54000F01F00058D2CCF41CF9B00008001CB2C1C +:10D550008001AD988001D3ECEBCD40FC206D189498 +:10D5600016951493582AC18119893FF8F0091800BB +:10D57000F9F91801F7F81201F9BA0102F1DAE10834 +:10D58000F1D9E108F7F81C01F9B80000F9F80E012B +:10D590002FADE3CD80FC30083019F01F0040CF9054 +:10D5A0006A1E501E6A0A500AEAE80008FAE90008F2 +:10D5B000EAEA0010FAEB0010EDDEB0105813C600D6 +:10D5C000E8C7FFFA0999ECC8FFFE12080E9CE5D8DF +:10D5D000B010069A0A9BF01F00328A18E40819005E +:10D5E000CD82069A0A9BE8CCFFF8F01F002E8A181D +:10D5F000E4081900CCE2E8CCFFF4069A0A9BF01F7D +:10D600000028685C88693008F0091900C0E01896A5 +:10D6100030070C9C2FF7069A0A9BF01F00222FC69A +:10D6200088E80E38FE99FFF78A18E4081900CB1233 +:10D63000069AE8CCFFF20A9BF01F0019685888E9A7 +:10D64000887AF009002C3008F00A1900C0E018961A +:10D6500030070C9C2FF7069A0A9BF01F00132FC669 +:10D6600088F80E38FE99FFF78A18E4081900C912E5 +:10D67000069A0A9BE8CCFFF0F01F0009C8ABE8C788 +:10D68000FFFA30EA300B0E9CF01F0008099B6A5C21 +:10D69000F01F0007895CC97B8001CB2C8001A2FCB4 +:10D6A0008001C8308001C804800091D08001D3EC93 +:10D6B000EBCD40FC206D189416951493582AC18127 +:10D6C00019893FF8F0091800F9F91801F7F8120163 +:10D6D000F9BA0102F1DAE108F1D9E108F7F81C0121 +:10D6E000F9B80000F9F80E012FADE3CD80FCE06839 +:10D6F00000FF33091AD83008F01F00532FFD580CD3 +:10D70000CF406A1E501E6A0A500AEAE80008FAE989 +:10D710000008EAEA0010FAEB0010EDDEB010581332 +:10D72000E0800085E8C7FFFE0999ECC8FFFE1208FB +:10D730000E9CE5D8B010069A0A9BF01F00448A1888 +:10D74000E4081900CD22069A0A9BE8CCFFFCF01FE2 +:10D7500000408A18E4081900CC82E8CCFFF8069A49 +:10D760000A9BF01F003A684C88493008F0091900FC +:10D77000C0E0189630070C9C2FF7069A0A9BF01F02 +:10D7800000342FC688C80E38FE99FFF78A18E408BF +:10D790001900CAB2069AE8CCFFF60A9BF01F002BCC +:10D7A000684888C9885AF009002C3008F00A190026 +:10D7B000C0E0189630070C9C2FF7069A0A9BF01FC2 +:10D7C00000252FC688D80E38FE99FFF78A18E4087E +:10D7D0001900C8B2069A0A9BE8CCFFF4F01F001BA0 +:10D7E0008A18E4081900C812069AE8CCFFF20A9BCE +:10D7F000F01F001688C988D81208684A8879F4088A +:10D80000002C3008F0091900FE90FF7018963007C0 +:10D810000C9C2FF706990A9A310BF01F000F2F0668 +:10D8200088F80E38FE99FFF6C60BE8C7FFFE30EA0F +:10D83000300B0E9CF01F0009099B6A5CF01F00086A +:10D84000894CC73B8001C9848001A2FC8001C8309B +:10D850008001C8048001AD98800091D08001D3EC94 +:10D86000EBCD40E0E06800FE18971AD816951496A4 +:10D8700030483059F01F00162FFD580CC031E3CD51 +:10D8800080E0EECCFFFE0C9A0A9BF01F00120C9A6F +:10D890000A9BEECCFFFDF01F000F0C9A0A9BEECC0A +:10D8A000FFFCF01F000C5816C0A00F9B0C990A9AA1 +:10D8B0006E2C203BF01F0008E3CD80E00F9B6A5CDC +:10D8C000203BF01F00068F2CCF11CDAB8001C98407 +:10D8D0008001A29C8001AD988001D3ECEBCD40E0AB +:10D8E00018951696F6CCFFF8F01F000CC12099167B +:10D8F00030089908F8C7FFF80C9A5805EBF71A0595 +:10D90000E06B00FF0E9CF01F00060E9CE3CD80E054 +:10D9100018970E9CE3CD80E080009200800091D0AB +:10D92000EBCD40C0201DF8C60008300C6C1BF01F6A +:10D930000014C1A0500C3007C1286C1B400CF01F14 +:10D9400000111897C1406C1AECCBFFF8EF4AFFFCAE +:10D950000E9CF01F000D6C065806C0505807CEE113 +:10D960004007CF2B400C2FFDE3CD80C01A9CF01F49 +:10D9700000070E9C2FFDE3CD80C000008001D8DCA5 +:10D980008001D3EC800091DC8001D3A8D401E06851 +:10D990000081301999489959189A7408129C11CE2F +:10D9A000F20E18005F089708D802D703486830398C +:10D9B000F0FA00F830089569985BF00B19005F0CDD +:10D9C0005EFC0000000087F419C8300A4869F2F9CB +:10D9D00000F8F4081800F9BC0001F9BC0100F3FCE0 +:10D9E0001A065EFC000087F448483009F0FA00F897 +:10D9F000301C95695EFC0000000087F448B8985A16 +:10DA0000F0FB00F83178F00A1900E08B000B3018B9 +:10DA1000F00A0948E4180080E01803FEC0205EFF09 +:10DA20003008301C97685EFC000087F478185808AE +:10DA30005F0C5EFC5EFF19C830192018F208180050 +:10DA40005FBC5EFC5EFD5EFD19C93008F009180080 +:10DA50005F0C5EFC5EFD5EFFEBCD4080308B189767 +:10DA6000991B300CF01F00078F0CC0803078E069E4 +:10DA700000818F588F49E3CF9080E3CD80800000F4 +:10DA80008001D8DCEBCD40C018971696308B991BDF +:10DA9000300CF01F00108F0CC160301830298F58E7 +:10DAA0008F4948D8B826118948C8B8E948C71189AC +:10DAB000B8F96EB899086EBC580CC0752FFC8FBCB5 +:10DAC000E3CF90C0E3CD80C0F01F0006CF9B0000E5 +:10DAD0008001D8DC00007A280000025C000087F496 +:10DAE00080018450EBCD40FE1897FACCFFE01694ED +:10DAF000781330CB14928F1B129178061095300C4E +:10DB0000F01F00118F0CC1A0307830498F588F4919 +:10DB10009905B8E6B8F1F9630008B8C4B8D248B8B6 +:10DB200048B9B084B28248B76EB899086EBC580C38 +:10DB3000C0752FFC8FBCE3CF90FEE3CD80FEF01FBD +:10DB40000006CF9B8001D8DC000079E5000079E475 +:10DB5000000087F480018450EBCD40FC1897FACC8C +:10DB6000FFE4314B781414938F1B129278061095B2 +:10DB7000300CF01F00158F0CC2003018F3D4C01009 +:10DB80008F488F589913B8429935F9560010F954B7 +:10DB9000001248E7F1D6C0100A481248F9B800FF51 +:10DBA000F9B80100B8586EB999096EBC580CC07527 +:10DBB0002FFC8FBCE3CF90FCE3CD80FCF01F000472 +:10DBC000CF9B00008001D8DC000087F480018450E6 +:10DBD000D401780A3009740B15F8129C129AF01FC0 +:10DBE0000002DA0A80018460D401780A3009740BDB +:10DBF000F538000B129C129AF01F0002DA0A00009E +:10DC000080018460D401780A3009740BF538000B68 +:10DC1000129C129AF01F0002DA0A00008001846050 +:10DC2000D401780A3009740BF538000B129C129A53 +:10DC3000F01F0002DA0A000080018460D401780A33 +:10DC40003009740BF538000B129C129AF01F000279 +:10DC5000DA0A000080018460D401780A3009740B6C +:10DC6000F538000B129C129AF01F0002DA0A00002D +:10DC700080018460D401780A3009740B15F8129C75 +:10DC8000129AF01F0002DA0A80018460EBCD40F89E +:10DC900030C618979916169414930C9B300CF01FED +:10DCA00000108F0C1895C160307831690C9A8F582C +:10DCB000089B8F49F01F000B48B66CB88B086CBCF2 +:10DCC000580CC0A52FFC8DBC301C6A088708E3CD1A +:10DCD00080F8E3CD80F8F01F0005CF6B8001D8DC21 +:10DCE000800091DC000087F480018450EBCD40F887 +:10DCF000308618979916169414930C9B300CF01FCD +:10DD000000108F0C1895C160307831490C9A8F58EB +:10DD1000089B8F49F01F000B48B66CB88B086CBC91 +:10DD2000580CC0A52FFC8DBC301C6A088708E3CDB9 +:10DD300080F8E3CD80F8F01F0005CF6B8001D8DCC0 +:10DD4000800091DC000087F480018450EBCD40F826 +:10DD500033C618979916169414930C9B300CF01F29 +:10DD600000108F0C1895C160307831390C9A8F589B +:10DD7000089B8F49F01F000B48B66CB88B086CBC31 +:10DD8000580CC0A52FFC8DBC301C6A088708E3CD59 +:10DD900080F8E3CD80F8F01F0005CF6B8001D8DC60 +:10DDA000800091DC000087F480018450EBCD40F8C6 +:10DDB000318618979916169414930C9B300CF01F0B +:10DDC00000108F0C1895C160307831190C9A8F585B +:10DDD000089B8F49F01F000B48B66CB88B086CBCD1 +:10DDE000580CC0A52FFC8DBC301C6A088708E3CDF9 +:10DDF00080F8E3CD80F8F01F0005CF6B8001D8DC00 +:10DE0000800091DC000087F480018450EBCD40F865 +:10DE1000330618979916169414930C9B300CF01F28 +:10DE200000108F0C1895C160307831090C9A8F580A +:10DE3000089B8F49F01F000B48B66CB88B086CBC70 +:10DE4000580CC0A52FFC8DBC301C6A088708E3CD98 +:10DE500080F8E3CD80F8F01F0005CF6B8001D8DC9F +:10DE6000800091DC000087F480018450D421189751 +:10DE7000169530CB991B300CF01F00128F0C1896A2 +:10DE8000FAC4FFEC580CC190302830098F588F49E4 +:10DE900048D76EB899086EBC580CC1052FFC8FBCD2 +:10DEA0005805EDF81000EBF81A00089BECCCFFFCCD +:10DEB000308AF01F0006DA2AD822F01F0005CF0BA7 +:10DEC0008001D8DC000087F4800091DC8001845060 +:10DED000EBCD40E018961695310B991B300CF01FD6 +:10DEE00000108D0C1897C1503078317A0A998D58EE +:10DEF0008D4A48CBF8CAFFFCF01F000B48B56AB842 +:10DF00008F086ABC580CC0752FFC8BBCE3CF90E027 +:10DF1000E3CD80E0F01F0006CF9B00008001D8DC3D +:10DF20008001D3EC8001D158000087F48001845037 +:10DF3000EBCD408078076E285808C0B0300C189A96 +:10DF40005C586E0B3109300CF01F0009E3CF908054 +:10DF5000310CF01F00086E189908EF390016991956 +:10DF60006E3899286E4999396E28CEAB800184604D +:10DF700080009200EBCD40FC189716931495314B1E +:10DF80001294991B300CF01F001C8F0C1896FAC2CB +:10DF9000FFE4580CC200302830198F588F495805BB +:10DFA000C1C18D455C7549576EB88D086EBC580C63 +:10DFB000C1F52FFC8FBC5804EDF81000E9F81A00E9 +:10DFC000049B308AECCCFFFCF01F000D301C8D351B +:10DFD000E3CD80FCE3CF80FC5C750A9CF01F000958 +:10DFE0008D4CCF90069B0A9AF01F0005CDDBF01FE9 +:10DFF0000006CE1B8001D8DC000087F4800091DC95 +:10E000008000920080018450EBCD40801897F93C4D +:10E01000000BF01F00084888F0F900F85809C0709C +:10E02000EECBFFFC310A313CF01F0004E3CF9080BF +:10E0300080015FB0000087F480014658D42130C8C9 +:10E040001896109B4904300CE8F500F88D18F01F65 +:10E05000000F8D0C1897C120301830D98D582FCC57 +:10E06000EACBFFE28D49F01F000A68B88F0868BC50 +:10E07000580CC0552FFC89BCDA2AD822F01F0005A5 +:10E08000CFBB0000000087F48001D8DC8001844011 +:10E0900080018450D42130CB1897991B300CF01F8D +:10E0A000000B8F0C1894C1004898301530868F559E +:10E0B0008F462FCCF0FB00F82E2BF01F00060A9C99 +:10E0C000E966000AD822D8228001D8DC000087F453 +:10E0D00080018440EBCD40E030CB1896991B300C8A +:10E0E000F01F00108D0C1897C1703018305948E59A +:10E0F0008D588D492FCCEAFB00F82E2BF01F000B1A +:10E100003028AE586AB98F096ABC580CC0752FFC0C +:10E110008BBCE3CF90E0E3CD80E0F01F0005CF9B08 +:10E120008001D8DC000087F48001844080018450A5 +:10E13000EBCD40FC30C518969915169414931292A5 +:10E140000A9B300CF01F00138D0C1897C1D03018AB +:10E150008D458D580A9A300BF01F000FEECCFFFC56 +:10E16000089BF01F000E078848D6EF68000A058953 +:10E17000EF69000B6CB88F086CBC580CC0752FFC95 +:10E180008DBCE3CF90FCE3CD80FCF01F0006CF9B5D +:10E190008001D8DC800091D080018440000087F4A9 +:10E1A00080018450EBCD40FC30C51896991516942B +:10E1B000149312920A9B300CF01F00128D0C1897CA +:10E1C000C1B0301830B98D588D490A9A300BF01F04 +:10E1D000000E306AAEC4AED3049BEE0A000CF01FF2 +:10E1E000000B48B66CB88F086CBC580CC0752FFC7F +:10E1F0008DBCE3CF90FCE3CD80FCF01F0006CF9BED +:10E200008001D8DC800091D0800091DC000087F490 +:10E2100080018450D431203D502B5018FACEFFD0CD +:10E2200033857C3499157C181896149312917C00D0 +:10E2300050087C220A9B300CF01F00228D0C18978E +:10E24000C370301830A98D580A9A8D49300BF01FD1 +:10E25000001E069A029BEECCFFFCF01F001CEF5341 +:10E2600000244028049BEF680026EF600027306AF6 +:10E27000EECCFFD8F01F00155804C1C0089B308AAF +:10E28000EECCFFD2F01F00114008EF6800364018B6 +:10E2900048F6EF6800376CB88F086CBC580CC05556 +:10E2A0002FFC8DBC2FDDDA3AF01F000ACFBB2FDD2B +:10E2B000D832089B308AEECCFFD2F01F0003CE5B31 +:10E2C0008001D8DC800091D0800091DC000087F4D0 +:10E2D00080018450D4012FCC7808202D500819C912 +:10E2E000BAC919D8BAD8F01F00052FED580CF9B8E3 +:10E2F000010DF9F81A06DA0A80015860D40148D8ED +:10E30000F8CBFFF5F0F900F8733C7808204D502861 +:10E3100019C9FB69000C19D8306AFB68000D1A9CFA +:10E32000F01F0005F01F00052FCD580C5F1CD80210 +:10E33000000087F48002E73680018898EBCD40FE2C +:10E340003007FAC5FFE0189116924A134A1466087E +:10E350000E38E08A00216A08204D50280BC9FB695D +:10E36000000C0BD8EE061504FB68000DE806000A49 +:10E3700015D8BAD87409500915C8BAC8F01F0016C4 +:10E380002FCD580CC0A12FF75907CE2118970E9CFE +:10E39000E3CD80FEEE061504E80600060A9B0C9C01 +:10E3A000F01F000EF3D2C001EE081501AC692FF882 +:10E3B000E808093166090E39FE99FFEBEEC9FFFF47 +:10E3C00048380E9C9109E3CD80FE000000008C5C73 +:10E3D00000008B5C8001889880018440EBCD4080F8 +:10E3E000300819C9F0091800C10048E8F0F700F832 +:10E3F0005807C130F01F000C0E9CF01F000C0E9C43 +:10E40000F01F000BE3CF8080486830A9F0FA00F8D5 +:10E41000301C9569E3CD80800E9CE3CD80800000A8 +:10E42000000087F480015D188001593880015CDCB0 +:10E43000EBCD40E01896F01F00224A2A0DE9F4F7D0 +:10E4400000F85809C1103018F0091800C32030280E +:10E45000F0091800C31030488F687498300CABC8AE +:10E460009598E3CD80E06F3930D8322A8F68496CB7 +:10E47000727B2F4BF01F00156F3C3FF8787BF7390C +:10E4800000C8F0091800C130202DF71600D47845D7 +:10E49000306AEECBFFE21A9CF01F000C0C9B0A9C2A +:10E4A000F01F000B301C2FEDE3CD80E0E3CF90E0B8 +:10E4B00030088F68CD3B30588F68CD0B8001F00459 +:10E4C000000087F400008C608002E7368001E33CA6 +:10E4D000EBCD40E01896F01F00284A8A0DE9F4F7CA +:10E4E00000F85809C1503018F0091800C3603028EE +:10E4F000F0091800C3906F0830492FF88F69EF4872 +:10E5000000407498300CABC89598E3CD80E06F392B +:10E5100030D8322A8F6849AC727B2F4BF01F00191C +:10E520006F3C3FF8787BF73900C8F0091800C1301C +:10E53000202DF71600D47845306AEECBFFE21A9C06 +:10E54000F01F00100C9B0A9CF01F000F301C2FEDD9 +:10E55000E3CD80E0E3CF90E06F0830092FF88F69BA +:10E56000EF480040CCFB6F0830592FF88F69EF4817 +:10E570000040CC8B8001F004000087F400008C6028 +:10E580008002E7368001E33CD421310B1896991BB9 +:10E59000300CF01F00198D0C1897C28030183049CC +:10E5A0008D588D494955302CEAF400F8F01F0014BD +:10E5B000E8CBFFE21896EECCFFF8F01F00126C38A3 +:10E5C000AE38EAF901045819C0D03008AE2830B886 +:10E5D00089686AB98F096ABC580CC0952FFC8BBC3E +:10E5E000DA2AEAF8011C5818CF20D82AF01F0006B2 +:10E5F000CF7B00008001D8DC000087F48001EF6C45 +:10E600008001844080018450EBCD40F81897169427 +:10E6100030CCF01F0046303CF01F00441895302CE1 +:10E62000F01F0042E06A00EC1896E06B00FF0E9CC1 +:10E63000F01F003FE8CBFFE2EECCFFF6F01F003DFD +:10E640006C384BD9AE289208AE483DD86939727BF8 +:10E65000F73A009AF00A1800C480F73900803DD8D4 +:10E66000F0091800C52030050A93F01F00349838CF +:10E67000AE381896F93900A83FF8F0091800C09094 +:10E68000F8C9FF58EECAFF584ADB0E9CF01F002D58 +:10E69000ED3900CC3FF8F0091800C1900E9CECC990 +:10E6A000FF34EECAFF344A6BF01F0027089CF01FAE +:10E6B0000027583CE089000C4A587099ABC99199E1 +:10E6C0003FFA301CEF6A009EE3CD80F85805CF502A +:10E6D000EECCFF62069BF01F001F49D9301C7298D8 +:10E6E000ABA89398E3CD80F8F73900A03008F00983 +:10E6F0001800CB41EAF900B85819CB01F72800A25D +:10E700001295F003161FCB2BF73900863018F0094D +:10E710001800CAA1EAFC00B8581CCA61F728008892 +:10E720001895F003161FCA2B8001EF6C800091D062 +:10E73000800184400000025E8001EFF88001D3EC8C +:10E740008001D1E88001D21C8001808E000087F416 +:10E75000800184F0D421E06800EC1897109B4924D4 +:10E76000300CE8F500F88F18F01F00108F0C189689 +:10E77000C090301830798F588F490A9BF01F000CD9 +:10E78000C021D82A0C9CF01F000B30C88B6868B9D8 +:10E790008D0968BC580CC0452FFC89BCDA2AF01FD3 +:10E7A0000006CFCB000087F48001D8DC8001E608AA +:10E7B0008001F03080018450D421E06800EC18978B +:10E7C000109B4924300CE8F500F88F18F01F00105A +:10E7D0008F0C1896C090301830698F588F490A9B5B +:10E7E000F01F000CC021D82A0C9CF01F000B30C871 +:10E7F0008B6868B98D0968BC580CC0452FFC89BC72 +:10E80000DA2AF01F0006CFCB000087F48001D8DCA5 +:10E810008001E6088001F03080018450EBCD40405B +:10E82000201D18961A9CF01F001849888C69F0FB6F +:10E8300000F85809C1203018F0091900C0B030287C +:10E84000F0091900C170770830492FF89769F74827 +:10E8500000402FFDE3CF80407738301911EA301C9B +:10E86000F20A1800F9B8000CF7F80A062FFDE3CDFC +:10E870008040770830592FF89769F74800402FFDFE +:10E88000E3CF8040800177A4000087F4D401496879 +:10E8900019C9F0FA00F85809C1803028F0091800A9 +:10E8A000C1803048F0091800C0503018F009180035 +:10E8B000C180750830492FF89569F548004019CB9B +:10E8C000302CF01F000AD80A3088301C9568D80216 +:10E8D000750830592FF89569F548004019CBCF1BC2 +:10E8E000301BCEFB000087F480018390D431215D82 +:10E8F000303C169614911290F01F00584D83F8C4C6 +:10E90000FFB0189531CA089B069CF01F0056C0A1A5 +:10E910006D3830AA707BE6CCFFE42D2BF01F005140 +:10E92000C7B06D38FAC7FFC8707B0E9CF6CAFFC827 +:10E930002D2BF01F004D089B0E9CF01F004CC0417A +:10E94000300C2EBDD83231CA0E9BFA0A0002049C4C +:10E95000F01F0047049CF01F004730080E9A500833 +:10E960001A97089B1A9CF01F00446D38707930E8A4 +:10E97000F33A005EF00A1800C670EB3A0074580AC9 +:10E98000CE006D387079EB380075F33B005EF60809 +:10E990001800C0F0EACCFF8A3009C0581938F608D0 +:10E9A0001800C0502FF9123AFE99FFFA123ACC9093 +:10E9B000049CF01F0032CC50049B1A9CF01F0030C6 +:10E9C0001A9B029CF01F002F049B009CF01F002D3F +:10E9D000089B31CA4A2CF01F00266D3830AA707B84 +:10E9E000E6CCFFE42D2BF01F00226D38312A707B1E +:10E9F000E6CCFFDA2C8BF01F001E029B304AE6CCDF +:10EA0000FFC8F01F001B009BE6CCFFC4304AF01F7C +:10EA10000018301CC97B6D38312A707BE6CCFFDAD8 +:10EA20002C8BF01F0010FE91FF7E304AE6CBFFC812 +:10EA3000029CF01F000FE6CBFFC4009C304AF01F81 +:10EA4000000C301CC7FB049CF01F000FFE90FF7AE7 +:10EA50001A9CF01F000EC92B8001EF6C000079E8B2 +:10EA60008000917C80018124800182BC800091DC47 +:10EA700080018658800181E8800182608001817E6A +:10EA8000800180CC80018360800185F4EBCD40FC67 +:10EA9000FACD0110300733095407FEF3022EE6F8D1 +:10EAA00000F854281896129B0E9C8D19F01F0088B0 +:10EAB0008D0C1895E080008A3018303C8D588D4CB4 +:10EAC000F01F0084FACBFEFC1894FACAFEF8FACCC8 +:10EAD000FEF2F01F0081442871390E9CE06B00ECBF +:10EAE0007277F01F007BC710540CE0680420B83820 +:10EAF000442B7738707992D9EDB90000C6B0EDB9E2 +:10EB00000001C06144099238A1B8B238442BE8F83A +:10EB100000B85808C0C07738707A94D9EDB90009A8 +:10EB2000C06144099238A9B8B238442BFAC2FEF148 +:10EB3000441A049CF01F006944185818E08000A58E +:10EB4000C6823079FB38010FF2081800C050440922 +:10EB50009238A5A8B238440CF01F0061049CF01F45 +:10EB600000614428E74C0100EACAFFF071390A9CB1 +:10EB70004DDBF01F005E6858AA286869AA394D3C31 +:10EB800069B85808C440442B773870793078F33A24 +:10EB90000074F00A1800C240EAC9FFF4EACAFFF89C +:10EBA000300CF01F0053581CC53030063018E748B1 +:10EBB000004444095809C0A0FACCFF00F01F004DE2 +:10EBC0000C9C2BCDE3CD80FC30060C9C2BCDE3CDF3 +:10EBD00080FC44099238A1A8B238442BC99BF8F8AC +:10EBE00001AC5808C050F8CCFE54F01F004230CBA6 +:10EBF000300CF01F0037E74C01AC189AC080442855 +:10EC0000713B76794B8B28C9F01F003B442BCC5BC2 +:10EC10005828CA51442C1A9B2E2CF01F00381A96E3 +:10EC20001AD61ADC442BFB380116FB390117EF3AD0 +:10EC300000CF169CF6CBFF34F01F003144283289F8 +:10EC4000F15900D8442CF01F00262FEDC88BE8F8AE +:10EC500000B85808C2916AB93FF8F368009A3028A2 +:10EC60003039E7480044442891694426F01F0025C4 +:10EC7000ED4C004466B88B0866BC580CC2352FFCBE +:10EC800087BC3016C94B440BEF3A00AF169CFB38DB +:10EC9000010EFB39010FF6CBFF58F01F001B440C8F +:10ECA000F01F000FC5CB44287139727A94D8EDB8A3 +:10ECB0000001CD21189B6ABCF8CCFF66F01F001341 +:10ECC000CCFBF01F0013CDDB000087F48001D8DC03 +:10ECD0008001EF6C80017C4480017EE08001F03097 +:10ECE00080017BD88001D3EC8001AD408001E8EC4D +:10ECF0008001D3A88001D1588001887080018C2CBC +:10ED0000800145C480018B74800184F080018450AF +:10ED1000D431203D189616971493303CF01F0070A4 +:10ED2000301831798D588D4930086C068F0858039A +:10ED3000EDF81805E7F81A0018950DC40898A7D83B +:10ED4000C0505898C0302FDDD83A0DD93018F0098E +:10ED50001800C1003008F0041800F9B80500EFF8F9 +:10ED60005A00F9BC0501F9BC0401EFFC4A002FDD93 +:10ED7000D832303CF01F005A6C98F93A0074F13BDD +:10ED8000005E580ACE80F9380075F6081800C0A059 +:10ED900028AC30092FF91439CDE41938F00B1800DC +:10EDA000CFA1ECC0FFF8009CF01F004E1891CD30B1 +:10EDB0006BB85808C090793870793078F33A00749D +:10EDC000F00A1800C6E0FACCFFF8F01F0047581C04 +:10EDD000C0A0F01F0046029B835C350A31DCF01FA7 +:10EDE0000044CB9B40285818CF51FACCFFFCF01FB1 +:10EDF0000041581CCEF1401820785818FE9BFFEBBC +:10EE00004BD8F0F900F85809CE501A9CF01F003B7F +:10EE1000581CCE01400820285818FE9BFFDC6C9E31 +:10EE20002F4EFCE80000212DFAE90024FCE8000840 +:10EE3000FAE9002CFCE20010FAE30034FCE80018C8 +:10EE4000FAE9003CFD3C0020FB6C0044FD38002149 +:10EE5000322AFB6800454AAB1A9CF01F002AF01FBB +:10EE6000002A2EED580CCB606C9A3FF8F53900C89B +:10EE7000F0091800CAF06008F51B00D4202D6C6C56 +:10EE8000500801C9BAC901D8BAD8F01F0020A56C32 +:10EE900049FB310A180B315CF01F00152FEDC9AB8F +:10EEA0004955EAF801AC5808C050EACCFE54F01FAE +:10EEB000001930CB300CF01F0018EB4C01AC189A45 +:10EEC00048D5580CFE90FF816338494B707928C9AA +:10EED000F01F00136A98ABB88B98C76B8001EF6C7A +:10EEE00080015D44800177A4800145C480014658BB +:10EEF00080015F44000087F480015F2800008C607F +:10EF00008002E736800189108001E33C00008B5CC1 +:10EF10008001D3A88001D8DC8001D3EC8001D158D6 +:10EF2000EBCD40E0206D300818991495502850081A +:10EF30001A9C1A965D191897C10140085808C040DC +:10EF40001A9CF01F0009402C580CC030F01F00071D +:10EF50000E9C2FADE3CD80E01A9C5D15581C5F0719 +:10EF6000CEDB00008001D3A8800091E858DCE08867 +:10EF700000035EFD49B8F00C032F49B8F0CCFFF454 +:10EF80005EFC4998F0CCFFE45EFC4978F0CCFFD4FD +:10EF90005EFC4958F0CCFFCC5EFC4938F0CCFFC495 +:10EFA0005EFC4918F0CCFF305EFC48F8F0CCFF1C4A +:10EFB0005EFC48D8F0CCFEF45EFC48B8F0CCFEBC59 +:10EFC0005EFC4898F0CCFE945EFC487C5EFC486891 +:10EFD000F0CCFFFC5EFC4848F0CCFE785EFC000004 +:10EFE0008003C01400000260483930089318930869 +:10EFF0005EFC000000008C844828700C5EFC000061 +:10F0000000008C84EBCD40C0487618976C1C580CDF +:10F01000C030F01F00060E9CF01F00058D1CE3CDD4 +:10F0200080C0000000008C8480018AD480018AECBA +:10F03000EBCD40C0487618976C0C580CC030F01FD0 +:10F0400000060E9CF01F00058D0CE3CD80C0000073 +:10F0500000008C8480018ABC80018B30D4211894FC +:10F060001696149530CCF01F00121897C1D03018A6 +:10F0700099069915F0060946EC0C1502F01F000CD4 +:10F080008F2CC0F05806E08A000B3009129A6E28C7 +:10F09000F009092A2FF91236FE99FFFB8907DA2AAF +:10F0A0000E9CF01F00043FDCD8220000800092007C +:10F0B000800091E8D4311893169214901291580C54 +:10F0C000C36078093018760CF0090945580CC390D4 +:10F0D000189468160A36C1A468075807C0606E48BD +:10F0E0000238C1B03FCCD832662CF8060327580747 +:10F0F000CF71ECC8FFFFF808002CC0582FF8190793 +:10F100005807CEE110960A38CFA5089CF01F0013CF +:10F1100030083FEC8508D832029A009C6E3BF01F05 +:10F120000010301C89166E088908D832760C580CED +:10F13000C040F01F000ADA3A66093018F0090945A4 +:10F14000308CF01F00081894C060850C30089918A6 +:10F150009908CC0BD8320000800091E8800091DC47 +:10F1600080009200D431109412907818409618952F +:10F17000169214910C9B780A089C5D181893318C98 +:10F18000F01F00131897C1F00C9CF01F00118F3C6A +:10F19000C170089B0C9AF01F000F30088F468F1229 +:10F1A0008F218F508F086A29F203002C78085808A5 +:10F1B000C0C0109970085808CFD19307DA3A0E9C56 +:10F1C000F01F00053FDCD8329907DA3A8000920040 +:10F1D000800091DC800091E8D431203D501C500B20 +:10F1E000149112921090580AC4307418009B740A3B +:10F1F000129C5D18A36C502C6228F00C0307580772 +:10F20000C3706E450A990035C3610E940E93C09881 +:10F210006E075807C2D008936E490A39C2C10E94CE +:10F220006E3B0A9A049CF01F00181896CF214019D3 +:10F230006E18930840086E2991098F1C8F2C6E3C24 +:10F24000F01F00128F468F3640296228F009000C0B +:10F2500078090E39EFF80000F9F80A00EFF810000D +:10F26000E7F81A000E9CF01F00092FDDDA3A3FEC98 +:10F270002FDDD8326E385808CFB00039CF903FCC50 +:10F280002FDDD8328000917C800091E8163C5E0C26 +:10F290007808971C990B97085808F1FB1A015EFC37 +:10F2A00078195809F9F81000F3F81A007808580886 +:10F2B000F1F91A013008990899185EFCD40149380F +:10F2C000FACEFFFC709CE21C0002C1D0209DFD3AEA +:10F2D0000021FB6A0021FCE80000FAE90000FCEADA +:10F2E0000008FAEB0008FCE80010FAE90010FCEA5C +:10F2F0000018FAEB0018FD380020FB680020F01F12 +:10F3000000042F7DD8020000000087F480015AA479 +:10F31000D4014898709CE21C0002C0C0300930CC77 +:10F32000EA1C4000303B129AF01F0004F01F00045A +:10F33000301CD802000087F4800186C88001875401 +:10F34000D4014898709CE21C0002C0C0300930DC37 +:10F35000EA1C4000303B129AF01F0004F01F00042A +:10F36000301CD802000087F4800186C880018754D1 +:10F37000D4014898709CE21C0002C0C03009310CD6 +:10F38000EA1C4000303B129AF01F0004F01F0004FA +:10F39000301CD802000087F4800186C880018754A1 +:10F3A000EBCD4080495818977098E2180002C04190 +:10F3B000109CE3CD8080F01F00126F38302911EAD5 +:10F3C000F20A1800C0D03009303B129A307CEA1C97 +:10F3D0004000F01F000CF01F000CE3CF90806E681F +:10F3E0005898CF213009303B129A30BCEA1C4000BB +:10F3F000F01F0004CF1B0000000087F4800158407C +:10F40000800186C88001875458DBE08A0012F939F0 +:10F41000000C3078F0091800E08B000C595BE08A92 +:10F420000008F939000E3AA8F0091800C0D05EFDB6 +:10F430003888F0091800CFC1F939000D38E8F00913 +:10F4400018005F0C5EFCF938000FF2081800CF01BD +:10F45000F93900103038F0091800CEA1F93900113F +:10F460003008F0091800CE41F93A0012F20A1800EB +:10F47000CDF1F9380013F4081800CDA1F9390014C2 +:10F480003888F0091800CD41F939001538E8F0093D +:10F4900018005F0C5EFCD7033019482891095EFC08 +:10F4A00000007A38EBCD40C0208D48D730088E0957 +:10F4B000F0091900C101E06AFFFF300B1A9CF01F30 +:10F4C00000091A9B302AFACCFFE8F01F00079A18AF +:10F4D0001A96AE088E0C2F8DE3CD80C000007A2ADC +:10F4E0008001C7B88001A498D401F01F00054858D6 +:10F4F000F139010B120C5C8CD80200008001F4A4DD +:10F50000000087F4EBCD4060208D306AFAC5FFE63D +:10F51000300B0A9CF01F00091A9CE06AFFFF300BB9 +:10F52000F01F00070A9C1A9B302AF01F00061A964B +:10F530009A1C2F8DE3CD8060800091D08001C7B8E8 +:10F540008001A444D43120DDFEF60234FACEFFA8B7 +:10F55000189516916C9C1494129310907C177C0251 +:10F56000E21C0002C0312F3DD832FEF802167009AD +:10F570005809C041FE7CFBB4CF7BECF8012458183D +:10F58000C041FE7CFC17CF0BECC9FFE85019129C60 +:10F59000F01F007D581CE08000E30D890D98F009F4 +:10F5A0001800E08200E6302CF01F0078E08000D2E6 +:10F5B0006CB850282FF88DB85807FBF91002EFF9F6 +:10F5C0001A00F01F0073C0E0029B0A9CF01F00713C +:10F5D000E08000C96C98EDB80006C0414E88402913 +:10F5E00091D9F01F006D6008EFDCB010F3D7C010A8 +:10F5F00050091039E08B006C0D882FF8AC880D99FC +:10F60000F0091800C061300A320C149BF01F00632F +:10F61000E8C800020E08FB58002EED38010B30043C +:10F62000FB680032400A300BFB640030FB640031A1 +:10F63000FB640033069CF01F005A069BFAC7FFF4D8 +:10F64000400A0E9CF01F0057300A0E9BFACCFFD2E6 +:10F65000F01F0055ED38010BF9D2C003BA78F01F46 +:10F660000053300CFB520028FB5C002AE041003EB6 +:10F67000E0880008EB39000C3888F0091800C2D087 +:10F680004028300A50980E9BFACCFFDCF01F00484F +:10F690004009ECCCFFE88109F01F0046F01F00464E +:10F6A0003008ED4C00CCED5800D04C49F30A014233 +:10F6B000F00A1900C0604B297298EDB8000EC031F5 +:10F6C000301CC52BF01F003E301CC4EBECCCFFE817 +:10F6D000F01F00383FFCC48BEB39000D38E8F0090F +:10F6E0001800CCF1EB39000E3018F0091800CC915D +:10F6F000EB39000F3038F0091800CC313028EB3BE3 +:10F700000012F00B18005F1A3FE8F00B18005F19A9 +:10F71000126AE80A1800CB51EB380013E218001DFA +:10F720005818CAF1EB380014E21800C85888CA917A +:10F73000189A31F9EA090708F4081800CA212FF9C4 +:10F74000E049003FCF81E0680400FB58002AC99BD4 +:10F75000401CF01F0018FE7CFAECC06BFE7CFC160F +:10F76000C03BECCCFFE8F01F00133FECCFDA401CAD +:10F77000F01F0010FE7CFB4FCF7A0000000087F4E2 +:10F7800000007A38800145DC80019F3080015F04F1 +:10F790008001F4088001F4E880014658800091D08F +:10F7A0008001C7B88001A4448001859C8001A49891 +:10F7B000800145EC800145C4000002608001FBFC33 +:10F7C000D401302CF01F0003300948389109D802C9 +:10F7D0008001A12800007A38D431FACD01385009CF +:10F7E000FACEFEA416971896FEFB031C14947C1305 +:10F7F0007C00F6F801245818C460FEFA030A749CD1 +:10F80000E21C0002C05118970E9C2B2DD832E068E4 +:10F8100000F8FAC5FEFCF5D7C0100C9B0A9C548872 +:10F82000549654A730025472F01F00B8FAC1FEE497 +:10F830000A9B029CF01F00B644C95879E08B00284F +:10F840003018F0090948E2180085C2104488FAC946 +:10F85000FFF45012502854D944D80A9B5478029C83 +:10F86000F01F00ACC1C1302744D95809CCE0FAC818 +:10F87000FFF41039CCA0FACCFECCF01F00A70E9CF0 +:10F880002B2DD83230270E9C2B2DD832448B300CA8 +:10F89000F01F00A2E08000B354DCCDFB44C9E04976 +:10F8A000003FE088000B300744B8EDB80007E08067 +:10F8B000009EF01F009BCD9BFEF80268F009032F0D +:10F8C000ECCAFFFC1588EC08000889080DD81589DA +:10F8D000400BEE0901093067F208010A970A44B8A3 +:10F8E000CE5B44B8F0C90001E0490097E088008988 +:10F8F000447CF01F008D44C8189A300944BC303B4A +:10F90000BFBCF9E8108CF01F0089F01F0085301B88 +:10F91000300CF01F008744B83027CC8B44B8E04847 +:10F920000082C090E08900A9E0480080C040E04823 +:10F930000081CEE10E9B0C9CF01F007ECE9B44B854 +:10F94000E0480082E08000C4E08900915978E080BE +:10F9500000C4E0480081CCD1029CF01F0077CD8B21 +:10F9600044B85808C7E144D65803EDF81000E7F84A +:10F970001A008C28A008FB1A0106445814088908AC +:10F98000FB190104F20A0105400A30EB95056807EE +:10F990000E9CF01F006AE08000AE4DB9F2F801D075 +:10F9A0005808E080009E0A9B0E9C5D18E08000993C +:10F9B00030270DE84D4BF768007B44B8C77B44B84F +:10F9C0005818CB90E0480080CA31CB5B447B44BCE4 +:10F9D000F01F005B44BCF8C800805818FE9BFF99DC +:10F9E000029B5C5CF01F0057C93B30084C69300B30 +:10F9F000B2A8169CF01F0054C5DB3FD7C06B4D3832 +:10FA0000F009032F029CF01F0052C82B029CF01F2C +:10FA10000051C7EB029CF01F0050C7AB029CF01FC7 +:10FA2000004FC76B029CF01F004EC72B029CF01FBB +:10FA3000004DC6EBF01F004C4B3AF54C00D4C68B82 +:10FA4000029CF01F004AC64B029CF01F0049C60BE7 +:10FA5000029CF01F0048C5CB447CF01F0047C58BBB +:10FA6000E0480081C1403027C21BF0C8008F5828F1 +:10FA7000FE9BFF40C4DBE0480084FE90FF5DFE95E6 +:10FA8000FF5BE0480085FE91FF44C55B49E91388B0 +:10FA900020185C58B28844D7C29049BB7698E218C7 +:10FAA0000040C20076D96E081039E088002944B8B9 +:10FAB000A7D854B85803F9B70003EFF81000E7F8D7 +:10FAC0001A00F9B70103FBF8104BCF0A447B32EC64 +:10FAD000F01F002AC1DB029CF01F0029C19B3047A8 +:10FAE000C69B0FD8F768007ACE3B302CF01F00255C +:10FAF000CD5BF01F0025CF403FE7C5CBF01F0023B3 +:10FB0000CD7B0000000087F48001C7B88001BF10E2 +:10FB10008001BF448001D3A88001D8DC80018754D4 +:10FB20008003C04C8001870C800186C880016A88F0 +:10FB3000800237E8800208948001F4088001708C0C +:10FB40008001725480018CE48003C14C8002084023 +:10FB50008002085880020864800208708002087CD5 +:10FB600080020888800145C48002084C8002083465 +:10FB7000800209B48001DA3480016D6C8002094092 +:10FB80008001A12880015F048001F310EBCD406863 +:10FB90003006493C1AD61AD649250C9899064929A7 +:10FBA000492A302B0A9CF01F001249231AD60C98C0 +:10FBB0001AD60699490A303BEACCFFFCF01F000C2C +:10FBC0000C981AD606991AD6EACCFFF848BA305BD8 +:10FBD000F01F0007301C2FADE3CD806800007A389D +:10FBE00000007A2C8001F4988003C3AC80016EB8C9 +:10FBF0008001F7C08003C3C48003C3E05EFCD70369 +:10FC0000EBCD40E0203D1897580CC1F07938707A60 +:10FC100094D9EDB90001C1D04C166C785828C15068 +:10FC20000E9CF01F0040C110ED3900943FF8F00920 +:10FC30001800C1405017FACAFFFC1A9BFACCFFF615 +:10FC4000F01F0039581CC180301C2FDDE3CD80E04F +:10FC50004B366C785818CE51CF8B202D306A1A9CB9 +:10FC60004AFBF6CBFF4AF01F0031F01F00312FEDA9 +:10FC7000580CCEB1CE0BFAC5FFF5400A401B0A9CCA +:10FC8000F01F002C581CCE113079FB38000BF20805 +:10FC90001800C35140187139727A94D8EDB8000435 +:10FCA000CD404A5AF4F801045818C3206DE85808AA +:10FCB000C1D1ED3B008049AA580BC2806F387079E2 +:10FCC000F5380081F33C005EF8081800C1F0F4CA72 +:10FCD000FF7E3009C0581538F8081800C0402FF9C9 +:10FCE0001639CFA516395F0CCB1B48D973F85808C5 +:10FCF000CE10F4F801AC5808CDD1CA7B0A9CF01F95 +:10FD0000000FF01F000FCA10CCDB3009CECB3059EA +:10FD1000FB38000BF2081800C981CC9B0000026080 +:10FD2000800189D080017C448002E736800188B060 +:10FD300080017EE0000087F480017BD880017C1088 +:10FD4000EBCD40E048D818961695F0F700F058072C +:10FD5000C0E00E9CF01F000AC0715806C0A00E9CA7 +:10FD60000A9B5D16C0606E075807CF41E3CF80E065 +:10FD70000E9CE3CD80E00000000087F48001FC00D1 +:10FD8000D401F01F0002D80280021500EBCD40F82C +:10FD9000204DE0683100EA18312EE069312EEA1971 +:10FDA000322E306CFAE90000F01F00631894E080F6 +:10FDB00000B9303CF01F00611896301CF01F005F46 +:10FDC000306A202D189B18951A9CF01F005DF01FBB +:10FDD000005D2FED580CE080008732B80A9C1AD8DD +:10FDE000308930084D8A306BF01F00582FFD1A9370 +:10FDF000ECFC00D8F01F0056ECFC00DCF01F0055B6 +:10FE0000ECFC00E4F01F0054ECFC00E8F01F005391 +:10FE1000ECFC00ECF01F0052ECFC00F0F01F005175 +:10FE2000ED3C00B7F01F00506DC85808F9B801014B +:10FE3000EDF81A1BED3C006FF01F004CECFC012CA0 +:10FE4000F01F004BF01F004BF01F004BF01F004B4A +:10FE5000F01F004BECF800F85808C6616D084C978D +:10FE6000EF4800D8ECFC0130F01F0047300830A903 +:10FE700032B54C6A1AD5E06B0080EECCFED8F01F8C +:10FE80000033EEC6FE58304A300B0C9CF01F004089 +:10FE900030081AD530594BFA0C9C304BF01F002B10 +:10FEA0004BD82FEDF10A01423009F20A1900C26065 +:10FEB0006E99EDB9000EC201A7B930688F9950381C +:10FEC0001A9CFAC8FFF8FAC9FFF4089A308BF01FA1 +:10FED00000331897581CC140089CF01F00312FCDEB +:10FEE000E3CF80F8189A0A991A933068308B1A9CDD +:10FEF000F01F002CC7EBF01F002C6E99CDEB089C77 +:10FF0000F01F00273009303B129A311CEA1C4000D8 +:10FF1000F01F0026F01F00260E9C2FCDE3CD80F8A9 +:10FF20002FCDE3CD80F8300A301B149CF01F002148 +:10FF3000C96B0000800092008001EF6C8002E73600 +:10FF4000800188B08003B804800176C480020594E3 +:10FF500080020538800204DC8002048080020424D0 +:10FF6000800203C8800202F880020374800202D477 +:10FF70008002078C800168AC8002017080020EFC58 +:10FF8000000087F48002031C8003C400800091D02D +:10FF90008003C40C00000260800174C8800091E8F6 +:10FFA0008001776C8001FBFC800186C8800187544A +:10FFB00080020B34EBCD406830094AF63068ACA9BA +:10FFC000AC893129314AAC988D99300530130A9BA0 +:10FFD000ED4500ECED4500E88DA58DC5ED550040E3 +:10FFE000ED550042ED55004EED4500D88DB3ECCCFB +:10FFF000FEF0F01F0022ED450124F01F0021ED5519 +:02000004800278 +:1000000000D0ED4C00CCED5500D249ECF01F001EA5 +:10001000F01F001EED4501B8F01F001DF01F001D70 +:10002000F01F001D0A9BECCCFF48F01F001C0A9B30 +:10003000ECCCFF44F01F0019069BECCCFF40F01FF6 +:100040000017069BECCCFF3CF01F0014ED4300446E +:10005000F01F0013F01F001330DCF01F0013F93CF9 +:10006000000FF01F0012F01F0006ED4C01CC069CA3 +:10007000E3CD8068000087F4800091D0800145C402 +:10008000000084CC80017B24800237D080016CDCAE +:100090008001FB8C8001EFE8800144F8800187C873 +:1000A000800205EC8001EF6C800202B8EBCD40606D +:1000B000E06A01F8300B49D518960A9CF01F001C25 +:1000C000F01F001C0C9CF01F001CEACCFFF4F01F7A +:1000D000001BEACCFFE0F01F0019EACCFFF0F01F94 +:1000E0000017EACCFFECF01F0016EACCFFE8F01F87 +:1000F0000014EACCFFE4F01F0012300930DC1AD9FA +:100100001298129A129BF01F000FF01F000FF01FA1 +:10011000000FF01F000FF01F000FF01F000F301C2A +:100120002FFDE3CD80600000000087F4800091D0B7 +:1001300080016F4880021124800145D6800145F27C +:100140008002067C80014690800149B88001804091 +:1001500080015F98800201584848300A4849911848 +:10016000910A930A5EFC000000007A3C00007A4489 +:10017000D421219D4A846808F3D8C001FB6900633B +:10018000E2180002C14030183005FB6800634A3CA9 +:10019000F01F00233018189BFAC9FF9D300A49FC54 +:1001A000F01F0020581CC2802E7DD8225809C1C0E3 +:1001B000109549D870065806CEB0EA050019FA091C +:1001C00000170C9B0E9C306A2FA72FF5F01F00170D +:1001D0006C265806CDD05905CF516808F1D8C0011A +:1001E000F0051700CD5B306AE06B00FF1A9C3015FC +:1001F000F01F000FCDFB48FCF01F0009EA050018B6 +:10020000189BA1781A99300A48ACF01F00062E7D81 +:10021000D822000000007A448003C414800091B802 +:100220008001776C00007A3C800091DC800091D0E6 +:100230008003C41CD40148697208104C930CEDBCB7 +:100240000002C021DA0AF01F0003D80200007A443D +:1002500080020170EBCD408048C76E095809C1305B +:10026000722A580AF3F80003EFF80A01F3F81003B2 +:10027000F5F81A037238129C910AF01F00056E09F6 +:100280005809CEF1E3CF908000007A3C800091E8DD +:10029000D401F01F0007581CC020D802485972082A +:1002A000EDB80002CFB0F01F0004D8028002025463 +:1002B00000007A4480020170F8C900013058F0094A +:1002C0001800E08B00054838B09C5EFF3FCC5EFC18 +:1002D000000087F4D401201DFAC9FFFC12DC1A9932 +:1002E0003048300A307B483CF01F00032FFDD80215 +:1002F0008003C43C8001776CD401201D3018BA8C77 +:100300001A99300A306B484CF01F0004581C5F0CDF +:100310002FFDD8028003C45C8001776CEBCD406870 +:10032000201D48F61893FAC5FFFC2F060AFC0C9C0A +:10033000F01F000C303CF01F000CF94301300C9C06 +:10034000F01F000A0A993018300A307B488CF01FE1 +:100350000009581C5F0C2FFDE3CD8068000087F476 +:10036000800145FC8001EF6C800145FE8003C46C78 +:100370008001776CEBCD4040201D48E6BA8C2F06FB +:100380000C9CF01F000D303CF01F000C1B88F9483E +:10039000006C0C9CF01F000A30181A99300A309B30 +:1003A000488CF01F0009581C5F0C2FFDE3CD8040E6 +:1003B000000087F4800145FC8001EF6C800145FE60 +:1003C0008003C4748001776CEBCD4068201D1898C1 +:1003D0005CB81895FAC3FFFC48D606D82F060C9CCB +:1003E000F01F000C303CF01F000CF94500F00C9C95 +:1003F000F01F000A1A993048300A309B488CF01FD1 +:100400000009581C5F0C2FFDE3CD8068000087F4C5 +:10041000800145FC8001EF6C800145FE8003C480B3 +:100420008001776CEBCD4068201D18985CB818955A +:10043000FAC3FFFC48D606D82F060C9CF01F000C10 +:10044000303CF01F000CF94500EC0C9CF01F000A3A +:100450001A993048300A309B488CF01F0009581C0C +:100460005F0C2FFDE3CD8068000087F4800145FC20 +:100470008001EF6C800145FE8003C48C8001776CA5 +:10048000EBCD4068201D18985CB81895FAC3FFFCA6 +:1004900048D606D82F060C9CF01F000C303CF01FED +:1004A000000CF94500E80C9CF01F000A1A9930482E +:1004B000300A309B488CF01F0009581C5F0C2FFD40 +:1004C000E3CD8068000087F4800145FC8001EF6C7B +:1004D000800145FE8003C4988001776CEBCD4068B5 +:1004E000201D18985CB81895FAC3FFFC48D606D8AA +:1004F0002F060C9CF01F000C303CF01F000CF9453F +:1005000000E40C9CF01F000A1A993048300A309B16 +:10051000488CF01F0009581C5F0C2FFDE3CD80684C +:10052000000087F4800145FC8001EF6C800145FEEE +:100530008003C4A48001776CEBCD4068201D18981F +:100540005CB81895FAC3FFFC48D606D82F060C9C59 +:10055000F01F000C303CF01F000CF94500DC0C9C37 +:10056000F01F000A1A993048300A309B488CF01F5F +:100570000009581C5F0C2FFDE3CD8068000087F454 +:10058000800145FC8001EF6C800145FE8003C4B012 +:100590008001776CEBCD4060201D48F5BABC2F057B +:1005A0000A9CF01F000E303CF01F000DFAC6FFFC45 +:1005B0000D78F94800D80A9CF01F000A0C993018F1 +:1005C000300A306B488CF01F0009581C5F0C2FFD5F +:1005D000E3CD8060000087F4800145FC8001EF6C72 +:1005E000800145FE8003C4BC8001776CEBCD40C028 +:1005F000206D49EC3008F939010DF93B010850082C +:1006000050281AD9F93A010C1ADAFAC7FFF8F93961 +:10061000010AF93A01090E9CF01F00152FED580C44 +:10062000C10140085808C0401A9CF01F0012402C1D +:10063000580CC040F01F0010300C2FADE3CD80C02F +:100640001A9CF01F000E400818965808C0401A9CCB +:10065000F01F0008402C580CC030F01F000758163F +:100660005F0C2FADE3CD80C0000087F48001DAE499 +:100670008001D3A8800091E880018E9CD4214C0792 +:10068000405EEF6C0108EF6B0109EF6E010D1495F0 +:100690001294109A3019F2081800C120EEF801B037 +:1006A0005808C3D05828C4C04B5CEF3B01B5338811 +:1006B000F00B1800C5403398F00B1800C440EF6AE7 +:1006C000010CF01F0030EDDCB010F01F002F0C0CFF +:1006D0005C5C5805C1E11895F01F002A1815EF65FC +:1006E000010AF01F0029EDDCB010F01F00260C0CF1 +:1006F0005C5C5804C3F11894F01F00221814EF64D6 +:10070000010B6E98EDB80001C031F01F0020DA2A0D +:10071000EA0C1800FE98FFE23FCCD822EF3901B571 +:100720003348F0091800CC11EF3901B63418F0093C +:100730001800FE98FFC630E8EF68010CCC3BEF696B +:10074000010CCC0BEF3901B63408F0091800FE9803 +:10075000FFB8301948A8F169010CCB4BF93901B643 +:100760003408F0091800FE98FFA835A8F968010CB4 +:10077000CA9BE80C1800FE9BFFD1CBFB000087F45E +:100780008001F4A48001F504800205ECEBCD40E08B +:10079000303CF01F002330CB18954A26300CF01F58 +:1007A0000022ED4C01AC1897C360303BF01F001FD6 +:1007B0008F2CECF901AC72275807C2903078300BBF +:1007C000B2883068ECFA01ACB498ECF901ACB2AB89 +:1007D000ECF801ACB0BBECF901ACB2CBECF801AC7D +:1007E000EB390075702AB489ECF801ACEB39007470 +:1007F000702AB499ECF801ACEAFB00847029B2AB22 +:10080000ECFC01ACF01F000AE3CF90E0ECCCFE540E +:10081000F01F00080E9CE3CD80E000008001EF6C2B +:10082000000087F48001D8DC8001D3EC800208D47A +:100830008001D3A8D401F01F0002DA0A8001DA5641 +:10084000D401F01F0002DA0A8001DF30D401F01F6A +:100850000002DA0A8001DBE8D401F01F0002DA0AA4 +:100860008001DC04D401F01F0002DA0A8001DC20E0 +:10087000D401F01F0002DA0A8001DC3CD401F01F31 +:100880000002DA0A8001DC58D401F01F0002DA0A03 +:100890008001DC74D401201D1A9BF01F000CC09055 +:1008A00040085808C06048AA7499EDB90000C030EB +:1008B0002FFDDA0A1298A1C831CC9598300A149B02 +:1008C000F01F00042FFDDA0A8001D98C000087F4A4 +:1008D00080014658EBCD40C0206D4958189B709C54 +:1008E000E21C0002C06118970E9C2FADE3CD80C0C2 +:1008F00030081A96502850081A9CF01F000EC1119B +:10090000189740085808C0401A9CF01F000B402C54 +:10091000580CCEB0F01F00090E9C2FADE3CD80C067 +:100920001A9C3017F01F0006CEDB0000000087F491 +:100930008001DED08001D3A8800091E880018E9CE8 +:10094000EBCD4080201D300A1A9BF01F0017C0F02D +:1009500040085808C0F149576E99EDB9000BC071B5 +:10096000EEF801A84917F1D8C001C1212FFDE3CF4E +:10097000908048E76E99EDB90000CF01A1C9300A17 +:100980008F9931CC149BF01F000A6E99CE7BEEFC40 +:1009900001ACF01F00086E98301CABD88F982FFD6B +:1009A000E3CD80808001ED10000087F4800146587F +:1009B000800208D4D401F01F0002DA0A8001DBD0E3 +:1009C000EBCD40FC206D4A5318951097169266980F +:1009D0001496109C1294E21C0002C2D05BF5C30175 +:1009E000303CF01F001F300BF3D7C010F5D4C010FF +:1009F0001AD90C981ADAF3D2C010504B502BFAC601 +:100A0000FFF8F93B00F70A9A0C9CF01F00162FED37 +:100A1000580CC1B1189740085808C0401A9CF01FE4 +:100A20000012402C580CC030F01F00100E9C2FAD4F +:100A3000E3CD80FC18970E9C2FADE3CD80FCEDB884 +:100A40000000CCF13FB7CF3B6698A1A81A9C8798CD +:100A50003017F01F0007CE0B000087F48001EF6C09 +:100A60008001DB588001D3A8800091E880018E9C32 +:100A7000D40130085C7B1099109AF01F0002D80254 +:100A8000800209C0D4013008364B1099109A109C8E +:100A9000F01F0002D8020000800209C0EBCD40E048 +:100AA00020AD3006507CFB6B00201497500650267A +:100AB0001A95FACAFFDCFACBFFE81A9CF01F00195E +:100AC000C111189640085808C0401A9CF01F001623 +:100AD000402C580CC030F01F00150C9C2F6DE3CD3E +:100AE00080E05807C09040980E9B0C9C8F28F01F08 +:100AF0000010581CC0611A9C3016F01F000ECE3B2F +:100B000040085808C0401A9CF01F0007402C580CA1 +:100B1000C0313FD6CE3BF01F00053FD6CDFB0000D5 +:100B20008001DC8C8001D3A8800091E880016C40BA +:100B300080018E9CD401F01F0002D80280020A9C22 +:100B4000EBCD40E0209D3018189A1697F00C09481C +:100B50004A5B7609F1E9000CC06118970E9C2F7D65 +:100B6000E3CD80E0F00811FF12683006507A970854 +:100B7000500650261A95FACAFFE0FACBFFE81A9CF5 +:100B8000F01F001AC1E05807C09040880E9B0C9CD3 +:100B90008F28F01F0017581CC1611A9C3017F01FD6 +:100BA000001540085808C0401A9CF01F0013402C44 +:100BB000580CCD50F01F00110E9C2F7DE3CD80E02E +:100BC0001897CF0B40085808C0401A9CF01F000A25 +:100BD000402C580CC0313FD7CC2BF01F00083FD71A +:100BE000CBEB000000007A4C8001DCEC80016C4013 +:100BF00080018E9C8001D3A8800091E8EBCD40F865 +:100C0000216DFAC6FF901897FB69000EFB68000F74 +:100C1000FB6B0010FB6A00116CF46D036D15ECCCDE +:100C2000FFD4F01F0038306ABA6CECCBFFDCFACC92 +:100C3000FFEDF01F00350D88FB6800190D99ECCB16 +:100C4000FFFEFB69001A320AFACCFFE5F01F002E06 +:100C50004AEE30097C0B301CF809094AF5EB000814 +:100C6000C0902FF95899CF9130060C9C2EADE3CD52 +:100C700080F8F7EA10089D085BF9CF705024FB63F9 +:100C8000001250195807EFF91A003006FAC7FFC4CE +:100C900050F65116FACAFFAC1A9B0E9CF01F001CAE +:100CA000C111189640F85808C0400E9CF01F00195A +:100CB000411C580CCDB0F01F00180C9C2EADE3CD9C +:100CC00080F85805C09041580A9B0C9C8B28F01F57 +:100CD0000013581CC0610E9C3016F01F0011CE3B53 +:100CE00040F85808C0400E9CF01F000A411C580CE8 +:100CF000C0313FD6CBBBF01F00083FD6CB7B0000F6 +:100D000080018058800091DC00007A4C8001DD4C2D +:100D10008001D3A8800091E880016C4080018E9C06 +:100D2000D42120DD4B0510946A0E4126F1DEC0016E +:100D3000C0B0EDBE0001C411EDBE0002C411300709 +:100D40000E9C2F3DD82210973018FB6B002A508A3A +:100D50005077FDE8100850998B08FB540028580C78 +:100D6000F9F71A001A953007FACAFFD05007502732 +:100D7000FACBFFE81A9CF01F001DC101189740082C +:100D80005808C0401A9CF01F001A402C580CCD90F7 +:100D9000F01F00180E9C2F3DD8225806C09040C866 +:100DA0000C9B0E9C8D28F01F0014581CC0C11A9C6F +:100DB0003017F01F0012CE4B30173028CC7B302775 +:100DC0003048CC4B40085808C0401A9CF01F00081F +:100DD000402C580CC0313FD7CB4BF01F00063FD7FB +:100DE000CB0B000000007A488001DDAC8001D3A865 +:100DF000800091E880016C4080018E9CEBCD40E04A +:100E0000207D300616975006189B50261A95FACA70 +:100E1000FFE81A9CF01F001AC111189640085808E4 +:100E2000C0401A9CF01F0017402C580CC030F01F17 +:100E300000160C9C2F9DE3CD80E05807C1904068C0 +:100E40000E9B0C9C8F28F01F0011581CC1104008ED +:100E50005808C0401A9CF01F000B402C580CC0D002 +:100E6000F01F000930060C9C2F9DE3CD80E01A9CFA +:100E70003016F01F0007CD3B1896CDCB8001DE0C5D +:100E80008001D3A8800091E880016C4080018E9C95 +:100E9000D40120CDFB5A0012FB590014FACAFFCC32 +:100EA000502874197408FB590016501874397428A6 +:100EB000FB59001AFB580018745974485039FB58F4 +:100EC000001C74797468FB590020FB58001E74994B +:100ED000748850A95098300974A8FB6C0022FB5B01 +:100EE0000010FB68002C74BBFB6900231A9CF01FE8 +:100EF00000032F4DD802000080020DFCEBCD40EE28 +:100F000020CD3FF94CC850A950B94CC93005303CF0 +:100F100091059305F01F004A322A18961A971A9CD9 +:100F20000A9BF01F0048FAC3FFDE306AE06B00FF47 +:100F3000069CF01F00441AD5ED38004F1AD86D28D2 +:100F40001AD86D191AD9ED1800361AD8ED190032D1 +:100F50001AD96CE81AD8ED19002E1AD9ED18002A02 +:100F60001AD8ED1900261AD9ED1800221AD86C6982 +:100F700030BB1AD9301C6D08ED1900FEED3A001F88 +:100F8000F01F0031ECFB01282F4DF6C80001581866 +:100F9000E0880045ED3100F7ECCAFF8C30153006D3 +:100FA0001AD61AD540D81AD8F4E80000206D069B4E +:100FB000FAE900081A9CF4E20008306AFAE300102B +:100FC000F01F0022EF380021209DFB680021EEE891 +:100FD0000000FAE90000EEE20008FAE30008EEE89B +:100FE0000010FAE90010EEE20018FAE30018EF38FA +:100FF0000020029BFB6800200A990C98FACCFF9015 +:10100000303AF01F00130C9A2EED0C9B40ACF01FF1 +:1010100000110A9C2F4DE3CD80EE1AD50A98FACC28 +:10102000FFD05C5B0A99FE7AFF6AF01F000B2FFD70 +:10103000CB2B000000007A4C00007A488001EF6C56 +:10104000800091D080020E908002E73680020BFC77 +:1010500080020A9C80020D20D431202D500B189163 +:101060004A1776026E9CE21C0002C350304C5011AD +:101070005801E2021700F01F001DEEF700F0189073 +:101080005807C2D030043013C0A82FF45802C1B1A1 +:101090005801F9B301FF5805C1100A9760B66E05F3 +:1010A000F01F00130C9A189B0E9CF01F0012CEE04C +:1010B0000E9CF01F00115805CF114008069C9104AA +:1010C0002FEDD83240182012110C0E9B5018F01F33 +:1010D000000BCE2B1893069C2FEDD8320E943013B4 +:1010E000CEDB0000000087F48001EF6C800145C476 +:1010F000800159A080015CDC800184284828F0FC34 +:1011000000F85EFC000087F4486871195879F9B856 +:101110000001F9F80A00F9B80100F9F81A005EFFB9 +:10112000000087F44828F14C007C5EFC000087F446 +:101130004828F14C01D05EFF000087F4EBCD40C0A1 +:1011400018971496E04A0020E088000830083FF91C +:10115000B898B889E3CF80C02FECF01F00043008A6 +:10116000AE96AE88E3CF90C0800091DCEBCD40FC22 +:10117000206D18941695F01F00431897C1A0F939F7 +:1011800000CC3FF8F0091800C3910896EF3900A889 +:101190003FF8F0091800C5414BB8F0F700F85807C0 +:1011A000C0A1EC040104301C8B042FADE3CD80FC06 +:1011B0000896CF3BE06AFFFF300B1A9CF01F00330C +:1011C0006F38302A707C1A9B2F4CF01F00311A9216 +:1011D0006A0A9A93063AC0442FADE3CFC0FC0C9B39 +:1011E0001A9C5C7AF01F00296F380606707C1A9BE7 +:1011F0002F4C300AF01F0026CD5BE06AFFFF300B5A +:101200001A9CF01F0022302AEEC2FF341A9B049C65 +:10121000F01F00201A966A0A9A93063ACDE55C7A86 +:10122000089B1A9CF01F00191A9B049C300AF01F9F +:1012300000196A08E803000606188B08CA8BE06AE2 +:10124000FFFF300B1A9CF01F0011302AEEC7FF5829 +:101250001A9B0E9CF01F00101A926A0A9A93063A83 +:10126000CBC50C9B5C7A1A9CF01F00081A9B0E9C45 +:10127000300AF01F00096A08060606188B08C8DB4A +:101280008001EFF8000087F48001C7B88001D344E3 +:101290008001D6B08001D558D401F01F0002D802D9 +:1012A00080015D18EBCD40F8FACD00803225149313 +:1012B00018941297BA85FAC6FFFF0C9CF01F001B0A +:1012C000300806063019AC85AC981A951A9A498BE5 +:1012D000089CF01F0018C0503FFC2E0DE3CD80F895 +:1012E0000E9CF01F0015E04C0040C1701AD7493A1F +:1012F000E06B00800A9CF01F00120A9A3019491B0B +:10130000089CF01F000C2FFD1897580CCE61089C0C +:10131000F01F000D0E9CCE2B0E9A089C3019489B96 +:10132000F01F0004CDB0CD9B800091DC8003C4FC95 +:1013300080023BB8800091B8800399D0800091482A +:101340008003C50480024328D421210D300B4B6655 +:10135000169CF01F00368D0CC2B078075807C2A04B +:101360006F985808C2704B283014EF4400641A95E7 +:10137000340B1AD84AFA0A9CF01F002F08990A9ACF +:101380004AEB0E9CF01F002E2FFD580CC2506C082B +:10139000700CF01F002C6C09300893086C08700961 +:1013A0004A98722A910A6C09300893486C0C2F0DE8 +:1013B000D822F01F00261897CF70F01F00254A583A +:1013C0004A59118A4A5B0E9CF01F0025C2056E29FE +:1013D00049D89109CE9B08994A2A4A3B0E9CF01F96 +:1013E0000018C1C14A18340B1AD8492A0A9CF01FA8 +:1013F000001208990A9A49EB0E9CF01F00112FFD6C +:10140000580CC0C13088EF480054CC9B0E9CF01F94 +:10141000000D6C0930089308CC7B0E9CF01F00096E +:10142000CB7B000000008C8C80023B4C8003C50805 +:10143000800399D0800091488003C4FC80023BB8AF +:1014400080024190000003FC80024F4080023B225A +:10145000000004000000042800000404800212A41C +:101460008003C5108003C5148003C5188003C538E8 +:10147000D421169849871495189B109A49740E9C8C +:10148000A888F01F00170A9B30064965EF66002008 +:10149000341A0A9CF01F001449484959EB66004071 +:1014A000700B720CF01F00131896C0C0F01F0012D2 +:1014B0000A99098A0E9B0C9CF01F00106D185808A1 +:1014C000C021D822ECCAFFDC0A9C3209341BF01F71 +:1014D000000CD8220000040400000400800091DC0D +:1014E00000000428800091AC000003FC00008C8CFC +:1014F00080023B0680023B22800212A480023A68EE +:10150000D421210D328A300B1A9CF01F00301A9C16 +:1015100030073014504750544AD5F01F002E8B0C22 +:101520001A96C4A0FAC6FFD8318A0E9B0C9CF01FF5 +:1015300000274A984A990C9B50E850A96A0CF01F62 +:1015400000281896C3B04A7CF01F00274A761AD7A5 +:10155000304B1AD70E984A694A6AEC0B000CF01F00 +:1015600000260E981AD74A591AD74A5A302B0C9C83 +:10157000F01F00210E981AD74A291AD74A2A311B80 +:10158000ECCCFFF8F01F001C0E981AD749F91AD7B7 +:1015900049FA312BECCCFFF4F01F00170E982F8D79 +:1015A000ECCCFFF01AD749B91AD749BA315BF01F12 +:1015B0000012089C2FED2F0DD8226A0CF01F001787 +:1015C0000C9C8B06CF9B0000800091D000007A50CD +:1015D00080022B4C8003C5448003C54C80022C0440 +:1015E000800216FC8002113000007A5480021670CE +:1015F0008003C55480016EB8800217408003C3ACDD +:10160000800216C48003C5708002168C8003C58CCE +:101610008002161C8003C5A480022AF8EBCD40C0CE +:1016200021AD189798E8EDB80000C181368A300BDB +:101630001A9CF01F000C306A0E9B1A9CF01F000AC7 +:101640006E2830195C3850395028488870091A962D +:101650001A9A720C306BF01F00062E6DE3CD80C01D +:10166000800091D0800091DC00007A508002792CBB +:10167000D40148587009300A720C301BF01F000367 +:10168000D802000000007A508002792CEBCD404057 +:1016900021AD368A300B1A9CF01F000830084889AB +:1016A000500872081A961A9A700C302BF01F000519 +:1016B0002E6DE3CD80400000800091D000007A5074 +:1016C0008002792CEBCD404021AD368A300B1A9C3C +:1016D000F01F000830184889500872081A961A9AA4 +:1016E000700C302BF01F00052E6DE3CD8040000004 +:1016F000800091D000007A508002792CD401487883 +:10170000700EF6C9000E189AF8CBFFFA2F2A7C0C3F +:10171000F01F0003DA0A000000007A50800224E083 +:10172000D401580CC051304CF01F0004D802304C8A +:10173000F01F0003D80200008001A12880019F3023 +:10174000EBCD40E0FACD0170FACCFE98F01F001905 +:10175000581CC22145A85818E088001FE068010005 +:10176000FACBFE901A9C16D8F01F00131A95189603 +:10177000FAC7FF00368A300B0E9CF01F0010581677 +:10178000C11048F870090E9A720C300BF01F000D52 +:101790002A4DE3CD80E0300CF01F000B2A4DE3CD45 +:1017A00080E045B85808FE9AFFEE540D5418CEABB1 +:1017B00080015F448002116C800091D000007A505B +:1017C0008002792C80021720000000000000000039 +:1017D000EBCD40C0F8F800D418971696F0F80088C2 +:1017E000F8FA00E85808C040F8FC00C45D185876C4 +:1017F000C1A058065F0858365F091248C11030185A +:10180000EF4800ECEEF900D473985808C050300B44 +:10181000EEFC00C45D18EF4600E8E3CD80C05846FA +:10182000CEF0CFABEEF800EC5808CF603008301B9C +:10183000EF4800ECEF4B00F0EEF800D47198580838 +:10184000CE81CEABD401F01F0002D802800217D0A7 +:10185000F8FC00E85EFCD401F8F800D471A8580840 +:10186000C050F8FC00C45D18D802109CD802D40106 +:10187000F8F800D471185808C050F8FC00C45D187E +:10188000D802DC0AD401F8F800D471285808C050F6 +:10189000F8FC00C45D18D802DC0AD703EBCD408009 +:1018A0003008F8F90108F94801085809C031C08822 +:1018B0000E997207129CF01F00045807CFA1E3CDC8 +:1018C00080800000800091E8D401F8FC00DCF01F6B +:1018D0000002D8028002B4A4D401F8FC0090F01FEA +:1018E0000002D80280023B8CD401F8FC0090F01F6B +:1018F0000002D80280023C84EBCD40C01696F8F777 +:1019000001085807C051C0B86E075807C080EECC18 +:10191000FFFC306A0C9BF01F0004CF710E9CE3CDDE +:1019200080C000008000917CD4011699F8F801185D +:101930005808C0A1F8F800D470285808C0C0F8FCB6 +:1019400000C45D18D802F8CBFF64306A129CF01F07 +:101950000003D80ADC0A0000800091DCEBCD40F8DF +:1019600020AD1897F8F801185808C06030070E9C91 +:101970002F6DE3CD80F8F8F800D470385808CF7098 +:10198000F8FC00C41A9B1A935D181895CF05EEF861 +:1019900001185808C431EEF800D470285808CE70E9 +:1019A000FAC4FFE0EEFC00C4089B5D18CE05EEFC17 +:1019B000009078465806C301EEF800D45808C2C01B +:1019C000700C49BBF01F001BEFFC0024F9B60001AE +:1019D000EFFC102478075807C111CCAB5806C0B0F3 +:1019E0006E885808CC50EECBFFE8306A089CF01F98 +:1019F0000012CBE06E075807CBB0EEF80194580800 +:101A0000CFA16E581035CEB16E4B0A9A1A9CF01FBA +:101A1000000ACE70CE4B3006CDEBFAC4FFE0306A40 +:101A2000EECBFF64089CF01F0005CC2B8003C65C46 +:101A3000800091A08000917C800091DCD401F01F97 +:101A40000002D8028002195CD42120AD3008FB5876 +:101A50000024508816961897F6F801845818C0404C +:101A60003FFC2F6DD82277185808CFB0F8F500B892 +:101A70005885C2205905CF512DCB0A9A1A9CF01FC8 +:101A800000171A940A9A303BEEFE00D47C5858088E +:101A9000CE801ADA1AD43009EF490104EEFC00C4F2 +:101AA00030681AD8FACAFFD430181ADA48CA7C56F5 +:101AB0005D162FCDCD7B2DCB318A1A9CF01F0007F0 +:101AC0000A9AECCBFFCCFACCFFE8F01F00041A9482 +:101AD000320A302BCDAB0000800091DC80039C38B3 +:101AE000D42118951696F01F000F1897C05078381B +:101AF0002FF89938D82A310CF01F000B1894C0F039 +:101B00000C9B306A2FCCF01F000930188938EAF995 +:101B100001088909EB4401080E9CD822DC2A000048 +:101B2000800218F880028F24800091DCEBCD40FC0D +:101B3000EDD9C010407218941693ECCCFFFC1495AC +:101B4000910CF01F00161897C190E8F800907039BA +:101B5000EC081608B893B889B8B6B8A85805C100FB +:101B60000C9A0A9BF8C6FFFC0C9CF01F000D0E9C03 +:101B70005802E5F61A00E3CD80FCE3CD80FC0C9A18 +:101B80000A9BF8C6FFFC0C9CF01F00060E9C580236 +:101B9000E5F61A00E3CD80FC80009200800091DC25 +:101BA000800091D0D401401E5C791ADEF01F000243 +:101BB0002FFDD80280021B2CEBCD40F8203DF8F819 +:101BC00000BC1493129458485F0A58285F0918976C +:101BD00016961449C0603FF70E9C2FDDE3CD80F8C8 +:101BE000F8FC00DCF01F002BC0305816CF50EEC5BB +:101BF000FF64306A4A8B0A9CF01F0028C0D1EEF8BF +:101C000000D470285808C060EEFC00C41A9B5D1810 +:101C1000C370EEC5FF043008F7D6C0081AD8F3D455 +:101C2000C010FAC8FFF4069A0E9CF01F001D2FFD8D +:101C30001896580CCD1040296E2C580CC1001298E3 +:101C40000A9B0C99E06A888EF01F001618970C9C6E +:101C5000F01F00150E9C2FDDE3CD80F8EEF800D4C8 +:101C600071845804C0B01298EEFC00C40A9B0C9911 +:101C7000E06A888E5D141897CEBB3FF7CE9B306A22 +:101C8000485B1A9CF01F0005CC501A95CC5B0000F5 +:101C900080028F78800217C88000917C80021B2C04 +:101CA00080028154800091E8EBCD40C0189EEFDAAD +:101CB000C010782C580CC0600E9AF01F0009E3CDBC +:101CC00080C0FCFA00D475865806C0700E9AFCFCE1 +:101CD00000C45D16E3CD80C0E3CFC0C08002815454 +:101CE000D421497A1894301BF01F0016300A089B43 +:101CF000495CE8C5FF64F01F0015E8F701085807C4 +:101D0000C1C03006C0680E966E0C580CC1601897A2 +:101D1000306A0A9BEECCFFFCF01F000DCF51580635 +:101D2000EFF80000E9F80A42EFF81000EDF81A00A9 +:101D30000E9CF01F0008D822D82200008003C66441 +:101D400080023A1A80023058800274008000917C30 +:101D5000800091E8D401F01F0002D80280021CE04C +:101D6000EBCD408048FA1897301BF01F000FEEF8BB +:101D700000BC5818C0F00E9B300A48CCF01F000C75 +:101D80000E9CF01F000C0E9C307BF01F000BE3CD6F +:101D900080800E9C305BF01F0008E3CD8080000047 +:101DA0008003C68880023A1A8002360080027400DE +:101DB00080021CE0800217D0EBCD4040486A1896A4 +:101DC000301BF01F00060C9B300A485CF01F00051A +:101DD000E3CD80408003C6A880023A1A8002360014 +:101DE00080027400EBCD40F81894F8FC00CC580C3D +:101DF000C360E8F800D05808E08A00321897E8C3BA +:101E0000FF643005C0A8580AC200EEC7FF64E8F8B6 +:101E100000D00A38E08A00242FF5E8F600B0306AD6 +:101E2000069B0E9CF01F0015CF115806C0E06C5A9F +:101E30006EA81438CE91EECCFFFA6C4BF01F000F59 +:101E4000C0406C5A580ACE215807C0906F5AEECB4A +:101E5000FFD4E8FC00DCF01F000AC0403FFCE3CDEB +:101E600080F8EECBFFA8E8FC00DCEEFA0080F01F63 +:101E70000005CF60CF4B00008000917C8002B58CC4 +:101E80008002B52CD4211895E06C009CF01F001B3B +:101E90001897C310EAF401185804C2A1EAF800D454 +:101EA00070C85808C250189B301AEAFC00C45D186C +:101EB0001898C1E50E9C3016E06B009CF0060D46AC +:101EC000EC0B024BF01F000E58065F09580C5F1810 +:101ED0001248E8081800F8071710EAFC00CCF01FB9 +:101EE0000009089CEB4600D0EB4700CCD8220E9CA2 +:101EF000F01F0004DC2A000080009200800091F4B2 +:101F0000800091E8EBCD40801897F01F0008C031A9 +:101F1000E3CD80800E9CF01F0006C0550E9CF01F84 +:101F20000003CF7BE3CFC08080021DE480021E84CB +:101F3000EBCD40FE208D18961697149512921091B5 +:101F4000580BC580F6FB0080580BC0E16F5B580B47 +:101F5000C3210C9CFEFA02E4303BF01F00B93FFCA9 +:101F60002F8DE3CD80FE7568EDB80001CF011A9A80 +:101F7000EECCFFA8F01F00B3CEA16B484029126839 +:101F8000CE606B3840191268CE206B584039126809 +:101F9000CDE0FEFA02B2301B0C9CF01F00A9EEC48B +:101FA000FFD4302A303BECFC00DCF01F00A8089C7A +:101FB0006F5AC4386B68EDB80000CCC1EEC4FFD4D2 +:101FC0001A9A089CF01F009FCC516B484029126858 +:101FD000CC106B3840191268CBD06B58403912685E +:101FE000CB90FEFA026A301B0C9CF01F0095301A51 +:101FF000CDAB7568E21800021A93F9B40102F9B486 +:102000000001F8FC00DC1A9BF01F0092C1F05BECB1 +:10201000C4001A9C320A300BF01F008F6B48502806 +:102020006B3950196B585038089A303BECFC00DC87 +:10203000F01F0086300C189A189BECFC00DCF01F97 +:102040000087C3602F8DE3CFC0FE402A6B49F3EABF +:102050000008C0D0401A6B39F3EA0008C110403ABA +:102060006B59F3EA0008C1B04004CDFB1AD9302BFC +:102070001ADA0C9C4FAAF01F00722FEDCCBB1AD9B4 +:10208000302B1ADA0C9C4F7AF01F006D2FEDCC2B01 +:102090004F5A302B0C9CF01F006ACBCB1AD9302B37 +:1020A0001ADA0C9C4F1AF01F00662FEDCB3B580735 +:1020B000EE0B1700F60A1700F9B80158EFD8E10B3C +:1020C000EFFA1020ECFC00DCF01F0069CBC16B487C +:1020D0004029F1E90009EDB90004C5D0EDB90003CC +:1020E000C750EDB90002E081009430484E1AED4827 +:1020F00000B8301B0C9CF01F00526B384019F1E9FE +:102100000009EDB90004C500EDB90003C7513088DE +:102110004D9AED4800B4301B0C9CF01F00496B58E1 +:102120004039F1E90009EDB90000E080007FEDB928 +:102130000001C55130284D1AED4800BC301B0C9CE5 +:10214000F01F003FECFA00BC306BECFC00DCF01F31 +:10215000003FECFA00B4304BECFC00DCF01F003B1D +:10216000ECFA00B8305BECFC00DCF01F0038029A9F +:10217000049BECFC00DCF01F00421894FE91FF640D +:102180006B57E2170002C191ECFC00DCF01F003D30 +:102190000E9CCE7A31084BCAED4800B8301B0C9C1F +:1021A000F01F0027CABB31084B8AED4800B4301B32 +:1021B0000C9CF01F0023CB4BECFC00DCEACBFFDCDB +:1021C000320AF01F0033089CCCCA30884B1AED4805 +:1021D00000B8301B0C9CF01F001AC90BEDB90004AD +:1021E000FE91FF3231084ACAED4800BC301B0C9CFE +:1021F000F01F0013CA8BEDB90000FE91FF25301BC4 +:102200004A6AED4B00B40C9CF01F000DC89BEDB961 +:102210000001FE91FF1930284A1AED4800B8301B22 +:102220000C9CF01F0007C6AB301B49EAED4B00BC0D +:102230000C9CF01F0003C87B8003C8EC80023A1A94 +:102240008002BD688003C6C08002B4D48003C6E0AB +:102250008002C04C800091D08002B58C8003C734CE +:102260008003C7788003C7008003C7BC8002B52CF9 +:102270008003C8288003C86C8003C8B08002B64CB5 +:102280008002B9EC8003C8008003C8588002B91CE2 +:102290008003C8148003C8CC8003C8808003C84072 +:1022A0008003C894EBCD40C07758EDB80003F9B86F +:1022B0000008F9F80A2FF9B80104F9F81A2F18974D +:1022C000300A1696F8FC00DC149BF01F0025300A3B +:1022D000EEFC00DC149BF01F0023300AEEFC00DC57 +:1022E000149BF01F002130183009ECCBFECCEF48D6 +:1022F00000B8EF4800B4EF4900C02FF976085858ED +:10230000E08B00225808C2512FCB5849CF71EEFA0A +:1023100000BC306BEEFC00DCF01F0014EEFA00B4E1 +:10232000304BEEFC00DCF01F0011EEFA00B8305B21 +:10233000EEFC00DCF01F000DEEFC00DCF01F000CDA +:10234000E3CD80C03048EF4800B8EF4800B4CE0B72 +:102350003028EF4800B8EF4800B4CDAB8002B58C10 +:102360008002B52C8002B5EC8002B4D480028F804C +:10237000EBCD40E0205D1897F8F600B0F8F800BC0F +:102380005828C57059085F0958485F081248C2901C +:10239000302BEEFC00E0F01F002F314A300B1A9C6E +:1023A000F01F002D1A95EEFA00BC588AC200EEF814 +:1023B00000905808C03070785028149958895F18D8 +:1023C00058195F191069ECF8017CEEFC00E01A9ACC +:1023D0000C9B50495038F01F00212FBDE3CD80E009 +:1023E000300BEEFC00E0F01F001BCD8B30085018C6 +:1023F000301B500BECF900F0F3EB0008FBFB1A016B +:10240000EDB90001C120EEF800905808C1F0EEFCD3 +:1024100000D4580CCD10780C491BF01F0012FBFCA7 +:102420000A01EEFA00BCCC4B4018A1B85018CECB34 +:10243000300BF8FC00E0F01F000C300BEEFC00E06D +:10244000F01F000AEEF800BCC9EB3089CB8B00000E +:1024500080026178800091D08002581C8003C65CA5 +:10246000800091A0800261A48002618CEBCD40E0ED +:10247000189716951496F8F800905808C0D0704830 +:102480005808C0A1F8FC00D4580CC060780C48EB88 +:10249000F01F000EC1501AD648DA1AD5301B0E9C18 +:1024A000F01F000C300A0E9B48BCF01F000C0E9968 +:1024B0000C9B0A9C3008488AF01F00092FEDE3CDE1 +:1024C00080E000008003C65C800091A08003C960AA +:1024D00080023A1A800230588002740080027474BC +:1024E000D4211295169614941897F8F900BC5849FF +:1024F000C1C0F8FA00F4580AC10158895F08581998 +:102500005F0B104BF40B1800F9BB000AF9BB014636 +:10251000F01F0019EEFA00F4F4C8FFFFEF4800F4D2 +:10252000EEF900945809C020D822306A0C9BEECCFA +:10253000FF04F01F0012EEF800BC5828C111EEF89D +:1025400000D471585808C040EEFC00C45D180A99C8 +:10255000089A0C9BEEFC00DCF01F0009D8220A99B7 +:10256000089A0C9BEEFC00E0F01F0006FE99FFDECF +:10257000CE7B00008002246C800091DC8002C3CC02 +:10258000800261FCEBCD406C1ADA18951ADB1692CA +:102590001493301B48AAF01F000B48B6300A0A9B60 +:1025A0000C9CF01F000A0A990C9A069B049C3008A8 +:1025B000F01F00072FEDE3CD806C00008003C99071 +:1025C00080023A1A8002360080027400800274741D +:1025D000D401F01F0002D80280022584EBCD40C058 +:1025E000189E1497109CFCF800BC5888C240580BE9 +:1025F000C1A0FCCAFF64FCF600D46C585808C19016 +:102600001ADC16981AD9300BFCFC00C41ADBFD4BFF +:102610000104490E0E991ADE301B6C565D162FCD43 +:10262000E3CD80C0FCF600D448BA6C585808CE916F +:10263000E3CFC0C0585CF9B80002F9B80104580BE8 +:10264000C040FD4800B4CD6BFD4800B8482ACD4BD2 +:1026500080037E2080039C38EBCD40F8FACEFFE863 +:1026600018967C35F8F400D47C037C17685C7C2ECB +:10267000580CC0F01AD51ADE300E1AD71AD3ED4E08 +:102680000104ECFC00C468565D162FCDE3CD80F844 +:10269000E3CFC0F8D42118951694F8F70104580731 +:1026A000C020D822F8F900D472585808C4C01AD7EC +:1026B000F94701041AD70E981AD74B6A1AD70E9BFE +:1026C0007256F8FC00C40E995D16EAF900D42FCDBD +:1026D00072585808C3801AD7EB4701041AD70E98CE +:1026E0001AD74ACA1AD70E9B7256EAFC00C4301990 +:1026F0005D16EAF900D42FCD72585808C2401AD797 +:10270000EB4701041AD70E981AD74A2A1AD70E9BFC +:102710007256EAFC00C430295D16EAF900D42FCDC8 +:1027200072585808C1001AD7EB4701041AD70E98FF +:102730001AD7498A1AD70E9B7256EAFC00C4303960 +:102740005D162FCD5804C200EAFA00D47458580818 +:10275000C12030091AD91AD9EB4901041AD91298A3 +:102760001AD9129B7456EAFC00C4089A5D16EAFA5C +:1027700000D42FCD75A85808C070089B3019300AB6 +:10278000EAFC00C45D183018EB480104D8220000B0 +:1027900080039C38D421204DF8F900D41897169561 +:1027A00073885808C2C11094F8C6FFEAC1C8EEFC8D +:1027B00000C45D1B1AD4189B0E984C19E06A888ED1 +:1027C0000C9CF01F00408F2C2FFD580CC111580598 +:1027D000C140189B305CF01F003CEEF900D47388B8 +:1027E0005808C0D1737B580BCE31169CCE4BEECB24 +:1027F000FFF0F01F0036C1302FCDDC2A7378580867 +:10280000C0B0EEFC00C45D18C070189B306AEECCFE +:10281000FFF0F01F002F6E2C580CCEA1EF39007A7C +:102820003008F0091800C3A1EEF800D47048580829 +:10283000C100301BEEFC00C45D18C0B4EEF800D43B +:1028400071485808C0601A9BEEFC00C45D18C214A1 +:10285000300B0E9CF01F001FEEF800D47099580941 +:10286000C070300BEEFC00C45D19EEF800D470A807 +:102870005808C050301BEEFC00C45D183018EF48FB +:1028800000C84959300C72082FF893082FCDD82270 +:102890004038F1D8C002CDD0CB0B300848891AD8C7 +:1028A000E06A888E0E98EECBFFF0EECCFF86F01F2C +:1028B00000058F3C2FFD580CCB81C9FB800224E022 +:1028C0008002819C80028F1C800281E4800091DC68 +:1028D0008002269400007A6CEBCD40E018971695A4 +:1028E000300BF01F001DEEC6FF64306A49BB0C9C24 +:1028F000F01F001BC2E0EEF801185808C1F00C9B55 +:102900000E9CF01F00183006EEFC00DC0C9BEF461E +:1029100000B0F01F00150C9A0C9BEEFC00E0F01FBD +:1029200000130C9BEEFC00E0F01F00110C9BEEFC72 +:1029300000E0F01F0010E3CD80E0EEF800D470D886 +:102940005808CDE00A9A0C9BEEFC00C45D18CD8BB4 +:102950001896CD6B800217D0800217C88000917C3A +:10296000800226948002B9D48002581C800261E85B +:10297000800261D4D401F01F0002D802800228D85E +:10298000EBCD40C01897F8F800C45808C230303B6F +:10299000F01F003DEEF800D470495809C070300BAC +:1029A000EEFC00C45D19EEF800D470A95809C0709F +:1029B000300BEEFC00C45D19EEF800D47098580896 +:1029C000C050300BEEFC00C45D18300B0E9CF01FA5 +:1029D000002F6E2C3006F01F002E8F266E3C580CF8 +:1029E000C040F01F002B8F36EEF800E45808F9B80D +:1029F0000100EFF81A39EEFC0090580CC060F01F8F +:102A000000253008EF480090EEFC008CF01F0022FB +:102A10003006EEFC00DC0C9BEF46008CF01F001F24 +:102A2000EEFC00E0F01F001EEEFC00DCEF4600E0D4 +:102A3000F01F001CEEFC00DCF01F001BEEFC00DCB5 +:102A4000F01F001A0E9CEF4600DCF01F0019EEFC90 +:102A500000CCF01F00110E9CEF4600D0EF4600CCDA +:102A6000F01F00140E9CF01F0014EEFC00C4580C64 +:102A7000C070EEF800D470785808C0205D18E3CD1F +:102A800080C00000800228D88002269480028174D1 +:102A9000800242B4800091E88002B4CC800256ECFF +:102AA00080029438800294088002C0788002189CCA +:102AB00080021DB880021CE0EBCD4080169778099B +:102AC0001639C0F1761899080E9CF01F000A0E9C6A +:102AD000F01F0009E3CF808072180E38C060109993 +:102AE0005809CFB1E3CFC0806E189318CEEB000029 +:102AF00080022980800091E8EBCD40801897580C27 +:102B0000C051C1980E9CF01F000D6E0B580BCFB139 +:102B1000F01F000BF01F000B6E4C580CC060F01F34 +:102B2000000A6E4CF01F00096E8CF01F00080E9C0E +:102B3000F01F0006E3CD808080022AB88002724C2C +:102B40008002728480028F20800091E8EBCD40C02B +:102B50001897580CC05130060C9CE3CD80C0F01F74 +:102B60000021CFA1334CF01F00201896CF606E08D3 +:102B70006E19991899296E286E89993899996E3C21 +:102B8000580CC040F01F00198D4C6E7C580CC04092 +:102B9000F01F00168D8C6E498D59495891096E5A57 +:102BA0008D6A4948910A49486E698D7991090C9C52 +:102BB000F01F0012C11130196C988DB95808EDF949 +:102BC0001A0C6C285808CC906C185808CC606C4CC7 +:102BD000F01F000BCC200C9C3006F01F000ACBDB52 +:102BE0008002720880028F24800091940000046C9F +:102BF00000007AA400007AA0800275F880028F1E7F +:102C000080022AF8D431204D580C5F08580B5F0918 +:102C1000189316971248C05030050A9C2FCDD83211 +:102C2000E06C011CF01F00C01895CF803018F948E7 +:102C3000010CFEF102F66E22620B580BC100580225 +:102C4000E0800144E2C4FFFC3006760B049CF01FD8 +:102C500000B8C0C02FF6090B580BCF810A9CF01F9B +:102C600000B50A9CF01F00B4CD8BE2060328EB48A8 +:102C700000D46E0C580CE0800122F01F00B0EB4C29 +:102C8000008CF01F00AFEB4C0090CE906E185808EF +:102C9000C0A0785CF01F00A86E1CEAF60090F01F40 +:102CA00000A78D5C6E385808C0C0EAF8009070BC70 +:102CB000F01F00A16E3CEAF60090F01F00A08DBC52 +:102CC000EAF800905808CCB06E4C580CCC80F01F3D +:102CD000009DE04C0063FE9BFFC3EAC1FFEA364A59 +:102CE0006E4B029CF01F00986E5C580CE08100F95E +:102CF0006620340CF01F008C1897CB10FEF8024CA5 +:102D00008F78FEF8024AFEF9024A8F98FEF80248D0 +:102D10008F058F458F658F898FC83006FEF4023C82 +:102D20008F168FA4FEF202388FB2EAF900907288F3 +:102D30008FD8EAF9009072988FE8EAF9009072A8AB +:102D40008FF8F01F0088EB4C00E0E08000C20C9B85 +:102D5000F01F00850C9BEAFC00E0F01F0084EAF8FD +:102D600000D470685808E08000A7029B0A9C5D1898 +:102D7000EB4C00C4FE90FF74EAF8009070BBEAF8D8 +:102D800000D470895809C0605D19FE95FF69EAF8A2 +:102D900000D471685808C0F0EAFC00C45D181897A8 +:102DA000C0A0029BF01F0062C0600E9B364A029CCE +:102DB000F01F006534CCF01F005CFE90FF514EC840 +:102DC0004EC9991899294EC84EC9993899494EC883 +:102DD0004EC9995899694EC84EC9997899894EC873 +:102DE0004EC9999899A94EC84EC999B899D94EC853 +:102DF0004EC999C899E94EC84EC9F9440040F942F4 +:102E00000044990599F8F9490048F01F0069EB4C16 +:102E100000DCFE90FF25EB39007A3008F00918003D +:102E2000C5C1300A029BF01F0063EAF80090EAFC7B +:102E300000DC707BF01F0060EAFB00E0EAFC00DCD5 +:102E4000F01F005EEAFA009074C85808C60174D8F2 +:102E50005808C52174EA580AC080302BEAFC00DC0F +:102E6000F01F0057FE91FEFC009B0A9CF01F0055CE +:102E7000FE95FEF6EACBFFF0EAFC00DCF01F005204 +:102E80003FF8EB4800E4EAF900D473485808C0D092 +:102E90001A9BEAFC00C45D18C0814038EDB80002FE +:102EA000C0413018EB4801188B0366088B18870562 +:102EB000FE9FFEB5EB4800C4CD2A6E3B6E1CF01F92 +:102EC0000043EB4C0090CFDAF94B00D4CD3A0E9C86 +:102ED000F01F0019FE9FFEC4EACAFF86CA4BF01F0E +:102EE000001958FCFE9BFEBC6E5B310AEACCFF86E3 +:102EF000F01F0015CFEA109A301BEAFC00DCF01F2F +:102F00000030FE91FEADEAFA0090CA5B109A300BD9 +:102F1000EAFC00DCF01F002AFE91FEA2EAFA009013 +:102F2000C97B000080028F2400000470800091A003 +:102F300080022980800091E88000919480021348EB +:102F4000800091B8800091AC80021D60800225DC79 +:102F500080021BB8800218C8800218E8800218D8C6 +:102F60008002609C800261E8800261D48002184483 +:102F700080021850800225D0800229748002304CD3 +:102F8000800226588002360080021A3C80021928EE +:102F900080021CA880021F0480021BA480021D5412 +:102FA0008002186E80021884800218568002C0DCED +:102FB0008002B4C08002B4B88002B4CC8002B4D421 +:102FC000800227948002B90480023B4CEBCD40E0A4 +:102FD000306A18971695F8C6FF64497B0C9CF01F61 +:102FE0000017C270EEF801185808C1800C9B0E9CA7 +:102FF000F01F00130E9CF01F00133006EEFC00DCE7 +:103000000C9BEF4600B0F01F00100C9A0C9BEEFCDE +:1030100000E0F01F000EE3CD80E0EEF800D470E891 +:103020005808CE500A9A0C9BEEFC00C45D18CDFBEC +:103030001896CDDB800217C88000917C8002269410 +:10304000800276648002B9D48002581CD401F01F3B +:103050000002D80280022FCCEBCD40C0499BF8C7BC +:10306000FF641896306A0E9CF01F0017EDFB189C49 +:10307000E06800A2EDD8E007EDFB08A20FD81AD84F +:103080000FC91AD90FB81AD80FA91AD90F9848FA28 +:103090001AD80C9C1ADB302BF01F000D0E9B0C9CD9 +:1030A000F01F000CECFC00DCF01F000B303B0C9C14 +:1030B000F01F000A30182FADED4800A8E3CD80C006 +:1030C000800217C88000917C8003C9B880023A1A38 +:1030D00080021AE08002BA1C80022FCCD431FACDD3 +:1030E00000D03007F94700A8189516941491580B92 +:1030F000E0800217F6F60084E8CCFFFA76ABF01F0A +:10310000012A1AD61ADC09D81AD809C91AD909B855 +:103110001AD809A91AD909981AD809890A9C1AD95A +:10312000FEFA0488302BF01F01220E9B306A2F8D8F +:10313000EACCFF64F01F011F306A089BEACCFF5EF7 +:10314000F01F011D0A9CF01F011D300AEAFC00DC83 +:10315000149BF01F011B635AEDBA0003C061E2F833 +:1031600001745808E08100B1301063795809C0E05B +:10317000E1D9C0011298EDB90001E08000A4EDB9D9 +:103180000002F9B80004E1D8E030EAF800D4710890 +:103190005808C060009BEAFC00C45D18635A5804DC +:1031A000C07069585808C5A0F1DAC002C6E114978A +:1031B000E2170013C5B1029B0A9CF01F0102FAC876 +:1031C000FF9453375028089B0A9CF01F00FFEAF831 +:1031D00000B45828E08001BAE089007F5818E080E8 +:1031E000017130285038EAF800B85828C7F058283C +:1031F000E08900805818E080016230285048EAF9E0 +:1032000000BC58495F0B58895F08F7E81008C78071 +:10321000E2C9FECCE2C8FF0C16963007EC1600019E +:103220005019500812931092505766095809E081BE +:1032300001122FF72FC32F025847CF81EAF900BCA4 +:103240005889C671E2F800F04059F1D8C002F3E89D +:103250001008E08101311096C5F8E8F800805808A0 +:10326000CA70F1DAC002CA40C1083509FAC8FF3095 +:1032700010D9029AFAC9FF94300B50290A9CF01F0A +:1032800000D3CA202CCDD832E2F801485808E0819A +:10329000010FEAF900B0089A300BEAFC00DCF01FDD +:1032A00000CCE080017A3509FAC8FF3010D9029AC3 +:1032B000FAC9FF94089B50290A9CF01F00C4C8401B +:1032C000CE2BA1B0C5DBE2F801785808F9B00004B4 +:1032D000F9B00105C4BB5848C8605908C831303935 +:1032E0005039EAF800B85828C83130195049C88B0D +:1032F0005848C8505908C82130395049C81B3008AF +:103300005058E2C8FECC30165018E2C8FF0C5008E6 +:103310005909E080011FEAF800D470A85808C0508D +:103320000C9BEAFC00C45D18303B0A9CF01F00A90E +:10333000354AFAC7FFE8300B0E9CF01F009E580478 +:10334000E0800126E8F8008450645098E8C8FFFA4D +:10335000507868A95089E2FA0184581AE080009EEA +:103360004029403850A950C84049433850D950B836 +:10337000EAF800BC5848E08000E7E0890088581867 +:10338000E08000A43018510A4014400350E850F087 +:10339000FACAFFAC0899069BFACCFF9C7208580841 +:1033A000C040F54BFFF0720814A82FC92F0B183A34 +:1033B000CF61E2F801445198EAF601185806E0801E +:1033C0000089FEFA0212302B0A9CF01F0079301996 +:1033D000EAF800BC5908E080008F5809E0800098A6 +:1033E000305B300A0A9CF01F007D40585808C1C06D +:1033F000EAF800D471485808C170FACBFF44EAFCDF +:1034000000C45D18C1114328EDB80001C0D1189760 +:103410004F30189268095809E08100A12FF72FC496 +:103420002F035847CF81EAF800B05808C070103118 +:10343000C050EAFC00E0F01F006BEAFC00DC029BDD +:10344000EB4100B0F01F00680A9CF01F00682CCD13 +:10345000D832EAFB00D4E2FA014476585808C13069 +:103460001AD91AD23009EB4901041AD94DC90E3ABA +:103470005F081AD94DEA76560E99301BEAFC00C453 +:103480005D162FCD30165056CD5A5888C2005908B7 +:10349000FE91FF7A3048C78BE2F901A45809FE9AE1 +:1034A000FF6140985808FBF90A09C5BB6368F1D869 +:1034B000C021CF0A50375047C2FB30085048CA0AD3 +:1034C00030085038FE9FFE913008C5EB3038C5CB30 +:1034D000EAF800D470F85808FE90FF750E9BEAFCDD +:1034E00000C45D18FE95FF6F0C99EAF800BC5908FE +:1034F000FE91FF75029B0A9CF01F003E0A9CF01F84 +:10350000003E307B0A9CF01F0033C70BEAF80090A6 +:1035100070495819F9BB000AF9BB013CC63B745B02 +:10352000744CF01F00214B5A1ADC302B0A9CF01F00 +:103530000020306A089BEACCFF5EF01F001E2FFDC2 +:10354000FE9FFE023028C20B30195039FE9FFE4DFF +:10355000029B0A9CF01F0027CDFAEAFB00D4E2FA96 +:10356000014476585808FE90FF5B1AD91AD3EB42F3 +:1035700001041AD20E3A5F081AD00E99765649CA3B +:10358000301BEAFC00C45D162FCDC49B6248507806 +:1035900062595089CE1A301BEAFC00E0F01F001877 +:1035A000FE9FFE8380023A1C8003C9F880023A1A0B +:1035B000800091D0800091DC80021DB88002B5ECC3 +:1035C000800222A48002269480021F308002938011 +:1035D000800217D08003CA6C8002246C80037E2096 +:1035E000800257488002B9D48002237080039C383F +:1035F00080021A4880021CE08003CA488002559667 +:10360000EBCD40C021AD1897F8F800AC5808C68142 +:10361000F8F6010CEEFB009076095809C061C8F875 +:1036200072095809E080008CF2F801945808CF9193 +:103630003008EF48010C76495809C670EEFC00D4FA +:10364000580CC0E04DAB780CF01F005AEFF8002486 +:10365000F1FC0A04EEFB009076485808C560EEF8CD +:1036600000E85818E088008D760AEEF800C858186F +:10367000C3F0580AC090103AC041C3981438C370C0 +:10368000740A580ACFC15826C04076485828C690B8 +:10369000580AEFFA1A32F9B80001EFF80A32EEF9D7 +:1036A00001105809C04176485818C710EEF80118A3 +:1036B0005808C4F1580AF40B1700F60A1700F5FB76 +:1036C0001004F5FA1005EEF800D470B85808C410CC +:1036D000EEFC00C45D18C3D12E6DE3CD80C0F8F6BA +:1036E000010C5806C9812E6DE3CD80C0740A580ABA +:1036F000CCB0F4F801945808CFA175885808CC4193 +:1037000076485828CF41CC0B0E9CF01F002BCE5092 +:10371000EEF800B05808EFFC0A2C0E9CF01F0027B2 +:10372000300B1A9C368AF01F00261A961A9A0E9CA5 +:10373000300BF01F00242E6DE3CD80C05806FE91A3 +:10374000FF790E9C301BF01F00202E6DE3CD80C052 +:103750000E9C300A30ABF01F001D2E6DE3CD80C0F3 +:10376000580AC1D074085808EFFA1A32F9B80001A3 +:10377000EFF80A320E9C300BF01F0015CAEB302B0D +:103780000E9CF01F0011EEFB0090C6FBEF480110ED +:10379000129A0E9C303BF01F000BC9FB30180E9C98 +:1037A000EF4800C8149BF01F0009C97B8003C65C6A +:1037B000800091A08002195C80022370800091D06B +:1037C0008002792C800217D080022584800230DCB0 +:1037D0004848300A48499118910A930A5EFF000050 +:1037E00000007A7000007A78EBCD40681695189347 +:1037F000F6CCFFEDF01F0022314A1896300BF01F77 +:1038000000210A9A8D15ECCCFFF0069BF01F001EDC +:1038100049EAF5090042AC09F50800422FF8F558CD +:10382000004249B530088D286A198D3993062F86D4 +:103830008B1649866C08F0C9FFFF8D095909E0888D +:1038400000180A936A0C782A580AF9F80003E7F876 +:103850000A01F9F81003F5F81A0320197838910ACB +:103860008D09F01F000D6C095909FE9BFFED300A10 +:10387000326C149BF01F0009E3CF90688000920027 +:10388000800091D0800091DC000087F400007A7005 +:1038900000007A78800091E880014658EBCD40E046 +:1038A00030961697305E300B33A51989F2C8003078 +:1038B000EC081800E08B0019F2CA0030580AC2C5A3 +:1038C0001999F2C80030EC081800E08B0017F2C814 +:1038D00000305808C215F1EA1048EE0B0B08585B8F +:1038E000C291E3CF80E0F2C80061FC081800E08BD1 +:1038F000000EF2CA0057CE3BF2C80061FC08180067 +:10390000E08B000DF2C80057CE5BF2C80041FC0806 +:103910001800E088000DE3CFC0E0F2C80041FC08C9 +:103920001800FE9BFFFAF2C80037CD4BF2CA0037F1 +:10393000CC6B19A8EA081800CEF12FFB586BCD20EC +:103940002FDCCB4BEBCD40E016961497580AC4C041 +:10395000300B3095305EC1B8F2CA0030580AC365EA +:103960001999F2C80030EA081800E08B0021F2C86B +:1039700000305808C2B5F1EA10485808C275EC0B7F +:103980000B082FFB1637E08800302FEC1989F2C89E +:103990000030EA081800FE98FFE1F2C80061FC0858 +:1039A0001800E08B000EF2CA0057CD9BF2C80061F0 +:1039B000FC081800E08B000DF2C80057CDBBF2C820 +:1039C0000041FC081800E088000DE3CFC0E0F2C819 +:1039D0000041FC081800FE9BFFFAF2C80037CCAB90 +:1039E000F2CA0037CBCBE3CF80E0F6CA00015E6CB1 +:1039F000F80A000913882FF85C58B2885E1CF6C8D4 +:103A00000002100CC08819882FF85C58B888201C58 +:103A100058085E1C201ACF875EFC5EFCEBCD40C0D0 +:103A200049071696189BE0460020F9B60B200E9C1D +:103A30000C9AF01F000D3008EE060B080F8858088E +:103A4000C0D00E9C35E935FA2208F2081800F9FAC0 +:103A5000BE002FFC19885808CF81482CE3CD80C0C8 +:103A600000007A7C800091DCEBCD40FE189114922E +:103A7000169C1293580BC2A0E20B00045809C20016 +:103A800002973006C0881835E08A001418070C33F6 +:103A9000E0880018E4060708E80701051AD80E9C1C +:103AA00048CA0A9B2FF6F01F000C2FFD580CCEC4FD +:103AB0003008EE01010CE968FFFFE3CD80FE0297BC +:103AC0003008EE01010CE968FFFFE3CD80FE000045 +:103AD0008003DA3080009148580CC140F8FC00D0D7 +:103AE000580CC1002FCCF8F8FFFC5808C0417809E9 +:103AF0005809C0901638C0302F8CCF6B7808143816 +:103B0000CFC15EFF5EF9780C580C5E0C7828163831 +:103B1000C0515EFC782816385E0C780C580CCFB17A +:103B20005EFC30383189F94800F0F9480058F9480E +:103B3000005431E8F949004CF94800503FF9E06879 +:103B40000576F949017CF948019C5EFCEBCD40E02B +:103B500018961695344CF01F000C1897C1103018A9 +:103B60009978993899485806C0500C9CF01F000766 +:103B70008F5C5805C0500A9CF01F00048FBC0E9C3F +:103B8000E3CD80E080028F2480009194EBCD40C093 +:103B9000169679075807C051C0C86E375807C090AD +:103BA0006E0C0C9BF01F0004CF910E9CE3CD80C0E7 +:103BB000E3CF80C0800091A0EBCD40FC1695189417 +:103BC000580C5F0B58055F081493104B1292C040BD +:103BD0003FFCE3CD80FC580ACFC048E73006C06800 +:103BE0002FF62E07E0460038CF406E0B0A9CF01FE0 +:103BF000000ACF710699049A089B0E9C6E185D18F6 +:103C0000F9BC01FFF9BC0000E0460038CE31CE1B04 +:103C10008003CC00800091A0EBCD40801897580C19 +:103C2000C0A0780CF01F00056E1CF01F00040E9C55 +:103C3000F01F0002E3CD8080800091E8D421189429 +:103C4000169579075807C1A03006C0680E966E3CDD +:103C5000580CC14018970A9B6E0CF01F0009CF71D9 +:103C60005806EFF81003EDF81A03EFF80003E9F82F +:103C70000A100E9CF01F0003D82ADC2A800091A0B5 +:103C800080023C18EBCD406016961895760BF01F1D +:103C900000056B088D38EB460040E3CD80600000E6 +:103CA00080023C3CD431202D500B129CF01F003C74 +:103CB0001890C730198A580AC670300118965011EA +:103CC000320230930294C0382FF60D8AE40A1800AD +:103CD0005F08E60A18005F091248E8081800CF518B +:103CE000580AC2C00D87E40718005F18E6071800DD +:103CF0005F191268E8081800C4505807C4300C95C2 +:103D0000C0385807C0D02FF50B87E40718005F189C +:103D1000E60718005F191268E8081800CF31AA8476 +:103D20004A0B0C9CF01F0020C171A1A15807C06074 +:103D3000EAC6FFFF0D8A580ACCA1009CF01F001BA9 +:103D40005801C2404008F141005C40195809C25175 +:103D5000129C2FEDD832496B0C9CF01F0013C03120 +:103D6000A1B1CE5B0C9C493BF01F000FF9B80004D9 +:103D7000E3D8E031FBF91001F7B901FFFBF91A01B3 +:103D8000CD6B0C95CCDBF01F0009300840093FFCDF +:103D9000F348005C2FEDD8322FEDDC3A800091948F +:103DA0008003D304800091A0800091E88003D30CAD +:103DB0008003D314EBCD40FE169CF01F00451891F4 +:103DC000C6B0198A580AC7A0189630023203309438 +:103DD000E80A18005F08E60A18005F091049300871 +:103DE000F0091800C0E0109B2FF60D8AE60A1800B3 +:103DF0005F08E80A18005F091248F6081800CF515A +:103E0000580AC4500D87E80718005F18E607180025 +:103E10005F1910693008F0091800C3705807C350C3 +:103E2000109A0C95C0385807C0D02FF50B87E607BD +:103E300018005F18E80718005F191268F4081800E6 +:103E4000CF3130084A3BAA880C9CF01F0023C0F1F8 +:103E5000A5A25807C060EAC6FFFF0D8A580ACB9199 +:103E6000029CF01F001E049CE3CD80FE49CB0C9CFD +:103E7000F01F0019C031A3B2CEDB49AB0C9CF01F80 +:103E80000016C0E1A3A2CE6B0C95CDCB029CF01F17 +:103E900000135802CE913FF2049CE3CD80FE492BE3 +:103EA0000C9CF01F000DC031A1B2CD4B0C9C48FB07 +:103EB000F01F0009C071A1A2CCDBF01F00083FF287 +:103EC000CD3B029C3FF2F01F0005CCEB80009194AB +:103ED00080039A74800091A0800091E880039A6C1E +:103EE0008003D31C8003D3248003C8E4EBCD40803F +:103EF0001697149C129BF01F00085BFCC031E3CFA7 +:103F0000C0801898E018FFE1CFB1EF4C0050109C32 +:103F1000E3CD808080023DB4EBCD40801697149CA9 +:103F2000129BF01F00085BFCC031E3CFC0801898E3 +:103F3000E018FFE6CFB1EF4C004C109CE3CD808041 +:103F400080023DB4D431201D500B129CF01F00485C +:103F50001891E080007F198A580AC6B0300218967E +:103F6000049032033094E80A18005F08E60A18004B +:103F70005F0910493008F0091800C0E0109B2FF6C7 +:103F80000D8AE60A18005F08E80A18005F0912485F +:103F9000F6081800CF51580AC2F00D87E80718003C +:103FA0005F18E60718005F1910693008F00918005B +:103FB000C3E05807C3C0109A0C95C0385807C0D04A +:103FC0002FF50B87E60718005F18E80718005F1940 +:103FD0001268F4081800CF3130084A6BAA880C9C8C +:103FE000F01F0025C161A1B25807C060EAC6FFFFFB +:103FF0000D8A580ACB91029CF01F00205802C1B0D4 +:104000004009F34200545800C241009C2FFDD832B1 +:1040100049BB0C9CF01F0018C031A1A2CE6B499B7C +:104020000C9CF01F0015C0E1A3B2CDFB0C95CD5B3D +:10403000F01F0012300840093FFCF34800542FFDE8 +:10404000D832491B0C9CF01F000CC051A3A2CCDB42 +:104050002FFDDC3A0C9C48DBF01F0007F9B800107C +:10406000E5D8E032F7B001FFCC0B0000800091945E +:104070008003C8C4800091A0800091E88003D32C05 +:104080008003D3348003C8E48003C8E0D431202DFA +:10409000500B129CF01F00391890C6D0198A580A8C +:1040A000C610300118955011320230930294C03876 +:1040B0002FF50B8AE40A18005F08E60A18005F096A +:1040C0001248E8081800CF51580AC2C00B87E4070D +:1040D00018005F18E60718005F191268E808180052 +:1040E000C3F05807C3D00A96C0385807C0D02FF67F +:1040F0000D87E40718005F18E60718005F191268BB +:10410000E8081800CF31AC8449DB0A9CF01F001D81 +:10411000C171A1A15807C060ECC5FFFF0B8A580A06 +:10412000CCA1009CF01F00185801C1E04008F141EB +:10413000005840195809C1F1129C2FEDD832493B63 +:104140000A9CF01F0010C031A1B1CE5B0A9C490B44 +:10415000F01F000CCFA040192FF95019CDCB0A96B3 +:10416000CD3BF01F0009300840093FFCF3480058E0 +:104170002FEDD8322FEDDC3A800091948003D340AC +:10418000800091A0800091E88003D3448003D3484D +:10419000EBCD40401896784CF01F00466D2CF01F78 +:1041A0000045ECFC00D0F01F00436DACF01F004157 +:1041B0006DCCF01F00406DECF01F003EECFC008069 +:1041C000F01F003CECFC0088F01F003AECFC009073 +:1041D000F01F0038ECFC0094F01F0036ECFC009857 +:1041E000F01F0034ECFC009CF01F0032ECFC00A03F +:1041F000F01F0030ECFC00A4F01F002EECFC00A827 +:10420000F01F002CECFC00ACF01F002AECFC00B00E +:10421000F01F0028ECFC00B4F01F0026ECFC00B8F6 +:10422000F01F0024ECFC00BCF01F0022ECFC00C0DE +:10423000F01F0020ECFC00C4F01F001EECFC00C8C6 +:10424000F01F001CECFC00CCF01F001AECFC00D4AA +:10425000F01F0018ECFC00D8F01F0016ECFC00DC8E +:10426000F01F0014ECFC00E0F01F0012ECFC00E872 +:10427000F01F0010ECFC00ECF01F000EECFC0150F5 +:10428000F01F000CECFC016CF01F000AECFC01803C +:10429000F01F0008ECFC018CF01F0006ECFC01A0F4 +:1042A000F01F00040C9CF01F0003E3CD80400000D1 +:1042B000800091E8EBCD40C0189678085808C031CE +:1042C000C0880E987007109CF01F00155807CFA1EA +:1042D0006D085808C031C0880E987037109CF01FC8 +:1042E00000115807CFA16C5CF01F000F6C6CF01F21 +:1042F000000E6C8CF01F000C6C9CF01F000B6CAC63 +:10430000F01F00096CBCF01F00086C1CF01F0006B9 +:104310000C9CF01F0005E3CD80C00000800241909E +:1043200080023C18800091E8EBCD4040320818969E +:104330001AD8E0691000F8C8FFDC785A784B792C5D +:10434000F01F000430182FFDED480044E3CD8040FD +:104350008002B254D421F60815011695F0C6FFFF6D +:1043600018940C9CF01F00061897C0600A99089AD0 +:104370000C9BF01F00040E9CD822000080028F24AA +:1043800080023A68EBCD40E016951896F6CCFFFD1A +:10439000F01F00091897C0C00C9B0A9A322618C655 +:1043A000F01F0006EE0500093008B296B2A80E9C78 +:1043B000E3CD80E080009200800091DCD401580CB5 +:1043C000C1D0580BC160198835E92208F2081800DD +:1043D000E08B0013129A3009C088F80907082208F8 +:1043E000F4081800E08B00092FF9123BFE9BFFF741 +:1043F000F01F0003D802F01F0003D802800243849C +:1044000080024354D4011698F6FC0140580CC06059 +:10441000189BF0CCFEDCF01F0002D802800243BCE7 +:10442000D4011698F6FC013C580CC060189BF0CCE7 +:10443000FEECF01F0002D802800243BCD4011698A3 +:10444000F6FC0138580CC060189BF0CCFEFCF01F45 +:104450000002D802800243BCD4011698F6FC013455 +:10446000580CC060189BF0CCFF0CF01F0002D80263 +:10447000800243BCEBCD40F831EC1694F01F0028CD +:104480001896C3906979F8C3FFE2EDB90000C360E4 +:104490001897EDB90001C1614A294A380C37F20872 +:1044A0001710E60701051AD84A0A0A9B0E9CF01F4E +:1044B00000202FFD580CC1C51835E08A001A1807D6 +:1044C0006979EDB90002C171496949780C37F20880 +:1044D00017100E9C1AD8E6070107496A0E9BF01FB9 +:1044E00000142FFD580CC0451837E089000530082E +:1044F000E768FFFF0C9CE3CD80F848B848EA1AD87B +:1045000031EBF01F000B2FFD580CCF2559DCFE9925 +:10451000FFF0EC0C00076979CBDB000080028F24F0 +:104520008003936480037E208003D35880009148E9 +:104530008003D3648003D350EBCD40F81894332C20 +:10454000F01F003E1896C650F8C3FFCEEDB400042D +:10455000C6301897EDB40003C1514B994B980C37F6 +:10456000F2081710E60701051AD84B7A0A9B0E9C31 +:10457000F01F00362FFD580CC4951835E08A00470F +:104580001807EDB40002C1514AD94AE80C37F208C5 +:104590001710E60701051AD84ADA0A9B0E9CF01F8D +:1045A000002B2FFD580CC3251835E08A0030180762 +:1045B000EDB40001C1514A294A280C37F2081710FE +:1045C000E60701051AD84A3A0A9B0E9CF01F001F05 +:1045D0002FFD580CC1B51835E08A00191807EDB445 +:1045E0000000C171496949780C37F20817100E9C18 +:1045F0001AD8E6070107498A0E9BF01F00142FFD09 +:10460000580CC0451837E08900053008E768FFFFFF +:104610000C9CE3CD80F848B8490A1AD8332BF01F18 +:10462000000B2FFD580CCF25E04C0031FE99FFEF19 +:10463000EC0C0007C90B000080028F2480039364F8 +:1046400080037E208003D374800091488003D37C54 +:104650008003D3888003D3908003D36CD401774C3C +:10466000F01F0002D802000080024538D401773CD8 +:10467000F01F0002D802000080024538EBCD40F860 +:10468000332C1693F01F00401896C6906759F8C453 +:10469000FFCEEDB90001C6601897EDB90000C16109 +:1046A0004BA94BB80C37F2081710E80701051AD8C8 +:1046B0004B8A0A9B0E9CF01F00382FFD580CC4C576 +:1046C0001835E08A004A18076759EDB90003C1613F +:1046D0004AE94AF80C37F2081710E80701051AD81A +:1046E0004AEA0A9B0E9CF01F002C2FFD580CC34574 +:1046F0001835E08A003218076759EDB90002C16128 +:104700004A294A380C37F2081710E80701051AD869 +:104710004A3A0A9B0E9CF01F00202FFD580CC1C581 +:104720001835E08A001A18076759EDB90004C171FD +:10473000496949780C37F20817100E9C1AD8E80717 +:104740000107498A0E9BF01F00142FFD580CC0452D +:104750001837E08900053008E968FFFF0C9CE3CDBD +:1047600080F848B8490A1AD8332BF01F000B2FFDE8 +:10477000580CCF25E04C0031FE99FFEFEC0C000700 +:104780006759C8CB80028F248003936480037E2006 +:104790008003D3A4800091488003D3B08003D390DA +:1047A0008003D3BC8003D398EBCD40C030AC1696C9 +:1047B000F01F00181897C1806D69EDB90000C17035 +:1047C000189A301BEDB90001C0F149384939580B2E +:1047D000F0091700149C1AD9EECBFFF6141B490AF6 +:1047E000F01F00102FFD0E9CE3CD80C048B848EAB2 +:1047F0001AD830ABF01F000B2FFD580CCF55589C2A +:10480000FE99FFF3EE0C000A6D69300BCDCB000072 +:1048100080028F248003936480037E208003D3D0A2 +:10482000800091488003D3C8EBCD40C01697768CAA +:10483000580CC05118960C9CE3CD80C0314CF01F31 +:1048400000101896CF90EF38001DEF3A00181AD8D4 +:10485000EF39001C1AD9EF38001B1AD8EF39001AAB +:104860001AD9EF380019314B1AD81ADA485AF01F02 +:10487000000630082FADED680013CDEB80009200EC +:104880008003DA4880009148EBCD40E078351696F9 +:10489000314CF01F000A1897C0C0EC050308488A85 +:1048A0001AD8314BF01F000730082FFDEF680013B6 +:1048B0000E9CE3CD80E00000800092008003DD6864 +:1048C00080009148EBCD40801697772C580CC09013 +:1048D000F01F0009189B6F2CF01F0008E3CD8080AB +:1048E000771C580CC060F6CCFFDC320BF01F0004C4 +:1048F000E3CD8080800091B88002438480024354DD +:10490000EBCD40807838F60800076E085808C0C024 +:10491000784C580CC0C0F60C030C189B109CF01F70 +:104920000007E3CD8080109CE3CD8080109CF01FB9 +:1049300000046E08CF3B0000800243BC800091B8A9 +:10494000EBCD40F83228169418961989F009180012 +:10495000C0A0F01F001BEBDCC001C19030070E9C13 +:10496000E3CD80F8F8C7FFFF322B0E9CF01F001537 +:10497000CF6019985808CF31B8880E9CF01F0010EE +:10498000890C0E9CF01F00101897CEABF80316018F +:10499000E6CCFFFFF01F000D1897CE200C9C069A66 +:1049A0000E9BF01F000BC051EE030B0C8903CD8B47 +:1049B0000E9C0A97F01F0007CD3B0000800091B8C5 +:1049C00080009158800091948000920080023944C8 +:1049D000800091E8D421205D18951094129C1696C1 +:1049E000F01F000F1897C1906C0A590AE08B001451 +:1049F000189B0A9CF01F000B0E9CF01F000B48BA7E +:104A00001AD4314BFACCFFFCF01F0009300C2FFDFB +:104A10002FBDD822F01F00042FBDDC2A80024940A0 +:104A2000800091DC800091E88003D3D88000914819 +:104A3000D4013038F6CCFEDCF6CBFEC0F01F00020D +:104A4000D8020000800249D4D4013028F6CCFEEC14 +:104A5000F6CBFEC4F01F0002D8020000800249D449 +:104A6000D4013018F6CCFEFCF6CBFEC8F01F0002D5 +:104A7000D8020000800249D4D4013008F6CCFF0CE3 +:104A8000F6CBFECCF01F0002D8020000800249D411 +:104A9000EBCD40F8201D18971693129C1A9BF01F1F +:104AA00000171895C2306E595809C0504008103987 +:104AB000E08B00206E695809C04040081039C133AE +:104AC0006E366E44E60600066C0CF01F000D8D0578 +:104AD0006E4C580CC0504008300CE60409082FFDFD +:104AE000E3CD80F80A9CF01F00062FFDE3CFC0F84D +:104AF000F01F00033FFCCF4B80024940800091E84B +:104B0000EBCD40FEF6F700D05807C0510E94089C3C +:104B1000E3CD80FE364CF01F00191894CF90EEC6FE +:104B2000FFFCF8C3FF9C189749514962ECFCFFFC5D +:104B3000580CC2116C0B580BC1A02F86F01F00122D +:104B4000CF600837E2081700E40817101ADCE60700 +:104B500001051AD80E9C48DA0A9BF01F000D2FEDB4 +:104B60001807580CC0451835FE99FFE23008E76871 +:104B7000FFFFCCEB6C0BCE2B80028F2480037E20BA +:104B800080039364800271BC8003D3E48000914869 +:104B9000D431205D500B129CF01F0056502CE08049 +:104BA000008E198A580AE080009B3009402650196F +:104BB000503912905049320230931294C0382FF677 +:104BC0000D8AE40A18005F08E60A18005F09124817 +:104BD000E8081800CF51580AC4E00D87E407180010 +:104BE0005F18E60718005F191268E8081800C64049 +:104BF0005807C6200C95C0385807C0D02FF50B8732 +:104C0000E40718005F18E60718005F191268E80843 +:104C10001800CF31AA842FF0403CE00B1503F01FA1 +:104C200000361891C4E040490C9CE20900060C9B38 +:104C3000F01F00328D1C6C085808C141580CC1018E +:104C400040182FF850185807C15040482F88504836 +:104C5000EAC6FFFF0D8A580AC3C05031CB3B591C2E +:104C6000C2404009F2F801782FF8F348017858075C +:104C7000CED15031E0C8FFFFF0071503402CF01FE4 +:104C800000200E9B403CF01F001CC2E0F8000039E1 +:104C90003008931893084008F14C00D04019580987 +:104CA000C0D1129C2FBDD8324009F2F801742FF800 +:104CB000F3480174CC9B0C95CAEB3FFC2FBDD83256 +:104CC000403CF01F000F402CF01F000D2FBDDC3AC0 +:104CD000E0C8FFFF5031F0071503CD1B501A308795 +:104CE000503A1490CCCB403CF01F00053FFCCE7BEB +:104CF00080009194800091F48002720C800091E811 +:104D0000D4213228129716951389F0091800C0A0F3 +:104D1000320A2DCB0E9CF01F00271896C2F03FFCE4 +:104D2000D822EEC6FFFF322B0C9CF01F0023C3C01D +:104D3000F8060107EEC80008E0480037FE9BFFF1C7 +:104D40006B2C580CC060F01F001D0E3CC2606B2C19 +:104D50003004EB440044F01F001AEECCFFFFF01FBC +:104D60000019EB4C0048CDC00C9B0E9AF01F0016AA +:104D70006B28089CF0070B04D822EF390040F80993 +:104D80001800CCE16B2CF01F000E3018EB460048E9 +:104D90000C9CEB480044D8220E9A0C9B6B2CF01F05 +:104DA000000BCD61CBEB0C9CF01F00041897CC3BA3 +:104DB0008002394480009158800091B8800091E8C9 +:104DC00080009200800091DC8000917CEBCD4080DF +:104DD0001697129C2E8BF01F0006F9BC01FFF9B844 +:104DE0000001EFF80A08E3CD808000008002389CC3 +:104DF000EBCD40C018976E38129CF00B000630AA1D +:104E0000300BF01F000C8D0C18996E585808C030EC +:104E1000103CC0956E6C580CC0401839E0890007F2 +:104E2000E3CF80C08D08E3CFC0C08D0CE3CFC0C0FE +:104E300080009170D42116941895782B580BE08A35 +:104E400000557817683E6E0C78381C38C410EECACE +:104E5000FFFC3009C058150C78381C38C3902FF966 +:104E60001639CFA52FFB0E9CA36BF01F00241896BC +:104E7000C3506A2C580CE08A003B6C08683E7039BD +:104E80001C39C355ECC8FFFC300AC0A81097700845 +:104E9000F40B15027039EEC8FFFC1C39C2052FFA5D +:104EA000143CFE99FFF5F4C8FFFFEC0A002BA36841 +:104EB0001697F80A010AEC08000CA36AF01F00100C +:104EC0008F048B166A28300C2FF88B28D82218985C +:104ED000781C580CCFD19114D822DC2AF4C8FFFFDB +:104EE000EC0B000BA368CE6B7817CBDB0C97300A6A +:104EF00030480C9BCDFB0000800091F4800091C4F1 +:104F0000D4211895781CF01F000D300C8B1C8B2CB5 +:104F10006A075807C0F0189618948F140E9B0A9CC5 +:104F2000F01F00076E07F9B605FF5807CF710C9CFC +:104F3000D8220E96CFDB0000800091E880024E342C +:104F4000D421189578095809C1E03FFAC028109972 +:104F50007228F4080C4A72085808CFA1F4C4FFFF65 +:104F60001296E06C01A8F01F000A1897C0A09924BF +:104F70005806EDFC1A00EBFC0A000A9CF01F000525 +:104F80000E9CD82212961294CEDB000080028F2451 +:104F900080024F005EFD5EFD5EFD5EFD5EFD5EFD1E +:104FA000D401584BC0E0E0880007586BC0A0587B84 +:104FB000C040D802580BC091300CF01F0005D80239 +:104FC000301CF01F0003D802D80200008002172016 +:104FD000D401581BC070300A323C149BF01F0005EE +:104FE000D80A300A322C149BF01F0002D80A0000A5 +:104FF00080014658EBCD40FE201D1094129216956C +:10500000F01F0057E8C8FFF25C7C4D69F00C000609 +:10501000F33A0109580AC060EC0A0D085809E0810A +:10502000008F3003500CE6060001029CF01F004E7A +:105030000A9B1897306A400CEE0C000CF01F004BD6 +:10504000400C306A4CAB140CEE0C000CF01F004707 +:10505000400C302A4C7B2F4CEE0C000CF01F004310 +:10506000400C089A049B2F2CEE0C000CF01F003F04 +:10507000FAC8FFFC3005114A0E991AD5EE0A000C49 +:105080001AD5EC0A010A30EBF01F003B2FED581C3B +:10509000C5914009EC090108E048003EE08B001092 +:1050A0008E085CC806085CC8AED3029B0E9CAE0896 +:1050B000F01F0032300C2FFDE3CD80FEEE09000E14 +:1050C0003888FD39000CF0091800CEB1FD39000D0B +:1050D00038E8F0091800CE51FD38000EF808180025 +:1050E000CE01FD39000F3038F0091800CDA130286D +:1050F000FD3A0012F00A18005F1B3FE8F00A1800A2 +:105100005F19126BEA0B1800CCC1FD380013E218CE +:10511000001D5818CC61FD380014E21800C85888EA +:10512000CC01FCCAFFC1FCC9FFE1C0482FF914390A +:10513000C0E01388F6081800CFA0CB3BF4090103A8 +:10514000C72B0E9CF01F000E3FFCCB6B0FC92FA985 +:10515000EE0900091388A3A8B288CA3B8001F4E8CD +:10516000000087F480009200800091DC00007AA8A3 +:105170008003D6548001F54480014664800091E8A4 +:10518000D401201D3068FACBFFFC16D81A9B486C5E +:10519000F01F00064848581CF00C1700F9BC01002D +:1051A0002FFDD80200007AA880017A88EBCD40401C +:1051B000310A1696300B0C9CF01F000630F930783F +:1051C0008D198D09300C30398D288D39E3CD804013 +:1051D000800091D0D401F01F0002D80A80016048FD +:1051E000EBCD4068206DFAC3FFEE1496069C306A42 +:1051F000F01F0010FAC5FFFE0C9B310A0A9CF01F3D +:10520000000D0A9B204D310A1A9CF01F000B069BD3 +:10521000202D306A1A9CF01F0008F01F00082FADE7 +:10522000581CF9BC01FFF9BC00002FADE3CD80682C +:10523000800091DC8002E73680016094EBCD40680D +:10524000206DFAC3FFEE1496069C306AF01F001022 +:10525000FAC5FFFE0C9B310A0A9CF01F000D0A9B49 +:10526000204D310A1A9CF01F000B069B202D306A3E +:105270001A9CF01F0008F01F00082FAD581CF9BC45 +:1052800001FFF9BC00002FADE3CD8068800091DC08 +:105290008002E73680016168D401F01F0005581CC8 +:1052A000F9BC01FFF9BC0000D80200008001F370D6 +:1052B000D401F01F0005581CF9BC01FFF9BC000027 +:1052C000D80200008001F310D401169CF01F0004E6 +:1052D000581CF9BC01FFF9BC0000D802800163E052 +:1052E000D431207DFACEFFC050287C027C387C1758 +:1052F00050087C2E501E16901894149B1293580A36 +:10530000C5C0FAC5FFEA306A0A9CF01F0031202DA3 +:10531000306A0A9B1A9CF01F002FF01F002F5802C2 +:105320005F1858075F1918912FED1268C181300678 +:105330005800C26168193018F0030948F00811FFDD +:10534000F1E9000C891C580CC365BFBC891CF01F17 +:10535000002318975817C2F02F9DDC3A5887FE9B00 +:10536000FFFDFAC6FFF2308A300B0C9CF01F001CC8 +:105370000E9A049B0C9CF01F00165800CDC04028CC +:1053800058015F091AD8069C1AD630381AD530163B +:10539000404A403B1AD6F01F00136819EC03094835 +:1053A0001248F1D8C01F189789180C9CF01F000EE6 +:1053B0002FCDCD1B2F9DD83AFAC5FFEA306AE06B9E +:1053C00000FF0A9CF01F0006CA3B0000800091DC31 +:1053D0008002E736800188B080016584800091D02A +:1053E0008001661C8001639CEBCD40C01896308C18 +:1053F000F01F00091897C0C0300899069918F01FCF +:105400000007301CF01F00060E9CE3CD80C0E3CDEA +:1054100080C0000080028F248001604880017A10E3 +:10542000EBCD4080209D1697FACCFFFEF01F0009BF +:10543000581CC0402F7DE3CFC0800E9C1BBAFACB16 +:10544000FFFCF01F00051BBC2F7DE3CD808000001A +:1054500080017800800091DCEBCD4080202D580B3E +:10546000C120FAC7FFFE306A0E9CF01F000C0E9C94 +:10547000F01F000B581CF9BC01FFF9BC00002FED18 +:10548000E3CD8080FAC7FFFE306AE06B00FF0E9C20 +:10549000F01F0004CEDB0000800091DC8001793039 +:1054A000800091D0EBCD4040485B1896F01F00057E +:1054B0000C9CF01F0005E3CD8040000080039C3869 +:1054C00080025458800091E8EBCD40C0202DFAC7EF +:1054D000FFFE16960E9CF01F0008581CC0402FEDD2 +:1054E000E3CFC0C00E9B0C9C306AF01F00042FED70 +:1054F000E3CF80C080017864800091DCEBCD40C0B8 +:1055000018977939580BC0305839C0E03018EF4837 +:1055100000BC3038EF48004C1039C0808F2830086C +:105520008F58E3CD80C0F949004C6F682FF8EEFA30 +:10553000010CEF4800586FA830098F288F59301B95 +:10554000746C7486487A5D16EEF80094EEF900905B +:105550002FF82FF9EF480094EF490090E3CD80C079 +:1055600080037E20580C5E0C580BF9FB4A19580A30 +:10557000F9FA4A225809F9F94A1A5808F9F84A1B5F +:105580005EFC580CF9F81024F9B90101F1D9E108D1 +:10559000F9F81A245EFC580C5E0C580BF9B801019E +:1055A000F9F81A45F9FB0A455EFCD703EBCD40C07C +:1055B0001897580CC04079385858C030E3CD80C097 +:1055C000F8F8010C3009706C7086488A301B5D1643 +:1055D000EEF80094EEF900902FF82FF9EF480094C0 +:1055E000EF490090E3CD80C080037E20580CF9FC89 +:1055F00010315EFC580CC0B0F8F800D45808C070E8 +:10560000F8F800D89708F8FC00D45EFC300897083A +:105610005EF8D703580CC040588BE08800035EFD4D +:1056200048D8F00B032FF8FC00E05EFCF8FC00DC2F +:105630005EFC78BC5EFCF8FC00805EFC79FC5EFCE5 +:10564000F8FC00845EFC784C5EFC797C5EFC786C37 +:105650005EFC00008003D6FC580C5E0C588B5EBCD0 +:1056600048E8F00B032FF94A00E05EFCF94A00DC41 +:105670005EFC99BA5EFCF94A00805EFCF94A007C47 +:105680005EFCF94A00845EFC994A5EFCF94A005CC3 +:105690005EFC996A5EFC00008003D720580CC05065 +:1056A000580BC031783C5EFC5EFD580C5E0C580B0C +:1056B000F9FA0A035EFCD401580CC0A0F8FC010CF6 +:1056C000580CC06078A85808C030780C5D18D80213 +:1056D000D401580CC021D80AF8FC010C580CCFC0DA +:1056E00078B85808CF90780C5D18D802EBCD408080 +:1056F0001897580CC1E0189A300B48FCF01F000FA7 +:105700000E9A300B48ECF01F000DEEFC00C0F01FAD +:10571000000DEEFC00CCF01F000CEEFC00D4F01FDE +:10572000000AEEFC010CF01F00080E9CF01F0006A2 +:10573000E3CD80808002608C800274008002602053 +:10574000800270E0800091E8D401580CC050F8FC51 +:1057500000C0F01F0002D80280026410D401580C6F +:10576000C050F8FC00C0F01F0002D802800264287C +:10577000D401189A580CC0A030583019F8FC00C059 +:10578000F548004C95C9F01F0002D802800263BAA8 +:10579000EBCD40801897580BC04079E85888C0403E +:1057A0003018EF4800BC30193088EF490044EF480A +:1057B00000788F99EEFC00C0F01F0004F9B80100DA +:1057C000EFF81A39E3CD8080800263B2EBCD40E080 +:1057D000201D189716951496580CC0513FFC2FFDAC +:1057E000E3CD80E0F8FC00C0F01F000ACF801A9BD8 +:1057F000EEFC00C0F01F0008189BCF10400C0C3CC2 +:10580000CEF30C9A0A9CF01F0005300CCE9B0000D2 +:10581000800263B2800263CE800091DCEBCD40C099 +:1058200018971496580CC1F0F94B00C4580AC1B02F +:1058300074087419F94800F8F94900FC7428F9480B +:105840000100F8FC00C0580CC0E0742BF01F0007EA +:105850006C3BEEFC00C0F01F00066C4BEEFC00C081 +:10586000F01F0004E3CD80C0800263A6800263AC19 +:1058700080026408D431FACD00A81897F8F600CC5D +:105880005806C0F0F8F800F85808C0B00DA80DB9D7 +:10589000F3E81089F8F800D02FC91039E088000427 +:1058A0002D6DD832ECC4FFFC0999500909A0F01FF6 +:1058B000006FFAC1FFF8340A029B0E9CF01F006CC7 +:1058C0001895CEF5590CE0800090580CCEA132020C +:1058D0005012EEF800E45808C7D1E8C5FFE4FAC357 +:1058E000FF68310A0A9B069CF01F0062310A300BE8 +:1058F0000A9CF01F00610DAA0DB9049BF3EA108900 +:10590000FACCFFD8EEFA00CC0A982FC9F01F005B42 +:10591000310A0A9B069CF01F005AC7614009E1E961 +:1059200010880DB9EBD8B0100DA8F3E81089320833 +:10593000F2CE002CF00519005FB9E04E00205F9A0E +:10594000124AF80A1800CAD15C751C35C630580EC8 +:10595000CA81FAC3FF88029B0A9A069CF01F004581 +:105960003018308AEF4800E4E8CBFFFDEECCFF189A +:10597000F01F0040EEFC010C78965806C0D0E93AC2 +:10598000001B0A98149B0699780CE21B0080F5DA3C +:10599000C0025D16C865E939001B3008F00918001F +:1059A000C5753018EF48011CEEF901185809C0718F +:1059B000EEF800FCEDB80000FE90FF7430188FD8B0 +:1059C000EEFC010C78785808FE90FF6C780C5D189E +:1059D000C68B308AE8CBFFFDEECCFF18F01F002805 +:1059E000FE94FF60C7BB189A029B0E9CF01F00201C +:1059F000FE91FF580A9A029BFACCFFD80A92F01F38 +:105A0000001D5015C67B069B0A9C310AF01F001929 +:105A1000C48BFAC6FFB8E8CBFFF50C9C310AF01F27 +:105A20000015049A029BFACCFFA8F01F0012FAC3DB +:105A3000FF880A9AE8CBFFD4069CF01F000E40199D +:105A40000C9A2F090A9B069CF01F000EC8AB301859 +:105A5000EF480118EEF9011C5809CB11EEF800FCD3 +:105A6000EDB80001CAC1C1DB8002575C800257CC8F +:105A7000800091DC800091D080028EF88000917CC3 +:105A800080029C38D431201D3003189730140695BD +:105A900030213040EF4500BC6F4A580AE08000C911 +:105AA0006F585808E08100C56E7C580CE08100C238 +:105AB0006EB85808E08000BE6F385828EFF41A2FEF +:105AC000EEF8010CEF41004C3009706C7086FEFA64 +:105AD000051E029B5D16EF4400548FC5EEF800983A +:105AE000EEF900902FF82FF9EF480098EF49009059 +:105AF0006E7C580CC0516EB85808E08100EC6FC83D +:105B0000EF4400705818EFF41A2F6FD85808E0814E +:105B100000F8580CE08100A76EE85808E08100A367 +:105B20006FE8F0C900015879E08B000EFEF804C45C +:105B3000F009032FEF4400BCEF410078EF4500402F +:105B4000EF4400C8EEFC00C0F01F012BE08000B560 +:105B5000EF4400BC2FF3E0430064C9D10E9A300B30 +:105B6000FEFC0498F01F012630090E98FEFA048C02 +:105B7000129B129CF01F0123EEF9010C72285808A9 +:105B8000C0E0EEF801105808C0A058185F0B3008AC +:105B90000E9CEF480110723A72285D182FFDD83222 +:105BA000EEF80088EF4400BCEF4000788F55EF45D9 +:105BB000007CEF4500C88F08CC6B6E585808E08118 +:105BC00000DF6E4B580BE08100D06E085808C161B1 +:105BD0003078EF4400BCEF480078EF440048CB3BFE +:105BE000EEF900845809E08101846FF85808E081DB +:105BF000015C6E4B580BE08100B86E685808CA30E3 +:105C00000E9CF01F0101C9FB6E485808E08100A9F5 +:105C10006E585808E08100B06E685808C9406F0897 +:105C20005808C910300B0E9CF01F00F7C8CB6E7CD3 +:105C30006EA95809C2F16F885808C2C06F38EF4585 +:105C400000605818EFF41A2FEF44004CEF4500584D +:105C5000EF4500548FC58FE4EF450118EF45011C57 +:105C6000C49B6FE8EEFC00CC5818EFF41A2FEF44F9 +:105C70000078F01F00E6EEFC00D4EF4500CCF01FEA +:105C800000E3EEFC00C0EF4500D4F01F00E18FE51B +:105C9000C5AB580CCD416EB85808CD105829C3B0CB +:105CA0005819C4706F3820185878FE9BFF26FEF9EB +:105CB0000362F208032FEEF800BC5808FE91FF4C77 +:105CC000C5CB6E585808E08100FE6ED85808E080B9 +:105CD00000FE6FC95819FE90FF1A5829FE91FF1E49 +:105CE0006FD85808FE90FF1A0E9CEF490070EF44E1 +:105CF00000BCF01F00C96E7CEF450074C0BB0E9C59 +:105D0000EF4400BCEF410070F01F00C36E7CEF4514 +:105D10000074C00B6F885828CC606F388FC45898B7 +:105D2000EFF41A2FEF4100603098EF48004CCE4A54 +:105D30006F885818CB806F3858A8EFF91A2FEEF9F2 +:105D4000010C30A88FC5EF440060EF48004CFEFA0C +:105D5000029E7286726C302B0A995D16CC0A6F080F +:105D60005808FE90FF573068EF4400BC8FF4EF48AE +:105D70000078CE9A6F085808FE90FF503038EF44F4 +:105D800000BC8F05EF440080EF480078CDCA6E69F3 +:105D90005809C0A06ED85808E0810117EEF800F845 +:105DA0005808E08100FC6E485808E08100EB6E88DE +:105DB0005808C0506ED85808E08000E46F28580892 +:105DC000C050300B0E9CF01F00956E7CC93A6F7866 +:105DD0005808C8018F88EF4400BCEF40004CEF48E2 +:105DE0000058EF4800448FF8EF4800488F98EF4480 +:105DF0000040C82A6E1B580BCE606E585808FE90A3 +:105E0000FF6A3089EF4400BCEF49004CEF44005C6E +:105E1000C73A6E2B580BC2716F696FB81039CD330A +:105E20006ED85808C2003058EF4400BCEF48004C10 +:105E30008FC4EF440110FE9FFE60580AFE91FF4B95 +:105E4000EF4A011CEF4400BCEF44004CEF4A0060F5 +:105E5000EF4A0058EF4A00548FCA8FE4EF4A011806 +:105E6000FE9FFE4B6E685808C7B16E485808C78140 +:105E70006E585808CC71580BFE91FF2D6F696FB8A2 +:105E80001039FE93FF286ED85808FE91FF24307811 +:105E90008FCBEF48004CEF4400BC6F98EF410110EE +:105EA0008F18FE9FFE2AEEF80088EF4900C8EF44E5 +:105EB00000BCEF4000788F59EF49007C8F08FE9FAF +:105EC000FE436ED85808E081008AEF4400BCEF44DE +:105ED000004CEF450060EF450058EF4500548FC57A +:105EE0008FE4EF450118EF45011CFE9FFE06305977 +:105EF000EF4400BCEF4900781A9BEEFC00C0F01F95 +:105F000000481892C290EEF8010C4009189A708669 +:105F1000706C300B5D16049CF01F003CEEF800C85E +:105F20005808EFF81028F9B90101F1D9E108EFF8A4 +:105F30001A28EFF80029F9B90001F1D9E008EFF8C3 +:105F40000A29EEF90090EEF8009C2FF92FF8EF499E +:105F50000090EF48009CEF450084FE9FFDF5EF4464 +:105F600000BCEF40004CEF450058EF4500448FF572 +:105F7000EF4500488F958F85EF440040FE9FFDBDA3 +:105F80003078EF4400BCEF48004C8FC56F98EF416C +:105F900001108F186E7CFE9FFDAEEEF800FC5808D5 +:105FA000FE91FF038FD4EEFC010C78785808C040B6 +:105FB000780C5D186E695809FE90FEF76ED8580887 +:105FC000FE90FEF36E7C3059EF4400BCEF49004C6C +:105FD0008FC4EF440110FE9FFD8E3088EF4400BC5B +:105FE000EF48004CEF44005CFE9FFD8780037E205D +:105FF0008003D744800268308002608C8002740085 +:106000008002747480025790800091E88002653CA1 +:106010008003D76480025874800254FC800263E6D7 +:10602000EBCD408076085808F9B901FFF1D9E108B5 +:10603000F7F81A0076185808F9B901FFF1D9E10804 +:10604000F7F81A0176285808F9B901FFF1D9E108E3 +:10605000F7F81A0276385808F9B901FFF1D9E108C2 +:10606000F7F81A03169718991698486A300B301CDF +:10607000F01F00050E9CF01F0005E3CD808000009E +:10608000800260208002747480025A84D401169CBD +:10609000F01F0002D802000080025A84D421203D63 +:1060A0001895E06C0120F01F00221897C38031E89A +:1060B0003039F9480088F948006833C8F949006C5C +:1060C000F9480064F945010C300430CA99A4089BD2 +:1060D0001A9CF01F00186AF850286ADA500A6AE819 +:1060E0005018EEF8010C1A99704A493B0E9CF01FAB +:1060F0000013EF4C00C01A961898C14030160E9C41 +:106100008F76F01F000F0E9C8F74F01F000D0E98FD +:1061100008990C9C48BA089BF01F000B0E9C2FDDC1 +:10612000D8220E9C1097F01F0009CF9B80028F246D +:10613000800091D0000004788002711C80025A8493 +:106140008002602080027474800091E8D401580CB1 +:10615000C090F8F800D45808C050F8F800805808EB +:10616000C020D8023018F94800809958F01F00026A +:10617000D802000080025A84D401580CC04099AB68 +:10618000F01F0002D802000080025A84D401580C8B +:10619000C060F94B00E0994BF01F0002D8020000EC +:1061A00080025A84EBCD40801897580CC090996BB0 +:1061B000F94B00DC580BC0610E9CF01F0005E3CDCD +:1061C0008080F8FC00C0F01F0003CF7B80025A845F +:1061D000800263BAD401580CC04099DBF01F000262 +:1061E000D802000080025A84D401580CC04099BBE8 +:1061F000F01F0002D802000080025A84EBCD40E07C +:10620000189714951296580CC3A0F8F8008C2FF824 +:10621000F948008C5839E08B0009F8F800A82FF8ED +:10622000F94800A8E3CF80E01588306AF94800B04B +:10623000F8CCFF4CF01F0042ECCA00040BA90BB8CD +:10624000F1E910861436E08B00130B99300CF80935 +:106250001800C4603038F0091800C130EEF800A80A +:10626000301C2FF8EF4800A8E3CD80E0EEF800AC3A +:10627000300C2FF8EF4800ACE3CD80E0E3CF80E0B6 +:10628000E046002BE088004C3FE80BCBF00B1800F9 +:106290005F0A3028F00B18005F09124AF80A18004C +:1062A000CEE13018F00B1800C3A1EEFC00CCF01FBB +:1062B00000252FC60C9CF01F0024EF4C00CCC2F030 +:1062C0000C9A0A9BF01F001E0E9CEF4600D0301661 +:1062D000EF460074F01F001D0C9CE3CD80E0EEF84B +:1062E00001145808C100300830398FC8EF48011434 +:1062F0008F29EF49004CEEFC010C78C85808C030DB +:10630000780C5D18EEFC00D4F01F000E0C9CEF46DC +:1063100000D8F01F000DEF4C00D4C031E3CF90E067 +:10632000EACBFFFCEEFA00D8F01F00050E9C3016F9 +:106330008F56F01F00060C9CE3CD80E0800091DCBE +:10634000800091E88000920080025A84EBCD40806A +:10635000189779685808C0B079BB580BC08070494D +:106360005D193008EF480058EF48006CE3CD80809D +:10637000EBCD40C01897580BC04078085878C04003 +:106380003018EF48006030786FA68F086F9C6C293A +:10639000300A305B5D196FA86F9C7029301A304B42 +:1063A0005D19E3CD80C0F94B00745EFCF94B00B081 +:1063B0005EFC580CF9FC10135EFC580CF9B8010196 +:1063C000F9F81A06F9B9010BF9F91A005EFC580C34 +:1063D000C08079485808C05079589708794C5EFCBD +:1063E000300897085EF8580CC0C0791A580AC09057 +:1063F000792897083009F9490048F94900445EFABC +:106400003008109A97085EFAF94B00C45EFCD70377 +:10641000D401580CC040483BF01F0003D8020000D4 +:106420008003D7B08002634CEBCD40801897580CA6 +:10643000C0F079A8300B7019799C5D19C0916E6815 +:106440005808C0606E2820385818E0880004E3CD52 +:1064500080806F485808F9B80101EFF81A136FA847 +:106460006F9C7029301A300B5D19EEFC00A4483A7D +:10647000302BF01F0003CECB8003D7BC80023A1A2A +:10648000EBCD40801897580BC040780858B8C040F2 +:106490003018EF4800606F4930B88F085809F9B8D4 +:1064A0000101EFF81A136FA86F9C7029301A300B96 +:1064B0005D196FA86F9C7029300A305B5D196FA859 +:1064C0006F9C301A7029304B5D19EEFC00A4484ACD +:1064D000302BF01F0004E3CD808000008003D81C27 +:1064E00080023A1AEBCD40C01897580BC04078088C +:1064F00058C8C0403018EF48006030C86FA68F08F9 +:106500006F9C6C29301A302B5D196FA86F9C702915 +:10651000300A305B5D196FA86F9C301A7029304BC0 +:106520005D19EEFC00A4484A302BF01F0004E3CDB7 +:1065300080C000008003D86080023A1AEBCD406032 +:106540001896784CF01F000B30056D1C8D45F01F20 +:1065500000096D4CED450044F01F00066DA8ED45A7 +:1065600000500A9A6D9C70290A9B5D19E3CD8060EA +:10657000800091E8EBCD40E01897580BC4F0780804 +:106580005808C4C130088F086FD95809C0B06F6867 +:106590005808C08070985808C0506FBB0E9C5D189A +:1065A000C4114A4B0E9CF01F00246FA83006301512 +:1065B0008F16EF4500408F268F666EFA70490C9B50 +:1065C0006F9C5D196FA80C9A70290C9B6F9C5D19CC +:1065D0006FA80C9A7029302B6F9C5D196F4CF01FBF +:1065E00000176FA80A9BEF460050EF46004C0C9A2C +:1065F00070296F9C5D193FF80C9A8F386FA5303B5E +:106600006F9C6A295D196FA80C9A7029304B6F9C9A +:106610005D19EF4600C0E3CD80E03018EF48006020 +:10662000CB2B6F686FBB70A90E9C5D19CBFB000074 +:106630008003D8948002634C800091E8EBCD40E069 +:10664000205D1897580BC04078085858C040301843 +:10665000EF48006030588F086F695809C4406FA830 +:10666000FACBFFF070596F9C5D19310A300B189509 +:106670001A9CF01F00256F1C6EE850086E295019F7 +:106680006E6850286F095039F01F002030086F6B7A +:10669000EF48005CEF480044EEC8FFB81A9A0A9928 +:1066A0001AD80E9C405876566FBB5D16EF4C0044CE +:1066B00040188FE82FFD5808C1616F785808C13124 +:1066C00040188F2840298F694038EF4800406F6894 +:1066D00070695809C08070785808C0506FBB0E9C14 +:1066E0005D19C0412FBDE3CD80E06F4CF01F000766 +:1066F0006F68EECAFFAC70796FBB0E9C5D19EF4CF2 +:106700000050CF1B800091D0800091E8EBCD4080FD +:106710001897580BC04078085868C0403018EF48A8 +:10672000006030686E4C8F08F01F001A6F18580810 +:10673000C2E0EEF800B05808C2216EA86F2C8F3866 +:10674000F01F00158F4CC0706F2A6F1BF01F0013D5 +:106750006F288F586FA8301A7029303B6F9C5D19D5 +:106760006FA86F9C7029300A305B5D196FA86F9C11 +:1067700070496EFA300B5D19E3CD8080310AEECBA3 +:10678000FF7CEECCFF6CF01F0005CD8B8F48CE9BBD +:10679000800091E880009200800091DCEBCD40FC0D +:1067A000201D79A81897169214931294799C700959 +:1067B0005D191896C2F06F685808C23070C8580842 +:1067C000C2000E9C1A9A6FBB5D181895C1A0400CB0 +:1067D0002FBC870CF01F0015C1D03028B892B888A4 +:1067E00030188699B8B9A9891897B8A9B8C80A9B6A +:1067F000400A2FBCF01F000E0E9C2FFDE3CD80FC45 +:106800005804C0416DCC580CC0A16DB86DA5580599 +:10681000C0A130070E9C2FFDE3CD80FC6DD81895EC +:106820005008CD6B5008CD4B80009200800091DC69 +:10683000D431209D3004F8C9FF7CF8C8FF6C18974C +:1068400050195008F8C0FFB808956FA8EF450060D0 +:10685000301B70196F9C5D19C0706FA8306B701978 +:106860006F9C5D19C2F16FA8306B70196F9C5D1938 +:10687000C140EEF800C45808C101EEF800C0E0487D +:106880000032E08A0025E0480033E080011C6F8878 +:106890005808C1003014CDAB6E085818F9B8010182 +:1068A000EFF81A18EF4500C030188F086F885808A5 +:1068B000CF216F7C580CE80C1700F9BC01012F7D2B +:1068C000D832301B0E9CF01F01EECE2B6E0958A95A +:1068D000FE9BFFDFFEF807ACF009032F30183029CC +:1068E000EF4800608F09CD4B300B0E9CF01F01E686 +:1068F000CCFB6E196EB81039C760300B0E9CF01FC0 +:1069000001E2CC6B6EA96E381039E0800137300B94 +:106910006E8E580EC1B06E685808C1806EAA6E396E +:10692000123AE08000BBEEF800B05808C0F0F2C8A0 +:10693000FFFFF1D8C008103AE08000B0F2C8FFFEB7 +:10694000F1D8C008103AE08000A96E2C582CC20083 +:106950006E985808E08001236E685828E080011F77 +:106960006EAA6E39123AE0800146EEF800B058087F +:10697000C0F0F2C8FFFFF1D8C008103AE080013B38 +:10698000F2C8FFFEF1D8C008103AE08001346E78FA +:1069900058085F1A3008F5EB0009F0091800E0818B +:1069A000010FEC1B0001F5EB0008F2081800E08075 +:1069B00001056EBB1699582BE080012A6E16580609 +:1069C000C071581BE080021B582BE08101630C3B17 +:1069D000E080014F0C995919C0F1580EC0416FE881 +:1069E0005808C0A0300B0E9CF01F01A8C51B6EEB11 +:1069F000580BFE90FF7C300B0E9CF01F01A5C48B42 +:106A00006FA8305B70196F9C5D19C7016FA8307B50 +:106A100070196F9C5D19C0506E685808FE91FF395F +:106A20006FA8300B70396F9C5D19C0516E68582883 +:106A3000FE90FF2F6FA8308B70196F9C5D19FE912F +:106A4000FF286FA8189B70396F9C5D19C0516E6844 +:106A50005828FE91FF1E6FA8307B70196F9C5D193E +:106A6000C0806E285828C0506E685808FE90FF11EC +:106A70006E185918E080025C5998FE91FF0AEEF8F2 +:106A800000805808FE90FF056E685808FE90FF01D0 +:106A90006E285848FE91FEFD300B0E9CF01F017DC4 +:106AA000CF7A6FA8306B70196F9C5D19FE90FEF164 +:106AB000EEFB00C4580BFE91FEEC0E9CF01F017023 +:106AC000CE7A3328EEFC00A4FEFA05CC1AD8302B7F +:106AD000F01F0172EEF800C0301B16080E9CEF4844 +:106AE00000C0F01F016F2FFDCD3A6FAA3038FACBEE +:106AF000FFE08F0830136F9CEF43006074595D19FD +:106B00008F95507C8F85EF4500788F758FA58FB559 +:106B10008FC58FD55F0A408B1896583B5F88104A07 +:106B2000EA0A1800C23119A919B8F1E910885068A9 +:106B3000103BC1C319988FA8EEF900B05809C09056 +:106B4000069C4019FACAFFE8FACBFFE4F01F015592 +:106B50000D893028F0091800E080011CE08B008DC1 +:106B60003018F0091800E0800123EEF800C02FF87B +:106B7000EF4800C0FE9FFE8D6E785808FE90FEC95B +:106B8000EEF800B05808C080310A400B401CF01FDE +:106B90000146FE91FEBE301BCBCA580EFE90FEF998 +:106BA0006E685808FE91FEF56E185918FE91FEDACF +:106BB000583CFE91FED7CECA6E19C0EB301830A9F2 +:106BC000EF4800608F096F1CF01F01386E485808AD +:106BD000C1A06E5CF01F0136EF4C0044FE90FE59E0 +:106BE0006E5A6E4BF01F01336E58EF480048FE9FFF +:106BF000FE50300B0E9CF01F012AFE9FFE4A30090A +:106C000050494048EF480044FE9FFE436F08580833 +:106C1000FE90FED6301830996FAA8F09EF480060B9 +:106C20007458FACBFFE86F9C5D1819A919B818962B +:106C3000F1E910885848E08B01476F1CF01F011BD9 +:106C4000305CEF450044EF4C00486EA6F01F011881 +:106C5000E08001853029B896B889EF18004AB8C994 +:106C6000B8B8A988B8A8EF4C0044FE9FFE12584C53 +:106C7000FE90FEB3CB8A3038F0091800E08000DCCB +:106C80003048F0091800FE91FF7230188F98C6EB5B +:106C900030181693EF48006030496FA8E04B00FEB3 +:106CA000EFF3000D8F096EC670096F9C5D19069A8F +:106CB0000C9BF01F0101E08100C36F1CF01F00FB63 +:106CC0006FA8EF4500446EA270096F9C5D19503C9F +:106CD000FACCFFE8F01F00F91893C9206EB8E0481D +:106CE00000FEE08101516FA8406670096F9C5D193C +:106CF00030C8505CA376EF480048ECCCFFECF01FA6 +:106D000000EC1891E080012E3FE9B892B8C9302913 +:106D1000B889F8C8FFFBB0A5B085B095F8C9FFF8F1 +:106D20003038B285B295B2A5B2B8504CF8C2FFF473 +:106D30000A96C298661A6ED81438C210405CF01FCA +:106D400000DE049AE4CBFFFC580CC1903FE814C865 +:106D50008689B4896608A988B4986609B4A907C861 +:106D6000B68886A9B6996618A988B6A86619B6B96C +:106D7000F6C2FFFC60082FF62F88810866F35803DF +:106D8000E0800099660B6EC81638CD50661ACD7B30 +:106D90006E185918FE91FEEB40685848FE98FEE7C1 +:106DA0003018EF4800780DC98FB9CE0A406A584AAA +:106DB000FE98FEDD30188F780DC98FB9E04900FECE +:106DC000FE91FED558BAFE98FED2ECC9FFFB139C8B +:106DD000138A13A8F1EA1108F1EC1088ECCBFFF844 +:106DE0008FC817AC17B81789179AF1E91188F1EA1B +:106DF0001108F1EC10888FD8CB9A6FA83089EF4B2F +:106E000000608F09FACBFFE0705A6F9C5D1AFEFAA2 +:106E100002AE302BEEFC00A4F01F00A06F1CF01F90 +:106E200000A30C99EF460044009A6EAB0E9CF01F35 +:106E300000A5C1AB30188F88FE9FFE990C9C069B65 +:106E4000F01F00A1FE90FF3B6FD85808C0906F6AFA +:106E5000580AC06074096EC81039E0800086FEFBD5 +:106E6000026A0E9C3006F01F009A6EB88F186F6C85 +:106E7000580CE08000CD5806C54078B86FBB0E9C1A +:106E80005D18EF4C006C6FB65806E08000CA6F6A60 +:106E90006ECB30188F287429FEFA02381AD91AD30B +:106EA0001ADB302BEEFC00A4F01F007C2FDDFE9FD0 +:106EB000FCF05806C4206F285C78A2B8A988A2A864 +:106EC000FE9FFEA1F0CC0004F0C20005F01F007888 +:106ED0001893FE90FEB45802C120ECCCFFFB300AA0 +:106EE00035DB1938F0C90021F6091800F9B80B5F35 +:106EF000E60A0B082FFA1432FE9BFFF53008E60273 +:106F00000B084F581AD34F5A1AD8302BEEFC00A456 +:106F1000F01F0062069CF01F00652FEDFE9FFE8FA4 +:106F200078380E9C5D18EF4C006CCAEB6FF858086F +:106F3000FE90FCAFFE9FFDAA04983FE910C9B0A6E1 +:106F4000B086B096E4C9FFFCB2B6B286B296B2A6DD +:106F50006F282F88EF480048CB0B0A9CFE9FFE85C8 +:106F60005045FE9FFE5074181033FE91FF7A7499BD +:106F70005809FE90FF766FBB0E9C5D19FE90FF7165 +:106F80003016C74B3058406CEF4800482FACF01F0C +:106F900000481896FE90FE35B89230283039B888EF +:106FA000B8C9504CF8C2FFFB50250A91C1A8661A17 +:106FB0006EB8103AC130403CF01F003FC0F0660888 +:106FC0005808C5A040285808C0913FE904C93018A6 +:106FD000502860082FF12FF8810866F35803C0602D +:106FE000660B580BCE50661ACE7B5801EFF8101284 +:106FF000E5F10E00EFF80012F7B800FFEFF80A1203 +:107000005C78ACB8A988ACA8FE9FFDFD069B6ECC51 +:10701000F01F002DEF4C0058FE90FE51C2DB6FA810 +:107020006F9C70095D196F6870291AD91AD36EC8E0 +:1070300018921AD8302B4AAAEEFC00A4F01F0017B1 +:10704000EF4600588F268F1658025F1B6EB92FDD52 +:1070500058D95F081668EC081800FE90FE30E4F876 +:1070600001605808FE91FC15E4F801685808FE908C +:10707000FE26FE9FFC0E661804C8CACB800265740B +:107080008003D7848002670C8002663C80026370B4 +:10709000800264808003D8A080023A1A800264E4EF +:1070A00080028D9C8000917C800091E8800092009D +:1070B000800091DC80023AD8800271E48003D8F02D +:1070C0008002679C800271908003D9248002634C07 +:1070D0008003D9708003D8D08003D3E48003D930F3 +:1070E000EBCD40801897580CC0E0488BF01F00088B +:1070F0000E9CF01F0008EEFC00ACF01F00070E9C79 +:10710000F01F0006E3CD80808003D9AC8002634C81 +:107110008002653C8002D298800091E8EBCD40F877 +:10712000203D1896169414931295E06C00C8F01F39 +:1071300000151897C1C033C8F946006499F8F9449E +:107140000068F94300A430CA300B1A9CF01F000EEF +:107150006A2850286A0950096A181A9C5018F01FAA +:10716000000BEF4C00AC1A961898C0500E9C2FDD07 +:10717000E3CD80F80E9C1097F01F0005CF8B000028 +:1071800080028F24800091D08002D2C4800091E8D8 +:10719000189948A8700C580CC051C0D878FC580CED +:1071A000C0A078081238CFB1781816385E0C78FC79 +:1071B000580CCF815EFD000000007AB01899489805 +:1071C000700C580CC051C0C878FC580CC09078089E +:1071D0001238CFB178181638CF81782C5EFC5EFD5E +:1071E00000007AB0189B4888700C580CC0A0189901 +:1071F000300A2FFA72F95809CFD1149897085EFC1B +:107200001898CFDB00007AB05EFDD703EBCD40E0ED +:1072100048D81896169570075807C051C0E86EF701 +:107220005807C0B06E2C0C9BF01F0008CF916E0861 +:107230008B086E1CE3CD80E030088B08109CE3CDFA +:1072400080E0000000007AB0800091A0EBCD40C04B +:1072500048B70E966E095809C0B072F88D08129C96 +:1072600072D85808C0705D186E095809CF71E3CD07 +:1072700080C0129CF01F0003CEEB000000007AB02B +:10728000800091E8EBCD40C048D66C485808C0312A +:10729000C0880E987057109CF01F000A5807CFA1A5 +:1072A0006C6CF01F000930086C3C8D68F01F000505 +:1072B0006C8CF01F0004E3CD80C0000000008C90B7 +:1072C000800091E880014544EBCD40F8495718967D +:1072D000169314946E2B12952FFB6E3CA56BF01F2A +:1072E0000012C1D06E28A568F80809066E29A569A4 +:1072F000F8090009932593146E2AF4081504F80878 +:10730000000891336E188F3C2FFA1036EFF69A0171 +:107310008F2A3018300C8FC8E3CD80F8E3CFC0F847 +:1073200000008C90800091F4EBCD404CE0634DD395 +:10733000EA1310621896F01F000DF8030648A7899B +:10734000E06A03E8F20A0248F8080109121CF20A8E +:10735000024AF80304428D1ABF5CA743E60C010CF5 +:107360008D0CE3CD804C0000800145C4EBCD408006 +:10737000202D4A076E495809C2C06E581039C29074 +:107380001A9CF01F001D6E484009700A1439C2444F +:107390007018401BF40901091618C276F00B141F6F +:1073A000E06A03E8F20A024AE0694DD3EA19106282 +:1073B000F0090448A7491619F20A000C580CE08A93 +:1073C000000E300948DA6E6BF01F000D6E488F58C2 +:1073D0002FEDE3CD80801439C030301CCF3B7018C6 +:1073E000401B103BCFB4CD7B2019F028BDC0CD7B16 +:1073F00000008C9080027328800275188001455827 +:10740000D43149A0189516931492604C580CC2B010 +:1074100030060C940C91785778480A38C09018962A +:107420000E9C5807CF91F01F0012089CD8325BF3D6 +:107430005F0A782906395F081448E2081800CF006F +:107440005BF25F0A783904395F081448E2081800D3 +:10745000CE705806E1F70A04EDF71A052FF4F01F75 +:107460000005CDFB1894CE0B00008C908002736C4D +:10747000800091E8EBCD40FC18961695149212947A +:107480001093318CF01F00211897C3A0F01F00202B +:107490006E0A6E1B0C0AEA0B000B8F0A8F1BEE5B49 +:1074A000423FE08A000B2FFAEE3B42408F0A8F1BCF +:1074B000EE5B423FFE99FFF98F248F338F423008F5 +:1074C0008F58494C78495809C1D072081438E0895E +:1074D000001A2F0CC0A8F2CCFFEC72595809C0A0BA +:1074E00072081438E0890007103ACF617218103B17 +:1074F000CF348F599907F01F0008E3CF80FCE3CF0A +:10750000C0FC2F0CCF7B000080009200800273280B +:1075100000008C908002736CEBCD40E0202D49661A +:107520001A9CF01F00166C475807C1F040096E08FE +:107530001238E089001B3005C05840096E08103928 +:10754000C1451039C0516E1940181238C0E56E5847 +:107550008D558D486E3B6E486E2C5D180E9CF01F4D +:1075600000086C475807CEA1F01F00062FEDE3CFAF +:1075700080E0000000008C9080027328800091E879 +:107580008002736CEBCD408049A76E3E580EC2B0AE +:107590006E2A580AC280E08A002B7C081838C27014 +:1075A000FCC9FFF0300BC05872082F091838C050C2 +:1075B0002FFB163AFE99FFFA143BC170201A163AB7 +:1075C000C0F0161AF60C1504A56AFC0C000C2FFB73 +:1075D000A56BFC0B000BF01F00086E2A201A301858 +:1075E0008F2A8FC8E3CD8080E3CD8080300BCE7BA7 +:1075F00000008C90800091C4EBCD406048861895C7 +:10760000334A300B0C9CF01F0007ECCCFFE88D05D3 +:10761000301BF01F0005E3CF8060000000008C905D +:10762000800091D0800144F80050F2010100000078 +:107630000000000000000000F6F800DC5808C05010 +:10764000F8F800F85808C0205EFDF6FB00D0580B93 +:10765000CFC076085808C04176185808CF602F8BE5 +:10766000CF9BD703EBCD4080300B1897F01F001352 +:10767000306A300BEECCFF64F01F0011306A300B23 +:10768000EECCFF5EF01F000E300BEEFC00E0F01FB2 +:10769000000D300BEEFC00E0F01F000BEEF800BC1C +:1076A0005828C030E3CD8080EEFC00E0300BF01FA6 +:1076B0000007E3CD80800000800217D0800091D0C9 +:1076C000800261E8800261D4800261A4EBCD408039 +:1076D0001897F8F800945808C160300BF94B0094E3 +:1076E000F8F800D470985808C040F8FC00C45D1841 +:1076F000486A302B0E9CF01F0006300A0E9C149B2B +:10770000F01F0004E3CD80808003D9D480023A1AB0 +:1077100080022584D431209D500C761558155F9831 +:107720007607169058075F1910693008F00918009D +:10773000E08000B8EEC4FFFF0989F2C6FFFE0C35F9 +:10774000E08500B010923DD33301C168E208180013 +:10775000C2800C0758155F9958075F181268E40833 +:107760001800E080009EEEC4FFFF0989F2C6FFFE0C +:107770000A36E08900960C150F88E6081800CE71CD +:10778000305AF4091800FE98FFE6EECCFFFE306A8E +:107790004DFBF01F0060C0B00F88E2081800CDA1BB +:1077A00009883019F2081800FE98FFD540080E9B92 +:1077B0000C9AF0FC00DCF01F00581897C711400A23 +:1077C000FACBFFFCF4FC00DCF01F0054C21540793A +:1077D0005809C1E040685808E0890007C19840682E +:1077E0001037C1644079EE0B1504F20B000B400911 +:1077F0003008F2FC00DC2FF71099109AF01F0048B7 +:10780000CEF14008301BF0FC00E0F01F004660465F +:10781000605558065F1958155F981069C760ECC429 +:10782000FFFF0989F2C7FFFE0E35C6F53003069249 +:107830000691C1A85802C0610D88330AF4081800E7 +:10784000C3A00E060E1558065F1858155F991268EA +:10785000E2081800C3F0ECC4FFFF0989F2C7FFFE7D +:107860000A37E08900385803CE610D883DDAF40804 +:107870001800CE113058F0091800FE98FFDD306A6C +:107880004A3BECCCFFFEF01F0023CD5140090E9A7D +:107890000C9BF2FC00DC3013F01F0023CCCB600704 +:1078A0005807CB604009300AF2FC00DC149BF01F43 +:1078B000001ACAEB09883019F2081800FE98FFC3B5 +:1078C00040080E9A0C9BF0FC00DC3012F01F0017F1 +:1078D000CB9B5803C0F05802C0B160485808C08024 +:1078E0004008049AF0FC00DC049BF01F00102F7D80 +:1078F000D83260465806CF004009300AF2FC00DC5E +:10790000149BF01F0009CE8B3002CF5B80027628DB +:107910008000917C8002B5EC8002C04C8002938094 +:10792000800255968002B58C8002B52CD431FACDF8 +:10793000009018911497586BE08B00C4FEF807482C +:10794000F00B032F580AC0A0F8F800907009739A42 +:10795000580AC0410E9BF01F01CD304B029CF01F16 +:1079600001CCE2F801185808E0810312FAC7FF942D +:10797000E2F800D470285808C4C00E9BE2FC00C492 +:107980005D18C475E2C6FF64306A0C9B0E9CF01F44 +:1079900001C1C3F0FB3800711AD8FB3900741AD941 +:1079A000FB3800771AD8FB39007A1AD9FB38007DEA +:1079B0001AD8FB390080FEFA06DE1AD9301B029C69 +:1079C000F01F01B6306A0E9B0C9CF01F01B5306AA7 +:1079D000300BE2CCFF5EF01F01B3E2FA00BC2FAD2A +:1079E000584A5F08590A5F091248C081588AE080E6 +:1079F000030C0E9B029CF01F01ACE2F80090704952 +:107A00005819E08102D5E2F800B05808E08002D0B1 +:107A1000FB3800711AD8FB3900741AD9FB3800778B +:107A20001AD8FB39007A1AD9FB38007D1AD8FB39ED +:107A30000080302B1AD9FEFA0672029CF01F0197C3 +:107A4000E2FB00B02FAD580BC040029CF01F019824 +:107A50000E9BE2FC00DCF01F0197622CF01F0196E8 +:107A6000300BE2FC00E0F01F0195300BE2FC00E07F +:107A7000F01F0193E2F800BC5828C061300BE2FC13 +:107A800000E0F01F0190301BE2FC00E0F01F018BD2 +:107A9000300BE34B00F4E2F900BC59095F0A584986 +:107AA0005F081448F6081800E0800216029CF01FD8 +:107AB0000186307B029CF01F0176029CF01F01833F +:107AC0002DCDD832580ACFD0149B7439F8FC00DC85 +:107AD000742AF01F017F2DCDD832F8FB00BC590B62 +:107AE000CF00F8F800E85858E08002355838E08BAD +:107AF0000234E2C7FF64306AFEFB05D80E9C2F8B70 +:107B0000F01F0164EE0B1710E06800A2E3D8E00B51 +:107B1000029CF01F0171E2FC00DCF01F0170FEFA14 +:107B200005BE302B029CF01F015DE2FA00BC584AF2 +:107B30005F08590A5F091248C0B1588AE08002976D +:107B400030080E9BE3480104029CF01F0157029C81 +:107B5000F01F01642DCDD832FEFA058C303BF01FAA +:107B6000014F5807E08002806E0858085F1B169A84 +:107B7000E2FC00DC301BF01F015DFACCFF94F01F2B +:107B8000015CE2F800985808E08001D541B9F2089C +:107B90000108E048003CE08A01A6E34900982DCDA9 +:107BA000D832F01F0154E08501EBE2F900907248F1 +:107BB0005828C870E2F800AC5808C831E2FA00CC86 +:107BC0001094500AE2F000D072285808E08A00A908 +:107BD000300850187218401AF00A032850585800FC +:107BE000E08A0097400530020A96C11808973003D2 +:107BF00030142FF2ECC6FF6404305F983009E9E8D6 +:107C00000008F2081800E08000970E940C9B029C7C +:107C10000C93F01F0139C05078385818FE99FFE8CE +:107C20006D585808C051ECF800805808CE004059F3 +:107C30005809CDD0ECC8FFFAECCAFFA8ECC9FFD4B4 +:107C40005048502A50394057C0486E175807CCF05A +:107C5000EEF801945808CFA16CAA6E58103ACF6183 +:107C60006E4B404CF01F010BCF116E885808E0811D +:107C700000E16F6AEDBA0001C061ECFB0080580BB7 +:107C8000E08100E3F1DAC001300AF4081800CDE029 +:107C90006D5B580BCDB0FACAFF94403CF01F011742 +:107CA000CD516F6841B91268CD106F3841C9126863 +:107CB000CCD06F4841D91268CC906F5841E9126816 +:107CC000CC5058065F04C96B149BF01F00F02DCDFB +:107CD000D832149B2EACF01F010A1896FE91FEF2CA +:107CE0006F9B580BE080012A581BFE91FEEBE34B83 +:107CF00000D8029CF01F00FB622CF01F01028326BB +:107D0000CE0A5803E08100BF0E94E2F900904018BB +:107D10002FF850187228401A103AFE95FF5DE2F8CD +:107D200001085808E0800121029CF01F00F7E2F9E9 +:107D30000090C4BB5804CE600E923006C108049770 +:107D4000089930032FF6EAC5FF640C305F98F3E81A +:107D500000083009F2081800CD500E920A9B029CD0 +:107D60000A93F01F00E5C05078385818FE99FFE9D3 +:107D700040585808CE50EACAFFFA4057506AC078B7 +:107D80006AA8103AC5006E175807CDA0EEF8019406 +:107D90005808CFA16E5A580ACF416E885808C1E1E1 +:107DA0006F5BEDBB0002C040EDBB0003CED1F1DB49 +:107DB000C002C0806B585808CE71EAF8008058089D +:107DC000CE31EEF8014C5808C110EB190088EDB91E +:107DD0000001CDA058055F09CB6B306AEECBFFE800 +:107DE0000A9CF01F00ACCD01CDCB1099EEC8FECCA3 +:107DF0002FF9700A580AC2612FC85849CFA1EDBBAC +:107E00000003C071EEF800F0F1D8C002F9BA010128 +:107E1000EB190088EDB90004C030580A5F0A580A0F +:107E2000CB30CD6B6E4B406CF01F009ACAD1CB6B40 +:107E3000306AEECBFFE80C9CF01F0096FE91FF0726 +:107E4000C19B301ACDDBFACAFF94402CF01F00AB67 +:107E5000C0306F6AC18B6F6A41B8F5E80008FE90C8 +:107E6000FF136F3841C91268FE90FF0E6F4841D969 +:107E70001268FE90FF096F5841E91268FE90FF04F6 +:107E8000C21BE2F800A85808C131306AE2CBFF6497 +:107E9000069CF01F0080C170E2F800E85838C081ED +:107EA000306AE2CBFF5E069CF01F007AC0C00E9BDA +:107EB000029CF01F007FE08100B50E9A069B029C99 +:107EC000F01F0092009A400BE2FC00DCF01F0090D3 +:107ED000FE9FFDF8169A029C30ABF01F008EFE9FAD +:107EE000FDEE3017FEFA0230303B029CE34700946F +:107EF000F01F006AE06B2710300CF01F0088E2F8DA +:107F000000D470985808C0500E9BE2FC00C45D1865 +:107F100030EB029CF01F0082300A029BFEFC020440 +:107F2000F01F0081300802994FEA109B33CCF01FFC +:107F3000007F41B9FE9FFE33E2F800D85808FE905A +:107F4000FDC1E34B00D8029C301BF01F0079FE9F5F +:107F5000FDB9582BC780E07A86A0300B029CF01F39 +:107F60000075FE9FFDC8305BE2F801105818C7206D +:107F7000029C300AF01F006FFE9FFDA4E2F9009002 +:107F800072485828FE90FD9E301BCEFBFAC7FF9426 +:107F9000E2C6FF64306A0C9B0E9CF01F0041E2F8C1 +:107FA00001185808FE91FCF8FE9FFCE4029CF01FAB +:107FB00000621896C230F8FB0194580BC1F1795851 +:107FC000E2180013C351189B029CF01F005CE2F8FA +:107FD00000B05808C0701036C050E2FC00E0F01F3E +:107FE0000058E2FC00DC0C9BE34600B0F01F00559B +:107FF000029CF01F0055FE9FFD0D029C303BF01FC0 +:108000000053FE9FFD5FE2F800B05808FE90FCF3BD +:10801000F0F800F0F1D8C002FE91FCEDFE9FFCEFFD +:10802000029C300A30ABF01F0043FE9FFD4B350928 +:10803000FAC8FF70189A10D9029CFAC9FFE4F01F21 +:108040000044CC6B4C3AF01F0015E2F800E8FE9FAC +:10805000FD4F72485818F9B80002E3F80A44F9BB1A +:108060000000C87B0E9BFE9FFD84E2F800B058081C +:10807000FE90FD68F0F800F0F1D8C002FE91FD62BC +:10808000FE9FFD678003D9B880027714800217D065 +:108090008000917C8003D9F880023A1A800091DC3C +:1080A000800091D0800226948003DA3880027638EE +:1080B0008002BA4C80028172800261E8800261D441 +:1080C000800261A480021CE080021DB88002979C9F +:1080D0008002762880021AE08002BA1C8003DAA8A7 +:1080E000800276648003DAE48002D19C80028F549F +:1080F00080021E84800218F88002BD68800091A072 +:10810000800281748002189C800230DC800298A476 +:108110008002246C8003DB0480028F1C800228D83C +:10812000800276CC800274008002747480022794EE +:10813000800225848002195C800222A480025748B4 +:108140008002B9D48002237080022FCC80021F30BD +:108150008003DA68580C5E0E5E1DD401201D3008C5 +:10816000767C3009BA881A9A7668129B5D182FFDC2 +:10817000D8025EFCEBCD40801897580CC090789CDC +:10818000580CC035F01F00040E9CF01F0004E3CD16 +:108190008080000080027584800091E8EBCD40F87B +:1081A0001896129510944063328CF01F000B1897AC +:1081B000C0F00C9B311AF01F00093FFC8F658F74D3 +:1081C0008F838F9C30090E9A485BF01F00060E9C2F +:1081D000E3CD80F880028F24800091AC8002815A28 +:1081E000800272C8D4011698306AF8CBFFEF109C59 +:1081F000F01F0002D80A0000800091DCD431213D3C +:1082000076FE511E760A503A761950497628505813 +:10821000763E506E764A507A7669508976785098D4 +:10822000768E50AE769A50BA76B950D976C850E864 +:1082300076DE189850FEF8C9FFF876EA510A7654AF +:1082400076AB500C5019E02BA44F50CB110EF8CB4D +:10825000FFF45008512E403A700340487205502BED +:10826000E069A478EA19D76AFC0900091409760ABA +:10827000E06BB756EA1BE8C7F40B000B100BF5E5F3 +:108280002008066814581009E06870DBEA182420FA +:10829000EBE3200AF20E1507FDE9139E060EFDEA38 +:1082A000000A0A5A1005140BFDE32008F606150C07 +:1082B000EDEB13461C06EDE800080658405AE0694D +:1082C000CEEEEA19C1BD14051005EDEE2008EA0B4B +:1082D0001511F7E512FB0C0BF7E800081C58120308 +:1082E0004069120310034078E6051516E0690FAFE8 +:1082F000EA19F57CEBE312A5F00900091605F7E68B +:108300002008EBE800080C581C091009EBEB2008CA +:10831000F2031507E7E913930A03E7E80008165884 +:10832000E06AC62AEA1A4787E80A000A0C0A100A15 +:10833000E7E52008F402150CE5EA13420602E5E839 +:1083400000080A58408EE0694613EA19A830FC0973 +:10835000000916091009E5E32008F2061511EDE9F8 +:1083600012F60406EDE800080658409AE06B950105 +:10837000EA1BFD46F40B000B0A0B100B40A840C98A +:10838000F60E1516FE395BB1FDEB12AEE06A98D819 +:10839000EA1A69800C0E40BBF00A000AEDE22008E0 +:1083A000FDE80008045840C1060A50C9100AE069F7 +:1083B000F7AFEA198B44FDE62008F6090009F40B33 +:1083C0001507F7EA139B1C0BF7E800080C58F7EEAB +:1083D000200A0C0104091009F206150CEDE91346F8 +:1083E0001606EDEB2008EDEA000A1C5A1401E2051E +:1083F0001511EBE112F50C05EBE80008165840DA10 +:10840000E069D7BEEA19895CF40900091C09100962 +:1084100040E8F20E1516E06A1122EA1A6B90FDE9A7 +:1084200012AEF00A000A0A0EEBE62008160AFDE872 +:10843000000840FB0C58E0697193EA19FD98100A96 +:10844000F6090009FDE52008F40B1507F7EA139B70 +:108450001C0BF7E800080A580C0910094108F2063D +:10846000150CE06A438EEA1AA679EDE91346F00A84 +:10847000000A1606F7EE2008EDE800081C580A0A64 +:10848000100A4118F4051511E0690821EA1949B4E8 +:10849000EBEA12F5F00900090C05EDEB2008EBE81A +:1084A000000816581C091009F2031516E7E912A373 +:1084B0000A03E7E520080C680A58404EE06A256286 +:1084C000EA1AF61EFC0A000A160A408B100A40D867 +:1084D000F40E1505E069B340EA19C040FDEA13BE89 +:1084E000F6090009060E403B0C09E0665A51EA16EF +:1084F000265EF0060006FDE320080A68065810090B +:10850000E062C7AAEA12E9B6F6020002F20B150908 +:10851000F7E9137B41191C0BF7EE200806681C587D +:108520000A0606021006E063E681EA13D8A1F20308 +:108530000003EC09150EF3E613291609F3EB2008E6 +:108540001C68165840CA10024078E065105DEA15B4 +:10855000D62FE0611453EA110244E8050005F40146 +:1085600000011C051601E40A1514E06EFBC8EA1EA2 +:10857000E7D3F5E212CAF00E000E120AF5E9200860 +:10858000166840BB125812031005E066CDE6EA16E5 +:1085900021E1F6060006EA0B1505F7E513BB140BFF +:1085A000F7EA2008126841091458E06507D6EA1571 +:1085B000C3371001F2050005E2091509F3E113794B +:1085C0001609F3EB20081468165810034068140EBF +:1085D0001606E60A150EE0620D87EA12F4D5F5E3F9 +:1085E000132AF0020002120AF5E92008166840ABCF +:1085F00012581205100EE06314EDEA13455AF60303 +:108600000003FC0B1514F7EE12CB140BF7EA20084D +:10861000126840F91458E061E905EA11A9E310066F +:10862000F2010001EC091505F3E613B91609F3EBA5 +:10863000200814681658100540581402E066A3F884 +:10864000EA16FCEFEA0A1509F0060006F5E5137ACA +:10865000120AF5E9200816681258409E1002160307 +:10866000E40B150EF7E2132B140BF7EA200812683F +:108670001458E06502D9EA15676F1003FC05000580 +:10868000E60E1514FDE312CE160EFDEB200814685D +:1086900016581201100140A840E91406E060F68166 +:1086A000EA108771E20A1505F0000000F5E113BA3F +:1086B0001C0AF5EE200816681C58E0624C8AEA1283 +:1086C0008D2A1006F2020002EC091509F3E613796F +:1086D0001409F3EA20081C681458160540DB10053D +:1086E0004108E434C6BEE0616122EA116D9DE80AEA +:1086F0000007F6010001E066380CEA16FDE5F00619 +:108700000006EA08150EF1E513281208F1E9200B1E +:10871000F7EA000A125A1C021402407A404E120074 +:108720001001E063CFA9EA134BDEF4030003E40A6F +:108730001514F5E212CA100AF5EB200BF5E8200833 +:10874000EE0B000BF6091504F3EB13C914091258CC +:1087500014061000F3EA200AE065EA44EA15A4BE14 +:10876000E008150BFC050005F1E01358120512088E +:10877000105A10031401F1E92009E20B1510F7E17A +:10878000130B100B1659F7E820081206EC0E1517FC +:10879000FDE6129E160E1C5810054098FDEB200AAF +:1087A000EA061504E0694B60EA19F6BBEDE513C66D +:1087B000F00900091C0616090C5AEDEE20081403F6 +:1087C00040CBE605150BEBE313550C050A58E06AA0 +:1087D000BC70EA1ABEBF1009F60A000AEBE62008D0 +:1087E000F20B1510F7E9130B0A0B16581C0A100AA6 +:1087F00040F8F40E1517E0697EC6EA19289BFDEAD9 +:10880000129EF0090009160EF7E520081C580C0905 +:1088100010094038F2061504E06A27FAEA1AEAA1BC +:10882000EDE913C6F00A000A1C06FDEB20080C58FF +:108830000A0A100A4068F405150BE0693085EA1948 +:10884000D4EFEBEA1355F00900090C05EDEE200812 +:1088500016090A58408B1009E06A1D05EA1A0488B7 +:10886000EBE62008F60A000AF20B1510F7E9130BE5 +:108870000A0B16581C0A100A40B8F40E1517E069C6 +:10888000D039EA19D9D4FDEA129EF0090009160E72 +:10889000F7E520081C580C09100940E8F2061504F9 +:1088A000E06A99E5EA1AE6DBEDE913C6F00A000A88 +:1088B0001C06FDEB20080C580A0A100A4118F405A2 +:1088C000150BE0697CF8EA191FA2EBEA1355F009D1 +:1088D00000090C05EDEE200816090A58405B100946 +:1088E000E06A5665EA1AC4ACEBE62008F60A000A0C +:1088F000F20B15101C0AF7E9130BE0692244EA1980 +:10890000F4290A0B1658100A4032F40E15171202F9 +:10891000FDEA129EEA0811FF160E409AFDE81008C3 +:10892000E069FF97EA19432A1658F40900090A0971 +:108930000C0241061002F60811FFE40A1506F5E2E2 +:1089400013AA1C0AF5E810081C58F2080005E06993 +:1089500023A7EA19AB941206FC0811FFEC0B000BDD +:10896000EA06150AEDE513661406EDE8100814583A +:10897000F6080008E069A039EA19FC93F00B150F1E +:10898000FA243942F7E8131BE80900050C0BEA0E3C +:10899000000EF40811FFF7E810080C58E06959C3FD +:1089A000EA19655BFC08000540E2EA0E15151202A3 +:1089B000FDE512BEEC0811FF160EFDE81008165872 +:1089C000E40A000AE069CC92EA198F0CF40800026C +:1089D0004068F00900090C09E40A1506F60811FFC1 +:1089E000F5E213AA1C0AF5E810081C58F208000268 +:1089F000E069F47DEA19FFEF40C1FC0811FF1201A4 +:108A0000E406150AE20B000BE0695DD1EA198584E2 +:108A1000EDE213661406EDE8100814584045F60818 +:108A200000011205E20B150FEA0E000EF7E1131B11 +:108A3000F40811FF0C0BE0697E4FEA196FA8F7E804 +:108A4000100840A30C581203E60A000AFC080005AF +:108A5000EC0811FFEA0E1515FDE512BE160EFDE835 +:108A600010081658F4080003411AF60811FFE069CF +:108A7000E6E0EA19FE2CF4090009E60A15060C09DD +:108A8000F5E313AA1C0AF5E810081C58F2080003C5 +:108A90004088E0694314EA19A301F00900091609A6 +:108AA000FC0811FF40FBE605150AEBE3136514050E +:108AB000EBE810081458F2080008E06911A1EA195F +:108AC0004E08F6090009F20E000EF006150FE069D7 +:108AD0007E82EA19F753EDE81316F40811FF0A062F +:108AE000EDE810080A58FC080001407E120EEA0862 +:108AF00011FFFC0A000AE20E1515FDE112BE0C0E74 +:108B0000FDE810080C58F40800094128F20A15067F +:108B1000F5E913AA1C0AF4080009E068F235EA181E +:108B2000BD3A990940D91009EC0811FFF205000B74 +:108B3000F5E8100840091C58720CF6080001E069BD +:108B4000D2BBEA192AD740581208E20B150AF006E0 +:108B50000009F7E1136BFC0811FF140BF7E810088C +:108B60001458F208000640B8E069D391EA19EB8680 +:108B7000F0090009F20E0008F40A11FF400EEC099A +:108B8000150FF3E613191609F20C000CF3EA100A9C +:108B9000165AF00A0006EC081515F1E612B8100C8A +:108BA0009D0C401A7408120895084028700916098F +:108BB00091092EDDD832D703EBCD40E03809764855 +:108BC000F1D8C066F608000AF56900181895F00A91 +:108BD000113F1697F6080008F0CCFFE7587AE08BB3 +:108BE0000056300BF01F002DEEC6FFE8EECCFFA8BC +:108BF0000C9B1798178917BAF3E8108917A8F1EAA0 +:108C00001088F3E8110916A9183BCF410C9B0E9C64 +:108C1000F01F0023338A300B0C9CF01F00200C9BAC +:108C2000ECCCFFC81798178917BAF3E8108917A872 +:108C3000F1EA1088F3E8110916A9183BCF416E48F4 +:108C40006E590C9B0E9CEF480050EF490054F01FEA +:108C500000140E9BEECCFFF01798178917BAF3E8B3 +:108C6000108917A8F1EA1088F3E8110916A9183B32 +:108C7000CF410E9B0A9C310AF01F000A0E9C304A1D +:108C8000300BF01F0006E3CD80E0208A300BEEC6EB +:108C9000FFE8F01F0002CC4B800091D0800281FCE5 +:108CA000800091DCEBCD40FC1493784AF40300384B +:108CB000103AF9F98005F9F9B005F7B90BFFF9F9A0 +:108CC000BA059948E608161DF20800089958189444 +:108CD0001692F1DAC066C381F8C5FFE8E043003FB1 +:108CE000E088002C3006EAC7FFC0E406000B340A17 +:108CF0000A9CF01F00290A9B1798178917BAF3E8F6 +:108D0000108917A8F1EA1088F3E8110916A90E3B9B +:108D1000CF410A9B089CF01F00212C06E6060108A3 +:108D2000E048003FFE9BFFE3E6C80040E7D8C006EE +:108D3000E018FFC02C081002069A049B0A9CF01F42 +:108D40000016E3CD80FCF00711402E88100C0E3386 +:108D5000C1D30E9AF01F0010E8C5FFE8E8CCFFA8C9 +:108D60000A9B1798178917BAF3E8108917A8F1EA30 +:108D70001088F3E8110916A9183BCF410E130E0213 +:108D80000A9B089CF01F0005CAAB069AF01F000260 +:108D9000E3CD80FC800091DC800281FCEBCD40FCC7 +:108DA000216DE0682301EA186745E06EAB89EA1E91 +:108DB000EFCD30075008501EE068DCFEEA1898BA84 +:108DC000E06E5476EA1E1032504750575028503EFD +:108DD00018931292580CC140149416951A962FF7B6 +:108DE000090A0B0B1A9CF01F00080E33FE9BFFF9BB +:108DF0001A9B049CF01F00052EADE3CD80FC1A9653 +:108E0000CF8B000080028CA480028BB8D431FACDC5 +:108E10000088501C500B14931292109142B0585A73 +:108E2000E08B0056E04B0040E08B0054FAC4FFF8A2 +:108E3000340A300B089CF01F002E400A401B089C8F +:108E40000896F01F002CFAC5FFB808970D88EC189B +:108E500000360CC80A36CFB1340851845128580363 +:108E6000C110FACCFF9CFACBFFB4300AE60E150213 +:108E7000E40A030818A8E20A030916A92FCA1C3A33 +:108E8000CF81E6CCFFFF00990A9AFAC3FFA0069BA8 +:108E9000F01F0019340A300B089CF01F0015400A1F +:108EA000401B089CF01F00130F88EC18005C0EC8D4 +:108EB0000C37CFB1310C3408513C5184519000999A +:108EC0000A9A069B5128302CF01F000B2DEDD8324A +:108ED000FAC6FF881A9A0C99FACBFFFC301CF01FD7 +:108EE0000006310850165008CA2B0000800091D0AF +:108EF000800091DC80028D9CD401202D501A5009F5 +:108F0000301A1AD8FAC9FFF8FAC8FFFCF01F00039C +:108F10002FFD2FEDD802000080028E0C5EFC5EFE5D +:108F20005EFCD703EBCD40C01896F01F00061897E3 +:108F3000C0500C9A300BF01F00040E9CE3CD80C093 +:108F400080009200800091D0D401F01F0002D80A66 +:108F500080014600D401F8CBFFFCF01F0002D80AC4 +:108F6000800145D4780C580C5E0C3008F948004C50 +:108F7000780C580CCFC15EFC580CF9FC10435EFC19 +:108F8000580CF9B80100F9F81A435EFCEBCD40E04B +:108F9000189716961495314CF01F0005F9F71A032F +:108FA000F9F61A04F9F51A02E3CD80E080028F2465 +:108FB000EBCD40E01696149578075807C160580627 +:108FC000C080306A0C9BEECCFFC0F01F000AC0A12D +:108FD0005805C0B0EECCFFFC310A0A9BF01F00051B +:108FE000C0406E075807CEC10E9CE3CD80E0000064 +:108FF0008000917CEBCD4040781820181696991887 +:10900000784B78390C9C5D190C9CF01F0003E3CD64 +:1090100080400000800091E8EBCD4080202D300A98 +:109020001897189B49BCF01F001C300A0E9B49BCC6 +:10903000F01F00196E085808C2201A9CF01F001873 +:109040006E08400A70EC0E993008141C109BF8084A +:109050000C4C490A2FFCF01F00136E2BF6FA010C82 +:10906000580AC1006E08400A712C0E99141C300871 +:1090700048AAF8080C4C109BF01F000A2FEDE3CD16 +:109080008080F6CBFEB80E9CF01F0007CF80CEBBD1 +:10909000800290E4800274008002913080028F543C +:1090A0008002747480028FB0EBCD40C01896580CCB +:1090B000C1407809300899085809C031C0880E9914 +:1090C0007207129CF01F00065807CFA10C9CF01FDE +:1090D00000050C9CF01F0002E3CD80C0800091E8E9 +:1090E00080029018EBCD4080202D18971A9CF01F1D +:1090F000000E6E0A580AC0C1C1087408149B8F087C +:10910000300A0E9CF01F00096E0A580AC06074E90C +:1091100040081039FE9AFFF30E9CF01F00052FED5A +:10912000E3CD808080028F5480028FF480029018FB +:10913000D4013008782AF548010C7829F2FC0104A2 +:10914000F01F0002D8020000800255ACD43120CDBF +:109150001096782814941293E04A00205FBAF0F930 +:109160000160189758295F18169241511448C05051 +:1091700030060C9C2F4DD832354CF01F00621890F1 +:10918000CF80089A049B2ECCF01F005F81D4FAC9CF +:10919000FFE450965083FAC5FFF84DC81AD5303A0F +:1091A000089B049C4DA65086F01F005AE0C8FFFCA7 +:1091B0000A9B5018310A109CF01F0053FACCFFD4C0 +:1091C000F01F0055E0C8FFC0502840BC6E29F2F8DF +:1091D0000150F808000881E86E2AF4FB0150F4F908 +:1091E0000154E06A851FEA1A51EBB739F20A0648C2 +:1091F000301AA599180981FAE1490048306A402CD3 +:10920000069BF01F0041E141004C2FFD6E06580601 +:10921000C2903005C0680C956C0C580CC58018962F +:10922000ECCBFFC0306A069CF01F003CCF516CD8DD +:109230000838C5505805EDF80000EFF80A00EDF8C1 +:109240001000EBF81A006E29F2F8010C0C38F9B88E +:109250000000F3F80A430C9B301A0E9CF01F0030FC +:109260006E066E1859F8E08A00155806C3200C9A4D +:1092700015088F086E28F0F90128ECCBFFC0720C9E +:1092800072F85D180C9B300A0E9CF01F00256E06CC +:109290005806C1F060EA6CE8103AC074C1A872E8E0 +:1092A0001438E089000612966C095809CF9181099B +:1092B0008D006E2C6E18400A401B2FF88F18F8F99D +:1092C00001280096720C72E85D18C54B6E06CCAB97 +:1092D00081068F000E9CF01F0013CECB089A049BD2 +:1092E000ECCCFFECF01F000DCA61310A400BECCC56 +:1092F000FFFCF01F000AC9F1009CF01F000BC3AB7C +:1093000080028F24800091DC8003DB248003DB9CBF +:109310008002B14480028F548000917C80028FF4DF +:1093200080029018800091E8EBCD4080189E78076D +:10933000580BC06116970E9CE3CD80806E075807CE +:10934000CFB06F381638CFB11AD814997C286EDA9E +:10935000F0C8FEC8EECBFFEC1C9CF01F00092FFDEF +:10936000580CF8071700EFF8100EF9F81A0EF80766 +:109370001710F9B80101F9F81A14CDEB8002914CDD +:10938000EBCD40FC1897300CEF4C010C1496129268 +:109390001094EEF50108580BC080169A189B0A9C91 +:1093A000F01F0016EF4C010C58065F13EEFC010C89 +:1093B000580C5F09F3E30008C16158045F18F3E833 +:1093C0000008C0A05803C0800C9A049B0A9CF01FA0 +:1093D000000CEF4C010C580CF9BC00FFF9BC01006B +:1093E000E3CD80FC300A0C9B0A9CF01F00045F094F +:1093F000EF4C010CCE3B000080028FB0800293281E +:109400000000000000000000EBCD4080580CC100BF +:10941000F8F901103008F94801105809C031C08826 +:109420000E997207129CF01F00045807CFA1E3CDDC +:1094300080800000800091E8EBCD40C01897580C68 +:10944000C250F8F801245808C210189B300A491C71 +:10945000F01F0011EEFC0124F01F00103006306AEE +:109460000C9BEF460124EECCFEE4F01F000DEEFC59 +:109470000114F01F000CEF460114EEFC0118580C0B +:10948000C050F01F0008EF460118E3CD80C0000077 +:109490008002996880027400800256EC800091D0AE +:1094A00080028174EBCD40F8205D189716951494D6 +:1094B000F8F601245806C0503FFC2FBDE3CD80F8DC +:1094C000F8FA012817D81AD817C91AD917B81AD80C +:1094D00017A91AD917981AD81789301B1AD9740CDA +:1094E0004C6AF01F0047EEC3FEC81AD60E984C59BE +:1094F000E06A88C7069BEEFC0140F01F0043EF4C7A +:1095000001142F9D580CC6F0EEFC0144580CC0E02D +:109510001AD6069B0E984BB9E06A88C7F01F003A2E +:10952000EF4C01182FFD580CC5E0340CF01F00372C +:109530001896C5B0EEF8012870099909EEF80128CF +:109540003019700A4B2899199928994A99374B185C +:10955000EEF9012C998899599967EEF8012871095B +:1095600099A9EEF80128711999B9F01F002BEF4C59 +:109570000124C3D0314A300B1A9CF01F0028EEF9A9 +:1095800001305804E9F8105FFBF81A03300650293F +:109590001A9A089B50165006EEFC0124F01F00207A +:1095A000306830593FFAEEFC0124149BF01F001D77 +:1095B000306A0A9BEECCFEE4F01F001B301BEEFC71 +:1095C0000124F01F001A301BEEFC0124F01F0018CC +:1095D0000C980E99497A0C9BEEFC0158F01F00166E +:1095E0000C9CC6CB3FECC6AB3FCCC68B0C9CF01F93 +:1095F00000133FDCC63B00008003DBA880023A1A60 +:1096000080029AF08002819C80028F2480029A243A +:10961000800299C48002609C800091D08002581C16 +:1096200080025564800091DC800261D4800261E890 +:109630008002996880027474800091E8EBCD40FC50 +:109640001897F8F801105808C6F0F8F801284CAA45 +:10965000700C301BF01F0049EEF801245808C0A020 +:10966000EEF801284C6A700C301BF01F0044E3CD6B +:1096700080FCEEF801605828CF41EEF80128700C0C +:1096800070295D19587CCED1EEF8016C5818CE9136 +:10969000EEF501105805C410EEC2FEB8EAC3FFFC97 +:1096A000300A069BEEFC0108F01F0036306A189461 +:1096B000069B049CF01F0034C0605804C3706948C6 +:1096C0005808C341EB3800091AD8EB3800081AD8FB +:1096D0000BF81AD80BE8EEF601281AD80BD91AD9CC +:1096E0000BC84AAA1AD8301B6C0CF01F00242FADEF +:1096F0005804C090EEF90128E8CAFFFC069B720CE2 +:1097000072E85D186A080A9CEF480110F01F0020FB +:10971000EEF501105805CC31EEF8012849DA700C4D +:10972000301BF01F0016E3CD80FCEB3800091AD87F +:10973000EB380008EEF601281AD80BF81AD80BE817 +:109740001AD80BD91AD90BC8493A1AD8301B6C0C45 +:10975000F01F000A6A08069BEEFA0134EF48011078 +:109760000E9CF01F000E0A9CF01F00092FADE3CDE8 +:1097700080FC00008003DBEC80023A1A8003DC14DA +:1097800080028FB08000917C8003DCA0800091E893 +:109790008003DCFC8003DC4C800294A4EBCD40F819 +:1097A0001695189414931297F8FB0134580BC05077 +:1097B000F6F801485808C5D15807C4C0E8F60110AA +:1097C0005806C4A03007C0680C976C0C580CC440F5 +:1097D0001896306A0A9BECCCFFFCF01F002CCF518E +:1097E0005807EDF81000EFF81A00EDF80000E9F85E +:1097F0000A44E04303E7E08A003BE8FA0110580A14 +:10980000C4006C3B74381638C065C3B8723816385B +:10981000C054129A74095809CFA18D0995061AD31C +:109820000BD80B8CE8F601281AD80BC91AD90BB83B +:109830001AD80BA91AD90B98495A1AD8301B1ADC16 +:109840006C0CF01F0014089CF01F00132F9DE3CD3B +:1098500080F8E3CD80F8310CF01F00101896C0F0AE +:10986000306A0A9BECCCFFFCF01F000D8D33CC6BF3 +:109870000A9AF8FC0108F01F000BC9FBE3CD80F841 +:109880008D0AE9460110CCCB8000917C8003DD2459 +:1098900080023A1A8002963C80028F24800091DC7C +:1098A00080029328EBCD40F8208D169414971895DC +:1098B000F8F801345808C470F01F0027EEC6000104 +:1098C000C426E068009C1A93EC080248E8080007E8 +:1098D000EAC4FEB8C0682016EEC7009C5806C3351F +:1098E000EAF901346EAA7258103ACF61724BEECC8D +:1098F000FFFAF01F001ACF01306A089B0E9CF01F80 +:109900000017CEA0EEFB0080580BCE601A9AEECC6A +:10991000FFA8F01F0013CE01189A0E9BEAFC010865 +:10992000F01F0010C13079485808CD604048EDB8AC +:109930000000CD213019E06A03E80E9B0A9CF01F5D +:10994000000ACCAB2F8DE3CD80F84048F3D8C0019E +:10995000CF3B0000800294088000917C8002BD68AB +:1099600080028FB08002979CEBCD4060F9380121D6 +:10997000F8F501281AD8F93901201AD9F938011F48 +:109980001AD8F939011E1AD9F938011D1AD8F9392E +:10999000011C489A1AD9302B18966A0CF01F000740 +:1099A0000C9CF01F00070C9CF01F00062FADE3CDB0 +:1099B000806000008003DD6C80023A1A80029438D7 +:1099C0008002963CEBCD40E0201D1897F8F801147A +:1099D0005808C0613FF60C9C2FFDE3CD80E0F8F8FD +:1099E0000128300C5C791ADC5C5B700C70D6FAC80C +:1099F000FFFC5D162FFD1895580CCED01899400825 +:109A0000E06A88C7EECBFEE4EEFC0114F01F000410 +:109A100018960A9CF01F0003CDFB000080028154C1 +:109A2000800091E8EBCD40E0208D14971896580BFC +:109A3000C2614A781AD8EEF60128EF3801211AD807 +:109A4000EF3901201AD9EF38011F1AD8EF39011E5A +:109A50001AD9EF38011D1AD8EF39011C49DA1AD981 +:109A6000302B6C0CF01F001C0E9CF01F001C0E9C79 +:109A7000F01F001B2F9D2F8DE3CD80E01A95320A39 +:109A80001A9BF01F0018C1211A9B320AEEF801340C +:109A90008F8A1AD8EEC9FEE4EEC8FEC8EEFC0108B3 +:109AA000F01F001149182FFDCC6B0C9C310A1A9B3A +:109AB000F01F000CC090EEF8012848DA700C302B33 +:109AC000F01F0005CB7B1A9B310ACE1B8003AD2C07 +:109AD0008003DE1880023A1A800294388002963C95 +:109AE000800257CC8002914C8003DDB48003DDCC32 +:109AF000EBCD40F81897169514931294F8F80124BA +:109B00005808C090F8C6FEE4306A48BB0C9CF01FB1 +:109B1000000BC031E3CD80F80C9C306A0A9BF01F2B +:109B20000007CF910899069A0A9BEEFC0124F01FCA +:109B30000004CF1B800294008000917C800261FCB5 +:109B4000EBCD40F8FACD01001293109418961697B9 +:109B5000149530081A99F2080B082FF8E048010014 +:109B6000CFB1300E1A9C1C9BEC0B0709198AFC0A1A +:109B700000081208FAC9FF00FDD8C0081C09F33814 +:109B8000FF0018C8F36AFF002FFBFAC8FF000E3B66 +:109B9000F9BB0200103CCE915805C4C0300E1C9792 +:109BA0001C9CF8C8FFFFFACAFF00F9D8C008180AC1 +:109BB000F53BFF00F60E0008FAC9FF00FDD8C0080B +:109BC0001C09F338FF00F568FF00F36BFF002FF767 +:109BD0000E35FE9BFFE85804C2A006963007F8C871 +:109BE000FFFFFACAFF00F9D8C008180AF539FF00CC +:109BF000F20E0008FACBFF00FDD8C0081C0BF738A6 +:109C0000FF00F568FF00F769FF00F538FF00100955 +:109C1000F3D9C008FACAFF00120A0D89F538FF000F +:109C200012580CC82FF70E34FE9BFFDB2C0DE3CD32 +:109C300080F80A9E0A9CCD0BD401129E16981899A2 +:109C40001C9B149C300AF01F0002D80280029B402B +:109C500000000000D431FACD0180340AFAC4FEC0FD +:109C6000510C089CF01F04BF688A516A689950A97A +:109C700068A8509868B65086684568216830416683 +:109C800050E5685250D2686A50CA687950B968087D +:109C90005158E3E8200868D50C580A586812F00AB1 +:109CA000150150F2F5E813FA517A68E868F640E5D4 +:109CB00040A9105940980C580A5802580059F00A07 +:109CC00015010459F5E813FAF20215014178E5E9A6 +:109CD00013F2519A518240C54089105968C80458FE +:109CE00040E20A58045840D6F00A15010C59F5E82C +:109CF00013FA005951AA419840B640D5416240CA72 +:109D0000F2071501EFE913F768D9105968E80E5802 +:109D1000045814580C590A59F0051501F20615019A +:109D2000EBE813F5EDE913F640B851C551B641A281 +:109D300068F940AA416504591459105941780C58E2 +:109D400040960C580A58F2021501F00A1501E5E98F +:109D500013F2F5E813FA41C851EA51D2408640A502 +:109D6000409A418910594198045868C204581458BF +:109D70000C590A59F0051501F2061501EBE813F527 +:109D8000EDE913F6408851F6520541E268DA68C5FC +:109D9000EFE220091459105941A80C5868E60C58F4 +:109DA0000A58F2021501F00A1501E5E913F2F5E887 +:109DB00013FA52124208522A41B968F668D568EA85 +:109DC000105941C804584172045814580C590A5982 +:109DD000F0051501F2061501EBE813F5EDE913F6B0 +:109DE0005245523668F84222418A417541D9045998 +:109DF0001459105941E80C5841960C580A58F2026F +:109E00001501F00A1501E5E913F2F5E813FA4248E5 +:109E1000418641A5525241F9105942080E59045841 +:109E20000C5941920A580458526AF20A1501F5E990 +:109E300013FAF0091501F3E813F9426841B641C578 +:109E400041A2527A52894219105942280C59145889 +:109E50000E590A580458F20A1501F5E913FAF009E7 +:109E60001501529AF3E813F9428852A941D641B537 +:109E700041E2423910594248145841CA0458145812 +:109E80000C5941FA0A59F0051501F2061501EBE8E3 +:109E900013F5EDE913F641D852C542A241E552B699 +:109EA00042590459145942CA105942680C58420682 +:109EB0000C580A5841F6F20E1501F0021501FDE9A1 +:109EC00013FEE5E813F2421942781458420A42257B +:109ED000125842890C581C59F00615010A59EDE830 +:109EE00013F61459F20A1501F5E913FA0C951493B7 +:109EF000423952E652FA4216424A52D24298045825 +:109F0000125842A90C580A5942261459F00A150150 +:109F1000F5E813FA0C59530A1496F2081501425A3F +:109F2000F1E913F84239109C531842B806581458F6 +:109F3000426A125842C90C591459424A1459F00A3B +:109F40001501F5E813FAF2081501F1E913F8109B71 +:109F500053384278FDEC20091059425810595019D5 +:109F60004289E5EA200812584269125840195008FF +:109F70004018A178F1E913F8400953484008A17846 +:109F8000F1E913F853584298EBEB20091059427845 +:109F9000105942A850194349E7E92009105942884D +:109FA000105940185009532A4019A179F3E813F9C0 +:109FB000400853694009A179F3E813F953794358EC +:109FC000EDE8200942B810594298105942C850197A +:109FD0004369F9E92009105942A81059401850095D +:109FE0004019A179F3E813F9400853894009A17990 +:109FF000F3E813F943785399F5E8200942B81C595E +:10A00000105950194389F7E92009129842C9045898 +:10A010001258401950084018A178F1E913F8400986 +:10A0200053A84008A178F1E913F8434953B843987D +:10A0300010590A591C59501943A94358125840192C +:10A04000065804584012A172E5E913F253C2F00217 +:10A050001501E5E813F243B84369105943780C59E8 +:10A060000A5943C50A581858065853D2F202150126 +:10A07000E5E913F2F0091501F3E813F943D853F9B0 +:10A08000438910594398145904580C5916581858B4 +:10A0900053E243F54342F20C1501F0061501F9E9CC +:10A0A00013FCEDE813F643A943B80A5918580459AC +:10A0B0001459435A145816585406436A4402F20677 +:10A0C0001501F0051501EDE913F6EBE813F543482A +:10A0D00054255416435543C904591459105943D8AB +:10A0E000F20215010C58E5E913F2437654320C588C +:10A0F0000A58F00A1501F5E813FA544A890A442966 +:10A1000043864365437A43E8125843F90C5804598F +:10A110000A584392F0061501EDE813F654568916D5 +:10A1200004591459F2051501EBE913F55465892515 +:10A13000444243AA4389F9E2200814581258F00215 +:10A140001501E5E813F25472439544090C5943B6DE +:10A1500089320C590A59F20A1501F5E913FA548AA1 +:10A16000894A43C6446943A5441812580C580A58F2 +:10A17000F0061501EDE813F6549643BA4429045944 +:10A1800043D2895604591459F2051501EBE913F528 +:10A1900054A58965448243EA43C944380458145895 +:10A1A0001258F0021501E5E813F254B243D54449C0 +:10A1B0000C5943F689720C5944080A59446A045AE6 +:10A1C000105A0C5AF2061501EDE913F654C6447BF9 +:10A1D00089860C5BF4061501EDEA13F654E6441586 +:10A1E00044A243E9445889A60A5B045818581258F7 +:10A1F000F0051501EBE813F554D58995185BF602C7 +:10A200001501E5EB13F254F289B2444A4489449BA8 +:10A210000A590C5B4405442644A804581458F3E634 +:10A22000200A0C580A5A5028E0657999EA155A8292 +:10A23000504A410644325116441AEE050009F7E22D +:10A2400020081458E062EBA1EA126ED95038507918 +:10A25000040E0C99506EE068BCDCEA188F1B0C9A57 +:10A26000100C2F8A505C512A1306511941087403AF +:10A27000720C2F485138410A2F0A514A700A41483E +:10A28000700941580A08F0090009EC081505F1E6C3 +:10A2900013B8F2080008F5E3200918691459F00909 +:10A2A000000740F80A08F00A0009F80B151EF7EC41 +:10A2B000122BF7E320080C680658F2080008EE0994 +:10A2C0001505F3E713B9EC0A151EF009000EF5E6C3 +:10A2D000122AFC091505F7EA2008F3EE13B9EFE896 +:10A2E000000816580A01EE0C151E0601F9E7122C9B +:10A2F0001001F9EA200812011C68E209150514583A +:10A30000F3E113B90A001600100040E812000A0831 +:10A31000F00A0009FC0B151EF7EE122BF7EC2008D3 +:10A3200002681858F2080008E0091505F3E013B9AF +:10A33000F009000640D80A08F00C0009E20A151ED0 +:10A34000F5E1122AF5EB200800681658F20800081B +:10A35000EC091505F3E613B9F009000E40C80A0828 +:10A36000F00B0009E00C151EF9E0122CF9EA2008A8 +:10A370000C681458F2080008FC091505F3EE13B92F +:10A38000F009000340B80A08F00A0009EC0B151E9A +:10A39000F7E6122BF7EC20081C681858F2080008A2 +:10A3A000E6091505F3E313B9F009000641680A0848 +:10A3B000F00C0009FC0A151EF5EE122AF5EB200838 +:10A3C00006681658F2080008EC091505F3E613B9FB +:10A3D000F009000E40A90A091609E60C151EF9E35A +:10A3E000122CF9EA20080C681458F2080008FC093D +:10A3F0001505F3EE13B9F009000340980A08F00AB6 +:10A400000009EC0B151EF7E6122BF7EC20081C6870 +:10A410001858F2080008E6091505F3E313B9F00926 +:10A42000000640890A091809FC0A151EF5EE122AD1 +:10A43000F5EB200806681658F2080008EC09150527 +:10A44000F3E613B9F009000E68C80A08F00B00091A +:10A45000E60C151EF9E3122CF9EA20080C681458D2 +:10A46000F2080008FC091505F3EE13B9F009000124 +:10A4700068D90A091409EC0B151EF7E6122BF7EC44 +:10A4800020081C681858F2080006E2091505F3E1D7 +:10A4900013B968E8EC0900030A08F00C0009FC0A8B +:10A4A000151EF5EE122AF5EB200802681658F20880 +:10A4B0000008E6091505F3E313B9F009000E68F981 +:10A4C0000A091609E20C151EF9E1122CF9EA200816 +:10A4D00006681458F208000BFC091505F3EE13B9D1 +:10A4E0004178F60900000A08F00A0009E606151E80 +:10A4F000EDE31226EDEC20081C681858F208000A5B +:10A50000E0091505F3E013B9F409000341890A09CC +:10A510001809FC0A151EF5EE122AF5E62008006857 +:10A520000C58F208000CE6091505F3E313B941983D +:10A53000F80900010A08F0060009E00B151EF7E013 +:10A54000122BF7EA200806681458F2080008E209FE +:10A550001505F3E113B94077F009000E1407FC0963 +:10A560001505E60A151EF3EE13B9F5E3122AF5EB0D +:10A57000200802681658EE080008F009000341A8F8 +:10A580000408F00B0009E20C151EF9E1122CF9EA9F +:10A5900020081C58F2080008E6091505F3E313B972 +:10A5A000F009000541B904091409FC0B151EF7EE6A +:10A5B000122BF7EC20080658F2080008EA091505E6 +:10A5C000F3E513B9F009000641C80408F00C0009CE +:10A5D000E60A151EF5E3122AF5EB20080A58F208E0 +:10A5E0000008EC091505F3E613B9F009000E41D98E +:10A5F00004091609EA0C151EF9E5122CF9EA2008DF +:10A600000C58F2080008FC091505F3EE13B9F0091F +:10A61000000541E80408F00A0009EC0B151EF7E6F6 +:10A62000122BF7EC20081C58F2080008EA0915055F +:10A63000F3E513B9F009000641F904091809FC0A09 +:10A64000151EF5EE122AF5EB20080A58F20800084C +:10A65000EC091505F3E613B9F009000E42080408E9 +:10A66000F00B0009EA0C151EF9E5122CF9EA200896 +:10A670000C58F2080008FC091505F3EE13B9F009AF +:10A680000005421904091409EC0B151EF7E6122BFC +:10A69000F7EC20081C58F2080008EA091505F3E554 +:10A6A00013B9F009000642280408F00C0009FC0A5E +:10A6B000151EF5EE122AF5EB20080A58F2080008DC +:10A6C000EC091505F3E613B9F009000E4239040947 +:10A6D0001609EA0C151EF9E5122CF9EA20080C58A7 +:10A6E000F2080008FC091505F3EE13B9F00900059E +:10A6F00042480408F00A0009EC0B151EF7E6122B7D +:10A70000F7EC20081C58F2080008EA091505F3E5E3 +:10A7100013B9F0090006425904091809FC0A151E6C +:10A72000F5EE122AF5EB20080A58F2080008EC09A9 +:10A730001505F3E613B9F009000E42680408F00BA2 +:10A740000009EA0C151EF9E5122CF9EA20080C584C +:10A75000F2080008FC091505F3EE13B9F00900032F +:10A76000427904091409EC0B151EF7E6122BF7ECDD +:10A7700020081C58F2080008E6091505F3E313B990 +:10A78000F0090005428904091809FC0A151EF5EEB6 +:10A79000122AF5EB20080658F2080008EA09150508 +:10A7A000F3E513B9F009000E429904091609E60C05 +:10A7B000151EF9E3122CF9EA20080A58F208000BDA +:10A7C000FC091505F3EE13B9F609000042A90409C6 +:10A7D0001409EA06151EEDE51226EDEC20081C58BA +:10A7E000F208000AE0091505F3E013B9F4090003C3 +:10A7F00042B9FC0A151E0409F5EE122A1809F5E6FD +:10A80000200800584065F208000C1405E6091505FB +:10A81000E00B151EF3E313B9F7E0122BF809000162 +:10A82000F7EA200AE2081505065AF1E113B842C911 +:10A8300004090C091409E60A151EF208000EF5E3D6 +:10A84000122AF5EB20080258EA080008E066BCDC92 +:10A85000EA168F1BFC091505F3EE13B9F009000089 +:10A8600042D80C08E20C151EF00B0002F9E1122C84 +:10A87000FDEC0008FDEC100914691049E00815050D +:10A88000F1E013B8E4090009F208000242E80C08FC +:10A89000FC0B151EF00A0005F7EE122BE1EB000889 +:10A8A000E1EB100918691049E4081505EA090009E7 +:10A8B000F1E213B8E00A151EF2080005F5E0122ACD +:10A8C00042F9E5EA00080C09F20C0003E5EA100978 +:10A8D00016691049EA081505F1E513B8E6090009FB +:10A8E000F208000343080C08E40C151EF00B0006E8 +:10A8F000F9E2122CEBEC0008EBEC1009146910499A +:10A90000E6081505EC090009F1E313B8EA0B151E7A +:10A91000F2080006F7E5122B4319E065BCDCEA15E6 +:10A920008F1BE7EB00080A09F20A000AE7EB10099F +:10A9300018691049EC081505F1E613B8F409000987 +:10A94000F208000243280A08E60A151EF00C000C63 +:10A95000F5E3122AEDEA0008EDEA1009166910493C +:10A96000E4081505F8090009F1E213B8EC0C151E0E +:10A97000F208000EF9E6122C4339E5EC00080A094A +:10A98000F20B000BE5EC100914691049FC081505E1 +:10A99000120BF1EE13B84349F6080005E40B151E3F +:10A9A000F7E2122BE062BCDCEA128F1BFDEB000821 +:10A9B0000409F20A000AFDEB100918691049EA08B7 +:10A9C0001505F1E513B8F4090009F208000643582B +:10A9D0000408FC0A151EF00C000CF5EE122AEBEA36 +:10A9E0000008EBEA100916691049EC081505F8098A +:10A9F0000009F1E613B8EA0C151EF208000EF9E59D +:10AA0000122C4369EDEC00080409F20B000BEDEC8D +:10AA1000100914691049FC081505F1EE13B8F60980 +:10AA20000009F208000543780408EC0B151EF00A33 +:10AA3000000AF7E6122BFDEB0008FDEB1009186980 +:10AA40001049EA081505F4090009F1E513B8FC0AF4 +:10AA5000151EF2080006F5EE122A4389EBEA0008FB +:10AA60000409F20C000CEBEA100916691049EC0815 +:10AA70001505F1E613B8F8090009F208000E43982D +:10AA80000408EA0C151EF00B000BF9E5122CEDEC96 +:10AA90000008EDEC100914691049FC081505F609C9 +:10AAA0000009F1EE13B8EC0B151EF2080005F7E6ED +:10AAB000122B43A9FDEB00080409F20A000AFDEB82 +:10AAC000100918691049EA081505F1E513B8F409E9 +:10AAD0000009F208000643B80408FC0A151EF00C31 +:10AAE000000CF5EE122AEBEA0008EBEA10091669F1 +:10AAF0001049EC081505F8090009F1E613B8EA0C4D +:10AB0000151EF208000EF9E5122C43C9EDEC000801 +:10AB10000409F20B000BEDEC100914691049FC0854 +:10AB20001505F1EE13B8F6090009F208000343D841 +:10AB30000408EC0B151EF00A000AF7E6122BFDEBD9 +:10AB40000008FDEB100918691049F4090009E6082E +:10AB50001505F1E313B8F208000543E90409FC0AFE +:10AB6000151EF20C000CF5EE122AE7EA0008E7EADF +:10AB7000100916691049F8090009EA081505F1E5F8 +:10AB800013B8F208000E43F90409E60C151EF20B87 +:10AB9000000BF9E3122CEBEC0008EBEC1009146944 +:10ABA00010494057FC0815051407F1EE13B8F609D3 +:10ABB000000AEA0B151EF7E5122BFDEB0009F4085D +:10ABC0000003FDEB1008E60A15051868F5E313BA53 +:10ABD0001248EE080009F20A00054409E06AC1D6ED +:10ABE000EA1ACA6214091809FC06151EEDEE1226AF +:10ABF000EDEB20080658F2080008EA091505F3E510 +:10AC000013B9F009000A4419E068C1D6EA18CA620B +:10AC100010091609E60C151EF9E3122CF9E62008B6 +:10AC20000A58F2080008F4091505F3EA13B9EA0B0B +:10AC3000151EF0090003F7E5122B4429E065C1D683 +:10AC4000EA15CA620A090C09F7EC20081458F20840 +:10AC50000008E6091505F3E313B9F009000EFC0935 +:10AC60001505F3EE13B9F406151EEDEA1226443A63 +:10AC7000EDEB20080A0A0658180A100A120A44497D +:10AC80000A091609E60C151EF9E3122CF9E620084C +:10AC90001C58F2080008F4091505F3EA13B9FC057D +:10ACA000151EF0090003EBEE1225E6091505EBEC85 +:10ACB0002008F3E313B91458E062C1D6EA12CA625D +:10ACC000445B040B0C0BF406151E100BEDEA122668 +:10ACD000120BEDE52008F60915050658F3EB13B93C +:10ACE000446A040A180A100A4478F409000E040899 +:10ACF000F0050009E60A151EF5E3122AF5E620081C +:10AD00001658F2080008FC091505F3EE13B9F0090E +:10AD10000005448904090C09F60C151EF9EB122CE8 +:10AD2000F9EA20081C58F2080008EA091505F3E5BD +:10AD300013B9F009000344980408F00A0009FC0B59 +:10AD4000151EF7EE122BF7EC20080A58F20800083F +:10AD5000E6091505F3E313B9F009000E44A9040947 +:10AD60001809EA06151EEDE51226EDEB2008065837 +:10AD7000F2080008FC091505F3EE13B9F009000507 +:10AD8000EA091505F3E513B944BAE60C151E040AE1 +:10AD9000F9E3122C160AF9E620081C58100A120AC8 +:10ADA00044C904090C09FC0B151EF7EE122BF7EC35 +:10ADB00020080A58F2080002F4091505F3EA13B94D +:10ADC00044D8E409000EE069C1D6EA19CA62120843 +:10ADD000EA06151EF00C0009EDE51226EDEB200841 +:10ADE0001458F2080008FC091505F3EE13B9F00930 +:10ADF000000CE068C1D6EA18CA62F405151EF8090D +:10AE00001505EBEA1225F3EC13B944EA100AEBE658 +:10AE10002008160A1C58100AFC02151EF40900012D +:10AE2000E5EE1222E06AC1D6EA1ACA62E5E5200818 +:10AE3000E20915051858F3E113B944FB140B404A15 +:10AE40000C0BA17A100B44B8F609000E4049F5E945 +:10AE500013FA14584459F1E9200B4438E069C1D67B +:10AE6000EA19CA6289CAF7E820074108F806151EE0 +:10AE7000120AEDEC1226700CEDE22008120C0258BA +:10AE8000FC091505F3EE13B90A0AE203151E100AB0 +:10AE9000E7E11223120AE7E62008E069C1D6EA19C1 +:10AEA000CA621C5840354030A170E1E513F0E0095A +:10AEB000000BF4091505040BF3EA13B9100B402835 +:10AEC0004021120BE065C1D6EA15CA62A171E3E820 +:10AED00013F1E2050008F0060009FC02151EE5EE7C +:10AEE0001222E5E320081458F2080008F6091505B7 +:10AEF000F3EB13B9F406151EF009000EEDEA122665 +:10AF0000EE051501410AEBE713F5EDE220080A0C06 +:10AF10001658060CFC091505100CF3EE13B9120CAB +:10AF2000950C411972081C089308F609151E412A50 +:10AF3000F3EB1229740812089508413870090C09BE +:10AF4000910989D089E189F541466C080408089C7B +:10AF50008D08340A300BF01F00042A0DD83200008F +:10AF6000800091DC800091D0EBCD40F878581494AB +:10AF7000A37AF40800099959123AF9F98006F9F907 +:10AF8000B006F7B90BFFF9F9BA06FDD8C066E808B4 +:10AF9000161DF2080008996818951693E80E000926 +:10AFA000E049003FE08B000F3006FCCCFFE4E606F2 +:10AFB000000BEA0C000CE806010AF01F0014E3CDB8 +:10AFC00080F8FC061140FCCCFFE40C9AEA0C000C63 +:10AFD000F01F000EEACBFFE40A9CF01F000DECC846 +:10AFE000FFC11034E088000FE60600070E9B0A9CA4 +:10AFF0002C07F01F00072C06ECC8FFC11034FE9B85 +:10B00000FFF7300ECD3B0000800091DC80029C54A5 +:10B01000D421202D16961895300B1A94583BF9B868 +:10B020000B14F9B80818F60911FFEC08030AF3D954 +:10B03000C002A379F4090A4AE80B0B0A2FFB588BCC +:10B04000CEE1301A49EBC038301A49EB0C9CF01FA6 +:10B05000001E6C58E21801F8E04801C0CF61308A48 +:10B060001A9B0C9CF01F00183007EE081602EE0920 +:10B0700011FFEC08032AF3D9C002A379F4090A4AA4 +:10B08000EA070B0A2FF75947CF11300B340AECCCE3 +:10B09000FFE4F01F000E0E9A300B0C9CF01F000B0B +:10B0A000ECCCFFEC308A300BF01F00081A9C308A81 +:10B0B000300BF01F00062FEDD82200008003DE5871 +:10B0C00080029C508002AF68800091D0EBCD40FCA4 +:10B0D000217DE0682301EA186745E06EAB89EA1E2E +:10B0E000EFCD5008E068DCFEEA1898BA3007501E31 +:10B0F0005028E06E5476EA1E1032E068E1F0EA185B +:10B10000C3D250675057503E504818931292580C73 +:10B11000C140149416951A962FF7090A0B0B1A9C26 +:10B12000F01F00070E33FE9BFFF91A9B049CF01FD3 +:10B1300000052E9DE3CD80FC1A96CF8B8002AF6870 +:10B140008002B010D431FACD008C501C500B1493F7 +:10B150001292109142C0585AE08B0056E04B0040CA +:10B16000E08B0054FAC4FFF8340A300B089CF01F3F +:10B17000002E400A401B089C0896F01F002CFAC5C0 +:10B18000FFB808970D88EC1800360CC80A36CFB106 +:10B190003408518451285803C110FACCFF9CFACBD3 +:10B1A000FFB4300AE60E1502E40A030818A8E20A02 +:10B1B000030916A92FCA1C3ACF81E6CCFFFF0099DC +:10B1C0000A9AFAC3FFA0069BF01F0019340A300B3D +:10B1D000089CF01F0015400A401B089CF01F00133C +:10B1E0000F88EC18005C0EC80C37CFB1314C340816 +:10B1F000513C5184519000990A9A069B5128302C59 +:10B20000F01F000B2DDDD832FAC6FF881A9A0C9970 +:10B21000FACBFFFC301CF01F0006314850165008D6 +:10B22000CA2B0000800091D0800091DC8002B0CC5D +:10B23000D401202D501A5009301A1AD8FAC9FFF833 +:10B24000FAC8FFFCF01F00032FFD2FEDD80200000D +:10B250008002B144D43121AD5009502B501A1892BC +:10B2600042395809C6D0504850593008FAC7FFAC87 +:10B270005038FAC3FFD4FAC0FFC0FAC4FFE8049CF8 +:10B28000F01F003140382FF850381AD34038518819 +:10B2900040285168FAC8FF98519830484046517884 +:10B2A000B986FB380013FAC9FFA0FB68006B189B36 +:10B2B0000E98FB66006840454046302A1891B185DB +:10B2C000049CFB650069A986FB66006AF01F001FED +:10B2D000314A069B009CF01F001E2FFD40085818A5 +:10B2E000E08A001C301608983149069A029B049C9B +:10B2F000F01F0018314A089B069CF01F0015009AA9 +:10B30000089B17381589125814C80E3ACFB12FF67A +:10B3100040080C38FE99FFE940560C985946F9B69A +:10B320000B140C180C9A5058009B404CF01F00084E +:10B3300040585808C05040480C085048CA1B2E6D51 +:10B34000D8320000800091B88002B144800091DCC6 +:10B350008002B230D43120EDFACEFFA4109530082F +:10B3600018927C14149716911296FB680036FB68AD +:10B3700000377C00149CF01F00275804C3003018CD +:10B38000FAC9FFC9508850685097FAC8FFCA505C84 +:10B3900050B6507550A950C85934E0880023300782 +:10B3A000FAC3FFECFAC6FFDCC088FB680036E8078A +:10B3B00001055935E088001CE00700080C991AD8EF +:10B3C0002EC70698304A029B049CF01F00132FFDE5 +:10B3D000FB3800362FF80E34FE9BFFE92F2DD832B4 +:10B3E00008953007FAC3FFECFAC6FFDC0C99069803 +:10B3F0001A96049C1AD6029B304AF01F00070A9A3C +:10B400000C9BE007000CF01F00052FFD2F2DD832FC +:10B41000800091B88002B144800091DC00000000FF +:10B4200000000000EBCD4080129E1097584CC26087 +:10B43000E08A0013588CC140590CC101590B5F18A8 +:10B4400058FA5FA91248C0A130689D083039300C05 +:10B450008F09E3CD8080582CC1E0E3CFC080E04B62 +:10B4600000205F1859FA5FA91248CF8130689D0803 +:10B470003029300C8F09E3CD808058DB5F1858CA23 +:10B480005FA91248CEB130099D093018129C8F086F +:10B49000E3CD8080585B5F18584A5FA91248CF40BF +:10B4A000E3CFC080580C5E0CF8F8010C5808F9B8CE +:10B4B0000100F9F81A435EFC580CF9FB1A4C5EFCCB +:10B4C000580CF9FA1A51F9FB1A505EFC580CF9FBAA +:10B4D0001A415EFC580CC080586BE08800035EFD8A +:10B4E0004928F00B032F5EFEF94A016C5EFDF94A14 +:10B4F00001685EFDF94A01645EFDF94A01605EFD86 +:10B50000580ACF20F94A01585EFDF4C80001E0480E +:10B510000063FE9BFFEAF94A01545EFD580ACE40E3 +:10B52000F94A01505EFD00008003DE5CEBCD40E097 +:10B53000189716951496580CC130F8FC0180F01F2E +:10B54000001158055F0858065F091248C0B030085E +:10B55000EF480188EF480180109CE3CD80E0E3CF05 +:10B56000C0E00C9CF01F0008EF4C0180CF900A9BBC +:10B570000C9AF01F0006300CEF460188E3CD80E006 +:10B58000800091E880009200800091DCEBCD40E0EB +:10B59000189716951496580CC130F8FC017CF01FD2 +:10B5A000001158055F0858065F091248C0B03008FE +:10B5B000EF480184EF48017C109CE3CD80E0E3CFAD +:10B5C000C0E00C9CF01F0008EF4C017CCF900A9B60 +:10B5D0000C9AF01F0006300CEF460184E3CD80E0AA +:10B5E000800091E880009200800091DCEBCD40E08B +:10B5F000189716951496580CC130F8FC0174F01F7A +:10B60000001158055F0858065F091248C0B030089D +:10B61000EF480178EF480174109CE3CD80E0E3CF60 +:10B62000C0E00C9CF01F0008EF4C0174CF900A9B07 +:10B630000C9AF01F0006300CEF460178E3CD80E055 +:10B64000800091E880009200800091DCEBCD40FE0C +:10B65000189716961493580CC031E3CFC0FE7409A6 +:10B66000F8F801605828C5E0F8F1016CF8F50168B8 +:10B67000F8F201645979FE98FFF23DD8304AB68855 +:10B68000ECCCFFFEFEFB0238F01F008E30083019B4 +:10B69000ACF8ACE9ECC4FFF85905E08000A158858E +:10B6A000E08000AA5845E08100BC0A9AFEFB02181F +:10B6B000089CF01F00843018A8C8E8C9FFFB3008B8 +:10B6C000B288E8C5FFFA5902E08000905882E08114 +:10B6D000009F304A4FDB0A9CF01F007A3018AAC83E +:10B6E000EAC9FFFB3008B2882FA55811E080008A14 +:10B6F0005821E08100A5304A4F5B0A9CF01F007181 +:10B70000EAC9FFFCEC0811FE1208AC98F206010C25 +:10B71000CA56870CEEF501745805E08000C1E3CFEE +:10B7200080FEF8F8010CF8F2016C5808F9B801280D +:10B73000F9B80016F8FA0168F8F401641039C8E3A2 +:10B7400033083009B688B6B93018B6A8F6C5FFFC7C +:10B75000590AC6F0588AE0800082584AE081009772 +:10B760004DCB0A9CF01F00573018AAC8EAC9FFFB4E +:10B770003008B2882FA55904C6B05884E081007EF5 +:10B78000304A4D5B0A9CF01F004F3018AAC8EAC926 +:10B79000FFFB3008B2882FA55812C661304A4CFB17 +:10B7A0000A9CF01F0048EAC8FFFC300AB08AB09A31 +:10B7B000EAC9FFFAEEF8010C5808CA503018B288EE +:10B7C000EAC9FFF9EACCFFF8B28A310AEEFB010CB4 +:10B7D0002FCBF01F003CEAC9FFE8C95B304A4C0B95 +:10B7E000089CF01F0038C68B304A4BDB0A9CF01FC8 +:10B7F0000035C75B304A4B5B089CF01F0032C5CB5D +:10B80000304A4B8B0A9CF01F002FC7BB5812FE9189 +:10B81000FF26304A4B4B0A9CF01F002AC60B5825C6 +:10B82000FE91FF1D304A4B1B089CF01F0026C44BA5 +:10B83000304A4AFB0A9CF01F0023C97B5901FE9144 +:10B84000FF0E304A4ABB0A9CF01F001EC5AB304AAF +:10B850004A7B0A9CF01F001BC99B304A49EB0A9C9B +:10B86000F01F0018C82B5822FE91FEF9304A4A2BCF +:10B870000A9CF01F0014C98B5814FE91FEF0304A48 +:10B8800049EB0A9CF01F000FC81B582AFE91FEE7E7 +:10B89000304A49BB0A9CF01F000BC67BF01F001901 +:10B8A000EF4C0174FE90FEDB0C9B660AF01F000556 +:10B8B00066080A9CEF480178E3CD80FE8003DE989D +:10B8C000800091DC8003DEA08003DE8C8003DE7CC0 +:10B8D0008003DE888003DE808003E1EC8003E1E406 +:10B8E0008003DE9C8003DEA48003DE948003DEB44C +:10B8F0008003DEB08003E1E88003DEA88003DE84FD +:10B9000080009200D401580CC060F8CCFEC8306AA8 +:10B91000F01F0002D8020000800091DCD4011898CA +:10B92000580CC040918AF01F0002D802800091DCC0 +:10B93000EBCD40F8208D189416971493F6C6FFF0BF +:10B94000F8F501685885C2E0E8F801645818C1604C +:10B950006EC8E8F901286E0B1AD81AD66E2849CAA3 +:10B960001AD81AD3720C72666E186E395D162FCD06 +:10B97000580CC1552F8DE3CF80F86EC9E8FA012825 +:10B980006E0B1AD91AD66E291AD91AD3740C74668A +:10B990006E3948FA5D162FCD580CCED42F8DE3CFDB +:10B9A000C0F80C9B310A1A9CF01F000A0A9AEECBD1 +:10B9B000FFD8FACCFFF0F01F00070A9AEECBFFE0A9 +:10B9C000FACCFFE81A96F01F0003CBFB80039C38EB +:10B9D000800091DCD401580CC070F94B0134F8FCA4 +:10B9E0000108F01F0002D80280028F64D401580CB5 +:10B9F000C110F8F8010C5808C08070DAF0CBFFECE9 +:10BA0000998AF01F0005D802320A109B998AF01F0C +:10BA10000003D802800091DC800091D0EBCD408003 +:10BA20001897F01F000AEEF801287029700C5D19B4 +:10BA3000585CEFF80057F9B90001F1D9E008EFF8C8 +:10BA40000A57E3CD8080000080029438EBCD40C0DF +:10BA500018971696580CC190306AF8CCFEB8F01FB3 +:10BA6000000F308A300BEECCFF10F01F000D3008B5 +:10BA700030190C9BEF4800F8EF4900EC306AEECC2F +:10BA8000FEE4F01F0008C030E3CD80C00E9CF01F24 +:10BA90000006E3CD80C00000800091DC800091D0E2 +:10BAA0008000917C80029438EBCD40C016971496AC +:10BAB000F6F8010C1838C0D0768A78D8103AC03021 +:10BAC000E3CD80C0F8CBFFEC0E9CF01F000ECF91B1 +:10BAD0003008EF48010C5806CF41320A0C9B0E9CEF +:10BAE000F01F0009EEF90128301B720C72485D1836 +:10BAF000EEF801280C9A700C70390C9B5D19CE1B66 +:10BB00008000917C800091D0D431189716941493C2 +:10BB1000300B324A069CEE040005F01F0052EEC6C0 +:10BB2000FFFF0C35E0880034E8C800013DD2EE0884 +:10BB30000004C0D8E4091800C2B01499F2C8FFFE8E +:10BB40001007EEC6FFFF0C35E08800220F89E409DC +:10BB50001800C4B10837C1B00D8A580AC180F4C8B2 +:10BB6000FFFEEE0800081035C4733308F009180012 +:10BB7000CE2187270D882FE887380D89F2C8FFFE70 +:10BB80001007EEC6FFFF0C35FE9BFFE2D83A580ABD +:10BB9000CFE03058F00A1800E08B003FEEC8FFFB02 +:10BBA0001035E08B002B14993061E2091800FE98E3 +:10BBB000FFC7EEC0FFFE304A4ABB009CF01F002BBF +:10BBC000C3900D89E2091800FE98FFBA009C304A24 +:10BBD0004A7BF01F0026C071EEC9FFFA87790D88F5 +:10BBE000204887880D89CABB0D8AF4C8FFFEEE087D +:10BBF00000081035CBB2DC3A14993138F00A18003D +:10BC0000FE98FFD4304A49BBEECCFFFEF01F001770 +:10BC1000C1900D89CCAB304A497BEECCFFFEF01FC2 +:10BC20000013C0610FE93018F0091800C1000D8A37 +:10BC3000CB6BEEC9FFFA87590D88204887680D89BC +:10BC4000C7EBEEC8FFFA87480D89C79B0FF8F808C5 +:10BC50001800CEE187070D882FE887180D89C6FBED +:10BC6000800091D08003DE788000917C8003DEAC80 +:10BC70008003DE908003DE98EBCD4080304A189739 +:10BC8000496BF01F0017C031E3CF9080304A495B09 +:10BC90000E9CF01F0013C041302CE3CD8080304A51 +:10BCA000491B0E9CF01F000EC041308CE3CD8080FC +:10BCB000304A48EB0E9CF01F000AC041310CE3CD26 +:10BCC00080800E9C304A48ABF01F0005F9BC000490 +:10BCD000F9BC0100E3CD80808003DEA88000917C68 +:10BCE0008003DE848003DE808003DEB48003DE8890 +:10BCF000EBCD4080304A1897496BF01F0017C031D8 +:10BD0000E3CF9080304A495B0E9CF01F0013C04186 +:10BD1000302CE3CD8080304A491B0E9CF01F000E72 +:10BD2000C041308CE3CD8080304A48EB0E9CF01F40 +:10BD3000000AC041310CE3CD80800E9C304A48ABF4 +:10BD4000F01F0005F9BC0004F9BC0100E3CD8080C0 +:10BD50008003DEA48000917C8003DE948003DE8C6F +:10BD60008003E1E48003DEA0EBCD40FC189416963E +:10BD70001497580BC160198B3308F00B1800C1D011 +:10BD80003008301595789548956895589505308810 +:10BD90009535952895185876E08B009BE3CFC0FC2D +:10BDA000301830898F7B8F4B8F6B8F5B9538950860 +:10BDB00095299519E3CFC0FC300531099545956566 +:10BDC000955595759529951930289508301A8F3A0B +:10BDD0005836FE98FFE51988F6081800CE01199923 +:10BDE000ECC800021039CDB119B919A8F1E91088D1 +:10BDF000F4081900CD4120465836E08A01112FC4BD +:10BE0000089CF01F008A8F2C20465816E08A010BF0 +:10BE10008F15E8CCFFFC19991988F1E91082CBF055 +:10BE2000ECC30002E40815021033CB95F8C4FFFE02 +:10BE300030056E16089CF01F007D0C4C8F1C2FC423 +:10BE400020432FF50A32FE99FFF65813E08A00E5E9 +:10BE5000300A8F3A09990988F1E91082CA00202333 +:10BE6000E40815021033C9B5E8C6FFFE14956E3418 +:10BE7000304A4EFB0C9CF01F006FE08100C430186C +:10BE800008488F382FC620432FF50A32FE99FFF15C +:10BE90005813E08A00940D990D88F1E910888F48B5 +:10BEA000E6CB0002581BE08A008AECCCFFFE199812 +:10BEB0001989F3E810898F59F6C80002A56912386C +:10BEC000C7F5F8C8FFFE300C8F68E3CD80FC1989F8 +:10BED0003DD8F0091800FE91FF631999ECC80002E3 +:10BEE0001039FE91FF5D304A4D3B2FECF01F0051A1 +:10BEF0001893FE91FF5509F909E8F1E91088EA085D +:10BF00001900FE91FF4DECCA0008583AE08A005E25 +:10BF1000E8CCFFF8F01F00498F2CECCA000C0A3A5D +:10BF2000E08A00578F13E8CCFFF419991988F1E9DA +:10BF30001082FE90FF35F4C30002E40815021033AE +:10BF4000FE95FF2EF8C4FFFE30056E16089CF01F0C +:10BF5000003B0C4C8F1C2FC420432FF50A32FE9956 +:10BF6000FFF65813E08A0042300A8F3A099909888F +:10BF7000F1E91082FE90FF142023E408150210332B +:10BF8000FE95FF0EE8C6FFFE14956E340C9C304AF9 +:10BF90004ABBF01F0028C211301808488F382FC63E +:10BFA00020432FF50A32FE99FFF25813E08A00145D +:10BFB0000D880D99F1E910888F48E3CF80FC300897 +:10BFC0008F58109CE3CD80FC580AFE99FEE9581A60 +:10BFD000FE90FEE6E3CF80FC304A49AB0C9CF01F9C +:10BFE0000015C0613028CDAB5813CF51CD8A0C9CC1 +:10BFF000304A495BF01F000FF9B80010F9B8010092 +:10C00000CCDB0C9C304A491BF01F000AF9B8000237 +:10C01000F9B80100C36B5813CD11CC1A5806FE991C +:10C02000FEBF5816CCB1CBBA8002BC788003E1ECDD +:10C030008000917C8003DE988002BCF08003DE9C4F +:10C040008003DE7C8003DEB08003E1E8D401580C7D +:10C05000C021DC0AF8F801745808CFC0169AF8FB22 +:10C060000178109CF01F0004F9BC01FEF9BC00002F +:10C07000D80200008002BD68EBCD40801897580CB4 +:10C08000C1D0F8FC0108F01F000F300A0E9B48ECED +:10C09000F01F000EEEFC0174F01F000DEEFC017CA1 +:10C0A000F01F000BEEFC0180F01F0009EEFC0128E0 +:10C0B000F01F00070E9CF01F0006E3CD80800000FB +:10C0C000800290A88002C0D080027400800091E8B5 +:10C0D000D401F01F0002D8028002963CEBCD40C094 +:10C0E0001896E06C018CF01F00131897C19030185F +:10C0F000E069A8C0F94800ECF9490150346833C937 +:10C10000F9480154F9460128F9490158189A189B31 +:10C11000489CF01F000AEF4C01081898C0400E9C84 +:10C12000E3CD80C00E9C1097F01F0005CF9B000050 +:10C1300080028F248002BAA880028F8C800091E850 +:10C14000EBCD4060149E1DD81896158CECF5012897 +:10C150001AD81DC91AD91DB81AD81DA91AD91D98DF +:10C1600048CA1AD81ADC1ADB303B6A0CF01F000AE6 +:10C17000ECF90128311B720C72585D18ECF901289A +:10C18000300A720C7238149B5D182F9DE3CD8060CD +:10C190008003DF4880023A1AEBCD40C0205D109743 +:10C1A000581BC130582BC0402FBDE3CD80C0310B90 +:10C1B0001A98F01F00091A961A9B0E9C310AF01F5C +:10C1C00000072FBDE3CD80C0310BF01F00052FBD50 +:10C1D000E3CD80C08002B230800091DC80028EF816 +:10C1E000D431201DFACEFFD81894500B149012961B +:10C1F00010917C237C077C12306A49AB129CF01FA3 +:10C20000001AC1D05803C0800698009B400C0499C6 +:10C210000E9AF01F00160C9BE8F501280498F5D142 +:10C22000C0100E996A0C6AA65D16E8FC0104F01FA6 +:10C2300000100E9CF01F000F2FFDD832E8C5FEB88D +:10C24000306A488B0A9CF01F0008CDD1E8F801281D +:10C250000A9B700C70995D19EA061740CD4B0000DF +:10C260008002B41C8000917C8002C19880025582BB +:10C27000800091E8EBCD40E0189716961495F8F8F9 +:10C2800001685848E0800081E08A00495888C780EA +:10C290005908C4F04C19EEF801645848C480584855 +:10C2A000E089004A5818C6605828C6604BB81AD9A9 +:10C2B0001AD8EEFA01280DD81AD80DC91AD90DB816 +:10C2C0001AD80DA91AD90D981AD80D89302B1AD958 +:10C2D000740C4B3AF01F0033EEF801282F8D700BD1 +:10C2E000707C300AF01F0030EEF90128720C72C821 +:10C2F0005D18EEF90128307B720C72185D18580534 +:10C30000C201EEFC010C580CC07079485808F9B80D +:10C310000100F9F81A14E3CD80E05818C33058280A +:10C32000CBA14A29EEF801645848CBA14A08CC0BAE +:10C330004A09CB2B5888C2205908CB9149D8CB8BBE +:10C34000EEF801280C9B700C71263019303A5D16FE +:10C35000301BEEFC0104F01F0018EEF8016C5828A9 +:10C36000C15030080E99495A109B301CF01F001420 +:10C37000CC9B4948C9DB48D8C9BB4938C99B492926 +:10C38000C8BB4909C89B48A9C87B301BEEFC010407 +:10C39000F01F000ECE7B00008003C6288003DF74F0 +:10C3A00080023A1A800274008003DF088003DF10E5 +:10C3B00080039A74800261D48002C0D080027474B9 +:10C3C0008003C8E480039A6C800261A4D431FACD62 +:10C3D00000DC1897169314951296E0490062E08BE2 +:10C3E000000630060C9C2C9DD832129CF01F034492 +:10C3F0001892E08000D60C9A0A9BF01F034205A910 +:10C4000005B8F1E910880599F5D8B0103038F00971 +:10C410001800C0603006049CF01F033BCE4BECC8F4 +:10C420000004EBDAC01030090A385F3AE045005EDC +:10C430005F88F5E8100CF20C1800CED13FE8E4C19B +:10C44000FFFC038AF00A18005F1B3028F00A18006E +:10C450005F19F7E90004F8041800CDD1EEFC0104DF +:10C46000F01F032A039903A8F1E91088EDD8B01052 +:10C47000FDD6C003506E1C9930182019F009190020 +:10C48000E08800043FF6CC8BEEF8016459085F0A9F +:10C490003028F00E19005F19126AE80A1800C080EF +:10C4A000EEF801685908CEF0EDB60003CEC0EEF804 +:10C4B00000F85808E08100ABE1D6C0100098E218FF +:10C4C0002080CE10009AE21A0800502ACDC12FC554 +:10C4D00000995055E21901005039C641405AE339DC +:10C4E000005DE338005E263AF1E91088F7D8B01015 +:10C4F000E9DBC010083AE0830598EEF9016058299D +:10C50000E0800550EDB00003E0810333E21000301D +:10C51000CBA140395809E08001CAEEF90128305B0F +:10C52000720C72185D18039903A8F1E91088E339B9 +:10C53000005DEBD8B010E33B005EFACAFF50F7E9AC +:10C54000108BE2CCFFA1F01F02F243185808C04044 +:10C55000EDB5000CC231EEC3FEB8EEF60134EEF8D4 +:10C56000017C5808E08004E742C95809E08004C80B +:10C57000EEFB017C580BC79042DAEEF80184103ACA +:10C58000C70042FE42EC1ADE14981ADC069A0E9C92 +:10C59000FEFB0B80F01F02E02FED3016C3DB3FF6F1 +:10C5A000C22BE2C6FFB3FAC4FF84310A0C9B089C7D +:10C5B000F01F02D440685C785048EEF800A8580894 +:10C5C000C301EEF800A45808FE90FF5E310A300B5C +:10C5D0000C9CF01F02D2049A404BEECCFFDC0C986E +:10C5E0004059F01F02CF0C9B089C310AF01F02CD6E +:10C5F000FE91FF4A308AE2CBFFFBEECCFF10F01F2A +:10C6000002C13018EF4800F8C6AB308AEECBFF10FD +:10C61000E2CCFFFBF01F02C3FE99FF503FF6CFCAEA +:10C62000402B310A0C9CF01F02BD049A404B0C9821 +:10C630004059EEC5FF9C0A9CF01F02B9310A0C9BC1 +:10C64000089CF01F02B8CBE13018EF4C00A80A9B01 +:10C65000EF4800A4340AEECCFFDCF01F02AACCBBEA +:10C66000129CF01F02B0C10142EC580CC160EEFBFD +:10C670000180580BC12042FEEEF80188103EC090A8 +:10C6800042C942DAC81B42FE42C942EC42DAC7CB79 +:10C690001C9AF01F02A4CF81EEF801605818E080C8 +:10C6A00000E6320AE2CBFFF3EECCFF34F01F029D2E +:10C6B000FE91FF7503B903C8F1E91088F3D8B010F3 +:10C6C000EEF801645888E08000CC5908E08000CA88 +:10C6D000EEF80128FAC9FF2C1AD970D6700C35F97A +:10C6E000FAC8FF24300A303B5D162FFD1896580C0F +:10C6F000FE90FF55EEF80160E06900FE5828F20850 +:10C700001710435AB48840680A99E2190200F1E907 +:10C7100010094358E8190108F20B1608B09B435A58 +:10C72000B4A9EEF801605828E0810093300843591D +:10C73000B2B8435AB4C8435C308AE2CBFFFB2FBC8B +:10C74000F01F02704358300AF16A005D4359F36AE2 +:10C75000005E4358406A2B381AD84379E068888EC7 +:10C760001AD9EECBFFDC1AD606990E9CF01F026E8A +:10C770003018EF4800EC5C752FDDEDB50006C0F118 +:10C78000FEFA09A8F4E80000FAE9007CEEF801647A +:10C790005888E08003F65908E08003D90A90E21037 +:10C7A0000200C0E0EEFA01283019740C069B7528CF +:10C7B000129A5D18301BEEFC0104F01F025DEEF8CA +:10C7C0000128306B700C70195D1943165806FE90E5 +:10C7D000FEE64328FAC4FF84F0C50002334A300B5A +:10C7E000089CF01F024EE0450020FE9BFED80D88FD +:10C7F000F1D8C00252280D89F3D9C041C050EEF8DB +:10C80000016458185F095209ECCBFFFE0A9AFACC72 +:10C81000FF74F01F023C0A9A52B50898FAC9FF7CCF +:10C820000A9BEEFC0168F01F0243FE91FEB8E2CACB +:10C83000FFC3089B0E9CF01F0240FE91FEB0009AC1 +:10C84000069B0E9C3016F01F023DFE9FFDE6435CEA +:10C85000302AE2CBFFFD2FDCF01F022AC6DB3208B4 +:10C86000F0091900FE91FE9BC34B42EB580BFE9062 +:10C87000FF1A58065F1AEEF9018058095F0814681C +:10C88000FE90FF116D68EDB80001FE91FF0C42F8BB +:10C89000069A1AD80E9C1ADBFEFB08A442F842E95D +:10C8A000F01F021D2FEDFE9FFE7AEEF90128720C9B +:10C8B00072885D18FE90FE73EEF80128305B700CF4 +:10C8C00070195D19403BFAC6FF50324A0C9CF01FAC +:10C8D0000213EEF801605828C0C1E338005DE33B65 +:10C8E000005E0C9AF7E8108BE2CCFFA1F01F020863 +:10C8F00043065806C0E0EEFC010C580CE08003D162 +:10C90000F8CBFFFC310A0C9CF01F0206E08003C04C +:10C910003005EEF8016C5818E08000D45805C0606E +:10C92000EEFB016C581BE080029BEEF800EC58080F +:10C93000E08102B5EEC8FF545008EECAFEB8EEC959 +:10C94000FF9CE2C8FFF3508AEEC6FEC850A950987B +:10C95000306A6E85408B0C9CF01F01F2E08500FB75 +:10C96000306A408BFAC0FFD0009CF01F01E60C9BA0 +:10C97000306AFACCFFCAF01F01E3320A409B400C38 +:10C98000F01F01E8E08500D0320A409BFACCFFC4DA +:10C99000F01F01DC320A400BFACCFFA4F01F01D9D2 +:10C9A000340E1ADE40BE00991ADE34C80A9BFEFA25 +:10C9B00007920E9CF01F01E4EEC5FF6CFAC3FF7CEA +:10C9C0000A9B308A069CF01F01CF0A9CEEC6FF64CA +:10C9D000308A0C9BF01F01CB069B0C9C308AF01F09 +:10C9E00001C93018EF4800A82FEDEEF50178EEF000 +:10C9F00001745800FE90FDD3EEFA0128FAC8FF2812 +:10CA0000E9D5B0101AD8E8C9FFA1740C74D6FAC8D9 +:10CA1000FF285C79300A303B5D162FFD1893580CC7 +:10CA2000FE90FDBDEEF80160E06900FE5828F208B6 +:10CA30001710436AB48843683019B0994066436858 +:10CA40005C760C9AA3BAB0AAEEF901605829C631F7 +:10CA500030084369B2B8436AB4C8436CE2CBFFFB09 +:10CA6000308A2FBCF01F01A74368F3D4C108F169D5 +:10CA7000005D43680A9AF165005E009B436C2A1CC6 +:10CA8000F01F01A0400B436C320A2F3CF01F019DA8 +:10CA9000408940AB43682B381AD8436C0C9A1ADC97 +:10CAA000E068888E1AD30E9CF01F019F40CBEECC1D +:10CAB000FF34320A3016F01F01932FDDFE9FFCADCC +:10CAC000EEFC0104580CFE90FF2B320A0E9BF01F67 +:10CAD000019FC361320A8F8AEEF8013406991AD891 +:10CAE0000E9BEEC8FEC8EEFC0108F01F0199580627 +:10CAF0005F1AEEF9010C2FFD58095F081468FE90CB +:10CB0000FF0F0C9A069BEEFC0108F01F0192FE91AC +:10CB1000FF0EC05B436C302AE2CBFFFD2FDCF01F21 +:10CB20000179C9CB400B320AFACCFFC4F01F017562 +:10CB3000320A409BFACCFFA4F01F0172C32B310ACA +:10CB40000E9BEEFC0104F01F0181E08101B4310A6B +:10CB5000CC3B0C9BFAC0FFD0306A009CF01F0169EF +:10CB6000306A408BFACCFFCAF01F0166C07B009B85 +:10CB7000E21B2000FE91FD13403A580AFE90FD0F83 +:10CB8000334AFAC0FFD0009CF01F0164EEF901287F +:10CB90007228720C5D1850BC039903A8F1E9108843 +:10CBA000E339005DE7D8B010E338005EF1E91088A2 +:10CBB000EEF90160F7D8B0105829E080011303B9ED +:10CBC00003C8F1E910895189EBDBC0100A34E08316 +:10CBD00000CB3028406EF00E1900E08001D80A9694 +:10CBE000129B0098FAC9FFC80C9AEEFC0168F01F6E +:10CBF0000151E08100B9F5D3C010F1DAC082501ABA +:10CC000050F830194068F2081900E08000C7302859 +:10CC1000406EF00E1900E08000A4401AF1DAC0C1A5 +:10CC2000C050EEF8016458185F0850D8EEF801289B +:10CC3000306B700C70195D19009BE2CAFFC30E9C2B +:10CC4000F01F013D1895FE91FCAAEEF80128FAC9E3 +:10CC5000FF2C0A9A1AD9303B700C70D635F9FAC8F5 +:10CC6000FF245D162FFD1894580CFE90FC98EEF8EA +:10CC70000160E06900FE5828F20817104066435A28 +:10CC80005C76B488E21300304358E8130300E7E60B +:10CC9000100CF80B1608B09B4359B2ACEEF80160CB +:10CCA0005828E08102234358B0B54359B2C5435CCC +:10CCB000E2CBFFFB308A2FBCF01F01124358300A31 +:10CCC000F16A005D4359F36A005E43582B381AD865 +:10CCD00043790C9A1AD9EEC6FEB81AD40C99E068BA +:10CCE000888EEECBFFDC0E9CF01F010F2FDD40B9CC +:10CCF0005879E08101F1EEF801685848E08001E6DA +:10CD0000E08901DC5818E080014B5828E08001469A +:10CD1000FEF804441AD8EEFA0128EF38014D1AD86B +:10CD2000EF39014C1AD9EF38014B1AD8EF39014AC3 +:10CD30001AD9EF3801491AD8EF390148302B1AD9DE +:10CD4000740CFEFA0416F01F0106EEF80128307B81 +:10CD5000700C701930165D192F9DFE9FFB5EF1D58A +:10CD6000C003C0A0EEF80128306B700C70193016AB +:10CD70005D19FE9FFB52E0460020FE9BFFF5EC0B89 +:10CD80001603FAC9FFC0E2CAFFA1EECCFFCCF01F28 +:10CD900000F5FE90FF44CE7B310AE2CBFFD3FAC40C +:10CDA000FF84089CF01F00D7310AEECBFFCCFACCF1 +:10CDB000FF74F01F00D4E0450020FE9BFFD5FAC6AB +:10CDC000FFC00A9AE2CBFFA10C9CF01F00CE0A988C +:10CDD0000C99089CE06A0100320BF01F00E3C1EBE4 +:10CDE0005C7BFACAFF50E2CCFFA1F01F00C94318D8 +:10CDF0005808CB90F3D3C0105019EDB9000CCB31CB +:10CE000043282028FAC9FFC8109A5188149B00981B +:10CE1000EEFC0168F01F00C7CA61431B1788F1D8F8 +:10CE2000C00250F81789F3D9C041C050EEF8016430 +:10CE300058185F0950D94328F0CA0002E04A002080 +:10CE4000FE9BFF922FEBFACCFFC0F01F00AEEEF975 +:10CE50000128306B720C72185D18CEFAEEF80128BA +:10CE600030091AD9129A700C70D6FAC8FF285D16CC +:10CE70002FFD1893580CFE90FB92EEF5012818999F +:10CE8000EECBFEB84358E06A888E6A0C6AA65D163F +:10CE9000069CF01F009DFE9FFB82EECEFF54320BDE +:10CEA000500E1C9CF01F00B1C1F1EF4C00ECFE9F36 +:10CEB000FD46EEF80128FEFA02B6700C303BF01F7A +:10CEC00000A8EEF80128FEFA02AA700C303BF01F11 +:10CED00000A4EEF8010C5808FE90FB613008EF4802 +:10CEE000010CFE9FFD1FEEF80128FEFA028A700C6D +:10CEF000303B3016F01F009AFE9FFA8F42EC580C20 +:10CF0000FE91FBB7EEF8017C5808C061EEF8018095 +:10CF10005808FE90FBC342F830091AD8069A1AD96D +:10CF20000E9C42F8FEFB0254F01F007B2FEDFE9F8B +:10CF3000FB36EEF801805808FE91FB18EEF9012847 +:10CF4000720C72B85D18FE9FFB111099303BEEF821 +:10CF500001605828C180E2CCFFC31AD9EEC8FFBCDB +:10CF6000EEFA012830691AD830181AD930091ADCBB +:10CF7000740C7466069A5D162FCDFE9FFC11302B43 +:10CF80003209CE6BFACCFF84CE9B5875FE98FEEC2E +:10CF9000EAC60008FE9FFE264F98CBDA4F98CBBA20 +:10CFA000EDB0000CFE91FAB0EEF800A45808FE9027 +:10CFB000FA6B3018406EF00E1900C490406AF20A05 +:10CFC0001900FE91FAA1F1D4C003FE91FA5DF6C8F2 +:10CFD00000085C88109550785C750A9CF01F00482A +:10CFE0001896FE90FA51E2C4FFA11899089AEA0B2C +:10CFF0001603EECCFFCCF01F005BC2310A9A0C9BEB +:10D00000089CF01F00400C9CF01F003F4078EA098C +:10D0100016085C58E369005DE368005E5C59F1E95D +:10D020001084FE9FFA711ADA1AD4EEF801284D6ABC +:10D03000700C302B3FF6F01F004A2FEDFE9FF9EDEC +:10D040000C9C3FF6F01F0030FE9FF9E7FAC6FF8404 +:10D05000310AE2CBFFD30C9CF01F002A310AEECB41 +:10D06000FFCCFACCFF74F01F00270898E2C9FFA19B +:10D070000C9CE06A0100320BF01F003BE339005DBD +:10D08000E338005EF1E91084FE9FFA3E0E9CF01F2B +:10D09000003FEEFC0104F01F003EFE9FFC480C9A8E +:10D0A000069BEEFC0108F01F002BEF4C010CFE91DB +:10D0B000FC293015FE9FFC2F5888C0A05908FE910E +:10D0C000FE294B48FE9FFE284B38FE9FFE254B381D +:10D0D000FE9FFE22401A0C9BE21A02000E9C3016A4 +:10D0E000F01F0016FE9FF999435C302AE2CBFFFD4A +:10D0F0002FDCF01F0004FE9FFDDC0000800092008A +:10D10000800091DC800091E88002575C8002BB08BF +:10D110008003E0488002C140800091D08002C19825 +:10D120008000917C8002C1E08003E1DC800261D458 +:10D130008002B4248002B9308002C2748003E0848B +:10D140008003E1788002B354800257CC8002914C76 +:10D1500080028FB08003C6288003E19080023A1AD3 +:10D160008002D8A080029B4080028F488003E0F0BC +:10D170008003E1308003E14C8003E0048003DF089A +:10D180008003C8E48003DFC88002B9EC80025770D6 +:10D1900080039A748003DF1080039A6CD431204D91 +:10D1A0001894F8F80128E8F9016416955909F9B3BB +:10D1B0000002F9B301011492700C1A9070991A9B35 +:10D1C0005D19C635E8F80128FAC9FFF8300A1AD9FE +:10D1D000303B700C70D635F9FAC8FFF05D162FFDA4 +:10D1E0001891580CC520E8F80160E06900FE402A5B +:10D1F0005828F2081710B4880697E8F800A4ABB7CF +:10D200005808C050E0680900E7E810075805E068D2 +:10D210000400EFD8E1375802F9B80108EFD8E13738 +:10D220004028F3D7C108B09940283006B0A740295C +:10D23000B2B64028308AB0C6E8C5FF04402C0A9B2D +:10D240002FBCF01F00130A9C308BF01F00124028E7 +:10D25000F166005D4029F366005E0E99E219010057 +:10D26000FBF81002F9BA014DF1DAE1091AD9404888 +:10D2700000991AD8069A1AD1089CE068888EE8CBE3 +:10D28000FFDCF01F00052FDD2FCDD832800091DCB0 +:10D29000800239EA8002C1E0EBCD40804879720813 +:10D2A000201893081897C031F01F00050E9CF01F3E +:10D2B0000005E3CD8080000000007AB48002D2F83F +:10D2C000800091E8EBCD40C048976E065806C041FB +:10D2D000F01F0008C0916E082FF8304C8F08F01F27 +:10D2E0000006E3CD80C00C9CE3CD80C000007AB482 +:10D2F0008002D30480028F24D401F01F0002D802E0 +:10D300008002D996D401F01F0002D8028002D9947D +:10D31000D4211789179A17B8F1E9118817A9F1EAEA +:10D320001108F1E91088990817CA17D8B168F1EA0D +:10D33000118817EA17F91258F1EA10889918F73A84 +:10D340000008F739000BF7380009B168F1EA1188D5 +:10D35000F73A000A1258F1EA10889928189EF73A0D +:10D36000000CF738000DF739000FF8C5FFE4B1687D +:10D37000F73C000EF1EA11883007125849B4F1EC7D +:10D38000108C49B69D3CC038149C2F05E80707084F +:10D390002F0EFCF9FFF0F3E82189EC0C0F88E2185E +:10D3A000FF001059EC0C0F98E61800FF1059EC0C18 +:10D3B0000FB8F1D8C1081059FCF8FFF4EC0C0FAB12 +:10D3C000A96BE61BFF0016599D091059FCF8FFF8E0 +:10D3D0009D1910599D29FCF8FFFCF3E8200A8B0ADF +:10D3E0002FF758A7CD21D8228003E2F08003E6FC76 +:10D3F000EBCD40FE1892F01F002F0493E4CBFF60AA +:10D40000E4C4FFFCE4C5FF5CE4C6FFF8E4C7FF58D2 +:10D41000E4CEFFF4E4CCFF54E4C1FFB06609760823 +:10D4200087089709680A6A0889088B0A6E086C09D8 +:10D430008D088F097C0A78089D08990A2F03210B13 +:10D440002F0421052F0621072F0E210C023BCE7140 +:10D45000E4C4FFF030134985498608972F046E0A0B +:10D46000EC0A0F98EA080F9EEC0A0F88EA080F9C56 +:10D47000EC0A0FB8EA080F9BEC0A0FA8F809150888 +:10D48000FC0A1510F3EC1389F5EE130A1659EA0895 +:10D490000F9BF6081518F1EB1288105914590EA9B4 +:10D4A0000E34CDE12FF358A3CD91E3CD80FE0000E3 +:10D4B0008002D3108003E2FC8003E6FCD431209D7F +:10D4C000F736000E505A178A780917B8F1EA118812 +:10D4D000179A1258F1EA210817AEF1EE208E506E1D +:10D4E000781817CA17F9105917D8F3EA2189F3E801 +:10D4F000210917EEF3EE208E507E7828F7390008C8 +:10D50000F73A000B105AF7380009F5E9218AF73984 +:10D51000000AF5E8210AF5E920827839F73A000C8B +:10D52000F738000FFEF7034412581894F1EA2188E7 +:10D53000F739000DF8CAFF60F1E92108500AF1E659 +:10D5400020800E91E0081618406AEE080326F3DAF0 +:10D55000C008F1D2C208EE090329EE080328504999 +:10D560005038407AEE0A0F9950296878684B105667 +:10D570004068EE000FACEE080FBA4079165AEE097B +:10D580000F8BF6081508F1EB1388F8091518105AD7 +:10D59000F3EC1289EE020F9C125AF8081510F1EC08 +:10D5A0001308F5E82008685E68654079EE090FBB4E +:10D5B00050884068EE020F8C1C5BEE080FAEF80836 +:10D5C0001508F1EC1388EE000F9A105BFC09151892 +:10D5D000F4081510F3EE1289F1EA1308125B407992 +:10D5E000F7E82003EE000F8BF6081508F1EB13881F +:10D5F000EE020FBCEE090FAE0A5CFC091518105CB8 +:10D60000F3EE12894068125CEE080F9B404A4048D6 +:10D61000F6091510A968F3EB1309F1EA1388F9E983 +:10D620002000105640394038B968F1E912882E04BC +:10D63000105640294028B169400AF3E81309EDE982 +:10D6400020021434C770E4081618408AF3DAC008C0 +:10D65000E208032EE2090326F1D0C208E2030F9983 +:10D66000E20803255019E2020FACE2030F8B6809B0 +:10D67000F6081508F1EB1388E20A0FBA125AF809F6 +:10D680001518105AF3EC1289E2000F9C125AF80890 +:10D690001510F1EC1308F5E82008E2030FBB506801 +:10D6A00040886819E2000F8AE2080FAC125BF408A8 +:10D6B0001508F8091518F1EA1388F3EC1289E2004D +:10D6C0000FBAE2020F9C105BF8081510125BF1EC28 +:10D6D0001308F7E8200850786829E2030FAC125AC3 +:10D6E000F8091518F3EC1289E2020F8BF6081508F9 +:10D6F000F1EB1388105A125A4089E2090F9B6839DE +:10D70000F6081510F1EB1308125EF5E82002EC099B +:10D710001508EA081518F3E61389F1E51288125E78 +:10D720004019105EB1694018F3E81309FDE92000C3 +:10D73000C0AB4089F1D3C1084CDBFDD9C008F60865 +:10D740000706E40A1618EBD0C208F60A0709F60520 +:10D750000708F60E070CF9E9118CF3D3C008F9E8B5 +:10D76000110C4088B988F608070AF6090708F3D2B1 +:10D77000C208F1EA1188F609070AF3D0C108680E59 +:10D78000F1EA1108F609070AF1EA10881C58F009B5 +:10D790001618405AB4B8B4894059F00A1610A9882E +:10D7A000B29AB2A8E6091618F609070AF3D0C0081B +:10D7B000F6090708F1EA1188408AF3DAC208F60987 +:10D7C000070AF3D2C108F1EA1108F609070A40591D +:10D7D000681EF1EA10881C58B2F8F0091618405A71 +:10D7E000B4C94059F00A1610A988B2DAB2E8E009C3 +:10D7F0001618F609070AF3D2C008F6090708F3D38A +:10D80000C208F1EA1188F609070AF1EA1108408A0C +:10D81000F3DAC108F609070A4059682EF1EA1088C0 +:10D820001C58F368000BF0091618405AF5690008F7 +:10D830004059F00A1610A988F36A0009F368000A33 +:10D840006839405AF9E6108C125CF8081618F80985 +:10D850001610F56C000FF568000CA98CF569000D29 +:10D86000F56C000E2F7DD8328003E2FC8003E1F0DE +:10D87000EBCD40C01897590BC030E3CF80C0E06CAF +:10D8800000B0F01F00061896CF900E9BF01F00040A +:10D890000C9CE3CD80C00000800092008002D3F099 +:10D8A000D431209D129714961895500B308A0C9BFA +:10D8B000FAC2FFE4049CF01F0034ECCBFFF8400AEE +:10D8C0000E9CA37AF01F00300A9C310BF01F002F32 +:10D8D0001893C57040082018EE08003840095028F9 +:10D8E0005C39400A5C59F40A00285019E9D8C0088C +:10D8F0003050FAC7FFF4FAC1FFEC40095809E08A3A +:10D90000002940251296308A049B0E9CF01F001EB1 +:10D91000FB390013E806000812580A9BFB68001345 +:10D92000308A029CF01F00180E9A0E9B069CF01F76 +:10D930000018308A0E9B049CF01F001320160A9CCE +:10D94000308A2085029BF01F00105806FE99FFDDEB +:10D95000401A2010E80A0008E9D8C0085BF0CCE1C2 +:10D96000069CF01F000C049C3A691988F208180004 +:10D97000C0812FFCFAC8FFDC103CCF812F7DD83A44 +:10D980002F7DDC3A800091DC8002D8708002D4BC0C +:10D99000800091E85EFD5EFCD4311A97202D109E28 +:10D9A000129514965809C4911638E0880057F0086B +:10D9B0001200C0D0F608094BF0091120FC08094EEE +:10D9C000F4090A49F4080946F3EB100BFC0516109C +:10D9D000F9DEC010F6050D0AEC0816101499F1EBEB +:10D9E0001108B93A103AE088000C20191C08103EC2 +:10D9F000E08B0007103AF7B90B01F1DEEB08F00AF3 +:10DA0000010BEDD6C010F6050D0AEDEB11061498CA +:10DA1000F40C024C0C3CE088000A20181C060C3E5A +:10DA2000E08B00050C3CF7B80B01F1E9110B300C51 +:10DA3000169A189B2FEDD8321639E08B0051F20C54 +:10DA40001200C53114385F8916355F381049F8095E +:10DA50001800C450301BC4585808C0513019F2087F +:10DA60000D08109EFC081200E08100911C1BFC05B3 +:10DA70001610F3DEC010301CF6050D0AEC08161067 +:10DA8000F4090243F1EB1108149B1033E088000CF9 +:10DA9000201B1C08103EE08B00071033F7BB0B0166 +:10DAA000F1DEEB08F0030103EDD6C010E6050D0230 +:10DAB000EDE311060498E40902490C39E088000AF4 +:10DAC00020181C060C3EE08B00050C39F7B80B0142 +:10DAD000F1EB110B169A189B2FEDD832300B169CD8 +:10DAE000169A189B2FEDD832F20C0945F80E11202A +:10DAF000F00C0943F40E0A46F00E0A48F60E0A4EE0 +:10DB00000A48F0011610FC010D04EEE5FFF8F60CD2 +:10DB10000949EBD8C010EDE910090896F20E16106D +:10DB2000EEF4FFF8EC05024BFDE4110E1C3BE0881F +:10DB300000072016100E1C38E088006D161EF3D961 +:10DB4000C010FC010D00F3E11109009BE005024E3D +:10DB5000123EE0880007201B10091238E0880055AB +:10DB6000F7E6110B1C19F60306420639C0935F094C +:10DB7000F40C094C043C5F38F3E80008C020201B7B +:10DB8000300C169A189B2FEDD832F6080949FC087C +:10DB9000094EF0011120FC051610F4010A42F601AD +:10DBA0000A411242E2050D00F3DEC010E406161031 +:10DBB0000093EDE11106E009024C0C3CE0880007FF +:10DBC00020131C060C3EE088002CEC0C0101F7D25F +:10DBD000C010E2050D00F7E1110B009CE0090241C5 +:10DBE0001631E088000C201C1C0B163EE08B000751 +:10DBF0001631F7BC0B01F7DEEB0BF4080946021BEC +:10DC0000F9E3110CC3AB123EF3D8EB09F7BB0B01E0 +:10DC1000CA8B1C3BF7B60B01FDD8EB0EC90B0C3CB5 +:10DC2000F7B30B01EDDEEB06CD1BD703D40130AA11 +:10DC3000300BF01F0002D8028002F0ECD4014848FB +:10DC4000169A189B700CF01F0003D802000005986C +:10DC50008002DC54D421F40B024BF01F00151897FE +:10DC6000C230F8FAFFFCE01AFFFC204AE04A002428 +:10DC7000E08B00181898593AE088000F300910A975 +:10DC800010A959BAE088000910A910A9E04A002497 +:10DC9000C03110A910A9300910A991199109C048E3 +:10DCA000300BF01F00040E9CD82200008002E2BC62 +:10DCB0008002E8BCD421300EF6C80001F60614013B +:10DCC000F808002818991897C07870046E050EA4FB +:10DCD00091052FFE20480C3ECF95F40B000B1897B2 +:10DCE000F6C80001300EF8080028A15BC078700566 +:10DCF0006E060EA591062FFE2048163ECF95F4C85D +:10DD00000001A15AF808002C3008C078780E720B78 +:10DD100012AE990B2FF8204C1438CF95D822D70388 +:10DD2000D431205D502C503816971496580C5F0B48 +:10DD300058075F0C1295F9EB100B40E33008F00B1D +:10DD40001800E081028058095F09580A5F08F3E86B +:10DD50000008F6081800E08102764BE4402B6808C2 +:10DD60001638E0840270EE08032C580CE080026B39 +:10DD70004B9BF01F003AC06168082FF88908E08FBC +:10DD8000026268085808C05130184B598908930836 +:10DD90005806C14032D90D88F20818005F0232B926 +:10DDA000F20818005F08E5E81008C0805802F9B2D0 +:10DDB0000101F9B200022FF6C0884AACF01F002A18 +:10DDC000F9B20102F9B200004A5870085818C61199 +:10DDD0005812C2B049F95822C4A0129872043001F6 +:10DDE00032DB32BA7009F2C0FFFFEE09032C580C87 +:10DDF000E080023B1989F6091800C0805803E080D2 +:10DE00000225F4091800E081022150015014492B29 +:10DE1000F01F0012C411EE04002C029B301A2FF4E4 +:10DE2000F01F0012E08F022148A87009EE090328B4 +:10DE30005808C2F0118A32DBF60A1800C2A0580353 +:10DE4000E080020832BBF60A1800E0810203C21823 +:10DE500000007AB88003EC008002ECC800007ABCB5 +:10DE60008003EC04800326948002DCB47208EE0880 +:10DE700003285808C0E0118832D9F2081800C09071 +:10DE80005803E08001E032B9F2081800E08101DBBC +:10DE90003009500950195805E08000A44BE4680887 +:10DEA000302AEE08032C4BDBF01F003DC0D0580396 +:10DEB000E08000986808EE080328118932B8F0095C +:10DEC0001800E081008F4B7468085818E081008AC0 +:10DED0004B187008302AEE08032C4B0BF01F003053 +:10DEE000F9B80002E9F80A004AB468084AD1EE0815 +:10DEF000032C620833DB100CF01F002B1893C0E1D9 +:10DF00006808EE08032CF01F002968096208EE0972 +:10DF10000323F80801081803C08868086209EE089E +:10DF20000328F8080108121850430A910C933FF493 +:10DF300030001096C4784989720849A9EE08032C6C +:10DF400072080C9A100CF01F0016C3A1620CF01F8F +:10DF500000171836C051069600944043C3C85BF4BE +:10DF6000C2E0493870085808C7C062081AD848A8E3 +:10DF700070096E08EE090329A564EA04030A1ADA97 +:10DF80001AD91AD848B8700848BB702CF01F000B7B +:10DF90002FCDC67800007AB88003EC008002E7102D +:10DFA00000007ABC8002ECAC8002EDD0000004A43A +:10DFB000000005988003EC1480031FE800942FF004 +:10DFC0002F01620B580BCB81069640435BF4C031A6 +:10DFD0000898C0A8E8081504EA0800087018C048A6 +:10DFE0003FF83003109458065F19F3E403F9C03189 +:10DFF0003006C5484BE162084BE3EE08032966088A +:10E000000C9CF208070BF01F003C1896C2D14BB8CD +:10E0100070085808C11062096608EE090329F20861 +:10E0200007081AD86E081AD84B5870084B5B702C2A +:10E03000F01F00352FED4AF8700B2FFB910B4AC9EA +:10E04000720AEE0A032CF80B070C300BF60C1800C2 +:10E05000F7BA00FFF3FA0A00F9B90001F1F90A0072 +:10E0600033F8109CC818199833A9F2081800C0306A +:10E070003008C08819A9F0091800F9B80002F9B8E9 +:10E08000010149CA49A97209EE09032974030D8ADD +:10E090002FF3F203000349D9930A5818C1505828A6 +:10E0A000C0405808C6C0C208078933D8F009180014 +:10E0B000F7B300FF4968078A3009F20A1800C10166 +:10E0C00030069106C718078933D8F0091800F7B34E +:10E0D00000FF30080789F0091800C1B048C8910353 +:10E0E0003019484891093006C5F8000000007AB898 +:10E0F00000007ABC8002ECAC000004A4000005988B +:10E100008003EC5080031FE8000004A000007AC0E8 +:10E110004C08402B70082FF81638C2954BE8700851 +:10E120005808C1C06E084BD71AD86E084BCB702C5C +:10E13000F01F003C2FFD5BF4C0906E08A5644BAB54 +:10E14000EA0403091AD9702CC0686E080D894B7B4C +:10E150001AD9702CF01F00332FFD4AE933A8720A38 +:10E16000109C2FFA930A4B299308C6D84B19EE0836 +:10E17000032A3018930A10964AF9C1584AE95BF409 +:10E18000C0D1720A2FFA930A4A2B760BEE0B032B9F +:10E19000F60A070AF00A1800C03130189308300850 +:10E1A0004A49109693085802C1B140094A285809B3 +:10E1B0005F19700858185F08F3E80008E4081800B1 +:10E1C000C0F04018ECCAFFFFEE08002C400BF01F17 +:10E1D000001B40182FF8F006000648E8C0A8496860 +:10E1E00070085818C07148B870092FF9F206000677 +:10E1F00091065BF4C240403B580BF7F41A00A5644B +:10E2000008056A3C6A285808C1E0910C300CC1B876 +:10E2100000007AB8000004A4000005988003EC70A8 +:10E2200080031FE88003EC948003EC9C000004A0B2 +:10E2300000007AC000007ABC8002DCB448C8700CD0 +:10E24000C0283FFC2FBDD83291002FF1FE9FFDCC9E +:10E25000488B97084888F2CAFFFF3019910A129C30 +:10E2600048389109CF0B48489104CECB000004A058 +:10E2700000007AC000007AB8D40130091AD9129887 +:10E28000F01F00022FFDD8028002DD20D401484893 +:10E29000189B700CF01F0003D802000000000598C6 +:10E2A0008003217CD4014848189B700CF01F0003A8 +:10E2B000D8020000000005988002E2BCD431F6C705 +:10E2C000FFF518955967F9B70810F9B80BF8EFD8AA +:10E2D000EB2716375F38F1E713F8C05030C899388C +:10E2E000E08F01F4F01F0050E04701F7E08B001CC5 +:10E2F000EE0316034CD8F003003870361036C061B8 +:10E30000ECC8FFF870361036C0C06C18E018FFFC7F +:10E310006C3AEC0800090A9C6C289528913AC4785C +:10E320002FE3C4D8EE081609C041EE031603C278E5 +:10E330005848E08B0006EE0316062C83C2085948A5 +:10E34000E08B0005F0C3FFA5C1A8E0480054E08BB6 +:10E350000006EE03160C2923C128E0480154E08B87 +:10E360000006EE03160F2893C0A8EE031612E0482D +:10E370000554E088000437E3C02828434ABAF40370 +:10E38000003A7436C1986C19E019FFFCF207010BD2 +:10E3900058FBE08A00042013C1186C38580BC0B534 +:10E3A0006C2AEC0900090A9C912A95387218A1A8D8 +:10E3B0009318CBD810961436CE712FF349BAF4CCFB +:10E3C000FFF878261836C6F06C19E019FFFCF20742 +:10E3D000010858F8E0890091993C992C5808C055DB +:10E3E000EC0900090A9CCE3BE04901FFE08B0013D9 +:10E3F000A399F4090038702B8D388D2B9736912610 +:10E40000A3497418301BF6090949F1E91009951957 +:10E41000C4A8F20816095848E08B000AF20A16064A +:10E420002C8AC2488002E8CA0000059C5948E08B4B +:10E430000005F0CAFFA5C1A8E0480054E08B000623 +:10E44000F20A160C292AC128E0480154E08B000684 +:10E45000F20A160F289AC0A8F20A1612E0480554CC +:10E46000E088000437EAC028284A4C8BF60A0034BA +:10E4700068280838C0E17619A34A301EFC0A094A08 +:10E48000F3EA100A1099971AC0A870280838C060DB +:10E49000701AE01AFFFC1439CF9370398D398D282A +:10E4A00091369326E6081402301B4B84F608094B7C +:10E4B0006818103BE08B006EF7E80009C0B1E0136C +:10E4C000FFFCA17B2FC3C0382FC3A17BF7E8000955 +:10E4D000CFC0E803003E06921C916236C2E86C1A77 +:10E4E000E01AFFFCF407010858F8E08A00156C3ABE +:10E4F0006C299529933A0E99EC070007A1A9993741 +:10E5000099278D19EE0809088F2C8F3CA1A80A9C29 +:10E510008F18C0D86C395808C0F5EC0A000A741876 +:10E52000A1A80A9C95186C2893289139F01F00180F +:10E53000ECCCFFF8D83212960236CD212FF2F1D270 +:10E54000C002C0302F81CCAB1C98F3D3C002C08175 +:10E550006819F60811FFF3E800088918C078F0C9B7 +:10E560000008201370081238CF10A17B6818103BE8 +:10E57000E08B0010580BC0D00493C0382FC3A17B90 +:10E58000F7E80009CA71CFBB0000059C8002E8CC07 +:10E5900068236612E012FFFC0E325F39E4070108BF +:10E5A00058F85FAAF5E91009E08000A24C887001D4 +:10E5B0004C882F0170080E015BF8C0402811E01153 +:10E5C000FF80029B0A9CF01F004418965BFCC6E08B +:10E5D000E6020008103CC0320833C6814BFA7409C9 +:10E5E000E209000995091036C0A1F5D6C007C0712F +:10E5F000E20200026828A1A29112C4C84B5A740B0F +:10E600005BFBC0319506C068EC0900094B3A101954 +:10E610009509F1D6C003F00911085808F20817103F +:10E62000EDD8E1062808EC0100010A9CE3D1C007FF +:10E63000F0010101029BF01F00284A885BFCEC0CF2 +:10E640001700F9B1000070090C1C8926020C120198 +:10E65000A1AC91018D1C0833C1D058F2E08B0005AC +:10E6600030188D18C238305920C2E012FFF8E60287 +:10E670000008912991196618F1D8C001E5E8100841 +:10E68000871858F2E0880007E6CBFFF80A9CF01FD5 +:10E6900000144949720A491870081438F3F8BA008E +:10E6A0004919720A1438F3F8BA0068287018E0188B +:10E6B000FFFC0E385F390E1858F85FAAF5E910090B +:10E6C000C1600A9CF01F0009D83A000000007ACC13 +:10E6D000000009A88002EBC800007AD08003217CEA +:10E6E00000007AC800007AC48002E8CC6826A1A89D +:10E6F0000E99A1A98D19EC0700070A9C89278F188C +:10E70000F01F0003ECCCFFF8D83200008002E8CC08 +:10E71000D4013008C0D8F808070EF6080709201AF7 +:10E720002FF8F20E1800C040FC09010CD802580A5C +:10E73000CF31149CD802588AC2F5F9EB1009E219BE +:10E740000003E0810097E04A0020C3B4F4081402FB +:10E75000F0091108FE09002F7669996976599959CF +:10E7600076499949763999397629992976199919E5 +:10E7700076099909F608002BF8080028E01A00032A +:10E78000F40A1104FE0A002F17A9B0A91799B0992D +:10E790001789B0895EFCF40A1109FE0A002F17F9E7 +:10E7A000B8F917E9B8E917D9B8D917C9B8C917B965 +:10E7B000B8B917A9B8A91799B8991789B8895EFC8B +:10E7C000EBCD40C01899220AB707B326B707B32686 +:10E7D000B707B326B707B326220ACF742F0AC0653E +:10E7E000B707B326B707B326210A5C3AFE0A003FF3 +:10E7F000D703D703F736000EF366000EF736000D89 +:10E80000F366000DF736000CF366000CF736000BCC +:10E81000F366000BF736000AF366000AF7360009C4 +:10E82000F3660009F7360008F3660008F7360007BC +:10E83000F3660007F7360006F3660006F7360005B4 +:10E84000F3660005F7360004F3660004F7360003AC +:10E85000F3660003F7360002F3660002F7360001A4 +:10E86000F3660001F7360000F3660000E3CD80C0D8 +:10E87000201AF60A0709F80A0B09CFB15EFCD40189 +:10E88000183BC192F60A0009123CC152F80A000B6B +:10E890003008C068F208070E201AF6080B0E201880 +:10E8A000580ACF91D802F6080709201AF8080B0970 +:10E8B0002FF8C0283008580ACF71D8021898C038ED +:10E8C00010CB201A580ACFD15EFC5EFC5EFCD70349 +:10E8D000D4014848169A189B700CF01F0003D80208 +:10E8E000000005988002E8E8D431201D16941892A3 +:10E8F000149B5804C051F01F005B1895C5B9500A0D +:10E90000F01F0059400BE8C10008F6C6FFF5621C75 +:10E910005966F9B60810F9B80BF8EDD8EB2616369B +:10E920005F38F1E613F8C05030C830058538C42987 +:10E930001890E010FFFC0C30E08401124CB8E200AB +:10E94000000970250A39C090721AA1CAF20A000A99 +:10E95000741AEDBA0000C220721AE01AFFFCF4002B +:10E9600000030A39C131ECC7FFF00E33C195E2064E +:10E9700000090C13A1A393139129049C6218089514 +:10E98000F1D8C00110468316C1390C33C0957228E6 +:10E990000297723993289139CE48300A1499EDBC08 +:10E9A0000000E080009D6207E20701076E1CE01C8A +:10E9B000FFFC5809C5E0F80000030A39C4811403BC +:10E9C000ECC9FFF01233C5556E3A6E299529933A7A +:10E9D000EEC5FFF8E0CA0004E04A0024E08B002501 +:10E9E0000A99593AE088001A09098B0909098F39EF +:10E9F000EEC9FFF059BAE0880011090B930B090921 +:10EA00008F59EEC9FFE8E04A0024C071090A930A51 +:10EA1000EEC9FFE0090A8F7A090A12AA680A930A66 +:10EA2000681A931AC0785008089B0A9CF01F0010BF +:10EA30004008EE0600090C13A1A393139129049C2E +:10EA40006E18F1D8C00110468F16CB2814030C3372 +:10EA5000C10572287239932891396E286E39C0F831 +:10EA60008002E2BC8002E8CA0000059C8002E87EC9 +:10EA7000F80000030C33C3356E396E2893289139A2 +:10EA8000E0CA0004EECCFFF8E04A0024E08B00244A +:10EA9000593AE088001A0908990809088F38EECC1D +:10EAA000FFF059BAE08800110908990809088F5841 +:10EAB000EECCFFE8E04A0024C07109089908EECCCA +:10EAC000FFE009088F78090818A8680899086818ED +:10EAD0009918C478089BF01F0039C438049CF01FB3 +:10EAE00000381895C3A06218F8C90008A1C8E20848 +:10EAF00000081039C07172130297E013FFFC000385 +:10EB0000C308E0CA0004E04A0024E08B0020089912 +:10EB10001898593AE0880014130B10AB130B10AB84 +:10EB200059BAE088000D130B10AB130B10ABE04A81 +:10EB30000024C051130A10AA130A10AA130A10AA1B +:10EB4000720A910A72199119C048089BF01F001BA4 +:10EB5000089B049CF01F001B049CC2A80093029712 +:10EB6000E60601096E1858F9E0880016F1D8C001D0 +:10EB7000EDE810088F181298A1A8EE06000BF60910 +:10EB8000000997187218A1A82F8B9318049CF01FE6 +:10EB9000000DC0B8F1D8C001E7E810088F18EE03E7 +:10EBA00000036618A1A88718049CEEC5FFF8F01FA3 +:10EBB00000060A9C2FFDD8328002E87E8002E2BC6B +:10EBC0008003217C8002E8CCD42130081897487655 +:10EBD000169C8D08F01F00065BFCC0516C0858089D +:10EBE000EFF81A03D822000000008CC48002F1E87C +:10EBF0005EFDD703D421217DE06802041697BA6830 +:10EC0000504C500CF01F000B3008512850D848A829 +:10EC100050983FF8BA784898505C501CFAC9FF9059 +:10EC20000E9A700C1A9BF01F00062E9DD822000031 +:10EC30008002EDD08002EBF00000059880030C4CC0 +:10EC4000D421217D4988FAC9FF9016977006580B88 +:10EC5000C064E068008B3FFC8D38C228580BF60872 +:10EC600017005807F9BB01FFEFDBE10850585028A7 +:10EC7000E0680208BA683FF8504C500CBA781A9B0A +:10EC80000C9CF01F000A5BFCC044E068008B8D38D0 +:10EC90005807F9B90100FBF81000F1F91E002E9D8C +:10ECA000D8220000000005988002F5685C5BC0284F +:10ECB0002FFC19885808C050F6081800CFA15EFC38 +:10ECC000580B5E0C5E1DD703F9EB100AE21A000325 +:10ECD000C341780A76095CEAC170123AC151781AC8 +:10ECE00076195CEAC110123AC0F1782A76295CEAFA +:10ECF000C0B0123AC091783A76395CEAC0502F0C15 +:10ED00002F0B123ACE70F9DAC308F7D9C3085E0C9C +:10ED1000161C5E1CF9DAC208F7D9C2085E0C161C74 +:10ED20005E1CF9DAC108F7D9C1085E0C161C5E1C1E +:10ED30005C5A5C59121A5EFA178A1989580A5E09D8 +:10ED400014195E19179A1999580A5E0914195E194F +:10ED500017AA19A9580A5E0914195E1917BA19B920 +:10ED6000580A5E0914195E192FCB2FCCCE6B000008 +:10ED70003008F6080709F8080B092FF85809CFA141 +:10ED80005EFCD703D4014848189B700CF01F0003A9 +:10ED9000D8020000000005988002ED9CD42118974D +:10EDA0001696169CF01F0008F8C5FFFF0E9C0A9BE4 +:10EDB000F01F00061897C0500A9A0C9BF01F000421 +:10EDC0000E9CD8228002EDD08002E2BC8002E736A1 +:10EDD00030091898C0282FF8118AF20A1800CFC1FC +:10EDE000F00C010C5EFC580AC0815EFA580AC0B0F3 +:10EDF0005808C0902FFC2FFB201A19881789F0099A +:10EE00001800CF50198C1788101C5EFC3008103A7F +:10EE10005E0CF6080709F8080B092FF85809CF818E +:10EE2000103A5E0CF8080B092FF8CFBBD401484804 +:10EE3000169A189B700CF01F0003D802000005986A +:10EE40008002EE44D421300816951696C0282FF67D +:10EE5000580AC060201A0D89F0091800CF910A16CF +:10EE6000ECCBFFFFF01F00071897C0800A9B0C9A9D +:10EE7000F01F00053008EE060B080E9CD82200009B +:10EE80008002E2BC8002E736D42118981696580B0F +:10EE9000C0C03007C0481897F8C8FFFF109C0C9BF3 +:10EEA000F01F0005CF91C048F01F000318970E9C7B +:10EEB000D82200008002ECACD421201D4A351897DE +:10EEC0006A04E8F600E85806C351500B350CF01FF1 +:10EED00000206A08E94C00E8F0F900E89326930660 +:10EEE0009316F0F900E893469336F0F900E893663C +:10EEF0009356F0F900E893B693A6F0F900E893D69C +:10EF000093C6F0F900E893F693E6F0F900E8F346CB +:10EF10000044F3460040F0F900E8F346004CF346A5 +:10EF20000048F0F900E8F366001CF0F800E8400B38 +:10EF30009196486870080E9CF0FA00E83019F01FAE +:10EF400000052FFDD8220000000005988002E2A4F1 +:10EF50008002EF54D421580CC041740C580CC2905C +:10EF600018981697113EC0A80C3EC0815809C030B1 +:10EF7000109CCF7B9508B889D8220F365806CF5100 +:10EF8000580EC051950E1C9CD822129810991697B5 +:10EF9000133E0F361C36C0A1580EFC091700F9BBF2 +:10EFA0000100F1FB1E009509D8225806CF31CEEBA7 +:10EFB000D822D703D431203D4CC8502C700116986C +:10EFC000113EE20E0706E2160008CFB1E04E002D1A +:10EFD000C041113E3016C058E04E002BC021113EFA +:10EFE00058095F0C59095F053007F9E51005EE0572 +:10EFF0001800C1E0E04E0030C131118535843783FF +:10F00000E80518005F04E60518005F05E9E510054E +:10F01000EE051800C050119E31092FE8C098580C19 +:10F02000C070E04E0030F9B90008F9B9010AE06C8F +:10F03000FFFFEA1C7FFF3007FC1580000E930E36A1 +:10F04000F80517000E9CEA090D0408925005E20E1F +:10F050000704E1D4C001F9B00137F9B000575010EE +:10F06000FCC500300890E2100004C0814010E9D4D3 +:10F07000C002FC0001055804C1C01235C1A4043C03 +:10F080005FBEFDE713FEE60E1800C101043C5F0EF3 +:10F0900040070E355F97EFEE000EE60E1800C061D8 +:10F0A000B33C3017EA0C000CC0283FF7113ECD0BE3 +:10F0B0005BF7C0E1E069FFFFEA197FFFFC1C8000FD +:10F0C00040205806F20C170032298139C0485806F2 +:10F0D000FBBC0100580AC0705807F9B901FFF1D90B +:10F0E000E10B950B2FDDD8320000049CD401485869 +:10F0F0001499169A189B700CF01F0003D802000098 +:10F10000000005988002EFB43028D6733FFC358BA1 +:10F11000580C5E4C482A950B5EFC000000008CC425 +:10F120003058D6733FFC358B580C5E4C482A950BF3 +:10F130005EFC000000008CC43038D6733FFC358B79 +:10F14000580C5E4C482A950B5EFC000000008CC4F5 +:10F150003048D6733FFC358B580C5E4C482A950BD3 +:10F160005EFC000000008CC430B8D6733FFC358BC9 +:10F17000580C5E4C482A950B5EFC000000008CC4C5 +:10F180003098D6733FFC358B580C5E4C482A950B53 +:10F190005EFC000000008CC4D421210D16971A9B40 +:10F1A000F01F0011C0343FFCC1C84008AE08401831 +:10F1B000AE1840288F184038AE484048AE584058E6 +:10F1C000AE684068AE7840888F4840A88FB840C885 +:10F1D0008FC840D88F5840E8300C8F7840F88F980F +:10F1E0002F0DD8228002F180D40148C87009580937 +:10F1F000C03148B99109489948AA7208F00C000C2E +:10F20000143CE08B0004930CC068F01F000730C86A +:10F2100099083FF8109CD80200007AF800008CC8CA +:10F220000000F00080031D20D431208DFAC4FFBC03 +:10F23000504B682E505812967C0B7005506E580B30 +:10F24000F40B17006803681140493008C2C92FFB4E +:10F25000325C178AF80A18005F1EF00A18005F1C5B +:10F26000FDEC000CF00C1800CF31580AE0800129A9 +:10F27000300C3FFA1890503A18941892F80C003C51 +:10F280001697507C4CDC0F3AF80A070E407C1C0C99 +:10F290004CBEFC0C070E201E500E4CAEFC0C070C96 +:10F2A000507C400C587CE08B00F84C7EFC0C032F0B +:10F2B000368BF60A1800E08000F0371BF60A1800BB +:10F2C000C07034CBF60A1800C051A3B4CE58A5B410 +:10F2D000CE380F8B36CAF40B1800C051A5B4EECB54 +:10F2E000FFFFCDB8A5A4CD88EBD5C005367CF80AC4 +:10F2F0001800E08B0027365BF60A1800C48234FB46 +:10F30000F60A1800C480E08B000C345BF60A180083 +:10F31000C3E0347BF60A1800C3A0344BC088358B99 +:10F32000F60A1800C2C0E08B0007355BF60A180029 +:10F33000C351C318363BF60A1800C2F0364BC0E87A +:10F34000370BF60A1800C250E08B000D36EBF60AB8 +:10F350001800C1F0E08B0014369BF60A1800C1E1DA +:10F36000C0E8375BF60A1800C0A0378BF60A180011 +:10F37000C060373BF60A1800C111C0B8EDB40004F4 +:10F38000C0A0EDB40005C0913020C0883040C068F6 +:10F390003030C0483010C0283000403B5BFBC040DC +:10F3A000E20B0920C7985860E08B00776C0AEACC22 +:10F3B000FFFF486EFC00032F8003EE088003ED641E +:10F3C0008003ECF88003ECAC8003ECCCF4CBFFF8CA +:10F3D0008D0BF4EA0000E605083AC0F8F4CBFFFC18 +:10F3E0008D0B740AE605093AC088F4CBFFF88D0B43 +:10F3F000F4EA0000E605083A0E9B1895C4E8620A94 +:10F400005BFAC0B150195028E06A0080300B029CB2 +:10F41000F01F004D40284019E4CC00010E9B503CE9 +:10F42000F20C0C49C3A8620A5BFAC0B1501950280B +:10F43000E06A0080300B029CF01F00434028401916 +:10F440002012300A0E9BE202092AF2020C49C2582D +:10F4500016976C0AF4CBFFFC8D0B740A0E9BE60525 +:10F46000093A2FF5C1A8F4C20030C068E4020022B6 +:10F470002FF7F40200120F8A580AC0E0230A589AA4 +:10F48000FE98FFF6C0982FF70F8A580AC050230A3B +:10F49000589AFE98FFFA0E9B407C30BAF40C180084 +:10F4A000FE91FEEE4042178C0A325F4AF00C1800C3 +:10F4B0005F1CF9EA000AF00A1800FE91FECB300842 +:10F4C000404E178AE2050021F00A1800FC091710C7 +:10F4D000E6050038069EC2A8620A583AC1E0E089F3 +:10F4E0000007581AC1A0582AC181C058585AC0C034 +:10F4F000C0B5C1386C0AF4CCFFF88D0CF4E2000002 +:10F50000F0E30000C1086C0AF4CCFFF88D0CF4E2C3 +:10F510000000F0E30000C0786C0AF4CCFFFC8D0C16 +:10F52000740A910A2FF52F882FC11235FE9AFFD643 +:10F530001C934052406E85059D0B404BE60B003CF2 +:10F540002F8DD8328002E8BCD42114977428580833 +:10F55000C0419518109CD822F01F000330088F1866 +:10F560008F28D82280032320D431FACD068850A9D1 +:10F57000169014971893580CC06078685808C031DA +:10F58000F01F004E4CE81030C0316600C0A84CD8C7 +:10F590001030C0316610C0584CB81030E7F000028F +:10F5A0008068EDB80003C04160485808C071009BF6 +:10F5B000069CF01F0046E0810B4080681099E2191C +:10F5C000001A58A9C3D18079300AF4091900C385FB +:10F5D000A1D8FB5805B86088FB4805CC60A8FB485B +:10F5E00005D4FAC8FFD4FB4805BCFB4805ACE0686D +:10F5F0000400FB4805C0FB4805B43008FB5905BAB8 +:10F600000E9A40A9FAC7FA54FB4805C4069C0E9B03 +:10F61000F01F002F506CC0950E9B069CF01F002D14 +:10F62000406EF9BE01FF506EFB0805B8EDB800064C +:10F63000E0810B058068A7A8A068E08F0B00300868 +:10F64000FAC4F9F85098FB480678409CFB480674C9 +:10F65000FB48067CFB48068050573FF8FB44067089 +:10F66000FB48052C506C1896069150204055C02838 +:10F670002FF50B88300B325AF60818005F19F40882 +:10F6800018005F181268F6081800CF314059EA09CF +:10F690000107C2E0FAF806780E088909FB480678E7 +:10F6A0008917FAF806742FF8FB4806745878E08931 +:10F6B00000132F84C1A8000080031F388003EF2CA3 +:10F6C0008003EF4C8003EF6C80031C388002F568E8 +:10F6D00080031D2CFACAF990402B029CF01F00A158 +:10F6E000E0810AA6FAC4F9F840680E0850680B8851 +:10F6F0003007EE081800E0800A8AEAC2FFFF3003F4 +:10F700005052FB6706873FFE50745043503E0690B0 +:10F71000508506920C944057C0683FFC0A97503CB5 +:10F72000C02830000F38C0281292E0480063E08003 +:10F7300001CCE0890045E0480039E0890026E04836 +:10F740000031E0840198E048002BE0800101E0896D +:10F75000000FE0480023E080008EE048002AE080AF +:10F76000008CE0480020E0810897C7B8E048002EF0 +:10F77000E08000F1E0480030E080017BE048002DAF +:10F78000E081088ACE28505750420897408540743F +:10F790001092E048004FE0800439E0890008E0481A +:10F7A0000044E081087DE08F01DEE0480055E08004 +:10F7B00005DFE0480058E0810873C428E048006F86 +:10F7C000C430E089001FE0480069C450E089000AA5 +:10F7D000E0480064C400E0480068E081085DC63984 +:10F7E000E048006CE0800163505750420897408524 +:10F7F00040741092E048006EE0810852E08F02ED04 +:10F80000E0480073E0800553E089000BE048007099 +:10F81000E08004F9E0480071E081083EC5295057B6 +:10F8200050420897408540741092E0480075E0808F +:10F8300005A0E0480078E0810833E08F06964CABE5 +:10F84000509BE08F06945057408508975042407473 +:10F85000E08F03DD50574085089750424074C83907 +:10F86000FB380687300AF4081800FE91FF5D320865 +:10F87000C6E8A1A3C58B0F89F2C800305898E08B69 +:10F88000001EEEC8FFFF300B2309F60B002BF20B16 +:10F89000001B1139F2CA0030589AFE98FFF7E04970 +:10F8A0000024FE91FF40E04B0020E08909C1201BAD +:10F8B000FAF90680123BC095C108FAF90680ECCA35 +:10F8C000FFFF1236C1F5C268FAC9F9781097F20B3A +:10F8D000003BF6F2FDA4C358FAC7F9841AD7109773 +:10F8E000FAC2FAD01AD2FAC8FBCC029C1AD8FAC8CB +:10F8F000F974FAC9FFCC40BAF01F001C2FDD780262 +:10F90000C208FACEF9781496FC040038F0F2FDA48F +:10F91000C18840A859F9E0890011F0CBFFFC50AB39 +:10F920007002FACCF978F8090038F142FDA42FF9F9 +:10F930001496FB490680C058700214962FC850A830 +:10F940005802FE94FEF15C32A3A3CEDAFB68068770 +:10F95000CEAA0F38E048002AC0A03009C7D800005E +:10F960008002F5488003EDD08002F2280F88F0C9AC +:10F9700000305899E08B001EEEC5FFFF300B2308C6 +:10F98000F60B002BF00B001B0B38F0C90030589918 +:10F99000FE98FFF7E0480024FE91FEC5E04B0020F2 +:10F9A000E0890946201BFAF80680103BC095C10883 +:10F9B000FAF90680ECCAFFFF1236C1F5C288FACA0E +:10F9C000F978F40B003BF6FBFDA4503BC3C8FAC921 +:10F9D000F9841AD9FAC8FAD01AD8FAC8FBCC029C12 +:10F9E0001AD8FAC8F974FAC9FFCC40BAF01F027AE3 +:10F9F0002FDD780C503CC278FACEF9780E95FC04D5 +:10FA000000381496F0F8FDA45038C1D840A859F930 +:10FA1000E0890014F0CBFFFC700850AB5038FACCF2 +:10FA2000F978403BF8090038F14BFDA42FF90E9509 +:10FA3000FB4906801496C07870090E952FC850397E +:10FA4000149650A840385808FE95FE690A97C6BA21 +:10FA5000F40B00190F38F209002BF0CA0030589A45 +:10FA6000FE98FFF83FFEF20E0C495039C5FAA7B3D5 +:10FA7000C5AA30092308F2090029F00900190F3836 +:10FA8000F0CA0030589AFE98FFF7E0480024FE9133 +:10FA9000FE4DE0490020E08908CBF2C4000130109F +:10FAA000FE9FFE42A7A3FE9FFE3F0F89F0091800AC +:10FAB000C0512FF7A5B3FE9FFE37A5A3FE9FFE34CE +:10FAC000A5B3FE9FFE3150575042089740854074C1 +:10FAD0000C99FAF806805800C1D01037C064FACCEF +:10FAE000F978F8070037C1D8FAC8F9841AD8FAC8E3 +:10FAF000FAD01AD8FAC8FBCC1AD8FAC8F974FAC9DD +:10FB0000FFCC0A9A0E9B029CF01F02332FDD19B81E +:10FB1000C2282FF61039C084FACBF978F6070037DF +:10FB2000EF38FDA7C18840A959F8E0890012F2CA50 +:10FB3000FFFC50AA7209FAC2F978E408003A2FF8DB +:10FB4000F549FDA4FB480680F1D9C008C04813B8A8 +:10FB50002FC950A9300EFB680648FB6E0687E08F60 +:10FB600006A7A5A30C92EDB30005C4D1FAF8068050 +:10FB70005800C1E01037C064FACCF978F8070037B4 +:10FB8000C1F8FAC8F9841AD8FAC8FAD00A9A1AD869 +:10FB9000FAC8FBCC1AD8FAC9FFCCFAC8F9740E9B84 +:10FBA000029CF01F020D2FDD781A7809C288ECC282 +:10FBB000FFFF1036C0A4FACBF978F6070037EEFA4B +:10FBC000FDA8EEF9FDA4C1B840A959F8E0890013D9 +:10FBD000F2CAFFF850AAFAC6F978721AEC08003B8C +:10FBE0007209F74AFDA8F749FDA42FF8FB480680E3 +:10FBF000C068F2C8FFF8721A50A87209049650093A +:10FC0000501ACD58EDB30004C441FAF806805800EC +:10FC1000C1D01037C064FACEF978FC070037C1E8CC +:10FC2000FAC8F9841AD8FAC8FAD00A9A1AD8FAC8BF +:10FC3000FBCC0E9B1AD8029CFAC8F974FAC9FFCC07 +:10FC4000F01F01E52FDD780AC218ECC2FFFF103665 +:10FC5000C084FACCF978F8070037EEFAFDA4C16841 +:10FC600040A959F8E0890010F2CAFFFC50AAFACB6B +:10FC7000F978720AF6080039F34AFDA42FF8FB4818 +:10FC80000680C048720A2FC950A90496501AC8D8D5 +:10FC9000EDB30006C481FAF806805800C1D01037D1 +:10FCA000C064FAC8F978F0070037C1E8FAC8F984E7 +:10FCB0001AD8FAC8FAD01AD8FAC8FBCC1AD8FAC897 +:10FCC000F974FAC9FFCC0A9A0E9B029CF01F01C27C +:10FCD0002FDD9818C238ECC2FFFF1036C084FAC678 +:10FCE000F978EC070037EF08FDA6C18840A959F85C +:10FCF000E0890012F2CAFFFC50AA7209FACEF97824 +:10FD0000FC08003A2FF8F549FDA4FB480680F1D91C +:10FD1000B010C04892182FC950A950180496BF5867 +:10FD20005008C458FAF806805800C1D01037C06493 +:10FD3000FACBF978F6070037C1E8FAC8F9841AD87F +:10FD4000FAC8FAD00A9A1AD8FAC8FBCC0E9B1AD86D +:10FD5000029CFAC8F974FAC9FFCCF01F019F2FDD8D +:10FD6000780AC218ECC2FFFF1036C084FACAF978CC +:10FD7000F4070037EEFAFDA4C16840A959F8E089FC +:10FD80000010F2CAFFFC50AAFAC6F978720AEC0811 +:10FD90000039F34AFDA42FF8FB480680C048720AD8 +:10FDA0002FC950A90496501ABF5A500AFAEA000007 +:10FDB000580A5C2BC0E43008FAEA00003009F00A67 +:10FDC000010AF20B014B32D8FAEB0000FB68068700 +:10FDD0003010E08F04E30C99EDB30005C471FAF81C +:10FDE00006805800C1D01037C064FACAF978F40709 +:10FDF0000037C1D8FAC8F9841AD8FAC8FAD00A9AD2 +:10FE00001AD8FAC8FBCC0E9B1AD8029CFAC8F9740F +:10FE1000FAC9FFCCF01F01702FDD780AC2082FF657 +:10FE20001039C084FAC9F978F2070037EEFAFDA458 +:10FE3000C16840A959F8E0890010F2CAFFFC50AA35 +:10FE4000FAC3F978720AE6080039F34AFDA42FF8DC +:10FE5000FB480680C048720A2FC950A94062049826 +:10FE60009512BF589508FE9FFC03EDB30004C441F2 +:10FE7000FAF806805800C1D01037C064FACEF9787D +:10FE8000FC070037C1D8FAC8F9841AD8FAC8FAD0E2 +:10FE90000A9A1AD8FAC8FBCC0E9B1AD8029CFAC848 +:10FEA000F974FAC9FFCCF01F014C2FDD780AC208A3 +:10FEB0002FF61039C084FACCF978F8070037EEFA3B +:10FEC000FDA4C16840A959F8E0890010F2CAFFFCFE +:10FED00050AAFACBF978720AF6080039F34AFDA461 +:10FEE0002FF8FB480680C048720A2FC950A9406904 +:10FEF0009509FE9FFBBDE2130040C440FAF806805E +:10FF00005800C1D01037C064FAC8F978F00700373C +:10FF1000C1D8FAC8F9841AD8FAC8FAD00A9A1AD8F5 +:10FF2000FAC8FBCC0E9B1AD8029CFAC8F974FAC91D +:10FF3000FFCCF01F01292FDD780AC2082FF61039F7 +:10FF4000C084FAC3F978E6070037EEFAFDA4C16869 +:10FF500040A959F8E0890010F2CAFFFC50AAFAC281 +:10FF6000F978720AE4080039F34AFDA42FF8FB4837 +:10FF70000680C048720A2FC950A9406EB40EFE9F79 +:10FF8000FB77FAF806805800C1D01037C064FACC6D +:10FF9000F978F8070037C1D8FAC8F9841AD8FAC82E +:10FFA000FAD00A9A1AD8FAC8FBCC0E9B1AD8029C2F +:10FFB000FAC8F974FAC9FFCCF01F01072FDD780ADF +:10FFC000C2082FF61039C084FACBF978F60700374B +:10FFD000EEFAFDA4C16840A959F8E0890010F2CA00 +:10FFE000FFFC50AAFAC3F978720AE6080039F34A0E +:10FFF000FDA42FF8FB480680C048720A2FC950A9FB +:02000004800377 +:1000000040629502FE9FFB34A5A30C99EDB3000559 +:10001000C571FAF806805800C2601037C0A4FACE45 +:10002000F978FC070037EEEAFDA4FAEB0000C1887E +:10003000FAC8F9841AD8FAC8FAD01AD8FAC8FBCC88 +:100040001AD8FAC8F974FAC9FFCC0A9A0E9B029C16 +:10005000F01F00E12FDDF8E80000FAE900003000B1 +:10006000E08F03992FF61039C0B4FAC8F978F00779 +:100070000037EEEAFDA4FAEB0000E08F038C40A904 +:1000800059F8E0890016F2CAFFF850AAF2EA000017 +:10009000FAEB0000FACAF978F4080039FAEA00002D +:1000A000F2EBFDA42FF8FB480680E08F0374F2EA20 +:1000B00000002F89FAEB000050A9E08F036CEDB32C +:1000C0000004C141FAF806805800C0801037C60409 +:1000D000FACAF978F4070037C7782FF61039C774D1 +:1000E000FAC9F978F2070037C6F8EDB30006C45133 +:1000F000FAF806805800C1D01037C064FACCF978FD +:10010000F8070037C1D8FAC8F9841AD8FAC8FAD063 +:100110001AD8FAC8FBCC1AD8FAC8F974FAC9FFCCB5 +:100120000A9A0E9B029CF01F00AC2FDD9818C22883 +:100130002FF61039C084FACBF978F6070037EF08AC +:10014000FDA6C18840A959F8E0890012F2CAFFFC57 +:1001500050AA7209FAC2F978E408003A2FF8F54972 +:10016000FDA4FB480680F1D9B010C04892182FC9F1 +:1001700050A95C785018C418FAF806805800C1D00D +:100180001037C064FACCF978F8070037C1D8FAC83C +:10019000F9841AD8FAC8FAD00A9A1AD8FAC8FBCC45 +:1001A0000E9B1AD8029CFAC8F974FAC9FFCCF01F4A +:1001B000008A2FDD780AC2082FF61039C084FACBE6 +:1001C000F978F6070037EEFAFDA4C16840A959F89E +:1001D000E0890010F2CAFFFC50AAFAC2F978720A4C +:1001E000E4080039F34AFDA42FF8FB480680C04814 +:1001F000720A2FC950A9501A300E500E1C90E08F71 +:1002000002CA505750420897408540740C99FAF83A +:1002100006805800C1D01037C064FACCF978F807CE +:100220000037C1D8FAC8F9841AD8FAC8FAD01AD84F +:10023000FAC8FBCC1AD8FAC9FFCCFAC8F9740A9AE2 +:100240000E9B029CF01F00642FDD7809C2182FF668 +:100250001039C084FACBF978F6070037EEF9FDA41F +:10026000C17840A959F8E0890010F2CAFFFC50AAF1 +:10027000FAC2F9787209E408003AF549FDA42FF8AA +:10028000FB480680C058F2C8FFFC50A8720933082A +:10029000300EFB6806844D1C37885019A1B3FB68EB +:1002A0000685500E509CE08F02755057300B50421F +:1002B000FB6B06870897408540740C99FAF8068016 +:1002C0005800C1D01037C064FACAF978F407003773 +:1002D000C1D8FAC8F9841AD8FAC8FAD01AD8FAC814 +:1002E000FBCC0E9B1AD80A9AFAC8F974FAC9FFCC4B +:1002F000029CF01F00392FDD7807C2082FF6103955 +:10030000C084FAC9F978F2070037EEF7FDA4C16896 +:1003100040A959F8E0890010F2CAFFFC50AA720700 +:10032000FAC2F978E4080039F347FDA42FF8FB4836 +:100330000680C04872072FC950A9403E580EC1051B +:100340001C9A300B0E9CF01F0026E08002B6F807C6 +:100350000105403C1835E08902B0E08F02AF0E9CE9 +:100360003000F01F00201895E08F02A9A5A30C997A +:10037000EDB30005C581FAF806805800C2001037B9 +:10038000C064FACBF978F6070037C208FAC8F984D6 +:100390001AD8FAC8FAD00A9A1AD80E9BFAC8FBCC17 +:1003A000029C1AD8FAC8F974FAC9FFCCF01F000AE7 +:1003B0002FDDF8EA0000FAEB0000C3282FF6103911 +:1003C000C124FACAF978F4070037EEE8FDA4FAE987 +:1003D0000000C2688002F2288003EDE4800328A4B4 +:1003E0008002EDD040A959F8E0890015F2CAFFF863 +:1003F00050AAF2EA0000FAEB0000FACAF978F40811 +:100400000039FAEA0000F2EBFDA42FF8FB48068061 +:10041000C078F2EA00002F89FAEB000050A93010F2 +:10042000E08F01B9EDB30004C141FAF8068058002D +:10043000C0801037C604FACAF978F4070037C778C5 +:100440002FF61039C774FAC9F978F2070037C6F8E1 +:10045000EDB30006C451FAF806805800C1D0103739 +:10046000C064FACCF978F8070037C1D8FAC8F98423 +:100470001AD8FAC8FAD01AD8FAC8FBCC1AD8FAC8CF +:10048000F974FAC9FFCC0A9A0E9B029CF01F0086F1 +:100490002FDD9818C2282FF61039C084FACBF978CE +:1004A000F6070037EF08FDA6C18840A959F8E08992 +:1004B0000012F2CAFFFC50AA7209FAC2F978E408E5 +:1004C000003A2FF8F549FDA4FB480680F1D9B01099 +:1004D000C04892182FC950A95C785018C418FAF86F +:1004E00006805800C1D01037C064FACCF978F807FC +:1004F0000037C1D8FAC8F9841AD8FAC8FAD00A9ACB +:100500001AD8FAC8FBCC0E9B1AD8029CFAC8F97408 +:10051000FAC9FFCCF01F00642FDD780AC2082FF65D +:100520001039C084FACBF978F6070037EEFAFDA44B +:10053000C16840A959F8E0890010F2CAFFFC50AA2E +:10054000FAC2F978720AE4080039F34AFDA42FF8D8 +:10055000FB480680C048720A2FC950A9501A300EB5 +:100560003010500EC1794D1C509CEDB30005C541B3 +:10057000FAF806805800C2201037C0A4FACBF978E8 +:10058000F6070037EEE8FDA4FAE90000CF28FAC824 +:10059000F9841AD8FAC8FAD00A9A1AD80E9BFAC85F +:1005A000FBCC029C1AD8FAC8F974FAC9FFCCF01F28 +:1005B000003E2FDDF8EA0000C0C8ECCAFFFF10368D +:1005C000C0B4FAC9F9781496F2070037EEEAFDA430 +:1005D000FAEB0000CCE840A959F8E0890016F2E6F1 +:1005E0000000F2CBFFF8FAE7000050ABFAC6F9784A +:1005F000EC080039FAE60000F2E7FDA42FF81496A3 +:10060000FB480680CB68F2E600002F89FAE700007D +:1006100050A91496CAE8EDB30004C161FAF8068047 +:100620005800C0801037C6A4FACEF978FC0700370E +:10063000C838ECCAFFFF1036E0840082FACCF978A3 +:10064000F8070037C788EDB30006C4D1FAF8068072 +:100650005800C1D01037C064FACCF978F8070037D9 +:10066000C1F8FAC8F9841AD8FAC8FAD01AD8FAC860 +:10067000FBCC1AD8FAC8F974FAC9FFCC0A9A0E9BB7 +:10068000029CF01F00092FDD9818C2A8ECCAFFFFDA +:100690001036C0D4FACBF9781496F6070037EF0875 +:1006A000FDA6C1E88002F2288003EDE440A959F8D4 +:1006B000E0890013F2CBFFFC50AB7209FAC6F9785F +:1006C000EC08003B2FF8F749FDA4FB480680149680 +:1006D000F1D9B010C058921814962FC950A95C785F +:1006E0005018C458FAF806805800C1D01037C064BA +:1006F000FACCF978F8070037C1F8FAC8F9841AD8A3 +:10070000FAC8FAD00E9B1AD8FAC8FBCC0A9A1AD8A3 +:10071000029CFAC8F974FAC9FFCCF01F00C42FDD9F +:10072000780BC248ECCAFFFF1036C094FACBF978B8 +:10073000F60700371496EEFBFDA4C18840A959F8CE +:10074000E0890011F2CBFFFC50ABFAC6F978720BCE +:10075000EC080039F34BFDA42FF81496FB480680F3 +:10076000C058720B14962FC950A9501B300E500E52 +:100770004008401C300B18485F18E7E80008F608EE +:100780001800C0703308FB620685A1B3FB680684BD +:100790003020300AFB6A068740395809C025A7D3A4 +:1007A0004038401758085F194008FAC5F9900E48BC +:1007B00030025F18F3E81008E4081800C5E03018AC +:1007C000F0001800C0603028F0001800C051C3E8E5 +:1007D0000A970690C2C80A97FAE80000F5D8C00345 +:1007E0002D0A0EFAF00B1603F20C1603F7E911DBD3 +:1007F0001899169858085C29CF21FAE90000EDB342 +:100800000000C4613309F20A1800C4200EF9C408BC +:10081000F01F008730A82D0A3009AE8AFAEA0000DE +:10082000F01F008416991498FAE90000EECC00013C +:1008300030A83009FAEA00001897589A5C2BFE9B02 +:10084000FFE91BF800932D08C2080A97FAE8000098 +:10085000F5D8C004409EFC0A070A0EFAF20B1604F3 +:10086000F00A1604F5E911CA1699149858085C297B +:10087000CF01FAE90000C0C85800C091EDB30000F4 +:10088000C061FAC7F9913308AE88C0280A970E15DF +:100890004030C14850425057407410925802E08096 +:1008A00001B6300CFB620648FB6C06873015300041 +:1008B000FAC7F9B8C03840353000069A0699E21AEE +:1008C0000002E2190084508A5079EA000C42FB3899 +:1008D0000687300BF6081800F7B201FF580AF7B286 +:1008E00001FE5809C4514048041850385808E0899E +:1008F000001DC3E8FB4C06784CFE310C890E891CA8 +:10090000FB4B0674587BE08900042F84C0B8FACAF8 +:10091000F990402B029CF01F0049E0810189FAC444 +:10092000F9F8403B210B503BFAF90678FAF80674C7 +:10093000F2CCFFF0F0CBFFFF4BFA403E590EFE9990 +:10094000FFDB1C09890AFB490678891EFB4B0674EC +:10095000587BE08900042F84C0B8FACAF990402B74 +:10096000029CF01F0036E0810163FAC4F9F8FB38FD +:100970000687300CF8081800C1F0FAF80678FAC9B2 +:10098000F9792FF88909FB4806783019FAF80674C6 +:1009900089192FF8FB4806745878E08900042F84E1 +:1009A000C0B8FACAF990402B029CF01F0024E081E5 +:1009B000013FFAC4F9F8408B580BC1F0FAF80678F9 +:1009C000FAC9F97C2FE88909FB4806783029FAF83A +:1009D000067489192FF8FB4806745878E0890004DA +:1009E0002F84C0B8FACAF990402B029CF01F001364 +:1009F000E081011EFAC4F9F8407AE04A0080C5118E +:100A00004049041950395809E0890029C4A848C848 +:100A1000310EFB4C06788908891EFB4B0674587B07 +:100A2000E08900102F84C1788002F228800373408F +:100A30008002D9988003EDF88002F5488003ECE845 +:100A4000FACAF990402B029CF01F0052E08100F09E +:100A5000FAC4F9F8403C210C503CFAF90678FAF84F +:100A60000674F2CCFFF0F0CBFFFF4CBA403E590EBB +:100A7000FE99FFCF1C09890AFB490678891EFB4BAA +:100A80000674587BE08900042F84C0B8FACAF99034 +:100A9000402B029CF01F003FE08100CAFAC4F9F825 +:100AA0000A105800E089001BC3B8FB4C0678310AD5 +:100AB0004B9C891A890CFB4B0674587BE089000417 +:100AC0002F84C0B8FACAF990402B029CF01F003165 +:100AD000E08100AEFAC4F9F82100FAF90678FAF8D4 +:100AE0000674F2CCFFF0F0CBFFFF4ABA5900FE9932 +:100AF000FFDE0009890AFB4906788910FB4B067462 +:100B0000587BE08900042F84C0B8FACAF990402BC2 +:100B1000029CF01F0020E081008BFAC4F9F8FAF87B +:100B2000067889158907F0050005FAF80674FB4573 +:100B300006782FF8FB4806745878E08900042F8463 +:100B4000C0A8FACAF990402B029CF01F0012C6F10F +:100B5000FAC4F9F8E2130004C41040470417580718 +:100B6000E089001CC3B8FB4C067889058913FB4B50 +:100B70000674587BE08900042F84C098009A402BAB +:100B8000029CF01F0004C531FAC4F9F82107C0988F +:100B90008002F5488003ECE84AB53103FAC0F990C9 +:100BA000FAF90678FAF80674F2CCFFF0F0CBFFFF02 +:100BB0004A5A5907FE99FFD90E09890A8917FB4934 +:100BC0000678FB4B0674587BE08A0009FACAF99054 +:100BD000402B029CF01F001DC2A140684049E4095F +:100BE0000C4204085068FAF806785808C080FACA1F +:100BF000F990402B029CF01F0015C1913003FAC4FC +:100C0000F9F8FB430674FE9FF53302934020FAF88F +:100C100006785808C080029CFACAF990009BF01F21 +:100C2000000BC0613008FB480674C0284020806873 +:100C3000EDB80006C0313FF25062406CFE3DF978DD +:100C4000D83200008003EDF88002F548D431FACDA7 +:100C500001E03007503C16961295507A5087505755 +:100C60000E930E905047407E1D8957795809E080B9 +:100C700007A22FFE4D5C507E780C502CF809070817 +:100C8000E2180008C1B06C185808E08900070C9BF6 +:100C9000403CF01F004FCE816C084CCBF0C9FFFFE9 +:100CA000760A1188F4080708EDB80003CDD16C1856 +:100CB0008D0920182FF08D18CE7BE0490025E081AA +:100CC000008906941091109236CA344C358E407BC0 +:100CD0001739507B364BF6091800E08000BBE08BDB +:100CE0000042F8091800E08000B4E08B0021339B3B +:100CF000F6091800E08B01D2330BF6091800E082E8 +:100D00000094325BF6091800C640E08B000B5809CE +:100D1000E080074F324BF6091800E08101BFC8A8F8 +:100D200032ABF6091800E08101B9C6D8FC091800F9 +:100D3000E08000A4E08B000C34CBF6091800C7005B +:100D400034FAF4091800E08101A9C8C835BAF409D9 +:100D50001800E0800098363AF4091800E081019EFE +:100D6000C9E836FBF6091800C7E0E08B0017369B90 +:100D7000F6091800C720E08B0008368BF60918002A +:100D8000E081018CC4F8F4091800C3F036EAF409D4 +:100D90001800E0810183C8D8373AF4091800C1303F +:100DA000E08B0008370AF4091800E0810177C7A832 +:100DB000375AF4091800C5C0378AF4091800E081D1 +:100DC000016DC5B83029C7590000049C800328BCB8 +:100DD0006C185808E08900080C9B403CF01F006428 +:100DE000E08106E0407A6C08F539FFFF118AF20ACB +:100DF0001800E08106E02FF82FF08D086C182018FD +:100E00008D18C32BA5A1C64B407B1789F409180088 +:100E1000C0512FFBA1B1507BC5BBA1A1C59BA1B106 +:100E2000C57BA3A1C55BE4020022A17223021202CA +:100E3000C4FBE0420020E08B0007E4C4000130184E +:100E40003002C46B3168403A9538E08F06ABA1A1FF +:100E50004C8930AE5089C2B84C6C300B508C505B12 +:100E6000C279A1A14C4A3089508A5059C2194C2EDE +:100E700030AC508E505CC1C94BFBA9B1508B310ACC +:100E8000C169301950085019407BFACCFFD4F01FCB +:100E9000003BA7A1507C40194008C0B9A7A1300968 +:100EA000C0894B59E81102205089310E505EC009AB +:100EB000EDB10004FE90FED9EDB10002C441580826 +:100EC000C2500E34C064FACCFE20F8040024C2786C +:100ED000FACAFED40A99F407002A0E98130B14AB31 +:100EE0002FF81034CFC4EEC9FFFFEE0811FFF0C792 +:100EF000FFFF2FE808080807EA080025F2070007A7 +:100F0000FAC8FED4F0040324C1C8E6C8FFFF0E33BC +:100F1000C094FACBFE201093F6040024E8F4FF4CB2 +:100F2000C1086A042FC559F7E089000B1093FACA6B +:100F3000FE20F40700282FF7F144FF4CC02810933F +:100F4000A800C92AEDB10000C1A15808E0800088BE +:100F50000E34C635FACAFED40A99F407002A0E9850 +:100F6000130B14AB2FF81034CFC4C678800328BC01 +:100F70008002EFB480032E6C800329ECE2110002A2 +:100F8000C4805808C2500E34C064FACCFE20F80465 +:100F90000024C278FACAFED40A99F407002A0E98EF +:100FA000130B14AB2FF81034CFC4EEC9FFFFEE08BB +:100FB00011FFF0C7FFFF2FE808080807EA0800251F +:100FC000F2070007FAC8FED4F0040324C1C8E6C83B +:100FD000FFFF0E33C094FACBFE201093F6040024DA +:100FE000E8F4FF4CC1086A042FC559F7E089000BEB +:100FF0001093FACAFE20F40700282FF7F144FF4CA3 +:10100000C0281093E008141F89108908FE9FFE2D48 +:101010005808C2500E34C064FAC9FE20F2040024FD +:10102000C278FACAFED40A99F407002A0E98130B64 +:1010300014AB2FF81034CFC4EEC9FFFFEE0811FF38 +:10104000F0C7FFFF2FE808080807EA080025F207A5 +:101050000007FAC8FED4F0040324C1C8E6C8FFFFA5 +:101060000E33C094FAC2FE201093E4040024E8F486 +:10107000FF4CC1086A042FC559F7E089000B109393 +:10108000FACEFE20FC0700282FF7F144FF4CC028C1 +:1010900010938900FE9FFDE9402CF8090709EDB97E +:1010A0000000C021A1A14C7B30AA508B505A30398E +:1010B0006C1A580AE089000C501950080C9B403CEF +:1010C000F01F004140194008E081056CEDB10006B9 +:1010D000C151C1F86C1A201A8D1A580AE08A00040E +:1010E0008D0CC0B8501950080C9B403CF01F0036C6 +:1010F00040194008E08105562FF06C0A4B3EF4CCB5 +:10110000FFFF7C0B158AF60A070AEDBA0003CE3002 +:101110005829E08001C05839E080031D5819E0804B +:10112000011B029CE21C0010502C5802F9B2000175 +:10113000E3D1C001E080009B580CC0303001C4985E +:101140005808C2500E34C064FACBFE20F6040024C6 +:10115000C278FACAFED40A99F407002A0E98130B33 +:1011600014AB2FF81034CFC4EEC9FFFFEE0811FF07 +:10117000F0C7FFFF2FE808080807EA080025F20774 +:101180000007FAC8FED4F0040324C228E6C8FFFF13 +:101190000E33C094FACAFE201093F4040024E8F43D +:1011A000FF4CC1686A042FC559F7E08900111093FC +:1011B000FAC9FE20F20700282FF7F144FF4CC0883F +:1011C0008002EFB4800328BC0000049C10930891B7 +:1011D00030044D5E7C081034E08004E46C08118912 +:1011E000FAC8FE200808F169FFCC6C1820188D1889 +:1011F0006C082FF8308A8D08300BFACCFE2CF01FCB +:10120000004B2FF4FAC8FE2C0899FACAFE54029B30 +:10121000403CF01F00475BFCE08004C4580CC061F8 +:10122000402C580CC051830CC0385BECC0B0080097 +:10123000402B2012580BF9B40100F7B100FCFBF46D +:1012400000026C185808E089000B0C9B403CF01F12 +:101250000039C0505804C050E08F04A45802CBA1FC +:10126000402A580AFE91FD01C718402E580EC1A011 +:101270006C186C090438C0F4100910128D091001A3 +:101280000C9B403CF01F002BCF405801E08101E651 +:10129000E08F0488040904188D098D180401E08F7B +:1012A00001DD5808C2500E34C064FACCFE20F804A8 +:1012B0000024C278FACAFED40A99F407002A0E98CC +:1012C000130B14AB2FF81034CFC4EEC9FFFFEE0898 +:1012D00011FFF0C7FFFF2FE808080807EA080025FC +:1012E000F2070007FAC8FED4F0040324C258E6C887 +:1012F000FFFF0E33C094FACBFE201093F6040024B7 +:10130000E8F4FF4CC1986A042FC559F7E08900142E +:101310001093FACAFE20F40700282FF7F144FF4C7F +:10132000C0B80000000009AC8002E8BC800328407F +:10133000800328BC1093049A089C0C99301BF01F62 +:1013400000C9E080042FF800000040492FF95049FF +:10135000FE9FFC8B5802F9B200FFEDB10004C261A0 +:1013600030040891C1286C188D0920188D182FF4AD +:101370000832E080008D5808E08900080C9B403C52 +:10138000F01F00B9E08100846C08FACEFE20F0C99D +:10139000FFFF1188FC080008F138FE4CE208180035 +:1013A000CE315804C741E08F04065808C2500E34AD +:1013B000C064FACCFE20F8040024C278FACAFED435 +:1013C0000A99F407002A0E98130B14AB2FF8103467 +:1013D000CFC4EEC9FFFFEE0811FFF0C7FFFF2FE8F3 +:1013E00008080807EA080025F2070007FAC8FED433 +:1013F000F0040324C1C8E6C8FFFF0E33C094FACB43 +:10140000FE201093F6040024E8F4FF4CC1086A049F +:101410002FC559F7E089000B1093FACAFE20F40794 +:1014200000282FF7F144FF4CC02810930891300892 +:10143000C1886C1A201A8D1A133A02CA8D095802F3 +:10144000C1D06C195809E089000D50080C9B403C34 +:10145000F01F00854008C0500831C101E08F03A291 +:101460006C0AFACEFE2014992012158AFC0A000A92 +:10147000F53AFE4CF00A1800CDD1E2040104E080F8 +:10148000039A404C2FFC504C3008A2880800FE9F65 +:10149000FBEC029BE21B0010502B5802F9B200FF3C +:1014A000E3D1C001E08000BC580BC050FACAFE2452 +:1014B000506AC4385808C2500E34C064FAC9FE20BD +:1014C000F2040024C278FACAFED40A99F407002A6A +:1014D0000E98130B14AB2FF81034CFC4EEC9FFFFD6 +:1014E000EE0811FFF0C7FFFF2FE808080807EA0819 +:1014F0000025F2070007FAC8FED4F0040324C1C88F +:10150000E6C8FFFF0E33C094FACEFE201093FC0411 +:101510000024E8F4FF4CC1086A042FC559F7E0899C +:10152000000B1093FACCFE20F80700282FF7F144A7 +:10153000FF4CC0281093506430014CC4C598680813 +:101540001031E080032FFAC8FE200208F169FFCCB9 +:101550006C1820188D186C082FF8308A8D08300B05 +:10156000FACCFE2CF01F00422FF1FAC8FE2C029993 +:10157000FACAFE54406B403CF01F003E5BFCE0802A +:101580000311580CC041406B970CC0385BECC23063 +:10159000406A740CF01F0038C100FAC4FE20020437 +:1015A0002354C088098B201120140C9A403CF01F52 +:1015B00000335801CF81C2C80200402920125809C7 +:1015C000F8011710FBF80006F7B800FCFBF80A0654 +:1015D000FBF100026C185808E089000B0C9B403CA2 +:1015E000F01F0021C0505801E08102DCC1186C08D6 +:1015F00058025F1A11894A2E300C7C08F00907083E +:10160000EC180008F5E80238F8081800C991402BDA +:10161000580BFE91FB2A406A950BC98A402E580E42 +:10162000C300C1086C188D0A20188D182FF10232E2 +:10163000C1405808E08900070C9B403CF01F000A9D +:10164000C0C16C0848ECF0CAFFFF78091188F208A5 +:101650000708EDB80003CE710200FE9FFB060000F4 +:10166000800320B8800328BC000009AC8002E8BCDD +:10167000800328408003274880032FF40000049C47 +:101680005808C2500E34C064FACBFE20F604002481 +:10169000C278FACAFED40A99F407002A0E98130BEE +:1016A00014AB2FF81034CFC4EEC9FFFFEE0811FFC2 +:1016B000F0C7FFFF2FE808080807EA080025F2072F +:1016C0000007FAC8FED4F0040324C1C8E6C8FFFF2F +:1016D0000E33C094FACAFE201093F4040024E8F4F8 +:1016E000FF4CC1086A042FC559F7E089000B10931D +:1016F000FAC9FE20F20700282FF7F144FF4CC0285A +:1017000010930891C1286C1920198D19113902C93B +:101710008D085802C1506C185808E08900070C9BCE +:10172000403CF01F0059C0C16C094D8E12987C0AD4 +:1017300013892012F4090709EDB90003CE51404C7A +:101740002FFC504C08103008E2000000A288FE9FD9 +:10175000FA8CE4C90001E0490026E08B0005300B5B +:10176000506BC058E4CA00273272506A3009FACE72 +:10177000FE54509950A7E8110D80502E35894057DE +:101780006C0A339C158AF80A1800E08B0015338B1D +:10179000F60A1800C4E2330BF60A1800C270E08B98 +:1017A000004532BBF60A1800C51032DBF60A1800F5 +:1017B000C7C1C4C8F20A1800C4E0E08B000AF4CB29 +:1017C0000041305EFC0B1800E08B0070C398361CA3 +:1017D000F80A1800C6A3366BF60A1800E088003134 +:1017E000378EFC0A1800C611C368029BEDB1000BCE +:1017F000C3C15807E06B0200E3DBE031F9B7000832 +:10180000EDB1000AC041E011FA7FC2F8409B406C84 +:101810002FFB580CF7BC0101FBFC1A06F7B201FFC5 +:10182000E011FC7F509BC248499EFC070417C0B8DA +:10183000497CF80704175887E0890006C36858A751 +:10184000E08A0034E011F47FC108EDB10007C2D195 +:10185000A7D1C0B8029BE21B0600E04B0200C251B8 +:10186000A9D13107E8110500402B16CA502B6C1A7C +:10187000201A8D1A580AE08A000D6C0A2FFA8D0A78 +:10188000C1180000800328BC0000049C8003EF08FE +:10189000501950080C9B403CF01F00BD40194008F7 +:1018A000C0412012FE91FF6E505740A7EDB10008D5 +:1018B000C161FAC9FE54402A123AE088000B40295F +:1018C0000C9A137B403C50085029F01F00B240088E +:1018D000FAC9FE5440221232E080016D029AE21AE7 +:1018E0000010E081014B402EBC8A50084059FACBD1 +:1018F000FE54403C40825D1202994008E2190020EB +:10190000C2A05808C1400E34C064FACEFE20FC04C8 +:101910000024C1D9FACAFED40A99F407002A0E9805 +:10192000130B14AB2FF81034CFC4CF68E6C8FFFFF9 +:101930000E33C064FACBFE20F6040024C0796A049A +:101940002FC559F7E08901151093FACAFE20F40754 +:101950000028C0A9EDB10002C4415808C2500E349D +:10196000C064FAC9FE20F2040024C278FACAFED488 +:101970000A99F407002A0E98130B14AB2FF81034B1 +:10198000CFC4EEC9FFFFEE0811FFF0C7FFFF2FE83D +:1019900008080807EA080025F2070007FAC8FED47D +:1019A000F0040324C1C8E6C8FFFF0E33C094FAC296 +:1019B000FE201093E4040024E8F4FF4CC1086A04FC +:1019C0002FC559F7E089000B1093FACEFE20FC07D3 +:1019D00000282FF7F144FF4CC0281093A80CCCA886 +:1019E000F5D1C001C2A05808C1400E34C064FACB82 +:1019F000FE20F6040024CAB8FACAFED40A99F407F5 +:101A0000002A0E98130B14AB2FF81034CFC4C8481B +:101A1000E6C8FFFF0E33C064FACAFE20F4040024B7 +:101A2000C9586A042FC559F7E08900A31093FAC971 +:101A3000FE20F2070028C988E2110002C5904D6916 +:101A400040821232C091FACBFE544059403C5008BB +:101A5000F01F0052C088FACBFE544059403C500859 +:101A6000F01F004F40085808C2500E34C064FACE30 +:101A7000FE20FC040024C278FACCFED40A99F807B0 +:101A8000002C0E98130E18AE2FF81034CFC4EEC9E8 +:101A9000FFFFEE0811FFF0C7FFFF2FE80808080757 +:101AA000EA080025F2070007FAC8FED4F004032470 +:101AB000C1C8E6C8FFFF0E33C094FACCFE201093D5 +:101AC000F8040024E8F4FF4CC1086A042FC559F754 +:101AD000E089000B1093FAC9FE20F20700282FF7C7 +:101AE000F144FF4CC0281093891A890BC438580858 +:101AF000C2500E34C064FAC8FE20F0040024C2783C +:101B0000FACAFED40A99F407002A0E98130B14ABF4 +:101B10002FF81034CFC4EEC9FFFFEE0811FFF0C755 +:101B2000FFFF2FE808080807EA080025F20700076A +:101B3000FAC8FED4F0040324C1C8E6C8FFFF0E3380 +:101B4000C094FAC2FE20E40400241093E8F4FF4C91 +:101B5000C1086A042FC559F7E089000B1093FACE2B +:101B6000FE20FC070028F144FF4C2FF7C0281093FB +:101B7000890C404C2FFC504CFAC8FE54409B10106E +:101B8000402A1600F4000000FE9FF86F800328BC76 +:101B900080032FF480032E6C80032CE480032B340D +:101BA00040495809C0508C68EDB80006C0313FF874 +:101BB0005048404C288DD832D421217D1497189656 +:101BC000129A5807C064E068008B99383FFCC2281D +:101BD0005807EE0C1700F9B901FFEFD9E10C109985 +:101BE000E0680208BA683FF8504B505C500B502C2C +:101BF000BA781A9B0C9CF01F00095BFCC044E0689B +:101C0000008B8D385807F9B90100FBF81000F1F985 +:101C10001E002E9DD82200008002F568D401129883 +:101C20001499169A189B483C780CF01F0003D802B0 +:101C30000000059880031BB8D4214B3818961697DE +:101C4000700C580CC06078685808C031F01F002F25 +:101C50004AF81037C0514AC870087007C0E84AD81F +:101C60001037C0514A8870087017C0784AA81037DA +:101C7000C0414A58700870278E68EDB80003C1E073 +:101C8000EDB80004C3E1EDB80002C1516EDB580BA2 +:101C9000C0A0EEC8FFBC103BC0400C9CF01F001F52 +:101CA00030088FD88E68E018FFDBAE6830088F18D8 +:101CB0006E488F088E68A3B8AE686E485808C0B1E9 +:101CC0008E68E2180280E0480200C0500C9C0E9B17 +:101CD000F01F00138E69F1D9C001C07030088F2841 +:101CE0006E585C388F68C068EDB90001EFF81005D8 +:101CF0008F286E485808C0618E68EDB80007C02173 +:101D0000DC2AD82A0000059880031F388003EF2CB6 +:101D10008003EF4C8003EF6C8003217C8003276CF1 +:101D20004828700C2F4C5EFC00000598D4211697B3 +:101D3000189676485808C7D0580CC060786858087C +:101D4000C031F01F003D4BD81037C0316C07C0A820 +:101D50004BB81037C0316C17C0584BA81037EDF78F +:101D600000028E6A1498EDBA0003C420ABBAAE6AC2 +:101D70006E185808E08900066F085808E08A005A73 +:101D80006EB85808C560E21A1000C0306F55C0F830 +:101D900030196E8B0C9C5D1818955BFCC0816C38FB +:101DA00059D8C4708E68A7A8AE68D8228E68EDB8DE +:101DB0000002C0916E1810156ED85808EFF8101078 +:101DC000EBD8E1156EB80C9C30090A9A6E8B5D1841 +:101DD0008E680A3CC261ABD8300C6E49AE688F1C6D +:101DE0008F09EDB8000CC251EF450054D8226E4562 +:101DF0005805C1F06E04F5DAC0028F05F9B801008C +:101E0000EFF800050A148F28C11808990A9A6EA8DD +:101E10006E8B0C9C5D181814580CE08900078E68B6 +:101E2000A7A83FFCAE68D82218055804FE99FFEF1A +:101E3000D82A000080031F388003EF2C8003EF4C6A +:101E40008003EF6CD401189B580CC0714868487B24 +:101E5000700CF01F0007D8024868700CF01F0003D8 +:101E6000D80200008003ECA880031D2C800325E825 +:101E7000000005985EFC5EFCD401483BF01F0003A7 +:101E8000D80200008003629080032640D42116957A +:101E9000F606105CECCBFFF4F01F00071897C0901B +:101EA0009915300B2F4C0C9A8F2C8F0BF01F0003C1 +:101EB0000E9CD8228002E2BC8002E8BCD42149C832 +:101EC000189670076E685808C0410E9CF01F0019E4 +:101ED000EEC7FF2830056E2C6E18C0689869EA09B5 +:101EE0001900C1202A4C2018CFA76E085808C071CD +:101EF000304B0C9CF01F00108F0CC0306E07CECB07 +:101F000030C88D38D8223008F948004C99089928F3 +:101F1000991899489958996899D899E8F9480048C2 +:101F20003FF8B8783018B868D82200008003ECA8D1 +:101F300080031F3880031E8CD421189678675807B9 +:101F4000C4714A48301599A8F94700D8F94700DC10 +:101F5000F94700E09965F01F00208D0C0C9CF01FE4 +:101F6000001E8D1C0C9CF01F001C6C093048930750 +:101F7000B268931793276C18B27793479357936778 +:101F80009389910791179127494E495B939E93AB93 +:101F9000494A495493BA93C43099B069B07591C411 +:101FA0009147915791679188919E91AB91BA8D2CF1 +:101FB00031289907B868991799273028B87899C4B3 +:101FC0009967999E99AB99BA99479957998CD82254 +:101FD00080031E7880031EBC80032B1080032AD848 +:101FE00080032AAC80032A9CD4014858169AFAC967 +:101FF000FFFC189B700CF01F0003D802000005982E +:1020000080033424D43114901291169310971895AC +:10201000F20A02425802C0310491C418580CC06040 +:1020200078685808C031F01F001F49F81037C031D8 +:102030006A07C0A849D81037C0316A17C05849C8C4 +:102040001037EBF700026E185808C03430088F18AC +:102050000496C148F01F00176E08080308160E9B6F +:10206000F00400040A9C8F04F01F0013C070E40603 +:102070000109F2000D081091C1286E146E08069C2B +:10208000089A109B0836FE9BFFE70C9AF01F000988 +:102090006E080C088F086E180C188F18029CD83226 +:1020A00080031F388003EF2C8003EF4C8003EF6C1C +:1020B0008002E736800328BCD40112981499169A3E +:1020C000189B483C780CF01F0003D80200000598CC +:1020D00080032004D42116951897F01F00234A345A +:1020E00068287016E016FFFCECC8FF91F0050105AA +:1020F000E015FF80EAC50080E045007FE08A00230C +:10210000300B0E9CF01F001A68280C08103CC1A16F +:10211000EA0B11000E9CF01F00165BFCC171300B26 +:102120000E9CF01F00136828F808010958F9E08A8E +:10213000000AA1A9911948F8700948F8F80901099D +:1021400091090E9CF01F000DD82A68280A16A1A636 +:102150009116489870090A190E9C9109F01F000702 +:10216000DA2A00008002E8CA0000059C8002EBC861 +:10217000000009A800007AD08002E8CCD42116968D +:102180001897580BE08000CAF01F004E20864CEADA +:102190006C18742EF9D8C001A1C8EC080009721B94 +:1021A000E01BFFFC1C39C1D1F6080008580CC081A7 +:1021B0006C09121612086C3B6C299729933B1099F5 +:1021C0009526A1A98D194C1972091238C0634C08C3 +:1021D0000E9C700BF01F003F0E9CF01F003FD8229A +:1021E000931B580CC030300CC1086C0EF4C5FFF8BE +:1021F0001C161C086C2E0A3EF9BC0001EDF51003FC +:10220000EBFE1A02FDF51A03F20B000E7C1EEDBE6A +:102210000000C1301608580CC0C14ABE722B2F8E68 +:102220001C3BC071973697268D2B8D3B301CC058B8 +:10223000722B7239932B97391099EC080908A1A9D0 +:102240008D19580CC671E04801FFE08B0013A3986C +:10225000F4080039722B8D398D2B97369326A348BD +:102260007419301BF6080948F3E810089518C528BA +:10227000F00916095849E08B0006F00B16062C8B66 +:10228000C2D85949E08B0005F2CBFFA5C278E049DE +:102290000054E08B0006F00B160C292BC1F8E04926 +:1022A0000154E08B0006F00B160F289BC178F00B51 +:1022B0001612E0490554E088001137EBC0F8000021 +:1022C0008002E8CA0000059C000009A400007ACC46 +:1022D000800320D48002E8CC284BF40B003C782902 +:1022E0001839C0E17418A34B301CF80B094BF1EB03 +:1022F000100B1298951BC0A872291839C060721A69 +:10230000E01AFFFC1438CF9372388D388D2993363C +:1023100091260E9CF01F0002D82200008002E8CC1B +:10232000D431203D14941895169774285808E080ED +:10233000014A9668EDB80003C04176485808C0C10C +:102340000E9B0A9CF01F00A1C0708E68A7A8AE6803 +:1023500030988B38C3598E6368000696E2160002E7 +:10236000C2103003E06204000696C04860036016A5 +:102370002F805806CFC0E0460400EC091780E4091E +:1023800017B0069A6EA86E8B0A9C5D181816580C2A +:10239000E08A0114682818188928E08001141803BD +:1023A000CE9BE7D3C001C07050060C930C91501522 +:1023B0000892CA0806960891C048600360162F80EC +:1023C0005806CFC08E686E241099E2190200C570BD +:1023D0000836C4531099E2190480C4106E4B6E097C +:1023E000161950096E59109CF209001A3028F40889 +:1023F0000C08FAE9000410944009E21C04002FF9CB +:102400000C091238F2041730580CC110089B0A9CB2 +:10241000F01F006F1892C150400A6E4BF01F006D04 +:102420008E68E018FB7FA7B8AE68C0E8089A0A9CDF +:10243000F01F00691892C0816E4B0A9CF01F006764 +:1024400030C88B38CBA8400A4009E80A010AE409E1 +:1024500000088F548F2A8F088F420C940836EC04A2 +:102460001730069B089A6E0CF01F005D6E08080876 +:102470008F086E2808180C948F28C30808365FBA96 +:102480006E0C6E48103C5FB8F5E80008F2081800C2 +:10249000C0E0069B089AF01F00526E0808080E9BC9 +:1024A0008F080A9CF01F004FC190C8786E591236F1 +:1024B000C0A36EA8069A6E8B0A9C5D181894E089DA +:1024C000000EC7B80C9A069BF01F00456E080C085A +:1024D0000C948F086E280C188F28622808188328FF +:1024E000C71008160803C6DB6003601130082F8090 +:1024F00050085801CFA0400A580AC181029A30AB57 +:10250000069CF01F0039F9B80101F9D8E106EDD3B6 +:10251000E116F9B90101FBF91A00F9B80001E3D895 +:10252000E006F9B80001FBF80A000236EC04178057 +:10253000E20417B06E596E25F20500050A345F9A61 +:102540006E0C6E48103C5FB8F5E80008300AF408DD +:102550001800C0E0069B0A9AF01F00216E080A08C6 +:102560000E9B8F08401CF01F001FC180C2681234F0 +:10257000C0A56EA8069A6E8B401C5D181895E08960 +:10258000000EC1B8089A069BF01F00156E080808D7 +:1025900008958F086E2808188F280A16C0710E9BA0 +:1025A000401CF01F0010C091500664280A188528AE +:1025B000C0900A110A03C9EB8E68A7A8AE683FFC59 +:1025C000C028300C2FDDD83280031C388002E2BCDA +:1025D0008002E7368002E8E88003217C8002E87E02 +:1025E00080031D2C800328A4D43130051893169045 +:1025F0000A91F01F00123FF2E6C7FF28C1786E264D +:102600006E142F46C0D88C08E2081900C0808C18C0 +:10261000E4081900C040069C5D1018452A462014A5 +:10262000ECCB000C5804CF046E075807CE91F01F76 +:1026300000040A9CD832000080031E7480031E76BA +:10264000D43130051691F8C7FF280A92F01F001008 +:102650003FF3C1686E266E142F46C0C88C08E4088C +:102660001900C0708C18E6081900C0305D111845BB +:102670002A462014ECCC000C5804CF146E075807DF +:10268000CEA1F01F00040A9CD832000080031E7403 +:1026900080031E76D401201D4848189B1A9A700C9E +:1026A000F01F00032FFDD80200000598800326B01C +:1026B000D431169414921895F01F00204A08700720 +:1026C0005807C050300633DA0C98C0780A9CF01FC7 +:1026D000001D0E9CD8322FF6E8060709F0091800F5 +:1026E0005F1BF40918005F191669F0091800CF4143 +:1026F000C1A8029C0C9A089BF01F0013C1216E0117 +:102700000C010388E6081800C0C148D870080A9C6C +:102710001017A3478507F01F000BE2CCFFFFD8324C +:102720002FC7C02833D36E015801CE410A9CF01F39 +:102730000005029CD8320000800361BC000009B093 +:10274000800361BE8002EDE6E04C00FFE0880003FC +:102750005EFD48487008F00C070CE21C00085EFCA7 +:102760000000049C481C5EFC8003EF8CD42120FDFB +:10277000966816971896E2180002C3C1967BF00B74 +:102780001900C0551A9AF01F002AC0F48E650A98E5 +:10279000ABB8E2150080AE683004E0680400F9B51B +:1027A0000140F0051700C1B84018E218F000E048F9 +:1027B00020005F04E0488000C0D16EB949D81039CC +:1027C000C0918E68E0650400ABA8EF450050AE688C +:1027D000C0688E68E0650400ABB8AE680A9B0C9CCC +:1027E000F01F00158E68C0D1EDB80009C1E0A1B896 +:1027F000AE68EEC8FFB98F488F0830188F58C1589F +:10280000A7B88F4CAE688F5548C88F0C8DA8580458 +:10281000C0C08E7CF01F000AEFF81206F9B9010162 +:10282000F1D9E138EFF81C062F1DD822800362A8E9 +:1028300080032AAC8002E2BC80031E788002F1682B +:10284000D42118971096580AC041149B3019486A31 +:10285000F01F00065BFCC06130088D08E068008A4C +:102860008F38D82280037E208003286C201D5809D1 +:102870005F09580BFA0B1700580A5F18F3E80008B5 +:102880003009F2081800C0303FECC0B8580AC03117 +:10289000149CC078158997091589F00918005F1CE8 +:1028A0002FFD5EFCF7DBC008C068201A19881638B7 +:1028B0005E0C2FFC580ACFA15EFAD703D4211697DD +:1028C0001896580CC06078685808C031F01F00385E +:1028D0004B881037C0316C07C0A84B781037C03117 +:1028E0006C17C0584B581037EDF7000230088F189E +:1028F0008E68EDB80005C590EDB80002C1A0EDB836 +:102900000004C060A7A8AE6830988D38C4D8EDB870 +:102910000003C0B10E9B0C9CF01F0029C4618E689F +:102920008F6CA3D88F2CAE688E68A3A8AE68C14800 +:102930006EDB580BC110EEC8FFBC103BC0400C9CB6 +:10294000F01F0020300C6F088FDC8F185808C04033 +:102950006EF88F08D8226E485808C0510E9B0C9C08 +:10296000F01F00198E68F1D8C002C0604978498B09 +:10297000700CF01F00186E4A6E980C9C8F0A6E59EE +:102980006E8B5D188E688F1CADD8AE68580CE08ACF +:102990000003D82A580CC041A5B8AE68C058A7A8F3 +:1029A000AE6830088F18DC2ADC2A000080031F384C +:1029B0008003EF2C8003EF4C8003EF6C80031D2C11 +:1029C0008003217C8003276C8003ECA8800329D43A +:1029D00080032640D4019868E21800095898C02066 +:1029E000D80AF01F0002D80280031E44D431189E7A +:1029F0001738E048005EC030300AC0381738301A47 +:102A00003009FC090B0A2FF9E0490100CFB1580841 +:102A1000C041F6CC0001D832149632D4EC16000135 +:102A2000300735D5C0381498129BFC080B06F6C940 +:102A3000FFFF178A129CE80A1800C090EA0A1800E3 +:102A4000C1E0EE0A1800CF01169CD832138C103C5E +:102A50005F53E04C005D5F0AE7EA100AEE0A1800D7 +:102A6000C03032D8CE2BF0CAFFFFFC0A000A14C6D1 +:102A70002FF81838CFD52FEB2FE9CDCBD8321498BB +:102A8000F5DBC01FF00C1100104CFC187FF0F5ECCA +:102A900013FCF00C010CBF9C5EFCD703D401967BA9 +:102AA000F01F0002D8020000800353E0D4211697E3 +:102AB000967BF01F00098E681099ADC95BFCEFF999 +:102AC0000C06EFFC1A15E0691000F1D9E138EFF8B7 +:102AD0001C06D822800362D4D421966816971495D8 +:102AE0001294E21801001896C0603029300A967BD3 +:102AF000F01F00068E68ADC808990A9A8E7B0C9C60 +:102B0000AE68F01F0003D822800362D4800353B460 +:102B1000D4211697967BF01F0007C0656F581808E0 +:102B2000EF480054D8228E68ADC8AE68D8220000A5 +:102B30008003694CD431208D4DB8500B7008507C07 +:102B4000502A1295501816970F36401AF4060704AB +:102B5000E2140008CFA1E046002DC0410F3630142A +:102B6000C058E046002BC0210F3658055F085905B4 +:102B70005F0A3009F1EA100AF20A1800C1D0E046F3 +:102B80000030C1210F8A358B378CF60A18005F0B95 +:102B9000F80A18005F0A144BF20B1800C0500F9689 +:102BA00031052FE7C0985808C070E0460030F9B5ED +:102BB0000008F9B5010A5804C0713FF0E061FFFF59 +:102BC000EA117FFFC0483000FC118000EA03141FA7 +:102BD0000A980699009A029BF01F00340699505AF1 +:102BE0000A98009A029BF01F0032069C14981699CE +:102BF000300A30003001149E109212934019F206F0 +:102C0000070BF3DBC001F9B90137F9B90057506977 +:102C1000ECC80030EDBB0002C0804069F7DBC002A9 +:102C2000EC090108580BC2D00A38C2B40430E601DE +:102C300013005FB9F3EA13FAFC0A1800C1F104307B +:102C4000E60113005F09405A14385F9AF5E900095C +:102C5000FC091800C131E005064AEA010249504862 +:102C6000F8000349BF58F20B000B5038FAE0000C93 +:102C70001400E20B0041301AC0283FFA0F36CBFB9C +:102C80005BFAC1715804C0713FF0E061FFFFEA11C7 +:102C90007FFFC0483000FC11800032284079933813 +:102CA000C10800000000049C800373408002D99892 +:102CB0005804C07030083009F0000100F2010141F1 +:102CC00040285808C0B0580AF9B801FFEFD8E10A07 +:102CD000FBFA1A00402940089308009A029B2F8DA6 +:102CE000D8320000D431209D4DE816927008508CE7 +:102CF000505A1295504816970F36404EFC0607035F +:102D0000E2130008CFA1E046002DC0410F3630137A +:102D1000C058E046002BC0210F3658055F08590502 +:102D20005F0A3009F1EA100AF20A1800C1D0E04641 +:102D30000030C1210F8A358B378CF60A18005F0BE3 +:102D4000F80A18005F0A144BF20B1800C0500F96D7 +:102D500031052FE7C0985808C070E0460030F9B53B +:102D60000008F9B5010AEA04141F0A9808993FFA05 +:102D70003FFBF01F003D0899502B503A0A983FFA4C +:102D80003FFBF01F003A300B300830094041E206AB +:102D9000070EE1DEC001ECCC00305800F9B101377C +:102DA000F9B100571C90E2100004C061EC01010C65 +:102DB000FDDEC002C3700A3CC354FAE000080038CC +:102DC000E20913005FBE3000FDEB13FBE00B1800BF +:102DD000C261FAE00008143C5F9E0038E20913006B +:102DE0005F0B3000FDEB000BE00B1800C181F0051C +:102DF0000640EA09024BFAE10000E808034BF6013D +:102E00000001507C5001BF5CFAE00000506C301BA8 +:102E1000FAE800180008F2010049C0283FFB0F360D +:102E2000CB6B5BFBC071322840803FF981383FF8A3 +:102E3000C0985803C07030043005E8080108EA095A +:102E40000149405E580EC080580BF9BA01FFEFDA15 +:102E5000E102405A9502109A129B2F7DD832000051 +:102E60000000049C8002D99880037340D431203D37 +:102E70004C48502C70011698113EE20E0705E215E1 +:102E80000008CFB1E04E002DC041113E3015C058B2 +:102E9000E04E002BC021113E58095F0C59095F0616 +:102EA0003007F9E61006EE061800C1E0E04E0030EB +:102EB000C131118635843783E80618005F04E606C1 +:102EC00018005F06E9E61006EE061800C050119ED5 +:102ED00031092FE8C098580CC070E04E0030F9B9A5 +:102EE0000008F9B9010A3FF3E6090D023007500363 +:102EF0000E9C0E93E20E0704E1D4C001F9B0013735 +:102F0000F9B000575010FCC600300890E2100004E1 +:102F1000C0814010E9D4C002FC0001065804C1C0C1 +:102F20001236C1A4043C5FBEFDE713FEE60E180096 +:102F3000C101043C5F0E40070E365F97EFEE000EB6 +:102F4000E60E1800C061B33C3017EC0C000CC02832 +:102F50003FF7113ECD0B5BF7C061322940200E9C3C +:102F60008139C0485805FBBC0100580AC070580799 +:102F7000F9B901FFF1D9E10B950B2FDDD832000033 +:102F80000000049CD421169776DBEEC8FFBC103BF2 +:102F9000C171E06B0400F01F0015C250E06804002E +:102FA0008FDC8FE8EF380046F8CCFC03B8A8EF3888 +:102FB0000045B898EF380044B8888F0CC1386EE5EA +:102FC000EA041501089AF01F000A1896C0C00A9A70 +:102FD000189BF80500050A9CF01F00068FE48F057A +:102FE0008FD6D82ADC2A00008002E2BC8002E8E802 +:102FF0008002E736D4211697149618955BFBC650CD +:10300000580CC06078685808C031F01F00314B1868 +:103010001036C0316A06C0A84AF81036C0316A16A8 +:10302000C0584AE81036EBF600028C68A5D8AC68A8 +:10303000EDB80002C140EDB80004C461EDB8000372 +:10304000C0B10C9B0A9CF01F0026C3E18C688D6CFC +:10305000A3D88D2CAC688C68A3A8AC680E946CD8EF +:103060005C545808C1006C196CE81039C0650A9CA2 +:103070000C9BF01F001CC2816C0820188D08B084C6 +:103080000897C0C86C495809C0C06C081238E0885D +:10309000000911770837C0518D086C182FF8C12826 +:1030A0006C18ED4800406C088DF8ECC8FFBC8DD85A +:1030B00030388DE8ECC8FFBAED6400468D080897FB +:1030C00030188D18C0283FF70E9CD82280031F3877 +:1030D0008003EF2C8003EF4C8003EF6C80031D2CEA +:1030E00080032F84D431208DFAC4FFBC504B682E4E +:1030F000505812967C0B7005506E580BF40B17004D +:103100006803681140493008C2C92FFB325C178A36 +:10311000F80A18005F1EF00A18005F1CFDEC000C96 +:10312000F00C1800CF31580AE0800129300C3FFA2A +:103130001890503A18941892F80C003C1697507C4E +:103140004CDC0F3AF80A070E407C1C0C4CBEFC0C01 +:10315000070E201E500E4CAEFC0C070C507C400C91 +:10316000587CE08B00F84C7EFC0C032F368BF60A63 +:103170001800E08000F0371BF60A1800C07034CB4E +:10318000F60A1800C051A3B4CE58A5B4CE380F8BA0 +:1031900036CAF40B1800C051A5B4EECBFFFFCDB872 +:1031A000A5A4CD88EBD5C005367CF80A1800E08BC5 +:1031B0000027365BF60A1800C48234FBF60A1800B2 +:1031C000C480E08B000C345BF60A1800C3E0347B4B +:1031D000F60A1800C3A0344BC088358BF60A1800D5 +:1031E000C2C0E08B0007355BF60A1800C351C31854 +:1031F000363BF60A1800C2F0364BC0E8370BF60A29 +:103200001800C250E08B000D36EBF60A1800C1F032 +:10321000E08B0014369BF60A1800C1E1C0E8375B6A +:10322000F60A1800C0A0378BF60A1800C060373BBA +:10323000F60A1800C111C0B8EDB40004C0A0EDB486 +:103240000005C0913020C0883040C0683030C04890 +:103250003010C0283000403B5BFBC040E20B09202F +:10326000C7985860E08B00776C0AEACCFFFF486E85 +:10327000FC00032F8003F2708003F1D48003F16817 +:103280008003EFC88003EFE8F4CBFFF88D0BF4EA7E +:103290000000E605083AC0F8F4CBFFFC8D0B740A79 +:1032A000E605093AC088F4CBFFF88D0BF4EA00007C +:1032B000E605083A0E9B1895C4E8620A5BFAC0B1AD +:1032C00050195028E06A0080300B029CF01F004D1E +:1032D00040284019E4CC00010E9B503CF20C0C49F4 +:1032E000C3A8620A5BFAC0B150195028E06A008096 +:1032F000300B029CF01F0043402840192012300A76 +:103300000E9BE202092AF2020C49C25816976C0A77 +:10331000F4CBFFFC8D0B740A0E9BE605093A2FF5E2 +:10332000C1A8F4C20030C068E40200222FF7F40202 +:1033300000120F8A580AC0E0230A589AFE98FFF636 +:10334000C0982FF70F8A580AC050230A589AFE983F +:10335000FFFA0E9B407C30BAF40C1800FE91FEEE92 +:103360004042178C0A325F4AF00C18005F1CF9EAE1 +:10337000000AF00A1800FE91FECB3008404E178A72 +:10338000E2050021F00A1800FC091710E6050038D4 +:10339000069EC2A8620A583AC1E0E0890007581A9E +:1033A000C1A0582AC181C058585AC0C0C0B5C13840 +:1033B0006C0AF4CCFFF88D0CF4E20000F0E300009E +:1033C000C1086C0AF4CCFFF88D0CF4E20000F0E3C5 +:1033D0000000C0786C0AF4CCFFFC8D0C740A910AD2 +:1033E0002FF52F882FC11235FE9AFFD61C9340521D +:1033F000406E85059D0B404BE60B003C2F8DD8326F +:103400008002E8BCD421149774285808C04195184C +:10341000109CD822F01F000330088F188F28D82264 +:1034200080032320D431FACD06BC5109169114979C +:103430001895F01F0056780C50CC5805C0706A687B +:103440005808C0410A9CF01F00524D281031C0316D +:103450006A01C0A84D081031C0316A11C0584CF83B +:103460001031EBF100028268EDB80003C041624800 +:103470005808C071029B0A9CF01F0049E0810F941C +:1034800082681099E219001A58A9C3D18279300ACA +:10349000F4091900C385A1D8FB5805D06288FB4800 +:1034A00005E462A8FB4805ECFAC8FFBCFB4805D45C +:1034B000FB4805C4E0680400FB4805D8FB4805CC80 +:1034C0003008FB5905D20E9A4109FAC7FA3CFB486D +:1034D00005DC0A9C0E9BF01F003350BCC0950E9B70 +:1034E0000A9CF01F003140BEF9BE01FF50BEFB0830 +:1034F00005D0EDB80006E0810F598268A7A8A26840 +:10350000E08F0F543008FB4806B4FB480690FB4898 +:10351000068CFB4806B03008300950A75078FAC432 +:10352000F9E03FF85059FB440688FB480544129CDB +:10353000506950D950E950B9129740A2325A300818 +:10354000C0282FF20589F00918005F1BF409180044 +:103550005F19F3EB000BF00B1800CF4140ABE40B0D +:103560000106C300FAF806900C08890BFB48069088 +:103570008916FAF8068C2FF8FB48068C5878E089F3 +:1035800000152F84C1C800008003276480031F3802 +:103590008003EF2C8003EF4C8003EF6C80031C381A +:1035A0008003342480031D2CFACAF978029B0A9CFC +:1035B000F01F0071E0810EF4FAC4F9E040BA0C0A81 +:1035C00050BA05893008F0091800E0800ED930099A +:1035D000FB6806BB0E96E4C8FFFF3FFE50945041C7 +:1035E0000E940491508950A8502E50391293129085 +:1035F00010970A92C0783FFC0A97502CC038300BC5 +:10360000503B0F38C0281290F0C90020E049005804 +:10361000E08B0A4A4D9AF409032F50A750800C976B +:103620000495089602924D6940941090404150D9FB +:10363000E08F08AA3008FB3906BBF0091800CE213C +:103640003208C6E8A1A3CDEB0F89F2C80030589824 +:10365000E08B001DEEC8FFFF300B2309F60B002B9B +:10366000F20B001B1139F2CA0030589AFE98FFF78E +:10367000E0490024CC51E04B0020E0890E90201B53 +:10368000FAF906B4123BC095C108FAF906B4ECCABF +:10369000FFFF1236C1F5C268FACEF9441097FC0B51 +:1036A000003BF6F0FD88C3581097FAC8F9501AD8B5 +:1036B000FAC8FAB81AD8FAC8FBB4029A1AD8049C05 +:1036C000FAC8F940FAC9FFB4F01F002E2FDD7800C8 +:1036D000C208FACCF9441496F8040038F0F0FD88DA +:1036E000C188410859F9E0890011F0CBFFFC510B6A +:1036F0007000FACBF944F6090038F140FD882FF943 +:103700001496FB4906B4C058700014962FC851088F +:103710005800FE94FF785C30A3A3C74B32B8FB6817 +:1037200006BBC70B0F38E048002AC0303009C80874 +:103730000F88F0C900305899E08B0026EEC5FFFFD6 +:10374000300B2308F60B002BF00B001B0B38F0C9D5 +:1037500000305899FE98FFF7E0480024FE91FF5191 +:10376000E04B0020E0890E1B201BFAF806B4103B4A +:10377000C115C188800334048003F0048003EDD0B8 +:10378000800330E4FAFA06B4ECC9FFFF1436C1F541 +:10379000C288FACAF944F40B003BF6FBFD88502BB3 +:1037A000C3C8FAC8F9501AD8FAC8FAB81AD8FAC869 +:1037B000FBB4029A1AD8049CFAC8F940FAC9FFB4BB +:1037C000F01F017B2FDD780C502CC27812960E95DD +:1037D000FAC9F944F2040038F0F8FD885028C1D83D +:1037E000410859FAE0890014F0CBFFFC7008510B36 +:1037F0005028FAC6F944402EEC0A0038F14EFD88F4 +:103800002FFA0E95FB4A06B41296C078700C0E95EE +:103810002FC8502C12965108402B580BFE95FEEDE8 +:103820000A97CF0AF20900290F38F4090019F0CAE3 +:103830000030589AFE98FFF83FFAF20A0C495029D6 +:10384000CE4AA7B3CDFA30092308F2090029F009BE +:1038500000190F38F0CA0030589AFE98FFF7E04878 +:103860000024FE91FED2E0490020E0890D98F2C4C8 +:10387000000130195039CC6AA3B3CC4AA7A3CC2A93 +:103880000F8836CEFC081800C0412FF7A5B3CBAA8D +:10389000A5A3CB8AA5B3CB6A50A750800C971090F4 +:1038A00008960495409402920E994041FAF806B4A5 +:1038B000403C580CC1D01036C064FACBF944F6062F +:1038C0000036C1D8FAC8F9501AD8FAC8FAB81AD8C6 +:1038D000FAC8FBB41AD8FAC8F940FAC9FFB4049A76 +:1038E0000C9B0A9CF01F01322FDD19B8C2282FF75C +:1038F0001039C084FACAF944F4060036ED38FD8B5D +:10390000C188410959F8E0890012F2CAFFFC510A46 +:103910007209FAC6F944EC08003A2FF8F549FD8817 +:10392000FB4806B4F1D9C008C04813B82FC95109E3 +:10393000FB680660300E30083012FB6806BB502E64 +:10394000E08F08C450A750800C9704950896029207 +:10395000409410904041A5A3C0A850A750800C9758 +:10396000049508960292409410904041EDB30005F2 +:10397000C511FAF806B4403C580CC1E01036C064DA +:10398000FACBF944F6060036C208FAC8F9501AD83C +:10399000FAC8FAB80C9B1AD8FAC8FBB41AD8FAC9F4 +:1039A000FFB4FAC8F940049A0A9CF01F01012FDD08 +:1039B000781B7809C2B8EECAFFFF1037C0B4FAC945 +:1039C000F9441497F2060036ECFBFD8CECF9FD8807 +:1039D000C1D8410959F8E0890014F2CBFFF8510B26 +:1039E000FAC6F944721BEC08003C7209F94BFD8CD5 +:1039F000F949FD882FF81497FB4806B4C078F2C83F +:103A0000FFF8721B1497510872091698FAE9000022 +:103A1000CAE8EDB30004C171FAF806B4403E580E8E +:103A2000C0801036C694FACCF944F8060036C8288F +:103A3000EECAFFFF1037E0840081FACBF944F606A6 +:103A40000036C778EDB30006C4B1FAF806B4403CBE +:103A5000580CC1D01036C064FACBF944F6060036D3 +:103A6000C1F8FAC8F9501AD8FAC8FAB81AD8FAC878 +:103A7000FBB41AD8FAC8F940FAC9FFB4049A0C9BEF +:103A80000A9CF01F00CB2FDD9818C268EECAFFFF1A +:103A90001037C094FAC9F9441497F2060036ED08BD +:103AA000FD8AC1A8410959F8E0890013F2CBFFFC57 +:103AB000510B7209FAC6F944EC08003B2FF8F7499C +:103AC000FD88FB4806B41497F1D9B010C05892187D +:103AD00014972FC951095018BF585008C488FAF8D4 +:103AE00006B4403C580CC1D01036C064FACBF9443F +:103AF000F6060036C1F8FAC8F9501AD8FAC8FAB86A +:103B00000C9B1AD8FAC8FBB4049A1AD80A9CFAC8B3 +:103B1000F940FAC9FFB4F01F00A62FDD780BC248A8 +:103B2000EECAFFFF1037C094FAC9F944F206003616 +:103B30001497ECFBFD88C188410959F8E089001110 +:103B4000F2CBFFFC510BFAC6F944720BEC080039BA +:103B5000F34BFD882FF81497FB4806B4C058720B3E +:103B600014972FC95109501BBF5B500BFAEA000094 +:103B7000580A5C2BC0E43008FAEA00003009F00A69 +:103B8000010AF20B014B32D8FAEB0000FB6806BBCE +:103B90003018E08F071150A750800C9704950896B5 +:103BA00002924094109040410E99EDB30003C4116D +:103BB000FAF806B4403A580AC1901036C645FAC819 +:103BC000F9501AD8FAC8FAB81AD8FAC8FBB40C9B3C +:103BD0001AD8049AFAC8F940FAC9FFB40A9CF01F2F +:103BE00000742FDD78165076C4882FF71039C0C4C2 +:103BF000FACEF944FC060036ECFCFD8C507CECF669 +:103C0000FD885056C668410959F8E0890010F2CA8B +:103C1000FFF8721B510A7209FACAF944507B5059D5 +:103C2000F4080039405B407AC47872185078C4C8F0 +:103C3000FAF806B4403E580EC2301036C094FACCA2 +:103C4000F944F8060036ECFBFD8C507BCD9BFAC89E +:103C5000F9501AD8FAC8FAB8049A1AD8FAC8FBB4B4 +:103C60000C9B1AD80A9CFAC8F940FAC9FFB4F01F95 +:103C700000502FDD781A507A780C505CC2A82FF7CC +:103C80001039C094FAC9F944F2060036ECF8FD8CFC +:103C90005078CB6B410959F8E0890015F2CAFFF85A +:103CA00072167209510A5059FACEF9445076FC083E +:103CB0000039405B0C9AF2EBFD882FF8FB4806B404 +:103CC000C088721C507CF2C8FFF851087209505924 +:103CD000405B407AF01F00371896C1503008300919 +:103CE000405B407AF01F0034C04032D8FB6806BB0E +:103CF0004B284B36A7D3E0400047F00617A03032E0 +:103D0000E08F06E7405B407AF01F002EC0C05026CF +:103D10004AD84AE6A7D3E0400047F00617A0303261 +:103D2000E08F06DD402A5BFAC04130695029C11896 +:103D3000E04000475F09E04000675F08F3E81008D3 +:103D4000F8081800C06040285808F9B80001502849 +:103D500040784059FAE90694A9A3FAF8069458085D +:103D6000C065405E300C506E509CC078405B32DACB +:103D7000EE1B8000509A506BE04000465F09E04027 +:103D800000665F08F3E810085048C0404022303910 +:103D9000C228E04000455F09E04000655F084046FA +:103DA0001049EC091800C1314022C148800330E4B9 +:103DB0008003697880036FC08003F2408003F2447F +:103DC00080032A7E8003F2488003F24C402EFCC21E +:103DD000FFFF3029FAC8F95C1AD8FAC8F9541AD882 +:103DE000FAC8F94C0A9C1AD80498409B40AAF01FC4 +:103DF00001E0E04000475F19E04000675F18189657 +:103E00002FDDF3E80008C041EDB30000C301EC0270 +:103E1000000C503C404B580BC1500D893308F00941 +:103E20001800C0B130083009406B407AF01F01D152 +:103E3000FBB20001FBF20BAB403AFAF806AC100AF9 +:103E4000503A406B30083009407AF01F01CAC090E8 +:103E50004039FB4906A4C05810C9FB4806A4C02835 +:103E60003309FAF806A4403E1C38CF73E0400047FF +:103E70005F09E04000675F08F3E81008FAF906A45C +:103E80000C1950695808C0B0FAF806AC5BD8C05598 +:103E9000402C1838E08A006A2020C058E0400065B5 +:103EA000E0890046FAFB06ACFB60069C201BFB4B3E +:103EB00006ACC0475C3B32D8C02832B8FB68069DD0 +:103EC000589BE08A001DFAC9FA3530AA12980E9C58 +:103ED0000C92F60A0C060E9B2D0B10FB0C9B5896B1 +:103EE000FE99FFF92D0B1897049610FBFACAF96298 +:103EF000C038113B14CB1238CFD3C0982D0B3308E8 +:103F0000FB6B069FFB68069EFACAF960FAC8F96463 +:103F1000F408010850E81092406B1602581BE08923 +:103F20000005EDB30000C3512FF2C338E040006636 +:103F3000C1C1FAF206AC5802E08A000C402A580AC5 +:103F4000C041EDB30000C2512FF240291202C0B8A7 +:103F500040285808C061EDB30000C0303012C1984D +:103F600040222FE23660C158FAF206AC406E1C3295 +:103F7000C065EDB30000F7B200FFC0A8E40811026D +:103F8000406C5802F00217A0F9B20901180236700D +:103F9000409B580BE080059D32D8FB6806BBE08F44 +:103FA000059C50A704950C970292089640414094B6 +:103FB0000E99EDB30005C481FAF806B4403E580EE0 +:103FC000C1D01036C064FACCF944F8060036C1D826 +:103FD000FAC8F9501AD8FAC8FAB8049A1AD8FAC81E +:103FE000FBB40C9B1AD80A9CFAC8F940FAC9FFB472 +:103FF000F01F01612FDD780AC2082FF71039C08445 +:10400000FACBF944F6060036ECFAFD88C16841099E +:1040100059F8E0890010F2CAFFFC510AFAC6F944C7 +:10402000720AEC080039F34AFD882FF8FB4806B401 +:10403000C048720A2FC9510940BE1C98951EBF582E +:104040009508FE9FFA7CEDB30004C480E2130040A3 +:10405000C450FAF806B4403C580CC1D01036C064C5 +:10406000FACBF944F6060036C1D8FAC8F9501AD886 +:10407000FAC8FAB8049A1AD8FAC8FBB40C9B1AD832 +:104080000A9CFAC8F940FAC9FFB4F01F013B2FDDC2 +:10409000780AC2082FF71039C084FACAF944F40626 +:1040A0000036ECFAFD88C168410959F8E089001032 +:1040B000F2CAFFFC510AFAC6F944720AEC08003948 +:1040C000F34AFD882FF8FB4806B4C048720A2FC98E +:1040D000510940BEB40EFE9FFA32FAF806B4403CD5 +:1040E000580CC1D01036C064FACBF944F60600363D +:1040F000C1D8FAC8F9501AD8FAC8FAB8049A1AD826 +:10410000FAC8FBB40C9B1AD80A9CFAC8F940FAC941 +:10411000FFB4F01F01192FDD780AC2082FF71039FC +:10412000C084FACAF944F4060036ECFAFD88C16886 +:10413000410959F8E0890010F2CAFFFC510AFAC699 +:10414000F944720AEC080039F34AFD882FF8FB485D +:1041500006B4C048720A2FC9510940BE950EFE9F91 +:10416000F9EE50A750800C9704950896029240945F +:1041700010904041A5A3C0A850A750800C9704956B +:1041800008960292409410904041EDB30005C5D1CD +:10419000FAF806B4403C580CC2601036C0A4FACB02 +:1041A000F944F6060036ECE8FD88FAE90000C1881B +:1041B000FAC8F9501AD8FAC8FAB8049A1AD80C9B57 +:1041C000FAC8FBB40A9C1AD8FAC8F940FAC9FFB475 +:1041D000F01F00E92FDDF8EA0000FAEB00003008DC +:1041E000E08F03E7EECAFFFF1037C0B4FAC9F94405 +:1041F0001497F2060036ECEAFD88FAEB0000C1885D +:10420000410959F8E0890018F2E60000F2CBFFF806 +:10421000FAE70000510BFAC6F944EC080039FAE657 +:104220000000F2E7FD882FF81497FB4806B44038E9 +:10423000E08F03BFF2E600004038FAE700002F8964 +:1042400014975109E08F03B5EDB30004C161FAF88A +:1042500006B4403E580EC0801036C674FACCF944FD +:10426000F8060036C808EECAFFFF1037C7F4FACBCD +:10427000F944F6060036C768EDB30006C4A1FAF8A3 +:1042800006B4403C580CC1D01036C064FACBF94497 +:10429000F6060036C1F8FAC8F9501AD8FAC8FAB8C2 +:1042A0001AD8FAC8FBB41AD8FAC8F940FAC9FFB448 +:1042B000049A0C9B0A9CF01F00B02FDD9818C2686E +:1042C000EECAFFFF1037C094FAC9F9441497F206FA +:1042D0000036ED08FD8AC1A8410959F8E0890013AC +:1042E000F2CBFFFC510B7209FAC6F944EC08003B13 +:1042F0002FF8F749FD88FB4806B41497F1D9B010A0 +:10430000C058921814972FC951095C785018C46886 +:10431000FAF806B4403C580CC1D01036C064FACB51 +:10432000F944F6060036C1F8FAC8F9501AD8FAC8A6 +:10433000FAB80C9B1AD8FAC8FBB4049A1AD80A9C8B +:10434000FAC8F940FAC9FFB4F01F008B2FDD780BD3 +:10435000C248EECAFFFF1037C094FAC9F944F2060A +:1043600000361497ECFBFD88C188410959F8E089B3 +:104370000011F2CBFFFC510BFAC6F944720BEC08AA +:104380000039F34BFD882FF81497FB4806B4C0584A +:10439000720B14972FC95109501B300E500E1C98E8 +:1043A000E08F030750A750800C970495089602925F +:1043B000409440410E99FAF806B4403C580CC1D0E4 +:1043C0001036C064FACBF944F6060036C1D8FAC8F4 +:1043D000F9501AD8FAC8FAB81AD8FAC8FBB41AD8D9 +:1043E000FAC9FFB4FAC8F940049A0C9B0A9CF01F62 +:1043F00000622FDD7809C2182FF71039C084FACA7D +:10440000F944F4060036ECF9FD88C178410959F801 +:10441000E0890010F2CAFFFC510AFAC6F944720999 +:10442000EC08003AF549FD882FF8FB4806B4C0585F +:10443000F2C8FFFC510872093308FB6806B83788D8 +:10444000300EFB6806B94CDC5019A1B3500E50DC9D +:1044500030283780E08F02AD50A750801090300890 +:10446000FB6806BB0C970495089602924094404165 +:104470000E99FAF806B4403B580BC1D01036C06410 +:10448000FACAF944F4060036C1D8FAC8F9501AD865 +:10449000FAC8FAB81AD8FAC8FBB40C9B1AD8049A0E +:1044A000FAC8F940FAC9FFB40A9CF01F00332FDDA7 +:1044B0007806C2082FF71039C084FAC9F944F20609 +:1044C0000036ECF6FD88C168410959F8E089001012 +:1044D000F2CAFFFC510A7206FACEF944FC08003910 +:1044E000F346FD882FF8FB4806B4C04872062FC972 +:1044F0005109402C580CC105189A300B0C9CF01F28 +:104500000020E08002E9F8060102402B1632E08923 +:1045100002E3E08F02DE300A0C9C502AF01F0019E3 +:104520001892E08F02DC50A750800C9704950896F3 +:104530000292409410904041A5A3C0A850A750807B +:104540000C97049508960292409410904041EDB368 +:104550000005C611FAF806B440395809C2C0103631 +:10456000C124FAC8F944F0060036C2E88003552C8D +:1045700080036F32800330E48003EDE4800328A4DD +:104580008002EDD0FAC8F9501AD8FAC8FAB81AD889 +:10459000FAC8FBB41AD8FAC8F940FAC9FFB4049AA9 +:1045A0000C9B0A9CF01F00C82FDDF8E80000FAE918 +:1045B0000000C2E8EECAFFFF1037C0B4FAC8F944E1 +:1045C0001497F0060036ECEAFD88FAEB0000C2080A +:1045D000410959F8E0890016F2E60000F2CBFFF835 +:1045E000FAE70000510BFAC6F944EC080039FAE684 +:1045F0000000F2E7FD882FF81497FB4806B4C08846 +:10460000F2E600002F89FAE70000510914973018EC +:10461000E08F01CFEDB30004C161FAF806B4403E6B +:10462000580EC0801036C674FACCF944F80600362D +:10463000C808EECAFFFF1037C7F4FACBF944F606F4 +:104640000036C768EDB30006C4A1FAF806B4403CD2 +:10465000580CC1D01036C064FACBF944F6060036C7 +:10466000C1F8FAC8F9501AD8FAC8FAB81AD8FAC86C +:10467000FBB41AD8FAC8F940FAC9FFB4049A0C9BE3 +:104680000A9CF01F00912FDD9818C268EECAFFFF48 +:104690001037C094FAC9F9441497F2060036ED08B1 +:1046A000FD8AC1A8410959F8E0890013F2CBFFFC4B +:1046B000510B7209FAC6F944EC08003B2FF8F74990 +:1046C000FD88FB4806B41497F1D9B010C058921871 +:1046D00014972FC951095C785018C468FAF806B4C9 +:1046E000403C580CC1D01036C064FACBF944F606F1 +:1046F0000036C1F8FAC8F9501AD8FAC8FAB80C9BB3 +:104700001AD8FAC8FBB4049A1AD80A9CFAC8F94015 +:10471000FAC9FFB4F01F006C2FDD780BC248EECA57 +:10472000FFFF1037C094FAC9F944F2060036149717 +:10473000ECFBFD88C188410959F8E0890011F2CBF2 +:10474000FFFC510BFAC6F944720BEC080039F34B2D +:10475000FD882FF81497FB4806B4C058720B1497C5 +:104760002FC95109501B300E3018500EC21950A7D6 +:1047700050800C970495089602924D4C40941090EE +:10478000404150DCEDB30005C551FAF806B4403B9A +:10479000580BC2201036C0A4FACAF944F4060036F9 +:1047A000ECE8FD88FAE90000CF58FAC8F9501AD8A9 +:1047B000FAC8FAB8049A1AD80C9BFAC8FBB40A9C37 +:1047C0001AD8FAC8F940FAC9FFB4F01F003F2FDD2C +:1047D000F8EA0000C0C8EECAFFFF1037C0B4FAC93B +:1047E000F9441497F2060036ECEAFD88FAEB000073 +:1047F000CD18410959F8E0890016F2E60000F2CB25 +:10480000FFF8FAE70000510BFAC6F944EC0800394A +:10481000FAE60000F2E7FD882FF81497FB4806B48B +:10482000CB98F2E600002F89FAE7000051091497AF +:10483000CB18EDB30004C171FAF806B4403E580E2F +:10484000C0801036C6C4FACCF944F8060036C85801 +:10485000EECAFFFF1037E0840084FACBF944F60675 +:104860000036C7A8EDB30006C4E1FAF806B4403C30 +:10487000580CC1D01036C064FACBF944F6060036A5 +:10488000C1F8FAC8F9501AD8FAC8FAB81AD8FAC84A +:10489000FBB41AD8FAC8F940FAC9FFB4049A0C9BC1 +:1048A0000A9CF01F00092FDD9818C2A8EECAFFFF6E +:1048B0001037C0D4FAC9F9441497F2060036ED084F +:1048C000FD8AC1E8800330E48003EDE4410959F832 +:1048D000E0890013F2CBFFFC510B7209FAC6F944D0 +:1048E000EC08003B2FF8F749FD88FB4806B4149705 +:1048F000F1D9B010C058921814972FC951095C789B +:104900005018C468FAF806B4403C580CC1D01036B0 +:10491000C064FACBF944F6060036C1F8FAC8F9507B +:104920001AD8FAC8FAB80C9B1AD8FAC8FBB4049A79 +:104930001AD80A9CFAC8F940FAC9FFB4F01F00C996 +:104940002FDD780BC248EECAFFFF1037C094FAC9BA +:10495000F944F20600361497ECFBFD88C188410942 +:1049600059F8E0890011F2CBFFFC510BFAC6F9446B +:10497000720BEC080039F34BFD882FF81497FB48B5 +:1049800006B4C058720B14972FC95109501B300E32 +:10499000500E4008401C18485F18E7E80008C07037 +:1049A0003308FB6006B9A1B3FB6806B830283009AC +:1049B000FB6906BB402B580BC025A7D3402A4009F2 +:1049C000580A5F1A4016FAC2F9780C495F19F5E9DE +:1049D0001009C5C03019F2081800C0603029F2086B +:1049E0001800C041C3C80496C3080496FAE8000042 +:1049F000F5D8C0032D0A0CFAF00B1603F20C1603BF +:104A0000F7E911DB1899169858085C29CF21FAE9C3 +:104A10000000EDB30000C4513309F20A1800C410BD +:104A20000CF9C3F8FAEA000030A83009F01F008E34 +:104A300030A82D0A3009AC8AFAEA0000F01F008B7A +:104A400016991498FAE900002016FAEA0000589A1C +:104A50005C2BFE9BFFE91BF82D08C2080496FAE8C0 +:104A60000000F5D8C00440DEFC0A070A0CFAF20B7D +:104A70001604F00A1604F5E911CA16991498580894 +:104A80005C29CF01FAE90000C0C85808C091EDB315 +:104A90000000C061FAC6F9793308AC88C0280496D2 +:104AA0000C12C1C850A7508040940C9710900495E8 +:104AB00040415808E0800464FB680660300C300810 +:104AC0003012FB6806BB502CFAC6F9A0C078300B38 +:104AD000502BC0484022300A502A4029E4090C4992 +:104AE000FB3806BB5039069E3009E21E0002F20870 +:104AF0001800FBF81003F7B801FFFBF81A03069B38 +:104B0000580EFBFC1003F7BC01FEFBFC1A03E21B72 +:104B1000008450FE509BC451408A4039121A504ABA +:104B2000580AE089001FC3D82F092FF84D0E310C09 +:104B3000FB490690890E891CFB48068C5878E08951 +:104B400000042F84C0B8FACAF978029B0A9CF01FAF +:104B50000049E0810425FAC4F9E0404B210B504B99 +:104B6000FAF90690FAF8068C4C1A404E590EFE9946 +:104B7000FFDD1C092FF8890AFB490690891EFB48B6 +:104B8000068C5878E08900042F84C0B8FACAF978F6 +:104B9000029B0A9CF01F0037E0810402FAC4F9E08E +:104BA0003009FB3806BBF2081800C1F0FAF806908D +:104BB000FAC9F9452FF88909FB4806903019FAF827 +:104BC000068C89192FF8FB48068C5878E089000478 +:104BD0002F84C0B8FACAF978029B0A9CF01F0025FE +:104BE000E08103DEFAC4F9E040FC580CC1F0FAF8A9 +:104BF0000690FAC9F9482FE88909FB480690302940 +:104C0000FAF8068C89192FF8FB48068C5878E08949 +:104C100000042F84C0B8FACAF978029B0A9CF01FDE +:104C20000015E08103BDFAC4F9E0409BE04B008031 +:104C3000C511408A4039121A504A580AE089002B9F +:104C4000C4982F092FF848CE310CFB490690890EE5 +:104C5000891CFB48068C5878E08900102F84C178A5 +:104C6000800330E4800373408002D9988003F250BF +:104C7000800334048003F260FACAF978029B0A9C2C +:104C8000F01F004CE081038CFAC4F9E0404B210B8B +:104C9000504BFAF90690FAF8068C4C7A404E590EB1 +:104CA000FE99FFD11C092FF8890AFB490690891E3D +:104CB000FB48068C5878E08900042F84C0B8FACAF3 +:104CC000F978029B0A9CF01F003BE0810369FAC45B +:104CD000F9E0402C041C502C580CE089001FC3D86C +:104CE0002F092FF84B4B310AFB490690890B891A83 +:104CF000FB48068C5878E08900042F84C0B8FACAB3 +:104D0000F978029B0A9CF01F002BE0810349FAC44A +:104D1000F9E0402921095029FAF90690FAF8068CA1 +:104D20004A5A402E590EFE99FFDD1C092FF8890AB8 +:104D3000FB490690891EFB48068C5878E0890004E0 +:104D40002F84C0B8FACAF978029B0A9CF01F001998 +:104D5000E0810326FAC4F9E0EDB30008C0B0FAF828 +:104D6000069089128906F0020002FB420690E08F4D +:104D700001DBE0400065E08A01DD30083009405B7E +:104D8000407AF01F000EC7E0FAF8069048C92FF8E5 +:104D90008909FB4806903019FAF8068C89192FF812 +:104DA000FB48068C5878E089000D2F84C14800002C +:104DB000800334048003F26080036F328003A6C056 +:104DC000FACAF978029B0A9CF01F0078E08102E899 +:104DD000FAC4F9E0FAF806AC406C1838C055EDB3E7 +:104DE0000000E081026DFAF806902FF840CBFB48F6 +:104DF00006903019FAF8068C890B2FF88919FB48B0 +:104E0000068C5878E08900042F84C0B8FACAF97873 +:104E1000029B0A9CF01F0065E08102C2FAC4F9E01F +:104E2000406620165806E089001DE08F02492F09D0 +:104E30002FF8FB49069089028910FB48068C5878A8 +:104E4000E08900042F84C0B8FACAF978029B0A9C52 +:104E5000F01F0056E08102A4FAC4F9E02106C03830 +:104E60004D323100FAF90690FAF8068C4D0A5906CF +:104E7000FE99FFDF0C09890AFB4906902FF8891675 +:104E8000C559FAFA06AC580AE0890096FAF8069075 +:104E90004C892FF88909FB4806903019FAF8068CDE +:104EA00089192FF8FB48068C5878E08900042F8474 +:104EB000C0B8FACAF978029B0A9CF01F003CE08156 +:104EC000026FFAC4F9E0FAF806AC5808C081406AEB +:104ED000580AC051EDB30000E08101F240C9FAF870 +:104EE00006902FF88909FB4806903019FAF8068CCD +:104EF00089192FF8FB48068C5878E08900042F8424 +:104F0000C0B8FACAF978029B0A9CF01F0028E08119 +:104F10000247FAC4F9E0FAF206AC5C325802E089C2 +:104F2000001DC3B82F092FF8310EFB4906908900E8 +:104F3000891EFB48068C5878E08900042F84C0B88D +:104F4000FACAF978029B0A9CF01F0018E081022837 +:104F5000FAC4F9E02102C0284950FAF90690FAF89B +:104F6000068C493A5902FE99FFDF04092FF8890A95 +:104F7000FB4906908912FB48068C5878E0890004AA +:104F80002F84C0B8FACAF978029B0A9CF01F000768 +:104F9000E0810206FAC4F9E0406CFAF8069089064E +:104FA000891C1808CBE80000800334048003F260F9 +:104FB0008003A6C0FAF90690FAF8068C406B163A00 +:104FC000C6D516092FF88906FB490690891BFB48B0 +:104FD000068C5878E08900042F84C0B8FACAF978A2 +:104FE000029B0A9CF01F006FE08101DAFAC4F9E02D +:104FF000FAF606AC406A14165806E089001CC3B8DD +:105000002F092FF8FB49069089028910FB48068C6E +:105010005878E08900042F84C0B8FACAF978029B56 +:105020000A9CF01F0060E08101BBFAC4F9E0210690 +:10503000C0384DD23100FAF90690FAF8068C4DAA24 +:105040005906FE99FFDF0C092FF8890AFB490690E3 +:105050008916FB48068C5878E08900042F84C0B874 +:10506000FACAF978029B0A9CF01F004EE081019871 +:10507000FAC4F9E0EDB30000E081012240C9FAF87A +:1050800006902FF88909FB4806903019FAF8068C2B +:1050900089192FF8FB48068CC04914092FF8FB49E1 +:1050A00006908906891AFB48068C5878E089000426 +:1050B0002F84C0B8FACAF978029B0A9CF01F003905 +:1050C000E081016EFAC4F9E040C88908FAF8069058 +:1050D0002FF83019FB4806908919FAF8068C2FF83A +:1050E000FB48068CFAF206AC5878E08900042F845D +:1050F000C0B8FACAF978029B0A9CF01F002AE08126 +:10510000014FFAC4F9E00406FAF806AC8906FAF988 +:1051100006904066406E1016F208010889161C08B9 +:10512000FB480690FAF8068C2FF8FB48068CCB98C3 +:10513000406C581CE0890006EDB30000E081008758 +:10514000FAF806902FF83019FB4806908906FAF80D +:10515000068C89192FF8FB48068C5878E0890004E2 +:105160002F84C0B8FACAF978029B0A9CF01F000D80 +:10517000E0810116FAC4F9E0FAF806902FF840CB66 +:10518000FB4806903019FAF8068C890B2FF889191C +:10519000FB48068C5878E08900092F84C10800007C +:1051A000800334048003F260FACAF978029B0A9CF7 +:1051B000F01F006FE08100F4FAC4F9E03008300914 +:1051C000405B407AF01F006B40682018580CC0D13B +:1051D0002FF689188906FAF606901006FAF8068C5A +:1051E000FB4606902FF8C2F810965808E089001C7C +:1051F000C4982F092FF8FB49069089028910FB48B3 +:10520000068C5878E08900042F84C0B8FACAF9786F +:10521000029B0A9CF01F0056E08100C2FAC4F9E02C +:105220002106C0384D423100FAF90690FAF8068C92 +:105230004D1A5906FE99FFDF0C09890AFB490690B1 +:105240002FF88916FB48068CC0E8FAF806902FF86C +:105250003019FB4806908906FAF8068C89192FF850 +:10526000FB48068C5878E08900042F84C0B8FACA3D +:10527000F978029B0A9CF01F003EE0810091FAC47D +:10528000F9E040EAFAF806901408FAC9F964FB4814 +:105290000690891AFAF8068C89092FF8FB48068CC3 +:1052A0005878E08900042F84C0A8FACAF978029BD4 +:1052B0000A9CF01F002FC731FAC4F9E0E213000482 +:1052C000C3D04086403912165806E089001AC368D8 +:1052D0002F092FF8FB49069089038912FB48068C99 +:1052E0005878E08900042F84C098009A029B0A9C99 +:1052F000F01F001FC541FAC4F9E02106C05849F368 +:105300003102FAC0F978FAF90690FAF8068C49BA2F +:105310005906FE99FFDF0C092FF8890A8916FB4907 +:105320000690FB48068C5878E08A0009FACAF9789A +:10533000029B0A9CF01F000EC32140BC4036408EE9 +:10534000EC0E0C48100C50BCFAF806905808C080BF +:10535000FACAF978029B0A9CF01F0005C201300BC3 +:10536000FAC4F9E0FB4B068CFE9FF0E9800334049D +:1053700080036F328003F2608003F250FAF80690E7 +:105380005808C0800A9CFACAF978029BF01F0009ED +:10539000C0613008FB48068CC02840418268EDB8E7 +:1053A0000006C0313FFA50BA40BCFE3DF944D83245 +:1053B00080033404D42116981897109C3008149B4D +:1053C0004866129A8D08F01F00065BFCC0516C08FD +:1053D0005808EFF81A03D82200008CC48002F1505C +:1053E000D421300818974876169C8D08F01F0006C7 +:1053F0005BFCC0516C085808EFF81A03D822000073 +:1054000000008CC48002F108D431202D1897784810 +:1054100076460C38C034300CC858ECC2FFFCF6C3DA +:10542000FFECF6020329F802032C2FF92016F809E5 +:105430000D08F6020022EEC4FFEC10955808C410C7 +:105440003009069A08981291500B700EB18E501EBA +:10545000150EFC001610FDDEC010EA0E0341FDD152 +:10546000C010B181401BEA000240E2000000E3D01E +:10547000C010021B501B700BE3DBC0100209F20EC0 +:10548000010EB01EFC091410401EFC090009B009F1 +:10549000E00116102FC8B149043AFE98FFD8400B1E +:1054A000580CC0F1ECC8FFFBEE080028C0282016FD +:1054B00020480838E088000570095809CF908F46C9 +:1054C0000E9CF01F001AC2D52FF508983009070B63 +:1054D000F60A1610700CF7DBC010F80E1610141E2A +:1054E000F5DCC010161A120AB01AB14AFC0A0009FB +:1054F000B0092FC8B1490433FE98FFEBECC8FFFB9D +:10550000EE0803295809C0D1EE080028C02820164B +:1055100020480838E088000570095809CF908F4668 +:105520000A9C2FEDD8320000800363EED43121AD08 +:10553000FAC4FF7418971695682C50C96816680944 +:1055400050E81494512CFAE5000851596E9558050D +:10555000C091310CF01F004799358F9C9915992502 +:1055600099056E9972085808C0F0721A911A301A8B +:105570007219F4090949109B91290E9CF01F003EF5 +:105580006E9830099109402810945808C064F1D8E9 +:10559000C01F50283018C02830088D08FC1C7FF030 +:1055A00040260C98E6187FF01838C1C1E068270F34 +:1055B000415B9708403A580AC061EDD6C014C0312B +:1055C0004AECC0284AEC41295809E08005DEF8C8B9 +:1055D000FFFD3009118AF20A1800C190F8C8FFF8DF +:1055E000C168FAEA00083008FAEB003C3009F01F05 +:1055F0000025C1103018415A950841294A285809F8 +:10560000C041109CE08F05C1109C2FF841258B08EC +:10561000E08F05BBFAC8FF9CFAC9FFA0FAEA003C7C +:105620000E9CEBD6C28BF01F001918935805C0D002 +:10563000FAEA003C3004F1DBC014EAC503FF109B1A +:105640005174EA1B3FF0C3284188419C100CF8C5F7 +:10565000FBCEE0450020E08A001BF8CCFBEE403B8F +:10566000EA081140F60C0A4CEC0809460C4CC148FB +:105670008002E2A4800364208003F3708003F37C43 +:1056800080036F328003A6C0800364D0EA0C11202F +:10569000403AF40C094CF01F006BFC18FE10301956 +:1056A000EAC50433F00B000B51793008FC193FF8C0 +:1056B000F01F0065E0684361EA18636FE06987A73F +:1056C000EA193FD2F01F0061E068C8B3EA188B60A6 +:1056D000E0698A28EA193FC6F01F005D0A9C149011 +:1056E0001691F01F005CE06879FBEA18509FE069B2 +:1056F0004413EA193FD3F01F005514981699009AE5 +:10570000029BF01F005314901691F01F00533008B5 +:1057100018963009009A029BF01F0050C0C00C9CE4 +:10572000F01F004C14981699009A029BF01F004C31 +:10573000F7B600015966E088000530185148C128C5 +:105740004C88FAEA003CF0060238F01F0044F9B435 +:105750000000FBF40A14F7B60101F9BC0100FBFCE0 +:105760001A14419020100A10C04650403000C04822 +:10577000300B5C30504BEC0211005806FBFA400431 +:10578000F5D6E40AFBFA4A04FBF64A11F9B2040022 +:10579000E1D6E510F9B90500FBF95A1140C858984F +:1057A000E08B00205858F9B40A01FBF5900CF7B5CE +:1057B0000904FBF59A0CF9B4090040CC583CC2D05E +:1057C000E0890005582CC101C18840CB584BC0600E +:1057D000585BC0A1301A50DAC228301950D9C0F82D +:1057E0003008301450C83FF5301C300B509550DC59 +:1057F0000A91312850EBC208300A50DA40E95809C2 +:10580000E089000730185098109150E8C15840E5E1 +:1058100050950A910A98C108300C50DC40EBEC0B13 +:10582000000B509B16982FF85808E089000510913E +:105830003018C028109130096E9A95193049C178F6 +:1058400080036E4A80036B7C800369A480036D181B +:1058500080036E5280036E2480036FC080036F321A +:105860008003F38C6A1AA1792FFA8B1A6E95F2CA0B +:10587000FFEC103AFE98FFF86A1B0E9CF01F0053D5 +:1058800058E15F888B0CF1E400046E987008508832 +:10589000E08001985806E08A0040F3D6C0044CC866 +:1058A000F0090234FAE50018EC041404EDB4000425 +:1058B000C0303025C0F84C78F0E80020FAEA003C0F +:1058C000E9D4C004F01F0044303514981699FAE961 +:1058D00000084C0C50A30C931896C0F8FAEA001874 +:1058E000EDB40000C081ECE800002FF5F01F003B94 +:1058F000FAEB0018A1542F865804CF11FAE80018CB +:10590000FAEA00080696F01F003440A3149816998E +:10591000FAE90008C2D8EC081100C0313025C2886D +:105920004ACCF0041404501CF1D8C0044A89FAEAA5 +:10593000003CF2080238F01F0029401C506330255B +:105940000C93FAEB00081896C0F8FAEA0008EDB4D8 +:105950000000C081ECE800002FF5F01F0020FAEBFA +:105960000008A1542F865804CF1106964063414A7F +:10597000580AC370FAE8000858015F94FAE9001861 +:105980003008FC193FF0FAEA0018F01F0015F9BCC6 +:105990000000F9BC0101E9EC000CC2304098580845 +:1059A000E08A010C3008FC194024ECC40001FAEA3A +:1059B00000182FF55064F01F0009409414981699B0 +:1059C000FAE90008C1080000800364588003F38CE2 +:1059D0008003F45480037028800369A480036FC09F +:1059E000506602940A9CF01F0069FAE80008F01F54 +:1059F00000683008FC19401CF01F006614981699C6 +:105A0000FAE90028FC18FCC040A5100550A5580470 +:105A1000C211FAEA00083008FC194014F01F005EB9 +:105A200040BCFAEB000814981699189A0A9BF01FCC +:105A3000005BE08102740A9840B9EE188000FAEA2F +:105A40000008109512980A99F01F0054E081025E38 +:105A5000CB484D39E8C8000140D55805C4F0300C9A +:105A6000F2080238513C300AFC1B3FE0F01F004DA9 +:105A7000FAE800284085F01F0048FAEB0028FAEA0F +:105A80000008F01F0049516CF01F0040149816994F +:105A9000FAEA0008F01F0040FAEB000841682D0800 +:105AA0000AC841392FF95139FAE80028F01F003BA4 +:105AB000E081035AFAE80008300AFC1B3FF0F01FAF +:105AC0000036FAE80028F01F0035FAEA002830080E +:105AD000FC194024E08100E8413C083CC6E4F01F8A +:105AE000002C3008FAEB0028FC194024FAEA0008E0 +:105AF000F01F0027FAEB0008CC3B40850805F208B0 +:105B0000023A5135FAE800284085F01F0021FAEBEF +:105B10000028FAEA0008F01F0024516CF01F001B57 +:105B200014981699FAEA0008F01F001BFAEB000817 +:105B300041682D080AC8413C1835C3713008FC196A +:105B40003FE0FAEA0028F01F00134085FAE8000859 +:105B50000805F01F0012E08100A7FAE80028300ACB +:105B6000FC1B3FE0F01F000C14981699FAEA00089D +:105B7000F01F000AC22033090A98117AF20A1800AD +:105B8000E08102F21095CF9B80036E52800369A4DE +:105B900080036D1880036B7C80036FC08003F38CDF +:105BA0008003702880036E243008FC194024F01F05 +:105BB0000056FAEB0008CAEBFAEA003CFAEB0008E0 +:105BC00058E65FAB418A3008F40911FFF7E903F9A1 +:105BD000F0091800E080008140EA58015FA9F3EA6B +:105BE00003F94CAAF4060234FAE50010F009180093 +:105BF000C1405801E081018A3008FC194014089A1C +:105C00000A9BF01F0041FAE80008F01F0041E08104 +:105C1000017D0292E08F018540853014FAE8001082 +:105C2000FAEA0008F01F003BF01F003B1892F01F3B +:105C3000003BFAE80010F01F003414981699FAEAB5 +:105C40000008F01F0037FAEB0008E4C8FFD00AC8CC +:105C5000FC19402430080234C331FAE80008F01F70 +:105C600000311691149014980299FAEA0010F01F6E +:105C7000002EC1A1FAE80010009A029BF01F002B31 +:105C8000E0800271E5D2C001C0F1E08F026C408A71 +:105C90001438C0301095C098330840892FF6B28868 +:105CA0004088C088406633990A98117AF20A180031 +:105CB000CEF0506611892FF9B089E08F0255F01FA0 +:105CC00000122FF4FAEB000830083009F01F00171B +:105CD000CA60E08F024840D85808C0510498009527 +:105CE00040D4C4A840C55815E08900224174580426 +:105CF000C040F4C9FBCDC0484199F209113604985F +:105D00000095C2F8800369A48003F38C80036F5868 +:105D10008003702880036E2480036E5280036B7CA6 +:105D200080036D1880036FC080036F32E2C80001EA +:105D30005801E0051740E2091740E1D1E515F9B92E +:105D400005001032E5D8E418F1D2E518E5D8E502EF +:105D5000FBFC5011F9D8E50CFBFC5A11F9B8050011 +:105D6000404B120B5008504B1200301B0E9CF01F82 +:105D7000010840081894404A58055F99580A5F9AEC +:105D8000F5E90009C080404CF8050D49121C1210BD +:105D9000504C12155802E08A002740DB580BC1D046 +:105DA0005808E08A0017109A5008089B0E9CF01FB4 +:105DB00000F9069A189B18940E9CF01F00F718998A +:105DC000069B50190E9CF01F00F5401940081293D5 +:105DD000E408010AC080C028049A069B0E9CF01FAC +:105DE00000ED1893301B0E9CF01F00E9411A189229 +:105DF000580AE08A0007189B0E9CF01F00E61892D4 +:105E000040C95819E089001440385808C101402998 +:105E1000F1D9C014C0C11298E6187FF0C080404C80 +:105E2000301B2FFC2FF0504C506BC038300A506A9A +:105E300041195809C031301CC09864482FC8E40883 +:105E4000032CF01F00D7F80C1120404BF80B000872 +:105E5000F1D8C005C0C0F00811205848E08A0006FB +:105E60002048100B504BC0785848C070404A2E480C +:105E7000100A504A100010055800E08A0008069BDE +:105E8000009A0E9CF01F00C7189340495809E08AF9 +:105E90000008049B129A0E9CF01F00C21892414801 +:105EA0005808C1B0049B069CF01F00BFC164069B4C +:105EB000300930AA0E9CF01F00BD2016189340DC5C +:105EC000580CC0314091C098089B4091300930AACD +:105ED0000E9CF01F00B6189458015FA940CB582BB8 +:105EE0005F98F3E80008C2505801C111049B029961 +:105EF000305A0E9CF01F00AD1892189B069CF01FA4 +:105F000000AAE089000FC0383002049440EA30094A +:105F10005CDA4085506A5049C0F9089240660494A2 +:105F20002FF65066331840850AC830085048C049DB +:105F300040DC580CE08000B55805E08A0008089B5A +:105F40000A9A0E9CF01F00971894406B580BC031B2 +:105F5000089CC138681B0E9CF01F0095684A189574 +:105F6000E8CBFFF42FEA2F4CA36AF01F00920A9BA4 +:105F7000301A0E9CF01F008B5044403A3019F5DA6D +:105F8000C001189450DA40855099502650E1049B86 +:105F9000069CF01F0089404BF8C0FFD0069CF01F04 +:105FA0000082089A506C049B0E9CF01F008418918C +:105FB00078385808C0303016C068189B069CF01F0F +:105FC000007A18960E9C029BF01F007440CCEDECFA +:105FD0001008C0D140DB580BC0A14026E04000397A +:105FE000C300406A580AE0890024C2F84069580991 +:105FF000C085129840CC1848C1D140DB580BC1A1D4 +:106000000C9940265809E08A0021069B301A0E9C04 +:10601000F01F0064049B1893F01F0063E0890006E2 +:10602000C141EDB00000C111E0400039C0A02FF027 +:10603000C0C85806E08A000C4026E0400039C04144 +:1060400033980AC8C6782FF00AC0C7580AC0409AC9 +:1060500040E9123AC430069B300930AA0E9CF01F6A +:106060000053404818930838C091109B300930AA5B +:106070000E9CF01F004E504CC0E8404B300930AA37 +:106080000E9CF01F004A089B504C300930AA0E9C11 +:10609000F01F00461894409C2FFC509CC79B301862 +:1060A0000690408508930C941096049B009CF01F6A +:1060B00000422D0C0ACC0236C0A4009B300930AA45 +:1060C0000E9C2FF6F01F00391890CF0B0896300B5E +:1060D0000694504B00931890C0284026069B301A17 +:1060E0000E9CF01F0030049B1893F01F002FE089D6 +:1060F0000012C1B1E1D0C001C0D1C17840891238CD +:10610000C0301095C0882FF650663318408CB88880 +:10611000C138339A0A981179F4091800CF002FF981 +:10612000B089C0981095C02833090A98117AF20AEC +:106130001800CF905066049B0E9CF01F0018580466 +:10614000C120404B083B5F19580B5F18F3E800086B +:10615000C0400E9CF01F0011089B0E9CF01F000F0A +:10616000C02850660E9C069BF01F000C3008AA88C1 +:106170004068415A2FF841299508408C5809FBF88E +:106180001012F1F51A002E6DD8320000800368005D +:10619000800368A0800366F88003642080036300A6 +:1061A00080036664800363EE80036818800364588C +:1061B0008002E736800354088003658C5EFC5EFC39 +:1061C000D42118961697580BC0311695C508F01FA4 +:1061D00000295806C0706C685808C0410C9CF01F1C +:1061E00000264A681037C0316C07C0A84A481037EB +:1061F000C0316C17C0584A381037EDF700028E696D +:106200003008F0091900C051F01F001F3005C2F816 +:106210000E9B0C9CF01F001D6EC818955808C0609E +:106220006E8B0C9C5D18F9B505FF8E68EDB8000704 +:10623000C0516E4B0C9CF01F00166EDB580BC0A0BB +:10624000EEC8FFBC103BC0400C9CF01F0011300892 +:106250008FD86F2B580BC0700C9CF01F000D3008AE +:10626000EF4800483008AE68F01F00070A9CD822AB +:1062700080031E7480031F388003EF2C8003EF4CD3 +:106280008003EF6C80031E7680031D2C8003217C2D +:10629000D4014848189B700CF01F0003D80200007E +:1062A00000000598800361C0D42116981897109CAF +:1062B00030084876149B8D08F01F00065BFCC05127 +:1062C0006C085808EFF81A03D822000000008CC4AC +:1062D0008002F198D42116981897109C3008149BCE +:1062E0004866129A8D08F01F00065BFCC0516C08CE +:1062F0005808EFF81A03D82200008CC48002F1205D +:106300001898E01C0000F0091510580CF20817004E +:10631000F9BC0010F9BC0100109AF0091508E61A42 +:10632000FF00F7BC00F8F2081700109AF0091504F6 +:10633000E61AF000F7BC00FCF2081700109AF0090A +:106340001502E61AC000F7BC00FEF2081700580854 +:106350005E5CEDB8001EF9BC0120F7BC00FF5EFCDE +:1063600018997808F9D8C003C150EDB80000C021D1 +:106370005EFD109BF00A1601E21B0002A388580B79 +:10638000F3FA1A00F9BC0101F3F80A00F9BC0002A3 +:106390005EFCF5D8C010F00B1610580AF60817006E +:1063A000F9BC0010F7D8C008F00A1608580BF7BC63 +:1063B00000F8F4081700F7D8C004F00A1604580BC8 +:1063C000F7BC00FCF4081700F7D8C002F00A160268 +:1063D000580BF7BC00FEF4081700EDB80000C060D1 +:1063E000A198C031320C5EFC2FFC93085EFCD401F6 +:1063F00018987649784C121CC1312FB9A369120B39 +:10640000F00900092EC8134E174A143EC060F9BCAB +:1064100003FFF9BC0201D8021039FE9BFFF6D80237 +:10642000D4211897169578965806C091310CF01F14 +:10643000000A99368F9C9916992699065805C0909E +:106440006A196E987038F009032A8B0AF009092539 +:10645000D82200008002E2A4D421189716967895DD +:106460005805C091310CF01F001999358F9C991572 +:10647000992599056E956A385808C0B1310A304B94 +:106480000E9CF01F00138B3C6E98703C580CC1B0F2 +:106490006E987038F0060028700C580CC0407809CF +:1064A0009109C0E80E9C30170E9BEE060947EECA14 +:1064B000FFFBA36AF01F0006C060991699273008F9 +:1064C00099389948D82200008002E2A48002DC5466 +:1064D000D431202D1693129610951492301BF01F74 +:1064E0000029F3D3C0145009F1D3C01FF0011614D2 +:1064F000FC1A0010F3DAE139FBF91A00189458027B +:10650000C1E0FACCFFF818D2F01F001F4018C0D02D +:106510004009F80A1120F20A094AF5E810088958DA +:10652000F20C0A495009C028895840085808F9B3A4 +:106530000102F9B3000189688943C0981A9CF01FD1 +:106540000012301340082E0C894389585801C0901E +:10655000E2C1043318018D01F80C11358B0CC0D841 +:10656000E6C8FFFCF8CC0432A5738D0CE808032CB8 +:10657000F01F000618138B03089C2FEDD832000083 +:10658000800364588003636080036300D4317448DF +:106590007645169714961015C1312FB8EECEFFEC44 +:1065A000A368F408000BEE080008114A1749123AD4 +:1065B000C030C0E2C0781C38FE9BFFF9C4A8580563 +:1065C000C0640E9830150C971096C02830056E1BCD +:1065D000F01F00246E496C4499352FB4F2C5FFFBBF +:1065E000EC040024EE0500252EC62EC7F8C8FFECEB +:1065F000300A0F0E0D0BFC021610F6031610FDDE0E +:10660000C010E4030103F7DBC010FC0B010BF60A1A +:10661000000AB01AB14AE60A000AB00A2FC8B14A05 +:106620000836CE83C0D80F0BF60E1610F7DBC0105D +:10663000160AB01AB14A1C0AB00A2FC8B14A0A3762 +:10664000CF33C0282019114A580ACFD09949D832DF +:10665000300BF01F00043018994830089958D83290 +:1066600080036458D43116977646F40214052FF649 +:10667000149318940406761B6E28C0382FFBA1785B +:106680001036FE99FFFD089CF01F001A300918957E +:10669000F8C8FFEC129AC03810AA2FF90439CFD5E8 +:1066A0006E4BE7D3C0052FBBEEC9FFECEE0B002B02 +:1066B0005803C130E60C1120300A7202E40309428B +:1066C000044A10AA130AF40C0A4A1639CF73910A25 +:1066D000580AC0702FF6C058130A10AA1639CFD323 +:1066E000089C20160E9B8B46F01F00030A9CD83294 +:1066F0008003645880036420D431202D7649744887 +:10670000169614951039EC081750EA061750F00544 +:1067100017506C2876437442761BE4030007103749 +:10672000F7BB09FFF01F0036EEC4FFFBF8C9FFEC12 +:10673000F8040024300A1298C02810AA0838CFE3C1 +:106740002FB32FB2EC030023EA020022ECCBFFECC4 +:106750005012EACAFFECC44894955805C20012983A +:106760001696300E50090D02E400161070017009E3 +:10677000B181E5D2C010E0050341AB32E1D9C010D0 +:106780000002E40E000EB01EB18E1C01B001E20E3C +:1067900016102FC80636CE834009910E94865806EF +:1067A000C1D072021298169E3005B0121D0190825F +:1067B000E1D1C010AD30E0020002E4050005B005F3 +:1067C000B185B1812FC8AD319092E20200020A0278 +:1067D000E4051610063ECEA391022FCA2FC9401819 +:1067E000103ACBB3C02820175807E08A00050948A3 +:1067F0005808CFA099472FEDD83200008003645885 +:10680000D4211697301BF01F00043019995799496D +:10681000D822000080036458D431300812951697AE +:1068200018967644F6C9FFEC720BF60C1610F7DBDF +:10683000C010F40C024CF40B0345F7D5C010B18521 +:106840001805EA0C1510F80B000B12AB2FF8B185E8 +:106850000838CEB55805C1D06E281034C1456E1B1E +:106860000C9C2FFBF01F000C6E4AEECBFFF418932C +:106870002FEA2F4CA36AF01F00090E9B0C9CF01FFF +:1068800000080697E8C8FFFF2FB48F48EE040925DB +:106890000E9CD832800364588002E736800364205F +:1068A000D431149618971694F1DAC002C0902018CB +:1068B0004A19F208032A3009F01F00201894A34651 +:1068C000C3706E955805C091310CF01F001D9935AD +:1068D0008F9C9915992599056E9366255805C0D109 +:1068E000E06B02710E9CF01F0017872C3008189582 +:1068F0009908C038069C1895EDB60000C0C1089BE9 +:106900000A9A0E9CF01F0010089B18930E9C069488 +:10691000F01F000EA156C0C06A035803CEC10A9AE8 +:106920000A9B0E9CF01F00088B0C9903CE5B089C01 +:10693000D83200008003F380800368188002E2A44C +:1069400080036800800366F880036420D4211698D1 +:106950001897109C3008149B4866129A8D08F01FF7 +:1069600000065BFCC0516C085808EFF81A03D822E7 +:1069700000008CC48002F1381498FC197FF0F5DB1C +:10698000C01FF00B1100F7E81008F5E813F8F20843 +:106990000108F00C1100F9E81008F00C141F2FFC8E +:1069A0005EFCD703F5EB101CE08000DCD421F7E996 +:1069B000200EEFDBC28B3015C430AB6BF7EA136BE4 +:1069C000AB6AF7D5D3C2EDD9C28BC5C0A1785CF94B +:1069D000F3D5D2ABE04707FFC770E04607FFC740DB +:1069E000EE06000CE02C03FEF6080644F40907440A +:1069F000F4080646F609064A0807F405004A5C0B47 +:106A0000EDBB0014C050A1775CFA5CFB201C580C55 +:106A1000E08A006FE04C07FFE084009CF7DCD28B3B +:106A2000EDEA11F6EFE61217EE178000F1B7042039 +:106A30000E0A5C0BEDBE001FEFBB001FD822E41B4B +:106A4000000FF40C1200F6061200F7BC03E1F80682 +:106A50001730F7B60201E0460020C0D4EC0C11203C +:106A6000F606094BF40C0A4C184BF406094A20B6FA +:106A70000C17CAABF406094BC640300A20B60C17F7 +:106A8000CA3BE419000FF00C1200F2051200F7BC2B +:106A900003EAF8051730F7B5020AE0450020C0D434 +:106AA000EA0C1120F2050949F00C0A4C1849F005CE +:106AB000094820250A16C8FBF0050949C4203008FA +:106AC00020250A16C88BE419000FE41B000F144B95 +:106AD0001049E04707FFC091580BC381E04607FF0C +:106AE000C3815809C360C3285809C330C2F85C3C4D +:106AF0002FFCF1BC04C0E04C0020C114F8081120A8 +:106B00000E46EE0C0A47F40809491247F40C0A4AEB +:106B1000F6080949124AF60C0A4BC83BF80811203E +:106B2000F9B90000C030F60809490E46EDEA101622 +:106B3000F40C0A4AF3EA1007F60C0A4A300BC71B9A +:106B40001C9BE61B8000300AD8223FFB3FFAD8226C +:106B5000F06B0000EDBE001FEFBB001F300AD82213 +:106B6000F7E9200BE61B8000F9D9C28BE04C07FF48 +:106B70005E1C3FFA3FFB5EFCEE198000F7E9200C3B +:106B8000E08600CAEBCD40E0169CE61C8000BFDB2F +:106B9000BFD9103AF20B1300C0921697129B0E99B0 +:106BA0001497109A0E98EE1C8000F6071614AB7B13 +:106BB000F7EA135BAB7ABFBBF2061614C440AB799D +:106BC000F3E81359AB78BFB9E04707FFC4F00E26CE +:106BD000C120EC051120E0460020C7C2F005094E97 +:106BE000F2050945F0060A48F2060A490A48580E15 +:106BF0005F1E1C48101AF609014BF6061200C0E091 +:106C0000C783EC0E1120F606094BF40E0A4E1C4BFE +:106C1000F406094A0C17E08A0039F4091515AB9AF5 +:106C2000F5EB115AAB9BF7D7D28B184BFC178000B2 +:106C3000EDBA0000F7B701FF0E395F29120A5C0BAD +:106C4000E3CD80E0AB79F3E81359AB78F3E8100EAD +:106C5000F9B60101EE0E1100F9B70001EFBB001FFC +:106C6000F7EA100EF9B70000CB0BBFDBF7EA100E06 +:106C7000C081E04607FFC050F9E7114BE3CD80E04B +:106C80003FFA3FFBE3CD80E05C372FF7F1B704C05C +:106C9000E0470020C114EE081120F40809495F16EE +:106CA000F4070A4A0C4AF6080949F5E9100AF407FC +:106CB0000A4B3007CB3BEE081140F608094914494E +:106CC0005F16F6070A4A0C4A300B3007CA7BE3CD41 +:106CD00080E0F1B604C0F00E1700C040F205094E86 +:106CE000104EF2060A483009580E5F1E1C48C83B79 +:106CF000F4061200F9B70300F9B60300F9BC03006B +:106D0000F7B602E0F406094B300A0C17FE9AFFBEF4 +:106D1000C85B0000EE198000F7E9200CFE96FF2EFC +:106D2000EBCD40E0169CE61C8000BFDBBFD9123BD8 +:106D3000C0721697129B0E991497109A0E98300EE7 +:106D4000EFDBC28BF7DBC014B5ABEDD9C28BC5F05E +:106D5000F3D9C014B5A9E04707FFC2500E26C0F012 +:106D6000EC051120E0460020C352F005094EF20563 +:106D70000945F0060A48F2060A490A48100AF609C7 +:106D8000004BEDBB0015C340F7D7D28B184BF9DA97 +:106D9000C001184EEE1E8000F1BE04201C0A5C0BE0 +:106DA000E3CD80E0B5CBF7EA100EC101E04607FF66 +:106DB000C030E3CD80E0B5C9F3E8100EC071300AF1 +:106DC000FC1B7FF0184BE3CD80E03FFA3FFBE3CDA7 +:106DD00080E0F1B604C0F00E1700C060F205094E65 +:106DE00058085F18104EF2060A483009CC8BFDEEA9 +:106DF000101EA19B5D0A5D0E2FF7E04707FFF9BA51 +:106E00000000F9BB0000F9BE0000CBFB30165807AC +:106E1000CA31B5CB100AF609004B184BE3CD80E020 +:106E2000580B5E6DF60C1501B59CE02C03FF5E3D22 +:106E3000F80C111F1699AB7BBFBBF7EA135BF60C7E +:106E40000A4BA1795E2B5C3B5EFBF8CB0000300C5B +:106E5000C038189B5C4B300A5E0BD401E069041EFD +:106E6000F6081200C170C0C3F00E1120F608094BDD +:106E7000F40E0A4E1C4BF408094A1019C0B8F40865 +:106E80001200F9B80300F7B802E0F408094B300A21 +:106E900010195809E08900305C392FF9E0490036B3 +:106EA000C043300B300AC2682F69F2081120E04954 +:106EB0000020C0B2F408094EF6080948F4090A4A4D +:106EC000F6090A4B104BC088F608094E144E169A64 +:106ED000300BF4090A4AEDBA0000C0921C7EC04192 +:106EE000EDBA0001C0422FFAF7BB02FF5CFC5D0B5C +:106EF0005D0AD802E06803FFEDBA000BF7B800FFA7 +:106F0000100A5C0BF7B903FEE04907FFC055300AD1 +:106F1000FC1BFFE0C0C8EDBB001FF7B90101AB9A35 +:106F2000F5EB115AA17BAB9BF7E9115BA17C5D0BE3 +:106F3000D802103AF20B1300C080A17BA179144B48 +:106F4000124B104B5E0F5EFDA17BFC1CFFE0580A4C +:106F5000F80B13005E8F5EFD1ADE1AD7A17B5F3C33 +:106F6000A1795F375CFCFC1EFFE0580AFC0B1300A4 +:106F7000E08B001D5808FC091300E08B0018580B2B +:106F8000F5BA0000C1501B071B0E583CC0A0581C8E +:106F9000C0335E0F5E1D103AF20B13005E2F5E3D94 +:106FA0001438F60913005E2F5E3D1B07D80A5817E8 +:106FB0005F0C5809F5B800001B071B0E5E0F5EFC46 +:106FC0001ADE1AD7A17B5F3CA1795F375CFCFC1EFF +:106FD000FFE0580AFC0B1300E08B001D5808FC0969 +:106FE0001300E08B0018580BF5BA0000C1501B07C6 +:106FF0001B0E583CC0A0581CC0335E0D5E1F103ADB +:10700000F20B13005E2D5E3F1438F60913005E2D5F +:107010005E3F1B07D80A58175F1C5809F5B80000D7 +:107020001B071B0E5E0D5EFCEBCD40FFF7E9200E4B +:10703000F6071614A97BF7EA137BA97ABDBBE41BFC +:107040003FFFABD7E08000CCE04707FFE08400B50E +:10705000F2061614A979F3E81379A978BDB9E419F1 +:107060003FFFABD6E08000E2E04607FFE08400B2DD +:107070000C17FE37FC01FC1C8000F8031601E9D94F +:10708000C3625CD4E7D4D382E6090644F80501253F +:10709000E6050644EA031502E6090644F80501255B +:1070A000E6050644EA031502E6090644F80501254B +:1070B000E6050644EA031502E6080640E40907402F +:1070C000E609064402045C05A365EBE413E5A3644A +:1070D0005C34F8050145E6040640E4050740E60592 +:1070E000064402045C05EA031502E7E413E3E80240 +:1070F0001502E6080640E4090740E60906440204D2 +:107100005C05A365EBE413E5A3645C34F805014575 +:10711000E6040640E4050740E605064402045C0573 +:10712000EA031502E7E413E3E8021502E60A064063 +:10713000E40B0740E60B064202025C03EDB3001CC1 +:10714000C090A1725CF32017A39AF5EB11DAA39B10 +:10715000C058A58AF5EB11CAA58B5807E08A008BA9 +:10716000E012FF00E8120080E6080640E40907404C +:10717000E4080644E60906480005F00100485C09F9 +:10718000F9D2C10158045C25F4081300F609130074 +:107190005F36F8061700E40A1608F5E3118AE60BD5 +:1071A0001608F7D7D28BEDBE001FEFBB001F0C0AED +:1071B0005C0BE3CD80FFE41B000F144BE08100A7C4 +:1071C000F2061614ABD6E04607FFE08100A4C9E83A +:1071D000E419000F1049E081009AC928A37BF7EA5F +:1071E00013DBA37AF5EB1004E08000A0F604120094 +:1071F000C170C0C3E8051120F604094BF4050A4527 +:107200000A4BF404094A0817C0B8F4041200F9B490 +:107210000300F7B402E0F404094B300A0817A38A0C +:10722000F5EB11EAA38BC11BA379F3E813D9A3787B +:10723000F3E81004C6F0F2041200C170C0C3E80500 +:107240001120F2040949F0050A450A49F0040948E9 +:107250000816C0B8F0041200F9B40300F7B402E055 +:10726000F004094930080816A388F1E911E8A38958 +:10727000CFCA5C372FF7F1B704C0E0470020C154F4 +:10728000EE061120E4070A42E606094C1842E6071A +:107290000A43F4060941F4070A4AF606094C184A5B +:1072A000F6070A4B3000C158EE061120F9B0000075 +:1072B000F9BC0000C050F4060940F606094CE60788 +:1072C0000A423003F4070A411841F6070A4A300B14 +:1072D000E012FF00E8120080E6080646E4090746CF +:1072E000E4080644E60906480C05F00700485C0976 +:1072F0003007F9D2C1010034E2051300C46B1C9BB6 +:10730000E61B8000300AE3CD80FF3FFB300AE3CD6F +:1073100080FFF5EB1004C0901C9BE61B8000EA1B6D +:107320007FF0300AE3CD80FFF1E91015CEF0E9D906 +:10733000C28BE04407FFCE41F1E910C5CE10CE6B01 +:10734000D4311A97202D109C1295149E16931696E0 +:107350005809C4411638E088005AF0081200C0D01D +:10736000F6080946F808094CF00B1120F408094EFC +:10737000F40B0A4BF7E61006F80A1610EBDCC01007 +:10738000EC0A0D02FC091610EA02024BF3E31109A4 +:10739000123BE08800091809123CE08B0005123B03 +:1073A000F3DCEB09F20B010BFDDEC010F60A0D0A4F +:1073B000FDEB110EEA0A024A1C3AE0880009180E99 +:1073C0001C3CE08B00051C3AFDDCEB0EFC0A010ABC +:1073D000300BF4080A4A2FEDD8321639FE9BFFFD18 +:1073E000F2091200C46114385F8B06355F3AF7EA80 +:1073F000100AF20A1800C060FC08010AE6050146FE +:10740000149E0C9B1C9A2FEDD8325808C05130198D +:10741000F2080D08109CF8081200E0810084EC0CC2 +:10742000010BF8031610EBDCC010F6030D0AFC0983 +:107430001610EA0A024AF3EB1109123AE088000931 +:107440001809123CE08B0005123AF3DCEB09141921 +:10745000FDDEC010F2030D02FDE3110EEA02024A46 +:107460001C3AFE98FFB5180E1C3CFE9BFFB1CACB20 +:10747000F20E1120EA090945F609094BE60E0A4306 +:10748000F0090941F4090942F00E0A48F40E0A4ACB +:107490000A48164AF0061610F9D8C010E6060D0480 +:1074A000F4031610089BE7E51103E80C02450635C6 +:1074B000E0880007201B10030638E0880072F5DA28 +:1074C000C0100A13E6060D04F5E51106E80C024C9F +:1074D000089A0C3CE0880007201A10060C38E08857 +:1074E000005AF5EB110B1816F601064A149C1636D5 +:1074F000C0735F0514325F3AEBEA000AC060F8011E +:107500000104F608014B089CE40C010AEC0B01464F +:10751000EC090A4BF4090A4AEC0E09460C4A2FED15 +:10752000D832F0011120F4010A4BF808094CEC089C +:107530000949EC010A41F7E91009F8031610EBDCE0 +:10754000C010E2030D00F20B1610EA00024EF7E144 +:10755000110B163EE0880006180B163CE088002749 +:10756000F60E0101F3D9C010E2030D00F3E1110999 +:10757000EA00024B123BE08800091809123CE08B3C +:107580000005123BF3DCEB09F20B010BF408094E8A +:10759000C4DB0C3CF7BA0B01EDD8EB06CA3B063551 +:1075A000F7BB0B01E7D8EB03C8BB163EF7DCEB0BD0 +:0275B000CD8B81 +:10760000C0080000C0080000C0080000C00800005A +:10761000C0080000C0080000C0080000C00800004A +:10762000C0080000C0080000C0080000C00800003A +:10763000C0080000C0080000C0080000C00800002A +:10764000C0080000C00800000000000000000000AA +:10765000C008000000000000000000000000000062 +:10766000C008000000000000000000000000000052 +:10767000C008000000000000000000000000000042 +:1076800000000000000000000000000000000000FA +:1076900000000000000000000000000000000000EA +:1076A00000000000000000000000000000000000DA +:1076B00000000000000000000000000000000000CA +:1076C00000000000000000000000000000000000BA +:1076D00000000000000000000000000000000000AA +:1076E000000000000000000000000000000000009A +:1076F000000000000000000000000000000000008A +:10770000C0080000300CF01F0012580CF80F1710C2 +:10771000D603301CF01F000E580CF80F1710D603BC +:10772000302CF01F000B580CF80F1710D603303C0C +:10773000F01F0007580CF80F1710D60300000104C3 +:107740004000011280000120C000012E8000A41C16 +:107750000000000000000000000000000000000029 +:107760000000000000000000000000000000000019 +:107770000000000000000000000000000000000009 +:1077800000000000000000000000000000000000F9 +:1077900000000000000000000000000000000000E9 +:1077A00000000000000000000000000000000000D9 +:1077B00000000000000000000000000000000000C9 +:1077C00000000000000000000000000000000000B9 +:1077D00000000000000000000000000000000000A9 +:1077E0000000000000000000000000000000000099 +:1077F0000000000000000000000000000000000089 +:1078000073656E645265706C790000006765745F23 +:10781000646174615F7463705F636D645F63620071 +:107820006765745F7265706C795F686F73745F62AF +:10783000795F6E616D655F63620000006765745F0C +:107840007265706C795F7363616E5F6E6574776F7C +:10785000726B735F636200006765745F7265706C62 +:10786000795F6964785F6E65745F63620000000031 +:107870007365745F706173737068726173655F6361 +:107880006D645F63620000007365745F6B65795FB0 +:10789000636D645F6362000063616C6C5F7265704E +:1078A0006C795F6362000000617661696C5F64619E +:1078B00074615F7463705F636D645F636200000096 +:1078C0007365744D6170536F636B4D6F6465000039 +:1078D0006765745374617274436D6453657100001D +:1078E0007365745F6E65745F636D645F63620000EF +:1078F0007365745F69705F636F6E6669675F636D00 +:10790000645F63620000000073656E644572726FAD +:107910007200000073746172745F736572766572D1 +:107920005F7463705F636D645F6362007370695F4F +:10793000736C61766552656365697665496E74003E +:107940006765745F636C69656E745F737461746599 +:107950005F7463705F636D645F63620073656E6420 +:107960005F646174615F7564705F636D645F6362BF +:1079700000000000636865636B4D7367466F726D4E +:107980006174000073746172745F7363616E5F6E23 +:1079900065745F636D645F6362000000666F756E9F +:1079A00064486F737442794E616D65007365745FEE +:1079B0006B65795F636D645F63620000696E697413 +:1079C0005370690073746172745F636C69656E747F +:1079D0005F746370000000007370695F706F6C6C9F +:1079E000000000006765745F726573756C745F6397 +:1079F0006D645F636200000073746F705F636C6935 +:107A0000656E745F7463705F636D645F63620000D2 +:107A100073746172745F7365727665725F7463709C +:107A2000000000007365745F706173737068726149 +:107A300073655F636D645F63620000007365745F0C +:107A4000726573756C745F636D6400007365745F59 +:107A5000646E735F636F6E6669675F636D645F63B7 +:107A6000620000006765745F73746174655F7463BE +:107A7000705F636D645F6362000000007265715F38 +:107A80007265706C795F686F73745F62795F6E6145 +:107A90006D655F636200000073746172745F636C94 +:107AA00069656E745F7463705F636D645F636200C9 +:107AB000572D5B25735D2057726F6E67207465725A +:107AC0006D696E6174696F6E20696E6465783A25C0 +:107AD00064206E506172616D3A2564206964783A61 +:107AE00025642031366269743A25640A000000007A +:107AF0003078257820000000572D5B25735D2049E4 +:107B00006E646578206F7574206F662072616E6791 +:107B1000653A2025640A00005B25735D20535349B4 +:107B2000443A25730A0000005B25735D20525353CD +:107B3000493A25640A0000005B25735D20454E43E9 +:107B4000543A25640A0000005B25735D205365618B +:107B5000726368696E6720666F7220486F73743A4B +:107B60002069703D3078257820666F756E643D25FC +:107B7000640A00005B25735D20666F756E64486F54 +:107B8000737442794E616D653A20466F756E64205C +:107B9000486F73743A206E616D653D25732069707E +:107BA0003D307825780A00005B25735D20696653B7 +:107BB00074617475733A256420726573756C743AD8 +:107BC00025640A004C69737420436F6D6D616E64A7 +:107BD000732066756C6C210A000000005245434515 +:107BE000495645005452414E534D4954000000003F +:107BF0005B25735D204D6170205B25642C20257012 +:107C00002C2025735D0A00005B25735D20535049CD +:107C100020696E697469616C697A6174696F6E203C +:107C20006661696C65642100572D5B25735D204595 +:107C300072726F7220636F6E6669677572696E67C4 +:107C4000205350490A000000572D5B25735D202505 +:107C5000645D20446973616C6C2E2025642F25645B +:107C600020636D643A25640A00000000572D5B25EF +:107C7000735D2025645D20446973616C6C2E202542 +:107C8000640A00005B25735D3A200000572D5B25D8 +:107C9000735D2025645D204E6F7420666F756E6481 +:107CA00020656E6420636D643A20307825780A0080 +:107CB0005B25735D2025732025640A00572D5B2505 +:107CC000735D20456E64206F6620636D6420706173 +:107CD00072616D73000000005B25735D2064617448 +:107CE00061417661696C3A25640A0000572D5B2575 +:107CF000735D2054544350206E6F7420666F756E10 +:107D00006420666F7220736F636B3A25640A00000B +:107D10005B25735D20736F636B3A25642073746118 +:107D200074653A25640A00005B25735D20737461F5 +:107D300074653A25640A00005B25735D2053746105 +:107D40007274204E6574776F726B205363616E207E +:107D500025640A00572D5B25735D206572723D25F1 +:107D6000640A00005B25735D204C6F6F6B696E6762 +:107D700020666F7220486F73743A206E616D653DA6 +:107D800025730A005B25735D20466F756E6420487D +:107D90006F73743A206E616D653D25732069703D87 +:107DA000307825780A0000005B25735D2053746FDE +:107DB0007020636C69656E7420736F636B3A256421 +:107DC0000A00000055445000544350005B25735D89 +:107DD00020416464723A307825782C20706F727478 +:107DE0003A25642C20736F636B3A25642C207072E3 +:107DF0006F743A25730A0000572D5B25735D205080 +:107E0000726576696F757320636C69656E74202581 +:107E100070206E6F742073746F7070656420210A17 +:107E2000000000005B25735D205374617274204371 +:107E30006C69656E74202573202570205B30782571 +:107E4000782C2025642C2025645D204F4B210A00CE +:107E50005B25735D20537461727420436C69656E99 +:107E600074202573202570205B307825782C202500 +:107E7000642C2025645D204641494C4544210A007C +:107E8000572D5B25735D205374696C6C20636F6E96 +:107E90006E65637465642E2E2E776169740A000026 +:107EA000572D5B25735D20494620646F776E2E2E1B +:107EB0002E776169740A00005B25735D205374613D +:107EC000727420536572766572202573205B256479 +:107ED0002C2025645D204F4B210A0000572D5B2587 +:107EE000735D2053746172742053657276657220DD +:107EF0002573205B25642C2025645D204641494C78 +:107F00004544210A000000005B25735D2025702098 +:107F10006E756D506172616D3D2564207061726D8A +:107F200073546F4368616E67653D25640A00000005 +:107F30005B25735D2025645D206E69663A2570209F +:107F40006C7769705F616464723D307825780A00EF +:107F50005B25735D20257320706172616D733D2513 +:107F6000640A00005B25735D20506173733A20251D +:107F7000732025640A000000572D5B25735D2025C2 +:107F800073203A204661696C656420746F206164D7 +:107F90006420706173737068726173650A00000019 +:107FA000436F6E6E65637420746F206E6574776FB7 +:107FB000726B2E2E2E0000006572723D25640A0041 +:107FC0004F4B0A00572D5B25735D205353494420C6 +:107FD0006C656E206F7574206F662072616E6765C8 +:107FE000000000005B25735D2025730A000000007F +:107FF000572D5B25735D2053656E642053504920D7 +:108000006572726F72210A003D3D3E003C3D3D00AD +:10801000572D5B25735D20556E6B6E6F776E2063F9 +:108020006D6420307825780A00000000572D5B250C +:10803000735D2025645D20436865636B20666F7205 +:108040006D6174206D7367206661696C6564210AD7 +:1080500000000000444F574E000000005550000043 +:1080600049462020207374617475733A2025730A81 +:1080700000000000434F4E4E207374617475733AD4 +:108080002025730A00000000536F636B6574206E37 +:108090002E3A256428256429205B307825785D20D8 +:1080A000257320257320616464723A257320706FF4 +:1080B00072743A25640A00005B2564207470637052 +:1080C0002D25705D2D5374617475733A25640A0013 +:1080D0005B746C63702D25705D2D537461747573C2 +:1080E0003A25640A000000005B757063702D2570EE +:1080F0005D20666C6167733A3078257820206C6F5C +:1081000063616C3A25735B307825785D2D25640AB0 +:108110000000000072656D6F74653A257328307831 +:108120002578292D25640A004E4F0000594553003B +:108130004461746120617661696C3A25730A0000BC +:108140002D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D5F +:108150002D2D2D2D2D2D2D2D2D2D2D2D2D2D0A009F +:108160005B25735D205363616E206E6F7420636FB7 +:108170006D706C65746564210A0000005B25735D99 +:10818000204E6574776F726B73206E6F7420666F0C +:10819000756E64210A000000636F756C64206E6F59 +:1081A0007420616C6C6F6361746520616C6C206716 +:1081B0007569206E65742061727261790A00000031 +:1081C000636F756C64206E6F7420616C6C6F63619B +:1081D000746520616C6C20677569206E6574730A24 +:1081E000000000005B25735D202564202D20257391 +:1081F000205B25645D2D202564202D202564202D05 +:1082000020307825780A000D000B000C000A0000D1 +:108210007365745F726573756C745F636D64000081 +:108220008000636C800063988000637E80006398A8 +:108230008000638E80006398800063648000639890 +:10824000800063688000638A800063786174637073 +:108250005F706F6C6C5F636F6E6E00007564705F53 +:10826000737461727400000072656D6F76654E659F +:1082700077436C69656E74436F6E6E0061756470F0 +:108280005F726563765F6362000000006765745328 +:1082900074617465546370006172645F7463705FCD +:1082A00073746F7000000000617463705F636F6EC1 +:1082B0006E5F6572725F6362000000006765744EF6 +:1082C0006577436C69656E74436F6E6E4964000038 +:1082D000617463705F636F6E6E5F636C695F65721C +:1082E000725F636200000000617463705F616363CA +:1082F0006570745F636200007564705F73746172AF +:10830000740000005B25735D20747463703A2570FF +:108310002069643D25642C20747063623D25700AD9 +:1083200000000000572D5B25735D204E6F205661C5 +:108330006C696420636C69656E7420666F7220746A +:108340007463703A25700A005B25735D2025645DB7 +:1083500020747463703A257020747063623A2570DB +:108360002073746174653A2564206C7063623A25E9 +:10837000702073746174653A2564206C6566743A84 +:1083800025642073656E743A25640A00572D5B25B9 +:10839000735D20544350206E6F7420696E69746958 +:1083A000616C697A656420747463703A2570207416 +:1083B0007063623A2570206C7063623A25700A001F +:1083C000572D5B25735D204E6F2056616C696420CC +:1083D000496420666F7220747463703A257020704F +:1083E00063623A25700A00005B25735D2062756642 +:1083F0003A2570206C656E3A25640A00572D5B257E +:10840000735D2054544350205B25705D3A20636FA8 +:10841000756C64206E6F7420616C6C6F6361746541 +:1084200020706275660A0000572D5B25735D20542D +:10843000544350205B25705D3A207564705F73650E +:108440006E642829206661696C65640A000000007A +:108450005B25735D2054544350205B25702D25709F +:108460005D3A20636F6E6E65637420256420256419 +:108470000A0000005B25735D206C6566743D256411 +:10848000206C656E3A25640A000000005B25735D70 +:10849000207463705F7772697465206661696C65CA +:1084A000642025702073746174653A2564206C65BE +:1084B0006E3A2564206572723A25640A0000000055 +:1084C000572D5B25735D2074746370203D3D204EF5 +:1084D000554C4C210A0000005B25735D20747463C9 +:1084E000703A2570207063623A2570206275663A92 +:1084F0002570206C656E3A25640A00005B25735D6B +:1085000020272573270A00005B25735D20506163D7 +:108510006B65742073656E74207063623A257020F9 +:108520006C656E3A2564206475723A2564206C652A +:1085300066743A25640A00005B25735D2054544339 +:1085400050205B25705D3A20636C65616E536F63EC +:108550006B53746174655F63622025640A000000D8 +:108560005B25735D20436C6F73696E672074706365 +:10857000623A2073746174653A30782578206572A8 +:10858000723A25640A0000005B25735D20436C6F1E +:1085900073696E67206C7063623A207374617465EE +:1085A0003A30782578206572723A25640A00000016 +:1085B0005B25735D2046726565696E672070617921 +:1085C0006C6F61642025642D25700A005B25735D46 +:1085D00020436C6F73696E6720747063625B2570F3 +:1085E0005D3A2073746174653A307825782065723D +:1085F000723A25640A000000572D5B25735D204305 +:10860000616E6E6F7420636C6F73652069643A25C8 +:10861000642D2570207075742070656E64696E67B6 +:108620000A0000005B25735D202D2D2D2D2D2D2D95 +:108630002D2D2D2D2D2D2D2D2D2D2D2D2D2D2D0A8D +:1086400000000000572D5B25735D2074746370205B +:108650003D204E554C4C210A000000005B25735D07 +:1086600020666C75736820646174613A207470636D +:10867000623A2570206572723A25640A0000000093 +:10868000572D5B25735D2054544350205B25705D4E +:108690003A20636F6E6E656374696F6E20657272E7 +:1086A0006F723A202564206375727249643A2564BA +:1086B0000A00000041626F727420636F6E6E656322 +:1086C00074696F6E0A000000572D5B25735D20549E +:1086D000544350205B25705D3A20636F6E6E656376 +:1086E00074696F6E206572726F723A202564206122 +:1086F00072673A25700A0000572D5B25735D205480 +:10870000544350205B25705D3A2066726565206D8C +:10871000656D6F72790A00005B25735D20554450CA +:1087200020496E7365727420257020736F636B3AF5 +:10873000256420616464723A257320706F72743A04 +:1087400025640A00572D5B25735D20545443502047 +:108750005B2D5D3A20696E76616C6964206D6F6493 +:10876000650A0000572D5B25735D2054544350204B +:108770005B2D5D3A20696E76616C6964206E62756E +:10878000660A0000572D5B25735D2054544350202A +:108790005B2D5D3A20696E76616C69642062756656 +:1087A0006C656E0A00000000572D5B25735D205438 +:1087B000544350205B2D5D3A20636F756C64206ECE +:1087C0006F7420616C6C6F63617465206D656D6F93 +:1087D000727920666F7220747463700A0000000062 +:1087E000572D5B25735D2054544350205B25705DED +:1087F0003A20636F756C64206E6F7420616C6C6FCF +:1088000063617465207063620A0000005B25735D1C +:108810002025732C20757063623A25702025733AE9 +:1088200025640A00572D5B25735D20545443502066 +:108830005B25705D3A2075647020636F6E6E6563B2 +:1088400074206661696C65640A000000572D5B2521 +:10885000735D2054544350205B25705D3A2062695B +:108860006E64206661696C6564206572723D256482 +:1088700020506F727420616C726561647920757329 +:1088800065640A005B25735D2025732C206C6F6383 +:108890003A307825782D25642072656D3A30782538 +:1088A000782D25640A0000005B25735D20416C6C07 +:1088B0006F63207061796C6F61642025642D257071 +:1088C0000A000000572D5B25735D2054544350204F +:1088D0005B25705D3A20636F756C64206E6F742049 +:1088E000616C6C6F63617465207061796C6F616439 +:1088F0000A0000005B25735D205B747063625D2D70 +:108900002570207061796C6F61643A25700A0000EF +:10891000572D5B25735D2054544350205B25705DBB +:108920003A2074637020636F6E6E656374206661B5 +:10893000696C65640A0000005B25735D2042454652 +:108940004F52452042494E4420747463703A25705A +:10895000206C7063623A2570207063623A25700A59 +:1089600000000000572D5B25735D205454435020B8 +:108970005B25705D3A206C697374656E2066616971 +:108980006C65640A00000000572D5B25735D205361 +:108990007461727420736572766572204641494C29 +:1089A0004544210A000000005B25735D20545443B8 +:1089B00050205B25702D25705D3A206E6275663DF6 +:1089C00025642C206275666C656E3D25642C2070D4 +:1089D0006F72743D2564202825732F2573290A00A2 +:1089E0007574726C3A6E3A703A7600002573000026 +:1089F0005B25735D2041524420544350205B257019 +:108A00005D3A20616363657074206E6577205B2535 +:108A1000705D0A005B25735D206C6F63616C3A25A5 +:108A2000642072656D6F74653A2564207374617497 +:108A3000653A25640A0000007061796C6F616420FA +:108A40006E6F74206672656564210000572D5B258A +:108A5000735D2041524420544350205B25705D20BB +:108A60006172673D257020726574726965733D257A +:108A7000642061626F72740A000000005B25735D00 +:108A8000206B656570416C697665436E743A256448 +:108A9000206B6565705F69646C653A25642070655C +:108AA00072736973745F636E743A25640A00000020 +:108AB0005B25735D2041524420544350205B257058 +:108AC0002D25705D206172673D257020726574727E +:108AD0006965733D25642070656E642E636C6F73E9 +:108AE000653A2564206C656E3A25640A0000000032 +:108AF0005B25735D2041524420544350205B257018 +:108B00002D25705D2074727920746F20636C6F73F3 +:108B1000652070656E64696E673A256420657272BF +:108B20003A25642069643A25640A00005B25735D78 +:108B30002041524420544350205B25702D25705D08 +:108B4000206172673D257020726574726965733D9E +:108B500025642070656E642E636C6F73653A2564BE +:108B600020636F6E6E3A25640A000000572D5B2566 +:108B7000735D2041524420544350205B25702D25C5 +:108B8000705D206172673D25702072657472696541 +:108B9000733D25640A0000005B25735D204152444B +:108BA00020544350205B25702D25705D2074727910 +:108BB00020746F20636C6F73652070656E64696EDE +:108BC000673A25640A0000005B25735D206C656EC2 +:108BD0003A25640A000000005B25735D20736F6313 +:108BE0006B3A2564207063623A2570207062756666 +:108BF0003A2570206572723A256420627566537456 +:108C00006F72653A2570206C656E3A25640A000023 +:108C10005B25735D20617463705F726563765F636B +:108C20006220703D4E554C4C206F6E20736F636B0D +:108C30003A2564207063623A25700A00572D5B253F +:108C4000735D206572723D256420703D25700A00B9 +:108C50005B25735D205265636569766564202570C8 +:108C6000206C656E3A25640A000000006174637030 +:108C70005F737461727400007463705F73656E6417 +:108C80005F646174615F70636200000061746370AF +:108C90005F706F6C6C000000617463705F7265637D +:108CA000765F6362000000006172645F7463705FEE +:108CB000737461727400000067657446697273743E +:108CC000436C69656E7400006172645F7463705F09 +:108CD00064657374726F7900636C6F73655F636F43 +:108CE0006E6E000073656E6455647044617461005B +:108CF000696E736572744E6577436C69656E744313 +:108D00006F6E6E0061636B5F726563766564000011 +:108D10007463705F636F6E6E6563745F636200009F +:108D200073656E645463704461746100636C6F7347 +:108D3000655F636F6E6E5F7063620000636C656198 +:108D40006E536F636B53746174655F636200000000 +:108D50007463705F646174615F73656E74000000BA +:108D600061636B416E6446726565446174610000C5 +:108D7000676574417661696C5463704461746142E3 +:108D80007974650066726565744461746100000001 +:108D9000676574546370446174614279746500005E +:108DA00063616C634D657267654C656E0000000021 +:108DB000696E73657274427566000000697341766E +:108DC00061696C5463704461746142797465000038 +:108DD00066726565744461746149647800000000DE +:108DE0005B25735D202570205B25642C25645D0A5E +:108DF00000000000686561644275663D256420746A +:108E000061696C4275663D25640A000025645D2039 +:108E10007063623A2570204275663A202570204CB6 +:108E2000656E3A25640A00005B25735D20205B2592 +:108E3000645D3A206C656E3A2564206964783A2551 +:108E40006420746F743A25640A0000005B25735D2A +:108E500020417661696C61626C6564206461746153 +:108E60003A2025640A000000572D5B25735D2069B8 +:108E70006478427566206F7574206F662072616E2B +:108E800067653A2025640A005B25735D2025702004 +:108E90006964783A25640A00572D5B25735D20428A +:108EA0007566203D3D204E554C4C21005B25735D81 +:108EB0002041636B207063623A2570206C656E3AC6 +:108EC000256420736F636B3A256420646174613A92 +:108ED00025700A005B25735D206765743A25642060 +:108EE00025702025640A00005B25735D206368659A +:108EF000636B3A25642025642025700A0000000079 +:108F00005B25735D2046726565202570206F74684F +:108F1000657220627566202564207461696C3A254B +:108F20006420686561643A25640A0000572D5B255A +:108F3000735D204F76657277726974696E6720621F +:108F40007566666572202570206964783A2564210B +:108F50000A000000572D5B25735D20706275665F07 +:108F6000636F70795F7061727469616C20666169AA +:108F70006C65643A207372633A25702C20647374B4 +:108F80003A25702C206C656E3A25640A00000000BA +:108F9000572D5B25735D2041766F696420746F20C7 +:108FA0004F76657277726974652064617461205BC5 +:108FB00025642D25645D210A000000005B25735D9A +:108FC00020496E736572745B25645D3A2025703AA2 +:108FD00025642D2564205B25642C25645D0A000032 +:108FE000572D5B25735D20536F636B206F75742065 +:108FF0006F662072616E67653A20736F636B3D2503 +:1090000064000000696E736572745F70427566007B +:109010006765745F70427566000000000000E10043 +:1090200008040000000000000F01110110011301ED +:109030000E01110110010F0106000500636D645F50 +:109040007365745F69700000636D645F736574704D +:1090500061737300636D645F7374617274436C69F0 +:1090600000000000466F756E6420486F73743A20EC +:109070006E616D653D25732069703D307825780AF5 +:109080000000000075736167653A206474203C310C +:109090007C303E0A0000000075736167653A2073FA +:1090A000656E64556470205B736F636B5D0A097352 +:1090B0006F636B3A20736F636B6574204E756D62DE +:1090C00065720A00536F636B65743A2025640A0069 +:1090D0005061747465726E547970653A2025640A23 +:1090E0000000000050726F766100000031323334AE +:1090F000353637383930000046696E65546573740B +:10910000000000006F6666004465627567204F4688 +:10911000460A00007072696E740000004465627552 +:10912000672009656E61626C65643A203078257845 +:109130000A000000566572626F736520656E616299 +:109140006C65643A20307825780A000044756D70AB +:109150002009656E61626C65643A20307825780A72 +:1091600000000000504F6F6C6C2009656E61626CEE +:1091700065643A20307825780A00000044656275FD +:1091800067204F4E0A00000075736167653A2064DE +:1091900065627567203C73656374696F6E3E203C41 +:1091A0006C6576656C3E0A0973656374696F6E3A27 +:1091B00020696E69742C20636D2C207370692C20DB +:1091C000746370202C207574696C2C207761726E2A +:1091D0000A096C6576656C20203A203020286F667D +:1091E00066292C203120286F6E292C2032202876E9 +:1091F0006572626F7365290A096F723A206465624D +:109200007567207072696E742F6F6E2F6F66660AB5 +:1092100000000000696E697400000000737069004E +:1092200074637000636D00007574696C0000000069 +:109230007761726E00000000616C6C0044756D70A7 +:1092400020416C6C20427566666572730A000000EE +:1092500075736167653A2064756D7050627566203C +:109260005B736F636B5D0A09736F636B3A20736F97 +:10927000636B6574204E756D6265720A00000000B4 +:109280006E6F6E650000000044656C6574696E6702 +:1092900020574550206B6579730A0000757361672C +:1092A000653A207365746B6579203C6B65795F69FD +:1092B00064782028302D33293E203C6B6579206965 +:1092C0006E206865783E0A09206F723A20736574D3 +:1092D0006B6579206E6F6E650A000000205745505F +:1092E000206B6579206D75737420626520313020A4 +:1092F000285745502D343029206F722032362028CF +:109300005745502D31303429206469676974730AD8 +:1093100000000000776C5F61706920766572736988 +:109320006F6E2076322E372E300A00006661696C2F +:10933000656420746F20676574206D6163206164CB +:1093400064726573730A0000687720616464723A1E +:109350002025730A000000006C696E6B2073746135 +:109360007475733A20000000697020616464723A79 +:10937000202573202D2000006E65746D61736B3A9B +:10938000202573202D200000676174657761793A8C +:109390002025730A00000000697020696E746572F0 +:1093A0006661636520697320646F776E0A00000050 +:1093B00064686370203A2000656E61626C65640ABF +:1093C0000000000064697361626C65640A0000005B +:1093D000444E533A202573202D2000007573616799 +:1093E000653A207374617274436C69203C697061E2 +:1093F0006464723E203C706F72743E203C736F63F5 +:109400006B3E203C7463702830292F7564702831BE +:10941000293E0A00537461727420636C69656E742E +:10942000206F6E206164647220307825782C207063 +:109430006F727420256420736F636B202564206D28 +:109440006F64652025640A00572D5B25735D2053EA +:109450007461727420636C69656E74206F6E207025 +:109460006F727420256420736F636B2025642070F5 +:10947000726F74202564206D6F646520256420461A +:1094800041494C45440A000075736167653A207391 +:1094900074617274537276203C706F72743E203C1B +:1094A000736F636B3E203C7463702830292F7564A2 +:1094B000702831293E0A00005374617274202573AC +:1094C00020736572766572206F6E20706F727420E3 +:1094D000256420736F636B2025640A00572D5B257C +:1094E000735D2053746172742025732073657276E6 +:1094F0006572206F6E20706F727420256420736F08 +:10950000636B202564204641494C45440A00000015 +:1095100075736167653A20736574646E73205B319F +:109520002D325D206161612E6262622E6363632E63 +:109530006464640A0000000053657420444E5320A4 +:1095400073657276657220256420746F2025730A16 +:10955000000000003D3D3E20444E53313A2025732B +:109560000A0000003D3D3E20444E53323A20257310 +:109570000A00000075736167653A20676574486F7B +:109580007374203C686F73746E616D653E0A0000F1 +:1095900075736167653A207770617373203C7373EC +:1095A00069643E203C706173737068726173653EDC +:1095B0000A0000002573203A204661696C6564202A +:1095C000746F20616464207061737370687261737A +:1095D000650A000075736167653A20647061737392 +:1095E000203C737369643E0A000000002573203A32 +:1095F000204661696C656420746F2064656C6574D5 +:109600006520706173737068726173650A00000091 +:1096100075736167653A206970636F6E666967206C +:109620003C69703E203C6E65746D61736B3E203CFE +:10963000676174657761792D69703E0A00000000EA +:1096400020206F72203A206970636F6E6669672010 +:109650006E6F6E652028746F20656E61626C652088 +:1096600044484350290A00005B25735D206E6966FB +:109670003A2570206C7769705F616464723D307860 +:1096800025780A0075736167653A20636F6E6E65B1 +:109690006374203C737369643E0A0000636D645F09 +:1096A000737461727453727600000000636D645FBE +:1096B00064656C70617373004D494D4C4644000005 +:1096C0000A24200024200000617661696C61626CCC +:1096D0006520636F6D6D616E64733A0A000000006F +:1096E000202025730A000000636F756C64206E6F84 +:1096F0007420616C6C6F63617465206669726D774C +:10970000617265206275666665720A00547565202F +:109710004D61722032362032323A30393A353420B7 +:109720003230313300000000776C5F696E69745F1E +:10973000636F6D706C6574655F6362006661696C10 +:10974000656420746F20696E697420776C20636F84 +:109750006E6E206D67720000572D5B25735D205380 +:109760007069206E6F7420696E697469616C697AC2 +:1097700065640A006C696E6B20646F776E2C2072D2 +:10978000656C6561736520646863700A00000000A1 +:109790006C696E6B20646F776E0A00006C696E6B8B +:1097A0002075702C20636F6E6E6563746564207421 +:1097B0006F20222573220A007265717565737469C2 +:1097C0006E672064686370202E2E2E20000000003B +:1097D0004641494C45440A00626F756E6420746FBF +:1097E0002025730A00000000572D5B25735D20497A +:1097F0006E74657266616365206E6F74207570218A +:109800000A0000007363616E00000000636F6E6EFB +:10981000656374007365746B6579000073746174BB +:1098200075730000646562756700000064756D7093 +:10983000427566006970636F6E66696700000000BC +:10984000747463700000000077706173730000002F +:109850006470617373000000676574486F7374000F +:10986000736574444E53000073746172745372765E +:10987000000000007374617274436C6900000000A2 +:1098800073656E645564700041726475696E6F2013 +:109890005769666920537461727475702E2E2E207C +:1098A0005B25735D0A0000006F7574206F66206D84 +:1098B000656D6F72790000006661696C6564207483 +:1098C0006F207072657061726520666F72206669C4 +:1098D000726D7761726520646F776E6C6F61640A78 +:1098E00000000000436F756C64206E6F7420646527 +:1098F0007465637420776C206465766963652C20D9 +:1099000061626F7274696E670A000000496E766169 +:109910006C6964206669726D776172652064617438 +:10992000612C2061626F7274696E670A000000002A +:109930004661696C656420746F2073746172742071 +:10994000776C20696E697469616C697A6174696F9A +:109950006E0A0000312E312E3000000069705F73F6 +:1099600074617475735F63620000000002000000A0 +:1099700000B71B000800000100010000286E756C94 +:109980006C290000253032782D253032782D253095 +:1099900032782D253032782D253032782D25303211 +:1099A00078000000256C752E256C752E256C752EA3 +:1099B000256C75007373696420746F6F206C6F6E13 +:1099C0006720286D6178202564290A00257320000E +:1099D00022257322000000002052535349202564A1 +:1099E0002064426D200000002041642D486F6320F8 +:1099F00000000000202857455020656E6372797082 +:109A000074696F6E290000002028544B495020656E +:109A10006E6372797074696F6E2900002028434369 +:109A20004D5020656E6372797074696F6E29000005 +:109A3000202020002530325820000000256300003F +:109A40006E6F206E65747320666F756E640A000019 +:109A5000496E76616C6964206C656E6774680A0093 +:109A600025642E25642E25642E256400544B495010 +:109A70000000000043434D500000000057455000D7 +:109A8000776C5F636D5F696E6974000073656C6508 +:109A900063745F6E65740000776C5F636F6E6E5FFA +:109AA0006C6F73745F636200776C5F7363616E5F8A +:109AB000636F6D706C6574655F636200776C5F6582 +:109AC00076656E745F636200776C5F6D6564696173 +:109AD0005F636F6E6E65637465645F636200000050 +:109AE0005B25735D20434D3A206F7574206F6620AF +:109AF0006D656D6F72790A005B25735D20434D3A89 +:109B000020636F756C64206E6F7420726567697373 +:109B1000746572206576656E742063620A000000C9 +:109B20005B25735D20434D3A20696E697469616CF1 +:109B3000697A65640A0000005B25735D20434D3A35 +:109B400020636F6E6E656374656420746F20257387 +:109B50000A0000005B25735D20434D3A20636F6E61 +:109B60006E656374206661696C65642C2073636143 +:109B70006E6E696E670A00005B25735D20434D3A87 +:109B800020636F756C64206E6F74207374617274DF +:109B9000207363616E20616674657220636F6E6E00 +:109BA000656374206661696C210A00005B25735D42 +:109BB00020434D3A20646973636F6E6E656374650C +:109BC000640A00005B25735D20434D3A20636F6E8D +:109BD0006E656374696F6E206C6F73742C20736391 +:109BE000616E6E696E670A005B25735D20434D3AB6 +:109BF00020636F756C64206E6F742073746172746F +:109C0000207363616E20616674657220636F6E6E8F +:109C1000656374206C6F7374210A00005B25735DAB +:109C200020434D3A207363616E20636F6D706C65E5 +:109C30007465640A00000000FFFFFFFFFFFF0000E3 +:109C40005B25735D20434D3A20526F616D696E67ED +:109C50002066726F6D207273736920256420746FA3 +:109C60002025640A000000005B25735D20434D3A07 +:109C7000204E6F2063616E64696461746520666F55 +:109C8000756E6420666F7220737369642022257379 +:109C9000220A00005B25735D20434D3A206661690E +:109CA0006C656420746F20636F6E6E6563740A0068 +:109CB0005B25735D20434D3A206661696C656420C5 +:109CC000746F207363616E0A000000005B25735D92 +:109CD00020434D3A20756E68616E646C6564206542 +:109CE00076656E740A000000776C5F636F6E6E5F5E +:109CF0006661696C7572655F636200000000000157 +:109D0000000018500000000B00001854000000096B +:109D1000000018800000000F000018A400000001DF +:109D2000000018E000000001000018E4000000013D +:109D300000001810000000010000181400000001CD +:109D400000001818000000010000181C00000001AD +:109D5000000018200000000100001824000000018D +:109D600000001828000000010000182C000000036B +:109D700000001830000000010000183C0000000145 +:109D8000000018400000000100001844000000011D +:109D900000001848000000010000184C4173736572 +:109DA0007274696F6E2022257322206661696C656A +:109DB00064206174206C696E6520256420696E20C2 +:109DC00025730A002E2E2F7372632F534F4654575C +:109DD0004152455F4652414D45574F524B2F5345D7 +:109DE0005256494345532F4C5749502F6C77697051 +:109DF0002D312E332E322F7372632F636F72652FC6 +:109E0000646863702E630000646863705F6F7074D1 +:109E1000696F6E3A20646863702D3E6F7074696F6D +:109E20006E735F6F75745F6C656E202B2032202B14 +:109E3000206F7074696F6E5F6C656E203C3D2044CE +:109E40004843505F4F5054494F4E535F4C454E006E +:109E5000646863705F6F7074696F6E5F6279746558 +:109E60003A20646863702D3E6F7074696F6E735F23 +:109E70006F75745F6C656E203C20444843505F4FA3 +:109E80005054494F4E535F4C454E00006468637018 +:109E90005F6F7074696F6E5F747261696C65723A3E +:109EA000206468637020213D204E554C4C0000001A +:109EB000646863705F6F7074696F6E5F74726169FC +:109EC0006C65723A20646863702D3E6D73675F6FD6 +:109ED000757420213D204E554C4C0A006468637017 +:109EE0005F6F7074696F6E5F747261696C65723AEE +:109EF00020646863702D3E6F7074696F6E735F6F5E +:109F000075745F6C656E203C20444843505F4F5031 +:109F100054494F4E535F4C454E0A000064686370CD +:109F20005F6F7074696F6E5F73686F72743A2064EC +:109F30006863702D3E6F7074696F6E735F6F7574B8 +:109F40005F6C656E202B2032203C3D2044484350FE +:109F50005F4F5054494F4E535F4C454E0000000038 +:109F6000646863705F6F7074696F6E5F6C6F6E674B +:109F70003A20646863702D3E6F7074696F6E735F12 +:109F80006F75745F6C656E202B2034203C3D20443F +:109F90004843505F4F5054494F4E535F4C454E001D +:109FA0007265706C79207761736E277420667265B4 +:109FB00065640000646863705F6372656174655F07 +:109FC000726571756573743A206E657469662021D7 +:109FD0003D204E554C4C0000646863705F637265B1 +:109FE0006174655F726571756573743A2064686346 +:109FF0007020213D204E554C4C0000006468637079 +:10A000005F6372656174655F726571756573743ADB +:10A0100020646863702D3E705F6F7574203D3D2035 +:10A020004E554C4C00000000646863705F637265BD +:10A030006174655F726571756573743A20646863F5 +:10A04000702D3E6D73675F6F7574203D3D204E55DA +:10A050004C4C0000646863705F6372656174655F97 +:10A06000726571756573743A20636865636B2074FB +:10A07000686174206669727374207062756620630B +:10A08000616E20686F6C64207374727563742064F1 +:10A090006863705F6D736700646863705F64656CAC +:10A0A0006574655F726571756573743A206E657469 +:10A0B000696620213D204E554C4C00006468637059 +:10A0C0005F64656C6574655F726571756573743A1C +:10A0D000206468637020213D204E554C4C000000E8 +:10A0E000646863705F64656C6574655F72657175E3 +:10A0F0006573743A20646863702D3E705F6F757489 +:10A1000020213D204E554C4C0000000064686370D7 +:10A110005F64656C6574655F726571756573743ACB +:10A1200020646863702D3E6D73675F6F75742021C6 +:10A130003D204E554C4C00006E6574696620213DF3 +:10A14000204E554C4C0000007062756620705F6FA9 +:10A150007574207761736E2774206672656564007C +:10A16000646863705F62696E643A206E65746966E4 +:10A1700020213D204E554C4C000000006468637067 +:10A180005F62696E643A206468637020213D204EEE +:10A19000554C4C00726574203D3D2073697A656FA3 +:10A1A000662873747275637420646863705F6D737E +:10A1B0006729202D20444843505F4F5054494F4E4B +:10A1C000535F4C454E000000726574203D3D206495 +:10A1D0006863702D3E6F7074696F6E735F696E5F38 +:10A1E0006C656E002E2E2F7372632F534F4654579B +:10A1F0004152455F4652414D45574F524B2F5345B3 +:10A200005256494345532F4C5749502F6C7769702C +:10A210002D312E332E322F7372632F636F72652FA1 +:10A22000646E732E63000000646E73207365727633 +:10A230006572206F7574206F66206172726179009B +:10A24000646E732073657276657220686173206E28 +:10A250006F20495020616464726573732073657464 +:10A260000000000070627566206D75737420626571 +:10A2700020696E206F6E652070696563650000005F +:10A28000617272617920696E646578206F757420DF +:10A290006F6620626F756E6473000000756E6B6E82 +:10A2A0006F776E20646E735F7461626C6520656E9B +:10A2B0007472792073746174653A00006C6F636125 +:10A2C0006C686F73740000003230382E36372E32CF +:10A2D00032322E3232320000000400040004000248 +:10A2E000002000050002001E002000002E2E2F730B +:10A2F00072632F534F4654574152455F4652414D6A +:10A3000045574F524B2F53455256494345532F4CB7 +:10A310005749502F6C7769702D312E332E322F73A1 +:10A3200072632F636F72652F6D656D702E63000011 +:10A330006D656D705F667265653A206D656D207044 +:10A34000726F7065726C7920616C69676E6564000C +:10A350006D656D705F6D616C6C6F633A20747970C0 +:10A3600065203C204D454D505F4D41580000000098 +:10A370006D656D705F6D616C6C6F633A206D656DBE +:10A38000702070726F7065726C7920616C69676E95 +:10A3900065640000001C002000B0002400140020B0 +:10A3A00000080010025400002E2E2F7372632F53EA +:10A3B0004F4654574152455F4652414D45574F52C3 +:10A3C0004B2F53455256494345532F4C5749502F15 +:10A3D0006C7769702D312E332E322F7372632F6399 +:10A3E0006F72652F6E657469662E6300626F6775A4 +:10A3F0007320706275663A206C656E20213D207472 +:10A400006F745F6C656E20627574206E6578742061 +:10A410003D3D204E554C4C210000000073686F7587 +:10A420006C64206E6F74206265206E756C6C207396 +:10A43000696E636520666972737420213D206C61CA +:10A4400073742100696620666972737420213D204F +:10A450004E554C4C2C206C617374206D75737420B8 +:10A46000616C736F20626520213D204E554C4C007D +:10A470002E2E2F7372632F534F4654574152455F10 +:10A480004652414D45574F524B2F53455256494323 +:10A4900045532F4C5749502F6C7769702D312E330F +:10A4A0002E322F7372632F636F72652F7062756621 +:10A4B0002E630000286820213D204E554C4C292059 +:10A4C000262620287420213D204E554C4C2920283A +:10A4D00070726F6772616D6D65722076696F6C6105 +:10A4E000746573204150492900000000702D3E74AE +:10A4F0006F745F6C656E203D3D20702D3E6C656E07 +:10A5000020286F66206C6173742070627566206904 +:10A510006E20636861696E2900000000696E6372D5 +:10A52000656D656E745F6D61676E697475646520D5 +:10A530003C3D20702D3E6C656E0000006261642021 +:10A5400070627566207479706500000070627566CF +:10A550005F74616B653A20696E76616C6964206234 +:10A5600075660000706275665F74616B653A20699C +:10A570006E76616C6964206461746170747200004D +:10A58000706275665F74616B653A20696E76616CA6 +:10A590006964207062756600646964206E6F74205F +:10A5A000636F707920616C6C2064617461000000DD +:10A5B000706275665F636F70795F706172746961F4 +:10A5C0006C3A20696E76616C696420627566000081 +:10A5D000706275665F636F70795F706172746961D4 +:10A5E0006C3A20696E76616C696420646174617094 +:10A5F00074720000706275665F636F70793A2074E0 +:10A600006172676574206E6F742062696720656E81 +:10A610006F75676820746F20686F6C6420736F7546 +:10A6200072636500705F746F20213D204E554C4C65 +:10A63000000000006F66667365745F746F203C3DB8 +:10A6400020705F746F2D3E6C656E00006F666673E0 +:10A6500065745F66726F6D203C3D20705F66726F3F +:10A660006D2D3E6C656E0000706275665F636F7085 +:10A6700079282920646F6573206E6F7420616C6C7B +:10A680006F77207061636B65742071756575657394 +:10A69000210A0000706275665F667265653A207314 +:10A6A000616E6520747970650000000070627566E7 +:10A6B0005F667265653A20702D3E726566203E20A9 +:10A6C00030000000702D3E746F745F6C656E203D2D +:10A6D0003D20702D3E6C656E202B20712D3E746FD9 +:10A6E000745F6C656E000000702D3E746F745F6C5B +:10A6F000656E203D3D20702D3E6C656E00000000B3 +:10A70000706275665F7265616C6C6F633A20702071 +:10A71000213D204E554C4C00706275665F7265613C +:10A720006C6C6F633A2073616E6520702D3E747996 +:10A730007065000067726F77203C206D61785F75EF +:10A7400031365F7400000000706275665F7265618B +:10A750006C6C6F633A207120213D204E554C4C00AB +:10A76000706275665F616C6C6F633A206261642031 +:10A7700070627566206C617965720000636865635C +:10A780006B20702D3E7061796C6F6164202B20709E +:10A790002D3E6C656E20646F6573206E6F74206F44 +:10A7A000766572666C6F77207062756600000000D7 +:10A7B000504255465F504F4F4C5F42554653495AA1 +:10A7C00045206D75737420626520626967676572E4 +:10A7D000207468616E204D454D5F414C49474E4D98 +:10A7E000454E540072656D5F6C656E203C206D6156 +:10A7F000785F7531365F7400706275665F616C6C8E +:10A800006F633A207062756620712D3E7061796CBD +:10A810006F61642070726F7065726C7920616C6911 +:10A82000676E656400000000706275665F616C6C45 +:10A830006F633A206572726F6E656F7573207479FD +:10A8400070650000706275665F636F707920666185 +:10A85000696C656400000000010203040506070737 +:10A8600007070707070000002E2E2F7372632F5370 +:10A870004F4654574152455F4652414D45574F52FE +:10A880004B2F53455256494345532F4C5749502F50 +:10A890006C7769702D312E332E322F7372632F63D4 +:10A8A0006F72652F7463702E630000007463705FB5 +:10A8B000706362735F73616E653A20616374697679 +:10A8C00065207063622D3E737461746520213D20A4 +:10A8D000434C4F53454400007463705F7063627370 +:10A8E0005F73616E653A2061637469766520706399 +:10A8F000622D3E737461746520213D204C49535490 +:10A90000454E00007463705F706362735F73616EC5 +:10A91000653A20616374697665207063622D3E73C9 +:10A920007461746520213D2054494D452D5741499E +:10A93000540000007463705F706362735F73616ED4 +:10A94000653A207477207063622D3E73746174657C +:10A95000203D3D2054494D452D57414954000000AC +:10A960007463705F62696E643A2063616E206F6E1B +:10A970006C792062696E6420696E207374617465FD +:10A9800020434C4F534544007463705F7265637697 +:10A9900065643A206C656E20776F756C6420777201 +:10A9A0006170207263765F776E640A00756E7365FE +:10A9B0006E74207365676D656E7473206C65616B72 +:10A9C000696E6700756E61636B6564207365676DA2 +:10A9D000656E7473206C65616B696E6700000000C2 +:10A9E0006F6F736571207365676D656E7473206C2E +:10A9F00065616B696E6700007463705F7063625FAE +:10AA000072656D6F76653A207463705F7063627310 +:10AA10005F73616E652829007463705F6C6973747D +:10AA2000656E3A2070636220616C726561647920A2 +:10AA3000636F6E6E65637465640000007463705FBD +:10AA4000736C6F77746D723A2061637469766520F8 +:10AA50007063622D3E737461746520213D20434C08 +:10AA60004F5345440A0000007463705F736C6F7746 +:10AA7000746D723A20616374697665207063622D2B +:10AA80003E737461746520213D204C495354454EFA +:10AA90000A0000007463705F736C6F77746D723AB4 +:10AAA00020616374697665207063622D3E73746102 +:10AAB000746520213D2054494D452D574149540A84 +:10AAC000000000007463705F736C6F77746D723A8E +:10AAD000206D6964646C652074637020213D20746E +:10AAE00063705F6163746976655F706362730000B1 +:10AAF0007463705F736C6F77746D723A20666972FD +:10AB0000737420706362203D3D207463705F6163E5 +:10AB1000746976655F706362730000007463705FD0 +:10AB2000736C6F77746D723A2054494D452D5741BF +:10AB30004954207063622D3E7374617465203D3DFD +:10AB40002054494D452D5741495400007463705FAE +:10AB5000736C6F77746D723A206D6964646C6520F4 +:10AB600074637020213D207463705F74775F70633D +:10AB7000627300007463705F736C6F77746D723A08 +:10AB800020666972737420706362203D3D20746397 +:10AB9000705F74775F706362730000007463705F4E +:10ABA000636F6E6E6563743A2063616E206F6E6CC6 +:10ABB0007920636F6E6E65637465642066726F6D75 +:10ABC00020737461746520434C4F5345440000006A +:10ABD00053594E5F53454E540000000053594E5F89 +:10ABE000524356440000000045535441424C4953DF +:10ABF0004845440046494E5F574149545F31000083 +:10AC000046494E5F574149545F320000434C4F5311 +:10AC1000455F574149540000434C4F53494E47004C +:10AC20004C4153545F41434B0000000054494D4593 +:10AC30005F5741495400000003060C18306078004B +:10AC40008000FAFC8000FC6C8000FD4E8000FDB4AA +:10AC50008000FE368000FD4E8000FE788000FEF809 +:10AC60002E2E2F7372632F534F4654574152455F18 +:10AC70004652414D45574F524B2F5345525649432B +:10AC800045532F4C5749502F6C7769702D312E3317 +:10AC90002E322F7372632F636F72652F7463705F30 +:10ACA000696E2E63000000007063622D3E736E6457 +:10ACB0005F71756575656C656E203E3D20706275CF +:10ACC000665F636C656E286E6578742D3E70290032 +:10ACD0007463705F726563656976653A2076616C4E +:10ACE0006964207175657565206C656E67746800B0 +:10ACF000696E7365672E7020213D204E554C4C00C7 +:10AD0000696E73616E65206F6666736574210000FD +:10AD10007062756620746F6F2073686F72742100A3 +:10AD2000706275665F686561646572206661696CF2 +:10AD3000656400007463705F726563656976653A87 +:10AD4000207365676D656E74206E6F742074726910 +:10AD50006D6D656420636F72726563746C792074C5 +:10AD60006F207263765F776E640A00007463705FB1 +:10AD7000726563656976653A207365676D656E74A3 +:10AD8000206E6F74207472696D6D656420636F72DC +:10AD9000726563746C7920746F206F6F73657120B6 +:10ADA00071756575650A00007463705F726563652F +:10ADB0006976653A207463706C656E203E2072631C +:10ADC000765F776E640A00007463705F7265636516 +:10ADD0006976653A206F6F736571207463706C6576 +:10ADE0006E203E207263765F776E640A000000007A +:10ADF0007463705F696E7075743A2061637469760C +:10AE000065207063622D3E737461746520213D205E +:10AE1000434C4F53454400007463705F696E707516 +:10AE2000743A20616374697665207063622D3E73A5 +:10AE30007461746520213D2054494D452D57414989 +:10AE4000540000007463705F696E7075743A20611D +:10AE50006374697665207063622D3E7374617465F6 +:10AE600020213D204C495354454E00007463705FCF +:10AE7000696E7075743A207063622D3E6E657874E9 +:10AE800020213D2070636220286265666F72652014 +:10AE900063616368652900007463705F696E707533 +:10AEA000743A207063622D3E6E65787420213D20D7 +:10AEB00070636220286166746572206361636865EF +:10AEC000290000007463705F696E7075743A2054D5 +:10AED000494D452D57414954207063622D3E73748E +:10AEE000617465203D3D2054494D452D57414954DD +:10AEF000000000007463705F696E7075743A2070B2 +:10AF000063622D3E737461746520213D20434C4F74 +:10AF1000534544007063622D3E736E645F717565C6 +:10AF200075656C656E203E20300000007063622DF8 +:10AF30003E61636365707420213D204E554C4C008A +:10AF40007463705F696E7075743A207463705F70BB +:10AF50006362735F73616E65282900002E2E2F7364 +:10AF600072632F534F4654574152455F4652414DED +:10AF700045574F524B2F53455256494345532F4C3B +:10AF80005749502F6C7769702D312E332E322F7325 +:10AF900072632F636F72652F7463705F6F75742EA9 +:10AFA00063000000636865636B20746861742066E9 +:10AFB0006972737420706275662063616E20686FB9 +:10AFC0006C6420737472756374207463705F68645A +:10AFD000720000007463705F656E71756575653A27 +:10AFE000207061636B6574206E65656473207061A9 +:10AFF000796C6F61642C206F7074696F6E732C2094 +:10B000006F722053594E2F46494E202870726F6739 +:10B0100072616D6D65722076696F6C617465732005 +:10B0200041504929000000007463705F656E7175BE +:10B030006575653A206C656E20213D2030207C7C52 +:10B0400020617267203D3D204E554C4C2028707287 +:10B050006F6772616D6D65722076696F6C61746582 +:10B0600073204150492900007463705F656E7175EB +:10B070006575653A207062756673206F6E20717514 +:10B08000657565203D3E206174206C656173742098 +:10B090006F6E65207175657565206E6F6E2D656DBF +:10B0A000707479007463705F656E71756575653A6B +:10B0B000206E6F207062756673206F6E20717565EB +:10B0C0007565203D3E20626F7468207175657565F9 +:10B0D0007320656D707479007573656720213D205C +:10B0E0004E554C4C00000000636865636B2074682B +:10B0F0006174206669727374207062756620636182 +:10B100006E20686F6C642074686520636F6D706C6E +:10B11000657465207365676C656E000070627566A6 +:10B120005F686561646572206661696C65640A00C8 +:10B1300046494E20656E71756575656420746F674C +:10B140006574686572207769746820646174610051 +:10B150007A65726F2D6C656E6774682070627566B3 +:10B16000000000007463705F656E71756575653A07 +:10B170002076616C6964207175657565206C656EFB +:10B1800067746800525354206E6F74206578706540 +:10B190006374656420686572652100002E2E2F732C +:10B1A00072632F534F4654574152455F4652414DAB +:10B1B00045574F524B2F53455256494345532F4CF9 +:10B1C0005749502F6C7769702D312E332E322F73E3 +:10B1D00072632F636F72652F7564702E63000000B9 +:10B1E000726562696E64203D3D203000636865636E +:10B1F0006B20746861742066697273742070627564 +:10B20000662063616E20686F6C642073747275636E +:10B2100074207564705F686472000000702D3E7069 +:10B2200061796C6F6164203D3D20697068647200D3 +:10B230002E2E2F7372632F534F4654574152455F42 +:10B240004652414D45574F524B2F53455256494355 +:10B2500045532F4C5749502F6C7769702D312E3341 +:10B260002E322F7372632F636F72652F697076347D +:10B270002F69636D702E6300636865636B2074686B +:10B2800061742066697273742070627566206361F0 +:10B290006E20686F6C642069636D70206D657373D8 +:10B2A0006167650069636D705F696E7075743A20DF +:10B2B0006D6F76696E6720702D3E7061796C6F617D +:10B2C0006420746F2069702068656164657220660F +:10B2D00061696C65640A0000636865636B2074686B +:10B2E0006174206669727374207062756620636190 +:10B2F0006E20686F6C642073747275637420746858 +:10B30000652049434D502068656164657200000006 +:10B3100069636D705F696E7075743A20636F7079E0 +:10B32000696E6720746F206E657720706275662085 +:10B330006661696C65640A0069636D705F696E704F +:10B3400075743A20726573746F72696E67206F72DC +:10B350006967696E616C20702D3E7061796C6F61F8 +:10B3600064206661696C65640A00000043616E27B1 +:10B3700074206D6F7665206F7665722068656164F4 +:10B38000657220696E207061636B65740000000057 +:10B390002E2E2F7372632F534F4654574152455FE1 +:10B3A0004652414D45574F524B2F534552564943F4 +:10B3B00045532F4C5749502F6C7769702D312E33E0 +:10B3C0002E322F7372632F636F72652F697076341C +:10B3D0002F69702E63000000636865636B207468DA +:10B3E000617420666972737420706275662063618F +:10B3F0006E20686F6C64207374727563742069705A +:10B400005F68647200FFFFFFFF00000000000000A3 +:10B410002E2E2F7372632F534F4654574152455F60 +:10B420004652414D45574F524B2F53455256494373 +:10B4300045532F4C5749502F6C7769702D312E335F +:10B440002E322F7372632F636F72652F697076349B +:10B450002F69705F667261672E630000746869739C +:10B46000206E656564732061207062756620696E68 +:10B47000206F6E65207069656365210073616E6978 +:10B48000747920636865636B206C696E6B656420FA +:10B490006C697374000000007072657620213D2095 +:10B4A00069707200707265762D3E6E657874203D0D +:10B4B0003D2069707200000069705F72656173738E +:10B4C0005F70627566636F756E74203E3D20636CBD +:10B4D000656E0000636865636B20667261676D6509 +:10B4E0006E747320646F6E2774206F7665726C6162 +:10B4F000700000006E6F2070726576696F75732042 +:10B50000667261676D656E742C2074686973206D56 +:10B51000757374206265207468652066697273743F +:10B5200020667261676D656E7421000073616E69DB +:10B53000747920636865636B0000000076616C6954 +:10B54000646174655F646174616772616D3A6E65B0 +:10B5500078745F70627566213D4E554C4C0000005A +:10B5600076616C69646174655F646174616772615E +:10B570006D3A646174616772616D20656E64213D2E +:10B58000646174616772616D206C656E00FFFFFF1E +:10B59000FFFFFF002E2E2F7372632F534F46545719 +:10B5A0004152455F4652414D45574F524B2F5345EF +:10B5B0005256494345532F4C5749502F6C77697069 +:10B5C0002D312E332E322F7372632F6E65746966A0 +:10B5D0002F6574686172702E630000006E65746977 +:10B5E000662D3E6877616464725F6C656E206D7570 +:10B5F0007374206265207468652073616D652061D5 +:10B6000073204554484152505F4857414444525F6B +:10B610004C454E20666F722065746861727021001F +:10B620007120213D204E554C4C000000712D3E7084 +:10B6300020213D204E554C4C00000000722D3E70E4 +:10B6400020213D204E554C4C000000006172705F7F +:10B650007461626C655B695D2E71203D3D204E55C5 +:10B660004C4C000069203C204152505F5441424CF8 +:10B67000455F53495A4500006E657469662D3E6802 +:10B6800077616464725F6C656E203D3D204554486F +:10B690004152505F4857414444525F4C454E000070 +:10B6A000636865636B207468617420666972737483 +:10B6B00020706275662063616E20686F6C64207311 +:10B6C0007472756374206574686172705F68647207 +:10B6D000000000006172705F7461626C655B695D9F +:10B6E0002E7374617465203D3D2050454E44494E93 +:10B6F00047206F7220535441424C45006E6F2070BA +:10B7000061636B65742071756575657320616C6C20 +:10B710006F77656421000000000000002E2E2F735B +:10B7200072632F534F4654574152455F4652414D25 +:10B7300045574F524B2F53455256494345532F4C73 +:10B740005749502F6C7769702D706F72742D312EA0 +:10B75000332E322F48442F69662F6E657469662F29 +:10B76000776C69662E6300000A09000052580000D9 +:10B7700054580000FFFFFF740000000001FFFFFFAE +:10B780000000FFFFFFFFFF400000000001FFFFFF80 +:10B7900041505000484D4700312E352E312E370094 +:10B7A000312E352E312E3100312E352E312E3400F2 +:10B7B00080017C7C80017C7480017C7C80017C6ABF +:10B7C00080017DCA80017D7880017D2A80017CD83E +:10B7D00080017C86800185D2800185CA800185CA6E +:10B7E000800185D2800185C2800185C2800185BA31 +:10B7F000800185BA02040B0C121618242C30424822 +:10B80000606C0000322E312E312E310078C40E00D3 +:10B81000352E332E31000000352E332E350000003A +:10B82000352E332E340000008001BF808001BF928E +:10B830008001BFA88001BF5A8001BF668001BFD4CC +:10B840008001BF5A8001BFE08001BF5A8001BF5A0A +:10B850008001BF5A8001BF5A8001BF5A8001BF5A80 +:10B860008001BF5A8001BF5A8001BF5A8001BF5A70 +:10B870008001BF5A8001BF5A8001BF5A8001BF5A60 +:10B880008001BF5A8001BF5A8001BF5A8001BF5A50 +:10B890008001BF5A8001BF5A8001BF5A8001BF5A40 +:10B8A0008001BF5A8001BF5A8001BF5A8001BF5A30 +:10B8B0008001BF5A8001BF5A8001BF5A8001BF5A20 +:10B8C0008001BF5A8001BF5A8001BF5A8001BF5A10 +:10B8D0008001BF5A8001BF5A8001BF5A8001BF5A00 +:10B8E0008001BF5A8001BF5A8001BF5A8001BF5AF0 +:10B8F0008001BF5A8001BF5A8001BF5A8001BF5AE0 +:10B900008001BF5A8001BF5A8001BF5A8001BF5ACF +:10B910008001BF5A8001BF5A8001BF5A8001BF5ABF +:10B920008001BF5A8001BF7C8001C0448001BF5AA2 +:10B930008001C0448001BF5A8001C17C8001BF5A90 +:10B940008001C1708001BF5A8001C1648001BF5A6B +:10B950008001BF5A8001BF5A8001BF5A8001C1AC2B +:10B960008001BF5A8001BF5A8001C1A08001BF5A27 +:10B970008001C1948001BF5A8001BF5A8001BF5A23 +:10B980008001BF5A8001BF5A8001BF5A8001BF5A4F +:10B990008001BF5A8001BF5A8001BF5A8001BF5A3F +:10B9A0008001BF5A8001BF5A8001BF5A8001BF5A2F +:10B9B0008001BF5A8001BF5A8001BF5A8001BF5A1F +:10B9C0008001BF5A8001BF5A8001BF5A8001BF5A0F +:10B9D0008001BF5A8001BF5A8001BF5A8001BF5AFF +:10B9E0008001BF5A8001BF5A8001BF5A8001BF5AEF +:10B9F0008001BF5A8001BF5A8001BF5A8001BF5ADF +:10BA00008001BF5A8001BF5A8001BF5A8001BF5ACE +:10BA10008001BF5A8001BF5A8001BF5A8001BF5ABE +:10BA20008001BF5A8001BF5A8001BF5A8001BF5AAE +:10BA30008001BF5A8001BF5A8001BF5A8001BF5A9E +:10BA40008001BF5A8001BF5A8001BF5A8001BF5A8E +:10BA50008001BF5A8001BF5A8001BF5A8001BF5A7E +:10BA60008001BF5A8001BF5A8001BF5A8001BF5A6E +:10BA70008001BF5A8001BF5A8001BF5A8001BF5A5E +:10BA80008001BF5A8001BF5A8001BF5A8001BF5A4E +:10BA90008001BF5A8001BF5A8001BF5A8001BF5A3E +:10BAA0008001BF5A8001BF5A8001BF5A8001BF5A2E +:10BAB0008001BF5A8001BF5A8001BF5A8001BF5A1E +:10BAC0008001BF5A8001BF5A8001BF5A8001BF5A0E +:10BAD0008001BF5A8001BF5A8001BF5A8001BF5AFE +:10BAE0008001BF5A8001BF5A8001BF5A8001BF5AEE +:10BAF0008001BF5A8001BF5A8001BF5A8001BF5ADE +:10BB00008001BF5A8001BF5A8001BF5A8001BF5ACD +:10BB10008001BF5A8001C02C8001C1588001C02C17 +:10BB20008001C02C8001C1888001BF5A8001C044BF +:10BB30008001BF5A8001C0508001BF5A8001C050AF +:10BB40008001BF5A8001C02C8001BF5A8001C02CE7 +:10BB50008001C0388001C0388001C0388001BF5AE0 +:10BB60008001C02C8001C02C8001C14C8001BF5AD3 +:10BB70008001BF5A8001C1408001BF5A8001BF5A75 +:10BB80008001BF5A8001BF5A8001BF5A8001BF5A4D +:10BB90008001BF5A8001BF5A8001BF5A8001BF5A3D +:10BBA0008001C1348001BF5A8001BF5A8001BF5A51 +:10BBB0008001BF5A8001BF5A8001BF5A8001BF5A1D +:10BBC0008001C1288001BF5A8001BF5A8001BF5A3D +:10BBD0008001BF5A8001BF5A8001BF5A8001BF5AFD +:10BBE0008001BF5A8001BF5A8001BF5A8001BF5AED +:10BBF0008001BF5A8001BF5A8001BF5A8001BF5ADD +:10BC00008001BF5A8001BF5A8001BF5A8001BF5ACC +:10BC10008001BF5A8001BF5A8001BF5A8001BF5ABC +:10BC20008001BF5A8001BF5A8001BF5A8001BF5AAC +:10BC30008001BF5A8001BF5A8001BF5A8001BF5A9C +:10BC40008001BF5A8001BF5A8001BF5A8001BF5A8C +:10BC50008001BF5A8001BF5A8001BF5A8001BF5A7C +:10BC60008001BF5A8001BF5A8001BF5A8001BF5A6C +:10BC70008001BF5A8001BF5A8001BF5A8001BF5A5C +:10BC80008001BF5A8001BF5A8001BF5A8001BF5A4C +:10BC90008001BF5A8001BF5A8001BF5A8001BF5A3C +:10BCA0008001BF5A8001BF5A8001BF5A8001BF5A2C +:10BCB0008001BF5A8001BF5A8001BF5A8001BF5A1C +:10BCC0008001BF5A8001BF5A8001BF5A8001BF5A0C +:10BCD0008001BF5A8001BF5A8001BF5A8001BF5AFC +:10BCE0008001BF5A8001BF5A8001BF5A8001BF5AEC +:10BCF0008001BF5A8001BF5A8001BF5A8001BF5ADC +:10BD00008001BF5A8001BF5A8001BF5A8001BF5ACB +:10BD10008001BF5A8001BF5A8001BF5A8001BF5ABB +:10BD20008001BF5A8001BF5A8001BF5A8001BF5AAB +:10BD30008001BF5A8001BF5A8001BF5A8001BF5A9B +:10BD40008001BF5A8001BF5A8001BF5A8001BF5A8B +:10BD50008001BF5A8001BF5A8001BF5A8001BF5A7B +:10BD60008001BF5A8001BF5A8001BF5A8001C11CA7 +:10BD70008001C1108001BF5A8001C1048001BF5AF7 +:10BD80008001BF5A8001BF5A8001C0F88001C0EC19 +:10BD90008001BF5A8001BF5A8001C0E08001BF5AB4 +:10BDA0008001BF5A8001C0D48001C0C88001C0BCDE +:10BDB0008001C0B08001C0A48001C0988001C08C07 +:10BDC0008001BF5A8001C0808001C0748001BF5AC9 +:10BDD0008001C0688001C05C8001C48E8001C47C89 +:10BDE0008001C46A8001C4588001C4468001C43403 +:10BDF0008001C3928001C3928001C4228001C410DB +:10BE00008001C3FE8001C3EC8001C3DA8001C3C896 +:10BE10008001C3B68001C3A48001C3A48001C4A073 +:10BE20008001C2D48001C2D48001C2D48001C5C0C7 +:10BE30008001C5AE8001C59C8001C2D48001C2D4FE +:10BE40008001C58A8001C2D48001C2D48001C57836 +:10BE50008001C5668001C5548001C5428001C5309E +:10BE60008001C51E8001C50C8001C4FA8001C4E8B0 +:10BE70008001C2D48001C4D68001C4C48001C2D470 +:10BE80008001C2D48001C2D48001C2D48001C2D456 +:10BE90008001C2D48001C2D48001C2D48001C2D446 +:10BEA0008001C2D48001C2D48001C2D48001C2D436 +:10BEB0008001C2D48001C2D48001C2D48001C2D426 +:10BEC0008001C2D48001C2D48001C2D48001C2D416 +:10BED0008001C2D48001C2D48001C2D48001C2D406 +:10BEE0008001C2D48001C2D48001C2D48001C2D4F6 +:10BEF0008001C2D48001C2D48001C2D48001C2D4E6 +:10BF00008001C2D48001C2D48001C2D48001C2D4D5 +:10BF10008001C2D48001C2D48001C2D48001C2D4C5 +:10BF20008001C2D48001C2D48001C2D48001C2D4B5 +:10BF30008001C2D48001C2D48001C2D48001C2D4A5 +:10BF40008001C2D48001C2D48001C2D48001C2D495 +:10BF50008001C2D48001C2D48001C2D48001C2D485 +:10BF60008001C2D48001C2D48001C2D48001C2D475 +:10BF70008001C2D48001C2D48001C2D48001C2D465 +:10BF80008001C2D48001C2D48001C2D48001C2D455 +:10BF90008001C2D48001C2D48001C2D48001C2D445 +:10BFA0008001C2D48001C2D48001C2D48001C2D435 +:10BFB0008001C2D48001C2D48001C2D48001C2D425 +:10BFC0008001C2D48001C2D48001C2D48001C2D415 +:10BFD0008001C2D48001C2D48001C2D48001C2D405 +:10BFE0008001C2D48001C2D48001C2D48001C2D4F5 +:10BFF0008001C2D48001C2D48001C2D48001C2D4E5 +:10C000008001C2D48001C2D48001C2D48001C2D4D4 +:10C010008001C4B28001EFCA8001EFCE8001EF7AC7 +:10C020008001EF7A8001EF828001EF8A8001EF9238 +:10C030008001EF9A8001EFA28001EFAA8001EFB2A8 +:10C040008001EFBA8001EFC28001EFD68001F96074 +:10C050008001F93E8001F9CC8001F8A68001F9BE8B +:10C060008001F91C8001F8A68001F8E28001F8A6A1 +:10C070008001F8A68001F8A68001F8A68001F8A644 +:10C080008001F8A68001F8A68001F8A68001F8A634 +:10C090008001F8A68001F8A68001F8A68001F8A624 +:10C0A0008001F8A68001F8A68001F8A68001F8A614 +:10C0B0008001F8A68001F8A68001F8A68001F8A604 +:10C0C0008001F8A68001F8A68001F8A68001F8A6F4 +:10C0D0008001F8A68001F8A68001F8A68001F8A6E4 +:10C0E0008001F8A68001F8A68001F8A68001F8A6D4 +:10C0F0008001F8A68001F8A68001F8A68001F8A6C4 +:10C100008001F8A68001F8A68001F8A68001F8A6B3 +:10C110008001F8A68001F8A68001F8A68001F8A6A3 +:10C120008001F8A68001F8A68001F8A68001F8A693 +:10C130008001F8A68001F8A68001F8A68001F8A683 +:10C140008001F8A68001F8A68001F8C08001FA58A5 +:10C150008001F8F08001F8F08001F90E8001F8F01C +:10C160008001F8F08001F8F08001F8F08001F8F02B +:10C170008001F8F08001F8F08001F8F08001F8F01B +:10C180008001F8F08001F90E8001F8F08001F8F0EC +:10C190008001F8F08001F8F08001F8F08001F8F0FB +:10C1A0008001F8F08001FA488001F8F08001F8F091 +:10C1B0008001F8F08001F8F08001F8F08001F8F0DB +:10C1C0008001F8F08001F8F08001F8F08001F8F0CB +:10C1D0008001F8F08001F8F08001F8F08001F8F0BB +:10C1E0008001F8F08001F8F08001F8F08001F8F0AB +:10C1F0008001F8F08001F8F08001F8F08001F8F09B +:10C200008001F8F08001F8F08001F8F08001F8F08A +:10C210008001F8F08001F8F08001F8F08001F8F07A +:10C220008001F8F08001F8F08001F8F08001F8F06A +:10C230008001F8F08001F8F08001F8F08001F8F05A +:10C240008001F8F08001F8F08001F8F08001F8F04A +:10C250008001F8F08001F8F08001F8F08001F8F03A +:10C260008001F8F08001F8F08001F8F08001F8F02A +:10C270008001F8F08001F8F08001F8F08001F8F01A +:10C280008001F8F08001F8F08001F8F08001F8F00A +:10C290008001F8F08001F8F08001F8F08001F8F0FA +:10C2A0008001F8F08001F8F08001F8F08001F8F0EA +:10C2B0008001F8F08001F8F08001F8F08001F8F0DA +:10C2C0008001F8F08001F8F08001F8F08001F8F0CA +:10C2D0008001F8F08001F8F08001F8F08001F8F0BA +:10C2E0008001F8F08001F8F08001F8F08001F8F0AA +:10C2F0008001F8F08001F8F08001F8F08001F8F09A +:10C300008001F8F08001F8F08001F8F08001F8F089 +:10C310008001F8F08001F8F08001F8F08001F8F079 +:10C320008001F8F08001F8F08001F8F08001F8F069 +:10C330008001F8F08001F8F08001F8F08001F8F059 +:10C340008001F8F08001F8F08001F8F08001F8F049 +:10C350008001F90E8001FA348001F8F08001F90EB5 +:10C360008001F8F08001F8F08001F8F08001F8F029 +:10C370008001F8F08001F8F08001F8F08001F90EFA +:10C380008001F8F08001F8F08001FA2C8001FA2495 +:10C390008001FA1C8001FA148001FA0C8001FA0471 +:10C3A0008001FA408001F8F08001FA5057455F495A +:10C3B0004E445F38303231315F434F4E4E45435427 +:10C3C0004544000057455F494E445F3830323131B3 +:10C3D0005F444953434F4E4E454354494E47000036 +:10C3E00057455F494E445F38303231315F494253DF +:10C3F000535F444953434F4E4E4543544544000018 +:10C40000332E312E322E312E34000000352E3233B1 +:10C4100000000000352E32322E320000352E32322E +:10C420002E310000352E322E39000000352E3138E5 +:10C430002E310000352E31382E320000352E3232AA +:10C440002E340000352E32342E320000352E323498 +:10C450002E310000352E31312E310000352E322E96 +:10C4600032000000352E31362E320000352E3136A6 +:10C470002E310000312E312E312E323200000000DC +:10C48000352E322E31392E3500000000352E322E59 +:10C4900031392E3400000000352E322E31392E3342 +:10C4A00000000000352E322E31392E3200000000FF +:10C4B000352E322E31392E3100000000352E322E2D +:10C4C00031000000352E31312E320000352E313151 +:10C4D0002E330000352E31312E340000352E31310F +:10C4E0002E350000352E31312E360000352E3131FB +:10C4F0002E380000352E31312E37000073736964F9 +:10C500000000000070736B004A756E6B41500000B4 +:10C5100057534300656170005746412D53696D7054 +:10C520006C65436F6E6669672D456E726F6C6C65E6 +:10C53000652D312D300000006964656E7469747971 +:10C54000000000006E7277696669000064656661CC +:10C55000756C740057455F494E445F383032313155 +:10C560005F444953434F4E4E4543544544000000F9 +:10C5700057455F494E445F50414952574953455FC3 +:10C580004D49435F4552524F5200000057455F49A5 +:10C590004E445F47524F55505F4D49435F4552529D +:10C5A0004F52000057455F494E445F43414E444956 +:10C5B000444154455F4C495354000000494E4143A7 +:10C5C0005449564500000000444953434F4E4E45E0 +:10C5D00043544544000000005343414E4E494E47EA +:10C5E000000000004153534F43494154494E470016 +:10C5F0004153534F43494154454400003457415936 +:10C600005F48414E445348414B45000047524F5507 +:10C61000505F48414E445348414B4500434F4D50B5 +:10C620004C45544544000000554E4B4E4F574E006C +:10C630004354524C2D4556454E542D5445524D4968 +:10C640004E4154494E47202D207369676E616C201E +:10C650002564207265636569766564007769726533 +:10C660006400000043616E63656C6C696E672061F5 +:10C67000757468656E7469636174696F6E2074693E +:10C680006D656F75740000005750413A2045415068 +:10C690004F4C2070726F63657373696E6720636FB0 +:10C6A0006D706C657465000043616E63656C6C69E8 +:10C6B0006E67207363616E207265717565737400B7 +:10C6C00052534E3A207573696E672049454545209F +:10C6D0003830322E3131692F44392E3000000000BD +:10C6E0005750413A207573696E672049454545208A +:10C6F0003830322E3131692F44332E3000000000A3 +:10C700005750413A204661696C656420746F20700F +:10C7100061727365205750412049452066726F6DE4 +:10C72000206173736F63696174696F6E20696E66EF +:10C730006F0000005750413A2044726976657220BC +:10C74000757365642064697361626C6564206772E7 +:10C750006F75702063697068657220307825782065 +:10C76000286D61736B203078257829202D20726523 +:10C770006A656374000000005750413A20447269B2 +:10C7800076657220757365642064697361626C6597 +:10C790006420706169727769736520636970686588 +:10C7A00072203078257820286D61736B20307825D1 +:10C7B0007829202D2072656A656374005750413ACC +:10C7C00020447269766572207573656420646973AC +:10C7D00061626C6564206B6579206D616E6167656F +:10C7E0006D656E74203078257820286D61736B201C +:10C7F0003078257829202D2072656A6563740000E1 +:10C800005750413A207573696E672047544B204357 +:10C81000434D50005750413A207573696E67204769 +:10C82000544B20544B4950005750413A207573697E +:10C830006E672047544B205745503130340000007C +:10C840005750413A207573696E672047544B205703 +:10C8500045503430000000005750413A207573694C +:10C860006E672050544B2043434D50005750413A7F +:10C87000207573696E672050544B20544B4950000B +:10C880005750413A207573696E672050544B204EC3 +:10C890004F4E45005750413A207573696E67204BE3 +:10C8A00045595F4D474D54203830322E31580000E5 +:10C8B0005750413A207573696E67204B45595F4D5B +:10C8C000474D54205750412D50534B005750413A3B +:10C8D000207573696E67204B45595F4D474D542055 +:10C8E0005750412D4E4F4E45000000005750413AE1 +:10C8F000204661696C656420746F2073656C6563A4 +:10C9000074205750412F52534E0000004661696C0D +:10C91000656420746F20706172736520746865208F +:10C92000636F6E66696775726174696F6E206669A0 +:10C930006C652027257327202D2065786974696E22 +:10C94000670000005265636F6E6669677572617497 +:10C95000696F6E20636F6D706C65746564000000B4 +:10C9600053657474696E672061757468656E746967 +:10C97000636174696F6E2074696D656F75743A20B8 +:10C98000256420736563202564207573656300004A +:10C9900053657474696E67207363616E207265718C +:10C9A000756573743A2025642073656320256420BF +:10C9B000757365630000000041757468656E746985 +:10C9C000636174696F6E20776974682025303278EE +:10C9D0003A253032783A253032783A253032783A72 +:10C9E000253032783A253032782074696D656420BC +:10C9F0006F75742E00000000547279696E672074A0 +:10CA00006F206173736F63696174652077697468FF +:10CA100020253032783A253032783A253032783A4B +:10CA2000253032783A253032783A2530327820284D +:10CA3000535349443D2725732720667265713D2570 +:10CA400064204D487A290000547279696E67207419 +:10CA50006F206173736F63696174652077697468AF +:10CA60002053534944202725732700004173736FD7 +:10CA700063696174696F6E20726571756573742086 +:10CA8000746F2074686520647269766572206661CF +:10CA9000696C6564000000007770615F7375707089 +:10CAA0006C6963616E742076302E352E31300A4306 +:10CAB0006F7079726967687420286329203230307A +:10CAC000332D323030382C204A6F756E69204D611D +:10CAD0006C696E656E203C6A4077312E66693E2037 +:10CAE000616E6420636F6E7472696275746F7273C5 +:10CAF00000000000546869732070726F6772616D86 +:10CB0000206973206672656520736F667477617241 +:10CB1000652E20596F752063616E2064697374728D +:10CB2000696275746520697420616E642F6F72206C +:10CB30006D6F646966792069740A756E6465722028 +:10CB4000746865207465726D73206F662074686503 +:10CB500020474E552047656E6572616C20507562A6 +:10CB60006C6963204C6963656E73652076657273CA +:10CB7000696F6E20322E0A0A416C7465726E6174A0 +:10CB80006976656C792C207468697320736F66749C +:10CB900077617265206D61792062652064697374C4 +:10CBA0007269627574656420756E6465722074685C +:10CBB00065207465726D73206F66207468650A4223 +:10CBC0005344206C6963656E73652E205365652040 +:10CBD000524541444D4520616E6420434F505949B0 +:10CBE0004E4720666F72206D6F72652064657461B8 +:10CBF000696C732E0A0000002530325800000000D6 +:10CC00008003C4FC80024A908002490000000010AA +:10CC100000000014000000000000002000000000E0 +:10CC20008003D3EC80024DF0800248880000006051 +:10CC300000000000000000000000000100000000F3 +:10CC40008003D3F880024DCC800248280000000009 +:10CC500000000000000000000000000000000000D4 +:10CC60008003C50480024D00800248C4000000001B +:10CC700000000000000000000000000000000001B3 +:10CC80008003D4008002408C800247A8000000008E +:10CC90000000000000000000000000000000000094 +:10CCA0008003D40880023F448002467C00000000DC +:10CCB0000000000000000000000000000000000074 +:10CCC0008003D41480023F188002466C00000000EC +:10CCD0000000000000000000000000000000000054 +:10CCE0008003D42080023EEC8002465C00000000FD +:10CCF0000000000000000000000000000000000034 +:10CD00008003D42880023CA4800244740000000008 +:10CD10000000000000000000000000000000000013 +:10CD20008003C51480024B9080024B00000000007D +:10CD300000000000000000000000000000000000F3 +:10CD40008003C53880024A908002490000000068D4 +:10CD50000000006C00000000000000000000000067 +:10CD60008003D43480024A908002490000000070A1 +:10CD7000000000740000000000000000000000003F +:10CD80008003D44880024A90800249000000007865 +:10CD90000000007C000000100000002000000001E6 +:10CDA0008003D45080024A90800249000000008035 +:10CDB00000000084000000000000000000000000EF +:10CDC0008003D45480024A90800249000000008809 +:10CDD0000000008C000000000000000000000001C6 +:10CDE0008003D46080024A908002490000000090D5 +:10CDF0000000000000000000000000000000000033 +:10CE00008003D46880024A908002490000000094A8 +:10CE10000000000000000000000000000000000012 +:10CE20008003D47080024A9080024900000000987C +:10CE300000000000000000000000000000000000F2 +:10CE40008003D47C80024A90800249000000009C4C +:10CE500000000000000000000000000000000000D2 +:10CE60008003D48880024A9080024900000000A01C +:10CE700000000000000000000000000000000001B1 +:10CE80008003D49C80024A9080024900000000A4E4 +:10CE90000000000000000000000000000000000092 +:10CEA0008003D4A480024A9080024900000000A8B8 +:10CEB0000000000000000000000000000000000072 +:10CEC0008003D4B480024A9080024900000000AC84 +:10CED0000000000000000000000000000000000052 +:10CEE0008003D4C880024A9080024900000000B04C +:10CEF0000000000000000000000000000000000032 +:10CF00008003D4D480024A9080024900000000B41B +:10CF10000000000000000000000000000000000011 +:10CF20008003D4E080024A9080024900000000B8EB +:10CF300000000000000000000000000000000000F1 +:10CF40008003D4F080024A9080024900000000BCB7 +:10CF500000000000000000000000000000000000D1 +:10CF60008003D50080024A9080024900000000C082 +:10CF700000000000000000000000000000000001B0 +:10CF80008003D51480024A9080024900000000C44A +:10CF90000000000000000000000000000000000091 +:10CFA0008003D52080024A9080024900000000C81A +:10CFB0000000000000000000000000000000000071 +:10CFC0008003D53080024A9080024900000000CCE6 +:10CFD0000000000000000000000000000000000051 +:10CFE0008003D54480024A9080024900000000D4AA +:10CFF0000000000000000000000000000000000031 +:10D000008003D54C80024A9080024900000000D87D +:10D010000000000000000000000000000000000010 +:10D020008003D55480024A9080024900000000DC51 +:10D0300000000000000000000000000000000000F0 +:10D040008003D55C80024A9080024900000000E025 +:10D0500000000000000000000000000000000001CF +:10D060008003D56080024A9080024900000000E8F9 +:10D0700000000000000000000000000000000000B0 +:10D080008003D56C80024A9080024900000000ECC9 +:10D090000000000000000000000000000000000090 +:10D0A0008003D65C80024DF080024888000000E4D6 +:10D0B0000000000000000000000000000000000070 +:10D0C0008003D57480024DF080024888000000F093 +:10D0D0000000000000000000000000000000000050 +:10D0E0008003D58080024A78800244580000000006 +:10D0F000000000000000000000000000000000012F +:10D100008003D58C80024A608002443C000000000D +:10D11000000000000000000000000000000000010E +:10D120008003D59880024A48800244200000000015 +:10D1300000000000000000000000000000000001EE +:10D140008003D5A480024A3080024404000000001D +:10D1500000000000000000000000000000000001CE +:10D160008003D5B080024DF0800248880000014461 +:10D1700000000000000000000000000000000000AF +:10D180008003D5C080024DF0800248880000000C6A +:10D19000000000000000000000000000000000008F +:10D1A0008003D5CC80024DF0800248880000017CCD +:10D1B000000000000000000000000000000000006F +:10D1C0008003D5DC80024A90800249000000018083 +:10D1D000000000000000000000000000000000004F +:10D1E0008003D5E880024DF0800248880000019C51 +:10D1F000000000000000000000000000000000002F +:10D200008003D5F880024DF0800248880000018438 +:10D21000000000000000000000000001000000000D +:10D220008003D60080024DF0800248880000006430 +:10D2300000000000000000000000000200000000EC +:10D240008003D60880024DF0800248880000014823 +:10D2500000000000000000000000000100000000CD +:10D260008003D62080024DF080024888000001949F +:10D2700000000000000000000000000100000000AD +:10D280008003D62C80024A9080024900000001A051 +:10D29000000000000000000000000000000000008E +:10D2A0008003D63480024DF0800248880000019847 +:10D2B000000000000000000000000001000000006D +:10D2C0008003D63C80024DF0800248880000014C6B +:10D2D000000000000000000000000001000000004D +:10D2E0008003D64880024DF080024888000001A4E7 +:10D2F00000000000000000000000271000000000F7 +:10D300002A0000004F50454E000000005348415293 +:10D31000454400004C454150000000005745503145 +:10D320003034000057455034300000005750412D34 +:10D3300045415000494545453830323158000000DC +:10D340005750410052534E005750413200000000E8 +:10D3500025734F50454E00002573534841524544B4 +:10D360000000000025734C454150000025734343E5 +:10D370004D5000002573544B49500000257357450C +:10D3800050313034000000002573574550343000D0 +:10D3900025734E4F4E45000025735750412D505375 +:10D3A0004B00000025735750412D454150000000AF +:10D3B000257349454545383032315800257357505B +:10D3C000412D4E4F4E45000025735750410000003F +:10D3D000257352534E0000007765705F6B657925A9 +:10D3E0006400000025732573000000007363616E04 +:10D3F0005F73736964000000627373696400000006 +:10D4000070726F746F0000006B65795F6D676D748B +:10D4100000000000706169727769736500000000A8 +:10D4200067726F7570000000617574685F616C678A +:10D4300000000000616E6F6E796D6F75735F6964D7 +:10D44000656E74697479000065617070736B0000BB +:10D450006E61690070617373776F72640000000021 +:10D4600063615F636572740063615F70617468001B +:10D47000636C69656E745F6365727400707269765F +:10D480006174655F6B657900707269766174655F60 +:10D490006B65795F706173737764000064685F66C1 +:10D4A000696C65007375626A6563745F6D6174634E +:10D4B00068000000616C747375626A6563745F6D07 +:10D4C000617463680000000063615F6365727432B9 +:10D4D0000000000063615F7061746832000000004A +:10D4E000636C69656E745F6365727432000000007E +:10D4F000707269766174655F6B6579320000000057 +:10D50000707269766174655F6B6579325F706173A3 +:10D510007377640064685F66696C653200000000C0 +:10D520007375626A6563745F6D617463683200006D +:10D53000616C747375626A6563745F6D617463684E +:10D5400032000000706861736531000070686173BB +:10D5500065320000706373630000000070696E0044 +:10D56000656E67696E655F69640000006B65795F71 +:10D57000696400006561706F6C5F666C6167730061 +:10D580007765705F6B657930000000007765705FCC +:10D590006B657931000000007765705F6B657932EB +:10D5A000000000007765705F6B6579330000000054 +:10D5B0007765705F74785F6B6579696478000000E7 +:10D5C0007072696F72697479000000006561705F44 +:10D5D000776F726B61726F756E6400007061635F6C +:10D5E00066696C6500000000667261676D656E7447 +:10D5F0005F73697A650000006D6F6465000000006C +:10D600007573655F7770730070726F6163746976AC +:10D61000655F6B65795F63616368696E67000000D1 +:10D6200064697361626C65640000000069645F7323 +:10D6300074720000706565726B6579006D6978655C +:10D64000645F63656C6C00006672657175656E631E +:10D6500079000000888E000077696669656E6769E9 +:10D660006E65000057694669456E67696E65000022 +:10D670008003D6588003D664800254C880025420A8 +:10D6800080024F98800252E0800253E8800254A446 +:10D690000000000080024F9A800252C880024F941E +:10D6A00080024F96800252B08002529880024F9CB6 +:10D6B00080024F9E8002523C800251E0800251D491 +:10D6C000800251AC00000000000000008002518088 +:10D6D00080024FF480024FD00000000000000000E4 +:10D6E000000000000000000000000000000000003A +:10D6F000000000000000000080024FA08002564E93 +:10D700008002564A80025646800256408002563CAD +:10D7100080025636800256328002562C80025626EF +:10D72000800256928002568C800256888002568271 +:10D730008002567C80025676800256728002566CB9 +:10D740008002566680025B3480025C0880025BE0E7 +:10D7500080025BBA80025BA080025B3480025B3493 +:10D7600080025B3480025DC280025E3A80025E12FB +:10D7700080025D8E80025CC280025AF680025DF4F7 +:10D7800080025DCE800268DC80026AA280026A00AC +:10D7900080026904800268F2800269EE800268DC1F +:10D7A000800268DC800268E8800268E8800268E83D +:10D7B000696E76616C696461746500004354524C13 +:10D7C0002D4556454E542D4541502D535543434507 +:10D7D0005353204541502061757468656E746963C8 +:10D7E0006174696F6E20636F6D706C657465642021 +:10D7F0007375636365737366756C6C7920286261F9 +:10D80000736564206F6E206C6F776572206C617930 +:10D810006572207375636365737329004354524CBA +:10D820002D4556454E542D4541502D5355434345A6 +:10D830005353204541502061757468656E74696367 +:10D840006174696F6E20636F6D706C6574656420C0 +:10D850007375636365737366756C6C7900000000A3 +:10D860004354524C2D4556454E542D4541502D465E +:10D8700041494C55524520454150206175746865B9 +:10D880006E7469636174696F6E206661696C65644A +:10D8900000000000494E495449414C495A45000096 +:10D8A0004541503A206D6F7265207468616E202585 +:10D8B000642061757468656E7469636174696F6E04 +:10D8C00020726F756E6473202D2061626F72740018 +:10D8D0004354524C2D4556454E542D4541502D4EE6 +:10D8E0004F54494649434154494F4E2000000000DF +:10D8F0004354524C2D4556454E542D4541502D53C1 +:10D900005441525445442045415020617574686526 +:10D910006E7469636174696F6E207374617274658B +:10D92000640000004745545F4D4554484F44000093 +:10D930004541503A204661696C656420746F2069E6 +:10D940006E697469616C697A6520454150206D6526 +:10D9500074686F643A2076656E646F722025752056 +:10D960006D6574686F642025752028257329000073 +:10D970004354524C2D4556454E542D4541502D4D46 +:10D980004554484F44204541502076656E646F727F +:10D99000202575206D6574686F6420257520282505 +:10D9A00073292073656C656374656400454150207C +:10D9B0006465696E697400008002794480027ADAD5 +:10D9C00080027B5880027BA280027CC880027CD2CD +:10D9D00080027AC45750413A20544B495020636F1B +:10D9E000756E7465726D656173757265732073749D +:10D9F0006F707065640000004173736F63696174D8 +:10DA0000656420746F2061206E6577204253533A1D +:10DA10002042535349443D253032783A25303278FC +:10DA20003A253032783A253032783A253032783A11 +:10DA300025303278000000004173736F63696174B0 +:10DA40006564207769746820253032783A25303251 +:10DA5000783A253032783A253032783A25303278A3 +:10DA60003A253032780000005750413A20342D5783 +:10DA700061792048616E647368616B6520666169D5 +:10DA80006C6564202D207072652D73686172656409 +:10DA9000206B6579206D617920626520696E636F06 +:10DAA00072726563740000004354524C2D45564514 +:10DAB0004E542D444953434F4E4E45435445442004 +:10DAC0002D20446973636F6E6E656374206576659F +:10DAD0006E74202D2072656D6F7665206B6579738D +:10DAE000000000004D69636861656C204D4943206A +:10DAF0006661696C757265206465746563746564DC +:10DB000000000000544B495020636F756E746572BD +:10DB10006D65617375726573207374617274656489 +:10DB200000000000000000080000000600000006E1 +:10DB3000496E646578202F204141202F20504D4BA5 +:10DB40004944202F2065787069726174696F6E2076 +:10DB500028696E207365636F6E647329202F206FB0 +:10DB600070706F7274756E69737469630A00000077 +:10DB7000256420253032783A253032783A25303203 +:10DB8000783A253032783A253032783A2530327872 +:10DB9000200000002025642025640A00504D4B2001 +:10DBA0004E616D650000000052534E3A207374615F +:10DBB0007274696E67207072652D61757468656E28 +:10DBC0007469636174696F6E2077697468202530A9 +:10DBD00032783A253032783A253032783A25303268 +:10DBE000783A253032783A253032780052534E3A1E +:10DBF0002070726F63657373696E6720504D4B536D +:10DC0000412063616E646964617465206C6973743A +:10DC10000000000052534E3A206E6F7420696E204F +:10DC20007375697461626C652073746174652066D4 +:10DC30006F72206E6577207072652D6175746865EE +:10DC40006E7469636174696F6E00000052534E3ADE +:10DC500020504D4B53412063616E6469646174656B +:10DC600020253032783A253032783A253032783AE9 +:10DC7000253032783A253032783A253032782073A0 +:10DC8000656C656374656420666F72207072652DC3 +:10DC900061757468656E7469636174696F6E0000A4 +:10DCA00052534E3A20504D4B53412063616E64698C +:10DCB0006461746520253032783A253032783A250F +:10DCC0003032783A253032783A253032783A253079 +:10DCD000327820646F6573206E6F74206E656564A2 +:10DCE000207072652D61757468656E746963617406 +:10DCF000696F6E20616E796D6F72650052534E3A96 +:10DD0000206E6F206D6F72652070656E64696E673E +:10DD100020504D4B53412063616E646964617465AA +:10DD20007300000052534E3A2061646465642050D1 +:10DD30004D4B53412063616368652063616E646984 +:10DD40006461746520253032783A253032783A257E +:10DD50003032783A253032783A253032783A2530E8 +:10DD60003278207072696F202564000052534E3A59 +:10DD7000207072652D61757468656E746963617475 +:10DD8000696F6E207769746820253032783A2530C3 +:10DD900032783A253032783A253032783A253032A6 +:10DDA000783A253032782074696D6564206F757417 +:10DDB00000000000636F6D706C657465642073759E +:10DDC000636365737366756C6C79000052534E3AE9 +:10DDD000206661696C656420746F20676574206DCE +:10DDE00061737465722073657373696F6E206B6500 +:10DDF000792066726F6D207072652D617574682070 +:10DE00004541504F4C207374617465206D616368A7 +:10DE1000696E65730000000052534E3A20707265BF +:10DE20002D61757468656E7469636174696F6E20C5 +:10DE30007769746820253032783A253032783A256F +:10DE40003032783A253032783A253032783A2530F7 +:10DE50003278202573000000800000008002B51C8D +:10DE60008002B50A8002B5008002B4FA8002B4F4E0 +:10DE70008002B4EE8002B4E8000FAC010050F20260 +:10DE8000000FAC02000FAC01000FAC050050F20215 +:10DE9000000FAC040050F2010050F2010050F201FA +:10DEA0000050F2050050F200000FAC00000FAC0370 +:10DEB0000050F200000FAC0449454545203830328F +:10DEC0002E315820286E6F20575041290000000045 +:10DED0005750412F49454545203830322E31582F73 +:10DEE00045415000575041322F4945454520383073 +:10DEF000322E31582F45415000000000575041321A +:10DF00002D50534B000000005745502D3430000079 +:10DF10005745502D313034007061697277697365EF +:10DF20005F6369706865723D25730A67726F75700B +:10DF30005F6369706865723D25730A6B65795F6D13 +:10DF4000676D743D25730A005750413A20257320B0 +:10DF5000287372633D253032783A253032783A257D +:10DF60003032783A253032783A253032783A2530D6 +:10DF7000327829005750413A204B6579206E656709 +:10DF80006F74696174696F6E20636F6D706C657416 +:10DF90006564207769746820253032783A253032FC +:10DFA000783A253032783A253032783A253032784E +:10DFB0003A25303278205B50544B3D25732047542E +:10DFC0004B3D25735D0000005750413A20496E7665 +:10DFD000616C6964204541504F4C2D4B657920663A +:10DFE00072616D65202D206B65795F6461746120BD +:10DFF0006F766572666C6F7720282564203E202539 +:10E000006C752900494520696E20332F34206D73CB +:10E010006720646F6573206E6F74206D6174636830 +:10E02000207769746820494520696E2042656163E4 +:10E030006F6E2F50726F62655265737020286E6F1D +:10E040002049453F29000000494520696E20332FB3 +:10E0500034206D736720646F6573206E6F74206D5C +:10E0600061746368207769746820494520696E206F +:10E07000426561636F6E2F50726F62655265737097 +:10E0800000000000506F737369626C6520646F77E5 +:10E090006E67726164652061747461636B2064658E +:10E0A000746563746564202D2052534E207761732C +:10E0B00020656E61626C656420616E642052534E0F +:10E0C0002049452077617320696E206D7367203386 +:10E0D0002F342C20627574206E6F7420696E20427C +:10E0E0006561636F6E2F50726F6265526573700069 +:10E0F0005750413A204661696C656420746F20670F +:10E100006574206D61737465722073657373696FD4 +:10E110006E206B65792066726F6D204541504F4CC3 +:10E12000207374617465206D616368696E65730046 +:10E130005750413A204B65792068616E647368617D +:10E140006B652061626F7274656400005750413ADC +:10E15000204661696C656420746F20676574207265 +:10E16000616E646F6D206461746120666F7220530C +:10E170004E6F6E6365000000506169727769736568 +:10E18000206B657920657870616E73696F6E000031 +:10E190005750413A2047726F75702072656B6579F0 +:10E1A000696E6720636F6D706C6574656420776954 +:10E1B000746820253032783A253032783A2530326A +:10E1C000783A253032783A253032783A253032782C +:10E1D000205B47544B3D25735D00000000000000AC +:10E1E000000000000050F204000FAC02000FAC0170 +:10E1F00052096AD53036A538BF40A39E81F3D7FBBC +:10E200007CE339829B2FFF87348E4344C4DEE9CB05 +:10E21000547B9432A6C2233DEE4C950B42FAC34E7A +:10E22000082EA16628D924B2765BA2496D8BD12530 +:10E2300072F8F66486689816D4A45CCC5D65B692D4 +:10E240006C704850FDEDB9DA5E154657A78D9D8478 +:10E2500090D8AB008CBCD30AF7E45805B8B3450698 +:10E26000D02C1E8FCA3F0F02C1AFBD0301138A6BB2 +:10E270003A9111414F67DCEA97F2CFCEF0B4E673E2 +:10E2800096AC7422E7AD3585E2F937E81C75DF6E90 +:10E2900047F11A711D29C5896FB7620EAA18BE1BF6 +:10E2A000FC563E4BC6D279209ADBC0FE78CD5AF49C +:10E2B0001FDDA8338807C731B11210592780EC5FE2 +:10E2C00060517FA919B54A0D2DE57A9F93C99CEF3E +:10E2D000A0E03B4DAE2AF5B0C8EBBB3C835399613F +:10E2E000172B047EBA77D626E169146355210C7D7D +:10E2F00001020408102040801B36000051F4A75092 +:10E300007E4165531A17A4C33A275E963BAB6BCB8D +:10E310001F9D45F1ACFA58AB4BE303932030FA55FF +:10E32000AD766DF688CC7691F5024C254FE5D7FC9D +:10E33000C52ACBD726354480B562A38FDEB15A49B2 +:10E3400025BA1B6745EA0E985DFEC0E1C32F750232 +:10E35000814CF0128D4697A36BD3F9C6038F5FE70C +:10E3600015929C95BF6D7AEB955259DAD4BE832DE8 +:10E37000587421D349E069298EC9C84475C2896A95 +:10E38000F48E797899583E6B27B971DDBEE14FB6AE +:10E39000F088AD17C920AC667DCE3AB463DF4A1869 +:10E3A000E51A31829751336062537F45B16477E05B +:10E3B000BB6BAE84FE81A01CF9082B947048685892 +:10E3C0008F45FD1994DE6C87527BF8B7AB73D3236E +:10E3D000724B02E2E31F8F576655AB2AB2EB280758 +:10E3E0002FB5C20386C57B9AD33708A5302887F29C +:10E3F00023BFA5B202036ABAED16825C8ACF1C2B3A +:10E40000A779B492F307F2F04E69E2A165DAF4CD90 +:10E410000605BED5D134621FC4A6FE8A342E539D94 +:10E42000A2F355A0058AE132A4F6EB750B83EC3913 +:10E430004060EFAA5E719F06BD6E10513E218AF9C1 +:10E4400096DD063DDD3E05AE4DE6BD4691548DB5EB +:10E4500071C45D050406D46F605015FF1998FB2444 +:10E46000D6BDE997894043CC67D99E77B0E842BDD5 +:10E4700007898B88E7195B3879C8EEDBA17C0A47EE +:10E480007C420FE9F8841EC90000000009808683E1 +:10E49000322BED481E1170AC6C5A724EFD0EFFFB14 +:10E4A0000F8538563DAED51E362D39270A0FD96453 +:10E4B000685CA6219B5B54D124362E3A0C0A67B1C6 +:10E4C0009357E70FB4EE96D21B9B919E80C0C54F29 +:10E4D00061DC20A25A774B691C121A16E293BA0A21 +:10E4E000C0A02AE53C22E043121B171D0E090D0BAC +:10E4F000F28BC7AD2DB6A8B9141EA9C857F119855E +:10E50000AF75074CEE99DDBBA37F60FDF701269F39 +:10E510005C72F5BC44663BC55BFB7E348B4329765D +:10E52000CB23C6DCB6EDFC68B8E4F163D731DCCAB6 +:10E53000426385101397224084C61120854A247DAA +:10E54000D2BB3DF8AEF93211C729A16D1D9E2F4BEC +:10E55000DCB230F30D8652EC77C1E3D02BB3166CEE +:10E56000A970B999119448FA47E96422A8FC8CC4AF +:10E57000A0F03F1A567D2CD8223390EF87494EC722 +:10E58000D938D1C18CCAA2FE98D40B36A6F581CF5A +:10E59000A57ADE28DAB78E263FADBFA42C3A9DE4DB +:10E5A0005078920D6A5FCC9B547E4662F68D13C202 +:10E5B00090D8B8E82E39F75E82C3AFF59F5D80BE74 +:10E5C00069D0937C6FD52DA9CF2512B3C8AC993BE8 +:10E5D00010187DA7E89C636EDB3BBB7BCD267809DA +:10E5E0006E5918F4EC9AB701834F9AA8E6956E65B8 +:10E5F000AAFFE67E21BCCF08EF15E8E6BAE79BD973 +:10E600004A6F36CEEA9F09D429B07CD631A4B2AF86 +:10E610002A3F2331C6A5943035A266C0744EBC375C +:10E62000FC82CAA6E090D0B033A7D815F104984A6E +:10E6300041ECDAF77FCD500E1791F62F764DD68D3F +:10E6400043EFB04DCCAA4D54E49604DF9ED1B5E320 +:10E650004C6A881BC12C1FB84665517F9D5EEA0439 +:10E66000018C355DFA877473FB0B412EB3671D5A1D +:10E6700092DBD252E91056336DD647139AD7618C8C +:10E6800037A10C7A59F8148EEB133C89CEA927EEEA +:10E69000B761C935E11CE5ED7A47B13C9CD2DF5941 +:10E6A00055F2733F1814CE7973C737BF53F7CDEACD +:10E6B0005FFDAA5BDF3D6F147844DB86CAAFF38150 +:10E6C000B968C43E3824342CC2A3405F161DC372FF +:10E6D000BCE2250C283C498BFF0D954139A80171FE +:10E6E000080CB3DED8B4E49C6456C1907BCB846143 +:10E6F000D532B670486C5C74D0B85742C66363A517 +:10E70000F87C7C84EE777799F67B7B8DFFF2F20DB7 +:10E71000D66B6BBDDE6F6FB191C5C55460303050A4 +:10E7200002010103CE6767A9562B2B7DE7FEFE1978 +:10E73000B5D7D7624DABABE6EC76769A8FCACA45B1 +:10E740001F82829D89C9C940FA7D7D87EFFAFA153B +:10E75000B25959EB8E4747C9FBF0F00B41ADADEC18 +:10E76000B3D4D4675FA2A2FD45AFAFEA239C9CBFA0 +:10E7700053A4A4F7E47272969BC0C05B75B7B7C28E +:10E78000E1FDFD1C3D9393AE4C26266A6C36365A4D +:10E790007E3F3F41F5F7F70283CCCC4F6834345CC1 +:10E7A00051A5A5F4D1E5E534F9F1F108E2717193D1 +:10E7B000ABD8D873623131532A15153F0804040CC5 +:10E7C00095C7C752462323659DC3C35E30181828DA +:10E7D000379696A10A05050F2F9A9AB50E070709D5 +:10E7E000241212361B80809BDFE2E23DCDEBEB264C +:10E7F0004E2727697FB2B2CDEA75759F1209091BB2 +:10E800001D83839E582C2C74341A1A2E361B1B2DF4 +:10E81000DC6E6EB2B45A5AEE5BA0A0FBA45252F664 +:10E82000763B3B4DB7D6D6617DB3B3CE5229297B1B +:10E83000DDE3E33E5E2F2F7113848497A65353F5D7 +:10E84000B9D1D16800000000C1EDED2C402020605E +:10E85000E3FCFC1F79B1B1C8B65B5BEDD46A6ABE5C +:10E860008DCBCB4667BEBED97239394B944A4ADE4E +:10E87000984C4CD4B05858E885CFCF4ABBD0D06B19 +:10E88000C5EFEF2A4FAAAAE5EDFBFB16864343C569 +:10E890009A4D4DD766333355118585948A4545CFBA +:10E8A000E9F9F91004020206FE7F7F81A05050F0C2 +:10E8B000783C3C44259F9FBA4BA8A8E3A25151F352 +:10E8C0005DA3A3FE804040C0058F8F8A3F9292AD2A +:10E8D000219D9DBC70383848F1F5F50463BCBCDF60 +:10E8E00077B6B6C1AFDADA75422121632010103055 +:10E8F000E5FFFF1AFDF3F30EBFD2D26D81CDCD4CF3 +:10E90000180C0C1426131335C3ECEC2FBE5F5FE11B +:10E91000359797A2884444CC2E17173993C4C4570F +:10E9200055A7A7F2FC7E7E827A3D3D47C86464AC61 +:10E93000BA5D5DE73219192BE6737395C06060A06C +:10E94000198181989E4F4FD1A3DCDC7F442222663F +:10E95000542A2A7E3B9090AB0B8888838C4646CA0B +:10E96000C7EEEE296BB8B8D32814143CA7DEDE79C5 +:10E97000BC5E5EE2160B0B1DADDBDB76DBE0E03B45 +:10E9800064323256743A3A4E140A0A1E924949DBEE +:10E990000C06060A4824246CB85C5CE49FC2C25D85 +:10E9A000BDD3D36E43ACACEFC46262A6399191A8DB +:10E9B000319595A4D3E4E437F279798BD5E7E73242 +:10E9C0008BC8C8436E373759DA6D6DB7018D8D8CA2 +:10E9D000B1D5D5649C4E4ED249A9A9E0D86C6CB48F +:10E9E000AC5656FAF3F4F407CFEAEA25CA6565AFE8 +:10E9F000F47A7A8E47AEAEE9100808186FBABAD525 +:10EA0000F07878884A25256F5C2E2E72381C1C24DD +:10EA100057A6A6F173B4B4C797C6C651CBE8E8238E +:10EA2000A1DDDD7CE874749C3E1F1F21964B4BDDFD +:10EA300061BDBDDC0D8B8B860F8A8A85E07070907E +:10EA40007C3E3E4271B5B5C4CC6666AA904848D8B3 +:10EA500006030305F7F6F6011C0E0E12C26161A350 +:10EA60006A35355FAE5757F969B9B9D017868691BF +:10EA700099C1C1583A1D1D27279E9EB9D9E1E13899 +:10EA8000EBF8F8132B9898B322111133D26969BBB4 +:10EA9000A9D9D970078E8E89339494A72D9B9BB6E4 +:10EAA0003C1E1E2215878792C9E9E92087CECE49F0 +:10EAB000AA5555FF50282878A5DFDF7A038C8C8F64 +:10EAC00059A1A1F8098989801A0D0D1765BFBFDA10 +:10EAD000D7E6E631844242C6D06868B8824141C375 +:10EAE000299999B05A2D2D771E0F0F117BB0B0CBFD +:10EAF000A85454FC6DBBBBD62C16163A002020201F +:10EB000020202020202028282828282020202020DD +:10EB100020202020202020202020202020881010AD +:10EB20001010101010101010101010101004040409 +:10EB300004040404040404101010101010104141C7 +:10EB400041414141010101010101010101010101B5 +:10EB500001010101010101011010101010104242C9 +:10EB60004242424202020202020202020202020285 +:10EB70000202020202020202101010102000000025 +:10EB80000000000000000000000000000000000085 +:10EB90000000000000000000000000000000000075 +:10EBA0000000000000000000000000000000000065 +:10EBB0000000000000000000000000000000000055 +:10EBC0000000000000000000000000000000000045 +:10EBD0000000000000000000000000000000000035 +:10EBE0000000000000000000000000000000000025 +:10EBF0000000000000000000000000000000000015 +:10EC00002D2D0000504F5349584C595F434F5252DD +:10EC10004543540025733A206F7074696F6E20600D +:10EC200025732720697320616D626967756F75733D +:10EC30002028636F756C6420626520602D2D25731C +:10EC400027206F7220602D2D257327290A000000D0 +:10EC500025733A20696E76616C6964206F707469FF +:10EC60006F6E202D2D20602D2563270A00000000E7 +:10EC700025733A20617267756D656E7420726571D7 +:10EC8000756972656420666F72206F7074696F6E4B +:10EC9000206000002D2D2573270A00002D256327F5 +:10ECA0000A00000043000000000004A88002F4668F +:10ECB0008002F4888002F2B08002F2E88002F4520E +:10ECC0008002F4508002F3FE8002F4268002F3DC1E +:10ECD0008002F3DC8002F3CC8002F3DC8002F3EAF2 +:10ECE0008002F3EA8002F3DC3030303030303030F4 +:10ECF000303030303030303001020B040B0506016B +:10ED00000B01020B040B0506010B0B0B03040B0597 +:10ED10000B0B0B0B0B0B040B050B0B0B0B0B0B0B50 +:10ED20000B0B0B0B0B05080B040B0B070B0B0B0949 +:10ED30000B040B050B0B0B0B0A0B040B0B0B0B0B38 +:10ED40000B0B0B040B0B0B0B0B0B0B030B0B0B0B22 +:10ED50000B0B0B0B080B0B0B0B0B0B00000000003D +:10ED6000000000000001000304000000000001009A +:10ED7000030400000000000007030400000000007E +:10ED80000000030400000000000000000400000078 +:10ED90000000020003040000000000010005060559 +:10EDA0000000000001000506000000000000000354 +:10EDB0000400000000000008000000000000000047 +:10EDC000080000000000000000000000000000003B +:10EDD0003031323334353637383941424344454691 +:10EDE0000000000030313233343536373839616253 +:10EDF0006364656600000000202020202020202081 +:10EE000020202020202020200808080808080808C2 +:10EE10000808080808080808080808080808080872 +:10EE2000080808080808080807080807020808076B +:10EE30000808060708070508000101010101010192 +:10EE40000101080808080808080408040404040468 +:10EE50000808080803080804080808040804080843 +:10EE6000040808080808080808040804040404043E +:10EE70000304030803080404040308040304080843 +:10EE8000040803080808080808080808080808080B +:10EE900008080808080808080808080808080808F2 +:10EEA00008080808080808080808080808080808E2 +:10EEB00008080808080808080808080808080808D2 +:10EEC00008080808080808080808080808080808C2 +:10EED00008080808080808080808080808080808B2 +:10EEE00008080808080808080808080808080808A2 +:10EEF0000808080808080808080808080808080892 +:10EF00000808080808080808000A000100020003B1 +:10EF1000000400050006000700080009000A000BB5 +:10EF2000000C000D000E000F00100000000000009B +:10EF300000000000000000000000000000000000D1 +:10EF400000000000000000000000000000000000C1 +:10EF500000000000000000000000000000000000B1 +:10EF600000000000000000000000000000000000A1 +:10EF70000000000000000000000000000000000091 +:10EF800000000000000000000000000080037FB4CB +:10EF900080037E2080037E2080037E2080037E20ED +:10EFA00080037E2080037E2080037E2080037E20DD +:10EFB00080037E20FFFFFFFFFFFFFFFF49534F2D20 +:10EFC000383835392D310000800333228003334433 +:10EFD0008003316C800331A48003330E8003330C33 +:10EFE000800332BA800332E2800332988003329881 +:10EFF0008003328880033298800332A6800332A6D1 +:10F00000800332988003363480034AA480034AA4E4 +:10F010008003364480034AA480034AA480034AA4A0 +:10F0200080034AA480034AA480034AA4800336488C +:10F030008003371C80034AA48003371880033724D9 +:10F0400080034AA480033842800338468003384650 +:10F0500080033846800338468003384680033846AC +:10F0600080033846800338468003384680034AA42C +:10F0700080034AA480034AA480034AA480034AA4CC +:10F0800080034AA480034AA480034AA480034AA4BC +:10F0900080034AA48003394480033B9680034AA43A +:10F0A00080033B9680034AA480034AA480034AA4B9 +:10F0B00080034AA48003387880034AA480034AA4CA +:10F0C0008003416280034AA480034AA480034AA4C7 +:10F0D00080034AA480034AA48003452680034AA4EF +:10F0E00080034AA48003361A80034AA480034AA4FA +:10F0F00080034AA480034AA480034AA480034AA44C +:10F1000080034AA480034AA480034AA480034AA43B +:10F11000800338988003395A80033B9680033B96DE +:10F1200080033B968003387C8003395A80034AA4CD +:10F1300080034AA48003388080034AA480033FA24E +:10F1400080034178800343A48003389480034AA459 +:10F150008003445880034AA48003453C80034AA4AA +:10F1600080034AA48003476E01020B040B050601CD +:10F170000B01020B040B0506010B0B0B03040B0523 +:10F180000B0B0B0B0B0B040B050B0B0B0B0B0B0BDC +:10F190000B0B0B0B0B05080B040B0B070B0B0B09D5 +:10F1A0000B040B050B0B0B0B0A0B040B0B0B0B0BC4 +:10F1B0000B0B0B040B0B0B0B0B0B0B030B0B0B0BAE +:10F1C0000B0B0B0B080B0B0B0B0B0B0000000000C9 +:10F1D0000000000000010003040000000000010026 +:10F1E000030400000000000007030400000000000A +:10F1F0000000030400000000000000000400000004 +:10F2000000000200030400000000000100050605E4 +:10F2100000000000010005060000000000000003DF +:10F2200004000000000000080000000000000000D2 +:10F2300008000000000000000000000000000000C6 +:10F24000494E4600696E66004E414E006E616E008A +:10F2500020202020202020202020202020202020AE +:10F26000303030303030303030303030303030309E +:10F27000080808080808080808080808080808080E +:10F2800008080808080808080808080808080808FE +:10F2900007080807020808070808060708070508FE +:10F2A0000001010101010101010108080808080825 +:10F2B00008040804040404040808080803080804EF +:10F2C00008080804080408080408080808080808CA +:10F2D00008040804040404040304030803080404E1 +:10F2E00004030804030408080408030808080808BD +:10F2F000080808080808080808080808080808088E +:10F30000080808080808080808080808080808087D +:10F31000080808080808080808080808080808086D +:10F32000080808080808080808080808080808085D +:10F33000080808080808080808080808080808084D +:10F34000080808080808080808080808080808083D +:10F35000080808080808080808080808080808082D +:10F36000080808080808080808080808080808081D +:10F37000496E66696E697479000000004E614E0046 +:10F3800000000005000000190000007D3FF00000B3 +:10F390000000000040240000000000004059000070 +:10F3A00000000000408F40000000000040C38800C3 +:10F3B0000000000040F86A0000000000412E848038 +:10F3C00000000000416312D0000000004197D78484 +:10F3D0000000000041CDCD65000000004202A05FAA +:10F3E0002000000042374876E8000000426D1A9481 +:10F3F000A200000042A2309CE540000042D6BCC4FE +:10F400001E900000430C6BF5263400004341C37985 +:10F4100037E080004376345785D8A00043ABC16DF8 +:10F42000674EC80043E158E460913D004415AF1DAC +:10F4300078B58C40444B1AE4D6E2EF504480F0CFCC +:10F44000064DD59244B52D02C7E14AF644EA784309 +:10F4500079D99DB44341C37937E080004693B8B56C +:10F46000B5056E174D384F03E93FF9F55A827748D5 +:0CF47000F9301D3275154FDD7F73BF3C75 +:10F480000000000455736167653A2074746370204E +:10F490002D742F2D72205B2D6F7074696F6E735DEC +:10F4A00020686F73740A20202020202020202D6CDB +:10F4B0002020202020206C656E677468206F6620F5 +:10F4C00062756673207772697474656E20746F203C +:10F4D0006E6574776F726B202864656661756C74F5 +:10F4E0002031303234290A20202020202020202DD5 +:10F4F0006E2020202020206E756D626572206F6660 +:10F500002062756673207772697474656E20746FFB +:10F51000206E6574776F726B202864656661756C08 +:10F52000742031303234290A20202020202020204D +:10F530002D70202020202020706F7274206E756D39 +:10F5400062657220746F2073656E6420746F20286A +:10F5500064656661756C742032303030290A202071 +:10F560002020202020202D752020202020207564A0 +:10F57000700A20202020202020202D7620202020EE +:10F580002020766572626F73650A000080039954CB +:10F59000000000000000000000000000000000006B +:10F5A000000000000000000000000000000000005B +:10F5B000000000000000000000000000000000004B +:10F5C000000000000000000000000000000000003B +:10F5D000000000000000000000000000000000002B +:10F5E000000000000000000000000000000000001B +:10F5F000000000000000000000000000000000000B +:10F6000000000000000000000000000000000000FA +:10F6100000000000000000000000000000000000EA +:10F6200000000000000000000000000000000000DA +:10F6300000000000000000000000000000000000CA +:10F6400000000000000000000000000000000000BA +:10F6500000000000000000000000000000000000AA +:10F660000000000400000000ABCD00000000196E97 +:10F6700010000000FFFFFFFFFFFFFFFFFF7590007E +:10F68000000001FFFFFFFFFEFFFFFFFFFF751000FF +:10F69000000001FFFFFFFFFE00050000800149ECB4 +:10F6A000800149EC800149EC800149EC0000000038 +:10F6B000000002340000000C02040B0C1216182487 +:10F6C0003048606C000000000000000000000000F6 +:10F6D00000000010010000146D3E86B0FFFFFFFF28 +:10F6E000FFFF0000000003E800000001000000012F +:10F6F00000000320000000010000000000000008DE +:10F70000000000020000006400000000000000058E +:10F710000000000F000000050000000F000013882B +:10F7200000001388000007D00000138800003E800E +:10F73000000000020000000C02040B0C121618243A +:10F740003048606C00000000000000000000000075 +:10F7500000000000000000000D0102030405060780 +:10F7600008090A0B0C0D000000000011FF0000004A +:10F770000000000000000000000000000000000089 +:10F780000000000000000000000000000000FFFF7B +:10F79000FFFFFFFF00000001000000030000000168 +:10F7A0000000000100000000000000010000000156 +:10F7B0000000000100000001000000000000000146 +:10F7C0000000000A00000005000000000000000525 +:10F7D00000000000FFFFFFFF00000001000000002C +:10F7E00000000002FF000000000000000000000018 +:10F7F0000000000000000000000000000000000009 +:10F80000000000000000FFFFFFFFFFFF00000001FD +:10F810000000000300000000000007D000000064AA +:10F8200003010100060200000000000C82848B8CA2 +:10F83000129618243048606C0000000000000000A0 +:10F8400000000000000000000000000100000001B6 +:10F85000000000010014000000000014000007D0A8 +:10F860000000000000000001000000000000000691 +:10F8700000000001FFFFFFFF0A00000064756D6DCE +:10F88000795F7373696400000000000000000000ED +:10F890000000000000000000000000000000000068 +:10F8A000303030313032303330343035303630373C +:10F8B0003038303930613062306330643065306602 +:10F8C0003130313131323133313431353136313714 +:10F8D00031383139316131623163316431653166DA +:10F8E00000000000000000028003D670000000004D +:10F8F000800255EC80025614800256588002569CB5 +:10F90000800256AA800255F4800256B6800256D074 +:10F910008002614C8003EAFD0000003F000000010E +:10F920008003EF2C8003EF4C8003EF6C000000009D +:10F9300000000000000000000000000000000000C7 +:10F940008003ECA4000000000000000000000000A4 +:10F9500000000000000000000000000000000000A7 +:10F960000000000000000000000000000000000097 +:10F970000000000000000000000000000000000087 +:10F980000000000000000000000000000000000077 +:10F990000000000000000000000000000000000067 +:10F9A0000000000000000000000000000000000057 +:10F9B0000000000000000000000000000000000047 +:10F9C0000000000000000000000000000000000037 +:10F9D0000000000000000000000000000000000027 +:10F9E0000000000000000000000000000000000017 +:10F9F0000000000000000000000000000000000007 +:10FA000000000000000000000000000000000000F6 +:10FA1000000004A800000000000000000000059C99 +:10FA20000000059C000005A4000005A4000005AC32 +:10FA3000000005AC000005B4000005B4000005BCE2 +:10FA4000000005BC000005C4000005C4000005CC92 +:10FA5000000005CC000005D4000005D4000005DC42 +:10FA6000000005DC000005E4000005E4000005ECF2 +:10FA7000000005EC000005F4000005F4000005FCA2 +:10FA8000000005FC00000604000006040000060C4F +:10FA90000000060C00000614000006140000061CFE +:10FAA0000000061C00000624000006240000062CAE +:10FAB0000000062C00000634000006340000063C5E +:10FAC0000000063C00000644000006440000064C0E +:10FAD0000000064C00000654000006540000065CBE +:10FAE0000000065C00000664000006640000066C6E +:10FAF0000000066C00000674000006740000067C1E +:10FB00000000067C00000684000006840000068CCD +:10FB10000000068C00000694000006940000069C7D +:10FB20000000069C000006A4000006A4000006AC2D +:10FB3000000006AC000006B4000006B4000006BCDD +:10FB4000000006BC000006C4000006C4000006CC8D +:10FB5000000006CC000006D4000006D4000006DC3D +:10FB6000000006DC000006E4000006E4000006ECED +:10FB7000000006EC000006F4000006F4000006FC9D +:10FB8000000006FC00000704000007040000070C4A +:10FB90000000070C00000714000007140000071CF9 +:10FBA0000000071C00000724000007240000072CA9 +:10FBB0000000072C00000734000007340000073C59 +:10FBC0000000073C00000744000007440000074C09 +:10FBD0000000074C00000754000007540000075CB9 +:10FBE0000000075C00000764000007640000076C69 +:10FBF0000000076C00000774000007740000077C19 +:10FC00000000077C00000784000007840000078CC8 +:10FC10000000078C00000794000007940000079C78 +:10FC20000000079C000007A4000007A4000007AC28 +:10FC3000000007AC000007B4000007B4000007BCD8 +:10FC4000000007BC000007C4000007C4000007CC88 +:10FC5000000007CC000007D4000007D4000007DC38 +:10FC6000000007DC000007E4000007E4000007ECE8 +:10FC7000000007EC000007F4000007F4000007FC98 +:10FC8000000007FC00000804000008040000080C45 +:10FC90000000080C00000814000008140000081CF4 +:10FCA0000000081C00000824000008240000082CA4 +:10FCB0000000082C00000834000008340000083C54 +:10FCC0000000083C00000844000008440000084C04 +:10FCD0000000084C00000854000008540000085CB4 +:10FCE0000000085C00000864000008640000086C64 +:10FCF0000000086C00000874000008740000087C14 +:10FD00000000087C00000884000008840000088CC3 +:10FD10000000088C00000894000008940000089C73 +:10FD20000000089C000008A4000008A4000008AC23 +:10FD3000000008AC000008B4000008B4000008BCD3 +:10FD4000000008BC000008C4000008C4000008CC83 +:10FD5000000008CC000008D4000008D4000008DC33 +:10FD6000000008DC000008E4000008E4000008ECE3 +:10FD7000000008EC000008F4000008F4000008FC93 +:10FD8000000008FC00000904000009040000090C40 +:10FD90000000090C00000914000009140000091CEF +:10FDA0000000091C00000924000009240000092C9F +:10FDB0000000092C00000934000009340000093C4F +:10FDC0000000093C00000944000009440000094CFF +:10FDD0000000094C00000954000009540000095CAF +:10FDE0000000095C00000964000009640000096C5F +:10FDF0000000096C00000974000009740000097C0F +:10FE00000000097C00000984000009840000098CBE +:10FE10000000098C00000994000009940002000011 +:0CFE2000FFFFFFFF0000000100007AFC63 +:040000058000000077 +:00000001FF diff --git a/external/arduino/avr/firmwares/wifishield/binary/wifiHD_2_1.elf b/external/arduino/avr/firmwares/wifishield/binary/wifiHD_2_1.elf new file mode 100644 index 000000000..9217d48ae Binary files /dev/null and b/external/arduino/avr/firmwares/wifishield/binary/wifiHD_2_1.elf differ diff --git a/external/arduino/avr/firmwares/wifishield/binary/wifi_dnld.elf b/external/arduino/avr/firmwares/wifishield/binary/wifi_dnld.elf new file mode 100644 index 000000000..11ec3ddc7 Binary files /dev/null and b/external/arduino/avr/firmwares/wifishield/binary/wifi_dnld.elf differ diff --git a/external/arduino/avr/firmwares/wifishield/binary/wifi_dnld.hex b/external/arduino/avr/firmwares/wifishield/binary/wifi_dnld.hex new file mode 100644 index 000000000..e099ccab0 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/binary/wifi_dnld.hex @@ -0,0 +1,10470 @@ +:0200000480007A +:10000000E08F100000000000000000000000000071 +:1000100000000000000000000000000000000000E0 +:1000200000000000000000000000000000000000D0 +:1000300000000000000000000000000000000000C0 +:1000400000000000000000000000000000000000B0 +:1000500000000000000000000000000000000000A0 +:100060000000000000000000000000000000000090 +:100070000000000000000000000000000000000080 +:100080000000000000000000000000000000000070 +:100090000000000000000000000000000000000060 +:1000A0000000000000000000000000000000000050 +:1000B0000000000000000000000000000000000040 +:1000C0000000000000000000000000000000000030 +:1000D0000000000000000000000000000000000020 +:1000E0000000000000000000000000000000000010 +:1000F0000000000000000000000000000000000000 +:1001000000000000000000000000000000000000EF +:1001100000000000000000000000000000000000DF +:1001200000000000000000000000000000000000CF +:1001300000000000000000000000000000000000BF +:1001400000000000000000000000000000000000AF +:10015000000000000000000000000000000000009F +:10016000000000000000000000000000000000008F +:10017000000000000000000000000000000000007F +:10018000000000000000000000000000000000006F +:10019000000000000000000000000000000000005F +:1001A000000000000000000000000000000000004F +:1001B000000000000000000000000000000000003F +:1001C000000000000000000000000000000000002F +:1001D000000000000000000000000000000000001F +:1001E000000000000000000000000000000000000F +:1001F00000000000000000000000000000000000FF +:1002000000000000000000000000000000000000EE +:1002100000000000000000000000000000000000DE +:1002200000000000000000000000000000000000CE +:1002300000000000000000000000000000000000BE +:1002400000000000000000000000000000000000AE +:10025000000000000000000000000000000000009E +:10026000000000000000000000000000000000008E +:10027000000000000000000000000000000000007E +:10028000000000000000000000000000000000006E +:10029000000000000000000000000000000000005E +:1002A000000000000000000000000000000000004E +:1002B000000000000000000000000000000000003E +:1002C000000000000000000000000000000000002E +:1002D000000000000000000000000000000000001E +:1002E000000000000000000000000000000000000E +:1002F00000000000000000000000000000000000FE +:1003000000000000000000000000000000000000ED +:1003100000000000000000000000000000000000DD +:1003200000000000000000000000000000000000CD +:1003300000000000000000000000000000000000BD +:1003400000000000000000000000000000000000AD +:10035000000000000000000000000000000000009D +:10036000000000000000000000000000000000008D +:10037000000000000000000000000000000000007D +:10038000000000000000000000000000000000006D +:10039000000000000000000000000000000000005D +:1003A000000000000000000000000000000000004D +:1003B000000000000000000000000000000000003D +:1003C000000000000000000000000000000000002D +:1003D000000000000000000000000000000000001D +:1003E000000000000000000000000000000000000D +:1003F00000000000000000000000000000000000FD +:1004000000000000000000000000000000000000EC +:1004100000000000000000000000000000000000DC +:1004200000000000000000000000000000000000CC +:1004300000000000000000000000000000000000BC +:1004400000000000000000000000000000000000AC +:10045000000000000000000000000000000000009C +:10046000000000000000000000000000000000008C +:10047000000000000000000000000000000000007C +:10048000000000000000000000000000000000006C +:10049000000000000000000000000000000000005C +:1004A000000000000000000000000000000000004C +:1004B000000000000000000000000000000000003C +:1004C000000000000000000000000000000000002C +:1004D000000000000000000000000000000000001C +:1004E000000000000000000000000000000000000C +:1004F00000000000000000000000000000000000FC +:1005000000000000000000000000000000000000EB +:1005100000000000000000000000000000000000DB +:1005200000000000000000000000000000000000CB +:1005300000000000000000000000000000000000BB +:1005400000000000000000000000000000000000AB +:10055000000000000000000000000000000000009B +:10056000000000000000000000000000000000008B +:10057000000000000000000000000000000000007B +:10058000000000000000000000000000000000006B +:10059000000000000000000000000000000000005B +:1005A000000000000000000000000000000000004B +:1005B000000000000000000000000000000000003B +:1005C000000000000000000000000000000000002B +:1005D000000000000000000000000000000000001B +:1005E000000000000000000000000000000000000B +:1005F00000000000000000000000000000000000FB +:1006000000000000000000000000000000000000EA +:1006100000000000000000000000000000000000DA +:1006200000000000000000000000000000000000CA +:1006300000000000000000000000000000000000BA +:1006400000000000000000000000000000000000AA +:10065000000000000000000000000000000000009A +:10066000000000000000000000000000000000008A +:10067000000000000000000000000000000000007A +:10068000000000000000000000000000000000006A +:10069000000000000000000000000000000000005A +:1006A000000000000000000000000000000000004A +:1006B000000000000000000000000000000000003A +:1006C000000000000000000000000000000000002A +:1006D000000000000000000000000000000000001A +:1006E000000000000000000000000000000000000A +:1006F00000000000000000000000000000000000FA +:1007000000000000000000000000000000000000E9 +:1007100000000000000000000000000000000000D9 +:1007200000000000000000000000000000000000C9 +:1007300000000000000000000000000000000000B9 +:1007400000000000000000000000000000000000A9 +:100750000000000000000000000000000000000099 +:100760000000000000000000000000000000000089 +:100770000000000000000000000000000000000079 +:100780000000000000000000000000000000000069 +:100790000000000000000000000000000000000059 +:1007A0000000000000000000000000000000000049 +:1007B0000000000000000000000000000000000039 +:1007C0000000000000000000000000000000000029 +:1007D0000000000000000000000000000000000019 +:1007E0000000000000000000000000000000000009 +:1007F00000000000000000000000000000000000F9 +:1008000000000000000000000000000000000000E8 +:1008100000000000000000000000000000000000D8 +:1008200000000000000000000000000000000000C8 +:1008300000000000000000000000000000000000B8 +:1008400000000000000000000000000000000000A8 +:100850000000000000000000000000000000000098 +:100860000000000000000000000000000000000088 +:100870000000000000000000000000000000000078 +:100880000000000000000000000000000000000068 +:100890000000000000000000000000000000000058 +:1008A0000000000000000000000000000000000048 +:1008B0000000000000000000000000000000000038 +:1008C0000000000000000000000000000000000028 +:1008D0000000000000000000000000000000000018 +:1008E0000000000000000000000000000000000008 +:1008F00000000000000000000000000000000000F8 +:1009000000000000000000000000000000000000E7 +:1009100000000000000000000000000000000000D7 +:1009200000000000000000000000000000000000C7 +:1009300000000000000000000000000000000000B7 +:1009400000000000000000000000000000000000A7 +:100950000000000000000000000000000000000097 +:100960000000000000000000000000000000000087 +:100970000000000000000000000000000000000077 +:100980000000000000000000000000000000000067 +:100990000000000000000000000000000000000057 +:1009A0000000000000000000000000000000000047 +:1009B0000000000000000000000000000000000037 +:1009C0000000000000000000000000000000000027 +:1009D0000000000000000000000000000000000017 +:1009E0000000000000000000000000000000000007 +:1009F00000000000000000000000000000000000F7 +:100A000000000000000000000000000000000000E6 +:100A100000000000000000000000000000000000D6 +:100A200000000000000000000000000000000000C6 +:100A300000000000000000000000000000000000B6 +:100A400000000000000000000000000000000000A6 +:100A50000000000000000000000000000000000096 +:100A60000000000000000000000000000000000086 +:100A70000000000000000000000000000000000076 +:100A80000000000000000000000000000000000066 +:100A90000000000000000000000000000000000056 +:100AA0000000000000000000000000000000000046 +:100AB0000000000000000000000000000000000036 +:100AC0000000000000000000000000000000000026 +:100AD0000000000000000000000000000000000016 +:100AE0000000000000000000000000000000000006 +:100AF00000000000000000000000000000000000F6 +:100B000000000000000000000000000000000000E5 +:100B100000000000000000000000000000000000D5 +:100B200000000000000000000000000000000000C5 +:100B300000000000000000000000000000000000B5 +:100B400000000000000000000000000000000000A5 +:100B50000000000000000000000000000000000095 +:100B60000000000000000000000000000000000085 +:100B70000000000000000000000000000000000075 +:100B80000000000000000000000000000000000065 +:100B90000000000000000000000000000000000055 +:100BA0000000000000000000000000000000000045 +:100BB0000000000000000000000000000000000035 +:100BC0000000000000000000000000000000000025 +:100BD0000000000000000000000000000000000015 +:100BE0000000000000000000000000000000000005 +:100BF00000000000000000000000000000000000F5 +:100C000000000000000000000000000000000000E4 +:100C100000000000000000000000000000000000D4 +:100C200000000000000000000000000000000000C4 +:100C300000000000000000000000000000000000B4 +:100C400000000000000000000000000000000000A4 +:100C50000000000000000000000000000000000094 +:100C60000000000000000000000000000000000084 +:100C70000000000000000000000000000000000074 +:100C80000000000000000000000000000000000064 +:100C90000000000000000000000000000000000054 +:100CA0000000000000000000000000000000000044 +:100CB0000000000000000000000000000000000034 +:100CC0000000000000000000000000000000000024 +:100CD0000000000000000000000000000000000014 +:100CE0000000000000000000000000000000000004 +:100CF00000000000000000000000000000000000F4 +:100D000000000000000000000000000000000000E3 +:100D100000000000000000000000000000000000D3 +:100D200000000000000000000000000000000000C3 +:100D300000000000000000000000000000000000B3 +:100D400000000000000000000000000000000000A3 +:100D50000000000000000000000000000000000093 +:100D60000000000000000000000000000000000083 +:100D70000000000000000000000000000000000073 +:100D80000000000000000000000000000000000063 +:100D90000000000000000000000000000000000053 +:100DA0000000000000000000000000000000000043 +:100DB0000000000000000000000000000000000033 +:100DC0000000000000000000000000000000000023 +:100DD0000000000000000000000000000000000013 +:100DE0000000000000000000000000000000000003 +:100DF00000000000000000000000000000000000F3 +:100E000000000000000000000000000000000000E2 +:100E100000000000000000000000000000000000D2 +:100E200000000000000000000000000000000000C2 +:100E300000000000000000000000000000000000B2 +:100E400000000000000000000000000000000000A2 +:100E50000000000000000000000000000000000092 +:100E60000000000000000000000000000000000082 +:100E70000000000000000000000000000000000072 +:100E80000000000000000000000000000000000062 +:100E90000000000000000000000000000000000052 +:100EA0000000000000000000000000000000000042 +:100EB0000000000000000000000000000000000032 +:100EC0000000000000000000000000000000000022 +:100ED0000000000000000000000000000000000012 +:100EE0000000000000000000000000000000000002 +:100EF00000000000000000000000000000000000F2 +:100F000000000000000000000000000000000000E1 +:100F100000000000000000000000000000000000D1 +:100F200000000000000000000000000000000000C1 +:100F300000000000000000000000000000000000B1 +:100F400000000000000000000000000000000000A1 +:100F50000000000000000000000000000000000091 +:100F60000000000000000000000000000000000081 +:100F70000000000000000000000000000000000071 +:100F80000000000000000000000000000000000061 +:100F90000000000000000000000000000000000051 +:100FA0000000000000000000000000000000000041 +:100FB0000000000000000000000000000000000031 +:100FC0000000000000000000000000000000000021 +:100FD0000000000000000000000000000000000011 +:100FE0000000000000000000000000000000000001 +:100FF00000000000000000000000000000000000F1 +:1010000000000000000000000000000000000000E0 +:1010100000000000000000000000000000000000D0 +:1010200000000000000000000000000000000000C0 +:1010300000000000000000000000000000000000B0 +:1010400000000000000000000000000000000000A0 +:101050000000000000000000000000000000000090 +:101060000000000000000000000000000000000080 +:101070000000000000000000000000000000000070 +:101080000000000000000000000000000000000060 +:101090000000000000000000000000000000000050 +:1010A0000000000000000000000000000000000040 +:1010B0000000000000000000000000000000000030 +:1010C0000000000000000000000000000000000020 +:1010D0000000000000000000000000000000000010 +:1010E0000000000000000000000000000000000000 +:1010F00000000000000000000000000000000000F0 +:1011000000000000000000000000000000000000DF +:1011100000000000000000000000000000000000CF +:1011200000000000000000000000000000000000BF +:1011300000000000000000000000000000000000AF +:10114000000000000000000000000000000000009F +:10115000000000000000000000000000000000008F +:10116000000000000000000000000000000000007F +:10117000000000000000000000000000000000006F +:10118000000000000000000000000000000000005F +:10119000000000000000000000000000000000004F +:1011A000000000000000000000000000000000003F +:1011B000000000000000000000000000000000002F +:1011C000000000000000000000000000000000001F +:1011D000000000000000000000000000000000000F +:1011E00000000000000000000000000000000000FF +:1011F00000000000000000000000000000000000EF +:1012000000000000000000000000000000000000DE +:1012100000000000000000000000000000000000CE +:1012200000000000000000000000000000000000BE +:1012300000000000000000000000000000000000AE +:10124000000000000000000000000000000000009E +:10125000000000000000000000000000000000008E +:10126000000000000000000000000000000000007E +:10127000000000000000000000000000000000006E +:10128000000000000000000000000000000000005E +:10129000000000000000000000000000000000004E +:1012A000000000000000000000000000000000003E +:1012B000000000000000000000000000000000002E +:1012C000000000000000000000000000000000001E +:1012D000000000000000000000000000000000000E +:1012E00000000000000000000000000000000000FE +:1012F00000000000000000000000000000000000EE +:1013000000000000000000000000000000000000DD +:1013100000000000000000000000000000000000CD +:1013200000000000000000000000000000000000BD +:1013300000000000000000000000000000000000AD +:10134000000000000000000000000000000000009D +:10135000000000000000000000000000000000008D +:10136000000000000000000000000000000000007D +:10137000000000000000000000000000000000006D +:10138000000000000000000000000000000000005D +:10139000000000000000000000000000000000004D +:1013A000000000000000000000000000000000003D +:1013B000000000000000000000000000000000002D +:1013C000000000000000000000000000000000001D +:1013D000000000000000000000000000000000000D +:1013E00000000000000000000000000000000000FD +:1013F00000000000000000000000000000000000ED +:1014000000000000000000000000000000000000DC +:1014100000000000000000000000000000000000CC +:1014200000000000000000000000000000000000BC +:1014300000000000000000000000000000000000AC +:10144000000000000000000000000000000000009C +:10145000000000000000000000000000000000008C +:10146000000000000000000000000000000000007C +:10147000000000000000000000000000000000006C +:10148000000000000000000000000000000000005C +:10149000000000000000000000000000000000004C +:1014A000000000000000000000000000000000003C +:1014B000000000000000000000000000000000002C +:1014C000000000000000000000000000000000001C +:1014D000000000000000000000000000000000000C +:1014E00000000000000000000000000000000000FC +:1014F00000000000000000000000000000000000EC +:1015000000000000000000000000000000000000DB +:1015100000000000000000000000000000000000CB +:1015200000000000000000000000000000000000BB +:1015300000000000000000000000000000000000AB +:10154000000000000000000000000000000000009B +:10155000000000000000000000000000000000008B +:10156000000000000000000000000000000000007B +:10157000000000000000000000000000000000006B +:10158000000000000000000000000000000000005B +:10159000000000000000000000000000000000004B +:1015A000000000000000000000000000000000003B +:1015B000000000000000000000000000000000002B +:1015C000000000000000000000000000000000001B +:1015D000000000000000000000000000000000000B +:1015E00000000000000000000000000000000000FB +:1015F00000000000000000000000000000000000EB +:1016000000000000000000000000000000000000DA +:1016100000000000000000000000000000000000CA +:1016200000000000000000000000000000000000BA +:1016300000000000000000000000000000000000AA +:10164000000000000000000000000000000000009A +:10165000000000000000000000000000000000008A +:10166000000000000000000000000000000000007A +:10167000000000000000000000000000000000006A +:10168000000000000000000000000000000000005A +:10169000000000000000000000000000000000004A +:1016A000000000000000000000000000000000003A +:1016B000000000000000000000000000000000002A +:1016C000000000000000000000000000000000001A +:1016D000000000000000000000000000000000000A +:1016E00000000000000000000000000000000000FA +:1016F00000000000000000000000000000000000EA +:1017000000000000000000000000000000000000D9 +:1017100000000000000000000000000000000000C9 +:1017200000000000000000000000000000000000B9 +:1017300000000000000000000000000000000000A9 +:101740000000000000000000000000000000000099 +:101750000000000000000000000000000000000089 +:101760000000000000000000000000000000000079 +:101770000000000000000000000000000000000069 +:101780000000000000000000000000000000000059 +:101790000000000000000000000000000000000049 +:1017A0000000000000000000000000000000000039 +:1017B0000000000000000000000000000000000029 +:1017C0000000000000000000000000000000000019 +:1017D0000000000000000000000000000000000009 +:1017E00000000000000000000000000000000000F9 +:1017F00000000000000000000000000000000000E9 +:1018000000000000000000000000000000000000D8 +:1018100000000000000000000000000000000000C8 +:1018200000000000000000000000000000000000B8 +:1018300000000000000000000000000000000000A8 +:101840000000000000000000000000000000000098 +:101850000000000000000000000000000000000088 +:101860000000000000000000000000000000000078 +:101870000000000000000000000000000000000068 +:101880000000000000000000000000000000000058 +:101890000000000000000000000000000000000048 +:1018A0000000000000000000000000000000000038 +:1018B0000000000000000000000000000000000028 +:1018C0000000000000000000000000000000000018 +:1018D0000000000000000000000000000000000008 +:1018E00000000000000000000000000000000000F8 +:1018F00000000000000000000000000000000000E8 +:1019000000000000000000000000000000000000D7 +:1019100000000000000000000000000000000000C7 +:1019200000000000000000000000000000000000B7 +:1019300000000000000000000000000000000000A7 +:101940000000000000000000000000000000000097 +:101950000000000000000000000000000000000087 +:101960000000000000000000000000000000000077 +:101970000000000000000000000000000000000067 +:101980000000000000000000000000000000000057 +:101990000000000000000000000000000000000047 +:1019A0000000000000000000000000000000000037 +:1019B0000000000000000000000000000000000027 +:1019C0000000000000000000000000000000000017 +:1019D0000000000000000000000000000000000007 +:1019E00000000000000000000000000000000000F7 +:1019F00000000000000000000000000000000000E7 +:101A000000000000000000000000000000000000D6 +:101A100000000000000000000000000000000000C6 +:101A200000000000000000000000000000000000B6 +:101A300000000000000000000000000000000000A6 +:101A40000000000000000000000000000000000096 +:101A50000000000000000000000000000000000086 +:101A60000000000000000000000000000000000076 +:101A70000000000000000000000000000000000066 +:101A80000000000000000000000000000000000056 +:101A90000000000000000000000000000000000046 +:101AA0000000000000000000000000000000000036 +:101AB0000000000000000000000000000000000026 +:101AC0000000000000000000000000000000000016 +:101AD0000000000000000000000000000000000006 +:101AE00000000000000000000000000000000000F6 +:101AF00000000000000000000000000000000000E6 +:101B000000000000000000000000000000000000D5 +:101B100000000000000000000000000000000000C5 +:101B200000000000000000000000000000000000B5 +:101B300000000000000000000000000000000000A5 +:101B40000000000000000000000000000000000095 +:101B50000000000000000000000000000000000085 +:101B60000000000000000000000000000000000075 +:101B70000000000000000000000000000000000065 +:101B80000000000000000000000000000000000055 +:101B90000000000000000000000000000000000045 +:101BA0000000000000000000000000000000000035 +:101BB0000000000000000000000000000000000025 +:101BC0000000000000000000000000000000000015 +:101BD0000000000000000000000000000000000005 +:101BE00000000000000000000000000000000000F5 +:101BF00000000000000000000000000000000000E5 +:101C000000000000000000000000000000000000D4 +:101C100000000000000000000000000000000000C4 +:101C200000000000000000000000000000000000B4 +:101C300000000000000000000000000000000000A4 +:101C40000000000000000000000000000000000094 +:101C50000000000000000000000000000000000084 +:101C60000000000000000000000000000000000074 +:101C70000000000000000000000000000000000064 +:101C80000000000000000000000000000000000054 +:101C90000000000000000000000000000000000044 +:101CA0000000000000000000000000000000000034 +:101CB0000000000000000000000000000000000024 +:101CC0000000000000000000000000000000000014 +:101CD0000000000000000000000000000000000004 +:101CE00000000000000000000000000000000000F4 +:101CF00000000000000000000000000000000000E4 +:101D000000000000000000000000000000000000D3 +:101D100000000000000000000000000000000000C3 +:101D200000000000000000000000000000000000B3 +:101D300000000000000000000000000000000000A3 +:101D40000000000000000000000000000000000093 +:101D50000000000000000000000000000000000083 +:101D60000000000000000000000000000000000073 +:101D70000000000000000000000000000000000063 +:101D80000000000000000000000000000000000053 +:101D90000000000000000000000000000000000043 +:101DA0000000000000000000000000000000000033 +:101DB0000000000000000000000000000000000023 +:101DC0000000000000000000000000000000000013 +:101DD0000000000000000000000000000000000003 +:101DE00000000000000000000000000000000000F3 +:101DF00000000000000000000000000000000000E3 +:101E000000000000000000000000000000000000D2 +:101E100000000000000000000000000000000000C2 +:101E200000000000000000000000000000000000B2 +:101E300000000000000000000000000000000000A2 +:101E40000000000000000000000000000000000092 +:101E50000000000000000000000000000000000082 +:101E60000000000000000000000000000000000072 +:101E70000000000000000000000000000000000062 +:101E80000000000000000000000000000000000052 +:101E90000000000000000000000000000000000042 +:101EA0000000000000000000000000000000000032 +:101EB0000000000000000000000000000000000022 +:101EC0000000000000000000000000000000000012 +:101ED0000000000000000000000000000000000002 +:101EE00000000000000000000000000000000000F2 +:101EF00000000000000000000000000000000000E2 +:101F000000000000000000000000000000000000D1 +:101F100000000000000000000000000000000000C1 +:101F200000000000000000000000000000000000B1 +:101F300000000000000000000000000000000000A1 +:101F40000000000000000000000000000000000091 +:101F50000000000000000000000000000000000081 +:101F60000000000000000000000000000000000071 +:101F70000000000000000000000000000000000061 +:101F80000000000000000000000000000000000051 +:101F90000000000000000000000000000000000041 +:101FA0000000000000000000000000000000000031 +:101FB0000000000000000000000000000000000021 +:101FC0000000000000000000000000000000000011 +:101FD0000000000000000000000000000000000001 +:101FE00000000000000000000000000000000000F1 +:101FF00000000000000000000000000000000000E1 +:08200000481F0000800026309B +:10200800D40148D8E3B80001D553FE6A100030194E +:102018007508F1D9D202F5480040F01F0008F01FFA +:102028000008D503E06CF980EA1C0337F01F0005AF +:10203800D8020000800032008000259880002B68BC +:10204800800026D4EBCD40FC169518961492129B6E +:10205800580AE08A003B0B893008F0091800C520AF +:102068003009129A2FF9EA090708F4081800CFB1C5 +:102078001232E08900493002EDBB0001C26133032E +:10208800EDBB0000C2613004C0A85806C3806C09CB +:10209800B28C6C082FF88D082FF52FF40B8C580C88 +:1020A800CF515802E08A000F04975806C2406C09C5 +:1020B800B2836C082FF88D0820175807FE99FFF790 +:1020C8000404089CE3CD80FC3203EDBB0000CDC0C6 +:1020D8005802FE9AFFDA04975806C1706C09B28359 +:1020E8006C082FF88D0820175807FE99FFF70494FD +:1020F8003002CD5B069CF01F0007CDFBF01F0005EA +:10210800CCCB30091212CB9B069CF01F0002CECB21 +:1021180080002680EBCD40FC203DFACEFFD81497F6 +:102128007C037C1A10941892169E580BC4405809C8 +:102138005F1858A75F091268C34130063008FB686A +:10214800000B580EC430F4CC003AFAC9FFF5FC076E +:102158000D0A16985898F1DCE9082D0812F8149E13 +:10216800580ACF6112955806C0C10C970699089A6B +:102178000A9B049CF01F001A0E0C2FDDE3CD80FC97 +:102188005804C140EDB30001C1115802C230640ABD +:1021980032D9B48964082FF8850820143017CE7B0B +:1021A800580BCCC45C3E3016CCAB129532D83007F5 +:1021B8000AF8CDDB109A3308BA9B0699BA881A9B9D +:1021C800F01F00072FDDE3CD80FCFAC9FFF512955B +:1021D800CCBB32DCF01F0003CE1B00008000204C7B +:1021E80080002680D431201D189516971496178CD8 +:1021F800580CE08000B43004325132D033033092AE +:10220800E20C1800C1705805C6E06A09B28C6A0869 +:102218002FF88B082FF42FF70F8C580CCF21580567 +:10222800EBF91000F9B80100F3F81E00089C2FFD27 +:10223800D8322FF70F8A580ACF30E20A1800C500A3 +:10224800E00A1800F9BC0100F7B700FFF9BC00016B +:10225800EFFA0800C0482FF7A1BC0F8AE60A180059 +:10226800CFB0F4C80030E4081800E08B0063300BEE +:10227800F60B0028F40800182FF7F0CB00300F8A6F +:10228800F4C80030E4081800FE98FFF43738F00A64 +:102298001800C2C03648F00A1800C3403708F00AD0 +:1022A8001800C3E03788F00A1800C4503588F00ACF +:1022B8001800C4903758F00A1800C4803638F00A5D +:1022C8001800CAA16C08BA8830081899169ABA98E2 +:1022D8001A9B0A9C2FC6F01F00231804C9DB325C26 +:1022E8005805C941F01F0020C96B0D081899169AA6 +:1022F8000A9C49EB5808F00B1710F01F001A180435 +:10230800C8BB361916981AD930AA1ADC30196C0BC2 +:102318000A9C2FC6F01F00162FED1804C7DB3619CC +:10232800308A1AD916981ADA30096C0B310ACF1B81 +:10233800300BCADB169836191AD9310A1ADC30095B +:102348006C0BCE7B16983419CF8B361916981AD980 +:1023580030AA1ADC30096C0BCDCB1894C61B0000D0 +:102368008000204C80002680800034008000211CE2 +:10237800D401189BFACAFFFC300CF01F0002D802E7 +:10238800800021ECEBCD40E014951696A98CF01F47 +:1023980000095805C0A03007F01F0007EC070B0C18 +:1023A8002FF70E35FE9BFFFAF01F0004E3CD80E007 +:1023B80080002E7C80002F3080002D14EBCD40E073 +:1023C80014951696A98CF01F00095805C0A030076F +:1023D800EC07070C2FF7F01F00060E35FE9BFFFADF +:1023E800F01F0004E3CD80E080002D9C80002E20AB +:1023F80080002CC8EBCD4040204D49BCF8E80008CF +:10240800FAE90008F8EA0000498CFAEB0000304BC2 +:10241800F01F00171A9BFE7C2800F01F00163009D9 +:10242800FE7C2800129A129BF01F0013FE7C2800E5 +:10243800F01F0012302CF01F00121A96204DECE805 +:102448000008FAE90008ECEA0000E06CF980EA1CF0 +:102458000337FAEB0000F01F000B2FCD2FCDE3CD93 +:1024680080400000800034088000341880002C4030 +:1024780080002874800028B480002A2480002C70F2 +:1024880080002FF8EBCD40F8F01F0033F01F003329 +:102498004B3CF01F0034F01F00343018F00C1800CB +:1024A800C5204B2CF01F002FE06701004B0C3006B5 +:1024B800F01F002C4AF40E95C088E2675A4C0C179E +:1024C800E0470100EA0717B0E806000B0C9C0E9ADB +:1024D8000E06F01F0029E2465A4BFE98FFF0E0670F +:1024E80001004A6C3006F01F001F4A550E930E9AE1 +:1024F8004A3B0C9CF01F0023E80600093008EA0854 +:10250800070B138AF40B1800C1312FF82FF9103775 +:10251800FE9BFFF70E06E2465A4BE08B0019E26776 +:102528005A4C0C17E0470100E60717B0CE1BEC0821 +:1025380000081ADA494C1ADB1AD8F01F000A2FDDF6 +:10254800E3CF80F8491CF01F0007CAFB490CF01FB5 +:102558000005CF7B80002008800023FC80028E6C61 +:102568008000237880002FA480028E8480028E8CC5 +:1025780080003420800023C480028EAC0000000854 +:102588008000238C80028EC880028E7C80028EF4AC +:10259800EBCD4040303AE06B1B00EA1B00B7FE7CF5 +:1025A8000C00F01F001A30083019109B308AFE7C8E +:1025B8000C0031061AD6F01F001630083019109B8F +:1025C800129AFE7C0C00F01F0013300BFE7C0C00EE +:1025D800F01F0011FE7C0C00F01F00103009FE7C7B +:1025E8000C001AD9129B1AD91298129AF01F000CD3 +:1025F800301CF01F000C302BFE7C0C00F01F000A72 +:102608002FDDE3CD8040000080002B0C80002AB035 +:1026180080002AD280002AEA80002AF880002A6AEC +:1026280080002C8A80002B0248CD48D0E3B00001FE +:10263800D55348C048C10230C06248C2A505A1248C +:102648000230CFD348A048B10230C0623002300314 +:10265800A1220230CFE3488F000100008000320041 +:10266800000000080000000880028FC00000000879 +:10267800000001E88000248CD401189BFE7C18001F +:10268800F01F0002D802000080002742EBCD404036 +:10269800203D30083049FB680008BA383088500CB3 +:1026A8001696BAC8302BBAD9486CF01F00070C9A96 +:1026B8001A9BFE7C1800F01F00052FDDE3CD80403B +:1026C80080028F1C80002C40800027ACD401189B0E +:1026D800E06CE100F01F0002D802000080002694A0 +:1026E800D401F6081503A56B143BF9BE0810F00BCE +:1026F80017B0F9BE0B08F6091601F20A0039F20BF9 +:102708000D08109AF00B1603F6C80001E048FFFE0A +:10271800E08B00147818E8690000E418FFF7E01867 +:10272800FECF590EF9B9000010499919F1DAC00322 +:10273800F7E811089988D80ADA0A58ABC0F0E069B6 +:10274800270F7858EDB80001C051F1DBC00999781E +:102758005EFD5809C1002019CF5BE069270F785842 +:10276800EDB80001C04130D89978CEAB5809C030D7 +:102778002019CF6B5EFEE1B80000EDB80010C0E094 +:10278800D3033FF899387858D503300899189998A1 +:1027980099A8EA69610C99095EFC3FF8993878585C +:1027A800CF5BD703D421169714951896F01F002EE7 +:1027B8005807C2000FC93048F0091800E088001B0C +:1027C8003094E8091800E08B00160FD93078F0092A +:1027D8001800E08B00108E39E0680101F00919003B +:1027E800E08B0009EF3900083038F0091800E0885C +:1027F8000003DA2A0A9A6E0B0C9CF01F001C581C66 +:10280800CF900FC9E8091800C2906C182059F1E957 +:1028180010688D18EF3900086C1A0FD8A978F1E9FB +:1028280010E814488D1830288E39F0091900E0880E +:1028380000106C18ADB88D188EB920298DA96C18A8 +:10284800E018FFF08D183509300C8D09D8226C1866 +:102858005C79F1E910C88D18CF3B6C18B1B88D18A8 +:10286800CDAB00008000277E800026E8D401301818 +:10287800F739000DF0091800E0880005302E1C9C7F +:10288800D802E068008030199908300A7818F73BB8 +:10289800000D149EF1D9D00130F9F1DBD081F1DAC5 +:1028A800D0E1F1D9D20499181C9CD802EBCD408014 +:1028B8003018149E1297F00A18005FBAF00B18002F +:1028C8005FB91449C0B17818F1DBD021F1DED041ED +:1028D800F1D7D3089918E3CF8080302CE3CD8080DE +:1028E800D4017818189EEA18000F9918781CE21C71 +:1028F8000004C08030E8F00B1800E0880013302C8A +:10290800D8023038F00B1800FE9BFFFB7C1AF6C883 +:10291800FFF03019F20809495CD914699D19D802E9 +:102928007C19F6081510300CEA18FFF0E818FFFFBC +:1029380012689D18D802E0692710C0485809C0E0FD +:1029480020197848EDB80009CFA17818EA18000FC7 +:102958009918FC19010099095EFD5EFFEBCD40FC5A +:1029680030321893F73C000CE40C1800E08B000997 +:10297800F735000B3014E8051800E0880005302C06 +:10298800E3CD80FCF73E00083078F00E1800FE9882 +:10299800FFF83108F00E1800FE9BFFF37618F009D7 +:1029A8001601F4090009F2080D06ECCA0001E04A14 +:1029B80000FEFE9BFFE65806CE35FCC90008F80865 +:1029C8001601300AEC1C0001F5D8D001178EF5DC91 +:1029D800D021F7380009F5D5D061F5D9D084F73979 +:1029E800000AF5D6D108F5D8D208F5D9D308E80EEB +:1029F8001800C0F0C0B33028F00E1800C0D0E40EA4 +:102A08001800CBE187FAE3CF80FC87CAE3CF80FCCC +:102A180087DAE3CF80FC87EAE3CF80FC3018990897 +:102A28005EFCE0692710C0485809C0A02019784802 +:102A3800EDB80001CFA1F1DBC01099385EFD5EFF53 +:102A4800E0692710C0485809C0C020197848E21822 +:102A58000201E0480201CF817828300CB6085EFCFC +:102A68005EFFEBCD40E0FAC5FFF018976A166A0ED4 +:102A7800EDD6C003FDDEC001300CF9D6D003F9DE77 +:102A8800D0E1F9D6D103F9DED1E1F9DAD203F9DBE5 +:102A9800D2E1F9D8D303F9D9D3E18F1C6F58EDB837 +:102AA8000005CFD1E3CD80E0EBCD4040300E40268D +:102AB8002F8BFDD8D021FDD9D104FDDAD204FDD663 +:102AC800D306F80B092EE3CD80402F8BF5E91019BA +:102AD800F3E81029F80B0328F1D9D043F80B09289B +:102AE8005EFC2F8BF80B0328A1A8F80B09285EFCC5 +:102AF8007958EDB80000CFD15EFC7808F1DBD00240 +:102B080099085EFCEC5BBB9FE08B0018304B78A803 +:102B1800F1DBD00399A878A9F3DAD10399A9780849 +:102B2800A3A899087958EDB80007CFD178083019CB +:102B3800F1D9D00299085EFCE068C6BFEA18002DFA +:102B4800103BE088000CE0681200EA18007A103B9D +:102B5800F9BB0306F9BB0207CDBB305BCD9BC008B0 +:102B6800EBCD40C048E8E3B8000148E9300C7206F4 +:102B780048DE48E9FE770800720B580BC070721ADD +:102B8800300814AE2FF81638CFD3EE0C09262F894B +:102B98002FFC594CCF21E3CD80C0000080003200CB +:102BA8008000333C80002B6680028F20E068008321 +:102BB800FE790800F00C010CF20C032AF4C8FFC0DF +:102BC800F208032C580C5E0CF80812004859F0085B +:102BD800111FF20A0039721AF408032C5EFC000077 +:102BE80080028F20F8081605F0091508E029F00082 +:102BF800581BC150C0823018F00C094C936C93AC30 +:102C0800932C5EFD582BC110583BC0205EFF301836 +:102C1800F00C094C935C939C932C5EFDF60C094CCC +:102C2800935C93AC932C5EFD3018F00C094C936CBC +:102C3800939C932C5EFDD703D42118961694580BB9 +:102C4800C0F030050A970D9B0D8C2FF72FE6F01F6B +:102C5800000618450E34FE9BFFF80A9CD8221695EC +:102C6800CFDB000080002BEC3018F00C0948A59C45 +:102C7800A96CE02CF000F9480054F9480044991870 +:102C88005EFCFE6914007208F1DCD0C193085EFC9A +:102C9800D401580BC091F8CBFFFEFE7C28005C5B8A +:102CA800F01F0006D802F8CBFFFEFE7C28005C5B14 +:102CB800F01F0003D80200008000293E800028E8A9 +:102CC800EBCD408048E76E0CF1DCC008C0D0300B7B +:102CD800FE7C2800F01F000B6E08F0CCFFFF8F0C65 +:102CE800F1DCC008CF51F9DCC288300BF01F0006B8 +:102CF80030194868B089E3CD80800000000001E009 +:102D080080002A2A80002C98000001E4D401486839 +:102D1800300B700CF9DCC288F01F000430094848F9 +:102D2800B089D802000001E080002C98000001E47E +:102D3800EBCD40C0201D301B49366C0CF9DCC28835 +:102D4800F01F0012E06B00D7FE7C2800F01F001077 +:102D5800FAC7FFFEE06B00FFFE7C2800F01F000CA6 +:102D68000E9BFE7C2800F01F000B9A98EDB8000718 +:102D7800CF216C0C300BF9DCC288F01F00042FFD4A +:102D8800E3CD80C0000001E080002C9880002A2A52 +:102D980080002A48EBCD40C0201D49B6A96C8D0C97 +:102DA80049A730080F89F0091800C030F01F001833 +:102DB80030086C0CAE88F9DCC288301BF01F001597 +:102DC800E06B0082FE7C2800F01F00136C08F7D827 +:102DD800C008F1D8C10CFAC6FFFCF7E8109BFE7CCE +:102DE80028000CDBB18BF01F000C0DABFE7C28001B +:102DF800F01F00090DBBFE7C2800F01F00072FFD07 +:102E0800E3CF90C0000001E0000001E480002D380D +:102E180080002C9880002A2AEBCD40E049151896AE +:102E28000B893008F0091800C16148F70C9BFE7C3B +:102E38002800F01F000E6E08F0CCFFFF8F0CF7DCA7 +:102E4800C008C071F9DCC288F01F00093018AA88D0 +:102E5800E3CF90E048476E0CA98CF01F0006CE7BAC +:102E6800000001E4000001E080002A2A80002C987C +:102E780080002D9CEBCD40C0201D4A76A96C8D0C9E +:102E88004A6730080F89F0091800C030F01F002485 +:102E980030086C0CAE88F9DCC288301BF01F0021AA +:102EA800E06B00D2FE7C2800F01F001F6C08F7D8EA +:102EB800C008F1D8C10CFAC6FFFCF7E8109BFE7CED +:102EC80028000CDBB18BF01F00180DABFE7C28002E +:102ED800F01F00150DBBFE7C2800F01F0013E06BEF +:102EE80000FFFE7C2800F01F0010E06B00FFFE7C56 +:102EF8002800F01F000DE06B00FFFE7C2800F01F8B +:102F0800000AE06B00FFFE7C2800F01F00072FFD81 +:102F1800E3CF90C0000001E0000001E480002D38FC +:102F280080002C9880002A2AEBCD40C0201D4966DD +:102F380030090D88F2081800C1F14947E06B00FF1D +:102F4800FE7C2800F01F0012FACBFFFEFE7C280052 +:102F5800F01F00106E08F0CCFFFF8F0CF7DCC008E4 +:102F6800C071F9DCC288F01F000C3018AC881BBC9B +:102F78002FFDE3CD80C04857AC896E0CA98CF01F9B +:102F88000007CDDB000001E4000001E080002A2AF0 +:102F980080002A4880002C9880002E7CEBCD404091 +:102FA800201D3008FAC6FFFC301B0CE8300CF01F5F +:102FB800000EE06B00D7FE7C2800F01F000CE06BD1 +:102FC80000FFFE7C2800F01F00090C9BFE7C2800F7 +:102FD800F01F0007300B169CF01F00032FFDE3CFF6 +:102FE8009040000080002C9880002A2A80002A48FF +:102FF800EBCD40E03028FAC7FFF01896AE88109560 +:10300800C028AE880C9A0E9BFE7C2800F01F000892 +:10301800C0C10F882FF85C58EA081800FE98FFF323 +:103028004848B08CE3CF90E0E3CF80E0800029648B +:04303800000001E4AF +:10320000C0080000C0080000C0080000C00800009E +:10321000C0080000C0080000C0080000C00800008E +:10322000C0080000C0080000C0080000C00800007E +:10323000C0080000C0080000C0080000C00800006E +:10324000C0080000C00800000000000000000000EE +:10325000C0080000000000000000000000000000A6 +:10326000C008000000000000000000000000000096 +:10327000C008000000000000000000000000000086 +:10328000000000000000000000000000000000003E +:10329000000000000000000000000000000000002E +:1032A000000000000000000000000000000000001E +:1032B000000000000000000000000000000000000E +:1032C00000000000000000000000000000000000FE +:1032D00000000000000000000000000000000000EE +:1032E00000000000000000000000000000000000DE +:1032F00000000000000000000000000000000000CE +:10330000C0080000300CF01F0012580CF80F171006 +:10331000D603301CF01F000E580CF80F1710D60300 +:10332000302CF01F000B580CF80F1710D603303C50 +:10333000F01F0007580CF80F1710D6030000010407 +:103340004000011280000120C000012E80002BB43B +:10335000000000000000000000000000000000006D +:10336000000000000000000000000000000000005D +:10337000000000000000000000000000000000004D +:10338000000000000000000000000000000000003D +:10339000000000000000000000000000000000002D +:1033A000000000000000000000000000000000001D +:1033B000000000000000000000000000000000000D +:1033C00000000000000000000000000000000000FD +:1033D00000000000000000000000000000000000ED +:1033E00000000000000000000000000000000000DD +:1033F00000000000000000000000000000000000CD +:10340000286E756C6C2900000200000000B71B00DC +:1034100008000001000100000F011101100113015B +:103420001061040000000000300000001061040082 +:103430003861040000000000020000002061040068 +:10344000306104000000000004000000306104004E +:1034500000000000000000000000000010610400F7 +:103460003C0000000000EEEEEEEE18F09FE518F0D4 +:103470009FE518F09FE518F09FE50000A0E118F027 +:103480009FE518F09FE544000000B4080000B40870 +:103490000000B4080000B408000000000000E408C8 +:1034A00000003C003C00000000090000000000009B +:1034B00000000FE11F00C0E3130080E3C00080E3C1 +:1034C00000F02FE11CF09FE53D0200EB5A0200EBFB +:1034D0008D0200EB01008FE210FF2FE141F0DEFBD7 +:1034E00001F0DCFD3C0078000000FEE700005C001D +:1034F00000007847C046010000EA7847C046170040 +:1035000000EA8C119FE5002091E500300FE1841165 +:103510009FE5FD20A1E880019FE580219FE5012036 +:1035200042E00D0040E03C00B4000000020050E129 +:10353000280000AA68019FE50D0050E1020000BAD2 +:10354000042010E4042081E4FAFFFFEA58119FE50B +:1035500058019FE5000081E53C119FE550019FE582 +:10356000000081E51EFF2FE13C00F0000000481143 +:103570009FE5000091E524119FE5000081E52C11F5 +:103580009FE538019FE5000081E51EFF2FE17402F1 +:1035900000EB10019FE528119FE5042091E4042031 +:1035A00000E404219FE5020051E13C002C010000F1 +:1035B000FAFFFF1AF0109FE5FD20B1E803F02FE1BC +:1035C000E0109FE5002081E5E8109FE5F4209FE5ED +:1035D000002081E5021080E2000020E0010040E2CE +:1035E00011FF2FE101008FE210FF2FE13C00680185 +:1035F000000001F09CF87847000001008FE210FF06 +:103600002FE101F094F87847000003002DE9001045 +:103610000FE1001080E5B8109FE5041080E5001070 +:10362000A0E1100080E2FC1FA0E80020A0E13C0027 +:10363000A40100000130A0E10300BDE8080083E51B +:103640000C1083E5D300A0E300F021E10060A2E8C4 +:1036500000104FE1041082E4D200A0E300F021E169 +:103660000060A2E800104FE1041082E4D100A0E362 +:103670003C00E001000000F021E1007FA2E8001022 +:103680004FE1041082E4D700A0E300F021E10060E4 +:10369000A2E800104FE1041082E4DB00A0E300F098 +:1036A00021E10060A2E800104FE1001082E5000077 +:1036B00093E53C001C02000000F02FE11EFF2FE10B +:1036C000200000000403000020EE0100D8030000E9 +:1036D0000000000018F09FE5100100000803000042 +:1036E000EEEEEEEE2403000020020000B0B5041C54 +:1036F000631C0B4D3C005802000001D16C6910E0C6 +:1037000000F06CFB0948FFF70CFFEC60084A5168B9 +:1037100050688842FCD00220287001218A2001F0E4 +:1037200012F8201CB0BD3000070051020000000359 +:103730000700B0B5051C3C0094020000002400F016 +:1037400050FB1448FFF7F0FE13491448C1600121F3 +:10375000134A490391601349CA7808239A43CA70EF +:10376000CA7804231A43CA706B1C0DD00E4B5A68DA +:1037700059689142FCD0BE213C00D0020000197370 +:10378000197A112291431972197AC907FCD40221BE +:103790000170FFF7D0FE201CB0BD91020000FFFFBA +:1037A000FF003000070000100700000007000003C2 +:1037B000070000000000000000003C000C030000B7 +:1037C00000000000000000000000000000000000F9 +:1037D00000000000000000000000000000000000E9 +:1037E00000000000000000000000000000000000D9 +:1037F0000000000000000000000000003C00480342 +:1038000000000000000000000000000000000000B8 +:1038100000000000000000000000000000000000A8 +:103820000000000000000000000000000000000098 +:1038300000000000000000000000000000003C004C +:1038400084030000000000000000000000000000F1 +:103850000000000000000000000000000000000068 +:103860000000000000000000000000000000000058 +:103870000000000000000000000000000000000048 +:103880003C00C00300000000000000000000000039 +:1038900000000000000000000000000000000047E1 +:1038A000084710471847204728473047384710B582 +:1038B000041C101C00F023F903C410BC08BC1847FA +:1038C00000003C00FC03000010B4042A0ED3031CCB +:1038D0000B439B070AD108C810C9A34202D1043A7E +:1038E000042AF8D2A34201D004380439002A02D1B4 +:1038F000002010BC7047D30701D5013205E00378E2 +:103900000C7801313C00380400000130A34207D19B +:1039100003780C7801310130A34201D1023AF1D190 +:10392000181BE9E70000784700000020A0E304002E +:1039300051E30800003A03C010E20D00000A04C081 +:103940006CE202005CE33C00740400000120C0E46F +:103950000120C0A40120C0C40C1041E0060000EA10 +:1039600081CFB0E10120C0240120C0240120C04447 +:103970001EFF2FE1784700000020A0E300402DE962 +:103980000230A0E102C0A0E13C00B004000002E06F +:10399000A0E1201051E20C50A0280C50A0282010CB +:1039A0005122FBFFFF2A011EB0E10C50A0280C00A1 +:1039B000A0480040BDE80111B0E1042080241EFFB2 +:1039C0002F010120C0440120C0443C00EC04000051 +:1039D000400411E30120C0141EFF2FE178470000CE +:1039E000030052E33E00009A03C010E20800000A00 +:1039F0000130D1E402005CE30C2082E001C0D194EC +:103A00000130C0E40130D134042042E23C002805FA +:103A1000000001C0C0940130C034033011E21E0028 +:103A2000000A042052E22F00003A03C031E70200EE +:103A300053E30800000A0F00008A2C34A0E104C000 +:103A4000B1E5042052E20C3C83E1043080E43C0008 +:103A500064050000F9FFFF2A011081E2230000EA5B +:103A60002C38A0E104C0B1E5042052E20C3883E117 +:103A7000043080E4F9FFFF2A021081E21B0000EA13 +:103A80002C3CA0E104C0B1E5042052E20C3483E1F7 +:103A90003C00A0050000043080E4F9FFFF2A031079 +:103AA00081E2130000EA7847000010402DE9202051 +:103AB00052E20500003A1850B1281850A0281850BA +:103AC000B1281850A02820205222F9FFFF2A02CE48 +:103AD000B0E13C00DC0500001850B1281850A028C7 +:103AE0001800B1481800A0481040BDE802CFB0E16E +:103AF00004309124043080241EFF2F01822FB0E176 +:103B00000120D1440130D12401C0D1240120C0447E +:103B10000130C0243C001806000001C0C0241EFF74 +:103B20002FE178470000FF3001E20210A0E10324FA +:103B300083E1022882E188FFFFEA784700008024C1 +:103B400010E200006042413032E000106122A1C169 +:103B500070E02000003A3C005406000021C470E0F0 +:103B60000F00003A0004A0E1FF2482E321C270E0CC +:103B70001700003A21C470E00900003A0004A0E1F7 +:103B8000FF2882E321C470E00004A021FF2C8223DF +:103B900021C270E00E00003A3C009006000000C018 +:103BA00070E28300002A2004A021A1C370E08013EA +:103BB00041200220A2E021C370E000134120022036 +:103BC000A2E0A1C270E0801241200220A2E021C246 +:103BD00070E0001241200220A2E03C00CC06000070 +:103BE000A1C170E0801141200220A2E021C170E05B +:103BF000001141200220A2E0A1C070E0801041200D +:103C00000220A2E001C070E0001041200220B2E0DA +:103C1000E5FFFF2AC30F32E0A30F80E03C00080756 +:103C20000000001061221EFF2FE1784700000020F5 +:103C3000A0E3A1C170E02000003A21C470E00F00B1 +:103C4000003A0004A0E1FF2482E321C270E01700E3 +:103C5000003A21C470E00900003A0004A0E13C00F1 +:103C600044070000FF2882E321C470E00004A02183 +:103C7000FF2C822321C270E00E00003A00C070E2E7 +:103C80005000002A2004A021A1C370E0801341202D +:103C90000220A2E021C370E0001341200220A2E034 +:103CA0003C0080070000A1C270E080124120022089 +:103CB000A2E021C270E0001241200220A2E0A1C1D6 +:103CC00070E0801141200220A2E021C170E00011CB +:103CD00041200220A2E0A1C070E08010412002201B +:103CE000A2E03C00BC07000001C070E000104120D1 +:103CF0000220B2E0E5FFFF2A0200A0E11EFF2FE153 +:103D0000784700000A1040E2200140E0200280E0F5 +:103D1000200480E0200880E0A001A0E1002180E0F4 +:103D2000821051E03C00F8070000010080520A10A8 +:103D300081421EFF2FE130B4441C810708D0017876 +:103D40000130002902D1001B30BC70478107F6D139 +:103D50000B4AD50102C88B1A8B432B40FAD0001BAB +:103D60000A0601D103383C0034080000EFE70A04DA +:103D7000120E01D10238EAE70902090EE7D1013833 +:103D8000E5E7000001010101F0B4031C041C0C4331 +:103D9000A4070CD1104DEF0102E00431043A10C326 +:103DA000042A04D30C68661B3C0070080000A6437C +:103DB0003E40F5D0002A07D00C7801311C70013349 +:103DC000002C03D0013AF7D1F0BC7047012AFBD98F +:103DD000511E00221A7001330139FBD1F4E70101B1 +:103DE0000101784700000200A0E33C00AC0800009D +:103DF0000210A0E32EFEFFEA1F402DE900000FE1B4 +:103E0000C00080E300F02FE18100A0E30210A0E3F6 +:103E100001208FE212FF2FE100F0E6FC784700005E +:103E20001F40BDE8FEFFFFEA1F502DE93C00E808F7 +:103E3000000001008FE210FF2FE100F040FB784707 +:103E400000001F50BDE804F05EE21F502DE90100A4 +:103E50008FE210FF2FE100F018FB784700001F50A1 +:103E6000BDE804F05EE200BD01B500A000473C00E3 +:103E70002409000000300FE1C030C3E303F021E16A +:103E800001008FE210FF2FE101BD01B500A0004746 +:103E900000300FE1C03083E303F021E101008FE245 +:103EA00010FF2FE101BD000018009FE5041090E411 +:103EB0003C0060090000000051E30200000A0420F9 +:103EC00090E4002081E5F9FFFFEA0EF0A0E17C0913 +:103ED0000000000000004400000044000000D8037F +:103EE0000000D8030000D80300000000000000001C +:103EF00000003C009C090000440000004400000059 +:103F0000440000000080010000800100108E0100CC +:103F1000108E010088F8010001000000001004006C +:103F2000C433040000000400000000000E50A0E1B3 +:103F300058409FE53C00D8090000040094E40100CB +:103F400050E305F0A001041094E4042094E403007D +:103F500000EB040094E4041094E4070000EBF5FF88 +:103F6000FFEA010050E10EF0A001020051E104302F +:103F70009014043081143C00140A0000FBFFFF1A67 +:103F80000EF0A0E114209FE5002092E5010050E131 +:103F900004208014FCFFFF1A0EF0A0E1800900004D +:103FA000CC0900000008000020E60100130000001A +:103FB0005356435F000400003C00500A000020EE0E +:103FC0000100120000004952515F0002000020F27F +:103FD0000100110000004649515F8000000020F4FC +:103FE0000100170000004142545F00000000A0F4EF +:103FF00001001B000000554E445F3C008C0A00008D +:1040000000000000A0F401001F0000005553525FA3 +:10401000010000000E50A0E100600FE18C409FE520 +:10402000041094E4010051E30900000A040094E440 +:10403000011080E00310C1E3042094E43C00C80AAE +:104040000000C02082E302F02FE104D041E204200E +:1040500094E4130000EBF2FFFFEA06F02FE105F015 +:10406000A0E10E50A0E100600FE144409FE5041084 +:1040700094E4010051E30800000A040094E43C00C9 +:10408000040B0000011080E00310C1E3042094E45D +:10409000C02082E302F02FE104D041E2042094E446 +:1040A000F3FFFFEA06F02FE105F0A0E1010050E187 +:1040B00004208014FCFFFF1A0EF0A0E13C0A00006F +:1040C0003C00400B00000160C046C046C04670473F +:1040D0000000101E10EE020011E3FCFFFF1A100E8C +:1040E00001EE101E10EE020011E3FCFFFF1A1EFF8E +:1040F0002FE1101E10EE010011E30300000A101E54 +:1041000011EE3C007C0B0000001080E50100A0E3F4 +:104110001EFF2FE1000020E01EFF2FE18D46974695 +:104120007847C04678FDFFEA10B5041C032801D982 +:1041300000F0ACFB0C484068002800D003240B487A +:10414000016809483C00B80B00001230002905D076 +:1041500006216143405CC300181804E00621614356 +:10416000405C142358430A300006000E10BDD47A78 +:104170000100A869010080B5094A0949032000F03F +:10418000F2F9084908203C00F40B00000860486080 +:1041900007491D2001F0B2FC06491E2001F0AEFCCB +:1041A00080BD0000006C01003127000000100700F6 +:1041B0002925000031250000054980B508208860C8 +:1041C0001D2001F0BFFC1E203C00300C000001F05F +:1041D000BCFC80BD000000100700021C081CD12A96 +:1041E00080B501D105F019FC80BD034980B50020E0 +:1041F0000880052005F0D5FB80BDB074010080B5B6 +:10420000542801D106F0CDF880BD3C006C0C0000B4 +:10421000B0B5104D021C0124012A0D48296806D0B2 +:10422000C42A03D16A68002A05D0AC60B0BD0EF084 +:1042300089FB6C6008E00022AA606C600EF082FBD3 +:104240000021042012F0C8FC06F0D8F83C00A80CAD +:104250000000B0BD0000C4600100BC740100054A4C +:104260005169081A116909681031814201D85061F9 +:104270007047002070478C6E010001494968401A60 +:1042800070478C6E010001484069704700003C0097 +:10429000E40C00008C6E0100024A5169081850615C +:1042A000704700008C6E01000E490F4810B51922AE +:1042B000920141608918C1600B4900220C310160F4 +:1042C0000A49826009680123DB03C918084C41616F +:1042D0003C00200D00002168002902D0074901613F +:1042E00001E000F00CF8226010BD44DC01008C6E8F +:1042F0000100C809000034580100C4090000014849 +:10430000024908617047C80900008C6E0100082846 +:1043100005D23C005C0D0000034B8000195002499F +:1043200020310A5070470000646D010070B5061C12 +:104330000D480D1C0068141C002803D1201C00F03F +:1043400009FC70BD280601D500F022FE221C291CA4 +:10435000301C08F03C00980D0000DDFD011C0348F6 +:1043600054304369321CFFF71BFB70BD0000506DD9 +:104370000100F8B5061C0D481F1C0068151C0C1C1C +:10438000002802D1281C00F0E8FB200601D500F02F +:1043900002FE2A1C211C3C00D40D0000301C08F039 +:1043A000BDFD011C0348543043693A1CFFF7FBFA7A +:1043B000F8BD0000506D0100F8B5F1284ED12A4833 +:1043C00069468269FFF7EEFA274900265439C86822 +:1043D0008B68C2000130D5183C00100E0000072881 +:1043E000C86000D1CE6022486C680068002803D005 +:1043F0000021201C08F03BFB6E6025682089A9780D +:104400000239401AE978401A2081A8782818023821 +:1044100020606E782878082817D23C004C0E0000E7 +:10442000300607D5271C201C00F07AFC041C381C21 +:1044300000F09CFB28780F49403980000A58002A78 +:1044400004D0311C201CFFF7B3FA08E0052100E07E +:104450000421062000F010FA201C00F03C00880E19 +:10446000000087FB300601D500F0A1FDF8BD012159 +:10447000062000F004FAF9E70000A46D0100CC5C0E +:104480000100F8B51A4D194F01245435291C032099 +:104490007C60174B184A05F0F4FB002802D03C0062 +:1044A000C40E0000002038601FE03C600721281C7B +:1044B000EA69FFF783FA382000F080FC0024B86036 +:1044C000B868E60035186846022100F075FB2860E0 +:1044D000281C00F0A5FDB868815906485430026ACE +:1044E0003C00000F0000FFF76CFA0134072CEADBF8 +:1044F0000020F8603861F8BD0000506D0100819A1D +:104500000000619A0000054880B50068002805D0C9 +:1045100003485430426A0021FFF753FA80BD506DC2 +:1045200001003C003C0F00007047000070B50A4ECF +:10453000094D084C083EA169002907D03068416048 +:10454000007B81006958FFF73EFAF4E70349022037 +:10455000087070BD00100700E07E01000002070037 +:1045600070B50A4E3C00780F0000094D084C083E1B +:10457000E169002907D070684160007B81006958BB +:10458000FFF724FAF4E703490220087070BD001019 +:104590000700E07E010000020700B0B5094D041CD1 +:1045A000281C202240303C00B40F00000549FFF7D2 +:1045B0009FFAE068E86020692861A06AA8626068E4 +:1045C0006860B0BD7052010000100700F8B500240B +:1045D0000023202801DB012407E0084E8000355825 +:1045E000074FBD4200D02B1C3C00F00F00003150A3 +:1045F0001360002C03D0211C822000F052F9201CF3 +:10460000F8BDE07E010075750000B0B50B4D041CCF +:10461000286800280FD0201C12F0B7FD00280AD00F +:10462000217A287A0A070007000F3C002C100000AE +:10463000120F9042297201D00120B0BD0020B0BD00 +:1046400070780100F0B5424E051C306885B0002836 +:1046500063D000240020002D06D06978182903D1EA +:10466000E979012900D10120002845D03C006810DB +:1046700000000020B07281004A19937A5906890F10 +:10468000DB0604D5B37A01278F403B43B372D27A5D +:1046900013091207120F934205D301228A401443D3 +:1046A00001AA8900505001300428E4DBB07A3C00B4 +:1046B000A4100000204001070DD5410709D5C1070E +:1046C00005D5810701D5002405E0029902E0019992 +:1046D00000E003990491410709D5C10705D5810779 +:1046E00001D5002403E0029900E001990391C1077C +:1046F0003C00E010000005D5810701D5002401E051 +:1047000002990191800701D5002422E00F2C20D1CD +:10471000706800280BD0049A02AB00920ACB019A71 +:10472000281C0BF08AFB0020706010E017E0307A44 +:10473000297A3C001C11000000070907090F000F2F +:10474000884207D0049A02AB00920ACB019A281C37 +:104750000BF076FB287A307201200F2C00D000205D +:1047600005B0F0BD0120FBE7707801000D4A70B57F +:10477000116800203C005811000000290ED0117A69 +:1047800009060BD5537A947A032101252A1C8A4005 +:104790001E1C164003D0224001D1012070BDFF3104 +:1047A00009060916F2D570BD00007078010010B539 +:1047B000084C206800283C009411000004D0606878 +:1047C000002801D10BF0C0FB00200021002207C40B +:1047D0000C3C0120606010BD70780100014901208F +:1047E0000860704770780100F8B50E4D041C002079 +:1047F0006872201C12F0DEFC3C00D0110000002882 +:1048000012D00020032101220F1A161C237ABE4069 +:10481000334004D06B7A161C864033436B720130F0 +:104820000006000E0328EFD9F8BD70780100920051 +:1048300051188A7A1207120F02703C000C12000005 +:10484000CA7A1207120F4270CA7A12098270097B63 +:1048500081807047034A0F21527A0120914300D092 +:10486000002070477078010040070549400F054A55 +:104870000956527A01200A4000D100203C0048121B +:104880000000704700005E46010070780100124A87 +:1048900070B5537A947AFF20032101252A1C8A409F +:1048A0001E1C164014D0224012D10806000E07D05C +:1048B000012807D0022807D0032807D107203C0091 +:1048C0008412000070BD032070BD012070BD052062 +:1048D00070BDFF2070BDFF3109060916E1D570BD1E +:1048E00070780100F8B5041C13480D1C816800297C +:1048F00005D0017B002901D104734573F8BD0F4E2B +:104900003C00C0120000311C20318A7900AB1A70C3 +:10491000C97959704268002A07D020022843011C37 +:104920000020FFF77EF8002804D12A1C211C00205B +:1049300011F00FF800AB1888F084E2E70000885A05 +:1049400001003C00FC1200000010070080B50121AE +:104950008120FFF7CDFF80BD0149012088607047AD +:10496000885A0100054980B500208860087B00282E +:1049700002D0497BFFF7BCFF80BD0000885A0100D0 +:10498000024A011C3C003813000050685160704717 +:104990000000885A010010B50C1C07F064FA04618D +:1049A000002010BD0000FFB50E1C1F1C382081B078 +:1049B00000F03DFA1D49041C4869002801D14C61F2 +:1049C00000E0046030013C0074130000009000041B +:1049D000000C00F015FA051C0099FFF78BF8002079 +:1049E000731E04E001014A1910326A5001309842E6 +:1049F000F8D300012D503821201CFFF77BF8A5606B +:104A00006560E6850C2060863C00B0130000AF2096 +:104A10008001E0610E20E086002020600198E060C7 +:104A2000386860610399044808600448386005B03C +:104A30000020F0BD0000FC5A0100DD150100FD164C +:104A40000100021C081CF02A80B53C00EC13000099 +:104A500004D0F12A07D106F009FB80BD07F00CFA5B +:104A60000DF0A8FA80BD01210220FFF74DFF80BDA7 +:104A70000149002048617047FC5A0100002802D01B +:104A8000002900D0C1607047F8B5171C3C002814FD +:104A900000000E1C051C1C1C1C3007F0C8F8016926 +:104AA000426980688919891A814206D2231C3A1CFE +:104AB000311C281C00F005F8F8BD0020386020608B +:104AC000FAE7FFB585B0059801270E1C1C303C00A5 +:104AD0006414000007F0AEF8041C808804300390D2 +:104AE0002C48049080790290A069B04217D2351A00 +:104AF00011E00398FFF716FC002806D101218E2053 +:104B0000FFF708FF0025002705E02168016020600D +:104B10003C00A0140000A0690130A061013DEBD26F +:104B2000002F35D0A069801BA06120698019206109 +:104B30006169401AE168884203D907218E20FFF796 +:104B4000ECFE25682F1C701E019500E03F680138BF +:104B5000FCD23C00DC140000386820600298049904 +:104B600088712E682C60321D0092291C2031012290 +:104B7000281D059B08F07AFCBD4201D0351CF0E7EA +:104B800000203861019807990430086008980437BC +:104B9000076009B03C0018150000F0BD02980499A8 +:104BA0008871F9E700002010070038B5041C151CB7 +:104BB00000200C6009E0E268201C0092A38A2168B2 +:104BC000A26908F056FC201CE468002CF3D1286090 +:104BD00038BD80B50CE03C0054150000C2688A4224 +:104BE00008D10021C160002803D106218E20FFF7E3 +:104BF0009DFE80BD101C0028F7D0EFE710B5041C07 +:104C00000CD0A069002806D12069002803D006F046 +:104C1000F7FD00202061201C3C009015000006F0EC +:104C2000F2FD10BD000010B5002809D0C46803E0F3 +:104C3000FFF7E7FF201CF9E7002CF9D1FFF7E1FFB0 +:104C400010BD011C002004E00A89C9681018000486 +:104C5000000C0029F8D1704700003C00CC15000082 +:104C600000E0081CC1680029FBD17047F8B5061C9C +:104C70000C1C1C2000F068FA051C002E01D1002C31 +:104C800002D1301C012103E0201C00F05DFA00215C +:104C9000002200920A1C011C231C281C3C00081640 +:104CA000000008F0F2FB281CF8BDB0B503329208F2 +:104CB00092001404240C09191D1CC9180904090CBC +:104CC000FFF7D7FF018902681219091B491B02600F +:104CD0000181B0BD0000F8B50A4CA021201C3C00A9 +:104CE00044160000FEF72AFF0020261CA036074DC0 +:104CF00007E00C21414349190EC9271D0EC7203476 +:104D00000130A642F5D1F8BDD05C0100C83F0100DA +:104D1000F7B5C468061C0025002C82B023D020897A +:104D20003C0080160000904220D3E168871A019170 +:104D30000021E16003990020FFF7A1FF051C2089F5 +:104D4000C01B20812A680399301C00F016F82089C6 +:104D5000C01920810199201CFFF7B1FE211C281CDD +:104D6000FFF73C00BC160000ADFE291C301CFFF70D +:104D7000A9FE0120002D00D1002005B0F0BD0000EB +:104D8000F7B5041C0E1C002001E0201C0C1CE1687F +:104D90000029FAD12789B7420AD3B81B0004000CB6 +:104DA000208121683C00F816000009180298321C86 +:104DB000FEF7FBFEFEBDF11B0D042D0C002819D0E3 +:104DC0000189A94216D3491B0904090C0181006815 +:104DD000411802982A1CFEF7E8FE21680298721B0F +:104DE0004019FEF7E2FE3C00341700002089C01B8A +:104DF00020812068C0192060DFE703218E20FFF7A3 +:104E0000ADFDDAE7F8B5041C002613E02189002087 +:104E1000FFF73EFF051C228921680068FEF7C8FEE7 +:104E2000002E01D12E1C03E03C0070170000291C4D +:104E3000381CFFF750FEE4682F1C002CE9D1301C11 +:104E4000F8BDB0B5041C0089401A050420682D0C7B +:104E50004018291CFFF71FFF2189491B2181E168A8 +:104E6000C160E060B0BD10B503303C00AC1700007D +:104E7000094A810810683D24084B6401890009181B +:104E80001B19994201D8116010BD0F218020FFF736 +:104E90006BFD002010BD0000B4CF010014C801005C +:104EA00010B511F061FF041C03D10D213C00E8177F +:104EB00000008020FFF75BFD201C10BD0000B0B596 +:104EC000011F0B680D480022834204D001321030CC +:104ED000032AF9D301E0032A06D30924211C8020E8 +:104EE000FFF745FD201CB0BD054B00249A793C001E +:104EF0002418000085680D6081609A71F5E7000054 +:104F00002057010020100700B0B50021104A0023EF +:104F1000D468844204D201331032032BF8D301E069 +:104F2000032B01D304210EE00A4CA37990680028DA +:104F30003C006018000002D1A371032106E005685F +:104F40009560A371002901D104C0B0BD8020FFF796 +:104F500014FD0020B0BD2057010020100700A03034 +:104F6000008A4007400F08280FD201A31B5C5B009A +:104F70009F443C009C18000005030305070709092E +:104F800001207047002070470220704703207047BF +:104F900004207047B0B5104D6869002807D00E494D +:104FA00000222C3103C90143032006F0CFFF0B4C34 +:104FB000002203CC3C00D8180000083C0143032029 +:104FC00006F0AFFF03CC084307494A6802434A6032 +:104FD0008A681043886001206861B0BD0000647376 +:104FE0000100B058010010000700B0B50C1C0FF014 +:104FF000A8FA054DE86A3C0014190000002806D103 +:10500000002C04D0201C0FF0B7FD01202870B0BD8B +:10501000F46E0100054980B5886A002804DA002092 +:10502000886201210DF042FD80BD0000AC7E0100D0 +:10503000F8B51E4D041C00203C00501900006862A9 +:10504000A8701C480078C00722D5B82003591A4818 +:1050500000780E2809D10A1C803206D0184E0D2087 +:10506000325C8A4201DD0138FAD1591E0B061B0E53 +:10507000AB70AB620E280BD208E03C008C1900002C +:105080006218B032127B824202D8581AA86202E03B +:1050900001390029F4DA0EF035F9009000AB1878E8 +:1050A0005978814200D95878ED30E8700121201CF0 +:1050B0000DF002FDF8BD0000AC7E01003C00C819F7 +:1050C00000001D75010011670100C75201000E4963 +:1050D00010B508698B68C200D4186268002A0FD125 +:1050E00001300861072801D100200861201C00F070 +:1050F00024F8054821685430026AFEF7ECFC3C00B5 +:10510000041A000010BD06210620FFF74BFC10BD5D +:10511000506D010008490979C907084A08D400E020 +:10512000081CC1680029FBD101890431018100E01C +:105130000020D0627047000060800700046C01000E +:105140003C00401A000010B5041C19218901002000 +:10515000FFF7C5FD011C60602068FFF7E0FC606898 +:1051600021680830086010BD00000A2801DA042018 +:1051700004E0502801DA052000E00720044A1178F5 +:1051800038233C007C1A0000C000184099430843B3 +:105190001070704788000700B0B5051C07484068CC +:1051A00008E00169A94204D1446805F0C7FD201C4C +:1051B00000E040680028F4D1B0BD0000587501003F +:1051C000F8B500253C00B81A000006F084FD114F28 +:1051D000041CBE792068002807D1A0880430FFF79E +:1051E000F2F8002806D101210FE001682160A169D1 +:1051F0000139A16110C0051C20690130206161697D +:10520000401AE16888423C00F41A000003D90721E3 +:105210008E20FFF7D3FBBE71281CF8BD20100700BD +:10522000B0B509F0BBFF2F4C0028207403D001213A +:1052300001200AF071FC2B4D1435286800284DD050 +:1052400001210F2011F082FD3C00301B0000288955 +:1052500008F0FBFF011C01220F2011F040FDE07857 +:105260000125022836D10AF0C6F800280AD00BF032 +:1052700092FB1E490968401811F05FF8002801D11F +:1052800002202FE0E078022824D13C006C1B0000B3 +:1052900060702570606801281CD015481038817B2B +:1052A000002904D185730F20134910F001FC08F088 +:1052B0004FFE002807D00E4801219838006901F000 +:1052C000B7FD002805D001200EF00CFD3C00A81B06 +:1052D000000001200EF01DFCB0BD05F0DCFEB0BDED +:1052E000E078002801D12570F7E7032000E00420D2 +:1052F0000DF08DFAB0BD846601006C570100E90322 +:10530000010070B5041C002100200A4D00E03C00A3 +:10531000E41B00000131CB005A191679012E02D08E +:105320005279A24202D00B29F4D370BD0B29FCD2D2 +:10533000C80001215A192858117170BD3858010050 +:10534000054880B5007F2423044958434018006A6B +:105350003C00201C0000FEF7DAFB80BD0000D47981 +:1053600001009446010080B504F037FF002011F0E1 +:1053700084FC002080BDB0B5054C051C206BE16AA3 +:1053800002F0E3FD291CA06A02F011FBB0BDA46C81 +:1053900001003C005C1C0000B0B5031C081C141C80 +:1053A000002B0C4D09D06969890001310A04120CE7 +:1053B0002280291CFEF73EFC0AE0011C281C2288E2 +:1053C000FEF738FC2088012802D98008013868617E +:1053D0000120B0BD3C00981C0000206E0100F1B51A +:1053E00000980026C168086809891C2934D3C1883F +:1053F000FF23013399422FD10188C91A2CD141884A +:10540000082929D10179062926D14179042923D1F6 +:1054100000250024071C3C00D41C000018370BE0BA +:10542000A000411804310422381CFEF78BFB002831 +:1054300001D1012504E001340A494869A042EFD8AE +:105440000849087800280AD0012801D0022806D18E +:10545000002D04D10098C0683C00101D0000FFF72B +:1054600042FC0126301CF8BD0000206E01000148FE +:10547000406870470000206E01000249486001202A +:10548000486170470000206E010070B5041C0126C1 +:1054900003F0EFFA251C103500283C004C1D0000DD +:1054A00004D00020207703F0F1FB07E003F038FD83 +:1054B000002809D00120207703F0CEFC011C062231 +:1054C000281CFEF7C3FB02E0022020770026301CD8 +:1054D00070BD00000348807AC00703493C00881D66 +:1054E0000000C00F88627047000040900700A46C65 +:1054F00001000149012088627047A46C0100064840 +:10550000807AC107064AC90F91622021800700D422 +:105510000021A032117070470000409007003C004D +:10552000C41D0000A46C0100074A1268074B9B6968 +:105530001A4001D0012200E000220A600121002A65 +:1055400000D000210160704710000700A46C01002A +:10555000012202600A607047B0B50D1C011C583171 +:105560003C00001E0000041C0622281DFEF777FBED +:10557000211C5E310622281C0A30FEF770FB211C1C +:1055800064310622281C1030FEF769FBB0BDFEB561 +:1055900000251D72171C0E1CB26D0021921950328D +:1055A000D27A3C003C1E00001C1C5A720078321C4F +:1055B0008032C007C017013001900898029200287D +:1055C00001D1307F2BE037480068002800DD011C46 +:1055D0000198002802D00898012810D1029A906BF7 +:1055E000002806D03C00781E0000884201D9451AE8 +:1055F000013D7019B03003E0B56D013D70195030B8 +:10560000007B0FE0029A106A002807D0884201D977 +:10561000451A013D7019A030007903E0BD69013DD4 +:105620007819007FA0723C00B41E00000EF00CF848 +:105630000E2811D1A07A08F067FF00280CD07868F6 +:10564000002805D11B480025007808F04BFF02E038 +:10565000451E7819007AA072029A5069002817D066 +:105660000898012814D0A07A3C00F01E000008F031 +:105670004EFF00280FD00198002807D0022020728A +:10568000706C80194030C079607204E07D68013D23 +:105690007819007AA072029AA07A916908F051FFF5 +:1056A0002060029A607A916908F03C002C1F00008B +:1056B0004BFF6060A07AE0722573FEBDD47E0100CE +:1056C000905701000006000E002A8CB501D08A22F6 +:1056D00000E0882200AB1A800CF0C2F80190684606 +:1056E0000BF0BCFA8CBD0000011C08483C00681F90 +:1056F000000080B50068002809D049680220002910 +:1057000000D101200106090E002006F0D8FF80BD5F +:105710000000206701001CB50190041C443001AA60 +:10572000694611F0B8FD00280BD0A06900213C00AB +:10573000A41F0000C207D20F0220FFF7C9FF0021FB +:10574000201C0FF0D9FE1CBD04219820FFF772F930 +:10575000F9E700008CB500AB84211980054B021CD1 +:10576000181C998A0CF08EF8019068460BF07CFAB0 +:105770003C00E01F00008CBD0000707C0100704701 +:105780000000064980B5C96814234031897A044A6B +:105790005943891880000858FEF7E9F980BD707CEC +:1057A00001005447010080B50020FFF7D6FF80BDFF +:1057B00000003C001C20000080B512481149808A7E +:1057C0000A8B00210028C2B00CD1012A05D0022A80 +:1057D00015D000AB5A800E2207E0022200AB5A809F +:1057E000998004E000AB5A800D2200AB9A8000AB98 +:1057F0001880FF203C00582000009871D97168463D +:1058000000F0D1F942B080BD0000707C010010B5FD +:1058100009F05FFC002005F02AF9034CE08A05F04E +:1058200036F9201C0FF0B3FE10BD707C01001CB5D2 +:1058300009F04FFC07203C009420000000AB074C0F +:105840001880E18A201C0CF00BF8019068460BF0E0 +:1058500017FA201C0FF09EFE1CBD0000707C01009A +:1058600080B502219820FFF7F1F880BD10B5154CE6 +:10587000C2B0A08A002803D03C00D020000001283C +:105880001ED1022000E00120E168403188722069C9 +:1058900008F023FD021C0C4818388088E1680FF0DE +:1058A000A4FEA08A00AB18800120588000209880B8 +:1058B000FF219971D871684600F03C000C2100006E +:1058C0007BF942B010BD03219820FFF7C5F8F8E737 +:1058D000707C01007047000080B503480FF060FE47 +:1058E000002005F0CDF880BD707C010080B5024835 +:1058F0000FF056FE80BD0000707C01003C00482186 +:10590000000080B502219820FFF7A9F880BD80B57E +:105910000320FFF734FF80BD0000F0B5214E0027C3 +:10592000B18A301C002504240029008BC3B01ED18D +:10593000012807D0311C498B022812D100293C00D4 +:105940008421000007D1002405E000240125022065 +:1059500000ABD8801F810FF07FFF002C10D1F168C1 +:105960000520403188720EE000291AD100ABD880A2 +:105970000E2002E000ABD8800D2000AB188107E0BC +:105980003C00C0210000301C0FF013FE201CFFF76C +:10599000FCFE002D08D0B08A00AB9880FF209872E2 +:1059A000DF7201A800F011F943B0F0BD0000707C77 +:1059B000010010B5002005F06CF8044CE08A05F0F9 +:1059C00078F83C00FC2100000FF04CFF201C0FF089 +:1059D000F3FD10BD707C010080B50420FFF7D8FEF8 +:1059E00001480FF0E9FD80BD707C010080B5022008 +:1059F000FFF7CEFE012005F05FF802480FF0DCFD56 +:105A000080BD00003C0038220000707C010080B5A1 +:105A10000320FFF7C0FE80BD0000B0B51D4DC2B031 +:105A2000288B00ABFF21588099710021D971AA8A77 +:105A30000024012A18D12A1C528B02280FD1002AD7 +:105A400016D1032058803C007422000099802C1C41 +:105A5000FF22981DE969FEF73BF9E1680420403117 +:105A6000887210E0002A06D101240E2001E00124F2 +:105A70000D2000AB9880281C0FF0A4FD0420FFF738 +:105A80008DFE002C05D0A88A3C00B022000000AB9F +:105A90001880684600F0A5F842B0B0BD0000707CE8 +:105AA000010010B5002005F000F8034CE08A05F075 +:105AB0000CF8201C0FF089FD10BD707C010080B532 +:105AC0000420FFF76EFE01480FF03C00EC220000BE +:105AD0007FFD80BD707C010080B50220FFF764FE71 +:105AE000012004F0F5FF02480FF072FD80BD0000B8 +:105AF000707C010080B50320FFF756FE80BD0000DA +:105B0000B0B5194D0424A98A281C028B3C00282317 +:105B10000000C2B0012914D1408B042A0BD1002807 +:105B200000D100240FF0ADFE002C19D1E96805204A +:105B30004031887217E0002810D100AB5A800E2047 +:105B400002E000AB5A800D2000AB988019803C0029 +:105B500064230000FF2098710020D871684600F08F +:105B600049F842B0B0BD281C0FF038FD201CFFF7EB +:105B700021FEF6E7707C010010B5002004F09EFFC6 +:105B8000034CE08A04F0AAFF201C0FF027FD10BD93 +:105B90003C00A0230000707C010080B50420FFF7CA +:105BA0000CFE01480FF01DFD80BD707C010080B52A +:105BB0000220FFF702FE012004F093FF02480FF0DD +:105BC00010FD80BD0000707C0100B0B50A4D011CC5 +:105BD00044313C00DC230000041C0622281CFEF794 +:105BE00089F8EC60206903F097F8011C0622A818D8 +:105BF000FEF780F80420FFF7F7FDB0BD707C0100D0 +:105C000090B5041C808893B0002806D01549062260 +:105C1000488018313C0018240000881FFEF76DF8FA +:105C200068460CF014F82088012808D16088032801 +:105C300005D1A088002802D106200CA90870A079FF +:105C40000621FF2804D0E079002801D0011C08318A +:105C50000B2008AA50723C0054240000201C08F0BD +:105C60003BFF039068460BF031F813B090BD000085 +:105C7000587C0100074B1A78824201D0002907D0D6 +:105C8000FF201870044801880122520391430180CB +:105C9000704700004C7B01003C00902400003280E3 +:105CA000070010B5041C0C2307495843401800791D +:105CB0000AF04FF901200349A04008390A7810433F +:105CC000087010BD0000747A0100034A00211154CD +:105CD000800030321058017070473C00CC24000026 +:105CE000E07A010010B5041C052801D3FEF712FF6D +:105CF000201CFFF7EDFF0021201C0EF089FB10BDDA +:105D0000054980B58860087F242304495843085812 +:105D1000FDF76CFF80BD0000D47901003C00082530 +:105D200000009446010080B501219120FEF7C7FED6 +:105D300080BD024A11688143116070470000786E8F +:105D4000010080B5FEF7E9FE80BD80B5FEF7E5FEF7 +:105D500080BD80B500F031FA80BD034980B53C00BC +:105D6000442500000420886000F0D0F980BD0000C8 +:105D70000030070080B500F099FA80BD80B500F0D2 +:105D800099FB80BD38B5202815D20D4C221C20323D +:105D9000957900AB1D70D2795A700A4B82009950E8 +:105DA0003C008025000001218140084801604268D4 +:105DB0001143416000AB1888E08438BD0121FF2009 +:105DC000FEF783FEF9E70010070030740100004081 +:105DD0000700202809D20549064B82009950054A40 +:105DE00051683C00BC250000012383409943516069 +:105DF00070470000A97500003074010000400700E2 +:105E0000024A11680843106070470000786E010074 +:105E10000B48016803221204114301600168072244 +:105E2000120691433C00F825000001225206891811 +:105E300001600168120C11430160016852081143AE +:105E400001607047000080000700FEB51C4E051C75 +:105E5000B08AF26812D00124002909D1116D02AA7A +:105E600001ABFEF7F8FE3C00342600000298002843 +:105E700001D000240BE001AA02A9281CFEF770FF44 +:105E800005E0116D02AA002401ABFEF701FF0E49E7 +:105E9000081C2030827900AB1A70C07958703068C5 +:105EA000002802D1029830603C007026000002E019 +:105EB00002987268D060019800AB70601888C8843E +:105EC000F068C06CF060201CFEBD247E0100001054 +:105ED0000700F8B5041C54271D4E00203060706088 +:105EE00067433804151C000CB1823C00AC2600004E +:105EF000FFF796F8082130610026174A14E0031CCA +:105F0000243342610361C661018308330360B12316 +:105F10004360031C6433C3600C230381031C5433AC +:105F20004C3028C0013C181C002CE8D13C00E8266D +:105F30000000094E07223069D243C1195050021C9B +:105F4000103280398A63F060B06000210020FFF7D2 +:105F500088FF3069F060B060F8BD247E01009100D8 +:105F600005000148406A70470000E87D01003C00E0 +:105F7000242700000148008870470000FC6B0100E6 +:105F8000064980B508880130088005490820086066 +:105F900004498869886100F021F880BDFC6B01002C +:105FA0000010070000300700034A0120121D06CA36 +:105FB0003C0060270000914200D100207047E87D3E +:105FC0000100064800B5C07C002803D1FFF7EFFFB1 +:105FD000002801D0012000BD002000BD0000A080ED +:105FE000070010B5041C800702D506F03EFD03E053 +:105FF000E0073C009C27000001D506F0E3FD6007A8 +:1060000001D5FEF7ABFD10BD024A011C10681160FE +:1060100070470000E87D010038B5204D2C1C20346D +:10602000A07900AB1870E0795870FEF727FA00AB42 +:106030001888E8843C00D82700001A488178082294 +:1060400091438170817811438170174841688022A3 +:1060500091434160016811430160002001306428D0 +:10606000FCD3A0790F4D00AB1870E079104C58703C +:10607000201C103000F03C0014280000DFFB002042 +:10608000C043A061FFF79CFF002809D00A490869B6 +:106090000130086100203C318968486306F0EEFC5D +:1060A00000AB1888E88438BD001007000000070026 +:1060B000F4000700003007003C0050280000E87D95 +:1060C00001000A4880B5006A002801D0FEF7C1F936 +:1060D000074807493C30806810304861012008615A +:1060E0000549086880229043086080BD0000E87D73 +:1060F000010000300700F40007003C008C2800007D +:1061000080B50CF0CBFE06F0BFFC80BD0149C86233 +:1061100070470000E87D0100024A916A08439062DE +:1061200070470000E87D01001823064958434018D5 +:106130000021027903681A70013108303C00C82838 +:1061400000000329F8D370470000285201000349DA +:10615000002800D0011C024881627047000085754C +:106160000000046C0100F8B5FFF733FF284F00284A +:1061700004D0FFF7C8FF386A01303862F86A3C0083 +:1061800004290000002802D0018904390181386BFC +:106190000025002808D00B203D6310F0E5FA1E49C9 +:1061A000086821229043086038783C211B4A41430B +:1061B0008C18FF22796A3A7000290CD0B969013134 +:1061C0003C0040290000B9617D62BD68002D04D00B +:1061D000636B7A6B0021FDF747FDF8BD042803D3FC +:1061E00001218420FEF7A1FC3869261C01303861AA +:1061F00020363078022803D00C218420FEF795FC4D +:1062000035703C007C290000A1690029E8D0636B4F +:10621000303420780C1C00217A6BFDF727FDDFE776 +:10622000046C0100F400070018DB010010B50B4CF2 +:10623000606A00280ED00A4800F012FB002060625D +:10624000A468002C3C00B829000005D07E23DB4365 +:1062500000220121FDF70DFD10BDE0690130E06174 +:1062600010BD046C010000300700094841683F225E +:10627000120491430D2212048918416041680122E1 +:106280005202914341603C00F429000003488178A8 +:1062900081708178817070478000070000000700DE +:1062A000F0B50125082400200E4A0F4900263C23A2 +:1062B0004343D1529B185D719B605E611C82C02775 +:1062C000DF602027FE549E613C00302A000030270A +:1062D000FE54074F3F182037013005289F63E9D34C +:1062E0000548FF3201329062F0BD18DB0100BEBAF2 +:1062F000000030800700066C0100014948607047CB +:106300000000046C01000549085C3C006C2A000098 +:10631000054949684018C006C00E0449203048723B +:1063200070470000A0570100046C010000800700C6 +:1063300080B515218420FEF707FC80BDF8B54348E1 +:1063400084680334424D04E0201C10F03C00A82A6D +:106350000000B9F8002871D12869C007F7D53E4878 +:1063600028603E4A141C2034207900903C233C498C +:10637000584345182879FFF7CCFF281C3A490830C4 +:1063800048600126081C0660686A00280DD03C00A1 +:10639000E42A0000A96A926A354B9F68D71B1A68E5 +:1063A000511879188A425A6800D800E0013206C0B4 +:1063B000E86AFEF787FF2D49E86A4860301C0E60E6 +:1063C00066791FE02B484661047F2949201C50391B +:1063D0003C00202B0000896AFDF75AFC009884429B +:1063E00010D03C202249604340188769002F09D013 +:1063F0000021203001707E23DB4302210022201C7B +:10640000FDF74CFC0120A0408643002EDDD1E96958 +:1064100000293C005C2B000003D03020405DFDF7DC +:106420003AFC164C503C606A002803D00A218420B4 +:10643000FEF796FB20352878012803D00B21842015 +:10644000FEF78EFB02202870E068013000E007E0D4 +:10645000E06000983C00982B00002070009860706D +:106460000A4800686063F8BD0000000107000040B2 +:106470000700010000013080070018DB0100003038 +:106480000700546C010000A00700786E01003C2258 +:106490003C234A4309493C00D42B0000B0B55418B2 +:1064A00058434518211C3822281CFDF7E5FCA06B39 +:1064B0000078A96B0870002020342070B0BD000067 +:1064C00018DB01003C230749584310B54418203419 +:1064D0002078022803D10D213C00102C00008420DC +:1064E000FEF747FB0020207010BD18DB0100FFB550 +:1064F0003C2048431A4981B04418261C2036307885 +:10650000151C0F9F022803D104218420FEF731FBC4 +:106510000120307025710B9930223C004C2C00007A +:1065200061800A99E1620D99A1610C99E1610E996E +:106530006162A762019911557E21C9436163049983 +:10654000002900D10020061C281C08F08BF8002828 +:1065500001D0022000E00020A16B30433C00882CD9 +:106560000000087005B0F0BD000018DB010080B528 +:1065700014218420FEF703FB80BD0148407870475A +:106580000000046C010002480069C007C00F70479A +:10659000000000400700011C3C23044A59433C0012 +:1065A000C42C00008918203109780120002900D06E +:1065B0000020704718DB01000848406A00280AD113 +:1065C000074A002120239B5C022B04D001313C327E +:1065D0000529F7D37047012070470000046C0100C3 +:1065E0003C00002D000018DB0100F8B50E1C041C57 +:1065F000171CFEF782FE201C114C606001202060F9 +:10660000104D686901306861686A002803D007216D +:106610008420FEF7BAFAA068400703D5062184203B +:10662000FEF73C003C2D0000B3FA08480069002842 +:1066300003DAAA218420FEF7ABFA02206862AE607A +:106640002F70F8BD00300700046C01000040070007 +:10665000044A518010710348034908304860012002 +:10666000086070473C00782D00003C6C0100003051 +:1066700007000021002305E002894360C06851182B +:106680000904090C0028F7D104310804000C7047F4 +:106690000000024A516B0843506370470000046CCD +:1066A000010038B50A4C3C00B42D0000221C2032F9 +:1066B000957900AB1D70D2795A7003684068064A1C +:1066C0005065054813655030816000AB1888E08440 +:1066D00038BD000000100700046C010098B50D4C97 +:1066E000201C2030817900AB3C00F02D0000197097 +:1066F000C07958700A4800F0ECF809490020486257 +:10670000FFF769FF002803D012218420FEF749FA21 +:1067100000AB1888E08498BD00000010070000302E +:106720000700046C01000348017A3C002C2E000095 +:10673000FE2291430A310172704700000080070079 +:1067400090B50E4C85B0A078022814D10320A0701B +:106750000B4900200022049202900391E18801225B +:1067600001920091617820782269E3683C00682EEC +:10677000000008F094FD044809F07FF905B090BDD1 +:106780000000B4790100ADB6000071B60000B0B5EC +:106790000C4DAC790C490978002903D001290ED0A1 +:1067A000022908D1C288002A09D0012381683C004F +:1067B000A42E000002200FF0C1F803E00221862081 +:1067C000FEF7F8F9AC71B0BD20100700A079010008 +:1067D00080B5026807494A600379CA78CB700079AE +:1067E000904206D003481430008907F027FE06F0D7 +:1067F0003C00E02E0000ABFA80BD8466010070B55D +:10680000164C154DA0780026983D012803D1286923 +:1068100008F0FBFCA6706068012803D000212869FD +:1068200000F0FFFB0E4829690CF031FA01200CF052 +:10683000E4F83C001C2F0000E078012802D0012081 +:10684000607000E06670064814304168012906D186 +:106850000660416F002902D00020FDF74CFA70BDA0 +:10686000846601003463010030B500220023012555 +:106870002C1C94403C00582F0000044001D0CA5406 +:10688000013301320E2AF6DB181C30BD0000FFB5C3 +:1068900001270026051C022081B00090002D18D091 +:1068A0002878FF2815D0002410E0281980780A994C +:1068B000002901D001063C00942F000008D507F004 +:1068C000E9FE0E2803D0012181400E4300E000279D +:1068D00001346878A042EBDC0098029D01380090FA +:1068E000DFD10398311C814302D003980640002772 +:1068F0000498066005B0381C3C00D02F0000F0BDA5 +:10690000000002210160642101E0013902D0026827 +:106910009207FAD40120002900D10020704710B559 +:106920000020C443054B022201015A50C9188C6053 +:1069300001300828F8DB10BD00003C000C300000DE +:1069400000300700F0B5051C6035C76A041C287BC1 +:10695000002F8BB015D0082815D202A31B5C5B005A +:106960009F4400000704040709090C0C01260021BC +:1069700009E0002606E00226022104E03C0048303F +:1069800000000326032101E0042601218C22125974 +:1069900007912649069004910020039005970892DC +:1069A000E0692269211C7031019121490090700039 +:1069B0004018603002920388591C01801E483C0038 +:1069C000843000000288A1680AA809F0E1FF606035 +:1069D000E87AA16AC9070007000EC90D0843616A79 +:1069E0002269C907890D01430120002A00D1002036 +:1069F00080030843216AC9030843082108430A9910 +:106A00003C00C03000000880201CFEF798FE206982 +:106A1000002804D1201C0AF082F90BB0F0BD807967 +:106A2000062801D9FEF70FF9206906498079800010 +:106A30000958201CFDF774F9EFE7792F0100C469AC +:106A400001003C00FC3000000861010074570100A7 +:106A500010B5041C58308AB00EF07CFE221C803227 +:106A60005168002901D0117A07E0002804D080691C +:106A7000800701D5032100E00121D2680791224956 +:106A8000002008923C003831000004910022059259 +:106A900006900390E06922690090211C70311C4827 +:106AA000019102920389591C01811A480288A16848 +:106AB00009A809F076FF60606B20005DA16A226979 +:106AC000C9070007000E3C0074310000C90D0143E6 +:106AD0000120002A00D10020800308430999088082 +:106AE000201CFEF735FE2069002804D1201C0AF086 +:106AF0001FF90AB010BD8079062801D9FEF7ACF85D +:106B000020690749807980003C00B03100000958B5 +:106B1000201CFDF711F9EFE70000BD2F0100246AEA +:106B2000010008610100745701003EB5051C0069B1 +:106B3000042107F0D2FA002809D042780232011C61 +:106B40006846FDF788F9E86A6C463C00EC310000C5 +:106B5000029000E00024281C143002F003FB0028FF +:106B600004D0211C281C05F0A5FE3EBD002CFCD045 +:106B70000249201C4969FDF7E2F8F6E7447D01006F +:106B800070B51E1C18235843064B049D3C00283248 +:106B900000001950C418002060616260A660E560C2 +:106BA0000FF0B9FD206170BD0000B87D0100024A00 +:106BB000011C9069916170470000447D010001480B +:106BC000406B70470000447D01000449044B3C00C9 +:106BD00064320000CA6809695C3B5B68C91A4143BA +:106BE00050187047A07D01000148007870470000F0 +:106BF0007869010080B506220149FDF735F980BDAD +:106C0000FE670100F0B589B00093164F131C0E1CEF +:106C10003C00A0320000041C3A1C01F062FF01A9F4 +:106C200006A8A26802F00BF901AA06A9381C636A3B +:106C300002F081FC051C012814D10C48FC21C8512C +:106C4000381C02F00CF80321301C07F052FA00281F +:106C500007D03C00DC320000807800F033FC201CC0 +:106C600010300EF047FD00E00025281C09B0F0BDF3 +:106C7000F4670100C138000010B5074C0648062231 +:106C8000211D0838FDF7F6F801F0FCFF00F042FC8A +:106C9000201C02F03C001833000027FC10BDF467F4 +:106CA00001000849C96800290AD0064A0132517812 +:106CB00012784843002A01D108187047101870470D +:106CC000013070470000447D0100044B0549002855 +:106CD0005A6900D0011C3C0054330000101C59615B +:106CE00070470000447D0100B9750000074900208D +:106CF0000A78022A09D10A7C002A05D1CA68002A2A +:106D000003D04969002900D001207047786901004B +:106D10000C4A80B5012151603C009033000009F01D +:106D20006AF809481C308169002907D00023836173 +:106D300000220021002000F0D2F880BD00220021B6 +:106D4000034800F05CF980BD00005C69010051352A +:106D50000000B0B50C1C012816D13C00CC3300005B +:106D60000E4D022C09D100F02BFA00280ED06869D4 +:106D700000280BD1211C13200CE0032CFAD100F0C9 +:106D8000F9F9002802D0287C0028F3D0B0BD211CDE +:106D90000006000E04F062FCB0BD00003C000834A8 +:106DA000000078690100B0B50C4C002525746561C0 +:106DB000E56000F03CFA00F034FA07481C38056141 +:106DC00009F033FF2078002802D104F06EFAB0BD3C +:106DD0000228FCD104F0A5FBB0BD786901003C009D +:106DE000443400000C4880B50178002912D0C068F6 +:106DF00000280FD108481C38406900280AD10748EC +:106E00000068002806D000220721102010F0A0F909 +:106E100002F02CFC80BD000078690100D4670100FD +:106E20003C0080340000F8B51D4E1C4D041CF06879 +:106E300002271C3D002807D0E868002804D0FDF791 +:106E4000C2FE002800D0BC43002C14D03770F0687C +:106E5000144F002810D0E00717D4FDF7B4FE002827 +:106E600013D03C00BC3400007069002806D1E868EB +:106E7000002801D0FDF71AFF0DF00AFAF8BD686985 +:106E8000002805D109480068002801D0012C04D150 +:106E9000391C201C0EF052FDF0E704F01DFB02F03F +:106EA000EBFBEBE73C00F83400007869010050C3CD +:106EB0000000D467010005484169002904D0406AF8 +:106EC000002801D001207047002070470000786939 +:106ED000010010B5041C0649002048600860886065 +:106EE00008F09BFF07213C00343500001220227976 +:106EF00010F03AF910BD00005C6901000149012061 +:106F000008607047E8670100F8B5071C0E1C08F020 +:106F1000A3FA134D041C6868002817D0002F02D074 +:106F2000A868032813D300203C0070350000A86037 +:106F30006860211C0F200EF0F0FE2868002803D0A6 +:106F4000002C06D1012002E0012C02D10020FFF725 +:106F5000FAFEF8BD721C0021044800F068F8A86829 +:106F60000130A860F5E75C6901003C00AC35000029 +:106F7000513500000A4980B5CA68002A0BD0426822 +:106F8000002A09D000224A6202680A6202680721C8 +:106F9000172010F0EFF880BD0120486280BD00008E +:106FA0007869010070B5144D846CE9683C00E835DF +:106FB0000000002917D04030EC614078002801D152 +:106FC00001206862286A0E4E001BB0420CD208F005 +:106FD0003AFE296A401AB04203D202220721132046 +:106FE00009E004F0B6FA70BD0748A9680BF03C0050 +:106FF00024360000BDFE221C0721162010F0C0F828 +:1070000070BD000078690100A086010034630100B2 +:107010000A4980B500208861086900280CD007481B +:107020001C300078002807D001F0D2FF022803D1DD +:107030003C006036000000F012F900F0BCF880BDA2 +:1070400000005C690100F0B5061C0C1C151C91B019 +:1070500001A84021FCF70DFF00216846FDF7A7FFBE +:10706000049001A806220849FCF731FF062202A875 +:1070700002303C009C3600000649FCF72BFF00ABB9 +:10708000DC760C95311C01A807F04EF811B0F0BD6C +:1070900012610100F8670100031C081C191C114B48 +:1070A00080B506D0042111800422191CFCF712FFC0 +:1070B00016E004223C00D8360000011C181CFCF726 +:1070C0000CFF09481038006900280CD007480C3024 +:1070D0000078002807D001F084FF022803D100F0D7 +:1070E000C4F800F06EF8012080BD6C690100F8B5AD +:1070F000041C0F1C00253C0014370000002601F082 +:1071000073FF02282FD11949012F086807D1021CEB +:1071100022400AD120430860A04206D104E00028A2 +:1071200003D0A043086000D10125486800281AD187 +:10713000002D17D0012048603C0050370000381C5B +:1071400008F089FE0B481C308169002907D0002314 +:107150008361002200210020FFF7F1FE06E00022FB +:1071600000210448FFF77BFF00E00126301CF8BD3A +:1071700000005C690100513500003C008C370000C4 +:10718000031C081C191C124B80B506D00421118069 +:107190000422191CFCF7AAFE18E00422011C181C8A +:1071A000FCF7A4FE0A481030C16800290ED0007810 +:1071B00000280BD001F01EFF022807D13C00C83781 +:1071C000000000F064F800F02EF8002801D109F06A +:1071D0007AFD012080BD6869010010B50A4C206964 +:1071E000002809D0A169002906D17D21C9004143A9 +:1071F000032207200FF0E1FE2169012000293C0055 +:107200000438000000D1002010BD00005C690100BE +:1072100010B5054C002803D0FDF79AFCE06010BDC6 +:1072200001200021E16010BD786901000A480A4987 +:1072300010B5C0681C39C968002803D0002901D0E6 +:107240003C0040380000012400E00024002C03D062 +:10725000022207200FF0B7FE201C10BD0000786945 +:10726000010010B5094C0020216900290CD0064905 +:107270001C310978002907D000F009F80120A0612D +:1072800020693C007C3800007D23DB00584310BDA2 +:107290005C69010080B5032107200FF0D1FE80BD9D +:1072A00080B5022107200FF0CBFE80BD064880B5D7 +:1072B0000078002801D0FDF729FD002207211120C8 +:1072C0000FF07CFF3C00B838000080BD00007869FA +:1072D000010010B5041C101C064A516100F0A3F80F +:1072E0001020002C00D11120002207210FF069FF8F +:1072F00010BD5C6901000149486270470000447D8F +:10730000010010B5094C3C00F4380000E069002889 +:107310000CD1E0620120E0610BF008FD0BF074FE7F +:10732000012000F0B5F80FF04DFA606310BD0000C9 +:10733000447D0100054980B50020C861886300F0E4 +:1073400089F800F001F902F03C003039000091FBAF +:1073500080BD447D010010B5012838D10806000E1B +:10736000052832D11D4C2078012809D002281BD0D5 +:1073700003282AD102F07DFB00F06FF8012010E015 +:107380001748216B0BF01BFD0BF03C006C39000023 +:1073900041FE15480069032801D3C00703D5012128 +:1073A000206B07F019FF022000F078F810BD0F489D +:1073B000006820640A485C30C16802698918C160AD +:1073C00003F0CCFC032000F069F801203C00A83950 +:1073D0000000E06210BD092100E008210920FDF74E +:1073E00076FC10BD0000447D010034630100F468A8 +:1073F0000100786E0100B0B50F4C2078651E0128A1 +:107400000FD10020FFF7A1FC0C49098849083C0076 +:10741000E4390000401A0FF019F9002804D0287848 +:10742000012807D0022805D02078002804D1287828 +:10743000032801D10120B0BD0020B0BD457D010071 +:10744000F46701000149C86470470000447D0100F1 +:107450003C00203A00000449054A8968126D012069 +:10746000914200D3002070470000F4680100447D81 +:10747000010010B5064C206B07F0F9FEA06B002848 +:1074800003D10348216B0BF092FC10BD0000447D3A +:1074900001003C005C3A00003463010004480078BD +:1074A000022801D0032801D1012070470020704735 +:1074B000447D0100F8B5071CFFF7D0FF061C012F23 +:1074C000264D1FD0022F45D0032F12D12448254B23 +:1074D00000696A693C00983A000041085A43234B0E +:1074E000D4188C4200D90C1C002E05D01E495B39E3 +:1074F0000978002900D1041C0522211C09200FF065 +:1075000080FD184A5C3A1770F8BDFFF7D6FB0028DB +:1075100002D0286900283C00D43A00000ED004F0C4 +:10752000CFFB134B6969114A59435C3AD26B8918F6 +:10753000884201D9441A04E0002402E004F0AEFDC0 +:10754000041C002EDBD009485B3800780128D6D116 +:10755000084B9C4202D958423C00103B00002418C2 +:10756000D0E70024CEE704F0AEFBCAE70000F468E1 +:107570000100A07D0100983A00008813000080B54A +:10758000052109200FF07DFD02490020087080BD13 +:107590000000447D010070B5061C3C004C3B00001F +:1075A0000DF0BCFAFFF7CEFE094C0A48216B0BF038 +:1075B00021FC012501213006000EA56307F03AFEEB +:1075C000054829020958002900D1056170BD000055 +:1075D000447D010034630100F46701003C00883BF6 +:1075E0000000024A116C0843106470470000447D9B +:1075F000010080B5FFF7BFFE0BF0A1FB80BD024A82 +:10760000011C1069116170470000447D0100F3B551 +:10761000061C002089B0F84C0890E26908253C005F +:10762000C43B0000002A03D006A907A8FCF706FC0B +:10763000301CF34E0027203682286FD015DC01283D +:1076400018D080286BD1EE4D803DA868012867D105 +:1076500068680FF01BF8002863D1012101200DF0AC +:107660003C00003C00009DF808F0DBFD0BB0F0BDD5 +:1076700083286DD0842855D1E7E00A980A2804D2DF +:1076800003A31B181B5A5B009F44F6E00000EE00AA +:107690000B00F700F700F700F7002F0088008B00C1 +:1076A000AD003C003C3C000000F056FE002817D026 +:1076B000D64A803AD16A0698814216D0062100281F +:1076C00000D107210D062D0E00280ED0CF4A012033 +:1076D000803A50650FF0A0F8CC4A803A506604E03A +:1076E000002116203C00783C00000FF0DCFC012556 +:1076F000022005902EE2C6488038406D00282ED02A +:10770000C6492069C44D40180EF0C1FF002812D0B0 +:107710000FF085F8C14949424018BD4920618039C0 +:10772000486E40190EF03C00B43C0000BBFF00283E +:1077300011D00AE0F7E017E2B2E0B0E0B649206904 +:107740008039496E401AA84205DBB349B54D8039EE +:107750004F6503F027FB0622291C16200FF072FC50 +:1077600047E095E000F0FEFD3C00F03C0000002802 +:1077700042D1AA4DC43DEF6008F019FD03F015FB9E +:10778000A86A002802D0FFF74CFFAF62A4488038F7 +:1077900000680021FFF7F9FC08F03FF909211620E5 +:1077A0000FF087FC0022162183203C002C3D0000B6 +:1077B0000FF040FDFFF786FC21E000F01BFE1EE00D +:1077C00006F054FA974D803DA96F401A0490069830 +:1077D000002801D0AF6502E0A86D002808D19148CB +:1077E000C4380078800703D5924847603C00683D64 +:1077F000000000F002FE0498FF382338142802D25B +:107800000120E86353E0EF6351E0874AB57A803A9C +:10781000002D4CD00DF071FF00F0ADFD071C82482B +:107820008038406FFF305F300EF03DFF021C3C009F +:10783000A43D00007E488038406D00281AD100F039 +:10784000F1FD002816D1042D02D1002F12D11BE02A +:10785000002F06D0022D14D079484068002809D0A6 +:1078600012E0002A10D14B21C90001230922162061 +:107870003C00E03D00000FF0D6FC6E4A7348803AB1 +:1078800011680BF0D8FA18E00121002001E0012175 +:10789000012000F02AFE10E0674A6C49803A906EA1 +:1078A00040189066012508958BE104216CE1614A3E +:1078B00066483C001C3E0000803A11680BF0AAFAB2 +:1078C00088E1AF60A86FE8676348016DA967079A10 +:1078D0001420002A00D1002008181230A866707801 +:1078E000B0703078707002203070A069FCF7C2FA76 +:1078F000EF64A86F3C00583E0000E96F594B401AF6 +:10790000984212D2686D069988420ED030780228CB +:107910000BD80EF09CFFA96F0822401A5249091A91 +:107920003B1C16200FF085FC00E0AF6501200590A0 +:107930000890434802253C00943E0000C438C168CA +:10794000002972D10121C1604948006B00286CD028 +:1079500008F066FC69E03C480022019280388068AB +:10796000012804D1384880388760012048E13A482E +:10797000012343603448C4383C00D03E0000007806 +:1079800000280AD100F025FE002806D0FF21913101 +:107990000123092216200FF052FC2C498039486F30 +:1079A000896F421A039206F076F928498039896F67 +:1079B000039A401A0290372000013C000C3F00005F +:1079C000101A50280DD223488038406D002804D169 +:1079D0000298FF385538142801D2012200E0002215 +:1079E0000192039A0120FF3A0B3A502A00D300205B +:1079F000049000280AD017488038C06F3C00483FE8 +:107A00000000081A9B21C900401A142801D2012243 +:107A100000E000220092002A11D00F4D0120803D8D +:107A200068650EF020FF68660125012116200FF021 +:107A30005EFB002116200FF05AFB00E0BAE03C008C +:107A4000843F0000F07902283CD8054A803A516C06 +:107A5000002937D1136C111C002B33D116E0000024 +:107A6000246D010050C30000C05C15007099140023 +:107A7000B057010034630100E204000000900700E9 +:107A80003C00C03F0000530700001E020000C85722 +:107A900001004A6D002A02D0B27A022A15D1009A5A +:107AA000002A03D0CA6D0132CA6500E0CF65019A91 +:107AB000002A0BD08A6FCB6FD21A5A4B9A4202D24D +:107AC0008A6D3C00FC3F0000013200E001228A6523 +:107AD00000E08F650499002901D102280BD9544A8E +:107AE00002281ED9D06F616888421AD1916F081A96 +:107AF0005049884215DD4E4B986FE168401A7D2150 +:107B0000C90088423C00384000000BDD6169401A22 +:107B1000002804DD021140111018401801E0801007 +:107B200008186061586FE0600398FF382338142804 +:107B300009D20298FF382338142804D23E4A906FA5 +:107B40005064906A90643C00744000000EF09AFE0D +:107B50003A49496C401A3B49884201D937494F6438 +:107B6000394903984018142807D23449C86B0028B3 +:107B700003D0886F0864886A88640EF083FE2F49FA +:107B8000096C401A314988423C00B040000001D9DC +:107B90002C48076404200590082116200FF0B9FA3C +:107BA0002848406D002802D00499002908D02949AE +:107BB000002800D129493B1C062216200FF057FB54 +:107BC000022D09D0062D0AD0072D3C00EC40000004 +:107BD00013D107E001211620FDF7D6F81EE01A4A5E +:107BE00057639763184A0698D06207991163536BDD +:107BF00018435063906B084390630598002805D0A4 +:107C000005980CF05FFA05980CF0D2F93C00284179 +:107C10000000082D05D00D4844388570281C03F05D +:107C2000DCFD1149E069884200D161E5089800282F +:107C3000FBD0B07A0228F8D1012116200FF06FFA9C +:107C400002200DF0E8FE53E50000530700003C0061 +:107C500064410000A46C010020A10700204E000038 +:107C60003FFBFFFFA086010050C30000C05C150071 +:107C7000F11D00007047000070470000F8B5214872 +:107C80000068214D6969084001D1012700E0002703 +:107C90003C00A04100001D4D0126696A002900D06A +:107CA00000261B4D1A482C1CA030027A281C40309C +:107CB00080341023B74210D10125C580002900D09F +:107CC00000231A43111C017301200EF088FE0820C6 +:107CD00020703C00DC41000000221621802013E0CF +:107CE0001127C7802E1C0B4D002900D100231A43F9 +:107CF000111C017301200EF075FE08202070306DFC +:107D000000221621686782200FF0D0FAF8BD00002B +:107D1000100007003C0018420000A46C0100009015 +:107D20000700B0B50F4D041CAA7A0121081C002AD7 +:107D300000D00020002C00D0002188420AD0002C66 +:107D400004D100F042FB00F0D6FA03E000F0D9FACB +:107D500000F009F8A87A3C00544200000249E439D6 +:107D60004871AC72B0BD0000446D010080B53EF0BA +:107D700055F802490120087080BD0000687E0100AE +:107D8000F3B501208DB00F1C012408900EF092FD78 +:107D9000061C00F0B5FA09903C009042000000F08B +:107DA00080FB0790FEF73FFA051C00210C9108F0BC +:107DB000F0FB002801D1012000E000200A90FEF72E +:107DC00012FD05F0E0FE0B90002D23D0288841071E +:107DD00020D4291D04910A3500063C00CC42000045 +:107DE000800E01212028039500D000210D1C04984D +:107DF00006F038FD0C90049806F010FD002808D01D +:107E0000039801F087FA002803D0002D01D101204A +:107E100000E000200C9901430C91FCF73C00084362 +:107E2000000023FF00282FD007F099FF051C07F062 +:107E3000B2FF0490FFF7F3F80C990143002D06D030 +:107E40000498F04A301A904201D2012000E000204C +:107E500008430C900B980A9B1843011C0B913C00A3 +:107E60004443000005F0CEFE00281AD1002D06D0B4 +:107E70000498E749301A884201D2012000E000202E +:107E80000C990843051C00F01FFB284303E000F099 +:107E90001BFB0C9908430C9000F0D4FB0B99014399 +:107EA0003C00804300000B91DC49C868002801D0E9 +:107EB0000138C86008F0E7FB069008F090FD311A21 +:107EC00005910699D648814208D8002F08D1059916 +:107ED0004008814204D90699814201D900248BE0EF +:107EE000D0483C00BC4300000599D04D814226D2C9 +:107EF000E879102806D2002F21D1CC48A038806A1A +:107F000000281CD109F062FF0490002802D1002053 +:107F1000C34913E009F010FE002803D0C448C0692B +:107F20000028F4D03C00F84300000498052803D052 +:107F3000C148006A002865D1BB49486A002823D09F +:107F40000138486200F087FF002811D0BB4805992E +:107F500081420DD201F09BF804300DF0EEFC403070 +:107F6000C17A01294ED03C0034440000807A0028B8 +:107F700001D0052849D301F0DFF8022810D0002FE6 +:107F800002D10698002840D10020089082E1AA483A +:107F9000A038C068002838D0A8488069486234E01A +:107FA0000AA903C9084345D03C0070440000A34817 +:107FB0002978A038022940D8406D00280AD09F486F +:107FC000A2492038C06840180EF0C7FB002801D035 +:107FD000012100E00021964A906A002802DA640834 +:107FE00064002AE0002909D1954B3C00AC44000014 +:107FF000A03B5B6D002B02D005280DDB01E00728BC +:108000000ADB0120C043906264088E4964000020AE +:10801000A039886514E0D1E0394311D18949A039EC +:10802000CB6D002B02D1896D012909D93C00E844B0 +:108030000000079B002B01D1072801DB64086400C6 +:1080400001309062BDE07D4988690490002088611C +:108050000C9800282CD007F066FC002802D00220E3 +:10806000044325E07A48C06A002804D177483C00E0 +:1080700024450000A038C06800281CD104980028BE +:108080000DD12878102802D3E878022802D928795F +:10809000102804D304246B4901228A6194E06C48BF +:1080A000A038406D002871D005F0A2FD00286DD0E9 +:1080B0003C00604500006408640088E0FFF75BFA5C +:1080C00000281AD068480078022801D1002F14D166 +:1080D0000020FEF770FE301A0490FFF76CFA0028BB +:1080E00007D0FFF71EFA002803D05D4904988842A4 +:1080F0004FD33C009C45000005F06CFD00284BD19F +:1081000053490878032808D188680122D207301A19 +:10811000904241D201220A7057E054480078022868 +:1081200001D1002F51D14A4988685149801B8842AA +:1081300007D901203C00D8450000FEF742FE7D2112 +:1081400009014018444988604A480078022804D14F +:10815000079B002B01D1012000E00020474B47493D +:10816000584340183C498968891B884230D9079B8D +:108170000020039300F03C001446000079FF0290B9 +:10818000FFF7D8F9049001F057F80499029A514387 +:108190004843019000F0DCFF411C01980122484354 +:1081A000111C00E01BE0314B5B6A834200D30021CD +:1081B000039B0122002B00D03C005046000000220F +:1081C0002C4B51439B6A0122834200D30022500072 +:1081D000081803D023490320087003E00998C068F9 +:1081E000062808D90224089800286ED01D490020CE +:1081F000C8614861A5E01A4948693C008C46000006 +:1082000000280AD1002F05D001224A61C8698018D0 +:10821000C8610AE00020C86103E0002F05D10020FA +:1082200048610D98002800D1C8680020089008789F +:1082300001282FD002284BD1002F08D13C00C8467E +:108240000000E878002802D12878102843D2287945 +:10825000102840D248680A69301A904267D3012238 +:108260000A7038E00000E204000010270000687E79 +:108270000100A086010088130000446D01003C004D +:1082800004470000C857010050C30000983A00009E +:10829000C0570100400D0300C4090000B20C0000EB +:1082A00000200B9A0A9BC0431A4337D0002F35D1C8 +:1082B000079B002B08D06A78022A2FD92A78102A27 +:1082C0003C00404700002CD22A79102A29D2254BA5 +:1082D0001A6C002A06D09A6A9F6CBA4202D11F20FB +:1082E0001FE02EE0204B5A6C002A03D01F4FB31A18 +:1082F000BB4216D31C4B002A05D09A6A9F6CBA4227 +:1083000001D13C007C4700000F200DE0079A002AB5 +:1083100004D0EA79202A01D1002005E0EA79102A68 +:1083200001D3032000E09A6A124A126802400BD17E +:1083300001200890022008700F4808614E6064E731 +:10834000FFE701203C00B8470000089060E70C49B7 +:10835000886A002801DA013002E0002801DD0020EF +:108360008862002008620899200408430FB0F0BD1D +:108370000000A46C010071020000082007005307F0 +:108380000000687E01003C00F447000070470000D8 +:1083900000487047507E010080B53DF07FFD0249E6 +:1083A0000120087080BD00003C7E0100F8B50D1C66 +:1083B0000EF0C8FA2649041C886A264E002801D00F +:1083C000042003E0706A00283C003048000001D01F +:1083D000013870620027002D02D0B761F7610AE012 +:1083E000B0691C490130B061496D002903D00328F0 +:1083F00001D90120F061B460F168009108F0F7FC48 +:10840000F0600099884202D030623C006C48000065 +:1084100034610BE000F090F8002801D0114800E032 +:1084200011483169611A814200D937620B4A0C4800 +:10843000D16C2030002901D00A2103E0017A002903 +:1084400001D0FF310172002D03D1017A3C00A84810 +:108450000000002900D0916A007A002800D1176539 +:10846000F8BDA46C01003C7E0100A60E0000A861CE +:10847000000070470000064980B58968002907D0D0 +:108480000521002800D104210806000E03F03C005D +:10849000E448000005FA80BD606C010007480068F0 +:1084A00007494A69104001D0012000E00020496AD4 +:1084B000884201D10120704700207047100007005A +:1084C000A46C010070B50EF049FA021C00F03AF8F5 +:1084D0003C0020490000104900280ED0081CA031A3 +:1084E0000E780E4B102E01D3806F03E049781029CF +:1084F0000ED3C06FC018841A0AE0081C803045698A +:1085000008498D4201D90C1C05E0C068101A2C1ACC +:10851000002C3C005C49000000DA6419201C70BD8E +:10852000A46C0100A60E000050C3000080B505F049 +:10853000B7FB002802D007F01FFF80BD034800787A +:108540000028FAD007F070FB80BD0000606C0100CD +:10855000034901203C00984900004969032900D8DB +:10856000002070470000606C0100B0B50A4D002487 +:108570002878012803D005F06AFB0406240EFEF7D4 +:10858000D2FC0002204302D1686A002801D10120F8 +:10859000B0BD0020B0BD3C00D4490000606C0100BB +:1085A0000121012800D000210148416270470000EC +:1085B000606C0100154810B504681548006A002871 +:1085C00014D0FFF7CBFF00280ED111481149C43059 +:1085D0004069884208D2CC083C00104A0000A04202 +:1085E00005D3FFF77EFFA04201DA0C4C01E0FF2427 +:1085F00091347D200001844204D900221621832079 +:108600000EF0BDFE01230922211C16200EF0A7FE4C +:1086100010BDB0570100606C01003C004C4A0000E6 +:10862000C05D00001027000070B5051C0E1C00F096 +:1086300043F800280FD0084C2078C00703D405F079 +:10864000ABF909F031FE002D05D02078800702D467 +:10865000301C02F0FDFE70BD606C01003C00884AD9 +:108660000000B0B5002818D01148814215D210483A +:108670000C1C0D1807F0DFFA81000918A14201D285 +:10868000400003E041000918A14201D2241A06E08B +:108690004100A14203D24008F8E7064D074C3C00D8 +:1086A000C44A00000EF072F90019291C07F0DCFA28 +:1086B000B0BD000080B92A00530700004C1D000027 +:1086C00088130000B0B505F0FDFA002813D1FEF7BD +:1086D000B5FE0A4C0A4D0028606300D028600EF0F9 +:1086E0003C00004B000055F9216A002904D1E169E2 +:1086F000401A2968884201D90120B0BD0020B0BDD0 +:108700000000606C0100B057010080B5FFF7DDFF8D +:10871000002805D005F0B7FA002801D1012080BD5E +:1087200000203C003C4B000080BD000010B50A4C0E +:108730000021A268002A03D0A16002F083F910BDD5 +:108740006160011C002204200EF036FD0348216800 +:108750000AF008FC10BD0000BC740100C4600100F8 +:1087600070B5051C3C00784B000001D1FCF7C1FB43 +:10877000204CE06A002815D01F4BA0695843C60B57 +:1087800020884643F0008019E660FBF71CFEA842F3 +:1087900005D8301CFBF717FE8019A84202D2002032 +:1087A000E06020E0E5603C00B44B0000002D1DD0EF +:1087B0002688A0697043C103281CFBF7A5FD6061F2 +:1087C0000D48321C291C3030FBF70AFC0C4B606949 +:1087D0005843C00B606201F0B7FDA062E06800285A +:1087E00004D02069A168FBF73C00F04B0000F4FBCB +:1087F00070BD0548A168FBF7EFFB70BD0000C874B1 +:10880000010040420F00C0C62D0088130000F1B5E2 +:108810003E4800AB8178C0783E4F0A07040758787D +:108820003B49120F085C1439240F3C002C4C00000B +:10883000801878600130B8601878354D085C0019F0 +:10884000B8610130F861EB7833481E09334B1838B2 +:1088500081785E43AB781D09C8236B43002908D19A +:108860002B4D2D783D60C5607D25ED003C00684CAA +:1088700000005D1B2C4B07E0274D6D783D60C56007 +:108880004B252D015D1B284BF618022000F057F8F0 +:10889000281AF8602248221C18388178032000F03A +:1088A0004EF8301A3862396800AB79615A783C006A +:1088B000A44C00005623F9685A43891AF960C8315C +:1088C00039611849183989780029B96911D100AB83 +:1088D0001A78134B143B9A5C531C59430A2359438F +:1088E000144B591A51430A235943401A386212490A +:1088F0003C00E04C000010E000AB1A780A4B143B3F +:108900009A5C531C59430A2359430D4B591A51433E +:108910000A235943401A0B49386240187862F8BD5F +:1089200000000C5A0100665A010094780100A086EC +:1089300001003C001C4D000000487100B0D68C00C6 +:1089400088100000803801005812000070110100EA +:1089500030B5194B0228DD6806D1002904D12B1C43 +:108960000C339C1A64235C43022809D1012907D1E6 +:1089700064237D243C00584D0000E4006B431C1927 +:10898000A0235343E41A0A235A43032809D1002998 +:1089900007D11323FF24E4006B431B199B1A1C1CF3 +:1089A0005C43032808D1012906D10E2005496843FC +:1089B0004018801A041C3C00944D00004443201CC5 +:1089C00030BD00007C7801008408000010B5074C21 +:1089D0000C2360780549143158434018406801F071 +:1089E0004FFC0021607802F04BFF10BD4C7B010072 +:1089F0000C48F8B540780C233C00D04D00000A49E3 +:108A0000584314314418261D60CE301C0BF00BFD6A +:108A10000027412047550548291C02F0F0FE281C7C +:108A200001F031FC0434C0C4F8BD4C7B010055801A +:108A30000000B0B50A4D4C2128783C000C4E0000D7 +:108A4000094A41438C1822680121FBF7E1FA287892 +:108A500001F0FAFB3C23E056411E012007F034FBF5 +:108A6000B0BD00003C7C010058E301000C23074925 +:108A70005843401880B54068416B00293C00484E7F +:108A8000000002D00BF0FBFD80BD0BF02CFD80BD83 +:108A90000000607B010038220A4B4243D2180029B3 +:108AA00080B504D0022907D10BF0FBFC80BDD26A4F +:108AB0000121FBF7B0FA80BD03218620FCF73C00C2 +:108AC000844E00000FFA80BDD4E40100B0B5040666 +:108AD000240E0C200E49604340184568A86B0028FE +:108AE00003D10021201CFDF7E1FA201C07F0F2FF62 +:108AF000002808D0281C6030C179012903D9FF3132 +:108B00003C00C04E0000C171FF3181710121201C69 +:108B100002F0C5FEB0BD607B010070B50006000E1E +:108B2000051C4C230A49584344183C20005DFF3083 +:108B300006063616281C01F090FB0021281C22682E +:108B4000FBF73C00FC4E00006FFA311C002007F0E0 +:108B5000C7FA70BD58E301000C220F4B4243D218F4 +:108B600010B5546800290DD002290FD12C20005DCA +:108B7000002803D007210C20FCF7BAF9201C0BF0C9 +:108B8000BBFC10BD3C00384F0000002102F08DFE00 +:108B900010BD04210C20FCF7AEF910BD0000607B75 +:108BA000010080B5002907D00C230549584340181F +:108BB00040680BF04AFC80BD012102F076FE80BDCA +:108BC0000000607B01003C00744F000010B5041CE5 +:108BD000002905D002291AD1201C0BF0EBFC10BD96 +:108BE0000D4804700D4807F007F90D48018801226F +:108BF0001203114301804C200A4960434018403061 +:108C00000078FDF75DFD201C3C00B04F00000AF02D +:108C1000D4F810BD03218620FCF773F910BD3C7C0D +:108C20000100054E00003280070058E30100FFB547 +:108C3000051C012083B001900C205D4A6843861812 +:108C40000127002974680ED002293C00EC4F000077 +:108C50006AD12C20005D002803D006210C20FCF7EF +:108C600053F9201C0BF020FD07B0F0BD524814381A +:108C70004570A06B002807D0504807F07FF801210D +:108C8000281CFDF725FA1CE04D4807F03C00285051 +:108C9000000077F84A48143805704B4801880122D3 +:108CA0005203114301804020005DFDF712FDB068C2 +:108CB000002809D1281C07F064FFB060002803D108 +:108CC00009210C20FCF723F90598002803D03C006B +:108CD00064500000E06C0130E0640EE06720005D4D +:108CE000002807D1E06C002804D139480238C06A56 +:108CF000A06409E0206D002801D0002704E0281CB2 +:108D000007F000FF0028E5D105982065201C2030E1 +:108D10003C00A0500000626A0290817B281C07F092 +:108D200078FF002F19D0201C6030C1794A1CC27115 +:108D30008079814202D2012001E040E000200190D0 +:108D400000280AD025480078800706D500F00DFBE2 +:108D5000011C3C00DC500000201C0BF015FD0190B4 +:108D6000019800280FD00298007B022803D1201C14 +:108D700004F0D0FE84E7012800D07EE7211C301CDF +:108D800004F0E2FE7CE7251C6035E879FF30A8712D +:108D9000687A06F03C00185100009DFC0DF047FE7B +:108DA000071C05F012FF3F180298817B20690430F0 +:108DB00000F035FA616A05F0EAFE39186B7A3088FE +:108DC0008031094A0DF091FE5DE703210C20FCF78C +:108DD000AAF858E700003C0054510000607B0100F5 +:108DE000A54D0000C94D0000328007001D7501002F +:108DF0008D4E0000FFB581B01F1C051C141C101CFB +:108E00000A9E00F0F5FC291C1031201D0622FBF7FC +:108E1000B7F9A88E2080E88E3C0090510000608059 +:108E20000299201C00F007F9FF34013466602760C6 +:108E300005B0F0BD0000F8B50F1C1E1C051C141C6D +:108E4000101C00F0D8FCA888391C2080288960807C +:108E5000201C00F0F0F8FF3401343C00CC5100003D +:108E60006660F8BD70B5041CC0680568201C14302D +:108E7000061C00F00FFB002816D0012202212069F9 +:108E800005F0F8FA002801D0FBF724FF00220221A8 +:108E9000206905F0EFFA002806D0FBF73C000852E5 +:108EA000000001FF002802D0301C0BF07CFB688919 +:108EB0008007C00F03F0A7F818230449584340184F +:108EC000C168002902D0201CFBF7D4F870BD94675C +:108ED0000100F8B5041C101C0D1C191CFF223C00DD +:108EE000445200000027FF2D25D0002905D04B88D3 +:108EF000002B02D000F050FC15E00021104E4B007A +:108F00009E190223F65E864201DD0A1C04E001314F +:108F10000906090E2629F1D3094E500080194E2367 +:108F20003C0080520000C05E272A07D20649203943 +:108F300049574731401A2060012702E07E20C04394 +:108F40002060381CF8BDFA470100B0B50C1C7E212A +:108F5000051C0020C943002C0FD0101C05F06BFD30 +:108F600000283C00BC52000002D0211CC93901E09D +:108F7000211C86390220C043FBF7B4F9011C0120F3 +:108F80002960B0BD98B5141C00220092221CFDF788 +:108F900043FE98BD054980B5086005490120C861B8 +:108FA000012100203C00F852000003F01CFE80BDAF +:108FB000000020670100AC7C010080B5002100208A +:108FC00003F011FE06F00DFB02490020086080BD91 +:108FD000000020670100034901200969002900D130 +:108FE0000020704700003C0034530000106701006F +:108FF00003480069002801D040697047002070478D +:109000001067010070B5161C0D1C041C002801D04F +:10901000012C07D100F036FA002805D013F0CAF968 +:10902000002801D1012070BD3C00705300000120D8 +:10903000002C00D000200A4C043461C4103C00F025 +:1090400024FA002802D000F0C6F901E000F0E5F8AB +:10905000C030C36B221D07CAFBF720F8002070BD8B +:109060000000D4670100F8B50D1C3C00AC530000B3 +:109070000021041C281C05F0E3F9231CFF332133D5 +:10908000FF27002805D02222011C181CFBF796F8A8 +:1090900000E01F700321281C05F0D2F9261CFF36C2 +:1090A0004136002805D00322011CB01C3C00E853C7 +:1090B0000000FBF786F800E0B7700121281C05F0DE +:1090C000C2F9002807D0011C201CFF300A224630BC +:1090D000FBF777F800E077713221281C05F0B3F92F +:1090E000002807D0011C201CFF30122250303C0009 +:1090F00024540000FBF768F800E0F7730621281CF1 +:1091000005F0A4F9002807D0011C201CFF30042220 +:109110006330FBF759F8F8BDFF346134A770FAE704 +:10912000084980B50968002801D107480168081C72 +:109130003C006054000005D103219020FBF71DFF87 +:10914000002080BD01F0D7FB80BD1C6701002067B7 +:10915000010080B5FFF7E7FF80BDF0B5002484462D +:1091600000200BE08740174007D014230B4D4343EA +:109170005B193C009C5400001B7C65462B55013458 +:10918000013001273B1C0E2800D300230E883D1C14 +:10919000A64200DC00252B40E7D10C80F0BD00008A +:1091A0007440010078B5041C01202070082000AB39 +:1091B0000D1C18803C00D8540000161CA01C6946E9 +:1091C000FFF7D1FF00AB0022D243198882406170C3 +:1091D00032202870102018803240A81C6946FFF702 +:1091E000C2FF00AB1888687078BD80B502F035FF0B +:1091F0000021002800D03C00145500000169081C23 +:1092000080BD00000549002801D0C86800E0086959 +:10921000002801D00430704700207047106701001B +:1092200003480069002801D00430704700207047CF +:1092300010670100024800693C00505500000028FA +:10924000FFD1704700001067010010B5054C206980 +:10925000002803D104219020FBF79BFE206910BD5C +:1092600000001067010010B5041C00F040F9002850 +:1092700001D0002010BD201C00F03C008C550000E7 +:1092800057F9002801D0012010BD022010BD0000B8 +:1092900070B50F4E041C30680D1C002807D0211C2F +:1092A000043005F0C1FB002801D030680BE0094A0A +:1092B0001068002809D0211C141C04303C00C8553B +:1092C000000005F0B4FB002802D020689C3000E0CC +:1092D0000348405D70BD206701001C670100CC475A +:1092E0000100044900200969002902D0FF31013141 +:1092F000886970470000106701000148007A3C004F +:109300000456000070470000AC7C0100FEB5061C4E +:1093100000201F1C141C0029029019D0012926D0FE +:10932000022947D12648007805F0A0FBA0720AF078 +:109330004FFC0E2809D1A07A05F0AAFB002804D022 +:109340003C00405600002048007805F092FBA072D7 +:10935000002020722FE01D4D2868002801D1FBF766 +:1093600052FE00972A68231C1832111C301CFCF78F +:10937000DEFB26E0301C0CF0CAFB051C02D0A868FE +:1093800000283C007C56000008D1134800680028E3 +:1093900001D1FBF73BFE104800681830021C0E4854 +:1093A00000970168231C1831301CFCF7C3FB002D0B +:1093B0000AD040352888800606D40020206003E0CB +:1093C000012190203C00B8560000FBF7F4FD029804 +:1093D000FEBDB069010090570100206701001C67C5 +:1093E000010080B5002002F04AFE1823054A5843C8 +:1093F000801840690121002800D04178081C80BDF8 +:109400000000946701003C00F4560000024908691E +:10941000002800D1C8687047106701000348C06881 +:10942000002801D004307047002070471067010009 +:1094300010B5054CE068002803D105219020FBF70A +:10944000BDFDE06810BD00003C0030570000106713 +:109450000100F8B50D1C002A03D01149124F0E78F7 +:1094600001E0114F0C26082E01D2341C00E0082424 +:10947000012101704470391C221C0230FAF7CBFE26 +:10948000321B002A07DD322028703C006C57000098 +:109490003919A81C6A70FAF7C1FEF8BDFF202870C0 +:1094A00000206870F9E70000A4690100B0690100BC +:1094B000905701000149486270470000946701001D +:1094C000034980B508600121012003F03C00A85742 +:1094D0000000C5FB80BD1C67010080B50021012094 +:1094E00003F0BDFB06F0B9F802490020086080BD1A +:1094F00000001C67010003490120C968002900D150 +:10950000002070470000106701000348C0683C005D +:10951000E4570000002801D04069704700207047E0 +:109520001067010080B50221012003F09BFB80BD84 +:10953000054A80B512690021002A03D0111D05F0EB +:1095400091FA011C081C80BD10670100064A80B515 +:109550003C002058000012690021002A05D0111C8F +:10956000FF31213105F08BFA011C081C80BD10670A +:109570000100054A80B5D2680021002A03D0111DE0 +:1095800005F073FA011C081C80BD10670100064A33 +:1095900080B53C005C580000D2680021002A05D04C +:1095A000111CFF31213105F06DFA011C081C80BD32 +:1095B00010670100FFB50D1C1F1C87B0109E002412 +:1095C00002F072FD1823134958430858002819D097 +:1095D000041C331C3C00985800003A1C281C0999B4 +:1095E000FAF79FFD041C14D0182000AB1880AA685D +:1095F00001A86946FFF7E7FD6A4601A9002007F0C8 +:1096000044FE002805D10A2100E00F219020FBF73D +:10961000EAFC201C0BB03C00D4580000F0BD000058 +:109620009467010010B5002402F044FD1823054999 +:10963000584340188068002802D0FAF771FD0124D1 +:10964000201C10BD9467010080B5024B00F04EF85D +:1096500080BD0000106701003C001059000080B57B +:10966000024B00F046F880BD000011670100F8B51C +:109670000E1C151C00281C4910D048681C4A288064 +:10968000002007E00B181C7A142363439B181B7CF3 +:10969000335401302B888342F4DC3C004C590000E9 +:1096A00024E000200F1C002408600FE0305D05F06E +:1096B00007FA0E2801D10020F8BD391908720122DD +:1096C000396882401143081C386001342888A04260 +:1096D000ECDC28887860FFF7B7FE00283C0088594A +:1096E000000006D00169002903D07F21C9430BF097 +:1096F00052FB0120E3E72C7D01007440010010B50E +:109700001C1C00280BD020780E2805D214230C4AEC +:1097100058438018007C00E0002008700EE03C00F8 +:10972000C4590000087805F0D1F92070FFF792FEC7 +:10973000002806D00169002903D07F21C9430BF01E +:109740002DFB012010BD00007440010080B52720D2 +:10975000C04309F031FC80BD80B52720C04309F02B +:109760003C00005A000039FC80BD80B5282009F07B +:1097700042FC80BD000080B5282009F04AFC80BD75 +:109780000000B0B5012828D1012901D0FBF76BFCFE +:10979000FFF7E9FD02281AD107F013FC124C2169EA +:1097A00088423C003C5A000015D007F00DFC2061B7 +:1097B00020687D24E40044430DF0AEF9051C07F059 +:1097C0000BFC281A844200D9241A0122211C0A20E9 +:1097D0000DF0B2FDB0BD002109200CF075FCB0BD4C +:1097E00007210A203C00785A0000FBF714FCB0BDAA +:1097F0000000D46701007D20024900010860704725 +:109800000000D467010010B5816D041CFF304630A4 +:109810000CF0D1FC201CFF305030A16D0CF0CBFCC3 +:1098200010BDB0B5041C3C00B45A00000D1C02F081 +:1098300059FC201C02F056FC1823044958434018D8 +:109840001822291CFAF770FDB0BD000094670100D2 +:1098500010B5041C09F0BCFB201C09F0C7FB10BDAF +:1098600010B5041C09F0D0FB3C00F05A0000201C8D +:1098700009F0DBFB10BD70B50C78061C48884D78EC +:10988000E200801AE900401A011C414312312420F1 +:10989000FAF791FD211C6143C9004018291C694356 +:1098A000C90042180C4988790C4B3C002C5B000025 +:1098B00053430C4A1360537B34021460527B88710B +:1098C00001335810084B801A0121490258430028DF +:1098D00000DA494208188012213870BD20100700B4 +:1098E000EC04000000A00700030300003C00685BDC +:1098F000000010B5041C06210430FAF770FCFF20AC +:109900002130FF210155201CFF3041308170417111 +:10991000C173FF2063300155002020616061FF3476 +:109920000134A060E06010BD000070B5061C3C0072 +:10993000A45B0000081C58609A601C1C1E60151C6B +:109940009B8AE28A311C02F0A1FC281AE06070BDFB +:1099500070B5041C081C111C1E1C0025EB43221CA6 +:1099600018320BF0F7FB221CFF325032111C0A395F +:109970003C00E05B00000123201C00F0C6F80C282E +:1099800010D00125201C0BF0ACFA201C00F019F8B7 +:10999000201C00F00AF8201C00F029F8311C201CC3 +:1099A0000BF017FA281C70BD0000FF211D3109586B +:1099B00080303C001C5C00008907002901DA01218D +:1099C00000E00021C1627047011C803100220A635F +:1099D000074A1268002A09D04288920606D5FF304D +:1099E0000130C069400701D40120086370470000BE +:1099F000AC6901003C00585C000080B5011C4A883D +:109A00000020520505D5FF310131C969490700D44D +:109A1000012006F0ECFB80BD0000F8B5051C98683D +:109A2000171C0E1C1C1C002802D1201C0CF031F845 +:109A3000AB69391C301C3C00945C0000A2680BF040 +:109A400095FBF8BDF8B5161C0D1C1F1C002402F078 +:109A500061FB18230649584340184368002B05D082 +:109A60003A1C311C281CFAF78EFB0124201CF8BD7F +:109A70009467010080B507F03C00D05C0000C5FA97 +:109A8000094908610868002802D17D2000010860AA +:109A900008687D21C9004143002301220A200DF0FE +:109AA0004EFD80BD0000D467010080B501210A2071 +:109AB0000DF097FC80BDF8B50E1C3C000C5D00005D +:109AC0005168141C1268A5680B1C751B5719974226 +:109AD00000D20131426800258A4202DD0125626020 +:109AE00005E09A4203D10168B94200D90125002D51 +:109AF00009D001682160A660A38AE28A3C00485D23 +:109B00000000606802F0D7FB301AE060281CF8BD46 +:109B1000000080B502F007FB1823034958434018A2 +:109B20001821FAF798FB80BD000094670100FEB58C +:109B3000041C081C111C1E1C0C25012200923C0058 +:109B4000845D0000A26902ABFDF7F0F8002845D063 +:109B500002982721021C0A4001D1084302902149A2 +:109B6000A069084006D00298014003D14921C900EC +:109B700008430290A06D0299884230D0002E2DD06B +:109B80003C00C05D00004021201C5830FAF769FB02 +:109B9000029800250026371CA06519E0C00711D5E2 +:109BA000F019001970300571281C04F0D4FF00284A +:109BB00004D0A01980300572013603E0E01960304E +:109BC00005703C00FC5D0000013701352D06029850 +:109BD0002D0E4008029002980028E2D18420065100 +:109BE000F0192067E765002500E00B25281CFEBD65 +:109BF000D83A000038B5051C081C111C0024E243AB +:109C00006B46FFF73C00385E00004FFA002805D095 +:109C1000A86900990140814200D10124201C38BD6F +:109C200000007CB5056A8669041CC068FBF7B7FBB9 +:109C3000E169FBF7DAFA201CE2694030C18B128936 +:109C40008918C18306493C00745E000001940091AC +:109C50002869331C82880168E068C06800F0F2F966 +:109C60007CBD0000915E0000B0B5D1685569C86840 +:109C7000141C144B0CE002689A4207D1C268CA60F7 +:109C80000021C1600160FBF73C00B05E000073FB87 +:109C900003E0011CC0680028F0D1E068C068E860FB +:109CA000E068C560201C4030C18B2A898918C183B7 +:109CB0002068002802D0FFF7BAFFB0BD044804F0C6 +:109CC0004EF9006A07F077FAB0BD3C00EC5E000088 +:109CD000A07E0100A06A0100F1B582B00298066979 +:109CE000011C083660314568019182E01021002096 +:109CF0002F69FBF763FB6861018908390904090CC6 +:109D000001816869006840180821FBF73C00285F62 +:109D1000000057FBE86168697188006820220180B3 +:109D2000716841600199497B89011143C17000212B +:109D300081702820FBF775FC3988041CC181A86B51 +:109D4000002803D1012080020843E08106223C0064 +:109D5000645F0000391D201C1030FAF7C5FA391C69 +:109D60000A310622201C16300090FAF7BDFA391C81 +:109D700010310622201C1C30FAF7B6FAE189254A78 +:109D80005C201140012292031143405BE1810F21CD +:109D90003C00A05F000008406084201C2030162199 +:109DA000817100212170E96B002907D02969098B95 +:109DB0000907090F2170A184182181710622601CF6 +:109DC0000099FAF794FA7068000EE071706800026A +:109DD000000E3C00DC5F0000207270680004000E82 +:109DE00060727068A0727088000AE07270882073D8 +:109DF000708801300004000C708002D1706801305E +:109E00007060AC61029828622D68002D00D079E75F +:109E1000029804493C00186000004268044804F0BD +:109E200074F8FEBD00008FC7FFFF3DDA0000A06A96 +:109E30000100B0B5074D2878032808D000242C7005 +:109E40006968002903D00120FAF7C8F96C60B0BD39 +:109E500000009C7301003C0054600000F8B52B4BDF +:109E6000D86A002850D02A48011CFF310131CA6845 +:109E70000132CA601A6C002A02D14A6901324A6171 +:109E80000A6901320A61DA68002A04D01F4A0132E5 +:109E90001278002A02D18A693C00906000000132E9 +:109EA0008A610025071D18261A4A6E43743290599C +:109EB000002829D0B4186069002825D160680028DE +:109EC00002D00168002905D1A16800291CD00968C9 +:109ED000002919D0002805D0E1683C00CC600000C2 +:109EE0000131E1600068814211D3A068002806D0EA +:109EF0002169006808180CF0A3FD002807D0064A65 +:109F00000120606174329159381CFAF770F90135FB +:109F1000022DCBDBF8BD0000447D01003C00086150 +:109F20000000F4670100F8B50F1C0025041C002890 +:109F300025D0201C04F003FE002806D0FFF7FFF810 +:109F4000041CFFF750FB061C07E0201CFFF791FBE9 +:109F5000061C201CFFF76FFB041C002E06D03C00E3 +:109F600044610000FFF74CFB002802D001250120CE +:109F700007E0002C06D0FFF7EFF8002802D00125FB +:109F800000203860281CF8BDB0B5C568041C0DF071 +:109F90008FFC207EC10708D5E168A94205D9226956 +:109FA0003C0080610000914202D3E18A0131E182EC +:109FB000810708D5E168A94205D22269914202D8F9 +:109FC000E18A0131E182400706D5E06821698842D3 +:109FD00002D1E08A0130E082E08AA18A88420DD372 +:109FE000607E3C00BC61000002280BD02068E16864 +:109FF000042207F065FB607E002803D1206808F08A +:10A00000ABFFB0BD0020E082B0BD000070B5061C03 +:10A010000C232049584345180020A860301C06F046 +:10A0200091FE041C3C00F8610000686033D0012000 +:10A03000A8702C20005D022803D1201C03F045FEEF +:10A0400010E0616B00290AD0012804D1211C281CD2 +:10A0500003F055FE06E0201C0AF00DFC02E0201C77 +:10A060000AF03DFB0D483C003462000014384168A2 +:10A07000002910D0201C4030028B1207920F012AB9 +:10A0800009D0808B32020009000410438122024370 +:10A090000C200DF0B7F90CF0A5FD606470BD000058 +:10A0A000607B0100FFB5081C3C0070620000111CC1 +:10A0B0000C32202414430C4A83B00CAE526860CE9C +:10A0C00094700024D47093630D234027BB52946195 +:10A0D000148401220292321C00900191231C291C3D +:10A0E000039800F066F907B0F0BD3C00AC620000D8 +:10A0F000A07E0100F8B5041C0027114E1DE0E068A9 +:10A10000002870680CD1808800070DD101210C480F +:10A11000FBF784F9C460E86070688188013102E06F +:10A120008188228989188180E068391C3C00E862B6 +:10A130000000002801D17168C96D251C6160041CF4 +:10A14000002CDFD1F8BDA07E0100064910B549689A +:10A15000002305E08A88048912198A804360C06858 +:10A160000028F7D110BDA07E010010B509493C00C0 +:10A1700024630000002449680AE08A880389D21811 +:10A180008A80C368221C002B00D1CA6D4260181C53 +:10A190000028F2D110BD0000A07E0100011C134870 +:10A1A00010B54068002309E082880C89121982806A +:10A1B0003C00606300004B60CA68002A00D1416621 +:10A1C000C9680029F3D1011C68318164C364436507 +:10A1D00082880823111C08318907890F591A5023D6 +:10A1E000195251188180011C406E4831C16010BD68 +:10A1F00000003C009C630000A07E010010B50749F0 +:10A2000000244B6806E0C268211C002A00D1D96DE9 +:10A210004160101C0028F6D110BD0000A07E010096 +:10A2200070470000FEB5061C0C480C1C40688021DD +:10A23000817000213C00D8630000C170151C4022D1 +:10A2400081631152816101840020042202920090F6 +:10A250000191291C201C1A1C331C00F0BCF8FEBD07 +:10A260000000A07E010070B5061C1748807802210E +:10A27000164A884390703C0014640000101C8078DB +:10A280000843111C887013480024C4707020FBF729 +:10A29000D9F9114D70216860FAF734F83007000FD2 +:10A2A00069689030C8650D4868220880081C28300D +:10A2B00089604861082008823C0050640000081C46 +:10A2C00038304863203848645A20505406480831D2 +:10A2D0004164446570BD0000070058000700A07E7F +:10A2E0000100DEC00000003007000A4B10B5586DB9 +:10A2F0000A490022496800244A623C008C6400003C +:10A300005C654B6E002B01D0DA604A668B6D002BCA +:10A3100003D00A6E0021F9F79CFF10BD0030070042 +:10A32000A07E0100094910B508880130088001208D +:10A33000074980020860074CA26D002A3C00C864EF +:10A34000000005D00521D1200DF06FF90120A06596 +:10A3500010BDB07401000010070000300700FFB509 +:10A3600083B00CAE86468C460E4A43CE0FAD0F1C12 +:10A3700052680C3730CD9770D37096630D263C0031 +:10A38000046500004027BE52059E9661138400229A +:10A3900002922A1C00900191211C6046734600F035 +:10A3A00029F807B0F0BD0000A07E0100FFB5101C29 +:10A3B0001A1C0C1C191C6023FF3213430C4A83B077 +:10A3C0003C00406500000CAE526860CE93700023E4 +:10A3D000D37093634027BB5293611384032202928C +:10A3E0000191291C321C0090201C039B00F005F8F1 +:10A3F00007B0F0BD0000A07E0100F8B5051C1148B3 +:10A400001C1C3C007C650000089B079F4068DE0028 +:10A4100081650266002181800D488159201CF9F771 +:10A4200022FF0B4830184168281CF9F71CFF074928 +:10A4300006984968002C88620F8600D12C1C0548BC +:10A440004C6245653C00B86500000121016501646E +:10A45000F8BDA07E01009052010000300700FFB55A +:10A4600083B00DAE60CE0C9F081C111CD219FF32B8 +:10A47000402414430B4A526894700024D4709363B0 +:10A4800040239F5294613C00F46500001484022232 +:10A490000292321C00900191231C291C0398FFF7A3 +:10A4A000B5FF07B0F0BD0000A07E01004C210D4AB1 +:10A4B000414310B58C180C490978884207D105F042 +:10A4C000C7FD0A48018801223C00306600001203E3 +:10A4D00091430180201C30300C23C156407B8142C7 +:10A4E00002DD208D0CF0E5FB10BD58E301003C7C43 +:10A4F000010032800700011C603180B5CA798B7978 +:10A500009A4207D9487A0C2307493C006C66000040 +:10A510005843085A0CF0D0FB80BD2030007B012846 +:10A52000FAD1487A05F040FD80BD0000607B010053 +:10A5300010B5041C1C21F9F703FF0348A080E0803C +:10A5400020816081A08110BDFFFF00003C00A86653 +:10A550000000FFB5041C002083B00D1C062C0290E7 +:10A5600038D21F4AFF26C10089188978A14203D139 +:10A57000C0008018467804E0013000060016062866 +:10A58000F1DBFF2E24D00193201C0DF0E8F93C00F4 +:10A59000E4660000002805D02421281C01AB02AA93 +:10A5A000FAF730FE1049F00030390F58310609161D +:10A5B000281C059A019BF9F76EFE061C10D1201C81 +:10A5C0000DF0D0F900280BD0281C6969FAF712FEAB +:10A5D0003C00206700000298686104E0062C01D36B +:10A5E000072600E00826301C07B0F0BD0000CC5A5A +:10A5F000010010B50C1C09F086F8002802D0201CC0 +:10A6000009F0B5F810BDFEB5134D041CAE69002E5F +:10A610001CD03C005C670000104F30377868604306 +:10A62000011C2888F9F7D2FF39686143411801A855 +:10A63000321CF9F737FE0298296A401828620BD4B9 +:10A64000E969884208D9A969401A2862019801304D +:10A6500001E000203C009867000002900190019802 +:10A66000FEBDC8740100F8B5002828D00024144DA0 +:10A6700000E0013461000919491949780029F8D12D +:10A6800063001B1903330722694603F0D4FB002C37 +:10A690000FD0002000993C00D46700000AE042007F +:10A6A0001218AE5C531852195E71567801309E71C3 +:10A6B0009278DA71A042F2DB00980322023003495B +:10A6C000F9F77EFEF8BD0000EB620100E8620100D0 +:10A6D000B0B5051C081CFAF73C00106800009DFF8F +:10A6E000041C281CFAF7D9FE211CFAF7FCFD201CDB +:10A6F000B0BDF3B544480C1C007881B0012872D17C +:10A70000FAF782F8414DE86A41490860E86B486011 +:10A710004048FAF7A6F9E86A00283C004C680000B7 +:10A72000FCDA221C0F2001990AF0A4F8384D022708 +:10A730002F63384A64260020AA21083213180130FA +:10A740000004000C64281974F8D3168100205060AE +:10A75000101C103010600025171CD2603C00886867 +:10A76000000008E0281CF9F7A2FF413178190135F3 +:10A770002D042D0C0174B542F4D3264D6F630120D6 +:10A780002863244DE86A0028FBDA0B223B1C244E88 +:10A7900003E00132642A00D10022101C0C213C008D +:10A7A000C46800000139755C1F183F7CBD42F3D1BD +:10A7B000013800D563200029F4D1184E501CF16BEC +:10A7C0001A4A101C0138FDD1F06B884201D0011CDF +:10A7D000F7E702273763164D9021281CF9F7CEFDC5 +:10A7E0003C0000690000281C28302860281C10301C +:10A7F0002F81E860281C20302861042100E00CE053 +:10A800002983E861ED62756301203063221C892091 +:10A8100001990AF038F800202863FEBD00000857AF +:10A8200001003C003C69000000300700108E010070 +:10A8300074FF010009570100204E0000E4FE0100F2 +:10A8400080B513281ED0F02816D109F0B5F90028DC +:10A8500013D10DF0BFFA11F00DFC00220421C42029 +:10A860000CF01CFF3C0078690000094800210078CA +:10A8700005F03FFD05F093F807490120086080BD11 +:10A88000011C0120FAF787FC80BD00F032F880BD82 +:10A8900000006A5701003CD90100B0B50CF0FFF987 +:10A8A0000B49022448603C00B46900000A48046176 +:10A8B0000120772109030861084D6868800702D4E8 +:10A8C00068682043686009F0C7F96868A043686059 +:10A8D0000020B0BDE060010000300700000107006B +:10A8E00080B50123032200213C00F0690000022012 +:10A8F0003CF0F1FA002801D0FAF781FC80BD1CB5CC +:10A90000FCF7F5FAFAF719FE01F003F90024211C0F +:10A91000684601F0E2FB00AB1878012803D002285A +:10A9200001D0032801D10CF0B2FC3C002C6A0000DD +:10A93000013424062416062CECDBFAF709F9FAF7A1 +:10A94000E7FCFAF733FAFAF76DFAFBF7DFFF05F0E9 +:10A950004DFB06F081FC0BF07DF907F029FC114856 +:10A960001021016009010160C90201603C00686AB0 +:10A97000000089000160202101600421016008219C +:10A98000016040210160802101608900016049006F +:10A9900001604900016049000160C9030160890B41 +:10A9A0000160F9F741FF1CBD0000001007003C00EA +:10A9B000A46A000080B53BF04FF83BF07DF9FAF750 +:10A9C0004BF980BDF8B5002500240022002871D085 +:10A9D000434FB9680B1ABB60F868391C0130F86046 +:10A9E000896A002B1EDC0224002906DAFB699842E2 +:10A9F0003C00E06A000006DD3B69984209DD07E0A3 +:10AA0000BB69984201DC012403E07B69984200DDC8 +:10AA10000324786A002808D000207862032C01D132 +:10AA2000022402E0022C00D101242E48012C0079DE +:10AA300018D13C001C6B0000BB78994215DA3B78BA +:10AA40007B7039700131B96201D50131B962B96ADF +:10AA50000125994203D1042804D2013000E00020EE +:10AA600038710122002933DA27E0032C35D1002682 +:10AA7000002807D03C00586B00001E498140386A0E +:10AA800008180CF05CF800282CD01B480078400710 +:10AA900005D5F8683969884201DB0323FE56B86A98 +:10AAA000B04212DD01217962397801257970387060 +:10AAB0000138B86288423C00946B000001D000214C +:10AAC000397100280CDA0720387100E012E007E045 +:10AAD0003879002809D0FF30387106E0002A02D00A +:10AAE0000CF0F8F83862002C04D0FEF797FD291C12 +:10AAF00008F0FCFBF8BD00003C00D06B0000AC7E11 +:10AB0000010050C300001D75010080B510680028C9 +:10AB100002D000F00AF880BD0348C069806808F0E0 +:10AB2000B2F980BD0000846A010010B5041CC06841 +:10AB3000C068002801D1FAF77AFB3C000C6C0000D9 +:10AB4000E068E169C068231C014AFFF7D7FB10BD2C +:10AB5000DD6B0000B0B5051C0C210020FAF7D6FC17 +:10AB6000041C006800214160016029880181698816 +:10AB70004181291CFF312131201C03F03C00486C2D +:10AB8000000077F9291CFF314631201C03F071F9D0 +:10AB9000291CFF315031201C03F06BF9291CFF31B7 +:10ABA0004331201C03F065F9291CFF316331201C5F +:10ABB00003F05FF904480068002802D0201C3C0024 +:10ABC000846C0000FFF78EFD201CB0BDE462010024 +:10ABD000F8B5051C0C1C04D105211820FAF702FB5E +:10ABE0004DE0291C12310622601CF9F725FC221CBD +:10ABF00030320026002100201670344B1B5C2F8A57 +:10AC00003C00C06C0000DF40FF0707D51778013318 +:10AC100001371770671830377B70013101300E280B +:10AC2000EEDBA87B6072107800282BD02A481E210A +:10AC3000095C271C1037217201686181C189217765 +:10AC400081893C00FC6C00007973C18AA181018B71 +:10AC5000E181428A211C60314A80828A8A801F49B0 +:10AC60002C31097A002909D002290AD10122626215 +:10AC70006272428BA281808BE08103E001216662D7 +:10AC800000E000213C00386D0000E87B084001D165 +:10AC90000020F8BDA868431C09D0221C1232009283 +:10ACA000931D0232211C01F09CFAA06200E0A66212 +:10ACB000687B291C1D3120740B4820222062201C37 +:10ACC0004230BE73F9F73C00746D0000C1FB4034A4 +:10ACD0002670687E0449607068682C3148600120E5 +:10ACE000DAE7000090580100C86E010091020100EF +:10ACF00070B5161C0D1C041C002806D00C20FAF799 +:10AD000047FD30C0083806723C00B06D000070BDD1 +:10AD1000002070BD0000011C054880B5006801D00E +:10AD2000012100E00021FCF7A0FC80BD00000C79AF +:10AD3000010070B50E1C041C002801D1FAF78FFA2F +:10AD4000064D2868002801D0FAF73C00EC6D0000A1 +:10AD500089FA04482E60C4600121017070BD0000B2 +:10AD6000A87E01003000070010B5074C20680028BD +:10AD700001D1FAF777FA054800692168F9F7DFFA97 +:10AD80000020206010BD0000A87E01003C00286E5D +:10AD900000003000070001200549C00680B50860AA +:10ADA0000022032154200CF0B8FC80BD00000010EC +:10ADB000070080B500220421C4200CF0AEFC80BD49 +:10ADC0000000044880B500880249FFF7B8FF3C0046 +:10ADD000646E000080BD0000754B0000C874010067 +:10ADE000F8B5061C31480025C0680C1C002830D07E +:10ADF0002E482F4F0430007838762C4804304078A5 +:10AE00003881002A0BD0F9F7A5FA1F20B876201C4C +:10AE10003C00A06E0000F9F7F6F925480430807870 +:10AE2000B87643E02548224984424D6902D26C43FA +:10AE3000E40B0FE01F48211C806A0090F9F723FC07 +:10AE40000099021C4A43A11A1A4A6943526AC90B63 +:10AE500050433C00DC6E00004418022C01D8002056 +:10AE6000F8BDF9F77DFA1F20B876201CF9F7AEF986 +:10AE7000041C114804308078B8760F4F7D6AAC42CC +:10AE800004D2201CFFF722FC051C12E0211C281C08 +:10AE9000F9F7FCFB3C00186F0000061C6843201A01 +:10AEA000FFF717FC051C002404E0786AFFF711FC8B +:10AEB00045190134B442F8D3281CD4E70000C87403 +:10AEC000010030000700C0C62D00011C7D2080B5A8 +:10AED000C000F9F772FB3C00546F00000249886122 +:10AEE0004008C86180BD0000C874010010B5064C60 +:10AEF000211C00200BF042FA211C00200BF00AFA62 +:10AF000000F068FE10BD0000856F000030B50F4DE9 +:10AF10002A78042A19D8002A3C00906F000017D024 +:10AF2000002107E04B005B185C190123E4568442C2 +:10AF300002DA01318A42F5DC8A4200D10139480047 +:10AF4000401840198178024A343A1170C078507024 +:10AF500030BD0075010030B5111C3C00CC6F000005 +:10AF6000383185B09162082111860023141C011C20 +:10AF70005363C068154D0BE00268AA4206D1C2684F +:10AF8000CA60C3600360FAF7D1FA03E0011CC0682D +:10AF90000028F1D1221C4032082120683C000870B2 +:10AFA0000000FAF764FB0B49201C4830029004941F +:10AFB0000391E069828801686E2001920091221C51 +:10AFC0005632035D211C28312068FFF758FA05B07E +:10AFD00030BDA07E0100D57000001CB507493C00C3 +:10AFE00044700000021C01900091C069131C848809 +:10AFF000016810684833221CFFF708F91CBD0000E7 +:10B00000C96F000010B5141C184803F089F8A0425D +:10B0100001D0FAF745F90422201C4030A16AF9F763 +:10B020003C0080700000BDF9002802D101202062A0 +:10B0300005E0002020628420005D002803D1201C50 +:10B0400009F023FB05E02068FAF779FA201CFAF7EB +:10B05000A4FBE0698079062806D1206A0649002809 +:10B0600003D03C00BC70000008690130086110BDCD +:10B0700048690130486110BDA06A010028610100E3 +:10B080001CB5141C154803F051F8A04201D0FAF782 +:10B090000DF9201C4F300279417900AB12021143A7 +:10B0A000C27812043C00F870000011438278120646 +:10B0B0001143009101784078090208439880201CD0 +:10B0C000694606F03CF9002803D1201C09F0E3FA98 +:10B0D0001CBD2068FAF739FA201CFAF764FBF7E781 +:10B0E0000000A06A01003C0034710000BCB51F4D97 +:10B0F000141C281CDC3003F01FF8A04201D0FAF722 +:10B10000DBF8A06C00AB027881781202114302795F +:10B110001204114342791206114300918179C079DA +:10B12000000208439880201C3C00707100006946B2 +:10B1300006F00BF9002817D001280ED1ED6C002D78 +:10B140000BD08020025DE06C0121002800D100219D +:10B1500060686B460A30F9F723F92068FAF7FBF9C3 +:10B16000201CFAF726FBBCBD201C3C00AC71000083 +:10B1700000F08EFEFAE70000C4690100BCB5041CB3 +:10B18000406A0025002803D06068008B05072D0F5A +:10B19000221C403208212068FAF77EFAA168019546 +:10B1A0000091211C221C6032206850313C00E87163 +:10B1B00000000D1CE36809F0E2FFE069806B0028E5 +:10B1C00003D1FEF7E8FA002801D0182000E0102093 +:10B1D000064901940091E169082309680A18211CB5 +:10B1E0002831281CFFF787F9BCBD357100003C00F1 +:10B1F0002472000010B5101C3830906204201086B4 +:10B20000002050631068141C40320421FAF74AFAF7 +:10B21000231C211C2831024A2068FFF7BDF810BD0D +:10B22000657000000EB5C369021C9888054902923A +:10B230003C0060720000019100901B6810689169E9 +:10B240000322FFF7AEF90EBD0000257200000EB517 +:10B25000021C0649102000900292131C01911068F4 +:10B26000002270330021FFF79CF90EBD000025720B +:10B2700000003C009C72000010B5031C002100205F +:10B28000084C00E00131CA00A2589A4202D00B29B2 +:10B29000F8D310BD0B29FCD2C90009190020087190 +:10B2A000012010BD385801008CB500AB86211980F3 +:10B2B000011C04483C00D872000006F0EEFE01902C +:10B2C000684606F0FAF88CBD0000707C010010B5ED +:10B2D000041C0D480D4994B00480062218310C302E +:10B2E000F9F7FBF801A807F0A2F80C2009A94872A9 +:10B2F00000AB1C8002213C0014730000684603F080 +:10B30000DBFF049001A806F0D1F814B010BD0000D6 +:10B31000587C010080B504F045FE05F053FA80BD6D +:10B3200010B5194CE068002806D0611C0878002888 +:10B3300003D14878FF3008703C005073000010BD06 +:10B34000FF300006000E0870A1680029F7D0002821 +:10B35000F5D10E4854308178002903D1C178FF31EE +:10B36000817010BDFF310906090E8170F9D1A16904 +:10B370000029F6D0808803F0D0FB3C008C730000DD +:10B38000044A011C5C320C3205CA801AA269F9F722 +:10B390001FF810BD447D0100F0B5041C4068002575 +:10B3A0000179002285B0C907CB1769490133896A41 +:10B3B000102905D36649C039086B01303C00C873B9 +:10B3C000000008638EE021680E68F678B706FF0F6C +:10B3D000B609002B049706D063691F1C1B6A5037FF +:10B3E0009F4200D10125002D02D063691B6A04E051 +:10B3F0003C23594F7343DB190433E3619F883C00BE +:10B4000004740000002F70D09B79022B6ED0042BA7 +:10B4100017D0062B69D10868A06108890438088113 +:10B4200020680168043101604E4900295DD0049F05 +:10B43000BA425AD14948221C1C3002F065FE05B0C0 +:10B440003C0040740000F0BD0968251CCA794035F5 +:10B45000261CEA738B79221C503213704B796036AC +:10B4600053700B7993704B78D37009781171002168 +:10B4700029721621B173616A002906D0018B090770 +:10B48000090F3C007C7400002972B1811821B1734E +:10B49000011C0A31201C06224930F9F733F8606894 +:10B4A00014220188E982011D201C5830F9F72AF87E +:10B4B000E88A30490840012189030843E8827089FD +:10B4C0000F2108403C00B874000070812068018999 +:10B4D00008390181206801680831016008210020D5 +:10B4E000FAF783F8051C026820680821FAF7FBF8D0 +:10B4F0002068FAF774F82149C5602FE030E0FFE7D3 +:10B50000216860680A683C00F47400008023A2642B +:10B510001E55E564557913792D025B1995792D0433 +:10B520005B19D5792D065B19957812781202AA1845 +:10B5300015040A892D0C083A0A8121680A68083224 +:10B540000A60E169021C0A323C003075000001A863 +:10B5500009680BF03EF9E0692B1C0168201C703073 +:10B5600001AA0BF086F9094901226DE72068FAF774 +:10B5700022F8201CFAF74DF970E7846A010068612F +:10B580000100557200008FC7FFFF3C006C75000082 +:10B59000417000007972000080B502218220F9F725 +:10B5A00093FE80BD704700007047000070470000A8 +:10B5B00070470000704700007047000070470000AF +:10B5C00080B5C068F9F7FAFF012080BD3C00A8757E +:10B5D000000080B50021FF20F9F779FE80BD70479B +:10B5E000000070470000012070477047000070475E +:10B5F0000000704700007047000080B506219920C8 +:10B60000F9F765FE80BDB0B500250129124C3C005C +:10B61000E47500000FD10AF00FFC00281DD06178FE +:10B620003C235943091904310162611C416284625F +:10B63000041C503406E000290FD13C2050432570F3 +:10B6400004190434002C08D02068002802D02021DE +:10B650003C0020760000F8F718FFA5800720A071B5 +:10B66000B0BD6861010070B5041C002101F041FC0F +:10B670006068002801D0216801602068002801D09E +:10B6800061684160124E7068A04201D160687060CC +:10B69000E0683C005C76000000280BD0002506E046 +:10B6A000E068E900411814200BF0E2FF0135308812 +:10B6B0008542F5DB0621201C4430F8F7E9FE206BBB +:10B6C000002801D0F9F786FFE069002801D0FAF7D9 +:10B6D000AFF870BD3C009876000058750100F0B5D9 +:10B6E0001D4F059D3F6801261C1C331C002F00D0F8 +:10B6F0002B1C1D062D0E002906D011780E23164F87 +:10B700000918097A6B4310E02178002913D0FF3122 +:10B710000DE0012901D93C00D476000001311170FF +:10B7200011780E230F4F490811700918097A6B43DD +:10B73000DB19595C21702178002902D11178002988 +:10B74000EAD10948C068002805D02178301C0029BA +:10B7500000D10020F0BD01203C0010770000F0BDBA +:10B76000000018670100246701005C670100AC7CE1 +:10B77000010084460020F0B5002909D011781A4E46 +:10B78000B170194EB178717031700121316127E0CB +:10B79000164E0123F15663465F683C004C7700006B +:10B7A0000023F6560125CC0FB74200D90025002C06 +:10B7B00001D0002DE8D10E4F3B69002B03D0002DA6 +:10B7C00001D1167002E01C4301D111700120012447 +:10B7D000002B00D000243C61002C02D03C00887774 +:10B7E0000000711C397001E0FF3179700028D5D05C +:10B7F0000120F0BD0000AC7C010090B50A4C002097 +:10B8000093B0206103906846002108F084FD207AFF +:10B81000022801D1E06B00E0206CE06101203C00D7 +:10B82000C477000008F08AFD13B090BDF46E0100EB +:10B83000F7B5051C88880C1C82B01F4F002800D16A +:10B8400000270498002801D1F9F78AFD1B483B1C0A +:10B850000068211C0268281C0092049AFEF73CF83C +:10B860003C0000780000061C22D00321049802F05E +:10B87000B8FF00281BD08078012103F0E4FFA088E6 +:10B88000A18E484300040F49000C088003F081F9A1 +:10B890000122002D00D10022011C0E200BF0C9FE58 +:10B8A000002F3C003C78000008D10021281C02F049 +:10B8B000BDFC03E00026281C00F00AF8301C05B08F +:10B8C000F0BD0000C1A10000E4650100A87C0100FA +:10B8D00010B5041CFEF738F80121002C00D100211E +:10B8E0000E200BF03C0078780000DDFE10BDF8B5AE +:10B8F000071C0BF094FAFDF7BCFE002602281E4D33 +:10B9000001D02E70F8BDFDF73EF8041CF9F759FC84 +:10B91000002814D0FDF777F8002810D002F0F9FBCA +:10B92000002801D000243C00B478000000E0154C51 +:10B93000331C211C072216200BF066FF687880213B +:10B940000843687002F00AFC0028DED128788007DE +:10B95000DBD4FDF723F9002805D12878C00702D5EC +:10B96000FDF742F8D1E702F03C00F0780000CDFB93 +:10B970000028CDD02878022108432870211C381CCB +:10B98000FDF7C1F8C4E7606C01007102000010B55A +:10B99000124C01202070FEF7F0F90121A068FBF79E +:10B9A000F4FEA06803F087FF0D483C002C790000EE +:10B9B000A16807F023FDFBF755FFE06800280DD0D4 +:10B9C000094906200AF024FD084905200AF020FD57 +:10B9D000FBF76EFF002801D005F0F8FC10BD000059 +:10B9E0007869010034630100E13500003C006879AA +:10B9F0000000B1350000F0B5244D234C687C203C9C +:10BA00009BB0002808D0022803D820890138208163 +:10BA100037E000276F7434E01C4E68221436311C66 +:10BA20000C3101A8F8F709FE1848338901213C00C0 +:10BA3000A479000044300A1C002B007B00D1021CBA +:10BA40001206120E0DAF3A709446AA7B931930334A +:10BA50005B7B7B70EA7301321206120E0027824272 +:10BA6000AA7301D3AF7304E06246012A01D1776063 +:10BA70003C00E079000000E071600648074A803829 +:10BA800081674267682201A9F8F7DDFD278108F088 +:10BA900012FD1BB0F0BD84660100E92E0000F1B577 +:10BAA00086B006990020886106988468808D656854 +:10BAB00001283C001C7A00004CD9354949680591A1 +:10BAC000002947D00022002100230390281C96461D +:10BAD000944606680496F2788026B2433F2A2ED810 +:10BAE000D706FF0E0126BE40371C049E5209B678C9 +:10BAF0007600B2183C00587A0000264E92001C36A0 +:10BB0000B2583A401ED003E002900289C068511832 +:10BB10000028F9D10598814214D870460130864634 +:10BB2000002B04D06046D86001986246D06003982C +:10BB30000138039006D03C00947A0000231C24684E +:10BB40006068029A01909446C9E77046012807D9B7 +:10BB50002A1C00213F2001F051FF051C0698856139 +:10BB6000281C01F0B3FF0E480068002807D02868A1 +:10BB7000018840790231091A3C00D07A0000281C63 +:10BB800001F0E5FCA2680698C06806990B69291CBB +:10BB9000F8F77CFC034908690130086107B0F0BD83 +:10BBA0000000FC5A0100CC5C010010B5094A80007D +:10BBB0001258D006C00E0130074B3C000C7B000031 +:10BBC0001C68002CFCDB5A602022121A914019607C +:10BBD00019680029FCDB10BDE86001003020070077 +:10BBE000B0B5124C00252570A168114807F032FC51 +:10BBF0006561FBF7A3FEE06800280DD03C00487BA0 +:10BC00000000FBF7A4FE012107200BF070FD0A499C +:10BC100006200AF04CFC094905200AF048FCA068FF +:10BC200003F067FE0021A068FBF7CDFD05F0ABFB3C +:10BC3000B0BD7869010034630100E13500003C00CB +:10BC4000847B0000B135000010B50F4C207C00282B +:10BC500019D16069002816D1E068002806D00A488A +:10BC60001C38C068002801D005F0CEFB0121072058 +:10BC70000BF040FDA06803F03FFE0448A16807F008 +:10BC80003C00C07B0000DBFB0120207010BD786908 +:10BC900001003463010070B50E4C0122A368E56811 +:10BCA000268A5D1BB54201D1002206E025680133DA +:10BCB0002E68A3602660043503C5002A04D1012143 +:10BCC0009D203C00FC7B0000F9F752FB70BD03494E +:10BCD0000220086070BD000044E30100402007001E +:10BCE00080B502F0B9F880BD80B502212D20F9F7AA +:10BCF0003FFB002080BD000080B502212A20F9F71B +:10BD000037FB00203C00387C000080BD000080B57F +:10BD100001212B20F9F72FFB022080BD00000149F3 +:10BD20000120086170477C780100F8B5061C0C23DF +:10BD30000F1C1749584345186C68301C0BF03FFE28 +:10BD4000002F09D1301C3C00747C000003F0EEFE93 +:10BD5000412007551148211CFFF7A6FFF8BD4120DF +:10BD60000755A06B002803D0201C00F0DFF9F5E791 +:10BD7000201C00F0DBF9AC68002C02D00020A86089 +:10BD8000EDE7301C05F034F93C00B07C0000041CE9 +:10BD9000E8D108210C20F9F7F4FAE3E70000607B12 +:10BDA000010055800000074A80B55070516012783C +:10BDB000064B80005201D218101840380268081C47 +:10BDC000F8F77BFB80BD786901003C00EC7C00004B +:10BDD000FC420100B0B50A49041CC870084DE435A6 +:10BDE000A87A0871082C01D3F9F7FCFAA87A05495A +:10BDF00040014018A1004058F8F760FBB0BD0000BA +:10BE0000606C01008043010080B500283C00287D63 +:10BE1000000001D009F01DF980BDB0B5051C0C1C57 +:10BE200000200860686809F036FB6C60B0BD10B592 +:10BE3000041C09F034FB2168002900D1646010BDA6 +:10BE400000000021016040607047F8B546683C0082 +:10BE5000647D0000041C406A351C0A35002804D0AB +:10BE6000201CF9F789FD071C00E00427291C6069E4 +:10BE700000F0F6FC79000F18BA88F18A051C8A4296 +:10BE800005D13088000502D504F0BEFB3CE02868EF +:10BE90003C00A07D000000280FD001328A4204D16E +:10BEA000F9F70FFC2168C1600BE0F9F7F0FBF08AAD +:10BEB000000704D00021296029E0080727D1206865 +:10BEC0002860F08AB8801348016801310160318828 +:10BED00049053C00DC7D000018D429682160002160 +:10BEE0002960E16900290DD0897902290AD1082148 +:10BEF0002186211C3831A162221CDC30084902F065 +:10BF000081F9F8BD201C00F05FF8FAE7201CF9F772 +:10BF1000EFFCF6E73C00187E00002068F9F7BDFB57 +:10BF2000F7E7C4690100B9710000F8B50F1C097882 +:10BF30000124C90721D502F08CFF002801D000247C +:10BF40001BE00E4E756E002D17D0346E0622311C8C +:10BF5000381CF8F7D4FA3C00547E0000002805D1C4 +:10BF60000120002C00D00020041C03E0013D063617 +:10BF7000002DEED1002C03D1024EB06E0130B06620 +:10BF8000201CF8BD1079010030B5051C00200649C1 +:10BF900000221C23CC56AC423C00907E000001D114 +:10BFA000081C30BD01324831012AF5D330BDCC6DBB +:10BFB000010010B5084C00221C235343E358834270 +:10BFC00004D11C20504300190A6010BD01320E2A12 +:10BFD000F2D3002010BDDC7101003C00CC7E0000DB +:10BFE000F0B5416895B0071C90371391041CF878A0 +:10BFF000251C8035C6072879F60F4A4902284DD1FD +:10C000000A6D002A4AD04868013048600AF058FF9B +:10C0100044490861486113990979C9073C00087FC0 +:10C02000000001D441498861206806220690A16879 +:10C0300003A8F8F7EEFA062204A80230E168F8F740 +:10C04000E8FA07A806222169F8F7E3FAB87808ABFE +:10C05000002198700C96636A201CA0300A1C3C00DA +:10C06000447F0000002B02D0028A5207520F08AB17 +:10C07000DA7000AB998413990988C90BD984696B6C +:10C0800010AB1091A96B1191808B29491881096D12 +:10C0900003A8F8F732FA2979686B0BF04DFD29797E +:10C0A0003C00807F0000A86B0BF067FD3DE000289E +:10C0B00038D1486D1490002834D0206806220390AF +:10C0C000A1686846F8F7ABFA062268468018E1686E +:10C0D000F8F7A5FA05A806222169F8F7A0FA0021C9 +:10C0E00004913C00BC7F0000B97808A810AB017235 +:10C0F0000896E9680B9169794172686B0E90A86B9C +:10C100001090288DD880688D1881E1690CA80029CD +:10C1100004D089790170206A0D9001E00721017037 +:10C12000684614993C00F87F0000F8F7EFF902E048 +:10C130002068F9F7CAFA201CF9F7F5FB15B0F0BD35 +:10C140000000C4690100B0B5041CC0680622018962 +:10C150000C3101810568211C0C3D0560A818F8F719 +:10C1600064FA0622A1183C0034800000281CF8F76D +:10C170005FFAA08F0009E062206303480169201C78 +:10C18000F8F7C7F9B0BD00007C790100F8B5061CCE +:10C190006036051C707A0C23254958434418A86B57 +:10C1A0000027002806D0A0783C00708000000128FD +:10C1B00003D1A770707A0AF0B6FD2A1C0C218020EA +:10C1C0000BF095FBA86B002833D0A07802280BD089 +:10C1D000042822D1A7702F1C4037787802280CD170 +:10C1E000707A0AF0A0FD18E003203C00AC8000004B +:10C1F000A0701249002014390969F8F790F90FE08E +:10C200002C1C07E078784121221C08550C21802045 +:10C210000BF070FB6034607A04F020FF041CF1D155 +:10C22000707A4035A98B0002090909043C00E880B6 +:10C2300000000843812101430C200BF0A0FAF8BD57 +:10C240000000607B0100F8B51C49051C886A0130BC +:10C250008862281C0BF07DFD041C11D02B1C2033A0 +:10C260001E1C5A79201CB4301979144FFDF73C007C +:10C270002481000089F8AA7A201CB830B179FDF732 +:10C28000B9F8002F04D101212868FAF76DFAF8BD3A +:10C290006068BC21C08A085328680021FAF764FA54 +:10C2A000002809D00649C86A0130C862002CEED0C7 +:10C2B0003C0060810000201CF9F747FBEAE7201CE6 +:10C2C000F8F73CF9E6E7C4690100A1FF0000F8B502 +:10C2D000164C051F0022211CA03103E02868A04253 +:10C2E00009D02034A142F9D1002A04D102218E20A4 +:10C2F000F9F73C009C81000083F8F8BD0D4FBE7932 +:10C30000606901306061F8F797FDA84207D1A08805 +:10C310000430F8F797FDE0690130E06105E020683E +:10C3200028602560A0690130A061BE71E5E70000CA +:10C33000D05C01003C00D8810000201007000029DB +:10C3400001DB062901DB02207047064BC9005A5C5D +:10C35000C91802704A7842708A78827049684160D0 +:10C36000002070470000CC5A0100B0B50D1C041C21 +:10C37000052801D3F9F73C001482000075F8104835 +:10C380004068002800D00324102D00D30F2506207C +:10C390000B496043123140184178807849190906E9 +:10C3A000090E884200D2011C01208840054901384D +:10C3B000096808400004000C3C005082000002F0B4 +:10C3C00044FEB0BD0000D47A010008200700B0B5DB +:10C3D000041C0D1C09F0CFFD002803D1201C09F01E +:10C3E00082FD0561B0BD80B50AF097FD034A0C32AD +:10C3F00006CA8918081A80BD00003C008C82000023 +:10C40000A07D010070B50B4C049E64680DE065686A +:10C41000854209D1207A0870E068106020691860B0 +:10C42000207D3080012070BD2468002CEFD10020D9 +:10C4300070BD0000A46E010010B5041C3C00C88251 +:10C4400000002030817B20690430FDF764F9011C75 +:10C450006220025B636A4034207802F0CEFD10BD9A +:10C4600000000B4910B508888A690A2350435843D5 +:10C470000ED0084A53899488D2881B1952043C0074 +:10C4800004830000520C9A18C96806324A430A21F4 +:10C490005143F8F7FDF910BDC874010030000700E2 +:10C4A00010B5431C01D1104810BD0F4A0E4B943AF1 +:10C4B0001268443B1B7A10E0546884420CD1002976 +:10C4C0003C00408300000FD1022B03D1D47B022C0F +:10C4D0000AD204E0002B05D1D47BE40704D412680F +:10C4E000002AECD1002010BD101C10BD0000386FD8 +:10C4F0000100011C0120012900D00020704700B577 +:10C50000021C3C007C830000FDF7CEF8002808D018 +:10C51000101CFFF7F1FF1823034958434018006926 +:10C5200000BD002000BD00009467010080B5002818 +:10C5300000D10848074900685031097A002902D023 +:10C54000022904D13C00B883000000E0012100F082 +:10C5500006F880BD002080BD0000A46E0100124AD4 +:10C56000124B127A2C3B002A03D15A68002A18D1A8 +:10C5700004E0022A02D19A68002A12D100207047F2 +:10C58000C27B8A4201D03C00F4830000032A0AD116 +:10C59000827E012A07D1027F01321206120E027733 +:10C5A000C37E9A42EED200680028ECD170470000AA +:10C5B000F46E0100F7B58446002001270024002511 +:10C5C00088B007E06246525D3C0030840000002ADB +:10C5D00005D0AB006E46F25001358D42F5D3002DEB +:10C5E00000D00120002828D00027164C6E4622E0FB +:10C5F000201C00F030F8012801D0072806D10021C6 +:10C60000201C00F034F8316888423C006C84000043 +:10C6100001D2022714E02068C9000C18083C201C35 +:10C6200000F01CF8072807D10120012D00D00020C0 +:10C630002468002800D10834013D0436002DDAD1E9 +:10C640000A9804600BB0381CF0BD00003C00A884C0 +:10C650000000205201000068002901D08002800AF9 +:10C66000704710B540688000440F082C03D30221A6 +:10C670008720F8F7ECFE201C10BD002902D00068CE +:10C68000800D704740688005800D704700003C00B9 +:10C69000E484000010B540684001440F052C03D32A +:10C6A00005218720F8F7D6FE201C10BDF8B5051C23 +:10C6B000880A00901C488E05C069B60D171C1C1C0A +:10C6C000002805D1184881698D421DD0856111E08F +:10C6D0003C0020850000FDF7E8F8154909780E298F +:10C6E00007D1002805D0114950310623C956F9F762 +:10C6F00006FA0E490020C8618D61291C201CF8F73C +:10C70000E2F87943201CF8F7DEF808484161201C64 +:10C7100000993C005C850000F8F7D8F805484069AE +:10C720000A18A24201D2401801E04018001B800202 +:10C730008019F8BDAC7C010011670100F8B50F1C31 +:10C74000061C141C1D1C07F0A1FC0E2809D1201C7E +:10C7500002F0FCFB3C0098850000002804D008484B +:10C76000007802F0E4FB041C0121002EAC7200D022 +:10C77000391C201C02F007FC2860002028726C7213 +:10C78000F8BD90570100031C0A4810B50024021C94 +:10C79000A03203E081883C00D4850000994209D290 +:10C7A00020308242F9D1002C04D102218E20F8F7EA +:10C7B0005DFE002010BD0000D05C0100FFB5061C2E +:10C7C000002081B010601F1C0125141C301CFFF7D5 +:10C7D0006DFF052812D202A33C00108600001B5CEE +:10C7E0005B009F440000030303030800391C301C56 +:10C7F000FFF755FF03E00298F8F7EBF801302060EF +:10C8000004E005218720F8F734FE00252068802801 +:10C8100004D906218720F8F72CFE3C004C86000046 +:10C820000025281C05B0F0BD70B5174C606C0028C1 +:10C8300001D001201DE0164E144D3188A06C002857 +:10C8400008D02878814205D9F8F74CF80138FAF772 +:10C8500051FE0EE0E06C00280AD000203C008886E3 +:10C860000000FAF74AFE29783288914204D99042B2 +:10C8700002D9101C00E0081CFAF7DFFDE16B441A36 +:10C880000AF081FB201A00D5002070BD0000447D15 +:10C890000100F8600100FC600100FFB5274E3C007C +:10C8A000C4860000041CB0790F1C151C81B00090D8 +:10C8B0000AF06CFBC11923480768002F05D10A2133 +:10C8C0008020F8F7DFFD05B0F0BD1E4840688446C3 +:10C8D000002801D100220EE082680368AB4207D134 +:10C8E0003C00008700000379A34204D10B21802083 +:10C8F000F8F7CBFD23E0C0680028F1D1134BF868AE +:10C9000018603D603C71B96004988D1A38616046CA +:10C91000002305E08468A41AAC4203DA031CC06853 +:10C9200000283C003C870000F7D1F860002B08D1BC +:10C9300007483B1C47600848064A00880AF08AFB03 +:10C9400000E0DF600098B071C3E70000201007002E +:10C950007C5D0100213801002C740100F3B583B027 +:10C96000041C09D03C0078870000201C049909F0C1 +:10C970008EFB002803D0201C303005B0F0BD0AF03B +:10C980000EFB1E4A0026049F019600900292029C14 +:10C990000025391C201C143002F0C5FA002801D0F3 +:10C9A000261C03E001353C00B48700001C34042D34 +:10C9B000F2D3002E22D10198134F013001900228AA +:10C9C000E8D30121C906029A00201369009CE31AEA +:10C9D0008B4201DD191C161C01301C320428F4D3D3 +:10C9E0003068002801D0F8F73C00F0870000D3FE43 +:10C9F000301CFDF74AFF301C143006220499F7F76B +:10CA00007AFE009C301C3461BDE7306A010034427C +:10CA10000100094910B54C6903E0E168814203D087 +:10CA20002468002CF9D101E0002C3C002C88000087 +:10CA300003D102210220F8F737FD201C10BD0000B1 +:10CA4000FC5A010010B5C30706D5084B5C690C43BE +:10CA50005C611C7E14431C76800706D5044843693C +:10CA600019434161017E1143017610BD3C00688885 +:10CA70000000FC5701001858010070B50D1C041C83 +:10CA8000161C00F008F8A007C0170130321C291C42 +:10CA900000F021F870BD10B5C30706D5084B5C69DE +:10CAA0008C435C611C7E94431C76800706D53C0059 +:10CAB000A4880000044843698B434361017E91438D +:10CAC000017610BDFC570100185801000322111F08 +:10CAD00080B5012000F002F880BD000030B5151CC3 +:10CAE0000C1C002887B002D01C22224901E02249F8 +:10CAF0003C00E08800001C226846F7F764FE0599B8 +:10CB000000AB1A7E8C43201C9543029A291C0240DC +:10CB10000292019A02400192009A02400092039A06 +:10CB200002400392987C08409874587C08405874DE +:10CB3000187C3C001C89000008401874D87C084010 +:10CB4000D87402991048416101AA06CA91438161D3 +:10CB50008168019A114381608168009A91438160E4 +:10CB600000AA06CA11434268114341604168039A12 +:10CB7000914341603C005889000004A80BF001F883 +:10CB800007B030BD0000FC5701001858010010002C +:10CB9000070010B5041C011C012008F0E0F9002C6E +:10CBA00002D003F01CFF10BDFEF7D1FC10BDF0B5A4 +:10CBB0000C1C010E01233C00948900001B06090691 +:10CBC00099429FB028D11749084000211A2800D364 +:10CBD0000221002919D1C500134F10A8EE19B288FF +:10CBE0002168F7F79DFD201CF8F7EAFD7A5901A9A5 +:10CBF00010A8F7F707FD00283C00D089000005D0F9 +:10CC0000109801A90190B07900F09DF81FB0F0BD17 +:10CC10002A20F8F75EFC201CF8F7D5FDF6E7032183 +:10CC20002A20F8F756FCF1E700007FFFFF002445BB +:10CC3000010010B50C1C802802D03C000C8A0000BA +:10CC4000812808D103E0201C00F006F910BD201C4B +:10CC5000F8F7BCFD10BD03212C20F8F73DFCF6E7EA +:10CC6000F0B50C1C00218BB00A91010E01231B06AC +:10CC7000090699422AD118490840061C3C00488AF6 +:10CC80000000062E01D3072124E02089F8F7F1FEE9 +:10CC900022892168051CF7F74CFD201CF8F799FD47 +:10CCA000F4000F4E281C0AAA69463359F7F7B4FC62 +:10CCB000002801D0012807D12868694600903C006F +:10CCC000848A0000A01900790A9A00F009F9281C4A +:10CCD000F8F7B0FE0BB0F0BD01212B20F8F702FCF5 +:10CCE000F8E700007FFFFF00284601000A1C010E44 +:10CCF00001231B060906994280B508D05B009942C2 +:10CD00003C00C08A00000BD10006000E111C00F090 +:10CD10000EF980BD05490140101C05F0A2F980BD47 +:10CD200001212D20F8F7E1FB80BD7FFFFF0080B5DA +:10CD3000011C0F2000F013F880BD80B5011C0420F9 +:10CD400000F03C00FC8A00000DF880BD80B5011C9D +:10CD5000172000F007F880BD80B5011C012000F00D +:10CD600001F880BDF8B5041C061C802084430F1C0C +:10CD7000192C01D3F8F7EAFB0848045D211C0020B8 +:10CD8000F8F750FD3C00388B0000051C221C391CB4 +:10CD90000068F7F7DAFC2A1C311C0720F8F711F9B4 +:10CDA000F8BDF4450100F8B50D1C161C041C1F1C31 +:10CDB00008210020F8F739FD142201680E4B724358 +:10CDC000D2180C71127C3C00748B00004A710D600B +:10CDD0000B4A8F7112687F2A03D95205520E8023A5 +:10CDE0001A43CA71074A0023516801315160021C7D +:10CDF00081210020F8F708F9F8BD00007440010017 +:10CE0000FC5A0100806E01003C00B08B0000B0B500 +:10CE1000041C08210020F8F70EFD218BE27D051C83 +:10CE200009055207520F490C006811438180A17D0A +:10CE300014230E4A59438918097CC171E16A0160C3 +:10CE4000E168281CF8F717FC0A483C00EC8B00004E +:10CE50000068002801D0F7F7F1FB07490431886822 +:10CE60000130886000212A1C0020236BF8F7D2F8DB +:10CE70000120B0BD744001007C6E01000148806853 +:10CE800070470000806E010010B5041C3C00288C27 +:10CE9000000092B0016868460822F7F762FC00AB18 +:10CEA00098884007400FD87798884004000D188470 +:10CEB000D888588400980D900594208908382081DE +:10CEC000059801680831016000200A900C903C0030 +:10CED000648C00000021112009F078FB0549064A06 +:10CEE000086801300860022102A801F0CDFC12B0F0 +:10CEF00010BD0000806E0100558B0000021C012057 +:10CF00000006084380B52B210AF08AFD80BD000091 +:10CF10003C00A08C0000F7B5041C061C8020844354 +:10CF2000171C062C01D3F8F726FB0B48055D291CBE +:10CF30000020F8F78CFC041C006801992A1CF7F704 +:10CF400016FC391C201CF8F7A2FB221C311C002304 +:10CF500002203C00DC8C0000F8F768F8FEBD000001 +:10CF6000204601000A1C011C80B500230120F8F7AF +:10CF70005DF880BDFFB59FB01F1C051C0A301E90D8 +:10CF80001CAA1DA90AF000FF002871D0002F09D0AB +:10CF90000A2100203C00188D0000F8F75EFC0668AE +:10CFA000041C301DFAF7AFFA05E004210020F8F761 +:10CFB00054FC0668041C28893649012208807080C8 +:10CFC000E88814A9308019A8FCF7F5FCFCF7FFFBF2 +:10CFD000011CFF3121313C00548D0000201C01F068 +:10CFE000EFF819A9201C01F0EBF814A9201C01F09E +:10CFF000E7F8201C2099FDF74BFD0022022101F0EB +:10D0000033FD061C1C9900208861301CF8F71CFABF +:10D01000002E0BD0307A00283C00908D000002D00A +:10D020004021084330721C980222816911438161BA +:10D0300004E01C9902228869904388611DAA06CAEF +:10D0400001A805F058FB09A8002F02D00222427265 +:10D0500001E000214172049401A83C00CC8D000045 +:10D0600004F07AFB01211C9808F0C8FF002F04D0BF +:10D070001C980122816911438161A8881C9C01F0E0 +:10D080009FFE021C211C00E004E00748408809F0D4 +:10D090001FF804E03A1C00210520F9F73C00088E37 +:10D0A00000009BF8002023B0F0BDFC600100987CDC +:10D0B0000100F8B5041CC0680568A01D01F095FFCB +:10D0C000002845D0211C1431201C6A460AF055FE68 +:10D0D00000283DD0FCF77DFA002839D100983C00AB +:10D0E000448E00004B21095C012934D1042609F04B +:10D0F00019F9688800281BD1A8880321890388436F +:10D1000015490026088001220221206901F0B8FC9F +:10D11000041C14D000988069800710D5F8F79AF99C +:10D120003C00808E0000201CF8F7DDF8002809D1B3 +:10D13000F8F77FF901260098022281699143816105 +:10D14000002101E00098022108F061FF0098806949 +:10D15000A988C207D20F301CF9F745F8F8BDFA606C +:10D1600001003C00BC8E00001CB5046900230022B5 +:10D17000002C13D14B24245C022C03D1022905D0AE +:10D18000012203E0022901D101220123002A05D056 +:10D19000009004200193694609F036FA1CBD000096 +:10D1A000B0B5041C3C00F88E0000F2210F200C4D9D +:10D1B0000AF099FB287808280BD201A31B5C5B00BE +:10D1C0009F440703030808080808002C01D105F054 +:10D1D000BCFBB0BD012CFCD1FF2007F038FAB0BD7C +:10D1E0000000746601003C00348F00008CB5054AD5 +:10D1F00000AB1172009019716946082009F00AFA13 +:10D200008CBD0000AC7C0100F3B5041CC06806278F +:10D2100085B0066809F026FF984948632069032114 +:10D2200001F008FC964D00283C00708F00004DD0A6 +:10D230009549403109798078814247D1012120699F +:10D2400001F0FBFB02902069322101F0F6FB019016 +:10D25000021C8D480299FCF746FF002836D00023B7 +:10D260008A480299019AFCF7E4FE3C00AC8F00006A +:10D270000B282ED1864A51887089414003910B1C9E +:10D2800084490B4025D150800399171C00290BD0ED +:10D290000399480502D5381CFCF740FE039988061F +:10D2A00002D5381CFCF724FE2A2120693C00E88FB7 +:10D2B000000001F0C8FB00280DD08078E9698142A8 +:10D2C00009D0E861381CFCF716FE381CFCF707FE95 +:10D2D000381CFCF726FE0027201C20300490407AE2 +:10D2E000082871D10AF0D1FC0020686100233C00BD +:10D2F000249000002B61A86866490130A86030893D +:10D300005C31888201F07AFD62495C310861226AF1 +:10D3100004981821007A01F033FEE16A4018039066 +:10D320005C48006A00280DD0002F0BD1594801231A +:10D330003C00609000005C3001681B0700223068F0 +:10D3400009F049FF002800D105270021A06B0AF051 +:10D35000CEFC0021206C0AF0E8FC4F4B03CE039A70 +:10D360005C33FCF788FD00204C4E0521B06320693A +:10D3700001F03C009C9000006FFB011C01D1F060AB +:10D380001CE00120F0608878454A01321070C878AE +:10D390005070474A1070306900280AD04A780879DE +:10D3A000053109F0DDFA3169F7F785F9F0680028F1 +:10D3B00004D03B4A3C00D89000000132107800288D +:10D3C00008D10020A861716A002903D0201C143004 +:10D3D000F7F774F9344A5C321069316A411800E099 +:10D3E00020E00A23D0680A2209F0FBFE002807D0BB +:10D3F0002D4A316A5C323C0014910000D068401A1A +:10D400001169401A7060294A5C32D0683062F06954 +:10D41000002804D0FAF700FD0120FAF7A1FCFAF782 +:10D4200081FC2748006803F007F90698002803D11B +:10D430001E4E0023B36016E03C00509100001C4ECD +:10D440000120B060069801684068B06519487165B0 +:10D450005430C088002809D0B169002906D001F0F5 +:10D46000DCFC011CE06AB269F7F72FF9002F15D137 +:10D4700012480169002908D101213C008C9100006B +:10D4800001612A68002A03D000210020F7F720F963 +:10D4900009490023CB622B616B6106F0B5F807B038 +:10D4A000F0BD6B680648002BF9D0021D111C381C1A +:10D4B000F7F70FF9F3E70000447D01003C00C89145 +:10D4C0000000F4680100F467010003080000F86040 +:10D4D0000100C467010008B5F8F72FFD009000AB0C +:10D4E000188800280CD005F050FF00AB5988188828 +:10D4F00005F06DF9FEF797F80320FBF70EF83C00F6 +:10D500000492000008BD0120FFF7B2FB002008F0E4 +:10D510008DFEF7E7F8B54F498C68206A00680578FA +:10D52000FCF768FA002812D02A07920F0121012A7D +:10D5300000D00021002903D02906090F0B2906D1AC +:10D540003C00409200002A21095D08189030007BC1 +:10D55000F9F70DFC414F3C3FB86B796BF7F7C0F81A +:10D56000A06C0026C660606B800804D0B8690130EA +:10D57000B86106F0DCF9394D28698005800F08D1C3 +:10D5800078693C007C920000042101307861606B76 +:10D590004008400008436063B86A002803D0606B0D +:10D5A000082108436063201C203000903968F7F799 +:10D5B0009AF80320000228602B498868A063C86895 +:10D5C000E06308793C00B8920000C006C00E251C3C +:10D5D000403528714879687123483C384662009884 +:10D5E000807A01F05EFD00210028214A01D01178E7 +:10D5F00003E09378DB0700D55178A971002804D0A7 +:10D600001B49143108683C00F4920000206400E0DB +:10D610006E80B86AC00702D5FF202871AE71E6613E +:10D62000B8680130B8607968884203D00B21852042 +:10D63000F7F7C4FF0D498868C06C8860FB6A002B4F +:10D640000CD00E4AD47B002B3C003093000002DD4E +:10D650007F2C05D201E0002C02D0D47BE318D373D9 +:10D66000FE62C968884203D105218520F7F7A9FF2A +:10D67000F8BD247E010000400700A0800700E8807C +:10D68000070040000700FEB5304C3C006C930000E2 +:10D69000A06B216BF7F733F82D493C318E68708B06 +:10D6A000062804D2E0690130E0610E203085284967 +:10D6B0003C310D68002D03D103218520F7F784FF4D +:10D6C000244845613562318DEF6804393C00A893E8 +:10D6D00000000C0401210291240C002101911D483D +:10D6E0003C30808AA04203D32C81EE6000240BE002 +:10D6F000002F04D103218520F7F769FF04E03D1CCA +:10D70000201A0404FF68240C0298002804D03C006E +:10D71000E493000012490120086100200290019862 +:10D7200001300190002CDDD10C480C4C3C300760DE +:10D7300001983065B564306A0068606260680130E5 +:10D740006060A1680131884203D00A218520F7F783 +:10D750003C002094000041FF04480068A062FEBD28 +:10D760000000E87D010000300700786E0100B0B5D0 +:10D77000051C01210F200AF0F8F8F2210F200AF011 +:10D78000F4F80C480C4C0068143C00280CD0E078ED +:10D7900001283C005C94000009D00122291C0F20C4 +:10D7A0000AF0ACF86078022806D0012003E0607827 +:10D7B000022801D000206070B0BD00009866010012 +:10D7C0000222002880B500D1032203490E200AF06E +:10D7D0009BF800203C009894000080BD000050C3DE +:10D7E0000000F8B50023002200282ED00689046826 +:10D7F000751E2D04B61AF6072D0CF60FB4460EE072 +:10D80000A75CA618023300977778A7540232120457 +:10D81000009F120C00293C00D4940000777001DDB9 +:10D820008B4215DAAA42EED3C068002810D00289D4 +:10D83000002AF9D06246002A0BD00268665D17788C +:10D8400002336755167001220029D2DD8B42D0DBEE +:10D85000F8BD0022CDE700003C0010950000B0B5F7 +:10D86000041C0D1C0120F8F75EFB0D490028C8615F +:10D8700014D062684260A27C0272A268C260E26850 +:10D880000261228A02750A1D0A621268002AFFD10B +:10D89000026048600020A86001203C004C95000018 +:10D8A000B0BD0120FAE70000A46E0100B0B5041C71 +:10D8B00040680D1C431C02D1211C094808E00020CF +:10D8C000F8F734FB064994390861002803D0211C7D +:10D8D00000F048FE00E00120A86001203C0088958F +:10D8E0000000B0BD0000386F010080B50121972015 +:10D8F000F7F785FE002080BD000038B50A1C143201 +:10D900000092131F051C083A0C1C16314068FEF7E4 +:10D910006CFE002801D0002000E0012069683C0076 +:10D92000C4950000A0606160012038BD10B50C1CDA +:10D93000017A00290FD0012909D0022903D1002141 +:10D9400000200AF073FC00202071012010BD416806 +:10D9500001200AF06BFC00F00DF9F4E780B50449F2 +:10D960003C000096000048680138486001D107F08B +:10D970006EFB002080BDAC790100B0B5051C0C1C0D +:10D9800000F04FFEA060686860600120B0BDB0B5D7 +:10D99000051C0C1C00F06FFEA06068686060012030 +:10D9A000B0BD3C003C960000081C00210022002372 +:10D9B0000EC008C001207047F8B50F1C041C207968 +:10D9C000202801D2202020716679002E02D12579ED +:10D9D00000220DE02579291C301CF7F74FF80029AB +:10D9E00001D1321C3C007896000004E0704380199D +:10D9F00005062D0E321CE079291C00F0F2F9207A80 +:10DA00002F49C007C00F08602E480078C00743D5D3 +:10DA1000A1792C4AC80748D42C4E16608B072B4896 +:10DA200008D5CC0801233C00B4960000A340036055 +:10DA3000490704D52849116001E0402101601368BD +:10DA4000264AB34210D1546801680C4354601468EC +:10DA50000C4001D0516100E0916154680C43546066 +:10DA600094682143916013E03C00F0960000547CE0 +:10DA700001680C435474147C0C4003D0147C0C4398 +:10DA8000147402E0147C8C431474547C0C4354745E +:10DA9000947C21439174B34205D100220168032094 +:10DAA000FFF78DF809E0006800213C002C9700008A +:10DAB0000206120E0320FFF785F801E00B48106004 +:10DAC000002038717D71F7F7E9FD0120F8BD0000F5 +:10DAD000CC5C0100040007005C5B0100B99B000006 +:10DAE000585B0100959B0000100007003C00689700 +:10DAF0000000559B0000B0B50D1C04300024FEF75B +:10DB0000D6FA01206C60B0BD0000F0B5077A43681A +:10DB1000041C0E480E1C00680125011C9BB006E089 +:10DB20004A689A4202D18F76002502E009683C00DB +:10DB3000A49700000029F6D1002D05D1217A0129F2 +:10DB400002D101A9F8F7A8F86068043621C61BB015 +:10DB50000120F0BDA46E010010B50C1C08F0AEFC55 +:10DB60006060012010BD000010B50C1C07F084FAA5 +:10DB70003C00E097000004F054FF002060600120AA +:10DB800010BD0020C043486001207047000010B560 +:10DB90000C1C0079FAF707F8002801D0002000E0FB +:10DBA00002206060012010BD00001CB5064C2068FA +:10DBB00000283C001C98000007D009F0C5FA01902D +:10DBC000206841686846F6F7D6FD1CBDAC790100B7 +:10DBD0000149086070470000AC7901000EB5064BA2 +:10DBE0001B68002B06D00290009101926846D9680C +:10DBF000F6F7C1FD3C00589800000EBD0000AC795E +:10DC000001001CB5041C07F04CFA064841680131BC +:10DC10004160009400210191006801686846F6F7B0 +:10DC2000ADFD1CBD0000AC79010080B5F8F7A3F88C +:10DC300080BD80B5021C3C00949800008021032028 +:10DC400000F05CF8011C034800224369F6F79BFDD5 +:10DC500080BD0000A46D0100F8B50C1C1349051C23 +:10DC60000868161C0130086000202061221C103258 +:10DC7000281D0021071C00923C00D098000003F0F2 +:10DC8000DEFE20712069002810D00104090C00205C +:10DC9000F7F779FE3060291D03C9A060E1603068A4 +:10DCA0000168009A381C03F0CAFE20710120F8BDFB +:10DCB00000001075010080B5021C3C000C990000AA +:10DCC0000821042009F04EFF032080BD10B5074A4B +:10DCD0000C1C516801315160011C1031C2680430C4 +:10DCE00003F0F0FE2071002010BD0000107501004F +:10DCF000044980B581610821021C03203C00489939 +:10DD0000000009F032FF032080BD95D80000F7B570 +:10DD1000071C161C0621002082B0F7F73AFE051CEE +:10DD200020480078062800D928812C680020A77098 +:10DD30000399E170311C03E00A8910180F1C3C00A4 +:10DD400084990000C9680029F9D16B4601AA211DF8 +:10DD500000F034F800AB187860711878002817D0FC +:10DD600011484068002808D019780020F7F714FE01 +:10DD7000011C381CF7F730FD0AE03868002802D192 +:10DD80003C00C09900003F600120B86100AB1978E9 +:10DD900038894018388100AB9888311C02382080BF +:10DDA000281CF7F71CFD281C05B0F0BD0000C85C5E +:10DDB000010001794279008889180239401A7047B8 +:10DDC00000003C00FC99000070B5084D2C78AD783F +:10DDD0002018061C002D03D070190138013DA843FE +:10DDE0001080801B18700C7070BD0000C85C0100B2 +:10DDF000B0B504680C4A218852780231914211D2A0 +:10DE0000551AF7F73C00389A0000C9FD016800294F +:10DE100002D10060012181610189491901812088B5 +:10DE200040192080607940196071B0BD0000C85C65 +:10DE3000010080B500220621F12009F0A2FE80BD7C +:10DE40000000031C02483C00749A000003704170FB +:10DE500082707047C85C0100B0B5081C0968151CC9 +:10DE60008C78F7F785FD0449A0000958002902D0F5 +:10DE7000281CF6F79EFCB0BD846D0100FEB5041CA5 +:10DE8000C07AA17AC607F60F3C00B09A0000321C97 +:10DE9000201D01F03CF86069254FC10737D5B869EE +:10DEA000002801D0F6F787FC2068056828888007DD +:10DEB00034D101AA02A9281C01F00BFC281C01F096 +:10DEC00012FC0078C0070AD460693C00EC9A00009C +:10DED000800726D4331C291CA27A20697D69F6F7B5 +:10DEE00072FC1EE000AB187A002803D0012806D08F +:10DEF000022816D1281C796AF6F761FC11E000AB04 +:10DF000018790E2801D00F280BD1281C3C00289B23 +:10DF10000000396AF6F756FC06E00007800F03D1CF +:10DF20002069F969F6F74EFC786B2121013078639E +:10DF3000221C802009F031FEFEBD287A01000B4929 +:10DF400018B50878C00711D50A4A101C20303C00CB +:10DF5000649B0000847900AB1C70C079587008780D +:10DF600040231843087005480078087000AB1888F3 +:10DF7000D08418BD0400070000100700E060010015 +:10DF800070470000054910B58879054B1A7C054C8F +:10DF90003C00A09B0000246862401A74887110BD88 +:10DFA00000002010070010000700585B0100044922 +:10DFB0000A6804480068024001D0886170474861DF +:10DFC000704710000700585B0100021C012000068A +:10DFD00008433C00DC9B000080B52A2109F0E6FDE7 +:10DFE00080BD000010B5041C002903D0812907D191 +:10DFF000812000E08020221C2C2109F0D7FD10BDDB +:10E0000002212C20F7F74CFB201CF7F7C3FC10BDB6 +:10E0100080B5B4B03C00189C0000012806D08228CE +:10E020001CD11AA807F035FC34B080BD812913D16A +:10E030000D480C4A816900685032814202D0D16A91 +:10E04000012902D01178022902D107F00AF9EBE781 +:10E050006946F7F75AFE3C00549C0000E7E70121AF +:10E0600000E002211820F7F721FBE0E7A46E010091 +:10E07000B0B5041C0068174D9AB0686308F03EFA0A +:10E0800020791449134A50392C3A02280AD1906851 +:10E090008002A861C868E8613C00909C00000220F2 +:10E0A000287207F0E4F81AB0B0BD031C0020002B62 +:10E0B0000BD152689202AA610A1C8968E961287230 +:10E0C00010686946F7F727FEEDE7A861012028727E +:10E0D0002870002006F07DFAE5E73C00CC9C0000AB +:10E0E000F46E0100704700007047000080B5012108 +:10E0F0000720F7F7E1FA80BD70470000F8B500246B +:10E10000194A0026D56811680435081C916002E0A0 +:10E11000011C4019086053688342F9D83C00089DEF +:10E12000000001341032032C0E60EED3F6F7F1FF3D +:10E1300010481049124C0860104900200122192390 +:10E140005B010C2543431B1945434A511F1C6D18A5 +:10E15000AB606B6000251E1C14369E60331C3C00B7 +:10E16000449D00000135272DF8DB013003289F6016 +:10E17000E8DBF8BD2057010014C80100B4CF01004E +:10E1800018D90100B8CF0100B0B5074C251CC03527 +:10E19000286B1E2100F0F2F9A26B201CDC30296BE9 +:10E1A0003C00809D000000F0B6F9B0BD0000C469DD +:10E1B00001000020102210B50A4905E00C2343435A +:10E1C0005C180C34CC5001300F28F7D30C23584383 +:10E1D0000950044841600160028200218160C160F1 +:10E1E00010BD3C00BC9D000084E2010044E301003E +:10E1F00010B5084CA06A002803D10748F9F7E8FEDB +:10E20000A0620448443000680121F9F795FC60627F +:10E2100010BD0000606C0100CD260100FFB50D1C93 +:10E22000041C1E1C3C00F89D000081B00A9F1C21AC +:10E23000F6F74DFB0398A061256025612681A68233 +:10E24000E76005B0F0BD70B50D1CA421041C0830BA +:10E25000F6F73DFB201C44300622291CF6F765FB2F +:10E2600018483C23411C3C00349E00006162417808 +:10E2700059430918897A062901D1A06202E0211CBC +:10E280004D31A16241783C235943081804300F49AD +:10E2900020620B88002B15D0AC20005D0B4A183291 +:10E2A00000028018B030E0603C00709E00008D6875 +:10E2B000002008E0E268C1005450E668820052196C +:10E2C00071184A6001309842F4DB70BD000068614B +:10E2D0000100587501001FB5041C6034617A031CED +:10E2E000806A084A0291019003923C00AC9E0000B3 +:10E2F000E279181C20300092447B827B5E20C15A58 +:10E3000018690430231C02F07FFE1FBD394E000047 +:10E31000B0B50B1C01886920C05C86B00E4A049120 +:10E32000039005920D4D596A9A6A2D683C00E89E4B +:10E3300000000124002D00D0041C0A48005D01915A +:10E3400002920090181C2030447B827B5E20C15AD0 +:10E3500018690430231C02F0A4FE06B0B0BD514F72 +:10E360000000186701000A61010001898A1C3C0055 +:10E37000249F000002810268023A0260080A090232 +:10E38000084310807047000070B5051C08780E1C0B +:10E39000FF2814D0717802310020F7F745FB041CE8 +:10E3A00002890068311CF6F7CFFA002D06D0281C30 +:10E3B0003C00609F0000F7F734FB211CF7F757FA89 +:10E3C00000E0251C281C70BD0000FFB50F1C1E1CA2 +:10E3D000041C981C0104090C002081B0F7F727FBEE +:10E3E000051C0068002C386003990170386846707D +:10E3F00006D03C009C9F0000201CF7F715FB291C51 +:10E40000F7F738FA00E02C1C201C05B0F0BD000026 +:10E4100070B51048046804600F4920200860A0050A +:10E420000E4E02D5706AF6F705FAE00102D5306E9D +:10E43000F6F700FA3C00D89F00000A480440002587 +:10E4400007E0E00703D5A8003058F6F7F6F90135E4 +:10E450006408002CF5D170BD0000004007000010DA +:10E46000070030740100FFFDFFFE80B5072180200A +:10E47000F7F749F980BD3C0014A00000F8B5144B33 +:10E4800082009C58CA060127391CD20E9140114ABD +:10E490001160114E4000851915E06060207BC100BD +:10E4A000891910310A780D239A430A70391C81406A +:10E4B00031730749000108313C0050A000004018AA +:10E4C000084A416842608068F6F7BEF9287B002858 +:10E4D000E6D1F8BD0000A473010000100700006041 +:10E4E0000700D175000003490120097A002900D1F5 +:10E4F000002070470000047A01003C008CA000005E +:10E5000003490120897A002900D1002070470000CA +:10E51000147A0100B0B50024FAF776FC002814D074 +:10E52000012408F07DFE0A4D0A4B00215A18A03242 +:10E530001278102A06D38A00D218926F3C00C8A025 +:10E540000000821AAA4200D2002401310329F0D32C +:10E55000201CB0BD00008B080000A46C0100014825 +:10E56000C068704700007869010070B50D1C041C7C +:10E57000161CFDF72EFE0020E0602661A5603C0021 +:10E5800004A1000070BD0000F8B5171C0E1C041C8F +:10E59000002801D0002E01D1F7F7F2F8A06807F0AB +:10E5A00049F9051C01D1F7F7EBF8291C6E60AF6043 +:10E5B000201CFDF7FDFDE068411CE160002803D14F +:10E5C0003C0040A100000548216905F02CF92068B5 +:10E5D000A84202D1381CF6F748F9F8BD0000C46023 +:10E5E00001000022013910B505E00C2353431C182B +:10E5F0000C34C45001328A42F7D300210C235A4311 +:10E6000081503C007CA1000010BD0000B0B5041C8E +:10E6100001D1F7F7BBF8201CFDF7DAFD011C856876 +:10E62000A06807F009F9E0680138E06003D1064806 +:10E63000216905F0E7F82168002903D08868496856 +:10E64000F6F711F93C00B8A10000281CB0BDC46069 +:10E650000100012100288CB500D100210E2009F015 +:10E6600032FA832000AB1880002004F00CF80190EF +:10E67000684603F07AF98CBD000080B508F0DFFD34 +:10E6800006490A8906493C00F4A10000096E411AB6 +:10E690000B0C5918891A0904090C401A80BD000096 +:10E6A00000900700A46C010070B5041C887E0D1C4E +:10E6B000202803D903211820F7F740F800262676F2 +:10E6C000A87E291C1B3160763C0030A20000201C73 +:10E6D0001D30AA7EF6F75FF96868291C6060A8689B +:10E6E0001331A060A87B06222073E87B6073287C2E +:10E6F000A073687CE073A8892082A87CE0762677E6 +:10E70000201C1230A676F6F746F93C006CA20000F9 +:10E710006068431C1DD0114D6D61286800281AD017 +:10E72000227B011C0B7B9A4201D3206014E00B1C5E +:10E73000096800290BD00E7BB24208D20B68002B6F +:10E74000F0D01E7BB242EDD323600C603C00A8A247 +:10E75000000001E021601C60002070BD26602C607C +:10E76000FAE7A46E0100134AB0B5516801240029EC +:10E770001ED0131DD1611362436804E0106200686B +:10E78000D061002814D0D06945689D42F6D13C0084 +:10E79000E4A20000106A814204D15160D06900688F +:10E7A000086002E0D16909680160D069FCF7CEFF1A +:10E7B000002800D00024201CB0BD0000A46E010081 +:10E7C000B0B5174D01242968002927D06D61296152 +:10E7D0003C0020A30000436804E0686100682861F1 +:10E7E00000281DD0286942689A42F6D1AA692B698F +:10E7F0009A4200D1A9616A69914203D129600068F7 +:10E80000086006E0006810602868002801D107F061 +:10E81000CCFE3C005CA300002869FCF79DFF0028AB +:10E8200002D0002400E00124201CB0BDA46E010031 +:10E83000B0B5051C0748446807E0211C4431281C7A +:10E8400000F0D6FC002802D16468002CF5D1201C11 +:10E85000B0BD00003C0098A300005875010070B5E1 +:10E860000D1C141C00280B4E08D0706E0623584354 +:10E870000204120C311C281C228007E0218806208B +:10E88000F6F7A7F970662288291C301CF6F795F870 +:10E89000012070BD00003C00D4A3000010790100ED +:10E8A00080B5032803D8044AC000115080BD01215F +:10E8B0002620F6F75BFF80BD7C790100B0B5051C12 +:10E8C000C0680189392939D30468A079882835D1ED +:10E8D000E0798E2832D1207A3C0010A40000012873 +:10E8E0002FD1607A03282CD1207B022801D0FE286A +:10E8F00027D1607B1D210840012822D1A07BC8219F +:10E90000084008281DD1A81DFBF7E1F9002818D000 +:10E910001920215C002914D101303C004CA40000D6 +:10E920003928F9DB688B04210843688303F0D6FE9D +:10E93000002809D1002300222620044909F092F979 +:10E940000348006801F084F9B0BD000050C3000026 +:10E950000C790100B0B5084CA36801333C0088A4D1 +:10E960000000A3600C1C09D02568002D03D0237A79 +:10E970006168F5F7A3FF201CF7F7A9F9B0BD9479FA +:10E98000010070B5041CC06801890568082953D3CB +:10E990000622281C5549F5F79EFF002837D13C0078 +:10E9A000C4A40000E988524E043E812924D1E568C0 +:10E9B0002968087A4A7A000280180004000C420B89 +:10E9C0000005000DE27520834B8900204200B25AF9 +:10E9D0009A4206D128890C38020A00021043488165 +:10E9E0003C0000A5000002E001300228F1D3E068FD +:10E9F00001890A390181E06801680A311CE00022BE +:10EA000000204300F35A8B4201D1012202E0013081 +:10EA10000228F6D3002A11D107E036490622063132 +:10EA2000281C3C003CA50000F5F75EFF002808D13B +:10EA3000E068018906390181E068016806310160FA +:10EA400010E0E068FFF7E2FC0CE002310181E068D1 +:10EA5000016802390160E06800890238020A000298 +:10EA6000104308803C0078A50000E0680325028977 +:10EA70000168244E022A10D90988082905D0C1232B +:10EA8000DB00994203D1012502E0002500E00225C8 +:10EA9000E9007158002900D10225F7F704F8E900D0 +:10EAA0008919898888423C00B4A5000000D9032553 +:10EAB000A11D201CFDF734FC002800D10325022DE8 +:10EAC00005D0032D07D1E068F6F7E2FF70BD201CEA +:10EAD000FDF71CFD70BDE068018902390181E06825 +:10EAE000016802310160E8003C00F0A500003158E7 +:10EAF000201CF5F7F1FE0028EFD1E0680189023112 +:10EB00000181E068016802390160E3E700006A46BC +:10EB100001007C79010070B50E1C041C151CF7F770 +:10EB20008CFB00282AD01B4908683C002CA600005A +:10EB300001300860002E0AD0012E0BD0022E0FD11A +:10EB4000201C04F0CDF8201CFFF7D6FE0CE00821B5 +:10EB5000E06802E0C121E068C90004F035F903E093 +:10EB600002212620F6F720FEE27DE16A3C0068A63D +:10EB70000000281CFCF795FB206300202062A062A7 +:10EB8000201C00F06CFE70BDE068F6F78AFF002DD7 +:10EB9000F9D0E37D00220120E16AF5F7A7FE70BD00 +:10EBA00000009479010080B5012804D105483C009B +:10EBB000A4A60000006801F009F980BD0321262009 +:10EBC000F6F7F8FD80BD00000C790100F8B5061CD1 +:10EBD00080790024C0072DD5F0680068417A11299A +:10EBE00028D1C1880A0A09021143C90422D1017837 +:10EBF0003C00E0A60000114F0907890E0818418863 +:10EC00000A0A090211430D042D0C432D396801D164 +:10EC1000CA070ED4442D06D1C90704D5243000F00C +:10EC200022FB002805D00648854206D138688007B7 +:10EC300003D53C001CA700000124F068F6F73AFF5A +:10EC4000201CF8BD7C5A01006C07000080B500282C +:10EC500007D00021262008F07BFF0248006801F061 +:10EC6000BBF880BD0C79010010B5041C094A081CD2 +:10EC7000516801313C0058A7000051600021216219 +:10EC8000A162E27DE16AFCF718FB2063201CF7F724 +:10EC9000E6FA201C00F0EFFD10BD947901000CB5E0 +:10ECA000021C081C0021019100926A4601A900F093 +:10ECB00002F80CBD00003C0094A7000070B513687A +:10ECC000002B1ED000260B68002B02D113681B6896 +:10ECD0000B6013681C681B89E51808E05C781C1938 +:10ECE00002340C601C78844201D1181C70BD0B6882 +:10ECF000AB42F3D31368DB683C00D0A7000013607D +:10ED00000E601368002BE1D1002070BD000070B5CB +:10ED1000031C20D018681E89051C16E00478DD2C21 +:10ED200010D18478002C0DD1C478502C0AD10479EC +:10ED3000F22C07D144798C4204D13C000CA800008D +:10ED400002290CD18479944209D0447820180230E9 +:10ED5000441BB442E5DBDB68002BDED1002070BD34 +:10ED6000044980B50A780A20002A00D0486A00F0D9 +:10ED7000D1F880BD1C750100B0B5174C3C0048A807 +:10ED800000002068002829D0164DE869002825D108 +:10ED900001F03FFA002821D1FFF741FC00281DD1E6 +:10EDA0002068A969401808F0D6F9002816D002F0AA +:10EDB00006FD2168401808F0CEF900280ED03C006E +:10EDC00084A800000120E86100222521802008F0AD +:10EDD0008FFF0648296A04F083FD0121286A00F0AC +:10EDE00089FFB0BDE85901001C75010034630100C2 +:10EDF00070B5051C0024FAF70BFF184E716A401815 +:10EE00003C00C0A8000000F08EF800280BD104F0F0 +:10EE1000FEFB0021252008F0B0FE0322291C281C3F +:10EE200000F0AFF818E0706A441E00F07CF800288B +:10EE300012D10C48316A04F056FD0121306A00F00D +:10EE40005CFF3C00FCA800000020FAF70DFE06F075 +:10EE500003F8002300222520054908F03FFF201C6D +:10EE600007F0FCFA70BD00001C750100346301005E +:10EE70001027000080B5012807D080280DD100227E +:10EE8000002108483C0038A90000F8F79AFE80BD30 +:10EE9000012902D106490020C86104F0BEFB80BDF3 +:10EEA00005212520F6F7A7FC80BD61A900001C758F +:10EEB00001000021002880B501D1034841680122EA +:10EEC000252008F02CFE3C0074A9000080BD000045 +:10EED000E85901000249C8680138486270470000DB +:10EEE0001C75010038B5031C081C191C114B06D0F9 +:10EEF000012111800A1C191CF5F7AAFD17E00D4D20 +:10EF0000011C2C781288181C3C00B0A90000F5F7F1 +:10EF1000A2FD287884420DD000236B61002803D025 +:10EF2000002007F0A4FA05E0002200210020009252 +:10EF3000F8F723FC012038BD00001C75010070B5F6 +:10EF4000041C012608F0E1F9051C3C00ECA90000B6 +:10EF50000020FAF78BFD444302F040FC02F03EFC37 +:10EF6000011C231C0022281C08F07CFA002813D165 +:10EF70000A48231C00228169281C08F073FA002823 +:10EF80000AD1F8F719FC011C231C00223C0028AA16 +:10EF90000000281C08F069FA002800D10026301C67 +:10EFA00070BD1C75010070B50D1C041C161C07F00B +:10EFB00076F900280DD0FAF752FE002809D0FF306C +:10EFC00001304368002B04D0221C291C301C3C005B +:10EFD00064AA0000F5F7BBFC70BD000080B50121FC +:10EFE0001D2008F0DFFD074A0748116901605169DB +:10EFF00041600649496881600021C16003F074FCEA +:10F0000080BD00002861010048750100905C01008E +:10F010003C00A0AA000070B5041C406B002835D04D +:10F020001D4D00262878002824D04120005D0028AE +:10F0300003D108F076F9A8611BE0696901316961C3 +:10F04000A868002808D0814206D12069011C10312F +:10F0500004303C00DCAA00008222FFF7ADFF6868A4 +:10F0600000280AD06969814207D12069011C10314A +:10F0700004300222FFF7A0FF6E6168780521084086 +:10F0800008D0074800780E2803D36034E079FBF7F6 +:10F09000CFFF70BD3C0018AB00000348066070BD98 +:10F0A00000001C75010010670100D47E0100800281 +:10F0B0007047142330B5094D4B435B195B68082436 +:10F0C000002B00D1022438235A43054B8900D21863 +:10F0D000515A026809193C0054AB0000511A0160F2 +:10F0E00030BD0000744001008C410100F8B5071CE0 +:10F0F0002C48141C2C4A484386468018800D8446B0 +:10F100002B482A4A06261D1C48434A430E2F40D24C +:10F1100001A3DB5D5B009F443C0090AB0000060850 +:10F120000A0F14181D202724272B2F31C8001FE099 +:10F1300088001DE0214970464018000D18E01F4A64 +:10F140008018800D401821E01E481018000D1DE0A9 +:10F150001D4970464018400D0AE03C00CCAB000051 +:10F160001B49401801E01B481018400D11E01A49D6 +:10F17000401805E060462080002016E0174810186F +:10F18000800D06E0164902E016484843164940182B +:10F19000C00D03308008800020802E803C0008AC29 +:10F1A0000000F8BDFF21FF20F6F749FB002020807A +:10F1B0002880F6E70000D1451700FFFF3F00E33845 +:10F1C0000E0055551500FFFF0F00A9AA2A01701C5B +:10F1D0003700FFFF1F00CBCC4C00701C47003C00E9 +:10F1E00044AC0000A9AA7A00701C6700A9AABA0062 +:10F1F00084F61200EC25B4000449002801D009224D +:10F2000000E014224A80486070470000A4690100B1 +:10F2100080B50622F5F740FC80BD0000BCB5151C8A +:10F220003C0080AC0000041C04310904090C01AA54 +:10F230006B46FFF76AFF3820064968434018A10073 +:10F24000405A00AB99884018198840180004000CF7 +:10F25000BCBD8C410100BCB5041C151C01AA6B4649 +:10F26000FFF73C00BCAC000053FF38200549684361 +:10F270004018A100405A00AB998840180004000CC7 +:10F28000BCBD00008C41010080B500280FD00029D2 +:10F290000DD002780B789A4209D1FF2A05D0427826 +:10F2A0000232F5F73C00F8AC000081FB002801D1E8 +:10F2B000012080BD002080BD000080B506220449E9 +:10F2C000F5F775FB002801D1012080BD002080BD2D +:10F2D00000005E400100011C49780120002900D097 +:10F2E0000020704700003C0034AD000080B50622CD +:10F2F000F5F760FB002801D1012080BD002080BD12 +:10F3000080B5FFF7C7FF80BD80B506220449F5F739 +:10F3100051FB002801D1012080BD002080BD0000EC +:10F3200012610100011C80203C0070AD000081438F +:10F330008A080E201C2A10B506D2034C5200A35C8A +:10F340008B4201D11019407810BDFC4101001423FB +:10F350000249584340184068704774400100202219 +:10F36000011C80B50248F5F752FD3C00ACAD000031 +:10F3700080BD0000486101000806000E022801D18E +:10F38000002070470120704700290CD00749096808 +:10F39000002908D01423064958434018C0680028A3 +:10F3A00001D0012070470020704700003C00E8AD0C +:10F3B0000000AC6901007440010010B5041C062275 +:10F3C000011C0448F5F77DFB0622211C0348F5F7D4 +:10F3D00078FB10BD00001261010040800700002989 +:10F3E00001D10020704738235A43074BD2183C0004 +:10F3F00024AE00008300D25A14235843054BC01892 +:10F4000040881018081A0A380004000C70470000E1 +:10F410008C41010074400100F8B5071C081C161C43 +:10F420001C1C191C00F05AF8051C1435221C311C38 +:10F430003C0060AE0000381CFFF70BFF28180004EA +:10F44000000CF8BD000000B500F04BF80A300004D5 +:10F45000000C00BD0000F8B5071C081C161C1C1C85 +:10F46000191C00F03EF845001E35221C311C381CCA +:10F47000FFF73C009CAE0000EFFE28180004000CD3 +:10F48000F8BD0000FFB50F1C81B00AA9141C1E1C9A +:10F4900003C900F029F8051C1E35211C301C00F0A2 +:10F4A00023F82D18221C391C0198FFF7D5FE2818C7 +:10F4B0000004000C3C00D8AE000005B0F0BD0A49C5 +:10F4C00080B50988092904D0142907D101018000D9 +:10F4D00000E0C10008180004000C80BDFF21FF20DF +:10F4E000F6F7D1F9002080BD0000A669010038239D +:10F4F0005943064A14233C0014AF000089188200C7 +:10F50000895A054A58438018408808180004000C9E +:10F51000704700008C41010074400100024803491B +:10F5200000684000085A7047A86901005440010073 +:10F530000A20704710B5041C3C0050AF0000FDF7D6 +:10F5400062FF201C10BDB0B5041CC0680568A01D7A +:10F55000FFF7F5FE002818D0211C1431201C08F0FC +:10F56000E2FD002811D0298809482022818269887B +:10F570000183A98806354183C5613C008CAF00003A +:10F580003021095D1154616B41620120F7F728F8C1 +:10F59000201CB0BD707C010070B5041CC068211C2B +:10F5A00014310568201C08F0C1FD002808D0054E64 +:10F5B000F06802F0CFFD2888F08203203C00C8AF3D +:10F5C0000000F7F710F8201C70BD707C01003EB5FC +:10F5D000041CC0680568A01DFFF7B7FE002821D0F5 +:10F5E000211C1431201C02AA08F077FD002819D034 +:10F5F00002984B21095C002910D0012914D03C004D +:10F6000004B0000002290CD129880D2000AB18801D +:10F61000201C03F051F80190684602F05DFAF6F7FD +:10F62000B5F80021029806F09FFE201C3EBD07F0B1 +:10F6300029F8029800218069C207D20F0420F6F74A +:10F640003C0040B000007FFFEEE710B5041CFDF762 +:10F65000E6FE201C10BD3EB5051C00F040FE002853 +:10F6600015D1281C1430FAF7CEFB00280FD0052145 +:10F670002869FFF786FB041C09D00522211C684677 +:10F68000F5F73C007CB000003DFA05340294684672 +:10F6900003F01AFB2A1C0D218F2008F08FFB00209D +:10F6A0003EBD000010B5041CFAF798F8201C05F0C8 +:10F6B000E5F8201C10BD0000B0B5041C0069002155 +:10F6C00094B0FFF73C00B8B0000061FB6946FBF75F +:10F6D00026F800281ED00098FAF729FA011C01A884 +:10F6E00002F0D7F90098FAF7D2F90490052009AD95 +:10F6F000687202A8211C06220230F5F706FA0120E2 +:10F700000890216A0A903C00F4B00000282009917A +:10F71000005D287201A800F069F8201C14B0B0BD8B +:10F72000FFB5161C1F1C81B00A9D4C20F6F790FBFC +:10F73000041C143006220299F5F7EAF9201C06226F +:10F740000199F5F7E5F928203C0030B100000021CF +:10F750000655E1602762002D01D08E2000E08D204B +:10F76000221C0D2108F033FB05B0F0BD0000B0B540 +:10F77000051C4C20F6F76FFB041C4C22291CF5F7E6 +:10F7800026FA2920405D0D282CD23C006CB10000E7 +:10F7900001A31B5C5B009F44281A281E060A282828 +:10F7A0000E2822121600221C0D218C201AE0221C89 +:10F7B0000D21832016E0221C0D21842012E0221C42 +:10F7C0000D2185200EE0221C0D2186203C00A8B1D1 +:10F7D00000000AE0221C0D21872006E0221C0D21DA +:10F7E000892002E0221C0D218B2008F0F6FAB0BD22 +:10F7F000E868F6F7E6F9201CF6F711FBB0BDFEB598 +:10F80000051C9020F6F72DFB041C9021F5F73C0019 +:10F81000E4B100005BF9374E0127F069042803D9F1 +:10F82000706B013070634DE03348B16B04F0D0F879 +:10F8300001202062A87E211C803102910870221CC8 +:10F840006032019200202F1C20379072787A2B1C96 +:10F850003C0020B200001433D072E868AA1DA060FA +:10F86000E86B48604420405D0872291C201C05F0AC +:10F87000AAFC686A00280AD1019A201C937A02998E +:10F88000221C703258300978FAF7DBF906E03A7A30 +:10F89000231C3C005CB20000E869296A7033FDF764 +:10F8A0008DF93020405D184907280BD15820005DA4 +:10F8B000C007C0170130E06100202061201CF7F76D +:10F8C0003FFF18E00122201C05F0ACFF071C12D0FE +:10F8D00003F006FF3C0098B20000F36D002B06D049 +:10F8E00060682030827B616B381CF5F799F8E86816 +:10F8F000F6F773F9201CF6F79EFAFEBDF0690130A9 +:10F90000F061FAE70000C4690100346301000531C9 +:10F91000000070B5061C3C00D4B200000D1C0904A8 +:10F92000090C0020F6F77CF9041C2A1C311C006825 +:10F93000F5F706F9201C70BD4088704703781B0757 +:10F940009B0F0B70007800091070704704307047EF +:10F9500004307047D42101703C0010B30000002136 +:10F96000417070470000C421017000214170704750 +:10F970000000B4210170002141707047000001496E +:10F98000486570470000C469010001490865704777 +:10F990000000C4690100014988653C004CB30000C7 +:10F9A00070470000C4690100F8B55F4F051CB868D6 +:10F9B0000130B86007F024FD38619020F6F766FA50 +:10F9C000041C9021F5F794F8286B271C6063688B62 +:10F9D0008037261CC007C00F2062688B3C0088B3AC +:10F9E0000000603602214007C00F2063688B80074B +:10F9F000C00FF860287F3870B172002808D1F9F77D +:10FA0000C8FF002802D00120606201E00120A0624E +:10FA1000F868002803D00021022006F0CCFF3C004B +:10FA2000C4B300002B1C1033AA1D291C201C05F098 +:10FA3000DFFBA86A00280CD13978022907D0221CE4 +:10FA40007032201C5830B37AFAF710F908E001261A +:10FA50005EE0AA7D231C286A696A7033FDF7C0F84E +:10FA60003C0000B40000E96800200989002900D1A9 +:10FA70000420F0723878012814D10027009000206B +:10FA800006E02969012903D1A969012789071AD547 +:10FA900006F079FC0028F4D1012F14D10098012838 +:10FAA00011D13C003CB4000008E0201C583006F0A6 +:10FAB000E1FC00280AD08069800707D5F07A082188 +:10FAC0000843F0720120E062E87D3073E868A060CE +:10FAD000E06A002812D01A4FF86B00280ED0307B55 +:10FAE000F5F7DEFE3C0078B40000002809D0211CA8 +:10FAF000381C4030FCF755FC1448B96B03F089FF03 +:10FB0000F8BD104F1248B96B03F083FF0022201C90 +:10FB1000104905F0A2FE061C03D1386A0130386294 +:10FB2000EEE7201CF6F73C00B4B400009FF9E8684B +:10FB3000F6F76EF803F0F2FD0448836D002BE2D077 +:10FB40000022301C296BF4F786FFDCE7C469010052 +:10FB5000C4600100346301001130000010B50A20B8 +:10FB600007F0FEFC07F05EFC3C00F0B400000B491F +:10FB700044180CE0201C07F090FB002807D0F7F792 +:10FB800034F9002803D012218620F5F7CAFEF7F7D2 +:10FB90002CF90028EED101F080FD10BD0000409C42 +:10FBA000000010B50C1C011C174A3C002CB50000CD +:10FBB0000129506904D080291DD0812921D11CE060 +:10FBC0009178012915D102219170141C011C104853 +:10FBD00003F028FF0121606900F02EF9606901F04F +:10FBE0005FFC2070A088A16900230A4A3C0068B528 +:10FBF000000007F07EFC10BD222106E001F01DFC94 +:10FC0000201C00F04AF810BD1C212020F5F78FFEC3 +:10FC100010BDB4790100346301003D2E000070B5C1 +:10FC20001C4CA078002832D0052830D060693C00F8 +:10FC3000A4B5000000F0EAF8184EB579A0780128C4 +:10FC40000BD002280ED0032810D0042817D1421F51 +:10FC50008021202008F008F80EE00021202008F084 +:10FC600031F80CE0A08807F01DFC05E0207800F0DA +:10FC70003C00E0B5000039FA002000F0C4FD6069E6 +:10FC800001F0E1FB0520A070B571606900F061F939 +:10FC900000222021812008F0D6F870BD0000B47940 +:10FCA000010020100700B0B50D4D041CA8780028F5 +:10FCB00014D03C001CB60000686900F00BF90A483B +:10FCC000696903F0A7FEA88807F09EFB002C02D00C +:10FCD000687800F079FF0020A870A968201CF4F76C +:10FCE000CAFEB0BDB479010034630100064B80B593 +:10FCF000997803293C0058B6000006D10421997078 +:10FD00002021021C802008F0A4F880BD0000B479F6 +:10FD1000010010B50C4CA17803290FD11030FAF76F +:10FD2000DEF8002809D0207800F0E5F9002000F086 +:10FD300070FD002105483C0094B60000FCF79CFAD9 +:10FD400010BD1B212020F5F701FE10BDB479010084 +:10FD500051B60000094980B58978032909D100F01E +:10FD6000CDF9002000F058FD01210548FCF784FA88 +:10FD700080BD17212020F5F73C00D0B60000E9FD3A +:10FD800080BDB479010051B6000070B5104C1D1C47 +:10FD9000A378061C0498002B18D10123A3702261BC +:10FDA000E6606170A060A561002007F0ACFAA08059 +:10FDB000301CF7F73CFBE08007F03C000CB700007C +:10FDC0004FFBC721C900281A411A0022202007F042 +:10FDD00057FF70BDB4790100B0B5041C0D1C00F0D4 +:10FDE00009F8201C00F024F8002D01D0FFF7D4FE04 +:10FDF000B0BD0000B0B50C4C051CA0683C0048B775 +:10FE0000000000280FD10A48017E022211406160E3 +:10FE1000017E11430176072003F049FC206003F0C6 +:10FE200098FF03F0EEFFA0682843A060B0BD407CBF +:10FE300001000C8007000A4938B50A1C20323C003A +:10FE400084B70000947900AB1C70D279074C5A70CB +:10FE5000E268002A02D1064D01236B701043E06076 +:10FE600000AB1888C88438BD00100700407C010032 +:10FE700000500700B0B5051C002901D000F028F89B +:10FE80003C00C0B70000064C60782169084303D1EC +:10FE900001210E2006F0C5FD206928432061B0BD78 +:10FEA000000018630100B0B50A4C051C226900204F +:10FEB000002A0CD1002900D004E06078002802D18B +:10FEC00004F03C00FCB7000069FB6070281C06F0E1 +:10FED000EFFC0120B0BD00001863010010B5084C14 +:10FEE000607800280AD006F0E3FC002060702069EA +:10FEF000002803D001210E2006F096FD10BD000061 +:10FF0000186301003C0038B80000094980B50B694E +:10FF1000834204D14A78002A01D1012200E0002264 +:10FF200083430B61002A03D000210E2006F07FFDE1 +:10FF300080BD1863010080B50120F6F756FE80BD34 +:10FF4000000010B5041C3C0074B8000000F004F878 +:10FF5000201C00F01FF810BDB0B50C4D041CA868A3 +:10FF6000A0420FD10720296808F08CFB68680222A4 +:10FF700007490028087E01D0104300E0904308762E +:10FF800004F0C4F8A868A0433C00B0B80000A86022 +:10FF9000B0BD407C01000C8007000A4938B50A1C3E +:10FFA0002032947900AB1C70D279074C5A70E26809 +:10FFB000824202D1064D00236B708243E26000ABA7 +:10FFC0001888C88438BD001007003C00ECB8000059 +:10FFD000407C010000500700B0B5051C0A4C002110 +:10FFE0006069FFF711FF042001F046F901F088FB7A +:10FFF00000220421042001F08BF8281C01F04AFAA9 +:02000004800179 +:100000006069FFF7A7FFB0BD407C01003C0028B944 +:10001000000080B501F077FA80BDB0B50D4D01212B +:100020002869FFF7F4FEFFF72AFE00F02CFB00F032 +:1000300084FA002400220421201C01F06CF8013411 +:100040002406240E042CF5D32869FFF786FF3C0014 +:1000500064B90000B0BD0000407C0100F8B5051C8B +:100060000E1C074C171C01212069FFF7D3FE3A1C18 +:10007000311C281C01F052F82069FFF771FFF8BD10 +:10008000407C0100FFB589B0061C16981D1C002895 +:100090003C00A0B9000001D02948149028680088CD +:1000A0000006800E202801D0142817D10AAA18248F +:1000B000182105CAFFF777F9071C281C0189A142FE +:1000C00002DD006801190BE0C068641A0028F5D150 +:1000D0000F213C00DCB900008620F5F761FC00210F +:1000E00001E00021002718480890807907900C2033 +:1000F000164A704380180479049112991598149A3D +:1001000001910390059700950AAB0292211C301CC7 +:100110000CCBF7F73C0018BA000003F90125B540F5 +:100120000C4E083E3078284006D0201C00F0C9FD57 +:100130003078A843307003E0201C139900F043FF8F +:1001400007A903C988710DB0F0BD952400002010E7 +:100150000700747A01003C0054BA0000B0B5041CDA +:100160000C230949584340180079051C00F092FE01 +:10017000281CF7F7C7F80120034AA040083A117875 +:1001800081431170B0BD0000747A010010B5054CB8 +:100190002078002803D11A213C0090BA0000862064 +:1001A000F5F707FC207810BD000018630100014836 +:1001B0004078704700002C63010080B5F6F7D1FE4F +:1001C00000F01BF980BDFEB50168051C0C680E1C13 +:1001D0002178880771D16869C2073C00CCBA000059 +:1001E0006ED580076DD5E87AC20708070909029124 +:1001F0004549800FD20F00284F6805D0012809D04B +:10020000022821D003285BD1FF23201CA97AF4F710 +:1002100074FC55E002980B280AD00C283C0008BB5F +:1002200000000FD00D284ED1394FF868F4F761FC6B +:100230000020C0435AE0354FA97ABB68201CF4F770 +:100240005BFC40E0324F3869F4F753FC3BE000219F +:10025000019102990020FF23090701D401203C00ED +:1002600044BB000013E03189192901D3267E07E041 +:10027000152904D31826711A49190E7B00E00026AF +:10028000B10602D4012073075B0F01210191002800 +:1002900003D0A97A201CF4F736FC0199012915D165 +:1002A0003C0080BB0000F006C60F20881B4FE48A8C +:1002B000F96B0005C00F00291AD04B1C18D0002E76 +:1002C0000AD0002808D03888844213D002980C281D +:1002D00001E01DE012E00DD0081C01F076F90028C5 +:1002E00003D13C00BCBB000000F0A6FAF4F70AFC06 +:1002F0000020C043F863002E0DD03C800020F8633E +:1003000009E020880006800E202804D1044F201C1C +:10031000B96AF4F7F8FB291C0248FBF7EFFFFEBDB2 +:10032000287A01003C00F8BB0000A59A00000348B1 +:1003300080B50078002100F0FCFB80BD0000186350 +:100340000100044B054900281A6800D0011C101C4C +:10035000196070470000D4790100957500000548C8 +:1003600080B5007F24233C0034BC0000044958437E +:100370004018C069F4F7CCFB80BD0000D4790100BF +:1003800094460100021C064880B581628260007FAD +:1003900024230449584340188069F4F7B9FB80BD11 +:1003A000D4790100944601003C0070BC000080B587 +:1003B000002000F03CFB002000F06DFA00F065FA30 +:1003C0000449C86A0130C862081F008807F0C1F8F4 +:1003D00080BDD4790100064880B500210177C16A4B +:1003E0000131C1620438008807F03C00ACBC000059 +:1003F000B3F803F0D1F980BDD479010080B505F0E0 +:10040000E9FA80BD80B5002803D1012004F022FA6A +:1004100080BD012003F0E6FB80BD00000349012000 +:100420004978002900D00020704700003C00E8BC5B +:1004300000002C63010070B5134D2878002820D1EE +:1004400001212E1C7068FFF712FD0021072006F025 +:100450002AFB0D480024047104F0EDF806F0D5F9EC +:10046000012028700A4804604460F6F74CFD3C0007 +:1004700024BD0000F7F75EF8FFF7A2FF00F0A8FD2B +:100480000548716803F020FB012070BD2C6301005A +:100490005000070080000700C4600100B0B51E4C8A +:1004A0002078012835D1251C69681C4803F020FB01 +:1004B0003C0060BD000004F0F0F81A4801684908EB +:1004C00049000160016801221143016000F02BFE28 +:1004D00000F01BFC06F099F8F6F729FEF6F72DFC64 +:1004E00000202070FFF783FF00F08BFD0F4881781C +:1004F00008223C009CBD000091438170817811432B +:1005000081700C49102008716868FFF75FFDF7F7EC +:1005100039F8F6F74DFD0121072006F0CDFA01204C +:10052000B0BD00002C630100C4600100F0000700B2 +:10053000000007003C00D8BD000050000700034940 +:100540000120897A012900D0002070470000147A28 +:100550000100B0B5154D041C287A002820D1F9F708 +:1005600000FC02281CD101202872E868002810D065 +:100570002068296808603C0014BE000069680D48C6 +:1005800003F0C2FA01216868FFF7C8FC00222420AA +:10059000616807F0CFFBB0BD002028722168012000 +:1005A000F4F7CFFAB0BD00202168F4F7CAFAB0BD65 +:1005B000047A0100346301003C0050BE000004488E +:1005C00080B5007A012802D1002002F0F0FE80BD43 +:1005D0000000047A010080B5012807D0802809D1E5 +:1005E0000748007A002804D0012000E0002002F033 +:1005F000DEFE80BD0E212420F5F73C008CBE0000FD +:100600000BFA80BD047A0100F8B53A4E051CB07AA9 +:10061000002869D1F9F7AEFB022865D13648006899 +:10062000002861D03548716803F074FA01217068C0 +:10063000FFF77AFC6C20F5F7B9FC041C3C00C8BE3F +:1006400000006C21F4F7E7FA30682C220460296876 +:1006500081606968C160002111548162A968002924 +:1006600002D0E968016105E006F05DFF69684018A5 +:10067000316808617068FFF714FD692108553C0076 +:1006800004BF00000020F9F709FB01273B1C061CF2 +:10069000221C24320021F9F779FB1C480321008831 +:1006A00089030843211C40310091488318481021D8 +:1006B00060601848A060A76367630020F5F74CFBF3 +:1006C0003C0040BF0000E06002890099CA830768CF +:1006D000311C381D2761FEF78EFE381C0A300F4989 +:1006E000FEF789FEA4203880002004F0DEFB002203 +:1006F0001F20696807F02DFBF8BDFFE7002029687F +:10070000F4F73C007CBF00002EFAF8E7147A0100F1 +:10071000805A010034630100FA60010099EC000086 +:1007200015ED000012610100064880B5817A0029AC +:1007300007D0006804222030017B1143017302F0CE +:100740006BFD80BD3C00B8BF0000147A010010B5FD +:10075000044CA07A012803D106F0F1FE21688861DB +:1007600010BD147A0100031C081C1F4970B50A68EB +:10077000012B1CD0802B05D0832B30D1887A002808 +:1007800014D029E053693C00F4BF0000002B0ED0C8 +:100790009469D5692E1B0C695D1B361BB610A41914 +:1007A0000C61CC682D1BAD106419CC60936102F014 +:1007B00081FD70BD022812D1906A0C1C0028F8D06F +:1007C00007F00EFAA07A01283C0030C00000F3D1F7 +:1007D0002068816A0029EFD12030017B0822114373 +:1007E000017370BD02F021FD70BD0E211F20F5F7D1 +:1007F00028F970BD0000147A010002490C3103C9C8 +:10080000401870470000147A01003C006CC00000E2 +:10081000054880B5006804222030017B1143017334 +:1008200007F0E4F980BD0000147A010070B5164CA1 +:100830000E1CA17A00291CD02168086107F032FA49 +:10084000002817D020680025056200223C00A8C0BF +:10085000000083211F2007F094FA6068FFF703FC73 +:10086000216804222031087B2B1C90430873311C23 +:1008700000221F2007F061FB70BD20680822203095 +:10088000017B1143017302F0D6FC70BD00003C00F7 +:10089000E4C00000147A010080B500F077FC00F09D +:1008A0006FFC00F029FF00F05DFA00F0C5F800F0E1 +:1008B00085FF80BD80B5FAF785FA80BD0148C06824 +:1008C00070470000287A01000349002800D0011C6D +:1008D0003C0020C100000248C160704700008175E3 +:1008E0000000287A010001480249C86070478175FC +:1008F0000000287A01000149886170470000287AC9 +:1009000001000149002088617047287A01000349ED +:1009100000283C005CC1000000D0011C0248C161FD +:100920007047000089750000287A010003490028FB +:1009300000D0011C02488162704700008D750000E4 +:10094000287A01000349002800D0011C02480162F6 +:10095000704700003C0098C1000091750000287AA3 +:1009600001000349002800D0011C024801617047C2 +:10097000000099750000287A0100014802490861C9 +:10098000704781750000287A0100021C081C802A2B +:1009900080B502D100F03C00D4C1000007F880BD52 +:1009A0001E212120F5F762F880BD0000B0B5104D82 +:1009B000041CA86B0130A863696B091A281C006B22 +:1009C0000C2903D90021FFF791FA03E0082901D18E +:1009D000FFF732FB201C00F03C0010C200004DF974 +:1009E0006069400701D503F00CFC201CE96AF4F7AC +:1009F000DBF8B0BD0000287A01000349002800D0D0 +:100A0000011C0248416270470000B5750000287A59 +:100A1000010003490120096C00293C004CC2000080 +:100A200000D1002070470000287A010010B5074C63 +:100A3000E16B002901D1E06304E0814202D0002093 +:100A4000C043F8E706F09CFD206410BD287A010041 +:100A50000148006C70470000287A01003C0088C201 +:100A60000000054980B5002048638863FF210931F3 +:100A700015221020F6F7FBF980BD287A0100034902 +:100A8000002800D0011C0248816070470000C17539 +:100A90000000287A01000349002800D0011C3C0016 +:100AA000C4C200000248C16270470000C575000062 +:100AB000287A0100044B054900285A6800D0011C1F +:100AC000101C596070470000287A0100C9750000A9 +:100AD0000349002800D0011C024841617047000012 +:100AE0003C0000C30000CD750000287A01000F4BC8 +:100AF00010B5D968002919D00E4C0021CA0012196E +:100B0000403AD26B824202DA01310329F6D3481C03 +:100B10001A780006000E904208D018700806000EE1 +:100B2000041C3C003CC30000F6F7BAFA201C03F09A +:100B30001BFD10BD186301003C42010010B5144CB0 +:100B4000E168002922D02178124BCA00D218403A1D +:100B5000D36B834202DA481C20700BE0926B824216 +:100B600014DDFF313C0078C300000806000E207041 +:100B700003D119218620F4F78EFF2078FF3000067C +:100B8000000EF6F790FA2078FF300006000E03F012 +:100B9000EEFC10BD0000186301003C420100094852 +:100BA0000021018141813C00B4C300008181C181E9 +:100BB000074A02800123DB0243808280C2804176A3 +:100BC00031218176012101767047000030800700D5 +:100BD000FFFF000080B50120F6F7F8F80120F6F7D6 +:100BE000DBFC0120F6F75AFA3C00F0C300000120BC +:100BF00000F0F1FD0120F7F7C6FB80BD000010B545 +:100C0000114C002907D1002802D10120E06006E044 +:100C10000021E16003E0012907D1002801D0207004 +:100C200003E018218620F4F73CFF3C002CC40000B0 +:100C30002078FF300006000EF6F73EFA2078FF30ED +:100C40000006000E03F09CFC10BD000018630100BC +:100C5000054980B50968884205D0FEF7FFFB00F022 +:100C600087FAFFF72BFC80BDA86901003C0068C42F +:100C7000000001494870704700002C6301000149E1 +:100C8000C860704700004C7B0100034901200978CF +:100C9000002900D00020704700002C630100044AA6 +:100CA000002802D0906901309061D06940183C0062 +:100CB000A4C40000D0617047905C0100FEB5041C24 +:100CC00000680568281CFEF727FF071C6069154EA1 +:100CD000C007C00F21D001AA02A9281CFEF712FFED +:100CE0003878C0070CD46069800708D500AB187A43 +:100CF0003C00E0C40000002801D0022802D1706A44 +:100D000001307062FEBD00AB187A002801D00228C5 +:100D1000F8D1706A01307062B06A0130B062F1E7F8 +:100D2000F06A0130F062EDE70000905C01000249DA +:100D300048693C001CC50000013048617047000054 +:100D4000905C01007047000070470000011C4031BA +:100D500010B50A8B1207920F012A33D04A781A492C +:100D6000041C6034002A0B6A22D1E279012A02D9DC +:100D7000CC6801343C0058C50000CC60022A02D97E +:100D80000C6901340C610C6801340C60446B002C5C +:100D900003D00469247CE40702D54C6801344C601C +:100DA000806B002802D0086B01300863002A0CD049 +:100DB0009818013808E03C0094C50000012A01D0D1 +:100DC000022A02D1886801308860E0791818086228 +:100DD00010BD0000905C01007047000001490A202E +:100DE00008817047C47A0100F0B5324F041C78784E +:100DF00085B0C007C00F03903C00D0C50000B87894 +:100E000002900120A0400490391C88702C48008872 +:100E100006F00BFC0190FEF7AEFC0430294EA50055 +:100E200071590979884206D0FEF7A5FC7159043042 +:100E3000087101207870002078703C000CC600001A +:100E400021480121204E3038015571590320087086 +:100E500006F0C6FB061CFEF791FC36180E3609E0BC +:100E6000301C06F0F5FA002804D023218620F4F780 +:100E700033FE03E0F6F734FB0028F1D03C0048C60F +:100E80000000124813493C3800780872201CF4F71F +:100E9000A2FA0E4E715908710398002801D0012161 +:100EA000797009480088019906F0BDFB0298B87076 +:100EB000094949790498884203D0242186203C00BE +:100EC00084C60000F4F70EFE05B0F0BD0050070028 +:100ED000D0790100107B010080800700508007005E +:100EE000B0B50D1C041C052801D3F4F729FE052D0F +:100EF00001D3F4F725FE0B4AA8001158A0001058A2 +:100F00003C00C0C600000EC90EC0062106220648DD +:100F100069432A380918624310180622F3F70FFFB5 +:100F200002483038415D0155B0BD107B0100B0B5BD +:100F3000041C0E480D1C80780121A140084003D0FC +:100F400001213C00FCC600008620F4F7D1FD0621FB +:100F50000622094869430918624310180622F3F76C +:100F6000F1FE201CF4F740FA034AA1002A3251583E +:100F70000871B0BD00500700E67A0100034980B552 +:100F8000002048603C0038C7000007F032F980BDFF +:100F90000000D47A010010B5041C052801D3F4F731 +:100FA000D8FD0749087A074A107001200872FEF739 +:100FB000F4FB044A0430A1003C325158087110BDC2 +:100FC0000000808007003C0074C70000D47A010054 +:100FD000034980B50120486007F00EF980BD00008C +:100FE000D47A010010B5041C052801D3F4F7B4FD30 +:100FF000201CF5F78FFE0021201CFBF731FD01219D +:10100000002800D0011C09043C00B0C70000090CF6 +:10101000201C04F022FA10BD000006490120054BF7 +:10102000886000203C33002182009A581170013002 +:101030000528F9DB7047D47A01000F4938B5002044 +:1010400088600E48011C20318A793C00ECC7000002 +:1010500000AB1A70C9790A4C094D59700C343C35F3 +:1010600000210322635C002B02D08B00EB581A7026 +:1010700001310529F6DB00AB1988C18438BD0000B9 +:10108000D47A010000100700FFB5144F3C0028C8B7 +:101090000000041CBE790D1C81B00F2000F0B9F8CF +:1010A0002A1C104D0090211C281CF4F7DEFC211C8A +:1010B000A81D039AF4F7D9FC211C281C0C30049AB3 +:1010C000F4F7D3FC211C281C12300A9AF4F73C00D8 +:1010D00064C80000CDFC07F09BF8009800F076F89B +:1010E000BE7105B0F0BD000020100700E67A0100D7 +:1010F00010B50020F6F726F80749887800090001A6 +:1011000088700024201CF5F711FE01342406240EFB +:101110003C00A0C80000042CF7D310BD0000005014 +:10112000070080B502F0E3FB034881780F221143EA +:10113000817080BD000000500700F8B50D1C041C34 +:10114000052801D3F4F717FDA600002D114F07D194 +:10115000B8593C00DCC80000816800290ED14078F5 +:1011600000280BD002E0FF352D062D0E291C201C77 +:10117000FBF788FC011C201C04F07EF906490120C5 +:101180003039085504483C388068002802D1B959E4 +:10119000032008703C0018C90000F8BD0000107B57 +:1011A000010080B504F0CDF980BD10B5041C052800 +:1011B00001D3F4F7E6FC201CF5F7C1FD0020054A39 +:1011C000A10051588860044988780122A240104348 +:1011D000887010BD00003C0054C90000107B010065 +:1011E00000500700024A9178084390707047000051 +:1011F00000500700F8B50C4FBE790F2000F018F82A +:10120000051C0024201CF4F70DF9084AA1005158D0 +:10121000087101342406240E3C0090C90000042CFF +:10122000F3D3281CFFF7E1FFBE71F8BD00002010CA +:101230000700107B0100B0B508498D788A78054019 +:1012400082438A7006F0F9F9041C0A34201C06F067 +:1012500034F90028FAD0281CB0BD3C00CCC90000ED +:101260000050070001490A2008817047387B0100BF +:10127000F8B510480426041CE034051C383D00274E +:10128000201C1C30E460A06127610B48A682E0614D +:101290002762A7620620A084201CFEF73C0008CA33 +:1012A000000087FC201C0C30F6F7B7F90549383CE4 +:1012B000AC420880E7D1F8BD0000D4E4010012611F +:1012C0000100487B0100F7B5051C0C230F1C1249D7 +:1012D00058434418208806F0EAF9A07801283C0019 +:1012E00044CA00001AD16668022F05D15C20805BD9 +:1012F00002990009884211D1281CFEF7FBFF301C1F +:10130000F9F7FAFD0420A070391C281CFBF7F4F84B +:10131000034AE8003C32115801311150FEBD000073 +:101320003C0080CA0000607B01000120064A0021C9 +:101330000C234B439B189B78002B00D000200131DD +:101340000429F5DB7047607B010070B5041CFFF7D2 +:10135000EAFC002803D120210C20F4F7F6FB261C20 +:1013600060363C00BCCA00000021F171E164606B92 +:10137000251C4035002831D0FFF704F90122120363 +:1013800000282069018801D0914300E011430180C9 +:10139000206901220088D2022883201C583001884D +:1013A000914301803C00F8CA0000A36B5208002B57 +:1013B00010D091430180288B0007800F012815D0A1 +:1013C0002E20015D20690430F8F741FD616AFEF7C7 +:1013D000A8F904E011430180201CFBF7CCFB6883D3 +:1013E00004E0206941803C0034CB0000A88B2169D7 +:1013F000C882E068F6F720F93080606D002804D0DC +:1014000000220321707AFEF70DFF201C00F0B6F9D0 +:10141000707A06F045F870BDB0B5002406F022F9E8 +:10142000094A00210C234B433C0070CB00009D185F +:101430006B685B6CAD78C31A012D02D1A34200DD4D +:101440001C1C01310529F0D3201CB0BD0000607BBD +:101450000100B0B5041C06F0A8FE0C20084960434A +:101460004518288806F035F968683C00ACCB0000C8 +:10147000002806D02030007B012802D1201CFFF775 +:10148000A3FAB0BD607B0100FFB585B00FAE60CEA2 +:1014900038201E497043171C4418FFF77FF80122BB +:1014A0001203002803D02088904320803C00E8CB22 +:1014B000000002E02188114321801198391CE0626C +:1014C0000598F8F7D0FC011C2B1C381C069AFEF777 +:1014D00020F960800622201D0F49F3F772FC231CBF +:1014E0000898303318700E980C49587065633C00AA +:1014F00024CC0000002002900122049209480391AC +:101500005A780188019200911978243B301C626B53 +:10151000FEF7A8FE09B0F0BDD4E40100126101009D +:101520005D4E0000487B0100FFB587B0109812AFF8 +:101530003C0060CC00008C46A2CF4C23304C6B4367 +:101540001C19161C159A2785271C303706970597F6 +:1015500000233B73059F78731198271C60646160BA +:10156000226040373E70614661870798311CF8F76A +:1015700080FC3C009CCC00000599C8730A987870E8 +:10158000301CFEF773F8002801D0012000E0002095 +:10159000410002200140119A0120002A00D10020C0 +:1015A00008433872201C2E300799FDF7CFFF281C06 +:1015B00004F0AEF83C00D8CC0000FEF7FEFF4C2251 +:1015C000124B6A43D218012109032A32002804D0A1 +:1015D000101C12888A43028002E0108808431080A1 +:1015E0000B490020039106990290002204920848BA +:1015F0000A7B4188231C3C0014CD0000019200911D +:1016000079780833281C6268FEF738FE0BB0F0BD0D +:1016100058E30100754F00003C7C0100B0B50C1C84 +:10162000012827D0802830D1E06C002808D069201C +:10163000005D1849C00040183C0050CD0000043047 +:10164000016801310160201CFFF7E9FB134D503D9B +:10165000E868002805D02E20005DFEF710F802F0A3 +:1016600042FE201C6168F3F72FFB403460780028AD +:1016700002D106F012F8A860B0BD3C008CCD00008D +:101680002006000E8128FAD1220C2004000E02212F +:10169000FEF7E6FDB0BD0A210C20F4F77DFAB0BDDF +:1016A0009C7B0100F8B5184E184F051C3479B879A9 +:1016B0000090201CF5F77CFF002806D03C00C8CD28 +:1016C0000000124838384068854201D1002D03D10E +:1016D00010218620F4F763FA0D490020383948605C +:1016E0000421201CFFF759FC0421201CF5F7EBFE18 +:1016F0000C21064A6143303A89180C7104203C00E1 +:1017000004CE000030710098B8710F20FFF7A6FDDD +:10171000F8BD0000A47A010020100700F8B5041CF1 +:101720000F20FFF7C1FDF5F73BFF0125002800D092 +:101730000025164EB079164F00903879042801D153 +:101740003C0040CE0000002C03D111218620F4F78C +:101750002CFA1048290638384460090E0C1C042065 +:10176000FFF721FC0321201CFFF741FC211C042072 +:10177000F5F7AFFE0C21074A69430420303A891877 +:1017800008713C007CCE00003C710098B071201CB8 +:10179000FFF750FD0420F8BD20100700A47A0100D7 +:1017A0000C2302495843401880687047747A01003E +:1017B0006030C1798079814201D9012070470020D1 +:1017C000704700003C00B8CE0000014880687047B8 +:1017D00000004C7B010038B56921095C1823104AD0 +:1017E000594389188A6801328A604B69D21ACB68DA +:1017F000934200D2CA6000220B4C0260221C2032AD +:10180000957900AB1D703C00F4CE0000D2795A707F +:101810000A68002A01D1486000E0106000AB08604F +:101820001888E08438BD0000C47B01000010070068 +:1018300018230A495843411808690130086148686B +:10184000002809D0486901303C0030CF00004861D1 +:10185000486802684A60002A00D10A607047002088 +:101860007047C47B0100F8B5124E104D0F4C0A278B +:10187000211C0020E0602A31221C1832A160626124 +:1018800027820C4AE061A26160623C006CCF0000DC +:1018900006202084081CFEF7D7F9201C0830F5F735 +:1018A00001FF4C3CAC427080E5D1FF203070F8BDA8 +:1018B00088E401000CE301003C7C0100126101009E +:1018C000F8B5041C0B480E1C171C44703C00A8CF34 +:1018D000000005F000FF051C391C301CFDF7ABFFB4 +:1018E0000C21054A28180A30614308325050034839 +:1018F000891800688860F8BD00006C7A0100786E75 +:10190000010070B50B4E051C7078FF280FD03C000D +:10191000E4CF00000C23084C58430834205805F04D +:101920001DFE002806D170780C23584300198168E9 +:101930002943816070BD00006C7A010080B53021C0 +:101940000148F3F743FA80BDECE5010010B505F05E +:101950003C0020D00000C5FE0A4944180CE0201CC1 +:1019600005F0F7FD002807D0F5F751FE002803D059 +:1019700013218620F4F731F9F5F749FE0028EED15E +:1019800010BDB0360000FFB58BB0199B0D1C041CB8 +:101990001A203C005CD00000002B169900D11820C2 +:1019A00001901498002827D0FF20199B0130002BAC +:1019B00001D1182300E01A230433824204D3D01A41 +:1019C000400840000004000C0D906A480088C21ACC +:1019D0001204120C3C0098D000000492002908D098 +:1019E0008979664A4900515A049A511A0A04120C1C +:1019F0000492049A824205D90020049002E06048D3 +:101A000004900D9001980104090C0A910020F4F74C +:101A100084FA009000683C00D4D0000000260690B4 +:101A20002060002005900E9800240005000C09900D +:101A30001A980D9F4007400F089007940395002DBA +:101A40000DD02889B84204D836183F1A07D0ED685F +:101A5000F5E73904090C281C3C0010D10000F4F70C +:101A600038FBEFE7002E02D10799002971D1271C1E +:101A70006C20F4F788FB0799041C002920D10794F7 +:101A80000020A0611898271C606017982437A06078 +:101A90000698206115980FC80FC73C004CD1000074 +:101AA00014985C2160630998085319986921E063D0 +:101AB0001B9808551C9860651998002823D0089831 +:101AC000069908831FE06C22201C0799F3F71AFA85 +:101AD0003C60019862213018C85315983C0088D1A9 +:101AE00000004021807AC8550020B86306980A9902 +:101AF000F4F71FFAF8600299F4F73BF9201C403024 +:101B0000818B059A1207120F1143818303985E217E +:101B100002900198224A30180853126801213C00B3 +:101B2000C4D10000081C002A00D01B980006049AAB +:101B3000000E964203D92C2211551B4904E0159939 +:101B40002C22097A11551949085C662108551C9800 +:101B5000002801D01F200855002D03D0E86803900D +:101B60003C0000D20000002000E009E0E860059899 +:101B7000002601300004000C0D9F0590039D6DE7C9 +:101B80000098E0600299F4F7FAF800202060012143 +:101B9000A1636034608007980FB0F0BD000006615B +:101BA00001003C003CD200005C4301003809000009 +:101BB000186701000E6101000A6101000148006818 +:101BC00070470000C46A01000249091D03C940189A +:101BD00070470000C46901000148006970470000B7 +:101BE000C46901003C0078D2000001484069704798 +:101BF0000000C46901000148806970470000C469A1 +:101C0000010070B50D4E0020351C4035F0630DE02D +:101C1000A068F4F77AF9B36D002B04D000220120FC +:101C2000616BF3F795F83C00B4D20000201CF4F788 +:101C30009DFA281CFAF742FD041CECD170BD00008F +:101C4000C4690100F8B51A4F0026F86B00282CD0A3 +:101C5000381C403000901DE01648B96B02F05CF86B +:101C60000022201C144903F03C00F0D200007BFF4E +:101C7000051C04D1386A0130386201360DE0A068D5 +:101C8000F4F749F9BB6D002B04D00022281C616BCE +:101C9000F3F764F8201CF4F76CFA0098FAF711FDDA +:101CA000041CDCD10748B96B02F03C002CD30000C7 +:101CB00025F80020F863301CF8BD0000C46901005D +:101CC0003463010011300000C460010001490120AB +:101CD000C8637047C469010080B50020054A00212F +:101CE0001C2343439B1801300428D9663C0068D369 +:101CF0000000F8DBFCF7FDFC80BDC4690100014970 +:101D0000C86470470000C4690100014988647047D5 +:101D10000000C4690100B0B5041C0D1C211C028E1A +:101D2000806A4031F3F72FF8002816D102213C00D9 +:101D3000A4D30000201CF4F76FFAE269C000101869 +:101D4000828BAB889A4204D182692B689A4208D26E +:101D500001E09A4205D2002118300CCD0CC000E001 +:101D60000121081CB0BD0000F8B5061C002744681E +:101D70003C00E0D300000FE00949486A01304862A6 +:101D8000A069002802D0F4F700FAA761266225684E +:101D9000201CFFF752FB2C1C002CEDD1F8BDC469B0 +:101DA00001000330074A8108136850681B688900E6 +:101DB00009183C001CD400008B4201D3516000E0A4 +:101DC00000209060704700008C6E010070B5124ECC +:101DD0008038C50070590C1C002804D101210D2049 +:101DE000F3F72EFF0DE02069002805D1A81981889E +:101DF000E06801F03C0058D4000047FA20617159B6 +:101E0000201CF2F7BBFF041C002C07D0E068002860 +:101E100001D0F4F792F8201CF4F7BDF970BD5442DC +:101E2000010070B5041C0D1C0E490622F3F735F8AD +:101E30000026E66166623C0094D400000720302151 +:101E40000855E663281CF8F76BF8A076201C1430C0 +:101E50000622291CF3F724F80622291CA018F3F700 +:101E60001FF8266170BD00001261010080B5FDF70A +:101E700085FE80BD014948603C00D0D40000704719 +:101E80000000E4650100024980B54968F2F77CFF73 +:101E900080BDE465010080B5F4F7E5F9074907481E +:101EA0000EC90EC018380068002802D002F0B7FA38 +:101EB00080BD02F09EFA80BD00003C000CD5000001 +:101EC000B058010090730100054980B58968002071 +:101ED000002900D103200006000EFAF7E3FB80BDC5 +:101EE000606C010080B5034806220349F2F7DEFF6B +:101EF00080BD000040800700126101003C0048D511 +:101F00000000B0B5041C0C4D0B1C211C00200C3D26 +:101F10000029094C05D02878211C1080021C181CAF +:101F200007E011880E2907D80A06120E191C201C7A +:101F30002A70F2F7BEFF0120B0BDB06901003C007D +:101F400084D5000010B500200A4A012111600A4C16 +:101F50000AE0021C016A5032914205D061783C23AC +:101F6000594309190431016204F0BAFB0028F0D189 +:101F700010BD0000DC62010068610100044880B50A +:101F80003C00C0D500000068002803D0011C1020D0 +:101F900004F0C7FE80BD286101000322111F80B537 +:101FA0000020FBF776F980BD000080B50BF0B9FA90 +:101FB00080BDFFB583B0161C002101911F1C0821B4 +:101FC00002AA3C00FCD50000FAF70EFF041C2AD13F +:101FD00002984168490001D4092424E0FAF752FF2D +:101FE0003860029841684902CD0F291CFAF744FF76 +:101FF000011C306038680006000E00F01BF8002855 +:1020000001D10A243C0038D600000FE03168029864 +:102010002B1C01AAFAF7D7FF002806D00198002848 +:1020200004D004990968814200D2032401980499DC +:10203000086007B0201CF0BD000070B5051C0E1C28 +:10204000012400F084FF3C0074D60000002808D072 +:10205000032D01D0042D04D10320C003864200D3F8 +:102060000024201C70BD00007CB5151C061C0C1C37 +:10207000291C6A4601ABFFF7A5FF002802D1002CFE +:1020800001D103207CBD17483C00B0D6000000AB56 +:1020900006601879072821D202A31B5C5B009F44CD +:1020A00000001D040406101713000420EDE72A1C8D +:1020B000211C0120009BF2F781FE002812D106208E +:1020C000E3E72A68009905E000983C00ECD60000A0 +:1020D0004278811C01E02A686946201CF2F7FEFE66 +:1020E00003E004218720F3F7CFFD0020D0E70000B4 +:1020F000F86B0100F7B586B00E1C082105AA0698FA +:10210000FAF77EFE041C45D1059841683C0028D7AB +:10211000000002904902C90F002504950391089F11 +:10212000FAF7D5FE019002A903C9FAF7C6FE019994 +:10213000052914D202A35B5C5B009F4400000E03E0 +:10214000060C030087420ED807E087420BD83C00FC +:1021500064D700000125C01B049007E0874205D129 +:10216000012503E005218720F3F794FD002D01D11F +:10217000032415E005984168002969DA3A4A06996E +:102180001160FAF791FE071C05980399FAF786FE8D +:102190003C00A0D70000051C011C381CFFF75FFFA6 +:1021A000002801D10A245EE0072F57D202A3DB5D8D +:1021B0005B009F440000530404062E504800042492 +:1021C00051E00498002801D1002714E0089908186C +:1021D00000043C00DCD70000000CF4F72BF8071CCF +:1021E000311C089AF2F786FE089804993818F2F71D +:1021F0002FFE089804993E1C40180890311C0020BE +:1022000008AAF2F7ECFD002800D10524002F2DD0FC +:10221000381CF3F73C0018D80000EDFF29E00399C3 +:10222000002904D0059840688702BF0A00E0002713 +:10223000311C281C089AF2F760FE0499002903D08B +:1022400008982818F2F707FE002F12D0F2F7CCFDFD +:102250000FE0311CA81C3C0054D80000089AF2F78B +:102260004FFE0898687007E0FFE7072404E00824A1 +:1022700003218720F3F71AFD201C09B0F0BD0000F0 +:10228000F86B01009EB51C1C00AB19720092002275 +:1022900001946946FBF708FA3C0090D800009EBD07 +:1022A00000008FB5029200220090019003916946D0 +:1022B0000420FBF7FCF98FBD0000B0B50C1C012811 +:1022C0000AD0032819D004282CD1606801F035FC0D +:1022D000011C83200CCC22E01C203C00CCD8000048 +:1022E00014496043401814494518281CF8F746FC67 +:1022F000A968002903D0221C082005F071FEB0BD9A +:10230000208CC82801D3042004E0652801D30220D2 +:1023100000E001202084201C03F0DCFA3C0008D9F6 +:1023200000002268E368011C8220FFF7B4FFB0BD03 +:10233000A0210820F3F7C3FCB0BDDC71010064EEFE +:10234000FFFF0348044A81685161C068906170478B +:102350000000F4680100C07101000349044A3C0018 +:1023600044D90000086B90608868D0607047000016 +:10237000905C0100C071010000B5FFF7F1FFFFF7AD +:10238000E3FF00BDB0B50D1C002814D00B490C4C68 +:1023900088686269C968801AA269891A401804D0DD +:1023A0003C0080D9000064235943F2F7C4FE206149 +:1023B000FFF7CDFF206928600120B0BD0020B0BD2F +:1023C0000000F4680100C0710100B0B50D1C0028C8 +:1023D00017D00C490D4C086BA2688968801AE26816 +:1023E000891A3C00BCD90000401807D022889042CE +:1023F00004D964235943F2F7A1FE6060FFF7B6FFEA +:10240000606828600120B0BD0020B0BD905C010074 +:10241000C07101007CB51068002802D000F024F8DB +:102420007CBD0F483C00F8D90000C0698468E068B2 +:10243000256AA669F3F7E3FDE169F3F706FD201CC1 +:10244000E2694030C18B12898918C1830749019420 +:1024500000912869331C82880168E068C068F8F739 +:102460001EFCE0E700003C0034DA0000846A010052 +:10247000915E0000F0B58569066A041CC06885B0ED +:10248000C068002801D1F3F757FC0A49029504946B +:102490000391306982880168262001920091435D92 +:1024A000E068E1692A1C0E323C0070DA0000C06866 +:1024B000F8F737FD05B0F0BD0000E9D9000010B510 +:1024C000141C0548FCF77BFBA068F3F79EFDE16850 +:1024D000C160201CF5F7BBFA10BDA06A01007CB5F5 +:1024E000041C6030027BA16900913C00ACDA000062 +:1024F0000192221C211C3831A06848320D1C6369EE +:1025000003F07AFB08210020F3F788FDE0602669DC +:10251000B16B002901D0102300E018230549019474 +:1025200000913168CA180823011C281C3C00E8DA15 +:102530000000F8F720FD7CBD000081DA0000F0B556 +:102540004668171C041C0121301C9BB0FAF70DFCD7 +:102550000025002803D013490A7A012A01D1012558 +:102560001CE088624E612089C861608900283C00B7 +:1025700024DB000003D000200884488404E0E068E5 +:102580000884208A4884608A8884086B002803D1E4 +:1025900001A803F077FC04E001200861002002F0AC +:1025A00039FB3D711BB00120F0BD0000F46E01004D +:1025B0003C0060DB000010B5041CF7F7E8FB0028C6 +:1025C00011D14B20005D01280DD1201C04F085FAAB +:1025D0000021201C04F0F3F8A0690021C207D20FEB +:1025E0000420F4F7D8F910BD000038B5041C04F03D +:1025F00036F93C009CDB0000002803D04030807A94 +:10260000002825D10C2029210855211C0622A018BC +:10261000F2F7A0FC201C06220E49F2F79BFC0120D9 +:10262000E06160620720302108550025E56306203F +:1026300000AB18803C00D8DB0000E068002801D027 +:10264000F3F7DBFC02216846FDF773FBE060201C1A +:10265000FFF769FCE560201C38BD12610100FEB582 +:10266000051C0E1C152000AB98801421171C00209F +:10267000F3F7E3FC02903C0014DC0000046806223F +:10268000311C601D2571F2F76BFC0622391C201CE1 +:102690000B30F2F765FC01A8FFF752FCFEBD00000D +:1026A00080B50023FBF75CF880BD000070B5051C09 +:1026B00008350F4E291C041C3C0050DC000006228B +:1026C000301CF2F750FCA088B082281C05F0A1FF56 +:1026D00000280BD0E0883061281C04F0CCF8A188D9 +:1026E000403041800020F4F7B8F902E00420F4F70C +:1026F000A0F9002070BD707C01003C008CDC000063 +:1027000080B50020FBF7F8FB80BD000070B5041C0D +:102710000430051CFDF732F8002809D00020F7F737 +:1027200037FC002804D00622011C281CF2F71EFCEE +:102730000A4E0622291C301CF2F718FC3C00C8DCAB +:1027400000006089F082281C05F069FF002803D092 +:102750000220F4F788F902E00520F9F7F4FA0020E6 +:1027600070BD707C010010B5041C007904281CD2D7 +:102770006079012801D0032804D1002201213C0006 +:1027800004DD0000A01DF9F769FC6079002804D180 +:1027900022790021F9F762FC0AE0032808D100241D +:1027A000221C00210020F9F759FC0134042CF7DB2E +:1027B000012010BDF0B597B0171C051C0430041C97 +:1027C0003C0040DD000015AA16A905F0E2FE002835 +:1027D0002ED015984B21095C002923D0012902D065 +:1027E00002291FD101E004F090F9AD7A1348169E3A +:1027F00005800622211C0830F2F7C1FB221C311C87 +:1028000002A83C007CDD000000F074FB0A200AA94D +:10281000487200AB9D80022101A8FDF79FFA059048 +:1028200002A8FFF795FBF3F7F7F90021159803F0DD +:10283000E1FF002000E00120387117B00120F0BD59 +:10284000987C01003C00B8DD000080B50120FBF75A +:1028500062FB80BD0000B0B5041C807D151C0A1C05 +:10286000C007C0170130211CF9F7FBFC002803D179 +:10287000042028710120B0BD206AF7F776FE606A57 +:10288000F7F77BFE206A3C00F4DD0000FEF788FAD3 +:102890000020B0BD10B5141CC27981798088F7F78B +:1028A000A1FA2071012010BD80B50123FAF770FF55 +:1028B00080BD0000F0B5041C081C00210F2891B059 +:1028C00000D30221002941D13C0030DE0000C000CD +:1028D000244F1090C619B288216802A8F2F75BFB5A +:1028E0002189B088091A002907DD09042268090C2A +:1028F0001018F3F7C0FB051C00E00025B07980211B +:10290000884317497831095C00203C006CDE0000E8 +:10291000F3F7B4FB071C00681349019010980B589B +:10292000019A291C02A8F2F7ACFA0090281CF3F7D0 +:1029300073FB201CF3F782FB0098002808D0029854 +:1029400001990860B079391CFAF720FF3C00A8DE35 +:10295000000011B0F0BD381CF3F761FBF9E72D2042 +:10296000F3F7F5F9201CF3F76CFBF2E700002444C1 +:10297000010070B5051C2035061CA879042848D232 +:10298000E979012913D1301C283003F092FF3C0073 +:10299000E4DE000000283FD0011C8C310165A979DC +:1029A0004C22041C11548118416250340462E11E0F +:1029B00081620BE000292FD13C2218494243541870 +:1029C000174A04341268002A00D14870002C23D022 +:1029D0003C0020DF0000351C3035E879012801D0AB +:1029E000052801D10620E8712022311D2068F2F768 +:1029F000DEFAB08CA080E879A071A8790025A063E8 +:102A0000012060810020E0602E36E80000191830B7 +:102A100008223C005CDF0000311CF2F7CBFA0135E4 +:102A2000042DF5D3012070BD68610100DC62010056 +:102A300010B5041CC07A012801D0032807D1201D3D +:102A400003F040FF002802D0A17A40304173E07AC1 +:102A5000002801D03C0098DF0000032802D1A07AB2 +:102A600002490870012010BD00006861010070B5C6 +:102A70000E1C0321041C301CFCF7E1FB002801D0D4 +:102A8000857800E000250B48321C00680368207C34 +:102A90008007C00F211C3C00D4DF0000F7F762FE66 +:102AA000002805D00121281CFDF7FEFB002000E0D6 +:102AB000082003F0C5FF002070BD0000E4650100A0 +:102AC00080B5426800880121490608432D2105F0A0 +:102AD000D3FB80BD034901203C0010E00000497891 +:102AE000022900D0002070470000846601008CB5E8 +:102AF00001281FD100290DD001290BD0022901D0B6 +:102B0000032916D10020F9F714FC932000AB18809C +:102B1000002008E0012900D000203C004CE000002B +:102B2000F9F70AFC832000AB1880022000F0CCF8F3 +:102B300001906846FFF73AFA8CBD01210E20F3F7A9 +:102B40001BF9F9E7FFB5171C1E1C1421002083B0E8 +:102B5000F3F7ACFA051C0468122000AB3C0088E0D7 +:102B6000000098800622601D0399F2F732FA0020D7 +:102B7000207127730499201CE172311C06220D304C +:102B8000F2F727FA029501A8FFF713FA07B0F0BD94 +:102B90000000F8B5061C0F1C0C210020F3F73C00C8 +:102BA000C4E0000089FA0568041C281D0622311CB7 +:102BB000F2F712FA6F81201CF8BD0000B0B5041CBA +:102BC0000D1C08210020F3F777FA01688C718D80C5 +:102BD000B0BD0000F7B50E1C1021171C0020F3F744 +:102BE0003C0000E100006BFA0468051C201D062271 +:102BF0000099F2F7F4F96681A781281CFEBDF3B5B0 +:102C00000C1C0821002085B0F3F759FA061C076850 +:102C1000E068002802D00599012904D1059838718F +:102C200000203C003CE10000787156E0036801217F +:102C3000039320690290FCF717FB051C02983221D0 +:102C4000FCF712FB0022D243011C281C04ABF7F74F +:102C5000B9F8002804D1301CF3F702FA00263CE052 +:102C6000002D05D03C0078E100006878093807287D +:102C700001D8322028701C210020F3F726FA019099 +:102C80000568011C301CF3F740F9E068F3F70BFA14 +:102C9000A861E1680198F3F738F90020E060059831 +:102CA0008021084338713C00B4E100000120211C60 +:102CB00014317871281C0622F2F79AF9029A292019 +:102CC0000092005D0121E26A082800D00021281C42 +:102CD000039B02F09DFFA06B2861206C68617F3030 +:102CE00001D10F206861301C3C00F0E1000007B00A +:102CF000F0BD10B5041C08210020F3F7ECF90168C1 +:102D00000C7110BD00000148006870470000286188 +:102D100001000149086070470000E4650100021CE1 +:102D200001200006084380B52D213C002CE2000064 +:102D300005F0C0FA80BD000080B5012807D0F12859 +:102D400025D0F32827D1022002F0BCF980BD00294C +:102D50001AD0012903D0F229F8D188211CE01048AB +:102D60000178002905D140780128EFD13C0068E2C4 +:102D7000000000F016FA80BD0B4814300089FCF703 +:102D80005AFC011C01220F2005F09FF980BD04F0C0 +:102D900052FA80BD0020FAF732FE80BD02210F20DA +:102DA000F3F705F880BD84660100014800783C0017 +:102DB000A4E2000070470000746601000149002091 +:102DC00048607047EC650100F8B50E1C134D011CFE +:102DD000141C6822281C1F1C0C30F2F771F90F49D3 +:102DE0000020AC394860012129601921192C6E6737 +:102DF0003C00E0E2000000D3211C2981094914397C +:102E000088738F74C878012808D001210F2005F03D +:102E10009CF91920FCF715FCFBF799F80120F8BD87 +:102E200000009866010080B5012802D100F02FF85B +:102E300080BD3C001CE3000001211D20F2F7C0FF13 +:102E400080BD00007047000001200749000580B5E3 +:102E5000886000228021162005F04CF904F034FD32 +:102E60000249086180BD000000100700246D0100C8 +:102E7000064A80B53C0058E30000D16A814207D180 +:102E8000107F2423044958434018C068F2F735F8EE +:102E900080BDD4790100944601001D481CB500781E +:102EA00000282DD01C480068002829D01A4A1A4B47 +:102EB000043211681C693C0094E30000A14222D155 +:102EC00051685B6999421FD1164949689368C91ACC +:102ED000814219D2D06814490130D0600968884213 +:102EE0000CD90622FF216846F2F72EF9F3F7ACFC65 +:102EF000011C0023002268463C00D0E3000002F0E1 +:102F0000CEF901221D200A4905F0F7F81CBDF7F79C +:102F100088F904228118081CFCF727FBF6E71C75CA +:102F200001004475010028610100905C0100F05926 +:102F30000100A086010080B501683C000CE400009F +:102F4000002915D10079022812D1081CF7F780F862 +:102F500000280DD003F0F2FC0830418F002907D182 +:102F60008069002804D08079062801D1FCF718FB7D +:102F700080BD000001490020886270473C0048E4A1 +:102F8000000078690100B0B5054D041CA91DFFF7CC +:102F900014F80622291CA018F2F74BF8B0BD707C7B +:102FA0000100B0B5041C151CFFF707F80622291C08 +:102FB000A018F2F73EF8B0BD000080B50A303C0022 +:102FC00084E40000F7F7BCF90123002803D005488A +:102FD0000078012804D100220021002003F0C6FD62 +:102FE00080BD0000A079010080B5002300220021EF +:102FF000002003F0BBFD80BDB0B5054DAC790A1CC7 +:103000003C00C0E40000011C0123012003F0B1FDDD +:10301000AC71B0BD000020100700F8B5061C0C1CF8 +:10302000880702D5F6F747FA10E060070ED5174F6C +:10303000A320C05D154D102800D3154D04F059FC98 +:10304000B96F3C00FCE40000401A291A0120F6F791 +:10305000C1FAE0071149C00F48600CD00D4C443C48 +:10306000207803280FD1002E06D0F6F7F9F9011CBD +:103070000120F6F7AFFAF8BD09490120F6F7AAFAE0 +:10308000012020703C0038E50000F7E70121301CEA +:10309000F6F789FAF2E7A60E0000A46C0100C40955 +:1030A0000000B057010040420F0080B5062804DB45 +:1030B0000521FF20F2F79FFE80BD034AC00011509A +:1030C0000121801801713C0074E5000080BD000002 +:1030D0009C5A01000148806870470000D0600100E0 +:1030E000B0B5084C251D281C216800F0F1FE002811 +:1030F00003D101210448F2F7CFFA281C216800F01F +:10310000FBFEB0BDC06001003C00B0E500002C102B +:103110000700B0B5104D0C1CA868002802D104F0BF +:10312000F4FB2860201C04F038FB0121032003F08D +:10313000C4FE04F0F0FBA86800280BD104F0E5FB06 +:103140002968001B401A696840183C00ECE5000043 +:103150004108401828600120A860B0BDD06001007F +:10316000F8B51F4E0024B068002802D104F0D0FB4F +:10317000706005F061F804F08FFB051CF9F766FE3E +:103180003168184A41181268E80B002A3C0028E60A +:10319000000000D1A80A401885421FD9144F2D1AEB +:1031A000381C2030817900AB1970C079587005F057 +:1031B0006EF8002803D102218F20F2F728FE291C87 +:1031C0000C48F268F8F709FC002804D0011C3C0008 +:1031D00064E60000281CFFF7A5FF012400AB188857 +:1031E000F88405F047F8201CF8BD0000D06001000D +:1031F000F474010000100700891301000149012047 +:10320000C8607047D0600100064880B5006801289A +:103210003C00A0E6000007D10448AC38016903482F +:1032200000F079FEF3F72BFA80BD98660100346355 +:10323000010080B542788168007903F0DEFF002844 +:1032400001D1F5F7B6F980BD00001FB504F069FBA8 +:10325000F6F73C00DCE6000091FF164C022803D193 +:10326000FFF7DCFD042802D3002020701FBDFBF710 +:10327000F7FC0028FAD1606A0028F7D02078800790 +:10328000F4D40921162004F093FF012020700B4C88 +:10329000094902903C0018E700000194009104F0F5 +:1032A00046FB001903906846FDF7B5FB0022162186 +:1032B000842005F03EF8DCE70000606C010061ED61 +:1032C000000040420F00234870B580789CB0012870 +:1032D0003ED1204C09A83C0054E70000803C611C12 +:1032E000FEF792FE042011AD6872A06F19A9189024 +:1032F0007C20005D012608711D20005D002806D09D +:1033000010961296FCF7F6FA2872207A1190F3F7CD +:10331000CDFF6A21085340343C0090E700000022B2 +:1033200001A906A8F6F7CDFF211C0020FBF7CBFB77 +:1033300006A9FBF7C8FB01A9FBF7C5FB0A49096809 +:10334000002907D0331C0A226946FBF7DAFB009AF2 +:10335000072191700C9009A8FEF73C00CCE7000013 +:103360007BFE1CB070BD000084660100E4620100B9 +:10337000F8B5041CC068FF22016812020E1C087B0D +:10338000497B090211400843051C311C0622A01884 +:10339000F1F77CFE0622B118201CF1F73C0008E88A +:1033A000000077FE280A290208430004032149028D +:1033B000000C884208D2E06801890E390181E0687A +:1033C00001680E310160F8BD0026201C103003F0AA +:1033D000E8FA218B002905D1E17D00290BD03C00C2 +:1033E00044E800008069800708D4E068012601896C +:1033F00002390181E0680168023106E0E068018974 +:1034000006390181E0680168063101601449002035 +:103410000B1F42009A5AAA4202D11149063102E01A +:103420003C0080E8000001300228F5D3E068062265 +:103430000068F1F734FE012ECBD1812000AB18805B +:10344000E17D208B49030843310308430004000C4D +:10345000010A000208435880E06819880068C180AA +:1034600059883C00BCE800000181B5E76A460100CC +:10347000B0B50D1C01890622083101810468044998 +:10348000083C0460201CF1F70DFEE580B0BD000093 +:103490006A460100F8B5002901D0002801D10020BA +:1034A000F8BD09043C00F8E80000090CF2F743FFFE +:1034B000061C051C002720E02C892968022C01D25B +:1034C000022001E048780230844202DD241A091803 +:1034D000F4E7844210D0011B0A040104090C120C09 +:1034E000281CF2F79EFE3C0034E90000002806D1BB +:1034F000E868F2F72DFEEF602889001B2881ED684F +:10350000002DDCD1301CD1E7F8B58568041C80693A +:103510002E1C00280DD07168F2F7F6FDA069F2F7B5 +:1035200017FE06E00021C1603C0070E90000F16078 +:10353000A08D36680138A085F0680028F5D1306884 +:10354000A060A08D01380004000CA08502D0201CD2 +:10355000F9F739F82A4F2A480068002803D00621D5 +:103560006868FAF77CFD686800683C00ACE9000018 +:10357000817800292BD1C178002930D1218E0139E1 +:103580002186FBF715F8A16A081AA062E169884252 +:1035900003D904210220F2F767FCB86800281ED086 +:1035A0001A49208E49680C22521A90423C00E8E9E0 +:1035B000000008D319239B01AF2292015943A06A4E +:1035C000511A88420ED200210C2003F0ACFC0020DE +:1035D000B86007E0012905D1C078172802D1A08E74 +:1035E0000138A0862A1D06CAE0686369F1F73C002D +:1035F00024EA0000DCFCB54201D02D68B4E7A08DC0 +:10360000002803D10548B96900F09EFCF8BD000010 +:10361000FC5A0100CC5C010018570100C460010095 +:103620008907074BCA0F80B5197C002906D0814352 +:103630003C0060EA0000197403D10721152004F052 +:10364000A2FE80BD00007869010080B5011C012048 +:10365000FFF7E9FF80BD80B5011C0220FFF7E3FF03 +:1036600080BDB0B51B4C6068FCF72FFF20680025BB +:1036700040683C009CEA0000002803D0FDF718FCDD +:10368000206845606068FCF7C5FE1448616800F07A +:1036900061FCA07A012805D0022803D020680068C8 +:1036A00000F0DEF801211F2004F0B2FD00211F20F0 +:1036B00004F0AEFD3C00D8EA000002211F2004F017 +:1036C000AAFDA57221682C20405C8968F1F776FC80 +:1036D0006068FCF7E4FE20680562B0BD0000147A63 +:1036E00001003463010004490A68C868926A002A2C +:1036F00001D0096908183C0014EB00007047000075 +:10370000147A0100B0B5134C051CA07A01380228C8 +:1037100019D801211F2004F081FD2068FC23011C21 +:103720002030027B1A400273002D0FD001231A4370 +:103730000273A07A032807D13C0050EB000001205F +:1037400001F0E7FD002801D1FFF797FFB0BD4B6204 +:10375000B0BD022111430173F6E7147A010010B5E0 +:10376000041C0A30F6F743FE00280CD022880A49D0 +:103770000B7A9004C00F002B06D13C008CEB0000AC +:103780001206920E202A00D10120C86010BD002828 +:10379000FCD100222421802004F004FE10BD000092 +:1037A000047A010080B5021C1F21802004F0FAFD7C +:1037B00080BD0000F8B51D4E041C30683C00C8EB0D +:1037C00000001D1C4768201CF1F70AFCFBF787FA74 +:1037D000002804D0281CF2F72AFB002828D12088D2 +:1037E000400525D430680068FEF759F9002803D158 +:1037F000FDF789FAF1F7EDFB3068002540683C00E1 +:1038000004EC0000002803D0FDF764FB306845603D +:1038100020880009000703D104F0C8F86188451822 +:1038200030684561816A0131816220888004C10F5E +:103830000248F8F7CDFFF8BD147A0100B1EB0000A3 +:103840003C0040EC0000B0B50E4C051C6068FCF775 +:10385000F6FD0C48616800F092FB0021242004F082 +:10386000ECFC0022D2438021242004F0B8FC00208C +:10387000E0602072206801682806000EF1F7B0FBB6 +:10388000B0BD3C007CEC0000047A01003463010010 +:1038900010B5041CC068F2F785FC201CF2F7B0FDDF +:1038A00010BD000070B51C4E051CB07A2C1C4034B5 +:1038B000022826D1A08B3189884222D13068416A02 +:1038C000002908D03C00B8EC00002030007BC00785 +:1038D00004D5012001F02FFD002818D160780028C0 +:1038E00009D1306802232030027B0D495208520072 +:1038F0001A43027301E0FF21F53101221F2004F079 +:103900006EFC0320B0723C00F4EC000002E0281CC6 +:10391000FFF7C4FF6078002803D1291C012003F0C1 +:1039200029FB70BD147A010050C30000B0B5041C1F +:103930006034E0790E4D00280AD10220A872286870 +:103940004068002804D10B483C0030ED0000FDF732 +:10395000D0FA2968486004F038F82968C861FFF790 +:10396000E0FE29680969081A03F06FFF002801D0FA +:10397000E079A071B0BD147A0100C1EB0000F8B588 +:10398000041C002604F021F8051C3C006CED00002E +:10399000224800270770A10704D0E107C90F016280 +:1039A000C5610126416B002934D1002E32D0061C9E +:1039B000F9F744FF316B1A4B411AA20712D5DA68A6 +:1039C000002A08DD91421A6802DA14093C00A8EDC9 +:1039D0000000A21806E01409121B03E00A4302D1FA +:1039E0001A6852001A60B7630AE0B26B0132B26320 +:1039F000022A1A6801DD940800E01409121B1A60FB +:103A0000D9603063F56218680849884201D93C00E2 +:103A1000E4ED0000196003E0642801D2642018601E +:103A2000F5F7FCFDF8BD0000606C0100B057010027 +:103A300020A10700FEB5041C0020504D0021686144 +:103A40002069FBF7B3FC071C20690321FBF7AEFCE0 +:103A50003C0020EE0000002803D0807829788842BE +:103A600063D1474D201C1430391C061C2A7802F003 +:103A70005AFA002859D1E068056841480195583044 +:103A80000290FBF76AFF3E4D193500280BD0281C29 +:103A9000FBF73C005CEE000055FF00281ED1311CF6 +:103AA000281CFBF765FF002842D017E0281CFBF715 +:103AB00049FF002806D0391C0298FBF763FF002855 +:103AC00036D00BE0391C0298FBF75CFF00282FD0A2 +:103AD000311C281C3C0098EE0000FBF74CFF00282E +:103AE00029D0301CF6F7ADFC294A1832117C002988 +:103AF00004D0516A002901D000281CD1906A002806 +:103B00003BD01378019D01216D8901202B409B073B +:103B100011D0A36B1E4E3C00D4EE00001D1C7F355F +:103B20009836002D14D0558A002D08D15569AB4226 +:103B30000FDA0020174D01236B610AE029E0F578C8 +:103B4000022D06D1144F55693F68ED19AB4200DADA +:103B50000020236C1D1C7F353C0010EF000010D0AE +:103B6000558A002D03D19569AB420AD208E0F57859 +:103B7000022D06D10B4E95693668AD19AB4200D2C5 +:103B80000021084308D0106A002801D0F1F74BFA51 +:103B90000021201C01F0B9F9FEBD3C004CEF0000F3 +:103BA000EC650100C4670100CC6701003EB5056A01 +:103BB000041CC068F2F734FBE169F2F757FA201CE5 +:103BC0004030C18B0431C1832B6910499879062894 +:103BD0000AD1988801910294009060693C0088EFB6 +:103BE00000001B680168E0680322C0680AE0022840 +:103BF0000BD11020009001910294E068A369C06885 +:103C000000220021F7F70FFB3EBDF2F7A6F9FBE714 +:103C10000000BDEF000080B5D1685069C9683C0064 +:103C2000C4EF0000C160D168C860111C4031CB8B6B +:103C300000891818C8831068002802D0FFF7BCFF5D +:103C400080BD0348FBF7CCF8006AFEF7F5F980BDAC +:103C5000A06A0100F8B5061C0A2430070109A00774 +:103C60003C0000F0000001430F1C0A4D2F6004F0DF +:103C7000FAFEAD682801000FB04205D0013CF4D235 +:103C800001219B20F2F741F92802000A082E01D1F8 +:103C900031050843F8BD600007000122D20580B558 +:103CA00000213C003CF00000042004F0DDFC0F206B +:103CB000FFF7D6FF0F2109040840000C80BD00006B +:103CC00080B50548FDF74AF90448FDF77BF804483C +:103CD000FDF76CF880BD000089340100ED24000080 +:103CE000111C00003C0078F0000080B50248F3F79A +:103CF0002AFC80BD0000D124000080B5F2F753F902 +:103D000080BD80B50021002001F051FE032002F0AB +:103D100046FF80BD0000064880B5C169002906D174 +:103D2000016A002903D13C00B4F00000816B034814 +:103D300000F05EF980BD0000C46901003463010039 +:103D400010B5044C206AFCF7B3FB0348216A00F06D +:103D50004FF910BD1C75010034630100B0B50D4C66 +:103D6000207C002802D001213C00F0F00000FDF78B +:103D700086F900252570A068012803D10020A560E0 +:103D800001F08FF8A078012805D103489838006920 +:103D9000FCF7EFFBA570B0BD00008466010080B5A4 +:103DA0000021012001F009FE80BD3C002CF1000043 +:103DB00038B569460025F8F7B7FE041C01D101208B +:103DC00038BDA068002804D00099A131082004F073 +:103DD00073FA1C21201CF1F7A3F9281CF0E700005E +:103DE000FEB5071C4C233949584344183C0068F180 +:103DF0000000251C4035287A37494876211C30318F +:103E000002910C23C856421C0A73497B884246DA49 +:103E10003248007880073ED500200190F6F7AFFACF +:103E200000282ED0AC210958002901D0E4303C00F4 +:103E3000A4F1000000E0CC30061C4068002825D02A +:103E40000299087B012811D1201C2E302978F6F721 +:103E5000EDF9716803E07218127A824203D9FF31DA +:103E60000906090EF7D1A97001200190231C3E33E9 +:103E70003C00E0F100001A1D301C00970199F8F792 +:103E800058FA002811D0A8788019007A00E00020A4 +:103E9000687068780121FBF7E0FD6060381C01F074 +:103EA00014FE381C01F0A5FBFEBD0299087BFF3013 +:103EB00048733C001CF20000381CFCF719FC03F0AE +:103EC000C3FD061CFBF78EFE41007618687861681A +:103ED000FBF76AFE3118208D3B1C054A03F012FEE9 +:103EE000E5E7000058E30100308007001D75010080 +:103EF000D54E00003C0058F20000031C044880B579 +:103F000002792030034900F030F880BD0000AC7C1D +:103F10000100C4670100031C044880B5C278383032 +:103F2000034900F022F880BD0000AC7C0100C867A6 +:103F30000100031C04483C0094F2000080B5827923 +:103F40005030034900F014F880BD0000AC7C010043 +:103F5000CC670100031C044880B5427968300349EE +:103F600000F006F880BD0000AC7C0100D0670100C5 +:103F700010B5002484800B603C00D0F20000191CB6 +:103F8000514301601906091610220630F1F79FF916 +:103F900010BDB0B5064D0024AC60EC60EC612C6245 +:103FA00002F0F1FC00F00DF8EC622C70B0BD447D25 +:103FB000010080B580210148F1F73C000CF30000BE +:103FC000C7F880BD04660100F8B5074F002400263D +:103FD00018206043C519EE6003F042FD103501342E +:103FE000022C41C5F4DBF8BDB87D0100002303605D +:103FF000044B002900D1191C4160002A3C0048F301 +:10400000000000D11A1C82607047BD75000010B519 +:10401000074C206801302060202803D958215820FF +:10402000F1F79DFF216801200139884010BD605BD8 +:104030000100B0B50D1C041C2168002000293C00C3 +:1040400084F300000AD0A943216007D1A068F1F7EA +:1040500023F8002802D1216829432160B0BD000067 +:10406000B0B50D1C041C2168002029432160A94221 +:1040700007D16068F1F710F8002802D12168A94340 +:104080003C00C0F300002160B0BD1A4BB0B59A6A85 +:1040900000280BD0002A07DBB8242458013CA41ABE +:1040A0000019B030007B02E00E2000E00D205D6AB8 +:1040B000124C002D01D0207800E0205CFF24A834B1 +:1040C000C4403C00FCF300009C60F524C4409C61AB +:1040D000FD24C440DC61FF242934C4405C61FF241A +:1040E0005334C44000200C3311C3002905D0002AEA +:1040F00003DC0221504200F065FBB0BDAC7E010044 +:10410000B85201003C0038F4000010B5134C1348BD +:10411000211CFF3169310EC90EC0211CFF31242240 +:1041200075310F48F1F751F8211CFF313C229931CC +:104130000D48F1F7A6F8FCF7A2FF211CFF31102271 +:10414000D5310948F1F73C0074F4000041F8211C16 +:10415000FF312822E5310748F1F796F810BD00003D +:1041600040630100008007000C80070030800700DA +:1041700080800700A0800700F8B5002859D004F01F +:104180004BF9F8F7B3FB00223C00B0F4000001212A +:10419000132004F07CF92A492948496C0160002168 +:1041A0002948C9434160264C1434616C8160A16C7C +:1041B000C1600020254D022601016E500A194F19D9 +:1041C000503204370ECA013008283C00ECF40000DD +:1041D0000EC7F4DB1422211CCC311E48F1F75AF82B +:1041E0001D4881780909090181700021C170417061 +:1041F000211CE0310A78027049784170211CE831B5 +:1042000030220830F1F746F8211CFF313C0028F538 +:104210000000502219311248F1F73FF88320800046 +:10422000142221181048F1F738F811204001842297 +:1042300021180D48F1F731F8FFF773FF201CF1F753 +:1042400028FDF8BDFFF76DFFFBE7082007003C00E5 +:1042500064F500002C6301004020070000300700D7 +:104260000040070000500700006007001000070032 +:1042700000900700F8B5051C1848C068002825D034 +:10428000164E013674783078271A7919201CF1F708 +:104290003C00A0F500004BF80090291C201CF1F711 +:1042A000B2F8C119201CF1F742F8601A3070701E84 +:1042B000806800280DD05336F4780099201CF1F75F +:1042C000A2F8B178611A4118201CF1F79CF8601A25 +:1042D000B0703C00DCF5000003485C300169C26846 +:1042E00069435118C160F8BD447D0100B0B50C4D63 +:1042F000E868296940187D2109014418201C03F051 +:104300000BFB00280AD003F0CFFB011B2869F1F753 +:104310007DF801303C0018F600000004000CFFF7A7 +:10432000B2FFB0BD0000A07D010070B5104C606808 +:104330008025A84360602068284320600D4E301C13 +:104340001030F3F7C8FC002803D107218520F1F7CE +:104350002AFE084800213C0054F6000080684163B2 +:10436000C06C10307061012030612068A84320606B +:1043700070BD0000F400070000300700247E01003B +:10438000011C0020052980B509D202A35B5C5B00FB +:104390009F440000030303033C0090F60000030069 +:1043A000FFF7CFFC80BD0122920280B500210720DB +:1043B00004F0ABF980BD80B540220021002004F05C +:1043C000A4F903220021002004F09FF980BD70B5FC +:1043D0000E1C051C141C08280ED13C00CCF6000055 +:1043E00000F000FC0E2801D1142000E01020E103B1 +:1043F00000D50138C0060A49C00E887108E0092DB1 +:1044000006D1A00401D5002000E00120F3F7B0F9A7 +:104410003440211C321C281C04F07AF93C0008F7B7 +:10442000000070BD00000080070070B50024132953 +:1044300011D8002801D1084E0825012801D1074EC6 +:10444000092500F078FA002805D0021C311C281C30 +:10445000FFF7C3FF0124201C70BDF8FF07003C00DC +:1044600044F70000FFFF00000122D20280B50021C6 +:10447000072004F053F980BD0F22120407214904DC +:1044800080B5092004F04AF980BD000080B5002104 +:10449000042004F01BFC4021002004F017FC044918 +:1044A0003C0080F700000020886002480969203045 +:1044B000FFF709FE80BD64730100B0B560210020E4 +:1044C00004F007FC114D002400220420295D04F0B3 +:1044D00028F90C2003F09BFB01342406240E052C44 +:1044E000F2D33C00BCF700000F2200210A2004F0A8 +:1044F0001BF96121002004F0EFFB064901208860D0 +:10450000044809692030FFF7CDFDFF202D30B0BDF4 +:10451000A858010064730100F8B5061C1248C67063 +:104520000120FFF73C00F8F70000FDFB0127BF0268 +:10453000041CB843011C012004F0D1FB0320FFF749 +:10454000F2FB051CB843011C032004F0C8FB301C1F +:1045500000F09FF900F057F8211C012004F0BFFB88 +:10456000291C032004F03C0034F80000BBFB0020B1 +:10457000F8BD00006473010080B5002240210020D6 +:1045800004F0D8F880BD000070B5051C0124092096 +:10459000FFF7CCFB0F210904884303218904E204BF +:1045A000052D124E20D202A33C0070F800005B5D86 +:1045B0005B009F44000006090C100300032109045E +:1045C0000CE00121090409E00121490406E0F36837 +:1045D000042B05D902E0F368042B01D8014301E064 +:1045E0001043011C092004F080FB3C00ACF80000E3 +:1045F000201C70BD0024FBE7647301000121C90584 +:10460000002880B502D00A1C002100E0002204200E +:1046100004F096F880BD0000F0B591B0002640216E +:1046200001A8F0F7DDFD2A4FB87901223C00E8F837 +:104630000000520300900021062004F084F860215D +:10464000002004F058FB6121002004F054FB0820F6 +:1046500003F0EFFA00240F20FFF771FB4005050F70 +:10466000A80001A9095801AA013101340C2C3C0011 +:1046700024F900001150F1D30020810001AA515803 +:10468000B14201D90E1C051C01301028F5D30620BB +:10469000FFF758FB0F2149028843690208430121B3 +:1046A00049030143062004F029FB0D488468643463 +:1046B0003C0060F9000008E0201C03F05AF90028D3 +:1046C00003D001219520F1F798FC0F20FFF73DFB67 +:1046D0000004F1D5872003F0B2FA0098B87111B048 +:1046E000F0BD201007000001070010B5174C6169EC +:1046F00000293C009CF9000004D00A21132003F09B +:1047000047FE10BD011C1248012900780CD0112968 +:10471000F7D1052803D101211320F1F771FC20788E +:104720000728EED102210AE0052807D006280AD082 +:104730000728F7D03C00D8F900000828E4D1002071 +:1047400005E001211320F1F75EFC10BD012002F00D +:104750006CFD10BD00007C7801000D4980B5097822 +:10476000032901D100280BD0072901D1002807D047 +:10477000022901D100283C0014FA000003D10529C8 +:1047800009D1002807D00020FCF728FD00221321C2 +:10479000112003F0C1FE80BD7C78010080B50622A7 +:1047A0000821002003F0DEFF80BD0000074880B52F +:1047B0004069002801D1F1F73C0050FA000033FFB6 +:1047C0000549054A0868506148689061012080BD2C +:1047D000000064730100B058010010000700074892 +:1047E00080B54069002801D1F1F71DFF0549054A50 +:1047F000086890614868506101203C008CFA000014 +:1048000080BD000064730100B05801001000070073 +:1048100011B500AB597814480123C056002209187D +:104820000B061B161321132B02DD00AB597007E09A +:10483000002B02DA00AB5A7002E01C1C3C00C8FAE4 +:10484000000000AB5C7000AB1B7818180006001667 +:10485000132802DD00AB197006E0002802DA00AB75 +:104860001A7001E000AB1870009818BD0000647366 +:10487000010038B50C1C154900AB496813253C00F4 +:1048800004FB00000091597809185970197808182C +:10489000187019881048022CC18001D0002C0BD14F +:1048A00000AB1878132800D91D7000AB19780020D0 +:1048B000FFF7EEFD022C01D0012C09D100AB587896 +:1048C0003C0040FB0000132800D95D7000AB597814 +:1048D0000120FFF7E0FD38BD000064730100A0581F +:1048E000010070470000B0B5041C0E28134D04D021 +:1048F0001249A00000194D3945180620FFF73DFA6E +:104900000F493C007CFB0000E02209191039C97BEB +:104910009043490111400143062004F00DFA291C7F +:104920000520094A03F030FF08481F2200191038FB +:10493000C07BC104D204082003F026FFB0BD0000F4 +:10494000B40900003C00B8FB000014450100FF0F53 +:104950000000C05801007047000080B506490028DB +:1049600001D1086880BD012801D1486880BDF1F7F8 +:1049700090FB002080BD7C730100014840687047B7 +:104980000000A05801003C00F4FB00000448012393 +:104990000449C056C95640180004000C7047000076 +:1049A000A0580100A258010001484068704700006B +:1049B00064730100F8B5051C0E1C00F055F9041CC9 +:1049C00000F058F900282CD03C0030FC0000B30067 +:1049D000601E002D1C4E19491A4A06D10B250E2CBB +:1049E00000D1194AD258085608E0012D1CD19A1856 +:1049F0000436081808250E23126DC056071C4743BD +:104A0000FB00DF19124B3F2158433C006CFC0000B7 +:104A1000114BA9400C1C3818C0181440EC40C011B0 +:104A200060431B0AC018801203D1012004E000205B +:104A3000F8BD3F2800DD3F203060A84008408A4391 +:104A40001043F5E7CC590100DC5801003C00A8FCFC +:104A500000007C7301007C5901000606000026005E +:104A60000200034808B5C08800AB1880009808BD54 +:104A70000000A0580100B0B50B4D094C0E206C6031 +:104A8000FFF78DF90949021CC8600106090E3C00B8 +:104A9000E4FC0000133A022A02D91738042800D88F +:104AA0000021081C6C60B0BD041802006000070003 +:104AB000647301000A4898B502781321142A00D3C0 +:104AC00001704278142A00D34170064C6068FFF7E9 +:104AD0003C0020FD0000BDFE009000AB1888E08087 +:104AE00000F075FF98BDA4580100A05801000348CC +:104AF00080B541780120FFF7E6FC80BD0000A65894 +:104B00000100034880B501780020FFF7DCFC80BD80 +:104B100000003C005CFD0000A6580100B0B5054D4A +:104B20000024201CFFF744F90134102C01C5F8D3F0 +:104B3000B0BD0000D4440100044980B58870044928 +:104B400080000958072004F00FF980BD647301004C +:104B5000D05801003C0098FD0000B0B53F24021C75 +:104B6000002A01D108200B23012A01D109200823A2 +:104B7000251C9D40002900D101213F2900D9211C7D +:104B800099400A1C291CFFF77CFCB0BD000091B5C0 +:104B9000124900AB1A783C00D4FD00000878114C93 +:104BA00080180006000E207049785A788918090686 +:104BB000090E13221328617000D92270132900D91D +:104BC0006270084908480639C98881802178002028 +:104BD000FFF782FC617801203C0010FE0000FFF727 +:104BE0007EFC98BD0000A4580100A6580100647323 +:104BF000010070B51D4D041C28780E1C032803D13C +:104C000002211120F1F735FA201C00F04EF800289F +:104C100025D0287801280AD168683C004CFE0000A5 +:104C2000002807D00121112003F0EEFB0120696864 +:104C3000F0F7BDFA6C706E60201CFFF7C1FC041C1D +:104C400000F0D4FE002C02D06868002802D1F6F7EC +:104C5000D9F870BD012028700122211C3C0088FE7B +:104C60000000112003F09FFB70BD02211120F1F71D +:104C700006FA70BD00009C73010080B5012805D1C3 +:104C8000002904D0012901D1F6F7BFF880BD0549FC +:104C90000878032802D00020087080BD03213C0062 +:104CA000C4FE00001120F1F7EDF980BD9C730100F6 +:104CB00001484078704700009C730100011C0139D5 +:104CC00001200E2900D300207047000010B5134CBE +:104CD000207801280ED1606800280DD00121112014 +:104CE0003C0000FF000003F098FB01206168F0F732 +:104CF00067FA00206060207001E003280ED00021D8 +:104D0000112003F08AFBFFF724FCFFF7C0FB0549E5 +:104D1000087B40084000087303202070012010BD6C +:104D200000003C003CFF00009C730100880007006D +:104D300010B50D4C2078032813D1002020700B48AB +:104D4000017B012211430173FFF770FCFFF718FC90 +:104D5000002806D002212170011C0022112003F03E +:104D60002BFB01203C0078FF000010BD00009C736D +:104D700001008800070080B50549002804D0002004 +:104D8000086003F05AFA80BD0120086080BD805A97 +:104D90000100FEB5051C8035041CA8682979066849 +:104DA000201CA03002293C00B4FF00001CD169790E +:104DB000082901D00C2917D101216162A96809686D +:104DC000098B0182A9690191008AC00605D5606836 +:104DD0000088400501D4012000E000200290052059 +:104DE00001A902F0B7F902E03C00F0FF0000002149 +:104DF00061620182A9681A230A89676A181C002F58 +:104E000000D11820101A0881A8680168626A002A77 +:104E100000D11823C9180160A86841C43088083C33 +:104E2000400403D5201CF7F7BCF93C002C0001001E +:104E3000FEBD0021E1613079C00703D4201CF7F7E3 +:104E400091FEF5E7201CF7F743FFF1E7F7B5051CE6 +:104E50000A30061CF5F7A4FA144F041C3988F2F73F +:104E600083FE328878680280728802303C006800D5 +:104E700001000280B18841806988029A201CFAF7FB +:104E8000CEFE0B4D08356880FBF72BFE0121090390 +:104E90000028288801D0884300E00843288004487F +:104EA000002200211430F2F732FE201CFCF73C00F7 +:104EB000A400010085FAFEBD247B010010B5134C4F +:104EC0001149201CFF3069300EC90EC0201CFF3074 +:104ED000242275300E49F0F717FA201CFF303C22CF +:104EE00099300C49F0F76CFA201CFF301022D530B5 +:104EF0003C00E00001000949F0F709FA201CFF30EE +:104F00002822E5300749F0F75EFA10BD0000008066 +:104F10000700406301000C8007003080070080809C +:104F20000700A0800700B0B500283FD021484168A5 +:104F3000214C3C001C0101006160C168E160016915 +:104F40002161806AA0621E491C48096814384164C6 +:104F50001C48251C3C350FC80FC5201C80224C3036 +:104F60001949F0F733FA1422201CCC301749F0F716 +:104F70002DFA38223C0058010100201CE030154970 +:104F8000F0F727FA201CFF30502219301349F0F7B0 +:104F900020FA83208000142220181049F0F719FA13 +:104FA00011204001842220180E49F0F712FAFFF771 +:104FB0008EFFF8F794FB3C0094010100B0BDFFF7B1 +:104FC00089FFB0BD00100700406301000820070002 +:104FD0004020070000300700004007000050070095 +:104FE0000060070010000700009007000C4980B522 +:104FF000012048600A4814383C00D00101000078C4 +:10500000012804D008489438406F002803D00020BD +:1050100000F01FF880BD08680028FBD00348F2F7B5 +:105020007AFE80BD000098660100FFFF000080B599 +:10503000002809D1F2210F2003F03C000C020100EE +:1050400013FA00220F21F12003F0CCFA80BD0120D9 +:10505000F8F76AFE80BD000010B5041C032000F0C4 +:10506000C9F900210F2003F0FFF9FFF765F80B499C +:1050700000204874FBF7E6FA094800683C00480243 +:105080000100002803DC02214042FFF752FC0448E3 +:1050900014300068002802D0201CF2F742FE10BD38 +:1050A000000084660100D47E0100064980B50978BD +:1050B000042905D0052903D0062901D007293C0081 +:1050C0008402010001D1FEF7BDFD80BD74660100C0 +:1050D00010B5094CE06800280BD107482C38008A2D +:1050E000C00704D5002101206268F9F7C9FA012040 +:1050F000E060012010BD0000F46E01008CB5021CC0 +:105100003C00C0020100081C111CFDF728FF0190A3 +:10511000002805D0172000AB18806846FDF7FFF87F +:105120008CBDF1B52E4CAEB0002525632069012859 +:1051300003D101A801F0A1F84EE00126284F267006 +:10514000503F3C00FC020100B869F8F74FF82549D0 +:105150002C3900281DD0E06A01281AD1088A0F1CBA +:10516000800704D5002102206268F9F78FFA388A97 +:10517000000707D5E068012804D1002108206268F3 +:10518000F9F784FA3C00380301000022182182203C +:10519000266303F036FA25E0088A0E1C800704D542 +:1051A000002102206268F9F774FA308A000707D5F7 +:1051B000E068012804D1002108206268F9F769FA43 +:1051C000308A400704D53C0074030100002200210E +:1051D0000420F9F761FA2E98012804D01E950921C0 +:1051E0001BA8FFF797FFE562BD61E5602FB0F0BD3A +:1051F000F46E010080B50720FEF7A0FE00210F200D +:1052000003F044F90C4801783C00B0030100002988 +:105210000FD00221017088380078002804D0074997 +:105220001031487C01304874F2220F20054903F008 +:10523000FCF800220F21F32003F0E9F980BD746629 +:10524000010080841E0010B5041C3C00EC0301002A +:10525000F2210F2003F020F9012C0AD10848084957 +:1052600000681439002805D0C878022802D1F7F761 +:10527000AFFA10BD002048700520FEF765FE10BD96 +:1052800098660100F8B5284E3021351C3C002804F2 +:10529000010060352889895D884203D10020FFF72D +:1052A000F6FEF8BD341C70340121217041188019BC +:1052B0003030298140781D4F183F3870002808D0C1 +:1052C0000021FBF7C2F9002807D12078FFF73C0046 +:1052D000640401009BFFE7E701210F20F0F71AFFAC +:1052E00014480121803081703869FBF755FA20732A +:1052F00000210F2003F0D6F8707A01280ED10E4855 +:105300000068002804D0387802F0DAFA002805D0C6 +:105310003C00A0040100307F60730320207071897D +:1053200005E005202070A888FAF73BFB011C00224D +:105330000F2003F086F8BAE7000004660100E4627B +:10534000010070B5041C02F06CFC364B191CA03136 +:105350000A783C00DC040100102A02D20A79102AE3 +:1053600001D3012500E00025304ECA798036012C9A +:1053700012D00025022C2ED0042C3CD15C6B002CCA +:1053800039D19C6F001B2A4CA04234D9B268986A6C +:10539000824231D03C00180501004D7234E0B06803 +:1053A0009C6A0222A04221D1586B00281ED1002DF8 +:1053B0001CD1487A192820D03468986F6400001BEB +:1053C00074680019FF301C4C3930A04216D248795D +:1053D0008C79001930283C005405010011D31022AB +:1053E0000FE05C6B012C06D1B0689A6A904200D144 +:1053F0004D72002205E09C6F001B124CA04200D3AE +:10540000202206E04A7A192A01D201324A72202269 +:10541000B06030689B6F98423C009005010004D159 +:10542000002A00D148794A7106E0102A04D370603E +:10543000336048798871F6E7CA7170BD0000A46CCA +:105440000100A304000071020000350C00000548B3 +:1054500080B5817B002905D000213C00CC050100EE +:10546000817303490F2001F00FFF80BD74660100B6 +:10547000E9030100F8B5041C02F0E2FB051C384EFC +:10548000201C3749341CA0341022443901282CD068 +:1054900004284ED1371C743609CE26783C00080605 +:1054A0000100C01A202E04D1304EB04201D900268E +:1054B0004E613E1C3F6C002F48D1776C002F45D1C8 +:1054C000B76A002F3DD0776B002F3AD0274FB842F4 +:1054D00037D26078102806D3F06F181A244B3C009E +:1054E00044060100984201D2E270F5664869062838 +:1054F0002FD201302CE02078202801D106234B61E7 +:1055000002232371B36A002B19D04969032916D9E4 +:10551000716B736D594012D0E178102910D3617806 +:105520003C0080060100331C10290CD3D96F691A86 +:10553000134DA94207D2586C002802D0986C00285D +:1055400000D12271F8BD0228FCD12270FAE7486927 +:10555000002801D0013848610A49F06E401802F075 +:10556000B0FA3C00BC0601000028EED00120E0703B +:1055700006482818F066E8E7A46C0100E204000081 +:105580001A06000053070000002D3101005A620284 +:1055900080B541680979C90713D5C16900290DD0C3 +:1055A000897902293C00F80601000AD10821018608 +:1055B000011C38318162021C06480449F9F7FDFCE0 +:1055C00080BDF7F7DCFB80BDF7F723FB80BDB97129 +:1055D0000000A06A010010B50024002803D002F0EA +:1055E000E8FE002817D03C00340701000C4C0120D5 +:1055F000A0722068002141620A490268C9786032BD +:105600009171218901312181006840308183FBF74C +:1056100031FC20680068FCF7A1F90124201C10BDB2 +:10562000147A01000E6101003C00700701007FB593 +:10563000061C1E481D1C438802881C21002090B0B7 +:10564000F0F745FF03900468FF2101312180082015 +:1056500060800620207104206071C001002D00D1FF +:10566000081CE08001A80230311C3C00AC0701009E +:10567000051CFAF75FFA10496846FAF75BFA201C36 +:1056800008306946FAF756FA291C201C1230FAF73E +:1056900051FA10AB9888002201212083D8886083BA +:1056A0001889E081588920826846F9F73C00E807AC +:1056B000010017FF14B070BD0000146E01001261EC +:1056C0000100B0B5041C1848251C0078603580071F +:1056D000002808DAE879002805D0F4F770FF011CEB +:1056E000201C00F078F929882E20005DF2F73C009C +:1056F000240801009FFAE87900280BD1201C4030D3 +:10570000018B22691180418B22695180808B216934 +:10571000C88207E0012805D1206901220188D20250 +:10572000114301806A7AE0680249F2F753FAB0BD8A +:105730003C00600801001D750100D14F000090B5CC +:10574000041C38230C495843431885B000200A49EB +:105750000290181C012203910949049230304278CA +:1057600009880192009101785A6B0C33201CFBF7D9 +:105770007CF83C009C08010005B090BDD4E4010019 +:105780005D4E0000487B010090B585B0031C0020F1 +:1057900002900A49181C0022049260300391C279D9 +:1057A0000188019200915A6ADC682033997B407A23 +:1057B000231CFBF73C00D80801005DF805B090BD44 +:1057C00000000D4F0000074980B5886A002808D105 +:1057D00001208862F0F7AFFC011C03480022F2F7B9 +:1057E000B8FE80BD00007869010041E40000F0B51A +:1057F0009BB0002820D03C0014090100011C08A81F +:10580000FCF7B2FD01201190032010AD2872042096 +:10581000687205A800226946F4F700FF00240026FC +:1058200005A90020F9F7FCFA6946F9F7F9FA0B9097 +:1058300008A8FCF7BBFD01343C0050090100022C14 +:105840002E72F0DB1BB0F0BD000090B5041C4C23A1 +:105850000C495843431885B000200A4902900022A1 +:1058600004923C200391C25C084841880192412087 +:105870000091C15C5A680833201C3C008C0901006F +:10588000FBF702F805B090BD58E30100754F00002A +:105890003C7C0100F8B50E1C224C3821171C051C5D +:1058A000201CEFF775FD231C2533211C243110200B +:1058B0006A46F9F71DF800AB188807213C00C809B3 +:1058C00001001A4A02382084201C20308170C570E3 +:1058D000111C0673477334312163303262630179DE +:1058E000251C103521812060E5601888401A20832E +:1058F000201C28302061201CF9F711F80D483C00CD +:10590000040A01000068002807D00621201CF8F7CF +:1059100047FD1021281CF8F743FD084802210162C9 +:1059200044620121016206480068EFF7D5FCF8BD2A +:105930008C8E0100E4FE0100CC5C01000030070009 +:105940003C00400A01005C5B0100F0B5061C4036DB +:10595000318B041C251C0807800F6035012885B099 +:105960003BD0E879002805D120690180B08B2169FE +:10597000C88207E0012805D1206901220188D202EE +:1059800011433C007C0A0100018020480078800718 +:1059900026D5E879002823D0A06B00281CD0F4F786 +:1059A0002FFE002809D0B8210958002905D0302140 +:1059B000095DB4300818077A00E000270121381C7F +:1059C000FAF786F93C00B80A010004902069043017 +:1059D000391CF4F76CFD0499FAF7D3F902E0201CA6 +:1059E000F7F7F9FB7083708B216900224880094921 +:1059F0000A48049203910290EA7929880192009161 +:105A0000626AE36820343C00F40A0100A17B687AF2 +:105A1000FAF74CFF05B0F0BD1D750100D14F000035 +:105A2000DD2F0100FEB5041C261C012020360029B4 +:105A300002902ED05820005B0007800F012801D172 +:105A4000CC3100E0B43148683C00300B01000D1C43 +:105A5000002824D0201C6030C2790121012A00D006 +:105A60000021271C626D3037002A04D03A1C281C04 +:105A7000F6F7E7FD07E0427A231C683300923A1CF0 +:105A8000281CF6F79AFD029038783C006C0B010058 +:105A90004019007A0121B073FAF726F901E00020DD +:105AA000B0736062B07B0D2801D9F0F7BBFB0298A0 +:105AB000FEBD0000FFB5041C8030251C5E3500785B +:105AC000AE1DAF1F002883B012D1F4F73C00A80B25 +:105AD0000100C7FB002807D006980599029004989A +:105AE0000190A66167610DE00498069902900598FF +:105AF0000190666105E004A903C90290069801902F +:105B00006761A5610622381CEFF78BFC06223C007A +:105B1000E40B0100281C0299EFF786FC0622301CDA +:105B20000199EFF781FC07B0F0BD0000B0B50D1C86 +:105B3000041C052801D3F0F77BFB0249A00008589C +:105B40008560B0BD107B0100F8B5FFF759F9051C61 +:105B50003C00200C0100FEF7E8FF041C281CFFF7A6 +:105B600058F9002842D0691E214D4A00204B1C3DA7 +:105B7000AE5C985C3040D6180123F6565219D256C6 +:105B8000964201DD151C00E0351C184B2A3B595686 +:105B900051183C005C0C0100B14200DB311C0E1CB2 +:105BA000002826D0FEF7BEFF009000AB18781249FF +:105BB0000023C95600AB1522101A5B78001B401851 +:105BC000D21A121B51180022854202DB00AB1A7058 +:105BD00002E0401B3C00980C010000AB18708E42A4 +:105BE00002DB00AB5A7002E0881B00AB58700098D3 +:105BF000FFF78DF801F0FFF8F8BDE6780100657356 +:105C0000010070B5084E064D00240620604380193F +:105C10000622291CEFF73C00D40C010011FC0134D2 +:105C2000052CF5DB70BD00004E470100E67A01004F +:105C3000034880B501680348FEF742FB80BD0000C1 +:105C4000A8790100C4600100034880B501680348D9 +:105C5000FEF74AFB80BD00003C00100D0100A87952 +:105C60000100C460010010B500280AD0064CA169EB +:105C7000002901D1002000E00968F7F738FBA06196 +:105C800010BD002010BDA46E0100F3B5374883B0ED +:105C9000029080790E1C002701903C004C0D010001 +:105CA0003448354A016A039C031C1B69A14201D098 +:105CB000936100E0536131498A6896423FD02D4894 +:105CC0008E60C1680024251C00292D4809D0002EB3 +:105CD0000BD028480124C06A240300283C00880D0A +:105CE000010006D0012704E0002E01D0051CF9E7D1 +:105CF000041C002F06D0FBF71EFB1F48016822483A +:105D0000FEF7FBFA201C28430ED02A1C211C012080 +:105D100002F021FE2A1C211C022002F01CFE3C0085 +:105D2000C40D01002A1C211C032002F017FE002FC5 +:105D300006D1134801681648FEF7CEFAFAF742FD7D +:105D4000039C002C01D101F0E1FF01A903C9887176 +:105D500001F0DCFF0A4C0A4B443CA1692269083B74 +:105D60003C00000E0100411A002A03D01A685118A5 +:105D7000196002E05A6851185960A061266105B0A7 +:105D8000F0BD20100700A46C010010000700B05700 +:105D9000010000106000847301001CB54C23084909 +:105DA00058433C003C0E01004418201C4030417810 +:105DB0006268009101923F210B5D618F0078626CF7 +:105DC000FAF728F8A0851CBD58E30100B0B5164DC0 +:105DD000A969002925D02C1C3034207A002820D035 +:105DE000002381223C00780E0100182002F089FC7B +:105DF000207AFF300006000E207212D10C482821B4 +:105E00002C38095C2172297A002901D1006A00E04E +:105E1000406AA9698002814203D24900814201D2CD +:105E2000A961B0BDA8613C00B40E0100B0BD01F095 +:105E30001DF9B0BDF46E01007FB5051C04206B4652 +:105E40001B180290002628186A4602A9FCF78AFB54 +:105E5000002806D100AB1879042808D01879032847 +:105E600005D000AB187910213C00F00E010008436A +:105E700004B070BD03A9E868F6F7D3FF002805D089 +:105E80000398202108430006000EF1E703A9002033 +:105E9000F6F7C7FF041C01D10220E9E7E86800AB70 +:105EA0002060009860601879A0763C002C0F0100FB +:105EB000A88C6076E8692061688CA082288C2076A6 +:105EC00069690948814200D9081CA060201C02F0C1 +:105ED000A1FDA168002904D0039AA132082002F094 +:105EE00037FB301CC7E70000A08601003C00680FAC +:105EF0000100FEB5061C40780124062850D3C11EBF +:105F00000320EFF75EFB00900E2849D800200AE03E +:105F10004100091889194A798979511801390E29DE +:105F200000D90024013000998842F1DB002C3C00AC +:105F3000A40F010037D00322B11C1B48EFF7A4FACD +:105F40001A4C1C21201CEFF74DFA002528E06900AF +:105F5000491902918A1953791548435493790F18B6 +:105F60007B70D379BB700723D2560192445C0FE05B +:105F70003C00E00F0100201CFEF77BFF002807D04B +:105F80000C4A600080180121103881730199C17397 +:105F900001342406240E07480299405C79784018A1 +:105FA000A042E8D8013500988542D3DBFEBDE86207 +:105FB00001003C001C100100E6780100EB620100CA +:105FC00001680F2901DD0F2101600168002901DA54 +:105FD0000021016070470000F8B5041C1E48221D16 +:105FE00005680092161C231C0F1CCC332A1C201C95 +:105FF0007030A16D3C005810010000F03EF9009691 +:10600000A16D27200140231CE433201C2A1C5C3096 +:1060100000F033F9134800780E2801D2012585409D +:106020001148A1690078294000070BD4480703D51F +:10603000080701D504203C00941001008143880624 +:1060400003D5480601D520208143231CB4332A1CE4 +:10605000201C3030009600F013F9391C201CF0F79A +:1060600047FCF8BD2C7D0100106701001D75010083 +:10607000B0B5F2F727FCFEF73C00D010010009F99B +:106080000F48002545700E480D4C00885B34A082F7 +:10609000F9F723FD2061A08A002804D00121890599 +:1060A000EFF70DFBE18205480138456001F055FE30 +:1060B000021C231C00210020F4F73C000C110100FD +:1060C00049FDB0BD457D0100F467010070B5161CA7 +:1060D0005A89041C04989207920F00250029A27186 +:1060E00009D00521F9F724FB002801D0C07800E091 +:1060F0000120E07100E0E571E560A6603C00481118 +:10610000010070BD0000FEB5051C0E229C30164932 +:10611000EFF7CFF9291C281C8030883100242F1C70 +:106120006037029101902006000E061CF9F70DFE63 +:10613000002803D001984268029901E0EA6D3C0012 +:1061400084110100391C002A0DD0002003E00B5CF3 +:10615000B34202D801309042F9DB08181038C07BF6 +:1061600029199031087301340E2CDFD3FEBD0000D5 +:10617000CC470100FFB581B0141C101C06220D1C79 +:106180003C00C0110100191C0B9E0A9FEFF797F904 +:106190000622391CA018EFF792F9E6602C60102057 +:1061A00028816E600198E86005B0F0BD000070B510 +:1061B000041C002020615820005D0E1C151CC00727 +:1061C000C0173C00FC1101000130E061216B002987 +:1061D00036D11E490968294332D0A168898A00292D +:1061E0002ED000280BD0201C583000F0F3FD0028E2 +:1061F0001BD0816A026A406A0978007806E0144A76 +:106200003C2311783C0038120100507843439A181F +:106210000432002D03D1022901D0032902D16D21BE +:1062200022610855206900280DD08188002901D1FC +:10623000012070BD8079022805D1221C074907483A +:10624000F8F74BFF02E03C0074120100201CEFF74E +:10625000B5F8002070BD00002861010068610100F0 +:10626000A1DA0000A06A010010B500210020F9F7B2 +:1062700039FEC400F9F754FE2418F9F747FE08491F +:1062800020180988084C40183C00B012010006494B +:10629000098840186061F9F746FE054909884018E9 +:1062A0004000A06110BD0261010004610100D479C9 +:1062B0000100A66901001140081C10B51C1C191C26 +:1062C00008311860F1F731FE60603C00EC1201000B +:1062D00010BD0000F8B5061C22480F1C4168914211 +:1062E00003D000218160C1604260C46815E02820AD +:1062F0001D4960434018051C0622311CEFF770F859 +:10630000002807D1A81D391CF9F710FD3C002813FF +:106310000100002801D00120F8BD01342407240F1A +:10632000124880688442E5D1104C2823A0680F4DA4 +:10633000584340190622311CEFF7D3F8A0682823F0 +:106340005843401906302222391CEFF7CAF83C00A6 +:1063500064130100A06801300007000FA060E1682D +:10636000814203D101310807000FE0600020D6E729 +:10637000EC650100A0F4010010B50021032000F03D +:10638000E5FF054CA068002804D101F007FD616815 +:106390003C00A0130100401A606010BD0000D060F6 +:1063A000010002680A6001607047011C0068002853 +:1063B00001D002680A6070470000FEB5141C1D1C65 +:1063C0000022D24301ABF3F782FF01980026284058 +:1063D00001903C00DC1301000025002720601EE036 +:1063E0000121B9400A1C024018D0884301903906A7 +:1063F000090E7019001902910177081CF9F7C6FC03 +:10640000002806D0301C0019013602993030017086 +:1064100004E0281C3C001814010001350299001901 +:106420000172013701980028DDD17019A061656003 +:10643000E662FEBD0000B0B5144D041C287A0128A8 +:1064400002D10420F6F7ADF9211CA86AF5F721FC6A +:10645000002803D104203C0054140100F6F7A4F9ED +:10646000B0BD02202870288C002800D06081688C84 +:10647000002800D0A081A88C002800D0E081E86925 +:1064800001230204120C201C0249FCF719FFB0BDC5 +:10649000F46E0100A17700003C0090140100F8B5F3 +:1064A000194E051CB069002800D13068FFF73BFC8D +:1064B000154F041C503700280BD06068291C7860E9 +:1064C00001203863201CF5F7EAFB002804D10020E6 +:1064D000F8BD0023FB62FAE700233C00CC14010066 +:1064E0002377F86A002801D10120F862387A012860 +:1064F00007D0F86906490204120C281CFCF7E6FED6 +:1065000001E0FB62B3610120E5E70000A46E010039 +:10651000DD02010070B50D1C041C161C3C000815A2 +:106520000100042C1BD21048834207D258000F49A7 +:10653000EFF7FBF8FF30000A013800E000201F35BC +:10654000EA066107090ED20E11437207520D11437C +:106550000006000A0843064AA100505070BD3C00E6 +:106560004415010001218D20EFF7ACFE70BD000045 +:10657000409C000000803801E8600100094A80006A +:106580001058400940010722024307480368002BC6 +:10659000FCDB42600906016001680029FCDB082081 +:1065A0003C008015010070470000E86001003020C9 +:1065B0000700B0B5041C0D1C0749A00008580028AE +:1065C00003D102218D20EFF780FE291C201CF6F755 +:1065D000A8FAB0BD0000E8600100B0B5041C0D1CB5 +:1065E00007493C00BC150100A0000858002803D151 +:1065F00002218D20EFF76CFE291C201CFFF7C4FF41 +:10660000B0BD0000E8600100F8B50D1C161CF7F7DE +:1066100017F9041C2868404F817800293BD1C178C4 +:10662000002958D13C00F8150100F8F7F8F9228E3E +:10663000618E8A4204D0A16A0918E069814210D9AA +:106640003849321C486B01304863206A01302062AF +:10665000386801303860E0686369291CEEF7D8FEBD +:10666000F8BD013212043C0034160100120C2286DF +:10667000A162B868002834D12C480C2300681B1A8A +:106680009A4207D219239B01AF2292015843101A54 +:10669000814226D30120B86001210C2000F07AFE4F +:1066A0001FE001291DD1C0783C0070160100172899 +:1066B0001AD1A08EE18E884214D3E968096809795D +:1066C00009060FD5606A321C01306062E0686369B8 +:1066D000291CEEF7A3FEE868016808310B2000F0E2 +:1066E0005CFEC3E70130A086A08D3C00AC16010023 +:1066F000E18D884204D103210220EFF7F5FDB8E7D0 +:1067000060684560866000686060F8680130F86025 +:10671000A08D411CA1850028ABD10848B969FDF7BF +:1067200061FE221C0221F12002F064F83C00E81610 +:106730000100A1E70000FC5A0100905C010018571D +:106740000100C460010080B5021C0221F02002F0AB +:1067500054F880BD0000002803D102484178C907E1 +:10676000FCD5704700000400070080B500063C001F +:106770002417010001D1F1F771FE80BD80B5F4F757 +:10678000E5FA80BD80B5F6F7EBF880BD0149002041 +:10679000087470477869010080B5C00703D50249C5 +:1067A000012000F01DFC80BD50C300000006000E5B +:1067B0003C0060170100012880B502D1F6F7E1F92D +:1067C00080BD0028FCD1F1F74CFE80BD000080B5F3 +:1067D000F6F7D7F980BD034980B500200874F6F7B5 +:1067E000FEF980BD00007869010080B50006000E4A +:1067F000F1F73C009C17010071FE80BD10B5012827 +:1068000008D0022803D0032801D0EFF7A7FDF6F740 +:10681000E9F910BD01F0F8FA041CFAF75DFD241A3D +:10682000FAF73EFD084900280BD0486A002808D036 +:10683000064884423C00D817010005D2011B012202 +:10684000072001F0F4FEE5E700204861E2E77869FF +:10685000010050C30000094980B5486900280CD0E8 +:10686000086ACA69801A002807DD002048610121F2 +:10687000072001F010FF3C0014180100F6F7B8F9EA +:1068800080BD00007869010080B500F0E7FB80BDA5 +:1068900080B500F03FFC0020F7F7D4FC80BD00007D +:1068A00080B500F037FCFDF76FFCF5F773FD30F0B5 +:1068B00047FB80BD044880B53C0050180100C16A08 +:1068C000006BF2F7DEFF0120F7F789F880BDA46CBA +:1068D000010010B5F3F741F80D4C002804D0012059 +:1068E000E064F7F7B2FC10BD01210120F3F7E9F8ED +:1068F000FDF74DFC606D002803D03C008C180100B2 +:10690000F3F782F8002801D0F5F74AFD0120F2F7ED +:10691000C1FC10BDA46C0100044880B5C16A006BC5 +:10692000F2F7B2FF0120F7F75DF880BDA46C01001B +:1069300080B500F0F5FBF5F733FDFCF73C00C81817 +:10694000010031FDF9F7CBFF0420F2F7A6FC80BD72 +:106950000000034880B5C16A006BF2F798FF80BD64 +:106960000000A46C010080B500F0DDFB0020F7F70B +:106970003CF830F0EEFA80BD000080B500213C000C +:10698000041901000120FFF719FA0120F2F788FC31 +:1069900080BD000080B500F0C9FBFCF707FD0121B8 +:1069A0000120FFF70BFA0420F2F77AFC80BD00000B +:1069B00080B500220021002000F08AFB80BD00008D +:1069C0003C0040190100034880B5826A012104207F +:1069D00000F081FB80BDD479010080B50022002148 +:1069E000032000F078FB80BD0000034880B5826A78 +:1069F0000121042000F06FFB80BDD479010080B537 +:106A000000223C007C1901000021032000F066FBFD +:106A100080BD0000064880B5816842690069511850 +:106A2000814203D90121012000F058FB80BD000004 +:106A3000D4790100064880B58288816800695118C0 +:106A4000814203D93C00B81901000121022000F065 +:106A500048FB80BD0000D479010010B5084C207BB4 +:106A6000216AF9F79CFAA1694218A0682169801887 +:106A7000884203D90121022000F033FB10BDD479F4 +:106A8000010080B500223C00F41901000021002023 +:106A900000F02AFB80BD00000006000E012880B532 +:106AA00002D1F6F78FF880BD0028FCD1F1F7FAFC8F +:106AB00080BD000080B5F6F785F880BD80B5000682 +:106AC000000EF1F729FD80BD3C00301A0100B0B581 +:106AD00002250228104C0BD1FBF747FC002801D1FE +:106AE000FEF74FFF2570A1680C48FDF7A8FCB0BD6C +:106AF00003280DD108487D231C380069DB0058436A +:106B0000191C40184108022000F03C006C1A0100DA +:106B100091FA2570B0BDF8F731F9B0BD7869010080 +:106B20003463010010B5054CE068002801D1EFF78F +:106B300039FC0220207000F0AFFA10BD7869010026 +:106B4000034880B5826A0121042000F03C00A81AA5 +:106B50000100D3FA80BDD479010080B50022002164 +:106B6000032000F0CAFA80BD000080B50022002199 +:106B7000002000F0C2FA80BD0000034880B54269E1 +:106B80000121012000F0B9FA80BDD47901003C0058 +:106B9000E41A0100064880B58288002A02D001214B +:106BA000022002E000220021002000F0A9FA80BDAE +:106BB000D479010010B5064C207B216AF9F7FEF963 +:106BC000A16942180121022000F09AFA10BD0000CC +:106BD0003C00201B0100D479010080B50022002177 +:106BE000002000F090FA80BD000038B5FAF741FEB1 +:106BF0000020F0F780F8009000AB1C885D88F8F763 +:106C00003CF9002C02D0FDF79EFA02E00120F6F7D5 +:106C10000AFF3C005C1B0100291C201CFCF7B8FC8F +:106C2000002C02D0F5F7E0FB02E0002000F0DCF9D8 +:106C30000320002C00D102200006000EF2F74EFBCC +:106C400038BD0000034880B5826A0121042000F0AD +:106C50005DFA80BD3C00981B0100D479010080B52D +:106C600030F09BF980BD80B500220021032000F0A8 +:106C700050FA80BD0000034880B54269012101201F +:106C800000F047FA80BDD4790100044880B58288BD +:106C9000002A03D001213C00D41B0100022000F097 +:106CA0003BFA80BDD479010010B5064C207B216AE7 +:106CB000F9F790F9A16942180121022000F02CFA9D +:106CC00010BD0000D479010080B5FCF793FB0121D1 +:106CD0000120FFF797F804203C00101C0100F2F798 +:106CE00006FB80BD000080B52FF06BFB00280AD0AA +:106CF0000120F2F7FCFAFAF72AFC002802D104205E +:106D0000F6F75DF880BD03211620EFF732FB80BD5A +:106D10000000024880B50068EEF73C004C1C010002 +:106D2000C5FB80BDD4790100034880B542690121CB +:106D3000012000F0F7F980BDD479010080B530F072 +:106D400035F980BDB0B5184CAA20005D042819D1D2 +:106D50000125E562256301F093F8A0663C00881CDC +:106D6000010001F0FCFDF2F72EFE00280ED00220FB +:106D7000F2F7C3FAA56001F086F864306060FAF7B4 +:106D80008AFD01210120FFF746F8B0BD0120F2F78E +:106D9000B4FA0020A06000210120FFF73CF83C007D +:106DA000C41C0100F2F766FE0028F1D0FAF776FD68 +:106DB000B0BD0000A46C010080B50020EFF7D6FE46 +:106DC00080BD000080B50120EFF7D0FE80BD00003F +:106DD000AC21095C024A09028918C0318160704700 +:106DE0003C00001D01007075010080B5012804D130 +:106DF00003C90968EEF764FB80BD01211420EFF799 +:106E0000C4FA80BD0000002802D1024840687047E3 +:106E10004068704700005875010010B50024F8F76D +:106E20001CFB3C003C1D0100002804D04030807A4F +:106E3000052800D10124201C10BD000004480021B9 +:106E4000406801E0016340680028FBD17047000002 +:106E500058750100B0B5041C0D1CF7F7A5F84034B7 +:106E6000E572B0BD3C00781D0100F8B5071CF8F7CD +:106E7000FAFA041C04D005211420EFF78CFA28E05C +:106E80000025144928024618301C443006221249B5 +:106E9000EEF72DFB002802D1AC208555341C0135BE +:106EA000032DEED3002C3C00B41D010014D0391C7E +:106EB000201CF8F72BF80949002020601839486891 +:106EC0006060002800D004604C60CA68002A03D0CB +:106ED0000121201CEEF7FEFA201CF8BD70750100A0 +:106EE0005846010080B5F8F73C00F01D0100C1FADA +:106EF000002804D106211420EFF753FA80BDF5F7DE +:106F000016FC80BD000080B5F8F7B3FA80BD10B55F +:106F1000094C2188022903D11420EFF742FA04E03A +:106F2000A3688A009850481C20803C002C1E010059 +:106F3000208801380004000C10BD000058750100C5 +:106F40000B1C111C084A80B51288904206D2DA68E0 +:106F5000C0001218142001F0BBFB80BD03211420D7 +:106F6000EFF722FA80BD0000587501003C00681E52 +:106F70000100084A80B51288904206D2C968C00054 +:106F80000918142001F0DBFB80BD04211420EFF769 +:106F90000EFA80BD0000587501000149C8607047B5 +:106FA00000005875010080B506224430EEF73C0021 +:106FB000A41E0100ABFA002801D1012080BD0020F1 +:106FC00080BD00001CB5144C2069002823D0207817 +:106FD0000A2801D000F0FCF8002060610F484079D9 +:106FE000A070002801D0012815D1FDF7EDFE019019 +:106FF0003C00E01E0100FDF782FE009000AB187916 +:107000001978401A187158795978401A58710198AE +:10701000F2F789FE0520207000F0BFF91CBD7C78D6 +:1070200001000C5A010008B5044A009014320020F7 +:10703000024B3C001C1F01000249F1F77DF908BD1D +:107040002C750100B1A80000B0B5002806D00128B9 +:1070500006D0022807D10C4C012507E00B4C04E0B8 +:107060000A4C2A3C01E0084CB634002500F02CFF05 +:107070000749896E3C00581F01000919091AA142ED +:1070800000D900212A1C162001F031FBB0BD71028D +:1070900000000C050000A46C01008CB500AB8E2133 +:1070A0001980FCF738F901906846FBF7A6FA8CBD09 +:1070B0000000BFB5134A3C00941F010001910D1C54 +:1070C000117C8843041C2143081C1074A0070BD5B5 +:1070D0000E4800900120029000F0FCFE0C49401880 +:1070E00003906846F9F76AFFE0070CD5F1F72CFD2D +:1070F000002803D0074885423C00D01F010000D281 +:107100000190064800906846F9F709FFBFBD78690D +:10711000010081EA000010270000A086010075EA46 +:10712000000010B50A4C606900280ED10120606192 +:10713000A1680748FDF7CBF900213C000C200100B5 +:10714000A068F9F7D1FB01220720044901F0D8FA21 +:1071500010BD00007869010034630100983A000016 +:1071600010B50C1C111C064A002B107003D000280F +:1071700002D1F9F7F5FD10BD201CF9F73C004820BD +:10718000010001FE10BDA0790100B0B50A4C051C3C +:10719000E36A201F0133E3620088002906D0A1685A +:1071A00089182161054A00F0FCFE01E000F0CFFEE5 +:1071B0002577B0BD0000D479010055E300003C0004 +:1071C00084200100011C034880B54088FFF7ECFED5 +:1071D00080BD0000987C0100034880B5C168183864 +:1071E0008088FFF7E1FE80BD707C010080B5002142 +:1071F000162001F0BFFA0121162001F0BBFA80BD74 +:107200003C00C020010010B50B4C20780A2810D09B +:10721000012060610A21132001F0AFFA0A2060709A +:107220002070FDF73CFB0120FDF7E9FB0020FAF799 +:10723000C4F910BD00007C78010010B50C4C002092 +:107240000B493C00FC2001002063E062503988615A +:107250002070084838210C38007A08558121182000 +:1072600001F08EFA2069012802D10020F5F73EFBDB +:1072700010BD0000F46E0100B0B51C4C00252C229E +:10728000011D201C3C00382101009AB0EEF739FAAC +:1072900018492C31081C007A8A69002A13D1022867 +:1072A00003D1A068002820D004E000281DD1606828 +:1072B00000281AD0800288610E4869462438006888 +:1072C000EFF7CBFB11E03C00742101000022022803 +:1072D00003D1A068002809D104E0002808D1606823 +:1072E000002803D18A61FFF7B1FF01E080028861C5 +:1072F000281C1AB0B0BD0000C86E0100F8B50C49DA +:10730000022048600B4900053C00B02101000860E4 +:107310000B4FB868F9687C68451A2E1C04E0A06819 +:107320006168EEF709F92468013DF8D27C60F868DD +:107330008019F860F8BD402007000010070044E302 +:107340000100F8B51F4E041C30693C00EC2101001F +:107350000121F9F799FA1D49600040181038817B26 +:107360001B4A5172C07B10741A4F1B4D0E2C0AD150 +:1073700001220221082001F0F3FB0320FF2141310B +:107380003986142108E00222012108203C0028222D +:10739000010001F0E8FB1249022039861021A97191 +:1073A000E8711048114A00191038C07B002803D03A +:1073B00001215173107301E0002050730021201C43 +:1073C000FDF7E5FD3069F9F708FBF8BD00003C006A +:1073D00064220100407C0100764601000C80070019 +:1073E0003080070000800700FF0100005C570100AB +:1073F000D080070010B5154C144A217800201832AF +:1074000005291DD006291BD0072901D0082906D13E +:107410003C00A022010091680520102900DB062015 +:1074200020700120A178002861700BD00020FAF7AD +:10743000DCF800216078F4F73CFA0A221E211320C0 +:1074400001F07FF910BDD16907201029E8DB082081 +:10745000E6E73C00DC2201007C780100B0B50D1CA1 +:10746000011C041C44310020F6F740FA3034002D92 +:1074700007D00EC80EC408C8103808C4F4F7C4F901 +:10748000B0BD1ECC1EC0B0BDF8B5081C111CF4F771 +:1074900087FA084C3C00182301000025084E084FCD +:1074A00006E0306B002803D035632068EEF755F80E +:1074B00038680028F5D0F8BD00005C5B0100E4FEF0 +:1074C0000100845A010080B50006000E00F007F8A4 +:1074D00080BD80B50A1C3C0054230100232101F02B +:1074E0002BFA80BDB0B50D1C041C122803D301215A +:1074F0002320EEF79BFF0649A000085804E012C8BD +:10750000281CEEF72EF8201C0028F8D1B0BD000092 +:10751000685B0100F8B50E1C3C00902301000025BB +:10752000041C122803D301212320EEF782FF134805 +:10753000A700C45908E02068B04203D103212320EA +:10754000EEF777FF251C6468002CF4D10C4A043A4E +:107550001068002801D0416811603C00CC23010074 +:10756000002804D102212320EEF766FFF8BD002198 +:1075700041600660002D01D06860F7E70149C851FD +:10758000F4E70000685B010070B50E1C051C0024C8 +:10759000122803D301212320EEF74EFF3C000824DC +:1075A00001000D4BAA00985804E00168B14204D0D4 +:1075B000041C40680028F8D170BD0028FCD0002CC5 +:1075C000416801D1995000E061600021034A0160E7 +:1075D000043A11684160106070BD685B01003C00B6 +:1075E00044240100F3B581B0002817D00178FF29A9 +:1075F00014D04578441902348027013C2678013D97 +:10760000BE43301CF8F782FC012181400298014002 +:1076100002D03E43301C2070002DEED1FEBD000094 +:107620003C0080240100104B10B55968411A0F2905 +:107630000DDC0E22D243914209DB1A1C926800290C +:1076400001DD002A03DA00290DDA002A0BDC0433FD +:1076500003C3FDF710FD041CFDF713FD002802D045 +:10766000201C3C00BC240100FFF792FE10BD00006E +:1076700018630100F8B5644C071C6078A178884253 +:107680000FD1081CFDF7CEF8E060042060700A22DC +:107690001E21132001F070F800216078F4F724F91E +:1076A000F8BD04283C00F82401006ED1584EFDF7C7 +:1076B000BCF800907178041C0020052921D201A398 +:1076C0005B5C5B009F440B0F141A02005148514948 +:1076D000604341187D20C000EEF787F811E0872055 +:1076E00060434D4902E03C003425010045204D49EE +:1076F0006043401808E04C48CD2109016043401A1E +:1077000002E0462060438238060648480721007997 +:107710003616081A001900906846FEF75FFD381CFF +:10772000FDF72EFB0099424A3C00702501004900FC +:10773000515A48433949041C8878002801D001284F +:107740001ED13549002803D13A480578042002E0CB +:10775000384845780C203049C968491B0818009002 +:107760006846FEF73EFD009833493C00AC25010019 +:1077700040002031085A2A494443C868A84201D928 +:10778000012500E000252E4821184000EEF7A2F860 +:10779000041C002D03D0FDF7C3FA02E03DE0FDF725 +:1077A000F3FA002F02D125480E3801E03C00E8250D +:1077B000010023480A380168611ACB1C01DB032948 +:1077C00000DD04600168A14201D2013104E0A14260 +:1077D00003D9002901D0013901600168381CFDF787 +:1077E000C0FB104C0A2060700A221320A1683C00E4 +:1077F0002426010000F0D2FF606800F0F7FA0028AC +:1078000000D15FE700F0BAFB1149002340180E4990 +:1078100060601E39C856B042F3D00E70311C002093 +:10782000FFF784FE4EE7FFF715FE4BE77C7801007B +:107830003C006026010060D7FFFF608F0100540B01 +:107840000000C90900008EFEFFFF0C5A0100125A09 +:10785000010020A1070040420F0030B50C4BFE2470 +:107860001B880440C0075D076D0FDB08C00F9C42FA +:107870000BD83C009C260100A218043A9A4207D378 +:107880001A1B895C0122AA40114001D00221084341 +:1078900030BD0000FA60010080B5002803D0011C53 +:1078A0001420F5F7FFFA80BDB0B5041CF7F708FD0A +:1078B000134D00283C00D82601001DD1A00716D585 +:1078C00002208443114801222A624068002813D014 +:1078D000F2F751F900280FD10B48E430807A0128E3 +:1078E00000D00022111C0120F2F7A5F904E000F0FD +:1078F0004EFBE861F2F73C00142701006BF9A96A1E +:10790000002902D0201CEDF75CFEB0BD606C0100C8 +:10791000B05701002048B0B58168012904D1007832 +:10792000002801D1FDF772FD1B4D803D2C1C7034E9 +:1079300020780338052818D23C005027010001A305 +:107940001B5C5B009F44041527272700FBF7F1FF12 +:10795000607B011CFF3161730028F7D10420207087 +:10796000A889F8F7DAF9011C00220F2000F025FFA2 +:10797000B0BDEFF7CEFF6A21495B3C008C270100C8 +:1079800088420BD0E889F8F7CBF9011C00230022CC +:107990000F2000F0F7FF07202070B0BDFDF73AFE82 +:1079A000B0BD000084660100F0B585B0041C038002 +:1079B000180C60800D1C5178107809023C00C82713 +:1079C00001004840A080D178907809024840E080CA +:1079D0005179107909024840208168461A491422D9 +:1079E000EDF7E3FE00230020D907C90F8C464200C3 +:1079F0005607760F6146891949006E5C49193C00AB +:107A00000428010049786F4609024E4081007958E8 +:107A10000F4F4900615A01304E403106360A760058 +:107A2000C90D795AF61901277F02F6193688714077 +:107A3000A65A8919A1520528DCDB2089C018013318 +:107A40003C0040280100082B2081D2DB05B0F0BDAE +:107A50000000D8560100D8520100F0B5051C0C1CDE +:107A60001E1C002089B04100535A013006AF7B52E2 +:107A70000528F8DB108900AB3A498019588468461C +:107A800018223C007C280100EDF798FE0020410000 +:107A90000A195278635C6F46120253408200BA584A +:107AA00006AF5200BA5A314F013053401A061B0A32 +:107AB0005B00D20DBA5ADB1901277F02DB191B8844 +:107AC0005A4006AB3C00B82801005B5AD21806ABFE +:107AD0005A520628DEDB617B207B00AB090248405E +:107AE000598C48404108C0034840198B40181883FE +:107AF000E17BA07B09024840198B48404108C00344 +:107B00004840598B40183C00F4280100588302205B +:107B1000410006AA8A18203AD28B01305308D203BA +:107B20005A4006AB5B5AD21806AB5A520628EFDB16 +:107B3000300A28707004400E202108436870AE702F +:107B40006178207800AB09023C00302901004840F0 +:107B5000598C4840C005000EE8700020410006AA7C +:107B6000535A4A190130137106AB595A090A517117 +:107B70000628F3DB09B0F0BD0000EC560100D85236 +:107B80000100F0B54668051C60303C006C2901001E +:107B900085B0049060E068680C2107690020EEF76A +:107BA0002DFE7061018904390904090C0181706995 +:107BB000006840180421EEF721FEF0617069202171 +:107BC000046804980422407B800108433C00A829F3 +:107BD0000100E07028694089A07028694089000A86 +:107BE000207029690C31A018EDF79BFD2078202129 +:107BF0004006400E0843607028690A300188013150 +:107C00000904090C018004D128690C3001683C008A +:107C1000E4290100013101603562617920790902AE +:107C20004018A17909044018E17909064318009326 +:107C3000A0782178090240180404240C1020EEF7E3 +:107C400013FFB06128693A1C0168009B01A80A3241 +:107C50003C00202A0100FFF7C8FE2869231C0168A8 +:107C6000B06901AAFFF711FF3668002E9CD10349C5 +:107C700004486A68F7F763FB05B0F0BD0000FD6BD0 +:107C80000000A06A0100013807494000095C002992 +:107C900006D03C005C2A010004491C39085C00281D +:107CA00001D001207047002070470000E6780100F5 +:107CB000FEB5051C002002901348171C00680C1C20 +:107CC0008678301CFDF728FA002801D10298FEBD05 +:107CD000002D08D13C00982A0100206800AB1871E3 +:107CE00060685871A068987103203880291C301C86 +:107CF00001AA00F00EF8002DECD000AB197921603C +:107D0000597961609979A1600C213980E2E7F86BBB +:107D10000100F8B5151C3C00D42A0100421E0138B0 +:107D200047003F181F483E18002906D001240322AF +:107D3000311C281CEDF704FD32E06878012400288E +:107D400005D02978081801380E2800D90024002C05 +:107D500026D0002A07D12A213C00102B010012480E +:107D6000EDF79FFC1C211148EDF79BFC0F48032207 +:107D7000291C301CEDF7E7FC0C487178C05DB27827 +:107D800000290ED0002A0CD001224318084D06E02D +:107D90004100491910398A73B7783C004C2B010017 +:107DA0000130CF738342F6D8FEF760F8201CF8BD8F +:107DB000EB620100CA78010070B5051C1C48002365 +:107DC000C056431C32D1A87AF8F70CF900260028D7 +:107DD000184C08D0E869E16B00290BD13C00882BD6 +:107DE000010066630121E163A66306E0A869E16B17 +:107DF000002902D06663A663E663A16B0131A1632B +:107E0000820301D50E4A1043E26B002A00D04042A3 +:107E1000626B1018606308290BD1002801DD3C005B +:107E2000C42B0100012003E0002803DA0020C04336 +:107E3000EFF762FE6663A66370BD0000F46B01009D +:107E4000846A01000000FEFF0C21054A41438918A5 +:107E500080B58978002901D1F3F7F2FA80BD0000DE +:107E60003C00002C0100607B010080B5011C00205B +:107E7000F7F703FA80BD80B5011C0120F7F7FDF983 +:107E800080BD02498968401AC00F70470000000198 +:107E9000070002498968081AC017013070470001BD +:107EA00007003C003C2C010005494A6801231A43A5 +:107EB0004A608A681018886048689843486070472C +:107EC0000001070010B5154B00210A019A58002A3D +:107ED00017D101240A019C50D21810730023537348 +:107EE000022301283C00782C01000E4A05D1C8006D +:107EF0008018103002789A4304E0C80080181030CF +:107F000002781A43027002E001310829E0DB0829F7 +:107F100004D101219920EEF7FEFA03490804000C70 +:107F200010BDAC7301003C00B42C010000600700E0 +:107F3000FFFF0000F7B5194F194E0C1CC100C919FD +:107F4000B268103181B0013A4A600B781D1C0D22D5 +:107F500093430B70012282403A73124B0001039A43 +:107F6000C0188260104A101C3C00F02C0100203028 +:107F7000877900AB1F70C0795870B0680330002358 +:107F8000261A01D5041C01234C600D70002B04D06F +:107F9000201CFFF78AFF0028FAD000AB1888D08495 +:107FA000FFBD00600700000107003C002C2D010010 +:107FB000AC7301000010070030B50020C0430B4C2B +:107FC000094B0022D10009190D7CED0707D549693D +:107FD0009D68491B00D50021814200D2081C013256 +:107FE000082AEFDB30BD0000000107003C00682DCF +:107FF000010000600700B0B508280BD2084D04014D +:108000002959002904D000F04AF800202851B0BDB9 +:10801000022100E003219920EEF789FAB0BDAC738C +:108020000100034900014018417B082211433C0034 +:10803000A42D010041737047AC73010001488068B2 +:10804000704700000001070070B50B4E094D00227B +:10805000D0008419207CC00707D56069FFF726FF90 +:10806000002802D0A868323060610132082AEFDBB4 +:108070003C00E02D010070BD000000010700006021 +:108080000700024AC00080180174704700000060B9 +:1080900007000449C0004118087C0823021C9A43C9 +:1080A0000A74704700000060070070B5082817D2F6 +:1080B0000E493C001C2E01008A680E4D013AC10099 +:1080C00049194A610C4B9A7910310C780D26B4434A +:1080D0000C700121814029739A71094A07490001F6 +:1080E0008018416070BD05219920EEF729FA70BD16 +:1080F000000107003C00582E01000060070020101E +:108100000700D1750000AC730100F8B59E461A4B0C +:1081100094469B681A4CC2001219013B5361151C0E +:10812000184CA6792A1C103213780D27BB43137004 +:108130000127124B87403C00942E01001F73A6714B +:10814000124E0001801963464360734683601378C2 +:10815000407BA679012718433843143500AB1E70C5 +:10816000E4795C70064B9B680333CC1A00D5191C6C +:108170002960107000AB18883C00D02E0100034C21 +:10818000203CE084F8BD00010700006007002010DB +:108190000700AC73010000B5011CFFF75EFF421839 +:1081A000101CFFF792FE0028FAD000BD0000891ACB +:1081B000401A9918884201D801203C000C2F010078 +:1081C0007047002070470000F8B50F1C041C002801 +:1081D00001D1EEF7EFF9211C0120FFF719FA412038 +:1081E000005D002801D1002504E0022801D1052509 +:1081F00000E00125E068EEF729FBA66B3C00482F64 +:108200000100002E10D0002F06D02F20025D206A22 +:10821000416B281CEDF744FAA069002801D0EEF765 +:1082200046FC206AEEF743FC201CEEF740FC301CB5 +:10823000F8BDB0B5041CC06B002809D020693C0013 +:10824000842F0100008BEEF755F9002803D0211C84 +:108250000620FFF7E3F9084D201CA96DFFF7BAFFD0 +:10826000002807D0E8680130E860286A01382862F1 +:10827000FCF778F8B0BD0000C469010010B5064CE9 +:108280003C00C02F0100E16DFFF7A7FF002804D0DC +:10829000E0690138E061FCF768F810BD0000C469CE +:1082A00001000C230C495843401810B54468A168DC +:1082B000002902D0201CEDF7F3F9E06B002808D06C +:1082C00020693C00FC2F0100008BEEF719F9002813 +:1082D00002D0201CF9F726F910BD0000607B0100D8 +:1082E000F8B522494868800006D40120400708609C +:1082F0004A69920000D448601D4F787EC306012071 +:10830000021CDB0E3C00383001009A400A6079699B +:108310008C688C602107890F09D0210704D50B21B7 +:108320009E20EEF728F900E078640C208443124880 +:108330003D68065D6C682C3406E0A0680068A060AB +:10834000E968281CEDF73C0074300100B2F9013EE9 +:10835000F6D2A068806800280DD0408900280AD095 +:10836000786C002807D178698068800703D10C21D8 +:108370009E20EEF703F9F8BD00100700CC6D010058 +:10838000B4440100094980B53C00B0300100087ECA +:10839000C206D20E01209040074A106000200A69F0 +:1083A000C04390600868243106C90369EDF786F977 +:1083B00080BDCC6D010000100700F8B54468061CB4 +:1083C0002C3420680D1C806800903C00EC300100CB +:1083D000002800D0C5602068006820604068002840 +:1083E00003D00A219E20EEF7CFF820684560281CB4 +:1083F00002E000224260081CC1680029F9D17168BE +:1084000060270B1C40339C469B78CA7E3C00283179 +:1084100001005B011207120F3B401A438B8FFF27AD +:108420003F041B043B401A4390231A4342606346B7 +:108430009A780132D207D20F9A70896BC160216895 +:1084400088600098002801D00098C5600A4F3C0061 +:1084500064310100BD79A06900280CD00022A2611E +:1084600074686069EFF72EFFE06A616940684860F0 +:10847000616901200860BD71F8BD0000201007008F +:10848000FEB544680F1C01942C34201C123002905D +:108490003C00A03101002CE00C20EEF700FB051C95 +:1084A000606800281DD10298002100900020EEF79E +:1084B0000EFA061C00980421EEF709FA011C019837 +:1084C000C07E0007000FD03070600198C07E0007AA +:1084D000000F3C00DC310100F0304860301CEEF74A +:1084E00019F96560E66001E0206805606068286051 +:1084F000256000206860A860381CFF300006000E70 +:10850000391C071C0029CAD16068A060FEBD0000AC +:10851000FFB5051C3C0018320100081C002681B084 +:10852000F4F72FFE041C02D06068FF2801D1062654 +:1085300028E0211C20310A78012A01D1032621E0FC +:10854000012725600F7011C51D48083D686103981B +:108550006A46E86004983C005432010028611A48D9 +:10856000A8611A48E8611A4828621A486862207EA1 +:10857000A168EDF7B3FE002806D1607EE1686A4687 +:10858000EDF7ACFE002807D00426311C9E20EEF744 +:108590000DF8301C05B0F0BD3C00903201006A4679 +:1085A0000F491D20EDF79DFE01210D48490701608F +:1085B000227E3B1CD206D20E93404360627ED206DE +:1085C000D20E974047604160E6E731330100D9326F +:1085D000010091310100DD3001003C00CC3201008E +:1085E000FD320100713301000010070042682C3297 +:1085F000506843680B6081684B890B818368002158 +:10860000D9604160816000685060002070470000C0 +:1086100070B54268FF269187106B0C043C0008334C +:108620000100051C3604344043685968B1432143B6 +:1086300059600068A842F7D1106B516940684860E2 +:1086400051690120086070BD0000B0B54368081C86 +:1086500059629A6200250AE04581C4682A1C3C00E0 +:1086600044330100002C03D19A7E1207120F1032FE +:108670004260201C0028F2D118694160196901206C +:10868000086002480068EDF737F8B0BD5C5B010098 +:1086900001200549400780B58860044801680D2025 +:1086A0003C0080330100FEF7E6FF80BD00000010B3 +:1086B0000700C4600100F8B50E4F0C4E002448209E +:1086C0006043C5194821281CEDF77BF81C20604346 +:1086D0008119281D1C22EDF7FEF81C23E8560549D8 +:1086E000FBF73C00BC330100CDF80134012CE9D389 +:1086F000F8BD0000B8440100CC6D01001532010046 +:10870000FFB5051C0A30061C81B0F2F7DDF8184FE2 +:10871000041C3988EFF7BCFC3288786802807288C4 +:10872000023002803C00F8330100B188124E4180D3 +:10873000288808364005002805DA6988039A201C35 +:10874000F7F701FD00E000207080F8F75EFC0121E2 +:1087500009030028308801D0884300E008433080B6 +:108760000548002200213C00343401001430EFF7AA +:1087700065FC201CF9F774F805B0F0BDB07A010073 +:1087800010B50E4C6068F8F795F92068006A00286B +:1087900013D1F8F7BFFC002808D021680120086237 +:1087A0001F210022832000F03C00703401009FF95B +:1087B00002E06068F8F721FAFFF797FC216808618A +:1087C00010BD147A0100FEB51B4E0F1C1D1C141C9D +:1087D000B060081CF7F72BFFB08034733562381C8B +:1087E00001AA02A9F7F725FF00AB3C00AC34010059 +:1087F000187A012818D118790B2808D1307F242342 +:108800000F49584340188068ECF788FFFEBD00AB65 +:1088100018790A2808D1F7F739FD071C291C201CF4 +:10882000F7F716FD3818B080307F24233C00E83479 +:1088300001000449584340184068ECF772FFE8E72C +:108840000000D479010094460100B0B5FFF753FC55 +:10885000041CFBF7FCFA0C4D29680969091B0C1A6A +:1088600002211F2000F08BF8142C06DD02223C00B0 +:1088700024350100211C1F2000F050F80120B0BD5C +:1088800029680120896A0029F9D00020B0BD0000C4 +:10889000147A0100F8B51A4D071CAE790121194C64 +:1088A00000202268002A14D1AE71A268D06806CADE +:1088B0003C0060350100ECF73CFFAE790021134A23 +:1088C000506901305061A0688068A0606268904281 +:1088D00006D10120206003E001300C340328E3DBE3 +:1088E000002F08D100290AD00A484068002806D085 +:1088F000FAF73C009C350100F5FF03E0012F03D09F +:10890000002901D1AE71CEE7AE71F8BD201007008D +:1089100018D90100A8600100705D010080B5012335 +:10892000F5F77CF880BD000080B50023F5F776F8F8 +:1089300080BD00003C00D8350100F8B5134B002481 +:108940001B8898421BD2114BC000C01845680668AE +:108950002868002817D10E4FA8684368B34209D190 +:10896000C3688B4206D10368934201D0531C01D1E6 +:108970000124476080683C00143601006B68834224 +:10898000EED103E001218020EDF740FE201CF8BD70 +:1089900056570100845D010029E30000F8B5174F28 +:1089A0000A1CBE79164D00236C6807E021689142CD +:1089B00002D12179814204D03C0050360100231CB1 +:1089C000E468002CF5D117E0002C15D0002B0DD158 +:1089D000E3680D486B600088002B02D1FFF7D1FBE4 +:1089E00006E00A4A9968FFF7F6FB01E0E068D86004 +:1089F0002868E0602C6002E001213C008C36010018 +:108A0000FFF7A4FFBE71F8BD201007007C5D0100D8 +:108A10002C7401002138010070B5094EB579F9F7C1 +:108A2000AFFE041C09D0201CEDF70CFB05498A6839 +:108A300080188860086801300860B5713C00C8364D +:108A40000100201C70BD20100700A860010009482B +:108A500080B54068021C0BE00169002907D0824202 +:108A600004D0816805480088FFF7E5FA80BDC0683A +:108A70000028F1D180BD7C5D01002C7401003C0018 +:108A800004370100054880B54268002A04D0044834 +:108A900000889168FFF7D2FA80BD00007C5D01007C +:108AA0002C74010005480168002904D0C068002822 +:108AB00001D00120704700207047000018D9010044 +:108AC0003C004037010080B5F6F7D1FA80BD131C99 +:108AD0000D4AB0B5128890420FD203290DD20A4A2E +:108AE000C00014580A4DAC4207D113500C2359430F +:108AF000084BC91880184160B0BD02218020EDF7F5 +:108B000094FD3C007C370100B0BD000056570100C9 +:108B1000845D010009A0000018D90100F8B50F1C00 +:108B20001E1C151C041C111CFFF74AFF331C2A1CB9 +:108B3000391C201CF4F78AFFF8BD0000F7B59446F5 +:108B4000FF2921D03C00B837010015480088814238 +:108B500021D2144A154EC8008518B4796868026895 +:108B6000002A03D1031D0CCB9A4211D043689A68A6 +:108B700042600E4A176901371761B4710022026022 +:108B80000098D86060463C00F43701001860197402 +:108B900028685860FEBDB471062100E007218020DE +:108BA000EDF74CFDF6E7000056570100845D01002B +:108BB00020100700A8600100B0B5144D6C68002CAF +:108BC00001D0844204D00C213C00303801008020C8 +:108BD000EDF737FDB0BDFFF7B8FAA168401A0D49AF +:108BE000884203DA10218020EDF72BFD21792268DD +:108BF0000120FFF7ACFFE3686B60002B05D007484E +:108C0000064A00889968FFF7FEFA3C006C380100BC +:108C10002868E0602C60B0BD7C5D010018FCFFFF9F +:108C2000213801002C740100B0B5154C0820211C1E +:108C300080310870134A4104116013480068134DD5 +:108C40006B69184001D1102000E000203C00A838DA +:108C50000100A8235B5D1843231C40331873516047 +:108C600020788008800020700020FFF712FBFFF7BB +:108C700072FA643028660138A06120780321084325 +:108C80002070B0BD000000900700001007003C00FD +:108C9000E438010010000700A46C010038B50A4C4C +:108CA000211C20318A7900AB1A70C979074D59709F +:108CB0006978884203D1F8F713FCFF20687000AB95 +:108CC0001888E08438BD0000001007004C7B0100CC +:108CD0003C0020390100F8B50B1C061C041D7F3335 +:108CE00014D033685D18356023881F180623FF569B +:108CF000EB1B336023881818817120880130000431 +:108D0000000C2080904201D300202080101C31688C +:108D1000ECF73C005C3901006DFEF8BD0E490A7CA1 +:108D200083781A430A74427883789A430B7C93437E +:108D30000B748A7C43781A438A748A7C03789A433A +:108D40008A74027843781A434B7C1A434A744A7CEB +:108D5000C07882433C00983901004A747047100083 +:108D60000700B0B5064D00242006000EEDF7F7F819 +:108D7000A100695808710134042CF5DBB0BD107BEB +:108D800001000B480C497D234269DB00002AC86BB7 +:108D900007D0C0181A013C00D43901009042C863C2 +:108DA00001D90748C8637047FF38F538C86398424F +:108DB000F9D2CB6370470000F4680100447D0100E4 +:108DC0007017000070B50D1C041C161CFBF7F6FA9A +:108DD000B0432843011C201C3C00103A010000F065 +:108DE000CCFA70BD000080B50B4A002909D00229D9 +:108DF0000FD1011C0848D2783830FFF778FF0649B8 +:108E000006E0011C044812792030FFF770FF034987 +:108E1000086080BD0000AC7C01003C004C3A0100C1 +:108E2000C8670100C467010080B50B4A002909D05A +:108E300002290FD1011C084852796830FFF75AFF08 +:108E4000064906E0011C044892795030FFF752FFB2 +:108E50000349086080BD0000AC7C01003C00883AFA +:108E60000100D0670100CC67010008B50421009122 +:108E7000817E4368032906D1011C0C3101206A461A +:108E8000ECF79AFC08BD1968C160FBE7000010B55B +:108E9000031C0020084C0021CA00121992783C00E3 +:108EA000C43A01009A4203D1C8000019406810BDBD +:108EB0000131090609160629F1DB10BDCC5A010063 +:108EC000F8B50F1C161C0025FEF78EF9041C0AD0FD +:108ED0004A20005D052806D1381CF1F781FE0028E4 +:108EE0003C00003B010001D001253460281CF8BD86 +:108EF000000070B50D1C161C0024FEF778F9002840 +:108F00000BD04A21095C052907D10169002904D148 +:108F10003060F1F704FD01242860201C70BDF8B515 +:108F2000061C3C003C3B010000250C1C081CF1F712 +:108F30005DFE002801D0002105E0201CF1F774FE41 +:108F4000002814D00121301CF4F780FB0090002889 +:108F50000DD0084F01250622311C381CECF7C2FC4D +:108F60000622211C3C00783B0100B818ECF7BDFC40 +:108F70000098F860281CF8BD0000707C01000021FA +:108F8000002806D04278072A03D1C079012800D1F1 +:108F90000121081C7047F8B5051C0027164EF1F793 +:108FA00028FE002807D03C00B43B0100F1F7C0FBCD +:108FB000002810D10024F1F7BBFC06E0F1F702FE17 +:108FC000002808D00124F1F799FD011C0622301C6D +:108FD000ECF78EFC0127002F0DD0211C281CF4F784 +:108FE0003BFB011C054806223C00F03B0100063813 +:108FF000C160291CECF77FFC0120F8BD0020FCE7D4 +:109000000000767C0100F0B5071C006802210468AE +:10901000786987B00140002500290591744E12D06F +:1090200022880121130502D4C0073C002C3C01001A +:10903000C11701316F480029006801D0013004E0F8 +:109040001106890E2D2901D1033030602088800758 +:1090500067D17869C00764D503AA04A9201CF7F773 +:109060004BFB00AB187C002807D0187C3C00683C08 +:109070000100022858D1187B4007400F042853D81C +:1090800020790599C007C01701300290002902D14C +:109090000298002848D10599002904D020880005AD +:1090A00001D400203060C020EDF7CBFD051C3C0052 +:1090B000A43C0100201C0A300690FEF7ADF8061C07 +:1090C000281C08302388021D111DDB0506D5069BD0 +:1090D0000360201C10301060201D0EE0231D136063 +:1090E0002288920505D5221C10320260069B0B6077 +:1090F0003C00E03C010004E0069B0360201C1030B3 +:1091000008602869F1F743FC002808D0012812D034 +:10911000022858D100AB187C002854D112E000ABD3 +:10912000187C02280BD1002E4DD04B20805D0228E8 +:1091300049D13C001C3D010007E063E000AB187C16 +:10914000002802D1381CFEF71BFF2088410430485C +:1091500011D5002E52D000AB197C002926D00299DF +:10916000002902D0B06A007800E0007801281DD004 +:10917000032843D13C00583D01001AE000AB197CA4 +:10918000022916D1197B042913D0197B0C2910D080 +:109190002249096800290CD0002E0AD00299002922 +:1091A00002D0B06A007800E00078012829D00328B6 +:1091B00027D02822391C3C00943D0100281C88300F +:1091C000ECF70AFC00AB197C281C80300171197B7C +:1091D00041716C606E611BE00599002914D0114843 +:1091E000846C002C10D00022002E04D04036B07ABF +:1091F000052800D1012200923C00D03D0100F87A00 +:10920000BA7A2969C307DB0F0698ECF700FB281C24 +:10921000EDF707FD0025281C07B0F0BD0000C46A6B +:1092200001006861010028610100C469010080B586 +:109230000220FFF770F880BD00003C000C3E0100EA +:10924000B0B51D4D012817D0A22806D0A32803D100 +:1092500001211520FFF708FCB0BD002901D11748F6 +:1092600002E07D20C000484300230122011C286049 +:109270001520FFF7A7FCB0BD012904D03C00483EF3 +:1092800001000229FAD100F02AF8B0BD6C68F5F7A8 +:10929000DEFCFEF7A8FF6860002C09D029680A23CD +:1092A0005943001B884203D901211520EDF717FA15 +:1092B000012215202968FFF7A6FBB0BD00003C0085 +:1092C000843E0100047901000087930301200449D2 +:1092D000400380B5086003211520EDF703FA80BD37 +:1092E00000100700074880B5BE210173017A1022E3 +:1092F000114301720023022215200349FFF768FC85 +:109300003C00C03E010080BD000000030700809FBC +:10931000D50080B5002803D00A1C1521A22002E048 +:1093200000221521A320FFF766FC80BD000010B5C8 +:1093300000F019F80A48BE210173037A1022934302 +:1093400001243C00FC3E0100234303720173017AB7 +:109350009143202211430172022215200249FFF796 +:109360005BFB10BD00030700809FD50080B5022184 +:109370001520FFF785FB0448BE210173017A1122F5 +:10938000914301723C00383F010080BD00000003A2 +:109390000700F8B5061C051C60360027446822E06B +:1093A00008210020EDF741FB6061018904390904BF +:1093B000090C01816069006840180421EDF735FB54 +:1093C000E0616069717B3C00743F010000688901C5 +:1093D000C17029690C310322ECF7BAFA28690C3004 +:1093E0000168013101602562A7612468002CDAD18F +:1093F000024903486A68F6F7B3F8F8BDFD6B000050 +:10940000A06A010080B500073C00B03F01000009E0 +:109410000902090A084302490860FFF720FF80BDDE +:1094200000006000070008001400C8000000E80306 +:10943000000010001400C8000000E80300001C0039 +:109440001400C8000000E80300003C00EC3F0100ED +:109450002401070032000000E8030000400601007C +:109460000600000007000000416E62697E64616FC3 +:109470006F00000052656C6561736520365F375F71 +:109480003135204275696C6420323A353C00284001 +:1094900001003239382053657020303420323030AA +:1094A000392031373A31333A3230202848573D3469 +:1094B0003A332C4254434F455829000000003200F3 +:1094C0001C00102030405060FFFFFFFFFFFF3C00FA +:1094D00064400100000000000100000001000000E5 +:1094E00000000000E8037000000000000100000020 +:1094F0000000000002000000D0073800000000005B +:109500000100000001000000040000007C151500AF +:109510003C00A0400100000000000100000001002C +:1095200000000B00000070171E0001000000010089 +:109530000000000000000C000000282316000100BD +:109540000000010000000000000012000000F82AE6 +:109550000B003C00DC4001000000000001000000A6 +:109560000100000016000000E02E120001000000C3 +:1095700001000000000000001800000050460E002E +:1095800001000000010000000000000024000000B5 +:10959000F05508003C0018410100010000000000E7 +:1095A0000000010000002C000000C05D0E00010062 +:1095B0000000010000000000000030000000E88012 +:1095C0000400010000000000000001000000420053 +:1095D0000000A08C0A003C00544101000100000082 +:1095E00001000000000000004800000080BB0A00ED +:1095F0000100000001000000000000006000000009 +:10960000F0D20A000100000001000000000000008C +:109610006C000000C00090003C0090410100C000C0 +:109620009000C00090001400100014001000C00052 +:1096300090001400100014001000C00090001400EE +:109640001000C0009000140010001400100014005E +:109650001000C0009000600048003C00CC410100B8 +:109660006000480014001000140010006000480062 +:1096700014001000140010006000480014001000D6 +:1096800060004800140010001400100014001000C6 +:10969000020004010B020C03120416053C000842F0 +:1096A00001001806000E000E2407000E2C083009D9 +:1096B000000E000E000E420A000E480B000E000EB7 +:1096C000000E000E000E600C000E000E6C0D00006F +:1096D00000000000000000000080C0FFFFFF3C0011 +:1096E00044420100B6FFFFFFD3FFFFFFC9FFFFFFAA +:1096F000FFFFFF7F000000000000000000000000EE +:1097000000000000000000000000000051B0000058 +:109710000C00000051B000000C00000059AF000028 +:109720003C008042010000000000A5AF00000000E6 +:1097300000004DAF00000600000000000000000027 +:10974000000045B00000060000000000000000001E +:109750000000D5AF000000000000ADB00000000028 +:1097600000003C00BC42010095DB0000000000004E +:1097700095DB00000000000099B000000C00000024 +:1097800000000000000000000000000000000000D9 +:1097900000000000000000000000000000000000C9 +:1097A000000000003C00F8420100000000002D17FE +:1097B00001003517010021170100D99C000049174D +:1097C00001003D170100D19C0000D19C00001D1A32 +:1097D0000100D19C0000011A0100311A0100251A74 +:1097E00001003D1701003C0034430100811A0100D3 +:1097F000D19C000079170100D99C00005D17010081 +:10980000A11701009517010081170100211801001F +:10981000F5170100000008000C000000100008000F +:1098200008000000010000003C007043010002003D +:109830000000040000000800000010000000191CD7 +:1098400001008941000089410000854100008541F7 +:1098500000008541000085410000894100008541EC +:10986000000085410000351B01003C00AC430100B5 +:109870009D1B0100011C010089410000894100007D +:109880008941000085410000651801002918010088 +:1098900039180100BD180100894100004D18010070 +:1098A000A518010085410000011901003C00E843B2 +:1098B0000100D9180100ED180100151901008941B6 +:1098C0000000894100008941000085410000894174 +:1098D000000089410000691C010089410000711CE1 +:1098E00001008941000089410000FDDB00003C00CF +:1098F000244401001D7C000000008000F5DA000017 +:1099000014008100FDDD000008008200C5DD0000BC +:109910003800830045DC00001000840099DC000062 +:109920000C00860039DC00001000880011DE000009 +:109930003C006044010010008A0035DD00000C008E +:109940008C00ADDF00001C008E00C9DE0000380076 +:109950008F00EDDC00003800900075DF00000C0087 +:1099600091008DDC00000C009300B9DD00000C00BC +:1099700094003C009C44010000080808100C0C0CEA +:10998000080C080C080C0808080814080814003013 +:109990000001010200000000AD300100153001009F +:1099A00020300700303007000607020300000000E7 +:1099B000000000003C00D8440100FFFFFF00FFFF53 +:1099C000FF00FFFFFF000000000080C90200943F7D +:1099D0000300E08B5A00053A8500C8F20600F84CF7 +:1099E000560020A73D00B74A0000B74A000000001B +:1099F0000000000000003C001445010001010102CC +:109A00000202030303040404050600002D7C000089 +:109A10000000FF00FD9500000800FF00ED9700002A +:109A200008008200CD9500000C0083004D960000D8 +:109A30000C0085002D7C00003C005045010000001A +:109A4000FF002D7C00000000FF002D7C00000000C6 +:109A5000FF003D9600000C008900D9970000080027 +:109A60008A00919500000800FF002D7C0000000096 +:109A7000FF002D7C00000000FF003C008C45010031 +:109A8000F997000008008D002D7C00000000FF0009 +:109A90002D7C00000000FF00C997000030009000FE +:109AA0001195000018009100159600000800920022 +:109AB000599500003C009300299600003C00C845E1 +:109AC000010008009400A19500000800950081970E +:109AD00000000C0096006D97000010009800000038 +:109AE00000000000FF00000000000000FF00000870 +:109AF00008080808000000100800000800103C00DA +:109B000004460100080C0C0C0C1C0C0C0800000096 +:109B10000D8B0000F58A0000E98A0000018B00002F +:109B200014080C0C100C0000B1980000800000001C +:109B300019990000810000003D7C000080000000B9 +:109B40003C00404601003D99000082000000099958 +:109B50000000830000003D7C000085000000000044 +:109B6000000000000102020104040808813780F3AC +:109B7000AAAA03000000AAAA030000F86DA96DA913 +:109B80006EA93C007C4601006EA86EA86EA86FA767 +:109B90006FA76FA76FA66FA670A670A570A4000030 +:109BA000B51B0100C91B0100E11B0100E59C000081 +:109BB000A51B0100E59C0000891B0100D59C00004D +:109BC000D59C00003C00B8460100D11A0100E51AFE +:109BD0000100051B0100251B0100B11A0100E59CD5 +:109BE00000009D1A0100D59C0000C11A01008919CE +:109BF0000100A9190100C9190100F1190100791921 +:109C00000100E59C00003C00F446010065190100DC +:109C1000D59C0000D59C0000D59C0000D59C000080 +:109C2000D59C0000D59C0000D59C0000551C01006F +:109C3000451C0100451C0100D59C0000D59C00007E +:109C4000D59C0000D59C00003C0030470100D59C0D +:109C5000000055190100E59C00004119010031196F +:109C60000100D59C000002050A00000002040A0061 +:109C70000000C5200000212100002521000039211D +:109C8000000049210000552100003C006C47010004 +:109C900061210000ED2100000D22000021220000C2 +:109CA0003D22000049220000C5220000E122000000 +:109CB000F5220000E91F0000E91F0000E91F000075 +:109CC000E91F0000E91F0000112300003C00A84725 +:109CD00001001D23000089230000A5230000B923F3 +:109CE0000000112000001D2000006D2000008D20CC +:109CF0000000B92000000001020303050606080960 +:109D000008090909C480CA8080808080D0803C0016 +:109D1000E4470100D6D9DCDFE2808080E5E880807E +:109D20008080EBEEF1F4F7FAFD0001000200030081 +:109D30000400050006000700080009000A000B00E7 +:109D40000C000E00100011001300160018001B007C +:109D50003C00204801001E00220026002B0030009D +:109D600036003C0044004C0055005F006B0078005A +:109D700086009700A900BE00D500EF00FF7F0C0011 +:109D8000060002000000FEFFFCFFFBFFFAFFF9FFE8 +:109D9000F8FF3C005C480100F7FFF6FFF5FFF4FF19 +:109DA000F3FFF2FFF1FFF0FFEFFFEEFFEDFFECFF3F +:109DB000EBFFEAFFE9FFE8FFE7FFE6FFE5FFE4FF6F +:109DC000E3FFE2FFE1FFE0FFDFFFDEFFDDFFDCFF9F +:109DD000DCFF00003C00984801000000000000008B +:109DE0000000B17C4100115A40E2B27C4100055AAA +:109DF00040E2AF7C4100F95940E2B07C4100ED59AE +:109E000040E2246701000E0000E35C6701000E00E1 +:109E100000E30A6101003C00D4480100010000E3B6 +:109E20000E610100010000E3326701000E0000E353 +:109E30006A6701000E0000E30B610100010000E30E +:109E40000F610100010000E3406701000E0000E324 +:109E5000786701000E0000E33C00104901000C612E +:109E60000100010000E310610100010000E34E6702 +:109E700001000E0000E3866701000E0000E30D61A3 +:109E80000100010000E311610100010000E3C0488E +:109E900001000400000AE04801003C004C490100B8 +:109EA0000400000A004901000400000A20490100E2 +:109EB0000400000A18670100040000E2287501018F +:109EC0007DA940E22C750100040000E2207501002C +:109ED000040000E244750100040000E23C008849EF +:109EE0000100F0590100040000E200000000000041 +:109EF00000000000000000000000247501000400C4 +:109F000000E2B87C0100040000E28DA9000001001D +:109F100000DA1D750100010000E2C46701003C0089 +:109F2000C4490100040000E200000000000000003D +:109F3000215900000E0000D9C8670100040000E2AA +:109F4000CC670100040000E2D0670100040000E2D9 +:109F500065D90000040000DAA5D90000040000DA89 +:109F60003C00004A010001590000010000DA32679C +:109F700001000E0000E36A6701000E0000E31159C2 +:109F80000000010000DA0000000000000000B048FE +:109F900001000200000AA04801000200000A404936 +:109FA00001003C003C4A01000500000A684901002C +:109FB0000900000A6C570100040000E2386101004A +:109FC000040000E20000000000000000AC6E010090 +:109FD000040000E2B06E0100040000E270570100CE +:109FE000040000E23C00784A0100E8590100080042 +:109FF00000E3DC5801144DFD40E32C59011439FDF8 +:10A0000040E3C05801000E0000E300000000000023 +:10A0100000000000000000000000647341003D2EBD +:10A0200044E27C5901143C00B44A01009D2F44E3F2 +:10A030005C5701000E0000E2792E0400010000DBF5 +:10A04000A0580100020000E3A2580100020000E352 +:10A05000A05701000E0000E3D1880100010000DAE2 +:10A060001D890100040000DA3C00F04A01009588D7 +:10A070000100040000DB312F04000E0000D9C52EC2 +:10A0800004000E0000D9686C010115D540E2C057EC +:10A090000100080000E3C8570100340000E39C6C95 +:10A0A0000100080000E3B05801033C002C4B010004 +:10A0B000E9D440E2BC580100040000E29DA3000086 +:10A0C000600000D970790100040000E27879010095 +:10A0D000040000E27C5A0100040000E25D1C000064 +:10A0E000110000D9246E0100040000E23C00684B1E +:10A0F000010018580105D5D540E3FC5701001400B4 +:10A1000000E3048E0103E5D540E3005B0100040099 +:10A1100000E2185B0100400000E2D4670100040087 +:10A1200000E28D370000040000DBBD3600003C007B +:10A13000A44B0100040000DBFC600100020000E20F +:10A14000907D0100040000E270690100040000E25B +:10A150000000000000000000B04901001A00000AE1 +:10A16000904B01000600000AA458810005FD40E361 +:10A170003C00E04B0100804A01000C00000A0C5A30 +:10A180008101252D44E3E04A01000300000A186321 +:10A190004100FDBB40E208570100010000E29C487D +:10A1A0000100040000E20000000000000000F84A86 +:10A1B00001003C001C4C01000200000ACC740100AC +:10A1C000030000E365734100A92E44E2F659010142 +:10A1D000D12C44E3084B01000400000A07000000F2 +:10A1E0000100006A284B01000200000A887D01007E +:10A1F000040000E23C00584C010000750104656F4A +:10A2000040E3BC7801000E0000E3384B010004007D +:10A21000000A0457010004000062584B01000200CC +:10A22000000A804B01000200000A684B0100030095 +:10A23000000A8C7D01003C00944C0100040000E207 +:10A24000392D0400040000DB947D0100040000E2CD +:10A2500000000000000000000000000000000000FE +:10A260000000000000000000104001000000006439 +:10A27000A84C01000400000A3C00D04C0100000082 +:10A28000000000000000C84C01000100000AD04C92 +:10A2900001000200000A0000000000000000E77A50 +:10A2A0000100010000E2E87A0100010000E2000084 +:10A2B000000000000000ED7A01003C000C4D0100A0 +:10A2C000010000E2EE7A0100010000E2000000005F +:10A2D00000000000F37A0100010000E2F47A0100BE +:10A2E000010000E20000000000000000F97A010017 +:10A2F000010000E2FA7A0100010000E23C00484D52 +:10A300000100E84C01000300000A004D01000300B9 +:10A31000000A184D01000300000A304D010003003F +:10A32000000A905C0100040000E2945C010004005B +:10A3300000E2985C0100040000E29C5C01003C002B +:10A34000844D0100040000E2A05C0100040000E272 +:10A35000A45C0100040000E2A85C0100040000E22B +:10A36000AC5C0100040000E2B05C0100040000E20B +:10A37000B45C0100040000E2B85C0100040000E2EB +:10A380003C00C04D0100BC5C0100040000E2C05C68 +:10A390000100040000E2C45C0100040000E2905CE3 +:10A3A0000100380000E3684D01000E00000AD84D9E +:10A3B0000100020000FA1261810131D540E306611B +:10A3C00001003C00FC4D0100020000E20B610100B5 +:10A3D000010000E30F610100010000E308610100DA +:10A3E000020000E2507B0100040000E200000000D7 +:10A3F00000000000384E01000E0000649C5701016F +:10A40000918841E33C00384E01006E41676FE26580 +:10A4100060696F20414200000000F04D010009001A +:10A42000000A484E01000100000AE84D0100010049 +:10A43000000A0000000000000000484D0100040078 +:10A44000000A286101013C00744E0100BDD540E2C4 +:10A450006961410085D540E230610100040000E2FD +:10A4600034610100040000E23C610100040000E2EC +:10A4700034610100040000E244610100040000E2D4 +:10A48000000000000400006A3C00B04E0100704E65 +:10A4900001000800000A18610100020000E21C61CE +:10A4A0000100040000E220610100020000E22461DA +:10A4B0000100040000E2B84E01000200000AC84E8C +:10A4C00001000200000AD84E01003C00EC4E0100E1 +:10A4D0000200000A96480100060000E3E062010065 +:10A4E000040000E2000000000400006A9B7D0100FF +:10A4F000010000629C7D010002000062607C01009E +:10A50000040000E2010000000400006A3C00284F43 +:10A5100001002D6301000100006200000000000046 +:10A520000000000000000000000049D500000E00FF +:10A5300000D9F467010002000062467D01000100BD +:10A5400000629C7C0100040000E2987C01003C0059 +:10A55000644F010002000062A07C0100060000625E +:10A56000587C010002000062647C01000600006269 +:10A570005A7C0100020000626A7C01000600006251 +:10A58000010000000400006AE4620100040000E22F +:10A590003C00A04F0100E8620100030000E200005F +:10A5A00000000400006A000000000400006A0100CE +:10A5B00000000400006A000000000400006A0000BF +:10A5C00000000400006A000000000400006A0000AF +:10A5D00000003C00DC4F01000400006A00000000A5 +:10A5E0000400006A000000000400006A000000008F +:10A5F0000400006A000000000400006A000000007F +:10A600000400006A000000000400006A000000006E +:10A610000400006A3C001850010000000000040023 +:10A62000006A000000000400006A0000000004004E +:10A63000006A000000000400006A0000000004003E +:10A64000006AF04E01002A00000A01000000040028 +:10A65000006A752A01003C00545001000C0000DB28 +:10A66000020000000400006A752A01000C0000DBF3 +:10A67000030000000400006A752A01000C0000DBE2 +:10A68000040000000400006A752A01000C0000DBD1 +:10A69000050000000400006A3C0090500100752A8B +:10A6A00001000C0000DB060000000400006A752AAF +:10A6B00001000C0000DB070000000400006A752A9E +:10A6C00001000C0000DB080000000400006A752A8D +:10A6D00001000C0000DB090000003C00CC50010030 +:10A6E0000400006A752A01000C0000DB0A0000006B +:10A6F0000400006A752A01000C0000DB0B0000005A +:10A700000400006A752A01000C0000DB0C00000048 +:10A710000400006A752A01000C0000DB3C000851AF +:10A7200001000D0000000400006A752A01000C0001 +:10A7300000DB0E0000000400006A752A01000C0016 +:10A7400000DB485001000200000A585001000200DE +:10A75000000A685001000200000A785001003C0025 +:10A76000445101000200000A885001000200000A62 +:10A77000985001000200000AA85001000200000ADF +:10A78000B85001000200000AC85001000200000A8F +:10A79000D85001000200000AE85001000200000A3F +:10A7A0003C0080510100F85001000200000A0851ED +:10A7B00001000200000A185101000200000A405086 +:10A7C00001000100000AE84E01000100000A00003B +:10A7D0000000000000000000000000000000B04E7B +:10A7E00001003C00BC5101000100000A0000000013 +:10A7F00000000000285101000E00000A00000000C7 +:10A800000000000000000000000000000000000048 +:10A810000000000000000000000000000000000038 +:10A82000000000003C00F8510100985101000C00AC +:10A83000000A504E01000400000AE04C0100010033 +:10A84000000A0000000000000000C04B01001D00D5 +:10A85000000AF85101000500000A248007000000EA +:10A8600000001D8007003C00345201000800000079 +:10A870002A8007005C00000024800700020000001E +:10A880001D800700200000002A8007006A000000E9 +:10A8900024800700020000001D8007002000000047 +:10A8A0002A8007006A0000003C007052010000018D +:10A8B00002030405060708090A0B0C0D0E0F101100 +:10A8C00012131415161718191A1B1C1D1E1F0163CD +:10A8D0000000A1630000C5630000B1620000C56311 +:10A8E0000000216300004D6300003C00AC520100F9 +:10A8F000A163000001630000A163000006050505D7 +:10A9000005050505050505050505030506070809EF +:10A910000A0A0C0D0E0F0F1011000000A5C684F8D6 +:10A9200099EE8DF60DFFBDD6B1DE54913C00E85294 +:10A93000010050600302A9CE7D5619E762B5E64DCD +:10A940009AEC458F9D1F408987FA15EFEBB2C98EAF +:10A950000BFBEC4167B3FD5FEA45BF23F75396E479 +:10A960005B9BC2751CE1AE3D6A4C5A6C417E3C005B +:10A970002453010002F54F835C68F45134D108F987 +:10A9800093E273AB53623F2A0C08529565465E9D75 +:10A990002830A1370F0AB52F090E36249B1B3DDF47 +:10A9A00026CD694ECD7F9FEA1B129E1D74582E3412 +:10A9B0003C00605301002D36B2DCEEB4FB5BF6A424 +:10A9C0004D7661B7CE7D7B523EDD715E9713F5A665 +:10A9D00068B900002CC160401FE3C879EDB6BED451 +:10A9E000468DD9674B72DE94D498E8B04A856BBB2C +:10A9F0002AC53C009C530100E54F16EDC586D79A49 +:10AA000055669411CF8A10E9060481FEF0A04478BF +:10AA1000BA25E34BF3A2FE5DC0808A05AD3FBC21A1 +:10AA2000487004F1DF63C17775AF634230201AE5E7 +:10AA30000EFD6DBF3C00D85301004C811418352623 +:10AA40002FC3E1BEA235CC88392E5793F25582FC34 +:10AA5000477AACC8E7BA2B3295E6A0C09819D19EC8 +:10AA60007FA366447E54AB3B830BCA8C29C7D36B50 +:10AA70003C2879A7E2BC3C00145401001D1676ADB9 +:10AA80003BDB56644E741E14DB920A0C6C48E4B82F +:10AA90005D9F6EBDEF43A6C4A839A43137D38BF2B6 +:10AAA00032D5438B596EB7DA8C0164B1D29CE04940 +:10AAB000B4D8FAAC07F325CF3C0050540100AFCA1C +:10AAC0008EF4E9471810D56F88F06F4A725C24380D +:10AAD000F157C773519723CB7CA19CE8213EDD96AB +:10AAE000DC61860D850F90E0427CC471AACCD890C1 +:10AAF000050601F7121CA3C25F6A3C008C540100DA +:10AB0000F9AED06991175899273AB92738D913EB7C +:10AB1000B32B3322BBD270A98907A733B62D223CB1 +:10AB2000921520C94987FFAA78507AA58F03F85952 +:10AB30008009171ADA6531D7C684B8D03C00C854EA +:10AB40000100C382B029775A111ECB7BFCA8D66DB9 +:10AB50003A2CC6A5F884EE99F68DFF0DD6BDDEB170 +:10AB6000915460500203CEA9567DE719B5624DE6B7 +:10AB7000EC9A8F451F9D8940FA87EF15B2EB3C0098 +:10AB8000045501008EC9FB0B41ECB3675FFD45EA3C +:10AB900023BF53F7E4969B5B75C2E11C3DAE4C6A44 +:10ABA0006C5A7E41F502834F685C51F4D134F90848 +:10ABB000E293AB7362532A3F080C955246659D5E43 +:10ABC0003C0040550100302837A10A0F2FB50E096F +:10ABD00024361B9BDF3DCD264E697FCDEA9F121B9D +:10ABE0001D9E5874342E362DDCB2B4EE5BFBA4F6F9 +:10ABF000764DB7617DCE527BDD3E5E711397A6F533 +:10AC0000B9683C007C5501000000C12C4060E31F86 +:10AC100079C8B6EDD4BE8D4667D9724B94DE98D410 +:10AC2000B0E8854ABB6BC52A4FE5ED1686C59AD7B5 +:10AC3000665511948ACFE9100406FE81A0F078448D +:10AC400025BA4BE33C00B8550100A2F35DFE80C07D +:10AC5000058A3FAD21BC7048F10463DF77C1AF7551 +:10AC600042632030E51AFD0EBF6D814C1814263565 +:10AC7000C32FBEE135A288CC2E39935755F2FC8202 +:10AC80007A47C8ACBAE73C00F4550100322BE69590 +:10AC9000C0A019989ED1A37F4466547E3BAB0B8322 +:10ACA0008CCAC7296BD3283CA779BCE2161DAD76A8 +:10ACB000DB3B6456744E141E92DB0C0A486CB8E4FD +:10ACC0009F5DBD6E43EFC4A63C003056010039A81D +:10ACD00031A4D337F28BD5328B436E59DAB7018C5E +:10ACE000B1649CD249E0D8B4ACFAF307CF25CAAF1F +:10ACF000F48E47E910186FD5F0884A6F5C723824DB +:10AD000057F173C79751CB23A17C3C006C560100CF +:10AD1000E89C3E2196DD61DC0D860F85E0907C424B +:10AD200071C4CCAA90D80605F7011C12C2A36A5FB1 +:10AD3000AEF969D0179199583A2727B9D938EB134A +:10AD40002BB32233D2BBA970078933A73C00A85686 +:10AD500001002DB63C221592C9208749AAFF5078E0 +:10AD6000A57A038F59F809801A1765DAD73184C696 +:10AD7000D0B882C329B05A771E117BCBA8FC6DD600 +:10AD80002C3A0400000000000000010000003C001C +:10AD9000E45601000200000003000000050000006E +:10ADA000000000000100000002000000030000009D +:10ADB00004000000010000000172657145727252CA +:10ADC0006561736F6E000000010000000500000067 +:10ADD0003C0020570100C48E0100249A01000000AD +:10ADE000000030000000249A0100A4B2010000001D +:10ADF00000006C000000A4B2010014C801000000B3 +:10AE00000000C00000001020304050BB30000100A6 +:10AE100000003C005C5701001416181A1C1E20226A +:10AE20002426282A2B2C01007017000001000000A6 +:10AE30000D250000413F0100652901000D2500009E +:10AE4000F55E0000413F0100413F010002040B0C90 +:10AE5000121618243C00985701003048606C01001D +:10AE60000000101010101010101010101010101002 +:10AE700000006400000001000000FFFFFFFF010070 +:10AE80000000000210121100000118000000020072 +:10AE90000000010000003C00D45701000000000049 +:10AEA000000000000200000004000000000000009C +:10AEB00000000000E093040040420F00000000008A +:10AEC0000100000000800000DF40CFFD0040830053 +:10AED00000000000010200003C00105801000000CA +:10AEE0000000000000000000000040008081000021 +:10AEF0008000BFFF7F7E0102000000000000000014 +:10AF0000000001000000786F010000000000B86F31 +:10AF1000010000000000F86F01003C004C580100E7 +:10AF2000000000003870010000000000787001008F +:10AF300000000000B870010000000000F87001007F +:10AF4000000000003871010000000000787101006D +:10AF50000001000090710100000100003C008858D1 +:10AF60000100A87101000001000000050A01060BA4 +:10AF700002070C03080D040900000303010100048B +:10AF800000040406161E1F0000000000000100005F +:10AF900080000000000000FFFFFF181818183C0098 +:10AFA000C458010018181818181818181818000094 +:10AFB000618B4A00618F4A00618B4A0005E3C00043 +:10AFC00005CBC00005BBC00085BAC00085A2C0008B +:10AFD0008592C000858AC000857AC0004589C0007E +:10AFE0003C00005901004571C0004569C000456141 +:10AFF000C0004559C0004551C0004549C000454109 +:10B00000C0004539C0004531C0004529C000452178 +:10B01000C000602D0600602D0600602D0600602D2A +:10B0200006003C003C590100602D06006028060027 +:10B030005026060050210600501F0600501C060036 +:10B04000501A06005018060050160600501406004C +:10B050005012060050100600500E0600500C06005C +:10B06000500A06003C00785901002B0B06001D75A4 +:10B07000C0001D75C0001D75C0001D75C0001D7588 +:10B08000C0001D75C0001D6DC000DD5BC000DD4B44 +:10B09000C000DD43C000DD3BC000DD33C000DD2B60 +:10B0A000C000DD23C0003C00B4590100DD1BC0001E +:10B0B000DD13C000DD13C000DD13C000DD13C000D0 +:10B0C000DD13C000050505040403030202010100AD +:10B0D000000005050504040303020201010000004D +:10B0E00000000000881300003C00F0590100070038 +:10B0F000000080005B004002E0FDF200B8FCA4010B +:10B1000000000F0000000F000000030B9F5F07010D +:10B110002A04210417040E040404FB03F103E803CA +:10B12000C903AA038A036B034C033C002C5A010099 +:10B130002D030E03EE02EC02010316032B03400362 +:10B1400055036A037F039403A903BE03D303E803F3 +:10B15000BE0394036A030002040607090A0B0C0DE0 +:10B160001010101010101010101000033C00685A3E +:10B17000010005080B0E1010101010101010101008 +:10B18000101010100000010000000100000000007D +:10B1900000000000000000000000000000000000AF +:10B1A00000000000000000000000000000003C0063 +:10B1B000A45A010000000000000000000000000090 +:10B1C000000000000000000000000000000000007F +:10B1D000000000000000000000000000000000006F +:10B1E000000000000000000000000000000000005F +:10B1F0003C00E05A010000000000000000000000D8 +:10B20000000000000000000000000000000000003E +:10B21000000000000000000000000000000000002E +:10B22000000000000000000000000000000000001E +:10B2300000003C001C5B010000000000000000005A +:10B2400000000000000000000000000000000000FE +:10B2500000000000000000000000000000000000EE +:10B2600000000000000000000000000000000000DE +:10B27000000000003C00585B0100000000000000DE +:10B2800000000000000000000000000000000000BE +:10B2900000000000000000000000000000000000AE +:10B2A000000000000000000000000000000000009E +:10B2B0000000000000003C00945B01000000000062 +:10B2C000000000000000000000000000000000007E +:10B2D000000000000000000000000000000000006E +:10B2E000000000000000000000000000000000005E +:10B2F00000000000000000003C00D05B01000000E6 +:10B30000000000000000000000000000000000003D +:10B31000000000000000000000000000000000002D +:10B32000000000000000000000000000000000001D +:10B33000000000000000000000003C000C5C010068 +:10B3400000000000000000000000000000000000FD +:10B3500000000000000000000000000000000000ED +:10B3600000000000000000000000000000000000DD +:10B370000000000000000000000000003C00485CED +:10B3800001000000000000000000000000000000BC +:10B3900000000000000000000000000000000000AD +:10B3A000000000000000000000000000000000009D +:10B3B00000000000000000000000000000003C0051 +:10B3C000845C01000000000000000000000000009C +:10B3D000000000000000000000000000000000006D +:10B3E000000000000000000000000000000000005D +:10B3F000000000000000000000000000000000004D +:10B400003C00C05C010000000000000000000000E3 +:10B41000000000000000000000000000000000002C +:10B42000000000000000000000000000000000001C +:10B43000000000000000000000000000000000000C +:10B4400000003C00FC5C0100000000000000000067 +:10B4500000000000000000000000000000000000EC +:10B4600000000000000000000000000000000000DC +:10B4700000000000000000000000000000000000CC +:10B48000000000003C00385D0100000000000000EA +:10B4900000000000000000000000000000000000AC +:10B4A000000000000000000000000000000000009C +:10B4B000000000000000000000000000000000008C +:10B4C0000000000000003C00745D0100000000006E +:10B4D000000000000000000000000000000000006C +:10B4E000000000000000000000000000000000005C +:10B4F000000000000000000000000000000000004C +:10B5000000000000000000003C00B05D01000000F1 +:10B51000000000000000000000000000000000002B +:10B52000000000000000000000000000000000001B +:10B53000000000000000000000000000000000000B +:10B54000000000000000000000003C00EC5D010075 +:10B5500000000000000000000000000000000000EB +:10B5600000000000000000000000000000000000DB +:10B5700000000000000000000000000000000000CB +:10B580000000000000000000000000003C00285EF9 +:10B5900001000000000000000000000000000000AA +:10B5A000000000000000000000000000000000009B +:10B5B000000000000000000000000000000000008B +:10B5C00000000000000000000000000000003C003F +:10B5D000645E0100000000000000000000000000A8 +:10B5E000000000000000000000000000000000005B +:10B5F000000000000000000000000000000000004B +:10B60000000000000000000000000000000000003A +:10B610003C00A05E010000000000000000000000EF +:10B62000000000000000000000000000000000001A +:10B63000000000000000000000000000000000000A +:10B6400000000000000000000000000000000000FA +:10B6500000003C00DC5E0100000000000000000073 +:10B6600000000000000000000000000000000000DA +:10B6700000000000000000000000000000000000CA +:10B6800000000000000000000000000000000000BA +:10B69000000000003C00185F0100000000000000F6 +:10B6A000000000000000000000000000000000009A +:10B6B000000000000000000000000000000000008A +:10B6C000000000000000000000000000000000007A +:10B6D0000000000000003C00545F0100000000007A +:10B6E000000000000000000000000000000000005A +:10B6F000000000000000000000000000000000004A +:10B700000000000000000000000000000000000039 +:10B7100000000000000000003C00905F01000000FD +:10B720000000000000000000000000000000000019 +:10B730000000000000000000000000000000000009 +:10B7400000000000000000000000000000000000F9 +:10B75000000000000000000000003C00CC5F010081 +:10B7600000000000000000000000000000000000D9 +:10B7700000000000000000000000000000000000C9 +:10B7800000000000000000000000000000000000B9 +:10B790000000000000000000000000003C00086005 +:10B7A0000100000000000000000000000000000098 +:10B7B0000000000000000000000000000000000089 +:10B7C0000000000000000000000000000000000079 +:10B7D00000000000000000000000000000003C002D +:10B7E00044600100000000000000000000000000B4 +:10B7F0000000000000000000000000000000000049 +:10B800000000000000000000000000000000000038 +:10B810000000000000000000000000000000000028 +:10B820003C008060010000000000000000000000FB +:10B830000000000000000000000000000000000008 +:10B8400000000000000000000000000000000000F8 +:10B8500000000000000000000000000000000000E8 +:10B8600000003C00BC60010000000000000000007F +:10B8700000000000000000000000000000000000C8 +:10B8800000000000000000000000000000000000B8 +:10B8900000000000000000000000000000000000A8 +:10B8A000000000003C00F860010000000000000003 +:10B8B0000000000000000000000000000000000088 +:10B8C0000000000000000000000000000000000078 +:10B8D0000000000000000000000000000000000068 +:10B8E0000000000000003C00346101000000000086 +:10B8F0000000000000000000000000000000000048 +:10B900000000000000000000000000000000000037 +:10B910000000000000000000000000000000000027 +:10B9200000000000000000003C0070610100000009 +:10B930000000000000000000000000000000000007 +:10B9400000000000000000000000000000000000F7 +:10B9500000000000000000000000000000000000E7 +:10B96000000000000000000000003C00AC6101008D +:10B9700000000000000000000000000000000000C7 +:10B9800000000000000000000000000000000000B7 +:10B9900000000000000000000000000000000000A7 +:10B9A0000000000000000000000000003C00E86112 +:10B9B0000100000000000000000000000000000086 +:10B9C0000000000000000000000000000000000077 +:10B9D0000000000000000000000000000000000067 +:10B9E00000000000000000000000000000003C001B +:10B9F00024620100000000000000000000000000C0 +:10BA00000000000000000000000000000000000036 +:10BA10000000000000000000000000000000000026 +:10BA20000000000000000000000000000000000016 +:10BA30003C00606201000000000000000000000007 +:10BA400000000000000000000000000000000000F6 +:10BA500000000000000000000000000000000000E6 +:10BA600000000000000000000000000000000000D6 +:10BA700000003C009C62010000000000000000008B +:10BA800000000000000000000000000000000000B6 +:10BA900000000000000000000000000000000000A6 +:10BAA0000000000000000000000000000000000096 +:10BAB000000000003C00D86201000000000000000F +:10BAC0000000000000000000000000000000000076 +:10BAD0000000000000000000000000000000000066 +:10BAE0000000000000000000000000000000000056 +:10BAF0000000000000003C00146301000000000092 +:10BB00000000000000000000000000000000000035 +:10BB10000000000000000000000000000000000025 +:10BB20000000000000000000000000000000000015 +:10BB300000000000000000003C0050630100000015 +:10BB400000000000000000000000000000000000F5 +:10BB500000000000000000000000000000000000E5 +:10BB600000000000000000000000000000000000D5 +:10BB7000000000000000000000003C008C63010099 +:10BB800000000000000000000000000000000000B5 +:10BB900000000000000000000000000000000000A5 +:10BBA0000000000000000000000000000000000095 +:10BBB0000000000000000000000000003C00C8631E +:10BBC0000100000000000000000000000000000074 +:10BBD0000000000000000000000000000000000065 +:10BBE0000000000000000000000000000000000055 +:10BBF00000000000000000000000000000003C0009 +:10BC000004640100000000000000000000000000CB +:10BC10000000000000000000000000000000000024 +:10BC20000000000000000000000000000000000014 +:10BC30000000000000000000000000000000000004 +:10BC40003C00406401000000000000000000000013 +:10BC500000000000000000000000000000000000E4 +:10BC600000000000000000000000000000000000D4 +:10BC700000000000000000000000000000000000C4 +:10BC800000003C007C640100000000000000000097 +:10BC900000000000000000000000000000000000A4 +:10BCA0000000000000000000000000000000000094 +:10BCB0000000000000000000000000000000000084 +:10BCC000000000003C00B86401000000000000001B +:10BCD0000000000000000000000000000000000064 +:10BCE0000000000000000000000000000000000054 +:10BCF0000000000000000000000000000000000044 +:10BD00000000000000003C00F4640100000000009E +:10BD10000000000000000000000000000000000023 +:10BD20000000000000000000000000000000000013 +:10BD30000000000000000000000000000000000003 +:10BD400000000000000000003C0030650100000021 +:10BD500000000000000000000000000000000000E3 +:10BD600000000000000000000000000000000000D3 +:10BD700000000000000000000000000000000000C3 +:10BD8000000000000000000000003C006C650100A5 +:10BD900000000000000000000000000000000000A3 +:10BDA0000000000000000000000000000000000093 +:10BDB0000000000000000000000000000000000083 +:10BDC0000000000000000000000000003C00A8652A +:10BDD0000100000000000000000000000000000062 +:10BDE0000000000000000000000000000000000053 +:10BDF0000000000000000000000000000000000043 +:10BE000000000000000000000000000000003C00F6 +:10BE1000E4650100000000000000000000000000D8 +:10BE20000000000000000000000000000000000012 +:10BE30000000000000000000000000000000000002 +:10BE400000000000000000000000000000000000F2 +:10BE50003C0020660100000000000000000000001F +:10BE600000000000000000000000000000000000D2 +:10BE700000000000000000000000000000000000C2 +:10BE800000000000000000000000000000000000B2 +:10BE900000003C005C6601000000000000000000A3 +:10BEA0000000000000000000000000000000000092 +:10BEB0000000000000000000000000000000000082 +:10BEC0000000000000000000000000000000000072 +:10BED000000000003C009866010000000000000027 +:10BEE0000000000000000000000000000000000052 +:10BEF0000000000000000000000000000000000042 +:10BF00000000000000000000000000000000000031 +:10BF10000000000000003C00D466010000000000AA +:10BF20000000000000000000000000000000000011 +:10BF30000000000000000000000000000000000001 +:10BF400000000000000000000000000000000000F1 +:10BF500000000000000000003C001067010000002D +:10BF600000000000000000000000000000000000D1 +:10BF700000000000000000000000000000000000C1 +:10BF800000000000000000000000000000000000B1 +:10BF9000000000000000000000003C004C670100B1 +:10BFA0000000000000000000000000000000000091 +:10BFB0000000000000000000000000000000000081 +:10BFC0000000000000000000000000000000000071 +:10BFD0000000000000000000000000003C00886736 +:10BFE0000100000000000000000000000000000050 +:10BFF0000000000000000000000000000000000041 +:10C000000000000000000000000000000000000030 +:10C0100000000000000000000000000000003C00E4 +:10C02000C4670100000000000000000000000000E4 +:10C030000000000000000000000000000000000000 +:10C0400000000000000000000000000000000000F0 +:10C0500000000000000000000000000000000000E0 +:10C060003C0000680100000000000000000000002B +:10C0700000000000000000000000000000000000C0 +:10C0800000000000000000000000000000000000B0 +:10C0900000000000000000000000000000000000A0 +:10C0A00000003C003C6801000000000000000000AF +:10C0B0000000000000000000000000000000000080 +:10C0C0000000000000000000000000000000000070 +:10C0D0000000000000000000000000000000000060 +:10C0E000000000003C007868010000000000000033 +:10C0F0000000000000000000000000000000000040 +:10C10000000000000000000000000000000000002F +:10C11000000000000000000000000000000000001F +:10C120000000000000003C00B468010000000000B6 +:10C1300000000000000000000000000000000000FF +:10C1400000000000000000000000000000000000EF +:10C1500000000000000000000000000000000000DF +:10C1600000000000000000003C00F068010000003A +:10C1700000000000000000000000000000000000BF +:10C1800000000000000000000000000000000000AF +:10C19000000000000000000000000000000000009F +:10C1A000000000000000000000003C002C690100BD +:10C1B000000000000000000000000000000000007F +:10C1C000000000000000000000000000000000006F +:10C1D000000000000000000000000000000000005F +:10C1E0000000000000000000000000003C00686942 +:10C1F000010000000000000000000000000000003E +:10C20000000000000000000000000000000000002E +:10C21000000000000000000000000000000000001E +:10C2200000000000000000000000000000003C00D2 +:10C23000A4690100000000000000000000000000F0 +:10C2400000000000000000000000000000000000EE +:10C2500000000000000000000000000000000000DE +:10C2600000000000000000000000000000000000CE +:10C270003C00E06901000000000000000000000038 +:10C2800000000000000000000000000000000000AE +:10C29000000000000000000000000000000000009E +:10C2A000000000000000000000000000000000008E +:10C2B00000003C001C6A01000000000000000000BB +:10C2C000000000000000000000000000000000006E +:10C2D000000000000000000000000000000000005E +:10C2E000000000000000000000000000000000004E +:10C2F000000000003C00586A01000000000000003F +:10C30000000000000000000000000000000000002D +:10C31000000000000000000000000000000000001D +:10C32000000000000000000000000000000000000D +:10C330000000000000003C00946A010000000000C2 +:10C3400000000000000000000000000000000000ED +:10C3500000000000000000000000000000000000DD +:10C3600000000000000000000000000000000000CD +:10C3700000000000000000003C00D06A0100000046 +:10C3800000000000000000000000000000000000AD +:10C39000000000000000000000000000000000009D +:10C3A000000000000000000000000000000000008D +:10C3B000000000000000000000003C000C6B0100C9 +:10C3C000000000000000000000000000000000006D +:10C3D000000000000000000000000000000000005D +:10C3E000000000000000000000000000000000004D +:10C3F0000000000000000000000000003C00486B4E +:10C40000010000000000000000000000000000002B +:10C41000000000000000000000000000000000001C +:10C42000000000000000000000000000000000000C +:10C4300000000000000000000000000000003C00C0 +:10C44000846B0100000000000000000000000000FC +:10C4500000000000000000000000000000000000DC +:10C4600000000000000000000000000000000000CC +:10C4700000000000000000000000000000000000BC +:10C480003C00C06B01000000000000000000000044 +:10C49000000000000000000000000000000000009C +:10C4A000000000000000000000000000000000008C +:10C4B000000000000000000000000000000000007C +:10C4C00000003C00FC6B01000000000000000000C8 +:10C4D000000000000000000000000000000000005C +:10C4E000000000000000000000000000000000004C +:10C4F000000000000000000000000000000000003C +:10C50000000000003C00386C01000000000000004A +:10C51000000000000000000000000000000000001B +:10C52000000000000000000000000000000000000B +:10C5300000000000000000000000000000000000FB +:10C540000000000000003C00746C010000000000CE +:10C5500000000000000000000000000000000000DB +:10C5600000000000000000000000000000000000CB +:10C5700000000000000000000000000000000000BB +:10C5800000000000000000003C00B06C0100000052 +:10C59000000000000000000000000000000000009B +:10C5A000000000000000000000000000000000008B +:10C5B000000000000000000000000000000000007B +:10C5C000000000000000000000003C00EC6C0100D6 +:10C5D000000000000000000000000000000000005B +:10C5E000000000000000000000000000000000004B +:10C5F000000000000000000000000000000000003B +:10C600000000000000000000000000003C00286D59 +:10C610000100000000000000000000000000000019 +:10C62000000000000000000000000000000000000A +:10C6300000000000000000000000000000000000FA +:10C6400000000000000000000000000000003C00AE +:10C65000646D010000000000000000000000000008 +:10C6600000000000000000000000000000000000CA +:10C6700000000000000000000000000000000000BA +:10C6800000000000000000000000000000000000AA +:10C690003C00A06D01000000000000000000000050 +:10C6A000000000000000000000000000000000008A +:10C6B000000000000000000000000000000000007A +:10C6C000000000000000000000000000000000006A +:10C6D00000003C00DC6D01000000000000000000D4 +:10C6E000000000000000000000000000000000004A +:10C6F000000000000000000000000000000000003A +:10C700000000000000000000000000000000000029 +:10C71000000000003C00186E010000000000000056 +:10C720000000000000000000000000000000000009 +:10C7300000000000000000000000000000000000F9 +:10C7400000000000000000000000000000000000E9 +:10C750000000000000003C00546E010000000000DA +:10C7600000000000000000000000000000000000C9 +:10C7700000000000000000000000000000000000B9 +:10C7800000000000000000000000000000000000A9 +:10C7900000000000000000003C00906E010000005E +:10C7A0000000000000000000000000000000000089 +:10C7B0000000000000000000000000000000000079 +:10C7C0000000000000000000000000000000000069 +:10C7D000000000000000000000003C00CC6E0100E2 +:10C7E0000000000000000000000000000000000049 +:10C7F0000000000000000000000000000000000039 +:10C800000000000000000000000000000000000028 +:10C810000000000000000000000000003C00086F65 +:10C820000100000000000000000000000000000007 +:10C8300000000000000000000000000000000000F8 +:10C8400000000000000000000000000000000000E8 +:10C8500000000000000000000000000000003C009C +:10C86000446F010000000000000000000000000014 +:10C8700000000000000000000000000000000000B8 +:10C8800000000000000000000000000000000000A8 +:10C890000000000000000000000000000000000098 +:10C8A0003C00806F0100000000000000000000005C +:10C8B0000000000000000000000000000000000078 +:10C8C0000000000000000000000000000000000068 +:10C8D0000000000000000000000000000000000058 +:10C8E00000003C00BC6F01000000000000000000E0 +:10C8F0000000000000000000000000000000000038 +:10C900000000000000000000000000000000000027 +:10C910000000000000000000000000000000000017 +:10C92000000000003C00F86F010000000000000063 +:10C9300000000000000000000000000000000000F7 +:10C9400000000000000000000000000000000000E7 +:10C9500000000000000000000000000000000000D7 +:10C960000000000000003C003470010000000000E6 +:10C9700000000000000000000000000000000000B7 +:10C9800000000000000000000000000000000000A7 +:10C990000000000000000000000000000000000097 +:10C9A00000000000000000003C007070010000006A +:10C9B0000000000000000000000000000000000077 +:10C9C0000000000000000000000000000000000067 +:10C9D0000000000000000000000000000000000057 +:10C9E000000000000000000000003C00AC700100EE +:10C9F0000000000000000000000000000000000037 +:10CA00000000000000000000000000000000000026 +:10CA10000000000000000000000000000000000016 +:10CA20000000000000000000000000003C00E87072 +:10CA300001000000000000000000000000000000F5 +:10CA400000000000000000000000000000000000E6 +:10CA500000000000000000000000000000000000D6 +:10CA600000000000000000000000000000003C008A +:10CA70002471010000000000000000000000000020 +:10CA800000000000000000000000000000000000A6 +:10CA90000000000000000000000000000000000096 +:10CAA0000000000000000000000000000000000086 +:10CAB0003C00607101000000000000000000000068 +:10CAC0000000000000000000000000000000000066 +:10CAD0000000000000000000000000000000000056 +:10CAE0000000000000000000000000000000000046 +:10CAF00000003C009C7101000000000000000000EC +:10CB00000000000000000000000000000000000025 +:10CB10000000000000000000000000000000000015 +:10CB20000000000000000000000000000000000005 +:10CB3000000000003C00D87101000000000000006F +:10CB400000000000000000000000000000000000E5 +:10CB500000000000000000000000000000000000D5 +:10CB600000000000000000000000000000000000C5 +:10CB70000000000000003C001472010000000000F2 +:10CB800000000000000000000000000000000000A5 +:10CB90000000000000000000000000000000000095 +:10CBA0000000000000000000000000000000000085 +:10CBB00000000000000000003C0050720100000076 +:10CBC0000000000000000000000000000000000065 +:10CBD0000000000000000000000000000000000055 +:10CBE0000000000000000000000000000000000045 +:10CBF000000000000000000000003C008C720100FA +:10CC00000000000000000000000000000000000024 +:10CC10000000000000000000000000000000000014 +:10CC20000000000000000000000000000000000004 +:10CC30000000000000000000000000003C00C8727E +:10CC400001000000000000000000000000000000E3 +:10CC500000000000000000000000000000000000D4 +:10CC600000000000000000000000000000000000C4 +:10CC700000000000000000000000000000003C0078 +:10CC8000047301000000000000000000000000002C +:10CC90000000000000000000000000000000000094 +:10CCA0000000000000000000000000000000000084 +:10CCB0000000000000000000000000000000000074 +:10CCC0003C00407301000000000000000000000074 +:10CCD0000000000000000000000000000000000054 +:10CCE0000000000000000000000000000000000044 +:10CCF0000000000000000000000000000000000034 +:10CD000000003C007C7301000000000000000000F7 +:10CD10000000000000000000000000000000000013 +:10CD20000000000000000000000000000000000003 +:10CD300000000000000000000000000000000000F3 +:10CD4000000000003C00B87301000000000000007B +:10CD500000000000000000000000000000000000D3 +:10CD600000000000000000000000000000000000C3 +:10CD700000000000000000000000000000000000B3 +:10CD80000000000000003C00F473010000000000FF +:10CD90000000000000000000000000000000000093 +:10CDA0000000000000000000000000000000000083 +:10CDB0000000000000000000000000000000000073 +:10CDC00000000000000000003C0030740100000082 +:10CDD0000000000000000000000000000000000053 +:10CDE0000000000000000000000000000000000043 +:10CDF0000000000000000000000000000000000033 +:10CE0000000000000000000000003C006C74010005 +:10CE10000000000000000000000000000000000012 +:10CE20000000000000000000000000000000000002 +:10CE300000000000000000000000000000000000F2 +:10CE40000000000000000000000000003C00A8748A +:10CE500001000000000000000000000000000000D1 +:10CE600000000000000000000000000000000000C2 +:10CE700000000000000000000000000000000000B2 +:10CE800000000000000000000000000000003C0066 +:10CE9000E474010000000000000000000000000039 +:10CEA0000000000000000000000000000000000082 +:10CEB0000000000000000000000000000000000072 +:10CEC0000000000000000000000000000000000062 +:10CED0003C00207501000000000000000000000080 +:10CEE0000000000000000000000000000000000042 +:10CEF0000000000000000000000000000000000032 +:10CF00000000000000000000000000000000000021 +:10CF100000003C005C750100000000000000000003 +:10CF20000000000000000000000000000000000001 +:10CF300000000000000000000000000000000000F1 +:10CF400000000000000000000000000000000000E1 +:10CF5000000000003C009875010000000000000087 +:10CF600000000000000000000000000000000000C1 +:10CF700000000000000000000000000000000000B1 +:10CF800000000000000000000000000000000000A1 +:10CF90000000000000003C00D4750100000000000B +:10CFA0000000000000000000000000000000000081 +:10CFB0000000000000000000000000000000000071 +:10CFC0000000000000000000000000000000000061 +:10CFD00000000000000000003C001076010000008E +:10CFE0000000000000000000000000000000000041 +:10CFF0000000000000000000000000000000000031 +:10D000000000000000000000000000000000000020 +:10D01000000000000000000000003C004C76010011 +:10D020000000000000000000000000000000000000 +:10D0300000000000000000000000000000000000F0 +:10D0400000000000000000000000000000000000E0 +:10D050000000000000000000000000003C00887696 +:10D0600001000000000000000000000000000000BF +:10D0700000000000000000000000000000000000B0 +:10D0800000000000000000000000000000000000A0 +:10D0900000000000000000000000000000003C0054 +:10D0A000C476010000000000000000000000000045 +:10D0B0000000000000000000000000000000000070 +:10D0C0000000000000000000000000000000000060 +:10D0D0000000000000000000000000000000000050 +:10D0E0003C0000770100000000000000000000008C +:10D0F0000000000000000000000000000000000030 +:10D10000000000000000000000000000000000001F +:10D11000000000000000000000000000000000000F +:10D1200000003C003C77010000000000000000000F +:10D1300000000000000000000000000000000000EF +:10D1400000000000000000000000000000000000DF +:10D1500000000000000000000000000000000000CF +:10D16000000000003C007877010000000000000093 +:10D1700000000000000000000000000000000000AF +:10D18000000000000000000000000000000000009F +:10D19000000000000000000000000000000000008F +:10D1A0000000000000003C00B47701000000000017 +:10D1B000000000000000000000000000000000006F +:10D1C000000000000000000000000000000000005F +:10D1D000000000000000000000000000000000004F +:10D1E00000000000000000003C00F077010000009B +:10D1F000000000000000000000000000000000002F +:10D20000000000000000000000000000000000001E +:10D21000000000000000000000000000000000000E +:10D22000000000000000000000003C002C7801001D +:10D2300000000000000000000000000000000000EE +:10D2400000000000000000000000000000000000DE +:10D2500000000000000000000000000000000000CE +:10D260000000000000000000000000003C006878A2 +:10D2700001000000000000000000000000000000AD +:10D28000000000000000000000000000000000009E +:10D29000000000000000000000000000000000008E +:10D2A00000000000000000000000000000003C0042 +:10D2B000A478010000000000000000000000000051 +:10D2C000000000000000000000000000000000005E +:10D2D000000000000000000000000000000000004E +:10D2E000000000000000000000000000000000003E +:10D2F0003C00E07801000000000000000000000099 +:10D30000000000000000000000000000000000001D +:10D31000000000000000000000000000000000000D +:10D3200000000000000000000000000000000000FD +:10D3300000003C001C79010000000000000000001B +:10D3400000000000000000000000000000000000DD +:10D3500000000000000000000000000000000000CD +:10D3600000000000000000000000000000000000BD +:10D37000000000003C00587901000000000000009F +:10D38000000000000000000000000000000000009D +:10D39000000000000000000000000000000000008D +:10D3A000000000000000000000000000000000007D +:10D3B0000000000000003C00947901000000000023 +:10D3C000000000000000000000000000000000005D +:10D3D000000000000000000000000000000000004D +:10D3E000000000000000000000000000000000003D +:10D3F00000000000000000003C00D07901000000A7 +:10D40000000000000000000000000000000000001C +:10D41000000000000000000000000000000000000C +:10D4200000000000000000000000000000000000FC +:10D43000000000000000000000003C000C7A010029 +:10D4400000000000000000000000000000000000DC +:10D4500000000000000000000000000000000000CC +:10D4600000000000000000000000000000000000BC +:10D470000000000000000000000000003C00487AAE +:10D48000010000000000000000000000000000009B +:10D49000000000000000000000000000000000008C +:10D4A000000000000000000000000000000000007C +:10D4B00000000000000000000000000000003C0030 +:10D4C000847A01000000000000000000000000005D +:10D4D000000000000000000000000000000000004C +:10D4E000000000000000000000000000000000003C +:10D4F000000000000000000000000000000000002C +:10D500003C00C07A010000000000000000000000A4 +:10D51000000000000000000000000000000000000B +:10D5200000000000000000000000000000000000FB +:10D5300000000000000000000000000000000000EB +:10D5400000003C00FC7A0100000000000000000028 +:10D5500000000000000000000000000000000000CB +:10D5600000000000000000000000000000000000BB +:10D5700000000000000000000000000000000000AB +:10D58000000000003C00387B0100000000000000AB +:10D59000000000000000000000000000000000008B +:10D5A000000000000000000000000000000000007B +:10D5B000000000000000000000000000000000006B +:10D5C0000000000000003C00747B0100000000002F +:10D5D000000000000000000000000000000000004B +:10D5E000000000000000000000000000000000003B +:10D5F000000000000000000000000000000000002B +:10D6000000000000000000003C00B07B01000000B2 +:10D61000000000000000000000000000000000000A +:10D6200000000000000000000000000000000000FA +:10D6300000000000000000000000000000000000EA +:10D64000000000000000000000003C00EC7B010036 +:10D6500000000000000000000000000000000000CA +:10D6600000000000000000000000000000000000BA +:10D6700000000000000000000000000000000000AA +:10D680000000000000000000000000003C00287CBA +:10D690000100000000000000000000000000000089 +:10D6A000000000000000000000000000000000007A +:10D6B000000000000000000000000000000000006A +:10D6C00000000000000000000000000000003C001E +:10D6D000647C010000000000000000000000000069 +:10D6E000000000000000000000000000000000003A +:10D6F000000000000000000000000000000000002A +:10D700000000000000000000000000000000000019 +:10D710003C00A07C010000000000000000000000B0 +:10D7200000000000000000000000000000000000F9 +:10D7300000000000000000000000000000000000E9 +:10D7400000000000000000000000000000000000D9 +:10D7500000003C00DC7C0100000000000000000034 +:10D7600000000000000000000000000000000000B9 +:10D7700000000000000000000000000000000000A9 +:10D780000000000000000000000000000000000099 +:10D79000000000003C00187D0100000000000000B7 +:10D7A0000000000000000000000000000000000079 +:10D7B0000000000000000000000000000000000069 +:10D7C0000000000000000000000000000000000059 +:10D7D0000000000000003C00547D0100000000003B +:10D7E0000000000000000000000000000000000039 +:10D7F0000000000000000000000000000000000029 +:10D800000000000000000000000000000000000018 +:10D8100000000000000000003C00907D01000000BE +:10D8200000000000000000000000000000000000F8 +:10D8300000000000000000000000000000000000E8 +:10D8400000000000000000000000000000000000D8 +:10D85000000000000000000000003C00CC7D010042 +:10D8600000000000000000000000000000000000B8 +:10D8700000000000000000000000000000000000A8 +:10D880000000000000000000000000000000000098 +:10D890000000000000000000000000003C00087EC6 +:10D8A0000100000000000000000000000000000077 +:10D8B0000000000000000000000000000000000068 +:10D8C0000000000000000000000000000000000058 +:10D8D00000000000000000000000000000003C000C +:10D8E000447E010000000000000000000000000075 +:10D8F0000000000000000000000000000000000028 +:10D900000000000000000000000000000000000017 +:10D910000000000000000000000000000000000007 +:10D920003C00807E010000000000000000000000BC +:10D9300000000000000000000000000000000000E7 +:10D9400000000000000000000000000000000000D7 +:10D9500000000000000000000000000000000000C7 +:10D9600000003C00BC7E0100000000000000000040 +:10D9700000000000000000000000000000000000A7 +:10D980000000000000000000000000000000000097 +:10D990000000000000000000000000000000000087 +:10D9A000000000003C00F87E0100000000000000C4 +:10D9B0000000000000000000000000000000000067 +:10D9C0000000000000000000000000000000000057 +:10D9D0000000000000000000000000000000000047 +:10D9E0000000000000003C00347F01000000000047 +:10D9F0000000000000000000000000000000000027 +:10DA00000000000000000000000000000000000016 +:10DA10000000000000000000000000000000000006 +:10DA200000000000000000003C00707F01000000CA +:10DA300000000000000000000000000000000000E6 +:10DA400000000000000000000000000000000000D6 +:10DA500000000000000000000000000000000000C6 +:10DA6000000000000000000000003C00AC7F01004E +:10DA700000000000000000000000000000000000A6 +:10DA80000000000000000000000000000000000096 +:10DA90000000000000000000000000000000000086 +:10DAA0000000000000000000000000003C00E87FD3 +:10DAB0000100000000000000000000000000000065 +:10DAC0000000000000000000000070B50125074EB6 +:10DAD000AD0375610A20FAF76CFF30688003C40F4C +:10DAE000B5610A20FAF765FF201C70BD00003C00FC +:10DAF000248001001000070070B501256D04002886 +:10DB0000104C01D0656100E0A56160682843606049 +:10DB1000A0682843A0600A20FAF74EFF0126B6034A +:10DB200066610A20FAF748FFA6610120FAF744FF70 +:10DB30003C0060800100A068A843A06060682843A2 +:10DB400060600A20FAF73BFF70BD1000070070B557 +:10DB50000125104C6D046561606828436060A06811 +:10DB60002843A060EE08A6610A20FAF728FF666144 +:10DB70000A203C009C800100FAF724FFA5610A20DE +:10DB8000FAF720FFA6610A20FAF71CFFA068A84355 +:10DB9000A06060682843606070BD0000100007004E +:10DBA00070B501250E4C6D04A56160682843606066 +:10DBB000A06828433C00D8800100A060EE086661A0 +:10DBC0000A20FAF702FF65610A20FAF7FEFEA66155 +:10DBD0000A20FAF7FAFEA068A843A060606828430C +:10DBE000606070BD00001000070070B5051C0024C7 +:10DBF0008026281C30403C0014810100FFF788FF7C +:10DC00006806050E0134082CF6DBFFF76DFF70BDCA +:10DC100080B5021C0B218020FBF73EFB80BD00007D +:10DC2000F8B512480025071CFF37061D0137281CD0 +:10DC3000F9F7EAFD041C17D03C005081010020696F +:10DC4000002804D0E06A002803D00020E062251CF0 +:10DC5000F0E77B68002B05D0321C211C44310120E9 +:10DC6000E8F734F9201C4430F9F737FEE2E7F8BD55 +:10DC7000000020F70100114870B53C008C810100C4 +:10DC80000068FF281DD1FF203230FAF7A7FE0E4DA5 +:10DC90006C680E48FAF7A2FE6868241A012000F0AA +:10DCA00095FD6E680948FAF799FE6868211C0A39E3 +:10DCB000301A884202D30A34A04202D93C00C881FB +:10DCC0000100002000F085FD70BDF4740100000328 +:10DCD00007009303000070B500F04DF80120EDF748 +:10DCE00034F9114D182168600020E9F7F2F9286035 +:10DCF00004688020208000260622FF21201D3C0091 +:10DD0000048201006680E8F70BFA201C0A300949FA +:10DD1000F2F72EFD201C10300749F2F729FDE682AC +:10DD200003CDE9F7F9F8024901201439886070BD84 +:10DD300090D901001261010024F701007047000032 +:10DD40003C004082010010B5064C00220220E16830 +:10DD5000F0F711FB6078022801D100F01AF910BD2C +:10DD6000000040D9010080B5A120FFF750FF80BD21 +:10DD7000000040000E21084080B5A030FFF747FFAB +:10DD800080BD3C007C82010010B5054C2068002855 +:10DD900004D0E9F787F900202060606010BD000022 +:10DDA00090D9010010B5074C0121074A21610220DA +:10DDB0001070616100F0D6FC00F0C8FB201CEDF78C +:10DDC0009FFA10BD3C00B882010020F701007CD909 +:10DDD000010070B5021C081C0225002A134E14D045 +:10DDE00000F011FC3078012108433070307828436E +:10DDF000307000207D214901B279920700D50134AD +:10DE000001308842F8DB3C00F4820100201C70BD28 +:10DE10003078A843307030784008400030700549B1 +:10DE200048680122120490434860012070BD000040 +:10DE3000880007006C000700FFB509AE002060CE27 +:10DE4000286000239C4630603C0030830100694616 +:10DE500001AA17E0DB070ED5124B1C56631C0AD033 +:10DE600001272B68A7403B432B601368DB0702D5D3 +:10DE700033683B4333600B685B080B6013685B08D7 +:10DE8000136001300B68002B01D03C006C83010053 +:10DE90002228E2D3634601332020022B9C4602A9AC +:10DEA00003AAF2DBFFBD0000B48D0100B0B5041C75 +:10DEB0000D1C1E2100220320054BF9F7B3F8211C8D +:10DEC0000320F9F7F5F8291C0320F9F73C00A88393 +:10DED0000100F1F8B0BD80380100B0B51C4C1C4DFC +:10DEE0002178022909D0032919D004291FD0052936 +:10DEF00023D1002000F017FB23E0686114481C3098 +:10DF0000C16802698918C16000F02FFBE0683C001D +:10DF1000E48301000138E06016D13220E060FFF7B1 +:10DF2000A3FE11E0002000F001FB00F02DFC012019 +:10DF3000207009E0002000F0F9FAFFF745FF03E048 +:10DF400005210B20E8F746FF68696168E7F7DDFF08 +:10DF50003C0020840100B0BD00007CD9010020F706 +:10DF60000100F7B5041C171CFFF721FE200AFFF77C +:10DF700018FF2006000EFFF762FEFFF718FEA12033 +:10DF8000FFF75DFE002516E0002000244006060E87 +:10DF9000FFF73C005C840100D1FD0006000E304319 +:10DFA0000134082CF5DB291C019A0135BD4250547F +:10DFB00001DA002000E00120FFF7D4FDBD42E6DBDE +:10DFC000FFF71EFEFEBD000080B5FFF719FE092118 +:10DFD000890300223C00988401000220F0F7E9F94F +:10DFE00080BD0921890380B500220220F0F7C9F91C +:10DFF000012109488903816142680A4342608268BD +:10E000001143816001214904816182688A438260F1 +:10E010004268114341603C00D484010080BD00008F +:10E0200010000700F0B5041CC0687B4E056830780E +:10E0300085B0012801D0022872D100212069F2F7B1 +:10E0400041F97649F2F724FC002869D0201C2030E1 +:10E05000417A082902D1724A3C0010850100002152 +:10E060005161007A226A1821F2F7C9FBE16A371C74 +:10E0700040186C49029030780E1CFF360A1D01369C +:10E080000128049207D0654A02991C32281CEDF73A +:10E09000E2FB00286BD0322120693C004C85010056 +:10E0A000F2F716F9019020690121F2F711F9011C2C +:10E0B0005E480123019AEDF707FC002804D15B4874 +:10E0C000EDF792FA0021B96056481C308168EAF7F2 +:10E0D00019FC201C143003900499F2F73C00888549 +:10E0E0000100D5FB002805D10022BA6004980399ED +:10E0F000F2F76BFB4F4928890988884203D0002238 +:10E100004C49BA60088003212069F2F7E4F800283E +:10E1100010D04649827820310B7994469A423C00CF +:10E12000C485010009D00022BA6062460A71807875 +:10E130000121F3F705F900E077E006212069F2F705 +:10E14000CDF8002808D081783A4840308288914242 +:10E1500002D00022BA6081802A212069F2F7BEF83D +:10E160003C000086010000280DD08078F169334A18 +:10E17000814208D00021B960F061101CEDF709FB65 +:10E180002F48EDF7FAFA38783B1C012817D1022006 +:10E1900018702A4F01233B61274B03CD1C33083DE8 +:10E1A000029A3C003C860100EDF7B0FA381CEDF70E +:10E1B000D7F83268002A03D000210120E7F7C4FE17 +:10E1C00000F0F4F9201CF9F7D5FB071C11D1201C35 +:10E1D000F9F788FB071C2ED001233B616889402199 +:10E1E000C85373683C0078860100002B04D0211CC2 +:10E1F0000020049AE7F7ACFE0123FB62206932217C +:10E20000F2F775F8051C20690121F2F770F80E4E3F +:10E21000011C2A1C301CEDF7C0FB00280ED1322156 +:10E220002069F2F764F83C00B4860100051C2069FF +:10E230000121F2F75FF8011C3B1C2A1C301CEDF792 +:10E24000D7FA05B0F0BD00007CD9010040F801000C +:10E2500020F70100021C081C802A80B506D0812A04 +:10E2600003D004210B20E8F73C00F0860100D9FD23 +:10E2700080BDFFF75CFE80BD000003488178FF2968 +:10E2800001D0007970470020704780F8010030B558 +:10E2900089B000930E4D131C041C2A1CECF725FDBD +:10E2A00001A906A8A268ECF7CEFE3C002C8701006D +:10E2B00001AA06A9281C636AEDF744FA041C012888 +:10E2C00004D1281CEDF72CF800F04AF8201C09B006 +:10E2D00030BD000020F7010080B5EDF72BF800F00D +:10E2E0007DF80248EDF702FA80BD00003C00688727 +:10E2F000010020F7010080B500280BD10648EDF79A +:10E30000F8F900F06EF80120EDF7EBFA034903206D +:10E31000F9F735FE80BD20F701006D870100B0B52B +:10E32000104D041C131C2A1C88B0ECF702FD3C00A5 +:10E33000A4870100211C0A310622281DE7F7A4FE4C +:10E34000694605A86269ECF787FE281CECF7EEFF2A +:10E350007F23DB43281C6A4605A9EDF7F9F900F095 +:10E360001DF808B0B0BD000020F701000A4880B5D4 +:10E370003C00E08701000178002906D0022901D085 +:10E38000052907D10321017080BD0121017000F032 +:10E390002EFA80BD03210B20E8F74FFD80BD7CD90C +:10E3A0000100094980B50878002806D0022801D06C +:10E3B00005283C001C88010005D10420087080BDA0 +:10E3C000FFF738FD80BD02210B20E8F739FD80BD45 +:10E3D0007CD9010080B502210B20044AFAF782FFA4 +:10E3E000F6F786FD0249086180BD0000DD86010068 +:10E3F0007CD901003C00588801000C4880B50178A8 +:10E4000006290ED202A35B5C5B009F44000006035A +:10E4100007070706002000F0C2F880BD0521017043 +:10E4200080BD04210B20E8F70EFD80BD00007CD9E3 +:10E430000100704700003C009488010010B50D4BAE +:10E44000041C181C1030002C08D0DB885B045B0C0B +:10E450000B80807B48800420108008E0DA8801244B +:10E46000E40322400C882243DA804988817301202A +:10E4700010BD0000300007003C00D088010070B5DE +:10E48000104E021C0023F056002A02D0087001240E +:10E4900015E00023CD56854201D1012070BD281C16 +:10E4A00000F05FF9041C0AD00748357000680028A6 +:10E4B00003D000210A20F9F728FD3C000C89010057 +:10E4C00000F016FA201C70BDF46B01003CD901006D +:10E4D000031C081C002B80B506D0042111800422E7 +:10E4E0000449E7F7E3FD02E0006800F0CFF90120FE +:10E4F00080BD0000F474010010B5FFF73C004889AE +:10E50000010097FBFFF789FC041CFFF7B8FBFFF73E +:10E5100084FC002C02D1012800D110BD002010BDC8 +:10E520000000F8B5204F041C78780E1C02282ED06D +:10E530001E4AF968916114231D49584340183C0054 +:10E5400084890100417BB878F8F714FE00F08AF95D +:10E55000002504E00021B878F8F70CFE0135787842 +:10E560001423144958434018807AA842F2DC00254D +:10E5700008E00021B878F8F7FDFD0F48006820702A +:10E580003C00C089010001340135B542F4DB094A81 +:10E59000F86850617878022806D1B868321C211CCE +:10E5A0000004000CFFF725FDB8688019B860F8BDBD +:10E5B000000040D9010010000700648D01003020E8 +:10E5C00007003C00FC89010070B5061C0C4D0024BE +:10E5D0002C70FFF739FC0A4818211C30AC60E7F7B3 +:10E5E00043FD08484461F9F763F9002E06D1064857 +:10E5F0002969F6F7A7FC0020ECF7B0FE70BD00001B +:10E600007CD901003C00388A010020F70100346306 +:10E61000010030B5124C85B0206800281CD00F488E +:10E6200014388068002801D1FFF7C1FB206800235F +:10E63000006801AA04300121ECF7D1FD0849084A1D +:10E6400008310C3100923C00748A010003C900AB10 +:10E650004518997B019A20682B1CF2F72BFE05B018 +:10E6600030BD000090D901002981010010B5134C84 +:10E67000142360705843124BC1188A88E2801858DE +:10E68000E060087AA070FF283C00B08A010012D038 +:10E69000002208210D4BF8F722FD00220220E1683C +:10E6A000EFF7BDFE0A49E06848614A6802434A60E4 +:10E6B0008A68104388606078022801D1FFF7DFFC88 +:10E6C00010BD40D90100648D01003C00EC8A0100BE +:10E6D000B80B000010000700FE300006000E0621F7 +:10E6E000154B4143585C82061448920E4271C9187A +:10E6F0004A78D206D20E027142780C231A43427035 +:10E7000042788B78920892009B079B0F3C00288BE5 +:10E7100001001A4342700278C0239A4340320270CB +:10E72000027838231A4302700278C97804239A4386 +:10E730008900194011430170012070470000D88DF5 +:10E740000100880007008FB50020029003903C0074 +:10E75000648B0100074802AA03A900910192438932 +:10E76000028903C8FFF7D4FB03980299FFF704FC62 +:10E770008FBD0000048E010008494A78002A03D1A9 +:10E78000888000208860704714235A43044BD218B5 +:10E790003C00A08B0100D2884243C88842438A6073 +:10E7A000704740D90100648D0100F8B5254E041C66 +:10E7B000307A400840003072B07A0020B0720127F1 +:10E7C000012C204D01D0FC4213D1307B38433073F3 +:10E7D00000223C00DC8B0100211C0020FFF76EFBB7 +:10E7E000631C01D13F21E973B17AA0221143B172B8 +:10E7F000317A39433172F8BD307B400840003073C4 +:10E800000122211C0120FFF759FB01200021E9739F +:10E81000B17A02223C00188C01001143B172B17A26 +:10E8200004221143B172B17A30221143B172317AAC +:10E830003943317208494A6880239A434A600A681A +:10E840001A430A60317B39433173D7E700008800EF +:10E850000700400007003C00548C01006C000700DA +:10E86000B0B50E4D0E482969F6F79EFB0D48ECF742 +:10E8700093FD0D48094C00881C34A082F1F75AFF23 +:10E880002061FAF797F8021C231C00210020ECF706 +:10E890008BFF3220E860FFF73C00908C0100A5FA66 +:10E8A000B0BD7CD9010034630100DD84010020F794 +:10E8B0000100B0B50A4D687800280ED0142308492D +:10E8C00058434018447A06E0A868E0400106090E63 +:10E8D000A878F8F776FC083CF6D53C00CC8C010013 +:10E8E000B0BD000040D90100648D0100011C144836 +:10E8F000B0B501601348027F02239A430277027F7A +:10E90000012422430277104D00290CD0012200215E +:10E910000320EFF79FFD0D49487CA0433C00088D84 +:10E9200001004874687A20436872B0BD017F2143BA +:10E930000177687A400840006872012200210320B4 +:10E94000EFF7B1FDB0BDF47401003000070088009E +:10E9500007001000070010B5074C211C00203C00E8 +:10E96000448D0100F9F756FB05480023C0560128E5 +:10E9700003DD211C0020F9F719FB10BD651A00000A +:10E98000F46B01000000020008010100021804FFFE +:10E9900082E8D78000000000008000000001000134 +:10E9A0003C00808D010000180006020305010100F3 +:10E9B00000000000000080000100FF1000FFFFFFCA +:10E9C000FFFFFF0000000000020020000100021015 +:10E9D0000006020305010100000004050607080CFB +:10E9E0000D0E3C00BC8D0100FF1415161718191BE5 +:10E9F0001C1DFF1A1113120F10FF0200FF01030963 +:10EA00000A0B0000300D02000000280E0300000079 +:10EA10001E0C00000000300D020100001E0C000161 +:10EA20000000230D3C00F88D0100020100001D0DC7 +:10EA3000020100000000FFFEFB6D000080000200EC +:10EA400000000000000000000000000000000000C6 +:10EA500000000000000000000000000000000000B6 +:10EA60000000000000003C00348E010000000000A7 +:10EA70000000000000000000000000000000000096 +:10EA80000000000000000000000000000000000086 +:10EA90000000000000000000000000000000000076 +:10EAA00000000000000000003C00708E010000002B +:10EAB0000000000000000000000000000000000056 +:10EAC0000000000000000000000000000000000046 +:10EAD0000000000000000000000000000000000036 +:10EAE000000000000000000000003C00AC8E0100AF +:10EAF0000000000000000000000000000000000016 +:10EB00000000000000000000000000000000000005 +:10EB100000000000000000000000000000000000F5 +:10EB20000000000000000000000000003C00E88E33 +:10EB300001000000000000000000000000000000D4 +:10EB400000000000000000000000000000000000C5 +:10EB500000000000000000000000000000000000B5 +:10EB600000000000000000000000000000003C0069 +:10EB7000248F0100000000000000000000000000E1 +:10EB80000000000000000000000000000000000085 +:10EB90000000000000000000000000000000000075 +:10EBA0000000000000000000000000000000000065 +:10EBB0003C00608F01000000000000000000000029 +:10EBC0000000000000000000000000000000000045 +:10EBD0000000000000000000000000000000000035 +:10EBE0000000000000000000000000000000000025 +:10EBF00000003C009C8F01000000000000000000AD +:10EC00000000000000000000000000000000000004 +:10EC100000000000000000000000000000000000F4 +:10EC200000000000000000000000000000000000E4 +:10EC3000000000003C00D88F010000000000000030 +:10EC400000000000000000000000000000000000C4 +:10EC500000000000000000000000000000000000B4 +:10EC600000000000000000000000000000000000A4 +:10EC70000000000000003C001490010000000000B3 +:10EC80000000000000000000000000000000000084 +:10EC90000000000000000000000000000000000074 +:10ECA0000000000000000000000000000000000064 +:10ECB00000000000000000003C0050900100000037 +:10ECC0000000000000000000000000000000000044 +:10ECD0000000000000000000000000000000000034 +:10ECE0000000000000000000000000000000000024 +:10ECF000000000000000000000003C008C900100BB +:10ED00000000000000000000000000000000000003 +:10ED100000000000000000000000000000000000F3 +:10ED200000000000000000000000000000000000E3 +:10ED30000000000000000000000000003C00C8903F +:10ED400001000000000000000000000000000000C2 +:10ED500000000000000000000000000000000000B3 +:10ED600000000000000000000000000000000000A3 +:10ED700000000000000000000000000000003C0057 +:10ED800004910100000000000000000000000000ED +:10ED90000000000000000000000000000000000073 +:10EDA0000000000000000000000000000000000063 +:10EDB0000000000000000000000000000000000053 +:10EDC0003C00409101000000000000000000000035 +:10EDD0000000000000000000000000000000000033 +:10EDE0000000000000000000000000000000000023 +:10EDF0000000000000000000000000000000000013 +:10EE000000003C007C9101000000000000000000B8 +:10EE100000000000000000000000000000000000F2 +:10EE200000000000000000000000000000000000E2 +:10EE300000000000000000000000000000000000D2 +:10EE4000000000003C00B89101000000000000003C +:10EE500000000000000000000000000000000000B2 +:10EE600000000000000000000000000000000000A2 +:10EE70000000000000000000000000000000000092 +:10EE80000000000000003C00F491010000000000C0 +:10EE90000000000000000000000000000000000072 +:10EEA0000000000000000000000000000000000062 +:10EEB0000000000000000000000000000000000052 +:10EEC00000000000000000003C0030920100000043 +:10EED0000000000000000000000000000000000032 +:10EEE0000000000000000000000000000000000022 +:10EEF0000000000000000000000000000000000012 +:10EF0000000000000000000000003C006C920100C6 +:10EF100000000000000000000000000000000000F1 +:10EF200000000000000000000000000000000000E1 +:10EF300000000000000000000000000000000000D1 +:10EF40000000000000000000000000003C00A8924B +:10EF500001000000000000000000000000000000B0 +:10EF600000000000000000000000000000000000A1 +:10EF70000000000000000000000000000000000091 +:10EF800000000000000000000000000000003C0045 +:10EF9000E4920100000000000000000000000000FA +:10EFA0000000000000000000000000000000000061 +:10EFB0000000000000000000000000000000000051 +:10EFC0000000000000000000000000000000000041 +:10EFD0003C00209301000000000000000000000041 +:10EFE0000000000000000000000000000000000021 +:10EFF0000000000000000000000000000000000011 +:10F000000000000000000000000000000000000000 +:10F0100000003C005C9301000000000000000000C4 +:10F0200000000000000000000000000000000000E0 +:10F0300000000000000000000000000000000000D0 +:10F0400000000000000000000000000000000000C0 +:10F05000000000003C009893010000000000000048 +:10F0600000000000000000000000000000000000A0 +:10F070000000000000000000000000000000000090 +:10F080000000000000000000000000000000000080 +:10F090000000000000003C00D493010000000000CC +:10F0A0000000000000000000000000000000000060 +:10F0B0000000000000000000000000000000000050 +:10F0C0000000000000000000000000000000000040 +:10F0D00000000000000000003C001094010000004F +:10F0E0000000000000000000000000000000000020 +:10F0F0000000000000000000000000000000000010 +:10F1000000000000000000000000000000000000FF +:10F11000000000000000000000003C004C940100D2 +:10F1200000000000000000000000000000000000DF +:10F1300000000000000000000000000000000000CF +:10F1400000000000000000000000000000000000BF +:10F150000000000000000000000000003C00889457 +:10F16000010000000000000000000000000000009E +:10F17000000000000000000000000000000000008F +:10F18000000000000000000000000000000000007F +:10F1900000000000000000000000000000003C0033 +:10F1A000C494010000000000000000000000000006 +:10F1B000000000000000000000000000000000004F +:10F1C000000000000000000000000000000000003F +:10F1D000000000000000000000000000000000002F +:10F1E0003C0000950100000000000000000000004D +:10F1F000000000000000000000000000000000000F +:10F2000000000000000000000000000000000000FE +:10F2100000000000000000000000000000000000EE +:10F2200000003C003C9501000000000000000000D0 +:10F2300000000000000000000000000000000000CE +:10F2400000000000000000000000000000000000BE +:10F2500000000000000000000000000000000000AE +:10F26000000000003C007895010000000000000054 +:10F27000000000000000000000000000000000008E +:10F28000000000000000000000000000000000007E +:10F29000000000000000000000000000000000006E +:10F2A0000000000000003C00B495010000000000D8 +:10F2B000000000000000000000000000000000004E +:10F2C000000000000000000000000000000000003E +:10F2D000000000000000000000000000000000002E +:10F2E00000000000000000003C00F095010000005C +:10F2F000000000000000000000000000000000000E +:10F3000000000000000000000000000000000000FD +:10F3100000000000000000000000000000000000ED +:10F32000000000000000000000003C002C960100DE +:10F3300000000000000000000000000000000000CD +:10F3400000000000000000000000000000000000BD +:10F3500000000000000000000000000000000000AD +:10F360000000000000000000000000003C00689663 +:10F37000010000000000000000000000000000008C +:10F38000000000000000000000000000000000007D +:10F39000000000000000000000000000000000006D +:10F3A00000000000000000000000000000003C0021 +:10F3B000A496010000000000000000000000000012 +:10F3C000000000000000000000000000000000003D +:10F3D000000000000000000000000000000000002D +:10F3E000000000000000000000000000000000001D +:10F3F0003C00E0960100000000000000000000005A +:10F4000000000000000000000000000000000000FC +:10F4100000000000000000000000000000000000EC +:10F4200000000000000000000000000000000000DC +:10F4300000003C001C9701000000000000000000DC +:10F4400000000000000000000000000000000000BC +:10F4500000000000000000000000000000000000AC +:10F46000000000000000000000000000000000009C +:10F47000000000003C005897010000000000000060 +:10F48000000000000000000000000000000000007C +:10F49000000000000000000000000000000000006C +:10F4A000000000000000000000000000000000005C +:10F4B0000000000000003C009497010000000000E4 +:10F4C000000000000000000000000000000000003C +:10F4D000000000000000000000000000000000002C +:10F4E000000000000000000000000000000000001C +:10F4F00000000000000000003C00D0970100000068 +:10F5000000000000000000000000000000000000FB +:10F5100000000000000000000000000000000000EB +:10F5200000000000000000000000000000000000DB +:10F53000000000000000000000003C000C980100EA +:10F5400000000000000000000000000000000000BB +:10F5500000000000000000000000000000000000AB +:10F56000000000000000000000000000000000009B +:10F570000000000000000000000000003C0048986F +:10F58000010000000000000000000000000000007A +:10F59000000000000000000000000000000000006B +:10F5A000000000000000000000000000000000005B +:10F5B00000000000000000000000000000003C000F +:10F5C000849801000000000000000000000000001E +:10F5D000000000000000000000000000000000002B +:10F5E000000000000000000000000000000000001B +:10F5F000000000000000000000000000000000000B +:10F600003C00C09801000000000000000000000065 +:10F6100000000000000000000000000000000000EA +:10F6200000000000000000000000000000000000DA +:10F6300000000000000000000000000000000000CA +:10F6400000003C00FC9801000000000000000000E9 +:10F6500000000000000000000000000000000000AA +:10F66000000000000000000000000000000000009A +:10F67000000000000000000000000000000000008A +:10F68000000000003C00389901000000000000006C +:10F69000000000000000000000000000000000006A +:10F6A000000000000000000000000000000000005A +:10F6B000000000000000000000000000000000004A +:10F6C0000000000000003C007499010000000000F0 +:10F6D000000000000000000000000000000000002A +:10F6E000000000000000000000000000000000001A +:10F6F000000000000000000000000000000000000A +:10F7000000000000000000003C00B0990100000073 +:10F7100000000000000000000000000000000000E9 +:10F7200000000000000000000000000000000000D9 +:10F7300000000000000000000000000000000000C9 +:10F74000000000000000000000003C00EC990100F7 +:10F7500000000000000000000000000000000000A9 +:10F760000000000000000000000000000000000099 +:10F770000000000000000000000000000000000089 +:10F780000000000000000000000000003C00289A7B +:10F790000100000000000000000000000000000068 +:10F7A0000000000000000000000000000000000059 +:10F7B0000000000000000000000000000000000049 +:10F7C00000000000000000000000000000003C00FD +:10F7D000649A01000000000000000000000000002A +:10F7E0000000000000000000000000000000000019 +:10F7F0000000000000000000000000000000000009 +:10F8000000000000000000000000000000000000F8 +:10F810003C00A09A01000000000000000000000071 +:10F8200000000000000000000000000000000000D8 +:10F8300000000000000000000000000000000000C8 +:10F8400000000000000000000000000000000000B8 +:10F8500000003C00DC9A01000000000000000000F5 +:10F860000000000000000000000000000000000098 +:10F870000000000000000000000000000000000088 +:10F880000000000000000000000000000000000078 +:10F89000000000003C00189B010000000000000078 +:10F8A0000000000000000000000000000000000058 +:10F8B0000000000000000000000000000000000048 +:10F8C0000000000000000000000000000000000038 +:10F8D0000000000000003C00549B010000000000FC +:10F8E0000000000000000000000000000000000018 +:10F8F0000000000000000000000000000000000008 +:10F9000000000000000000000000000000000000F7 +:10F9100000000000000000003C00909B010000007F +:10F9200000000000000000000000000000000000D7 +:10F9300000000000000000000000000000000000C7 +:10F9400000000000000000000000000000000000B7 +:10F95000000000000000000000003C00CC9B010003 +:10F960000000000000000000000000000000000097 +:10F970000000000000000000000000000000000087 +:10F980000000000000000000000000000000000077 +:10F990000000000000000000000000003C00089C87 +:10F9A0000100000000000000000000000000000056 +:10F9B0000000000000000000000000000000000047 +:10F9C0000000000000000000000000000000000037 +:10F9D00000000000000000000000000000003C00EB +:10F9E000449C010000000000000000000000000036 +:10F9F0000000000000000000000000000000000007 +:10FA000000000000000000000000000000000000F6 +:10FA100000000000000000000000000000000000E6 +:10FA20003C00809C0100000000000000000000007D +:10FA300000000000000000000000000000000000C6 +:10FA400000000000000000000000000000000000B6 +:10FA500000000000000000000000000000000000A6 +:10FA600000003C00BC9C0100000000000000000001 +:10FA70000000000000000000000000000000000086 +:10FA80000000000000000000000000000000000076 +:10FA90000000000000000000000000000000000066 +:10FAA000000000003C00F89C010000000000000085 +:10FAB0000000000000000000000000000000000046 +:10FAC0000000000000000000000000000000000036 +:10FAD0000000000000000000000000000000000026 +:10FAE0000000000000003C00349D01000000000008 +:10FAF0000000000000000000000000000000000006 +:10FB000000000000000000000000000000000000F5 +:10FB100000000000000000000000000000000000E5 +:10FB200000000000000000003C00709D010000008B +:10FB300000000000000000000000000000000000C5 +:10FB400000000000000000000000000000000000B5 +:10FB500000000000000000000000000000000000A5 +:10FB6000000000000000000000003C00AC9D01000F +:10FB70000000000000000000000000000000000085 +:10FB80000000000000000000000000000000000075 +:10FB90000000000000000000000000000000000065 +:10FBA0000000000000000000000000003C00E89D94 +:10FBB0000100000000000000000000000000000044 +:10FBC0000000000000000000000000000000000035 +:10FBD0000000000000000000000000000000000025 +:10FBE00000000000000000000000000000003C00D9 +:10FBF000249E010000000000000000000000000042 +:10FC000000000000000000000000000000000000F4 +:10FC100000000000000000000000000000000000E4 +:10FC200000000000000000000000000000000000D4 +:10FC30003C00609E01000000000000000000000089 +:10FC400000000000000000000000000000000000B4 +:10FC500000000000000000000000000000000000A4 +:10FC60000000000000000000000000000000000094 +:10FC700000003C009C9E010000000000000000000D +:10FC80000000000000000000000000000000000074 +:10FC90000000000000000000000000000000000064 +:10FCA0000000000000000000000000000000000054 +:10FCB000000000003C00D89E010000000000000091 +:10FCC0000000000000000000000000000000000034 +:10FCD0000000000000000000000000000000000024 +:10FCE0000000000000000000000000000000000014 +:10FCF0000000000000003C00149F01000000000014 +:10FD000000000000000000000000000000000000F3 +:10FD100000000000000000000000000000000000E3 +:10FD200000000000000000000000000000000000D3 +:10FD300000000000000000003C00509F0100000097 +:10FD400000000000000000000000000000000000B3 +:10FD500000000000000000000000000000000000A3 +:10FD60000000000000000000000000000000000093 +:10FD7000000000000000000000003C008C9F01001B +:10FD80000000000000000000000000000000000073 +:10FD90000000000000000000000000000000000063 +:10FDA0000000000000000000000000000000000053 +:10FDB0000000000000000000000000003C00C89FA0 +:10FDC0000100000000000000000000000000000032 +:10FDD0000000000000000000000000000000000023 +:10FDE0000000000000000000000000000000000013 +:10FDF00000000000000000000000000000003C00C7 +:10FE000004A001000000000000000000000000004D +:10FE100000000000000000000000000000000000E2 +:10FE200000000000000000000000000000000000D2 +:10FE300000000000000000000000000000000000C2 +:10FE40003C0040A001000000000000000000000095 +:10FE500000000000000000000000000000000000A2 +:10FE60000000000000000000000000000000000092 +:10FE70000000000000000000000000000000000082 +:10FE800000003C007CA00100000000000000000019 +:10FE90000000000000000000000000000000000062 +:10FEA0000000000000000000000000000000000052 +:10FEB0000000000000000000000000000000000042 +:10FEC000000000003C00B8A001000000000000009D +:10FED0000000000000000000000000000000000022 +:10FEE0000000000000000000000000000000000012 +:10FEF0000000000000000000000000000000000002 +:10FF00000000000000003C00F4A001000000000020 +:10FF100000000000000000000000000000000000E1 +:10FF200000000000000000000000000000000000D1 +:10FF300000000000000000000000000000000000C1 +:10FF400000000000000000003C0030A101000000A3 +:10FF500000000000000000000000000000000000A1 +:10FF60000000000000000000000000000000000091 +:10FF70000000000000000000000000000000000081 +:10FF8000000000000000000000003C006CA1010027 +:10FF90000000000000000000000000000000000061 +:10FFA0000000000000000000000000000000000051 +:10FFB0000000000000000000000000000000000041 +:10FFC0000000000000000000000000003C00A8A1AC +:10FFD0000100000000000000000000000000000020 +:10FFE0000000000000000000000000000000000011 +:10FFF0000000000000000000000000000000000001 +:02000004800278 +:1000000000000000000000000000000000003C00B4 +:10001000E4A101000000000000000000000000005A +:1000200000000000000000000000000000000000D0 +:1000300000000000000000000000000000000000C0 +:1000400000000000000000000000000000000000B0 +:100050003C0020A2010000000000000000000000A1 +:100060000000000000000000000000000000000090 +:100070000000000000000000000000000000000080 +:100080000000000000000000000000000000000070 +:1000900000003C005CA20100000000000000000025 +:1000A0000000000000000000000000000000000050 +:1000B0000000000000000000000000000000000040 +:1000C0000000000000000000000000000000000030 +:1000D000000000003C0098A20100000000000000A9 +:1000E0000000000000000000000000000000000010 +:1000F0000000000000000000000000000000000000 +:1001000000000000000000000000000000000000EF +:100110000000000000003C00D4A20100000000002C +:1001200000000000000000000000000000000000CF +:1001300000000000000000000000000000000000BF +:1001400000000000000000000000000000000000AF +:1001500000000000000000003C0010A301000000AF +:10016000000000000000000000000000000000008F +:10017000000000000000000000000000000000007F +:10018000000000000000000000000000000000006F +:10019000000000000000000000003C004CA3010033 +:1001A000000000000000000000000000000000004F +:1001B000000000000000000000000000000000003F +:1001C000000000000000000000000000000000002F +:1001D0000000000000000000000000003C0088A3B8 +:1001E000010000000000000000000000000000000E +:1001F00000000000000000000000000000000000FF +:1002000000000000000000000000000000000000EE +:1002100000000000000000000000000000003C00A2 +:10022000C4A3010000000000000000000000000066 +:1002300000000000000000000000000000000000BE +:1002400000000000000000000000000000000000AE +:10025000000000000000000000000000000000009E +:100260003C0000A4010000000000000000000000AD +:10027000000000000000000000000000000000007E +:10028000000000000000000000000000000000006E +:10029000000000000000000000000000000000005E +:1002A00000003C003CA40100000000000000000031 +:1002B000000000000000000000000000000000003E +:1002C000000000000000000000000000000000002E +:1002D000000000000000000000000000000000001E +:1002E000000000003C0078A40100000000000000B5 +:1002F00000000000000000000000000000000000FE +:1003000000000000000000000000000000000000ED +:1003100000000000000000000000000000000000DD +:100320000000000000003C00B4A401000000000038 +:1003300000000000000000000000000000000000BD +:1003400000000000000000000000000000000000AD +:10035000000000000000000000000000000000009D +:1003600000000000000000003C00F0A401000000BC +:10037000000000000000000000000000000000007D +:10038000000000000000000000000000000000006D +:10039000000000000000000000000000000000005D +:1003A000000000000000000000003C002CA501003F +:1003B000000000000000000000000000000000003D +:1003C000000000000000000000000000000000002D +:1003D000000000000000000000000000000000001D +:1003E0000000000000000000000000003C0068A5C4 +:1003F00001000000000000000000000000000000FC +:1004000000000000000000000000000000000000EC +:1004100000000000000000000000000000000000DC +:1004200000000000000000000000000000003C0090 +:10043000A4A5010000000000000000000000000072 +:1004400000000000000000000000000000000000AC +:10045000000000000000000000000000000000009C +:10046000000000000000000000000000000000008C +:100470003C00E0A5010000000000000000000000BA +:10048000000000000000000000000000000000006C +:10049000000000000000000000000000000000005C +:1004A000000000000000000000000000000000004C +:1004B00000003C001CA6010000000000000000003D +:1004C000000000000000000000000000000000002C +:1004D000000000000000000000000000000000001C +:1004E000000000000000000000000000000000000C +:1004F000000000003C0058A60100000000000000C1 +:1005000000000000000000000000000000000000EB +:1005100000000000000000000000000000000000DB +:1005200000000000000000000000000000000000CB +:100530000000000000003C0094A601000000000044 +:1005400000000000000000000000000000000000AB +:10055000000000000000000000000000000000009B +:10056000000000000000000000000000000000008B +:1005700000000000000000003C00D0A601000000C8 +:10058000000000000000000000000000000000006B +:10059000000000000000000000000000000000005B +:1005A000000000000000000000000000000000004B +:1005B000000000000000000000003C000CA701004B +:1005C000000000000000000000000000000000002B +:1005D000000000000000000000000000000000001B +:1005E000000000000000000000000000000000000B +:1005F0000000000000000000000000003C0048A7D0 +:1006000001000000000000000000000000000000E9 +:1006100000000000000000000000000000000000DA +:1006200000000000000000000000000000000000CA +:1006300000000000000000000000000000003C007E +:1006400084A701000000000000000000000000007E +:10065000000000000000000000000000000000009A +:10066000000000000000000000000000000000008A +:10067000000000000000000000000000000000007A +:100680003C00C0A7010000000000000000000000C6 +:10069000000000000000000000000000000000005A +:1006A000000000000000000000000000000000004A +:1006B000000000000000000000000000000000003A +:1006C00000003C00FCA7010000000000000000004A +:1006D000000000000000000000000000000000001A +:1006E000000000000000000000000000000000000A +:1006F00000000000000000000000000000000000FA +:10070000000000003C0038A80100000000000000CC +:1007100000000000000000000000000000000000D9 +:1007200000000000000000000000000000000000C9 +:1007300000000000000000000000000000000000B9 +:100740000000000000003C0074A801000000000050 +:100750000000000000000000000000000000000099 +:100760000000000000000000000000000000000089 +:100770000000000000000000000000000000000079 +:1007800000000000000000003C00B0A801000000D4 +:100790000000000000000000000000000000000059 +:1007A0000000000000000000000000000000000049 +:1007B0000000000000000000000000000000000039 +:1007C000000000000000000000003C00ECA8010058 +:1007D0000000000000000000000000000000000019 +:1007E0000000000000000000000000000000000009 +:1007F00000000000000000000000000000000000F9 +:100800000000000000000000000000003C0028A9DB +:1008100001000000000000000000000000000000D7 +:1008200000000000000000000000000000000000C8 +:1008300000000000000000000000000000000000B8 +:1008400000000000000000000000000000003C006C +:1008500064A901000000000000000000000000008A +:100860000000000000000000000000000000000088 +:100870000000000000000000000000000000000078 +:100880000000000000000000000000000000000068 +:100890003C00A0A9010000000000000000000000D2 +:1008A0000000000000000000000000000000000048 +:1008B0000000000000000000000000000000000038 +:1008C0000000000000000000000000000000000028 +:1008D00000003C00DCA90100000000000000000056 +:1008E0000000000000000000000000000000000008 +:1008F00000000000000000000000000000000000F8 +:1009000000000000000000000000000000000000E7 +:10091000000000003C0018AA0100000000000000D8 +:1009200000000000000000000000000000000000C7 +:1009300000000000000000000000000000000000B7 +:1009400000000000000000000000000000000000A7 +:100950000000000000003C0054AA0100000000005C +:100960000000000000000000000000000000000087 +:100970000000000000000000000000000000000077 +:100980000000000000000000000000000000000067 +:1009900000000000000000003C0090AA01000000E0 +:1009A0000000000000000000000000000000000047 +:1009B0000000000000000000000000000000000037 +:1009C0000000000000000000000000000000000027 +:1009D000000000000000000000003C00CCAA010064 +:1009E0000000000000000000000000000000000007 +:1009F00000000000000000000000000000000000F7 +:100A000000000000000000000000000000000000E6 +:100A10000000000000000000000000003C0008ABE7 +:100A200001000000000000000000000000000000C5 +:100A300000000000000000000000000000000000B6 +:100A400000000000000000000000000000000000A6 +:100A500000000000000000000000000000003C005A +:100A600044AB010000000000000000000000000096 +:100A70000000000000000000000000000000000076 +:100A80000000000000000000000000000000000066 +:100A90000000000000000000000000000000000056 +:100AA0003C0080AB010000000000000000000000DE +:100AB0000000000000000000000000000000000036 +:100AC0000000000000000000000000000000000026 +:100AD0000000000000000000000000000000000016 +:100AE00000003C00BCAB0100000000000000000062 +:100AF00000000000000000000000000000000000F6 +:100B000000000000000000000000000000000000E5 +:100B100000000000000000000000000000000000D5 +:100B2000000000003C00F8AB0100000000000000E5 +:100B300000000000000000000000000000000000B5 +:100B400000000000000000000000000000000000A5 +:100B50000000000000000000000000000000000095 +:100B60000000000000003C0034AC01000000000068 +:100B70000000000000000000000000000000000075 +:100B80000000000000000000000000000000000065 +:100B90000000000000000000000000000000000055 +:100BA00000000000000000003C0070AC01000000EC +:100BB0000000000000000000000000000000000035 +:100BC0000000000000000000000000000000000025 +:100BD0000000000000000000000000000000000015 +:100BE000000000000000000000003C00ACAC010070 +:100BF00000000000000000000000000000000000F5 +:100C000000000000000000000000000000000000E4 +:100C100000000000000000000000000000000000D4 +:100C20000000000000000000000000003C00E8ACF4 +:100C300001000000000000000000000000000000B3 +:100C400000000000000000000000000000000000A4 +:100C50000000000000000000000000000000000094 +:100C600000000000000000000000000000003C0048 +:100C700024AD0100000000000000000000000000A2 +:100C80000000000000000000000000000000000064 +:100C90000000000000000000000000000000000054 +:100CA0000000000000000000000000000000000044 +:100CB0003C0060AD010000000000000000000000EA +:100CC0000000000000000000000000000000000024 +:100CD0000000000000000000000000000000000014 +:100CE0000000000000000000000000000000000004 +:100CF00000003C009CAD010000000000000000006E +:100D000000000000000000000000000000000000E3 +:100D100000000000000000000000000000000000D3 +:100D200000000000000000000000000000000000C3 +:100D3000000000003C00D8AD0100000000000000F1 +:100D400000000000000000000000000000000000A3 +:100D50000000000000000000000000000000000093 +:100D60000000000000000000000000000000000083 +:100D70000000000000003C0014AE01000000000074 +:100D80000000000000000000000000000000000063 +:100D90000000000000000000000000000000000053 +:100DA0000000000000000000000000000000000043 +:100DB00000000000000000003C0050AE01000000F8 +:100DC0000000000000000000000000000000000023 +:100DD0000000000000000000000000000000000013 +:100DE0000000000000000000000000000000000003 +:100DF000000000000000000000003C008CAE01007C +:100E000000000000000000000000000000000000E2 +:100E100000000000000000000000000000000000D2 +:100E200000000000000000000000000000000000C2 +:100E30000000000000000000000000003C00C8AE00 +:100E400001000000000000000000000000000000A1 +:100E50000000000000000000000000000000000092 +:100E60000000000000000000000000000000000082 +:100E700000000000000000000000000000003C0036 +:100E800004AF0100000000000000000000000000AE +:100E90000000000000000000000000000000000052 +:100EA0000000000000000000000000000000000042 +:100EB0000000000000000000000000000000000032 +:100EC0003C0040AF010000000000000000000000F6 +:100ED0000000000000000000000000000000000012 +:100EE0000000000000000000000000000000000002 +:100EF00000000000000000000000000000000000F2 +:100F000000003C007CAF0100000000000000000079 +:100F100000000000000000000000000000000000D1 +:100F200000000000000000000000000000000000C1 +:100F300000000000000000000000000000000000B1 +:100F4000000000003C00B8AF0100000000000000FD +:100F50000000000000000000000000000000000091 +:100F60000000000000000000000000000000000081 +:100F70000000000000000000000000000000000071 +:100F80000000000000003C00F4AF01000000000081 +:100F90000000000000000000000000000000000051 +:100FA0000000000000000000000000000000000041 +:100FB0000000000000000000000000000000000031 +:100FC00000000000000000003C0030B00100000004 +:100FD0000000000000000000000000000000000011 +:100FE0000000000000000000000000000000000001 +:100FF00000000000000000000000000000000000F1 +:10100000000000000000000000003C006CB0010087 +:1010100000000000000000000000000000000000D0 +:1010200000000000000000000000000000000000C0 +:1010300000000000000000000000000000000000B0 +:101040000000000000000000000000003C00A8B00C +:10105000010000000000000000000000000000008F +:101060000000000000000000000000000000000080 +:101070000000000000000000000000000000000070 +:1010800000000000000000000000000000003C0024 +:10109000E4B00100000000000000000000000000BB +:1010A0000000000000000000000000000000000040 +:1010B0000000000000000000000000000000000030 +:1010C0000000000000000000000000000000000020 +:1010D0003C0020B101000000000000000000000002 +:1010E0000000000000000000000000000000000000 +:1010F00000000000000000000000000000000000F0 +:1011000000000000000000000000000000000000DF +:1011100000003C005CB10100000000000000000085 +:1011200000000000000000000000000000000000BF +:1011300000000000000000000000000000000000AF +:10114000000000000000000000000000000000009F +:10115000000000003C0098B1010000000000000009 +:10116000000000000000000000000000000000007F +:10117000000000000000000000000000000000006F +:10118000000000000000000000000000000000005F +:101190000000000000003C00D4B10100000000008D +:1011A000000000000000000000000000000000003F +:1011B000000000000000000000000000000000002F +:1011C000000000000000000000000000000000001F +:1011D00000000000000000003C0010B20100000010 +:1011E00000000000000000000000000000000000FF +:1011F00000000000000000000000000000000000EF +:1012000000000000000000000000000000000000DE +:10121000000000000000000000003C004CB2010093 +:1012200000000000000000000000000000000000BE +:1012300000000000000000000000000000000000AE +:10124000000000000000000000000000000000009E +:101250000000000000000000000000003C0088B218 +:10126000010000000000000000000000000000007D +:10127000000000000000000000000000000000006E +:10128000000000000000000000000000000000005E +:1012900000000000000000000000000000003C0012 +:1012A000C4B20100000000000000000000000000C7 +:1012B000000000000000000000000000000000002E +:1012C000000000000000000000000000000000001E +:1012D000000000000000000000000000000000000E +:1012E0003C0000B30100000000000000000000000E +:1012F00000000000000000000000000000000000EE +:1013000000000000000000000000000000000000DD +:1013100000000000000000000000000000000000CD +:1013200000003C003CB30100000000000000000091 +:1013300000000000000000000000000000000000AD +:10134000000000000000000000000000000000009D +:10135000000000000000000000000000000000008D +:10136000000000003C0078B3010000000000000015 +:10137000000000000000000000000000000000006D +:10138000000000000000000000000000000000005D +:10139000000000000000000000000000000000004D +:1013A0000000000000003C00B4B301000000000099 +:1013B000000000000000000000000000000000002D +:1013C000000000000000000000000000000000001D +:1013D000000000000000000000000000000000000D +:1013E00000000000000000003C00F0B3010000001D +:1013F00000000000000000000000000000000000ED +:1014000000000000000000000000000000000000DC +:1014100000000000000000000000000000000000CC +:10142000000000000000000000003C002CB401009F +:1014300000000000000000000000000000000000AC +:10144000000000000000000000000000000000009C +:10145000000000000000000000000000000000008C +:101460000000000000000000000000003C0068B424 +:10147000010000000000000000000000000000006B +:10148000000000000000000000000000000000005C +:10149000000000000000000000000000000000004C +:1014A00000000000000000000000000000003C0000 +:1014B000A4B40100000000000000000000000000D3 +:1014C000000000000000000000000000000000001C +:1014D000000000000000000000000000000000000C +:1014E00000000000000000000000000000000000FC +:1014F0003C00E0B40100000000000000000000001B +:1015000000000000000000000000000000000000DB +:1015100000000000000000000000000000000000CB +:1015200000000000000000000000000000000000BB +:1015300000003C001CB5010000000000000000009D +:10154000000000000000000000000000000000009B +:10155000000000000000000000000000000000008B +:10156000000000000000000000000000000000007B +:10157000000000003C0058B5010000000000000021 +:10158000000000000000000000000000000000005B +:10159000000000000000000000000000000000004B +:1015A000000000000000000000000000000000003B +:1015B0000000000000003C0094B5010000000000A5 +:1015C000000000000000000000000000000000001B +:1015D000000000000000000000000000000000000B +:1015E00000000000000000000000000000000000FB +:1015F00000000000000000003C00D0B50100000029 +:1016000000000000000000000000000000000000DA +:1016100000000000000000000000000000000000CA +:1016200000000000000000000000000000000000BA +:10163000000000000000000000003C000CB60100AB +:10164000000000000000000000000000000000009A +:10165000000000000000000000000000000000008A +:10166000000000000000000000000000000000007A +:101670000000000000000000000000003C0048B630 +:101680000100000000000000000000000000000059 +:10169000000000000000000000000000000000004A +:1016A000000000000000000000000000000000003A +:1016B00000000000000000000000000000003C00EE +:1016C00084B60100000000000000000000000000DF +:1016D000000000000000000000000000000000000A +:1016E00000000000000000000000000000000000FA +:1016F00000000000000000000000000000000000EA +:101700003C00C0B601000000000000000000000026 +:1017100000000000000000000000000000000000C9 +:1017200000000000000000000000000000000000B9 +:1017300000000000000000000000000000000000A9 +:1017400000003C00FCB601000000000000000000AA +:101750000000000000000000000000000000000089 +:101760000000000000000000000000000000000079 +:101770000000000000000000000000000000000069 +:10178000000000003C0038B701000000000000002D +:101790000000000000000000000000000000000049 +:1017A0000000000000000000000000000000000039 +:1017B0000000000000000000000000000000000029 +:1017C0000000000000003C0074B7010000000000B1 +:1017D0000000000000000000000000000000000009 +:1017E00000000000000000000000000000000000F9 +:1017F00000000000000000000000000000000000E9 +:1018000000000000000000003C00B0B70100000034 +:1018100000000000000000000000000000000000C8 +:1018200000000000000000000000000000000000B8 +:1018300000000000000000000000000000000000A8 +:10184000000000000000000000003C00ECB70100B8 +:101850000000000000000000000000000000000088 +:101860000000000000000000000000000000000078 +:101870000000000000000000000000000000000068 +:101880000000000000000000000000003C0028B83C +:101890000100000000000000000000000000000047 +:1018A0000000000000000000000000000000000038 +:1018B0000000000000000000000000000000000028 +:1018C00000000000000000000000000000003C00DC +:1018D00064B80100000000000000000000000000EB +:1018E00000000000000000000000000000000000F8 +:1018F00000000000000000000000000000000000E8 +:1019000000000000000000000000000000000000D7 +:101910003C00A0B801000000000000000000000032 +:1019200000000000000000000000000000000000B7 +:1019300000000000000000000000000000000000A7 +:101940000000000000000000000000000000000097 +:1019500000003C00DCB801000000000000000000B6 +:101960000000000000000000000000000000000077 +:101970000000000000000000000000000000000067 +:101980000000000000000000000000000000000057 +:10199000000000003C0018B9010000000000000039 +:1019A0000000000000000000000000000000000037 +:1019B0000000000000000000000000000000000027 +:1019C0000000000000000000000000000000000017 +:1019D0000000000000003C0054B9010000000000BD +:1019E00000000000000000000000000000000000F7 +:1019F00000000000000000000000000000000000E7 +:101A000000000000000000000000000000000000D6 +:101A100000000000000000003C0090B90100000040 +:101A200000000000000000000000000000000000B6 +:101A300000000000000000000000000000000000A6 +:101A40000000000000000000000000000000000096 +:101A5000000000000000000000003C00CCB90100C4 +:101A60000000000000000000000000000000000076 +:101A70000000000000000000000000000000000066 +:101A80000000000000000000000000000000000056 +:101A90000000000000000000000000003C0008BA48 +:101AA0000100000000000000000000000000000035 +:101AB0000000000000000000000000000000000026 +:101AC0000000000000000000000000000000000016 +:101AD00000000000000000000000000000003C00CA +:101AE00044BA0100000000000000000000000000F7 +:101AF00000000000000000000000000000000000E6 +:101B000000000000000000000000000000000000D5 +:101B100000000000000000000000000000000000C5 +:101B20003C0080BA0100000000000000000000003E +:101B300000000000000000000000000000000000A5 +:101B40000000000000000000000000000000000095 +:101B50000000000000000000000000000000000085 +:101B600000003C00BCBA01000000000000000000C2 +:101B70000000000000000000000000000000000065 +:101B80000000000000000000000000000000000055 +:101B90000000000000000000000000000000000045 +:101BA000000000003C00F8BA010000000000000046 +:101BB0000000000000000000000000000000000025 +:101BC0000000000000000000000000000000000015 +:101BD0000000000000000000000000000000000005 +:101BE0000000000000003C0034BB010000000000C9 +:101BF00000000000000000000000000000000000E5 +:101C000000000000000000000000000000000000D4 +:101C100000000000000000000000000000000000C4 +:101C200000000000000000003C0070BB010000004C +:101C300000000000000000000000000000000000A4 +:101C40000000000000000000000000000000000094 +:101C50000000000000000000000000000000000084 +:101C6000000000000000000000003C00ACBB0100D0 +:101C70000000000000000000000000000000000064 +:101C80000000000000000000000000000000000054 +:101C90000000000000000000000000000000000044 +:101CA0000000000000000000000000003C00E8BB55 +:101CB0000100000000000000000000000000000023 +:101CC0000000000000000000000000000000000014 +:101CD0000000000000000000000000000000000004 +:101CE00000000000000000000000000000003C00B8 +:101CF00024BC010000000000000000000000000003 +:101D000000000000000000000000000000000000D3 +:101D100000000000000000000000000000000000C3 +:101D200000000000000000000000000000000000B3 +:101D30003C0060BC0100000000000000000000004A +:101D40000000000000000000000000000000000093 +:101D50000000000000000000000000000000000083 +:101D60000000000000000000000000000000000073 +:101D700000003C009CBC01000000000000000000CE +:101D80000000000000000000000000000000000053 +:101D90000000000000000000000000000000000043 +:101DA0000000000000000000000000000000000033 +:101DB000000000003C00D8BC010000000000000052 +:101DC0000000000000000000000000000000000013 +:101DD0000000000000000000000000000000000003 +:101DE00000000000000000000000000000000000F3 +:101DF0000000000000003C0014BD010000000000D5 +:101E000000000000000000000000000000000000D2 +:101E100000000000000000000000000000000000C2 +:101E200000000000000000000000000000000000B2 +:101E300000000000000000003C0050BD0100000058 +:101E40000000000000000000000000000000000092 +:101E50000000000000000000000000000000000082 +:101E60000000000000000000000000000000000072 +:101E7000000000000000000000003C008CBD0100DC +:101E80000000000000000000000000000000000052 +:101E90000000000000000000000000000000000042 +:101EA0000000000000000000000000000000000032 +:101EB0000000000000000000000000003C00C8BD61 +:101EC0000100000000000000000000000000000011 +:101ED0000000000000000000000000000000000002 +:101EE00000000000000000000000000000000000F2 +:101EF00000000000000000000000000000003C00A6 +:101F000004BE01000000000000000000000000000E +:101F100000000000000000000000000000000000C1 +:101F200000000000000000000000000000000000B1 +:101F300000000000000000000000000000000000A1 +:101F40003C0040BE01000000000000000000000056 +:101F50000000000000000000000000000000000081 +:101F60000000000000000000000000000000000071 +:101F70000000000000000000000000000000000061 +:101F800000003C007CBE01000000000000000000DA +:101F90000000000000000000000000000000000041 +:101FA0000000000000000000000000000000000031 +:101FB0000000000000000000000000000000000021 +:101FC000000000003C00B8BE01000000000000005E +:101FD0000000000000000000000000000000000001 +:101FE00000000000000000000000000000000000F1 +:101FF00000000000000000000000000000000000E1 +:102000000000000000003C00F4BE010000000000E1 +:1020100000000000000000000000000000000000C0 +:1020200000000000000000000000000000000000B0 +:1020300000000000000000000000000000000000A0 +:1020400000000000000000003C0030BF0100000064 +:102050000000000000000000000000000000000080 +:102060000000000000000000000000000000000070 +:102070000000000000000000000000000000000060 +:10208000000000000000000000003C006CBF0100E8 +:102090000000000000000000000000000000000040 +:1020A0000000000000000000000000000000000030 +:1020B0000000000000000000000000000000000020 +:1020C0000000000000000000000000003C00A8BF6D +:1020D00001000000000000000000000000000000FF +:1020E00000000000000000000000000000000000F0 +:1020F00000000000000000000000000000000000E0 +:1021000000000000000000000000000000003C0093 +:10211000E4BF01000000000000000000000000001B +:1021200000000000000000000000000000000000AF +:10213000000000000000000000000000000000009F +:10214000000000000000000000000000000000008F +:102150003C0020C001000000000000000000000062 +:10216000000000000000000000000000000000006F +:10217000000000000000000000000000000000005F +:10218000000000000000000000000000000000004F +:1021900000003C005CC001000000000000000000E6 +:1021A000000000000000000000000000000000002F +:1021B000000000000000000000000000000000001F +:1021C000000000000000000000000000000000000F +:1021D000000000003C0098C001000000000000006A +:1021E00000000000000000000000000000000000EF +:1021F00000000000000000000000000000000000DF +:1022000000000000000000000000000000000000CE +:102210000000000000003C00D4C0010000000000ED +:1022200000000000000000000000000000000000AE +:10223000000000000000000000000000000000009E +:10224000000000000000000000000000000000008E +:1022500000000000000000003C0010C10100000070 +:10226000000000000000000000000000000000006E +:10227000000000000000000000000000000000005E +:10228000000000000000000000000000000000004E +:10229000000000000000000000003C004CC10100F4 +:1022A000000000000000000000000000000000002E +:1022B000000000000000000000000000000000001E +:1022C000000000000000000000000000000000000E +:1022D0000000000000000000000000003C0088C179 +:1022E00001000000000000000000000000000000ED +:1022F00000000000000000000000000000000000DE +:1023000000000000000000000000000000000000CD +:1023100000000000000000000000000000003C0081 +:10232000C4C1010000000000000000000000000027 +:10233000000000000000000000000000000000009D +:10234000000000000000000000000000000000008D +:10235000000000000000000000000000000000007D +:102360003C0000C20100000000000000000000006E +:10237000000000000000000000000000000000005D +:10238000000000000000000000000000000000004D +:10239000000000000000000000000000000000003D +:1023A00000003C003CC201000000000000000000F2 +:1023B000000000000000000000000000000000001D +:1023C000000000000000000000000000000000000D +:1023D00000000000000000000000000000000000FD +:1023E000000000003C0078C2010000000000000076 +:1023F00000000000000000000000000000000000DD +:1024000000000000000000000000000000000000CC +:1024100000000000000000000000000000000000BC +:102420000000000000003C00B4C2010000000000F9 +:10243000000000000000000000000000000000009C +:10244000000000000000000000000000000000008C +:10245000000000000000000000000000000000007C +:1024600000000000000000003C00F0C2010000007D +:10247000000000000000000000000000000000005C +:10248000000000000000000000000000000000004C +:10249000000000000000000000000000000000003C +:1024A000000000000000000000003C002CC3010000 +:1024B000000000000000000000000000000000001C +:1024C000000000000000000000000000000000000C +:1024D00000000000000000000000000000000000FC +:1024E0000000000000000000000000003C0068C385 +:1024F00001000000000000000000000000000000DB +:1025000000000000000000000000000000000000CB +:1025100000000000000000000000000000000000BB +:1025200000000000000000000000000000003C006F +:10253000A4C3010000000000000000000000000033 +:10254000000000000000000000000000000000008B +:10255000000000000000000000000000000000007B +:10256000000000000000000000000000000000006B +:102570003C00E0C30100000000000000000000007B +:10258000000000000000000000000000000000004B +:10259000000000000000000000000000000000003B +:1025A000000000000000000000000000000000002B +:1025B00000003C001CC401000000000000000000FE +:1025C000000000000000000000000000000000000B +:1025D00000000000000000000000000000000000FB +:1025E00000000000000000000000000000000000EB +:1025F000000000003C0058C4010000000000000082 +:1026000000000000000000000000000000000000CA +:1026100000000000000000000000000000000000BA +:1026200000000000000000000000000000000000AA +:102630000000000000003C0094C401000000000005 +:10264000000000000000000000000000000000008A +:10265000000000000000000000000000000000007A +:10266000000000000000000000000000000000006A +:1026700000000000000000003C00D0C40100000089 +:10268000000000000000000000000000000000004A +:10269000000000000000000000000000000000003A +:1026A000000000000000000000000000000000002A +:1026B000000000000000000000003C000CC501000C +:1026C000000000000000000000000000000000000A +:1026D00000000000000000000000000000000000FA +:1026E00000000000000000000000000000000000EA +:1026F0000000000000000000000000003C0048C591 +:1027000001000000000000000000000000000000C8 +:1027100000000000000000000000000000000000B9 +:1027200000000000000000000000000000000000A9 +:1027300000000000000000000000000000003C005D +:1027400084C501000000000000000000000000003F +:102750000000000000000000000000000000000079 +:102760000000000000000000000000000000000069 +:102770000000000000000000000000000000000059 +:102780003C00C0C501000000000000000000000087 +:102790000000000000000000000000000000000039 +:1027A0000000000000000000000000000000000029 +:1027B0000000000000000000000000000000000019 +:1027C00000003C00FCC5010000000000000000000B +:1027D00000000000000000000000000000000000F9 +:1027E00000000000000000000000000000000000E9 +:1027F00000000000000000000000000000000000D9 +:10280000000000003C0038C601000000000000008D +:1028100000000000000000000000000000000000B8 +:1028200000000000000000000000000000000000A8 +:102830000000000000000000000000000000000098 +:102840000000000000003C0074C601000000000011 +:102850000000000000000000000000000000000078 +:102860000000000000000000000000000000000068 +:102870000000000000000000000000000000000058 +:1028800000000000000000003C00B0C60100000095 +:102890000000000000000000000000000000000038 +:1028A0000000000000000000000000000000000028 +:1028B0000000000000000000000000000000000018 +:1028C000000000000000000000003C00ECC6010019 +:1028D00000000000000000000000000000000000F8 +:1028E00000000000000000000000000000000000E8 +:1028F00000000000000000000000000000000000D8 +:102900000000000000000000000000003C0028C79C +:1029100001000000000000000000000000000000B6 +:1029200000000000000000000000000000000000A7 +:102930000000000000000000000000000000000097 +:1029400000000000000000000000000000003C004B +:1029500064C701000000000000000000000000004B +:102960000000000000000000000000000000000067 +:102970000000000000000000000000000000000057 +:102980000000000000000000000000000000000047 +:102990003C00A0C701000000000000000000000093 +:1029A0000000000000000000000000000000000027 +:1029B0000000000000000000000000000000000017 +:1029C0000000000000000000000000000000000007 +:1029D00000003C00DCC70100000000000000000017 +:1029E00000000000000000000000000000000000E7 +:1029F00000000000000000000000000000000000D7 +:102A000000000000000000000000000000000000C6 +:102A1000000000003C0018C8010000000000000099 +:102A200000000000000000000000000000000000A6 +:102A30000000000000000000000000000000000096 +:102A40000000000000000000000000000000000086 +:102A50000000000000003C0054C80100000000001D +:102A60000000000000000000000000000000000066 +:102A70000000000000000000000000000000000056 +:102A80000000000000000000000000000000000046 +:102A900000000000000000003C0090C801000000A1 +:102AA0000000000000000000000000000000000026 +:102AB0000000000000000000000000000000000016 +:102AC0000000000000000000000000000000000006 +:102AD000000000000000000000003C00CCC8010025 +:102AE00000000000000000000000000000000000E6 +:102AF00000000000000000000000000000000000D6 +:102B000000000000000000000000000000000000C5 +:102B10000000000000000000000000003C0008C9A8 +:102B200001000000000000000000000000000000A4 +:102B30000000000000000000000000000000000095 +:102B40000000000000000000000000000000000085 +:102B500000000000000000000000000000003C0039 +:102B600044C9010000000000000000000000000057 +:102B70000000000000000000000000000000000055 +:102B80000000000000000000000000000000000045 +:102B90000000000000000000000000000000000035 +:102BA0003C0080C90100000000000000000000009F +:102BB0000000000000000000000000000000000015 +:102BC0000000000000000000000000000000000005 +:102BD00000000000000000000000000000000000F5 +:102BE00000003C00BCC90100000000000000000023 +:102BF00000000000000000000000000000000000D5 +:102C000000000000000000000000000000000000C4 +:102C100000000000000000000000000000000000B4 +:102C2000000000003C00F8C90100000000000000A6 +:102C30000000000000000000000000000000000094 +:102C40000000000000000000000000000000000084 +:102C50000000000000000000000000000000000074 +:102C60000000000000003C0034CA01000000000029 +:102C70000000000000000000000000000000000054 +:102C80000000000000000000000000000000000044 +:102C90000000000000000000000000000000000034 +:102CA00000000000000000003C0070CA01000000AD +:102CB0000000000000000000000000000000000014 +:102CC0000000000000000000000000000000000004 +:102CD00000000000000000000000000000000000F4 +:102CE000000000000000000000003C00ACCA010031 +:102CF00000000000000000000000000000000000D4 +:102D000000000000000000000000000000000000C3 +:102D100000000000000000000000000000000000B3 +:102D20000000000000000000000000003C00E8CAB5 +:102D30000100000000000000000000000000000092 +:102D40000000000000000000000000000000000083 +:102D50000000000000000000000000000000000073 +:102D600000000000000000000000000000003C0027 +:102D700024CB010000000000000000000000000063 +:102D80000000000000000000000000000000000043 +:102D90000000000000000000000000000000000033 +:102DA0000000000000000000000000000000000023 +:102DB0003C0060CB010000000000000000000000AB +:102DC0000000000000000000000000000000000003 +:102DD00000000000000000000000000000000000F3 +:102DE00000000000000000000000000000000000E3 +:102DF00000003C009CCB010000000000000000002F +:102E000000000000000000000000000000000000C2 +:102E100000000000000000000000000000000000B2 +:102E200000000000000000000000000000000000A2 +:102E3000000000003C00D8CB0100000000000000B2 +:102E40000000000000000000000000000000000082 +:102E50000000000000000000000000000000000072 +:102E60000000000000000000000000000000000062 +:102E70000000000000003C0014CC01000000000035 +:102E80000000000000000000000000000000000042 +:102E90000000000000000000000000000000000032 +:102EA0000000000000000000000000000000000022 +:102EB00000000000000000003C0050CC01000000B9 +:102EC0000000000000000000000000000000000002 +:102ED00000000000000000000000000000000000F2 +:102EE00000000000000000000000000000000000E2 +:102EF000000000000000000000003C008CCC01003D +:102F000000000000000000000000000000000000C1 +:102F100000000000000000000000000000000000B1 +:102F200000000000000000000000000000000000A1 +:102F30000000000000000000000000003C00C8CCC1 +:102F40000100000000000000000000000000000080 +:102F50000000000000000000000000000000000071 +:102F60000000000000000000000000000000000061 +:102F700000000000000000000000000000003C0015 +:102F800004CD01000000000000000000000000006F +:102F90000000000000000000000000000000000031 +:102FA0000000000000000000000000000000000021 +:102FB0000000000000000000000000000000000011 +:102FC0003C0040CD010000000000000000000000B7 +:102FD00000000000000000000000000000000000F1 +:102FE00000000000000000000000000000000000E1 +:102FF00000000000000000000000000000000000D1 +:1030000000003C007CCD010000000000000000003A +:1030100000000000000000000000000000000000B0 +:1030200000000000000000000000000000000000A0 +:103030000000000000000000000000000000000090 +:10304000000000003C00B8CD0100000000000000BE +:103050000000000000000000000000000000000070 +:103060000000000000000000000000000000000060 +:103070000000000000000000000000000000000050 +:103080000000000000003C00F4CD01000000000042 +:103090000000000000000000000000000000000030 +:1030A0000000000000000000000000000000000020 +:1030B0000000000000000000000000000000000010 +:1030C00000000000000000003C0030CE01000000C5 +:1030D00000000000000000000000000000000000F0 +:1030E00000000000000000000000000000000000E0 +:1030F00000000000000000000000000000000000D0 +:10310000000000000000000000003C006CCE010048 +:1031100000000000000000000000000000000000AF +:10312000000000000000000000000000000000009F +:10313000000000000000000000000000000000008F +:103140000000000000000000000000003C00A8CECD +:10315000010000000000000000000000000000006E +:10316000000000000000000000000000000000005F +:10317000000000000000000000000000000000004F +:1031800000000000000000000000000000003C0003 +:10319000E4CE01000000000000000000000000007C +:1031A000000000000000000000000000000000001F +:1031B000000000000000000000000000000000000F +:1031C00000000000000000000000000000000000FF +:1031D0003C0020CF010000000000000000000000C3 +:1031E00000000000000000000000000000000000DF +:1031F00000000000000000000000000000000000CF +:1032000000000000000000000000000000000000BE +:1032100000003C005CCF0100000000000000000046 +:10322000000000000000000000000000000000009E +:10323000000000000000000000000000000000008E +:10324000000000000000000000000000000000007E +:10325000000000003C0098CF0100000000000000CA +:10326000000000000000000000000000000000005E +:10327000000000000000000000000000000000004E +:10328000000000000000000000000000000000003E +:103290000000000000003C00D4CF0100000000004E +:1032A000000000000000000000000000000000001E +:1032B000000000000000000000000000000000000E +:1032C00000000000000000000000000000000000FE +:1032D00000000000000000003C0010D001000000D1 +:1032E00000000000000000000000000000000000DE +:1032F00000000000000000000000000000000000CE +:1033000000000000000000000000000000000000BD +:10331000000000000000000000003C004CD0010054 +:10332000000000000000000000000000000000009D +:10333000000000000000000000000000000000008D +:10334000000000000000000000000000000000007D +:103350000000000000000000000000003C0088D0D9 +:10336000010000000000000000000000000000005C +:10337000000000000000000000000000000000004D +:10338000000000000000000000000000000000003D +:1033900000000000000000000000000000003C00F1 +:1033A000C4D0010000000000000000000000000088 +:1033B000000000000000000000000000000000000D +:1033C00000000000000000000000000000000000FD +:1033D00000000000000000000000000000000000ED +:1033E0003C0000D1010000000000000000000000CF +:1033F00000000000000000000000000000000000CD +:1034000000000000000000000000000000000000BC +:1034100000000000000000000000000000000000AC +:1034200000003C003CD10100000000000000000052 +:10343000000000000000000000000000000000008C +:10344000000000000000000000000000000000007C +:10345000000000000000000000000000000000006C +:10346000000000003C0078D10100000000000000D6 +:10347000000000000000000000000000000000004C +:10348000000000000000000000000000000000003C +:10349000000000000000000000000000000000002C +:1034A0000000000000003C00B4D10100000000005A +:1034B000000000000000000000000000000000000C +:1034C00000000000000000000000000000000000FC +:1034D00000000000000000000000000000000000EC +:1034E00000000000000000003C00F0D101000000DE +:1034F00000000000000000000000000000000000CC +:1035000000000000000000000000000000000000BB +:1035100000000000000000000000000000000000AB +:10352000000000000000000000003C002CD2010060 +:10353000000000000000000000000000000000008B +:10354000000000000000000000000000000000007B +:10355000000000000000000000000000000000006B +:103560000000000000000000000000003C0068D2E5 +:10357000010000000000000000000000000000004A +:10358000000000000000000000000000000000003B +:10359000000000000000000000000000000000002B +:1035A00000000000000000000000000000003C00DF +:1035B000A4D2010000000000000000000000000094 +:1035C00000000000000000000000000000000000FB +:1035D00000000000000000000000000000000000EB +:1035E00000000000000000000000000000000000DB +:1035F0003C00E0D2010000000000000000000000DC +:1036000000000000000000000000000000000000BA +:1036100000000000000000000000000000000000AA +:10362000000000000000000000000000000000009A +:1036300000003C001CD3010000000000000000005E +:10364000000000000000000000000000000000007A +:10365000000000000000000000000000000000006A +:10366000000000000000000000000000000000005A +:10367000000000003C0058D30100000000000000E2 +:10368000000000000000000000000000000000003A +:10369000000000000000000000000000000000002A +:1036A000000000000000000000000000000000001A +:1036B0000000000000003C0094D301000000000066 +:1036C00000000000000000000000000000000000FA +:1036D00000000000000000000000000000000000EA +:1036E00000000000000000000000000000000000DA +:1036F00000000000000000003C00D0D301000000EA +:1037000000000000000000000000000000000000B9 +:1037100000000000000000000000000000000000A9 +:103720000000000000000000000000000000000099 +:10373000000000000000000000003C000CD401006C +:103740000000000000000000000000000000000079 +:103750000000000000000000000000000000000069 +:103760000000000000000000000000000000000059 +:103770000000000000000000000000003C0048D4F1 +:103780000100000000000000000000000000000038 +:103790000000000000000000000000000000000029 +:1037A0000000000000000000000000000000000019 +:1037B00000000000000000000000000000003C00CD +:1037C00084D40100000000000000000000000000A0 +:1037D00000000000000000000000000000000000E9 +:1037E00000000000000000000000000000000000D9 +:1037F00000000000000000000000000000000000C9 +:103800003C00C0D4010000000000000000000000E7 +:1038100000000000000000000000000000000000A8 +:103820000000000000000000000000000000000098 +:103830000000000000000000000000000000000088 +:1038400000003C00FCD4010000000000000000006B +:103850000000000000000000000000000000000068 +:103860000000000000000000000000000000000058 +:103870000000000000000000000000000000000048 +:10388000000000003C0038D50100000000000000EE +:103890000000000000000000000000000000000028 +:1038A0000000000000000000000000000000000018 +:1038B0000000000000000000000000000000000008 +:1038C0000000000000003C0074D501000000000072 +:1038D00000000000000000000000000000000000E8 +:1038E00000000000000000000000000000000000D8 +:1038F00000000000000000000000000000000000C8 +:1039000000000000000000003C00B0D501000000F5 +:1039100000000000000000000000000000000000A7 +:103920000000000000000000000000000000000097 +:103930000000000000000000000000000000000087 +:10394000000000000000000000003C00ECD5010079 +:103950000000000000000000000000000000000067 +:103960000000000000000000000000000000000057 +:103970000000000000000000000000000000000047 +:103980000000000000000000000000003C0028D6FD +:103990000100000000000000000000000000000026 +:1039A0000000000000000000000000000000000017 +:1039B0000000000000000000000000000000000007 +:1039C00000000000000000000000000000003C00BB +:1039D00064D60100000000000000000000000000AC +:1039E00000000000000000000000000000000000D7 +:1039F00000000000000000000000000000000000C7 +:103A000000000000000000000000000000000000B6 +:103A10003C00A0D6010000000000000000000000F3 +:103A20000000000000000000000000000000000096 +:103A30000000000000000000000000000000000086 +:103A40000000000000000000000000000000000076 +:103A500000003C00DCD60100000000000000000077 +:103A60000000000000000000000000000000000056 +:103A70000000000000000000000000000000000046 +:103A80000000000000000000000000000000000036 +:103A9000000000003C0018D70100000000000000FA +:103AA0000000000000000000000000000000000016 +:103AB0000000000000000000000000000000000006 +:103AC00000000000000000000000000000000000F6 +:103AD0000000000000003C0054D70100000000007E +:103AE00000000000000000000000000000000000D6 +:103AF00000000000000000000000000000000000C6 +:103B000000000000000000000000000000000000B5 +:103B100000000000000000003C0090D70100000001 +:103B20000000000000000000000000000000000095 +:103B30000000000000000000000000000000000085 +:103B40000000000000000000000000000000000075 +:103B5000000000000000000000003C00CCD7010085 +:103B60000000000000000000000000000000000055 +:103B70000000000000000000000000000000000045 +:103B80000000000000000000000000000000000035 +:103B90000000000000000000000000003C0008D809 +:103BA0000100000000000000000000000000000014 +:103BB0000000000000000000000000000000000005 +:103BC00000000000000000000000000000000000F5 +:103BD00000000000000000000000000000003C00A9 +:103BE00044D80100000000000000000000000000B8 +:103BF00000000000000000000000000000000000C5 +:103C000000000000000000000000000000000000B4 +:103C100000000000000000000000000000000000A4 +:103C20003C0080D8010000000000000000000000FF +:103C30000000000000000000000000000000000084 +:103C40000000000000000000000000000000000074 +:103C50000000000000000000000000000000000064 +:103C600000003C00BCD80100000000000000000083 +:103C70000000000000000000000000000000000044 +:103C80000000000000000000000000000000000034 +:103C90000000000000000000000000000000000024 +:103CA000000000003C00F8D8010000000000000007 +:103CB0000000000000000000000000000000000004 +:103CC00000000000000000000000000000000000F4 +:103CD00000000000000000000000000000000000E4 +:103CE0000000000000003C0034D90100000000008A +:103CF00000000000000000000000000000000000C4 +:103D000000000000000000000000000000000000B3 +:103D100000000000000000000000000000000000A3 +:103D200000000000000000003C0070D9010000000D +:103D30000000000000000000000000000000000083 +:103D40000000000000000000000000000000000073 +:103D50000000000000000000000000000000000063 +:103D6000000000000000000000003C00ACD9010091 +:103D70000000000000000000000000000000000043 +:103D80000000000000000000000000000000000033 +:103D90000000000000000000000000000000000023 +:103DA0000000000000000000000000003C00E8D916 +:103DB0000100000000000000000000000000000002 +:103DC00000000000000000000000000000000000F3 +:103DD00000000000000000000000000000000000E3 +:103DE00000000000000000000000000000003C0097 +:103DF00024DA0100000000000000000000000000C4 +:103E000000000000000000000000000000000000B2 +:103E100000000000000000000000000000000000A2 +:103E20000000000000000000000000000000000092 +:103E30003C0060DA0100000000000000000000000B +:103E40000000000000000000000000000000000072 +:103E50000000000000000000000000000000000062 +:103E60000000000000000000000000000000000052 +:103E700000003C009CDA010000000000000000008F +:103E80000000000000000000000000000000000032 +:103E90000000000000000000000000000000000022 +:103EA0000000000000000000000000000000000012 +:103EB000000000003C00D8DA010000000000000013 +:103EC00000000000000000000000000000000000F2 +:103ED00000000000000000000000000000000000E2 +:103EE00000000000000000000000000000000000D2 +:103EF0000000000000003C0014DB01000000000096 +:103F000000000000000000000000000000000000B1 +:103F100000000000000000000000000000000000A1 +:103F20000000000000000000000000000000000091 +:103F300000000000000000003C0050DB0100000019 +:103F40000000000000000000000000000000000071 +:103F50000000000000000000000000000000000061 +:103F60000000000000000000000000000000000051 +:103F7000000000000000000000003C008CDB01009D +:103F80000000000000000000000000000000000031 +:103F90000000000000000000000000000000000021 +:103FA0000000000000000000000000000000000011 +:103FB0000000000000000000000000003C00C8DB22 +:103FC00001000000000000000000000000000000F0 +:103FD00000000000000000000000000000000000E1 +:103FE00000000000000000000000000000000000D1 +:103FF00000000000000000000000000000003C0085 +:1040000004DC0100000000000000000000000000CF +:1040100000000000000000000000000000000000A0 +:104020000000000000000000000000000000000090 +:104030000000000000000000000000000000000080 +:104040003C0040DC01000000000000000000000017 +:104050000000000000000000000000000000000060 +:104060000000000000000000000000000000000050 +:104070000000000000000000000000000000000040 +:1040800000003C007CDC010000000000000000009B +:104090000000000000000000000000000000000020 +:1040A0000000000000000000000000000000000010 +:1040B0000000000000000000000000000000000000 +:1040C000000000003C00B8DC01000000000000001F +:1040D00000000000000000000000000000000000E0 +:1040E00000000000000000000000000000000000D0 +:1040F00000000000000000000000000000000000C0 +:104100000000000000003C00F4DC010000000000A2 +:10411000000000000000000000000000000000009F +:10412000000000000000000000000000000000008F +:10413000000000000000000000000000000000007F +:1041400000000000000000003C0030DD0100000025 +:10415000000000000000000000000000000000005F +:10416000000000000000000000000000000000004F +:10417000000000000000000000000000000000003F +:10418000000000000000000000003C006CDD0100A9 +:10419000000000000000000000000000000000001F +:1041A000000000000000000000000000000000000F +:1041B00000000000000000000000000000000000FF +:1041C0000000000000000000000000003C00A8DD2E +:1041D00001000000000000000000000000000000DE +:1041E00000000000000000000000000000000000CF +:1041F00000000000000000000000000000000000BF +:1042000000000000000000000000000000003C0072 +:10421000E4DD0100000000000000000000000000DC +:10422000000000000000000000000000000000008E +:10423000000000000000000000000000000000007E +:10424000000000000000000000000000000000006E +:104250003C0020DE01000000000000000000000023 +:10426000000000000000000000000000000000004E +:10427000000000000000000000000000000000003E +:10428000000000000000000000000000000000002E +:1042900000003C005CDE01000000000000000000A7 +:1042A000000000000000000000000000000000000E +:1042B00000000000000000000000000000000000FE +:1042C00000000000000000000000000000000000EE +:1042D000000000003C0098DE01000000000000002B +:1042E00000000000000000000000000000000000CE +:1042F00000000000000000000000000000000000BE +:1043000000000000000000000000000000000000AD +:104310000000000000003C00D4DE010000000000AE +:10432000000000000000000000000000000000008D +:10433000000000000000000000000000000000007D +:10434000000000000000000000000000000000006D +:1043500000000000000000003C0010DF0100000031 +:10436000000000000000000000000000000000004D +:10437000000000000000000000000000000000003D +:10438000000000000000000000000000000000002D +:10439000000000000000000000003C004CDF0100B5 +:1043A000000000000000000000000000000000000D +:1043B00000000000000000000000000000000000FD +:1043C00000000000000000000000000000000000ED +:1043D0000000000000000000000000003C0088DF3A +:1043E00001000000000000000000000000000000CC +:1043F00000000000000000000000000000000000BD +:1044000000000000000000000000000000000000AC +:1044100000000000000000000000000000003C0060 +:10442000C4DF0100000000000000000000000000E8 +:10443000000000000000000000000000000000007C +:10444000000000000000000000000000000000006C +:10445000000000000000000000000000000000005C +:104460003C0000E00100000000000000000000002F +:10447000000000000000000000000000000000003C +:10448000000000000000000000000000000000002C +:10449000000000000000000000000000000000001C +:1044A00000003C003CE001000000000000000000B3 +:1044B00000000000000000000000000000000000FC +:1044C00000000000000000000000000000000000EC +:1044D00000000000000000000000000000000000DC +:1044E000000000003C0078E0010000000000000037 +:1044F00000000000000000000000000000000000BC +:1045000000000000000000000000000000000000AB +:10451000000000000000000000000000000000009B +:104520000000000000003C00B4E0010000000000BA +:10453000000000000000000000000000000000007B +:10454000000000000000000000000000000000006B +:10455000000000000000000000000000000000005B +:1045600000000000000000003C00F0E0010000003E +:10457000000000000000000000000000000000003B +:10458000000000000000000000000000000000002B +:10459000000000000000000000000000000000001B +:1045A000000000000000000000003C002CE10100C1 +:1045B00000000000000000000000000000000000FB +:1045C00000000000000000000000000000000000EB +:1045D00000000000000000000000000000000000DB +:1045E0000000000000000000000000003C0068E146 +:1045F00001000000000000000000000000000000BA +:1046000000000000000000000000000000000000AA +:10461000000000000000000000000000000000009A +:1046200000000000000000000000000000003C004E +:10463000A4E10100000000000000000000000000F4 +:10464000000000000000000000000000000000006A +:10465000000000000000000000000000000000005A +:10466000000000000000000000000000000000004A +:104670003C00E0E10100000000000000000000003C +:10468000000000000000000000000000000000002A +:10469000000000000000000000000000000000001A +:1046A000000000000000000000000000000000000A +:1046B00000003C001CE201000000000000000000BF +:1046C00000000000000000000000000000000000EA +:1046D00000000000000000000000000000000000DA +:1046E00000000000000000000000000000000000CA +:1046F000000000003C0058E2010000000000000043 +:1047000000000000000000000000000000000000A9 +:104710000000000000000000000000000000000099 +:104720000000000000000000000000000000000089 +:104730000000000000003C0094E2010000000000C6 +:104740000000000000000000000000000000000069 +:104750000000000000000000000000000000000059 +:104760000000000000000000000000000000000049 +:1047700000000000000000003C00D0E2010000004A +:104780000000000000000000000000000000000029 +:104790000000000000000000000000000000000019 +:1047A0000000000000000000000000000000000009 +:1047B000000000000000000000003C000CE30100CD +:1047C00000000000000000000000000000000000E9 +:1047D00000000000000000000000000000000000D9 +:1047E00000000000000000000000000000000000C9 +:1047F0000000000000000000000000003C0048E352 +:1048000001000000000000000000000000000000A7 +:104810000000000000000000000000000000000098 +:104820000000000000000000000000000000000088 +:1048300000000000000000000000000000003C003C +:1048400084E3010000000000000000000000000000 +:104850000000000000000000000000000000000058 +:104860000000000000000000000000000000000048 +:104870000000000000000000000000000000000038 +:104880003C00C0E301000000000000000000000048 +:104890000000000000000000000000000000000018 +:1048A0000000000000000000000000000000000008 +:1048B00000000000000000000000000000000000F8 +:1048C00000003C00FCE301000000000000000000CC +:1048D00000000000000000000000000000000000D8 +:1048E00000000000000000000000000000000000C8 +:1048F00000000000000000000000000000000000B8 +:10490000000000003C0038E401000000000000004E +:104910000000000000000000000000000000000097 +:104920000000000000000000000000000000000087 +:104930000000000000000000000000000000000077 +:104940000000000000003C0074E4010000000000D2 +:104950000000000000000000000000000000000057 +:104960000000000000000000000000000000000047 +:104970000000000000000000000000000000000037 +:1049800000000000000000003C00B0E40100000056 +:104990000000000000000000000000000000000017 +:1049A0000000000000000000000000000000000007 +:1049B00000000000000000000000000000000000F7 +:1049C000000000000000000000003C00ECE40100DA +:1049D00000000000000000000000000000000000D7 +:1049E00000000000000000000000000000000000C7 +:1049F00000000000000000000000000000000000B7 +:104A00000000000000000000000000003C0028E55D +:104A10000100000000000000000000000000000095 +:104A20000000000000000000000000000000000086 +:104A30000000000000000000000000000000000076 +:104A400000000000000000000000000000003C002A +:104A500064E501000000000000000000000000000C +:104A60000000000000000000000000000000000046 +:104A70000000000000000000000000000000000036 +:104A80000000000000000000000000000000000026 +:104A90003C00A0E501000000000000000000000054 +:104AA0000000000000000000000000000000000006 +:104AB00000000000000000000000000000000000F6 +:104AC00000000000000000000000000000000000E6 +:104AD00000003C00DCE501000000000000000000D8 +:104AE00000000000000000000000000000000000C6 +:104AF00000000000000000000000000000000000B6 +:104B000000000000000000000000000000000000A5 +:104B1000000000003C0018E601000000000000005A +:104B20000000000000000000000000000000000085 +:104B30000000000000000000000000000000000075 +:104B40000000000000000000000000000000000065 +:104B50000000000000003C0054E6010000000000DE +:104B60000000000000000000000000000000000045 +:104B70000000000000000000000000000000000035 +:104B80000000000000000000000000000000000025 +:104B900000000000000000003C0090E60100000062 +:104BA0000000000000000000000000000000000005 +:104BB00000000000000000000000000000000000F5 +:104BC00000000000000000000000000000000000E5 +:104BD000000000000000000000003C00CCE60100E6 +:104BE00000000000000000000000000000000000C5 +:104BF00000000000000000000000000000000000B5 +:104C000000000000000000000000000000000000A4 +:104C10000000000000000000000000003C0008E769 +:104C20000100000000000000000000000000000083 +:104C30000000000000000000000000000000000074 +:104C40000000000000000000000000000000000064 +:104C500000000000000000000000000000003C0018 +:104C600044E7010000000000000000000000000018 +:104C70000000000000000000000000000000000034 +:104C80000000000000000000000000000000000024 +:104C90000000000000000000000000000000000014 +:104CA0003C0080E701000000000000000000000060 +:104CB00000000000000000000000000000000000F4 +:104CC00000000000000000000000000000000000E4 +:104CD00000000000000000000000000000000000D4 +:104CE00000003C00BCE701000000000000000000E4 +:104CF00000000000000000000000000000000000B4 +:104D000000000000000000000000000000000000A3 +:104D10000000000000000000000000000000000093 +:104D2000000000003C00F8E7010000000000000067 +:104D30000000000000000000000000000000000073 +:104D40000000000000000000000000000000000063 +:104D50000000000000000000000000000000000053 +:104D60000000000000003C0034E8010000000000EA +:104D70000000000000000000000000000000000033 +:104D80000000000000000000000000000000000023 +:104D90000000000000000000000000000000000013 +:104DA00000000000000000003C0070E8010000006E +:104DB00000000000000000000000000000000000F3 +:104DC00000000000000000000000000000000000E3 +:104DD00000000000000000000000000000000000D3 +:104DE000000000000000000000003C00ACE80100F2 +:104DF00000000000000000000000000000000000B3 +:104E000000000000000000000000000000000000A2 +:104E10000000000000000000000000000000000092 +:104E20000000000000000000000000003C00E8E876 +:104E30000100000000000000000000000000000071 +:104E40000000000000000000000000000000000062 +:104E50000000000000000000000000000000000052 +:104E600000000000000000000000000000003C0006 +:104E700024E9010000000000000000000000000024 +:104E80000000000000000000000000000000000022 +:104E90000000000000000000000000000000000012 +:104EA0000000000000000000000000000000000002 +:104EB0003C0060E90100000000000000000000006C +:104EC00000000000000000000000000000000000E2 +:104ED00000000000000000000000000000000000D2 +:104EE00000000000000000000000000000000000C2 +:104EF00000003C009CE901000000000000000000F0 +:104F000000000000000000000000000000000000A1 +:104F10000000000000000000000000000000000091 +:104F20000000000000000000000000000000000081 +:104F3000000000003C00D8E9010000000000000073 +:104F40000000000000000000000000000000000061 +:104F50000000000000000000000000000000000051 +:104F60000000000000000000000000000000000041 +:104F70000000000000003C0014EA010000000000F6 +:104F80000000000000000000000000000000000021 +:104F90000000000000000000000000000000000011 +:104FA0000000000000000000000000000000000001 +:104FB00000000000000000003C0050EA010000007A +:104FC00000000000000000000000000000000000E1 +:104FD00000000000000000000000000000000000D1 +:104FE00000000000000000000000000000000000C1 +:104FF000000000000000000000003C008CEA0100FE +:1050000000000000000000000000000000000000A0 +:105010000000000000000000000000000000000090 +:105020000000000000000000000000000000000080 +:105030000000000000000000000000003C00C8EA82 +:10504000010000000000000000000000000000005F +:105050000000000000000000000000000000000050 +:105060000000000000000000000000000000000040 +:1050700000000000000000000000000000003C00F4 +:1050800004EB010000000000000000000000000030 +:105090000000000000000000000000000000000010 +:1050A0000000000000000000000000000000000000 +:1050B00000000000000000000000000000000000F0 +:1050C0003C0040EB01000000000000000000000078 +:1050D00000000000000000000000000000000000D0 +:1050E00000000000000000000000000000000000C0 +:1050F00000000000000000000000000000000000B0 +:1051000000003C007CEB01000000000000000000FB +:10511000000000000000000000000000000000008F +:10512000000000000000000000000000000000007F +:10513000000000000000000000000000000000006F +:10514000000000003C00B8EB01000000000000007F +:10515000000000000000000000000000000000004F +:10516000000000000000000000000000000000003F +:10517000000000000000000000000000000000002F +:105180000000000000003C00F4EB01000000000003 +:10519000000000000000000000000000000000000F +:1051A00000000000000000000000000000000000FF +:1051B00000000000000000000000000000000000EF +:1051C00000000000000000003C0030EC0100000086 +:1051D00000000000000000000000000000000000CF +:1051E00000000000000000000000000000000000BF +:1051F00000000000000000000000000000000000AF +:10520000000000000000000000003C006CEC010009 +:10521000000000000000000000000000000000008E +:10522000000000000000000000000000000000007E +:10523000000000000000000000000000000000006E +:105240000000000000000000000000003C00A8EC8E +:10525000010000000000000000000000000000004D +:10526000000000000000000000000000000000003E +:10527000000000000000000000000000000000002E +:1052800000000000000000000000000000003C00E2 +:10529000E4EC01000000000000000000000000003D +:1052A00000000000000000000000000000000000FE +:1052B00000000000000000000000000000000000EE +:1052C00000000000000000000000000000000000DE +:1052D0003C0020ED01000000000000000000000084 +:1052E00000000000000000000000000000000000BE +:1052F00000000000000000000000000000000000AE +:10530000000000000000000000000000000000009D +:1053100000003C005CED0100000000000000000007 +:10532000000000000000000000000000000000007D +:10533000000000000000000000000000000000006D +:10534000000000000000000000000000000000005D +:10535000000000003C0098ED01000000000000008B +:10536000000000000000000000000000000000003D +:10537000000000000000000000000000000000002D +:10538000000000000000000000000000000000001D +:105390000000000000003C00D4ED0100000000000F +:1053A00000000000000000000000000000000000FD +:1053B00000000000000000000000000000000000ED +:1053C00000000000000000000000000000000000DD +:1053D00000000000000000003C0010EE0100000092 +:1053E00000000000000000000000000000000000BD +:1053F00000000000000000000000000000000000AD +:10540000000000000000000000000000000000009C +:10541000000000000000000000003C004CEE010015 +:10542000000000000000000000000000000000007C +:10543000000000000000000000000000000000006C +:10544000000000000000000000000000000000005C +:105450000000000000000000000000003C0088EE9A +:10546000010000000000000000000000000000003B +:10547000000000000000000000000000000000002C +:10548000000000000000000000000000000000001C +:1054900000000000000000000000000000003C00D0 +:1054A000C4EE010000000000000000000000000049 +:1054B00000000000000000000000000000000000EC +:1054C00000000000000000000000000000000000DC +:1054D00000000000000000000000000000000000CC +:1054E0003C0000EF01000000000000000000000090 +:1054F00000000000000000000000000000000000AC +:10550000000000000000000000000000000000009B +:10551000000000000000000000000000000000008B +:1055200000003C003CEF0100000000000000000013 +:10553000000000000000000000000000000000006B +:10554000000000000000000000000000000000005B +:10555000000000000000000000000000000000004B +:10556000000000003C0078EF010000000000000097 +:10557000000000000000000000000000000000002B +:10558000000000000000000000000000000000001B +:10559000000000000000000000000000000000000B +:1055A0000000000000003C00B4EF0100000000001B +:1055B00000000000000000000000000000000000EB +:1055C00000000000000000000000000000000000DB +:1055D00000000000000000000000000000000000CB +:1055E00000000000000000003C00F0EF010000009F +:1055F00000000000000000000000000000000000AB +:10560000000000000000000000000000000000009A +:10561000000000000000000000000000000000008A +:10562000000000000000000000003C002CF0010021 +:10563000000000000000000000000000000000006A +:10564000000000000000000000000000000000005A +:10565000000000000000000000000000000000004A +:105660000000000000000000000000003C0068F0A6 +:105670000100000000000000000000000000000029 +:10568000000000000000000000000000000000001A +:10569000000000000000000000000000000000000A +:1056A00000000000000000000000000000003C00BE +:1056B000A4F0010000000000000000000000000055 +:1056C00000000000000000000000000000000000DA +:1056D00000000000000000000000000000000000CA +:1056E00000000000000000000000000000000000BA +:1056F0003C00E0F00100000000000000000000009D +:105700000000000000000000000000000000000099 +:105710000000000000000000000000000000000089 +:105720000000000000000000000000000000000079 +:1057300000003C001CF1010000000000000000001F +:105740000000000000000000000000000000000059 +:105750000000000000000000000000000000000049 +:105760000000000000000000000000000000000039 +:10577000000000003C0058F10100000000000000A3 +:105780000000000000000000000000000000000019 +:105790000000000000000000000000000000000009 +:1057A00000000000000000000000000000000000F9 +:1057B0000000000000003C0094F101000000000027 +:1057C00000000000000000000000000000000000D9 +:1057D00000000000000000000000000000000000C9 +:1057E00000000000000000000000000000000000B9 +:1057F00000000000000000003C00D0F101000000AB +:105800000000000000000000000000000000000098 +:105810000000000000000000000000000000000088 +:105820000000000000000000000000000000000078 +:10583000000000000000000000003C000CF201002D +:105840000000000000000000000000000000000058 +:105850000000000000000000000000000000000048 +:105860000000000000000000000000000000000038 +:105870000000000000000000000000003C0048F2B2 +:105880000100000000000000000000000000000017 +:105890000000000000000000000000000000000008 +:1058A00000000000000000000000000000000000F8 +:1058B00000000000000000000000000000003C00AC +:1058C00084F2010000000000000000000000000061 +:1058D00000000000000000000000000000000000C8 +:1058E00000000000000000000000000000000000B8 +:1058F00000000000000000000000000000000000A8 +:105900003C00C0F2010000000000000000000000A8 +:105910000000000000000000000000000000000087 +:105920000000000000000000000000000000000077 +:105930000000000000000000000000000000000067 +:1059400000003C00FCF2010000000000000000002C +:105950000000000000000000000000000000000047 +:105960000000000000000000000000000000000037 +:105970000000000000000000000000000000000027 +:10598000000000003C0038F30100000000000000AF +:105990000000000000000000000000000000000007 +:1059A00000000000000000000000000000000000F7 +:1059B00000000000000000000000000000000000E7 +:1059C0000000000000003C0074F301000000000033 +:1059D00000000000000000000000000000000000C7 +:1059E00000000000000000000000000000000000B7 +:1059F00000000000000000000000000000000000A7 +:105A000000000000000000003C00B0F301000000B6 +:105A10000000000000000000000000000000000086 +:105A20000000000000000000000000000000000076 +:105A30000000000000000000000000000000000066 +:105A4000000000000000000000003C00ECF301003A +:105A50000000000000000000000000000000000046 +:105A60000000000000000000000000000000000036 +:105A70000000000000000000000000000000000026 +:105A80000000000000000000000000003C0028F4BE +:105A90000100000000000000000000000000000005 +:105AA00000000000000000000000000000000000F6 +:105AB00000000000000000000000000000000000E6 +:105AC00000000000000000000000000000003C009A +:105AD00064F401000000000000000000000000006D +:105AE00000000000000000000000000000000000B6 +:105AF00000000000000000000000000000000000A6 +:105B00000000000000000000000000000000000095 +:105B10003C00A0F4010000000000000000000000B4 +:105B20000000000000000000000000000000000075 +:105B30000000000000000000000000000000000065 +:105B40000000000000000000000000000000000055 +:105B500000003C00DCF40100000000000000000038 +:105B60000000000000000000000000000000000035 +:105B70000000000000000000000000000000000025 +:105B80000000000000000000000000000000000015 +:105B9000000000003C0018F50100000000000000BB +:105BA00000000000000000000000000000000000F5 +:105BB00000000000000000000000000000000000E5 +:105BC00000000000000000000000000000000000D5 +:105BD0000000000000003C0054F50100000000003F +:105BE00000000000000000000000000000000000B5 +:105BF00000000000000000000000000000000000A5 +:105C00000000000000000000000000000000000094 +:105C100000000000000000003C0090F501000000C2 +:105C20000000000000000000000000000000000074 +:105C30000000000000000000000000000000000064 +:105C40000000000000000000000000000000000054 +:105C5000000000000000000000003C00CCF5010046 +:105C60000000000000000000000000000000000034 +:105C70000000000000000000000000000000000024 +:105C80000000000000000000000000000000000014 +:105C90000000000000000000000000003C0008F6CA +:105CA00001000000000000000000000000000000F3 +:105CB00000000000000000000000000000000000E4 +:105CC00000000000000000000000000000000000D4 +:105CD00000000000000000000000000000003C0088 +:105CE00044F6010000000000000000000000000079 +:105CF00000000000000000000000000000000000A4 +:105D00000000000000000000000000000000000093 +:105D10000000000000000000000000000000000083 +:105D20003C0080F6010000000000000000000000C0 +:105D30000000000000000000000000000000000063 +:105D40000000000000000000000000000000000053 +:105D50000000000000000000000000000000000043 +:105D600000003C00BCF60100000000000000000044 +:105D70000000000000000000000000000000000023 +:105D80000000000000000000000000000000000013 +:105D90000000000000000000000000000000000003 +:105DA000000000003C00F8F60100000000000000C8 +:105DB00000000000000000000000000000000000E3 +:105DC00000000000000000000000000000000000D3 +:105DD00000000000000000000000000000000000C3 +:105DE0000000000000003C0034F70100000000004B +:105DF00000000000000000000000000000000000A3 +:105E00000000000000000000000000000000000092 +:105E10000000000000000000000000000000000082 +:105E200000000000000000003C0070F701000000CE +:105E30000000000000000000000000000000000062 +:105E40000000000000000000000000000000000052 +:105E50000000000000000000000000000000000042 +:105E6000000000000000000000003C00ACF7010052 +:105E70000000000000000000000000000000000022 +:105E80000000000000000000000000000000000012 +:105E90000000000000000000000000000000000002 +:105EA0000000000000000000000000003C00E8F7D7 +:105EB00001000000000000000000000000000000E1 +:105EC00000000000000000000000000000000000D2 +:105ED00000000000000000000000000000000000C2 +:105EE00000000000000000000000000000003C0076 +:105EF00024F8010000000000000000000000000085 +:105F00000000000000000000000000000000000091 +:105F10000000000000000000000000000000000081 +:105F20000000000000000000000000000000000071 +:105F30003C0060F8010000000000000000000000CC +:105F40000000000000000000000000000000000051 +:105F50000000000000000000000000000000000041 +:105F60000000000000000000000000000000000031 +:105F700000003C009CF80100000000000000000050 +:105F80000000000000000000000000000000000011 +:105F90000000000000000000000000000000000001 +:105FA00000000000000000000000000000000000F1 +:105FB000000000003C00D8F80100000000000000D4 +:105FC00000000000000000000000000000000000D1 +:105FD00000000000000000000000000000000000C1 +:105FE00000000000000000000000000000000000B1 +:105FF0000000000000003C0014F901000000000057 +:106000000000000000000000000000000000000090 +:106010000000000000000000000000000000000080 +:106020000000000000000000000000000000000070 +:1060300000000000000000003C0050F901000000DA +:106040000000000000000000000000000000000050 +:106050000000000000000000000000000000000040 +:106060000000000000000000000000000000000030 +:10607000000000000000000000003C008CF901005E +:106080000000000000000000000000000000000010 +:106090000000000000000000000000000000000000 +:1060A00000000000000000000000000000000000F0 +:1060B0000000000000000000000000003C00C8F9E3 +:1060C00001000000000000000000000000000000CF +:1060D00000000000000000000000000000000000C0 +:1060E00000000000000000000000000000000000B0 +:1060F00000000000000000000000000000003C0064 +:1061000004FA010000000000000000000000000090 +:10611000000000000000000000000000000000007F +:10612000000000000000000000000000000000006F +:10613000000000000000000000000000000000005F +:106140003C0040FA010000000000000000000000D8 +:10615000000000000000000000000000000000003F +:10616000000000000000000000000000000000002F +:10617000000000000000000000000000000000001F +:1061800000003C007CFA010000000000000000005C +:1061900000000000000000000000000000000000FF +:1061A00000000000000000000000000000000000EF +:1061B00000000000000000000000000000000000DF +:1061C000000000003C00B8FA0100000000000000E0 +:1061D00000000000000000000000000000000000BF +:1061E00000000000000000000000000000000000AF +:1061F000000000000000000000000000000000009F +:106200000000000000003C00F4FA01000000000063 +:10621000000000000000000000000000000000007E +:10622000000000000000000000000000000000006E +:10623000000000000000000000000000000000005E +:1062400000000000000000003C0030FB01000000E6 +:10625000000000000000000000000000000000003E +:10626000000000000000000000000000000000002E +:10627000000000000000000000000000000000001E +:10628000000000000000000000003C006CFB01006A +:1062900000000000000000000000000000000000FE +:1062A00000000000000000000000000000000000EE +:1062B00000000000000000000000000000000000DE +:1062C0000000000000000000000000003C00A8FBEF +:1062D00001000000000000000000000000000000BD +:1062E00000000000000000000000000000000000AE +:1062F000000000000000000000000000000000009E +:1063000000000000000000000000000000003C0051 +:10631000E4FB01000000000000000000000000009D +:10632000000000000000000000000000000000006D +:10633000000000000000000000000000000000005D +:10634000000000000000000000000000000000004D +:106350003C0020FC010000000000000000000000E4 +:10636000000000000000000000000000000000002D +:10637000000000000000000000000000000000001D +:10638000000000000000000000000000000000000D +:1063900000003C005CFC0100000000000000000068 +:1063A00000000000000000000000000000000000ED +:1063B00000000000000000000000000000000000DD +:1063C00000000000000000000000000000000000CD +:1063D000000000003C0098FC0100000000000000EC +:1063E00000000000000000000000000000000000AD +:1063F000000000000000000000000000000000009D +:10640000000000000000000000000000000000008C +:106410000000000000003C00D4FC0100000000006F +:10642000000000000000000000000000000000006C +:10643000000000000000000000000000000000005C +:10644000000000000000000000000000000000004C +:1064500000000000000000003C0010FD01000000F2 +:10646000000000000000000000000000000000002C +:10647000000000000000000000000000000000001C +:10648000000000000000000000000000000000000C +:10649000000000000000000000003C004CFD010076 +:1064A00000000000000000000000000000000000EC +:1064B00000000000000000000000000000000000DC +:1064C00000000000000000000000000000000000CC +:1064D0000000000000000000000000003C0088FDFB +:1064E00001000000000000000000000000000000AB +:1064F000000000000000000000000000000000009C +:10650000000000000000000000000000000000008B +:1065100000000000000000000000000000003C003F +:10652000C4FD0100000000000000000000000000A9 +:10653000000000000000000000000000000000005B +:10654000000000000000000000000000000000004B +:10655000000000000000000000000000000000003B +:106560003C0000FE010000000000000000000000F0 +:10657000000000000000000000000000000000001B +:10658000000000000000000000000000000000000B +:1065900000000000000000000000000000000000FB +:1065A00000003C003CFE0100000000000000000074 +:1065B00000000000000000000000000000000000DB +:1065C00000000000000000000000000000000000CB +:1065D00000000000000000000000000000000000BB +:1065E000000000003C0078FE0100000000000000F8 +:1065F000000000000000000000000000000000009B +:10660000000000000000000000000000000000008A +:10661000000000000000000000000000000000007A +:106620000000000000003C00B4FE0100000000007B +:10663000000000000000000000000000000000005A +:10664000000000000000000000000000000000004A +:10665000000000000000000000000000000000003A +:1066600000000000000000003C00F0FE01000000FF +:10667000000000000000000000000000000000001A +:10668000000000000000000000000000000000000A +:1066900000000000000000000000000000000000FA +:1066A000000000000000000000003C002CFF010082 +:1066B00000000000000000000000000000000000DA +:1066C00000000000000000000000000000000000CA +:1066D00000000000000000000000000000000000BA +:1066E0000000000000000000000000000C0068FF37 +:1066F00001000000000000000000000000003C005D +:106700000010040070B52B4806218175C175017E0B +:10671000490849000176017E02229143017626490B +:106720000B785B085B000B7004238B700C234376A3 +:10673000202303751A244475242484761024C476F7 +:106740003C003C1004002A254D70057A3026B543E4 +:1067500020350572857A6D086D008572857A9543BE +:106760008572857A042635438572857A08263543F5 +:106770008572857AA5438572057B2C430473047B5F +:106780001C433C00781004000473047B40252C4318 +:106790000473847A23438372837AAB438372037BCB +:1067A00080242343037308789043087008780122FB +:1067B00010430870087804229043087070BD0000F0 +:1067C0000C8007003C00B4100400808007000149E1 +:1067D00004204873704740800700034980B50020BB +:1067E000088000F00AFB80BD0000FC6B01007047D0 +:1067F000000080B500F067FB80BD80B50A49182015 +:10680000C1F73BFA09493C00F01004000220C1F72F +:1068100037FA08491F20C1F733FA07491C20C1F78E +:106820002FFA06490320C1F72BFA80BD992A0000F0 +:1068300041250000552500005D2500003925000098 +:1068400080B5BFF791FD80BD3C002C11040080B5E0 +:10685000054A05490A20BFF74EFF0120044980027E +:106860000860486080BDB4740100B164000000108D +:10687000070080B500F091FE80BD80B5054A05494E +:106880001B20BFF738FF012004493C0068110400B9 +:10689000C0060860486080BDB87401002D6E00001D +:1068A0000010070080B5044800F080FE0349002076 +:1068B0004860886080BD0000414B0000BC7401004E +:1068C00080B5C5F7D5FECEF7D9F803493C00A41131 +:1068D0000400086003490A20D1F7EFF880BDBC74BA +:1068E0000100496E000080B5012220210620C8F772 +:1068F00056FCBFF770FE03490020086020210248C3 +:10690000BFF763F980BDCC5C0100646D01003C0001 +:10691000E0110400084880B50068002805D006484A +:106920005430426A0021BFF7F3F8044A04490320B7 +:10693000BFF7ACFD80BD0000506D010089980000DC +:106940009198000080B500F003F800F019F880BDC0 +:106950003C001C12040010B5094C6021201CBFF73C +:106960003AF90020C043A0602060FF200230E0849C +:106970002022201C40300249BFF75BF910BD0010F7 +:1069800007007052010000200A49C0438860094B8B +:106990000A493C0058120400002082000130000621 +:1069A000000E20289950F8D30649044A081C1030DC +:1069B000083A03C27047000000100700E07E0100A3 +:1069C0007575000000A00700044800210022002384 +:1069D0000EC00C383C009412040001214160704745 +:1069E0000000707801007047000003480021002279 +:1069F00000230EC008C070470000885A01000449F7 +:106A000080B500204861024840211C30BFF7E9F8FA +:106A100080BDFC5A01003C00D012040080B5CEF7C6 +:106A20003FF80349886103490320D1F755F880BD39 +:106A3000FC5A01000D17010080B5C0F7A5F980BD13 +:106A4000FEB56C4900200090C8786B4C6B4F430733 +:106A5000C006C017DB0EE3583C000C1304000130E5 +:106A600038623B61081C8078664E03224107A036DD +:106A70000296490F3172890061583C1C6161019195 +:106A8000C006C00F7862201C002787610020211CEF +:106A9000C86159485949007809793C0048130400F5 +:106AA0005A4C4E07760F711C8C46B1008E465649E3 +:106AB0008031002824D0524F01287F781AD0022834 +:106AC00071D14F48002F0CD0012F6CD140794D4D22 +:106AD0004007400F8200AA584B4D01303C00841300 +:106AE0000400EA61A07304224B48484DC8614A483B +:106AF000002F00D04A482F1C11E04248002F55D1EA +:106B00000770022747703F484078002810D00128BE +:106B100001D002284AD13F483D4FC8613F483C0060 +:106B2000C013040088613A4970460858351CB861A2 +:106B30006046607304E03C48022288613B48C861BB +:106B40000020324906E00E18B6787607760F042E3C +:106B50002FD801309042F6D3C8792E4FC007C00F0E +:106B60003C00FC130400F86033484168194341605D +:106B7000816819438160019AB9698C461143FA69A9 +:106B8000866811438E4386604668314341600199AF +:106B90000B43181C614608431043011C00220220CD +:106BA000C7F73C003814040003FA1E4E403E7078CC +:106BB000C008C00028437070701C017800E029E014 +:106BC0000825A94301700120C043B08000210120A5 +:106BD000CFF76CFC301C8030817809090901817085 +:106BE0000F2101703C0074140400164A69041160FE +:106BF0005160029E1021327A7B6A002B00D1002165 +:106C000011432173817829438170E0780121084381 +:106C1000E070D2F7F2F9012000900098FEBDC05755 +:106C200001006C4301003C00B0140400A46C01009E +:106C300040900700C91D0000811D0000A51D000037 +:106C4000991D0000F11D0000100007000010070052 +:106C50000349002088620870487008710862704714 +:106C6000AC7E010080B501213C00EC140400002042 +:106C7000CDF769FF80BDB0B50F48C0F718FC0E4DC9 +:106C8000032028700D490D480C3948600D480A4C06 +:106C9000886040211834201CBEF7C1FFFF216868BE +:106CA000090608432060FF2106223C002815040045 +:106CB000201DBFF779F80120E060B0BDC0A8130A1D +:106CC000206E0100C0A81301FFFFFF0080B502493C +:106CD0000120C8F745FF80BD9D1C000098B50C4CF5 +:106CE00000206060E0600B4B0B4982003C006415A3 +:106CF0000400013020289950FADB6A460949052032 +:106D0000BFF72FFD0020C043206006492020086007 +:106D1000486098BD00000040070030740100A9756C +:106D20000000B59F000000100700054900203C004E +:106D3000A0150400086005488178282291438170DD +:106D40008178114381707047786E01000000070060 +:106D500070470000414810B50068022188433F4950 +:106D60000860081C0068022108433C4908603C4850 +:106D70003C00DC1504004068802188433A494860A3 +:106D8000081C006880210843374908603748017AA9 +:106D9000012421430172017A022211430172017A16 +:106DA000042291430172017A082211430172017B8E +:106DB00021433C00181604000173017B0222114399 +:106DC0000173017B042211430173017B08221143EB +:106DD00001732E214173817B3822914328318173C5 +:106DE00020214174817BC908C900033181732221AC +:106DF000C17320493C0054160400097A41721E49AF +:106E0000497A01743C220277011C10314A735023E5 +:106E10008B735A23CB730D23011C20310B70174B3E +:106E200043840E234B7000214182302101700521E3 +:106E30004170042141713C00901604008471C471BA +:106E40000C210171F82141800F49CA728A72032214 +:106E50000A7209224A7208220A73027A40231A43EC +:106E600002724C73FFF7A2FC0848017821430170BD +:106E700010BD0000F00007003C00CC160400F40038 +:106E800007000C800700764601002409000080807E +:106E90000700A080070080B518210948BEF7D7FE7B +:106EA000084800213C3841608160C1600161416156 +:106EB000816101210162FFF75CFF3C0008170400BB +:106EC000C0F76CFF80BD0000247E0100B0B52148F2 +:106ED000006840081F4940000860081C0068012144 +:106EE00008431C4908601C4A1079012108431071AD +:106EF000107902218843107100F06CF83C004417AF +:106F00000400107A012108431072107AFE21884390 +:106F10000A301072282090725A20D072114D14201D +:106F200028772C1C1034A0731620A8751820E8753B +:106F3000FFF7A1FC0C486886E07B4006400E3C0051 +:106F4000801704000E210843E073E07B8021084392 +:106F5000E07307484179042211434171B0BD00003C +:106F6000F00007000080070030800700FF010000EC +:106F70005000070080B5FFF7AFFF00201449C04361 +:106F80003C00BC1704008860C1F70BF913490020CE +:106F90004862C860486108618861C8610F4B086237 +:106FA0000F4A086338331A8001225A710B4A403263 +:106FB000D0601360082313815060094A8A62FF225F +:106FC0000A703C00F81704004870054800210022B0 +:106FD000503000230EC0C1F7FFF880BD003007001D +:106FE000046C0100BEBA0000857500000348102142 +:106FF00081710221C1713021417270470080070008 +:10700000704700003C003418040000B5C1F7DBFBFA +:1070100000BD7047000080B5CDF787FD014988604D +:1070200080BD50D9010080B506210548BEF7FDFDA1 +:10703000044900200439086000F067F800F003F804 +:1070400080BDEC6701003C007018040010B5074CCF +:107050002C21201CBEF710FE0120207003490020C7 +:107060001C39C8600861886110BD000078690100A2 +:1070700080B5CDF75DFD0949886009490820D0F742 +:1070800073FD08490920D0F73C00AC1804006FFDDF +:1070900007491120D0F76BFD0648C2F774F980BD8F +:1070A00000007869010021350000A1380000453456 +:1070B0000000BD26010080B586B00F48C4F745F931 +:1070C00000F045F8FFF7D7FFFFF73C00E818040091 +:1070D000ABFF0C490320D0F74DFD0B4869460090EB +:1070E0000020019009480490094802900948039043 +:1070F000094805900020C4F7CFF806B080BD000015 +:10710000F467010045350000953200003C00241969 +:107110000400A07D0100FD320000CD310000457D5E +:10712000010010B5CDF7D5FC0948094C302160614C +:1071300008487430BEF7A9FD0020A062064920610E +:10714000E1636064A06414212165606210BD3C00AD +:1071500060190400B9750000447D0100701700003B +:1071600080B502210920044AD1F7E8FECDF7ECFCF6 +:107170000249086380BD000039390000447D0100E8 +:1071800080B5AC210348BEF783FD00F051F800F054 +:107190003C009C19040049F880BDA46C010008B5AE +:1071A00000F04DF800F045F800211620184AD1F7FC +:1071B000C8FE174A0421101C403001700021817064 +:1071C0001121C18014490181101C8030C17808222E +:1071D00091433C00D8190400C170C1781143C170BB +:1071E0006A460F491420BFF7F5FA0E490720D0F779 +:1071F000CDFC0D490F20D0F7C9FCCDF7ABFC0B49F6 +:1072000008600A4844388068002802D00020C6F789 +:107210006FF908BD3C00141A0400B53B0000009053 +:107220000700E7FD00008D410000CD480000D9496E +:107230000000A46C010080B500F06FFC80BD7047B9 +:10724000000080B500F061FC80BD70470000B0B563 +:1072500030210C48BEF73C00501A040025FD0B4CB1 +:1072600000250A48843C3822032170386560BEF747 +:10727000DDFD0648382201213838BEF7D7FD0E2043 +:10728000A5606070207000F01DF8B0BD946701002B +:10729000044900B5012048603C008C1A0400886055 +:1072A000C860C3F7F8FF00BD0000D467010080B5D7 +:1072B00002210A20024AD1F750FE80BD00001D5A6B +:1072C000000080B500F005F880BD80B500F0FDFB42 +:1072D00080BD80B502490420D0F73C00C81A0400E4 +:1072E00061FC80BD651F000000211748C94380B5BF +:1072F000164B0170181C102220300271002210332E +:107300009A73427904231A434271427918239A43AB +:1073100008324271081CD7F759F800283C00041BBA +:10732000040003D101219A20BFF7CBFB502009496B +:1073300050220A60C8608860486008610120486186 +:107340000020D7F7D8F80449FF20086080BDF46B0F +:1073500001003000070004020700F47401003C0043 +:10736000401B040080B5D7F7FBF880BD10B5FFF7D0 +:10737000ABFBBFF7DDFB8148CDF798FA0024231C57 +:1073800004220421002001F039FA002801D0BFF7BF +:10739000C9FB231C0022FF21002001F02FFA002846 +:1073A0003C007C1B040001D0BFF7BFFB231C002264 +:1073B000FF21002001F025FA002801D0BFF7B5FB1E +:1073C000C4F727FF704884706F497F2088706E492A +:1073D0000C60032008606B4844706C480480694866 +:1073E000C0783C00B81B0400082108436749C870F6 +:1073F000081CC078042108436449C87001F07EFA73 +:10740000FFF77EFFFFF72CFE01F046FBFFF718FBAE +:1074100001F052FAFFF782FB5F48C16810229143E6 +:10742000C16001693C00F41B04005D4A1143016125 +:107430000169D20A91430161C1685A4A1143C1608E +:10744000816A594A1143816200F077F901F01FF80F +:1074500000F093FA01F099FB00F0F1FF00F099FCC5 +:1074600000F0DDFC00F03C00301C040083FCFFF762 +:10747000B3FC01F031FA01F071FAFFF787FAFFF778 +:107480009BFA012101204B4AD1F77CFD012102200A +:10749000494AD1F777FD02210320484AD1F772FD0E +:1074A00002210420464AD1F73C006C1C04006DFD0B +:1074B00002210520454AD1F768FD02210620434AF2 +:1074C000D1F763FD01210720424AD1F75EFD022179 +:1074D0001720404AD1F759FD022108203F4AD1F731 +:1074E00054FDFFF7C8FD3D4804603C00A81C0400A3 +:1074F0004460FFF717FAFFF709FAFFF74FFC00F0B7 +:1075000043F9FFF733FAFFF7FBFA01F085F801F0D2 +:10751000EBF901F023FA01F071F900F0E3FFFFF756 +:107520006FFA00F0AFF900F0BDF900F03C00E41C88 +:107530000400ADFC00F09BFEFFF7CDFAFFF7ABFEB9 +:1075400000F0C3F9FFF7ABFD00F08DFF00F021FF65 +:1075500000F065F900F097F900F0FDFE00F0E5FE9F +:1075600000F03FF900F073F9FFF737FE00F03C0040 +:10757000201D040021F900F073FBFFF7E5FB00F08C +:10758000D3FBFFF7A9FE00F0BBFB00F009FF00F002 +:10759000DBF91848C9F756F81748C9F72BF8002245 +:1075A0000121F020D1F72EFD002010BDA9690000B7 +:1075B0003C005C1D040000000700F00007002C00E8 +:1075C0000700001007003C000800C03F7438FCDFD3 +:1075D0007F3855690000E5130000610C00006D0C58 +:1075E00000003D0C0000F10D0000C53300003D0F10 +:1075F00000003C00981D0400ADD80000800007008A +:10760000505701000440010080B501F0A9F900F0D5 +:10761000C9F8FFF7C5FE01F003FB01F093FAFFF78D +:10762000CBF92C48FFF7E8F900F0AAF800F058FF72 +:10763000FFF734FD3C00D41D0400FFF7F2FBFFF719 +:107640007AFAFFF700FA00F034F900F03CF901F0A3 +:10765000E2F8FFF77AF9FFF772F9FFF79AF901F00C +:1076600066F901F08EF901F0E0F800F006FF00F095 +:10767000F0FB00F046FB3C00101E040000F0BCFFD5 +:1076800000F0E4FC00F020FEFFF740FAFFF746FEB2 +:10769000FFF756FD00F02CF900F0FAFE00F08AFE2C +:1076A00000F0D4F800F0B4F800F078FE00F04EFEE0 +:1076B00000F0DEF8FFF7ACFD3C004C1E040000F0CB +:1076C0008CF800F0F8FAFFF776FBFFF720FE01F0E8 +:1076D000A6FA00F048FB00F07CFE00F05CF9BEF773 +:1076E00057FD002080BD803801000149002008605E +:1076F0007047A87E010010B5041C3C00881E0400E1 +:1077000001D1BFF739FA0F487D21C900846001809B +:107710000D490161802141800021C16001620B4857 +:1077200041801421818007214181064A4623043289 +:107730000524137054700A21917081763C00C41E98 +:1077400004000376048110BD0000C87401000087A6 +:10775000930330000700094880B50169426911436D +:107760008269C0691143014300220320C6F7BFFCB0 +:10777000CCF71BFA0020C2F792F980BD00003C0054 +:10778000001F0400A46C0100054880B50021816041 +:107790000221C16003394160C7F73AFF80BD000094 +:1077A0004020070008B56A4604491520BFF754F881 +:1077B0000120034940050860486008BDA52101007B +:1077C0003C003C1F04000010070070470000064802 +:1077D00080B58068C001800F05D10322C143C6F780 +:1077E000BAFCD6F700FE80BD00001000070070470D +:1077F000000080B502212A20064AD1F7EAFB0022C8 +:1078000007203C00781F04000449BEF7EDFE044841 +:10781000C7F758FC80BD00008D890000D59B000093 +:107820001046010002480021002200230EC07047CC +:10783000806E010080B502212C20064AD1F7CCFBD6 +:10784000002200203C00B41F04000449BEF7CFFE14 +:1078500004490220C8F70BFA80BD058A0000E99BA5 +:107860000000B18B000002480021002200230EC05E +:1078700070471075010080B502212B20044AD1F712 +:10788000AEFB002202203C00F01F04000249BEF7BC +:10789000B1FE80BD2D8A00008D8C00007047000075 +:1078A00080B502212D20074AD1F79CFB0022012040 +:1078B0000549BEF79FFE0548CBF756FA0448CCF7BA +:1078C000F7F880BDAD8A00003C002C20040021E2C6 +:1078D0000000F9DF00002044010070470000024969 +:1078E00000200860012048607047AC79010080B535 +:1078F00002490D20D0F79BF980BD619800007047C8 +:10790000000080B5CDF777F903493C0068200400FA +:107910000860011C0248CDF797F980BDA8790100E5 +:10792000C460010080B500F029F880BD80B586B044 +:107930000C48C3F76DFDD6F7D3FB0B480D490090FB +:107940000A48049101900A48694602903C00A4202C +:1079500004000020039005900120C3F700FD0749B3 +:107960000320D0F76AF906B080BD20F70100118727 +:107970000100958701005587010098D901006D87A6 +:10798000010080B50120D6F790FC034900203C009F +:10799000E02004000860486002481439486080BD57 +:1079A00090D901003D82010070B50026094C094DB7 +:1079B0002660666044215035281CA661BEF7C8F9D0 +:1079C0001420E060E8632820E861A06028642E703D +:1079D0003C001C21040070BD0000A46E010080B5B5 +:1079E00002211820044AD1F70CFB03490820D0F7E4 +:1079F0002AF980BD0000159C0000699C0000FEB5BE +:107A0000264D2878C0070CD425490020087028701E +:107A100024483C00582104008178490849008170BD +:107A200081780122114381700024FF261F4F013607 +:107A3000211C01A8C6F732F800AB187901281FD025 +:107A4000022819D003281ED1B8680021B043B860BD +:107A5000786830433C009421040078603A683240F2 +:107A6000A02005E03B683340934201D0012101E0B2 +:107A70000138F7D27868B0437860002903D001A8B4 +:107A800000F027FF02E001A800F045FF01342406C2 +:107A90002416062CCFDB3C00D0210400044902222E +:107AA0000878104308702870FEBD0000040007002D +:107AB000E06001000000070010000700B0B50020E2 +:107AC00015231449012542008D54521801300E2807 +:107AD0005370F8D30F481C223C000C2204001C38C1 +:107AE000BEF773F90D480E212A38BEF71CF90B4971 +:107AF000002008600B4C2A21201CBEF714F92570C9 +:107B00000E2060701720A070074853210170452196 +:107B1000417020218170B0BD00003C00482204006B +:107B2000E6780100E4620100EB620100E862010016 +:107B30000C490D48002241600C4981600C49C1602C +:107B40000C4901610C4941610C498261C1610C49D8 +:107B500001620C4941620C4981620C493C0084225B +:107B60000400C162C26370470000C9750000287A32 +:107B70000100C17500008175000099750000CD7588 +:107B800000008975000091750000B57500008D75C5 +:107B90000000C5750000B0B50E480E4908603C00F5 +:107BA000C02204000831C0F743FE0C49002548609C +:107BB0000B480A4C05600B48803C05601020207182 +:107BC000E070A07160712720C043C3F7F7FB282045 +:107BD000C3F7FCFB2572B0BDFF3F00002C7D010008 +:107BE0003C00FC2204001C6701002067010080B5F6 +:107BF0002C210148BEF7C7F880BD3C7E010080B54E +:107C000038210148BEF7BFF880BD687E010080B50D +:107C100002210E20024AD1F70CFA80BD000021E0BB +:107C200000003C003823040070470000F0B585B028 +:107C3000002700AB2F4E1F8100250024281CD6F7FB +:107C4000A1FB022D03D1D6F7F5FA00280CD00124B0 +:107C5000012D03D1072000AB187101E000AB1F71AB +:107C600000AB18793C0074230400D6F708FC002C04 +:107C700039D0082103A8D6F7F2FA00AB187BFE280A +:107C800031D1587B01282AD1022102A8D6F7E7FA80 +:107C900000AB1889002826D018891849884222D0BC +:107CA00019890020BFF73C00B023040013F9041C1D +:107CB000006900AB1989D6F7D5FA206800AB1A899C +:107CC000011C0831083ACBF7A1F9002806D0022898 +:107CD00004D0022194203760BEF762FF201CBFF75A +:107CE000C7F8D4E7012194203C00EC230400BEF740 +:107CF0005AFFD5F726FF01352D062D0E042DA5D3ED +:107D000005B0F0BD000058570100FFFF00000A4811 +:107D10000021021C183280B5094B02E0016083800B +:107D200008308242FAD104486C213C002824040027 +:107D30006C38BEF737F804490220C7F7D1FF80BD81 +:107D40007C790100FC0500009D75000080B50221D2 +:107D500026200D4AD1F77CF90C48C8F773FF0C4870 +:107D6000C8F776FF0B491020CFF794FF3C0064243E +:107D700004000A490C20CFF790FF09490020C7F7FB +:107D8000B2FFCCF76EFF0749086080BD00009DA6DA +:107D90000000A9A4000081A4000031A70000B96D73 +:107DA0000000BDA600000C790100024908783C00E3 +:107DB000A0240400400840000870704758000700E5 +:107DC0000021084880B541618161017041704160C6 +:107DD00081601422C26001614262C161FFF704F850 +:107DE00080BD00001C75010080B502211D20044AE1 +:107DF0003C00DC240400D1F734F903490820CFF714 +:107E000052FF80BD000011E3000009E4000080B5CE +:107E1000012125200A4AD1F724F9CCF728FF084987 +:107E2000086208490120CFF73EFF07490220CFF73B +:107E30003AFF3C0018250400FEF7E6FF0548C1F7AD +:107E4000E1F980BD29A900001C750100A1AA00006C +:107E50002D19000045A8000010B5064C0C22227018 +:107E6000A0180549BDF7D8FF0020C8F785FB012001 +:107E7000A06010BD3C0054250400A4690100905787 +:107E80000100B0B51F4C00256580012020700A203C +:107E9000A0809020E08030202081902060813020E0 +:107EA000A0811748042207211230BEF74CF814486D +:107EB0000422052116303C0090250400BEF746F848 +:107EC0001248114AE08120827032157055700020EE +:107ED0003C23410143438918F4319B1801300428A5 +:107EE0005960F5DB084806221A300949BDF79AFFA8 +:107EF0000748054C0C300FC83C00CC25040020344A +:107F00000FC42021201CBDF762FFB0BD0000F86047 +:107F100001002C090000584001007047000007488C +:107F200010B50068002808D00648BEF79CFE041C67 +:107F3000FFF79DFE201CBEF796FE3C0008260400BD +:107F400010BD000058570100B5AD0000044980B5D0 +:107F50000020887002212020024AD1F791F880BDCC +:107F6000B479010025B5000080B5CCF78FFE01493A +:107F7000486180BDB479010080B518213C004426D9 +:107F800004001448BDF729FF1448012101700021A5 +:107F9000C1604170016100F002F900F0AAF800F040 +:107FA0001EF800F0BAF900F0CCF900F020F900F06A +:107FB00064F900F0CEF900F0FCF800F082F93C0022 +:107FC0008026040000F028F800F06EF800F04AF86F +:107FD000FFF7C2FF00F072F980BD0000407C010095 +:107FE00018630100B0B5084C0025084825772060CB +:107FF000CEF7F0FD0020E562D0F7D0FA211F08800F +:108000003C00BC260400D0F76CFBB0BD0000D47966 +:1080100001009575000080B5CCF7C1FC80BD054915 +:1080200080B500200870487003480449034A0830AE +:10803000CCF727FE80BD2C630100EDBC00004DBDD8 +:1080400000003C00F826040080B5CCF72BFE054963 +:108050004860011C0448CCF74BFE04490320CFF7CD +:108060003DFE80BD2C630100C4600100C1BC000066 +:1080700004480021002200230EC008C00249103825 +:10808000016070473C0034270400047A01001CE6BC +:10809000010080B5CCF709FE0549054A4860022178 +:1080A0002420D0F7FCFF0348C9F76BFD80BD047A9C +:1080B000010069BE000071EB000010B5044C1421F2 +:1080C000201CBDF796FE3C0070270400024820608B +:1080D00010BD0000147A0100ECE5010080B5CCF77A +:1080E000E7FD0749074A486002211F20D0F7DAFF61 +:1080F00005490120086005490C20CFF7F5FD80BD3A +:10810000147A0100D5BF00003C00AC270400805A5F +:10811000010085FF000080B5FFF74FFD0121212000 +:10812000024AD0F7C2FF80BD0000C9C1000080B57F +:10813000CCF7C1FD02490863C9F757FD80BD287A15 +:10814000010010B5CCF7B7FD164C3C00E827040041 +:108150002061CCF7B3FD60611448154908601649E9 +:1081600014480860CCF7AAFD1449086000F034F800 +:10817000FFF7E0FFFFF75EFF00F004F900F08EF874 +:10818000FFF76EFFFFF7B0FFFFF78CFF3C002428DE +:108190000400FFF704FF00F0AAF80A48BFF7BDFF8C +:1081A000C9F7BBFD09490020CFF7A7FD10BD407CF2 +:1081B00001007DB70000187E0100BDB800001C7EE4 +:1081C0000100207E0100B9BA0000812401003C00BA +:1081D0006028040080B538210148BDF719FE80BD34 +:1081E000905C010070470000B0B50C4C0B4D0020B6 +:1081F0000C3460602560E0600A202081281CC8F7EC +:108200003FFD281CC8F73AFD083D68600448C9F7DF +:108210003C009C2804001BFD201CC0F76EFA28803F +:10822000B0BDB87A0100D5330100F8B51F4E1D4C22 +:1082300000200C2141438200013009190831000659 +:10824000000E0428B150F4D318480C383061CEF732 +:10825000F4F93C00D8280400144CA078000900016F +:10826000A0700027E77067700024A50070590770A0 +:10827000201CBEF753F9715908710021201CCEF75C +:108280007DF901342406240E042CEED3074C20780B +:10829000000900013C00142904000A3020702078F5 +:1082A000F021884330302070A0780F210843A0705F +:1082B000F8BD00500700107B010080B5CCF79FFB94 +:1082C00080BDB0B50C4C0B4D00200C3460602560B7 +:1082D000E0600A2020813C0050290400281CC8F7D7 +:1082E000E1FC281CC8F7D4FC083D6860201CC0F7DE +:1082F0000DFA28800248C9F79BFCB0BD2C7B010019 +:108300004900010080B5CAF72FF880BD7047000012 +:10831000B0B5124D3C21281C3C008C290400BDF74F +:1083200086FD0F4828213C30BDF781FD0D48002116 +:1083300014380161C160FF21017041700A490A4A85 +:10834000416001210C20D0F7C8FE2C1C30340C3DBC +:108350000020D0F74AF920800C3C3C00C8290400DA +:10836000AC42F8D1B0BD0000607B010020A1070045 +:1083700035CD0000084900200C22424352181071EC +:1083800001300528F8DB04480021083801704160FD +:10839000FF21417070470000747A01003C00042AFC +:1083A000040080B578210148BDF747FD80BDC47B3E +:1083B000010080B5CAF797FA80BD7047000010B57C +:1083C0000B4CFF210531201CBDF737FD0948F0217A +:1083D0000851201C4030C5F78EF96C2106483C003E +:1083E000402A0400BDF72CFD0448C0216C30BDF7C5 +:1083F00027FD10BDC4690100B0D90100C86A0100A1 +:10840000B0B50B4D00241C20604340196C30C3F7FD +:108410000FFE0134042CF6DBCCF76EFCA863C7F723 +:108420003C007C2A040075F90448C9F71CFC034889 +:10843000CFF703FAB0BDC4690100FD800000E1225E +:10844000010010B5054C00202080034806210830AB +:10845000BDF7D5FC1420606010BD987C010010B5FC +:10846000084C3C00B82A04000020208060800648A8 +:1084700006210C30BDF7C6FC034806211230BDF7BB +:10848000C1FC1420A06010BD587C010070470000A2 +:1084900080B502210D20054AD0F72EFE0448C8F70A +:1084A0001FFC04483C00F42A0400CAF744FC80BDC9 +:1084B000000031D4000051B1000009B100000849AA +:1084C00080B500200860FFF7D0FFFFF7C0FFFFF77F +:1084D00004FC00F04AF8FFF70AFC00F03CF880BD0D +:1084E0000000E46501003C00302B040080B500F082 +:1084F00029F800F01BF800F051F800F031F880BDC9 +:10850000704700007047000080B5FF2189310248A4 +:10851000BDF7A2FC80BD0000DC71010080B50249FE +:108520000820CFF711FC80BD3C006C2B040059D90A +:10853000000080B50348CFF74CF90249488080BD60 +:1085400000008D1F0000987C010080B50348CFF724 +:1085500040F90249888080BD0000D5230000587C86 +:1085600001007047000080B502483C00A82B0400C1 +:10857000CAF7E4FB80BD000071E0000080B5CCF7D5 +:10858000A5FB02210F20064AD0F7C2FD14210548A1 +:10859000BDF768FC034878211430BDF763FC80BD4B +:1085A00035E200008466010080B5CCF73C00E42B86 +:1085B0000400B7FB0549086105490E20CFF7CDFB44 +:1085C00004490820CFF7C9FB80BDEC65010001021A +:1085D0000100C12E0000014900200870704740D9F9 +:1085E00001007047000001490020087070473C00FE +:1085F000202C0400A079010080B50748C8F7F2FFDD +:10860000064948600648C0F707FB0648C0F786FBE6 +:108610000548C9F7A3FA80BDA9E40000A0790100CC +:10862000B9E40000852E000081E40000074880B511 +:108630003C005C2C04000021002200230EC008C076 +:108640001038C821016000210C38024ACCF761FBC8 +:1086500080BDD0600100FDE5000080B5CCF767FB70 +:1086600004490860011C02480430CCF786FB80BD39 +:1086700000003C00982C0400C0600100094880B54F +:108680000A21017041700849084A81600021C160D7 +:10869000527982700161416128211830BDF7EEFBEB +:1086A00080BD00007C780100A08601000C5A01000A +:1086B000F8B50F493C00D42C04000F480D884F88B2 +:1086C00006790024301B684368230C49584341183D +:1086D0007D20C000BDF70FFD6100094AA64250523F +:1086E00000D13D1C01342406240E102CEAD3054988 +:1086F00001200861F8BD3C00102D0400F65901006E +:108700000C5A010034440F00125A01007C78010019 +:1087100080B500F0E7FA02490120086180BD000041 +:108720007C78010010B5041C081C0F494979002908 +:1087300001D10E4B00E00E4B3C004C2D0400002CF0 +:1087400007D0042111800A1C0124191CBDF7CDFBA0 +:108750000AE00124011C181C1288BDF7C6FB00F0BA +:10876000C4FA054901200861201C10BD00000C5A04 +:108770000100FE590100FA5901003C00882D040057 +:108780007C7801000D488CB5C18800AB0C4A9980FB +:1087900001890420D980188002211320D0F7D0FC51 +:1087A00000F0A6FA074901200861FFF78DFF6A462D +:1087B00001A90020FFF7BCFF8CBD00003C00C42DC8 +:1087C0000400F459010095F900007C780100F8B527 +:1087D000134E0125B5700520F070114910480EC9DF +:1087E0002C300EC0002070610F480F49104F00243C +:1087F0004860A0003958201CD1F7D7F801343C005C +:10880000002E0400102CF7D3064C0B4A2034201CF9 +:108810000A49B560CCF792FACCF79EFA3061206035 +:10882000F8BD000064730100B05801000418020094 +:1088300060000700D444010045FA000071FA00000E +:108840003C003C2E04000C4930B50023CC560B4BA9 +:108850000020F0251A5C1107090F09190F2901DD05 +:108860000F2102E0002900DA00212A405118195492 +:1088700001300E28EEDB30BD000064730100C058EB +:1088800001003C00782E0400B0B50D1C002808D073 +:10889000012414800520CCF7B5F88003C00F2870A0 +:1088A00007E028780122410452040520D0F7AEFDEC +:1088B0000124201CB0BD000098B5054C6068CCF7C1 +:1088C000F5FD00903C00B42E040000AB1888E08059 +:1088D000CEF7FBFF98BDA058010038B5031C081C5B +:1088E0000024002B174D07D00E2111800A1C0124F3 +:1088F000291CBDF70CFB22E01188042917D1011CAB +:1089000068461288BDF73C00F02E040003FB009877 +:10891000002801DB323000E032380090011C642076 +:10892000BDF798FB0106091600900E22281CBDF722 +:1089300085FB06E00E2905D10A1C011C281CBDF789 +:10894000E9FA0124201C38BD3C002C2F0400DA5920 +:10895000010038B5031C081C0024002B174D07D05C +:108960000E2111800A1C0124291CBDF7D6FA22E031 +:108970001188042917D1011C68461288BDF7CDFA69 +:108980000098002801DB323000E03C00682F040032 +:1089900032380090011C6420BDF762FB0106091605 +:1089A00000900E22281CBDF74FFB06E00E2905D1D2 +:1089B0000A1C011C281CBDF7B3FA0124201C38BD79 +:1089C000CC590100034880B5017800203C00A42F59 +:1089D0000400CCF7B4FB80BD0000A658010070472E +:1089E00000000249032008700020487070479C7303 +:1089F000010080B502211120024AD0F7BCFB80BDE6 +:108A00000000A1FE0000F0B50B4F1C1C00233C0031 +:108A1000E02F0400FD562B1C062D01D10120F0BDD6 +:108A2000064E051CD80034363554801941708270CA +:108A30004460581C38700020F0BD0000985A0100B6 +:108A400010B5041C0C4800F021F96078FF2804D010 +:108A50003C001C3004000123E056062100F0CDF854 +:108A6000084A012110780843074908702023184359 +:108A70000870802318431070087010BD0000919B8F +:108A80000000E06001000400070010B50A49041C62 +:108A900008783C005830040040084000087008493D +:108AA0000870084800F0F8F86078FF2804D0012327 +:108AB000E056052100F0A4F810BD0000E0600100C0 +:108AC00004000700919B00000348002100220023BE +:108AD0000EC008C03C009430040070470000E860FD +:108AE00001007047000010B5074C00206060208036 +:108AF000E06002211420044AD0F749FB02481030FC +:108B0000A06010BD000058750100051D01007047F0 +:108B1000000010B548213C00D03004000A48BDF7E1 +:108B2000E3F9094CE0214834201CBDF7DDF90020B1 +:108B3000C10009190A1C083201301B284A60F7D30A +:108B400001480438046010BD685B010080B5022153 +:108B50002320024AD0F71EFB3C000C31040080BDEC +:108B600000004523010080B5FFF76BF880BD70471A +:108B70000000F8B501201D49C00748601D49FF20CD +:108B800008731C4E10203060050135601B4C80219D +:108B9000201CBDF7ACF90021194A3C004831040003 +:108BA000154F00200B011B195A60CB00DB191874FC +:108BB00001310829F6DB0F4CFA212180124961802E +:108BC000A0606A4611490420BDF730FF6A4610498B +:108BD0000820BDF72BFF1020706075603C008431C9 +:108BE000040060680221084360600B49064A081CC3 +:108BF0001030083A03C2F8BD000000010700006011 +:108C0000070000100700AC730100D1750000204E72 +:108C10000000052C0100112C010000A007003C0001 +:108C2000C031040070B50E1C0024C4F75BFE0028A0 +:108C30003BD04568FF2D38D00C2E28D201A39B5D78 +:108C40005B009F440507090B0D101316181B1E210E +:108C5000182420E030241EE060241CE0C0241AE028 +:108C60003C00FC310400FF24813417E00924A401F6 +:108C700014E00924E40111E00F4C0FE00924240260 +:108C80000CE00924640209E00324E40206E009245C +:108C9000A40203E009219E20BEF739F86000001904 +:108CA00040083C0038320400054980044018054A59 +:108CB000A900891848606420604370BDDC0700008B +:108CC0008038010004000700024980B50860D0F731 +:108CD00097F880BD5C5B0100F8B50026174C174B78 +:108CE000194926703C0074320400002014330D88AA +:108CF000154E154A04E0C100CF187A605E5001306D +:108D0000A842F8DBC6F72BFDFF21114DA531281C29 +:108D1000BDF7FFF80021281C021C1432C260101C91 +:108D200001311429F8DB3C00B03204000026C66093 +:108D300005480C3060C009481821BDF7EDF8012046 +:108D4000043441C40020F8BD705D010009A000009A +:108D500030D9010056570100045F0100A8600100EE +:108D600080B50020CFF7B6FC3C00EC32040001498E +:108D7000088080BD00002C7401001148F8B54179CD +:108D8000002902D105780F4E01E045780F4E0223ED +:108D9000F75E0024601B784364230C495843411854 +:108DA0007D20C000BDF7F5F961003C0028330400C8 +:108DB000094AAC42505201D10023F75E0134240627 +:108DC000240E102CE9D3F8BD0C5A0100FE59010005 +:108DD000FA59010034440F00325A010038B5104CE2 +:108DE000BE252573207A1821884320723C00643305 +:108DF00004006A460D490D20BDF733FE01200B49E2 +:108E000040030860486025732D20C003206025734F +:108E1000207A102108432072064806490860002085 +:108E2000486038BD0000000307008D3E01002400AB +:108E3000A0330400001007000087930304790100A9 +:108E400080B502211520024AD0F7C8F980BD000084 +:108E50000D3E010070470000040000600400440063 +:108E60000000040040200700FFFFFFFF4D656D6F0D +:108E7000727920636865636B2E2E2E00204F4B0A9B +:108E800000000000204641494C0A000057726974F6 +:108E9000696E67206669726D7761726520646174BE +:108EA0006120746F20666C6173680A005665726990 +:108EB0006679696E67206669726D77617265206494 +:108EC0006174610A00000000566572696679206667 +:108ED00061696C6564206174206279746520256421 +:108EE0002C2030782530327820213D2030782530F4 +:108EF00032780A004669726D776172652073756316 +:108F00006365737366756C6C792073746F726564D6 +:108F100020696E20666C617368210A0005000600F6 +:108F200000000001000001480000000B0000014C9F +:108F300000000009000001780000000F0000019C03 +:108F400000000001000001D800000001000001DC69 +:108F50000000000100000108000000010000010CF9 +:108F600000000001000001100000000100000114D9 +:108F70000000000100000118000000010000011CB9 +:108F80000000000100000120000000010000012499 +:108F9000000000030000012800000001000001346F +:108FA0000000000100000138000000010000013C49 +:108FB0000000000100000140000000010000014429 +:040000058000000077 +:00000001FF diff --git a/external/arduino/avr/firmwares/wifishield/binary/wifi_dnld_2_1.elf b/external/arduino/avr/firmwares/wifishield/binary/wifi_dnld_2_1.elf new file mode 100644 index 000000000..7ccbf4d3d Binary files /dev/null and b/external/arduino/avr/firmwares/wifishield/binary/wifi_dnld_2_1.elf differ diff --git a/external/arduino/avr/firmwares/wifishield/scripts/ArduinoWifiShield_upgrade.sh b/external/arduino/avr/firmwares/wifishield/scripts/ArduinoWifiShield_upgrade.sh new file mode 100644 index 000000000..e3a7d7f7a --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/scripts/ArduinoWifiShield_upgrade.sh @@ -0,0 +1,120 @@ +#!/bin/sh + +WIFI_FW_PATH="/hardware/arduino/avr/firmwares/wifishield/binary" +AVR_TOOLS_PATH="/hardware/tools/avr/bin" + +TARGET_MICRO="at32uc3a1256" + + +progname=$0 + +usage () { +cat <&2 + usage + exit 1 + ;; + :) + echo "Option -$OPTARG requires an argument." >&2 + exit 1 + ;; + esac + done +else + echo "Please retry running the script as root.\n" +fi + +shift $(($OPTIND - 1)) diff --git a/external/arduino/avr/firmwares/wifishield/scripts/ArduinoWifiShield_upgrade_mac.sh b/external/arduino/avr/firmwares/wifishield/scripts/ArduinoWifiShield_upgrade_mac.sh new file mode 100644 index 000000000..dadaf292f --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/scripts/ArduinoWifiShield_upgrade_mac.sh @@ -0,0 +1,96 @@ +#!/bin/sh + +WIFI_FW_PATH="/hardware/arduino/avr/firmwares/wifishield/binary" +AVR_TOOLS_PATH="/hardware/tools/avr/bin" + +progname=$0 + +usage () { +cat <&2 + usage + exit 1 + ;; + :) + echo "Option -$OPTARG requires an argument." >&2 + exit 1 + ;; + esac + done +else + echo "You are not root!\n" +fi + +shift $(($OPTIND - 1)) diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/.cproject b/external/arduino/avr/firmwares/wifishield/wifiHD/.cproject new file mode 100644 index 000000000..fa7fcdd69 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/.cproject @@ -0,0 +1,4045 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/.project b/external/arduino/avr/firmwares/wifishield/wifiHD/.project new file mode 100644 index 000000000..c284bab1b --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/.project @@ -0,0 +1,77 @@ + + + wifiHD + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + ?name? + + + + org.eclipse.cdt.make.core.append_environment + true + + + org.eclipse.cdt.make.core.buildArguments + + + + org.eclipse.cdt.make.core.buildCommand + make + + + org.eclipse.cdt.make.core.buildLocation + ${workspace_loc:/wifiHD/Debug} + + + org.eclipse.cdt.make.core.contents + org.eclipse.cdt.make.core.activeConfigSettings + + + org.eclipse.cdt.make.core.enableAutoBuild + false + + + org.eclipse.cdt.make.core.enableCleanBuild + true + + + org.eclipse.cdt.make.core.enableFullBuild + true + + + org.eclipse.cdt.make.core.stopOnError + true + + + org.eclipse.cdt.make.core.useDefaultBuildCmd + true + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + + + + + + com.atmel.avr32.core.nature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + UC3 Software Framework + 2 + framework:/com.atmel.avr32.sf.uc3 + + + diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/Release/wifiHD.elf b/external/arduino/avr/firmwares/wifishield/wifiHD/Release/wifiHD.elf new file mode 100644 index 000000000..d4a8bde55 Binary files /dev/null and b/external/arduino/avr/firmwares/wifishield/wifiHD/Release/wifiHD.elf differ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/Release/wifiHD.hex b/external/arduino/avr/firmwares/wifishield/wifiHD/Release/wifiHD.hex new file mode 100644 index 000000000..0122587ff --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/Release/wifiHD.hex @@ -0,0 +1,16358 @@ +:0200000480007A +:10000000E08F100000000000000000000000000071 +:1000100000000000000000000000000000000000E0 +:1000200000000000000000000000000000000000D0 +:1000300000000000000000000000000000000000C0 +:1000400000000000000000000000000000000000B0 +:1000500000000000000000000000000000000000A0 +:100060000000000000000000000000000000000090 +:100070000000000000000000000000000000000080 +:100080000000000000000000000000000000000070 +:100090000000000000000000000000000000000060 +:1000A0000000000000000000000000000000000050 +:1000B0000000000000000000000000000000000040 +:1000C0000000000000000000000000000000000030 +:1000D0000000000000000000000000000000000020 +:1000E0000000000000000000000000000000000010 +:1000F0000000000000000000000000000000000000 +:1001000000000000000000000000000000000000EF +:1001100000000000000000000000000000000000DF +:1001200000000000000000000000000000000000CF +:1001300000000000000000000000000000000000BF +:1001400000000000000000000000000000000000AF +:10015000000000000000000000000000000000009F +:10016000000000000000000000000000000000008F +:10017000000000000000000000000000000000007F +:10018000000000000000000000000000000000006F +:10019000000000000000000000000000000000005F +:1001A000000000000000000000000000000000004F +:1001B000000000000000000000000000000000003F +:1001C000000000000000000000000000000000002F +:1001D000000000000000000000000000000000001F +:1001E000000000000000000000000000000000000F +:1001F00000000000000000000000000000000000FF +:1002000000000000000000000000000000000000EE +:1002100000000000000000000000000000000000DE +:1002200000000000000000000000000000000000CE +:1002300000000000000000000000000000000000BE +:1002400000000000000000000000000000000000AE +:10025000000000000000000000000000000000009E +:10026000000000000000000000000000000000008E +:10027000000000000000000000000000000000007E +:10028000000000000000000000000000000000006E +:10029000000000000000000000000000000000005E +:1002A000000000000000000000000000000000004E +:1002B000000000000000000000000000000000003E +:1002C000000000000000000000000000000000002E +:1002D000000000000000000000000000000000001E +:1002E000000000000000000000000000000000000E +:1002F00000000000000000000000000000000000FE +:1003000000000000000000000000000000000000ED +:1003100000000000000000000000000000000000DD +:1003200000000000000000000000000000000000CD +:1003300000000000000000000000000000000000BD +:1003400000000000000000000000000000000000AD +:10035000000000000000000000000000000000009D +:10036000000000000000000000000000000000008D +:10037000000000000000000000000000000000007D +:10038000000000000000000000000000000000006D +:10039000000000000000000000000000000000005D +:1003A000000000000000000000000000000000004D +:1003B000000000000000000000000000000000003D +:1003C000000000000000000000000000000000002D +:1003D000000000000000000000000000000000001D +:1003E000000000000000000000000000000000000D +:1003F00000000000000000000000000000000000FD +:1004000000000000000000000000000000000000EC +:1004100000000000000000000000000000000000DC +:1004200000000000000000000000000000000000CC +:1004300000000000000000000000000000000000BC +:1004400000000000000000000000000000000000AC +:10045000000000000000000000000000000000009C +:10046000000000000000000000000000000000008C +:10047000000000000000000000000000000000007C +:10048000000000000000000000000000000000006C +:10049000000000000000000000000000000000005C +:1004A000000000000000000000000000000000004C +:1004B000000000000000000000000000000000003C +:1004C000000000000000000000000000000000002C +:1004D000000000000000000000000000000000001C +:1004E000000000000000000000000000000000000C +:1004F00000000000000000000000000000000000FC +:1005000000000000000000000000000000000000EB +:1005100000000000000000000000000000000000DB +:1005200000000000000000000000000000000000CB +:1005300000000000000000000000000000000000BB +:1005400000000000000000000000000000000000AB +:10055000000000000000000000000000000000009B +:10056000000000000000000000000000000000008B +:10057000000000000000000000000000000000007B +:10058000000000000000000000000000000000006B +:10059000000000000000000000000000000000005B +:1005A000000000000000000000000000000000004B +:1005B000000000000000000000000000000000003B +:1005C000000000000000000000000000000000002B +:1005D000000000000000000000000000000000001B +:1005E000000000000000000000000000000000000B +:1005F00000000000000000000000000000000000FB +:1006000000000000000000000000000000000000EA +:1006100000000000000000000000000000000000DA +:1006200000000000000000000000000000000000CA +:1006300000000000000000000000000000000000BA +:1006400000000000000000000000000000000000AA +:10065000000000000000000000000000000000009A +:10066000000000000000000000000000000000008A +:10067000000000000000000000000000000000007A +:10068000000000000000000000000000000000006A +:10069000000000000000000000000000000000005A +:1006A000000000000000000000000000000000004A +:1006B000000000000000000000000000000000003A +:1006C000000000000000000000000000000000002A +:1006D000000000000000000000000000000000001A +:1006E000000000000000000000000000000000000A +:1006F00000000000000000000000000000000000FA +:1007000000000000000000000000000000000000E9 +:1007100000000000000000000000000000000000D9 +:1007200000000000000000000000000000000000C9 +:1007300000000000000000000000000000000000B9 +:1007400000000000000000000000000000000000A9 +:100750000000000000000000000000000000000099 +:100760000000000000000000000000000000000089 +:100770000000000000000000000000000000000079 +:100780000000000000000000000000000000000069 +:100790000000000000000000000000000000000059 +:1007A0000000000000000000000000000000000049 +:1007B0000000000000000000000000000000000039 +:1007C0000000000000000000000000000000000029 +:1007D0000000000000000000000000000000000019 +:1007E0000000000000000000000000000000000009 +:1007F00000000000000000000000000000000000F9 +:1008000000000000000000000000000000000000E8 +:1008100000000000000000000000000000000000D8 +:1008200000000000000000000000000000000000C8 +:1008300000000000000000000000000000000000B8 +:1008400000000000000000000000000000000000A8 +:100850000000000000000000000000000000000098 +:100860000000000000000000000000000000000088 +:100870000000000000000000000000000000000078 +:100880000000000000000000000000000000000068 +:100890000000000000000000000000000000000058 +:1008A0000000000000000000000000000000000048 +:1008B0000000000000000000000000000000000038 +:1008C0000000000000000000000000000000000028 +:1008D0000000000000000000000000000000000018 +:1008E0000000000000000000000000000000000008 +:1008F00000000000000000000000000000000000F8 +:1009000000000000000000000000000000000000E7 +:1009100000000000000000000000000000000000D7 +:1009200000000000000000000000000000000000C7 +:1009300000000000000000000000000000000000B7 +:1009400000000000000000000000000000000000A7 +:100950000000000000000000000000000000000097 +:100960000000000000000000000000000000000087 +:100970000000000000000000000000000000000077 +:100980000000000000000000000000000000000067 +:100990000000000000000000000000000000000057 +:1009A0000000000000000000000000000000000047 +:1009B0000000000000000000000000000000000037 +:1009C0000000000000000000000000000000000027 +:1009D0000000000000000000000000000000000017 +:1009E0000000000000000000000000000000000007 +:1009F00000000000000000000000000000000000F7 +:100A000000000000000000000000000000000000E6 +:100A100000000000000000000000000000000000D6 +:100A200000000000000000000000000000000000C6 +:100A300000000000000000000000000000000000B6 +:100A400000000000000000000000000000000000A6 +:100A50000000000000000000000000000000000096 +:100A60000000000000000000000000000000000086 +:100A70000000000000000000000000000000000076 +:100A80000000000000000000000000000000000066 +:100A90000000000000000000000000000000000056 +:100AA0000000000000000000000000000000000046 +:100AB0000000000000000000000000000000000036 +:100AC0000000000000000000000000000000000026 +:100AD0000000000000000000000000000000000016 +:100AE0000000000000000000000000000000000006 +:100AF00000000000000000000000000000000000F6 +:100B000000000000000000000000000000000000E5 +:100B100000000000000000000000000000000000D5 +:100B200000000000000000000000000000000000C5 +:100B300000000000000000000000000000000000B5 +:100B400000000000000000000000000000000000A5 +:100B50000000000000000000000000000000000095 +:100B60000000000000000000000000000000000085 +:100B70000000000000000000000000000000000075 +:100B80000000000000000000000000000000000065 +:100B90000000000000000000000000000000000055 +:100BA0000000000000000000000000000000000045 +:100BB0000000000000000000000000000000000035 +:100BC0000000000000000000000000000000000025 +:100BD0000000000000000000000000000000000015 +:100BE0000000000000000000000000000000000005 +:100BF00000000000000000000000000000000000F5 +:100C000000000000000000000000000000000000E4 +:100C100000000000000000000000000000000000D4 +:100C200000000000000000000000000000000000C4 +:100C300000000000000000000000000000000000B4 +:100C400000000000000000000000000000000000A4 +:100C50000000000000000000000000000000000094 +:100C60000000000000000000000000000000000084 +:100C70000000000000000000000000000000000074 +:100C80000000000000000000000000000000000064 +:100C90000000000000000000000000000000000054 +:100CA0000000000000000000000000000000000044 +:100CB0000000000000000000000000000000000034 +:100CC0000000000000000000000000000000000024 +:100CD0000000000000000000000000000000000014 +:100CE0000000000000000000000000000000000004 +:100CF00000000000000000000000000000000000F4 +:100D000000000000000000000000000000000000E3 +:100D100000000000000000000000000000000000D3 +:100D200000000000000000000000000000000000C3 +:100D300000000000000000000000000000000000B3 +:100D400000000000000000000000000000000000A3 +:100D50000000000000000000000000000000000093 +:100D60000000000000000000000000000000000083 +:100D70000000000000000000000000000000000073 +:100D80000000000000000000000000000000000063 +:100D90000000000000000000000000000000000053 +:100DA0000000000000000000000000000000000043 +:100DB0000000000000000000000000000000000033 +:100DC0000000000000000000000000000000000023 +:100DD0000000000000000000000000000000000013 +:100DE0000000000000000000000000000000000003 +:100DF00000000000000000000000000000000000F3 +:100E000000000000000000000000000000000000E2 +:100E100000000000000000000000000000000000D2 +:100E200000000000000000000000000000000000C2 +:100E300000000000000000000000000000000000B2 +:100E400000000000000000000000000000000000A2 +:100E50000000000000000000000000000000000092 +:100E60000000000000000000000000000000000082 +:100E70000000000000000000000000000000000072 +:100E80000000000000000000000000000000000062 +:100E90000000000000000000000000000000000052 +:100EA0000000000000000000000000000000000042 +:100EB0000000000000000000000000000000000032 +:100EC0000000000000000000000000000000000022 +:100ED0000000000000000000000000000000000012 +:100EE0000000000000000000000000000000000002 +:100EF00000000000000000000000000000000000F2 +:100F000000000000000000000000000000000000E1 +:100F100000000000000000000000000000000000D1 +:100F200000000000000000000000000000000000C1 +:100F300000000000000000000000000000000000B1 +:100F400000000000000000000000000000000000A1 +:100F50000000000000000000000000000000000091 +:100F60000000000000000000000000000000000081 +:100F70000000000000000000000000000000000071 +:100F80000000000000000000000000000000000061 +:100F90000000000000000000000000000000000051 +:100FA0000000000000000000000000000000000041 +:100FB0000000000000000000000000000000000031 +:100FC0000000000000000000000000000000000021 +:100FD0000000000000000000000000000000000011 +:100FE0000000000000000000000000000000000001 +:100FF00000000000000000000000000000000000F1 +:1010000000000000000000000000000000000000E0 +:1010100000000000000000000000000000000000D0 +:1010200000000000000000000000000000000000C0 +:1010300000000000000000000000000000000000B0 +:1010400000000000000000000000000000000000A0 +:101050000000000000000000000000000000000090 +:101060000000000000000000000000000000000080 +:101070000000000000000000000000000000000070 +:101080000000000000000000000000000000000060 +:101090000000000000000000000000000000000050 +:1010A0000000000000000000000000000000000040 +:1010B0000000000000000000000000000000000030 +:1010C0000000000000000000000000000000000020 +:1010D0000000000000000000000000000000000010 +:1010E0000000000000000000000000000000000000 +:1010F00000000000000000000000000000000000F0 +:1011000000000000000000000000000000000000DF +:1011100000000000000000000000000000000000CF +:1011200000000000000000000000000000000000BF +:1011300000000000000000000000000000000000AF +:10114000000000000000000000000000000000009F +:10115000000000000000000000000000000000008F +:10116000000000000000000000000000000000007F +:10117000000000000000000000000000000000006F +:10118000000000000000000000000000000000005F +:10119000000000000000000000000000000000004F +:1011A000000000000000000000000000000000003F +:1011B000000000000000000000000000000000002F +:1011C000000000000000000000000000000000001F +:1011D000000000000000000000000000000000000F +:1011E00000000000000000000000000000000000FF +:1011F00000000000000000000000000000000000EF +:1012000000000000000000000000000000000000DE +:1012100000000000000000000000000000000000CE +:1012200000000000000000000000000000000000BE +:1012300000000000000000000000000000000000AE +:10124000000000000000000000000000000000009E +:10125000000000000000000000000000000000008E +:10126000000000000000000000000000000000007E +:10127000000000000000000000000000000000006E +:10128000000000000000000000000000000000005E +:10129000000000000000000000000000000000004E +:1012A000000000000000000000000000000000003E +:1012B000000000000000000000000000000000002E +:1012C000000000000000000000000000000000001E +:1012D000000000000000000000000000000000000E +:1012E00000000000000000000000000000000000FE +:1012F00000000000000000000000000000000000EE +:1013000000000000000000000000000000000000DD +:1013100000000000000000000000000000000000CD +:1013200000000000000000000000000000000000BD +:1013300000000000000000000000000000000000AD +:10134000000000000000000000000000000000009D +:10135000000000000000000000000000000000008D +:10136000000000000000000000000000000000007D +:10137000000000000000000000000000000000006D +:10138000000000000000000000000000000000005D +:10139000000000000000000000000000000000004D +:1013A000000000000000000000000000000000003D +:1013B000000000000000000000000000000000002D +:1013C000000000000000000000000000000000001D +:1013D000000000000000000000000000000000000D +:1013E00000000000000000000000000000000000FD +:1013F00000000000000000000000000000000000ED +:1014000000000000000000000000000000000000DC +:1014100000000000000000000000000000000000CC +:1014200000000000000000000000000000000000BC +:1014300000000000000000000000000000000000AC +:10144000000000000000000000000000000000009C +:10145000000000000000000000000000000000008C +:10146000000000000000000000000000000000007C +:10147000000000000000000000000000000000006C +:10148000000000000000000000000000000000005C +:10149000000000000000000000000000000000004C +:1014A000000000000000000000000000000000003C +:1014B000000000000000000000000000000000002C +:1014C000000000000000000000000000000000001C +:1014D000000000000000000000000000000000000C +:1014E00000000000000000000000000000000000FC +:1014F00000000000000000000000000000000000EC +:1015000000000000000000000000000000000000DB +:1015100000000000000000000000000000000000CB +:1015200000000000000000000000000000000000BB +:1015300000000000000000000000000000000000AB +:10154000000000000000000000000000000000009B +:10155000000000000000000000000000000000008B +:10156000000000000000000000000000000000007B +:10157000000000000000000000000000000000006B +:10158000000000000000000000000000000000005B +:10159000000000000000000000000000000000004B +:1015A000000000000000000000000000000000003B +:1015B000000000000000000000000000000000002B +:1015C000000000000000000000000000000000001B +:1015D000000000000000000000000000000000000B +:1015E00000000000000000000000000000000000FB +:1015F00000000000000000000000000000000000EB +:1016000000000000000000000000000000000000DA +:1016100000000000000000000000000000000000CA +:1016200000000000000000000000000000000000BA +:1016300000000000000000000000000000000000AA +:10164000000000000000000000000000000000009A +:10165000000000000000000000000000000000008A +:10166000000000000000000000000000000000007A +:10167000000000000000000000000000000000006A +:10168000000000000000000000000000000000005A +:10169000000000000000000000000000000000004A +:1016A000000000000000000000000000000000003A +:1016B000000000000000000000000000000000002A +:1016C000000000000000000000000000000000001A +:1016D000000000000000000000000000000000000A +:1016E00000000000000000000000000000000000FA +:1016F00000000000000000000000000000000000EA +:1017000000000000000000000000000000000000D9 +:1017100000000000000000000000000000000000C9 +:1017200000000000000000000000000000000000B9 +:1017300000000000000000000000000000000000A9 +:101740000000000000000000000000000000000099 +:101750000000000000000000000000000000000089 +:101760000000000000000000000000000000000079 +:101770000000000000000000000000000000000069 +:101780000000000000000000000000000000000059 +:101790000000000000000000000000000000000049 +:1017A0000000000000000000000000000000000039 +:1017B0000000000000000000000000000000000029 +:1017C0000000000000000000000000000000000019 +:1017D0000000000000000000000000000000000009 +:1017E00000000000000000000000000000000000F9 +:1017F00000000000000000000000000000000000E9 +:1018000000000000000000000000000000000000D8 +:1018100000000000000000000000000000000000C8 +:1018200000000000000000000000000000000000B8 +:1018300000000000000000000000000000000000A8 +:101840000000000000000000000000000000000098 +:101850000000000000000000000000000000000088 +:101860000000000000000000000000000000000078 +:101870000000000000000000000000000000000068 +:101880000000000000000000000000000000000058 +:101890000000000000000000000000000000000048 +:1018A0000000000000000000000000000000000038 +:1018B0000000000000000000000000000000000028 +:1018C0000000000000000000000000000000000018 +:1018D0000000000000000000000000000000000008 +:1018E00000000000000000000000000000000000F8 +:1018F00000000000000000000000000000000000E8 +:1019000000000000000000000000000000000000D7 +:1019100000000000000000000000000000000000C7 +:1019200000000000000000000000000000000000B7 +:1019300000000000000000000000000000000000A7 +:101940000000000000000000000000000000000097 +:101950000000000000000000000000000000000087 +:101960000000000000000000000000000000000077 +:101970000000000000000000000000000000000067 +:101980000000000000000000000000000000000057 +:101990000000000000000000000000000000000047 +:1019A0000000000000000000000000000000000037 +:1019B0000000000000000000000000000000000027 +:1019C0000000000000000000000000000000000017 +:1019D0000000000000000000000000000000000007 +:1019E00000000000000000000000000000000000F7 +:1019F00000000000000000000000000000000000E7 +:101A000000000000000000000000000000000000D6 +:101A100000000000000000000000000000000000C6 +:101A200000000000000000000000000000000000B6 +:101A300000000000000000000000000000000000A6 +:101A40000000000000000000000000000000000096 +:101A50000000000000000000000000000000000086 +:101A60000000000000000000000000000000000076 +:101A70000000000000000000000000000000000066 +:101A80000000000000000000000000000000000056 +:101A90000000000000000000000000000000000046 +:101AA0000000000000000000000000000000000036 +:101AB0000000000000000000000000000000000026 +:101AC0000000000000000000000000000000000016 +:101AD0000000000000000000000000000000000006 +:101AE00000000000000000000000000000000000F6 +:101AF00000000000000000000000000000000000E6 +:101B000000000000000000000000000000000000D5 +:101B100000000000000000000000000000000000C5 +:101B200000000000000000000000000000000000B5 +:101B300000000000000000000000000000000000A5 +:101B40000000000000000000000000000000000095 +:101B50000000000000000000000000000000000085 +:101B60000000000000000000000000000000000075 +:101B70000000000000000000000000000000000065 +:101B80000000000000000000000000000000000055 +:101B90000000000000000000000000000000000045 +:101BA0000000000000000000000000000000000035 +:101BB0000000000000000000000000000000000025 +:101BC0000000000000000000000000000000000015 +:101BD0000000000000000000000000000000000005 +:101BE00000000000000000000000000000000000F5 +:101BF00000000000000000000000000000000000E5 +:101C000000000000000000000000000000000000D4 +:101C100000000000000000000000000000000000C4 +:101C200000000000000000000000000000000000B4 +:101C300000000000000000000000000000000000A4 +:101C40000000000000000000000000000000000094 +:101C50000000000000000000000000000000000084 +:101C60000000000000000000000000000000000074 +:101C70000000000000000000000000000000000064 +:101C80000000000000000000000000000000000054 +:101C90000000000000000000000000000000000044 +:101CA0000000000000000000000000000000000034 +:101CB0000000000000000000000000000000000024 +:101CC0000000000000000000000000000000000014 +:101CD0000000000000000000000000000000000004 +:101CE00000000000000000000000000000000000F4 +:101CF00000000000000000000000000000000000E4 +:101D000000000000000000000000000000000000D3 +:101D100000000000000000000000000000000000C3 +:101D200000000000000000000000000000000000B3 +:101D300000000000000000000000000000000000A3 +:101D40000000000000000000000000000000000093 +:101D50000000000000000000000000000000000083 +:101D60000000000000000000000000000000000073 +:101D70000000000000000000000000000000000063 +:101D80000000000000000000000000000000000053 +:101D90000000000000000000000000000000000043 +:101DA0000000000000000000000000000000000033 +:101DB0000000000000000000000000000000000023 +:101DC0000000000000000000000000000000000013 +:101DD0000000000000000000000000000000000003 +:101DE00000000000000000000000000000000000F3 +:101DF00000000000000000000000000000000000E3 +:101E000000000000000000000000000000000000D2 +:101E100000000000000000000000000000000000C2 +:101E200000000000000000000000000000000000B2 +:101E300000000000000000000000000000000000A2 +:101E40000000000000000000000000000000000092 +:101E50000000000000000000000000000000000082 +:101E60000000000000000000000000000000000072 +:101E70000000000000000000000000000000000062 +:101E80000000000000000000000000000000000052 +:101E90000000000000000000000000000000000042 +:101EA0000000000000000000000000000000000032 +:101EB0000000000000000000000000000000000022 +:101EC0000000000000000000000000000000000012 +:101ED0000000000000000000000000000000000002 +:101EE00000000000000000000000000000000000F2 +:101EF00000000000000000000000000000000000E2 +:101F000000000000000000000000000000000000D1 +:101F100000000000000000000000000000000000C1 +:101F200000000000000000000000000000000000B1 +:101F300000000000000000000000000000000000A1 +:101F40000000000000000000000000000000000091 +:101F50000000000000000000000000000000000081 +:101F60000000000000000000000000000000000071 +:101F70000000000000000000000000000000000061 +:101F80000000000000000000000000000000000051 +:101F90000000000000000000000000000000000041 +:101FA0000000000000000000000000000000000031 +:101FB0000000000000000000000000000000000021 +:101FC0000000000000000000000000000000000011 +:101FD0000000000000000000000000000000000001 +:101FE00000000000000000000000000000000000F1 +:101FF00000000000000000000000000000000000E1 +:08200000481F000080013E04AE +:102008003038F00C19005EBC5C7C4848F00C003994 +:10201800F00C093BB22A5EFC000011C0F80815015B +:102028003039F20C1800E08800035EFDF00B000B5D +:102038004828F00B032C5EFC00007B08580CC0D02D +:1020480048787829F00900293008720A143CC060E1 +:102058002FF82F895848CFA13FF85EF800007B0879 +:102068003038F00C18005EBCF60C001C30094838FB +:10207800F00C09295EFC000000007B085EFFD70316 +:10208800D4011988301EB6881998B6BEEA18FFFF21 +:10209800E818FF80B6AEB698580AC0301588C0A8B0 +:1020A80048981188F4081800C0303038C03848788B +:1020B80011B8B6C83EE8B6D83008B6E8302C306853 +:1020C800B208D802000016AB00000008D40130188E +:1020D800198EB68E199CB6A8EA1CFFFFE81CFF8073 +:1020E800B6B8B69C580AC0A0158CE06A00FFF00C80 +:1020F8001800F4081710F9B80001B6C83EE8B6D8B9 +:102108003008B6E8302C3068B208D802D421202D27 +:102118004AAA189E1698129674075807C071FACAE8 +:10212800FFF814F7F01F0026C4681989B6891999B1 +:10213800EA19FFFFE819FF80B6993039B0A9740988 +:102148007219F20C1618B0F9B0CCF9D9C108F3D944 +:10215800C208B0ECB0D9304BB0BB74097229F20C8C +:102168001618F169000CF16C0009F9D9C108F3D906 +:10217800C208F16C000BF16B0008F169000A7409E0 +:10218800300A7239F16A00133EEAF16A0012F20A63 +:102198001618F1690011F16A000EF16B000DF5D9FE +:1021A800C108F3D9C208F16A0010F169000F302C98 +:1021B8003138AC082FEDD8220000152C800020D42F +:1021C8003038F00C18005EBCF60C001B48F8F00B19 +:1021D800032858085E0C704958195E1C7029581954 +:1021E800C09148B8F00C003C9828B42878089508A5 +:1021F8005EFC71E85808F0091700F1F91001F1F8D0 +:10220800120A9509B4285EFC00007B08000011C082 +:10221800D4314BC8300A10941499910A1893301A83 +:102228004B984BA7910A3EE14B921296C0280A9907 +:10223800E0682710C0485808C5602018664AE21AA6 +:102248000201E04A0201CF81C4F8F2C5FFFFE20AA9 +:102258001800CEE10F9BF7DBC0C15825E0890005C7 +:102268003038300AC2E80FAA3038C148580BC0A02D +:10227800EE08070EEE08000CA96E2FE8199C1C0842 +:10228800C058F0CCFFFFEE080708201AF80800082D +:102298005C5A10395F9CEC0A18005F9EFDEC000C3C +:1022A800EC0C1800CE4110395F09F9DAC008EC0CC3 +:1022B80018005F0CF9E90009EC091800C020D83AA9 +:1022C800840C3009F20C1900CB34201D5C6A1ADB2F +:1022D8001AD849081ADA490C1AD51AD8F01F000F6B +:1022E8002FADCA6BDA3A662A68085C5A2FF8EE09ED +:1022F8000B0A8908E0480063FE9AFFA9305CD832CF +:10230800000014B0000011B8000014B8000016A2B4 +:102318008003792C80037AB0800094C4D431202DB6 +:102328004C68149570081896169712945808C0713E +:10233800FACAFFF814F8F01F0042CC38198830198F +:10234800B6881998B6A9EA18FFFFE818FF80B6986A +:102358004BC89088EDB80002C171189330023EE175 +:102368000788201D4B8C1AD8F01F00382FF22FED4C +:102378000788E2081800C0502FF3E0420400CF118C +:102388004B3CF01F00320DC83099F2081800E08865 +:1023980000114B09920A3009F20A1900E0840091F1 +:1023A8001AD84AD84ADC1AD8F01F00282FEDC88856 +:1023B800E0450032C290A3684A99E0450033C5D091 +:1023C800129B7209F2080309EECAFFFCF3360020DB +:1023D8003009AEB6C088760CF808030CF809070C6B +:1023E8002FF914CCEC091900CF7349A99289EDB9DA +:1023F8000004C5F149A97209F2080308499C1AD8D2 +:1024080049581AD8C538304BA368495A7409F20894 +:10241800030972C9AEBBF20B1618AEC9AEFBF7D9E9 +:10242800C108F3D9C208AEDBAEE948A99289EDB973 +:102438000004C1903046C3D80000152C800020D479 +:10244800000016A080037AF0800094C4800384D42E +:10245800000016A28003785880037AF8000015203F +:1024680080037B187409F208030870C8496C1AD8ED +:10247800304649681AD8C1A8301AAEBA720AF408A8 +:10248800030AF53A0038AECA491A948AEDBA00042C +:10249800C0303016C0E87209F2080308F138003875 +:1024A80048CC1AD8301648981AD8F01F000B2FEDD0 +:1024B8003EE80C07AEC83008AED82FB6A806302CB8 +:1024C8002FEDD83280037B2880037858000016A2AD +:1024D80080037B38800094C4D421204D4A981897F3 +:1024E800118A580AC0313FF6C0D84A7811BC118EFB +:1024F800119611A8B166EDEE1186EDE81086F9E6A1 +:1025080010064A289088EDB80002C0E14A08201D4C +:102518004A0C1ADA1AD61AD8505B5049F01F001E16 +:102528002FCD4009401B49D870085808C081FACA05 +:10253800FFF00E9C14F8F01F001AC2080F88B68826 +:102548000F98EA18FFFFE818FF80B6983018B6A869 +:102558003048B6B8F1D6C108B6E83EE8EC0A161815 +:10256800B6F6F7680008B6CA3008EDD6C208F768AC +:102578000009B6D63098302CB2082FCDD8220000EA +:102588000000152800007B28000016A28003782090 +:1025980080037B48800094C40000152C800020D460 +:1025A800D401580BC0313FF8C0C8178A17B917981B +:1025B800B168F1EA118817AAF1EA1088F3E810085F +:1025C800F00A161848E9B28AF5D8C208B2B8B29A21 +:1025D800F5D8C108B2AA48B99289EDB90002C0A1DC +:1025E800201D1AD848881ADC488C1AD8F01F000811 +:1025F8002FCD30194878B089D802000000007B2818 +:10260800000016A28003799C80037B74800094C428 +:1026180000001528D431204D4AE8189570081697FF +:1026280012965808C071FACAFFF014F8F01F002A71 +:10263800C4D84AA89088EDB80002C1711894300334 +:102648003EE20988201D4A6C1AD8F01F00262FF395 +:102658002FED0988E4081800C0502FF4E043040067 +:10266800CF114A1CF01F001F0B880BCCAE880B98AB +:10267800EA18FFFFE818FF80AE983004BA445014F7 +:102688003025FACAFFFCAEA5301BF01F0018304AEF +:10269800EF64000CEF6500084018F0091618AEF852 +:1026A800AEC99A49AEBAF5D8C108F1D8C208EF69DF +:1026B800000AAED8AEEA3EE8F3D9C108EF68000BCD +:1026C800EF69000930C8302CAC082FCDD832000093 +:1026D8000000152C800020D4000016A080037AF09A +:1026E800800094C4800384D4800021C8D40148A801 +:1026F8009088EDB80002C0E148887008201D1AD8FB +:10270800487811881AD84878487C1AD8F01F0007EA +:102718002FCDDA0A000016A200000008000016AB50 +:10272800800379E480037BA8800094C4D42148E620 +:10273800189E30076C0C580CC0A02FF72EC6E04727 +:102748000024CF91489CF01F000ADC2A4866EE0757 +:102758000027EC070027EF680010AECE8F0B8F2AFA +:102768008F39D822000011E080037BC4800094C414 +:10277800D4214C8618970C9A302830094C6B310CB0 +:10278800F01F00460C9A302830094C5B311CF01FB2 +:1027980000430C9A302830094C2B312CF01F003F95 +:1027A8000E990C9A30284C0B314CF01F003C0E99B6 +:1027B8000C9A30284BDB315CF01F00383018300998 +:1027C8004BBA4BCB320CF01F003530184BA73009F1 +:1027D8000E9B4BAA321CF01F00310E9B301830099B +:1027E8004B7A322CF01F002D4B6532390A9A0E9B1A +:1027F8003018129CF01F002932490A9A0E9B301893 +:10280800129CF01F002632590A9A0E9B3018129C0F +:10281800F01F00220A9A32690E9B3018129CF01F92 +:10282800001F0C9A302830094A7B336CF01F001BBC +:102838000E9B301830094A5A327CF01F00180C9A47 +:10284800302830094A2B330CF01F00144A1533394D +:102858000A9A0E9B3018129CF01F001033190A9A1E +:102868000E9B3018129CF01F000D0A9A33290E9BFC +:102878003018129CF01F00090C9A30283009496B57 +:10288800334CF01F00060E9B30183009493AC278C5 +:10289800800020D48000427C8000273480004118CA +:1028A8008000433080003FD080003EA88000208810 +:1028B800800026F48000208480002114800035ECFC +:1028C80080003514800034A480004B5480003740C9 +:1028D8008000232480003678800024E0335CF01FD9 +:1028E80000370C9A302830094B5B328CF01F0033CC +:1028F8000C9A302830094B3B32DCF01F00300C9A20 +:10290800302830094B0B32ECF01F002C0E9B30188E +:1029180030094AEA329CF01F00290E9B3018300912 +:102928004ABA32CCF01F00250E9B301830094A9A5B +:1029380032BCF01F00220C9A304830094A6B344CE4 +:10294800F01F001E0E9B301830094A4A32ACF01FA7 +:10295800001B0E9B301830094A1A345CF01F001710 +:102968000E9B3018300949FA32FCF01F00140E9BF8 +:102978003018300949CA337CF01F00100E9B3018FC +:10298800300949AA338CF01F000D0C9A30483009E1 +:10299800497B346CF01F00090C9A30283009495BD8 +:1029A800339CF01F00060E9B30183009492A33ACBF +:1029B800F01F0002D82200008000273480003D88E4 +:1029C80080003AC8800038B4800033FC800030D4DE +:1029D800800032848000375C800032088000300438 +:1029E8008000332880002F8C80002EC4800038841B +:1029F800800037CC8000261CD4013038580B5F1972 +:102A0800F00C18005F88F3E80008C060F40C0019A7 +:102A180048D8F009092B48D89088EDB80001C111B1 +:102A280048B848C9580AF20A1700F00A171048A807 +:102A38001ADA1ADB1ADC489C1AD8F01F00092FCDC5 +:102A4800D802000000007B08000016A280037BDC8F +:102A580080037BE4800378C080037BF0800094C40B +:102A6800D401580BF60A1700F7FA180BF01F0002EA +:102A7800D802000080002A00D401320A300B483CFA +:102A8800F01F0003D802000000007B088002E8BCA9 +:102A9800D421206D3087FAC6FFF00E9A4C6B18953A +:102AA8000C9CF01F0046304B0C9CF01F0045300872 +:102AB800FB68000DBA88FB680009FB68000BFB681F +:102AC800000CEE784240501830480E9BFB67000817 +:102AD800FB68000A300AFE7C2400F01F003A1897B1 +:102AE800C0F04B989088EDB80002C0814B78201D4B +:102AF8004B7C1AD8F01F00372FED301CC5A8E06AB0 +:102B0800F980EA1A03371A9BFE7C2400F01F003272 +:102B1800582CC0D14AC89008EE081900C0844AB899 +:102B2800201D4AEC1AD8F01F002B2FEDD303300AD2 +:102B3800E06B01204AACF01F002BD503E1B8000080 +:102B4800EE180001F5D8C201C020D303FE78240096 +:102B58003019705BF7D9D001915B705BF7D9D0C1A0 +:102B6800915B705BF7D9D081915B580AC020D5037F +:102B7800FE7C2400F01F001C0A9CF01F001C364A33 +:102B8800300B49BCF01F001BE06A0400300B49AC55 +:102B9800F01F0018E06A0400300B498CF01F001584 +:102BA800F01F0017497830079107F01F00170E9C97 +:102BB8002FADD822800382078002E7368000A280EA +:102BC8008000A618000016A2800379BC80037C0848 +:102BD800800094C48000A73C80037C2880002C10CF +:102BE8008000A3A08000A7EC80002778000014B81C +:102BF8008002E8BC00000DB8000009B880002A80F7 +:102C0800000000088000751CD401E1B80000EE182F +:102C18000001F5D8C201C020D303FE782400301982 +:102C2800706BF7D9D001916B706BF7D9D0C1916BEC +:102C3800706BF7D9D081916B580AC020D503FE7C00 +:102C480024007848EDB80000C0F1F01F0016C0C19C +:102C5800319CF01F0015495890092FF9B009301917 +:102C68004938B089C1B8E1B80000EE180001F5D8BC +:102C7800C201C020D303FE7824003019705BF7D955 +:102C8800D001915B705BF7D9D0C1915B705BF7D9CC +:102C9800D081915B580AC020D503D402D603000026 +:102CA800800022188000A2E6000014B40000151C61 +:102CB800D4313006189714931694950618983E093F +:102CC800C2C81095118A2FF8F20A1800C251580686 +:102CD800C21049E890093008F0091900C064089B3F +:102CE8000E9C5C7BF01F001A49A890093008F00977 +:102CF8001900C1040C070F98201D1AD849681AD466 +:102D08001AD690881AD84958495C1AD8F01F001565 +:102D18002FAD8706C1882FF60836CD4548D89009CB +:102D28003008F0091900C0353005C0D8201D48A862 +:102D38001AD690881AD8489848BC1AD83005F01F77 +:102D480000092FCD0A9CD832000016A680013DB498 +:102D5800000016A2000014B4800378D080037C48D9 +:102D6800800094C480037C6CD42118971696F01FB9 +:102D780000325F080E3C5F191895F1E91009C03060 +:102D88005808C5710B893E08F0091800C5210B9930 +:102D98003008F0091800C4D5E2190040C0E1EACAB9 +:102DA800FFFD0BAC1298C068158B2FF92FFB160A84 +:102DB80016081839CFA5C2384A089088EDB800021D +:102DC800C0D149F8201D49FC1AD8F01F001FF7D6BA +:102DD800C0100E9CF01F001D2FED3009EACAFFFD40 +:102DE8000BAC1298C0A81587159B2FF9F7E7108B25 +:102DF8002FEB160AF60800081839CF6510053EE9CA +:102E08000BB8F2081800C021DA2A4919920A3009C9 +:102E1800F20A1900C0E4201D1AD848E890881AD888 +:102E2800487848DC1AD8F01F0008300C2FCDD8227B +:102E3800D82A000080002CB8000016A080037974FE +:102E480080037C84800094C480013DB4000016A2F5 +:102E5800000014B480037C8CD4014918581CC0713C +:102E68003039334C9109F01F000FC0683049334C9A +:102E78009109F01F000D48D89088EDB80002C0D124 +:102E880048787008201D1AD848981AD8489848AC2D +:102E98001AD8F01F000A2FCDD80200000000000841 +:102EA8008000A2E68000A300000016A280037A3CFE +:102EB8008003821080037CB0800094C4D421FACDB2 +:102EC80001004AC81697700512965805C071FACACB +:102ED800FF0014F5F01F0028C4A81989301AB68914 +:102EE8001999B6AAEA19FFFFE819FF80B69919B926 +:102EF800F4091800C20119C53FF8F0051800C1B05F +:102F0800E06A00FF300B1A9CF01F001C1A9430086E +:102F1800C048E8080B082FF80A38CFC51A94AEB590 +:102F2800EEC8FFFCFA050009C038093A10CA123485 +:102F3800CFD1C15849256A0CF01F00120A98EECA71 +:102F4800FFFCEBDCC0083009AEB5C068700BF609B1 +:102F5800070B2FF914CBEA091900CF933EE80A07AB +:102F6800AEC83008AED82FB5302CAC052C0DD82201 +:102F78000000152C800020D48002E8BC0000011459 +:102F88008002EDD0D421202D49981697700E129604 +:102F9800580EC071FACAFFF814FEF01F0016C25886 +:102FA8001989B6891998EA18FFFFE818FF80B698BA +:102FB80030184915B6A86A0CF01F0010EEC9FFFCBE +:102FC8005C5C3008AEBCC0686A0AF408070A2FF8CF +:102FD80012CAF8081900CF933EE818072FBCAEC8EC +:102FE8003008AED8AC0C302C2FEDD8220000152CB0 +:102FF800800020D4000001148002EDD0D421202DBF +:103008004AE818967008169712955808C071FACAB7 +:10301800FFF814F8F01F002AC4D84AA811D4303891 +:10302800F0041800E08B0046FACAFFFC1A9B089CC3 +:10303800F01F00250D88C300AE880D98EA18FFFF21 +:10304800E818FF80AE983018AEA81BC8AEB89A280A +:10305800AEC83008C0B8F3D8C010400BF1DAB010D1 +:10306800EE09000AF6090709B4D9F0CAFFFF9A2940 +:10307800F2081900CF13F1D9C010EE0800083EEA93 +:10308800B0DA9AA82FA910073008AEE8AA09089C58 +:10309800F01F000EC0E8AE880D98EA18FFFFE81888 +:1030A800FF80AECCAE98AEAC3EE8AEB83048AA08C9 +:1030B800302C2FEDD82200000000152C800020D4E1 +:1030C80000000DB880006BF480006FBCD431202D57 +:1030D8004C5818967008169712955808C071BAE897 +:1030E800FACAFFFAF01F0041C728F8C8FFFDC3C09D +:1030F80011842FF4F0040004C37009893018F00912 +:103108001800C67109993EE8F0091800C6214B88D5 +:1031180090093008F0091900C5C44B681AD44B6CE3 +:103128001AD8F01F00362FEDC548099309A9F3E313 +:1031380010835C83C54809893018F0091800C1510B +:1031480009993EE8F0091800C1014A989009300829 +:10315800F0091900C0A44A781AD44A7C1AD8F01F7A +:1031680000272FEDC02830030DB43018F0041800E4 +:10317800C2D10DCC3038F00C1800E08B0028F5D304 +:10318800C008FACBFFF9F01F001E0D88C120AE88D9 +:103198000D98EA18FFFFE818FF80AEB4AE98AEA409 +:1031A8001BF8AEC83EE8AED83008AEE83068C0D8E4 +:1031B800AE880D98EA18FFFFE818FF80AE983EE841 +:1031C800AECCAEB8AEAC3048AA08302C2FEDD83211 +:1031D80009883029F2081800CA9030032FF8100423 +:1031E800CAB1CC3B0000152C800020D4000016A2E8 +:1031F8008003780C80037CBC800094C480006FE05E +:10320800D421202D49A81697700E1296580EC07119 +:10321800FACAFFF814FEF01F0017C2681989301A9D +:10322800B6891999B6AAEA19FFFFE819FF80B69975 +:1032380019B9F4091800C0D119C83039F2081800B2 +:10324800E08B000848C9F208033CF01F000CC028B6 +:10325800300C3018AEB83EE8AECCAED83008AEE888 +:10326800302C3068AC082FEDD82200000000152C57 +:10327800800020D400007B0880004D78D421202DC8 +:103288004A181697700E1296580EC071FACAFFF8AF +:1032980014FEF01F001EC3481989301AB6891999FF +:1032A800B6AAEA19FFFFE819FF80B69919B9F40917 +:1032B8001800C0B119CC3038F00C1800E08B0006AB +:1032C800F01F00135C8CC028300C3028AEB83EE8E4 +:1032D800AECCAEE85C7CF8081608AED83008AEF87C +:1032E8003078AC0848B89088EDB80002C08148A88A +:1032F8001ADC48AC1AD8F01F000A2FED302C2FED3D +:10330800D82200000000152C800020D480006D38E1 +:10331800000016A8800378A880037CD8800094C495 +:10332800D421202D4AA81697700512965805C07109 +:10333800FACAFFF814F5F01F0027C4781989301A63 +:10334800B6891999B6AAEA19FFFFE819FF80B69954 +:10335800303819B919C5F40918005F09F0051800C3 +:103368005F881268C19049C8F00503345804C060EA +:10337800089C301BF01F0019C10849989009E809FA +:103388001900C0A449781AD5497C1AD8F01F00172B +:10339800089C2FEDC028300C3018AEB83EE8AECCF3 +:1033A800AED83008AEE83068AC0849189088EDB857 +:1033B8000002C0A148B8201D1ADC48EC1AD51AD85A +:1033C800F01F000A2FCD302C2FEDD8220000152C2D +:1033D800800020D400007B0880004F1C000016A647 +:1033E8008003794080037CEC800094C4000016A818 +:1033F80080037D10D421202D4A181697700E12963E +:10340800580EC071FACAFFF814FEF01F001EC34818 +:103418001989301AB6891999B6AAEA19FFFFE81965 +:10342800FF80B69919B9F4091800C0F119C83039E4 +:10343800F2081800E08B000A4939F2080038300B0E +:10344800701CF01F0012C028300C3018AEB83EE8CF +:10345800AECCAED83008AEE83068AC0848C8908822 +:10346800EDB80002C08148B81ADC48BC1AD8F01F71 +:10347800000B2FED302C2FEDD82200000000152C6A +:10348800800020D400007B0880004F1C000016A894 +:1034980080037A6480037D28800094C4D40149584D +:1034A8009088EDB80002C08149381ADC493C1AD826 +:1034B800F01F00132FED49383009118AF20A18005D +:1034C800C021DC0AB089F01F0010581CC1004898C0 +:1034D80090093008F0091900C025DA0A48681ADC92 +:1034E80048AC1AD8F01F0006301C2FEDD802000097 +:1034F800000016A28003798480037D38800094C47C +:10350800000016AA80019EF880037D54D421202D46 +:103518004B281496700E16971295580EC071FACA59 +:10352800FFF814FEF01F002EC5681989B68919988E +:10353800EA18FFFFE818FF803014B698B6A4F01F09 +:103548000029C3E0E0460025C260E0460026C3200B +:10355800EEC9FFFCE0460024C0F0129AF9380020BA +:103568003009AEB8C058F809070B2FF914CBF00989 +:103578001900CFA3C28830682DACAEB8306A3008C5 +:10358800198B12CB2FF8201C5C88F4081900CF91F6 +:103598003068C19878C8F0091618AEF93049AEC835 +:1035A800AEB9F3D8C108F1D8C208AED9AEE83048F0 +:1035B800C0A8AEB4F9380038AEC83018C048AEB4A8 +:1035C800AECC18983EE91007AEC93009AED92FB86D +:1035D800302CAA082FEDD8220000152C800020D40A +:1035E8008001997CD421202D49F8189670081697E7 +:1035F80012955808C041FACAFFF8C1881988B688D8 +:103608001998EA18FFFFE818FF803019B698306853 +:10361800B6A9B6B81A9CF01F0015581CC0B00A9974 +:103628000E9B0C9CFACAFFF8300814F8F01F001023 +:10363800C1881BD8AEC81BC8AED81BB8AEE81BA83B +:10364800AEF81B98EF6800081B88EF6800093EE891 +:10365800EF68000A3008EF68000B302C30B8AA0871 +:103668002FEDD8220000152C80019128800020D44D +:10367800D421FACD010016961A971A9C173AF01F12 +:103688000025FAC9FF000D88F20800083009F16921 +:10369800FF004A189088EDB80002C08149F81AD78F +:1036A80049FC1AD8F01F001F2FED300849E749FAE6 +:1036B800AE88AE98AEA8AEB8B488109949CA0E9B29 +:1036C8001A9C1A96F01F001B5C5CC040E06C00FF5F +:1036D800C1E849189088EDB80002C1510F8A0FB9A6 +:1036E8000F98B168F1EA11880FAAF1EA1088F3E897 +:1036F8001008201D1AD848981AD648FC1AD8F01F66 +:1037080000092FCD30194898301CB0892C0DD822CB +:103718008002E736000016A280037A7C80037D646D +:10372800800094C400007B2800001528800025A88C +:103738008000C4C080037D84D401F01F0006E068C7 +:1037480000FF581CF00C1710F9BC0001D80200004B +:10375800800199CCD42118971696335CF01F001677 +:103768005827C1F10D980D89F1E910893018F00931 +:103778001900C1710DA80DBA0DC9303BF608180023 +:10378800E0880004300CC04848CBF608033CA96A1E +:10379800ECCBFFFB120A5C7AF01F00091897C028CF +:1037A8003FF7335CF01F0007E06C00FF5817F9BCC7 +:1037B8000001D8228000A30000007B08800053C0CD +:1037C8008000A2E6D421202D581CC4211789F809AD +:1037D8001800C3E1F6C8FFFE1796C170118AF20AF5 +:1037E8001800C131119A3EE9F20A1800C0E149B93E +:1037F800920A3009F20A1900C0841AD84988499CEB +:103808001AD8F01F00192FED3008FACAFFF8300B4C +:1038180014E80C9CF01F00159A3A18973038F006F7 +:103828001800E0880004300CC0484918F006033C32 +:103838005C7A0E9BF01F000F18950C9CF01F000E71 +:103848000E9CF01F000E5815C0310A9CC038E06C61 +:1038580000FF2FEDD8220000000016A28003795C3B +:1038680080037CBC800094C4800072DC00007B086C +:103878008000514080006E188002E28CD401582CE0 +:10388800C13117981789F1E910893018F009190022 +:10389800C0B117C817BA17ACA96A2FBBF00A000A3B +:1038A8005C7AF01F0002DA0A80007380D421581C69 +:1038B800C391580BC0311697C1E81788F80818004B +:1038C800C3411797C33817893018F0091800C13158 +:1038D80017993EE8F0091800C0E1497890093008C6 +:1038E800F0091900C08449581ADB495C1AD8F01F3E +:1038F80000152FED49089088EDB80002C08148F8FE +:103908001AD7491C1AD8F01F000F2FED3038F007CE +:103918001800E08B000848D8F007033CF01F000CA3 +:10392800DA2AE06C00FFD82230072FF8100BCCC140 +:10393800CE2B0000000016A2800379F880037CBC1F +:10394800800094C480037DA800007B088000599CF7 +:10395800D421202D4B981896169414971295908878 +:10396800EDB80002C1314B694B685805F2081700E1 +:10397800201D1AD816985C781ADA1AD84B281ADC3F +:103988004B2C1AD8F01F00322FAD3038F007180032 +:10399800E0880005E06C00FFC8584AE8F0070338E3 +:1039A80050085808C1504A59920A3009F20A1900B9 +:1039B800C0841AD84A484A8C1AD8F01F00252FED1F +:1039C800400CF01F002630094A28F00709391A9CD4 +:1039D800E06A04005016300B1ADC14981AD75C748D +:1039E8001ADB16991AD5089C1ADA169A1AD6F01FF5 +:1039F800001C49282FAD580CC3819088EDB80002EF +:103A0800C1511AD71AD41AD6403850461AD848D8AD +:103A180048B95805F2051700F005171048A81AD537 +:103A2800490C1AD8F01F000A2FAD0E9C400BF01F4E +:103A3800000E301CC3780000000016A280037DC869 +:103A480080037DC4800379C480037DCC800094C446 +:103A580000007B0880037DF88000599C80005D642D +:103A680080037E2480002A689088EDB80002C15146 +:103A78001AD71AD41AD6403850461AD848B848C95E +:103A88005805F2051700F005171048A81AD548ACD4 +:103A98001AD8F01F000A2FAD300948983FFCF007EC +:103AA80009392FEDD822000080037DC480037DC82A +:103AB800800379C480037E50800094C400007B0892 +:103AC800D431584CE081008E580BC2A01785F805F8 +:103AD8001800E081008A179817A7B167EFE81187E7 +:103AE80017B8EFE8108717C8F1E71007C7E80B8980 +:103AF8003018F0091800C7E10B993EE8F0091800E2 +:103B0800C7914C2890093008F0091900C7344C08AF +:103B18001AD54C0C1AD8F01F00402FEDC6B81697CE +:103B28003006C1F80B960BA8F1E610865C86C688AD +:103B380007893018F0091800C72107993EE8F009ED +:103B48001800C6D14B1890093008F0091900C6743E +:103B58004AF81AD34AFC1AD8F01F002F2FEDC5F8DF +:103B68003005C1B80795C61809893018F00918003A +:103B7800C61109993EE8F0091800C5C14A389009EC +:103B88003008F0091900C5644A181AD44A1C1AD812 +:103B9800F01F00212FEDC4E83003C1A80993C50820 +:103BA80009893018F0091800C13109993EE8F0096F +:103BB8001800C0E1495890093008F0091900C0847C +:103BC80049381AD4493C1AD8F01F00132FED06992A +:103BD8000A9AF7D6C0100E9CF01F0010581CC0306F +:103BE800E06C00FFD83230072FF5F6050005C80154 +:103BF800C98B0B833028F0031800C95030062FF307 +:103C0800EA030003C961CADB000016A280037A98A0 +:103C180080037CBC800094C4800039580784301825 +:103C2800F0041800CA0030052FF4E6040004C9D1D6 +:103C3800CB4B09883019F2081800CB1030032FF845 +:103C48001004CAF1CC5B0000D421202D3038169620 +:103C58001494F00B1800E08B0072300750074BA843 +:103C68001188EE081800C0B04B889008EE081900BB +:103C7800C654201D4B684B7C1AD8C0F84B69138971 +:103C8800F0091800C0E14B589008EE081900C56407 +:103C9800201D4AF84B2C1AD8F01F00322FEDC4E82B +:103CA8001A9AE0690400501712981ADAEBDCC0106F +:103CB8001ADB0E9A1AD70E9B1AD40A9C1AD93019F5 +:103CC8001AD7F01F00294A182FAD580CC1B1908897 +:103CD800EDB80002C1114A584A595804F2041700B5 +:103CE800F004171049A81AD64A2C1AD51AD41AD88B +:103CF800F01F001C2FCD0C9C400BF01F001F301C28 +:103D0800C1F89008EE081900C11449884989580477 +:103D1800F2041700F004171048D81AD6497C1AD5AF +:103D28001AD41AD8F01F000F2FCDA17630092FF61C +:103D380049383FFCF0060929C038E06C00FF2FED38 +:103D4800D822000000007B07000016A280037A102A +:103D580080037E80000016AB000016A680037EA0BC +:103D6800800094C480005D6480037DC480037DC8A6 +:103D780080037EB880002A6880037EDC00007B0810 +:103D8800D421583CC661580BC24017843028F0042F +:103D98001800C621179717A8F1E710875C87C5D8C0 +:103DA80009893018F0091800C5D109993EE8F009C9 +:103DB8001800C5814B6890093008F0091900C5241E +:103DC8004B481AD44B4C1AD8F01F00342FEDC4A816 +:103DD80016973006C1B80996C4B80B893018F0098F +:103DE8001800C4B10B993EE8F0091800C4614A886C +:103DF80090093008F0091900C4044A681AD54A6CB9 +:103E08001AD8F01F00262FEDC3883004C1A80B94E0 +:103E1800C3A80B893018F0091800C1310B993EE886 +:103E2800F0091800C0E149A890093008F009190004 +:103E3800C08449881AD5498C1AD8F01F00182FED6C +:103E48000E9C089A0C9B5C7CF01F0015581CC03017 +:103E5800E06C00FFD82230072FF4F6040004CA11E2 +:103E6800CB9B09853018F0051800CB6030062FF57C +:103E7800E8050005CB31CCAB0B883019F2081800E7 +:103E8800CC7030042FF81005CC51CDBB000016A221 +:103E98008003791480037CBC800094C480003C506B +:103EA800D431204D1495740A501A18961788301971 +:103EB800F2081800C771F6C7FFFE1794C1700F8982 +:103EC800F0091800C1310F993EE8F0091800C0E167 +:103ED8004B7890093008F0091900C0844B581AD75C +:103EE8004B5C1AD8F01F00352FED4B189088EDB8B1 +:103EF8000002C0A14AF81AD44B1C1AD61AD51AD8EF +:103F0800F01F002E2FCD3028F0041800E08B004B56 +:103F18003006304030114A624A63C3E80F88E0082F +:103F28001800C4010F990FA8B168F1E911880FB9F9 +:103F3800F1E910880FC92FB7F3E810085807C170C6 +:103F48000F89E2091800C1310F993EEAF4091800F7 +:103F5800C0E18409300AF4091900C0941AD7496CE1 +:103F68001AD35028F01F00152FED400850388489C7 +:103F7800EDB90002C0A11AD84029492C1AD91AD67D +:103F88001AD3F01F000E2FCDF9D6C008FACBFFF4D4 +:103F98002FF6F01F000D0836CC253008301CAAC8B3 +:103FA800C038E06C00FF2FCDD8320000000016A208 +:103FB80080037A4C80037CBC800094C480037F0813 +:103FC80080037F308000C19CD431203D3019149487 +:103FD800189674051788F2081800E0810085F6C75E +:103FE800FFFE1792C1700F89F0091800C1310F99AF +:103FF8003EE8F0091800C0E14BD890093008F009F4 +:104008001900C0844BB81AD74BBC1AD8F01F003B14 +:104018002FED4B789088EDB80002C0A14B581AD20A +:104028004B7C1AD61AD41AD8F01F00342FCD30384A +:10403800F0021800E08B005830064AD04AD1FAC383 +:10404800FFF8C4B80F88304AF4081800C4C10F99A3 +:104058000FA8B168F1E911880FB9F1E910880FC903 +:104068002FB7F3E810085807C1800F89301AF409F0 +:104078001800C1310F993EEAF4091800C0E180091F +:10408800300AF4091900C0941AD749BC1AD150282B +:10409800F01F001A2FED400850288089EDB9000262 +:1040A800C0911AD8497C1AD51AD61AD1F01F001314 +:1040B8002FCD5816C0805826C0B0069B0A9CF01F0A +:1040C8000012C0A8069B0A9CF01F0010C058069B4F +:1040D8000A9CF01F000F2FF60436CB553008301C11 +:1040E800A8C8C038E06C00FF2FDDD832000016A247 +:1040F800800378F080037CBC800094C480037F0830 +:1041080080037F308000CBC88000CA748000CA92C8 +:10411800D421FACD00884C6816979088EDB8000233 +:10412800C0B14C48201D1ADC1AD84C384C3C1AD85F +:10413800F01F00432FCD344A300BFAC6FFFC0C9C0D +:10414800F01F0040306AE06B00FFFACCFFDBF01F85 +:10415800003D0F8A31F8F00A1800E08B008930889A +:10416800EECBFFFFFB68003C0C9CF01F00370F896B +:10417800FB6900244AE89088EDB80002C0A14AE82B +:10418800201D4B2C1AD91AD61AD8F01F002D2FCD66 +:104198000F882FF8FAC6FFB810070C9C0E9B173A29 +:1041A800F01F002BFAC9FF780F88F20800083009C1 +:1041B800F169FFC049E89088EDB80002C0B10F88E6 +:1041C800201D1AD849C81AD64A2C1AD8F01F001C24 +:1041D8002FCD0F8A3018FAC7FFFC3089FACBFFB809 +:1041E8000E9CF01F001D581CC0C0491890093008CB +:1041F800F0091900C3C44908498C1AD81AD8C0E86C +:10420800497CF01F000F0E9C300BF01F001618970A +:10421800581CC080201D1ADC493CF01F00092FEDF6 +:10422800C268492CF01F00060E9CC238000016A276 +:1042380080037A248003787080037F50800094C4C0 +:104248008002E8BC8002E73680037CB08002EE0C76 +:1042580080037F648001908480037F7880037FA03F +:10426800800099A880037FB880037FC0E06C00FFBE +:104278002DEDD822D42120AD4A461697178A31F859 +:10428800F00A1800E08B002FFAC5FFF92FFB0A9CF3 +:10429800F01F001F0F88FAC9FFD8FB680027100914 +:1042A8003008F368FFDF8C88EDB80002C0814998B8 +:1042B8001AD5499C1AD8F01F00192FED300BFACCEB +:1042C800FFF9F01F00171897581CC1B048F890095B +:1042D8003008F0091900C1541ADC48E8491C1AD8FA +:1042E800C0D88C093008F0091900C0353FF7C098CC +:1042F800201D488848CC1AD83FF7F01F00082FED3A +:104308000E9C2F6DD8220000000016A28002E7360E +:10431800800378E080037B18800094C4800099A80B +:1043280080037D5480037FC4D431216D4D281697B6 +:104338009088EDB80002C0B14D08201D1ADC1AD8CB +:104348004CF84D0C1AD8F01F00502FCD321AFAC66F +:10435800FFFD300B0C9CF01F004D0F8A31F8F00A5E +:104368001800E08B0085EECBFFFF0C9CF01F004887 +:104378000F88FB6800234C089088EDB80002C081C4 +:104388004BF81AD64C3C1AD8F01F003F2FED0F8679 +:104398002FF6EE060006FAC7FFAC0C9B0E9C173AE8 +:1043A800F01F003D0D88FAC9FFA8F20800080E9C0E +:1043B8003003F163FFFCF01F00393038EFDCC00830 +:1043C8000D89F00718005FB53018F00918005F185C +:1043D80010450A94E6051800C4A1ECCBFFFDFAC30A +:1043E800FFDC2FE6069C0D8AF01F002B0D88FAC90A +:1043F800FFA8F2080008069BF165FFCCFAC5FFC0CC +:104408000A9CF01F002730D81896F00C18005F1986 +:104418003058F00C18005F18F3E80008E808180096 +:10442800C261FAC4FFB2306AE06B00FF089CF01F5B +:1044380000170C9B08990A9A0E9CF01F001A0E9CF4 +:10444800F01F0019300BFACCFFFDF01F0018581CA4 +:10445800C100489890093008F0091900C0844888BC +:104468001ADC493C1AD8F01F00082FEDE06C00FF59 +:104478002EADD832000016A280037888800379AC6C +:1044880080037F50800094C48002E8BC8002E73635 +:1044980080037FE48002EE0C8002DC2C80009868A8 +:1044A8008001927080019258800099A880037D5401 +:1044B800D401319CF01F0010E06B00EFFE7C280057 +:1044C800F01F000E581CC060FE7C2800F01F000C76 +:1044D800CFC0319CF01F000B48B890093008F00994 +:1044E8001900C0844898201D489C1AD8F01F00095C +:1044F8002FEDD8028000A3008000A7FA8000A7F261 +:104508008000A2E6000016A28003790880037FF0ED +:10451800800094C4D431202D3008FAC7FFF81696CD +:10452800189514930EE81694098B0A9C2FF4F01F23 +:104538000009581CC0B00E9B0A9CF01F0007089881 +:104548000C18E6081900CF13300C2FEDD8320000F4 +:104558008000A7FA8000A816D421202D30081496D0 +:10456800F80C002C129AFAC9FFF812E84A88F00CE5 +:10457800002C169578280C9B0A9C5D184A583049DF +:10458800319C9109F01F00249ABA0C9BFE7C2400F0 +:10459800F01F00221897319CF01F00214A189088BC +:1045A800EDB80002C0414A0CF01F002049D890889D +:1045B800EDB80002C0D149E8201D49EC1AD8F01F17 +:1045C800001B49D80A9C908BF01F001C2FED4958FE +:1045D8009088EDB80002C041499CF01F00144918AA +:1045E8009088EDB80002C0C14918201D491C1AD88E +:1045F800F01F000E9AFB0C9CF01F00102FED9A394B +:1046080049080E9CB0092FEDD8220000000011E0E7 +:10461800000011B88000A3008000451C8000A2E6BD +:10462800000016A080038008800094C480037800EE +:1046380080037C84000011BE80013DB48003800C9F +:10464800000011BCD431202D4BC43048E8C3FFF022 +:10465800BAF81897199616910C90F8C2FFFD2FC456 +:104668003005E21000400988EC081800C4B107883A +:104678003029F2081800C1F10A9C4B08EA05002508 +:10468800029AF00500240E9BE8C5FFF46839F01F74 +:10469800002CC030301CC4E868086A0A049B0FACC0 +:1046A8005D18BAFCE216004030181BF9F009180032 +:1046B800C3C1C3D85800E00A1700F9BA0100E8F8E6 +:1046C800FFFC049B0FAC5D18BAFC30190788F20890 +:1046D8001800C0B10A9C4998EA050025029AF0051D +:1046E80000250E9B6A39C0A83049F2081800C0A1FD +:1046F800029A0E9B0A9CFAC9FFF9F01F0011C170BB +:10470800C1882FF52EC42EC3E0450024CAD148D84D +:1047180090093008F0091900C08448B81AD648BC76 +:104728001AD8F01F000B2FED302CC048304CC02891 +:10473800300C2FEDD8320000000011E080004560F9 +:10474800000016A28003789880038010800094C42B +:10475800D421202D4BD8910C30094BD8118AF20A5C +:104768001800E08000DAB08930085018E1B800007D +:10477800EE180001F5D8C201C020D303FE7824004A +:104788003019706BF7D9D001916B706BF7D9D0C124 +:10479800916B706BF7D9D081916B580AC020D50303 +:1047A8004AC7FACAFFFC6E0B4ABCF01F002C1896C9 +:1047B800C6E04AB8303A6E09910A401B4A98161961 +:1047C800B009E06A03FFF4091900E0880005E06910 +:1047D8000400B0094A064A37EC0B000B4A2C8E8AB3 +:1047E800F01F002230084A2BAC8849FCF01F00213A +:1047F800584CC2204A089088EDB80002C0C149F858 +:10480800201D49FC1AD8F01F001F8E8B496CF01F21 +:10481800001E2FED49889088EDB80002C0D1497874 +:10482800201D497C1AD8F01F00174988490C908B25 +:10483800F01F00152FED4879300893084899B20801 +:1048480048799308C46800000000152C0000151C66 +:10485800000014B0000014B880002D70000011B8DA +:10486800000011BE00000DB88002E736000009B84C +:104878008000464C000016A0800379D880037C8411 +:10488800800094C480013DB4000011BCF01F0024D6 +:104898004A489008EC081900C0A44A3890881AD8E9 +:1048A8004A284A3C1AD8F01F00232FED4A289009BD +:1048B8003008F0091900C0644A084A1C909BF01F90 +:1048C80000214A19300893084A09B20849C9B28830 +:1048D800E06B0120FE7C0D80F01F001DE1B8000098 +:1048E800EE180001F5D8C201C020D303FE782400D9 +:1048F8003019705BF7D9D001915B705BF7D9D0C1E3 +:10490800915B705BF7D9D081915B580AC020D503C1 +:10491800319CF01F00102FEDD8220000800044B811 +:10492800000016A2000014B4800379D88003802CFC +:10493800800094C4000016A6000014B0000014B84B +:1049480080013DB4000011B8000011BE8000A20033 +:104958008000A300D431207D4B6730054B664B782F +:104968001188EA081800EC081710EE0817004B4CDD +:104978001AD8F01F00344B481188EA081800EC07D1 +:1049880017104B2C50074B2230074B23F01F002DDC +:104998000E942FED4B01CBD86A005800E08000B28E +:1049A80080286009201D1AD95028F01F002C602A81 +:1049B8002FFD580AE60A1700E20A171040185C781B +:1049C80060491AD84A681ADC1ADA4A6A5809F40996 +:1049D8001700F00917104A4C1AD91AD01AD61AD744 +:1049E800F01F001860482F8D5808C431E0C9FFBC7B +:1049F800720A580AC0E0744B201D49CC1ADB1ADA37 +:104A08001AD850595048F01F000F2FCD40084019B0 +:104A18002FF82FC95848CED161585808C610704988 +:104A2800493C1AD91AD8F01F00072FEDC598000085 +:104A3800800380548003805C000016AB8003806094 +:104A4800800094C400007B078003807400007B080A +:104A580080037BE480037BDC800096A880037DC410 +:104A680080037DC880038088800380B8800380D05D +:104A780061E85808C350F11900127008201D1AD8AF +:104A8800507850395028F01F002761EA2FFDF53B78 +:104A9800001040291AD940281AD81ADC4A2C1ADBE7 +:104AA8001ADA50B8F01F0021FACAFFE00C9B5084B4 +:104AB800FB5400240E9CF01F001E2FBD40305050A8 +:104AC8001AD0FB1800145028F01F00162FFD4018AC +:104AD8001AD81AD01ADC497CF01F00142FCD0E9C6E +:104AE800F01F001549594968580CF2081710201D85 +:104AF800494C1AD8F01F000D493CF01F000C2FED4F +:104B08002FF62FC55826FE91FF492FF75847C0505A +:104B1800E40700353006C41BF01F000C2FADD83257 +:104B2800800096A8800380E8800094C4800021C893 +:104B380080038114800070788003812C8003812891 +:104B480080038130800381408000D680D431204D9D +:104B58004BE812911896169711895809C1A119881E +:104B6800B6881998EA18FFFFE818FF80B6C9B69802 +:104B7800B6A93EE8B6B83048A2084B589088EDB8B8 +:104B88000002E08100E7201D4B284B3C1AD8C228C0 +:104B9800FACCFFF4F01F0031403366105800C1E131 +:104BA8000D88AE880D98EA18FFFFE818FF80AEA0C0 +:104BB800AE9830093EE8AEC9AEB83048A2084A48B7 +:104BC8009088EDB80002E08100C5201D4A184A4CC3 +:104BD8001AD8F01F00242FEDCBC858B0F9B0020A3C +:104BE80030044A12C0786408F004032C2FF4F01F34 +:104BF800001F641849C51034CF736A0C3004F01FC5 +:104C0800001B8B14661B580BC460A36B301CF01F71 +:104C180000188B0CC3A1497CC1486608F002030B3D +:104C28006A080408501B5008F01F00134008910C34 +:104C3800401B6A082FF4F002030C580CC20148FC10 +:104C4800F01F0008C2880000000016AA000016A283 +:104C58008003783C8003816080018F048003817C1D +:104C6800800094C4000015208002E28C8002DC3CA5 +:104C7800800381988002E2A4800381C0344AF01F37 +:104C880000376A182FF88B18E8021502344C66189A +:104C98001034CC430D88AE880D98EA18FFFFE81849 +:104CA800FF803005AE98AEA030364AD20A984AD96D +:104CB8000E93640AEA0B1502F40B030AF537002079 +:104CC800F4070B08ECCCFFFF2FF7E60C000C5C5741 +:104CD800300AE6060B07C0886404E80B0304E80AF8 +:104CE80007042FFA18C40E9EEE0A1900CF630E9A15 +:104CF8002FFAF4060006928A5C56EDBA0002C1D17A +:104D0800640A202DF40B0304503950281A9C306A89 +:104D1800E8CBFFDFF01F001168CA1ADAE93A003859 +:104D28001ADA491A1AD7491C1AD41AD51ADAF01FEE +:104D380000102F8D400840192FF50035CBB53EE8FF +:104D4800E6060B08069730080C07AE982FF6A20661 +:104D5800302C2FCDD83200008002E7360000152015 +:104D6800000016A28003783C800381E4800094C48C +:104D780048781188580CC0215EFF5C68100C300818 +:104D8800F9390015F00918005F1C5EFC00001530A9 +:104D9800D4211897580CC2A04968F129000030089E +:104DA800F2CA0004F00900065836F5D8E9062FF8CB +:104DB800EE06002C791C163CC17148F89088EDB8B5 +:104DC8000001C0A148D81ADB48DC1AD61AD71AD86D +:104DD800F01F000C2FCDF9D6C00830082F06EE06BC +:104DE80000278F18D8225848CDE1E06C00FFD82260 +:104DF80000001530000016A2800382688003830437 +:104E0800800094C4D42118971695580CC2B04978DC +:104E1800F12900003008F2CB0004F00900065836EA +:104E2800F7D8E9062FF8EE06002A751A580AC03096 +:104E38000A3AC16148E89088EDB80001C0A148D895 +:104E48001AD548DC1AD61AD71AD8F01F000C2FCD5D +:104E5800EE060027F9D6C008EF450044D822584886 +:104E6800CDD1E06C00FFD82200001530000016A25A +:104E780080038CF080038304800094C4D4211897A5 +:104E8800580CC2A049E8F12A00003008F4CC00040C +:104E9800F00A00065836F9D8E9062FF8EE06002978 +:104EA80073195809C170580BC0F049689088EDB85B +:104EB8000001C0A149481AD9494C1AD61AD71AD89C +:104EC800F01F00132FCDEE06002748D8B0866F1CC0 +:104ED800D8225848CDE1580BC10048A8900930089D +:104EE800F0091900C0A448881AD748AC1AD8F01F8E +:104EF8000008300C2FEDD822D82A00000000153009 +:104F0800000016A280038CB880038304800094C438 +:104F180080038324D4214CB816951188189730063D +:104F2800EC081800E08000B6300BF01F004718941A +:104F38005807E0800097580C5F19EC0518005F08C7 +:104F4800F3E81008EC081800E080008C4BF8908813 +:104F5800EDB80002C3314BE811894BE89088EDB8F1 +:104F68000001C2C15C69EE09002871185808C041E7 +:104F7800109E1096C098EE09000AF53E0015F2CA78 +:104F8800FFF8EE0A03266F5A201D580AF40C170082 +:104F9800F5FC10045808F00B1700F1FB10041ADE9A +:104FA8001AD61ADC1ADA1ADB1AD84AB81AD74ABC3F +:104FB8001AD91AD8F01F002A2F6D5805C3D068488F +:104FC80058485F1958085F181268C3304A08118991 +:104FD8004A089088EDB80001C2C15C69EE09002852 +:104FE80071185808C04110951096C098EE09000A2B +:104FF800F5350015F2CAFFF8EE0A03266F5A201D90 +:10500800580AF40C1700F5FC10045808F00B1700A8 +:10501800F1FB10041AD51AD61ADC1ADA1ADB1AD8D8 +:1050280048D81AD748DC1AD91AD8F01F000D2F6DA6 +:10503800E93C0013D8226F58F13C0013D822000035 +:10504800000016AB80004E84000016A80000153042 +:10505800000016A28003828C80038348800094C4D9 +:1050680048D890093008F0091900C1345807EE08EB +:105078001700EE041700EFF810151AD848781AD45C +:10508800487C1AD71AD8F01F0007300C2FCDD82229 +:10509800D82A0000000016A88003828C8003838C25 +:1050A800800094C4D421580CC25049D8F12900007A +:1050B8003008F2CA0004F00900075837F5D8E907A4 +:1050C8002FF8F807002E7D1E163EC12149589088FA +:1050D800EDB80001C0A149481ADB1AD71ADC493CCF +:1050E8001AD8F01F00132FCD0E9C5C5CD8225848AC +:1050F800CE31490890093008F0091900C045E06C24 +:1051080000FFD8224888201D1ADB1ADC48AC1AD8C0 +:10511800F01F0007E06C00FF2FCDD82200001530EB +:10512800000016A6800382BC80038304800094C418 +:10513800000016A2800383C0D421580C5F18580BB6 +:105148005F1918961695F3E800081494C590580A44 +:10515800C5704AC89088EDB80001C0C114985C7841 +:10516800201D1AD84A881ADB4A8C1AD8F01F002842 +:105178002FCD4A889088EDB80001C0D14A28201D5B +:105188004A5C1AD8F01F0022089B0A9C5C7BF01F1F +:1051980000232FED300A5C74149C089BF01F00203C +:1051A8001897C0E149789008F8081900C29449682E +:1051B8001AD649CC1AD8F01F00162FEDC1C8089A84 +:1051C8000A9B781CF01F00180E9B6DECF01F00174F +:1051D8005C5CC12048B890093008F0091900C08407 +:1051E80048981AD6492C1AD8F01F00092FED0E9CA2 +:1051F800F01F0010DC2A0E9CF01F000EDA2ADC2AB1 +:10520800000016A280038CE4800383E8800094C425 +:10521800000016A080037C8480013DB48000D31870 +:10522800800383FC8002E7368001153880038428D8 +:105238008000D13CD421149518971696580CC0417B +:10524800E06C00F6D822F01F00163FF8E9DCC00831 +:10525800F0041800C041E06C00FFD822491890887B +:10526800EDB80001C0E16C48201D1AD848E85C651B +:1052780048EC1AD51AD61AD71AD8F01F000D2FAD38 +:105288006C4858485F0948B8B0893008EE040004F3 +:10529800E9680068F01F00088F7CD82A800050ACAD +:1052A800000016A280038D1080038450800094C4EF +:1052B80000007B0780009504D43118971695F01FDD +:1052C80000353FF8EDDCC008F0061800C5E0EE0632 +:1052D80000083009F1690015ECC8FFF8EE0803244E +:1052E8005804C5304AC89088EDB80001C0A14AB832 +:1052F800201D4ABC1AD41AD41AD8F01F002A2FCD60 +:10530800EB1800726EF91238F20817B00838F0047A +:1053180017804A589088EDB80001C051F01F00234B +:105328004A38910CECC8FFEA3019EE08032B089AAA +:105338000A9C5C7AF01F001FE7DCC008C19049A8EE +:105348009088EDB80001C0F16A48201DF3D3B00879 +:105358001AD91AD41AD849181AD5497C1AD8F01F5C +:1053680000112FAD0C073008EF680015C10830197F +:10537800ECC8FFF8EE060006ED690015EE080329F3 +:105388000819EE080929C038E06300FF069CD832E6 +:10539800800050AC000016A680038C7880038474CB +:1053A800800094C4000016A2800095040000153403 +:1053B800800109C08003848CD43116941493189703 +:1053C800580CC1014AB89008F8081900E08400D3C5 +:1053D8004A98201D4A9C1AD8F01F00293FFC2FED3F +:1053E800D832300BF01F0027189B18960E9CF01F20 +:1053F80000263FF8EBDCC008F0051800E08000BB91 +:105408004A289088EDB80001C0E1F1D3C010201DF2 +:105418001AD849981AD449EC1AD61AD71AD8F01FAC +:1054280000182FAD49B89088EDB80001C0D14928BF +:10543800201D499C1AD8F01F0012F7D3C010089CF1 +:10544800F01F00162FED49189088EDB80001C4B17F +:105458004938118948789088EDB80001C4415C69E1 +:10546800EE09002871185808C1C11092109EC21880 +:10547800000016A280038D20800384C0800094C49D +:1054880080004E84800050AC000016A6800384D8AB +:10549800000016A080037C8480013DB40000153014 +:1054A800EE09000AF5320015F2CAFFF8EE0A032EDB +:1054B8006F5A201D580AF40C1700F5FC1004580800 +:1054C800F00B1700F1FB10041AD21ADE1ADC1ADAF4 +:1054D8001ADB1AD84A881AD74A8C1AD91AD8F01F50 +:1054E80000282F6D5806C46058045F183009F2036D +:1054F80019005F1AF5E80008F2081800C3B0EAC8F6 +:10550800FFEAEE08032C580CC3506C4858785F0B20 +:1055180058485F0AF7EA100AF20A1800C0515828DA +:10552800C0305838C2715C73089B069AF01F00158A +:10553800EAC9FFEA300AEE090328F0030B0A4928F2 +:105548009088EDB80001C0A1EE0903281AD848A830 +:1055580048EC1AD8F01F000A2FED48DB0C9C2F8569 +:10556800EE050923F01F000B0C9B0E9CF01F000A90 +:10557800DA3ADC3A80038D2080038348800094C4A3 +:105588008002E736000016A6800384FC800055A040 +:105598008000D662800052C0D431149518971696B0 +:1055A800580CC041E06C00F6D832F01F001D3FF8DF +:1055B800E9DCC008F0041800C041E06C00FFD832F4 +:1055C8003009EE040008F16900683019F169001526 +:1055D80049489088EDB80001C171E8C8FFF8EE08A5 +:1055E8000323F01F00114918201D1AD37008F8086A +:1055F80001081AD848E85C7548EC1AD51AD61AD8A2 +:10560800F01F000D2FAD2F84EE04032C580CC06042 +:105618000C9B0E9CF01F0009300CD832800050AC57 +:10562800000016A2800095040000153480038D50F8 +:1056380080038508800094C4800052C0D421189744 +:10564800580CC1C0F01F000E18965BFCC060EF3B01 +:10565800000B5C5CF01F000B48B89088EDB80001A7 +:10566800C0A148A8201D48AC1AD61AD71AD8F01FCE +:1056780000092FCD30094888B089D82280002044FD +:1056880080002068000016A280038D3C80038538C6 +:10569800800094C400007B07D4314898189711897A +:1056A80048889088EDB80001C3015C69F8090028B2 +:1056B80071185808C08110951096C0D80000153090 +:1056C800000016A2F809000AF5350015F2CAFFF81D +:1056D800F80A03266F5A201D580AF40C1700F5FC27 +:1056E80010045808F00B1700F1FB10041AD51AD64D +:1056F8001ADC1ADA1ADB1AD84C281AD74C2C1AD901 +:105708001AD8F01F00422F6D0E9C3005F01F004084 +:10571800EEC6FFBC0A924BF34BA45C5CF01F003E44 +:105728006C08300B2FF5109C5808C1D0F01F003BB7 +:105738006C0C300BF01F003A6C0C300BF01F00396A +:105748006C0C300BF01F00388688EDB80001C0B132 +:10575800201D1AD26C0870484B4C1AD81AD4F01F66 +:10576800002B2FCD2FC65845CDC16F5C580CC1D02A +:10577800300BF01F002A300B6F5CF01F002D6F5CA0 +:10578800F01F002C4A385C5C9088EDB80001C0D14D +:10579800201D5C6C1ADC6F5870481AD849984A6CFE +:1057A8001AD8F01F001A2FCD6FEC580CC060F01FEC +:1057B80000236FECF01F00224A28F1260000495808 +:1057C8009088EDB80001C0E1ECC8FFEAEE080328B4 +:1057D800201D1AD848B81AD649BC1AD8F01F000B91 +:1057E8002FCD2EA6EE06032C580CC060F01F001714 +:1057F8003008EE0609280E9CF01F0014D83200006D +:1058080080038CC880038348800094C480002044AF +:10581800000016A280006F288000D6588000D6624B +:105828008000D65C8000D668800385608000D66ED4 +:105838008000E50480038588800111C88001122852 +:1058480000001530800385B08002E28CD4211897BF +:10585800580CE080007EF01F00413FF8EDDCC008E6 +:10586800F0061800C750EE0600287114089CF01FB7 +:10587800003CEBDCC008C0D10A9B089CF01F003933 +:105888000A9B089CF01F00380A9B089CF01F0037F1 +:105898004B789088EDB80001C0D1F1D5B0081AD87E +:1058A80068481AD84B381AD44B3C1AD8F01F003322 +:1058B8002FCD4AF43FF8F0051800C1718809300867 +:1058C800F0091900C0D4EE0600287118201D1AD856 +:1058D8004AB81AD64ABC1AD8F01F00282FCD0C0790 +:1058E8003018EF68006CC368EE0600083009F169EB +:1058F800006CEE0600280E9C711BF01F00238888A0 +:10590800EDB80001C0E1ECC8FFEAEE080328201D4D +:105918001AD849B81AD649DC1AD8F01F00182FCD62 +:105928002EA6EE06032C580CC060F01F0019300894 +:10593800EE06092848E89088EDB80001C0B149088A +:10594800201D494C1AD8F01F000D2FEDC038E06516 +:1059580000FF0A9CD8220000800050AC8000E504BB +:105968008000D6588000D6628000D65C000016A25F +:1059780080038D2C800385CC800094C480038CD850 +:10598800800385F880004D98800385B08002E28C02 +:1059980080038624D4211897580CC0E14BE890085E +:1059A800F8081900C7744BD8201D4BDC1AD8F01F13 +:1059B800003D2FEDD82278264BB85806C121F12595 +:1059C8000000F01F003A0E9CEF34000BF01F003867 +:1059D800089B5C5CF01F00370A07EF660068D82256 +:1059E80011894AD89088EDB80001C2C15C69F809EC +:1059F800002871185808C04110951096C098F809E9 +:105A0800000AF5350015F2CAFFF8F80A03266F5A9E +:105A1800201D580AF40C1700F5FC10045808F00B68 +:105A28001700F1FB10041AD51AD61ADC1ADA1ADB99 +:105A38001AD849A81AD74A0C1AD91AD8F01F001927 +:105A48002F6D4998F1260000ECC5FFF0EE05002502 +:105A58006A1C580CC1F078485898C1C05808C1A0B1 +:105A6800F01F001648C85C5C9088EDB80001C0C102 +:105A7800201D5C6C1ADC6A181AD84888490C1AD898 +:105A8800F01F00082FCDEE0600260E9C6D1BF01FA0 +:105A9800000DD822000016A2800382988003864455 +:105AA800800094C400001530800056A08000204477 +:105AB800800020688003834880010CEC8003865CAA +:105AC80080005854D4214B0818979009169630082E +:105AD800F0091900C0F44AD8F12800001AD8F1DBFF +:105AE800B0081AD84AA81ADC4AAC1AD8F01F002AFB +:105AF8002FCD4AA811893008F0091800C0414A8CF6 +:105B0800F01F00253FB8F0061800C3C15807C110A0 +:105B180049E830091188F2081800C0B53039F20890 +:105B28001800E08900075C68EE080028711BC0288F +:105B3800300B0E9CF01F001B49389088EDB800010F +:105B4800C1114928F1280000201DF0C9FFEAEE091B +:105B580003291AD91AD848E8493C1AD8F01F000E68 +:105B68002FCD48A6ED2800002EA8EE08032C580CCF +:105B7800C090F01F000EED28000030092EA8EE0896 +:105B88000929D822000016A200001530800382A837 +:105B980080038680800094C4000016AB800386B41E +:105BA80080004D98800385B08002E28CD42118973C +:105BB8001696580CC4E04A8890093008F009190074 +:105BC800C0C4F1DBB0081ADC1AD84A481ADC4A4CBF +:105BD8001AD8F01F00242FCD4A3811893008F0094F +:105BE8001800C0414A1CF01F001F3FB8F0061800FB +:105BF800C301499890093008F0091900C084497810 +:105C08001AD749BC1AD8F01F00172FED0E9CF01FA9 +:105C180000194998F126000048F89088EDB800016D +:105C2800C0E1ECC8FFEAEE080328201D1AD848B8DE +:105C38001AD6492C1AD8F01F000B2FCD2EA6EE0627 +:105C4800032C580CC060F01F000E3008EE0609281F +:105C5800D8220000000016A2800382D0800386C8E4 +:105C6800800094C4000016AB800386B4800386F8D5 +:105C78008000564400001530800385B08002E28C15 +:105C8800D4311897149678CC94CAF80A000A8FCAA7 +:105C98001093169512946E385808C1504A5CF01F3C +:105CA8000026EF18001A3509F0090D083008F00928 +:105CB8001900C0414A1CF01F0020EF08001A2FF8F5 +:105CC800EF58001A49E89088EDB80001C171202DFD +:105CD800304A1A9C089BF01F001BF01F001BEF386E +:105CE8000014F3D3C01050091ADC1AD849781AD610 +:105CF800497C1AD8F01F00102FAD0A9AEF3B001408 +:105D08000C9CF01F001409890998B168F1E9118801 +:105D180009A9F1E9108809BBEF3C0014F5D3C010BC +:105D2800104BF01F000D0C9CF01F000CD832000027 +:105D380080037FB4800094C4800384D4000016A23A +:105D48008002E736800096A88003827C800387184B +:105D580080007130800020088000D13CD431204D73 +:105D6800502C503BFAC4FFCC10916800681268238D +:105D780068386846129568545819E088000E4B58E0 +:105D880090093008F0091900E08402B0201D4B2862 +:105D98004B2C1AD8C2F85801C0C14AE89008E2084A +:105DA8001900E08402A3201D4AB84ADC1AD8C22888 +:105DB8005802C0C14A789008E4081900E0840296A5 +:105DC800201D4A584A7C1AD8C158501A500837CB57 +:105DD800301CF01F0025401A18974008C10149D807 +:105DE8009008F8081900E0840281201D49A849FCA0 +:105DF8001AD8F01F001F2FEDE08F0278402999383C +:105E0800B829300840395C729900B831992599DA77 +:105E180099E999F29943F9480050F9480044F9483A +:105E28000048F948004C5803E080008C3058F95875 +:105E38000074F01F0010EF4C00784865580CC1D171 +:105E48008A08F8081900E084020C1AD748A8C8582C +:105E5800000016A280038CA880038744800387640F +:105E6800800387848002DC3C800387A8800094C478 +:105E780080011200800382F88A88EDB80001C131E0 +:105E88006E08201D8EA51AD8F01F00366FE8500541 +:105E98001ADC1AD84B481AD84B484B5C1AD8F01F52 +:105EA80000352FAD6E258EAA6FEC5805C1210E9BCB +:105EB800F01F00315C5CC2504B089008EA081900DA +:105EC800E08401CF1AD74A984ADC1AD8E08F0175C6 +:105ED8004ACBF01F002DF5DCC008C0E04A789009D5 +:105EE8003008F0091900E08401BC201D5C6A49F8FB +:105EF8001ADA1AD7C499EF3C0014149BF01F002338 +:105F08006FEC0E9A4A2BF01F002349C8908CE21CB4 +:105F18000002E08001A76FE8F11900141AD970197E +:105F28001AD9F11900121AD970081AD848E81AD8DB +:105F380048E8499C1AD8F01F000F2FADE08F018F59 +:105F4800F01F00161892C2F148C89008F808190006 +:105F5800E08401871AD749281AD8492CC2D90000E9 +:105F6800800096A88003825C800382F88003880CF6 +:105F7800800094C480011320000016A280038824A6 +:105F88008003B409800112608000200880005C88CA +:105F9800800111F8800388848000E34080038C6CC2 +:105FA800800387E04B880E9BB083F01F0038EF63B7 +:105FB800006FEF63006CEF63006DEF63006E6E2897 +:105FC8004B355808E08100BD049B0E9CF01F003142 +:105FD800E7DCB0086EFCF01F0030E6C8FFEAEE0808 +:105FE800092C8A88EDB80001C0A14AC8201D1ADC16 +:105FF8004ABC1AD31AD8F01F002B2FCD2EA34A451E +:10600800EE0303285808C0B18A09F0091900E08492 +:1060180001281AD74A184A4C1AD8CCE84A3B049C9B +:10602800F01F00234A3B049CF01F00234A3B049CBA +:10603800F01F0023304A4A3B049CF01F00234A38D3 +:106048003009B0898A88EDB80001C0C1EE03032881 +:10605800201D1AD849181AD249DC1AD8F01F001185 +:106068002FCD4898118948A89088EDB80001C5310E +:106078005C69EE09002871185808C2B11093109590 +:10608800C3080000000015308000D658000016A292 +:1060980080004E0C8002E2A480038C6C800388A8E8 +:1060A800800094C4800388C480005BB48000D668F4 +:1060B800800069888000D65C800055A08000D66288 +:1060C800800067B48000D67200007B07800388F4E4 +:1060D800EE09000AF5330015F2CAFFF8EE0A0325A7 +:1060E800201D5808F00B1700F1FB10046F5A580ACE +:1060F800F40C1700F5FC10041AD31AD51ADC1ADAB6 +:106108001ADB1AD84B681AD74B6C1AD91AD8F01F51 +:1061180000362F6D049C4B598EAA0E9BF01F00343D +:106128005C5CE080009F4B3890093008F00919004A +:10613800E08400971AD74AA84AFC1AD8C3D88A8894 +:10614800EDB80001C0F1301B0E9CF01F002C6F58F9 +:106158001ADC1AD84A281AD74A9C1AD8F01F0022E3 +:106168002FCD8EAA4A7B049CF01F00275C5CC120BF +:106178004A0890093008F0091900C724201D5C6CF2 +:1061880049781ADC1AD71AD84A0CF01F00172FCDF5 +:10619800C678049CE06B00FFF01F001DEF4C005414 +:1061A8004945580CC0D18A08F8081900C5941AD76F +:1061B80048B8498C1AD8F01F000C2FEDC5188A88EA +:1061C8004959E21800021389C4505C69EE09002895 +:1061D80071185808C2211095109BC27880038C6CE6 +:1061E80080038348800094C48000523C8000E350C0 +:1061F800000016A28003891080004E84800389382D +:106208008003B4098000D7708003884C8000DC04C8 +:106218008003896400001530EE09000AF535001581 +:10622800F2CAFFF8EE0A032B7843201D5808F00A3B +:106238001700F1FA10041AD51ADB1AD31ADC1ADA85 +:106248001AD84AC81AD74ACC1AD91AD8F01F002B1C +:106258002F6D4ABB6F5CF01F002B300CC0283FFC31 +:106268004A95580CC0E08A093008F0091900C3A4FF +:106278004A68201D4A6C1AD8F01F00202FEDC32849 +:106288008A88EDB80001C2914A284A396E204A31FD +:106298005800F2001700F00017108E226E484A09C5 +:1062A8006EF35808F20117108E355818C0316FEC8C +:1062B800C058301B0E9CF01F001B49481AD05C7256 +:1062C8001AD15C751AD21AD31AD51ADC496C1AD7A6 +:1062D8001AD8F01F000A2F8D8907EF660014300CBA +:1062E800C0580E9CF01F00113FFC2FCDD832000083 +:1062F80080038C6C80038348800094C480006434DD +:106308008000D66E000016A280038CA880038988BE +:1063180080037BDC80037BE480037DC880037DC42D +:1063280080004E84800389A8800056A0D431203D87 +:10633800300730194B38E06504001892169191091E +:10634800E06007D00A9350070E964AF4C22826CC7C +:1063580058ACE08B001F4ADEFC0C032F3016C198A6 +:106368003006C178680CF01F002AE7DCB010C118AD +:1063780030185008C0E8680CF01F0025EBDCB0109E +:10638800C0883017C068680CF01F0021E1DCB0102D +:106398004A0A029B049CF01F00205BFCCD91580622 +:1063A800C161498870080438C0A4E208032BFACCFC +:1063B800FFF8F01F001A402B580BC0A14988201D78 +:1063C800498C1AD8F01F00182FEDC198300B502BAC +:1063D800F1D5C0100C99FAC5FFFC300650161AD535 +:1063E8001AD6402E5C731ADEF9D0C0101AD70C9A50 +:1063F8001AD31ADB0C9BF01F000D2FAD2FDDD83AF6 +:1064080000007AB800007AC0800382208002DC2C69 +:10641800800389E08002E278800098FC0000000C8C +:10642800800389EC800094C480005D64D4211897AF +:106438001696580CC041E06C00F6D8224C1890888B +:10644800EDB80001C0A14C08201D1ADB1ADC4BFC7A +:106458001AD8F01F003F2FCD4BA89088EDB8000147 +:10646800C0F16C481AD8ED1800241AD8ED18001C91 +:106478001AD84B584B7C1AD8F01F00352FCD0C9BDF +:106488000E9CF01F0035EDDCB008ECC8FFEAEE0802 +:1064980003285808C0804B18201D4B1C1AD8F01F21 +:1064A800002C2FED6EFCF01F002FECC8FFEAEE0861 +:1064B800092C4A489088EDB80001C0A14A28201D3F +:1064C8001ADC4A9C1AD61AD8F01F00212FCDECC826 +:1064D800FFEAEE0803285808C10149A99209F00902 +:1064E8001900C08449881AD74A0C1AD8F01F001816 +:1064F8002FEDE06C00FFD8220E9B2F06EE0600263B +:106508006C1CF01F001B49BB6C1CF01F001B49BB17 +:106518006C1CF01F001B6C1C304A49ABF01F001AA2 +:106528000E9CF01F001A583CE08B00075C5C300A98 +:106538000E9BF01F0017F01F00178F7CD82A000051 +:10654800000016A2800382E8800389F0800094C4CA +:1065580080038A1480004E0C80038A3880039DC013 +:106568008002E2A4800388A8800388C48000D658EB +:10657800800069888000D65C80005ACC8000D6688C +:106588008000659C8000D6728000204480002A002C +:1065980080009504D43118971695580CC041E06CCA +:1065A80000F6D832F01F00473FF8EDDCC008F006CF +:1065B8001800C041E06C00FFD832ECC8FFF8EE08C4 +:1065C80003285808EFD6E108F1F91868F7B901FF70 +:1065D800F1F91E68EE0600083049F1380068F20843 +:1065E8001800E088001E4B89920A3009F20A190047 +:1065F800C0A41AD84B581AD74B5C1AD51AD8F01F12 +:1066080000352FCD0C070A9C3006301BEF6600685A +:10661800F01F0031E06C00FBEF66006CD8325805C3 +:10662800C1504AE89088EDB80001C101EAF800A815 +:106638001AD8EAF8009C1AD8EB3800AD1AD84A38AC +:106648004A7C1AD8F01F00232FCDECC8FFF8EE08BB +:1066580003245804C1D049C89088EDB80001C1810D +:10666800EE060008301BF1330068F132006C0E9C16 +:10667800F01F001C4958201D1AD41AD21AD31AD751 +:106688001AD51ADC498C1AD8F01F00122F8D0A9BD4 +:106698000E9CF01F0016EE0600033002E738006C6F +:1066A800E4081800C7100A9CF01F00113FF8E9DC45 +:1066B800C008F0041800C1D13018E768006CC4A8FD +:1066C800800050AC000016A280038C8C80038A4C9A +:1066D800800094C48000E124000016A880038A7C0E +:1066E80080004E8480038AB0800052C08000E50498 +:1066F800EE060028E762006C711B0E9CF01F002359 +:106708004A389088EDB80001C0E1ECC8FFEAEE080D +:106718000328201D1AD849F81AD649FC1AD8F01FA0 +:10672800001F2FCDECC3FFEAEE03032C580CC0600A +:10673800F01F001B3008EE03092849589088EDB86F +:106748000001C0814938201D496C1AD8F01F001378 +:106758002FED48F89088EDB80001C1610E9C301B00 +:106768000C07EF37006CF01F001048A81AD65C64BD +:106778001AD41AD71ADC48DC1AD51AD8F01F000721 +:10678800300C2FADD832D83A80004D98000016A2B0 +:1067980080038C8C800385B0800094C48002E28CD6 +:1067A8008003862480004E8480038AF0D4311897B1 +:1067B8001695580CC041E06C00F6D832F01F003E28 +:1067C8003FF8EDDCC008F0061800C041E06C00FF9F +:1067D800D8324BA89088EDB80001C1A1EE06000898 +:1067E800F1340068F133006C4B58301B11820E9C59 +:1067F800F01F00344B48201D1AD21AD31AD41AD7C6 +:106808001AD51ADC4B1C1AD8F01F00312F8DEE0652 +:1068180000083009F13A006CF20A1800C060F1393A +:1068280000682FF9F1690068EE060008F134006885 +:106838003088F0041800E08800224A68900930087F +:10684800F0091900C104301B0E9CF01F001E49E816 +:10685800201D1AD41AD71ADC49FC1AD51AD8F01FE9 +:10686800001C2FAD30080C070A9CEF680068301B2D +:10687800F01F001AE06C00FBD83249181189300863 +:10688800F0091800C0500A9B0E9CF01F0015EE0678 +:1068980000043008E939006CF0091800C6100A9C99 +:1068A800F01F00103FF8F00C1800C1D13018E9684B +:1068B800006CC3E8800050AC000016A800007B07FD +:1068C80080004E848003824C80038B2C800094C40B +:1068D800000016A280038B6C8000E124800052C067 +:1068E8008000E5040E9CF01F001F49F89088EDB861 +:1068F8000001C0E1ECC8FFEAEE080328201D1AD801 +:1069080049A81AD649AC1AD8F01F001A2FCDECC4E2 +:10691800FFEAEE04032C580CC060F01F0017300883 +:10692800EE040928EE0600083009F169006C48E811 +:106938009088EDB80001C1410E9C301BEE060006A0 +:10694800ED37006CF01F000D48881AD71ADC48CCC8 +:106958001AD51AD8F01F0007300C2FCDD832D83AE4 +:1069680080005644000016A28003824C800385B044 +:10697800800094C48002E28C80004E8480038B984F +:10698800D4311294580A5F1830091497F204180089 +:106998005F0318961695E7E80008F2081800C55036 +:1069A800335CF01F00406CC98EC8F20800088DC81F +:1069B8006C385808C0614BC89088EDB80001C231E6 +:1069C8004BA89088EDB80001C0918EC81AD84B88A2 +:1069D8004B8C1AD8F01F00382FED4B889088EDB8F3 +:1069E8000001C0C14B28201D4B5C1AD8F01F003293 +:1069F8008ECB6E1CF01F00332FEDED08001A2FF818 +:106A0800ED58001A0A9AED3B00140E9CF01F002E58 +:106A18004A689088EDB80001C1218EC8201D1AD897 +:106A28001ADCED38001430091AD91AD71AD51AD831 +:106A380049F84A6C1AD8F01F00202F8D0E9CF01FC1 +:106A48000024335CF01F002358075F081063C160FF +:106A580049689088EDB80001C0C1201D1AD5ED38ED +:106A680000141AD8492849CC1AD8F01F00132FCD82 +:106A78000A9B0C9CF01F0019C1385804C11048B873 +:106A880090093008F0091900C0B44898201D5C64CA +:106A98001AD7493C1AD41AD8F01F00072FCDD83A74 +:106AA8008000A300000016A6000016A280038C98A0 +:106AB80080038BC8800094C4000016A080037C84E7 +:106AC80080013DB48000713080038BD88000D13CB8 +:106AD8008000A2E680038C108000585480038C3C10 +:106AE800D42148C8189716969088EDB80001C0A11F +:106AF8004898201D1ADB1ADC488C1AD8F01F0008A9 +:106B08002FCDF7D6C0100E9CF01F0006D82200002B +:106B1800000016A280038D0480038C50800094C46A +:106B28008000D984D4213007C1B80C9C0E9B2FF665 +:106B3800F01F000D1895C0F078485808C0C1F01F24 +:106B4800000B0A9CEB35000BF01F00090A9B5C5CEC +:106B5800F01F00085846CEA12FF75827C03030063E +:106B6800CE5BD82280002024800056A080002044DC +:106B780080002068D4214978F00C07085808C071B3 +:106B88004959F20C070AF00A1800C1F04929F20C19 +:106B9800070AF4081800C1904909F80C001CF0080D +:106BA8000017A567EE0C0027120748D99289EDB99E +:106BB8000004C0C11AD848B81ADA48BC1AD71AD87B +:106BC800F01F000A2FCDC02830070E9CD8220000E5 +:106BD8000000153C0000153800007B2C000016A6AC +:106BE8008003901080038DE0800094C4D421169710 +:106BF8001496F01F0005C0609828AC087808301C6F +:106C08008F08D82280006B7CD43149B849B91092DA +:106C1800F00C0708F20C070718961AD7498C1AD8EF +:106C2800EC060014F01F001749732FEDA36431E53B +:106C3800EE070018A568E8080008E60800087009CB +:106C48005809C0C090BA90AB1ADB1AD9702848FC12 +:106C58001AD81ADAF01F000B2FCD2FF7E406070811 +:106C68005C57EE051800F9B70000EE081800CE11C1 +:106C7800D8320000000015380000153C80038DF460 +:106C8800800094C400007B2C80038E0CD431201D1E +:106C98004A181896F00C07073005F80C001849F048 +:106CA800A36849F149F231E349F4EE070019A569EF +:106CB800F0090009E0090009720A580AC1D0923B9C +:106CC800922A8289F40B010CE2190010F8050005DC +:106CD8005C855809C1105C7B5C7AF3D5C010201D17 +:106CE800492C1AD91ADB1ADA1AD61AD25068F01FA8 +:106CF80000102FAD40082FF7E80607095C57EE0390 +:106D08001800F9B70000EE091800CD010A9C2FFD04 +:106D1800D83200000000153C00007B2C000016A6AD +:106D280080038DA00000153880038E28800094C44D +:106D3800D421F01F000B48B8EFDCB0109088EDB8F4 +:106D48000004C0A10E985C781AD84878487C1AD8F4 +:106D5800F01F00072FED0E9CD822000080006C94D5 +:106D6800000016A680038D7080038E4C800094C4AA +:106D7800D4214A181897169631D9F20C1800E088D1 +:106D8800000F90093008F0091900C33449B81ADC1B +:106D980049BC1AD8F01F001B2FEDD822F60B001A99 +:106DA8009088F80C0019E2180010A569F20A002969 +:106DB800495AF40903055808C0A04908201D1ADCDF +:106DC800492C1AD51AD8F01F000F2FCD0A9CF01F96 +:106DD80000103008EC060016EE07001748A9A56752 +:106DE800EE060026F20600068D288D08AC28AC3881 +:106DF800D8220000000016A280038DD080038E6880 +:106E0800800094C400007B2C80038E888002E28C72 +:106E1800D4314948F80C00121896F00C0707A36201 +:106E2800491331E44915EE070018A568E40800087D +:106E3800E60803085808C0500E9C0C9BF01F000C75 +:106E48002FF7EA0607085C57EE041800F9B70000A8 +:106E5800EE081800CE914839300CF2060B08D832EB +:106E68000000153C00007B2C0000153880006D7870 +:106E7800D4211897580CC0E14A189008F80819004E +:106E8800C3C44A08201D4A0C1AD8F01F00202FED51 +:106E9800D82249FAF40B070CF8CEFFFFF80C001CB7 +:106EA800A56CF40B0B0E3008F60B0019F809002935 +:106EB800498CF809000993289308B228B23831E9B7 +:106EC800F20E1800C031F40B0B0848D89088EDB8C2 +:106ED8000004C10148E8F00B07081AD848E8F00B8D +:106EE80007081AD848781AD748CC1AD8F01F0007CC +:106EF8002FCD0E9CF01F000AD8220000000016A219 +:106F080080038D8480038E98800094C40000153C13 +:106F180000007B2C0000153880038DE08002E28C95 +:106F2800D42118970E9CF01F0005C060780C0E9BAA +:106F3800F01F0003CF8BD82280006B7C80006E7816 +:106F4800D421496818971696149512949088EDB82C +:106F58000001C0C14928201D1AD91ADA1ADB1ADC27 +:106F6800490C1AD8F01F00102FAD301B0A9CF01FD7 +:106F7800000FC080301B0A9CF01F000C784858088E +:106F8800C0510C9B0E9CF01F000A5804C0500A9B6D +:106F9800089CF01F0008D822000016A280038D600C +:106FA80080038EAC800094C48000202480006AE8AE +:106FB80080006E78D4211897F01F00061898C02119 +:106FC800D8220E9A782C700990ABF01F0003DA2AA9 +:106FD80080006B7C80006F48D42116961494189515 +:106FE800F01F001E1897C021D8229838982B7809CE +:106FF800F6081900C2B2F5D8C0105804C050F20AF9 +:107008000708AC88C068F20A0709AC892FF8B838B5 +:1070180049389088EDB80004C0D10D881AD86E0898 +:107028001AD88EB81AD848F848FC1AD8F01F000F9A +:107038002FCD8E3B8E28F6081900C0710A9A5C7B0A +:107048006E2C6E09F01F000ADA2A0A9A5C7B782CEB +:10705800F01F0007D82A000080006B7C000016A6ED +:1070680080038D9080038ED4800094C480006F4884 +:10707800D4211897F01F00231896C021D8224A2837 +:107088009088EDB80004C0D178081AD898A81AD802 +:107098008CB81AD849D849EC1AD8F01F001E2FCD41 +:1070A8008C398C28F0091900C020DA2A49A8908860 +:1070B800EDB80004C1614998201DF0070709498807 +:1070C8001AD9F00707081AD8F20818005F191AD950 +:1070D8006C081AD848D8493C1AD8F01F000E2FADB2 +:1070E8006C2C6C090E9A8CABF01F000F48C8F00787 +:1070F800070948A8F0070708F00918005F1CD822FC +:1071080080006B7C000016A680038DBC80038EE88F +:10711800800094C4000016A2000015380000153C39 +:1071280080038F0080006F48D43118951697149308 +:10713800580CC0311894CBD8F60B001A4A58F00BEB +:107148000708F0080019A569F20A00294A2AF40973 +:1071580003095809C1604A1A940B300AF40B190044 +:10716800C0A4201D1AD849E81AD949EC1AD8F01F2A +:10717800001E2FCD49780E9BF007070CF01F001B4F +:10718800301B8ACCF01F001A18961894E0800092E1 +:10719800189B30098ACA0A9CF01F00168A485C8C22 +:1071A800F00C1900C2C048D9920A3009F20A190035 +:1071B800C0B45C781AD848A81AD648FC1AD51AD888 +:1071C800F01F00092FCD0C9C3004F01F000CC718CD +:1071D8000000153800007B2C000016A280039004E4 +:1071E80080038F2C800094C480006D788002DC3C82 +:1071F8008000CEC480038F548002E28C4AE9F207F3 +:10720800070AF4CBFFFFF40A001AA56AEE07001874 +:10721800F2070B0BF40800284A8AF4080008300A21 +:107228009123B02C9106B03A31E8F00B1800C03128 +:10723800F2070B0A4A084A29F0070708F207070964 +:10724800F0091800C1C149F9920A3009F20A190077 +:10725800C0A4201D1AD81AD849B849CC1AD8F01F8A +:10726800001C2FCD4948F00707095809F9BA01FF52 +:10727800F3DAE109F9B9001DF0070B0949189088FC +:10728800EDB80004C1618AC848DAF407070A201D6E +:107298000D891ADA488AF407070A1ADA1AD91AD8A5 +:1072A80048981AD648BC1AD71AD8F01F00092F8D4B +:1072B800089CD8320000153800007B2C0000153CD3 +:1072C800000016A28003900480038F90800094C46D +:1072D80080038FBCD431203D1690502A1895F01F9A +:1072E8000021301BE5DCB010F9D2C010F01F001EE1 +:1072F8001896C2C049D8EA050019F0050707A3691E +:10730800189431E849A1189349ABEE070016A56611 +:10731800F2060006F60600066C0B580BC0B0089C77 +:107328008CAA50095018F01F00148CAA4018140495 +:1073380040092FF7E205070A5C57EE081800F9B76D +:107348000000EE0A1800CE110696402A5800E1F611 +:107358001A00580AF5F21C000C9C2FDDD8320000E8 +:1073680080006C948002DC3C0000153C000015385D +:1073780000007B2C8002E736D431303818971693FA +:107388001494F00C1800E088001B48989009300805 +:10739800F0091900C0353005CA2848681ADC3005DC +:1073A8001AD8485CF01F00052FEDC998000016A2F6 +:1073B80080038DB080038FE0800094C4F80C001A1D +:1073C8004C88F00C0708F0080019A569F20A002992 +:1073D8004C5AF40903095809C1604C4A940B300A05 +:1073E800F40B1900C0A4201D1AD84C181AD94C1C2B +:1073F8001AD8F01F00412FCD4BA80E9BF007070CA1 +:10740800F01F003E0892301B5C72049CF01F003C89 +:1074180018961895C640049A069BF01F003AEE0786 +:1074280000184B03E6070702E4020012A562E4080D +:1074380000224AD83001F0020002300B8506A4244D +:10744800A4310E9CF01F0030852CE60707082FF8A2 +:10745800E6070B0831E9F2081800C031E6070B010E +:107468004A084AA9F0070708F2070709F0091800AF +:10747800C1C149E9920A3009F20A1900C0A4201DC5 +:107488001AD81AD849A84A2C1AD8F01F001B2FCD91 +:107498004948F00707095809F9BA01FFF3DAE10981 +:1074A800F9B9001DF0070B0949089088EDB80004E8 +:1074B800C1610D884959F2070709201D1AD9489951 +:1074C800F20707091AD91AD848985C74491C1AD4C3 +:1074D8001AD61AD71AD8F01F00082F8D0A9CD8324E +:1074E8000000153800007B2C000016A280038DB028 +:1074F80080038F2C800094C480006D788002DC3C6F +:107508008002E736800020240000153C80038F901D +:1075180080038FBCD401E06A05A0300B482CF01F13 +:107528000003D80200007B2C8002E8BCD421202D67 +:10753800FE782800501C500B3FF7109E301CC308E3 +:10754800300B7049EDB90001CFD17049EDB9000990 +:10755800CFD140195809C0B01396F2C5FFFE138960 +:107568005015EDE91089F7D9D010C038F7D7D010E9 +:10757800913B7049EDB90000CFD17C2B40095C8B61 +:107588005809C080B29BF7DBC108B28B40092FE9CC +:107598005009F80A1900E0880006202A5C8A580A6F +:1075A800CD01FE78280070482FEDD822580CC06015 +:1075B800FE782800300A7019C058FE78280030FA82 +:1075C8007019F3DAD20491195EFC202D3008E069B5 +:1075D80013885018F8090249C058401A2FF82FFA92 +:1075E800501A1238CFB12FED5EFCD703D401303CCE +:1075F800F01F0005C060303CF01F0004F01F0004BD +:10760800D402D6038000A3708000A38880014014B0 +:10761800D401580CC060300B303CF01F0004D80275 +:10762800303CF01F0003D8028000A31A8000A35C3E +:10763800D401202D3008B888303CF01F0022303C9F +:10764800F01F0021309CF01F001F307CF01F001D30 +:107658003008501840192FF950192FF8E04861A840 +:10766800CFA1309CF01F00193008501840192FF98D +:1076780050192FF8E05886A0CFA1307CF01F0013D6 +:10768800340B300A492CF01F0013FE782800302AEA +:1076980070C9F3DAD108308A91C970C9F3DAD08495 +:1076A800301A91C970C9F3DAD06191C970C9F3DA97 +:1076B800D001303C91C9F01F00082FEDD80A000016 +:1076C8008000A2A88000A2BE8000A2E6800075F417 +:1076D8008000A3A08000A388D42120AD4C68E3B823 +:1076E8000001D5533017FE6810007109F3D7D20294 +:1076F800303AF1490040E06B1B00EA1B00B7FE7C02 +:107708000C00F01F003E310A201D30081ADA0E99CD +:10771800109B308AFE7C0C00F01F003930080E994F +:107728000E9A109BFE7C0C00F01F0036300BFE7C7E +:107738000C00F01F0035FE7C0C00F01F0034300CEC +:107748001ADC18981899189A1ADC189BFE7C0C00F9 +:10775800F01F002F0E9CF01F002F302BFE7C0C001A +:10776800F01F002DF01F002DD503304AFAC7FFD0B7 +:107778004ABB0E9CF01F002B302B0E9CF01F002ADA +:10778800FAC8FFDC4A99722C109B912CE06AF980A8 +:10779800EA1A0337F2E40000FE7C1800F0E5000066 +:1077A800F01F0023308A4A3B0E9CF01F001E310A4E +:1077B800FAC6FFEC300B0C9CF01F001F3018304B42 +:1077C800FB68002149DCF01F00180C9BFE7C280098 +:1077D800F01F001B3009FE7C2800129B129AF01F34 +:1077E80000190E9C0E96304BF01F000F2FCDFAC7D4 +:1077F800FFD8C2D8800376008000A5088000A4B016 +:107808008000A4CE8000A4E68000A4F48000A470C8 +:107818008000A2228000A4FE8000A3D080039038BC +:107828008002E7368000A2808003901C8000AA1C9A +:10783800800390308002E8BC800390288000A66214 +:107848008000A69C0D8C2FE6F01F000F0E36CFB1DE +:10785800FACBFFFCFE7C2800F01F000C3009FE7CF0 +:107868002800129A129BF01F000AFE7C2800F01FC5 +:107878000009302CF01F0008FE7C2800F01F0005CE +:107888002F6DD8228000A2BE8000A6628000A69C30 +:107898008000A7EC8000A2E6D42130A81896F00C4E +:1078A8001800C0C1E067271020175BF7C13030DB34 +:1078B800FE7C1800F01F0008CF81E0672710201712 +:1078C8005BF7C0800C9BFE7C1800F01F0003CF8183 +:1078D800D822DC2A8000A9AED401178A17B91798D4 +:1078E800B168F1EA118817AAF1EA1088F3E81008DC +:1078F8001AD81ADC483CF01F00042FEDD80200000B +:1079080080039064800094C4D421202D4AB811D9F2 +:10791800BAD97009500911C8BAC81A961895169498 +:10792800581CE08900064A6CF01F0026C448761CE3 +:10793800F01F0025201DEFDCC0084A4C1AD7F01FA5 +:1079480000212FED5825C2A0682CF01F001F201D14 +:10795800EDDCC00849EC1AD6F01F001A30182FEDDC +:10796800F0061800C111305A49AB0E9CF01F001ADE +:1079780030AA49AB0E9CF01F00180E9C308A498B28 +:10798800F01F0015C1883028F0061800C141300AE0 +:107998000E9C149BF01F0013C0E83038F007180045 +:1079A800E08B000A300B0E9CF01F000F1A9B306A08 +:1079B800F01F000E2FEDD82A800396B88003909808 +:1079C800800094C48002DC2C800390C4800390D093 +:1079D800800390E480007380800390EC800390F82B +:1079E800800072DC8000202480005140D421189649 +:1079F8001695582CC45176174B3B0E9CF01F00333C +:107A08001896C1014B2CF01F00334B38FE798000CB +:107A1800B0094B28B0064B28B0064B28B006E08FBB +:107A280001C44B1B0E9CF01F0029C1D14AA89088A5 +:107A3800201D4AEC1AD8F01F00274A8890884ACCA3 +:107A48005008F01F00244A6890884AAC5008F01F7C +:107A580000214A4890884A8C5008F01F001E2FEDDC +:107A6800E08F01A30E9C4A5BF01F0018C0C14A4C6E +:107A7800F01F0018E06900FF4978E08F0195582C45 +:107A8800E089000749FCF01F0013E08F018E762C77 +:107A9800F01F001D18975836E08101876A1649BB08 +:107AA8000C9CF01F000AC53148B85807E08A000846 +:107AB8009009A1A9B0095817C2A1C3089009A1C982 +:107AC800B009C2C8800391048002ECC88003910801 +:107AD800800094C4000016A2000016A6000016A09C +:107AE800000016A8800391148003911C8003913430 +:107AF8008003914C800391648003E18C8003917C26 +:107B0800800391888002DC2C800392144B799208C0 +:107B1800A1A8B2085827C071C0D84B499208A1C87B +:107B2800B208C0884B299208A1A8B2085837C0717A +:107B3800C0A84AF99208A1C8B208C0584AD9920800 +:107B4800A1A8CAC84AB99208A1C8CA884AAB0C9C5D +:107B5800F01F002AC2F14AA85807E08A00089009D5 +:107B6800A3A9B0095817C061C0C89009A3C9B00932 +:107B7800C08849E99208A3A8B2085827C071C0D89C +:107B880049A99208A3C8B208C08849999208A3A82D +:107B9800B2085837C071C0A849599208A3C8B2089A +:107BA800C05849499208A3A8C79849299208A3C868 +:107BB800C758494B0C9CF01F0011C3E149085807EE +:107BC800E08A00089009A1B9B0095817C061C1B886 +:107BD8009009A1D9B009C17848499208A1B8B2085A +:107BE8005827C161C1C80000000016A6000016A0F1 +:107BF800000016A88003921C8002ECC8000016A2A0 +:107C0800800392204B699208A1D8B208C0884B59CA +:107C18009208A1B8B2085837C071C0A84B19920889 +:107C2800A1D8B208C0584B099208A1B8C3784AE94C +:107C38009208A1D8C3384ADB0C9CF01F002DC30161 +:107C48004AC85807E08A00089009A3B9B00958172C +:107C5800C061C0C89009A3D9B009C0884A09920870 +:107C6800A3B8B2085827C071C0D849D99208A3D878 +:107C7800B208C08849B99208A3B8B2085837C07189 +:107C8800C0A849899208A3D8B208C058496992087F +:107C9800A3B8C04849499208A3D8B208C858496B44 +:107CA8000C9CF01F0013C3D149285807E08A00082C +:107CB8009009A5A9B0095817C061C0C89009A5C9FD +:107CC800B009C08848699208A5A8B2085827C151C8 +:107CD800C1B848399208A5C8B208C168000016A6FC +:107CE800000016A0000016A8800392248002ECC8A9 +:107CF800000016A2800392284AC99208A5A8B208D3 +:107D08005837C071C0A84A999208A5C8B208C05887 +:107D18004A799208A5A8CC2B4A599208A5C8CBEB5A +:107D28000C9C4A4BF01F0024C3F14A485807E08ACC +:107D3800000B9009EA19FFFFE8198000B0095817ED +:107D4800C071C1089009F3D9C00FB009C0B849C9BA +:107D58009208EA18FFFFE8188000B2085827C08187 +:107D6800C11849789009F3D9C00FB009C0B848F9CB +:107D78009208EA18FFFFE8188000B2085837C08157 +:107D8800C0E848A89009F3D9C00FB009C08848894D +:107D98009208EA18FFFFE8188000C80B48489009C5 +:107DA800F3D9C00FB009D82A000016A0000016A801 +:107DB800800392308002ECC8000016A2000016A6CC +:107DC800D421582CC2717617495B0E9CF01F001500 +:107DD800C1211897494CF01F0015201D494C1AD78E +:107DE800F01F00120E9C2FF7F01F00122FED5847BE +:107DF800CF51C1380E9CF01F0010201DEFDCC008C9 +:107E080048BC1AD7F01F00090E9CF01F000A2FED7E +:107E1800C04848ACF01F0005D82A000080039238FB +:107E28008002ECC88003923C800094C4800390C414 +:107E380080006C108002DC2C80039250D421207DBD +:107E4800306A18951696FAC7FFEAE06B00FF0E9C99 +:107E5800F01F00385825C1B16C1C4B7BF01F003750 +:107E68001896C4B14B6CF01F00370E9B0C9CF01F8A +:107E780000360E9B301CF01F00340E9B0A9CF01F2E +:107E880000320E9B303CF01F0030C5085825E08AB0 +:107E980000356C1CF01F002D6C2B1897500B169C8E +:107EA800F01F002B58DC5F04585C5F08E9E81008F5 +:107EB800ECC5FFFC109418963008FACCFFF8400B7C +:107EC800F0041800C0500C9AF01F0022C238F01FAE +:107ED800002258375F98580C5F091896F3E8100885 +:107EE800E8081800C0A15807C085C0916A08118920 +:107EF8003308F0091800C030498CC098585C5F18E6 +:107F080058DC5F19F3E80008C050495CF01F000D09 +:107F1800C0D85C570C9BFAC9FFEAFACAFFF80E9C56 +:107F2800F01F00100E9CF01F00102F9DD82A000093 +:107F38008002E8BC800392808002ECC880039288AB +:107F4800800094C48001921C8002DC2C8002EDD059 +:107F58008002EE0C800098688003929C800392DC7B +:107F68008001927080019258D421204D4ABC149609 +:107F7800F01F002B1A9CF01F002B581CC0504AAC55 +:107F8800F01F0027C0A81A9CF01F0028201D1ADC2B +:107F98004A7CF01F00232FEDF01F002618974A6C2B +:107FA800F01F001F5807C0514A4CF01F001DC04861 +:107FB8000E9CF01F00234A376E0CF01F0023C1F0FF +:107FC8006E087018201D1AD8F01F0020500C4A0C9B +:107FD800F01F00136E0870285008F01F001C500C8A +:107FE80049CCF01F000F6E0870385008F01F0017BA +:107FF800500C499CF01F000A2FEDC048497CF01F27 +:108008000008497CF01F00060DC93018F009180057 +:10801800C2A1494CC298000080039314800094C404 +:10802800800191288003932C8000967080039348E8 +:108038008001997C80039358800393A880009784DB +:10804800000080D08000CAE4800096A8800393686E +:10805800800393788003938880039398800393B078 +:10806800800393B8493CF01F0014FACCFFF4300B9E +:10807800F01F0012301B4037FACCFFF8F01F000F3A +:10808800201D1AD750574047F01F000D500C48DCF0 +:10809800F01F000950075047F01F0009500C48AC6A +:1080A800F01F0005F01F0009300C2FED2FCDD8224E +:1080B800800393C4800094C48000C1EC800096A81B +:1080C800800393D080039DC08000495CD421202D7B +:1080D8001695584CE089000649ECF01F001FC3684C +:1080E800FACCFFFC761BF01F001D6A2C4014F01F11 +:1080F800001C18976A3CF01F001A18966A4CF01F6B +:108108000018501418951ADC496C1AD61AD71AD4C4 +:10811800F01F0011089CF3D5C008F5D6C0080E9BC7 +:108128005C7BF01F00112FCD5BFCC10148F8900962 +:108138003008F0091900C0A448D81AD548DC1AD666 +:108148001AD71AD8F01F00042FCD2FEDD82A000017 +:10815800800393DC800094C4800098FC8002DC2CAF +:108168008003941480003958000016A280039054AC +:1081780080039448D4211695583CE089000649CCE0 +:10818800F01F001CC338761CF01F001B18976A2CC0 +:10819800F01F001918966A3CF01F00174978201D37 +:1081A80018941AD649651AD7580CF0051710495C67 +:1081B8001AD5F01F0010089AF7D6C0085C5A0E9C12 +:1081C8005C7CF01F00112FCD5BFCC10148F89009C1 +:1081D8003008F0091900C0A448D81AD648DC1AD7C4 +:1081E8001AD51AD8F01F00032FCDD82A80039488F7 +:1081F800800094C48002DC2C80037DC480037DC889 +:10820800800394B880003C50000016A28003969C1E +:10821800800394DCD421206D1697582CE089000641 +:108228004A4CF01F0025C438761CF01F00246E2B22 +:10823800F8C700011A9CF01F0022304A1A9BFAC6A0 +:10824800FFEC0C9CF01F001F201D40681AD8F01F7F +:10825800001E1ADC49DC1AD7F01F00170C9B0E9C75 +:108268005C5CF01F001BFACCFFE0300BF01F00191C +:10827800301B4087FACCFFE4F01F00162FDD505763 +:108288001AD74056F01F00101AD71ADC492C50870D +:10829800F01F00092FDD50461AD6F01F000B1AD622 +:1082A8001ADC48EC5076F01F00042FCD2FADD82AE9 +:1082B80080039510800094C48002DC2C800098FC18 +:1082C8008002E736800096A8800395388000C19C1C +:1082D8008000C1EC8003955480039564D421FACDC5 +:1082E8000108581CE0890006491CF01F0012C1D87B +:1082F800F6C9FFFCF8CA0001FAC7FFFCE06B0100F1 +:108308000E9CF01F000DC110300948CAFACBFEFCC4 +:108318000E9CF01F000B5C5CC0814418489C1AD866 +:108328001AD7F01F00042FED2BEDD82A800395747F +:10833800800094C480009710800078E08000C4C05A +:1083480080039064D43121AD18961695582CE08995 +:1083580000064A1CF01F0021C3B8FAC7FFFC344AC4 +:10836800300B0E9CF01F001E306AE06B00FFFACC49 +:10837800FFDBF01F001BFAC4FFB8EAC9FFFCECCA18 +:108388000002320B089CF01F00171893C210189AAD +:10839800089B0E9CF01F00143088FB6300242016F5 +:1083A800EA060326FB68003C0C9CF01F00100C9B9F +:1083B800189A30180E9C3089F01F000D581CC08088 +:1083C80048C8201D48CC1AD8F01F00042FED2E6D88 +:1083D800D83A000080039590800094C48002E8BCDD +:1083E800800097108002E7368002EDD080019084EB +:1083F80080039048800395B4D42121AD1696582C5B +:10840800C05049BCF01F001BC308FAC7FFFC344A20 +:10841800300B0E9CF01F0018306AE06B00FFFACC9E +:10842800FFDBF01F0015ECC9FFFC301AFAC6FFB8D5 +:10843800320B0C9CF01F00111895C170189A0C9BF8 +:108448000E9CF01F000F3088FB6500240E9CFB6813 +:10845800003CF01F000C581CC08048B8201D48BCC8 +:108468001AD8F01F00042FED2E6DD82A800395D45A +:10847800800094C48002E8BC800097108002E73630 +:1084880080018FF8800396AC800395ECD431204DA1 +:108498001493189516947406582CC091761C304A7B +:1084A8004A7BF01F0028C0513018C458584CC0806F +:1084B8004A5CF01F00264A6CF01F0024C3D8761BC4 +:1084C8001A9CF01F00240A9A1A9BFACCFFF4F01F9A +:1084D80000224A289088EDB80002C0B1201D40480B +:1084E8001AD849F81AD649FC1AD8F01F00182FCD07 +:1084F800FAC7FFF40C9C0E9BF01F001B682B1A9CFC +:10850800F01F0014304A1A9B0E9CF01F00130E9B9C +:108518000C9CF01F0016683B1A9CF01F000E304A96 +:108528001A9B0E9CF01F000C0E9B0C9CF01F001059 +:108538001A953008A6C82FCDD83A0000800392803B +:108548008002EDE680039610800094C48003964074 +:10855800800098FC8002E736000016A28003903C59 +:10856800800396688000CBC88000CA928000CA74D5 +:10857800D421212D581CE0890006491CF01F001148 +:10858800C1C8F6C9FFFCF8CA0001FAC7FFD8320B08 +:108598000E9CF01F000D1896C1000E9B189AFAC782 +:1085A800FFF90E9CF01F0009300BFB6600270E9C9C +:1085B800F01F0007F01F00072EEDD82A80039684CD +:1085C800800094C4800097108002E736800099A844 +:1085D8008000998CD401F01F0003F01F0003D80A13 +:1085E80080019EF880009820D40148BE1898300970 +:1085F8007C0C580CC0A1F2090019487EFC0900291E +:10860800932A9318930BD8022FF92F4E58F9CF11AC +:10861800DC0A000000001544D401484CF01F000497 +:1086280030194848B089D802800396C0800094C4A5 +:10863800000015F8D4314B68169570065806C050DE +:108648005816E08100BAC938580CE08000B5F01F10 +:1086580000314B18910C1897580CE08000AD19891F +:10866800EC091800C0415805C460C4284AB44AC37C +:108678008906C188EC060018E60800287012049CD8 +:108688005802C0E0F01F002718910E9CF01F00252B +:108698000E9BE20C0D4A049CF01F0023C3102FF61A +:1086A8008906680649D258E6FE98FFE658F6C28160 +:1086B8005805C210049749DCF01F001D3008498690 +:1086C8008508C128F0080018EC0800287009580926 +:1086D800C0807018201D497C1AD8F01F00152FED96 +:1086E8006E082FF88F086E0858E8FE98FFED492CA1 +:1086F800F01F000F4888700CF01F0010C5C80E9CB2 +:1087080048FB49074906F01F0011C2C8000016407F +:108718008002ED8400001644000015400000154456 +:108728008002EDD08002EDE6800396C8800094C4F4 +:10873800800396E0800396C48002E28C80039364F1 +:10874800000015FC000016008002EEB86E08EC0868 +:10875800092C2FF88F085908C070498B300CF01F6E +:108768000018580CCF41301949689109496949786E +:108778007008F0080018F20800284959702A720C8D +:108788007008494B5D18581CC1705805C040492CE9 +:10879800F01F001248E83007340A0E9B910748DCA6 +:1087A800F01F000F48F8700CF01F000F4858301CDD +:1087B8009107D832D83ADA3A800393648002EEB847 +:1087C800000016400000154400001540000015FC8C +:1087D80000001600800396C4800094C48002E8BCA0 +:1087E800000016448002E28CD421202D1897FACB81 +:1087F800FFFCFE7C1800F01F0012583CC080584C4B +:10880800C081E0690100FE7818009109301CC15848 +:10881800401C58DCC03130ACC0B8588CC081F01F47 +:108828000009320CF01F00071BFCC0285C5CF01F1D +:1088380000054018300CAE882FEDD8228000A9C260 +:10884800800078A0D431202D30A1FAC0FFF930D2B1 +:10885800308349B749B630043005009CF01F001A30 +:10886800C2A11BF8E20818005F0AE40818005F09B3 +:10887800124AF80A1800C0904929491A1298740B2C +:10888800950CF20B0B0CC188E6081800C0916E0815 +:108898002018F00C17708F0CEC0C0B04C0686E09D4 +:1088A800EC090B082FF98F096E08E0480050CD61DC +:1088B8008F05CD4B3008109C2FEDD832000016489C +:1088C8000000164C800087F0D401F01F0004301B14 +:1088D800F01F0003D80200008000884C8000863C0E +:1088E800D4314974169714951293580BC0B1680C7B +:1088F800580CC0311896C2181696F01F0012890736 +:10890800C1C868085808C0C1E06C0200F01F000E1A +:10891800890CC061189648DCF01F000DC0E80A9C5D +:10892800E066020048650C33E60617806A0B0C9A6D +:10893800F01F00086A088F080C9CD8320000169CAB +:108948008002E28C8002E2A4800396E8800094C44E +:10895800800090B4D401F01F0002D80A800091086A +:10896800D4213008FAC4FFEC19C9F0091800F9B885 +:108978000100E9F81A01E9F81A02E9F81A004A1898 +:108988001AD84A1818971AD8089B3008E8C9FFF867 +:10899800E8CAFFFC780CF01F001D8F0C2FED580C57 +:1089A800C021DC2AF01F001A300949AA301BE06CEC +:1089B8001388F01F00193009498A301BE06C00FA4F +:1089C800F01F00153009496A301BE06C01F4F01FF4 +:1089D80000123009493A301BE06CEA60F01F000EC3 +:1089E8003009491A301BE06C03E8F01F000B30090E +:1089F80048EA301BE06C03E8F01F0007DA2A0000A1 +:108A08008001365C80013C948000CCA88000CAB00C +:108A180080008A708000956C80008A6480008A5883 +:108A280080008A4C80008A4080008A34D401F01F7C +:108A38000002D8028000C664D401F01F0002D802E8 +:108A480080012984D401F01F0002D8028000B8B048 +:108A5800D401F01F0002D8028000C074D401F01FB6 +:108A68000002D8028000E68CD401F01F0002D80270 +:108A78008001326430194828B0895EFC000016AACB +:108A8800D401319CF01F0003319CF01F0003D80271 +:108A98008000A2D28000A2E6D421204D3FF819C957 +:108AA8001897F0091800F9B80001EFF80E0430081B +:108AB800201D1AD850581AD81AD850685058F01F84 +:108AC800001C49CB6E0CF01F001C0E9949BA49CB0B +:108AD80049CCF01F001D2FCD581CC08049B8201D5F +:108AE80049BC1AD8F01F001B2FEDF01F001BF01F08 +:108AF800001B0E9CF01F001AC0F049A8900930080E +:108B0800F0091900C0F44988201D498C1AD8F01FB3 +:108B180000112FEDC07830194958319CB089F01FE9 +:108B280000153018EF6800082FCDD822800089681A +:108B380080008C5C8000CAEE80008B7C80008BDC1F +:108B480080008A7C80009A188003973C80039DC02F +:108B5800800094C48000998C80019EF880002A9837 +:108B6800000016A28003972880039758000016A4D7 +:108B78008000A300D4211897333CF01F000F300663 +:108B88000FD8EC081800C0C048CCF01F000D6E0CC0 +:108B9800F01F000C6E0CF01F000CAED6C07848BC5D +:108BA800F01F00076E0CF01F000A3FFCF01F0009C1 +:108BB800D82200008000A2E680039774800094C445 +:108BC8008000B1D88000AE50800397908000CABC66 +:108BD80080002E60D42116971896333CF01F00149D +:108BE8000C9CF01F0014201D1ADC493CF01F0013D8 +:108BF80030182FED0FC6F0061800C121490CF01FE0 +:108C0800000F6E0CF01F000F48F849095C5CF20C6D +:108C18001700F00C1710F01F0009AED6C0486E0CF4 +:108C2800F01F000BF01F000BD82200008000A300EB +:108C3800800096E48003979C800094C4800397B8D2 +:108C48008000B950800397D080037FC08000CB8814 +:108C58008000C690D42149471896F01F0014189533 +:108C6800C110301CF01F00126C18201D1AD8F01FFC +:108C78000011500C490CF01F001130182FEDAE8870 +:108C8800D822AE8CF01F000E48E89008EA081900B8 +:108C9800C08448D8201D48DC1AD8F01F00082FEDE2 +:108CA800D8220000000016AB8000CAE480002E60C5 +:108CB800800096A8800397D8800094C480006B2C0D +:108CC800000016A28003995C800397E8D4211897C6 +:108CD800F01F0027300A4A7B4A7CF01F0028300A20 +:108CE8004A7B4A8CF01F00254A7B300A4A7CF01FD9 +:108CF80000230E9A4A6B4A7CF01F0020300A4A6B08 +:108D08004A6CF01F001E4A6B300A4A6CF01F001BA9 +:108D18000E9A4A5B4A5CF01F0019300A4A4B4A5CBB +:108D2800F01F0016300A4A4B4A4CF01F0014300A54 +:108D38004A3B4A4CF01F0011300A4A3B4A3CF01F9C +:108D4800000F300A4A2B4A3CF01F000C300A4A2B0D +:108D58004A2CF01F000A300A4A1B4A2CF01F000751 +:108D6800300A4A1B4A1CF01F0005D82280008620C2 +:108D7800800085DC80039804800085F08000857879 +:108D88008003980C80007E448003981480007F70D4 +:108D98008003981C800079F48003982480007DC8A3 +:108DA8008003982C80008494800398348000633476 +:108DB800800398408000834C80039848800084009A +:108DC80080039850800082E4800398588000821CB9 +:108DD800800398608000817C80039868800080D43C +:108DE800800398748000791080039880D4211897A4 +:108DF800F01F000BF01F000BF01F000BF01F000B03 +:108E08006E0CF01F000B48B811893008F0091800E3 +:108E1800C0406E0CF01F0008D82200008000951496 +:108E2800800088D080009504800193A080013BBC1D +:108E3800000016A480004758D421202D3029EE7850 +:108E48000000F1D9D1A23019F1D9D0033007501858 +:108E58000E9B5007337CF01F000F1A9BFE7C3800D6 +:108E6800F01F000D0E9BE06A01A4FE7C3800F01F85 +:108E7800000B0E9BE06A0348FE7C3800F01F0008D8 +:108E88000E9BFE7C3800F01F00072FEDD822000053 +:108E98008000A2308000A8388000A8F08000A926B1 +:108EA8008000A8D4D401333CF01F0009334CF01FD4 +:108EB8000008335CF01F0006333CF01F0006334CFB +:108EC800F01F0004335CF01F0003D8028000A2A842 +:108ED8008000A2E6D421202DF01F0034F01F0034BA +:108EE800F01F0034F01F0034E06C1B00EA1C00B7D0 +:108EF800F01F00324B28201D4B2C1AD8F01F0032CF +:108F080030CB301CF01F00312FED1897580CC08162 +:108F18004AF8201D4AFC1AD8F01F002B2FED344BBD +:108F2800301CF01F002A8F0CC0814A98201D4A9CD3 +:108F38001AD8F01F00252FED3FF80E9CAEC8F01F81 +:108F48000026300B169CF01F0025F01F0025F01F8F +:108F58000025C0804A48201D49EC1AD8F01F001A85 +:108F68002FEDFACAFFFC0E9B4A0CF01F0021581C7B +:108F7800C0C1401A49FB0E9CF01F001F581CC0516D +:108F88000E9CF01F001ECFDB58CCC04058DCC061DF +:108F9800C03849BCC04849BCC02849BCF01F000AB9 +:108FA800F01F001ACFEB000080008A88800076E06E +:108FB80080008EAC80008E408000AAE88003970C69 +:108FC80080039888800094C48002DC3C800398A8C1 +:108FD80080039DC080008CD4800095C88000C8E4C0 +:108FE8008000895C800398B8800088E880013E880A +:108FF80080008AA0800193BC80008DF4800398E4EF +:109008008003990C8003993080009514D4314A1458 +:1090180058095F081296189716951493A888E06067 +:109028000100E06100FFC2E88920A868E203190096 +:10903800E069FFFFE7D9E828E9F88A02E06901005A +:1090480088E8F2080108682989151039E9F8BA0290 +:10905800EE021608049CF01F0010301CF01F000FD1 +:10906800F01F000F5806C090049CF01F000E301C23 +:10907800F01F000DF01F000D6828101310071005D1 +:109088005C83F1D7C0085803CD01069CD832000094 +:10909800000016AC8000A0408000A19880009ED4FB +:1090A80080009F5C8000A17080009E94D4013009EC +:1090B8005C7AF01F0002D80280009014D40148584E +:1090C80090E9701B120C702AF01F0003D8020000F0 +:1090D800000016AC8002E736D4014888189B118A34 +:1090E8003009F20A1800C07090E9701C120B702A3F +:1090F800F01F0003D8020000000016AC8002E7361B +:10910800D421208D48D8F0E60008FAE70008F0EAF4 +:109118000000FAC8FFF0FAEB0000F0E70008F0EBF7 +:109128000000E06CF980EA1C0337F01F0005300CE2 +:109138002FCD2FCDD82200008003996C8000A1C0CC +:10914800D401FAC9FFFCF01F0002D80280031C1CDE +:10915800D401F01F0002D8028002EE88D401F01F6B +:109168000002D8028002ECACD401F01F0002D80241 +:109178008002F0ECD401F01F0002D8028002E71050 +:10918800D401F01F0002D8028002EE2CD401F01F97 +:109198000002D8028002ED84D401F01F0002D80238 +:1091A8008002ECC8D401F01F0002D8028002EE0C45 +:1091B800D401F01F0002D8028002EDD0D401F01FC4 +:1091C8000002D8028002E87ED401F01F0002D80213 +:1091D8008002E8BCD401F01F0002D8028002E73602 +:1091E800D401F01F0002D8028002E28CD401F01FE3 +:1091F8000002D8028002E8D0D401F01F0002D80291 +:109208008002E2A4D401580CC0707808B08B7808AA +:109218002FF89908D802F9DBC008F01F0002D8021D +:10922800800078A0D431189616971495580AE08AC9 +:1092380000153008109AC0282FF8EE08070BF40B19 +:109248001800CFB10A38F9B50400EBD8E515EDB927 +:109258000001C0313303C0283203E9D9C001C090EE +:109268003004C1082FF42015069B0C9CF01F000D3C +:109278005805FE99FFF9C0682FF42FF70C9CF01FD2 +:1092880000090F8B580BCF91C0782FF42015069B3F +:109298000C9CF01F00045805FE99FFF9089CD83271 +:1092A8008000920CD431204DFAC4FFCC109368177B +:1092B800189568041698580BC0B13308BADB08999A +:1092C800069ABAC8FACBFFFCF01F001FC3985809CA +:1092D8005F1B58AA5F09F7E90009C0605808C04435 +:1092E8005C383016C0283006EECB003A3009FAC791 +:1092F800FFF00EF9C0B8F00A0D00029912985898BC +:10930800F1DBE9082D080EF800985808CF515806E7 +:10931800C1005803C0B0EDB40001C08132DB0A9C23 +:109328002013F01F000A3016C04832D830060EF855 +:109338000899069A0E9B0A9CF01F00030C0C2FCD6F +:10934800D83200008000922C8000920CD431203D4D +:109358003007500A18951696325432D3330230919A +:109368003730C978E8081800E081008E2FF60D889C +:109378005808E0800093E8081800E0800085E608B7 +:109388001800F9B90100F7B600FFF9B90001C038B3 +:109398002FF6A1B90D88E4081800CFB03008C048EE +:1093A800F80E00182FF60D8AF008002EF4CC0030C5 +:1093B800F4CB0030E20B1800FE98FFF4E00A180026 +:1093C800C0A1109A4008110B50084B98580BF00B8D +:1093D8001700C548364BF60A1800C0A1361B400ACC +:1093E8001ADB1AD93019740B2FCA502AC358370BF5 +:1093F800F60A1800C121361A40091ADAF2CAFFFC27 +:10940800501A308A1ADA720B3009310A0A9CF01F96 +:1094180000292FED1807C3C8378BF60A1800C0417A +:10942800400A361BC078358BF60A1800C091400AEE +:10943800341B1ADB1AD9740B2FCA502ACE6B375B30 +:10944800F60A1800C0B1361B400A1ADB1AD93009CF +:10945800740B2FCA502A30AACDAB363BF60A180037 +:10946800C171109A4008700B2FC8FB6B0008500898 +:10947800FACBFFF83008FB6800090A9CF01F000EC1 +:109488001807C0682FF70D8B0A9CF01F000C2FF6E9 +:109498000D885808FE91FF685805EBF81000F9B9D7 +:1094A8000100F1F91E000E9C2FDDD8328003997C53 +:1094B800800092AC8000922C8000920CD401189B02 +:1094C800FACAFFFC300CF01F0002D8028000935447 +:1094D800D40148A972082FF89308F2F800CC58086C +:1094E800C040F2FC00D45D18FE780D003019918957 +:1094F8007078D402D6030000000001184838F0F94B +:1095080000D0700CB33C5EFC00000118D431495601 +:1095180030020C9730152F46EEC1FF2C0E930E9497 +:109528000D88E4081800C18166086E291039E08B9F +:1095380000146C185808C0306C2C5D180D98EA0897 +:109548001800E9F80000EFF90001F3D8E008EFF897 +:109558000A02EDF51E002EC62EC70236CE21D832DD +:1095680000000118D431300E189830A5494C1C96CB +:109578002FCCFCC3FFFF1897F9340008EC0418003F +:10958800C071FDD3C0082ECCEA0E1800CF311C9C48 +:1095980048B530030A96FC0E002EEAF500D0F00517 +:1095A8000D048F040D08EF630008EC0E0026080870 +:1095B800EF6B00098F188D498D3AD83200000118D9 +:1095C800D421300A16971896328B495CF01F001583 +:1095D800300AFE7C0D00149BF01F00134935FE7CF9 +:1095E8000D00EAFB00D0F60B1073A19BF01F0010D2 +:1095F800FE7C0D00F01F000FFE7C0D00F01F000E1A +:10960800EAC9FF2CEB4600CCEB4700D430182F45B5 +:10961800AA882EC51235CFD1D8220000800094D850 +:109628008000A3A08000A594000001188000A580F8 +:109638008000A57A8000A562D401306AF01F00027C +:109648005F0CD8028002E710D401F93A0020F738FD +:109658000020F4081800C020D80AF01F00035F0C8F +:10966800D80200008002E710D42119D919881AD924 +:1096780019C91AD919B91AD919A91AD91999486732 +:109688001AD9486A1AD8312B0E9CF01F00050E9C77 +:109698002FADD822000016E0800399848002EC40A8 +:1096A800D4214058F5D8C008F00916181ADAF5D8A8 +:1096B800C108F1D8C2081ADA48671AD8486A1AD90C +:1096C800310B0E9CF01F00050E9C2FCDD8220000F8 +:1096D800000016F4800399A48002EC40D421488746 +:1096E8001896321A300B0E9CF01F00060C9BED3AB0 +:1096F80000200E9CF01F00040E9CD822000016BC0F +:109708008002E8BC8002E736D431300318971696F9 +:109718001491129218950694C1D805002FF4009C54 +:10972800F01F0012F80300030C33E0880009201D25 +:1097380048FC1AD6F01F000F2FEDC108201DEE05BA +:10974800010B1AD00A9C0C0B48BAF01F000C2FED25 +:1097580018050234CE350E35C021D83A30080AF83B +:10976800EA07010CD83200008002EDD0800399B4DA +:10977800800094C4800399CC8002EC40D4211897CF +:109788002DFCF01F001B201D1ADC49ACF01F001A2D +:109798000E9CF01F001A500C499CF01F00176EC851 +:1097A800498C5008F01F00146EF82FED5818C0416E +:1097B800495CF01F0011EF3800383049F2081800F2 +:1097C800C0E03059F2081800C0603029F2081800CB +:1097D800C091C03848DCC04848DCC02848DCF01FCD +:1097E800000648DCF01F0004D822000080009670B4 +:1097F800800399CC800094C4800096E4800399D0BB +:10980800800399D8800399E8800399F480039A0823 +:1098180080039A1C800384D4D421202DFACCFFFC29 +:10982800F01F000C401870185808C04148ACF01FD1 +:10983800000B3007C0887008F007032CF01F0008E1 +:109848002FF75C57401870191237CF632FEDD822C5 +:1098580080018F0480039A40800094C4800097841C +:10986800D431202D300818921696BAE8169CF01FAD +:10987800001DEDBC0000C04149BCF01F001C3007B2 +:109888002FF649B30E94FAC5FFFCC208660BF6081A +:109898000709E2190044C210E04700405F9C0D8AA6 +:1098A800F60A0709E21900445F09F9E91009E8090D +:1098B8001800C131BADABAC8310A300B0A9C2FE64F +:1098C800F01F000CE4070B0C2FF7ED38FFFF5808CA +:1098D800CDE10E9C5C5CC028300C2FEDD832000026 +:1098E8008002EDD080039A50800094C40000049C4C +:1098F8008002F0ECD421204D1A981AD8FAC8FFF843 +:109908001AD8FAC8FFF01AD8FAC8FFE818971AD870 +:10991800169C49BBF01F001B2FCD584CC221403864 +:10992800E04800FFE08B001E402B580BC1A5E04B20 +:1099380000FFE089001740195809C135E04900FFC8 +:10994800E0890010400A580AC0C5E04A00FFE089D3 +:109958000009B16BF7E811881448F1E91088C028AC +:109968003008F0091618AEB8AE890E9CF3D8C208B4 +:10997800F1D8C108AE99AEA82FCDD82280039A603D +:109988008002EBF4486870085808F9BC00FFF9B980 +:109998000101F1F91E10F9BC01015EFC0000170479 +:1099A800D4214988169770085808C021DC2A580C19 +:1099B800C080189B321AF0CCFFEFF01F0013C0389C +:1099C800F16C003148F85807C080700C0E9B306A63 +:1099D8002CECF01F000DC088700C306A2CECE06B8A +:1099E80000FFF01F000A48787008F139003130088C +:1099F800F0091800C021DA2AF01F0005DA2A000051 +:109A0800000017048002E7368002E8BC80019EF857 +:109A1800D4314A241896169714951292680358035D +:109A2800C3B1338B301CF01F001E890C189BC0B1CA +:109A380049C89088EDB80003C2F1201D49A849BC67 +:109A48001AD8C10849ACF01F001B49691891581C65 +:109A5800C0E09288EDB80003C1F1201D4928496C87 +:109A68001AD8F01F00163FFC2FEDD8326808913243 +:109A7800F16300109106911791259288EDB80003C3 +:109A8800C020D8324888201D48DC1AD8F01F000BA7 +:109A9800029C2FEDD832DC3A000017048002DC3C2F +:109AA800000016A280039A8080039AE080009AC87A +:109AB80080018F2480039AF8800094C480039B203F +:109AC800D431202D1697581CC290C083582CC670CC +:109AD8004A78583CE08101A8C998F01F00264A48F6 +:109AE80018969088EDB80003C0A1F01F00234A38EB +:109AF8001ADC4A3C1AD8F01F00232FED333CF01F24 +:109B08000022334CF01F00216E185808E08001979E +:109B18006E3B0C9C5D18E08F019249589088EDB817 +:109B28000003C08149A8201D49AC1AD8F01F0015B0 +:109B38002FED334CF01F0014333CF01F0014EF39A5 +:109B480000103008F0091800E0800179F01F0012B9 +:109B5800581CE080017448689088EDB80003E081E3 +:109B6800016E201D48A848DC1AD8C659000016A264 +:109B78008001997C800096E480039AC880039B3812 +:109B8800800094C48000A3008000A2E680039CE8C3 +:109B980080039B5480019EF880039B784B589088E3 +:109BA800EDB80003C0814B48201D4B4C1AD8F01F5C +:109BB80000342FED4AF89088EDB80003C0814B18A7 +:109BC800201D4B1C1AD8F01F002E2FED333CF01F20 +:109BD800002F6E285808C0306E3C5D18EF39001011 +:109BE8003008F0091800E080012AF01F0029581CED +:109BF800E080012549F89088EDB80003E081011F55 +:109C0800201D4A084A3C1AD8C1699088EDB800035B +:109C1800C0814A18201D4A1C1AD8F01F00192FEDC0 +:109C28006E085808C0306E3C5D18EF3900103008D7 +:109C3800F0091800E0800103EF390031F00918003D +:109C4800E08000FDF01F00161894FACCFFFCF01F0E +:109C58000015581CC591401870185808C550300593 +:109C6800EEC1FFEFEEC3FFCE0A960A92C488000049 +:109C7800000016A280039ABC80039BAC800094C4A9 +:109C880080039A9880039BC48000A2E680019EF816 +:109C980080039BE880039AA880039C1C8001997C20 +:109CA80080018F04EF390031E4091800C080700882 +:109CB800029CF005032BF01F0041C1F0306A4C0BE9 +:109CC800069CF01F0040C0A040187008069CF005D4 +:109CD800032B2DFBF01F003CC1005806C0A0401804 +:109CE8006CC97008F005032870C81039E0890006AF +:109CF80040187008F00503262FF55C5540187019B8 +:109D08001235CD13C02830060C34C0415804E08108 +:109D1800009658065F1858045F19F1E90009C20057 +:109D2800089B0C9CF01F0025C1D068C8FE58FFC0D6 +:109D3800E08400856CCAF0C9FFF71439E084007F1D +:109D48004A299289EDB90003C0D1201D1ADA1AD820 +:109D580049F84A0C1AD8F01F00202FCDC0385808EF +:109D6800C0C0202DECCBFFDF306A1A9CF01F001B0F +:109D7800F01F001B2FEDC17849489088EDB800030B +:109D8800C0C1EECCFFEFF01F001749181ADC496C70 +:109D98001AD8F01F00112FEDEECCFFEFEF3B00318A +:109DA800F01F0012588CC060589CC2F0581CC21199 +:109DB800C458F01F000FC4288000965080039C38B8 +:109DC8008002EDE680009640000016A280039A8C7F +:109DD80080039C40800094C48002E73680019DDCAB +:109DE800800096E480039C6880019EA0800199CC45 +:109DF80049489088EDB80003C0814938201D493C86 +:109E08001AD8F01F00132FEDF01F0012581CC16064 +:109E180048C89088EDB80003C111201D48A848EC37 +:109E28001AD8C0989088EDB80003C081201D48B8A2 +:109E380048BC1AD8F01F00062FED2FEDD8320000CD +:109E4800000016A280039A8C80039C94800094C41E +:109E580080019EF880039CB080039ABC80039CCC50 +:109E6800D4012FEC580BC080F7DCC008FE7C28001A +:109E7800F01F0005D802F7DCC008FE7C2800F01FA0 +:109E88000003D8028000A6C68000A716D42148C7C0 +:109E9800C098300BFE7C2800F01F000A6E082FF8CF +:109EA8008F086E0CF7DCC008CF51F9DCC288F01FB0 +:109EB800000630194858B089D82200000000170859 +:109EC8008000A7FA80009E680000170CD40148683B +:109ED800300B700CF9DCC288F01F000430094848C8 +:109EE800B089D8020000170880009E680000170C8F +:109EF800D421202D4948301B700CF9DCC288F01F92 +:109F08000013E06B00D7FE7C2800F01F0011FAC791 +:109F1800FFFAE06B00FFFE7C2800F01F000D0E9B8F +:109F2800FE7C2800F01F000B9AB8EDB80007CF217F +:109F38004858300B700CF9DCC288F01F00042FED74 +:109F4800D82200000000170880009E688000A7FA49 +:109F58008000A816D421202D49B8A96C910C49B8C5 +:109F680011893008F0091800C030F01F00193009B5 +:109F780049684957B0896E0C301BF9DCC288F01F5C +:109F88000015E06B0082FE7C2800F01F00136E08AD +:109F9800F3D8C008FAC7FFF8F7D8C10CFE7C280030 +:109FA800F3EB109B0EDBB18BF01F000B0FABFE7CAD +:109FB8002800F01F00090FBBFE7C2800F01F0006D8 +:109FC8002FEDDA2A000017080000170C80009EF811 +:109FD80080009E688000A7FAD42149381897118913 +:109FE8003008F0091800C0604908700CA98CF01FEF +:109FF8000010EEC6FF000F3BFE7C2800F01F000D8E +:10A008000C37CFA14898300B700CF8CCFF00910C9E +:10A01800F9DCC288F01F000830194838301CB089B4 +:10A02800D82200000000170C0000170880009F5C71 +:10A038008000A7FA80009E68D421202D4A78A96C58 +:10A04800910C4A7811893008F0091800C030F01FC7 +:10A05800002530094A284A17B0896E0C301BF9DCF4 +:10A06800C288F01F0021E06B00D2FE7C2800F01FA0 +:10A07800001F6E08F3D8C008FAC7FFF8F7D8C10C5C +:10A08800FE7C2800F3EB109B0EDBB18BF01F001752 +:10A098000FABFE7C2800F01F00150FBBFE7C2800CC +:10A0A800F01F0012E06B00FFFE7C2800F01F000F7D +:10A0B800E06B00FFFE7C2800F01F000CE06B00FF47 +:10A0C800FE7C2800F01F0009E06B00FFFE7C2800E2 +:10A0D800F01F00062FEDDA2A000017080000170C01 +:10A0E80080009EF880009E688000A7FAD421202D69 +:10A0F800498818973009118AF20A1800C070B08987 +:10A108004958700CA98CF01F0015FAC5FFFAEEC665 +:10A11800FF00E06B00FFFE7C2800F01F00110A9B87 +:10A12800FE7C2800F01F000F9A380EC80C37CF218C +:10A138004898300B700CF8CCFF00910CF9DCC28801 +:10A14800F01F000930194838301CB0892FEDD8228B +:10A158000000170C000017088000A0408000A7FA34 +:10A168008000A81680009E68D4211897C088F01F28 +:10A178000006486CF01F000620175C87483C58070B +:10A18800CF71DA2A800090C40000171080009FE089 +:10A19800D4211897C088F01F0006486CF01F0006ED +:10A1A80020175C87483C5807CF71DA2A8000A0F452 +:10A1B80000001710800090E0D4213027FAC4FFEC8B +:10A1C8001896A887C0C80C9A089BFE7C2800F01F28 +:10A1D8000009C020D82A09882FF8A8880988EE081D +:10A1E8001800FE98FFF230094838301CB089D82290 +:10A1F8008000A73C0000170CE1B80000EE18000131 +:10A20800F1D8C201C020D3033019F20B094B994B86 +:10A21800783958085E0CD5035EFCFE681400700996 +:10A22800F3DCD0C191095EFCF8081605A968E0289E +:10A23800F000581BC0D0C063582BC0F0583BC12059 +:10A248005EFF3019F20C0949916991A9C108F60C11 +:10A25800094B915B91ABC0B83019F20C094991696F +:10A26800C0583019F20C0949915991993019F20CDA +:10A27800094C912C5EFDD703D4213007189616940B +:10A288000E95C0880D9B0D8C2FF72FE6F01F00044C +:10A2980018450837CF830A9CD82200008000A230D6 +:10A2A8003018F00C0948A59CA96CE02CF000F9487E +:10A2B800004899185EFC3018F00C0948A59CA96C58 +:10A2C800E02CF000F94800745EFC3018F00C0948E6 +:10A2D800A59CA96CE02CF000F94800785EFC3018C9 +:10A2E800F00C0948A59CA96CE02CF000F948005432 +:10A2F800F948004499185EFC3018F00C0948A59CF0 +:10A30800A96CE02CF000F9480058F9480044991865 +:10A318005EFC301AF8081605F40C0949A968E0280B +:10A32800F000F14900C4143BC080C043582BC0F171 +:10A33800C098F14900A8C038F14900A4F14900B813 +:10A34800C078F14900A8F14900B4C0285EFAF14983 +:10A3580000945EFD3018F00C0948A59CA96CE02C0F +:10A36800F000F94800985EFCF8081605A968E0288E +:10A37800F000F0F800D0F00C0A4CF9DCC0015EFCEB +:10A388003018F00C0948A59CA96CE02CF000F9489D +:10A3980000D85EFCC008D703F3DBC0054898A59B2E +:10A3A800F00B00387018F009092C4878F5DAC0026B +:10A3B800F00A0329FE780800F00B09295EFC00006A +:10A3C80080039CFC8003773CD42148F8E3B8000163 +:10A3D80048E848F9700E48FC3008FE7B0800C0E8E1 +:10A3E8007216EC0A00262FFA8D0C0E3ACFA3F60847 +:10A3F800092E2F892FF85948C0407207300ACF6BB1 +:10A40800D8220000800376008003773C80039CFC00 +:10A418008000A39CE0680083FE790800F00C010C22 +:10A42800F20C0328F0CAFFC0F20A032C580C5E0C89 +:10A438004869F80C1200F2080038F80C111F70185F +:10A44800F00C032C5EFC000080039CFC78C83019DB +:10A45800F1D9D10399C85EFC78C83019F1D9D00177 +:10A46800F1DBD20399C85EFCD421FAC4FFEC68176B +:10A47800680EEFD7C003FDDEC0013004E9D7D00372 +:10A48800E9DED0E1E9D7D103E9DED1E1E9DAD203A7 +:10A49800E9DBD2E1E9D8D303E9D9D3E199147958B2 +:10A4A800EDB80005CFD1D822D4213007405E2F8BDC +:10A4B800EFD8D021EFD9D104EFDAD204EFDED306FA +:10A4C800F80B0927D822F5E910192F8BF3E8102883 +:10A4D800F80B0329F3D8D043F80B09295EFC2F8B1E +:10A4E800F80B0328A1A8F80B09285EFC7958EDB8E9 +:10A4F8000000CFD15EFC7808F1DBD00299085EFC41 +:10A50800EC5BBB9FE08B0004304BC138E068C6BFF2 +:10A51800EA18002D103BE08B0004305BC0A8E0680F +:10A528001200EA18007A103BF9BB0306F9BB0207D0 +:10A5380078A8F1DBD00399A878A8F1DAD10399A813 +:10A548007808A3A899087958EDB80007CFD17808FA +:10A558003019F1D9D00299085EFC7808EDB80004EA +:10A56800CFD07808A1A899087808EDB80004CFD012 +:10A578005EFC301899485EFC7808EDB80004CFD02E +:10A58800992B7808EDB80004CFD05EFCD42130F8C0 +:10A5980014951697F00A18005FBA30181896F00B41 +:10A5A80018005FB9F5E91009C020D82AF00B180087 +:10A5B800C0A1FE7C0C00F01F0015300BFE7C0C00C7 +:10A5C800F01F00136C08EDB80004CFD0A377B1A733 +:10A5D800EFE510878D076C08EDB80004CFD06C0844 +:10A5E800E2180010CFD18D186C08EDB80004CFD058 +:10A5F8006C08EDB80004CFD03FF88D286C08EDB892 +:10A608000004CFD0DA2A00008000A4548000A4609F +:10A618003038F00A18005FB93078F00B18005F88FE +:10A62800F3E81008C1913108F00B1800E08B001511 +:10A63800E06800809908208BF4081601F5DAC0015B +:10A64800F1EB104B580AF9BA0100F9BA0002F7EA1F +:10A65800100A99CA5EFD302C5EFCD4013019189896 +:10A66800F73B000DF20B1800E0880004302CD802EC +:10A67800300AE06900809909301E7019149CF3DED5 +:10A68800D001F3DBD081F3DAD0E130FAF3DAD20487 +:10A698009119D802D4013018F00B18005FBEF00AE7 +:10A6A80018005FB81C48C030302CD8027818F1DB8D +:10A6B800D021F1DAD041F1D9D3089918D80A7819FC +:10A6C8001898EA19000F9919781CE21C0004C100B7 +:10A6D80030E9F20B1800E08B001A7019B16B300CDE +:10A6E800EA1BFFF0E81BFFFF126B911B5EFC303981 +:10A6F800F20B1800E08B000B70192F0B301AF40BBB +:10A70800094B5CDB126B911B5EFC302C5EFCE06835 +:10A718002710C0585808C0215EFF20187849EDB9A5 +:10A728000009CF917818EA18000F9918FC18010051 +:10A7380099085EFDD4313036F737000CEC07180065 +:10A74800E08B0050F733000B301EFC031800E08B41 +:10A758000049F73800083079F2081800E08800420C +:10A768003109F2081800E08B003D7619F205160150 +:10A77800F4050005EA090D04E8C90001E04900FEF6 +:10A78800E08B0030F0CA00080E923008EC1200018D +:10A79800A197F1D7D001F1D2D021F1D3D061F1DA6C +:10A7A800D084F73A0009F1D4D1081789F1DAD20830 +:10A7B800F73A000AF1DAD308FC091800C0C0C093C0 +:10A7C800302AF4091800C090EC091800C0A1C0781C +:10A7D80099C8C06899D8C04899E8C02899F8D83A63 +:10A7E800302CD832301899085EFC784CF9DCC0213E +:10A7F8005EFCE0682710C0585808C0215EFF20188A +:10A808007849EDB90001CF915C7B993B5EFDE0682A +:10A818002710C0585808C0215EFF20187849E2194F +:10A828000201E0490201CF717828300CB6085EFCBD +:10A8380076095829E08800035EFE7618A769109B00 +:10A84800E61BC000120CF3D8C003AFB91649109B21 +:10A85800E61B30001649109BE61B0C001649109B9E +:10A86800E61B03001649109BE61B00C01649109B07 +:10A87800E61B00301649109BE61B000C1649109B7E +:10A88800E61B00031649109BE21B60001649109B4B +:10A89800E21B10001649109BE21B0C001649109B86 +:10A8A800E21B03002FCC1649109BE21B0080109A74 +:10A8B8001649E21A0008109BE2180030E21B00401B +:10A8C8001649F3E81008144899085EFDF6081506BD +:10A8D800582BF9BC0BFFF9D8E80CF9B80805F9F8BA +:10A8E8008A00F9BC08005EFC582BE08800035EFE75 +:10A8F800F6081506F80800082FC87008EDB8000F0C +:10A90800C0C1A76BF3DAC010160C2ECC7808E0187B +:10A918000000F3E810089908F9DAC0105EFC582B1B +:10A92800E08800035EFEA76B160C7818EDB8000FE0 +:10A93800C0A12E4CF3DAC0107808E0180000F3E844 +:10A9480010089908F9DAC0105EFCD401F60E150457 +:10A958001C3AF9BE0210F9BE0308FC0B024BF608BC +:10A968001601F00A003AF40B0D0AF4091603F2C8AE +:10A978000001E048FFFEE0880003DA0A7818E86B77 +:10A988000000E418FFF7E018FECF590EF60E171076 +:10A99800F9BE0000FDE810089918F5DAC003F3EADB +:10A9A80011099989D80A7858EDB80001C030302CBF +:10A9B8005EFCF7DBC009997B5EFD7858E21800E081 +:10A9C800C030304C5EFC7859EDB90000F9BC010389 +:10A9D800F9F90006F00C1700E06A01FFF3DAE02845 +:10A9E800F7F80A005EFCE1B80000EE180001F1D8A3 +:10A9F800C201C020D3033FF9993978595808C020BB +:10AA0800D50330089918999899A8EA68610C9908AB +:10AA18005EFCD703D421201D500A16961897F01F04 +:10AA2800002F400A5806C5500DC83049F2081800D2 +:10AA3800E08800503095EA081800E08B004B0DD9EB +:10AA48003078F0091800E08B00458C39E068010186 +:10AA5800F0091900E08B003EED3900083038F009A4 +:10AA68001800E08B00376C0B0E9CF01F001D581C63 +:10AA7800C3000DC8EA081800C0416E18B1B8C05824 +:10AA880020586E19F3E810688F186E19ED3A00080F +:10AA98000DD8A978F1EA10E812488F18302A8C38B6 +:10AAA800F3D8C010F4081900E08800086E18ADB893 +:10AAB8008F1820298FA9C0586E18F1E910C98F196D +:10AAC8006E18E018FFF08F18300C35088F08C02872 +:10AAD800301C2FFDD82200008000A9EE8000A9526A +:10AAE8004828910C5EFC0000000018E8D431189842 +:10AAF800783E580EC620F90600105806C5E0300901 +:10AB08003FF3129A3344C1780E91E8071800C0A1A8 +:10AB1800F2CAFFFEF4C9FFFF5C7A5C89FC0A070AE7 +:10AB2800C0A8F6071800C4A05C75FC050709E4096D +:10AB380000095C89EC091900C0F2F2C5FFFFF9D9D8 +:10AB4800C0105C85FC0C000CEAC2FFFF19870E914F +:10AB5800E6071800CDA1580AC3003019F20A1800F8 +:10AB6800C0617028E06900802948C0C87028302971 +:10AB7800F20A1800C0412D483409C0482D48E06940 +:10AB880000C0300C3FF7C0D8F60A1800C1705C7ED0 +:10AB9800F00E070CEC0C000C5C8CF20C1900C0D207 +:10ABA800F8CEFFFF5C7C5C8EF00C000CFCC6FFFF4F +:10ABB800198AEE0A1800CE91300CD832D401F9085F +:10ABC800001CF3D8C010F2CEFFFE140EE04E004475 +:10ABD800E088000F48F8201D1AD8E06804E31AD866 +:10ABE80048D848EC1AD8F01F000E2FCDC008786E50 +:10ABF800FC090009F36B00F02FF8786BF3D8C0104C +:10AC0800F6090009F36A00F02FF8F958001CD80279 +:10AC180080039DC480039E0880039D9C800094C48B +:10AC2800D4013439F908001CF2081900E088000F33 +:10AC380048C8201D1AD8E06804EE1AD848A848BCAD +:10AC48001AD8F01F000B2FCDC008786AF3D8C010AF +:10AC5800F4090009F36B00F02FF8F958001CD8022A +:10AC680080039DC480039E5080039D9C800094C4F3 +:10AC7800D401580CC0E14B18201D1AD8E068062BE7 +:10AC88001AD84AF84AFC1AD8F01F002F2FCDC0084E +:10AC9800786A580AC0E14A98201D1AD8E068062C3C +:10ACA8001AD84AA84A7C1AD8F01F00272FCDC00806 +:10ACB800F908001C3439F2081900E088000F49F837 +:10ACC800201D1AD8E068062D1AD84A1849DC1AD867 +:10ACD800F01F001D2FCDC008F7D8C010160A3FFB83 +:10ACE800F56B00F02FF8129B5C88300AF958001CAD +:10ACF800C1584928201D1AD8E06806321AD8494890 +:10AD0800490C1AD8F01F00102FCDC008F1DEB01082 +:10AD1800786EFC090009F36A00F0F0CEFFFFF3D863 +:10AD2800C010F6081900FE98FFF3F958001CF3D973 +:10AD3800C002CE01D802000080039DC480039E8C0F +:10AD480080039D9C800094C480039EB080039EDC99 +:10AD5800D401F908001CF3D8C010F2CAFFFEE04A7B +:10AD68000044E088000F4918201D1AD8E06804F54F +:10AD78001AD848F848FC1AD8F01F000F2FCDC00881 +:10AD8800786AF4090009F5DBC108F36A00F02FF8C6 +:10AD9800786AF3D8C010F4090009F36B00F02FF8B3 +:10ADA800F958001CD802000080039DC480039F1C32 +:10ADB80080039D9C800094C4D401F908001CF3D83A +:10ADC800C010F2CAFFFCE04A0044E088000F49B80E +:10ADD800201D1AD8E06804FD1AD84998499C1AD849 +:10ADE800F01F00192FCDC008786AF4090009F60A87 +:10ADF8001618F36A00F0786A2FF8F3D8C010F4092F +:10AE08000009F5DBC208F36A00F0786A2FF8F3D876 +:10AE1800C010F4090009F5DBC108F36A00F02FF847 +:10AE2800786AF3D8C010F4090009F36B00F02FF822 +:10AE3800F958001CD802000080039DC480039F605D +:10AE480080039D9C800094C4D421F9380035A3D890 +:10AE5800F9680035189678A75807C2406E1C580C38 +:10AE6800C050F01F001130088F186E285808C09184 +:10AE78006E355805C061EF090010EA091900C0E0F5 +:10AE880048A8201D1AD8E06804C51AD84888489CE4 +:10AE98001AD8F01F00092FCDC0080E9CF01F00071C +:10AEA8008DA5D8228001122880039DC480039FA00D +:10AEB80080039D9C800094C48002E28CD421189762 +:10AEC800782C580CC050F01F000830088F286E3CB2 +:10AED800580CC070F01F00043008EF5800108F386D +:10AEE800D82200008002E28CD4211896580CC0E1C8 +:10AEF8004AE8201D1AD8E06805D11AD84AC84ADCA1 +:10AF08001AD8F01F002D2FCDC00878A75807C0E128 +:10AF18004A68201D1AD8E06805D31AD84A784A5CCE +:10AF28001AD8F01F00252FCDC0086E585808C0E069 +:10AF380049E8201D1AD8E06805D41AD84A0849DC1F +:10AF48001AD8F01F001D2FCDC0086E655805C0E047 +:10AF58004968201D1AD8E06805D51AD84998495C6F +:10AF68001AD8F01F00152FCDC0080A9AE06B0134DB +:10AF78000A9CF01F00158F5CC041E06C00FFD822CE +:10AF88009859E0680133F0091900E08B00214878EE +:10AF9800201D1AD8E06805DD1AD848C8485C1AD8B8 +:10AFA800F01F00052FCDC00880039DC480039FB407 +:10AFB80080039D9C800094C480039FD880039FFCDD +:10AFC8008003A0288000D3188003A054EF38001312 +:10AFD800EA081800C0514D3870092FF991097818FE +:10AFE800301B8F684CF9720A8F0AB09BB08B306B9C +:10AFF800B0ABF40B1618B0CBF7DAC2083009B0FAC8 +:10B00800B0DBF5DAC108305BB0B9F1690008F16965 +:10B018000009F169000AF169000BF169000CF16996 +:10B02800000DF169000EF169000FB0EAEF3A001265 +:10B03800F60A18005F0C30ABF60A18005F0BF9EB44 +:10B04800100BF20B1800C0513049F20A1800C0D199 +:10B058000DC9F169000C0DD9F169000D0DE9F1690F +:10B06800000E0DF9F169000F3009ECCAFFD1F16942 +:10B078000010F1690011F1690012F1690013F1691A +:10B088000014F1690015F1690016F1690017F169FA +:10B098000018F1690019F169001AF169001BF0CB79 +:10B0A800FFE4ED35002E3106EA091900F9BC02006B +:10B0B800F5FC380016CC2FF92FFA5C89EC09190039 +:10B0C800CF413009F0CAFFD4129C340B14CC2FF9AD +:10B0D8005C89F6091900CFB13009F0CAFF94129CB7 +:10B0E800E06B008014CC2FF95C89F6091900CFB108 +:10B0F8003639F16900EFF16900EC3829F16900EDA2 +:10B108003539F16900EE344A3009F0C8FF10EF59BB +:10B11800001C10C92FF95C89F4091900CFB1D82A8D +:10B12800000001F0D421580CC0E14A28201D1AD88B +:10B13800E06806141AD84A084A0C1AD8F01F0020EA +:10B148002FCDC00878A75807C0E149A8201D1AD8F4 +:10B15800E06806161AD849B8498C1AD8F01F0018A2 +:10B168002FCDC0086E5C580CC0E14928201D1AD8A4 +:10B17800E06806171AD84948490C1AD8F01F001079 +:10B188002FCDC0086E685808C0E148A8201D1AD8FD +:10B19800E06806181AD848D8488C1AD8F01F000852 +:10B1A8002FCDC008F01F000A30088F688F58D822AA +:10B1B80080039DC48003A09880039D9C800094C454 +:10B1C8008003A0BC8003A0E08003A10C8000D13CD8 +:10B1D800D42130D878A7EF390012F0091800EFF819 +:10B1E8001E12F9B80100EFF81E13300818968FE800 +:10B1F8008F988FB88FA88FD88FC8EF48004CEF482A +:10B208000048EF480044F01F0029EBDCC008C201E9 +:10B21800301A335B0E9CF01F0026307B0E9CF01F0B +:10B2280000250E9CF01F00246E5CEF0B001CF6CB73 +:10B23800FF105C7BF01F00210C983439EECAFFDC4C +:10B248006E5B6E1CF01F001E0C9CF01F001EEF387A +:10B2580000132FF85C58EF6800133099F2081800B3 +:10B26800E0880005E0692710C058E06903E8F009A4 +:10B2780002495C79E06801F4F2C9FE0DF2080C0895 +:10B288000C9CEF58001EF01F00100C9C48FBF01F90 +:10B2980000100C9C48DBF01F000F0C9C48BBF01FF3 +:10B2A800000E0A9CD82200008000AEF08000ABC4DB +:10B2B8008000AC288000AC788000D2108001139008 +:10B2C8008000B12C8000CABC8003B4098000CBC8C0 +:10B2D8008000CA748000CA92D421305878A7EF3908 +:10B2E8000012F0091800EFF81E12F9B80100EFF883 +:10B2F8001E131896F01F0026EBDCC008C2A1301AF6 +:10B30800335B0E9CF01F0023303B0E9CF01F002285 +:10B31800302A339B0E9CF01F001FED1B002C0E9C47 +:10B32800F01F001E0E9CF01F001E6E5CEF0B001C31 +:10B33800F6CBFF105C7BF01F001B0C983439EECA6B +:10B34800FFDC6E5B6E1CF01F00180C9CF01F0017D2 +:10B35800EF3800132FF85C58EF6800133099F208A3 +:10B368001800E0880005E0694E20C058E06907D061 +:10B37800F00902495C790A9CF2C9FE0DE06801F403 +:10B38800F2080C08EF58001ED82200008000AEF02A +:10B398008000ABC48000AC288000AD588000AC7839 +:10B3A8008000D210800113908000B12CD42118960F +:10B3B800580CC0E14AF8201D1AD8E06802F51AD8DE +:10B3C8004AD84AEC1AD8F01F002E2FCDC00878A70B +:10B3D8005807C4E0EF3900123088F0091800C4811A +:10B3E80017B8178A1799B169F3EA118917AAF3EA06 +:10B3F8001089F1E910096EA81039C3A130C8EF68A7 +:10B4080000123008EF680013F01F001E5C5CC28158 +:10B41800301A335B0E9CF01F001C304B0E9CF01F43 +:10B42800001B304A332B0E9CF01F00176EAB0E9C8E +:10B43800F01F00170E9CF01F00176E5CEF0B001C2E +:10B44800F6CBFF105C7BF01F00140C983439493A96 +:10B458006E5B6E1CF01F00120C9CF01F0012EF3880 +:10B4680000132FF8EF6800133148EF58001ED82258 +:10B4780080039DC48003A13880039D9C800094C4F0 +:10B488008000AEF08000ABC48000AC288000ADC066 +:10B498008000AC788000D2108003B405800113903E +:10B4A8008000B12CD421303878A7EF390012F00988 +:10B4B8001800EFF81E12F9B80100EFF81E131896DD +:10B4C800F01F002AEBDCC008C321301A335B0E9C46 +:10B4D800F01F0027303B0E9CF01F0026302A339BBC +:10B4E8000E9CF01F0023E06B02400E9CF01F002210 +:10B4F800304A332B0E9CF01F001E6EAB0E9CF01FC3 +:10B50800001F0E9CF01F001E6E5CEF0B001CF6CB9C +:10B51800FF105C7BF01F001B0C98343949AA6E5B46 +:10B528006E1CF01F001A0C9CF01F0019EF38001356 +:10B538002FF85C58EF6800133099F2081800E0887B +:10B548000005E0692710C058E06903E8F0090249DE +:10B558005C790A9CF2C9FE0DE06801F4F2080C0857 +:10B56800EF58001ED82200008000AEF08000ABC467 +:10B578008000AC288000AD588000ADC08000AC7859 +:10B588008000D2108003B405800113908000B12C94 +:10B59800D4214BD811B9118B119A11A8B16AF5EBC6 +:10B5A800118AF5E81088F3E8100878A78FA8EF3912 +:10B5B80000123068F0091800EFF81E12F9B80100FF +:10B5C800EFF81E131896F01F0031EBDCC008C3E13A +:10B5D800301A335B0E9CF01F002E301B0E9CF01FA0 +:10B5E800002D302A339B0E9CF01F0029ED1B002CE8 +:10B5F8000E9CF01F0029304A337B0E9CF01F00245C +:10B60800301B0E9CF01F0023303B0E9CF01F0021C6 +:10B6180031CB0E9CF01F001F306B0E9CF01F001DDD +:10B628000E9CF01F001E6E5CEF0B001CF6CBFF108B +:10B638005C7BF01F001B0C98343949AA6E5B6E1CAA +:10B64800F01F00190C9CF01F0019EF3800132FF899 +:10B658005C58EF6800133059F2081800E0880005BC +:10B66800FE79EA60C058E06903E8F20809495C79A4 +:10B678000A9CF2C9FE0DE06801F4F2080C08EF58C4 +:10B68800001ED8228003B4098000AEF08000ABC44D +:10B698008000AC288000AD588000AC788000D210C3 +:10B6A8008003B405800113908000B12CD421301898 +:10B6B80078A7EF390012F0091800EFF81E12F9B850 +:10B6C8000100EFF81E131896F01F0039EBDCC008D4 +:10B6D800C501301A335B0E9CF01F0036303B0E9CC0 +:10B6E800F01F0035302A339B0E9CF01F0032ED1BF3 +:10B6F800002C0E9CF01F0031304A332B0E9CF01F9B +:10B70800002D6EAB0E9CF01F002E304A336B0E9C42 +:10B71800F01F00286E9B0E9CF01F0029304A337BD7 +:10B728000E9CF01F0024301B0E9CF01F0023303BA2 +:10B738000E9CF01F002131CB0E9CF01F001F306BB8 +:10B748000E9CF01F001D0E9CF01F001E6E5CEF0B80 +:10B75800001CF6CBFF105C7BF01F001B0C983439E3 +:10B7680049AA6E5B6E1CF01F001A0C9CF01F001992 +:10B77800EF3800132FF85C58EF6800133059F208BF +:10B788001800E0880005FE79EA60C058E06903E81F +:10B79800F20809495C790A9CF2C9FE0DE06801F4D7 +:10B7A800F2080C08EF58001ED82200008000AEF006 +:10B7B8008000ABC48000AC288000AD588000ADC0CC +:10B7C8008000AC788000D2108003B405800113900B +:10B7D8008000B12CD421304878A7EF390012F00945 +:10B7E8001800EFF81E12F9B80100EFF81E131896AA +:10B7F800F01F0025EBDCC008C291301A335B0E9CA9 +:10B80800F01F0022303B0E9CF01F0021302A339B92 +:10B818000E9CF01F001EED1B002C0E9CF01F001D3F +:10B828000E9CF01F001D6E5CEF0B001CF6CBFF108A +:10B838005C7BF01F001A0C983439499A6E5B6E1CB9 +:10B84800F01F00180C9CF01F0018EF3800132FF899 +:10B858005C58EF6800133099F2081800E08800057A +:10B86800E0692710C058E06903E8F00902495C79EB +:10B878000A9CF2C9FE0DE06801F4F2080C08EF58C2 +:10B88800001ED8228000AEF08000ABC48000AC2837 +:10B898008000AD588000AC788000D2108003B405D9 +:10B8A800800113908000B12CD4314A5830167007AB +:10B8B80030A20C9330043055C3E86EA85808C3A0D2 +:10B8C800F1090022F2CA0001F15A0022EC0919001C +:10B8D800C151F1380012E40818005F0AE6081800A0 +:10B8E8005F09F5E91009E8091800C041EA081800DD +:10B8F800C2110E9CF01F0013C1D8F1090020F2CA32 +:10B908000001F15A0020EC091900C141F138001278 +:10B91800E40818005F0AE60818005F09F5E910094D +:10B92800E8091800C041EA081800C0410E9CF01F41 +:10B9380000066E075807CC21D8320000000080CCE2 +:10B948008000B7DC8000B2E0D4211896580CC0E122 +:10B958004C08201D1AD8E068024E1AD84BE84BFC58 +:10B968001AD8F01F003F2FCDC008F9380035A3D8EA +:10B97800F968003578A7F909002CE068023FF0095A +:10B988001900E088008B5807C091350CF01F00356E +:10B998001897E08000838DACC2E86E1C580CC0304C +:10B9A800F01F00316E585808C0E04AA8201D1AD868 +:10B9B800E068026C1AD84AD84A8C1AD8F01F0028B6 +:10B9C8002FCDC0086E285808C0916E385808C0613D +:10B9D800EF090010F0091900C0E049E8201D1AD845 +:10B9E800E068026E1AD84A2849CC1AD8F01F001C01 +:10B9F8002FCDC008350A300B0E9CF01F001EF01F1B +:10BA0800001E8F1C1895C0610E9CF01F001C8DA590 +:10BA1800C178344A49ABF01F001B499B343A6E1C6D +:10BA2800F01F00190C9A499B6E1CF01F00190C9C02 +:10BA3800F01F00185C5CC0700C9CF01F0017E06CD5 +:10BA480000FFD822ED380035A3B8ED680035D822BC +:10BA580080039DC48003A13880039D9C800094C40A +:10BA68008002E2A4800112288003A14880039FA0DD +:10BA78008002E8BC800112008002E28C8003B409D5 +:10BA880080011260800113208000BBBC800111F886 +:10BA98008000B5988000AE50E06C00FFD82200000E +:10BAA800D421202D1896580CC0E14BA8201D1AD877 +:10BAB800E06803781AD84B884B8C1AD8F01F0038E6 +:10BAC8002FCDC00878A75807C0E14B28201D1AD8E9 +:10BAD800E068037A1AD84B384B0C1AD8F01F00309C +:10BAE8002FCDC0086F295BF9C1102E2933C8E06A31 +:10BAF800FFFFF2080D081438F40817B0EF580020BB +:10BB08005808F9B80001EFF80C106F395BF9C1104B +:10BB18002E2933C8E06AFFFFF2080D081438F4082C +:10BB280017B0EF5800225808F9B80001EFF80C11C7 +:10BB38006EB850185808C041FC18FF0050186EC85D +:10BB480050085808C0716EA84019F3E80008A1A869 +:10BB58005008EECBFFD80C9CF01F0013FACBFFFC6B +:10BB68000C9CF01F00121A9B0C9CF01F00110C9CDF +:10BB7800F01F0010EF39001230A8F0091800EFF894 +:10BB88001E12F9B80100EFF81E132FEDD82200009D +:10BB980080039DC48003A16080039D9C800094C4A1 +:10BBA8008003A17C8000CBC88000CA928000CA7440 +:10BBB8008000CB88D43178A71896149574186E290C +:10BBC8005809C0916E395809C061EF0B0010F20B8B +:10BBD8001900C0E04BE8201D1AD8E06805651AD89E +:10BBE8004BC84BDC1AD8F01F003D2FCDC0088A5B2C +:10BBF80032BAF40B1900E088020F118B302AF40BCB +:10BC08001800E0810209F93C002EECCBFFD1F0CA04 +:10BC1800FFE4C0982FF917345C59153EFC0418004E +:10BC2800E08101FAF8091800CF6311FA11CB11D994 +:10BC380011E8B169F3EB1189F3E810896E08F5E9A9 +:10BC480010091039E08101E80E9CF01F00258A4C8C +:10BC5800E06800F0F00C1900E088000FF8CC00F064 +:10BC6800EF5C00105C7CF01F001F8F3CC051EF5C44 +:10BC78000010E08F01D1E06C00F0F01F001A8F2C4B +:10BC88001894C0C16E3C580CE08001C6F01F001625 +:10BC9800EF5400108F34E08F01BF189B3009E06A21 +:10BCA80000F00A9CF01F0011E06800F0F00C190089 +:10BCB800C2004878201D1AD8E068052E1AD848C84E +:10BCC800485C1AD8F01F00052FCDC00880039DC41A +:10BCD80080039FA080039D9C800094C48000AEC414 +:10BCE8008002E2A48002E28C8000CEC48003A1948A +:10BCF8006E3B580BE08001B2E06900F0EF1A0010CB +:10BD08000A9CF01F0036EF080010F8081900E080C0 +:10BD180001A54B38201D1AD8E06805351AD84B18EC +:10BD28004B1C1AD8F01F00312FCDC00819A8305A63 +:10BD3800F4081800E0810100EF3800123019F20809 +:10BD48001800E08100EC30086CA4333B89D889B82E +:10BD580089C8089CF01F0026C0F0F8C8FFFC19AB82 +:10BD6800119919BA1188B16AF5EB118AF5E81088AA +:10BD78001248E948004433AB089CF01F001DC0E09E +:10BD8800F8C8FFFC19AB119919BA1188B16AF5EB1B +:10BD9800118AF5E810881248C0386918A198E9484E +:10BDA800004833BB089CF01F0012C0E0F8C8FFFC35 +:10BDB80019AB119919BA1188B16AF5EB118AF5E82E +:10BDC80010881248C0286918E948004C6828F0C94A +:10BDD800FFF0C0F11298C1C88000CEC480039DC492 +:10BDE8008003A1C880039D9C800094C48000AAF4AD +:10BDF800F1390013F13B0010F13A0011F13800124B +:10BE0800B16AF5EB118AF5E81088F3E8100889A8FB +:10BE1800301B089CF01F0084C0E0F8C8FFFC19AB79 +:10BE2800119919BA1188B16AF5EB118AF5E81088E9 +:10BE3800124889B8303B089CF01F007BC0E0F8C866 +:10BE4800FFFC19AB119919BA1188B16AF5EB118A7F +:10BE5800F5E81088124889C831CB089CF01F007299 +:10BE6800C0E0F8C8FFFC19AB119919BA1188B16A7A +:10BE7800F5EB118AF5E81088124889D8306B089CD0 +:10BE8800F01F00691892C2E01998A38889E8582819 +:10BE9800F9B80B02E9F8BA0E3003C1D8E608150262 +:10BEA800E6C9FFF22FE8E8090029E4080008113E76 +:10BEB800113AB16AF5EE118A118EF5EE108A1191D8 +:10BEC800069CF5E11001F2CBFFFC93112FF3F01F54 +:10BED80000575C5368E81033CE23069C4D4BF01F87 +:10BEE80000536CA43008E93A00123089EF58001E5C +:10BEF800F20A1800E9F91E12E9F81E130C9C300A20 +:10BF0800E8CBFFD8F01F004BE93800132FF8E96899 +:10BF180000133018E958001EC7E820383029F20805 +:10BF28001800E08B007930080C9CEF58001EF01FB9 +:10BF38000042C7183069F2081800C3513019EF38A9 +:10BF48000012F20818005F0B3039F20818005F0978 +:10BF5800F7E91009C0813049F2081800C040F40818 +:10BF68001800C5916CA40C9C3003EF53001EF01F01 +:10BF780000330C9C4AEBF01F00320C9C4ACBF01F9C +:10BF880000310C9C4AABF01F0030E939001230C870 +:10BF98000C9CF0091800E9F31E13E9F81E12F01FB3 +:10BFA800002BC398302AF4081800C351EF38001248 +:10BFB800F2081800C30130086CA4EF58001E336B58 +:10BFC800089CF01F0019C270F8C8FFFC19AB119942 +:10BFD80019BA1188B16AF5EB118AF5E81088124888 +:10BFE80089986828F0C9FFF0C0311298C108F13962 +:10BFF8000013F13B0010F13A0011F1380012B16A58 +:10C00800F5EB118AF5E81088F3E8100889A80C9C6C +:10C01800F01F000F0E9CF01F000F0A9CF01F000E6F +:10C02800D83200008000AAF48000C19C8003B409C3 +:10C038008001384C8000BAA88000CABC8000CBC8F8 +:10C048008000CA748000CA928000B5988000B6B497 +:10C058008000AEC48000D13C335B0E9CF01F00030F +:10C06800FE91FE66CD8B00008000AAF4D4314C18F6 +:10C07800301370073002069430813050C7686EA6BE +:10C088005806C720ED05001EE6051900E0880006E1 +:10C098002015ED55001EC688E6051900C651ED3875 +:10C0A8000012306AED52001EF40818005F0A30C909 +:10C0B800F20818005F09F5E91009300AF4091800B8 +:10C0C800C501E8081800C0B1ED380013E0081800F1 +:10C0D800E08B00360E9CF01F0028C468E2081800A8 +:10C0E800C191ED380013E8081800E08B0010300A01 +:10C0F800ECCBFFD80E9CF01F0021ED380013ED5556 +:10C10800001E2FF8ED680013C2F80E9CF01F001CEB +:10C11800C2B8E0081800C0510E9CF01F001AC248AF +:10C128003049F2081800C0F1ED380013E208180091 +:10C13800E08B00060E9CF01F0014C1680E9CF01FD7 +:10C148000013C0F83039F2081800C0E1ED380013C8 +:10C15800E8081800E08B00060E9CF01F000DC04890 +:10C168000E9CF01F000C6E075807C8A1D8320000BB +:10C17800000080CC8000B6B48001384C8000BAA89A +:10C188008000B2E08000B7DC8000B1D88000B4AC99 +:10C198008000B598D4013019F20C1800E08B001D0E +:10C1A800580B5F1A48D9720958095F19F5E900094F +:10C1B800C13017B9178E179A17A8B16AF5EE118A08 +:10C1C800F5E81088F3E81008C0704858304AF00CB9 +:10C1D800002CF01F0004D80200001D5800001D505C +:10C1E8008002E736D42130181897F00B1800E08B3E +:10C1F80000074868304AF00B002BC038304A484BDB +:10C20800F01F00040E9CD82200001D508003B409C2 +:10C218008002E736D4313013189516911492E60C43 +:10C228001800E088000F4BB8201D1AD8E0680246B5 +:10C238001AD84B984B9C1AD8F01F00392FCDC0083C +:10C248004B89F20C0028F20C072B11BA119911A88E +:10C25800B169F3EB1189F3E81088F5E81008C0E13B +:10C268004AC8201D1AD8E06802471AD84AE84ABCCA +:10C278001AD8F01F002B2FCDC008300AE06B011030 +:10C28800149CF01F002A1897C041E06600FFC758A9 +:10C2980078045804C0E049F8201D1AD8E068024D17 +:10C2A8001AD84A3849DC1AD8F01F001D2FCDC0080B +:10C2B800781630CA089B0C9CF01F001EECC9FFF4CE +:10C2C800AC92ACD3E5D2C110ACA3ACC42011AC8203 +:10C2D80032EC2FF1F2C8FFFF300AC05810CBF5D26C +:10C2E800C0082FF1038BF4C2FFFFE80B18005F139F +:10C2F800F80B18005F16E7E60006E8061800CEF10E +:10C30800B28A0389E8091800C1601099CE3B000081 +:10C318008003A1E48003A22880039D9C800094C42C +:10C3280000001D508003A2408000D3188003A2643F +:10C338008002E8BCF0CBFFFB10C9B089B0A9301966 +:10C34800B099B0B96E180E9C101B5C7BF01F000CE6 +:10C3580048C848D6F0050025335A6C0C0A9BF01FD4 +:10C36800000B6C0C0A9A33590E9BF01F0009EDDC88 +:10C37800C0080E9CF01F00070C9CD8328000D21019 +:10C3880000001D5000001D5880011320800114F08A +:10C398008000D13CD421189A303CF80A1800E08873 +:10C3A800000F4BE8201D1AD8E068028A1AD84BC83B +:10C3B8004BCC1AD8F01F003C2FCDC0084BB8E06713 +:10C3C8000118F4070247F007000730180F8B169979 +:10C3D800F00B1800C0A0C603302BF6091800C0F0F7 +:10C3E800F8091800C4C1C4383008AEABAEB8AE986E +:10C3F800EECBFFF43028300CAE88C3680FA92019A3 +:10C408005C59AEA9C4910FBB2FFB5C5BAEBB0F9C04 +:10C41800304EFC0B1800C251F20C1800C1214A4AD8 +:10C4280015FB15CE15DC15EAB16CF9EE118CF9EA9D +:10C43800108AF7EA100AC050AEB9AEA8AE98D82252 +:10C44800EEF801105808C070EEFA0114300BEECC6B +:10C45800FFF45D183008AE883008EF480110D82284 +:10C46800AEABEECBFFF4F01F0013D8226E282018D5 +:10C478008F28C121EF480110AE88D8224878201DA6 +:10C488001AD8E06802C61AD848B8486C1AD8F01FFB +:10C4980000062FCDC008D8228003A1E48003A28023 +:10C4A80080039D9C800094C4000018F000001D507B +:10C4B8008000C21C8003A29CD431580B5F081292E2 +:10C4C80016974BB914967209189558095F04F1E448 +:10C4D8001004E08100B6580CE08000B31989E8091F +:10C4E8001800E08000AEF01F0033E04C00FFE08B46 +:10C4F80000A84B1B0A9CF01F0031C08137F8AEA47E +:10C50800AE88AE9C3018AEB8D8320A9CF01F002C0A +:10C51800F8081618AE88F1DCC208AEBCAE98F1DC9B +:10C52800C108AEA85BFCE081008F4A63300430305C +:10C5380006910788E0081800C171E80400280A9CE1 +:10C54800F00B1503101B2FFBE20B003B2FCBF01F4A +:10C55800001BC0A1E0680118B13449A8F004000428 +:10C56800E8F8010CC0782FF4E6C3FEE85844CE2161 +:10C578003FF8F0091618AE89F3D8C208AEB8AE99DC +:10C58800F3D8C108AEA95BF8C5E1300748E848DB35 +:10C59800118A0E9C0E9930313043F2C0FFFF178488 +:10C5A80016985804C1211297C358000000001D585E +:10C5B8008002EDD08003A2BC8002ECC880011E106E +:10C5C800000018F0000018ECE2041800C0C117C8F9 +:10C5D800F4080104F40801081838E08A0005F9D4C1 +:10C5E800C0081297F3D0C008F6CBFEE8E609180099 +:10C5F800CD513039F2071800E08B0027494BE0682D +:10C608000118EE080248F6080008118BF20B180012 +:10C61800C1B1F4C9FFFFB0CAF1460110301AF142A6 +:10C628000114B08AF0CCFFF448A80A9BB089F01F27 +:10C63800000A0E9CF01F0009E06C00F2D832E06C92 +:10C6480000F7D832D83AE06C00FFD832000018F072 +:10C65800000018EC8002ED708000C39CD40148985B +:10C6680070085808C0D0300CF01F0007301CF01FAD +:10C678000006302CF01F0004303CF01F0003D802E5 +:10C6880000001D588000C39CD421494C4946F01F26 +:10C6980000156C0518975805C1E1F01F00138D0CA3 +:10C6A800C1A0492B0A9AF01F00120A9A491B6C0C68 +:10C6B800F01F00116C085808C0E05807C0C0EE0908 +:10C6C800161848E8B0B7B089F3D7C208EFD7C10841 +:10C6D800B099B0A7D82200008003A2C800001D5856 +:10C6E80080011E10800112008003B40980011260CD +:10C6F8008000C704800111F800001D50D431E068A3 +:10C7080002001496944AF00A1900E08B00E331986D +:10C71800F00A1900E08800DE4DF75C7A30090E9BBC +:10C728000C9CF01F005E8C48F8081900E08100D2CC +:10C738000F993038F0091800E08B00CCE06501183B +:10C74800AB394D75120530290B8AF20A1800E081C1 +:10C7580000C1AA880FBAF5DAC004AADA0FD80FCB3D +:10C76800F1EB108B0FF80FEC5C8BF1EC108C3009AF +:10C778005C8C0FA8F2081800E084009DF20A1800EB +:10C788005F18301AF40B18005F1AF5E81008F20861 +:10C798001800E0810090EAC4FFF42F4708980F8939 +:10C7A800129AE21A00C0E04A00C0C1502FF7C098A0 +:10C7B800F3DBC0082FF7118BF40B1800C7B12FF863 +:10C7C800F2CB00010F8A5809CF41F20A1800C03095 +:10C7D8002FF8CE6B4B0B30082F4B1739129AE21AF1 +:10C7E80000C0E04A00C0C060120B1789F0091800A9 +:10C7F800CF51F1DCC0082FBB300E301A3047C58846 +:10C808001739129CE21C00C0E04C00C0C060120B3B +:10C818001789FC091800CF512FFB17CC17D9B1691C +:10C82800F3EC118917ECF7330008F3EC108917A221 +:10C8380017FC1781F9E91009F73C0009F9E3108C96 +:10C8480017B35C8CE7E2108317925C83E5E11082F2 +:10C85800F4021900C281F4031900C251EE0C190048 +:10C86800C2218B29E8593A80E0880005E8783A80A7 +:10C878008B28EAC7FEF42F6B304A0E9CF01F000984 +:10C88800EAF801105808C250EAFA01140E9B089CF5 +:10C898005D18C1F800001D5C8000CEC4000018F0CF +:10C8A8008002E7365C7C20182F6C5C58180B5808FF +:10C8B800CA81EAF801105808C070EAFA0114300B6E +:10C8C800EACCFFF45D183008AA883008EB4801105C +:10C8D8000C9CF01F0002D8328000D13CD401F01F1C +:10C8E8000003F01F0003D8028000C8F88000C6903B +:10C8F800D42149A949ABF2CCFEC4F2C8FF54300A8E +:10C90800F2C9FF50910A930AB22A172EF14EFFFC82 +:10C918002F092F081838CF71492949382FD9149C65 +:10C92800E019FFFCF0C6FFDC48D7490E910CEE0A6F +:10C938000405189BC098700493042FFB9109FC0A06 +:10C9480005045C8B0809EA0B1900CF632FC82FEA8E +:10C958000C38CED1D8220000000080D48003A2D8A1 +:10C9680000001F5C000072E88003A394D401580BF8 +:10C97800C200F1DBC002C0E048F8201D1AD8E06808 +:10C98800016B1AD848D848EC1AD8F01F000E2FCDE2 +:10C99800C00848D8F00C03299709F00C092B48B8AF +:10C9A800A56CF00C000CF8CCFF54780820189908F6 +:10C9B800D80200008003A2EC8003A33080039D9C72 +:10C9C800800094C4000072E8000080D4D421189834 +:10C9D800588CE088000F49F8201D1AD8E068013DFE +:10C9E8001AD849D849DC1AD8F01F001D2FCDC00825 +:10C9F80049CE49D9FC0C032CF0CAFFF5580CC230BB +:10CA0800A56AF00B15047807F20B000BFC08092740 +:10CA1800F6CBFF5414097608720A2FF8103AF3F887 +:10CA28003A009708F1DCC002C13048A8201D1AD886 +:10CA3800E068014F1AD848D8488C1AD8F01F000867 +:10CA48002FCDC008A56A140992282FF8B228D82239 +:10CA58008003A2EC8003A35080039D9C800094C4B3 +:10CA6800000072E8000080D48003A370580BC0C097 +:10CA780017B8178A179917ABB169F3EA1189F3EB5D +:10CA8800108BF1EB100B993B5EFC580BC0C017B82C +:10CA9800178A179917ABB169F3EA1189F3EB108B71 +:10CAA800F1EB100B992B5EFC4828910C5EFC000002 +:10CAB800000080D0D4211897F9380035EDB800006F +:10CAC800C0D1A1C8F968003578885808C0205D1819 +:10CAD8006E785808C0300E9C5D18D822F93C003595 +:10CAE800F9DCC0015EFC580CF9FB1A075EFCD703A1 +:10CAF800D421300A18971696302C96CBF01F001ABE +:10CB08001895C041E06600FFC2B80C9BF01F0017E3 +:10CB1800EDDCC008C0500A9CF01F0015C2180A9826 +:10CB280070095809C0301298CFCB6EF95809C15016 +:10CB38006F095809C0E148F8201D1AD8E068025367 +:10CB48001AD848D848DC1AD8F01F000D2FCDC008D5 +:10CB58009305EF480040C048EF4800408FF50C9C13 +:10CB6800D82200008000D3188000CF988000D13CE4 +:10CB78008003A3A88003A44480039D9C800094C4E0 +:10CB8800D4211897F9380035EDB80000C170A1A874 +:10CB9800F968003578885808C0205D186E785808FC +:10CBA800C0300E9C5D18EF380035EDB80005C06147 +:10CBB8000E9CEECBFFFCF01F0002D8228001370C40 +:10CBC800D42117881799B169F3E8118917A8F3E8F0 +:10CBD800108917B81697F1E91009189678181039BE +:10CBE800C27049A8700CC0A8780978356C1810393B +:10CBF800C041301BF01F00160A9C580CCF614958E1 +:10CC08007008C14870095809C1006C1A1439C0D19C +:10CC18000F8A0F99B169F3EA11890FAAF3EA10890B +:10CC28000FBAF5E91009910970385808CEC10F8A72 +:10CC38000FB90F98B168F1EA11880FAAF1EA1088C4 +:10CC4800F3E810088D18D8220000820C8000E12437 +:10CC580000008214D421149712961895F01F001022 +:10CC68005807C0C00FB80F8A0F990FA7B169F3EA28 +:10CC78001189F3E71087F1E710078B275806C0C022 +:10CC88000DB80D8A0D990DA6B169F3EA1189F3E67D +:10CC98001086F1E610068B36D82200008000CBC83B +:10CCA800D4213006999899169926993699A6997695 +:10CCB800998699F6F94600404908FAC4FFEC681EBF +:10CCC8006804F96600351185F96500382FF5B085D7 +:10CCD8001897994EF01F000A0E9C5D145C5C4898EA +:10CCE800580CEC071710F1F90000EFF90A00F1F7FA +:10CCF8000A000E9CD82200000000730C8000CC5C57 +:10CD0800000080CC1898300CC0482FFC70085C5C80 +:10CD18005808CFC15EFC580CF9F81207F9B901019F +:10CD2800F1D9E108F9F81C075EFCD703D401580CC7 +:10CD38005F08580B5F09F3E81008C1304978201DD7 +:10CD48001AD8E068028F1AD84958496C1AD8F01FC7 +:10CD580000162FCDC008964AF4080008B848129C5F +:10CD6800984878095809CF819859F0091900C0E006 +:10CD780048A8201D1AD8E06802971AD848B8489CD5 +:10CD88001AD8F01F00092FCDC0089649990BF20850 +:10CD98000008B848D80200008003A4708003A4B437 +:10CDA80080039D9C800094C48003A4ECD421169732 +:10CDB800F01F00065807EFF81207F9B90101F1D979 +:10CDC800E108EFF81C07D8228000CD34D421580C94 +:10CDD800C0E14B58201D1AD8E06801B01AD84B386A +:10CDE8004B3C1AD8F01F00332FCDC008580BC03168 +:10CDF800169CD8223008F00B1900C154F60911000E +:10CE080098585C89F2081900C0F24A78201D1AD88F +:10CE1800E06801B71AD84A884A5C1AD8F01F00257A +:10CE28002FCDC0081699F93E000C300A3037F40EA1 +:10CE380019005F08EE0E19005F061497104678185F +:10CE4800F4061800C0A0F00B01099919F8CAFFF000 +:10CE58001439C2029918DA2A201E3017EE0E19006A +:10CE6800E08B000CF40B1900C1D4985AF20A19008F +:10CE7800C19316189918C0E848B8201D1AD8E06858 +:10CE880001E61AD848D848AC1AD8F01F000A2FCDA6 +:10CE9800C00898581608B8589848F00B000BB84BBB +:10CEA800D82ADA2A8003A47080039EA480039D9C5C +:10CEB800800094C48003A51C8003A53CD43116913E +:10CEC8001497580CC0E14AD8201D1AD8E068033ED0 +:10CED8001AD84AB84ABC1AD8F01F002B2FCDC00860 +:10CEE800580BC070300518960A920A930A90C388A6 +:10CEF8004A28201D1AD8E068033F1AD84A384A1C25 +:10CF08001AD8F01F00212FCDC0085809C0A08C588E +:10CF1800F208010AF0091900C043F3DAB010C1F8A9 +:10CF2800F1D9C0108C54E8090109EE091900EE097D +:10CF380017B06C1BE9D9B010F9D5C010100BE20C72 +:10CF4800000C089A5C7AF01F0012E8030003081727 +:10CF5800E80500055C835C855C8730096C0658062B +:10CF68005F1AE40719005F18F5E80008E0081800E0 +:10CF7800CCD1069CD83200008003A4708003A5B0F1 +:10CF880080039D9C800094C48003A5D08002E7366E +:10CF9800D431580C5F08580B5F0918961697F3E8B8 +:10CFA8001008C06198499648F0091900C0E24C7809 +:10CFB800201D1AD8E06802FE1AD84C584C5C1AD8C2 +:10CFC800F01F00452FCDC00830050A945806C0E16F +:10CFD8004BE8201D1AD8E06803031AD84BF84BDC3D +:10CFE8001AD8F01F003D2FCDC0088C5808995C79DD +:10CFF8008E53F5D8C010F7D3C010121AF3D5C0104D +:10D00800F6090109123AE7D5E413E8091750F1D9EE +:10D01800E51308985C786C1C100CF1D5C0105C8383 +:10D028006E1BF5D3C010100BF01F002DE604000492 +:10D038008C585C84F0041900E088000F4A38201DE1 +:10D048001AD8E068030F1AD84A684A2C1AD8F01F71 +:10D0580000222FCDC008F0041900EDF60000F9B445 +:10D068000000E60500058E585C85F0051900E0888B +:10D07800000F4968201D1AD8E06803151AD849A876 +:10D08800494C1AD8F01F00142FCDC008F00519001C +:10D09800EFF72000F9B502005807C2908E598E4864 +:10D0A800F0091900C2416E085808C2104878201DBE +:10D0B8001AD8E068031F1AD848C8486C1AD8F01F55 +:10D0C80000062FCDC00800008003A4708003A5F4DB +:10D0D80080039D9C800094C48003A6248002E736C8 +:10D0E8008003A6348003A64C8003A6685806C16056 +:10D0F8008C598C48F0091900C1116C085808C0E017 +:10D108004898201D1AD8E06803241AD84878488C13 +:10D118001AD8F01F00082FCDC0085807FE91FF58F5 +:10D128000E9CD8328003A4708003A66880039D9C5F +:10D13800800094C4D421189B580CC0E14AB8201D23 +:10D148001AD8E068021C1AD84A984AAC1AD8F01FB4 +:10D15800002A2FCDC008F939000C3038F009180022 +:10D16800E088000F4A18201D1AD8E06802281AD84B +:10D178004A284A0C1AD8F01F00202FCDC0083007C3 +:10D18800303530169679F2C800015C885809C0E13C +:10D198004968201D1AD8E06802351AD84988495CC0 +:10D1A8001AD8F01F00152FCDC008B6785808C1B19D +:10D1B800F738000C169CF0C900017604EA0819003B +:10D1C800C031308CC068EC091900E08B0006307C57 +:10D1D800F01F000CC038F01F000C2FF7089B5C579D +:10D1E8005804CD110E9CD8228003A47080039EA4FD +:10D1F80080039D9C800094C48003A6948003A6AC01 +:10D208008000C9748002E28CD421580CC0E14B988C +:10D21800201D1AD8E068015F1AD84B784B7C1AD8C1 +:10D22800F01F00372FCDC0083019F938000CF2086C +:10D2380018005F1A3039F20818005F19F5E900097B +:10D24800C1405808C1203029F2081800C0E04A98A7 +:10D25800201D1AD8E06801631AD84AA84A7C1AD84F +:10D26800F01F00272FCDC0089848F00B1900C3F213 +:10D27800F3D8C0101897F1DBB0105C7B121BC27892 +:10D28800E04BFFFEE08A000F49A8201D1AD8E0688D +:10D2980001771AD849C8499C1AD8F01F00192FCD10 +:10D2A800C0088E481608AE486E075807C0E14918EE +:10D2B800201D1AD8E068017B1AD8494848FC1AD8BA +:10D2C800F01F000F2FCDC008F1DAB0108E59F00909 +:10D2D800010AF2081900FE9BFFD5AE48AE586E0C45 +:10D2E800580CC030F01F000A30088F08D822000000 +:10D2F8008003A4708003A70080039D9C800094C4D1 +:10D308008003A7188003A7348003A7488000D13C76 +:10D31800D431202D16971495581CC0B0C083582CB2 +:10D32800C040583CC0B1C1783004C0583144C0280E +:10D3380030042EC42E445C84C0F84C08201D1AD832 +:10D34800E06800D11AD84BE84BEC1AD8F01F003E21 +:10D358002FCDC00830045825E08B00065815E08210 +:10D3680000DDCBF85835E08100E6308CF01F00373F +:10D378001896E08000F25C740E99E8C8FFFD5C79AD +:10D38800E018FFFCB847E06A02443000F4080108DE +:10D39800F8040004F0090D472ED4E014FFFCAC5744 +:10D3A8009914F965000C99005C77F8C3FDAC0E047C +:10D3B8000833C0E24A18201D1AD8E06800EB1AD8D2 +:10D3C8004A384A0C1AD8F01F00202FCDC008580838 +:10D3D800E089000F4998201D1AD8E06800ED1AD896 +:10D3E80049C8498C1AD8F01F00182FCDC008F20779 +:10D3F800010700980A9918943015E0610243B8753E +:10D40800E0620244C6A850195008308CF01F000F83 +:10D418000E9B189A5C8BF4CEFFF0F6011900F60CFF +:10D428001720E40C173040194008580AC1610C9CB9 +:10D438001496F01F0009C9088003A4708003A76030 +:10D4480080039D9C800094C48000C9D48003A77C7D +:10D458008003A7B08000D13C9508890AF569000CC3 +:10D46800F560000DE047FFFFC0E14BD8201D1AD83A +:10D47800E06801071AD84BB84BBC1AD8F01F003B1C +:10D488002FCDC008951EB45CB44BFDDEC002C0E0D1 +:10D498004B38201D1AD8E068010D1AD84B484B2C80 +:10D4A8001AD8F01F00322FCDC0085C7C8CDB18170F +:10D4B80014946C1CF80B000B1633C0E24A88201D2C +:10D4C8001AD8E06801101AD84AA84A7C1AD8F01F5E +:10D4D80000272FCDC008B4755807FE99FF96C3786A +:10D4E8000E985C782FD8E018FFFC5C74E8CCFFED50 +:10D4F800E01CFFFC100CF01F00201896C2D030086A +:10D50800F8040004AC572ED4B847E014FFFCF968BF +:10D51800000C99149908C1B8307CF01F00181896AF +:10D52800C1B03008AC57F965000CB847990899188C +:10D53800C0E848B8201D1AD8E068013D1AD8490843 +:10D54800489C1AD8F01F00092FCDC0083018AC78B5 +:10D558003008ED68000D0C9C2FEDD8328003A470C4 +:10D568008003A7E480039D9C800094C48003A7F8EF +:10D578008003A77C8002E2A48000C9D48003A82885 +:10D58800D43149B8781918951094300CF2C2FFF4C8 +:10D59800F3310009700718961893C1E8EF380010A6 +:10D5A8000238C1716E585808C1400A9A0E9B6E6CB9 +:10D5B80004995D18C0E05806C0410C95301CC0A8FD +:10D5C8006E388D3868088F388907301C3005C028B8 +:10D5D800300C0E966E37E60C18005F0858075F1976 +:10D5E800F3E80008E6081800CDA1D832000073104F +:10D5F800E06C00FB5EFCD421E067040078A8F90B1E +:10D60800002C78C9F5DBC010F90E003C100AEE0EAC +:10D618001900E0880005E06E0400C0285C7EF4096B +:10D628000107EE0E010EC076F95B002E78CCF40CE3 +:10D63800010CD822F009010A580AE08A00063008CD +:10D64800F958002ED82AF2080108F958002ED82ACD +:10D65800996B5EFCF94B008C5EFCF94B00885EFC14 +:10D66800F94B00985EFC998B5EFCF96A0039F94B1E +:10D6780000945EFC5EFC5EFC48A87008C028703808 +:10D688005808CFE148887008C02870385808CFE19A +:10D6980048687008C02870385808CFE15EFC000060 +:10D6A8000000820C0000821400008220D4014A6825 +:10D6B8007008C30870495809C0E14A48201D1AD8A3 +:10D6C800E06805AC1AD84A284A2C1AD8F01F00225C +:10D6D8002FCDC0085819C0E149C8201D1AD8E068E4 +:10D6E80005AD1AD849D849BC1AD8F01F001B2FCD50 +:10D6F800C00858A9C0E14958201D1AD8E06805AEED +:10D708001AD84978493C1AD8F01F00132FCDC00801 +:10D7180070385808CD0149387008C128704958A98F +:10D72800C0E048A8201D1AD8E06805B11AD848E812 +:10D73800488C1AD8F01F00082FCDC0087038580838 +:10D74800CEE1DA0A0000820C8003A8688003A8AC46 +:10D7580080039D9C800094C48003A8D88003A904FA +:10D76800000082208003A934D43118961497784891 +:10D778005808C0E04C48201D1AD8E068011A1AD889 +:10D788004C284C3C1AD8F01F00432FCDC008580A2B +:10D79800C3514C19720C4C19720A4C19109E9207FD +:10D7A8004C08E069100070052FF70A985C87EE0EA8 +:10D7B8001900F2071790C088F104001C0E93EE04BC +:10D7C8001900CF3070385808CF811898C088F104F4 +:10D7D800001C0E93EE041900CE8070385808CF81D3 +:10D7E8001498C088F104001C0E93EE041900CDD0E3 +:10D7F80070385808CF814AA8B0074A887008C1F81D +:10D80800F109001C0E93EE091900C181700A580A2B +:10D81800E0800099580BE0800096178C1799B16941 +:10D82800F3EC118917ACF3EC108917BCF9E910096E +:10D83800E0800089123AE080008670385808CE11DE +:10D8480049887008C1A8F109001CEE091900C141F6 +:10D85800700A580AC770580BC750178C1799B169C6 +:10D86800F3EC118917ACF3EC108917BCF9E910092E +:10D87800C690123AC67070385808CE6148A870052C +:10D888000A98C2D88003A8688003A96080039D9C79 +:10D89800800094C40000822000008214000001F877 +:10D8A8000000820C0000821CF109001C0E93EE0996 +:10D8B8001900C141700A580AC450580BC430178C5B +:10D8C8001799B169F3EC118917ACF3EC108917BCFF +:10D8D800F9E91009C370123AC35070385808CE518C +:10D8E80049A87008C158F109001CEE091900C0F1D7 +:10D8F800178A1799B169F3EA118917AAF3EA108907 +:10D9080017BAF5E91009700A123AC1C070385808F8 +:10D91800CEB1580BC11017891798B168F1E9118871 +:10D9280017A9F1E9108817B9F3E81008C050304A70 +:10D938000C9CF01F00078D354868ED57001C9106B8 +:10D94800D83AE06C00F5D832000082208002E73631 +:10D958000000821CD4211897169CF01F0008C0B044 +:10D96800F908002C5808C0702288EE081900F00742 +:10D9780017305C870E9CD82280012228D421F90810 +:10D98800002C1897F3D8C010E06CFFFFF5DBC0102F +:10D99800F8090109123AE08A000F4948201D1AD8EF +:10D9A800E06801BD1AD84928492C1AD8F01F00127E +:10D9B8002FCDC008100BE0680800EF5B002CF00BBF +:10D9C8001900EFF8BC160E9CF01F000CE04C01FF8C +:10D9D800E08A000AEF380026A1B80E9CEF680026FE +:10D9E800F01F0007D82200008003A8688003A988D8 +:10D9F80080039D9C800094C48000D5FE80010CECBF +:10DA0800D4211896304CF01F000A1897C0E0ECE8B3 +:10DA18000000F8E90000ECE80008F8E900086C48A4 +:10DA28009948781CF01F00030E9CD8228000C9D4A6 +:10DA38008000CD1ED4211896580CC0311897C0B854 +:10DA4800781C580CC030F01F000518970C9B304C00 +:10DA5800F01F00030E9CD8228000D13C8000C974BE +:10DA6800D42130071896C0880C9C6C06F01F00055E +:10DA7800F80700075C575806CF810E9CD822000093 +:10DA88008000DA3CD4217848189758A85F1A5808BB +:10DA98005F19F5E90009C2005818C1E0F8FC0084D4 +:10DAA800580CC060F01F000D3008EF4800843FF8A4 +:10DAB800EEFC0080EF58003AF01F000930066FECCA +:10DAC800EF460080F01F00066FFCF01F0005EF46D0 +:10DAD800007CEF460078D8228000D13C8000DA68CC +:10DAE800D421169778081638C04176389908C11895 +:10DAF8004B899308C0A870390E39C0614B599308F7 +:10DB08006E399139C06812985808CF614B1993083B +:10DB180030060E9C8F36F01F00306E4858A85F19EB +:10DB280058185F181268EC081800C0C0EF380026B3 +:10DB3800EDB80000C071A1B80E9CEF680026F01F78 +:10DB480000276E485818C3206FE85808C0E04A48B4 +:10DB5800201D1AD8E06804F91AD84A284A2C1AD87D +:10DB6800F01F00222FCDC0086FF85808C0E049C840 +:10DB7800201D1AD8E06804FA1AD849D849AC1AD82E +:10DB8800F01F001A2FCDC008EEF800805808C0E03A +:10DB98004938201D1AD8E06804FC1AD84958492C7D +:10DBA8001AD8F01F00122FCDC00830088F48F01F78 +:10DBB8000012C0E148A8201D1AD8E06805021AD84A +:10DBC80048E8489C1AD8F01F00092FCDC008D82271 +:10DBD800000082188000DA8C80010CEC8003A868B1 +:10DBE8008003A9AC80039D9C800094C48003A9C4D1 +:10DBF8008003A9E08000D6B48003A9F8D42118973F +:10DC080078485808C0E04A68201D1AD8E0680175AD +:10DC18001AD84A484A4C1AD8F01F00242FCDC008F9 +:10DC2800303CF01F00231896C380EF08001CF958F9 +:10DC3800001C6E6899688E48A1B8B8483018994891 +:10DC4800EF38000BF968000BEF38000AF968000A92 +:10DC58006E089908497972080E38C0316E38C108C3 +:10DC680049599308C0A870390E39C06149299308E9 +:10DC78006E399139C06812985808CF6148E99308FD +:10DC880030080E9B8F38302CF01F000C48C948D83C +:10DC98008D8970098D3991060C9CD8228003A8685B +:10DCA8008003AA1880039D9C800094C48000C9D476 +:10DCB8000000821C000082188000C9748000D5F81A +:10DCC80000008214D431204D4B583005700910964D +:10DCD8002FF90A9491090A934B2830627007E08F54 +:10DCE800019E6E485808C0E14AF8201D1AD8E0681D +:10DCF80002571AD84AD84AEC1AD8F01F002E2FCD4E +:10DD0800C0085818C0E14A88201D1AD8E06802588F +:10DD18001AD84A984A6C1AD8F01F00262FCDC00886 +:10DD280058A8C0E14A08201D1AD8E06802591AD834 +:10DD38004A2849FC1AD8F01F001F2FCDC0085828C0 +:10DD4800C071EF38004EE4081800E0800081EF3819 +:10DD5800004E30CAF4081800C7A0EF3800AC10997C +:10DD6800E8081800C300EEF900A82FF9EF4900A849 +:10DD7800493A100AF53AFFFF1439C6B33009EF499A +:10DD880000A8E4081800F9B90801F1D9E808EFF883 +:10DD98008EAC0E9CF01F000BC5C80000000082105E +:10DDA8000000820C8003A8688003AA3C80039D9C25 +:10DDB800800094C48003AA688003AA948003AC38C6 +:10DDC80080010A20EF08003AE6081900F9B90401B1 +:10DDD800F1D9E408EFF84C1D6FF85808C3A0EF0913 +:10DDE800003AEF08004CF0091900C3356E4858286E +:10DDF800C100EF09004AEF0800484CD1A3581208A7 +:10DE0800EF39004EE2090709F0090948EF58004CBC +:10DE1800EF080060EF090056F0091900F00917B083 +:10DE2800EF08003CF3D9C02FEF590058F00A15014C +:10DE3800F0091900EFFA3C2CEF08003CEF53003AC8 +:10DE4800EF5800560E9CF01F003BC0383018C02811 +:10DE580030086E495869C0B16C0B6EDAF60A010ACF +:10DE6800E04A0028E08800042FF85C588ECAEDBA12 +:10DE78000003C39158495F0A58795F091449E809B2 +:10DE88001800C3106C0AEEFC00A0EEF100A4F80123 +:10DE980002416ED9EEFB009CF4090109E20B000E69 +:10DEA800E06A01F4FC0A0D00FAE100080039E08894 +:10DEB80000062FF830115C58C178EF3100ADE20C44 +:10DEC800034BF60A0D0A1439E088000E50180E9C10 +:10DED800F01F0019EF3900AD30012FF9EF6900ADDF +:10DEE8004018C0283001EEFC0080580CC1106ED9D3 +:10DEF8006C0A121AEF09004CF2091006123AC08394 +:10DF08005018F01F000E30004018EF4000806E4996 +:10DF18005839C1516C0A6ED9F4090109E049002841 +:10DF2800E08800182FF85C58C14800008003A85802 +:10DF3800800110608001109C8000DA685899C091B7 +:10DF48006C0A6ED9F4090109E04900F0E08B00047D +:10DF58005808C4900E9CF01F00434C385805C14027 +:10DF680070081037C0E14C18201D1AD8E06802E488 +:10DF78001AD84BF84BFC1AD8F01F003F2FCDC00819 +:10DF88006E388B38C13870090E39C0E04B78201DC7 +:10DF98001AD8E06802E81AD84B884B6C1AD8F01FD8 +:10DFA80000362FCDC0086E399109EEF80098580850 +:10DFB800C0403FBB6E6C5D185801C0F0EF180024DC +:10DFC800201DEEC9FFFC1AD80E9AEF18001C6EAB84 +:10DFD8006F7CF01F002B2FED0E9B302C6E37F01F3F +:10DFE8000029C1C8EF3900382FF9EF690038EF3A36 +:10DFF8000039F20A1800E08B0010EF680038EEF8DC +:10E0080000945808C0600E9B6E6C5D185C5CC04143 +:10E018000E9CF01F001D0E956E375807FE91FE638B +:10E0280049A849B410957006C6086C4858A8C0E0BD +:10E0380048E8201D1AD8E068030C1AD8495848DC6B +:10E048001AD8F01F000D2FCDC00868096CD8F20847 +:10E058000108E04800F0E08B004C0C976C36C4587F +:10E068008000DA8C0000820C8003A8688003AAC4B0 +:10E0780080039D9C800094C48003AAF08001023430 +:10E088008000C97480010CEC00008220000082101E +:10E098008003AB1C6A081036C0E149A8201D1AD8B5 +:10E0A800E068031B1AD84988498C1AD8F01F001851 +:10E0B8002FCDC0086C388F38C1386A080C38C0E0DA +:10E0C8004908201D1AD8E068031F1AD8491848FCC7 +:10E0D8001AD8F01F000F2FCDC0086C388B080C9B86 +:10E0E800302C6C36F01F000C5806CA01C0780C9C06 +:10E0F800F01F000A5807CCF1CE1B2FCDD8320000F4 +:10E108008003A8688003AB4C80039D9C800094C466 +:10E118008003AB748000C9748000DA8CD431202D60 +:10E1280018951691784858A8C0A1189B4A2CF01F3A +:10E1380000230A9B302CF01F0022C3B8780850082F +:10E148007818F903001C5018F9020024797778A68A +:10E15800F8F400987860189B49ACF01F00186BFC25 +:10E16800580CC030F01F00186BEC580CC030F01F72 +:10E178000016EAFC0080580CC030F01F00130A9B00 +:10E18800302CF01F000F5804C040009C3FBB5D14AA +:10E198005801C0F0201D5C72F1D3C0101AD20C9B3C +:10E1A800FAC9FFF4FACAFFF80E9CF01F00082FED19 +:10E1B8002FEDD832000082208000DAE88000C97490 +:10E1C8000000820C8000DA6880010234D42118969D +:10E1D800302CF01F00511897C5114D084D0A189999 +:10E1E8007008740BC0A870DAF60A010A123AF4092A +:10E1F8001720F00C172070385808CF61580CC04011 +:10E20800301BF01F0048302CF01F00431897C30143 +:10E218004C584C3A18997008740E37FBC178F13A8B +:10E228000014EC0A1800E08B000DF60A1800E08BC9 +:10E23800000970D7FC0701071237C033109CC0389B +:10E24800169A12977038149B0E995808CE91580C4C +:10E25800C040301BF01F0033302CF01F002F1897E0 +:10E26800C5704B28F10900D42019F15900D44AF897 +:10E27800F10900D42019F15900D4E06A00B0300B3C +:10E288000E9CF01F002B3408EF6800143FF8EF686D +:10E29800000B4A384A7A70097408F2080008950891 +:10E2A800EF48006CEF480068EF48005CEF4800500A +:10E2B8003008EF6800ADEF680038E0680800EF58F4 +:10E2C800002EEF58002C3068EF58004AEF58004CE9 +:10E2D800E0681000EF580072E0680200EF58003C58 +:10E2E8003FF8EF58003A3018EF5800564928EF48E1 +:10E2F800008CE068DD00EA18006DEF48009CE078CB +:10E3080024F88FD9EF4800A03098EF4800A40E9C5D +:10E31800D82200008000C9D40000822000008210AA +:10E328008000E1240000820C000080D48002E8BC58 +:10E33800000001F48000E5ECD401340CF01F000269 +:10E34800D80200008000E1D4D431189714961293B3 +:10E35800169578445804C0E04C98201D1AD8E068F7 +:10E36800020A1AD84C784C8C1AD8F01F00482FCDC6 +:10E37800C008580BC041E06600F7CB78304A140C4F +:10E38800F01F0043EF560024EF08001CE8081900AE +:10E39800C34110944BF84C0970064C08720B700C72 +:10E3A8004BF9E06A100092082FF80C995C88F00489 +:10E3B8001900F4081790C078F30E001CF00E19002D +:10E3C800CF4072395809CF911899C078F30E001CC4 +:10E3D800F00E1900CEA072395809CF911699C0785D +:10E3E800F30E001CF00E1900CE0072395809CF91B7 +:10E3F8004AB9B208EF58001C4AA84AB9700A72080C +:10E40800F40800089308EF48005CF0C90001E068D0 +:10E418000800EF580060EF58002CEF58002E300825 +:10E428008FC88FA8E0680200EF49006CEF490050E0 +:10E43800EF58003C0A9BE06C0200F01F001C5C8C4B +:10E44800F808100AEF5800583018EF430090EF58BA +:10E458000056EF5C003C30288F48495972080E3846 +:10E46800C0316E38C2C849399308C26870390E394C +:10E47800C221490993086E399139C2288003A868D6 +:10E488008003AB9C80039D9C800094C48002E73687 +:10E498000000820C0000821400008220000001F8B5 +:10E4A80000008210000001F48000D95C0000821C8A +:10E4B8000000821812985808CDA148D9930848D866 +:10E4C80070098F3991073019201D30081AD9109A10 +:10E4D8003029109B0E9CF01F00082FEDEDDCC008C2 +:10E4E800C0410E9CF01F00050C9CD8320000821819 +:10E4F8000000820C8001035080010CECD421189795 +:10E5080078465826C390E08B00075806C0C05816B6 +:10E51800C071C2785846C370C3635876C3C030060A +:10E528000C97C4184A8972081838C0317838C1085D +:10E538004A699308C0A870390E39C0614A399308EE +:10E548006E399139C06812985808CF6149F9930813 +:10E5580030080E9B8F38302C1097F01F001DC0A874 +:10E56800189B49CCF01F001C0E9B303CF01F001874 +:10E5780030070E96C188189B498CF01F00170E9B18 +:10E588000C9CCF5B301BF01F0016EDDCC008C0B13F +:10E598003058C088301BF01F0012EDDCC008C031B5 +:10E5A80030988F4858075F193008F00618005F0A3E +:10E5B800F5E90009F0091800C0400E9CF01F000999 +:10E5C8000C9CD8220000821C000082188000C974AC +:10E5D800000082148000DAE80000820C80010A0042 +:10E5E80080010CECD421169C1497580AC08094CB57 +:10E5F800F01F00070E9CF01F0007D82A5809C030EA +:10E60800149CD822F01F00045C5CD8228000D984B6 +:10E618008000D13C8000E504D42149887007C2A855 +:10E62800EEFB0084580BC140169AEEF8008C58088F +:10E63800C06030090E9B6E6C5D18C078169A1099F0 +:10E648000E9B109CF01F000E5C5CEFFC0A21EF385B +:10E658000026EDB80000C0D1A1B80E9CEF680026D6 +:10E66800F01F0008EF380026E018FFFCEF680026CE +:10E678006E375807CD61D8220000820C8000E5EC87 +:10E6880080010CECD401F01F0007487913882FF89B +:10E698005C58B288EDB80000C031F01F0004D80201 +:10E6A8008000E620000073148000DCCCD4314A6876 +:10E6B80070063058ED3E000C2EC6A58EF00E1900DF +:10E6C800E0880040205E3008A36E30175C8E302151 +:10E6D8003042E7DEC010E06401FFE0650200C2E8F6 +:10E6E800F5D8C010EC0A070BEE0B1800C080C293D7 +:10E6F800EC0A0009E20B1800C1B1C0382FF8C1D8E4 +:10E70800139BE40B1800C1D12FDA063AC1A413BA3F +:10E718002FC813A95C88F5E910895C89F2CA000141 +:10E72800E80A1900EA0917B0F959003CC0781399AA +:10E738005809C070F20800085C88FC081900CD135D +:10E74800D832000000007318D4217848189616971C +:10E75800F138000DEDB80000C1C1169C3007F01F5C +:10E768000020C368F138000DEDB80000C0E16C4826 +:10E77800F13A000CF139000DF3EA1089A1A9F16909 +:10E78800000DA989F169000C6E07F01F0016C0285A +:10E7980049555807C1D06E4811C411DBB16BF7E475 +:10E7A800118B11E48EEEF7E4108B6A0A8CE911F4F0 +:10E7B8000E9CE9EB100B16191409F20E010ECD3759 +:10E7C800C098141B6C1CAC6B5C7BF01F00088D0799 +:10E7D800D8225809FE99FFF7CFBB00008000DA68FD +:10E7E8008000DA3C0000731C8000D210D4314C58F1 +:10E7F80018971188EDB80004E081020C79994C282B +:10E80800F90C006070086FAAF208010BC186103974 +:10E81800C0614BE87008F4080108C1164BB87008CD +:10E82800103AC2914BA87008F139000FF138000E68 +:10E83800F3E81088F8081900E088001E4B487009B2 +:10E84800F338000FF339000EF1E910884AE972092C +:10E858005C88EF490064EF5800604AC97209EF49C3 +:10E8680000685808C080EF3900AC3008F00918007B +:10E87800EFF81EAC4A586F497008F009010B580BA5 +:10E88800E089004C3006EF5600704A2B960BEC0BD3 +:10E898001900C3215C7CEF160060F80A000A6FAC0F +:10E8A800EC0C000C143CC281EF0A003AF60A19007D +:10E8B800C2351039C211EF3800542FF85C58EF6890 +:10E8C80000543039F2081800E088000FEF090056AC +:10E8D800EF08003C12085C88F2081900E088014A39 +:10E8E800EF580056C469F2081800E08101430E9CF5 +:10E8F800F01F0009C3E93008EF680054C3A90000FD +:10E90800000073280000731C0000732400007318B3 +:10E91800000073208001016A5CD91009E08600D1EB +:10E928006F7912185808E08900CCEF380026EDB846 +:10E938000002C081A3C8EF680026EF080058EF580E +:10E948000056300A4D39EF6A004E720BEF6A0054D8 +:10E9580072096F48EF490050F6080108EF09007284 +:10E96800EF580070F2080008EF09004AEF580072EB +:10E97800EF080048A358F2080008EF58004C6E480A +:10E988005838E0880066EF080056EF090058F0098B +:10E998001900E0880006EF09003C1009C0A8EF192B +:10E9A800003CB339F7D8C010F20B0C0AF408000980 +:10E9B8005C89F0091900E088004CEF590056C488BA +:10E9C8006C08EF030074EF48007C6C1CF01F0032E9 +:10E9D800F8031900C0E24B18201D1AD8E06803B3E9 +:10E9E8001AD84AF84AFC1AD8F01F002F2FCDC008B1 +:10E9F800EF0800705808C09020186C49F339000DD2 +:10EA0800EDB90000EFF80C38EF0300746C1CF01F30 +:10EA1800002218130C9CEF530074F01F0024EF0819 +:10EA28000074EA081900C1606FF85808C1316FE82E +:10EA38005808C1014998201D1AD8E06803BF1AD8A0 +:10EA480049B8498C1AD8F01F00182FCDC0084914AE +:10EA580030056FF65806C2D06C4811CBF139000D5D +:10EA6800F3D9C0025F1A11D9B169F3EB118911EB1F +:10EA7800F3EB108911F81248680912188CE9F409A7 +:10EA8800000912085808FE9AFF9DE08F045F0000F5 +:10EA9800000073248000CD0C8003AC608003ACA818 +:10EAA80080039D9C800094C48000DA3C8003ACD035 +:10EAB8003FF8EF58003A3008EF680038C5A830082A +:10EAC800EF580070C5686C08EF030074EF480078D1 +:10EAD8006C1CF01F0021F8031900C0E249F8201D42 +:10EAE8001AD8E06803E01AD849D849EC1AD8F01FB8 +:10EAF800001E2FCDC008EF0800705808C0902018DD +:10EB08006C49F339000DEDB90000EFF80C38EF034C +:10EB180000746C1CF01F001018130C9CEF53007449 +:10EB2800F01F0012EF080074EA081900C2406FF8DD +:10EB38005808C2116FE85808C1E14888201D1AD842 +:10EB4800E06803EA1AD848A8486C1AD8F01F0006EB +:10EB58002FCDC0088000CD0C8003AC608003ACA82A +:10EB680080039D9C800094C48000DA3C8003ACD074 +:10EB78004C5430056FE65806C2106C4811CCF13978 +:10EB8800000D11DAF3D9C002B16AF5EC118A11EC63 +:10EB980011F858095F1B6809F5EC108AF1EA100AA8 +:10EBA8008CE8F20A010AF6080008F4080108C066B1 +:10EBB8006F7810195809FE9AFF886F085808C29094 +:10EBC8004B196F1A7209F4090109C2374AFB760B0F +:10EBD800EF0A0048F6080108F40B140316185C88BD +:10EBE800F00A000A5C8AEF09004AF40B14035C4837 +:10EBF800EF5A0048F20A14021419F2080008F6083D +:10EC08000009EF58004AEF59004C3008EF4800401F +:10EC180049F84A09900A6EA8580AE0800381720BE5 +:10EC2800F60911FF1009E08600B15C7AF0C9FFFF10 +:10EC38001619F20A010A580AE08900A849697216E9 +:10EC48005806C0E14958201D1AD8E06804461AD869 +:10EC58004938494C1AD8F01F00142FCDC008F00BC2 +:10EC6800010BE04B7FFEE08A002348C8201D1AD81C +:10EC7800E06804471AD848D848AC1AD8F01F000AE8 +:10EC88002FCDC008000073240000821000007320FC +:10EC98000000731C000073348003AC608003ACF088 +:10ECA80080039D9C800094C48003AD008CD81638E6 +:10ECB800C3148C48F3D8C0101639C0E44AB8201DD4 +:10ECC8001AD8E06804491AD84A984AAC1AD8F01FEA +:10ECD800002A2FCDC0081618300A5C88C058AC48E6 +:10ECE800AC5A121B6C068CD91639CFA55C3B0C9C10 +:10ECF8005C8BF01F0022C21049C8201D1AD8E0689A +:10ED080004561AD849E849BC1AD8F01F001B2FCD61 +:10ED1800C0085C3B0C9C5C8BF01F0018C0E04938B5 +:10ED2800201D1AD8E068045B1AD84958491C1AD81B +:10ED3800F01F00112FCDC0086C1A4929932A492ABF +:10ED48006EA8740B926C9508F80B000A101AB26A38 +:10ED5800F00A16187249B2F8B2CAF5D8C208F1D842 +:10ED6800C108B2DAB2E8C1B88003AC608003AD1064 +:10ED780080039D9C800094C48000CDD48003AD2086 +:10ED8800000073340000731C101BC097EF38002676 +:10ED9800A1B80E9CEF680026F01F00424C256EA912 +:10EDA8006A08F009010AE08602B7F0CAFFFFEF1B04 +:10EDB800002C121A161A580AE08902AE1039E0819E +:10EDC80001F54BA8906A7048F139000DF3D9C002DB +:10EDD8005F19F40900094B6AB409EF0A002CF20A1A +:10EDE8001900C462F13A000CF139000DF3EA1089F8 +:10EDF8005C89EDB90000C081E219FFFEF169000DE0 +:10EE0800A989F169000C4A98EF0A002CB06A704988 +:10EE1800F339000DEDB90001C031201AB06A4A3645 +:10EE28008CEB6C1CF01F00238C696C48F138000DCA +:10EE3800F1D8C0025F18F208000849D9B20849A9F8 +:10EE480072095C78EF1A002C12086EA9F4090009FF +:10EE58001238C0E04988201D1AD8E068048B1AD8F7 +:10EE68004968497C1AD8F01F00172FCDC008EEF664 +:10EE780000805806E08000BE48C46848F138000D9C +:10EE8800EDB80000C080C4B8109C7008EF4800803E +:10EE9800F01F000DEEF800805808CF71CAA80000D6 +:10EEA80080010CEC0000731C000073340000732018 +:10EEB8008000D2108003AC608003AD3480039D9C39 +:10EEC800800094C48000DA3CF138000DEDB80000F1 +:10EED800C1F16848F139000DF13A000CF3EA108AE3 +:10EEE8005C8A1499A1A95C79F20B1608EDBA0001A5 +:10EEF800C0F0F169000DF16B000C68488869F138C1 +:10EF0800000DF1D8C0025F18F2080008A6086C05C9 +:10EF18000A96F01F00455805C041C6984C324C432C +:10EF28006C4811C5868A11D9B169F3E5118911E5D3 +:10EF38008CEBF3E510890C9C11F5EBE91009F40949 +:10EF48000109640A1409F20B010BCBF7E08F0201E7 +:10EF58004B89EEF80080704811FB11C511DC11E8EF +:10EF6800B16CF9E5118CF9E81088F7E81008F00A97 +:10EF7800010A5C8AB26A7248F138000DEDB80001E6 +:10EF8800C031201AB26A4AB58AEB6A1CF01F002AFF +:10EF98008A696A48F138000DF1D8C0025F18F20892 +:10EFA80000084A39B2085C784A097209F009000A6F +:10EFB800EEF80080704811FB11CC11D911E8B16945 +:10EFC800F3EC1189F3E81089F7E91009123AC0E067 +:10EFD80049A8201D1AD8E06804C31AD84988499C52 +:10EFE8001AD8F01F00192FCDC0080C95EF450080E6 +:10EFF80048F848E9908A7209F40900098FA990082D +:10F00800EF09002CF0091900C22248C8201D1AD89F +:10F01800E06804CD1AD848D848AC1AD8F01F000ABE +:10F028002FCDC0088000DA3C0000731C000073205C +:10F03800000073348000D2108003AC608003AD6C94 +:10F0480080039D9C800094C48003ADA810190E9C79 +:10F05800EF59002CF01F004A4CA8300A7019924B47 +:10F06800F40B1900C0504C8A9509300991194C5875 +:10F078007048F138000DEDB80000C5B14C3913885F +:10F08800A5B8B288C56881098CEAF13B000DF7DBA9 +:10F09800C0025F1BF60A000A14098FA9EF0A002CA8 +:10F0A800F138000D8C69F1D8C002F7D9C0105808A2 +:10F0B8005F1EF9DAC010FC0B000B163CC0E44B488D +:10F0C800201D1AD8E06804F21AD84B284B2C1AD8FD +:10F0D800F01F00322FCDC008F409010958085F1845 +:10F0E800F20801080E9CEF58002CF01F00256C1B3D +:10F0F8009648E2081900C090680C580CC040F01FF0 +:10F108000028C028890B8D126C48F138000DEDB825 +:10F118000000C0810B88A5B8AA886E485848EFF34C +:10F128000A046C080C9CEF480080F01F001EC07891 +:10F1380049D030014944300249453073EEF6008029 +:10F148005806C1006C4811CB11D9B169F3EB11898C +:10F1580011EB6EAAF3EB108911FBF7E910091439CA +:10F16800C930EF380026EDB80000C041A1C80E9C98 +:10F17800CE68A1A8EF680026D83200008000D5FE2E +:10F18800000073340000732C000073298003AC6006 +:10F198008003ADC880039D9C800094C48000CD345A +:10F1A8008000DA3C0000731C0E9CF01F0040EEF655 +:10F1B80000805806C0714BECF01F003EEF4C0080F9 +:10F1C800D8326A093005F2CCFFFF6C4811CB11DA4E +:10F1D800B16AF5EB118A11EBF5EB108A11FBF7EA2E +:10F1E800100A1439C1214B2C8C689869F009190050 +:10F1F800E08800B4F01F002FE08000B05805EBFC59 +:10F208001A00EFFC0A20C0D85805C0D1F20A010B39 +:10F21800C4574A7CF01F0027E08000A0EF4C008014 +:10F228000C9BC3986A4B17F417C217D317EBB1633B +:10F23800E7E21183E7EB108BE9EB100B5CDB120BB9 +:10F24800C2D6F80A010B580BE0890029498CF01F37 +:10F2580000191897E08000826A4811F911CA11DB79 +:10F2680011E8B16BF7EA118BF7E8108B4928F3EB3B +:10F27800100B70088AE9101916095809E08A000964 +:10F28800F00B010B6A1CAA6B5C7BF01F000C8B0750 +:10F298000C9B0E9CF01F000AD8326C0B0C95580B77 +:10F2A800C1001696C93B000080010BF000007334C2 +:10F2B8008000DA080000731C8000D2108000E7503C +:10F2C80014195809E08A004AF138000DEDB8000019 +:10F2D800C4404A3CF01F00238D0CC3F06C4811F960 +:10F2E80011CA11DB11E8B16BF7EA118BF7E8108B43 +:10F2F80049D8F3EB100B70088CE910191609580956 +:10F30800E08A002CF00B010B6C1CAC6B5C7BF01FD3 +:10F318000017D8320E9CF01F0016D832720BF60870 +:10F328000109C0A62FFBEF19002CF60801081218D6 +:10F338005808E08A00130E9CEF380026A1B8EF6841 +:10F348000026F01F000CD8323008FE9FFBB4580985 +:10F35800FE99FE00FE9FFE4BD83200000000733479 +:10F368008000DA080000731C8000D21080010BF0C6 +:10F3780080010CECD4314B86ED0800922FF87819F7 +:10F388004B65ED5800928B091388F1D8C004F20838 +:10F39800002818971693109C4B148908F01F003109 +:10F3A8006A080E9C118BF7DBC004A36B5C3BF01F53 +:10F3B800002EC0718E493138F0091900E08B000B1E +:10F3C8004A580E9CF109009A2FF9F159009AE08FDA +:10F3D80003026A0C069B2F0CF01F0024C0B16A0AB6 +:10F3E800FC19E000F5380010B968E618F00012388A +:10F3F800C0A149980E9CF10900A02FF9F15900A06D +:10F40800E08F02E9F4CBFFF48EC830692F0A0E9C16 +:10F41800F01F00175C8CC080ED0800980E9C2FF838 +:10F42800ED580098C11868080E9CF13B000CA58B9C +:10F43800F60B10FCF01F000CC1C0ED08009A0E9CE2 +:10F448002FF8ED58009AED0800962FF8ED58009621 +:10F45800E08F02C6000080D40000733000007318EB +:10F468008000D67C8000CDD48001255880011E2CD8 +:10F47800680811CA11D9B169F3EA118911EAF3EAE6 +:10F48800108911FAF5E91009F20A1618B0CAF5D967 +:10F49800C208B0F9B0DAF5D9C108B0EA4B28910929 +:10F4A8006808F1390008F13A0009B16AF5E9118AEA +:10F4B800F139000AF5E9108AF139000BF3EA100A6C +:10F4C800F4091618F1690008F3DAC208F16A000BAA +:10F4D800F1690009F3DAC108F169000A4A386804D9 +:10F4E800910AE938000DF5D8C002F1D8C0064A0BD8 +:10F4F800B6884A086A09580A5F1A8E4514055C8559 +:10F50800B00549D87006CA586C485808C0E149B8CF +:10F51800201D1AD8E06800B71AD84998499C1AD80B +:10F52800F01F00192FCDC00858A8C0E14938201D88 +:10F538001AD8E06800B81AD84948492C1AD8F01FD8 +:10F5480000122FCDC0085818C24148C8201D1AD82B +:10F55800E06800B91AD848E848AC1AD8F01F000A81 +:10F568002FCDC0080000731C00007324000073280E +:10F57800000073200000820C8003AC608003ADF0B3 +:10F5880080039D9C800094C48003AE188003AE4421 +:10F59800098A0998F1EA1088ED0A0024F00A19008E +:10F5A800C56109AA09B8F1EA1088ED0A001CF00A39 +:10F5B8001900C4D1F33A000CF338000DB168F1EA30 +:10F5C8001188F33A000EF1EA1088F33A000FF5E8D3 +:10F5D80010086C1A103AC3B1F33A0010F33800114E +:10F5E800B168F1EA1188F33A0012F1EA1088F33AA7 +:10F5F8000013F5E810086C0A103AC2916C380C3800 +:10F60800C0E14CA8201D1AD8E06800C21AD84C885E +:10F618004C8C1AD8F01F00482FCDC008580CC06079 +:10F6280099384C6870098D3991066C380C38E0812E +:10F6380001A14BE8201D1AD8E06800C81AD84C0868 +:10F648004BCC1AD8F01F003C2FCDC0080C9C6C3650 +:10F658005806FE91FF5BE08F05296C4858A8C0E06A +:10F668004B28201D1AD8E06800D21AD84B584B1CDA +:10F678001AD8F01F00312FCDC008098B0998ED0A60 +:10F688000024F1EB1088F00A1900C77109AC09BB16 +:10F69800ED08001CF7EC108BF6081900C6E1F33CE6 +:10F6A800000CF33B000DB16BF7EC118BF33C000E33 +:10F6B800F7EC108BF33C000FF9EB100B6C1C163CAD +:10F6C800C5C1F33C0010F33B0011B16BF7EC118B93 +:10F6D800F33C0012F7EC108BF33C0013F9EB100B22 +:10F6E8006C0C163CC4A1498B178CEDBC0002E08061 +:10F6F800013AEDBC0001C2D1494B6CAC760BF60C5B +:10F70800010CC2D6ED14002C081C580CE089002806 +:10F718005C7A201D5C751ADA48DCEA0B000B5C7811 +:10F72800F2CAFFF0780CC7688003AC608003AE6C47 +:10F7380080039D9C800094C40000820C8003AE98D6 +:10F748008003AEC4000073280000731C00007324FB +:10F75800EDBC0000C0414CC870088DD84CB8900969 +:10F768003008F0091900E08000FEED3800260C9CF6 +:10F77800A1B8ED680026CF486C365806FE91FF6F99 +:10F788004C3870050C98CF286A0A580AC130F33CE7 +:10F798000010F33B0011B16BF7EC118BF33C001236 +:10F7A800F7EC108BF33C0013F9EB100B163AE081E1 +:10F7B80000DC09AB09BAF5EB108AEB0B001CF40B63 +:10F7C8001900E08100D25808C0706A3991394B0895 +:10F7D80070098B3991054AF81188EDB80004C1F118 +:10F7E8004AD8700913AB139A13B8201D1389F1EB8B +:10F7F8001088F5E910894A5B1AD9968C4A794A8BA0 +:10F808007209760BF2CAFFF0F80B000B4A5C780C11 +:10F818002FFC2F49F01F00242FEDCA48EDB8000136 +:10F82800E08100A1EB3C0014F01F00201896C08175 +:10F8380049F8F109009C2FF9F159009CC938497819 +:10F848007008F0C9FFF0C0311298C108F1390013EF +:10F85800F13B0010F13A0011F1380012B16AF5EBF2 +:10F86800118AF5E81088F3E810088D08EB08001CE9 +:10F87800ED58001C48987008F0C9FFF4C1A112980F +:10F88800C27800000000821000007320000082147B +:10F898000000732800007318000073300000731C08 +:10F8A80000007324800102348000E1D4000080D479 +:10F8B800F139000FF13B000CF13A000DF138000E60 +:10F8C800B16AF5EB118AF5E81088F3E810088D188D +:10F8D8004C587008118B1199F3EB1089ED590024DD +:10F8E80030398D494C197209F2CBFFFF8DCB8DABA6 +:10F8F800F13B000FF138000EF7E81088ED5800587A +:10F90800ED5800608A48E2180199AC486A684B8A49 +:10F918002019740C8D688D3C6A889506ED49006441 +:10F928008D880C9CF01F0033ECCBFFFCED1C003CD9 +:10F93800F01F00313019ED5C003C201D30081AD949 +:10F94800109A3129109B0C9CF01F002C2FED5C5C49 +:10F95800C0600C9C300BF01F002AC0480C9CF01FA4 +:10F9680000290E9CC3C80A986A355805FE91FF0EF7 +:10F9780049D56A08F13C000DF9DCC006F01F0022E9 +:10F988005806E08003504A188E4A6A09911791492F +:10F99800B06A30096E1A9109912A49D8910949D853 +:10F9A800B089ECFA0084580AC3C0ECF8008C5808F7 +:10F9B800C0500C9B6C6C5D18C06810990C9B109C17 +:10F9C800F01F00155C5CC041ED4C0084C2A80E9C81 +:10F9D8004928F10900962FF9F1590096F01F0010F7 +:10F9E800D8320000000073180000731C0000820C5D +:10F9F8008000E6B48000D95C800103508000E124D7 +:10FA080080010CEC8000D67E000073340000732C5B +:10FA1800000073298000E5EC000080D48000D13C10 +:10FA28004A9891064A981188EDB80002C3216C489B +:10FA38005828C0814A6870096D781039E081026BD6 +:10FA4800C1D84A49720A6CA9F4090109E08602631F +:10FA5800ED1A002C14195809E089025DE08F032182 +:10FA680049D8201D1AD8E06802271AD849B849CCC5 +:10FA78001AD8F01F001C2FCDC00849B91388A3B8A5 +:10FA8800B288ED380026A1C8ED680026E08F024351 +:10FA9800EDB80001C0616C4820285818E08B00A21E +:10FAA800492870088DD830080C9CED6800ADF01F0F +:10FAB80000106C4820285878E08B022D48D9F208AD +:10FAC800032F000000008224000073280000732424 +:10FAD8000000731C8003AC608003AEF480039D9C1F +:10FAE800800094C400007329000082108000E6B4EE +:10FAF8008003AC404CF811891298E218001259287A +:10FB0800C7A14CD8700A6DF8704811FB11C711DCF9 +:10FB180011E8B16CF9E7118CF9E81088F7E81008DA +:10FB28002FF8103AC681ED0800722FF8ED580072D0 +:10FB38004C287008ED4A0050F0CA00012FF88DC813 +:10FB48008DA84BF87008F139000FF138000EF3E872 +:10FB58001088ED5800603048ED4A00648D48EC0884 +:10FB6800000BED1C003CF01F00375C8CF808100AF5 +:10FB7800ED5C003CED580058ED0900563018F009CE +:10FB88001900C021A17CED5C0056ED0800745808EE +:10FB9800C0E14AD8201D1AD8E06802591AD84AB8D4 +:10FBA8004ABC1AD8F01F002B2FCDC00820186DFCB6 +:10FBB800ED5800747808ED48007C5808F9B800FF43 +:10FBC800F9B80100EDF81E4EED58003AF01F00227A +:10FBD800ECF800905808C050300A0C9B6C6C5D180B +:10FBE800ED380026A1B80C9CED680026F01F001B1C +:10FBF800E08F0191EDB90004E081018D4908700999 +:10FC080013AB139A13B8201D1389F1EB1088F5E98B +:10FC18001089493B1AD9968C4929488B7209760B69 +:10FC2800F2CAFFF0F80B000B483C780CC7980000AC +:10FC380000007328000073240000731C0000731870 +:10FC48008000D95C8003AC608003AF1480039D9C66 +:10FC5800800094C48000DA3C80010CEC0000732022 +:10FC6800000073304C281188EDB80004C5E14C1829 +:10FC7800700C6D485CD81808C3D66D78F808010870 +:10FC88005808E089003830488D486C885808C0E129 +:10FC98004B98201D1AD8E068027E1AD84B784B8CF6 +:10FCA8001AD8F01F00382FCDC008300A0C9B6C6C96 +:10FCB8005D185C5CC0700C9C301BF01F0033E08F3B +:10FCC80001A7ED0700560C9CF01F0030ED080070EE +:10FCD8005808F9B901FFF1D9E108EDF81C383019D5 +:10FCE800ED08003CF2071900C021A178ED58005634 +:10FCF800C2E84A78700913AB139A13B81389F1EB69 +:10FD08001088F5E910894A3B201D1AD94A29968797 +:10FD180072094A2BF2CAFFF0760BEE0B000B2F4943 +:10FD2800F01F001F2FEDCF68EDB80001E08100F350 +:10FD380049A870096CA820181039E08100EC0C9CC7 +:10FD4800F01F0018CE780C9CF01F0010496811882D +:10FD5800EDB80005E08100DFED380026A1B80C9C65 +:10FD6800ED680026F01F00113078CC1800007328C9 +:10FD7800000073248003AC608003AF2C80039D9C3B +:10FD8800800094C48000E1248000E7F40000731828 +:10FD980000007320000073300000731C80010234DF +:10FDA800800101000000732980010CEC0C9CF01FFD +:10FDB800003E4BE84BE91188E2180020C2D01388B6 +:10FDC800EDB80004C1F14BB870096D781039C1A1C4 +:10FDD800ED380026A1B80C9CED680026F01F00360F +:10FDE8000C9CF01F00364B6972080C38C5604B59E3 +:10FDF8009308C05870390C39C69012985808CFB17A +:10FE0800C6D8ED380026A1B80C9CED680026F01F76 +:10FE1800002A3088C6C81388EDB80004E081007B4A +:10FE28004A4870096D781039C7513068C6080C9C6B +:10FE3800F01F001D49D81188EDB80005C6B1ED388E +:10FE48000026A1B80C9CED680026F01F001B0C9C36 +:10FE5800F01F001A49A972080C38C1F04999930893 +:10FE6800C05870390C39C32012985808CFB1C368EC +:10FE78000C9CF01F000D48E81188EDB80004C4A1DF +:10FE880048C870096D781039C4510C9CF01F000BDC +:10FE980048B972080C38C0316C38C21848999308B0 +:10FEA800C1B800008000E7F400007329000073283F +:10FEB8000000732480010CEC8000DA8C0000820CB6 +:10FEC8000000821870390C39C0614C0993086C39EC +:10FED8009139C06812985808CF614BC99308300807 +:10FEE8008D384BB870098D39910630A88D48C128D6 +:10FEF8000C9CF01F00384B881188EDB80004C0A195 +:10FF08004B6870096D781039C0514B591388A5A8F2 +:10FF1800B2884B381188EDB80003C091ECF800980E +:10FF28005808C0803FAB6C6C5D18C048EDB8000441 +:10FF3800C0A10C9B4ABCF01F002C0C9B302CF01F5E +:10FF4800002BC658ED0A0070580AC090ECF80088DB +:10FF58005808C0505C7A0C9B6C6C5D184A48700855 +:10FF68005808C24049C91389EDB90003F1F9080DD1 +:10FF7800F9BA0001F3DAE039F1F90E0D49CAECF8E3 +:10FF8800008C5808C070740A30090C9B6C6C5D18A2 +:10FF9800C0781099740A0C9B109CF01F00165C5CCA +:10FFA800C05049387008ED48008448D81188EDB829 +:10FFB8000005C271ECF8008C5808C1D030090C9BC0 +:10FFC800129A6C6C5D18C1D800008218000082205B +:10FFD8008000E7F4000073280000732400007329F0 +:10FFE8000000820C8000DAE88000C9740000732CDD +:08FFF8008000E5EC10990C9B60 +:02000004800179 +:10000000109A109CF01F002E30094AE80C9C9109B0 +:10001000F01F002D30064AB891064AC76E1C580CD6 +:10002000C330F01F002B8F16C2F86A0BF738000D93 +:10003000EDB80002C2604A78F10C00A02FFCF15C20 +:1000400000A0F10C00962FFCF15C0096179C17A6FF +:1000500017B8178BF9EB108B201D49F972091ADBC1 +:1000600049EB968CF2CAFFF0F1E6108849CB2F4994 +:10007000760BF80B000B49BC780CF01F001B2FED22 +:100080000E9CF01F0013F01F0019C1714988201D3C +:100090001AD8E06801771AD84968497C1AD8F01F45 +:1000A00000172FCDC0085808FE90FCE0FE9FFCEB27 +:1000B00049387006FE9FFB67D83200008000E5ECEF +:1000C0000000822480010CEC000073348000D13CDD +:1000D000000080D400007330000073200000731C07 +:1000E00000007324800102348000D6B48003AC6029 +:1000F0008003AF4080039D9C800094C40000822058 +:10010000D42179F95809C3107208F8CEFF88F9484C +:10011000007C79E8C038109E70085808C1C0704B48 +:1001200017F617C417D5B165EBE41185724A17EBC2 +:1001300015F7EBEB108B15C5EDEB100B15D615EA8B +:10014000B166EDE51186EDEA108AEFEA100AF60ACB +:10015000010ACE2693089D093008F9480040F93875 +:10016000004E2FF8F968004ED822D42179F95809A9 +:10017000C600F9380026EDB80002C5B07208F8CE06 +:10018000FF88F948007C79E8C038109E700858084C +:10019000C1C0704B17F617C417D5B165EBE41185D4 +:1001A000724A17EB15F7EBEB108B15C5EDEB100B47 +:1001B00015D615EAB166EDE51186EDEA108AEFEA8B +:1001C000100AF60A010ACE26930830089D09F9485C +:1001D0000040F938004E2FF8F9090056F968004E32 +:1001E000F5D9C02FF9080060F7D8C02FF009190021 +:1001F000F60817B0F4081780F9580058F908003CC1 +:10020000F00915015C78A178F91A0058103AF9F94B +:100210005C2CF9380026A3A8F909003CF9680026EF +:10022000F20815011009F90800581009F95900568B +:10023000D822D703D43118941693149112921096A1 +:100240004097300A314B301CF01F00391895C6D04A +:1002500098593138F0091900E08B000F4B58201DD8 +:100260001AD8E068031F1AD84B384B4C1AD8F01F25 +:1002700000342FCDC0080E9878175C78AEB8A988E6 +:10028000AEA8E0685014EF68000DA988EF68000C74 +:10029000E8081618AEC8F1D4C208AED8E608161899 +:1002A000EF680008F1D3C208F3D6C010EF68000968 +:1002B000AE993088A9893006AEF4EF63000BAE89A1 +:1002C000EF66000FEF660012EF660013EF66001096 +:1002D000EF660011EF68000E3069049A029BE9D4C2 +:1002E000C108E7D3C108AEE4EF63000A98C8F01F65 +:1002F00000155C7CEF6C0011A98CEF6C0010201DC8 +:10030000491C30671AD70C98F9070090049A2FF708 +:10031000029BE06900FFF95700900A9CF01F000B58 +:100320000A9CF01F000B2FEDD83200008000D3187C +:100330008003AF5C8003AFA480039D9C800094C4C5 +:1003400080011E2C000080D4800122948000D13CCA +:10035000D43120BD14915098414A505A12961897A2 +:100360003009F20119005F08F20A18005F0AF1EA89 +:10037000000AF20A1800C110F3D6C002C0E14C789E +:10038000201D1AD8E06800AD1AD84C584C5C1AD819 +:10039000F01F00452FCDC008580B5F195089126817 +:1003A000C0E04BE8201D1AD8E06800AF1AD84BF81F +:1003B0004BCC1AD8F01F003C2FCDC008EF080072BC +:1003C000E2081900C0B2EF380026EA18FFFFE8186B +:1003D000FF80EF680026E08F02E34058F3D8C001A9 +:1003E000E2180002F9B8010CF009002950296FB099 +:1003F000EF02007431F8F0021900E08800144AC8D6 +:10040000F109009C2FF9F159009CE06C00FFEF38D6 +:100410000026EA18FFFFE818FF80EF680026E08F4B +:1004200002C36FF85802C2605808C1404028A38830 +:100430002FB8AD685C883003503B50A8F7D1B0109E +:10044000409A504BF5DAC001069406980695506A1A +:10045000C3796FE85808CEB14908201D1AD8E06862 +:1004600000D01AD8493848FC1AD8F01F000F2FCDF9 +:10047000C0085808C0416FE85808CD904878201D42 +:100480001AD8E06800D31AD848B8486C1AD8F01FB8 +:1004900000062FCDC00800008003AF5C8003AFD4FE +:1004A00080039D9C800094C48003B028000080D409 +:1004B0008003B0688003B0A450195008EF03003CDB +:1004C000304CF01F0042401918954008E080023C73 +:1004D000300B990B991B5809C0301894C118580853 +:1004E000C0E14BB8201D1AD8E06800EF1AD84B982D +:1004F0004B9C1AD8F01F00392FCDC008910C5C73AB +:10050000402A4069E60A010840435C73E6080D434F +:100510005C835809C3904028300AE608000B149CFD +:100520005C7BF01F002F8B1CE080020EF5D3C01007 +:10053000402B98D9F40B00081039C0E44A48201D1C +:100540001AD8E06800FF1AD84A684A3C1AD8F01F47 +:1005500000232FCDC008501AF01F0023401A18980E +:1005600040895809C0A0402B6A195008721C160C0B +:10057000403BF01F001E4008F00200026A185C8237 +:1005800070188B28C3D8406A402B149CF01F0014AD +:100590008B1CE08001D9F01F0014407AF8020002A1 +:1005A0005C82580AC2D0F7D3C010301A303CF01F1A +:1005B000000C189B6A1C580BC1C1F01F000D40694C +:1005C0008B19E08F01C100008000C9D48003AF5CAB +:1005D0008003B0D880039D9C800094C48000D31811 +:1005E0008003B0E88000CD0C8002E7368000D13C6B +:1005F000403897182FF28B285C82F01F003F320B97 +:10060000F6021900E08B01A0AA63314B6A1CF01FAF +:10061000003BC0904BA8F10900A42FF9F15900A4A8 +:10062000E08F0192EF39001C6A1870188B48B0896E +:10063000EF39001DB099EF3900246A48B0A9EF39AD +:100640000025B0B9E00916186A48B0C9F3D0C2084D +:10065000B0F0B0D9F3D0C108B0E96A48F16C00132A +:10066000F16C00126A48F13A000CF139000DF3EA1E +:100670001089E019FFC0EDE910095C79F169000DFE +:10068000A989F169000C405AEB6A000E404806182F +:100690005C88F3D3C0105048403B6A48120B503B73 +:1006A00040AA1200F139000DF3D9C006F5E910098E +:1006B0005C79F169000DA989F169000C0A98300A8A +:1006C000404BF40B19005F1B507B169A58045F09CE +:1006D000300B124AF60A1800FE91FEF0F5D2B01067 +:1006E000503A6FE05800E08000C260085808C0909F +:1006F0001090CFCB8000CD348000CDD4000080D4CA +:1007000080EA6048F139000DF3D9C0025F1B140B79 +:10071000E08000C45809E08100C1F7D6C0025F0C38 +:10072000301BF60618005F0BF9EB100BF20B1800EC +:10073000E08000B488EBEF19003C140B123BE08919 +:1007400000ADE13B000EE939000EF20B1800E0812C +:1007500000A5684911FE13FB504B11CC11DBB16BA6 +:10076000F7EC118B11ECF7EC108BFDEB100B160A6C +:1007700013CB13D8B168F1EB118813EB4049F1EBBF +:100780001088F3E81008103AE08100884028681CBF +:10079000F00B11EC5C8BF01F0037C0E04B68201DA4 +:1007A0001AD8E06801691AD84B484B5C1AD8F01F78 +:1007B00000352FCDC0086818905AF80A1900C0A15A +:1007C00070098919910C4032109C20125C82F01F34 +:1007D000002EF1D6C001681BC220580BC05188689A +:1007E000F6081900C0E04A48201D1AD8E0680177D1 +:1007F0001AD84A684A2C1AD8F01F00222FCDC008F8 +:100800006048F13A000CF139000DF3EA1089A1A912 +:10081000F169000DA989F169000CC1E8580BC050BD +:100820009659F0091900C0E14938201D1AD8E0682E +:10083000017A1AD84968492C1AD8F01F00122FCD16 +:10084000C008601CF01F001380698868F208000867 +:10085000A068680881080835E0051700E1F3020682 +:10086000089B304CF01F000CC198EF440078C16821 +:100870008000CDD48003AF5C8003B11C80039D9CBD +:10088000800094C48000D13C8003B1308003B1501B +:100890008000CD348000C97481040C98EDB600014D +:1008A000C040EDB60000C0312FF15C81EDD6C00133 +:1008B000EFF81826F9B90120F1D9E138EFF81E2632 +:1008C0006FB9F1D1C010F2080008EF520074EF4880 +:1008D000006CEF0800720218EF5800725802C14015 +:1008E0006FF85808C1116FE85808C0E14AF8201D98 +:1008F0001AD8E06801A11AD84AD84AEC1AD8F01FD1 +:10090000002E2FCDC00858055F193008F0031900DC +:100910005F1AF5E90009F0091800C4406A48580850 +:10092000C410409CE21C0002C3D1F13A000CF13922 +:10093000000DF3EA1089A3B9F169000DA989F169E5 +:10094000000CC318EF380026EA18FFFFE818FF80F4 +:10095000EF6800264998F109009C2FF9F159009C95 +:100960005804C040089CF01F0016EF0900743008BE +:10097000F0091900C1406FF85808C1116FE8580814 +:10098000C0E148A8201D1AD8E06801B41AD84888E8 +:10099000488C1AD8F01F00082FCDC008E06C00FF6B +:1009A000C028300C2F5DD8328003AF5C8003B16467 +:1009B00080039D9C800094C4000080D48000DA688D +:1009C000D421784E1298587E5F07584E5F09EFE9A0 +:1009D0001009C081582EC060583EC040E06C00F83D +:1009E000D822580AC031149CD822201D30095C7AC4 +:1009F0001AD9F01F00032FED5C5CD8228001035050 +:100A0000D4013008201D109A16991AD8149B30185A +:100A1000F01F00032FED5C5CD80200008001035042 +:100A2000D431189679F45804C05179E45804E08020 +:100A300000CE6848F133000DE7D3C001C06088697B +:100A40003008F00919005F03300A5C53301C14337E +:100A5000F9BB0114F9BB0015F01F005D1895E0808B +:100A600000B698593138F0091900E08B000F4D9805 +:100A7000201D1AD8E068040F1AD84D784D7C1AD87A +:100A8000F01F00572FCDC008684811FA11CB11D9BB +:100A900011E8B169F3EB1189F3E81089ED38001C16 +:100AA0007817F5E91009AE88EF3A000CED38001D13 +:100AB000AE98EF38000DF1EA1088ED3A0024AEAAA6 +:100AC000ED3B0025AEBBF20B1618AEF9AECBF7D955 +:100AD000C208F3D9C108AEDBAEE9ED390028EF69F1 +:100AE0000008ED390029EF690009ED39002AEF69A6 +:100AF000000AED39002BE018FFC0EF69000BA5A834 +:100B00005C88F5D8C010EF6A000DF40B1608EF6B87 +:100B1000000CED39002EEF69000EF1D8C006300947 +:100B2000E8185000ED3A002F5C78EF6A000FEF688C +:100B3000000DEF690011EF690012EF690013EF6912 +:100B40000010A988EF68000CED19002E6CA8F208BF +:100B500000088DC85803C110EF39000CEF38000DA4 +:100B6000F1E91088E018FFC0E8180011EF68000DE7 +:100B7000A988EF68000CC068682811897818F169A5 +:100B80000014ECC4FFFC8AC83069089A0C9B0A9CCC +:100B9000F01F00145C7CEF6C0011A98C4929EF6CEC +:100BA0000010F30C00902FFCF35C0090306C201DC3 +:100BB000ED39000B089A1ADC0C9B30080A9CF01FD8 +:100BC000000B0A9CF01F000A2FEDD8328000D318CA +:100BD0008003AF5C8003AFA480039D9C800094C41D +:100BE00080011E2C000080D4800122948000D13C22 +:100BF000D431300A1895314B301CF01F003918934E +:100C0000C041E06C00FED832EB380026EB39001C06 +:100C1000E018FFFCEB6800266B787817AE89EB399B +:100C2000001DAE99EB390024F00B1618AEA9F3D8CD +:100C3000C208EB3A0025AEF8F1D8C108AECBAEBA87 +:100C4000AED9AEE86AA8F0091618EF690008F3D823 +:100C5000C208E06A5010EF690009F3D8C1083004F7 +:100C6000EF68000BEF69000AF40B1608EB19002E71 +:100C7000EF6B000CEF6A000DEF69000FEF640012DC +:100C8000EF640013EF640010EF640011F20A16081D +:100C9000F2080008EF6A000E8BC8EAC6FFFC0A9B48 +:100CA0000C9A98C83069F01F000F5C7CEF6C001143 +:100CB000A98CEF6C0010306CEB38000AEB39000B9C +:100CC000201D0C9A1ADC0A9B069CF01F0007069C4C +:100CD000F01F0006089C2FEDD83200008000D318CA +:100CE00080011E2C800122948000D13CD431202D23 +:100CF0004AE8189770081838E08001A3F9080056F0 +:100D0000F9090060F0091900F20817805C785008B2 +:100D100079E6F9380026E2180002C1E05806C170F1 +:100D20008CEB6C48794911CCF609010911DBB16BE8 +:100D3000F7EC118B11FA11E8F7E81088400BF5E891 +:100D40001008F20800081638E08800070E9CF01F13 +:100D500000185C5CC7696FF55805C0B1EEC9FF8427 +:100D6000EEC2FFFC5019300349214930C2B9109539 +:100D70006A085808CFD1CF3BF13C000CF139000D87 +:100D8000F3EC108C5C8CEDBC0002C1F148B8201D66 +:100D90001AD8E06802471AD8489848AC1AD8F01F09 +:100DA000000A2FCDC00800000000822480010BF053 +:100DB000000080D4000082108003AF5C8003B18407 +:100DC00080039D9C800094C46FF95809C150EF3B8B +:100DD00000261699E2190044C0F16FE95809E08035 +:100DE0000133720E580EC081926EEF09003CF20E74 +:100DF0001900E08301296C09EF4900786E495829F0 +:100E0000C0E0A5AC5C7CF16C000DA98CF16C000C11 +:100E1000EF390026E019FFFCEF6900266EA9F20AFF +:100E20001618F16A0008F5D9C208F16A0009F5D967 +:100E3000C108F169000BF16A000AEF1A002EF16A8D +:100E4000000FF40B1608F16B000EF40900098FC9AE +:100E5000ED39000EEDB90000C061E06B0200EA1B45 +:100E60000204915BEF08003A3FF9F2081900F9B863 +:100E70000000EFF80C1D6E085808C071049CF01FAC +:100E80000075C45078188F086F085808C121600990 +:100E90006C48EF49004011F911CB11DA11E8B16A41 +:100EA000F5EB118AF5E81088F3E81008EF480044E4 +:100EB0006C1C6C4478199848985A9914E8090109EF +:100EC000121A1218B85AB84830695C78049A0E9B06 +:100ED000E9630010E9630011F01F005F30695C7C7A +:100EE000E96C0011A98CE96C0010E30800902FF860 +:100EF000201DE35800901AD9049AEF38000AEF3900 +:100F0000000B0E9B6C1CF01F00552FED6C4811FA66 +:100F1000F139000DF3D9C0025F1B11CC8CE9F60941 +:100F2000000911DB11E8B16BF7EC118BF7E81088C1 +:100F3000F5E810086F7AF2080008101AC037EF4879 +:100F4000005C5809C3B08D036FF85808C041EF46E4 +:100F5000007CC3286C4A15FE15C46A4915DBB16BC9 +:100F6000F7E4118B15E4F7E4108BFDEB100B13CEB7 +:100F700013FC13DAB16AF5EE118A13EEF5EE108A5E +:100F8000144CF60C010CC177401AC058109A700826 +:100F90005808C0E0704913C413FC13DEB16EFDE4C1 +:100FA000118E13E4FDE4108E1C4C161CCF068D0828 +:100FB0009506C0788B060C95C0480C9CF01F002845 +:100FC0006FE65806C3706C4811CC6F4A8CEB11D990 +:100FD000141BB169F3EC118911ECF3EC108911FCCD +:100FE000F9E91009F6090009400B1639FE98FEC60A +:100FF000EF3900AC3008F0091800C1C18CEB6C4827 +:10100000F60A010A11F911CC11DB11E8B16BF7EC0A +:10101000118BF7E81088F3E81008100AEF18006049 +:10102000103AF9B80B00EFF8BA2AF9B80B01EFF84B +:10103000BEACEF380026F1D8C007EF680026300CB0 +:101040002FEDD832E21B00A0FE91FED7CD2B000081 +:101050008001222880011E2C800122948000DA3C2D +:10106000D401189879FA580AC170149B7609580966 +:10107000C030129BCFCB71EC970CF1490040F14985 +:10108000007CF139004E2FF9F14A0078109CF1698B +:10109000004EF01F0002D80280010CECD431300A5F +:1010A0001896314B301CF01F00401895C7B0985966 +:1010B0003138F0091900E08B000F4BC8201D1AD8F9 +:1010C000E06803C91AD84BA84BAC1AD8F01F003AF5 +:1010D0002FCDC008ED39001C78176D78AE89ED3939 +:1010E000001DAE99ED3900242018AEA9F00B16189A +:1010F000ED3A0025F3D8C208AEF8F1D8C108AECB5E +:10110000AEBAAED9AEE86CA8F0091618EF690008BF +:10111000F3D8C208E06A5010EF690009F3D8C1089B +:101120003004EF68000BEF69000AF40B1608ED19A4 +:10113000002EEF6B000CEF6A000DEF69000FEF64FB +:101140000012EF640013EF640010EF640011F20A64 +:101150001608F2080008EF6A000E8DC8ECC3FFFC09 +:1011600098C83069069A0C9BF01F00145C7CEF6CE9 +:101170000011A98C4929EF6C0010F30C00902FFC92 +:10118000F35C0090306C201DED39000B08981ADCE0 +:10119000069A0C9B0A9CF01F000B0A9CF01F000A89 +:1011A0002FEDD8328000D3188003AF5C8003AFA44A +:1011B00080039D9C800094C480011E2C000080D47C +:1011C000800122948000D13CF9390010A3C948A8BD +:1011D000F969001011BA118B119911A8B169F3EBDB +:1011E0001189F3E81088F5E8100899183008F958C3 +:1011F00000145EFC8003B409997A996B5EFCD703F6 +:10120000D421301CF01F00071897C080320A300B21 +:10121000F01F00053FF8EF68000B0E9CD82200007D +:101220008000C9D48002E8BCD40148C9189B720868 +:101230001838C0D178389308C0C870395809C060D0 +:101240001639F7F90003F1F90A0370385808CF612D +:10125000301CF01F0003D802000082288000C974EF +:10126000D4214AB83009700E1C98C148103CC111F5 +:101270005809C0E04A78201D1AD8E06802541AD8EC +:101280004A584A6C1AD8F01F00262FCDC0083019D2 +:1012900070385808CEC1580BC0C017B817861797BA +:1012A00017ABB167EFE61187EFEB108BF1EB100B8B +:1012B000990B580AC2211C98E06A1000E0667FFF73 +:1012C0003007C0C8F10B0012F40B1900C061F6CA58 +:1012D000FFFF1C985C8AC0287038EC0A19005F1563 +:1012E00058085F1BEBEB000BEE0B1800CEC1580843 +:1012F000C040E06C00F5D822F95A00125809C0200D +:10130000D82A993E4828910C129CD82200008228A5 +:101310008003B19C8003B1E080039D9C800094C455 +:10132000D4213008169614951897F9090012F0097F +:101330001900C071300A189BF01F00145C5CC231A8 +:101340005806C0C00DB80D8A0D990DA6B169F3EA13 +:101350001189F3E61086F1E61006EF380010A3A815 +:101360008F16EF680010EF55001448987008109C15 +:10137000C0581837C021D82A783C580CCFB18F38C4 +:1013800048389107D82200008001126000008228AE +:10139000D43112971093169414911895F9090012EC +:1013A0003008F0091900C091300A189BF01F004561 +:1013B000E5DCC008E0810084308B089CF01F00420F +:1013C000C0310896C0E8300A308B301CF01F003F57 +:1013D0001896C041E06200FFC728089BF01F003C40 +:1013E0008C593078F0091900E08B000F4B98201DC4 +:1013F0001AD8E06801C51AD84B784B8C1AD8F01F60 +:1014000000382FCDC008EB3900120E986C175C78AD +:10141000AE893009EB3A0013AEB8AE9AA988AEF99E +:10142000AEE9AEA86A085808C041E6C2FFFCC10890 +:1014300066191238C0C00836C041E06200F7C3F830 +:101440000C9CE06200F7F01F0027C3980A928CC83A +:10145000F0091608AED8AEC9EB390010EDB900009E +:10146000C1403119029A049B0C9CF01F001F5C8C38 +:10147000F1DCC010AEF8A988AEE8580CF9B800FF4E +:10148000EFF80E07EFF80E0631181AD3049BEB396C +:10149000000B029A1AD80C9CEB38000AF01F0013BC +:1014A0002FEDE5DCC0080836C0400C9CF01F000D95 +:1014B00048F8F10900782FF9F1590078049CD832E6 +:1014C000800112608000CDD48000D3188000CDB49C +:1014D0008003B19C8003B1EC80039D9C800094C488 +:1014E0008000D13C80011E2C80012064000080D44B +:1014F000D421202D1897501B149C500A1296F01FCF +:10150000000C401B1898400AC0A148A8E06C00FCE1 +:10151000F10900862FF9F1590086C078F3D6C01082 +:101520000E9CF01F00055C5C2FEDD8228001222864 +:10153000000080D480011390D401F8CAFFFCF9198F +:101540000014F01F00035C5CD8020000800114F05E +:10155000D431203D4D98F109007A2FF9F159007AE4 +:10156000781716910F8818955C8898CAF3D8C0042C +:101570002FE9A369123AC0A5F1D8C004F00B1502F7 +:101580005C3BF01F004F1894C0904CC80A9CF109B6 +:1015900000822FF9F1590082C1D96A12EECCFFF016 +:1015A000029B502CF01F004705980583F1E3108340 +:1015B00005B805AE1896F1EE108E5C835C8E34484B +:1015C000F00E1900C2413438F0031900E081008B9D +:1015D00062A85808E080008770145804E0800083F7 +:1015E00068185808E0800092EF3A000CEF39000DBF +:1015F000B169F3EA1189EF3A000EF3EA1089EF3A84 +:10160000000FF5E910091238C6D1C7F84AE8089961 +:10161000700A089B1498500AC618F10C0012FC0CB2 +:101620001900C5A15806C041700C580CC1B0EF306C +:101630000010EF3C0011B16CF9E0118CEF3000129A +:10164000F9E0108CEF300013F60618005F1AE1EC99 +:10165000100C700018305F0CF5EC100CF60C180034 +:10166000C3B05804E08100D6F13C0010E21C000435 +:10167000F0041700CCE8701C580CC150EF3A000C75 +:10168000EF30000DB160E1EA11805010401AEF30E8 +:10169000000EF5E010805010EF30000F401A14409B +:1016A000003CC1A1400A10945809C0F0703893382A +:1016B000893A48589104C148000080D48000CDD4B4 +:1016C00080012558000082284C88F109008E2FF9EE +:1016D000F159008EC058109970385808C9F1580453 +:1016E000C141EF3A0010EF380011B168F1EA1188FA +:1016F000EF3A00126219F1EA1088EF3A0013F5E8A8 +:1017000010081039C6D1300405F805E9F1E9108850 +:10171000C130402A8AC83119EECBFFF40A9CF01F71 +:1017200000345C8CC0904B180A9CF10900802FF9A2 +:10173000F1590080C4F83F8B0A9CF01F002EC0E0D6 +:101740004AD8201D1AD8E06801141AD84AB84ACCE1 +:101750001AD8F01F002C2FCDC0085804C0D06866DE +:101760005806C3E0089BF1D3C010EEC9FFF40A9AF3 +:10177000687C5D16C5585806C261EF380010FC1928 +:10178000E000B968E618F0001238C1D00F8B0A9C4F +:10179000F7DBC0042FEBA36BF01F00166A180E389E +:1017A000C0E04958201D1AD8E068012F1AD84968AE +:1017B000493C1AD8F01F00132FCDC008303B0A9CBB +:1017C000F01F001248980A9CF10900882FF9F1597E +:1017D0000088F109007E2FF9F159007EC0280A9C8B +:1017E000F01F000BC1D80000000080D480011E2C27 +:1017F0008000CDD48003B19C8003B11C80039D9CEC +:10180000800094C48003B21C800118FC8000D13C8D +:10181000F10C0014E60C1900FE91FF5FC2DB2FDD16 +:10182000D8320000D431189316921494324B300AF7 +:10183000301CF01F00241897C43098593238F00932 +:101840001900E08B000F4A08201D1AD8E068012E0D +:101850001AD849E849EC1AD8F01F001E2FCDC0084D +:101860007816661531CAAC94AC823004ACC4ACD4E2 +:10187000ACE4ACF4661B781C2F8CF01F00170C9C9A +:10188000ACA4ACB48EDBF01F00155C7CACBCA98CA6 +:10189000ACAC201D492C30161AD60898F906006009 +:1018A000EACAFFF4E06900FF089B2FF6F9560060D2 +:1018B0000E9CF01F000C0E9CF01F000B2FEDD83279 +:1018C0008000D3188003B2308003B27880039D9CDF +:1018D000800094C48002E73680011F4A000080D453 +:1018E000800122948000D13CD401F5DBC00830BBDC +:1018F000F01F0002D802000080011824D401F5DB9B +:10190000C008303BF01F0002D802000080011824FC +:10191000D4314C62E50800622FF81694E558006255 +:10192000781618970D85EBD5C004A365EA0311005E +:101930005C83069BF01F003EE08101788E493038C1 +:10194000F0091900E08801726E1811893088F009D9 +:101950001800E081015DED380010ED310011B1613A +:10196000E3E81181ED380012E3E81081ED3800134F +:10197000089BF1E11001ECCCFFF0F01F002EC071CC +:10198000E611F000FC18E0001031C0914A780E9C7E +:10199000F10900742FF9F1590074C4498E49307867 +:1019A000F0091900E08801420E9CF01F00235C8CB6 +:1019B000C0A00E9CF01F0021E50800682FF8E55834 +:1019C0000068D832330B0E9CF01F0019C6E00A9B4A +:1019D0000E9CF01F0017189AC0E04998201D1AD8D5 +:1019E000E06800981AD84978497C1AD8F01F001787 +:1019F0002FCDC0088ECB302CF01F00151892E08040 +:101A0000011F98D9EAC8FFF81039C25248C8201DF2 +:101A10001AD8E06800A21AD848E848BC1AD8F01FC3 +:101A2000000B2FCDC0080000000080D48000CDD472 +:101A30008001255880011FAC8000D13C8003B2306A +:101A40008003B2A480039D9C800094C48000D318BE +:101A50008003B2D80E9BF01F00445C5CC0E04C38A1 +:101A6000201D1AD8E06800A51AD84C184C1C1AD8AA +:101A7000F01F00412FCDC008069B6416049CF01F88 +:101A8000003FC0E04B98201D1AD8E06800AB1AD880 +:101A90004BB84B8C1AD8F01F00382FCDC0080E9CC5 +:101AA0000497F01F0038C1383D0B0E9CF01F003327 +:101AB000C0E04AE8201D1AD8E06800B51AD84B08E3 +:101AC0004ACC1AD8F01F002C2FCDC008ED3A000CDC +:101AD000ED39000DB169F3EA1189ED3A000EED3BE5 +:101AE0000010F3EA1089ED3A000FF5E91009ED3A1C +:101AF0000011B16AF5EB118AED3B0012F5EB108A8B +:101B0000ED3B0013F7EA100AF40B16186E18ED6A95 +:101B1000000FED6B000CF7DAC208F5DAC108ED6AC8 +:101B2000000EF20A1618ED690013ED6A0010ED6B55 +:101B3000000DF5D9C208F3D9C108ED6A0011ED69AD +:101B40000012300911AAB08911B9F3EA1089FE7A9E +:101B5000F7FE5C89F4091900E0880016F2C9F7FF66 +:101B6000C14800008000CF988003B2308003B310DA +:101B700080039D9C800094C48000CDD48003B33842 +:101B80008000D13CF2C9F8005C79B0B9A989B0A94C +:101B9000ED380009E818FF00ED680009A988ED6834 +:101BA00000083008314BED68000BED68000A0C9C12 +:101BB000F01F00284A885C7CED6C000BA98CED6C52 +:101BC000000AF10900602FF90A9BF15900600E9C90 +:101BD000F01F00221898C0E04A18201D1AD8E068AB +:101BE00000D71AD849F84A0C1AD8F01F00202FCD78 +:101BF000C00830191AD4189A1AD9ECCBFFF4E0694E +:101C000000FF0E9CF01F001A2FEDC0B8E508007011 +:101C10002FF8E5580070E50800662FF8E5580066D3 +:101C20000E9CF01F0014D8320E9CF01F001248A822 +:101C3000F109006A2FF9F159006AD8320E9CF01FA1 +:101C4000000D4858F10900742FF9F1590074D83289 +:101C500080011F4A000080D48000CDD48003B230C0 +:101C60008003B36C80039D9C800094C48001206439 +:101C70008000D13CD431205D30951988FAC9FFF03D +:101C8000FACEFFFC5009330231033056F0C9003060 +:101C9000EA091800E08B00BAE4081800C03030A749 +:101CA000C1582FFC35891988F20818005F0A378956 +:101CB000F20818005F09F5E91009F9B70008F7BC48 +:101CC00001FFF9B70110F9F81800F8CAFFFF300951 +:101CD0003191F2070244F0C000301004F4CC00014E +:101CE000EA001800E08B0005E8C90030C1E80E9456 +:101CF000E6071800C1D1F0C400615C54EC04180080 +:101D0000E088000EF0C00041EC001800E08B0011EC +:101D1000E2041800E0880004341CC028361C2F6838 +:101D2000F00C010CF9E9104915882FFACD3B32EA85 +:101D3000F4081800C0814008103EC6701CA92FFC92 +:101D40001988CA5B5808C28030CAF40818005F1CA2 +:101D5000320AF40818005F1A146C300AF40C1800E8 +:101D6000C1B030DCF80818005F1730ACF808180074 +:101D70005F1CEFEC000CF40C1800C0E030BC309796 +:101D8000F80818005F1CEE0818005F18F9E8000852 +:101D9000F4081800C3A1FAC8FFFC101EA34E2FFEC2 +:101DA000582EC0B0E0890005580EC2F0C298583EC7 +:101DB000C0F0584EC251C168E064FFFFEA1400FF52 +:101DC0000839E08B00234018F3E81189C198E049F5 +:101DD000FFFFE08B001B4018402AB968F1EA1108A8 +:101DE000C0D8E04900FFE08B0011402A4018B968D4 +:101DF000F1EA1108403AF1EA1088F1E91009580BAC +:101E0000F7F91A00301CC028300C2FBDD832D70388 +:101E1000D401202DFACBFFFCF01F0004F9BC00FF19 +:101E2000FBFC10012FEDD80280011C74D431202D51 +:101E3000300630110C9EC4A898557812E7D5B01022 +:101E4000049430075008C0B8E92800000990202306 +:101E5000E1E810805C835C702FE40007E203190066 +:101E6000FE9BFFF40A944008E214FFFEE7D5C00190 +:101E700008023000E0031900C0400584A964080787 +:101E8000E9D7C010B187E80700070E94E0140000FE +:101E9000C060E9D7C010B187E80700075C77EBD5D1 +:101EA000C001EE0E000EEFDEC010B18EEE0E000E81 +:101EB0005805C0B0EFDEC108EC061101A96E5C56F2 +:101EC000FDDEC010EFEE100E780C580CCB615806FA +:101ED000C080F9DEC108A96EFDDEC010F9EE100E5B +:101EE00017B715BC17851796B166EDE5118617ABC8 +:101EF0001585EDEB108B5C781596EFEB100B15AAA2 +:101F0000EFDBC010B166B18BEDE511860E0BEDEA8B +:101F1000108AF9EA100AF40C1610F5DAC010F60A65 +:101F2000000A180AF4090009F2080008F00E000E71 +:101F3000F1DEC010B18EF00E000EF9DEC010B18ED1 +:101F40001C0C5CDC5C8C2FEDD832D4213008189945 +:101F5000F5DBB010301EC0B8F32600001397202A1E +:101F6000EFE610875C8A5C772FE90E08FC0A1900FF +:101F7000FE9BFFF41699E219FFFE120CEDBB000068 +:101F8000C0411989A9691208F3D8C010B188F208B4 +:101F900000081099E0190000C060F3D8C010B188A3 +:101FA000F20800085CD8F9D8B010D822D431300A31 +:101FB000301414981495C488985B7816EFDBB01031 +:101FC0000C9E3009C0B8FD2200001D932027E7E2D7 +:101FD00010835C875C732FEE06090E93E8071900E7 +:101FE000FE9BFFF3169EE21EFFFE1C06FDDBC001FA +:101FF000EA0E1900C0400D8EA96E1C09FDD9C01053 +:10200000B189FC090009129EE01E0000C060FDD9E4 +:10201000C010B189FC0900095C79F7DBC001F20846 +:102020000008F3D8C010B188F2080008580BC0B0FF +:10203000F3D8C108F40A1101A9685C5AF1D8C0109C +:10204000F3E81008780C580CCB81580AC080F3D8FC +:10205000C108A968F1D8C010F3E810085CD8F9D815 +:10206000B010D832D431201DFAC4FFD8169712937D +:102070001092681518966801580AE0800091500A7D +:10208000314BF01F0055400AC0A04D48E06C00FEE7 +:10209000F109005C2FF9F159005CCC286C148C59C3 +:1020A0003138F0091900E08B000F4CD8201D1AD8E8 +:1020B000E068022C1AD84CB84CBC1AD8F01F004B60 +:1020C0002FCDC0085C53E3E310815C71E961000926 +:1020D000A981E9610008158B1598B168F1EB1188A9 +:1020E00015ABF1EB108815BBF7E81008F00B1618CC +:1020F000E9680013E96B0010F7D8C208F1D8C108ED +:10210000E96B0011E9680012E81245005C72A892C0 +:10211000E4031608A883ED380008A8A8ED380009E4 +:102120004B39A8FCA8B8A8EC9208F7D8C010A8DBD7 +:10213000A98BA8CB2FF8B2085807C0D00F8B0FB9C6 +:102140000F98B168F1EB11880FABF1EB1088F3E851 +:102150001008C051EAC8FFFCEBF81001F00916188E +:10216000E968000FE969000CF3D8C208F1D8C1088A +:10217000E969000DE968000E3008E968000BE968BC +:10218000000A500A314B089CF01F001A5C7CE96C75 +:10219000000BA98CE96C000A400AC038781A2F0A93 +:1021A00048E8F10900482FF9F1590048158B1599B5 +:1021B000B169F3EB118915AB6A18F3EB108915BB04 +:1021C000F7E910091039C1910C9B0A9CF01F000A15 +:1021D000C26800008000CDD4000080D48003B3909A +:1021E0008003B3D880039D9C800094C40000734892 +:1021F00080011F4A8000CAF8EB08002C5808C0B0C4 +:102200008C49F0091900E08800070A9B0C9CF01F1C +:102210000006C0580C9B0A9C6A585D185C5C2FFD38 +:10222000D8320000800125A0D42149781896700783 +:10223000C1680E9CF01F0015C1100D8B0D98B16880 +:10224000F1EB11880DAB6E1AF1EB10886E290DBB06 +:10225000F7E8100814581268C1306E075807CEA16D +:1022600048B66C0C580CC040F01F0008C08148985C +:10227000F10900562FF9F1590056C0286C070E9C41 +:10228000D8220000000080CC8000CAE4000080D08A +:10229000000080D4D421204D1897503B149C502A24 +:1022A000501950084096F01F000D403B402A40193D +:1022B0004008C0A148A8E06C00FCF10900562FF9C5 +:1022C000F1590056C0881ADC0E9C1AD6F01F000582 +:1022D0002FED5C5C2FCDD82280012228000080D415 +:1022E00080012064D4314C05EB08004A2FF87817A0 +:1022F000EB58004A0F980F831694F1E31083189659 +:10230000E609160C3048F0091900C090F01F00379C +:10231000EB08005C2FF8EB58005CC2980FB8E7D3CD +:10232000C1040FA2A363F1E2108298585C82E60810 +:102330001900C0539848E4081900C0B20C9CF01F63 +:10234000002B4A98F10900522FF9F1590052C86840 +:10235000069B0E9CF01F00265C8CC0F00C9CF01FAE +:102360000023EB0800502FF8EB580050EB08004E0C +:102370002FF8EB58004ECD48F7D2C0100C9CEEC0A1 +:10238000FFF0F01F001C0895301249B10A9CF01FA5 +:10239000001BC1D0EAC8FFFCC1A06A185808C17070 +:1023A000EF3A0010EF390011B169F3EA1189EF3A01 +:1023B0000012F3EA1089EF3A0013F5E91009103919 +:1023C000C2A00A9B009CF01F000EC2515802E3F508 +:1023D0001000EBF5000030020835EBF50000580561 +:1023E000CD61C9F8000080D48000D13C80011F4A33 +:1023F0008000D210000080CC8000CAE48001255803 +:10240000EE03000307B807A9F1E910893448F00981 +:102410001900C2A0EF39000CEF38000DB168F1E9E6 +:102420001188EF39000EF1E91088EF39000FF3E859 +:102430001008C1B0089BEECCFFF4F01F003DC0A116 +:10244000EF38000CFC19E000B968E618F00012380B +:10245000C0C10C9CF01F00374B78F109004E2FF9DA +:10246000F159004EC5D808955805C0510C9CF01F75 +:102470000031C5680FE90FF8F1E91088F1D8C00EF6 +:10248000C0700C9CF01F002D1896C4A078174AC885 +:1024900091044AC8089B91070C9CF01F002BC3B104 +:1024A000EF3800095868C0B05918C0405818C11119 +:1024B000C0B8089B0C9CF01F0025C2D8089B0C9C40 +:1024C000F01F0023C288089B0C9CF01F0022C2381A +:1024D000089BEECCFFF0F01F0016C0F1EF380010A3 +:1024E000FC19E000B968E618F0001238C0608D17DA +:1024F000302B0C9CF01F00180C9CF01F000E48E8BD +:10250000F10900582FF9F1590058F109004E2FF93F +:10251000F159004E48A93008930848A99308D83AC1 +:10252000EF3800095918FE91FF77C6BB8001255886 +:102530008000D13C000080D4800129BC0000822CA6 +:10254000000082308000D588800115508000F37C27 +:1025500080011910800118FC19B9198A1998B168FD +:10256000F1EA118819AAF1EA1088F3E81008F0C915 +:1025700000015BD9E08800035EFFF7390035EDB953 +:102580000001C0E1761A1438C0B07629105A126AD8 +:10259000C0715CD9F3E8000812385F0C5EFC5EFD88 +:1025A000D431209D503B506A781B403AF519002CDD +:1025B000F2C80013502B5078214917EA17F8F1EAB6 +:1025C00010885C88109BF1D8C00DE21B2000984356 +:1025D000505B2143308B5018F20B0C0A1897F3DA3A +:1025E000B0105C8312985049A37830025C88314067 +:1025F0005088C938401B405AF1DBC00D14485008C0 +:10260000E3D3B010F1D3C01040791039E08900064F +:10261000400B4081ADBB500B300A314B302CF01FCA +:1026200000421894C3708E58313AF4081900E08BB8 +:10263000000F4BE8201D1AD8E06802C31AD84BC817 +:102640004BCC1AD8F01F003C2FCDC008314A402B8C +:10265000781CF01F003A6E19F1D0C010F208000883 +:102660006816EBD1B0108F188E58F0000100AE50F4 +:10267000C2188E52EA021900EA0217205C82C19049 +:10268000302A300B303CF01F0028C071089CF01F2E +:10269000002CE06C00FFC4586E18B842B852189B6A +:1026A00099180415089C5C85F01F00265805C02069 +:1026B0006E075805CDF1ED65000B40085C78ACF86D +:1026C000A988ACE8E2C8FFEC5C78ACB8A988314BCB +:1026D000ACA8ED65000A0C9CF01F001B5C7CED6C47 +:1026E000000BA98CED6C000A4039406A7258089BB7 +:1026F000129C5D18495BF70800302FF8089CF758CA +:102700000030F01F000F40180213404AE1D2B01011 +:1027100014085C835C8850185803FE91FF6D069C7A +:102720002F7DD8328000D3188003B4108003B45CAE +:1027300080039D9C800094C48002E7368000D13CD9 +:102740008000CD3480011F4A000080D4D40148F8B5 +:1027500070091839C04178099109C128580BC0E1A6 +:1027600048B8201D1AD8E06801341AD8489848ACF7 +:102770001AD8F01F000A2FCDC00878089708189BB8 +:10278000305CF01F0007D8020000734C8003B410C7 +:102790008003B47C80039D9C800094C48000C97435 +:1027A000D43118971696183BC0E14BC8201D1AD893 +:1027B000E06800A41AD84BA84BAC1AD8F01F003A16 +:1027C0002FCDC008580BC11076081838C0E04B3820 +:1027D000201D1AD8E06800A61AD84B484B1C1AD8FE +:1027E000F01F00312FCDC0086E156A1811CA11D91B +:1027F000F3EA1089C0303004C1D8118A1199109CB5 +:10280000B169F3EA118911AA11B8F3EA10891248E3 +:10281000314A8F18EECBFFF8F01F0025301B0A9CC1 +:10282000F01F00240A9CF01F002418940A9CF01F3B +:1028300000236E15C1486A1811B9118A119311A8A5 +:10284000B163E7EA1183E7E81083F3E31003F01FB5 +:10285000001A18040A9C0695F01F00180A9C5805D7 +:10286000CEB10C9B0E9CF01F001649689009F5D95B +:10287000C010083AC0E44898201D1AD8E06800C784 +:102880001AD84918487C1AD8F01F00072FCDC00865 +:102890000819089CB009D8328003B4108003B4989A +:1028A00080039D9C800094C48003B4A48002E7361A +:1028B000800118E88000CD0C8000D13C8001274CBD +:1028C000000073508003B4B8D431300618971692C4 +:1028D0004AB30C94300566080A9B0A9CC3E8EF3A99 +:1028E000000CEF39000DB169F3EA1189EF3A000EDF +:1028F000F3EA1089EF3A000FF5E91009705A123A1D +:10290000C1B1EF3A0010EF390011B169F3EA118952 +:10291000EF3A0012F3EA1089EF3A0013F5E91009D3 +:10292000706A123AC0910FCA0FD9F3EA1089906AFF +:10293000F20A1900C0D02FF5580CC090F13A001FD0 +:10294000F939001FF20A1800E08B0003109C70098F +:102950005809F00B171012985808CC21580CC04099 +:10296000F01F0008180658155F9804365F59F3E801 +:102970000008E8081800CAF10C9CD8320000734C1B +:10298000800127A0D42148C83007700CC108F9384D +:10299000001F7806F0C900015808C050F969001FEF +:1029A0001897C0480E9BF01F00050C9C580CCF01D7 +:1029B000D82200000000734C800127A0D431201DD4 +:1029C0004CD8F10900322FF9F159003278161895D8 +:1029D0000D835C83F3D3C004A3695949C080F10916 +:1029E00000442FF9F1590044E08F02570DF80DE132 +:1029F000F1E110810DB80DA24C07F1E21082F01F39 +:102A000000408E885C815C821894F808000858A801 +:102A1000E08A000D189B0C9CF01F003AC5708E8850 +:102A2000E808000858A8E08900524B783009700780 +:102A30005009C3D8ED39000CED38000DB168F1E94B +:102A40001188ED39000EF1E91088ED39000FF3E837 +:102A500010086E591039C291ED390010ED3800118F +:102A6000B168F1E91188ED390012F1E91088ED390A +:102A70000013F3E810086E691039C1710DC90DD843 +:102A8000F1E910888E69F0091900C0F149A8F1092F +:102A900000462FF9F15900460DE90DF8F1E91088CB +:102AA000F1D8C00DC360C3F850076E075807CC318A +:102AB000E08F021E089B0C9CF01F0012083CC065B2 +:102AC000305CF01F00121897C09148B8F109003C23 +:102AD0002FF9F159003CE08F01E0320A300B0E9CD7 +:102AE000F01F000B30394888EF69001F70098F090B +:102AF0009107C138000080D4000073508000CD0CD5 +:102B0000800128C80000734C8000C9D48002E8BC52 +:102B10008EF8F1D8C00DC070314A0C9BEECCFFF896 +:102B2000F01F004F4CF89009F20400045C84B004DC +:102B30000DE8A598EDB80000C120EF38001EE3D1E4 +:102B4000C00DE7D3C004A371E60310FCE20200024B +:102B5000A1A80602EF68001EEF52001C6A1811BB04 +:102B6000300A11AEF7EE108E118BB09AB0AAB0BA3F +:102B7000B08A1499F5DBC00411FBF40A10FC11ECC7 +:102B8000F7EC108CF9DCB00DA37CF7DCC010B0DBE7 +:102B9000A98B180EB0CB140E10935C8E3016F5DE98 +:102BA000C010B0FAA98AB0EA6E11029BC548761A25 +:102BB00015C015D2E5E010825C82E40C1900C292C7 +:102BC000F6021618B0BBB082E5DBC208F7DBC1081D +:102BD000B092B0AB5809E080008213E213FBF7E239 +:102BE000108BF60C1900E08300FF15DB15CAF7EA1D +:102BF000108AF40E1900E08B00F7EA0A1618B2B535 +:102C0000B28AF5D5C208EBD5C108B29AB2A5C6788A +:102C1000E40C1900E08000E815E015FBF7E0108BEC +:102C2000F60C1900E08300E05809C09013FB13E98B +:102C3000F7E91089E4091900F9B601001582159B1E +:102C40001499B16BF7E2118B15A215BAF7E2108B4C +:102C5000F5EB100B580BCAC1C52900008002E736FE +:102C60000000735013EB13FA11CCF5EB108A11DB53 +:102C7000F7EC108BF60A1900E088000F4BC8201DF6 +:102C80001AD8E068018E1AD84BA84BBC1AD8F01F8E +:102C9000003B2FCDC008EA0B1618B28BF7D5C2083F +:102CA000B2B5B29BEBD5C108B2A511CB11D9F3EBEC +:102CB0001089F20A1900F9B60100C1185801C0E0E4 +:102CC0004AB8201D1AD8E06801971AD84AC84AACF9 +:102CD0001AD8F01F002A2FCDC0088F15EF39001E1B +:102CE000EDB90000E08100E45806E08000E16E19D3 +:102CF000721A15CB15D9F3EB1089E08100D9118B2D +:102D000011951099B165EBEB118511AB11B8EBEB97 +:102D10001085F1E51005C1A807F86A1907EB13CC77 +:102D2000F1EB108B13D8F1EC1088F00B1900E08157 +:102D300000BF13881395B165EBE8118513A81293B2 +:102D4000EBE8108513B8F1E510055805CE61123A8D +:102D5000C1A14878201D1AD8E06801B91AD848984E +:102D6000485C1AD8F01F00052FCDC0088003B410AE +:102D70008003B4D480039D9C800094C48003B4F489 +:102D80008003B52C138A1398B168F1EA118813AA4D +:102D9000F1EA108813BAF5E81008C0E04C68201D6D +:102DA0001AD8E06801BB1AD84C484C5C1AD8F01FFE +:102DB00000452FCDC00813F813E9F1E91088EF0999 +:102DC000001C5C88F0091900C1704BB8201D1AD88E +:102DD000E06801BD1AD84BC84B9C1AD8F01F0039C7 +:102DE0002FCDC0080A9CF01F00394B9818143006EC +:102DF000B0040A9CC5982EC8EF58001C6E187016B7 +:102E00000D880D94B164E9E811840DA8E9E81084F7 +:102E10000DB8314AF1E41004EECBFFF80C9CF01F22 +:102E2000002DEF38001CACA8EF38001D0C9CED65A0 +:102E3000000BACB8ACE5ACF5ED65000A314BF01F0A +:102E400000265C7CED6C000BA98CED6C000A6E1604 +:102E5000C1586815089C3ECBF01F0020089B0C9CB5 +:102E6000F01F001F0B890BB80B94B164E9E91184C2 +:102E70000BA9E9E91084F1E410045804CEB10E9CCA +:102E8000400BF01F00180C9C49178E05F01F000F17 +:102E90001815AE05C0D849480A9CF109003630061D +:102EA0002FF9F1590036F01F0011C02830060C9C94 +:102EB0002FFDD8328003B4108003B53C80039D9C65 +:102EC000800094C48003B5608000CD0C0000735076 +:102ED0008002E73680011F4A8000CDD48000CD34C7 +:102EE0008001274C000080D48000D13C305CF01F72 +:102EF00000061897FE91FDF3FE9FFDDE5809FE9136 +:102F0000FEB3CDDA8000C9D4D4211898F937002E49 +:102F1000761E306CF8071800C0E04948201D1AD80A +:102F2000E06801B41AD84928492C1AD8F01F0012B9 +:102F30002FCDC008306C201C5C5CF20C0706FC0C2A +:102F40000007EF66000EF40C0706EF660014580C3D +:102F5000CF313089FD6C001BFD69001A109C706830 +:102F60005D185C5CD82200008003B5948003B5DC5A +:102F700080039D9C800094C4D4211897580CC0E114 +:102F800049D8201D1AD8E06800941AD849B849CC0D +:102F90001AD8F01F001C2FCDC00878185808C0E1BF +:102FA0004958201D1AD8E06800951AD84968494C3C +:102FB0001AD8F01F00142FCDC0086E186E06109C92 +:102FC0005808C0E148C8201D1AD8E06800991AD8EE +:102FD00048E848BC1AD8F01F000B2FCDC008F01FDE +:102FE000000C0E9B306C0C97F01F000A5806CE6147 +:102FF000D82200008003B5948003B62080039D9CF6 +:10300000800094C48003B62C8003B63C8000D13C81 +:103010008000C974D431201D500B1897580CC0C0C3 +:103020004D084D19118CF80815031818F2080028DE +:1030300070495829C0D030AA30094CBE129C1C924D +:10304000129B2ECE1298149314911490C1980F8A4B +:103050000F99B169F3EA11890FAA7018F3EA108980 +:103060000FBAF5E910091039CE714C08F109002E9C +:103070002FF9F159002ECE480C990A9C089B30A6D6 +:10308000EC031800C0A1FCF6FFFC5806C0611296C4 +:10309000189516941093C498FCF6FFFC5816C2417C +:1030A0005807C0F00F860F95B165EBE611850FA6A6 +:1030B000EBE610850FB6EDE5100564160C35C26021 +:1030C00064051D865805C080F2061800C2B3189525 +:1030D0001694109AC2A80C94F6061800C2331296E1 +:1030E00018951090C2285826C1D15807C1300F86B4 +:1030F0000F95B165EBE611850FA6EBE610850FB6CF +:10310000EDE5100564160C35C0514969109CB28874 +:10311000C9781D85F8051800C053129616941091B1 +:10312000C0481296189516942FF82E4E5C582E42D1 +:1031300030A9F2081800CA11F2031800C061400655 +:10314000EDB60000E081007B4005E2150002E08161 +:1031500000763098F0031800E089000A5C53C498A8 +:103160000000735200007354000080D430A8F001B6 +:103170001800C180E7D1C0084B38E60915030619CD +:10318000F00903285808C2304B08201D1AD8E068FF +:1031900001761AD84AE84AFC1AD8F01F002F2FCD22 +:1031A000C008F0001800C040E7D0C008C108E20A1B +:1031B0001800C4404A48E7DAC008E60615030616B8 +:1031C000F00600266C0CF01F00258D053098F003EA +:1031D0001800E088000F49D8201D1AD8E068018C3B +:1031E0001AD849F849BC1AD8F01F001B2FCDC008C7 +:1031F0004959E6081503300A0618F2080028F0C9F4 +:10320000FFF0930A5807C0D00F8B0FBA0F99B1691E +:10321000F3EB11890FABF3EB1089F5E91009911964 +:103220004899E60815030618F20800282F08300907 +:10323000069CB0C948B8B083C038E06C00FF2FFDD1 +:10324000D8320000000073548003B5948003B64C5C +:1032500080039D9C800094C480012F788003B66415 +:1032600000007352D431494730050E963EF42EC704 +:10327000ECC3FED40F882FF85C58AE88EEF9FFFC43 +:103280005829C061E8081800E08B0009C0F85819F7 +:10329000C0D1F2081800E088000A6C0C580CC0403D +:1032A000F01F00068D05EF45FFFC2E472E46063722 +:1032B000CE21D8320000735480012F78D431306889 +:1032C0001293189616951497F939002EF0091800E4 +:1032D000C0E04B78201D1AD8E06801DA1AD84B58A4 +:1032E0004B5C1AD8F01F00352FCDC008580BC5C055 +:1032F00017891798B168F1E9118817A9F1E91088C1 +:1033000017B9F3E81008C500189B0A9CF01F002CA1 +:103310001894C4A10B88FC19E000B968E618F00005 +:103320001238C420069B0A9CF01F00265C5CE80C47 +:103330001800C3C55C6C4A49F8081503302AF00C24 +:10334000010CF20C00289166F0C9FFF0930A0FDA25 +:10335000F16A000D0FCAF16A000C0FBAF16A000B96 +:103360000FAAF16A000A0F9A1095F16A0009ECC3DE +:10337000FFD10F8AB2C4F16A0008C0F87009701456 +:103380008B09F01F00120E99069A089B0C9CF01FE7 +:103390000010089CF01F000F6A08306C109B580842 +:1033A000CEE1109CD832E06C00F6D8328003B594A0 +:1033B0008003B67880039D9C800094C480012558CA +:1033C00080013014000073548000C97480012F08FC +:1033D0008000D13CD421189E580CC0E14958201DD2 +:1033E0001AD8E068024A1AD84938494C1AD8F01F4E +:1033F00000142FCDC008761AF4C8FFE4F137000F8F +:10340000F136000CF139000DF138000E782BB1695E +:10341000F3E61189F3E810897818EFE910091059DB +:103420001669C061F4CBFFD82ECAF01F0006D8225F +:103430008003B5948003A13880039D9C800094C4D0 +:10344000800132BCD431202D189616911495580C59 +:10345000C0E14CA8201D1AD8E068027F1AD84C8819 +:103460004C8C1AD8F01F00482FCDC00894593378DF +:10347000F0091900E08B000A4C48149CF109002265 +:103480002FF9F1590022C3087414E8C7FFE40F981C +:103490000F89F1E910893018F0091900C1E10FD83E +:1034A0000FC9F1E91089E0680604F0091900C1515B +:1034B0000FB80FA9F1E91089E0680800F0091900B8 +:1034C000C0C1E938001BE939001AF1E91089E06848 +:1034D0000806F0091900C0E04AC80A9CF109002852 +:1034E0002FF9F1590028F109001E2FF9F159001E9A +:1034F000CA184A68F109001A2FF9E8C3FFD6F15932 +:10350000001AFAC2FFFC304A069B049CF01F002000 +:10351000EF380018EF390019B169F3E81189EF3875 +:10352000001AF3E81089EF38001BF1E910096C1854 +:103530005808C0C01039C0A1049B3019E8CAFFDC8C +:103540000C9CF01F00143018C0A83009EECAFFF818 +:10355000FACBFFFC0C9CF01F000F30080FEA0FF9AC +:10356000F3EA1089301AF4091900C1503028F00923 +:103570001900C591C52800008003B5948003A138C7 +:1035800080039D9C800094C4000080D48002E736B4 +:10359000800132BC5808C4D03008AEE83028304A28 +:1035A000AEF8EECBFFF2EECCFFE8F01F0025304A7C +:1035B000069CEC0A000BF01F0022ED39002E30684B +:1035C000F0091800C0E049F8201D1AD8E06802D9B7 +:1035D0001AD849D849DC1AD8F01F001D2FCDC008D1 +:1035E000306820185C58EE080009F33B0008F36BC4 +:1035F0000012E808000AF56B000EE208070BF36BF7 +:103600000008E2080709F56900145808CEB10C9CBF +:103610006C680A9B5D18C0D80C9CFACBFFFCF01FAD +:10362000000DC07848C8F109002C2FF9F159002C81 +:103630000A9CF01F000A2FEDD83200008002E73606 +:103640008003B5948003B5DC80039D9C800094C406 +:103650008000B3B4000080D48000D13CD42178191C +:10366000F338001BF339001A1697F1E91088189601 +:10367000E0690800F2081900C070E0690806F20865 +:103680001900C231C1C8189B0E9CF01F00173E4B99 +:103690000C9CF01F0016C0E04958201D1AD8E068A5 +:1036A00004A41AD84938494C1AD8F01F00142FCD59 +:1036B000C0080E9B0C9CF01F0012C148189A169C63 +:1036C0002D1BF01F0010C0E848F8F10900282FF961 +:1036D000F1590028F109001E2FF9F159001EF01FC1 +:1036E000000BD82A800133D48000CDD48003B59458 +:1036F0008003B36C80039D9C800094C4800122E40D +:1037000080013444000080D48000D13CD431300AA0 +:1037100018941691303C338BF01F0042E8C8FFD15B +:103720001895580CC0A14C08E06700FFF10900246F +:103730002FF9F1590024C738985A3379F20A190041 +:10374000E08B000F4B98201D1AD8E06804311AD87E +:103750004B784B8C1AD8F01F00382FCDC008300999 +:103760007813E6C7FFE4AEE93019AEF93069E93AFB +:10377000002EF20A1800C0E04AC8201D1AD8E068DE +:1037800004391AD84AD84ABC1AD8F01F002B2FCDBA +:10379000C00830664AAB4ABA20165C56F006070CE1 +:1037A000EE060009F36C0008F606070CF36C001235 +:1037B000F406070CE6060009F36C000EF006070C91 +:1037C000F36C00145806CE913042EECCFFF2E802C2 +:1037D000000B049AF01F001C049A029BEECCFFE839 +:1037E000F01F00193069AED2AEC9AEB6AE863088D1 +:1037F000301AAEA8AE9AE769001BE768001A089C69 +:1038000068680A9B5D184888F10900182FF9EFDCF9 +:10381000C008F15900180A9CF01F000C0E9CD83209 +:103820008000D318000080D48003B5948003B6A034 +:1038300080039D9C800094C48003B5DC8003B71690 +:103840008003B58D8002E7368000D13CD4211694E8 +:103850001896189B1497089CF01F00541895E08147 +:1038600000DF09890998B168F1E9118809A9F1E92E +:10387000108809B9FC1AE000F3E810081099E6195D +:10388000F0001439E08000CC5808E08000C9301BFB +:10389000089CF01F00475C5CEA0C1800C0545807F5 +:1038A000E08100CBCC184C39EBDCB008EA081503FA +:1038B0000A18F20800282F0870095809F9B9000100 +:1038C000F1F90A004BB9EA0815030A18F2080028B2 +:1038D0007048F0C900015819E088000F4B68201D9E +:1038E0001AD8E06803A51AD84B484B5C1AD8F01FC9 +:1038F00000352FCDC00858185F0858075F09F3E856 +:103900001008C041E06400FFC078089B0C9CF01FC9 +:10391000002EE9DCC0085807E08000854A5AEA0911 +:1039200015030A19A369F409000870485828C0B1A2 +:103930002F890E9BF40900090C9CECCAFFD1F01FE3 +:103940000023C6B85818C6E110990E98905B904AAB +:10395000F40B1900C111700A580AC0E04968201D13 +:103960001AD8E06803C41AD84998495C1AD8F01FDD +:1039700000152FCDC008F13A000CF20A1800C05112 +:1039800070085808CE41C51890CB300A303CF01F63 +:1039900000111896C4F00E9BF01F000F5C5CC1F084 +:1039A0000C9CF01F000EC468800125588001301463 +:1039B000000073548003B5948003B6D480039D9CAB +:1039C000800094C48001370C80012F088003B6FC6E +:1039D0008000D3188000CF988000D13C306CF01F5D +:1039E000001AC170300899169908EA081503F00505 +:1039F00001054968F00500256A045804C07008985C +:103A000068045804CFD1910CC0288B0C089CD82294 +:103A10000C9CF01F000F089C5C5CD822E06C00F648 +:103A2000D822089C5C5CD8220E960E9CF01F0009E0 +:103A3000CD6B089C5C5C4888F10900242FF9F15992 +:103A40000024D8228000C9D4000073548000D13CE7 +:103A50008000CD1E000080D4D421202D169618970A +:103A6000149531CB0C9CF01F0027C0804A68E06C95 +:103A700000FE90592FF9B059C4180E9B0A9CF01FF4 +:103A80000023C3410B890B98B168F1E911880BA998 +:103A9000F1E910880BB9FC1AE000F3E8100810995E +:103AA000E619F0001439C0F13019BAA935E9BAC9DC +:103AB000F3D8C207BAF8BAD9A988BABCBAE8FAC921 +:103AC000FFFEC1586E1912586E291268C0906E38E8 +:103AD0005808C041E06C00FCC118EEC5FFF40C9A18 +:103AE0000A9B0E9CF01F000AC08848A90C9B0E9CE4 +:103AF000EECAFFD1F01F00085C5C2FEDD822000059 +:103B00008000CDD4000080D4800125588001384C3D +:103B10008003B58D80012F0878983019B0895EFC3C +:103B2000D4217897EF380024EF390025F0091800E8 +:103B3000C021D82AEE080028201D701630086C1904 +:103B40008CCA8CDB20EA1AD620EBF2CCFFF2F01FF5 +:103B500000182FED587CC0F0581CC0310C95C138AE +:103B6000EF3800242FF8F1D8C0030C9CEF68002434 +:103B7000F01F0010E06C00F4D8228ADB6A1CF01FF2 +:103B8000000E6A055805CFA1EF3800242FF8F1D8B0 +:103B9000C0030C9CEF680024F01F00064878E06C1E +:103BA00000F290092FF9B009D82200008001933467 +:103BB0008000D13C80013F7C000080D4D421204D86 +:103BC0001896F01F002D5806C5306C955805C50095 +:103BD0000B885808C4D0E0680600300ABA68E06B69 +:103BE0000600303CF01F00251897C3F03008FACBD0 +:103BF000FFF4AA88781CF01F00229A6B580BC35060 +:103C00005C7BFAC8FFF2FAC9FFFCFACAFFF86E1C27 +:103C1000F01F001C586CC2606E18402B101B40181F +:103C20005C5B0E9C100B5C7BF01F001749789019B1 +:103C30002FF9B0196E19F338001BF339001AF1E9A6 +:103C40001088E0690800F2081900C060E069080601 +:103C5000F2081900C0716C480C9B0E9C5D185C5CEE +:103C6000C0400E9CF01F000A0C9CF01F000A2FCDD4 +:103C7000D822000080013FA08000D31880013F5867 +:103C8000800192DC8000D210000080D48000D13C02 +:103C900080013B20D4211897580CC0E149B8201D61 +:103CA0001AD8E06801491AD8499849AC1AD8F01FC7 +:103CB000001A2FCDC008499899983778F9680036CE +:103CC00036C8F9680037496899584968189B996857 +:103CD000495CF01F0016496CF01F00163628EF688B +:103CE00000353068EECCFFD1EF68002EF01F0012D7 +:103CF000581CC040E06C00F4D822E06805DC300CB1 +:103D0000EF58002CD82200008003B71C8003A13894 +:103D100080039D9C800094C40000746C80013A581C +:103D200080013D5880013B1880013E6880013D388C +:103D300080018F4480019128D40116985C7A189BE9 +:103D40002F29109C5C79F01F00045C7CF9BC00FFFB +:103D5000D80200008000CEC4D42131B918977898D9 +:103D6000965AF20A1900E08B0005E06C00F4D822A4 +:103D7000F1390025F13C0024F2CAFFFFF5DAC00357 +:103D8000183AC041E06C00F2D822F16A0025F0092F +:103D90000028169C911B3F26F01F00050E9CF01F6B +:103DA0000005EC0C1800CFB0D82A00008000CD1E12 +:103DB00080013B20D42130061897E9DBC01030A5E4 +:103DC000C138EE060708201D48BC1AD8F01F000BAA +:103DD0002FED5806C080EC050C085809C041488CEE +:103DE000F01F00062FF60836CED5486CF01F0003F2 +:103DF000D822000080037AF0800094C48003B76862 +:103E0000800384D448CD48D0E3B00001D55348C0E6 +:103E100048C10230C06248C2A505A1240230CFD3F8 +:103E200048A048B10230C06230023003A122023003 +:103E3000CFE3488F000100008003760000000008F7 +:103E4000000009B88003F480000009B800008CC8A5 +:103E500080008EDCD4013018F96800087808580812 +:103E6000C030781C5D18D802D4014869930C931BAC +:103E7000F33800085808C040129CF01F0003DA0A0B +:103E80000000749880013E54D421201D1895169688 +:103E90001494300B30CA49DCF01F001D300B49DC94 +:103EA000F01F001D300B49DCF01F001D497B49DC71 +:103EB000F01F001D1897581CC0400E9C2FFDD822E3 +:103EC000F01F001A1897581CCF910C9B0A9C49862A +:103ED0008D07F01F00181897581CC04030088D0837 +:103EE000CEDB30088D08F01F00141897581CCE61E7 +:103EF000FACBFFFD302CF01F0011F9B701FFFBF8E2 +:103F00000803E9F80A00CDAB00007498800091D056 +:103F100080013F8C80018F3080013F3C80019F6099 +:103F200080013E54800144588001440C0000749488 +:103F300080018F488001443080014110D401169CDB +:103F4000580BC041F01F0004D802300B301CF01F8A +:103F50000002D80280014110D4014879F3380008EA +:103F60005808C021DC0A3008F3680008F01F00037D +:103F7000DA0A00000000749880014284D4015C7B5E +:103F8000F01F0002DA0A00008001433CD401169CB5 +:103F9000F7DAC010F01F0002D80200008001433C95 +:103FA000EBCD40C0203DF01F00164969F3380008F2 +:103FB0005808C04072085808C0402FDDE3CD80C0CB +:103FC000E0680100FAC6FFF4E06C01000CE8F01FA5 +:103FD000000E0C9B1897F01F000D9A5B580BC0A0A9 +:103FE0005C7BFAC8FFF81A99FACAFFFC0E9CF01F16 +:103FF00000080E9CF01F0007CE1B0000800140A4AB +:10400000000074988000920080013F58800192DC8B +:10401000800091E8D40148583019701CF1690009FA +:10402000700A5D1AD8020000000074A8EBCD40CCE5 +:10403000206D49A6FAC7FFF46C2E8F2EECE200002B +:10404000EEE3000016961093FACEFFF0580CC22053 +:104050007C08FC1C8000F1EC100BF4081509BBB8BF +:10406000F1E611C812481648301C9D08F01F000CDC +:104070000E9C30CA1A9BF01F000BFB38000AA68862 +:10408000FB39000B300CA699F01F00052FADE3CDD6 +:1040900080CC7C0BCE3B00008003B774800075B4ED +:1040A00080007534EBCD4080201D4987EF38000833 +:1040B000EDB80000C071EF3900093008F0091800B0 +:1040C000C0402FFDE3CD808030091A98129B129CCE +:1040D000305AF01F000F3FF91B88F2081800CF205C +:1040E0001B98EDB80001CEE13008301C109B302940 +:1040F000E06A00F0F01F000630186E1CEF6800093F +:104100006E095D19CDFB0000000074A88001402CF1 +:10411000EBCD40C0201D301AF40C1800C1B0C08394 +:104120003028F00C1800C2602FFDE3CFC0C01A97F2 +:10413000300630091A98E06A00F1129B301CF01F1B +:1041400000161B98EC081800CF51300C2FFDE3CD62 +:1041500080C018961A9730191A98E06A00F1300B4F +:10416000129CF01F000D1B98EC081800CF51300C6A +:10417000CEEB48A8F1390008F9D9C001F7FA1E00C2 +:10418000F9BC0100F9B8005AF7F80E002FFDE3CD95 +:1041900080C000008001402C000074A8EBCD406876 +:1041A00048F516961893AA4B301CF01F000E0A9C77 +:1041B000310A300BF01F000C069BF5D6C010300CF6 +:1041C000F01F0009304A300B488CF01F0007300CFC +:1041D000F01F00040C9CE3CD80680000000002107A +:1041E000800075B4800075348003B780EBCD40400B +:1041F00020ED30083009FAE90018FAE90000FAE980 +:104200000008FAE9001049BBFAC6FFD4762A8D2AC5 +:10421000F6E80000301CECE90000F01F0017320A3D +:10422000300B1A9CF01F00150C9C30CAFACBFFE033 +:10423000F01F0012300CF01F00103019FB38002A5C +:10424000F2081800C0503FFC2F2DE3CD804048C835 +:10425000F1390008F9D9C001CF8030083039304A2F +:10426000109B301CF01F00072F2DE3CF8040000073 +:104270008003B784800075B480007534000074A892 +:104280008001402CD42130094A881695F169000933 +:104290001896320BF01F00268C085CC82FE8F7D860 +:1042A000B010AA0BEFDCB010F6C90007E06805F902 +:1042B000F0091900E08B00300D890D98F208180004 +:1042C000C220F6071900C182E0640200F9D7C010CD +:1042D0005C7B181BEC0C000CE04B0200E80B17B0E9 +:1042E0005C7BF01F00138A0B0E0CEFDCB010EE0BA2 +:1042F0001900FE9BFFED48F83009118AF20A1800F8 +:10430000C0D1D8220DA8F2081800CDC10DB8F2080E +:104310001800CD813008AA08D822F5DBC010486CFF +:104320000C9BF01F0006D822000074A88001419C5D +:10433000000074A48003B76C8001447CD4314A38F7 +:1043400018921695118A3009F20A1800C3615805AF +:10435000C33049F83004F0C0FFF4E0610200C22825 +:10436000E06602000C970C93301CA006F01F0019A9 +:10437000300B497C314AF01F0018E404000C0E9AFF +:10438000300BF01F0015304A300B494CF01F001263 +:10439000300CF01F0010EA0601080604EBD8B0103C +:1043A000C0B0E2051900FE9BFFDDEDD5B010EFD6E1 +:1043B000C0100E93CDABD832F5DBC010189B488CE3 +:1043C000F01F0008CC5B0000000074A4000001FC9A +:1043D000800075B4800075348003B7808003B770A7 +:1043E0008001447CD401201D3009301C1A98E06AF9 +:1043F00000F5129BF01F0004314CF01F00042FFD4C +:10440000D80200008001402C800075D2D401F01F3A +:104410000007F01F0007C03030CCD802F01F0003A7 +:10442000F01F0003CFA1DA0A800143E4800141ECD0 +:10443000D401314CF01F0006F01F0006C03030CC14 +:10444000D802301CF01F0004DA0A0000800075D288 +:10445000800141EC80007618D4014878910C911BC2 +:10446000F0CCFFF8F01F0005F9BC010CF9BC00010D +:10447000D8020000000074A8800076385EFCD703E4 +:10448000EBCD40F849C56A096A181039C2F08B0CA7 +:10449000EAC7FFF0EAC6FFF4EEC30010EAC4FF70FB +:1044A0000F89EDB90000C091EDB90001C0616C0940 +:1044B0006A081039E08800082F072F060837CF1147 +:1044C000E3CD80F86E19300B169C5D190F883FDA2A +:1044D000F1EA0009EDB80002C0716609EEF8FFF8D4 +:1044E00012088D08CEABAE89CE8B5809CD118B1C2E +:1044F0008B0CCCFB000074B8EBCD408048CE1897F5 +:10450000300AFCCBFFF0F408150417892F88FC084B +:10451000000CEDB90000C0512FFA2F0B588ACF4183 +:104520003018F96800088F0AE3CF9080000074B853 +:104530002FFC4849A56C18091388A1D8B2885EFCE5 +:10454000000074B82FFC4848A56C30091808B089E1 +:104550005EFC0000000074B8EBCD40E0189E14979C +:104560001295587BE08B002C496AF6C8FFFFA568BE +:10457000F408000C1989EDB90001C1F0F608150422 +:104580001296F4080008A1B6F60915012FF9F409EE +:10459000093E740AB8869157FC0A000A913A5805F8 +:1045A000F9BC0001F9B90104EDD9E138F9F81E00B0 +:1045B000F9BC0101E3CD80E0E3CF80E0E3CFC0E0D0 +:1045C000000074B848387019700C121C5EFC0000B2 +:1045D000000074B85EFC300899085EFC1899780CED +:1045E000580CF9B80001F3F80A005EFC300899088D +:1045F0005EFC300899085EFC5EFC5EFC5EFC5EFCC6 +:10460000D401580BC110F80B000B300A487E7C090E +:10461000F40900092FDAF208141FB98810091019DB +:1046200018C9163CCF51D802000074B85EFD5EFF79 +:104630005EFF5EFF5EFF3FDC5EFC78082FF89908A6 +:104640005EFCD401780820189908C020D80A5D1BA8 +:10465000DA0A301899085EFCD401F01F0002D80273 +:1046600080016D6CEBCD406048784889F5DBC01067 +:104670001895189B7006720C5D160A9CF01F0004BA +:10468000E3CF906000007540000074B4800091E8B2 +:10469000D401E06A0088300B485CF01F0006F01F70 +:1046A00000064868300C9118910CD802000074B8CC +:1046B000800091D0800146C000008B545EFCD7037F +:1046C000D401F01F0011F01F0011301B4909169C86 +:1046D000490AF01F00114919491A301B303CF01FDC +:1046E000000EF01F0010300A301BE06C00F0F01FCD +:1046F000000EF01F000E300A302C149BF01F000C2F +:10470000D80A0000800148C0800147888003B79024 +:10471000800146BC800148548003B794800157A4AF +:104720008001499C800147E0800149F480014730C5 +:104730004828F00C092B5EFC00007548EBCD40E0EA +:104740004905189716966A085808C0205D1848E869 +:10475000F007032C580CC061C088F0061800C09008 +:104760002F8C19885808CFA16A085808C080C00843 +:1047700078193028F0091800FE9BFFF8E3CD80E09F +:1047800000007544000075485EFCD703EBCD40FC8B +:104790004935189630120A94EAC3FFF46A0858089B +:1047A000C0D068385808C19030185806CF805816C5 +:1047B000C0305808CF40E3CD80FC48976E28701970 +:1047C000703C700B5D196E2870296E188F29103996 +:1047D000EFF20A003008CEAB0697CF1B000084B47E +:1047E000EBCD40C018961497580BC24049789009F9 +:1047F000F6091900E088001BF60B00184949F20879 +:10480000002C781A74085808C171741E7428103E60 +:10481000C1507C283009951895099D369D07FD6B80 +:10482000001078089D18E3CD80C0307B305CF01F0D +:104830000009E3CD80C0741ECEDB306B305CF01F0E +:104840000005E3CD80C00000000002200000755C80 +:104850008001473CEBCD408049281497129E581B9D +:104860005F8A9009F80919005FB81468C130F80C24 +:10487000001AF60B0019F4CCFFFF48BB48B8F60A43 +:10488000002AF0090029952EF60C09299507E3CD99 +:104890008080302B305CF01F0006E3CD808000006C +:1048A000000002200000755C000084B48001473CD9 +:1048B000D401307B305CF01F0002D8028001473CFD +:1048C000EBCD404030084AB9B2884ABA940858083B +:1048D000C4D04AA95C784AABF00800184A9EA36885 +:1048E000300C2F88F6CAFFF4F20800082F89930CC9 +:1048F000F34AFFFCF34EFFF82F491039CF91F6CE63 +:10490000FFE84A1A49EB301C970C972A971A14981B +:10491000F4C9FED42EC8F148FFF41238CFC1F54ACD +:1049200001342F4BF4CAFEC01C3BCEF1E06A00807C +:10493000300B496CF01F00164948F0C9FF902F0852 +:10494000F148FFFC491A1238CFB130064918F54634 +:10495000007C910A9116310A0C9B48FCF01F000C58 +:1049600048E80C9C9106E3CD8040485BCC9B00005E +:1049700000007598000002200000755C000084B4FF +:10498000800148B0000082340000759C800091D006 +:1049900000007630000076200000761C4848485918 +:1049A000485A91099119913A912A5EFC000002241B +:1049B000800149D4800149EC48484859485A911926 +:1049C0009109913A912A5EFC00000224800149D4A9 +:1049D000800149EC48494858311AEA1A4000143C11 +:1049E0005E085E19800149D480014A0C481C5EFCB7 +:1049F000800149ECD4013019300A303BFC1C4000E6 +:104A0000F01F0002D8020000800186C8EBCD408074 +:104A10004B373099EA194000123CC310E088001F60 +:104A200030B9EA194000123CC2A0C4233139EA1956 +:104A30004000123CC500E069078AEA198000123C78 +:104A4000C241761CF01F0027300A4A77149B314C74 +:104A5000F01F00260E9CE3CD80803019EA1940003B +:104A6000123CC320E08800153079EA194000123C5E +:104A7000C0603089EA194000123CC0713019300A18 +:104A8000303BF01F001B49B70E9CE3CD8080FC1922 +:104A90004000123CCFA130194978300AF149004456 +:104AA000304C149BF01F00110E9CE3CD8080301918 +:104AB000300A303B30ACEA1C4000F01F000D48D7F4 +:104AC0000E9CE3CD8080302B300CF01F000C0E9C30 +:104AD000E3CD808048470E9CE3CD808080014A0C66 +:104AE0008001DA2C800149D480014658800186C8B3 +:104AF000800152F0000087F480018390D401201DD2 +:104B00001A9CF01F0008C07040085818E088000682 +:104B1000F01F00052FFDD802F01F00042FFDD80262 +:104B200080015F4480015EDC80015EB4EBCD40F823 +:104B3000201DFEF805EA189716951496103AC3A0A2 +:104B4000FEF805E0103AC610FEF805DC103AC06029 +:104B50000C970E9C2FFDE3CD80F8E068018CEA18DD +:104B60008000103CE08000F7E068078AEA188000C7 +:104B7000103CE08000ADE0680186EA188000103C3F +:104B8000CE8176170E9CF01F0169F01F0169C0915C +:104B9000FEF805A0EEEA0000F0EB00006E29912976 +:104BA0000C97FEFA0592300BFEFC0590F01F016495 +:104BB000CD1BF01F015F1894C4D1E0680184EA188E +:104BC00080001037E0800185E08B00D2E0680107AB +:104BD000EA1880001037E08001A0E0680183EA183D +:104BE00080001037CB616A170E9CF01F0156E080E1 +:104BF0000230FEF905523048F34800440E9B334C16 +:104C00000C97F01F0152CA6BFEF4053CE0680112DC +:104C1000EA188000E8F300F8103CC540E08B006320 +:104C2000E0680107EA188000103CE08000F7E068C7 +:104C3000010DEA188000103CE080010DE0680105DC +:104C4000EA188000103CC851761C1497F01F0140F0 +:104C5000C81BFEF304F2E0680188EA188000E6F45D +:104C600000F81037E08001B0E08B00ABE068018312 +:104C7000EA1880001037E080018BE0680184EA18B0 +:104C800080001037E080016EE0680107EA188000BC +:104C90001037FE91FF5F6A18303CF13B000BF01FAC +:104CA000012D3019300A303B30CCEA1C4000F01F97 +:104CB000012A300AFEF70470149B301CF01F0127F4 +:104CC000C49B761C1497F01F0126C44B6A1CF01F6E +:104CD0000125300AFEF70490149B314CF01F011F90 +:104CE000C39BE068018AEA188000103CE08000CB9A +:104CF000E068078AEA188000103CCE90E068011551 +:104D0000EA188000103CFE91FF2576150A9CF01FE2 +:104D100001170BC93048F0091800E08001BBE08B97 +:104D2000019B3008F0091800E08001BF6738301996 +:104D300011EAF20A1800E08001DD0A9CF01F010C64 +:104D4000FE90FF08300A0C97305C149BF01F0103A3 +:104D5000C01B76170E9CF01F0107F01F00F5C4F171 +:104D60000E9B33DC0C97F01F00F9CF4AE068018AF4 +:104D7000EA1880001037E08000BDE068078AEA1872 +:104D800080001037E0800099E0680188EA18800010 +:104D90001037FE91FEDF6A170E9CF01F00F7C0A0CF +:104DA000F01F00F63069FEF8039EFEF60376F14927 +:104DB00000440E9B336C0C97F01F00E4CCBAE06803 +:104DC000018EEA1880001037E08000B7E068078A9B +:104DD000EA1880001037FE90FF7BE068018AEA182D +:104DE00080001037FE91FEB66A160C9CF01F00E49E +:104DF0001897E0800114FEF7032ACACA3099FEF81A +:104E000003460C97F1490044FEFA032C300BFEFCDC +:104E10000372F01F00CBC9EA76150A9CF01F00DA76 +:104E2000302B169CF01F00D9FEF702FCF01F00C0CB +:104E30001896E08100DD0A9B337CF01F00C40C9AB9 +:104E40003019303B30ECEA1C4000F01F00C3FE9FDD +:104E5000FE8276160C9CF01F00CE302B304CFEF7F5 +:104E600002C6F01F00CAF01F00B2E08000EC30194B +:104E7000300A303B310CEA1C4000F01F00B7FE9FA7 +:104E8000FE6A76150A9CF01F00BE1897E08000BAF3 +:104E9000300A302C149BF01F00B13078E9480044F0 +:104EA000F01F00A3FE91FE560A9B0C9733BCF01F27 +:104EB00000A7FE9FFE506A1CF01F00AA089AFEF78A +:104EC00002A6089B314CF01F00A5FE9FFE446A1706 +:104ED0000E9CF01F00B0C060FEF9026C3058F34821 +:104EE00000440E9B335C0C97F01F0098FE9FFE332E +:104EF0006A170E9CF01F00A2C0803069FEF80248BD +:104F0000FEF60220F14900440E9B33BC0C97F01FC3 +:104F1000008FFE9FFE206A1B337CF01F008C089AD6 +:104F2000FEF702043019303B30ECEA1C4000F01F61 +:104F3000008AFE9FFE106938301911EAF20A180043 +:104F4000FE90FE086A1CF01F0094FE91FE03189A62 +:104F5000189BFEF70246301CF01F0080FE9FFDFBF1 +:104F60006A150A9CF01F008B1897E08000874F2A73 +:104F7000300BFEFC022AF01F00721897E08000AE92 +:104F800030580C97E7480044FE9FFDE56A150A9CDF +:104F9000F01F006C1897E08000956938301911EA0D +:104FA000F20A1800FE91FDD64E3A300B4FDCF01F8E +:104FB00000641897E08000A930480C97E748004447 +:104FC000FE9FFDC96A160C9CF01F006B1897C2600B +:104FD000F01F006A30684D37E7480044FE9FFDBB74 +:104FE000EACBFFFC301A30DCF01F005C3019300ACD +:104FF000303B30CCEA1C4000F01F0057FE9FFDAB59 +:10500000F01F004BFE90FF4E0E9A3019303B30CC13 +:10501000EA1C4000F01F0050C44B303B30CCEA1C6F +:10502000400030190E9AF01F004C0DEB304CF01F71 +:1050300000490E9A0E9B301C4BB7F01F0048FE9F94 +:10504000FD8A0C9B33ACF01F0041FE9FFD844D3662 +:10505000FE9FFDD63068F0091800FE98FE693828DA +:10506000F0091800FE91FD76300A0C97325C149B13 +:10507000F01F003AFE9FFD6F189A303B30CCEA1CBF +:1050800040003019F01F0034EB3B000D303CCD0BDD +:105090003008FACBFFFC0C9716F8301A30ECF01FF2 +:1050A000002FFE9FFD580A9CF01F003FFE90FD520E +:1050B000300A0C97306C149BF01F0028FE9FFD4BAC +:1050C0000BCB302CF01F00230E9A0E9B301C4B375D +:1050D000F01F0022FE9FFD3F189A303B30CCEA1CA7 +:1050E00040003019F01F001CEB3B000D301CCA0BB8 +:1050F00048D7F01F000FFE91FF750A9B338CF01FFD +:105100000013FE9FFD28189A303B30CCEA1C40006B +:105110003019F01F00110BCB301CC8AB800152F0CE +:10512000800151A8800156388001D9AC800185E406 +:105130000000763880018E9C8001E03C8001EF20E9 +:105140008001E88C000087F480016D6C8001E2D45E +:1051500080018390800186C8800146588001E00864 +:105160008001DA2C800149D48001E2FC80016D4A83 +:105170008001D9C88001E4D080014AFC8001E4307C +:105180008001E0D48001D9FC800183A08001D9E8AE +:105190008001E81C8001E3DC80014A0C8001E7B853 +:1051A0008001E58880016D48EBCD40C04C96189792 +:1051B0003138EA184000103CE0800087E088002485 +:1051C000E068010DEA188000103CC150E088004002 +:1051D000E0680115EA188000103CC0D0E068018A40 +:1051E000EA188000103CC070E0680112EA188000E4 +:1051F000103CC3910E9C4B7AF01F003718960C9C04 +:10520000E3CD80C03018EA184000103CC510E0889B +:10521000002E30D8EA184000103CC1003108EA18CE +:105220004000103CC3F030C8EA184000103CC1B147 +:10523000301C302BF01F00290E9C3019300A303BF7 +:10524000F01F00274A760C9CE3CD80C0E068010582 +:10525000EA188000103CCCF0E0680107EA188000F2 +:10526000103CCC900C9CE3CD80C0E04C008ACC304C +:10527000FC184000103CCF71307949B8300AF14930 +:105280000044149B302CF01F0019300A30FC149B92 +:10529000F01F0016302B300CF01F00100C9CE3CDDB +:1052A00080C0303C302BF01F000D0E9CCC7B48E9B9 +:1052B0007298ABC8300A9398149B303CF01F000BD7 +:1052C0000C9CE3CD80C048A60C9CE3CD80C00000C0 +:1052D000800151A880014B2C800183A0800186C8E9 +:1052E00080015638000087F480014658800149D477 +:1052F000D421FACD00E4FEF602E21898FEF502E0B1 +:10530000ECF700F83109EA194000123CE08000D5C2 +:10531000E08B003630A9EA194000123CE08000C260 +:10532000E088005330C9EA194000123CE08000A830 +:10533000C6A330D9EA194000123CE080011930F9C7 +:10534000EA194000123CC3D1FEFA0298300BFEFC71 +:105350000296F01F00A61896C341189BFEFA02841D +:10536000FEFC028CF01F00A1304C301BF01F00A18E +:105370000C9A0C9B301CF01F00A0C238E06901841D +:10538000EA198000123CE0880011E0690188EA19FE +:105390008000123CC100E08B00A5E0690186EA199B +:1053A0008000123CC0E1C078E0690183EA19800006 +:1053B000123CC363109CFEFA0226F01F0090189561 +:1053C0000A9C2C7DD8223079EA194000123CC7C0D3 +:1053D000E08800973089EA194000123CE08000CF55 +:1053E0003099EA194000123CCEC14FEA300BFEFC66 +:1053F000020EF01F007E1894E08000CF3048ED4888 +:105400000044CDFB4F7A300B4FECF01F0078CD916C +:10541000189A189B4FC5301CF01F0077CD2BE06900 +:105420000107EA198000123CCC60E0690115EA1915 +:105430008000123CC1203139EA194000123CCC11E5 +:10544000300A301C149BF01F006C300A304C149B47 +:105450004EE5F01F0069CB5B6F38301911EAF20A94 +:105460001800C72076160C9CF01F00690C9CF01FDA +:1054700000694E98580CF0051710CA3B303B3019A4 +:10548000300AF01F0066302B303CF01F005A300A03 +:10549000301C149BF01F00584E150A9C2C7DD822FE +:1054A0004D0A300B4DFCF01F00511897C3B0305817 +:1054B000ED480044C86B303B3019300AF01F0057EC +:1054C000302B304CCE3B6C9BE21B0040C2414C5A0F +:1054D0004D5CF01F0046C9D03028ED480044C71B82 +:1054E000E069018AEA198000123CFE90FF65E069DC +:1054F000018EEA198000123CFE91FF64C5CBFC19B5 +:105500004000123CFE91FF5E300A149B149CF01F79 +:10551000003AC57B300A4BC5149B301CF01F003687 +:10552000C50B30481A9BBAE8336CF01F00400E9A46 +:105530003019303B30ECEA1C4000F01F00384B893A +:105540004BB89119C3EB76170E9CF01F00310FC9B1 +:105550003068F0091800FE9BFF354B15F01F003531 +:10556000C2A10E9B338CF01F0031C2BB4AC530195B +:10557000300A303BF01F0029C24B49AA300B4AAC1D +:10558000F01F001ACAA1304849F5BAC81A9B334C1B +:10559000F01F0026C16B306AEECBFFE2FACCFFFCB5 +:1055A000F01F002530481A9BBA68335CF01F001FBB +:1055B000089ACBFB3019300A303B30CCEA1C400053 +:1055C000F01F00160FCB305CF01F000A300A301CB1 +:1055D000149BF01F0009CF5A000087F4800152F09D +:1055E00080018E9C8001E7548001EF208001E03C27 +:1055F000800183908001465880014B2C8001E58812 +:105600008001DA5480014A0C800149D48001E2FC17 +:1056100080016D48800151A8800186C880015638FC +:105620008001E7B88001EA8C80016D6C00000224E3 +:10563000800185E48002E736EBCD40804C9731084D +:10564000EA184000103CC6F0E088001DE068018CBC +:10565000EA188000103CC3B0E088002EE068019397 +:10566000EA188000103CC440E0680194EA18800009 +:10567000103CC2714BC7761CF01F003C0E9CE3CD62 +:10568000808030C8EA184000103CC400E088001D4B +:1056900030D8EA184000103CC21030E8EA18400048 +:1056A000103CC0F14B2A300B4B2CF01F00330E9CEA +:1056B000E3CD8080E0680186EA188000103CC0706D +:1056C0000E9CE3CD8080E04C008ACFB14A5AF01F97 +:1056D000002B18970E9CE3CD8080F01F00294A4ACA +:1056E000300B4A8CF01F00240E9CE3CD8080761C8A +:1056F000F01F0025F01F0025C0514A5B33CCF01F7E +:10570000002549970E9CE3CD80804A39731858983C +:10571000CD803098496AF3480044300B49FCF01FB3 +:105720000016CCFB49C973185888CCB03088F348B0 +:105730000044F2F900F87338301911EAF20A18003F +:10574000C0A03019300A303B30DCEA1C4000F01FAA +:105750000014CB7B486A300B492CF01F0007CB1B91 +:105760008001563880014A0C8001DA4680018E9C07 +:105770008001E03C8001EF2080014B2C80015E34F1 +:105780008001DA448001DA48800185E4000076383F +:1057900080016D6C000087F48001E0D4800186C830 +:1057A0008001E094EBCD40F84A37189416956E18B6 +:1057B0006E090E930E96C118300B301CEA1C400087 +:1057C0005D19300B6C39FC1C40005D196C388D285C +:1057D0006E186E091238C2001039C190300B301C9F +:1057E000EA1C40005D19300B6E19FC1C40005D196D +:1057F0006E188F086E296E381039CDF10A9B089CFF +:105800005D19873C6629123CCF71CE3B0A9B089CF0 +:105810005D198F1CCF0B5805C0706A085818C060FE +:105820000A9CF01F0006E3CD80F8EACCFFFCF01FD5 +:105830000004CF7B00000224800091E88001D3A8FF +:105840004878F14C00F8580CF9F81004F9B9010146 +:10585000F1D9E108F9F81A045EFC0000000087F4B1 +:10586000EBCD40C04948FAC6FFF4F0F700F4580702 +:10587000C051C1E8F8C70008C1B0EECAFFDC740827 +:10588000204D502815C9FB69000C15D8FB68000D88 +:105890006C0850080DC9BAC90DD8BAD8F01F000756 +:1058A0002FCD580CC0516E2C580CCE5118970E9C11 +:1058B000E3CD80C0000087F480018898D40149D9E5 +:1058C000F2F800F41838C0B078285808C2B0784808 +:1058D000201899482F8CF01F0018D802580CF9F89E +:1058E0001004F9BA01FFF1DAE108F9F81A043008F6 +:1058F000F34800F448FA78285808C180F0C9000835 +:10590000F54900F4CE8072482FF89348F4F900F47A +:105910005809CE10724820182F8C9348F01F0006AB +:10592000D80278385808CD41D802F54800F4CD3B6C +:10593000000087F48001F2A0D4014989F2F800F058 +:105940001838C0A078085808C240784820189948EC +:10595000F01F0013D802580CF9F81004F9BA01FF2F +:10596000F1DAE108F9F81A043008F34800F0780A8F +:10597000F34A00F0580ACED074482FF89548487979 +:10598000F2F900F05809CE50724820189348CE1B07 +:1059900078185808CDB1CDFB000087F48001F2A043 +:1059A000EBCD40801897580AC2C07858F608010815 +:1059B0001438E08800274948F0FB00F8580BC190E4 +:1059C000F8CAFFDC15D8204DFB68000D740950297A +:1059D00015C8F6CAFFDCFB68000C7408500815C92E +:1059E000BAC915D8BAD8F01F00092FCD580CC091EC +:1059F0000E9CF01F00070E9CF01F0006E3CF908066 +:105A0000E3CF8080000087F48001889880015938B6 +:105A1000800158BCD4214A141895E8F700F05807C3 +:105A2000C27079383006704AC02810976F387049B4 +:105A30001439E08A00086E080E965808CF710E9649 +:105A400010970A37C0D06A085808C0B00A9CF01FE7 +:105A500000145806C1300A9B0C9CF01F0012D8227B +:105A60006A185808CF416A482FF88B48CF3BE94C59 +:105A700000F078482FF89948D8220A9B0E9CF01F16 +:105A800000090E9CE94500F0F01F00050E9B0A9CE2 +:105A9000F01F0004D8220000000087F48001F2A06B +:105AA0008001F28CEBCD40C04A48FAC7FFF4F0F613 +:105AB00000F05806C051C3D86C065806C3A06D3814 +:105AC000707C2F4CF8E80000212DFAE90024F8EA58 +:105AD0000008FAEB002CF8E80010FAE90034F8EAC4 +:105AE0000018FAEB003CF9380020FB680044F93953 +:105AF0000021FB690045EEE80000FAE90000EEEA4B +:105B00000008FAEB0008EEE80010FAE90010EEEAEF +:105B10000018FAEB0018EF380020FB680020EF397E +:105B20000021FB690021F01F00062EED580CCC501F +:105B30000C9CE3CD80C00000000087F48001891038 +:105B4000EBCD40E0205D7608502817C9FB69000CBA +:105B500017D81697FB68000DF8CBFFE2306A18964D +:105B60001A9CF01F0034F01F00342FCD580CC05188 +:105B7000300C2FFDE3CD80E06E7C2F4CF8E8000068 +:105B8000212DFAE90024F8EA0008FAEB002CF8E8E5 +:105B90000010FAE90034F8EA0018FAEB003CF93892 +:105BA0000020FB680044F9390021FB6900456D388D +:105BB000707C2F4CF8E80000FAE90000F8EA0008D1 +:105BC000FAEB0008F8E80010FAE90010F8EA00180B +:105BD000FAEB0018F9380020FB680020F9390021A1 +:105BE000FB690021F01F00152EED580CCC20320B64 +:105BF000300CF01F00131895CBC0189A0E99491B52 +:105C0000F01F00110BF93008F0091800EDF800132F +:105C1000F1F90807EBF90E07FACCFFFC6D3818D83C +:105C20001A9CED45004CF01F0009301CCA3B0000D7 +:105C30008002E73680018898800189108001D8DCD5 +:105C40008001D3EC8001AD408001D3A8EBCD40C0F2 +:105C500049C649D86C09700A1439C05530070E9CE2 +:105C6000E3CD80C0350CF01F00191897CF906C0859 +:105C70002FF8350A8D08300BF01F0015320B300C51 +:105C8000F01F0014EF4C004C1898C16030084929EF +:105C90008F680E9CF30A017C8F28EF5A001CEF6876 +:105CA000002A8FF88F488F58EF4800408F188F08D0 +:105CB0008F38E3CD80C00E9C1097F01F0008CD0BED +:105CC000000076440000025880009200800091D0CD +:105CD0008001D8DC00000260800091E8EBCD4080BC +:105CE000189778485808E08A0004E3CD8080793816 +:105CF0005808C0402B4CF01F000648697208201855 +:105D00000E9C9308F01F0004E3CD80808001D3A88F +:105D100000007644800091E8D4014899F2FC00F834 +:105D2000580CC0A07848201899483008F34800F86B +:105D3000F01F0004D802F34C00F8D802000087F4EA +:105D400080015CDCEBCD40F84B131894E6F700F8CB +:105D50005807C060189B0E9CF01F002EC1D1E6F7BB +:105D600000F05807C4203006C1285806C0706F38AC +:105D70006D39704A7248103AC064E6F800F80E387F +:105D8000EE0617106E070E955807C0900E9C089BE4 +:105D9000F01F0020CEB00E9CE3CD80F8F01F001E57 +:105DA00058065F18580C5F0918971069EA0918001F +:105DB000C201089B306AEECCFFDCF01F0018089B84 +:105DC000306AEECCFFE2F01F00156F3A0899149C80 +:105DD000493BF01F001430080E9C8F088F18F01FED +:105DE00000120E9CE3CD80F8F01F000B1897CE2B0D +:105DF0000C9CF01F000E0C9CF01F000D0C9CF01F63 +:105E0000000DF01F00051897CD51CC6B000087F4F2 +:105E100080015B4080015C4C800091DC8001D3EC10 +:105E20008001AD4080015A1480015938800158BC6E +:105E300080015CDCEBCD40E04905EAF700F458074F +:105E4000C0D1C158F0C600080E9CF01F000D0E9C7A +:105E5000F01F000C5806C0B00C976E285808CF31C0 +:105E60000E9CF01F00070E9CF01F00063008EB4848 +:105E700000F4E3CD80E00000000087F4800158BC0E +:105E800080015CDC580CC04078185B98C110489ABF +:105E900074991298EDB90001F9BC0101F9BB001029 +:105EA000F3DBE038F5F80A09F9BC00015EFC5EFDA1 +:105EB000000087F4489A7498109CF0091604E21CBC +:105EC0000002F9BB0110F1DBE138F5F81A09F9B865 +:105ED0000101F3D8E12C5EFC000087F4489A749825 +:105EE000109CF0091604E21C0002F9BB01EFF1DB83 +:105EF000E128F5F81A09F9B80101F3D8E12C5EFCA4 +:105F0000000087F448887099129CA589E21C000261 +:105F1000F9BA0101F3DAE148F9B90101F1D9E12C4B +:105F20005EFC0000000087F418994868709CE21C31 +:105F30000002F1F8103FF3F81A00F9BC01015EFC11 +:105F4000000087F418994868709CE21C0002F1F880 +:105F50001041F3F81A00F9BC01015EFC000087F45F +:105F600018984859729CE21C0002F3F81A41F9BCD7 +:105F700001015EFC000087F44839300C7298A7C814 +:105F800093985EFC000087F44839300C7298A5D8CD +:105F900093985EFC000087F4D401E06A0100300BA6 +:105FA000482CF01F0003DA0A00007648800091D0E8 +:105FB000EBCD40C04A0A18967498109CE21C00026F +:105FC000C1D0F4F700F85807C1801099E2190020F9 +:105FD000C270A5C8A7A8F4FB00BC95983009497AFF +:105FE000E06CEA60F01F00163008F0061800C100EF +:105FF0003018F0061800C040301CE3CD80C0311CC2 +:10600000EECBFFE2306AF01F000FE3CF90C0312CDF +:10601000EECBFFE2306AF01F000BE3CF90C0A5B8D3 +:10602000F4FB00B89598E06CEA60487AF01F000431 +:10603000CDCB0000000087F480015F7880014558D7 +:106040008001465880015F88D401F01F0002D80209 +:1060500080018040D40148687098E2180002C03185 +:10606000109CD802F01F0003D8020000000087F443 +:10607000800183FCD40148687098E2180002C031A6 +:10608000109CD802F01F0003D8020000000087F423 +:10609000800183D8D431FACD0188E06A0168300BE1 +:1060A0001A9CF01F002CFAC6FE541A901A9CF01F7E +:1060B000002A581CC03029EDD832FAC5FFF8401824 +:1060C000F0081016EA0800081035C4120A97FAC43E +:1060D000FE98ECC1FFF8C09840182EA7F0081016E3 +:1060E000EA0800081037C3326C08204D50280DC94B +:1060F000FB69000C0DD80E9BFB68000D306A1A9CE2 +:10610000F01F0016F01F00162FCD580CCE60EECBFE +:10611000FFFA310AFACCFE88F01F0010E2E8000016 +:10612000310AE8E90000089BE2E20008FACCFE88A8 +:10613000E8E30008F01F000BCD01189B316A0E9CAC +:10614000F01F0004009CF01F0008CB6B29EDD83A2B +:10615000800091D0800160748002E73680018898C9 +:106160008000917C80016054D431FACD018CE06ACA +:106170000168300BFACCFFFCF01F0050FAC5FE504E +:10618000FACCFFFCF01F004E581CC03029DDD8327D +:10619000402858F8E088007FF0081016FAC1FFF494 +:1061A000E20800081031E0820087E06801685018BA +:1061B000EACBFFF8FAC6FFF002973004FAC0FE946B +:1061C000500BC0C85804C36040282EA7F008101612 +:1061D0002EA6E20800081037C4926A08204D502805 +:1061E0000BC9FB69000C0BD80E9BFB68000D306AD5 +:1061F0001A9CF01F0034F01F00342FCD580CCE3005 +:10620000ECCBFFFE310AFACCFE84F01F002E400BCF +:10621000F6E80000310AE0E90000FACCFE84F6E27C +:106220000008009BE0E30008F01F0028CB005804A2 +:10623000CCC10F89E8091800CC810F98F20818002A +:10624000CC410FA9F0091800CC010FB8F2081800D2 +:10625000CBC10D89F0091800CB810FD8F2081800C6 +:10626000F9B40100EE041700CB0B5804C2400A9B9E +:10627000306A089CF01F0013EACBFFF8310AE8CC23 +:10628000FFFAF01F0010FACCFFFCF01F001129DD0F +:10629000D832F00A1110FAC1FFF4F40A1016E2081D +:1062A000000C300BF01F00053108E0690168502830 +:1062B0005019C7FB3FDCC6BB800091D080016074E1 +:1062C0008002E736800188988000917C80016054CC +:1062D000EBCD40C0208DBACBBA8A189B4968709C20 +:1062E000E21C0002C06118970E9C2F8DE3CD80C088 +:1062F0003008FAC6FFF8504850281A99FACAFFFC2D +:106300000C9CF01F000EC111189740285808C0407F +:106310000C9CF01F000B404C580CCE70F01F000975 +:106320000E9C2F8DE3CD80C00C9CF01F0007581CE5 +:106330005F07CECB000087F48001E1308001D3A855 +:10634000800091E880018E9CEBCD40C0201D491754 +:1063500018966E9CE21C0002C0412FFDE3CD80C068 +:106360001A9CF01F000DEF4600FCEEF801105808D3 +:10637000C051301C2FFDE3CD80C0EECCFEECEF3AD7 +:10638000011BEF3B011AF01F0005301CCF4B000032 +:10639000000087F4800177A4800162D0EBCD4080BB +:1063A000201DBA8C48C76E98EDB80001C0402FFD83 +:1063B000E3CF808030181A99300A308B487CF01F68 +:1063C0000008581CCF511B88EF4801202FFDE3CD5A +:1063D00080800000000087F48003B7A08001776C04 +:1063E000D401201D48B91898729CE21C0002C0E03C +:1063F000300AF368004C308BFAC9FFFC486C12F885 +:106400003018F01F0006581C5F0C2FFDD80200004A +:10641000000087F48003B7A88001776CD401203D89 +:10642000BA8C496A749CE21C0002C0312FDDD8028C +:106430001B8B3038F00B1800E089001DE06832003B +:10644000EA18312EE069352EEA19312EFAE90004F6 +:10645000F4F800F8F3DBB008300A5808F1F91A0F25 +:10646000308B30181A99FACCFFFCF01F0005581C2D +:10647000CDE03FECCDCB0000000087F48001776CCD +:10648000D421206D4A0618976C98EDB80001C040E1 +:10649000300C2FADD822584C5FB8E04C00FF5F198C +:1064A0001268C0303FECCF6B300814995028169A10 +:1064B0005008189B1A951A9CF01F0014CEA01A9C25 +:1064C000F01F0013400818945808C0401A9CF01F91 +:1064D0000011402C580CC030F01F000F5814CD9103 +:1064E0006C98EDB80007C0C15837E08B000AEE0881 +:1064F000150648A9300A1009089C930ACCBB301C29 +:10650000CC9B0000000087F48001E1A480018E9CF8 +:106510008001D3A8800091E800007648EBCD40C010 +:10652000202D496718966E98E2180002C2103FF8B5 +:10653000FACAFFFEBAF8BAA8BAB8BAC8BAD8BAE85E +:10654000300BF01F000F6E98EDB80007C0E1583611 +:10655000E08B000CEC081506300A48A9301C100925 +:10656000930A2FEDE3CD80C02FEDE3CF90C0109CB8 +:106570002FEDE3CD80C00000000087F4800164802F +:1065800000007648EBCD40C0202D49F66C9CE21C03 +:106590000002C2703FF8BAF8BAA8BAB8BAC8BAD8F6 +:1065A000BAE8ECFB00F8580BC260F6CCFFE2303AD8 +:1065B000300BF01F0016FAC7FFFE301CF01F00144E +:1065C000303B0E9A300CF01F00136C99300B129870 +:1065D000ED4B0110A3D88D98EDB90007C050301CC9 +:1065E0002FEDE3CD80C0E06A010048BCF01F000B36 +:1065F000301CCF7BFAC7FFFE303A0E9CF01F000321 +:10660000CDDB0000000087F4800162D08001651CB2 +:106610008001648000007648800091D0D43120DD74 +:10662000FB690010FB68000CFAC9FFA8FEF7023CEA +:1066300018956E981696149272307201E218000244 +:1066400072147223C041300C2F3DD832E04B002031 +:10665000E08800043FFCCF9B584CE08B002158DBC6 +:106660005FBA301BFB380010F60818005F09126A89 +:10667000C030580CC1413078FACCFFD4FB680033ED +:10668000F01F007B3008303C50785058F01F0079E4 +:1066900058D6C070E08B00315856C0303FECCD5B0F +:1066A00030683019FB680033EF49011CFACCFFCD8C +:1066B000F01F0071501C1AD31AD41AD1FB38001CD9 +:1066C00004991AD80C9AFB380043FACCFFDC0A9BD9 +:1066D000F01F006A2FCD580CC1B140585808C05067 +:1066E000FACCFFECF01F0066407C580CCAD0F01FBB +:1066F0000065300CCAAB5906C6C0E0460020CCF19C +:1067000030283029FB680033EF49011CCD0BFACC4F +:10671000FFECF01F005D500C40585808C050FACCF8 +:10672000FFECF01F0057407C580CC030F01F0055A4 +:1067300040085818C8915800EFF81009F9B9010835 +:10674000F1D9E138EFF81A093009FB380010F208E6 +:106750001800C051F9D5B008F01F004C6E98EDB884 +:106760000001C0514C18F0F800FC501840185808AF +:10677000C080FB3A0010FB3B000C089CF01F00445B +:10678000306A089BEECCFEECF01F0042301AFACBC8 +:10679000FFF4EECCFEE6F01F003FEECCFEE5301A33 +:1067A000FACBFFF0F01F003B3018EF480110FB68F8 +:1067B00000326E9C4AD7EDBC0001C120EDBC000741 +:1067C000C061FB38000C50285845C1E1301CC3DBC8 +:1067D00030483039FB680033EF49011CC68B300864 +:1067E0004ADB1099109A109CF01F002CC3401ADC51 +:1067F0003018FAC9FFCA300A308B4A9CF01F0029B2 +:106800006E9C2FFDCDCBEA0915064A780C9AF0094B +:106810000007049BEF650026EF560024EECCFFFC3A +:10682000F01F001C089BEF610036306AEECCFFD8E9 +:10683000F01F00185803C110069B308AEECCFFD21F +:10684000F01F001440288FF0EF68003830188F08D0 +:10685000109CCFBA6E9CCB3B069B308AEECCFFD20D +:10686000F01F0012CF0B0000000087F4800177A416 +:106870008001EF6C80017BD88001E2148001D3A8F5 +:10688000800091E880018E9C8001641C800162D0B0 +:10689000800091DC80015E8480016AF48003B798F7 +:1068A0008001773000007648800091D0EBCD40C069 +:1068B000300749A60E98A7682FF7EC08000B76085A +:1068C0005808C0F10E985847CF714957EF3C004C1B +:1068D000F01F0014EEFC0100F01F0013E3CF90C086 +:1068E00076F8F6C9FFD2F73C00261AD8F6C8FFD8CA +:1068F0001AD91AD8F7390036F6CAFFFC1AD9F73870 +:106900000038F7390027F71B0024F01F00082FCDAF +:10691000581CCD90E3CF80C000007648000087F47B +:10692000800163E0800163488001661C7808301CA8 +:10693000F80A094C201C106C5EFCD70348787008DC +:106940005808C0901838C041C078103CC05070B88A +:106950005808CFC15EFD5EFF0000778C189A48F89A +:10696000709CE21C00025E0C70A8EDB80000C03004 +:10697000305C5EFC48AC780B583BE089000D300978 +:106980004888F00B003891189109950BF6C8FFFF65 +:1069900099085EFF3FDC5EFC000087F4000077880A +:1069A0000000776848D972A8EDB80000C1313008FE +:1069B000780A99D848ABF60A003A741999E974181C +:1069C000F8C9FFCC910C7808301CF60800389119F2 +:1069D0005EFC305C5EFC0000000087F4000077681D +:1069E000EBCD40C0189778B95809C18078C893C8D2 +:1069F0006EC891096E3C580CC050F01F000B300857 +:106A00008F3833CA6EA635AB0E9CF01F00080C9B66 +:106A10000E9CF01F0007E3CF80C078C94858911939 +:106A200078B9CE7B800091E8800091D0800183B05E +:106A30000000778CEBCD40801897580CC180789877 +:106A40005D1848F972095809C051C11872B958093E +:106A5000C0E01237CFC16E785808C0B06E3C580CF9 +:106A6000C060F01F000830088F588F38E3CF908047 +:106A70000E9C301BF01F0004E3CF90800000778C49 +:106A8000800091E8800169E0EBCD4080496972A8FF +:106A9000EDB80000C040305CE3CD8080493870091B +:106AA0001839E08A001E4928F00C00376E09580991 +:106AB000C15072DA580AF3F8000EEFF80A01F3FA3F +:106AC000000DF3F8100EF5F81A0E72E8129C910AF8 +:106AD000F01F00086E095809CED1E3CF90803FCC5B +:106AE000E3CD8080000087F400007788000077689D +:106AF00080016A34EBCD40F81897169614951294DD +:106B0000109333CCF01F000CC1403008990799B89E +:106B10009938995899889996994599649973487ABA +:106B2000301899A8741999C9930CF8C8FFD495180E +:106B3000E3CD80F8800092000000778CD401202DF6 +:106B4000500A48C972A8EDB80000C040305C2FED73 +:106B5000D80248981A99F00B032A3048FA08000B1B +:106B6000F01F0006581CF9BC0001F9BC01FECF0B58 +:106B7000000087F4000077488001F1D8EBCD40C0D9 +:106B8000201D4AC618976CA8EDB80000C441580CE7 +:106B9000C3F0789B580BC3C0780A580AC3954A695A +:106BA000F20A033850085808C061C1A870D85008CC +:106BB0005808C1601037CFB1F40815036EDA580ACF +:106BC000F3D8E009EFF8000EF3F80A01EFF8100E21 +:106BD000F5F81A0E400870DA70E9930A6E9B3F9838 +:106BE0008F18580BC0300E9C5D1B6E8B581BC0500D +:106BF000582BC150580BC0516E2A1A9CF01F000F21 +:106C00000E9C301BF01F000E2FFDE3CF90C02FFD18 +:106C1000E3CF90C0305C2FFDE3CD80C0ECF801B82D +:106C20000E38CEF130094838F14901B8CEAB00003A +:106C3000000087F40000776880016B3C800169E008 +:106C4000D40148C9169E72A8F1D8C001C031305C89 +:106C5000D8024898304A76A9F00C032C1ADAF6C804 +:106C6000FFF833CAF01F00052FFD581C5F0CD80237 +:106C7000000087F4000077488001F164D431204D92 +:106C800030084931189650285018FAC5FFF4FAC256 +:106C9000FFF802901A93FAC4FFFCC098E006032A9A +:106CA000F01F000C0E9B401CF01F000B3049049B92 +:106CB0000A9AE206032CF01F0009304818970A9937 +:106CC0001A9B089C5817CEB02FCDD83200007748B9 +:106CD0008001F1D880016B7C8001F0B4EBCD40E005 +:106CE000201D49356AA8A1A8300A49298BA8149704 +:106CF000930A14984906EC08002C2FF748FA303B09 +:106D0000F01F000F581CC0F10E985887CF5148D87B +:106D1000300991189109301B1A9CF01F000B2FFDB0 +:106D2000E3CD80E06AA8A1C88BA8CF2B000087F430 +:106D300000007788000077488001692C8001F05CB2 +:106D40000000778C8001695C5EFD5EFFEBCD4080CA +:106D5000189778785808C030788C5D180E9CF01F12 +:106D60000003E3CD80800000800091E8D4314B1017 +:106D70001895169260095809C58030047258721926 +:106D80000A38F7B400FF5809CFA10891E80C1502A2 +:106D9000F01F00291893C46060075807C2303006FE +:106DA000C0486E175807C1E06E580A38CFB10E9C24 +:106DB000F01F0022E60609276E485808C0F06E1939 +:106DC0005809EFF80002E1F80A01EFF90001EFF8C5 +:106DD0001002F3F81A026E2891092FF66E17580761 +:106DE000CE415804C1A006953006C0380836C154BB +:106DF0006A07049C6E686E8B5D18491B0E9CF01F21 +:106E000000112FF62FC56E485808CF100E9C48CBA6 +:106E1000F01F000C0836CED5069CF01F000B029C1C +:106E2000D8321891029CD83212941291CB0B0000E8 +:106E300000007794800092008001463A80016D4CFA +:106E400080014642800091E8EBCD4080324CF01F3B +:106E500000081897C080324A300BF01F00060E9CC5 +:106E6000F01F00050E9CE3CD8080000080009200A2 +:106E7000800091D080014652EBCD40FC18961695CB +:106E80001494129310924077F01F000AC100995693 +:106E900099359964998799739942487A3008991875 +:106EA00074199929930CF8C8FFFC9518E3CD80FC60 +:106EB00080016E4800007794D431FACEFFDC189739 +:106EC00016901491129310927C157C04580CC26099 +:106ED00078095809C26049A66C085808C051C09882 +:106EE00070185808C0601039CFC13018109CD832C3 +:106EF000F01F0014C13099509931996399859972A6 +:106F00009944300899186C199929930CF8C8FFFC1A +:106F10008D188F0C3018109CD8323008109CD83245 +:106F200008981AD50499069A029B009CF01F000647 +:106F30002FFD580C5F188F0CCDAB0000000077942C +:106F400080016E4880016E78EBCD40404856ECCC15 +:106F5000FFF8F01F000530088D168D08E3CD804046 +:106F600000007794800145D6EBCD40807847785A71 +:106F70006E18103AE0880004E3CF8080783B6E0CF6 +:106F8000F01F000B6E285808C0406E1B6E0C5D1879 +:106F90006E3CE04C002BC050300A149BF01F0005E3 +:106FA0000E9CF01F0005E3CF90800000800091DC74 +:106FB00080014658800091E8EBCD40C0203D30086C +:106FC00018979928990814961A9C308AF01F001176 +:106FD000FACBFFF80E9CF01F00102FED580CC101EA +:106FE0006E085808C0400E9CF01F000C6E2C580C08 +:106FF000C040F01F000B300C2FFDE3CD80C05806C1 +:10700000FBF81000EDF81A002FFDE3CF90C0000050 +:107010008002E7368001DE6C8001D3A8800091E811 +:10702000EBCD40C0189778185B98C0C0783B580BE0 +:10703000C17078465806C04078685908C050E3CF00 +:1070400090C0E3CF80C0785A590AE08800153FF815 +:107050008D28ECCCFFF4F01F000CE3CF90C0784CEF +:10706000580CCEE06E685908CEB12F4CF01F0006C8 +:10707000E3CF90C06C0CF01F00056E5830198D18CE +:107080008D29CE8B8001A25C800091DCEBCD40E0AD +:10709000201D1697E04C0081E0800088E08A0027E0 +:1070A000E04C0083C2F0C2B4760A1A9C300BF01F89 +:1070B0000064E08A004F585CC490314CF01F0061BE +:1070C0004008913C4009723A580AC7A06E0830093E +:1070D000990899399919EF380008992840083149D9 +:1070E000301A91594008911AC1D8584CC4A0E04CAC +:1070F0000080C330300C2FFDE3CD80E0E04C0085F4 +:10710000CFA16E0A300B1A9CF01F004DE08A0022BE +:10711000585CC1C0EF3900084008300A9119400896 +:10712000915A301B400CF01F0048581CCE41400CB7 +:10713000F01F0046C0B0400B76785808C070300C85 +:10714000F01F0043581C5F0CCD7B2FFDE3CF90E078 +:107150003FEC2FFDE3CD80E07645760A1A9C300B9C +:10716000F01F0037FE9AFFF6585CCF005805C49117 +:1071700040089135400993550FCA4008911ACD2B0C +:107180007626760A1A9C300BF01F002DFE9AFFE23D +:10719000585CCDC05806C1914008301A913640095C +:1071A00093564008911ACBEB760A1A9C300BF01FCD +:1071B0000024FE9AFFCF585CCC900FC9CAEB3FD891 +:1071C00093184009935ACAEBECC5FFED0A9CF01FD7 +:1071D000001D4008913C1899400A743B580BC2406E +:1071E0006E080C9A93089336EECBFFF430162F0CF2 +:1071F0009316F01F00184008915540099316C92BAB +:1072000040060A9CF01F000F8D3C4009723C580C50 +:10721000C1000A9A6E5BF01F000F400891550FC91C +:1072200040089119C7FB3FD895184009935BC7AB3D +:107230003FD893184009935CC75B000080016B3C0A +:1072400080009200800169A48001693C80016C404B +:10725000800091DCEBCD40FC4C151696189476021C +:107260006A095909E088001B4BE7C15878BA580AE7 +:10727000F9F8000CEFF80A01F9F8100CF5F81A0CFF +:10728000201978C8910A8B09F01F00376A0959093B +:10729000E08800056E0C580CCEA16C2338086C36C3 +:1072A000ECCCFFCCF0041800C260F01F003018973F +:1072B000C2F0B8C464080C9A990899A6069B2CCC15 +:1072C0008F9CF01F002B3808F0041800C2303818CB +:1072D000F0041800C2B04A3B30088FB8761A8FCA43 +:1072E0009507EEC9FFD46A0897192FF8301C8B0850 +:1072F000E3CD80FC64495809CD90ECC8FFC9E01883 +:10730000FFFCF009000CF01F00191897CD31E3CDF8 +:1073100080FC318A049BEECCFFF4F01F00156E7ADE +:107320008F2A580AC1018F8ACD7BEEC6FFF4318ABD +:10733000300B0C9CF01F000F049B0C9C308AF01F3C +:10734000000CCCAB6EA82FD8E018FFFC6E9C100C84 +:107350008F8C645BF01F0006CBFB0000000077A061 +:1073600000000234800091E880009200800091DCEF +:10737000800091D0D421207D1297FACEFFD04B29E6 +:1073800018947298EDB80001C040300C2F9DD8229F +:10739000FCE800003006BB295C7A50265046FAC54E +:1073A000FFF8FAC9FFE00A9CF01F00282FED580CE7 +:1073B000C2D05807C0B08F368F5640680E9B0C9CC9 +:1073C0008F28F01F0023581CC2E11A9CF01F0021D7 +:1073D0005BBCC29040076E4C580CC070F01F001E82 +:1073E00030088F388F4840075807C0401A9CF01F5C +:1073F000001B402C580CC030F01F00175804FBF83D +:107400001006E9F81A002F9DDA2A40085808C040F3 +:107410001A9CF01F0012402C580CCB80F01F000E5D +:107420002F9DD82A40085808C0401A9CF01F000B16 +:10743000402C580CC0313FDCCAABF01F00073FDCCA +:10744000CA6B0000000087F48001DF7480016C408B +:1074500080018E9C800091E88001D3A8EBCD40E0B4 +:10746000208D149616951897308A300BF01F001354 +:1074700059F6E08800052F8DE3CF80E00A9B0C9A37 +:107480001A9CF01F000FFAC9FFE030080C09FACC73 +:107490000001F368FFE0F8C6FFFF300B30AA0C9C38 +:1074A000F01F000832EB0ECC0C9CF01F0007CF4100 +:1074B0002F8DE3CF90E00000800091D0800091DC20 +:1074C0008000917080009164D43120AD189E109599 +:1074D00014974C781292709CE21C0002C0511896CE +:1074E0000C9C2F6DD832169AFAC6FFE41C9B0C9C9C +:1074F000F01F00400C9BFAC3FFFCFACAFFDC069C9D +:10750000F01F003D1896581CCEC15807C2F10E91CD +:107510000E90069CF01F0039401818945808C0407F +:10752000069CF01F0037403C580CC030F01F00355F +:107530005BB4C4D05807C170E06B0BB8E0CCFFF46B +:10754000F01F00315BDCC3A0582CC07060285BF8D2 +:10755000C04060188508CC5B029C301B3006F01FD1 +:10756000002BCBFB40988B08CBCB3FF8310C8B0822 +:10757000F01F002718941890C280F8C8FFF4500834 +:10758000109CF01F00248907640930088919089AA3 +:1075900031094A1B109CF01F00211891C20040982D +:1075A000189B9928300CF01F001E581CCB300C9BE8 +:1075B000029C3FD6F01F001BC94B029C301BF01FE2 +:1075C000001340988B08C8DB3FD6C8BB5807CFD004 +:1075D000029C301B3FD6F01F000DC83B400CF01F33 +:1075E0000012089C3FD6F01F0007C7BB000087F4BD +:1075F0008001745C80016FB880018E9C8001D3A8EB +:10760000800091E88001A22880016B7C80009200BC +:107610008001A28C8001702080016AF480016C409E +:10762000800169E08001A27CEBCD40E0209D49F81B +:1076300018991495709CE21C0002C06118960C9C6D +:107640002F7DE3CD80E0169AFAC6FFE8129B0C9CD2 +:10765000F01F00170C9B1A97FACAFFE01A9CF01F44 +:1076600000151896581CCEC11A9CF01F0013400834 +:1076700018965808C0401A9CF01F0010402C580C57 +:10768000C030F01F000F5BB6C0313FD6CD9B300C31 +:107690008B3C8B5C40880A9B8B28F01F000A581C8F +:1076A000CCF03FD6CCDB0000000087F48001745C96 +:1076B00080016FB880018E9C8001D3A8800091E882 +:1076C00080016C40EBCD40FC1895169414921293F7 +:1076D00010974076310CF01F0012C1D099369905F1 +:1076E00099149927189A3008310948EB109CF01F1B +:1076F000000E1896C100069B049C0C9AF01F000B0C +:107700001897581CC0500C9C301BF01F00090E9C91 +:10771000E3CD80FC30070E9CE3CD80FC800092001E +:1077200080016F6880016AF480017628800169E039 +:10773000EBCD406E202D4086129310951491169A31 +:10774000189B1A9CF01F0008069B0C99FAE2000097 +:107750000A9ABB23029CF01F00052FED2FEDE3CD0D +:10776000806E00008001745C80017374EBCD406812 +:10777000202D129310961495169A189B1A9CF01FA0 +:107780000008FAE800000C9ABB29069B0A9C300905 +:10779000F01F00042FED2FEDE3CD80688001745CB5 +:1077A00080017374EBCD40401896303CF01F00040C +:1077B0007848301C8D08E3CD804000008001EF6CDC +:1077C000EBCD406048A618952F060C9CF01F0009D1 +:1077D000303CF01F0009310AF8CBFF8C0A9CF01FE7 +:1077E00000070C9CF01F0006E3CF9060000087F4B8 +:1077F000800145F88001EF6C800091DC800145FA42 +:10780000D42149461894ECC5FFF00A9CF01F0012E1 +:10781000ECF700F85807C0C06F38707B2F4B322A46 +:10782000089CF01F000E0A9CF01F000DDA2A303C65 +:10783000F01F000CC060F9380088EE081800C06026 +:10784000ECCCFFF0F01F0006D82AF8CBFF78CE8BE7 +:10785000000087F4800145F88002E736800145FA90 +:107860008001EF6CEBCD40E049061895ECC7FFF0C6 +:107870000E9CF01F000F303CF01F000EECF600F8DD +:107880005806C0C0ECCBFFE2306A0A9CF01F000A29 +:107890000E9CF01F000AE3CF90E00E9CF01F000743 +:1078A0000C9CE3CD80E00000000087F4800145F8E7 +:1078B0008001EF6C8002E736800145FAEBCD404055 +:1078C000209DE04B0020E08B001CBABB580BC1B1DF +:1078D0003FF8BAA849162F060C9CF01F0011303C47 +:1078E000F01F0010322AFACBFFFEF8CCFF78F01F11 +:1078F000000E0C9CF01F000D2F7DE3CF90402F7DDC +:10790000E3CFC0403008169ABAA8189BFACCFFFC07 +:10791000F01F0007CE0B0000000087F4800145FC3B +:107920008001EF6C8002E736800145FE800091DC2B +:10793000EBCD40E01895303CF01F000B1897C110BC +:1079400048A62F060C9CF01F000A0A9B306AEECC5A +:10795000FF56F01F00080C9CF01F0007E3CF90E0DB +:10796000E3CD80E08001EF6C000087F4800145FCEE +:10797000800091DC800145FED401F01F0002D80296 +:1079800080017930EBCD40EC202D18961697586B7E +:10799000C0503FFC2FEDE3CD80ECFACCFFF8E06364 +:1079A000312EEA13322EE0623100EA12312EB92371 +:1079B00016980C99300A308B1A9CF01F0010301C5E +:1079C000F01F000F48F81893F0C5FFF00A9CF01F55 +:1079D000000E5803C0C00E9A0C9B069CF01F000BB3 +:1079E0000A9CF01F000B2FEDE3CF90EC0A9CF01FD8 +:1079F0000008069CCD0B00008001776C8001EF6CC5 +:107A0000000087F4800145FC800091DC800145FE88 +:107A1000EBCD40E01897303CF01F0018EEC8000195 +:107A200018955818E0880004E3CF80E058175F09E4 +:107A300049366D1858385F0AF5E90009C0E1582742 +:107A40005F08F5E80008C030E3CF90E0F01F000DBC +:107A5000C0A18B47E3CF90E0F01F000B6D185838A2 +:107A60005F0ACEEB303CF01F000578485818CF2055 +:107A7000F01F0005CEFB00008001EF6C000087F4D2 +:107A800080017BC88001F340EBCD40F81696189337 +:107A900076085858E08A002A49A83064F0C5FFF0FB +:107AA00097040A9CF01F0018301CF01F001818974C +:107AB000C160202D189B089A1A9CF01F0015F01F1A +:107AC00000152FED580CC1616C0A0E9B069CF01F2F +:107AD00000120A9CF01F0011E3CF90F80A9CF01FDF +:107AE000000F0E9CE3CD80F830683FFC9708E3CD93 +:107AF00080F80A9CF01F00093FBCE3CD80F800002D +:107B0000000087F4800145F88001EF6C8002E736C1 +:107B1000800188B0800091DC800145FA0050F200BD +:107B2000000FAC003008F9480320F94803245EFC3C +:107B3000EBCD40C016971496F8FE0320FCCBFFFF58 +:107B4000F60A141FE069851FEA1951EBF60904488B +:107B5000A5591419F8FA0324F2091064121B143BF6 +:107B6000C0B0F94B0320F80E0927FCC8FF9CF808A9 +:107B70000926E3CF90C0E3CF80C0D401189EF8FC63 +:107B80000324FCF803201838C1F0F8C8FF9CFC0C53 +:107B9000032CFC08032930089709E069851FEA19BE +:107BA00051EBFCFB0324FC0B09282FFBF6090448CE +:107BB000F60A141FA5591419F2091064F6090109EF +:107BC000FD490324D802D80A4838F0F900F85809CA +:107BD0005F1C5EFC000087F43018198CF00C180054 +:107BE0005F0A3058F00C18005F09124AC0F1306883 +:107BF000F00C1800C0B03028F00C1800C080584CB1 +:107C0000F9BC0003F9BC01005EFC5EFF302C5EFC99 +:107C100048C8F0F800FC5818C0D0C0635828C0D03D +:107C20005838C0505EFF580C5F0C5EFC583C5F8CAF +:107C30005EFC581C5F8C5EFC582C5F8C5EFC000068 +:107C4000000087F4EBCD40C01897169E740A580ABE +:107C5000C0D0753A580AC0A0747A580AC0704FF85C +:107C6000F0F901045889E0880004E3CF80C04FC8D0 +:107C7000F009032F94D8EDB80004CF813008301CF0 +:107C80009D08E3CD80C0F53900C83FF8F009180021 +:107C9000CED0F51B00D2580BCE90F51C00D030266C +:107CA000F4FA00D8F40C002811B9EC091800E080AF +:107CB00000BFF8C8FFFF3009F40800280C9CF0CA88 +:107CC000FFFDC07815882FCAF8081800E08000B0C2 +:107CD0002FF91639CF85CCABF53900C83FF8F0093C +:107CE0001800CC40F51B00D2580BCC00F51C00D07E +:107CF0003016F4FA00D8F40C002811B9EC09180079 +:107D0000E08000A4F8C8FFFF3009F40800280C9CAC +:107D1000F0CAFFFDC07815882FCAF8081800E08067 +:107D200000952FF91639CF85CA1BF53900A43FF805 +:107D3000F0091800C9B0F51B00B2580BC970F51C4A +:107D400000B03026F4FA00B8F40C002811B9EC09A0 +:107D50001800C660F8C8FFFF3009F40800280C9C22 +:107D6000F0CAFFFDC06815882FCAF8081800C58042 +:107D70002FF91639CF95C7ABF53900A43FF8F009B4 +:107D80001800FE90FF74F51B00B2580BFE90FF6FB9 +:107D9000F51C00B03026F4FA00B8F40C002811B934 +:107DA000EC091800C3D0F8C8FFFF3009F408002818 +:107DB0000C9CF0CAFFFDC06815882FCAF80818008F +:107DC000C2F02FF91639CF95C51BF53900A43FF83D +:107DD000F0091800FE90FF4BF51B00B2580BFE9007 +:107DE000FF46F51C00B03016F4FA00B8F40C002879 +:107DF00011B9EC091800C220F8C8FFFF3009F408D7 +:107E000000280C9CF0CAFFFDC06815882FCAF8082E +:107E10001800C1402FF9123BFE99FFF9C27B3028B0 +:107E2000AE8830199D09129CE3CD80C03028AE8801 +:107E30003029301C9D09E3CD80C03018AE88301940 +:107E40009D09129CE3CD80C03018AE883029301CCB +:107E50009D09E3CD80C00000000087F48003B7B027 +:107E60003028F00C1800C390E088001B3048F00C5C +:107E70001800C3503058F00C1800C21030093028D8 +:107E8000F00B1800C160F00B1800E08B001B3018DD +:107E9000F00B1800C100300812385F5C5EFC30182F +:107EA000F00C1800CEC130193028F00B1800CEC1EC +:107EB0003038C02830181039CF045EFE3029CE0B80 +:107EC0003048F00B1800C0703058F00B1800CE414D +:107ED0003028CF2B3048CF0B3039CD2B3049CD0B4C +:107EE000D431307977387075B8891894581AC0D061 +:107EF000C043582AC4C0D83A7738707A94D9EDB9BB +:107F00000004E0800087DA3AEB3900A43FF8F0097A +:107F10001800CF20EB0800B03009F2081900CF405C +:107F2000149112923006307B30533060C1A8E007C4 +:107F30001800C2B03028F0071800C7A03048EE087B +:107F40001800F9BC0003F9BC0100F01F003CE9F780 +:107F50001E002FF6EB1800B00C38FE9AFFD6098BE6 +:107F6000EAF800B8F006002811B70E9CF01F0034A4 +:107F7000FE9AFFF1E20718005F08E60718005F09A4 +:107F80001248E4081800CD40301CCE0BEB3900C875 +:107F90003FF8F0091800CB00EB0800D03009F208D8 +:107FA0001900CB2012913006307B301230533060F4 +:107FB000C1A8E0071800C2B03028F0071800C3A01D +:107FC0003048EE081800F9BC0003F9BC0100F01FAE +:107FD000001BE9F71E002FF6EB1800D00C38FE9AB4 +:107FE000FF94098BEAF800D8F006002811B70E9C20 +:107FF000F01F0013FE9AFFF1E40718005F08E60780 +:1080000018005F091248E2081800CD40301CCE0B62 +:10801000307B305CF01F000AFE9AFF77301CF01FA7 +:108020000007FE90FF723058301CA888D832302CE0 +:10803000C8DB302CCCDB000080017C1080017E602E +:108040003008484A48499508951893085EFC000096 +:10805000000089EC00008C5CEBCD4080189E198BF1 +:10806000580BC130300A3017149CFC0A00092FFA53 +:1080700013982018EE080948F9E81008F9D8B0104C +:10808000163ACF45E3CD8080169CE3CD80807938C9 +:10809000707A3308F53900C8F0091800C0205EFD79 +:1080A000F51800D4E218000C5848C0E0E08A000837 +:1080B0005888C08058C8CF41310C5EFC5808CF01A9 +:1080C0005EFF304C5EFC302C5EFCD703EBCD40E015 +:1080D00030081896109A169C8D084927760E301590 +:1080E000109BC0A8F80A00082FFA11C9EE0B070868 +:1080F000A7D91039C0A01C3ACF652FFB58DBE08B05 +:10810000000E300A780ECF8B6C08EA0B0949124832 +:108110008D082FFB58DBFE98FFF6E3CF90E00000C0 +:108120008003B7F4EBCD40C030069906149EF8C723 +:10813000FFFC1799EC091800C0E00C9AF60A000839 +:1081400011A90EC978082FF899082FFA1798143832 +:10815000FE99FFF61D993008F0091800C0F0300BA9 +:10816000FC0B000811A9EE0B0B0978082FF89908F1 +:108170002FFB1D981638FE99FFF5E3CF90C0EBCD8D +:1081800040F816941897780B68065806E08A002C79 +:10819000F6C8FFFCE8C5FFFCF8080003300E2FCC42 +:1081A000EA0E070A580BE08A00130FC81458F1D8DA +:1081B000C007C1503009C078F80907081458F1D831 +:1081C000C007C0D02FF9123BFE99FFF8597BE08B16 +:1081D000000706CA6E0B2FFB8F0B68062FFE1C369E +:1081E000FE99FFE0E3CF90F8EBCD40FE1894169295 +:1081F0001497780676055805E08A0025ECC8FFFC40 +:10820000F6C3FFFCF8080001300EF4CCFFFCE60ECC +:10821000070A6E0B580BE08A00120FC81458F1D8E9 +:10822000C007C1203009C078F80907081458F1D8F0 +:10823000C007C0A02FF91639CF852FFE1C35FE9937 +:10824000FFE8E3CF90FE5976FE9BFFF902CA68066D +:108250002FF689062FFE64051C35FE99FFDACF2B19 +:10826000D42178045804E08A0027F8C7FFFC493875 +:108270000F8B700C11C6580CE08A0017F0C5FFFC7C +:10828000300EEDEB2008F1D8C007C0F00A9A300993 +:10829000C0782FFA15881658F1D8C007C0602FF99A +:1082A000123CFE99FFF8D82A2FFE2FF7083EC03463 +:1082B0000F8BCE8BDA2A00000000023CD4211897E5 +:1082C00076055805E08A0026F6C6FFFCF8CEFFFCCE +:1082D000300B1694C0482FFB0A3BC1B4EC0B070AC5 +:1082E000E80A1800CF946E0C580CE08A00120FC8F0 +:1082F0001458F1D8C007CF003009C078FC0907082E +:108300001458F1D8C007CE802FF91839CF85D82A54 +:10831000DA2A3248F00C1800C110E08800113488C5 +:10832000F00C1800C0B0E08800183608F00C1800F7 +:10833000C05036C8F00C1800C0E15EFF3128F00CC8 +:108340001800CFC03188F00C1800CF8030C8F00C76 +:108350001800CF405EFD3308F00C1800CFC1CEEB03 +:10836000EBCD40E078055805E08A0010F8C6FFFC28 +:108370003007C0380A37C0940D8C2FF72FF6F01F46 +:108380000004CF90E3CF90E0E3CF80E08001831240 +:108390004838F14B01DCF14C01D85EFC000087F459 +:1083A0004838F14B01ECF14C01E85EFC000087F429 +:1083B000EBCD40801697581BC050582BC080E3CFA0 +:1083C0008080F01F00050E9CE3CD8080F01F00022E +:1083D000E3CF9080800091E8D401580CC070486BC6 +:1083E000760AE04A0168E0880003D80AF01F00031B +:1083F000DA0A0000000089EC800091DCD401580CFE +:10840000C0A078185908E08B0007780AE04A016894 +:10841000E0880003D80A189B482CF01F0003DA0AF2 +:10842000000089EC800091DCEBCD4040350A1896C5 +:10843000F01F000330088D48E3CD8040800091DCC0 +:10844000D401306AF01F0002D8020000800091DCE5 +:10845000D401300CF01F0002DA0A000080016C7CAD +:10846000D421201D189414971296169A1095189BD3 +:108470001A9CF01F001CE08A0032585CC27058063B +:108480005F1858075F191268C241300840099338D5 +:10849000400A95584008301B9115400CF01F0012FF +:1084A000581CC100400C78785808C090189B089C54 +:1084B000F01F000E581CC0A03FDCC098301BF01FFE +:1084C000000C400C78785808CF21301C2FFDD822A2 +:1084D0004008913740099356CDEB3FEC2FFDD82251 +:1084E00080016B3C800169A480016C40800169E0DF +:1084F000EBCD40C018971696303CF01F00283DD8B1 +:108500003079AE88AE9935083F29300BAEB8AEC988 +:1085100030283019AED8EF6B0008AEABAEEBAEF939 +:1085200058065F1AF8F900BC58095F181468F60875 +:108530001800C310F8F800D05818F9B80008EFF880 +:108540000E08F8F800CC5818EFF80808F9B900043C +:10855000F1D9E038EFF80E08F8F800C85818EFF82D +:108560000808F9B90002F1D9E038EFF80E08F8F878 +:1085700000C45818EFF80808F9B90001F1D9E0383B +:10858000EFF80E08F8F900D4EF380008F1E91048C8 +:10859000EF680008E3CD80C08001EF6CEBCD404078 +:1085A0001896303C5C76F01F000E5876E088000488 +:1085B000E3CF804048B8F006032FF90C00C6E3CDA6 +:1085C0008040F90C00CAE3CD8040F90C00CEE3CD29 +:1085D0008040F90C00D2E3CD804000008001EF6CB8 +:1085E0008003B7D4D40130DCF01F0002784CD802ED +:1085F0008001EF6CEBCD40FC207D31CA1893300B2D +:108600001A9C1A92F01F001266045804E08A00189F +:10861000E6C6FFFC30070D852FF72FF60A9CF01FEA +:10862000000DC0A14008FACAFFE4F0C9FFFF100A1C +:108630005009F565FFE80E34FE99FFEF1A9B069C82 +:1086400031CAF01F00052F9DE3CD80FC800091D042 +:1086500080018312800091DCEBCD40E0207D300B67 +:10866000189731CA1A9CF01F00171A956E0B580BF9 +:10867000E08A0024300AFAC6FFFCEEC9FFFC0C9C1D +:10868000149EC0582FF9143BE08A000D2FFA13886E +:10869000FC081800CF8418C82FF96E0B143BFE9904 +:1086A000FFF7F80601061A9B50060E9C31CAF01F10 +:1086B00000062F9DE3CD80E0FAC6FFFC0C9CCF2B7B +:1086C000800091D0800091DCD421129618971695E5 +:1086D0001494580CC1205809C111314CF01F0009E5 +:1086E000C0C09907B8C599249936487A7419994930 +:1086F000930CF8C8FFF49518D822F01F0004D82274 +:1087000080009200000077A4800147E0EBCD40C0DC +:108710001896580CC110308CF01F000C1897C090A0 +:108720000C9CF01F000B8F1C1898C0A030188F08ED +:108730000E9CE3CD80C018970E9CE3CD80C00E9CAC +:108740001097F01F0004CF5B800092008001D920B9 +:10875000800091E8EBCD40C049566C075807C180B6 +:108760006E395809EFF80004EDF80A01EFF810042B +:10877000F3F81A046E4891096E2A0FCB6E0CF01FA5 +:10878000000D0E9CF01F000C6C075807CEA148B8D6 +:10879000F0C7FFEC0E9CF01F000AC071302CF01FD8 +:1087A00000090E9CF01F0008E3CD80C0000077A4F4 +:1087B000800147E0800091E8000087F4800145DCFB +:1087C0008001478C800145ECD4014848300991185C +:1087D0009109F01F0003D802000077A4800187549C +:1087E000EBCD40FE4A0618976C0816951494201895 +:1087F000E0480167E0880004E3CFC0FE580A5F1933 +:108800006C1A300B580A5F181268F6081800CF501F +:10881000183A5FB858FC5F891268F6081800CED085 +:1088200016910C92C0B82FF7641958F75F8A0E3969 +:108830005FB81468E2081800CE00EE031016306A24 +:10884000E6CCFFF80A9BEC0C000CF01F0008CEC130 +:10885000485B089C060B310A2F2BF01F00050E9C6D +:10886000E3CD80FE000089EC8000917C800091DCEB +:10887000EBCD40E018951697300C18960E9A0A9B8F +:108880002F07F01F0005C0452FF62FFCCF8B0C9C47 +:10889000E3CD80E0800187E0D401306AFACCFFFCB0 +:1088A000FACBFFF4F01F00025F0CD8028000917C2D +:1088B000EBCD4068205D3FF8FACAFFDC15D9FB68B4 +:1088C0000013FB68000EFB68000FFB680010FB68DC +:1088D0000011FB680012FAC6FFF8ACD974088D08C5 +:1088E00015C9FAC3FFFEACC93065FACBFFF20A9A8C +:1088F000069CF01F00060A9A069B0C9CF01F0004C1 +:108900005F0C2FBDE3CD80688002E7368000917C4C +:10891000D401FACBFFFCF73900241788F0091800BE +:10892000C020D80AF73A00251798F4081800CFA1FC +:10893000F6CCFFFE2DABF01F00035F0CD802000049 +:108940008000917CEBCD4040211D303CF01F001E8B +:10895000322A1896FACBFFB4FA0A000CF01F001B5B +:10896000ECC6FF78ECE80000FAE90000ECEA000849 +:10897000FAEB0008ECE80010FAE90010ECEA001845 +:10898000FAEB0018ED380020FB680020ED390021DB +:10899000FB690021FB3A00221B88F4081800C05034 +:1089A000300C2EFDE3CD80401B9AFB380023F408E9 +:1089B0001800CF71FACBFFFEFACCFFDCF01F0004E9 +:1089C0005F0CCF0B8001EF6C8002E7368000917C5A +:1089D000EBCD40E0203D4B571896EF3900943FF81F +:1089E000F0091800C3507938707C2F4CF8E800006B +:1089F000209DFAE90000F8EA0008FAEB0008F8E820 +:108A00000010FAE90010F8EA0018FAEB0018F9383B +:108A10000020FB680020F9390021FB690021F01FCC +:108A200000242F7D580CC0412FDDE3CD80E0202DA8 +:108A3000EEC7FF4A306A0E9B1A9CF01F001EF01F03 +:108A4000001E2FED580CC1C02FDDE3CF90E0F8CB16 +:108A5000FFE2306A1A9CF01F0017EECBFF4AFAC6FD +:108A6000FFFA306A0C9CF01F00130C9B1A9C306AB2 +:108A70001A95F01F00125F0C2FDDE3CD80E0ECCBE8 +:108A8000FFE2FAC5FFFA306A0A9CF01F000A0E9B4B +:108A9000306A1A9CF01F00071A9B0A9C306A1A96CB +:108AA000F01F00065F0CCC1B0000026080018944AF +:108AB0008002E736800188B08000917CD401201DBF +:108AC000500C580CC0401A9CF01F00022FFDD80219 +:108AD0008001D3A8D401201D500C580CC0401A9C12 +:108AE000F01F00022FFDD8028001D3A8EBCD40C0BB +:108AF000E06B00E41896300CF01F000A1897C0E0F5 +:108B0000E06A00E40C9BF01F0008ECC9FFF8EECA15 +:108B1000FFF8486B0E9CF01F00060E9CE3CD80C052 +:108B20008001D8DC800091DC8001D3EC8001ACA80E +:108B3000EBCD40C0E06B00EC1896300CF01F000A43 +:108B40001897C0E0E06A00EC0C9BF01F0008ECC92D +:108B5000FFF0EECAFFF0486B0E9CF01F00060E9C63 +:108B6000E3CD80C08001D8DC800091DC8001D3ECB3 +:108B70008001ACA8EBCD40FE129210914A88F0F92A +:108B800000F818933DD8733C316916977874AE8815 +:108B9000AE9930083509AEA8AEB93F283019301665 +:108BA00014954A0B303AAEC8AED9AE36EECCFFF8CB +:108BB000F01F001D069CEF65000BAE76AE66308B95 +:108BC000F01F001A8F5CC290303A496BF01F0016FC +:108BD0006E58B0B28EE86E5C303AF808002C491B33 +:108BE000F01F00116E598EE8F2080028B0B1E919A3 +:108BF00000B0E91800B21208E93900A5A3682F08EF +:108C00001039C030E3CF90FE0F9830092FE8EF59AC +:108C10000010AE98E3CF90FEE3CD80FE000087F415 +:108C200080017B1C800091DC8001D3ECD431201DBD +:108C3000314E1697330BAE9EAE8B1090FACBFFD809 +:108C40007618500818921493129176055805E08A08 +:108C50000006EA0815042EA8AE983016303AAE1673 +:108C600049E4EECCFFFCE8CBFFFCF01F001D049CA8 +:108C7000AEF3AE56AE46AE75EA0B15042F8BF01F61 +:108C800000198F4CC280303AE8CBFFFCF01F001473 +:108C90006E48B0B18EC86E4CE8CBFFFCF808002CD3 +:108CA000303AF01F000F6E498EC8F2080028B0B0AD +:108CB0003289AE695805E08A000D6E488EC98EDC97 +:108CC000EA0A1504120C400BF00C002CF01F0004F3 +:108CD0002FFDDA3A2FFDD83280017B1C800091DC19 +:108CE0008001D3ECEBCD40E0201D500B1897580CC1 +:108CF000C070169A4C4C0E9BF01F0044C6404C4668 +:108D000030080DA9F0091800C050301C2FFDE3CD2C +:108D100080E0ECCCFFE4F01F003FCF815807C2F0A9 +:108D2000301CF01F003DC3304B751A9B4B6CF01F7D +:108D3000003B1897C320F01F003A3018ED4C00CCD0 +:108D4000ACA80E9C3005400BED5500D04B07F01F32 +:108D500000351896581CC3F1EECCFFE4F01F00322A +:108D60004B28F1090142EA091900CD006E98EDB8CF +:108D7000000ECCC0F01F002E0C9CCC9B4A25EAF9BB +:108D80000320EAF803241039CCC1CD0BECCCFFE46E +:108D9000F01F0025301CCBBBECF801245818C04054 +:108DA000301CF01F0024ECCCFFE4F01F001FEAF998 +:108DB0000324EAF803201238CA90301CF01F001672 +:108DC000301CCA5B492AF50B00D2F80B1900C0A071 +:108DD0003FBCC9DBEECCFFE4AEA5F01F00133FBCE7 +:108DE000C96B3018F55800D24909F3080142F6085A +:108DF0001900CEF07498EDB8000ECEB0F01F000C44 +:108E00003FBCC85B000084CC80017B30000087F44D +:108E1000800145DC80019F3080017B7A800145C460 +:108E200080014664800145EC000002608001FBFC8B +:108E30008001A128EBCD40C01897F01F0015C1B0EC +:108E40006E4849468D186E598D2930096E2C8F2930 +:108E50006E486E3BE2180080F9B80001EDF80E0292 +:108E6000F01F000D1897581CC0803008300CACA8BB +:108E7000E3CD80C0E3CF90C0F01F00083008ED4C78 +:108E800000CCED5800D00E9CE3CD80C08001C6A080 +:108E9000000087F480014664800145C4EBCD40802A +:108EA000491A18977498EDB80001C111F4F801241B +:108EB0005818C0A07848951878599529F01F000BCC +:108EC000C091E3CD8080109CE3CD80803FBCE3CD9A +:108ED000808030086E2C6E3B8F28F01F0005E3CD9C +:108EE00080800000000087F48001C6A080018CE42F +:108EF000106104000000000040200700FFFFFFFF9A +:108F0000000000004869F2F802045828C0205EFE04 +:108F1000580CCFE0F2C8FFF099085EFF000077AC74 +:108F20005EFDD7034828912C913B5EFF000077AC93 +:108F300048384849910C930B5EFC000000007540D6 +:108F4000000074B45EFCD703D431202D500C3008DF +:108F5000FAC1FFF81690109402D84A424A43E269D7 +:108F60005A4C089A0819029B009C40085D181895F5 +:108F70005804C0B1584CF80A1780F9BA0B0449DB01 +:108F8000401CF01F001DC2E140165805C1000A97A1 +:108F90005907EE0A1780F9BA0B100C9B1417140628 +:108FA00064085C7A660C5D185807CF310A04E24405 +:108FB0005A4BFE98FFD65875E088000D4018EACC51 +:108FC000000848CBF00C000C2F8B308AF01F000AF1 +:108FD000C0913009009C129A129B40085D182FED39 +:108FE000DA3A30DC2FEDD83200007540000074B45E +:108FF00080018EF08000917CEBCD40FC49F8189404 +:10900000F0C3FDDCF0C7FFBC3072C0B8321A089B59 +:109010000A9CF01F001B1896C1D02C470637C16070 +:10902000EEC5002C5804CF316E08109C5808CF6054 +:10903000F01F00148F04EF44FFF86E185808CEE1BB +:109040008F248F322C470637CEC15804C0D0E3CFCF +:10905000C0FC6ABC580CC080F01F000A8B968BB60F +:109060006AC85808C030E3CF90FC8BD8301C3078E9 +:109070008BE8E3CD80FC0000000077AC8000917CA1 +:10908000800091E8EBCD40FE109114961895169251 +:109090001293F4C80008E0480037E08B00185859D4 +:1090A000C18049D8F0C4FE08F0C7FFE86EB8580880 +:1090B000C1300E9C321A0A9BF01F0018C1D02C47F9 +:1090C0000837CF51307CE3CD80FE30ACE3CD80FE5D +:1090D000129CE3CD80FEECCBFFFF049CF01F001040 +:1090E0000A9B8FBC8F968FD18FE30E9C321AF01F94 +:1090F000000DE3CF90FE6EBCF01F000B049CECCB88 +:10910000FFFFF01F00078FE38FBC8F968FD1E3CF57 +:1091100090FE0000000077AC8000917C8000918878 +:10912000800091DC800091E8D401487BF6F80204CD +:109130005828C020DC0AF6CBFE04306AF01F00037A +:10914000DA0A0000000077AC800091DCEBCD40FE35 +:10915000209D580B5F09580A5F08169314941069F4 +:10916000C341580BC4514A9264585808C2E03005B4 +:10917000FAC1FFFD0A970A9CC0D8ED3A0020FB38DF +:109180000023F4081800C2E00E9C64580E38E088F2 +:10919000001E64482FF7F00C03265803CEF1306A06 +:1091A000089B5804C0A0202D1A9CF01F0019F01F26 +:1091B00000192FED580CC0E05805C0506AC96CC8A2 +:1091C0001238CE350C95CE1B30050A9C2F7DE3CD91 +:1091D00080FE306A089BECCCFFDFF01F000FCD5102 +:1091E000CECB029B0C9CF01F000CCCF1CD9B189BAE +:1091F000069AFACCFFFDF01F0009FB6300234832FA +:1092000064585808CB51CE1B000077AC8002E7367B +:10921000800188B08000917C800091DCEBCD4060C3 +:10922000306A202D169618951A9CF01F0009F01F21 +:1092300000090C9A5F0B0A9CF01F00072FED581CC9 +:10924000F9BC0001F9BC01FFE3CD80608002E73684 +:10925000800188B080016480D4015C6CF01F000440 +:10926000581CF9BC0001F9BC01FFD8028001641C44 +:10927000EBCD406E202D1293189116921495300B61 +:10928000308A1A9CF01F0012306A069B1A96202D15 +:109290001A9CF01F0010F01F001030085F091AD848 +:1092A0000A9A1AD6049B1AD3029C1AD83038F01F97 +:1092B000000B2FAD5BFCC070581CF9BC01FF2FEDFB +:1092C000E3CD806E304C2FEDE3CD806E800091D0E9 +:1092D0008002E736800188B08001661CEBCD406ECD +:1092E00010911892169314951296F01F00113008E1 +:1092F0000C991AD80A9A1AD1069B049CF01F000DEB +:109300002FED583CE0890007582CC085306CE3CD28 +:10931000806E584CC070E3CFC06E5BECC050581CE0 +:10932000CFB1E3CF906E30BCE3CD806E8001A1DC85 +:109330008001F7D8EBCD4040201D10964978F0FE13 +:109340000204582EC0503FFC2FFDE3CD804030EE8C +:10935000FAC8FFFC10DE300E1A985C761ADE1AD6B8 +:10936000F01F000F2FEDFE5CFC17E0890010FE5C83 +:10937000FC16C114FE5CFB4FC070FE5CFBB4C0B0B9 +:10938000FE5CFAECCE11307CCE0B5BECC040581C7E +:10939000CDB1CDBB30BCCD9B000077AC8001F54496 +:1093A000D4014858F0F902045809C030F01F0003F6 +:1093B000D8020000000077AC80014480EBCD40E88B +:1093C0004D56189514971693E06A0218300B0C9CB2 +:1093D000F01F00524D288D05700C8D133005A36CC5 +:1093E000ED450204F01F004F8D4CC031E3CFC0E8C3 +:1093F0000A9CF01F004D581CCFA11AD5F1D7C00808 +:109400000A990A9A310B320CF01F00482FFD581CA4 +:10941000CEE1F01F0047581CCEA11AD50A980A9930 +:109420004C4A0A9B302CF01F00442FFD580CCDF005 +:1094300030670A981AD70A994BEA0A9B322CF01F18 +:10944000003E2FFD580CCD3030780A991AD84B9A2F +:109450000A980A9B323CF01F00382FFD580CCC7044 +:109460001AD50E9C0A980A994B2A0A9BF01F0032C3 +:109470002FFD580CCBC030270A981AD70A994ADA20 +:109480000A9B304CF01F002C2FFD580CCB001AD734 +:109490000A984A8A0A990A9B305CF01F00272FFD20 +:1094A000580CCA50301C0A981ADC0A994A1A0A9BAE +:1094B000F01F00212FFD580CC9A030390A981AD985 +:1094C00049CA0A990A9B31CCF01F001B2FFD580C8A +:1094D000C8E0F01F001A581CC8A1F01F0019581C42 +:1094E000FE91FF860A980C9730490C9A495B0A9CBA +:1094F000F01F0015FE90FF7C189A308B493CF01F3E +:109500000014581CFE91FF74ED4C0204EF45020C50 +:10951000E3CD80E8000077AC800091D000000258D5 +:1095200080009200800200AC8002067C8001FFB4C3 +:109530008001984C80016E788001FD8C8001A00034 +:109540008001955080016AF48003B8048001762878 +:10955000EBCD40E078185B98C031E3CFC0E078569F +:109560005866CFC1783B0C9A4985EAC7FE040E9C29 +:10957000F01F0017303A497B0E9CF01F0017C131D5 +:10958000F01F00163026EB460204F01F00150C9C5D +:10959000F01F00146A195809C14048C8700C5D19C1 +:1095A000E3CF80E037A83C49EB6801FC30E80C9B36 +:1095B0000E9CEB6901FDEB6801FEF01F000BCE1B5A +:1095C000129CE3CD80E00000000077AC800091DCCD +:1095D0008003B80C8000917C8001FD8080020290A5 +:1095E0008002023480017984EBCD40FC7875580B01 +:1095F000F9B80100F7F81A001693EB3900C83FF8E4 +:10960000F0091800C250EB0900D03008F009190029 +:10961000C4D0307430073022EE061502EAF800D8C4 +:109620000C082FF711BC089BF01F0027E08A0009E7 +:10963000EAF800D80C0811B45803E7F21A00EB1846 +:1096400000D00E38FE99FFEA089CE3CD80FCEB3891 +:1096500000A4F2081800C250EB0900B03008F0096D +:109660001900C240307430073012EE061502EAF8D5 +:1096700000B80C082FF711BC089BF01F0013E08AFC +:109680000009EAF800B80C0811B45803E7F21A0010 +:10969000EB1800B00E38FE99FFEA089CE3CD80FC81 +:1096A000787992D8EDB80004C040307CE3CD80FCDE +:1096B000307B305CF01F0004FE9AFFF9305CE3CD94 +:1096C00080FC000080017E60D431201D4D876E58E3 +:1096D0005808C0E030060C996E48F009032CF01FC2 +:1096E00000552FF66E580C990C38FE9BFFF730068C +:1096F0001A9B8F560C9CF01F00501A94400C580C6B +:10970000C0312FFDD832A36CF01F004C1890CFA0B1 +:10971000400A0C9BA36AF01F004A40085808E08AE0 +:1097200000260C950096C0782FF52FC640080A3801 +:10973000E08A001D350CF01F00418D0CCF614009FF +:109740005809E08A000F009530062FF66A0C580C75 +:10975000C040F01F003840092FC50C39FE99FFF7B3 +:10976000009CF01F00342FFDD8321A9B009CF01F84 +:1097700000324B4972084009F0090D488F585808CB +:10978000CE00300408930891A363E003000264084C +:109790006E467135344CF01F0029F9410040060631 +:1097A0008D0C6A796E48F2CBFFF2F0030306F33AB0 +:1097B000000D0C9CF01F00246A78F139000D306A0E +:1097C000ED690020ECCCFFDF640B2E2BF01F001E98 +:1097D000029B0A9CF01F001DED6C00386A498DC980 +:1097E0006A585808F9B805008DD86A79F338005ED0 +:1097F000ED6800276A7992C88DA80BF9ED59002C05 +:1098000030290BEAF20A1800E2081710F9B8000133 +:109810008DF830286E49F20309062FF4F00A18007B +:1098200008936E580838FE9BFFB1C8AB000077ACB8 +:10983000800091E88002105880009200800091D052 +:1098400000000258800091DC800195E8EBCD40C01B +:10985000201D1696582BC680E0880013586BC590C3 +:10986000587BC2D0583BC4804C076E295809C05061 +:109870004BE80C9C703B5D192FFDE3CD80C0580B6D +:10988000C0F14BA7EEF902085819C6C0EEF8020C59 +:109890003019A1D8EF690210EF48020CCE7B581B9B +:1098A000CE414B273008EEF9020C4B1AA3A9EF6802 +:1098B0000210A1D9B488EF49020CCD8B4ACA3008F6 +:1098C0001589F0091800C4C14A87EEF8020CEDB8FA +:1098D0000001CD31EF380210F2081800CCE1F01F82 +:1098E0000025F01F0025EEF8020C3016E018FFF9F5 +:1098F000EF48020CCBBBF01F002049C7EEF9020C69 +:10990000EDB90004CBA11298A5C8EF48020CCAEB30 +:1099100049673019EEF8020CEF690210A1D8300641 +:10992000EF48020CCA3B4917EEF8020CA3C81A9C78 +:10993000EF48020CF01F001140085828C050F01FDB +:10994000000DF01F000D300A4898B08AEF39021060 +:10995000F4091800C9204858F16A0210C87BB4887D +:10996000C8CB4838B089C89B000077AC000079C4E8 +:1099700080021298800196C8800177A4D401201D2E +:1099800048F9F2F802045828C0302FFDD80AF339FC +:1099900002103008F0091800C0711A9CF01F00096D +:1099A00040085828CF31F01F0008CF00F8CAFFE266 +:1099B000300B169CF01F00052FFDD802000077AC7D +:1099C000800177A4800210FC8001914CEBCD408097 +:1099D000201D4967EEF802045828C0503FFC2FFDB7 +:1099E000E3CD8080F01F0012C051302C2FFDE3CD5D +:1099F0008080EEF9020CEDB90002CF10EDB9000144 +:109A0000C031309CCEDB1A9CF01F000A4008580879 +:109A1000CED0F01F0009581CCE21EEF8020CA3A8EE +:109A2000EF48020CCDDB0000000077AC800210FC98 +:109A3000800211088001F370EBCD40C020AD189872 +:109A40001697580BC07076DC581CC0402F6DE3CDC4 +:109A500080C0109BF13A0020FAC6FFFE0C9CF01F5C +:109A6000001B0C9B209D322A1A9CF01F0019F01F2E +:109A700000192F7D580CCEB0793CFACBFFDCF01FDB +:109A8000001640985818C150C0923058F808180075 +:109A9000F9BC0003F9BC0102CDAB5828C030301C22 +:109AA000CD6B5807C0D06EC85808C0A0305CCCFB46 +:109AB0005807C0806EC85808C050304CCC8B307CE2 +:109AC000CC6B306CCC4B00008002113C8002E7363E +:109AD0008001F2BC800195E8D43120EDFEF3029CB8 +:109AE000FAC1FFA4E6F8020C18971694E2180006D3 +:109AF000C040309C2F2DD832F01F00A1C040308CC8 +:109B00002F2DD832E74C02085807C130BA8CF5D453 +:109B1000C008FAC6FFFEBA9A0E9B0C9CF01F009973 +:109B20000C9C1B9BF01F0098581CC0802F2DDC3A0A +:109B3000BA97BA87FAC6FFFECF4B029CF01F00937C +:109B40001892581CCF41029A089B0E9CF01F00905F +:109B50001890C580E6C7FFE8E6C6FE08EF3A002089 +:109B6000E1380020F4081800E08000A02C470C37F2 +:109B7000CF6130070E950E9B009CF01F0086E136EA +:109B800000381897CD40585CE08000C2E08B00B9E7 +:109B9000583CE08000B4584CC020300CF01F007ED0 +:109BA0003048F0061800E08000A83054E80618009D +:109BB000E08000983028F0061800E080009A300C11 +:109BC000F01F0076E8061800E080008F300CF01FD0 +:109BD00000745837E08B007960F85818C710301CB3 +:109BE000F01F0070300B4F0CF01F0070CA00F01F08 +:109BF0000070581CC9C1E6F8020CA1B8E748020C75 +:109C0000C7ABFAC5FFCE306A029B0A9CF01F005D0D +:109C1000FAC6FFDE0C9CF01F00673FF81AD00C9BC1 +:109C20001AD2310A1AD8204D1A9CF01F00630A9BE1 +:109C3000202D306A1A9CF01F00600499209DE6CC0C +:109C4000FDECFB380069FAEA0048FAE20050FB68D4 +:109C50000021FAEB0000FB380068FAEA0058FAE34A +:109C60000008FAE20060FAEB0010FAE30018FB6863 +:109C70000020303A0098129B4C03F01F00502EED4C +:109C80001895581CFE91FF54009BE6FC0214F01F2F +:109C9000004C5BBCC620580CC3E1189BE6FC0214C8 +:109CA000F01F00483FFCC27B0E9C009BF01F00464B +:109CB000FE91FF5E6EB55805EA071700C5DB302C34 +:109CC000F01F0038C90B5805FE90FF320A9AE13B9D +:109CD0000020009CF01F003D3018E7480208C7DB59 +:109CE000301CF01F002E301CF01F002DC73B302C05 +:109CF000F01F002AC6CB303CCFCB301CC50B586CB4 +:109D0000C080587CFE91FF4B308CC49B307CC47B60 +:109D1000305CC45B344CF01F002E089A18960E9BE2 +:109D2000F01F0018029B306AED640020ECCCFFDFCE +:109D3000F01F001400991AD60A984A6A009B31CC89 +:109D4000F01F00252FFD580CC0E0E6F8020C0A9C1D +:109D5000A1B8E748020CCCFA009BE6FC0214F01F05 +:109D60000019CC8A189BE6FC0214F01F00160C9C0C +:109D7000F01F001A3FFCCBFA000077AC800210FC09 +:109D8000800091DC800178BC800179788001914C61 +:109D900080019A3880015F60800163488001639C84 +:109DA00080017A1080018F208001FD408001F3A0A6 +:109DB000800177C08002E73680020BFC80020A70C7 +:109DC00080020B408000917C800214708000920021 +:109DD00080019E0080016E78800091E8D401202DE2 +:109DE000FACAFFF415D8BAD87409500915C8300B4F +:109DF000BAC8169CF01F00022FEDD80280019AD835 +:109E0000EBCD40E049F51697EAFC0214300BF01F49 +:109E1000001EF01F001EEEC6FFDFEF3B00200C9A75 +:109E20000E9CF01F001BC150EAF8020CA1D8202D97 +:109E30000C9BEB48020C306A1A9CEF360020F01F96 +:109E400000150C9B0E9CF01F00142FED581CC060D9 +:109E5000EAF8020CEDB80001C0600E9CF01F000F84 +:109E6000E3CD80E0301B300CF01F000D302B300CA8 +:109E7000F01F000B0E9CF01F0009E3CD80E00000F6 +:109E8000000077AC80020B40800196C88001914CA5 +:109E90008002E73680019AD8800091E88001984CD2 +:109EA000EBCD40E0202D18951697580CC0513FFC83 +:109EB0002FEDE3CD80E0580BCFB0E04B0020FE9BB0 +:109EC000FFF8FAC6FFFE306AE06B00FF0C9CF01F43 +:109ED0000008306A202D0C9B1A9CF01F00060E9B78 +:109EE0000A9CF01F00052FEDCE4B0000800091D0A2 +:109EF0008002E73680019AD8EBCD408048B7EEF873 +:109F000002045828C030E3CFC080F01F0009581C5D +:109F1000F9BC0109EFF80083F9B90010F1D9E03874 +:109F2000EFF80A83E3CD8080000077AC80020A84DA +:109F3000D40148B9F338000A104CF36C000A7218C7 +:109F40005808C0B05828C0803028726C9318301B55 +:109F500072595D19D80AD80ADA0A0000000079C8D7 +:109F60004828916B915C5EFC000079C8EBCD40C045 +:109F7000203D5CBBBA89502B109714965CC85C8856 +:109F80005807C0513FFC2FDDE3CD80C05C784959B4 +:109F90005018B28C3048FAC9FFF8300A306B492C9F +:109FA000F01F0012581CCEF11B89491A1898B48969 +:109FB000306B1A99300A48FCF01F000C581CCE3147 +:109FC00048D8300AB007306B304848CCFA0800094E +:109FD000F01F0006581CCD7148989146CD5B0000DB +:109FE00000007A288003B8108001776C0000025CC2 +:109FF0008003B8180000025E8003B820000079C812 +:10A00000EBCD40C030074A161AD78D078D17ED6784 +:10A010000008ED670009ED67000A8D378D470E983F +:10A020000E9949BA0E9B302CF01F001A2FFD580CC8 +:10A03000C0413FFCE3CD80C01AD70E980E99496A03 +:10A040000E9B304CF01F00132FFD580CCF301AD749 +:10A050000E980E99491A0E9B32ECF01F000E2FFD40 +:10A06000580CCE8031483019E06A138830AB0E9C12 +:10A07000F01F000B581CCDE10E9BECCCFFF4F01F41 +:10A080000009581CCD71CD7B000079C88001A0F07B +:10A0900080016E788001A1A08001A0A480019F6C46 +:10A0A000800144F8D401F01F000E48EA74085838C3 +:10A0B000C12030289508F539000A3008F009180049 +:10A0C000C020D8023018300B9518487C487AF01F11 +:10A0D0000008D80230089508D80200008001DA365E +:10A0E000000079C88001DA5880018E348001EF20A9 +:10A0F000EBCD408048973018EF6800086E4958094A +:10A10000C0A0308CF01F00066E4C3009485A6E3BE0 +:10A11000F01F0005E3CD8080000079C880019F30EA +:10A120008001A1CC80014558D4014989F80C11FF68 +:10A13000F338000A106CF36C000AC1E1F33800092F +:10A14000F8081800C19072185808C161F338000867 +:10A15000F8081800C06072085808C0F05818C0C04D +:10A160003018300B931848AA48ACF01F000B300B86 +:10A17000331CF01F000AD802301B485A930B488C3E +:10A18000F01F0005D8020000000079C880018E345D +:10A190008001DA588001EF2080016D6C8001DA8443 +:10A1A000EBCD404048766C3CF01F0007308CF01F30 +:10A1B000000730083009ED6800088D09E3CD8040C4 +:10A1C000000079C8800145308001A128D401308C7D +:10A1D000F01F0002D80A00008001A128EBCD4080CA +:10A1E00048E76E185828C030E3CD80806E58300B99 +:10A1F0006E6C5D18300B8F1B4899F2FA0324F2F84D +:10A2000003201438C040169CF01F0006300B332C7E +:10A21000F01F0005E3CD8080000079C8000084CCE9 +:10A2200080018CE480016D6CEBCD40C018971696D0 +:10A23000F01F0009C0C06E0C581CC0700C9B0E9C17 +:10A24000F01F0006CF91302CE3CD80C03FDCE3CD82 +:10A2500080C000008001462C80014636EBCD404096 +:10A26000301818969908F01F00040C9CF01F00038A +:10A27000E3CD80408001463280014634D401580C41 +:10A28000C030F01F0002D80280014630D4013008EF +:10A290009908F01F0002D8028001462ED401189EB2 +:10A2A000580AC0C196199688F9D9C010103CC165EA +:10A2B000F2C8FFFF973AB618D802581AC06096192C +:10A2C000F2C8FFFFB618D802969996881039C0F4E4 +:10A2D0007648F0090709B889CF3B1D897648F00C0C +:10A2E0000B099619F2C8FFFFB618D8023008973844 +:10A2F000B8889619F2C8FFFFB618D802EBCD408097 +:10A300001897580AC1D1961C9689FDDCC010FCC86C +:10A31000FFFF1238F7FA4A03F7F85004F1DEE508B8 +:10A32000EFF95801F1F95E00EFFA5800F1FA5E0119 +:10A33000F7FC5201F8C8FFFEB618E3CD8080581A2A +:10A34000C070961CF8C8FFFEB618E3CD8080969AC0 +:10A350009689F4C8FFFF1238C09476481408119902 +:10A36000B889118AB89A961CCEEB30089738B8088D +:10A37000961CF8C8FFFEB618E3CD8080EBCD408078 +:10A38000189E169C580AC0F1961B9889EFDBC010E6 +:10A39000EEC8FFFD1238C205F6C8FFFC993AB8189E +:10A3A000E3CD8080581AC070981BF6C8FFFCB8181F +:10A3B000E3CD8080969B9889F6C8FFFD1238C1C412 +:10A3C000784A160A15B8BC8815A9BC991598BCA876 +:10A3D0001589BCB9CEAB1DB8784A0E0AB4881DA940 +:10A3E000B4991D98B4A81D89B4B9981BF6C8FFFC90 +:10A3F000B818E3CD8080300899389D08981BF6C8BE +:10A40000FFFCB818E3CD8080EBCD4068189316951B +:10A410001496F01F000C0C9A0A9BE6CCFFFFF01F6D +:10A4200000090C9A0A9BE6CCFFFEF01F00060C9A6E +:10A430000A9BE6CCFFFDF01F0003E3CD806800001F +:10A440008001A29CD4211697189596141496F01F9B +:10A4500000080C9A0E9BEACCFFFEF01F00060BC80A +:10A460005808F1D4E108EFF81C01D8228001A2FCC1 +:10A470008001A408EBCD4068189316951496F01F40 +:10A4800000060C9A0A9BE6CCFFFCF01F0003E3CD0C +:10A49000806800008001A37CEBCD4068189316957E +:10A4A0001496F01F00090C9A0A9BE6CCFFFCF01FE3 +:10A4B00000070C9A0A9BE6CCFFFAF01F0004E3CDDC +:10A4C000806800008001A37C8001A2FCEBCD406885 +:10A4D000189316951496F01F000F0C9A0A9BE6CC61 +:10A4E000FFFCF01F000D0C9A0A9BE6CCFFFBF01F4F +:10A4F000000A0C9A0A9BE6CCFFFAF01F00070C9AA0 +:10A500000A9BE6CCFFF9F01F0004E3CD8068000051 +:10A510008001A37C8001A29CEBCD40681893169526 +:10A520001496F01F000C0C9A0A9BE6CCFFFCF01F5F +:10A53000000A0C9A0A9BE6CCFFFAF01F00080C9A5E +:10A540000A9BE6CCFFF9F01F0005E3CD8068000010 +:10A550008001A37C8001A2FC8001A29CEBCD40681D +:10A56000189316951496F01F00150C9A0A9BE6CCCA +:10A57000FFFCF01F00120C9A0A9BE6CCFFF8F01FBC +:10A5800000100C9A0A9BE6CCFFF6F01F000D0C9A07 +:10A590000A9BE6CCFFF4F01F00090C9A0A9BE6CC5C +:10A5A000FFF0F01F00070C9A0A9BE6CCFFEEF01FAD +:10A5B0000004E3CD806800008001A37C8001A2FC40 +:10A5C000EBCD4068189316951496F01F00090C9A6D +:10A5D0000A9BE6CCFFFCF01F00060C9A0A9BE6CC17 +:10A5E000FFF8F01F0003E3CD806800008001A37C2A +:10A5F000EBCD4068189316951496F01F00060C9A40 +:10A600000A9BE6CCFFFCF01F0003E3CD806800004E +:10A610008001A37CEBCD4068189316951496F01F2B +:10A62000000C0C9A0A9BE6CCFFFCF01F00090C9A68 +:10A630000A9BE6CCFFF8F01F00060C9A0A9BE6CCBA +:10A64000FFF4F01F0003E3CD806800008001A37CCD +:10A65000EBCD4068189316951496F01F00330C9AB2 +:10A660000A9BE6CCFFFCF01F00300C9A0A9BE6CC5C +:10A67000FFF8F01F002D0C9A0A9BE6CCFFF4F01FA8 +:10A68000002B0C9A0A9BE6CCFFF2F01F00280C9AD4 +:10A690000A9BE6CCFFF0F01F00250C9A0A9BE6CC43 +:10A6A000FFEEF01F00220C9A0A9BE6CCFFECF01F95 +:10A6B000001F0C9A0A9BE6CCFFEAF01F001C0C9AC4 +:10A6C0000A9BE6CCFFE8F01F00190C9A0A9BE6CC27 +:10A6D000FFE6F01F00160C9A0A9BE6CCFFE4F01F81 +:10A6E00000130C9A0A9BE6CCFFE2F01F00110C9AB3 +:10A6F0000A9BE6CCFFE1F01F000E0C9A0A9BE6CC09 +:10A70000FFE0F01F00090C9A0A9BE6CCFFDCF01F6B +:10A7100000060C9A0A9BE6CCFFD8F01F0005E3CD9B +:10A72000806800008001A37C8001A2FC8001A29CC3 +:10A73000EBCD4068189316951496F01F00120C9AF2 +:10A740000A9BE6CCFFFCF01F00100C9A0A9BE6CC9B +:10A75000FFFBF01F000D0C9A0A9BE6CCFFFAF01FDE +:10A76000000A0C9A0A9BE6CCFFF9F01F00070C9A2E +:10A770000A9BE6CCFFF8F01F0004E3CD80680000E0 +:10A780008001A37C8001A29CEBCD406818931695B4 +:10A790001496F01F00060C9A0A9BE6CCFFFCF01FF3 +:10A7A0000003E3CD806800008001A37CEBCD40680E +:10A7B000189316951496F01F00060C9A0A9BE6CC87 +:10A7C000FFFCF01F0003E3CD806800008001A37C44 +:10A7D000EBCD4068189316951496F01F00060C9A5E +:10A7E0000A9BE6CCFFFCF01F0003E3CD806800006D +:10A7F0008001A37CEBCD4068189316951496F01F4A +:10A8000000060C9A0A9BE6CCFFFCF01F0003E3CD88 +:10A81000806800008001A37CEBCD406818931695FA +:10A820001496F01F00060C9A0A9BE6CCFFFCF01F62 +:10A830000003E3CD806800008001A37CEBCD40687D +:10A84000189316951496F01F00060C9A0A9BE6CCF6 +:10A85000FFFCF01F0003E3CD806800008001A37CB3 +:10A86000EBCD4068189316951496F01F00060C9ACD +:10A870000A9BE6CCFFFCF01F0003E3CD80680000DC +:10A880008001A37CEBCD4068189316951496F01FB9 +:10A8900000060C9A0A9BE6CCFFFCF01F0003E3CDF8 +:10A8A000806800008001A37CEBCD4068189316956A +:10A8B0001496F01F00060C9A0A9BE6CCFFFCF01FD2 +:10A8C0000004E3CD806800008001A37C8001A650D5 +:10A8D000EBCD4068189316951496F01F00060C9A5D +:10A8E0000A9BE6CCFFFCF01F0003E3CD806800006C +:10A8F0008001A37CEBCD4068189316951496F01F49 +:10A9000000090C9A0A9BE6CCFFFCF01F00060C9A8B +:10A910000A9BE6CCFFF8F01F0003E3CD806800003F +:10A920008001A37CEBCD4068189316951496F01F18 +:10A9300000060C9A0A9BE6CCFFFCF01F0003E3CD57 +:10A94000806800008001A37CEBCD406818931695C9 +:10A950001496F01F00090C9A0A9BE6CCFFFCF01F2E +:10A9600000060C9A0A9BE6CCFFF8F01F0003E3CD2B +:10A97000806800008001A37CEBCD40681893169599 +:10A980001496F01F00090C9A0A9BE6CCFFFCF01FFE +:10A9900000060C9A0A9BE6CCFFF8F01F0003E3CDFB +:10A9A000806800008001A37CEBCD40681893169569 +:10A9B0001496F01F00060C9A0A9BE6CCFFFCF01FD1 +:10A9C0000003E3CD806800008001A37CEBCD4068EC +:10A9D000189316951496F01F00090C9A0A9BE6CC62 +:10A9E000FFFCF01F00060C9A0A9BE6CCFFF8F01F54 +:10A9F0000003E3CD806800008001A37CEBCD4068BC +:10AA0000189316951496F01F00060C9A0A9BE6CC34 +:10AA1000FFFCF01F0003E3CD806800008001A37CF1 +:10AA2000EBCD4068189316951496F01F00090C9A08 +:10AA30000A9BE6CCFFFCF01F00060C9A0A9BE6CCB2 +:10AA4000FFF8F01F0003E3CD806800008001A37CC5 +:10AA5000EBCD4068189316951496F01F00090C9AD8 +:10AA60000A9BE6CCFFFCF01F00060C9A0A9BE6CC82 +:10AA7000FFF8F01F0003E3CD806800008001A37C95 +:10AA8000EBCD4068189316951496F01F00060C9AAB +:10AA90000A9BE6CCFFFCF01F0003E3CD80680000BA +:10AAA0008001A37CEBCD4068189316951496F01F97 +:10AAB00000060C9A0A9BE6CCFFFCF01F0003E3CDD6 +:10AAC000806800008001A37CEBCD40681893169548 +:10AAD0001496F01F00060C9A0A9BE6CCFFFCF01FB0 +:10AAE0000003E3CD806800008001A37CEBCD4068CB +:10AAF000189316951496F01F00060C9A0A9BE6CC44 +:10AB0000FFFCF01F0004E3CD806800008001A37CFF +:10AB10008001A29CEBCD4068189316951496F01F07 +:10AB200000060C9A0A9BE6CCFFFCF01F0004E3CD64 +:10AB3000806800008001A37C8001D434EBCD4068A4 +:10AB4000189316951496F01F00330C9A0A9BE6CCC6 +:10AB5000FFDEF01F00310C9A0A9BE6CCFFD4F01FF9 +:10AB6000002F0C9A0A9BE6CCFFC2F01F002D0C9A16 +:10AB70000A9BE6CCFFBFF01F002B0C9A0A9BE6CC89 +:10AB8000FFBCF01F00290C9A0A9BE6CCFFB0F01F17 +:10AB900000270C9A0A9BE6CCFFACF01F00250C9A0C +:10ABA0000A9BE6CCFFA4F01F00230C9A0A9BE6CC7C +:10ABB000FF9CF01F00210C9A0A9BE6CCFF98F01F27 +:10ABC000001F0C9A0A9BE6CCFF8CF01F001D0C9A0C +:10ABD0000A9BE6CCFF72F01F001B0C9A0A9BE6CC86 +:10ABE000FF68F01F00190C9A0A9BE6CCFF44F01F87 +:10ABF00000170C9A0A9BE6CCFF50F01F00150C9A28 +:10AC00000A9BE6CCFF30F01F0013E3CD8068000004 +:10AC10008001D3448001D2DC8001D2748001CAF863 +:10AC20008001C9D88001D8608001CA688001CA9CAF +:10AC30008001CA0C8001C9A48001D4348001CDB444 +:10AC40008001CE848001D5588001D6B08001D4E443 +:10AC50008001CFFCEBCD4068189316951496F01F39 +:10AC6000000F0C9A0A9BE6CCFFFCF01F000D0C9A1B +:10AC70000A9BE6CCFFFAF01F000B0C9A0A9BE6CC6D +:10AC8000FFF9F01F00080C9A0A9BE6CCFFF8F01FB2 +:10AC90000006E3CD806800008001A37C8001A2FC57 +:10ACA0008001A29C8001AB3CEBCD406C14951296C8 +:10ACB00018921693E06A00DC129B0A9CF01F001A9F +:10ACC000ECC9FF98EACAFF98069B049CF01F001786 +:10ACD000ECC9FFBCEACAFFBC069B049CF01F001431 +:10ACE000ECC9FF68EACAFF68069B049CF01F0011CC +:10ACF000ECC9FF50EACAFF50069B049CF01F000EEF +:10AD0000ECC9FF44EACAFF44069B049CF01F000BF9 +:10AD1000ECC9FF30EACAFF30069B049CF01F000814 +:10AD2000E3CD806C8002E7368001D1588001D24C9F +:10AD30008001D1E88001D1C08001D21C8001CF9C6C +:10AD4000EBCD40EC1296F2E80000F4E90000ECE8EC +:10AD50000008F4E90008ECE20010F4E30010ECE86D +:10AD6000001814971695F4E90018E06B00E85D15DB +:10AD70008F7CC0D030CA6C7BF01F00066E7A6C7975 +:10AD8000149C0A9B2F492F4AF01F0003E3CD80EC4F +:10AD9000800091DC8001ACA8EBCD40C014971696E2 +:10ADA00074385808C160949E948AF60E00081438CE +:10ADB000F5DEE916F9B80900EFF89A03580CC090CF +:10ADC0005809C0C1189B0C9A6E4C1C0CF01F000A4D +:10ADD0008E180C08AE18E3CD80C05819CFA16E4B69 +:10ADE0000C9A1C0BF01F00048E180C08AE18E3CD53 +:10ADF00080C00000800091DCEBCD40E016971496F7 +:10AE00001895581AC0B0F01F000C0C99189B0E9A98 +:10AE10000A9CF01F000AE3CD80E09698968614996C +:10AE20001016169A0C9BF01F00053008EA060B0856 +:10AE3000E3CD80E0800091B88001AD98EBCD406813 +:10AE4000189316951496F01F00060C9A0A9BE6CCF0 +:10AE5000FFFCF01F0004E3CD806800008001A37CAC +:10AE60008001ADF8EBCD4068189316951496F01F4D +:10AE700000060C9A0A9BE6CCFFFCF01F0004E3CD11 +:10AE8000806800008001A37C8001ADF8EBCD4068B4 +:10AE9000189316951496F01F000F0C9A0A9BE6CC97 +:10AEA000FFFCF01F000C0C9A0A9BE6CCFFF8F01F89 +:10AEB00000090C9A0A9BE6CCFFF4F01F00060C99DF +:10AEC0000A9AE6CCFFF0320BF01F0003E3CD806856 +:10AED0008001A37C8001AD98EBCD40681893169556 +:10AEE0001496F01F000C0C9A0A9BE6CCFFFCF01F96 +:10AEF00000090C9A0A9BE6CCFFF8F01F00060C999B +:10AF00000A9AE6CCFFF4320BF01F0003E3CD806811 +:10AF10008001A37C8001AD98EBCD40681893169515 +:10AF20001496F01F000C0C9A0A9BE6CCFFFCF01F55 +:10AF300000090C9A0A9BE6CCFFF8F01F00070C9959 +:10AF40000A9AE6CCFFF7303BF01F0004E3CD80689F +:10AF50008001A37C8001A29C8001AD98EBCD40686C +:10AF6000189316951496F01F00180C9A0A9BE6CCBD +:10AF7000FFFCF01F00150C9A0A9BE6CCFFF8F01FAF +:10AF800000120C9A0A9BE6CCFFF4F01F000F0C9AFB +:10AF90000A9BE6CCFFF0F01F000C0C9A0A9BE6CC53 +:10AFA000FFECF01F000A0C9A0A9BE6CCFFEAF01FA8 +:10AFB00000080C990A9AE6CCFFE9303BF01F000527 +:10AFC000E3CD80688001A37C8001A2FC8001A29C6B +:10AFD0008001AD98EBCD4068189316951496F01F3C +:10AFE00000280C9A0A9BE6CCFFFCF01F00250C9A67 +:10AFF0000A9BE6CCFFF8F01F00220C9A0A9BE6CCD5 +:10B00000FFF4F01F00200C9A0A9BE6CCFFF2F01F21 +:10B01000001E0C9A0A9BE6CCFFF1F01F001B0C9A55 +:10B020000A9BE6CCFFF0F01F00180C9A0A9BE6CCB6 +:10B03000FFEFF01F00150C9A0A9BE6CCFFEEF01F05 +:10B0400000120C990A9AE6CCFFED306BF01F000F4E +:10B050000C9A0A9BE6CCFFE7F01F000B0C9A0A9BA8 +:10B06000E6CCFFE6F01F00080C990A9AE6CCFFE553 +:10B07000320BF01F0006E3CD806800008001A37C46 +:10B080008001A2FC8001A29C8001AD98EBCD4068BC +:10B09000189316951496F01F00150C9A0A9BE6CC8F +:10B0A000FFFCF01F00120C9A0A9BE6CCFFF8F01F81 +:10B0B000000F0C9A0A9BE6CCFFF4F01F000C0C9AD0 +:10B0C0000A9BE6CCFFF0F01F000A0C9A0A9BE6CC24 +:10B0D000FFEEF01F00080C990A9AE6CCFFED303B1A +:10B0E000F01F0005E3CD80688001A37C8001A2FCF5 +:10B0F0008001A29C8001AD98EBCD40681893169515 +:10B100001496F01F00120C9A0A9BE6CCFFFCF01F6D +:10B1100000100C9A0A9BE6CCFFFBF01F000D0C9967 +:10B120000A9AE6CCFFFA302BF01F000A0C9A0A9B11 +:10B13000E6CCFFF8F01F00050C9A0A9BE6CCFFF462 +:10B14000F01F0002E3CD80688001A37C8001A29CF7 +:10B150008001AD98EBCD4068189316951496F01FBA +:10B1600000120C9A0A9BE6CCFFFCF01F00100C9A10 +:10B170000A9BE6CCFFFBF01F000D0C990A9AE6CC67 +:10B18000FFFA302BF01F000A0C9A0A9BE6CCFFF85E +:10B19000F01F00050C9A0A9BE6CCFFF4F01F00029A +:10B1A000E3CD80688001A37C8001A29C8001AD98E2 +:10B1B000EBCD4068189316951496F01F000C0C9A6E +:10B1C0000A9BE6CCFFFCF01F000A0C9A0A9BE6CC17 +:10B1D000FFFBF01F00070C990A9AE6CCFFFA302B10 +:10B1E000F01F0004E3CD80688001A37C8001A29C55 +:10B1F0008001AD98EBCD4068189316951496F01F1A +:10B2000000090C9A0A9BE6CCFFFCF01F00070C9982 +:10B210000A9AE6CCFFFB303BF01F0004E3CD8068C8 +:10B220008001A37C8001A29C8001AD98EBCD406899 +:10B23000189316951496F01F00090C9A0A9BE6CCF9 +:10B24000FFFCF01F00070C990A9AE6CCFFFB303B8D +:10B25000F01F0004E3CD80688001A37C8001A29CE4 +:10B260008001AD98EBCD4068189316951496F01FA9 +:10B2700000090C9A0A9BE6CCFFFCF01F00070C9912 +:10B280000A9AE6CCFFFB303BF01F0004E3CD806858 +:10B290008001A37C8001A29C8001AD98EBCD406829 +:10B2A000189316951496F01F000C0C9A0A9BE6CC86 +:10B2B000FFFCF01F00090C9A0A9BE6CCFFF8F01F78 +:10B2C00000070C990A9AE6CCFFF7303BF01F000408 +:10B2D000E3CD80688001A37C8001A29C8001AD98B1 +:10B2E000EBCD4068189316951496F01F000C0C9A3D +:10B2F0000A9BE6CCFFFCF01F00090C9A0A9BE6CCE7 +:10B30000FFF8F01F00070C990A9AE6CCFFF7303BD4 +:10B31000F01F0004E3CD80688001A37C8001A29C23 +:10B320008001AD98EBCD4068189316951496F01FE8 +:10B33000000C0C9A0A9BE6CCFFFCF01F00090C9A4B +:10B340000A9BE6CCFFF8F01F00070C990A9AE6CC9E +:10B35000FFF7303BF01F0004E3CD80688001A37C41 +:10B360008001A29C8001AD98EBCD406818931695A2 +:10B370001496F01F000C0C9A0A9BE6CCFFFCF01F01 +:10B3800000090C9A0A9BE6CCFFF8F01F00070C9905 +:10B390000A9AE6CCFFF7303BF01F0004E3CD80684B +:10B3A0008001A37C8001A29C8001AD98EBCD406818 +:10B3B000189316951496F01F00090C9A0A9BE6CC78 +:10B3C000FFFCF01F00070C990A9AE6CCFFFB303B0C +:10B3D000F01F0004E3CD80688001A37C8001A29C63 +:10B3E0008001AD98EBCD4068169514961893F01F28 +:10B3F00000220C990A9AE6CCFFFC308BF01F001F4C +:10B400000C9A0A9BE6CCFFF4F01F001B0C9A0A9BD7 +:10B41000E6CCFFF0F01F00180C9A0A9BE6CCFFEC7C +:10B42000F01F00150C9A0A9BE6CCFFE8F01F0012F3 +:10B430000C9A0A9BE6CCFFE4F01F000F0C9A0A9BC3 +:10B44000E6CCFFE0F01F000E0C9A0A9BE6CCFFDE74 +:10B45000F01F000B0C9A0A9BE6CCFFDCF01F0008E3 +:10B460000C990A9AE6CCFFDA302BF01F0004E3CDEA +:10B47000806800008001A37C8001AD988001A2FC5F +:10B48000EBCD4068189316951496F01F00090C9A9E +:10B490000A9BE6CCFFFCF01F00070C990A9AE6CC49 +:10B4A000FFFB303BF01F0004E3CD80688001A37CEC +:10B4B0008001A29C8001AD98EBCD40681695149652 +:10B4C0001893F01F00060C990A9AE6CCFFFC308B0B +:10B4D000F01F0003E3CD80688001A37C8001AD985C +:10B4E000EBCD4068189316951496F01F00090C9A3E +:10B4F0000A9BE6CCFFFCF01F00070C990A9AE6CCE9 +:10B50000FFFB303BF01F0004E3CD80688001A37C8B +:10B510008001A29C8001AD98EBCD406818931695F0 +:10B520001496F01F00100C9A0A9BE6CCFFFCF01F4B +:10B53000000E0C990A9AE6CCFFFB306BF01F000B53 +:10B540000A9AE6CCFFF50C99306BF01F00080C9AB4 +:10B550000A9BE6CCFFEFF01F0004E3CD80680000FB +:10B560008001A37C8001A29C8001AD98EBCD406856 +:10B57000169514961893F01F000C0C990A9AE6CCB5 +:10B58000FFFC306BF01F00090C9A0A9BE6CCFFF61B +:10B59000F01F00070C9A0A9BE6CCFFF5F01F000491 +:10B5A000E3CD80688001A37C8001AD988001A29CDE +:10B5B000EBCD4068169514961893F01F000D0C996A +:10B5C0000A9AE6CCFFFC306BF01F000A0A9AE6CC20 +:10B5D000FFF60C99302BF01F00070C9A0A9BE6CC63 +:10B5E000FFF4F01F0005E3CD806800008001A37C1C +:10B5F0008001AD988001AB3CEBCD40681695149668 +:10B600001893F01F000D0C990A9AE6CCFFFC306BE2 +:10B61000F01F000A0A9AE6CCFFF60C99302BF01FB7 +:10B6200000070C9A0A9BE6CCFFF4F01F0005E3CD5F +:10B63000806800008001A37C8001AD988001AB3C54 +:10B64000EBCD4068169514961893F01F00100C99D6 +:10B650000A9AE6CCFFFC306BF01F000D0C9A0A9B97 +:10B66000E6CCFFF6F01F000B0C9A0A9BE6CCFFF429 +:10B67000F01F00080C990A9AE6CCFFF2302BF01F5D +:10B680000004E3CD806800008001A37C8001AD98B8 +:10B690008001A2FCEBCD4068169514961893F01F1C +:10B6A000000A0C990A9AE6CCFFFC306BF01F0007E9 +:10B6B0000C990A9AE6CCFFF6302BF01F0004E3CD7C +:10B6C000806800008001A37C8001AD98EBCD4068CC +:10B6D000169514961893F01F000A0C990A9AE6CC56 +:10B6E000FFFC306BF01F00070C990A9AE6CCFFF6BE +:10B6F000302BF01F0004E3CD806800008001A37CA4 +:10B700008001AD98EBCD4068189316951496F01F04 +:10B7100000220C9A0A9BE6CCFFFCF01F00200C9A3A +:10B720000A9BE6CCFFFAF01F001D0C9A0A9BE6CCA0 +:10B73000FFF8F01F001A0C990A9AE6CCFFF6306B5E +:10B74000F01F00170C9A0A9BE6CCFFF0F01F0015C3 +:10B750000C9A0A9BE6CCFFEFF01F00120C990A9A94 +:10B76000E6CCFFEE302BF01F000E0C9A0A9BE6CCC5 +:10B77000FFECF01F00090C9A0A9BE6CCFFE8F01FD3 +:10B7800000060C9A0A9BE6CCFFE4F01F0007E3CD0D +:10B79000806800008001A37C8001A2FC8001AD983C +:10B7A0008001A29C8001AB3CEBCD406816951496BD +:10B7B0001893F01F000C0C990A9AE6CCFFFC306B32 +:10B7C000F01F00090C9A0A9BE6CCFFF6F01F000759 +:10B7D0000C9A0A9BE6CCFFF5F01F0004E3CD8068CD +:10B7E0008001A37C8001AD988001A29CEBCD4068D4 +:10B7F000169514961893F01F000C0C990A9AE6CC33 +:10B80000FFFC306BF01F00090C9A0A9BE6CCFFF698 +:10B81000F01F00070C9A0A9BE6CCFFF5F01F00040E +:10B82000E3CD80688001A37C8001AD988001A29C5B +:10B83000EBCD4068189316951496F01F00120C9AE1 +:10B840000A9BE6CCFFFCF01F00100C9A0A9BE6CC8A +:10B85000FFFAF01F000D0C9A0A9BE6CCFFF8F01FD0 +:10B86000000A0A9AE6CCFFF60C99306BF01F00072D +:10B870000C9A0A9BE6CCFFF0F01F0005E3CD806830 +:10B880008001A37C8001A2FC8001AD988001AB3CCB +:10B89000EBCD4068189316951496F01F00100C9A83 +:10B8A0000A9BE6CCFFFCF01F000E0C9A0A9BE6CC2C +:10B8B000FFFAF01F000B0C990A9AE6CCFFF8306BE8 +:10B8C000F01F00080C990A9AE6CCFFF2302BF01F0B +:10B8D0000005E3CD806800008001A37C8001A2FC0C +:10B8E0008001AD98EBCD4068189316951496F01F23 +:10B8F00000090C9A0A9BE6CCFFFFF01F00060C998A +:10B900000A9AE6CCFFFE302BF01F0003E3CD8068DF +:10B910008001A29C8001AD98EBCD406816951496ED +:10B920001893F01F00130C990A9AE6CCFFFF306BB6 +:10B93000F01F00100C9A0A9BE6CCFFF9F01F000CD8 +:10B940000C9A0A9BE6CCFFF8F01F00090A9AE6CC95 +:10B95000FFF70C99306BF01F00070C9A0A9BE6CC9E +:10B96000FFF1F01F0003E3CD806800008001A29C7E +:10B970008001AD98EBCD4068189316951496F01F92 +:10B9800000060C9A0A9BE6CCFFFCF01F0004E3CDF6 +:10B99000806800008001A37C8001B918EBCD40686D +:10B9A0001696149518931499169A306BF01F000888 +:10B9B0000A9A0C9BE6CCFFFAF01F00060A9A0C9B31 +:10B9C000E6CCFFF9F01F0003E3CD80688001AD985D +:10B9D0008001A29CEBCD4068189316951496F01F39 +:10B9E00000060C9A0A9BE6CCFFFCF01F0004E3CD96 +:10B9F000806800008001A37C8001B99CEBCD406889 +:10BA0000189316951496F01F00090C9A0A9BE6CC21 +:10BA1000FFFFF01F00060C990A9AE6CCFFFE306B80 +:10BA2000F01F0003E3CD80688001A29C8001AD98E7 +:10BA3000EBCD4068189316951496F01F00060C9AEB +:10BA40000A9BE6CCFFFCF01F0004E3CD80680000F9 +:10BA50008001A37C8001B9FCD4011499169A308B23 +:10BA6000F01F0002D80200008001AD98EBCD4068C5 +:10BA7000169514961893F01F00090A9AE6CCFFFC5D +:10BA80000C99306BF01F00060C9A0A9BE6CCFFF66F +:10BA9000F01F0004E3CD80688001A37C8001AD9895 +:10BAA0008001A2FCEBCD4068189316951496F01F08 +:10BAB00000090C9A0A9BE6CCFFFCF01F00070C99CA +:10BAC0000A9AE6CCFFFB303BF01F0004E3CD806810 +:10BAD0008001A37C8001A29C8001AD98D4011499BF +:10BAE000169A320BF01F0002D80200008001AD98B8 +:10BAF000EBCD4068189316951496F01F00180C9A19 +:10BB00000A9BE6CCFFE0F01F00160C9A0A9BE6CCDD +:10BB1000FFDEF01F00140C9A0A9BE6CCFFDDF01F3D +:10BB200000110C990A9AE6CCFFDC306BF01F000E76 +:10BB30000C9A0A9BE6CCFFD6F01F000C0C9A0A9BCD +:10BB4000E6CCFFCEF01F00070C9A0A9BE6CCFFCD97 +:10BB5000F01F0004E3CD80688001BADC8001A2FC04 +:10BB60008001A29C8001AD988001BA58EBCD40685D +:10BB7000189316951496F01F00060C9A0A9BE6CCB3 +:10BB8000FFFCF01F0004E3CD806800008001A37C6F +:10BB90008001BAF0D4011499169A303BF01F0002CC +:10BBA000D80200008001AD98EBCD40E018971695C3 +:10BBB0001496F01F000D6E1C580CC0800C990A9A48 +:10BBC0006E0BF01F000AE3CD80E05816C0918A99F1 +:10BBD0006A4812088F186E098A181208AA18E3CD4D +:10BBE00080E000008001A37C8001AD98EBCD40682F +:10BBF000189316951496F01F00060C9A0A9BE6CC33 +:10BC0000FFFCF01F0004E3CD806800008001A37CEE +:10BC10008001BBA8EBCD4068189316951496F01FD1 +:10BC200000100C9A0A9BE6CCFFFCF01F000E0C994A +:10BC30000A9AE6CCFFFB303BF01F000B0A9AE6CCD9 +:10BC4000FFF80C99308BF01F00080C9A0A9BE6CC89 +:10BC5000FFF0F01F0006E3CD806800008001A37CA8 +:10BC60008001A29C8001AD988001BBA8EBCD40680B +:10BC7000169514961893F01F00090A9AE6CCFFFC5B +:10BC80000C99308BF01F00060C9A0A9BE6CCFFF44F +:10BC9000F01F0004E3CD80688001A37C8001AD9893 +:10BCA0008001BBA8EBCD40801697189B580AC0F1C5 +:10BCB0008E1C8E89FDDCC010FCC8FFF91238C285CD +:10BCC000F8C8FFF88F3AAE18E3CD8080581AC070DC +:10BCD0008E1CF8C8FFF8AE18E3CD80808E9A8E894E +:10BCE000F4C8FFF91238C2C46E48140811F9B889B3 +:10BCF00011EAB89A11D9B8A911CAB8BA11B9B8C914 +:10BD000011AAB8DA1199B8E9118AB8FACE2B17F846 +:10BD10006E4A1C0AB48817E9B49917D8B4A817C991 +:10BD2000B4B917B8B4C817A9B4D91798B4E8178923 +:10BD3000B4F98E1CF8C8FFF8AE18E3CD8080300B44 +:10BD4000308A8F3BF01F00028E1CCC4B800091D0BC +:10BD5000EBCD4068189316951496F01F000C0C9AC2 +:10BD60000A9BE6CCFFF8F01F000A0C9A0A9BE6CC6F +:10BD7000FFF6F01F00070C9A0A9BE6CCFFF4F01FB9 +:10BD80000005E3CD806800008001BCA48001A2FC16 +:10BD90008001AB3CEBCD40F8206D169714961499BA +:10BDA0001895169A306BF01F002D0C9A0E9BEACC5A +:10BDB000FFFAF01F002B0C9A0E9BEACCFFF9F01F44 +:10BDC00000280C9A0E9BEACCFFF8F01F00260C9A74 +:10BDD0000E9BEACCFFF0F01F00240C9A0E9BEACCDD +:10BDE000FFECF01F0021318A0E9B1A9CF01F001FF0 +:10BDF000EAC3FFE81A940C9A1A9B069CF01F001ADB +:10BE00005816C1801A9B0C9A6A7CF01F00199A98E8 +:10BE10008E992048F00901098B690C9A069C0E9BAB +:10BE2000F01F00116A698E181208AE182FADE3CD0D +:10BE300080F86A698E182FC81208E06B00E8BA080B +:10BE40006E5CF01F000C8B7CCF20505C1A9B0C9A10 +:10BE5000F01F0007CE3B00008001AD988001A29C3E +:10BE60008001BCA48001A37C800091DC8001BD50D6 +:10BE70008001D3ECEBCD4068189316951496F01F13 +:10BE800000120C9A0A9BE6CCFFFCF01F00100C9AE3 +:10BE90000A9BE6CCFFFAF01F000D0C9A0A9BE6CC39 +:10BEA000FFF8F01F00090C9A0A9BE6CCFFF4F01F84 +:10BEB00000060C9A0A9BE6CCFFF0F01F0005E3CDCC +:10BEC000806800008001A37C8001A2FC8001BD94F9 +:10BED000EBCD40E0189716951496F01F000B0C9AC6 +:10BEE0000A9BEECCFFFCF01F00090FD93008F009C7 +:10BEF0001800C0700C9A0A9BEECCFFF8F01F0004EB +:10BF0000E3CD80E08001A37C8001B8E48001BD9492 +:10BF1000EBCD4060202D301A18951696FACCFFFE16 +:10BF2000F01F00089A181BF92FE8F0090109AC0965 +:10BF30001BCA8B5A1BD88B482FEDE3CD80600000C5 +:10BF40008001A444EBCD40E07808975818971696E6 +:10BF50007859E049003FE0880004E3CF80E0FEF834 +:10BF6000029AF009032F78455815E0800127E04533 +:10BF70000080CF41780C301AF01F00A1E3CF90E091 +:10BF800078485808C391780C301AF01F009EE3CF10 +:10BF900090E07848F0C90005E049008FFE9BFFDF84 +:10BFA000FEF80264F009032F7848E0480081E08041 +:10BFB000010CE08A002BE0480083E0800118E08556 +:10BFC0000110E0480085CCA1780C301AF01F008FDA +:10BFD000E3CF90E0780C301AF01F008DE3CF90E0B3 +:10BFE0007848F0C90001E049009BFE9BFFB8FEF8CD +:10BFF0000222F009032FE0480081CB01780C301AAF +:10C00000F01F0085E3CF90E05848E08000E4E0486E +:10C010000080CA41781A300B780CF01F00806E0C3B +:10C020000C9B301AF01F007EE3CF90E0780C301AA2 +:10C03000F01F007CE3CF90E0780C301AF01F007AFC +:10C04000E3CF90E0780C301AF01F0078E3CF90E057 +:10C05000780C301AF01F0076E3CF90E0780C301A9D +:10C06000F01F0074E3CF90E0780C301AF01F0072DC +:10C07000E3CF90E0780C301AF01F0070E3CF90E02F +:10C08000780C301AF01F006EE3CF90E0780C301A75 +:10C09000F01F006CE3CF90E0780C301AF01F006ABC +:10C0A000E3CF90E0780C301AF01F0068E3CF90E007 +:10C0B000780C301AF01F0066E3CF90E0780C301A4D +:10C0C000F01F0064E3CF90E0780C301AF01F00629C +:10C0D000E3CF90E0780C301AF01F0060E3CF90E0DF +:10C0E000780C301AF01F005EE3CF90E0780C301A25 +:10C0F000F01F005CE3CF90E0780C301AF01F005A7C +:10C10000E3CF90E0780C301AF01F0058E3CF90E0B6 +:10C11000780C301AF01F0056E3CF90E0780C301AFC +:10C12000F01F0054E3CF90E0780C301AF01F00525B +:10C13000E3CF90E0780C301AF01F0050E3CF90E08E +:10C14000780C301AF01F004EE3CF90E0780C301AD4 +:10C15000F01F004CE3CF90E0780C301AF01F004A3B +:10C16000E3CF90E0780C301AF01F0048E3CF90E066 +:10C17000780C301AF01F0046E3CF90E0780C301AAC +:10C18000F01F0044E3CF90E0780C301AF01F00421B +:10C19000E3CF90E0780C301AF01F0040E3CF90E03E +:10C1A000780C301AF01F003EE3CF90E0780C301A84 +:10C1B000F01F003CE3CF90E0780C0A9AF01F003AA1 +:10C1C0000A9CE3CD80E0780C301AF01F0038E3CFF2 +:10C1D00090E0780C301AF01F0036E3CF90E0780C36 +:10C1E000301AF01F0034E3CF90E0780C301AF01FC3 +:10C1F0000032E3CF90E000008003B8288001AAEC71 +:10C200008001A4988003B9288001B3248001A37C15 +:10C210008003BB688001A4CC800091D08001BC1455 +:10C220008001BAA48001A4748001BA6C8001AC546E +:10C230008001AA808001AE8C8001AAC88001AAA4D6 +:10C240008001AA208001AF5C8001A9CC8001A9787F +:10C250008001A9488001A8F48001A8D08001A884A9 +:10C260008001A8608001B1548001B1B08001B1F4B7 +:10C270008001A8188001AA508001B0F88001A83C74 +:10C280008001A7F48001B4E08001B56C8001B5B0F5 +:10C290008001B5F88001B6408001BED08001B5189C +:10C2A0008001B9748001AE3C8001B3AC8001A6145A +:10C2B0008001B3688001B2E0EBCD40C012971499C1 +:10C2C0008E96109A582CC280E08A0008584CC360A1 +:10C2D000587CC190E3CF80C0580CC0A0581CCFB18F +:10C2E00058EBFE9BFFF9FEF80312F00B032F580BDF +:10C2F000CF21129C0E9BF01F00C28E98F006010CFD +:10C30000E3CD80C0202BE04B007FFE9BFFE5FEF8D5 +:10C3100002F2F00B032F582BE080015DE089001A38 +:10C32000580BC260581BCD71129C0E9BF01F00B6BB +:10C330008E98F006010CE3CD80C0580BCCC1129C46 +:10C340000E9BF01F00B28E98F006010CE3CD80C06A +:10C35000584BC170E0850148585BCBD1129C0E9BB5 +:10C36000F01F00AB8E98F006010CE3CD80C0129C4C +:10C370000E9BF01F00A88E98F006010CE3CD80C044 +:10C38000129C0E9BF01F00A48E98F006010CE3CDCA +:10C3900080C0129C0E9BF01F00A18E98F006010C2D +:10C3A000E3CD80C0129C0E9BF01F009D8E98F0067E +:10C3B000010CE3CD80C0129C0E9BF01F009A8E985A +:10C3C000F006010CE3CD80C0129C0E9BF01F00967E +:10C3D0008E98F006010CE3CD80C0129C0E9BF01FDE +:10C3E00000938E98F006010CE3CD80C0129C0E9B4A +:10C3F000F01F008F8E98F006010CE3CD80C0129CD8 +:10C400000E9BF01F008C8E98F006010CE3CD80C0CF +:10C41000129C0E9BF01F00888E98F006010CE3CD55 +:10C4200080C0129C0E9BF01F00858E98F006010CB8 +:10C43000E3CD80C0129C0E9BF01F00818E98F00609 +:10C44000010CE3CD80C0129C0E9BF01F007E8E98E5 +:10C45000F006010CE3CD80C0129C0E9BF01F007A09 +:10C460008E98F006010CE3CD80C0129C0E9BF01F4D +:10C4700000778E98F006010CE3CD80C0129C0E9BD5 +:10C48000F01F00738E98F006010CE3CD80C0129C63 +:10C490000E9BF01F00708E98F006010CE3CD80C05B +:10C4A000129C0E9BF01F006C8E98F006010CE3CDE1 +:10C4B00080C0129C0E9BF01F00698E98F006010C44 +:10C4C000E3CD80C0129C0E9BF01F00658E98F00695 +:10C4D000010CE3CD80C0129C0E9BF01F00628E9871 +:10C4E000F006010CE3CD80C0129C0E9BF01F005E95 +:10C4F0008E98F006010CE3CD80C0129C0E9BF01FBD +:10C50000005B8E98F006010CE3CD80C0129C0E9B60 +:10C51000F01F00578E98F006010CE3CD80C0129CEE +:10C520000E9BF01F00548E98F006010CE3CD80C0E6 +:10C53000129C0E9BF01F00508E98F006010CE3CD6C +:10C5400080C0129C0E9BF01F004D8E98F006010CCF +:10C55000E3CD80C0129C0E9BF01F00498E98F00620 +:10C56000010CE3CD80C0129C0E9BF01F00468E98FC +:10C57000F006010CE3CD80C0129C0E9BF01F004220 +:10C580008E98F006010CE3CD80C0129C0E9BF01F2C +:10C59000003F8E98F006010CE3CD80C0129C0E9BEC +:10C5A000F01F003B8E98F006010CE3CD80C0129C7A +:10C5B0000E9BF01F00388E98F006010CE3CD80C072 +:10C5C000129C0E9BF01F00348E98F006010CE3CDF8 +:10C5D00080C0129C0E9BF01F00318E98F006010C5B +:10C5E000E3CD80C0129C0E9BF01F002D8E98F006AC +:10C5F000010CE3CD80C000008003BDD88001A49869 +:10C600008003BE148001BC6C8001AE648001A5C0B3 +:10C610008001B4B88001A5F08001B8308001B29CDF +:10C620008001B6948001B6CC8001B9D48001BA30C3 +:10C630008001BB6C8001B7048001B7EC8001BA6C4B +:10C640008001B8908001BE748001A5188001A55CAE +:10C650008001B7A88001A7308001A7888001AE8C37 +:10C660008001AED88001A7D08001AB148001AF1843 +:10C670008001A9FC8001A9A88001AFD48001A92470 +:10C680008001B08C8001A8A88001B22C8001A7ACE9 +:10C690008001B2648001BBEC8001B4808001B3E40E +:10C6A000EBCD40FE208D306A18977853784578019D +:10C6B000FAC2FFE6300B049CF01F00384B88F139BA +:10C6C000010BE06AFFFFFB69001E300B1A9CF01F94 +:10C6D0000035302A1A9B049CF01F0033029A302840 +:10C6E0001A990A9B069CF01F00319A194B08F9D938 +:10C6F000C0101188103CF9B60200F1DCE318E06AC2 +:10C7000000FFF1DAE326EDD9E309FBF93C01F9D6A4 +:10C71000E30C1A944A78118A580AC060F4C80001E0 +:10C72000F9E80008C2918F3CF01F00238F2CC31042 +:10C730006E3A300BF01F0019FB66001F6E2BFB6377 +:10C74000001CFB65001D8E78F5D8C01020281A9CAF +:10C75000FB58001AF01F0013049C1A9B300AF01FAC +:10C7600000121A99029A0A9B069C3008F01F000FCB +:10C770002F8DE3CF90FE9A18F4C90001F9E9000962 +:10C78000F40901095C591208120CBA181206CCCB34 +:10C790002F8DE3CD80FE0000800091D0000087F453 +:10C7A0008001C7B88001A4448001C2B8000079E5C7 +:10C7B000000079E48000920030083019B838B818C9 +:10C7C000B828B80A3008994B993999285EFCD703E4 +:10C7D000EBCD4068189316951496F01F00090C9A3B +:10C7E0000A9BE6CCFFFFF01F00060C9A0A9BE6CCE2 +:10C7F000FFFEF01F0004E3CD806800008001A29CD2 +:10C800008001A2FCEBCD40681696149518931499FC +:10C81000169A303BF01F00050A9A0C9BE6CCFFFDF0 +:10C82000F01F0003E3CD80688001AD988001A29CD9 +:10C83000EBCD40681696149518931499169A303BD0 +:10C84000F01F00050A9A0C9BE6CCFFFDF01F0003C9 +:10C85000E3CD80688001AD988001A29CD431FACEEE +:10C86000FFDC189616971494129210907C157C0198 +:10C87000581AC2D0C153582AC1300D893FF8F00967 +:10C880001800C2100D98E2081900E08B0005E008BE +:10C890001900C6E23FF83009AC88AC99D83A8E1836 +:10C8A000AE383FF80D89F0091800C0D00C9C089AEA +:10C8B0000E9BF01F0034089A0E9BECCCFFFFF01F7C +:10C8C0000031CDCB3008300CAC98D83296285808BF +:10C8D000C4C0B618AE3830088B08AC983FFAAC8AA2 +:10C8E0008E198E08F2081900FE98FFEE1494ECC31E +:10C8F000FFFFC1D8E8081800EDF41E000D9A8E184D +:10C900008E89F408000B5C781019123AE089002631 +:10C91000AE1B6A082FF88B080D89E8091800CB3187 +:10C920008E198E08F2081900FE98FFCEAE39301A23 +:10C930000E9B0C9CF01F0013301A0E9B069CF01FE0 +:10C9400000110D88E4081800CD618E888E990D9A2B +:10C950001218103AE08A000E3FF83009AC88AC9902 +:10C960008E182028AE08C8AB9618B628CB4BDA3AFA +:10C970006A0A6E293018F00A094810498F29C7EB56 +:10C980008001A29CEBCD4040201D1A9E9AF65C7857 +:10C990001ADE1AD6F01F00032FED2FFDE3CD8040E5 +:10C9A0008001C85CEBCD40E0302818951AD8169667 +:10C9B00014973069F01F00072FFD580CC0700E9AB5 +:10C9C0000C9BEACCFFFEF01F0004E3CD80E00000EA +:10C9D0008001C9848001A2FCEBCD40E0301818959D +:10C9E0001AD81696149732A9F01F00072FFD580C7D +:10C9F000C0700E9A0C9BEACCFFFEF01F0004E3CD42 +:10CA000080E000008001C9848001A29CEBCD40E061 +:10CA1000305818951AD8169614973029F01F001020 +:10CA20002FFD580CC190EACCFFFE0E9A0C9BF01F14 +:10CA3000000D0E9A0C9BEACCFFFCF01F000B0E9A27 +:10CA40000C9BEACCFFFBF01F00080E9A0C9BEACC73 +:10CA5000FFFAF01F0005E3CD80E000008001C984EB +:10CA60008001A2FC8001A29CEBCD40E0301818951B +:10CA70001AD8169614973039F01F00072FFD580C5E +:10CA8000C0700E9A0C9BEACCFFFEF01F0004E3CDB1 +:10CA900080E000008001C9848001A29CEBCD40E0D1 +:10CAA000306818951AD8169614973049F01F001060 +:10CAB0002FFD580CC190EACCFFFE0E9A0C9BF01F84 +:10CAC000000D0E9A0C9BEACCFFFDF01F000A0E9A97 +:10CAD0000C9BEACCFFFCF01F00080E9A0C9BEACCE2 +:10CAE000FFFAF01F0005E3CD80E000008001C9845B +:10CAF0008001A29C8001A2FCEBCD40E0301818958B +:10CB00001AD81696149730A9F01F00072FFD580C5D +:10CB1000C0700E9A0C9BEACCFFFEF01F0004E3CD20 +:10CB200080E000008001C9848001A29CD43120BD36 +:10CB30005019500818961697581AC390C272E06898 +:10CB400000FDE06900DD1AD8300A3018F01F005CE3 +:10CB50002FFD580CC1E0300A0E9BECCCFFFEF01FFD +:10CB60000059300A0E9BECCCFFFDF01F0056300A36 +:10CB70000E9BECCCFFFCF01F0053ECCCFFFB0E9B9C +:10CB8000300AF01F0050301CC048582AC040301CEA +:10CB90002F5DD83219893FF8F0091800E080008B2A +:10CBA0009618301C2FA8B6182F5DD832761850581A +:10CBB000B1485038760A504AF6E80008F8C2FFFE3D +:10CBC000FAE90018F8C3FFFDF6EA0010F8C9FFFB08 +:10CBD000FAEB0020F8C4FFFC50293FF5FAC0FFD85B +:10CBE000E06100FDC0680D998E382FE81208AE286C +:10CBF0001AD030181AD1E06900DD109A0E9B0C9CF7 +:10CC0000F01F00312FED580CC4105805FBF5500AE9 +:10CC1000FBF8400AF9B90401F1D9E408EBD8E405BE +:10CC2000301A0E9B049CF01F0027301A0E9B069CA6 +:10CC3000F01F0024301A0E9B089CF01F00220DA844 +:10CC40003009F2081800CD010DB83509F2081800B6 +:10CC5000CCB10DC83F29F2081800CC61301A0E9BE8 +:10CC6000402CF01F00180DD84019F2081800CBC155 +:10CC70004038301CAE28F80509496E2812488F2824 +:10CC800040095809C8509305C84B4038FB58001458 +:10CC9000FAE80020EEE90010FAEA0010EEEB0000DE +:10CCA000FAE80018EEE90008AC9C3FF8AC882F5D6C +:10CCB000D8323008B898300CC6CB00008001C98447 +:10CCC0008001A29C8001C85CD431207D1895169704 +:10CCD00014961293581AC110C0B2300830290C9A19 +:10CCE0000E9B0A9CF01F0032C5712F9DD832582A26 +:10CCF000CF50301C2F9DD83276185018760AF0008D +:10CD00001410500A1A91F6E80008F8C4FFFAFAE97C +:10CD100000083FF6F6EA0010FAC2FFE8FAEB00104E +:10CD2000C1A85806FBF65006FBF84006F9B9040105 +:10CD3000F1D9E408EDD8E406301A0E9B089CF01FE8 +:10CD4000001D0BE8E6081800C1D00B998E382FE8BB +:10CD50001208AE2804983029301A0E9B0A9CF01F46 +:10CD60000014CE01BA20E2E80010EEE90010E2E87B +:10CD70000000EEE90000E2EA0008EEEB00082F9D5B +:10CD8000D83230186E29F006094AAE201449109C9A +:10CD90008F292F9DD8320B982FF8EACCFFFA0C9AE6 +:10CDA0000E9BAA98F01F0003301CCA5B8001CB2C9D +:10CDB0008001A29CEBCD40EC206D301918971693A2 +:10CDC0001495F01F002DC0412FADE3CD80ECEECCCB +:10CDD000FFF90A9A069BF01F00290A9A069BEECCDF +:10CDE000FFF8F01F00260A9A069BEECCFFF7F01F13 +:10CDF00000230A9A069BEECCFFF6F01F00210A9A48 +:10CE0000069BEECCFFF2F01F001E0A9A069BEECCAA +:10CE1000FFEEF01F001B0A9A069BEECCFFEAF01F04 +:10CE2000001858055F0858255F091248CCE06608CD +:10CE30005008661886160A9A5018EBD8B010BA1522 +:10CE4000E6E80008FAE900082026E6E20010E068BB +:10CE500000FD0A16AE961A9BFAE300100E9C1AD833 +:10CE6000E06900DD3018F01F00072FFD2FADE3CD86 +:10CE700080EC00008001CCC88001A29C8001C7D05A +:10CE80008001C984EBCD40EC206D18971693149562 +:10CE9000582AC18119893FF8F0091800F9F91801D9 +:10CEA000F7F81201F9BA0102F1DAE108F1D9E10863 +:10CEB000F7F81C01F9B80000F9F80E012FADE3CD29 +:10CEC00080EC3009F01F0019CFA0EECCFFF90A9AD0 +:10CED000069BF01F00170A9A069BEECCFFF8F01F86 +:10CEE00000145805CEC166085008661886160A9ABE +:10CEF0005018EBD8B010BA15E6E80008FAE90008B7 +:10CF00002026E6E20010E06800FD0A16AE961A9BA5 +:10CF1000FAE300100E9C1AD8E06900DD3018F01F0B +:10CF200000052FFDCCCB00008001CCC88001A29C65 +:10CF30008001C984D42112951497580A5F095805B5 +:10CF40005F08169A1248C2510B986E29F0C4FFFE72 +:10CF5000F2C800015BD8E08B0015129C089B5D1A9B +:10CF600018965806C0C06E086E192FF80809089A5E +:10CF70000A9B8F088F190C9CF01F00080C9CD8226C +:10CF8000089B5D1A300818968F2C8F188F08CEAB2F +:10CF900030060C9CD8220000800091DCEBCD40FCD8 +:10CFA00012951494580A5F0958055F0818921248A0 +:10CFB0001693C191300995296A085808E08A00162D +:10CFC00012966A270E99089A069B049CF01F000B84 +:10CFD0002FF6EEF7FFF86A085807F7B701F80C3894 +:10CFE000FE99FFF2E3CD80FCEAE80000F4E90000DE +:10CFF0006A2A892AE3CD80FC8001CF34EBCD40FC46 +:10D0000018931695581AC2C0C053582AC5E0E3CDEC +:10D0100080FC782778085808FE9AFFFB7819580991 +:10D02000FE9AFFF79698300612087649F208000437 +:10D030000F9A0E9B2FEA1414089CF01F00332FF652 +:10D04000EEF7FFF866085807F7B701F80C38FE99B5 +:10D05000FFF166198A181208AA18E3CD80FC9628F9 +:10D060005808C3C0B618F9D8B010AA3C300830121E +:10D0700087088718872810948A1C8A0E189AFC0C37 +:10D080001900C212F7DAC0106A46EC0B00081199B9 +:10D09000F2C7FFFE5827C250F1DEC0101618103735 +:10D0A000E0890020E40409496A2B2FF4F3EB00081F +:10D0B000C1C0F4070008AA18F9D8B010189AFC0CDF +:10D0C0001900CE13E3CD80FC781C580CFE9AFFA10A +:10D0D00096181808B618E3CD80FC961CB62CCC6BBD +:10D0E000AA0CFDDCB010CCBBF3EB1008069A8A99B1 +:10D0F0008B28EC090009485B6A5CF01F00058A1A5E +:10D100008A0ECD8B800091DC8001D3EC8001CF347E +:10D11000EBCD40F83FF510941697149340661388B2 +:10D12000EA081800C05130070E9CE3CD80F858047F +:10D130005F1858065F991268CF700C9B5D1718979F +:10D14000C0600C9A089BF01F0004CEFBA685A69C2D +:10D15000CECB0000800091DCEBCD40C0129EF2E807 +:10D160000000F4E9000014977C2A8F2A18961D8984 +:10D17000169C3FF8F0091800C1401D993058F0097D +:10D180001800E088000F2039E06A5556EA1A555514 +:10D19000F20B141FF20A04481619F2090019C028EC +:10D1A00030091AD9189B1C990C9C7C280E9AF01FE8 +:10D1B00000042FFD8F2CE3CD80C000008001D11032 +:10D1C000EBCD406CF2E20000F4E3000072289528F9 +:10D1D0001495722813961AD6F01F00032FFD8B2C7E +:10D1E000E3CD806C8001D110EBCD406FF2E2000006 +:10D1F000F4E30000F2E00008F4E10008F2E20010BD +:10D20000F4E300101495725813961AD6F01F000319 +:10D210002FFD8B5CE3CD806F8001D110EBCD406F93 +:10D22000F2E20000F4E30000F2E00008F4E100089C +:10D23000724895481495724813961AD6F01F000349 +:10D240002FFD8B4CE3CD806F8001D110EBCD406C76 +:10D25000F2E20000F4E30000722895281495722889 +:10D2600013961AD6F01F00032FFD8B2CE3CD806C94 +:10D270008001D110D421310418971AD41696149530 +:10D2800030183329F01F00142FFD580CC0B058057A +:10D29000C0E18C986C4C0F9A100CEECBFFFEF01F87 +:10D2A000000F0F998C181208AC18D8225815CFA16E +:10D2B0000F9AE80A1800E08800073FF83009AE88A6 +:10D2C000AE99CF0B8C986C4BEECCFFFE100BF01F81 +:10D2D0000003CE8B8001C984800091DCD4213018FA +:10D2E000189716961495308410991AD4F01F0014CC +:10D2F0002FFD580CC0B05805C0E18C986C4C0F9AAB +:10D30000100CEECBFFFEF01F000F0F998C181208C7 +:10D31000AC18D8225815CFA10F9AE80A1800E08857 +:10D3200000073FF83009AE88AE99CF0B8C986C4B54 +:10D33000EECCFFFE100BF01F0003CE8B8001C984E2 +:10D34000800091DCEBCD40E0320930081AD9189505 +:10D35000169714961099F01F00132FFD580CC0F06B +:10D360005806C0F18E986E4C0B9A100CEACBFFFE5B +:10D37000F01F000D0B998E181208AE18E3CD80E057 +:10D380005816CF918E986E4B0B9A100BEACCFFFE7D +:10D39000F01F00050B998E181208AE18CF0B000075 +:10D3A0008001C984800091ACD421201D7809189691 +:10D3B000F2C800015BD8E08B0014F2C80008C0E09E +:10D3C0001A943005C0280E98500870079105680C13 +:10D3D000F01F00068D055807CF712FFDD8223008A9 +:10D3E00099082FFDD8220000800091E8EBCD40C0C5 +:10D3F00018971696F6CCFFF8F01F000DC130EEF826 +:10D40000FFF8EEC900089908F8C7FFF8930C9916C1 +:10D410000C9AE06B00FF0E9CF01F00060E9CE3CD03 +:10D4200080C018970E9CE3CD80C000008000920061 +:10D43000800091D0EBCD40FC32E818931AD81692B8 +:10D44000149430683079F01F00232FFD580CC03140 +:10D45000E3CD80FC089A049BE6CCFFFEF01F001E83 +:10D4600007993058F0091800E088001F2039E06A59 +:10D470005556EA1A5555F20B141FF20A0448F20BDE +:10D4800001055814C18030060C972FF6662C0899B8 +:10D490000E0C049A2FD7303BF01F00100C35FE996C +:10D4A000FFF6E3CD80FC5814F9B80000E7F80A0253 +:10D4B000E3CD80FCEA050017645C0E9BF01F0008BA +:10D4C000872CCC700E9A300BF01F0006CDDB0000CD +:10D4D0008001C9848001BB948001AD988001D3ECA8 +:10D4E000800091D0D421189616951497582AC161BE +:10D4F00019893FF8F0091800F9F91801F7F8120135 +:10D50000F9BA0102F1DAE108F1D9E108F7F81C01F2 +:10D51000F9B80000F9F80E01D82230083049F01FA0 +:10D52000000CC0C00D98F0C400045817C0800E99BC +:10D530000A9A089B6C2CF01F0007D822089B6A5C93 +:10D54000F01F00058D2CCF41CF9B00008001CB2C1C +:10D550008001AD988001D3ECEBCD40FC206D189498 +:10D5600016951493582AC18119893FF8F0091800BB +:10D57000F9F91801F7F81201F9BA0102F1DAE10834 +:10D58000F1D9E108F7F81C01F9B80000F9F80E012B +:10D590002FADE3CD80FC30083019F01F0040CF9054 +:10D5A0006A1E501E6A0A500AEAE80008FAE90008F2 +:10D5B000EAEA0010FAEB0010EDDEB0105813C600D6 +:10D5C000E8C7FFFA0999ECC8FFFE12080E9CE5D8DF +:10D5D000B010069A0A9BF01F00328A18E40819005E +:10D5E000CD82069A0A9BE8CCFFF8F01F002E8A181D +:10D5F000E4081900CCE2E8CCFFF4069A0A9BF01F7D +:10D600000028685C88693008F0091900C0E01896A5 +:10D6100030070C9C2FF7069A0A9BF01F00222FC69A +:10D6200088E80E38FE99FFF78A18E4081900CB1233 +:10D63000069AE8CCFFF20A9BF01F0019685888E9A7 +:10D64000887AF009002C3008F00A1900C0E018961A +:10D6500030070C9C2FF7069A0A9BF01F00132FC669 +:10D6600088F80E38FE99FFF78A18E4081900C912E5 +:10D67000069A0A9BE8CCFFF0F01F0009C8ABE8C788 +:10D68000FFFA30EA300B0E9CF01F0008099B6A5C21 +:10D69000F01F0007895CC97B8001CB2C8001A2FCB4 +:10D6A0008001C8308001C804800091D08001D3EC93 +:10D6B000EBCD40FC206D189416951493582AC18127 +:10D6C00019893FF8F0091800F9F91801F7F8120163 +:10D6D000F9BA0102F1DAE108F1D9E108F7F81C0121 +:10D6E000F9B80000F9F80E012FADE3CD80FCE06839 +:10D6F00000FF33091AD83008F01F00532FFD580CD3 +:10D70000CF406A1E501E6A0A500AEAE80008FAE989 +:10D710000008EAEA0010FAEB0010EDDEB010581332 +:10D72000E0800085E8C7FFFE0999ECC8FFFE1208FB +:10D730000E9CE5D8B010069A0A9BF01F00448A1888 +:10D74000E4081900CD22069A0A9BE8CCFFFCF01FE2 +:10D7500000408A18E4081900CC82E8CCFFF8069A49 +:10D760000A9BF01F003A684C88493008F0091900FC +:10D77000C0E0189630070C9C2FF7069A0A9BF01F02 +:10D7800000342FC688C80E38FE99FFF78A18E408BF +:10D790001900CAB2069AE8CCFFF60A9BF01F002BCC +:10D7A000684888C9885AF009002C3008F00A190026 +:10D7B000C0E0189630070C9C2FF7069A0A9BF01FC2 +:10D7C00000252FC688D80E38FE99FFF78A18E4087E +:10D7D0001900C8B2069A0A9BE8CCFFF4F01F001BA0 +:10D7E0008A18E4081900C812069AE8CCFFF20A9BCE +:10D7F000F01F001688C988D81208684A8879F4088A +:10D80000002C3008F0091900FE90FF7018963007C0 +:10D810000C9C2FF706990A9A310BF01F000F2F0668 +:10D8200088F80E38FE99FFF6C60BE8C7FFFE30EA0F +:10D83000300B0E9CF01F0009099B6A5CF01F00086A +:10D84000894CC73B8001C9848001A2FC8001C8309B +:10D850008001C8048001AD98800091D08001D3EC94 +:10D86000EBCD40E0E06800FE18971AD816951496A4 +:10D8700030483059F01F00162FFD580CC031E3CD51 +:10D8800080E0EECCFFFE0C9A0A9BF01F00120C9A6F +:10D890000A9BEECCFFFDF01F000F0C9A0A9BEECC0A +:10D8A000FFFCF01F000C5816C0A00F9B0C990A9AA1 +:10D8B0006E2C203BF01F0008E3CD80E00F9B6A5CDC +:10D8C000203BF01F00068F2CCF11CDAB8001C98407 +:10D8D0008001A29C8001AD988001D3ECEBCD40E0AB +:10D8E00018951696F6CCFFF8F01F000CC12099167B +:10D8F00030089908F8C7FFF80C9A5805EBF71A0595 +:10D90000E06B00FF0E9CF01F00060E9CE3CD80E054 +:10D9100018970E9CE3CD80E080009200800091D0AB +:10D92000EBCD40C0201DF8C60008300C6C1BF01F6A +:10D930000014C1A0500C3007C1286C1B400CF01F14 +:10D9400000111897C1406C1AECCBFFF8EF4AFFFCAE +:10D950000E9CF01F000D6C065806C0505807CEE113 +:10D960004007CF2B400C2FFDE3CD80C01A9CF01F49 +:10D9700000070E9C2FFDE3CD80C000008001D8DCA5 +:10D980008001D3EC800091DC8001D3A8D401E06851 +:10D990000081301999489959189A7408129C11CE2F +:10D9A000F20E18005F089708D802D703486830398C +:10D9B000F0FA00F830089569985BF00B19005F0CDD +:10D9C0005EFC0000000087F419C8300A4869F2F9CB +:10D9D00000F8F4081800F9BC0001F9BC0100F3FCE0 +:10D9E0001A065EFC000087F448483009F0FA00F897 +:10D9F000301C95695EFC0000000087F448B8985A16 +:10DA0000F0FB00F83178F00A1900E08B000B3018B9 +:10DA1000F00A0948E4180080E01803FEC0205EFF09 +:10DA20003008301C97685EFC000087F478185808AE +:10DA30005F0C5EFC5EFF19C830192018F208180050 +:10DA40005FBC5EFC5EFD5EFD19C93008F009180080 +:10DA50005F0C5EFC5EFD5EFFEBCD4080308B189767 +:10DA6000991B300CF01F00078F0CC0803078E069E4 +:10DA700000818F588F49E3CF9080E3CD80800000F4 +:10DA80008001D8DCEBCD40C018971696308B991BDF +:10DA9000300CF01F00108F0CC160301830298F58E7 +:10DAA0008F4948D8B826118948C8B8E948C71189AC +:10DAB000B8F96EB899086EBC580CC0752FFC8FBCB5 +:10DAC000E3CF90C0E3CD80C0F01F0006CF9B0000E5 +:10DAD0008001D8DC00007A280000025C000087F496 +:10DAE00080018450EBCD40FE1897FACCFFE01694ED +:10DAF000781330CB14928F1B129178061095300C4E +:10DB0000F01F00118F0CC1A0307830498F588F4919 +:10DB10009905B8E6B8F1F9630008B8C4B8D248B8B6 +:10DB200048B9B084B28248B76EB899086EBC580C38 +:10DB3000C0752FFC8FBCE3CF90FEE3CD80FEF01FBD +:10DB40000006CF9B8001D8DC000079E5000079E475 +:10DB5000000087F480018450EBCD40FC1897FACC8C +:10DB6000FFE4314B781414938F1B129278061095B2 +:10DB7000300CF01F00158F0CC2003018F3D4C01009 +:10DB80008F488F589913B8429935F9560010F954B7 +:10DB9000001248E7F1D6C0100A481248F9B800FF51 +:10DBA000F9B80100B8586EB999096EBC580CC07527 +:10DBB0002FFC8FBCE3CF90FCE3CD80FCF01F000472 +:10DBC000CF9B00008001D8DC000087F480018450E6 +:10DBD000D401780A3009740B15F8129C129AF01FC0 +:10DBE0000002DA0A80018460D401780A3009740BDB +:10DBF000F538000B129C129AF01F0002DA0A00009E +:10DC000080018460D401780A3009740BF538000B68 +:10DC1000129C129AF01F0002DA0A00008001846050 +:10DC2000D401780A3009740BF538000B129C129A53 +:10DC3000F01F0002DA0A000080018460D401780A33 +:10DC40003009740BF538000B129C129AF01F000279 +:10DC5000DA0A000080018460D401780A3009740B6C +:10DC6000F538000B129C129AF01F0002DA0A00002D +:10DC700080018460D401780A3009740B15F8129C75 +:10DC8000129AF01F0002DA0A80018460EBCD40F89E +:10DC900030C618979916169414930C9B300CF01FED +:10DCA00000108F0C1895C160307831690C9A8F582C +:10DCB000089B8F49F01F000B48B66CB88B086CBCF2 +:10DCC000580CC0A52FFC8DBC301C6A088708E3CD1A +:10DCD00080F8E3CD80F8F01F0005CF6B8001D8DC21 +:10DCE000800091DC000087F480018450EBCD40F887 +:10DCF000308618979916169414930C9B300CF01FCD +:10DD000000108F0C1895C160307831490C9A8F58EB +:10DD1000089B8F49F01F000B48B66CB88B086CBC91 +:10DD2000580CC0A52FFC8DBC301C6A088708E3CDB9 +:10DD300080F8E3CD80F8F01F0005CF6B8001D8DCC0 +:10DD4000800091DC000087F480018450EBCD40F826 +:10DD500033C618979916169414930C9B300CF01F29 +:10DD600000108F0C1895C160307831390C9A8F589B +:10DD7000089B8F49F01F000B48B66CB88B086CBC31 +:10DD8000580CC0A52FFC8DBC301C6A088708E3CD59 +:10DD900080F8E3CD80F8F01F0005CF6B8001D8DC60 +:10DDA000800091DC000087F480018450EBCD40F8C6 +:10DDB000318618979916169414930C9B300CF01F0B +:10DDC00000108F0C1895C160307831190C9A8F585B +:10DDD000089B8F49F01F000B48B66CB88B086CBCD1 +:10DDE000580CC0A52FFC8DBC301C6A088708E3CDF9 +:10DDF00080F8E3CD80F8F01F0005CF6B8001D8DC00 +:10DE0000800091DC000087F480018450EBCD40F865 +:10DE1000330618979916169414930C9B300CF01F28 +:10DE200000108F0C1895C160307831090C9A8F580A +:10DE3000089B8F49F01F000B48B66CB88B086CBC70 +:10DE4000580CC0A52FFC8DBC301C6A088708E3CD98 +:10DE500080F8E3CD80F8F01F0005CF6B8001D8DC9F +:10DE6000800091DC000087F480018450D421189751 +:10DE7000169530CB991B300CF01F00128F0C1896A2 +:10DE8000FAC4FFEC580CC190302830098F588F49E4 +:10DE900048D76EB899086EBC580CC1052FFC8FBCD2 +:10DEA0005805EDF81000EBF81A00089BECCCFFFCCD +:10DEB000308AF01F0006DA2AD822F01F0005CF0BA7 +:10DEC0008001D8DC000087F4800091DC8001845060 +:10DED000EBCD40E018961695310B991B300CF01FD6 +:10DEE00000108D0C1897C1503078317A0A998D58EE +:10DEF0008D4A48CBF8CAFFFCF01F000B48B56AB842 +:10DF00008F086ABC580CC0752FFC8BBCE3CF90E027 +:10DF1000E3CD80E0F01F0006CF9B00008001D8DC3D +:10DF20008001D3EC8001D158000087F48001845037 +:10DF3000EBCD408078076E285808C0B0300C189A96 +:10DF40005C586E0B3109300CF01F0009E3CF908054 +:10DF5000310CF01F00086E189908EF390016991956 +:10DF60006E3899286E4999396E28CEAB800184604D +:10DF700080009200EBCD40FC189716931495314B1E +:10DF80001294991B300CF01F001C8F0C1896FAC2CB +:10DF9000FFE4580CC200302830198F588F495805BB +:10DFA000C1C18D455C7549576EB88D086EBC580C63 +:10DFB000C1F52FFC8FBC5804EDF81000E9F81A00E9 +:10DFC000049B308AECCCFFFCF01F000D301C8D351B +:10DFD000E3CD80FCE3CF80FC5C750A9CF01F000958 +:10DFE0008D4CCF90069B0A9AF01F0005CDDBF01FE9 +:10DFF0000006CE1B8001D8DC000087F4800091DC95 +:10E000008000920080018450EBCD40801897F93C4D +:10E01000000BF01F00084888F0F900F85809C0709C +:10E02000EECBFFFC310A313CF01F0004E3CF9080BF +:10E0300080015FB0000087F480014658D42130C8C9 +:10E040001896109B4904300CE8F500F88D18F01F65 +:10E05000000F8D0C1897C120301830D98D582FCC57 +:10E06000EACBFFE28D49F01F000A68B88F0868BC50 +:10E07000580CC0552FFC89BCDA2AD822F01F0005A5 +:10E08000CFBB0000000087F48001D8DC8001844011 +:10E0900080018450D42130CB1897991B300CF01F8D +:10E0A000000B8F0C1894C1004898301530868F559E +:10E0B0008F462FCCF0FB00F82E2BF01F00060A9C99 +:10E0C000E966000AD822D8228001D8DC000087F453 +:10E0D00080018440EBCD40E030CB1896991B300C8A +:10E0E000F01F00108D0C1897C1703018305948E59A +:10E0F0008D588D492FCCEAFB00F82E2BF01F000B1A +:10E100003028AE586AB98F096ABC580CC0752FFC0C +:10E110008BBCE3CF90E0E3CD80E0F01F0005CF9B08 +:10E120008001D8DC000087F48001844080018450A5 +:10E13000EBCD40FC30C518969915169414931292A5 +:10E140000A9B300CF01F00138D0C1897C1D03018AB +:10E150008D458D580A9A300BF01F000FEECCFFFC56 +:10E16000089BF01F000E078848D6EF68000A058953 +:10E17000EF69000B6CB88F086CBC580CC0752FFC95 +:10E180008DBCE3CF90FCE3CD80FCF01F0006CF9B5D +:10E190008001D8DC800091D080018440000087F4A9 +:10E1A00080018450EBCD40FC30C51896991516942B +:10E1B000149312920A9B300CF01F00128D0C1897CA +:10E1C000C1B0301830B98D588D490A9A300BF01F04 +:10E1D000000E306AAEC4AED3049BEE0A000CF01FF2 +:10E1E000000B48B66CB88F086CBC580CC0752FFC7F +:10E1F0008DBCE3CF90FCE3CD80FCF01F0006CF9BED +:10E200008001D8DC800091D0800091DC000087F490 +:10E2100080018450D431203D502B5018FACEFFD0CD +:10E2200033857C3499157C181896149312917C00D0 +:10E2300050087C220A9B300CF01F00228D0C18978E +:10E24000C370301830A98D580A9A8D49300BF01FD1 +:10E25000001E069A029BEECCFFFCF01F001CEF5341 +:10E2600000244028049BEF680026EF600027306AF6 +:10E27000EECCFFD8F01F00155804C1C0089B308AAF +:10E28000EECCFFD2F01F00114008EF6800364018B6 +:10E2900048F6EF6800376CB88F086CBC580CC05556 +:10E2A0002FFC8DBC2FDDDA3AF01F000ACFBB2FDD2B +:10E2B000D832089B308AEECCFFD2F01F0003CE5B31 +:10E2C0008001D8DC800091D0800091DC000087F4D0 +:10E2D00080018450D4012FCC7808202D500819C912 +:10E2E000BAC919D8BAD8F01F00052FED580CF9B8E3 +:10E2F000010DF9F81A06DA0A80015860D40148D8ED +:10E30000F8CBFFF5F0F900F8733C7808204D502861 +:10E3100019C9FB69000C19D8306AFB68000D1A9CFA +:10E32000F01F0005F01F00052FCD580C5F1CD80210 +:10E33000000087F48002E73680018898EBCD40FE2C +:10E340003007FAC5FFE0189116924A134A1466087E +:10E350000E38E08A00216A08204D50280BC9FB695D +:10E36000000C0BD8EE061504FB68000DE806000A49 +:10E3700015D8BAD87409500915C8BAC8F01F0016C4 +:10E380002FCD580CC0A12FF75907CE2118970E9CFE +:10E39000E3CD80FEEE061504E80600060A9B0C9C01 +:10E3A000F01F000EF3D2C001EE081501AC692FF882 +:10E3B000E808093166090E39FE99FFEBEEC9FFFF47 +:10E3C00048380E9C9109E3CD80FE000000008C5C73 +:10E3D00000008B5C8001889880018440EBCD4080F8 +:10E3E000300819C9F0091800C10048E8F0F700F832 +:10E3F0005807C130F01F000C0E9CF01F000C0E9C43 +:10E40000F01F000BE3CF8080486830A9F0FA00F8D5 +:10E41000301C9569E3CD80800E9CE3CD80800000A8 +:10E42000000087F480015D188001593880015CDCB0 +:10E43000EBCD40E01896F01F00224A2A0DE9F4F7D0 +:10E4400000F85809C1103018F0091800C32030280E +:10E45000F0091800C31030488F687498300CABC8AE +:10E460009598E3CD80E06F3930D8322A8F68496CB7 +:10E47000727B2F4BF01F00156F3C3FF8787BF7390C +:10E4800000C8F0091800C130202DF71600D47845D7 +:10E49000306AEECBFFE21A9CF01F000C0C9B0A9C2A +:10E4A000F01F000B301C2FEDE3CD80E0E3CF90E0B8 +:10E4B00030088F68CD3B30588F68CD0B8001F00459 +:10E4C000000087F400008C608002E7368001E33CA6 +:10E4D000EBCD40E01896F01F00284A8A0DE9F4F7CA +:10E4E00000F85809C1503018F0091800C3603028EE +:10E4F000F0091800C3906F0830492FF88F69EF4872 +:10E5000000407498300CABC89598E3CD80E06F392B +:10E5100030D8322A8F6849AC727B2F4BF01F00191C +:10E520006F3C3FF8787BF73900C8F0091800C1301C +:10E53000202DF71600D47845306AEECBFFE21A9C06 +:10E54000F01F00100C9B0A9CF01F000F301C2FEDD9 +:10E55000E3CD80E0E3CF90E06F0830092FF88F69BA +:10E56000EF480040CCFB6F0830592FF88F69EF4817 +:10E570000040CC8B8001F004000087F400008C6028 +:10E580008002E7368001E33CD421310B1896991BB9 +:10E59000300CF01F00198D0C1897C28030183049CC +:10E5A0008D588D494955302CEAF400F8F01F0014BD +:10E5B000E8CBFFE21896EECCFFF8F01F00126C38A3 +:10E5C000AE38EAF901045819C0D03008AE2830B886 +:10E5D00089686AB98F096ABC580CC0952FFC8BBC3E +:10E5E000DA2AEAF8011C5818CF20D82AF01F0006B2 +:10E5F000CF7B00008001D8DC000087F48001EF6C45 +:10E600008001844080018450EBCD40F81897169427 +:10E6100030CCF01F0046303CF01F00441895302CE1 +:10E62000F01F0042E06A00EC1896E06B00FF0E9CC1 +:10E63000F01F003FE8CBFFE2EECCFFF6F01F003DFD +:10E640006C384BD9AE289208AE483DD86939727BF8 +:10E65000F73A009AF00A1800C480F73900803DD8D4 +:10E66000F0091800C52030050A93F01F00349838CF +:10E67000AE381896F93900A83FF8F0091800C09094 +:10E68000F8C9FF58EECAFF584ADB0E9CF01F002D58 +:10E69000ED3900CC3FF8F0091800C1900E9CECC990 +:10E6A000FF34EECAFF344A6BF01F0027089CF01FAE +:10E6B0000027583CE089000C4A587099ABC99199E1 +:10E6C0003FFA301CEF6A009EE3CD80F85805CF502A +:10E6D000EECCFF62069BF01F001F49D9301C7298D8 +:10E6E000ABA89398E3CD80F8F73900A03008F00983 +:10E6F0001800CB41EAF900B85819CB01F72800A25D +:10E700001295F003161FCB2BF73900863018F0094D +:10E710001800CAA1EAFC00B8581CCA61F728008892 +:10E720001895F003161FCA2B8001EF6C800091D062 +:10E73000800184400000025E8001EFF88001D3EC8C +:10E740008001D1E88001D21C8001808E000087F416 +:10E75000800184F0D421E06800EC1897109B4924D4 +:10E76000300CE8F500F88F18F01F00108F0C189689 +:10E77000C090301830798F588F490A9BF01F000CD9 +:10E78000C021D82A0C9CF01F000B30C88B6868B9D8 +:10E790008D0968BC580CC0452FFC89BCDA2AF01FD3 +:10E7A0000006CFCB000087F48001D8DC8001E608AA +:10E7B0008001F03080018450D421E06800EC18978B +:10E7C000109B4924300CE8F500F88F18F01F00105A +:10E7D0008F0C1896C090301830698F588F490A9B5B +:10E7E000F01F000CC021D82A0C9CF01F000B30C871 +:10E7F0008B6868B98D0968BC580CC0452FFC89BC72 +:10E80000DA2AF01F0006CFCB000087F48001D8DCA5 +:10E810008001E6088001F03080018450EBCD40405B +:10E82000201D18961A9CF01F001849888C69F0FB6F +:10E8300000F85809C1203018F0091900C0B030287C +:10E84000F0091900C170770830492FF89769F74827 +:10E8500000402FFDE3CF80407738301911EA301C9B +:10E86000F20A1800F9B8000CF7F80A062FFDE3CDFC +:10E870008040770830592FF89769F74800402FFDFE +:10E88000E3CF8040800177A4000087F4D401496879 +:10E8900019C9F0FA00F85809C1803028F0091800A9 +:10E8A000C1803048F0091800C0503018F009180035 +:10E8B000C180750830492FF89569F548004019CB9B +:10E8C000302CF01F000AD80A3088301C9568D80216 +:10E8D000750830592FF89569F548004019CBCF1BC2 +:10E8E000301BCEFB000087F480018390D431215D82 +:10E8F000303C169614911290F01F00584D83F8C4C6 +:10E90000FFB0189531CA089B069CF01F0056C0A1A5 +:10E910006D3830AA707BE6CCFFE42D2BF01F005140 +:10E92000C7B06D38FAC7FFC8707B0E9CF6CAFFC827 +:10E930002D2BF01F004D089B0E9CF01F004CC0417A +:10E94000300C2EBDD83231CA0E9BFA0A0002049C4C +:10E95000F01F0047049CF01F004730080E9A500833 +:10E960001A97089B1A9CF01F00446D38707930E8A4 +:10E97000F33A005EF00A1800C670EB3A0074580AC9 +:10E98000CE006D387079EB380075F33B005EF60809 +:10E990001800C0F0EACCFF8A3009C0581938F608D0 +:10E9A0001800C0502FF9123AFE99FFFA123ACC9093 +:10E9B000049CF01F0032CC50049B1A9CF01F0030C6 +:10E9C0001A9B029CF01F002F049B009CF01F002D3F +:10E9D000089B31CA4A2CF01F00266D3830AA707B84 +:10E9E000E6CCFFE42D2BF01F00226D38312A707B1E +:10E9F000E6CCFFDA2C8BF01F001E029B304AE6CCDF +:10EA0000FFC8F01F001B009BE6CCFFC4304AF01F7C +:10EA10000018301CC97B6D38312A707BE6CCFFDAD8 +:10EA20002C8BF01F0010FE91FF7E304AE6CBFFC812 +:10EA3000029CF01F000FE6CBFFC4009C304AF01F81 +:10EA4000000C301CC7FB049CF01F000FFE90FF7AE7 +:10EA50001A9CF01F000EC92B8001EF6C000079E8B2 +:10EA60008000917C80018124800182BC800091DC47 +:10EA700080018658800181E8800182608001817E6A +:10EA8000800180CC80018360800185F4EBCD40FC67 +:10EA9000FACD0110300733095407FEF3022EE6F8D1 +:10EAA00000F854281896129B0E9C8D19F01F0088B0 +:10EAB0008D0C1895E080008A3018303C8D588D4CB4 +:10EAC000F01F0084FACBFEFC1894FACAFEF8FACCC8 +:10EAD000FEF2F01F0081442871390E9CE06B00ECBF +:10EAE0007277F01F007BC710540CE0680420B83820 +:10EAF000442B7738707992D9EDB90000C6B0EDB9E2 +:10EB00000001C06144099238A1B8B238442BE8F83A +:10EB100000B85808C0C07738707A94D9EDB90009A8 +:10EB2000C06144099238A9B8B238442BFAC2FEF148 +:10EB3000441A049CF01F006944185818E08000A58E +:10EB4000C6823079FB38010FF2081800C050440922 +:10EB50009238A5A8B238440CF01F0061049CF01F45 +:10EB600000614428E74C0100EACAFFF071390A9CB1 +:10EB70004DDBF01F005E6858AA286869AA394D3C31 +:10EB800069B85808C440442B773870793078F33A24 +:10EB90000074F00A1800C240EAC9FFF4EACAFFF89C +:10EBA000300CF01F0053581CC53030063018E748B1 +:10EBB000004444095809C0A0FACCFF00F01F004DE2 +:10EBC0000C9C2BCDE3CD80FC30060C9C2BCDE3CDF3 +:10EBD00080FC44099238A1A8B238442BC99BF8F8AC +:10EBE00001AC5808C050F8CCFE54F01F004230CBA6 +:10EBF000300CF01F0037E74C01AC189AC080442855 +:10EC0000713B76794B8B28C9F01F003B442BCC5BC2 +:10EC10005828CA51442C1A9B2E2CF01F00381A96E3 +:10EC20001AD61ADC442BFB380116FB390117EF3AD0 +:10EC300000CF169CF6CBFF34F01F003144283289F8 +:10EC4000F15900D8442CF01F00262FEDC88BE8F8AE +:10EC500000B85808C2916AB93FF8F368009A3028A2 +:10EC60003039E7480044442891694426F01F0025C4 +:10EC7000ED4C004466B88B0866BC580CC2352FFCBE +:10EC800087BC3016C94B440BEF3A00AF169CFB38DB +:10EC9000010EFB39010FF6CBFF58F01F001B440C8F +:10ECA000F01F000FC5CB44287139727A94D8EDB8A3 +:10ECB0000001CD21189B6ABCF8CCFF66F01F001341 +:10ECC000CCFBF01F0013CDDB000087F48001D8DC03 +:10ECD0008001EF6C80017C4480017EE08001F03097 +:10ECE00080017BD88001D3EC8001AD408001E8EC4D +:10ECF0008001D3A88001D1588001887080018C2CBC +:10ED0000800145C480018B74800184F080018450AF +:10ED1000D431203D189616971493303CF01F0070A4 +:10ED2000301831798D588D4930086C068F0858039A +:10ED3000EDF81805E7F81A0018950DC40898A7D83B +:10ED4000C0505898C0302FDDD83A0DD93018F0098E +:10ED50001800C1003008F0041800F9B80500EFF8F9 +:10ED60005A00F9BC0501F9BC0401EFFC4A002FDD93 +:10ED7000D832303CF01F005A6C98F93A0074F13BDD +:10ED8000005E580ACE80F9380075F6081800C0A059 +:10ED900028AC30092FF91439CDE41938F00B1800DC +:10EDA000CFA1ECC0FFF8009CF01F004E1891CD30B1 +:10EDB0006BB85808C090793870793078F33A00749D +:10EDC000F00A1800C6E0FACCFFF8F01F0047581C04 +:10EDD000C0A0F01F0046029B835C350A31DCF01FA7 +:10EDE0000044CB9B40285818CF51FACCFFFCF01FB1 +:10EDF0000041581CCEF1401820785818FE9BFFEBBC +:10EE00004BD8F0F900F85809CE501A9CF01F003B7F +:10EE1000581CCE01400820285818FE9BFFDC6C9E31 +:10EE20002F4EFCE80000212DFAE90024FCE8000840 +:10EE3000FAE9002CFCE20010FAE30034FCE80018C8 +:10EE4000FAE9003CFD3C0020FB6C0044FD38002149 +:10EE5000322AFB6800454AAB1A9CF01F002AF01FBB +:10EE6000002A2EED580CCB606C9A3FF8F53900C89B +:10EE7000F0091800CAF06008F51B00D4202D6C6C56 +:10EE8000500801C9BAC901D8BAD8F01F0020A56C32 +:10EE900049FB310A180B315CF01F00152FEDC9AB8F +:10EEA0004955EAF801AC5808C050EACCFE54F01FAE +:10EEB000001930CB300CF01F0018EB4C01AC189A45 +:10EEC00048D5580CFE90FF816338494B707928C9AA +:10EED000F01F00136A98ABB88B98C76B8001EF6C7A +:10EEE00080015D44800177A4800145C480014658BB +:10EEF00080015F44000087F480015F2800008C607F +:10EF00008002E736800189108001E33C00008B5CC1 +:10EF10008001D3A88001D8DC8001D3EC8001D158D6 +:10EF2000EBCD40E0206D300818991495502850081A +:10EF30001A9C1A965D191897C10140085808C040DC +:10EF40001A9CF01F0009402C580CC030F01F00071D +:10EF50000E9C2FADE3CD80E01A9C5D15581C5F0719 +:10EF6000CEDB00008001D3A8800091E858DCE08867 +:10EF700000035EFD49B8F00C032F49B8F0CCFFF454 +:10EF80005EFC4998F0CCFFE45EFC4978F0CCFFD4FD +:10EF90005EFC4958F0CCFFCC5EFC4938F0CCFFC495 +:10EFA0005EFC4918F0CCFF305EFC48F8F0CCFF1C4A +:10EFB0005EFC48D8F0CCFEF45EFC48B8F0CCFEBC59 +:10EFC0005EFC4898F0CCFE945EFC487C5EFC486891 +:10EFD000F0CCFFFC5EFC4848F0CCFE785EFC000004 +:10EFE0008003C01400000260483930089318930869 +:10EFF0005EFC000000008C844828700C5EFC000061 +:10F0000000008C84EBCD40C0487618976C1C580CDF +:10F01000C030F01F00060E9CF01F00058D1CE3CDD4 +:10F0200080C0000000008C8480018AD480018AECBA +:10F03000EBCD40C0487618976C0C580CC030F01FD0 +:10F0400000060E9CF01F00058D0CE3CD80C0000073 +:10F0500000008C8480018ABC80018B30D4211894FC +:10F060001696149530CCF01F00121897C1D03018A6 +:10F0700099069915F0060946EC0C1502F01F000CD4 +:10F080008F2CC0F05806E08A000B3009129A6E28C7 +:10F09000F009092A2FF91236FE99FFFB8907DA2AAF +:10F0A0000E9CF01F00043FDCD8220000800092007C +:10F0B000800091E8D4311893169214901291580C54 +:10F0C000C36078093018760CF0090945580CC390D4 +:10F0D000189468160A36C1A468075807C0606E48BD +:10F0E0000238C1B03FCCD832662CF8060327580747 +:10F0F000CF71ECC8FFFFF808002CC0582FF8190793 +:10F100005807CEE110960A38CFA5089CF01F0013CF +:10F1100030083FEC8508D832029A009C6E3BF01F05 +:10F120000010301C89166E088908D832760C580CED +:10F13000C040F01F000ADA3A66093018F0090945A4 +:10F14000308CF01F00081894C060850C30089918A6 +:10F150009908CC0BD8320000800091E8800091DC47 +:10F1600080009200D431109412907818409618952F +:10F17000169214910C9B780A089C5D181893318C98 +:10F18000F01F00131897C1F00C9CF01F00118F3C6A +:10F19000C170089B0C9AF01F000F30088F468F1229 +:10F1A0008F218F508F086A29F203002C78085808A5 +:10F1B000C0C0109970085808CFD19307DA3A0E9C56 +:10F1C000F01F00053FDCD8329907DA3A8000920040 +:10F1D000800091DC800091E8D431203D501C500B20 +:10F1E000149112921090580AC4307418009B740A3B +:10F1F000129C5D18A36C502C6228F00C0307580772 +:10F20000C3706E450A990035C3610E940E93C09881 +:10F210006E075807C2D008936E490A39C2C10E94CE +:10F220006E3B0A9A049CF01F00181896CF214019D3 +:10F230006E18930840086E2991098F1C8F2C6E3C24 +:10F24000F01F00128F468F3640296228F009000C0B +:10F2500078090E39EFF80000F9F80A00EFF810000D +:10F26000E7F81A000E9CF01F00092FDDDA3A3FEC98 +:10F270002FDDD8326E385808CFB00039CF903FCC50 +:10F280002FDDD8328000917C800091E8163C5E0C26 +:10F290007808971C990B97085808F1FB1A015EFC37 +:10F2A00078195809F9F81000F3F81A007808580886 +:10F2B000F1F91A013008990899185EFCD40149380F +:10F2C000FACEFFFC709CE21C0002C1D0209DFD3AEA +:10F2D0000021FB6A0021FCE80000FAE90000FCEADA +:10F2E0000008FAEB0008FCE80010FAE90010FCEA5C +:10F2F0000018FAEB0018FD380020FB680020F01F12 +:10F3000000042F7DD8020000000087F480015AA479 +:10F31000D4014898709CE21C0002C0C0300930CC77 +:10F32000EA1C4000303B129AF01F0004F01F00045A +:10F33000301CD802000087F4800186C88001875401 +:10F34000D4014898709CE21C0002C0C0300930DC37 +:10F35000EA1C4000303B129AF01F0004F01F00042A +:10F36000301CD802000087F4800186C880018754D1 +:10F37000D4014898709CE21C0002C0C03009310CD6 +:10F38000EA1C4000303B129AF01F0004F01F0004FA +:10F39000301CD802000087F4800186C880018754A1 +:10F3A000EBCD4080495818977098E2180002C04190 +:10F3B000109CE3CD8080F01F00126F38302911EAD5 +:10F3C000F20A1800C0D03009303B129A307CEA1C97 +:10F3D0004000F01F000CF01F000CE3CF90806E681F +:10F3E0005898CF213009303B129A30BCEA1C4000BB +:10F3F000F01F0004CF1B0000000087F4800158407C +:10F40000800186C88001875458DBE08A0012F939F0 +:10F41000000C3078F0091800E08B000C595BE08A92 +:10F420000008F939000E3AA8F0091800C0D05EFDB6 +:10F430003888F0091800CFC1F939000D38E8F00913 +:10F4400018005F0C5EFCF938000FF2081800CF01BD +:10F45000F93900103038F0091800CEA1F93900113F +:10F460003008F0091800CE41F93A0012F20A1800EB +:10F47000CDF1F9380013F4081800CDA1F9390014C2 +:10F480003888F0091800CD41F939001538E8F0093D +:10F4900018005F0C5EFCD7033019482891095EFC08 +:10F4A00000007A38EBCD40C0208D48D730088E0957 +:10F4B000F0091900C101E06AFFFF300B1A9CF01F30 +:10F4C00000091A9B302AFACCFFE8F01F00079A18AF +:10F4D0001A96AE088E0C2F8DE3CD80C000007A2ADC +:10F4E0008001C7B88001A498D401F01F00054858D6 +:10F4F000F139010B120C5C8CD80200008001F4A4DD +:10F50000000087F4EBCD4060208D306AFAC5FFE63D +:10F51000300B0A9CF01F00091A9CE06AFFFF300BB9 +:10F52000F01F00070A9C1A9B302AF01F00061A964B +:10F530009A1C2F8DE3CD8060800091D08001C7B8E8 +:10F540008001A444D43120DDFEF60234FACEFFA8B7 +:10F55000189516916C9C1494129310907C177C0251 +:10F56000E21C0002C0312F3DD832FEF802167009AD +:10F570005809C041FE7CFBB4CF7BECF8012458183D +:10F58000C041FE7CFC17CF0BECC9FFE85019129C60 +:10F59000F01F007D581CE08000E30D890D98F009F4 +:10F5A0001800E08200E6302CF01F0078E08000D2E6 +:10F5B0006CB850282FF88DB85807FBF91002EFF9F6 +:10F5C0001A00F01F0073C0E0029B0A9CF01F00713C +:10F5D000E08000C96C98EDB80006C0414E88402913 +:10F5E00091D9F01F006D6008EFDCB010F3D7C010A8 +:10F5F00050091039E08B006C0D882FF8AC880D99FC +:10F60000F0091800C061300A320C149BF01F00632F +:10F61000E8C800020E08FB58002EED38010B30043C +:10F62000FB680032400A300BFB640030FB640031A1 +:10F63000FB640033069CF01F005A069BFAC7FFF4D8 +:10F64000400A0E9CF01F0057300A0E9BFACCFFD2E6 +:10F65000F01F0055ED38010BF9D2C003BA78F01F46 +:10F660000053300CFB520028FB5C002AE041003EB6 +:10F67000E0880008EB39000C3888F0091800C2D087 +:10F680004028300A50980E9BFACCFFDCF01F00484F +:10F690004009ECCCFFE88109F01F0046F01F00464E +:10F6A0003008ED4C00CCED5800D04C49F30A014233 +:10F6B000F00A1900C0604B297298EDB8000EC031F5 +:10F6C000301CC52BF01F003E301CC4EBECCCFFE817 +:10F6D000F01F00383FFCC48BEB39000D38E8F0090F +:10F6E0001800CCF1EB39000E3018F0091800CC915D +:10F6F000EB39000F3038F0091800CC313028EB3BE3 +:10F700000012F00B18005F1A3FE8F00B18005F19A9 +:10F71000126AE80A1800CB51EB380013E218001DFA +:10F720005818CAF1EB380014E21800C85888CA917A +:10F73000189A31F9EA090708F4081800CA212FF9C4 +:10F74000E049003FCF81E0680400FB58002AC99BD4 +:10F75000401CF01F0018FE7CFAECC06BFE7CFC160F +:10F76000C03BECCCFFE8F01F00133FECCFDA401CAD +:10F77000F01F0010FE7CFB4FCF7A0000000087F4E2 +:10F7800000007A38800145DC80019F3080015F04F1 +:10F790008001F4088001F4E880014658800091D08F +:10F7A0008001C7B88001A4448001859C8001A49891 +:10F7B000800145EC800145C4000002608001FBFC33 +:10F7C000D401302CF01F0003300948389109D802C9 +:10F7D0008001A12800007A38D431FACD01385009CF +:10F7E000FACEFEA416971896FEFB031C14947C1305 +:10F7F0007C00F6F801245818C460FEFA030A749CD1 +:10F80000E21C0002C05118970E9C2B2DD832E068E4 +:10F8100000F8FAC5FEFCF5D7C0100C9B0A9C548872 +:10F82000549654A730025472F01F00B8FAC1FEE497 +:10F830000A9B029CF01F00B644C95879E08B00284F +:10F840003018F0090948E2180085C2104488FAC946 +:10F85000FFF45012502854D944D80A9B5478029C83 +:10F86000F01F00ACC1C1302744D95809CCE0FAC818 +:10F87000FFF41039CCA0FACCFECCF01F00A70E9CF0 +:10F880002B2DD83230270E9C2B2DD832448B300CA8 +:10F89000F01F00A2E08000B354DCCDFB44C9E04976 +:10F8A000003FE088000B300744B8EDB80007E08067 +:10F8B000009EF01F009BCD9BFEF80268F009032F0D +:10F8C000ECCAFFFC1588EC08000889080DD81589DA +:10F8D000400BEE0901093067F208010A970A44B8A3 +:10F8E000CE5B44B8F0C90001E0490097E088008988 +:10F8F000447CF01F008D44C8189A300944BC303B4A +:10F90000BFBCF9E8108CF01F0089F01F0085301B88 +:10F91000300CF01F008744B83027CC8B44B8E04847 +:10F920000082C090E08900A9E0480080C040E04823 +:10F930000081CEE10E9B0C9CF01F007ECE9B44B854 +:10F94000E0480082E08000C4E08900915978E080BE +:10F9500000C4E0480081CCD1029CF01F0077CD8B21 +:10F9600044B85808C7E144D65803EDF81000E7F84A +:10F970001A008C28A008FB1A0106445814088908AC +:10F98000FB190104F20A0105400A30EB95056807EE +:10F990000E9CF01F006AE08000AE4DB9F2F801D075 +:10F9A0005808E080009E0A9B0E9C5D18E08000993C +:10F9B00030270DE84D4BF768007B44B8C77B44B84F +:10F9C0005818CB90E0480080CA31CB5B447B44BCE4 +:10F9D000F01F005B44BCF8C800805818FE9BFF99DC +:10F9E000029B5C5CF01F0057C93B30084C69300B30 +:10F9F000B2A8169CF01F0054C5DB3FD7C06B4D3832 +:10FA0000F009032F029CF01F0052C82B029CF01F2C +:10FA10000051C7EB029CF01F0050C7AB029CF01FC7 +:10FA2000004FC76B029CF01F004EC72B029CF01FBB +:10FA3000004DC6EBF01F004C4B3AF54C00D4C68B82 +:10FA4000029CF01F004AC64B029CF01F0049C60BE7 +:10FA5000029CF01F0048C5CB447CF01F0047C58BBB +:10FA6000E0480081C1403027C21BF0C8008F5828F1 +:10FA7000FE9BFF40C4DBE0480084FE90FF5DFE95E6 +:10FA8000FF5BE0480085FE91FF44C55B49E91388B0 +:10FA900020185C58B28844D7C29049BB7698E218C7 +:10FAA0000040C20076D96E081039E088002944B8B9 +:10FAB000A7D854B85803F9B70003EFF81000E7F8D7 +:10FAC0001A00F9B70103FBF8104BCF0A447B32EC64 +:10FAD000F01F002AC1DB029CF01F0029C19B3047A8 +:10FAE000C69B0FD8F768007ACE3B302CF01F00255C +:10FAF000CD5BF01F0025CF403FE7C5CBF01F0023B3 +:10FB0000CD7B0000000087F48001C7B88001BF10E2 +:10FB10008001BF448001D3A88001D8DC80018754D4 +:10FB20008003C04C8001870C800186C880016A88F0 +:10FB3000800237E8800208948001F4088001708C0C +:10FB40008001725480018CE48003C14C8002084023 +:10FB50008002085880020864800208708002087CD5 +:10FB600080020888800145C48002084C8002083465 +:10FB7000800209B48001DA3480016D6C8002094092 +:10FB80008001A12880015F048001F310EBCD406863 +:10FB90003006493C1AD61AD649250C9899064929A7 +:10FBA000492A302B0A9CF01F001249231AD60C98C0 +:10FBB0001AD60699490A303BEACCFFFCF01F000C2C +:10FBC0000C981AD606991AD6EACCFFF848BA305BD8 +:10FBD000F01F0007301C2FADE3CD806800007A389D +:10FBE00000007A2C8001F4988003C3AC80016EB8C9 +:10FBF0008001F7C08003C3C48003C3E05EFCD70369 +:10FC0000EBCD40E0203D1897580CC1F07938707A60 +:10FC100094D9EDB90001C1D04C166C785828C15068 +:10FC20000E9CF01F0040C110ED3900943FF8F00920 +:10FC30001800C1405017FACAFFFC1A9BFACCFFF615 +:10FC4000F01F0039581CC180301C2FDDE3CD80E04F +:10FC50004B366C785818CE51CF8B202D306A1A9CB9 +:10FC60004AFBF6CBFF4AF01F0031F01F00312FEDA9 +:10FC7000580CCEB1CE0BFAC5FFF5400A401B0A9CCA +:10FC8000F01F002C581CCE113079FB38000BF20805 +:10FC90001800C35140187139727A94D8EDB8000435 +:10FCA000CD404A5AF4F801045818C3206DE85808AA +:10FCB000C1D1ED3B008049AA580BC2806F387079E2 +:10FCC000F5380081F33C005EF8081800C1F0F4CA72 +:10FCD000FF7E3009C0581538F8081800C0402FF9C9 +:10FCE0001639CFA516395F0CCB1B48D973F85808C5 +:10FCF000CE10F4F801AC5808CDD1CA7B0A9CF01F95 +:10FD0000000FF01F000FCA10CCDB3009CECB3059EA +:10FD1000FB38000BF2081800C981CC9B0000026080 +:10FD2000800189D080017C448002E736800188B060 +:10FD300080017EE0000087F480017BD880017C1088 +:10FD4000EBCD40E048D818961695F0F700F058072C +:10FD5000C0E00E9CF01F000AC0715806C0A00E9CA7 +:10FD60000A9B5D16C0606E075807CF41E3CF80E065 +:10FD70000E9CE3CD80E00000000087F48001FC00D1 +:10FD8000D401F01F0002D80280021500EBCD40F82C +:10FD9000204DE0683100EA18312EE069312EEA1971 +:10FDA000322E306CFAE90000F01F00631894E080F6 +:10FDB00000B9303CF01F00611896301CF01F005F46 +:10FDC000306A202D189B18951A9CF01F005DF01FBB +:10FDD000005D2FED580CE080008732B80A9C1AD8DD +:10FDE000308930084D8A306BF01F00582FFD1A9370 +:10FDF000ECFC00D8F01F0056ECFC00DCF01F0055B6 +:10FE0000ECFC00E4F01F0054ECFC00E8F01F005391 +:10FE1000ECFC00ECF01F0052ECFC00F0F01F005175 +:10FE2000ED3C00B7F01F00506DC85808F9B801014B +:10FE3000EDF81A1BED3C006FF01F004CECFC012CA0 +:10FE4000F01F004BF01F004BF01F004BF01F004B4A +:10FE5000F01F004BECF800F85808C6616D084C978D +:10FE6000EF4800D8ECFC0130F01F0047300830A903 +:10FE700032B54C6A1AD5E06B0080EECCFED8F01F8C +:10FE80000033EEC6FE58304A300B0C9CF01F004089 +:10FE900030081AD530594BFA0C9C304BF01F002B10 +:10FEA0004BD82FEDF10A01423009F20A1900C26065 +:10FEB0006E99EDB9000EC201A7B930688F9950381C +:10FEC0001A9CFAC8FFF8FAC9FFF4089A308BF01FA1 +:10FED00000331897581CC140089CF01F00312FCDEB +:10FEE000E3CF80F8189A0A991A933068308B1A9CDD +:10FEF000F01F002CC7EBF01F002C6E99CDEB089C77 +:10FF0000F01F00273009303B129A311CEA1C4000D8 +:10FF1000F01F0026F01F00260E9C2FCDE3CD80F8A9 +:10FF20002FCDE3CD80F8300A301B149CF01F002148 +:10FF3000C96B0000800092008001EF6C8002E73600 +:10FF4000800188B08003B804800176C480020594E3 +:10FF500080020538800204DC8002048080020424D0 +:10FF6000800203C8800202F880020374800202D477 +:10FF70008002078C800168AC8002017080020EFC58 +:10FF8000000087F48002031C8003C400800091D02D +:10FF90008003C40C00000260800174C8800091E8F6 +:10FFA0008001776C8001FBFC800186C8800187544A +:10FFB00080020B34EBCD406830094AF63068ACA9BA +:10FFC000AC893129314AAC988D99300530130A9BA0 +:10FFD000ED4500ECED4500E88DA58DC5ED550040E3 +:10FFE000ED550042ED55004EED4500D88DB3ECCCFB +:10FFF000FEF0F01F0022ED450124F01F0021ED5519 +:02000004800278 +:1000000000D0ED4C00CCED5500D249ECF01F001EA5 +:10001000F01F001EED4501B8F01F001DF01F001D70 +:10002000F01F001D0A9BECCCFF48F01F001C0A9B30 +:10003000ECCCFF44F01F0019069BECCCFF40F01FF6 +:100040000017069BECCCFF3CF01F0014ED4300446E +:10005000F01F0013F01F001330DCF01F0013F93CF9 +:10006000000FF01F0012F01F0006ED4C01CC069CA3 +:10007000E3CD8068000087F4800091D0800145C402 +:10008000000084CC80017B24800237D080016CDCAE +:100090008001FB8C8001EFE8800144F8800187C873 +:1000A000800205EC8001EF6C800202B8EBCD40606D +:1000B000E06A01F8300B49D518960A9CF01F001C25 +:1000C000F01F001C0C9CF01F001CEACCFFF4F01F7A +:1000D000001BEACCFFE0F01F0019EACCFFF0F01F94 +:1000E0000017EACCFFECF01F0016EACCFFE8F01F87 +:1000F0000014EACCFFE4F01F0012300930DC1AD9FA +:100100001298129A129BF01F000FF01F000FF01FA1 +:10011000000FF01F000FF01F000FF01F000F301C2A +:100120002FFDE3CD80600000000087F4800091D0B7 +:1001300080016F4880021124800145D6800145F27C +:100140008002067C80014690800149B88001804091 +:1001500080015F98800201584848300A4849911848 +:10016000910A930A5EFC000000007A3C00007A4489 +:10017000D421219D4A846808F3D8C001FB6900633B +:10018000E2180002C14030183005FB6800634A3CA9 +:10019000F01F00233018189BFAC9FF9D300A49FC54 +:1001A000F01F0020581CC2802E7DD8225809C1C0E3 +:1001B000109549D870065806CEB0EA050019FA091C +:1001C00000170C9B0E9C306A2FA72FF5F01F00170D +:1001D0006C265806CDD05905CF516808F1D8C0011A +:1001E000F0051700CD5B306AE06B00FF1A9C3015FC +:1001F000F01F000FCDFB48FCF01F0009EA050018B6 +:10020000189BA1781A99300A48ACF01F00062E7D81 +:10021000D822000000007A448003C414800091B802 +:100220008001776C00007A3C800091DC800091D0E6 +:100230008003C41CD40148697208104C930CEDBCB7 +:100240000002C021DA0AF01F0003D80200007A443D +:1002500080020170EBCD408048C76E095809C1305B +:10026000722A580AF3F80003EFF80A01F3F81003B2 +:10027000F5F81A037238129C910AF01F00056E09F6 +:100280005809CEF1E3CF908000007A3C800091E8DD +:10029000D401F01F0007581CC020D802485972082A +:1002A000EDB80002CFB0F01F0004D8028002025463 +:1002B00000007A4480020170F8C900013058F0094A +:1002C0001800E08B00054838B09C5EFF3FCC5EFC18 +:1002D000000087F4D401201DFAC9FFFC12DC1A9932 +:1002E0003048300A307B483CF01F00032FFDD80215 +:1002F0008003C43C8001776CD401201D3018BA8C77 +:100300001A99300A306B484CF01F0004581C5F0CDF +:100310002FFDD8028003C45C8001776CEBCD406870 +:10032000201D48F61893FAC5FFFC2F060AFC0C9C0A +:10033000F01F000C303CF01F000CF94301300C9C06 +:10034000F01F000A0A993018300A307B488CF01FE1 +:100350000009581C5F0C2FFDE3CD8068000087F476 +:10036000800145FC8001EF6C800145FE8003C46C78 +:100370008001776CEBCD4040201D48E6BA8C2F06FB +:100380000C9CF01F000D303CF01F000C1B88F9483E +:10039000006C0C9CF01F000A30181A99300A309B30 +:1003A000488CF01F0009581C5F0C2FFDE3CD8040E6 +:1003B000000087F4800145FC8001EF6C800145FE60 +:1003C0008003C4748001776CEBCD4068201D1898C1 +:1003D0005CB81895FAC3FFFC48D606D82F060C9CCB +:1003E000F01F000C303CF01F000CF94500F00C9C95 +:1003F000F01F000A1A993048300A309B488CF01FD1 +:100400000009581C5F0C2FFDE3CD8068000087F4C5 +:10041000800145FC8001EF6C800145FE8003C480B3 +:100420008001776CEBCD4068201D18985CB818955A +:10043000FAC3FFFC48D606D82F060C9CF01F000C10 +:10044000303CF01F000CF94500EC0C9CF01F000A3A +:100450001A993048300A309B488CF01F0009581C0C +:100460005F0C2FFDE3CD8068000087F4800145FC20 +:100470008001EF6C800145FE8003C48C8001776CA5 +:10048000EBCD4068201D18985CB81895FAC3FFFCA6 +:1004900048D606D82F060C9CF01F000C303CF01FED +:1004A000000CF94500E80C9CF01F000A1A9930482E +:1004B000300A309B488CF01F0009581C5F0C2FFD40 +:1004C000E3CD8068000087F4800145FC8001EF6C7B +:1004D000800145FE8003C4988001776CEBCD4068B5 +:1004E000201D18985CB81895FAC3FFFC48D606D8AA +:1004F0002F060C9CF01F000C303CF01F000CF9453F +:1005000000E40C9CF01F000A1A993048300A309B16 +:10051000488CF01F0009581C5F0C2FFDE3CD80684C +:10052000000087F4800145FC8001EF6C800145FEEE +:100530008003C4A48001776CEBCD4068201D18981F +:100540005CB81895FAC3FFFC48D606D82F060C9C59 +:10055000F01F000C303CF01F000CF94500DC0C9C37 +:10056000F01F000A1A993048300A309B488CF01F5F +:100570000009581C5F0C2FFDE3CD8068000087F454 +:10058000800145FC8001EF6C800145FE8003C4B012 +:100590008001776CEBCD4060201D48F5BABC2F057B +:1005A0000A9CF01F000E303CF01F000DFAC6FFFC45 +:1005B0000D78F94800D80A9CF01F000A0C993018F1 +:1005C000300A306B488CF01F0009581C5F0C2FFD5F +:1005D000E3CD8060000087F4800145FC8001EF6C72 +:1005E000800145FE8003C4BC8001776CEBCD40C028 +:1005F000206D49EC3008F939010DF93B010850082C +:1006000050281AD9F93A010C1ADAFAC7FFF8F93961 +:10061000010AF93A01090E9CF01F00152FED580C44 +:10062000C10140085808C0401A9CF01F0012402C1D +:10063000580CC040F01F0010300C2FADE3CD80C02F +:100640001A9CF01F000E400818965808C0401A9CCB +:10065000F01F0008402C580CC030F01F000758163F +:100660005F0C2FADE3CD80C0000087F48001DAE499 +:100670008001D3A8800091E880018E9CD4214C0792 +:10068000405EEF6C0108EF6B0109EF6E010D1495F0 +:100690001294109A3019F2081800C120EEF801B037 +:1006A0005808C3D05828C4C04B5CEF3B01B5338811 +:1006B000F00B1800C5403398F00B1800C440EF6AE7 +:1006C000010CF01F0030EDDCB010F01F002F0C0CFF +:1006D0005C5C5805C1E11895F01F002A1815EF65FC +:1006E000010AF01F0029EDDCB010F01F00260C0CF1 +:1006F0005C5C5804C3F11894F01F00221814EF64D6 +:10070000010B6E98EDB80001C031F01F0020DA2A0D +:10071000EA0C1800FE98FFE23FCCD822EF3901B571 +:100720003348F0091800CC11EF3901B63418F0093C +:100730001800FE98FFC630E8EF68010CCC3BEF696B +:10074000010CCC0BEF3901B63408F0091800FE9803 +:10075000FFB8301948A8F169010CCB4BF93901B643 +:100760003408F0091800FE98FFA835A8F968010CB4 +:10077000CA9BE80C1800FE9BFFD1CBFB000087F45E +:100780008001F4A48001F504800205ECEBCD40E08B +:10079000303CF01F002330CB18954A26300CF01F58 +:1007A0000022ED4C01AC1897C360303BF01F001FD6 +:1007B0008F2CECF901AC72275807C2903078300BBF +:1007C000B2883068ECFA01ACB498ECF901ACB2AB89 +:1007D000ECF801ACB0BBECF901ACB2CBECF801AC7D +:1007E000EB390075702AB489ECF801ACEB39007470 +:1007F000702AB499ECF801ACEAFB00847029B2AB22 +:10080000ECFC01ACF01F000AE3CF90E0ECCCFE540E +:10081000F01F00080E9CE3CD80E000008001EF6C2B +:10082000000087F48001D8DC8001D3EC800208D47A +:100830008001D3A8D401F01F0002DA0A8001DA5641 +:10084000D401F01F0002DA0A8001DF30D401F01F6A +:100850000002DA0A8001DBE8D401F01F0002DA0AA4 +:100860008001DC04D401F01F0002DA0A8001DC20E0 +:10087000D401F01F0002DA0A8001DC3CD401F01F31 +:100880000002DA0A8001DC58D401F01F0002DA0A03 +:100890008001DC74D401201D1A9BF01F000CC09055 +:1008A00040085808C06048AA7499EDB90000C030EB +:1008B0002FFDDA0A1298A1C831CC9598300A149B02 +:1008C000F01F00042FFDDA0A8001D98C000087F4A4 +:1008D00080014658EBCD40C0206D4958189B709C54 +:1008E000E21C0002C06118970E9C2FADE3CD80C0C2 +:1008F00030081A96502850081A9CF01F000EC1119B +:10090000189740085808C0401A9CF01F000B402C54 +:10091000580CCEB0F01F00090E9C2FADE3CD80C067 +:100920001A9C3017F01F0006CEDB0000000087F491 +:100930008001DED08001D3A8800091E880018E9CE8 +:10094000EBCD4080201D300A1A9BF01F0017C0F02D +:1009500040085808C0F149576E99EDB9000BC071B5 +:10096000EEF801A84917F1D8C001C1212FFDE3CF4E +:10097000908048E76E99EDB90000CF01A1C9300A17 +:100980008F9931CC149BF01F000A6E99CE7BEEFC40 +:1009900001ACF01F00086E98301CABD88F982FFD6B +:1009A000E3CD80808001ED10000087F4800146587F +:1009B000800208D4D401F01F0002DA0A8001DBD0E3 +:1009C000EBCD40FC206D4A5318951097169266980F +:1009D0001496109C1294E21C0002C2D05BF5C30175 +:1009E000303CF01F001F300BF3D7C010F5D4C010FF +:1009F0001AD90C981ADAF3D2C010504B502BFAC601 +:100A0000FFF8F93B00F70A9A0C9CF01F00162FED37 +:100A1000580CC1B1189740085808C0401A9CF01FE4 +:100A20000012402C580CC030F01F00100E9C2FAD4F +:100A3000E3CD80FC18970E9C2FADE3CD80FCEDB884 +:100A40000000CCF13FB7CF3B6698A1A81A9C8798CD +:100A50003017F01F0007CE0B000087F48001EF6C09 +:100A60008001DB588001D3A8800091E880018E9C32 +:100A7000D40130085C7B1099109AF01F0002D80254 +:100A8000800209C0D4013008364B1099109A109C8E +:100A9000F01F0002D8020000800209C0EBCD40E048 +:100AA00020AD3006507CFB6B00201497500650267A +:100AB0001A95FACAFFDCFACBFFE81A9CF01F00195E +:100AC000C111189640085808C0401A9CF01F001623 +:100AD000402C580CC030F01F00150C9C2F6DE3CD3E +:100AE00080E05807C09040980E9B0C9C8F28F01F08 +:100AF0000010581CC0611A9C3016F01F000ECE3B2F +:100B000040085808C0401A9CF01F0007402C580CA1 +:100B1000C0313FD6CE3BF01F00053FD6CDFB0000D5 +:100B20008001DC8C8001D3A8800091E880016C40BA +:100B300080018E9CD401F01F0002D80280020A9C22 +:100B4000EBCD40E0209D3018189A1697F00C09481C +:100B50004A5B7609F1E9000CC06118970E9C2F7D65 +:100B6000E3CD80E0F00811FF12683006507A970854 +:100B7000500650261A95FACAFFE0FACBFFE81A9CF5 +:100B8000F01F001AC1E05807C09040880E9B0C9CD3 +:100B90008F28F01F0017581CC1611A9C3017F01FD6 +:100BA000001540085808C0401A9CF01F0013402C44 +:100BB000580CCD50F01F00110E9C2F7DE3CD80E02E +:100BC0001897CF0B40085808C0401A9CF01F000A25 +:100BD000402C580CC0313FD7CC2BF01F00083FD71A +:100BE000CBEB000000007A4C8001DCEC80016C4013 +:100BF00080018E9C8001D3A8800091E8EBCD40F865 +:100C0000216DFAC6FF901897FB69000EFB68000F74 +:100C1000FB6B0010FB6A00116CF46D036D15ECCCDE +:100C2000FFD4F01F0038306ABA6CECCBFFDCFACC92 +:100C3000FFEDF01F00350D88FB6800190D99ECCB16 +:100C4000FFFEFB69001A320AFACCFFE5F01F002E06 +:100C50004AEE30097C0B301CF809094AF5EB000814 +:100C6000C0902FF95899CF9130060C9C2EADE3CD52 +:100C700080F8F7EA10089D085BF9CF705024FB63F9 +:100C8000001250195807EFF91A003006FAC7FFC4CE +:100C900050F65116FACAFFAC1A9B0E9CF01F001CAE +:100CA000C111189640F85808C0400E9CF01F00195A +:100CB000411C580CCDB0F01F00180C9C2EADE3CD9C +:100CC00080F85805C09041580A9B0C9C8B28F01F57 +:100CD0000013581CC0610E9C3016F01F0011CE3B53 +:100CE00040F85808C0400E9CF01F000A411C580CE8 +:100CF000C0313FD6CBBBF01F00083FD6CB7B0000F6 +:100D000080018058800091DC00007A4C8001DD4C2D +:100D10008001D3A8800091E880016C4080018E9C06 +:100D2000D42120DD4B0510946A0E4126F1DEC0016E +:100D3000C0B0EDBE0001C411EDBE0002C411300709 +:100D40000E9C2F3DD82210973018FB6B002A508A3A +:100D50005077FDE8100850998B08FB540028580C78 +:100D6000F9F71A001A953007FACAFFD05007502732 +:100D7000FACBFFE81A9CF01F001DC101189740082C +:100D80005808C0401A9CF01F001A402C580CCD90F7 +:100D9000F01F00180E9C2F3DD8225806C09040C866 +:100DA0000C9B0E9C8D28F01F0014581CC0C11A9C6F +:100DB0003017F01F0012CE4B30173028CC7B302775 +:100DC0003048CC4B40085808C0401A9CF01F00081F +:100DD000402C580CC0313FD7CB4BF01F00063FD7FB +:100DE000CB0B000000007A488001DDAC8001D3A865 +:100DF000800091E880016C4080018E9CEBCD40E04A +:100E0000207D300616975006189B50261A95FACA70 +:100E1000FFE81A9CF01F001AC111189640085808E4 +:100E2000C0401A9CF01F0017402C580CC030F01F17 +:100E300000160C9C2F9DE3CD80E05807C1904068C0 +:100E40000E9B0C9C8F28F01F0011581CC1104008ED +:100E50005808C0401A9CF01F000B402C580CC0D002 +:100E6000F01F000930060C9C2F9DE3CD80E01A9CFA +:100E70003016F01F0007CD3B1896CDCB8001DE0C5D +:100E80008001D3A8800091E880016C4080018E9C95 +:100E9000D40120CDFB5A0012FB590014FACAFFCC32 +:100EA000502874197408FB590016501874397428A6 +:100EB000FB59001AFB580018745974485039FB58F4 +:100EC000001C74797468FB590020FB58001E74994B +:100ED000748850A95098300974A8FB6C0022FB5B01 +:100EE0000010FB68002C74BBFB6900231A9CF01FE8 +:100EF00000032F4DD802000080020DFCEBCD40EE28 +:100F000020CD3FF94CC850A950B94CC93005303CF0 +:100F100091059305F01F004A322A18961A971A9CD9 +:100F20000A9BF01F0048FAC3FFDE306AE06B00FF47 +:100F3000069CF01F00441AD5ED38004F1AD86D28D2 +:100F40001AD86D191AD9ED1800361AD8ED190032D1 +:100F50001AD96CE81AD8ED19002E1AD9ED18002A02 +:100F60001AD8ED1900261AD9ED1800221AD86C6982 +:100F700030BB1AD9301C6D08ED1900FEED3A001F88 +:100F8000F01F0031ECFB01282F4DF6C80001581866 +:100F9000E0880045ED3100F7ECCAFF8C30153006D3 +:100FA0001AD61AD540D81AD8F4E80000206D069B4E +:100FB000FAE900081A9CF4E20008306AFAE300102B +:100FC000F01F0022EF380021209DFB680021EEE891 +:100FD0000000FAE90000EEE20008FAE30008EEE89B +:100FE0000010FAE90010EEE20018FAE30018EF38FA +:100FF0000020029BFB6800200A990C98FACCFF9015 +:10100000303AF01F00130C9A2EED0C9B40ACF01FF1 +:1010100000110A9C2F4DE3CD80EE1AD50A98FACC28 +:10102000FFD05C5B0A99FE7AFF6AF01F000B2FFD70 +:10103000CB2B000000007A4C00007A488001EF6C56 +:10104000800091D080020E908002E73680020BFC77 +:1010500080020A9C80020D20D431202D500B189163 +:101060004A1776026E9CE21C0002C350304C5011AD +:101070005801E2021700F01F001DEEF700F0189073 +:101080005807C2D030043013C0A82FF45802C1B1A1 +:101090005801F9B301FF5805C1100A9760B66E05F3 +:1010A000F01F00130C9A189B0E9CF01F0012CEE04C +:1010B0000E9CF01F00115805CF114008069C9104AA +:1010C0002FEDD83240182012110C0E9B5018F01F33 +:1010D000000BCE2B1893069C2FEDD8320E943013B4 +:1010E000CEDB0000000087F48001EF6C800145C476 +:1010F000800159A080015CDC800184284828F0FC34 +:1011000000F85EFC000087F4486871195879F9B856 +:101110000001F9F80A00F9B80100F9F81A005EFFB9 +:10112000000087F44828F14C007C5EFC000087F446 +:101130004828F14C01D05EFF000087F4EBCD40C0A1 +:1011400018971496E04A0020E088000830083FF91C +:10115000B898B889E3CF80C02FECF01F00043008A6 +:10116000AE96AE88E3CF90C0800091DCEBCD40FC22 +:10117000206D18941695F01F00431897C1A0F939F7 +:1011800000CC3FF8F0091800C3910896EF3900A889 +:101190003FF8F0091800C5414BB8F0F700F85807C0 +:1011A000C0A1EC040104301C8B042FADE3CD80FC06 +:1011B0000896CF3BE06AFFFF300B1A9CF01F00330C +:1011C0006F38302A707C1A9B2F4CF01F00311A9216 +:1011D0006A0A9A93063AC0442FADE3CFC0FC0C9B39 +:1011E0001A9C5C7AF01F00296F380606707C1A9BE7 +:1011F0002F4C300AF01F0026CD5BE06AFFFF300B5A +:101200001A9CF01F0022302AEEC2FF341A9B049C65 +:10121000F01F00201A966A0A9A93063ACDE55C7A86 +:10122000089B1A9CF01F00191A9B049C300AF01F9F +:1012300000196A08E803000606188B08CA8BE06AE2 +:10124000FFFF300B1A9CF01F0011302AEEC7FF5829 +:101250001A9B0E9CF01F00101A926A0A9A93063A83 +:10126000CBC50C9B5C7A1A9CF01F00081A9B0E9C45 +:10127000300AF01F00096A08060606188B08C8DB4A +:101280008001EFF8000087F48001C7B88001D344E3 +:101290008001D6B08001D558D401F01F0002D802D9 +:1012A00080015D18EBCD40F8FACD00803225149313 +:1012B00018941297BA85FAC6FFFF0C9CF01F001B0A +:1012C000300806063019AC85AC981A951A9A498BE5 +:1012D000089CF01F0018C0503FFC2E0DE3CD80F895 +:1012E0000E9CF01F0015E04C0040C1701AD7493A1F +:1012F000E06B00800A9CF01F00120A9A3019491B0B +:10130000089CF01F000C2FFD1897580CCE61089C0C +:10131000F01F000D0E9CCE2B0E9A089C3019489B96 +:10132000F01F0004CDB0CD9B800091DC8003C4FC95 +:1013300080023BB8800091B8800399D0800091482A +:101340008003C50480024328D421210D300B4B6655 +:10135000169CF01F00368D0CC2B078075807C2A04B +:101360006F985808C2704B283014EF4400641A95E7 +:10137000340B1AD84AFA0A9CF01F002F08990A9ACF +:101380004AEB0E9CF01F002E2FFD580CC2506C082B +:10139000700CF01F002C6C09300893086C08700961 +:1013A0004A98722A910A6C09300893486C0C2F0DE8 +:1013B000D822F01F00261897CF70F01F00254A583A +:1013C0004A59118A4A5B0E9CF01F0025C2056E29FE +:1013D00049D89109CE9B08994A2A4A3B0E9CF01F96 +:1013E0000018C1C14A18340B1AD8492A0A9CF01FA8 +:1013F000001208990A9A49EB0E9CF01F00112FFD6C +:10140000580CC0C13088EF480054CC9B0E9CF01F94 +:10141000000D6C0930089308CC7B0E9CF01F00096E +:10142000CB7B000000008C8C80023B4C8003C50805 +:10143000800399D0800091488003C4FC80023BB8AF +:1014400080024190000003FC80024F4080023B225A +:10145000000004000000042800000404800212A41C +:101460008003C5108003C5148003C5188003C538E8 +:10147000D421169849871495189B109A49740E9C8C +:10148000A888F01F00170A9B30064965EF66002008 +:10149000341A0A9CF01F001449484959EB66004071 +:1014A000700B720CF01F00131896C0C0F01F0012D2 +:1014B0000A99098A0E9B0C9CF01F00106D185808A1 +:1014C000C021D822ECCAFFDC0A9C3209341BF01F71 +:1014D000000CD8220000040400000400800091DC0D +:1014E00000000428800091AC000003FC00008C8CFC +:1014F00080023B0680023B22800212A480023A68EE +:10150000D421210D328A300B1A9CF01F00301A9C16 +:1015100030073014504750544AD5F01F002E8B0C22 +:101520001A96C4A0FAC6FFD8318A0E9B0C9CF01FF5 +:1015300000274A984A990C9B50E850A96A0CF01F62 +:1015400000281896C3B04A7CF01F00274A761AD7A5 +:10155000304B1AD70E984A694A6AEC0B000CF01F00 +:1015600000260E981AD74A591AD74A5A302B0C9C83 +:10157000F01F00210E981AD74A291AD74A2A311B80 +:10158000ECCCFFF8F01F001C0E981AD749F91AD7B7 +:1015900049FA312BECCCFFF4F01F00170E982F8D79 +:1015A000ECCCFFF01AD749B91AD749BA315BF01F12 +:1015B0000012089C2FED2F0DD8226A0CF01F001787 +:1015C0000C9C8B06CF9B0000800091D000007A50CD +:1015D00080022B4C8003C5448003C54C80022C0440 +:1015E000800216FC8002113000007A5480021670CE +:1015F0008003C55480016EB8800217408003C3ACDD +:10160000800216C48003C5708002168C8003C58CCE +:101610008002161C8003C5A480022AF8EBCD40C0CE +:1016200021AD189798E8EDB80000C181368A300BDB +:101630001A9CF01F000C306A0E9B1A9CF01F000AC7 +:101640006E2830195C3850395028488870091A962D +:101650001A9A720C306BF01F00062E6DE3CD80C01D +:10166000800091D0800091DC00007A508002792CBB +:10167000D40148587009300A720C301BF01F000367 +:10168000D802000000007A508002792CEBCD404057 +:1016900021AD368A300B1A9CF01F000830084889AB +:1016A000500872081A961A9A700C302BF01F000519 +:1016B0002E6DE3CD80400000800091D000007A5074 +:1016C0008002792CEBCD404021AD368A300B1A9C3C +:1016D000F01F000830184889500872081A961A9AA4 +:1016E000700C302BF01F00052E6DE3CD8040000004 +:1016F000800091D000007A508002792CD401487883 +:10170000700EF6C9000E189AF8CBFFFA2F2A7C0C3F +:10171000F01F0003DA0A000000007A50800224E083 +:10172000D401580CC051304CF01F0004D802304C8A +:10173000F01F0003D80200008001A12880019F3023 +:10174000EBCD40E0FACD0170FACCFE98F01F001905 +:10175000581CC22145A85818E088001FE068010005 +:10176000FACBFE901A9C16D8F01F00131A95189603 +:10177000FAC7FF00368A300B0E9CF01F0010581677 +:10178000C11048F870090E9A720C300BF01F000D52 +:101790002A4DE3CD80E0300CF01F000B2A4DE3CD45 +:1017A00080E045B85808FE9AFFEE540D5418CEABB1 +:1017B00080015F448002116C800091D000007A505B +:1017C0008002792C80021720000000000000000039 +:1017D000EBCD40C0F8F800D418971696F0F80088C2 +:1017E000F8FA00E85808C040F8FC00C45D185876C4 +:1017F000C1A058065F0858365F091248C11030185A +:10180000EF4800ECEEF900D473985808C050300B44 +:10181000EEFC00C45D18EF4600E8E3CD80C05846FA +:10182000CEF0CFABEEF800EC5808CF603008301B9C +:10183000EF4800ECEF4B00F0EEF800D47198580838 +:10184000CE81CEABD401F01F0002D802800217D0A7 +:10185000F8FC00E85EFCD401F8F800D471A8580840 +:10186000C050F8FC00C45D18D802109CD802D40106 +:10187000F8F800D471185808C050F8FC00C45D187E +:10188000D802DC0AD401F8F800D471285808C050F6 +:10189000F8FC00C45D18D802DC0AD703EBCD408009 +:1018A0003008F8F90108F94801085809C031C08822 +:1018B0000E997207129CF01F00045807CFA1E3CDC8 +:1018C00080800000800091E8D401F8FC00DCF01F6B +:1018D0000002D8028002B4A4D401F8FC0090F01FEA +:1018E0000002D80280023B8CD401F8FC0090F01F6B +:1018F0000002D80280023C84EBCD40C01696F8F777 +:1019000001085807C051C0B86E075807C080EECC18 +:10191000FFFC306A0C9BF01F0004CF710E9CE3CDDE +:1019200080C000008000917CD4011699F8F801185D +:101930005808C0A1F8F800D470285808C0C0F8FCB6 +:1019400000C45D18D802F8CBFF64306A129CF01F07 +:101950000003D80ADC0A0000800091DCEBCD40F8DF +:1019600020AD1897F8F801185808C06030070E9C91 +:101970002F6DE3CD80F8F8F800D470385808CF7098 +:10198000F8FC00C41A9B1A935D181895CF05EEF861 +:1019900001185808C431EEF800D470285808CE70E9 +:1019A000FAC4FFE0EEFC00C4089B5D18CE05EEFC17 +:1019B000009078465806C301EEF800D45808C2C01B +:1019C000700C49BBF01F001BEFFC0024F9B60001AE +:1019D000EFFC102478075807C111CCAB5806C0B0F3 +:1019E0006E885808CC50EECBFFE8306A089CF01F98 +:1019F0000012CBE06E075807CBB0EEF80194580800 +:101A0000CFA16E581035CEB16E4B0A9A1A9CF01FBA +:101A1000000ACE70CE4B3006CDEBFAC4FFE0306A40 +:101A2000EECBFF64089CF01F0005CC2B8003C65C46 +:101A3000800091A08000917C800091DCD401F01F97 +:101A40000002D8028002195CD42120AD3008FB5876 +:101A50000024508816961897F6F801845818C0404C +:101A60003FFC2F6DD82277185808CFB0F8F500B892 +:101A70005885C2205905CF512DCB0A9A1A9CF01FC8 +:101A800000171A940A9A303BEEFE00D47C5858088E +:101A9000CE801ADA1AD43009EF490104EEFC00C4F2 +:101AA00030681AD8FACAFFD430181ADA48CA7C56F5 +:101AB0005D162FCDCD7B2DCB318A1A9CF01F0007F0 +:101AC0000A9AECCBFFCCFACCFFE8F01F00041A9482 +:101AD000320A302BCDAB0000800091DC80039C38B3 +:101AE000D42118951696F01F000F1897C05078381B +:101AF0002FF89938D82A310CF01F000B1894C0F039 +:101B00000C9B306A2FCCF01F000930188938EAF995 +:101B100001088909EB4401080E9CD822DC2A000048 +:101B2000800218F880028F24800091DCEBCD40FC0D +:101B3000EDD9C010407218941693ECCCFFFC1495AC +:101B4000910CF01F00161897C190E8F800907039BA +:101B5000EC081608B893B889B8B6B8A85805C100FB +:101B60000C9A0A9BF8C6FFFC0C9CF01F000D0E9C03 +:101B70005802E5F61A00E3CD80FCE3CD80FC0C9A18 +:101B80000A9BF8C6FFFC0C9CF01F00060E9C580236 +:101B9000E5F61A00E3CD80FC80009200800091DC25 +:101BA000800091D0D401401E5C791ADEF01F000243 +:101BB0002FFDD80280021B2CEBCD40F8203DF8F819 +:101BC00000BC1493129458485F0A58285F0918976C +:101BD00016961449C0603FF70E9C2FDDE3CD80F8C8 +:101BE000F8FC00DCF01F002BC0305816CF50EEC5BB +:101BF000FF64306A4A8B0A9CF01F0028C0D1EEF8BF +:101C000000D470285808C060EEFC00C41A9B5D1810 +:101C1000C370EEC5FF043008F7D6C0081AD8F3D455 +:101C2000C010FAC8FFF4069A0E9CF01F001D2FFD8D +:101C30001896580CCD1040296E2C580CC1001298E3 +:101C40000A9B0C99E06A888EF01F001618970C9C6E +:101C5000F01F00150E9C2FDDE3CD80F8EEF800D4C8 +:101C600071845804C0B01298EEFC00C40A9B0C9911 +:101C7000E06A888E5D141897CEBB3FF7CE9B306A22 +:101C8000485B1A9CF01F0005CC501A95CC5B0000F5 +:101C900080028F78800217C88000917C80021B2C04 +:101CA00080028154800091E8EBCD40C0189EEFDAAD +:101CB000C010782C580CC0600E9AF01F0009E3CDBC +:101CC00080C0FCFA00D475865806C0700E9AFCFCE1 +:101CD00000C45D16E3CD80C0E3CFC0C08002815454 +:101CE000D421497A1894301BF01F0016300A089B43 +:101CF000495CE8C5FF64F01F0015E8F701085807C4 +:101D0000C1C03006C0680E966E0C580CC1601897A2 +:101D1000306A0A9BEECCFFFCF01F000DCF51580635 +:101D2000EFF80000E9F80A42EFF81000EDF81A00A9 +:101D30000E9CF01F0008D822D82200008003C66441 +:101D400080023A1A80023058800274008000917C30 +:101D5000800091E8D401F01F0002D80280021CE04C +:101D6000EBCD408048FA1897301BF01F000FEEF8BB +:101D700000BC5818C0F00E9B300A48CCF01F000C75 +:101D80000E9CF01F000C0E9C307BF01F000BE3CD6F +:101D900080800E9C305BF01F0008E3CD8080000047 +:101DA0008003C68880023A1A8002360080027400DE +:101DB00080021CE0800217D0EBCD4040486A1896A4 +:101DC000301BF01F00060C9B300A485CF01F00051A +:101DD000E3CD80408003C6A880023A1A8002360014 +:101DE00080027400EBCD40F81894F8FC00CC580C3D +:101DF000C360E8F800D05808E08A00321897E8C3BA +:101E0000FF643005C0A8580AC200EEC7FF64E8F8B6 +:101E100000D00A38E08A00242FF5E8F600B0306AD6 +:101E2000069B0E9CF01F0015CF115806C0E06C5A9F +:101E30006EA81438CE91EECCFFFA6C4BF01F000F59 +:101E4000C0406C5A580ACE215807C0906F5AEECB4A +:101E5000FFD4E8FC00DCF01F000AC0403FFCE3CDEB +:101E600080F8EECBFFA8E8FC00DCEEFA0080F01F63 +:101E70000005CF60CF4B00008000917C8002B58CC4 +:101E80008002B52CD4211895E06C009CF01F001B3B +:101E90001897C310EAF401185804C2A1EAF800D454 +:101EA00070C85808C250189B301AEAFC00C45D186C +:101EB0001898C1E50E9C3016E06B009CF0060D46AC +:101EC000EC0B024BF01F000E58065F09580C5F1810 +:101ED0001248E8081800F8071710EAFC00CCF01FB9 +:101EE0000009089CEB4600D0EB4700CCD8220E9CA2 +:101EF000F01F0004DC2A000080009200800091F4B2 +:101F0000800091E8EBCD40801897F01F0008C031A9 +:101F1000E3CD80800E9CF01F0006C0550E9CF01F84 +:101F20000003CF7BE3CFC08080021DE480021E84CB +:101F3000EBCD40FE208D18961697149512921091B5 +:101F4000580BC580F6FB0080580BC0E16F5B580B47 +:101F5000C3210C9CFEFA02E4303BF01F00B93FFCA9 +:101F60002F8DE3CD80FE7568EDB80001CF011A9A80 +:101F7000EECCFFA8F01F00B3CEA16B484029126839 +:101F8000CE606B3840191268CE206B584039126809 +:101F9000CDE0FEFA02B2301B0C9CF01F00A9EEC48B +:101FA000FFD4302A303BECFC00DCF01F00A8089C7A +:101FB0006F5AC4386B68EDB80000CCC1EEC4FFD4D2 +:101FC0001A9A089CF01F009FCC516B484029126858 +:101FD000CC106B3840191268CBD06B58403912685E +:101FE000CB90FEFA026A301B0C9CF01F0095301A51 +:101FF000CDAB7568E21800021A93F9B40102F9B486 +:102000000001F8FC00DC1A9BF01F0092C1F05BECB1 +:10201000C4001A9C320A300BF01F008F6B48502806 +:102020006B3950196B585038089A303BECFC00DC87 +:10203000F01F0086300C189A189BECFC00DCF01F97 +:102040000087C3602F8DE3CFC0FE402A6B49F3EABF +:102050000008C0D0401A6B39F3EA0008C110403ABA +:102060006B59F3EA0008C1B04004CDFB1AD9302BFC +:102070001ADA0C9C4FAAF01F00722FEDCCBB1AD9B4 +:10208000302B1ADA0C9C4F7AF01F006D2FEDCC2B01 +:102090004F5A302B0C9CF01F006ACBCB1AD9302B37 +:1020A0001ADA0C9C4F1AF01F00662FEDCB3B580735 +:1020B000EE0B1700F60A1700F9B80158EFD8E10B3C +:1020C000EFFA1020ECFC00DCF01F0069CBC16B487C +:1020D0004029F1E90009EDB90004C5D0EDB90003CC +:1020E000C750EDB90002E081009430484E1AED4827 +:1020F00000B8301B0C9CF01F00526B384019F1E9FE +:102100000009EDB90004C500EDB90003C7513088DE +:102110004D9AED4800B4301B0C9CF01F00496B58E1 +:102120004039F1E90009EDB90000E080007FEDB928 +:102130000001C55130284D1AED4800BC301B0C9CE5 +:10214000F01F003FECFA00BC306BECFC00DCF01F31 +:10215000003FECFA00B4304BECFC00DCF01F003B1D +:10216000ECFA00B8305BECFC00DCF01F0038029A9F +:10217000049BECFC00DCF01F00421894FE91FF640D +:102180006B57E2170002C191ECFC00DCF01F003D30 +:102190000E9CCE7A31084BCAED4800B8301B0C9C1F +:1021A000F01F0027CABB31084B8AED4800B4301B32 +:1021B0000C9CF01F0023CB4BECFC00DCEACBFFDCDB +:1021C000320AF01F0033089CCCCA30884B1AED4805 +:1021D00000B8301B0C9CF01F001AC90BEDB90004AD +:1021E000FE91FF3231084ACAED4800BC301B0C9CFE +:1021F000F01F0013CA8BEDB90000FE91FF25301BC4 +:102200004A6AED4B00B40C9CF01F000DC89BEDB961 +:102210000001FE91FF1930284A1AED4800B8301B22 +:102220000C9CF01F0007C6AB301B49EAED4B00BC0D +:102230000C9CF01F0003C87B8003C8EC80023A1A94 +:102240008002BD688003C6C08002B4D48003C6E0AB +:102250008002C04C800091D08002B58C8003C734CE +:102260008003C7788003C7008003C7BC8002B52CF9 +:102270008003C8288003C86C8003C8B08002B64CB5 +:102280008002B9EC8003C8008003C8588002B91CE2 +:102290008003C8148003C8CC8003C8808003C84072 +:1022A0008003C894EBCD40C07758EDB80003F9B86F +:1022B0000008F9F80A2FF9B80104F9F81A2F18974D +:1022C000300A1696F8FC00DC149BF01F0025300A3B +:1022D000EEFC00DC149BF01F0023300AEEFC00DC57 +:1022E000149BF01F002130183009ECCBFECCEF48D6 +:1022F00000B8EF4800B4EF4900C02FF976085858ED +:10230000E08B00225808C2512FCB5849CF71EEFA0A +:1023100000BC306BEEFC00DCF01F0014EEFA00B4E1 +:10232000304BEEFC00DCF01F0011EEFA00B8305B21 +:10233000EEFC00DCF01F000DEEFC00DCF01F000CDA +:10234000E3CD80C03048EF4800B8EF4800B4CE0B72 +:102350003028EF4800B8EF4800B4CDAB8002B58C10 +:102360008002B52C8002B5EC8002B4D480028F804C +:10237000EBCD40E0205D1897F8F600B0F8F800BC0F +:102380005828C57059085F0958485F081248C2901C +:10239000302BEEFC00E0F01F002F314A300B1A9C6E +:1023A000F01F002D1A95EEFA00BC588AC200EEF814 +:1023B00000905808C03070785028149958895F18D8 +:1023C00058195F191069ECF8017CEEFC00E01A9ACC +:1023D0000C9B50495038F01F00212FBDE3CD80E009 +:1023E000300BEEFC00E0F01F001BCD8B30085018C6 +:1023F000301B500BECF900F0F3EB0008FBFB1A016B +:10240000EDB90001C120EEF800905808C1F0EEFCD3 +:1024100000D4580CCD10780C491BF01F0012FBFCA7 +:102420000A01EEFA00BCCC4B4018A1B85018CECB34 +:10243000300BF8FC00E0F01F000C300BEEFC00E06D +:10244000F01F000AEEF800BCC9EB3089CB8B00000E +:1024500080026178800091D08002581C8003C65CA5 +:10246000800091A0800261A48002618CEBCD40E0ED +:10247000189716951496F8F800905808C0D0704830 +:102480005808C0A1F8FC00D4580CC060780C48EB88 +:10249000F01F000EC1501AD648DA1AD5301B0E9C18 +:1024A000F01F000C300A0E9B48BCF01F000C0E9968 +:1024B0000C9B0A9C3008488AF01F00092FEDE3CDE1 +:1024C00080E000008003C65C800091A08003C960AA +:1024D00080023A1A800230588002740080027474BC +:1024E000D4211295169614941897F8F900BC5849FF +:1024F000C1C0F8FA00F4580AC10158895F08581998 +:102500005F0B104BF40B1800F9BB000AF9BB014636 +:10251000F01F0019EEFA00F4F4C8FFFFEF4800F4D2 +:10252000EEF900945809C020D822306A0C9BEECCFA +:10253000FF04F01F0012EEF800BC5828C111EEF89D +:1025400000D471585808C040EEFC00C45D180A99C8 +:10255000089A0C9BEEFC00DCF01F0009D8220A99B7 +:10256000089A0C9BEEFC00E0F01F0006FE99FFDECF +:10257000CE7B00008002246C800091DC8002C3CC02 +:10258000800261FCEBCD406C1ADA18951ADB1692CA +:102590001493301B48AAF01F000B48B6300A0A9B60 +:1025A0000C9CF01F000A0A990C9A069B049C3008A8 +:1025B000F01F00072FEDE3CD806C00008003C99071 +:1025C00080023A1A8002360080027400800274741D +:1025D000D401F01F0002D80280022584EBCD40C058 +:1025E000189E1497109CFCF800BC5888C240580BE9 +:1025F000C1A0FCCAFF64FCF600D46C585808C19016 +:102600001ADC16981AD9300BFCFC00C41ADBFD4BFF +:102610000104490E0E991ADE301B6C565D162FCD43 +:10262000E3CD80C0FCF600D448BA6C585808CE916F +:10263000E3CFC0C0585CF9B80002F9B80104580BE8 +:10264000C040FD4800B4CD6BFD4800B8482ACD4BD2 +:1026500080037E2080039C38EBCD40F8FACEFFE863 +:1026600018967C35F8F400D47C037C17685C7C2ECB +:10267000580CC0F01AD51ADE300E1AD71AD3ED4E08 +:102680000104ECFC00C468565D162FCDE3CD80F844 +:10269000E3CFC0F8D42118951694F8F70104580731 +:1026A000C020D822F8F900D472585808C4C01AD7EC +:1026B000F94701041AD70E981AD74B6A1AD70E9BFE +:1026C0007256F8FC00C40E995D16EAF900D42FCDBD +:1026D00072585808C3801AD7EB4701041AD70E98CE +:1026E0001AD74ACA1AD70E9B7256EAFC00C4301990 +:1026F0005D16EAF900D42FCD72585808C2401AD797 +:10270000EB4701041AD70E981AD74A2A1AD70E9BFC +:102710007256EAFC00C430295D16EAF900D42FCDC8 +:1027200072585808C1001AD7EB4701041AD70E98FF +:102730001AD7498A1AD70E9B7256EAFC00C4303960 +:102740005D162FCD5804C200EAFA00D47458580818 +:10275000C12030091AD91AD9EB4901041AD91298A3 +:102760001AD9129B7456EAFC00C4089A5D16EAFA5C +:1027700000D42FCD75A85808C070089B3019300AB6 +:10278000EAFC00C45D183018EB480104D8220000B0 +:1027900080039C38D421204DF8F900D41897169561 +:1027A00073885808C2C11094F8C6FFEAC1C8EEFC8D +:1027B00000C45D1B1AD4189B0E984C19E06A888ED1 +:1027C0000C9CF01F00408F2C2FFD580CC111580598 +:1027D000C140189B305CF01F003CEEF900D47388B8 +:1027E0005808C0D1737B580BCE31169CCE4BEECB24 +:1027F000FFF0F01F0036C1302FCDDC2A7378580867 +:10280000C0B0EEFC00C45D18C070189B306AEECCFE +:10281000FFF0F01F002F6E2C580CCEA1EF39007A7C +:102820003008F0091800C3A1EEF800D47048580829 +:10283000C100301BEEFC00C45D18C0B4EEF800D43B +:1028400071485808C0601A9BEEFC00C45D18C214A1 +:10285000300B0E9CF01F001FEEF800D47099580941 +:10286000C070300BEEFC00C45D19EEF800D470A807 +:102870005808C050301BEEFC00C45D183018EF48FB +:1028800000C84959300C72082FF893082FCDD82270 +:102890004038F1D8C002CDD0CB0B300848891AD8C7 +:1028A000E06A888E0E98EECBFFF0EECCFF86F01F2C +:1028B00000058F3C2FFD580CCB81C9FB800224E022 +:1028C0008002819C80028F1C800281E4800091DC68 +:1028D0008002269400007A6CEBCD40E018971695A4 +:1028E000300BF01F001DEEC6FF64306A49BB0C9C24 +:1028F000F01F001BC2E0EEF801185808C1F00C9B55 +:102900000E9CF01F00183006EEFC00DC0C9BEF461E +:1029100000B0F01F00150C9A0C9BEEFC00E0F01FBD +:1029200000130C9BEEFC00E0F01F00110C9BEEFC72 +:1029300000E0F01F0010E3CD80E0EEF800D470D886 +:102940005808CDE00A9A0C9BEEFC00C45D18CD8BB4 +:102950001896CD6B800217D0800217C88000917C3A +:10296000800226948002B9D48002581C800261E85B +:10297000800261D4D401F01F0002D802800228D85E +:10298000EBCD40C01897F8F800C45808C230303B6F +:10299000F01F003DEEF800D470495809C070300BAC +:1029A000EEFC00C45D19EEF800D470A95809C0709F +:1029B000300BEEFC00C45D19EEF800D47098580896 +:1029C000C050300BEEFC00C45D18300B0E9CF01FA5 +:1029D000002F6E2C3006F01F002E8F266E3C580CF8 +:1029E000C040F01F002B8F36EEF800E45808F9B80D +:1029F0000100EFF81A39EEFC0090580CC060F01F8F +:102A000000253008EF480090EEFC008CF01F0022FB +:102A10003006EEFC00DC0C9BEF46008CF01F001F24 +:102A2000EEFC00E0F01F001EEEFC00DCEF4600E0D4 +:102A3000F01F001CEEFC00DCF01F001BEEFC00DCB5 +:102A4000F01F001A0E9CEF4600DCF01F0019EEFC90 +:102A500000CCF01F00110E9CEF4600D0EF4600CCDA +:102A6000F01F00140E9CF01F0014EEFC00C4580C64 +:102A7000C070EEF800D470785808C0205D18E3CD1F +:102A800080C00000800228D88002269480028174D1 +:102A9000800242B4800091E88002B4CC800256ECFF +:102AA00080029438800294088002C0788002189CCA +:102AB00080021DB880021CE0EBCD4080169778099B +:102AC0001639C0F1761899080E9CF01F000A0E9C6A +:102AD000F01F0009E3CF808072180E38C060109993 +:102AE0005809CFB1E3CFC0806E189318CEEB000029 +:102AF00080022980800091E8EBCD40801897580C27 +:102B0000C051C1980E9CF01F000D6E0B580BCFB139 +:102B1000F01F000BF01F000B6E4C580CC060F01F34 +:102B2000000A6E4CF01F00096E8CF01F00080E9C0E +:102B3000F01F0006E3CD808080022AB88002724C2C +:102B40008002728480028F20800091E8EBCD40C02B +:102B50001897580CC05130060C9CE3CD80C0F01F74 +:102B60000021CFA1334CF01F00201896CF606E08D3 +:102B70006E19991899296E286E89993899996E3C21 +:102B8000580CC040F01F00198D4C6E7C580CC04092 +:102B9000F01F00168D8C6E498D59495891096E5A57 +:102BA0008D6A4948910A49486E698D7991090C9C52 +:102BB000F01F0012C11130196C988DB95808EDF949 +:102BC0001A0C6C285808CC906C185808CC606C4CC7 +:102BD000F01F000BCC200C9C3006F01F000ACBDB52 +:102BE0008002720880028F24800091940000046C9F +:102BF00000007AA400007AA0800275F880028F1E7F +:102C000080022AF8D431204D580C5F08580B5F0918 +:102C1000189316971248C05030050A9C2FCDD83211 +:102C2000E06C011CF01F00C01895CF803018F948E7 +:102C3000010CFEF102F66E22620B580BC100580225 +:102C4000E0800144E2C4FFFC3006760B049CF01FD8 +:102C500000B8C0C02FF6090B580BCF810A9CF01F9B +:102C600000B50A9CF01F00B4CD8BE2060328EB48A8 +:102C700000D46E0C580CE0800122F01F00B0EB4C29 +:102C8000008CF01F00AFEB4C0090CE906E185808EF +:102C9000C0A0785CF01F00A86E1CEAF60090F01F40 +:102CA00000A78D5C6E385808C0C0EAF8009070BC70 +:102CB000F01F00A16E3CEAF60090F01F00A08DBC52 +:102CC000EAF800905808CCB06E4C580CCC80F01F3D +:102CD000009DE04C0063FE9BFFC3EAC1FFEA364A59 +:102CE0006E4B029CF01F00986E5C580CE08100F95E +:102CF0006620340CF01F008C1897CB10FEF8024CA5 +:102D00008F78FEF8024AFEF9024A8F98FEF80248D0 +:102D10008F058F458F658F898FC83006FEF4023C82 +:102D20008F168FA4FEF202388FB2EAF900907288F3 +:102D30008FD8EAF9009072988FE8EAF9009072A8AB +:102D40008FF8F01F0088EB4C00E0E08000C20C9B85 +:102D5000F01F00850C9BEAFC00E0F01F0084EAF8FD +:102D600000D470685808E08000A7029B0A9C5D1898 +:102D7000EB4C00C4FE90FF74EAF8009070BBEAF8D8 +:102D800000D470895809C0605D19FE95FF69EAF8A2 +:102D900000D471685808C0F0EAFC00C45D181897A8 +:102DA000C0A0029BF01F0062C0600E9B364A029CCE +:102DB000F01F006534CCF01F005CFE90FF514EC840 +:102DC0004EC9991899294EC84EC9993899494EC883 +:102DD0004EC9995899694EC84EC9997899894EC873 +:102DE0004EC9999899A94EC84EC999B899D94EC853 +:102DF0004EC999C899E94EC84EC9F9440040F942F4 +:102E00000044990599F8F9490048F01F0069EB4C16 +:102E100000DCFE90FF25EB39007A3008F00918003D +:102E2000C5C1300A029BF01F0063EAF80090EAFC7B +:102E300000DC707BF01F0060EAFB00E0EAFC00DCD5 +:102E4000F01F005EEAFA009074C85808C60174D8F2 +:102E50005808C52174EA580AC080302BEAFC00DC0F +:102E6000F01F0057FE91FEFC009B0A9CF01F0055CE +:102E7000FE95FEF6EACBFFF0EAFC00DCF01F005204 +:102E80003FF8EB4800E4EAF900D473485808C0D092 +:102E90001A9BEAFC00C45D18C0814038EDB80002FE +:102EA000C0413018EB4801188B0366088B18870562 +:102EB000FE9FFEB5EB4800C4CD2A6E3B6E1CF01F92 +:102EC0000043EB4C0090CFDAF94B00D4CD3A0E9C86 +:102ED000F01F0019FE9FFEC4EACAFF86CA4BF01F0E +:102EE000001958FCFE9BFEBC6E5B310AEACCFF86E3 +:102EF000F01F0015CFEA109A301BEAFC00DCF01F2F +:102F00000030FE91FEADEAFA0090CA5B109A300BD9 +:102F1000EAFC00DCF01F002AFE91FEA2EAFA009013 +:102F2000C97B000080028F2400000470800091A003 +:102F300080022980800091E88000919480021348EB +:102F4000800091B8800091AC80021D60800225DC79 +:102F500080021BB8800218C8800218E8800218D8C6 +:102F60008002609C800261E8800261D48002184483 +:102F700080021850800225D0800229748002304CD3 +:102F8000800226588002360080021A3C80021928EE +:102F900080021CA880021F0480021BA480021D5412 +:102FA0008002186E80021884800218568002C0DCED +:102FB0008002B4C08002B4B88002B4CC8002B4D421 +:102FC000800227948002B90480023B4CEBCD40E0A4 +:102FD000306A18971695F8C6FF64497B0C9CF01F61 +:102FE0000017C270EEF801185808C1800C9B0E9CA7 +:102FF000F01F00130E9CF01F00133006EEFC00DCE7 +:103000000C9BEF4600B0F01F00100C9A0C9BEEFCDE +:1030100000E0F01F000EE3CD80E0EEF800D470E891 +:103020005808CE500A9A0C9BEEFC00C45D18CDFBEC +:103030001896CDDB800217C88000917C8002269410 +:10304000800276648002B9D48002581CD401F01F3B +:103050000002D80280022FCCEBCD40C0499BF8C7BC +:10306000FF641896306A0E9CF01F0017EDFB189C49 +:10307000E06800A2EDD8E007EDFB08A20FD81AD84F +:103080000FC91AD90FB81AD80FA91AD90F9848FA28 +:103090001AD80C9C1ADB302BF01F000D0E9B0C9CD9 +:1030A000F01F000CECFC00DCF01F000B303B0C9C14 +:1030B000F01F000A30182FADED4800A8E3CD80C006 +:1030C000800217C88000917C8003C9B880023A1A38 +:1030D00080021AE08002BA1C80022FCCD431FACDD3 +:1030E00000D03007F94700A8189516941491580B92 +:1030F000E0800217F6F60084E8CCFFFA76ABF01F0A +:10310000012A1AD61ADC09D81AD809C91AD909B855 +:103110001AD809A91AD909981AD809890A9C1AD95A +:10312000FEFA0488302BF01F01220E9B306A2F8D8F +:10313000EACCFF64F01F011F306A089BEACCFF5EF7 +:10314000F01F011D0A9CF01F011D300AEAFC00DC83 +:10315000149BF01F011B635AEDBA0003C061E2F833 +:1031600001745808E08100B1301063795809C0E05B +:10317000E1D9C0011298EDB90001E08000A4EDB9D9 +:103180000002F9B80004E1D8E030EAF800D4710890 +:103190005808C060009BEAFC00C45D18635A5804DC +:1031A000C07069585808C5A0F1DAC002C6E114978A +:1031B000E2170013C5B1029B0A9CF01F0102FAC876 +:1031C000FF9453375028089B0A9CF01F00FFEAF831 +:1031D00000B45828E08001BAE089007F5818E080E8 +:1031E000017130285038EAF800B85828C7F058283C +:1031F000E08900805818E080016230285048EAF9E0 +:1032000000BC58495F0B58895F08F7E81008C78071 +:10321000E2C9FECCE2C8FF0C16963007EC1600019E +:103220005019500812931092505766095809E081BE +:1032300001122FF72FC32F025847CF81EAF900BCA4 +:103240005889C671E2F800F04059F1D8C002F3E89D +:103250001008E08101311096C5F8E8F800805808A0 +:10326000CA70F1DAC002CA40C1083509FAC8FF3095 +:1032700010D9029AFAC9FF94300B50290A9CF01F0A +:1032800000D3CA202CCDD832E2F801485808E0819A +:10329000010FEAF900B0089A300BEAFC00DCF01FDD +:1032A00000CCE080017A3509FAC8FF3010D9029AC3 +:1032B000FAC9FF94089B50290A9CF01F00C4C8401B +:1032C000CE2BA1B0C5DBE2F801785808F9B00004B4 +:1032D000F9B00105C4BB5848C8605908C831303935 +:1032E0005039EAF800B85828C83130195049C88B0D +:1032F0005848C8505908C82130395049C81B3008AF +:103300005058E2C8FECC30165018E2C8FF0C5008E6 +:103310005909E080011FEAF800D470A85808C0508D +:103320000C9BEAFC00C45D18303B0A9CF01F00A90E +:10333000354AFAC7FFE8300B0E9CF01F009E580478 +:10334000E0800126E8F8008450645098E8C8FFFA4D +:10335000507868A95089E2FA0184581AE080009EEA +:103360004029403850A950C84049433850D950B836 +:10337000EAF800BC5848E08000E7E0890088581867 +:10338000E08000A43018510A4014400350E850F087 +:10339000FACAFFAC0899069BFACCFF9C7208580841 +:1033A000C040F54BFFF0720814A82FC92F0B183A34 +:1033B000CF61E2F801445198EAF601185806E0801E +:1033C0000089FEFA0212302B0A9CF01F0079301996 +:1033D000EAF800BC5908E080008F5809E0800098A6 +:1033E000305B300A0A9CF01F007D40585808C1C06D +:1033F000EAF800D471485808C170FACBFF44EAFCDF +:1034000000C45D18C1114328EDB80001C0D1189760 +:103410004F30189268095809E08100A12FF72FC496 +:103420002F035847CF81EAF800B05808C070103118 +:10343000C050EAFC00E0F01F006BEAFC00DC029BDD +:10344000EB4100B0F01F00680A9CF01F00682CCD13 +:10345000D832EAFB00D4E2FA014476585808C13069 +:103460001AD91AD23009EB4901041AD94DC90E3ABA +:103470005F081AD94DEA76560E99301BEAFC00C453 +:103480005D162FCD30165056CD5A5888C2005908B7 +:10349000FE91FF7A3048C78BE2F901A45809FE9AE1 +:1034A000FF6140985808FBF90A09C5BB6368F1D869 +:1034B000C021CF0A50375047C2FB30085048CA0AD3 +:1034C00030085038FE9FFE913008C5EB3038C5CB30 +:1034D000EAF800D470F85808FE90FF750E9BEAFCDD +:1034E00000C45D18FE95FF6F0C99EAF800BC5908FE +:1034F000FE91FF75029B0A9CF01F003E0A9CF01F84 +:10350000003E307B0A9CF01F0033C70BEAF80090A6 +:1035100070495819F9BB000AF9BB013CC63B745B02 +:10352000744CF01F00214B5A1ADC302B0A9CF01F00 +:103530000020306A089BEACCFF5EF01F001E2FFDC2 +:10354000FE9FFE023028C20B30195039FE9FFE4DFF +:10355000029B0A9CF01F0027CDFAEAFB00D4E2FA96 +:10356000014476585808FE90FF5B1AD91AD3EB42F3 +:1035700001041AD20E3A5F081AD00E99765649CA3B +:10358000301BEAFC00C45D162FCDC49B6248507806 +:1035900062595089CE1A301BEAFC00E0F01F001877 +:1035A000FE9FFE8380023A1C8003C9F880023A1A0B +:1035B000800091D0800091DC80021DB88002B5ECC3 +:1035C000800222A48002269480021F308002938011 +:1035D000800217D08003CA6C8002246C80037E2096 +:1035E000800257488002B9D48002237080039C383F +:1035F00080021A4880021CE08003CA488002559667 +:10360000EBCD40C021AD1897F8F800AC5808C68142 +:10361000F8F6010CEEFB009076095809C061C8F875 +:1036200072095809E080008CF2F801945808CF9193 +:103630003008EF48010C76495809C670EEFC00D4FA +:10364000580CC0E04DAB780CF01F005AEFF8002486 +:10365000F1FC0A04EEFB009076485808C560EEF8CD +:1036600000E85818E088008D760AEEF800C858186F +:10367000C3F0580AC090103AC041C3981438C370C0 +:10368000740A580ACFC15826C04076485828C690B8 +:10369000580AEFFA1A32F9B80001EFF80A32EEF9D7 +:1036A00001105809C04176485818C710EEF80118A3 +:1036B0005808C4F1580AF40B1700F60A1700F5FB76 +:1036C0001004F5FA1005EEF800D470B85808C410CC +:1036D000EEFC00C45D18C3D12E6DE3CD80C0F8F6BA +:1036E000010C5806C9812E6DE3CD80C0740A580ABA +:1036F000CCB0F4F801945808CFA175885808CC4193 +:1037000076485828CF41CC0B0E9CF01F002BCE5092 +:10371000EEF800B05808EFFC0A2C0E9CF01F0027B2 +:10372000300B1A9C368AF01F00261A961A9A0E9CA5 +:10373000300BF01F00242E6DE3CD80C05806FE91A3 +:10374000FF790E9C301BF01F00202E6DE3CD80C052 +:103750000E9C300A30ABF01F001D2E6DE3CD80C0F3 +:10376000580AC1D074085808EFFA1A32F9B80001A3 +:10377000EFF80A320E9C300BF01F0015CAEB302B0D +:103780000E9CF01F0011EEFB0090C6FBEF480110ED +:10379000129A0E9C303BF01F000BC9FB30180E9C98 +:1037A000EF4800C8149BF01F0009C97B8003C65C6A +:1037B000800091A08002195C80022370800091D06B +:1037C0008002792C800217D080022584800230DCB0 +:1037D0004848300A48499118910A930A5EFF000050 +:1037E00000007A7000007A78EBCD40681695189347 +:1037F000F6CCFFEDF01F0022314A1896300BF01F77 +:1038000000210A9A8D15ECCCFFF0069BF01F001EDC +:1038100049EAF5090042AC09F50800422FF8F558CD +:10382000004249B530088D286A198D3993062F86D4 +:103830008B1649866C08F0C9FFFF8D095909E0888D +:1038400000180A936A0C782A580AF9F80003E7F876 +:103850000A01F9F81003F5F81A0320197838910ACB +:103860008D09F01F000D6C095909FE9BFFED300A10 +:10387000326C149BF01F0009E3CF90688000920027 +:10388000800091D0800091DC000087F400007A7005 +:1038900000007A78800091E880014658EBCD40E046 +:1038A00030961697305E300B33A51989F2C8003078 +:1038B000EC081800E08B0019F2CA0030580AC2C5A3 +:1038C0001999F2C80030EC081800E08B0017F2C814 +:1038D00000305808C215F1EA1048EE0B0B08585B8F +:1038E000C291E3CF80E0F2C80061FC081800E08BD1 +:1038F000000EF2CA0057CE3BF2C80061FC08180067 +:10390000E08B000DF2C80057CE5BF2C80041FC0806 +:103910001800E088000DE3CFC0E0F2C80041FC08C9 +:103920001800FE9BFFFAF2C80037CD4BF2CA0037F1 +:10393000CC6B19A8EA081800CEF12FFB586BCD20EC +:103940002FDCCB4BEBCD40E016961497580AC4C041 +:10395000300B3095305EC1B8F2CA0030580AC365EA +:103960001999F2C80030EA081800E08B0021F2C86B +:1039700000305808C2B5F1EA10485808C275EC0B7F +:103980000B082FFB1637E08800302FEC1989F2C89E +:103990000030EA081800FE98FFE1F2C80061FC0858 +:1039A0001800E08B000EF2CA0057CD9BF2C80061F0 +:1039B000FC081800E08B000DF2C80057CDBBF2C820 +:1039C0000041FC081800E088000DE3CFC0E0F2C819 +:1039D0000041FC081800FE9BFFFAF2C80037CCAB90 +:1039E000F2CA0037CBCBE3CF80E0F6CA00015E6CB1 +:1039F000F80A000913882FF85C58B2885E1CF6C8D4 +:103A00000002100CC08819882FF85C58B888201C58 +:103A100058085E1C201ACF875EFC5EFCEBCD40C0D0 +:103A200049071696189BE0460020F9B60B200E9C1D +:103A30000C9AF01F000D3008EE060B080F8858088E +:103A4000C0D00E9C35E935FA2208F2081800F9FAC0 +:103A5000BE002FFC19885808CF81482CE3CD80C0C8 +:103A600000007A7C800091DCEBCD40FE189114922E +:103A7000169C1293580BC2A0E20B00045809C20016 +:103A800002973006C0881835E08A001418070C33F6 +:103A9000E0880018E4060708E80701051AD80E9C1C +:103AA00048CA0A9B2FF6F01F000C2FFD580CCEC4FD +:103AB0003008EE01010CE968FFFFE3CD80FE0297BC +:103AC0003008EE01010CE968FFFFE3CD80FE000045 +:103AD0008003DA3080009148580CC140F8FC00D0D7 +:103AE000580CC1002FCCF8F8FFFC5808C0417809E9 +:103AF0005809C0901638C0302F8CCF6B7808143816 +:103B0000CFC15EFF5EF9780C580C5E0C7828163831 +:103B1000C0515EFC782816385E0C780C580CCFB17A +:103B20005EFC30383189F94800F0F9480058F9480E +:103B3000005431E8F949004CF94800503FF9E06879 +:103B40000576F949017CF948019C5EFCEBCD40E02B +:103B500018961695344CF01F000C1897C1103018A9 +:103B60009978993899485806C0500C9CF01F000766 +:103B70008F5C5805C0500A9CF01F00048FBC0E9C3F +:103B8000E3CD80E080028F2480009194EBCD40C093 +:103B9000169679075807C051C0C86E375807C090AD +:103BA0006E0C0C9BF01F0004CF910E9CE3CD80C0E7 +:103BB000E3CF80C0800091A0EBCD40FC1695189417 +:103BC000580C5F0B58055F081493104B1292C040BD +:103BD0003FFCE3CD80FC580ACFC048E73006C06800 +:103BE0002FF62E07E0460038CF406E0B0A9CF01FE0 +:103BF000000ACF710699049A089B0E9C6E185D18F6 +:103C0000F9BC01FFF9BC0000E0460038CE31CE1B04 +:103C10008003CC00800091A0EBCD40801897580C19 +:103C2000C0A0780CF01F00056E1CF01F00040E9C55 +:103C3000F01F0002E3CD8080800091E8D421189429 +:103C4000169579075807C1A03006C0680E966E3CDD +:103C5000580CC14018970A9B6E0CF01F0009CF71D9 +:103C60005806EFF81003EDF81A03EFF80003E9F82F +:103C70000A100E9CF01F0003D82ADC2A800091A0B5 +:103C800080023C18EBCD406016961895760BF01F1D +:103C900000056B088D38EB460040E3CD80600000E6 +:103CA00080023C3CD431202D500B129CF01F003C74 +:103CB0001890C730198A580AC670300118965011EA +:103CC000320230930294C0382FF60D8AE40A1800AD +:103CD0005F08E60A18005F091248E8081800CF518B +:103CE000580AC2C00D87E40718005F18E6071800DD +:103CF0005F191268E8081800C4505807C4300C95C2 +:103D0000C0385807C0D02FF50B87E40718005F189C +:103D1000E60718005F191268E8081800CF31AA8476 +:103D20004A0B0C9CF01F0020C171A1A15807C06074 +:103D3000EAC6FFFF0D8A580ACCA1009CF01F001BA9 +:103D40005801C2404008F141005C40195809C25175 +:103D5000129C2FEDD832496B0C9CF01F0013C03120 +:103D6000A1B1CE5B0C9C493BF01F000FF9B80004D9 +:103D7000E3D8E031FBF91001F7B901FFFBF91A01B3 +:103D8000CD6B0C95CCDBF01F0009300840093FFCDF +:103D9000F348005C2FEDD8322FEDDC3A800091948F +:103DA0008003D304800091A0800091E88003D30CAD +:103DB0008003D314EBCD40FE169CF01F00451891F4 +:103DC000C6B0198A580AC7A0189630023203309438 +:103DD000E80A18005F08E60A18005F091049300871 +:103DE000F0091800C0E0109B2FF60D8AE60A1800B3 +:103DF0005F08E80A18005F091248F6081800CF515A +:103E0000580AC4500D87E80718005F18E607180025 +:103E10005F1910693008F0091800C3705807C350C3 +:103E2000109A0C95C0385807C0D02FF50B87E607BD +:103E300018005F18E80718005F191268F4081800E6 +:103E4000CF3130084A3BAA880C9CF01F0023C0F1F8 +:103E5000A5A25807C060EAC6FFFF0D8A580ACB9199 +:103E6000029CF01F001E049CE3CD80FE49CB0C9CFD +:103E7000F01F0019C031A3B2CEDB49AB0C9CF01F80 +:103E80000016C0E1A3A2CE6B0C95CDCB029CF01F17 +:103E900000135802CE913FF2049CE3CD80FE492BE3 +:103EA0000C9CF01F000DC031A1B2CD4B0C9C48FB07 +:103EB000F01F0009C071A1A2CCDBF01F00083FF287 +:103EC000CD3B029C3FF2F01F0005CCEB80009194AB +:103ED00080039A74800091A0800091E880039A6C1E +:103EE0008003D31C8003D3248003C8E4EBCD40803F +:103EF0001697149C129BF01F00085BFCC031E3CFA7 +:103F0000C0801898E018FFE1CFB1EF4C0050109C32 +:103F1000E3CD808080023DB4EBCD40801697149CA9 +:103F2000129BF01F00085BFCC031E3CFC0801898E3 +:103F3000E018FFE6CFB1EF4C004C109CE3CD808041 +:103F400080023DB4D431201D500B129CF01F00485C +:103F50001891E080007F198A580AC6B0300218967E +:103F6000049032033094E80A18005F08E60A18004B +:103F70005F0910493008F0091800C0E0109B2FF6C7 +:103F80000D8AE60A18005F08E80A18005F0912485F +:103F9000F6081800CF51580AC2F00D87E80718003C +:103FA0005F18E60718005F1910693008F00918005B +:103FB000C3E05807C3C0109A0C95C0385807C0D04A +:103FC0002FF50B87E60718005F18E80718005F1940 +:103FD0001268F4081800CF3130084A6BAA880C9C8C +:103FE000F01F0025C161A1B25807C060EAC6FFFFFB +:103FF0000D8A580ACB91029CF01F00205802C1B0D4 +:104000004009F34200545800C241009C2FFDD832B1 +:1040100049BB0C9CF01F0018C031A1A2CE6B499B7C +:104020000C9CF01F0015C0E1A3B2CDFB0C95CD5B3D +:10403000F01F0012300840093FFCF34800542FFDE8 +:10404000D832491B0C9CF01F000CC051A3A2CCDB42 +:104050002FFDDC3A0C9C48DBF01F0007F9B800107C +:10406000E5D8E032F7B001FFCC0B0000800091945E +:104070008003C8C4800091A0800091E88003D32C05 +:104080008003D3348003C8E48003C8E0D431202DFA +:10409000500B129CF01F00391890C6D0198A580A8C +:1040A000C610300118955011320230930294C03876 +:1040B0002FF50B8AE40A18005F08E60A18005F096A +:1040C0001248E8081800CF51580AC2C00B87E4070D +:1040D00018005F18E60718005F191268E808180052 +:1040E000C3F05807C3D00A96C0385807C0D02FF67F +:1040F0000D87E40718005F18E60718005F191268BB +:10410000E8081800CF31AC8449DB0A9CF01F001D81 +:10411000C171A1A15807C060ECC5FFFF0B8A580A06 +:10412000CCA1009CF01F00185801C1E04008F141EB +:10413000005840195809C1F1129C2FEDD832493B63 +:104140000A9CF01F0010C031A1B1CE5B0A9C490B44 +:10415000F01F000CCFA040192FF95019CDCB0A96B3 +:10416000CD3BF01F0009300840093FFCF3480058E0 +:104170002FEDD8322FEDDC3A800091948003D340AC +:10418000800091A0800091E88003D3448003D3484D +:10419000EBCD40401896784CF01F00466D2CF01F78 +:1041A0000045ECFC00D0F01F00436DACF01F004157 +:1041B0006DCCF01F00406DECF01F003EECFC008069 +:1041C000F01F003CECFC0088F01F003AECFC009073 +:1041D000F01F0038ECFC0094F01F0036ECFC009857 +:1041E000F01F0034ECFC009CF01F0032ECFC00A03F +:1041F000F01F0030ECFC00A4F01F002EECFC00A827 +:10420000F01F002CECFC00ACF01F002AECFC00B00E +:10421000F01F0028ECFC00B4F01F0026ECFC00B8F6 +:10422000F01F0024ECFC00BCF01F0022ECFC00C0DE +:10423000F01F0020ECFC00C4F01F001EECFC00C8C6 +:10424000F01F001CECFC00CCF01F001AECFC00D4AA +:10425000F01F0018ECFC00D8F01F0016ECFC00DC8E +:10426000F01F0014ECFC00E0F01F0012ECFC00E872 +:10427000F01F0010ECFC00ECF01F000EECFC0150F5 +:10428000F01F000CECFC016CF01F000AECFC01803C +:10429000F01F0008ECFC018CF01F0006ECFC01A0F4 +:1042A000F01F00040C9CF01F0003E3CD80400000D1 +:1042B000800091E8EBCD40C0189678085808C031CE +:1042C000C0880E987007109CF01F00155807CFA1EA +:1042D0006D085808C031C0880E987037109CF01FC8 +:1042E00000115807CFA16C5CF01F000F6C6CF01F21 +:1042F000000E6C8CF01F000C6C9CF01F000B6CAC63 +:10430000F01F00096CBCF01F00086C1CF01F0006B9 +:104310000C9CF01F0005E3CD80C00000800241909E +:1043200080023C18800091E8EBCD4040320818969E +:104330001AD8E0691000F8C8FFDC785A784B792C5D +:10434000F01F000430182FFDED480044E3CD8040FD +:104350008002B254D421F60815011695F0C6FFFF6D +:1043600018940C9CF01F00061897C0600A99089AD0 +:104370000C9BF01F00040E9CD822000080028F24AA +:1043800080023A68EBCD40E016951896F6CCFFFD1A +:10439000F01F00091897C0C00C9B0A9A322618C655 +:1043A000F01F0006EE0500093008B296B2A80E9C78 +:1043B000E3CD80E080009200800091DCD401580CB5 +:1043C000C1D0580BC160198835E92208F2081800DD +:1043D000E08B0013129A3009C088F80907082208F8 +:1043E000F4081800E08B00092FF9123BFE9BFFF741 +:1043F000F01F0003D802F01F0003D802800243849C +:1044000080024354D4011698F6FC0140580CC06059 +:10441000189BF0CCFEDCF01F0002D802800243BCE7 +:10442000D4011698F6FC013C580CC060189BF0CCE7 +:10443000FEECF01F0002D802800243BCD4011698A3 +:10444000F6FC0138580CC060189BF0CCFEFCF01F45 +:104450000002D802800243BCD4011698F6FC013455 +:10446000580CC060189BF0CCFF0CF01F0002D80263 +:10447000800243BCEBCD40F831EC1694F01F0028CD +:104480001896C3906979F8C3FFE2EDB90000C360E4 +:104490001897EDB90001C1614A294A380C37F20872 +:1044A0001710E60701051AD84A0A0A9B0E9CF01F4E +:1044B00000202FFD580CC1C51835E08A001A1807D6 +:1044C0006979EDB90002C171496949780C37F20880 +:1044D00017100E9C1AD8E6070107496A0E9BF01FB9 +:1044E00000142FFD580CC0451837E089000530082E +:1044F000E768FFFF0C9CE3CD80F848B848EA1AD87B +:1045000031EBF01F000B2FFD580CCF2559DCFE9925 +:10451000FFF0EC0C00076979CBDB000080028F24F0 +:104520008003936480037E208003D35880009148E9 +:104530008003D3648003D350EBCD40F81894332C20 +:10454000F01F003E1896C650F8C3FFCEEDB400042D +:10455000C6301897EDB40003C1514B994B980C37F6 +:10456000F2081710E60701051AD84B7A0A9B0E9C31 +:10457000F01F00362FFD580CC4951835E08A00470F +:104580001807EDB40002C1514AD94AE80C37F208C5 +:104590001710E60701051AD84ADA0A9B0E9CF01F8D +:1045A000002B2FFD580CC3251835E08A0030180762 +:1045B000EDB40001C1514A294A280C37F2081710FE +:1045C000E60701051AD84A3A0A9B0E9CF01F001F05 +:1045D0002FFD580CC1B51835E08A00191807EDB445 +:1045E0000000C171496949780C37F20817100E9C18 +:1045F0001AD8E6070107498A0E9BF01F00142FFD09 +:10460000580CC0451837E08900053008E768FFFFFF +:104610000C9CE3CD80F848B8490A1AD8332BF01F18 +:10462000000B2FFD580CCF25E04C0031FE99FFEF19 +:10463000EC0C0007C90B000080028F2480039364F8 +:1046400080037E208003D374800091488003D37C54 +:104650008003D3888003D3908003D36CD401774C3C +:10466000F01F0002D802000080024538D401773CD8 +:10467000F01F0002D802000080024538EBCD40F860 +:10468000332C1693F01F00401896C6906759F8C453 +:10469000FFCEEDB90001C6601897EDB90000C16109 +:1046A0004BA94BB80C37F2081710E80701051AD8C8 +:1046B0004B8A0A9B0E9CF01F00382FFD580CC4C576 +:1046C0001835E08A004A18076759EDB90003C1613F +:1046D0004AE94AF80C37F2081710E80701051AD81A +:1046E0004AEA0A9B0E9CF01F002C2FFD580CC34574 +:1046F0001835E08A003218076759EDB90002C16128 +:104700004A294A380C37F2081710E80701051AD869 +:104710004A3A0A9B0E9CF01F00202FFD580CC1C581 +:104720001835E08A001A18076759EDB90004C171FD +:10473000496949780C37F20817100E9C1AD8E80717 +:104740000107498A0E9BF01F00142FFD580CC0452D +:104750001837E08900053008E968FFFF0C9CE3CDBD +:1047600080F848B8490A1AD8332BF01F000B2FFDE8 +:10477000580CCF25E04C0031FE99FFEFEC0C000700 +:104780006759C8CB80028F248003936480037E2006 +:104790008003D3A4800091488003D3B08003D390DA +:1047A0008003D3BC8003D398EBCD40C030AC1696C9 +:1047B000F01F00181897C1806D69EDB90000C17035 +:1047C000189A301BEDB90001C0F149384939580B2E +:1047D000F0091700149C1AD9EECBFFF6141B490AF6 +:1047E000F01F00102FFD0E9CE3CD80C048B848EAB2 +:1047F0001AD830ABF01F000B2FFD580CCF55589C2A +:10480000FE99FFF3EE0C000A6D69300BCDCB000072 +:1048100080028F248003936480037E208003D3D0A2 +:10482000800091488003D3C8EBCD40C01697768CAA +:10483000580CC05118960C9CE3CD80C0314CF01F31 +:1048400000101896CF90EF38001DEF3A00181AD8D4 +:10485000EF39001C1AD9EF38001B1AD8EF39001AAB +:104860001AD9EF380019314B1AD81ADA485AF01F02 +:10487000000630082FADED680013CDEB80009200EC +:104880008003DA4880009148EBCD40E078351696F9 +:10489000314CF01F000A1897C0C0EC050308488A85 +:1048A0001AD8314BF01F000730082FFDEF680013B6 +:1048B0000E9CE3CD80E00000800092008003DD6864 +:1048C00080009148EBCD40801697772C580CC09013 +:1048D000F01F0009189B6F2CF01F0008E3CD8080AB +:1048E000771C580CC060F6CCFFDC320BF01F0004C4 +:1048F000E3CD8080800091B88002438480024354DD +:10490000EBCD40807838F60800076E085808C0C024 +:10491000784C580CC0C0F60C030C189B109CF01F70 +:104920000007E3CD8080109CE3CD8080109CF01FB9 +:1049300000046E08CF3B0000800243BC800091B8A9 +:10494000EBCD40F83228169418961989F009180012 +:10495000C0A0F01F001BEBDCC001C19030070E9C13 +:10496000E3CD80F8F8C7FFFF322B0E9CF01F001537 +:10497000CF6019985808CF31B8880E9CF01F0010EE +:10498000890C0E9CF01F00101897CEABF80316018F +:10499000E6CCFFFFF01F000D1897CE200C9C069A66 +:1049A0000E9BF01F000BC051EE030B0C8903CD8B47 +:1049B0000E9C0A97F01F0007CD3B0000800091B8C5 +:1049C00080009158800091948000920080023944C8 +:1049D000800091E8D421205D18951094129C1696C1 +:1049E000F01F000F1897C1906C0A590AE08B001451 +:1049F000189B0A9CF01F000B0E9CF01F000B48BA7E +:104A00001AD4314BFACCFFFCF01F0009300C2FFDFB +:104A10002FBDD822F01F00042FBDDC2A80024940A0 +:104A2000800091DC800091E88003D3D88000914819 +:104A3000D4013038F6CCFEDCF6CBFEC0F01F00020D +:104A4000D8020000800249D4D4013028F6CCFEEC14 +:104A5000F6CBFEC4F01F0002D8020000800249D449 +:104A6000D4013018F6CCFEFCF6CBFEC8F01F0002D5 +:104A7000D8020000800249D4D4013008F6CCFF0CE3 +:104A8000F6CBFECCF01F0002D8020000800249D411 +:104A9000EBCD40F8201D18971693129C1A9BF01F1F +:104AA00000171895C2306E595809C0504008103987 +:104AB000E08B00206E695809C04040081039C133AE +:104AC0006E366E44E60600066C0CF01F000D8D0578 +:104AD0006E4C580CC0504008300CE60409082FFDFD +:104AE000E3CD80F80A9CF01F00062FFDE3CFC0F84D +:104AF000F01F00033FFCCF4B80024940800091E84B +:104B0000EBCD40FEF6F700D05807C0510E94089C3C +:104B1000E3CD80FE364CF01F00191894CF90EEC6FE +:104B2000FFFCF8C3FF9C189749514962ECFCFFFC5D +:104B3000580CC2116C0B580BC1A02F86F01F00122D +:104B4000CF600837E2081700E40817101ADCE60700 +:104B500001051AD80E9C48DA0A9BF01F000D2FEDB4 +:104B60001807580CC0451835FE99FFE23008E76871 +:104B7000FFFFCCEB6C0BCE2B80028F2480037E20BA +:104B800080039364800271BC8003D3E48000914869 +:104B9000D431205D500B129CF01F0056502CE08049 +:104BA000008E198A580AE080009B3009402650196F +:104BB000503912905049320230931294C0382FF677 +:104BC0000D8AE40A18005F08E60A18005F09124817 +:104BD000E8081800CF51580AC4E00D87E407180010 +:104BE0005F18E60718005F191268E8081800C64049 +:104BF0005807C6200C95C0385807C0D02FF50B8732 +:104C0000E40718005F18E60718005F191268E80843 +:104C10001800CF31AA842FF0403CE00B1503F01FA1 +:104C200000361891C4E040490C9CE20900060C9B38 +:104C3000F01F00328D1C6C085808C141580CC1018E +:104C400040182FF850185807C15040482F88504836 +:104C5000EAC6FFFF0D8A580AC3C05031CB3B591C2E +:104C6000C2404009F2F801782FF8F348017858075C +:104C7000CED15031E0C8FFFFF0071503402CF01FE4 +:104C800000200E9B403CF01F001CC2E0F8000039E1 +:104C90003008931893084008F14C00D04019580987 +:104CA000C0D1129C2FBDD8324009F2F801742FF800 +:104CB000F3480174CC9B0C95CAEB3FFC2FBDD83256 +:104CC000403CF01F000F402CF01F000D2FBDDC3AC0 +:104CD000E0C8FFFF5031F0071503CD1B501A308795 +:104CE000503A1490CCCB403CF01F00053FFCCE7BEB +:104CF00080009194800091F48002720C800091E811 +:104D0000D4213228129716951389F0091800C0A0F3 +:104D1000320A2DCB0E9CF01F00271896C2F03FFCE4 +:104D2000D822EEC6FFFF322B0C9CF01F0023C3C01D +:104D3000F8060107EEC80008E0480037FE9BFFF1C7 +:104D40006B2C580CC060F01F001D0E3CC2606B2C19 +:104D50003004EB440044F01F001AEECCFFFFF01FBC +:104D60000019EB4C0048CDC00C9B0E9AF01F0016AA +:104D70006B28089CF0070B04D822EF390040F80993 +:104D80001800CCE16B2CF01F000E3018EB460048E9 +:104D90000C9CEB480044D8220E9A0C9B6B2CF01F05 +:104DA000000BCD61CBEB0C9CF01F00041897CC3BA3 +:104DB0008002394480009158800091B8800091E8C9 +:104DC00080009200800091DC8000917CEBCD4080DF +:104DD0001697129C2E8BF01F0006F9BC01FFF9B844 +:104DE0000001EFF80A08E3CD808000008002389CC3 +:104DF000EBCD40C018976E38129CF00B000630AA1D +:104E0000300BF01F000C8D0C18996E585808C030EC +:104E1000103CC0956E6C580CC0401839E0890007F2 +:104E2000E3CF80C08D08E3CFC0C08D0CE3CFC0C0FE +:104E300080009170D42116941895782B580BE08A35 +:104E400000557817683E6E0C78381C38C410EECACE +:104E5000FFFC3009C058150C78381C38C3902FF966 +:104E60001639CFA52FFB0E9CA36BF01F00241896BC +:104E7000C3506A2C580CE08A003B6C08683E7039BD +:104E80001C39C355ECC8FFFC300AC0A81097700845 +:104E9000F40B15027039EEC8FFFC1C39C2052FFA5D +:104EA000143CFE99FFF5F4C8FFFFEC0A002BA36841 +:104EB0001697F80A010AEC08000CA36AF01F00100C +:104EC0008F048B166A28300C2FF88B28D82218985C +:104ED000781C580CCFD19114D822DC2AF4C8FFFFDB +:104EE000EC0B000BA368CE6B7817CBDB0C97300A6A +:104EF00030480C9BCDFB0000800091F4800091C4F1 +:104F0000D4211895781CF01F000D300C8B1C8B2CB5 +:104F10006A075807C0F0189618948F140E9B0A9CC5 +:104F2000F01F00076E07F9B605FF5807CF710C9CFC +:104F3000D8220E96CFDB0000800091E880024E342C +:104F4000D421189578095809C1E03FFAC028109972 +:104F50007228F4080C4A72085808CFA1F4C4FFFF65 +:104F60001296E06C01A8F01F000A1897C0A09924BF +:104F70005806EDFC1A00EBFC0A000A9CF01F000525 +:104F80000E9CD82212961294CEDB000080028F2451 +:104F900080024F005EFD5EFD5EFD5EFD5EFD5EFD1E +:104FA000D401584BC0E0E0880007586BC0A0587B84 +:104FB000C040D802580BC091300CF01F0005D80239 +:104FC000301CF01F0003D802D80200008002172016 +:104FD000D401581BC070300A323C149BF01F0005EE +:104FE000D80A300A322C149BF01F0002D80A0000A5 +:104FF00080014658EBCD40FE201D1094129216956C +:10500000F01F0057E8C8FFF25C7C4D69F00C000609 +:10501000F33A0109580AC060EC0A0D085809E0810A +:10502000008F3003500CE6060001029CF01F004E7A +:105030000A9B1897306A400CEE0C000CF01F004BD6 +:10504000400C306A4CAB140CEE0C000CF01F004707 +:10505000400C302A4C7B2F4CEE0C000CF01F004310 +:10506000400C089A049B2F2CEE0C000CF01F003F04 +:10507000FAC8FFFC3005114A0E991AD5EE0A000C49 +:105080001AD5EC0A010A30EBF01F003B2FED581C3B +:10509000C5914009EC090108E048003EE08B001092 +:1050A0008E085CC806085CC8AED3029B0E9CAE0896 +:1050B000F01F0032300C2FFDE3CD80FEEE09000E14 +:1050C0003888FD39000CF0091800CEB1FD39000D0B +:1050D00038E8F0091800CE51FD38000EF808180025 +:1050E000CE01FD39000F3038F0091800CDA130286D +:1050F000FD3A0012F00A18005F1B3FE8F00A1800A2 +:105100005F19126BEA0B1800CCC1FD380013E218CE +:10511000001D5818CC61FD380014E21800C85888EA +:10512000CC01FCCAFFC1FCC9FFE1C0482FF914390A +:10513000C0E01388F6081800CFA0CB3BF4090103A8 +:10514000C72B0E9CF01F000E3FFCCB6B0FC92FA985 +:10515000EE0900091388A3A8B288CA3B8001F4E8CD +:10516000000087F480009200800091DC00007AA8A3 +:105170008003D6548001F54480014664800091E8A4 +:10518000D401201D3068FACBFFFC16D81A9B486C5E +:10519000F01F00064848581CF00C1700F9BC01002D +:1051A0002FFDD80200007AA880017A88EBCD40401C +:1051B000310A1696300B0C9CF01F000630F930783F +:1051C0008D198D09300C30398D288D39E3CD804013 +:1051D000800091D0D401F01F0002D80A80016048FD +:1051E000EBCD4068206DFAC3FFEE1496069C306A42 +:1051F000F01F0010FAC5FFFE0C9B310A0A9CF01F3D +:10520000000D0A9B204D310A1A9CF01F000B069BD3 +:10521000202D306A1A9CF01F0008F01F00082FADE7 +:10522000581CF9BC01FFF9BC00002FADE3CD80682C +:10523000800091DC8002E73680016094EBCD40680D +:10524000206DFAC3FFEE1496069C306AF01F001022 +:10525000FAC5FFFE0C9B310A0A9CF01F000D0A9B49 +:10526000204D310A1A9CF01F000B069B202D306A3E +:105270001A9CF01F0008F01F00082FAD581CF9BC45 +:1052800001FFF9BC00002FADE3CD8068800091DC08 +:105290008002E73680016168D401F01F0005581CC8 +:1052A000F9BC01FFF9BC0000D80200008001F370D6 +:1052B000D401F01F0005581CF9BC01FFF9BC000027 +:1052C000D80200008001F310D401169CF01F0004E6 +:1052D000581CF9BC01FFF9BC0000D802800163E052 +:1052E000D431207DFACEFFC050287C027C387C1758 +:1052F00050087C2E501E16901894149B1293580A36 +:10530000C5C0FAC5FFEA306A0A9CF01F0031202DA3 +:10531000306A0A9B1A9CF01F002FF01F002F5802C2 +:105320005F1858075F1918912FED1268C181300678 +:105330005800C26168193018F0030948F00811FFDD +:10534000F1E9000C891C580CC365BFBC891CF01F17 +:10535000002318975817C2F02F9DDC3A5887FE9B00 +:10536000FFFDFAC6FFF2308A300B0C9CF01F001CC8 +:105370000E9A049B0C9CF01F00165800CDC04028CC +:1053800058015F091AD8069C1AD630381AD530163B +:10539000404A403B1AD6F01F00136819EC03094835 +:1053A0001248F1D8C01F189789180C9CF01F000EE6 +:1053B0002FCDCD1B2F9DD83AFAC5FFEA306AE06B9E +:1053C00000FF0A9CF01F0006CA3B0000800091DC31 +:1053D0008002E736800188B080016584800091D02A +:1053E0008001661C8001639CEBCD40C01896308C18 +:1053F000F01F00091897C0C0300899069918F01FCF +:105400000007301CF01F00060E9CE3CD80C0E3CDEA +:1054100080C0000080028F248001604880017A10E3 +:10542000EBCD4080209D1697FACCFFFEF01F0009BF +:10543000581CC0402F7DE3CFC0800E9C1BBAFACB16 +:10544000FFFCF01F00051BBC2F7DE3CD808000001A +:1054500080017800800091DCEBCD4080202D580B3E +:10546000C120FAC7FFFE306A0E9CF01F000C0E9C94 +:10547000F01F000B581CF9BC01FFF9BC00002FED18 +:10548000E3CD8080FAC7FFFE306AE06B00FF0E9C20 +:10549000F01F0004CEDB0000800091DC8001793039 +:1054A000800091D0EBCD4040485B1896F01F00057E +:1054B0000C9CF01F0005E3CD8040000080039C3869 +:1054C00080025458800091E8EBCD40C0202DFAC7EF +:1054D000FFFE16960E9CF01F0008581CC0402FEDD2 +:1054E000E3CFC0C00E9B0C9C306AF01F00042FED70 +:1054F000E3CF80C080017864800091DCEBCD40C0B8 +:1055000018977939580BC0305839C0E03018EF4837 +:1055100000BC3038EF48004C1039C0808F2830086C +:105520008F58E3CD80C0F949004C6F682FF8EEFA30 +:10553000010CEF4800586FA830098F288F59301B95 +:10554000746C7486487A5D16EEF80094EEF900905B +:105550002FF82FF9EF480094EF490090E3CD80C079 +:1055600080037E20580C5E0C580BF9FB4A19580A30 +:10557000F9FA4A225809F9F94A1A5808F9F84A1B5F +:105580005EFC580CF9F81024F9B90101F1D9E108D1 +:10559000F9F81A245EFC580C5E0C580BF9B801019E +:1055A000F9F81A45F9FB0A455EFCD703EBCD40C07C +:1055B0001897580CC04079385858C030E3CD80C097 +:1055C000F8F8010C3009706C7086488A301B5D1643 +:1055D000EEF80094EEF900902FF82FF9EF480094C0 +:1055E000EF490090E3CD80C080037E20580CF9FC89 +:1055F00010315EFC580CC0B0F8F800D45808C070E8 +:10560000F8F800D89708F8FC00D45EFC300897083A +:105610005EF8D703580CC040588BE08800035EFD4D +:1056200048D8F00B032FF8FC00E05EFCF8FC00DC2F +:105630005EFC78BC5EFCF8FC00805EFC79FC5EFCE5 +:10564000F8FC00845EFC784C5EFC797C5EFC786C37 +:105650005EFC00008003D6FC580C5E0C588B5EBCD0 +:1056600048E8F00B032FF94A00E05EFCF94A00DC41 +:105670005EFC99BA5EFCF94A00805EFCF94A007C47 +:105680005EFCF94A00845EFC994A5EFCF94A005CC3 +:105690005EFC996A5EFC00008003D720580CC05065 +:1056A000580BC031783C5EFC5EFD580C5E0C580B0C +:1056B000F9FA0A035EFCD401580CC0A0F8FC010CF6 +:1056C000580CC06078A85808C030780C5D18D80213 +:1056D000D401580CC021D80AF8FC010C580CCFC0DA +:1056E00078B85808CF90780C5D18D802EBCD408080 +:1056F0001897580CC1E0189A300B48FCF01F000FA7 +:105700000E9A300B48ECF01F000DEEFC00C0F01FAD +:10571000000DEEFC00CCF01F000CEEFC00D4F01FDE +:10572000000AEEFC010CF01F00080E9CF01F0006A2 +:10573000E3CD80808002608C800274008002602053 +:10574000800270E0800091E8D401580CC050F8FC51 +:1057500000C0F01F0002D80280026410D401580C6F +:10576000C050F8FC00C0F01F0002D802800264287C +:10577000D401189A580CC0A030583019F8FC00C059 +:10578000F548004C95C9F01F0002D802800263BAA8 +:10579000EBCD40801897580BC04079E85888C0403E +:1057A0003018EF4800BC30193088EF490044EF480A +:1057B00000788F99EEFC00C0F01F0004F9B80100DA +:1057C000EFF81A39E3CD8080800263B2EBCD40E080 +:1057D000201D189716951496580CC0513FFC2FFDAC +:1057E000E3CD80E0F8FC00C0F01F000ACF801A9BD8 +:1057F000EEFC00C0F01F0008189BCF10400C0C3CC2 +:10580000CEF30C9A0A9CF01F0005300CCE9B0000D2 +:10581000800263B2800263CE800091DCEBCD40C099 +:1058200018971496580CC1F0F94B00C4580AC1B02F +:1058300074087419F94800F8F94900FC7428F9480B +:105840000100F8FC00C0580CC0E0742BF01F0007EA +:105850006C3BEEFC00C0F01F00066C4BEEFC00C081 +:10586000F01F0004E3CD80C0800263A6800263AC19 +:1058700080026408D431FACD00A81897F8F600CC5D +:105880005806C0F0F8F800F85808C0B00DA80DB9D7 +:10589000F3E81089F8F800D02FC91039E088000427 +:1058A0002D6DD832ECC4FFFC0999500909A0F01FF6 +:1058B000006FFAC1FFF8340A029B0E9CF01F006CC7 +:1058C0001895CEF5590CE0800090580CCEA132020C +:1058D0005012EEF800E45808C7D1E8C5FFE4FAC357 +:1058E000FF68310A0A9B069CF01F0062310A300BE8 +:1058F0000A9CF01F00610DAA0DB9049BF3EA108900 +:10590000FACCFFD8EEFA00CC0A982FC9F01F005B42 +:10591000310A0A9B069CF01F005AC7614009E1E961 +:1059200010880DB9EBD8B0100DA8F3E81089320833 +:10593000F2CE002CF00519005FB9E04E00205F9A0E +:10594000124AF80A1800CAD15C751C35C630580EC8 +:10595000CA81FAC3FF88029B0A9A069CF01F004581 +:105960003018308AEF4800E4E8CBFFFDEECCFF189A +:10597000F01F0040EEFC010C78965806C0D0E93AC2 +:10598000001B0A98149B0699780CE21B0080F5DA3C +:10599000C0025D16C865E939001B3008F00918001F +:1059A000C5753018EF48011CEEF901185809C0718F +:1059B000EEF800FCEDB80000FE90FF7430188FD8B0 +:1059C000EEFC010C78785808FE90FF6C780C5D189E +:1059D000C68B308AE8CBFFFDEECCFF18F01F002805 +:1059E000FE94FF60C7BB189A029B0E9CF01F00201C +:1059F000FE91FF580A9A029BFACCFFD80A92F01F38 +:105A0000001D5015C67B069B0A9C310AF01F001929 +:105A1000C48BFAC6FFB8E8CBFFF50C9C310AF01F27 +:105A20000015049A029BFACCFFA8F01F0012FAC3DB +:105A3000FF880A9AE8CBFFD4069CF01F000E40199D +:105A40000C9A2F090A9B069CF01F000EC8AB301859 +:105A5000EF480118EEF9011C5809CB11EEF800FCD3 +:105A6000EDB80001CAC1C1DB8002575C800257CC8F +:105A7000800091DC800091D080028EF88000917CC3 +:105A800080029C38D431201D3003189730140695BD +:105A900030213040EF4500BC6F4A580AE08000C911 +:105AA0006F585808E08100C56E7C580CE08100C238 +:105AB0006EB85808E08000BE6F385828EFF41A2FEF +:105AC000EEF8010CEF41004C3009706C7086FEFA64 +:105AD000051E029B5D16EF4400548FC5EEF800983A +:105AE000EEF900902FF82FF9EF480098EF49009059 +:105AF0006E7C580CC0516EB85808E08100EC6FC83D +:105B0000EF4400705818EFF41A2F6FD85808E0814E +:105B100000F8580CE08100A76EE85808E08100A367 +:105B20006FE8F0C900015879E08B000EFEF804C45C +:105B3000F009032FEF4400BCEF410078EF4500402F +:105B4000EF4400C8EEFC00C0F01F012BE08000B560 +:105B5000EF4400BC2FF3E0430064C9D10E9A300B30 +:105B6000FEFC0498F01F012630090E98FEFA048C02 +:105B7000129B129CF01F0123EEF9010C72285808A9 +:105B8000C0E0EEF801105808C0A058185F0B3008AC +:105B90000E9CEF480110723A72285D182FFDD83222 +:105BA000EEF80088EF4400BCEF4000788F55EF45D9 +:105BB000007CEF4500C88F08CC6B6E585808E08118 +:105BC00000DF6E4B580BE08100D06E085808C161B1 +:105BD0003078EF4400BCEF480078EF440048CB3BFE +:105BE000EEF900845809E08101846FF85808E081DB +:105BF000015C6E4B580BE08100B86E685808CA30E3 +:105C00000E9CF01F0101C9FB6E485808E08100A9F5 +:105C10006E585808E08100B06E685808C9406F0897 +:105C20005808C910300B0E9CF01F00F7C8CB6E7CD3 +:105C30006EA95809C2F16F885808C2C06F38EF4585 +:105C400000605818EFF41A2FEF44004CEF4500584D +:105C5000EF4500548FC58FE4EF450118EF45011C57 +:105C6000C49B6FE8EEFC00CC5818EFF41A2FEF44F9 +:105C70000078F01F00E6EEFC00D4EF4500CCF01FEA +:105C800000E3EEFC00C0EF4500D4F01F00E18FE51B +:105C9000C5AB580CCD416EB85808CD105829C3B0CB +:105CA0005819C4706F3820185878FE9BFF26FEF9EB +:105CB0000362F208032FEEF800BC5808FE91FF4C77 +:105CC000C5CB6E585808E08100FE6ED85808E080B9 +:105CD00000FE6FC95819FE90FF1A5829FE91FF1E49 +:105CE0006FD85808FE90FF1A0E9CEF490070EF44E1 +:105CF00000BCF01F00C96E7CEF450074C0BB0E9C59 +:105D0000EF4400BCEF410070F01F00C36E7CEF4514 +:105D10000074C00B6F885828CC606F388FC45898B7 +:105D2000EFF41A2FEF4100603098EF48004CCE4A54 +:105D30006F885818CB806F3858A8EFF91A2FEEF9F2 +:105D4000010C30A88FC5EF440060EF48004CFEFA0C +:105D5000029E7286726C302B0A995D16CC0A6F080F +:105D60005808FE90FF573068EF4400BC8FF4EF48AE +:105D70000078CE9A6F085808FE90FF503038EF44F4 +:105D800000BC8F05EF440080EF480078CDCA6E69F3 +:105D90005809C0A06ED85808E0810117EEF800F845 +:105DA0005808E08100FC6E485808E08100EB6E88DE +:105DB0005808C0506ED85808E08000E46F28580892 +:105DC000C050300B0E9CF01F00956E7CC93A6F7866 +:105DD0005808C8018F88EF4400BCEF40004CEF48E2 +:105DE0000058EF4800448FF8EF4800488F98EF4480 +:105DF0000040C82A6E1B580BCE606E585808FE90A3 +:105E0000FF6A3089EF4400BCEF49004CEF44005C6E +:105E1000C73A6E2B580BC2716F696FB81039CD330A +:105E20006ED85808C2003058EF4400BCEF48004C10 +:105E30008FC4EF440110FE9FFE60580AFE91FF4B95 +:105E4000EF4A011CEF4400BCEF44004CEF4A0060F5 +:105E5000EF4A0058EF4A00548FCA8FE4EF4A011806 +:105E6000FE9FFE4B6E685808C7B16E485808C78140 +:105E70006E585808CC71580BFE91FF2D6F696FB8A2 +:105E80001039FE93FF286ED85808FE91FF24307811 +:105E90008FCBEF48004CEF4400BC6F98EF410110EE +:105EA0008F18FE9FFE2AEEF80088EF4900C8EF44E5 +:105EB00000BCEF4000788F59EF49007C8F08FE9FAF +:105EC000FE436ED85808E081008AEF4400BCEF44DE +:105ED000004CEF450060EF450058EF4500548FC57A +:105EE0008FE4EF450118EF45011CFE9FFE06305977 +:105EF000EF4400BCEF4900781A9BEEFC00C0F01F95 +:105F000000481892C290EEF8010C4009189A708669 +:105F1000706C300B5D16049CF01F003CEEF800C85E +:105F20005808EFF81028F9B90101F1D9E108EFF8A4 +:105F30001A28EFF80029F9B90001F1D9E008EFF8C3 +:105F40000A29EEF90090EEF8009C2FF92FF8EF499E +:105F50000090EF48009CEF450084FE9FFDF5EF4464 +:105F600000BCEF40004CEF450058EF4500448FF572 +:105F7000EF4500488F958F85EF440040FE9FFDBDA3 +:105F80003078EF4400BCEF48004C8FC56F98EF416C +:105F900001108F186E7CFE9FFDAEEEF800FC5808D5 +:105FA000FE91FF038FD4EEFC010C78785808C040B6 +:105FB000780C5D186E695809FE90FEF76ED8580887 +:105FC000FE90FEF36E7C3059EF4400BCEF49004C6C +:105FD0008FC4EF440110FE9FFD8E3088EF4400BC5B +:105FE000EF48004CEF44005CFE9FFD8780037E205D +:105FF0008003D744800268308002608C8002740085 +:106000008002747480025790800091E88002653CA1 +:106010008003D76480025874800254FC800263E6D7 +:10602000EBCD408076085808F9B901FFF1D9E108B5 +:10603000F7F81A0076185808F9B901FFF1D9E10804 +:10604000F7F81A0176285808F9B901FFF1D9E108E3 +:10605000F7F81A0276385808F9B901FFF1D9E108C2 +:10606000F7F81A03169718991698486A300B301CDF +:10607000F01F00050E9CF01F0005E3CD808000009E +:10608000800260208002747480025A84D401169CBD +:10609000F01F0002D802000080025A84D421203D63 +:1060A0001895E06C0120F01F00221897C38031E89A +:1060B0003039F9480088F948006833C8F949006C5C +:1060C000F9480064F945010C300430CA99A4089BD2 +:1060D0001A9CF01F00186AF850286ADA500A6AE819 +:1060E0005018EEF8010C1A99704A493B0E9CF01FAB +:1060F0000013EF4C00C01A961898C14030160E9C41 +:106100008F76F01F000F0E9C8F74F01F000D0E98FD +:1061100008990C9C48BA089BF01F000B0E9C2FDDC1 +:10612000D8220E9C1097F01F0009CF9B80028F246D +:10613000800091D0000004788002711C80025A8493 +:106140008002602080027474800091E8D401580CB1 +:10615000C090F8F800D45808C050F8F800805808EB +:10616000C020D8023018F94800809958F01F00026A +:10617000D802000080025A84D401580CC04099AB68 +:10618000F01F0002D802000080025A84D401580C8B +:10619000C060F94B00E0994BF01F0002D8020000EC +:1061A00080025A84EBCD40801897580CC090996BB0 +:1061B000F94B00DC580BC0610E9CF01F0005E3CDCD +:1061C0008080F8FC00C0F01F0003CF7B80025A845F +:1061D000800263BAD401580CC04099DBF01F000262 +:1061E000D802000080025A84D401580CC04099BBE8 +:1061F000F01F0002D802000080025A84EBCD40E07C +:10620000189714951296580CC3A0F8F8008C2FF824 +:10621000F948008C5839E08B0009F8F800A82FF8ED +:10622000F94800A8E3CF80E01588306AF94800B04B +:10623000F8CCFF4CF01F0042ECCA00040BA90BB8CD +:10624000F1E910861436E08B00130B99300CF80935 +:106250001800C4603038F0091800C130EEF800A80A +:10626000301C2FF8EF4800A8E3CD80E0EEF800AC3A +:10627000300C2FF8EF4800ACE3CD80E0E3CF80E0B6 +:10628000E046002BE088004C3FE80BCBF00B1800F9 +:106290005F0A3028F00B18005F09124AF80A18004C +:1062A000CEE13018F00B1800C3A1EEFC00CCF01FBB +:1062B00000252FC60C9CF01F0024EF4C00CCC2F030 +:1062C0000C9A0A9BF01F001E0E9CEF4600D0301661 +:1062D000EF460074F01F001D0C9CE3CD80E0EEF84B +:1062E00001145808C100300830398FC8EF48011434 +:1062F0008F29EF49004CEEFC010C78C85808C030DB +:10630000780C5D18EEFC00D4F01F000E0C9CEF46DC +:1063100000D8F01F000DEF4C00D4C031E3CF90E067 +:10632000EACBFFFCEEFA00D8F01F00050E9C3016F9 +:106330008F56F01F00060C9CE3CD80E0800091DCBE +:10634000800091E88000920080025A84EBCD40806A +:10635000189779685808C0B079BB580BC08070494D +:106360005D193008EF480058EF48006CE3CD80809D +:10637000EBCD40C01897580BC04078085878C04003 +:106380003018EF48006030786FA68F086F9C6C293A +:10639000300A305B5D196FA86F9C7029301A304B42 +:1063A0005D19E3CD80C0F94B00745EFCF94B00B081 +:1063B0005EFC580CF9FC10135EFC580CF9B8010196 +:1063C000F9F81A06F9B9010BF9F91A005EFC580C34 +:1063D000C08079485808C05079589708794C5EFCBD +:1063E000300897085EF8580CC0C0791A580AC09057 +:1063F000792897083009F9490048F94900445EFABC +:106400003008109A97085EFAF94B00C45EFCD70377 +:10641000D401580CC040483BF01F0003D8020000D4 +:106420008003D7B08002634CEBCD40801897580CA6 +:10643000C0F079A8300B7019799C5D19C0916E6815 +:106440005808C0606E2820385818E0880004E3CD52 +:1064500080806F485808F9B80101EFF81A136FA847 +:106460006F9C7029301A300B5D19EEFC00A4483A7D +:10647000302BF01F0003CECB8003D7BC80023A1A2A +:10648000EBCD40801897580BC040780858B8C040F2 +:106490003018EF4800606F4930B88F085809F9B8D4 +:1064A0000101EFF81A136FA86F9C7029301A300B96 +:1064B0005D196FA86F9C7029300A305B5D196FA859 +:1064C0006F9C301A7029304B5D19EEFC00A4484ACD +:1064D000302BF01F0004E3CD808000008003D81C27 +:1064E00080023A1AEBCD40C01897580BC04078088C +:1064F00058C8C0403018EF48006030C86FA68F08F9 +:106500006F9C6C29301A302B5D196FA86F9C702915 +:10651000300A305B5D196FA86F9C301A7029304BC0 +:106520005D19EEFC00A4484A302BF01F0004E3CDB7 +:1065300080C000008003D86080023A1AEBCD406032 +:106540001896784CF01F000B30056D1C8D45F01F20 +:1065500000096D4CED450044F01F00066DA8ED45A7 +:1065600000500A9A6D9C70290A9B5D19E3CD8060EA +:10657000800091E8EBCD40E01897580BC4F0780804 +:106580005808C4C130088F086FD95809C0B06F6867 +:106590005808C08070985808C0506FBB0E9C5D189A +:1065A000C4114A4B0E9CF01F00246FA83006301512 +:1065B0008F16EF4500408F268F666EFA70490C9B50 +:1065C0006F9C5D196FA80C9A70290C9B6F9C5D19CC +:1065D0006FA80C9A7029302B6F9C5D196F4CF01FBF +:1065E00000176FA80A9BEF460050EF46004C0C9A2C +:1065F00070296F9C5D193FF80C9A8F386FA5303B5E +:106600006F9C6A295D196FA80C9A7029304B6F9C9A +:106610005D19EF4600C0E3CD80E03018EF48006020 +:10662000CB2B6F686FBB70A90E9C5D19CBFB000074 +:106630008003D8948002634C800091E8EBCD40E069 +:10664000205D1897580BC04078085858C040301843 +:10665000EF48006030588F086F695809C4406FA830 +:10666000FACBFFF070596F9C5D19310A300B189509 +:106670001A9CF01F00256F1C6EE850086E295019F7 +:106680006E6850286F095039F01F002030086F6B7A +:10669000EF48005CEF480044EEC8FFB81A9A0A9928 +:1066A0001AD80E9C405876566FBB5D16EF4C0044CE +:1066B00040188FE82FFD5808C1616F785808C13124 +:1066C00040188F2840298F694038EF4800406F6894 +:1066D00070695809C08070785808C0506FBB0E9C14 +:1066E0005D19C0412FBDE3CD80E06F4CF01F000766 +:1066F0006F68EECAFFAC70796FBB0E9C5D19EF4CF2 +:106700000050CF1B800091D0800091E8EBCD4080FD +:106710001897580BC04078085868C0403018EF48A8 +:10672000006030686E4C8F08F01F001A6F18580810 +:10673000C2E0EEF800B05808C2216EA86F2C8F3866 +:10674000F01F00158F4CC0706F2A6F1BF01F0013D5 +:106750006F288F586FA8301A7029303B6F9C5D19D5 +:106760006FA86F9C7029300A305B5D196FA86F9C11 +:1067700070496EFA300B5D19E3CD8080310AEECBA3 +:10678000FF7CEECCFF6CF01F0005CD8B8F48CE9BBD +:10679000800091E880009200800091DCEBCD40FC0D +:1067A000201D79A81897169214931294799C700959 +:1067B0005D191896C2F06F685808C23070C8580842 +:1067C000C2000E9C1A9A6FBB5D181895C1A0400CB0 +:1067D0002FBC870CF01F0015C1D03028B892B888A4 +:1067E00030188699B8B9A9891897B8A9B8C80A9B6A +:1067F000400A2FBCF01F000E0E9C2FFDE3CD80FC45 +:106800005804C0416DCC580CC0A16DB86DA5580599 +:10681000C0A130070E9C2FFDE3CD80FC6DD81895EC +:106820005008CD6B5008CD4B80009200800091DC69 +:10683000D431209D3004F8C9FF7CF8C8FF6C18974C +:1068400050195008F8C0FFB808956FA8EF450060D0 +:10685000301B70196F9C5D19C0706FA8306B701978 +:106860006F9C5D19C2F16FA8306B70196F9C5D1938 +:10687000C140EEF800C45808C101EEF800C0E0487D +:106880000032E08A0025E0480033E080011C6F8878 +:106890005808C1003014CDAB6E085818F9B8010182 +:1068A000EFF81A18EF4500C030188F086F885808A5 +:1068B000CF216F7C580CE80C1700F9BC01012F7D2B +:1068C000D832301B0E9CF01F01EECE2B6E0958A95A +:1068D000FE9BFFDFFEF807ACF009032F30183029CC +:1068E000EF4800608F09CD4B300B0E9CF01F01E686 +:1068F000CCFB6E196EB81039C760300B0E9CF01FC0 +:1069000001E2CC6B6EA96E381039E0800137300B94 +:106910006E8E580EC1B06E685808C1806EAA6E396E +:10692000123AE08000BBEEF800B05808C0F0F2C8A0 +:10693000FFFFF1D8C008103AE08000B0F2C8FFFEB7 +:10694000F1D8C008103AE08000A96E2C582CC20083 +:106950006E985808E08001236E685828E080011F77 +:106960006EAA6E39123AE0800146EEF800B058087F +:10697000C0F0F2C8FFFFF1D8C008103AE080013B38 +:10698000F2C8FFFEF1D8C008103AE08001346E78FA +:1069900058085F1A3008F5EB0009F0091800E0818B +:1069A000010FEC1B0001F5EB0008F2081800E08075 +:1069B00001056EBB1699582BE080012A6E16580609 +:1069C000C071581BE080021B582BE08101630C3B17 +:1069D000E080014F0C995919C0F1580EC0416FE881 +:1069E0005808C0A0300B0E9CF01F01A8C51B6EEB11 +:1069F000580BFE90FF7C300B0E9CF01F01A5C48B42 +:106A00006FA8305B70196F9C5D19C7016FA8307B50 +:106A100070196F9C5D19C0506E685808FE91FF395F +:106A20006FA8300B70396F9C5D19C0516E68582883 +:106A3000FE90FF2F6FA8308B70196F9C5D19FE912F +:106A4000FF286FA8189B70396F9C5D19C0516E6844 +:106A50005828FE91FF1E6FA8307B70196F9C5D193E +:106A6000C0806E285828C0506E685808FE90FF11EC +:106A70006E185918E080025C5998FE91FF0AEEF8F2 +:106A800000805808FE90FF056E685808FE90FF01D0 +:106A90006E285848FE91FEFD300B0E9CF01F017DC4 +:106AA000CF7A6FA8306B70196F9C5D19FE90FEF164 +:106AB000EEFB00C4580BFE91FEEC0E9CF01F017023 +:106AC000CE7A3328EEFC00A4FEFA05CC1AD8302B7F +:106AD000F01F0172EEF800C0301B16080E9CEF4844 +:106AE00000C0F01F016F2FFDCD3A6FAA3038FACBEE +:106AF000FFE08F0830136F9CEF43006074595D19FD +:106B00008F95507C8F85EF4500788F758FA58FB559 +:106B10008FC58FD55F0A408B1896583B5F88104A07 +:106B2000EA0A1800C23119A919B8F1E910885068A9 +:106B3000103BC1C319988FA8EEF900B05809C09056 +:106B4000069C4019FACAFFE8FACBFFE4F01F015592 +:106B50000D893028F0091800E080011CE08B008DC1 +:106B60003018F0091800E0800123EEF800C02FF87B +:106B7000EF4800C0FE9FFE8D6E785808FE90FEC95B +:106B8000EEF800B05808C080310A400B401CF01FDE +:106B90000146FE91FEBE301BCBCA580EFE90FEF998 +:106BA0006E685808FE91FEF56E185918FE91FEDACF +:106BB000583CFE91FED7CECA6E19C0EB301830A9F2 +:106BC000EF4800608F096F1CF01F01386E485808AD +:106BD000C1A06E5CF01F0136EF4C0044FE90FE59E0 +:106BE0006E5A6E4BF01F01336E58EF480048FE9FFF +:106BF000FE50300B0E9CF01F012AFE9FFE4A30090A +:106C000050494048EF480044FE9FFE436F08580833 +:106C1000FE90FED6301830996FAA8F09EF480060B9 +:106C20007458FACBFFE86F9C5D1819A919B818962B +:106C3000F1E910885848E08B01476F1CF01F011BD9 +:106C4000305CEF450044EF4C00486EA6F01F011881 +:106C5000E08001853029B896B889EF18004AB8C994 +:106C6000B8B8A988B8A8EF4C0044FE9FFE12584C53 +:106C7000FE90FEB3CB8A3038F0091800E08000DCCB +:106C80003048F0091800FE91FF7230188F98C6EB5B +:106C900030181693EF48006030496FA8E04B00FEB3 +:106CA000EFF3000D8F096EC670096F9C5D19069A8F +:106CB0000C9BF01F0101E08100C36F1CF01F00FB63 +:106CC0006FA8EF4500446EA270096F9C5D19503C9F +:106CD000FACCFFE8F01F00F91893C9206EB8E0481D +:106CE00000FEE08101516FA8406670096F9C5D193C +:106CF00030C8505CA376EF480048ECCCFFECF01FA6 +:106D000000EC1891E080012E3FE9B892B8C9302913 +:106D1000B889F8C8FFFBB0A5B085B095F8C9FFF8F1 +:106D20003038B285B295B2A5B2B8504CF8C2FFF473 +:106D30000A96C298661A6ED81438C210405CF01FCA +:106D400000DE049AE4CBFFFC580CC1903FE814C865 +:106D50008689B4896608A988B4986609B4A907C861 +:106D6000B68886A9B6996618A988B6A86619B6B96C +:106D7000F6C2FFFC60082FF62F88810866F35803DF +:106D8000E0800099660B6EC81638CD50661ACD7B30 +:106D90006E185918FE91FEEB40685848FE98FEE7C1 +:106DA0003018EF4800780DC98FB9CE0A406A584AAA +:106DB000FE98FEDD30188F780DC98FB9E04900FECE +:106DC000FE91FED558BAFE98FED2ECC9FFFB139C8B +:106DD000138A13A8F1EA1108F1EC1088ECCBFFF844 +:106DE0008FC817AC17B81789179AF1E91188F1EA1B +:106DF0001108F1EC10888FD8CB9A6FA83089EF4B2F +:106E000000608F09FACBFFE0705A6F9C5D1AFEFAA2 +:106E100002AE302BEEFC00A4F01F00A06F1CF01F90 +:106E200000A30C99EF460044009A6EAB0E9CF01F35 +:106E300000A5C1AB30188F88FE9FFE990C9C069B65 +:106E4000F01F00A1FE90FF3B6FD85808C0906F6AFA +:106E5000580AC06074096EC81039E0800086FEFBD5 +:106E6000026A0E9C3006F01F009A6EB88F186F6C85 +:106E7000580CE08000CD5806C54078B86FBB0E9C1A +:106E80005D18EF4C006C6FB65806E08000CA6F6A60 +:106E90006ECB30188F287429FEFA02381AD91AD30B +:106EA0001ADB302BEEFC00A4F01F007C2FDDFE9FD0 +:106EB000FCF05806C4206F285C78A2B8A988A2A864 +:106EC000FE9FFEA1F0CC0004F0C20005F01F007888 +:106ED0001893FE90FEB45802C120ECCCFFFB300AA0 +:106EE00035DB1938F0C90021F6091800F9B80B5F35 +:106EF000E60A0B082FFA1432FE9BFFF53008E60273 +:106F00000B084F581AD34F5A1AD8302BEEFC00A456 +:106F1000F01F0062069CF01F00652FEDFE9FFE8FA4 +:106F200078380E9C5D18EF4C006CCAEB6FF858086F +:106F3000FE90FCAFFE9FFDAA04983FE910C9B0A6E1 +:106F4000B086B096E4C9FFFCB2B6B286B296B2A6DD +:106F50006F282F88EF480048CB0B0A9CFE9FFE85C8 +:106F60005045FE9FFE5074181033FE91FF7A7499BD +:106F70005809FE90FF766FBB0E9C5D19FE90FF7165 +:106F80003016C74B3058406CEF4800482FACF01F0C +:106F900000481896FE90FE35B89230283039B888EF +:106FA000B8C9504CF8C2FFFB50250A91C1A8661A17 +:106FB0006EB8103AC130403CF01F003FC0F0660888 +:106FC0005808C5A040285808C0913FE904C93018A6 +:106FD000502860082FF12FF8810866F35803C0602D +:106FE000660B580BCE50661ACE7B5801EFF8101284 +:106FF000E5F10E00EFF80012F7B800FFEFF80A1203 +:107000005C78ACB8A988ACA8FE9FFDFD069B6ECC51 +:10701000F01F002DEF4C0058FE90FE51C2DB6FA810 +:107020006F9C70095D196F6870291AD91AD36EC8E0 +:1070300018921AD8302B4AAAEEFC00A4F01F0017B1 +:10704000EF4600588F268F1658025F1B6EB92FDD52 +:1070500058D95F081668EC081800FE90FE30E4F876 +:1070600001605808FE91FC15E4F801685808FE908C +:10707000FE26FE9FFC0E661804C8CACB800265740B +:107080008003D7848002670C8002663C80026370B4 +:10709000800264808003D8A080023A1A800264E4EF +:1070A00080028D9C8000917C800091E8800092009D +:1070B000800091DC80023AD8800271E48003D8F02D +:1070C0008002679C800271908003D9248002634C07 +:1070D0008003D9708003D8D08003D3E48003D930F3 +:1070E000EBCD40801897580CC0E0488BF01F00088B +:1070F0000E9CF01F0008EEFC00ACF01F00070E9C79 +:10710000F01F0006E3CD80808003D9AC8002634C81 +:107110008002653C8002D298800091E8EBCD40F877 +:10712000203D1896169414931295E06C00C8F01F39 +:1071300000151897C1C033C8F946006499F8F9449E +:107140000068F94300A430CA300B1A9CF01F000EEF +:107150006A2850286A0950096A181A9C5018F01FAA +:10716000000BEF4C00AC1A961898C0500E9C2FDD07 +:10717000E3CD80F80E9C1097F01F0005CF8B000028 +:1071800080028F24800091D08002D2C4800091E8D8 +:10719000189948A8700C580CC051C0D878FC580CED +:1071A000C0A078081238CFB1781816385E0C78FC79 +:1071B000580CCF815EFD000000007AB01899489805 +:1071C000700C580CC051C0C878FC580CC09078089E +:1071D0001238CFB178181638CF81782C5EFC5EFD5E +:1071E00000007AB0189B4888700C580CC0A0189901 +:1071F000300A2FFA72F95809CFD1149897085EFC1B +:107200001898CFDB00007AB05EFDD703EBCD40E0ED +:1072100048D81896169570075807C051C0E86EF701 +:107220005807C0B06E2C0C9BF01F0008CF916E0861 +:107230008B086E1CE3CD80E030088B08109CE3CDFA +:1072400080E0000000007AB0800091A0EBCD40C04B +:1072500048B70E966E095809C0B072F88D08129C96 +:1072600072D85808C0705D186E095809CF71E3CD07 +:1072700080C0129CF01F0003CEEB000000007AB02B +:10728000800091E8EBCD40C048D66C485808C0312A +:10729000C0880E987057109CF01F000A5807CFA1A5 +:1072A0006C6CF01F000930086C3C8D68F01F000505 +:1072B0006C8CF01F0004E3CD80C0000000008C90B7 +:1072C000800091E880014544EBCD40F8495718967D +:1072D000169314946E2B12952FFB6E3CA56BF01F2A +:1072E0000012C1D06E28A568F80809066E29A569A4 +:1072F000F8090009932593146E2AF4081504F80878 +:10730000000891336E188F3C2FFA1036EFF69A0171 +:107310008F2A3018300C8FC8E3CD80F8E3CFC0F847 +:1073200000008C90800091F4EBCD404CE0634DD395 +:10733000EA1310621896F01F000DF8030648A7899B +:10734000E06A03E8F20A0248F8080109121CF20A8E +:10735000024AF80304428D1ABF5CA743E60C010CF5 +:107360008D0CE3CD804C0000800145C4EBCD408006 +:10737000202D4A076E495809C2C06E581039C29074 +:107380001A9CF01F001D6E484009700A1439C2444F +:107390007018401BF40901091618C276F00B141F6F +:1073A000E06A03E8F20A024AE0694DD3EA19106282 +:1073B000F0090448A7491619F20A000C580CE08A93 +:1073C000000E300948DA6E6BF01F000D6E488F58C2 +:1073D0002FEDE3CD80801439C030301CCF3B7018C6 +:1073E000401B103BCFB4CD7B2019F028BDC0CD7B16 +:1073F00000008C9080027328800275188001455827 +:10740000D43149A0189516931492604C580CC2B010 +:1074100030060C940C91785778480A38C09018962A +:107420000E9C5807CF91F01F0012089CD8325BF3D6 +:107430005F0A782906395F081448E2081800CF006F +:107440005BF25F0A783904395F081448E2081800D3 +:10745000CE705806E1F70A04EDF71A052FF4F01F75 +:107460000005CDFB1894CE0B00008C908002736C4D +:10747000800091E8EBCD40FC18961695149212947A +:107480001093318CF01F00211897C3A0F01F00202B +:107490006E0A6E1B0C0AEA0B000B8F0A8F1BEE5B49 +:1074A000423FE08A000B2FFAEE3B42408F0A8F1BCF +:1074B000EE5B423FFE99FFF98F248F338F423008F5 +:1074C0008F58494C78495809C1D072081438E0895E +:1074D000001A2F0CC0A8F2CCFFEC72595809C0A0BA +:1074E00072081438E0890007103ACF617218103B17 +:1074F000CF348F599907F01F0008E3CF80FCE3CF0A +:10750000C0FC2F0CCF7B000080009200800273280B +:1075100000008C908002736CEBCD40E0202D49661A +:107520001A9CF01F00166C475807C1F040096E08FE +:107530001238E089001B3005C05840096E08103928 +:10754000C1451039C0516E1940181238C0E56E5847 +:107550008D558D486E3B6E486E2C5D180E9CF01F4D +:1075600000086C475807CEA1F01F00062FEDE3CFAF +:1075700080E0000000008C9080027328800091E879 +:107580008002736CEBCD408049A76E3E580EC2B0AE +:107590006E2A580AC280E08A002B7C081838C27014 +:1075A000FCC9FFF0300BC05872082F091838C050C2 +:1075B0002FFB163AFE99FFFA143BC170201A163AB7 +:1075C000C0F0161AF60C1504A56AFC0C000C2FFB73 +:1075D000A56BFC0B000BF01F00086E2A201A301858 +:1075E0008F2A8FC8E3CD8080E3CD8080300BCE7BA7 +:1075F00000008C90800091C4EBCD406048861895C7 +:10760000334A300B0C9CF01F0007ECCCFFE88D05D3 +:10761000301BF01F0005E3CF8060000000008C905D +:10762000800091D0800144F80050F2010100000078 +:107630000000000000000000F6F800DC5808C05010 +:10764000F8F800F85808C0205EFDF6FB00D0580B93 +:10765000CFC076085808C04176185808CF602F8BE5 +:10766000CF9BD703EBCD4080300B1897F01F001352 +:10767000306A300BEECCFF64F01F0011306A300B23 +:10768000EECCFF5EF01F000E300BEEFC00E0F01FB2 +:10769000000D300BEEFC00E0F01F000BEEF800BC1C +:1076A0005828C030E3CD8080EEFC00E0300BF01FA6 +:1076B0000007E3CD80800000800217D0800091D0C9 +:1076C000800261E8800261D4800261A4EBCD408039 +:1076D0001897F8F800945808C160300BF94B0094E3 +:1076E000F8F800D470985808C040F8FC00C45D1841 +:1076F000486A302B0E9CF01F0006300A0E9C149B2B +:10770000F01F0004E3CD80808003D9D480023A1AB0 +:1077100080022584D431209D500C761558155F9831 +:107720007607169058075F1910693008F00918009D +:10773000E08000B8EEC4FFFF0989F2C6FFFE0C35F9 +:10774000E08500B010923DD33301C168E208180013 +:10775000C2800C0758155F9958075F181268E40833 +:107760001800E080009EEEC4FFFF0989F2C6FFFE0C +:107770000A36E08900960C150F88E6081800CE71CD +:10778000305AF4091800FE98FFE6EECCFFFE306A8E +:107790004DFBF01F0060C0B00F88E2081800CDA1BB +:1077A00009883019F2081800FE98FFD540080E9B92 +:1077B0000C9AF0FC00DCF01F00581897C711400A23 +:1077C000FACBFFFCF4FC00DCF01F0054C21540793A +:1077D0005809C1E040685808E0890007C19840682E +:1077E0001037C1644079EE0B1504F20B000B400911 +:1077F0003008F2FC00DC2FF71099109AF01F0048B7 +:10780000CEF14008301BF0FC00E0F01F004660465F +:10781000605558065F1958155F981069C760ECC429 +:10782000FFFF0989F2C7FFFE0E35C6F53003069249 +:107830000691C1A85802C0610D88330AF4081800E7 +:10784000C3A00E060E1558065F1858155F991268EA +:10785000E2081800C3F0ECC4FFFF0989F2C7FFFE7D +:107860000A37E08900385803CE610D883DDAF40804 +:107870001800CE113058F0091800FE98FFDD306A6C +:107880004A3BECCCFFFEF01F0023CD5140090E9A7D +:107890000C9BF2FC00DC3013F01F0023CCCB600704 +:1078A0005807CB604009300AF2FC00DC149BF01F43 +:1078B000001ACAEB09883019F2081800FE98FFC3B5 +:1078C00040080E9A0C9BF0FC00DC3012F01F0017F1 +:1078D000CB9B5803C0F05802C0B160485808C08024 +:1078E0004008049AF0FC00DC049BF01F00102F7D80 +:1078F000D83260465806CF004009300AF2FC00DC5E +:10790000149BF01F0009CE8B3002CF5B80027628DB +:107910008000917C8002B5EC8002C04C8002938094 +:10792000800255968002B58C8002B52CD431FACDF8 +:10793000009018911497586BE08B00C4FEF807482C +:10794000F00B032F580AC0A0F8F800907009739A42 +:10795000580AC0410E9BF01F01CD304B029CF01F16 +:1079600001CCE2F801185808E0810312FAC7FF942D +:10797000E2F800D470285808C4C00E9BE2FC00C492 +:107980005D18C475E2C6FF64306A0C9B0E9CF01F44 +:1079900001C1C3F0FB3800711AD8FB3900741AD941 +:1079A000FB3800771AD8FB39007A1AD9FB38007DEA +:1079B0001AD8FB390080FEFA06DE1AD9301B029C69 +:1079C000F01F01B6306A0E9B0C9CF01F01B5306AA7 +:1079D000300BE2CCFF5EF01F01B3E2FA00BC2FAD2A +:1079E000584A5F08590A5F091248C081588AE080E6 +:1079F000030C0E9B029CF01F01ACE2F80090704952 +:107A00005819E08102D5E2F800B05808E08002D0B1 +:107A1000FB3800711AD8FB3900741AD9FB3800778B +:107A20001AD8FB39007A1AD9FB38007D1AD8FB39ED +:107A30000080302B1AD9FEFA0672029CF01F0197C3 +:107A4000E2FB00B02FAD580BC040029CF01F019824 +:107A50000E9BE2FC00DCF01F0197622CF01F0196E8 +:107A6000300BE2FC00E0F01F0195300BE2FC00E07F +:107A7000F01F0193E2F800BC5828C061300BE2FC13 +:107A800000E0F01F0190301BE2FC00E0F01F018BD2 +:107A9000300BE34B00F4E2F900BC59095F0A584986 +:107AA0005F081448F6081800E0800216029CF01FD8 +:107AB0000186307B029CF01F0176029CF01F01833F +:107AC0002DCDD832580ACFD0149B7439F8FC00DC85 +:107AD000742AF01F017F2DCDD832F8FB00BC590B62 +:107AE000CF00F8F800E85858E08002355838E08BAD +:107AF0000234E2C7FF64306AFEFB05D80E9C2F8B70 +:107B0000F01F0164EE0B1710E06800A2E3D8E00B51 +:107B1000029CF01F0171E2FC00DCF01F0170FEFA14 +:107B200005BE302B029CF01F015DE2FA00BC584AF2 +:107B30005F08590A5F091248C0B1588AE08002976D +:107B400030080E9BE3480104029CF01F0157029C81 +:107B5000F01F01642DCDD832FEFA058C303BF01FAA +:107B6000014F5807E08002806E0858085F1B169A84 +:107B7000E2FC00DC301BF01F015DFACCFF94F01F2B +:107B8000015CE2F800985808E08001D541B9F2089C +:107B90000108E048003CE08A01A6E34900982DCDA9 +:107BA000D832F01F0154E08501EBE2F900907248F1 +:107BB0005828C870E2F800AC5808C831E2FA00CC86 +:107BC0001094500AE2F000D072285808E08A00A908 +:107BD000300850187218401AF00A032850585800FC +:107BE000E08A0097400530020A96C11808973003D2 +:107BF00030142FF2ECC6FF6404305F983009E9E8D6 +:107C00000008F2081800E08000970E940C9B029C7C +:107C10000C93F01F0139C05078385818FE99FFE8CE +:107C20006D585808C051ECF800805808CE004059F3 +:107C30005809CDD0ECC8FFFAECCAFFA8ECC9FFD4B4 +:107C40005048502A50394057C0486E175807CCF05A +:107C5000EEF801945808CFA16CAA6E58103ACF6183 +:107C60006E4B404CF01F010BCF116E885808E0811D +:107C700000E16F6AEDBA0001C061ECFB0080580BB7 +:107C8000E08100E3F1DAC001300AF4081800CDE029 +:107C90006D5B580BCDB0FACAFF94403CF01F011742 +:107CA000CD516F6841B91268CD106F3841C9126863 +:107CB000CCD06F4841D91268CC906F5841E9126816 +:107CC000CC5058065F04C96B149BF01F00F02DCDFB +:107CD000D832149B2EACF01F010A1896FE91FEF2CA +:107CE0006F9B580BE080012A581BFE91FEEBE34B83 +:107CF00000D8029CF01F00FB622CF01F01028326BB +:107D0000CE0A5803E08100BF0E94E2F900904018BB +:107D10002FF850187228401A103AFE95FF5DE2F8CD +:107D200001085808E0800121029CF01F00F7E2F9E9 +:107D30000090C4BB5804CE600E923006C108049770 +:107D4000089930032FF6EAC5FF640C305F98F3E81A +:107D500000083009F2081800CD500E920A9B029CD0 +:107D60000A93F01F00E5C05078385818FE99FFE9D3 +:107D700040585808CE50EACAFFFA4057506AC078B7 +:107D80006AA8103AC5006E175807CDA0EEF8019406 +:107D90005808CFA16E5A580ACF416E885808C1E1E1 +:107DA0006F5BEDBB0002C040EDBB0003CED1F1DB49 +:107DB000C002C0806B585808CE71EAF8008058089D +:107DC000CE31EEF8014C5808C110EB190088EDB91E +:107DD0000001CDA058055F09CB6B306AEECBFFE800 +:107DE0000A9CF01F00ACCD01CDCB1099EEC8FECCA3 +:107DF0002FF9700A580AC2612FC85849CFA1EDBBAC +:107E00000003C071EEF800F0F1D8C002F9BA010128 +:107E1000EB190088EDB90004C030580A5F0A580A0F +:107E2000CB30CD6B6E4B406CF01F009ACAD1CB6B40 +:107E3000306AEECBFFE80C9CF01F0096FE91FF0726 +:107E4000C19B301ACDDBFACAFF94402CF01F00AB67 +:107E5000C0306F6AC18B6F6A41B8F5E80008FE90C8 +:107E6000FF136F3841C91268FE90FF0E6F4841D969 +:107E70001268FE90FF096F5841E91268FE90FF04F6 +:107E8000C21BE2F800A85808C131306AE2CBFF6497 +:107E9000069CF01F0080C170E2F800E85838C081ED +:107EA000306AE2CBFF5E069CF01F007AC0C00E9BDA +:107EB000029CF01F007FE08100B50E9A069B029C99 +:107EC000F01F0092009A400BE2FC00DCF01F0090D3 +:107ED000FE9FFDF8169A029C30ABF01F008EFE9FAD +:107EE000FDEE3017FEFA0230303B029CE34700946F +:107EF000F01F006AE06B2710300CF01F0088E2F8DA +:107F000000D470985808C0500E9BE2FC00C45D1865 +:107F100030EB029CF01F0082300A029BFEFC020440 +:107F2000F01F0081300802994FEA109B33CCF01FFC +:107F3000007F41B9FE9FFE33E2F800D85808FE905A +:107F4000FDC1E34B00D8029C301BF01F0079FE9F5F +:107F5000FDB9582BC780E07A86A0300B029CF01F39 +:107F60000075FE9FFDC8305BE2F801105818C7206D +:107F7000029C300AF01F006FFE9FFDA4E2F9009002 +:107F800072485828FE90FD9E301BCEFBFAC7FF9426 +:107F9000E2C6FF64306A0C9B0E9CF01F0041E2F8C1 +:107FA00001185808FE91FCF8FE9FFCE4029CF01FAB +:107FB00000621896C230F8FB0194580BC1F1795851 +:107FC000E2180013C351189B029CF01F005CE2F8FA +:107FD00000B05808C0701036C050E2FC00E0F01F3E +:107FE0000058E2FC00DC0C9BE34600B0F01F00559B +:107FF000029CF01F0055FE9FFD0D029C303BF01FC0 +:108000000053FE9FFD5FE2F800B05808FE90FCF3BD +:10801000F0F800F0F1D8C002FE91FCEDFE9FFCEFFD +:10802000029C300A30ABF01F0043FE9FFD4B350928 +:10803000FAC8FF70189A10D9029CFAC9FFE4F01F21 +:108040000044CC6B4C3AF01F0015E2F800E8FE9FAC +:10805000FD4F72485818F9B80002E3F80A44F9BB1A +:108060000000C87B0E9BFE9FFD84E2F800B058081C +:10807000FE90FD68F0F800F0F1D8C002FE91FD62BC +:10808000FE9FFD678003D9B880027714800217D065 +:108090008000917C8003D9F880023A1A800091DC3C +:1080A000800091D0800226948003DA3880027638EE +:1080B0008002BA4C80028172800261E8800261D441 +:1080C000800261A480021CE080021DB88002979C9F +:1080D0008002762880021AE08002BA1C8003DAA8A7 +:1080E000800276648003DAE48002D19C80028F549F +:1080F00080021E84800218F88002BD68800091A072 +:10810000800281748002189C800230DC800298A476 +:108110008002246C8003DB0480028F1C800228D83C +:10812000800276CC800274008002747480022794EE +:10813000800225848002195C800222A480025748B4 +:108140008002B9D48002237080022FCC80021F30BD +:108150008003DA68580C5E0E5E1DD401201D3008C5 +:10816000767C3009BA881A9A7668129B5D182FFDC2 +:10817000D8025EFCEBCD40801897580CC090789CDC +:10818000580CC035F01F00040E9CF01F0004E3CD16 +:108190008080000080027584800091E8EBCD40F87B +:1081A0001896129510944063328CF01F000B1897AC +:1081B000C0F00C9B311AF01F00093FFC8F658F74D3 +:1081C0008F838F9C30090E9A485BF01F00060E9C2F +:1081D000E3CD80F880028F24800091AC8002815A28 +:1081E000800272C8D4011698306AF8CBFFEF109C59 +:1081F000F01F0002D80A0000800091DCD431213D3C +:1082000076FE511E760A503A761950497628505813 +:10821000763E506E764A507A7669508976785098D4 +:10822000768E50AE769A50BA76B950D976C850E864 +:1082300076DE189850FEF8C9FFF876EA510A7654AF +:1082400076AB500C5019E02BA44F50CB110EF8CB4D +:10825000FFF45008512E403A700340487205502BED +:10826000E069A478EA19D76AFC0900091409760ABA +:10827000E06BB756EA1BE8C7F40B000B100BF5E5F3 +:108280002008066814581009E06870DBEA182420FA +:10829000EBE3200AF20E1507FDE9139E060EFDEA38 +:1082A000000A0A5A1005140BFDE32008F606150C07 +:1082B000EDEB13461C06EDE800080658405AE0694D +:1082C000CEEEEA19C1BD14051005EDEE2008EA0B4B +:1082D0001511F7E512FB0C0BF7E800081C58120308 +:1082E0004069120310034078E6051516E0690FAFE8 +:1082F000EA19F57CEBE312A5F00900091605F7E68B +:108300002008EBE800080C581C091009EBEB2008CA +:10831000F2031507E7E913930A03E7E80008165884 +:10832000E06AC62AEA1A4787E80A000A0C0A100A15 +:10833000E7E52008F402150CE5EA13420602E5E839 +:1083400000080A58408EE0694613EA19A830FC0973 +:10835000000916091009E5E32008F2061511EDE9F8 +:1083600012F60406EDE800080658409AE06B950105 +:10837000EA1BFD46F40B000B0A0B100B40A840C98A +:10838000F60E1516FE395BB1FDEB12AEE06A98D819 +:10839000EA1A69800C0E40BBF00A000AEDE22008E0 +:1083A000FDE80008045840C1060A50C9100AE069F7 +:1083B000F7AFEA198B44FDE62008F6090009F40B33 +:1083C0001507F7EA139B1C0BF7E800080C58F7EEAB +:1083D000200A0C0104091009F206150CEDE91346F8 +:1083E0001606EDEB2008EDEA000A1C5A1401E2051E +:1083F0001511EBE112F50C05EBE80008165840DA10 +:10840000E069D7BEEA19895CF40900091C09100962 +:1084100040E8F20E1516E06A1122EA1A6B90FDE9A7 +:1084200012AEF00A000A0A0EEBE62008160AFDE872 +:10843000000840FB0C58E0697193EA19FD98100A96 +:10844000F6090009FDE52008F40B1507F7EA139B70 +:108450001C0BF7E800080A580C0910094108F2063D +:10846000150CE06A438EEA1AA679EDE91346F00A84 +:10847000000A1606F7EE2008EDE800081C580A0A64 +:10848000100A4118F4051511E0690821EA1949B4E8 +:10849000EBEA12F5F00900090C05EDEB2008EBE81A +:1084A000000816581C091009F2031516E7E912A373 +:1084B0000A03E7E520080C680A58404EE06A256286 +:1084C000EA1AF61EFC0A000A160A408B100A40D867 +:1084D000F40E1505E069B340EA19C040FDEA13BE89 +:1084E000F6090009060E403B0C09E0665A51EA16EF +:1084F000265EF0060006FDE320080A68065810090B +:10850000E062C7AAEA12E9B6F6020002F20B150908 +:10851000F7E9137B41191C0BF7EE200806681C587D +:108520000A0606021006E063E681EA13D8A1F20308 +:108530000003EC09150EF3E613291609F3EB2008E6 +:108540001C68165840CA10024078E065105DEA15B4 +:10855000D62FE0611453EA110244E8050005F40146 +:1085600000011C051601E40A1514E06EFBC8EA1EA2 +:10857000E7D3F5E212CAF00E000E120AF5E9200860 +:10858000166840BB125812031005E066CDE6EA16E5 +:1085900021E1F6060006EA0B1505F7E513BB140BFF +:1085A000F7EA2008126841091458E06507D6EA1571 +:1085B000C3371001F2050005E2091509F3E113794B +:1085C0001609F3EB20081468165810034068140EBF +:1085D0001606E60A150EE0620D87EA12F4D5F5E3F9 +:1085E000132AF0020002120AF5E92008166840ABCF +:1085F00012581205100EE06314EDEA13455AF60303 +:108600000003FC0B1514F7EE12CB140BF7EA20084D +:10861000126840F91458E061E905EA11A9E310066F +:10862000F2010001EC091505F3E613B91609F3EBA5 +:10863000200814681658100540581402E066A3F884 +:10864000EA16FCEFEA0A1509F0060006F5E5137ACA +:10865000120AF5E9200816681258409E1002160307 +:10866000E40B150EF7E2132B140BF7EA200812683F +:108670001458E06502D9EA15676F1003FC05000580 +:10868000E60E1514FDE312CE160EFDEB200814685D +:1086900016581201100140A840E91406E060F68166 +:1086A000EA108771E20A1505F0000000F5E113BA3F +:1086B0001C0AF5EE200816681C58E0624C8AEA1283 +:1086C0008D2A1006F2020002EC091509F3E613796F +:1086D0001409F3EA20081C681458160540DB10053D +:1086E0004108E434C6BEE0616122EA116D9DE80AEA +:1086F0000007F6010001E066380CEA16FDE5F00619 +:108700000006EA08150EF1E513281208F1E9200B1E +:10871000F7EA000A125A1C021402407A404E120074 +:108720001001E063CFA9EA134BDEF4030003E40A6F +:108730001514F5E212CA100AF5EB200BF5E8200833 +:10874000EE0B000BF6091504F3EB13C914091258CC +:1087500014061000F3EA200AE065EA44EA15A4BE14 +:10876000E008150BFC050005F1E01358120512088E +:10877000105A10031401F1E92009E20B1510F7E17A +:10878000130B100B1659F7E820081206EC0E1517FC +:10879000FDE6129E160E1C5810054098FDEB200AAF +:1087A000EA061504E0694B60EA19F6BBEDE513C66D +:1087B000F00900091C0616090C5AEDEE20081403F6 +:1087C00040CBE605150BEBE313550C050A58E06AA0 +:1087D000BC70EA1ABEBF1009F60A000AEBE62008D0 +:1087E000F20B1510F7E9130B0A0B16581C0A100AA6 +:1087F00040F8F40E1517E0697EC6EA19289BFDEAD9 +:10880000129EF0090009160EF7E520081C580C0905 +:1088100010094038F2061504E06A27FAEA1AEAA1BC +:10882000EDE913C6F00A000A1C06FDEB20080C58FF +:108830000A0A100A4068F405150BE0693085EA1948 +:10884000D4EFEBEA1355F00900090C05EDEE200812 +:1088500016090A58408B1009E06A1D05EA1A0488B7 +:10886000EBE62008F60A000AF20B1510F7E9130BE5 +:108870000A0B16581C0A100A40B8F40E1517E069C6 +:10888000D039EA19D9D4FDEA129EF0090009160E72 +:10889000F7E520081C580C09100940E8F2061504F9 +:1088A000E06A99E5EA1AE6DBEDE913C6F00A000A88 +:1088B0001C06FDEB20080C580A0A100A4118F405A2 +:1088C000150BE0697CF8EA191FA2EBEA1355F009D1 +:1088D00000090C05EDEE200816090A58405B100946 +:1088E000E06A5665EA1AC4ACEBE62008F60A000A0C +:1088F000F20B15101C0AF7E9130BE0692244EA1980 +:10890000F4290A0B1658100A4032F40E15171202F9 +:10891000FDEA129EEA0811FF160E409AFDE81008C3 +:10892000E069FF97EA19432A1658F40900090A0971 +:108930000C0241061002F60811FFE40A1506F5E2E2 +:1089400013AA1C0AF5E810081C58F2080005E06993 +:1089500023A7EA19AB941206FC0811FFEC0B000BDD +:10896000EA06150AEDE513661406EDE8100814583A +:10897000F6080008E069A039EA19FC93F00B150F1E +:10898000FA243942F7E8131BE80900050C0BEA0E3C +:10899000000EF40811FFF7E810080C58E06959C3FD +:1089A000EA19655BFC08000540E2EA0E15151202A3 +:1089B000FDE512BEEC0811FF160EFDE81008165872 +:1089C000E40A000AE069CC92EA198F0CF40800026C +:1089D0004068F00900090C09E40A1506F60811FFC1 +:1089E000F5E213AA1C0AF5E810081C58F208000268 +:1089F000E069F47DEA19FFEF40C1FC0811FF1201A4 +:108A0000E406150AE20B000BE0695DD1EA198584E2 +:108A1000EDE213661406EDE8100814584045F60818 +:108A200000011205E20B150FEA0E000EF7E1131B11 +:108A3000F40811FF0C0BE0697E4FEA196FA8F7E804 +:108A4000100840A30C581203E60A000AFC080005AF +:108A5000EC0811FFEA0E1515FDE512BE160EFDE835 +:108A600010081658F4080003411AF60811FFE069CF +:108A7000E6E0EA19FE2CF4090009E60A15060C09DD +:108A8000F5E313AA1C0AF5E810081C58F2080003C5 +:108A90004088E0694314EA19A301F00900091609A6 +:108AA000FC0811FF40FBE605150AEBE3136514050E +:108AB000EBE810081458F2080008E06911A1EA195F +:108AC0004E08F6090009F20E000EF006150FE069D7 +:108AD0007E82EA19F753EDE81316F40811FF0A062F +:108AE000EDE810080A58FC080001407E120EEA0862 +:108AF00011FFFC0A000AE20E1515FDE112BE0C0E74 +:108B0000FDE810080C58F40800094128F20A15067F +:108B1000F5E913AA1C0AF4080009E068F235EA181E +:108B2000BD3A990940D91009EC0811FFF205000B74 +:108B3000F5E8100840091C58720CF6080001E069BD +:108B4000D2BBEA192AD740581208E20B150AF006E0 +:108B50000009F7E1136BFC0811FF140BF7E810088C +:108B60001458F208000640B8E069D391EA19EB8680 +:108B7000F0090009F20E0008F40A11FF400EEC099A +:108B8000150FF3E613191609F20C000CF3EA100A9C +:108B9000165AF00A0006EC081515F1E612B8100C8A +:108BA0009D0C401A7408120895084028700916098F +:108BB00091092EDDD832D703EBCD40E03809764855 +:108BC000F1D8C066F608000AF56900181895F00A91 +:108BD000113F1697F6080008F0CCFFE7587AE08BB3 +:108BE0000056300BF01F002DEEC6FFE8EECCFFA8BC +:108BF0000C9B1798178917BAF3E8108917A8F1EAA0 +:108C00001088F3E8110916A9183BCF410C9B0E9C64 +:108C1000F01F0023338A300B0C9CF01F00200C9BAC +:108C2000ECCCFFC81798178917BAF3E8108917A872 +:108C3000F1EA1088F3E8110916A9183BCF416E48F4 +:108C40006E590C9B0E9CEF480050EF490054F01FEA +:108C500000140E9BEECCFFF01798178917BAF3E8B3 +:108C6000108917A8F1EA1088F3E8110916A9183B32 +:108C7000CF410E9B0A9C310AF01F000A0E9C304A1D +:108C8000300BF01F0006E3CD80E0208A300BEEC6EB +:108C9000FFE8F01F0002CC4B800091D0800281FCE5 +:108CA000800091DCEBCD40FC1493784AF40300384B +:108CB000103AF9F98005F9F9B005F7B90BFFF9F9A0 +:108CC000BA059948E608161DF20800089958189444 +:108CD0001692F1DAC066C381F8C5FFE8E043003FB1 +:108CE000E088002C3006EAC7FFC0E406000B340A17 +:108CF0000A9CF01F00290A9B1798178917BAF3E8F6 +:108D0000108917A8F1EA1088F3E8110916A90E3B9B +:108D1000CF410A9B089CF01F00212C06E6060108A3 +:108D2000E048003FFE9BFFE3E6C80040E7D8C006EE +:108D3000E018FFC02C081002069A049B0A9CF01F42 +:108D40000016E3CD80FCF00711402E88100C0E3386 +:108D5000C1D30E9AF01F0010E8C5FFE8E8CCFFA8C9 +:108D60000A9B1798178917BAF3E8108917A8F1EA30 +:108D70001088F3E8110916A9183BCF410E130E0213 +:108D80000A9B089CF01F0005CAAB069AF01F000260 +:108D9000E3CD80FC800091DC800281FCEBCD40FCC7 +:108DA000216DE0682301EA186745E06EAB89EA1E91 +:108DB000EFCD30075008501EE068DCFEEA1898BA84 +:108DC000E06E5476EA1E1032504750575028503EFD +:108DD00018931292580CC140149416951A962FF7B6 +:108DE000090A0B0B1A9CF01F00080E33FE9BFFF9BB +:108DF0001A9B049CF01F00052EADE3CD80FC1A9653 +:108E0000CF8B000080028CA480028BB8D431FACDC5 +:108E10000088501C500B14931292109142B0585A73 +:108E2000E08B0056E04B0040E08B0054FAC4FFF8A2 +:108E3000340A300B089CF01F002E400A401B089C8F +:108E40000896F01F002CFAC5FFB808970D88EC189B +:108E500000360CC80A36CFB1340851845128580363 +:108E6000C110FACCFF9CFACBFFB4300AE60E150213 +:108E7000E40A030818A8E20A030916A92FCA1C3A33 +:108E8000CF81E6CCFFFF00990A9AFAC3FFA0069BA8 +:108E9000F01F0019340A300B089CF01F0015400A1F +:108EA000401B089CF01F00130F88EC18005C0EC8D4 +:108EB0000C37CFB1310C3408513C5184519000999A +:108EC0000A9A069B5128302CF01F000B2DEDD8324A +:108ED000FAC6FF881A9A0C99FACBFFFC301CF01FD7 +:108EE0000006310850165008CA2B0000800091D0AF +:108EF000800091DC80028D9CD401202D501A5009F5 +:108F0000301A1AD8FAC9FFF8FAC8FFFCF01F00039C +:108F10002FFD2FEDD802000080028E0C5EFC5EFE5D +:108F20005EFCD703EBCD40C01896F01F00061897E3 +:108F3000C0500C9A300BF01F00040E9CE3CD80C093 +:108F400080009200800091D0D401F01F0002D80A66 +:108F500080014600D401F8CBFFFCF01F0002D80AC4 +:108F6000800145D4780C580C5E0C3008F948004C50 +:108F7000780C580CCFC15EFC580CF9FC10435EFC19 +:108F8000580CF9B80100F9F81A435EFCEBCD40E04B +:108F9000189716961495314CF01F0005F9F71A032F +:108FA000F9F61A04F9F51A02E3CD80E080028F2465 +:108FB000EBCD40E01696149578075807C160580627 +:108FC000C080306A0C9BEECCFFC0F01F000AC0A12D +:108FD0005805C0B0EECCFFFC310A0A9BF01F00051B +:108FE000C0406E075807CEC10E9CE3CD80E0000064 +:108FF0008000917CEBCD4040781820181696991887 +:10900000784B78390C9C5D190C9CF01F0003E3CD64 +:1090100080400000800091E8EBCD4080202D300A98 +:109020001897189B49BCF01F001C300A0E9B49BCC6 +:10903000F01F00196E085808C2201A9CF01F001873 +:109040006E08400A70EC0E993008141C109BF8084A +:109050000C4C490A2FFCF01F00136E2BF6FA010C82 +:10906000580AC1006E08400A712C0E99141C300871 +:1090700048AAF8080C4C109BF01F000A2FEDE3CD16 +:109080008080F6CBFEB80E9CF01F0007CF80CEBBD1 +:10909000800290E4800274008002913080028F543C +:1090A0008002747480028FB0EBCD40C01896580CCB +:1090B000C1407809300899085809C031C0880E9914 +:1090C0007207129CF01F00065807CFA10C9CF01FDE +:1090D00000050C9CF01F0002E3CD80C0800091E8E9 +:1090E00080029018EBCD4080202D18971A9CF01F1D +:1090F000000E6E0A580AC0C1C1087408149B8F087C +:10910000300A0E9CF01F00096E0A580AC06074E90C +:1091100040081039FE9AFFF30E9CF01F00052FED5A +:10912000E3CD808080028F5480028FF480029018FB +:10913000D4013008782AF548010C7829F2FC0104A2 +:10914000F01F0002D8020000800255ACD43120CDBF +:109150001096782814941293E04A00205FBAF0F930 +:109160000160189758295F18169241511448C05051 +:1091700030060C9C2F4DD832354CF01F00621890F1 +:10918000CF80089A049B2ECCF01F005F81D4FAC9CF +:10919000FFE450965083FAC5FFF84DC81AD5303A0F +:1091A000089B049C4DA65086F01F005AE0C8FFFCA7 +:1091B0000A9B5018310A109CF01F0053FACCFFD4C0 +:1091C000F01F0055E0C8FFC0502840BC6E29F2F8DF +:1091D0000150F808000881E86E2AF4FB0150F4F908 +:1091E0000154E06A851FEA1A51EBB739F20A0648C2 +:1091F000301AA599180981FAE1490048306A402CD3 +:10920000069BF01F0041E141004C2FFD6E06580601 +:10921000C2903005C0680C956C0C580CC58018962F +:10922000ECCBFFC0306A069CF01F003CCF516CD8DD +:109230000838C5505805EDF80000EFF80A00EDF8C1 +:109240001000EBF81A006E29F2F8010C0C38F9B88E +:109250000000F3F80A430C9B301A0E9CF01F0030FC +:109260006E066E1859F8E08A00155806C3200C9A4D +:1092700015088F086E28F0F90128ECCBFFC0720C9E +:1092800072F85D180C9B300A0E9CF01F00256E06CC +:109290005806C1F060EA6CE8103AC074C1A872E8E0 +:1092A0001438E089000612966C095809CF9181099B +:1092B0008D006E2C6E18400A401B2FF88F18F8F99D +:1092C00001280096720C72E85D18C54B6E06CCAB97 +:1092D00081068F000E9CF01F0013CECB089A049BD2 +:1092E000ECCCFFECF01F000DCA61310A400BECCC56 +:1092F000FFFCF01F000AC9F1009CF01F000BC3AB7C +:1093000080028F24800091DC8003DB248003DB9CBF +:109310008002B14480028F548000917C80028FF4DF +:1093200080029018800091E8EBCD4080189E78076D +:10933000580BC06116970E9CE3CD80806E075807CE +:10934000CFB06F381638CFB11AD814997C286EDA9E +:10935000F0C8FEC8EECBFFEC1C9CF01F00092FFDEF +:10936000580CF8071700EFF8100EF9F81A0EF80766 +:109370001710F9B80101F9F81A14CDEB8002914CDD +:10938000EBCD40FC1897300CEF4C010C1496129268 +:109390001094EEF50108580BC080169A189B0A9C91 +:1093A000F01F0016EF4C010C58065F13EEFC010C89 +:1093B000580C5F09F3E30008C16158045F18F3E833 +:1093C0000008C0A05803C0800C9A049B0A9CF01FA0 +:1093D000000CEF4C010C580CF9BC00FFF9BC01006B +:1093E000E3CD80FC300A0C9B0A9CF01F00045F094F +:1093F000EF4C010CCE3B000080028FB0800293281E +:109400000000000000000000EBCD4080580CC100BF +:10941000F8F901103008F94801105809C031C08826 +:109420000E997207129CF01F00045807CFA1E3CDDC +:1094300080800000800091E8EBCD40C01897580C68 +:10944000C250F8F801245808C210189B300A491C71 +:10945000F01F0011EEFC0124F01F00103006306AEE +:109460000C9BEF460124EECCFEE4F01F000DEEFC59 +:109470000114F01F000CEF460114EEFC0118580C0B +:10948000C050F01F0008EF460118E3CD80C0000077 +:109490008002996880027400800256EC800091D0AE +:1094A00080028174EBCD40F8205D189716951494D6 +:1094B000F8F601245806C0503FFC2FBDE3CD80F8DC +:1094C000F8FA012817D81AD817C91AD917B81AD80C +:1094D00017A91AD917981AD81789301B1AD9740CDA +:1094E0004C6AF01F0047EEC3FEC81AD60E984C59BE +:1094F000E06A88C7069BEEFC0140F01F0043EF4C7A +:1095000001142F9D580CC6F0EEFC0144580CC0E02D +:109510001AD6069B0E984BB9E06A88C7F01F003A2E +:10952000EF4C01182FFD580CC5E0340CF01F00372C +:109530001896C5B0EEF8012870099909EEF80128CF +:109540003019700A4B2899199928994A99374B185C +:10955000EEF9012C998899599967EEF8012871095B +:1095600099A9EEF80128711999B9F01F002BEF4C59 +:109570000124C3D0314A300B1A9CF01F0028EEF9A9 +:1095800001305804E9F8105FFBF81A03300650293F +:109590001A9A089B50165006EEFC0124F01F00207A +:1095A000306830593FFAEEFC0124149BF01F001D77 +:1095B000306A0A9BEECCFEE4F01F001B301BEEFC71 +:1095C0000124F01F001A301BEEFC0124F01F0018CC +:1095D0000C980E99497A0C9BEEFC0158F01F00166E +:1095E0000C9CC6CB3FECC6AB3FCCC68B0C9CF01F93 +:1095F00000133FDCC63B00008003DBA880023A1A60 +:1096000080029AF08002819C80028F2480029A243A +:10961000800299C48002609C800091D08002581C16 +:1096200080025564800091DC800261D4800261E890 +:109630008002996880027474800091E8EBCD40FC50 +:109640001897F8F801105808C6F0F8F801284CAA45 +:10965000700C301BF01F0049EEF801245808C0A020 +:10966000EEF801284C6A700C301BF01F0044E3CD6B +:1096700080FCEEF801605828CF41EEF80128700C0C +:1096800070295D19587CCED1EEF8016C5818CE9136 +:10969000EEF501105805C410EEC2FEB8EAC3FFFC97 +:1096A000300A069BEEFC0108F01F0036306A189461 +:1096B000069B049CF01F0034C0605804C3706948C6 +:1096C0005808C341EB3800091AD8EB3800081AD8FB +:1096D0000BF81AD80BE8EEF601281AD80BD91AD9CC +:1096E0000BC84AAA1AD8301B6C0CF01F00242FADEF +:1096F0005804C090EEF90128E8CAFFFC069B720CE2 +:1097000072E85D186A080A9CEF480110F01F0020FB +:10971000EEF501105805CC31EEF8012849DA700C4D +:10972000301BF01F0016E3CD80FCEB3800091AD87F +:10973000EB380008EEF601281AD80BF81AD80BE817 +:109740001AD80BD91AD90BC8493A1AD8301B6C0C45 +:10975000F01F000A6A08069BEEFA0134EF48011078 +:109760000E9CF01F000E0A9CF01F00092FADE3CDE8 +:1097700080FC00008003DBEC80023A1A8003DC14DA +:1097800080028FB08000917C8003DCA0800091E893 +:109790008003DCFC8003DC4C800294A4EBCD40F819 +:1097A0001695189414931297F8FB0134580BC05077 +:1097B000F6F801485808C5D15807C4C0E8F60110AA +:1097C0005806C4A03007C0680C976C0C580CC440F5 +:1097D0001896306A0A9BECCCFFFCF01F002CCF518E +:1097E0005807EDF81000EFF81A00EDF80000E9F85E +:1097F0000A44E04303E7E08A003BE8FA0110580A14 +:10980000C4006C3B74381638C065C3B8723816385B +:10981000C054129A74095809CFA18D0995061AD31C +:109820000BD80B8CE8F601281AD80BC91AD90BB83B +:109830001AD80BA91AD90B98495A1AD8301B1ADC16 +:109840006C0CF01F0014089CF01F00132F9DE3CD3B +:1098500080F8E3CD80F8310CF01F00101896C0F0AE +:10986000306A0A9BECCCFFFCF01F000D8D33CC6BF3 +:109870000A9AF8FC0108F01F000BC9FBE3CD80F841 +:109880008D0AE9460110CCCB8000917C8003DD2459 +:1098900080023A1A8002963C80028F24800091DC7C +:1098A00080029328EBCD40F8208D169414971895DC +:1098B000F8F801345808C470F01F0027EEC6000104 +:1098C000C426E068009C1A93EC080248E8080007E8 +:1098D000EAC4FEB8C0682016EEC7009C5806C3351F +:1098E000EAF901346EAA7258103ACF61724BEECC8D +:1098F000FFFAF01F001ACF01306A089B0E9CF01F80 +:109900000017CEA0EEFB0080580BCE601A9AEECC6A +:10991000FFA8F01F0013CE01189A0E9BEAFC010865 +:10992000F01F0010C13079485808CD604048EDB8AC +:109930000000CD213019E06A03E80E9B0A9CF01F5D +:10994000000ACCAB2F8DE3CD80F84048F3D8C0019E +:10995000CF3B0000800294088000917C8002BD68AB +:1099600080028FB08002979CEBCD4060F9380121D6 +:10997000F8F501281AD8F93901201AD9F938011F48 +:109980001AD8F939011E1AD9F938011D1AD8F9392E +:10999000011C489A1AD9302B18966A0CF01F000740 +:1099A0000C9CF01F00070C9CF01F00062FADE3CDB0 +:1099B000806000008003DD6C80023A1A80029438D7 +:1099C0008002963CEBCD40E0201D1897F8F801147A +:1099D0005808C0613FF60C9C2FFDE3CD80E0F8F8FD +:1099E0000128300C5C791ADC5C5B700C70D6FAC80C +:1099F000FFFC5D162FFD1895580CCED01899400825 +:109A0000E06A88C7EECBFEE4EEFC0114F01F000410 +:109A100018960A9CF01F0003CDFB000080028154C1 +:109A2000800091E8EBCD40E0208D14971896580BFC +:109A3000C2614A781AD8EEF60128EF3801211AD807 +:109A4000EF3901201AD9EF38011F1AD8EF39011E5A +:109A50001AD9EF38011D1AD8EF39011C49DA1AD981 +:109A6000302B6C0CF01F001C0E9CF01F001C0E9C79 +:109A7000F01F001B2F9D2F8DE3CD80E01A95320A39 +:109A80001A9BF01F0018C1211A9B320AEEF801340C +:109A90008F8A1AD8EEC9FEE4EEC8FEC8EEFC0108B3 +:109AA000F01F001149182FFDCC6B0C9C310A1A9B3A +:109AB000F01F000CC090EEF8012848DA700C302B33 +:109AC000F01F0005CB7B1A9B310ACE1B8003AD2C07 +:109AD0008003DE1880023A1A800294388002963C95 +:109AE000800257CC8002914C8003DDB48003DDCC32 +:109AF000EBCD40F81897169514931294F8F80124BA +:109B00005808C090F8C6FEE4306A48BB0C9CF01FB1 +:109B1000000BC031E3CD80F80C9C306A0A9BF01F2B +:109B20000007CF910899069A0A9BEEFC0124F01FCA +:109B30000004CF1B800294008000917C800261FCB5 +:109B4000EBCD40F8FACD01001293109418961697B9 +:109B5000149530081A99F2080B082FF8E048010014 +:109B6000CFB1300E1A9C1C9BEC0B0709198AFC0A1A +:109B700000081208FAC9FF00FDD8C0081C09F33814 +:109B8000FF0018C8F36AFF002FFBFAC8FF000E3B66 +:109B9000F9BB0200103CCE915805C4C0300E1C9792 +:109BA0001C9CF8C8FFFFFACAFF00F9D8C008180AC1 +:109BB000F53BFF00F60E0008FAC9FF00FDD8C0080B +:109BC0001C09F338FF00F568FF00F36BFF002FF767 +:109BD0000E35FE9BFFE85804C2A006963007F8C871 +:109BE000FFFFFACAFF00F9D8C008180AF539FF00CC +:109BF000F20E0008FACBFF00FDD8C0081C0BF738A6 +:109C0000FF00F568FF00F769FF00F538FF00100955 +:109C1000F3D9C008FACAFF00120A0D89F538FF000F +:109C200012580CC82FF70E34FE9BFFDB2C0DE3CD32 +:109C300080F80A9E0A9CCD0BD401129E16981899A2 +:109C40001C9B149C300AF01F0002D80280029B402B +:109C500000000000D431FACD0180340AFAC4FEC0FD +:109C6000510C089CF01F04BF688A516A689950A97A +:109C700068A8509868B65086684568216830416683 +:109C800050E5685250D2686A50CA687950B968087D +:109C90005158E3E8200868D50C580A586812F00AB1 +:109CA000150150F2F5E813FA517A68E868F640E5D4 +:109CB00040A9105940980C580A5802580059F00A07 +:109CC00015010459F5E813FAF20215014178E5E9A6 +:109CD00013F2519A518240C54089105968C80458FE +:109CE00040E20A58045840D6F00A15010C59F5E82C +:109CF00013FA005951AA419840B640D5416240CA72 +:109D0000F2071501EFE913F768D9105968E80E5802 +:109D1000045814580C590A59F0051501F20615019A +:109D2000EBE813F5EDE913F640B851C551B641A281 +:109D300068F940AA416504591459105941780C58E2 +:109D400040960C580A58F2021501F00A1501E5E98F +:109D500013F2F5E813FA41C851EA51D2408640A502 +:109D6000409A418910594198045868C204581458BF +:109D70000C590A59F0051501F2061501EBE813F527 +:109D8000EDE913F6408851F6520541E268DA68C5FC +:109D9000EFE220091459105941A80C5868E60C58F4 +:109DA0000A58F2021501F00A1501E5E913F2F5E887 +:109DB00013FA52124208522A41B968F668D568EA85 +:109DC000105941C804584172045814580C590A5982 +:109DD000F0051501F2061501EBE813F5EDE913F6B0 +:109DE0005245523668F84222418A417541D9045998 +:109DF0001459105941E80C5841960C580A58F2026F +:109E00001501F00A1501E5E913F2F5E813FA4248E5 +:109E1000418641A5525241F9105942080E59045841 +:109E20000C5941920A580458526AF20A1501F5E990 +:109E300013FAF0091501F3E813F9426841B641C578 +:109E400041A2527A52894219105942280C59145889 +:109E50000E590A580458F20A1501F5E913FAF009E7 +:109E60001501529AF3E813F9428852A941D641B537 +:109E700041E2423910594248145841CA0458145812 +:109E80000C5941FA0A59F0051501F2061501EBE8E3 +:109E900013F5EDE913F641D852C542A241E552B699 +:109EA00042590459145942CA105942680C58420682 +:109EB0000C580A5841F6F20E1501F0021501FDE9A1 +:109EC00013FEE5E813F2421942781458420A42257B +:109ED000125842890C581C59F00615010A59EDE830 +:109EE00013F61459F20A1501F5E913FA0C951493B7 +:109EF000423952E652FA4216424A52D24298045825 +:109F0000125842A90C580A5942261459F00A150150 +:109F1000F5E813FA0C59530A1496F2081501425A3F +:109F2000F1E913F84239109C531842B806581458F6 +:109F3000426A125842C90C591459424A1459F00A3B +:109F40001501F5E813FAF2081501F1E913F8109B71 +:109F500053384278FDEC20091059425810595019D5 +:109F60004289E5EA200812584269125840195008FF +:109F70004018A178F1E913F8400953484008A17846 +:109F8000F1E913F853584298EBEB20091059427845 +:109F9000105942A850194349E7E92009105942884D +:109FA000105940185009532A4019A179F3E813F9C0 +:109FB000400853694009A179F3E813F953794358EC +:109FC000EDE8200942B810594298105942C850197A +:109FD0004369F9E92009105942A81059401850095D +:109FE0004019A179F3E813F9400853894009A17990 +:109FF000F3E813F943785399F5E8200942B81C595E +:10A00000105950194389F7E92009129842C9045898 +:10A010001258401950084018A178F1E913F8400986 +:10A0200053A84008A178F1E913F8434953B843987D +:10A0300010590A591C59501943A94358125840192C +:10A04000065804584012A172E5E913F253C2F00217 +:10A050001501E5E813F243B84369105943780C59E8 +:10A060000A5943C50A581858065853D2F202150126 +:10A07000E5E913F2F0091501F3E813F943D853F9B0 +:10A08000438910594398145904580C5916581858B4 +:10A0900053E243F54342F20C1501F0061501F9E9CC +:10A0A00013FCEDE813F643A943B80A5918580459AC +:10A0B0001459435A145816585406436A4402F20677 +:10A0C0001501F0051501EDE913F6EBE813F543482A +:10A0D00054255416435543C904591459105943D8AB +:10A0E000F20215010C58E5E913F2437654320C588C +:10A0F0000A58F00A1501F5E813FA544A890A442966 +:10A1000043864365437A43E8125843F90C5804598F +:10A110000A584392F0061501EDE813F654568916D5 +:10A1200004591459F2051501EBE913F55465892515 +:10A13000444243AA4389F9E2200814581258F00215 +:10A140001501E5E813F25472439544090C5943B6DE +:10A1500089320C590A59F20A1501F5E913FA548AA1 +:10A16000894A43C6446943A5441812580C580A58F2 +:10A17000F0061501EDE813F6549643BA4429045944 +:10A1800043D2895604591459F2051501EBE913F528 +:10A1900054A58965448243EA43C944380458145895 +:10A1A0001258F0021501E5E813F254B243D54449C0 +:10A1B0000C5943F689720C5944080A59446A045AE6 +:10A1C000105A0C5AF2061501EDE913F654C6447BF9 +:10A1D00089860C5BF4061501EDEA13F654E6441586 +:10A1E00044A243E9445889A60A5B045818581258F7 +:10A1F000F0051501EBE813F554D58995185BF602C7 +:10A200001501E5EB13F254F289B2444A4489449BA8 +:10A210000A590C5B4405442644A804581458F3E634 +:10A22000200A0C580A5A5028E0657999EA155A8292 +:10A23000504A410644325116441AEE050009F7E22D +:10A2400020081458E062EBA1EA126ED95038507918 +:10A25000040E0C99506EE068BCDCEA188F1B0C9A57 +:10A26000100C2F8A505C512A1306511941087403AF +:10A27000720C2F485138410A2F0A514A700A41483E +:10A28000700941580A08F0090009EC081505F1E6C3 +:10A2900013B8F2080008F5E3200918691459F00909 +:10A2A000000740F80A08F00A0009F80B151EF7EC41 +:10A2B000122BF7E320080C680658F2080008EE0994 +:10A2C0001505F3E713B9EC0A151EF009000EF5E6C3 +:10A2D000122AFC091505F7EA2008F3EE13B9EFE896 +:10A2E000000816580A01EE0C151E0601F9E7122C9B +:10A2F0001001F9EA200812011C68E209150514583A +:10A30000F3E113B90A001600100040E812000A0831 +:10A31000F00A0009FC0B151EF7EE122BF7EC2008D3 +:10A3200002681858F2080008E0091505F3E013B9AF +:10A33000F009000640D80A08F00C0009E20A151ED0 +:10A34000F5E1122AF5EB200800681658F20800081B +:10A35000EC091505F3E613B9F009000E40C80A0828 +:10A36000F00B0009E00C151EF9E0122CF9EA2008A8 +:10A370000C681458F2080008FC091505F3EE13B92F +:10A38000F009000340B80A08F00A0009EC0B151E9A +:10A39000F7E6122BF7EC20081C681858F2080008A2 +:10A3A000E6091505F3E313B9F009000641680A0848 +:10A3B000F00C0009FC0A151EF5EE122AF5EB200838 +:10A3C00006681658F2080008EC091505F3E613B9FB +:10A3D000F009000E40A90A091609E60C151EF9E35A +:10A3E000122CF9EA20080C681458F2080008FC093D +:10A3F0001505F3EE13B9F009000340980A08F00AB6 +:10A400000009EC0B151EF7E6122BF7EC20081C6870 +:10A410001858F2080008E6091505F3E313B9F00926 +:10A42000000640890A091809FC0A151EF5EE122AD1 +:10A43000F5EB200806681658F2080008EC09150527 +:10A44000F3E613B9F009000E68C80A08F00B00091A +:10A45000E60C151EF9E3122CF9EA20080C681458D2 +:10A46000F2080008FC091505F3EE13B9F009000124 +:10A4700068D90A091409EC0B151EF7E6122BF7EC44 +:10A4800020081C681858F2080006E2091505F3E1D7 +:10A4900013B968E8EC0900030A08F00C0009FC0A8B +:10A4A000151EF5EE122AF5EB200802681658F20880 +:10A4B0000008E6091505F3E313B9F009000E68F981 +:10A4C0000A091609E20C151EF9E1122CF9EA200816 +:10A4D00006681458F208000BFC091505F3EE13B9D1 +:10A4E0004178F60900000A08F00A0009E606151E80 +:10A4F000EDE31226EDEC20081C681858F208000A5B +:10A50000E0091505F3E013B9F409000341890A09CC +:10A510001809FC0A151EF5EE122AF5E62008006857 +:10A520000C58F208000CE6091505F3E313B941983D +:10A53000F80900010A08F0060009E00B151EF7E013 +:10A54000122BF7EA200806681458F2080008E209FE +:10A550001505F3E113B94077F009000E1407FC0963 +:10A560001505E60A151EF3EE13B9F5E3122AF5EB0D +:10A57000200802681658EE080008F009000341A8F8 +:10A580000408F00B0009E20C151EF9E1122CF9EA9F +:10A5900020081C58F2080008E6091505F3E313B972 +:10A5A000F009000541B904091409FC0B151EF7EE6A +:10A5B000122BF7EC20080658F2080008EA091505E6 +:10A5C000F3E513B9F009000641C80408F00C0009CE +:10A5D000E60A151EF5E3122AF5EB20080A58F208E0 +:10A5E0000008EC091505F3E613B9F009000E41D98E +:10A5F00004091609EA0C151EF9E5122CF9EA2008DF +:10A600000C58F2080008FC091505F3EE13B9F0091F +:10A61000000541E80408F00A0009EC0B151EF7E6F6 +:10A62000122BF7EC20081C58F2080008EA0915055F +:10A63000F3E513B9F009000641F904091809FC0A09 +:10A64000151EF5EE122AF5EB20080A58F20800084C +:10A65000EC091505F3E613B9F009000E42080408E9 +:10A66000F00B0009EA0C151EF9E5122CF9EA200896 +:10A670000C58F2080008FC091505F3EE13B9F009AF +:10A680000005421904091409EC0B151EF7E6122BFC +:10A69000F7EC20081C58F2080008EA091505F3E554 +:10A6A00013B9F009000642280408F00C0009FC0A5E +:10A6B000151EF5EE122AF5EB20080A58F2080008DC +:10A6C000EC091505F3E613B9F009000E4239040947 +:10A6D0001609EA0C151EF9E5122CF9EA20080C58A7 +:10A6E000F2080008FC091505F3EE13B9F00900059E +:10A6F00042480408F00A0009EC0B151EF7E6122B7D +:10A70000F7EC20081C58F2080008EA091505F3E5E3 +:10A7100013B9F0090006425904091809FC0A151E6C +:10A72000F5EE122AF5EB20080A58F2080008EC09A9 +:10A730001505F3E613B9F009000E42680408F00BA2 +:10A740000009EA0C151EF9E5122CF9EA20080C584C +:10A75000F2080008FC091505F3EE13B9F00900032F +:10A76000427904091409EC0B151EF7E6122BF7ECDD +:10A7700020081C58F2080008E6091505F3E313B990 +:10A78000F0090005428904091809FC0A151EF5EEB6 +:10A79000122AF5EB20080658F2080008EA09150508 +:10A7A000F3E513B9F009000E429904091609E60C05 +:10A7B000151EF9E3122CF9EA20080A58F208000BDA +:10A7C000FC091505F3EE13B9F609000042A90409C6 +:10A7D0001409EA06151EEDE51226EDEC20081C58BA +:10A7E000F208000AE0091505F3E013B9F4090003C3 +:10A7F00042B9FC0A151E0409F5EE122A1809F5E6FD +:10A80000200800584065F208000C1405E6091505FB +:10A81000E00B151EF3E313B9F7E0122BF809000162 +:10A82000F7EA200AE2081505065AF1E113B842C911 +:10A8300004090C091409E60A151EF208000EF5E3D6 +:10A84000122AF5EB20080258EA080008E066BCDC92 +:10A85000EA168F1BFC091505F3EE13B9F009000089 +:10A8600042D80C08E20C151EF00B0002F9E1122C84 +:10A87000FDEC0008FDEC100914691049E00815050D +:10A88000F1E013B8E4090009F208000242E80C08FC +:10A89000FC0B151EF00A0005F7EE122BE1EB000889 +:10A8A000E1EB100918691049E4081505EA090009E7 +:10A8B000F1E213B8E00A151EF2080005F5E0122ACD +:10A8C00042F9E5EA00080C09F20C0003E5EA100978 +:10A8D00016691049EA081505F1E513B8E6090009FB +:10A8E000F208000343080C08E40C151EF00B0006E8 +:10A8F000F9E2122CEBEC0008EBEC1009146910499A +:10A90000E6081505EC090009F1E313B8EA0B151E7A +:10A91000F2080006F7E5122B4319E065BCDCEA15E6 +:10A920008F1BE7EB00080A09F20A000AE7EB10099F +:10A9300018691049EC081505F1E613B8F409000987 +:10A94000F208000243280A08E60A151EF00C000C63 +:10A95000F5E3122AEDEA0008EDEA1009166910493C +:10A96000E4081505F8090009F1E213B8EC0C151E0E +:10A97000F208000EF9E6122C4339E5EC00080A094A +:10A98000F20B000BE5EC100914691049FC081505E1 +:10A99000120BF1EE13B84349F6080005E40B151E3F +:10A9A000F7E2122BE062BCDCEA128F1BFDEB000821 +:10A9B0000409F20A000AFDEB100918691049EA08B7 +:10A9C0001505F1E513B8F4090009F208000643582B +:10A9D0000408FC0A151EF00C000CF5EE122AEBEA36 +:10A9E0000008EBEA100916691049EC081505F8098A +:10A9F0000009F1E613B8EA0C151EF208000EF9E59D +:10AA0000122C4369EDEC00080409F20B000BEDEC8D +:10AA1000100914691049FC081505F1EE13B8F60980 +:10AA20000009F208000543780408EC0B151EF00A33 +:10AA3000000AF7E6122BFDEB0008FDEB1009186980 +:10AA40001049EA081505F4090009F1E513B8FC0AF4 +:10AA5000151EF2080006F5EE122A4389EBEA0008FB +:10AA60000409F20C000CEBEA100916691049EC0815 +:10AA70001505F1E613B8F8090009F208000E43982D +:10AA80000408EA0C151EF00B000BF9E5122CEDEC96 +:10AA90000008EDEC100914691049FC081505F609C9 +:10AAA0000009F1EE13B8EC0B151EF2080005F7E6ED +:10AAB000122B43A9FDEB00080409F20A000AFDEB82 +:10AAC000100918691049EA081505F1E513B8F409E9 +:10AAD0000009F208000643B80408FC0A151EF00C31 +:10AAE000000CF5EE122AEBEA0008EBEA10091669F1 +:10AAF0001049EC081505F8090009F1E613B8EA0C4D +:10AB0000151EF208000EF9E5122C43C9EDEC000801 +:10AB10000409F20B000BEDEC100914691049FC0854 +:10AB20001505F1EE13B8F6090009F208000343D841 +:10AB30000408EC0B151EF00A000AF7E6122BFDEBD9 +:10AB40000008FDEB100918691049F4090009E6082E +:10AB50001505F1E313B8F208000543E90409FC0AFE +:10AB6000151EF20C000CF5EE122AE7EA0008E7EADF +:10AB7000100916691049F8090009EA081505F1E5F8 +:10AB800013B8F208000E43F90409E60C151EF20B87 +:10AB9000000BF9E3122CEBEC0008EBEC1009146944 +:10ABA00010494057FC0815051407F1EE13B8F609D3 +:10ABB000000AEA0B151EF7E5122BFDEB0009F4085D +:10ABC0000003FDEB1008E60A15051868F5E313BA53 +:10ABD0001248EE080009F20A00054409E06AC1D6ED +:10ABE000EA1ACA6214091809FC06151EEDEE1226AF +:10ABF000EDEB20080658F2080008EA091505F3E510 +:10AC000013B9F009000A4419E068C1D6EA18CA620B +:10AC100010091609E60C151EF9E3122CF9E62008B6 +:10AC20000A58F2080008F4091505F3EA13B9EA0B0B +:10AC3000151EF0090003F7E5122B4429E065C1D683 +:10AC4000EA15CA620A090C09F7EC20081458F20840 +:10AC50000008E6091505F3E313B9F009000EFC0935 +:10AC60001505F3EE13B9F406151EEDEA1226443A63 +:10AC7000EDEB20080A0A0658180A100A120A44497D +:10AC80000A091609E60C151EF9E3122CF9E620084C +:10AC90001C58F2080008F4091505F3EA13B9FC057D +:10ACA000151EF0090003EBEE1225E6091505EBEC85 +:10ACB0002008F3E313B91458E062C1D6EA12CA625D +:10ACC000445B040B0C0BF406151E100BEDEA122668 +:10ACD000120BEDE52008F60915050658F3EB13B93C +:10ACE000446A040A180A100A4478F409000E040899 +:10ACF000F0050009E60A151EF5E3122AF5E620081C +:10AD00001658F2080008FC091505F3EE13B9F0090E +:10AD10000005448904090C09F60C151EF9EB122CE8 +:10AD2000F9EA20081C58F2080008EA091505F3E5BD +:10AD300013B9F009000344980408F00A0009FC0B59 +:10AD4000151EF7EE122BF7EC20080A58F20800083F +:10AD5000E6091505F3E313B9F009000E44A9040947 +:10AD60001809EA06151EEDE51226EDEB2008065837 +:10AD7000F2080008FC091505F3EE13B9F009000507 +:10AD8000EA091505F3E513B944BAE60C151E040AE1 +:10AD9000F9E3122C160AF9E620081C58100A120AC8 +:10ADA00044C904090C09FC0B151EF7EE122BF7EC35 +:10ADB00020080A58F2080002F4091505F3EA13B94D +:10ADC00044D8E409000EE069C1D6EA19CA62120843 +:10ADD000EA06151EF00C0009EDE51226EDEB200841 +:10ADE0001458F2080008FC091505F3EE13B9F00930 +:10ADF000000CE068C1D6EA18CA62F405151EF8090D +:10AE00001505EBEA1225F3EC13B944EA100AEBE658 +:10AE10002008160A1C58100AFC02151EF40900012D +:10AE2000E5EE1222E06AC1D6EA1ACA62E5E5200818 +:10AE3000E20915051858F3E113B944FB140B404A15 +:10AE40000C0BA17A100B44B8F609000E4049F5E945 +:10AE500013FA14584459F1E9200B4438E069C1D67B +:10AE6000EA19CA6289CAF7E820074108F806151EE0 +:10AE7000120AEDEC1226700CEDE22008120C0258BA +:10AE8000FC091505F3EE13B90A0AE203151E100AB0 +:10AE9000E7E11223120AE7E62008E069C1D6EA19C1 +:10AEA000CA621C5840354030A170E1E513F0E0095A +:10AEB000000BF4091505040BF3EA13B9100B402835 +:10AEC0004021120BE065C1D6EA15CA62A171E3E820 +:10AED00013F1E2050008F0060009FC02151EE5EE7C +:10AEE0001222E5E320081458F2080008F6091505B7 +:10AEF000F3EB13B9F406151EF009000EEDEA122665 +:10AF0000EE051501410AEBE713F5EDE220080A0C06 +:10AF10001658060CFC091505100CF3EE13B9120CAB +:10AF2000950C411972081C089308F609151E412A50 +:10AF3000F3EB1229740812089508413870090C09BE +:10AF4000910989D089E189F541466C080408089C7B +:10AF50008D08340A300BF01F00042A0DD83200008F +:10AF6000800091DC800091D0EBCD40F878581494AB +:10AF7000A37AF40800099959123AF9F98006F9F907 +:10AF8000B006F7B90BFFF9F9BA06FDD8C066E808B4 +:10AF9000161DF2080008996818951693E80E000926 +:10AFA000E049003FE08B000F3006FCCCFFE4E606F2 +:10AFB000000BEA0C000CE806010AF01F0014E3CDB8 +:10AFC00080F8FC061140FCCCFFE40C9AEA0C000C63 +:10AFD000F01F000EEACBFFE40A9CF01F000DECC846 +:10AFE000FFC11034E088000FE60600070E9B0A9CA4 +:10AFF0002C07F01F00072C06ECC8FFC11034FE9B85 +:10B00000FFF7300ECD3B0000800091DC80029C54A5 +:10B01000D421202D16961895300B1A94583BF9B868 +:10B020000B14F9B80818F60911FFEC08030AF3D954 +:10B03000C002A379F4090A4AE80B0B0A2FFB588BCC +:10B04000CEE1301A49EBC038301A49EB0C9CF01FA6 +:10B05000001E6C58E21801F8E04801C0CF61308A48 +:10B060001A9B0C9CF01F00183007EE081602EE0920 +:10B0700011FFEC08032AF3D9C002A379F4090A4AA4 +:10B08000EA070B0A2FF75947CF11300B340AECCCE3 +:10B09000FFE4F01F000E0E9A300B0C9CF01F000B0B +:10B0A000ECCCFFEC308A300BF01F00081A9C308A81 +:10B0B000300BF01F00062FEDD82200008003DE5871 +:10B0C00080029C508002AF68800091D0EBCD40FCA4 +:10B0D000217DE0682301EA186745E06EAB89EA1E2E +:10B0E000EFCD5008E068DCFEEA1898BA3007501E31 +:10B0F0005028E06E5476EA1E1032E068E1F0EA185B +:10B10000C3D250675057503E504818931292580C73 +:10B11000C140149416951A962FF7090A0B0B1A9C26 +:10B12000F01F00070E33FE9BFFF91A9B049CF01FD3 +:10B1300000052E9DE3CD80FC1A96CF8B8002AF6870 +:10B140008002B010D431FACD008C501C500B1493F7 +:10B150001292109142C0585AE08B0056E04B0040CA +:10B16000E08B0054FAC4FFF8340A300B089CF01F3F +:10B17000002E400A401B089C0896F01F002CFAC5C0 +:10B18000FFB808970D88EC1800360CC80A36CFB106 +:10B190003408518451285803C110FACCFF9CFACBD3 +:10B1A000FFB4300AE60E1502E40A030818A8E20A02 +:10B1B000030916A92FCA1C3ACF81E6CCFFFF0099DC +:10B1C0000A9AFAC3FFA0069BF01F0019340A300B3D +:10B1D000089CF01F0015400A401B089CF01F00133C +:10B1E0000F88EC18005C0EC80C37CFB1314C340816 +:10B1F000513C5184519000990A9A069B5128302C59 +:10B20000F01F000B2DDDD832FAC6FF881A9A0C9970 +:10B21000FACBFFFC301CF01F0006314850165008D6 +:10B22000CA2B0000800091D0800091DC8002B0CC5D +:10B23000D401202D501A5009301A1AD8FAC9FFF833 +:10B24000FAC8FFFCF01F00032FFD2FEDD80200000D +:10B250008002B144D43121AD5009502B501A1892BC +:10B2600042395809C6D0504850593008FAC7FFAC87 +:10B270005038FAC3FFD4FAC0FFC0FAC4FFE8049CF8 +:10B28000F01F003140382FF850381AD34038518819 +:10B2900040285168FAC8FF98519830484046517884 +:10B2A000B986FB380013FAC9FFA0FB68006B189B36 +:10B2B0000E98FB66006840454046302A1891B185DB +:10B2C000049CFB650069A986FB66006AF01F001FED +:10B2D000314A069B009CF01F001E2FFD40085818A5 +:10B2E000E08A001C301608983149069A029B049C9B +:10B2F000F01F0018314A089B069CF01F0015009AA9 +:10B30000089B17381589125814C80E3ACFB12FF67A +:10B3100040080C38FE99FFE940560C985946F9B69A +:10B320000B140C180C9A5058009B404CF01F00084E +:10B3300040585808C05040480C085048CA1B2E6D51 +:10B34000D8320000800091B88002B144800091DCC6 +:10B350008002B230D43120EDFACEFFA4109530082F +:10B3600018927C14149716911296FB680036FB68AD +:10B3700000377C00149CF01F00275804C3003018CD +:10B38000FAC9FFC9508850685097FAC8FFCA505C84 +:10B3900050B6507550A950C85934E0880023300782 +:10B3A000FAC3FFECFAC6FFDCC088FB680036E8078A +:10B3B00001055935E088001CE00700080C991AD8EF +:10B3C0002EC70698304A029B049CF01F00132FFDE5 +:10B3D000FB3800362FF80E34FE9BFFE92F2DD832B4 +:10B3E00008953007FAC3FFECFAC6FFDC0C99069803 +:10B3F0001A96049C1AD6029B304AF01F00070A9A3C +:10B400000C9BE007000CF01F00052FFD2F2DD832FC +:10B41000800091B88002B144800091DC00000000FF +:10B4200000000000EBCD4080129E1097584CC26087 +:10B43000E08A0013588CC140590CC101590B5F18A8 +:10B4400058FA5FA91248C0A130689D083039300C05 +:10B450008F09E3CD8080582CC1E0E3CFC080E04B62 +:10B4600000205F1859FA5FA91248CF8130689D0803 +:10B470003029300C8F09E3CD808058DB5F1858CA23 +:10B480005FA91248CEB130099D093018129C8F086F +:10B49000E3CD8080585B5F18584A5FA91248CF40BF +:10B4A000E3CFC080580C5E0CF8F8010C5808F9B8CE +:10B4B0000100F9F81A435EFC580CF9FB1A4C5EFCCB +:10B4C000580CF9FA1A51F9FB1A505EFC580CF9FBAA +:10B4D0001A415EFC580CC080586BE08800035EFD8A +:10B4E0004928F00B032F5EFEF94A016C5EFDF94A14 +:10B4F00001685EFDF94A01645EFDF94A01605EFD86 +:10B50000580ACF20F94A01585EFDF4C80001E0480E +:10B510000063FE9BFFEAF94A01545EFD580ACE40E3 +:10B52000F94A01505EFD00008003DE5CEBCD40E097 +:10B53000189716951496580CC130F8FC0180F01F2E +:10B54000001158055F0858065F091248C0B030085E +:10B55000EF480188EF480180109CE3CD80E0E3CF05 +:10B56000C0E00C9CF01F0008EF4C0180CF900A9BBC +:10B570000C9AF01F0006300CEF460188E3CD80E006 +:10B58000800091E880009200800091DCEBCD40E0EB +:10B59000189716951496580CC130F8FC017CF01FD2 +:10B5A000001158055F0858065F091248C0B03008FE +:10B5B000EF480184EF48017C109CE3CD80E0E3CFAD +:10B5C000C0E00C9CF01F0008EF4C017CCF900A9B60 +:10B5D0000C9AF01F0006300CEF460184E3CD80E0AA +:10B5E000800091E880009200800091DCEBCD40E08B +:10B5F000189716951496580CC130F8FC0174F01F7A +:10B60000001158055F0858065F091248C0B030089D +:10B61000EF480178EF480174109CE3CD80E0E3CF60 +:10B62000C0E00C9CF01F0008EF4C0174CF900A9B07 +:10B630000C9AF01F0006300CEF460178E3CD80E055 +:10B64000800091E880009200800091DCEBCD40FE0C +:10B65000189716961493580CC031E3CFC0FE7409A6 +:10B66000F8F801605828C5E0F8F1016CF8F50168B8 +:10B67000F8F201645979FE98FFF23DD8304AB68855 +:10B68000ECCCFFFEFEFB0238F01F008E30083019B4 +:10B69000ACF8ACE9ECC4FFF85905E08000A158858E +:10B6A000E08000AA5845E08100BC0A9AFEFB02181F +:10B6B000089CF01F00843018A8C8E8C9FFFB3008B8 +:10B6C000B288E8C5FFFA5902E08000905882E08114 +:10B6D000009F304A4FDB0A9CF01F007A3018AAC83E +:10B6E000EAC9FFFB3008B2882FA55811E080008A14 +:10B6F0005821E08100A5304A4F5B0A9CF01F007181 +:10B70000EAC9FFFCEC0811FE1208AC98F206010C25 +:10B71000CA56870CEEF501745805E08000C1E3CFEE +:10B7200080FEF8F8010CF8F2016C5808F9B801280D +:10B73000F9B80016F8FA0168F8F401641039C8E3A2 +:10B7400033083009B688B6B93018B6A8F6C5FFFC7C +:10B75000590AC6F0588AE0800082584AE081009772 +:10B760004DCB0A9CF01F00573018AAC8EAC9FFFB4E +:10B770003008B2882FA55904C6B05884E081007EF5 +:10B78000304A4D5B0A9CF01F004F3018AAC8EAC926 +:10B79000FFFB3008B2882FA55812C661304A4CFB17 +:10B7A0000A9CF01F0048EAC8FFFC300AB08AB09A31 +:10B7B000EAC9FFFAEEF8010C5808CA503018B288EE +:10B7C000EAC9FFF9EACCFFF8B28A310AEEFB010CB4 +:10B7D0002FCBF01F003CEAC9FFE8C95B304A4C0B95 +:10B7E000089CF01F0038C68B304A4BDB0A9CF01FC8 +:10B7F0000035C75B304A4B5B089CF01F0032C5CB5D +:10B80000304A4B8B0A9CF01F002FC7BB5812FE9189 +:10B81000FF26304A4B4B0A9CF01F002AC60B5825C6 +:10B82000FE91FF1D304A4B1B089CF01F0026C44BA5 +:10B83000304A4AFB0A9CF01F0023C97B5901FE9144 +:10B84000FF0E304A4ABB0A9CF01F001EC5AB304AAF +:10B850004A7B0A9CF01F001BC99B304A49EB0A9C9B +:10B86000F01F0018C82B5822FE91FEF9304A4A2BCF +:10B870000A9CF01F0014C98B5814FE91FEF0304A48 +:10B8800049EB0A9CF01F000FC81B582AFE91FEE7E7 +:10B89000304A49BB0A9CF01F000BC67BF01F001901 +:10B8A000EF4C0174FE90FEDB0C9B660AF01F000556 +:10B8B00066080A9CEF480178E3CD80FE8003DE989D +:10B8C000800091DC8003DEA08003DE8C8003DE7CC0 +:10B8D0008003DE888003DE808003E1EC8003E1E406 +:10B8E0008003DE9C8003DEA48003DE948003DEB44C +:10B8F0008003DEB08003E1E88003DEA88003DE84FD +:10B9000080009200D401580CC060F8CCFEC8306AA8 +:10B91000F01F0002D8020000800091DCD4011898CA +:10B92000580CC040918AF01F0002D802800091DCC0 +:10B93000EBCD40F8208D189416971493F6C6FFF0BF +:10B94000F8F501685885C2E0E8F801645818C1604C +:10B950006EC8E8F901286E0B1AD81AD66E2849CAA3 +:10B960001AD81AD3720C72666E186E395D162FCD06 +:10B97000580CC1552F8DE3CF80F86EC9E8FA012825 +:10B980006E0B1AD91AD66E291AD91AD3740C74668A +:10B990006E3948FA5D162FCD580CCED42F8DE3CFDB +:10B9A000C0F80C9B310A1A9CF01F000A0A9AEECBD1 +:10B9B000FFD8FACCFFF0F01F00070A9AEECBFFE0A9 +:10B9C000FACCFFE81A96F01F0003CBFB80039C38EB +:10B9D000800091DCD401580CC070F94B0134F8FCA4 +:10B9E0000108F01F0002D80280028F64D401580CB5 +:10B9F000C110F8F8010C5808C08070DAF0CBFFECE9 +:10BA0000998AF01F0005D802320A109B998AF01F0C +:10BA10000003D802800091DC800091D0EBCD408003 +:10BA20001897F01F000AEEF801287029700C5D19B4 +:10BA3000585CEFF80057F9B90001F1D9E008EFF8C8 +:10BA40000A57E3CD8080000080029438EBCD40C0DF +:10BA500018971696580CC190306AF8CCFEB8F01FB3 +:10BA6000000F308A300BEECCFF10F01F000D3008B5 +:10BA700030190C9BEF4800F8EF4900EC306AEECC2F +:10BA8000FEE4F01F0008C030E3CD80C00E9CF01F24 +:10BA90000006E3CD80C00000800091DC800091D0E2 +:10BAA0008000917C80029438EBCD40C016971496AC +:10BAB000F6F8010C1838C0D0768A78D8103AC03021 +:10BAC000E3CD80C0F8CBFFEC0E9CF01F000ECF91B1 +:10BAD0003008EF48010C5806CF41320A0C9B0E9CEF +:10BAE000F01F0009EEF90128301B720C72485D1836 +:10BAF000EEF801280C9A700C70390C9B5D19CE1B66 +:10BB00008000917C800091D0D431189716941493C2 +:10BB1000300B324A069CEE040005F01F0052EEC6C0 +:10BB2000FFFF0C35E0880034E8C800013DD2EE0884 +:10BB30000004C0D8E4091800C2B01499F2C8FFFE8E +:10BB40001007EEC6FFFF0C35E08800220F89E409DC +:10BB50001800C4B10837C1B00D8A580AC180F4C8B2 +:10BB6000FFFEEE0800081035C4733308F009180012 +:10BB7000CE2187270D882FE887380D89F2C8FFFE70 +:10BB80001007EEC6FFFF0C35FE9BFFE2D83A580ABD +:10BB9000CFE03058F00A1800E08B003FEEC8FFFB02 +:10BBA0001035E08B002B14993061E2091800FE98E3 +:10BBB000FFC7EEC0FFFE304A4ABB009CF01F002BBF +:10BBC000C3900D89E2091800FE98FFBA009C304A24 +:10BBD0004A7BF01F0026C071EEC9FFFA87790D88F5 +:10BBE000204887880D89CABB0D8AF4C8FFFEEE087D +:10BBF00000081035CBB2DC3A14993138F00A18003D +:10BC0000FE98FFD4304A49BBEECCFFFEF01F001770 +:10BC1000C1900D89CCAB304A497BEECCFFFEF01FC2 +:10BC20000013C0610FE93018F0091800C1000D8A37 +:10BC3000CB6BEEC9FFFA87590D88204887680D89BC +:10BC4000C7EBEEC8FFFA87480D89C79B0FF8F808C5 +:10BC50001800CEE187070D882FE887180D89C6FBED +:10BC6000800091D08003DE788000917C8003DEAC80 +:10BC70008003DE908003DE98EBCD4080304A189739 +:10BC8000496BF01F0017C031E3CF9080304A495B09 +:10BC90000E9CF01F0013C041302CE3CD8080304A51 +:10BCA000491B0E9CF01F000EC041308CE3CD8080FC +:10BCB000304A48EB0E9CF01F000AC041310CE3CD26 +:10BCC00080800E9C304A48ABF01F0005F9BC000490 +:10BCD000F9BC0100E3CD80808003DEA88000917C68 +:10BCE0008003DE848003DE808003DEB48003DE8890 +:10BCF000EBCD4080304A1897496BF01F0017C031D8 +:10BD0000E3CF9080304A495B0E9CF01F0013C04186 +:10BD1000302CE3CD8080304A491B0E9CF01F000E72 +:10BD2000C041308CE3CD8080304A48EB0E9CF01F40 +:10BD3000000AC041310CE3CD80800E9C304A48ABF4 +:10BD4000F01F0005F9BC0004F9BC0100E3CD8080C0 +:10BD50008003DEA48000917C8003DE948003DE8C6F +:10BD60008003E1E48003DEA0EBCD40FC189416963E +:10BD70001497580BC160198B3308F00B1800C1D011 +:10BD80003008301595789548956895589505308810 +:10BD90009535952895185876E08B009BE3CFC0FC2D +:10BDA000301830898F7B8F4B8F6B8F5B9538950860 +:10BDB00095299519E3CFC0FC300531099545956566 +:10BDC000955595759529951930289508301A8F3A0B +:10BDD0005836FE98FFE51988F6081800CE01199923 +:10BDE000ECC800021039CDB119B919A8F1E91088D1 +:10BDF000F4081900CD4120465836E08A01112FC4BD +:10BE0000089CF01F008A8F2C20465816E08A010BF0 +:10BE10008F15E8CCFFFC19991988F1E91082CBF055 +:10BE2000ECC30002E40815021033CB95F8C4FFFE02 +:10BE300030056E16089CF01F007D0C4C8F1C2FC423 +:10BE400020432FF50A32FE99FFF65813E08A00E5E9 +:10BE5000300A8F3A09990988F1E91082CA00202333 +:10BE6000E40815021033C9B5E8C6FFFE14956E3418 +:10BE7000304A4EFB0C9CF01F006FE08100C430186C +:10BE800008488F382FC620432FF50A32FE99FFF15C +:10BE90005813E08A00940D990D88F1E910888F48B5 +:10BEA000E6CB0002581BE08A008AECCCFFFE199812 +:10BEB0001989F3E810898F59F6C80002A56912386C +:10BEC000C7F5F8C8FFFE300C8F68E3CD80FC1989F8 +:10BED0003DD8F0091800FE91FF631999ECC80002E3 +:10BEE0001039FE91FF5D304A4D3B2FECF01F0051A1 +:10BEF0001893FE91FF5509F909E8F1E91088EA085D +:10BF00001900FE91FF4DECCA0008583AE08A005E25 +:10BF1000E8CCFFF8F01F00498F2CECCA000C0A3A5D +:10BF2000E08A00578F13E8CCFFF419991988F1E9DA +:10BF30001082FE90FF35F4C30002E40815021033AE +:10BF4000FE95FF2EF8C4FFFE30056E16089CF01F0C +:10BF5000003B0C4C8F1C2FC420432FF50A32FE9956 +:10BF6000FFF65813E08A0042300A8F3A099909888F +:10BF7000F1E91082FE90FF142023E408150210332B +:10BF8000FE95FF0EE8C6FFFE14956E340C9C304AF9 +:10BF90004ABBF01F0028C211301808488F382FC63E +:10BFA00020432FF50A32FE99FFF25813E08A00145D +:10BFB0000D880D99F1E910888F48E3CF80FC300897 +:10BFC0008F58109CE3CD80FC580AFE99FEE9581A60 +:10BFD000FE90FEE6E3CF80FC304A49AB0C9CF01F9C +:10BFE0000015C0613028CDAB5813CF51CD8A0C9CC1 +:10BFF000304A495BF01F000FF9B80010F9B8010092 +:10C00000CCDB0C9C304A491BF01F000AF9B8000237 +:10C01000F9B80100C36B5813CD11CC1A5806FE991C +:10C02000FEBF5816CCB1CBBA8002BC788003E1ECDD +:10C030008000917C8003DE988002BCF08003DE9C4F +:10C040008003DE7C8003DEB08003E1E8D401580C7D +:10C05000C021DC0AF8F801745808CFC0169AF8FB22 +:10C060000178109CF01F0004F9BC01FEF9BC00002F +:10C07000D80200008002BD68EBCD40801897580CB4 +:10C08000C1D0F8FC0108F01F000F300A0E9B48ECED +:10C09000F01F000EEEFC0174F01F000DEEFC017CA1 +:10C0A000F01F000BEEFC0180F01F0009EEFC0128E0 +:10C0B000F01F00070E9CF01F0006E3CD80800000FB +:10C0C000800290A88002C0D080027400800091E8B5 +:10C0D000D401F01F0002D8028002963CEBCD40C094 +:10C0E0001896E06C018CF01F00131897C19030185F +:10C0F000E069A8C0F94800ECF9490150346833C937 +:10C10000F9480154F9460128F9490158189A189B31 +:10C11000489CF01F000AEF4C01081898C0400E9C84 +:10C12000E3CD80C00E9C1097F01F0005CF9B000050 +:10C1300080028F248002BAA880028F8C800091E850 +:10C14000EBCD4060149E1DD81896158CECF5012897 +:10C150001AD81DC91AD91DB81AD81DA91AD91D98DF +:10C1600048CA1AD81ADC1ADB303B6A0CF01F000AE6 +:10C17000ECF90128311B720C72585D18ECF901289A +:10C18000300A720C7238149B5D182F9DE3CD8060CD +:10C190008003DF4880023A1AEBCD40C0205D109743 +:10C1A000581BC130582BC0402FBDE3CD80C0310B90 +:10C1B0001A98F01F00091A961A9B0E9C310AF01F5C +:10C1C00000072FBDE3CD80C0310BF01F00052FBD50 +:10C1D000E3CD80C08002B230800091DC80028EF816 +:10C1E000D431201DFACEFFD81894500B149012961B +:10C1F00010917C237C077C12306A49AB129CF01FA3 +:10C20000001AC1D05803C0800698009B400C0499C6 +:10C210000E9AF01F00160C9BE8F501280498F5D142 +:10C22000C0100E996A0C6AA65D16E8FC0104F01FA6 +:10C2300000100E9CF01F000F2FFDD832E8C5FEB88D +:10C24000306A488B0A9CF01F0008CDD1E8F801281D +:10C250000A9B700C70995D19EA061740CD4B0000DF +:10C260008002B41C8000917C8002C19880025582BB +:10C27000800091E8EBCD40E0189716961495F8F8F9 +:10C2800001685848E0800081E08A00495888C780EA +:10C290005908C4F04C19EEF801645848C480584855 +:10C2A000E089004A5818C6605828C6604BB81AD9A9 +:10C2B0001AD8EEFA01280DD81AD80DC91AD90DB816 +:10C2C0001AD80DA91AD90D981AD80D89302B1AD958 +:10C2D000740C4B3AF01F0033EEF801282F8D700BD1 +:10C2E000707C300AF01F0030EEF90128720C72C821 +:10C2F0005D18EEF90128307B720C72185D18580534 +:10C30000C201EEFC010C580CC07079485808F9B80D +:10C310000100F9F81A14E3CD80E05818C33058280A +:10C32000CBA14A29EEF801645848CBA14A08CC0BAE +:10C330004A09CB2B5888C2205908CB9149D8CB8BBE +:10C34000EEF801280C9B700C71263019303A5D16FE +:10C35000301BEEFC0104F01F0018EEF8016C5828A9 +:10C36000C15030080E99495A109B301CF01F001420 +:10C37000CC9B4948C9DB48D8C9BB4938C99B492926 +:10C38000C8BB4909C89B48A9C87B301BEEFC010407 +:10C39000F01F000ECE7B00008003C6288003DF74F0 +:10C3A00080023A1A800274008003DF088003DF10E5 +:10C3B00080039A74800261D48002C0D080027474B9 +:10C3C0008003C8E480039A6C800261A4D431FACD62 +:10C3D00000DC1897169314951296E0490062E08BE2 +:10C3E000000630060C9C2C9DD832129CF01F034492 +:10C3F0001892E08000D60C9A0A9BF01F034205A910 +:10C4000005B8F1E910880599F5D8B0103038F00971 +:10C410001800C0603006049CF01F033BCE4BECC8F4 +:10C420000004EBDAC01030090A385F3AE045005EDC +:10C430005F88F5E8100CF20C1800CED13FE8E4C19B +:10C44000FFFC038AF00A18005F1B3028F00A18006E +:10C450005F19F7E90004F8041800CDD1EEFC0104DF +:10C46000F01F032A039903A8F1E91088EDD8B01052 +:10C47000FDD6C003506E1C9930182019F009190020 +:10C48000E08800043FF6CC8BEEF8016459085F0A9F +:10C490003028F00E19005F19126AE80A1800C080EF +:10C4A000EEF801685908CEF0EDB60003CEC0EEF804 +:10C4B00000F85808E08100ABE1D6C0100098E218FF +:10C4C0002080CE10009AE21A0800502ACDC12FC554 +:10C4D00000995055E21901005039C641405AE339DC +:10C4E000005DE338005E263AF1E91088F7D8B01015 +:10C4F000E9DBC010083AE0830598EEF9016058299D +:10C50000E0800550EDB00003E0810333E21000301D +:10C51000CBA140395809E08001CAEEF90128305B0F +:10C52000720C72185D18039903A8F1E91088E339B9 +:10C53000005DEBD8B010E33B005EFACAFF50F7E9AC +:10C54000108BE2CCFFA1F01F02F243185808C04044 +:10C55000EDB5000CC231EEC3FEB8EEF60134EEF8D4 +:10C56000017C5808E08004E742C95809E08004C80B +:10C57000EEFB017C580BC79042DAEEF80184103ACA +:10C58000C70042FE42EC1ADE14981ADC069A0E9C92 +:10C59000FEFB0B80F01F02E02FED3016C3DB3FF6F1 +:10C5A000C22BE2C6FFB3FAC4FF84310A0C9B089C7D +:10C5B000F01F02D440685C785048EEF800A8580894 +:10C5C000C301EEF800A45808FE90FF5E310A300B5C +:10C5D0000C9CF01F02D2049A404BEECCFFDC0C986E +:10C5E0004059F01F02CF0C9B089C310AF01F02CD6E +:10C5F000FE91FF4A308AE2CBFFFBEECCFF10F01F2A +:10C6000002C13018EF4800F8C6AB308AEECBFF10FD +:10C61000E2CCFFFBF01F02C3FE99FF503FF6CFCAEA +:10C62000402B310A0C9CF01F02BD049A404B0C9821 +:10C630004059EEC5FF9C0A9CF01F02B9310A0C9BC1 +:10C64000089CF01F02B8CBE13018EF4C00A80A9B01 +:10C65000EF4800A4340AEECCFFDCF01F02AACCBBEA +:10C66000129CF01F02B0C10142EC580CC160EEFBFD +:10C670000180580BC12042FEEEF80188103EC090A8 +:10C6800042C942DAC81B42FE42C942EC42DAC7CB79 +:10C690001C9AF01F02A4CF81EEF801605818E080C8 +:10C6A00000E6320AE2CBFFF3EECCFF34F01F029D2E +:10C6B000FE91FF7503B903C8F1E91088F3D8B010F3 +:10C6C000EEF801645888E08000CC5908E08000CA88 +:10C6D000EEF80128FAC9FF2C1AD970D6700C35F97A +:10C6E000FAC8FF24300A303B5D162FFD1896580C0F +:10C6F000FE90FF55EEF80160E06900FE5828F20850 +:10C700001710435AB48840680A99E2190200F1E907 +:10C7100010094358E8190108F20B1608B09B435A58 +:10C72000B4A9EEF801605828E0810093300843591D +:10C73000B2B8435AB4C8435C308AE2CBFFFB2FBC8B +:10C74000F01F02704358300AF16A005D4359F36AE2 +:10C75000005E4358406A2B381AD84379E068888EC7 +:10C760001AD9EECBFFDC1AD606990E9CF01F026E8A +:10C770003018EF4800EC5C752FDDEDB50006C0F118 +:10C78000FEFA09A8F4E80000FAE9007CEEF801647A +:10C790005888E08003F65908E08003D90A90E21037 +:10C7A0000200C0E0EEFA01283019740C069B7528CF +:10C7B000129A5D18301BEEFC0104F01F025DEEF8CA +:10C7C0000128306B700C70195D1943165806FE90E5 +:10C7D000FEE64328FAC4FF84F0C50002334A300B5A +:10C7E000089CF01F024EE0450020FE9BFED80D88FD +:10C7F000F1D8C00252280D89F3D9C041C050EEF8DB +:10C80000016458185F095209ECCBFFFE0A9AFACC72 +:10C81000FF74F01F023C0A9A52B50898FAC9FF7CCF +:10C820000A9BEEFC0168F01F0243FE91FEB8E2CACB +:10C83000FFC3089B0E9CF01F0240FE91FEB0009AC1 +:10C84000069B0E9C3016F01F023DFE9FFDE6435CEA +:10C85000302AE2CBFFFD2FDCF01F022AC6DB3208B4 +:10C86000F0091900FE91FE9BC34B42EB580BFE9062 +:10C87000FF1A58065F1AEEF9018058095F0814681C +:10C88000FE90FF116D68EDB80001FE91FF0C42F8BB +:10C89000069A1AD80E9C1ADBFEFB08A442F842E95D +:10C8A000F01F021D2FEDFE9FFE7AEEF90128720C9B +:10C8B00072885D18FE90FE73EEF80128305B700CF4 +:10C8C00070195D19403BFAC6FF50324A0C9CF01FAC +:10C8D0000213EEF801605828C0C1E338005DE33B65 +:10C8E000005E0C9AF7E8108BE2CCFFA1F01F020863 +:10C8F00043065806C0E0EEFC010C580CE08003D162 +:10C90000F8CBFFFC310A0C9CF01F0206E08003C04C +:10C910003005EEF8016C5818E08000D45805C0606E +:10C92000EEFB016C581BE080029BEEF800EC58080F +:10C93000E08102B5EEC8FF545008EECAFEB8EEC959 +:10C94000FF9CE2C8FFF3508AEEC6FEC850A950987B +:10C95000306A6E85408B0C9CF01F01F2E08500FB75 +:10C96000306A408BFAC0FFD0009CF01F01E60C9BA0 +:10C97000306AFACCFFCAF01F01E3320A409B400C38 +:10C98000F01F01E8E08500D0320A409BFACCFFC4DA +:10C99000F01F01DC320A400BFACCFFA4F01F01D9D2 +:10C9A000340E1ADE40BE00991ADE34C80A9BFEFA25 +:10C9B00007920E9CF01F01E4EEC5FF6CFAC3FF7CEA +:10C9C0000A9B308A069CF01F01CF0A9CEEC6FF64CA +:10C9D000308A0C9BF01F01CB069B0C9C308AF01F09 +:10C9E00001C93018EF4800A82FEDEEF50178EEF000 +:10C9F00001745800FE90FDD3EEFA0128FAC8FF2812 +:10CA0000E9D5B0101AD8E8C9FFA1740C74D6FAC8D9 +:10CA1000FF285C79300A303B5D162FFD1893580CC7 +:10CA2000FE90FDBDEEF80160E06900FE5828F208B6 +:10CA30001710436AB48843683019B0994066436858 +:10CA40005C760C9AA3BAB0AAEEF901605829C631F7 +:10CA500030084369B2B8436AB4C8436CE2CBFFFB09 +:10CA6000308A2FBCF01F01A74368F3D4C108F169D5 +:10CA7000005D43680A9AF165005E009B436C2A1CC6 +:10CA8000F01F01A0400B436C320A2F3CF01F019DA8 +:10CA9000408940AB43682B381AD8436C0C9A1ADC97 +:10CAA000E068888E1AD30E9CF01F019F40CBEECC1D +:10CAB000FF34320A3016F01F01932FDDFE9FFCADCC +:10CAC000EEFC0104580CFE90FF2B320A0E9BF01F67 +:10CAD000019FC361320A8F8AEEF8013406991AD891 +:10CAE0000E9BEEC8FEC8EEFC0108F01F0199580627 +:10CAF0005F1AEEF9010C2FFD58095F081468FE90CB +:10CB0000FF0F0C9A069BEEFC0108F01F0192FE91AC +:10CB1000FF0EC05B436C302AE2CBFFFD2FDCF01F21 +:10CB20000179C9CB400B320AFACCFFC4F01F017562 +:10CB3000320A409BFACCFFA4F01F0172C32B310ACA +:10CB40000E9BEEFC0104F01F0181E08101B4310A6B +:10CB5000CC3B0C9BFAC0FFD0306A009CF01F0169EF +:10CB6000306A408BFACCFFCAF01F0166C07B009B85 +:10CB7000E21B2000FE91FD13403A580AFE90FD0F83 +:10CB8000334AFAC0FFD0009CF01F0164EEF901287F +:10CB90007228720C5D1850BC039903A8F1E9108843 +:10CBA000E339005DE7D8B010E338005EF1E91088A2 +:10CBB000EEF90160F7D8B0105829E080011303B9ED +:10CBC00003C8F1E910895189EBDBC0100A34E08316 +:10CBD00000CB3028406EF00E1900E08001D80A9694 +:10CBE000129B0098FAC9FFC80C9AEEFC0168F01F6E +:10CBF0000151E08100B9F5D3C010F1DAC082501ABA +:10CC000050F830194068F2081900E08000C7302859 +:10CC1000406EF00E1900E08000A4401AF1DAC0C1A5 +:10CC2000C050EEF8016458185F0850D8EEF801289B +:10CC3000306B700C70195D19009BE2CAFFC30E9C2B +:10CC4000F01F013D1895FE91FCAAEEF80128FAC9E3 +:10CC5000FF2C0A9A1AD9303B700C70D635F9FAC8F5 +:10CC6000FF245D162FFD1894580CFE90FC98EEF8EA +:10CC70000160E06900FE5828F20817104066435A28 +:10CC80005C76B488E21300304358E8130300E7E60B +:10CC9000100CF80B1608B09B4359B2ACEEF80160CB +:10CCA0005828E08102234358B0B54359B2C5435CCC +:10CCB000E2CBFFFB308A2FBCF01F01124358300A31 +:10CCC000F16A005D4359F36A005E43582B381AD865 +:10CCD00043790C9A1AD9EEC6FEB81AD40C99E068BA +:10CCE000888EEECBFFDC0E9CF01F010F2FDD40B9CC +:10CCF0005879E08101F1EEF801685848E08001E6DA +:10CD0000E08901DC5818E080014B5828E08001469A +:10CD1000FEF804441AD8EEFA0128EF38014D1AD86B +:10CD2000EF39014C1AD9EF38014B1AD8EF39014AC3 +:10CD30001AD9EF3801491AD8EF390148302B1AD9DE +:10CD4000740CFEFA0416F01F0106EEF80128307B81 +:10CD5000700C701930165D192F9DFE9FFB5EF1D58A +:10CD6000C003C0A0EEF80128306B700C70193016AB +:10CD70005D19FE9FFB52E0460020FE9BFFF5EC0B89 +:10CD80001603FAC9FFC0E2CAFFA1EECCFFCCF01F28 +:10CD900000F5FE90FF44CE7B310AE2CBFFD3FAC40C +:10CDA000FF84089CF01F00D7310AEECBFFCCFACCF1 +:10CDB000FF74F01F00D4E0450020FE9BFFD5FAC6AB +:10CDC000FFC00A9AE2CBFFA10C9CF01F00CE0A988C +:10CDD0000C99089CE06A0100320BF01F00E3C1EBE4 +:10CDE0005C7BFACAFF50E2CCFFA1F01F00C94318D8 +:10CDF0005808CB90F3D3C0105019EDB9000CCB31CB +:10CE000043282028FAC9FFC8109A5188149B00981B +:10CE1000EEFC0168F01F00C7CA61431B1788F1D8F8 +:10CE2000C00250F81789F3D9C041C050EEF8016430 +:10CE300058185F0950D94328F0CA0002E04A002080 +:10CE4000FE9BFF922FEBFACCFFC0F01F00AEEEF975 +:10CE50000128306B720C72185D18CEFAEEF80128BA +:10CE600030091AD9129A700C70D6FAC8FF285D16CC +:10CE70002FFD1893580CFE90FB92EEF5012818999F +:10CE8000EECBFEB84358E06A888E6A0C6AA65D163F +:10CE9000069CF01F009DFE9FFB82EECEFF54320BDE +:10CEA000500E1C9CF01F00B1C1F1EF4C00ECFE9F36 +:10CEB000FD46EEF80128FEFA02B6700C303BF01F7A +:10CEC00000A8EEF80128FEFA02AA700C303BF01F11 +:10CED00000A4EEF8010C5808FE90FB613008EF4802 +:10CEE000010CFE9FFD1FEEF80128FEFA028A700C6D +:10CEF000303B3016F01F009AFE9FFA8F42EC580C20 +:10CF0000FE91FBB7EEF8017C5808C061EEF8018095 +:10CF10005808FE90FBC342F830091AD8069A1AD96D +:10CF20000E9C42F8FEFB0254F01F007B2FEDFE9F8B +:10CF3000FB36EEF801805808FE91FB18EEF9012847 +:10CF4000720C72B85D18FE9FFB111099303BEEF821 +:10CF500001605828C180E2CCFFC31AD9EEC8FFBCDB +:10CF6000EEFA012830691AD830181AD930091ADCBB +:10CF7000740C7466069A5D162FCDFE9FFC11302B43 +:10CF80003209CE6BFACCFF84CE9B5875FE98FEEC2E +:10CF9000EAC60008FE9FFE264F98CBDA4F98CBBA20 +:10CFA000EDB0000CFE91FAB0EEF800A45808FE9027 +:10CFB000FA6B3018406EF00E1900C490406AF20A05 +:10CFC0001900FE91FAA1F1D4C003FE91FA5DF6C8F2 +:10CFD00000085C88109550785C750A9CF01F00482A +:10CFE0001896FE90FA51E2C4FFA11899089AEA0B2C +:10CFF0001603EECCFFCCF01F005BC2310A9A0C9BEB +:10D00000089CF01F00400C9CF01F003F4078EA098C +:10D0100016085C58E369005DE368005E5C59F1E95D +:10D020001084FE9FFA711ADA1AD4EEF801284D6ABC +:10D03000700C302B3FF6F01F004A2FEDFE9FF9EDEC +:10D040000C9C3FF6F01F0030FE9FF9E7FAC6FF8404 +:10D05000310AE2CBFFD30C9CF01F002A310AEECB41 +:10D06000FFCCFACCFF74F01F00270898E2C9FFA19B +:10D070000C9CE06A0100320BF01F003BE339005DBD +:10D08000E338005EF1E91084FE9FFA3E0E9CF01F2B +:10D09000003FEEFC0104F01F003EFE9FFC480C9A8E +:10D0A000069BEEFC0108F01F002BEF4C010CFE91DB +:10D0B000FC293015FE9FFC2F5888C0A05908FE910E +:10D0C000FE294B48FE9FFE284B38FE9FFE254B381D +:10D0D000FE9FFE22401A0C9BE21A02000E9C3016A4 +:10D0E000F01F0016FE9FF999435C302AE2CBFFFD4A +:10D0F0002FDCF01F0004FE9FFDDC0000800092008A +:10D10000800091DC800091E88002575C8002BB08BF +:10D110008003E0488002C140800091D08002C19825 +:10D120008000917C8002C1E08003E1DC800261D458 +:10D130008002B4248002B9308002C2748003E0848B +:10D140008003E1788002B354800257CC8002914C76 +:10D1500080028FB08003C6288003E19080023A1AD3 +:10D160008002D8A080029B4080028F488003E0F0BC +:10D170008003E1308003E14C8003E0048003DF089A +:10D180008003C8E48003DFC88002B9EC80025770D6 +:10D1900080039A748003DF1080039A6CD431204D91 +:10D1A0001894F8F80128E8F9016416955909F9B3BB +:10D1B0000002F9B301011492700C1A9070991A9B35 +:10D1C0005D19C635E8F80128FAC9FFF8300A1AD9FE +:10D1D000303B700C70D635F9FAC8FFF05D162FFDA4 +:10D1E0001891580CC520E8F80160E06900FE402A5B +:10D1F0005828F2081710B4880697E8F800A4ABB7CF +:10D200005808C050E0680900E7E810075805E068D2 +:10D210000400EFD8E1375802F9B80108EFD8E13738 +:10D220004028F3D7C108B09940283006B0A740295C +:10D23000B2B64028308AB0C6E8C5FF04402C0A9B2D +:10D240002FBCF01F00130A9C308BF01F00124028E7 +:10D25000F166005D4029F366005E0E99E219010057 +:10D26000FBF81002F9BA014DF1DAE1091AD9404888 +:10D2700000991AD8069A1AD1089CE068888EE8CBE3 +:10D28000FFDCF01F00052FDD2FCDD832800091DCB0 +:10D29000800239EA8002C1E0EBCD40804879720813 +:10D2A000201893081897C031F01F00050E9CF01F3E +:10D2B0000005E3CD8080000000007AB48002D2F83F +:10D2C000800091E8EBCD40C048976E065806C041FB +:10D2D000F01F0008C0916E082FF8304C8F08F01F27 +:10D2E0000006E3CD80C00C9CE3CD80C000007AB482 +:10D2F0008002D30480028F24D401F01F0002D802E0 +:10D300008002D996D401F01F0002D8028002D9947D +:10D31000D4211789179A17B8F1E9118817A9F1EAEA +:10D320001108F1E91088990817CA17D8B168F1EA0D +:10D33000118817EA17F91258F1EA10889918F73A84 +:10D340000008F739000BF7380009B168F1EA1188D5 +:10D35000F73A000A1258F1EA10889928189EF73A0D +:10D36000000CF738000DF739000FF8C5FFE4B1687D +:10D37000F73C000EF1EA11883007125849B4F1EC7D +:10D38000108C49B69D3CC038149C2F05E80707084F +:10D390002F0EFCF9FFF0F3E82189EC0C0F88E2185E +:10D3A000FF001059EC0C0F98E61800FF1059EC0C18 +:10D3B0000FB8F1D8C1081059FCF8FFF4EC0C0FAB12 +:10D3C000A96BE61BFF0016599D091059FCF8FFF8E0 +:10D3D0009D1910599D29FCF8FFFCF3E8200A8B0ADF +:10D3E0002FF758A7CD21D8228003E2F08003E6FC76 +:10D3F000EBCD40FE1892F01F002F0493E4CBFF60AA +:10D40000E4C4FFFCE4C5FF5CE4C6FFF8E4C7FF58D2 +:10D41000E4CEFFF4E4CCFF54E4C1FFB06609760823 +:10D4200087089709680A6A0889088B0A6E086C09D8 +:10D430008D088F097C0A78089D08990A2F03210B13 +:10D440002F0421052F0621072F0E210C023BCE7140 +:10D45000E4C4FFF030134985498608972F046E0A0B +:10D46000EC0A0F98EA080F9EEC0A0F88EA080F9C56 +:10D47000EC0A0FB8EA080F9BEC0A0FA8F809150888 +:10D48000FC0A1510F3EC1389F5EE130A1659EA0895 +:10D490000F9BF6081518F1EB1288105914590EA9B4 +:10D4A0000E34CDE12FF358A3CD91E3CD80FE0000E3 +:10D4B0008002D3108003E2FC8003E6FCD431209D7F +:10D4C000F736000E505A178A780917B8F1EA118812 +:10D4D000179A1258F1EA210817AEF1EE208E506E1D +:10D4E000781817CA17F9105917D8F3EA2189F3E801 +:10D4F000210917EEF3EE208E507E7828F7390008C8 +:10D50000F73A000B105AF7380009F5E9218AF73984 +:10D51000000AF5E8210AF5E920827839F73A000C8B +:10D52000F738000FFEF7034412581894F1EA2188E7 +:10D53000F739000DF8CAFF60F1E92108500AF1E659 +:10D5400020800E91E0081618406AEE080326F3DAF0 +:10D55000C008F1D2C208EE090329EE080328504999 +:10D560005038407AEE0A0F9950296878684B105667 +:10D570004068EE000FACEE080FBA4079165AEE097B +:10D580000F8BF6081508F1EB1388F8091518105AD7 +:10D59000F3EC1289EE020F9C125AF8081510F1EC08 +:10D5A0001308F5E82008685E68654079EE090FBB4E +:10D5B00050884068EE020F8C1C5BEE080FAEF80836 +:10D5C0001508F1EC1388EE000F9A105BFC09151892 +:10D5D000F4081510F3EE1289F1EA1308125B407992 +:10D5E000F7E82003EE000F8BF6081508F1EB13881F +:10D5F000EE020FBCEE090FAE0A5CFC091518105CB8 +:10D60000F3EE12894068125CEE080F9B404A4048D6 +:10D61000F6091510A968F3EB1309F1EA1388F9E983 +:10D620002000105640394038B968F1E912882E04BC +:10D63000105640294028B169400AF3E81309EDE982 +:10D6400020021434C770E4081618408AF3DAC008C0 +:10D65000E208032EE2090326F1D0C208E2030F9983 +:10D66000E20803255019E2020FACE2030F8B6809B0 +:10D67000F6081508F1EB1388E20A0FBA125AF809F6 +:10D680001518105AF3EC1289E2000F9C125AF80890 +:10D690001510F1EC1308F5E82008E2030FBB506801 +:10D6A00040886819E2000F8AE2080FAC125BF408A8 +:10D6B0001508F8091518F1EA1388F3EC1289E2004D +:10D6C0000FBAE2020F9C105BF8081510125BF1EC28 +:10D6D0001308F7E8200850786829E2030FAC125AC3 +:10D6E000F8091518F3EC1289E2020F8BF6081508F9 +:10D6F000F1EB1388105A125A4089E2090F9B6839DE +:10D70000F6081510F1EB1308125EF5E82002EC099B +:10D710001508EA081518F3E61389F1E51288125E78 +:10D720004019105EB1694018F3E81309FDE92000C3 +:10D73000C0AB4089F1D3C1084CDBFDD9C008F60865 +:10D740000706E40A1618EBD0C208F60A0709F60520 +:10D750000708F60E070CF9E9118CF3D3C008F9E8B5 +:10D76000110C4088B988F608070AF6090708F3D2B1 +:10D77000C208F1EA1188F609070AF3D0C108680E59 +:10D78000F1EA1108F609070AF1EA10881C58F009B5 +:10D790001618405AB4B8B4894059F00A1610A9882E +:10D7A000B29AB2A8E6091618F609070AF3D0C0081B +:10D7B000F6090708F1EA1188408AF3DAC208F60987 +:10D7C000070AF3D2C108F1EA1108F609070A40591D +:10D7D000681EF1EA10881C58B2F8F0091618405A71 +:10D7E000B4C94059F00A1610A988B2DAB2E8E009C3 +:10D7F0001618F609070AF3D2C008F6090708F3D38A +:10D80000C208F1EA1188F609070AF1EA1108408A0C +:10D81000F3DAC108F609070A4059682EF1EA1088C0 +:10D820001C58F368000BF0091618405AF5690008F7 +:10D830004059F00A1610A988F36A0009F368000A33 +:10D840006839405AF9E6108C125CF8081618F80985 +:10D850001610F56C000FF568000CA98CF569000D29 +:10D86000F56C000E2F7DD8328003E2FC8003E1F0DE +:10D87000EBCD40C01897590BC030E3CF80C0E06CAF +:10D8800000B0F01F00061896CF900E9BF01F00040A +:10D890000C9CE3CD80C00000800092008002D3F099 +:10D8A000D431209D129714961895500B308A0C9BFA +:10D8B000FAC2FFE4049CF01F0034ECCBFFF8400AEE +:10D8C0000E9CA37AF01F00300A9C310BF01F002F32 +:10D8D0001893C57040082018EE08003840095028F9 +:10D8E0005C39400A5C59F40A00285019E9D8C0088C +:10D8F0003050FAC7FFF4FAC1FFEC40095809E08A3A +:10D90000002940251296308A049B0E9CF01F001EB1 +:10D91000FB390013E806000812580A9BFB68001345 +:10D92000308A029CF01F00180E9A0E9B069CF01F76 +:10D930000018308A0E9B049CF01F001320160A9CCE +:10D94000308A2085029BF01F00105806FE99FFDDEB +:10D95000401A2010E80A0008E9D8C0085BF0CCE1C2 +:10D96000069CF01F000C049C3A691988F208180004 +:10D97000C0812FFCFAC8FFDC103CCF812F7DD83A44 +:10D980002F7DDC3A800091DC8002D8708002D4BC0C +:10D99000800091E85EFD5EFCD4311A97202D109E28 +:10D9A000129514965809C4911638E0880057F0086B +:10D9B0001200C0D0F608094BF0091120FC08094EEE +:10D9C000F4090A49F4080946F3EB100BFC0516109C +:10D9D000F9DEC010F6050D0AEC0816101499F1EBEB +:10D9E0001108B93A103AE088000C20191C08103EC2 +:10D9F000E08B0007103AF7B90B01F1DEEB08F00AF3 +:10DA0000010BEDD6C010F6050D0AEDEB11061498CA +:10DA1000F40C024C0C3CE088000A20181C060C3E5A +:10DA2000E08B00050C3CF7B80B01F1E9110B300C51 +:10DA3000169A189B2FEDD8321639E08B0051F20C54 +:10DA40001200C53114385F8916355F381049F8095E +:10DA50001800C450301BC4585808C0513019F2087F +:10DA60000D08109EFC081200E08100911C1BFC05B3 +:10DA70001610F3DEC010301CF6050D0AEC08161067 +:10DA8000F4090243F1EB1108149B1033E088000CF9 +:10DA9000201B1C08103EE08B00071033F7BB0B0166 +:10DAA000F1DEEB08F0030103EDD6C010E6050D0230 +:10DAB000EDE311060498E40902490C39E088000AF4 +:10DAC00020181C060C3EE08B00050C39F7B80B0142 +:10DAD000F1EB110B169A189B2FEDD832300B169CD8 +:10DAE000169A189B2FEDD832F20C0945F80E11202A +:10DAF000F00C0943F40E0A46F00E0A48F60E0A4EE0 +:10DB00000A48F0011610FC010D04EEE5FFF8F60CD2 +:10DB10000949EBD8C010EDE910090896F20E16106D +:10DB2000EEF4FFF8EC05024BFDE4110E1C3BE0881F +:10DB300000072016100E1C38E088006D161EF3D961 +:10DB4000C010FC010D00F3E11109009BE005024E3D +:10DB5000123EE0880007201B10091238E0880055AB +:10DB6000F7E6110B1C19F60306420639C0935F094C +:10DB7000F40C094C043C5F38F3E80008C020201B7B +:10DB8000300C169A189B2FEDD832F6080949FC087C +:10DB9000094EF0011120FC051610F4010A42F601AD +:10DBA0000A411242E2050D00F3DEC010E406161031 +:10DBB0000093EDE11106E009024C0C3CE0880007FF +:10DBC00020131C060C3EE088002CEC0C0101F7D25F +:10DBD000C010E2050D00F7E1110B009CE0090241C5 +:10DBE0001631E088000C201C1C0B163EE08B000751 +:10DBF0001631F7BC0B01F7DEEB0BF4080946021BEC +:10DC0000F9E3110CC3AB123EF3D8EB09F7BB0B01E0 +:10DC1000CA8B1C3BF7B60B01FDD8EB0EC90B0C3CB5 +:10DC2000F7B30B01EDDEEB06CD1BD703D40130AA11 +:10DC3000300BF01F0002D8028002F0ECD4014848FB +:10DC4000169A189B700CF01F0003D802000005986C +:10DC50008002DC54D421F40B024BF01F00151897FE +:10DC6000C230F8FAFFFCE01AFFFC204AE04A002428 +:10DC7000E08B00181898593AE088000F300910A975 +:10DC800010A959BAE088000910A910A9E04A002497 +:10DC9000C03110A910A9300910A991199109C048E3 +:10DCA000300BF01F00040E9CD82200008002E2BC62 +:10DCB0008002E8BCD421300EF6C80001F60614013B +:10DCC000F808002818991897C07870046E050EA4FB +:10DCD00091052FFE20480C3ECF95F40B000B1897B2 +:10DCE000F6C80001300EF8080028A15BC078700566 +:10DCF0006E060EA591062FFE2048163ECF95F4C85D +:10DD00000001A15AF808002C3008C078780E720B78 +:10DD100012AE990B2FF8204C1438CF95D822D70388 +:10DD2000D431205D502C503816971496580C5F0B48 +:10DD300058075F0C1295F9EB100B40E33008F00B1D +:10DD40001800E081028058095F09580A5F08F3E86B +:10DD50000008F6081800E08102764BE4402B6808C2 +:10DD60001638E0840270EE08032C580CE080026B39 +:10DD70004B9BF01F003AC06168082FF88908E08FBC +:10DD8000026268085808C05130184B598908930836 +:10DD90005806C14032D90D88F20818005F0232B926 +:10DDA000F20818005F08E5E81008C0805802F9B2D0 +:10DDB0000101F9B200022FF6C0884AACF01F002A18 +:10DDC000F9B20102F9B200004A5870085818C61199 +:10DDD0005812C2B049F95822C4A0129872043001F6 +:10DDE00032DB32BA7009F2C0FFFFEE09032C580C87 +:10DDF000E080023B1989F6091800C0805803E080D2 +:10DE00000225F4091800E081022150015014492B29 +:10DE1000F01F0012C411EE04002C029B301A2FF4E4 +:10DE2000F01F0012E08F022148A87009EE090328B4 +:10DE30005808C2F0118A32DBF60A1800C2A0580353 +:10DE4000E080020832BBF60A1800E0810203C21823 +:10DE500000007AB88003EC008002ECC800007ABCB5 +:10DE60008003EC04800326948002DCB47208EE0880 +:10DE700003285808C0E0118832D9F2081800C09071 +:10DE80005803E08001E032B9F2081800E08101DBBC +:10DE90003009500950195805E08000A44BE4680887 +:10DEA000302AEE08032C4BDBF01F003DC0D0580396 +:10DEB000E08000986808EE080328118932B8F0095C +:10DEC0001800E081008F4B7468085818E081008AC0 +:10DED0004B187008302AEE08032C4B0BF01F003053 +:10DEE000F9B80002E9F80A004AB468084AD1EE0815 +:10DEF000032C620833DB100CF01F002B1893C0E1D9 +:10DF00006808EE08032CF01F002968096208EE0972 +:10DF10000323F80801081803C08868086209EE089E +:10DF20000328F8080108121850430A910C933FF493 +:10DF300030001096C4784989720849A9EE08032C6C +:10DF400072080C9A100CF01F0016C3A1620CF01F8F +:10DF500000171836C051069600944043C3C85BF4BE +:10DF6000C2E0493870085808C7C062081AD848A8E3 +:10DF700070096E08EE090329A564EA04030A1ADA97 +:10DF80001AD91AD848B8700848BB702CF01F000B7B +:10DF90002FCDC67800007AB88003EC008002E7102D +:10DFA00000007ABC8002ECAC8002EDD0000004A43A +:10DFB000000005988003EC1480031FE800942FF004 +:10DFC0002F01620B580BCB81069640435BF4C031A6 +:10DFD0000898C0A8E8081504EA0800087018C048A6 +:10DFE0003FF83003109458065F19F3E403F9C03189 +:10DFF0003006C5484BE162084BE3EE08032966088A +:10E000000C9CF208070BF01F003C1896C2D14BB8CD +:10E0100070085808C11062096608EE090329F20861 +:10E0200007081AD86E081AD84B5870084B5B702C2A +:10E03000F01F00352FED4AF8700B2FFB910B4AC9EA +:10E04000720AEE0A032CF80B070C300BF60C1800C2 +:10E05000F7BA00FFF3FA0A00F9B90001F1F90A0072 +:10E0600033F8109CC818199833A9F2081800C0306A +:10E070003008C08819A9F0091800F9B80002F9B8E9 +:10E08000010149CA49A97209EE09032974030D8ADD +:10E090002FF3F203000349D9930A5818C1505828A6 +:10E0A000C0405808C6C0C208078933D8F009180014 +:10E0B000F7B300FF4968078A3009F20A1800C10166 +:10E0C00030069106C718078933D8F0091800F7B34E +:10E0D00000FF30080789F0091800C1B048C8910353 +:10E0E0003019484891093006C5F8000000007AB898 +:10E0F00000007ABC8002ECAC000004A4000005988B +:10E100008003EC5080031FE8000004A000007AC0E8 +:10E110004C08402B70082FF81638C2954BE8700851 +:10E120005808C1C06E084BD71AD86E084BCB702C5C +:10E13000F01F003C2FFD5BF4C0906E08A5644BAB54 +:10E14000EA0403091AD9702CC0686E080D894B7B4C +:10E150001AD9702CF01F00332FFD4AE933A8720A38 +:10E16000109C2FFA930A4B299308C6D84B19EE0836 +:10E17000032A3018930A10964AF9C1584AE95BF409 +:10E18000C0D1720A2FFA930A4A2B760BEE0B032B9F +:10E19000F60A070AF00A1800C03130189308300850 +:10E1A0004A49109693085802C1B140094A285809B3 +:10E1B0005F19700858185F08F3E80008E4081800B1 +:10E1C000C0F04018ECCAFFFFEE08002C400BF01F17 +:10E1D000001B40182FF8F006000648E8C0A8496860 +:10E1E00070085818C07148B870092FF9F206000677 +:10E1F00091065BF4C240403B580BF7F41A00A5644B +:10E2000008056A3C6A285808C1E0910C300CC1B876 +:10E2100000007AB8000004A4000005988003EC70A8 +:10E2200080031FE88003EC948003EC9C000004A0B2 +:10E2300000007AC000007ABC8002DCB448C8700CD0 +:10E24000C0283FFC2FBDD83291002FF1FE9FFDCC9E +:10E25000488B97084888F2CAFFFF3019910A129C30 +:10E2600048389109CF0B48489104CECB000004A058 +:10E2700000007AC000007AB8D40130091AD9129887 +:10E28000F01F00022FFDD8028002DD20D401484893 +:10E29000189B700CF01F0003D802000000000598C6 +:10E2A0008003217CD4014848189B700CF01F0003A8 +:10E2B000D8020000000005988002E2BCD431F6C705 +:10E2C000FFF518955967F9B70810F9B80BF8EFD8AA +:10E2D000EB2716375F38F1E713F8C05030C899388C +:10E2E000E08F01F4F01F0050E04701F7E08B001CC5 +:10E2F000EE0316034CD8F003003870361036C061B8 +:10E30000ECC8FFF870361036C0C06C18E018FFFC7F +:10E310006C3AEC0800090A9C6C289528913AC4785C +:10E320002FE3C4D8EE081609C041EE031603C278E5 +:10E330005848E08B0006EE0316062C83C2085948A5 +:10E34000E08B0005F0C3FFA5C1A8E0480054E08BB6 +:10E350000006EE03160C2923C128E0480154E08B87 +:10E360000006EE03160F2893C0A8EE031612E0482D +:10E370000554E088000437E3C02828434ABAF40370 +:10E38000003A7436C1986C19E019FFFCF207010BD2 +:10E3900058FBE08A00042013C1186C38580BC0B534 +:10E3A0006C2AEC0900090A9C912A95387218A1A8D8 +:10E3B0009318CBD810961436CE712FF349BAF4CCFB +:10E3C000FFF878261836C6F06C19E019FFFCF20742 +:10E3D000010858F8E0890091993C992C5808C055DB +:10E3E000EC0900090A9CCE3BE04901FFE08B0013D9 +:10E3F000A399F4090038702B8D388D2B9736912610 +:10E40000A3497418301BF6090949F1E91009951957 +:10E41000C4A8F20816095848E08B000AF20A16064A +:10E420002C8AC2488002E8CA0000059C5948E08B4B +:10E430000005F0CAFFA5C1A8E0480054E08B000623 +:10E44000F20A160C292AC128E0480154E08B000684 +:10E45000F20A160F289AC0A8F20A1612E0480554CC +:10E46000E088000437EAC028284A4C8BF60A0034BA +:10E4700068280838C0E17619A34A301EFC0A094A08 +:10E48000F3EA100A1099971AC0A870280838C060DB +:10E49000701AE01AFFFC1439CF9370398D398D282A +:10E4A00091369326E6081402301B4B84F608094B7C +:10E4B0006818103BE08B006EF7E80009C0B1E0136C +:10E4C000FFFCA17B2FC3C0382FC3A17BF7E8000955 +:10E4D000CFC0E803003E06921C916236C2E86C1A77 +:10E4E000E01AFFFCF407010858F8E08A00156C3ABE +:10E4F0006C299529933A0E99EC070007A1A9993741 +:10E5000099278D19EE0809088F2C8F3CA1A80A9C29 +:10E510008F18C0D86C395808C0F5EC0A000A741876 +:10E52000A1A80A9C95186C2893289139F01F00180F +:10E53000ECCCFFF8D83212960236CD212FF2F1D270 +:10E54000C002C0302F81CCAB1C98F3D3C002C08175 +:10E550006819F60811FFF3E800088918C078F0C9B7 +:10E560000008201370081238CF10A17B6818103BE8 +:10E57000E08B0010580BC0D00493C0382FC3A17B90 +:10E58000F7E80009CA71CFBB0000059C8002E8CC07 +:10E5900068236612E012FFFC0E325F39E4070108BF +:10E5A00058F85FAAF5E91009E08000A24C887001D4 +:10E5B0004C882F0170080E015BF8C0402811E01153 +:10E5C000FF80029B0A9CF01F004418965BFCC6E08B +:10E5D000E6020008103CC0320833C6814BFA7409C9 +:10E5E000E209000995091036C0A1F5D6C007C0712F +:10E5F000E20200026828A1A29112C4C84B5A740B0F +:10E600005BFBC0319506C068EC0900094B3A101954 +:10E610009509F1D6C003F00911085808F20817103F +:10E62000EDD8E1062808EC0100010A9CE3D1C007FF +:10E63000F0010101029BF01F00284A885BFCEC0CF2 +:10E640001700F9B1000070090C1C8926020C120198 +:10E65000A1AC91018D1C0833C1D058F2E08B0005AC +:10E6600030188D18C238305920C2E012FFF8E60287 +:10E670000008912991196618F1D8C001E5E8100841 +:10E68000871858F2E0880007E6CBFFF80A9CF01FD5 +:10E6900000144949720A491870081438F3F8BA008E +:10E6A0004919720A1438F3F8BA0068287018E0188B +:10E6B000FFFC0E385F390E1858F85FAAF5E910090B +:10E6C000C1600A9CF01F0009D83A000000007ACC13 +:10E6D000000009A88002EBC800007AD08003217CEA +:10E6E00000007AC800007AC48002E8CC6826A1A89D +:10E6F0000E99A1A98D19EC0700070A9C89278F188C +:10E70000F01F0003ECCCFFF8D83200008002E8CC08 +:10E71000D4013008C0D8F808070EF6080709201AF7 +:10E720002FF8F20E1800C040FC09010CD802580A5C +:10E73000CF31149CD802588AC2F5F9EB1009E219BE +:10E740000003E0810097E04A0020C3B4F4081402FB +:10E75000F0091108FE09002F7669996976599959CF +:10E7600076499949763999397629992976199919E5 +:10E7700076099909F608002BF8080028E01A00032A +:10E78000F40A1104FE0A002F17A9B0A91799B0992D +:10E790001789B0895EFCF40A1109FE0A002F17F9E7 +:10E7A000B8F917E9B8E917D9B8D917C9B8C917B965 +:10E7B000B8B917A9B8A91799B8991789B8895EFC8B +:10E7C000EBCD40C01899220AB707B326B707B32686 +:10E7D000B707B326B707B326220ACF742F0AC0653E +:10E7E000B707B326B707B326210A5C3AFE0A003FF3 +:10E7F000D703D703F736000EF366000EF736000D89 +:10E80000F366000DF736000CF366000CF736000BCC +:10E81000F366000BF736000AF366000AF7360009C4 +:10E82000F3660009F7360008F3660008F7360007BC +:10E83000F3660007F7360006F3660006F7360005B4 +:10E84000F3660005F7360004F3660004F7360003AC +:10E85000F3660003F7360002F3660002F7360001A4 +:10E86000F3660001F7360000F3660000E3CD80C0D8 +:10E87000201AF60A0709F80A0B09CFB15EFCD40189 +:10E88000183BC192F60A0009123CC152F80A000B6B +:10E890003008C068F208070E201AF6080B0E201880 +:10E8A000580ACF91D802F6080709201AF8080B0970 +:10E8B0002FF8C0283008580ACF71D8021898C038ED +:10E8C00010CB201A580ACFD15EFC5EFC5EFCD70349 +:10E8D000D4014848169A189B700CF01F0003D80208 +:10E8E000000005988002E8E8D431201D16941892A3 +:10E8F000149B5804C051F01F005B1895C5B9500A0D +:10E90000F01F0059400BE8C10008F6C6FFF5621C75 +:10E910005966F9B60810F9B80BF8EDD8EB2616369B +:10E920005F38F1E613F8C05030C830058538C42987 +:10E930001890E010FFFC0C30E08401124CB8E200AB +:10E94000000970250A39C090721AA1CAF20A000A99 +:10E95000741AEDBA0000C220721AE01AFFFCF4002B +:10E9600000030A39C131ECC7FFF00E33C195E2064E +:10E9700000090C13A1A393139129049C6218089514 +:10E98000F1D8C00110468316C1390C33C0957228E6 +:10E990000297723993289139CE48300A1499EDBC08 +:10E9A0000000E080009D6207E20701076E1CE01C8A +:10E9B000FFFC5809C5E0F80000030A39C4811403BC +:10E9C000ECC9FFF01233C5556E3A6E299529933A7A +:10E9D000EEC5FFF8E0CA0004E04A0024E08B002501 +:10E9E0000A99593AE088001A09098B0909098F39EF +:10E9F000EEC9FFF059BAE0880011090B930B090921 +:10EA00008F59EEC9FFE8E04A0024C071090A930A51 +:10EA1000EEC9FFE0090A8F7A090A12AA680A930A66 +:10EA2000681A931AC0785008089B0A9CF01F0010BF +:10EA30004008EE0600090C13A1A393139129049C2E +:10EA40006E18F1D8C00110468F16CB2814030C3372 +:10EA5000C10572287239932891396E286E39C0F831 +:10EA60008002E2BC8002E8CA0000059C8002E87EC9 +:10EA7000F80000030C33C3356E396E2893289139A2 +:10EA8000E0CA0004EECCFFF8E04A0024E08B00244A +:10EA9000593AE088001A0908990809088F38EECC1D +:10EAA000FFF059BAE08800110908990809088F5841 +:10EAB000EECCFFE8E04A0024C07109089908EECCCA +:10EAC000FFE009088F78090818A8680899086818ED +:10EAD0009918C478089BF01F0039C438049CF01FB3 +:10EAE00000381895C3A06218F8C90008A1C8E20848 +:10EAF00000081039C07172130297E013FFFC000385 +:10EB0000C308E0CA0004E04A0024E08B0020089912 +:10EB10001898593AE0880014130B10AB130B10AB84 +:10EB200059BAE088000D130B10AB130B10ABE04A81 +:10EB30000024C051130A10AA130A10AA130A10AA1B +:10EB4000720A910A72199119C048089BF01F001BA4 +:10EB5000089B049CF01F001B049CC2A80093029712 +:10EB6000E60601096E1858F9E0880016F1D8C001D0 +:10EB7000EDE810088F181298A1A8EE06000BF60910 +:10EB8000000997187218A1A82F8B9318049CF01FE6 +:10EB9000000DC0B8F1D8C001E7E810088F18EE03E7 +:10EBA00000036618A1A88718049CEEC5FFF8F01FA3 +:10EBB00000060A9C2FFDD8328002E87E8002E2BC6B +:10EBC0008003217C8002E8CCD42130081897487655 +:10EBD000169C8D08F01F00065BFCC0516C0858089D +:10EBE000EFF81A03D822000000008CC48002F1E87C +:10EBF0005EFDD703D421217DE06802041697BA6830 +:10EC0000504C500CF01F000B3008512850D848A829 +:10EC100050983FF8BA784898505C501CFAC9FF9059 +:10EC20000E9A700C1A9BF01F00062E9DD822000031 +:10EC30008002EDD08002EBF00000059880030C4CC0 +:10EC4000D421217D4988FAC9FF9016977006580B88 +:10EC5000C064E068008B3FFC8D38C228580BF60872 +:10EC600017005807F9BB01FFEFDBE10850585028A7 +:10EC7000E0680208BA683FF8504C500CBA781A9B0A +:10EC80000C9CF01F000A5BFCC044E068008B8D38D0 +:10EC90005807F9B90100FBF81000F1F91E002E9D8C +:10ECA000D8220000000005988002F5685C5BC0284F +:10ECB0002FFC19885808C050F6081800CFA15EFC38 +:10ECC000580B5E0C5E1DD703F9EB100AE21A000325 +:10ECD000C341780A76095CEAC170123AC151781AC8 +:10ECE00076195CEAC110123AC0F1782A76295CEAFA +:10ECF000C0B0123AC091783A76395CEAC0502F0C15 +:10ED00002F0B123ACE70F9DAC308F7D9C3085E0C9C +:10ED1000161C5E1CF9DAC208F7D9C2085E0C161C74 +:10ED20005E1CF9DAC108F7D9C1085E0C161C5E1C1E +:10ED30005C5A5C59121A5EFA178A1989580A5E09D8 +:10ED400014195E19179A1999580A5E0914195E194F +:10ED500017AA19A9580A5E0914195E1917BA19B920 +:10ED6000580A5E0914195E192FCB2FCCCE6B000008 +:10ED70003008F6080709F8080B092FF85809CFA141 +:10ED80005EFCD703D4014848189B700CF01F0003A9 +:10ED9000D8020000000005988002ED9CD42118974D +:10EDA0001696169CF01F0008F8C5FFFF0E9C0A9BE4 +:10EDB000F01F00061897C0500A9A0C9BF01F000421 +:10EDC0000E9CD8228002EDD08002E2BC8002E736A1 +:10EDD00030091898C0282FF8118AF20A1800CFC1FC +:10EDE000F00C010C5EFC580AC0815EFA580AC0B0F3 +:10EDF0005808C0902FFC2FFB201A19881789F0099A +:10EE00001800CF50198C1788101C5EFC3008103A7F +:10EE10005E0CF6080709F8080B092FF85809CF818E +:10EE2000103A5E0CF8080B092FF8CFBBD401484804 +:10EE3000169A189B700CF01F0003D802000005986A +:10EE40008002EE44D421300816951696C0282FF67D +:10EE5000580AC060201A0D89F0091800CF910A16CF +:10EE6000ECCBFFFFF01F00071897C0800A9B0C9A9D +:10EE7000F01F00053008EE060B080E9CD82200009B +:10EE80008002E2BC8002E736D42118981696580B0F +:10EE9000C0C03007C0481897F8C8FFFF109C0C9BF3 +:10EEA000F01F0005CF91C048F01F000318970E9C7B +:10EEB000D82200008002ECACD421201D4A351897DE +:10EEC0006A04E8F600E85806C351500B350CF01FF1 +:10EED00000206A08E94C00E8F0F900E89326930660 +:10EEE0009316F0F900E893469336F0F900E893663C +:10EEF0009356F0F900E893B693A6F0F900E893D69C +:10EF000093C6F0F900E893F693E6F0F900E8F346CB +:10EF10000044F3460040F0F900E8F346004CF346A5 +:10EF20000048F0F900E8F366001CF0F800E8400B38 +:10EF30009196486870080E9CF0FA00E83019F01FAE +:10EF400000052FFDD8220000000005988002E2A4F1 +:10EF50008002EF54D421580CC041740C580CC2905C +:10EF600018981697113EC0A80C3EC0815809C030B1 +:10EF7000109CCF7B9508B889D8220F365806CF5100 +:10EF8000580EC051950E1C9CD822129810991697B5 +:10EF9000133E0F361C36C0A1580EFC091700F9BBF2 +:10EFA0000100F1FB1E009509D8225806CF31CEEBA7 +:10EFB000D822D703D431203D4CC8502C700116986C +:10EFC000113EE20E0706E2160008CFB1E04E002D1A +:10EFD000C041113E3016C058E04E002BC021113EFA +:10EFE00058095F0C59095F053007F9E51005EE0572 +:10EFF0001800C1E0E04E0030C131118535843783FF +:10F00000E80518005F04E60518005F05E9E510054E +:10F01000EE051800C050119E31092FE8C098580C19 +:10F02000C070E04E0030F9B90008F9B9010AE06C8F +:10F03000FFFFEA1C7FFF3007FC1580000E930E36A1 +:10F04000F80517000E9CEA090D0408925005E20E1F +:10F050000704E1D4C001F9B00137F9B000575010EE +:10F06000FCC500300890E2100004C0814010E9D4D3 +:10F07000C002FC0001055804C1C01235C1A4043C03 +:10F080005FBEFDE713FEE60E1800C101043C5F0EF3 +:10F0900040070E355F97EFEE000EE60E1800C061D8 +:10F0A000B33C3017EA0C000CC0283FF7113ECD0BE3 +:10F0B0005BF7C0E1E069FFFFEA197FFFFC1C8000FD +:10F0C00040205806F20C170032298139C0485806F2 +:10F0D000FBBC0100580AC0705807F9B901FFF1D90B +:10F0E000E10B950B2FDDD8320000049CD401485869 +:10F0F0001499169A189B700CF01F0003D802000098 +:10F10000000005988002EFB43028D6733FFC358BA1 +:10F11000580C5E4C482A950B5EFC000000008CC425 +:10F120003058D6733FFC358B580C5E4C482A950BF3 +:10F130005EFC000000008CC43038D6733FFC358B79 +:10F14000580C5E4C482A950B5EFC000000008CC4F5 +:10F150003048D6733FFC358B580C5E4C482A950BD3 +:10F160005EFC000000008CC430B8D6733FFC358BC9 +:10F17000580C5E4C482A950B5EFC000000008CC4C5 +:10F180003098D6733FFC358B580C5E4C482A950B53 +:10F190005EFC000000008CC4D421210D16971A9B40 +:10F1A000F01F0011C0343FFCC1C84008AE08401831 +:10F1B000AE1840288F184038AE484048AE584058E6 +:10F1C000AE684068AE7840888F4840A88FB840C885 +:10F1D0008FC840D88F5840E8300C8F7840F88F980F +:10F1E0002F0DD8228002F180D40148C87009580937 +:10F1F000C03148B99109489948AA7208F00C000C2E +:10F20000143CE08B0004930CC068F01F000730C86A +:10F2100099083FF8109CD80200007AF800008CC8CA +:10F220000000F00080031D20D431208DFAC4FFBC03 +:10F23000504B682E505812967C0B7005506E580B30 +:10F24000F40B17006803681140493008C2C92FFB4E +:10F25000325C178AF80A18005F1EF00A18005F1C5B +:10F26000FDEC000CF00C1800CF31580AE0800129A9 +:10F27000300C3FFA1890503A18941892F80C003C51 +:10F280001697507C4CDC0F3AF80A070E407C1C0C99 +:10F290004CBEFC0C070E201E500E4CAEFC0C070C96 +:10F2A000507C400C587CE08B00F84C7EFC0C032F0B +:10F2B000368BF60A1800E08000F0371BF60A1800BB +:10F2C000C07034CBF60A1800C051A3B4CE58A5B410 +:10F2D000CE380F8B36CAF40B1800C051A5B4EECB54 +:10F2E000FFFFCDB8A5A4CD88EBD5C005367CF80AC4 +:10F2F0001800E08B0027365BF60A1800C48234FB46 +:10F30000F60A1800C480E08B000C345BF60A180083 +:10F31000C3E0347BF60A1800C3A0344BC088358B99 +:10F32000F60A1800C2C0E08B0007355BF60A180029 +:10F33000C351C318363BF60A1800C2F0364BC0E87A +:10F34000370BF60A1800C250E08B000D36EBF60AB8 +:10F350001800C1F0E08B0014369BF60A1800C1E1DA +:10F36000C0E8375BF60A1800C0A0378BF60A180011 +:10F37000C060373BF60A1800C111C0B8EDB40004F4 +:10F38000C0A0EDB40005C0913020C0883040C068F6 +:10F390003030C0483010C0283000403B5BFBC040DC +:10F3A000E20B0920C7985860E08B00776C0AEACC22 +:10F3B000FFFF486EFC00032F8003EE088003ED641E +:10F3C0008003ECF88003ECAC8003ECCCF4CBFFF8CA +:10F3D0008D0BF4EA0000E605083AC0F8F4CBFFFC18 +:10F3E0008D0B740AE605093AC088F4CBFFF88D0B43 +:10F3F000F4EA0000E605083A0E9B1895C4E8620A94 +:10F400005BFAC0B150195028E06A0080300B029CB2 +:10F41000F01F004D40284019E4CC00010E9B503CE9 +:10F42000F20C0C49C3A8620A5BFAC0B1501950280B +:10F43000E06A0080300B029CF01F00434028401916 +:10F440002012300A0E9BE202092AF2020C49C2582D +:10F4500016976C0AF4CBFFFC8D0B740A0E9BE60525 +:10F46000093A2FF5C1A8F4C20030C068E4020022B6 +:10F470002FF7F40200120F8A580AC0E0230A589AA4 +:10F48000FE98FFF6C0982FF70F8A580AC050230A3B +:10F49000589AFE98FFFA0E9B407C30BAF40C180084 +:10F4A000FE91FEEE4042178C0A325F4AF00C1800C3 +:10F4B0005F1CF9EA000AF00A1800FE91FECB300842 +:10F4C000404E178AE2050021F00A1800FC091710C7 +:10F4D000E6050038069EC2A8620A583AC1E0E089F3 +:10F4E0000007581AC1A0582AC181C058585AC0C034 +:10F4F000C0B5C1386C0AF4CCFFF88D0CF4E2000002 +:10F50000F0E30000C1086C0AF4CCFFF88D0CF4E2C3 +:10F510000000F0E30000C0786C0AF4CCFFFC8D0C16 +:10F52000740A910A2FF52F882FC11235FE9AFFD643 +:10F530001C934052406E85059D0B404BE60B003CF2 +:10F540002F8DD8328002E8BCD42114977428580833 +:10F55000C0419518109CD822F01F000330088F1866 +:10F560008F28D82280032320D431FACD068850A9D1 +:10F57000169014971893580CC06078685808C031DA +:10F58000F01F004E4CE81030C0316600C0A84CD8C7 +:10F590001030C0316610C0584CB81030E7F000028F +:10F5A0008068EDB80003C04160485808C071009BF6 +:10F5B000069CF01F0046E0810B4080681099E2191C +:10F5C000001A58A9C3D18079300AF4091900C385FB +:10F5D000A1D8FB5805B86088FB4805CC60A8FB485B +:10F5E00005D4FAC8FFD4FB4805BCFB4805ACE0686D +:10F5F0000400FB4805C0FB4805B43008FB5905BAB8 +:10F600000E9A40A9FAC7FA54FB4805C4069C0E9B03 +:10F61000F01F002F506CC0950E9B069CF01F002D14 +:10F62000406EF9BE01FF506EFB0805B8EDB800064C +:10F63000E0810B058068A7A8A068E08F0B00300868 +:10F64000FAC4F9F85098FB480678409CFB480674C9 +:10F65000FB48067CFB48068050573FF8FB44067089 +:10F66000FB48052C506C1896069150204055C02838 +:10F670002FF50B88300B325AF60818005F19F40882 +:10F6800018005F181268F6081800CF314059EA09CF +:10F690000107C2E0FAF806780E088909FB480678E7 +:10F6A0008917FAF806742FF8FB4806745878E08931 +:10F6B00000132F84C1A8000080031F388003EF2CA3 +:10F6C0008003EF4C8003EF6C80031C388002F568E8 +:10F6D00080031D2CFACAF990402B029CF01F00A158 +:10F6E000E0810AA6FAC4F9F840680E0850680B8851 +:10F6F0003007EE081800E0800A8AEAC2FFFF3003F4 +:10F700005052FB6706873FFE50745043503E0690B0 +:10F71000508506920C944057C0683FFC0A97503CB5 +:10F72000C02830000F38C0281292E0480063E08003 +:10F7300001CCE0890045E0480039E0890026E04836 +:10F740000031E0840198E048002BE0800101E0896D +:10F75000000FE0480023E080008EE048002AE080AF +:10F76000008CE0480020E0810897C7B8E048002EF0 +:10F77000E08000F1E0480030E080017BE048002DAF +:10F78000E081088ACE28505750420897408540743F +:10F790001092E048004FE0800439E0890008E0481A +:10F7A0000044E081087DE08F01DEE0480055E08004 +:10F7B00005DFE0480058E0810873C428E048006F86 +:10F7C000C430E089001FE0480069C450E089000AA5 +:10F7D000E0480064C400E0480068E081085DC63984 +:10F7E000E048006CE0800163505750420897408524 +:10F7F00040741092E048006EE0810852E08F02ED04 +:10F80000E0480073E0800553E089000BE048007099 +:10F81000E08004F9E0480071E081083EC5295057B6 +:10F8200050420897408540741092E0480075E0808F +:10F8300005A0E0480078E0810833E08F06964CABE5 +:10F84000509BE08F06945057408508975042407473 +:10F85000E08F03DD50574085089750424074C83907 +:10F86000FB380687300AF4081800FE91FF5D320865 +:10F87000C6E8A1A3C58B0F89F2C800305898E08B69 +:10F88000001EEEC8FFFF300B2309F60B002BF20B16 +:10F89000001B1139F2CA0030589AFE98FFF7E04970 +:10F8A0000024FE91FF40E04B0020E08909C1201BAD +:10F8B000FAF90680123BC095C108FAF90680ECCA35 +:10F8C000FFFF1236C1F5C268FAC9F9781097F20B3A +:10F8D000003BF6F2FDA4C358FAC7F9841AD7109773 +:10F8E000FAC2FAD01AD2FAC8FBCC029C1AD8FAC8CB +:10F8F000F974FAC9FFCC40BAF01F001C2FDD780262 +:10F90000C208FACEF9781496FC040038F0F2FDA48F +:10F91000C18840A859F9E0890011F0CBFFFC50AB39 +:10F920007002FACCF978F8090038F142FDA42FF9F9 +:10F930001496FB490680C058700214962FC850A830 +:10F940005802FE94FEF15C32A3A3CEDAFB68068770 +:10F95000CEAA0F38E048002AC0A03009C7D800005E +:10F960008002F5488003EDD08002F2280F88F0C9AC +:10F9700000305899E08B001EEEC5FFFF300B2308C6 +:10F98000F60B002BF00B001B0B38F0C90030589918 +:10F99000FE98FFF7E0480024FE91FEC5E04B0020F2 +:10F9A000E0890946201BFAF80680103BC095C10883 +:10F9B000FAF90680ECCAFFFF1236C1F5C288FACA0E +:10F9C000F978F40B003BF6FBFDA4503BC3C8FAC921 +:10F9D000F9841AD9FAC8FAD01AD8FAC8FBCC029C12 +:10F9E0001AD8FAC8F974FAC9FFCC40BAF01F027AE3 +:10F9F0002FDD780C503CC278FACEF9780E95FC04D5 +:10FA000000381496F0F8FDA45038C1D840A859F930 +:10FA1000E0890014F0CBFFFC700850AB5038FACCF2 +:10FA2000F978403BF8090038F14BFDA42FF90E9509 +:10FA3000FB4906801496C07870090E952FC850397E +:10FA4000149650A840385808FE95FE690A97C6BA21 +:10FA5000F40B00190F38F209002BF0CA0030589A45 +:10FA6000FE98FFF83FFEF20E0C495039C5FAA7B3D5 +:10FA7000C5AA30092308F2090029F00900190F3836 +:10FA8000F0CA0030589AFE98FFF7E0480024FE9133 +:10FA9000FE4DE0490020E08908CBF2C4000130109F +:10FAA000FE9FFE42A7A3FE9FFE3F0F89F0091800AC +:10FAB000C0512FF7A5B3FE9FFE37A5A3FE9FFE34CE +:10FAC000A5B3FE9FFE3150575042089740854074C1 +:10FAD0000C99FAF806805800C1D01037C064FACCEF +:10FAE000F978F8070037C1D8FAC8F9841AD8FAC8E3 +:10FAF000FAD01AD8FAC8FBCC1AD8FAC8F974FAC9DD +:10FB0000FFCC0A9A0E9B029CF01F02332FDD19B81E +:10FB1000C2282FF61039C084FACBF978F6070037DF +:10FB2000EF38FDA7C18840A959F8E0890012F2CA50 +:10FB3000FFFC50AA7209FAC2F978E408003A2FF8DB +:10FB4000F549FDA4FB480680F1D9C008C04813B8A8 +:10FB50002FC950A9300EFB680648FB6E0687E08F60 +:10FB600006A7A5A30C92EDB30005C4D1FAF8068050 +:10FB70005800C1E01037C064FACCF978F8070037B4 +:10FB8000C1F8FAC8F9841AD8FAC8FAD00A9A1AD869 +:10FB9000FAC8FBCC1AD8FAC9FFCCFAC8F9740E9B84 +:10FBA000029CF01F020D2FDD781A7809C288ECC282 +:10FBB000FFFF1036C0A4FACBF978F6070037EEFA4B +:10FBC000FDA8EEF9FDA4C1B840A959F8E0890013D9 +:10FBD000F2CAFFF850AAFAC6F978721AEC08003B8C +:10FBE0007209F74AFDA8F749FDA42FF8FB480680E3 +:10FBF000C068F2C8FFF8721A50A87209049650093A +:10FC0000501ACD58EDB30004C441FAF806805800EC +:10FC1000C1D01037C064FACEF978FC070037C1E8CC +:10FC2000FAC8F9841AD8FAC8FAD00A9A1AD8FAC8BF +:10FC3000FBCC0E9B1AD8029CFAC8F974FAC9FFCC07 +:10FC4000F01F01E52FDD780AC218ECC2FFFF103665 +:10FC5000C084FACCF978F8070037EEFAFDA4C16841 +:10FC600040A959F8E0890010F2CAFFFC50AAFACB6B +:10FC7000F978720AF6080039F34AFDA42FF8FB4818 +:10FC80000680C048720A2FC950A90496501AC8D8D5 +:10FC9000EDB30006C481FAF806805800C1D01037D1 +:10FCA000C064FAC8F978F0070037C1E8FAC8F984E7 +:10FCB0001AD8FAC8FAD01AD8FAC8FBCC1AD8FAC897 +:10FCC000F974FAC9FFCC0A9A0E9B029CF01F01C27C +:10FCD0002FDD9818C238ECC2FFFF1036C084FAC678 +:10FCE000F978EC070037EF08FDA6C18840A959F85C +:10FCF000E0890012F2CAFFFC50AA7209FACEF97824 +:10FD0000FC08003A2FF8F549FDA4FB480680F1D91C +:10FD1000B010C04892182FC950A950180496BF5867 +:10FD20005008C458FAF806805800C1D01037C06493 +:10FD3000FACBF978F6070037C1E8FAC8F9841AD87F +:10FD4000FAC8FAD00A9A1AD8FAC8FBCC0E9B1AD86D +:10FD5000029CFAC8F974FAC9FFCCF01F019F2FDD8D +:10FD6000780AC218ECC2FFFF1036C084FACAF978CC +:10FD7000F4070037EEFAFDA4C16840A959F8E089FC +:10FD80000010F2CAFFFC50AAFAC6F978720AEC0811 +:10FD90000039F34AFDA42FF8FB480680C048720AD8 +:10FDA0002FC950A90496501ABF5A500AFAEA000007 +:10FDB000580A5C2BC0E43008FAEA00003009F00A67 +:10FDC000010AF20B014B32D8FAEB0000FB68068700 +:10FDD0003010E08F04E30C99EDB30005C471FAF81C +:10FDE00006805800C1D01037C064FACAF978F40709 +:10FDF0000037C1D8FAC8F9841AD8FAC8FAD00A9AD2 +:10FE00001AD8FAC8FBCC0E9B1AD8029CFAC8F9740F +:10FE1000FAC9FFCCF01F01702FDD780AC2082FF657 +:10FE20001039C084FAC9F978F2070037EEFAFDA458 +:10FE3000C16840A959F8E0890010F2CAFFFC50AA35 +:10FE4000FAC3F978720AE6080039F34AFDA42FF8DC +:10FE5000FB480680C048720A2FC950A94062049826 +:10FE60009512BF589508FE9FFC03EDB30004C441F2 +:10FE7000FAF806805800C1D01037C064FACEF9787D +:10FE8000FC070037C1D8FAC8F9841AD8FAC8FAD0E2 +:10FE90000A9A1AD8FAC8FBCC0E9B1AD8029CFAC848 +:10FEA000F974FAC9FFCCF01F014C2FDD780AC208A3 +:10FEB0002FF61039C084FACCF978F8070037EEFA3B +:10FEC000FDA4C16840A959F8E0890010F2CAFFFCFE +:10FED00050AAFACBF978720AF6080039F34AFDA461 +:10FEE0002FF8FB480680C048720A2FC950A9406904 +:10FEF0009509FE9FFBBDE2130040C440FAF806805E +:10FF00005800C1D01037C064FAC8F978F00700373C +:10FF1000C1D8FAC8F9841AD8FAC8FAD00A9A1AD8F5 +:10FF2000FAC8FBCC0E9B1AD8029CFAC8F974FAC91D +:10FF3000FFCCF01F01292FDD780AC2082FF61039F7 +:10FF4000C084FAC3F978E6070037EEFAFDA4C16869 +:10FF500040A959F8E0890010F2CAFFFC50AAFAC281 +:10FF6000F978720AE4080039F34AFDA42FF8FB4837 +:10FF70000680C048720A2FC950A9406EB40EFE9F79 +:10FF8000FB77FAF806805800C1D01037C064FACC6D +:10FF9000F978F8070037C1D8FAC8F9841AD8FAC82E +:10FFA000FAD00A9A1AD8FAC8FBCC0E9B1AD8029C2F +:10FFB000FAC8F974FAC9FFCCF01F01072FDD780ADF +:10FFC000C2082FF61039C084FACBF978F60700374B +:10FFD000EEFAFDA4C16840A959F8E0890010F2CA00 +:10FFE000FFFC50AAFAC3F978720AE6080039F34A0E +:10FFF000FDA42FF8FB480680C048720A2FC950A9FB +:02000004800377 +:1000000040629502FE9FFB34A5A30C99EDB3000559 +:10001000C571FAF806805800C2601037C0A4FACE45 +:10002000F978FC070037EEEAFDA4FAEB0000C1887E +:10003000FAC8F9841AD8FAC8FAD01AD8FAC8FBCC88 +:100040001AD8FAC8F974FAC9FFCC0A9A0E9B029C16 +:10005000F01F00E12FDDF8E80000FAE900003000B1 +:10006000E08F03992FF61039C0B4FAC8F978F00779 +:100070000037EEEAFDA4FAEB0000E08F038C40A904 +:1000800059F8E0890016F2CAFFF850AAF2EA000017 +:10009000FAEB0000FACAF978F4080039FAEA00002D +:1000A000F2EBFDA42FF8FB480680E08F0374F2EA20 +:1000B00000002F89FAEB000050A9E08F036CEDB32C +:1000C0000004C141FAF806805800C0801037C60409 +:1000D000FACAF978F4070037C7782FF61039C774D1 +:1000E000FAC9F978F2070037C6F8EDB30006C45133 +:1000F000FAF806805800C1D01037C064FACCF978FD +:10010000F8070037C1D8FAC8F9841AD8FAC8FAD063 +:100110001AD8FAC8FBCC1AD8FAC8F974FAC9FFCCB5 +:100120000A9A0E9B029CF01F00AC2FDD9818C22883 +:100130002FF61039C084FACBF978F6070037EF08AC +:10014000FDA6C18840A959F8E0890012F2CAFFFC57 +:1001500050AA7209FAC2F978E408003A2FF8F54972 +:10016000FDA4FB480680F1D9B010C04892182FC9F1 +:1001700050A95C785018C418FAF806805800C1D00D +:100180001037C064FACCF978F8070037C1D8FAC83C +:10019000F9841AD8FAC8FAD00A9A1AD8FAC8FBCC45 +:1001A0000E9B1AD8029CFAC8F974FAC9FFCCF01F4A +:1001B000008A2FDD780AC2082FF61039C084FACBE6 +:1001C000F978F6070037EEFAFDA4C16840A959F89E +:1001D000E0890010F2CAFFFC50AAFAC2F978720A4C +:1001E000E4080039F34AFDA42FF8FB480680C04814 +:1001F000720A2FC950A9501A300E500E1C90E08F71 +:1002000002CA505750420897408540740C99FAF83A +:1002100006805800C1D01037C064FACCF978F807CE +:100220000037C1D8FAC8F9841AD8FAC8FAD01AD84F +:10023000FAC8FBCC1AD8FAC9FFCCFAC8F9740A9AE2 +:100240000E9B029CF01F00642FDD7809C2182FF668 +:100250001039C084FACBF978F6070037EEF9FDA41F +:10026000C17840A959F8E0890010F2CAFFFC50AAF1 +:10027000FAC2F9787209E408003AF549FDA42FF8AA +:10028000FB480680C058F2C8FFFC50A8720933082A +:10029000300EFB6806844D1C37885019A1B3FB68EB +:1002A0000685500E509CE08F02755057300B50421F +:1002B000FB6B06870897408540740C99FAF8068016 +:1002C0005800C1D01037C064FACAF978F407003773 +:1002D000C1D8FAC8F9841AD8FAC8FAD01AD8FAC814 +:1002E000FBCC0E9B1AD80A9AFAC8F974FAC9FFCC4B +:1002F000029CF01F00392FDD7807C2082FF6103955 +:10030000C084FAC9F978F2070037EEF7FDA4C16896 +:1003100040A959F8E0890010F2CAFFFC50AA720700 +:10032000FAC2F978E4080039F347FDA42FF8FB4836 +:100330000680C04872072FC950A9403E580EC1051B +:100340001C9A300B0E9CF01F0026E08002B6F807C6 +:100350000105403C1835E08902B0E08F02AF0E9CE9 +:100360003000F01F00201895E08F02A9A5A30C997A +:10037000EDB30005C581FAF806805800C2001037B9 +:10038000C064FACBF978F6070037C208FAC8F984D6 +:100390001AD8FAC8FAD00A9A1AD80E9BFAC8FBCC17 +:1003A000029C1AD8FAC8F974FAC9FFCCF01F000AE7 +:1003B0002FDDF8EA0000FAEB0000C3282FF6103911 +:1003C000C124FACAF978F4070037EEE8FDA4FAE987 +:1003D0000000C2688002F2288003EDE4800328A4B4 +:1003E0008002EDD040A959F8E0890015F2CAFFF863 +:1003F00050AAF2EA0000FAEB0000FACAF978F40811 +:100400000039FAEA0000F2EBFDA42FF8FB48068061 +:10041000C078F2EA00002F89FAEB000050A93010F2 +:10042000E08F01B9EDB30004C141FAF8068058002D +:10043000C0801037C604FACAF978F4070037C778C5 +:100440002FF61039C774FAC9F978F2070037C6F8E1 +:10045000EDB30006C451FAF806805800C1D0103739 +:10046000C064FACCF978F8070037C1D8FAC8F98423 +:100470001AD8FAC8FAD01AD8FAC8FBCC1AD8FAC8CF +:10048000F974FAC9FFCC0A9A0E9B029CF01F0086F1 +:100490002FDD9818C2282FF61039C084FACBF978CE +:1004A000F6070037EF08FDA6C18840A959F8E08992 +:1004B0000012F2CAFFFC50AA7209FAC2F978E408E5 +:1004C000003A2FF8F549FDA4FB480680F1D9B01099 +:1004D000C04892182FC950A95C785018C418FAF86F +:1004E00006805800C1D01037C064FACCF978F807FC +:1004F0000037C1D8FAC8F9841AD8FAC8FAD00A9ACB +:100500001AD8FAC8FBCC0E9B1AD8029CFAC8F97408 +:10051000FAC9FFCCF01F00642FDD780AC2082FF65D +:100520001039C084FACBF978F6070037EEFAFDA44B +:10053000C16840A959F8E0890010F2CAFFFC50AA2E +:10054000FAC2F978720AE4080039F34AFDA42FF8D8 +:10055000FB480680C048720A2FC950A9501A300EB5 +:100560003010500EC1794D1C509CEDB30005C541B3 +:10057000FAF806805800C2201037C0A4FACBF978E8 +:10058000F6070037EEE8FDA4FAE90000CF28FAC824 +:10059000F9841AD8FAC8FAD00A9A1AD80E9BFAC85F +:1005A000FBCC029C1AD8FAC8F974FAC9FFCCF01F28 +:1005B000003E2FDDF8EA0000C0C8ECCAFFFF10368D +:1005C000C0B4FAC9F9781496F2070037EEEAFDA430 +:1005D000FAEB0000CCE840A959F8E0890016F2E6F1 +:1005E0000000F2CBFFF8FAE7000050ABFAC6F9784A +:1005F000EC080039FAE60000F2E7FDA42FF81496A3 +:10060000FB480680CB68F2E600002F89FAE700007D +:1006100050A91496CAE8EDB30004C161FAF8068047 +:100620005800C0801037C6A4FACEF978FC0700370E +:10063000C838ECCAFFFF1036E0840082FACCF978A3 +:10064000F8070037C788EDB30006C4D1FAF8068072 +:100650005800C1D01037C064FACCF978F8070037D9 +:10066000C1F8FAC8F9841AD8FAC8FAD01AD8FAC860 +:10067000FBCC1AD8FAC8F974FAC9FFCC0A9A0E9BB7 +:10068000029CF01F00092FDD9818C2A8ECCAFFFFDA +:100690001036C0D4FACBF9781496F6070037EF0875 +:1006A000FDA6C1E88002F2288003EDE440A959F8D4 +:1006B000E0890013F2CBFFFC50AB7209FAC6F9785F +:1006C000EC08003B2FF8F749FDA4FB480680149680 +:1006D000F1D9B010C058921814962FC950A95C785F +:1006E0005018C458FAF806805800C1D01037C064BA +:1006F000FACCF978F8070037C1F8FAC8F9841AD8A3 +:10070000FAC8FAD00E9B1AD8FAC8FBCC0A9A1AD8A3 +:10071000029CFAC8F974FAC9FFCCF01F00C42FDD9F +:10072000780BC248ECCAFFFF1036C094FACBF978B8 +:10073000F60700371496EEFBFDA4C18840A959F8CE +:10074000E0890011F2CBFFFC50ABFAC6F978720BCE +:10075000EC080039F34BFDA42FF81496FB480680F3 +:10076000C058720B14962FC950A9501B300E500E52 +:100770004008401C300B18485F18E7E80008F608EE +:100780001800C0703308FB620685A1B3FB680684BD +:100790003020300AFB6A068740395809C025A7D3A4 +:1007A0004038401758085F194008FAC5F9900E48BC +:1007B00030025F18F3E81008E4081800C5E03018AC +:1007C000F0001800C0603028F0001800C051C3E8E5 +:1007D0000A970690C2C80A97FAE80000F5D8C00345 +:1007E0002D0A0EFAF00B1603F20C1603F7E911DBD3 +:1007F0001899169858085C29CF21FAE90000EDB342 +:100800000000C4613309F20A1800C4200EF9C408BC +:10081000F01F008730A82D0A3009AE8AFAEA0000DE +:10082000F01F008416991498FAE90000EECC00013C +:1008300030A83009FAEA00001897589A5C2BFE9B02 +:10084000FFE91BF800932D08C2080A97FAE8000098 +:10085000F5D8C004409EFC0A070A0EFAF20B1604F3 +:10086000F00A1604F5E911CA1699149858085C297B +:10087000CF01FAE90000C0C85800C091EDB30000F4 +:10088000C061FAC7F9913308AE88C0280A970E15DF +:100890004030C14850425057407410925802E08096 +:1008A00001B6300CFB620648FB6C06873015300041 +:1008B000FAC7F9B8C03840353000069A0699E21AEE +:1008C0000002E2190084508A5079EA000C42FB3899 +:1008D0000687300BF6081800F7B201FF580AF7B286 +:1008E00001FE5809C4514048041850385808E0899E +:1008F000001DC3E8FB4C06784CFE310C890E891CA8 +:10090000FB4B0674587BE08900042F84C0B8FACAF8 +:10091000F990402B029CF01F0049E0810189FAC444 +:10092000F9F8403B210B503BFAF90678FAF80674C7 +:10093000F2CCFFF0F0CBFFFF4BFA403E590EFE9990 +:10094000FFDB1C09890AFB490678891EFB4B0674EC +:10095000587BE08900042F84C0B8FACAF990402B74 +:10096000029CF01F0036E0810163FAC4F9F8FB38FD +:100970000687300CF8081800C1F0FAF80678FAC9B2 +:10098000F9792FF88909FB4806783019FAF80674C6 +:1009900089192FF8FB4806745878E08900042F84E1 +:1009A000C0B8FACAF990402B029CF01F0024E081E5 +:1009B000013FFAC4F9F8408B580BC1F0FAF80678F9 +:1009C000FAC9F97C2FE88909FB4806783029FAF83A +:1009D000067489192FF8FB4806745878E0890004DA +:1009E0002F84C0B8FACAF990402B029CF01F001364 +:1009F000E081011EFAC4F9F8407AE04A0080C5118E +:100A00004049041950395809E0890029C4A848C848 +:100A1000310EFB4C06788908891EFB4B0674587B07 +:100A2000E08900102F84C1788002F228800373408F +:100A30008002D9988003EDF88002F5488003ECE845 +:100A4000FACAF990402B029CF01F0052E08100F09E +:100A5000FAC4F9F8403C210C503CFAF90678FAF84F +:100A60000674F2CCFFF0F0CBFFFF4CBA403E590EBB +:100A7000FE99FFCF1C09890AFB490678891EFB4BAA +:100A80000674587BE08900042F84C0B8FACAF99034 +:100A9000402B029CF01F003FE08100CAFAC4F9F825 +:100AA0000A105800E089001BC3B8FB4C0678310AD5 +:100AB0004B9C891A890CFB4B0674587BE089000417 +:100AC0002F84C0B8FACAF990402B029CF01F003165 +:100AD000E08100AEFAC4F9F82100FAF90678FAF8D4 +:100AE0000674F2CCFFF0F0CBFFFF4ABA5900FE9932 +:100AF000FFDE0009890AFB4906788910FB4B067462 +:100B0000587BE08900042F84C0B8FACAF990402BC2 +:100B1000029CF01F0020E081008BFAC4F9F8FAF87B +:100B2000067889158907F0050005FAF80674FB4573 +:100B300006782FF8FB4806745878E08900042F8463 +:100B4000C0A8FACAF990402B029CF01F0012C6F10F +:100B5000FAC4F9F8E2130004C41040470417580718 +:100B6000E089001CC3B8FB4C067889058913FB4B50 +:100B70000674587BE08900042F84C098009A402BAB +:100B8000029CF01F0004C531FAC4F9F82107C0988F +:100B90008002F5488003ECE84AB53103FAC0F990C9 +:100BA000FAF90678FAF80674F2CCFFF0F0CBFFFF02 +:100BB0004A5A5907FE99FFD90E09890A8917FB4934 +:100BC0000678FB4B0674587BE08A0009FACAF99054 +:100BD000402B029CF01F001DC2A140684049E4095F +:100BE0000C4204085068FAF806785808C080FACA1F +:100BF000F990402B029CF01F0015C1913003FAC4FC +:100C0000F9F8FB430674FE9FF53302934020FAF88F +:100C100006785808C080029CFACAF990009BF01F21 +:100C2000000BC0613008FB480674C0284020806873 +:100C3000EDB80006C0313FF25062406CFE3DF978DD +:100C4000D83200008003EDF88002F548D431FACDA7 +:100C500001E03007503C16961295507A5087505755 +:100C60000E930E905047407E1D8957795809E080B9 +:100C700007A22FFE4D5C507E780C502CF809070817 +:100C8000E2180008C1B06C185808E08900070C9BF6 +:100C9000403CF01F004FCE816C084CCBF0C9FFFFE9 +:100CA000760A1188F4080708EDB80003CDD16C1856 +:100CB0008D0920182FF08D18CE7BE0490025E081AA +:100CC000008906941091109236CA344C358E407BC0 +:100CD0001739507B364BF6091800E08000BBE08BDB +:100CE0000042F8091800E08000B4E08B0021339B3B +:100CF000F6091800E08B01D2330BF6091800E082E8 +:100D00000094325BF6091800C640E08B000B5809CE +:100D1000E080074F324BF6091800E08101BFC8A8F8 +:100D200032ABF6091800E08101B9C6D8FC091800F9 +:100D3000E08000A4E08B000C34CBF6091800C7005B +:100D400034FAF4091800E08101A9C8C835BAF409D9 +:100D50001800E0800098363AF4091800E081019EFE +:100D6000C9E836FBF6091800C7E0E08B0017369B90 +:100D7000F6091800C720E08B0008368BF60918002A +:100D8000E081018CC4F8F4091800C3F036EAF409D4 +:100D90001800E0810183C8D8373AF4091800C1303F +:100DA000E08B0008370AF4091800E0810177C7A832 +:100DB000375AF4091800C5C0378AF4091800E081D1 +:100DC000016DC5B83029C7590000049C800328BCB8 +:100DD0006C185808E08900080C9B403CF01F006428 +:100DE000E08106E0407A6C08F539FFFF118AF20ACB +:100DF0001800E08106E02FF82FF08D086C182018FD +:100E00008D18C32BA5A1C64B407B1789F409180088 +:100E1000C0512FFBA1B1507BC5BBA1A1C59BA1B106 +:100E2000C57BA3A1C55BE4020022A17223021202CA +:100E3000C4FBE0420020E08B0007E4C4000130184E +:100E40003002C46B3168403A9538E08F06ABA1A1FF +:100E50004C8930AE5089C2B84C6C300B508C505B12 +:100E6000C279A1A14C4A3089508A5059C2194C2EDE +:100E700030AC508E505CC1C94BFBA9B1508B310ACC +:100E8000C169301950085019407BFACCFFD4F01FCB +:100E9000003BA7A1507C40194008C0B9A7A1300968 +:100EA000C0894B59E81102205089310E505EC009AB +:100EB000EDB10004FE90FED9EDB10002C441580826 +:100EC000C2500E34C064FACCFE20F8040024C2786C +:100ED000FACAFED40A99F407002A0E98130B14AB31 +:100EE0002FF81034CFC4EEC9FFFFEE0811FFF0C792 +:100EF000FFFF2FE808080807EA080025F2070007A7 +:100F0000FAC8FED4F0040324C1C8E6C8FFFF0E33BC +:100F1000C094FACBFE201093F6040024E8F4FF4CB2 +:100F2000C1086A042FC559F7E089000B1093FACA6B +:100F3000FE20F40700282FF7F144FF4CC02810933F +:100F4000A800C92AEDB10000C1A15808E0800088BE +:100F50000E34C635FACAFED40A99F407002A0E9850 +:100F6000130B14AB2FF81034CFC4C678800328BC01 +:100F70008002EFB480032E6C800329ECE2110002A2 +:100F8000C4805808C2500E34C064FACCFE20F80465 +:100F90000024C278FACAFED40A99F407002A0E98EF +:100FA000130B14AB2FF81034CFC4EEC9FFFFEE08BB +:100FB00011FFF0C7FFFF2FE808080807EA0800251F +:100FC000F2070007FAC8FED4F0040324C1C8E6C83B +:100FD000FFFF0E33C094FACBFE201093F6040024DA +:100FE000E8F4FF4CC1086A042FC559F7E089000BEB +:100FF0001093FACAFE20F40700282FF7F144FF4CA3 +:10100000C0281093E008141F89108908FE9FFE2D48 +:101010005808C2500E34C064FAC9FE20F2040024FD +:10102000C278FACAFED40A99F407002A0E98130B64 +:1010300014AB2FF81034CFC4EEC9FFFFEE0811FF38 +:10104000F0C7FFFF2FE808080807EA080025F207A5 +:101050000007FAC8FED4F0040324C1C8E6C8FFFFA5 +:101060000E33C094FAC2FE201093E4040024E8F486 +:10107000FF4CC1086A042FC559F7E089000B109393 +:10108000FACEFE20FC0700282FF7F144FF4CC028C1 +:1010900010938900FE9FFDE9402CF8090709EDB97E +:1010A0000000C021A1A14C7B30AA508B505A30398E +:1010B0006C1A580AE089000C501950080C9B403CEF +:1010C000F01F004140194008E081056CEDB10006B9 +:1010D000C151C1F86C1A201A8D1A580AE08A00040E +:1010E0008D0CC0B8501950080C9B403CF01F0036C6 +:1010F00040194008E08105562FF06C0A4B3EF4CCB5 +:10110000FFFF7C0B158AF60A070AEDBA0003CE3002 +:101110005829E08001C05839E080031D5819E0804B +:10112000011B029CE21C0010502C5802F9B2000175 +:10113000E3D1C001E080009B580CC0303001C4985E +:101140005808C2500E34C064FACBFE20F6040024C6 +:10115000C278FACAFED40A99F407002A0E98130B33 +:1011600014AB2FF81034CFC4EEC9FFFFEE0811FF07 +:10117000F0C7FFFF2FE808080807EA080025F20774 +:101180000007FAC8FED4F0040324C228E6C8FFFF13 +:101190000E33C094FACAFE201093F4040024E8F43D +:1011A000FF4CC1686A042FC559F7E08900111093FC +:1011B000FAC9FE20F20700282FF7F144FF4CC0883F +:1011C0008002EFB4800328BC0000049C10930891B7 +:1011D00030044D5E7C081034E08004E46C08118912 +:1011E000FAC8FE200808F169FFCC6C1820188D1889 +:1011F0006C082FF8308A8D08300BFACCFE2CF01FCB +:10120000004B2FF4FAC8FE2C0899FACAFE54029B30 +:10121000403CF01F00475BFCE08004C4580CC061F8 +:10122000402C580CC051830CC0385BECC0B0080097 +:10123000402B2012580BF9B40100F7B100FCFBF46D +:1012400000026C185808E089000B0C9B403CF01F12 +:101250000039C0505804C050E08F04A45802CBA1FC +:10126000402A580AFE91FD01C718402E580EC1A011 +:101270006C186C090438C0F4100910128D091001A3 +:101280000C9B403CF01F002BCF405801E08101E651 +:10129000E08F0488040904188D098D180401E08F7B +:1012A00001DD5808C2500E34C064FACCFE20F804A8 +:1012B0000024C278FACAFED40A99F407002A0E98CC +:1012C000130B14AB2FF81034CFC4EEC9FFFFEE0898 +:1012D00011FFF0C7FFFF2FE808080807EA080025FC +:1012E000F2070007FAC8FED4F0040324C258E6C887 +:1012F000FFFF0E33C094FACBFE201093F6040024B7 +:10130000E8F4FF4CC1986A042FC559F7E08900142E +:101310001093FACAFE20F40700282FF7F144FF4C7F +:10132000C0B80000000009AC8002E8BC800328407F +:10133000800328BC1093049A089C0C99301BF01F62 +:1013400000C9E080042FF800000040492FF95049FF +:10135000FE9FFC8B5802F9B200FFEDB10004C261A0 +:1013600030040891C1286C188D0920188D182FF4AD +:101370000832E080008D5808E08900080C9B403C52 +:10138000F01F00B9E08100846C08FACEFE20F0C99D +:10139000FFFF1188FC080008F138FE4CE208180035 +:1013A000CE315804C741E08F04065808C2500E34AD +:1013B000C064FACCFE20F8040024C278FACAFED435 +:1013C0000A99F407002A0E98130B14AB2FF8103467 +:1013D000CFC4EEC9FFFFEE0811FFF0C7FFFF2FE8F3 +:1013E00008080807EA080025F2070007FAC8FED433 +:1013F000F0040324C1C8E6C8FFFF0E33C094FACB43 +:10140000FE201093F6040024E8F4FF4CC1086A049F +:101410002FC559F7E089000B1093FACAFE20F40794 +:1014200000282FF7F144FF4CC02810930891300892 +:10143000C1886C1A201A8D1A133A02CA8D095802F3 +:10144000C1D06C195809E089000D50080C9B403C34 +:10145000F01F00854008C0500831C101E08F03A291 +:101460006C0AFACEFE2014992012158AFC0A000A92 +:10147000F53AFE4CF00A1800CDD1E2040104E080F8 +:10148000039A404C2FFC504C3008A2880800FE9F65 +:10149000FBEC029BE21B0010502B5802F9B200FF3C +:1014A000E3D1C001E08000BC580BC050FACAFE2452 +:1014B000506AC4385808C2500E34C064FAC9FE20BD +:1014C000F2040024C278FACAFED40A99F407002A6A +:1014D0000E98130B14AB2FF81034CFC4EEC9FFFFD6 +:1014E000EE0811FFF0C7FFFF2FE808080807EA0819 +:1014F0000025F2070007FAC8FED4F0040324C1C88F +:10150000E6C8FFFF0E33C094FACEFE201093FC0411 +:101510000024E8F4FF4CC1086A042FC559F7E0899C +:10152000000B1093FACCFE20F80700282FF7F144A7 +:10153000FF4CC0281093506430014CC4C598680813 +:101540001031E080032FFAC8FE200208F169FFCCB9 +:101550006C1820188D186C082FF8308A8D08300B05 +:10156000FACCFE2CF01F00422FF1FAC8FE2C029993 +:10157000FACAFE54406B403CF01F003E5BFCE0802A +:101580000311580CC041406B970CC0385BECC23063 +:10159000406A740CF01F0038C100FAC4FE20020437 +:1015A0002354C088098B201120140C9A403CF01F52 +:1015B00000335801CF81C2C80200402920125809C7 +:1015C000F8011710FBF80006F7B800FCFBF80A0654 +:1015D000FBF100026C185808E089000B0C9B403CA2 +:1015E000F01F0021C0505801E08102DCC1186C08D6 +:1015F00058025F1A11894A2E300C7C08F00907083E +:10160000EC180008F5E80238F8081800C991402BDA +:10161000580BFE91FB2A406A950BC98A402E580E42 +:10162000C300C1086C188D0A20188D182FF10232E2 +:10163000C1405808E08900070C9B403CF01F000A9D +:10164000C0C16C0848ECF0CAFFFF78091188F208A5 +:101650000708EDB80003CE710200FE9FFB060000F4 +:10166000800320B8800328BC000009AC8002E8BCDD +:10167000800328408003274880032FF40000049C47 +:101680005808C2500E34C064FACBFE20F604002481 +:10169000C278FACAFED40A99F407002A0E98130BEE +:1016A00014AB2FF81034CFC4EEC9FFFFEE0811FFC2 +:1016B000F0C7FFFF2FE808080807EA080025F2072F +:1016C0000007FAC8FED4F0040324C1C8E6C8FFFF2F +:1016D0000E33C094FACAFE201093F4040024E8F4F8 +:1016E000FF4CC1086A042FC559F7E089000B10931D +:1016F000FAC9FE20F20700282FF7F144FF4CC0285A +:1017000010930891C1286C1920198D19113902C93B +:101710008D085802C1506C185808E08900070C9BCE +:10172000403CF01F0059C0C16C094D8E12987C0AD4 +:1017300013892012F4090709EDB90003CE51404C7A +:101740002FFC504C08103008E2000000A288FE9FD9 +:10175000FA8CE4C90001E0490026E08B0005300B5B +:10176000506BC058E4CA00273272506A3009FACE72 +:10177000FE54509950A7E8110D80502E35894057DE +:101780006C0A339C158AF80A1800E08B0015338B1D +:10179000F60A1800C4E2330BF60A1800C270E08B98 +:1017A000004532BBF60A1800C51032DBF60A1800F5 +:1017B000C7C1C4C8F20A1800C4E0E08B000AF4CB29 +:1017C0000041305EFC0B1800E08B0070C398361CA3 +:1017D000F80A1800C6A3366BF60A1800E088003134 +:1017E000378EFC0A1800C611C368029BEDB1000BCE +:1017F000C3C15807E06B0200E3DBE031F9B7000832 +:10180000EDB1000AC041E011FA7FC2F8409B406C84 +:101810002FFB580CF7BC0101FBFC1A06F7B201FFC5 +:10182000E011FC7F509BC248499EFC070417C0B8DA +:10183000497CF80704175887E0890006C36858A751 +:10184000E08A0034E011F47FC108EDB10007C2D195 +:10185000A7D1C0B8029BE21B0600E04B0200C251B8 +:10186000A9D13107E8110500402B16CA502B6C1A7C +:10187000201A8D1A580AE08A000D6C0A2FFA8D0A78 +:10188000C1180000800328BC0000049C8003EF08FE +:10189000501950080C9B403CF01F00BD40194008F7 +:1018A000C0412012FE91FF6E505740A7EDB10008D5 +:1018B000C161FAC9FE54402A123AE088000B40295F +:1018C0000C9A137B403C50085029F01F00B240088E +:1018D000FAC9FE5440221232E080016D029AE21AE7 +:1018E0000010E081014B402EBC8A50084059FACBD1 +:1018F000FE54403C40825D1202994008E2190020EB +:10190000C2A05808C1400E34C064FACEFE20FC04C8 +:101910000024C1D9FACAFED40A99F407002A0E9805 +:10192000130B14AB2FF81034CFC4CF68E6C8FFFFF9 +:101930000E33C064FACBFE20F6040024C0796A049A +:101940002FC559F7E08901151093FACAFE20F40754 +:101950000028C0A9EDB10002C4415808C2500E349D +:10196000C064FAC9FE20F2040024C278FACAFED488 +:101970000A99F407002A0E98130B14AB2FF81034B1 +:10198000CFC4EEC9FFFFEE0811FFF0C7FFFF2FE83D +:1019900008080807EA080025F2070007FAC8FED47D +:1019A000F0040324C1C8E6C8FFFF0E33C094FAC296 +:1019B000FE201093E4040024E8F4FF4CC1086A04FC +:1019C0002FC559F7E089000B1093FACEFE20FC07D3 +:1019D00000282FF7F144FF4CC0281093A80CCCA886 +:1019E000F5D1C001C2A05808C1400E34C064FACB82 +:1019F000FE20F6040024CAB8FACAFED40A99F407F5 +:101A0000002A0E98130B14AB2FF81034CFC4C8481B +:101A1000E6C8FFFF0E33C064FACAFE20F4040024B7 +:101A2000C9586A042FC559F7E08900A31093FAC971 +:101A3000FE20F2070028C988E2110002C5904D6916 +:101A400040821232C091FACBFE544059403C5008BB +:101A5000F01F0052C088FACBFE544059403C500859 +:101A6000F01F004F40085808C2500E34C064FACE30 +:101A7000FE20FC040024C278FACCFED40A99F807B0 +:101A8000002C0E98130E18AE2FF81034CFC4EEC9E8 +:101A9000FFFFEE0811FFF0C7FFFF2FE80808080757 +:101AA000EA080025F2070007FAC8FED4F004032470 +:101AB000C1C8E6C8FFFF0E33C094FACCFE201093D5 +:101AC000F8040024E8F4FF4CC1086A042FC559F754 +:101AD000E089000B1093FAC9FE20F20700282FF7C7 +:101AE000F144FF4CC0281093891A890BC438580858 +:101AF000C2500E34C064FAC8FE20F0040024C2783C +:101B0000FACAFED40A99F407002A0E98130B14ABF4 +:101B10002FF81034CFC4EEC9FFFFEE0811FFF0C755 +:101B2000FFFF2FE808080807EA080025F20700076A +:101B3000FAC8FED4F0040324C1C8E6C8FFFF0E3380 +:101B4000C094FAC2FE20E40400241093E8F4FF4C91 +:101B5000C1086A042FC559F7E089000B1093FACE2B +:101B6000FE20FC070028F144FF4C2FF7C0281093FB +:101B7000890C404C2FFC504CFAC8FE54409B10106E +:101B8000402A1600F4000000FE9FF86F800328BC76 +:101B900080032FF480032E6C80032CE480032B340D +:101BA00040495809C0508C68EDB80006C0313FF874 +:101BB0005048404C288DD832D421217D1497189656 +:101BC000129A5807C064E068008B99383FFCC2281D +:101BD0005807EE0C1700F9B901FFEFD9E10C109985 +:101BE000E0680208BA683FF8504B505C500B502C2C +:101BF000BA781A9B0C9CF01F00095BFCC044E0689B +:101C0000008B8D385807F9B90100FBF81000F1F985 +:101C10001E002E9DD82200008002F568D401129883 +:101C20001499169A189B483C780CF01F0003D802B0 +:101C30000000059880031BB8D4214B3818961697DE +:101C4000700C580CC06078685808C031F01F002F25 +:101C50004AF81037C0514AC870087007C0E84AD81F +:101C60001037C0514A8870087017C0784AA81037DA +:101C7000C0414A58700870278E68EDB80003C1E073 +:101C8000EDB80004C3E1EDB80002C1516EDB580BA2 +:101C9000C0A0EEC8FFBC103BC0400C9CF01F001F52 +:101CA00030088FD88E68E018FFDBAE6830088F18D8 +:101CB0006E488F088E68A3B8AE686E485808C0B1E9 +:101CC0008E68E2180280E0480200C0500C9C0E9B17 +:101CD000F01F00138E69F1D9C001C07030088F2841 +:101CE0006E585C388F68C068EDB90001EFF81005D8 +:101CF0008F286E485808C0618E68EDB80007C02173 +:101D0000DC2AD82A0000059880031F388003EF2CB6 +:101D10008003EF4C8003EF6C8003217C8003276CF1 +:101D20004828700C2F4C5EFC00000598D4211697B3 +:101D3000189676485808C7D0580CC060786858087C +:101D4000C031F01F003D4BD81037C0316C07C0A820 +:101D50004BB81037C0316C17C0584BA81037EDF78F +:101D600000028E6A1498EDBA0003C420ABBAAE6AC2 +:101D70006E185808E08900066F085808E08A005A73 +:101D80006EB85808C560E21A1000C0306F55C0F830 +:101D900030196E8B0C9C5D1818955BFCC0816C38FB +:101DA00059D8C4708E68A7A8AE68D8228E68EDB8DE +:101DB0000002C0916E1810156ED85808EFF8101078 +:101DC000EBD8E1156EB80C9C30090A9A6E8B5D1841 +:101DD0008E680A3CC261ABD8300C6E49AE688F1C6D +:101DE0008F09EDB8000CC251EF450054D8226E4562 +:101DF0005805C1F06E04F5DAC0028F05F9B801008C +:101E0000EFF800050A148F28C11808990A9A6EA8DD +:101E10006E8B0C9C5D181814580CE08900078E68B6 +:101E2000A7A83FFCAE68D82218055804FE99FFEF1A +:101E3000D82A000080031F388003EF2C8003EF4C6A +:101E40008003EF6CD401189B580CC0714868487B24 +:101E5000700CF01F0007D8024868700CF01F0003D8 +:101E6000D80200008003ECA880031D2C800325E825 +:101E7000000005985EFC5EFCD401483BF01F0003A7 +:101E8000D80200008003629080032640D42116957A +:101E9000F606105CECCBFFF4F01F00071897C0901B +:101EA0009915300B2F4C0C9A8F2C8F0BF01F0003C1 +:101EB0000E9CD8228002E2BC8002E8BCD42149C832 +:101EC000189670076E685808C0410E9CF01F0019E4 +:101ED000EEC7FF2830056E2C6E18C0689869EA09B5 +:101EE0001900C1202A4C2018CFA76E085808C071CD +:101EF000304B0C9CF01F00108F0CC0306E07CECB07 +:101F000030C88D38D8223008F948004C99089928F3 +:101F1000991899489958996899D899E8F9480048C2 +:101F20003FF8B8783018B868D82200008003ECA8D1 +:101F300080031F3880031E8CD421189678675807B9 +:101F4000C4714A48301599A8F94700D8F94700DC10 +:101F5000F94700E09965F01F00208D0C0C9CF01FE4 +:101F6000001E8D1C0C9CF01F001C6C093048930750 +:101F7000B268931793276C18B27793479357936778 +:101F80009389910791179127494E495B939E93AB93 +:101F9000494A495493BA93C43099B069B07591C411 +:101FA0009147915791679188919E91AB91BA8D2CF1 +:101FB00031289907B868991799273028B87899C4B3 +:101FC0009967999E99AB99BA99479957998CD82254 +:101FD00080031E7880031EBC80032B1080032AD848 +:101FE00080032AAC80032A9CD4014858169AFAC967 +:101FF000FFFC189B700CF01F0003D802000005982E +:1020000080033424D43114901291169310971895AC +:10201000F20A02425802C0310491C418580CC06040 +:1020200078685808C031F01F001F49F81037C031D8 +:102030006A07C0A849D81037C0316A17C05849C8C4 +:102040001037EBF700026E185808C03430088F18AC +:102050000496C148F01F00176E08080308160E9B6F +:10206000F00400040A9C8F04F01F0013C070E40603 +:102070000109F2000D081091C1286E146E08069C2B +:10208000089A109B0836FE9BFFE70C9AF01F000988 +:102090006E080C088F086E180C188F18029CD83226 +:1020A00080031F388003EF2C8003EF4C8003EF6C1C +:1020B0008002E736800328BCD40112981499169A3E +:1020C000189B483C780CF01F0003D80200000598CC +:1020D00080032004D42116951897F01F00234A345A +:1020E00068287016E016FFFCECC8FF91F0050105AA +:1020F000E015FF80EAC50080E045007FE08A00230C +:10210000300B0E9CF01F001A68280C08103CC1A16F +:10211000EA0B11000E9CF01F00165BFCC171300B26 +:102120000E9CF01F00136828F808010958F9E08A8E +:10213000000AA1A9911948F8700948F8F80901099D +:1021400091090E9CF01F000DD82A68280A16A1A636 +:102150009116489870090A190E9C9109F01F000702 +:10216000DA2A00008002E8CA0000059C8002EBC861 +:10217000000009A800007AD08002E8CCD42116968D +:102180001897580BE08000CAF01F004E20864CEADA +:102190006C18742EF9D8C001A1C8EC080009721B94 +:1021A000E01BFFFC1C39C1D1F6080008580CC081A7 +:1021B0006C09121612086C3B6C299729933B1099F5 +:1021C0009526A1A98D194C1972091238C0634C08C3 +:1021D0000E9C700BF01F003F0E9CF01F003FD8229A +:1021E000931B580CC030300CC1086C0EF4C5FFF8BE +:1021F0001C161C086C2E0A3EF9BC0001EDF51003FC +:10220000EBFE1A02FDF51A03F20B000E7C1EEDBE6A +:102210000000C1301608580CC0C14ABE722B2F8E68 +:102220001C3BC071973697268D2B8D3B301CC058B8 +:10223000722B7239932B97391099EC080908A1A9D0 +:102240008D19580CC671E04801FFE08B0013A3986C +:10225000F4080039722B8D398D2B97369326A348BD +:102260007419301BF6080948F3E810089518C528BA +:10227000F00916095849E08B0006F00B16062C8B66 +:10228000C2D85949E08B0005F2CBFFA5C278E049DE +:102290000054E08B0006F00B160C292BC1F8E04926 +:1022A0000154E08B0006F00B160F289BC178F00B51 +:1022B0001612E0490554E088001137EBC0F8000021 +:1022C0008002E8CA0000059C000009A400007ACC46 +:1022D000800320D48002E8CC284BF40B003C782902 +:1022E0001839C0E17418A34B301CF80B094BF1EB03 +:1022F000100B1298951BC0A872291839C060721A69 +:10230000E01AFFFC1438CF9372388D388D2993363C +:1023100091260E9CF01F0002D82200008002E8CC1B +:10232000D431203D14941895169774285808E080ED +:10233000014A9668EDB80003C04176485808C0C10C +:102340000E9B0A9CF01F00A1C0708E68A7A8AE6803 +:1023500030988B38C3598E6368000696E2160002E7 +:10236000C2103003E06204000696C04860036016A5 +:102370002F805806CFC0E0460400EC091780E4091E +:1023800017B0069A6EA86E8B0A9C5D181816580C2A +:10239000E08A0114682818188928E08001141803BD +:1023A000CE9BE7D3C001C07050060C930C91501522 +:1023B0000892CA0806960891C048600360162F80EC +:1023C0005806CFC08E686E241099E2190200C570BD +:1023D0000836C4531099E2190480C4106E4B6E097C +:1023E000161950096E59109CF209001A3028F40889 +:1023F0000C08FAE9000410944009E21C04002FF9CB +:102400000C091238F2041730580CC110089B0A9CB2 +:10241000F01F006F1892C150400A6E4BF01F006D04 +:102420008E68E018FB7FA7B8AE68C0E8089A0A9CDF +:10243000F01F00691892C0816E4B0A9CF01F006764 +:1024400030C88B38CBA8400A4009E80A010AE409E1 +:1024500000088F548F2A8F088F420C940836EC04A2 +:102460001730069B089A6E0CF01F005D6E08080876 +:102470008F086E2808180C948F28C30808365FBA96 +:102480006E0C6E48103C5FB8F5E80008F2081800C2 +:10249000C0E0069B089AF01F00526E0808080E9BC9 +:1024A0008F080A9CF01F004FC190C8786E591236F1 +:1024B000C0A36EA8069A6E8B0A9C5D181894E089DA +:1024C000000EC7B80C9A069BF01F00456E080C085A +:1024D0000C948F086E280C188F28622808188328FF +:1024E000C71008160803C6DB6003601130082F8090 +:1024F00050085801CFA0400A580AC181029A30AB57 +:10250000069CF01F0039F9B80101F9D8E106EDD3B6 +:10251000E116F9B90101FBF91A00F9B80001E3D895 +:10252000E006F9B80001FBF80A000236EC04178057 +:10253000E20417B06E596E25F20500050A345F9A61 +:102540006E0C6E48103C5FB8F5E80008300AF408DD +:102550001800C0E0069B0A9AF01F00216E080A08C6 +:102560000E9B8F08401CF01F001FC180C2681234F0 +:10257000C0A56EA8069A6E8B401C5D181895E08960 +:10258000000EC1B8089A069BF01F00156E080808D7 +:1025900008958F086E2808188F280A16C0710E9BA0 +:1025A000401CF01F0010C091500664280A188528AE +:1025B000C0900A110A03C9EB8E68A7A8AE683FFC59 +:1025C000C028300C2FDDD83280031C388002E2BCDA +:1025D0008002E7368002E8E88003217C8002E87E02 +:1025E00080031D2C800328A4D43130051893169045 +:1025F0000A91F01F00123FF2E6C7FF28C1786E264D +:102600006E142F46C0D88C08E2081900C0808C18C0 +:10261000E4081900C040069C5D1018452A462014A5 +:10262000ECCB000C5804CF046E075807CE91F01F76 +:1026300000040A9CD832000080031E7480031E76BA +:10264000D43130051691F8C7FF280A92F01F001008 +:102650003FF3C1686E266E142F46C0C88C08E4088C +:102660001900C0708C18E6081900C0305D111845BB +:102670002A462014ECCC000C5804CF146E075807DF +:10268000CEA1F01F00040A9CD832000080031E7403 +:1026900080031E76D401201D4848189B1A9A700C9E +:1026A000F01F00032FFDD80200000598800326B01C +:1026B000D431169414921895F01F00204A08700720 +:1026C0005807C050300633DA0C98C0780A9CF01FC7 +:1026D000001D0E9CD8322FF6E8060709F0091800F5 +:1026E0005F1BF40918005F191669F0091800CF4143 +:1026F000C1A8029C0C9A089BF01F0013C1216E0117 +:102700000C010388E6081800C0C148D870080A9C6C +:102710001017A3478507F01F000BE2CCFFFFD8324C +:102720002FC7C02833D36E015801CE410A9CF01F39 +:102730000005029CD8320000800361BC000009B093 +:10274000800361BE8002EDE6E04C00FFE0880003FC +:102750005EFD48487008F00C070CE21C00085EFCA7 +:102760000000049C481C5EFC8003EF8CD42120FDFB +:10277000966816971896E2180002C3C1967BF00B74 +:102780001900C0551A9AF01F002AC0F48E650A98E5 +:10279000ABB8E2150080AE683004E0680400F9B51B +:1027A0000140F0051700C1B84018E218F000E048F9 +:1027B00020005F04E0488000C0D16EB949D81039CC +:1027C000C0918E68E0650400ABA8EF450050AE688C +:1027D000C0688E68E0650400ABB8AE680A9B0C9CCC +:1027E000F01F00158E68C0D1EDB80009C1E0A1B896 +:1027F000AE68EEC8FFB98F488F0830188F58C1589F +:10280000A7B88F4CAE688F5548C88F0C8DA8580458 +:10281000C0C08E7CF01F000AEFF81206F9B9010162 +:10282000F1D9E138EFF81C062F1DD822800362A8E9 +:1028300080032AAC8002E2BC80031E788002F1682B +:10284000D42118971096580AC041149B3019486A31 +:10285000F01F00065BFCC06130088D08E068008A4C +:102860008F38D82280037E208003286C201D5809D1 +:102870005F09580BFA0B1700580A5F18F3E80008B5 +:102880003009F2081800C0303FECC0B8580AC03117 +:10289000149CC078158997091589F00918005F1CE8 +:1028A0002FFD5EFCF7DBC008C068201A19881638B7 +:1028B0005E0C2FFC580ACFA15EFAD703D4211697DD +:1028C0001896580CC06078685808C031F01F00385E +:1028D0004B881037C0316C07C0A84B781037C03117 +:1028E0006C17C0584B581037EDF7000230088F189E +:1028F0008E68EDB80005C590EDB80002C1A0EDB836 +:102900000004C060A7A8AE6830988D38C4D8EDB870 +:102910000003C0B10E9B0C9CF01F0029C4618E689F +:102920008F6CA3D88F2CAE688E68A3A8AE68C14800 +:102930006EDB580BC110EEC8FFBC103BC0400C9CB6 +:10294000F01F0020300C6F088FDC8F185808C04033 +:102950006EF88F08D8226E485808C0510E9B0C9C08 +:10296000F01F00198E68F1D8C002C0604978498B09 +:10297000700CF01F00186E4A6E980C9C8F0A6E59EE +:102980006E8B5D188E688F1CADD8AE68580CE08ACF +:102990000003D82A580CC041A5B8AE68C058A7A8F3 +:1029A000AE6830088F18DC2ADC2A000080031F384C +:1029B0008003EF2C8003EF4C8003EF6C80031D2C11 +:1029C0008003217C8003276C8003ECA8800329D43A +:1029D00080032640D4019868E21800095898C02066 +:1029E000D80AF01F0002D80280031E44D431189E7A +:1029F0001738E048005EC030300AC0381738301A47 +:102A00003009FC090B0A2FF9E0490100CFB1580841 +:102A1000C041F6CC0001D832149632D4EC16000135 +:102A2000300735D5C0381498129BFC080B06F6C940 +:102A3000FFFF178A129CE80A1800C090EA0A1800E3 +:102A4000C1E0EE0A1800CF01169CD832138C103C5E +:102A50005F53E04C005D5F0AE7EA100AEE0A1800D7 +:102A6000C03032D8CE2BF0CAFFFFFC0A000A14C6D1 +:102A70002FF81838CFD52FEB2FE9CDCBD8321498BB +:102A8000F5DBC01FF00C1100104CFC187FF0F5ECCA +:102A900013FCF00C010CBF9C5EFCD703D401967BA9 +:102AA000F01F0002D8020000800353E0D4211697E3 +:102AB000967BF01F00098E681099ADC95BFCEFF999 +:102AC0000C06EFFC1A15E0691000F1D9E138EFF8B7 +:102AD0001C06D822800362D4D421966816971495D8 +:102AE0001294E21801001896C0603029300A967BD3 +:102AF000F01F00068E68ADC808990A9A8E7B0C9C60 +:102B0000AE68F01F0003D822800362D4800353B460 +:102B1000D4211697967BF01F0007C0656F581808E0 +:102B2000EF480054D8228E68ADC8AE68D8220000A5 +:102B30008003694CD431208D4DB8500B7008507C07 +:102B4000502A1295501816970F36401AF4060704AB +:102B5000E2140008CFA1E046002DC0410F3630142A +:102B6000C058E046002BC0210F3658055F085905B4 +:102B70005F0A3009F1EA100AF20A1800C1D0E046F3 +:102B80000030C1210F8A358B378CF60A18005F0B95 +:102B9000F80A18005F0A144BF20B1800C0500F9689 +:102BA00031052FE7C0985808C070E0460030F9B5ED +:102BB0000008F9B5010A5804C0713FF0E061FFFF59 +:102BC000EA117FFFC0483000FC118000EA03141FA7 +:102BD0000A980699009A029BF01F00340699505AF1 +:102BE0000A98009A029BF01F0032069C14981699CE +:102BF000300A30003001149E109212934019F206F0 +:102C0000070BF3DBC001F9B90137F9B90057506977 +:102C1000ECC80030EDBB0002C0804069F7DBC002A9 +:102C2000EC090108580BC2D00A38C2B40430E601DE +:102C300013005FB9F3EA13FAFC0A1800C1F104307B +:102C4000E60113005F09405A14385F9AF5E900095C +:102C5000FC091800C131E005064AEA010249504862 +:102C6000F8000349BF58F20B000B5038FAE0000C93 +:102C70001400E20B0041301AC0283FFA0F36CBFB9C +:102C80005BFAC1715804C0713FF0E061FFFFEA11C7 +:102C90007FFFC0483000FC11800032284079933813 +:102CA000C10800000000049C800373408002D99892 +:102CB0005804C07030083009F0000100F2010141F1 +:102CC00040285808C0B0580AF9B801FFEFD8E10A07 +:102CD000FBFA1A00402940089308009A029B2F8DA6 +:102CE000D8320000D431209D4DE816927008508CE7 +:102CF000505A1295504816970F36404EFC0607035F +:102D0000E2130008CFA1E046002DC0410F3630137A +:102D1000C058E046002BC0210F3658055F08590502 +:102D20005F0A3009F1EA100AF20A1800C1D0E04641 +:102D30000030C1210F8A358B378CF60A18005F0BE3 +:102D4000F80A18005F0A144BF20B1800C0500F96D7 +:102D500031052FE7C0985808C070E0460030F9B53B +:102D60000008F9B5010AEA04141F0A9808993FFA05 +:102D70003FFBF01F003D0899502B503A0A983FFA4C +:102D80003FFBF01F003A300B300830094041E206AB +:102D9000070EE1DEC001ECCC00305800F9B101377C +:102DA000F9B100571C90E2100004C061EC01010C65 +:102DB000FDDEC002C3700A3CC354FAE000080038CC +:102DC000E20913005FBE3000FDEB13FBE00B1800BF +:102DD000C261FAE00008143C5F9E0038E20913006B +:102DE0005F0B3000FDEB000BE00B1800C181F0051C +:102DF0000640EA09024BFAE10000E808034BF6013D +:102E00000001507C5001BF5CFAE00000506C301BA8 +:102E1000FAE800180008F2010049C0283FFB0F360D +:102E2000CB6B5BFBC071322840803FF981383FF8A3 +:102E3000C0985803C07030043005E8080108EA095A +:102E40000149405E580EC080580BF9BA01FFEFDA15 +:102E5000E102405A9502109A129B2F7DD832000051 +:102E60000000049C8002D99880037340D431203D37 +:102E70004C48502C70011698113EE20E0705E215E1 +:102E80000008CFB1E04E002DC041113E3015C058B2 +:102E9000E04E002BC021113E58095F0C59095F0616 +:102EA0003007F9E61006EE061800C1E0E04E0030EB +:102EB000C131118635843783E80618005F04E606C1 +:102EC00018005F06E9E61006EE061800C050119ED5 +:102ED00031092FE8C098580CC070E04E0030F9B9A5 +:102EE0000008F9B9010A3FF3E6090D023007500363 +:102EF0000E9C0E93E20E0704E1D4C001F9B0013735 +:102F0000F9B000575010FCC600300890E2100004E1 +:102F1000C0814010E9D4C002FC0001065804C1C0C1 +:102F20001236C1A4043C5FBEFDE713FEE60E180096 +:102F3000C101043C5F0E40070E365F97EFEE000EB6 +:102F4000E60E1800C061B33C3017EC0C000CC02832 +:102F50003FF7113ECD0B5BF7C061322940200E9C3C +:102F60008139C0485805FBBC0100580AC070580799 +:102F7000F9B901FFF1D9E10B950B2FDDD832000033 +:102F80000000049CD421169776DBEEC8FFBC103BF2 +:102F9000C171E06B0400F01F0015C250E06804002E +:102FA0008FDC8FE8EF380046F8CCFC03B8A8EF3888 +:102FB0000045B898EF380044B8888F0CC1386EE5EA +:102FC000EA041501089AF01F000A1896C0C00A9A70 +:102FD000189BF80500050A9CF01F00068FE48F057A +:102FE0008FD6D82ADC2A00008002E2BC8002E8E802 +:102FF0008002E736D4211697149618955BFBC650CD +:10300000580CC06078685808C031F01F00314B1868 +:103010001036C0316A06C0A84AF81036C0316A16A8 +:10302000C0584AE81036EBF600028C68A5D8AC68A8 +:10303000EDB80002C140EDB80004C461EDB8000372 +:10304000C0B10C9B0A9CF01F0026C3E18C688D6CFC +:10305000A3D88D2CAC688C68A3A8AC680E946CD8EF +:103060005C545808C1006C196CE81039C0650A9CA2 +:103070000C9BF01F001CC2816C0820188D08B084C6 +:103080000897C0C86C495809C0C06C081238E0885D +:10309000000911770837C0518D086C182FF8C12826 +:1030A0006C18ED4800406C088DF8ECC8FFBC8DD85A +:1030B00030388DE8ECC8FFBAED6400468D080897FB +:1030C00030188D18C0283FF70E9CD82280031F3877 +:1030D0008003EF2C8003EF4C8003EF6C80031D2CEA +:1030E00080032F84D431208DFAC4FFBC504B682E4E +:1030F000505812967C0B7005506E580BF40B17004D +:103100006803681140493008C2C92FFB325C178A36 +:10311000F80A18005F1EF00A18005F1CFDEC000C96 +:10312000F00C1800CF31580AE0800129300C3FFA2A +:103130001890503A18941892F80C003C1697507C4E +:103140004CDC0F3AF80A070E407C1C0C4CBEFC0C01 +:10315000070E201E500E4CAEFC0C070C507C400C91 +:10316000587CE08B00F84C7EFC0C032F368BF60A63 +:103170001800E08000F0371BF60A1800C07034CB4E +:10318000F60A1800C051A3B4CE58A5B4CE380F8BA0 +:1031900036CAF40B1800C051A5B4EECBFFFFCDB872 +:1031A000A5A4CD88EBD5C005367CF80A1800E08BC5 +:1031B0000027365BF60A1800C48234FBF60A1800B2 +:1031C000C480E08B000C345BF60A1800C3E0347B4B +:1031D000F60A1800C3A0344BC088358BF60A1800D5 +:1031E000C2C0E08B0007355BF60A1800C351C31854 +:1031F000363BF60A1800C2F0364BC0E8370BF60A29 +:103200001800C250E08B000D36EBF60A1800C1F032 +:10321000E08B0014369BF60A1800C1E1C0E8375B6A +:10322000F60A1800C0A0378BF60A1800C060373BBA +:10323000F60A1800C111C0B8EDB40004C0A0EDB486 +:103240000005C0913020C0883040C0683030C04890 +:103250003010C0283000403B5BFBC040E20B09202F +:10326000C7985860E08B00776C0AEACCFFFF486E85 +:10327000FC00032F8003F2708003F1D48003F16817 +:103280008003EFC88003EFE8F4CBFFF88D0BF4EA7E +:103290000000E605083AC0F8F4CBFFFC8D0B740A79 +:1032A000E605093AC088F4CBFFF88D0BF4EA00007C +:1032B000E605083A0E9B1895C4E8620A5BFAC0B1AD +:1032C00050195028E06A0080300B029CF01F004D1E +:1032D00040284019E4CC00010E9B503CF20C0C49F4 +:1032E000C3A8620A5BFAC0B150195028E06A008096 +:1032F000300B029CF01F0043402840192012300A76 +:103300000E9BE202092AF2020C49C25816976C0A77 +:10331000F4CBFFFC8D0B740A0E9BE605093A2FF5E2 +:10332000C1A8F4C20030C068E40200222FF7F40202 +:1033300000120F8A580AC0E0230A589AFE98FFF636 +:10334000C0982FF70F8A580AC050230A589AFE983F +:10335000FFFA0E9B407C30BAF40C1800FE91FEEE92 +:103360004042178C0A325F4AF00C18005F1CF9EAE1 +:10337000000AF00A1800FE91FECB3008404E178A72 +:10338000E2050021F00A1800FC091710E6050038D4 +:10339000069EC2A8620A583AC1E0E0890007581A9E +:1033A000C1A0582AC181C058585AC0C0C0B5C13840 +:1033B0006C0AF4CCFFF88D0CF4E20000F0E300009E +:1033C000C1086C0AF4CCFFF88D0CF4E20000F0E3C5 +:1033D0000000C0786C0AF4CCFFFC8D0C740A910AD2 +:1033E0002FF52F882FC11235FE9AFFD61C9340521D +:1033F000406E85059D0B404BE60B003C2F8DD8326F +:103400008002E8BCD421149774285808C04195184C +:10341000109CD822F01F000330088F188F28D82264 +:1034200080032320D431FACD06BC5109169114979C +:103430001895F01F0056780C50CC5805C0706A687B +:103440005808C0410A9CF01F00524D281031C0316D +:103450006A01C0A84D081031C0316A11C0584CF83B +:103460001031EBF100028268EDB80003C041624800 +:103470005808C071029B0A9CF01F0049E0810F941C +:1034800082681099E219001A58A9C3D18279300ACA +:10349000F4091900C385A1D8FB5805D06288FB4800 +:1034A00005E462A8FB4805ECFAC8FFBCFB4805D45C +:1034B000FB4805C4E0680400FB4805D8FB4805CC80 +:1034C0003008FB5905D20E9A4109FAC7FA3CFB486D +:1034D00005DC0A9C0E9BF01F003350BCC0950E9B70 +:1034E0000A9CF01F003140BEF9BE01FF50BEFB0830 +:1034F00005D0EDB80006E0810F598268A7A8A26840 +:10350000E08F0F543008FB4806B4FB480690FB4898 +:10351000068CFB4806B03008300950A75078FAC432 +:10352000F9E03FF85059FB440688FB480544129CDB +:10353000506950D950E950B9129740A2325A300818 +:10354000C0282FF20589F00918005F1BF409180044 +:103550005F19F3EB000BF00B1800CF4140ABE40B0D +:103560000106C300FAF806900C08890BFB48069088 +:103570008916FAF8068C2FF8FB48068C5878E089F3 +:1035800000152F84C1C800008003276480031F3802 +:103590008003EF2C8003EF4C8003EF6C80031C381A +:1035A0008003342480031D2CFACAF978029B0A9CFC +:1035B000F01F0071E0810EF4FAC4F9E040BA0C0A81 +:1035C00050BA05893008F0091800E0800ED930099A +:1035D000FB6806BB0E96E4C8FFFF3FFE50945041C7 +:1035E0000E940491508950A8502E50391293129085 +:1035F00010970A92C0783FFC0A97502CC038300BC5 +:10360000503B0F38C0281290F0C90020E049005804 +:10361000E08B0A4A4D9AF409032F50A750800C976B +:103620000495089602924D6940941090404150D9FB +:10363000E08F08AA3008FB3906BBF0091800CE213C +:103640003208C6E8A1A3CDEB0F89F2C80030589824 +:10365000E08B001DEEC8FFFF300B2309F60B002B9B +:10366000F20B001B1139F2CA0030589AFE98FFF78E +:10367000E0490024CC51E04B0020E0890E90201B53 +:10368000FAF906B4123BC095C108FAF906B4ECCABF +:10369000FFFF1236C1F5C268FACEF9441097FC0B51 +:1036A000003BF6F0FD88C3581097FAC8F9501AD8B5 +:1036B000FAC8FAB81AD8FAC8FBB4029A1AD8049C05 +:1036C000FAC8F940FAC9FFB4F01F002E2FDD7800C8 +:1036D000C208FACCF9441496F8040038F0F0FD88DA +:1036E000C188410859F9E0890011F0CBFFFC510B6A +:1036F0007000FACBF944F6090038F140FD882FF943 +:103700001496FB4906B4C058700014962FC851088F +:103710005800FE94FF785C30A3A3C74B32B8FB6817 +:1037200006BBC70B0F38E048002AC0303009C80874 +:103730000F88F0C900305899E08B0026EEC5FFFFD6 +:10374000300B2308F60B002BF00B001B0B38F0C9D5 +:1037500000305899FE98FFF7E0480024FE91FF5191 +:10376000E04B0020E0890E1B201BFAF806B4103B4A +:10377000C115C188800334048003F0048003EDD0B8 +:10378000800330E4FAFA06B4ECC9FFFF1436C1F541 +:10379000C288FACAF944F40B003BF6FBFD88502BB3 +:1037A000C3C8FAC8F9501AD8FAC8FAB81AD8FAC869 +:1037B000FBB4029A1AD8049CFAC8F940FAC9FFB4BB +:1037C000F01F017B2FDD780C502CC27812960E95DD +:1037D000FAC9F944F2040038F0F8FD885028C1D83D +:1037E000410859FAE0890014F0CBFFFC7008510B36 +:1037F0005028FAC6F944402EEC0A0038F14EFD88F4 +:103800002FFA0E95FB4A06B41296C078700C0E95EE +:103810002FC8502C12965108402B580BFE95FEEDE8 +:103820000A97CF0AF20900290F38F4090019F0CAE3 +:103830000030589AFE98FFF83FFAF20A0C495029D6 +:10384000CE4AA7B3CDFA30092308F2090029F009BE +:1038500000190F38F0CA0030589AFE98FFF7E04878 +:103860000024FE91FED2E0490020E0890D98F2C4C8 +:10387000000130195039CC6AA3B3CC4AA7A3CC2A93 +:103880000F8836CEFC081800C0412FF7A5B3CBAA8D +:10389000A5A3CB8AA5B3CB6A50A750800C971090F4 +:1038A00008960495409402920E994041FAF806B4A5 +:1038B000403C580CC1D01036C064FACBF944F6062F +:1038C0000036C1D8FAC8F9501AD8FAC8FAB81AD8C6 +:1038D000FAC8FBB41AD8FAC8F940FAC9FFB4049A76 +:1038E0000C9B0A9CF01F01322FDD19B8C2282FF75C +:1038F0001039C084FACAF944F4060036ED38FD8B5D +:10390000C188410959F8E0890012F2CAFFFC510A46 +:103910007209FAC6F944EC08003A2FF8F549FD8817 +:10392000FB4806B4F1D9C008C04813B82FC95109E3 +:10393000FB680660300E30083012FB6806BB502E64 +:10394000E08F08C450A750800C9704950896029207 +:10395000409410904041A5A3C0A850A750800C9758 +:10396000049508960292409410904041EDB30005F2 +:10397000C511FAF806B4403C580CC1E01036C064DA +:10398000FACBF944F6060036C208FAC8F9501AD83C +:10399000FAC8FAB80C9B1AD8FAC8FBB41AD8FAC9F4 +:1039A000FFB4FAC8F940049A0A9CF01F01012FDD08 +:1039B000781B7809C2B8EECAFFFF1037C0B4FAC945 +:1039C000F9441497F2060036ECFBFD8CECF9FD8807 +:1039D000C1D8410959F8E0890014F2CBFFF8510B26 +:1039E000FAC6F944721BEC08003C7209F94BFD8CD5 +:1039F000F949FD882FF81497FB4806B4C078F2C83F +:103A0000FFF8721B1497510872091698FAE9000022 +:103A1000CAE8EDB30004C171FAF806B4403E580E8E +:103A2000C0801036C694FACCF944F8060036C8288F +:103A3000EECAFFFF1037E0840081FACBF944F606A6 +:103A40000036C778EDB30006C4B1FAF806B4403CBE +:103A5000580CC1D01036C064FACBF944F6060036D3 +:103A6000C1F8FAC8F9501AD8FAC8FAB81AD8FAC878 +:103A7000FBB41AD8FAC8F940FAC9FFB4049A0C9BEF +:103A80000A9CF01F00CB2FDD9818C268EECAFFFF1A +:103A90001037C094FAC9F9441497F2060036ED08BD +:103AA000FD8AC1A8410959F8E0890013F2CBFFFC57 +:103AB000510B7209FAC6F944EC08003B2FF8F7499C +:103AC000FD88FB4806B41497F1D9B010C05892187D +:103AD00014972FC951095018BF585008C488FAF8D4 +:103AE00006B4403C580CC1D01036C064FACBF9443F +:103AF000F6060036C1F8FAC8F9501AD8FAC8FAB86A +:103B00000C9B1AD8FAC8FBB4049A1AD80A9CFAC8B3 +:103B1000F940FAC9FFB4F01F00A62FDD780BC248A8 +:103B2000EECAFFFF1037C094FAC9F944F206003616 +:103B30001497ECFBFD88C188410959F8E089001110 +:103B4000F2CBFFFC510BFAC6F944720BEC080039BA +:103B5000F34BFD882FF81497FB4806B4C058720B3E +:103B600014972FC95109501BBF5B500BFAEA000094 +:103B7000580A5C2BC0E43008FAEA00003009F00A69 +:103B8000010AF20B014B32D8FAEB0000FB6806BBCE +:103B90003018E08F071150A750800C9704950896B5 +:103BA00002924094109040410E99EDB30003C4116D +:103BB000FAF806B4403A580AC1901036C645FAC819 +:103BC000F9501AD8FAC8FAB81AD8FAC8FBB40C9B3C +:103BD0001AD8049AFAC8F940FAC9FFB40A9CF01F2F +:103BE00000742FDD78165076C4882FF71039C0C4C2 +:103BF000FACEF944FC060036ECFCFD8C507CECF669 +:103C0000FD885056C668410959F8E0890010F2CA8B +:103C1000FFF8721B510A7209FACAF944507B5059D5 +:103C2000F4080039405B407AC47872185078C4C8F0 +:103C3000FAF806B4403E580EC2301036C094FACCA2 +:103C4000F944F8060036ECFBFD8C507BCD9BFAC89E +:103C5000F9501AD8FAC8FAB8049A1AD8FAC8FBB4B4 +:103C60000C9B1AD80A9CFAC8F940FAC9FFB4F01F95 +:103C700000502FDD781A507A780C505CC2A82FF7CC +:103C80001039C094FAC9F944F2060036ECF8FD8CFC +:103C90005078CB6B410959F8E0890015F2CAFFF85A +:103CA00072167209510A5059FACEF9445076FC083E +:103CB0000039405B0C9AF2EBFD882FF8FB4806B404 +:103CC000C088721C507CF2C8FFF851087209505924 +:103CD000405B407AF01F00371896C1503008300919 +:103CE000405B407AF01F0034C04032D8FB6806BB0E +:103CF0004B284B36A7D3E0400047F00617A03032E0 +:103D0000E08F06E7405B407AF01F002EC0C05026CF +:103D10004AD84AE6A7D3E0400047F00617A0303261 +:103D2000E08F06DD402A5BFAC04130695029C11896 +:103D3000E04000475F09E04000675F08F3E81008D3 +:103D4000F8081800C06040285808F9B80001502849 +:103D500040784059FAE90694A9A3FAF8069458085D +:103D6000C065405E300C506E509CC078405B32DACB +:103D7000EE1B8000509A506BE04000465F09E04027 +:103D800000665F08F3E810085048C0404022303910 +:103D9000C228E04000455F09E04000655F084046FA +:103DA0001049EC091800C1314022C148800330E4B9 +:103DB0008003697880036FC08003F2408003F2447F +:103DC00080032A7E8003F2488003F24C402EFCC21E +:103DD000FFFF3029FAC8F95C1AD8FAC8F9541AD882 +:103DE000FAC8F94C0A9C1AD80498409B40AAF01FC4 +:103DF00001E0E04000475F19E04000675F18189657 +:103E00002FDDF3E80008C041EDB30000C301EC0270 +:103E1000000C503C404B580BC1500D893308F00941 +:103E20001800C0B130083009406B407AF01F01D152 +:103E3000FBB20001FBF20BAB403AFAF806AC100AF9 +:103E4000503A406B30083009407AF01F01CAC090E8 +:103E50004039FB4906A4C05810C9FB4806A4C02835 +:103E60003309FAF806A4403E1C38CF73E0400047FF +:103E70005F09E04000675F08F3E81008FAF906A45C +:103E80000C1950695808C0B0FAF806AC5BD8C05598 +:103E9000402C1838E08A006A2020C058E0400065B5 +:103EA000E0890046FAFB06ACFB60069C201BFB4B3E +:103EB00006ACC0475C3B32D8C02832B8FB68069DD0 +:103EC000589BE08A001DFAC9FA3530AA12980E9C58 +:103ED0000C92F60A0C060E9B2D0B10FB0C9B5896B1 +:103EE000FE99FFF92D0B1897049610FBFACAF96298 +:103EF000C038113B14CB1238CFD3C0982D0B3308E8 +:103F0000FB6B069FFB68069EFACAF960FAC8F96463 +:103F1000F408010850E81092406B1602581BE08923 +:103F20000005EDB30000C3512FF2C338E040006636 +:103F3000C1C1FAF206AC5802E08A000C402A580AC5 +:103F4000C041EDB30000C2512FF240291202C0B8A7 +:103F500040285808C061EDB30000C0303012C1984D +:103F600040222FE23660C158FAF206AC406E1C3295 +:103F7000C065EDB30000F7B200FFC0A8E40811026D +:103F8000406C5802F00217A0F9B20901180236700D +:103F9000409B580BE080059D32D8FB6806BBE08F44 +:103FA000059C50A704950C970292089640414094B6 +:103FB0000E99EDB30005C481FAF806B4403E580EE0 +:103FC000C1D01036C064FACCF944F8060036C1D826 +:103FD000FAC8F9501AD8FAC8FAB8049A1AD8FAC81E +:103FE000FBB40C9B1AD80A9CFAC8F940FAC9FFB472 +:103FF000F01F01612FDD780AC2082FF71039C08445 +:10400000FACBF944F6060036ECFAFD88C16841099E +:1040100059F8E0890010F2CAFFFC510AFAC6F944C7 +:10402000720AEC080039F34AFD882FF8FB4806B401 +:10403000C048720A2FC9510940BE1C98951EBF582E +:104040009508FE9FFA7CEDB30004C480E2130040A3 +:10405000C450FAF806B4403C580CC1D01036C064C5 +:10406000FACBF944F6060036C1D8FAC8F9501AD886 +:10407000FAC8FAB8049A1AD8FAC8FBB40C9B1AD832 +:104080000A9CFAC8F940FAC9FFB4F01F013B2FDDC2 +:10409000780AC2082FF71039C084FACAF944F40626 +:1040A0000036ECFAFD88C168410959F8E089001032 +:1040B000F2CAFFFC510AFAC6F944720AEC08003948 +:1040C000F34AFD882FF8FB4806B4C048720A2FC98E +:1040D000510940BEB40EFE9FFA32FAF806B4403CD5 +:1040E000580CC1D01036C064FACBF944F60600363D +:1040F000C1D8FAC8F9501AD8FAC8FAB8049A1AD826 +:10410000FAC8FBB40C9B1AD80A9CFAC8F940FAC941 +:10411000FFB4F01F01192FDD780AC2082FF71039FC +:10412000C084FACAF944F4060036ECFAFD88C16886 +:10413000410959F8E0890010F2CAFFFC510AFAC699 +:10414000F944720AEC080039F34AFD882FF8FB485D +:1041500006B4C048720A2FC9510940BE950EFE9F91 +:10416000F9EE50A750800C9704950896029240945F +:1041700010904041A5A3C0A850A750800C9704956B +:1041800008960292409410904041EDB30005C5D1CD +:10419000FAF806B4403C580CC2601036C0A4FACB02 +:1041A000F944F6060036ECE8FD88FAE90000C1881B +:1041B000FAC8F9501AD8FAC8FAB8049A1AD80C9B57 +:1041C000FAC8FBB40A9C1AD8FAC8F940FAC9FFB475 +:1041D000F01F00E92FDDF8EA0000FAEB00003008DC +:1041E000E08F03E7EECAFFFF1037C0B4FAC9F94405 +:1041F0001497F2060036ECEAFD88FAEB0000C1885D +:10420000410959F8E0890018F2E60000F2CBFFF806 +:10421000FAE70000510BFAC6F944EC080039FAE657 +:104220000000F2E7FD882FF81497FB4806B44038E9 +:10423000E08F03BFF2E600004038FAE700002F8964 +:1042400014975109E08F03B5EDB30004C161FAF88A +:1042500006B4403E580EC0801036C674FACCF944FD +:10426000F8060036C808EECAFFFF1037C7F4FACBCD +:10427000F944F6060036C768EDB30006C4A1FAF8A3 +:1042800006B4403C580CC1D01036C064FACBF94497 +:10429000F6060036C1F8FAC8F9501AD8FAC8FAB8C2 +:1042A0001AD8FAC8FBB41AD8FAC8F940FAC9FFB448 +:1042B000049A0C9B0A9CF01F00B02FDD9818C2686E +:1042C000EECAFFFF1037C094FAC9F9441497F206FA +:1042D0000036ED08FD8AC1A8410959F8E0890013AC +:1042E000F2CBFFFC510B7209FAC6F944EC08003B13 +:1042F0002FF8F749FD88FB4806B41497F1D9B010A0 +:10430000C058921814972FC951095C785018C46886 +:10431000FAF806B4403C580CC1D01036C064FACB51 +:10432000F944F6060036C1F8FAC8F9501AD8FAC8A6 +:10433000FAB80C9B1AD8FAC8FBB4049A1AD80A9C8B +:10434000FAC8F940FAC9FFB4F01F008B2FDD780BD3 +:10435000C248EECAFFFF1037C094FAC9F944F2060A +:1043600000361497ECFBFD88C188410959F8E089B3 +:104370000011F2CBFFFC510BFAC6F944720BEC08AA +:104380000039F34BFD882FF81497FB4806B4C0584A +:10439000720B14972FC95109501B300E500E1C98E8 +:1043A000E08F030750A750800C970495089602925F +:1043B000409440410E99FAF806B4403C580CC1D0E4 +:1043C0001036C064FACBF944F6060036C1D8FAC8F4 +:1043D000F9501AD8FAC8FAB81AD8FAC8FBB41AD8D9 +:1043E000FAC9FFB4FAC8F940049A0C9B0A9CF01F62 +:1043F00000622FDD7809C2182FF71039C084FACA7D +:10440000F944F4060036ECF9FD88C178410959F801 +:10441000E0890010F2CAFFFC510AFAC6F944720999 +:10442000EC08003AF549FD882FF8FB4806B4C0585F +:10443000F2C8FFFC510872093308FB6806B83788D8 +:10444000300EFB6806B94CDC5019A1B3500E50DC9D +:1044500030283780E08F02AD50A750801090300890 +:10446000FB6806BB0C970495089602924094404165 +:104470000E99FAF806B4403B580BC1D01036C06410 +:10448000FACAF944F4060036C1D8FAC8F9501AD865 +:10449000FAC8FAB81AD8FAC8FBB40C9B1AD8049A0E +:1044A000FAC8F940FAC9FFB40A9CF01F00332FDDA7 +:1044B0007806C2082FF71039C084FAC9F944F20609 +:1044C0000036ECF6FD88C168410959F8E089001012 +:1044D000F2CAFFFC510A7206FACEF944FC08003910 +:1044E000F346FD882FF8FB4806B4C04872062FC972 +:1044F0005109402C580CC105189A300B0C9CF01F28 +:104500000020E08002E9F8060102402B1632E08923 +:1045100002E3E08F02DE300A0C9C502AF01F0019E3 +:104520001892E08F02DC50A750800C9704950896F3 +:104530000292409410904041A5A3C0A850A750807B +:104540000C97049508960292409410904041EDB368 +:104550000005C611FAF806B440395809C2C0103631 +:10456000C124FAC8F944F0060036C2E88003552C8D +:1045700080036F32800330E48003EDE4800328A4DD +:104580008002EDD0FAC8F9501AD8FAC8FAB81AD889 +:10459000FAC8FBB41AD8FAC8F940FAC9FFB4049AA9 +:1045A0000C9B0A9CF01F00C82FDDF8E80000FAE918 +:1045B0000000C2E8EECAFFFF1037C0B4FAC8F944E1 +:1045C0001497F0060036ECEAFD88FAEB0000C2080A +:1045D000410959F8E0890016F2E60000F2CBFFF835 +:1045E000FAE70000510BFAC6F944EC080039FAE684 +:1045F0000000F2E7FD882FF81497FB4806B4C08846 +:10460000F2E600002F89FAE70000510914973018EC +:10461000E08F01CFEDB30004C161FAF806B4403E6B +:10462000580EC0801036C674FACCF944F80600362D +:10463000C808EECAFFFF1037C7F4FACBF944F606F4 +:104640000036C768EDB30006C4A1FAF806B4403CD2 +:10465000580CC1D01036C064FACBF944F6060036C7 +:10466000C1F8FAC8F9501AD8FAC8FAB81AD8FAC86C +:10467000FBB41AD8FAC8F940FAC9FFB4049A0C9BE3 +:104680000A9CF01F00912FDD9818C268EECAFFFF48 +:104690001037C094FAC9F9441497F2060036ED08B1 +:1046A000FD8AC1A8410959F8E0890013F2CBFFFC4B +:1046B000510B7209FAC6F944EC08003B2FF8F74990 +:1046C000FD88FB4806B41497F1D9B010C058921871 +:1046D00014972FC951095C785018C468FAF806B4C9 +:1046E000403C580CC1D01036C064FACBF944F606F1 +:1046F0000036C1F8FAC8F9501AD8FAC8FAB80C9BB3 +:104700001AD8FAC8FBB4049A1AD80A9CFAC8F94015 +:10471000FAC9FFB4F01F006C2FDD780BC248EECA57 +:10472000FFFF1037C094FAC9F944F2060036149717 +:10473000ECFBFD88C188410959F8E0890011F2CBF2 +:10474000FFFC510BFAC6F944720BEC080039F34B2D +:10475000FD882FF81497FB4806B4C058720B1497C5 +:104760002FC95109501B300E3018500EC21950A7D6 +:1047700050800C970495089602924D4C40941090EE +:10478000404150DCEDB30005C551FAF806B4403B9A +:10479000580BC2201036C0A4FACAF944F4060036F9 +:1047A000ECE8FD88FAE90000CF58FAC8F9501AD8A9 +:1047B000FAC8FAB8049A1AD80C9BFAC8FBB40A9C37 +:1047C0001AD8FAC8F940FAC9FFB4F01F003F2FDD2C +:1047D000F8EA0000C0C8EECAFFFF1037C0B4FAC93B +:1047E000F9441497F2060036ECEAFD88FAEB000073 +:1047F000CD18410959F8E0890016F2E60000F2CB25 +:10480000FFF8FAE70000510BFAC6F944EC0800394A +:10481000FAE60000F2E7FD882FF81497FB4806B48B +:10482000CB98F2E600002F89FAE7000051091497AF +:10483000CB18EDB30004C171FAF806B4403E580E2F +:10484000C0801036C6C4FACCF944F8060036C85801 +:10485000EECAFFFF1037E0840084FACBF944F60675 +:104860000036C7A8EDB30006C4E1FAF806B4403C30 +:10487000580CC1D01036C064FACBF944F6060036A5 +:10488000C1F8FAC8F9501AD8FAC8FAB81AD8FAC84A +:10489000FBB41AD8FAC8F940FAC9FFB4049A0C9BC1 +:1048A0000A9CF01F00092FDD9818C2A8EECAFFFF6E +:1048B0001037C0D4FAC9F9441497F2060036ED084F +:1048C000FD8AC1E8800330E48003EDE4410959F832 +:1048D000E0890013F2CBFFFC510B7209FAC6F944D0 +:1048E000EC08003B2FF8F749FD88FB4806B4149705 +:1048F000F1D9B010C058921814972FC951095C789B +:104900005018C468FAF806B4403C580CC1D01036B0 +:10491000C064FACBF944F6060036C1F8FAC8F9507B +:104920001AD8FAC8FAB80C9B1AD8FAC8FBB4049A79 +:104930001AD80A9CFAC8F940FAC9FFB4F01F00C996 +:104940002FDD780BC248EECAFFFF1037C094FAC9BA +:10495000F944F20600361497ECFBFD88C188410942 +:1049600059F8E0890011F2CBFFFC510BFAC6F9446B +:10497000720BEC080039F34BFD882FF81497FB48B5 +:1049800006B4C058720B14972FC95109501B300E32 +:10499000500E4008401C18485F18E7E80008C07037 +:1049A0003308FB6006B9A1B3FB6806B830283009AC +:1049B000FB6906BB402B580BC025A7D3402A4009F2 +:1049C000580A5F1A4016FAC2F9780C495F19F5E9DE +:1049D0001009C5C03019F2081800C0603029F2086B +:1049E0001800C041C3C80496C3080496FAE8000042 +:1049F000F5D8C0032D0A0CFAF00B1603F20C1603BF +:104A0000F7E911DB1899169858085C29CF21FAE9C3 +:104A10000000EDB30000C4513309F20A1800C410BD +:104A20000CF9C3F8FAEA000030A83009F01F008E34 +:104A300030A82D0A3009AC8AFAEA0000F01F008B7A +:104A400016991498FAE900002016FAEA0000589A1C +:104A50005C2BFE9BFFE91BF82D08C2080496FAE8C0 +:104A60000000F5D8C00440DEFC0A070A0CFAF20B7D +:104A70001604F00A1604F5E911CA16991498580894 +:104A80005C29CF01FAE90000C0C85808C091EDB315 +:104A90000000C061FAC6F9793308AC88C0280496D2 +:104AA0000C12C1C850A7508040940C9710900495E8 +:104AB00040415808E0800464FB680660300C300810 +:104AC0003012FB6806BB502CFAC6F9A0C078300B38 +:104AD000502BC0484022300A502A4029E4090C4992 +:104AE000FB3806BB5039069E3009E21E0002F20870 +:104AF0001800FBF81003F7B801FFFBF81A03069B38 +:104B0000580EFBFC1003F7BC01FEFBFC1A03E21B72 +:104B1000008450FE509BC451408A4039121A504ABA +:104B2000580AE089001FC3D82F092FF84D0E310C09 +:104B3000FB490690890E891CFB48068C5878E08951 +:104B400000042F84C0B8FACAF978029B0A9CF01FAF +:104B50000049E0810425FAC4F9E0404B210B504B99 +:104B6000FAF90690FAF8068C4C1A404E590EFE9946 +:104B7000FFDD1C092FF8890AFB490690891EFB48B6 +:104B8000068C5878E08900042F84C0B8FACAF978F6 +:104B9000029B0A9CF01F0037E0810402FAC4F9E08E +:104BA0003009FB3806BBF2081800C1F0FAF806908D +:104BB000FAC9F9452FF88909FB4806903019FAF827 +:104BC000068C89192FF8FB48068C5878E089000478 +:104BD0002F84C0B8FACAF978029B0A9CF01F0025FE +:104BE000E08103DEFAC4F9E040FC580CC1F0FAF8A9 +:104BF0000690FAC9F9482FE88909FB480690302940 +:104C0000FAF8068C89192FF8FB48068C5878E08949 +:104C100000042F84C0B8FACAF978029B0A9CF01FDE +:104C20000015E08103BDFAC4F9E0409BE04B008031 +:104C3000C511408A4039121A504A580AE089002B9F +:104C4000C4982F092FF848CE310CFB490690890EE5 +:104C5000891CFB48068C5878E08900102F84C178A5 +:104C6000800330E4800373408002D9988003F250BF +:104C7000800334048003F260FACAF978029B0A9C2C +:104C8000F01F004CE081038CFAC4F9E0404B210B8B +:104C9000504BFAF90690FAF8068C4C7A404E590EB1 +:104CA000FE99FFD11C092FF8890AFB490690891E3D +:104CB000FB48068C5878E08900042F84C0B8FACAF3 +:104CC000F978029B0A9CF01F003BE0810369FAC45B +:104CD000F9E0402C041C502C580CE089001FC3D86C +:104CE0002F092FF84B4B310AFB490690890B891A83 +:104CF000FB48068C5878E08900042F84C0B8FACAB3 +:104D0000F978029B0A9CF01F002BE0810349FAC44A +:104D1000F9E0402921095029FAF90690FAF8068CA1 +:104D20004A5A402E590EFE99FFDD1C092FF8890AB8 +:104D3000FB490690891EFB48068C5878E0890004E0 +:104D40002F84C0B8FACAF978029B0A9CF01F001998 +:104D5000E0810326FAC4F9E0EDB30008C0B0FAF828 +:104D6000069089128906F0020002FB420690E08F4D +:104D700001DBE0400065E08A01DD30083009405B7E +:104D8000407AF01F000EC7E0FAF8069048C92FF8E5 +:104D90008909FB4806903019FAF8068C89192FF812 +:104DA000FB48068C5878E089000D2F84C14800002C +:104DB000800334048003F26080036F328003A6C056 +:104DC000FACAF978029B0A9CF01F0078E08102E899 +:104DD000FAC4F9E0FAF806AC406C1838C055EDB3E7 +:104DE0000000E081026DFAF806902FF840CBFB48F6 +:104DF00006903019FAF8068C890B2FF88919FB48B0 +:104E0000068C5878E08900042F84C0B8FACAF97873 +:104E1000029B0A9CF01F0065E08102C2FAC4F9E01F +:104E2000406620165806E089001DE08F02492F09D0 +:104E30002FF8FB49069089028910FB48068C5878A8 +:104E4000E08900042F84C0B8FACAF978029B0A9C52 +:104E5000F01F0056E08102A4FAC4F9E02106C03830 +:104E60004D323100FAF90690FAF8068C4D0A5906CF +:104E7000FE99FFDF0C09890AFB4906902FF8891675 +:104E8000C559FAFA06AC580AE0890096FAF8069075 +:104E90004C892FF88909FB4806903019FAF8068CDE +:104EA00089192FF8FB48068C5878E08900042F8474 +:104EB000C0B8FACAF978029B0A9CF01F003CE08156 +:104EC000026FFAC4F9E0FAF806AC5808C081406AEB +:104ED000580AC051EDB30000E08101F240C9FAF870 +:104EE00006902FF88909FB4806903019FAF8068CCD +:104EF00089192FF8FB48068C5878E08900042F8424 +:104F0000C0B8FACAF978029B0A9CF01F0028E08119 +:104F10000247FAC4F9E0FAF206AC5C325802E089C2 +:104F2000001DC3B82F092FF8310EFB4906908900E8 +:104F3000891EFB48068C5878E08900042F84C0B88D +:104F4000FACAF978029B0A9CF01F0018E081022837 +:104F5000FAC4F9E02102C0284950FAF90690FAF89B +:104F6000068C493A5902FE99FFDF04092FF8890A95 +:104F7000FB4906908912FB48068C5878E0890004AA +:104F80002F84C0B8FACAF978029B0A9CF01F000768 +:104F9000E0810206FAC4F9E0406CFAF8069089064E +:104FA000891C1808CBE80000800334048003F260F9 +:104FB0008003A6C0FAF90690FAF8068C406B163A00 +:104FC000C6D516092FF88906FB490690891BFB48B0 +:104FD000068C5878E08900042F84C0B8FACAF978A2 +:104FE000029B0A9CF01F006FE08101DAFAC4F9E02D +:104FF000FAF606AC406A14165806E089001CC3B8DD +:105000002F092FF8FB49069089028910FB48068C6E +:105010005878E08900042F84C0B8FACAF978029B56 +:105020000A9CF01F0060E08101BBFAC4F9E0210690 +:10503000C0384DD23100FAF90690FAF8068C4DAA24 +:105040005906FE99FFDF0C092FF8890AFB490690E3 +:105050008916FB48068C5878E08900042F84C0B874 +:10506000FACAF978029B0A9CF01F004EE081019871 +:10507000FAC4F9E0EDB30000E081012240C9FAF87A +:1050800006902FF88909FB4806903019FAF8068C2B +:1050900089192FF8FB48068CC04914092FF8FB49E1 +:1050A00006908906891AFB48068C5878E089000426 +:1050B0002F84C0B8FACAF978029B0A9CF01F003905 +:1050C000E081016EFAC4F9E040C88908FAF8069058 +:1050D0002FF83019FB4806908919FAF8068C2FF83A +:1050E000FB48068CFAF206AC5878E08900042F845D +:1050F000C0B8FACAF978029B0A9CF01F002AE08126 +:10510000014FFAC4F9E00406FAF806AC8906FAF988 +:1051100006904066406E1016F208010889161C08B9 +:10512000FB480690FAF8068C2FF8FB48068CCB98C3 +:10513000406C581CE0890006EDB30000E081008758 +:10514000FAF806902FF83019FB4806908906FAF80D +:10515000068C89192FF8FB48068C5878E0890004E2 +:105160002F84C0B8FACAF978029B0A9CF01F000D80 +:10517000E0810116FAC4F9E0FAF806902FF840CB66 +:10518000FB4806903019FAF8068C890B2FF889191C +:10519000FB48068C5878E08900092F84C10800007C +:1051A000800334048003F260FACAF978029B0A9CF7 +:1051B000F01F006FE08100F4FAC4F9E03008300914 +:1051C000405B407AF01F006B40682018580CC0D13B +:1051D0002FF689188906FAF606901006FAF8068C5A +:1051E000FB4606902FF8C2F810965808E089001C7C +:1051F000C4982F092FF8FB49069089028910FB48B3 +:10520000068C5878E08900042F84C0B8FACAF9786F +:10521000029B0A9CF01F0056E08100C2FAC4F9E02C +:105220002106C0384D423100FAF90690FAF8068C92 +:105230004D1A5906FE99FFDF0C09890AFB490690B1 +:105240002FF88916FB48068CC0E8FAF806902FF86C +:105250003019FB4806908906FAF8068C89192FF850 +:10526000FB48068C5878E08900042F84C0B8FACA3D +:10527000F978029B0A9CF01F003EE0810091FAC47D +:10528000F9E040EAFAF806901408FAC9F964FB4814 +:105290000690891AFAF8068C89092FF8FB48068CC3 +:1052A0005878E08900042F84C0A8FACAF978029BD4 +:1052B0000A9CF01F002FC731FAC4F9E0E213000482 +:1052C000C3D04086403912165806E089001AC368D8 +:1052D0002F092FF8FB49069089038912FB48068C99 +:1052E0005878E08900042F84C098009A029B0A9C99 +:1052F000F01F001FC541FAC4F9E02106C05849F368 +:105300003102FAC0F978FAF90690FAF8068C49BA2F +:105310005906FE99FFDF0C092FF8890A8916FB4907 +:105320000690FB48068C5878E08A0009FACAF9789A +:10533000029B0A9CF01F000EC32140BC4036408EE9 +:10534000EC0E0C48100C50BCFAF806905808C080BF +:10535000FACAF978029B0A9CF01F0005C201300BC3 +:10536000FAC4F9E0FB4B068CFE9FF0E9800334049D +:1053700080036F328003F2608003F250FAF80690E7 +:105380005808C0800A9CFACAF978029BF01F0009ED +:10539000C0613008FB48068CC02840418268EDB8E7 +:1053A0000006C0313FFA50BA40BCFE3DF944D83245 +:1053B00080033404D42116981897109C3008149B4D +:1053C0004866129A8D08F01F00065BFCC0516C08FD +:1053D0005808EFF81A03D82200008CC48002F1505C +:1053E000D421300818974876169C8D08F01F0006C7 +:1053F0005BFCC0516C085808EFF81A03D822000073 +:1054000000008CC48002F108D431202D1897784810 +:1054100076460C38C034300CC858ECC2FFFCF6C3DA +:10542000FFECF6020329F802032C2FF92016F809E5 +:105430000D08F6020022EEC4FFEC10955808C410C7 +:105440003009069A08981291500B700EB18E501EBA +:10545000150EFC001610FDDEC010EA0E0341FDD152 +:10546000C010B181401BEA000240E2000000E3D01E +:10547000C010021B501B700BE3DBC0100209F20EC0 +:10548000010EB01EFC091410401EFC090009B009F1 +:10549000E00116102FC8B149043AFE98FFD8400B1E +:1054A000580CC0F1ECC8FFFBEE080028C0282016FD +:1054B00020480838E088000570095809CF908F46C9 +:1054C0000E9CF01F001AC2D52FF508983009070B63 +:1054D000F60A1610700CF7DBC010F80E1610141E2A +:1054E000F5DCC010161A120AB01AB14AFC0A0009FB +:1054F000B0092FC8B1490433FE98FFEBECC8FFFB9D +:10550000EE0803295809C0D1EE080028C02820164B +:1055100020480838E088000570095809CF908F4668 +:105520000A9C2FEDD8320000800363EED43121AD08 +:10553000FAC4FF7418971695682C50C96816680944 +:1055400050E81494512CFAE5000851596E9558050D +:10555000C091310CF01F004799358F9C9915992502 +:1055600099056E9972085808C0F0721A911A301A8B +:105570007219F4090949109B91290E9CF01F003EF5 +:105580006E9830099109402810945808C064F1D8E9 +:10559000C01F50283018C02830088D08FC1C7FF030 +:1055A00040260C98E6187FF01838C1C1E068270F34 +:1055B000415B9708403A580AC061EDD6C014C0312B +:1055C0004AECC0284AEC41295809E08005DEF8C8B9 +:1055D000FFFD3009118AF20A1800C190F8C8FFF8DF +:1055E000C168FAEA00083008FAEB003C3009F01F05 +:1055F0000025C1103018415A950841294A285809F8 +:10560000C041109CE08F05C1109C2FF841258B08EC +:10561000E08F05BBFAC8FF9CFAC9FFA0FAEA003C7C +:105620000E9CEBD6C28BF01F001918935805C0D002 +:10563000FAEA003C3004F1DBC014EAC503FF109B1A +:105640005174EA1B3FF0C3284188419C100CF8C5F7 +:10565000FBCEE0450020E08A001BF8CCFBEE403B8F +:10566000EA081140F60C0A4CEC0809460C4CC148FB +:105670008002E2A4800364208003F3708003F37C43 +:1056800080036F328003A6C0800364D0EA0C11202F +:10569000403AF40C094CF01F006BFC18FE10301956 +:1056A000EAC50433F00B000B51793008FC193FF8C0 +:1056B000F01F0065E0684361EA18636FE06987A73F +:1056C000EA193FD2F01F0061E068C8B3EA188B60A6 +:1056D000E0698A28EA193FC6F01F005D0A9C149011 +:1056E0001691F01F005CE06879FBEA18509FE069B2 +:1056F0004413EA193FD3F01F005514981699009AE5 +:10570000029BF01F005314901691F01F00533008B5 +:1057100018963009009A029BF01F0050C0C00C9CE4 +:10572000F01F004C14981699009A029BF01F004C31 +:10573000F7B600015966E088000530185148C128C5 +:105740004C88FAEA003CF0060238F01F0044F9B435 +:105750000000FBF40A14F7B60101F9BC0100FBFCE0 +:105760001A14419020100A10C04650403000C04822 +:10577000300B5C30504BEC0211005806FBFA400431 +:10578000F5D6E40AFBFA4A04FBF64A11F9B2040022 +:10579000E1D6E510F9B90500FBF95A1140C858984F +:1057A000E08B00205858F9B40A01FBF5900CF7B5CE +:1057B0000904FBF59A0CF9B4090040CC583CC2D05E +:1057C000E0890005582CC101C18840CB584BC0600E +:1057D000585BC0A1301A50DAC228301950D9C0F82D +:1057E0003008301450C83FF5301C300B509550DC59 +:1057F0000A91312850EBC208300A50DA40E95809C2 +:10580000E089000730185098109150E8C15840E5E1 +:1058100050950A910A98C108300C50DC40EBEC0B13 +:10582000000B509B16982FF85808E089000510913E +:105830003018C028109130096E9A95193049C178F6 +:1058400080036E4A80036B7C800369A480036D181B +:1058500080036E5280036E2480036FC080036F321A +:105860008003F38C6A1AA1792FFA8B1A6E95F2CA0B +:10587000FFEC103AFE98FFF86A1B0E9CF01F0053D5 +:1058800058E15F888B0CF1E400046E987008508832 +:10589000E08001985806E08A0040F3D6C0044CC866 +:1058A000F0090234FAE50018EC041404EDB4000425 +:1058B000C0303025C0F84C78F0E80020FAEA003C0F +:1058C000E9D4C004F01F0044303514981699FAE961 +:1058D00000084C0C50A30C931896C0F8FAEA001874 +:1058E000EDB40000C081ECE800002FF5F01F003B94 +:1058F000FAEB0018A1542F865804CF11FAE80018CB +:10590000FAEA00080696F01F003440A3149816998E +:10591000FAE90008C2D8EC081100C0313025C2886D +:105920004ACCF0041404501CF1D8C0044A89FAEAA5 +:10593000003CF2080238F01F0029401C506330255B +:105940000C93FAEB00081896C0F8FAEA0008EDB4D8 +:105950000000C081ECE800002FF5F01F0020FAEBFA +:105960000008A1542F865804CF1106964063414A7F +:10597000580AC370FAE8000858015F94FAE9001861 +:105980003008FC193FF0FAEA0018F01F0015F9BCC6 +:105990000000F9BC0101E9EC000CC2304098580845 +:1059A000E08A010C3008FC194024ECC40001FAEA3A +:1059B00000182FF55064F01F0009409414981699B0 +:1059C000FAE90008C1080000800364588003F38CE2 +:1059D0008003F45480037028800369A480036FC09F +:1059E000506602940A9CF01F0069FAE80008F01F54 +:1059F00000683008FC19401CF01F006614981699C6 +:105A0000FAE90028FC18FCC040A5100550A5580470 +:105A1000C211FAEA00083008FC194014F01F005EB9 +:105A200040BCFAEB000814981699189A0A9BF01FCC +:105A3000005BE08102740A9840B9EE188000FAEA2F +:105A40000008109512980A99F01F0054E081025E38 +:105A5000CB484D39E8C8000140D55805C4F0300C9A +:105A6000F2080238513C300AFC1B3FE0F01F004DA9 +:105A7000FAE800284085F01F0048FAEB0028FAEA0F +:105A80000008F01F0049516CF01F0040149816994F +:105A9000FAEA0008F01F0040FAEB000841682D0800 +:105AA0000AC841392FF95139FAE80028F01F003BA4 +:105AB000E081035AFAE80008300AFC1B3FF0F01FAF +:105AC0000036FAE80028F01F0035FAEA002830080E +:105AD000FC194024E08100E8413C083CC6E4F01F8A +:105AE000002C3008FAEB0028FC194024FAEA0008E0 +:105AF000F01F0027FAEB0008CC3B40850805F208B0 +:105B0000023A5135FAE800284085F01F0021FAEBEF +:105B10000028FAEA0008F01F0024516CF01F001B57 +:105B200014981699FAEA0008F01F001BFAEB000817 +:105B300041682D080AC8413C1835C3713008FC196A +:105B40003FE0FAEA0028F01F00134085FAE8000859 +:105B50000805F01F0012E08100A7FAE80028300ACB +:105B6000FC1B3FE0F01F000C14981699FAEA00089D +:105B7000F01F000AC22033090A98117AF20A1800AD +:105B8000E08102F21095CF9B80036E52800369A4DE +:105B900080036D1880036B7C80036FC08003F38CDF +:105BA0008003702880036E243008FC194024F01F05 +:105BB0000056FAEB0008CAEBFAEA003CFAEB0008E0 +:105BC00058E65FAB418A3008F40911FFF7E903F9A1 +:105BD000F0091800E080008140EA58015FA9F3EA6B +:105BE00003F94CAAF4060234FAE50010F009180093 +:105BF000C1405801E081018A3008FC194014089A1C +:105C00000A9BF01F0041FAE80008F01F0041E08104 +:105C1000017D0292E08F018540853014FAE8001082 +:105C2000FAEA0008F01F003BF01F003B1892F01F3B +:105C3000003BFAE80010F01F003414981699FAEAB5 +:105C40000008F01F0037FAEB0008E4C8FFD00AC8CC +:105C5000FC19402430080234C331FAE80008F01F70 +:105C600000311691149014980299FAEA0010F01F6E +:105C7000002EC1A1FAE80010009A029BF01F002B31 +:105C8000E0800271E5D2C001C0F1E08F026C408A71 +:105C90001438C0301095C098330840892FF6B28868 +:105CA0004088C088406633990A98117AF20A180031 +:105CB000CEF0506611892FF9B089E08F0255F01FA0 +:105CC00000122FF4FAEB000830083009F01F00171B +:105CD000CA60E08F024840D85808C0510498009527 +:105CE00040D4C4A840C55815E08900224174580426 +:105CF000C040F4C9FBCDC0484199F209113604985F +:105D00000095C2F8800369A48003F38C80036F5868 +:105D10008003702880036E2480036E5280036B7CA6 +:105D200080036D1880036FC080036F32E2C80001EA +:105D30005801E0051740E2091740E1D1E515F9B92E +:105D400005001032E5D8E418F1D2E518E5D8E502EF +:105D5000FBFC5011F9D8E50CFBFC5A11F9B8050011 +:105D6000404B120B5008504B1200301B0E9CF01F82 +:105D7000010840081894404A58055F99580A5F9AEC +:105D8000F5E90009C080404CF8050D49121C1210BD +:105D9000504C12155802E08A002740DB580BC1D046 +:105DA0005808E08A0017109A5008089B0E9CF01FB4 +:105DB00000F9069A189B18940E9CF01F00F718998A +:105DC000069B50190E9CF01F00F5401940081293D5 +:105DD000E408010AC080C028049A069B0E9CF01FAC +:105DE00000ED1893301B0E9CF01F00E9411A189229 +:105DF000580AE08A0007189B0E9CF01F00E61892D4 +:105E000040C95819E089001440385808C101402998 +:105E1000F1D9C014C0C11298E6187FF0C080404C80 +:105E2000301B2FFC2FF0504C506BC038300A506A9A +:105E300041195809C031301CC09864482FC8E40883 +:105E4000032CF01F00D7F80C1120404BF80B000872 +:105E5000F1D8C005C0C0F00811205848E08A0006FB +:105E60002048100B504BC0785848C070404A2E480C +:105E7000100A504A100010055800E08A0008069BDE +:105E8000009A0E9CF01F00C7189340495809E08AF9 +:105E90000008049B129A0E9CF01F00C21892414801 +:105EA0005808C1B0049B069CF01F00BFC164069B4C +:105EB000300930AA0E9CF01F00BD2016189340DC5C +:105EC000580CC0314091C098089B4091300930AACD +:105ED0000E9CF01F00B6189458015FA940CB582BB8 +:105EE0005F98F3E80008C2505801C111049B029961 +:105EF000305A0E9CF01F00AD1892189B069CF01FA4 +:105F000000AAE089000FC0383002049440EA30094A +:105F10005CDA4085506A5049C0F9089240660494A2 +:105F20002FF65066331840850AC830085048C049DB +:105F300040DC580CE08000B55805E08A0008089B5A +:105F40000A9A0E9CF01F00971894406B580BC031B2 +:105F5000089CC138681B0E9CF01F0095684A189574 +:105F6000E8CBFFF42FEA2F4CA36AF01F00920A9BA4 +:105F7000301A0E9CF01F008B5044403A3019F5DA6D +:105F8000C001189450DA40855099502650E1049B86 +:105F9000069CF01F0089404BF8C0FFD0069CF01F04 +:105FA0000082089A506C049B0E9CF01F008418918C +:105FB00078385808C0303016C068189B069CF01F0F +:105FC000007A18960E9C029BF01F007440CCEDECFA +:105FD0001008C0D140DB580BC0A14026E04000397A +:105FE000C300406A580AE0890024C2F84069580991 +:105FF000C085129840CC1848C1D140DB580BC1A1D4 +:106000000C9940265809E08A0021069B301A0E9C04 +:10601000F01F0064049B1893F01F0063E0890006E2 +:10602000C141EDB00000C111E0400039C0A02FF027 +:10603000C0C85806E08A000C4026E0400039C04144 +:1060400033980AC8C6782FF00AC0C7580AC0409AC9 +:1060500040E9123AC430069B300930AA0E9CF01F6A +:106060000053404818930838C091109B300930AA5B +:106070000E9CF01F004E504CC0E8404B300930AA37 +:106080000E9CF01F004A089B504C300930AA0E9C11 +:10609000F01F00461894409C2FFC509CC79B301862 +:1060A0000690408508930C941096049B009CF01F6A +:1060B00000422D0C0ACC0236C0A4009B300930AA45 +:1060C0000E9C2FF6F01F00391890CF0B0896300B5E +:1060D0000694504B00931890C0284026069B301A17 +:1060E0000E9CF01F0030049B1893F01F002FE089D6 +:1060F0000012C1B1E1D0C001C0D1C17840891238CD +:10610000C0301095C0882FF650663318408CB88880 +:10611000C138339A0A981179F4091800CF002FF981 +:10612000B089C0981095C02833090A98117AF20AEC +:106130001800CF905066049B0E9CF01F0018580466 +:10614000C120404B083B5F19580B5F18F3E800086B +:10615000C0400E9CF01F0011089B0E9CF01F000F0A +:10616000C02850660E9C069BF01F000C3008AA88C1 +:106170004068415A2FF841299508408C5809FBF88E +:106180001012F1F51A002E6DD8320000800368005D +:10619000800368A0800366F88003642080036300A6 +:1061A00080036664800363EE80036818800364588C +:1061B0008002E736800354088003658C5EFC5EFC39 +:1061C000D42118961697580BC0311695C508F01FA4 +:1061D00000295806C0706C685808C0410C9CF01F1C +:1061E00000264A681037C0316C07C0A84A481037EB +:1061F000C0316C17C0584A381037EDF700028E696D +:106200003008F0091900C051F01F001F3005C2F816 +:106210000E9B0C9CF01F001D6EC818955808C0609E +:106220006E8B0C9C5D18F9B505FF8E68EDB8000704 +:10623000C0516E4B0C9CF01F00166EDB580BC0A0BB +:10624000EEC8FFBC103BC0400C9CF01F0011300892 +:106250008FD86F2B580BC0700C9CF01F000D3008AE +:10626000EF4800483008AE68F01F00070A9CD822AB +:1062700080031E7480031F388003EF2C8003EF4CD3 +:106280008003EF6C80031E7680031D2C8003217C2D +:10629000D4014848189B700CF01F0003D80200007E +:1062A00000000598800361C0D42116981897109CAF +:1062B00030084876149B8D08F01F00065BFCC05127 +:1062C0006C085808EFF81A03D822000000008CC4AC +:1062D0008002F198D42116981897109C3008149BCE +:1062E0004866129A8D08F01F00065BFCC0516C08CE +:1062F0005808EFF81A03D82200008CC48002F1205D +:106300001898E01C0000F0091510580CF20817004E +:10631000F9BC0010F9BC0100109AF0091508E61A42 +:10632000FF00F7BC00F8F2081700109AF0091504F6 +:10633000E61AF000F7BC00FCF2081700109AF0090A +:106340001502E61AC000F7BC00FEF2081700580854 +:106350005E5CEDB8001EF9BC0120F7BC00FF5EFCDE +:1063600018997808F9D8C003C150EDB80000C021D1 +:106370005EFD109BF00A1601E21B0002A388580B79 +:10638000F3FA1A00F9BC0101F3F80A00F9BC0002A3 +:106390005EFCF5D8C010F00B1610580AF60817006E +:1063A000F9BC0010F7D8C008F00A1608580BF7BC63 +:1063B00000F8F4081700F7D8C004F00A1604580BC8 +:1063C000F7BC00FCF4081700F7D8C002F00A160268 +:1063D000580BF7BC00FEF4081700EDB80000C060D1 +:1063E000A198C031320C5EFC2FFC93085EFCD401F6 +:1063F00018987649784C121CC1312FB9A369120B39 +:10640000F00900092EC8134E174A143EC060F9BCAB +:1064100003FFF9BC0201D8021039FE9BFFF6D80237 +:10642000D4211897169578965806C091310CF01F14 +:10643000000A99368F9C9916992699065805C0909E +:106440006A196E987038F009032A8B0AF009092539 +:10645000D82200008002E2A4D421189716967895DD +:106460005805C091310CF01F001999358F9C991572 +:10647000992599056E956A385808C0B1310A304B94 +:106480000E9CF01F00138B3C6E98703C580CC1B0F2 +:106490006E987038F0060028700C580CC0407809CF +:1064A0009109C0E80E9C30170E9BEE060947EECA14 +:1064B000FFFBA36AF01F0006C060991699273008F9 +:1064C00099389948D82200008002E2A48002DC5466 +:1064D000D431202D1693129610951492301BF01F74 +:1064E0000029F3D3C0145009F1D3C01FF0011614D2 +:1064F000FC1A0010F3DAE139FBF91A00189458027B +:10650000C1E0FACCFFF818D2F01F001F4018C0D02D +:106510004009F80A1120F20A094AF5E810088958DA +:10652000F20C0A495009C028895840085808F9B3A4 +:106530000102F9B3000189688943C0981A9CF01FD1 +:106540000012301340082E0C894389585801C0901E +:10655000E2C1043318018D01F80C11358B0CC0D841 +:10656000E6C8FFFCF8CC0432A5738D0CE808032CB8 +:10657000F01F000618138B03089C2FEDD832000083 +:10658000800364588003636080036300D4317448DF +:106590007645169714961015C1312FB8EECEFFEC44 +:1065A000A368F408000BEE080008114A1749123AD4 +:1065B000C030C0E2C0781C38FE9BFFF9C4A8580563 +:1065C000C0640E9830150C971096C02830056E1BCD +:1065D000F01F00246E496C4499352FB4F2C5FFFBBF +:1065E000EC040024EE0500252EC62EC7F8C8FFECEB +:1065F000300A0F0E0D0BFC021610F6031610FDDE0E +:10660000C010E4030103F7DBC010FC0B010BF60A1A +:10661000000AB01AB14AE60A000AB00A2FC8B14A05 +:106620000836CE83C0D80F0BF60E1610F7DBC0105D +:10663000160AB01AB14A1C0AB00A2FC8B14A0A3762 +:10664000CF33C0282019114A580ACFD09949D832DF +:10665000300BF01F00043018994830089958D83290 +:1066600080036458D43116977646F40214052FF649 +:10667000149318940406761B6E28C0382FFBA1785B +:106680001036FE99FFFD089CF01F001A300918957E +:10669000F8C8FFEC129AC03810AA2FF90439CFD5E8 +:1066A0006E4BE7D3C0052FBBEEC9FFECEE0B002B02 +:1066B0005803C130E60C1120300A7202E40309428B +:1066C000044A10AA130AF40C0A4A1639CF73910A25 +:1066D000580AC0702FF6C058130A10AA1639CFD323 +:1066E000089C20160E9B8B46F01F00030A9CD83294 +:1066F0008003645880036420D431202D7649744887 +:10670000169614951039EC081750EA061750F00544 +:1067100017506C2876437442761BE4030007103749 +:10672000F7BB09FFF01F0036EEC4FFFBF8C9FFEC12 +:10673000F8040024300A1298C02810AA0838CFE3C1 +:106740002FB32FB2EC030023EA020022ECCBFFECC4 +:106750005012EACAFFECC44894955805C20012983A +:106760001696300E50090D02E400161070017009E3 +:10677000B181E5D2C010E0050341AB32E1D9C010D0 +:106780000002E40E000EB01EB18E1C01B001E20E3C +:1067900016102FC80636CE834009910E94865806EF +:1067A000C1D072021298169E3005B0121D0190825F +:1067B000E1D1C010AD30E0020002E4050005B005F3 +:1067C000B185B1812FC8AD319092E20200020A0278 +:1067D000E4051610063ECEA391022FCA2FC9401819 +:1067E000103ACBB3C02820175807E08A00050948A3 +:1067F0005808CFA099472FEDD83200008003645885 +:10680000D4211697301BF01F00043019995799496D +:10681000D822000080036458D431300812951697AE +:1068200018967644F6C9FFEC720BF60C1610F7DBDF +:10683000C010F40C024CF40B0345F7D5C010B18521 +:106840001805EA0C1510F80B000B12AB2FF8B185E8 +:106850000838CEB55805C1D06E281034C1456E1B1E +:106860000C9C2FFBF01F000C6E4AEECBFFF418932C +:106870002FEA2F4CA36AF01F00090E9B0C9CF01FFF +:1068800000080697E8C8FFFF2FB48F48EE040925DB +:106890000E9CD832800364588002E736800364205F +:1068A000D431149618971694F1DAC002C0902018CB +:1068B0004A19F208032A3009F01F00201894A34651 +:1068C000C3706E955805C091310CF01F001D9935AD +:1068D0008F9C9915992599056E9366255805C0D109 +:1068E000E06B02710E9CF01F0017872C3008189582 +:1068F0009908C038069C1895EDB60000C0C1089BE9 +:106900000A9A0E9CF01F0010089B18930E9C069488 +:10691000F01F000EA156C0C06A035803CEC10A9AE8 +:106920000A9B0E9CF01F00088B0C9903CE5B089C01 +:10693000D83200008003F380800368188002E2A44C +:1069400080036800800366F880036420D4211698D1 +:106950001897109C3008149B4866129A8D08F01FF7 +:1069600000065BFCC0516C085808EFF81A03D822E7 +:1069700000008CC48002F1381498FC197FF0F5DB1C +:10698000C01FF00B1100F7E81008F5E813F8F20843 +:106990000108F00C1100F9E81008F00C141F2FFC8E +:1069A0005EFCD703F5EB101CE08000DCD421F7E996 +:1069B000200EEFDBC28B3015C430AB6BF7EA136BE4 +:1069C000AB6AF7D5D3C2EDD9C28BC5C0A1785CF94B +:1069D000F3D5D2ABE04707FFC770E04607FFC740DB +:1069E000EE06000CE02C03FEF6080644F40907440A +:1069F000F4080646F609064A0807F405004A5C0B47 +:106A0000EDBB0014C050A1775CFA5CFB201C580C55 +:106A1000E08A006FE04C07FFE084009CF7DCD28B3B +:106A2000EDEA11F6EFE61217EE178000F1B7042039 +:106A30000E0A5C0BEDBE001FEFBB001FD822E41B4B +:106A4000000FF40C1200F6061200F7BC03E1F80682 +:106A50001730F7B60201E0460020C0D4EC0C11203C +:106A6000F606094BF40C0A4C184BF406094A20B6FA +:106A70000C17CAABF406094BC640300A20B60C17F7 +:106A8000CA3BE419000FF00C1200F2051200F7BC2B +:106A900003EAF8051730F7B5020AE0450020C0D434 +:106AA000EA0C1120F2050949F00C0A4C1849F005CE +:106AB000094820250A16C8FBF0050949C4203008FA +:106AC00020250A16C88BE419000FE41B000F144B95 +:106AD0001049E04707FFC091580BC381E04607FF0C +:106AE000C3815809C360C3285809C330C2F85C3C4D +:106AF0002FFCF1BC04C0E04C0020C114F8081120A8 +:106B00000E46EE0C0A47F40809491247F40C0A4AEB +:106B1000F6080949124AF60C0A4BC83BF80811203E +:106B2000F9B90000C030F60809490E46EDEA101622 +:106B3000F40C0A4AF3EA1007F60C0A4A300BC71B9A +:106B40001C9BE61B8000300AD8223FFB3FFAD8226C +:106B5000F06B0000EDBE001FEFBB001F300AD82213 +:106B6000F7E9200BE61B8000F9D9C28BE04C07FF48 +:106B70005E1C3FFA3FFB5EFCEE198000F7E9200C3B +:106B8000E08600CAEBCD40E0169CE61C8000BFDB2F +:106B9000BFD9103AF20B1300C0921697129B0E99B0 +:106BA0001497109A0E98EE1C8000F6071614AB7B13 +:106BB000F7EA135BAB7ABFBBF2061614C440AB799D +:106BC000F3E81359AB78BFB9E04707FFC4F00E26CE +:106BD000C120EC051120E0460020C7C2F005094E97 +:106BE000F2050945F0060A48F2060A490A48580E15 +:106BF0005F1E1C48101AF609014BF6061200C0E091 +:106C0000C783EC0E1120F606094BF40E0A4E1C4BFE +:106C1000F406094A0C17E08A0039F4091515AB9AF5 +:106C2000F5EB115AAB9BF7D7D28B184BFC178000B2 +:106C3000EDBA0000F7B701FF0E395F29120A5C0BAD +:106C4000E3CD80E0AB79F3E81359AB78F3E8100EAD +:106C5000F9B60101EE0E1100F9B70001EFBB001FFC +:106C6000F7EA100EF9B70000CB0BBFDBF7EA100E06 +:106C7000C081E04607FFC050F9E7114BE3CD80E04B +:106C80003FFA3FFBE3CD80E05C372FF7F1B704C05C +:106C9000E0470020C114EE081120F40809495F16EE +:106CA000F4070A4A0C4AF6080949F5E9100AF407FC +:106CB0000A4B3007CB3BEE081140F608094914494E +:106CC0005F16F6070A4A0C4A300B3007CA7BE3CD41 +:106CD00080E0F1B604C0F00E1700C040F205094E86 +:106CE000104EF2060A483009580E5F1E1C48C83B79 +:106CF000F4061200F9B70300F9B60300F9BC03006B +:106D0000F7B602E0F406094B300A0C17FE9AFFBEF4 +:106D1000C85B0000EE198000F7E9200CFE96FF2EFC +:106D2000EBCD40E0169CE61C8000BFDBBFD9123BD8 +:106D3000C0721697129B0E991497109A0E98300EE7 +:106D4000EFDBC28BF7DBC014B5ABEDD9C28BC5F05E +:106D5000F3D9C014B5A9E04707FFC2500E26C0F012 +:106D6000EC051120E0460020C352F005094EF20563 +:106D70000945F0060A48F2060A490A48100AF609C7 +:106D8000004BEDBB0015C340F7D7D28B184BF9DA97 +:106D9000C001184EEE1E8000F1BE04201C0A5C0BE0 +:106DA000E3CD80E0B5CBF7EA100EC101E04607FF66 +:106DB000C030E3CD80E0B5C9F3E8100EC071300AF1 +:106DC000FC1B7FF0184BE3CD80E03FFA3FFBE3CDA7 +:106DD00080E0F1B604C0F00E1700C060F205094E65 +:106DE00058085F18104EF2060A483009CC8BFDEEA9 +:106DF000101EA19B5D0A5D0E2FF7E04707FFF9BA51 +:106E00000000F9BB0000F9BE0000CBFB30165807AC +:106E1000CA31B5CB100AF609004B184BE3CD80E020 +:106E2000580B5E6DF60C1501B59CE02C03FF5E3D22 +:106E3000F80C111F1699AB7BBFBBF7EA135BF60C7E +:106E40000A4BA1795E2B5C3B5EFBF8CB0000300C5B +:106E5000C038189B5C4B300A5E0BD401E069041EFD +:106E6000F6081200C170C0C3F00E1120F608094BDD +:106E7000F40E0A4E1C4BF408094A1019C0B8F40865 +:106E80001200F9B80300F7B802E0F408094B300A21 +:106E900010195809E08900305C392FF9E0490036B3 +:106EA000C043300B300AC2682F69F2081120E04954 +:106EB0000020C0B2F408094EF6080948F4090A4A4D +:106EC000F6090A4B104BC088F608094E144E169A64 +:106ED000300BF4090A4AEDBA0000C0921C7EC04192 +:106EE000EDBA0001C0422FFAF7BB02FF5CFC5D0B5C +:106EF0005D0AD802E06803FFEDBA000BF7B800FFA7 +:106F0000100A5C0BF7B903FEE04907FFC055300AD1 +:106F1000FC1BFFE0C0C8EDBB001FF7B90101AB9A35 +:106F2000F5EB115AA17BAB9BF7E9115BA17C5D0BE3 +:106F3000D802103AF20B1300C080A17BA179144B48 +:106F4000124B104B5E0F5EFDA17BFC1CFFE0580A4C +:106F5000F80B13005E8F5EFD1ADE1AD7A17B5F3C33 +:106F6000A1795F375CFCFC1EFFE0580AFC0B1300A4 +:106F7000E08B001D5808FC091300E08B0018580B2B +:106F8000F5BA0000C1501B071B0E583CC0A0581C8E +:106F9000C0335E0F5E1D103AF20B13005E2F5E3D94 +:106FA0001438F60913005E2F5E3D1B07D80A5817E8 +:106FB0005F0C5809F5B800001B071B0E5E0F5EFC46 +:106FC0001ADE1AD7A17B5F3CA1795F375CFCFC1EFF +:106FD000FFE0580AFC0B1300E08B001D5808FC0969 +:106FE0001300E08B0018580BF5BA0000C1501B07C6 +:106FF0001B0E583CC0A0581CC0335E0D5E1F103ADB +:10700000F20B13005E2D5E3F1438F60913005E2D5F +:107010005E3F1B07D80A58175F1C5809F5B80000D7 +:107020001B071B0E5E0D5EFCEBCD40FFF7E9200E4B +:10703000F6071614A97BF7EA137BA97ABDBBE41BFC +:107040003FFFABD7E08000CCE04707FFE08400B50E +:10705000F2061614A979F3E81379A978BDB9E419F1 +:107060003FFFABD6E08000E2E04607FFE08400B2DD +:107070000C17FE37FC01FC1C8000F8031601E9D94F +:10708000C3625CD4E7D4D382E6090644F80501253F +:10709000E6050644EA031502E6090644F80501255B +:1070A000E6050644EA031502E6090644F80501254B +:1070B000E6050644EA031502E6080640E40907402F +:1070C000E609064402045C05A365EBE413E5A3644A +:1070D0005C34F8050145E6040640E4050740E60592 +:1070E000064402045C05EA031502E7E413E3E80240 +:1070F0001502E6080640E4090740E60906440204D2 +:107100005C05A365EBE413E5A3645C34F805014575 +:10711000E6040640E4050740E605064402045C0573 +:10712000EA031502E7E413E3E8021502E60A064063 +:10713000E40B0740E60B064202025C03EDB3001CC1 +:10714000C090A1725CF32017A39AF5EB11DAA39B10 +:10715000C058A58AF5EB11CAA58B5807E08A008BA9 +:10716000E012FF00E8120080E6080640E40907404C +:10717000E4080644E60906480005F00100485C09F9 +:10718000F9D2C10158045C25F4081300F609130074 +:107190005F36F8061700E40A1608F5E3118AE60BD5 +:1071A0001608F7D7D28BEDBE001FEFBB001F0C0AED +:1071B0005C0BE3CD80FFE41B000F144BE08100A7C4 +:1071C000F2061614ABD6E04607FFE08100A4C9E83A +:1071D000E419000F1049E081009AC928A37BF7EA5F +:1071E00013DBA37AF5EB1004E08000A0F604120094 +:1071F000C170C0C3E8051120F604094BF4050A4527 +:107200000A4BF404094A0817C0B8F4041200F9B490 +:107210000300F7B402E0F404094B300A0817A38A0C +:10722000F5EB11EAA38BC11BA379F3E813D9A3787B +:10723000F3E81004C6F0F2041200C170C0C3E80500 +:107240001120F2040949F0050A450A49F0040948E9 +:107250000816C0B8F0041200F9B40300F7B402E055 +:10726000F004094930080816A388F1E911E8A38958 +:10727000CFCA5C372FF7F1B704C0E0470020C154F4 +:10728000EE061120E4070A42E606094C1842E6071A +:107290000A43F4060941F4070A4AF606094C184A5B +:1072A000F6070A4B3000C158EE061120F9B0000075 +:1072B000F9BC0000C050F4060940F606094CE60788 +:1072C0000A423003F4070A411841F6070A4A300B14 +:1072D000E012FF00E8120080E6080646E4090746CF +:1072E000E4080644E60906480C05F00700485C0976 +:1072F0003007F9D2C1010034E2051300C46B1C9BB6 +:10730000E61B8000300AE3CD80FF3FFB300AE3CD6F +:1073100080FFF5EB1004C0901C9BE61B8000EA1B6D +:107320007FF0300AE3CD80FFF1E91015CEF0E9D906 +:10733000C28BE04407FFCE41F1E910C5CE10CE6B01 +:10734000D4311A97202D109C1295149E16931696E0 +:107350005809C4411638E088005AF0081200C0D01D +:10736000F6080946F808094CF00B1120F408094EFC +:10737000F40B0A4BF7E61006F80A1610EBDCC01007 +:10738000EC0A0D02FC091610EA02024BF3E31109A4 +:10739000123BE08800091809123CE08B0005123B03 +:1073A000F3DCEB09F20B010BFDDEC010F60A0D0A4F +:1073B000FDEB110EEA0A024A1C3AE0880009180E99 +:1073C0001C3CE08B00051C3AFDDCEB0EFC0A010ABC +:1073D000300BF4080A4A2FEDD8321639FE9BFFFD18 +:1073E000F2091200C46114385F8B06355F3AF7EA80 +:1073F000100AF20A1800C060FC08010AE6050146FE +:10740000149E0C9B1C9A2FEDD8325808C05130198D +:10741000F2080D08109CF8081200E0810084EC0CC2 +:10742000010BF8031610EBDCC010F6030D0AFC0983 +:107430001610EA0A024AF3EB1109123AE088000931 +:107440001809123CE08B0005123AF3DCEB09141921 +:10745000FDDEC010F2030D02FDE3110EEA02024A46 +:107460001C3AFE98FFB5180E1C3CFE9BFFB1CACB20 +:10747000F20E1120EA090945F609094BE60E0A4306 +:10748000F0090941F4090942F00E0A48F40E0A4ACB +:107490000A48164AF0061610F9D8C010E6060D0480 +:1074A000F4031610089BE7E51103E80C02450635C6 +:1074B000E0880007201B10030638E0880072F5DA28 +:1074C000C0100A13E6060D04F5E51106E80C024C9F +:1074D000089A0C3CE0880007201A10060C38E08857 +:1074E000005AF5EB110B1816F601064A149C1636D5 +:1074F000C0735F0514325F3AEBEA000AC060F8011E +:107500000104F608014B089CE40C010AEC0B01464F +:10751000EC090A4BF4090A4AEC0E09460C4A2FED15 +:10752000D832F0011120F4010A4BF808094CEC089C +:107530000949EC010A41F7E91009F8031610EBDCE0 +:10754000C010E2030D00F20B1610EA00024EF7E144 +:10755000110B163EE0880006180B163CE088002749 +:10756000F60E0101F3D9C010E2030D00F3E1110999 +:10757000EA00024B123BE08800091809123CE08B3C +:107580000005123BF3DCEB09F20B010BF408094E8A +:10759000C4DB0C3CF7BA0B01EDD8EB06CA3B063551 +:1075A000F7BB0B01E7D8EB03C8BB163EF7DCEB0BD0 +:0275B000CD8B81 +:10760000C0080000C0080000C0080000C00800005A +:10761000C0080000C0080000C0080000C00800004A +:10762000C0080000C0080000C0080000C00800003A +:10763000C0080000C0080000C0080000C00800002A +:10764000C0080000C00800000000000000000000AA +:10765000C008000000000000000000000000000062 +:10766000C008000000000000000000000000000052 +:10767000C008000000000000000000000000000042 +:1076800000000000000000000000000000000000FA +:1076900000000000000000000000000000000000EA +:1076A00000000000000000000000000000000000DA +:1076B00000000000000000000000000000000000CA +:1076C00000000000000000000000000000000000BA +:1076D00000000000000000000000000000000000AA +:1076E000000000000000000000000000000000009A +:1076F000000000000000000000000000000000008A +:10770000C0080000300CF01F0012580CF80F1710C2 +:10771000D603301CF01F000E580CF80F1710D603BC +:10772000302CF01F000B580CF80F1710D603303C0C +:10773000F01F0007580CF80F1710D60300000104C3 +:107740004000011280000120C000012E8000A41C16 +:107750000000000000000000000000000000000029 +:107760000000000000000000000000000000000019 +:107770000000000000000000000000000000000009 +:1077800000000000000000000000000000000000F9 +:1077900000000000000000000000000000000000E9 +:1077A00000000000000000000000000000000000D9 +:1077B00000000000000000000000000000000000C9 +:1077C00000000000000000000000000000000000B9 +:1077D00000000000000000000000000000000000A9 +:1077E0000000000000000000000000000000000099 +:1077F0000000000000000000000000000000000089 +:1078000073656E645265706C790000006765745F23 +:10781000646174615F7463705F636D645F63620071 +:107820006765745F7265706C795F686F73745F62AF +:10783000795F6E616D655F63620000006765745F0C +:107840007265706C795F7363616E5F6E6574776F7C +:10785000726B735F636200006765745F7265706C62 +:10786000795F6964785F6E65745F63620000000031 +:107870007365745F706173737068726173655F6361 +:107880006D645F63620000007365745F6B65795FB0 +:10789000636D645F6362000063616C6C5F7265704E +:1078A0006C795F6362000000617661696C5F64619E +:1078B00074615F7463705F636D645F636200000096 +:1078C0007365744D6170536F636B4D6F6465000039 +:1078D0006765745374617274436D6453657100001D +:1078E0007365745F6E65745F636D645F63620000EF +:1078F0007365745F69705F636F6E6669675F636D00 +:10790000645F63620000000073656E644572726FAD +:107910007200000073746172745F736572766572D1 +:107920005F7463705F636D645F6362007370695F4F +:10793000736C61766552656365697665496E74003E +:107940006765745F636C69656E745F737461746599 +:107950005F7463705F636D645F63620073656E6420 +:107960005F646174615F7564705F636D645F6362BF +:1079700000000000636865636B4D7367466F726D4E +:107980006174000073746172745F7363616E5F6E23 +:1079900065745F636D645F6362000000666F756E9F +:1079A00064486F737442794E616D65007365745FEE +:1079B0006B65795F636D645F63620000696E697413 +:1079C0005370690073746172745F636C69656E747F +:1079D0005F746370000000007370695F706F6C6C9F +:1079E000000000006765745F726573756C745F6397 +:1079F0006D645F636200000073746F705F636C6935 +:107A0000656E745F7463705F636D645F63620000D2 +:107A100073746172745F7365727665725F7463709C +:107A2000000000007365745F706173737068726149 +:107A300073655F636D645F63620000007365745F0C +:107A4000726573756C745F636D6400007365745F59 +:107A5000646E735F636F6E6669675F636D645F63B7 +:107A6000620000006765745F73746174655F7463BE +:107A7000705F636D645F6362000000007265715F38 +:107A80007265706C795F686F73745F62795F6E6145 +:107A90006D655F636200000073746172745F636C94 +:107AA00069656E745F7463705F636D645F636200C9 +:107AB000572D5B25735D2057726F6E67207465725A +:107AC0006D696E6174696F6E20696E6465783A25C0 +:107AD00064206E506172616D3A2564206964783A61 +:107AE00025642031366269743A25640A000000007A +:107AF0003078257820000000572D5B25735D2049E4 +:107B00006E646578206F7574206F662072616E6791 +:107B1000653A2025640A00005B25735D20535349B4 +:107B2000443A25730A0000005B25735D20525353CD +:107B3000493A25640A0000005B25735D20454E43E9 +:107B4000543A25640A0000005B25735D205365618B +:107B5000726368696E6720666F7220486F73743A4B +:107B60002069703D3078257820666F756E643D25FC +:107B7000640A00005B25735D20666F756E64486F54 +:107B8000737442794E616D653A20466F756E64205C +:107B9000486F73743A206E616D653D25732069707E +:107BA0003D307825780A00005B25735D20696653B7 +:107BB00074617475733A256420726573756C743AD8 +:107BC00025640A004C69737420436F6D6D616E64A7 +:107BD000732066756C6C210A000000005245434515 +:107BE000495645005452414E534D4954000000003F +:107BF0005B25735D204D6170205B25642C20257012 +:107C00002C2025735D0A00005B25735D20535049CD +:107C100020696E697469616C697A6174696F6E203C +:107C20006661696C65642100572D5B25735D204595 +:107C300072726F7220636F6E6669677572696E67C4 +:107C4000205350490A000000572D5B25735D202505 +:107C5000645D20446973616C6C2E2025642F25645B +:107C600020636D643A25640A00000000572D5B25EF +:107C7000735D2025645D20446973616C6C2E202542 +:107C8000640A00005B25735D3A200000572D5B25D8 +:107C9000735D2025645D204E6F7420666F756E6481 +:107CA00020656E6420636D643A20307825780A0080 +:107CB0005B25735D2025732025640A00572D5B2505 +:107CC000735D20456E64206F6620636D6420706173 +:107CD00072616D73000000005B25735D2064617448 +:107CE00061417661696C3A25640A0000572D5B2575 +:107CF000735D2054544350206E6F7420666F756E10 +:107D00006420666F7220736F636B3A25640A00000B +:107D10005B25735D20736F636B3A25642073746118 +:107D200074653A25640A00005B25735D20737461F5 +:107D300074653A25640A00005B25735D2053746105 +:107D40007274204E6574776F726B205363616E207E +:107D500025640A00572D5B25735D206572723D25F1 +:107D6000640A00005B25735D204C6F6F6B696E6762 +:107D700020666F7220486F73743A206E616D653DA6 +:107D800025730A005B25735D20466F756E6420487D +:107D90006F73743A206E616D653D25732069703D87 +:107DA000307825780A0000005B25735D2053746FDE +:107DB0007020636C69656E7420736F636B3A256421 +:107DC0000A00000055445000544350005B25735D89 +:107DD00020416464723A307825782C20706F727478 +:107DE0003A25642C20736F636B3A25642C207072E3 +:107DF0006F743A25730A0000572D5B25735D205080 +:107E0000726576696F757320636C69656E74202581 +:107E100070206E6F742073746F7070656420210A17 +:107E2000000000005B25735D205374617274204371 +:107E30006C69656E74202573202570205B30782571 +:107E4000782C2025642C2025645D204F4B210A00CE +:107E50005B25735D20537461727420436C69656E99 +:107E600074202573202570205B307825782C202500 +:107E7000642C2025645D204641494C4544210A007C +:107E8000572D5B25735D205374696C6C20636F6E96 +:107E90006E65637465642E2E2E776169740A000026 +:107EA000572D5B25735D20494620646F776E2E2E1B +:107EB0002E776169740A00005B25735D205374613D +:107EC000727420536572766572202573205B256479 +:107ED0002C2025645D204F4B210A0000572D5B2587 +:107EE000735D2053746172742053657276657220DD +:107EF0002573205B25642C2025645D204641494C78 +:107F00004544210A000000005B25735D2025702098 +:107F10006E756D506172616D3D2564207061726D8A +:107F200073546F4368616E67653D25640A00000005 +:107F30005B25735D2025645D206E69663A2570209F +:107F40006C7769705F616464723D307825780A00EF +:107F50005B25735D20257320706172616D733D2513 +:107F6000640A00005B25735D20506173733A20251D +:107F7000732025640A000000572D5B25735D2025C2 +:107F800073203A204661696C656420746F206164D7 +:107F90006420706173737068726173650A00000019 +:107FA000436F6E6E65637420746F206E6574776FB7 +:107FB000726B2E2E2E0000006572723D25640A0041 +:107FC0004F4B0A00572D5B25735D205353494420C6 +:107FD0006C656E206F7574206F662072616E6765C8 +:107FE000000000005B25735D2025730A000000007F +:107FF000572D5B25735D2053656E642053504920D7 +:108000006572726F72210A003D3D3E003C3D3D00AD +:10801000572D5B25735D20556E6B6E6F776E2063F9 +:108020006D6420307825780A00000000572D5B250C +:10803000735D2025645D20436865636B20666F7205 +:108040006D6174206D7367206661696C6564210AD7 +:1080500000000000444F574E000000005550000043 +:1080600049462020207374617475733A2025730A81 +:1080700000000000434F4E4E207374617475733AD4 +:108080002025730A00000000536F636B6574206E37 +:108090002E3A256428256429205B307825785D20D8 +:1080A000257320257320616464723A257320706FF4 +:1080B00072743A25640A00005B2564207470637052 +:1080C0002D25705D2D5374617475733A25640A0013 +:1080D0005B746C63702D25705D2D537461747573C2 +:1080E0003A25640A000000005B757063702D2570EE +:1080F0005D20666C6167733A3078257820206C6F5C +:1081000063616C3A25735B307825785D2D25640AB0 +:108110000000000072656D6F74653A257328307831 +:108120002578292D25640A004E4F0000594553003B +:108130004461746120617661696C3A25730A0000BC +:108140002D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D5F +:108150002D2D2D2D2D2D2D2D2D2D2D2D2D2D0A009F +:108160005B25735D205363616E206E6F7420636FB7 +:108170006D706C65746564210A0000005B25735D99 +:10818000204E6574776F726B73206E6F7420666F0C +:10819000756E64210A000000636F756C64206E6F59 +:1081A0007420616C6C6F6361746520616C6C206716 +:1081B0007569206E65742061727261790A00000031 +:1081C000636F756C64206E6F7420616C6C6F63619B +:1081D000746520616C6C20677569206E6574730A24 +:1081E000000000005B25735D202564202D20257391 +:1081F000205B25645D2D202564202D202564202D05 +:1082000020307825780A000D000B000C000A0000D1 +:108210007365745F726573756C745F636D64000081 +:108220008000636C800063988000637E80006398A8 +:108230008000638E80006398800063648000639890 +:10824000800063688000638A800063786174637073 +:108250005F706F6C6C5F636F6E6E00007564705F53 +:10826000737461727400000072656D6F76654E659F +:1082700077436C69656E74436F6E6E0061756470F0 +:108280005F726563765F6362000000006765745328 +:1082900074617465546370006172645F7463705FCD +:1082A00073746F7000000000617463705F636F6EC1 +:1082B0006E5F6572725F6362000000006765744EF6 +:1082C0006577436C69656E74436F6E6E4964000038 +:1082D000617463705F636F6E6E5F636C695F65721C +:1082E000725F636200000000617463705F616363CA +:1082F0006570745F636200007564705F73746172AF +:10830000740000005B25735D20747463703A2570FF +:108310002069643D25642C20747063623D25700AD9 +:1083200000000000572D5B25735D204E6F205661C5 +:108330006C696420636C69656E7420666F7220746A +:108340007463703A25700A005B25735D2025645DB7 +:1083500020747463703A257020747063623A2570DB +:108360002073746174653A2564206C7063623A25E9 +:10837000702073746174653A2564206C6566743A84 +:1083800025642073656E743A25640A00572D5B25B9 +:10839000735D20544350206E6F7420696E69746958 +:1083A000616C697A656420747463703A2570207416 +:1083B0007063623A2570206C7063623A25700A001F +:1083C000572D5B25735D204E6F2056616C696420CC +:1083D000496420666F7220747463703A257020704F +:1083E00063623A25700A00005B25735D2062756642 +:1083F0003A2570206C656E3A25640A00572D5B257E +:10840000735D2054544350205B25705D3A20636FA8 +:10841000756C64206E6F7420616C6C6F6361746541 +:1084200020706275660A0000572D5B25735D20542D +:10843000544350205B25705D3A207564705F73650E +:108440006E642829206661696C65640A000000007A +:108450005B25735D2054544350205B25702D25709F +:108460005D3A20636F6E6E65637420256420256419 +:108470000A0000005B25735D206C6566743D256411 +:10848000206C656E3A25640A000000005B25735D70 +:10849000207463705F7772697465206661696C65CA +:1084A000642025702073746174653A2564206C65BE +:1084B0006E3A2564206572723A25640A0000000055 +:1084C000572D5B25735D2074746370203D3D204EF5 +:1084D000554C4C210A0000005B25735D20747463C9 +:1084E000703A2570207063623A2570206275663A92 +:1084F0002570206C656E3A25640A00005B25735D6B +:1085000020272573270A00005B25735D20506163D7 +:108510006B65742073656E74207063623A257020F9 +:108520006C656E3A2564206475723A2564206C652A +:1085300066743A25640A00005B25735D2054544339 +:1085400050205B25705D3A20636C65616E536F63EC +:108550006B53746174655F63622025640A000000D8 +:108560005B25735D20436C6F73696E672074706365 +:10857000623A2073746174653A30782578206572A8 +:10858000723A25640A0000005B25735D20436C6F1E +:1085900073696E67206C7063623A207374617465EE +:1085A0003A30782578206572723A25640A00000016 +:1085B0005B25735D2046726565696E672070617921 +:1085C0006C6F61642025642D25700A005B25735D46 +:1085D00020436C6F73696E6720747063625B2570F3 +:1085E0005D3A2073746174653A307825782065723D +:1085F000723A25640A000000572D5B25735D204305 +:10860000616E6E6F7420636C6F73652069643A25C8 +:10861000642D2570207075742070656E64696E67B6 +:108620000A0000005B25735D202D2D2D2D2D2D2D95 +:108630002D2D2D2D2D2D2D2D2D2D2D2D2D2D2D0A8D +:1086400000000000572D5B25735D2074746370205B +:108650003D204E554C4C210A000000005B25735D07 +:1086600020666C75736820646174613A207470636D +:10867000623A2570206572723A25640A0000000093 +:10868000572D5B25735D2054544350205B25705D4E +:108690003A20636F6E6E656374696F6E20657272E7 +:1086A0006F723A202564206375727249643A2564BA +:1086B0000A00000041626F727420636F6E6E656322 +:1086C00074696F6E0A000000572D5B25735D20549E +:1086D000544350205B25705D3A20636F6E6E656376 +:1086E00074696F6E206572726F723A202564206122 +:1086F00072673A25700A0000572D5B25735D205480 +:10870000544350205B25705D3A2066726565206D8C +:10871000656D6F72790A00005B25735D20554450CA +:1087200020496E7365727420257020736F636B3AF5 +:10873000256420616464723A257320706F72743A04 +:1087400025640A00572D5B25735D20545443502047 +:108750005B2D5D3A20696E76616C6964206D6F6493 +:10876000650A0000572D5B25735D2054544350204B +:108770005B2D5D3A20696E76616C6964206E62756E +:10878000660A0000572D5B25735D2054544350202A +:108790005B2D5D3A20696E76616C69642062756656 +:1087A0006C656E0A00000000572D5B25735D205438 +:1087B000544350205B2D5D3A20636F756C64206ECE +:1087C0006F7420616C6C6F63617465206D656D6F93 +:1087D000727920666F7220747463700A0000000062 +:1087E000572D5B25735D2054544350205B25705DED +:1087F0003A20636F756C64206E6F7420616C6C6FCF +:1088000063617465207063620A0000005B25735D1C +:108810002025732C20757063623A25702025733AE9 +:1088200025640A00572D5B25735D20545443502066 +:108830005B25705D3A2075647020636F6E6E6563B2 +:1088400074206661696C65640A000000572D5B2521 +:10885000735D2054544350205B25705D3A2062695B +:108860006E64206661696C6564206572723D256482 +:1088700020506F727420616C726561647920757329 +:1088800065640A005B25735D2025732C206C6F6383 +:108890003A307825782D25642072656D3A30782538 +:1088A000782D25640A0000005B25735D20416C6C07 +:1088B0006F63207061796C6F61642025642D257071 +:1088C0000A000000572D5B25735D2054544350204F +:1088D0005B25705D3A20636F756C64206E6F742049 +:1088E000616C6C6F63617465207061796C6F616439 +:1088F0000A0000005B25735D205B747063625D2D70 +:108900002570207061796C6F61643A25700A0000EF +:10891000572D5B25735D2054544350205B25705DBB +:108920003A2074637020636F6E6E656374206661B5 +:10893000696C65640A0000005B25735D2042454652 +:108940004F52452042494E4420747463703A25705A +:10895000206C7063623A2570207063623A25700A59 +:1089600000000000572D5B25735D205454435020B8 +:108970005B25705D3A206C697374656E2066616971 +:108980006C65640A00000000572D5B25735D205361 +:108990007461727420736572766572204641494C29 +:1089A0004544210A000000005B25735D20545443B8 +:1089B00050205B25702D25705D3A206E6275663DF6 +:1089C00025642C206275666C656E3D25642C2070D4 +:1089D0006F72743D2564202825732F2573290A00A2 +:1089E0007574726C3A6E3A703A7600002573000026 +:1089F0005B25735D2041524420544350205B257019 +:108A00005D3A20616363657074206E6577205B2535 +:108A1000705D0A005B25735D206C6F63616C3A25A5 +:108A2000642072656D6F74653A2564207374617497 +:108A3000653A25640A0000007061796C6F616420FA +:108A40006E6F74206672656564210000572D5B258A +:108A5000735D2041524420544350205B25705D20BB +:108A60006172673D257020726574726965733D257A +:108A7000642061626F72740A000000005B25735D00 +:108A8000206B656570416C697665436E743A256448 +:108A9000206B6565705F69646C653A25642070655C +:108AA00072736973745F636E743A25640A00000020 +:108AB0005B25735D2041524420544350205B257058 +:108AC0002D25705D206172673D257020726574727E +:108AD0006965733D25642070656E642E636C6F73E9 +:108AE000653A2564206C656E3A25640A0000000032 +:108AF0005B25735D2041524420544350205B257018 +:108B00002D25705D2074727920746F20636C6F73F3 +:108B1000652070656E64696E673A256420657272BF +:108B20003A25642069643A25640A00005B25735D78 +:108B30002041524420544350205B25702D25705D08 +:108B4000206172673D257020726574726965733D9E +:108B500025642070656E642E636C6F73653A2564BE +:108B600020636F6E6E3A25640A000000572D5B2566 +:108B7000735D2041524420544350205B25702D25C5 +:108B8000705D206172673D25702072657472696541 +:108B9000733D25640A0000005B25735D204152444B +:108BA00020544350205B25702D25705D2074727910 +:108BB00020746F20636C6F73652070656E64696EDE +:108BC000673A25640A0000005B25735D206C656EC2 +:108BD0003A25640A000000005B25735D20736F6313 +:108BE0006B3A2564207063623A2570207062756666 +:108BF0003A2570206572723A256420627566537456 +:108C00006F72653A2570206C656E3A25640A000023 +:108C10005B25735D20617463705F726563765F636B +:108C20006220703D4E554C4C206F6E20736F636B0D +:108C30003A2564207063623A25700A00572D5B253F +:108C4000735D206572723D256420703D25700A00B9 +:108C50005B25735D205265636569766564202570C8 +:108C6000206C656E3A25640A000000006174637030 +:108C70005F737461727400007463705F73656E6417 +:108C80005F646174615F70636200000061746370AF +:108C90005F706F6C6C000000617463705F7265637D +:108CA000765F6362000000006172645F7463705FEE +:108CB000737461727400000067657446697273743E +:108CC000436C69656E7400006172645F7463705F09 +:108CD00064657374726F7900636C6F73655F636F43 +:108CE0006E6E000073656E6455647044617461005B +:108CF000696E736572744E6577436C69656E744313 +:108D00006F6E6E0061636B5F726563766564000011 +:108D10007463705F636F6E6E6563745F636200009F +:108D200073656E645463704461746100636C6F7347 +:108D3000655F636F6E6E5F7063620000636C656198 +:108D40006E536F636B53746174655F636200000000 +:108D50007463705F646174615F73656E74000000BA +:108D600061636B416E6446726565446174610000C5 +:108D7000676574417661696C5463704461746142E3 +:108D80007974650066726565744461746100000001 +:108D9000676574546370446174614279746500005E +:108DA00063616C634D657267654C656E0000000021 +:108DB000696E73657274427566000000697341766E +:108DC00061696C5463704461746142797465000038 +:108DD00066726565744461746149647800000000DE +:108DE0005B25735D202570205B25642C25645D0A5E +:108DF00000000000686561644275663D256420746A +:108E000061696C4275663D25640A000025645D2039 +:108E10007063623A2570204275663A202570204CB6 +:108E2000656E3A25640A00005B25735D20205B2592 +:108E3000645D3A206C656E3A2564206964783A2551 +:108E40006420746F743A25640A0000005B25735D2A +:108E500020417661696C61626C6564206461746153 +:108E60003A2025640A000000572D5B25735D2069B8 +:108E70006478427566206F7574206F662072616E2B +:108E800067653A2025640A005B25735D2025702004 +:108E90006964783A25640A00572D5B25735D20428A +:108EA0007566203D3D204E554C4C21005B25735D81 +:108EB0002041636B207063623A2570206C656E3AC6 +:108EC000256420736F636B3A256420646174613A92 +:108ED00025700A005B25735D206765743A25642060 +:108EE00025702025640A00005B25735D206368659A +:108EF000636B3A25642025642025700A0000000079 +:108F00005B25735D2046726565202570206F74684F +:108F1000657220627566202564207461696C3A254B +:108F20006420686561643A25640A0000572D5B255A +:108F3000735D204F76657277726974696E6720621F +:108F40007566666572202570206964783A2564210B +:108F50000A000000572D5B25735D20706275665F07 +:108F6000636F70795F7061727469616C20666169AA +:108F70006C65643A207372633A25702C20647374B4 +:108F80003A25702C206C656E3A25640A00000000BA +:108F9000572D5B25735D2041766F696420746F20C7 +:108FA0004F76657277726974652064617461205BC5 +:108FB00025642D25645D210A000000005B25735D9A +:108FC00020496E736572745B25645D3A2025703AA2 +:108FD00025642D2564205B25642C25645D0A000032 +:108FE000572D5B25735D20536F636B206F75742065 +:108FF0006F662072616E67653A20736F636B3D2503 +:1090000064000000696E736572745F70427566007B +:109010006765745F70427566000000000000E10043 +:1090200008040000000000000F01110110011301ED +:109030000E01110110010F0106000500636D645F50 +:109040007365745F69700000636D645F736574704D +:1090500061737300636D645F7374617274436C69F0 +:1090600000000000466F756E6420486F73743A20EC +:109070006E616D653D25732069703D307825780AF5 +:109080000000000075736167653A206474203C310C +:109090007C303E0A0000000075736167653A2073FA +:1090A000656E64556470205B736F636B5D0A097352 +:1090B0006F636B3A20736F636B6574204E756D62DE +:1090C00065720A00536F636B65743A2025640A0069 +:1090D0005061747465726E547970653A2025640A23 +:1090E0000000000050726F766100000031323334AE +:1090F000353637383930000046696E65546573740B +:10910000000000006F6666004465627567204F4688 +:10911000460A00007072696E740000004465627552 +:10912000672009656E61626C65643A203078257845 +:109130000A000000566572626F736520656E616299 +:109140006C65643A20307825780A000044756D70AB +:109150002009656E61626C65643A20307825780A72 +:1091600000000000504F6F6C6C2009656E61626CEE +:1091700065643A20307825780A00000044656275FD +:1091800067204F4E0A00000075736167653A2064DE +:1091900065627567203C73656374696F6E3E203C41 +:1091A0006C6576656C3E0A0973656374696F6E3A27 +:1091B00020696E69742C20636D2C207370692C20DB +:1091C000746370202C207574696C2C207761726E2A +:1091D0000A096C6576656C20203A203020286F667D +:1091E00066292C203120286F6E292C2032202876E9 +:1091F0006572626F7365290A096F723A206465624D +:109200007567207072696E742F6F6E2F6F66660AB5 +:1092100000000000696E697400000000737069004E +:1092200074637000636D00007574696C0000000069 +:109230007761726E00000000616C6C0044756D70A7 +:1092400020416C6C20427566666572730A000000EE +:1092500075736167653A2064756D7050627566203C +:109260005B736F636B5D0A09736F636B3A20736F97 +:10927000636B6574204E756D6265720A00000000B4 +:109280006E6F6E650000000044656C6574696E6702 +:1092900020574550206B6579730A0000757361672C +:1092A000653A207365746B6579203C6B65795F69FD +:1092B00064782028302D33293E203C6B6579206965 +:1092C0006E206865783E0A09206F723A20736574D3 +:1092D0006B6579206E6F6E650A000000205745505F +:1092E000206B6579206D75737420626520313020A4 +:1092F000285745502D343029206F722032362028CF +:109300005745502D31303429206469676974730AD8 +:1093100000000000776C5F61706920766572736988 +:109320006F6E2076322E372E300A00006661696C2F +:10933000656420746F20676574206D6163206164CB +:1093400064726573730A0000687720616464723A1E +:109350002025730A000000006C696E6B2073746135 +:109360007475733A20000000697020616464723A79 +:10937000202573202D2000006E65746D61736B3A9B +:10938000202573202D200000676174657761793A8C +:109390002025730A00000000697020696E746572F0 +:1093A0006661636520697320646F776E0A00000050 +:1093B00064686370203A2000656E61626C65640ABF +:1093C0000000000064697361626C65640A0000005B +:1093D000444E533A202573202D2000007573616799 +:1093E000653A207374617274436C69203C697061E2 +:1093F0006464723E203C706F72743E203C736F63F5 +:109400006B3E203C7463702830292F7564702831BE +:10941000293E0A00537461727420636C69656E742E +:10942000206F6E206164647220307825782C207063 +:109430006F727420256420736F636B202564206D28 +:109440006F64652025640A00572D5B25735D2053EA +:109450007461727420636C69656E74206F6E207025 +:109460006F727420256420736F636B2025642070F5 +:10947000726F74202564206D6F646520256420461A +:1094800041494C45440A000075736167653A207391 +:1094900074617274537276203C706F72743E203C1B +:1094A000736F636B3E203C7463702830292F7564A2 +:1094B000702831293E0A00005374617274202573AC +:1094C00020736572766572206F6E20706F727420E3 +:1094D000256420736F636B2025640A00572D5B257C +:1094E000735D2053746172742025732073657276E6 +:1094F0006572206F6E20706F727420256420736F08 +:10950000636B202564204641494C45440A00000015 +:1095100075736167653A20736574646E73205B319F +:109520002D325D206161612E6262622E6363632E63 +:109530006464640A0000000053657420444E5320A4 +:1095400073657276657220256420746F2025730A16 +:10955000000000003D3D3E20444E53313A2025732B +:109560000A0000003D3D3E20444E53323A20257310 +:109570000A00000075736167653A20676574486F7B +:109580007374203C686F73746E616D653E0A0000F1 +:1095900075736167653A207770617373203C7373EC +:1095A00069643E203C706173737068726173653EDC +:1095B0000A0000002573203A204661696C6564202A +:1095C000746F20616464207061737370687261737A +:1095D000650A000075736167653A20647061737392 +:1095E000203C737369643E0A000000002573203A32 +:1095F000204661696C656420746F2064656C6574D5 +:109600006520706173737068726173650A00000091 +:1096100075736167653A206970636F6E666967206C +:109620003C69703E203C6E65746D61736B3E203CFE +:10963000676174657761792D69703E0A00000000EA +:1096400020206F72203A206970636F6E6669672010 +:109650006E6F6E652028746F20656E61626C652088 +:1096600044484350290A00005B25735D206E6966FB +:109670003A2570206C7769705F616464723D307860 +:1096800025780A0075736167653A20636F6E6E65B1 +:109690006374203C737369643E0A0000636D645F09 +:1096A000737461727453727600000000636D645FBE +:1096B00064656C70617373004D494D4C4644000005 +:1096C0000A24200024200000617661696C61626CCC +:1096D0006520636F6D6D616E64733A0A000000006F +:1096E000202025730A000000636F756C64206E6F84 +:1096F0007420616C6C6F63617465206669726D774C +:10970000617265206275666665720A00547565202F +:109710004D61722032362032323A30393A353420B7 +:109720003230313300000000776C5F696E69745F1E +:10973000636F6D706C6574655F6362006661696C10 +:10974000656420746F20696E697420776C20636F84 +:109750006E6E206D67720000572D5B25735D205380 +:109760007069206E6F7420696E697469616C697AC2 +:1097700065640A006C696E6B20646F776E2C2072D2 +:10978000656C6561736520646863700A00000000A1 +:109790006C696E6B20646F776E0A00006C696E6B8B +:1097A0002075702C20636F6E6E6563746564207421 +:1097B0006F20222573220A007265717565737469C2 +:1097C0006E672064686370202E2E2E20000000003B +:1097D0004641494C45440A00626F756E6420746FBF +:1097E0002025730A00000000572D5B25735D20497A +:1097F0006E74657266616365206E6F74207570218A +:109800000A0000007363616E00000000636F6E6EFB +:10981000656374007365746B6579000073746174BB +:1098200075730000646562756700000064756D7093 +:10983000427566006970636F6E66696700000000BC +:10984000747463700000000077706173730000002F +:109850006470617373000000676574486F7374000F +:10986000736574444E53000073746172745372765E +:10987000000000007374617274436C6900000000A2 +:1098800073656E645564700041726475696E6F2013 +:109890005769666920537461727475702E2E2E207C +:1098A0005B25735D0A0000006F7574206F66206D84 +:1098B000656D6F72790000006661696C6564207483 +:1098C0006F207072657061726520666F72206669C4 +:1098D000726D7761726520646F776E6C6F61640A78 +:1098E00000000000436F756C64206E6F7420646527 +:1098F0007465637420776C206465766963652C20D9 +:1099000061626F7274696E670A000000496E766169 +:109910006C6964206669726D776172652064617438 +:10992000612C2061626F7274696E670A000000002A +:109930004661696C656420746F2073746172742071 +:10994000776C20696E697469616C697A6174696F9A +:109950006E0A0000312E312E3000000069705F73F6 +:1099600074617475735F63620000000002000000A0 +:1099700000B71B000800000100010000286E756C94 +:109980006C290000253032782D253032782D253095 +:1099900032782D253032782D253032782D25303211 +:1099A00078000000256C752E256C752E256C752EA3 +:1099B000256C75007373696420746F6F206C6F6E13 +:1099C0006720286D6178202564290A00257320000E +:1099D00022257322000000002052535349202564A1 +:1099E0002064426D200000002041642D486F6320F8 +:1099F00000000000202857455020656E6372797082 +:109A000074696F6E290000002028544B495020656E +:109A10006E6372797074696F6E2900002028434369 +:109A20004D5020656E6372797074696F6E29000005 +:109A3000202020002530325820000000256300003F +:109A40006E6F206E65747320666F756E640A000019 +:109A5000496E76616C6964206C656E6774680A0093 +:109A600025642E25642E25642E256400544B495010 +:109A70000000000043434D500000000057455000D7 +:109A8000776C5F636D5F696E6974000073656C6508 +:109A900063745F6E65740000776C5F636F6E6E5FFA +:109AA0006C6F73745F636200776C5F7363616E5F8A +:109AB000636F6D706C6574655F636200776C5F6582 +:109AC00076656E745F636200776C5F6D6564696173 +:109AD0005F636F6E6E65637465645F636200000050 +:109AE0005B25735D20434D3A206F7574206F6620AF +:109AF0006D656D6F72790A005B25735D20434D3A89 +:109B000020636F756C64206E6F7420726567697373 +:109B1000746572206576656E742063620A000000C9 +:109B20005B25735D20434D3A20696E697469616CF1 +:109B3000697A65640A0000005B25735D20434D3A35 +:109B400020636F6E6E656374656420746F20257387 +:109B50000A0000005B25735D20434D3A20636F6E61 +:109B60006E656374206661696C65642C2073636143 +:109B70006E6E696E670A00005B25735D20434D3A87 +:109B800020636F756C64206E6F74207374617274DF +:109B9000207363616E20616674657220636F6E6E00 +:109BA000656374206661696C210A00005B25735D42 +:109BB00020434D3A20646973636F6E6E656374650C +:109BC000640A00005B25735D20434D3A20636F6E8D +:109BD0006E656374696F6E206C6F73742C20736391 +:109BE000616E6E696E670A005B25735D20434D3AB6 +:109BF00020636F756C64206E6F742073746172746F +:109C0000207363616E20616674657220636F6E6E8F +:109C1000656374206C6F7374210A00005B25735DAB +:109C200020434D3A207363616E20636F6D706C65E5 +:109C30007465640A00000000FFFFFFFFFFFF0000E3 +:109C40005B25735D20434D3A20526F616D696E67ED +:109C50002066726F6D207273736920256420746FA3 +:109C60002025640A000000005B25735D20434D3A07 +:109C7000204E6F2063616E64696461746520666F55 +:109C8000756E6420666F7220737369642022257379 +:109C9000220A00005B25735D20434D3A206661690E +:109CA0006C656420746F20636F6E6E6563740A0068 +:109CB0005B25735D20434D3A206661696C656420C5 +:109CC000746F207363616E0A000000005B25735D92 +:109CD00020434D3A20756E68616E646C6564206542 +:109CE00076656E740A000000776C5F636F6E6E5F5E +:109CF0006661696C7572655F636200000000000157 +:109D0000000018500000000B00001854000000096B +:109D1000000018800000000F000018A400000001DF +:109D2000000018E000000001000018E4000000013D +:109D300000001810000000010000181400000001CD +:109D400000001818000000010000181C00000001AD +:109D5000000018200000000100001824000000018D +:109D600000001828000000010000182C000000036B +:109D700000001830000000010000183C0000000145 +:109D8000000018400000000100001844000000011D +:109D900000001848000000010000184C4173736572 +:109DA0007274696F6E2022257322206661696C656A +:109DB00064206174206C696E6520256420696E20C2 +:109DC00025730A002E2E2F7372632F534F4654575C +:109DD0004152455F4652414D45574F524B2F5345D7 +:109DE0005256494345532F4C5749502F6C77697051 +:109DF0002D312E332E322F7372632F636F72652FC6 +:109E0000646863702E630000646863705F6F7074D1 +:109E1000696F6E3A20646863702D3E6F7074696F6D +:109E20006E735F6F75745F6C656E202B2032202B14 +:109E3000206F7074696F6E5F6C656E203C3D2044CE +:109E40004843505F4F5054494F4E535F4C454E006E +:109E5000646863705F6F7074696F6E5F6279746558 +:109E60003A20646863702D3E6F7074696F6E735F23 +:109E70006F75745F6C656E203C20444843505F4FA3 +:109E80005054494F4E535F4C454E00006468637018 +:109E90005F6F7074696F6E5F747261696C65723A3E +:109EA000206468637020213D204E554C4C0000001A +:109EB000646863705F6F7074696F6E5F74726169FC +:109EC0006C65723A20646863702D3E6D73675F6FD6 +:109ED000757420213D204E554C4C0A006468637017 +:109EE0005F6F7074696F6E5F747261696C65723AEE +:109EF00020646863702D3E6F7074696F6E735F6F5E +:109F000075745F6C656E203C20444843505F4F5031 +:109F100054494F4E535F4C454E0A000064686370CD +:109F20005F6F7074696F6E5F73686F72743A2064EC +:109F30006863702D3E6F7074696F6E735F6F7574B8 +:109F40005F6C656E202B2032203C3D2044484350FE +:109F50005F4F5054494F4E535F4C454E0000000038 +:109F6000646863705F6F7074696F6E5F6C6F6E674B +:109F70003A20646863702D3E6F7074696F6E735F12 +:109F80006F75745F6C656E202B2034203C3D20443F +:109F90004843505F4F5054494F4E535F4C454E001D +:109FA0007265706C79207761736E277420667265B4 +:109FB00065640000646863705F6372656174655F07 +:109FC000726571756573743A206E657469662021D7 +:109FD0003D204E554C4C0000646863705F637265B1 +:109FE0006174655F726571756573743A2064686346 +:109FF0007020213D204E554C4C0000006468637079 +:10A000005F6372656174655F726571756573743ADB +:10A0100020646863702D3E705F6F7574203D3D2035 +:10A020004E554C4C00000000646863705F637265BD +:10A030006174655F726571756573743A20646863F5 +:10A04000702D3E6D73675F6F7574203D3D204E55DA +:10A050004C4C0000646863705F6372656174655F97 +:10A06000726571756573743A20636865636B2074FB +:10A07000686174206669727374207062756620630B +:10A08000616E20686F6C64207374727563742064F1 +:10A090006863705F6D736700646863705F64656CAC +:10A0A0006574655F726571756573743A206E657469 +:10A0B000696620213D204E554C4C00006468637059 +:10A0C0005F64656C6574655F726571756573743A1C +:10A0D000206468637020213D204E554C4C000000E8 +:10A0E000646863705F64656C6574655F72657175E3 +:10A0F0006573743A20646863702D3E705F6F757489 +:10A1000020213D204E554C4C0000000064686370D7 +:10A110005F64656C6574655F726571756573743ACB +:10A1200020646863702D3E6D73675F6F75742021C6 +:10A130003D204E554C4C00006E6574696620213DF3 +:10A14000204E554C4C0000007062756620705F6FA9 +:10A150007574207761736E2774206672656564007C +:10A16000646863705F62696E643A206E65746966E4 +:10A1700020213D204E554C4C000000006468637067 +:10A180005F62696E643A206468637020213D204EEE +:10A19000554C4C00726574203D3D2073697A656FA3 +:10A1A000662873747275637420646863705F6D737E +:10A1B0006729202D20444843505F4F5054494F4E4B +:10A1C000535F4C454E000000726574203D3D206495 +:10A1D0006863702D3E6F7074696F6E735F696E5F38 +:10A1E0006C656E002E2E2F7372632F534F4654579B +:10A1F0004152455F4652414D45574F524B2F5345B3 +:10A200005256494345532F4C5749502F6C7769702C +:10A210002D312E332E322F7372632F636F72652FA1 +:10A22000646E732E63000000646E73207365727633 +:10A230006572206F7574206F66206172726179009B +:10A24000646E732073657276657220686173206E28 +:10A250006F20495020616464726573732073657464 +:10A260000000000070627566206D75737420626571 +:10A2700020696E206F6E652070696563650000005F +:10A28000617272617920696E646578206F757420DF +:10A290006F6620626F756E6473000000756E6B6E82 +:10A2A0006F776E20646E735F7461626C6520656E9B +:10A2B0007472792073746174653A00006C6F636125 +:10A2C0006C686F73740000003230382E36372E32CF +:10A2D00032322E3232320000000400040004000248 +:10A2E000002000050002001E002000002E2E2F730B +:10A2F00072632F534F4654574152455F4652414D6A +:10A3000045574F524B2F53455256494345532F4CB7 +:10A310005749502F6C7769702D312E332E322F73A1 +:10A3200072632F636F72652F6D656D702E63000011 +:10A330006D656D705F667265653A206D656D207044 +:10A34000726F7065726C7920616C69676E6564000C +:10A350006D656D705F6D616C6C6F633A20747970C0 +:10A3600065203C204D454D505F4D41580000000098 +:10A370006D656D705F6D616C6C6F633A206D656DBE +:10A38000702070726F7065726C7920616C69676E95 +:10A3900065640000001C002000B0002400140020B0 +:10A3A00000080010025400002E2E2F7372632F53EA +:10A3B0004F4654574152455F4652414D45574F52C3 +:10A3C0004B2F53455256494345532F4C5749502F15 +:10A3D0006C7769702D312E332E322F7372632F6399 +:10A3E0006F72652F6E657469662E6300626F6775A4 +:10A3F0007320706275663A206C656E20213D207472 +:10A400006F745F6C656E20627574206E6578742061 +:10A410003D3D204E554C4C210000000073686F7587 +:10A420006C64206E6F74206265206E756C6C207396 +:10A43000696E636520666972737420213D206C61CA +:10A4400073742100696620666972737420213D204F +:10A450004E554C4C2C206C617374206D75737420B8 +:10A46000616C736F20626520213D204E554C4C007D +:10A470002E2E2F7372632F534F4654574152455F10 +:10A480004652414D45574F524B2F53455256494323 +:10A4900045532F4C5749502F6C7769702D312E330F +:10A4A0002E322F7372632F636F72652F7062756621 +:10A4B0002E630000286820213D204E554C4C292059 +:10A4C000262620287420213D204E554C4C2920283A +:10A4D00070726F6772616D6D65722076696F6C6105 +:10A4E000746573204150492900000000702D3E74AE +:10A4F0006F745F6C656E203D3D20702D3E6C656E07 +:10A5000020286F66206C6173742070627566206904 +:10A510006E20636861696E2900000000696E6372D5 +:10A52000656D656E745F6D61676E697475646520D5 +:10A530003C3D20702D3E6C656E0000006261642021 +:10A5400070627566207479706500000070627566CF +:10A550005F74616B653A20696E76616C6964206234 +:10A5600075660000706275665F74616B653A20699C +:10A570006E76616C6964206461746170747200004D +:10A58000706275665F74616B653A20696E76616CA6 +:10A590006964207062756600646964206E6F74205F +:10A5A000636F707920616C6C2064617461000000DD +:10A5B000706275665F636F70795F706172746961F4 +:10A5C0006C3A20696E76616C696420627566000081 +:10A5D000706275665F636F70795F706172746961D4 +:10A5E0006C3A20696E76616C696420646174617094 +:10A5F00074720000706275665F636F70793A2074E0 +:10A600006172676574206E6F742062696720656E81 +:10A610006F75676820746F20686F6C6420736F7546 +:10A6200072636500705F746F20213D204E554C4C65 +:10A63000000000006F66667365745F746F203C3DB8 +:10A6400020705F746F2D3E6C656E00006F666673E0 +:10A6500065745F66726F6D203C3D20705F66726F3F +:10A660006D2D3E6C656E0000706275665F636F7085 +:10A6700079282920646F6573206E6F7420616C6C7B +:10A680006F77207061636B65742071756575657394 +:10A69000210A0000706275665F667265653A207314 +:10A6A000616E6520747970650000000070627566E7 +:10A6B0005F667265653A20702D3E726566203E20A9 +:10A6C00030000000702D3E746F745F6C656E203D2D +:10A6D0003D20702D3E6C656E202B20712D3E746FD9 +:10A6E000745F6C656E000000702D3E746F745F6C5B +:10A6F000656E203D3D20702D3E6C656E00000000B3 +:10A70000706275665F7265616C6C6F633A20702071 +:10A71000213D204E554C4C00706275665F7265613C +:10A720006C6C6F633A2073616E6520702D3E747996 +:10A730007065000067726F77203C206D61785F75EF +:10A7400031365F7400000000706275665F7265618B +:10A750006C6C6F633A207120213D204E554C4C00AB +:10A76000706275665F616C6C6F633A206261642031 +:10A7700070627566206C617965720000636865635C +:10A780006B20702D3E7061796C6F6164202B20709E +:10A790002D3E6C656E20646F6573206E6F74206F44 +:10A7A000766572666C6F77207062756600000000D7 +:10A7B000504255465F504F4F4C5F42554653495AA1 +:10A7C00045206D75737420626520626967676572E4 +:10A7D000207468616E204D454D5F414C49474E4D98 +:10A7E000454E540072656D5F6C656E203C206D6156 +:10A7F000785F7531365F7400706275665F616C6C8E +:10A800006F633A207062756620712D3E7061796CBD +:10A810006F61642070726F7065726C7920616C6911 +:10A82000676E656400000000706275665F616C6C45 +:10A830006F633A206572726F6E656F7573207479FD +:10A8400070650000706275665F636F707920666185 +:10A85000696C656400000000010203040506070737 +:10A8600007070707070000002E2E2F7372632F5370 +:10A870004F4654574152455F4652414D45574F52FE +:10A880004B2F53455256494345532F4C5749502F50 +:10A890006C7769702D312E332E322F7372632F63D4 +:10A8A0006F72652F7463702E630000007463705FB5 +:10A8B000706362735F73616E653A20616374697679 +:10A8C00065207063622D3E737461746520213D20A4 +:10A8D000434C4F53454400007463705F7063627370 +:10A8E0005F73616E653A2061637469766520706399 +:10A8F000622D3E737461746520213D204C49535490 +:10A90000454E00007463705F706362735F73616EC5 +:10A91000653A20616374697665207063622D3E73C9 +:10A920007461746520213D2054494D452D5741499E +:10A93000540000007463705F706362735F73616ED4 +:10A94000653A207477207063622D3E73746174657C +:10A95000203D3D2054494D452D57414954000000AC +:10A960007463705F62696E643A2063616E206F6E1B +:10A970006C792062696E6420696E207374617465FD +:10A9800020434C4F534544007463705F7265637697 +:10A9900065643A206C656E20776F756C6420777201 +:10A9A0006170207263765F776E640A00756E7365FE +:10A9B0006E74207365676D656E7473206C65616B72 +:10A9C000696E6700756E61636B6564207365676DA2 +:10A9D000656E7473206C65616B696E6700000000C2 +:10A9E0006F6F736571207365676D656E7473206C2E +:10A9F00065616B696E6700007463705F7063625FAE +:10AA000072656D6F76653A207463705F7063627310 +:10AA10005F73616E652829007463705F6C6973747D +:10AA2000656E3A2070636220616C726561647920A2 +:10AA3000636F6E6E65637465640000007463705FBD +:10AA4000736C6F77746D723A2061637469766520F8 +:10AA50007063622D3E737461746520213D20434C08 +:10AA60004F5345440A0000007463705F736C6F7746 +:10AA7000746D723A20616374697665207063622D2B +:10AA80003E737461746520213D204C495354454EFA +:10AA90000A0000007463705F736C6F77746D723AB4 +:10AAA00020616374697665207063622D3E73746102 +:10AAB000746520213D2054494D452D574149540A84 +:10AAC000000000007463705F736C6F77746D723A8E +:10AAD000206D6964646C652074637020213D20746E +:10AAE00063705F6163746976655F706362730000B1 +:10AAF0007463705F736C6F77746D723A20666972FD +:10AB0000737420706362203D3D207463705F6163E5 +:10AB1000746976655F706362730000007463705FD0 +:10AB2000736C6F77746D723A2054494D452D5741BF +:10AB30004954207063622D3E7374617465203D3DFD +:10AB40002054494D452D5741495400007463705FAE +:10AB5000736C6F77746D723A206D6964646C6520F4 +:10AB600074637020213D207463705F74775F70633D +:10AB7000627300007463705F736C6F77746D723A08 +:10AB800020666972737420706362203D3D20746397 +:10AB9000705F74775F706362730000007463705F4E +:10ABA000636F6E6E6563743A2063616E206F6E6CC6 +:10ABB0007920636F6E6E65637465642066726F6D75 +:10ABC00020737461746520434C4F5345440000006A +:10ABD00053594E5F53454E540000000053594E5F89 +:10ABE000524356440000000045535441424C4953DF +:10ABF0004845440046494E5F574149545F31000083 +:10AC000046494E5F574149545F320000434C4F5311 +:10AC1000455F574149540000434C4F53494E47004C +:10AC20004C4153545F41434B0000000054494D4593 +:10AC30005F5741495400000003060C18306078004B +:10AC40008000FAFC8000FC6C8000FD4E8000FDB4AA +:10AC50008000FE368000FD4E8000FE788000FEF809 +:10AC60002E2E2F7372632F534F4654574152455F18 +:10AC70004652414D45574F524B2F5345525649432B +:10AC800045532F4C5749502F6C7769702D312E3317 +:10AC90002E322F7372632F636F72652F7463705F30 +:10ACA000696E2E63000000007063622D3E736E6457 +:10ACB0005F71756575656C656E203E3D20706275CF +:10ACC000665F636C656E286E6578742D3E70290032 +:10ACD0007463705F726563656976653A2076616C4E +:10ACE0006964207175657565206C656E67746800B0 +:10ACF000696E7365672E7020213D204E554C4C00C7 +:10AD0000696E73616E65206F6666736574210000FD +:10AD10007062756620746F6F2073686F72742100A3 +:10AD2000706275665F686561646572206661696CF2 +:10AD3000656400007463705F726563656976653A87 +:10AD4000207365676D656E74206E6F742074726910 +:10AD50006D6D656420636F72726563746C792074C5 +:10AD60006F207263765F776E640A00007463705FB1 +:10AD7000726563656976653A207365676D656E74A3 +:10AD8000206E6F74207472696D6D656420636F72DC +:10AD9000726563746C7920746F206F6F73657120B6 +:10ADA00071756575650A00007463705F726563652F +:10ADB0006976653A207463706C656E203E2072631C +:10ADC000765F776E640A00007463705F7265636516 +:10ADD0006976653A206F6F736571207463706C6576 +:10ADE0006E203E207263765F776E640A000000007A +:10ADF0007463705F696E7075743A2061637469760C +:10AE000065207063622D3E737461746520213D205E +:10AE1000434C4F53454400007463705F696E707516 +:10AE2000743A20616374697665207063622D3E73A5 +:10AE30007461746520213D2054494D452D57414989 +:10AE4000540000007463705F696E7075743A20611D +:10AE50006374697665207063622D3E7374617465F6 +:10AE600020213D204C495354454E00007463705FCF +:10AE7000696E7075743A207063622D3E6E657874E9 +:10AE800020213D2070636220286265666F72652014 +:10AE900063616368652900007463705F696E707533 +:10AEA000743A207063622D3E6E65787420213D20D7 +:10AEB00070636220286166746572206361636865EF +:10AEC000290000007463705F696E7075743A2054D5 +:10AED000494D452D57414954207063622D3E73748E +:10AEE000617465203D3D2054494D452D57414954DD +:10AEF000000000007463705F696E7075743A2070B2 +:10AF000063622D3E737461746520213D20434C4F74 +:10AF1000534544007063622D3E736E645F717565C6 +:10AF200075656C656E203E20300000007063622DF8 +:10AF30003E61636365707420213D204E554C4C008A +:10AF40007463705F696E7075743A207463705F70BB +:10AF50006362735F73616E65282900002E2E2F7364 +:10AF600072632F534F4654574152455F4652414DED +:10AF700045574F524B2F53455256494345532F4C3B +:10AF80005749502F6C7769702D312E332E322F7325 +:10AF900072632F636F72652F7463705F6F75742EA9 +:10AFA00063000000636865636B20746861742066E9 +:10AFB0006972737420706275662063616E20686FB9 +:10AFC0006C6420737472756374207463705F68645A +:10AFD000720000007463705F656E71756575653A27 +:10AFE000207061636B6574206E65656473207061A9 +:10AFF000796C6F61642C206F7074696F6E732C2094 +:10B000006F722053594E2F46494E202870726F6739 +:10B0100072616D6D65722076696F6C617465732005 +:10B0200041504929000000007463705F656E7175BE +:10B030006575653A206C656E20213D2030207C7C52 +:10B0400020617267203D3D204E554C4C2028707287 +:10B050006F6772616D6D65722076696F6C61746582 +:10B0600073204150492900007463705F656E7175EB +:10B070006575653A207062756673206F6E20717514 +:10B08000657565203D3E206174206C656173742098 +:10B090006F6E65207175657565206E6F6E2D656DBF +:10B0A000707479007463705F656E71756575653A6B +:10B0B000206E6F207062756673206F6E20717565EB +:10B0C0007565203D3E20626F7468207175657565F9 +:10B0D0007320656D707479007573656720213D205C +:10B0E0004E554C4C00000000636865636B2074682B +:10B0F0006174206669727374207062756620636182 +:10B100006E20686F6C642074686520636F6D706C6E +:10B11000657465207365676C656E000070627566A6 +:10B120005F686561646572206661696C65640A00C8 +:10B1300046494E20656E71756575656420746F674C +:10B140006574686572207769746820646174610051 +:10B150007A65726F2D6C656E6774682070627566B3 +:10B16000000000007463705F656E71756575653A07 +:10B170002076616C6964207175657565206C656EFB +:10B1800067746800525354206E6F74206578706540 +:10B190006374656420686572652100002E2E2F732C +:10B1A00072632F534F4654574152455F4652414DAB +:10B1B00045574F524B2F53455256494345532F4CF9 +:10B1C0005749502F6C7769702D312E332E322F73E3 +:10B1D00072632F636F72652F7564702E63000000B9 +:10B1E000726562696E64203D3D203000636865636E +:10B1F0006B20746861742066697273742070627564 +:10B20000662063616E20686F6C642073747275636E +:10B2100074207564705F686472000000702D3E7069 +:10B2200061796C6F6164203D3D20697068647200D3 +:10B230002E2E2F7372632F534F4654574152455F42 +:10B240004652414D45574F524B2F53455256494355 +:10B2500045532F4C5749502F6C7769702D312E3341 +:10B260002E322F7372632F636F72652F697076347D +:10B270002F69636D702E6300636865636B2074686B +:10B2800061742066697273742070627566206361F0 +:10B290006E20686F6C642069636D70206D657373D8 +:10B2A0006167650069636D705F696E7075743A20DF +:10B2B0006D6F76696E6720702D3E7061796C6F617D +:10B2C0006420746F2069702068656164657220660F +:10B2D00061696C65640A0000636865636B2074686B +:10B2E0006174206669727374207062756620636190 +:10B2F0006E20686F6C642073747275637420746858 +:10B30000652049434D502068656164657200000006 +:10B3100069636D705F696E7075743A20636F7079E0 +:10B32000696E6720746F206E657720706275662085 +:10B330006661696C65640A0069636D705F696E704F +:10B3400075743A20726573746F72696E67206F72DC +:10B350006967696E616C20702D3E7061796C6F61F8 +:10B3600064206661696C65640A00000043616E27B1 +:10B3700074206D6F7665206F7665722068656164F4 +:10B38000657220696E207061636B65740000000057 +:10B390002E2E2F7372632F534F4654574152455FE1 +:10B3A0004652414D45574F524B2F534552564943F4 +:10B3B00045532F4C5749502F6C7769702D312E33E0 +:10B3C0002E322F7372632F636F72652F697076341C +:10B3D0002F69702E63000000636865636B207468DA +:10B3E000617420666972737420706275662063618F +:10B3F0006E20686F6C64207374727563742069705A +:10B400005F68647200FFFFFFFF00000000000000A3 +:10B410002E2E2F7372632F534F4654574152455F60 +:10B420004652414D45574F524B2F53455256494373 +:10B4300045532F4C5749502F6C7769702D312E335F +:10B440002E322F7372632F636F72652F697076349B +:10B450002F69705F667261672E630000746869739C +:10B46000206E656564732061207062756620696E68 +:10B47000206F6E65207069656365210073616E6978 +:10B48000747920636865636B206C696E6B656420FA +:10B490006C697374000000007072657620213D2095 +:10B4A00069707200707265762D3E6E657874203D0D +:10B4B0003D2069707200000069705F72656173738E +:10B4C0005F70627566636F756E74203E3D20636CBD +:10B4D000656E0000636865636B20667261676D6509 +:10B4E0006E747320646F6E2774206F7665726C6162 +:10B4F000700000006E6F2070726576696F75732042 +:10B50000667261676D656E742C2074686973206D56 +:10B51000757374206265207468652066697273743F +:10B5200020667261676D656E7421000073616E69DB +:10B53000747920636865636B0000000076616C6954 +:10B54000646174655F646174616772616D3A6E65B0 +:10B5500078745F70627566213D4E554C4C0000005A +:10B5600076616C69646174655F646174616772615E +:10B570006D3A646174616772616D20656E64213D2E +:10B58000646174616772616D206C656E00FFFFFF1E +:10B59000FFFFFF002E2E2F7372632F534F46545719 +:10B5A0004152455F4652414D45574F524B2F5345EF +:10B5B0005256494345532F4C5749502F6C77697069 +:10B5C0002D312E332E322F7372632F6E65746966A0 +:10B5D0002F6574686172702E630000006E65746977 +:10B5E000662D3E6877616464725F6C656E206D7570 +:10B5F0007374206265207468652073616D652061D5 +:10B6000073204554484152505F4857414444525F6B +:10B610004C454E20666F722065746861727021001F +:10B620007120213D204E554C4C000000712D3E7084 +:10B6300020213D204E554C4C00000000722D3E70E4 +:10B6400020213D204E554C4C000000006172705F7F +:10B650007461626C655B695D2E71203D3D204E55C5 +:10B660004C4C000069203C204152505F5441424CF8 +:10B67000455F53495A4500006E657469662D3E6802 +:10B6800077616464725F6C656E203D3D204554486F +:10B690004152505F4857414444525F4C454E000070 +:10B6A000636865636B207468617420666972737483 +:10B6B00020706275662063616E20686F6C64207311 +:10B6C0007472756374206574686172705F68647207 +:10B6D000000000006172705F7461626C655B695D9F +:10B6E0002E7374617465203D3D2050454E44494E93 +:10B6F00047206F7220535441424C45006E6F2070BA +:10B7000061636B65742071756575657320616C6C20 +:10B710006F77656421000000000000002E2E2F735B +:10B7200072632F534F4654574152455F4652414D25 +:10B7300045574F524B2F53455256494345532F4C73 +:10B740005749502F6C7769702D706F72742D312EA0 +:10B75000332E322F48442F69662F6E657469662F29 +:10B76000776C69662E6300000A09000052580000D9 +:10B7700054580000FFFFFF740000000001FFFFFFAE +:10B780000000FFFFFFFFFF400000000001FFFFFF80 +:10B7900041505000484D4700312E352E312E370094 +:10B7A000312E352E312E3100312E352E312E3400F2 +:10B7B00080017C7C80017C7480017C7C80017C6ABF +:10B7C00080017DCA80017D7880017D2A80017CD83E +:10B7D00080017C86800185D2800185CA800185CA6E +:10B7E000800185D2800185C2800185C2800185BA31 +:10B7F000800185BA02040B0C121618242C30424822 +:10B80000606C0000322E312E312E310078C40E00D3 +:10B81000352E332E31000000352E332E350000003A +:10B82000352E332E340000008001BF808001BF928E +:10B830008001BFA88001BF5A8001BF668001BFD4CC +:10B840008001BF5A8001BFE08001BF5A8001BF5A0A +:10B850008001BF5A8001BF5A8001BF5A8001BF5A80 +:10B860008001BF5A8001BF5A8001BF5A8001BF5A70 +:10B870008001BF5A8001BF5A8001BF5A8001BF5A60 +:10B880008001BF5A8001BF5A8001BF5A8001BF5A50 +:10B890008001BF5A8001BF5A8001BF5A8001BF5A40 +:10B8A0008001BF5A8001BF5A8001BF5A8001BF5A30 +:10B8B0008001BF5A8001BF5A8001BF5A8001BF5A20 +:10B8C0008001BF5A8001BF5A8001BF5A8001BF5A10 +:10B8D0008001BF5A8001BF5A8001BF5A8001BF5A00 +:10B8E0008001BF5A8001BF5A8001BF5A8001BF5AF0 +:10B8F0008001BF5A8001BF5A8001BF5A8001BF5AE0 +:10B900008001BF5A8001BF5A8001BF5A8001BF5ACF +:10B910008001BF5A8001BF5A8001BF5A8001BF5ABF +:10B920008001BF5A8001BF7C8001C0448001BF5AA2 +:10B930008001C0448001BF5A8001C17C8001BF5A90 +:10B940008001C1708001BF5A8001C1648001BF5A6B +:10B950008001BF5A8001BF5A8001BF5A8001C1AC2B +:10B960008001BF5A8001BF5A8001C1A08001BF5A27 +:10B970008001C1948001BF5A8001BF5A8001BF5A23 +:10B980008001BF5A8001BF5A8001BF5A8001BF5A4F +:10B990008001BF5A8001BF5A8001BF5A8001BF5A3F +:10B9A0008001BF5A8001BF5A8001BF5A8001BF5A2F +:10B9B0008001BF5A8001BF5A8001BF5A8001BF5A1F +:10B9C0008001BF5A8001BF5A8001BF5A8001BF5A0F +:10B9D0008001BF5A8001BF5A8001BF5A8001BF5AFF +:10B9E0008001BF5A8001BF5A8001BF5A8001BF5AEF +:10B9F0008001BF5A8001BF5A8001BF5A8001BF5ADF +:10BA00008001BF5A8001BF5A8001BF5A8001BF5ACE +:10BA10008001BF5A8001BF5A8001BF5A8001BF5ABE +:10BA20008001BF5A8001BF5A8001BF5A8001BF5AAE +:10BA30008001BF5A8001BF5A8001BF5A8001BF5A9E +:10BA40008001BF5A8001BF5A8001BF5A8001BF5A8E +:10BA50008001BF5A8001BF5A8001BF5A8001BF5A7E +:10BA60008001BF5A8001BF5A8001BF5A8001BF5A6E +:10BA70008001BF5A8001BF5A8001BF5A8001BF5A5E +:10BA80008001BF5A8001BF5A8001BF5A8001BF5A4E +:10BA90008001BF5A8001BF5A8001BF5A8001BF5A3E +:10BAA0008001BF5A8001BF5A8001BF5A8001BF5A2E +:10BAB0008001BF5A8001BF5A8001BF5A8001BF5A1E +:10BAC0008001BF5A8001BF5A8001BF5A8001BF5A0E +:10BAD0008001BF5A8001BF5A8001BF5A8001BF5AFE +:10BAE0008001BF5A8001BF5A8001BF5A8001BF5AEE +:10BAF0008001BF5A8001BF5A8001BF5A8001BF5ADE +:10BB00008001BF5A8001BF5A8001BF5A8001BF5ACD +:10BB10008001BF5A8001C02C8001C1588001C02C17 +:10BB20008001C02C8001C1888001BF5A8001C044BF +:10BB30008001BF5A8001C0508001BF5A8001C050AF +:10BB40008001BF5A8001C02C8001BF5A8001C02CE7 +:10BB50008001C0388001C0388001C0388001BF5AE0 +:10BB60008001C02C8001C02C8001C14C8001BF5AD3 +:10BB70008001BF5A8001C1408001BF5A8001BF5A75 +:10BB80008001BF5A8001BF5A8001BF5A8001BF5A4D +:10BB90008001BF5A8001BF5A8001BF5A8001BF5A3D +:10BBA0008001C1348001BF5A8001BF5A8001BF5A51 +:10BBB0008001BF5A8001BF5A8001BF5A8001BF5A1D +:10BBC0008001C1288001BF5A8001BF5A8001BF5A3D +:10BBD0008001BF5A8001BF5A8001BF5A8001BF5AFD +:10BBE0008001BF5A8001BF5A8001BF5A8001BF5AED +:10BBF0008001BF5A8001BF5A8001BF5A8001BF5ADD +:10BC00008001BF5A8001BF5A8001BF5A8001BF5ACC +:10BC10008001BF5A8001BF5A8001BF5A8001BF5ABC +:10BC20008001BF5A8001BF5A8001BF5A8001BF5AAC +:10BC30008001BF5A8001BF5A8001BF5A8001BF5A9C +:10BC40008001BF5A8001BF5A8001BF5A8001BF5A8C +:10BC50008001BF5A8001BF5A8001BF5A8001BF5A7C +:10BC60008001BF5A8001BF5A8001BF5A8001BF5A6C +:10BC70008001BF5A8001BF5A8001BF5A8001BF5A5C +:10BC80008001BF5A8001BF5A8001BF5A8001BF5A4C +:10BC90008001BF5A8001BF5A8001BF5A8001BF5A3C +:10BCA0008001BF5A8001BF5A8001BF5A8001BF5A2C +:10BCB0008001BF5A8001BF5A8001BF5A8001BF5A1C +:10BCC0008001BF5A8001BF5A8001BF5A8001BF5A0C +:10BCD0008001BF5A8001BF5A8001BF5A8001BF5AFC +:10BCE0008001BF5A8001BF5A8001BF5A8001BF5AEC +:10BCF0008001BF5A8001BF5A8001BF5A8001BF5ADC +:10BD00008001BF5A8001BF5A8001BF5A8001BF5ACB +:10BD10008001BF5A8001BF5A8001BF5A8001BF5ABB +:10BD20008001BF5A8001BF5A8001BF5A8001BF5AAB +:10BD30008001BF5A8001BF5A8001BF5A8001BF5A9B +:10BD40008001BF5A8001BF5A8001BF5A8001BF5A8B +:10BD50008001BF5A8001BF5A8001BF5A8001BF5A7B +:10BD60008001BF5A8001BF5A8001BF5A8001C11CA7 +:10BD70008001C1108001BF5A8001C1048001BF5AF7 +:10BD80008001BF5A8001BF5A8001C0F88001C0EC19 +:10BD90008001BF5A8001BF5A8001C0E08001BF5AB4 +:10BDA0008001BF5A8001C0D48001C0C88001C0BCDE +:10BDB0008001C0B08001C0A48001C0988001C08C07 +:10BDC0008001BF5A8001C0808001C0748001BF5AC9 +:10BDD0008001C0688001C05C8001C48E8001C47C89 +:10BDE0008001C46A8001C4588001C4468001C43403 +:10BDF0008001C3928001C3928001C4228001C410DB +:10BE00008001C3FE8001C3EC8001C3DA8001C3C896 +:10BE10008001C3B68001C3A48001C3A48001C4A073 +:10BE20008001C2D48001C2D48001C2D48001C5C0C7 +:10BE30008001C5AE8001C59C8001C2D48001C2D4FE +:10BE40008001C58A8001C2D48001C2D48001C57836 +:10BE50008001C5668001C5548001C5428001C5309E +:10BE60008001C51E8001C50C8001C4FA8001C4E8B0 +:10BE70008001C2D48001C4D68001C4C48001C2D470 +:10BE80008001C2D48001C2D48001C2D48001C2D456 +:10BE90008001C2D48001C2D48001C2D48001C2D446 +:10BEA0008001C2D48001C2D48001C2D48001C2D436 +:10BEB0008001C2D48001C2D48001C2D48001C2D426 +:10BEC0008001C2D48001C2D48001C2D48001C2D416 +:10BED0008001C2D48001C2D48001C2D48001C2D406 +:10BEE0008001C2D48001C2D48001C2D48001C2D4F6 +:10BEF0008001C2D48001C2D48001C2D48001C2D4E6 +:10BF00008001C2D48001C2D48001C2D48001C2D4D5 +:10BF10008001C2D48001C2D48001C2D48001C2D4C5 +:10BF20008001C2D48001C2D48001C2D48001C2D4B5 +:10BF30008001C2D48001C2D48001C2D48001C2D4A5 +:10BF40008001C2D48001C2D48001C2D48001C2D495 +:10BF50008001C2D48001C2D48001C2D48001C2D485 +:10BF60008001C2D48001C2D48001C2D48001C2D475 +:10BF70008001C2D48001C2D48001C2D48001C2D465 +:10BF80008001C2D48001C2D48001C2D48001C2D455 +:10BF90008001C2D48001C2D48001C2D48001C2D445 +:10BFA0008001C2D48001C2D48001C2D48001C2D435 +:10BFB0008001C2D48001C2D48001C2D48001C2D425 +:10BFC0008001C2D48001C2D48001C2D48001C2D415 +:10BFD0008001C2D48001C2D48001C2D48001C2D405 +:10BFE0008001C2D48001C2D48001C2D48001C2D4F5 +:10BFF0008001C2D48001C2D48001C2D48001C2D4E5 +:10C000008001C2D48001C2D48001C2D48001C2D4D4 +:10C010008001C4B28001EFCA8001EFCE8001EF7AC7 +:10C020008001EF7A8001EF828001EF8A8001EF9238 +:10C030008001EF9A8001EFA28001EFAA8001EFB2A8 +:10C040008001EFBA8001EFC28001EFD68001F96074 +:10C050008001F93E8001F9CC8001F8A68001F9BE8B +:10C060008001F91C8001F8A68001F8E28001F8A6A1 +:10C070008001F8A68001F8A68001F8A68001F8A644 +:10C080008001F8A68001F8A68001F8A68001F8A634 +:10C090008001F8A68001F8A68001F8A68001F8A624 +:10C0A0008001F8A68001F8A68001F8A68001F8A614 +:10C0B0008001F8A68001F8A68001F8A68001F8A604 +:10C0C0008001F8A68001F8A68001F8A68001F8A6F4 +:10C0D0008001F8A68001F8A68001F8A68001F8A6E4 +:10C0E0008001F8A68001F8A68001F8A68001F8A6D4 +:10C0F0008001F8A68001F8A68001F8A68001F8A6C4 +:10C100008001F8A68001F8A68001F8A68001F8A6B3 +:10C110008001F8A68001F8A68001F8A68001F8A6A3 +:10C120008001F8A68001F8A68001F8A68001F8A693 +:10C130008001F8A68001F8A68001F8A68001F8A683 +:10C140008001F8A68001F8A68001F8C08001FA58A5 +:10C150008001F8F08001F8F08001F90E8001F8F01C +:10C160008001F8F08001F8F08001F8F08001F8F02B +:10C170008001F8F08001F8F08001F8F08001F8F01B +:10C180008001F8F08001F90E8001F8F08001F8F0EC +:10C190008001F8F08001F8F08001F8F08001F8F0FB +:10C1A0008001F8F08001FA488001F8F08001F8F091 +:10C1B0008001F8F08001F8F08001F8F08001F8F0DB +:10C1C0008001F8F08001F8F08001F8F08001F8F0CB +:10C1D0008001F8F08001F8F08001F8F08001F8F0BB +:10C1E0008001F8F08001F8F08001F8F08001F8F0AB +:10C1F0008001F8F08001F8F08001F8F08001F8F09B +:10C200008001F8F08001F8F08001F8F08001F8F08A +:10C210008001F8F08001F8F08001F8F08001F8F07A +:10C220008001F8F08001F8F08001F8F08001F8F06A +:10C230008001F8F08001F8F08001F8F08001F8F05A +:10C240008001F8F08001F8F08001F8F08001F8F04A +:10C250008001F8F08001F8F08001F8F08001F8F03A +:10C260008001F8F08001F8F08001F8F08001F8F02A +:10C270008001F8F08001F8F08001F8F08001F8F01A +:10C280008001F8F08001F8F08001F8F08001F8F00A +:10C290008001F8F08001F8F08001F8F08001F8F0FA +:10C2A0008001F8F08001F8F08001F8F08001F8F0EA +:10C2B0008001F8F08001F8F08001F8F08001F8F0DA +:10C2C0008001F8F08001F8F08001F8F08001F8F0CA +:10C2D0008001F8F08001F8F08001F8F08001F8F0BA +:10C2E0008001F8F08001F8F08001F8F08001F8F0AA +:10C2F0008001F8F08001F8F08001F8F08001F8F09A +:10C300008001F8F08001F8F08001F8F08001F8F089 +:10C310008001F8F08001F8F08001F8F08001F8F079 +:10C320008001F8F08001F8F08001F8F08001F8F069 +:10C330008001F8F08001F8F08001F8F08001F8F059 +:10C340008001F8F08001F8F08001F8F08001F8F049 +:10C350008001F90E8001FA348001F8F08001F90EB5 +:10C360008001F8F08001F8F08001F8F08001F8F029 +:10C370008001F8F08001F8F08001F8F08001F90EFA +:10C380008001F8F08001F8F08001FA2C8001FA2495 +:10C390008001FA1C8001FA148001FA0C8001FA0471 +:10C3A0008001FA408001F8F08001FA5057455F495A +:10C3B0004E445F38303231315F434F4E4E45435427 +:10C3C0004544000057455F494E445F3830323131B3 +:10C3D0005F444953434F4E4E454354494E47000036 +:10C3E00057455F494E445F38303231315F494253DF +:10C3F000535F444953434F4E4E4543544544000018 +:10C40000332E312E322E312E34000000352E3233B1 +:10C4100000000000352E32322E320000352E32322E +:10C420002E310000352E322E39000000352E3138E5 +:10C430002E310000352E31382E320000352E3232AA +:10C440002E340000352E32342E320000352E323498 +:10C450002E310000352E31312E310000352E322E96 +:10C4600032000000352E31362E320000352E3136A6 +:10C470002E310000312E312E312E323200000000DC +:10C48000352E322E31392E3500000000352E322E59 +:10C4900031392E3400000000352E322E31392E3342 +:10C4A00000000000352E322E31392E3200000000FF +:10C4B000352E322E31392E3100000000352E322E2D +:10C4C00031000000352E31312E320000352E313151 +:10C4D0002E330000352E31312E340000352E31310F +:10C4E0002E350000352E31312E360000352E3131FB +:10C4F0002E380000352E31312E37000073736964F9 +:10C500000000000070736B004A756E6B41500000B4 +:10C5100057534300656170005746412D53696D7054 +:10C520006C65436F6E6669672D456E726F6C6C65E6 +:10C53000652D312D300000006964656E7469747971 +:10C54000000000006E7277696669000064656661CC +:10C55000756C740057455F494E445F383032313155 +:10C560005F444953434F4E4E4543544544000000F9 +:10C5700057455F494E445F50414952574953455FC3 +:10C580004D49435F4552524F5200000057455F49A5 +:10C590004E445F47524F55505F4D49435F4552529D +:10C5A0004F52000057455F494E445F43414E444956 +:10C5B000444154455F4C495354000000494E4143A7 +:10C5C0005449564500000000444953434F4E4E45E0 +:10C5D00043544544000000005343414E4E494E47EA +:10C5E000000000004153534F43494154494E470016 +:10C5F0004153534F43494154454400003457415936 +:10C600005F48414E445348414B45000047524F5507 +:10C61000505F48414E445348414B4500434F4D50B5 +:10C620004C45544544000000554E4B4E4F574E006C +:10C630004354524C2D4556454E542D5445524D4968 +:10C640004E4154494E47202D207369676E616C201E +:10C650002564207265636569766564007769726533 +:10C660006400000043616E63656C6C696E672061F5 +:10C67000757468656E7469636174696F6E2074693E +:10C680006D656F75740000005750413A2045415068 +:10C690004F4C2070726F63657373696E6720636FB0 +:10C6A0006D706C657465000043616E63656C6C69E8 +:10C6B0006E67207363616E207265717565737400B7 +:10C6C00052534E3A207573696E672049454545209F +:10C6D0003830322E3131692F44392E3000000000BD +:10C6E0005750413A207573696E672049454545208A +:10C6F0003830322E3131692F44332E3000000000A3 +:10C700005750413A204661696C656420746F20700F +:10C7100061727365205750412049452066726F6DE4 +:10C72000206173736F63696174696F6E20696E66EF +:10C730006F0000005750413A2044726976657220BC +:10C74000757365642064697361626C6564206772E7 +:10C750006F75702063697068657220307825782065 +:10C76000286D61736B203078257829202D20726523 +:10C770006A656374000000005750413A20447269B2 +:10C7800076657220757365642064697361626C6597 +:10C790006420706169727769736520636970686588 +:10C7A00072203078257820286D61736B20307825D1 +:10C7B0007829202D2072656A656374005750413ACC +:10C7C00020447269766572207573656420646973AC +:10C7D00061626C6564206B6579206D616E6167656F +:10C7E0006D656E74203078257820286D61736B201C +:10C7F0003078257829202D2072656A6563740000E1 +:10C800005750413A207573696E672047544B204357 +:10C81000434D50005750413A207573696E67204769 +:10C82000544B20544B4950005750413A207573697E +:10C830006E672047544B205745503130340000007C +:10C840005750413A207573696E672047544B205703 +:10C8500045503430000000005750413A207573694C +:10C860006E672050544B2043434D50005750413A7F +:10C87000207573696E672050544B20544B4950000B +:10C880005750413A207573696E672050544B204EC3 +:10C890004F4E45005750413A207573696E67204BE3 +:10C8A00045595F4D474D54203830322E31580000E5 +:10C8B0005750413A207573696E67204B45595F4D5B +:10C8C000474D54205750412D50534B005750413A3B +:10C8D000207573696E67204B45595F4D474D542055 +:10C8E0005750412D4E4F4E45000000005750413AE1 +:10C8F000204661696C656420746F2073656C6563A4 +:10C9000074205750412F52534E0000004661696C0D +:10C91000656420746F20706172736520746865208F +:10C92000636F6E66696775726174696F6E206669A0 +:10C930006C652027257327202D2065786974696E22 +:10C94000670000005265636F6E6669677572617497 +:10C95000696F6E20636F6D706C65746564000000B4 +:10C9600053657474696E672061757468656E746967 +:10C97000636174696F6E2074696D656F75743A20B8 +:10C98000256420736563202564207573656300004A +:10C9900053657474696E67207363616E207265718C +:10C9A000756573743A2025642073656320256420BF +:10C9B000757365630000000041757468656E746985 +:10C9C000636174696F6E20776974682025303278EE +:10C9D0003A253032783A253032783A253032783A72 +:10C9E000253032783A253032782074696D656420BC +:10C9F0006F75742E00000000547279696E672074A0 +:10CA00006F206173736F63696174652077697468FF +:10CA100020253032783A253032783A253032783A4B +:10CA2000253032783A253032783A2530327820284D +:10CA3000535349443D2725732720667265713D2570 +:10CA400064204D487A290000547279696E67207419 +:10CA50006F206173736F63696174652077697468AF +:10CA60002053534944202725732700004173736FD7 +:10CA700063696174696F6E20726571756573742086 +:10CA8000746F2074686520647269766572206661CF +:10CA9000696C6564000000007770615F7375707089 +:10CAA0006C6963616E742076302E352E31300A4306 +:10CAB0006F7079726967687420286329203230307A +:10CAC000332D323030382C204A6F756E69204D611D +:10CAD0006C696E656E203C6A4077312E66693E2037 +:10CAE000616E6420636F6E7472696275746F7273C5 +:10CAF00000000000546869732070726F6772616D86 +:10CB0000206973206672656520736F667477617241 +:10CB1000652E20596F752063616E2064697374728D +:10CB2000696275746520697420616E642F6F72206C +:10CB30006D6F646966792069740A756E6465722028 +:10CB4000746865207465726D73206F662074686503 +:10CB500020474E552047656E6572616C20507562A6 +:10CB60006C6963204C6963656E73652076657273CA +:10CB7000696F6E20322E0A0A416C7465726E6174A0 +:10CB80006976656C792C207468697320736F66749C +:10CB900077617265206D61792062652064697374C4 +:10CBA0007269627574656420756E6465722074685C +:10CBB00065207465726D73206F66207468650A4223 +:10CBC0005344206C6963656E73652E205365652040 +:10CBD000524541444D4520616E6420434F505949B0 +:10CBE0004E4720666F72206D6F72652064657461B8 +:10CBF000696C732E0A0000002530325800000000D6 +:10CC00008003C4FC80024A908002490000000010AA +:10CC100000000014000000000000002000000000E0 +:10CC20008003D3EC80024DF0800248880000006051 +:10CC300000000000000000000000000100000000F3 +:10CC40008003D3F880024DCC800248280000000009 +:10CC500000000000000000000000000000000000D4 +:10CC60008003C50480024D00800248C4000000001B +:10CC700000000000000000000000000000000001B3 +:10CC80008003D4008002408C800247A8000000008E +:10CC90000000000000000000000000000000000094 +:10CCA0008003D40880023F448002467C00000000DC +:10CCB0000000000000000000000000000000000074 +:10CCC0008003D41480023F188002466C00000000EC +:10CCD0000000000000000000000000000000000054 +:10CCE0008003D42080023EEC8002465C00000000FD +:10CCF0000000000000000000000000000000000034 +:10CD00008003D42880023CA4800244740000000008 +:10CD10000000000000000000000000000000000013 +:10CD20008003C51480024B9080024B00000000007D +:10CD300000000000000000000000000000000000F3 +:10CD40008003C53880024A908002490000000068D4 +:10CD50000000006C00000000000000000000000067 +:10CD60008003D43480024A908002490000000070A1 +:10CD7000000000740000000000000000000000003F +:10CD80008003D44880024A90800249000000007865 +:10CD90000000007C000000100000002000000001E6 +:10CDA0008003D45080024A90800249000000008035 +:10CDB00000000084000000000000000000000000EF +:10CDC0008003D45480024A90800249000000008809 +:10CDD0000000008C000000000000000000000001C6 +:10CDE0008003D46080024A908002490000000090D5 +:10CDF0000000000000000000000000000000000033 +:10CE00008003D46880024A908002490000000094A8 +:10CE10000000000000000000000000000000000012 +:10CE20008003D47080024A9080024900000000987C +:10CE300000000000000000000000000000000000F2 +:10CE40008003D47C80024A90800249000000009C4C +:10CE500000000000000000000000000000000000D2 +:10CE60008003D48880024A9080024900000000A01C +:10CE700000000000000000000000000000000001B1 +:10CE80008003D49C80024A9080024900000000A4E4 +:10CE90000000000000000000000000000000000092 +:10CEA0008003D4A480024A9080024900000000A8B8 +:10CEB0000000000000000000000000000000000072 +:10CEC0008003D4B480024A9080024900000000AC84 +:10CED0000000000000000000000000000000000052 +:10CEE0008003D4C880024A9080024900000000B04C +:10CEF0000000000000000000000000000000000032 +:10CF00008003D4D480024A9080024900000000B41B +:10CF10000000000000000000000000000000000011 +:10CF20008003D4E080024A9080024900000000B8EB +:10CF300000000000000000000000000000000000F1 +:10CF40008003D4F080024A9080024900000000BCB7 +:10CF500000000000000000000000000000000000D1 +:10CF60008003D50080024A9080024900000000C082 +:10CF700000000000000000000000000000000001B0 +:10CF80008003D51480024A9080024900000000C44A +:10CF90000000000000000000000000000000000091 +:10CFA0008003D52080024A9080024900000000C81A +:10CFB0000000000000000000000000000000000071 +:10CFC0008003D53080024A9080024900000000CCE6 +:10CFD0000000000000000000000000000000000051 +:10CFE0008003D54480024A9080024900000000D4AA +:10CFF0000000000000000000000000000000000031 +:10D000008003D54C80024A9080024900000000D87D +:10D010000000000000000000000000000000000010 +:10D020008003D55480024A9080024900000000DC51 +:10D0300000000000000000000000000000000000F0 +:10D040008003D55C80024A9080024900000000E025 +:10D0500000000000000000000000000000000001CF +:10D060008003D56080024A9080024900000000E8F9 +:10D0700000000000000000000000000000000000B0 +:10D080008003D56C80024A9080024900000000ECC9 +:10D090000000000000000000000000000000000090 +:10D0A0008003D65C80024DF080024888000000E4D6 +:10D0B0000000000000000000000000000000000070 +:10D0C0008003D57480024DF080024888000000F093 +:10D0D0000000000000000000000000000000000050 +:10D0E0008003D58080024A78800244580000000006 +:10D0F000000000000000000000000000000000012F +:10D100008003D58C80024A608002443C000000000D +:10D11000000000000000000000000000000000010E +:10D120008003D59880024A48800244200000000015 +:10D1300000000000000000000000000000000001EE +:10D140008003D5A480024A3080024404000000001D +:10D1500000000000000000000000000000000001CE +:10D160008003D5B080024DF0800248880000014461 +:10D1700000000000000000000000000000000000AF +:10D180008003D5C080024DF0800248880000000C6A +:10D19000000000000000000000000000000000008F +:10D1A0008003D5CC80024DF0800248880000017CCD +:10D1B000000000000000000000000000000000006F +:10D1C0008003D5DC80024A90800249000000018083 +:10D1D000000000000000000000000000000000004F +:10D1E0008003D5E880024DF0800248880000019C51 +:10D1F000000000000000000000000000000000002F +:10D200008003D5F880024DF0800248880000018438 +:10D21000000000000000000000000001000000000D +:10D220008003D60080024DF0800248880000006430 +:10D2300000000000000000000000000200000000EC +:10D240008003D60880024DF0800248880000014823 +:10D2500000000000000000000000000100000000CD +:10D260008003D62080024DF080024888000001949F +:10D2700000000000000000000000000100000000AD +:10D280008003D62C80024A9080024900000001A051 +:10D29000000000000000000000000000000000008E +:10D2A0008003D63480024DF0800248880000019847 +:10D2B000000000000000000000000001000000006D +:10D2C0008003D63C80024DF0800248880000014C6B +:10D2D000000000000000000000000001000000004D +:10D2E0008003D64880024DF080024888000001A4E7 +:10D2F00000000000000000000000271000000000F7 +:10D300002A0000004F50454E000000005348415293 +:10D31000454400004C454150000000005745503145 +:10D320003034000057455034300000005750412D34 +:10D3300045415000494545453830323158000000DC +:10D340005750410052534E005750413200000000E8 +:10D3500025734F50454E00002573534841524544B4 +:10D360000000000025734C454150000025734343E5 +:10D370004D5000002573544B49500000257357450C +:10D3800050313034000000002573574550343000D0 +:10D3900025734E4F4E45000025735750412D505375 +:10D3A0004B00000025735750412D454150000000AF +:10D3B000257349454545383032315800257357505B +:10D3C000412D4E4F4E45000025735750410000003F +:10D3D000257352534E0000007765705F6B657925A9 +:10D3E0006400000025732573000000007363616E04 +:10D3F0005F73736964000000627373696400000006 +:10D4000070726F746F0000006B65795F6D676D748B +:10D4100000000000706169727769736500000000A8 +:10D4200067726F7570000000617574685F616C678A +:10D4300000000000616E6F6E796D6F75735F6964D7 +:10D44000656E74697479000065617070736B0000BB +:10D450006E61690070617373776F72640000000021 +:10D4600063615F636572740063615F70617468001B +:10D47000636C69656E745F6365727400707269765F +:10D480006174655F6B657900707269766174655F60 +:10D490006B65795F706173737764000064685F66C1 +:10D4A000696C65007375626A6563745F6D6174634E +:10D4B00068000000616C747375626A6563745F6D07 +:10D4C000617463680000000063615F6365727432B9 +:10D4D0000000000063615F7061746832000000004A +:10D4E000636C69656E745F6365727432000000007E +:10D4F000707269766174655F6B6579320000000057 +:10D50000707269766174655F6B6579325F706173A3 +:10D510007377640064685F66696C653200000000C0 +:10D520007375626A6563745F6D617463683200006D +:10D53000616C747375626A6563745F6D617463684E +:10D5400032000000706861736531000070686173BB +:10D5500065320000706373630000000070696E0044 +:10D56000656E67696E655F69640000006B65795F71 +:10D57000696400006561706F6C5F666C6167730061 +:10D580007765705F6B657930000000007765705FCC +:10D590006B657931000000007765705F6B657932EB +:10D5A000000000007765705F6B6579330000000054 +:10D5B0007765705F74785F6B6579696478000000E7 +:10D5C0007072696F72697479000000006561705F44 +:10D5D000776F726B61726F756E6400007061635F6C +:10D5E00066696C6500000000667261676D656E7447 +:10D5F0005F73697A650000006D6F6465000000006C +:10D600007573655F7770730070726F6163746976AC +:10D61000655F6B65795F63616368696E67000000D1 +:10D6200064697361626C65640000000069645F7323 +:10D6300074720000706565726B6579006D6978655C +:10D64000645F63656C6C00006672657175656E631E +:10D6500079000000888E000077696669656E6769E9 +:10D660006E65000057694669456E67696E65000022 +:10D670008003D6588003D664800254C880025420A8 +:10D6800080024F98800252E0800253E8800254A446 +:10D690000000000080024F9A800252C880024F941E +:10D6A00080024F96800252B08002529880024F9CB6 +:10D6B00080024F9E8002523C800251E0800251D491 +:10D6C000800251AC00000000000000008002518088 +:10D6D00080024FF480024FD00000000000000000E4 +:10D6E000000000000000000000000000000000003A +:10D6F000000000000000000080024FA08002564E93 +:10D700008002564A80025646800256408002563CAD +:10D7100080025636800256328002562C80025626EF +:10D72000800256928002568C800256888002568271 +:10D730008002567C80025676800256728002566CB9 +:10D740008002566680025B3480025C0880025BE0E7 +:10D7500080025BBA80025BA080025B3480025B3493 +:10D7600080025B3480025DC280025E3A80025E12FB +:10D7700080025D8E80025CC280025AF680025DF4F7 +:10D7800080025DCE800268DC80026AA280026A00AC +:10D7900080026904800268F2800269EE800268DC1F +:10D7A000800268DC800268E8800268E8800268E83D +:10D7B000696E76616C696461746500004354524C13 +:10D7C0002D4556454E542D4541502D535543434507 +:10D7D0005353204541502061757468656E746963C8 +:10D7E0006174696F6E20636F6D706C657465642021 +:10D7F0007375636365737366756C6C7920286261F9 +:10D80000736564206F6E206C6F776572206C617930 +:10D810006572207375636365737329004354524CBA +:10D820002D4556454E542D4541502D5355434345A6 +:10D830005353204541502061757468656E74696367 +:10D840006174696F6E20636F6D706C6574656420C0 +:10D850007375636365737366756C6C7900000000A3 +:10D860004354524C2D4556454E542D4541502D465E +:10D8700041494C55524520454150206175746865B9 +:10D880006E7469636174696F6E206661696C65644A +:10D8900000000000494E495449414C495A45000096 +:10D8A0004541503A206D6F7265207468616E202585 +:10D8B000642061757468656E7469636174696F6E04 +:10D8C00020726F756E6473202D2061626F72740018 +:10D8D0004354524C2D4556454E542D4541502D4EE6 +:10D8E0004F54494649434154494F4E2000000000DF +:10D8F0004354524C2D4556454E542D4541502D53C1 +:10D900005441525445442045415020617574686526 +:10D910006E7469636174696F6E207374617274658B +:10D92000640000004745545F4D4554484F44000093 +:10D930004541503A204661696C656420746F2069E6 +:10D940006E697469616C697A6520454150206D6526 +:10D9500074686F643A2076656E646F722025752056 +:10D960006D6574686F642025752028257329000073 +:10D970004354524C2D4556454E542D4541502D4D46 +:10D980004554484F44204541502076656E646F727F +:10D99000202575206D6574686F6420257520282505 +:10D9A00073292073656C656374656400454150207C +:10D9B0006465696E697400008002794480027ADAD5 +:10D9C00080027B5880027BA280027CC880027CD2CD +:10D9D00080027AC45750413A20544B495020636F1B +:10D9E000756E7465726D656173757265732073749D +:10D9F0006F707065640000004173736F63696174D8 +:10DA0000656420746F2061206E6577204253533A1D +:10DA10002042535349443D253032783A25303278FC +:10DA20003A253032783A253032783A253032783A11 +:10DA300025303278000000004173736F63696174B0 +:10DA40006564207769746820253032783A25303251 +:10DA5000783A253032783A253032783A25303278A3 +:10DA60003A253032780000005750413A20342D5783 +:10DA700061792048616E647368616B6520666169D5 +:10DA80006C6564202D207072652D73686172656409 +:10DA9000206B6579206D617920626520696E636F06 +:10DAA00072726563740000004354524C2D45564514 +:10DAB0004E542D444953434F4E4E45435445442004 +:10DAC0002D20446973636F6E6E656374206576659F +:10DAD0006E74202D2072656D6F7665206B6579738D +:10DAE000000000004D69636861656C204D4943206A +:10DAF0006661696C757265206465746563746564DC +:10DB000000000000544B495020636F756E746572BD +:10DB10006D65617375726573207374617274656489 +:10DB200000000000000000080000000600000006E1 +:10DB3000496E646578202F204141202F20504D4BA5 +:10DB40004944202F2065787069726174696F6E2076 +:10DB500028696E207365636F6E647329202F206FB0 +:10DB600070706F7274756E69737469630A00000077 +:10DB7000256420253032783A253032783A25303203 +:10DB8000783A253032783A253032783A2530327872 +:10DB9000200000002025642025640A00504D4B2001 +:10DBA0004E616D650000000052534E3A207374615F +:10DBB0007274696E67207072652D61757468656E28 +:10DBC0007469636174696F6E2077697468202530A9 +:10DBD00032783A253032783A253032783A25303268 +:10DBE000783A253032783A253032780052534E3A1E +:10DBF0002070726F63657373696E6720504D4B536D +:10DC0000412063616E646964617465206C6973743A +:10DC10000000000052534E3A206E6F7420696E204F +:10DC20007375697461626C652073746174652066D4 +:10DC30006F72206E6577207072652D6175746865EE +:10DC40006E7469636174696F6E00000052534E3ADE +:10DC500020504D4B53412063616E6469646174656B +:10DC600020253032783A253032783A253032783AE9 +:10DC7000253032783A253032783A253032782073A0 +:10DC8000656C656374656420666F72207072652DC3 +:10DC900061757468656E7469636174696F6E0000A4 +:10DCA00052534E3A20504D4B53412063616E64698C +:10DCB0006461746520253032783A253032783A250F +:10DCC0003032783A253032783A253032783A253079 +:10DCD000327820646F6573206E6F74206E656564A2 +:10DCE000207072652D61757468656E746963617406 +:10DCF000696F6E20616E796D6F72650052534E3A96 +:10DD0000206E6F206D6F72652070656E64696E673E +:10DD100020504D4B53412063616E646964617465AA +:10DD20007300000052534E3A2061646465642050D1 +:10DD30004D4B53412063616368652063616E646984 +:10DD40006461746520253032783A253032783A257E +:10DD50003032783A253032783A253032783A2530E8 +:10DD60003278207072696F202564000052534E3A59 +:10DD7000207072652D61757468656E746963617475 +:10DD8000696F6E207769746820253032783A2530C3 +:10DD900032783A253032783A253032783A253032A6 +:10DDA000783A253032782074696D6564206F757417 +:10DDB00000000000636F6D706C657465642073759E +:10DDC000636365737366756C6C79000052534E3AE9 +:10DDD000206661696C656420746F20676574206DCE +:10DDE00061737465722073657373696F6E206B6500 +:10DDF000792066726F6D207072652D617574682070 +:10DE00004541504F4C207374617465206D616368A7 +:10DE1000696E65730000000052534E3A20707265BF +:10DE20002D61757468656E7469636174696F6E20C5 +:10DE30007769746820253032783A253032783A256F +:10DE40003032783A253032783A253032783A2530F7 +:10DE50003278202573000000800000008002B51C8D +:10DE60008002B50A8002B5008002B4FA8002B4F4E0 +:10DE70008002B4EE8002B4E8000FAC010050F20260 +:10DE8000000FAC02000FAC01000FAC050050F20215 +:10DE9000000FAC040050F2010050F2010050F201FA +:10DEA0000050F2050050F200000FAC00000FAC0370 +:10DEB0000050F200000FAC0449454545203830328F +:10DEC0002E315820286E6F20575041290000000045 +:10DED0005750412F49454545203830322E31582F73 +:10DEE00045415000575041322F4945454520383073 +:10DEF000322E31582F45415000000000575041321A +:10DF00002D50534B000000005745502D3430000079 +:10DF10005745502D313034007061697277697365EF +:10DF20005F6369706865723D25730A67726F75700B +:10DF30005F6369706865723D25730A6B65795F6D13 +:10DF4000676D743D25730A005750413A20257320B0 +:10DF5000287372633D253032783A253032783A257D +:10DF60003032783A253032783A253032783A2530D6 +:10DF7000327829005750413A204B6579206E656709 +:10DF80006F74696174696F6E20636F6D706C657416 +:10DF90006564207769746820253032783A253032FC +:10DFA000783A253032783A253032783A253032784E +:10DFB0003A25303278205B50544B3D25732047542E +:10DFC0004B3D25735D0000005750413A20496E7665 +:10DFD000616C6964204541504F4C2D4B657920663A +:10DFE00072616D65202D206B65795F6461746120BD +:10DFF0006F766572666C6F7720282564203E202539 +:10E000006C752900494520696E20332F34206D73CB +:10E010006720646F6573206E6F74206D6174636830 +:10E02000207769746820494520696E2042656163E4 +:10E030006F6E2F50726F62655265737020286E6F1D +:10E040002049453F29000000494520696E20332FB3 +:10E0500034206D736720646F6573206E6F74206D5C +:10E0600061746368207769746820494520696E206F +:10E07000426561636F6E2F50726F62655265737097 +:10E0800000000000506F737369626C6520646F77E5 +:10E090006E67726164652061747461636B2064658E +:10E0A000746563746564202D2052534E207761732C +:10E0B00020656E61626C656420616E642052534E0F +:10E0C0002049452077617320696E206D7367203386 +:10E0D0002F342C20627574206E6F7420696E20427C +:10E0E0006561636F6E2F50726F6265526573700069 +:10E0F0005750413A204661696C656420746F20670F +:10E100006574206D61737465722073657373696FD4 +:10E110006E206B65792066726F6D204541504F4CC3 +:10E12000207374617465206D616368696E65730046 +:10E130005750413A204B65792068616E647368617D +:10E140006B652061626F7274656400005750413ADC +:10E15000204661696C656420746F20676574207265 +:10E16000616E646F6D206461746120666F7220530C +:10E170004E6F6E6365000000506169727769736568 +:10E18000206B657920657870616E73696F6E000031 +:10E190005750413A2047726F75702072656B6579F0 +:10E1A000696E6720636F6D706C6574656420776954 +:10E1B000746820253032783A253032783A2530326A +:10E1C000783A253032783A253032783A253032782C +:10E1D000205B47544B3D25735D00000000000000AC +:10E1E000000000000050F204000FAC02000FAC0170 +:10E1F00052096AD53036A538BF40A39E81F3D7FBBC +:10E200007CE339829B2FFF87348E4344C4DEE9CB05 +:10E21000547B9432A6C2233DEE4C950B42FAC34E7A +:10E22000082EA16628D924B2765BA2496D8BD12530 +:10E2300072F8F66486689816D4A45CCC5D65B692D4 +:10E240006C704850FDEDB9DA5E154657A78D9D8478 +:10E2500090D8AB008CBCD30AF7E45805B8B3450698 +:10E26000D02C1E8FCA3F0F02C1AFBD0301138A6BB2 +:10E270003A9111414F67DCEA97F2CFCEF0B4E673E2 +:10E2800096AC7422E7AD3585E2F937E81C75DF6E90 +:10E2900047F11A711D29C5896FB7620EAA18BE1BF6 +:10E2A000FC563E4BC6D279209ADBC0FE78CD5AF49C +:10E2B0001FDDA8338807C731B11210592780EC5FE2 +:10E2C00060517FA919B54A0D2DE57A9F93C99CEF3E +:10E2D000A0E03B4DAE2AF5B0C8EBBB3C835399613F +:10E2E000172B047EBA77D626E169146355210C7D7D +:10E2F00001020408102040801B36000051F4A75092 +:10E300007E4165531A17A4C33A275E963BAB6BCB8D +:10E310001F9D45F1ACFA58AB4BE303932030FA55FF +:10E32000AD766DF688CC7691F5024C254FE5D7FC9D +:10E33000C52ACBD726354480B562A38FDEB15A49B2 +:10E3400025BA1B6745EA0E985DFEC0E1C32F750232 +:10E35000814CF0128D4697A36BD3F9C6038F5FE70C +:10E3600015929C95BF6D7AEB955259DAD4BE832DE8 +:10E37000587421D349E069298EC9C84475C2896A95 +:10E38000F48E797899583E6B27B971DDBEE14FB6AE +:10E39000F088AD17C920AC667DCE3AB463DF4A1869 +:10E3A000E51A31829751336062537F45B16477E05B +:10E3B000BB6BAE84FE81A01CF9082B947048685892 +:10E3C0008F45FD1994DE6C87527BF8B7AB73D3236E +:10E3D000724B02E2E31F8F576655AB2AB2EB280758 +:10E3E0002FB5C20386C57B9AD33708A5302887F29C +:10E3F00023BFA5B202036ABAED16825C8ACF1C2B3A +:10E40000A779B492F307F2F04E69E2A165DAF4CD90 +:10E410000605BED5D134621FC4A6FE8A342E539D94 +:10E42000A2F355A0058AE132A4F6EB750B83EC3913 +:10E430004060EFAA5E719F06BD6E10513E218AF9C1 +:10E4400096DD063DDD3E05AE4DE6BD4691548DB5EB +:10E4500071C45D050406D46F605015FF1998FB2444 +:10E46000D6BDE997894043CC67D99E77B0E842BDD5 +:10E4700007898B88E7195B3879C8EEDBA17C0A47EE +:10E480007C420FE9F8841EC90000000009808683E1 +:10E49000322BED481E1170AC6C5A724EFD0EFFFB14 +:10E4A0000F8538563DAED51E362D39270A0FD96453 +:10E4B000685CA6219B5B54D124362E3A0C0A67B1C6 +:10E4C0009357E70FB4EE96D21B9B919E80C0C54F29 +:10E4D00061DC20A25A774B691C121A16E293BA0A21 +:10E4E000C0A02AE53C22E043121B171D0E090D0BAC +:10E4F000F28BC7AD2DB6A8B9141EA9C857F119855E +:10E50000AF75074CEE99DDBBA37F60FDF701269F39 +:10E510005C72F5BC44663BC55BFB7E348B4329765D +:10E52000CB23C6DCB6EDFC68B8E4F163D731DCCAB6 +:10E53000426385101397224084C61120854A247DAA +:10E54000D2BB3DF8AEF93211C729A16D1D9E2F4BEC +:10E55000DCB230F30D8652EC77C1E3D02BB3166CEE +:10E56000A970B999119448FA47E96422A8FC8CC4AF +:10E57000A0F03F1A567D2CD8223390EF87494EC722 +:10E58000D938D1C18CCAA2FE98D40B36A6F581CF5A +:10E59000A57ADE28DAB78E263FADBFA42C3A9DE4DB +:10E5A0005078920D6A5FCC9B547E4662F68D13C202 +:10E5B00090D8B8E82E39F75E82C3AFF59F5D80BE74 +:10E5C00069D0937C6FD52DA9CF2512B3C8AC993BE8 +:10E5D00010187DA7E89C636EDB3BBB7BCD267809DA +:10E5E0006E5918F4EC9AB701834F9AA8E6956E65B8 +:10E5F000AAFFE67E21BCCF08EF15E8E6BAE79BD973 +:10E600004A6F36CEEA9F09D429B07CD631A4B2AF86 +:10E610002A3F2331C6A5943035A266C0744EBC375C +:10E62000FC82CAA6E090D0B033A7D815F104984A6E +:10E6300041ECDAF77FCD500E1791F62F764DD68D3F +:10E6400043EFB04DCCAA4D54E49604DF9ED1B5E320 +:10E650004C6A881BC12C1FB84665517F9D5EEA0439 +:10E66000018C355DFA877473FB0B412EB3671D5A1D +:10E6700092DBD252E91056336DD647139AD7618C8C +:10E6800037A10C7A59F8148EEB133C89CEA927EEEA +:10E69000B761C935E11CE5ED7A47B13C9CD2DF5941 +:10E6A00055F2733F1814CE7973C737BF53F7CDEACD +:10E6B0005FFDAA5BDF3D6F147844DB86CAAFF38150 +:10E6C000B968C43E3824342CC2A3405F161DC372FF +:10E6D000BCE2250C283C498BFF0D954139A80171FE +:10E6E000080CB3DED8B4E49C6456C1907BCB846143 +:10E6F000D532B670486C5C74D0B85742C66363A517 +:10E70000F87C7C84EE777799F67B7B8DFFF2F20DB7 +:10E71000D66B6BBDDE6F6FB191C5C55460303050A4 +:10E7200002010103CE6767A9562B2B7DE7FEFE1978 +:10E73000B5D7D7624DABABE6EC76769A8FCACA45B1 +:10E740001F82829D89C9C940FA7D7D87EFFAFA153B +:10E75000B25959EB8E4747C9FBF0F00B41ADADEC18 +:10E76000B3D4D4675FA2A2FD45AFAFEA239C9CBFA0 +:10E7700053A4A4F7E47272969BC0C05B75B7B7C28E +:10E78000E1FDFD1C3D9393AE4C26266A6C36365A4D +:10E790007E3F3F41F5F7F70283CCCC4F6834345CC1 +:10E7A00051A5A5F4D1E5E534F9F1F108E2717193D1 +:10E7B000ABD8D873623131532A15153F0804040CC5 +:10E7C00095C7C752462323659DC3C35E30181828DA +:10E7D000379696A10A05050F2F9A9AB50E070709D5 +:10E7E000241212361B80809BDFE2E23DCDEBEB264C +:10E7F0004E2727697FB2B2CDEA75759F1209091BB2 +:10E800001D83839E582C2C74341A1A2E361B1B2DF4 +:10E81000DC6E6EB2B45A5AEE5BA0A0FBA45252F664 +:10E82000763B3B4DB7D6D6617DB3B3CE5229297B1B +:10E83000DDE3E33E5E2F2F7113848497A65353F5D7 +:10E84000B9D1D16800000000C1EDED2C402020605E +:10E85000E3FCFC1F79B1B1C8B65B5BEDD46A6ABE5C +:10E860008DCBCB4667BEBED97239394B944A4ADE4E +:10E87000984C4CD4B05858E885CFCF4ABBD0D06B19 +:10E88000C5EFEF2A4FAAAAE5EDFBFB16864343C569 +:10E890009A4D4DD766333355118585948A4545CFBA +:10E8A000E9F9F91004020206FE7F7F81A05050F0C2 +:10E8B000783C3C44259F9FBA4BA8A8E3A25151F352 +:10E8C0005DA3A3FE804040C0058F8F8A3F9292AD2A +:10E8D000219D9DBC70383848F1F5F50463BCBCDF60 +:10E8E00077B6B6C1AFDADA75422121632010103055 +:10E8F000E5FFFF1AFDF3F30EBFD2D26D81CDCD4CF3 +:10E90000180C0C1426131335C3ECEC2FBE5F5FE11B +:10E91000359797A2884444CC2E17173993C4C4570F +:10E9200055A7A7F2FC7E7E827A3D3D47C86464AC61 +:10E93000BA5D5DE73219192BE6737395C06060A06C +:10E94000198181989E4F4FD1A3DCDC7F442222663F +:10E95000542A2A7E3B9090AB0B8888838C4646CA0B +:10E96000C7EEEE296BB8B8D32814143CA7DEDE79C5 +:10E97000BC5E5EE2160B0B1DADDBDB76DBE0E03B45 +:10E9800064323256743A3A4E140A0A1E924949DBEE +:10E990000C06060A4824246CB85C5CE49FC2C25D85 +:10E9A000BDD3D36E43ACACEFC46262A6399191A8DB +:10E9B000319595A4D3E4E437F279798BD5E7E73242 +:10E9C0008BC8C8436E373759DA6D6DB7018D8D8CA2 +:10E9D000B1D5D5649C4E4ED249A9A9E0D86C6CB48F +:10E9E000AC5656FAF3F4F407CFEAEA25CA6565AFE8 +:10E9F000F47A7A8E47AEAEE9100808186FBABAD525 +:10EA0000F07878884A25256F5C2E2E72381C1C24DD +:10EA100057A6A6F173B4B4C797C6C651CBE8E8238E +:10EA2000A1DDDD7CE874749C3E1F1F21964B4BDDFD +:10EA300061BDBDDC0D8B8B860F8A8A85E07070907E +:10EA40007C3E3E4271B5B5C4CC6666AA904848D8B3 +:10EA500006030305F7F6F6011C0E0E12C26161A350 +:10EA60006A35355FAE5757F969B9B9D017868691BF +:10EA700099C1C1583A1D1D27279E9EB9D9E1E13899 +:10EA8000EBF8F8132B9898B322111133D26969BBB4 +:10EA9000A9D9D970078E8E89339494A72D9B9BB6E4 +:10EAA0003C1E1E2215878792C9E9E92087CECE49F0 +:10EAB000AA5555FF50282878A5DFDF7A038C8C8F64 +:10EAC00059A1A1F8098989801A0D0D1765BFBFDA10 +:10EAD000D7E6E631844242C6D06868B8824141C375 +:10EAE000299999B05A2D2D771E0F0F117BB0B0CBFD +:10EAF000A85454FC6DBBBBD62C16163A002020201F +:10EB000020202020202028282828282020202020DD +:10EB100020202020202020202020202020881010AD +:10EB20001010101010101010101010101004040409 +:10EB300004040404040404101010101010104141C7 +:10EB400041414141010101010101010101010101B5 +:10EB500001010101010101011010101010104242C9 +:10EB60004242424202020202020202020202020285 +:10EB70000202020202020202101010102000000025 +:10EB80000000000000000000000000000000000085 +:10EB90000000000000000000000000000000000075 +:10EBA0000000000000000000000000000000000065 +:10EBB0000000000000000000000000000000000055 +:10EBC0000000000000000000000000000000000045 +:10EBD0000000000000000000000000000000000035 +:10EBE0000000000000000000000000000000000025 +:10EBF0000000000000000000000000000000000015 +:10EC00002D2D0000504F5349584C595F434F5252DD +:10EC10004543540025733A206F7074696F6E20600D +:10EC200025732720697320616D626967756F75733D +:10EC30002028636F756C6420626520602D2D25731C +:10EC400027206F7220602D2D257327290A000000D0 +:10EC500025733A20696E76616C6964206F707469FF +:10EC60006F6E202D2D20602D2563270A00000000E7 +:10EC700025733A20617267756D656E7420726571D7 +:10EC8000756972656420666F72206F7074696F6E4B +:10EC9000206000002D2D2573270A00002D256327F5 +:10ECA0000A00000043000000000004A88002F4668F +:10ECB0008002F4888002F2B08002F2E88002F4520E +:10ECC0008002F4508002F3FE8002F4268002F3DC1E +:10ECD0008002F3DC8002F3CC8002F3DC8002F3EAF2 +:10ECE0008002F3EA8002F3DC3030303030303030F4 +:10ECF000303030303030303001020B040B0506016B +:10ED00000B01020B040B0506010B0B0B03040B0597 +:10ED10000B0B0B0B0B0B040B050B0B0B0B0B0B0B50 +:10ED20000B0B0B0B0B05080B040B0B070B0B0B0949 +:10ED30000B040B050B0B0B0B0A0B040B0B0B0B0B38 +:10ED40000B0B0B040B0B0B0B0B0B0B030B0B0B0B22 +:10ED50000B0B0B0B080B0B0B0B0B0B00000000003D +:10ED6000000000000001000304000000000001009A +:10ED7000030400000000000007030400000000007E +:10ED80000000030400000000000000000400000078 +:10ED90000000020003040000000000010005060559 +:10EDA0000000000001000506000000000000000354 +:10EDB0000400000000000008000000000000000047 +:10EDC000080000000000000000000000000000003B +:10EDD0003031323334353637383941424344454691 +:10EDE0000000000030313233343536373839616253 +:10EDF0006364656600000000202020202020202081 +:10EE000020202020202020200808080808080808C2 +:10EE10000808080808080808080808080808080872 +:10EE2000080808080808080807080807020808076B +:10EE30000808060708070508000101010101010192 +:10EE40000101080808080808080408040404040468 +:10EE50000808080803080804080808040804080843 +:10EE6000040808080808080808040804040404043E +:10EE70000304030803080404040308040304080843 +:10EE8000040803080808080808080808080808080B +:10EE900008080808080808080808080808080808F2 +:10EEA00008080808080808080808080808080808E2 +:10EEB00008080808080808080808080808080808D2 +:10EEC00008080808080808080808080808080808C2 +:10EED00008080808080808080808080808080808B2 +:10EEE00008080808080808080808080808080808A2 +:10EEF0000808080808080808080808080808080892 +:10EF00000808080808080808000A000100020003B1 +:10EF1000000400050006000700080009000A000BB5 +:10EF2000000C000D000E000F00100000000000009B +:10EF300000000000000000000000000000000000D1 +:10EF400000000000000000000000000000000000C1 +:10EF500000000000000000000000000000000000B1 +:10EF600000000000000000000000000000000000A1 +:10EF70000000000000000000000000000000000091 +:10EF800000000000000000000000000080037FB4CB +:10EF900080037E2080037E2080037E2080037E20ED +:10EFA00080037E2080037E2080037E2080037E20DD +:10EFB00080037E20FFFFFFFFFFFFFFFF49534F2D20 +:10EFC000383835392D310000800333228003334433 +:10EFD0008003316C800331A48003330E8003330C33 +:10EFE000800332BA800332E2800332988003329881 +:10EFF0008003328880033298800332A6800332A6D1 +:10F00000800332988003363480034AA480034AA4E4 +:10F010008003364480034AA480034AA480034AA4A0 +:10F0200080034AA480034AA480034AA4800336488C +:10F030008003371C80034AA48003371880033724D9 +:10F0400080034AA480033842800338468003384650 +:10F0500080033846800338468003384680033846AC +:10F0600080033846800338468003384680034AA42C +:10F0700080034AA480034AA480034AA480034AA4CC +:10F0800080034AA480034AA480034AA480034AA4BC +:10F0900080034AA48003394480033B9680034AA43A +:10F0A00080033B9680034AA480034AA480034AA4B9 +:10F0B00080034AA48003387880034AA480034AA4CA +:10F0C0008003416280034AA480034AA480034AA4C7 +:10F0D00080034AA480034AA48003452680034AA4EF +:10F0E00080034AA48003361A80034AA480034AA4FA +:10F0F00080034AA480034AA480034AA480034AA44C +:10F1000080034AA480034AA480034AA480034AA43B +:10F11000800338988003395A80033B9680033B96DE +:10F1200080033B968003387C8003395A80034AA4CD +:10F1300080034AA48003388080034AA480033FA24E +:10F1400080034178800343A48003389480034AA459 +:10F150008003445880034AA48003453C80034AA4AA +:10F1600080034AA48003476E01020B040B050601CD +:10F170000B01020B040B0506010B0B0B03040B0523 +:10F180000B0B0B0B0B0B040B050B0B0B0B0B0B0BDC +:10F190000B0B0B0B0B05080B040B0B070B0B0B09D5 +:10F1A0000B040B050B0B0B0B0A0B040B0B0B0B0BC4 +:10F1B0000B0B0B040B0B0B0B0B0B0B030B0B0B0BAE +:10F1C0000B0B0B0B080B0B0B0B0B0B0000000000C9 +:10F1D0000000000000010003040000000000010026 +:10F1E000030400000000000007030400000000000A +:10F1F0000000030400000000000000000400000004 +:10F2000000000200030400000000000100050605E4 +:10F2100000000000010005060000000000000003DF +:10F2200004000000000000080000000000000000D2 +:10F2300008000000000000000000000000000000C6 +:10F24000494E4600696E66004E414E006E616E008A +:10F2500020202020202020202020202020202020AE +:10F26000303030303030303030303030303030309E +:10F27000080808080808080808080808080808080E +:10F2800008080808080808080808080808080808FE +:10F2900007080807020808070808060708070508FE +:10F2A0000001010101010101010108080808080825 +:10F2B00008040804040404040808080803080804EF +:10F2C00008080804080408080408080808080808CA +:10F2D00008040804040404040304030803080404E1 +:10F2E00004030804030408080408030808080808BD +:10F2F000080808080808080808080808080808088E +:10F30000080808080808080808080808080808087D +:10F31000080808080808080808080808080808086D +:10F32000080808080808080808080808080808085D +:10F33000080808080808080808080808080808084D +:10F34000080808080808080808080808080808083D +:10F35000080808080808080808080808080808082D +:10F36000080808080808080808080808080808081D +:10F37000496E66696E697479000000004E614E0046 +:10F3800000000005000000190000007D3FF00000B3 +:10F390000000000040240000000000004059000070 +:10F3A00000000000408F40000000000040C38800C3 +:10F3B0000000000040F86A0000000000412E848038 +:10F3C00000000000416312D0000000004197D78484 +:10F3D0000000000041CDCD65000000004202A05FAA +:10F3E0002000000042374876E8000000426D1A9481 +:10F3F000A200000042A2309CE540000042D6BCC4FE +:10F400001E900000430C6BF5263400004341C37985 +:10F4100037E080004376345785D8A00043ABC16DF8 +:10F42000674EC80043E158E460913D004415AF1DAC +:10F4300078B58C40444B1AE4D6E2EF504480F0CFCC +:10F44000064DD59244B52D02C7E14AF644EA784309 +:10F4500079D99DB44341C37937E080004693B8B56C +:10F46000B5056E174D384F03E93FF9F55A827748D5 +:0CF47000F9301D3275154FDD7F73BF3C75 +:10F480000000000455736167653A2074746370204E +:10F490002D742F2D72205B2D6F7074696F6E735DEC +:10F4A00020686F73740A20202020202020202D6CDB +:10F4B0002020202020206C656E677468206F6620F5 +:10F4C00062756673207772697474656E20746F203C +:10F4D0006E6574776F726B202864656661756C74F5 +:10F4E0002031303234290A20202020202020202DD5 +:10F4F0006E2020202020206E756D626572206F6660 +:10F500002062756673207772697474656E20746FFB +:10F51000206E6574776F726B202864656661756C08 +:10F52000742031303234290A20202020202020204D +:10F530002D70202020202020706F7274206E756D39 +:10F5400062657220746F2073656E6420746F20286A +:10F5500064656661756C742032303030290A202071 +:10F560002020202020202D752020202020207564A0 +:10F57000700A20202020202020202D7620202020EE +:10F580002020766572626F73650A000080039954CB +:10F59000000000000000000000000000000000006B +:10F5A000000000000000000000000000000000005B +:10F5B000000000000000000000000000000000004B +:10F5C000000000000000000000000000000000003B +:10F5D000000000000000000000000000000000002B +:10F5E000000000000000000000000000000000001B +:10F5F000000000000000000000000000000000000B +:10F6000000000000000000000000000000000000FA +:10F6100000000000000000000000000000000000EA +:10F6200000000000000000000000000000000000DA +:10F6300000000000000000000000000000000000CA +:10F6400000000000000000000000000000000000BA +:10F6500000000000000000000000000000000000AA +:10F660000000000400000000ABCD00000000196E97 +:10F6700010000000FFFFFFFFFFFFFFFFFF7590007E +:10F68000000001FFFFFFFFFEFFFFFFFFFF751000FF +:10F69000000001FFFFFFFFFE00050000800149ECB4 +:10F6A000800149EC800149EC800149EC0000000038 +:10F6B000000002340000000C02040B0C1216182487 +:10F6C0003048606C000000000000000000000000F6 +:10F6D00000000010010000146D3E86B0FFFFFFFF28 +:10F6E000FFFF0000000003E800000001000000012F +:10F6F00000000320000000010000000000000008DE +:10F70000000000020000006400000000000000058E +:10F710000000000F000000050000000F000013882B +:10F7200000001388000007D00000138800003E800E +:10F73000000000020000000C02040B0C121618243A +:10F740003048606C00000000000000000000000075 +:10F7500000000000000000000D0102030405060780 +:10F7600008090A0B0C0D000000000011FF0000004A +:10F770000000000000000000000000000000000089 +:10F780000000000000000000000000000000FFFF7B +:10F79000FFFFFFFF00000001000000030000000168 +:10F7A0000000000100000000000000010000000156 +:10F7B0000000000100000001000000000000000146 +:10F7C0000000000A00000005000000000000000525 +:10F7D00000000000FFFFFFFF00000001000000002C +:10F7E00000000002FF000000000000000000000018 +:10F7F0000000000000000000000000000000000009 +:10F80000000000000000FFFFFFFFFFFF00000001FD +:10F810000000000300000000000007D000000064AA +:10F8200003010100060200000000000C82848B8CA2 +:10F83000129618243048606C0000000000000000A0 +:10F8400000000000000000000000000100000001B6 +:10F85000000000010014000000000014000007D0A8 +:10F860000000000000000001000000000000000691 +:10F8700000000001FFFFFFFF0A00000064756D6DCE +:10F88000795F7373696400000000000000000000ED +:10F890000000000000000000000000000000000068 +:10F8A000303030313032303330343035303630373C +:10F8B0003038303930613062306330643065306602 +:10F8C0003130313131323133313431353136313714 +:10F8D00031383139316131623163316431653166DA +:10F8E00000000000000000028003D670000000004D +:10F8F000800255EC80025614800256588002569CB5 +:10F90000800256AA800255F4800256B6800256D074 +:10F910008002614C8003EAFD0000003F000000010E +:10F920008003EF2C8003EF4C8003EF6C000000009D +:10F9300000000000000000000000000000000000C7 +:10F940008003ECA4000000000000000000000000A4 +:10F9500000000000000000000000000000000000A7 +:10F960000000000000000000000000000000000097 +:10F970000000000000000000000000000000000087 +:10F980000000000000000000000000000000000077 +:10F990000000000000000000000000000000000067 +:10F9A0000000000000000000000000000000000057 +:10F9B0000000000000000000000000000000000047 +:10F9C0000000000000000000000000000000000037 +:10F9D0000000000000000000000000000000000027 +:10F9E0000000000000000000000000000000000017 +:10F9F0000000000000000000000000000000000007 +:10FA000000000000000000000000000000000000F6 +:10FA1000000004A800000000000000000000059C99 +:10FA20000000059C000005A4000005A4000005AC32 +:10FA3000000005AC000005B4000005B4000005BCE2 +:10FA4000000005BC000005C4000005C4000005CC92 +:10FA5000000005CC000005D4000005D4000005DC42 +:10FA6000000005DC000005E4000005E4000005ECF2 +:10FA7000000005EC000005F4000005F4000005FCA2 +:10FA8000000005FC00000604000006040000060C4F +:10FA90000000060C00000614000006140000061CFE +:10FAA0000000061C00000624000006240000062CAE +:10FAB0000000062C00000634000006340000063C5E +:10FAC0000000063C00000644000006440000064C0E +:10FAD0000000064C00000654000006540000065CBE +:10FAE0000000065C00000664000006640000066C6E +:10FAF0000000066C00000674000006740000067C1E +:10FB00000000067C00000684000006840000068CCD +:10FB10000000068C00000694000006940000069C7D +:10FB20000000069C000006A4000006A4000006AC2D +:10FB3000000006AC000006B4000006B4000006BCDD +:10FB4000000006BC000006C4000006C4000006CC8D +:10FB5000000006CC000006D4000006D4000006DC3D +:10FB6000000006DC000006E4000006E4000006ECED +:10FB7000000006EC000006F4000006F4000006FC9D +:10FB8000000006FC00000704000007040000070C4A +:10FB90000000070C00000714000007140000071CF9 +:10FBA0000000071C00000724000007240000072CA9 +:10FBB0000000072C00000734000007340000073C59 +:10FBC0000000073C00000744000007440000074C09 +:10FBD0000000074C00000754000007540000075CB9 +:10FBE0000000075C00000764000007640000076C69 +:10FBF0000000076C00000774000007740000077C19 +:10FC00000000077C00000784000007840000078CC8 +:10FC10000000078C00000794000007940000079C78 +:10FC20000000079C000007A4000007A4000007AC28 +:10FC3000000007AC000007B4000007B4000007BCD8 +:10FC4000000007BC000007C4000007C4000007CC88 +:10FC5000000007CC000007D4000007D4000007DC38 +:10FC6000000007DC000007E4000007E4000007ECE8 +:10FC7000000007EC000007F4000007F4000007FC98 +:10FC8000000007FC00000804000008040000080C45 +:10FC90000000080C00000814000008140000081CF4 +:10FCA0000000081C00000824000008240000082CA4 +:10FCB0000000082C00000834000008340000083C54 +:10FCC0000000083C00000844000008440000084C04 +:10FCD0000000084C00000854000008540000085CB4 +:10FCE0000000085C00000864000008640000086C64 +:10FCF0000000086C00000874000008740000087C14 +:10FD00000000087C00000884000008840000088CC3 +:10FD10000000088C00000894000008940000089C73 +:10FD20000000089C000008A4000008A4000008AC23 +:10FD3000000008AC000008B4000008B4000008BCD3 +:10FD4000000008BC000008C4000008C4000008CC83 +:10FD5000000008CC000008D4000008D4000008DC33 +:10FD6000000008DC000008E4000008E4000008ECE3 +:10FD7000000008EC000008F4000008F4000008FC93 +:10FD8000000008FC00000904000009040000090C40 +:10FD90000000090C00000914000009140000091CEF +:10FDA0000000091C00000924000009240000092C9F +:10FDB0000000092C00000934000009340000093C4F +:10FDC0000000093C00000944000009440000094CFF +:10FDD0000000094C00000954000009540000095CAF +:10FDE0000000095C00000964000009640000096C5F +:10FDF0000000096C00000974000009740000097C0F +:10FE00000000097C00000984000009840000098CBE +:10FE10000000098C00000994000009940002000011 +:0CFE2000FFFFFFFF0000000100007AFC63 +:040000058000000077 +:00000001FF diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/CONFIG/conf_access.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/CONFIG/conf_access.h new file mode 100644 index 000000000..2d38d5069 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/CONFIG/conf_access.h @@ -0,0 +1,170 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Memory access control configuration file. + * + * This file contains the possible external configuration of the memory access + * control. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _CONF_ACCESS_H_ +#define _CONF_ACCESS_H_ + +#include "compiler.h" +#include "board.h" + + +/*! \name Activation of Logical Unit Numbers + */ +//! @{ +#define LUN_0 DISABLE //!< On-Chip Virtual Memory. +#define LUN_1 ENABLE //!< AT45DBX Data Flash. +#define LUN_2 DISABLE //!< SD/MMC Card over SPI. +#define LUN_3 DISABLE +#define LUN_4 DISABLE +#define LUN_5 DISABLE +#define LUN_6 DISABLE +#define LUN_7 DISABLE +#define LUN_USB DISABLE //!< Host Mass-Storage Memory. +//! @} + +/*! \name LUN 0 Definitions + */ +//! @{ +#define VIRTUAL_MEM LUN_0 +#define LUN_ID_VIRTUAL_MEM LUN_ID_0 +#define LUN_0_INCLUDE "virtual_mem.h" +#define Lun_0_test_unit_ready virtual_test_unit_ready +#define Lun_0_read_capacity virtual_read_capacity +#define Lun_0_wr_protect virtual_wr_protect +#define Lun_0_removal virtual_removal +#define Lun_0_usb_read_10 virtual_usb_read_10 +#define Lun_0_usb_write_10 virtual_usb_write_10 +#define Lun_0_mem_2_ram virtual_mem_2_ram +#define Lun_0_ram_2_mem virtual_ram_2_mem +#define LUN_0_NAME "\"On-Chip Virtual Memory\"" +//! @} + +/*! \name LUN 1 Definitions + */ +//! @{ +#define AT45DBX_MEM LUN_1 +#define LUN_ID_AT45DBX_MEM LUN_ID_1 +#define LUN_1_INCLUDE "at45dbx_mem.h" +#define Lun_1_test_unit_ready at45dbx_test_unit_ready +#define Lun_1_read_capacity at45dbx_read_capacity +#define Lun_1_wr_protect at45dbx_wr_protect +#define Lun_1_removal at45dbx_removal +#define Lun_1_usb_read_10 at45dbx_usb_read_10 +#define Lun_1_usb_write_10 at45dbx_usb_write_10 +#define Lun_1_mem_2_ram at45dbx_df_2_ram +#define Lun_1_ram_2_mem at45dbx_ram_2_df +#define LUN_1_NAME "\"AT45DBX Data Flash\"" +//! @} + +/*! \name LUN 2 Definitions + */ +//! @{ +#define SD_MMC_SPI_MEM LUN_2 +#define LUN_ID_SD_MMC_SPI_MEM LUN_ID_2 +#define LUN_2_INCLUDE "sd_mmc_spi_mem.h" +#define Lun_2_test_unit_ready sd_mmc_spi_test_unit_ready +#define Lun_2_read_capacity sd_mmc_spi_read_capacity +#define Lun_2_wr_protect sd_mmc_spi_wr_protect +#define Lun_2_removal sd_mmc_spi_removal +#define Lun_2_usb_read_10 sd_mmc_spi_usb_read_10 +#define Lun_2_usb_write_10 sd_mmc_spi_usb_write_10 +#define Lun_2_mem_2_ram sd_mmc_spi_mem_2_ram +#define Lun_2_ram_2_mem sd_mmc_spi_ram_2_mem +#define LUN_2_NAME "\"SD/MMC Card over SPI\"" +//! @} + +/*! \name USB LUNs Definitions + */ +//! @{ +#define MEM_USB LUN_USB +#define LUN_ID_MEM_USB LUN_ID_USB +#define LUN_USB_INCLUDE "host_mem.h" +#define Lun_usb_test_unit_ready(lun) host_test_unit_ready(lun) +#define Lun_usb_read_capacity(lun, nb_sect) host_read_capacity(lun, nb_sect) +#define Lun_usb_read_sector_size(lun) host_read_sector_size(lun) +#define Lun_usb_wr_protect(lun) host_wr_protect(lun) +#define Lun_usb_removal() host_removal() +#define Lun_usb_mem_2_ram(addr, ram) host_read_10_ram(addr, ram) +#define Lun_usb_ram_2_mem(addr, ram) host_write_10_ram(addr, ram) +#define LUN_USB_NAME "\"Host Mass-Storage Memory\"" +//! @} + +/*! \name Actions Associated with Memory Accesses + * + * Write here the action to associate with each memory access. + * + * \warning Be careful not to waste time in order not to disturb the functions. + */ +//! @{ +#define memory_start_read_action(nb_sectors) +#define memory_stop_read_action() +#define memory_start_write_action(nb_sectors) +#define memory_stop_write_action() +//! @} + +/*! \name Activation of Interface Features + */ +//! @{ +#define ACCESS_USB DISABLED //!< MEM <-> USB interface. +#define ACCESS_MEM_TO_RAM ENABLED //!< MEM <-> RAM interface. +#define ACCESS_STREAM ENABLED //!< Streaming MEM <-> MEM interface. //mlf +#define ACCESS_STREAM_RECORD DISABLED //!< Streaming MEM <-> MEM interface in record mode. +#define ACCESS_MEM_TO_MEM DISABLED //!< MEM <-> MEM interface. +#define ACCESS_CODEC DISABLED //!< Codec interface. +//! @} + +/*! \name Specific Options for Access Control + */ +//! @{ +#define GLOBAL_WR_PROTECT DISABLED //!< Management of a global write protection. +//! @} + + +#endif // _CONF_ACCESS_H_ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/CONFIG/conf_at45dbx.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/CONFIG/conf_at45dbx.h new file mode 100644 index 000000000..3280e4fc1 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/CONFIG/conf_at45dbx.h @@ -0,0 +1,83 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief AT45DBX configuration file. + * + * This file contains the possible external configuration of the AT45DBX. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with an SPI module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _CONF_AT45DBX_H_ +#define _CONF_AT45DBX_H_ + + +#include "conf_access.h" + +#if AT45DBX_MEM == DISABLE + #error conf_at45dbx.h is #included although AT45DBX_MEM is disabled +#endif + + +#include "at45dbx.h" + + +//_____ D E F I N I T I O N S ______________________________________________ + +//! Size of AT45DBX data flash memories to manage. +#define AT45DBX_MEM_SIZE AT45DBX_1MB + +//! Number of AT45DBX components to manage. +#define AT45DBX_MEM_CNT 1 + +//! First chip select used by AT45DBX components on the SPI module instance. +//! AT45DBX_SPI_NPCS0_PIN always corresponds to this first NPCS, whatever it is. +#define AT45DBX_SPI_FIRST_NPCS AT45DBX_SPI_NPCS + +//! SPI master speed in Hz. +#define AT45DBX_SPI_MASTER_SPEED 12000000 + +//! Number of bits in each SPI transfer. +#define AT45DBX_SPI_BITS 8 + + +#endif // _CONF_AT45DBX_H_ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/CONFIG/conf_ebi.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/CONFIG/conf_ebi.h new file mode 100644 index 000000000..aacdb1314 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/CONFIG/conf_ebi.h @@ -0,0 +1,108 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief CONF_EBI EBI/SMC driver for AVR32 UC3. + * + * \note The values defined in this file are device-specific. See the device + * datasheet for further information. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with an SMC module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _CONF_EBI_H_ +#define _CONF_EBI_H_ + +#include "compiler.h" +#include "board.h" + +#if (ET024006DHU_SMC_USE_NCS == 0) +#define SMC_USE_NCS0 +#define SMC_COMPONENT_CS0 ET024006DHU_SMC_COMPONENT_CS +#else + +#if (ET024006DHU_SMC_USE_NCS == 2) +#define SMC_USE_NCS2 +#define SMC_COMPONENT_CS2 ET024006DHU_SMC_COMPONENT_CS + +#else +#error This board is not supported +#endif +#endif + +#define EBI_DATA_0 ET024006DHU_EBI_DATA_0 +#define EBI_DATA_1 ET024006DHU_EBI_DATA_1 +#define EBI_DATA_2 ET024006DHU_EBI_DATA_2 +#define EBI_DATA_3 ET024006DHU_EBI_DATA_3 +#define EBI_DATA_4 ET024006DHU_EBI_DATA_4 +#define EBI_DATA_5 ET024006DHU_EBI_DATA_5 +#define EBI_DATA_6 ET024006DHU_EBI_DATA_6 +#define EBI_DATA_7 ET024006DHU_EBI_DATA_7 +#define EBI_DATA_8 ET024006DHU_EBI_DATA_8 +#define EBI_DATA_9 ET024006DHU_EBI_DATA_9 +#define EBI_DATA_10 ET024006DHU_EBI_DATA_10 +#define EBI_DATA_11 ET024006DHU_EBI_DATA_11 +#define EBI_DATA_12 ET024006DHU_EBI_DATA_12 +#define EBI_DATA_13 ET024006DHU_EBI_DATA_13 +#define EBI_DATA_14 ET024006DHU_EBI_DATA_14 +#define EBI_DATA_15 ET024006DHU_EBI_DATA_15 + +#if BOARD==EVK1105 +#ifdef EVK1105_REV3 +#define EBI_ADDR_19 AVR32_EBI_ADDR_19 +#define EBI_NCS_2 ET024006DHU_EBI_NCS +#else +#define EBI_ADDR_21 ET024006DHU_EBI_ADDR_21 +#define EBI_NCS_0 ET024006DHU_EBI_NCS +#endif +#elif BOARD == UC3C_EK +#define EBI_ADDR_22 AVR32_EBI_ADDR_22 +#define EBI_NCS_0 ET024006DHU_EBI_NCS +#elif BOARD == EVK1104 +#define EBI_ADDR_21 ET024006DHU_EBI_ADDR_21 +#define EBI_NCS_0 ET024006DHU_EBI_NCS +#endif + + +#define EBI_NWE0 ET024006DHU_EBI_NWE +#define EBI_NRD ET024006DHU_EBI_NRD + +#endif // _CONF_EBI_H_ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/CONFIG/conf_sd_mmc_spi.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/CONFIG/conf_sd_mmc_spi.h new file mode 100644 index 000000000..94b55e10c --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/CONFIG/conf_sd_mmc_spi.h @@ -0,0 +1,73 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief SD/MMC configuration file. + * + * This file contains the possible external configuration of the SD/MMC. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with an SPI module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _CONF_SD_MMC_SPI_H_ +#define _CONF_SD_MMC_SPI_H_ + + +#include "conf_access.h" + +#if SD_MMC_SPI_MEM == DISABLE + #error conf_sd_mmc_spi.h is #included although SD_MMC_SPI_MEM is disabled +#endif + + +#include "sd_mmc_spi.h" + + +//_____ D E F I N I T I O N S ______________________________________________ + +//! SPI master speed in Hz. +#define SD_MMC_SPI_MASTER_SPEED 12000000 + +//! Number of bits in each SPI transfer. +#define SD_MMC_SPI_BITS 8 + + +#endif // _CONF_SD_MMC_SPI_H_ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/ASM/trampoline.x b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/ASM/trampoline.x new file mode 100644 index 000000000..c12712150 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/ASM/trampoline.x @@ -0,0 +1,74 @@ +/* This file is part of the ATMEL AVR32-SoftwareFramework-AT32UC3A-1.4.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief AVR32 UC3 ISP trampoline. + * + * In order to be able to program a project with both BatchISP and JTAGICE mkII + * without having to take the general-purpose fuses into consideration, add this + * file to the project and change the program entry point to _trampoline. + * + * The pre-programmed ISP will be erased if JTAGICE mkII is used. + * + * - Compiler: GNU GCC for AVR32 + * - Supported devices: All AVR32UC devices can be used. + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (C) 2006-2008, Atmel Corporation All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of ATMEL may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND + * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + +#include "conf_isp.h" + + +//! @{ +//! \verbatim + + + // This must be linked @ 0x80000000 if it is to be run upon reset. + .section .reset, "ax", @progbits + + + .global _trampoline + .type _trampoline, @function +_trampoline: + // Jump to program start. + rjmp program_start + + .org PROGRAM_START_OFFSET +program_start: + // Jump to the C runtime startup routine. + lda.w pc, _stext + + +//! \endverbatim +//! @} diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/BOARDS/ARDUINO/arduino.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/BOARDS/ARDUINO/arduino.h new file mode 100644 index 000000000..e687723c3 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/BOARDS/ARDUINO/arduino.h @@ -0,0 +1,237 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief AT32UC3A EVK1100 board header file. + * + * This file contains definitions and services related to the features of the + * EVK1100 board rev. B and C. + * + * To use this board, define BOARD=EVK1100. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 AT32UC3A devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _ARDUINO_H_ +#define _ARDUINO_H_ + +#include "compiler.h" + +#ifdef __AVR32_ABI_COMPILER__ // Automatically defined when compiling for AVR32, not when assembling. +# include "led.h" +#endif // __AVR32_ABI_COMPILER__ + + +/*! \name Oscillator Definitions + */ +//! @{ + +// RCOsc has no custom calibration by default. Set the following definition to +// the appropriate value if a custom RCOsc calibration has been applied to your +// part. +//#define FRCOSC AVR32_PM_RCOSC_FREQUENCY //!< RCOsc frequency: Hz. + +#define FOSC32 32768 //!< Osc32 frequency: Hz. +#define OSC32_STARTUP AVR32_PM_OSCCTRL32_STARTUP_8192_RCOSC //!< Osc32 startup time: RCOsc periods. + +#define FOSC0 12000000 //!< Osc0 frequency: Hz. +#define OSC0_STARTUP AVR32_PM_OSCCTRL0_STARTUP_2048_RCOSC //!< Osc0 startup time: RCOsc periods. + +// Osc1 crystal is not mounted by default. Set the following definitions to the +// appropriate values if a custom Osc1 crystal is mounted on your board. +//#define FOSC1 12000000 //!< Osc1 frequency: Hz. +//#define OSC1_STARTUP AVR32_PM_OSCCTRL1_STARTUP_2048_RCOSC //!< Osc1 startup time: RCOsc periods. + +//! @} + + +//! Number of LEDs. +#define LED_COUNT 0 + +/*! \name GPIO Connections of LEDs + */ +//! @{ +#define LED0_GPIO AVR32_PIN_PB19 +#define LED1_GPIO AVR32_PIN_PB20 +#define LED2_GPIO AVR32_PIN_PB21 +#define DEB_PIN_GPIO AVR32_PIN_PA20 +#define DEB2_PIN_GPIO AVR32_PIN_PB00 +//! @} + +/*! \name PWM Channels of LEDs + */ +//! @{ +#define LED0_PWM 0 +#define LED1_PWM 1 +#define LED2_PWM 2 +//! @} + +/*! \name PWM Functions of LEDs + */ +//! @{ +#define LED0_PWM_FUNCTION AVR32_PWM_0_FUNCTION +#define LED1_PWM_FUNCTION AVR32_PWM_1_FUNCTION +#define LED2_PWM_FUNCTION AVR32_PWM_2_FUNCTION +//! @} + +/*! \name Color Identifiers of LEDs to Use with LED Functions + */ +//! @{ +#define LED_MONO0_GREEN LED0 +#define LED_MONO1_RED LED1 +#define LED_MONO2_BLU LED2 +//! @} + +#if 0 +/*! \name SPI Connections of the DIP204 LCD + */ +//! @{ +#define DIP204_SPI (&AVR32_SPI1) +#define DIP204_SPI_NPCS 2 +#define DIP204_SPI_SCK_PIN AVR32_SPI1_SCK_0_0_PIN +#define DIP204_SPI_SCK_FUNCTION AVR32_SPI1_SCK_0_0_FUNCTION +#define DIP204_SPI_MISO_PIN AVR32_SPI1_MISO_0_0_PIN +#define DIP204_SPI_MISO_FUNCTION AVR32_SPI1_MISO_0_0_FUNCTION +#define DIP204_SPI_MOSI_PIN AVR32_SPI1_MOSI_0_0_PIN +#define DIP204_SPI_MOSI_FUNCTION AVR32_SPI1_MOSI_0_0_FUNCTION +#define DIP204_SPI_NPCS_PIN AVR32_SPI1_NPCS_2_0_PIN +#define DIP204_SPI_NPCS_FUNCTION AVR32_SPI1_NPCS_2_0_FUNCTION +//! @} + +/*! \name GPIO and PWM Connections of the DIP204 LCD Backlight + */ +//! @{ +#define DIP204_BACKLIGHT_PIN AVR32_PIN_PB18 +#define DIP204_PWM_CHANNEL 6 +#define DIP204_PWM_PIN AVR32_PWM_6_PIN +#define DIP204_PWM_FUNCTION AVR32_PWM_6_FUNCTION +//! @} +#endif + +/*! \name SPI Connections of the AT45DBX Data Flash Memory + */ +//! @{ +#define AT45DBX_SPI (&AVR32_SPI1) +#define AT45DBX_SPI_NPCS 2 +#define AT45DBX_SPI_SCK_PIN AVR32_SPI1_SCK_0_0_PIN +#define AT45DBX_SPI_SCK_FUNCTION AVR32_SPI1_SCK_0_0_FUNCTION +#define AT45DBX_SPI_MISO_PIN AVR32_SPI1_MISO_0_0_PIN +#define AT45DBX_SPI_MISO_FUNCTION AVR32_SPI1_MISO_0_0_FUNCTION +#define AT45DBX_SPI_MOSI_PIN AVR32_SPI1_MOSI_0_0_PIN +#define AT45DBX_SPI_MOSI_FUNCTION AVR32_SPI1_MOSI_0_0_FUNCTION +#define AT45DBX_SPI_NPCS2_PIN AVR32_SPI1_NPCS_2_0_PIN +#define AT45DBX_SPI_NPCS2_FUNCTION AVR32_SPI1_NPCS_2_0_FUNCTION +#define AT45DBX_CHIP_RESET AVR32_PIN_PA02 +//! @} + + +/*! \name GPIO and SPI Connections of the SD/MMC Connector + */ +//! @{ +//#define SD_MMC_CARD_DETECT_PIN AVR32_PIN_PA02 +//#define SD_MMC_WRITE_PROTECT_PIN AVR32_PIN_PA07 +#define SD_MMC_SPI (&AVR32_SPI1) +#define SD_MMC_SPI_NPCS 1 +#define SD_MMC_SPI_SCK_PIN AVR32_SPI1_SCK_0_0_PIN +#define SD_MMC_SPI_SCK_FUNCTION AVR32_SPI1_SCK_0_0_FUNCTION +#define SD_MMC_SPI_MISO_PIN AVR32_SPI1_MISO_0_0_PIN +#define SD_MMC_SPI_MISO_FUNCTION AVR32_SPI1_MISO_0_0_FUNCTION +#define SD_MMC_SPI_MOSI_PIN AVR32_SPI1_MOSI_0_0_PIN +#define SD_MMC_SPI_MOSI_FUNCTION AVR32_SPI1_MOSI_0_0_FUNCTION +#define SD_MMC_SPI_NPCS_PIN AVR32_SPI1_NPCS_1_0_PIN +#define SD_MMC_SPI_NPCS_FUNCTION AVR32_SPI1_NPCS_1_0_FUNCTION +//! @} + +/* Timer Counter to generate clock for WiFi chip*/ +# define WIFI_TC (&AVR32_TC) +# define WIFI_TC_CHANNEL_ID 0 +# define WIFI_TC_CHANNEL_PIN AVR32_TC_A0_0_0_PIN +# define WIFI_TC_CHANNEL_FUNCTION AVR32_TC_A0_0_0_FUNCTION +// Note that TC_A0_0_0 pin is pin 6 (PB23) on AT32UC3A1512 QFP100. + +/* Pin related to WiFi chip communication */ +#ifndef USE_POLL + #define USE_POLL +#endif + #define SPI_CS 0 + #define AVR32_SPI AVR32_SPI1 + #define GPIO_IRQ_PIN AVR32_PIN_PA03 + #define GPIO_IRQ AVR32_GPIO_IRQ_7 + #define GPIO_W_RESET_PIN AVR32_PIN_PA07 + #define GPIO_W_SHUTDOWN_PIN AVR32_PIN_PA09 + +/* Pin related to shield communication */ + #define ARDUINO_HANDSHAKE_PIN AVR32_PIN_PA25 + #define ARDUINO_EXTINT_PIN AVR32_PIN_PA04 //not used + + #define AVR32_PDCA_PID_TX AVR32_PDCA_PID_SPI1_TX + #define AVR32_PDCA_PID_RX AVR32_PDCA_PID_SPI1_RX + + +#if 0 +/*! \name TWI Connections of the Spare TWI Connector + */ +//! @{ +#define SPARE_TWI (&AVR32_TWI) +#define SPARE_TWI_SCL_PIN AVR32_TWI_SCL_0_0_PIN +#define SPARE_TWI_SCL_FUNCTION AVR32_TWI_SCL_0_0_FUNCTION +#define SPARE_TWI_SDA_PIN AVR32_TWI_SDA_0_0_PIN +#define SPARE_TWI_SDA_FUNCTION AVR32_TWI_SDA_0_0_FUNCTION +//! @} + + +/*! \name SPI Connections of the Spare SPI Connector + */ +//! @{ +#define SPARE_SPI (&AVR32_SPI0) +#define SPARE_SPI_NPCS 0 +#define SPARE_SPI_SCK_PIN AVR32_SPI0_SCK_0_0_PIN +#define SPARE_SPI_SCK_FUNCTION AVR32_SPI0_SCK_0_0_FUNCTION +#define SPARE_SPI_MISO_PIN AVR32_SPI0_MISO_0_0_PIN +#define SPARE_SPI_MISO_FUNCTION AVR32_SPI0_MISO_0_0_FUNCTION +#define SPARE_SPI_MOSI_PIN AVR32_SPI0_MOSI_0_0_PIN +#define SPARE_SPI_MOSI_FUNCTION AVR32_SPI0_MOSI_0_0_FUNCTION +#define SPARE_SPI_NPCS_PIN AVR32_SPI0_NPCS_0_0_PIN +#define SPARE_SPI_NPCS_FUNCTION AVR32_SPI0_NPCS_0_0_FUNCTION +//! @} +#endif + +#endif // _ARDUINO_H_ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/BOARDS/ARDUINO/led.c b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/BOARDS/ARDUINO/led.c new file mode 100644 index 000000000..d7cd439db --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/BOARDS/ARDUINO/led.c @@ -0,0 +1,346 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief AT32UC3A EVK1100 board LEDs support package. + * + * This file contains definitions and services related to the LED features of + * the EVK1100 board. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 AT32UC3A devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#include +#include "preprocessor.h" +#include "compiler.h" +#include "arduino.h" +#include "led.h" + + +//! Structure describing LED hardware connections. +typedef const struct +{ + struct + { + U32 PORT; //!< LED GPIO port. + U32 PIN_MASK; //!< Bit-mask of LED pin in GPIO port. + } GPIO; //!< LED GPIO descriptor. + struct + { + S32 CHANNEL; //!< LED PWM channel (< 0 if N/A). + S32 FUNCTION; //!< LED pin PWM function (< 0 if N/A). + } PWM; //!< LED PWM descriptor. +} tLED_DESCRIPTOR; + + +//! Hardware descriptors of all LEDs. +static tLED_DESCRIPTOR LED_DESCRIPTOR[LED_COUNT] = +{ +#define INSERT_LED_DESCRIPTOR(LED_NO, unused) \ + { \ + {LED##LED_NO##_GPIO / 32, 1 << (LED##LED_NO##_GPIO % 32)},\ + {LED##LED_NO##_PWM, LED##LED_NO##_PWM_FUNCTION } \ + }, + MREPEAT(LED_COUNT, INSERT_LED_DESCRIPTOR, ~) +#undef INSERT_LED_DESCRIPTOR +}; + + +//! Saved state of all LEDs. +static volatile U32 LED_State = (1 << LED_COUNT) - 1; + + +U32 LED_Read_Display(void) +{ + return LED_State; +} + + +void LED_Display(U32 leds) +{ + // Use the LED descriptors to get the connections of a given LED to the MCU. + tLED_DESCRIPTOR *led_descriptor; + volatile avr32_gpio_port_t *led_gpio_port; + + // Make sure only existing LEDs are specified. + leds &= (1 << LED_COUNT) - 1; + + // Update the saved state of all LEDs with the requested changes. + LED_State = leds; + + // For all LEDs... + for (led_descriptor = &LED_DESCRIPTOR[0]; + led_descriptor < LED_DESCRIPTOR + LED_COUNT; + led_descriptor++) + { + // Set the LED to the requested state. + led_gpio_port = &AVR32_GPIO.port[led_descriptor->GPIO.PORT]; + if (leds & 1) + { + led_gpio_port->ovrc = led_descriptor->GPIO.PIN_MASK; + } + else + { + led_gpio_port->ovrs = led_descriptor->GPIO.PIN_MASK; + } + led_gpio_port->oders = led_descriptor->GPIO.PIN_MASK; + led_gpio_port->gpers = led_descriptor->GPIO.PIN_MASK; + leds >>= 1; + } +} + + +U32 LED_Read_Display_Mask(U32 mask) +{ + return Rd_bits(LED_State, mask); +} + + +void LED_Display_Mask(U32 mask, U32 leds) +{ + // Use the LED descriptors to get the connections of a given LED to the MCU. + tLED_DESCRIPTOR *led_descriptor = &LED_DESCRIPTOR[0] - 1; + volatile avr32_gpio_port_t *led_gpio_port; + U8 led_shift; + + // Make sure only existing LEDs are specified. + mask &= (1 << LED_COUNT) - 1; + + // Update the saved state of all LEDs with the requested changes. + Wr_bits(LED_State, mask, leds); + + // While there are specified LEDs left to manage... + while (mask) + { + // Select the next specified LED and set it to the requested state. + led_shift = 1 + ctz(mask); + led_descriptor += led_shift; + led_gpio_port = &AVR32_GPIO.port[led_descriptor->GPIO.PORT]; + leds >>= led_shift - 1; + if (leds & 1) + { + led_gpio_port->ovrc = led_descriptor->GPIO.PIN_MASK; + } + else + { + led_gpio_port->ovrs = led_descriptor->GPIO.PIN_MASK; + } + led_gpio_port->oders = led_descriptor->GPIO.PIN_MASK; + led_gpio_port->gpers = led_descriptor->GPIO.PIN_MASK; + leds >>= 1; + mask >>= led_shift; + } +} + + +Bool LED_Test(U32 leds) +{ + return Tst_bits(LED_State, leds); +} + + +void LED_Off(U32 leds) +{ + // Use the LED descriptors to get the connections of a given LED to the MCU. + tLED_DESCRIPTOR *led_descriptor = &LED_DESCRIPTOR[0] - 1; + volatile avr32_gpio_port_t *led_gpio_port; + U8 led_shift; + + // Make sure only existing LEDs are specified. + leds &= (1 << LED_COUNT) - 1; + + // Update the saved state of all LEDs with the requested changes. + Clr_bits(LED_State, leds); + + // While there are specified LEDs left to manage... + while (leds) + { + // Select the next specified LED and turn it off. + led_shift = 1 + ctz(leds); + led_descriptor += led_shift; + led_gpio_port = &AVR32_GPIO.port[led_descriptor->GPIO.PORT]; + led_gpio_port->ovrs = led_descriptor->GPIO.PIN_MASK; + led_gpio_port->oders = led_descriptor->GPIO.PIN_MASK; + led_gpio_port->gpers = led_descriptor->GPIO.PIN_MASK; + leds >>= led_shift; + } +} + + +void LED_On(U32 leds) +{ + // Use the LED descriptors to get the connections of a given LED to the MCU. + tLED_DESCRIPTOR *led_descriptor = &LED_DESCRIPTOR[0] - 1; + volatile avr32_gpio_port_t *led_gpio_port; + U8 led_shift; + + // Make sure only existing LEDs are specified. + leds &= (1 << LED_COUNT) - 1; + + // Update the saved state of all LEDs with the requested changes. + Set_bits(LED_State, leds); + + // While there are specified LEDs left to manage... + while (leds) + { + // Select the next specified LED and turn it on. + led_shift = 1 + ctz(leds); + led_descriptor += led_shift; + led_gpio_port = &AVR32_GPIO.port[led_descriptor->GPIO.PORT]; + led_gpio_port->ovrc = led_descriptor->GPIO.PIN_MASK; + led_gpio_port->oders = led_descriptor->GPIO.PIN_MASK; + led_gpio_port->gpers = led_descriptor->GPIO.PIN_MASK; + leds >>= led_shift; + } +} + + +void LED_Toggle(U32 leds) +{ + // Use the LED descriptors to get the connections of a given LED to the MCU. + tLED_DESCRIPTOR *led_descriptor = &LED_DESCRIPTOR[0] - 1; + volatile avr32_gpio_port_t *led_gpio_port; + U8 led_shift; + + // Make sure only existing LEDs are specified. + leds &= (1 << LED_COUNT) - 1; + + // Update the saved state of all LEDs with the requested changes. + Tgl_bits(LED_State, leds); + + // While there are specified LEDs left to manage... + while (leds) + { + // Select the next specified LED and toggle it. + led_shift = 1 + ctz(leds); + led_descriptor += led_shift; + led_gpio_port = &AVR32_GPIO.port[led_descriptor->GPIO.PORT]; + led_gpio_port->ovrt = led_descriptor->GPIO.PIN_MASK; + led_gpio_port->oders = led_descriptor->GPIO.PIN_MASK; + led_gpio_port->gpers = led_descriptor->GPIO.PIN_MASK; + leds >>= led_shift; + } +} + + +U32 LED_Read_Display_Field(U32 field) +{ + return Rd_bitfield(LED_State, field); +} + + +void LED_Display_Field(U32 field, U32 leds) +{ + // Move the bit-field to the appropriate position for the bit-mask. + LED_Display_Mask(field, leds << ctz(field)); +} + + +U8 LED_Get_Intensity(U32 led) +{ + tLED_DESCRIPTOR *led_descriptor; + + // Check that the argument value is valid. + led = ctz(led); + led_descriptor = &LED_DESCRIPTOR[led]; + if (led >= LED_COUNT || led_descriptor->PWM.CHANNEL < 0) return 0; + + // Return the duty cycle value if the LED PWM channel is enabled, else 0. + return (AVR32_PWM.sr & (1 << led_descriptor->PWM.CHANNEL)) ? + AVR32_PWM.channel[led_descriptor->PWM.CHANNEL].cdty : 0; +} + + +void LED_Set_Intensity(U32 leds, U8 intensity) +{ + tLED_DESCRIPTOR *led_descriptor = &LED_DESCRIPTOR[0] - 1; + volatile avr32_pwm_channel_t *led_pwm_channel; + volatile avr32_gpio_port_t *led_gpio_port; + U8 led_shift; + + // For each specified LED... + for (leds &= (1 << LED_COUNT) - 1; leds; leds >>= led_shift) + { + // Select the next specified LED and check that it has a PWM channel. + led_shift = 1 + ctz(leds); + led_descriptor += led_shift; + if (led_descriptor->PWM.CHANNEL < 0) continue; + + // Initialize or update the LED PWM channel. + led_pwm_channel = &AVR32_PWM.channel[led_descriptor->PWM.CHANNEL]; + if (!(AVR32_PWM.sr & (1 << led_descriptor->PWM.CHANNEL))) + { + led_pwm_channel->cmr = (AVR32_PWM_CPRE_MCK << AVR32_PWM_CPRE_OFFSET) & + ~(AVR32_PWM_CALG_MASK | + AVR32_PWM_CPOL_MASK | + AVR32_PWM_CPD_MASK); + led_pwm_channel->cprd = 0x000000FF; + led_pwm_channel->cdty = intensity; + AVR32_PWM.ena = 1 << led_descriptor->PWM.CHANNEL; + } + else + { + AVR32_PWM.isr; + while (!(AVR32_PWM.isr & (1 << led_descriptor->PWM.CHANNEL))); + led_pwm_channel->cupd = intensity; + } + + // Switch the LED pin to its PWM function. + led_gpio_port = &AVR32_GPIO.port[led_descriptor->GPIO.PORT]; + if (led_descriptor->PWM.FUNCTION & 0x1) + { + led_gpio_port->pmr0s = led_descriptor->GPIO.PIN_MASK; + } + else + { + led_gpio_port->pmr0c = led_descriptor->GPIO.PIN_MASK; + } + if (led_descriptor->PWM.FUNCTION & 0x2) + { + led_gpio_port->pmr1s = led_descriptor->GPIO.PIN_MASK; + } + else + { + led_gpio_port->pmr1c = led_descriptor->GPIO.PIN_MASK; + } + led_gpio_port->gperc = led_descriptor->GPIO.PIN_MASK; + } +} diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/BOARDS/ARDUINO/led.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/BOARDS/ARDUINO/led.h new file mode 100644 index 000000000..a577124ff --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/BOARDS/ARDUINO/led.h @@ -0,0 +1,191 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief AT32UC3A EVK1100 board LEDs support package. + * + * This file contains definitions and services related to the LED features of + * the EVK1100 board. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 AT32UC3A devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _LED_H_ +#define _LED_H_ + +#include "compiler.h" + + +/*! \name Identifiers of LEDs to Use with LED Functions + */ +//! @{ +#define LED0 0x01 +#define LED1 0x02 +#define LED2 0x04 +#define LED3 0x08 +#define LED4 0x10 +#define LED5 0x20 +#define LED6 0x40 +#define LED7 0x80 +//! @} + + +/*! \brief Gets the last state of all LEDs set through the LED API. + * + * \return State of all LEDs (1 bit per LED). + * + * \note The GPIO pin configuration of all LEDs is left unchanged. + */ +extern U32 LED_Read_Display(void); + +/*! \brief Sets the state of all LEDs. + * + * \param leds New state of all LEDs (1 bit per LED). + * + * \note The pins of all LEDs are set to GPIO output mode. + */ +extern void LED_Display(U32 leds); + +/*! \brief Gets the last state of the specified LEDs set through the LED API. + * + * \param mask LEDs of which to get the state (1 bit per LED). + * + * \return State of the specified LEDs (1 bit per LED). + * + * \note The GPIO pin configuration of all LEDs is left unchanged. + */ +extern U32 LED_Read_Display_Mask(U32 mask); + +/*! \brief Sets the state of the specified LEDs. + * + * \param mask LEDs of which to set the state (1 bit per LED). + * + * \param leds New state of the specified LEDs (1 bit per LED). + * + * \note The pins of the specified LEDs are set to GPIO output mode. + */ +extern void LED_Display_Mask(U32 mask, U32 leds); + +/*! \brief Tests the last state of the specified LEDs set through the LED API. + * + * \param leds LEDs of which to test the state (1 bit per LED). + * + * \return \c TRUE if at least one of the specified LEDs has a state on, else + * \c FALSE. + * + * \note The GPIO pin configuration of all LEDs is left unchanged. + */ +extern Bool LED_Test(U32 leds); + +/*! \brief Turns off the specified LEDs. + * + * \param leds LEDs to turn off (1 bit per LED). + * + * \note The pins of the specified LEDs are set to GPIO output mode. + */ +extern void LED_Off(U32 leds); + +/*! \brief Turns on the specified LEDs. + * + * \param leds LEDs to turn on (1 bit per LED). + * + * \note The pins of the specified LEDs are set to GPIO output mode. + */ +extern void LED_On(U32 leds); + +/*! \brief Toggles the specified LEDs. + * + * \param leds LEDs to toggle (1 bit per LED). + * + * \note The pins of the specified LEDs are set to GPIO output mode. + */ +extern void LED_Toggle(U32 leds); + +/*! \brief Gets as a bit-field the last state of the specified LEDs set through + * the LED API. + * + * \param field LEDs of which to get the state (1 bit per LED). + * + * \return State of the specified LEDs (1 bit per LED, beginning with the first + * specified LED). + * + * \note The GPIO pin configuration of all LEDs is left unchanged. + */ +extern U32 LED_Read_Display_Field(U32 field); + +/*! \brief Sets as a bit-field the state of the specified LEDs. + * + * \param field LEDs of which to set the state (1 bit per LED). + * \param leds New state of the specified LEDs (1 bit per LED, beginning with + * the first specified LED). + * + * \note The pins of the specified LEDs are set to GPIO output mode. + */ +extern void LED_Display_Field(U32 field, U32 leds); + +/*! \brief Gets the intensity of the specified LED. + * + * \param led LED of which to get the intensity (1 bit per LED; only the least + * significant set bit is used). + * + * \return Intensity of the specified LED (0x00 to 0xFF). + * + * \warning The PWM channel of the specified LED is supposed to be used only by + * this module. + * + * \note The GPIO pin configuration of all LEDs is left unchanged. + */ +extern U8 LED_Get_Intensity(U32 led); + +/*! \brief Sets the intensity of the specified LEDs. + * + * \param leds LEDs of which to set the intensity (1 bit per LED). + * \param intensity New intensity of the specified LEDs (0x00 to 0xFF). + * + * \warning The PWM channels of the specified LEDs are supposed to be used only + * by this module. + * + * \note The pins of the specified LEDs are set to PWM output mode. + */ +extern void LED_Set_Intensity(U32 leds, U8 intensity); + + +#endif // _LED_H_ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/BOARDS/EVK1105/evk1105.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/BOARDS/EVK1105/evk1105.h new file mode 100644 index 000000000..edda44cb3 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/BOARDS/EVK1105/evk1105.h @@ -0,0 +1,433 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief AT32UC3A EVK1105 board header file. + * + * This file contains definitions and services related to the features of the + * EVK1105 board rev. B. + * + * To use this board, define BOARD=EVK1105. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 AT32UC3A devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _EVK1105_H_ +#define _EVK1105_H_ + +#ifdef EVK1105_REV3 +# include "evk1105_rev3.h" +#else + +#include "compiler.h" + +#ifdef __AVR32_ABI_COMPILER__ // Automatically defined when compiling for AVR32, not when assembling. +# include "led.h" +#endif // __AVR32_ABI_COMPILER__ + + +/*! \name Oscillator Definitions + */ +//! @{ + +// RCOsc has no custom calibration by default. Set the following definition to +// the appropriate value if a custom RCOsc calibration has been applied to your +// part. +//#define FRCOSC AVR32_PM_RCOSC_FREQUENCY //!< RCOsc frequency: Hz. + +#define FOSC32 32768 //!< Osc32 frequency: Hz. +#define OSC32_STARTUP AVR32_PM_OSCCTRL32_STARTUP_8192_RCOSC //!< Osc32 startup time: RCOsc periods. + +#define FOSC0 12000000 //!< Osc0 frequency: Hz. +#define OSC0_STARTUP AVR32_PM_OSCCTRL0_STARTUP_2048_RCOSC //!< Osc0 startup time: RCOsc periods. + +#define FOSC1 11289600 //!< Osc1 frequency: Hz +#define OSC1_STARTUP AVR32_PM_OSCCTRL1_STARTUP_2048_RCOSC //!< Osc1 startup time: RCOsc periods. + + +//! @} + + +/*! \name SDRAM Definitions + */ +//! @{ + +//! Part header file of used SDRAM(s). +#define SDRAM_PART_HDR "MT48LC16M16A2TG7E/mt48lc16m16a2tg7e.h" + +//! Data bus width to use the SDRAM(s) with (16 or 32 bits; always 16 bits on +//! UC3). +#define SDRAM_DBW 16 +//! @} + + +/*! \name USB Definitions + */ +//! @{ +//! Multiplexed pin used for USB_ID: AVR32_USBB_USB_ID_x_x. +//! To be selected according to the AVR32_USBB_USB_ID_x_x_PIN and +//! AVR32_USBB_USB_ID_x_x_FUNCTION definitions from . +#define AVR32_USBB_USB_ID_0_2_PIN 21 +#define AVR32_USBB_USB_ID_0_2_FUNCTION 2 +#define USB_ID AVR32_USBB_USB_ID_0_2 + +//! Multiplexed pin used for USB_VBOF: AVR32_USBB_USB_VBOF_x_x. +//! To be selected according to the AVR32_USBB_USB_VBOF_x_x_PIN and +//! AVR32_USBB_USB_VBOF_x_x_FUNCTION definitions from . +# define USB_VBOF AVR32_USBB_USB_VBOF_0_1 + + +//! Active level of the USB_VBOF output pin. +# define USB_VBOF_ACTIVE_LEVEL LOW + +//! USB overcurrent detection pin. +# define USB_OVERCURRENT_DETECT_PIN AVR32_PIN_PX15 + +//! @} + + +//! GPIO connection of the MAC PHY PWR_DOWN/INT signal. +# define MACB_INTERRUPT_PIN AVR32_PIN_PA26 + + + +//! Number of LEDs. +#define LED_COUNT 4 + +/*! \name GPIO Connections of LEDs + */ +//! @{ +# define LED0_GPIO AVR32_PIN_PB27 +# define LED1_GPIO AVR32_PIN_PB28 +# define LED2_GPIO AVR32_PIN_PA05 +# define LED3_GPIO AVR32_PIN_PA06 +//! @} + +/*! \name Color Identifiers of LEDs to Use with LED Functions + */ +//! @{ +#define LED_MONO0_GREEN LED0 +#define LED_MONO1_GREEN LED1 +#define LED_MONO2_GREEN LED2 +#define LED_MONO3_GREEN LED3 +//! @} + +/*! \name PWM Channels of LEDs + */ +//! @{ +#define LED0_PWM 4 +#define LED1_PWM 5 +#define LED2_PWM (-1) +#define LED3_PWM (-1) +//! @} + +/*! \name PWM Functions of LEDs + */ +//! @{ +/* TODO: Implement PWM functionality */ +#define LED0_PWM_FUNCTION (-1)//AVR32_PWM_0_FUNCTION +#define LED1_PWM_FUNCTION (-1)//AVR32_PWM_1_FUNCTION +#define LED2_PWM_FUNCTION (-1) +#define LED3_PWM_FUNCTION (-1) +//! @} + +//! External interrupt connection of touch sensor. +#define QT1081_EIC_EXTINT_PIN AVR32_EIC_EXTINT_1_PIN +#define QT1081_EIC_EXTINT_FUNCTION AVR32_EIC_EXTINT_1_FUNCTION +#define QT1081_EIC_EXTINT_IRQ AVR32_EIC_IRQ_1 +#define QT1081_EIC_EXTINT_INT AVR32_EIC_INT1 +/*! \name Touch sensor low power mode select + */ +#define QT1081_LP_MODE AVR32_PIN_PB29 + +/*! \name GPIO Connections of touch buttons + */ +//! @{ +#define QT1081_TOUCH_SENSOR_0 AVR32_PIN_PB22 +#define QT1081_TOUCH_SENSOR_0_PRESSED 1 +#define QT1081_TOUCH_SENSOR_1 AVR32_PIN_PB23 +#define QT1081_TOUCH_SENSOR_1_PRESSED 1 +#define QT1081_TOUCH_SENSOR_2 AVR32_PIN_PB24 +#define QT1081_TOUCH_SENSOR_2_PRESSED 1 +#define QT1081_TOUCH_SENSOR_3 AVR32_PIN_PB25 +#define QT1081_TOUCH_SENSOR_3_PRESSED 1 +#define QT1081_TOUCH_SENSOR_4 AVR32_PIN_PB26 +#define QT1081_TOUCH_SENSOR_4_PRESSED 1 + +#define QT1081_TOUCH_SENSOR_ENTER QT1081_TOUCH_SENSOR_4 +#define QT1081_TOUCH_SENSOR_ENTER_PRESSED QT1081_TOUCH_SENSOR_4_PRESSED +#define QT1081_TOUCH_SENSOR_LEFT QT1081_TOUCH_SENSOR_3 +#define QT1081_TOUCH_SENSOR_LEFT_PRESSED QT1081_TOUCH_SENSOR_3_PRESSED +#define QT1081_TOUCH_SENSOR_RIGHT QT1081_TOUCH_SENSOR_2 +#define QT1081_TOUCH_SENSOR_RIGHT_PRESSED QT1081_TOUCH_SENSOR_2_PRESSED +#define QT1081_TOUCH_SENSOR_UP QT1081_TOUCH_SENSOR_0 +#define QT1081_TOUCH_SENSOR_UP_PRESSED QT1081_TOUCH_SENSOR_0_PRESSED +#define QT1081_TOUCH_SENSOR_DOWN QT1081_TOUCH_SENSOR_1 +#define QT1081_TOUCH_SENSOR_DOWN_PRESSED QT1081_TOUCH_SENSOR_1_PRESSED +//! @} + +/*! \name SPI Connections of the AT45DBX Data Flash Memory + */ +//! @{ +#define AT45DBX_SPI (&AVR32_SPI0) +#define AT45DBX_SPI_NPCS 0 +#define AT45DBX_SPI_SCK_PIN AVR32_SPI0_SCK_0_0_PIN +#define AT45DBX_SPI_SCK_FUNCTION AVR32_SPI0_SCK_0_0_FUNCTION +#define AT45DBX_SPI_MISO_PIN AVR32_SPI0_MISO_0_0_PIN +#define AT45DBX_SPI_MISO_FUNCTION AVR32_SPI0_MISO_0_0_FUNCTION +#define AT45DBX_SPI_MOSI_PIN AVR32_SPI0_MOSI_0_0_PIN +#define AT45DBX_SPI_MOSI_FUNCTION AVR32_SPI0_MOSI_0_0_FUNCTION +#define AT45DBX_SPI_NPCS0_PIN AVR32_SPI0_NPCS_0_0_PIN +#define AT45DBX_SPI_NPCS0_FUNCTION AVR32_SPI0_NPCS_0_0_FUNCTION +//! @} + +/*! \name GPIO and SPI Connections of the SD/MMC Connector + */ +//! @{ +#define SD_MMC_CARD_DETECT_PIN AVR32_PIN_PA02 +#define SD_MMC_WRITE_PROTECT_PIN AVR32_PIN_PA18 +#define SD_MMC_SPI (&AVR32_SPI0) +#define SD_MMC_SPI_NPCS 1 +#define SD_MMC_SPI_SCK_PIN AVR32_SPI0_SCK_0_0_PIN +#define SD_MMC_SPI_SCK_FUNCTION AVR32_SPI0_SCK_0_0_FUNCTION +#define SD_MMC_SPI_MISO_PIN AVR32_SPI0_MISO_0_0_PIN +#define SD_MMC_SPI_MISO_FUNCTION AVR32_SPI0_MISO_0_0_FUNCTION +#define SD_MMC_SPI_MOSI_PIN AVR32_SPI0_MOSI_0_0_PIN +#define SD_MMC_SPI_MOSI_FUNCTION AVR32_SPI0_MOSI_0_0_FUNCTION +#define SD_MMC_SPI_NPCS_PIN AVR32_SPI0_NPCS_1_0_PIN +#define SD_MMC_SPI_NPCS_FUNCTION AVR32_SPI0_NPCS_1_0_FUNCTION +//! @} + + +/*! \name TWI expansion + */ +//! @{ +#define EXPANSION_TWI (&AVR32_TWI) +#define EXPANSION_RESET AVR32_PIN_PX16 +#define EXPANSION_TWI_SCL_PIN AVR32_TWI_SCL_0_0_PIN +#define EXPANSION_TWI_SCL_FUNCTION AVR32_TWI_SCL_0_0_FUNCTION +#define EXPANSION_TWI_SDA_PIN AVR32_TWI_SDA_0_0_PIN +#define EXPANSION_TWI_SDA_FUNCTION AVR32_TWI_SDA_0_0_FUNCTION +//! @} + +/*! \name Wireless expansion + */ + +#define WEXPANSION_EXTINT_PIN AVR32_EIC_EXTINT_8_PIN +#define WEXPANSION_EXTINT_FUNCTION AVR32_EIC_EXTINT_8_FUNCTION +#define WEXPANSION_GPIO1 AVR32_PIN_PB30 +#define WEXPANSION_GPIO2 AVR32_PIN_PB31 + +#define WEXPANSION_SPI (&AVR32_SPI0) +#define WEXPANSION_SPI_NPCS 2 +#define WEXPANSION_SPI_SCK_PIN AVR32_SPI0_SCK_0_0_PIN +#define WEXPANSION_SPI_SCK_FUNCTION AVR32_SPI0_SCK_0_0_FUNCTION +#define WEXPANSION_SPI_MISO_PIN AVR32_SPI0_MISO_0_0_PIN +#define WEXPANSION_SPI_MISO_FUNCTION AVR32_SPI0_MISO_0_0_FUNCTION +#define WEXPANSION_SPI_MOSI_PIN AVR32_SPI0_MOSI_0_0_PIN +#define WEXPANSION_SPI_MOSI_FUNCTION AVR32_SPI0_MOSI_0_0_FUNCTION +#define WEXPANSION_SPI_NPCS_PIN AVR32_SPI0_NPCS_2_0_PIN +#define WEXPANSION_SPI_NPCS_FUNCTION AVR32_SPI0_NPCS_2_0_FUNCTION + +//! @} + +/*! \name ET024006DHU TFT display + */ +//! @{ + +#define ET024006DHU_TE_PIN AVR32_PIN_PX19 +#define ET024006DHU_RESET_PIN AVR32_PIN_PX22 +#define ET024006DHU_BL_PIN AVR32_PWM_6_PIN +#define ET024006DHU_BL_FUNCTION AVR32_PWM_6_FUNCTION +#define ET024006DHU_DNC_PIN AVR32_EBI_ADDR_21_1_PIN +#define ET024006DHU_DNC_FUNCTION AVR32_EBI_ADDR_21_1_FUNCTION +#define ET024006DHU_EBI_NCS_PIN AVR32_EBI_NCS_0_1_PIN +#define ET024006DHU_EBI_NCS_FUNCTION AVR32_EBI_NCS_0_1_FUNCTION + +//! @} +/*! \name Optional SPI connection to the TFT + */ +//! @{ + +#define ET024006DHU_SPI (&AVR32_SPI0) +#define ET024006DHU_SPI_NPCS 3 +#define ET024006DHU_SPI_SCK_PIN AVR32_SPI0_SCK_0_0_PIN +#define ET024006DHU_SPI_SCK_FUNCTION AVR32_SPI0_SCK_0_0_FUNCTION +#define ET024006DHU_SPI_MISO_PIN AVR32_SPI0_MISO_0_0_PIN +#define ET024006DHU_SPI_MISO_FUNCTION AVR32_SPI0_MISO_0_0_FUNCTION +#define ET024006DHU_SPI_MOSI_PIN AVR32_SPI0_MOSI_0_0_PIN +#define ET024006DHU_SPI_MOSI_FUNCTION AVR32_SPI0_MOSI_0_0_FUNCTION +#define ET024006DHU_SPI_NPCS_PIN AVR32_SPI1_NPCS_3_0_PIN +#define ET024006DHU_SPI_NPCS_FUNCTION AVR32_SPI1_NPCS_3_0_FUNCTION + +//! @} + + +/*! \name Audio amplifier connection to the DAC + */ +//! @{ + +#define TPA6130_ABDAC (&AVR32_ABDAC) + +#define TPA6130_DATA0_PIN AVR32_ABDAC_DATA_0_1_PIN +#define TPA6130_DATA0_FUNCTION AVR32_ABDAC_DATA_0_1_FUNCTION +#define TPA6130_DATAN0_PIN AVR32_ABDAC_DATAN_0_1_PIN +#define TPA6130_DATAN0_FUNCTION AVR32_ABDAC_DATAN_0_1_FUNCTION +#define TPA6130_DATA1_PIN AVR32_ABDAC_DATA_1_1_PIN +#define TPA6130_DATA1_FUNCTION AVR32_ABDAC_DATA_1_1_FUNCTION +#define TPA6130_DATAN1_PIN AVR32_ABDAC_DATAN_1_1_PIN +#define TPA6130_DATAN1_FUNCTION AVR32_ABDAC_DATAN_1_1_FUNCTION + +#define TPA6130_ABDAC_PDCA_PID AVR32_PDCA_PID_ABDAC_TX +#define TPA6130_ABDAC_PDCA_CHANNEL 0 +#define TPA6130_ABDAC_PDCA_IRQ AVR32_PDCA_IRQ_0 +#define TPA6130_ABDAC_PDCA_INT_LEVEL AVR32_INTC_INT3 + +#define TPA6130_TWI (&AVR32_TWI) +#define TPA6130_TWI_SCL_PIN AVR32_TWI_SCL_0_0_PIN +#define TPA6130_TWI_SCL_FUNCTION AVR32_TWI_SCL_0_0_FUNCTION +#define TPA6130_TWI_SDA_PIN AVR32_TWI_SDA_0_0_PIN +#define TPA6130_TWI_SDA_FUNCTION AVR32_TWI_SDA_0_0_FUNCTION + +//! }@ +/*! \name TI TLV320AIC23B sound chip + */ +//! @{ +#define TLV320_SSC (&AVR32_SSC) +#define TLV320_SSC_TX_CLOCK_PIN AVR32_SSC_TX_CLOCK_0_PIN +#define TLV320_SSC_TX_CLOCK_FUNCTION AVR32_SSC_TX_CLOCK_0_FUNCTION +#define TLV320_SSC_TX_DATA_PIN AVR32_SSC_TX_DATA_0_PIN +#define TLV320_SSC_TX_DATA_FUNCTION AVR32_SSC_TX_DATA_0_FUNCTION +#define TLV320_SSC_TX_FRAME_SYNC_PIN AVR32_SSC_TX_FRAME_SYNC_0_PIN +#define TLV320_SSC_TX_FRAME_SYNC_FUNCTION AVR32_SSC_TX_FRAME_SYNC_0_FUNCTION + +#define TLV320_TWI (&AVR32_TWI) +#define TLV320_TWI_SCL_PIN AVR32_TWI_SCL_0_0_PIN +#define TLV320_TWI_SCL_FUNCTION AVR32_TWI_SCL_0_0_FUNCTION +#define TLV320_TWI_SDA_PIN AVR32_TWI_SDA_0_0_PIN +#define TLV320_TWI_SDA_FUNCTION AVR32_TWI_SDA_0_0_FUNCTION + +#define TLV320_PM_GCLK_PIN AVR32_PM_GCLK_0_0_PIN +#define TLV320_PM_GCLK_FUNCTION AVR32_PM_GCLK_0_0_FUNCTION +//! @} + +////! \name SPI: Apple Authentication Chip Hardware Connections +////! @{ +#define IPOD_AUTH_CHIP_SPI (&AVR32_SPI0) +#define IPOD_AUTH_CHIP_SPI_IRQ AVR32_SPI0_IRQ +#define IPOD_AUTH_CHIP_SPI_NPCS 2 +#define IPOD_AUTH_CHIP_SPI_SCK_PIN AVR32_SPI0_SCK_0_0_PIN +#define IPOD_AUTH_CHIP_SPI_SCK_FUNCTION AVR32_SPI0_SCK_0_0_FUNCTION +#define IPOD_AUTH_CHIP_SPI_MISO_PIN AVR32_SPI0_MISO_0_0_PIN +#define IPOD_AUTH_CHIP_SPI_MISO_FUNCTION AVR32_SPI0_MISO_0_0_FUNCTION +#define IPOD_AUTH_CHIP_SPI_MOSI_PIN AVR32_SPI0_MOSI_0_0_PIN +#define IPOD_AUTH_CHIP_SPI_MOSI_FUNCTION AVR32_SPI0_MOSI_0_0_FUNCTION +#define IPOD_AUTH_CHIP_SPI_NPCS_PIN AVR32_SPI0_NPCS_2_0_PIN +#define IPOD_AUTH_CHIP_SPI_NPCS_FUNCTION AVR32_SPI0_NPCS_2_0_FUNCTION +#define IPOD_AUTH_CHIP_SPI_N_RESET_PIN AVR32_PIN_PB30 +#define IPOD_AUTH_CHIP_SPI_CP_READY_PIN AVR32_PIN_PB31 +//! }@ + +/*! \name Connections of the iPOD Authentication Coprocessor + */ +//! @{ + +#define IPOD_AUTH_CHIP_TWI (&AVR32_TWI) +#define IPOD_AUTH_CHIP_TWI_SCL_PIN AVR32_TWI_SCL_0_0_PIN +#define IPOD_AUTH_CHIP_TWI_SCL_FUNCTION AVR32_TWI_SCL_0_0_FUNCTION +#define IPOD_AUTH_CHIP_TWI_SDA_PIN AVR32_TWI_SDA_0_0_PIN +#define IPOD_AUTH_CHIP_TWI_SDA_FUNCTION AVR32_TWI_SDA_0_0_FUNCTION +#define IPOD_AUTH_CHIP_TWI_N_RESET_PIN AVR32_PIN_PX16 + +//! @} + +/*! \name USART connection to the UC3B board controller + */ +//! @{ + +#define USART0_RXD_PIN AVR32_USART0_RXD_0_0_PIN +#define USART0_RXD_FUNCTION AVR32_USART0_RXD_0_0_FUNCTION +#define USART0_TXD_PIN AVR32_USART0_TXD_0_0_PIN +#define USART0_TXD_FUNCTION AVR32_USART0_TXD_0_0_FUNCTION +#define USART0_RTS_PIN AVR32_USART0_RTS_0_0_PIN +#define USART0_RTS_FUNCTION AVR32_USART0_RTS_0_0_FUNCTION +#define USART0_CTS_PIN AVR32_USART0_CTS_0_0_PIN +#define USART0_CTS_FUNCTION AVR32_USART0_CTS_0_0_FUNCTION + +//! @} + +#define ADC_VEXT_PIN AVR32_ADC_AD_7_PIN +#define ADC_VEXT_FUNCTION AVR32_ADC_AD_7_FUNCTION + +/*! \name LCD Connections of the ET024006DHU display + */ +//! @{ +#define ET024006DHU_SMC_USE_NCS 0 +#define ET024006DHU_SMC_COMPONENT_CS "smc_et024006dhu.h" + +#define ET024006DHU_EBI_DATA_0 AVR32_EBI_DATA_0 +#define ET024006DHU_EBI_DATA_1 AVR32_EBI_DATA_1 +#define ET024006DHU_EBI_DATA_2 AVR32_EBI_DATA_2 +#define ET024006DHU_EBI_DATA_3 AVR32_EBI_DATA_3 +#define ET024006DHU_EBI_DATA_4 AVR32_EBI_DATA_4 +#define ET024006DHU_EBI_DATA_5 AVR32_EBI_DATA_5 +#define ET024006DHU_EBI_DATA_6 AVR32_EBI_DATA_6 +#define ET024006DHU_EBI_DATA_7 AVR32_EBI_DATA_7 +#define ET024006DHU_EBI_DATA_8 AVR32_EBI_DATA_8 +#define ET024006DHU_EBI_DATA_9 AVR32_EBI_DATA_9 +#define ET024006DHU_EBI_DATA_10 AVR32_EBI_DATA_10 +#define ET024006DHU_EBI_DATA_11 AVR32_EBI_DATA_11 +#define ET024006DHU_EBI_DATA_12 AVR32_EBI_DATA_12 +#define ET024006DHU_EBI_DATA_13 AVR32_EBI_DATA_13 +#define ET024006DHU_EBI_DATA_14 AVR32_EBI_DATA_14 +#define ET024006DHU_EBI_DATA_15 AVR32_EBI_DATA_15 + +#define ET024006DHU_EBI_ADDR_21 AVR32_EBI_ADDR_21_1 + +#define ET024006DHU_EBI_NWE AVR32_EBI_NWE0_0 +#define ET024006DHU_EBI_NRD AVR32_EBI_NRD_0 +#define ET024006DHU_EBI_NCS AVR32_EBI_NCS_0_1 +//! @} + + +#endif // !EVK1105_REVA + +#endif // _EVK1105_H_ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/BOARDS/EVK1105/led.c b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/BOARDS/EVK1105/led.c new file mode 100644 index 000000000..561652aeb --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/BOARDS/EVK1105/led.c @@ -0,0 +1,346 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief AT32UC3A EVK1105 board LEDs support package. + * + * This file contains definitions and services related to the LED features of + * the EVK1105 board. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 AT32UC3A devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#include +#include "preprocessor.h" +#include "compiler.h" +#include "evk1105.h" +#include "led.h" + + +//! Structure describing LED hardware connections. +typedef const struct +{ + struct + { + U32 PORT; //!< LED GPIO port. + U32 PIN_MASK; //!< Bit-mask of LED pin in GPIO port. + } GPIO; //!< LED GPIO descriptor. + struct + { + S32 CHANNEL; //!< LED PWM channel (< 0 if N/A). + S32 FUNCTION; //!< LED pin PWM function (< 0 if N/A). + } PWM; //!< LED PWM descriptor. +} tLED_DESCRIPTOR; + + +//! Hardware descriptors of all LEDs. +static tLED_DESCRIPTOR LED_DESCRIPTOR[LED_COUNT] = +{ +#define INSERT_LED_DESCRIPTOR(LED_NO, unused) \ + { \ + {LED##LED_NO##_GPIO / 32, 1 << (LED##LED_NO##_GPIO % 32)},\ + {LED##LED_NO##_PWM, LED##LED_NO##_PWM_FUNCTION } \ + }, + MREPEAT(LED_COUNT, INSERT_LED_DESCRIPTOR, ~) +#undef INSERT_LED_DESCRIPTOR +}; + + +//! Saved state of all LEDs. +static volatile U32 LED_State = (1 << LED_COUNT) - 1; + + +U32 LED_Read_Display(void) +{ + return LED_State; +} + + +void LED_Display(U32 leds) +{ + // Use the LED descriptors to get the connections of a given LED to the MCU. + tLED_DESCRIPTOR *led_descriptor; + volatile avr32_gpio_port_t *led_gpio_port; + + // Make sure only existing LEDs are specified. + leds &= (1 << LED_COUNT) - 1; + + // Update the saved state of all LEDs with the requested changes. + LED_State = leds; + + // For all LEDs... + for (led_descriptor = &LED_DESCRIPTOR[0]; + led_descriptor < LED_DESCRIPTOR + LED_COUNT; + led_descriptor++) + { + // Set the LED to the requested state. + led_gpio_port = &AVR32_GPIO.port[led_descriptor->GPIO.PORT]; + if (leds & 1) + { + led_gpio_port->ovrc = led_descriptor->GPIO.PIN_MASK; + } + else + { + led_gpio_port->ovrs = led_descriptor->GPIO.PIN_MASK; + } + led_gpio_port->oders = led_descriptor->GPIO.PIN_MASK; + led_gpio_port->gpers = led_descriptor->GPIO.PIN_MASK; + leds >>= 1; + } +} + + +U32 LED_Read_Display_Mask(U32 mask) +{ + return Rd_bits(LED_State, mask); +} + + +void LED_Display_Mask(U32 mask, U32 leds) +{ + // Use the LED descriptors to get the connections of a given LED to the MCU. + tLED_DESCRIPTOR *led_descriptor = &LED_DESCRIPTOR[0] - 1; + volatile avr32_gpio_port_t *led_gpio_port; + U8 led_shift; + + // Make sure only existing LEDs are specified. + mask &= (1 << LED_COUNT) - 1; + + // Update the saved state of all LEDs with the requested changes. + Wr_bits(LED_State, mask, leds); + + // While there are specified LEDs left to manage... + while (mask) + { + // Select the next specified LED and set it to the requested state. + led_shift = 1 + ctz(mask); + led_descriptor += led_shift; + led_gpio_port = &AVR32_GPIO.port[led_descriptor->GPIO.PORT]; + leds >>= led_shift - 1; + if (leds & 1) + { + led_gpio_port->ovrc = led_descriptor->GPIO.PIN_MASK; + } + else + { + led_gpio_port->ovrs = led_descriptor->GPIO.PIN_MASK; + } + led_gpio_port->oders = led_descriptor->GPIO.PIN_MASK; + led_gpio_port->gpers = led_descriptor->GPIO.PIN_MASK; + leds >>= 1; + mask >>= led_shift; + } +} + + +Bool LED_Test(U32 leds) +{ + return Tst_bits(LED_State, leds); +} + + +void LED_Off(U32 leds) +{ + // Use the LED descriptors to get the connections of a given LED to the MCU. + tLED_DESCRIPTOR *led_descriptor = &LED_DESCRIPTOR[0] - 1; + volatile avr32_gpio_port_t *led_gpio_port; + U8 led_shift; + + // Make sure only existing LEDs are specified. + leds &= (1 << LED_COUNT) - 1; + + // Update the saved state of all LEDs with the requested changes. + Clr_bits(LED_State, leds); + + // While there are specified LEDs left to manage... + while (leds) + { + // Select the next specified LED and turn it off. + led_shift = 1 + ctz(leds); + led_descriptor += led_shift; + led_gpio_port = &AVR32_GPIO.port[led_descriptor->GPIO.PORT]; + led_gpio_port->ovrs = led_descriptor->GPIO.PIN_MASK; + led_gpio_port->oders = led_descriptor->GPIO.PIN_MASK; + led_gpio_port->gpers = led_descriptor->GPIO.PIN_MASK; + leds >>= led_shift; + } +} + + +void LED_On(U32 leds) +{ + // Use the LED descriptors to get the connections of a given LED to the MCU. + tLED_DESCRIPTOR *led_descriptor = &LED_DESCRIPTOR[0] - 1; + volatile avr32_gpio_port_t *led_gpio_port; + U8 led_shift; + + // Make sure only existing LEDs are specified. + leds &= (1 << LED_COUNT) - 1; + + // Update the saved state of all LEDs with the requested changes. + Set_bits(LED_State, leds); + + // While there are specified LEDs left to manage... + while (leds) + { + // Select the next specified LED and turn it on. + led_shift = 1 + ctz(leds); + led_descriptor += led_shift; + led_gpio_port = &AVR32_GPIO.port[led_descriptor->GPIO.PORT]; + led_gpio_port->ovrc = led_descriptor->GPIO.PIN_MASK; + led_gpio_port->oders = led_descriptor->GPIO.PIN_MASK; + led_gpio_port->gpers = led_descriptor->GPIO.PIN_MASK; + leds >>= led_shift; + } +} + + +void LED_Toggle(U32 leds) +{ + // Use the LED descriptors to get the connections of a given LED to the MCU. + tLED_DESCRIPTOR *led_descriptor = &LED_DESCRIPTOR[0] - 1; + volatile avr32_gpio_port_t *led_gpio_port; + U8 led_shift; + + // Make sure only existing LEDs are specified. + leds &= (1 << LED_COUNT) - 1; + + // Update the saved state of all LEDs with the requested changes. + Tgl_bits(LED_State, leds); + + // While there are specified LEDs left to manage... + while (leds) + { + // Select the next specified LED and toggle it. + led_shift = 1 + ctz(leds); + led_descriptor += led_shift; + led_gpio_port = &AVR32_GPIO.port[led_descriptor->GPIO.PORT]; + led_gpio_port->ovrt = led_descriptor->GPIO.PIN_MASK; + led_gpio_port->oders = led_descriptor->GPIO.PIN_MASK; + led_gpio_port->gpers = led_descriptor->GPIO.PIN_MASK; + leds >>= led_shift; + } +} + + +U32 LED_Read_Display_Field(U32 field) +{ + return Rd_bitfield(LED_State, field); +} + + +void LED_Display_Field(U32 field, U32 leds) +{ + // Move the bit-field to the appropriate position for the bit-mask. + LED_Display_Mask(field, leds << ctz(field)); +} + + +U8 LED_Get_Intensity(U32 led) +{ + tLED_DESCRIPTOR *led_descriptor; + + // Check that the argument value is valid. + led = ctz(led); + led_descriptor = &LED_DESCRIPTOR[led]; + if (led >= LED_COUNT || led_descriptor->PWM.CHANNEL < 0) return 0; + + // Return the duty cycle value if the LED PWM channel is enabled, else 0. + return (AVR32_PWM.sr & (1 << led_descriptor->PWM.CHANNEL)) ? + AVR32_PWM.channel[led_descriptor->PWM.CHANNEL].cdty : 0; +} + + +void LED_Set_Intensity(U32 leds, U8 intensity) +{ + tLED_DESCRIPTOR *led_descriptor = &LED_DESCRIPTOR[0] - 1; + volatile avr32_pwm_channel_t *led_pwm_channel; + volatile avr32_gpio_port_t *led_gpio_port; + U8 led_shift; + + // For each specified LED... + for (leds &= (1 << LED_COUNT) - 1; leds; leds >>= led_shift) + { + // Select the next specified LED and check that it has a PWM channel. + led_shift = 1 + ctz(leds); + led_descriptor += led_shift; + if (led_descriptor->PWM.CHANNEL < 0) continue; + + // Initialize or update the LED PWM channel. + led_pwm_channel = &AVR32_PWM.channel[led_descriptor->PWM.CHANNEL]; + if (!(AVR32_PWM.sr & (1 << led_descriptor->PWM.CHANNEL))) + { + led_pwm_channel->cmr = (AVR32_PWM_CPRE_MCK << AVR32_PWM_CPRE_OFFSET) & + ~(AVR32_PWM_CALG_MASK | + AVR32_PWM_CPOL_MASK | + AVR32_PWM_CPD_MASK); + led_pwm_channel->cprd = 0x000000FF; + led_pwm_channel->cdty = intensity; + AVR32_PWM.ena = 1 << led_descriptor->PWM.CHANNEL; + } + else + { + AVR32_PWM.isr; + while (!(AVR32_PWM.isr & (1 << led_descriptor->PWM.CHANNEL))); + led_pwm_channel->cupd = intensity; + } + + // Switch the LED pin to its PWM function. + led_gpio_port = &AVR32_GPIO.port[led_descriptor->GPIO.PORT]; + if (led_descriptor->PWM.FUNCTION & 0x1) + { + led_gpio_port->pmr0s = led_descriptor->GPIO.PIN_MASK; + } + else + { + led_gpio_port->pmr0c = led_descriptor->GPIO.PIN_MASK; + } + if (led_descriptor->PWM.FUNCTION & 0x2) + { + led_gpio_port->pmr1s = led_descriptor->GPIO.PIN_MASK; + } + else + { + led_gpio_port->pmr1c = led_descriptor->GPIO.PIN_MASK; + } + led_gpio_port->gperc = led_descriptor->GPIO.PIN_MASK; + } +} diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/BOARDS/EVK1105/led.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/BOARDS/EVK1105/led.h new file mode 100644 index 000000000..7766b6a76 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/BOARDS/EVK1105/led.h @@ -0,0 +1,187 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief AT32UC3A EVK1105 board LEDs support package. + * + * This file contains definitions and services related to the LED features of + * the EVK1105 board. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 AT32UC3A devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _LED_H_ +#define _LED_H_ + +#include "compiler.h" + + +/*! \name Identifiers of LEDs to Use with LED Functions + */ +//! @{ +#define LED0 0x01 +#define LED1 0x02 +#define LED2 0x04 +#define LED3 0x08 +//! @} + + +/*! \brief Gets the last state of all LEDs set through the LED API. + * + * \return State of all LEDs (1 bit per LED). + * + * \note The GPIO pin configuration of all LEDs is left unchanged. + */ +extern U32 LED_Read_Display(void); + +/*! \brief Sets the state of all LEDs. + * + * \param leds New state of all LEDs (1 bit per LED). + * + * \note The pins of all LEDs are set to GPIO output mode. + */ +extern void LED_Display(U32 leds); + +/*! \brief Gets the last state of the specified LEDs set through the LED API. + * + * \param mask LEDs of which to get the state (1 bit per LED). + * + * \return State of the specified LEDs (1 bit per LED). + * + * \note The GPIO pin configuration of all LEDs is left unchanged. + */ +extern U32 LED_Read_Display_Mask(U32 mask); + +/*! \brief Sets the state of the specified LEDs. + * + * \param mask LEDs of which to set the state (1 bit per LED). + * + * \param leds New state of the specified LEDs (1 bit per LED). + * + * \note The pins of the specified LEDs are set to GPIO output mode. + */ +extern void LED_Display_Mask(U32 mask, U32 leds); + +/*! \brief Tests the last state of the specified LEDs set through the LED API. + * + * \param leds LEDs of which to test the state (1 bit per LED). + * + * \return \c TRUE if at least one of the specified LEDs has a state on, else + * \c FALSE. + * + * \note The GPIO pin configuration of all LEDs is left unchanged. + */ +extern Bool LED_Test(U32 leds); + +/*! \brief Turns off the specified LEDs. + * + * \param leds LEDs to turn off (1 bit per LED). + * + * \note The pins of the specified LEDs are set to GPIO output mode. + */ +extern void LED_Off(U32 leds); + +/*! \brief Turns on the specified LEDs. + * + * \param leds LEDs to turn on (1 bit per LED). + * + * \note The pins of the specified LEDs are set to GPIO output mode. + */ +extern void LED_On(U32 leds); + +/*! \brief Toggles the specified LEDs. + * + * \param leds LEDs to toggle (1 bit per LED). + * + * \note The pins of the specified LEDs are set to GPIO output mode. + */ +extern void LED_Toggle(U32 leds); + +/*! \brief Gets as a bit-field the last state of the specified LEDs set through + * the LED API. + * + * \param field LEDs of which to get the state (1 bit per LED). + * + * \return State of the specified LEDs (1 bit per LED, beginning with the first + * specified LED). + * + * \note The GPIO pin configuration of all LEDs is left unchanged. + */ +extern U32 LED_Read_Display_Field(U32 field); + +/*! \brief Sets as a bit-field the state of the specified LEDs. + * + * \param field LEDs of which to set the state (1 bit per LED). + * \param leds New state of the specified LEDs (1 bit per LED, beginning with + * the first specified LED). + * + * \note The pins of the specified LEDs are set to GPIO output mode. + */ +extern void LED_Display_Field(U32 field, U32 leds); + +/*! \brief Gets the intensity of the specified LED. + * + * \param led LED of which to get the intensity (1 bit per LED; only the least + * significant set bit is used). + * + * \return Intensity of the specified LED (0x00 to 0xFF). + * + * \warning The PWM channel of the specified LED is supposed to be used only by + * this module. + * + * \note The GPIO pin configuration of all LEDs is left unchanged. + */ +extern U8 LED_Get_Intensity(U32 led); + +/*! \brief Sets the intensity of the specified LEDs. + * + * \param leds LEDs of which to set the intensity (1 bit per LED). + * \param intensity New intensity of the specified LEDs (0x00 to 0xFF). + * + * \warning The PWM channels of the specified LEDs are supposed to be used only + * by this module. + * + * \note The pins of the specified LEDs are set to PWM output mode. + */ +extern void LED_Set_Intensity(U32 leds, U8 intensity); + + +#endif // _LED_H_ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/BOARDS/board.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/BOARDS/board.h new file mode 100644 index 000000000..78ee91e75 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/BOARDS/board.h @@ -0,0 +1,120 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Standard board header file. + * + * This file includes the appropriate board header file according to the + * defined board. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _BOARD_H_ +#define _BOARD_H_ + +#include + +/*! \name Base Boards + */ +//! @{ +#define EVK1100 1 //!< AT32UC3A EVK1100 board. +#define EVK1101 2 //!< AT32UC3B EVK1101 board. +#define UC3C_EK 3 //!< AT32UC3C UC3C_EK board. +#define EVK1104 4 //!< AT32UC3A3 EVK1104 board. +#define EVK1105 5 //!< AT32UC3A EVK1105 board. +#define STK1000 6 //!< AT32AP7000 STK1000 board. +#define NGW100 7 //!< AT32AP7000 NGW100 board. +#define STK600_RCUC3L0 8 //!< STK600 RCUC3L0 board. +#define UC3L_EK 9 //!< AT32UC3L-EK board. +#define USER_BOARD 99 //!< User-reserved board (if any). +//! @} + +/*! \name Extension Boards + */ +//! @{ +#define EXT1102 1 //!< AT32UC3B EXT1102 board. +#define MC300 2 //!< AT32UC3 MC300 board. +#define USER_EXT_BOARD 99 //!< User-reserved extension board (if any). +//! @} + +#if BOARD == EVK1100 + #include "EVK1100/evk1100.h" +#elif BOARD == EVK1101 + #include "EVK1101/evk1101.h" +#elif BOARD == UC3C_EK + #include "UC3C_EK/uc3c_ek.h" +#elif BOARD == EVK1104 + #include "EVK1104/evk1104.h" +#elif BOARD == EVK1105 + #include "EVK1105/evk1105.h" +#elif BOARD == STK1000 + #include "STK1000/stk1000.h" +#elif BOARD == NGW100 + #include "NGW100/ngw100.h" +#elif BOARD == STK600_RCUC3L0 + #include "STK600/RCUC3L0/stk600_rcuc3l0.h" +#elif BOARD == UC3L_EK + #include "UC3L_EK/uc3l_ek.h" +#elif BOARD == ARDUINO + #include "ARDUINO/arduino.h" +#else + #error No known AVR32 board defined +#endif + +#if (defined EXT_BOARD) + #if EXT_BOARD == EXT1102 + #include "EXT1102/ext1102.h" + #elif EXT_BOARD == MC300 + #include "MC300/mc300.h" + #elif EXT_BOARD == USER_EXT_BOARD + // User-reserved area: #include the header file of your extension board here + // (if any). + #endif +#endif + + +#ifndef FRCOSC + #define FRCOSC AVR32_PM_RCOSC_FREQUENCY //!< Default RCOsc frequency. +#endif + + +#endif // _BOARD_H_ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/BOARDS/board.h.my b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/BOARDS/board.h.my new file mode 100644 index 000000000..78ee91e75 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/BOARDS/board.h.my @@ -0,0 +1,120 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Standard board header file. + * + * This file includes the appropriate board header file according to the + * defined board. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _BOARD_H_ +#define _BOARD_H_ + +#include + +/*! \name Base Boards + */ +//! @{ +#define EVK1100 1 //!< AT32UC3A EVK1100 board. +#define EVK1101 2 //!< AT32UC3B EVK1101 board. +#define UC3C_EK 3 //!< AT32UC3C UC3C_EK board. +#define EVK1104 4 //!< AT32UC3A3 EVK1104 board. +#define EVK1105 5 //!< AT32UC3A EVK1105 board. +#define STK1000 6 //!< AT32AP7000 STK1000 board. +#define NGW100 7 //!< AT32AP7000 NGW100 board. +#define STK600_RCUC3L0 8 //!< STK600 RCUC3L0 board. +#define UC3L_EK 9 //!< AT32UC3L-EK board. +#define USER_BOARD 99 //!< User-reserved board (if any). +//! @} + +/*! \name Extension Boards + */ +//! @{ +#define EXT1102 1 //!< AT32UC3B EXT1102 board. +#define MC300 2 //!< AT32UC3 MC300 board. +#define USER_EXT_BOARD 99 //!< User-reserved extension board (if any). +//! @} + +#if BOARD == EVK1100 + #include "EVK1100/evk1100.h" +#elif BOARD == EVK1101 + #include "EVK1101/evk1101.h" +#elif BOARD == UC3C_EK + #include "UC3C_EK/uc3c_ek.h" +#elif BOARD == EVK1104 + #include "EVK1104/evk1104.h" +#elif BOARD == EVK1105 + #include "EVK1105/evk1105.h" +#elif BOARD == STK1000 + #include "STK1000/stk1000.h" +#elif BOARD == NGW100 + #include "NGW100/ngw100.h" +#elif BOARD == STK600_RCUC3L0 + #include "STK600/RCUC3L0/stk600_rcuc3l0.h" +#elif BOARD == UC3L_EK + #include "UC3L_EK/uc3l_ek.h" +#elif BOARD == ARDUINO + #include "ARDUINO/arduino.h" +#else + #error No known AVR32 board defined +#endif + +#if (defined EXT_BOARD) + #if EXT_BOARD == EXT1102 + #include "EXT1102/ext1102.h" + #elif EXT_BOARD == MC300 + #include "MC300/mc300.h" + #elif EXT_BOARD == USER_EXT_BOARD + // User-reserved area: #include the header file of your extension board here + // (if any). + #endif +#endif + + +#ifndef FRCOSC + #define FRCOSC AVR32_PM_RCOSC_FREQUENCY //!< Default RCOsc frequency. +#endif + + +#endif // _BOARD_H_ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX/at45dbx.c b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX/at45dbx.c new file mode 100644 index 000000000..93d3dd96c --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX/at45dbx.c @@ -0,0 +1,653 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Management of the AT45DBX data flash controller through SPI. + * + * This file manages the accesses to the AT45DBX data flash components. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with an SPI module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +//_____ I N C L U D E S ___________________________________________________ + +#include "conf_access.h" + + +#if AT45DBX_MEM == ENABLE + +#include "compiler.h" +#include "board.h" +#include "gpio.h" +#include "spi.h" +#include "conf_at45dbx.h" +#include "at45dbx.h" + + +#if AT45DBX_MEM_CNT > 4 + #error AT45DBX_MEM_CNT must not exceed 4 +#endif + + +//_____ D E F I N I T I O N S ______________________________________________ + +/*! \name AT45DBX Group A Commands + */ +//! @{ +#define AT45DBX_CMDA_RD_PAGE 0xD2 //!< Main Memory Page Read (Serial/8-bit Mode). +#define AT45DBX_CMDA_RD_ARRAY_LEG 0xE8 //!< Continuous Array Read, Legacy Command (Serial/8-bit Mode). +#define AT45DBX_CMDA_RD_ARRAY_LF_SM 0x03 //!< Continuous Array Read, Low-Frequency Mode (Serial Mode). +#define AT45DBX_CMDA_RD_ARRAY_AF_SM 0x0B //!< Continuous Array Read, Any-Frequency Mode (Serial Mode). +#define AT45DBX_CMDA_RD_SECTOR_PROT_REG 0x32 //!< Read Sector Protection Register (Serial/8-bit Mode). +#define AT45DBX_CMDA_RD_SECTOR_LKDN_REG 0x35 //!< Read Sector Lockdown Register (Serial/8-bit Mode). +#define AT45DBX_CMDA_RD_SECURITY_REG 0x77 //!< Read Security Register (Serial/8-bit Mode). +//! @} + +/*! \name AT45DBX Group B Commands + */ +//! @{ +#define AT45DBX_CMDB_ER_PAGE 0x81 //!< Page Erase (Serial/8-bit Mode). +#define AT45DBX_CMDB_ER_BLOCK 0x50 //!< Block Erase (Serial/8-bit Mode). +#define AT45DBX_CMDB_ER_SECTOR 0x7C //!< Sector Erase (Serial/8-bit Mode). +#define AT45DBX_CMDB_ER_CHIP 0xC794809A //!< Chip Erase (Serial/8-bit Mode). +#define AT45DBX_CMDB_XFR_PAGE_TO_BUF1 0x53 //!< Main Memory Page to Buffer 1 Transfer (Serial/8-bit Mode). +#define AT45DBX_CMDB_XFR_PAGE_TO_BUF2 0x55 //!< Main Memory Page to Buffer 2 Transfer (Serial/8-bit Mode). +#define AT45DBX_CMDB_CMP_PAGE_TO_BUF1 0x60 //!< Main Memory Page to Buffer 1 Compare (Serial/8-bit Mode). +#define AT45DBX_CMDB_CMP_PAGE_TO_BUF2 0x61 //!< Main Memory Page to Buffer 2 Compare (Serial/8-bit Mode). +#define AT45DBX_CMDB_PR_BUF1_TO_PAGE_ER 0x83 //!< Buffer 1 to Main Memory Page Program with Built-in Erase (Serial/8-bit Mode). +#define AT45DBX_CMDB_PR_BUF2_TO_PAGE_ER 0x86 //!< Buffer 2 to Main Memory Page Program with Built-in Erase (Serial/8-bit Mode). +#define AT45DBX_CMDB_PR_BUF1_TO_PAGE 0x88 //!< Buffer 1 to Main Memory Page Program without Built-in Erase (Serial/8-bit Mode). +#define AT45DBX_CMDB_PR_BUF2_TO_PAGE 0x89 //!< Buffer 2 to Main Memory Page Program without Built-in Erase (Serial/8-bit Mode). +#define AT45DBX_CMDB_PR_PAGE_TH_BUF1 0x82 //!< Main Memory Page Program through Buffer 1 (Serial/8-bit Mode). +#define AT45DBX_CMDB_PR_PAGE_TH_BUF2 0x85 //!< Main Memory Page Program through Buffer 2 (Serial/8-bit Mode). +#define AT45DBX_CMDB_RWR_PAGE_TH_BUF1 0x58 //!< Auto Page Rewrite through Buffer 1 (Serial/8-bit Mode). +#define AT45DBX_CMDB_RWR_PAGE_TH_BUF2 0x59 //!< Auto Page Rewrite through Buffer 2 (Serial/8-bit Mode). +//! @} + +/*! \name AT45DBX Group C Commands + */ +//! @{ +#define AT45DBX_CMDC_RD_BUF1_LF_SM 0xD1 //!< Buffer 1 Read, Low-Frequency Mode (Serial Mode). +#define AT45DBX_CMDC_RD_BUF2_LF_SM 0xD3 //!< Buffer 2 Read, Low-Frequency Mode (Serial Mode). +#define AT45DBX_CMDC_RD_BUF1_AF_SM 0xD4 //!< Buffer 1 Read, Any-Frequency Mode (Serial Mode). +#define AT45DBX_CMDC_RD_BUF2_AF_SM 0xD6 //!< Buffer 2 Read, Any-Frequency Mode (Serial Mode). +#define AT45DBX_CMDC_RD_BUF1_AF_8M 0x54 //!< Buffer 1 Read, Any-Frequency Mode (8-bit Mode). +#define AT45DBX_CMDC_RD_BUF2_AF_8M 0x56 //!< Buffer 2 Read, Any-Frequency Mode (8-bit Mode). +#define AT45DBX_CMDC_WR_BUF1 0x84 //!< Buffer 1 Write (Serial/8-bit Mode). +#define AT45DBX_CMDC_WR_BUF2 0x87 //!< Buffer 2 Write (Serial/8-bit Mode). +#define AT45DBX_CMDC_RD_STATUS_REG 0xD7 //!< Status Register Read (Serial/8-bit Mode). +#define AT45DBX_CMDC_RD_MNFCT_DEV_ID_SM 0x9F //!< Manufacturer and Device ID Read (Serial Mode). +//! @} + +/*! \name AT45DBX Group D Commands + */ +//! @{ +#define AT45DBX_CMDD_EN_SECTOR_PROT 0x3D2A7FA9 //!< Enable Sector Protection (Serial/8-bit Mode). +#define AT45DBX_CMDD_DIS_SECTOR_PROT 0x3D2A7F9A //!< Disable Sector Protection (Serial/8-bit Mode). +#define AT45DBX_CMDD_ER_SECTOR_PROT_REG 0x3D2A7FCF //!< Erase Sector Protection Register (Serial/8-bit Mode). +#define AT45DBX_CMDD_PR_SECTOR_PROT_REG 0x3D2A7FFC //!< Program Sector Protection Register (Serial/8-bit Mode). +#define AT45DBX_CMDD_LKDN_SECTOR 0x3D2A7F30 //!< Sector Lockdown (Serial/8-bit Mode). +#define AT45DBX_CMDD_PR_SECURITY_REG 0x9B000000 //!< Program Security Register (Serial/8-bit Mode). +#define AT45DBX_CMDD_PR_CONF_REG 0x3D2A80A6 //!< Program Configuration Register (Serial/8-bit Mode). +#define AT45DBX_CMDD_DEEP_PWR_DN 0xB9 //!< Deep Power-down (Serial/8-bit Mode). +#define AT45DBX_CMDD_RSM_DEEP_PWR_DN 0xAB //!< Resume from Deep Power-down (Serial/8-bit Mode). +//! @} + + +/*! \name Bit-Masks and Values for the Status Register + */ +//! @{ +#define AT45DBX_MSK_BUSY 0x80 //!< Busy status bit-mask. +#define AT45DBX_BUSY 0x00 //!< Busy status value (0x00 when busy, 0x80 when ready). +#define AT45DBX_MSK_DENSITY 0x3C //!< Device density bit-mask. +//! @} +#if AT45DBX_MEM_SIZE == AT45DBX_1MB + +/*! \name AT45DB081 Memories + */ +//! @{ +#define AT45DBX_DENSITY 0x24 //!< Device density value. +#define AT45DBX_BYTE_ADDR_BITS 9 //!< Address bits for byte position within buffer. + +//! @} +#elif AT45DBX_MEM_SIZE == AT45DBX_2MB + +/*! \name AT45DB161 Memories + */ +//! @{ +#define AT45DBX_DENSITY 0x2C //!< Device density value. +#define AT45DBX_BYTE_ADDR_BITS 10 //!< Address bits for byte position within buffer. +//! @} + +#elif AT45DBX_MEM_SIZE == AT45DBX_4MB + +/*! \name AT45DB321 Memories + */ +//! @{ +#define AT45DBX_DENSITY 0x34 //!< Device density value. +#define AT45DBX_BYTE_ADDR_BITS 10 //!< Address bits for byte position within buffer. +//! @} + +#elif AT45DBX_MEM_SIZE == AT45DBX_8MB + +/*! \name AT45DB642 Memories + */ +//! @{ +#define AT45DBX_DENSITY 0x3C //!< Device density value. +#define AT45DBX_BYTE_ADDR_BITS 11 //!< Address bits for byte position within buffer. +//! @} + +#else + #error AT45DBX_MEM_SIZE is not defined to a supported value +#endif + +//! Address bits for page selection. +#define AT45DBX_PAGE_ADDR_BITS (AT45DBX_MEM_SIZE - AT45DBX_PAGE_BITS) + +//! Number of bits for addresses within pages. +#define AT45DBX_PAGE_BITS (AT45DBX_BYTE_ADDR_BITS - 1) + +//! Page size in bytes. +#define AT45DBX_PAGE_SIZE (1 << AT45DBX_PAGE_BITS) + +//! Bit-mask for byte position within buffer in \ref gl_ptr_mem. +#define AT45DBX_MSK_PTR_BYTE ((1 << AT45DBX_PAGE_BITS) - 1) + +//! Bit-mask for page selection in \ref gl_ptr_mem. +#define AT45DBX_MSK_PTR_PAGE (((1 << AT45DBX_PAGE_ADDR_BITS) - 1) << AT45DBX_PAGE_BITS) + +//! Bit-mask for byte position within sector in \ref gl_ptr_mem. +#define AT45DBX_MSK_PTR_SECTOR ((1 << AT45DBX_SECTOR_BITS) - 1) + + +/*! \brief Sends a dummy byte through SPI. + */ +#define spi_write_dummy() spi_write(AT45DBX_SPI, 0xFF) + + +//! Boolean indicating whether memory is in busy state. +static Bool at45dbx_busy; + +//! Memory data pointer. +static U32 gl_ptr_mem; + +//! Sector buffer. +static U8 sector_buf[AT45DBX_SECTOR_SIZE]; + + +/*! \name Control Functions + */ +//! @{ + + +Bool at45dbx_init(spi_options_t spiOptions, unsigned int pba_hz) +{ + // Setup SPI registers according to spiOptions. + for (spiOptions.reg = AT45DBX_SPI_FIRST_NPCS; + spiOptions.reg < AT45DBX_SPI_FIRST_NPCS + AT45DBX_MEM_CNT; + spiOptions.reg++) + { + if (spi_setupChipReg(AT45DBX_SPI, &spiOptions, pba_hz) != SPI_OK) return KO; + } + + // Memory ready. + at45dbx_busy = FALSE; + + return OK; +} + + +/*! \brief Selects or unselects a DF memory. + * + * \param memidx Memory ID of DF to select or unselect. + * \param bSelect Boolean indicating whether the DF memory has to be selected. + */ +static void at45dbx_chipselect_df(U8 memidx, Bool bSelect) +{ + if (bSelect) + { + // Select SPI chip. + spi_selectChip(AT45DBX_SPI, AT45DBX_SPI_FIRST_NPCS + memidx); + } + else + { + // Unselect SPI chip. + spi_unselectChip(AT45DBX_SPI, AT45DBX_SPI_FIRST_NPCS + memidx); + } +} + + +Bool at45dbx_mem_check(void) +{ + U8 df; + U16 status = 0; + + // DF memory check. + for (df = 0; df < AT45DBX_MEM_CNT; df++) + { + // Select the DF memory to check. + at45dbx_chipselect_df(df, TRUE); + + // Send the Status Register Read command. + spi_write(AT45DBX_SPI, AT45DBX_CMDC_RD_STATUS_REG); + + // Send a dummy byte to read the status register. + spi_write_dummy(); + spi_read(AT45DBX_SPI, &status); + + // Unselect the checked DF memory. + at45dbx_chipselect_df(df, FALSE); + + // Unexpected device density value. + if ((status & AT45DBX_MSK_DENSITY) < AT45DBX_DENSITY) return KO; + } + + return OK; +} + + +/*! \brief Waits until the DF is ready. + */ +static void at45dbx_wait_ready(void) +{ + U16 status; + + // Select the DF memory gl_ptr_mem points to. + at45dbx_chipselect_df(gl_ptr_mem >> AT45DBX_MEM_SIZE, TRUE); + + // Send the Status Register Read command. + spi_write(AT45DBX_SPI, AT45DBX_CMDC_RD_STATUS_REG); + + // Read the status register until the DF is ready. + do + { + // Send a dummy byte to read the status register. + spi_write_dummy(); + spi_read(AT45DBX_SPI, &status); + } while ((status & AT45DBX_MSK_BUSY) == AT45DBX_BUSY); + + // Unselect the DF memory gl_ptr_mem points to. + at45dbx_chipselect_df(gl_ptr_mem >> AT45DBX_MEM_SIZE, FALSE); +} + + +Bool at45dbx_read_open(U32 sector) +{ + U32 addr; + + // Set the global memory pointer to a byte address. + gl_ptr_mem = sector << AT45DBX_SECTOR_BITS; // gl_ptr_mem = sector * AT45DBX_SECTOR_SIZE. + + // If the DF memory is busy, wait until it's ready. + if (at45dbx_busy) at45dbx_wait_ready(); + at45dbx_busy = FALSE; + + // Select the DF memory gl_ptr_mem points to. + at45dbx_chipselect_df(gl_ptr_mem >> AT45DBX_MEM_SIZE, TRUE); + + // Initiate a page read at a given sector. + + // Send the Main Memory Page Read command. + spi_write(AT45DBX_SPI, AT45DBX_CMDA_RD_PAGE); + + // Send the three address bytes, which comprise: + // - (24 - (AT45DBX_PAGE_ADDR_BITS + AT45DBX_BYTE_ADDR_BITS)) reserved bits; + // - then AT45DBX_PAGE_ADDR_BITS bits specifying the page in main memory to be read; + // - then AT45DBX_BYTE_ADDR_BITS bits specifying the starting byte address within that page. + // NOTE: The bits of gl_ptr_mem above the AT45DBX_MEM_SIZE bits are useless for the local + // DF addressing. They are used for DF discrimination when there are several DFs. + addr = (Rd_bitfield(gl_ptr_mem, AT45DBX_MSK_PTR_PAGE) << AT45DBX_BYTE_ADDR_BITS) | + Rd_bitfield(gl_ptr_mem, AT45DBX_MSK_PTR_BYTE); + spi_write(AT45DBX_SPI, LSB2W(addr)); + spi_write(AT45DBX_SPI, LSB1W(addr)); + spi_write(AT45DBX_SPI, LSB0W(addr)); + + // Send 32 don't care clock cycles to initialize the read operation. + spi_write_dummy(); + spi_write_dummy(); + spi_write_dummy(); + spi_write_dummy(); + + return OK; +} + + +void at45dbx_read_close(void) +{ + // Unselect the DF memory gl_ptr_mem points to. + at45dbx_chipselect_df(gl_ptr_mem >> AT45DBX_MEM_SIZE, FALSE); + + // Memory ready. + at45dbx_busy = FALSE; +} + + +Bool at45dbx_write_open(U32 sector) +{ + U32 addr; + + // Set the global memory pointer to a byte address. + gl_ptr_mem = sector << AT45DBX_SECTOR_BITS; // gl_ptr_mem = sector * AT45DBX_SECTOR_SIZE. + + // If the DF memory is busy, wait until it's ready. + if (at45dbx_busy) at45dbx_wait_ready(); + at45dbx_busy = FALSE; + +#if AT45DBX_PAGE_SIZE > AT45DBX_SECTOR_SIZE + // Select the DF memory gl_ptr_mem points to. + at45dbx_chipselect_df(gl_ptr_mem >> AT45DBX_MEM_SIZE, TRUE); + + // Transfer the content of the current page to buffer 1. + + // Send the Main Memory Page to Buffer 1 Transfer command. + spi_write(AT45DBX_SPI, AT45DBX_CMDB_XFR_PAGE_TO_BUF1); + + // Send the three address bytes, which comprise: + // - (24 - (AT45DBX_PAGE_ADDR_BITS + AT45DBX_BYTE_ADDR_BITS)) reserved bits; + // - then AT45DBX_PAGE_ADDR_BITS bits specifying the page in main memory to be read; + // - then AT45DBX_BYTE_ADDR_BITS don't care bits. + // NOTE: The bits of gl_ptr_mem above the AT45DBX_MEM_SIZE bits are useless for the local + // DF addressing. They are used for DF discrimination when there are several DFs. + addr = Rd_bitfield(gl_ptr_mem, AT45DBX_MSK_PTR_PAGE) << AT45DBX_BYTE_ADDR_BITS; + spi_write(AT45DBX_SPI, LSB2W(addr)); + spi_write(AT45DBX_SPI, LSB1W(addr)); + spi_write(AT45DBX_SPI, LSB0W(addr)); + + // Unselect the DF memory gl_ptr_mem points to. + at45dbx_chipselect_df(gl_ptr_mem >> AT45DBX_MEM_SIZE, FALSE); + + // Wait for end of page transfer. + at45dbx_wait_ready(); +#endif + + // Select the DF memory gl_ptr_mem points to. + at45dbx_chipselect_df(gl_ptr_mem >> AT45DBX_MEM_SIZE, TRUE); + + // Initiate a page write at a given sector. + + // Send the Main Memory Page Program through Buffer 1 command. + spi_write(AT45DBX_SPI, AT45DBX_CMDB_PR_PAGE_TH_BUF1); + + // Send the three address bytes, which comprise: + // - (24 - (AT45DBX_PAGE_ADDR_BITS + AT45DBX_BYTE_ADDR_BITS)) reserved bits; + // - then AT45DBX_PAGE_ADDR_BITS bits specifying the page in main memory to be written; + // - then AT45DBX_BYTE_ADDR_BITS bits specifying the starting byte address within that page. + // NOTE: The bits of gl_ptr_mem above the AT45DBX_MEM_SIZE bits are useless for the local + // DF addressing. They are used for DF discrimination when there are several DFs. + addr = (Rd_bitfield(gl_ptr_mem, AT45DBX_MSK_PTR_PAGE) << AT45DBX_BYTE_ADDR_BITS) | + Rd_bitfield(gl_ptr_mem, AT45DBX_MSK_PTR_BYTE); + spi_write(AT45DBX_SPI, LSB2W(addr)); + spi_write(AT45DBX_SPI, LSB1W(addr)); + spi_write(AT45DBX_SPI, LSB0W(addr)); + + return OK; +} + + +void at45dbx_write_close(void) +{ + // While end of logical sector not reached, zero-fill remaining memory bytes. + while (Rd_bitfield(gl_ptr_mem, AT45DBX_MSK_PTR_SECTOR)) + { + spi_write(AT45DBX_SPI, 0x00); + gl_ptr_mem++; + } + + // Unselect the DF memory gl_ptr_mem points to. + at45dbx_chipselect_df(gl_ptr_mem >> AT45DBX_MEM_SIZE, FALSE); + + // Memory busy. + at45dbx_busy = TRUE; +} + + +//! @} + + +/*! \name Single-Byte Access Functions + */ +//! @{ + + +U8 at45dbx_read_byte(void) +{ + U16 data; + + // Memory busy. + if (at45dbx_busy) + { + // Being here, we know that we previously finished a page read. + // => We have to access the next page. + + // Memory ready. + at45dbx_busy = FALSE; + + // Eventually select the next DF and open the next page. + // NOTE: at45dbx_read_open input parameter is a sector. + at45dbx_read_open(gl_ptr_mem >> AT45DBX_SECTOR_BITS); // gl_ptr_mem / AT45DBX_SECTOR_SIZE. + } + + // Send a dummy byte to read the next data byte. + spi_write_dummy(); + spi_read(AT45DBX_SPI, &data); + gl_ptr_mem++; + + // If end of page reached, + if (!Rd_bitfield(gl_ptr_mem, AT45DBX_MSK_PTR_BYTE)) + { + // unselect the DF memory gl_ptr_mem points to. + at45dbx_chipselect_df(gl_ptr_mem >> AT45DBX_MEM_SIZE, FALSE); + + // Memory busy. + at45dbx_busy = TRUE; + } + + return data; +} + + +Bool at45dbx_write_byte(U8 b) +{ + // Memory busy. + if (at45dbx_busy) + { + // Being here, we know that we previously launched a page programming. + // => We have to access the next page. + + // Eventually select the next DF and open the next page. + // NOTE: at45dbx_write_open input parameter is a sector. + at45dbx_write_open(gl_ptr_mem >> AT45DBX_SECTOR_BITS); // gl_ptr_mem / AT45DBX_SECTOR_SIZE. + } + + // Write the next data byte. + spi_write(AT45DBX_SPI, b); + gl_ptr_mem++; + + // If end of page reached, + if (!Rd_bitfield(gl_ptr_mem, AT45DBX_MSK_PTR_BYTE)) + { + // unselect the DF memory gl_ptr_mem points to in order to program the page. + at45dbx_chipselect_df(gl_ptr_mem >> AT45DBX_MEM_SIZE, FALSE); + + // Memory busy. + at45dbx_busy = TRUE; + } + + return OK; +} + + +//! @} + + +/*! \name Multiple-Sector Access Functions + */ +//! @{ + + +Bool at45dbx_read_multiple_sector(U16 nb_sector) +{ + while (nb_sector--) + { + // Read the next sector. + at45dbx_read_sector_2_ram(sector_buf); + at45dbx_read_multiple_sector_callback(sector_buf); + } + + return OK; +} + + +Bool at45dbx_write_multiple_sector(U16 nb_sector) +{ + while (nb_sector--) + { + // Write the next sector. + at45dbx_write_multiple_sector_callback(sector_buf); + at45dbx_write_sector_from_ram(sector_buf); + } + + return OK; +} + + +//! @} + + +/*! \name Single-Sector Access Functions + */ +//! @{ + + +Bool at45dbx_read_sector_2_ram(void *ram) +{ + U8 *_ram = ram; + U16 i; + U16 data; + + // Memory busy. + if (at45dbx_busy) + { + // Being here, we know that we previously finished a page read. + // => We have to access the next page. + + // Memory ready. + at45dbx_busy = FALSE; + + // Eventually select the next DF and open the next page. + // NOTE: at45dbx_read_open input parameter is a sector. + at45dbx_read_open(gl_ptr_mem >> AT45DBX_SECTOR_BITS); // gl_ptr_mem / AT45DBX_SECTOR_SIZE. + } + + // Read the next sector. + for (i = AT45DBX_SECTOR_SIZE; i; i--) + { + // Send a dummy byte to read the next data byte. + spi_write_dummy(); + spi_read(AT45DBX_SPI, &data); + *_ram++ = data; + } + + // Update the memory pointer. + gl_ptr_mem += AT45DBX_SECTOR_SIZE; + +#if AT45DBX_PAGE_SIZE > AT45DBX_SECTOR_SIZE + // If end of page reached, + if (!Rd_bitfield(gl_ptr_mem, AT45DBX_MSK_PTR_BYTE)) +#endif + { + // unselect the DF memory gl_ptr_mem points to. + at45dbx_chipselect_df(gl_ptr_mem >> AT45DBX_MEM_SIZE, FALSE); + + // Memory busy. + at45dbx_busy = TRUE; + } + + return OK; +} + + +Bool at45dbx_write_sector_from_ram(const void *ram) +{ + const U8 *_ram = ram; + U16 i; + + // Memory busy. + if (at45dbx_busy) + { + // Being here, we know that we previously launched a page programming. + // => We have to access the next page. + + // Eventually select the next DF and open the next page. + // NOTE: at45dbx_write_open input parameter is a sector. + at45dbx_write_open(gl_ptr_mem >> AT45DBX_SECTOR_BITS); // gl_ptr_mem / AT45DBX_SECTOR_SIZE. + } + + // Write the next sector. + for (i = AT45DBX_SECTOR_SIZE; i; i--) + { + // Write the next data byte. + spi_write(AT45DBX_SPI, *_ram++); + } + + // Update the memory pointer. + gl_ptr_mem += AT45DBX_SECTOR_SIZE; + +#if AT45DBX_PAGE_SIZE > AT45DBX_SECTOR_SIZE + // If end of page reached, + if (!Rd_bitfield(gl_ptr_mem, AT45DBX_MSK_PTR_BYTE)) +#endif + { + // unselect the DF memory gl_ptr_mem points to in order to program the page. + at45dbx_chipselect_df(gl_ptr_mem >> AT45DBX_MEM_SIZE, FALSE); + + // Memory busy. + at45dbx_busy = TRUE; + } + + return OK; +} + + +//! @} + + +#endif // AT45DBX_MEM == ENABLE diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX/at45dbx.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX/at45dbx.h new file mode 100644 index 000000000..e5263b247 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX/at45dbx.h @@ -0,0 +1,270 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Management of the AT45DBX data flash controller through SPI. + * + * This file manages the accesses to the AT45DBX data flash components. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with an SPI module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _AT45DBX_H_ +#define _AT45DBX_H_ + + +#include "conf_access.h" + +#if AT45DBX_MEM == DISABLE + #error at45dbx.h is #included although AT45DBX_MEM is disabled +#endif + + +#include "spi.h" + + +//_____ D E F I N I T I O N S ______________________________________________ + +/*! \name Available AT45DBX Sizes + * + * Number of address bits of available AT45DBX data flash memories. + * + * \note Only memories with page sizes of at least 512 bytes (sector size) are + * supported. + */ +//! @{ +#define AT45DBX_1MB 20 +#define AT45DBX_2MB 21 +#define AT45DBX_4MB 22 +#define AT45DBX_8MB 23 +//! @} + +// AT45DBX_1MB +#define AT45DBX_SECTOR_BITS 8 //! Number of bits for addresses within sectors. +// AT45DBX_2MB AT45DBX_4MB AT45DBX_8MB +//#define AT45DBX_SECTOR_BITS 9 //! Number of bits for addresses within sectors. + +//! Sector size in bytes. +#define AT45DBX_SECTOR_SIZE (1 << AT45DBX_SECTOR_BITS) + + +//_____ D E C L A R A T I O N S ____________________________________________ + +/*! \name Control Functions + */ +//! @{ + +/*! \brief Initializes the data flash controller and the SPI channel by which + * the DF is controlled. + * + * \param spiOptions Initialization options of the DF SPI channel. + * \param pba_hz SPI module input clock frequency (PBA clock, Hz). + * + * \retval OK Success. + * \retval KO Failure. + */ +extern Bool at45dbx_init(spi_options_t spiOptions, unsigned int pba_hz); + +/*! \brief Performs a memory check on all DFs. + * + * \retval OK Success. + * \retval KO Failure. + */ +extern Bool at45dbx_mem_check(void); + +/*! \brief Opens a DF memory in read mode at a given sector. + * + * \param sector Start sector. + * + * \retval OK Success. + * \retval KO Failure. + * + * \note Sector may be page-unaligned (depending on the DF page size). + */ +extern Bool at45dbx_read_open(U32 sector); + +/*! \brief Unselects the current DF memory. + */ +extern void at45dbx_read_close(void); + +/*! \brief This function opens a DF memory in write mode at a given sector. + * + * \param sector Start sector. + * + * \retval OK Success. + * \retval KO Failure. + * + * \note Sector may be page-unaligned (depending on the DF page size). + * + * \note If \ref AT45DBX_PAGE_SIZE > \ref AT45DBX_SECTOR_SIZE, page content is + * first loaded in buffer to then be partially updated by write byte or + * write sector functions. + */ +extern Bool at45dbx_write_open(U32 sector); + +/*! \brief Fills the end of the current logical sector and launches page programming. + */ +extern void at45dbx_write_close(void); + +//! @} + + +/*! \name Single-Byte Access Functions + */ +//! @{ + +/*! \brief Performs a single byte read from DF memory. + * + * \return The read byte. + * + * \note First call must be preceded by a call to the \ref at45dbx_read_open + * function. + */ +extern U8 at45dbx_read_byte(void); + +/*! \brief Performs a single byte write to DF memory. + * + * \param b The byte to write. + * + * \retval OK Success. + * \retval KO Failure. + * + * \note First call must be preceded by a call to the \ref at45dbx_write_open + * function. + */ +extern Bool at45dbx_write_byte(U8 b); + +//! @} + + +/*! \name Multiple-Sector Access Functions + */ +//! @{ + +/*! \brief Reads \a nb_sector sectors from DF memory. + * + * Data flow is: DF -> callback. + * + * \param nb_sector Number of contiguous sectors to read. + * + * \retval OK Success. + * \retval KO Failure. + * + * \note First call must be preceded by a call to the \ref at45dbx_read_open + * function. + * + * \note As \ref AT45DBX_PAGE_SIZE is always a multiple of + * \ref AT45DBX_SECTOR_SIZE, there is no need to check page end for each + * byte. + */ +extern Bool at45dbx_read_multiple_sector(U16 nb_sector); + +/*! \brief Callback function invoked after each sector read during + * \ref at45dbx_read_multiple_sector. + * + * \param psector Pointer to read sector. + */ +extern void at45dbx_read_multiple_sector_callback(const void *psector); + +/*! \brief Writes \a nb_sector sectors to DF memory. + * + * Data flow is: callback -> DF. + * + * \param nb_sector Number of contiguous sectors to write. + * + * \retval OK Success. + * \retval KO Failure. + * + * \note First call must be preceded by a call to the \ref at45dbx_write_open + * function. + * + * \note As \ref AT45DBX_PAGE_SIZE is always a multiple of + * \ref AT45DBX_SECTOR_SIZE, there is no need to check page end for each + * byte. + */ +extern Bool at45dbx_write_multiple_sector(U16 nb_sector); + +/*! \brief Callback function invoked before each sector write during + * \ref at45dbx_write_multiple_sector. + * + * \param psector Pointer to sector to write. + */ +extern void at45dbx_write_multiple_sector_callback(void *psector); + +//! @} + + +/*! \name Single-Sector Access Functions + */ +//! @{ + +/*! \brief Reads 1 DF sector to a RAM buffer. + * + * Data flow is: DF -> RAM. + * + * \param ram Pointer to RAM buffer. + * + * \retval OK Success. + * \retval KO Failure. + * + * \note First call must be preceded by a call to the \ref at45dbx_read_open + * function. + */ +extern Bool at45dbx_read_sector_2_ram(void *ram); + +/*! \brief Writes 1 DF sector from a RAM buffer. + * + * Data flow is: RAM -> DF. + * + * \param ram Pointer to RAM buffer. + * + * \retval OK Success. + * \retval KO Failure. + * + * \note First call must be preceded by a call to the \ref at45dbx_write_open + * function. + */ +extern Bool at45dbx_write_sector_from_ram(const void *ram); + +//! @} + + +#endif // _AT45DBX_H_ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX/at45dbx_mem.c b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX/at45dbx_mem.c new file mode 100644 index 000000000..4c0ace2f5 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX/at45dbx_mem.c @@ -0,0 +1,234 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief CTRL_ACCESS interface for the AT45DBX data flash controller. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with an SPI module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +//_____ I N C L U D E S ___________________________________________________ + +#include "conf_access.h" + + +#if AT45DBX_MEM == ENABLE + +#include "conf_at45dbx.h" +#include "at45dbx.h" +#include "at45dbx_mem.h" + + +//_____ D E F I N I T I O N S ______________________________________________ + +//! Whether to detect write accesses to the memory. +#define AT45DBX_MEM_TEST_CHANGE_STATE ENABLED + + +#if (ACCESS_USB == ENABLED || ACCESS_MEM_TO_RAM == ENABLED) && AT45DBX_MEM_TEST_CHANGE_STATE == ENABLED + +//! Memory data modified flag. +static volatile Bool s_b_data_modify = FALSE; + +#endif + + +/*! \name Control Interface + */ +//! @{ + + +Ctrl_status at45dbx_test_unit_ready(void) +{ + return (at45dbx_mem_check() == OK) ? CTRL_GOOD : CTRL_NO_PRESENT; +} + + +Ctrl_status at45dbx_read_capacity(U32 *u32_nb_sector) +{ + *u32_nb_sector = (AT45DBX_MEM_CNT << (AT45DBX_MEM_SIZE - AT45DBX_SECTOR_BITS)) - 1; + + return CTRL_GOOD; +} + + +Bool at45dbx_wr_protect(void) +{ + return FALSE; +} + + +Bool at45dbx_removal(void) +{ + return FALSE; +} + + +//! @} + + +#if ACCESS_USB == ENABLED + +#include "usb_drv.h" +#include "scsi_decoder.h" + + +/*! \name MEM <-> USB Interface + */ +//! @{ + + +Ctrl_status at45dbx_usb_read_10(U32 addr, U16 nb_sector) +{ + if (addr + nb_sector > AT45DBX_MEM_CNT << (AT45DBX_MEM_SIZE - AT45DBX_SECTOR_BITS)) return CTRL_FAIL; + + at45dbx_read_open(addr); + at45dbx_read_multiple_sector(nb_sector); + at45dbx_read_close(); + + return CTRL_GOOD; +} + + +void at45dbx_read_multiple_sector_callback(const void *psector) +{ + U16 data_to_transfer = AT45DBX_SECTOR_SIZE; + + // Transfer read sector to the USB interface. + while (data_to_transfer) + { + while (!Is_usb_in_ready(g_scsi_ep_ms_in)) + { + if(!Is_usb_endpoint_enabled(g_scsi_ep_ms_in)) + return; // USB Reset + } + + Usb_reset_endpoint_fifo_access(g_scsi_ep_ms_in); + data_to_transfer = usb_write_ep_txpacket(g_scsi_ep_ms_in, psector, + data_to_transfer, &psector); + Usb_ack_in_ready_send(g_scsi_ep_ms_in); + } +} + + +Ctrl_status at45dbx_usb_write_10(U32 addr, U16 nb_sector) +{ + if (addr + nb_sector > AT45DBX_MEM_CNT << (AT45DBX_MEM_SIZE - AT45DBX_SECTOR_BITS)) return CTRL_FAIL; + +#if AT45DBX_MEM_TEST_CHANGE_STATE == ENABLED + if (nb_sector) s_b_data_modify = TRUE; +#endif + + at45dbx_write_open(addr); + at45dbx_write_multiple_sector(nb_sector); + at45dbx_write_close(); + + return CTRL_GOOD; +} + + +void at45dbx_write_multiple_sector_callback(void *psector) +{ + U16 data_to_transfer = AT45DBX_SECTOR_SIZE; + + // Transfer sector to write from the USB interface. + while (data_to_transfer) + { + while (!Is_usb_out_received(g_scsi_ep_ms_out)) + { + if(!Is_usb_endpoint_enabled(g_scsi_ep_ms_out)) + return; // USB Reset + } + + Usb_reset_endpoint_fifo_access(g_scsi_ep_ms_out); + data_to_transfer = usb_read_ep_rxpacket(g_scsi_ep_ms_out, psector, + data_to_transfer, &psector); + Usb_ack_out_received_free(g_scsi_ep_ms_out); + } +} + + +//! @} + +#endif // ACCESS_USB == ENABLED + + +#if ACCESS_MEM_TO_RAM == ENABLED + +/*! \name MEM <-> RAM Interface + */ +//! @{ + + +Ctrl_status at45dbx_df_2_ram(U32 addr, void *ram) +{ + if (addr + 1 > AT45DBX_MEM_CNT << (AT45DBX_MEM_SIZE - AT45DBX_SECTOR_BITS)) return CTRL_FAIL; + + at45dbx_read_open(addr); + at45dbx_read_sector_2_ram(ram); + at45dbx_read_close(); + + return CTRL_GOOD; +} + + +Ctrl_status at45dbx_ram_2_df(U32 addr, const void *ram) +{ + if (addr + 1 > AT45DBX_MEM_CNT << (AT45DBX_MEM_SIZE - AT45DBX_SECTOR_BITS)) return CTRL_FAIL; + +#if AT45DBX_MEM_TEST_CHANGE_STATE == ENABLED + s_b_data_modify = TRUE; +#endif + + at45dbx_write_open(addr); + at45dbx_write_sector_from_ram(ram); + at45dbx_write_close(); + + return CTRL_GOOD; +} + + +//! @} + +#endif // ACCESS_MEM_TO_RAM == ENABLED + + +#endif // AT45DBX_MEM == ENABLE diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX/at45dbx_mem.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX/at45dbx_mem.h new file mode 100644 index 000000000..de24fa371 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX/at45dbx_mem.h @@ -0,0 +1,164 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief CTRL_ACCESS interface for the AT45DBX data flash controller. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with an SPI module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _AT45DBX_MEM_H_ +#define _AT45DBX_MEM_H_ + + +#include "conf_access.h" + +#if AT45DBX_MEM == DISABLE + #error at45dbx_mem.h is #included although AT45DBX_MEM is disabled +#endif + + +#include "ctrl_access.h" + + +//_____ D E C L A R A T I O N S ____________________________________________ + +/*! \name Control Interface + */ +//! @{ + +/*! \brief Tests the memory state and initializes the memory if required. + * + * The TEST UNIT READY SCSI primary command allows an application client to poll + * a LUN until it is ready without having to allocate memory for returned data. + * + * This command may be used to check the media status of LUNs with removable + * media. + * + * \return Status. + */ +extern Ctrl_status at45dbx_test_unit_ready(void); + +/*! \brief Returns the address of the last valid sector in the memory. + * + * \param u32_nb_sector Pointer to the address of the last valid sector. + * + * \return Status. + */ +extern Ctrl_status at45dbx_read_capacity(U32 *u32_nb_sector); + +/*! \brief Returns the write-protection state of the memory. + * + * \return \c TRUE if the memory is write-protected, else \c FALSE. + * + * \note Only used by removable memories with hardware-specific write + * protection. + */ +extern Bool at45dbx_wr_protect(void); + +/*! \brief Tells whether the memory is removable. + * + * \return \c TRUE if the memory is removable, else \c FALSE. + */ +extern Bool at45dbx_removal(void); + +//! @} + + +#if ACCESS_USB == ENABLED + +/*! \name MEM <-> USB Interface + */ +//! @{ + +/*! \brief Tranfers data from the memory to USB. + * + * \param addr Address of first memory sector to read. + * \param nb_sector Number of sectors to transfer. + * + * \return Status. + */ +extern Ctrl_status at45dbx_usb_read_10(U32 addr, U16 nb_sector); + +/*! \brief Tranfers data from USB to the memory. + * + * \param addr Address of first memory sector to write. + * \param nb_sector Number of sectors to transfer. + * + * \return Status. + */ +extern Ctrl_status at45dbx_usb_write_10(U32 addr, U16 nb_sector); + +//! @} + +#endif + + +#if ACCESS_MEM_TO_RAM == ENABLED + +/*! \name MEM <-> RAM Interface + */ +//! @{ + +/*! \brief Copies 1 data sector from the memory to RAM. + * + * \param addr Address of first memory sector to read. + * \param ram Pointer to RAM buffer to write. + * + * \return Status. + */ +extern Ctrl_status at45dbx_df_2_ram(U32 addr, void *ram); + +/*! \brief Copies 1 data sector from RAM to the memory. + * + * \param addr Address of first memory sector to write. + * \param ram Pointer to RAM buffer to read. + * + * \return Status. + */ +extern Ctrl_status at45dbx_ram_2_df(U32 addr, const void *ram); + +//! @} + +#endif + + +#endif // _AT45DBX_MEM_H_ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/v2.7.0/UCR1/GCC/lib_ucr1_hd_sdio_v2.7.0.a b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/v2.7.0/UCR1/GCC/lib_ucr1_hd_sdio_v2.7.0.a new file mode 100644 index 000000000..e01ab14a6 Binary files /dev/null and b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/v2.7.0/UCR1/GCC/lib_ucr1_hd_sdio_v2.7.0.a differ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/v2.7.0/UCR1/GCC/lib_ucr1_hd_spi_v2.7.0.a b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/v2.7.0/UCR1/GCC/lib_ucr1_hd_spi_v2.7.0.a new file mode 100644 index 000000000..9aa4f2410 Binary files /dev/null and b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/v2.7.0/UCR1/GCC/lib_ucr1_hd_spi_v2.7.0.a differ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/v2.7.0/UCR1/GCC/lib_ucr1_hd_wl_sta_intwpa_v2.7.0.a b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/v2.7.0/UCR1/GCC/lib_ucr1_hd_wl_sta_intwpa_v2.7.0.a new file mode 100644 index 000000000..00536f5dc Binary files /dev/null and b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/v2.7.0/UCR1/GCC/lib_ucr1_hd_wl_sta_intwpa_v2.7.0.a differ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/v2.7.0/UCR2/GCC/lib_ucr2_hd_sdio_v2.7.0.a b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/v2.7.0/UCR2/GCC/lib_ucr2_hd_sdio_v2.7.0.a new file mode 100644 index 000000000..a61dea3d0 Binary files /dev/null and b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/v2.7.0/UCR2/GCC/lib_ucr2_hd_sdio_v2.7.0.a differ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/v2.7.0/UCR2/GCC/lib_ucr2_hd_spi_v2.7.0.a b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/v2.7.0/UCR2/GCC/lib_ucr2_hd_spi_v2.7.0.a new file mode 100644 index 000000000..688319295 Binary files /dev/null and b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/v2.7.0/UCR2/GCC/lib_ucr2_hd_spi_v2.7.0.a differ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/v2.7.0/UCR2/GCC/lib_ucr2_hd_wl_sta_intwpa_v2.7.0.a b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/v2.7.0/UCR2/GCC/lib_ucr2_hd_wl_sta_intwpa_v2.7.0.a new file mode 100644 index 000000000..0b09aa811 Binary files /dev/null and b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/v2.7.0/UCR2/GCC/lib_ucr2_hd_wl_sta_intwpa_v2.7.0.a differ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/v2.7.0/revision.txt b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/v2.7.0/revision.txt new file mode 100644 index 000000000..5420c93d5 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/v2.7.0/revision.txt @@ -0,0 +1 @@ +Revision: 2491 diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/wl_api.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/wl_api.h new file mode 100644 index 000000000..17ba2ba8c --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/wl_api.h @@ -0,0 +1,1687 @@ +/* + * Programming interface for wl_api. + * Copyright (C) 2010 HD Wireless AB + * + * You should have received a copy of the license along with this library. + */ + +/*! \file wl_api.h ************************************************************* + * + * \brief Basic WiFi API + * + * This file provides the wl_api interface. + * + * - Compiler: GNU GCC for AVR32 + * - Supported devices: + * \li SPB104 + EVK1100 + * \li SPB104 + EVK1101 + * \li SPB104 + EVK1104 + * \li SPB104 + EVK1105 (SPI) + * \li SPB104 + EVK1105 (SPI + irq) + * \li SPB105 + EVK1105 (SPI) + * - AppNote: + * + * \author H&D Wireless AB: \n + * + ***************************************************************************** + * + * \section intro Introduction + * This is the documentation for the generic WiFi Driver API \a wl_api. + * + * \section files Main Files + * - wl_api.h : WiFi driver interface. + * - lib_ucr*_hd_wifi_standalone_v*.*.a - Driver library. + * + */ +/** \mainpage wl_api Reference Manual + +\image html images/wl_api_block_diagram_small.png "wl_api Architecture" + +(o)WL API © is a programming interface for WiFi (802.11). It aims +to be a complete interface for embedded applications wanting to use +wireless as a communications interface. (o)WL API © is shortened +"wl_api" in this document. + +wl_api has been designed to meet the following goals : + \li Simple : The API is as simple as is practicable + to make it easy to use. + \li Minimal size : The API is usable on very resource constrained + platforms. + \li Portable : The API is deployable on any platform with a standards + compliant C compiler. + \li OS independent : The API is deployable on systems using a real time + operating system as well as with applications running on the + "bare metal" of a hardware platform (that is without an operating system). + +As a consequence of these design goals wl_api does not allow very fine +grained control of most parameters relating to 802.11 networks. That +would increase the flexibility of the API while also increasing +complexity and code size. When the underlying WiFi hardware can +support a richer feature set the extra features can be offered as a +add-on library if required. + +The wl_api is implemented by two libraries. The core library is +compiled for a hardware platform and is independent of operating +system or IP stack. The core library contains all WiFi +functionality. The core library is supported by a suite of transport +libraries. The transport libraries implements the hardware +communication layer and are specific to the type of hardware interface +used to connect the host platform to the WiFi hardware. For example, +there are transport libraries for SPI and for SDIO. Only the core +library has a public interface (wl_api.h) but applications will need +to link with both the core library and a transport library matching +the hardware configuration. + +\section wl_api_princ Operation Principles + +There are three important properties of wl_api to keep in mind when +programming with it. + +The first is that wl_api is \b asynchronous. For instance, when the +\a wl_connect() function is called to attempt connection with an access +point it will trigger a sequence of packets being exchanged with the +access point after which, if everything is okay, a connection has been +established. The \a wl_connect() call is asynchronous (or non-blocking) +which means that you don't know if the connection attempt has +succeeded after the call returns. You only know if the sequence was +successfully started or not. To find out if, and when, the connection +attempt was successful you must register an event handler using the +function \a wl_register_event_cb(). This is true of a number of API calls +(which is indicated in their documentation). + +The second important property is that wl_api is \b polled. wl_api +never executes "by itself", since it would then have to support +interrupts, timers, locks and other operating system dependent +features. Instead all asynchronous processes proceed when wl_api is +polled by calling the \a wl_tick() function. When \a wl_tick() is called +wl_api reacts to any received management frames, expires any internal timers and +performs any other tasks necessary for forward progress. After +\a wl_tick() returns nothing will happen unless it or some other wl_api +function is called again. Also, to send and receive data, the \a wl_process_rx() +and \a wl_process_tx() must be invoked upon reception and transmission of data. + +The third important property is that wl_api is \b not \b thread \b safe. +All wl_api calls must execute in the same context since the +library has no knowledge of the locking mechanisms available (if any). + +\section wl_api_code_examples A note on the code examples + +The code examples illustrate how to call the different wl_api functions. +They do not constitute a complete program. Functions with the prefix "app_" +in the code examples are application specific calls that illustrate a +particular action. These functions are not part of the API and will have +to be implemented if needed. For a complete working code example see +one of the H&D Wireless software reference designs, such as the WiFi HTTP +server demo code in the Atmel Software Framework. + +The API is structured into these functional groups: + +\li \ref wl_api +\li \ref wl_wifi +\li \ref wl_data +\li \ref wl_transport +\li \ref wl_custom + +Also documented here is the transport layers for SPI and SDIO. +There interfaces are only necessary when porting the library to +a new hardware platform. + +\li \ref wl_spi +\li \ref wl_sdio + + * \section contactinfo Contact Information + * For further information, visit + * H&D Wireless.\n + * Support and FAQ: http://www.atmel.com/ + */ + +#ifndef WL_API_H +#define WL_API_H + +#define WL_API_RELEASE_NAME "v2.7.0" + +/*! Maximum size of a SSID */ +#define WL_SSID_MAX_LENGTH 32 +/*! Size of a MAC-address or BSSID */ +#define WL_MAC_ADDR_LENGTH 6 +/*! Maximum length of a passphrase */ +#define WL_MAX_PASS_LEN 64 +/*! Indicates that there is no SNR information */ +#define WL_SNR_UNKNOWN -128 + +#define SPB104 104 +#define SPB105 105 + +/*! \ingroup wl_api + * API Error codes */ +typedef enum { + WL_FAILURE = -1, + WL_SUCCESS = 1, + WL_NOEFFECT, + WL_OOM, + WL_INVALID_LENGTH, + WL_NOT_SUPPORTED, + WL_ABSORBED, + WL_RESOURCES, + WL_BUSY, + WL_RETRY, /*!< Retry the operation later. The driver is busy + resolving an operation that conflicts with the + request. */ + WL_INVALID_ARGS, + WL_AVAIL, + WL_CARD_FAILURE, /*!< Could not detect SPB device */ + WL_FIRMWARE_INVALID, /*!< Invalid firmware data */ + +} wl_err_t; + +/*! \ingroup wl_wifi + * Event identifiers */ +enum wl_event_id_t { + WL_EVENT_MEDIA_CONNECTED = 0, + WL_EVENT_CONN_FAILURE, + WL_EVENT_MEDIA_DISCONNECTED, + WL_EVENT_SCAN_COMPLETE, + WL_EVENT_FAILURE, + MAX_WL_EVENT +}; + +/*! \ingroup wl_wifi + * Authentication modes */ +enum wl_auth_mode { + AUTH_MODE_INVALID, + AUTH_MODE_AUTO, + AUTH_MODE_OPEN_SYSTEM, + AUTH_MODE_SHARED_KEY, + AUTH_MODE_WPA, + AUTH_MODE_WPA2, + AUTH_MODE_WPA_PSK, + AUTH_MODE_WPA2_PSK +}; + +/*! \ingroup wl_wifi + * Encryption modes */ +enum wl_enc_type { /* Values map to 802.11 encryption suites... */ + ENC_TYPE_WEP = 5, + ENC_TYPE_TKIP = 2, + ENC_TYPE_CCMP = 4, + /* ... except these two, 7 and 8 are reserved in 802.11-2007 */ + ENC_TYPE_NONE = 7, + ENC_TYPE_AUTO = 8 +}; + +enum wl_host_attention_mode { + WL_HOST_ATTENTION_SDIO = 0x1, /*!< For SDIO or polled SPI */ + WL_HOST_ATTENTION_SPI = 0x5a /*!< For SPI with interrupt line */ +}; + +/*! \ingroup wl_wifi + * Event descriptor +*/ +struct wl_event_t { + enum wl_event_id_t id; /**< Event identifier. */ + +}; + +/*! \ingroup wl_wifi + * Infrastructure (ESS) or Ad-hoc (IBSS) connection modes. + */ +enum wl_conn_type_t { + WL_CONN_TYPE_INFRA, /*!< For infrastructure mode (default) */ + WL_CONN_TYPE_ADHOC /*!< For ad-hoc mode */ +}; + +/* Note: + * If your environment does not have stdint.h you will have to + * define the fixed-width integer types specified in that file + * yourself, make sure that those definitions are included + * before any inclusions of wl_api.h, and build with the macro + * WITHOUT_STDINT defined. In this case the wl_api library + * must have been built with the same integer type definitions. + */ + +#ifndef WITHOUT_STDINT +#include +#endif + +/* Note: + * If your environment does not have stdio.h you will have to define + * the size_t type yourself, make sure that that definition is + * included before any inclusions of wl_api.h, and build with the + * macro WITHOUT_STDIO defined. In this case the wl_api library must + * have been built with the same size_t type definition. + */ +#ifndef WITHOUT_STDIO +#include +#endif + +/*! \ingroup wl_wifi + * + * \brief SSID representation. + * + * The SSID is a binary string and cannot be treated as a + * C-string safely. An empty SSID is represented by a + * SSID struct with the len field set to 0. + */ +struct wl_ssid_t +{ + char ssid[WL_SSID_MAX_LENGTH]; /**< Octet array containing the SSID data. */ + uint8_t len; /**< Length of valid data in ssid member. + * Cannot be longer than WL_SSID_MAX_LENGTH. */ +}; + +/*! \ingroup wl_wifi + * + * MAC-address/BSSID representation + * + * A broadcast BSSID is one with all octets set to 0xFF. + */ +struct wl_mac_addr_t +{ + uint8_t octet[WL_MAC_ADDR_LENGTH]; /**< Octet array containing the MAC address + * data. This array is always WL_MAC_ADDR_LENGTH bytes. + */ +}; + +/*! \ingroup wl_wifi + * + * Network representation + * + */ +struct wl_network_t +{ + struct wl_ssid_t ssid; /**< The SSID of the network. */ + struct wl_mac_addr_t bssid; /**< The BSSID of the network. */ + uint8_t channel; /**< The wlan channel which the network uses */ + uint32_t beacon_period; /**< Beacon period for the network */ + uint16_t dtim_period; /**< DTIM period for the network */ + int32_t rssi; /**< Received Signal Strength in dBm (measured on beacons) */ + int32_t snr; /**< Received Signal to noise ratio in dBm (measured on beacons) */ + uint8_t enc_type; /**< The encryption type used in the network. */ + + enum wl_conn_type_t net_type; /**< Type of network (Infrastructure or Ad-Hoc */ + size_t ie_len; /**< Always 0 unless wl_api has been built with WL_CONFIG_WPA_SUPPLICANT */ + + uint8_t ie[0]; /**< Not used unless wl_api has been built with WL_CONFIG_WPA_SUPPLICANT */ +}; + +/*! \ingroup wl_wifi + * Network list representation. Array of pointers to wl_network_t entries. + * + */ +struct wl_network_list_t +{ + struct wl_network_t **net; /**< The list of pointers to networks */ + size_t cnt; /**< Number of networks */ +}; + +#define WL_RATE_1MBIT 2 +#define WL_RATE_2MBIT 4 +#define WL_RATE_5_5MBIT 11 +#define WL_RATE_6MBIT 12 +#define WL_RATE_9MBIT 18 +#define WL_RATE_11MBIT 22 +#define WL_RATE_12MBIT 24 +#define WL_RATE_18MBIT 36 +#define WL_RATE_22MBIT 44 +#define WL_RATE_24MBIT 48 +#define WL_RATE_33MBIT 66 +#define WL_RATE_36MBIT 72 +#define WL_RATE_48MBIT 96 +#define WL_RATE_54MBIT 108 +#define WL_RATE_NUM_RATES 14 +#define WL_RATE_INVALID WL_RATE_NUM_RATES + +/*! \ingroup wl_wifi + * + * Rate representation + * + */ +typedef uint8_t wl_rate_t; + +/** \defgroup wl_api Library support functions + * + * These functions manage the library in general. They concern initalizing + * the library, downloading firmware to the WiFi chip and handling events + * from the library. + +For this example we assume that the application is running stand-alone +without an operating system. + +Before the library can do anything it needs to start up the WiFi +hardware by downloading a firmware image. The firmware image is +relatively big (around 144kB) and is therefore not included in the library +it is only needed once. It is up to the application to decide where to +store the firmware image and how to read it into the wl_api library. + +Step one is to write a function of the type \a ::wl_fw_read_cb_t +that wl_api will call to retrive the firmware image. Assuming that you +have some spare RAM (or whatever memory type is used for read only +data, such as FLASH memory) on your platform you can simply include +the firmware image from the \a wl_fw.h header file and write a +firmware read function like this + +\code +static size_t fw_read_cb(void* ctx, + uint8_t** buf, + size_t offset, + size_t len) +{ + if ( NULL == buf ) { + return 0; + } + *buf = ((uint8_t*) fw_buf) + offset; + if ( len > ( fw_len - offset ) ) { + return fw_len - offset; + } + return len; +} + +\endcode + +If the firmware image is stored in ROM this function may have to read +it back block by block instead. + +First, firmware must be downloaded to the device + +\code +if ( wl_transport_init(fw_read_cb, NULL, &mode) != WL_SUCCESS ) { + app_error("Firmware download failed"); + return 0; +} +\endcode + +The wl_api library is then initialized like this + +\code +if ( wl_init(NULL, init_complete_cb, mode) != WL_SUCCESS ) { + app_error("Init failed"); + return 0; +} +\endcode + +The library startup process will now require \a wl_poll() to be called +a number of times before it can complete. In addition, if the +application needs to know when the startup process has completed so +that it can, for example, start up an IP stack it will have to supply +a valid callback function of the type \a ::wl_init_complete_cb_t as a parameter +to the \a wl_init() call and start polling the wl_api library. + +The init complete callback will only be executed during a call to \a wl_poll() +or another wl_api function. This simplifies the implementation since no +internal locking is required and the wl_api library becomes OS-independent. + +\code +static void init_complete_cb(void* ctx) { + init_ip_stack(); +} +\endcode + +Registering the event callback is straightforward : + +\code +if (wl_register_event_cb(event_cb, NULL) != WL_SUCCESS) { + app_error("Failed to register event handler"); + return 0; +} +\endcode + +Similar to \a wl_poll(), there is also a \a wl_tick() function that takes a +free running "tick" counter with millisecond resolution as an argument so +that it can trigger internal timers when necessary. Assuming that such a tick +counter is provided by the macro GET_MS_TICK() the wl_api execution loop becomes + +\code +while (TRUE) { + wl_tick(GET_MS_TICK()); + wl_poll(); +} +\endcode + +In a stand-alone application this loop would usually be the main application +loop and include application specific calls as well. + +After some number of main loop iterations the init_complete_cb will be +invoked and the application can initialize its IP stack. + + * @{ + */ + +/*! \brief WiFi event callback. + * + * This function receives WiFi events that the application + * wants notification of. This function is supplied by the user + * of the API. + * + * @param event Struct describing the type of event and, for some + * events, additional information regarding the + * status of the event. See wl_event_t for additional + * information. + * @param ctx A context handle. This handle is passed + * untouched to the callback and has the same value + * as the context registered with the callback in + * wl_register_event_cb(). + */ +typedef void (*wl_event_cb_t) (struct wl_event_t event, void* ctx); + + +/*! \brief Initialization complete callback function. + * + * Invoked when WiFi initialization is complete. + * + * @param ctx Opaque context pointer as provided to \a wl_init() that will be + * passed back to the callback. + */ +typedef void (wl_init_complete_cb_t)(void* ctx); + + +/*! \brief Register an event handler. + * + * Register an event handler with the driver. This + * event handler will be called whenever a event + * listed in #wl_event_id_t occurs. + * See #wl_event_cb_t and #wl_event_id_t for more details. + * + * @param cb Event callback function to register. + * @param ctx Opaque context pointer that will be + * passed to the callback when it is + * invoked. This parameter is never + * accessed by the API. + * @return WL_SUCCESS + */ +wl_err_t wl_register_event_cb(wl_event_cb_t cb, void* ctx); + +/*! \brief Initialize the wl_api library. + * + * Note that \a wl_poll() must be called for this function to progress + * towards complete init + * + * The startup process will proceed asynchronously and will inkove + * init_complete_cb when completed. The callback will not be invoked if any + * error occurs during initialization. + * + * This function should be called after firmware has been downloaded to the + * device. + * + * @param ctx Opaque context pointer that will be passed to the callback + * when invoked. This parameter is never accessed by the API. + * @param init_complete_cb callback function to invoke when initialization is + * complete. + * @param mode Indicates the host attention mode used by the device. If + * \a wl_transport_init() was used to download the firmware image to the + * device, the proper mode can be obtained from the mode parameter of + * that function. + * + * @return + * - WL_SUCCESS + * - WL_FAILURE + */ +wl_err_t wl_init(void* ctx, wl_init_complete_cb_t init_complete_cb, + enum wl_host_attention_mode mode); + + +/*! \brief Shutdown the wl_api library and free resources. + * + * \a wl_init() must be invoked to startup the library + * again. + * + * @return + * - WL_SUCCESS on success + * - WL_FAILURE + * + */ +wl_err_t wl_shutdown(void); + + +/*! \brief WiFi driver timer tick function + * + * Periodic timers are triggered from this function so it should be called as + * often as possible if precision timing is required (traffic timeouts, + * authentication timeouts etc). + * + * @param tick A tick count in us. This is used to expire timers + * in the driver. + */ +void wl_tick(uint32_t tick); + +/*! @} */ + + +/** \defgroup wl_wifi Connection Management + * + * These functions access WiFi-specific functionality such as + * scanning, connect/disconnect, authentication and encryption, + * and power save modes. + * + +\section scanning Scanning + +To scan all channels that are available in the current regulatory +domain + +\code + if ( wl_scan() != WL_SUCCESS ) { + // May be busy scanning already, no fatal error + return 0; + } +\endcode + +Since wl_scan() only starts the scanning process the application +should add code to the event handler to catch the "scan complete" event +and retrieve the list of seen networks from the library + +\code +static void event_cb(struct wl_event_t event, void* ctx) { + switch(event.id) { + case WL_EVENT_SCAN_COMPLETE: + struct wl_network_list_t *netlist; + uint8_t netcnt; + + wl_get_network_list(&netlist); + netcnt = netlist->cnt; + while (--netcnt) { + print_network(netlist->net[netcnt]); + } + break; + } +} +\endcode + +The function print_network() could display the network name, the SSID, in +a user interface. It is important to keep in mind is that despite the fact +that the SSID is usually presented as a ASCII string, it is +in fact just a byte string and can legally contain all kinds of +non-printable characters, including a 0-byte. This means that it is +easy to end up with buffer overrun bugs if the SSID is ever treated +as a normal string without precautions. + +\code +void print_network(struct wl_network_t* wl_network) +{ + char ssid[WL_SSID_MAX_LENGTH + 1]; + memset(ssid, 0, sizeof(ssid)); + memcpy(ssid, wl_network->ssid.ssid, wl_network->ssid.len); + if (app_is_printable(ssid)) { + app_print("\"%s\" ", ssid); + } + else { + app_print(" "); + } + switch (wl_network->enc_type) { + case ENC_TYPE_WEP : + app_print("(WEP encryption)"); + break; + case ENC_TYPE_TKIP : + app_print("(TKIP encryption)"); + break; + case ENC_TYPE_CCMP : + app_print("(CCMP encryption)"); + break; + } + app_print("\n"); +} +\endcode + +\section connecting Connecting + +To connect to an access point (beware binary SSIDs) the connection process +must be started + +\code + if ( wl_connect("My AP", strlen("My AP")) + != WL_SUCCESS ) { + app_error("Connection failed.\n"); + return 0; + } +\endcode + +and the \a WL_EVENT_MEDIA_CONNECTED and \a WL_EVENT_CONN_FAILURE events should be +caught. To detect that a connection is terminated after it has been successfully established +(such as when the AP goes out of range) the \a WL_EVENT_MEDIA_DISCONNECTED event +must be also be caught + + +\code +static void event_cb(struct wl_event_t event, void* ctx) { + switch(event.id) { + case WL_EVENT_SCAN_COMPLETE: + struct wl_network_list_t *netlist; + uint8_t netcnt; + + wl_get_network_list(&netlist); + netcnt = netlist->cnt; + while (--netcnt) { + print_network(netlist->net[netcnt]); + } + break; + case WL_EVENT_CONN_FAILURE: + app_error("Connection failed\n"); + break; + case WL_EVENT_MEDIA_CONNECTED: + app_print("Connected to Access Point\n"); + app_ip_interface_up(); + break; + case WL_EVENT_MEDIA_DISCONNECTED: + app_print("Disconnected from Access Point\n"); + app_ip_interface_down(); + break; + } +} +\endcode + +\section security Security + +To use WEP a WEP key must be added before the connection is initiated. +To set the 40-bit WEP key 0xDEADBEEF00 as default key for key index 0 do + +\code + char key[5] = { 0xDE, 0xAD, 0xBE, 0xEF, 0x00 }; + struct wl_mac_addr_t bssid; + + // This means that the bssid is a broadcast bssid and the WEP key will be a default key instead of a key-mapping key. + memset(&bssid.octet, 0xff, sizeof bssid.octet); + + if ( wl_add_wep_key(0, sizeof key, key, &bssid) + != WL_SUCCESS ) { + app_error("Failed to add WEP key."); + return 0; + } +\endcode + +To use WPA/WPA2 with a Pre-shared key a passphrase must be associated +with the network before the connection is initiated. + +\code + struct wl_network_t net; + char passphrase[] = "MySecretKey"; + + memset(&net, 0, sizeof net); + memset(net.bssid.octet, 0xFF, sizeof net.bssid.octet); + strncpy(net.ssid.ssid, "My AP", strlen("My AP")); + net.ssid.len = strlen("My AP"); + net.enc_type = ENC_TYPE_AUTO; + if (wl_set_passphrase(&net, + passphrase, + strlen(passphrase), + ENC_TYPE_AUTO, + AUTH_MODE_AUTO) + != WL_SUCCESS) { + app_error("Failed to add passphrase"); + } +\endcode + +The library supports several passphrase-network associations to be +configured simultaneously. Be aware that the \a wl_connect() call +can take up to 15 seconds longer than normal when using a pre-shared +WPA/WPA2 key since the platform must calculate a temporal encryption +key from the passphrase before the connection attempt can start. + + * @{ + */ + + +/*! \brief Scan all channels. + * + * Starts a scan of all WiFi channels allowed in this regulatory + * domain. The list of allowed channels (the domain) is adapted to the + * channels announced as allowed by the first AP heard. + * + * The scan will proceed asynchronously and will raise a + * WL_EVENT_SCAN_COMPLETE event when completed. + * + * Currently, there's a limit on the scan list size that depends on the + * architecture (6 networks for the AVR32 UCR1 architecture 16 networks for + * other architectures. If more network exist, the strongest networks are + * chosen. Note that the limitation on the scan list size does not limit the + * networks which the device can connect to. See wl_connect() for more + * details. + * + * @return + * - WL_SUCCESS + * - WL_FAILURE. + */ +wl_err_t wl_scan(void); + +/*! \brief Get the list of currently known networks. + * + * Retrieves the list of currently known networks from + * the driver. To ensure that this list is up-to-date + * a wl_scan() call should be issued and this function + * should be called upon reception of the WL_EVENT_SCAN_COMPLETE + * event. This function can be called at other times + * but the list of networks retrieved then might not + * correspond to the networks actually in range. + * + * Note that a successful scan does not necessarily + * find any networks. + * + * @param network_list Output buffer. The API call returns + * a pointer to allocated memory containing the network list. + * @return + * - WL_SUCCESS + * - WL_FAILURE. + */ +wl_err_t wl_get_network_list(struct wl_network_list_t **network_list); + +#ifdef WFE_6_12 +/*! \brief Start a Ad-hoc network. + * + * Attempt to start a Ad-hoc (IBSS) network. If a Ad-hoc network + * is successfully started then a WL_EVENT_MEDIA_CONNECTED event + * will be raised once the first peer station connects to the Ad-hoc + * network (and not when the network is announced on the air). + * + * If a Ad-hoc network should be started with encryption + * enabled then \a wl_set_passphrase() should be called before + * \a wl_start_adhoc_net() to configure the security parameters. + * The Ad-hoc network is started with the security parameters + * (if any) that was configured for the specified \a ssid. + * + * @param ssid The SSID of the new network. If there's a network + * already present with this SSID this call will fail. + * @param channel The channel to use. Valid channels are 1-14 + * @param auth_mode The authentication mode to use. Supported + * authentication modes for Ad-hoc networks are + * AUTH_MODE_OPEN_SYSTEM and AUTH_MODE_SHARED_KEY. + * Passing other modes will cause a WL_INVALID_ARGS return. + * If AUTH_MODE_SHARED_KEY is used then a valid WEP + * key must be set with a call to \a wl_add_wep_key() + * and the default WEP key index must be set with a + * call to \a wl_set_default_wep_key(). + * @return + * - WL_SUCCESS on success. + * - WL_INVALID_ARGS if the ssid is malformed, if + * the channel not valid or if the authentication mode + * is invalid. + * - WL_RETRY if the driver is busy resolving a conflicting + * operation. The operation should be retried after a wait + * (at least one call to wl_poll() for polled implementations). + * - WL_BUSY if the driver is already connected or if a network + * with the same SSID is already known. + * + */ +wl_err_t wl_start_adhoc_net(struct wl_ssid_t ssid, + uint8_t channel, + enum wl_auth_mode auth_mode); +#endif +/*! \brief Connect to a SSID. + * + * Attempt to connect to a given SSID. If the driver is already + * connected to an AP with a different SSID then this call will + * return WL_BUSY and wl_disconnect() should be called before + * trying again. + * + * The connection process will proceed asynchronously and will raise a + * WL_EVENT_MEDIA_CONNECTED event when completed, or a WL_EVENT_CONN_FAILURE + * when failed. After a WL_EVENT_MEDIA_CONNECTED event has been raised + * a WL_EVENT_MEDIA_DISCONNECT event will be raised if the connection is + * terminated. Note that this can be caused by external factors and can + * happen at any time. + * + * If wl_connect() is invoked with a network that is not shown in the + * scan list, the device will probe for that specific network and connect + * to it, if found. This is also the method to use in order to connect to + * "hidden" networks (AP's that doesn't broadcast its SSID). + * + * @param ssid Pointer to the SSID string. + * Freed by caller. + * @param ssid_len Length of the SSID string in octets. Max value is 32. + * @return + * - WL_SUCCESS + * - WL_FAILURE if the network could not be found + * - WL_BUSY if the driver is already connected + * - WL_RETRY if the driver is busy resolving a conflicting operation. + * The operation should be retried after a wait (at least one call to wl_poll() + * for polled implementations). + */ +wl_err_t wl_connect(char* ssid, size_t ssid_len); + +/*! \brief Connect to a BSSID + * + * Attempt to connect to a given BSSID. If the driver is already + * connected to an AP with a different BSSID then this call will + * return WL_BUSY and wl_disconnect() should be called before + * trying again. + * + * The connection process will proceed asynchronously and will raise a + * WL_EVENT_MEDIA_CONNECTED event when completed, or a WL_EVENT_CONN_FAILURE + * when failed. After a WL_EVENT_MEDIA_CONNECTED event has been raised + * a WL_EVENT_MEDIA_DISCONNECT event will be raised if the connection is + * terminated. Note that this can be caused by external factors and can + * happen at any time. + * + * If wl_connect_bssid() is invoked with a network that is not shown in the + * scan list, the device will probe for that specific network and connect + * to it, if found. + * + * @param bssid Pointer to the BSSID. Freed by caller. + * @return + * - WL_SUCCESS + * - WL_FAILURE if the network could not be found + * - WL_BUSY if the driver is already connected + * - WL_RETRY if the driver is busy resolving a conflicting operation. + * The operation should be retried after a wait (at least one call to wl_poll() + * for polled implementations). + */ +wl_err_t wl_connect_bssid(struct wl_mac_addr_t bssid); + +/*! \brief Disconnect from the network + * + * Disconnect from any currently associated network. + * + * The disconnection process will proceed asynchronously and will raise a + * WL_EVENT_MEDIA_DISCONNECTED event when completed. + * @return + * - WL_SUCCESS if the disconnect process was started + * - WL_FAILURE if the driver was not connected + * - WL_RETRY if the driver is in the process of connecting. + * In this case the disconnect must be retried after + * the connection attempt has completed (resulted in a + * WL_EVENT_MEDIA_CONNECTED or a WL_EVENT_CONN_FAILURE event). + */ +wl_err_t wl_disconnect(void); + +/*! + * @brief Add a WEP encryption key to the device. + * + * Configure a key into the device. The key type (WEP-40, WEP-104) + * is determined by the size of the key (5 bytes for WEP-40, 13 bytes for WEP-104). + * + * @param key_idx The key index to set. Valid values are 0-3. + * @param key_len Length of key in bytes. Valid values are 5 and 13. + * @param key Key input buffer. + * @param bssid BSSID that the key applies to. If this is + * the broadcast BSSID then the key is configured + * as one of the default keys (not _the_ default key, + * this must be set by calling set_default_wep_key() + * after adding it). If the BSSID is a valid unicast + * bssid then the key is configured as a key-mapping + * key ( See 802.11-2007 8.2.1.3 ). + * @return + * - WL_SUCCESS on success. + * - WL_INVALID_LENGTH if the key length is bad. + * - WL_FAILURE on failure + */ +wl_err_t wl_add_wep_key(uint8_t key_idx, + size_t key_len, + const void *key, + struct wl_mac_addr_t *bssid); + +/*! @brief Set the default WEP key index. + * + * Select which WEP key to use for transmitted packets. + * For this to work correctly you must have added a WEP + * key with \a wl_add_wep_key() as a default key, using the + * same index as the one set in this call. + * @param key_idx Index of the key to make the default key. + * Valid values are 0-3. + * @return WL_SUCCESS or WL_FAILURE. + */ +wl_err_t wl_set_default_wep_key(uint8_t key_idx); + +/*! \brief Delete a WEP key. + * + * Deletes a WEP key from the driver. + * + * @param key_idx The index of the key to delete. Valid values are 0-3. + * @param bssid BSSID that the key applies to. If this is + * the broadcast BSSID then the key deleted is a default key. + * If the BSSID is a valid unicast bssid then the deleted + * key is a key-mapping key. + * @return WL_SUCCESS or WL_FAILURE + */ +wl_err_t wl_delete_wep_key(uint8_t key_idx, struct wl_mac_addr_t *bssid); + +/*! @brief Set a WPA/WPA2 passphase + * + * Associate a WPA/WPA2/RSN passphrase with a network. + * The number of passphrases that can be stored can + * vary but is always at least one. Passphrases can + * be added until \a wl_add_wpa_passphrase() returns + * WL_RESOURCES. + * + * @param net Network with which to associate the passphrase. + * @param passphrase Passphrase. Valid characters in a passphrase + * must lie between ASCII 32-126 (decimal). + * @param len Length of passphrase. Valid lengths are 8-63. + * @param enc_type Encryption type. If this is set to ENC_TYPE_AUTO + * then the most secure supported mode will be automatically + * selected. Normally you only need to pass something else here + * if you need to enforce picking a certain encryption mode when + * the network supports several modes and you don't want to use + * the best one. + * @param auth_mode Authentication mode. If this is set to AUTH_MODE_AUTO + * then the most secure mode will be automatically selected. + * Normally you only need to pass something else here if the network + * announces support for both WPA and WPA2/RSN and the passphrases are + * different. + * @return + * - WL_SUCCESS + * - WL_INVALID_ARGS if the passphrase length is invalid. + * - WL_RESOURCES if no more passphrases can be added. + */ +wl_err_t wl_set_passphrase(const struct wl_network_t *net, + const char *passphrase, + const size_t len, + const enum wl_enc_type enc_type, + const enum wl_auth_mode auth_mode); + +/*! @brief Remove a WPA/WPA2 passphase + * + * Remove a WPA/WPA2/RSN passphrase associated with a network. + * + * @param net Network with which to associate the passphrase. + * If net is NULL then all stored passphrases will be + * cleared. + * @return + * - WL_SUCCESS + * - WL_FAILURE if no passphrase was associated with the net. + */ +wl_err_t wl_clear_passphrase(struct wl_network_t *net); + + +/*! \brief Enable legacy power save mode + * + * Enable legacy power save mode. In legacy power save mode, the device + * will power down when idle. When connected, the device will wake up to + * receive beacon frames and any buffered data from the AP. The response + * time when legacy power save is enabled might therefore be as long as the + * AP beacon interval (mostly 100 ms). However, the throughput should not + * be affected. + * + * @return WL_SUCCESS or WL_FAILURE. + */ +wl_err_t wl_enable_ps(void); + +/*! \brief Disable legacy power save mode + * + * @return WL_SUCCESS or WL_FAILURE. + */ +wl_err_t wl_disable_ps(void); + +/*! \brief Configure power save parameters. + * + * @param use_ps_poll Use PS-Poll frames to retrieve buffered data. Any changes + * to this parameter will take effect upon next connect + * or when power save is enabled through wl_enable_ps(). + * Note: To retrieve one buffered packet, the ps poll scheme + * needs one ps poll packet to the AP instead of two null + * packets in the power management bit scheme. Ps poll avoids + * the overhead of traffic monitoring time in active mode as + * well. But since each ps poll request can make the AP + * release only one buffered packet, it is not the optimal + * scheme for applications with heavy downlink traffic. + * @param ps_traffic_timeout Timeout in [ms] to wait for more buffered data + * from AP. This setting has no effect if + * use_ps_poll is 1. Any changes to this parameter + * will take effect immediately. + * @param ps_delay Power save will de delayed ps_delay [ms] after connecting to + * an AP. + * @param rx_all_dtim If set to 1, then STA will wake up to listen to every + * beacon containing DTIM (delivery traffic indication messages) when + * connected. The actual DTIM interval is configured in the AP. + * If the DTIM interval, as configured in the AP, is larger than + * \a listen_interval, the STA will wakeup according to the + * \a listen_interval parameter. + * @param listen_interval The Listen Interval field is used to indicate to the + * AP how often a STA in power save mode wakes to listen + * to beacon frames. The value of this parameter is expressed in units + * of Beacon Interval. An AP may use the Listen Interval information in + * determining the lifetime of frames that it buffers for a STA. + * Any changes to this parameter will take effect upon next association. + * + * @return WL_SUCCESS or WL_FAILURE. + */ +wl_err_t wl_conf_ps(uint8_t use_ps_poll, + uint32_t ps_traffic_timeout, + uint32_t ps_delay, + uint8_t rx_all_dtim, + uint16_t listen_interval); + +/*! \brief Get the interface MAC address. + * + * Return the 802.3 MAC address of the network interface. + * + * @param buf Output buffer. It must be at least WL_MAC_ADDR_LENGTH + * bytes long and only the first WL_MAC_ADDR_LENGTH bytes + * will contain valid data. + * @return + * - WL_FAILURE if the interface is not up. + * - WL_SUCCESS + */ +wl_err_t wl_get_mac_addr(uint8_t* buf); + +/*! \brief Return the associated network. + * + * Return the description of the currently associated + * network, if any. + * + * @return The network description, or NULL of the driver + * is unconnected. + */ +struct wl_network_t* wl_get_current_network(void); +/*! @} */ + +/** \defgroup wl_data Data Transfer + * + * \brief Packet processing interface. + * + * Note that the examples in this group assumes that the transport library + * functions in the \a wl_transport group are being used. For more information, + * See the documentation for those functions in the \a wl_transport group. + +For the IP stack integration you need to intercept received packets so +they can be sent up the stack and to transmit packets coming down the +stack. + +By default the wl_api library discards all data packets. To receive +them the application must register a rx interrupt service routine (isr) +using the \a wl_register_rx_isr() function. + +\code +static void rx_isr(void* ctx) { + rx_pending = TRUE; +} +\endcode + +Since the rx_isr() function is only called in interrupt context, it is not +safe to perform the actual read directly from rx_isr(). If an OS is used, +the normal case is to signal a receiver thread to invoke the ip stack +read function to read the pending data. In a system that runs without an OS +(as in the example), a flag is set to indicate that wl_rx() can be invoked +from the ip stack read function next time the ip stack is polled. +The beginning of a ip stack read function can look like this + +\code +static void ip_stack_rx_pkt() { + char *pkt = malloc(MAX_PKT_SIZE); + uint16_t len = MAX_PKT_SIZE; + + if (p == NULL) { + app_error("Out of memory."); + return; + } + wl_rx(pkt, &len); + if (0 == len) { + app_error("Packet reception failed."); + free(pkt); + return + } +} +\endcode + +Since the ip_stack_rx_pkt() function should only be called when there is +actually a packet ready to read you do not have to check the return value +from \a wl_rx() since it only returns failure if there is no packet ready to +read. + +A packet arriving from the WiFi interface can be either a data +packet or a message from the WiFi hardware to the WiFi driver +(which is implemented by the wl_api library). This means that +wl_api must process every packet to decide if it is an internal +message or a data frame that +should be passed up to the application. Data packets are +prefixed with an extra header containing some administrative +information, and may be followed by padding bytes and so +wl_api also needs to strip the extra header and any padding +before the packet can be safely ingested by the IP stack. +All this happens in the function \a wl_process_rx() which \b must +be called on every packet received by a call to \a wl_rx(). + +Continuing the ip_stack_rx_pkt() example + +\code + { + char* stripped_pkt; + size_t stripped_pkt_len; + uint16_t vlan; + int status; + + status = wl_process_rx(pkt, + len, + &stripped_pkt, + &stripped_pkt_len, + &vlan); + if (WL_ABSORBED == status) { + // This is normal. The packet was a + // wl_api-internal message. + free(pkt); + return; + } + app_ip_stack_input(stripped_pkt, + stripped_pkt_len, + vlan); + free(pkt); + } +} +\endcode + +If \a wl_process_rx() decides that the packet was a command it processes +it and returns \a WL_ABSORBED to signal that the packet should +not be used by anyone else. Otherwise stripped_pkt is +pointing to the beginning of a 802.3 Ethernet frame of length +stripped_pkt_len. If the IP stack supports VLAN and QoS +the extra VLAN tag should be passed to the IP stack +together with the packet. For IP stacks without this support the VLAN tag +contents can safely be ignored, but it must still be filled in by \a wl_process_tx(). + +To register the receive isr + +\code + wl_register_rx_isr(rx_isr, NULL); +\endcode + +Transmitting data packets happens in a similar way but does not +require a callback/isr since the application/IP stack knows when it has +packets to send. + +\code +int ip_stack_tx_pkt(char *pkt, size_t len, uint16_t vlan_tag) { + int status; + char wlan_hdr[WL_HEADER_SIZE]; + // The packet must have an Ethernet header + if (len < ETHERNET_HEADER_SIZE) { + app_error("Invalid packet length"); + return 0; + } + hdr_len = sizeof wlan_hdr; + status = wl_process_tx(pkt, + ETHERNET_HEADER_SIZE, + len, + wlan_hdr, + vlan_tag, + NULL); + if ( WL_SUCCESS != status ) { + app_error("Packet processing failed"); + return 0; + } + // Transmit the header first + if (wl_tx(wlan_hdr, hdr_len) != WL_SUCCESS) { + app_error("Header transmission failed"); + return 0; + } + // Then transmit the data packet + if (wl_tx(pkt, len) != WL_SUCCESS) { + app_error("Packet transmission failed"); + return 0; + } +} +\endcode + +The final piece of the puzzle in the IP stack integration is +the MAC address of the WiFi interface + +\code + char mac_addr[WL_MAC_ADDR_LENGTH]; + + wl_get_mac_addr(mac_addr); + ip_stack_set_mac_address(mac_addr); +\endcode + + * @{ + */ + +/*! Size of the wl_api packet header */ +#ifdef WFE_6_12 +#define WL_HEADER_SIZE 16 +#else +#define WL_HEADER_SIZE 14 +#endif + +/*! Maximum packet size (including wl_api headers and paddings) + * + * Maximum packet size is obtained with the following data: + * + * 1500 bytes of Ethernet payload (MTU) + 14 bytes of Ethernet header + + * WL_HEADER_SIZE of wl header. This data is then size-aligned to 16. + * + */ +#define WL_MAX_PKT_LEN 1536 + + +/*! + * \brief Process rx packet. + * + * Processes a raw rx packet by unencrypting it (if necessary) + * and stripping headers so as to output a 802.3 frame. + * + * wl_process_rx() will strip bytes both from the head and from the tail. + * + * Upon return from wl_process_rx(), the pointer at stripped_pkt will + * point to the start of the Ethernet header, hence adjusting the offset + * by WL_HEADER_LEN bytes. Any padding (added by the wifi device) will + * be removed from the tail of the packet, hence making len smaller. + * + * The wl_api library of the device will not perform any Ethernet padding + * removal. The padding removal performed by wl_process_rx() is only for + * the padding used in the protocol shared by the host and the device. + * This padding is mainly there to ensure that the host does not have to + * deal with rx of odd-sized data buffers (which some DMA's have problems + * to handle). + * + * @param pkt Input buffer (raw packet) + * @param pkt_len Length of the input buffer (in bytes) + * @param stripped_pkt Pointer to the packet with the + * transport header stripped. + * @param stripped_pkt_len Length of the stripped packet. + * @param vlanid_prio VLAN ID and 802.1p priority value + * using following format: + *
+ *        1
+ *  5|432109876543|210
+ *  -+------------+---
+ *  0|   VLANID   |PRI
+ * 
+ * + * @returns + * - WL_FAILURE + * - WL_ABSORBED if the packet was an internal driver command + * and not a proper data packet. The packet should + * be freed and the stripped_pkt will not point + * to a valid packet. + * - WL_SUCCESS + */ +wl_err_t wl_process_rx(char *pkt, size_t pkt_len, char **stripped_pkt, + size_t *stripped_pkt_len, uint16_t *vlanid_prio); + +/*! \brief Process tx packet. + * + * Prepare tx packet for transmission. + * + * This function is typically used only by the TCP/IP stack driver. + * + * Takes a Ethernet II frame header and generates a message passing header + * for it. + * + * The caller should ensure that any frames injected into wl_process_tx() + * are proper Ethernet frames. The wl_api library or the device will not + * perform any Ethernet padding if the frames are too short. + * + * The Ethernet header is assumed to have the following layout : + * ... + * The rest of the Ethernet header buffer (if any) is ignored. + * + * A note on the TX packet representation : + * If your TX packets are simple contiguous buffers you can ignore + * the rest of this note and pass NULL in parameter \a pkt_handle. + * A TX packet may have a more complex structure than a RX packet + * (which must be a contiguous, flat buffer). The IP stack may + * for example represent a packet as a linked list of buffers where + * the Ethernet header, the IP header and other headers, are represented + * by separate buffers. In some cases, such as when the driver is + * running in SoftAP mode, a TX packet has to be copied and queued + * internally for later processing and to support this when packets + * have a complicated structure a special data access function can + * be registered. See \a wl_register_pkt_read_cb() for details. + * If you use \a wl_process_tx() with non-simple packets you + * should pass a handle to the packet in parameter \a pkt_handle + * and register an access function with \a wl_register_pkt_read_cb(). + * + * @param eth_hdr Input buffer (Ethernet header) + * @param eth_hdr_len Input buffer length (must be >= 14) + * This is usually the same as pkt_len unless e.g linked list or buffers + * chained in other ways are being used. + * @param pkt_len Length of the complete data packet (in bytes) + * @param hdr Pointer to the header buffer (must be + * allocated by the caller). The length of the buffer + * must be at least WL_HEADER_SIZE bytes. + * @param vlanid_prio VLAN ID and 802.1p priority value + * using following format: + *
+ *        1
+ *  5|432109876543|210
+ *  -+------------+---
+ *  0|   VLANID   |PRI
+ * 
+ * Ignored for legacy association (no WMM) + * @param pkt_handle A handle to the complete packet. If this parameter + * is NULL then \a eth_hdr is expected to point to the whole packet + * in a single contiguous buffer (the default). If a different packet + * representation is used this parameter should be a handle to the + * complete packet and will be passed unmodified to the data + * access function that was registered with \a wl_register_pkt_read_cb(). + * + * @returns + * - WL_FAILURE + * - WL_RESOURCES if packet can not be processed at the moment. + * The caller must either drop the packet or try + * retransmit it later. + * - WL_AVAIL if network not available + * - WL_SUCCESS if packet is ready for transmission through wl_tx(). + */ +wl_err_t wl_process_tx(char *eth_hdr, + size_t eth_hdr_len, + size_t pkt_len, + char *hdr, + uint16_t vlanid_prio, + void *pkt_handle); + + +/*! \brief Get current TX and RX rate used for data transfer + * + * During transmission and reception of data, the actual rate used will depend + * on the signal quality. This function can be used to get the actual rate used + * for the last tx and rx data. + * + * @param tx will hold the tx rate upon successful return. + * @param rx will hold the rx rate upon successful return. + * + * @return + * - WL_SUCCESS on success + * - WL_FAILURE on failure. + */ +wl_err_t wl_get_rate(wl_rate_t *tx, wl_rate_t *rx); + + +/*! @} */ /* End wl_data group */ + + +/** \defgroup wl_transport Transport interface + * + * \brief Low level transport interface. + * + * These functions access the low level transport driver which makes + * the application independent of the actual physical transport + * layer (usually SDIO or SPI). + * + +For applications running on an real time kernel or without an +operating system, the provided transport library will fit right into the +application design. However, when running on a more complex operating system +(such as windows or linux) which has its own transport primitivies and +components (and probably its own IP stack) it might be preferred to design a +custom transport library for that specific environment. Therefore, these +transport interface functions are fully optional. + + + * @{ + */ + +#define WL_RX_MIN_PKT_LEN 32 + + +/*! \brief WiFi event callback. + * + * This function is invoked in interrupt context when there is new data + * available from the mac. This function is supplied by the user + * of the API. + * + * This function is typically used only by the TCP/IP stack driver. + * + * @param ctx A context handle. This handle is passed + * untouched to the callback and has the same value + * as the context registered with the callback in + * wl_register_event_cb(). + */ +typedef void (*wl_rx_isr_t) (void* ctx); + + +/*! \brief Firmware access function. + * + * Reads the WiFi firmware image. This function is supplied by + * the user of this API since storage for the firmware image is + * managed by the application. + * + * This function should read the specified number of bytes of the + * firmware image starting at the specified \a offset. The number of + * bytes to read is given in \a len. Upon return, \a buf should point + * to a buffer which holds the read data and the number of valid bytes + * in \a buf is returned from the call. + * + * This function will be called repeatedly until the complete firmware + * image has been read. + * + * This function may be called again at any time while the driver is + * running to download further pieces of the WiFi firmware image as + * needed by the runtime requirements. This will normally only happen + * when the driver switches between networks of different kinds such + * as from WEP to WPA, or from ESS to IBSS for example. + * + * For convenience, any time a firmware chunk has been completely + * downloaded this function will be called once with the \a buf + * parameter set to NULL to indicate that no more data is needed right + * now and that any dynamically allocated buffers which holds firmware + * data can be freed without much performance impact. + * + * @param ctx Opaque context pointer as provided to \a wl_init() that will be + * passed back to the callback. + * @param buf Should be assigned the address of the buffer holding the read + * data upon return. This parameter can be NULL which indicates + * that there are no further immediately pending accesses. + * @param offset Offset in bytes from the start of the firmware image. + * Data should be copied into buf starting at \a offset. + * @param len The number of bytes to copy into \a buf. + * @return The number of bytes copied into buf. This may be smaller than + * \len if the implementation of the function so requires. + */ +typedef size_t (wl_fw_read_cb_t)(void *ctx, + const uint8_t **buf, + size_t offset, + size_t len); + + +/*! \brief Initialize the transport interface and download the WiFi firmware + * image to the device. + * + * This operation will proceed synchronously until the firmware is completely + * downloaded. wl_init() should be called after this function has returned to + * perform device initialization. + * + * @param fw_read_cb callback function to invoke during firmware download. + * @param ctx Opaque context pointer that will be passed to the callbacks + * when they are invoked. This parameter is never + * accessed by the API. + * @param mode will hold the host attention mode used by the transport layer. + * This parameter can be passed directly to \a wl_init(). + * + * @return + * + * - WL_CARD_FAILURE if the wl hardware device is not available + * - WL_FIRMWARE_INVALID if the firmware obtained through fw_read_cb is + * invalid. + * - WL_OOM if the necessary memory could not be allocated. + */ +wl_err_t wl_transport_init(wl_fw_read_cb_t *fw_read_cb, + void *ctx, + enum wl_host_attention_mode *mode); + +/*! \brief WiFi driver forward progress function + * + * This function must be called in polled environments to + * ensure forward progress. The call can be made as often as possible from + * the main application loop. However, the call will not have any effect unless + * there is an interrupt pending from the hardware. + * + * In interrupt mode, wl_poll() must be called if no interrupt + * handler is registered through wl_register_rx_isr(). When an interrupt + * handler is registered, it is no longer necessary to invoke wl_poll(). + * + * Note that this function should not be invoked from interrupt context. + * + */ +void wl_poll(void); + + +/*! \brief Register RX callback + * + * Register function to be called by the low level transport driver + * when a new packet is available or when there is a state change in the + * data path. When invoked, any pending data can be fetched by calling wl_rx(). + * + * This function is typically used only by the TCP/IP stack driver. + * Note, the registered function is called in interrupt context. + * + * @param isr rx interrup handler. + * @param ctx Opaque context pointer that is passed unmodified to the + * rx_cb callback when it is invoked. + * + * @return WL_SUCCESS + */ +wl_err_t wl_register_rx_isr(wl_rx_isr_t isr, void* ctx); + + +/*! \brief Read pending packet + * + * Read a pending packet from the low level transport driver. + * The read packet must be passed to the wl_process_rx() function + * for proper driver operation. + * + * @param buf Buffer to read the packet into. This buffer must be + * at least WL_MAX_PKT_LEN bytes long. + * @param len Length of buf in bytes. Contains the length of the + * read packet in bytes on output. + * @return + * - WL_FAILURE if no RX packet is pending. + * - WL_SUCCESS + */ +wl_err_t wl_rx(uint8_t* buf, uint16_t* len); + +/*! \brief Send processed tx packet + * + * Send a packet to the low level transport driver. + * This packet has to have been successfully processed by the + * wl_process_tx() function. + * + * @param buf Buffer to send. + * @param len Length of buf in bytes. + * + * @return + * - WL_FAILURE if the interface is not ready to send. + * - WL_SUCCESS if the packet was successfully transmitted. + */ +wl_err_t wl_tx(const uint8_t* buf, uint16_t len); + + +/*! \brief Configure data alignment + * + * This function can be used if the host SDIO/SPI controller has certain + * requirements on the data transfer sizes that can be used on the SDIO/SPI bus. + * + * If the txsize parameter is non-zero, additional padding data should be added + * when performing the low level transfer of data buffer of sizes that are not + * a multiple of the size_align parameter. See \ref wl_sdio and \ref wl_spi for + * more information. + * + * @param txsize will configure the size alignment for tx data. + * + */ +void wl_conf_alignment(uint8_t txsize); + + +/*! @} */ /* End wl_transport group */ + + +/** \defgroup wl_custom Custom environment support + * + * \brief Support for custom environments + * + * These functions should only be used in cases where the transport library is + * not used at all. This usually applies to operating systems and environments + * where there already exists a transport layer framework, e.g. linux or + * windows. + * + * + +Note that the \a wl_poll() function is part of the transport library. Therefore, +it should not be used in custom environments. Therefore, it is necessary to +implement a custom polling or interrupt based scheme to ensure that any +incoming packets are processed by the core. + + * @{ + */ + + /*! \brief Wakeup callback function. + * + * Invoked when the WiFi device should wake up from power save mode. + * This function should send the proper commands to the device. + * + * Note that this type should only be used in custom environments, where + * the transport library is not used. + * + * @param ctx Opaque context pointer as provided to \a wl_register_wakeup_cb() + * that will be passed back to the callback. + * @param wakeup indicates whether wakeup should be set or cleared in the + * device. + */ +typedef void (wl_wakeup_cb_t)(void* ctx, uint8_t wakeup); + +/*! \brief Register wakeup callback function. + * + * Register a function that will be invoked when the WiFi device should wake + * up from power save mode. + * + * Note that this function should only be used in custom environments, where + * the transport library is not used. + * + * @param wakeup_cb Will be invoked when the device should wakeup from sleep + * mode. + * @param ctx Opaque context pointer that will be passed back to the callback. + */ +void wl_register_wakeup_cb(wl_wakeup_cb_t *wakeup_cb, void *ctx); + + +/*! \brief Management tx callback function. + * + * Invoked when the a management message should be transmitted to the + * WiFi device. This function should ensure that the message is passed through + * to the device and should never fail. + * + * Note that this type should only be used in custom environments, where + * the transport library is not used. + * + * @param ctx Opaque context pointer as provided to \a wl_register_mgmt_tx_cb() + * that will be passed back to the callback. + * @param buf Points to the buffer which holds the management data, + * @param len Size of the buffer. + */ +typedef void (wl_mgmt_tx_cb_t)(void *ctx, const uint8_t *buf, uint16_t len); + + +/*! \brief Register management tx callback function + * + * Register a function that will be invoked when a management message should + * be transmitted to the device. + * + * Note that this function should only be used in custom environments, where + * the transport library is not used. + * + * IMPORTANT : In a custom environment without a transport library \a + * wl_register_mgmt_tx_cb() \b must have been called + * before \a wl_fw_download() is called since \a + * wl_fw_download() depends on the \a mgmt_tx_cb() to send + * the firmware data to the WiFi chip. + * + * @param mgmt_tx_cb The callback function to invoke. + * @param ctx Opaque context pointer that will be passed back to the callback. + */ +void wl_register_mgmt_tx_cb(wl_mgmt_tx_cb_t *mgmt_tx_cb, void *ctx); + + + +/*! \brief Download the WiFi firmware image to the device. + * + * This operation will proceed synchronously until the firmware is completely + * downloaded. wl_init() should be called after this function has returned to + * perform device initialization. This function depends on \a + * wl_register_mgmt_tx_cb(). See that function for details. + * + * @param ctx Opaque context pointer that will be passed to the callbacks + * when they are invoked. This parameter is never + * accessed by the API. + * @param fw_read_cb callback function to invoke during firmware download. + * + * @return + * + * - WL_CARD_FAILURE if the wl hardware device is not available + * - WL_FIRMWARE_INVALID if the firmware obtained through fw_read_cb is + * invalid. + * - WL_OOM if the necessary memory could not be allocated. + */ + wl_err_t wl_fw_download(wl_fw_read_cb_t *fw_read_cb, void *ctx); + + + +/*! @} */ /* End wl_custom group */ + + + +#endif diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/wl_fw.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/wl_fw.h new file mode 100644 index 000000000..5be5f3762 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/wl_fw.h @@ -0,0 +1,19287 @@ +/* + * Programming interface for wl_api. + * Copyright (C) 2010 HD Wireless AB + * + * You should have received a copy of the license along with this library. + */ + +#ifndef WITHOUT_STDINT +#include +#endif +const uint8_t fw_buf[154188] = { + 0x10, 0x61, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x10, 0x61, 0x04, 0x00, + 0x38, 0x61, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x20, 0x61, 0x04, 0x00, + 0x30, 0x61, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x30, 0x61, 0x04, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x61, 0x04, 0x00, + 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0xee, 0xee, + 0xee, 0xee, 0x18, 0xf0, 0x9f, 0xe5, 0x18, 0xf0, + 0x9f, 0xe5, 0x18, 0xf0, 0x9f, 0xe5, 0x18, 0xf0, + 0x9f, 0xe5, 0x00, 0x00, 0xa0, 0xe1, 0x18, 0xf0, + 0x9f, 0xe5, 0x18, 0xf0, 0x9f, 0xe5, 0x44, 0x00, + 0x00, 0x00, 0xb4, 0x08, 0x00, 0x00, 0xb4, 0x08, + 0x00, 0x00, 0xb4, 0x08, 0x00, 0x00, 0xb4, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe4, 0x08, + 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x00, 0x00, + 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x0f, 0xe1, 0x1f, 0x00, 0xc0, 0xe3, + 0x13, 0x00, 0x80, 0xe3, 0xc0, 0x00, 0x80, 0xe3, + 0x00, 0xf0, 0x2f, 0xe1, 0x1c, 0xf0, 0x9f, 0xe5, + 0x3d, 0x02, 0x00, 0xeb, 0x5a, 0x02, 0x00, 0xeb, + 0x8d, 0x02, 0x00, 0xeb, 0x01, 0x00, 0x8f, 0xe2, + 0x10, 0xff, 0x2f, 0xe1, 0x41, 0xf0, 0xde, 0xfb, + 0x01, 0xf0, 0xdc, 0xfd, 0x3c, 0x00, 0x78, 0x00, + 0x00, 0x00, 0xfe, 0xe7, 0x00, 0x00, 0x5c, 0x00, + 0x00, 0x00, 0x78, 0x47, 0xc0, 0x46, 0x01, 0x00, + 0x00, 0xea, 0x78, 0x47, 0xc0, 0x46, 0x17, 0x00, + 0x00, 0xea, 0x8c, 0x11, 0x9f, 0xe5, 0x00, 0x20, + 0x91, 0xe5, 0x00, 0x30, 0x0f, 0xe1, 0x84, 0x11, + 0x9f, 0xe5, 0xfd, 0x20, 0xa1, 0xe8, 0x80, 0x01, + 0x9f, 0xe5, 0x80, 0x21, 0x9f, 0xe5, 0x01, 0x20, + 0x42, 0xe0, 0x0d, 0x00, 0x40, 0xe0, 0x3c, 0x00, + 0xb4, 0x00, 0x00, 0x00, 0x02, 0x00, 0x50, 0xe1, + 0x28, 0x00, 0x00, 0xaa, 0x68, 0x01, 0x9f, 0xe5, + 0x0d, 0x00, 0x50, 0xe1, 0x02, 0x00, 0x00, 0xba, + 0x04, 0x20, 0x10, 0xe4, 0x04, 0x20, 0x81, 0xe4, + 0xfa, 0xff, 0xff, 0xea, 0x58, 0x11, 0x9f, 0xe5, + 0x58, 0x01, 0x9f, 0xe5, 0x00, 0x00, 0x81, 0xe5, + 0x3c, 0x11, 0x9f, 0xe5, 0x50, 0x01, 0x9f, 0xe5, + 0x00, 0x00, 0x81, 0xe5, 0x1e, 0xff, 0x2f, 0xe1, + 0x3c, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x48, 0x11, + 0x9f, 0xe5, 0x00, 0x00, 0x91, 0xe5, 0x24, 0x11, + 0x9f, 0xe5, 0x00, 0x00, 0x81, 0xe5, 0x2c, 0x11, + 0x9f, 0xe5, 0x38, 0x01, 0x9f, 0xe5, 0x00, 0x00, + 0x81, 0xe5, 0x1e, 0xff, 0x2f, 0xe1, 0x74, 0x02, + 0x00, 0xeb, 0x10, 0x01, 0x9f, 0xe5, 0x28, 0x11, + 0x9f, 0xe5, 0x04, 0x20, 0x91, 0xe4, 0x04, 0x20, + 0x00, 0xe4, 0x04, 0x21, 0x9f, 0xe5, 0x02, 0x00, + 0x51, 0xe1, 0x3c, 0x00, 0x2c, 0x01, 0x00, 0x00, + 0xfa, 0xff, 0xff, 0x1a, 0xf0, 0x10, 0x9f, 0xe5, + 0xfd, 0x20, 0xb1, 0xe8, 0x03, 0xf0, 0x2f, 0xe1, + 0xe0, 0x10, 0x9f, 0xe5, 0x00, 0x20, 0x81, 0xe5, + 0xe8, 0x10, 0x9f, 0xe5, 0xf4, 0x20, 0x9f, 0xe5, + 0x00, 0x20, 0x81, 0xe5, 0x02, 0x10, 0x80, 0xe2, + 0x00, 0x00, 0x20, 0xe0, 0x01, 0x00, 0x40, 0xe2, + 0x11, 0xff, 0x2f, 0xe1, 0x01, 0x00, 0x8f, 0xe2, + 0x10, 0xff, 0x2f, 0xe1, 0x3c, 0x00, 0x68, 0x01, + 0x00, 0x00, 0x01, 0xf0, 0x9c, 0xf8, 0x78, 0x47, + 0x00, 0x00, 0x01, 0x00, 0x8f, 0xe2, 0x10, 0xff, + 0x2f, 0xe1, 0x01, 0xf0, 0x94, 0xf8, 0x78, 0x47, + 0x00, 0x00, 0x03, 0x00, 0x2d, 0xe9, 0x00, 0x10, + 0x0f, 0xe1, 0x00, 0x10, 0x80, 0xe5, 0xb8, 0x10, + 0x9f, 0xe5, 0x04, 0x10, 0x80, 0xe5, 0x00, 0x10, + 0xa0, 0xe1, 0x10, 0x00, 0x80, 0xe2, 0xfc, 0x1f, + 0xa0, 0xe8, 0x00, 0x20, 0xa0, 0xe1, 0x3c, 0x00, + 0xa4, 0x01, 0x00, 0x00, 0x01, 0x30, 0xa0, 0xe1, + 0x03, 0x00, 0xbd, 0xe8, 0x08, 0x00, 0x83, 0xe5, + 0x0c, 0x10, 0x83, 0xe5, 0xd3, 0x00, 0xa0, 0xe3, + 0x00, 0xf0, 0x21, 0xe1, 0x00, 0x60, 0xa2, 0xe8, + 0x00, 0x10, 0x4f, 0xe1, 0x04, 0x10, 0x82, 0xe4, + 0xd2, 0x00, 0xa0, 0xe3, 0x00, 0xf0, 0x21, 0xe1, + 0x00, 0x60, 0xa2, 0xe8, 0x00, 0x10, 0x4f, 0xe1, + 0x04, 0x10, 0x82, 0xe4, 0xd1, 0x00, 0xa0, 0xe3, + 0x3c, 0x00, 0xe0, 0x01, 0x00, 0x00, 0x00, 0xf0, + 0x21, 0xe1, 0x00, 0x7f, 0xa2, 0xe8, 0x00, 0x10, + 0x4f, 0xe1, 0x04, 0x10, 0x82, 0xe4, 0xd7, 0x00, + 0xa0, 0xe3, 0x00, 0xf0, 0x21, 0xe1, 0x00, 0x60, + 0xa2, 0xe8, 0x00, 0x10, 0x4f, 0xe1, 0x04, 0x10, + 0x82, 0xe4, 0xdb, 0x00, 0xa0, 0xe3, 0x00, 0xf0, + 0x21, 0xe1, 0x00, 0x60, 0xa2, 0xe8, 0x00, 0x10, + 0x4f, 0xe1, 0x00, 0x10, 0x82, 0xe5, 0x00, 0x00, + 0x93, 0xe5, 0x3c, 0x00, 0x1c, 0x02, 0x00, 0x00, + 0x00, 0xf0, 0x2f, 0xe1, 0x1e, 0xff, 0x2f, 0xe1, + 0x20, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x00, + 0x20, 0xee, 0x01, 0x00, 0xd8, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0xf0, 0x9f, 0xe5, + 0x10, 0x01, 0x00, 0x00, 0x08, 0x03, 0x00, 0x00, + 0xee, 0xee, 0xee, 0xee, 0x24, 0x03, 0x00, 0x00, + 0x20, 0x02, 0x00, 0x00, 0xb0, 0xb5, 0x04, 0x1c, + 0x63, 0x1c, 0x0b, 0x4d, 0x3c, 0x00, 0x58, 0x02, + 0x00, 0x00, 0x01, 0xd1, 0x6c, 0x69, 0x10, 0xe0, + 0x00, 0xf0, 0x6c, 0xfb, 0x09, 0x48, 0xff, 0xf7, + 0x0c, 0xff, 0xec, 0x60, 0x08, 0x4a, 0x51, 0x68, + 0x50, 0x68, 0x88, 0x42, 0xfc, 0xd0, 0x02, 0x20, + 0x28, 0x70, 0x01, 0x21, 0x8a, 0x20, 0x01, 0xf0, + 0x12, 0xf8, 0x20, 0x1c, 0xb0, 0xbd, 0x30, 0x00, + 0x07, 0x00, 0x51, 0x02, 0x00, 0x00, 0x00, 0x03, + 0x07, 0x00, 0xb0, 0xb5, 0x05, 0x1c, 0x3c, 0x00, + 0x94, 0x02, 0x00, 0x00, 0x00, 0x24, 0x00, 0xf0, + 0x50, 0xfb, 0x14, 0x48, 0xff, 0xf7, 0xf0, 0xfe, + 0x13, 0x49, 0x14, 0x48, 0xc1, 0x60, 0x01, 0x21, + 0x13, 0x4a, 0x49, 0x03, 0x91, 0x60, 0x13, 0x49, + 0xca, 0x78, 0x08, 0x23, 0x9a, 0x43, 0xca, 0x70, + 0xca, 0x78, 0x04, 0x23, 0x1a, 0x43, 0xca, 0x70, + 0x6b, 0x1c, 0x0d, 0xd0, 0x0e, 0x4b, 0x5a, 0x68, + 0x59, 0x68, 0x91, 0x42, 0xfc, 0xd0, 0xbe, 0x21, + 0x3c, 0x00, 0xd0, 0x02, 0x00, 0x00, 0x19, 0x73, + 0x19, 0x7a, 0x11, 0x22, 0x91, 0x43, 0x19, 0x72, + 0x19, 0x7a, 0xc9, 0x07, 0xfc, 0xd4, 0x02, 0x21, + 0x01, 0x70, 0xff, 0xf7, 0xd0, 0xfe, 0x20, 0x1c, + 0xb0, 0xbd, 0x91, 0x02, 0x00, 0x00, 0xff, 0xff, + 0xff, 0x00, 0x30, 0x00, 0x07, 0x00, 0x00, 0x10, + 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x03, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x0c, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x48, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x84, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, + 0x08, 0x47, 0x10, 0x47, 0x18, 0x47, 0x20, 0x47, + 0x28, 0x47, 0x30, 0x47, 0x38, 0x47, 0x10, 0xb5, + 0x04, 0x1c, 0x10, 0x1c, 0x00, 0xf0, 0x23, 0xf9, + 0x03, 0xc4, 0x10, 0xbc, 0x08, 0xbc, 0x18, 0x47, + 0x00, 0x00, 0x3c, 0x00, 0xfc, 0x03, 0x00, 0x00, + 0x10, 0xb4, 0x04, 0x2a, 0x0e, 0xd3, 0x03, 0x1c, + 0x0b, 0x43, 0x9b, 0x07, 0x0a, 0xd1, 0x08, 0xc8, + 0x10, 0xc9, 0xa3, 0x42, 0x02, 0xd1, 0x04, 0x3a, + 0x04, 0x2a, 0xf8, 0xd2, 0xa3, 0x42, 0x01, 0xd0, + 0x04, 0x38, 0x04, 0x39, 0x00, 0x2a, 0x02, 0xd1, + 0x00, 0x20, 0x10, 0xbc, 0x70, 0x47, 0xd3, 0x07, + 0x01, 0xd5, 0x01, 0x32, 0x05, 0xe0, 0x03, 0x78, + 0x0c, 0x78, 0x01, 0x31, 0x3c, 0x00, 0x38, 0x04, + 0x00, 0x00, 0x01, 0x30, 0xa3, 0x42, 0x07, 0xd1, + 0x03, 0x78, 0x0c, 0x78, 0x01, 0x31, 0x01, 0x30, + 0xa3, 0x42, 0x01, 0xd1, 0x02, 0x3a, 0xf1, 0xd1, + 0x18, 0x1b, 0xe9, 0xe7, 0x00, 0x00, 0x78, 0x47, + 0x00, 0x00, 0x00, 0x20, 0xa0, 0xe3, 0x04, 0x00, + 0x51, 0xe3, 0x08, 0x00, 0x00, 0x3a, 0x03, 0xc0, + 0x10, 0xe2, 0x0d, 0x00, 0x00, 0x0a, 0x04, 0xc0, + 0x6c, 0xe2, 0x02, 0x00, 0x5c, 0xe3, 0x3c, 0x00, + 0x74, 0x04, 0x00, 0x00, 0x01, 0x20, 0xc0, 0xe4, + 0x01, 0x20, 0xc0, 0xa4, 0x01, 0x20, 0xc0, 0xc4, + 0x0c, 0x10, 0x41, 0xe0, 0x06, 0x00, 0x00, 0xea, + 0x81, 0xcf, 0xb0, 0xe1, 0x01, 0x20, 0xc0, 0x24, + 0x01, 0x20, 0xc0, 0x24, 0x01, 0x20, 0xc0, 0x44, + 0x1e, 0xff, 0x2f, 0xe1, 0x78, 0x47, 0x00, 0x00, + 0x00, 0x20, 0xa0, 0xe3, 0x00, 0x40, 0x2d, 0xe9, + 0x02, 0x30, 0xa0, 0xe1, 0x02, 0xc0, 0xa0, 0xe1, + 0x3c, 0x00, 0xb0, 0x04, 0x00, 0x00, 0x02, 0xe0, + 0xa0, 0xe1, 0x20, 0x10, 0x51, 0xe2, 0x0c, 0x50, + 0xa0, 0x28, 0x0c, 0x50, 0xa0, 0x28, 0x20, 0x10, + 0x51, 0x22, 0xfb, 0xff, 0xff, 0x2a, 0x01, 0x1e, + 0xb0, 0xe1, 0x0c, 0x50, 0xa0, 0x28, 0x0c, 0x00, + 0xa0, 0x48, 0x00, 0x40, 0xbd, 0xe8, 0x01, 0x11, + 0xb0, 0xe1, 0x04, 0x20, 0x80, 0x24, 0x1e, 0xff, + 0x2f, 0x01, 0x01, 0x20, 0xc0, 0x44, 0x01, 0x20, + 0xc0, 0x44, 0x3c, 0x00, 0xec, 0x04, 0x00, 0x00, + 0x40, 0x04, 0x11, 0xe3, 0x01, 0x20, 0xc0, 0x14, + 0x1e, 0xff, 0x2f, 0xe1, 0x78, 0x47, 0x00, 0x00, + 0x03, 0x00, 0x52, 0xe3, 0x3e, 0x00, 0x00, 0x9a, + 0x03, 0xc0, 0x10, 0xe2, 0x08, 0x00, 0x00, 0x0a, + 0x01, 0x30, 0xd1, 0xe4, 0x02, 0x00, 0x5c, 0xe3, + 0x0c, 0x20, 0x82, 0xe0, 0x01, 0xc0, 0xd1, 0x94, + 0x01, 0x30, 0xc0, 0xe4, 0x01, 0x30, 0xd1, 0x34, + 0x04, 0x20, 0x42, 0xe2, 0x3c, 0x00, 0x28, 0x05, + 0x00, 0x00, 0x01, 0xc0, 0xc0, 0x94, 0x01, 0x30, + 0xc0, 0x34, 0x03, 0x30, 0x11, 0xe2, 0x1e, 0x00, + 0x00, 0x0a, 0x04, 0x20, 0x52, 0xe2, 0x2f, 0x00, + 0x00, 0x3a, 0x03, 0xc0, 0x31, 0xe7, 0x02, 0x00, + 0x53, 0xe3, 0x08, 0x00, 0x00, 0x0a, 0x0f, 0x00, + 0x00, 0x8a, 0x2c, 0x34, 0xa0, 0xe1, 0x04, 0xc0, + 0xb1, 0xe5, 0x04, 0x20, 0x52, 0xe2, 0x0c, 0x3c, + 0x83, 0xe1, 0x04, 0x30, 0x80, 0xe4, 0x3c, 0x00, + 0x64, 0x05, 0x00, 0x00, 0xf9, 0xff, 0xff, 0x2a, + 0x01, 0x10, 0x81, 0xe2, 0x23, 0x00, 0x00, 0xea, + 0x2c, 0x38, 0xa0, 0xe1, 0x04, 0xc0, 0xb1, 0xe5, + 0x04, 0x20, 0x52, 0xe2, 0x0c, 0x38, 0x83, 0xe1, + 0x04, 0x30, 0x80, 0xe4, 0xf9, 0xff, 0xff, 0x2a, + 0x02, 0x10, 0x81, 0xe2, 0x1b, 0x00, 0x00, 0xea, + 0x2c, 0x3c, 0xa0, 0xe1, 0x04, 0xc0, 0xb1, 0xe5, + 0x04, 0x20, 0x52, 0xe2, 0x0c, 0x34, 0x83, 0xe1, + 0x3c, 0x00, 0xa0, 0x05, 0x00, 0x00, 0x04, 0x30, + 0x80, 0xe4, 0xf9, 0xff, 0xff, 0x2a, 0x03, 0x10, + 0x81, 0xe2, 0x13, 0x00, 0x00, 0xea, 0x78, 0x47, + 0x00, 0x00, 0x10, 0x40, 0x2d, 0xe9, 0x20, 0x20, + 0x52, 0xe2, 0x05, 0x00, 0x00, 0x3a, 0x18, 0x50, + 0xb1, 0x28, 0x18, 0x50, 0xa0, 0x28, 0x18, 0x50, + 0xb1, 0x28, 0x18, 0x50, 0xa0, 0x28, 0x20, 0x20, + 0x52, 0x22, 0xf9, 0xff, 0xff, 0x2a, 0x02, 0xce, + 0xb0, 0xe1, 0x3c, 0x00, 0xdc, 0x05, 0x00, 0x00, + 0x18, 0x50, 0xb1, 0x28, 0x18, 0x50, 0xa0, 0x28, + 0x18, 0x00, 0xb1, 0x48, 0x18, 0x00, 0xa0, 0x48, + 0x10, 0x40, 0xbd, 0xe8, 0x02, 0xcf, 0xb0, 0xe1, + 0x04, 0x30, 0x91, 0x24, 0x04, 0x30, 0x80, 0x24, + 0x1e, 0xff, 0x2f, 0x01, 0x82, 0x2f, 0xb0, 0xe1, + 0x01, 0x20, 0xd1, 0x44, 0x01, 0x30, 0xd1, 0x24, + 0x01, 0xc0, 0xd1, 0x24, 0x01, 0x20, 0xc0, 0x44, + 0x01, 0x30, 0xc0, 0x24, 0x3c, 0x00, 0x18, 0x06, + 0x00, 0x00, 0x01, 0xc0, 0xc0, 0x24, 0x1e, 0xff, + 0x2f, 0xe1, 0x78, 0x47, 0x00, 0x00, 0xff, 0x30, + 0x01, 0xe2, 0x02, 0x10, 0xa0, 0xe1, 0x03, 0x24, + 0x83, 0xe1, 0x02, 0x28, 0x82, 0xe1, 0x88, 0xff, + 0xff, 0xea, 0x78, 0x47, 0x00, 0x00, 0x80, 0x24, + 0x10, 0xe2, 0x00, 0x00, 0x60, 0x42, 0x41, 0x30, + 0x32, 0xe0, 0x00, 0x10, 0x61, 0x22, 0xa1, 0xc1, + 0x70, 0xe0, 0x20, 0x00, 0x00, 0x3a, 0x3c, 0x00, + 0x54, 0x06, 0x00, 0x00, 0x21, 0xc4, 0x70, 0xe0, + 0x0f, 0x00, 0x00, 0x3a, 0x00, 0x04, 0xa0, 0xe1, + 0xff, 0x24, 0x82, 0xe3, 0x21, 0xc2, 0x70, 0xe0, + 0x17, 0x00, 0x00, 0x3a, 0x21, 0xc4, 0x70, 0xe0, + 0x09, 0x00, 0x00, 0x3a, 0x00, 0x04, 0xa0, 0xe1, + 0xff, 0x28, 0x82, 0xe3, 0x21, 0xc4, 0x70, 0xe0, + 0x00, 0x04, 0xa0, 0x21, 0xff, 0x2c, 0x82, 0x23, + 0x21, 0xc2, 0x70, 0xe0, 0x0e, 0x00, 0x00, 0x3a, + 0x3c, 0x00, 0x90, 0x06, 0x00, 0x00, 0x00, 0xc0, + 0x70, 0xe2, 0x83, 0x00, 0x00, 0x2a, 0x20, 0x04, + 0xa0, 0x21, 0xa1, 0xc3, 0x70, 0xe0, 0x80, 0x13, + 0x41, 0x20, 0x02, 0x20, 0xa2, 0xe0, 0x21, 0xc3, + 0x70, 0xe0, 0x00, 0x13, 0x41, 0x20, 0x02, 0x20, + 0xa2, 0xe0, 0xa1, 0xc2, 0x70, 0xe0, 0x80, 0x12, + 0x41, 0x20, 0x02, 0x20, 0xa2, 0xe0, 0x21, 0xc2, + 0x70, 0xe0, 0x00, 0x12, 0x41, 0x20, 0x02, 0x20, + 0xa2, 0xe0, 0x3c, 0x00, 0xcc, 0x06, 0x00, 0x00, + 0xa1, 0xc1, 0x70, 0xe0, 0x80, 0x11, 0x41, 0x20, + 0x02, 0x20, 0xa2, 0xe0, 0x21, 0xc1, 0x70, 0xe0, + 0x00, 0x11, 0x41, 0x20, 0x02, 0x20, 0xa2, 0xe0, + 0xa1, 0xc0, 0x70, 0xe0, 0x80, 0x10, 0x41, 0x20, + 0x02, 0x20, 0xa2, 0xe0, 0x01, 0xc0, 0x70, 0xe0, + 0x00, 0x10, 0x41, 0x20, 0x02, 0x20, 0xb2, 0xe0, + 0xe5, 0xff, 0xff, 0x2a, 0xc3, 0x0f, 0x32, 0xe0, + 0xa3, 0x0f, 0x80, 0xe0, 0x3c, 0x00, 0x08, 0x07, + 0x00, 0x00, 0x00, 0x10, 0x61, 0x22, 0x1e, 0xff, + 0x2f, 0xe1, 0x78, 0x47, 0x00, 0x00, 0x00, 0x20, + 0xa0, 0xe3, 0xa1, 0xc1, 0x70, 0xe0, 0x20, 0x00, + 0x00, 0x3a, 0x21, 0xc4, 0x70, 0xe0, 0x0f, 0x00, + 0x00, 0x3a, 0x00, 0x04, 0xa0, 0xe1, 0xff, 0x24, + 0x82, 0xe3, 0x21, 0xc2, 0x70, 0xe0, 0x17, 0x00, + 0x00, 0x3a, 0x21, 0xc4, 0x70, 0xe0, 0x09, 0x00, + 0x00, 0x3a, 0x00, 0x04, 0xa0, 0xe1, 0x3c, 0x00, + 0x44, 0x07, 0x00, 0x00, 0xff, 0x28, 0x82, 0xe3, + 0x21, 0xc4, 0x70, 0xe0, 0x00, 0x04, 0xa0, 0x21, + 0xff, 0x2c, 0x82, 0x23, 0x21, 0xc2, 0x70, 0xe0, + 0x0e, 0x00, 0x00, 0x3a, 0x00, 0xc0, 0x70, 0xe2, + 0x50, 0x00, 0x00, 0x2a, 0x20, 0x04, 0xa0, 0x21, + 0xa1, 0xc3, 0x70, 0xe0, 0x80, 0x13, 0x41, 0x20, + 0x02, 0x20, 0xa2, 0xe0, 0x21, 0xc3, 0x70, 0xe0, + 0x00, 0x13, 0x41, 0x20, 0x02, 0x20, 0xa2, 0xe0, + 0x3c, 0x00, 0x80, 0x07, 0x00, 0x00, 0xa1, 0xc2, + 0x70, 0xe0, 0x80, 0x12, 0x41, 0x20, 0x02, 0x20, + 0xa2, 0xe0, 0x21, 0xc2, 0x70, 0xe0, 0x00, 0x12, + 0x41, 0x20, 0x02, 0x20, 0xa2, 0xe0, 0xa1, 0xc1, + 0x70, 0xe0, 0x80, 0x11, 0x41, 0x20, 0x02, 0x20, + 0xa2, 0xe0, 0x21, 0xc1, 0x70, 0xe0, 0x00, 0x11, + 0x41, 0x20, 0x02, 0x20, 0xa2, 0xe0, 0xa1, 0xc0, + 0x70, 0xe0, 0x80, 0x10, 0x41, 0x20, 0x02, 0x20, + 0xa2, 0xe0, 0x3c, 0x00, 0xbc, 0x07, 0x00, 0x00, + 0x01, 0xc0, 0x70, 0xe0, 0x00, 0x10, 0x41, 0x20, + 0x02, 0x20, 0xb2, 0xe0, 0xe5, 0xff, 0xff, 0x2a, + 0x02, 0x00, 0xa0, 0xe1, 0x1e, 0xff, 0x2f, 0xe1, + 0x78, 0x47, 0x00, 0x00, 0x0a, 0x10, 0x40, 0xe2, + 0x20, 0x01, 0x40, 0xe0, 0x20, 0x02, 0x80, 0xe0, + 0x20, 0x04, 0x80, 0xe0, 0x20, 0x08, 0x80, 0xe0, + 0xa0, 0x01, 0xa0, 0xe1, 0x00, 0x21, 0x80, 0xe0, + 0x82, 0x10, 0x51, 0xe0, 0x3c, 0x00, 0xf8, 0x07, + 0x00, 0x00, 0x01, 0x00, 0x80, 0x52, 0x0a, 0x10, + 0x81, 0x42, 0x1e, 0xff, 0x2f, 0xe1, 0x30, 0xb4, + 0x44, 0x1c, 0x81, 0x07, 0x08, 0xd0, 0x01, 0x78, + 0x01, 0x30, 0x00, 0x29, 0x02, 0xd1, 0x00, 0x1b, + 0x30, 0xbc, 0x70, 0x47, 0x81, 0x07, 0xf6, 0xd1, + 0x0b, 0x4a, 0xd5, 0x01, 0x02, 0xc8, 0x8b, 0x1a, + 0x8b, 0x43, 0x2b, 0x40, 0xfa, 0xd0, 0x00, 0x1b, + 0x0a, 0x06, 0x01, 0xd1, 0x03, 0x38, 0x3c, 0x00, + 0x34, 0x08, 0x00, 0x00, 0xef, 0xe7, 0x0a, 0x04, + 0x12, 0x0e, 0x01, 0xd1, 0x02, 0x38, 0xea, 0xe7, + 0x09, 0x02, 0x09, 0x0e, 0xe7, 0xd1, 0x01, 0x38, + 0xe5, 0xe7, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, + 0xf0, 0xb4, 0x03, 0x1c, 0x04, 0x1c, 0x0c, 0x43, + 0xa4, 0x07, 0x0c, 0xd1, 0x10, 0x4d, 0xef, 0x01, + 0x02, 0xe0, 0x04, 0x31, 0x04, 0x3a, 0x10, 0xc3, + 0x04, 0x2a, 0x04, 0xd3, 0x0c, 0x68, 0x66, 0x1b, + 0x3c, 0x00, 0x70, 0x08, 0x00, 0x00, 0xa6, 0x43, + 0x3e, 0x40, 0xf5, 0xd0, 0x00, 0x2a, 0x07, 0xd0, + 0x0c, 0x78, 0x01, 0x31, 0x1c, 0x70, 0x01, 0x33, + 0x00, 0x2c, 0x03, 0xd0, 0x01, 0x3a, 0xf7, 0xd1, + 0xf0, 0xbc, 0x70, 0x47, 0x01, 0x2a, 0xfb, 0xd9, + 0x51, 0x1e, 0x00, 0x22, 0x1a, 0x70, 0x01, 0x33, + 0x01, 0x39, 0xfb, 0xd1, 0xf4, 0xe7, 0x01, 0x01, + 0x01, 0x01, 0x78, 0x47, 0x00, 0x00, 0x02, 0x00, + 0xa0, 0xe3, 0x3c, 0x00, 0xac, 0x08, 0x00, 0x00, + 0x02, 0x10, 0xa0, 0xe3, 0x2e, 0xfe, 0xff, 0xea, + 0x1f, 0x40, 0x2d, 0xe9, 0x00, 0x00, 0x0f, 0xe1, + 0xc0, 0x00, 0x80, 0xe3, 0x00, 0xf0, 0x2f, 0xe1, + 0x81, 0x00, 0xa0, 0xe3, 0x02, 0x10, 0xa0, 0xe3, + 0x01, 0x20, 0x8f, 0xe2, 0x12, 0xff, 0x2f, 0xe1, + 0x00, 0xf0, 0xe6, 0xfc, 0x78, 0x47, 0x00, 0x00, + 0x1f, 0x40, 0xbd, 0xe8, 0xfe, 0xff, 0xff, 0xea, + 0x1f, 0x50, 0x2d, 0xe9, 0x3c, 0x00, 0xe8, 0x08, + 0x00, 0x00, 0x01, 0x00, 0x8f, 0xe2, 0x10, 0xff, + 0x2f, 0xe1, 0x00, 0xf0, 0x40, 0xfb, 0x78, 0x47, + 0x00, 0x00, 0x1f, 0x50, 0xbd, 0xe8, 0x04, 0xf0, + 0x5e, 0xe2, 0x1f, 0x50, 0x2d, 0xe9, 0x01, 0x00, + 0x8f, 0xe2, 0x10, 0xff, 0x2f, 0xe1, 0x00, 0xf0, + 0x18, 0xfb, 0x78, 0x47, 0x00, 0x00, 0x1f, 0x50, + 0xbd, 0xe8, 0x04, 0xf0, 0x5e, 0xe2, 0x00, 0xbd, + 0x01, 0xb5, 0x00, 0xa0, 0x00, 0x47, 0x3c, 0x00, + 0x24, 0x09, 0x00, 0x00, 0x00, 0x30, 0x0f, 0xe1, + 0xc0, 0x30, 0xc3, 0xe3, 0x03, 0xf0, 0x21, 0xe1, + 0x01, 0x00, 0x8f, 0xe2, 0x10, 0xff, 0x2f, 0xe1, + 0x01, 0xbd, 0x01, 0xb5, 0x00, 0xa0, 0x00, 0x47, + 0x00, 0x30, 0x0f, 0xe1, 0xc0, 0x30, 0x83, 0xe3, + 0x03, 0xf0, 0x21, 0xe1, 0x01, 0x00, 0x8f, 0xe2, + 0x10, 0xff, 0x2f, 0xe1, 0x01, 0xbd, 0x00, 0x00, + 0x18, 0x00, 0x9f, 0xe5, 0x04, 0x10, 0x90, 0xe4, + 0x3c, 0x00, 0x60, 0x09, 0x00, 0x00, 0x00, 0x00, + 0x51, 0xe3, 0x02, 0x00, 0x00, 0x0a, 0x04, 0x20, + 0x90, 0xe4, 0x00, 0x20, 0x81, 0xe5, 0xf9, 0xff, + 0xff, 0xea, 0x0e, 0xf0, 0xa0, 0xe1, 0x7c, 0x09, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, + 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0xd8, 0x03, + 0x00, 0x00, 0xd8, 0x03, 0x00, 0x00, 0xd8, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x9c, 0x09, 0x00, 0x00, + 0x44, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, + 0x44, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, + 0x00, 0x80, 0x01, 0x00, 0x10, 0x8e, 0x01, 0x00, + 0x10, 0x8e, 0x01, 0x00, 0x88, 0xf8, 0x01, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x10, 0x04, 0x00, + 0xc4, 0x33, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0e, 0x50, 0xa0, 0xe1, + 0x58, 0x40, 0x9f, 0xe5, 0x3c, 0x00, 0xd8, 0x09, + 0x00, 0x00, 0x04, 0x00, 0x94, 0xe4, 0x01, 0x00, + 0x50, 0xe3, 0x05, 0xf0, 0xa0, 0x01, 0x04, 0x10, + 0x94, 0xe4, 0x04, 0x20, 0x94, 0xe4, 0x03, 0x00, + 0x00, 0xeb, 0x04, 0x00, 0x94, 0xe4, 0x04, 0x10, + 0x94, 0xe4, 0x07, 0x00, 0x00, 0xeb, 0xf5, 0xff, + 0xff, 0xea, 0x01, 0x00, 0x50, 0xe1, 0x0e, 0xf0, + 0xa0, 0x01, 0x02, 0x00, 0x51, 0xe1, 0x04, 0x30, + 0x90, 0x14, 0x04, 0x30, 0x81, 0x14, 0x3c, 0x00, + 0x14, 0x0a, 0x00, 0x00, 0xfb, 0xff, 0xff, 0x1a, + 0x0e, 0xf0, 0xa0, 0xe1, 0x14, 0x20, 0x9f, 0xe5, + 0x00, 0x20, 0x92, 0xe5, 0x01, 0x00, 0x50, 0xe1, + 0x04, 0x20, 0x80, 0x14, 0xfc, 0xff, 0xff, 0x1a, + 0x0e, 0xf0, 0xa0, 0xe1, 0x80, 0x09, 0x00, 0x00, + 0xcc, 0x09, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, + 0x20, 0xe6, 0x01, 0x00, 0x13, 0x00, 0x00, 0x00, + 0x53, 0x56, 0x43, 0x5f, 0x00, 0x04, 0x00, 0x00, + 0x3c, 0x00, 0x50, 0x0a, 0x00, 0x00, 0x20, 0xee, + 0x01, 0x00, 0x12, 0x00, 0x00, 0x00, 0x49, 0x52, + 0x51, 0x5f, 0x00, 0x02, 0x00, 0x00, 0x20, 0xf2, + 0x01, 0x00, 0x11, 0x00, 0x00, 0x00, 0x46, 0x49, + 0x51, 0x5f, 0x80, 0x00, 0x00, 0x00, 0x20, 0xf4, + 0x01, 0x00, 0x17, 0x00, 0x00, 0x00, 0x41, 0x42, + 0x54, 0x5f, 0x00, 0x00, 0x00, 0x00, 0xa0, 0xf4, + 0x01, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x55, 0x4e, + 0x44, 0x5f, 0x3c, 0x00, 0x8c, 0x0a, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xa0, 0xf4, 0x01, 0x00, + 0x1f, 0x00, 0x00, 0x00, 0x55, 0x53, 0x52, 0x5f, + 0x01, 0x00, 0x00, 0x00, 0x0e, 0x50, 0xa0, 0xe1, + 0x00, 0x60, 0x0f, 0xe1, 0x8c, 0x40, 0x9f, 0xe5, + 0x04, 0x10, 0x94, 0xe4, 0x01, 0x00, 0x51, 0xe3, + 0x09, 0x00, 0x00, 0x0a, 0x04, 0x00, 0x94, 0xe4, + 0x01, 0x10, 0x80, 0xe0, 0x03, 0x10, 0xc1, 0xe3, + 0x04, 0x20, 0x94, 0xe4, 0x3c, 0x00, 0xc8, 0x0a, + 0x00, 0x00, 0xc0, 0x20, 0x82, 0xe3, 0x02, 0xf0, + 0x2f, 0xe1, 0x04, 0xd0, 0x41, 0xe2, 0x04, 0x20, + 0x94, 0xe4, 0x13, 0x00, 0x00, 0xeb, 0xf2, 0xff, + 0xff, 0xea, 0x06, 0xf0, 0x2f, 0xe1, 0x05, 0xf0, + 0xa0, 0xe1, 0x0e, 0x50, 0xa0, 0xe1, 0x00, 0x60, + 0x0f, 0xe1, 0x44, 0x40, 0x9f, 0xe5, 0x04, 0x10, + 0x94, 0xe4, 0x01, 0x00, 0x51, 0xe3, 0x08, 0x00, + 0x00, 0x0a, 0x04, 0x00, 0x94, 0xe4, 0x3c, 0x00, + 0x04, 0x0b, 0x00, 0x00, 0x01, 0x10, 0x80, 0xe0, + 0x03, 0x10, 0xc1, 0xe3, 0x04, 0x20, 0x94, 0xe4, + 0xc0, 0x20, 0x82, 0xe3, 0x02, 0xf0, 0x2f, 0xe1, + 0x04, 0xd0, 0x41, 0xe2, 0x04, 0x20, 0x94, 0xe4, + 0xf3, 0xff, 0xff, 0xea, 0x06, 0xf0, 0x2f, 0xe1, + 0x05, 0xf0, 0xa0, 0xe1, 0x01, 0x00, 0x50, 0xe1, + 0x04, 0x20, 0x80, 0x14, 0xfc, 0xff, 0xff, 0x1a, + 0x0e, 0xf0, 0xa0, 0xe1, 0x3c, 0x0a, 0x00, 0x00, + 0x3c, 0x00, 0x40, 0x0b, 0x00, 0x00, 0x01, 0x60, + 0xc0, 0x46, 0xc0, 0x46, 0xc0, 0x46, 0x70, 0x47, + 0x00, 0x00, 0x10, 0x1e, 0x10, 0xee, 0x02, 0x00, + 0x11, 0xe3, 0xfc, 0xff, 0xff, 0x1a, 0x10, 0x0e, + 0x01, 0xee, 0x10, 0x1e, 0x10, 0xee, 0x02, 0x00, + 0x11, 0xe3, 0xfc, 0xff, 0xff, 0x1a, 0x1e, 0xff, + 0x2f, 0xe1, 0x10, 0x1e, 0x10, 0xee, 0x01, 0x00, + 0x11, 0xe3, 0x03, 0x00, 0x00, 0x0a, 0x10, 0x1e, + 0x11, 0xee, 0x3c, 0x00, 0x7c, 0x0b, 0x00, 0x00, + 0x00, 0x10, 0x80, 0xe5, 0x01, 0x00, 0xa0, 0xe3, + 0x1e, 0xff, 0x2f, 0xe1, 0x00, 0x00, 0x20, 0xe0, + 0x1e, 0xff, 0x2f, 0xe1, 0x8d, 0x46, 0x97, 0x46, + 0x78, 0x47, 0xc0, 0x46, 0x78, 0xfd, 0xff, 0xea, + 0x10, 0xb5, 0x04, 0x1c, 0x03, 0x28, 0x01, 0xd9, + 0x00, 0xf0, 0xac, 0xfb, 0x0c, 0x48, 0x40, 0x68, + 0x00, 0x28, 0x00, 0xd0, 0x03, 0x24, 0x0b, 0x48, + 0x01, 0x68, 0x09, 0x48, 0x3c, 0x00, 0xb8, 0x0b, + 0x00, 0x00, 0x12, 0x30, 0x00, 0x29, 0x05, 0xd0, + 0x06, 0x21, 0x61, 0x43, 0x40, 0x5c, 0xc3, 0x00, + 0x18, 0x18, 0x04, 0xe0, 0x06, 0x21, 0x61, 0x43, + 0x40, 0x5c, 0x14, 0x23, 0x58, 0x43, 0x0a, 0x30, + 0x00, 0x06, 0x00, 0x0e, 0x10, 0xbd, 0xd4, 0x7a, + 0x01, 0x00, 0xa8, 0x69, 0x01, 0x00, 0x80, 0xb5, + 0x09, 0x4a, 0x09, 0x49, 0x03, 0x20, 0x00, 0xf0, + 0xf2, 0xf9, 0x08, 0x49, 0x08, 0x20, 0x3c, 0x00, + 0xf4, 0x0b, 0x00, 0x00, 0x08, 0x60, 0x48, 0x60, + 0x07, 0x49, 0x1d, 0x20, 0x01, 0xf0, 0xb2, 0xfc, + 0x06, 0x49, 0x1e, 0x20, 0x01, 0xf0, 0xae, 0xfc, + 0x80, 0xbd, 0x00, 0x00, 0x00, 0x6c, 0x01, 0x00, + 0x31, 0x27, 0x00, 0x00, 0x00, 0x10, 0x07, 0x00, + 0x29, 0x25, 0x00, 0x00, 0x31, 0x25, 0x00, 0x00, + 0x05, 0x49, 0x80, 0xb5, 0x08, 0x20, 0x88, 0x60, + 0x1d, 0x20, 0x01, 0xf0, 0xbf, 0xfc, 0x1e, 0x20, + 0x3c, 0x00, 0x30, 0x0c, 0x00, 0x00, 0x01, 0xf0, + 0xbc, 0xfc, 0x80, 0xbd, 0x00, 0x00, 0x00, 0x10, + 0x07, 0x00, 0x02, 0x1c, 0x08, 0x1c, 0xd1, 0x2a, + 0x80, 0xb5, 0x01, 0xd1, 0x05, 0xf0, 0x19, 0xfc, + 0x80, 0xbd, 0x03, 0x49, 0x80, 0xb5, 0x00, 0x20, + 0x08, 0x80, 0x05, 0x20, 0x05, 0xf0, 0xd5, 0xfb, + 0x80, 0xbd, 0xb0, 0x74, 0x01, 0x00, 0x80, 0xb5, + 0x54, 0x28, 0x01, 0xd1, 0x06, 0xf0, 0xcd, 0xf8, + 0x80, 0xbd, 0x3c, 0x00, 0x6c, 0x0c, 0x00, 0x00, + 0xb0, 0xb5, 0x10, 0x4d, 0x02, 0x1c, 0x01, 0x24, + 0x01, 0x2a, 0x0d, 0x48, 0x29, 0x68, 0x06, 0xd0, + 0xc4, 0x2a, 0x03, 0xd1, 0x6a, 0x68, 0x00, 0x2a, + 0x05, 0xd0, 0xac, 0x60, 0xb0, 0xbd, 0x0e, 0xf0, + 0x89, 0xfb, 0x6c, 0x60, 0x08, 0xe0, 0x00, 0x22, + 0xaa, 0x60, 0x6c, 0x60, 0x0e, 0xf0, 0x82, 0xfb, + 0x00, 0x21, 0x04, 0x20, 0x12, 0xf0, 0xc8, 0xfc, + 0x06, 0xf0, 0xd8, 0xf8, 0x3c, 0x00, 0xa8, 0x0c, + 0x00, 0x00, 0xb0, 0xbd, 0x00, 0x00, 0xc4, 0x60, + 0x01, 0x00, 0xbc, 0x74, 0x01, 0x00, 0x05, 0x4a, + 0x51, 0x69, 0x08, 0x1a, 0x11, 0x69, 0x09, 0x68, + 0x10, 0x31, 0x81, 0x42, 0x01, 0xd8, 0x50, 0x61, + 0x70, 0x47, 0x00, 0x20, 0x70, 0x47, 0x8c, 0x6e, + 0x01, 0x00, 0x01, 0x49, 0x49, 0x68, 0x40, 0x1a, + 0x70, 0x47, 0x8c, 0x6e, 0x01, 0x00, 0x01, 0x48, + 0x40, 0x69, 0x70, 0x47, 0x00, 0x00, 0x3c, 0x00, + 0xe4, 0x0c, 0x00, 0x00, 0x8c, 0x6e, 0x01, 0x00, + 0x02, 0x4a, 0x51, 0x69, 0x08, 0x18, 0x50, 0x61, + 0x70, 0x47, 0x00, 0x00, 0x8c, 0x6e, 0x01, 0x00, + 0x0e, 0x49, 0x0f, 0x48, 0x10, 0xb5, 0x19, 0x22, + 0x92, 0x01, 0x41, 0x60, 0x89, 0x18, 0xc1, 0x60, + 0x0b, 0x49, 0x00, 0x22, 0x0c, 0x31, 0x01, 0x60, + 0x0a, 0x49, 0x82, 0x60, 0x09, 0x68, 0x01, 0x23, + 0xdb, 0x03, 0xc9, 0x18, 0x08, 0x4c, 0x41, 0x61, + 0x3c, 0x00, 0x20, 0x0d, 0x00, 0x00, 0x21, 0x68, + 0x00, 0x29, 0x02, 0xd0, 0x07, 0x49, 0x01, 0x61, + 0x01, 0xe0, 0x00, 0xf0, 0x0c, 0xf8, 0x22, 0x60, + 0x10, 0xbd, 0x44, 0xdc, 0x01, 0x00, 0x8c, 0x6e, + 0x01, 0x00, 0xc8, 0x09, 0x00, 0x00, 0x34, 0x58, + 0x01, 0x00, 0xc4, 0x09, 0x00, 0x00, 0x01, 0x48, + 0x02, 0x49, 0x08, 0x61, 0x70, 0x47, 0xc8, 0x09, + 0x00, 0x00, 0x8c, 0x6e, 0x01, 0x00, 0x08, 0x28, + 0x05, 0xd2, 0x3c, 0x00, 0x5c, 0x0d, 0x00, 0x00, + 0x03, 0x4b, 0x80, 0x00, 0x19, 0x50, 0x02, 0x49, + 0x20, 0x31, 0x0a, 0x50, 0x70, 0x47, 0x00, 0x00, + 0x64, 0x6d, 0x01, 0x00, 0x70, 0xb5, 0x06, 0x1c, + 0x0d, 0x48, 0x0d, 0x1c, 0x00, 0x68, 0x14, 0x1c, + 0x00, 0x28, 0x03, 0xd1, 0x20, 0x1c, 0x00, 0xf0, + 0x09, 0xfc, 0x70, 0xbd, 0x28, 0x06, 0x01, 0xd5, + 0x00, 0xf0, 0x22, 0xfe, 0x22, 0x1c, 0x29, 0x1c, + 0x30, 0x1c, 0x08, 0xf0, 0x3c, 0x00, 0x98, 0x0d, + 0x00, 0x00, 0xdd, 0xfd, 0x01, 0x1c, 0x03, 0x48, + 0x54, 0x30, 0x43, 0x69, 0x32, 0x1c, 0xff, 0xf7, + 0x1b, 0xfb, 0x70, 0xbd, 0x00, 0x00, 0x50, 0x6d, + 0x01, 0x00, 0xf8, 0xb5, 0x06, 0x1c, 0x0d, 0x48, + 0x1f, 0x1c, 0x00, 0x68, 0x15, 0x1c, 0x0c, 0x1c, + 0x00, 0x28, 0x02, 0xd1, 0x28, 0x1c, 0x00, 0xf0, + 0xe8, 0xfb, 0x20, 0x06, 0x01, 0xd5, 0x00, 0xf0, + 0x02, 0xfe, 0x2a, 0x1c, 0x21, 0x1c, 0x3c, 0x00, + 0xd4, 0x0d, 0x00, 0x00, 0x30, 0x1c, 0x08, 0xf0, + 0xbd, 0xfd, 0x01, 0x1c, 0x03, 0x48, 0x54, 0x30, + 0x43, 0x69, 0x3a, 0x1c, 0xff, 0xf7, 0xfb, 0xfa, + 0xf8, 0xbd, 0x00, 0x00, 0x50, 0x6d, 0x01, 0x00, + 0xf8, 0xb5, 0xf1, 0x28, 0x4e, 0xd1, 0x2a, 0x48, + 0x69, 0x46, 0x82, 0x69, 0xff, 0xf7, 0xee, 0xfa, + 0x27, 0x49, 0x00, 0x26, 0x54, 0x39, 0xc8, 0x68, + 0x8b, 0x68, 0xc2, 0x00, 0x01, 0x30, 0xd5, 0x18, + 0x3c, 0x00, 0x10, 0x0e, 0x00, 0x00, 0x07, 0x28, + 0xc8, 0x60, 0x00, 0xd1, 0xce, 0x60, 0x22, 0x48, + 0x6c, 0x68, 0x00, 0x68, 0x00, 0x28, 0x03, 0xd0, + 0x00, 0x21, 0x20, 0x1c, 0x08, 0xf0, 0x3b, 0xfb, + 0x6e, 0x60, 0x25, 0x68, 0x20, 0x89, 0xa9, 0x78, + 0x02, 0x39, 0x40, 0x1a, 0xe9, 0x78, 0x40, 0x1a, + 0x20, 0x81, 0xa8, 0x78, 0x28, 0x18, 0x02, 0x38, + 0x20, 0x60, 0x6e, 0x78, 0x28, 0x78, 0x08, 0x28, + 0x17, 0xd2, 0x3c, 0x00, 0x4c, 0x0e, 0x00, 0x00, + 0x30, 0x06, 0x07, 0xd5, 0x27, 0x1c, 0x20, 0x1c, + 0x00, 0xf0, 0x7a, 0xfc, 0x04, 0x1c, 0x38, 0x1c, + 0x00, 0xf0, 0x9c, 0xfb, 0x28, 0x78, 0x0f, 0x49, + 0x40, 0x39, 0x80, 0x00, 0x0a, 0x58, 0x00, 0x2a, + 0x04, 0xd0, 0x31, 0x1c, 0x20, 0x1c, 0xff, 0xf7, + 0xb3, 0xfa, 0x08, 0xe0, 0x05, 0x21, 0x00, 0xe0, + 0x04, 0x21, 0x06, 0x20, 0x00, 0xf0, 0x10, 0xfa, + 0x20, 0x1c, 0x00, 0xf0, 0x3c, 0x00, 0x88, 0x0e, + 0x00, 0x00, 0x87, 0xfb, 0x30, 0x06, 0x01, 0xd5, + 0x00, 0xf0, 0xa1, 0xfd, 0xf8, 0xbd, 0x01, 0x21, + 0x06, 0x20, 0x00, 0xf0, 0x04, 0xfa, 0xf9, 0xe7, + 0x00, 0x00, 0xa4, 0x6d, 0x01, 0x00, 0xcc, 0x5c, + 0x01, 0x00, 0xf8, 0xb5, 0x1a, 0x4d, 0x19, 0x4f, + 0x01, 0x24, 0x54, 0x35, 0x29, 0x1c, 0x03, 0x20, + 0x7c, 0x60, 0x17, 0x4b, 0x18, 0x4a, 0x05, 0xf0, + 0xf4, 0xfb, 0x00, 0x28, 0x02, 0xd0, 0x3c, 0x00, + 0xc4, 0x0e, 0x00, 0x00, 0x00, 0x20, 0x38, 0x60, + 0x1f, 0xe0, 0x3c, 0x60, 0x07, 0x21, 0x28, 0x1c, + 0xea, 0x69, 0xff, 0xf7, 0x83, 0xfa, 0x38, 0x20, + 0x00, 0xf0, 0x80, 0xfc, 0x00, 0x24, 0xb8, 0x60, + 0xb8, 0x68, 0xe6, 0x00, 0x35, 0x18, 0x68, 0x46, + 0x02, 0x21, 0x00, 0xf0, 0x75, 0xfb, 0x28, 0x60, + 0x28, 0x1c, 0x00, 0xf0, 0xa5, 0xfd, 0xb8, 0x68, + 0x81, 0x59, 0x06, 0x48, 0x54, 0x30, 0x02, 0x6a, + 0x3c, 0x00, 0x00, 0x0f, 0x00, 0x00, 0xff, 0xf7, + 0x6c, 0xfa, 0x01, 0x34, 0x07, 0x2c, 0xea, 0xdb, + 0x00, 0x20, 0xf8, 0x60, 0x38, 0x61, 0xf8, 0xbd, + 0x00, 0x00, 0x50, 0x6d, 0x01, 0x00, 0x81, 0x9a, + 0x00, 0x00, 0x61, 0x9a, 0x00, 0x00, 0x05, 0x48, + 0x80, 0xb5, 0x00, 0x68, 0x00, 0x28, 0x05, 0xd0, + 0x03, 0x48, 0x54, 0x30, 0x42, 0x6a, 0x00, 0x21, + 0xff, 0xf7, 0x53, 0xfa, 0x80, 0xbd, 0x50, 0x6d, + 0x01, 0x00, 0x3c, 0x00, 0x3c, 0x0f, 0x00, 0x00, + 0x70, 0x47, 0x00, 0x00, 0x70, 0xb5, 0x0a, 0x4e, + 0x09, 0x4d, 0x08, 0x4c, 0x08, 0x3e, 0xa1, 0x69, + 0x00, 0x29, 0x07, 0xd0, 0x30, 0x68, 0x41, 0x60, + 0x00, 0x7b, 0x81, 0x00, 0x69, 0x58, 0xff, 0xf7, + 0x3e, 0xfa, 0xf4, 0xe7, 0x03, 0x49, 0x02, 0x20, + 0x08, 0x70, 0x70, 0xbd, 0x00, 0x10, 0x07, 0x00, + 0xe0, 0x7e, 0x01, 0x00, 0x00, 0x02, 0x07, 0x00, + 0x70, 0xb5, 0x0a, 0x4e, 0x3c, 0x00, 0x78, 0x0f, + 0x00, 0x00, 0x09, 0x4d, 0x08, 0x4c, 0x08, 0x3e, + 0xe1, 0x69, 0x00, 0x29, 0x07, 0xd0, 0x70, 0x68, + 0x41, 0x60, 0x00, 0x7b, 0x81, 0x00, 0x69, 0x58, + 0xff, 0xf7, 0x24, 0xfa, 0xf4, 0xe7, 0x03, 0x49, + 0x02, 0x20, 0x08, 0x70, 0x70, 0xbd, 0x00, 0x10, + 0x07, 0x00, 0xe0, 0x7e, 0x01, 0x00, 0x00, 0x02, + 0x07, 0x00, 0xb0, 0xb5, 0x09, 0x4d, 0x04, 0x1c, + 0x28, 0x1c, 0x20, 0x22, 0x40, 0x30, 0x3c, 0x00, + 0xb4, 0x0f, 0x00, 0x00, 0x05, 0x49, 0xff, 0xf7, + 0x9f, 0xfa, 0xe0, 0x68, 0xe8, 0x60, 0x20, 0x69, + 0x28, 0x61, 0xa0, 0x6a, 0xa8, 0x62, 0x60, 0x68, + 0x68, 0x60, 0xb0, 0xbd, 0x70, 0x52, 0x01, 0x00, + 0x00, 0x10, 0x07, 0x00, 0xf8, 0xb5, 0x00, 0x24, + 0x00, 0x23, 0x20, 0x28, 0x01, 0xdb, 0x01, 0x24, + 0x07, 0xe0, 0x08, 0x4e, 0x80, 0x00, 0x35, 0x58, + 0x07, 0x4f, 0xbd, 0x42, 0x00, 0xd0, 0x2b, 0x1c, + 0x3c, 0x00, 0xf0, 0x0f, 0x00, 0x00, 0x31, 0x50, + 0x13, 0x60, 0x00, 0x2c, 0x03, 0xd0, 0x21, 0x1c, + 0x82, 0x20, 0x00, 0xf0, 0x52, 0xf9, 0x20, 0x1c, + 0xf8, 0xbd, 0xe0, 0x7e, 0x01, 0x00, 0x75, 0x75, + 0x00, 0x00, 0xb0, 0xb5, 0x0b, 0x4d, 0x04, 0x1c, + 0x28, 0x68, 0x00, 0x28, 0x0f, 0xd0, 0x20, 0x1c, + 0x12, 0xf0, 0xb7, 0xfd, 0x00, 0x28, 0x0a, 0xd0, + 0x21, 0x7a, 0x28, 0x7a, 0x0a, 0x07, 0x00, 0x07, + 0x00, 0x0f, 0x3c, 0x00, 0x2c, 0x10, 0x00, 0x00, + 0x12, 0x0f, 0x90, 0x42, 0x29, 0x72, 0x01, 0xd0, + 0x01, 0x20, 0xb0, 0xbd, 0x00, 0x20, 0xb0, 0xbd, + 0x70, 0x78, 0x01, 0x00, 0xf0, 0xb5, 0x42, 0x4e, + 0x05, 0x1c, 0x30, 0x68, 0x85, 0xb0, 0x00, 0x28, + 0x63, 0xd0, 0x00, 0x24, 0x00, 0x20, 0x00, 0x2d, + 0x06, 0xd0, 0x69, 0x78, 0x18, 0x29, 0x03, 0xd1, + 0xe9, 0x79, 0x01, 0x29, 0x00, 0xd1, 0x01, 0x20, + 0x00, 0x28, 0x45, 0xd0, 0x3c, 0x00, 0x68, 0x10, + 0x00, 0x00, 0x00, 0x20, 0xb0, 0x72, 0x81, 0x00, + 0x4a, 0x19, 0x93, 0x7a, 0x59, 0x06, 0x89, 0x0f, + 0xdb, 0x06, 0x04, 0xd5, 0xb3, 0x7a, 0x01, 0x27, + 0x8f, 0x40, 0x3b, 0x43, 0xb3, 0x72, 0xd2, 0x7a, + 0x13, 0x09, 0x12, 0x07, 0x12, 0x0f, 0x93, 0x42, + 0x05, 0xd3, 0x01, 0x22, 0x8a, 0x40, 0x14, 0x43, + 0x01, 0xaa, 0x89, 0x00, 0x50, 0x50, 0x01, 0x30, + 0x04, 0x28, 0xe4, 0xdb, 0xb0, 0x7a, 0x3c, 0x00, + 0xa4, 0x10, 0x00, 0x00, 0x20, 0x40, 0x01, 0x07, + 0x0d, 0xd5, 0x41, 0x07, 0x09, 0xd5, 0xc1, 0x07, + 0x05, 0xd5, 0x81, 0x07, 0x01, 0xd5, 0x00, 0x24, + 0x05, 0xe0, 0x02, 0x99, 0x02, 0xe0, 0x01, 0x99, + 0x00, 0xe0, 0x03, 0x99, 0x04, 0x91, 0x41, 0x07, + 0x09, 0xd5, 0xc1, 0x07, 0x05, 0xd5, 0x81, 0x07, + 0x01, 0xd5, 0x00, 0x24, 0x03, 0xe0, 0x02, 0x99, + 0x00, 0xe0, 0x01, 0x99, 0x03, 0x91, 0xc1, 0x07, + 0x3c, 0x00, 0xe0, 0x10, 0x00, 0x00, 0x05, 0xd5, + 0x81, 0x07, 0x01, 0xd5, 0x00, 0x24, 0x01, 0xe0, + 0x02, 0x99, 0x01, 0x91, 0x80, 0x07, 0x01, 0xd5, + 0x00, 0x24, 0x22, 0xe0, 0x0f, 0x2c, 0x20, 0xd1, + 0x70, 0x68, 0x00, 0x28, 0x0b, 0xd0, 0x04, 0x9a, + 0x02, 0xab, 0x00, 0x92, 0x0a, 0xcb, 0x01, 0x9a, + 0x28, 0x1c, 0x0b, 0xf0, 0x8a, 0xfb, 0x00, 0x20, + 0x70, 0x60, 0x10, 0xe0, 0x17, 0xe0, 0x30, 0x7a, + 0x29, 0x7a, 0x3c, 0x00, 0x1c, 0x11, 0x00, 0x00, + 0x00, 0x07, 0x09, 0x07, 0x09, 0x0f, 0x00, 0x0f, + 0x88, 0x42, 0x07, 0xd0, 0x04, 0x9a, 0x02, 0xab, + 0x00, 0x92, 0x0a, 0xcb, 0x01, 0x9a, 0x28, 0x1c, + 0x0b, 0xf0, 0x76, 0xfb, 0x28, 0x7a, 0x30, 0x72, + 0x01, 0x20, 0x0f, 0x2c, 0x00, 0xd0, 0x00, 0x20, + 0x05, 0xb0, 0xf0, 0xbd, 0x01, 0x20, 0xfb, 0xe7, + 0x70, 0x78, 0x01, 0x00, 0x0d, 0x4a, 0x70, 0xb5, + 0x11, 0x68, 0x00, 0x20, 0x3c, 0x00, 0x58, 0x11, + 0x00, 0x00, 0x00, 0x29, 0x0e, 0xd0, 0x11, 0x7a, + 0x09, 0x06, 0x0b, 0xd5, 0x53, 0x7a, 0x94, 0x7a, + 0x03, 0x21, 0x01, 0x25, 0x2a, 0x1c, 0x8a, 0x40, + 0x1e, 0x1c, 0x16, 0x40, 0x03, 0xd0, 0x22, 0x40, + 0x01, 0xd1, 0x01, 0x20, 0x70, 0xbd, 0xff, 0x31, + 0x09, 0x06, 0x09, 0x16, 0xf2, 0xd5, 0x70, 0xbd, + 0x00, 0x00, 0x70, 0x78, 0x01, 0x00, 0x10, 0xb5, + 0x08, 0x4c, 0x20, 0x68, 0x00, 0x28, 0x3c, 0x00, + 0x94, 0x11, 0x00, 0x00, 0x04, 0xd0, 0x60, 0x68, + 0x00, 0x28, 0x01, 0xd1, 0x0b, 0xf0, 0xc0, 0xfb, + 0x00, 0x20, 0x00, 0x21, 0x00, 0x22, 0x07, 0xc4, + 0x0c, 0x3c, 0x01, 0x20, 0x60, 0x60, 0x10, 0xbd, + 0x70, 0x78, 0x01, 0x00, 0x01, 0x49, 0x01, 0x20, + 0x08, 0x60, 0x70, 0x47, 0x70, 0x78, 0x01, 0x00, + 0xf8, 0xb5, 0x0e, 0x4d, 0x04, 0x1c, 0x00, 0x20, + 0x68, 0x72, 0x20, 0x1c, 0x12, 0xf0, 0xde, 0xfc, + 0x3c, 0x00, 0xd0, 0x11, 0x00, 0x00, 0x00, 0x28, + 0x12, 0xd0, 0x00, 0x20, 0x03, 0x21, 0x01, 0x22, + 0x0f, 0x1a, 0x16, 0x1c, 0x23, 0x7a, 0xbe, 0x40, + 0x33, 0x40, 0x04, 0xd0, 0x6b, 0x7a, 0x16, 0x1c, + 0x86, 0x40, 0x33, 0x43, 0x6b, 0x72, 0x01, 0x30, + 0x00, 0x06, 0x00, 0x0e, 0x03, 0x28, 0xef, 0xd9, + 0xf8, 0xbd, 0x70, 0x78, 0x01, 0x00, 0x92, 0x00, + 0x51, 0x18, 0x8a, 0x7a, 0x12, 0x07, 0x12, 0x0f, + 0x02, 0x70, 0x3c, 0x00, 0x0c, 0x12, 0x00, 0x00, + 0xca, 0x7a, 0x12, 0x07, 0x12, 0x0f, 0x42, 0x70, + 0xca, 0x7a, 0x12, 0x09, 0x82, 0x70, 0x09, 0x7b, + 0x81, 0x80, 0x70, 0x47, 0x03, 0x4a, 0x0f, 0x21, + 0x52, 0x7a, 0x01, 0x20, 0x91, 0x43, 0x00, 0xd0, + 0x00, 0x20, 0x70, 0x47, 0x70, 0x78, 0x01, 0x00, + 0x40, 0x07, 0x05, 0x49, 0x40, 0x0f, 0x05, 0x4a, + 0x09, 0x56, 0x52, 0x7a, 0x01, 0x20, 0x0a, 0x40, + 0x00, 0xd1, 0x00, 0x20, 0x3c, 0x00, 0x48, 0x12, + 0x00, 0x00, 0x70, 0x47, 0x00, 0x00, 0x5e, 0x46, + 0x01, 0x00, 0x70, 0x78, 0x01, 0x00, 0x12, 0x4a, + 0x70, 0xb5, 0x53, 0x7a, 0x94, 0x7a, 0xff, 0x20, + 0x03, 0x21, 0x01, 0x25, 0x2a, 0x1c, 0x8a, 0x40, + 0x1e, 0x1c, 0x16, 0x40, 0x14, 0xd0, 0x22, 0x40, + 0x12, 0xd1, 0x08, 0x06, 0x00, 0x0e, 0x07, 0xd0, + 0x01, 0x28, 0x07, 0xd0, 0x02, 0x28, 0x07, 0xd0, + 0x03, 0x28, 0x07, 0xd1, 0x07, 0x20, 0x3c, 0x00, + 0x84, 0x12, 0x00, 0x00, 0x70, 0xbd, 0x03, 0x20, + 0x70, 0xbd, 0x01, 0x20, 0x70, 0xbd, 0x05, 0x20, + 0x70, 0xbd, 0xff, 0x20, 0x70, 0xbd, 0xff, 0x31, + 0x09, 0x06, 0x09, 0x16, 0xe1, 0xd5, 0x70, 0xbd, + 0x70, 0x78, 0x01, 0x00, 0xf8, 0xb5, 0x04, 0x1c, + 0x13, 0x48, 0x0d, 0x1c, 0x81, 0x68, 0x00, 0x29, + 0x05, 0xd0, 0x01, 0x7b, 0x00, 0x29, 0x01, 0xd1, + 0x04, 0x73, 0x45, 0x73, 0xf8, 0xbd, 0x0f, 0x4e, + 0x3c, 0x00, 0xc0, 0x12, 0x00, 0x00, 0x31, 0x1c, + 0x20, 0x31, 0x8a, 0x79, 0x00, 0xab, 0x1a, 0x70, + 0xc9, 0x79, 0x59, 0x70, 0x42, 0x68, 0x00, 0x2a, + 0x07, 0xd0, 0x20, 0x02, 0x28, 0x43, 0x01, 0x1c, + 0x00, 0x20, 0xff, 0xf7, 0x7e, 0xf8, 0x00, 0x28, + 0x04, 0xd1, 0x2a, 0x1c, 0x21, 0x1c, 0x00, 0x20, + 0x11, 0xf0, 0x0f, 0xf8, 0x00, 0xab, 0x18, 0x88, + 0xf0, 0x84, 0xe2, 0xe7, 0x00, 0x00, 0x88, 0x5a, + 0x01, 0x00, 0x3c, 0x00, 0xfc, 0x12, 0x00, 0x00, + 0x00, 0x10, 0x07, 0x00, 0x80, 0xb5, 0x01, 0x21, + 0x81, 0x20, 0xff, 0xf7, 0xcd, 0xff, 0x80, 0xbd, + 0x01, 0x49, 0x01, 0x20, 0x88, 0x60, 0x70, 0x47, + 0x88, 0x5a, 0x01, 0x00, 0x05, 0x49, 0x80, 0xb5, + 0x00, 0x20, 0x88, 0x60, 0x08, 0x7b, 0x00, 0x28, + 0x02, 0xd0, 0x49, 0x7b, 0xff, 0xf7, 0xbc, 0xff, + 0x80, 0xbd, 0x00, 0x00, 0x88, 0x5a, 0x01, 0x00, + 0x02, 0x4a, 0x01, 0x1c, 0x3c, 0x00, 0x38, 0x13, + 0x00, 0x00, 0x50, 0x68, 0x51, 0x60, 0x70, 0x47, + 0x00, 0x00, 0x88, 0x5a, 0x01, 0x00, 0x10, 0xb5, + 0x0c, 0x1c, 0x07, 0xf0, 0x64, 0xfa, 0x04, 0x61, + 0x00, 0x20, 0x10, 0xbd, 0x00, 0x00, 0xff, 0xb5, + 0x0e, 0x1c, 0x1f, 0x1c, 0x38, 0x20, 0x81, 0xb0, + 0x00, 0xf0, 0x3d, 0xfa, 0x1d, 0x49, 0x04, 0x1c, + 0x48, 0x69, 0x00, 0x28, 0x01, 0xd1, 0x4c, 0x61, + 0x00, 0xe0, 0x04, 0x60, 0x30, 0x01, 0x3c, 0x00, + 0x74, 0x13, 0x00, 0x00, 0x00, 0x90, 0x00, 0x04, + 0x00, 0x0c, 0x00, 0xf0, 0x15, 0xfa, 0x05, 0x1c, + 0x00, 0x99, 0xff, 0xf7, 0x8b, 0xf8, 0x00, 0x20, + 0x73, 0x1e, 0x04, 0xe0, 0x01, 0x01, 0x4a, 0x19, + 0x10, 0x32, 0x6a, 0x50, 0x01, 0x30, 0x98, 0x42, + 0xf8, 0xd3, 0x00, 0x01, 0x2d, 0x50, 0x38, 0x21, + 0x20, 0x1c, 0xff, 0xf7, 0x7b, 0xf8, 0xa5, 0x60, + 0x65, 0x60, 0xe6, 0x85, 0x0c, 0x20, 0x60, 0x86, + 0x3c, 0x00, 0xb0, 0x13, 0x00, 0x00, 0xaf, 0x20, + 0x80, 0x01, 0xe0, 0x61, 0x0e, 0x20, 0xe0, 0x86, + 0x00, 0x20, 0x20, 0x60, 0x01, 0x98, 0xe0, 0x60, + 0x38, 0x68, 0x60, 0x61, 0x03, 0x99, 0x04, 0x48, + 0x08, 0x60, 0x04, 0x48, 0x38, 0x60, 0x05, 0xb0, + 0x00, 0x20, 0xf0, 0xbd, 0x00, 0x00, 0xfc, 0x5a, + 0x01, 0x00, 0xdd, 0x15, 0x01, 0x00, 0xfd, 0x16, + 0x01, 0x00, 0x02, 0x1c, 0x08, 0x1c, 0xf0, 0x2a, + 0x80, 0xb5, 0x3c, 0x00, 0xec, 0x13, 0x00, 0x00, + 0x04, 0xd0, 0xf1, 0x2a, 0x07, 0xd1, 0x06, 0xf0, + 0x09, 0xfb, 0x80, 0xbd, 0x07, 0xf0, 0x0c, 0xfa, + 0x0d, 0xf0, 0xa8, 0xfa, 0x80, 0xbd, 0x01, 0x21, + 0x02, 0x20, 0xff, 0xf7, 0x4d, 0xff, 0x80, 0xbd, + 0x01, 0x49, 0x00, 0x20, 0x48, 0x61, 0x70, 0x47, + 0xfc, 0x5a, 0x01, 0x00, 0x00, 0x28, 0x02, 0xd0, + 0x00, 0x29, 0x00, 0xd0, 0xc1, 0x60, 0x70, 0x47, + 0xf8, 0xb5, 0x17, 0x1c, 0x3c, 0x00, 0x28, 0x14, + 0x00, 0x00, 0x0e, 0x1c, 0x05, 0x1c, 0x1c, 0x1c, + 0x1c, 0x30, 0x07, 0xf0, 0xc8, 0xf8, 0x01, 0x69, + 0x42, 0x69, 0x80, 0x68, 0x89, 0x19, 0x89, 0x1a, + 0x81, 0x42, 0x06, 0xd2, 0x23, 0x1c, 0x3a, 0x1c, + 0x31, 0x1c, 0x28, 0x1c, 0x00, 0xf0, 0x05, 0xf8, + 0xf8, 0xbd, 0x00, 0x20, 0x38, 0x60, 0x20, 0x60, + 0xfa, 0xe7, 0xff, 0xb5, 0x85, 0xb0, 0x05, 0x98, + 0x01, 0x27, 0x0e, 0x1c, 0x1c, 0x30, 0x3c, 0x00, + 0x64, 0x14, 0x00, 0x00, 0x07, 0xf0, 0xae, 0xf8, + 0x04, 0x1c, 0x80, 0x88, 0x04, 0x30, 0x03, 0x90, + 0x2c, 0x48, 0x04, 0x90, 0x80, 0x79, 0x02, 0x90, + 0xa0, 0x69, 0xb0, 0x42, 0x17, 0xd2, 0x35, 0x1a, + 0x11, 0xe0, 0x03, 0x98, 0xff, 0xf7, 0x16, 0xfc, + 0x00, 0x28, 0x06, 0xd1, 0x01, 0x21, 0x8e, 0x20, + 0xff, 0xf7, 0x08, 0xff, 0x00, 0x25, 0x00, 0x27, + 0x05, 0xe0, 0x21, 0x68, 0x01, 0x60, 0x20, 0x60, + 0x3c, 0x00, 0xa0, 0x14, 0x00, 0x00, 0xa0, 0x69, + 0x01, 0x30, 0xa0, 0x61, 0x01, 0x3d, 0xeb, 0xd2, + 0x00, 0x2f, 0x35, 0xd0, 0xa0, 0x69, 0x80, 0x1b, + 0xa0, 0x61, 0x20, 0x69, 0x80, 0x19, 0x20, 0x61, + 0x61, 0x69, 0x40, 0x1a, 0xe1, 0x68, 0x88, 0x42, + 0x03, 0xd9, 0x07, 0x21, 0x8e, 0x20, 0xff, 0xf7, + 0xec, 0xfe, 0x25, 0x68, 0x2f, 0x1c, 0x70, 0x1e, + 0x01, 0x95, 0x00, 0xe0, 0x3f, 0x68, 0x01, 0x38, + 0xfc, 0xd2, 0x3c, 0x00, 0xdc, 0x14, 0x00, 0x00, + 0x38, 0x68, 0x20, 0x60, 0x02, 0x98, 0x04, 0x99, + 0x88, 0x71, 0x2e, 0x68, 0x2c, 0x60, 0x32, 0x1d, + 0x00, 0x92, 0x29, 0x1c, 0x20, 0x31, 0x01, 0x22, + 0x28, 0x1d, 0x05, 0x9b, 0x08, 0xf0, 0x7a, 0xfc, + 0xbd, 0x42, 0x01, 0xd0, 0x35, 0x1c, 0xf0, 0xe7, + 0x00, 0x20, 0x38, 0x61, 0x01, 0x98, 0x07, 0x99, + 0x04, 0x30, 0x08, 0x60, 0x08, 0x98, 0x04, 0x37, + 0x07, 0x60, 0x09, 0xb0, 0x3c, 0x00, 0x18, 0x15, + 0x00, 0x00, 0xf0, 0xbd, 0x02, 0x98, 0x04, 0x99, + 0x88, 0x71, 0xf9, 0xe7, 0x00, 0x00, 0x20, 0x10, + 0x07, 0x00, 0x38, 0xb5, 0x04, 0x1c, 0x15, 0x1c, + 0x00, 0x20, 0x0c, 0x60, 0x09, 0xe0, 0xe2, 0x68, + 0x20, 0x1c, 0x00, 0x92, 0xa3, 0x8a, 0x21, 0x68, + 0xa2, 0x69, 0x08, 0xf0, 0x56, 0xfc, 0x20, 0x1c, + 0xe4, 0x68, 0x00, 0x2c, 0xf3, 0xd1, 0x28, 0x60, + 0x38, 0xbd, 0x80, 0xb5, 0x0c, 0xe0, 0x3c, 0x00, + 0x54, 0x15, 0x00, 0x00, 0xc2, 0x68, 0x8a, 0x42, + 0x08, 0xd1, 0x00, 0x21, 0xc1, 0x60, 0x00, 0x28, + 0x03, 0xd1, 0x06, 0x21, 0x8e, 0x20, 0xff, 0xf7, + 0x9d, 0xfe, 0x80, 0xbd, 0x10, 0x1c, 0x00, 0x28, + 0xf7, 0xd0, 0xef, 0xe7, 0x10, 0xb5, 0x04, 0x1c, + 0x0c, 0xd0, 0xa0, 0x69, 0x00, 0x28, 0x06, 0xd1, + 0x20, 0x69, 0x00, 0x28, 0x03, 0xd0, 0x06, 0xf0, + 0xf7, 0xfd, 0x00, 0x20, 0x20, 0x61, 0x20, 0x1c, + 0x3c, 0x00, 0x90, 0x15, 0x00, 0x00, 0x06, 0xf0, + 0xf2, 0xfd, 0x10, 0xbd, 0x00, 0x00, 0x10, 0xb5, + 0x00, 0x28, 0x09, 0xd0, 0xc4, 0x68, 0x03, 0xe0, + 0xff, 0xf7, 0xe7, 0xff, 0x20, 0x1c, 0xf9, 0xe7, + 0x00, 0x2c, 0xf9, 0xd1, 0xff, 0xf7, 0xe1, 0xff, + 0x10, 0xbd, 0x01, 0x1c, 0x00, 0x20, 0x04, 0xe0, + 0x0a, 0x89, 0xc9, 0x68, 0x10, 0x18, 0x00, 0x04, + 0x00, 0x0c, 0x00, 0x29, 0xf8, 0xd1, 0x70, 0x47, + 0x00, 0x00, 0x3c, 0x00, 0xcc, 0x15, 0x00, 0x00, + 0x00, 0xe0, 0x08, 0x1c, 0xc1, 0x68, 0x00, 0x29, + 0xfb, 0xd1, 0x70, 0x47, 0xf8, 0xb5, 0x06, 0x1c, + 0x0c, 0x1c, 0x1c, 0x20, 0x00, 0xf0, 0x68, 0xfa, + 0x05, 0x1c, 0x00, 0x2e, 0x01, 0xd1, 0x00, 0x2c, + 0x02, 0xd1, 0x30, 0x1c, 0x01, 0x21, 0x03, 0xe0, + 0x20, 0x1c, 0x00, 0xf0, 0x5d, 0xfa, 0x00, 0x21, + 0x00, 0x22, 0x00, 0x92, 0x0a, 0x1c, 0x01, 0x1c, + 0x23, 0x1c, 0x28, 0x1c, 0x3c, 0x00, 0x08, 0x16, + 0x00, 0x00, 0x08, 0xf0, 0xf2, 0xfb, 0x28, 0x1c, + 0xf8, 0xbd, 0xb0, 0xb5, 0x03, 0x32, 0x92, 0x08, + 0x92, 0x00, 0x14, 0x04, 0x24, 0x0c, 0x09, 0x19, + 0x1d, 0x1c, 0xc9, 0x18, 0x09, 0x04, 0x09, 0x0c, + 0xff, 0xf7, 0xd7, 0xff, 0x01, 0x89, 0x02, 0x68, + 0x12, 0x19, 0x09, 0x1b, 0x49, 0x1b, 0x02, 0x60, + 0x01, 0x81, 0xb0, 0xbd, 0x00, 0x00, 0xf8, 0xb5, + 0x0a, 0x4c, 0xa0, 0x21, 0x20, 0x1c, 0x3c, 0x00, + 0x44, 0x16, 0x00, 0x00, 0xfe, 0xf7, 0x2a, 0xff, + 0x00, 0x20, 0x26, 0x1c, 0xa0, 0x36, 0x07, 0x4d, + 0x07, 0xe0, 0x0c, 0x21, 0x41, 0x43, 0x49, 0x19, + 0x0e, 0xc9, 0x27, 0x1d, 0x0e, 0xc7, 0x20, 0x34, + 0x01, 0x30, 0xa6, 0x42, 0xf5, 0xd1, 0xf8, 0xbd, + 0xd0, 0x5c, 0x01, 0x00, 0xc8, 0x3f, 0x01, 0x00, + 0xf7, 0xb5, 0xc4, 0x68, 0x06, 0x1c, 0x00, 0x25, + 0x00, 0x2c, 0x82, 0xb0, 0x23, 0xd0, 0x20, 0x89, + 0x3c, 0x00, 0x80, 0x16, 0x00, 0x00, 0x90, 0x42, + 0x20, 0xd3, 0xe1, 0x68, 0x87, 0x1a, 0x01, 0x91, + 0x00, 0x21, 0xe1, 0x60, 0x03, 0x99, 0x00, 0x20, + 0xff, 0xf7, 0xa1, 0xff, 0x05, 0x1c, 0x20, 0x89, + 0xc0, 0x1b, 0x20, 0x81, 0x2a, 0x68, 0x03, 0x99, + 0x30, 0x1c, 0x00, 0xf0, 0x16, 0xf8, 0x20, 0x89, + 0xc0, 0x19, 0x20, 0x81, 0x01, 0x99, 0x20, 0x1c, + 0xff, 0xf7, 0xb1, 0xfe, 0x21, 0x1c, 0x28, 0x1c, + 0xff, 0xf7, 0x3c, 0x00, 0xbc, 0x16, 0x00, 0x00, + 0xad, 0xfe, 0x29, 0x1c, 0x30, 0x1c, 0xff, 0xf7, + 0xa9, 0xfe, 0x01, 0x20, 0x00, 0x2d, 0x00, 0xd1, + 0x00, 0x20, 0x05, 0xb0, 0xf0, 0xbd, 0x00, 0x00, + 0xf7, 0xb5, 0x04, 0x1c, 0x0e, 0x1c, 0x00, 0x20, + 0x01, 0xe0, 0x20, 0x1c, 0x0c, 0x1c, 0xe1, 0x68, + 0x00, 0x29, 0xfa, 0xd1, 0x27, 0x89, 0xb7, 0x42, + 0x0a, 0xd3, 0xb8, 0x1b, 0x00, 0x04, 0x00, 0x0c, + 0x20, 0x81, 0x21, 0x68, 0x3c, 0x00, 0xf8, 0x16, + 0x00, 0x00, 0x09, 0x18, 0x02, 0x98, 0x32, 0x1c, + 0xfe, 0xf7, 0xfb, 0xfe, 0xfe, 0xbd, 0xf1, 0x1b, + 0x0d, 0x04, 0x2d, 0x0c, 0x00, 0x28, 0x19, 0xd0, + 0x01, 0x89, 0xa9, 0x42, 0x16, 0xd3, 0x49, 0x1b, + 0x09, 0x04, 0x09, 0x0c, 0x01, 0x81, 0x00, 0x68, + 0x41, 0x18, 0x02, 0x98, 0x2a, 0x1c, 0xfe, 0xf7, + 0xe8, 0xfe, 0x21, 0x68, 0x02, 0x98, 0x72, 0x1b, + 0x40, 0x19, 0xfe, 0xf7, 0xe2, 0xfe, 0x3c, 0x00, + 0x34, 0x17, 0x00, 0x00, 0x20, 0x89, 0xc0, 0x1b, + 0x20, 0x81, 0x20, 0x68, 0xc0, 0x19, 0x20, 0x60, + 0xdf, 0xe7, 0x03, 0x21, 0x8e, 0x20, 0xff, 0xf7, + 0xad, 0xfd, 0xda, 0xe7, 0xf8, 0xb5, 0x04, 0x1c, + 0x00, 0x26, 0x13, 0xe0, 0x21, 0x89, 0x00, 0x20, + 0xff, 0xf7, 0x3e, 0xff, 0x05, 0x1c, 0x22, 0x89, + 0x21, 0x68, 0x00, 0x68, 0xfe, 0xf7, 0xc8, 0xfe, + 0x00, 0x2e, 0x01, 0xd1, 0x2e, 0x1c, 0x03, 0xe0, + 0x3c, 0x00, 0x70, 0x17, 0x00, 0x00, 0x29, 0x1c, + 0x38, 0x1c, 0xff, 0xf7, 0x50, 0xfe, 0xe4, 0x68, + 0x2f, 0x1c, 0x00, 0x2c, 0xe9, 0xd1, 0x30, 0x1c, + 0xf8, 0xbd, 0xb0, 0xb5, 0x04, 0x1c, 0x00, 0x89, + 0x40, 0x1a, 0x05, 0x04, 0x20, 0x68, 0x2d, 0x0c, + 0x40, 0x18, 0x29, 0x1c, 0xff, 0xf7, 0x1f, 0xff, + 0x21, 0x89, 0x49, 0x1b, 0x21, 0x81, 0xe1, 0x68, + 0xc1, 0x60, 0xe0, 0x60, 0xb0, 0xbd, 0x10, 0xb5, + 0x03, 0x30, 0x3c, 0x00, 0xac, 0x17, 0x00, 0x00, + 0x09, 0x4a, 0x81, 0x08, 0x10, 0x68, 0x3d, 0x24, + 0x08, 0x4b, 0x64, 0x01, 0x89, 0x00, 0x09, 0x18, + 0x1b, 0x19, 0x99, 0x42, 0x01, 0xd8, 0x11, 0x60, + 0x10, 0xbd, 0x0f, 0x21, 0x80, 0x20, 0xff, 0xf7, + 0x6b, 0xfd, 0x00, 0x20, 0x10, 0xbd, 0x00, 0x00, + 0xb4, 0xcf, 0x01, 0x00, 0x14, 0xc8, 0x01, 0x00, + 0x10, 0xb5, 0x11, 0xf0, 0x61, 0xff, 0x04, 0x1c, + 0x03, 0xd1, 0x0d, 0x21, 0x3c, 0x00, 0xe8, 0x17, + 0x00, 0x00, 0x80, 0x20, 0xff, 0xf7, 0x5b, 0xfd, + 0x20, 0x1c, 0x10, 0xbd, 0x00, 0x00, 0xb0, 0xb5, + 0x01, 0x1f, 0x0b, 0x68, 0x0d, 0x48, 0x00, 0x22, + 0x83, 0x42, 0x04, 0xd0, 0x01, 0x32, 0x10, 0x30, + 0x03, 0x2a, 0xf9, 0xd3, 0x01, 0xe0, 0x03, 0x2a, + 0x06, 0xd3, 0x09, 0x24, 0x21, 0x1c, 0x80, 0x20, + 0xff, 0xf7, 0x45, 0xfd, 0x20, 0x1c, 0xb0, 0xbd, + 0x05, 0x4b, 0x00, 0x24, 0x9a, 0x79, 0x3c, 0x00, + 0x24, 0x18, 0x00, 0x00, 0x85, 0x68, 0x0d, 0x60, + 0x81, 0x60, 0x9a, 0x71, 0xf5, 0xe7, 0x00, 0x00, + 0x20, 0x57, 0x01, 0x00, 0x20, 0x10, 0x07, 0x00, + 0xb0, 0xb5, 0x00, 0x21, 0x10, 0x4a, 0x00, 0x23, + 0xd4, 0x68, 0x84, 0x42, 0x04, 0xd2, 0x01, 0x33, + 0x10, 0x32, 0x03, 0x2b, 0xf8, 0xd3, 0x01, 0xe0, + 0x03, 0x2b, 0x01, 0xd3, 0x04, 0x21, 0x0e, 0xe0, + 0x0a, 0x4c, 0xa3, 0x79, 0x90, 0x68, 0x00, 0x28, + 0x3c, 0x00, 0x60, 0x18, 0x00, 0x00, 0x02, 0xd1, + 0xa3, 0x71, 0x03, 0x21, 0x06, 0xe0, 0x05, 0x68, + 0x95, 0x60, 0xa3, 0x71, 0x00, 0x29, 0x01, 0xd1, + 0x04, 0xc0, 0xb0, 0xbd, 0x80, 0x20, 0xff, 0xf7, + 0x14, 0xfd, 0x00, 0x20, 0xb0, 0xbd, 0x20, 0x57, + 0x01, 0x00, 0x20, 0x10, 0x07, 0x00, 0xa0, 0x30, + 0x00, 0x8a, 0x40, 0x07, 0x40, 0x0f, 0x08, 0x28, + 0x0f, 0xd2, 0x01, 0xa3, 0x1b, 0x5c, 0x5b, 0x00, + 0x9f, 0x44, 0x3c, 0x00, 0x9c, 0x18, 0x00, 0x00, + 0x05, 0x03, 0x03, 0x05, 0x07, 0x07, 0x09, 0x09, + 0x01, 0x20, 0x70, 0x47, 0x00, 0x20, 0x70, 0x47, + 0x02, 0x20, 0x70, 0x47, 0x03, 0x20, 0x70, 0x47, + 0x04, 0x20, 0x70, 0x47, 0xb0, 0xb5, 0x10, 0x4d, + 0x68, 0x69, 0x00, 0x28, 0x07, 0xd0, 0x0e, 0x49, + 0x00, 0x22, 0x2c, 0x31, 0x03, 0xc9, 0x01, 0x43, + 0x03, 0x20, 0x06, 0xf0, 0xcf, 0xff, 0x0b, 0x4c, + 0x00, 0x22, 0x03, 0xcc, 0x3c, 0x00, 0xd8, 0x18, + 0x00, 0x00, 0x08, 0x3c, 0x01, 0x43, 0x03, 0x20, + 0x06, 0xf0, 0xaf, 0xff, 0x03, 0xcc, 0x08, 0x43, + 0x07, 0x49, 0x4a, 0x68, 0x02, 0x43, 0x4a, 0x60, + 0x8a, 0x68, 0x10, 0x43, 0x88, 0x60, 0x01, 0x20, + 0x68, 0x61, 0xb0, 0xbd, 0x00, 0x00, 0x64, 0x73, + 0x01, 0x00, 0xb0, 0x58, 0x01, 0x00, 0x10, 0x00, + 0x07, 0x00, 0xb0, 0xb5, 0x0c, 0x1c, 0x0f, 0xf0, + 0xa8, 0xfa, 0x05, 0x4d, 0xe8, 0x6a, 0x3c, 0x00, + 0x14, 0x19, 0x00, 0x00, 0x00, 0x28, 0x06, 0xd1, + 0x00, 0x2c, 0x04, 0xd0, 0x20, 0x1c, 0x0f, 0xf0, + 0xb7, 0xfd, 0x01, 0x20, 0x28, 0x70, 0xb0, 0xbd, + 0xf4, 0x6e, 0x01, 0x00, 0x05, 0x49, 0x80, 0xb5, + 0x88, 0x6a, 0x00, 0x28, 0x04, 0xda, 0x00, 0x20, + 0x88, 0x62, 0x01, 0x21, 0x0d, 0xf0, 0x42, 0xfd, + 0x80, 0xbd, 0x00, 0x00, 0xac, 0x7e, 0x01, 0x00, + 0xf8, 0xb5, 0x1e, 0x4d, 0x04, 0x1c, 0x00, 0x20, + 0x3c, 0x00, 0x50, 0x19, 0x00, 0x00, 0x68, 0x62, + 0xa8, 0x70, 0x1c, 0x48, 0x00, 0x78, 0xc0, 0x07, + 0x22, 0xd5, 0xb8, 0x20, 0x03, 0x59, 0x1a, 0x48, + 0x00, 0x78, 0x0e, 0x28, 0x09, 0xd1, 0x0a, 0x1c, + 0x80, 0x32, 0x06, 0xd0, 0x18, 0x4e, 0x0d, 0x20, + 0x32, 0x5c, 0x8a, 0x42, 0x01, 0xdd, 0x01, 0x38, + 0xfa, 0xd1, 0x59, 0x1e, 0x0b, 0x06, 0x1b, 0x0e, + 0xab, 0x70, 0xab, 0x62, 0x0e, 0x28, 0x0b, 0xd2, + 0x08, 0xe0, 0x3c, 0x00, 0x8c, 0x19, 0x00, 0x00, + 0x62, 0x18, 0xb0, 0x32, 0x12, 0x7b, 0x82, 0x42, + 0x02, 0xd8, 0x58, 0x1a, 0xa8, 0x62, 0x02, 0xe0, + 0x01, 0x39, 0x00, 0x29, 0xf4, 0xda, 0x0e, 0xf0, + 0x35, 0xf9, 0x00, 0x90, 0x00, 0xab, 0x18, 0x78, + 0x59, 0x78, 0x81, 0x42, 0x00, 0xd9, 0x58, 0x78, + 0xed, 0x30, 0xe8, 0x70, 0x01, 0x21, 0x20, 0x1c, + 0x0d, 0xf0, 0x02, 0xfd, 0xf8, 0xbd, 0x00, 0x00, + 0xac, 0x7e, 0x01, 0x00, 0x3c, 0x00, 0xc8, 0x19, + 0x00, 0x00, 0x1d, 0x75, 0x01, 0x00, 0x11, 0x67, + 0x01, 0x00, 0xc7, 0x52, 0x01, 0x00, 0x0e, 0x49, + 0x10, 0xb5, 0x08, 0x69, 0x8b, 0x68, 0xc2, 0x00, + 0xd4, 0x18, 0x62, 0x68, 0x00, 0x2a, 0x0f, 0xd1, + 0x01, 0x30, 0x08, 0x61, 0x07, 0x28, 0x01, 0xd1, + 0x00, 0x20, 0x08, 0x61, 0x20, 0x1c, 0x00, 0xf0, + 0x24, 0xf8, 0x05, 0x48, 0x21, 0x68, 0x54, 0x30, + 0x02, 0x6a, 0xfe, 0xf7, 0xec, 0xfc, 0x3c, 0x00, + 0x04, 0x1a, 0x00, 0x00, 0x10, 0xbd, 0x06, 0x21, + 0x06, 0x20, 0xff, 0xf7, 0x4b, 0xfc, 0x10, 0xbd, + 0x50, 0x6d, 0x01, 0x00, 0x08, 0x49, 0x09, 0x79, + 0xc9, 0x07, 0x08, 0x4a, 0x08, 0xd4, 0x00, 0xe0, + 0x08, 0x1c, 0xc1, 0x68, 0x00, 0x29, 0xfb, 0xd1, + 0x01, 0x89, 0x04, 0x31, 0x01, 0x81, 0x00, 0xe0, + 0x00, 0x20, 0xd0, 0x62, 0x70, 0x47, 0x00, 0x00, + 0x60, 0x80, 0x07, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x3c, 0x00, 0x40, 0x1a, 0x00, 0x00, 0x10, 0xb5, + 0x04, 0x1c, 0x19, 0x21, 0x89, 0x01, 0x00, 0x20, + 0xff, 0xf7, 0xc5, 0xfd, 0x01, 0x1c, 0x60, 0x60, + 0x20, 0x68, 0xff, 0xf7, 0xe0, 0xfc, 0x60, 0x68, + 0x21, 0x68, 0x08, 0x30, 0x08, 0x60, 0x10, 0xbd, + 0x00, 0x00, 0x0a, 0x28, 0x01, 0xda, 0x04, 0x20, + 0x04, 0xe0, 0x50, 0x28, 0x01, 0xda, 0x05, 0x20, + 0x00, 0xe0, 0x07, 0x20, 0x04, 0x4a, 0x11, 0x78, + 0x38, 0x23, 0x3c, 0x00, 0x7c, 0x1a, 0x00, 0x00, + 0xc0, 0x00, 0x18, 0x40, 0x99, 0x43, 0x08, 0x43, + 0x10, 0x70, 0x70, 0x47, 0x88, 0x00, 0x07, 0x00, + 0xb0, 0xb5, 0x05, 0x1c, 0x07, 0x48, 0x40, 0x68, + 0x08, 0xe0, 0x01, 0x69, 0xa9, 0x42, 0x04, 0xd1, + 0x44, 0x68, 0x05, 0xf0, 0xc7, 0xfd, 0x20, 0x1c, + 0x00, 0xe0, 0x40, 0x68, 0x00, 0x28, 0xf4, 0xd1, + 0xb0, 0xbd, 0x00, 0x00, 0x58, 0x75, 0x01, 0x00, + 0xf8, 0xb5, 0x00, 0x25, 0x3c, 0x00, 0xb8, 0x1a, + 0x00, 0x00, 0x06, 0xf0, 0x84, 0xfd, 0x11, 0x4f, + 0x04, 0x1c, 0xbe, 0x79, 0x20, 0x68, 0x00, 0x28, + 0x07, 0xd1, 0xa0, 0x88, 0x04, 0x30, 0xff, 0xf7, + 0xf2, 0xf8, 0x00, 0x28, 0x06, 0xd1, 0x01, 0x21, + 0x0f, 0xe0, 0x01, 0x68, 0x21, 0x60, 0xa1, 0x69, + 0x01, 0x39, 0xa1, 0x61, 0x10, 0xc0, 0x05, 0x1c, + 0x20, 0x69, 0x01, 0x30, 0x20, 0x61, 0x61, 0x69, + 0x40, 0x1a, 0xe1, 0x68, 0x88, 0x42, 0x3c, 0x00, + 0xf4, 0x1a, 0x00, 0x00, 0x03, 0xd9, 0x07, 0x21, + 0x8e, 0x20, 0xff, 0xf7, 0xd3, 0xfb, 0xbe, 0x71, + 0x28, 0x1c, 0xf8, 0xbd, 0x20, 0x10, 0x07, 0x00, + 0xb0, 0xb5, 0x09, 0xf0, 0xbb, 0xff, 0x2f, 0x4c, + 0x00, 0x28, 0x20, 0x74, 0x03, 0xd0, 0x01, 0x21, + 0x01, 0x20, 0x0a, 0xf0, 0x71, 0xfc, 0x2b, 0x4d, + 0x14, 0x35, 0x28, 0x68, 0x00, 0x28, 0x4d, 0xd0, + 0x01, 0x21, 0x0f, 0x20, 0x11, 0xf0, 0x82, 0xfd, + 0x3c, 0x00, 0x30, 0x1b, 0x00, 0x00, 0x28, 0x89, + 0x08, 0xf0, 0xfb, 0xff, 0x01, 0x1c, 0x01, 0x22, + 0x0f, 0x20, 0x11, 0xf0, 0x40, 0xfd, 0xe0, 0x78, + 0x01, 0x25, 0x02, 0x28, 0x36, 0xd1, 0x0a, 0xf0, + 0xc6, 0xf8, 0x00, 0x28, 0x0a, 0xd0, 0x0b, 0xf0, + 0x92, 0xfb, 0x1e, 0x49, 0x09, 0x68, 0x40, 0x18, + 0x11, 0xf0, 0x5f, 0xf8, 0x00, 0x28, 0x01, 0xd1, + 0x02, 0x20, 0x2f, 0xe0, 0xe0, 0x78, 0x02, 0x28, + 0x24, 0xd1, 0x3c, 0x00, 0x6c, 0x1b, 0x00, 0x00, + 0x60, 0x70, 0x25, 0x70, 0x60, 0x68, 0x01, 0x28, + 0x1c, 0xd0, 0x15, 0x48, 0x10, 0x38, 0x81, 0x7b, + 0x00, 0x29, 0x04, 0xd1, 0x85, 0x73, 0x0f, 0x20, + 0x13, 0x49, 0x10, 0xf0, 0x01, 0xfc, 0x08, 0xf0, + 0x4f, 0xfe, 0x00, 0x28, 0x07, 0xd0, 0x0e, 0x48, + 0x01, 0x21, 0x98, 0x38, 0x00, 0x69, 0x01, 0xf0, + 0xb7, 0xfd, 0x00, 0x28, 0x05, 0xd0, 0x01, 0x20, + 0x0e, 0xf0, 0x0c, 0xfd, 0x3c, 0x00, 0xa8, 0x1b, + 0x00, 0x00, 0x01, 0x20, 0x0e, 0xf0, 0x1d, 0xfc, + 0xb0, 0xbd, 0x05, 0xf0, 0xdc, 0xfe, 0xb0, 0xbd, + 0xe0, 0x78, 0x00, 0x28, 0x01, 0xd1, 0x25, 0x70, + 0xf7, 0xe7, 0x03, 0x20, 0x00, 0xe0, 0x04, 0x20, + 0x0d, 0xf0, 0x8d, 0xfa, 0xb0, 0xbd, 0x84, 0x66, + 0x01, 0x00, 0x6c, 0x57, 0x01, 0x00, 0xe9, 0x03, + 0x01, 0x00, 0x70, 0xb5, 0x04, 0x1c, 0x00, 0x21, + 0x00, 0x20, 0x0a, 0x4d, 0x00, 0xe0, 0x3c, 0x00, + 0xe4, 0x1b, 0x00, 0x00, 0x01, 0x31, 0xcb, 0x00, + 0x5a, 0x19, 0x16, 0x79, 0x01, 0x2e, 0x02, 0xd0, + 0x52, 0x79, 0xa2, 0x42, 0x02, 0xd0, 0x0b, 0x29, + 0xf4, 0xd3, 0x70, 0xbd, 0x0b, 0x29, 0xfc, 0xd2, + 0xc8, 0x00, 0x01, 0x21, 0x5a, 0x19, 0x28, 0x58, + 0x11, 0x71, 0x70, 0xbd, 0x38, 0x58, 0x01, 0x00, + 0x05, 0x48, 0x80, 0xb5, 0x00, 0x7f, 0x24, 0x23, + 0x04, 0x49, 0x58, 0x43, 0x40, 0x18, 0x00, 0x6a, + 0x3c, 0x00, 0x20, 0x1c, 0x00, 0x00, 0xfe, 0xf7, + 0xda, 0xfb, 0x80, 0xbd, 0x00, 0x00, 0xd4, 0x79, + 0x01, 0x00, 0x94, 0x46, 0x01, 0x00, 0x80, 0xb5, + 0x04, 0xf0, 0x37, 0xff, 0x00, 0x20, 0x11, 0xf0, + 0x84, 0xfc, 0x00, 0x20, 0x80, 0xbd, 0xb0, 0xb5, + 0x05, 0x4c, 0x05, 0x1c, 0x20, 0x6b, 0xe1, 0x6a, + 0x02, 0xf0, 0xe3, 0xfd, 0x29, 0x1c, 0xa0, 0x6a, + 0x02, 0xf0, 0x11, 0xfb, 0xb0, 0xbd, 0xa4, 0x6c, + 0x01, 0x00, 0x3c, 0x00, 0x5c, 0x1c, 0x00, 0x00, + 0xb0, 0xb5, 0x03, 0x1c, 0x08, 0x1c, 0x14, 0x1c, + 0x00, 0x2b, 0x0c, 0x4d, 0x09, 0xd0, 0x69, 0x69, + 0x89, 0x00, 0x01, 0x31, 0x0a, 0x04, 0x12, 0x0c, + 0x22, 0x80, 0x29, 0x1c, 0xfe, 0xf7, 0x3e, 0xfc, + 0x0a, 0xe0, 0x01, 0x1c, 0x28, 0x1c, 0x22, 0x88, + 0xfe, 0xf7, 0x38, 0xfc, 0x20, 0x88, 0x01, 0x28, + 0x02, 0xd9, 0x80, 0x08, 0x01, 0x38, 0x68, 0x61, + 0x01, 0x20, 0xb0, 0xbd, 0x3c, 0x00, 0x98, 0x1c, + 0x00, 0x00, 0x20, 0x6e, 0x01, 0x00, 0xf1, 0xb5, + 0x00, 0x98, 0x00, 0x26, 0xc1, 0x68, 0x08, 0x68, + 0x09, 0x89, 0x1c, 0x29, 0x34, 0xd3, 0xc1, 0x88, + 0xff, 0x23, 0x01, 0x33, 0x99, 0x42, 0x2f, 0xd1, + 0x01, 0x88, 0xc9, 0x1a, 0x2c, 0xd1, 0x41, 0x88, + 0x08, 0x29, 0x29, 0xd1, 0x01, 0x79, 0x06, 0x29, + 0x26, 0xd1, 0x41, 0x79, 0x04, 0x29, 0x23, 0xd1, + 0x00, 0x25, 0x00, 0x24, 0x07, 0x1c, 0x3c, 0x00, + 0xd4, 0x1c, 0x00, 0x00, 0x18, 0x37, 0x0b, 0xe0, + 0xa0, 0x00, 0x41, 0x18, 0x04, 0x31, 0x04, 0x22, + 0x38, 0x1c, 0xfe, 0xf7, 0x8b, 0xfb, 0x00, 0x28, + 0x01, 0xd1, 0x01, 0x25, 0x04, 0xe0, 0x01, 0x34, + 0x0a, 0x49, 0x48, 0x69, 0xa0, 0x42, 0xef, 0xd8, + 0x08, 0x49, 0x08, 0x78, 0x00, 0x28, 0x0a, 0xd0, + 0x01, 0x28, 0x01, 0xd0, 0x02, 0x28, 0x06, 0xd1, + 0x00, 0x2d, 0x04, 0xd1, 0x00, 0x98, 0xc0, 0x68, + 0x3c, 0x00, 0x10, 0x1d, 0x00, 0x00, 0xff, 0xf7, + 0x42, 0xfc, 0x01, 0x26, 0x30, 0x1c, 0xf8, 0xbd, + 0x00, 0x00, 0x20, 0x6e, 0x01, 0x00, 0x01, 0x48, + 0x40, 0x68, 0x70, 0x47, 0x00, 0x00, 0x20, 0x6e, + 0x01, 0x00, 0x02, 0x49, 0x48, 0x60, 0x01, 0x20, + 0x48, 0x61, 0x70, 0x47, 0x00, 0x00, 0x20, 0x6e, + 0x01, 0x00, 0x70, 0xb5, 0x04, 0x1c, 0x01, 0x26, + 0x03, 0xf0, 0xef, 0xfa, 0x25, 0x1c, 0x10, 0x35, + 0x00, 0x28, 0x3c, 0x00, 0x4c, 0x1d, 0x00, 0x00, + 0x04, 0xd0, 0x00, 0x20, 0x20, 0x77, 0x03, 0xf0, + 0xf1, 0xfb, 0x07, 0xe0, 0x03, 0xf0, 0x38, 0xfd, + 0x00, 0x28, 0x09, 0xd0, 0x01, 0x20, 0x20, 0x77, + 0x03, 0xf0, 0xce, 0xfc, 0x01, 0x1c, 0x06, 0x22, + 0x28, 0x1c, 0xfe, 0xf7, 0xc3, 0xfb, 0x02, 0xe0, + 0x02, 0x20, 0x20, 0x77, 0x00, 0x26, 0x30, 0x1c, + 0x70, 0xbd, 0x00, 0x00, 0x03, 0x48, 0x80, 0x7a, + 0xc0, 0x07, 0x03, 0x49, 0x3c, 0x00, 0x88, 0x1d, + 0x00, 0x00, 0xc0, 0x0f, 0x88, 0x62, 0x70, 0x47, + 0x00, 0x00, 0x40, 0x90, 0x07, 0x00, 0xa4, 0x6c, + 0x01, 0x00, 0x01, 0x49, 0x01, 0x20, 0x88, 0x62, + 0x70, 0x47, 0xa4, 0x6c, 0x01, 0x00, 0x06, 0x48, + 0x80, 0x7a, 0xc1, 0x07, 0x06, 0x4a, 0xc9, 0x0f, + 0x91, 0x62, 0x20, 0x21, 0x80, 0x07, 0x00, 0xd4, + 0x00, 0x21, 0xa0, 0x32, 0x11, 0x70, 0x70, 0x47, + 0x00, 0x00, 0x40, 0x90, 0x07, 0x00, 0x3c, 0x00, + 0xc4, 0x1d, 0x00, 0x00, 0xa4, 0x6c, 0x01, 0x00, + 0x07, 0x4a, 0x12, 0x68, 0x07, 0x4b, 0x9b, 0x69, + 0x1a, 0x40, 0x01, 0xd0, 0x01, 0x22, 0x00, 0xe0, + 0x00, 0x22, 0x0a, 0x60, 0x01, 0x21, 0x00, 0x2a, + 0x00, 0xd0, 0x00, 0x21, 0x01, 0x60, 0x70, 0x47, + 0x10, 0x00, 0x07, 0x00, 0xa4, 0x6c, 0x01, 0x00, + 0x01, 0x22, 0x02, 0x60, 0x0a, 0x60, 0x70, 0x47, + 0xb0, 0xb5, 0x0d, 0x1c, 0x01, 0x1c, 0x58, 0x31, + 0x3c, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x04, 0x1c, + 0x06, 0x22, 0x28, 0x1d, 0xfe, 0xf7, 0x77, 0xfb, + 0x21, 0x1c, 0x5e, 0x31, 0x06, 0x22, 0x28, 0x1c, + 0x0a, 0x30, 0xfe, 0xf7, 0x70, 0xfb, 0x21, 0x1c, + 0x64, 0x31, 0x06, 0x22, 0x28, 0x1c, 0x10, 0x30, + 0xfe, 0xf7, 0x69, 0xfb, 0xb0, 0xbd, 0xfe, 0xb5, + 0x00, 0x25, 0x1d, 0x72, 0x17, 0x1c, 0x0e, 0x1c, + 0xb2, 0x6d, 0x00, 0x21, 0x92, 0x19, 0x50, 0x32, + 0xd2, 0x7a, 0x3c, 0x00, 0x3c, 0x1e, 0x00, 0x00, + 0x1c, 0x1c, 0x5a, 0x72, 0x00, 0x78, 0x32, 0x1c, + 0x80, 0x32, 0xc0, 0x07, 0xc0, 0x17, 0x01, 0x30, + 0x01, 0x90, 0x08, 0x98, 0x02, 0x92, 0x00, 0x28, + 0x01, 0xd1, 0x30, 0x7f, 0x2b, 0xe0, 0x37, 0x48, + 0x00, 0x68, 0x00, 0x28, 0x00, 0xdd, 0x01, 0x1c, + 0x01, 0x98, 0x00, 0x28, 0x02, 0xd0, 0x08, 0x98, + 0x01, 0x28, 0x10, 0xd1, 0x02, 0x9a, 0x90, 0x6b, + 0x00, 0x28, 0x06, 0xd0, 0x3c, 0x00, 0x78, 0x1e, + 0x00, 0x00, 0x88, 0x42, 0x01, 0xd9, 0x45, 0x1a, + 0x01, 0x3d, 0x70, 0x19, 0xb0, 0x30, 0x03, 0xe0, + 0xb5, 0x6d, 0x01, 0x3d, 0x70, 0x19, 0x50, 0x30, + 0x00, 0x7b, 0x0f, 0xe0, 0x02, 0x9a, 0x10, 0x6a, + 0x00, 0x28, 0x07, 0xd0, 0x88, 0x42, 0x01, 0xd9, + 0x45, 0x1a, 0x01, 0x3d, 0x70, 0x19, 0xa0, 0x30, + 0x00, 0x79, 0x03, 0xe0, 0xbd, 0x69, 0x01, 0x3d, + 0x78, 0x19, 0x00, 0x7f, 0xa0, 0x72, 0x3c, 0x00, + 0xb4, 0x1e, 0x00, 0x00, 0x0e, 0xf0, 0x0c, 0xf8, + 0x0e, 0x28, 0x11, 0xd1, 0xa0, 0x7a, 0x08, 0xf0, + 0x67, 0xff, 0x00, 0x28, 0x0c, 0xd0, 0x78, 0x68, + 0x00, 0x28, 0x05, 0xd1, 0x1b, 0x48, 0x00, 0x25, + 0x00, 0x78, 0x08, 0xf0, 0x4b, 0xff, 0x02, 0xe0, + 0x45, 0x1e, 0x78, 0x19, 0x00, 0x7a, 0xa0, 0x72, + 0x02, 0x9a, 0x50, 0x69, 0x00, 0x28, 0x17, 0xd0, + 0x08, 0x98, 0x01, 0x28, 0x14, 0xd0, 0xa0, 0x7a, + 0x3c, 0x00, 0xf0, 0x1e, 0x00, 0x00, 0x08, 0xf0, + 0x4e, 0xff, 0x00, 0x28, 0x0f, 0xd0, 0x01, 0x98, + 0x00, 0x28, 0x07, 0xd0, 0x02, 0x20, 0x20, 0x72, + 0x70, 0x6c, 0x80, 0x19, 0x40, 0x30, 0xc0, 0x79, + 0x60, 0x72, 0x04, 0xe0, 0x7d, 0x68, 0x01, 0x3d, + 0x78, 0x19, 0x00, 0x7a, 0xa0, 0x72, 0x02, 0x9a, + 0xa0, 0x7a, 0x91, 0x69, 0x08, 0xf0, 0x51, 0xff, + 0x20, 0x60, 0x02, 0x9a, 0x60, 0x7a, 0x91, 0x69, + 0x08, 0xf0, 0x3c, 0x00, 0x2c, 0x1f, 0x00, 0x00, + 0x4b, 0xff, 0x60, 0x60, 0xa0, 0x7a, 0xe0, 0x72, + 0x25, 0x73, 0xfe, 0xbd, 0xd4, 0x7e, 0x01, 0x00, + 0x90, 0x57, 0x01, 0x00, 0x00, 0x06, 0x00, 0x0e, + 0x00, 0x2a, 0x8c, 0xb5, 0x01, 0xd0, 0x8a, 0x22, + 0x00, 0xe0, 0x88, 0x22, 0x00, 0xab, 0x1a, 0x80, + 0x0c, 0xf0, 0xc2, 0xf8, 0x01, 0x90, 0x68, 0x46, + 0x0b, 0xf0, 0xbc, 0xfa, 0x8c, 0xbd, 0x00, 0x00, + 0x01, 0x1c, 0x08, 0x48, 0x3c, 0x00, 0x68, 0x1f, + 0x00, 0x00, 0x80, 0xb5, 0x00, 0x68, 0x00, 0x28, + 0x09, 0xd0, 0x49, 0x68, 0x02, 0x20, 0x00, 0x29, + 0x00, 0xd1, 0x01, 0x20, 0x01, 0x06, 0x09, 0x0e, + 0x00, 0x20, 0x06, 0xf0, 0xd8, 0xff, 0x80, 0xbd, + 0x00, 0x00, 0x20, 0x67, 0x01, 0x00, 0x1c, 0xb5, + 0x01, 0x90, 0x04, 0x1c, 0x44, 0x30, 0x01, 0xaa, + 0x69, 0x46, 0x11, 0xf0, 0xb8, 0xfd, 0x00, 0x28, + 0x0b, 0xd0, 0xa0, 0x69, 0x00, 0x21, 0x3c, 0x00, + 0xa4, 0x1f, 0x00, 0x00, 0xc2, 0x07, 0xd2, 0x0f, + 0x02, 0x20, 0xff, 0xf7, 0xc9, 0xff, 0x00, 0x21, + 0x20, 0x1c, 0x0f, 0xf0, 0xd9, 0xfe, 0x1c, 0xbd, + 0x04, 0x21, 0x98, 0x20, 0xff, 0xf7, 0x72, 0xf9, + 0xf9, 0xe7, 0x00, 0x00, 0x8c, 0xb5, 0x00, 0xab, + 0x84, 0x21, 0x19, 0x80, 0x05, 0x4b, 0x02, 0x1c, + 0x18, 0x1c, 0x99, 0x8a, 0x0c, 0xf0, 0x8e, 0xf8, + 0x01, 0x90, 0x68, 0x46, 0x0b, 0xf0, 0x7c, 0xfa, + 0x3c, 0x00, 0xe0, 0x1f, 0x00, 0x00, 0x8c, 0xbd, + 0x00, 0x00, 0x70, 0x7c, 0x01, 0x00, 0x70, 0x47, + 0x00, 0x00, 0x06, 0x49, 0x80, 0xb5, 0xc9, 0x68, + 0x14, 0x23, 0x40, 0x31, 0x89, 0x7a, 0x04, 0x4a, + 0x59, 0x43, 0x89, 0x18, 0x80, 0x00, 0x08, 0x58, + 0xfe, 0xf7, 0xe9, 0xf9, 0x80, 0xbd, 0x70, 0x7c, + 0x01, 0x00, 0x54, 0x47, 0x01, 0x00, 0x80, 0xb5, + 0x00, 0x20, 0xff, 0xf7, 0xd6, 0xff, 0x80, 0xbd, + 0x00, 0x00, 0x3c, 0x00, 0x1c, 0x20, 0x00, 0x00, + 0x80, 0xb5, 0x12, 0x48, 0x11, 0x49, 0x80, 0x8a, + 0x0a, 0x8b, 0x00, 0x21, 0x00, 0x28, 0xc2, 0xb0, + 0x0c, 0xd1, 0x01, 0x2a, 0x05, 0xd0, 0x02, 0x2a, + 0x15, 0xd0, 0x00, 0xab, 0x5a, 0x80, 0x0e, 0x22, + 0x07, 0xe0, 0x02, 0x22, 0x00, 0xab, 0x5a, 0x80, + 0x99, 0x80, 0x04, 0xe0, 0x00, 0xab, 0x5a, 0x80, + 0x0d, 0x22, 0x00, 0xab, 0x9a, 0x80, 0x00, 0xab, + 0x18, 0x80, 0xff, 0x20, 0x3c, 0x00, 0x58, 0x20, + 0x00, 0x00, 0x98, 0x71, 0xd9, 0x71, 0x68, 0x46, + 0x00, 0xf0, 0xd1, 0xf9, 0x42, 0xb0, 0x80, 0xbd, + 0x00, 0x00, 0x70, 0x7c, 0x01, 0x00, 0x10, 0xb5, + 0x09, 0xf0, 0x5f, 0xfc, 0x00, 0x20, 0x05, 0xf0, + 0x2a, 0xf9, 0x03, 0x4c, 0xe0, 0x8a, 0x05, 0xf0, + 0x36, 0xf9, 0x20, 0x1c, 0x0f, 0xf0, 0xb3, 0xfe, + 0x10, 0xbd, 0x70, 0x7c, 0x01, 0x00, 0x1c, 0xb5, + 0x09, 0xf0, 0x4f, 0xfc, 0x07, 0x20, 0x3c, 0x00, + 0x94, 0x20, 0x00, 0x00, 0x00, 0xab, 0x07, 0x4c, + 0x18, 0x80, 0xe1, 0x8a, 0x20, 0x1c, 0x0c, 0xf0, + 0x0b, 0xf8, 0x01, 0x90, 0x68, 0x46, 0x0b, 0xf0, + 0x17, 0xfa, 0x20, 0x1c, 0x0f, 0xf0, 0x9e, 0xfe, + 0x1c, 0xbd, 0x00, 0x00, 0x70, 0x7c, 0x01, 0x00, + 0x80, 0xb5, 0x02, 0x21, 0x98, 0x20, 0xff, 0xf7, + 0xf1, 0xf8, 0x80, 0xbd, 0x10, 0xb5, 0x15, 0x4c, + 0xc2, 0xb0, 0xa0, 0x8a, 0x00, 0x28, 0x03, 0xd0, + 0x3c, 0x00, 0xd0, 0x20, 0x00, 0x00, 0x01, 0x28, + 0x1e, 0xd1, 0x02, 0x20, 0x00, 0xe0, 0x01, 0x20, + 0xe1, 0x68, 0x40, 0x31, 0x88, 0x72, 0x20, 0x69, + 0x08, 0xf0, 0x23, 0xfd, 0x02, 0x1c, 0x0c, 0x48, + 0x18, 0x38, 0x80, 0x88, 0xe1, 0x68, 0x0f, 0xf0, + 0xa4, 0xfe, 0xa0, 0x8a, 0x00, 0xab, 0x18, 0x80, + 0x01, 0x20, 0x58, 0x80, 0x00, 0x20, 0x98, 0x80, + 0xff, 0x21, 0x99, 0x71, 0xd8, 0x71, 0x68, 0x46, + 0x00, 0xf0, 0x3c, 0x00, 0x0c, 0x21, 0x00, 0x00, + 0x7b, 0xf9, 0x42, 0xb0, 0x10, 0xbd, 0x03, 0x21, + 0x98, 0x20, 0xff, 0xf7, 0xc5, 0xf8, 0xf8, 0xe7, + 0x70, 0x7c, 0x01, 0x00, 0x70, 0x47, 0x00, 0x00, + 0x80, 0xb5, 0x03, 0x48, 0x0f, 0xf0, 0x60, 0xfe, + 0x00, 0x20, 0x05, 0xf0, 0xcd, 0xf8, 0x80, 0xbd, + 0x70, 0x7c, 0x01, 0x00, 0x80, 0xb5, 0x02, 0x48, + 0x0f, 0xf0, 0x56, 0xfe, 0x80, 0xbd, 0x00, 0x00, + 0x70, 0x7c, 0x01, 0x00, 0x3c, 0x00, 0x48, 0x21, + 0x00, 0x00, 0x80, 0xb5, 0x02, 0x21, 0x98, 0x20, + 0xff, 0xf7, 0xa9, 0xf8, 0x80, 0xbd, 0x80, 0xb5, + 0x03, 0x20, 0xff, 0xf7, 0x34, 0xff, 0x80, 0xbd, + 0x00, 0x00, 0xf0, 0xb5, 0x21, 0x4e, 0x00, 0x27, + 0xb1, 0x8a, 0x30, 0x1c, 0x00, 0x25, 0x04, 0x24, + 0x00, 0x29, 0x00, 0x8b, 0xc3, 0xb0, 0x1e, 0xd1, + 0x01, 0x28, 0x07, 0xd0, 0x31, 0x1c, 0x49, 0x8b, + 0x02, 0x28, 0x12, 0xd1, 0x00, 0x29, 0x3c, 0x00, + 0x84, 0x21, 0x00, 0x00, 0x07, 0xd1, 0x00, 0x24, + 0x05, 0xe0, 0x00, 0x24, 0x01, 0x25, 0x02, 0x20, + 0x00, 0xab, 0xd8, 0x80, 0x1f, 0x81, 0x0f, 0xf0, + 0x7f, 0xff, 0x00, 0x2c, 0x10, 0xd1, 0xf1, 0x68, + 0x05, 0x20, 0x40, 0x31, 0x88, 0x72, 0x0e, 0xe0, + 0x00, 0x29, 0x1a, 0xd1, 0x00, 0xab, 0xd8, 0x80, + 0x0e, 0x20, 0x02, 0xe0, 0x00, 0xab, 0xd8, 0x80, + 0x0d, 0x20, 0x00, 0xab, 0x18, 0x81, 0x07, 0xe0, + 0x3c, 0x00, 0xc0, 0x21, 0x00, 0x00, 0x30, 0x1c, + 0x0f, 0xf0, 0x13, 0xfe, 0x20, 0x1c, 0xff, 0xf7, + 0xfc, 0xfe, 0x00, 0x2d, 0x08, 0xd0, 0xb0, 0x8a, + 0x00, 0xab, 0x98, 0x80, 0xff, 0x20, 0x98, 0x72, + 0xdf, 0x72, 0x01, 0xa8, 0x00, 0xf0, 0x11, 0xf9, + 0x43, 0xb0, 0xf0, 0xbd, 0x00, 0x00, 0x70, 0x7c, + 0x01, 0x00, 0x10, 0xb5, 0x00, 0x20, 0x05, 0xf0, + 0x6c, 0xf8, 0x04, 0x4c, 0xe0, 0x8a, 0x05, 0xf0, + 0x78, 0xf8, 0x3c, 0x00, 0xfc, 0x21, 0x00, 0x00, + 0x0f, 0xf0, 0x4c, 0xff, 0x20, 0x1c, 0x0f, 0xf0, + 0xf3, 0xfd, 0x10, 0xbd, 0x70, 0x7c, 0x01, 0x00, + 0x80, 0xb5, 0x04, 0x20, 0xff, 0xf7, 0xd8, 0xfe, + 0x01, 0x48, 0x0f, 0xf0, 0xe9, 0xfd, 0x80, 0xbd, + 0x70, 0x7c, 0x01, 0x00, 0x80, 0xb5, 0x02, 0x20, + 0xff, 0xf7, 0xce, 0xfe, 0x01, 0x20, 0x05, 0xf0, + 0x5f, 0xf8, 0x02, 0x48, 0x0f, 0xf0, 0xdc, 0xfd, + 0x80, 0xbd, 0x00, 0x00, 0x3c, 0x00, 0x38, 0x22, + 0x00, 0x00, 0x70, 0x7c, 0x01, 0x00, 0x80, 0xb5, + 0x03, 0x20, 0xff, 0xf7, 0xc0, 0xfe, 0x80, 0xbd, + 0x00, 0x00, 0xb0, 0xb5, 0x1d, 0x4d, 0xc2, 0xb0, + 0x28, 0x8b, 0x00, 0xab, 0xff, 0x21, 0x58, 0x80, + 0x99, 0x71, 0x00, 0x21, 0xd9, 0x71, 0xaa, 0x8a, + 0x00, 0x24, 0x01, 0x2a, 0x18, 0xd1, 0x2a, 0x1c, + 0x52, 0x8b, 0x02, 0x28, 0x0f, 0xd1, 0x00, 0x2a, + 0x16, 0xd1, 0x03, 0x20, 0x58, 0x80, 0x3c, 0x00, + 0x74, 0x22, 0x00, 0x00, 0x99, 0x80, 0x2c, 0x1c, + 0xff, 0x22, 0x98, 0x1d, 0xe9, 0x69, 0xfe, 0xf7, + 0x3b, 0xf9, 0xe1, 0x68, 0x04, 0x20, 0x40, 0x31, + 0x88, 0x72, 0x10, 0xe0, 0x00, 0x2a, 0x06, 0xd1, + 0x01, 0x24, 0x0e, 0x20, 0x01, 0xe0, 0x01, 0x24, + 0x0d, 0x20, 0x00, 0xab, 0x98, 0x80, 0x28, 0x1c, + 0x0f, 0xf0, 0xa4, 0xfd, 0x04, 0x20, 0xff, 0xf7, + 0x8d, 0xfe, 0x00, 0x2c, 0x05, 0xd0, 0xa8, 0x8a, + 0x3c, 0x00, 0xb0, 0x22, 0x00, 0x00, 0x00, 0xab, + 0x18, 0x80, 0x68, 0x46, 0x00, 0xf0, 0xa5, 0xf8, + 0x42, 0xb0, 0xb0, 0xbd, 0x00, 0x00, 0x70, 0x7c, + 0x01, 0x00, 0x10, 0xb5, 0x00, 0x20, 0x05, 0xf0, + 0x00, 0xf8, 0x03, 0x4c, 0xe0, 0x8a, 0x05, 0xf0, + 0x0c, 0xf8, 0x20, 0x1c, 0x0f, 0xf0, 0x89, 0xfd, + 0x10, 0xbd, 0x70, 0x7c, 0x01, 0x00, 0x80, 0xb5, + 0x04, 0x20, 0xff, 0xf7, 0x6e, 0xfe, 0x01, 0x48, + 0x0f, 0xf0, 0x3c, 0x00, 0xec, 0x22, 0x00, 0x00, + 0x7f, 0xfd, 0x80, 0xbd, 0x70, 0x7c, 0x01, 0x00, + 0x80, 0xb5, 0x02, 0x20, 0xff, 0xf7, 0x64, 0xfe, + 0x01, 0x20, 0x04, 0xf0, 0xf5, 0xff, 0x02, 0x48, + 0x0f, 0xf0, 0x72, 0xfd, 0x80, 0xbd, 0x00, 0x00, + 0x70, 0x7c, 0x01, 0x00, 0x80, 0xb5, 0x03, 0x20, + 0xff, 0xf7, 0x56, 0xfe, 0x80, 0xbd, 0x00, 0x00, + 0xb0, 0xb5, 0x19, 0x4d, 0x04, 0x24, 0xa9, 0x8a, + 0x28, 0x1c, 0x02, 0x8b, 0x3c, 0x00, 0x28, 0x23, + 0x00, 0x00, 0xc2, 0xb0, 0x01, 0x29, 0x14, 0xd1, + 0x40, 0x8b, 0x04, 0x2a, 0x0b, 0xd1, 0x00, 0x28, + 0x00, 0xd1, 0x00, 0x24, 0x0f, 0xf0, 0xad, 0xfe, + 0x00, 0x2c, 0x19, 0xd1, 0xe9, 0x68, 0x05, 0x20, + 0x40, 0x31, 0x88, 0x72, 0x17, 0xe0, 0x00, 0x28, + 0x10, 0xd1, 0x00, 0xab, 0x5a, 0x80, 0x0e, 0x20, + 0x02, 0xe0, 0x00, 0xab, 0x5a, 0x80, 0x0d, 0x20, + 0x00, 0xab, 0x98, 0x80, 0x19, 0x80, 0x3c, 0x00, + 0x64, 0x23, 0x00, 0x00, 0xff, 0x20, 0x98, 0x71, + 0x00, 0x20, 0xd8, 0x71, 0x68, 0x46, 0x00, 0xf0, + 0x49, 0xf8, 0x42, 0xb0, 0xb0, 0xbd, 0x28, 0x1c, + 0x0f, 0xf0, 0x38, 0xfd, 0x20, 0x1c, 0xff, 0xf7, + 0x21, 0xfe, 0xf6, 0xe7, 0x70, 0x7c, 0x01, 0x00, + 0x10, 0xb5, 0x00, 0x20, 0x04, 0xf0, 0x9e, 0xff, + 0x03, 0x4c, 0xe0, 0x8a, 0x04, 0xf0, 0xaa, 0xff, + 0x20, 0x1c, 0x0f, 0xf0, 0x27, 0xfd, 0x10, 0xbd, + 0x3c, 0x00, 0xa0, 0x23, 0x00, 0x00, 0x70, 0x7c, + 0x01, 0x00, 0x80, 0xb5, 0x04, 0x20, 0xff, 0xf7, + 0x0c, 0xfe, 0x01, 0x48, 0x0f, 0xf0, 0x1d, 0xfd, + 0x80, 0xbd, 0x70, 0x7c, 0x01, 0x00, 0x80, 0xb5, + 0x02, 0x20, 0xff, 0xf7, 0x02, 0xfe, 0x01, 0x20, + 0x04, 0xf0, 0x93, 0xff, 0x02, 0x48, 0x0f, 0xf0, + 0x10, 0xfd, 0x80, 0xbd, 0x00, 0x00, 0x70, 0x7c, + 0x01, 0x00, 0xb0, 0xb5, 0x0a, 0x4d, 0x01, 0x1c, + 0x44, 0x31, 0x3c, 0x00, 0xdc, 0x23, 0x00, 0x00, + 0x04, 0x1c, 0x06, 0x22, 0x28, 0x1c, 0xfe, 0xf7, + 0x89, 0xf8, 0xec, 0x60, 0x20, 0x69, 0x03, 0xf0, + 0x97, 0xf8, 0x01, 0x1c, 0x06, 0x22, 0xa8, 0x18, + 0xfe, 0xf7, 0x80, 0xf8, 0x04, 0x20, 0xff, 0xf7, + 0xf7, 0xfd, 0xb0, 0xbd, 0x70, 0x7c, 0x01, 0x00, + 0x90, 0xb5, 0x04, 0x1c, 0x80, 0x88, 0x93, 0xb0, + 0x00, 0x28, 0x06, 0xd0, 0x15, 0x49, 0x06, 0x22, + 0x48, 0x80, 0x18, 0x31, 0x3c, 0x00, 0x18, 0x24, + 0x00, 0x00, 0x88, 0x1f, 0xfe, 0xf7, 0x6d, 0xf8, + 0x68, 0x46, 0x0c, 0xf0, 0x14, 0xf8, 0x20, 0x88, + 0x01, 0x28, 0x08, 0xd1, 0x60, 0x88, 0x03, 0x28, + 0x05, 0xd1, 0xa0, 0x88, 0x00, 0x28, 0x02, 0xd1, + 0x06, 0x20, 0x0c, 0xa9, 0x08, 0x70, 0xa0, 0x79, + 0x06, 0x21, 0xff, 0x28, 0x04, 0xd0, 0xe0, 0x79, + 0x00, 0x28, 0x01, 0xd0, 0x01, 0x1c, 0x08, 0x31, + 0x0b, 0x20, 0x08, 0xaa, 0x50, 0x72, 0x3c, 0x00, + 0x54, 0x24, 0x00, 0x00, 0x20, 0x1c, 0x08, 0xf0, + 0x3b, 0xff, 0x03, 0x90, 0x68, 0x46, 0x0b, 0xf0, + 0x31, 0xf8, 0x13, 0xb0, 0x90, 0xbd, 0x00, 0x00, + 0x58, 0x7c, 0x01, 0x00, 0x07, 0x4b, 0x1a, 0x78, + 0x82, 0x42, 0x01, 0xd0, 0x00, 0x29, 0x07, 0xd0, + 0xff, 0x20, 0x18, 0x70, 0x04, 0x48, 0x01, 0x88, + 0x01, 0x22, 0x52, 0x03, 0x91, 0x43, 0x01, 0x80, + 0x70, 0x47, 0x00, 0x00, 0x4c, 0x7b, 0x01, 0x00, + 0x3c, 0x00, 0x90, 0x24, 0x00, 0x00, 0x32, 0x80, + 0x07, 0x00, 0x10, 0xb5, 0x04, 0x1c, 0x0c, 0x23, + 0x07, 0x49, 0x58, 0x43, 0x40, 0x18, 0x00, 0x79, + 0x0a, 0xf0, 0x4f, 0xf9, 0x01, 0x20, 0x03, 0x49, + 0xa0, 0x40, 0x08, 0x39, 0x0a, 0x78, 0x10, 0x43, + 0x08, 0x70, 0x10, 0xbd, 0x00, 0x00, 0x74, 0x7a, + 0x01, 0x00, 0x03, 0x4a, 0x00, 0x21, 0x11, 0x54, + 0x80, 0x00, 0x30, 0x32, 0x10, 0x58, 0x01, 0x70, + 0x70, 0x47, 0x3c, 0x00, 0xcc, 0x24, 0x00, 0x00, + 0xe0, 0x7a, 0x01, 0x00, 0x10, 0xb5, 0x04, 0x1c, + 0x05, 0x28, 0x01, 0xd3, 0xfe, 0xf7, 0x12, 0xff, + 0x20, 0x1c, 0xff, 0xf7, 0xed, 0xff, 0x00, 0x21, + 0x20, 0x1c, 0x0e, 0xf0, 0x89, 0xfb, 0x10, 0xbd, + 0x05, 0x49, 0x80, 0xb5, 0x88, 0x60, 0x08, 0x7f, + 0x24, 0x23, 0x04, 0x49, 0x58, 0x43, 0x08, 0x58, + 0xfd, 0xf7, 0x6c, 0xff, 0x80, 0xbd, 0x00, 0x00, + 0xd4, 0x79, 0x01, 0x00, 0x3c, 0x00, 0x08, 0x25, + 0x00, 0x00, 0x94, 0x46, 0x01, 0x00, 0x80, 0xb5, + 0x01, 0x21, 0x91, 0x20, 0xfe, 0xf7, 0xc7, 0xfe, + 0x80, 0xbd, 0x02, 0x4a, 0x11, 0x68, 0x81, 0x43, + 0x11, 0x60, 0x70, 0x47, 0x00, 0x00, 0x78, 0x6e, + 0x01, 0x00, 0x80, 0xb5, 0xfe, 0xf7, 0xe9, 0xfe, + 0x80, 0xbd, 0x80, 0xb5, 0xfe, 0xf7, 0xe5, 0xfe, + 0x80, 0xbd, 0x80, 0xb5, 0x00, 0xf0, 0x31, 0xfa, + 0x80, 0xbd, 0x03, 0x49, 0x80, 0xb5, 0x3c, 0x00, + 0x44, 0x25, 0x00, 0x00, 0x04, 0x20, 0x88, 0x60, + 0x00, 0xf0, 0xd0, 0xf9, 0x80, 0xbd, 0x00, 0x00, + 0x00, 0x30, 0x07, 0x00, 0x80, 0xb5, 0x00, 0xf0, + 0x99, 0xfa, 0x80, 0xbd, 0x80, 0xb5, 0x00, 0xf0, + 0x99, 0xfb, 0x80, 0xbd, 0x38, 0xb5, 0x20, 0x28, + 0x15, 0xd2, 0x0d, 0x4c, 0x22, 0x1c, 0x20, 0x32, + 0x95, 0x79, 0x00, 0xab, 0x1d, 0x70, 0xd2, 0x79, + 0x5a, 0x70, 0x0a, 0x4b, 0x82, 0x00, 0x99, 0x50, + 0x3c, 0x00, 0x80, 0x25, 0x00, 0x00, 0x01, 0x21, + 0x81, 0x40, 0x08, 0x48, 0x01, 0x60, 0x42, 0x68, + 0x11, 0x43, 0x41, 0x60, 0x00, 0xab, 0x18, 0x88, + 0xe0, 0x84, 0x38, 0xbd, 0x01, 0x21, 0xff, 0x20, + 0xfe, 0xf7, 0x83, 0xfe, 0xf9, 0xe7, 0x00, 0x10, + 0x07, 0x00, 0x30, 0x74, 0x01, 0x00, 0x00, 0x40, + 0x07, 0x00, 0x20, 0x28, 0x09, 0xd2, 0x05, 0x49, + 0x06, 0x4b, 0x82, 0x00, 0x99, 0x50, 0x05, 0x4a, + 0x51, 0x68, 0x3c, 0x00, 0xbc, 0x25, 0x00, 0x00, + 0x01, 0x23, 0x83, 0x40, 0x99, 0x43, 0x51, 0x60, + 0x70, 0x47, 0x00, 0x00, 0xa9, 0x75, 0x00, 0x00, + 0x30, 0x74, 0x01, 0x00, 0x00, 0x40, 0x07, 0x00, + 0x02, 0x4a, 0x11, 0x68, 0x08, 0x43, 0x10, 0x60, + 0x70, 0x47, 0x00, 0x00, 0x78, 0x6e, 0x01, 0x00, + 0x0b, 0x48, 0x01, 0x68, 0x03, 0x22, 0x12, 0x04, + 0x11, 0x43, 0x01, 0x60, 0x01, 0x68, 0x07, 0x22, + 0x12, 0x06, 0x91, 0x43, 0x3c, 0x00, 0xf8, 0x25, + 0x00, 0x00, 0x01, 0x22, 0x52, 0x06, 0x89, 0x18, + 0x01, 0x60, 0x01, 0x68, 0x12, 0x0c, 0x11, 0x43, + 0x01, 0x60, 0x01, 0x68, 0x52, 0x08, 0x11, 0x43, + 0x01, 0x60, 0x70, 0x47, 0x00, 0x00, 0x80, 0x00, + 0x07, 0x00, 0xfe, 0xb5, 0x1c, 0x4e, 0x05, 0x1c, + 0xb0, 0x8a, 0xf2, 0x68, 0x12, 0xd0, 0x01, 0x24, + 0x00, 0x29, 0x09, 0xd1, 0x11, 0x6d, 0x02, 0xaa, + 0x01, 0xab, 0xfe, 0xf7, 0xf8, 0xfe, 0x3c, 0x00, + 0x34, 0x26, 0x00, 0x00, 0x02, 0x98, 0x00, 0x28, + 0x01, 0xd0, 0x00, 0x24, 0x0b, 0xe0, 0x01, 0xaa, + 0x02, 0xa9, 0x28, 0x1c, 0xfe, 0xf7, 0x70, 0xff, + 0x05, 0xe0, 0x11, 0x6d, 0x02, 0xaa, 0x00, 0x24, + 0x01, 0xab, 0xfe, 0xf7, 0x01, 0xff, 0x0e, 0x49, + 0x08, 0x1c, 0x20, 0x30, 0x82, 0x79, 0x00, 0xab, + 0x1a, 0x70, 0xc0, 0x79, 0x58, 0x70, 0x30, 0x68, + 0x00, 0x28, 0x02, 0xd1, 0x02, 0x98, 0x30, 0x60, + 0x3c, 0x00, 0x70, 0x26, 0x00, 0x00, 0x02, 0xe0, + 0x02, 0x98, 0x72, 0x68, 0xd0, 0x60, 0x01, 0x98, + 0x00, 0xab, 0x70, 0x60, 0x18, 0x88, 0xc8, 0x84, + 0xf0, 0x68, 0xc0, 0x6c, 0xf0, 0x60, 0x20, 0x1c, + 0xfe, 0xbd, 0x24, 0x7e, 0x01, 0x00, 0x00, 0x10, + 0x07, 0x00, 0xf8, 0xb5, 0x04, 0x1c, 0x54, 0x27, + 0x1d, 0x4e, 0x00, 0x20, 0x30, 0x60, 0x70, 0x60, + 0x67, 0x43, 0x38, 0x04, 0x15, 0x1c, 0x00, 0x0c, + 0xb1, 0x82, 0x3c, 0x00, 0xac, 0x26, 0x00, 0x00, + 0xff, 0xf7, 0x96, 0xf8, 0x08, 0x21, 0x30, 0x61, + 0x00, 0x26, 0x17, 0x4a, 0x14, 0xe0, 0x03, 0x1c, + 0x24, 0x33, 0x42, 0x61, 0x03, 0x61, 0xc6, 0x61, + 0x01, 0x83, 0x08, 0x33, 0x03, 0x60, 0xb1, 0x23, + 0x43, 0x60, 0x03, 0x1c, 0x64, 0x33, 0xc3, 0x60, + 0x0c, 0x23, 0x03, 0x81, 0x03, 0x1c, 0x54, 0x33, + 0x4c, 0x30, 0x28, 0xc0, 0x01, 0x3c, 0x18, 0x1c, + 0x00, 0x2c, 0xe8, 0xd1, 0x3c, 0x00, 0xe8, 0x26, + 0x00, 0x00, 0x09, 0x4e, 0x07, 0x22, 0x30, 0x69, + 0xd2, 0x43, 0xc1, 0x19, 0x50, 0x50, 0x02, 0x1c, + 0x10, 0x32, 0x80, 0x39, 0x8a, 0x63, 0xf0, 0x60, + 0xb0, 0x60, 0x00, 0x21, 0x00, 0x20, 0xff, 0xf7, + 0x88, 0xff, 0x30, 0x69, 0xf0, 0x60, 0xb0, 0x60, + 0xf8, 0xbd, 0x24, 0x7e, 0x01, 0x00, 0x91, 0x00, + 0x05, 0x00, 0x01, 0x48, 0x40, 0x6a, 0x70, 0x47, + 0x00, 0x00, 0xe8, 0x7d, 0x01, 0x00, 0x3c, 0x00, + 0x24, 0x27, 0x00, 0x00, 0x01, 0x48, 0x00, 0x88, + 0x70, 0x47, 0x00, 0x00, 0xfc, 0x6b, 0x01, 0x00, + 0x06, 0x49, 0x80, 0xb5, 0x08, 0x88, 0x01, 0x30, + 0x08, 0x80, 0x05, 0x49, 0x08, 0x20, 0x08, 0x60, + 0x04, 0x49, 0x88, 0x69, 0x88, 0x61, 0x00, 0xf0, + 0x21, 0xf8, 0x80, 0xbd, 0xfc, 0x6b, 0x01, 0x00, + 0x00, 0x10, 0x07, 0x00, 0x00, 0x30, 0x07, 0x00, + 0x03, 0x4a, 0x01, 0x20, 0x12, 0x1d, 0x06, 0xca, + 0x3c, 0x00, 0x60, 0x27, 0x00, 0x00, 0x91, 0x42, + 0x00, 0xd1, 0x00, 0x20, 0x70, 0x47, 0xe8, 0x7d, + 0x01, 0x00, 0x06, 0x48, 0x00, 0xb5, 0xc0, 0x7c, + 0x00, 0x28, 0x03, 0xd1, 0xff, 0xf7, 0xef, 0xff, + 0x00, 0x28, 0x01, 0xd0, 0x01, 0x20, 0x00, 0xbd, + 0x00, 0x20, 0x00, 0xbd, 0x00, 0x00, 0xa0, 0x80, + 0x07, 0x00, 0x10, 0xb5, 0x04, 0x1c, 0x80, 0x07, + 0x02, 0xd5, 0x06, 0xf0, 0x3e, 0xfd, 0x03, 0xe0, + 0xe0, 0x07, 0x3c, 0x00, 0x9c, 0x27, 0x00, 0x00, + 0x01, 0xd5, 0x06, 0xf0, 0xe3, 0xfd, 0x60, 0x07, + 0x01, 0xd5, 0xfe, 0xf7, 0xab, 0xfd, 0x10, 0xbd, + 0x02, 0x4a, 0x01, 0x1c, 0x10, 0x68, 0x11, 0x60, + 0x70, 0x47, 0x00, 0x00, 0xe8, 0x7d, 0x01, 0x00, + 0x38, 0xb5, 0x20, 0x4d, 0x2c, 0x1c, 0x20, 0x34, + 0xa0, 0x79, 0x00, 0xab, 0x18, 0x70, 0xe0, 0x79, + 0x58, 0x70, 0xfe, 0xf7, 0x27, 0xfa, 0x00, 0xab, + 0x18, 0x88, 0xe8, 0x84, 0x3c, 0x00, 0xd8, 0x27, + 0x00, 0x00, 0x1a, 0x48, 0x81, 0x78, 0x08, 0x22, + 0x91, 0x43, 0x81, 0x70, 0x81, 0x78, 0x11, 0x43, + 0x81, 0x70, 0x17, 0x48, 0x41, 0x68, 0x80, 0x22, + 0x91, 0x43, 0x41, 0x60, 0x01, 0x68, 0x11, 0x43, + 0x01, 0x60, 0x00, 0x20, 0x01, 0x30, 0x64, 0x28, + 0xfc, 0xd3, 0xa0, 0x79, 0x0f, 0x4d, 0x00, 0xab, + 0x18, 0x70, 0xe0, 0x79, 0x10, 0x4c, 0x58, 0x70, + 0x20, 0x1c, 0x10, 0x30, 0x00, 0xf0, 0x3c, 0x00, + 0x14, 0x28, 0x00, 0x00, 0xdf, 0xfb, 0x00, 0x20, + 0xc0, 0x43, 0xa0, 0x61, 0xff, 0xf7, 0x9c, 0xff, + 0x00, 0x28, 0x09, 0xd0, 0x0a, 0x49, 0x08, 0x69, + 0x01, 0x30, 0x08, 0x61, 0x00, 0x20, 0x3c, 0x31, + 0x89, 0x68, 0x48, 0x63, 0x06, 0xf0, 0xee, 0xfc, + 0x00, 0xab, 0x18, 0x88, 0xe8, 0x84, 0x38, 0xbd, + 0x00, 0x10, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, + 0xf4, 0x00, 0x07, 0x00, 0x00, 0x30, 0x07, 0x00, + 0x3c, 0x00, 0x50, 0x28, 0x00, 0x00, 0xe8, 0x7d, + 0x01, 0x00, 0x0a, 0x48, 0x80, 0xb5, 0x00, 0x6a, + 0x00, 0x28, 0x01, 0xd0, 0xfe, 0xf7, 0xc1, 0xf9, + 0x07, 0x48, 0x07, 0x49, 0x3c, 0x30, 0x80, 0x68, + 0x10, 0x30, 0x48, 0x61, 0x01, 0x20, 0x08, 0x61, + 0x05, 0x49, 0x08, 0x68, 0x80, 0x22, 0x90, 0x43, + 0x08, 0x60, 0x80, 0xbd, 0x00, 0x00, 0xe8, 0x7d, + 0x01, 0x00, 0x00, 0x30, 0x07, 0x00, 0xf4, 0x00, + 0x07, 0x00, 0x3c, 0x00, 0x8c, 0x28, 0x00, 0x00, + 0x80, 0xb5, 0x0c, 0xf0, 0xcb, 0xfe, 0x06, 0xf0, + 0xbf, 0xfc, 0x80, 0xbd, 0x01, 0x49, 0xc8, 0x62, + 0x70, 0x47, 0x00, 0x00, 0xe8, 0x7d, 0x01, 0x00, + 0x02, 0x4a, 0x91, 0x6a, 0x08, 0x43, 0x90, 0x62, + 0x70, 0x47, 0x00, 0x00, 0xe8, 0x7d, 0x01, 0x00, + 0x18, 0x23, 0x06, 0x49, 0x58, 0x43, 0x40, 0x18, + 0x00, 0x21, 0x02, 0x79, 0x03, 0x68, 0x1a, 0x70, + 0x01, 0x31, 0x08, 0x30, 0x3c, 0x00, 0xc8, 0x28, + 0x00, 0x00, 0x03, 0x29, 0xf8, 0xd3, 0x70, 0x47, + 0x00, 0x00, 0x28, 0x52, 0x01, 0x00, 0x03, 0x49, + 0x00, 0x28, 0x00, 0xd0, 0x01, 0x1c, 0x02, 0x48, + 0x81, 0x62, 0x70, 0x47, 0x00, 0x00, 0x85, 0x75, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0xf8, 0xb5, + 0xff, 0xf7, 0x33, 0xff, 0x28, 0x4f, 0x00, 0x28, + 0x04, 0xd0, 0xff, 0xf7, 0xc8, 0xff, 0x38, 0x6a, + 0x01, 0x30, 0x38, 0x62, 0xf8, 0x6a, 0x3c, 0x00, + 0x04, 0x29, 0x00, 0x00, 0x00, 0x28, 0x02, 0xd0, + 0x01, 0x89, 0x04, 0x39, 0x01, 0x81, 0x38, 0x6b, + 0x00, 0x25, 0x00, 0x28, 0x08, 0xd0, 0x0b, 0x20, + 0x3d, 0x63, 0x10, 0xf0, 0xe5, 0xfa, 0x1e, 0x49, + 0x08, 0x68, 0x21, 0x22, 0x90, 0x43, 0x08, 0x60, + 0x38, 0x78, 0x3c, 0x21, 0x1b, 0x4a, 0x41, 0x43, + 0x8c, 0x18, 0xff, 0x22, 0x79, 0x6a, 0x3a, 0x70, + 0x00, 0x29, 0x0c, 0xd0, 0xb9, 0x69, 0x01, 0x31, + 0x3c, 0x00, 0x40, 0x29, 0x00, 0x00, 0xb9, 0x61, + 0x7d, 0x62, 0xbd, 0x68, 0x00, 0x2d, 0x04, 0xd0, + 0x63, 0x6b, 0x7a, 0x6b, 0x00, 0x21, 0xfd, 0xf7, + 0x47, 0xfd, 0xf8, 0xbd, 0x04, 0x28, 0x03, 0xd3, + 0x01, 0x21, 0x84, 0x20, 0xfe, 0xf7, 0xa1, 0xfc, + 0x38, 0x69, 0x26, 0x1c, 0x01, 0x30, 0x38, 0x61, + 0x20, 0x36, 0x30, 0x78, 0x02, 0x28, 0x03, 0xd0, + 0x0c, 0x21, 0x84, 0x20, 0xfe, 0xf7, 0x95, 0xfc, + 0x35, 0x70, 0x3c, 0x00, 0x7c, 0x29, 0x00, 0x00, + 0xa1, 0x69, 0x00, 0x29, 0xe8, 0xd0, 0x63, 0x6b, + 0x30, 0x34, 0x20, 0x78, 0x0c, 0x1c, 0x00, 0x21, + 0x7a, 0x6b, 0xfd, 0xf7, 0x27, 0xfd, 0xdf, 0xe7, + 0x04, 0x6c, 0x01, 0x00, 0xf4, 0x00, 0x07, 0x00, + 0x18, 0xdb, 0x01, 0x00, 0x10, 0xb5, 0x0b, 0x4c, + 0x60, 0x6a, 0x00, 0x28, 0x0e, 0xd0, 0x0a, 0x48, + 0x00, 0xf0, 0x12, 0xfb, 0x00, 0x20, 0x60, 0x62, + 0xa4, 0x68, 0x00, 0x2c, 0x3c, 0x00, 0xb8, 0x29, + 0x00, 0x00, 0x05, 0xd0, 0x7e, 0x23, 0xdb, 0x43, + 0x00, 0x22, 0x01, 0x21, 0xfd, 0xf7, 0x0d, 0xfd, + 0x10, 0xbd, 0xe0, 0x69, 0x01, 0x30, 0xe0, 0x61, + 0x10, 0xbd, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x30, + 0x07, 0x00, 0x09, 0x48, 0x41, 0x68, 0x3f, 0x22, + 0x12, 0x04, 0x91, 0x43, 0x0d, 0x22, 0x12, 0x04, + 0x89, 0x18, 0x41, 0x60, 0x41, 0x68, 0x01, 0x22, + 0x52, 0x02, 0x91, 0x43, 0x41, 0x60, 0x3c, 0x00, + 0xf4, 0x29, 0x00, 0x00, 0x03, 0x48, 0x81, 0x78, + 0x81, 0x70, 0x81, 0x78, 0x81, 0x70, 0x70, 0x47, + 0x80, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, + 0xf0, 0xb5, 0x01, 0x25, 0x08, 0x24, 0x00, 0x20, + 0x0e, 0x4a, 0x0f, 0x49, 0x00, 0x26, 0x3c, 0x23, + 0x43, 0x43, 0xd1, 0x52, 0x9b, 0x18, 0x5d, 0x71, + 0x9b, 0x60, 0x5e, 0x61, 0x1c, 0x82, 0xc0, 0x27, + 0xdf, 0x60, 0x20, 0x27, 0xfe, 0x54, 0x9e, 0x61, + 0x3c, 0x00, 0x30, 0x2a, 0x00, 0x00, 0x30, 0x27, + 0xfe, 0x54, 0x07, 0x4f, 0x3f, 0x18, 0x20, 0x37, + 0x01, 0x30, 0x05, 0x28, 0x9f, 0x63, 0xe9, 0xd3, + 0x05, 0x48, 0xff, 0x32, 0x01, 0x32, 0x90, 0x62, + 0xf0, 0xbd, 0x18, 0xdb, 0x01, 0x00, 0xbe, 0xba, + 0x00, 0x00, 0x30, 0x80, 0x07, 0x00, 0x06, 0x6c, + 0x01, 0x00, 0x01, 0x49, 0x48, 0x60, 0x70, 0x47, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x05, 0x49, + 0x08, 0x5c, 0x3c, 0x00, 0x6c, 0x2a, 0x00, 0x00, + 0x05, 0x49, 0x49, 0x68, 0x40, 0x18, 0xc0, 0x06, + 0xc0, 0x0e, 0x04, 0x49, 0x20, 0x30, 0x48, 0x72, + 0x70, 0x47, 0x00, 0x00, 0xa0, 0x57, 0x01, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x80, 0x07, 0x00, + 0x80, 0xb5, 0x15, 0x21, 0x84, 0x20, 0xfe, 0xf7, + 0x07, 0xfc, 0x80, 0xbd, 0xf8, 0xb5, 0x43, 0x48, + 0x84, 0x68, 0x03, 0x34, 0x42, 0x4d, 0x04, 0xe0, + 0x20, 0x1c, 0x10, 0xf0, 0x3c, 0x00, 0xa8, 0x2a, + 0x00, 0x00, 0xb9, 0xf8, 0x00, 0x28, 0x71, 0xd1, + 0x28, 0x69, 0xc0, 0x07, 0xf7, 0xd5, 0x3e, 0x48, + 0x28, 0x60, 0x3e, 0x4a, 0x14, 0x1c, 0x20, 0x34, + 0x20, 0x79, 0x00, 0x90, 0x3c, 0x23, 0x3c, 0x49, + 0x58, 0x43, 0x45, 0x18, 0x28, 0x79, 0xff, 0xf7, + 0xcc, 0xff, 0x28, 0x1c, 0x3a, 0x49, 0x08, 0x30, + 0x48, 0x60, 0x01, 0x26, 0x08, 0x1c, 0x06, 0x60, + 0x68, 0x6a, 0x00, 0x28, 0x0d, 0xd0, 0x3c, 0x00, + 0xe4, 0x2a, 0x00, 0x00, 0xa9, 0x6a, 0x92, 0x6a, + 0x35, 0x4b, 0x9f, 0x68, 0xd7, 0x1b, 0x1a, 0x68, + 0x51, 0x18, 0x79, 0x18, 0x8a, 0x42, 0x5a, 0x68, + 0x00, 0xd8, 0x00, 0xe0, 0x01, 0x32, 0x06, 0xc0, + 0xe8, 0x6a, 0xfe, 0xf7, 0x87, 0xff, 0x2d, 0x49, + 0xe8, 0x6a, 0x48, 0x60, 0x30, 0x1c, 0x0e, 0x60, + 0x66, 0x79, 0x1f, 0xe0, 0x2b, 0x48, 0x46, 0x61, + 0x04, 0x7f, 0x29, 0x49, 0x20, 0x1c, 0x50, 0x39, + 0x3c, 0x00, 0x20, 0x2b, 0x00, 0x00, 0x89, 0x6a, + 0xfd, 0xf7, 0x5a, 0xfc, 0x00, 0x98, 0x84, 0x42, + 0x10, 0xd0, 0x3c, 0x20, 0x22, 0x49, 0x60, 0x43, + 0x40, 0x18, 0x87, 0x69, 0x00, 0x2f, 0x09, 0xd0, + 0x00, 0x21, 0x20, 0x30, 0x01, 0x70, 0x7e, 0x23, + 0xdb, 0x43, 0x02, 0x21, 0x00, 0x22, 0x20, 0x1c, + 0xfd, 0xf7, 0x4c, 0xfc, 0x01, 0x20, 0xa0, 0x40, + 0x86, 0x43, 0x00, 0x2e, 0xdd, 0xd1, 0xe9, 0x69, + 0x00, 0x29, 0x3c, 0x00, 0x5c, 0x2b, 0x00, 0x00, + 0x03, 0xd0, 0x30, 0x20, 0x40, 0x5d, 0xfd, 0xf7, + 0x3a, 0xfc, 0x16, 0x4c, 0x50, 0x3c, 0x60, 0x6a, + 0x00, 0x28, 0x03, 0xd0, 0x0a, 0x21, 0x84, 0x20, + 0xfe, 0xf7, 0x96, 0xfb, 0x20, 0x35, 0x28, 0x78, + 0x01, 0x28, 0x03, 0xd0, 0x0b, 0x21, 0x84, 0x20, + 0xfe, 0xf7, 0x8e, 0xfb, 0x02, 0x20, 0x28, 0x70, + 0xe0, 0x68, 0x01, 0x30, 0x00, 0xe0, 0x07, 0xe0, + 0xe0, 0x60, 0x00, 0x98, 0x3c, 0x00, 0x98, 0x2b, + 0x00, 0x00, 0x20, 0x70, 0x00, 0x98, 0x60, 0x70, + 0x0a, 0x48, 0x00, 0x68, 0x60, 0x63, 0xf8, 0xbd, + 0x00, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x40, + 0x07, 0x00, 0x01, 0x00, 0x00, 0x01, 0x30, 0x80, + 0x07, 0x00, 0x18, 0xdb, 0x01, 0x00, 0x00, 0x30, + 0x07, 0x00, 0x54, 0x6c, 0x01, 0x00, 0x00, 0xa0, + 0x07, 0x00, 0x78, 0x6e, 0x01, 0x00, 0x3c, 0x22, + 0x3c, 0x23, 0x4a, 0x43, 0x09, 0x49, 0x3c, 0x00, + 0xd4, 0x2b, 0x00, 0x00, 0xb0, 0xb5, 0x54, 0x18, + 0x58, 0x43, 0x45, 0x18, 0x21, 0x1c, 0x38, 0x22, + 0x28, 0x1c, 0xfd, 0xf7, 0xe5, 0xfc, 0xa0, 0x6b, + 0x00, 0x78, 0xa9, 0x6b, 0x08, 0x70, 0x00, 0x20, + 0x20, 0x34, 0x20, 0x70, 0xb0, 0xbd, 0x00, 0x00, + 0x18, 0xdb, 0x01, 0x00, 0x3c, 0x23, 0x07, 0x49, + 0x58, 0x43, 0x10, 0xb5, 0x44, 0x18, 0x20, 0x34, + 0x20, 0x78, 0x02, 0x28, 0x03, 0xd1, 0x0d, 0x21, + 0x3c, 0x00, 0x10, 0x2c, 0x00, 0x00, 0x84, 0x20, + 0xfe, 0xf7, 0x47, 0xfb, 0x00, 0x20, 0x20, 0x70, + 0x10, 0xbd, 0x18, 0xdb, 0x01, 0x00, 0xff, 0xb5, + 0x3c, 0x20, 0x48, 0x43, 0x1a, 0x49, 0x81, 0xb0, + 0x44, 0x18, 0x26, 0x1c, 0x20, 0x36, 0x30, 0x78, + 0x15, 0x1c, 0x0f, 0x9f, 0x02, 0x28, 0x03, 0xd1, + 0x04, 0x21, 0x84, 0x20, 0xfe, 0xf7, 0x31, 0xfb, + 0x01, 0x20, 0x30, 0x70, 0x25, 0x71, 0x0b, 0x99, + 0x30, 0x22, 0x3c, 0x00, 0x4c, 0x2c, 0x00, 0x00, + 0x61, 0x80, 0x0a, 0x99, 0xe1, 0x62, 0x0d, 0x99, + 0xa1, 0x61, 0x0c, 0x99, 0xe1, 0x61, 0x0e, 0x99, + 0x61, 0x62, 0xa7, 0x62, 0x01, 0x99, 0x11, 0x55, + 0x7e, 0x21, 0xc9, 0x43, 0x61, 0x63, 0x04, 0x99, + 0x00, 0x29, 0x00, 0xd1, 0x00, 0x20, 0x06, 0x1c, + 0x28, 0x1c, 0x08, 0xf0, 0x8b, 0xf8, 0x00, 0x28, + 0x01, 0xd0, 0x02, 0x20, 0x00, 0xe0, 0x00, 0x20, + 0xa1, 0x6b, 0x30, 0x43, 0x3c, 0x00, 0x88, 0x2c, + 0x00, 0x00, 0x08, 0x70, 0x05, 0xb0, 0xf0, 0xbd, + 0x00, 0x00, 0x18, 0xdb, 0x01, 0x00, 0x80, 0xb5, + 0x14, 0x21, 0x84, 0x20, 0xfe, 0xf7, 0x03, 0xfb, + 0x80, 0xbd, 0x01, 0x48, 0x40, 0x78, 0x70, 0x47, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x02, 0x48, + 0x00, 0x69, 0xc0, 0x07, 0xc0, 0x0f, 0x70, 0x47, + 0x00, 0x00, 0x00, 0x40, 0x07, 0x00, 0x01, 0x1c, + 0x3c, 0x23, 0x04, 0x4a, 0x59, 0x43, 0x3c, 0x00, + 0xc4, 0x2c, 0x00, 0x00, 0x89, 0x18, 0x20, 0x31, + 0x09, 0x78, 0x01, 0x20, 0x00, 0x29, 0x00, 0xd0, + 0x00, 0x20, 0x70, 0x47, 0x18, 0xdb, 0x01, 0x00, + 0x08, 0x48, 0x40, 0x6a, 0x00, 0x28, 0x0a, 0xd1, + 0x07, 0x4a, 0x00, 0x21, 0x20, 0x23, 0x9b, 0x5c, + 0x02, 0x2b, 0x04, 0xd0, 0x01, 0x31, 0x3c, 0x32, + 0x05, 0x29, 0xf7, 0xd3, 0x70, 0x47, 0x01, 0x20, + 0x70, 0x47, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x3c, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x18, 0xdb, + 0x01, 0x00, 0xf8, 0xb5, 0x0e, 0x1c, 0x04, 0x1c, + 0x17, 0x1c, 0xfe, 0xf7, 0x82, 0xfe, 0x20, 0x1c, + 0x11, 0x4c, 0x60, 0x60, 0x01, 0x20, 0x20, 0x60, + 0x10, 0x4d, 0x68, 0x69, 0x01, 0x30, 0x68, 0x61, + 0x68, 0x6a, 0x00, 0x28, 0x03, 0xd0, 0x07, 0x21, + 0x84, 0x20, 0xfe, 0xf7, 0xba, 0xfa, 0xa0, 0x68, + 0x40, 0x07, 0x03, 0xd5, 0x06, 0x21, 0x84, 0x20, + 0xfe, 0xf7, 0x3c, 0x00, 0x3c, 0x2d, 0x00, 0x00, + 0xb3, 0xfa, 0x08, 0x48, 0x00, 0x69, 0x00, 0x28, + 0x03, 0xda, 0xaa, 0x21, 0x84, 0x20, 0xfe, 0xf7, + 0xab, 0xfa, 0x02, 0x20, 0x68, 0x62, 0xae, 0x60, + 0x2f, 0x70, 0xf8, 0xbd, 0x00, 0x30, 0x07, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x40, 0x07, 0x00, + 0x04, 0x4a, 0x51, 0x80, 0x10, 0x71, 0x03, 0x48, + 0x03, 0x49, 0x08, 0x30, 0x48, 0x60, 0x01, 0x20, + 0x08, 0x60, 0x70, 0x47, 0x3c, 0x00, 0x78, 0x2d, + 0x00, 0x00, 0x3c, 0x6c, 0x01, 0x00, 0x00, 0x30, + 0x07, 0x00, 0x00, 0x21, 0x00, 0x23, 0x05, 0xe0, + 0x02, 0x89, 0x43, 0x60, 0xc0, 0x68, 0x51, 0x18, + 0x09, 0x04, 0x09, 0x0c, 0x00, 0x28, 0xf7, 0xd1, + 0x04, 0x31, 0x08, 0x04, 0x00, 0x0c, 0x70, 0x47, + 0x00, 0x00, 0x02, 0x4a, 0x51, 0x6b, 0x08, 0x43, + 0x50, 0x63, 0x70, 0x47, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x38, 0xb5, 0x0a, 0x4c, 0x3c, 0x00, + 0xb4, 0x2d, 0x00, 0x00, 0x22, 0x1c, 0x20, 0x32, + 0x95, 0x79, 0x00, 0xab, 0x1d, 0x70, 0xd2, 0x79, + 0x5a, 0x70, 0x03, 0x68, 0x40, 0x68, 0x06, 0x4a, + 0x50, 0x65, 0x05, 0x48, 0x13, 0x65, 0x50, 0x30, + 0x81, 0x60, 0x00, 0xab, 0x18, 0x88, 0xe0, 0x84, + 0x38, 0xbd, 0x00, 0x00, 0x00, 0x10, 0x07, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x98, 0xb5, 0x0d, 0x4c, + 0x20, 0x1c, 0x20, 0x30, 0x81, 0x79, 0x00, 0xab, + 0x3c, 0x00, 0xf0, 0x2d, 0x00, 0x00, 0x19, 0x70, + 0xc0, 0x79, 0x58, 0x70, 0x0a, 0x48, 0x00, 0xf0, + 0xec, 0xf8, 0x09, 0x49, 0x00, 0x20, 0x48, 0x62, + 0xff, 0xf7, 0x69, 0xff, 0x00, 0x28, 0x03, 0xd0, + 0x12, 0x21, 0x84, 0x20, 0xfe, 0xf7, 0x49, 0xfa, + 0x00, 0xab, 0x18, 0x88, 0xe0, 0x84, 0x98, 0xbd, + 0x00, 0x00, 0x00, 0x10, 0x07, 0x00, 0x00, 0x30, + 0x07, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x03, 0x48, + 0x01, 0x7a, 0x3c, 0x00, 0x2c, 0x2e, 0x00, 0x00, + 0xfe, 0x22, 0x91, 0x43, 0x0a, 0x31, 0x01, 0x72, + 0x70, 0x47, 0x00, 0x00, 0x00, 0x80, 0x07, 0x00, + 0x90, 0xb5, 0x0e, 0x4c, 0x85, 0xb0, 0xa0, 0x78, + 0x02, 0x28, 0x14, 0xd1, 0x03, 0x20, 0xa0, 0x70, + 0x0b, 0x49, 0x00, 0x20, 0x00, 0x22, 0x04, 0x92, + 0x02, 0x90, 0x03, 0x91, 0xe1, 0x88, 0x01, 0x22, + 0x01, 0x92, 0x00, 0x91, 0x61, 0x78, 0x20, 0x78, + 0x22, 0x69, 0xe3, 0x68, 0x3c, 0x00, 0x68, 0x2e, + 0x00, 0x00, 0x08, 0xf0, 0x94, 0xfd, 0x04, 0x48, + 0x09, 0xf0, 0x7f, 0xf9, 0x05, 0xb0, 0x90, 0xbd, + 0x00, 0x00, 0xb4, 0x79, 0x01, 0x00, 0xad, 0xb6, + 0x00, 0x00, 0x71, 0xb6, 0x00, 0x00, 0xb0, 0xb5, + 0x0c, 0x4d, 0xac, 0x79, 0x0c, 0x49, 0x09, 0x78, + 0x00, 0x29, 0x03, 0xd0, 0x01, 0x29, 0x0e, 0xd0, + 0x02, 0x29, 0x08, 0xd1, 0xc2, 0x88, 0x00, 0x2a, + 0x09, 0xd0, 0x01, 0x23, 0x81, 0x68, 0x3c, 0x00, + 0xa4, 0x2e, 0x00, 0x00, 0x02, 0x20, 0x0f, 0xf0, + 0xc1, 0xf8, 0x03, 0xe0, 0x02, 0x21, 0x86, 0x20, + 0xfe, 0xf7, 0xf8, 0xf9, 0xac, 0x71, 0xb0, 0xbd, + 0x20, 0x10, 0x07, 0x00, 0xa0, 0x79, 0x01, 0x00, + 0x80, 0xb5, 0x02, 0x68, 0x07, 0x49, 0x4a, 0x60, + 0x03, 0x79, 0xca, 0x78, 0xcb, 0x70, 0x00, 0x79, + 0x90, 0x42, 0x06, 0xd0, 0x03, 0x48, 0x14, 0x30, + 0x00, 0x89, 0x07, 0xf0, 0x27, 0xfe, 0x06, 0xf0, + 0x3c, 0x00, 0xe0, 0x2e, 0x00, 0x00, 0xab, 0xfa, + 0x80, 0xbd, 0x84, 0x66, 0x01, 0x00, 0x70, 0xb5, + 0x16, 0x4c, 0x15, 0x4d, 0xa0, 0x78, 0x00, 0x26, + 0x98, 0x3d, 0x01, 0x28, 0x03, 0xd1, 0x28, 0x69, + 0x08, 0xf0, 0xfb, 0xfc, 0xa6, 0x70, 0x60, 0x68, + 0x01, 0x28, 0x03, 0xd0, 0x00, 0x21, 0x28, 0x69, + 0x00, 0xf0, 0xff, 0xfb, 0x0e, 0x48, 0x29, 0x69, + 0x0c, 0xf0, 0x31, 0xfa, 0x01, 0x20, 0x0c, 0xf0, + 0xe4, 0xf8, 0x3c, 0x00, 0x1c, 0x2f, 0x00, 0x00, + 0xe0, 0x78, 0x01, 0x28, 0x02, 0xd0, 0x01, 0x20, + 0x60, 0x70, 0x00, 0xe0, 0x66, 0x70, 0x06, 0x48, + 0x14, 0x30, 0x41, 0x68, 0x01, 0x29, 0x06, 0xd1, + 0x06, 0x60, 0x41, 0x6f, 0x00, 0x29, 0x02, 0xd0, + 0x00, 0x20, 0xfd, 0xf7, 0x4c, 0xfa, 0x70, 0xbd, + 0x84, 0x66, 0x01, 0x00, 0x34, 0x63, 0x01, 0x00, + 0x30, 0xb5, 0x00, 0x22, 0x00, 0x23, 0x01, 0x25, + 0x2c, 0x1c, 0x94, 0x40, 0x3c, 0x00, 0x58, 0x2f, + 0x00, 0x00, 0x04, 0x40, 0x01, 0xd0, 0xca, 0x54, + 0x01, 0x33, 0x01, 0x32, 0x0e, 0x2a, 0xf6, 0xdb, + 0x18, 0x1c, 0x30, 0xbd, 0x00, 0x00, 0xff, 0xb5, + 0x01, 0x27, 0x00, 0x26, 0x05, 0x1c, 0x02, 0x20, + 0x81, 0xb0, 0x00, 0x90, 0x00, 0x2d, 0x18, 0xd0, + 0x28, 0x78, 0xff, 0x28, 0x15, 0xd0, 0x00, 0x24, + 0x10, 0xe0, 0x28, 0x19, 0x80, 0x78, 0x0a, 0x99, + 0x00, 0x29, 0x01, 0xd0, 0x01, 0x06, 0x3c, 0x00, + 0x94, 0x2f, 0x00, 0x00, 0x08, 0xd5, 0x07, 0xf0, + 0xe9, 0xfe, 0x0e, 0x28, 0x03, 0xd0, 0x01, 0x21, + 0x81, 0x40, 0x0e, 0x43, 0x00, 0xe0, 0x00, 0x27, + 0x01, 0x34, 0x68, 0x78, 0xa0, 0x42, 0xeb, 0xdc, + 0x00, 0x98, 0x02, 0x9d, 0x01, 0x38, 0x00, 0x90, + 0xdf, 0xd1, 0x03, 0x98, 0x31, 0x1c, 0x81, 0x43, + 0x02, 0xd0, 0x03, 0x98, 0x06, 0x40, 0x00, 0x27, + 0x04, 0x98, 0x06, 0x60, 0x05, 0xb0, 0x38, 0x1c, + 0x3c, 0x00, 0xd0, 0x2f, 0x00, 0x00, 0xf0, 0xbd, + 0x00, 0x00, 0x02, 0x21, 0x01, 0x60, 0x64, 0x21, + 0x01, 0xe0, 0x01, 0x39, 0x02, 0xd0, 0x02, 0x68, + 0x92, 0x07, 0xfa, 0xd4, 0x01, 0x20, 0x00, 0x29, + 0x00, 0xd1, 0x00, 0x20, 0x70, 0x47, 0x10, 0xb5, + 0x00, 0x20, 0xc4, 0x43, 0x05, 0x4b, 0x02, 0x22, + 0x01, 0x01, 0x5a, 0x50, 0xc9, 0x18, 0x8c, 0x60, + 0x01, 0x30, 0x08, 0x28, 0xf8, 0xdb, 0x10, 0xbd, + 0x00, 0x00, 0x3c, 0x00, 0x0c, 0x30, 0x00, 0x00, + 0x00, 0x30, 0x07, 0x00, 0xf0, 0xb5, 0x05, 0x1c, + 0x60, 0x35, 0xc7, 0x6a, 0x04, 0x1c, 0x28, 0x7b, + 0x00, 0x2f, 0x8b, 0xb0, 0x15, 0xd0, 0x08, 0x28, + 0x15, 0xd2, 0x02, 0xa3, 0x1b, 0x5c, 0x5b, 0x00, + 0x9f, 0x44, 0x00, 0x00, 0x07, 0x04, 0x04, 0x07, + 0x09, 0x09, 0x0c, 0x0c, 0x01, 0x26, 0x00, 0x21, + 0x09, 0xe0, 0x00, 0x26, 0x06, 0xe0, 0x02, 0x26, + 0x02, 0x21, 0x04, 0xe0, 0x3c, 0x00, 0x48, 0x30, + 0x00, 0x00, 0x03, 0x26, 0x03, 0x21, 0x01, 0xe0, + 0x04, 0x26, 0x01, 0x21, 0x8c, 0x22, 0x12, 0x59, + 0x07, 0x91, 0x26, 0x49, 0x06, 0x90, 0x04, 0x91, + 0x00, 0x20, 0x03, 0x90, 0x05, 0x97, 0x08, 0x92, + 0xe0, 0x69, 0x22, 0x69, 0x21, 0x1c, 0x70, 0x31, + 0x01, 0x91, 0x21, 0x49, 0x00, 0x90, 0x70, 0x00, + 0x40, 0x18, 0x60, 0x30, 0x02, 0x92, 0x03, 0x88, + 0x59, 0x1c, 0x01, 0x80, 0x1e, 0x48, 0x3c, 0x00, + 0x84, 0x30, 0x00, 0x00, 0x02, 0x88, 0xa1, 0x68, + 0x0a, 0xa8, 0x09, 0xf0, 0xe1, 0xff, 0x60, 0x60, + 0xe8, 0x7a, 0xa1, 0x6a, 0xc9, 0x07, 0x00, 0x07, + 0x00, 0x0e, 0xc9, 0x0d, 0x08, 0x43, 0x61, 0x6a, + 0x22, 0x69, 0xc9, 0x07, 0x89, 0x0d, 0x01, 0x43, + 0x01, 0x20, 0x00, 0x2a, 0x00, 0xd1, 0x00, 0x20, + 0x80, 0x03, 0x08, 0x43, 0x21, 0x6a, 0xc9, 0x03, + 0x08, 0x43, 0x08, 0x21, 0x08, 0x43, 0x0a, 0x99, + 0x3c, 0x00, 0xc0, 0x30, 0x00, 0x00, 0x08, 0x80, + 0x20, 0x1c, 0xfe, 0xf7, 0x98, 0xfe, 0x20, 0x69, + 0x00, 0x28, 0x04, 0xd1, 0x20, 0x1c, 0x0a, 0xf0, + 0x82, 0xf9, 0x0b, 0xb0, 0xf0, 0xbd, 0x80, 0x79, + 0x06, 0x28, 0x01, 0xd9, 0xfe, 0xf7, 0x0f, 0xf9, + 0x20, 0x69, 0x06, 0x49, 0x80, 0x79, 0x80, 0x00, + 0x09, 0x58, 0x20, 0x1c, 0xfd, 0xf7, 0x74, 0xf9, + 0xef, 0xe7, 0x79, 0x2f, 0x01, 0x00, 0xc4, 0x69, + 0x01, 0x00, 0x3c, 0x00, 0xfc, 0x30, 0x00, 0x00, + 0x08, 0x61, 0x01, 0x00, 0x74, 0x57, 0x01, 0x00, + 0x10, 0xb5, 0x04, 0x1c, 0x58, 0x30, 0x8a, 0xb0, + 0x0e, 0xf0, 0x7c, 0xfe, 0x22, 0x1c, 0x80, 0x32, + 0x51, 0x68, 0x00, 0x29, 0x01, 0xd0, 0x11, 0x7a, + 0x07, 0xe0, 0x00, 0x28, 0x04, 0xd0, 0x80, 0x69, + 0x80, 0x07, 0x01, 0xd5, 0x03, 0x21, 0x00, 0xe0, + 0x01, 0x21, 0xd2, 0x68, 0x07, 0x91, 0x22, 0x49, + 0x00, 0x20, 0x08, 0x92, 0x3c, 0x00, 0x38, 0x31, + 0x00, 0x00, 0x04, 0x91, 0x00, 0x22, 0x05, 0x92, + 0x06, 0x90, 0x03, 0x90, 0xe0, 0x69, 0x22, 0x69, + 0x00, 0x90, 0x21, 0x1c, 0x70, 0x31, 0x1c, 0x48, + 0x01, 0x91, 0x02, 0x92, 0x03, 0x89, 0x59, 0x1c, + 0x01, 0x81, 0x1a, 0x48, 0x02, 0x88, 0xa1, 0x68, + 0x09, 0xa8, 0x09, 0xf0, 0x76, 0xff, 0x60, 0x60, + 0x6b, 0x20, 0x00, 0x5d, 0xa1, 0x6a, 0x22, 0x69, + 0xc9, 0x07, 0x00, 0x07, 0x00, 0x0e, 0x3c, 0x00, + 0x74, 0x31, 0x00, 0x00, 0xc9, 0x0d, 0x01, 0x43, + 0x01, 0x20, 0x00, 0x2a, 0x00, 0xd1, 0x00, 0x20, + 0x80, 0x03, 0x08, 0x43, 0x09, 0x99, 0x08, 0x80, + 0x20, 0x1c, 0xfe, 0xf7, 0x35, 0xfe, 0x20, 0x69, + 0x00, 0x28, 0x04, 0xd1, 0x20, 0x1c, 0x0a, 0xf0, + 0x1f, 0xf9, 0x0a, 0xb0, 0x10, 0xbd, 0x80, 0x79, + 0x06, 0x28, 0x01, 0xd9, 0xfe, 0xf7, 0xac, 0xf8, + 0x20, 0x69, 0x07, 0x49, 0x80, 0x79, 0x80, 0x00, + 0x3c, 0x00, 0xb0, 0x31, 0x00, 0x00, 0x09, 0x58, + 0x20, 0x1c, 0xfd, 0xf7, 0x11, 0xf9, 0xef, 0xe7, + 0x00, 0x00, 0xbd, 0x2f, 0x01, 0x00, 0x24, 0x6a, + 0x01, 0x00, 0x08, 0x61, 0x01, 0x00, 0x74, 0x57, + 0x01, 0x00, 0x3e, 0xb5, 0x05, 0x1c, 0x00, 0x69, + 0x04, 0x21, 0x07, 0xf0, 0xd2, 0xfa, 0x00, 0x28, + 0x09, 0xd0, 0x42, 0x78, 0x02, 0x32, 0x01, 0x1c, + 0x68, 0x46, 0xfd, 0xf7, 0x88, 0xf9, 0xe8, 0x6a, + 0x6c, 0x46, 0x3c, 0x00, 0xec, 0x31, 0x00, 0x00, + 0x02, 0x90, 0x00, 0xe0, 0x00, 0x24, 0x28, 0x1c, + 0x14, 0x30, 0x02, 0xf0, 0x03, 0xfb, 0x00, 0x28, + 0x04, 0xd0, 0x21, 0x1c, 0x28, 0x1c, 0x05, 0xf0, + 0xa5, 0xfe, 0x3e, 0xbd, 0x00, 0x2c, 0xfc, 0xd0, + 0x02, 0x49, 0x20, 0x1c, 0x49, 0x69, 0xfd, 0xf7, + 0xe2, 0xf8, 0xf6, 0xe7, 0x44, 0x7d, 0x01, 0x00, + 0x70, 0xb5, 0x1e, 0x1c, 0x18, 0x23, 0x58, 0x43, + 0x06, 0x4b, 0x04, 0x9d, 0x3c, 0x00, 0x28, 0x32, + 0x00, 0x00, 0x19, 0x50, 0xc4, 0x18, 0x00, 0x20, + 0x60, 0x61, 0x62, 0x60, 0xa6, 0x60, 0xe5, 0x60, + 0x0f, 0xf0, 0xb9, 0xfd, 0x20, 0x61, 0x70, 0xbd, + 0x00, 0x00, 0xb8, 0x7d, 0x01, 0x00, 0x02, 0x4a, + 0x01, 0x1c, 0x90, 0x69, 0x91, 0x61, 0x70, 0x47, + 0x00, 0x00, 0x44, 0x7d, 0x01, 0x00, 0x01, 0x48, + 0x40, 0x6b, 0x70, 0x47, 0x00, 0x00, 0x44, 0x7d, + 0x01, 0x00, 0x04, 0x49, 0x04, 0x4b, 0x3c, 0x00, + 0x64, 0x32, 0x00, 0x00, 0xca, 0x68, 0x09, 0x69, + 0x5c, 0x3b, 0x5b, 0x68, 0xc9, 0x1a, 0x41, 0x43, + 0x50, 0x18, 0x70, 0x47, 0xa0, 0x7d, 0x01, 0x00, + 0x01, 0x48, 0x00, 0x78, 0x70, 0x47, 0x00, 0x00, + 0x78, 0x69, 0x01, 0x00, 0x80, 0xb5, 0x06, 0x22, + 0x01, 0x49, 0xfd, 0xf7, 0x35, 0xf9, 0x80, 0xbd, + 0xfe, 0x67, 0x01, 0x00, 0xf0, 0xb5, 0x89, 0xb0, + 0x00, 0x93, 0x16, 0x4f, 0x13, 0x1c, 0x0e, 0x1c, + 0x3c, 0x00, 0xa0, 0x32, 0x00, 0x00, 0x04, 0x1c, + 0x3a, 0x1c, 0x01, 0xf0, 0x62, 0xff, 0x01, 0xa9, + 0x06, 0xa8, 0xa2, 0x68, 0x02, 0xf0, 0x0b, 0xf9, + 0x01, 0xaa, 0x06, 0xa9, 0x38, 0x1c, 0x63, 0x6a, + 0x02, 0xf0, 0x81, 0xfc, 0x05, 0x1c, 0x01, 0x28, + 0x14, 0xd1, 0x0c, 0x48, 0xfc, 0x21, 0xc8, 0x51, + 0x38, 0x1c, 0x02, 0xf0, 0x0c, 0xf8, 0x03, 0x21, + 0x30, 0x1c, 0x07, 0xf0, 0x52, 0xfa, 0x00, 0x28, + 0x07, 0xd0, 0x3c, 0x00, 0xdc, 0x32, 0x00, 0x00, + 0x80, 0x78, 0x00, 0xf0, 0x33, 0xfc, 0x20, 0x1c, + 0x10, 0x30, 0x0e, 0xf0, 0x47, 0xfd, 0x00, 0xe0, + 0x00, 0x25, 0x28, 0x1c, 0x09, 0xb0, 0xf0, 0xbd, + 0xf4, 0x67, 0x01, 0x00, 0xc1, 0x38, 0x00, 0x00, + 0x10, 0xb5, 0x07, 0x4c, 0x06, 0x48, 0x06, 0x22, + 0x21, 0x1d, 0x08, 0x38, 0xfd, 0xf7, 0xf6, 0xf8, + 0x01, 0xf0, 0xfc, 0xff, 0x00, 0xf0, 0x42, 0xfc, + 0x20, 0x1c, 0x02, 0xf0, 0x3c, 0x00, 0x18, 0x33, + 0x00, 0x00, 0x27, 0xfc, 0x10, 0xbd, 0xf4, 0x67, + 0x01, 0x00, 0x08, 0x49, 0xc9, 0x68, 0x00, 0x29, + 0x0a, 0xd0, 0x06, 0x4a, 0x01, 0x32, 0x51, 0x78, + 0x12, 0x78, 0x48, 0x43, 0x00, 0x2a, 0x01, 0xd1, + 0x08, 0x18, 0x70, 0x47, 0x10, 0x18, 0x70, 0x47, + 0x01, 0x30, 0x70, 0x47, 0x00, 0x00, 0x44, 0x7d, + 0x01, 0x00, 0x04, 0x4b, 0x05, 0x49, 0x00, 0x28, + 0x5a, 0x69, 0x00, 0xd0, 0x01, 0x1c, 0x3c, 0x00, + 0x54, 0x33, 0x00, 0x00, 0x10, 0x1c, 0x59, 0x61, + 0x70, 0x47, 0x00, 0x00, 0x44, 0x7d, 0x01, 0x00, + 0xb9, 0x75, 0x00, 0x00, 0x07, 0x49, 0x00, 0x20, + 0x0a, 0x78, 0x02, 0x2a, 0x09, 0xd1, 0x0a, 0x7c, + 0x00, 0x2a, 0x05, 0xd1, 0xca, 0x68, 0x00, 0x2a, + 0x03, 0xd0, 0x49, 0x69, 0x00, 0x29, 0x00, 0xd0, + 0x01, 0x20, 0x70, 0x47, 0x78, 0x69, 0x01, 0x00, + 0x0c, 0x4a, 0x80, 0xb5, 0x01, 0x21, 0x51, 0x60, + 0x3c, 0x00, 0x90, 0x33, 0x00, 0x00, 0x09, 0xf0, + 0x6a, 0xf8, 0x09, 0x48, 0x1c, 0x30, 0x81, 0x69, + 0x00, 0x29, 0x07, 0xd0, 0x00, 0x23, 0x83, 0x61, + 0x00, 0x22, 0x00, 0x21, 0x00, 0x20, 0x00, 0xf0, + 0xd2, 0xf8, 0x80, 0xbd, 0x00, 0x22, 0x00, 0x21, + 0x03, 0x48, 0x00, 0xf0, 0x5c, 0xf9, 0x80, 0xbd, + 0x00, 0x00, 0x5c, 0x69, 0x01, 0x00, 0x51, 0x35, + 0x00, 0x00, 0xb0, 0xb5, 0x0c, 0x1c, 0x01, 0x28, + 0x16, 0xd1, 0x3c, 0x00, 0xcc, 0x33, 0x00, 0x00, + 0x0e, 0x4d, 0x02, 0x2c, 0x09, 0xd1, 0x00, 0xf0, + 0x2b, 0xfa, 0x00, 0x28, 0x0e, 0xd0, 0x68, 0x69, + 0x00, 0x28, 0x0b, 0xd1, 0x21, 0x1c, 0x13, 0x20, + 0x0c, 0xe0, 0x03, 0x2c, 0xfa, 0xd1, 0x00, 0xf0, + 0xf9, 0xf9, 0x00, 0x28, 0x02, 0xd0, 0x28, 0x7c, + 0x00, 0x28, 0xf3, 0xd0, 0xb0, 0xbd, 0x21, 0x1c, + 0x00, 0x06, 0x00, 0x0e, 0x04, 0xf0, 0x62, 0xfc, + 0xb0, 0xbd, 0x00, 0x00, 0x3c, 0x00, 0x08, 0x34, + 0x00, 0x00, 0x78, 0x69, 0x01, 0x00, 0xb0, 0xb5, + 0x0c, 0x4c, 0x00, 0x25, 0x25, 0x74, 0x65, 0x61, + 0xe5, 0x60, 0x00, 0xf0, 0x3c, 0xfa, 0x00, 0xf0, + 0x34, 0xfa, 0x07, 0x48, 0x1c, 0x38, 0x05, 0x61, + 0x09, 0xf0, 0x33, 0xff, 0x20, 0x78, 0x00, 0x28, + 0x02, 0xd1, 0x04, 0xf0, 0x6e, 0xfa, 0xb0, 0xbd, + 0x02, 0x28, 0xfc, 0xd1, 0x04, 0xf0, 0xa5, 0xfb, + 0xb0, 0xbd, 0x78, 0x69, 0x01, 0x00, 0x3c, 0x00, + 0x44, 0x34, 0x00, 0x00, 0x0c, 0x48, 0x80, 0xb5, + 0x01, 0x78, 0x00, 0x29, 0x12, 0xd0, 0xc0, 0x68, + 0x00, 0x28, 0x0f, 0xd1, 0x08, 0x48, 0x1c, 0x38, + 0x40, 0x69, 0x00, 0x28, 0x0a, 0xd1, 0x07, 0x48, + 0x00, 0x68, 0x00, 0x28, 0x06, 0xd0, 0x00, 0x22, + 0x07, 0x21, 0x10, 0x20, 0x10, 0xf0, 0xa0, 0xf9, + 0x02, 0xf0, 0x2c, 0xfc, 0x80, 0xbd, 0x00, 0x00, + 0x78, 0x69, 0x01, 0x00, 0xd4, 0x67, 0x01, 0x00, + 0x3c, 0x00, 0x80, 0x34, 0x00, 0x00, 0xf8, 0xb5, + 0x1d, 0x4e, 0x1c, 0x4d, 0x04, 0x1c, 0xf0, 0x68, + 0x02, 0x27, 0x1c, 0x3d, 0x00, 0x28, 0x07, 0xd0, + 0xe8, 0x68, 0x00, 0x28, 0x04, 0xd0, 0xfd, 0xf7, + 0xc2, 0xfe, 0x00, 0x28, 0x00, 0xd0, 0xbc, 0x43, + 0x00, 0x2c, 0x14, 0xd0, 0x37, 0x70, 0xf0, 0x68, + 0x14, 0x4f, 0x00, 0x28, 0x10, 0xd0, 0xe0, 0x07, + 0x17, 0xd4, 0xfd, 0xf7, 0xb4, 0xfe, 0x00, 0x28, + 0x13, 0xd0, 0x3c, 0x00, 0xbc, 0x34, 0x00, 0x00, + 0x70, 0x69, 0x00, 0x28, 0x06, 0xd1, 0xe8, 0x68, + 0x00, 0x28, 0x01, 0xd0, 0xfd, 0xf7, 0x1a, 0xff, + 0x0d, 0xf0, 0x0a, 0xfa, 0xf8, 0xbd, 0x68, 0x69, + 0x00, 0x28, 0x05, 0xd1, 0x09, 0x48, 0x00, 0x68, + 0x00, 0x28, 0x01, 0xd0, 0x01, 0x2c, 0x04, 0xd1, + 0x39, 0x1c, 0x20, 0x1c, 0x0e, 0xf0, 0x52, 0xfd, + 0xf0, 0xe7, 0x04, 0xf0, 0x1d, 0xfb, 0x02, 0xf0, + 0xeb, 0xfb, 0xeb, 0xe7, 0x3c, 0x00, 0xf8, 0x34, + 0x00, 0x00, 0x78, 0x69, 0x01, 0x00, 0x50, 0xc3, + 0x00, 0x00, 0xd4, 0x67, 0x01, 0x00, 0x05, 0x48, + 0x41, 0x69, 0x00, 0x29, 0x04, 0xd0, 0x40, 0x6a, + 0x00, 0x28, 0x01, 0xd0, 0x01, 0x20, 0x70, 0x47, + 0x00, 0x20, 0x70, 0x47, 0x00, 0x00, 0x78, 0x69, + 0x01, 0x00, 0x10, 0xb5, 0x04, 0x1c, 0x06, 0x49, + 0x00, 0x20, 0x48, 0x60, 0x08, 0x60, 0x88, 0x60, + 0x08, 0xf0, 0x9b, 0xff, 0x07, 0x21, 0x3c, 0x00, + 0x34, 0x35, 0x00, 0x00, 0x12, 0x20, 0x22, 0x79, + 0x10, 0xf0, 0x3a, 0xf9, 0x10, 0xbd, 0x00, 0x00, + 0x5c, 0x69, 0x01, 0x00, 0x01, 0x49, 0x01, 0x20, + 0x08, 0x60, 0x70, 0x47, 0xe8, 0x67, 0x01, 0x00, + 0xf8, 0xb5, 0x07, 0x1c, 0x0e, 0x1c, 0x08, 0xf0, + 0xa3, 0xfa, 0x13, 0x4d, 0x04, 0x1c, 0x68, 0x68, + 0x00, 0x28, 0x17, 0xd0, 0x00, 0x2f, 0x02, 0xd0, + 0xa8, 0x68, 0x03, 0x28, 0x13, 0xd3, 0x00, 0x20, + 0x3c, 0x00, 0x70, 0x35, 0x00, 0x00, 0xa8, 0x60, + 0x68, 0x60, 0x21, 0x1c, 0x0f, 0x20, 0x0e, 0xf0, + 0xf0, 0xfe, 0x28, 0x68, 0x00, 0x28, 0x03, 0xd0, + 0x00, 0x2c, 0x06, 0xd1, 0x01, 0x20, 0x02, 0xe0, + 0x01, 0x2c, 0x02, 0xd1, 0x00, 0x20, 0xff, 0xf7, + 0xfa, 0xfe, 0xf8, 0xbd, 0x72, 0x1c, 0x00, 0x21, + 0x04, 0x48, 0x00, 0xf0, 0x68, 0xf8, 0xa8, 0x68, + 0x01, 0x30, 0xa8, 0x60, 0xf5, 0xe7, 0x5c, 0x69, + 0x01, 0x00, 0x3c, 0x00, 0xac, 0x35, 0x00, 0x00, + 0x51, 0x35, 0x00, 0x00, 0x0a, 0x49, 0x80, 0xb5, + 0xca, 0x68, 0x00, 0x2a, 0x0b, 0xd0, 0x42, 0x68, + 0x00, 0x2a, 0x09, 0xd0, 0x00, 0x22, 0x4a, 0x62, + 0x02, 0x68, 0x0a, 0x62, 0x02, 0x68, 0x07, 0x21, + 0x17, 0x20, 0x10, 0xf0, 0xef, 0xf8, 0x80, 0xbd, + 0x01, 0x20, 0x48, 0x62, 0x80, 0xbd, 0x00, 0x00, + 0x78, 0x69, 0x01, 0x00, 0x70, 0xb5, 0x14, 0x4d, + 0x84, 0x6c, 0xe9, 0x68, 0x3c, 0x00, 0xe8, 0x35, + 0x00, 0x00, 0x00, 0x29, 0x17, 0xd0, 0x40, 0x30, + 0xec, 0x61, 0x40, 0x78, 0x00, 0x28, 0x01, 0xd1, + 0x01, 0x20, 0x68, 0x62, 0x28, 0x6a, 0x0e, 0x4e, + 0x00, 0x1b, 0xb0, 0x42, 0x0c, 0xd2, 0x08, 0xf0, + 0x3a, 0xfe, 0x29, 0x6a, 0x40, 0x1a, 0xb0, 0x42, + 0x03, 0xd2, 0x02, 0x22, 0x07, 0x21, 0x13, 0x20, + 0x09, 0xe0, 0x04, 0xf0, 0xb6, 0xfa, 0x70, 0xbd, + 0x07, 0x48, 0xa9, 0x68, 0x0b, 0xf0, 0x3c, 0x00, + 0x24, 0x36, 0x00, 0x00, 0xbd, 0xfe, 0x22, 0x1c, + 0x07, 0x21, 0x16, 0x20, 0x10, 0xf0, 0xc0, 0xf8, + 0x70, 0xbd, 0x00, 0x00, 0x78, 0x69, 0x01, 0x00, + 0xa0, 0x86, 0x01, 0x00, 0x34, 0x63, 0x01, 0x00, + 0x0a, 0x49, 0x80, 0xb5, 0x00, 0x20, 0x88, 0x61, + 0x08, 0x69, 0x00, 0x28, 0x0c, 0xd0, 0x07, 0x48, + 0x1c, 0x30, 0x00, 0x78, 0x00, 0x28, 0x07, 0xd0, + 0x01, 0xf0, 0xd2, 0xff, 0x02, 0x28, 0x03, 0xd1, + 0x3c, 0x00, 0x60, 0x36, 0x00, 0x00, 0x00, 0xf0, + 0x12, 0xf9, 0x00, 0xf0, 0xbc, 0xf8, 0x80, 0xbd, + 0x00, 0x00, 0x5c, 0x69, 0x01, 0x00, 0xf0, 0xb5, + 0x06, 0x1c, 0x0c, 0x1c, 0x15, 0x1c, 0x91, 0xb0, + 0x01, 0xa8, 0x40, 0x21, 0xfc, 0xf7, 0x0d, 0xff, + 0x00, 0x21, 0x68, 0x46, 0xfd, 0xf7, 0xa7, 0xff, + 0x04, 0x90, 0x01, 0xa8, 0x06, 0x22, 0x08, 0x49, + 0xfc, 0xf7, 0x31, 0xff, 0x06, 0x22, 0x02, 0xa8, + 0x02, 0x30, 0x3c, 0x00, 0x9c, 0x36, 0x00, 0x00, + 0x06, 0x49, 0xfc, 0xf7, 0x2b, 0xff, 0x00, 0xab, + 0xdc, 0x76, 0x0c, 0x95, 0x31, 0x1c, 0x01, 0xa8, + 0x07, 0xf0, 0x4e, 0xf8, 0x11, 0xb0, 0xf0, 0xbd, + 0x12, 0x61, 0x01, 0x00, 0xf8, 0x67, 0x01, 0x00, + 0x03, 0x1c, 0x08, 0x1c, 0x19, 0x1c, 0x11, 0x4b, + 0x80, 0xb5, 0x06, 0xd0, 0x04, 0x21, 0x11, 0x80, + 0x04, 0x22, 0x19, 0x1c, 0xfc, 0xf7, 0x12, 0xff, + 0x16, 0xe0, 0x04, 0x22, 0x3c, 0x00, 0xd8, 0x36, + 0x00, 0x00, 0x01, 0x1c, 0x18, 0x1c, 0xfc, 0xf7, + 0x0c, 0xff, 0x09, 0x48, 0x10, 0x38, 0x00, 0x69, + 0x00, 0x28, 0x0c, 0xd0, 0x07, 0x48, 0x0c, 0x30, + 0x00, 0x78, 0x00, 0x28, 0x07, 0xd0, 0x01, 0xf0, + 0x84, 0xff, 0x02, 0x28, 0x03, 0xd1, 0x00, 0xf0, + 0xc4, 0xf8, 0x00, 0xf0, 0x6e, 0xf8, 0x01, 0x20, + 0x80, 0xbd, 0x6c, 0x69, 0x01, 0x00, 0xf8, 0xb5, + 0x04, 0x1c, 0x0f, 0x1c, 0x00, 0x25, 0x3c, 0x00, + 0x14, 0x37, 0x00, 0x00, 0x00, 0x26, 0x01, 0xf0, + 0x73, 0xff, 0x02, 0x28, 0x2f, 0xd1, 0x19, 0x49, + 0x01, 0x2f, 0x08, 0x68, 0x07, 0xd1, 0x02, 0x1c, + 0x22, 0x40, 0x0a, 0xd1, 0x20, 0x43, 0x08, 0x60, + 0xa0, 0x42, 0x06, 0xd1, 0x04, 0xe0, 0x00, 0x28, + 0x03, 0xd0, 0xa0, 0x43, 0x08, 0x60, 0x00, 0xd1, + 0x01, 0x25, 0x48, 0x68, 0x00, 0x28, 0x1a, 0xd1, + 0x00, 0x2d, 0x17, 0xd0, 0x01, 0x20, 0x48, 0x60, + 0x3c, 0x00, 0x50, 0x37, 0x00, 0x00, 0x38, 0x1c, + 0x08, 0xf0, 0x89, 0xfe, 0x0b, 0x48, 0x1c, 0x30, + 0x81, 0x69, 0x00, 0x29, 0x07, 0xd0, 0x00, 0x23, + 0x83, 0x61, 0x00, 0x22, 0x00, 0x21, 0x00, 0x20, + 0xff, 0xf7, 0xf1, 0xfe, 0x06, 0xe0, 0x00, 0x22, + 0x00, 0x21, 0x04, 0x48, 0xff, 0xf7, 0x7b, 0xff, + 0x00, 0xe0, 0x01, 0x26, 0x30, 0x1c, 0xf8, 0xbd, + 0x00, 0x00, 0x5c, 0x69, 0x01, 0x00, 0x51, 0x35, + 0x00, 0x00, 0x3c, 0x00, 0x8c, 0x37, 0x00, 0x00, + 0x03, 0x1c, 0x08, 0x1c, 0x19, 0x1c, 0x12, 0x4b, + 0x80, 0xb5, 0x06, 0xd0, 0x04, 0x21, 0x11, 0x80, + 0x04, 0x22, 0x19, 0x1c, 0xfc, 0xf7, 0xaa, 0xfe, + 0x18, 0xe0, 0x04, 0x22, 0x01, 0x1c, 0x18, 0x1c, + 0xfc, 0xf7, 0xa4, 0xfe, 0x0a, 0x48, 0x10, 0x30, + 0xc1, 0x68, 0x00, 0x29, 0x0e, 0xd0, 0x00, 0x78, + 0x00, 0x28, 0x0b, 0xd0, 0x01, 0xf0, 0x1e, 0xff, + 0x02, 0x28, 0x07, 0xd1, 0x3c, 0x00, 0xc8, 0x37, + 0x00, 0x00, 0x00, 0xf0, 0x64, 0xf8, 0x00, 0xf0, + 0x2e, 0xf8, 0x00, 0x28, 0x01, 0xd1, 0x09, 0xf0, + 0x7a, 0xfd, 0x01, 0x20, 0x80, 0xbd, 0x68, 0x69, + 0x01, 0x00, 0x10, 0xb5, 0x0a, 0x4c, 0x20, 0x69, + 0x00, 0x28, 0x09, 0xd0, 0xa1, 0x69, 0x00, 0x29, + 0x06, 0xd1, 0x7d, 0x21, 0xc9, 0x00, 0x41, 0x43, + 0x03, 0x22, 0x07, 0x20, 0x0f, 0xf0, 0xe1, 0xfe, + 0x21, 0x69, 0x01, 0x20, 0x00, 0x29, 0x3c, 0x00, + 0x04, 0x38, 0x00, 0x00, 0x00, 0xd1, 0x00, 0x20, + 0x10, 0xbd, 0x00, 0x00, 0x5c, 0x69, 0x01, 0x00, + 0x10, 0xb5, 0x05, 0x4c, 0x00, 0x28, 0x03, 0xd0, + 0xfd, 0xf7, 0x9a, 0xfc, 0xe0, 0x60, 0x10, 0xbd, + 0x01, 0x20, 0x00, 0x21, 0xe1, 0x60, 0x10, 0xbd, + 0x78, 0x69, 0x01, 0x00, 0x0a, 0x48, 0x0a, 0x49, + 0x10, 0xb5, 0xc0, 0x68, 0x1c, 0x39, 0xc9, 0x68, + 0x00, 0x28, 0x03, 0xd0, 0x00, 0x29, 0x01, 0xd0, + 0x3c, 0x00, 0x40, 0x38, 0x00, 0x00, 0x01, 0x24, + 0x00, 0xe0, 0x00, 0x24, 0x00, 0x2c, 0x03, 0xd0, + 0x02, 0x22, 0x07, 0x20, 0x0f, 0xf0, 0xb7, 0xfe, + 0x20, 0x1c, 0x10, 0xbd, 0x00, 0x00, 0x78, 0x69, + 0x01, 0x00, 0x10, 0xb5, 0x09, 0x4c, 0x00, 0x20, + 0x21, 0x69, 0x00, 0x29, 0x0c, 0xd0, 0x06, 0x49, + 0x1c, 0x31, 0x09, 0x78, 0x00, 0x29, 0x07, 0xd0, + 0x00, 0xf0, 0x09, 0xf8, 0x01, 0x20, 0xa0, 0x61, + 0x20, 0x69, 0x3c, 0x00, 0x7c, 0x38, 0x00, 0x00, + 0x7d, 0x23, 0xdb, 0x00, 0x58, 0x43, 0x10, 0xbd, + 0x5c, 0x69, 0x01, 0x00, 0x80, 0xb5, 0x03, 0x21, + 0x07, 0x20, 0x0f, 0xf0, 0xd1, 0xfe, 0x80, 0xbd, + 0x80, 0xb5, 0x02, 0x21, 0x07, 0x20, 0x0f, 0xf0, + 0xcb, 0xfe, 0x80, 0xbd, 0x06, 0x48, 0x80, 0xb5, + 0x00, 0x78, 0x00, 0x28, 0x01, 0xd0, 0xfd, 0xf7, + 0x29, 0xfd, 0x00, 0x22, 0x07, 0x21, 0x11, 0x20, + 0x0f, 0xf0, 0x7c, 0xff, 0x3c, 0x00, 0xb8, 0x38, + 0x00, 0x00, 0x80, 0xbd, 0x00, 0x00, 0x78, 0x69, + 0x01, 0x00, 0x10, 0xb5, 0x04, 0x1c, 0x10, 0x1c, + 0x06, 0x4a, 0x51, 0x61, 0x00, 0xf0, 0xa3, 0xf8, + 0x10, 0x20, 0x00, 0x2c, 0x00, 0xd1, 0x11, 0x20, + 0x00, 0x22, 0x07, 0x21, 0x0f, 0xf0, 0x69, 0xff, + 0x10, 0xbd, 0x5c, 0x69, 0x01, 0x00, 0x01, 0x49, + 0x48, 0x62, 0x70, 0x47, 0x00, 0x00, 0x44, 0x7d, + 0x01, 0x00, 0x10, 0xb5, 0x09, 0x4c, 0x3c, 0x00, + 0xf4, 0x38, 0x00, 0x00, 0xe0, 0x69, 0x00, 0x28, + 0x0c, 0xd1, 0xe0, 0x62, 0x01, 0x20, 0xe0, 0x61, + 0x0b, 0xf0, 0x08, 0xfd, 0x0b, 0xf0, 0x74, 0xfe, + 0x01, 0x20, 0x00, 0xf0, 0xb5, 0xf8, 0x0f, 0xf0, + 0x4d, 0xfa, 0x60, 0x63, 0x10, 0xbd, 0x00, 0x00, + 0x44, 0x7d, 0x01, 0x00, 0x05, 0x49, 0x80, 0xb5, + 0x00, 0x20, 0xc8, 0x61, 0x88, 0x63, 0x00, 0xf0, + 0x89, 0xf8, 0x00, 0xf0, 0x01, 0xf9, 0x02, 0xf0, + 0x3c, 0x00, 0x30, 0x39, 0x00, 0x00, 0x91, 0xfb, + 0x80, 0xbd, 0x44, 0x7d, 0x01, 0x00, 0x10, 0xb5, + 0x01, 0x28, 0x38, 0xd1, 0x08, 0x06, 0x00, 0x0e, + 0x05, 0x28, 0x32, 0xd1, 0x1d, 0x4c, 0x20, 0x78, + 0x01, 0x28, 0x09, 0xd0, 0x02, 0x28, 0x1b, 0xd0, + 0x03, 0x28, 0x2a, 0xd1, 0x02, 0xf0, 0x7d, 0xfb, + 0x00, 0xf0, 0x6f, 0xf8, 0x01, 0x20, 0x10, 0xe0, + 0x17, 0x48, 0x21, 0x6b, 0x0b, 0xf0, 0x1b, 0xfd, + 0x0b, 0xf0, 0x3c, 0x00, 0x6c, 0x39, 0x00, 0x00, + 0x41, 0xfe, 0x15, 0x48, 0x00, 0x69, 0x03, 0x28, + 0x01, 0xd3, 0xc0, 0x07, 0x03, 0xd5, 0x01, 0x21, + 0x20, 0x6b, 0x07, 0xf0, 0x19, 0xff, 0x02, 0x20, + 0x00, 0xf0, 0x78, 0xf8, 0x10, 0xbd, 0x0f, 0x48, + 0x00, 0x68, 0x20, 0x64, 0x0a, 0x48, 0x5c, 0x30, + 0xc1, 0x68, 0x02, 0x69, 0x89, 0x18, 0xc1, 0x60, + 0x03, 0xf0, 0xcc, 0xfc, 0x03, 0x20, 0x00, 0xf0, + 0x69, 0xf8, 0x01, 0x20, 0x3c, 0x00, 0xa8, 0x39, + 0x00, 0x00, 0xe0, 0x62, 0x10, 0xbd, 0x09, 0x21, + 0x00, 0xe0, 0x08, 0x21, 0x09, 0x20, 0xfd, 0xf7, + 0x76, 0xfc, 0x10, 0xbd, 0x00, 0x00, 0x44, 0x7d, + 0x01, 0x00, 0x34, 0x63, 0x01, 0x00, 0xf4, 0x68, + 0x01, 0x00, 0x78, 0x6e, 0x01, 0x00, 0xb0, 0xb5, + 0x0f, 0x4c, 0x20, 0x78, 0x65, 0x1e, 0x01, 0x28, + 0x0f, 0xd1, 0x00, 0x20, 0xff, 0xf7, 0xa1, 0xfc, + 0x0c, 0x49, 0x09, 0x88, 0x49, 0x08, 0x3c, 0x00, + 0xe4, 0x39, 0x00, 0x00, 0x40, 0x1a, 0x0f, 0xf0, + 0x19, 0xf9, 0x00, 0x28, 0x04, 0xd0, 0x28, 0x78, + 0x01, 0x28, 0x07, 0xd0, 0x02, 0x28, 0x05, 0xd0, + 0x20, 0x78, 0x00, 0x28, 0x04, 0xd1, 0x28, 0x78, + 0x03, 0x28, 0x01, 0xd1, 0x01, 0x20, 0xb0, 0xbd, + 0x00, 0x20, 0xb0, 0xbd, 0x45, 0x7d, 0x01, 0x00, + 0xf4, 0x67, 0x01, 0x00, 0x01, 0x49, 0xc8, 0x64, + 0x70, 0x47, 0x00, 0x00, 0x44, 0x7d, 0x01, 0x00, + 0x3c, 0x00, 0x20, 0x3a, 0x00, 0x00, 0x04, 0x49, + 0x05, 0x4a, 0x89, 0x68, 0x12, 0x6d, 0x01, 0x20, + 0x91, 0x42, 0x00, 0xd3, 0x00, 0x20, 0x70, 0x47, + 0x00, 0x00, 0xf4, 0x68, 0x01, 0x00, 0x44, 0x7d, + 0x01, 0x00, 0x10, 0xb5, 0x06, 0x4c, 0x20, 0x6b, + 0x07, 0xf0, 0xf9, 0xfe, 0xa0, 0x6b, 0x00, 0x28, + 0x03, 0xd1, 0x03, 0x48, 0x21, 0x6b, 0x0b, 0xf0, + 0x92, 0xfc, 0x10, 0xbd, 0x00, 0x00, 0x44, 0x7d, + 0x01, 0x00, 0x3c, 0x00, 0x5c, 0x3a, 0x00, 0x00, + 0x34, 0x63, 0x01, 0x00, 0x04, 0x48, 0x00, 0x78, + 0x02, 0x28, 0x01, 0xd0, 0x03, 0x28, 0x01, 0xd1, + 0x01, 0x20, 0x70, 0x47, 0x00, 0x20, 0x70, 0x47, + 0x44, 0x7d, 0x01, 0x00, 0xf8, 0xb5, 0x07, 0x1c, + 0xff, 0xf7, 0xd0, 0xff, 0x06, 0x1c, 0x01, 0x2f, + 0x26, 0x4d, 0x1f, 0xd0, 0x02, 0x2f, 0x45, 0xd0, + 0x03, 0x2f, 0x12, 0xd1, 0x24, 0x48, 0x25, 0x4b, + 0x00, 0x69, 0x6a, 0x69, 0x3c, 0x00, 0x98, 0x3a, + 0x00, 0x00, 0x41, 0x08, 0x5a, 0x43, 0x23, 0x4b, + 0xd4, 0x18, 0x8c, 0x42, 0x00, 0xd9, 0x0c, 0x1c, + 0x00, 0x2e, 0x05, 0xd0, 0x1e, 0x49, 0x5b, 0x39, + 0x09, 0x78, 0x00, 0x29, 0x00, 0xd1, 0x04, 0x1c, + 0x05, 0x22, 0x21, 0x1c, 0x09, 0x20, 0x0f, 0xf0, + 0x80, 0xfd, 0x18, 0x4a, 0x5c, 0x3a, 0x17, 0x70, + 0xf8, 0xbd, 0xff, 0xf7, 0xd6, 0xfb, 0x00, 0x28, + 0x02, 0xd0, 0x28, 0x69, 0x00, 0x28, 0x3c, 0x00, + 0xd4, 0x3a, 0x00, 0x00, 0x0e, 0xd0, 0x04, 0xf0, + 0xcf, 0xfb, 0x13, 0x4b, 0x69, 0x69, 0x11, 0x4a, + 0x59, 0x43, 0x5c, 0x3a, 0xd2, 0x6b, 0x89, 0x18, + 0x88, 0x42, 0x01, 0xd9, 0x44, 0x1a, 0x04, 0xe0, + 0x00, 0x24, 0x02, 0xe0, 0x04, 0xf0, 0xae, 0xfd, + 0x04, 0x1c, 0x00, 0x2e, 0xdb, 0xd0, 0x09, 0x48, + 0x5b, 0x38, 0x00, 0x78, 0x01, 0x28, 0xd6, 0xd1, + 0x08, 0x4b, 0x9c, 0x42, 0x02, 0xd9, 0x58, 0x42, + 0x3c, 0x00, 0x10, 0x3b, 0x00, 0x00, 0x24, 0x18, + 0xd0, 0xe7, 0x00, 0x24, 0xce, 0xe7, 0x04, 0xf0, + 0xae, 0xfb, 0xca, 0xe7, 0x00, 0x00, 0xf4, 0x68, + 0x01, 0x00, 0xa0, 0x7d, 0x01, 0x00, 0x98, 0x3a, + 0x00, 0x00, 0x88, 0x13, 0x00, 0x00, 0x80, 0xb5, + 0x05, 0x21, 0x09, 0x20, 0x0f, 0xf0, 0x7d, 0xfd, + 0x02, 0x49, 0x00, 0x20, 0x08, 0x70, 0x80, 0xbd, + 0x00, 0x00, 0x44, 0x7d, 0x01, 0x00, 0x70, 0xb5, + 0x06, 0x1c, 0x3c, 0x00, 0x4c, 0x3b, 0x00, 0x00, + 0x0d, 0xf0, 0xbc, 0xfa, 0xff, 0xf7, 0xce, 0xfe, + 0x09, 0x4c, 0x0a, 0x48, 0x21, 0x6b, 0x0b, 0xf0, + 0x21, 0xfc, 0x01, 0x25, 0x01, 0x21, 0x30, 0x06, + 0x00, 0x0e, 0xa5, 0x63, 0x07, 0xf0, 0x3a, 0xfe, + 0x05, 0x48, 0x29, 0x02, 0x09, 0x58, 0x00, 0x29, + 0x00, 0xd1, 0x05, 0x61, 0x70, 0xbd, 0x00, 0x00, + 0x44, 0x7d, 0x01, 0x00, 0x34, 0x63, 0x01, 0x00, + 0xf4, 0x67, 0x01, 0x00, 0x3c, 0x00, 0x88, 0x3b, + 0x00, 0x00, 0x02, 0x4a, 0x11, 0x6c, 0x08, 0x43, + 0x10, 0x64, 0x70, 0x47, 0x00, 0x00, 0x44, 0x7d, + 0x01, 0x00, 0x80, 0xb5, 0xff, 0xf7, 0xbf, 0xfe, + 0x0b, 0xf0, 0xa1, 0xfb, 0x80, 0xbd, 0x02, 0x4a, + 0x01, 0x1c, 0x10, 0x69, 0x11, 0x61, 0x70, 0x47, + 0x00, 0x00, 0x44, 0x7d, 0x01, 0x00, 0xf3, 0xb5, + 0x06, 0x1c, 0x00, 0x20, 0x89, 0xb0, 0xf8, 0x4c, + 0x08, 0x90, 0xe2, 0x69, 0x08, 0x25, 0x3c, 0x00, + 0xc4, 0x3b, 0x00, 0x00, 0x00, 0x2a, 0x03, 0xd0, + 0x06, 0xa9, 0x07, 0xa8, 0xfc, 0xf7, 0x06, 0xfc, + 0x30, 0x1c, 0xf3, 0x4e, 0x00, 0x27, 0x20, 0x36, + 0x82, 0x28, 0x6f, 0xd0, 0x15, 0xdc, 0x01, 0x28, + 0x18, 0xd0, 0x80, 0x28, 0x6b, 0xd1, 0xee, 0x4d, + 0x80, 0x3d, 0xa8, 0x68, 0x01, 0x28, 0x67, 0xd1, + 0x68, 0x68, 0x0f, 0xf0, 0x1b, 0xf8, 0x00, 0x28, + 0x63, 0xd1, 0x01, 0x21, 0x01, 0x20, 0x0d, 0xf0, + 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x9d, 0xf8, + 0x08, 0xf0, 0xdb, 0xfd, 0x0b, 0xb0, 0xf0, 0xbd, + 0x83, 0x28, 0x6d, 0xd0, 0x84, 0x28, 0x55, 0xd1, + 0xe7, 0xe0, 0x0a, 0x98, 0x0a, 0x28, 0x04, 0xd2, + 0x03, 0xa3, 0x1b, 0x18, 0x1b, 0x5a, 0x5b, 0x00, + 0x9f, 0x44, 0xf6, 0xe0, 0x00, 0x00, 0xee, 0x00, + 0x0b, 0x00, 0xf7, 0x00, 0xf7, 0x00, 0xf7, 0x00, + 0xf7, 0x00, 0x2f, 0x00, 0x88, 0x00, 0x8b, 0x00, + 0xad, 0x00, 0x3c, 0x00, 0x3c, 0x3c, 0x00, 0x00, + 0x00, 0xf0, 0x56, 0xfe, 0x00, 0x28, 0x17, 0xd0, + 0xd6, 0x4a, 0x80, 0x3a, 0xd1, 0x6a, 0x06, 0x98, + 0x81, 0x42, 0x16, 0xd0, 0x06, 0x21, 0x00, 0x28, + 0x00, 0xd1, 0x07, 0x21, 0x0d, 0x06, 0x2d, 0x0e, + 0x00, 0x28, 0x0e, 0xd0, 0xcf, 0x4a, 0x01, 0x20, + 0x80, 0x3a, 0x50, 0x65, 0x0f, 0xf0, 0xa0, 0xf8, + 0xcc, 0x4a, 0x80, 0x3a, 0x50, 0x66, 0x04, 0xe0, + 0x00, 0x21, 0x16, 0x20, 0x3c, 0x00, 0x78, 0x3c, + 0x00, 0x00, 0x0f, 0xf0, 0xdc, 0xfc, 0x01, 0x25, + 0x02, 0x20, 0x05, 0x90, 0x2e, 0xe2, 0xc6, 0x48, + 0x80, 0x38, 0x40, 0x6d, 0x00, 0x28, 0x2e, 0xd0, + 0xc6, 0x49, 0x20, 0x69, 0xc4, 0x4d, 0x40, 0x18, + 0x0e, 0xf0, 0xc1, 0xff, 0x00, 0x28, 0x12, 0xd0, + 0x0f, 0xf0, 0x85, 0xf8, 0xc1, 0x49, 0x49, 0x42, + 0x40, 0x18, 0xbd, 0x49, 0x20, 0x61, 0x80, 0x39, + 0x48, 0x6e, 0x40, 0x19, 0x0e, 0xf0, 0x3c, 0x00, + 0xb4, 0x3c, 0x00, 0x00, 0xbb, 0xff, 0x00, 0x28, + 0x11, 0xd0, 0x0a, 0xe0, 0xf7, 0xe0, 0x17, 0xe2, + 0xb2, 0xe0, 0xb0, 0xe0, 0xb6, 0x49, 0x20, 0x69, + 0x80, 0x39, 0x49, 0x6e, 0x40, 0x1a, 0xa8, 0x42, + 0x05, 0xdb, 0xb3, 0x49, 0xb5, 0x4d, 0x80, 0x39, + 0x4f, 0x65, 0x03, 0xf0, 0x27, 0xfb, 0x06, 0x22, + 0x29, 0x1c, 0x16, 0x20, 0x0f, 0xf0, 0x72, 0xfc, + 0x47, 0xe0, 0x95, 0xe0, 0x00, 0xf0, 0xfe, 0xfd, + 0x3c, 0x00, 0xf0, 0x3c, 0x00, 0x00, 0x00, 0x28, + 0x42, 0xd1, 0xaa, 0x4d, 0xc4, 0x3d, 0xef, 0x60, + 0x08, 0xf0, 0x19, 0xfd, 0x03, 0xf0, 0x15, 0xfb, + 0xa8, 0x6a, 0x00, 0x28, 0x02, 0xd0, 0xff, 0xf7, + 0x4c, 0xff, 0xaf, 0x62, 0xa4, 0x48, 0x80, 0x38, + 0x00, 0x68, 0x00, 0x21, 0xff, 0xf7, 0xf9, 0xfc, + 0x08, 0xf0, 0x3f, 0xf9, 0x09, 0x21, 0x16, 0x20, + 0x0f, 0xf0, 0x87, 0xfc, 0x00, 0x22, 0x16, 0x21, + 0x83, 0x20, 0x3c, 0x00, 0x2c, 0x3d, 0x00, 0x00, + 0x0f, 0xf0, 0x40, 0xfd, 0xff, 0xf7, 0x86, 0xfc, + 0x21, 0xe0, 0x00, 0xf0, 0x1b, 0xfe, 0x1e, 0xe0, + 0x06, 0xf0, 0x54, 0xfa, 0x97, 0x4d, 0x80, 0x3d, + 0xa9, 0x6f, 0x40, 0x1a, 0x04, 0x90, 0x06, 0x98, + 0x00, 0x28, 0x01, 0xd0, 0xaf, 0x65, 0x02, 0xe0, + 0xa8, 0x6d, 0x00, 0x28, 0x08, 0xd1, 0x91, 0x48, + 0xc4, 0x38, 0x00, 0x78, 0x80, 0x07, 0x03, 0xd5, + 0x92, 0x48, 0x47, 0x60, 0x3c, 0x00, 0x68, 0x3d, + 0x00, 0x00, 0x00, 0xf0, 0x02, 0xfe, 0x04, 0x98, + 0xff, 0x38, 0x23, 0x38, 0x14, 0x28, 0x02, 0xd2, + 0x01, 0x20, 0xe8, 0x63, 0x53, 0xe0, 0xef, 0x63, + 0x51, 0xe0, 0x87, 0x4a, 0xb5, 0x7a, 0x80, 0x3a, + 0x00, 0x2d, 0x4c, 0xd0, 0x0d, 0xf0, 0x71, 0xff, + 0x00, 0xf0, 0xad, 0xfd, 0x07, 0x1c, 0x82, 0x48, + 0x80, 0x38, 0x40, 0x6f, 0xff, 0x30, 0x5f, 0x30, + 0x0e, 0xf0, 0x3d, 0xff, 0x02, 0x1c, 0x3c, 0x00, + 0xa4, 0x3d, 0x00, 0x00, 0x7e, 0x48, 0x80, 0x38, + 0x40, 0x6d, 0x00, 0x28, 0x1a, 0xd1, 0x00, 0xf0, + 0xf1, 0xfd, 0x00, 0x28, 0x16, 0xd1, 0x04, 0x2d, + 0x02, 0xd1, 0x00, 0x2f, 0x12, 0xd1, 0x1b, 0xe0, + 0x00, 0x2f, 0x06, 0xd0, 0x02, 0x2d, 0x14, 0xd0, + 0x79, 0x48, 0x40, 0x68, 0x00, 0x28, 0x09, 0xd0, + 0x12, 0xe0, 0x00, 0x2a, 0x10, 0xd1, 0x4b, 0x21, + 0xc9, 0x00, 0x01, 0x23, 0x09, 0x22, 0x16, 0x20, + 0x3c, 0x00, 0xe0, 0x3d, 0x00, 0x00, 0x0f, 0xf0, + 0xd6, 0xfc, 0x6e, 0x4a, 0x73, 0x48, 0x80, 0x3a, + 0x11, 0x68, 0x0b, 0xf0, 0xd8, 0xfa, 0x18, 0xe0, + 0x01, 0x21, 0x00, 0x20, 0x01, 0xe0, 0x01, 0x21, + 0x01, 0x20, 0x00, 0xf0, 0x2a, 0xfe, 0x10, 0xe0, + 0x67, 0x4a, 0x6c, 0x49, 0x80, 0x3a, 0x90, 0x6e, + 0x40, 0x18, 0x90, 0x66, 0x01, 0x25, 0x08, 0x95, + 0x8b, 0xe1, 0x04, 0x21, 0x6c, 0xe1, 0x61, 0x4a, + 0x66, 0x48, 0x3c, 0x00, 0x1c, 0x3e, 0x00, 0x00, + 0x80, 0x3a, 0x11, 0x68, 0x0b, 0xf0, 0xaa, 0xfa, + 0x88, 0xe1, 0xaf, 0x60, 0xa8, 0x6f, 0xe8, 0x67, + 0x63, 0x48, 0x01, 0x6d, 0xa9, 0x67, 0x07, 0x9a, + 0x14, 0x20, 0x00, 0x2a, 0x00, 0xd1, 0x00, 0x20, + 0x08, 0x18, 0x12, 0x30, 0xa8, 0x66, 0x70, 0x78, + 0xb0, 0x70, 0x30, 0x78, 0x70, 0x70, 0x02, 0x20, + 0x30, 0x70, 0xa0, 0x69, 0xfc, 0xf7, 0xc2, 0xfa, + 0xef, 0x64, 0xa8, 0x6f, 0x3c, 0x00, 0x58, 0x3e, + 0x00, 0x00, 0xe9, 0x6f, 0x59, 0x4b, 0x40, 0x1a, + 0x98, 0x42, 0x12, 0xd2, 0x68, 0x6d, 0x06, 0x99, + 0x88, 0x42, 0x0e, 0xd0, 0x30, 0x78, 0x02, 0x28, + 0x0b, 0xd8, 0x0e, 0xf0, 0x9c, 0xff, 0xa9, 0x6f, + 0x08, 0x22, 0x40, 0x1a, 0x52, 0x49, 0x09, 0x1a, + 0x3b, 0x1c, 0x16, 0x20, 0x0f, 0xf0, 0x85, 0xfc, + 0x00, 0xe0, 0xaf, 0x65, 0x01, 0x20, 0x05, 0x90, + 0x08, 0x90, 0x43, 0x48, 0x02, 0x25, 0x3c, 0x00, + 0x94, 0x3e, 0x00, 0x00, 0xc4, 0x38, 0xc1, 0x68, + 0x00, 0x29, 0x72, 0xd1, 0x01, 0x21, 0xc1, 0x60, + 0x49, 0x48, 0x00, 0x6b, 0x00, 0x28, 0x6c, 0xd0, + 0x08, 0xf0, 0x66, 0xfc, 0x69, 0xe0, 0x3c, 0x48, + 0x00, 0x22, 0x01, 0x92, 0x80, 0x38, 0x80, 0x68, + 0x01, 0x28, 0x04, 0xd1, 0x38, 0x48, 0x80, 0x38, + 0x87, 0x60, 0x01, 0x20, 0x48, 0xe1, 0x3a, 0x48, + 0x01, 0x23, 0x43, 0x60, 0x34, 0x48, 0xc4, 0x38, + 0x3c, 0x00, 0xd0, 0x3e, 0x00, 0x00, 0x00, 0x78, + 0x00, 0x28, 0x0a, 0xd1, 0x00, 0xf0, 0x25, 0xfe, + 0x00, 0x28, 0x06, 0xd0, 0xff, 0x21, 0x91, 0x31, + 0x01, 0x23, 0x09, 0x22, 0x16, 0x20, 0x0f, 0xf0, + 0x52, 0xfc, 0x2c, 0x49, 0x80, 0x39, 0x48, 0x6f, + 0x89, 0x6f, 0x42, 0x1a, 0x03, 0x92, 0x06, 0xf0, + 0x76, 0xf9, 0x28, 0x49, 0x80, 0x39, 0x89, 0x6f, + 0x03, 0x9a, 0x40, 0x1a, 0x02, 0x90, 0x37, 0x20, + 0x00, 0x01, 0x3c, 0x00, 0x0c, 0x3f, 0x00, 0x00, + 0x10, 0x1a, 0x50, 0x28, 0x0d, 0xd2, 0x23, 0x48, + 0x80, 0x38, 0x40, 0x6d, 0x00, 0x28, 0x04, 0xd1, + 0x02, 0x98, 0xff, 0x38, 0x55, 0x38, 0x14, 0x28, + 0x01, 0xd2, 0x01, 0x22, 0x00, 0xe0, 0x00, 0x22, + 0x01, 0x92, 0x03, 0x9a, 0x01, 0x20, 0xff, 0x3a, + 0x0b, 0x3a, 0x50, 0x2a, 0x00, 0xd3, 0x00, 0x20, + 0x04, 0x90, 0x00, 0x28, 0x0a, 0xd0, 0x17, 0x48, + 0x80, 0x38, 0xc0, 0x6f, 0x3c, 0x00, 0x48, 0x3f, + 0x00, 0x00, 0x08, 0x1a, 0x9b, 0x21, 0xc9, 0x00, + 0x40, 0x1a, 0x14, 0x28, 0x01, 0xd2, 0x01, 0x22, + 0x00, 0xe0, 0x00, 0x22, 0x00, 0x92, 0x00, 0x2a, + 0x11, 0xd0, 0x0f, 0x4d, 0x01, 0x20, 0x80, 0x3d, + 0x68, 0x65, 0x0e, 0xf0, 0x20, 0xff, 0x68, 0x66, + 0x01, 0x25, 0x01, 0x21, 0x16, 0x20, 0x0f, 0xf0, + 0x5e, 0xfb, 0x00, 0x21, 0x16, 0x20, 0x0f, 0xf0, + 0x5a, 0xfb, 0x00, 0xe0, 0xba, 0xe0, 0x3c, 0x00, + 0x84, 0x3f, 0x00, 0x00, 0xf0, 0x79, 0x02, 0x28, + 0x3c, 0xd8, 0x05, 0x4a, 0x80, 0x3a, 0x51, 0x6c, + 0x00, 0x29, 0x37, 0xd1, 0x13, 0x6c, 0x11, 0x1c, + 0x00, 0x2b, 0x33, 0xd1, 0x16, 0xe0, 0x00, 0x00, + 0x24, 0x6d, 0x01, 0x00, 0x50, 0xc3, 0x00, 0x00, + 0xc0, 0x5c, 0x15, 0x00, 0x70, 0x99, 0x14, 0x00, + 0xb0, 0x57, 0x01, 0x00, 0x34, 0x63, 0x01, 0x00, + 0xe2, 0x04, 0x00, 0x00, 0x00, 0x90, 0x07, 0x00, + 0x3c, 0x00, 0xc0, 0x3f, 0x00, 0x00, 0x53, 0x07, + 0x00, 0x00, 0x1e, 0x02, 0x00, 0x00, 0xc8, 0x57, + 0x01, 0x00, 0x4a, 0x6d, 0x00, 0x2a, 0x02, 0xd0, + 0xb2, 0x7a, 0x02, 0x2a, 0x15, 0xd1, 0x00, 0x9a, + 0x00, 0x2a, 0x03, 0xd0, 0xca, 0x6d, 0x01, 0x32, + 0xca, 0x65, 0x00, 0xe0, 0xcf, 0x65, 0x01, 0x9a, + 0x00, 0x2a, 0x0b, 0xd0, 0x8a, 0x6f, 0xcb, 0x6f, + 0xd2, 0x1a, 0x5a, 0x4b, 0x9a, 0x42, 0x02, 0xd2, + 0x8a, 0x6d, 0x3c, 0x00, 0xfc, 0x3f, 0x00, 0x00, + 0x01, 0x32, 0x00, 0xe0, 0x01, 0x22, 0x8a, 0x65, + 0x00, 0xe0, 0x8f, 0x65, 0x04, 0x99, 0x00, 0x29, + 0x01, 0xd1, 0x02, 0x28, 0x0b, 0xd9, 0x54, 0x4a, + 0x02, 0x28, 0x1e, 0xd9, 0xd0, 0x6f, 0x61, 0x68, + 0x88, 0x42, 0x1a, 0xd1, 0x91, 0x6f, 0x08, 0x1a, + 0x50, 0x49, 0x88, 0x42, 0x15, 0xdd, 0x4e, 0x4b, + 0x98, 0x6f, 0xe1, 0x68, 0x40, 0x1a, 0x7d, 0x21, + 0xc9, 0x00, 0x88, 0x42, 0x3c, 0x00, 0x38, 0x40, + 0x00, 0x00, 0x0b, 0xdd, 0x61, 0x69, 0x40, 0x1a, + 0x00, 0x28, 0x04, 0xdd, 0x02, 0x11, 0x40, 0x11, + 0x10, 0x18, 0x40, 0x18, 0x01, 0xe0, 0x80, 0x10, + 0x08, 0x18, 0x60, 0x61, 0x58, 0x6f, 0xe0, 0x60, + 0x03, 0x98, 0xff, 0x38, 0x23, 0x38, 0x14, 0x28, + 0x09, 0xd2, 0x02, 0x98, 0xff, 0x38, 0x23, 0x38, + 0x14, 0x28, 0x04, 0xd2, 0x3e, 0x4a, 0x90, 0x6f, + 0x50, 0x64, 0x90, 0x6a, 0x90, 0x64, 0x3c, 0x00, + 0x74, 0x40, 0x00, 0x00, 0x0e, 0xf0, 0x9a, 0xfe, + 0x3a, 0x49, 0x49, 0x6c, 0x40, 0x1a, 0x3b, 0x49, + 0x88, 0x42, 0x01, 0xd9, 0x37, 0x49, 0x4f, 0x64, + 0x39, 0x49, 0x03, 0x98, 0x40, 0x18, 0x14, 0x28, + 0x07, 0xd2, 0x34, 0x49, 0xc8, 0x6b, 0x00, 0x28, + 0x03, 0xd0, 0x88, 0x6f, 0x08, 0x64, 0x88, 0x6a, + 0x88, 0x64, 0x0e, 0xf0, 0x83, 0xfe, 0x2f, 0x49, + 0x09, 0x6c, 0x40, 0x1a, 0x31, 0x49, 0x88, 0x42, + 0x3c, 0x00, 0xb0, 0x40, 0x00, 0x00, 0x01, 0xd9, + 0x2c, 0x48, 0x07, 0x64, 0x04, 0x20, 0x05, 0x90, + 0x08, 0x21, 0x16, 0x20, 0x0f, 0xf0, 0xb9, 0xfa, + 0x28, 0x48, 0x40, 0x6d, 0x00, 0x28, 0x02, 0xd0, + 0x04, 0x99, 0x00, 0x29, 0x08, 0xd0, 0x29, 0x49, + 0x00, 0x28, 0x00, 0xd1, 0x29, 0x49, 0x3b, 0x1c, + 0x06, 0x22, 0x16, 0x20, 0x0f, 0xf0, 0x57, 0xfb, + 0x02, 0x2d, 0x09, 0xd0, 0x06, 0x2d, 0x0a, 0xd0, + 0x07, 0x2d, 0x3c, 0x00, 0xec, 0x40, 0x00, 0x00, + 0x13, 0xd1, 0x07, 0xe0, 0x01, 0x21, 0x16, 0x20, + 0xfd, 0xf7, 0xd6, 0xf8, 0x1e, 0xe0, 0x1a, 0x4a, + 0x57, 0x63, 0x97, 0x63, 0x18, 0x4a, 0x06, 0x98, + 0xd0, 0x62, 0x07, 0x99, 0x11, 0x63, 0x53, 0x6b, + 0x18, 0x43, 0x50, 0x63, 0x90, 0x6b, 0x08, 0x43, + 0x90, 0x63, 0x05, 0x98, 0x00, 0x28, 0x05, 0xd0, + 0x05, 0x98, 0x0c, 0xf0, 0x5f, 0xfa, 0x05, 0x98, + 0x0c, 0xf0, 0xd2, 0xf9, 0x3c, 0x00, 0x28, 0x41, + 0x00, 0x00, 0x08, 0x2d, 0x05, 0xd0, 0x0d, 0x48, + 0x44, 0x38, 0x85, 0x70, 0x28, 0x1c, 0x03, 0xf0, + 0xdc, 0xfd, 0x11, 0x49, 0xe0, 0x69, 0x88, 0x42, + 0x00, 0xd1, 0x61, 0xe5, 0x08, 0x98, 0x00, 0x28, + 0xfb, 0xd0, 0xb0, 0x7a, 0x02, 0x28, 0xf8, 0xd1, + 0x01, 0x21, 0x16, 0x20, 0x0f, 0xf0, 0x6f, 0xfa, + 0x02, 0x20, 0x0d, 0xf0, 0xe8, 0xfe, 0x53, 0xe5, + 0x00, 0x00, 0x53, 0x07, 0x00, 0x00, 0x3c, 0x00, + 0x64, 0x41, 0x00, 0x00, 0xa4, 0x6c, 0x01, 0x00, + 0x20, 0xa1, 0x07, 0x00, 0x20, 0x4e, 0x00, 0x00, + 0x3f, 0xfb, 0xff, 0xff, 0xa0, 0x86, 0x01, 0x00, + 0x50, 0xc3, 0x00, 0x00, 0xc0, 0x5c, 0x15, 0x00, + 0xf1, 0x1d, 0x00, 0x00, 0x70, 0x47, 0x00, 0x00, + 0x70, 0x47, 0x00, 0x00, 0xf8, 0xb5, 0x21, 0x48, + 0x00, 0x68, 0x21, 0x4d, 0x69, 0x69, 0x08, 0x40, + 0x01, 0xd1, 0x01, 0x27, 0x00, 0xe0, 0x00, 0x27, + 0x3c, 0x00, 0xa0, 0x41, 0x00, 0x00, 0x1d, 0x4d, + 0x01, 0x26, 0x69, 0x6a, 0x00, 0x29, 0x00, 0xd0, + 0x00, 0x26, 0x1b, 0x4d, 0x1a, 0x48, 0x2c, 0x1c, + 0xa0, 0x30, 0x02, 0x7a, 0x28, 0x1c, 0x40, 0x30, + 0x80, 0x34, 0x10, 0x23, 0xb7, 0x42, 0x10, 0xd1, + 0x01, 0x25, 0xc5, 0x80, 0x00, 0x29, 0x00, 0xd0, + 0x00, 0x23, 0x1a, 0x43, 0x11, 0x1c, 0x01, 0x73, + 0x01, 0x20, 0x0e, 0xf0, 0x88, 0xfe, 0x08, 0x20, + 0x20, 0x70, 0x3c, 0x00, 0xdc, 0x41, 0x00, 0x00, + 0x00, 0x22, 0x16, 0x21, 0x80, 0x20, 0x13, 0xe0, + 0x11, 0x27, 0xc7, 0x80, 0x2e, 0x1c, 0x0b, 0x4d, + 0x00, 0x29, 0x00, 0xd1, 0x00, 0x23, 0x1a, 0x43, + 0x11, 0x1c, 0x01, 0x73, 0x01, 0x20, 0x0e, 0xf0, + 0x75, 0xfe, 0x08, 0x20, 0x20, 0x70, 0x30, 0x6d, + 0x00, 0x22, 0x16, 0x21, 0x68, 0x67, 0x82, 0x20, + 0x0f, 0xf0, 0xd0, 0xfa, 0xf8, 0xbd, 0x00, 0x00, + 0x10, 0x00, 0x07, 0x00, 0x3c, 0x00, 0x18, 0x42, + 0x00, 0x00, 0xa4, 0x6c, 0x01, 0x00, 0x00, 0x90, + 0x07, 0x00, 0xb0, 0xb5, 0x0f, 0x4d, 0x04, 0x1c, + 0xaa, 0x7a, 0x01, 0x21, 0x08, 0x1c, 0x00, 0x2a, + 0x00, 0xd0, 0x00, 0x20, 0x00, 0x2c, 0x00, 0xd0, + 0x00, 0x21, 0x88, 0x42, 0x0a, 0xd0, 0x00, 0x2c, + 0x04, 0xd1, 0x00, 0xf0, 0x42, 0xfb, 0x00, 0xf0, + 0xd6, 0xfa, 0x03, 0xe0, 0x00, 0xf0, 0xd9, 0xfa, + 0x00, 0xf0, 0x09, 0xf8, 0xa8, 0x7a, 0x3c, 0x00, + 0x54, 0x42, 0x00, 0x00, 0x02, 0x49, 0xe4, 0x39, + 0x48, 0x71, 0xac, 0x72, 0xb0, 0xbd, 0x00, 0x00, + 0x44, 0x6d, 0x01, 0x00, 0x80, 0xb5, 0x3e, 0xf0, + 0x55, 0xf8, 0x02, 0x49, 0x01, 0x20, 0x08, 0x70, + 0x80, 0xbd, 0x00, 0x00, 0x68, 0x7e, 0x01, 0x00, + 0xf3, 0xb5, 0x01, 0x20, 0x8d, 0xb0, 0x0f, 0x1c, + 0x01, 0x24, 0x08, 0x90, 0x0e, 0xf0, 0x92, 0xfd, + 0x06, 0x1c, 0x00, 0xf0, 0xb5, 0xfa, 0x09, 0x90, + 0x3c, 0x00, 0x90, 0x42, 0x00, 0x00, 0x00, 0xf0, + 0x80, 0xfb, 0x07, 0x90, 0xfe, 0xf7, 0x3f, 0xfa, + 0x05, 0x1c, 0x00, 0x21, 0x0c, 0x91, 0x08, 0xf0, + 0xf0, 0xfb, 0x00, 0x28, 0x01, 0xd1, 0x01, 0x20, + 0x00, 0xe0, 0x00, 0x20, 0x0a, 0x90, 0xfe, 0xf7, + 0x12, 0xfd, 0x05, 0xf0, 0xe0, 0xfe, 0x0b, 0x90, + 0x00, 0x2d, 0x23, 0xd0, 0x28, 0x88, 0x41, 0x07, + 0x20, 0xd4, 0x29, 0x1d, 0x04, 0x91, 0x0a, 0x35, + 0x00, 0x06, 0x3c, 0x00, 0xcc, 0x42, 0x00, 0x00, + 0x80, 0x0e, 0x01, 0x21, 0x20, 0x28, 0x03, 0x95, + 0x00, 0xd0, 0x00, 0x21, 0x0d, 0x1c, 0x04, 0x98, + 0x06, 0xf0, 0x38, 0xfd, 0x0c, 0x90, 0x04, 0x98, + 0x06, 0xf0, 0x10, 0xfd, 0x00, 0x28, 0x08, 0xd0, + 0x03, 0x98, 0x01, 0xf0, 0x87, 0xfa, 0x00, 0x28, + 0x03, 0xd0, 0x00, 0x2d, 0x01, 0xd1, 0x01, 0x20, + 0x00, 0xe0, 0x00, 0x20, 0x0c, 0x99, 0x01, 0x43, + 0x0c, 0x91, 0xfc, 0xf7, 0x3c, 0x00, 0x08, 0x43, + 0x00, 0x00, 0x23, 0xff, 0x00, 0x28, 0x2f, 0xd0, + 0x07, 0xf0, 0x99, 0xff, 0x05, 0x1c, 0x07, 0xf0, + 0xb2, 0xff, 0x04, 0x90, 0xff, 0xf7, 0xf3, 0xf8, + 0x0c, 0x99, 0x01, 0x43, 0x00, 0x2d, 0x06, 0xd0, + 0x04, 0x98, 0xf0, 0x4a, 0x30, 0x1a, 0x90, 0x42, + 0x01, 0xd2, 0x01, 0x20, 0x00, 0xe0, 0x00, 0x20, + 0x08, 0x43, 0x0c, 0x90, 0x0b, 0x98, 0x0a, 0x9b, + 0x18, 0x43, 0x01, 0x1c, 0x0b, 0x91, 0x3c, 0x00, + 0x44, 0x43, 0x00, 0x00, 0x05, 0xf0, 0xce, 0xfe, + 0x00, 0x28, 0x1a, 0xd1, 0x00, 0x2d, 0x06, 0xd0, + 0x04, 0x98, 0xe7, 0x49, 0x30, 0x1a, 0x88, 0x42, + 0x01, 0xd2, 0x01, 0x20, 0x00, 0xe0, 0x00, 0x20, + 0x0c, 0x99, 0x08, 0x43, 0x05, 0x1c, 0x00, 0xf0, + 0x1f, 0xfb, 0x28, 0x43, 0x03, 0xe0, 0x00, 0xf0, + 0x1b, 0xfb, 0x0c, 0x99, 0x08, 0x43, 0x0c, 0x90, + 0x00, 0xf0, 0xd4, 0xfb, 0x0b, 0x99, 0x01, 0x43, + 0x3c, 0x00, 0x80, 0x43, 0x00, 0x00, 0x0b, 0x91, + 0xdc, 0x49, 0xc8, 0x68, 0x00, 0x28, 0x01, 0xd0, + 0x01, 0x38, 0xc8, 0x60, 0x08, 0xf0, 0xe7, 0xfb, + 0x06, 0x90, 0x08, 0xf0, 0x90, 0xfd, 0x31, 0x1a, + 0x05, 0x91, 0x06, 0x99, 0xd6, 0x48, 0x81, 0x42, + 0x08, 0xd8, 0x00, 0x2f, 0x08, 0xd1, 0x05, 0x99, + 0x40, 0x08, 0x81, 0x42, 0x04, 0xd9, 0x06, 0x99, + 0x81, 0x42, 0x01, 0xd9, 0x00, 0x24, 0x8b, 0xe0, + 0xd0, 0x48, 0x3c, 0x00, 0xbc, 0x43, 0x00, 0x00, + 0x05, 0x99, 0xd0, 0x4d, 0x81, 0x42, 0x26, 0xd2, + 0xe8, 0x79, 0x10, 0x28, 0x06, 0xd2, 0x00, 0x2f, + 0x21, 0xd1, 0xcc, 0x48, 0xa0, 0x38, 0x80, 0x6a, + 0x00, 0x28, 0x1c, 0xd1, 0x09, 0xf0, 0x62, 0xff, + 0x04, 0x90, 0x00, 0x28, 0x02, 0xd1, 0x00, 0x20, + 0xc3, 0x49, 0x13, 0xe0, 0x09, 0xf0, 0x10, 0xfe, + 0x00, 0x28, 0x03, 0xd0, 0xc4, 0x48, 0xc0, 0x69, + 0x00, 0x28, 0xf4, 0xd0, 0x3c, 0x00, 0xf8, 0x43, + 0x00, 0x00, 0x04, 0x98, 0x05, 0x28, 0x03, 0xd0, + 0xc1, 0x48, 0x00, 0x6a, 0x00, 0x28, 0x65, 0xd1, + 0xbb, 0x49, 0x48, 0x6a, 0x00, 0x28, 0x23, 0xd0, + 0x01, 0x38, 0x48, 0x62, 0x00, 0xf0, 0x87, 0xff, + 0x00, 0x28, 0x11, 0xd0, 0xbb, 0x48, 0x05, 0x99, + 0x81, 0x42, 0x0d, 0xd2, 0x01, 0xf0, 0x9b, 0xf8, + 0x04, 0x30, 0x0d, 0xf0, 0xee, 0xfc, 0x40, 0x30, + 0xc1, 0x7a, 0x01, 0x29, 0x4e, 0xd0, 0x3c, 0x00, + 0x34, 0x44, 0x00, 0x00, 0x80, 0x7a, 0x00, 0x28, + 0x01, 0xd0, 0x05, 0x28, 0x49, 0xd3, 0x01, 0xf0, + 0xdf, 0xf8, 0x02, 0x28, 0x10, 0xd0, 0x00, 0x2f, + 0x02, 0xd1, 0x06, 0x98, 0x00, 0x28, 0x40, 0xd1, + 0x00, 0x20, 0x08, 0x90, 0x82, 0xe1, 0xaa, 0x48, + 0xa0, 0x38, 0xc0, 0x68, 0x00, 0x28, 0x38, 0xd0, + 0xa8, 0x48, 0x80, 0x69, 0x48, 0x62, 0x34, 0xe0, + 0x0a, 0xa9, 0x03, 0xc9, 0x08, 0x43, 0x45, 0xd0, + 0x3c, 0x00, 0x70, 0x44, 0x00, 0x00, 0xa3, 0x48, + 0x29, 0x78, 0xa0, 0x38, 0x02, 0x29, 0x40, 0xd8, + 0x40, 0x6d, 0x00, 0x28, 0x0a, 0xd0, 0x9f, 0x48, + 0xa2, 0x49, 0x20, 0x38, 0xc0, 0x68, 0x40, 0x18, + 0x0e, 0xf0, 0xc7, 0xfb, 0x00, 0x28, 0x01, 0xd0, + 0x01, 0x21, 0x00, 0xe0, 0x00, 0x21, 0x96, 0x4a, + 0x90, 0x6a, 0x00, 0x28, 0x02, 0xda, 0x64, 0x08, + 0x64, 0x00, 0x2a, 0xe0, 0x00, 0x29, 0x09, 0xd1, + 0x95, 0x4b, 0x3c, 0x00, 0xac, 0x44, 0x00, 0x00, + 0xa0, 0x3b, 0x5b, 0x6d, 0x00, 0x2b, 0x02, 0xd0, + 0x05, 0x28, 0x0d, 0xdb, 0x01, 0xe0, 0x07, 0x28, + 0x0a, 0xdb, 0x01, 0x20, 0xc0, 0x43, 0x90, 0x62, + 0x64, 0x08, 0x8e, 0x49, 0x64, 0x00, 0x00, 0x20, + 0xa0, 0x39, 0x88, 0x65, 0x14, 0xe0, 0xd1, 0xe0, + 0x39, 0x43, 0x11, 0xd1, 0x89, 0x49, 0xa0, 0x39, + 0xcb, 0x6d, 0x00, 0x2b, 0x02, 0xd1, 0x89, 0x6d, + 0x01, 0x29, 0x09, 0xd9, 0x3c, 0x00, 0xe8, 0x44, + 0x00, 0x00, 0x07, 0x9b, 0x00, 0x2b, 0x01, 0xd1, + 0x07, 0x28, 0x01, 0xdb, 0x64, 0x08, 0x64, 0x00, + 0x01, 0x30, 0x90, 0x62, 0xbd, 0xe0, 0x7d, 0x49, + 0x88, 0x69, 0x04, 0x90, 0x00, 0x20, 0x88, 0x61, + 0x0c, 0x98, 0x00, 0x28, 0x2c, 0xd0, 0x07, 0xf0, + 0x66, 0xfc, 0x00, 0x28, 0x02, 0xd0, 0x02, 0x20, + 0x04, 0x43, 0x25, 0xe0, 0x7a, 0x48, 0xc0, 0x6a, + 0x00, 0x28, 0x04, 0xd1, 0x77, 0x48, 0x3c, 0x00, + 0x24, 0x45, 0x00, 0x00, 0xa0, 0x38, 0xc0, 0x68, + 0x00, 0x28, 0x1c, 0xd1, 0x04, 0x98, 0x00, 0x28, + 0x0d, 0xd1, 0x28, 0x78, 0x10, 0x28, 0x02, 0xd3, + 0xe8, 0x78, 0x02, 0x28, 0x02, 0xd9, 0x28, 0x79, + 0x10, 0x28, 0x04, 0xd3, 0x04, 0x24, 0x6b, 0x49, + 0x01, 0x22, 0x8a, 0x61, 0x94, 0xe0, 0x6c, 0x48, + 0xa0, 0x38, 0x40, 0x6d, 0x00, 0x28, 0x71, 0xd0, + 0x05, 0xf0, 0xa2, 0xfd, 0x00, 0x28, 0x6d, 0xd0, + 0x3c, 0x00, 0x60, 0x45, 0x00, 0x00, 0x64, 0x08, + 0x64, 0x00, 0x88, 0xe0, 0xff, 0xf7, 0x5b, 0xfa, + 0x00, 0x28, 0x1a, 0xd0, 0x68, 0x48, 0x00, 0x78, + 0x02, 0x28, 0x01, 0xd1, 0x00, 0x2f, 0x14, 0xd1, + 0x00, 0x20, 0xfe, 0xf7, 0x70, 0xfe, 0x30, 0x1a, + 0x04, 0x90, 0xff, 0xf7, 0x6c, 0xfa, 0x00, 0x28, + 0x07, 0xd0, 0xff, 0xf7, 0x1e, 0xfa, 0x00, 0x28, + 0x03, 0xd0, 0x5d, 0x49, 0x04, 0x98, 0x88, 0x42, + 0x4f, 0xd3, 0x3c, 0x00, 0x9c, 0x45, 0x00, 0x00, + 0x05, 0xf0, 0x6c, 0xfd, 0x00, 0x28, 0x4b, 0xd1, + 0x53, 0x49, 0x08, 0x78, 0x03, 0x28, 0x08, 0xd1, + 0x88, 0x68, 0x01, 0x22, 0xd2, 0x07, 0x30, 0x1a, + 0x90, 0x42, 0x41, 0xd2, 0x01, 0x22, 0x0a, 0x70, + 0x57, 0xe0, 0x54, 0x48, 0x00, 0x78, 0x02, 0x28, + 0x01, 0xd1, 0x00, 0x2f, 0x51, 0xd1, 0x4a, 0x49, + 0x88, 0x68, 0x51, 0x49, 0x80, 0x1b, 0x88, 0x42, + 0x07, 0xd9, 0x01, 0x20, 0x3c, 0x00, 0xd8, 0x45, + 0x00, 0x00, 0xfe, 0xf7, 0x42, 0xfe, 0x7d, 0x21, + 0x09, 0x01, 0x40, 0x18, 0x44, 0x49, 0x88, 0x60, + 0x4a, 0x48, 0x00, 0x78, 0x02, 0x28, 0x04, 0xd1, + 0x07, 0x9b, 0x00, 0x2b, 0x01, 0xd1, 0x01, 0x20, + 0x00, 0xe0, 0x00, 0x20, 0x47, 0x4b, 0x47, 0x49, + 0x58, 0x43, 0x40, 0x18, 0x3c, 0x49, 0x89, 0x68, + 0x89, 0x1b, 0x88, 0x42, 0x30, 0xd9, 0x07, 0x9b, + 0x00, 0x20, 0x03, 0x93, 0x00, 0xf0, 0x3c, 0x00, + 0x14, 0x46, 0x00, 0x00, 0x79, 0xff, 0x02, 0x90, + 0xff, 0xf7, 0xd8, 0xf9, 0x04, 0x90, 0x01, 0xf0, + 0x57, 0xf8, 0x04, 0x99, 0x02, 0x9a, 0x51, 0x43, + 0x48, 0x43, 0x01, 0x90, 0x00, 0xf0, 0xdc, 0xff, + 0x41, 0x1c, 0x01, 0x98, 0x01, 0x22, 0x48, 0x43, + 0x11, 0x1c, 0x00, 0xe0, 0x1b, 0xe0, 0x31, 0x4b, + 0x5b, 0x6a, 0x83, 0x42, 0x00, 0xd3, 0x00, 0x21, + 0x03, 0x9b, 0x01, 0x22, 0x00, 0x2b, 0x00, 0xd0, + 0x3c, 0x00, 0x50, 0x46, 0x00, 0x00, 0x00, 0x22, + 0x2c, 0x4b, 0x51, 0x43, 0x9b, 0x6a, 0x01, 0x22, + 0x83, 0x42, 0x00, 0xd3, 0x00, 0x22, 0x50, 0x00, + 0x08, 0x18, 0x03, 0xd0, 0x23, 0x49, 0x03, 0x20, + 0x08, 0x70, 0x03, 0xe0, 0x09, 0x98, 0xc0, 0x68, + 0x06, 0x28, 0x08, 0xd9, 0x02, 0x24, 0x08, 0x98, + 0x00, 0x28, 0x6e, 0xd0, 0x1d, 0x49, 0x00, 0x20, + 0xc8, 0x61, 0x48, 0x61, 0xa5, 0xe0, 0x1a, 0x49, + 0x48, 0x69, 0x3c, 0x00, 0x8c, 0x46, 0x00, 0x00, + 0x00, 0x28, 0x0a, 0xd1, 0x00, 0x2f, 0x05, 0xd0, + 0x01, 0x22, 0x4a, 0x61, 0xc8, 0x69, 0x80, 0x18, + 0xc8, 0x61, 0x0a, 0xe0, 0x00, 0x20, 0xc8, 0x61, + 0x03, 0xe0, 0x00, 0x2f, 0x05, 0xd1, 0x00, 0x20, + 0x48, 0x61, 0x0d, 0x98, 0x00, 0x28, 0x00, 0xd1, + 0xc8, 0x68, 0x00, 0x20, 0x08, 0x90, 0x08, 0x78, + 0x01, 0x28, 0x2f, 0xd0, 0x02, 0x28, 0x4b, 0xd1, + 0x00, 0x2f, 0x08, 0xd1, 0x3c, 0x00, 0xc8, 0x46, + 0x00, 0x00, 0xe8, 0x78, 0x00, 0x28, 0x02, 0xd1, + 0x28, 0x78, 0x10, 0x28, 0x43, 0xd2, 0x28, 0x79, + 0x10, 0x28, 0x40, 0xd2, 0x48, 0x68, 0x0a, 0x69, + 0x30, 0x1a, 0x90, 0x42, 0x67, 0xd3, 0x01, 0x22, + 0x0a, 0x70, 0x38, 0xe0, 0x00, 0x00, 0xe2, 0x04, + 0x00, 0x00, 0x10, 0x27, 0x00, 0x00, 0x68, 0x7e, + 0x01, 0x00, 0xa0, 0x86, 0x01, 0x00, 0x88, 0x13, + 0x00, 0x00, 0x44, 0x6d, 0x01, 0x00, 0x3c, 0x00, + 0x04, 0x47, 0x00, 0x00, 0xc8, 0x57, 0x01, 0x00, + 0x50, 0xc3, 0x00, 0x00, 0x98, 0x3a, 0x00, 0x00, + 0xc0, 0x57, 0x01, 0x00, 0x40, 0x0d, 0x03, 0x00, + 0xc4, 0x09, 0x00, 0x00, 0xb2, 0x0c, 0x00, 0x00, + 0x00, 0x20, 0x0b, 0x9a, 0x0a, 0x9b, 0xc0, 0x43, + 0x1a, 0x43, 0x37, 0xd0, 0x00, 0x2f, 0x35, 0xd1, + 0x07, 0x9b, 0x00, 0x2b, 0x08, 0xd0, 0x6a, 0x78, + 0x02, 0x2a, 0x2f, 0xd9, 0x2a, 0x78, 0x10, 0x2a, + 0x3c, 0x00, 0x40, 0x47, 0x00, 0x00, 0x2c, 0xd2, + 0x2a, 0x79, 0x10, 0x2a, 0x29, 0xd2, 0x25, 0x4b, + 0x1a, 0x6c, 0x00, 0x2a, 0x06, 0xd0, 0x9a, 0x6a, + 0x9f, 0x6c, 0xba, 0x42, 0x02, 0xd1, 0x1f, 0x20, + 0x1f, 0xe0, 0x2e, 0xe0, 0x20, 0x4b, 0x5a, 0x6c, + 0x00, 0x2a, 0x03, 0xd0, 0x1f, 0x4f, 0xb3, 0x1a, + 0xbb, 0x42, 0x16, 0xd3, 0x1c, 0x4b, 0x00, 0x2a, + 0x05, 0xd0, 0x9a, 0x6a, 0x9f, 0x6c, 0xba, 0x42, + 0x01, 0xd1, 0x3c, 0x00, 0x7c, 0x47, 0x00, 0x00, + 0x0f, 0x20, 0x0d, 0xe0, 0x07, 0x9a, 0x00, 0x2a, + 0x04, 0xd0, 0xea, 0x79, 0x20, 0x2a, 0x01, 0xd1, + 0x00, 0x20, 0x05, 0xe0, 0xea, 0x79, 0x10, 0x2a, + 0x01, 0xd3, 0x03, 0x20, 0x00, 0xe0, 0x9a, 0x6a, + 0x12, 0x4a, 0x12, 0x68, 0x02, 0x40, 0x0b, 0xd1, + 0x01, 0x20, 0x08, 0x90, 0x02, 0x20, 0x08, 0x70, + 0x0f, 0x48, 0x08, 0x61, 0x4e, 0x60, 0x64, 0xe7, + 0xff, 0xe7, 0x01, 0x20, 0x3c, 0x00, 0xb8, 0x47, + 0x00, 0x00, 0x08, 0x90, 0x60, 0xe7, 0x0c, 0x49, + 0x88, 0x6a, 0x00, 0x28, 0x01, 0xda, 0x01, 0x30, + 0x02, 0xe0, 0x00, 0x28, 0x01, 0xdd, 0x00, 0x20, + 0x88, 0x62, 0x00, 0x20, 0x08, 0x62, 0x08, 0x99, + 0x20, 0x04, 0x08, 0x43, 0x0f, 0xb0, 0xf0, 0xbd, + 0x00, 0x00, 0xa4, 0x6c, 0x01, 0x00, 0x71, 0x02, + 0x00, 0x00, 0x08, 0x20, 0x07, 0x00, 0x53, 0x07, + 0x00, 0x00, 0x68, 0x7e, 0x01, 0x00, 0x3c, 0x00, + 0xf4, 0x47, 0x00, 0x00, 0x70, 0x47, 0x00, 0x00, + 0x00, 0x48, 0x70, 0x47, 0x50, 0x7e, 0x01, 0x00, + 0x80, 0xb5, 0x3d, 0xf0, 0x7f, 0xfd, 0x02, 0x49, + 0x01, 0x20, 0x08, 0x70, 0x80, 0xbd, 0x00, 0x00, + 0x3c, 0x7e, 0x01, 0x00, 0xf8, 0xb5, 0x0d, 0x1c, + 0x0e, 0xf0, 0xc8, 0xfa, 0x26, 0x49, 0x04, 0x1c, + 0x88, 0x6a, 0x26, 0x4e, 0x00, 0x28, 0x01, 0xd0, + 0x04, 0x20, 0x03, 0xe0, 0x70, 0x6a, 0x00, 0x28, + 0x3c, 0x00, 0x30, 0x48, 0x00, 0x00, 0x01, 0xd0, + 0x01, 0x38, 0x70, 0x62, 0x00, 0x27, 0x00, 0x2d, + 0x02, 0xd0, 0xb7, 0x61, 0xf7, 0x61, 0x0a, 0xe0, + 0xb0, 0x69, 0x1c, 0x49, 0x01, 0x30, 0xb0, 0x61, + 0x49, 0x6d, 0x00, 0x29, 0x03, 0xd0, 0x03, 0x28, + 0x01, 0xd9, 0x01, 0x20, 0xf0, 0x61, 0xb4, 0x60, + 0xf1, 0x68, 0x00, 0x91, 0x08, 0xf0, 0xf7, 0xfc, + 0xf0, 0x60, 0x00, 0x99, 0x88, 0x42, 0x02, 0xd0, + 0x30, 0x62, 0x3c, 0x00, 0x6c, 0x48, 0x00, 0x00, + 0x34, 0x61, 0x0b, 0xe0, 0x00, 0xf0, 0x90, 0xf8, + 0x00, 0x28, 0x01, 0xd0, 0x11, 0x48, 0x00, 0xe0, + 0x11, 0x48, 0x31, 0x69, 0x61, 0x1a, 0x81, 0x42, + 0x00, 0xd9, 0x37, 0x62, 0x0b, 0x4a, 0x0c, 0x48, + 0xd1, 0x6c, 0x20, 0x30, 0x00, 0x29, 0x01, 0xd0, + 0x0a, 0x21, 0x03, 0xe0, 0x01, 0x7a, 0x00, 0x29, + 0x01, 0xd0, 0xff, 0x31, 0x01, 0x72, 0x00, 0x2d, + 0x03, 0xd1, 0x01, 0x7a, 0x3c, 0x00, 0xa8, 0x48, + 0x00, 0x00, 0x00, 0x29, 0x00, 0xd0, 0x91, 0x6a, + 0x00, 0x7a, 0x00, 0x28, 0x00, 0xd1, 0x17, 0x65, + 0xf8, 0xbd, 0xa4, 0x6c, 0x01, 0x00, 0x3c, 0x7e, + 0x01, 0x00, 0xa6, 0x0e, 0x00, 0x00, 0xa8, 0x61, + 0x00, 0x00, 0x70, 0x47, 0x00, 0x00, 0x06, 0x49, + 0x80, 0xb5, 0x89, 0x68, 0x00, 0x29, 0x07, 0xd0, + 0x05, 0x21, 0x00, 0x28, 0x00, 0xd1, 0x04, 0x21, + 0x08, 0x06, 0x00, 0x0e, 0x03, 0xf0, 0x3c, 0x00, + 0xe4, 0x48, 0x00, 0x00, 0x05, 0xfa, 0x80, 0xbd, + 0x60, 0x6c, 0x01, 0x00, 0x07, 0x48, 0x00, 0x68, + 0x07, 0x49, 0x4a, 0x69, 0x10, 0x40, 0x01, 0xd0, + 0x01, 0x20, 0x00, 0xe0, 0x00, 0x20, 0x49, 0x6a, + 0x88, 0x42, 0x01, 0xd1, 0x01, 0x20, 0x70, 0x47, + 0x00, 0x20, 0x70, 0x47, 0x10, 0x00, 0x07, 0x00, + 0xa4, 0x6c, 0x01, 0x00, 0x70, 0xb5, 0x0e, 0xf0, + 0x49, 0xfa, 0x02, 0x1c, 0x00, 0xf0, 0x3a, 0xf8, + 0x3c, 0x00, 0x20, 0x49, 0x00, 0x00, 0x10, 0x49, + 0x00, 0x28, 0x0e, 0xd0, 0x08, 0x1c, 0xa0, 0x31, + 0x0e, 0x78, 0x0e, 0x4b, 0x10, 0x2e, 0x01, 0xd3, + 0x80, 0x6f, 0x03, 0xe0, 0x49, 0x78, 0x10, 0x29, + 0x0e, 0xd3, 0xc0, 0x6f, 0xc0, 0x18, 0x84, 0x1a, + 0x0a, 0xe0, 0x08, 0x1c, 0x80, 0x30, 0x45, 0x69, + 0x08, 0x49, 0x8d, 0x42, 0x01, 0xd9, 0x0c, 0x1c, + 0x05, 0xe0, 0xc0, 0x68, 0x10, 0x1a, 0x2c, 0x1a, + 0x00, 0x2c, 0x3c, 0x00, 0x5c, 0x49, 0x00, 0x00, + 0x00, 0xda, 0x64, 0x19, 0x20, 0x1c, 0x70, 0xbd, + 0xa4, 0x6c, 0x01, 0x00, 0xa6, 0x0e, 0x00, 0x00, + 0x50, 0xc3, 0x00, 0x00, 0x80, 0xb5, 0x05, 0xf0, + 0xb7, 0xfb, 0x00, 0x28, 0x02, 0xd0, 0x07, 0xf0, + 0x1f, 0xff, 0x80, 0xbd, 0x03, 0x48, 0x00, 0x78, + 0x00, 0x28, 0xfa, 0xd0, 0x07, 0xf0, 0x70, 0xfb, + 0x80, 0xbd, 0x00, 0x00, 0x60, 0x6c, 0x01, 0x00, + 0x03, 0x49, 0x01, 0x20, 0x3c, 0x00, 0x98, 0x49, + 0x00, 0x00, 0x49, 0x69, 0x03, 0x29, 0x00, 0xd8, + 0x00, 0x20, 0x70, 0x47, 0x00, 0x00, 0x60, 0x6c, + 0x01, 0x00, 0xb0, 0xb5, 0x0a, 0x4d, 0x00, 0x24, + 0x28, 0x78, 0x01, 0x28, 0x03, 0xd0, 0x05, 0xf0, + 0x6a, 0xfb, 0x04, 0x06, 0x24, 0x0e, 0xfe, 0xf7, + 0xd2, 0xfc, 0x00, 0x02, 0x20, 0x43, 0x02, 0xd1, + 0x68, 0x6a, 0x00, 0x28, 0x01, 0xd1, 0x01, 0x20, + 0xb0, 0xbd, 0x00, 0x20, 0xb0, 0xbd, 0x3c, 0x00, + 0xd4, 0x49, 0x00, 0x00, 0x60, 0x6c, 0x01, 0x00, + 0x01, 0x21, 0x01, 0x28, 0x00, 0xd0, 0x00, 0x21, + 0x01, 0x48, 0x41, 0x62, 0x70, 0x47, 0x00, 0x00, + 0x60, 0x6c, 0x01, 0x00, 0x15, 0x48, 0x10, 0xb5, + 0x04, 0x68, 0x15, 0x48, 0x00, 0x6a, 0x00, 0x28, + 0x14, 0xd0, 0xff, 0xf7, 0xcb, 0xff, 0x00, 0x28, + 0x0e, 0xd1, 0x11, 0x48, 0x11, 0x49, 0xc4, 0x30, + 0x40, 0x69, 0x88, 0x42, 0x08, 0xd2, 0xcc, 0x08, + 0x3c, 0x00, 0x10, 0x4a, 0x00, 0x00, 0xa0, 0x42, + 0x05, 0xd3, 0xff, 0xf7, 0x7e, 0xff, 0xa0, 0x42, + 0x01, 0xda, 0x0c, 0x4c, 0x01, 0xe0, 0xff, 0x24, + 0x91, 0x34, 0x7d, 0x20, 0x00, 0x01, 0x84, 0x42, + 0x04, 0xd9, 0x00, 0x22, 0x16, 0x21, 0x83, 0x20, + 0x0e, 0xf0, 0xbd, 0xfe, 0x01, 0x23, 0x09, 0x22, + 0x21, 0x1c, 0x16, 0x20, 0x0e, 0xf0, 0xa7, 0xfe, + 0x10, 0xbd, 0xb0, 0x57, 0x01, 0x00, 0x60, 0x6c, + 0x01, 0x00, 0x3c, 0x00, 0x4c, 0x4a, 0x00, 0x00, + 0xc0, 0x5d, 0x00, 0x00, 0x10, 0x27, 0x00, 0x00, + 0x70, 0xb5, 0x05, 0x1c, 0x0e, 0x1c, 0x00, 0xf0, + 0x43, 0xf8, 0x00, 0x28, 0x0f, 0xd0, 0x08, 0x4c, + 0x20, 0x78, 0xc0, 0x07, 0x03, 0xd4, 0x05, 0xf0, + 0xab, 0xf9, 0x09, 0xf0, 0x31, 0xfe, 0x00, 0x2d, + 0x05, 0xd0, 0x20, 0x78, 0x80, 0x07, 0x02, 0xd4, + 0x30, 0x1c, 0x02, 0xf0, 0xfd, 0xfe, 0x70, 0xbd, + 0x60, 0x6c, 0x01, 0x00, 0x3c, 0x00, 0x88, 0x4a, + 0x00, 0x00, 0xb0, 0xb5, 0x00, 0x28, 0x18, 0xd0, + 0x11, 0x48, 0x81, 0x42, 0x15, 0xd2, 0x10, 0x48, + 0x0c, 0x1c, 0x0d, 0x18, 0x07, 0xf0, 0xdf, 0xfa, + 0x81, 0x00, 0x09, 0x18, 0xa1, 0x42, 0x01, 0xd2, + 0x40, 0x00, 0x03, 0xe0, 0x41, 0x00, 0x09, 0x18, + 0xa1, 0x42, 0x01, 0xd2, 0x24, 0x1a, 0x06, 0xe0, + 0x41, 0x00, 0xa1, 0x42, 0x03, 0xd2, 0x40, 0x08, + 0xf8, 0xe7, 0x06, 0x4d, 0x07, 0x4c, 0x3c, 0x00, + 0xc4, 0x4a, 0x00, 0x00, 0x0e, 0xf0, 0x72, 0xf9, + 0x00, 0x19, 0x29, 0x1c, 0x07, 0xf0, 0xdc, 0xfa, + 0xb0, 0xbd, 0x00, 0x00, 0x80, 0xb9, 0x2a, 0x00, + 0x53, 0x07, 0x00, 0x00, 0x4c, 0x1d, 0x00, 0x00, + 0x88, 0x13, 0x00, 0x00, 0xb0, 0xb5, 0x05, 0xf0, + 0xfd, 0xfa, 0x00, 0x28, 0x13, 0xd1, 0xfe, 0xf7, + 0xb5, 0xfe, 0x0a, 0x4c, 0x0a, 0x4d, 0x00, 0x28, + 0x60, 0x63, 0x00, 0xd0, 0x28, 0x60, 0x0e, 0xf0, + 0x3c, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x55, 0xf9, + 0x21, 0x6a, 0x00, 0x29, 0x04, 0xd1, 0xe1, 0x69, + 0x40, 0x1a, 0x29, 0x68, 0x88, 0x42, 0x01, 0xd9, + 0x01, 0x20, 0xb0, 0xbd, 0x00, 0x20, 0xb0, 0xbd, + 0x00, 0x00, 0x60, 0x6c, 0x01, 0x00, 0xb0, 0x57, + 0x01, 0x00, 0x80, 0xb5, 0xff, 0xf7, 0xdd, 0xff, + 0x00, 0x28, 0x05, 0xd0, 0x05, 0xf0, 0xb7, 0xfa, + 0x00, 0x28, 0x01, 0xd1, 0x01, 0x20, 0x80, 0xbd, + 0x00, 0x20, 0x3c, 0x00, 0x3c, 0x4b, 0x00, 0x00, + 0x80, 0xbd, 0x00, 0x00, 0x10, 0xb5, 0x0a, 0x4c, + 0x00, 0x21, 0xa2, 0x68, 0x00, 0x2a, 0x03, 0xd0, + 0xa1, 0x60, 0x02, 0xf0, 0x83, 0xf9, 0x10, 0xbd, + 0x61, 0x60, 0x01, 0x1c, 0x00, 0x22, 0x04, 0x20, + 0x0e, 0xf0, 0x36, 0xfd, 0x03, 0x48, 0x21, 0x68, + 0x0a, 0xf0, 0x08, 0xfc, 0x10, 0xbd, 0x00, 0x00, + 0xbc, 0x74, 0x01, 0x00, 0xc4, 0x60, 0x01, 0x00, + 0x70, 0xb5, 0x05, 0x1c, 0x3c, 0x00, 0x78, 0x4b, + 0x00, 0x00, 0x01, 0xd1, 0xfc, 0xf7, 0xc1, 0xfb, + 0x20, 0x4c, 0xe0, 0x6a, 0x00, 0x28, 0x15, 0xd0, + 0x1f, 0x4b, 0xa0, 0x69, 0x58, 0x43, 0xc6, 0x0b, + 0x20, 0x88, 0x46, 0x43, 0xf0, 0x00, 0x80, 0x19, + 0xe6, 0x60, 0xfb, 0xf7, 0x1c, 0xfe, 0xa8, 0x42, + 0x05, 0xd8, 0x30, 0x1c, 0xfb, 0xf7, 0x17, 0xfe, + 0x80, 0x19, 0xa8, 0x42, 0x02, 0xd2, 0x00, 0x20, + 0xe0, 0x60, 0x20, 0xe0, 0xe5, 0x60, 0x3c, 0x00, + 0xb4, 0x4b, 0x00, 0x00, 0x00, 0x2d, 0x1d, 0xd0, + 0x26, 0x88, 0xa0, 0x69, 0x70, 0x43, 0xc1, 0x03, + 0x28, 0x1c, 0xfb, 0xf7, 0xa5, 0xfd, 0x60, 0x61, + 0x0d, 0x48, 0x32, 0x1c, 0x29, 0x1c, 0x30, 0x30, + 0xfb, 0xf7, 0x0a, 0xfc, 0x0c, 0x4b, 0x60, 0x69, + 0x58, 0x43, 0xc0, 0x0b, 0x60, 0x62, 0x01, 0xf0, + 0xb7, 0xfd, 0xa0, 0x62, 0xe0, 0x68, 0x00, 0x28, + 0x04, 0xd0, 0x20, 0x69, 0xa1, 0x68, 0xfb, 0xf7, + 0x3c, 0x00, 0xf0, 0x4b, 0x00, 0x00, 0xf4, 0xfb, + 0x70, 0xbd, 0x05, 0x48, 0xa1, 0x68, 0xfb, 0xf7, + 0xef, 0xfb, 0x70, 0xbd, 0x00, 0x00, 0xc8, 0x74, + 0x01, 0x00, 0x40, 0x42, 0x0f, 0x00, 0xc0, 0xc6, + 0x2d, 0x00, 0x88, 0x13, 0x00, 0x00, 0xf1, 0xb5, + 0x3e, 0x48, 0x00, 0xab, 0x81, 0x78, 0xc0, 0x78, + 0x3e, 0x4f, 0x0a, 0x07, 0x04, 0x07, 0x58, 0x78, + 0x3b, 0x49, 0x12, 0x0f, 0x08, 0x5c, 0x14, 0x39, + 0x24, 0x0f, 0x3c, 0x00, 0x2c, 0x4c, 0x00, 0x00, + 0x80, 0x18, 0x78, 0x60, 0x01, 0x30, 0xb8, 0x60, + 0x18, 0x78, 0x35, 0x4d, 0x08, 0x5c, 0x00, 0x19, + 0xb8, 0x61, 0x01, 0x30, 0xf8, 0x61, 0xeb, 0x78, + 0x33, 0x48, 0x1e, 0x09, 0x33, 0x4b, 0x18, 0x38, + 0x81, 0x78, 0x5e, 0x43, 0xab, 0x78, 0x1d, 0x09, + 0xc8, 0x23, 0x6b, 0x43, 0x00, 0x29, 0x08, 0xd1, + 0x2b, 0x4d, 0x2d, 0x78, 0x3d, 0x60, 0xc5, 0x60, + 0x7d, 0x25, 0xed, 0x00, 0x3c, 0x00, 0x68, 0x4c, + 0x00, 0x00, 0x5d, 0x1b, 0x2c, 0x4b, 0x07, 0xe0, + 0x27, 0x4d, 0x6d, 0x78, 0x3d, 0x60, 0xc5, 0x60, + 0x4b, 0x25, 0x2d, 0x01, 0x5d, 0x1b, 0x28, 0x4b, + 0xf6, 0x18, 0x02, 0x20, 0x00, 0xf0, 0x57, 0xf8, + 0x28, 0x1a, 0xf8, 0x60, 0x22, 0x48, 0x22, 0x1c, + 0x18, 0x38, 0x81, 0x78, 0x03, 0x20, 0x00, 0xf0, + 0x4e, 0xf8, 0x30, 0x1a, 0x38, 0x62, 0x39, 0x68, + 0x00, 0xab, 0x79, 0x61, 0x5a, 0x78, 0x3c, 0x00, + 0xa4, 0x4c, 0x00, 0x00, 0x56, 0x23, 0xf9, 0x68, + 0x5a, 0x43, 0x89, 0x1a, 0xf9, 0x60, 0xc8, 0x31, + 0x39, 0x61, 0x18, 0x49, 0x18, 0x39, 0x89, 0x78, + 0x00, 0x29, 0xb9, 0x69, 0x11, 0xd1, 0x00, 0xab, + 0x1a, 0x78, 0x13, 0x4b, 0x14, 0x3b, 0x9a, 0x5c, + 0x53, 0x1c, 0x59, 0x43, 0x0a, 0x23, 0x59, 0x43, + 0x14, 0x4b, 0x59, 0x1a, 0x51, 0x43, 0x0a, 0x23, + 0x59, 0x43, 0x40, 0x1a, 0x38, 0x62, 0x12, 0x49, + 0x3c, 0x00, 0xe0, 0x4c, 0x00, 0x00, 0x10, 0xe0, + 0x00, 0xab, 0x1a, 0x78, 0x0a, 0x4b, 0x14, 0x3b, + 0x9a, 0x5c, 0x53, 0x1c, 0x59, 0x43, 0x0a, 0x23, + 0x59, 0x43, 0x0d, 0x4b, 0x59, 0x1a, 0x51, 0x43, + 0x0a, 0x23, 0x59, 0x43, 0x40, 0x1a, 0x0b, 0x49, + 0x38, 0x62, 0x40, 0x18, 0x78, 0x62, 0xf8, 0xbd, + 0x00, 0x00, 0x0c, 0x5a, 0x01, 0x00, 0x66, 0x5a, + 0x01, 0x00, 0x94, 0x78, 0x01, 0x00, 0xa0, 0x86, + 0x01, 0x00, 0x3c, 0x00, 0x1c, 0x4d, 0x00, 0x00, + 0x00, 0x48, 0x71, 0x00, 0xb0, 0xd6, 0x8c, 0x00, + 0x88, 0x10, 0x00, 0x00, 0x80, 0x38, 0x01, 0x00, + 0x58, 0x12, 0x00, 0x00, 0x70, 0x11, 0x01, 0x00, + 0x30, 0xb5, 0x19, 0x4b, 0x02, 0x28, 0xdd, 0x68, + 0x06, 0xd1, 0x00, 0x29, 0x04, 0xd1, 0x2b, 0x1c, + 0x0c, 0x33, 0x9c, 0x1a, 0x64, 0x23, 0x5c, 0x43, + 0x02, 0x28, 0x09, 0xd1, 0x01, 0x29, 0x07, 0xd1, + 0x64, 0x23, 0x7d, 0x24, 0x3c, 0x00, 0x58, 0x4d, + 0x00, 0x00, 0xe4, 0x00, 0x6b, 0x43, 0x1c, 0x19, + 0xa0, 0x23, 0x53, 0x43, 0xe4, 0x1a, 0x0a, 0x23, + 0x5a, 0x43, 0x03, 0x28, 0x09, 0xd1, 0x00, 0x29, + 0x07, 0xd1, 0x13, 0x23, 0xff, 0x24, 0xe4, 0x00, + 0x6b, 0x43, 0x1b, 0x19, 0x9b, 0x1a, 0x1c, 0x1c, + 0x5c, 0x43, 0x03, 0x28, 0x08, 0xd1, 0x01, 0x29, + 0x06, 0xd1, 0x0e, 0x20, 0x05, 0x49, 0x68, 0x43, + 0x40, 0x18, 0x80, 0x1a, 0x04, 0x1c, 0x3c, 0x00, + 0x94, 0x4d, 0x00, 0x00, 0x44, 0x43, 0x20, 0x1c, + 0x30, 0xbd, 0x00, 0x00, 0x7c, 0x78, 0x01, 0x00, + 0x84, 0x08, 0x00, 0x00, 0x10, 0xb5, 0x07, 0x4c, + 0x0c, 0x23, 0x60, 0x78, 0x05, 0x49, 0x14, 0x31, + 0x58, 0x43, 0x40, 0x18, 0x40, 0x68, 0x01, 0xf0, + 0x4f, 0xfc, 0x00, 0x21, 0x60, 0x78, 0x02, 0xf0, + 0x4b, 0xff, 0x10, 0xbd, 0x4c, 0x7b, 0x01, 0x00, + 0x0c, 0x48, 0xf8, 0xb5, 0x40, 0x78, 0x0c, 0x23, + 0x3c, 0x00, 0xd0, 0x4d, 0x00, 0x00, 0x0a, 0x49, + 0x58, 0x43, 0x14, 0x31, 0x44, 0x18, 0x26, 0x1d, + 0x60, 0xce, 0x30, 0x1c, 0x0b, 0xf0, 0x0b, 0xfd, + 0x00, 0x27, 0x41, 0x20, 0x47, 0x55, 0x05, 0x48, + 0x29, 0x1c, 0x02, 0xf0, 0xf0, 0xfe, 0x28, 0x1c, + 0x01, 0xf0, 0x31, 0xfc, 0x04, 0x34, 0xc0, 0xc4, + 0xf8, 0xbd, 0x4c, 0x7b, 0x01, 0x00, 0x55, 0x80, + 0x00, 0x00, 0xb0, 0xb5, 0x0a, 0x4d, 0x4c, 0x21, + 0x28, 0x78, 0x3c, 0x00, 0x0c, 0x4e, 0x00, 0x00, + 0x09, 0x4a, 0x41, 0x43, 0x8c, 0x18, 0x22, 0x68, + 0x01, 0x21, 0xfb, 0xf7, 0xe1, 0xfa, 0x28, 0x78, + 0x01, 0xf0, 0xfa, 0xfb, 0x3c, 0x23, 0xe0, 0x56, + 0x41, 0x1e, 0x01, 0x20, 0x07, 0xf0, 0x34, 0xfb, + 0xb0, 0xbd, 0x00, 0x00, 0x3c, 0x7c, 0x01, 0x00, + 0x58, 0xe3, 0x01, 0x00, 0x0c, 0x23, 0x07, 0x49, + 0x58, 0x43, 0x40, 0x18, 0x80, 0xb5, 0x40, 0x68, + 0x41, 0x6b, 0x00, 0x29, 0x3c, 0x00, 0x48, 0x4e, + 0x00, 0x00, 0x02, 0xd0, 0x0b, 0xf0, 0xfb, 0xfd, + 0x80, 0xbd, 0x0b, 0xf0, 0x2c, 0xfd, 0x80, 0xbd, + 0x00, 0x00, 0x60, 0x7b, 0x01, 0x00, 0x38, 0x22, + 0x0a, 0x4b, 0x42, 0x43, 0xd2, 0x18, 0x00, 0x29, + 0x80, 0xb5, 0x04, 0xd0, 0x02, 0x29, 0x07, 0xd1, + 0x0b, 0xf0, 0xfb, 0xfc, 0x80, 0xbd, 0xd2, 0x6a, + 0x01, 0x21, 0xfb, 0xf7, 0xb0, 0xfa, 0x80, 0xbd, + 0x03, 0x21, 0x86, 0x20, 0xfc, 0xf7, 0x3c, 0x00, + 0x84, 0x4e, 0x00, 0x00, 0x0f, 0xfa, 0x80, 0xbd, + 0xd4, 0xe4, 0x01, 0x00, 0xb0, 0xb5, 0x04, 0x06, + 0x24, 0x0e, 0x0c, 0x20, 0x0e, 0x49, 0x60, 0x43, + 0x40, 0x18, 0x45, 0x68, 0xa8, 0x6b, 0x00, 0x28, + 0x03, 0xd1, 0x00, 0x21, 0x20, 0x1c, 0xfd, 0xf7, + 0xe1, 0xfa, 0x20, 0x1c, 0x07, 0xf0, 0xf2, 0xff, + 0x00, 0x28, 0x08, 0xd0, 0x28, 0x1c, 0x60, 0x30, + 0xc1, 0x79, 0x01, 0x29, 0x03, 0xd9, 0xff, 0x31, + 0x3c, 0x00, 0xc0, 0x4e, 0x00, 0x00, 0xc1, 0x71, + 0xff, 0x31, 0x81, 0x71, 0x01, 0x21, 0x20, 0x1c, + 0x02, 0xf0, 0xc5, 0xfe, 0xb0, 0xbd, 0x60, 0x7b, + 0x01, 0x00, 0x70, 0xb5, 0x00, 0x06, 0x00, 0x0e, + 0x05, 0x1c, 0x4c, 0x23, 0x0a, 0x49, 0x58, 0x43, + 0x44, 0x18, 0x3c, 0x20, 0x00, 0x5d, 0xff, 0x30, + 0x06, 0x06, 0x36, 0x16, 0x28, 0x1c, 0x01, 0xf0, + 0x90, 0xfb, 0x00, 0x21, 0x28, 0x1c, 0x22, 0x68, + 0xfb, 0xf7, 0x3c, 0x00, 0xfc, 0x4e, 0x00, 0x00, + 0x6f, 0xfa, 0x31, 0x1c, 0x00, 0x20, 0x07, 0xf0, + 0xc7, 0xfa, 0x70, 0xbd, 0x58, 0xe3, 0x01, 0x00, + 0x0c, 0x22, 0x0f, 0x4b, 0x42, 0x43, 0xd2, 0x18, + 0x10, 0xb5, 0x54, 0x68, 0x00, 0x29, 0x0d, 0xd0, + 0x02, 0x29, 0x0f, 0xd1, 0x2c, 0x20, 0x00, 0x5d, + 0x00, 0x28, 0x03, 0xd0, 0x07, 0x21, 0x0c, 0x20, + 0xfc, 0xf7, 0xba, 0xf9, 0x20, 0x1c, 0x0b, 0xf0, + 0xbb, 0xfc, 0x10, 0xbd, 0x3c, 0x00, 0x38, 0x4f, + 0x00, 0x00, 0x00, 0x21, 0x02, 0xf0, 0x8d, 0xfe, + 0x10, 0xbd, 0x04, 0x21, 0x0c, 0x20, 0xfc, 0xf7, + 0xae, 0xf9, 0x10, 0xbd, 0x00, 0x00, 0x60, 0x7b, + 0x01, 0x00, 0x80, 0xb5, 0x00, 0x29, 0x07, 0xd0, + 0x0c, 0x23, 0x05, 0x49, 0x58, 0x43, 0x40, 0x18, + 0x40, 0x68, 0x0b, 0xf0, 0x4a, 0xfc, 0x80, 0xbd, + 0x01, 0x21, 0x02, 0xf0, 0x76, 0xfe, 0x80, 0xbd, + 0x00, 0x00, 0x60, 0x7b, 0x01, 0x00, 0x3c, 0x00, + 0x74, 0x4f, 0x00, 0x00, 0x10, 0xb5, 0x04, 0x1c, + 0x00, 0x29, 0x05, 0xd0, 0x02, 0x29, 0x1a, 0xd1, + 0x20, 0x1c, 0x0b, 0xf0, 0xeb, 0xfc, 0x10, 0xbd, + 0x0d, 0x48, 0x04, 0x70, 0x0d, 0x48, 0x07, 0xf0, + 0x07, 0xf9, 0x0d, 0x48, 0x01, 0x88, 0x01, 0x22, + 0x12, 0x03, 0x11, 0x43, 0x01, 0x80, 0x4c, 0x20, + 0x0a, 0x49, 0x60, 0x43, 0x40, 0x18, 0x40, 0x30, + 0x00, 0x78, 0xfd, 0xf7, 0x5d, 0xfd, 0x20, 0x1c, + 0x3c, 0x00, 0xb0, 0x4f, 0x00, 0x00, 0x0a, 0xf0, + 0xd4, 0xf8, 0x10, 0xbd, 0x03, 0x21, 0x86, 0x20, + 0xfc, 0xf7, 0x73, 0xf9, 0x10, 0xbd, 0x3c, 0x7c, + 0x01, 0x00, 0x05, 0x4e, 0x00, 0x00, 0x32, 0x80, + 0x07, 0x00, 0x58, 0xe3, 0x01, 0x00, 0xff, 0xb5, + 0x05, 0x1c, 0x01, 0x20, 0x83, 0xb0, 0x01, 0x90, + 0x0c, 0x20, 0x5d, 0x4a, 0x68, 0x43, 0x86, 0x18, + 0x01, 0x27, 0x00, 0x29, 0x74, 0x68, 0x0e, 0xd0, + 0x02, 0x29, 0x3c, 0x00, 0xec, 0x4f, 0x00, 0x00, + 0x6a, 0xd1, 0x2c, 0x20, 0x00, 0x5d, 0x00, 0x28, + 0x03, 0xd0, 0x06, 0x21, 0x0c, 0x20, 0xfc, 0xf7, + 0x53, 0xf9, 0x20, 0x1c, 0x0b, 0xf0, 0x20, 0xfd, + 0x07, 0xb0, 0xf0, 0xbd, 0x52, 0x48, 0x14, 0x38, + 0x45, 0x70, 0xa0, 0x6b, 0x00, 0x28, 0x07, 0xd0, + 0x50, 0x48, 0x07, 0xf0, 0x7f, 0xf8, 0x01, 0x21, + 0x28, 0x1c, 0xfd, 0xf7, 0x25, 0xfa, 0x1c, 0xe0, + 0x4d, 0x48, 0x07, 0xf0, 0x3c, 0x00, 0x28, 0x50, + 0x00, 0x00, 0x77, 0xf8, 0x4a, 0x48, 0x14, 0x38, + 0x05, 0x70, 0x4b, 0x48, 0x01, 0x88, 0x01, 0x22, + 0x52, 0x03, 0x11, 0x43, 0x01, 0x80, 0x40, 0x20, + 0x00, 0x5d, 0xfd, 0xf7, 0x12, 0xfd, 0xb0, 0x68, + 0x00, 0x28, 0x09, 0xd1, 0x28, 0x1c, 0x07, 0xf0, + 0x64, 0xff, 0xb0, 0x60, 0x00, 0x28, 0x03, 0xd1, + 0x09, 0x21, 0x0c, 0x20, 0xfc, 0xf7, 0x23, 0xf9, + 0x05, 0x98, 0x00, 0x28, 0x03, 0xd0, 0x3c, 0x00, + 0x64, 0x50, 0x00, 0x00, 0xe0, 0x6c, 0x01, 0x30, + 0xe0, 0x64, 0x0e, 0xe0, 0x67, 0x20, 0x00, 0x5d, + 0x00, 0x28, 0x07, 0xd1, 0xe0, 0x6c, 0x00, 0x28, + 0x04, 0xd1, 0x39, 0x48, 0x02, 0x38, 0xc0, 0x6a, + 0xa0, 0x64, 0x09, 0xe0, 0x20, 0x6d, 0x00, 0x28, + 0x01, 0xd0, 0x00, 0x27, 0x04, 0xe0, 0x28, 0x1c, + 0x07, 0xf0, 0x00, 0xff, 0x00, 0x28, 0xe5, 0xd1, + 0x05, 0x98, 0x20, 0x65, 0x20, 0x1c, 0x20, 0x30, + 0x3c, 0x00, 0xa0, 0x50, 0x00, 0x00, 0x62, 0x6a, + 0x02, 0x90, 0x81, 0x7b, 0x28, 0x1c, 0x07, 0xf0, + 0x78, 0xff, 0x00, 0x2f, 0x19, 0xd0, 0x20, 0x1c, + 0x60, 0x30, 0xc1, 0x79, 0x4a, 0x1c, 0xc2, 0x71, + 0x80, 0x79, 0x81, 0x42, 0x02, 0xd2, 0x01, 0x20, + 0x01, 0xe0, 0x40, 0xe0, 0x00, 0x20, 0x01, 0x90, + 0x00, 0x28, 0x0a, 0xd0, 0x25, 0x48, 0x00, 0x78, + 0x80, 0x07, 0x06, 0xd5, 0x00, 0xf0, 0x0d, 0xfb, + 0x01, 0x1c, 0x3c, 0x00, 0xdc, 0x50, 0x00, 0x00, + 0x20, 0x1c, 0x0b, 0xf0, 0x15, 0xfd, 0x01, 0x90, + 0x01, 0x98, 0x00, 0x28, 0x0f, 0xd0, 0x02, 0x98, + 0x00, 0x7b, 0x02, 0x28, 0x03, 0xd1, 0x20, 0x1c, + 0x04, 0xf0, 0xd0, 0xfe, 0x84, 0xe7, 0x01, 0x28, + 0x00, 0xd0, 0x7e, 0xe7, 0x21, 0x1c, 0x30, 0x1c, + 0x04, 0xf0, 0xe2, 0xfe, 0x7c, 0xe7, 0x25, 0x1c, + 0x60, 0x35, 0xe8, 0x79, 0xff, 0x30, 0xa8, 0x71, + 0x68, 0x7a, 0x06, 0xf0, 0x3c, 0x00, 0x18, 0x51, + 0x00, 0x00, 0x9d, 0xfc, 0x0d, 0xf0, 0x47, 0xfe, + 0x07, 0x1c, 0x05, 0xf0, 0x12, 0xff, 0x3f, 0x18, + 0x02, 0x98, 0x81, 0x7b, 0x20, 0x69, 0x04, 0x30, + 0x00, 0xf0, 0x35, 0xfa, 0x61, 0x6a, 0x05, 0xf0, + 0xea, 0xfe, 0x39, 0x18, 0x6b, 0x7a, 0x30, 0x88, + 0x80, 0x31, 0x09, 0x4a, 0x0d, 0xf0, 0x91, 0xfe, + 0x5d, 0xe7, 0x03, 0x21, 0x0c, 0x20, 0xfc, 0xf7, + 0xaa, 0xf8, 0x58, 0xe7, 0x00, 0x00, 0x3c, 0x00, + 0x54, 0x51, 0x00, 0x00, 0x60, 0x7b, 0x01, 0x00, + 0xa5, 0x4d, 0x00, 0x00, 0xc9, 0x4d, 0x00, 0x00, + 0x32, 0x80, 0x07, 0x00, 0x1d, 0x75, 0x01, 0x00, + 0x8d, 0x4e, 0x00, 0x00, 0xff, 0xb5, 0x81, 0xb0, + 0x1f, 0x1c, 0x05, 0x1c, 0x14, 0x1c, 0x10, 0x1c, + 0x0a, 0x9e, 0x00, 0xf0, 0xf5, 0xfc, 0x29, 0x1c, + 0x10, 0x31, 0x20, 0x1d, 0x06, 0x22, 0xfb, 0xf7, + 0xb7, 0xf9, 0xa8, 0x8e, 0x20, 0x80, 0xe8, 0x8e, + 0x3c, 0x00, 0x90, 0x51, 0x00, 0x00, 0x60, 0x80, + 0x02, 0x99, 0x20, 0x1c, 0x00, 0xf0, 0x07, 0xf9, + 0xff, 0x34, 0x01, 0x34, 0x66, 0x60, 0x27, 0x60, + 0x05, 0xb0, 0xf0, 0xbd, 0x00, 0x00, 0xf8, 0xb5, + 0x0f, 0x1c, 0x1e, 0x1c, 0x05, 0x1c, 0x14, 0x1c, + 0x10, 0x1c, 0x00, 0xf0, 0xd8, 0xfc, 0xa8, 0x88, + 0x39, 0x1c, 0x20, 0x80, 0x28, 0x89, 0x60, 0x80, + 0x20, 0x1c, 0x00, 0xf0, 0xf0, 0xf8, 0xff, 0x34, + 0x01, 0x34, 0x3c, 0x00, 0xcc, 0x51, 0x00, 0x00, + 0x66, 0x60, 0xf8, 0xbd, 0x70, 0xb5, 0x04, 0x1c, + 0xc0, 0x68, 0x05, 0x68, 0x20, 0x1c, 0x14, 0x30, + 0x06, 0x1c, 0x00, 0xf0, 0x0f, 0xfb, 0x00, 0x28, + 0x16, 0xd0, 0x01, 0x22, 0x02, 0x21, 0x20, 0x69, + 0x05, 0xf0, 0xf8, 0xfa, 0x00, 0x28, 0x01, 0xd0, + 0xfb, 0xf7, 0x24, 0xff, 0x00, 0x22, 0x02, 0x21, + 0x20, 0x69, 0x05, 0xf0, 0xef, 0xfa, 0x00, 0x28, + 0x06, 0xd0, 0xfb, 0xf7, 0x3c, 0x00, 0x08, 0x52, + 0x00, 0x00, 0x01, 0xff, 0x00, 0x28, 0x02, 0xd0, + 0x30, 0x1c, 0x0b, 0xf0, 0x7c, 0xfb, 0x68, 0x89, + 0x80, 0x07, 0xc0, 0x0f, 0x03, 0xf0, 0xa7, 0xf8, + 0x18, 0x23, 0x04, 0x49, 0x58, 0x43, 0x40, 0x18, + 0xc1, 0x68, 0x00, 0x29, 0x02, 0xd0, 0x20, 0x1c, + 0xfb, 0xf7, 0xd4, 0xf8, 0x70, 0xbd, 0x94, 0x67, + 0x01, 0x00, 0xf8, 0xb5, 0x04, 0x1c, 0x10, 0x1c, + 0x0d, 0x1c, 0x19, 0x1c, 0xff, 0x22, 0x3c, 0x00, + 0x44, 0x52, 0x00, 0x00, 0x00, 0x27, 0xff, 0x2d, + 0x25, 0xd0, 0x00, 0x29, 0x05, 0xd0, 0x4b, 0x88, + 0x00, 0x2b, 0x02, 0xd0, 0x00, 0xf0, 0x50, 0xfc, + 0x15, 0xe0, 0x00, 0x21, 0x10, 0x4e, 0x4b, 0x00, + 0x9e, 0x19, 0x02, 0x23, 0xf6, 0x5e, 0x86, 0x42, + 0x01, 0xdd, 0x0a, 0x1c, 0x04, 0xe0, 0x01, 0x31, + 0x09, 0x06, 0x09, 0x0e, 0x26, 0x29, 0xf1, 0xd3, + 0x09, 0x4e, 0x50, 0x00, 0x80, 0x19, 0x4e, 0x23, + 0x3c, 0x00, 0x80, 0x52, 0x00, 0x00, 0xc0, 0x5e, + 0x27, 0x2a, 0x07, 0xd2, 0x06, 0x49, 0x20, 0x39, + 0x49, 0x57, 0x47, 0x31, 0x40, 0x1a, 0x20, 0x60, + 0x01, 0x27, 0x02, 0xe0, 0x7e, 0x20, 0xc0, 0x43, + 0x20, 0x60, 0x38, 0x1c, 0xf8, 0xbd, 0xfa, 0x47, + 0x01, 0x00, 0xb0, 0xb5, 0x0c, 0x1c, 0x7e, 0x21, + 0x05, 0x1c, 0x00, 0x20, 0xc9, 0x43, 0x00, 0x2c, + 0x0f, 0xd0, 0x10, 0x1c, 0x05, 0xf0, 0x6b, 0xfd, + 0x00, 0x28, 0x3c, 0x00, 0xbc, 0x52, 0x00, 0x00, + 0x02, 0xd0, 0x21, 0x1c, 0xc9, 0x39, 0x01, 0xe0, + 0x21, 0x1c, 0x86, 0x39, 0x02, 0x20, 0xc0, 0x43, + 0xfb, 0xf7, 0xb4, 0xf9, 0x01, 0x1c, 0x01, 0x20, + 0x29, 0x60, 0xb0, 0xbd, 0x98, 0xb5, 0x14, 0x1c, + 0x00, 0x22, 0x00, 0x92, 0x22, 0x1c, 0xfd, 0xf7, + 0x43, 0xfe, 0x98, 0xbd, 0x05, 0x49, 0x80, 0xb5, + 0x08, 0x60, 0x05, 0x49, 0x01, 0x20, 0xc8, 0x61, + 0x01, 0x21, 0x00, 0x20, 0x3c, 0x00, 0xf8, 0x52, + 0x00, 0x00, 0x03, 0xf0, 0x1c, 0xfe, 0x80, 0xbd, + 0x00, 0x00, 0x20, 0x67, 0x01, 0x00, 0xac, 0x7c, + 0x01, 0x00, 0x80, 0xb5, 0x00, 0x21, 0x00, 0x20, + 0x03, 0xf0, 0x11, 0xfe, 0x06, 0xf0, 0x0d, 0xfb, + 0x02, 0x49, 0x00, 0x20, 0x08, 0x60, 0x80, 0xbd, + 0x00, 0x00, 0x20, 0x67, 0x01, 0x00, 0x03, 0x49, + 0x01, 0x20, 0x09, 0x69, 0x00, 0x29, 0x00, 0xd1, + 0x00, 0x20, 0x70, 0x47, 0x00, 0x00, 0x3c, 0x00, + 0x34, 0x53, 0x00, 0x00, 0x10, 0x67, 0x01, 0x00, + 0x03, 0x48, 0x00, 0x69, 0x00, 0x28, 0x01, 0xd0, + 0x40, 0x69, 0x70, 0x47, 0x00, 0x20, 0x70, 0x47, + 0x10, 0x67, 0x01, 0x00, 0x70, 0xb5, 0x16, 0x1c, + 0x0d, 0x1c, 0x04, 0x1c, 0x00, 0x28, 0x01, 0xd0, + 0x01, 0x2c, 0x07, 0xd1, 0x00, 0xf0, 0x36, 0xfa, + 0x00, 0x28, 0x05, 0xd0, 0x13, 0xf0, 0xca, 0xf9, + 0x00, 0x28, 0x01, 0xd1, 0x01, 0x20, 0x70, 0xbd, + 0x3c, 0x00, 0x70, 0x53, 0x00, 0x00, 0x01, 0x20, + 0x00, 0x2c, 0x00, 0xd0, 0x00, 0x20, 0x0a, 0x4c, + 0x04, 0x34, 0x61, 0xc4, 0x10, 0x3c, 0x00, 0xf0, + 0x24, 0xfa, 0x00, 0x28, 0x02, 0xd0, 0x00, 0xf0, + 0xc6, 0xf9, 0x01, 0xe0, 0x00, 0xf0, 0xe5, 0xf8, + 0xc0, 0x30, 0xc3, 0x6b, 0x22, 0x1d, 0x07, 0xca, + 0xfb, 0xf7, 0x20, 0xf8, 0x00, 0x20, 0x70, 0xbd, + 0x00, 0x00, 0xd4, 0x67, 0x01, 0x00, 0xf8, 0xb5, + 0x0d, 0x1c, 0x3c, 0x00, 0xac, 0x53, 0x00, 0x00, + 0x00, 0x21, 0x04, 0x1c, 0x28, 0x1c, 0x05, 0xf0, + 0xe3, 0xf9, 0x23, 0x1c, 0xff, 0x33, 0x21, 0x33, + 0xff, 0x27, 0x00, 0x28, 0x05, 0xd0, 0x22, 0x22, + 0x01, 0x1c, 0x18, 0x1c, 0xfb, 0xf7, 0x96, 0xf8, + 0x00, 0xe0, 0x1f, 0x70, 0x03, 0x21, 0x28, 0x1c, + 0x05, 0xf0, 0xd2, 0xf9, 0x26, 0x1c, 0xff, 0x36, + 0x41, 0x36, 0x00, 0x28, 0x05, 0xd0, 0x03, 0x22, + 0x01, 0x1c, 0xb0, 0x1c, 0x3c, 0x00, 0xe8, 0x53, + 0x00, 0x00, 0xfb, 0xf7, 0x86, 0xf8, 0x00, 0xe0, + 0xb7, 0x70, 0x01, 0x21, 0x28, 0x1c, 0x05, 0xf0, + 0xc2, 0xf9, 0x00, 0x28, 0x07, 0xd0, 0x01, 0x1c, + 0x20, 0x1c, 0xff, 0x30, 0x0a, 0x22, 0x46, 0x30, + 0xfb, 0xf7, 0x77, 0xf8, 0x00, 0xe0, 0x77, 0x71, + 0x32, 0x21, 0x28, 0x1c, 0x05, 0xf0, 0xb3, 0xf9, + 0x00, 0x28, 0x07, 0xd0, 0x01, 0x1c, 0x20, 0x1c, + 0xff, 0x30, 0x12, 0x22, 0x50, 0x30, 0x3c, 0x00, + 0x24, 0x54, 0x00, 0x00, 0xfb, 0xf7, 0x68, 0xf8, + 0x00, 0xe0, 0xf7, 0x73, 0x06, 0x21, 0x28, 0x1c, + 0x05, 0xf0, 0xa4, 0xf9, 0x00, 0x28, 0x07, 0xd0, + 0x01, 0x1c, 0x20, 0x1c, 0xff, 0x30, 0x04, 0x22, + 0x63, 0x30, 0xfb, 0xf7, 0x59, 0xf8, 0xf8, 0xbd, + 0xff, 0x34, 0x61, 0x34, 0xa7, 0x70, 0xfa, 0xe7, + 0x08, 0x49, 0x80, 0xb5, 0x09, 0x68, 0x00, 0x28, + 0x01, 0xd1, 0x07, 0x48, 0x01, 0x68, 0x08, 0x1c, + 0x3c, 0x00, 0x60, 0x54, 0x00, 0x00, 0x05, 0xd1, + 0x03, 0x21, 0x90, 0x20, 0xfb, 0xf7, 0x1d, 0xff, + 0x00, 0x20, 0x80, 0xbd, 0x01, 0xf0, 0xd7, 0xfb, + 0x80, 0xbd, 0x1c, 0x67, 0x01, 0x00, 0x20, 0x67, + 0x01, 0x00, 0x80, 0xb5, 0xff, 0xf7, 0xe7, 0xff, + 0x80, 0xbd, 0xf0, 0xb5, 0x00, 0x24, 0x84, 0x46, + 0x00, 0x20, 0x0b, 0xe0, 0x87, 0x40, 0x17, 0x40, + 0x07, 0xd0, 0x14, 0x23, 0x0b, 0x4d, 0x43, 0x43, + 0x5b, 0x19, 0x3c, 0x00, 0x9c, 0x54, 0x00, 0x00, + 0x1b, 0x7c, 0x65, 0x46, 0x2b, 0x55, 0x01, 0x34, + 0x01, 0x30, 0x01, 0x27, 0x3b, 0x1c, 0x0e, 0x28, + 0x00, 0xd3, 0x00, 0x23, 0x0e, 0x88, 0x3d, 0x1c, + 0xa6, 0x42, 0x00, 0xdc, 0x00, 0x25, 0x2b, 0x40, + 0xe7, 0xd1, 0x0c, 0x80, 0xf0, 0xbd, 0x00, 0x00, + 0x74, 0x40, 0x01, 0x00, 0x78, 0xb5, 0x04, 0x1c, + 0x01, 0x20, 0x20, 0x70, 0x08, 0x20, 0x00, 0xab, + 0x0d, 0x1c, 0x18, 0x80, 0x3c, 0x00, 0xd8, 0x54, + 0x00, 0x00, 0x16, 0x1c, 0xa0, 0x1c, 0x69, 0x46, + 0xff, 0xf7, 0xd1, 0xff, 0x00, 0xab, 0x00, 0x22, + 0xd2, 0x43, 0x19, 0x88, 0x82, 0x40, 0x61, 0x70, + 0x32, 0x20, 0x28, 0x70, 0x10, 0x20, 0x18, 0x80, + 0x32, 0x40, 0xa8, 0x1c, 0x69, 0x46, 0xff, 0xf7, + 0xc2, 0xff, 0x00, 0xab, 0x18, 0x88, 0x68, 0x70, + 0x78, 0xbd, 0x80, 0xb5, 0x02, 0xf0, 0x35, 0xff, + 0x00, 0x21, 0x00, 0x28, 0x00, 0xd0, 0x3c, 0x00, + 0x14, 0x55, 0x00, 0x00, 0x01, 0x69, 0x08, 0x1c, + 0x80, 0xbd, 0x00, 0x00, 0x05, 0x49, 0x00, 0x28, + 0x01, 0xd0, 0xc8, 0x68, 0x00, 0xe0, 0x08, 0x69, + 0x00, 0x28, 0x01, 0xd0, 0x04, 0x30, 0x70, 0x47, + 0x00, 0x20, 0x70, 0x47, 0x10, 0x67, 0x01, 0x00, + 0x03, 0x48, 0x00, 0x69, 0x00, 0x28, 0x01, 0xd0, + 0x04, 0x30, 0x70, 0x47, 0x00, 0x20, 0x70, 0x47, + 0x10, 0x67, 0x01, 0x00, 0x02, 0x48, 0x00, 0x69, + 0x3c, 0x00, 0x50, 0x55, 0x00, 0x00, 0x00, 0x28, + 0xff, 0xd1, 0x70, 0x47, 0x00, 0x00, 0x10, 0x67, + 0x01, 0x00, 0x10, 0xb5, 0x05, 0x4c, 0x20, 0x69, + 0x00, 0x28, 0x03, 0xd1, 0x04, 0x21, 0x90, 0x20, + 0xfb, 0xf7, 0x9b, 0xfe, 0x20, 0x69, 0x10, 0xbd, + 0x00, 0x00, 0x10, 0x67, 0x01, 0x00, 0x10, 0xb5, + 0x04, 0x1c, 0x00, 0xf0, 0x40, 0xf9, 0x00, 0x28, + 0x01, 0xd0, 0x00, 0x20, 0x10, 0xbd, 0x20, 0x1c, + 0x00, 0xf0, 0x3c, 0x00, 0x8c, 0x55, 0x00, 0x00, + 0x57, 0xf9, 0x00, 0x28, 0x01, 0xd0, 0x01, 0x20, + 0x10, 0xbd, 0x02, 0x20, 0x10, 0xbd, 0x00, 0x00, + 0x70, 0xb5, 0x0f, 0x4e, 0x04, 0x1c, 0x30, 0x68, + 0x0d, 0x1c, 0x00, 0x28, 0x07, 0xd0, 0x21, 0x1c, + 0x04, 0x30, 0x05, 0xf0, 0xc1, 0xfb, 0x00, 0x28, + 0x01, 0xd0, 0x30, 0x68, 0x0b, 0xe0, 0x09, 0x4a, + 0x10, 0x68, 0x00, 0x28, 0x09, 0xd0, 0x21, 0x1c, + 0x14, 0x1c, 0x04, 0x30, 0x3c, 0x00, 0xc8, 0x55, + 0x00, 0x00, 0x05, 0xf0, 0xb4, 0xfb, 0x00, 0x28, + 0x02, 0xd0, 0x20, 0x68, 0x9c, 0x30, 0x00, 0xe0, + 0x03, 0x48, 0x40, 0x5d, 0x70, 0xbd, 0x20, 0x67, + 0x01, 0x00, 0x1c, 0x67, 0x01, 0x00, 0xcc, 0x47, + 0x01, 0x00, 0x04, 0x49, 0x00, 0x20, 0x09, 0x69, + 0x00, 0x29, 0x02, 0xd0, 0xff, 0x31, 0x01, 0x31, + 0x88, 0x69, 0x70, 0x47, 0x00, 0x00, 0x10, 0x67, + 0x01, 0x00, 0x01, 0x48, 0x00, 0x7a, 0x3c, 0x00, + 0x04, 0x56, 0x00, 0x00, 0x70, 0x47, 0x00, 0x00, + 0xac, 0x7c, 0x01, 0x00, 0xfe, 0xb5, 0x06, 0x1c, + 0x00, 0x20, 0x1f, 0x1c, 0x14, 0x1c, 0x00, 0x29, + 0x02, 0x90, 0x19, 0xd0, 0x01, 0x29, 0x26, 0xd0, + 0x02, 0x29, 0x47, 0xd1, 0x26, 0x48, 0x00, 0x78, + 0x05, 0xf0, 0xa0, 0xfb, 0xa0, 0x72, 0x0a, 0xf0, + 0x4f, 0xfc, 0x0e, 0x28, 0x09, 0xd1, 0xa0, 0x7a, + 0x05, 0xf0, 0xaa, 0xfb, 0x00, 0x28, 0x04, 0xd0, + 0x3c, 0x00, 0x40, 0x56, 0x00, 0x00, 0x20, 0x48, + 0x00, 0x78, 0x05, 0xf0, 0x92, 0xfb, 0xa0, 0x72, + 0x00, 0x20, 0x20, 0x72, 0x2f, 0xe0, 0x1d, 0x4d, + 0x28, 0x68, 0x00, 0x28, 0x01, 0xd1, 0xfb, 0xf7, + 0x52, 0xfe, 0x00, 0x97, 0x2a, 0x68, 0x23, 0x1c, + 0x18, 0x32, 0x11, 0x1c, 0x30, 0x1c, 0xfc, 0xf7, + 0xde, 0xfb, 0x26, 0xe0, 0x30, 0x1c, 0x0c, 0xf0, + 0xca, 0xfb, 0x05, 0x1c, 0x02, 0xd0, 0xa8, 0x68, + 0x00, 0x28, 0x3c, 0x00, 0x7c, 0x56, 0x00, 0x00, + 0x08, 0xd1, 0x13, 0x48, 0x00, 0x68, 0x00, 0x28, + 0x01, 0xd1, 0xfb, 0xf7, 0x3b, 0xfe, 0x10, 0x48, + 0x00, 0x68, 0x18, 0x30, 0x02, 0x1c, 0x0e, 0x48, + 0x00, 0x97, 0x01, 0x68, 0x23, 0x1c, 0x18, 0x31, + 0x30, 0x1c, 0xfc, 0xf7, 0xc3, 0xfb, 0x00, 0x2d, + 0x0a, 0xd0, 0x40, 0x35, 0x28, 0x88, 0x80, 0x06, + 0x06, 0xd4, 0x00, 0x20, 0x20, 0x60, 0x03, 0xe0, + 0x01, 0x21, 0x90, 0x20, 0x3c, 0x00, 0xb8, 0x56, + 0x00, 0x00, 0xfb, 0xf7, 0xf4, 0xfd, 0x02, 0x98, + 0xfe, 0xbd, 0xb0, 0x69, 0x01, 0x00, 0x90, 0x57, + 0x01, 0x00, 0x20, 0x67, 0x01, 0x00, 0x1c, 0x67, + 0x01, 0x00, 0x80, 0xb5, 0x00, 0x20, 0x02, 0xf0, + 0x4a, 0xfe, 0x18, 0x23, 0x05, 0x4a, 0x58, 0x43, + 0x80, 0x18, 0x40, 0x69, 0x01, 0x21, 0x00, 0x28, + 0x00, 0xd0, 0x41, 0x78, 0x08, 0x1c, 0x80, 0xbd, + 0x00, 0x00, 0x94, 0x67, 0x01, 0x00, 0x3c, 0x00, + 0xf4, 0x56, 0x00, 0x00, 0x02, 0x49, 0x08, 0x69, + 0x00, 0x28, 0x00, 0xd1, 0xc8, 0x68, 0x70, 0x47, + 0x10, 0x67, 0x01, 0x00, 0x03, 0x48, 0xc0, 0x68, + 0x00, 0x28, 0x01, 0xd0, 0x04, 0x30, 0x70, 0x47, + 0x00, 0x20, 0x70, 0x47, 0x10, 0x67, 0x01, 0x00, + 0x10, 0xb5, 0x05, 0x4c, 0xe0, 0x68, 0x00, 0x28, + 0x03, 0xd1, 0x05, 0x21, 0x90, 0x20, 0xfb, 0xf7, + 0xbd, 0xfd, 0xe0, 0x68, 0x10, 0xbd, 0x00, 0x00, + 0x3c, 0x00, 0x30, 0x57, 0x00, 0x00, 0x10, 0x67, + 0x01, 0x00, 0xf8, 0xb5, 0x0d, 0x1c, 0x00, 0x2a, + 0x03, 0xd0, 0x11, 0x49, 0x12, 0x4f, 0x0e, 0x78, + 0x01, 0xe0, 0x11, 0x4f, 0x0c, 0x26, 0x08, 0x2e, + 0x01, 0xd2, 0x34, 0x1c, 0x00, 0xe0, 0x08, 0x24, + 0x01, 0x21, 0x01, 0x70, 0x44, 0x70, 0x39, 0x1c, + 0x22, 0x1c, 0x02, 0x30, 0xfa, 0xf7, 0xcb, 0xfe, + 0x32, 0x1b, 0x00, 0x2a, 0x07, 0xdd, 0x32, 0x20, + 0x28, 0x70, 0x3c, 0x00, 0x6c, 0x57, 0x00, 0x00, + 0x39, 0x19, 0xa8, 0x1c, 0x6a, 0x70, 0xfa, 0xf7, + 0xc1, 0xfe, 0xf8, 0xbd, 0xff, 0x20, 0x28, 0x70, + 0x00, 0x20, 0x68, 0x70, 0xf9, 0xe7, 0x00, 0x00, + 0xa4, 0x69, 0x01, 0x00, 0xb0, 0x69, 0x01, 0x00, + 0x90, 0x57, 0x01, 0x00, 0x01, 0x49, 0x48, 0x62, + 0x70, 0x47, 0x00, 0x00, 0x94, 0x67, 0x01, 0x00, + 0x03, 0x49, 0x80, 0xb5, 0x08, 0x60, 0x01, 0x21, + 0x01, 0x20, 0x03, 0xf0, 0x3c, 0x00, 0xa8, 0x57, + 0x00, 0x00, 0xc5, 0xfb, 0x80, 0xbd, 0x1c, 0x67, + 0x01, 0x00, 0x80, 0xb5, 0x00, 0x21, 0x01, 0x20, + 0x03, 0xf0, 0xbd, 0xfb, 0x06, 0xf0, 0xb9, 0xf8, + 0x02, 0x49, 0x00, 0x20, 0x08, 0x60, 0x80, 0xbd, + 0x00, 0x00, 0x1c, 0x67, 0x01, 0x00, 0x03, 0x49, + 0x01, 0x20, 0xc9, 0x68, 0x00, 0x29, 0x00, 0xd1, + 0x00, 0x20, 0x70, 0x47, 0x00, 0x00, 0x10, 0x67, + 0x01, 0x00, 0x03, 0x48, 0xc0, 0x68, 0x3c, 0x00, + 0xe4, 0x57, 0x00, 0x00, 0x00, 0x28, 0x01, 0xd0, + 0x40, 0x69, 0x70, 0x47, 0x00, 0x20, 0x70, 0x47, + 0x10, 0x67, 0x01, 0x00, 0x80, 0xb5, 0x02, 0x21, + 0x01, 0x20, 0x03, 0xf0, 0x9b, 0xfb, 0x80, 0xbd, + 0x05, 0x4a, 0x80, 0xb5, 0x12, 0x69, 0x00, 0x21, + 0x00, 0x2a, 0x03, 0xd0, 0x11, 0x1d, 0x05, 0xf0, + 0x91, 0xfa, 0x01, 0x1c, 0x08, 0x1c, 0x80, 0xbd, + 0x10, 0x67, 0x01, 0x00, 0x06, 0x4a, 0x80, 0xb5, + 0x3c, 0x00, 0x20, 0x58, 0x00, 0x00, 0x12, 0x69, + 0x00, 0x21, 0x00, 0x2a, 0x05, 0xd0, 0x11, 0x1c, + 0xff, 0x31, 0x21, 0x31, 0x05, 0xf0, 0x8b, 0xfa, + 0x01, 0x1c, 0x08, 0x1c, 0x80, 0xbd, 0x10, 0x67, + 0x01, 0x00, 0x05, 0x4a, 0x80, 0xb5, 0xd2, 0x68, + 0x00, 0x21, 0x00, 0x2a, 0x03, 0xd0, 0x11, 0x1d, + 0x05, 0xf0, 0x73, 0xfa, 0x01, 0x1c, 0x08, 0x1c, + 0x80, 0xbd, 0x10, 0x67, 0x01, 0x00, 0x06, 0x4a, + 0x80, 0xb5, 0x3c, 0x00, 0x5c, 0x58, 0x00, 0x00, + 0xd2, 0x68, 0x00, 0x21, 0x00, 0x2a, 0x05, 0xd0, + 0x11, 0x1c, 0xff, 0x31, 0x21, 0x31, 0x05, 0xf0, + 0x6d, 0xfa, 0x01, 0x1c, 0x08, 0x1c, 0x80, 0xbd, + 0x10, 0x67, 0x01, 0x00, 0xff, 0xb5, 0x0d, 0x1c, + 0x1f, 0x1c, 0x87, 0xb0, 0x10, 0x9e, 0x00, 0x24, + 0x02, 0xf0, 0x72, 0xfd, 0x18, 0x23, 0x13, 0x49, + 0x58, 0x43, 0x08, 0x58, 0x00, 0x28, 0x19, 0xd0, + 0x04, 0x1c, 0x33, 0x1c, 0x3c, 0x00, 0x98, 0x58, + 0x00, 0x00, 0x3a, 0x1c, 0x28, 0x1c, 0x09, 0x99, + 0xfa, 0xf7, 0x9f, 0xfd, 0x04, 0x1c, 0x14, 0xd0, + 0x18, 0x20, 0x00, 0xab, 0x18, 0x80, 0xaa, 0x68, + 0x01, 0xa8, 0x69, 0x46, 0xff, 0xf7, 0xe7, 0xfd, + 0x6a, 0x46, 0x01, 0xa9, 0x00, 0x20, 0x07, 0xf0, + 0x44, 0xfe, 0x00, 0x28, 0x05, 0xd1, 0x0a, 0x21, + 0x00, 0xe0, 0x0f, 0x21, 0x90, 0x20, 0xfb, 0xf7, + 0xea, 0xfc, 0x20, 0x1c, 0x0b, 0xb0, 0x3c, 0x00, + 0xd4, 0x58, 0x00, 0x00, 0xf0, 0xbd, 0x00, 0x00, + 0x94, 0x67, 0x01, 0x00, 0x10, 0xb5, 0x00, 0x24, + 0x02, 0xf0, 0x44, 0xfd, 0x18, 0x23, 0x05, 0x49, + 0x58, 0x43, 0x40, 0x18, 0x80, 0x68, 0x00, 0x28, + 0x02, 0xd0, 0xfa, 0xf7, 0x71, 0xfd, 0x01, 0x24, + 0x20, 0x1c, 0x10, 0xbd, 0x94, 0x67, 0x01, 0x00, + 0x80, 0xb5, 0x02, 0x4b, 0x00, 0xf0, 0x4e, 0xf8, + 0x80, 0xbd, 0x00, 0x00, 0x10, 0x67, 0x01, 0x00, + 0x3c, 0x00, 0x10, 0x59, 0x00, 0x00, 0x80, 0xb5, + 0x02, 0x4b, 0x00, 0xf0, 0x46, 0xf8, 0x80, 0xbd, + 0x00, 0x00, 0x11, 0x67, 0x01, 0x00, 0xf8, 0xb5, + 0x0e, 0x1c, 0x15, 0x1c, 0x00, 0x28, 0x1c, 0x49, + 0x10, 0xd0, 0x48, 0x68, 0x1c, 0x4a, 0x28, 0x80, + 0x00, 0x20, 0x07, 0xe0, 0x0b, 0x18, 0x1c, 0x7a, + 0x14, 0x23, 0x63, 0x43, 0x9b, 0x18, 0x1b, 0x7c, + 0x33, 0x54, 0x01, 0x30, 0x2b, 0x88, 0x83, 0x42, + 0xf4, 0xdc, 0x3c, 0x00, 0x4c, 0x59, 0x00, 0x00, + 0x24, 0xe0, 0x00, 0x20, 0x0f, 0x1c, 0x00, 0x24, + 0x08, 0x60, 0x0f, 0xe0, 0x30, 0x5d, 0x05, 0xf0, + 0x07, 0xfa, 0x0e, 0x28, 0x01, 0xd1, 0x00, 0x20, + 0xf8, 0xbd, 0x39, 0x19, 0x08, 0x72, 0x01, 0x22, + 0x39, 0x68, 0x82, 0x40, 0x11, 0x43, 0x08, 0x1c, + 0x38, 0x60, 0x01, 0x34, 0x28, 0x88, 0xa0, 0x42, + 0xec, 0xdc, 0x28, 0x88, 0x78, 0x60, 0xff, 0xf7, + 0xb7, 0xfe, 0x00, 0x28, 0x3c, 0x00, 0x88, 0x59, + 0x00, 0x00, 0x06, 0xd0, 0x01, 0x69, 0x00, 0x29, + 0x03, 0xd0, 0x7f, 0x21, 0xc9, 0x43, 0x0b, 0xf0, + 0x52, 0xfb, 0x01, 0x20, 0xe3, 0xe7, 0x2c, 0x7d, + 0x01, 0x00, 0x74, 0x40, 0x01, 0x00, 0x10, 0xb5, + 0x1c, 0x1c, 0x00, 0x28, 0x0b, 0xd0, 0x20, 0x78, + 0x0e, 0x28, 0x05, 0xd2, 0x14, 0x23, 0x0c, 0x4a, + 0x58, 0x43, 0x80, 0x18, 0x00, 0x7c, 0x00, 0xe0, + 0x00, 0x20, 0x08, 0x70, 0x0e, 0xe0, 0x3c, 0x00, + 0xc4, 0x59, 0x00, 0x00, 0x08, 0x78, 0x05, 0xf0, + 0xd1, 0xf9, 0x20, 0x70, 0xff, 0xf7, 0x92, 0xfe, + 0x00, 0x28, 0x06, 0xd0, 0x01, 0x69, 0x00, 0x29, + 0x03, 0xd0, 0x7f, 0x21, 0xc9, 0x43, 0x0b, 0xf0, + 0x2d, 0xfb, 0x01, 0x20, 0x10, 0xbd, 0x00, 0x00, + 0x74, 0x40, 0x01, 0x00, 0x80, 0xb5, 0x27, 0x20, + 0xc0, 0x43, 0x09, 0xf0, 0x31, 0xfc, 0x80, 0xbd, + 0x80, 0xb5, 0x27, 0x20, 0xc0, 0x43, 0x09, 0xf0, + 0x3c, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x39, 0xfc, + 0x80, 0xbd, 0x80, 0xb5, 0x28, 0x20, 0x09, 0xf0, + 0x42, 0xfc, 0x80, 0xbd, 0x00, 0x00, 0x80, 0xb5, + 0x28, 0x20, 0x09, 0xf0, 0x4a, 0xfc, 0x80, 0xbd, + 0x00, 0x00, 0xb0, 0xb5, 0x01, 0x28, 0x28, 0xd1, + 0x01, 0x29, 0x01, 0xd0, 0xfb, 0xf7, 0x6b, 0xfc, + 0xff, 0xf7, 0xe9, 0xfd, 0x02, 0x28, 0x1a, 0xd1, + 0x07, 0xf0, 0x13, 0xfc, 0x12, 0x4c, 0x21, 0x69, + 0x88, 0x42, 0x3c, 0x00, 0x3c, 0x5a, 0x00, 0x00, + 0x15, 0xd0, 0x07, 0xf0, 0x0d, 0xfc, 0x20, 0x61, + 0x20, 0x68, 0x7d, 0x24, 0xe4, 0x00, 0x44, 0x43, + 0x0d, 0xf0, 0xae, 0xf9, 0x05, 0x1c, 0x07, 0xf0, + 0x0b, 0xfc, 0x28, 0x1a, 0x84, 0x42, 0x00, 0xd9, + 0x24, 0x1a, 0x01, 0x22, 0x21, 0x1c, 0x0a, 0x20, + 0x0d, 0xf0, 0xb2, 0xfd, 0xb0, 0xbd, 0x00, 0x21, + 0x09, 0x20, 0x0c, 0xf0, 0x75, 0xfc, 0xb0, 0xbd, + 0x07, 0x21, 0x0a, 0x20, 0x3c, 0x00, 0x78, 0x5a, + 0x00, 0x00, 0xfb, 0xf7, 0x14, 0xfc, 0xb0, 0xbd, + 0x00, 0x00, 0xd4, 0x67, 0x01, 0x00, 0x7d, 0x20, + 0x02, 0x49, 0x00, 0x01, 0x08, 0x60, 0x70, 0x47, + 0x00, 0x00, 0xd4, 0x67, 0x01, 0x00, 0x10, 0xb5, + 0x81, 0x6d, 0x04, 0x1c, 0xff, 0x30, 0x46, 0x30, + 0x0c, 0xf0, 0xd1, 0xfc, 0x20, 0x1c, 0xff, 0x30, + 0x50, 0x30, 0xa1, 0x6d, 0x0c, 0xf0, 0xcb, 0xfc, + 0x10, 0xbd, 0xb0, 0xb5, 0x04, 0x1c, 0x3c, 0x00, + 0xb4, 0x5a, 0x00, 0x00, 0x0d, 0x1c, 0x02, 0xf0, + 0x59, 0xfc, 0x20, 0x1c, 0x02, 0xf0, 0x56, 0xfc, + 0x18, 0x23, 0x04, 0x49, 0x58, 0x43, 0x40, 0x18, + 0x18, 0x22, 0x29, 0x1c, 0xfa, 0xf7, 0x70, 0xfd, + 0xb0, 0xbd, 0x00, 0x00, 0x94, 0x67, 0x01, 0x00, + 0x10, 0xb5, 0x04, 0x1c, 0x09, 0xf0, 0xbc, 0xfb, + 0x20, 0x1c, 0x09, 0xf0, 0xc7, 0xfb, 0x10, 0xbd, + 0x10, 0xb5, 0x04, 0x1c, 0x09, 0xf0, 0xd0, 0xfb, + 0x3c, 0x00, 0xf0, 0x5a, 0x00, 0x00, 0x20, 0x1c, + 0x09, 0xf0, 0xdb, 0xfb, 0x10, 0xbd, 0x70, 0xb5, + 0x0c, 0x78, 0x06, 0x1c, 0x48, 0x88, 0x4d, 0x78, + 0xe2, 0x00, 0x80, 0x1a, 0xe9, 0x00, 0x40, 0x1a, + 0x01, 0x1c, 0x41, 0x43, 0x12, 0x31, 0x24, 0x20, + 0xfa, 0xf7, 0x91, 0xfd, 0x21, 0x1c, 0x61, 0x43, + 0xc9, 0x00, 0x40, 0x18, 0x29, 0x1c, 0x69, 0x43, + 0xc9, 0x00, 0x42, 0x18, 0x0c, 0x49, 0x88, 0x79, + 0x0c, 0x4b, 0x3c, 0x00, 0x2c, 0x5b, 0x00, 0x00, + 0x53, 0x43, 0x0c, 0x4a, 0x13, 0x60, 0x53, 0x7b, + 0x34, 0x02, 0x14, 0x60, 0x52, 0x7b, 0x88, 0x71, + 0x01, 0x33, 0x58, 0x10, 0x08, 0x4b, 0x80, 0x1a, + 0x01, 0x21, 0x49, 0x02, 0x58, 0x43, 0x00, 0x28, + 0x00, 0xda, 0x49, 0x42, 0x08, 0x18, 0x80, 0x12, + 0x21, 0x38, 0x70, 0xbd, 0x20, 0x10, 0x07, 0x00, + 0xec, 0x04, 0x00, 0x00, 0x00, 0xa0, 0x07, 0x00, + 0x03, 0x03, 0x00, 0x00, 0x3c, 0x00, 0x68, 0x5b, + 0x00, 0x00, 0x10, 0xb5, 0x04, 0x1c, 0x06, 0x21, + 0x04, 0x30, 0xfa, 0xf7, 0x70, 0xfc, 0xff, 0x20, + 0x21, 0x30, 0xff, 0x21, 0x01, 0x55, 0x20, 0x1c, + 0xff, 0x30, 0x41, 0x30, 0x81, 0x70, 0x41, 0x71, + 0xc1, 0x73, 0xff, 0x20, 0x63, 0x30, 0x01, 0x55, + 0x00, 0x20, 0x20, 0x61, 0x60, 0x61, 0xff, 0x34, + 0x01, 0x34, 0xa0, 0x60, 0xe0, 0x60, 0x10, 0xbd, + 0x00, 0x00, 0x70, 0xb5, 0x06, 0x1c, 0x3c, 0x00, + 0xa4, 0x5b, 0x00, 0x00, 0x08, 0x1c, 0x58, 0x60, + 0x9a, 0x60, 0x1c, 0x1c, 0x1e, 0x60, 0x15, 0x1c, + 0x9b, 0x8a, 0xe2, 0x8a, 0x31, 0x1c, 0x02, 0xf0, + 0xa1, 0xfc, 0x28, 0x1a, 0xe0, 0x60, 0x70, 0xbd, + 0x70, 0xb5, 0x04, 0x1c, 0x08, 0x1c, 0x11, 0x1c, + 0x1e, 0x1c, 0x00, 0x25, 0xeb, 0x43, 0x22, 0x1c, + 0x18, 0x32, 0x0b, 0xf0, 0xf7, 0xfb, 0x22, 0x1c, + 0xff, 0x32, 0x50, 0x32, 0x11, 0x1c, 0x0a, 0x39, + 0x3c, 0x00, 0xe0, 0x5b, 0x00, 0x00, 0x01, 0x23, + 0x20, 0x1c, 0x00, 0xf0, 0xc6, 0xf8, 0x0c, 0x28, + 0x10, 0xd0, 0x01, 0x25, 0x20, 0x1c, 0x0b, 0xf0, + 0xac, 0xfa, 0x20, 0x1c, 0x00, 0xf0, 0x19, 0xf8, + 0x20, 0x1c, 0x00, 0xf0, 0x0a, 0xf8, 0x20, 0x1c, + 0x00, 0xf0, 0x29, 0xf8, 0x31, 0x1c, 0x20, 0x1c, + 0x0b, 0xf0, 0x17, 0xfa, 0x28, 0x1c, 0x70, 0xbd, + 0x00, 0x00, 0xff, 0x21, 0x1d, 0x31, 0x09, 0x58, + 0x80, 0x30, 0x3c, 0x00, 0x1c, 0x5c, 0x00, 0x00, + 0x89, 0x07, 0x00, 0x29, 0x01, 0xda, 0x01, 0x21, + 0x00, 0xe0, 0x00, 0x21, 0xc1, 0x62, 0x70, 0x47, + 0x01, 0x1c, 0x80, 0x31, 0x00, 0x22, 0x0a, 0x63, + 0x07, 0x4a, 0x12, 0x68, 0x00, 0x2a, 0x09, 0xd0, + 0x42, 0x88, 0x92, 0x06, 0x06, 0xd5, 0xff, 0x30, + 0x01, 0x30, 0xc0, 0x69, 0x40, 0x07, 0x01, 0xd4, + 0x01, 0x20, 0x08, 0x63, 0x70, 0x47, 0x00, 0x00, + 0xac, 0x69, 0x01, 0x00, 0x3c, 0x00, 0x58, 0x5c, + 0x00, 0x00, 0x80, 0xb5, 0x01, 0x1c, 0x4a, 0x88, + 0x00, 0x20, 0x52, 0x05, 0x05, 0xd5, 0xff, 0x31, + 0x01, 0x31, 0xc9, 0x69, 0x49, 0x07, 0x00, 0xd4, + 0x01, 0x20, 0x06, 0xf0, 0xec, 0xfb, 0x80, 0xbd, + 0x00, 0x00, 0xf8, 0xb5, 0x05, 0x1c, 0x98, 0x68, + 0x17, 0x1c, 0x0e, 0x1c, 0x1c, 0x1c, 0x00, 0x28, + 0x02, 0xd1, 0x20, 0x1c, 0x0c, 0xf0, 0x31, 0xf8, + 0xab, 0x69, 0x39, 0x1c, 0x30, 0x1c, 0x3c, 0x00, + 0x94, 0x5c, 0x00, 0x00, 0xa2, 0x68, 0x0b, 0xf0, + 0x95, 0xfb, 0xf8, 0xbd, 0xf8, 0xb5, 0x16, 0x1c, + 0x0d, 0x1c, 0x1f, 0x1c, 0x00, 0x24, 0x02, 0xf0, + 0x61, 0xfb, 0x18, 0x23, 0x06, 0x49, 0x58, 0x43, + 0x40, 0x18, 0x43, 0x68, 0x00, 0x2b, 0x05, 0xd0, + 0x3a, 0x1c, 0x31, 0x1c, 0x28, 0x1c, 0xfa, 0xf7, + 0x8e, 0xfb, 0x01, 0x24, 0x20, 0x1c, 0xf8, 0xbd, + 0x94, 0x67, 0x01, 0x00, 0x80, 0xb5, 0x07, 0xf0, + 0x3c, 0x00, 0xd0, 0x5c, 0x00, 0x00, 0xc5, 0xfa, + 0x09, 0x49, 0x08, 0x61, 0x08, 0x68, 0x00, 0x28, + 0x02, 0xd1, 0x7d, 0x20, 0x00, 0x01, 0x08, 0x60, + 0x08, 0x68, 0x7d, 0x21, 0xc9, 0x00, 0x41, 0x43, + 0x00, 0x23, 0x01, 0x22, 0x0a, 0x20, 0x0d, 0xf0, + 0x4e, 0xfd, 0x80, 0xbd, 0x00, 0x00, 0xd4, 0x67, + 0x01, 0x00, 0x80, 0xb5, 0x01, 0x21, 0x0a, 0x20, + 0x0d, 0xf0, 0x97, 0xfc, 0x80, 0xbd, 0xf8, 0xb5, + 0x0e, 0x1c, 0x3c, 0x00, 0x0c, 0x5d, 0x00, 0x00, + 0x51, 0x68, 0x14, 0x1c, 0x12, 0x68, 0xa5, 0x68, + 0x0b, 0x1c, 0x75, 0x1b, 0x57, 0x19, 0x97, 0x42, + 0x00, 0xd2, 0x01, 0x31, 0x42, 0x68, 0x00, 0x25, + 0x8a, 0x42, 0x02, 0xdd, 0x01, 0x25, 0x62, 0x60, + 0x05, 0xe0, 0x9a, 0x42, 0x03, 0xd1, 0x01, 0x68, + 0xb9, 0x42, 0x00, 0xd9, 0x01, 0x25, 0x00, 0x2d, + 0x09, 0xd0, 0x01, 0x68, 0x21, 0x60, 0xa6, 0x60, + 0xa3, 0x8a, 0xe2, 0x8a, 0x3c, 0x00, 0x48, 0x5d, + 0x00, 0x00, 0x60, 0x68, 0x02, 0xf0, 0xd7, 0xfb, + 0x30, 0x1a, 0xe0, 0x60, 0x28, 0x1c, 0xf8, 0xbd, + 0x00, 0x00, 0x80, 0xb5, 0x02, 0xf0, 0x07, 0xfb, + 0x18, 0x23, 0x03, 0x49, 0x58, 0x43, 0x40, 0x18, + 0x18, 0x21, 0xfa, 0xf7, 0x98, 0xfb, 0x80, 0xbd, + 0x00, 0x00, 0x94, 0x67, 0x01, 0x00, 0xfe, 0xb5, + 0x04, 0x1c, 0x08, 0x1c, 0x11, 0x1c, 0x1e, 0x1c, + 0x0c, 0x25, 0x01, 0x22, 0x00, 0x92, 0x3c, 0x00, + 0x84, 0x5d, 0x00, 0x00, 0xa2, 0x69, 0x02, 0xab, + 0xfd, 0xf7, 0xf0, 0xf8, 0x00, 0x28, 0x45, 0xd0, + 0x02, 0x98, 0x27, 0x21, 0x02, 0x1c, 0x0a, 0x40, + 0x01, 0xd1, 0x08, 0x43, 0x02, 0x90, 0x21, 0x49, + 0xa0, 0x69, 0x08, 0x40, 0x06, 0xd0, 0x02, 0x98, + 0x01, 0x40, 0x03, 0xd1, 0x49, 0x21, 0xc9, 0x00, + 0x08, 0x43, 0x02, 0x90, 0xa0, 0x6d, 0x02, 0x99, + 0x88, 0x42, 0x30, 0xd0, 0x00, 0x2e, 0x2d, 0xd0, + 0x3c, 0x00, 0xc0, 0x5d, 0x00, 0x00, 0x40, 0x21, + 0x20, 0x1c, 0x58, 0x30, 0xfa, 0xf7, 0x69, 0xfb, + 0x02, 0x98, 0x00, 0x25, 0x00, 0x26, 0x37, 0x1c, + 0xa0, 0x65, 0x19, 0xe0, 0xc0, 0x07, 0x11, 0xd5, + 0xf0, 0x19, 0x00, 0x19, 0x70, 0x30, 0x05, 0x71, + 0x28, 0x1c, 0x04, 0xf0, 0xd4, 0xff, 0x00, 0x28, + 0x04, 0xd0, 0xa0, 0x19, 0x80, 0x30, 0x05, 0x72, + 0x01, 0x36, 0x03, 0xe0, 0xe0, 0x19, 0x60, 0x30, + 0x05, 0x70, 0x3c, 0x00, 0xfc, 0x5d, 0x00, 0x00, + 0x01, 0x37, 0x01, 0x35, 0x2d, 0x06, 0x02, 0x98, + 0x2d, 0x0e, 0x40, 0x08, 0x02, 0x90, 0x02, 0x98, + 0x00, 0x28, 0xe2, 0xd1, 0x84, 0x20, 0x06, 0x51, + 0xf0, 0x19, 0x20, 0x67, 0xe7, 0x65, 0x00, 0x25, + 0x00, 0xe0, 0x0b, 0x25, 0x28, 0x1c, 0xfe, 0xbd, + 0xd8, 0x3a, 0x00, 0x00, 0x38, 0xb5, 0x05, 0x1c, + 0x08, 0x1c, 0x11, 0x1c, 0x00, 0x24, 0xe2, 0x43, + 0x6b, 0x46, 0xff, 0xf7, 0x3c, 0x00, 0x38, 0x5e, + 0x00, 0x00, 0x4f, 0xfa, 0x00, 0x28, 0x05, 0xd0, + 0xa8, 0x69, 0x00, 0x99, 0x01, 0x40, 0x81, 0x42, + 0x00, 0xd1, 0x01, 0x24, 0x20, 0x1c, 0x38, 0xbd, + 0x00, 0x00, 0x7c, 0xb5, 0x05, 0x6a, 0x86, 0x69, + 0x04, 0x1c, 0xc0, 0x68, 0xfb, 0xf7, 0xb7, 0xfb, + 0xe1, 0x69, 0xfb, 0xf7, 0xda, 0xfa, 0x20, 0x1c, + 0xe2, 0x69, 0x40, 0x30, 0xc1, 0x8b, 0x12, 0x89, + 0x89, 0x18, 0xc1, 0x83, 0x06, 0x49, 0x3c, 0x00, + 0x74, 0x5e, 0x00, 0x00, 0x01, 0x94, 0x00, 0x91, + 0x28, 0x69, 0x33, 0x1c, 0x82, 0x88, 0x01, 0x68, + 0xe0, 0x68, 0xc0, 0x68, 0x00, 0xf0, 0xf2, 0xf9, + 0x7c, 0xbd, 0x00, 0x00, 0x91, 0x5e, 0x00, 0x00, + 0xb0, 0xb5, 0xd1, 0x68, 0x55, 0x69, 0xc8, 0x68, + 0x14, 0x1c, 0x14, 0x4b, 0x0c, 0xe0, 0x02, 0x68, + 0x9a, 0x42, 0x07, 0xd1, 0xc2, 0x68, 0xca, 0x60, + 0x00, 0x21, 0xc1, 0x60, 0x01, 0x60, 0xfb, 0xf7, + 0x3c, 0x00, 0xb0, 0x5e, 0x00, 0x00, 0x73, 0xfb, + 0x03, 0xe0, 0x01, 0x1c, 0xc0, 0x68, 0x00, 0x28, + 0xf0, 0xd1, 0xe0, 0x68, 0xc0, 0x68, 0xe8, 0x60, + 0xe0, 0x68, 0xc5, 0x60, 0x20, 0x1c, 0x40, 0x30, + 0xc1, 0x8b, 0x2a, 0x89, 0x89, 0x18, 0xc1, 0x83, + 0x20, 0x68, 0x00, 0x28, 0x02, 0xd0, 0xff, 0xf7, + 0xba, 0xff, 0xb0, 0xbd, 0x04, 0x48, 0x04, 0xf0, + 0x4e, 0xf9, 0x00, 0x6a, 0x07, 0xf0, 0x77, 0xfa, + 0xb0, 0xbd, 0x3c, 0x00, 0xec, 0x5e, 0x00, 0x00, + 0xa0, 0x7e, 0x01, 0x00, 0xa0, 0x6a, 0x01, 0x00, + 0xf1, 0xb5, 0x82, 0xb0, 0x02, 0x98, 0x06, 0x69, + 0x01, 0x1c, 0x08, 0x36, 0x60, 0x31, 0x45, 0x68, + 0x01, 0x91, 0x82, 0xe0, 0x10, 0x21, 0x00, 0x20, + 0x2f, 0x69, 0xfb, 0xf7, 0x63, 0xfb, 0x68, 0x61, + 0x01, 0x89, 0x08, 0x39, 0x09, 0x04, 0x09, 0x0c, + 0x01, 0x81, 0x68, 0x69, 0x00, 0x68, 0x40, 0x18, + 0x08, 0x21, 0xfb, 0xf7, 0x3c, 0x00, 0x28, 0x5f, + 0x00, 0x00, 0x57, 0xfb, 0xe8, 0x61, 0x68, 0x69, + 0x71, 0x88, 0x00, 0x68, 0x20, 0x22, 0x01, 0x80, + 0x71, 0x68, 0x41, 0x60, 0x01, 0x99, 0x49, 0x7b, + 0x89, 0x01, 0x11, 0x43, 0xc1, 0x70, 0x00, 0x21, + 0x81, 0x70, 0x28, 0x20, 0xfb, 0xf7, 0x75, 0xfc, + 0x39, 0x88, 0x04, 0x1c, 0xc1, 0x81, 0xa8, 0x6b, + 0x00, 0x28, 0x03, 0xd1, 0x01, 0x20, 0x80, 0x02, + 0x08, 0x43, 0xe0, 0x81, 0x06, 0x22, 0x3c, 0x00, + 0x64, 0x5f, 0x00, 0x00, 0x39, 0x1d, 0x20, 0x1c, + 0x10, 0x30, 0xfa, 0xf7, 0xc5, 0xfa, 0x39, 0x1c, + 0x0a, 0x31, 0x06, 0x22, 0x20, 0x1c, 0x16, 0x30, + 0x00, 0x90, 0xfa, 0xf7, 0xbd, 0xfa, 0x39, 0x1c, + 0x10, 0x31, 0x06, 0x22, 0x20, 0x1c, 0x1c, 0x30, + 0xfa, 0xf7, 0xb6, 0xfa, 0xe1, 0x89, 0x25, 0x4a, + 0x5c, 0x20, 0x11, 0x40, 0x01, 0x22, 0x92, 0x03, + 0x11, 0x43, 0x40, 0x5b, 0xe1, 0x81, 0x0f, 0x21, + 0x3c, 0x00, 0xa0, 0x5f, 0x00, 0x00, 0x08, 0x40, + 0x60, 0x84, 0x20, 0x1c, 0x20, 0x30, 0x16, 0x21, + 0x81, 0x71, 0x00, 0x21, 0x21, 0x70, 0xe9, 0x6b, + 0x00, 0x29, 0x07, 0xd0, 0x29, 0x69, 0x09, 0x8b, + 0x09, 0x07, 0x09, 0x0f, 0x21, 0x70, 0xa1, 0x84, + 0x18, 0x21, 0x81, 0x71, 0x06, 0x22, 0x60, 0x1c, + 0x00, 0x99, 0xfa, 0xf7, 0x94, 0xfa, 0x70, 0x68, + 0x00, 0x0e, 0xe0, 0x71, 0x70, 0x68, 0x00, 0x02, + 0x00, 0x0e, 0x3c, 0x00, 0xdc, 0x5f, 0x00, 0x00, + 0x20, 0x72, 0x70, 0x68, 0x00, 0x04, 0x00, 0x0e, + 0x60, 0x72, 0x70, 0x68, 0xa0, 0x72, 0x70, 0x88, + 0x00, 0x0a, 0xe0, 0x72, 0x70, 0x88, 0x20, 0x73, + 0x70, 0x88, 0x01, 0x30, 0x00, 0x04, 0x00, 0x0c, + 0x70, 0x80, 0x02, 0xd1, 0x70, 0x68, 0x01, 0x30, + 0x70, 0x60, 0xac, 0x61, 0x02, 0x98, 0x28, 0x62, + 0x2d, 0x68, 0x00, 0x2d, 0x00, 0xd0, 0x79, 0xe7, + 0x02, 0x98, 0x04, 0x49, 0x3c, 0x00, 0x18, 0x60, + 0x00, 0x00, 0x42, 0x68, 0x04, 0x48, 0x04, 0xf0, + 0x74, 0xf8, 0xfe, 0xbd, 0x00, 0x00, 0x8f, 0xc7, + 0xff, 0xff, 0x3d, 0xda, 0x00, 0x00, 0xa0, 0x6a, + 0x01, 0x00, 0xb0, 0xb5, 0x07, 0x4d, 0x28, 0x78, + 0x03, 0x28, 0x08, 0xd0, 0x00, 0x24, 0x2c, 0x70, + 0x69, 0x68, 0x00, 0x29, 0x03, 0xd0, 0x01, 0x20, + 0xfa, 0xf7, 0xc8, 0xf9, 0x6c, 0x60, 0xb0, 0xbd, + 0x00, 0x00, 0x9c, 0x73, 0x01, 0x00, 0x3c, 0x00, + 0x54, 0x60, 0x00, 0x00, 0xf8, 0xb5, 0x2b, 0x4b, + 0xd8, 0x6a, 0x00, 0x28, 0x50, 0xd0, 0x2a, 0x48, + 0x01, 0x1c, 0xff, 0x31, 0x01, 0x31, 0xca, 0x68, + 0x01, 0x32, 0xca, 0x60, 0x1a, 0x6c, 0x00, 0x2a, + 0x02, 0xd1, 0x4a, 0x69, 0x01, 0x32, 0x4a, 0x61, + 0x0a, 0x69, 0x01, 0x32, 0x0a, 0x61, 0xda, 0x68, + 0x00, 0x2a, 0x04, 0xd0, 0x1f, 0x4a, 0x01, 0x32, + 0x12, 0x78, 0x00, 0x2a, 0x02, 0xd1, 0x8a, 0x69, + 0x3c, 0x00, 0x90, 0x60, 0x00, 0x00, 0x01, 0x32, + 0x8a, 0x61, 0x00, 0x25, 0x07, 0x1d, 0x18, 0x26, + 0x1a, 0x4a, 0x6e, 0x43, 0x74, 0x32, 0x90, 0x59, + 0x00, 0x28, 0x29, 0xd0, 0xb4, 0x18, 0x60, 0x69, + 0x00, 0x28, 0x25, 0xd1, 0x60, 0x68, 0x00, 0x28, + 0x02, 0xd0, 0x01, 0x68, 0x00, 0x29, 0x05, 0xd1, + 0xa1, 0x68, 0x00, 0x29, 0x1c, 0xd0, 0x09, 0x68, + 0x00, 0x29, 0x19, 0xd0, 0x00, 0x28, 0x05, 0xd0, + 0xe1, 0x68, 0x3c, 0x00, 0xcc, 0x60, 0x00, 0x00, + 0x01, 0x31, 0xe1, 0x60, 0x00, 0x68, 0x81, 0x42, + 0x11, 0xd3, 0xa0, 0x68, 0x00, 0x28, 0x06, 0xd0, + 0x21, 0x69, 0x00, 0x68, 0x08, 0x18, 0x0c, 0xf0, + 0xa3, 0xfd, 0x00, 0x28, 0x07, 0xd0, 0x06, 0x4a, + 0x01, 0x20, 0x60, 0x61, 0x74, 0x32, 0x91, 0x59, + 0x38, 0x1c, 0xfa, 0xf7, 0x70, 0xf9, 0x01, 0x35, + 0x02, 0x2d, 0xcb, 0xdb, 0xf8, 0xbd, 0x00, 0x00, + 0x44, 0x7d, 0x01, 0x00, 0x3c, 0x00, 0x08, 0x61, + 0x00, 0x00, 0xf4, 0x67, 0x01, 0x00, 0xf8, 0xb5, + 0x0f, 0x1c, 0x00, 0x25, 0x04, 0x1c, 0x00, 0x28, + 0x25, 0xd0, 0x20, 0x1c, 0x04, 0xf0, 0x03, 0xfe, + 0x00, 0x28, 0x06, 0xd0, 0xff, 0xf7, 0xff, 0xf8, + 0x04, 0x1c, 0xff, 0xf7, 0x50, 0xfb, 0x06, 0x1c, + 0x07, 0xe0, 0x20, 0x1c, 0xff, 0xf7, 0x91, 0xfb, + 0x06, 0x1c, 0x20, 0x1c, 0xff, 0xf7, 0x6f, 0xfb, + 0x04, 0x1c, 0x00, 0x2e, 0x06, 0xd0, 0x3c, 0x00, + 0x44, 0x61, 0x00, 0x00, 0xff, 0xf7, 0x4c, 0xfb, + 0x00, 0x28, 0x02, 0xd0, 0x01, 0x25, 0x01, 0x20, + 0x07, 0xe0, 0x00, 0x2c, 0x06, 0xd0, 0xff, 0xf7, + 0xef, 0xf8, 0x00, 0x28, 0x02, 0xd0, 0x01, 0x25, + 0x00, 0x20, 0x38, 0x60, 0x28, 0x1c, 0xf8, 0xbd, + 0xb0, 0xb5, 0xc5, 0x68, 0x04, 0x1c, 0x0d, 0xf0, + 0x8f, 0xfc, 0x20, 0x7e, 0xc1, 0x07, 0x08, 0xd5, + 0xe1, 0x68, 0xa9, 0x42, 0x05, 0xd9, 0x22, 0x69, + 0x3c, 0x00, 0x80, 0x61, 0x00, 0x00, 0x91, 0x42, + 0x02, 0xd3, 0xe1, 0x8a, 0x01, 0x31, 0xe1, 0x82, + 0x81, 0x07, 0x08, 0xd5, 0xe1, 0x68, 0xa9, 0x42, + 0x05, 0xd2, 0x22, 0x69, 0x91, 0x42, 0x02, 0xd8, + 0xe1, 0x8a, 0x01, 0x31, 0xe1, 0x82, 0x40, 0x07, + 0x06, 0xd5, 0xe0, 0x68, 0x21, 0x69, 0x88, 0x42, + 0x02, 0xd1, 0xe0, 0x8a, 0x01, 0x30, 0xe0, 0x82, + 0xe0, 0x8a, 0xa1, 0x8a, 0x88, 0x42, 0x0d, 0xd3, + 0x60, 0x7e, 0x3c, 0x00, 0xbc, 0x61, 0x00, 0x00, + 0x02, 0x28, 0x0b, 0xd0, 0x20, 0x68, 0xe1, 0x68, + 0x04, 0x22, 0x07, 0xf0, 0x65, 0xfb, 0x60, 0x7e, + 0x00, 0x28, 0x03, 0xd1, 0x20, 0x68, 0x08, 0xf0, + 0xab, 0xff, 0xb0, 0xbd, 0x00, 0x20, 0xe0, 0x82, + 0xb0, 0xbd, 0x00, 0x00, 0x70, 0xb5, 0x06, 0x1c, + 0x0c, 0x23, 0x20, 0x49, 0x58, 0x43, 0x45, 0x18, + 0x00, 0x20, 0xa8, 0x60, 0x30, 0x1c, 0x06, 0xf0, + 0x91, 0xfe, 0x04, 0x1c, 0x3c, 0x00, 0xf8, 0x61, + 0x00, 0x00, 0x68, 0x60, 0x33, 0xd0, 0x01, 0x20, + 0xa8, 0x70, 0x2c, 0x20, 0x00, 0x5d, 0x02, 0x28, + 0x03, 0xd1, 0x20, 0x1c, 0x03, 0xf0, 0x45, 0xfe, + 0x10, 0xe0, 0x61, 0x6b, 0x00, 0x29, 0x0a, 0xd0, + 0x01, 0x28, 0x04, 0xd1, 0x21, 0x1c, 0x28, 0x1c, + 0x03, 0xf0, 0x55, 0xfe, 0x06, 0xe0, 0x20, 0x1c, + 0x0a, 0xf0, 0x0d, 0xfc, 0x02, 0xe0, 0x20, 0x1c, + 0x0a, 0xf0, 0x3d, 0xfb, 0x0d, 0x48, 0x3c, 0x00, + 0x34, 0x62, 0x00, 0x00, 0x14, 0x38, 0x41, 0x68, + 0x00, 0x29, 0x10, 0xd0, 0x20, 0x1c, 0x40, 0x30, + 0x02, 0x8b, 0x12, 0x07, 0x92, 0x0f, 0x01, 0x2a, + 0x09, 0xd0, 0x80, 0x8b, 0x32, 0x02, 0x00, 0x09, + 0x00, 0x04, 0x10, 0x43, 0x81, 0x22, 0x02, 0x43, + 0x0c, 0x20, 0x0d, 0xf0, 0xb7, 0xf9, 0x0c, 0xf0, + 0xa5, 0xfd, 0x60, 0x64, 0x70, 0xbd, 0x00, 0x00, + 0x60, 0x7b, 0x01, 0x00, 0xff, 0xb5, 0x08, 0x1c, + 0x3c, 0x00, 0x70, 0x62, 0x00, 0x00, 0x11, 0x1c, + 0x0c, 0x32, 0x20, 0x24, 0x14, 0x43, 0x0c, 0x4a, + 0x83, 0xb0, 0x0c, 0xae, 0x52, 0x68, 0x60, 0xce, + 0x94, 0x70, 0x00, 0x24, 0xd4, 0x70, 0x93, 0x63, + 0x0d, 0x23, 0x40, 0x27, 0xbb, 0x52, 0x94, 0x61, + 0x14, 0x84, 0x01, 0x22, 0x02, 0x92, 0x32, 0x1c, + 0x00, 0x90, 0x01, 0x91, 0x23, 0x1c, 0x29, 0x1c, + 0x03, 0x98, 0x00, 0xf0, 0x66, 0xf9, 0x07, 0xb0, + 0xf0, 0xbd, 0x3c, 0x00, 0xac, 0x62, 0x00, 0x00, + 0xa0, 0x7e, 0x01, 0x00, 0xf8, 0xb5, 0x04, 0x1c, + 0x00, 0x27, 0x11, 0x4e, 0x1d, 0xe0, 0xe0, 0x68, + 0x00, 0x28, 0x70, 0x68, 0x0c, 0xd1, 0x80, 0x88, + 0x00, 0x07, 0x0d, 0xd1, 0x01, 0x21, 0x0c, 0x48, + 0xfb, 0xf7, 0x84, 0xf9, 0xc4, 0x60, 0xe8, 0x60, + 0x70, 0x68, 0x81, 0x88, 0x01, 0x31, 0x02, 0xe0, + 0x81, 0x88, 0x22, 0x89, 0x89, 0x18, 0x81, 0x80, + 0xe0, 0x68, 0x39, 0x1c, 0x3c, 0x00, 0xe8, 0x62, + 0x00, 0x00, 0x00, 0x28, 0x01, 0xd1, 0x71, 0x68, + 0xc9, 0x6d, 0x25, 0x1c, 0x61, 0x60, 0x04, 0x1c, + 0x00, 0x2c, 0xdf, 0xd1, 0xf8, 0xbd, 0xa0, 0x7e, + 0x01, 0x00, 0x06, 0x49, 0x10, 0xb5, 0x49, 0x68, + 0x00, 0x23, 0x05, 0xe0, 0x8a, 0x88, 0x04, 0x89, + 0x12, 0x19, 0x8a, 0x80, 0x43, 0x60, 0xc0, 0x68, + 0x00, 0x28, 0xf7, 0xd1, 0x10, 0xbd, 0xa0, 0x7e, + 0x01, 0x00, 0x10, 0xb5, 0x09, 0x49, 0x3c, 0x00, + 0x24, 0x63, 0x00, 0x00, 0x00, 0x24, 0x49, 0x68, + 0x0a, 0xe0, 0x8a, 0x88, 0x03, 0x89, 0xd2, 0x18, + 0x8a, 0x80, 0xc3, 0x68, 0x22, 0x1c, 0x00, 0x2b, + 0x00, 0xd1, 0xca, 0x6d, 0x42, 0x60, 0x18, 0x1c, + 0x00, 0x28, 0xf2, 0xd1, 0x10, 0xbd, 0x00, 0x00, + 0xa0, 0x7e, 0x01, 0x00, 0x01, 0x1c, 0x13, 0x48, + 0x10, 0xb5, 0x40, 0x68, 0x00, 0x23, 0x09, 0xe0, + 0x82, 0x88, 0x0c, 0x89, 0x12, 0x19, 0x82, 0x80, + 0x3c, 0x00, 0x60, 0x63, 0x00, 0x00, 0x4b, 0x60, + 0xca, 0x68, 0x00, 0x2a, 0x00, 0xd1, 0x41, 0x66, + 0xc9, 0x68, 0x00, 0x29, 0xf3, 0xd1, 0x01, 0x1c, + 0x68, 0x31, 0x81, 0x64, 0xc3, 0x64, 0x43, 0x65, + 0x82, 0x88, 0x08, 0x23, 0x11, 0x1c, 0x08, 0x31, + 0x89, 0x07, 0x89, 0x0f, 0x59, 0x1a, 0x50, 0x23, + 0x19, 0x52, 0x51, 0x18, 0x81, 0x80, 0x01, 0x1c, + 0x40, 0x6e, 0x48, 0x31, 0xc1, 0x60, 0x10, 0xbd, + 0x00, 0x00, 0x3c, 0x00, 0x9c, 0x63, 0x00, 0x00, + 0xa0, 0x7e, 0x01, 0x00, 0x10, 0xb5, 0x07, 0x49, + 0x00, 0x24, 0x4b, 0x68, 0x06, 0xe0, 0xc2, 0x68, + 0x21, 0x1c, 0x00, 0x2a, 0x00, 0xd1, 0xd9, 0x6d, + 0x41, 0x60, 0x10, 0x1c, 0x00, 0x28, 0xf6, 0xd1, + 0x10, 0xbd, 0x00, 0x00, 0xa0, 0x7e, 0x01, 0x00, + 0x70, 0x47, 0x00, 0x00, 0xfe, 0xb5, 0x06, 0x1c, + 0x0c, 0x48, 0x0c, 0x1c, 0x40, 0x68, 0x80, 0x21, + 0x81, 0x70, 0x00, 0x21, 0x3c, 0x00, 0xd8, 0x63, + 0x00, 0x00, 0xc1, 0x70, 0x15, 0x1c, 0x40, 0x22, + 0x81, 0x63, 0x11, 0x52, 0x81, 0x61, 0x01, 0x84, + 0x00, 0x20, 0x04, 0x22, 0x02, 0x92, 0x00, 0x90, + 0x01, 0x91, 0x29, 0x1c, 0x20, 0x1c, 0x1a, 0x1c, + 0x33, 0x1c, 0x00, 0xf0, 0xbc, 0xf8, 0xfe, 0xbd, + 0x00, 0x00, 0xa0, 0x7e, 0x01, 0x00, 0x70, 0xb5, + 0x06, 0x1c, 0x17, 0x48, 0x80, 0x78, 0x02, 0x21, + 0x16, 0x4a, 0x88, 0x43, 0x90, 0x70, 0x3c, 0x00, + 0x14, 0x64, 0x00, 0x00, 0x10, 0x1c, 0x80, 0x78, + 0x08, 0x43, 0x11, 0x1c, 0x88, 0x70, 0x13, 0x48, + 0x00, 0x24, 0xc4, 0x70, 0x70, 0x20, 0xfb, 0xf7, + 0xd9, 0xf9, 0x11, 0x4d, 0x70, 0x21, 0x68, 0x60, + 0xfa, 0xf7, 0x34, 0xf8, 0x30, 0x07, 0x00, 0x0f, + 0x69, 0x68, 0x90, 0x30, 0xc8, 0x65, 0x0d, 0x48, + 0x68, 0x22, 0x08, 0x80, 0x08, 0x1c, 0x28, 0x30, + 0x89, 0x60, 0x48, 0x61, 0x08, 0x20, 0x08, 0x82, + 0x3c, 0x00, 0x50, 0x64, 0x00, 0x00, 0x08, 0x1c, + 0x38, 0x30, 0x48, 0x63, 0x20, 0x38, 0x48, 0x64, + 0x5a, 0x20, 0x50, 0x54, 0x06, 0x48, 0x08, 0x31, + 0x41, 0x64, 0x44, 0x65, 0x70, 0xbd, 0x00, 0x00, + 0x07, 0x00, 0x58, 0x00, 0x07, 0x00, 0xa0, 0x7e, + 0x01, 0x00, 0xde, 0xc0, 0x00, 0x00, 0x00, 0x30, + 0x07, 0x00, 0x0a, 0x4b, 0x10, 0xb5, 0x58, 0x6d, + 0x0a, 0x49, 0x00, 0x22, 0x49, 0x68, 0x00, 0x24, + 0x4a, 0x62, 0x3c, 0x00, 0x8c, 0x64, 0x00, 0x00, + 0x5c, 0x65, 0x4b, 0x6e, 0x00, 0x2b, 0x01, 0xd0, + 0xda, 0x60, 0x4a, 0x66, 0x8b, 0x6d, 0x00, 0x2b, + 0x03, 0xd0, 0x0a, 0x6e, 0x00, 0x21, 0xf9, 0xf7, + 0x9c, 0xff, 0x10, 0xbd, 0x00, 0x30, 0x07, 0x00, + 0xa0, 0x7e, 0x01, 0x00, 0x09, 0x49, 0x10, 0xb5, + 0x08, 0x88, 0x01, 0x30, 0x08, 0x80, 0x01, 0x20, + 0x07, 0x49, 0x80, 0x02, 0x08, 0x60, 0x07, 0x4c, + 0xa2, 0x6d, 0x00, 0x2a, 0x3c, 0x00, 0xc8, 0x64, + 0x00, 0x00, 0x05, 0xd0, 0x05, 0x21, 0xd1, 0x20, + 0x0d, 0xf0, 0x6f, 0xf9, 0x01, 0x20, 0xa0, 0x65, + 0x10, 0xbd, 0xb0, 0x74, 0x01, 0x00, 0x00, 0x10, + 0x07, 0x00, 0x00, 0x30, 0x07, 0x00, 0xff, 0xb5, + 0x83, 0xb0, 0x0c, 0xae, 0x86, 0x46, 0x8c, 0x46, + 0x0e, 0x4a, 0x43, 0xce, 0x0f, 0xad, 0x0f, 0x1c, + 0x52, 0x68, 0x0c, 0x37, 0x30, 0xcd, 0x97, 0x70, + 0xd3, 0x70, 0x96, 0x63, 0x0d, 0x26, 0x3c, 0x00, + 0x04, 0x65, 0x00, 0x00, 0x40, 0x27, 0xbe, 0x52, + 0x05, 0x9e, 0x96, 0x61, 0x13, 0x84, 0x00, 0x22, + 0x02, 0x92, 0x2a, 0x1c, 0x00, 0x90, 0x01, 0x91, + 0x21, 0x1c, 0x60, 0x46, 0x73, 0x46, 0x00, 0xf0, + 0x29, 0xf8, 0x07, 0xb0, 0xf0, 0xbd, 0x00, 0x00, + 0xa0, 0x7e, 0x01, 0x00, 0xff, 0xb5, 0x10, 0x1c, + 0x1a, 0x1c, 0x0c, 0x1c, 0x19, 0x1c, 0x60, 0x23, + 0xff, 0x32, 0x13, 0x43, 0x0c, 0x4a, 0x83, 0xb0, + 0x3c, 0x00, 0x40, 0x65, 0x00, 0x00, 0x0c, 0xae, + 0x52, 0x68, 0x60, 0xce, 0x93, 0x70, 0x00, 0x23, + 0xd3, 0x70, 0x93, 0x63, 0x40, 0x27, 0xbb, 0x52, + 0x93, 0x61, 0x13, 0x84, 0x03, 0x22, 0x02, 0x92, + 0x01, 0x91, 0x29, 0x1c, 0x32, 0x1c, 0x00, 0x90, + 0x20, 0x1c, 0x03, 0x9b, 0x00, 0xf0, 0x05, 0xf8, + 0x07, 0xb0, 0xf0, 0xbd, 0x00, 0x00, 0xa0, 0x7e, + 0x01, 0x00, 0xf8, 0xb5, 0x05, 0x1c, 0x11, 0x48, + 0x1c, 0x1c, 0x3c, 0x00, 0x7c, 0x65, 0x00, 0x00, + 0x08, 0x9b, 0x07, 0x9f, 0x40, 0x68, 0xde, 0x00, + 0x81, 0x65, 0x02, 0x66, 0x00, 0x21, 0x81, 0x80, + 0x0d, 0x48, 0x81, 0x59, 0x20, 0x1c, 0xf9, 0xf7, + 0x22, 0xff, 0x0b, 0x48, 0x30, 0x18, 0x41, 0x68, + 0x28, 0x1c, 0xf9, 0xf7, 0x1c, 0xff, 0x07, 0x49, + 0x06, 0x98, 0x49, 0x68, 0x00, 0x2c, 0x88, 0x62, + 0x0f, 0x86, 0x00, 0xd1, 0x2c, 0x1c, 0x05, 0x48, + 0x4c, 0x62, 0x45, 0x65, 0x3c, 0x00, 0xb8, 0x65, + 0x00, 0x00, 0x01, 0x21, 0x01, 0x65, 0x01, 0x64, + 0xf8, 0xbd, 0xa0, 0x7e, 0x01, 0x00, 0x90, 0x52, + 0x01, 0x00, 0x00, 0x30, 0x07, 0x00, 0xff, 0xb5, + 0x83, 0xb0, 0x0d, 0xae, 0x60, 0xce, 0x0c, 0x9f, + 0x08, 0x1c, 0x11, 0x1c, 0xd2, 0x19, 0xff, 0x32, + 0x40, 0x24, 0x14, 0x43, 0x0b, 0x4a, 0x52, 0x68, + 0x94, 0x70, 0x00, 0x24, 0xd4, 0x70, 0x93, 0x63, + 0x40, 0x23, 0x9f, 0x52, 0x94, 0x61, 0x3c, 0x00, + 0xf4, 0x65, 0x00, 0x00, 0x14, 0x84, 0x02, 0x22, + 0x02, 0x92, 0x32, 0x1c, 0x00, 0x90, 0x01, 0x91, + 0x23, 0x1c, 0x29, 0x1c, 0x03, 0x98, 0xff, 0xf7, + 0xb5, 0xff, 0x07, 0xb0, 0xf0, 0xbd, 0x00, 0x00, + 0xa0, 0x7e, 0x01, 0x00, 0x4c, 0x21, 0x0d, 0x4a, + 0x41, 0x43, 0x10, 0xb5, 0x8c, 0x18, 0x0c, 0x49, + 0x09, 0x78, 0x88, 0x42, 0x07, 0xd1, 0x05, 0xf0, + 0xc7, 0xfd, 0x0a, 0x48, 0x01, 0x88, 0x01, 0x22, + 0x3c, 0x00, 0x30, 0x66, 0x00, 0x00, 0x12, 0x03, + 0x91, 0x43, 0x01, 0x80, 0x20, 0x1c, 0x30, 0x30, + 0x0c, 0x23, 0xc1, 0x56, 0x40, 0x7b, 0x81, 0x42, + 0x02, 0xdd, 0x20, 0x8d, 0x0c, 0xf0, 0xe5, 0xfb, + 0x10, 0xbd, 0x58, 0xe3, 0x01, 0x00, 0x3c, 0x7c, + 0x01, 0x00, 0x32, 0x80, 0x07, 0x00, 0x01, 0x1c, + 0x60, 0x31, 0x80, 0xb5, 0xca, 0x79, 0x8b, 0x79, + 0x9a, 0x42, 0x07, 0xd9, 0x48, 0x7a, 0x0c, 0x23, + 0x07, 0x49, 0x3c, 0x00, 0x6c, 0x66, 0x00, 0x00, + 0x58, 0x43, 0x08, 0x5a, 0x0c, 0xf0, 0xd0, 0xfb, + 0x80, 0xbd, 0x20, 0x30, 0x00, 0x7b, 0x01, 0x28, + 0xfa, 0xd1, 0x48, 0x7a, 0x05, 0xf0, 0x40, 0xfd, + 0x80, 0xbd, 0x00, 0x00, 0x60, 0x7b, 0x01, 0x00, + 0x10, 0xb5, 0x04, 0x1c, 0x1c, 0x21, 0xf9, 0xf7, + 0x03, 0xff, 0x03, 0x48, 0xa0, 0x80, 0xe0, 0x80, + 0x20, 0x81, 0x60, 0x81, 0xa0, 0x81, 0x10, 0xbd, + 0xff, 0xff, 0x00, 0x00, 0x3c, 0x00, 0xa8, 0x66, + 0x00, 0x00, 0xff, 0xb5, 0x04, 0x1c, 0x00, 0x20, + 0x83, 0xb0, 0x0d, 0x1c, 0x06, 0x2c, 0x02, 0x90, + 0x38, 0xd2, 0x1f, 0x4a, 0xff, 0x26, 0xc1, 0x00, + 0x89, 0x18, 0x89, 0x78, 0xa1, 0x42, 0x03, 0xd1, + 0xc0, 0x00, 0x80, 0x18, 0x46, 0x78, 0x04, 0xe0, + 0x01, 0x30, 0x00, 0x06, 0x00, 0x16, 0x06, 0x28, + 0xf1, 0xdb, 0xff, 0x2e, 0x24, 0xd0, 0x01, 0x93, + 0x20, 0x1c, 0x0d, 0xf0, 0xe8, 0xf9, 0x3c, 0x00, + 0xe4, 0x66, 0x00, 0x00, 0x00, 0x28, 0x05, 0xd0, + 0x24, 0x21, 0x28, 0x1c, 0x01, 0xab, 0x02, 0xaa, + 0xfa, 0xf7, 0x30, 0xfe, 0x10, 0x49, 0xf0, 0x00, + 0x30, 0x39, 0x0f, 0x58, 0x31, 0x06, 0x09, 0x16, + 0x28, 0x1c, 0x05, 0x9a, 0x01, 0x9b, 0xf9, 0xf7, + 0x6e, 0xfe, 0x06, 0x1c, 0x10, 0xd1, 0x20, 0x1c, + 0x0d, 0xf0, 0xd0, 0xf9, 0x00, 0x28, 0x0b, 0xd0, + 0x28, 0x1c, 0x69, 0x69, 0xfa, 0xf7, 0x12, 0xfe, + 0x3c, 0x00, 0x20, 0x67, 0x00, 0x00, 0x02, 0x98, + 0x68, 0x61, 0x04, 0xe0, 0x06, 0x2c, 0x01, 0xd3, + 0x07, 0x26, 0x00, 0xe0, 0x08, 0x26, 0x30, 0x1c, + 0x07, 0xb0, 0xf0, 0xbd, 0x00, 0x00, 0xcc, 0x5a, + 0x01, 0x00, 0x10, 0xb5, 0x0c, 0x1c, 0x09, 0xf0, + 0x86, 0xf8, 0x00, 0x28, 0x02, 0xd0, 0x20, 0x1c, + 0x09, 0xf0, 0xb5, 0xf8, 0x10, 0xbd, 0xfe, 0xb5, + 0x13, 0x4d, 0x04, 0x1c, 0xae, 0x69, 0x00, 0x2e, + 0x1c, 0xd0, 0x3c, 0x00, 0x5c, 0x67, 0x00, 0x00, + 0x10, 0x4f, 0x30, 0x37, 0x78, 0x68, 0x60, 0x43, + 0x01, 0x1c, 0x28, 0x88, 0xf9, 0xf7, 0xd2, 0xff, + 0x39, 0x68, 0x61, 0x43, 0x41, 0x18, 0x01, 0xa8, + 0x32, 0x1c, 0xf9, 0xf7, 0x37, 0xfe, 0x02, 0x98, + 0x29, 0x6a, 0x40, 0x18, 0x28, 0x62, 0x0b, 0xd4, + 0xe9, 0x69, 0x88, 0x42, 0x08, 0xd9, 0xa9, 0x69, + 0x40, 0x1a, 0x28, 0x62, 0x01, 0x98, 0x01, 0x30, + 0x01, 0xe0, 0x00, 0x20, 0x3c, 0x00, 0x98, 0x67, + 0x00, 0x00, 0x02, 0x90, 0x01, 0x90, 0x01, 0x98, + 0xfe, 0xbd, 0xc8, 0x74, 0x01, 0x00, 0xf8, 0xb5, + 0x00, 0x28, 0x28, 0xd0, 0x00, 0x24, 0x14, 0x4d, + 0x00, 0xe0, 0x01, 0x34, 0x61, 0x00, 0x09, 0x19, + 0x49, 0x19, 0x49, 0x78, 0x00, 0x29, 0xf8, 0xd1, + 0x63, 0x00, 0x1b, 0x19, 0x03, 0x33, 0x07, 0x22, + 0x69, 0x46, 0x03, 0xf0, 0xd4, 0xfb, 0x00, 0x2c, + 0x0f, 0xd0, 0x00, 0x20, 0x00, 0x99, 0x3c, 0x00, + 0xd4, 0x67, 0x00, 0x00, 0x0a, 0xe0, 0x42, 0x00, + 0x12, 0x18, 0xae, 0x5c, 0x53, 0x18, 0x52, 0x19, + 0x5e, 0x71, 0x56, 0x78, 0x01, 0x30, 0x9e, 0x71, + 0x92, 0x78, 0xda, 0x71, 0xa0, 0x42, 0xf2, 0xdb, + 0x00, 0x98, 0x03, 0x22, 0x02, 0x30, 0x03, 0x49, + 0xf9, 0xf7, 0x7e, 0xfe, 0xf8, 0xbd, 0x00, 0x00, + 0xeb, 0x62, 0x01, 0x00, 0xe8, 0x62, 0x01, 0x00, + 0xb0, 0xb5, 0x05, 0x1c, 0x08, 0x1c, 0xfa, 0xf7, + 0x3c, 0x00, 0x10, 0x68, 0x00, 0x00, 0x9d, 0xff, + 0x04, 0x1c, 0x28, 0x1c, 0xfa, 0xf7, 0xd9, 0xfe, + 0x21, 0x1c, 0xfa, 0xf7, 0xfc, 0xfd, 0x20, 0x1c, + 0xb0, 0xbd, 0xf3, 0xb5, 0x44, 0x48, 0x0c, 0x1c, + 0x00, 0x78, 0x81, 0xb0, 0x01, 0x28, 0x72, 0xd1, + 0xfa, 0xf7, 0x82, 0xf8, 0x41, 0x4d, 0xe8, 0x6a, + 0x41, 0x49, 0x08, 0x60, 0xe8, 0x6b, 0x48, 0x60, + 0x40, 0x48, 0xfa, 0xf7, 0xa6, 0xf9, 0xe8, 0x6a, + 0x00, 0x28, 0x3c, 0x00, 0x4c, 0x68, 0x00, 0x00, + 0xfc, 0xda, 0x22, 0x1c, 0x0f, 0x20, 0x01, 0x99, + 0x0a, 0xf0, 0xa4, 0xf8, 0x38, 0x4d, 0x02, 0x27, + 0x2f, 0x63, 0x38, 0x4a, 0x64, 0x26, 0x00, 0x20, + 0xaa, 0x21, 0x08, 0x32, 0x13, 0x18, 0x01, 0x30, + 0x00, 0x04, 0x00, 0x0c, 0x64, 0x28, 0x19, 0x74, + 0xf8, 0xd3, 0x16, 0x81, 0x00, 0x20, 0x50, 0x60, + 0x10, 0x1c, 0x10, 0x30, 0x10, 0x60, 0x00, 0x25, + 0x17, 0x1c, 0xd2, 0x60, 0x3c, 0x00, 0x88, 0x68, + 0x00, 0x00, 0x08, 0xe0, 0x28, 0x1c, 0xf9, 0xf7, + 0xa2, 0xff, 0x41, 0x31, 0x78, 0x19, 0x01, 0x35, + 0x2d, 0x04, 0x2d, 0x0c, 0x01, 0x74, 0xb5, 0x42, + 0xf4, 0xd3, 0x26, 0x4d, 0x6f, 0x63, 0x01, 0x20, + 0x28, 0x63, 0x24, 0x4d, 0xe8, 0x6a, 0x00, 0x28, + 0xfb, 0xda, 0x0b, 0x22, 0x3b, 0x1c, 0x24, 0x4e, + 0x03, 0xe0, 0x01, 0x32, 0x64, 0x2a, 0x00, 0xd1, + 0x00, 0x22, 0x10, 0x1c, 0x0c, 0x21, 0x3c, 0x00, + 0xc4, 0x68, 0x00, 0x00, 0x01, 0x39, 0x75, 0x5c, + 0x1f, 0x18, 0x3f, 0x7c, 0xbd, 0x42, 0xf3, 0xd1, + 0x01, 0x38, 0x00, 0xd5, 0x63, 0x20, 0x00, 0x29, + 0xf4, 0xd1, 0x18, 0x4e, 0x50, 0x1c, 0xf1, 0x6b, + 0x1a, 0x4a, 0x10, 0x1c, 0x01, 0x38, 0xfd, 0xd1, + 0xf0, 0x6b, 0x88, 0x42, 0x01, 0xd0, 0x01, 0x1c, + 0xf7, 0xe7, 0x02, 0x27, 0x37, 0x63, 0x16, 0x4d, + 0x90, 0x21, 0x28, 0x1c, 0xf9, 0xf7, 0xce, 0xfd, + 0x3c, 0x00, 0x00, 0x69, 0x00, 0x00, 0x28, 0x1c, + 0x28, 0x30, 0x28, 0x60, 0x28, 0x1c, 0x10, 0x30, + 0x2f, 0x81, 0xe8, 0x60, 0x28, 0x1c, 0x20, 0x30, + 0x28, 0x61, 0x04, 0x21, 0x00, 0xe0, 0x0c, 0xe0, + 0x29, 0x83, 0xe8, 0x61, 0xed, 0x62, 0x75, 0x63, + 0x01, 0x20, 0x30, 0x63, 0x22, 0x1c, 0x89, 0x20, + 0x01, 0x99, 0x0a, 0xf0, 0x38, 0xf8, 0x00, 0x20, + 0x28, 0x63, 0xfe, 0xbd, 0x00, 0x00, 0x08, 0x57, + 0x01, 0x00, 0x3c, 0x00, 0x3c, 0x69, 0x00, 0x00, + 0x00, 0x30, 0x07, 0x00, 0x10, 0x8e, 0x01, 0x00, + 0x74, 0xff, 0x01, 0x00, 0x09, 0x57, 0x01, 0x00, + 0x20, 0x4e, 0x00, 0x00, 0xe4, 0xfe, 0x01, 0x00, + 0x80, 0xb5, 0x13, 0x28, 0x1e, 0xd0, 0xf0, 0x28, + 0x16, 0xd1, 0x09, 0xf0, 0xb5, 0xf9, 0x00, 0x28, + 0x13, 0xd1, 0x0d, 0xf0, 0xbf, 0xfa, 0x11, 0xf0, + 0x0d, 0xfc, 0x00, 0x22, 0x04, 0x21, 0xc4, 0x20, + 0x0c, 0xf0, 0x1c, 0xff, 0x3c, 0x00, 0x78, 0x69, + 0x00, 0x00, 0x09, 0x48, 0x00, 0x21, 0x00, 0x78, + 0x05, 0xf0, 0x3f, 0xfd, 0x05, 0xf0, 0x93, 0xf8, + 0x07, 0x49, 0x01, 0x20, 0x08, 0x60, 0x80, 0xbd, + 0x01, 0x1c, 0x01, 0x20, 0xfa, 0xf7, 0x87, 0xfc, + 0x80, 0xbd, 0x00, 0xf0, 0x32, 0xf8, 0x80, 0xbd, + 0x00, 0x00, 0x6a, 0x57, 0x01, 0x00, 0x3c, 0xd9, + 0x01, 0x00, 0xb0, 0xb5, 0x0c, 0xf0, 0xff, 0xf9, + 0x0b, 0x49, 0x02, 0x24, 0x48, 0x60, 0x3c, 0x00, + 0xb4, 0x69, 0x00, 0x00, 0x0a, 0x48, 0x04, 0x61, + 0x01, 0x20, 0x77, 0x21, 0x09, 0x03, 0x08, 0x61, + 0x08, 0x4d, 0x68, 0x68, 0x80, 0x07, 0x02, 0xd4, + 0x68, 0x68, 0x20, 0x43, 0x68, 0x60, 0x09, 0xf0, + 0xc7, 0xf9, 0x68, 0x68, 0xa0, 0x43, 0x68, 0x60, + 0x00, 0x20, 0xb0, 0xbd, 0xe0, 0x60, 0x01, 0x00, + 0x00, 0x30, 0x07, 0x00, 0x00, 0x01, 0x07, 0x00, + 0x80, 0xb5, 0x01, 0x23, 0x03, 0x22, 0x00, 0x21, + 0x3c, 0x00, 0xf0, 0x69, 0x00, 0x00, 0x02, 0x20, + 0x3c, 0xf0, 0xf1, 0xfa, 0x00, 0x28, 0x01, 0xd0, + 0xfa, 0xf7, 0x81, 0xfc, 0x80, 0xbd, 0x1c, 0xb5, + 0xfc, 0xf7, 0xf5, 0xfa, 0xfa, 0xf7, 0x19, 0xfe, + 0x01, 0xf0, 0x03, 0xf9, 0x00, 0x24, 0x21, 0x1c, + 0x68, 0x46, 0x01, 0xf0, 0xe2, 0xfb, 0x00, 0xab, + 0x18, 0x78, 0x01, 0x28, 0x03, 0xd0, 0x02, 0x28, + 0x01, 0xd0, 0x03, 0x28, 0x01, 0xd1, 0x0c, 0xf0, + 0xb2, 0xfc, 0x3c, 0x00, 0x2c, 0x6a, 0x00, 0x00, + 0x01, 0x34, 0x24, 0x06, 0x24, 0x16, 0x06, 0x2c, + 0xec, 0xdb, 0xfa, 0xf7, 0x09, 0xf9, 0xfa, 0xf7, + 0xe7, 0xfc, 0xfa, 0xf7, 0x33, 0xfa, 0xfa, 0xf7, + 0x6d, 0xfa, 0xfb, 0xf7, 0xdf, 0xff, 0x05, 0xf0, + 0x4d, 0xfb, 0x06, 0xf0, 0x81, 0xfc, 0x0b, 0xf0, + 0x7d, 0xf9, 0x07, 0xf0, 0x29, 0xfc, 0x11, 0x48, + 0x10, 0x21, 0x01, 0x60, 0x09, 0x01, 0x01, 0x60, + 0xc9, 0x02, 0x01, 0x60, 0x3c, 0x00, 0x68, 0x6a, + 0x00, 0x00, 0x89, 0x00, 0x01, 0x60, 0x20, 0x21, + 0x01, 0x60, 0x04, 0x21, 0x01, 0x60, 0x08, 0x21, + 0x01, 0x60, 0x40, 0x21, 0x01, 0x60, 0x80, 0x21, + 0x01, 0x60, 0x89, 0x00, 0x01, 0x60, 0x49, 0x00, + 0x01, 0x60, 0x49, 0x00, 0x01, 0x60, 0x49, 0x00, + 0x01, 0x60, 0xc9, 0x03, 0x01, 0x60, 0x89, 0x0b, + 0x01, 0x60, 0xf9, 0xf7, 0x41, 0xff, 0x1c, 0xbd, + 0x00, 0x00, 0x00, 0x10, 0x07, 0x00, 0x3c, 0x00, + 0xa4, 0x6a, 0x00, 0x00, 0x80, 0xb5, 0x3b, 0xf0, + 0x4f, 0xf8, 0x3b, 0xf0, 0x7d, 0xf9, 0xfa, 0xf7, + 0x4b, 0xf9, 0x80, 0xbd, 0xf8, 0xb5, 0x00, 0x25, + 0x00, 0x24, 0x00, 0x22, 0x00, 0x28, 0x71, 0xd0, + 0x43, 0x4f, 0xb9, 0x68, 0x0b, 0x1a, 0xbb, 0x60, + 0xf8, 0x68, 0x39, 0x1c, 0x01, 0x30, 0xf8, 0x60, + 0x89, 0x6a, 0x00, 0x2b, 0x1e, 0xdc, 0x02, 0x24, + 0x00, 0x29, 0x06, 0xda, 0xfb, 0x69, 0x98, 0x42, + 0x3c, 0x00, 0xe0, 0x6a, 0x00, 0x00, 0x06, 0xdd, + 0x3b, 0x69, 0x98, 0x42, 0x09, 0xdd, 0x07, 0xe0, + 0xbb, 0x69, 0x98, 0x42, 0x01, 0xdc, 0x01, 0x24, + 0x03, 0xe0, 0x7b, 0x69, 0x98, 0x42, 0x00, 0xdd, + 0x03, 0x24, 0x78, 0x6a, 0x00, 0x28, 0x08, 0xd0, + 0x00, 0x20, 0x78, 0x62, 0x03, 0x2c, 0x01, 0xd1, + 0x02, 0x24, 0x02, 0xe0, 0x02, 0x2c, 0x00, 0xd1, + 0x01, 0x24, 0x2e, 0x48, 0x01, 0x2c, 0x00, 0x79, + 0x18, 0xd1, 0x3c, 0x00, 0x1c, 0x6b, 0x00, 0x00, + 0xbb, 0x78, 0x99, 0x42, 0x15, 0xda, 0x3b, 0x78, + 0x7b, 0x70, 0x39, 0x70, 0x01, 0x31, 0xb9, 0x62, + 0x01, 0xd5, 0x01, 0x31, 0xb9, 0x62, 0xb9, 0x6a, + 0x01, 0x25, 0x99, 0x42, 0x03, 0xd1, 0x04, 0x28, + 0x04, 0xd2, 0x01, 0x30, 0x00, 0xe0, 0x00, 0x20, + 0x38, 0x71, 0x01, 0x22, 0x00, 0x29, 0x33, 0xda, + 0x27, 0xe0, 0x03, 0x2c, 0x35, 0xd1, 0x00, 0x26, + 0x00, 0x28, 0x07, 0xd0, 0x3c, 0x00, 0x58, 0x6b, + 0x00, 0x00, 0x1e, 0x49, 0x81, 0x40, 0x38, 0x6a, + 0x08, 0x18, 0x0c, 0xf0, 0x5c, 0xf8, 0x00, 0x28, + 0x2c, 0xd0, 0x1b, 0x48, 0x00, 0x78, 0x40, 0x07, + 0x05, 0xd5, 0xf8, 0x68, 0x39, 0x69, 0x88, 0x42, + 0x01, 0xdb, 0x03, 0x23, 0xfe, 0x56, 0xb8, 0x6a, + 0xb0, 0x42, 0x12, 0xdd, 0x01, 0x21, 0x79, 0x62, + 0x39, 0x78, 0x01, 0x25, 0x79, 0x70, 0x38, 0x70, + 0x01, 0x38, 0xb8, 0x62, 0x88, 0x42, 0x3c, 0x00, + 0x94, 0x6b, 0x00, 0x00, 0x01, 0xd0, 0x00, 0x21, + 0x39, 0x71, 0x00, 0x28, 0x0c, 0xda, 0x07, 0x20, + 0x38, 0x71, 0x00, 0xe0, 0x12, 0xe0, 0x07, 0xe0, + 0x38, 0x79, 0x00, 0x28, 0x09, 0xd0, 0xff, 0x30, + 0x38, 0x71, 0x06, 0xe0, 0x00, 0x2a, 0x02, 0xd0, + 0x0c, 0xf0, 0xf8, 0xf8, 0x38, 0x62, 0x00, 0x2c, + 0x04, 0xd0, 0xfe, 0xf7, 0x97, 0xfd, 0x29, 0x1c, + 0x08, 0xf0, 0xfc, 0xfb, 0xf8, 0xbd, 0x00, 0x00, + 0x3c, 0x00, 0xd0, 0x6b, 0x00, 0x00, 0xac, 0x7e, + 0x01, 0x00, 0x50, 0xc3, 0x00, 0x00, 0x1d, 0x75, + 0x01, 0x00, 0x80, 0xb5, 0x10, 0x68, 0x00, 0x28, + 0x02, 0xd0, 0x00, 0xf0, 0x0a, 0xf8, 0x80, 0xbd, + 0x03, 0x48, 0xc0, 0x69, 0x80, 0x68, 0x08, 0xf0, + 0xb2, 0xf9, 0x80, 0xbd, 0x00, 0x00, 0x84, 0x6a, + 0x01, 0x00, 0x10, 0xb5, 0x04, 0x1c, 0xc0, 0x68, + 0xc0, 0x68, 0x00, 0x28, 0x01, 0xd1, 0xfa, 0xf7, + 0x7a, 0xfb, 0x3c, 0x00, 0x0c, 0x6c, 0x00, 0x00, + 0xe0, 0x68, 0xe1, 0x69, 0xc0, 0x68, 0x23, 0x1c, + 0x01, 0x4a, 0xff, 0xf7, 0xd7, 0xfb, 0x10, 0xbd, + 0xdd, 0x6b, 0x00, 0x00, 0xb0, 0xb5, 0x05, 0x1c, + 0x0c, 0x21, 0x00, 0x20, 0xfa, 0xf7, 0xd6, 0xfc, + 0x04, 0x1c, 0x00, 0x68, 0x00, 0x21, 0x41, 0x60, + 0x01, 0x60, 0x29, 0x88, 0x01, 0x81, 0x69, 0x88, + 0x41, 0x81, 0x29, 0x1c, 0xff, 0x31, 0x21, 0x31, + 0x20, 0x1c, 0x03, 0xf0, 0x3c, 0x00, 0x48, 0x6c, + 0x00, 0x00, 0x77, 0xf9, 0x29, 0x1c, 0xff, 0x31, + 0x46, 0x31, 0x20, 0x1c, 0x03, 0xf0, 0x71, 0xf9, + 0x29, 0x1c, 0xff, 0x31, 0x50, 0x31, 0x20, 0x1c, + 0x03, 0xf0, 0x6b, 0xf9, 0x29, 0x1c, 0xff, 0x31, + 0x43, 0x31, 0x20, 0x1c, 0x03, 0xf0, 0x65, 0xf9, + 0x29, 0x1c, 0xff, 0x31, 0x63, 0x31, 0x20, 0x1c, + 0x03, 0xf0, 0x5f, 0xf9, 0x04, 0x48, 0x00, 0x68, + 0x00, 0x28, 0x02, 0xd0, 0x20, 0x1c, 0x3c, 0x00, + 0x84, 0x6c, 0x00, 0x00, 0xff, 0xf7, 0x8e, 0xfd, + 0x20, 0x1c, 0xb0, 0xbd, 0xe4, 0x62, 0x01, 0x00, + 0xf8, 0xb5, 0x05, 0x1c, 0x0c, 0x1c, 0x04, 0xd1, + 0x05, 0x21, 0x18, 0x20, 0xfa, 0xf7, 0x02, 0xfb, + 0x4d, 0xe0, 0x29, 0x1c, 0x12, 0x31, 0x06, 0x22, + 0x60, 0x1c, 0xf9, 0xf7, 0x25, 0xfc, 0x22, 0x1c, + 0x30, 0x32, 0x00, 0x26, 0x00, 0x21, 0x00, 0x20, + 0x16, 0x70, 0x34, 0x4b, 0x1b, 0x5c, 0x2f, 0x8a, + 0x3c, 0x00, 0xc0, 0x6c, 0x00, 0x00, 0xdf, 0x40, + 0xff, 0x07, 0x07, 0xd5, 0x17, 0x78, 0x01, 0x33, + 0x01, 0x37, 0x17, 0x70, 0x67, 0x18, 0x30, 0x37, + 0x7b, 0x70, 0x01, 0x31, 0x01, 0x30, 0x0e, 0x28, + 0xee, 0xdb, 0xa8, 0x7b, 0x60, 0x72, 0x10, 0x78, + 0x00, 0x28, 0x2b, 0xd0, 0x2a, 0x48, 0x1e, 0x21, + 0x09, 0x5c, 0x27, 0x1c, 0x10, 0x37, 0x21, 0x72, + 0x01, 0x68, 0x61, 0x81, 0xc1, 0x89, 0x21, 0x77, + 0x81, 0x89, 0x3c, 0x00, 0xfc, 0x6c, 0x00, 0x00, + 0x79, 0x73, 0xc1, 0x8a, 0xa1, 0x81, 0x01, 0x8b, + 0xe1, 0x81, 0x42, 0x8a, 0x21, 0x1c, 0x60, 0x31, + 0x4a, 0x80, 0x82, 0x8a, 0x8a, 0x80, 0x1f, 0x49, + 0x2c, 0x31, 0x09, 0x7a, 0x00, 0x29, 0x09, 0xd0, + 0x02, 0x29, 0x0a, 0xd1, 0x01, 0x22, 0x62, 0x62, + 0x62, 0x72, 0x42, 0x8b, 0xa2, 0x81, 0x80, 0x8b, + 0xe0, 0x81, 0x03, 0xe0, 0x01, 0x21, 0x66, 0x62, + 0x00, 0xe0, 0x00, 0x21, 0x3c, 0x00, 0x38, 0x6d, + 0x00, 0x00, 0xe8, 0x7b, 0x08, 0x40, 0x01, 0xd1, + 0x00, 0x20, 0xf8, 0xbd, 0xa8, 0x68, 0x43, 0x1c, + 0x09, 0xd0, 0x22, 0x1c, 0x12, 0x32, 0x00, 0x92, + 0x93, 0x1d, 0x02, 0x32, 0x21, 0x1c, 0x01, 0xf0, + 0x9c, 0xfa, 0xa0, 0x62, 0x00, 0xe0, 0xa6, 0x62, + 0x68, 0x7b, 0x29, 0x1c, 0x1d, 0x31, 0x20, 0x74, + 0x0b, 0x48, 0x20, 0x22, 0x20, 0x62, 0x20, 0x1c, + 0x42, 0x30, 0xbe, 0x73, 0xf9, 0xf7, 0x3c, 0x00, + 0x74, 0x6d, 0x00, 0x00, 0xc1, 0xfb, 0x40, 0x34, + 0x26, 0x70, 0x68, 0x7e, 0x04, 0x49, 0x60, 0x70, + 0x68, 0x68, 0x2c, 0x31, 0x48, 0x60, 0x01, 0x20, + 0xda, 0xe7, 0x00, 0x00, 0x90, 0x58, 0x01, 0x00, + 0xc8, 0x6e, 0x01, 0x00, 0x91, 0x02, 0x01, 0x00, + 0x70, 0xb5, 0x16, 0x1c, 0x0d, 0x1c, 0x04, 0x1c, + 0x00, 0x28, 0x06, 0xd0, 0x0c, 0x20, 0xfa, 0xf7, + 0x47, 0xfd, 0x30, 0xc0, 0x08, 0x38, 0x06, 0x72, + 0x3c, 0x00, 0xb0, 0x6d, 0x00, 0x00, 0x70, 0xbd, + 0x00, 0x20, 0x70, 0xbd, 0x00, 0x00, 0x01, 0x1c, + 0x05, 0x48, 0x80, 0xb5, 0x00, 0x68, 0x01, 0xd0, + 0x01, 0x21, 0x00, 0xe0, 0x00, 0x21, 0xfc, 0xf7, + 0xa0, 0xfc, 0x80, 0xbd, 0x00, 0x00, 0x0c, 0x79, + 0x01, 0x00, 0x70, 0xb5, 0x0e, 0x1c, 0x04, 0x1c, + 0x00, 0x28, 0x01, 0xd1, 0xfa, 0xf7, 0x8f, 0xfa, + 0x06, 0x4d, 0x28, 0x68, 0x00, 0x28, 0x01, 0xd0, + 0xfa, 0xf7, 0x3c, 0x00, 0xec, 0x6d, 0x00, 0x00, + 0x89, 0xfa, 0x04, 0x48, 0x2e, 0x60, 0xc4, 0x60, + 0x01, 0x21, 0x01, 0x70, 0x70, 0xbd, 0x00, 0x00, + 0xa8, 0x7e, 0x01, 0x00, 0x30, 0x00, 0x07, 0x00, + 0x10, 0xb5, 0x07, 0x4c, 0x20, 0x68, 0x00, 0x28, + 0x01, 0xd1, 0xfa, 0xf7, 0x77, 0xfa, 0x05, 0x48, + 0x00, 0x69, 0x21, 0x68, 0xf9, 0xf7, 0xdf, 0xfa, + 0x00, 0x20, 0x20, 0x60, 0x10, 0xbd, 0x00, 0x00, + 0xa8, 0x7e, 0x01, 0x00, 0x3c, 0x00, 0x28, 0x6e, + 0x00, 0x00, 0x30, 0x00, 0x07, 0x00, 0x01, 0x20, + 0x05, 0x49, 0xc0, 0x06, 0x80, 0xb5, 0x08, 0x60, + 0x00, 0x22, 0x03, 0x21, 0x54, 0x20, 0x0c, 0xf0, + 0xb8, 0xfc, 0x80, 0xbd, 0x00, 0x00, 0x00, 0x10, + 0x07, 0x00, 0x80, 0xb5, 0x00, 0x22, 0x04, 0x21, + 0xc4, 0x20, 0x0c, 0xf0, 0xae, 0xfc, 0x80, 0xbd, + 0x00, 0x00, 0x04, 0x48, 0x80, 0xb5, 0x00, 0x88, + 0x02, 0x49, 0xff, 0xf7, 0xb8, 0xff, 0x3c, 0x00, + 0x64, 0x6e, 0x00, 0x00, 0x80, 0xbd, 0x00, 0x00, + 0x75, 0x4b, 0x00, 0x00, 0xc8, 0x74, 0x01, 0x00, + 0xf8, 0xb5, 0x06, 0x1c, 0x31, 0x48, 0x00, 0x25, + 0xc0, 0x68, 0x0c, 0x1c, 0x00, 0x28, 0x30, 0xd0, + 0x2e, 0x48, 0x2f, 0x4f, 0x04, 0x30, 0x00, 0x78, + 0x38, 0x76, 0x2c, 0x48, 0x04, 0x30, 0x40, 0x78, + 0x38, 0x81, 0x00, 0x2a, 0x0b, 0xd0, 0xf9, 0xf7, + 0xa5, 0xfa, 0x1f, 0x20, 0xb8, 0x76, 0x20, 0x1c, + 0x3c, 0x00, 0xa0, 0x6e, 0x00, 0x00, 0xf9, 0xf7, + 0xf6, 0xf9, 0x25, 0x48, 0x04, 0x30, 0x80, 0x78, + 0xb8, 0x76, 0x43, 0xe0, 0x25, 0x48, 0x22, 0x49, + 0x84, 0x42, 0x4d, 0x69, 0x02, 0xd2, 0x6c, 0x43, + 0xe4, 0x0b, 0x0f, 0xe0, 0x1f, 0x48, 0x21, 0x1c, + 0x80, 0x6a, 0x00, 0x90, 0xf9, 0xf7, 0x23, 0xfc, + 0x00, 0x99, 0x02, 0x1c, 0x4a, 0x43, 0xa1, 0x1a, + 0x1a, 0x4a, 0x69, 0x43, 0x52, 0x6a, 0xc9, 0x0b, + 0x50, 0x43, 0x3c, 0x00, 0xdc, 0x6e, 0x00, 0x00, + 0x44, 0x18, 0x02, 0x2c, 0x01, 0xd8, 0x00, 0x20, + 0xf8, 0xbd, 0xf9, 0xf7, 0x7d, 0xfa, 0x1f, 0x20, + 0xb8, 0x76, 0x20, 0x1c, 0xf9, 0xf7, 0xae, 0xf9, + 0x04, 0x1c, 0x11, 0x48, 0x04, 0x30, 0x80, 0x78, + 0xb8, 0x76, 0x0f, 0x4f, 0x7d, 0x6a, 0xac, 0x42, + 0x04, 0xd2, 0x20, 0x1c, 0xff, 0xf7, 0x22, 0xfc, + 0x05, 0x1c, 0x12, 0xe0, 0x21, 0x1c, 0x28, 0x1c, + 0xf9, 0xf7, 0xfc, 0xfb, 0x3c, 0x00, 0x18, 0x6f, + 0x00, 0x00, 0x06, 0x1c, 0x68, 0x43, 0x20, 0x1a, + 0xff, 0xf7, 0x17, 0xfc, 0x05, 0x1c, 0x00, 0x24, + 0x04, 0xe0, 0x78, 0x6a, 0xff, 0xf7, 0x11, 0xfc, + 0x45, 0x19, 0x01, 0x34, 0xb4, 0x42, 0xf8, 0xd3, + 0x28, 0x1c, 0xd4, 0xe7, 0x00, 0x00, 0xc8, 0x74, + 0x01, 0x00, 0x30, 0x00, 0x07, 0x00, 0xc0, 0xc6, + 0x2d, 0x00, 0x01, 0x1c, 0x7d, 0x20, 0x80, 0xb5, + 0xc0, 0x00, 0xf9, 0xf7, 0x72, 0xfb, 0x3c, 0x00, + 0x54, 0x6f, 0x00, 0x00, 0x02, 0x49, 0x88, 0x61, + 0x40, 0x08, 0xc8, 0x61, 0x80, 0xbd, 0x00, 0x00, + 0xc8, 0x74, 0x01, 0x00, 0x10, 0xb5, 0x06, 0x4c, + 0x21, 0x1c, 0x00, 0x20, 0x0b, 0xf0, 0x42, 0xfa, + 0x21, 0x1c, 0x00, 0x20, 0x0b, 0xf0, 0x0a, 0xfa, + 0x00, 0xf0, 0x68, 0xfe, 0x10, 0xbd, 0x00, 0x00, + 0x85, 0x6f, 0x00, 0x00, 0x30, 0xb5, 0x0f, 0x4d, + 0x2a, 0x78, 0x04, 0x2a, 0x19, 0xd8, 0x00, 0x2a, + 0x3c, 0x00, 0x90, 0x6f, 0x00, 0x00, 0x17, 0xd0, + 0x00, 0x21, 0x07, 0xe0, 0x4b, 0x00, 0x5b, 0x18, + 0x5c, 0x19, 0x01, 0x23, 0xe4, 0x56, 0x84, 0x42, + 0x02, 0xda, 0x01, 0x31, 0x8a, 0x42, 0xf5, 0xdc, + 0x8a, 0x42, 0x00, 0xd1, 0x01, 0x39, 0x48, 0x00, + 0x40, 0x18, 0x40, 0x19, 0x81, 0x78, 0x02, 0x4a, + 0x34, 0x3a, 0x11, 0x70, 0xc0, 0x78, 0x50, 0x70, + 0x30, 0xbd, 0x00, 0x75, 0x01, 0x00, 0x30, 0xb5, + 0x11, 0x1c, 0x3c, 0x00, 0xcc, 0x6f, 0x00, 0x00, + 0x38, 0x31, 0x85, 0xb0, 0x91, 0x62, 0x08, 0x21, + 0x11, 0x86, 0x00, 0x23, 0x14, 0x1c, 0x01, 0x1c, + 0x53, 0x63, 0xc0, 0x68, 0x15, 0x4d, 0x0b, 0xe0, + 0x02, 0x68, 0xaa, 0x42, 0x06, 0xd1, 0xc2, 0x68, + 0xca, 0x60, 0xc3, 0x60, 0x03, 0x60, 0xfa, 0xf7, + 0xd1, 0xfa, 0x03, 0xe0, 0x01, 0x1c, 0xc0, 0x68, + 0x00, 0x28, 0xf1, 0xd1, 0x22, 0x1c, 0x40, 0x32, + 0x08, 0x21, 0x20, 0x68, 0x3c, 0x00, 0x08, 0x70, + 0x00, 0x00, 0xfa, 0xf7, 0x64, 0xfb, 0x0b, 0x49, + 0x20, 0x1c, 0x48, 0x30, 0x02, 0x90, 0x04, 0x94, + 0x03, 0x91, 0xe0, 0x69, 0x82, 0x88, 0x01, 0x68, + 0x6e, 0x20, 0x01, 0x92, 0x00, 0x91, 0x22, 0x1c, + 0x56, 0x32, 0x03, 0x5d, 0x21, 0x1c, 0x28, 0x31, + 0x20, 0x68, 0xff, 0xf7, 0x58, 0xfa, 0x05, 0xb0, + 0x30, 0xbd, 0xa0, 0x7e, 0x01, 0x00, 0xd5, 0x70, + 0x00, 0x00, 0x1c, 0xb5, 0x07, 0x49, 0x3c, 0x00, + 0x44, 0x70, 0x00, 0x00, 0x02, 0x1c, 0x01, 0x90, + 0x00, 0x91, 0xc0, 0x69, 0x13, 0x1c, 0x84, 0x88, + 0x01, 0x68, 0x10, 0x68, 0x48, 0x33, 0x22, 0x1c, + 0xff, 0xf7, 0x08, 0xf9, 0x1c, 0xbd, 0x00, 0x00, + 0xc9, 0x6f, 0x00, 0x00, 0x10, 0xb5, 0x14, 0x1c, + 0x18, 0x48, 0x03, 0xf0, 0x89, 0xf8, 0xa0, 0x42, + 0x01, 0xd0, 0xfa, 0xf7, 0x45, 0xf9, 0x04, 0x22, + 0x20, 0x1c, 0x40, 0x30, 0xa1, 0x6a, 0xf9, 0xf7, + 0x3c, 0x00, 0x80, 0x70, 0x00, 0x00, 0xbd, 0xf9, + 0x00, 0x28, 0x02, 0xd1, 0x01, 0x20, 0x20, 0x62, + 0x05, 0xe0, 0x00, 0x20, 0x20, 0x62, 0x84, 0x20, + 0x00, 0x5d, 0x00, 0x28, 0x03, 0xd1, 0x20, 0x1c, + 0x09, 0xf0, 0x23, 0xfb, 0x05, 0xe0, 0x20, 0x68, + 0xfa, 0xf7, 0x79, 0xfa, 0x20, 0x1c, 0xfa, 0xf7, + 0xa4, 0xfb, 0xe0, 0x69, 0x80, 0x79, 0x06, 0x28, + 0x06, 0xd1, 0x20, 0x6a, 0x06, 0x49, 0x00, 0x28, + 0x03, 0xd0, 0x3c, 0x00, 0xbc, 0x70, 0x00, 0x00, + 0x08, 0x69, 0x01, 0x30, 0x08, 0x61, 0x10, 0xbd, + 0x48, 0x69, 0x01, 0x30, 0x48, 0x61, 0x10, 0xbd, + 0xa0, 0x6a, 0x01, 0x00, 0x28, 0x61, 0x01, 0x00, + 0x1c, 0xb5, 0x14, 0x1c, 0x15, 0x48, 0x03, 0xf0, + 0x51, 0xf8, 0xa0, 0x42, 0x01, 0xd0, 0xfa, 0xf7, + 0x0d, 0xf9, 0x20, 0x1c, 0x4f, 0x30, 0x02, 0x79, + 0x41, 0x79, 0x00, 0xab, 0x12, 0x02, 0x11, 0x43, + 0xc2, 0x78, 0x12, 0x04, 0x3c, 0x00, 0xf8, 0x70, + 0x00, 0x00, 0x11, 0x43, 0x82, 0x78, 0x12, 0x06, + 0x11, 0x43, 0x00, 0x91, 0x01, 0x78, 0x40, 0x78, + 0x09, 0x02, 0x08, 0x43, 0x98, 0x80, 0x20, 0x1c, + 0x69, 0x46, 0x06, 0xf0, 0x3c, 0xf9, 0x00, 0x28, + 0x03, 0xd1, 0x20, 0x1c, 0x09, 0xf0, 0xe3, 0xfa, + 0x1c, 0xbd, 0x20, 0x68, 0xfa, 0xf7, 0x39, 0xfa, + 0x20, 0x1c, 0xfa, 0xf7, 0x64, 0xfb, 0xf7, 0xe7, + 0x00, 0x00, 0xa0, 0x6a, 0x01, 0x00, 0x3c, 0x00, + 0x34, 0x71, 0x00, 0x00, 0xbc, 0xb5, 0x1f, 0x4d, + 0x14, 0x1c, 0x28, 0x1c, 0xdc, 0x30, 0x03, 0xf0, + 0x1f, 0xf8, 0xa0, 0x42, 0x01, 0xd0, 0xfa, 0xf7, + 0xdb, 0xf8, 0xa0, 0x6c, 0x00, 0xab, 0x02, 0x78, + 0x81, 0x78, 0x12, 0x02, 0x11, 0x43, 0x02, 0x79, + 0x12, 0x04, 0x11, 0x43, 0x42, 0x79, 0x12, 0x06, + 0x11, 0x43, 0x00, 0x91, 0x81, 0x79, 0xc0, 0x79, + 0x00, 0x02, 0x08, 0x43, 0x98, 0x80, 0x20, 0x1c, + 0x3c, 0x00, 0x70, 0x71, 0x00, 0x00, 0x69, 0x46, + 0x06, 0xf0, 0x0b, 0xf9, 0x00, 0x28, 0x17, 0xd0, + 0x01, 0x28, 0x0e, 0xd1, 0xed, 0x6c, 0x00, 0x2d, + 0x0b, 0xd0, 0x80, 0x20, 0x02, 0x5d, 0xe0, 0x6c, + 0x01, 0x21, 0x00, 0x28, 0x00, 0xd1, 0x00, 0x21, + 0x60, 0x68, 0x6b, 0x46, 0x0a, 0x30, 0xf9, 0xf7, + 0x23, 0xf9, 0x20, 0x68, 0xfa, 0xf7, 0xfb, 0xf9, + 0x20, 0x1c, 0xfa, 0xf7, 0x26, 0xfb, 0xbc, 0xbd, + 0x20, 0x1c, 0x3c, 0x00, 0xac, 0x71, 0x00, 0x00, + 0x00, 0xf0, 0x8e, 0xfe, 0xfa, 0xe7, 0x00, 0x00, + 0xc4, 0x69, 0x01, 0x00, 0xbc, 0xb5, 0x04, 0x1c, + 0x40, 0x6a, 0x00, 0x25, 0x00, 0x28, 0x03, 0xd0, + 0x60, 0x68, 0x00, 0x8b, 0x05, 0x07, 0x2d, 0x0f, + 0x22, 0x1c, 0x40, 0x32, 0x08, 0x21, 0x20, 0x68, + 0xfa, 0xf7, 0x7e, 0xfa, 0xa1, 0x68, 0x01, 0x95, + 0x00, 0x91, 0x21, 0x1c, 0x22, 0x1c, 0x60, 0x32, + 0x20, 0x68, 0x50, 0x31, 0x3c, 0x00, 0xe8, 0x71, + 0x00, 0x00, 0x0d, 0x1c, 0xe3, 0x68, 0x09, 0xf0, + 0xe2, 0xff, 0xe0, 0x69, 0x80, 0x6b, 0x00, 0x28, + 0x03, 0xd1, 0xfe, 0xf7, 0xe8, 0xfa, 0x00, 0x28, + 0x01, 0xd0, 0x18, 0x20, 0x00, 0xe0, 0x10, 0x20, + 0x06, 0x49, 0x01, 0x94, 0x00, 0x91, 0xe1, 0x69, + 0x08, 0x23, 0x09, 0x68, 0x0a, 0x18, 0x21, 0x1c, + 0x28, 0x31, 0x28, 0x1c, 0xff, 0xf7, 0x87, 0xf9, + 0xbc, 0xbd, 0x35, 0x71, 0x00, 0x00, 0x3c, 0x00, + 0x24, 0x72, 0x00, 0x00, 0x10, 0xb5, 0x10, 0x1c, + 0x38, 0x30, 0x90, 0x62, 0x04, 0x20, 0x10, 0x86, + 0x00, 0x20, 0x50, 0x63, 0x10, 0x68, 0x14, 0x1c, + 0x40, 0x32, 0x04, 0x21, 0xfa, 0xf7, 0x4a, 0xfa, + 0x23, 0x1c, 0x21, 0x1c, 0x28, 0x31, 0x02, 0x4a, + 0x20, 0x68, 0xff, 0xf7, 0xbd, 0xf8, 0x10, 0xbd, + 0x65, 0x70, 0x00, 0x00, 0x0e, 0xb5, 0xc3, 0x69, + 0x02, 0x1c, 0x98, 0x88, 0x05, 0x49, 0x02, 0x92, + 0x3c, 0x00, 0x60, 0x72, 0x00, 0x00, 0x01, 0x91, + 0x00, 0x90, 0x1b, 0x68, 0x10, 0x68, 0x91, 0x69, + 0x03, 0x22, 0xff, 0xf7, 0xae, 0xf9, 0x0e, 0xbd, + 0x00, 0x00, 0x25, 0x72, 0x00, 0x00, 0x0e, 0xb5, + 0x02, 0x1c, 0x06, 0x49, 0x10, 0x20, 0x00, 0x90, + 0x02, 0x92, 0x13, 0x1c, 0x01, 0x91, 0x10, 0x68, + 0x00, 0x22, 0x70, 0x33, 0x00, 0x21, 0xff, 0xf7, + 0x9c, 0xf9, 0x0e, 0xbd, 0x00, 0x00, 0x25, 0x72, + 0x00, 0x00, 0x3c, 0x00, 0x9c, 0x72, 0x00, 0x00, + 0x10, 0xb5, 0x03, 0x1c, 0x00, 0x21, 0x00, 0x20, + 0x08, 0x4c, 0x00, 0xe0, 0x01, 0x31, 0xca, 0x00, + 0xa2, 0x58, 0x9a, 0x42, 0x02, 0xd0, 0x0b, 0x29, + 0xf8, 0xd3, 0x10, 0xbd, 0x0b, 0x29, 0xfc, 0xd2, + 0xc9, 0x00, 0x09, 0x19, 0x00, 0x20, 0x08, 0x71, + 0x01, 0x20, 0x10, 0xbd, 0x38, 0x58, 0x01, 0x00, + 0x8c, 0xb5, 0x00, 0xab, 0x86, 0x21, 0x19, 0x80, + 0x01, 0x1c, 0x04, 0x48, 0x3c, 0x00, 0xd8, 0x72, + 0x00, 0x00, 0x06, 0xf0, 0xee, 0xfe, 0x01, 0x90, + 0x68, 0x46, 0x06, 0xf0, 0xfa, 0xf8, 0x8c, 0xbd, + 0x00, 0x00, 0x70, 0x7c, 0x01, 0x00, 0x10, 0xb5, + 0x04, 0x1c, 0x0d, 0x48, 0x0d, 0x49, 0x94, 0xb0, + 0x04, 0x80, 0x06, 0x22, 0x18, 0x31, 0x0c, 0x30, + 0xf9, 0xf7, 0xfb, 0xf8, 0x01, 0xa8, 0x07, 0xf0, + 0xa2, 0xf8, 0x0c, 0x20, 0x09, 0xa9, 0x48, 0x72, + 0x00, 0xab, 0x1c, 0x80, 0x02, 0x21, 0x3c, 0x00, + 0x14, 0x73, 0x00, 0x00, 0x68, 0x46, 0x03, 0xf0, + 0xdb, 0xff, 0x04, 0x90, 0x01, 0xa8, 0x06, 0xf0, + 0xd1, 0xf8, 0x14, 0xb0, 0x10, 0xbd, 0x00, 0x00, + 0x58, 0x7c, 0x01, 0x00, 0x80, 0xb5, 0x04, 0xf0, + 0x45, 0xfe, 0x05, 0xf0, 0x53, 0xfa, 0x80, 0xbd, + 0x10, 0xb5, 0x19, 0x4c, 0xe0, 0x68, 0x00, 0x28, + 0x06, 0xd0, 0x61, 0x1c, 0x08, 0x78, 0x00, 0x28, + 0x03, 0xd1, 0x48, 0x78, 0xff, 0x30, 0x08, 0x70, + 0x3c, 0x00, 0x50, 0x73, 0x00, 0x00, 0x10, 0xbd, + 0xff, 0x30, 0x00, 0x06, 0x00, 0x0e, 0x08, 0x70, + 0xa1, 0x68, 0x00, 0x29, 0xf7, 0xd0, 0x00, 0x28, + 0xf5, 0xd1, 0x0e, 0x48, 0x54, 0x30, 0x81, 0x78, + 0x00, 0x29, 0x03, 0xd1, 0xc1, 0x78, 0xff, 0x31, + 0x81, 0x70, 0x10, 0xbd, 0xff, 0x31, 0x09, 0x06, + 0x09, 0x0e, 0x81, 0x70, 0xf9, 0xd1, 0xa1, 0x69, + 0x00, 0x29, 0xf6, 0xd0, 0x80, 0x88, 0x03, 0xf0, + 0xd0, 0xfb, 0x3c, 0x00, 0x8c, 0x73, 0x00, 0x00, + 0x04, 0x4a, 0x01, 0x1c, 0x5c, 0x32, 0x0c, 0x32, + 0x05, 0xca, 0x80, 0x1a, 0xa2, 0x69, 0xf9, 0xf7, + 0x1f, 0xf8, 0x10, 0xbd, 0x44, 0x7d, 0x01, 0x00, + 0xf0, 0xb5, 0x04, 0x1c, 0x40, 0x68, 0x00, 0x25, + 0x01, 0x79, 0x00, 0x22, 0x85, 0xb0, 0xc9, 0x07, + 0xcb, 0x17, 0x69, 0x49, 0x01, 0x33, 0x89, 0x6a, + 0x10, 0x29, 0x05, 0xd3, 0x66, 0x49, 0xc0, 0x39, + 0x08, 0x6b, 0x01, 0x30, 0x3c, 0x00, 0xc8, 0x73, + 0x00, 0x00, 0x08, 0x63, 0x8e, 0xe0, 0x21, 0x68, + 0x0e, 0x68, 0xf6, 0x78, 0xb7, 0x06, 0xff, 0x0f, + 0xb6, 0x09, 0x00, 0x2b, 0x04, 0x97, 0x06, 0xd0, + 0x63, 0x69, 0x1f, 0x1c, 0x1b, 0x6a, 0x50, 0x37, + 0x9f, 0x42, 0x00, 0xd1, 0x01, 0x25, 0x00, 0x2d, + 0x02, 0xd0, 0x63, 0x69, 0x1b, 0x6a, 0x04, 0xe0, + 0x3c, 0x23, 0x59, 0x4f, 0x73, 0x43, 0xdb, 0x19, + 0x04, 0x33, 0xe3, 0x61, 0x9f, 0x88, 0x3c, 0x00, + 0x04, 0x74, 0x00, 0x00, 0x00, 0x2f, 0x70, 0xd0, + 0x9b, 0x79, 0x02, 0x2b, 0x6e, 0xd0, 0x04, 0x2b, + 0x17, 0xd0, 0x06, 0x2b, 0x69, 0xd1, 0x08, 0x68, + 0xa0, 0x61, 0x08, 0x89, 0x04, 0x38, 0x08, 0x81, + 0x20, 0x68, 0x01, 0x68, 0x04, 0x31, 0x01, 0x60, + 0x4e, 0x49, 0x00, 0x29, 0x5d, 0xd0, 0x04, 0x9f, + 0xba, 0x42, 0x5a, 0xd1, 0x49, 0x48, 0x22, 0x1c, + 0x1c, 0x30, 0x02, 0xf0, 0x65, 0xfe, 0x05, 0xb0, + 0x3c, 0x00, 0x40, 0x74, 0x00, 0x00, 0xf0, 0xbd, + 0x09, 0x68, 0x25, 0x1c, 0xca, 0x79, 0x40, 0x35, + 0x26, 0x1c, 0xea, 0x73, 0x8b, 0x79, 0x22, 0x1c, + 0x50, 0x32, 0x13, 0x70, 0x4b, 0x79, 0x60, 0x36, + 0x53, 0x70, 0x0b, 0x79, 0x93, 0x70, 0x4b, 0x78, + 0xd3, 0x70, 0x09, 0x78, 0x11, 0x71, 0x00, 0x21, + 0x29, 0x72, 0x16, 0x21, 0xb1, 0x73, 0x61, 0x6a, + 0x00, 0x29, 0x06, 0xd0, 0x01, 0x8b, 0x09, 0x07, + 0x09, 0x0f, 0x3c, 0x00, 0x7c, 0x74, 0x00, 0x00, + 0x29, 0x72, 0xb1, 0x81, 0x18, 0x21, 0xb1, 0x73, + 0x01, 0x1c, 0x0a, 0x31, 0x20, 0x1c, 0x06, 0x22, + 0x49, 0x30, 0xf9, 0xf7, 0x33, 0xf8, 0x60, 0x68, + 0x14, 0x22, 0x01, 0x88, 0xe9, 0x82, 0x01, 0x1d, + 0x20, 0x1c, 0x58, 0x30, 0xf9, 0xf7, 0x2a, 0xf8, + 0xe8, 0x8a, 0x30, 0x49, 0x08, 0x40, 0x01, 0x21, + 0x89, 0x03, 0x08, 0x43, 0xe8, 0x82, 0x70, 0x89, + 0x0f, 0x21, 0x08, 0x40, 0x3c, 0x00, 0xb8, 0x74, + 0x00, 0x00, 0x70, 0x81, 0x20, 0x68, 0x01, 0x89, + 0x08, 0x39, 0x01, 0x81, 0x20, 0x68, 0x01, 0x68, + 0x08, 0x31, 0x01, 0x60, 0x08, 0x21, 0x00, 0x20, + 0xfa, 0xf7, 0x83, 0xf8, 0x05, 0x1c, 0x02, 0x68, + 0x20, 0x68, 0x08, 0x21, 0xfa, 0xf7, 0xfb, 0xf8, + 0x20, 0x68, 0xfa, 0xf7, 0x74, 0xf8, 0x21, 0x49, + 0xc5, 0x60, 0x2f, 0xe0, 0x30, 0xe0, 0xff, 0xe7, + 0x21, 0x68, 0x60, 0x68, 0x0a, 0x68, 0x3c, 0x00, + 0xf4, 0x74, 0x00, 0x00, 0x80, 0x23, 0xa2, 0x64, + 0x1e, 0x55, 0xe5, 0x64, 0x55, 0x79, 0x13, 0x79, + 0x2d, 0x02, 0x5b, 0x19, 0x95, 0x79, 0x2d, 0x04, + 0x5b, 0x19, 0xd5, 0x79, 0x2d, 0x06, 0x5b, 0x19, + 0x95, 0x78, 0x12, 0x78, 0x12, 0x02, 0xaa, 0x18, + 0x15, 0x04, 0x0a, 0x89, 0x2d, 0x0c, 0x08, 0x3a, + 0x0a, 0x81, 0x21, 0x68, 0x0a, 0x68, 0x08, 0x32, + 0x0a, 0x60, 0xe1, 0x69, 0x02, 0x1c, 0x0a, 0x32, + 0x3c, 0x00, 0x30, 0x75, 0x00, 0x00, 0x01, 0xa8, + 0x09, 0x68, 0x0b, 0xf0, 0x3e, 0xf9, 0xe0, 0x69, + 0x2b, 0x1c, 0x01, 0x68, 0x20, 0x1c, 0x70, 0x30, + 0x01, 0xaa, 0x0b, 0xf0, 0x86, 0xf9, 0x09, 0x49, + 0x01, 0x22, 0x6d, 0xe7, 0x20, 0x68, 0xfa, 0xf7, + 0x22, 0xf8, 0x20, 0x1c, 0xfa, 0xf7, 0x4d, 0xf9, + 0x70, 0xe7, 0x84, 0x6a, 0x01, 0x00, 0x68, 0x61, + 0x01, 0x00, 0x55, 0x72, 0x00, 0x00, 0x8f, 0xc7, + 0xff, 0xff, 0x3c, 0x00, 0x6c, 0x75, 0x00, 0x00, + 0x41, 0x70, 0x00, 0x00, 0x79, 0x72, 0x00, 0x00, + 0x80, 0xb5, 0x02, 0x21, 0x82, 0x20, 0xf9, 0xf7, + 0x93, 0xfe, 0x80, 0xbd, 0x70, 0x47, 0x00, 0x00, + 0x70, 0x47, 0x00, 0x00, 0x70, 0x47, 0x00, 0x00, + 0x70, 0x47, 0x00, 0x00, 0x70, 0x47, 0x00, 0x00, + 0x70, 0x47, 0x00, 0x00, 0x70, 0x47, 0x00, 0x00, + 0x80, 0xb5, 0xc0, 0x68, 0xf9, 0xf7, 0xfa, 0xff, + 0x01, 0x20, 0x80, 0xbd, 0x3c, 0x00, 0xa8, 0x75, + 0x00, 0x00, 0x80, 0xb5, 0x00, 0x21, 0xff, 0x20, + 0xf9, 0xf7, 0x79, 0xfe, 0x80, 0xbd, 0x70, 0x47, + 0x00, 0x00, 0x70, 0x47, 0x00, 0x00, 0x01, 0x20, + 0x70, 0x47, 0x70, 0x47, 0x00, 0x00, 0x70, 0x47, + 0x00, 0x00, 0x70, 0x47, 0x00, 0x00, 0x70, 0x47, + 0x00, 0x00, 0x80, 0xb5, 0x06, 0x21, 0x99, 0x20, + 0xf9, 0xf7, 0x65, 0xfe, 0x80, 0xbd, 0xb0, 0xb5, + 0x00, 0x25, 0x01, 0x29, 0x12, 0x4c, 0x3c, 0x00, + 0xe4, 0x75, 0x00, 0x00, 0x0f, 0xd1, 0x0a, 0xf0, + 0x0f, 0xfc, 0x00, 0x28, 0x1d, 0xd0, 0x61, 0x78, + 0x3c, 0x23, 0x59, 0x43, 0x09, 0x19, 0x04, 0x31, + 0x01, 0x62, 0x61, 0x1c, 0x41, 0x62, 0x84, 0x62, + 0x04, 0x1c, 0x50, 0x34, 0x06, 0xe0, 0x00, 0x29, + 0x0f, 0xd1, 0x3c, 0x20, 0x50, 0x43, 0x25, 0x70, + 0x04, 0x19, 0x04, 0x34, 0x00, 0x2c, 0x08, 0xd0, + 0x20, 0x68, 0x00, 0x28, 0x02, 0xd0, 0x20, 0x21, + 0x3c, 0x00, 0x20, 0x76, 0x00, 0x00, 0xf8, 0xf7, + 0x18, 0xff, 0xa5, 0x80, 0x07, 0x20, 0xa0, 0x71, + 0xb0, 0xbd, 0x68, 0x61, 0x01, 0x00, 0x70, 0xb5, + 0x04, 0x1c, 0x00, 0x21, 0x01, 0xf0, 0x41, 0xfc, + 0x60, 0x68, 0x00, 0x28, 0x01, 0xd0, 0x21, 0x68, + 0x01, 0x60, 0x20, 0x68, 0x00, 0x28, 0x01, 0xd0, + 0x61, 0x68, 0x41, 0x60, 0x12, 0x4e, 0x70, 0x68, + 0xa0, 0x42, 0x01, 0xd1, 0x60, 0x68, 0x70, 0x60, + 0xe0, 0x68, 0x3c, 0x00, 0x5c, 0x76, 0x00, 0x00, + 0x00, 0x28, 0x0b, 0xd0, 0x00, 0x25, 0x06, 0xe0, + 0xe0, 0x68, 0xe9, 0x00, 0x41, 0x18, 0x14, 0x20, + 0x0b, 0xf0, 0xe2, 0xff, 0x01, 0x35, 0x30, 0x88, + 0x85, 0x42, 0xf5, 0xdb, 0x06, 0x21, 0x20, 0x1c, + 0x44, 0x30, 0xf8, 0xf7, 0xe9, 0xfe, 0x20, 0x6b, + 0x00, 0x28, 0x01, 0xd0, 0xf9, 0xf7, 0x86, 0xff, + 0xe0, 0x69, 0x00, 0x28, 0x01, 0xd0, 0xfa, 0xf7, + 0xaf, 0xf8, 0x70, 0xbd, 0x3c, 0x00, 0x98, 0x76, + 0x00, 0x00, 0x58, 0x75, 0x01, 0x00, 0xf0, 0xb5, + 0x1d, 0x4f, 0x05, 0x9d, 0x3f, 0x68, 0x01, 0x26, + 0x1c, 0x1c, 0x33, 0x1c, 0x00, 0x2f, 0x00, 0xd0, + 0x2b, 0x1c, 0x1d, 0x06, 0x2d, 0x0e, 0x00, 0x29, + 0x06, 0xd0, 0x11, 0x78, 0x0e, 0x23, 0x16, 0x4f, + 0x09, 0x18, 0x09, 0x7a, 0x6b, 0x43, 0x10, 0xe0, + 0x21, 0x78, 0x00, 0x29, 0x13, 0xd0, 0xff, 0x31, + 0x0d, 0xe0, 0x01, 0x29, 0x01, 0xd9, 0x3c, 0x00, + 0xd4, 0x76, 0x00, 0x00, 0x01, 0x31, 0x11, 0x70, + 0x11, 0x78, 0x0e, 0x23, 0x0f, 0x4f, 0x49, 0x08, + 0x11, 0x70, 0x09, 0x18, 0x09, 0x7a, 0x6b, 0x43, + 0xdb, 0x19, 0x59, 0x5c, 0x21, 0x70, 0x21, 0x78, + 0x00, 0x29, 0x02, 0xd1, 0x11, 0x78, 0x00, 0x29, + 0xea, 0xd1, 0x09, 0x48, 0xc0, 0x68, 0x00, 0x28, + 0x05, 0xd0, 0x21, 0x78, 0x30, 0x1c, 0x00, 0x29, + 0x00, 0xd1, 0x00, 0x20, 0xf0, 0xbd, 0x01, 0x20, + 0x3c, 0x00, 0x10, 0x77, 0x00, 0x00, 0xf0, 0xbd, + 0x00, 0x00, 0x18, 0x67, 0x01, 0x00, 0x24, 0x67, + 0x01, 0x00, 0x5c, 0x67, 0x01, 0x00, 0xac, 0x7c, + 0x01, 0x00, 0x84, 0x46, 0x00, 0x20, 0xf0, 0xb5, + 0x00, 0x29, 0x09, 0xd0, 0x11, 0x78, 0x1a, 0x4e, + 0xb1, 0x70, 0x19, 0x4e, 0xb1, 0x78, 0x71, 0x70, + 0x31, 0x70, 0x01, 0x21, 0x31, 0x61, 0x27, 0xe0, + 0x16, 0x4e, 0x01, 0x23, 0xf1, 0x56, 0x63, 0x46, + 0x5f, 0x68, 0x3c, 0x00, 0x4c, 0x77, 0x00, 0x00, + 0x00, 0x23, 0xf6, 0x56, 0x01, 0x25, 0xcc, 0x0f, + 0xb7, 0x42, 0x00, 0xd9, 0x00, 0x25, 0x00, 0x2c, + 0x01, 0xd0, 0x00, 0x2d, 0xe8, 0xd1, 0x0e, 0x4f, + 0x3b, 0x69, 0x00, 0x2b, 0x03, 0xd0, 0x00, 0x2d, + 0x01, 0xd1, 0x16, 0x70, 0x02, 0xe0, 0x1c, 0x43, + 0x01, 0xd1, 0x11, 0x70, 0x01, 0x20, 0x01, 0x24, + 0x00, 0x2b, 0x00, 0xd0, 0x00, 0x24, 0x3c, 0x61, + 0x00, 0x2c, 0x02, 0xd0, 0x3c, 0x00, 0x88, 0x77, + 0x00, 0x00, 0x71, 0x1c, 0x39, 0x70, 0x01, 0xe0, + 0xff, 0x31, 0x79, 0x70, 0x00, 0x28, 0xd5, 0xd0, + 0x01, 0x20, 0xf0, 0xbd, 0x00, 0x00, 0xac, 0x7c, + 0x01, 0x00, 0x90, 0xb5, 0x0a, 0x4c, 0x00, 0x20, + 0x93, 0xb0, 0x20, 0x61, 0x03, 0x90, 0x68, 0x46, + 0x00, 0x21, 0x08, 0xf0, 0x84, 0xfd, 0x20, 0x7a, + 0x02, 0x28, 0x01, 0xd1, 0xe0, 0x6b, 0x00, 0xe0, + 0x20, 0x6c, 0xe0, 0x61, 0x01, 0x20, 0x3c, 0x00, + 0xc4, 0x77, 0x00, 0x00, 0x08, 0xf0, 0x8a, 0xfd, + 0x13, 0xb0, 0x90, 0xbd, 0xf4, 0x6e, 0x01, 0x00, + 0xf7, 0xb5, 0x05, 0x1c, 0x88, 0x88, 0x0c, 0x1c, + 0x82, 0xb0, 0x1f, 0x4f, 0x00, 0x28, 0x00, 0xd1, + 0x00, 0x27, 0x04, 0x98, 0x00, 0x28, 0x01, 0xd1, + 0xf9, 0xf7, 0x8a, 0xfd, 0x1b, 0x48, 0x3b, 0x1c, + 0x00, 0x68, 0x21, 0x1c, 0x02, 0x68, 0x28, 0x1c, + 0x00, 0x92, 0x04, 0x9a, 0xfe, 0xf7, 0x3c, 0xf8, + 0x3c, 0x00, 0x00, 0x78, 0x00, 0x00, 0x06, 0x1c, + 0x22, 0xd0, 0x03, 0x21, 0x04, 0x98, 0x02, 0xf0, + 0xb8, 0xff, 0x00, 0x28, 0x1b, 0xd0, 0x80, 0x78, + 0x01, 0x21, 0x03, 0xf0, 0xe4, 0xff, 0xa0, 0x88, + 0xa1, 0x8e, 0x48, 0x43, 0x00, 0x04, 0x0f, 0x49, + 0x00, 0x0c, 0x08, 0x80, 0x03, 0xf0, 0x81, 0xf9, + 0x01, 0x22, 0x00, 0x2d, 0x00, 0xd1, 0x00, 0x22, + 0x01, 0x1c, 0x0e, 0x20, 0x0b, 0xf0, 0xc9, 0xfe, + 0x00, 0x2f, 0x3c, 0x00, 0x3c, 0x78, 0x00, 0x00, + 0x08, 0xd1, 0x00, 0x21, 0x28, 0x1c, 0x02, 0xf0, + 0xbd, 0xfc, 0x03, 0xe0, 0x00, 0x26, 0x28, 0x1c, + 0x00, 0xf0, 0x0a, 0xf8, 0x30, 0x1c, 0x05, 0xb0, + 0xf0, 0xbd, 0x00, 0x00, 0xc1, 0xa1, 0x00, 0x00, + 0xe4, 0x65, 0x01, 0x00, 0xa8, 0x7c, 0x01, 0x00, + 0x10, 0xb5, 0x04, 0x1c, 0xfe, 0xf7, 0x38, 0xf8, + 0x01, 0x21, 0x00, 0x2c, 0x00, 0xd1, 0x00, 0x21, + 0x0e, 0x20, 0x0b, 0xf0, 0x3c, 0x00, 0x78, 0x78, + 0x00, 0x00, 0xdd, 0xfe, 0x10, 0xbd, 0xf8, 0xb5, + 0x07, 0x1c, 0x0b, 0xf0, 0x94, 0xfa, 0xfd, 0xf7, + 0xbc, 0xfe, 0x00, 0x26, 0x02, 0x28, 0x1e, 0x4d, + 0x01, 0xd0, 0x2e, 0x70, 0xf8, 0xbd, 0xfd, 0xf7, + 0x3e, 0xf8, 0x04, 0x1c, 0xf9, 0xf7, 0x59, 0xfc, + 0x00, 0x28, 0x14, 0xd0, 0xfd, 0xf7, 0x77, 0xf8, + 0x00, 0x28, 0x10, 0xd0, 0x02, 0xf0, 0xf9, 0xfb, + 0x00, 0x28, 0x01, 0xd0, 0x00, 0x24, 0x3c, 0x00, + 0xb4, 0x78, 0x00, 0x00, 0x00, 0xe0, 0x15, 0x4c, + 0x33, 0x1c, 0x21, 0x1c, 0x07, 0x22, 0x16, 0x20, + 0x0b, 0xf0, 0x66, 0xff, 0x68, 0x78, 0x80, 0x21, + 0x08, 0x43, 0x68, 0x70, 0x02, 0xf0, 0x0a, 0xfc, + 0x00, 0x28, 0xde, 0xd1, 0x28, 0x78, 0x80, 0x07, + 0xdb, 0xd4, 0xfd, 0xf7, 0x23, 0xf9, 0x00, 0x28, + 0x05, 0xd1, 0x28, 0x78, 0xc0, 0x07, 0x02, 0xd5, + 0xfd, 0xf7, 0x42, 0xf8, 0xd1, 0xe7, 0x02, 0xf0, + 0x3c, 0x00, 0xf0, 0x78, 0x00, 0x00, 0xcd, 0xfb, + 0x00, 0x28, 0xcd, 0xd0, 0x28, 0x78, 0x02, 0x21, + 0x08, 0x43, 0x28, 0x70, 0x21, 0x1c, 0x38, 0x1c, + 0xfd, 0xf7, 0xc1, 0xf8, 0xc4, 0xe7, 0x60, 0x6c, + 0x01, 0x00, 0x71, 0x02, 0x00, 0x00, 0x10, 0xb5, + 0x12, 0x4c, 0x01, 0x20, 0x20, 0x70, 0xfe, 0xf7, + 0xf0, 0xf9, 0x01, 0x21, 0xa0, 0x68, 0xfb, 0xf7, + 0xf4, 0xfe, 0xa0, 0x68, 0x03, 0xf0, 0x87, 0xff, + 0x0d, 0x48, 0x3c, 0x00, 0x2c, 0x79, 0x00, 0x00, + 0xa1, 0x68, 0x07, 0xf0, 0x23, 0xfd, 0xfb, 0xf7, + 0x55, 0xff, 0xe0, 0x68, 0x00, 0x28, 0x0d, 0xd0, + 0x09, 0x49, 0x06, 0x20, 0x0a, 0xf0, 0x24, 0xfd, + 0x08, 0x49, 0x05, 0x20, 0x0a, 0xf0, 0x20, 0xfd, + 0xfb, 0xf7, 0x6e, 0xff, 0x00, 0x28, 0x01, 0xd0, + 0x05, 0xf0, 0xf8, 0xfc, 0x10, 0xbd, 0x00, 0x00, + 0x78, 0x69, 0x01, 0x00, 0x34, 0x63, 0x01, 0x00, + 0xe1, 0x35, 0x00, 0x00, 0x3c, 0x00, 0x68, 0x79, + 0x00, 0x00, 0xb1, 0x35, 0x00, 0x00, 0xf0, 0xb5, + 0x24, 0x4d, 0x23, 0x4c, 0x68, 0x7c, 0x20, 0x3c, + 0x9b, 0xb0, 0x00, 0x28, 0x08, 0xd0, 0x02, 0x28, + 0x03, 0xd8, 0x20, 0x89, 0x01, 0x38, 0x20, 0x81, + 0x37, 0xe0, 0x00, 0x27, 0x6f, 0x74, 0x34, 0xe0, + 0x1c, 0x4e, 0x68, 0x22, 0x14, 0x36, 0x31, 0x1c, + 0x0c, 0x31, 0x01, 0xa8, 0xf8, 0xf7, 0x09, 0xfe, + 0x18, 0x48, 0x33, 0x89, 0x01, 0x21, 0x3c, 0x00, + 0xa4, 0x79, 0x00, 0x00, 0x44, 0x30, 0x0a, 0x1c, + 0x00, 0x2b, 0x00, 0x7b, 0x00, 0xd1, 0x02, 0x1c, + 0x12, 0x06, 0x12, 0x0e, 0x0d, 0xaf, 0x3a, 0x70, + 0x94, 0x46, 0xaa, 0x7b, 0x93, 0x19, 0x30, 0x33, + 0x5b, 0x7b, 0x7b, 0x70, 0xea, 0x73, 0x01, 0x32, + 0x12, 0x06, 0x12, 0x0e, 0x00, 0x27, 0x82, 0x42, + 0xaa, 0x73, 0x01, 0xd3, 0xaf, 0x73, 0x04, 0xe0, + 0x62, 0x46, 0x01, 0x2a, 0x01, 0xd1, 0x77, 0x60, + 0x3c, 0x00, 0xe0, 0x79, 0x00, 0x00, 0x00, 0xe0, + 0x71, 0x60, 0x06, 0x48, 0x07, 0x4a, 0x80, 0x38, + 0x81, 0x67, 0x42, 0x67, 0x68, 0x22, 0x01, 0xa9, + 0xf8, 0xf7, 0xdd, 0xfd, 0x27, 0x81, 0x08, 0xf0, + 0x12, 0xfd, 0x1b, 0xb0, 0xf0, 0xbd, 0x84, 0x66, + 0x01, 0x00, 0xe9, 0x2e, 0x00, 0x00, 0xf1, 0xb5, + 0x86, 0xb0, 0x06, 0x99, 0x00, 0x20, 0x88, 0x61, + 0x06, 0x98, 0x84, 0x68, 0x80, 0x8d, 0x65, 0x68, + 0x01, 0x28, 0x3c, 0x00, 0x1c, 0x7a, 0x00, 0x00, + 0x4c, 0xd9, 0x35, 0x49, 0x49, 0x68, 0x05, 0x91, + 0x00, 0x29, 0x47, 0xd0, 0x00, 0x22, 0x00, 0x21, + 0x00, 0x23, 0x03, 0x90, 0x28, 0x1c, 0x96, 0x46, + 0x94, 0x46, 0x06, 0x68, 0x04, 0x96, 0xf2, 0x78, + 0x80, 0x26, 0xb2, 0x43, 0x3f, 0x2a, 0x2e, 0xd8, + 0xd7, 0x06, 0xff, 0x0e, 0x01, 0x26, 0xbe, 0x40, + 0x37, 0x1c, 0x04, 0x9e, 0x52, 0x09, 0xb6, 0x78, + 0x76, 0x00, 0xb2, 0x18, 0x3c, 0x00, 0x58, 0x7a, + 0x00, 0x00, 0x26, 0x4e, 0x92, 0x00, 0x1c, 0x36, + 0xb2, 0x58, 0x3a, 0x40, 0x1e, 0xd0, 0x03, 0xe0, + 0x02, 0x90, 0x02, 0x89, 0xc0, 0x68, 0x51, 0x18, + 0x00, 0x28, 0xf9, 0xd1, 0x05, 0x98, 0x81, 0x42, + 0x14, 0xd8, 0x70, 0x46, 0x01, 0x30, 0x86, 0x46, + 0x00, 0x2b, 0x04, 0xd0, 0x60, 0x46, 0xd8, 0x60, + 0x01, 0x98, 0x62, 0x46, 0xd0, 0x60, 0x03, 0x98, + 0x01, 0x38, 0x03, 0x90, 0x06, 0xd0, 0x3c, 0x00, + 0x94, 0x7a, 0x00, 0x00, 0x23, 0x1c, 0x24, 0x68, + 0x60, 0x68, 0x02, 0x9a, 0x01, 0x90, 0x94, 0x46, + 0xc9, 0xe7, 0x70, 0x46, 0x01, 0x28, 0x07, 0xd9, + 0x2a, 0x1c, 0x00, 0x21, 0x3f, 0x20, 0x01, 0xf0, + 0x51, 0xff, 0x05, 0x1c, 0x06, 0x98, 0x85, 0x61, + 0x28, 0x1c, 0x01, 0xf0, 0xb3, 0xff, 0x0e, 0x48, + 0x00, 0x68, 0x00, 0x28, 0x07, 0xd0, 0x28, 0x68, + 0x01, 0x88, 0x40, 0x79, 0x02, 0x31, 0x09, 0x1a, + 0x3c, 0x00, 0xd0, 0x7a, 0x00, 0x00, 0x28, 0x1c, + 0x01, 0xf0, 0xe5, 0xfc, 0xa2, 0x68, 0x06, 0x98, + 0xc0, 0x68, 0x06, 0x99, 0x0b, 0x69, 0x29, 0x1c, + 0xf8, 0xf7, 0x7c, 0xfc, 0x03, 0x49, 0x08, 0x69, + 0x01, 0x30, 0x08, 0x61, 0x07, 0xb0, 0xf0, 0xbd, + 0x00, 0x00, 0xfc, 0x5a, 0x01, 0x00, 0xcc, 0x5c, + 0x01, 0x00, 0x10, 0xb5, 0x09, 0x4a, 0x80, 0x00, + 0x12, 0x58, 0xd0, 0x06, 0xc0, 0x0e, 0x01, 0x30, + 0x07, 0x4b, 0x3c, 0x00, 0x0c, 0x7b, 0x00, 0x00, + 0x1c, 0x68, 0x00, 0x2c, 0xfc, 0xdb, 0x5a, 0x60, + 0x20, 0x22, 0x12, 0x1a, 0x91, 0x40, 0x19, 0x60, + 0x19, 0x68, 0x00, 0x29, 0xfc, 0xdb, 0x10, 0xbd, + 0xe8, 0x60, 0x01, 0x00, 0x30, 0x20, 0x07, 0x00, + 0xb0, 0xb5, 0x12, 0x4c, 0x00, 0x25, 0x25, 0x70, + 0xa1, 0x68, 0x11, 0x48, 0x07, 0xf0, 0x32, 0xfc, + 0x65, 0x61, 0xfb, 0xf7, 0xa3, 0xfe, 0xe0, 0x68, + 0x00, 0x28, 0x0d, 0xd0, 0x3c, 0x00, 0x48, 0x7b, + 0x00, 0x00, 0xfb, 0xf7, 0xa4, 0xfe, 0x01, 0x21, + 0x07, 0x20, 0x0b, 0xf0, 0x70, 0xfd, 0x0a, 0x49, + 0x06, 0x20, 0x0a, 0xf0, 0x4c, 0xfc, 0x09, 0x49, + 0x05, 0x20, 0x0a, 0xf0, 0x48, 0xfc, 0xa0, 0x68, + 0x03, 0xf0, 0x67, 0xfe, 0x00, 0x21, 0xa0, 0x68, + 0xfb, 0xf7, 0xcd, 0xfd, 0x05, 0xf0, 0xab, 0xfb, + 0xb0, 0xbd, 0x78, 0x69, 0x01, 0x00, 0x34, 0x63, + 0x01, 0x00, 0xe1, 0x35, 0x00, 0x00, 0x3c, 0x00, + 0x84, 0x7b, 0x00, 0x00, 0xb1, 0x35, 0x00, 0x00, + 0x10, 0xb5, 0x0f, 0x4c, 0x20, 0x7c, 0x00, 0x28, + 0x19, 0xd1, 0x60, 0x69, 0x00, 0x28, 0x16, 0xd1, + 0xe0, 0x68, 0x00, 0x28, 0x06, 0xd0, 0x0a, 0x48, + 0x1c, 0x38, 0xc0, 0x68, 0x00, 0x28, 0x01, 0xd0, + 0x05, 0xf0, 0xce, 0xfb, 0x01, 0x21, 0x07, 0x20, + 0x0b, 0xf0, 0x40, 0xfd, 0xa0, 0x68, 0x03, 0xf0, + 0x3f, 0xfe, 0x04, 0x48, 0xa1, 0x68, 0x07, 0xf0, + 0x3c, 0x00, 0xc0, 0x7b, 0x00, 0x00, 0xdb, 0xfb, + 0x01, 0x20, 0x20, 0x70, 0x10, 0xbd, 0x78, 0x69, + 0x01, 0x00, 0x34, 0x63, 0x01, 0x00, 0x70, 0xb5, + 0x0e, 0x4c, 0x01, 0x22, 0xa3, 0x68, 0xe5, 0x68, + 0x26, 0x8a, 0x5d, 0x1b, 0xb5, 0x42, 0x01, 0xd1, + 0x00, 0x22, 0x06, 0xe0, 0x25, 0x68, 0x01, 0x33, + 0x2e, 0x68, 0xa3, 0x60, 0x26, 0x60, 0x04, 0x35, + 0x03, 0xc5, 0x00, 0x2a, 0x04, 0xd1, 0x01, 0x21, + 0x9d, 0x20, 0x3c, 0x00, 0xfc, 0x7b, 0x00, 0x00, + 0xf9, 0xf7, 0x52, 0xfb, 0x70, 0xbd, 0x03, 0x49, + 0x02, 0x20, 0x08, 0x60, 0x70, 0xbd, 0x00, 0x00, + 0x44, 0xe3, 0x01, 0x00, 0x40, 0x20, 0x07, 0x00, + 0x80, 0xb5, 0x02, 0xf0, 0xb9, 0xf8, 0x80, 0xbd, + 0x80, 0xb5, 0x02, 0x21, 0x2d, 0x20, 0xf9, 0xf7, + 0x3f, 0xfb, 0x00, 0x20, 0x80, 0xbd, 0x00, 0x00, + 0x80, 0xb5, 0x02, 0x21, 0x2a, 0x20, 0xf9, 0xf7, + 0x37, 0xfb, 0x00, 0x20, 0x3c, 0x00, 0x38, 0x7c, + 0x00, 0x00, 0x80, 0xbd, 0x00, 0x00, 0x80, 0xb5, + 0x01, 0x21, 0x2b, 0x20, 0xf9, 0xf7, 0x2f, 0xfb, + 0x02, 0x20, 0x80, 0xbd, 0x00, 0x00, 0x01, 0x49, + 0x01, 0x20, 0x08, 0x61, 0x70, 0x47, 0x7c, 0x78, + 0x01, 0x00, 0xf8, 0xb5, 0x06, 0x1c, 0x0c, 0x23, + 0x0f, 0x1c, 0x17, 0x49, 0x58, 0x43, 0x45, 0x18, + 0x6c, 0x68, 0x30, 0x1c, 0x0b, 0xf0, 0x3f, 0xfe, + 0x00, 0x2f, 0x09, 0xd1, 0x30, 0x1c, 0x3c, 0x00, + 0x74, 0x7c, 0x00, 0x00, 0x03, 0xf0, 0xee, 0xfe, + 0x41, 0x20, 0x07, 0x55, 0x11, 0x48, 0x21, 0x1c, + 0xff, 0xf7, 0xa6, 0xff, 0xf8, 0xbd, 0x41, 0x20, + 0x07, 0x55, 0xa0, 0x6b, 0x00, 0x28, 0x03, 0xd0, + 0x20, 0x1c, 0x00, 0xf0, 0xdf, 0xf9, 0xf5, 0xe7, + 0x20, 0x1c, 0x00, 0xf0, 0xdb, 0xf9, 0xac, 0x68, + 0x00, 0x2c, 0x02, 0xd0, 0x00, 0x20, 0xa8, 0x60, + 0xed, 0xe7, 0x30, 0x1c, 0x05, 0xf0, 0x34, 0xf9, + 0x3c, 0x00, 0xb0, 0x7c, 0x00, 0x00, 0x04, 0x1c, + 0xe8, 0xd1, 0x08, 0x21, 0x0c, 0x20, 0xf9, 0xf7, + 0xf4, 0xfa, 0xe3, 0xe7, 0x00, 0x00, 0x60, 0x7b, + 0x01, 0x00, 0x55, 0x80, 0x00, 0x00, 0x07, 0x4a, + 0x80, 0xb5, 0x50, 0x70, 0x51, 0x60, 0x12, 0x78, + 0x06, 0x4b, 0x80, 0x00, 0x52, 0x01, 0xd2, 0x18, + 0x10, 0x18, 0x40, 0x38, 0x02, 0x68, 0x08, 0x1c, + 0xf8, 0xf7, 0x7b, 0xfb, 0x80, 0xbd, 0x78, 0x69, + 0x01, 0x00, 0x3c, 0x00, 0xec, 0x7c, 0x00, 0x00, + 0xfc, 0x42, 0x01, 0x00, 0xb0, 0xb5, 0x0a, 0x49, + 0x04, 0x1c, 0xc8, 0x70, 0x08, 0x4d, 0xe4, 0x35, + 0xa8, 0x7a, 0x08, 0x71, 0x08, 0x2c, 0x01, 0xd3, + 0xf9, 0xf7, 0xfc, 0xfa, 0xa8, 0x7a, 0x05, 0x49, + 0x40, 0x01, 0x40, 0x18, 0xa1, 0x00, 0x40, 0x58, + 0xf8, 0xf7, 0x60, 0xfb, 0xb0, 0xbd, 0x00, 0x00, + 0x60, 0x6c, 0x01, 0x00, 0x80, 0x43, 0x01, 0x00, + 0x80, 0xb5, 0x00, 0x28, 0x3c, 0x00, 0x28, 0x7d, + 0x00, 0x00, 0x01, 0xd0, 0x09, 0xf0, 0x1d, 0xf9, + 0x80, 0xbd, 0xb0, 0xb5, 0x05, 0x1c, 0x0c, 0x1c, + 0x00, 0x20, 0x08, 0x60, 0x68, 0x68, 0x09, 0xf0, + 0x36, 0xfb, 0x6c, 0x60, 0xb0, 0xbd, 0x10, 0xb5, + 0x04, 0x1c, 0x09, 0xf0, 0x34, 0xfb, 0x21, 0x68, + 0x00, 0x29, 0x00, 0xd1, 0x64, 0x60, 0x10, 0xbd, + 0x00, 0x00, 0x00, 0x21, 0x01, 0x60, 0x40, 0x60, + 0x70, 0x47, 0xf8, 0xb5, 0x46, 0x68, 0x3c, 0x00, + 0x64, 0x7d, 0x00, 0x00, 0x04, 0x1c, 0x40, 0x6a, + 0x35, 0x1c, 0x0a, 0x35, 0x00, 0x28, 0x04, 0xd0, + 0x20, 0x1c, 0xf9, 0xf7, 0x89, 0xfd, 0x07, 0x1c, + 0x00, 0xe0, 0x04, 0x27, 0x29, 0x1c, 0x60, 0x69, + 0x00, 0xf0, 0xf6, 0xfc, 0x79, 0x00, 0x0f, 0x18, + 0xba, 0x88, 0xf1, 0x8a, 0x05, 0x1c, 0x8a, 0x42, + 0x05, 0xd1, 0x30, 0x88, 0x00, 0x05, 0x02, 0xd5, + 0x04, 0xf0, 0xbe, 0xfb, 0x3c, 0xe0, 0x28, 0x68, + 0x3c, 0x00, 0xa0, 0x7d, 0x00, 0x00, 0x00, 0x28, + 0x0f, 0xd0, 0x01, 0x32, 0x8a, 0x42, 0x04, 0xd1, + 0xf9, 0xf7, 0x0f, 0xfc, 0x21, 0x68, 0xc1, 0x60, + 0x0b, 0xe0, 0xf9, 0xf7, 0xf0, 0xfb, 0xf0, 0x8a, + 0x00, 0x07, 0x04, 0xd0, 0x00, 0x21, 0x29, 0x60, + 0x29, 0xe0, 0x08, 0x07, 0x27, 0xd1, 0x20, 0x68, + 0x28, 0x60, 0xf0, 0x8a, 0xb8, 0x80, 0x13, 0x48, + 0x01, 0x68, 0x01, 0x31, 0x01, 0x60, 0x31, 0x88, + 0x49, 0x05, 0x3c, 0x00, 0xdc, 0x7d, 0x00, 0x00, + 0x18, 0xd4, 0x29, 0x68, 0x21, 0x60, 0x00, 0x21, + 0x29, 0x60, 0xe1, 0x69, 0x00, 0x29, 0x0d, 0xd0, + 0x89, 0x79, 0x02, 0x29, 0x0a, 0xd1, 0x08, 0x21, + 0x21, 0x86, 0x21, 0x1c, 0x38, 0x31, 0xa1, 0x62, + 0x22, 0x1c, 0xdc, 0x30, 0x08, 0x49, 0x02, 0xf0, + 0x81, 0xf9, 0xf8, 0xbd, 0x20, 0x1c, 0x00, 0xf0, + 0x5f, 0xf8, 0xfa, 0xe7, 0x20, 0x1c, 0xf9, 0xf7, + 0xef, 0xfc, 0xf6, 0xe7, 0x3c, 0x00, 0x18, 0x7e, + 0x00, 0x00, 0x20, 0x68, 0xf9, 0xf7, 0xbd, 0xfb, + 0xf7, 0xe7, 0xc4, 0x69, 0x01, 0x00, 0xb9, 0x71, + 0x00, 0x00, 0xf8, 0xb5, 0x0f, 0x1c, 0x09, 0x78, + 0x01, 0x24, 0xc9, 0x07, 0x21, 0xd5, 0x02, 0xf0, + 0x8c, 0xff, 0x00, 0x28, 0x01, 0xd0, 0x00, 0x24, + 0x1b, 0xe0, 0x0e, 0x4e, 0x75, 0x6e, 0x00, 0x2d, + 0x17, 0xd0, 0x34, 0x6e, 0x06, 0x22, 0x31, 0x1c, + 0x38, 0x1c, 0xf8, 0xf7, 0xd4, 0xfa, 0x3c, 0x00, + 0x54, 0x7e, 0x00, 0x00, 0x00, 0x28, 0x05, 0xd1, + 0x01, 0x20, 0x00, 0x2c, 0x00, 0xd0, 0x00, 0x20, + 0x04, 0x1c, 0x03, 0xe0, 0x01, 0x3d, 0x06, 0x36, + 0x00, 0x2d, 0xee, 0xd1, 0x00, 0x2c, 0x03, 0xd1, + 0x02, 0x4e, 0xb0, 0x6e, 0x01, 0x30, 0xb0, 0x66, + 0x20, 0x1c, 0xf8, 0xbd, 0x10, 0x79, 0x01, 0x00, + 0x30, 0xb5, 0x05, 0x1c, 0x00, 0x20, 0x06, 0x49, + 0x00, 0x22, 0x1c, 0x23, 0xcc, 0x56, 0xac, 0x42, + 0x3c, 0x00, 0x90, 0x7e, 0x00, 0x00, 0x01, 0xd1, + 0x08, 0x1c, 0x30, 0xbd, 0x01, 0x32, 0x48, 0x31, + 0x01, 0x2a, 0xf5, 0xd3, 0x30, 0xbd, 0xcc, 0x6d, + 0x01, 0x00, 0x10, 0xb5, 0x08, 0x4c, 0x00, 0x22, + 0x1c, 0x23, 0x53, 0x43, 0xe3, 0x58, 0x83, 0x42, + 0x04, 0xd1, 0x1c, 0x20, 0x50, 0x43, 0x00, 0x19, + 0x0a, 0x60, 0x10, 0xbd, 0x01, 0x32, 0x0e, 0x2a, + 0xf2, 0xd3, 0x00, 0x20, 0x10, 0xbd, 0xdc, 0x71, + 0x01, 0x00, 0x3c, 0x00, 0xcc, 0x7e, 0x00, 0x00, + 0xf0, 0xb5, 0x41, 0x68, 0x95, 0xb0, 0x07, 0x1c, + 0x90, 0x37, 0x13, 0x91, 0x04, 0x1c, 0xf8, 0x78, + 0x25, 0x1c, 0x80, 0x35, 0xc6, 0x07, 0x28, 0x79, + 0xf6, 0x0f, 0x4a, 0x49, 0x02, 0x28, 0x4d, 0xd1, + 0x0a, 0x6d, 0x00, 0x2a, 0x4a, 0xd0, 0x48, 0x68, + 0x01, 0x30, 0x48, 0x60, 0x0a, 0xf0, 0x58, 0xff, + 0x44, 0x49, 0x08, 0x61, 0x48, 0x61, 0x13, 0x99, + 0x09, 0x79, 0xc9, 0x07, 0x3c, 0x00, 0x08, 0x7f, + 0x00, 0x00, 0x01, 0xd4, 0x41, 0x49, 0x88, 0x61, + 0x20, 0x68, 0x06, 0x22, 0x06, 0x90, 0xa1, 0x68, + 0x03, 0xa8, 0xf8, 0xf7, 0xee, 0xfa, 0x06, 0x22, + 0x04, 0xa8, 0x02, 0x30, 0xe1, 0x68, 0xf8, 0xf7, + 0xe8, 0xfa, 0x07, 0xa8, 0x06, 0x22, 0x21, 0x69, + 0xf8, 0xf7, 0xe3, 0xfa, 0xb8, 0x78, 0x08, 0xab, + 0x00, 0x21, 0x98, 0x70, 0x0c, 0x96, 0x63, 0x6a, + 0x20, 0x1c, 0xa0, 0x30, 0x0a, 0x1c, 0x3c, 0x00, + 0x44, 0x7f, 0x00, 0x00, 0x00, 0x2b, 0x02, 0xd0, + 0x02, 0x8a, 0x52, 0x07, 0x52, 0x0f, 0x08, 0xab, + 0xda, 0x70, 0x00, 0xab, 0x99, 0x84, 0x13, 0x99, + 0x09, 0x88, 0xc9, 0x0b, 0xd9, 0x84, 0x69, 0x6b, + 0x10, 0xab, 0x10, 0x91, 0xa9, 0x6b, 0x11, 0x91, + 0x80, 0x8b, 0x29, 0x49, 0x18, 0x81, 0x09, 0x6d, + 0x03, 0xa8, 0xf8, 0xf7, 0x32, 0xfa, 0x29, 0x79, + 0x68, 0x6b, 0x0b, 0xf0, 0x4d, 0xfd, 0x29, 0x79, + 0x3c, 0x00, 0x80, 0x7f, 0x00, 0x00, 0xa8, 0x6b, + 0x0b, 0xf0, 0x67, 0xfd, 0x3d, 0xe0, 0x00, 0x28, + 0x38, 0xd1, 0x48, 0x6d, 0x14, 0x90, 0x00, 0x28, + 0x34, 0xd0, 0x20, 0x68, 0x06, 0x22, 0x03, 0x90, + 0xa1, 0x68, 0x68, 0x46, 0xf8, 0xf7, 0xab, 0xfa, + 0x06, 0x22, 0x68, 0x46, 0x80, 0x18, 0xe1, 0x68, + 0xf8, 0xf7, 0xa5, 0xfa, 0x05, 0xa8, 0x06, 0x22, + 0x21, 0x69, 0xf8, 0xf7, 0xa0, 0xfa, 0x00, 0x21, + 0x04, 0x91, 0x3c, 0x00, 0xbc, 0x7f, 0x00, 0x00, + 0xb9, 0x78, 0x08, 0xa8, 0x10, 0xab, 0x01, 0x72, + 0x08, 0x96, 0xe9, 0x68, 0x0b, 0x91, 0x69, 0x79, + 0x41, 0x72, 0x68, 0x6b, 0x0e, 0x90, 0xa8, 0x6b, + 0x10, 0x90, 0x28, 0x8d, 0xd8, 0x80, 0x68, 0x8d, + 0x18, 0x81, 0xe1, 0x69, 0x0c, 0xa8, 0x00, 0x29, + 0x04, 0xd0, 0x89, 0x79, 0x01, 0x70, 0x20, 0x6a, + 0x0d, 0x90, 0x01, 0xe0, 0x07, 0x21, 0x01, 0x70, + 0x68, 0x46, 0x14, 0x99, 0x3c, 0x00, 0xf8, 0x7f, + 0x00, 0x00, 0xf8, 0xf7, 0xef, 0xf9, 0x02, 0xe0, + 0x20, 0x68, 0xf9, 0xf7, 0xca, 0xfa, 0x20, 0x1c, + 0xf9, 0xf7, 0xf5, 0xfb, 0x15, 0xb0, 0xf0, 0xbd, + 0x00, 0x00, 0xc4, 0x69, 0x01, 0x00, 0xb0, 0xb5, + 0x04, 0x1c, 0xc0, 0x68, 0x06, 0x22, 0x01, 0x89, + 0x0c, 0x31, 0x01, 0x81, 0x05, 0x68, 0x21, 0x1c, + 0x0c, 0x3d, 0x05, 0x60, 0xa8, 0x18, 0xf8, 0xf7, + 0x64, 0xfa, 0x06, 0x22, 0xa1, 0x18, 0x3c, 0x00, + 0x34, 0x80, 0x00, 0x00, 0x28, 0x1c, 0xf8, 0xf7, + 0x5f, 0xfa, 0xa0, 0x8f, 0x00, 0x09, 0xe0, 0x62, + 0x20, 0x63, 0x03, 0x48, 0x01, 0x69, 0x20, 0x1c, + 0xf8, 0xf7, 0xc7, 0xf9, 0xb0, 0xbd, 0x00, 0x00, + 0x7c, 0x79, 0x01, 0x00, 0xf8, 0xb5, 0x06, 0x1c, + 0x60, 0x36, 0x05, 0x1c, 0x70, 0x7a, 0x0c, 0x23, + 0x25, 0x49, 0x58, 0x43, 0x44, 0x18, 0xa8, 0x6b, + 0x00, 0x27, 0x00, 0x28, 0x06, 0xd0, 0xa0, 0x78, + 0x3c, 0x00, 0x70, 0x80, 0x00, 0x00, 0x01, 0x28, + 0x03, 0xd1, 0xa7, 0x70, 0x70, 0x7a, 0x0a, 0xf0, + 0xb6, 0xfd, 0x2a, 0x1c, 0x0c, 0x21, 0x80, 0x20, + 0x0b, 0xf0, 0x95, 0xfb, 0xa8, 0x6b, 0x00, 0x28, + 0x33, 0xd0, 0xa0, 0x78, 0x02, 0x28, 0x0b, 0xd0, + 0x04, 0x28, 0x22, 0xd1, 0xa7, 0x70, 0x2f, 0x1c, + 0x40, 0x37, 0x78, 0x78, 0x02, 0x28, 0x0c, 0xd1, + 0x70, 0x7a, 0x0a, 0xf0, 0xa0, 0xfd, 0x18, 0xe0, + 0x03, 0x20, 0x3c, 0x00, 0xac, 0x80, 0x00, 0x00, + 0xa0, 0x70, 0x12, 0x49, 0x00, 0x20, 0x14, 0x39, + 0x09, 0x69, 0xf8, 0xf7, 0x90, 0xf9, 0x0f, 0xe0, + 0x2c, 0x1c, 0x07, 0xe0, 0x78, 0x78, 0x41, 0x21, + 0x22, 0x1c, 0x08, 0x55, 0x0c, 0x21, 0x80, 0x20, + 0x0b, 0xf0, 0x70, 0xfb, 0x60, 0x34, 0x60, 0x7a, + 0x04, 0xf0, 0x20, 0xff, 0x04, 0x1c, 0xf1, 0xd1, + 0x70, 0x7a, 0x40, 0x35, 0xa9, 0x8b, 0x00, 0x02, + 0x09, 0x09, 0x09, 0x04, 0x3c, 0x00, 0xe8, 0x80, + 0x00, 0x00, 0x08, 0x43, 0x81, 0x21, 0x01, 0x43, + 0x0c, 0x20, 0x0b, 0xf0, 0xa0, 0xfa, 0xf8, 0xbd, + 0x00, 0x00, 0x60, 0x7b, 0x01, 0x00, 0xf8, 0xb5, + 0x1c, 0x49, 0x05, 0x1c, 0x88, 0x6a, 0x01, 0x30, + 0x88, 0x62, 0x28, 0x1c, 0x0b, 0xf0, 0x7d, 0xfd, + 0x04, 0x1c, 0x11, 0xd0, 0x2b, 0x1c, 0x20, 0x33, + 0x1e, 0x1c, 0x5a, 0x79, 0x20, 0x1c, 0xb4, 0x30, + 0x19, 0x79, 0x14, 0x4f, 0xfd, 0xf7, 0x3c, 0x00, + 0x24, 0x81, 0x00, 0x00, 0x89, 0xf8, 0xaa, 0x7a, + 0x20, 0x1c, 0xb8, 0x30, 0xb1, 0x79, 0xfd, 0xf7, + 0xb9, 0xf8, 0x00, 0x2f, 0x04, 0xd1, 0x01, 0x21, + 0x28, 0x68, 0xfa, 0xf7, 0x6d, 0xfa, 0xf8, 0xbd, + 0x60, 0x68, 0xbc, 0x21, 0xc0, 0x8a, 0x08, 0x53, + 0x28, 0x68, 0x00, 0x21, 0xfa, 0xf7, 0x64, 0xfa, + 0x00, 0x28, 0x09, 0xd0, 0x06, 0x49, 0xc8, 0x6a, + 0x01, 0x30, 0xc8, 0x62, 0x00, 0x2c, 0xee, 0xd0, + 0x3c, 0x00, 0x60, 0x81, 0x00, 0x00, 0x20, 0x1c, + 0xf9, 0xf7, 0x47, 0xfb, 0xea, 0xe7, 0x20, 0x1c, + 0xf8, 0xf7, 0x3c, 0xf9, 0xe6, 0xe7, 0xc4, 0x69, + 0x01, 0x00, 0xa1, 0xff, 0x00, 0x00, 0xf8, 0xb5, + 0x16, 0x4c, 0x05, 0x1f, 0x00, 0x22, 0x21, 0x1c, + 0xa0, 0x31, 0x03, 0xe0, 0x28, 0x68, 0xa0, 0x42, + 0x09, 0xd0, 0x20, 0x34, 0xa1, 0x42, 0xf9, 0xd1, + 0x00, 0x2a, 0x04, 0xd1, 0x02, 0x21, 0x8e, 0x20, + 0xf9, 0xf7, 0x3c, 0x00, 0x9c, 0x81, 0x00, 0x00, + 0x83, 0xf8, 0xf8, 0xbd, 0x0d, 0x4f, 0xbe, 0x79, + 0x60, 0x69, 0x01, 0x30, 0x60, 0x61, 0xf8, 0xf7, + 0x97, 0xfd, 0xa8, 0x42, 0x07, 0xd1, 0xa0, 0x88, + 0x04, 0x30, 0xf8, 0xf7, 0x97, 0xfd, 0xe0, 0x69, + 0x01, 0x30, 0xe0, 0x61, 0x05, 0xe0, 0x20, 0x68, + 0x28, 0x60, 0x25, 0x60, 0xa0, 0x69, 0x01, 0x30, + 0xa0, 0x61, 0xbe, 0x71, 0xe5, 0xe7, 0x00, 0x00, + 0xd0, 0x5c, 0x01, 0x00, 0x3c, 0x00, 0xd8, 0x81, + 0x00, 0x00, 0x20, 0x10, 0x07, 0x00, 0x00, 0x29, + 0x01, 0xdb, 0x06, 0x29, 0x01, 0xdb, 0x02, 0x20, + 0x70, 0x47, 0x06, 0x4b, 0xc9, 0x00, 0x5a, 0x5c, + 0xc9, 0x18, 0x02, 0x70, 0x4a, 0x78, 0x42, 0x70, + 0x8a, 0x78, 0x82, 0x70, 0x49, 0x68, 0x41, 0x60, + 0x00, 0x20, 0x70, 0x47, 0x00, 0x00, 0xcc, 0x5a, + 0x01, 0x00, 0xb0, 0xb5, 0x0d, 0x1c, 0x04, 0x1c, + 0x05, 0x28, 0x01, 0xd3, 0xf9, 0xf7, 0x3c, 0x00, + 0x14, 0x82, 0x00, 0x00, 0x75, 0xf8, 0x10, 0x48, + 0x40, 0x68, 0x00, 0x28, 0x00, 0xd0, 0x03, 0x24, + 0x10, 0x2d, 0x00, 0xd3, 0x0f, 0x25, 0x06, 0x20, + 0x0b, 0x49, 0x60, 0x43, 0x12, 0x31, 0x40, 0x18, + 0x41, 0x78, 0x80, 0x78, 0x49, 0x19, 0x09, 0x06, + 0x09, 0x0e, 0x88, 0x42, 0x00, 0xd2, 0x01, 0x1c, + 0x01, 0x20, 0x88, 0x40, 0x05, 0x49, 0x01, 0x38, + 0x09, 0x68, 0x08, 0x40, 0x00, 0x04, 0x00, 0x0c, + 0x3c, 0x00, 0x50, 0x82, 0x00, 0x00, 0x02, 0xf0, + 0x44, 0xfe, 0xb0, 0xbd, 0x00, 0x00, 0xd4, 0x7a, + 0x01, 0x00, 0x08, 0x20, 0x07, 0x00, 0xb0, 0xb5, + 0x04, 0x1c, 0x0d, 0x1c, 0x09, 0xf0, 0xcf, 0xfd, + 0x00, 0x28, 0x03, 0xd1, 0x20, 0x1c, 0x09, 0xf0, + 0x82, 0xfd, 0x05, 0x61, 0xb0, 0xbd, 0x80, 0xb5, + 0x0a, 0xf0, 0x97, 0xfd, 0x03, 0x4a, 0x0c, 0x32, + 0x06, 0xca, 0x89, 0x18, 0x08, 0x1a, 0x80, 0xbd, + 0x00, 0x00, 0x3c, 0x00, 0x8c, 0x82, 0x00, 0x00, + 0xa0, 0x7d, 0x01, 0x00, 0x70, 0xb5, 0x0b, 0x4c, + 0x04, 0x9e, 0x64, 0x68, 0x0d, 0xe0, 0x65, 0x68, + 0x85, 0x42, 0x09, 0xd1, 0x20, 0x7a, 0x08, 0x70, + 0xe0, 0x68, 0x10, 0x60, 0x20, 0x69, 0x18, 0x60, + 0x20, 0x7d, 0x30, 0x80, 0x01, 0x20, 0x70, 0xbd, + 0x24, 0x68, 0x00, 0x2c, 0xef, 0xd1, 0x00, 0x20, + 0x70, 0xbd, 0x00, 0x00, 0xa4, 0x6e, 0x01, 0x00, + 0x10, 0xb5, 0x04, 0x1c, 0x3c, 0x00, 0xc8, 0x82, + 0x00, 0x00, 0x20, 0x30, 0x81, 0x7b, 0x20, 0x69, + 0x04, 0x30, 0xfd, 0xf7, 0x64, 0xf9, 0x01, 0x1c, + 0x62, 0x20, 0x02, 0x5b, 0x63, 0x6a, 0x40, 0x34, + 0x20, 0x78, 0x02, 0xf0, 0xce, 0xfd, 0x10, 0xbd, + 0x00, 0x00, 0x0b, 0x49, 0x10, 0xb5, 0x08, 0x88, + 0x8a, 0x69, 0x0a, 0x23, 0x50, 0x43, 0x58, 0x43, + 0x0e, 0xd0, 0x08, 0x4a, 0x53, 0x89, 0x94, 0x88, + 0xd2, 0x88, 0x1b, 0x19, 0x52, 0x04, 0x3c, 0x00, + 0x04, 0x83, 0x00, 0x00, 0x52, 0x0c, 0x9a, 0x18, + 0xc9, 0x68, 0x06, 0x32, 0x4a, 0x43, 0x0a, 0x21, + 0x51, 0x43, 0xf8, 0xf7, 0xfd, 0xf9, 0x10, 0xbd, + 0xc8, 0x74, 0x01, 0x00, 0x30, 0x00, 0x07, 0x00, + 0x10, 0xb5, 0x43, 0x1c, 0x01, 0xd1, 0x10, 0x48, + 0x10, 0xbd, 0x0f, 0x4a, 0x0e, 0x4b, 0x94, 0x3a, + 0x12, 0x68, 0x44, 0x3b, 0x1b, 0x7a, 0x10, 0xe0, + 0x54, 0x68, 0x84, 0x42, 0x0c, 0xd1, 0x00, 0x29, + 0x3c, 0x00, 0x40, 0x83, 0x00, 0x00, 0x0f, 0xd1, + 0x02, 0x2b, 0x03, 0xd1, 0xd4, 0x7b, 0x02, 0x2c, + 0x0a, 0xd2, 0x04, 0xe0, 0x00, 0x2b, 0x05, 0xd1, + 0xd4, 0x7b, 0xe4, 0x07, 0x04, 0xd4, 0x12, 0x68, + 0x00, 0x2a, 0xec, 0xd1, 0x00, 0x20, 0x10, 0xbd, + 0x10, 0x1c, 0x10, 0xbd, 0x00, 0x00, 0x38, 0x6f, + 0x01, 0x00, 0x01, 0x1c, 0x01, 0x20, 0x01, 0x29, + 0x00, 0xd0, 0x00, 0x20, 0x70, 0x47, 0x00, 0xb5, + 0x02, 0x1c, 0x3c, 0x00, 0x7c, 0x83, 0x00, 0x00, + 0xfd, 0xf7, 0xce, 0xf8, 0x00, 0x28, 0x08, 0xd0, + 0x10, 0x1c, 0xff, 0xf7, 0xf1, 0xff, 0x18, 0x23, + 0x03, 0x49, 0x58, 0x43, 0x40, 0x18, 0x00, 0x69, + 0x00, 0xbd, 0x00, 0x20, 0x00, 0xbd, 0x00, 0x00, + 0x94, 0x67, 0x01, 0x00, 0x80, 0xb5, 0x00, 0x28, + 0x00, 0xd1, 0x08, 0x48, 0x07, 0x49, 0x00, 0x68, + 0x50, 0x31, 0x09, 0x7a, 0x00, 0x29, 0x02, 0xd0, + 0x02, 0x29, 0x04, 0xd1, 0x3c, 0x00, 0xb8, 0x83, + 0x00, 0x00, 0x00, 0xe0, 0x01, 0x21, 0x00, 0xf0, + 0x06, 0xf8, 0x80, 0xbd, 0x00, 0x20, 0x80, 0xbd, + 0x00, 0x00, 0xa4, 0x6e, 0x01, 0x00, 0x12, 0x4a, + 0x12, 0x4b, 0x12, 0x7a, 0x2c, 0x3b, 0x00, 0x2a, + 0x03, 0xd1, 0x5a, 0x68, 0x00, 0x2a, 0x18, 0xd1, + 0x04, 0xe0, 0x02, 0x2a, 0x02, 0xd1, 0x9a, 0x68, + 0x00, 0x2a, 0x12, 0xd1, 0x00, 0x20, 0x70, 0x47, + 0xc2, 0x7b, 0x8a, 0x42, 0x01, 0xd0, 0x3c, 0x00, + 0xf4, 0x83, 0x00, 0x00, 0x03, 0x2a, 0x0a, 0xd1, + 0x82, 0x7e, 0x01, 0x2a, 0x07, 0xd1, 0x02, 0x7f, + 0x01, 0x32, 0x12, 0x06, 0x12, 0x0e, 0x02, 0x77, + 0xc3, 0x7e, 0x9a, 0x42, 0xee, 0xd2, 0x00, 0x68, + 0x00, 0x28, 0xec, 0xd1, 0x70, 0x47, 0x00, 0x00, + 0xf4, 0x6e, 0x01, 0x00, 0xf7, 0xb5, 0x84, 0x46, + 0x00, 0x20, 0x01, 0x27, 0x00, 0x24, 0x00, 0x25, + 0x88, 0xb0, 0x07, 0xe0, 0x62, 0x46, 0x52, 0x5d, + 0x3c, 0x00, 0x30, 0x84, 0x00, 0x00, 0x00, 0x2a, + 0x05, 0xd0, 0xab, 0x00, 0x6e, 0x46, 0xf2, 0x50, + 0x01, 0x35, 0x8d, 0x42, 0xf5, 0xd3, 0x00, 0x2d, + 0x00, 0xd0, 0x01, 0x20, 0x00, 0x28, 0x28, 0xd0, + 0x00, 0x27, 0x16, 0x4c, 0x6e, 0x46, 0x22, 0xe0, + 0x20, 0x1c, 0x00, 0xf0, 0x30, 0xf8, 0x01, 0x28, + 0x01, 0xd0, 0x07, 0x28, 0x06, 0xd1, 0x00, 0x21, + 0x20, 0x1c, 0x00, 0xf0, 0x34, 0xf8, 0x31, 0x68, + 0x88, 0x42, 0x3c, 0x00, 0x6c, 0x84, 0x00, 0x00, + 0x01, 0xd2, 0x02, 0x27, 0x14, 0xe0, 0x20, 0x68, + 0xc9, 0x00, 0x0c, 0x18, 0x08, 0x3c, 0x20, 0x1c, + 0x00, 0xf0, 0x1c, 0xf8, 0x07, 0x28, 0x07, 0xd1, + 0x01, 0x20, 0x01, 0x2d, 0x00, 0xd0, 0x00, 0x20, + 0x24, 0x68, 0x00, 0x28, 0x00, 0xd1, 0x08, 0x34, + 0x01, 0x3d, 0x04, 0x36, 0x00, 0x2d, 0xda, 0xd1, + 0x0a, 0x98, 0x04, 0x60, 0x0b, 0xb0, 0x38, 0x1c, + 0xf0, 0xbd, 0x00, 0x00, 0x3c, 0x00, 0xa8, 0x84, + 0x00, 0x00, 0x20, 0x52, 0x01, 0x00, 0x00, 0x68, + 0x00, 0x29, 0x01, 0xd0, 0x80, 0x02, 0x80, 0x0a, + 0x70, 0x47, 0x10, 0xb5, 0x40, 0x68, 0x80, 0x00, + 0x44, 0x0f, 0x08, 0x2c, 0x03, 0xd3, 0x02, 0x21, + 0x87, 0x20, 0xf8, 0xf7, 0xec, 0xfe, 0x20, 0x1c, + 0x10, 0xbd, 0x00, 0x29, 0x02, 0xd0, 0x00, 0x68, + 0x80, 0x0d, 0x70, 0x47, 0x40, 0x68, 0x80, 0x05, + 0x80, 0x0d, 0x70, 0x47, 0x00, 0x00, 0x3c, 0x00, + 0xe4, 0x84, 0x00, 0x00, 0x10, 0xb5, 0x40, 0x68, + 0x40, 0x01, 0x44, 0x0f, 0x05, 0x2c, 0x03, 0xd3, + 0x05, 0x21, 0x87, 0x20, 0xf8, 0xf7, 0xd6, 0xfe, + 0x20, 0x1c, 0x10, 0xbd, 0xf8, 0xb5, 0x05, 0x1c, + 0x88, 0x0a, 0x00, 0x90, 0x1c, 0x48, 0x8e, 0x05, + 0xc0, 0x69, 0xb6, 0x0d, 0x17, 0x1c, 0x1c, 0x1c, + 0x00, 0x28, 0x05, 0xd1, 0x18, 0x48, 0x81, 0x69, + 0x8d, 0x42, 0x1d, 0xd0, 0x85, 0x61, 0x11, 0xe0, + 0x3c, 0x00, 0x20, 0x85, 0x00, 0x00, 0xfd, 0xf7, + 0xe8, 0xf8, 0x15, 0x49, 0x09, 0x78, 0x0e, 0x29, + 0x07, 0xd1, 0x00, 0x28, 0x05, 0xd0, 0x11, 0x49, + 0x50, 0x31, 0x06, 0x23, 0xc9, 0x56, 0xf9, 0xf7, + 0x06, 0xfa, 0x0e, 0x49, 0x00, 0x20, 0xc8, 0x61, + 0x8d, 0x61, 0x29, 0x1c, 0x20, 0x1c, 0xf8, 0xf7, + 0xe2, 0xf8, 0x79, 0x43, 0x20, 0x1c, 0xf8, 0xf7, + 0xde, 0xf8, 0x08, 0x48, 0x41, 0x61, 0x20, 0x1c, + 0x00, 0x99, 0x3c, 0x00, 0x5c, 0x85, 0x00, 0x00, + 0xf8, 0xf7, 0xd8, 0xf8, 0x05, 0x48, 0x40, 0x69, + 0x0a, 0x18, 0xa2, 0x42, 0x01, 0xd2, 0x40, 0x18, + 0x01, 0xe0, 0x40, 0x18, 0x00, 0x1b, 0x80, 0x02, + 0x80, 0x19, 0xf8, 0xbd, 0xac, 0x7c, 0x01, 0x00, + 0x11, 0x67, 0x01, 0x00, 0xf8, 0xb5, 0x0f, 0x1c, + 0x06, 0x1c, 0x14, 0x1c, 0x1d, 0x1c, 0x07, 0xf0, + 0xa1, 0xfc, 0x0e, 0x28, 0x09, 0xd1, 0x20, 0x1c, + 0x02, 0xf0, 0xfc, 0xfb, 0x3c, 0x00, 0x98, 0x85, + 0x00, 0x00, 0x00, 0x28, 0x04, 0xd0, 0x08, 0x48, + 0x00, 0x78, 0x02, 0xf0, 0xe4, 0xfb, 0x04, 0x1c, + 0x01, 0x21, 0x00, 0x2e, 0xac, 0x72, 0x00, 0xd0, + 0x39, 0x1c, 0x20, 0x1c, 0x02, 0xf0, 0x07, 0xfc, + 0x28, 0x60, 0x00, 0x20, 0x28, 0x72, 0x6c, 0x72, + 0xf8, 0xbd, 0x90, 0x57, 0x01, 0x00, 0x03, 0x1c, + 0x0a, 0x48, 0x10, 0xb5, 0x00, 0x24, 0x02, 0x1c, + 0xa0, 0x32, 0x03, 0xe0, 0x81, 0x88, 0x3c, 0x00, + 0xd4, 0x85, 0x00, 0x00, 0x99, 0x42, 0x09, 0xd2, + 0x20, 0x30, 0x82, 0x42, 0xf9, 0xd1, 0x00, 0x2c, + 0x04, 0xd1, 0x02, 0x21, 0x8e, 0x20, 0xf8, 0xf7, + 0x5d, 0xfe, 0x00, 0x20, 0x10, 0xbd, 0x00, 0x00, + 0xd0, 0x5c, 0x01, 0x00, 0xff, 0xb5, 0x06, 0x1c, + 0x00, 0x20, 0x81, 0xb0, 0x10, 0x60, 0x1f, 0x1c, + 0x01, 0x25, 0x14, 0x1c, 0x30, 0x1c, 0xff, 0xf7, + 0x6d, 0xff, 0x05, 0x28, 0x12, 0xd2, 0x02, 0xa3, + 0x3c, 0x00, 0x10, 0x86, 0x00, 0x00, 0x1b, 0x5c, + 0x5b, 0x00, 0x9f, 0x44, 0x00, 0x00, 0x03, 0x03, + 0x03, 0x03, 0x08, 0x00, 0x39, 0x1c, 0x30, 0x1c, + 0xff, 0xf7, 0x55, 0xff, 0x03, 0xe0, 0x02, 0x98, + 0xf8, 0xf7, 0xeb, 0xf8, 0x01, 0x30, 0x20, 0x60, + 0x04, 0xe0, 0x05, 0x21, 0x87, 0x20, 0xf8, 0xf7, + 0x34, 0xfe, 0x00, 0x25, 0x20, 0x68, 0x80, 0x28, + 0x04, 0xd9, 0x06, 0x21, 0x87, 0x20, 0xf8, 0xf7, + 0x2c, 0xfe, 0x3c, 0x00, 0x4c, 0x86, 0x00, 0x00, + 0x00, 0x25, 0x28, 0x1c, 0x05, 0xb0, 0xf0, 0xbd, + 0x70, 0xb5, 0x17, 0x4c, 0x60, 0x6c, 0x00, 0x28, + 0x01, 0xd0, 0x01, 0x20, 0x1d, 0xe0, 0x16, 0x4e, + 0x14, 0x4d, 0x31, 0x88, 0xa0, 0x6c, 0x00, 0x28, + 0x08, 0xd0, 0x28, 0x78, 0x81, 0x42, 0x05, 0xd9, + 0xf8, 0xf7, 0x4c, 0xf8, 0x01, 0x38, 0xfa, 0xf7, + 0x51, 0xfe, 0x0e, 0xe0, 0xe0, 0x6c, 0x00, 0x28, + 0x0a, 0xd0, 0x00, 0x20, 0x3c, 0x00, 0x88, 0x86, + 0x00, 0x00, 0xfa, 0xf7, 0x4a, 0xfe, 0x29, 0x78, + 0x32, 0x88, 0x91, 0x42, 0x04, 0xd9, 0x90, 0x42, + 0x02, 0xd9, 0x10, 0x1c, 0x00, 0xe0, 0x08, 0x1c, + 0xfa, 0xf7, 0xdf, 0xfd, 0xe1, 0x6b, 0x44, 0x1a, + 0x0a, 0xf0, 0x81, 0xfb, 0x20, 0x1a, 0x00, 0xd5, + 0x00, 0x20, 0x70, 0xbd, 0x00, 0x00, 0x44, 0x7d, + 0x01, 0x00, 0xf8, 0x60, 0x01, 0x00, 0xfc, 0x60, + 0x01, 0x00, 0xff, 0xb5, 0x27, 0x4e, 0x3c, 0x00, + 0xc4, 0x86, 0x00, 0x00, 0x04, 0x1c, 0xb0, 0x79, + 0x0f, 0x1c, 0x15, 0x1c, 0x81, 0xb0, 0x00, 0x90, + 0x0a, 0xf0, 0x6c, 0xfb, 0xc1, 0x19, 0x23, 0x48, + 0x07, 0x68, 0x00, 0x2f, 0x05, 0xd1, 0x0a, 0x21, + 0x80, 0x20, 0xf8, 0xf7, 0xdf, 0xfd, 0x05, 0xb0, + 0xf0, 0xbd, 0x1e, 0x48, 0x40, 0x68, 0x84, 0x46, + 0x00, 0x28, 0x01, 0xd1, 0x00, 0x22, 0x0e, 0xe0, + 0x82, 0x68, 0x03, 0x68, 0xab, 0x42, 0x07, 0xd1, + 0x3c, 0x00, 0x00, 0x87, 0x00, 0x00, 0x03, 0x79, + 0xa3, 0x42, 0x04, 0xd1, 0x0b, 0x21, 0x80, 0x20, + 0xf8, 0xf7, 0xcb, 0xfd, 0x23, 0xe0, 0xc0, 0x68, + 0x00, 0x28, 0xf1, 0xd1, 0x13, 0x4b, 0xf8, 0x68, + 0x18, 0x60, 0x3d, 0x60, 0x3c, 0x71, 0xb9, 0x60, + 0x04, 0x98, 0x8d, 0x1a, 0x38, 0x61, 0x60, 0x46, + 0x00, 0x23, 0x05, 0xe0, 0x84, 0x68, 0xa4, 0x1a, + 0xac, 0x42, 0x03, 0xda, 0x03, 0x1c, 0xc0, 0x68, + 0x00, 0x28, 0x3c, 0x00, 0x3c, 0x87, 0x00, 0x00, + 0xf7, 0xd1, 0xf8, 0x60, 0x00, 0x2b, 0x08, 0xd1, + 0x07, 0x48, 0x3b, 0x1c, 0x47, 0x60, 0x08, 0x48, + 0x06, 0x4a, 0x00, 0x88, 0x0a, 0xf0, 0x8a, 0xfb, + 0x00, 0xe0, 0xdf, 0x60, 0x00, 0x98, 0xb0, 0x71, + 0xc3, 0xe7, 0x00, 0x00, 0x20, 0x10, 0x07, 0x00, + 0x7c, 0x5d, 0x01, 0x00, 0x21, 0x38, 0x01, 0x00, + 0x2c, 0x74, 0x01, 0x00, 0xf3, 0xb5, 0x83, 0xb0, + 0x04, 0x1c, 0x09, 0xd0, 0x3c, 0x00, 0x78, 0x87, + 0x00, 0x00, 0x20, 0x1c, 0x04, 0x99, 0x09, 0xf0, + 0x8e, 0xfb, 0x00, 0x28, 0x03, 0xd0, 0x20, 0x1c, + 0x30, 0x30, 0x05, 0xb0, 0xf0, 0xbd, 0x0a, 0xf0, + 0x0e, 0xfb, 0x1e, 0x4a, 0x00, 0x26, 0x04, 0x9f, + 0x01, 0x96, 0x00, 0x90, 0x02, 0x92, 0x02, 0x9c, + 0x00, 0x25, 0x39, 0x1c, 0x20, 0x1c, 0x14, 0x30, + 0x02, 0xf0, 0xc5, 0xfa, 0x00, 0x28, 0x01, 0xd0, + 0x26, 0x1c, 0x03, 0xe0, 0x01, 0x35, 0x3c, 0x00, + 0xb4, 0x87, 0x00, 0x00, 0x1c, 0x34, 0x04, 0x2d, + 0xf2, 0xd3, 0x00, 0x2e, 0x22, 0xd1, 0x01, 0x98, + 0x13, 0x4f, 0x01, 0x30, 0x01, 0x90, 0x02, 0x28, + 0xe8, 0xd3, 0x01, 0x21, 0xc9, 0x06, 0x02, 0x9a, + 0x00, 0x20, 0x13, 0x69, 0x00, 0x9c, 0xe3, 0x1a, + 0x8b, 0x42, 0x01, 0xdd, 0x19, 0x1c, 0x16, 0x1c, + 0x01, 0x30, 0x1c, 0x32, 0x04, 0x28, 0xf4, 0xd3, + 0x30, 0x68, 0x00, 0x28, 0x01, 0xd0, 0xf8, 0xf7, + 0x3c, 0x00, 0xf0, 0x87, 0x00, 0x00, 0xd3, 0xfe, + 0x30, 0x1c, 0xfd, 0xf7, 0x4a, 0xff, 0x30, 0x1c, + 0x14, 0x30, 0x06, 0x22, 0x04, 0x99, 0xf7, 0xf7, + 0x7a, 0xfe, 0x00, 0x9c, 0x30, 0x1c, 0x34, 0x61, + 0xbd, 0xe7, 0x30, 0x6a, 0x01, 0x00, 0x34, 0x42, + 0x01, 0x00, 0x09, 0x49, 0x10, 0xb5, 0x4c, 0x69, + 0x03, 0xe0, 0xe1, 0x68, 0x81, 0x42, 0x03, 0xd0, + 0x24, 0x68, 0x00, 0x2c, 0xf9, 0xd1, 0x01, 0xe0, + 0x00, 0x2c, 0x3c, 0x00, 0x2c, 0x88, 0x00, 0x00, + 0x03, 0xd1, 0x02, 0x21, 0x02, 0x20, 0xf8, 0xf7, + 0x37, 0xfd, 0x20, 0x1c, 0x10, 0xbd, 0x00, 0x00, + 0xfc, 0x5a, 0x01, 0x00, 0x10, 0xb5, 0xc3, 0x07, + 0x06, 0xd5, 0x08, 0x4b, 0x5c, 0x69, 0x0c, 0x43, + 0x5c, 0x61, 0x1c, 0x7e, 0x14, 0x43, 0x1c, 0x76, + 0x80, 0x07, 0x06, 0xd5, 0x04, 0x48, 0x43, 0x69, + 0x19, 0x43, 0x41, 0x61, 0x01, 0x7e, 0x11, 0x43, + 0x01, 0x76, 0x10, 0xbd, 0x3c, 0x00, 0x68, 0x88, + 0x00, 0x00, 0xfc, 0x57, 0x01, 0x00, 0x18, 0x58, + 0x01, 0x00, 0x70, 0xb5, 0x0d, 0x1c, 0x04, 0x1c, + 0x16, 0x1c, 0x00, 0xf0, 0x08, 0xf8, 0xa0, 0x07, + 0xc0, 0x17, 0x01, 0x30, 0x32, 0x1c, 0x29, 0x1c, + 0x00, 0xf0, 0x21, 0xf8, 0x70, 0xbd, 0x10, 0xb5, + 0xc3, 0x07, 0x06, 0xd5, 0x08, 0x4b, 0x5c, 0x69, + 0x8c, 0x43, 0x5c, 0x61, 0x1c, 0x7e, 0x94, 0x43, + 0x1c, 0x76, 0x80, 0x07, 0x06, 0xd5, 0x3c, 0x00, + 0xa4, 0x88, 0x00, 0x00, 0x04, 0x48, 0x43, 0x69, + 0x8b, 0x43, 0x43, 0x61, 0x01, 0x7e, 0x91, 0x43, + 0x01, 0x76, 0x10, 0xbd, 0xfc, 0x57, 0x01, 0x00, + 0x18, 0x58, 0x01, 0x00, 0x03, 0x22, 0x11, 0x1f, + 0x80, 0xb5, 0x01, 0x20, 0x00, 0xf0, 0x02, 0xf8, + 0x80, 0xbd, 0x00, 0x00, 0x30, 0xb5, 0x15, 0x1c, + 0x0c, 0x1c, 0x00, 0x28, 0x87, 0xb0, 0x02, 0xd0, + 0x1c, 0x22, 0x22, 0x49, 0x01, 0xe0, 0x22, 0x49, + 0x3c, 0x00, 0xe0, 0x88, 0x00, 0x00, 0x1c, 0x22, + 0x68, 0x46, 0xf7, 0xf7, 0x64, 0xfe, 0x05, 0x99, + 0x00, 0xab, 0x1a, 0x7e, 0x8c, 0x43, 0x20, 0x1c, + 0x95, 0x43, 0x02, 0x9a, 0x29, 0x1c, 0x02, 0x40, + 0x02, 0x92, 0x01, 0x9a, 0x02, 0x40, 0x01, 0x92, + 0x00, 0x9a, 0x02, 0x40, 0x00, 0x92, 0x03, 0x9a, + 0x02, 0x40, 0x03, 0x92, 0x98, 0x7c, 0x08, 0x40, + 0x98, 0x74, 0x58, 0x7c, 0x08, 0x40, 0x58, 0x74, + 0x18, 0x7c, 0x3c, 0x00, 0x1c, 0x89, 0x00, 0x00, + 0x08, 0x40, 0x18, 0x74, 0xd8, 0x7c, 0x08, 0x40, + 0xd8, 0x74, 0x02, 0x99, 0x10, 0x48, 0x41, 0x61, + 0x01, 0xaa, 0x06, 0xca, 0x91, 0x43, 0x81, 0x61, + 0x81, 0x68, 0x01, 0x9a, 0x11, 0x43, 0x81, 0x60, + 0x81, 0x68, 0x00, 0x9a, 0x91, 0x43, 0x81, 0x60, + 0x00, 0xaa, 0x06, 0xca, 0x11, 0x43, 0x42, 0x68, + 0x11, 0x43, 0x41, 0x60, 0x41, 0x68, 0x03, 0x9a, + 0x91, 0x43, 0x41, 0x60, 0x3c, 0x00, 0x58, 0x89, + 0x00, 0x00, 0x04, 0xa8, 0x0b, 0xf0, 0x01, 0xf8, + 0x07, 0xb0, 0x30, 0xbd, 0x00, 0x00, 0xfc, 0x57, + 0x01, 0x00, 0x18, 0x58, 0x01, 0x00, 0x10, 0x00, + 0x07, 0x00, 0x10, 0xb5, 0x04, 0x1c, 0x01, 0x1c, + 0x01, 0x20, 0x08, 0xf0, 0xe0, 0xf9, 0x00, 0x2c, + 0x02, 0xd0, 0x03, 0xf0, 0x1c, 0xff, 0x10, 0xbd, + 0xfe, 0xf7, 0xd1, 0xfc, 0x10, 0xbd, 0xf0, 0xb5, + 0x0c, 0x1c, 0x01, 0x0e, 0x01, 0x23, 0x3c, 0x00, + 0x94, 0x89, 0x00, 0x00, 0x1b, 0x06, 0x09, 0x06, + 0x99, 0x42, 0x9f, 0xb0, 0x28, 0xd1, 0x17, 0x49, + 0x08, 0x40, 0x00, 0x21, 0x1a, 0x28, 0x00, 0xd3, + 0x02, 0x21, 0x00, 0x29, 0x19, 0xd1, 0xc5, 0x00, + 0x13, 0x4f, 0x10, 0xa8, 0xee, 0x19, 0xb2, 0x88, + 0x21, 0x68, 0xf7, 0xf7, 0x9d, 0xfd, 0x20, 0x1c, + 0xf8, 0xf7, 0xea, 0xfd, 0x7a, 0x59, 0x01, 0xa9, + 0x10, 0xa8, 0xf7, 0xf7, 0x07, 0xfd, 0x00, 0x28, + 0x3c, 0x00, 0xd0, 0x89, 0x00, 0x00, 0x05, 0xd0, + 0x10, 0x98, 0x01, 0xa9, 0x01, 0x90, 0xb0, 0x79, + 0x00, 0xf0, 0x9d, 0xf8, 0x1f, 0xb0, 0xf0, 0xbd, + 0x2a, 0x20, 0xf8, 0xf7, 0x5e, 0xfc, 0x20, 0x1c, + 0xf8, 0xf7, 0xd5, 0xfd, 0xf6, 0xe7, 0x03, 0x21, + 0x2a, 0x20, 0xf8, 0xf7, 0x56, 0xfc, 0xf1, 0xe7, + 0x00, 0x00, 0x7f, 0xff, 0xff, 0x00, 0x24, 0x45, + 0x01, 0x00, 0x10, 0xb5, 0x0c, 0x1c, 0x80, 0x28, + 0x02, 0xd0, 0x3c, 0x00, 0x0c, 0x8a, 0x00, 0x00, + 0x81, 0x28, 0x08, 0xd1, 0x03, 0xe0, 0x20, 0x1c, + 0x00, 0xf0, 0x06, 0xf9, 0x10, 0xbd, 0x20, 0x1c, + 0xf8, 0xf7, 0xbc, 0xfd, 0x10, 0xbd, 0x03, 0x21, + 0x2c, 0x20, 0xf8, 0xf7, 0x3d, 0xfc, 0xf6, 0xe7, + 0xf0, 0xb5, 0x0c, 0x1c, 0x00, 0x21, 0x8b, 0xb0, + 0x0a, 0x91, 0x01, 0x0e, 0x01, 0x23, 0x1b, 0x06, + 0x09, 0x06, 0x99, 0x42, 0x2a, 0xd1, 0x18, 0x49, + 0x08, 0x40, 0x06, 0x1c, 0x3c, 0x00, 0x48, 0x8a, + 0x00, 0x00, 0x06, 0x2e, 0x01, 0xd3, 0x07, 0x21, + 0x24, 0xe0, 0x20, 0x89, 0xf8, 0xf7, 0xf1, 0xfe, + 0x22, 0x89, 0x21, 0x68, 0x05, 0x1c, 0xf7, 0xf7, + 0x4c, 0xfd, 0x20, 0x1c, 0xf8, 0xf7, 0x99, 0xfd, + 0xf4, 0x00, 0x0f, 0x4e, 0x28, 0x1c, 0x0a, 0xaa, + 0x69, 0x46, 0x33, 0x59, 0xf7, 0xf7, 0xb4, 0xfc, + 0x00, 0x28, 0x01, 0xd0, 0x01, 0x28, 0x07, 0xd1, + 0x28, 0x68, 0x69, 0x46, 0x00, 0x90, 0x3c, 0x00, + 0x84, 0x8a, 0x00, 0x00, 0xa0, 0x19, 0x00, 0x79, + 0x0a, 0x9a, 0x00, 0xf0, 0x09, 0xf9, 0x28, 0x1c, + 0xf8, 0xf7, 0xb0, 0xfe, 0x0b, 0xb0, 0xf0, 0xbd, + 0x01, 0x21, 0x2b, 0x20, 0xf8, 0xf7, 0x02, 0xfc, + 0xf8, 0xe7, 0x00, 0x00, 0x7f, 0xff, 0xff, 0x00, + 0x28, 0x46, 0x01, 0x00, 0x0a, 0x1c, 0x01, 0x0e, + 0x01, 0x23, 0x1b, 0x06, 0x09, 0x06, 0x99, 0x42, + 0x80, 0xb5, 0x08, 0xd0, 0x5b, 0x00, 0x99, 0x42, + 0x3c, 0x00, 0xc0, 0x8a, 0x00, 0x00, 0x0b, 0xd1, + 0x00, 0x06, 0x00, 0x0e, 0x11, 0x1c, 0x00, 0xf0, + 0x0e, 0xf9, 0x80, 0xbd, 0x05, 0x49, 0x01, 0x40, + 0x10, 0x1c, 0x05, 0xf0, 0xa2, 0xf9, 0x80, 0xbd, + 0x01, 0x21, 0x2d, 0x20, 0xf8, 0xf7, 0xe1, 0xfb, + 0x80, 0xbd, 0x7f, 0xff, 0xff, 0x00, 0x80, 0xb5, + 0x01, 0x1c, 0x0f, 0x20, 0x00, 0xf0, 0x13, 0xf8, + 0x80, 0xbd, 0x80, 0xb5, 0x01, 0x1c, 0x04, 0x20, + 0x00, 0xf0, 0x3c, 0x00, 0xfc, 0x8a, 0x00, 0x00, + 0x0d, 0xf8, 0x80, 0xbd, 0x80, 0xb5, 0x01, 0x1c, + 0x17, 0x20, 0x00, 0xf0, 0x07, 0xf8, 0x80, 0xbd, + 0x80, 0xb5, 0x01, 0x1c, 0x01, 0x20, 0x00, 0xf0, + 0x01, 0xf8, 0x80, 0xbd, 0xf8, 0xb5, 0x04, 0x1c, + 0x06, 0x1c, 0x80, 0x20, 0x84, 0x43, 0x0f, 0x1c, + 0x19, 0x2c, 0x01, 0xd3, 0xf8, 0xf7, 0xea, 0xfb, + 0x08, 0x48, 0x04, 0x5d, 0x21, 0x1c, 0x00, 0x20, + 0xf8, 0xf7, 0x50, 0xfd, 0x3c, 0x00, 0x38, 0x8b, + 0x00, 0x00, 0x05, 0x1c, 0x22, 0x1c, 0x39, 0x1c, + 0x00, 0x68, 0xf7, 0xf7, 0xda, 0xfc, 0x2a, 0x1c, + 0x31, 0x1c, 0x07, 0x20, 0xf8, 0xf7, 0x11, 0xf9, + 0xf8, 0xbd, 0xf4, 0x45, 0x01, 0x00, 0xf8, 0xb5, + 0x0d, 0x1c, 0x16, 0x1c, 0x04, 0x1c, 0x1f, 0x1c, + 0x08, 0x21, 0x00, 0x20, 0xf8, 0xf7, 0x39, 0xfd, + 0x14, 0x22, 0x01, 0x68, 0x0e, 0x4b, 0x72, 0x43, + 0xd2, 0x18, 0x0c, 0x71, 0x12, 0x7c, 0x3c, 0x00, + 0x74, 0x8b, 0x00, 0x00, 0x4a, 0x71, 0x0d, 0x60, + 0x0b, 0x4a, 0x8f, 0x71, 0x12, 0x68, 0x7f, 0x2a, + 0x03, 0xd9, 0x52, 0x05, 0x52, 0x0e, 0x80, 0x23, + 0x1a, 0x43, 0xca, 0x71, 0x07, 0x4a, 0x00, 0x23, + 0x51, 0x68, 0x01, 0x31, 0x51, 0x60, 0x02, 0x1c, + 0x81, 0x21, 0x00, 0x20, 0xf8, 0xf7, 0x08, 0xf9, + 0xf8, 0xbd, 0x00, 0x00, 0x74, 0x40, 0x01, 0x00, + 0xfc, 0x5a, 0x01, 0x00, 0x80, 0x6e, 0x01, 0x00, + 0x3c, 0x00, 0xb0, 0x8b, 0x00, 0x00, 0xb0, 0xb5, + 0x04, 0x1c, 0x08, 0x21, 0x00, 0x20, 0xf8, 0xf7, + 0x0e, 0xfd, 0x21, 0x8b, 0xe2, 0x7d, 0x05, 0x1c, + 0x09, 0x05, 0x52, 0x07, 0x52, 0x0f, 0x49, 0x0c, + 0x00, 0x68, 0x11, 0x43, 0x81, 0x80, 0xa1, 0x7d, + 0x14, 0x23, 0x0e, 0x4a, 0x59, 0x43, 0x89, 0x18, + 0x09, 0x7c, 0xc1, 0x71, 0xe1, 0x6a, 0x01, 0x60, + 0xe1, 0x68, 0x28, 0x1c, 0xf8, 0xf7, 0x17, 0xfc, + 0x0a, 0x48, 0x3c, 0x00, 0xec, 0x8b, 0x00, 0x00, + 0x00, 0x68, 0x00, 0x28, 0x01, 0xd0, 0xf7, 0xf7, + 0xf1, 0xfb, 0x07, 0x49, 0x04, 0x31, 0x88, 0x68, + 0x01, 0x30, 0x88, 0x60, 0x00, 0x21, 0x2a, 0x1c, + 0x00, 0x20, 0x23, 0x6b, 0xf8, 0xf7, 0xd2, 0xf8, + 0x01, 0x20, 0xb0, 0xbd, 0x74, 0x40, 0x01, 0x00, + 0x7c, 0x6e, 0x01, 0x00, 0x01, 0x48, 0x80, 0x68, + 0x70, 0x47, 0x00, 0x00, 0x80, 0x6e, 0x01, 0x00, + 0x10, 0xb5, 0x04, 0x1c, 0x3c, 0x00, 0x28, 0x8c, + 0x00, 0x00, 0x92, 0xb0, 0x01, 0x68, 0x68, 0x46, + 0x08, 0x22, 0xf7, 0xf7, 0x62, 0xfc, 0x00, 0xab, + 0x98, 0x88, 0x40, 0x07, 0x40, 0x0f, 0xd8, 0x77, + 0x98, 0x88, 0x40, 0x04, 0x00, 0x0d, 0x18, 0x84, + 0xd8, 0x88, 0x58, 0x84, 0x00, 0x98, 0x0d, 0x90, + 0x05, 0x94, 0x20, 0x89, 0x08, 0x38, 0x20, 0x81, + 0x05, 0x98, 0x01, 0x68, 0x08, 0x31, 0x01, 0x60, + 0x00, 0x20, 0x0a, 0x90, 0x0c, 0x90, 0x3c, 0x00, + 0x64, 0x8c, 0x00, 0x00, 0x00, 0x21, 0x11, 0x20, + 0x09, 0xf0, 0x78, 0xfb, 0x05, 0x49, 0x06, 0x4a, + 0x08, 0x68, 0x01, 0x30, 0x08, 0x60, 0x02, 0x21, + 0x02, 0xa8, 0x01, 0xf0, 0xcd, 0xfc, 0x12, 0xb0, + 0x10, 0xbd, 0x00, 0x00, 0x80, 0x6e, 0x01, 0x00, + 0x55, 0x8b, 0x00, 0x00, 0x02, 0x1c, 0x01, 0x20, + 0x00, 0x06, 0x08, 0x43, 0x80, 0xb5, 0x2b, 0x21, + 0x0a, 0xf0, 0x8a, 0xfd, 0x80, 0xbd, 0x00, 0x00, + 0x3c, 0x00, 0xa0, 0x8c, 0x00, 0x00, 0xf7, 0xb5, + 0x04, 0x1c, 0x06, 0x1c, 0x80, 0x20, 0x84, 0x43, + 0x17, 0x1c, 0x06, 0x2c, 0x01, 0xd3, 0xf8, 0xf7, + 0x26, 0xfb, 0x0b, 0x48, 0x05, 0x5d, 0x29, 0x1c, + 0x00, 0x20, 0xf8, 0xf7, 0x8c, 0xfc, 0x04, 0x1c, + 0x00, 0x68, 0x01, 0x99, 0x2a, 0x1c, 0xf7, 0xf7, + 0x16, 0xfc, 0x39, 0x1c, 0x20, 0x1c, 0xf8, 0xf7, + 0xa2, 0xfb, 0x22, 0x1c, 0x31, 0x1c, 0x00, 0x23, + 0x02, 0x20, 0x3c, 0x00, 0xdc, 0x8c, 0x00, 0x00, + 0xf8, 0xf7, 0x68, 0xf8, 0xfe, 0xbd, 0x00, 0x00, + 0x20, 0x46, 0x01, 0x00, 0x0a, 0x1c, 0x01, 0x1c, + 0x80, 0xb5, 0x00, 0x23, 0x01, 0x20, 0xf8, 0xf7, + 0x5d, 0xf8, 0x80, 0xbd, 0xff, 0xb5, 0x9f, 0xb0, + 0x1f, 0x1c, 0x05, 0x1c, 0x0a, 0x30, 0x1e, 0x90, + 0x1c, 0xaa, 0x1d, 0xa9, 0x0a, 0xf0, 0x00, 0xff, + 0x00, 0x28, 0x71, 0xd0, 0x00, 0x2f, 0x09, 0xd0, + 0x0a, 0x21, 0x00, 0x20, 0x3c, 0x00, 0x18, 0x8d, + 0x00, 0x00, 0xf8, 0xf7, 0x5e, 0xfc, 0x06, 0x68, + 0x04, 0x1c, 0x30, 0x1d, 0xfa, 0xf7, 0xaf, 0xfa, + 0x05, 0xe0, 0x04, 0x21, 0x00, 0x20, 0xf8, 0xf7, + 0x54, 0xfc, 0x06, 0x68, 0x04, 0x1c, 0x28, 0x89, + 0x36, 0x49, 0x01, 0x22, 0x08, 0x80, 0x70, 0x80, + 0xe8, 0x88, 0x14, 0xa9, 0x30, 0x80, 0x19, 0xa8, + 0xfc, 0xf7, 0xf5, 0xfc, 0xfc, 0xf7, 0xff, 0xfb, + 0x01, 0x1c, 0xff, 0x31, 0x21, 0x31, 0x3c, 0x00, + 0x54, 0x8d, 0x00, 0x00, 0x20, 0x1c, 0x01, 0xf0, + 0xef, 0xf8, 0x19, 0xa9, 0x20, 0x1c, 0x01, 0xf0, + 0xeb, 0xf8, 0x14, 0xa9, 0x20, 0x1c, 0x01, 0xf0, + 0xe7, 0xf8, 0x20, 0x1c, 0x20, 0x99, 0xfd, 0xf7, + 0x4b, 0xfd, 0x00, 0x22, 0x02, 0x21, 0x01, 0xf0, + 0x33, 0xfd, 0x06, 0x1c, 0x1c, 0x99, 0x00, 0x20, + 0x88, 0x61, 0x30, 0x1c, 0xf8, 0xf7, 0x1c, 0xfa, + 0x00, 0x2e, 0x0b, 0xd0, 0x30, 0x7a, 0x00, 0x28, + 0x3c, 0x00, 0x90, 0x8d, 0x00, 0x00, 0x02, 0xd0, + 0x40, 0x21, 0x08, 0x43, 0x30, 0x72, 0x1c, 0x98, + 0x02, 0x22, 0x81, 0x69, 0x11, 0x43, 0x81, 0x61, + 0x04, 0xe0, 0x1c, 0x99, 0x02, 0x22, 0x88, 0x69, + 0x90, 0x43, 0x88, 0x61, 0x1d, 0xaa, 0x06, 0xca, + 0x01, 0xa8, 0x05, 0xf0, 0x58, 0xfb, 0x09, 0xa8, + 0x00, 0x2f, 0x02, 0xd0, 0x02, 0x22, 0x42, 0x72, + 0x01, 0xe0, 0x00, 0x21, 0x41, 0x72, 0x04, 0x94, + 0x01, 0xa8, 0x3c, 0x00, 0xcc, 0x8d, 0x00, 0x00, + 0x04, 0xf0, 0x7a, 0xfb, 0x01, 0x21, 0x1c, 0x98, + 0x08, 0xf0, 0xc8, 0xff, 0x00, 0x2f, 0x04, 0xd0, + 0x1c, 0x98, 0x01, 0x22, 0x81, 0x69, 0x11, 0x43, + 0x81, 0x61, 0xa8, 0x88, 0x1c, 0x9c, 0x01, 0xf0, + 0x9f, 0xfe, 0x02, 0x1c, 0x21, 0x1c, 0x00, 0xe0, + 0x04, 0xe0, 0x07, 0x48, 0x40, 0x88, 0x09, 0xf0, + 0x1f, 0xf8, 0x04, 0xe0, 0x3a, 0x1c, 0x00, 0x21, + 0x05, 0x20, 0xf9, 0xf7, 0x3c, 0x00, 0x08, 0x8e, + 0x00, 0x00, 0x9b, 0xf8, 0x00, 0x20, 0x23, 0xb0, + 0xf0, 0xbd, 0xfc, 0x60, 0x01, 0x00, 0x98, 0x7c, + 0x01, 0x00, 0xf8, 0xb5, 0x04, 0x1c, 0xc0, 0x68, + 0x05, 0x68, 0xa0, 0x1d, 0x01, 0xf0, 0x95, 0xff, + 0x00, 0x28, 0x45, 0xd0, 0x21, 0x1c, 0x14, 0x31, + 0x20, 0x1c, 0x6a, 0x46, 0x0a, 0xf0, 0x55, 0xfe, + 0x00, 0x28, 0x3d, 0xd0, 0xfc, 0xf7, 0x7d, 0xfa, + 0x00, 0x28, 0x39, 0xd1, 0x00, 0x98, 0x3c, 0x00, + 0x44, 0x8e, 0x00, 0x00, 0x4b, 0x21, 0x09, 0x5c, + 0x01, 0x29, 0x34, 0xd1, 0x04, 0x26, 0x09, 0xf0, + 0x19, 0xf9, 0x68, 0x88, 0x00, 0x28, 0x1b, 0xd1, + 0xa8, 0x88, 0x03, 0x21, 0x89, 0x03, 0x88, 0x43, + 0x15, 0x49, 0x00, 0x26, 0x08, 0x80, 0x01, 0x22, + 0x02, 0x21, 0x20, 0x69, 0x01, 0xf0, 0xb8, 0xfc, + 0x04, 0x1c, 0x14, 0xd0, 0x00, 0x98, 0x80, 0x69, + 0x80, 0x07, 0x10, 0xd5, 0xf8, 0xf7, 0x9a, 0xf9, + 0x3c, 0x00, 0x80, 0x8e, 0x00, 0x00, 0x20, 0x1c, + 0xf8, 0xf7, 0xdd, 0xf8, 0x00, 0x28, 0x09, 0xd1, + 0xf8, 0xf7, 0x7f, 0xf9, 0x01, 0x26, 0x00, 0x98, + 0x02, 0x22, 0x81, 0x69, 0x91, 0x43, 0x81, 0x61, + 0x00, 0x21, 0x01, 0xe0, 0x00, 0x98, 0x02, 0x21, + 0x08, 0xf0, 0x61, 0xff, 0x00, 0x98, 0x80, 0x69, + 0xa9, 0x88, 0xc2, 0x07, 0xd2, 0x0f, 0x30, 0x1c, + 0xf9, 0xf7, 0x45, 0xf8, 0xf8, 0xbd, 0xfa, 0x60, + 0x01, 0x00, 0x3c, 0x00, 0xbc, 0x8e, 0x00, 0x00, + 0x1c, 0xb5, 0x04, 0x69, 0x00, 0x23, 0x00, 0x22, + 0x00, 0x2c, 0x13, 0xd1, 0x4b, 0x24, 0x24, 0x5c, + 0x02, 0x2c, 0x03, 0xd1, 0x02, 0x29, 0x05, 0xd0, + 0x01, 0x22, 0x03, 0xe0, 0x02, 0x29, 0x01, 0xd1, + 0x01, 0x22, 0x01, 0x23, 0x00, 0x2a, 0x05, 0xd0, + 0x00, 0x90, 0x04, 0x20, 0x01, 0x93, 0x69, 0x46, + 0x09, 0xf0, 0x36, 0xfa, 0x1c, 0xbd, 0x00, 0x00, + 0xb0, 0xb5, 0x04, 0x1c, 0x3c, 0x00, 0xf8, 0x8e, + 0x00, 0x00, 0xf2, 0x21, 0x0f, 0x20, 0x0c, 0x4d, + 0x0a, 0xf0, 0x99, 0xfb, 0x28, 0x78, 0x08, 0x28, + 0x0b, 0xd2, 0x01, 0xa3, 0x1b, 0x5c, 0x5b, 0x00, + 0x9f, 0x44, 0x07, 0x03, 0x03, 0x08, 0x08, 0x08, + 0x08, 0x08, 0x00, 0x2c, 0x01, 0xd1, 0x05, 0xf0, + 0xbc, 0xfb, 0xb0, 0xbd, 0x01, 0x2c, 0xfc, 0xd1, + 0xff, 0x20, 0x07, 0xf0, 0x38, 0xfa, 0xb0, 0xbd, + 0x00, 0x00, 0x74, 0x66, 0x01, 0x00, 0x3c, 0x00, + 0x34, 0x8f, 0x00, 0x00, 0x8c, 0xb5, 0x05, 0x4a, + 0x00, 0xab, 0x11, 0x72, 0x00, 0x90, 0x19, 0x71, + 0x69, 0x46, 0x08, 0x20, 0x09, 0xf0, 0x0a, 0xfa, + 0x8c, 0xbd, 0x00, 0x00, 0xac, 0x7c, 0x01, 0x00, + 0xf3, 0xb5, 0x04, 0x1c, 0xc0, 0x68, 0x06, 0x27, + 0x85, 0xb0, 0x06, 0x68, 0x09, 0xf0, 0x26, 0xff, + 0x98, 0x49, 0x48, 0x63, 0x20, 0x69, 0x03, 0x21, + 0x01, 0xf0, 0x08, 0xfc, 0x96, 0x4d, 0x00, 0x28, + 0x3c, 0x00, 0x70, 0x8f, 0x00, 0x00, 0x4d, 0xd0, + 0x95, 0x49, 0x40, 0x31, 0x09, 0x79, 0x80, 0x78, + 0x81, 0x42, 0x47, 0xd1, 0x01, 0x21, 0x20, 0x69, + 0x01, 0xf0, 0xfb, 0xfb, 0x02, 0x90, 0x20, 0x69, + 0x32, 0x21, 0x01, 0xf0, 0xf6, 0xfb, 0x01, 0x90, + 0x02, 0x1c, 0x8d, 0x48, 0x02, 0x99, 0xfc, 0xf7, + 0x46, 0xff, 0x00, 0x28, 0x36, 0xd0, 0x00, 0x23, + 0x8a, 0x48, 0x02, 0x99, 0x01, 0x9a, 0xfc, 0xf7, + 0xe4, 0xfe, 0x3c, 0x00, 0xac, 0x8f, 0x00, 0x00, + 0x0b, 0x28, 0x2e, 0xd1, 0x86, 0x4a, 0x51, 0x88, + 0x70, 0x89, 0x41, 0x40, 0x03, 0x91, 0x0b, 0x1c, + 0x84, 0x49, 0x0b, 0x40, 0x25, 0xd1, 0x50, 0x80, + 0x03, 0x99, 0x17, 0x1c, 0x00, 0x29, 0x0b, 0xd0, + 0x03, 0x99, 0x48, 0x05, 0x02, 0xd5, 0x38, 0x1c, + 0xfc, 0xf7, 0x40, 0xfe, 0x03, 0x99, 0x88, 0x06, + 0x02, 0xd5, 0x38, 0x1c, 0xfc, 0xf7, 0x24, 0xfe, + 0x2a, 0x21, 0x20, 0x69, 0x3c, 0x00, 0xe8, 0x8f, + 0x00, 0x00, 0x01, 0xf0, 0xc8, 0xfb, 0x00, 0x28, + 0x0d, 0xd0, 0x80, 0x78, 0xe9, 0x69, 0x81, 0x42, + 0x09, 0xd0, 0xe8, 0x61, 0x38, 0x1c, 0xfc, 0xf7, + 0x16, 0xfe, 0x38, 0x1c, 0xfc, 0xf7, 0x07, 0xfe, + 0x38, 0x1c, 0xfc, 0xf7, 0x26, 0xfe, 0x00, 0x27, + 0x20, 0x1c, 0x20, 0x30, 0x04, 0x90, 0x40, 0x7a, + 0x08, 0x28, 0x71, 0xd1, 0x0a, 0xf0, 0xd1, 0xfc, + 0x00, 0x20, 0x68, 0x61, 0x00, 0x23, 0x3c, 0x00, + 0x24, 0x90, 0x00, 0x00, 0x2b, 0x61, 0xa8, 0x68, + 0x66, 0x49, 0x01, 0x30, 0xa8, 0x60, 0x30, 0x89, + 0x5c, 0x31, 0x88, 0x82, 0x01, 0xf0, 0x7a, 0xfd, + 0x62, 0x49, 0x5c, 0x31, 0x08, 0x61, 0x22, 0x6a, + 0x04, 0x98, 0x18, 0x21, 0x00, 0x7a, 0x01, 0xf0, + 0x33, 0xfe, 0xe1, 0x6a, 0x40, 0x18, 0x03, 0x90, + 0x5c, 0x48, 0x00, 0x6a, 0x00, 0x28, 0x0d, 0xd0, + 0x00, 0x2f, 0x0b, 0xd1, 0x59, 0x48, 0x01, 0x23, + 0x3c, 0x00, 0x60, 0x90, 0x00, 0x00, 0x5c, 0x30, + 0x01, 0x68, 0x1b, 0x07, 0x00, 0x22, 0x30, 0x68, + 0x09, 0xf0, 0x49, 0xff, 0x00, 0x28, 0x00, 0xd1, + 0x05, 0x27, 0x00, 0x21, 0xa0, 0x6b, 0x0a, 0xf0, + 0xce, 0xfc, 0x00, 0x21, 0x20, 0x6c, 0x0a, 0xf0, + 0xe8, 0xfc, 0x4f, 0x4b, 0x03, 0xce, 0x03, 0x9a, + 0x5c, 0x33, 0xfc, 0xf7, 0x88, 0xfd, 0x00, 0x20, + 0x4c, 0x4e, 0x05, 0x21, 0xb0, 0x63, 0x20, 0x69, + 0x01, 0xf0, 0x3c, 0x00, 0x9c, 0x90, 0x00, 0x00, + 0x6f, 0xfb, 0x01, 0x1c, 0x01, 0xd1, 0xf0, 0x60, + 0x1c, 0xe0, 0x01, 0x20, 0xf0, 0x60, 0x88, 0x78, + 0x45, 0x4a, 0x01, 0x32, 0x10, 0x70, 0xc8, 0x78, + 0x50, 0x70, 0x47, 0x4a, 0x10, 0x70, 0x30, 0x69, + 0x00, 0x28, 0x0a, 0xd0, 0x4a, 0x78, 0x08, 0x79, + 0x05, 0x31, 0x09, 0xf0, 0xdd, 0xfa, 0x31, 0x69, + 0xf7, 0xf7, 0x85, 0xf9, 0xf0, 0x68, 0x00, 0x28, + 0x04, 0xd0, 0x3b, 0x4a, 0x3c, 0x00, 0xd8, 0x90, + 0x00, 0x00, 0x01, 0x32, 0x10, 0x78, 0x00, 0x28, + 0x08, 0xd1, 0x00, 0x20, 0xa8, 0x61, 0x71, 0x6a, + 0x00, 0x29, 0x03, 0xd0, 0x20, 0x1c, 0x14, 0x30, + 0xf7, 0xf7, 0x74, 0xf9, 0x34, 0x4a, 0x5c, 0x32, + 0x10, 0x69, 0x31, 0x6a, 0x41, 0x18, 0x00, 0xe0, + 0x20, 0xe0, 0x0a, 0x23, 0xd0, 0x68, 0x0a, 0x22, + 0x09, 0xf0, 0xfb, 0xfe, 0x00, 0x28, 0x07, 0xd0, + 0x2d, 0x4a, 0x31, 0x6a, 0x5c, 0x32, 0x3c, 0x00, + 0x14, 0x91, 0x00, 0x00, 0xd0, 0x68, 0x40, 0x1a, + 0x11, 0x69, 0x40, 0x1a, 0x70, 0x60, 0x29, 0x4a, + 0x5c, 0x32, 0xd0, 0x68, 0x30, 0x62, 0xf0, 0x69, + 0x00, 0x28, 0x04, 0xd0, 0xfa, 0xf7, 0x00, 0xfd, + 0x01, 0x20, 0xfa, 0xf7, 0xa1, 0xfc, 0xfa, 0xf7, + 0x81, 0xfc, 0x27, 0x48, 0x00, 0x68, 0x03, 0xf0, + 0x07, 0xf9, 0x06, 0x98, 0x00, 0x28, 0x03, 0xd1, + 0x1e, 0x4e, 0x00, 0x23, 0xb3, 0x60, 0x16, 0xe0, + 0x3c, 0x00, 0x50, 0x91, 0x00, 0x00, 0x1c, 0x4e, + 0x01, 0x20, 0xb0, 0x60, 0x06, 0x98, 0x01, 0x68, + 0x40, 0x68, 0xb0, 0x65, 0x19, 0x48, 0x71, 0x65, + 0x54, 0x30, 0xc0, 0x88, 0x00, 0x28, 0x09, 0xd0, + 0xb1, 0x69, 0x00, 0x29, 0x06, 0xd0, 0x01, 0xf0, + 0xdc, 0xfc, 0x01, 0x1c, 0xe0, 0x6a, 0xb2, 0x69, + 0xf7, 0xf7, 0x2f, 0xf9, 0x00, 0x2f, 0x15, 0xd1, + 0x12, 0x48, 0x01, 0x69, 0x00, 0x29, 0x08, 0xd1, + 0x01, 0x21, 0x3c, 0x00, 0x8c, 0x91, 0x00, 0x00, + 0x01, 0x61, 0x2a, 0x68, 0x00, 0x2a, 0x03, 0xd0, + 0x00, 0x21, 0x00, 0x20, 0xf7, 0xf7, 0x20, 0xf9, + 0x09, 0x49, 0x00, 0x23, 0xcb, 0x62, 0x2b, 0x61, + 0x6b, 0x61, 0x06, 0xf0, 0xb5, 0xf8, 0x07, 0xb0, + 0xf0, 0xbd, 0x6b, 0x68, 0x06, 0x48, 0x00, 0x2b, + 0xf9, 0xd0, 0x02, 0x1d, 0x11, 0x1c, 0x38, 0x1c, + 0xf7, 0xf7, 0x0f, 0xf9, 0xf3, 0xe7, 0x00, 0x00, + 0x44, 0x7d, 0x01, 0x00, 0x3c, 0x00, 0xc8, 0x91, + 0x00, 0x00, 0xf4, 0x68, 0x01, 0x00, 0xf4, 0x67, + 0x01, 0x00, 0x03, 0x08, 0x00, 0x00, 0xf8, 0x60, + 0x01, 0x00, 0xc4, 0x67, 0x01, 0x00, 0x08, 0xb5, + 0xf8, 0xf7, 0x2f, 0xfd, 0x00, 0x90, 0x00, 0xab, + 0x18, 0x88, 0x00, 0x28, 0x0c, 0xd0, 0x05, 0xf0, + 0x50, 0xff, 0x00, 0xab, 0x59, 0x88, 0x18, 0x88, + 0x05, 0xf0, 0x6d, 0xf9, 0xfe, 0xf7, 0x97, 0xf8, + 0x03, 0x20, 0xfb, 0xf7, 0x0e, 0xf8, 0x3c, 0x00, + 0x04, 0x92, 0x00, 0x00, 0x08, 0xbd, 0x01, 0x20, + 0xff, 0xf7, 0xb2, 0xfb, 0x00, 0x20, 0x08, 0xf0, + 0x8d, 0xfe, 0xf7, 0xe7, 0xf8, 0xb5, 0x4f, 0x49, + 0x8c, 0x68, 0x20, 0x6a, 0x00, 0x68, 0x05, 0x78, + 0xfc, 0xf7, 0x68, 0xfa, 0x00, 0x28, 0x12, 0xd0, + 0x2a, 0x07, 0x92, 0x0f, 0x01, 0x21, 0x01, 0x2a, + 0x00, 0xd0, 0x00, 0x21, 0x00, 0x29, 0x03, 0xd0, + 0x29, 0x06, 0x09, 0x0f, 0x0b, 0x29, 0x06, 0xd1, + 0x3c, 0x00, 0x40, 0x92, 0x00, 0x00, 0x2a, 0x21, + 0x09, 0x5d, 0x08, 0x18, 0x90, 0x30, 0x00, 0x7b, + 0xf9, 0xf7, 0x0d, 0xfc, 0x41, 0x4f, 0x3c, 0x3f, + 0xb8, 0x6b, 0x79, 0x6b, 0xf7, 0xf7, 0xc0, 0xf8, + 0xa0, 0x6c, 0x00, 0x26, 0xc6, 0x60, 0x60, 0x6b, + 0x80, 0x08, 0x04, 0xd0, 0xb8, 0x69, 0x01, 0x30, + 0xb8, 0x61, 0x06, 0xf0, 0xdc, 0xf9, 0x39, 0x4d, + 0x28, 0x69, 0x80, 0x05, 0x80, 0x0f, 0x08, 0xd1, + 0x78, 0x69, 0x3c, 0x00, 0x7c, 0x92, 0x00, 0x00, + 0x04, 0x21, 0x01, 0x30, 0x78, 0x61, 0x60, 0x6b, + 0x40, 0x08, 0x40, 0x00, 0x08, 0x43, 0x60, 0x63, + 0xb8, 0x6a, 0x00, 0x28, 0x03, 0xd0, 0x60, 0x6b, + 0x08, 0x21, 0x08, 0x43, 0x60, 0x63, 0x20, 0x1c, + 0x20, 0x30, 0x00, 0x90, 0x39, 0x68, 0xf7, 0xf7, + 0x9a, 0xf8, 0x03, 0x20, 0x00, 0x02, 0x28, 0x60, + 0x2b, 0x49, 0x88, 0x68, 0xa0, 0x63, 0xc8, 0x68, + 0xe0, 0x63, 0x08, 0x79, 0x3c, 0x00, 0xb8, 0x92, + 0x00, 0x00, 0xc0, 0x06, 0xc0, 0x0e, 0x25, 0x1c, + 0x40, 0x35, 0x28, 0x71, 0x48, 0x79, 0x68, 0x71, + 0x23, 0x48, 0x3c, 0x38, 0x46, 0x62, 0x00, 0x98, + 0x80, 0x7a, 0x01, 0xf0, 0x5e, 0xfd, 0x00, 0x21, + 0x00, 0x28, 0x21, 0x4a, 0x01, 0xd0, 0x11, 0x78, + 0x03, 0xe0, 0x93, 0x78, 0xdb, 0x07, 0x00, 0xd5, + 0x51, 0x78, 0xa9, 0x71, 0x00, 0x28, 0x04, 0xd0, + 0x1b, 0x49, 0x14, 0x31, 0x08, 0x68, 0x3c, 0x00, + 0xf4, 0x92, 0x00, 0x00, 0x20, 0x64, 0x00, 0xe0, + 0x6e, 0x80, 0xb8, 0x6a, 0xc0, 0x07, 0x02, 0xd5, + 0xff, 0x20, 0x28, 0x71, 0xae, 0x71, 0xe6, 0x61, + 0xb8, 0x68, 0x01, 0x30, 0xb8, 0x60, 0x79, 0x68, + 0x88, 0x42, 0x03, 0xd0, 0x0b, 0x21, 0x85, 0x20, + 0xf7, 0xf7, 0xc4, 0xff, 0x0d, 0x49, 0x88, 0x68, + 0xc0, 0x6c, 0x88, 0x60, 0xfb, 0x6a, 0x00, 0x2b, + 0x0c, 0xd0, 0x0e, 0x4a, 0xd4, 0x7b, 0x00, 0x2b, + 0x3c, 0x00, 0x30, 0x93, 0x00, 0x00, 0x02, 0xdd, + 0x7f, 0x2c, 0x05, 0xd2, 0x01, 0xe0, 0x00, 0x2c, + 0x02, 0xd0, 0xd4, 0x7b, 0xe3, 0x18, 0xd3, 0x73, + 0xfe, 0x62, 0xc9, 0x68, 0x88, 0x42, 0x03, 0xd1, + 0x05, 0x21, 0x85, 0x20, 0xf7, 0xf7, 0xa9, 0xff, + 0xf8, 0xbd, 0x24, 0x7e, 0x01, 0x00, 0x00, 0x40, + 0x07, 0x00, 0xa0, 0x80, 0x07, 0x00, 0xe8, 0x80, + 0x07, 0x00, 0x40, 0x00, 0x07, 0x00, 0xfe, 0xb5, + 0x30, 0x4c, 0x3c, 0x00, 0x6c, 0x93, 0x00, 0x00, + 0xa0, 0x6b, 0x21, 0x6b, 0xf7, 0xf7, 0x33, 0xf8, + 0x2d, 0x49, 0x3c, 0x31, 0x8e, 0x68, 0x70, 0x8b, + 0x06, 0x28, 0x04, 0xd2, 0xe0, 0x69, 0x01, 0x30, + 0xe0, 0x61, 0x0e, 0x20, 0x30, 0x85, 0x28, 0x49, + 0x3c, 0x31, 0x0d, 0x68, 0x00, 0x2d, 0x03, 0xd1, + 0x03, 0x21, 0x85, 0x20, 0xf7, 0xf7, 0x84, 0xff, + 0x24, 0x48, 0x45, 0x61, 0x35, 0x62, 0x31, 0x8d, + 0xef, 0x68, 0x04, 0x39, 0x3c, 0x00, 0xa8, 0x93, + 0x00, 0x00, 0x0c, 0x04, 0x01, 0x21, 0x02, 0x91, + 0x24, 0x0c, 0x00, 0x21, 0x01, 0x91, 0x1d, 0x48, + 0x3c, 0x30, 0x80, 0x8a, 0xa0, 0x42, 0x03, 0xd3, + 0x2c, 0x81, 0xee, 0x60, 0x00, 0x24, 0x0b, 0xe0, + 0x00, 0x2f, 0x04, 0xd1, 0x03, 0x21, 0x85, 0x20, + 0xf7, 0xf7, 0x69, 0xff, 0x04, 0xe0, 0x3d, 0x1c, + 0x20, 0x1a, 0x04, 0x04, 0xff, 0x68, 0x24, 0x0c, + 0x02, 0x98, 0x00, 0x28, 0x04, 0xd0, 0x3c, 0x00, + 0xe4, 0x93, 0x00, 0x00, 0x12, 0x49, 0x01, 0x20, + 0x08, 0x61, 0x00, 0x20, 0x02, 0x90, 0x01, 0x98, + 0x01, 0x30, 0x01, 0x90, 0x00, 0x2c, 0xdd, 0xd1, + 0x0c, 0x48, 0x0c, 0x4c, 0x3c, 0x30, 0x07, 0x60, + 0x01, 0x98, 0x30, 0x65, 0xb5, 0x64, 0x30, 0x6a, + 0x00, 0x68, 0x60, 0x62, 0x60, 0x68, 0x01, 0x30, + 0x60, 0x60, 0xa1, 0x68, 0x01, 0x31, 0x88, 0x42, + 0x03, 0xd0, 0x0a, 0x21, 0x85, 0x20, 0xf7, 0xf7, + 0x3c, 0x00, 0x20, 0x94, 0x00, 0x00, 0x41, 0xff, + 0x04, 0x48, 0x00, 0x68, 0xa0, 0x62, 0xfe, 0xbd, + 0x00, 0x00, 0xe8, 0x7d, 0x01, 0x00, 0x00, 0x30, + 0x07, 0x00, 0x78, 0x6e, 0x01, 0x00, 0xb0, 0xb5, + 0x05, 0x1c, 0x01, 0x21, 0x0f, 0x20, 0x0a, 0xf0, + 0xf8, 0xf8, 0xf2, 0x21, 0x0f, 0x20, 0x0a, 0xf0, + 0xf4, 0xf8, 0x0c, 0x48, 0x0c, 0x4c, 0x00, 0x68, + 0x14, 0x3c, 0x00, 0x28, 0x0c, 0xd0, 0xe0, 0x78, + 0x01, 0x28, 0x3c, 0x00, 0x5c, 0x94, 0x00, 0x00, + 0x09, 0xd0, 0x01, 0x22, 0x29, 0x1c, 0x0f, 0x20, + 0x0a, 0xf0, 0xac, 0xf8, 0x60, 0x78, 0x02, 0x28, + 0x06, 0xd0, 0x01, 0x20, 0x03, 0xe0, 0x60, 0x78, + 0x02, 0x28, 0x01, 0xd0, 0x00, 0x20, 0x60, 0x70, + 0xb0, 0xbd, 0x00, 0x00, 0x98, 0x66, 0x01, 0x00, + 0x02, 0x22, 0x00, 0x28, 0x80, 0xb5, 0x00, 0xd1, + 0x03, 0x22, 0x03, 0x49, 0x0e, 0x20, 0x0a, 0xf0, + 0x9b, 0xf8, 0x00, 0x20, 0x3c, 0x00, 0x98, 0x94, + 0x00, 0x00, 0x80, 0xbd, 0x00, 0x00, 0x50, 0xc3, + 0x00, 0x00, 0xf8, 0xb5, 0x00, 0x23, 0x00, 0x22, + 0x00, 0x28, 0x2e, 0xd0, 0x06, 0x89, 0x04, 0x68, + 0x75, 0x1e, 0x2d, 0x04, 0xb6, 0x1a, 0xf6, 0x07, + 0x2d, 0x0c, 0xf6, 0x0f, 0xb4, 0x46, 0x0e, 0xe0, + 0xa7, 0x5c, 0xa6, 0x18, 0x02, 0x33, 0x00, 0x97, + 0x77, 0x78, 0xa7, 0x54, 0x02, 0x32, 0x12, 0x04, + 0x00, 0x9f, 0x12, 0x0c, 0x00, 0x29, 0x3c, 0x00, + 0xd4, 0x94, 0x00, 0x00, 0x77, 0x70, 0x01, 0xdd, + 0x8b, 0x42, 0x15, 0xda, 0xaa, 0x42, 0xee, 0xd3, + 0xc0, 0x68, 0x00, 0x28, 0x10, 0xd0, 0x02, 0x89, + 0x00, 0x2a, 0xf9, 0xd0, 0x62, 0x46, 0x00, 0x2a, + 0x0b, 0xd0, 0x02, 0x68, 0x66, 0x5d, 0x17, 0x78, + 0x02, 0x33, 0x67, 0x55, 0x16, 0x70, 0x01, 0x22, + 0x00, 0x29, 0xd2, 0xdd, 0x8b, 0x42, 0xd0, 0xdb, + 0xf8, 0xbd, 0x00, 0x22, 0xcd, 0xe7, 0x00, 0x00, + 0x3c, 0x00, 0x10, 0x95, 0x00, 0x00, 0xb0, 0xb5, + 0x04, 0x1c, 0x0d, 0x1c, 0x01, 0x20, 0xf8, 0xf7, + 0x5e, 0xfb, 0x0d, 0x49, 0x00, 0x28, 0xc8, 0x61, + 0x14, 0xd0, 0x62, 0x68, 0x42, 0x60, 0xa2, 0x7c, + 0x02, 0x72, 0xa2, 0x68, 0xc2, 0x60, 0xe2, 0x68, + 0x02, 0x61, 0x22, 0x8a, 0x02, 0x75, 0x0a, 0x1d, + 0x0a, 0x62, 0x12, 0x68, 0x00, 0x2a, 0xff, 0xd1, + 0x02, 0x60, 0x48, 0x60, 0x00, 0x20, 0xa8, 0x60, + 0x01, 0x20, 0x3c, 0x00, 0x4c, 0x95, 0x00, 0x00, + 0xb0, 0xbd, 0x01, 0x20, 0xfa, 0xe7, 0x00, 0x00, + 0xa4, 0x6e, 0x01, 0x00, 0xb0, 0xb5, 0x04, 0x1c, + 0x40, 0x68, 0x0d, 0x1c, 0x43, 0x1c, 0x02, 0xd1, + 0x21, 0x1c, 0x09, 0x48, 0x08, 0xe0, 0x00, 0x20, + 0xf8, 0xf7, 0x34, 0xfb, 0x06, 0x49, 0x94, 0x39, + 0x08, 0x61, 0x00, 0x28, 0x03, 0xd0, 0x21, 0x1c, + 0x00, 0xf0, 0x48, 0xfe, 0x00, 0xe0, 0x01, 0x20, + 0xa8, 0x60, 0x01, 0x20, 0x3c, 0x00, 0x88, 0x95, + 0x00, 0x00, 0xb0, 0xbd, 0x00, 0x00, 0x38, 0x6f, + 0x01, 0x00, 0x80, 0xb5, 0x01, 0x21, 0x97, 0x20, + 0xf7, 0xf7, 0x85, 0xfe, 0x00, 0x20, 0x80, 0xbd, + 0x00, 0x00, 0x38, 0xb5, 0x0a, 0x1c, 0x14, 0x32, + 0x00, 0x92, 0x13, 0x1f, 0x05, 0x1c, 0x08, 0x3a, + 0x0c, 0x1c, 0x16, 0x31, 0x40, 0x68, 0xfe, 0xf7, + 0x6c, 0xfe, 0x00, 0x28, 0x01, 0xd0, 0x00, 0x20, + 0x00, 0xe0, 0x01, 0x20, 0x69, 0x68, 0x3c, 0x00, + 0xc4, 0x95, 0x00, 0x00, 0xa0, 0x60, 0x61, 0x60, + 0x01, 0x20, 0x38, 0xbd, 0x10, 0xb5, 0x0c, 0x1c, + 0x01, 0x7a, 0x00, 0x29, 0x0f, 0xd0, 0x01, 0x29, + 0x09, 0xd0, 0x02, 0x29, 0x03, 0xd1, 0x00, 0x21, + 0x00, 0x20, 0x0a, 0xf0, 0x73, 0xfc, 0x00, 0x20, + 0x20, 0x71, 0x01, 0x20, 0x10, 0xbd, 0x41, 0x68, + 0x01, 0x20, 0x0a, 0xf0, 0x6b, 0xfc, 0x00, 0xf0, + 0x0d, 0xf9, 0xf4, 0xe7, 0x80, 0xb5, 0x04, 0x49, + 0x3c, 0x00, 0x00, 0x96, 0x00, 0x00, 0x48, 0x68, + 0x01, 0x38, 0x48, 0x60, 0x01, 0xd1, 0x07, 0xf0, + 0x6e, 0xfb, 0x00, 0x20, 0x80, 0xbd, 0xac, 0x79, + 0x01, 0x00, 0xb0, 0xb5, 0x05, 0x1c, 0x0c, 0x1c, + 0x00, 0xf0, 0x4f, 0xfe, 0xa0, 0x60, 0x68, 0x68, + 0x60, 0x60, 0x01, 0x20, 0xb0, 0xbd, 0xb0, 0xb5, + 0x05, 0x1c, 0x0c, 0x1c, 0x00, 0xf0, 0x6f, 0xfe, + 0xa0, 0x60, 0x68, 0x68, 0x60, 0x60, 0x01, 0x20, + 0xb0, 0xbd, 0x3c, 0x00, 0x3c, 0x96, 0x00, 0x00, + 0x08, 0x1c, 0x00, 0x21, 0x00, 0x22, 0x00, 0x23, + 0x0e, 0xc0, 0x08, 0xc0, 0x01, 0x20, 0x70, 0x47, + 0xf8, 0xb5, 0x0f, 0x1c, 0x04, 0x1c, 0x20, 0x79, + 0x20, 0x28, 0x01, 0xd2, 0x20, 0x20, 0x20, 0x71, + 0x66, 0x79, 0x00, 0x2e, 0x02, 0xd1, 0x25, 0x79, + 0x00, 0x22, 0x0d, 0xe0, 0x25, 0x79, 0x29, 0x1c, + 0x30, 0x1c, 0xf7, 0xf7, 0x4f, 0xf8, 0x00, 0x29, + 0x01, 0xd1, 0x32, 0x1c, 0x3c, 0x00, 0x78, 0x96, + 0x00, 0x00, 0x04, 0xe0, 0x70, 0x43, 0x80, 0x19, + 0x05, 0x06, 0x2d, 0x0e, 0x32, 0x1c, 0xe0, 0x79, + 0x29, 0x1c, 0x00, 0xf0, 0xf2, 0xf9, 0x20, 0x7a, + 0x2f, 0x49, 0xc0, 0x07, 0xc0, 0x0f, 0x08, 0x60, + 0x2e, 0x48, 0x00, 0x78, 0xc0, 0x07, 0x43, 0xd5, + 0xa1, 0x79, 0x2c, 0x4a, 0xc8, 0x07, 0x48, 0xd4, + 0x2c, 0x4e, 0x16, 0x60, 0x8b, 0x07, 0x2b, 0x48, + 0x08, 0xd5, 0xcc, 0x08, 0x01, 0x23, 0x3c, 0x00, + 0xb4, 0x96, 0x00, 0x00, 0xa3, 0x40, 0x03, 0x60, + 0x49, 0x07, 0x04, 0xd5, 0x28, 0x49, 0x11, 0x60, + 0x01, 0xe0, 0x40, 0x21, 0x01, 0x60, 0x13, 0x68, + 0x26, 0x4a, 0xb3, 0x42, 0x10, 0xd1, 0x54, 0x68, + 0x01, 0x68, 0x0c, 0x43, 0x54, 0x60, 0x14, 0x68, + 0x0c, 0x40, 0x01, 0xd0, 0x51, 0x61, 0x00, 0xe0, + 0x91, 0x61, 0x54, 0x68, 0x0c, 0x43, 0x54, 0x60, + 0x94, 0x68, 0x21, 0x43, 0x91, 0x60, 0x13, 0xe0, + 0x3c, 0x00, 0xf0, 0x96, 0x00, 0x00, 0x54, 0x7c, + 0x01, 0x68, 0x0c, 0x43, 0x54, 0x74, 0x14, 0x7c, + 0x0c, 0x40, 0x03, 0xd0, 0x14, 0x7c, 0x0c, 0x43, + 0x14, 0x74, 0x02, 0xe0, 0x14, 0x7c, 0x8c, 0x43, + 0x14, 0x74, 0x54, 0x7c, 0x0c, 0x43, 0x54, 0x74, + 0x94, 0x7c, 0x21, 0x43, 0x91, 0x74, 0xb3, 0x42, + 0x05, 0xd1, 0x00, 0x22, 0x01, 0x68, 0x03, 0x20, + 0xff, 0xf7, 0x8d, 0xf8, 0x09, 0xe0, 0x00, 0x68, + 0x00, 0x21, 0x3c, 0x00, 0x2c, 0x97, 0x00, 0x00, + 0x02, 0x06, 0x12, 0x0e, 0x03, 0x20, 0xff, 0xf7, + 0x85, 0xf8, 0x01, 0xe0, 0x0b, 0x48, 0x10, 0x60, + 0x00, 0x20, 0x38, 0x71, 0x7d, 0x71, 0xf7, 0xf7, + 0xe9, 0xfd, 0x01, 0x20, 0xf8, 0xbd, 0x00, 0x00, + 0xcc, 0x5c, 0x01, 0x00, 0x04, 0x00, 0x07, 0x00, + 0x5c, 0x5b, 0x01, 0x00, 0xb9, 0x9b, 0x00, 0x00, + 0x58, 0x5b, 0x01, 0x00, 0x95, 0x9b, 0x00, 0x00, + 0x10, 0x00, 0x07, 0x00, 0x3c, 0x00, 0x68, 0x97, + 0x00, 0x00, 0x55, 0x9b, 0x00, 0x00, 0xb0, 0xb5, + 0x0d, 0x1c, 0x04, 0x30, 0x00, 0x24, 0xfe, 0xf7, + 0xd6, 0xfa, 0x01, 0x20, 0x6c, 0x60, 0xb0, 0xbd, + 0x00, 0x00, 0xf0, 0xb5, 0x07, 0x7a, 0x43, 0x68, + 0x04, 0x1c, 0x0e, 0x48, 0x0e, 0x1c, 0x00, 0x68, + 0x01, 0x25, 0x01, 0x1c, 0x9b, 0xb0, 0x06, 0xe0, + 0x4a, 0x68, 0x9a, 0x42, 0x02, 0xd1, 0x8f, 0x76, + 0x00, 0x25, 0x02, 0xe0, 0x09, 0x68, 0x3c, 0x00, + 0xa4, 0x97, 0x00, 0x00, 0x00, 0x29, 0xf6, 0xd1, + 0x00, 0x2d, 0x05, 0xd1, 0x21, 0x7a, 0x01, 0x29, + 0x02, 0xd1, 0x01, 0xa9, 0xf8, 0xf7, 0xa8, 0xf8, + 0x60, 0x68, 0x04, 0x36, 0x21, 0xc6, 0x1b, 0xb0, + 0x01, 0x20, 0xf0, 0xbd, 0xa4, 0x6e, 0x01, 0x00, + 0x10, 0xb5, 0x0c, 0x1c, 0x08, 0xf0, 0xae, 0xfc, + 0x60, 0x60, 0x01, 0x20, 0x10, 0xbd, 0x00, 0x00, + 0x10, 0xb5, 0x0c, 0x1c, 0x07, 0xf0, 0x84, 0xfa, + 0x3c, 0x00, 0xe0, 0x97, 0x00, 0x00, 0x04, 0xf0, + 0x54, 0xff, 0x00, 0x20, 0x60, 0x60, 0x01, 0x20, + 0x10, 0xbd, 0x00, 0x20, 0xc0, 0x43, 0x48, 0x60, + 0x01, 0x20, 0x70, 0x47, 0x00, 0x00, 0x10, 0xb5, + 0x0c, 0x1c, 0x00, 0x79, 0xfa, 0xf7, 0x07, 0xf8, + 0x00, 0x28, 0x01, 0xd0, 0x00, 0x20, 0x00, 0xe0, + 0x02, 0x20, 0x60, 0x60, 0x01, 0x20, 0x10, 0xbd, + 0x00, 0x00, 0x1c, 0xb5, 0x06, 0x4c, 0x20, 0x68, + 0x00, 0x28, 0x3c, 0x00, 0x1c, 0x98, 0x00, 0x00, + 0x07, 0xd0, 0x09, 0xf0, 0xc5, 0xfa, 0x01, 0x90, + 0x20, 0x68, 0x41, 0x68, 0x68, 0x46, 0xf6, 0xf7, + 0xd6, 0xfd, 0x1c, 0xbd, 0xac, 0x79, 0x01, 0x00, + 0x01, 0x49, 0x08, 0x60, 0x70, 0x47, 0x00, 0x00, + 0xac, 0x79, 0x01, 0x00, 0x0e, 0xb5, 0x06, 0x4b, + 0x1b, 0x68, 0x00, 0x2b, 0x06, 0xd0, 0x02, 0x90, + 0x00, 0x91, 0x01, 0x92, 0x68, 0x46, 0xd9, 0x68, + 0xf6, 0xf7, 0xc1, 0xfd, 0x3c, 0x00, 0x58, 0x98, + 0x00, 0x00, 0x0e, 0xbd, 0x00, 0x00, 0xac, 0x79, + 0x01, 0x00, 0x1c, 0xb5, 0x04, 0x1c, 0x07, 0xf0, + 0x4c, 0xfa, 0x06, 0x48, 0x41, 0x68, 0x01, 0x31, + 0x41, 0x60, 0x00, 0x94, 0x00, 0x21, 0x01, 0x91, + 0x00, 0x68, 0x01, 0x68, 0x68, 0x46, 0xf6, 0xf7, + 0xad, 0xfd, 0x1c, 0xbd, 0x00, 0x00, 0xac, 0x79, + 0x01, 0x00, 0x80, 0xb5, 0xf8, 0xf7, 0xa3, 0xf8, + 0x80, 0xbd, 0x80, 0xb5, 0x02, 0x1c, 0x3c, 0x00, + 0x94, 0x98, 0x00, 0x00, 0x80, 0x21, 0x03, 0x20, + 0x00, 0xf0, 0x5c, 0xf8, 0x01, 0x1c, 0x03, 0x48, + 0x00, 0x22, 0x43, 0x69, 0xf6, 0xf7, 0x9b, 0xfd, + 0x80, 0xbd, 0x00, 0x00, 0xa4, 0x6d, 0x01, 0x00, + 0xf8, 0xb5, 0x0c, 0x1c, 0x13, 0x49, 0x05, 0x1c, + 0x08, 0x68, 0x16, 0x1c, 0x01, 0x30, 0x08, 0x60, + 0x00, 0x20, 0x20, 0x61, 0x22, 0x1c, 0x10, 0x32, + 0x28, 0x1d, 0x00, 0x21, 0x07, 0x1c, 0x00, 0x92, + 0x3c, 0x00, 0xd0, 0x98, 0x00, 0x00, 0x03, 0xf0, + 0xde, 0xfe, 0x20, 0x71, 0x20, 0x69, 0x00, 0x28, + 0x10, 0xd0, 0x01, 0x04, 0x09, 0x0c, 0x00, 0x20, + 0xf7, 0xf7, 0x79, 0xfe, 0x30, 0x60, 0x29, 0x1d, + 0x03, 0xc9, 0xa0, 0x60, 0xe1, 0x60, 0x30, 0x68, + 0x01, 0x68, 0x00, 0x9a, 0x38, 0x1c, 0x03, 0xf0, + 0xca, 0xfe, 0x20, 0x71, 0x01, 0x20, 0xf8, 0xbd, + 0x00, 0x00, 0x10, 0x75, 0x01, 0x00, 0x80, 0xb5, + 0x02, 0x1c, 0x3c, 0x00, 0x0c, 0x99, 0x00, 0x00, + 0x08, 0x21, 0x04, 0x20, 0x09, 0xf0, 0x4e, 0xff, + 0x03, 0x20, 0x80, 0xbd, 0x10, 0xb5, 0x07, 0x4a, + 0x0c, 0x1c, 0x51, 0x68, 0x01, 0x31, 0x51, 0x60, + 0x01, 0x1c, 0x10, 0x31, 0xc2, 0x68, 0x04, 0x30, + 0x03, 0xf0, 0xf0, 0xfe, 0x20, 0x71, 0x00, 0x20, + 0x10, 0xbd, 0x00, 0x00, 0x10, 0x75, 0x01, 0x00, + 0x04, 0x49, 0x80, 0xb5, 0x81, 0x61, 0x08, 0x21, + 0x02, 0x1c, 0x03, 0x20, 0x3c, 0x00, 0x48, 0x99, + 0x00, 0x00, 0x09, 0xf0, 0x32, 0xff, 0x03, 0x20, + 0x80, 0xbd, 0x95, 0xd8, 0x00, 0x00, 0xf7, 0xb5, + 0x07, 0x1c, 0x16, 0x1c, 0x06, 0x21, 0x00, 0x20, + 0x82, 0xb0, 0xf7, 0xf7, 0x3a, 0xfe, 0x05, 0x1c, + 0x20, 0x48, 0x00, 0x78, 0x06, 0x28, 0x00, 0xd9, + 0x28, 0x81, 0x2c, 0x68, 0x00, 0x20, 0xa7, 0x70, + 0x03, 0x99, 0xe1, 0x70, 0x31, 0x1c, 0x03, 0xe0, + 0x0a, 0x89, 0x10, 0x18, 0x0f, 0x1c, 0x3c, 0x00, + 0x84, 0x99, 0x00, 0x00, 0xc9, 0x68, 0x00, 0x29, + 0xf9, 0xd1, 0x6b, 0x46, 0x01, 0xaa, 0x21, 0x1d, + 0x00, 0xf0, 0x34, 0xf8, 0x00, 0xab, 0x18, 0x78, + 0x60, 0x71, 0x18, 0x78, 0x00, 0x28, 0x17, 0xd0, + 0x11, 0x48, 0x40, 0x68, 0x00, 0x28, 0x08, 0xd0, + 0x19, 0x78, 0x00, 0x20, 0xf7, 0xf7, 0x14, 0xfe, + 0x01, 0x1c, 0x38, 0x1c, 0xf7, 0xf7, 0x30, 0xfd, + 0x0a, 0xe0, 0x38, 0x68, 0x00, 0x28, 0x02, 0xd1, + 0x3c, 0x00, 0xc0, 0x99, 0x00, 0x00, 0x3f, 0x60, + 0x01, 0x20, 0xb8, 0x61, 0x00, 0xab, 0x19, 0x78, + 0x38, 0x89, 0x40, 0x18, 0x38, 0x81, 0x00, 0xab, + 0x98, 0x88, 0x31, 0x1c, 0x02, 0x38, 0x20, 0x80, + 0x28, 0x1c, 0xf7, 0xf7, 0x1c, 0xfd, 0x28, 0x1c, + 0x05, 0xb0, 0xf0, 0xbd, 0x00, 0x00, 0xc8, 0x5c, + 0x01, 0x00, 0x01, 0x79, 0x42, 0x79, 0x00, 0x88, + 0x89, 0x18, 0x02, 0x39, 0x40, 0x1a, 0x70, 0x47, + 0x00, 0x00, 0x3c, 0x00, 0xfc, 0x99, 0x00, 0x00, + 0x70, 0xb5, 0x08, 0x4d, 0x2c, 0x78, 0xad, 0x78, + 0x20, 0x18, 0x06, 0x1c, 0x00, 0x2d, 0x03, 0xd0, + 0x70, 0x19, 0x01, 0x38, 0x01, 0x3d, 0xa8, 0x43, + 0x10, 0x80, 0x80, 0x1b, 0x18, 0x70, 0x0c, 0x70, + 0x70, 0xbd, 0x00, 0x00, 0xc8, 0x5c, 0x01, 0x00, + 0xb0, 0xb5, 0x04, 0x68, 0x0c, 0x4a, 0x21, 0x88, + 0x52, 0x78, 0x02, 0x31, 0x91, 0x42, 0x11, 0xd2, + 0x55, 0x1a, 0xf7, 0xf7, 0x3c, 0x00, 0x38, 0x9a, + 0x00, 0x00, 0xc9, 0xfd, 0x01, 0x68, 0x00, 0x29, + 0x02, 0xd1, 0x00, 0x60, 0x01, 0x21, 0x81, 0x61, + 0x01, 0x89, 0x49, 0x19, 0x01, 0x81, 0x20, 0x88, + 0x40, 0x19, 0x20, 0x80, 0x60, 0x79, 0x40, 0x19, + 0x60, 0x71, 0xb0, 0xbd, 0x00, 0x00, 0xc8, 0x5c, + 0x01, 0x00, 0x80, 0xb5, 0x00, 0x22, 0x06, 0x21, + 0xf1, 0x20, 0x09, 0xf0, 0xa2, 0xfe, 0x80, 0xbd, + 0x00, 0x00, 0x03, 0x1c, 0x02, 0x48, 0x3c, 0x00, + 0x74, 0x9a, 0x00, 0x00, 0x03, 0x70, 0x41, 0x70, + 0x82, 0x70, 0x70, 0x47, 0xc8, 0x5c, 0x01, 0x00, + 0xb0, 0xb5, 0x08, 0x1c, 0x09, 0x68, 0x15, 0x1c, + 0x8c, 0x78, 0xf7, 0xf7, 0x85, 0xfd, 0x04, 0x49, + 0xa0, 0x00, 0x09, 0x58, 0x00, 0x29, 0x02, 0xd0, + 0x28, 0x1c, 0xf6, 0xf7, 0x9e, 0xfc, 0xb0, 0xbd, + 0x84, 0x6d, 0x01, 0x00, 0xfe, 0xb5, 0x04, 0x1c, + 0xc0, 0x7a, 0xa1, 0x7a, 0xc6, 0x07, 0xf6, 0x0f, + 0x3c, 0x00, 0xb0, 0x9a, 0x00, 0x00, 0x32, 0x1c, + 0x20, 0x1d, 0x01, 0xf0, 0x3c, 0xf8, 0x60, 0x69, + 0x25, 0x4f, 0xc1, 0x07, 0x37, 0xd5, 0xb8, 0x69, + 0x00, 0x28, 0x01, 0xd0, 0xf6, 0xf7, 0x87, 0xfc, + 0x20, 0x68, 0x05, 0x68, 0x28, 0x88, 0x80, 0x07, + 0x34, 0xd1, 0x01, 0xaa, 0x02, 0xa9, 0x28, 0x1c, + 0x01, 0xf0, 0x0b, 0xfc, 0x28, 0x1c, 0x01, 0xf0, + 0x12, 0xfc, 0x00, 0x78, 0xc0, 0x07, 0x0a, 0xd4, + 0x60, 0x69, 0x3c, 0x00, 0xec, 0x9a, 0x00, 0x00, + 0x80, 0x07, 0x26, 0xd4, 0x33, 0x1c, 0x29, 0x1c, + 0xa2, 0x7a, 0x20, 0x69, 0x7d, 0x69, 0xf6, 0xf7, + 0x72, 0xfc, 0x1e, 0xe0, 0x00, 0xab, 0x18, 0x7a, + 0x00, 0x28, 0x03, 0xd0, 0x01, 0x28, 0x06, 0xd0, + 0x02, 0x28, 0x16, 0xd1, 0x28, 0x1c, 0x79, 0x6a, + 0xf6, 0xf7, 0x61, 0xfc, 0x11, 0xe0, 0x00, 0xab, + 0x18, 0x79, 0x0e, 0x28, 0x01, 0xd0, 0x0f, 0x28, + 0x0b, 0xd1, 0x28, 0x1c, 0x3c, 0x00, 0x28, 0x9b, + 0x00, 0x00, 0x39, 0x6a, 0xf6, 0xf7, 0x56, 0xfc, + 0x06, 0xe0, 0x00, 0x07, 0x80, 0x0f, 0x03, 0xd1, + 0x20, 0x69, 0xf9, 0x69, 0xf6, 0xf7, 0x4e, 0xfc, + 0x78, 0x6b, 0x21, 0x21, 0x01, 0x30, 0x78, 0x63, + 0x22, 0x1c, 0x80, 0x20, 0x09, 0xf0, 0x31, 0xfe, + 0xfe, 0xbd, 0x28, 0x7a, 0x01, 0x00, 0x0b, 0x49, + 0x18, 0xb5, 0x08, 0x78, 0xc0, 0x07, 0x11, 0xd5, + 0x0a, 0x4a, 0x10, 0x1c, 0x20, 0x30, 0x3c, 0x00, + 0x64, 0x9b, 0x00, 0x00, 0x84, 0x79, 0x00, 0xab, + 0x1c, 0x70, 0xc0, 0x79, 0x58, 0x70, 0x08, 0x78, + 0x40, 0x23, 0x18, 0x43, 0x08, 0x70, 0x05, 0x48, + 0x00, 0x78, 0x08, 0x70, 0x00, 0xab, 0x18, 0x88, + 0xd0, 0x84, 0x18, 0xbd, 0x04, 0x00, 0x07, 0x00, + 0x00, 0x10, 0x07, 0x00, 0xe0, 0x60, 0x01, 0x00, + 0x70, 0x47, 0x00, 0x00, 0x05, 0x49, 0x10, 0xb5, + 0x88, 0x79, 0x05, 0x4b, 0x1a, 0x7c, 0x05, 0x4c, + 0x3c, 0x00, 0xa0, 0x9b, 0x00, 0x00, 0x24, 0x68, + 0x62, 0x40, 0x1a, 0x74, 0x88, 0x71, 0x10, 0xbd, + 0x00, 0x00, 0x20, 0x10, 0x07, 0x00, 0x10, 0x00, + 0x07, 0x00, 0x58, 0x5b, 0x01, 0x00, 0x04, 0x49, + 0x0a, 0x68, 0x04, 0x48, 0x00, 0x68, 0x02, 0x40, + 0x01, 0xd0, 0x88, 0x61, 0x70, 0x47, 0x48, 0x61, + 0x70, 0x47, 0x10, 0x00, 0x07, 0x00, 0x58, 0x5b, + 0x01, 0x00, 0x02, 0x1c, 0x01, 0x20, 0x00, 0x06, + 0x08, 0x43, 0x3c, 0x00, 0xdc, 0x9b, 0x00, 0x00, + 0x80, 0xb5, 0x2a, 0x21, 0x09, 0xf0, 0xe6, 0xfd, + 0x80, 0xbd, 0x00, 0x00, 0x10, 0xb5, 0x04, 0x1c, + 0x00, 0x29, 0x03, 0xd0, 0x81, 0x29, 0x07, 0xd1, + 0x81, 0x20, 0x00, 0xe0, 0x80, 0x20, 0x22, 0x1c, + 0x2c, 0x21, 0x09, 0xf0, 0xd7, 0xfd, 0x10, 0xbd, + 0x02, 0x21, 0x2c, 0x20, 0xf7, 0xf7, 0x4c, 0xfb, + 0x20, 0x1c, 0xf7, 0xf7, 0xc3, 0xfc, 0x10, 0xbd, + 0x80, 0xb5, 0xb4, 0xb0, 0x3c, 0x00, 0x18, 0x9c, + 0x00, 0x00, 0x01, 0x28, 0x06, 0xd0, 0x82, 0x28, + 0x1c, 0xd1, 0x1a, 0xa8, 0x07, 0xf0, 0x35, 0xfc, + 0x34, 0xb0, 0x80, 0xbd, 0x81, 0x29, 0x13, 0xd1, + 0x0d, 0x48, 0x0c, 0x4a, 0x81, 0x69, 0x00, 0x68, + 0x50, 0x32, 0x81, 0x42, 0x02, 0xd0, 0xd1, 0x6a, + 0x01, 0x29, 0x02, 0xd0, 0x11, 0x78, 0x02, 0x29, + 0x02, 0xd1, 0x07, 0xf0, 0x0a, 0xf9, 0xeb, 0xe7, + 0x69, 0x46, 0xf7, 0xf7, 0x5a, 0xfe, 0x3c, 0x00, + 0x54, 0x9c, 0x00, 0x00, 0xe7, 0xe7, 0x01, 0x21, + 0x00, 0xe0, 0x02, 0x21, 0x18, 0x20, 0xf7, 0xf7, + 0x21, 0xfb, 0xe0, 0xe7, 0xa4, 0x6e, 0x01, 0x00, + 0xb0, 0xb5, 0x04, 0x1c, 0x00, 0x68, 0x17, 0x4d, + 0x9a, 0xb0, 0x68, 0x63, 0x08, 0xf0, 0x3e, 0xfa, + 0x20, 0x79, 0x14, 0x49, 0x13, 0x4a, 0x50, 0x39, + 0x2c, 0x3a, 0x02, 0x28, 0x0a, 0xd1, 0x90, 0x68, + 0x80, 0x02, 0xa8, 0x61, 0xc8, 0x68, 0xe8, 0x61, + 0x3c, 0x00, 0x90, 0x9c, 0x00, 0x00, 0x02, 0x20, + 0x28, 0x72, 0x07, 0xf0, 0xe4, 0xf8, 0x1a, 0xb0, + 0xb0, 0xbd, 0x03, 0x1c, 0x00, 0x20, 0x00, 0x2b, + 0x0b, 0xd1, 0x52, 0x68, 0x92, 0x02, 0xaa, 0x61, + 0x0a, 0x1c, 0x89, 0x68, 0xe9, 0x61, 0x28, 0x72, + 0x10, 0x68, 0x69, 0x46, 0xf7, 0xf7, 0x27, 0xfe, + 0xed, 0xe7, 0xa8, 0x61, 0x01, 0x20, 0x28, 0x72, + 0x28, 0x70, 0x00, 0x20, 0x06, 0xf0, 0x7d, 0xfa, + 0xe5, 0xe7, 0x3c, 0x00, 0xcc, 0x9c, 0x00, 0x00, + 0xf4, 0x6e, 0x01, 0x00, 0x70, 0x47, 0x00, 0x00, + 0x70, 0x47, 0x00, 0x00, 0x80, 0xb5, 0x01, 0x21, + 0x07, 0x20, 0xf7, 0xf7, 0xe1, 0xfa, 0x80, 0xbd, + 0x70, 0x47, 0x00, 0x00, 0xf8, 0xb5, 0x00, 0x24, + 0x19, 0x4a, 0x00, 0x26, 0xd5, 0x68, 0x11, 0x68, + 0x04, 0x35, 0x08, 0x1c, 0x91, 0x60, 0x02, 0xe0, + 0x01, 0x1c, 0x40, 0x19, 0x08, 0x60, 0x53, 0x68, + 0x83, 0x42, 0xf9, 0xd8, 0x3c, 0x00, 0x08, 0x9d, + 0x00, 0x00, 0x01, 0x34, 0x10, 0x32, 0x03, 0x2c, + 0x0e, 0x60, 0xee, 0xd3, 0xf6, 0xf7, 0xf1, 0xff, + 0x10, 0x48, 0x10, 0x49, 0x12, 0x4c, 0x08, 0x60, + 0x10, 0x49, 0x00, 0x20, 0x01, 0x22, 0x19, 0x23, + 0x5b, 0x01, 0x0c, 0x25, 0x43, 0x43, 0x1b, 0x19, + 0x45, 0x43, 0x4a, 0x51, 0x1f, 0x1c, 0x6d, 0x18, + 0xab, 0x60, 0x6b, 0x60, 0x00, 0x25, 0x1e, 0x1c, + 0x14, 0x36, 0x9e, 0x60, 0x33, 0x1c, 0x3c, 0x00, + 0x44, 0x9d, 0x00, 0x00, 0x01, 0x35, 0x27, 0x2d, + 0xf8, 0xdb, 0x01, 0x30, 0x03, 0x28, 0x9f, 0x60, + 0xe8, 0xdb, 0xf8, 0xbd, 0x20, 0x57, 0x01, 0x00, + 0x14, 0xc8, 0x01, 0x00, 0xb4, 0xcf, 0x01, 0x00, + 0x18, 0xd9, 0x01, 0x00, 0xb8, 0xcf, 0x01, 0x00, + 0xb0, 0xb5, 0x07, 0x4c, 0x25, 0x1c, 0xc0, 0x35, + 0x28, 0x6b, 0x1e, 0x21, 0x00, 0xf0, 0xf2, 0xf9, + 0xa2, 0x6b, 0x20, 0x1c, 0xdc, 0x30, 0x29, 0x6b, + 0x3c, 0x00, 0x80, 0x9d, 0x00, 0x00, 0x00, 0xf0, + 0xb6, 0xf9, 0xb0, 0xbd, 0x00, 0x00, 0xc4, 0x69, + 0x01, 0x00, 0x00, 0x20, 0x10, 0x22, 0x10, 0xb5, + 0x0a, 0x49, 0x05, 0xe0, 0x0c, 0x23, 0x43, 0x43, + 0x5c, 0x18, 0x0c, 0x34, 0xcc, 0x50, 0x01, 0x30, + 0x0f, 0x28, 0xf7, 0xd3, 0x0c, 0x23, 0x58, 0x43, + 0x09, 0x50, 0x04, 0x48, 0x41, 0x60, 0x01, 0x60, + 0x02, 0x82, 0x00, 0x21, 0x81, 0x60, 0xc1, 0x60, + 0x10, 0xbd, 0x3c, 0x00, 0xbc, 0x9d, 0x00, 0x00, + 0x84, 0xe2, 0x01, 0x00, 0x44, 0xe3, 0x01, 0x00, + 0x10, 0xb5, 0x08, 0x4c, 0xa0, 0x6a, 0x00, 0x28, + 0x03, 0xd1, 0x07, 0x48, 0xf9, 0xf7, 0xe8, 0xfe, + 0xa0, 0x62, 0x04, 0x48, 0x44, 0x30, 0x00, 0x68, + 0x01, 0x21, 0xf9, 0xf7, 0x95, 0xfc, 0x60, 0x62, + 0x10, 0xbd, 0x00, 0x00, 0x60, 0x6c, 0x01, 0x00, + 0xcd, 0x26, 0x01, 0x00, 0xff, 0xb5, 0x0d, 0x1c, + 0x04, 0x1c, 0x1e, 0x1c, 0x3c, 0x00, 0xf8, 0x9d, + 0x00, 0x00, 0x81, 0xb0, 0x0a, 0x9f, 0x1c, 0x21, + 0xf6, 0xf7, 0x4d, 0xfb, 0x03, 0x98, 0xa0, 0x61, + 0x25, 0x60, 0x25, 0x61, 0x26, 0x81, 0xa6, 0x82, + 0xe7, 0x60, 0x05, 0xb0, 0xf0, 0xbd, 0x70, 0xb5, + 0x0d, 0x1c, 0xa4, 0x21, 0x04, 0x1c, 0x08, 0x30, + 0xf6, 0xf7, 0x3d, 0xfb, 0x20, 0x1c, 0x44, 0x30, + 0x06, 0x22, 0x29, 0x1c, 0xf6, 0xf7, 0x65, 0xfb, + 0x18, 0x48, 0x3c, 0x23, 0x41, 0x1c, 0x3c, 0x00, + 0x34, 0x9e, 0x00, 0x00, 0x61, 0x62, 0x41, 0x78, + 0x59, 0x43, 0x09, 0x18, 0x89, 0x7a, 0x06, 0x29, + 0x01, 0xd1, 0xa0, 0x62, 0x02, 0xe0, 0x21, 0x1c, + 0x4d, 0x31, 0xa1, 0x62, 0x41, 0x78, 0x3c, 0x23, + 0x59, 0x43, 0x08, 0x18, 0x04, 0x30, 0x0f, 0x49, + 0x20, 0x62, 0x0b, 0x88, 0x00, 0x2b, 0x15, 0xd0, + 0xac, 0x20, 0x00, 0x5d, 0x0b, 0x4a, 0x18, 0x32, + 0x00, 0x02, 0x80, 0x18, 0xb0, 0x30, 0xe0, 0x60, + 0x3c, 0x00, 0x70, 0x9e, 0x00, 0x00, 0x8d, 0x68, + 0x00, 0x20, 0x08, 0xe0, 0xe2, 0x68, 0xc1, 0x00, + 0x54, 0x50, 0xe6, 0x68, 0x82, 0x00, 0x52, 0x19, + 0x71, 0x18, 0x4a, 0x60, 0x01, 0x30, 0x98, 0x42, + 0xf4, 0xdb, 0x70, 0xbd, 0x00, 0x00, 0x68, 0x61, + 0x01, 0x00, 0x58, 0x75, 0x01, 0x00, 0x1f, 0xb5, + 0x04, 0x1c, 0x60, 0x34, 0x61, 0x7a, 0x03, 0x1c, + 0x80, 0x6a, 0x08, 0x4a, 0x02, 0x91, 0x01, 0x90, + 0x03, 0x92, 0x3c, 0x00, 0xac, 0x9e, 0x00, 0x00, + 0xe2, 0x79, 0x18, 0x1c, 0x20, 0x30, 0x00, 0x92, + 0x44, 0x7b, 0x82, 0x7b, 0x5e, 0x20, 0xc1, 0x5a, + 0x18, 0x69, 0x04, 0x30, 0x23, 0x1c, 0x02, 0xf0, + 0x7f, 0xfe, 0x1f, 0xbd, 0x39, 0x4e, 0x00, 0x00, + 0xb0, 0xb5, 0x0b, 0x1c, 0x01, 0x88, 0x69, 0x20, + 0xc0, 0x5c, 0x86, 0xb0, 0x0e, 0x4a, 0x04, 0x91, + 0x03, 0x90, 0x05, 0x92, 0x0d, 0x4d, 0x59, 0x6a, + 0x9a, 0x6a, 0x2d, 0x68, 0x3c, 0x00, 0xe8, 0x9e, + 0x00, 0x00, 0x01, 0x24, 0x00, 0x2d, 0x00, 0xd0, + 0x04, 0x1c, 0x0a, 0x48, 0x00, 0x5d, 0x01, 0x91, + 0x02, 0x92, 0x00, 0x90, 0x18, 0x1c, 0x20, 0x30, + 0x44, 0x7b, 0x82, 0x7b, 0x5e, 0x20, 0xc1, 0x5a, + 0x18, 0x69, 0x04, 0x30, 0x23, 0x1c, 0x02, 0xf0, + 0xa4, 0xfe, 0x06, 0xb0, 0xb0, 0xbd, 0x51, 0x4f, + 0x00, 0x00, 0x18, 0x67, 0x01, 0x00, 0x0a, 0x61, + 0x01, 0x00, 0x01, 0x89, 0x8a, 0x1c, 0x3c, 0x00, + 0x24, 0x9f, 0x00, 0x00, 0x02, 0x81, 0x02, 0x68, + 0x02, 0x3a, 0x02, 0x60, 0x08, 0x0a, 0x09, 0x02, + 0x08, 0x43, 0x10, 0x80, 0x70, 0x47, 0x00, 0x00, + 0x70, 0xb5, 0x05, 0x1c, 0x08, 0x78, 0x0e, 0x1c, + 0xff, 0x28, 0x14, 0xd0, 0x71, 0x78, 0x02, 0x31, + 0x00, 0x20, 0xf7, 0xf7, 0x45, 0xfb, 0x04, 0x1c, + 0x02, 0x89, 0x00, 0x68, 0x31, 0x1c, 0xf6, 0xf7, + 0xcf, 0xfa, 0x00, 0x2d, 0x06, 0xd0, 0x28, 0x1c, + 0x3c, 0x00, 0x60, 0x9f, 0x00, 0x00, 0xf7, 0xf7, + 0x34, 0xfb, 0x21, 0x1c, 0xf7, 0xf7, 0x57, 0xfa, + 0x00, 0xe0, 0x25, 0x1c, 0x28, 0x1c, 0x70, 0xbd, + 0x00, 0x00, 0xff, 0xb5, 0x0f, 0x1c, 0x1e, 0x1c, + 0x04, 0x1c, 0x98, 0x1c, 0x01, 0x04, 0x09, 0x0c, + 0x00, 0x20, 0x81, 0xb0, 0xf7, 0xf7, 0x27, 0xfb, + 0x05, 0x1c, 0x00, 0x68, 0x00, 0x2c, 0x38, 0x60, + 0x03, 0x99, 0x01, 0x70, 0x38, 0x68, 0x46, 0x70, + 0x06, 0xd0, 0x3c, 0x00, 0x9c, 0x9f, 0x00, 0x00, + 0x20, 0x1c, 0xf7, 0xf7, 0x15, 0xfb, 0x29, 0x1c, + 0xf7, 0xf7, 0x38, 0xfa, 0x00, 0xe0, 0x2c, 0x1c, + 0x20, 0x1c, 0x05, 0xb0, 0xf0, 0xbd, 0x00, 0x00, + 0x70, 0xb5, 0x10, 0x48, 0x04, 0x68, 0x04, 0x60, + 0x0f, 0x49, 0x20, 0x20, 0x08, 0x60, 0xa0, 0x05, + 0x0e, 0x4e, 0x02, 0xd5, 0x70, 0x6a, 0xf6, 0xf7, + 0x05, 0xfa, 0xe0, 0x01, 0x02, 0xd5, 0x30, 0x6e, + 0xf6, 0xf7, 0x00, 0xfa, 0x3c, 0x00, 0xd8, 0x9f, + 0x00, 0x00, 0x0a, 0x48, 0x04, 0x40, 0x00, 0x25, + 0x07, 0xe0, 0xe0, 0x07, 0x03, 0xd5, 0xa8, 0x00, + 0x30, 0x58, 0xf6, 0xf7, 0xf6, 0xf9, 0x01, 0x35, + 0x64, 0x08, 0x00, 0x2c, 0xf5, 0xd1, 0x70, 0xbd, + 0x00, 0x00, 0x00, 0x40, 0x07, 0x00, 0x00, 0x10, + 0x07, 0x00, 0x30, 0x74, 0x01, 0x00, 0xff, 0xfd, + 0xff, 0xfe, 0x80, 0xb5, 0x07, 0x21, 0x80, 0x20, + 0xf7, 0xf7, 0x49, 0xf9, 0x80, 0xbd, 0x3c, 0x00, + 0x14, 0xa0, 0x00, 0x00, 0xf8, 0xb5, 0x14, 0x4b, + 0x82, 0x00, 0x9c, 0x58, 0xca, 0x06, 0x01, 0x27, + 0x39, 0x1c, 0xd2, 0x0e, 0x91, 0x40, 0x11, 0x4a, + 0x11, 0x60, 0x11, 0x4e, 0x40, 0x00, 0x85, 0x19, + 0x15, 0xe0, 0x60, 0x60, 0x20, 0x7b, 0xc1, 0x00, + 0x89, 0x19, 0x10, 0x31, 0x0a, 0x78, 0x0d, 0x23, + 0x9a, 0x43, 0x0a, 0x70, 0x39, 0x1c, 0x81, 0x40, + 0x31, 0x73, 0x07, 0x49, 0x00, 0x01, 0x08, 0x31, + 0x3c, 0x00, 0x50, 0xa0, 0x00, 0x00, 0x40, 0x18, + 0x08, 0x4a, 0x41, 0x68, 0x42, 0x60, 0x80, 0x68, + 0xf6, 0xf7, 0xbe, 0xf9, 0x28, 0x7b, 0x00, 0x28, + 0xe6, 0xd1, 0xf8, 0xbd, 0x00, 0x00, 0xa4, 0x73, + 0x01, 0x00, 0x00, 0x10, 0x07, 0x00, 0x00, 0x60, + 0x07, 0x00, 0xd1, 0x75, 0x00, 0x00, 0x03, 0x49, + 0x01, 0x20, 0x09, 0x7a, 0x00, 0x29, 0x00, 0xd1, + 0x00, 0x20, 0x70, 0x47, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x3c, 0x00, 0x8c, 0xa0, 0x00, 0x00, + 0x03, 0x49, 0x01, 0x20, 0x89, 0x7a, 0x00, 0x29, + 0x00, 0xd1, 0x00, 0x20, 0x70, 0x47, 0x00, 0x00, + 0x14, 0x7a, 0x01, 0x00, 0xb0, 0xb5, 0x00, 0x24, + 0xfa, 0xf7, 0x76, 0xfc, 0x00, 0x28, 0x14, 0xd0, + 0x01, 0x24, 0x08, 0xf0, 0x7d, 0xfe, 0x0a, 0x4d, + 0x0a, 0x4b, 0x00, 0x21, 0x5a, 0x18, 0xa0, 0x32, + 0x12, 0x78, 0x10, 0x2a, 0x06, 0xd3, 0x8a, 0x00, + 0xd2, 0x18, 0x92, 0x6f, 0x3c, 0x00, 0xc8, 0xa0, + 0x00, 0x00, 0x82, 0x1a, 0xaa, 0x42, 0x00, 0xd2, + 0x00, 0x24, 0x01, 0x31, 0x03, 0x29, 0xf0, 0xd3, + 0x20, 0x1c, 0xb0, 0xbd, 0x00, 0x00, 0x8b, 0x08, + 0x00, 0x00, 0xa4, 0x6c, 0x01, 0x00, 0x01, 0x48, + 0xc0, 0x68, 0x70, 0x47, 0x00, 0x00, 0x78, 0x69, + 0x01, 0x00, 0x70, 0xb5, 0x0d, 0x1c, 0x04, 0x1c, + 0x16, 0x1c, 0xfd, 0xf7, 0x2e, 0xfe, 0x00, 0x20, + 0xe0, 0x60, 0x26, 0x61, 0xa5, 0x60, 0x3c, 0x00, + 0x04, 0xa1, 0x00, 0x00, 0x70, 0xbd, 0x00, 0x00, + 0xf8, 0xb5, 0x17, 0x1c, 0x0e, 0x1c, 0x04, 0x1c, + 0x00, 0x28, 0x01, 0xd0, 0x00, 0x2e, 0x01, 0xd1, + 0xf7, 0xf7, 0xf2, 0xf8, 0xa0, 0x68, 0x07, 0xf0, + 0x49, 0xf9, 0x05, 0x1c, 0x01, 0xd1, 0xf7, 0xf7, + 0xeb, 0xf8, 0x29, 0x1c, 0x6e, 0x60, 0xaf, 0x60, + 0x20, 0x1c, 0xfd, 0xf7, 0xfd, 0xfd, 0xe0, 0x68, + 0x41, 0x1c, 0xe1, 0x60, 0x00, 0x28, 0x03, 0xd1, + 0x3c, 0x00, 0x40, 0xa1, 0x00, 0x00, 0x05, 0x48, + 0x21, 0x69, 0x05, 0xf0, 0x2c, 0xf9, 0x20, 0x68, + 0xa8, 0x42, 0x02, 0xd1, 0x38, 0x1c, 0xf6, 0xf7, + 0x48, 0xf9, 0xf8, 0xbd, 0x00, 0x00, 0xc4, 0x60, + 0x01, 0x00, 0x00, 0x22, 0x01, 0x39, 0x10, 0xb5, + 0x05, 0xe0, 0x0c, 0x23, 0x53, 0x43, 0x1c, 0x18, + 0x0c, 0x34, 0xc4, 0x50, 0x01, 0x32, 0x8a, 0x42, + 0xf7, 0xd3, 0x00, 0x21, 0x0c, 0x23, 0x5a, 0x43, + 0x81, 0x50, 0x3c, 0x00, 0x7c, 0xa1, 0x00, 0x00, + 0x10, 0xbd, 0x00, 0x00, 0xb0, 0xb5, 0x04, 0x1c, + 0x01, 0xd1, 0xf7, 0xf7, 0xbb, 0xf8, 0x20, 0x1c, + 0xfd, 0xf7, 0xda, 0xfd, 0x01, 0x1c, 0x85, 0x68, + 0xa0, 0x68, 0x07, 0xf0, 0x09, 0xf9, 0xe0, 0x68, + 0x01, 0x38, 0xe0, 0x60, 0x03, 0xd1, 0x06, 0x48, + 0x21, 0x69, 0x05, 0xf0, 0xe7, 0xf8, 0x21, 0x68, + 0x00, 0x29, 0x03, 0xd0, 0x88, 0x68, 0x49, 0x68, + 0xf6, 0xf7, 0x11, 0xf9, 0x3c, 0x00, 0xb8, 0xa1, + 0x00, 0x00, 0x28, 0x1c, 0xb0, 0xbd, 0xc4, 0x60, + 0x01, 0x00, 0x01, 0x21, 0x00, 0x28, 0x8c, 0xb5, + 0x00, 0xd1, 0x00, 0x21, 0x0e, 0x20, 0x09, 0xf0, + 0x32, 0xfa, 0x83, 0x20, 0x00, 0xab, 0x18, 0x80, + 0x00, 0x20, 0x04, 0xf0, 0x0c, 0xf8, 0x01, 0x90, + 0x68, 0x46, 0x03, 0xf0, 0x7a, 0xf9, 0x8c, 0xbd, + 0x00, 0x00, 0x80, 0xb5, 0x08, 0xf0, 0xdf, 0xfd, + 0x06, 0x49, 0x0a, 0x89, 0x06, 0x49, 0x3c, 0x00, + 0xf4, 0xa1, 0x00, 0x00, 0x09, 0x6e, 0x41, 0x1a, + 0x0b, 0x0c, 0x59, 0x18, 0x89, 0x1a, 0x09, 0x04, + 0x09, 0x0c, 0x40, 0x1a, 0x80, 0xbd, 0x00, 0x00, + 0x00, 0x90, 0x07, 0x00, 0xa4, 0x6c, 0x01, 0x00, + 0x70, 0xb5, 0x04, 0x1c, 0x88, 0x7e, 0x0d, 0x1c, + 0x20, 0x28, 0x03, 0xd9, 0x03, 0x21, 0x18, 0x20, + 0xf7, 0xf7, 0x40, 0xf8, 0x00, 0x26, 0x26, 0x76, + 0xa8, 0x7e, 0x29, 0x1c, 0x1b, 0x31, 0x60, 0x76, + 0x3c, 0x00, 0x30, 0xa2, 0x00, 0x00, 0x20, 0x1c, + 0x1d, 0x30, 0xaa, 0x7e, 0xf6, 0xf7, 0x5f, 0xf9, + 0x68, 0x68, 0x29, 0x1c, 0x60, 0x60, 0xa8, 0x68, + 0x13, 0x31, 0xa0, 0x60, 0xa8, 0x7b, 0x06, 0x22, + 0x20, 0x73, 0xe8, 0x7b, 0x60, 0x73, 0x28, 0x7c, + 0xa0, 0x73, 0x68, 0x7c, 0xe0, 0x73, 0xa8, 0x89, + 0x20, 0x82, 0xa8, 0x7c, 0xe0, 0x76, 0x26, 0x77, + 0x20, 0x1c, 0x12, 0x30, 0xa6, 0x76, 0xf6, 0xf7, + 0x46, 0xf9, 0x3c, 0x00, 0x6c, 0xa2, 0x00, 0x00, + 0x60, 0x68, 0x43, 0x1c, 0x1d, 0xd0, 0x11, 0x4d, + 0x6d, 0x61, 0x28, 0x68, 0x00, 0x28, 0x1a, 0xd0, + 0x22, 0x7b, 0x01, 0x1c, 0x0b, 0x7b, 0x9a, 0x42, + 0x01, 0xd3, 0x20, 0x60, 0x14, 0xe0, 0x0b, 0x1c, + 0x09, 0x68, 0x00, 0x29, 0x0b, 0xd0, 0x0e, 0x7b, + 0xb2, 0x42, 0x08, 0xd2, 0x0b, 0x68, 0x00, 0x2b, + 0xf0, 0xd0, 0x1e, 0x7b, 0xb2, 0x42, 0xed, 0xd3, + 0x23, 0x60, 0x0c, 0x60, 0x3c, 0x00, 0xa8, 0xa2, + 0x00, 0x00, 0x01, 0xe0, 0x21, 0x60, 0x1c, 0x60, + 0x00, 0x20, 0x70, 0xbd, 0x26, 0x60, 0x2c, 0x60, + 0xfa, 0xe7, 0xa4, 0x6e, 0x01, 0x00, 0x13, 0x4a, + 0xb0, 0xb5, 0x51, 0x68, 0x01, 0x24, 0x00, 0x29, + 0x1e, 0xd0, 0x13, 0x1d, 0xd1, 0x61, 0x13, 0x62, + 0x43, 0x68, 0x04, 0xe0, 0x10, 0x62, 0x00, 0x68, + 0xd0, 0x61, 0x00, 0x28, 0x14, 0xd0, 0xd0, 0x69, + 0x45, 0x68, 0x9d, 0x42, 0xf6, 0xd1, 0x3c, 0x00, + 0xe4, 0xa2, 0x00, 0x00, 0x10, 0x6a, 0x81, 0x42, + 0x04, 0xd1, 0x51, 0x60, 0xd0, 0x69, 0x00, 0x68, + 0x08, 0x60, 0x02, 0xe0, 0xd1, 0x69, 0x09, 0x68, + 0x01, 0x60, 0xd0, 0x69, 0xfc, 0xf7, 0xce, 0xff, + 0x00, 0x28, 0x00, 0xd0, 0x00, 0x24, 0x20, 0x1c, + 0xb0, 0xbd, 0x00, 0x00, 0xa4, 0x6e, 0x01, 0x00, + 0xb0, 0xb5, 0x17, 0x4d, 0x01, 0x24, 0x29, 0x68, + 0x00, 0x29, 0x27, 0xd0, 0x6d, 0x61, 0x29, 0x61, + 0x3c, 0x00, 0x20, 0xa3, 0x00, 0x00, 0x43, 0x68, + 0x04, 0xe0, 0x68, 0x61, 0x00, 0x68, 0x28, 0x61, + 0x00, 0x28, 0x1d, 0xd0, 0x28, 0x69, 0x42, 0x68, + 0x9a, 0x42, 0xf6, 0xd1, 0xaa, 0x69, 0x2b, 0x69, + 0x9a, 0x42, 0x00, 0xd1, 0xa9, 0x61, 0x6a, 0x69, + 0x91, 0x42, 0x03, 0xd1, 0x29, 0x60, 0x00, 0x68, + 0x08, 0x60, 0x06, 0xe0, 0x00, 0x68, 0x10, 0x60, + 0x28, 0x68, 0x00, 0x28, 0x01, 0xd1, 0x07, 0xf0, + 0xcc, 0xfe, 0x3c, 0x00, 0x5c, 0xa3, 0x00, 0x00, + 0x28, 0x69, 0xfc, 0xf7, 0x9d, 0xff, 0x00, 0x28, + 0x02, 0xd0, 0x00, 0x24, 0x00, 0xe0, 0x01, 0x24, + 0x20, 0x1c, 0xb0, 0xbd, 0xa4, 0x6e, 0x01, 0x00, + 0xb0, 0xb5, 0x05, 0x1c, 0x07, 0x48, 0x44, 0x68, + 0x07, 0xe0, 0x21, 0x1c, 0x44, 0x31, 0x28, 0x1c, + 0x00, 0xf0, 0xd6, 0xfc, 0x00, 0x28, 0x02, 0xd1, + 0x64, 0x68, 0x00, 0x2c, 0xf5, 0xd1, 0x20, 0x1c, + 0xb0, 0xbd, 0x00, 0x00, 0x3c, 0x00, 0x98, 0xa3, + 0x00, 0x00, 0x58, 0x75, 0x01, 0x00, 0x70, 0xb5, + 0x0d, 0x1c, 0x14, 0x1c, 0x00, 0x28, 0x0b, 0x4e, + 0x08, 0xd0, 0x70, 0x6e, 0x06, 0x23, 0x58, 0x43, + 0x02, 0x04, 0x12, 0x0c, 0x31, 0x1c, 0x28, 0x1c, + 0x22, 0x80, 0x07, 0xe0, 0x21, 0x88, 0x06, 0x20, + 0xf6, 0xf7, 0xa7, 0xf9, 0x70, 0x66, 0x22, 0x88, + 0x29, 0x1c, 0x30, 0x1c, 0xf6, 0xf7, 0x95, 0xf8, + 0x01, 0x20, 0x70, 0xbd, 0x00, 0x00, 0x3c, 0x00, + 0xd4, 0xa3, 0x00, 0x00, 0x10, 0x79, 0x01, 0x00, + 0x80, 0xb5, 0x03, 0x28, 0x03, 0xd8, 0x04, 0x4a, + 0xc0, 0x00, 0x11, 0x50, 0x80, 0xbd, 0x01, 0x21, + 0x26, 0x20, 0xf6, 0xf7, 0x5b, 0xff, 0x80, 0xbd, + 0x7c, 0x79, 0x01, 0x00, 0xb0, 0xb5, 0x05, 0x1c, + 0xc0, 0x68, 0x01, 0x89, 0x39, 0x29, 0x39, 0xd3, + 0x04, 0x68, 0xa0, 0x79, 0x88, 0x28, 0x35, 0xd1, + 0xe0, 0x79, 0x8e, 0x28, 0x32, 0xd1, 0x20, 0x7a, + 0x3c, 0x00, 0x10, 0xa4, 0x00, 0x00, 0x01, 0x28, + 0x2f, 0xd1, 0x60, 0x7a, 0x03, 0x28, 0x2c, 0xd1, + 0x20, 0x7b, 0x02, 0x28, 0x01, 0xd0, 0xfe, 0x28, + 0x27, 0xd1, 0x60, 0x7b, 0x1d, 0x21, 0x08, 0x40, + 0x01, 0x28, 0x22, 0xd1, 0xa0, 0x7b, 0xc8, 0x21, + 0x08, 0x40, 0x08, 0x28, 0x1d, 0xd1, 0xa8, 0x1d, + 0xfb, 0xf7, 0xe1, 0xf9, 0x00, 0x28, 0x18, 0xd0, + 0x19, 0x20, 0x21, 0x5c, 0x00, 0x29, 0x14, 0xd1, + 0x01, 0x30, 0x3c, 0x00, 0x4c, 0xa4, 0x00, 0x00, + 0x39, 0x28, 0xf9, 0xdb, 0x68, 0x8b, 0x04, 0x21, + 0x08, 0x43, 0x68, 0x83, 0x03, 0xf0, 0xd6, 0xfe, + 0x00, 0x28, 0x09, 0xd1, 0x00, 0x23, 0x00, 0x22, + 0x26, 0x20, 0x04, 0x49, 0x09, 0xf0, 0x92, 0xf9, + 0x03, 0x48, 0x00, 0x68, 0x01, 0xf0, 0x84, 0xf9, + 0xb0, 0xbd, 0x00, 0x00, 0x50, 0xc3, 0x00, 0x00, + 0x0c, 0x79, 0x01, 0x00, 0xb0, 0xb5, 0x08, 0x4c, + 0xa3, 0x68, 0x01, 0x33, 0x3c, 0x00, 0x88, 0xa4, + 0x00, 0x00, 0xa3, 0x60, 0x0c, 0x1c, 0x09, 0xd0, + 0x25, 0x68, 0x00, 0x2d, 0x03, 0xd0, 0x23, 0x7a, + 0x61, 0x68, 0xf5, 0xf7, 0xa3, 0xff, 0x20, 0x1c, + 0xf7, 0xf7, 0xa9, 0xf9, 0xb0, 0xbd, 0x94, 0x79, + 0x01, 0x00, 0x70, 0xb5, 0x04, 0x1c, 0xc0, 0x68, + 0x01, 0x89, 0x05, 0x68, 0x08, 0x29, 0x53, 0xd3, + 0x06, 0x22, 0x28, 0x1c, 0x55, 0x49, 0xf5, 0xf7, + 0x9e, 0xff, 0x00, 0x28, 0x37, 0xd1, 0x3c, 0x00, + 0xc4, 0xa4, 0x00, 0x00, 0xe9, 0x88, 0x52, 0x4e, + 0x04, 0x3e, 0x81, 0x29, 0x24, 0xd1, 0xe5, 0x68, + 0x29, 0x68, 0x08, 0x7a, 0x4a, 0x7a, 0x00, 0x02, + 0x80, 0x18, 0x00, 0x04, 0x00, 0x0c, 0x42, 0x0b, + 0x00, 0x05, 0x00, 0x0d, 0xe2, 0x75, 0x20, 0x83, + 0x4b, 0x89, 0x00, 0x20, 0x42, 0x00, 0xb2, 0x5a, + 0x9a, 0x42, 0x06, 0xd1, 0x28, 0x89, 0x0c, 0x38, + 0x02, 0x0a, 0x00, 0x02, 0x10, 0x43, 0x48, 0x81, + 0x3c, 0x00, 0x00, 0xa5, 0x00, 0x00, 0x02, 0xe0, + 0x01, 0x30, 0x02, 0x28, 0xf1, 0xd3, 0xe0, 0x68, + 0x01, 0x89, 0x0a, 0x39, 0x01, 0x81, 0xe0, 0x68, + 0x01, 0x68, 0x0a, 0x31, 0x1c, 0xe0, 0x00, 0x22, + 0x00, 0x20, 0x43, 0x00, 0xf3, 0x5a, 0x8b, 0x42, + 0x01, 0xd1, 0x01, 0x22, 0x02, 0xe0, 0x01, 0x30, + 0x02, 0x28, 0xf6, 0xd3, 0x00, 0x2a, 0x11, 0xd1, + 0x07, 0xe0, 0x36, 0x49, 0x06, 0x22, 0x06, 0x31, + 0x28, 0x1c, 0x3c, 0x00, 0x3c, 0xa5, 0x00, 0x00, + 0xf5, 0xf7, 0x5e, 0xff, 0x00, 0x28, 0x08, 0xd1, + 0xe0, 0x68, 0x01, 0x89, 0x06, 0x39, 0x01, 0x81, + 0xe0, 0x68, 0x01, 0x68, 0x06, 0x31, 0x01, 0x60, + 0x10, 0xe0, 0xe0, 0x68, 0xff, 0xf7, 0xe2, 0xfc, + 0x0c, 0xe0, 0x02, 0x31, 0x01, 0x81, 0xe0, 0x68, + 0x01, 0x68, 0x02, 0x39, 0x01, 0x60, 0xe0, 0x68, + 0x00, 0x89, 0x02, 0x38, 0x02, 0x0a, 0x00, 0x02, + 0x10, 0x43, 0x08, 0x80, 0x3c, 0x00, 0x78, 0xa5, + 0x00, 0x00, 0xe0, 0x68, 0x03, 0x25, 0x02, 0x89, + 0x01, 0x68, 0x24, 0x4e, 0x02, 0x2a, 0x10, 0xd9, + 0x09, 0x88, 0x08, 0x29, 0x05, 0xd0, 0xc1, 0x23, + 0xdb, 0x00, 0x99, 0x42, 0x03, 0xd1, 0x01, 0x25, + 0x02, 0xe0, 0x00, 0x25, 0x00, 0xe0, 0x02, 0x25, + 0xe9, 0x00, 0x71, 0x58, 0x00, 0x29, 0x00, 0xd1, + 0x02, 0x25, 0xf7, 0xf7, 0x04, 0xf8, 0xe9, 0x00, + 0x89, 0x19, 0x89, 0x88, 0x88, 0x42, 0x3c, 0x00, + 0xb4, 0xa5, 0x00, 0x00, 0x00, 0xd9, 0x03, 0x25, + 0xa1, 0x1d, 0x20, 0x1c, 0xfd, 0xf7, 0x34, 0xfc, + 0x00, 0x28, 0x00, 0xd1, 0x03, 0x25, 0x02, 0x2d, + 0x05, 0xd0, 0x03, 0x2d, 0x07, 0xd1, 0xe0, 0x68, + 0xf6, 0xf7, 0xe2, 0xff, 0x70, 0xbd, 0x20, 0x1c, + 0xfd, 0xf7, 0x1c, 0xfd, 0x70, 0xbd, 0xe0, 0x68, + 0x01, 0x89, 0x02, 0x39, 0x01, 0x81, 0xe0, 0x68, + 0x01, 0x68, 0x02, 0x31, 0x01, 0x60, 0xe8, 0x00, + 0x3c, 0x00, 0xf0, 0xa5, 0x00, 0x00, 0x31, 0x58, + 0x20, 0x1c, 0xf5, 0xf7, 0xf1, 0xfe, 0x00, 0x28, + 0xef, 0xd1, 0xe0, 0x68, 0x01, 0x89, 0x02, 0x31, + 0x01, 0x81, 0xe0, 0x68, 0x01, 0x68, 0x02, 0x39, + 0x01, 0x60, 0xe3, 0xe7, 0x00, 0x00, 0x6a, 0x46, + 0x01, 0x00, 0x7c, 0x79, 0x01, 0x00, 0x70, 0xb5, + 0x0e, 0x1c, 0x04, 0x1c, 0x15, 0x1c, 0xf7, 0xf7, + 0x8c, 0xfb, 0x00, 0x28, 0x2a, 0xd0, 0x1b, 0x49, + 0x08, 0x68, 0x3c, 0x00, 0x2c, 0xa6, 0x00, 0x00, + 0x01, 0x30, 0x08, 0x60, 0x00, 0x2e, 0x0a, 0xd0, + 0x01, 0x2e, 0x0b, 0xd0, 0x02, 0x2e, 0x0f, 0xd1, + 0x20, 0x1c, 0x04, 0xf0, 0xcd, 0xf8, 0x20, 0x1c, + 0xff, 0xf7, 0xd6, 0xfe, 0x0c, 0xe0, 0x08, 0x21, + 0xe0, 0x68, 0x02, 0xe0, 0xc1, 0x21, 0xe0, 0x68, + 0xc9, 0x00, 0x04, 0xf0, 0x35, 0xf9, 0x03, 0xe0, + 0x02, 0x21, 0x26, 0x20, 0xf6, 0xf7, 0x20, 0xfe, + 0xe2, 0x7d, 0xe1, 0x6a, 0x3c, 0x00, 0x68, 0xa6, + 0x00, 0x00, 0x28, 0x1c, 0xfc, 0xf7, 0x95, 0xfb, + 0x20, 0x63, 0x00, 0x20, 0x20, 0x62, 0xa0, 0x62, + 0x20, 0x1c, 0x00, 0xf0, 0x6c, 0xfe, 0x70, 0xbd, + 0xe0, 0x68, 0xf6, 0xf7, 0x8a, 0xff, 0x00, 0x2d, + 0xf9, 0xd0, 0xe3, 0x7d, 0x00, 0x22, 0x01, 0x20, + 0xe1, 0x6a, 0xf5, 0xf7, 0xa7, 0xfe, 0x70, 0xbd, + 0x00, 0x00, 0x94, 0x79, 0x01, 0x00, 0x80, 0xb5, + 0x01, 0x28, 0x04, 0xd1, 0x05, 0x48, 0x3c, 0x00, + 0xa4, 0xa6, 0x00, 0x00, 0x00, 0x68, 0x01, 0xf0, + 0x09, 0xf9, 0x80, 0xbd, 0x03, 0x21, 0x26, 0x20, + 0xf6, 0xf7, 0xf8, 0xfd, 0x80, 0xbd, 0x00, 0x00, + 0x0c, 0x79, 0x01, 0x00, 0xf8, 0xb5, 0x06, 0x1c, + 0x80, 0x79, 0x00, 0x24, 0xc0, 0x07, 0x2d, 0xd5, + 0xf0, 0x68, 0x00, 0x68, 0x41, 0x7a, 0x11, 0x29, + 0x28, 0xd1, 0xc1, 0x88, 0x0a, 0x0a, 0x09, 0x02, + 0x11, 0x43, 0xc9, 0x04, 0x22, 0xd1, 0x01, 0x78, + 0x3c, 0x00, 0xe0, 0xa6, 0x00, 0x00, 0x11, 0x4f, + 0x09, 0x07, 0x89, 0x0e, 0x08, 0x18, 0x41, 0x88, + 0x0a, 0x0a, 0x09, 0x02, 0x11, 0x43, 0x0d, 0x04, + 0x2d, 0x0c, 0x43, 0x2d, 0x39, 0x68, 0x01, 0xd1, + 0xca, 0x07, 0x0e, 0xd4, 0x44, 0x2d, 0x06, 0xd1, + 0xc9, 0x07, 0x04, 0xd5, 0x24, 0x30, 0x00, 0xf0, + 0x22, 0xfb, 0x00, 0x28, 0x05, 0xd0, 0x06, 0x48, + 0x85, 0x42, 0x06, 0xd1, 0x38, 0x68, 0x80, 0x07, + 0x03, 0xd5, 0x3c, 0x00, 0x1c, 0xa7, 0x00, 0x00, + 0x01, 0x24, 0xf0, 0x68, 0xf6, 0xf7, 0x3a, 0xff, + 0x20, 0x1c, 0xf8, 0xbd, 0x7c, 0x5a, 0x01, 0x00, + 0x6c, 0x07, 0x00, 0x00, 0x80, 0xb5, 0x00, 0x28, + 0x07, 0xd0, 0x00, 0x21, 0x26, 0x20, 0x08, 0xf0, + 0x7b, 0xff, 0x02, 0x48, 0x00, 0x68, 0x01, 0xf0, + 0xbb, 0xf8, 0x80, 0xbd, 0x0c, 0x79, 0x01, 0x00, + 0x10, 0xb5, 0x04, 0x1c, 0x09, 0x4a, 0x08, 0x1c, + 0x51, 0x68, 0x01, 0x31, 0x3c, 0x00, 0x58, 0xa7, + 0x00, 0x00, 0x51, 0x60, 0x00, 0x21, 0x21, 0x62, + 0xa1, 0x62, 0xe2, 0x7d, 0xe1, 0x6a, 0xfc, 0xf7, + 0x18, 0xfb, 0x20, 0x63, 0x20, 0x1c, 0xf7, 0xf7, + 0xe6, 0xfa, 0x20, 0x1c, 0x00, 0xf0, 0xef, 0xfd, + 0x10, 0xbd, 0x94, 0x79, 0x01, 0x00, 0x0c, 0xb5, + 0x02, 0x1c, 0x08, 0x1c, 0x00, 0x21, 0x01, 0x91, + 0x00, 0x92, 0x6a, 0x46, 0x01, 0xa9, 0x00, 0xf0, + 0x02, 0xf8, 0x0c, 0xbd, 0x00, 0x00, 0x3c, 0x00, + 0x94, 0xa7, 0x00, 0x00, 0x70, 0xb5, 0x13, 0x68, + 0x00, 0x2b, 0x1e, 0xd0, 0x00, 0x26, 0x0b, 0x68, + 0x00, 0x2b, 0x02, 0xd1, 0x13, 0x68, 0x1b, 0x68, + 0x0b, 0x60, 0x13, 0x68, 0x1c, 0x68, 0x1b, 0x89, + 0xe5, 0x18, 0x08, 0xe0, 0x5c, 0x78, 0x1c, 0x19, + 0x02, 0x34, 0x0c, 0x60, 0x1c, 0x78, 0x84, 0x42, + 0x01, 0xd1, 0x18, 0x1c, 0x70, 0xbd, 0x0b, 0x68, + 0xab, 0x42, 0xf3, 0xd3, 0x13, 0x68, 0xdb, 0x68, + 0x3c, 0x00, 0xd0, 0xa7, 0x00, 0x00, 0x13, 0x60, + 0x0e, 0x60, 0x13, 0x68, 0x00, 0x2b, 0xe1, 0xd1, + 0x00, 0x20, 0x70, 0xbd, 0x00, 0x00, 0x70, 0xb5, + 0x03, 0x1c, 0x20, 0xd0, 0x18, 0x68, 0x1e, 0x89, + 0x05, 0x1c, 0x16, 0xe0, 0x04, 0x78, 0xdd, 0x2c, + 0x10, 0xd1, 0x84, 0x78, 0x00, 0x2c, 0x0d, 0xd1, + 0xc4, 0x78, 0x50, 0x2c, 0x0a, 0xd1, 0x04, 0x79, + 0xf2, 0x2c, 0x07, 0xd1, 0x44, 0x79, 0x8c, 0x42, + 0x04, 0xd1, 0x3c, 0x00, 0x0c, 0xa8, 0x00, 0x00, + 0x02, 0x29, 0x0c, 0xd1, 0x84, 0x79, 0x94, 0x42, + 0x09, 0xd0, 0x44, 0x78, 0x20, 0x18, 0x02, 0x30, + 0x44, 0x1b, 0xb4, 0x42, 0xe5, 0xdb, 0xdb, 0x68, + 0x00, 0x2b, 0xde, 0xd1, 0x00, 0x20, 0x70, 0xbd, + 0x04, 0x49, 0x80, 0xb5, 0x0a, 0x78, 0x0a, 0x20, + 0x00, 0x2a, 0x00, 0xd0, 0x48, 0x6a, 0x00, 0xf0, + 0xd1, 0xf8, 0x80, 0xbd, 0x1c, 0x75, 0x01, 0x00, + 0xb0, 0xb5, 0x17, 0x4c, 0x3c, 0x00, 0x48, 0xa8, + 0x00, 0x00, 0x20, 0x68, 0x00, 0x28, 0x29, 0xd0, + 0x16, 0x4d, 0xe8, 0x69, 0x00, 0x28, 0x25, 0xd1, + 0x01, 0xf0, 0x3f, 0xfa, 0x00, 0x28, 0x21, 0xd1, + 0xff, 0xf7, 0x41, 0xfc, 0x00, 0x28, 0x1d, 0xd1, + 0x20, 0x68, 0xa9, 0x69, 0x40, 0x18, 0x08, 0xf0, + 0xd6, 0xf9, 0x00, 0x28, 0x16, 0xd0, 0x02, 0xf0, + 0x06, 0xfd, 0x21, 0x68, 0x40, 0x18, 0x08, 0xf0, + 0xce, 0xf9, 0x00, 0x28, 0x0e, 0xd0, 0x3c, 0x00, + 0x84, 0xa8, 0x00, 0x00, 0x01, 0x20, 0xe8, 0x61, + 0x00, 0x22, 0x25, 0x21, 0x80, 0x20, 0x08, 0xf0, + 0x8f, 0xff, 0x06, 0x48, 0x29, 0x6a, 0x04, 0xf0, + 0x83, 0xfd, 0x01, 0x21, 0x28, 0x6a, 0x00, 0xf0, + 0x89, 0xff, 0xb0, 0xbd, 0xe8, 0x59, 0x01, 0x00, + 0x1c, 0x75, 0x01, 0x00, 0x34, 0x63, 0x01, 0x00, + 0x70, 0xb5, 0x05, 0x1c, 0x00, 0x24, 0xfa, 0xf7, + 0x0b, 0xff, 0x18, 0x4e, 0x71, 0x6a, 0x40, 0x18, + 0x3c, 0x00, 0xc0, 0xa8, 0x00, 0x00, 0x00, 0xf0, + 0x8e, 0xf8, 0x00, 0x28, 0x0b, 0xd1, 0x04, 0xf0, + 0xfe, 0xfb, 0x00, 0x21, 0x25, 0x20, 0x08, 0xf0, + 0xb0, 0xfe, 0x03, 0x22, 0x29, 0x1c, 0x28, 0x1c, + 0x00, 0xf0, 0xaf, 0xf8, 0x18, 0xe0, 0x70, 0x6a, + 0x44, 0x1e, 0x00, 0xf0, 0x7c, 0xf8, 0x00, 0x28, + 0x12, 0xd1, 0x0c, 0x48, 0x31, 0x6a, 0x04, 0xf0, + 0x56, 0xfd, 0x01, 0x21, 0x30, 0x6a, 0x00, 0xf0, + 0x5c, 0xff, 0x3c, 0x00, 0xfc, 0xa8, 0x00, 0x00, + 0x00, 0x20, 0xfa, 0xf7, 0x0d, 0xfe, 0x06, 0xf0, + 0x03, 0xf8, 0x00, 0x23, 0x00, 0x22, 0x25, 0x20, + 0x05, 0x49, 0x08, 0xf0, 0x3f, 0xff, 0x20, 0x1c, + 0x07, 0xf0, 0xfc, 0xfa, 0x70, 0xbd, 0x00, 0x00, + 0x1c, 0x75, 0x01, 0x00, 0x34, 0x63, 0x01, 0x00, + 0x10, 0x27, 0x00, 0x00, 0x80, 0xb5, 0x01, 0x28, + 0x07, 0xd0, 0x80, 0x28, 0x0d, 0xd1, 0x00, 0x22, + 0x00, 0x21, 0x08, 0x48, 0x3c, 0x00, 0x38, 0xa9, + 0x00, 0x00, 0xf8, 0xf7, 0x9a, 0xfe, 0x80, 0xbd, + 0x01, 0x29, 0x02, 0xd1, 0x06, 0x49, 0x00, 0x20, + 0xc8, 0x61, 0x04, 0xf0, 0xbe, 0xfb, 0x80, 0xbd, + 0x05, 0x21, 0x25, 0x20, 0xf6, 0xf7, 0xa7, 0xfc, + 0x80, 0xbd, 0x61, 0xa9, 0x00, 0x00, 0x1c, 0x75, + 0x01, 0x00, 0x00, 0x21, 0x00, 0x28, 0x80, 0xb5, + 0x01, 0xd1, 0x03, 0x48, 0x41, 0x68, 0x01, 0x22, + 0x25, 0x20, 0x08, 0xf0, 0x2c, 0xfe, 0x3c, 0x00, + 0x74, 0xa9, 0x00, 0x00, 0x80, 0xbd, 0x00, 0x00, + 0xe8, 0x59, 0x01, 0x00, 0x02, 0x49, 0xc8, 0x68, + 0x01, 0x38, 0x48, 0x62, 0x70, 0x47, 0x00, 0x00, + 0x1c, 0x75, 0x01, 0x00, 0x38, 0xb5, 0x03, 0x1c, + 0x08, 0x1c, 0x19, 0x1c, 0x11, 0x4b, 0x06, 0xd0, + 0x01, 0x21, 0x11, 0x80, 0x0a, 0x1c, 0x19, 0x1c, + 0xf5, 0xf7, 0xaa, 0xfd, 0x17, 0xe0, 0x0d, 0x4d, + 0x01, 0x1c, 0x2c, 0x78, 0x12, 0x88, 0x18, 0x1c, + 0x3c, 0x00, 0xb0, 0xa9, 0x00, 0x00, 0xf5, 0xf7, + 0xa2, 0xfd, 0x28, 0x78, 0x84, 0x42, 0x0d, 0xd0, + 0x00, 0x23, 0x6b, 0x61, 0x00, 0x28, 0x03, 0xd0, + 0x00, 0x20, 0x07, 0xf0, 0xa4, 0xfa, 0x05, 0xe0, + 0x00, 0x22, 0x00, 0x21, 0x00, 0x20, 0x00, 0x92, + 0xf8, 0xf7, 0x23, 0xfc, 0x01, 0x20, 0x38, 0xbd, + 0x00, 0x00, 0x1c, 0x75, 0x01, 0x00, 0x70, 0xb5, + 0x04, 0x1c, 0x01, 0x26, 0x08, 0xf0, 0xe1, 0xf9, + 0x05, 0x1c, 0x3c, 0x00, 0xec, 0xa9, 0x00, 0x00, + 0x00, 0x20, 0xfa, 0xf7, 0x8b, 0xfd, 0x44, 0x43, + 0x02, 0xf0, 0x40, 0xfc, 0x02, 0xf0, 0x3e, 0xfc, + 0x01, 0x1c, 0x23, 0x1c, 0x00, 0x22, 0x28, 0x1c, + 0x08, 0xf0, 0x7c, 0xfa, 0x00, 0x28, 0x13, 0xd1, + 0x0a, 0x48, 0x23, 0x1c, 0x00, 0x22, 0x81, 0x69, + 0x28, 0x1c, 0x08, 0xf0, 0x73, 0xfa, 0x00, 0x28, + 0x0a, 0xd1, 0xf8, 0xf7, 0x19, 0xfc, 0x01, 0x1c, + 0x23, 0x1c, 0x00, 0x22, 0x3c, 0x00, 0x28, 0xaa, + 0x00, 0x00, 0x28, 0x1c, 0x08, 0xf0, 0x69, 0xfa, + 0x00, 0x28, 0x00, 0xd1, 0x00, 0x26, 0x30, 0x1c, + 0x70, 0xbd, 0x1c, 0x75, 0x01, 0x00, 0x70, 0xb5, + 0x0d, 0x1c, 0x04, 0x1c, 0x16, 0x1c, 0x07, 0xf0, + 0x76, 0xf9, 0x00, 0x28, 0x0d, 0xd0, 0xfa, 0xf7, + 0x52, 0xfe, 0x00, 0x28, 0x09, 0xd0, 0xff, 0x30, + 0x01, 0x30, 0x43, 0x68, 0x00, 0x2b, 0x04, 0xd0, + 0x22, 0x1c, 0x29, 0x1c, 0x30, 0x1c, 0x3c, 0x00, + 0x64, 0xaa, 0x00, 0x00, 0xf5, 0xf7, 0xbb, 0xfc, + 0x70, 0xbd, 0x00, 0x00, 0x80, 0xb5, 0x01, 0x21, + 0x1d, 0x20, 0x08, 0xf0, 0xdf, 0xfd, 0x07, 0x4a, + 0x07, 0x48, 0x11, 0x69, 0x01, 0x60, 0x51, 0x69, + 0x41, 0x60, 0x06, 0x49, 0x49, 0x68, 0x81, 0x60, + 0x00, 0x21, 0xc1, 0x60, 0x03, 0xf0, 0x74, 0xfc, + 0x80, 0xbd, 0x00, 0x00, 0x28, 0x61, 0x01, 0x00, + 0x48, 0x75, 0x01, 0x00, 0x90, 0x5c, 0x01, 0x00, + 0x3c, 0x00, 0xa0, 0xaa, 0x00, 0x00, 0x70, 0xb5, + 0x04, 0x1c, 0x40, 0x6b, 0x00, 0x28, 0x35, 0xd0, + 0x1d, 0x4d, 0x00, 0x26, 0x28, 0x78, 0x00, 0x28, + 0x24, 0xd0, 0x41, 0x20, 0x00, 0x5d, 0x00, 0x28, + 0x03, 0xd1, 0x08, 0xf0, 0x76, 0xf9, 0xa8, 0x61, + 0x1b, 0xe0, 0x69, 0x69, 0x01, 0x31, 0x69, 0x61, + 0xa8, 0x68, 0x00, 0x28, 0x08, 0xd0, 0x81, 0x42, + 0x06, 0xd1, 0x20, 0x69, 0x01, 0x1c, 0x10, 0x31, + 0x04, 0x30, 0x3c, 0x00, 0xdc, 0xaa, 0x00, 0x00, + 0x82, 0x22, 0xff, 0xf7, 0xad, 0xff, 0x68, 0x68, + 0x00, 0x28, 0x0a, 0xd0, 0x69, 0x69, 0x81, 0x42, + 0x07, 0xd1, 0x20, 0x69, 0x01, 0x1c, 0x10, 0x31, + 0x04, 0x30, 0x02, 0x22, 0xff, 0xf7, 0xa0, 0xff, + 0x6e, 0x61, 0x68, 0x78, 0x05, 0x21, 0x08, 0x40, + 0x08, 0xd0, 0x07, 0x48, 0x00, 0x78, 0x0e, 0x28, + 0x03, 0xd3, 0x60, 0x34, 0xe0, 0x79, 0xfb, 0xf7, + 0xcf, 0xff, 0x70, 0xbd, 0x3c, 0x00, 0x18, 0xab, + 0x00, 0x00, 0x03, 0x48, 0x06, 0x60, 0x70, 0xbd, + 0x00, 0x00, 0x1c, 0x75, 0x01, 0x00, 0x10, 0x67, + 0x01, 0x00, 0xd4, 0x7e, 0x01, 0x00, 0x80, 0x02, + 0x70, 0x47, 0x14, 0x23, 0x30, 0xb5, 0x09, 0x4d, + 0x4b, 0x43, 0x5b, 0x19, 0x5b, 0x68, 0x08, 0x24, + 0x00, 0x2b, 0x00, 0xd1, 0x02, 0x24, 0x38, 0x23, + 0x5a, 0x43, 0x05, 0x4b, 0x89, 0x00, 0xd2, 0x18, + 0x51, 0x5a, 0x02, 0x68, 0x09, 0x19, 0x3c, 0x00, + 0x54, 0xab, 0x00, 0x00, 0x51, 0x1a, 0x01, 0x60, + 0x30, 0xbd, 0x00, 0x00, 0x74, 0x40, 0x01, 0x00, + 0x8c, 0x41, 0x01, 0x00, 0xf8, 0xb5, 0x07, 0x1c, + 0x2c, 0x48, 0x14, 0x1c, 0x2c, 0x4a, 0x48, 0x43, + 0x86, 0x46, 0x80, 0x18, 0x80, 0x0d, 0x84, 0x46, + 0x2b, 0x48, 0x2a, 0x4a, 0x06, 0x26, 0x1d, 0x1c, + 0x48, 0x43, 0x4a, 0x43, 0x0e, 0x2f, 0x40, 0xd2, + 0x01, 0xa3, 0xdb, 0x5d, 0x5b, 0x00, 0x9f, 0x44, + 0x3c, 0x00, 0x90, 0xab, 0x00, 0x00, 0x06, 0x08, + 0x0a, 0x0f, 0x14, 0x18, 0x1d, 0x20, 0x27, 0x24, + 0x27, 0x2b, 0x2f, 0x31, 0xc8, 0x00, 0x1f, 0xe0, + 0x88, 0x00, 0x1d, 0xe0, 0x21, 0x49, 0x70, 0x46, + 0x40, 0x18, 0x00, 0x0d, 0x18, 0xe0, 0x1f, 0x4a, + 0x80, 0x18, 0x80, 0x0d, 0x40, 0x18, 0x21, 0xe0, + 0x1e, 0x48, 0x10, 0x18, 0x00, 0x0d, 0x1d, 0xe0, + 0x1d, 0x49, 0x70, 0x46, 0x40, 0x18, 0x40, 0x0d, + 0x0a, 0xe0, 0x3c, 0x00, 0xcc, 0xab, 0x00, 0x00, + 0x1b, 0x49, 0x40, 0x18, 0x01, 0xe0, 0x1b, 0x48, + 0x10, 0x18, 0x40, 0x0d, 0x11, 0xe0, 0x1a, 0x49, + 0x40, 0x18, 0x05, 0xe0, 0x60, 0x46, 0x20, 0x80, + 0x00, 0x20, 0x16, 0xe0, 0x17, 0x48, 0x10, 0x18, + 0x80, 0x0d, 0x06, 0xe0, 0x16, 0x49, 0x02, 0xe0, + 0x16, 0x48, 0x48, 0x43, 0x16, 0x49, 0x40, 0x18, + 0xc0, 0x0d, 0x03, 0x30, 0x80, 0x08, 0x80, 0x00, + 0x20, 0x80, 0x2e, 0x80, 0x3c, 0x00, 0x08, 0xac, + 0x00, 0x00, 0xf8, 0xbd, 0xff, 0x21, 0xff, 0x20, + 0xf6, 0xf7, 0x49, 0xfb, 0x00, 0x20, 0x20, 0x80, + 0x28, 0x80, 0xf6, 0xe7, 0x00, 0x00, 0xd1, 0x45, + 0x17, 0x00, 0xff, 0xff, 0x3f, 0x00, 0xe3, 0x38, + 0x0e, 0x00, 0x55, 0x55, 0x15, 0x00, 0xff, 0xff, + 0x0f, 0x00, 0xa9, 0xaa, 0x2a, 0x01, 0x70, 0x1c, + 0x37, 0x00, 0xff, 0xff, 0x1f, 0x00, 0xcb, 0xcc, + 0x4c, 0x00, 0x70, 0x1c, 0x47, 0x00, 0x3c, 0x00, + 0x44, 0xac, 0x00, 0x00, 0xa9, 0xaa, 0x7a, 0x00, + 0x70, 0x1c, 0x67, 0x00, 0xa9, 0xaa, 0xba, 0x00, + 0x84, 0xf6, 0x12, 0x00, 0xec, 0x25, 0xb4, 0x00, + 0x04, 0x49, 0x00, 0x28, 0x01, 0xd0, 0x09, 0x22, + 0x00, 0xe0, 0x14, 0x22, 0x4a, 0x80, 0x48, 0x60, + 0x70, 0x47, 0x00, 0x00, 0xa4, 0x69, 0x01, 0x00, + 0x80, 0xb5, 0x06, 0x22, 0xf5, 0xf7, 0x40, 0xfc, + 0x80, 0xbd, 0x00, 0x00, 0xbc, 0xb5, 0x15, 0x1c, + 0x3c, 0x00, 0x80, 0xac, 0x00, 0x00, 0x04, 0x1c, + 0x04, 0x31, 0x09, 0x04, 0x09, 0x0c, 0x01, 0xaa, + 0x6b, 0x46, 0xff, 0xf7, 0x6a, 0xff, 0x38, 0x20, + 0x06, 0x49, 0x68, 0x43, 0x40, 0x18, 0xa1, 0x00, + 0x40, 0x5a, 0x00, 0xab, 0x99, 0x88, 0x40, 0x18, + 0x19, 0x88, 0x40, 0x18, 0x00, 0x04, 0x00, 0x0c, + 0xbc, 0xbd, 0x8c, 0x41, 0x01, 0x00, 0xbc, 0xb5, + 0x04, 0x1c, 0x15, 0x1c, 0x01, 0xaa, 0x6b, 0x46, + 0xff, 0xf7, 0x3c, 0x00, 0xbc, 0xac, 0x00, 0x00, + 0x53, 0xff, 0x38, 0x20, 0x05, 0x49, 0x68, 0x43, + 0x40, 0x18, 0xa1, 0x00, 0x40, 0x5a, 0x00, 0xab, + 0x99, 0x88, 0x40, 0x18, 0x00, 0x04, 0x00, 0x0c, + 0xbc, 0xbd, 0x00, 0x00, 0x8c, 0x41, 0x01, 0x00, + 0x80, 0xb5, 0x00, 0x28, 0x0f, 0xd0, 0x00, 0x29, + 0x0d, 0xd0, 0x02, 0x78, 0x0b, 0x78, 0x9a, 0x42, + 0x09, 0xd1, 0xff, 0x2a, 0x05, 0xd0, 0x42, 0x78, + 0x02, 0x32, 0xf5, 0xf7, 0x3c, 0x00, 0xf8, 0xac, + 0x00, 0x00, 0x81, 0xfb, 0x00, 0x28, 0x01, 0xd1, + 0x01, 0x20, 0x80, 0xbd, 0x00, 0x20, 0x80, 0xbd, + 0x00, 0x00, 0x80, 0xb5, 0x06, 0x22, 0x04, 0x49, + 0xf5, 0xf7, 0x75, 0xfb, 0x00, 0x28, 0x01, 0xd1, + 0x01, 0x20, 0x80, 0xbd, 0x00, 0x20, 0x80, 0xbd, + 0x00, 0x00, 0x5e, 0x40, 0x01, 0x00, 0x01, 0x1c, + 0x49, 0x78, 0x01, 0x20, 0x00, 0x29, 0x00, 0xd0, + 0x00, 0x20, 0x70, 0x47, 0x00, 0x00, 0x3c, 0x00, + 0x34, 0xad, 0x00, 0x00, 0x80, 0xb5, 0x06, 0x22, + 0xf5, 0xf7, 0x60, 0xfb, 0x00, 0x28, 0x01, 0xd1, + 0x01, 0x20, 0x80, 0xbd, 0x00, 0x20, 0x80, 0xbd, + 0x80, 0xb5, 0xff, 0xf7, 0xc7, 0xff, 0x80, 0xbd, + 0x80, 0xb5, 0x06, 0x22, 0x04, 0x49, 0xf5, 0xf7, + 0x51, 0xfb, 0x00, 0x28, 0x01, 0xd1, 0x01, 0x20, + 0x80, 0xbd, 0x00, 0x20, 0x80, 0xbd, 0x00, 0x00, + 0x12, 0x61, 0x01, 0x00, 0x01, 0x1c, 0x80, 0x20, + 0x3c, 0x00, 0x70, 0xad, 0x00, 0x00, 0x81, 0x43, + 0x8a, 0x08, 0x0e, 0x20, 0x1c, 0x2a, 0x10, 0xb5, + 0x06, 0xd2, 0x03, 0x4c, 0x52, 0x00, 0xa3, 0x5c, + 0x8b, 0x42, 0x01, 0xd1, 0x10, 0x19, 0x40, 0x78, + 0x10, 0xbd, 0xfc, 0x41, 0x01, 0x00, 0x14, 0x23, + 0x02, 0x49, 0x58, 0x43, 0x40, 0x18, 0x40, 0x68, + 0x70, 0x47, 0x74, 0x40, 0x01, 0x00, 0x20, 0x22, + 0x01, 0x1c, 0x80, 0xb5, 0x02, 0x48, 0xf5, 0xf7, + 0x52, 0xfd, 0x3c, 0x00, 0xac, 0xad, 0x00, 0x00, + 0x80, 0xbd, 0x00, 0x00, 0x48, 0x61, 0x01, 0x00, + 0x08, 0x06, 0x00, 0x0e, 0x02, 0x28, 0x01, 0xd1, + 0x00, 0x20, 0x70, 0x47, 0x01, 0x20, 0x70, 0x47, + 0x00, 0x29, 0x0c, 0xd0, 0x07, 0x49, 0x09, 0x68, + 0x00, 0x29, 0x08, 0xd0, 0x14, 0x23, 0x06, 0x49, + 0x58, 0x43, 0x40, 0x18, 0xc0, 0x68, 0x00, 0x28, + 0x01, 0xd0, 0x01, 0x20, 0x70, 0x47, 0x00, 0x20, + 0x70, 0x47, 0x00, 0x00, 0x3c, 0x00, 0xe8, 0xad, + 0x00, 0x00, 0xac, 0x69, 0x01, 0x00, 0x74, 0x40, + 0x01, 0x00, 0x10, 0xb5, 0x04, 0x1c, 0x06, 0x22, + 0x01, 0x1c, 0x04, 0x48, 0xf5, 0xf7, 0x7d, 0xfb, + 0x06, 0x22, 0x21, 0x1c, 0x03, 0x48, 0xf5, 0xf7, + 0x78, 0xfb, 0x10, 0xbd, 0x00, 0x00, 0x12, 0x61, + 0x01, 0x00, 0x40, 0x80, 0x07, 0x00, 0x00, 0x29, + 0x01, 0xd1, 0x00, 0x20, 0x70, 0x47, 0x38, 0x23, + 0x5a, 0x43, 0x07, 0x4b, 0xd2, 0x18, 0x3c, 0x00, + 0x24, 0xae, 0x00, 0x00, 0x83, 0x00, 0xd2, 0x5a, + 0x14, 0x23, 0x58, 0x43, 0x05, 0x4b, 0xc0, 0x18, + 0x40, 0x88, 0x10, 0x18, 0x08, 0x1a, 0x0a, 0x38, + 0x00, 0x04, 0x00, 0x0c, 0x70, 0x47, 0x00, 0x00, + 0x8c, 0x41, 0x01, 0x00, 0x74, 0x40, 0x01, 0x00, + 0xf8, 0xb5, 0x07, 0x1c, 0x08, 0x1c, 0x16, 0x1c, + 0x1c, 0x1c, 0x19, 0x1c, 0x00, 0xf0, 0x5a, 0xf8, + 0x05, 0x1c, 0x14, 0x35, 0x22, 0x1c, 0x31, 0x1c, + 0x3c, 0x00, 0x60, 0xae, 0x00, 0x00, 0x38, 0x1c, + 0xff, 0xf7, 0x0b, 0xff, 0x28, 0x18, 0x00, 0x04, + 0x00, 0x0c, 0xf8, 0xbd, 0x00, 0x00, 0x00, 0xb5, + 0x00, 0xf0, 0x4b, 0xf8, 0x0a, 0x30, 0x00, 0x04, + 0x00, 0x0c, 0x00, 0xbd, 0x00, 0x00, 0xf8, 0xb5, + 0x07, 0x1c, 0x08, 0x1c, 0x16, 0x1c, 0x1c, 0x1c, + 0x19, 0x1c, 0x00, 0xf0, 0x3e, 0xf8, 0x45, 0x00, + 0x1e, 0x35, 0x22, 0x1c, 0x31, 0x1c, 0x38, 0x1c, + 0xff, 0xf7, 0x3c, 0x00, 0x9c, 0xae, 0x00, 0x00, + 0xef, 0xfe, 0x28, 0x18, 0x00, 0x04, 0x00, 0x0c, + 0xf8, 0xbd, 0x00, 0x00, 0xff, 0xb5, 0x0f, 0x1c, + 0x81, 0xb0, 0x0a, 0xa9, 0x14, 0x1c, 0x1e, 0x1c, + 0x03, 0xc9, 0x00, 0xf0, 0x29, 0xf8, 0x05, 0x1c, + 0x1e, 0x35, 0x21, 0x1c, 0x30, 0x1c, 0x00, 0xf0, + 0x23, 0xf8, 0x2d, 0x18, 0x22, 0x1c, 0x39, 0x1c, + 0x01, 0x98, 0xff, 0xf7, 0xd5, 0xfe, 0x28, 0x18, + 0x00, 0x04, 0x00, 0x0c, 0x3c, 0x00, 0xd8, 0xae, + 0x00, 0x00, 0x05, 0xb0, 0xf0, 0xbd, 0x0a, 0x49, + 0x80, 0xb5, 0x09, 0x88, 0x09, 0x29, 0x04, 0xd0, + 0x14, 0x29, 0x07, 0xd1, 0x01, 0x01, 0x80, 0x00, + 0x00, 0xe0, 0xc1, 0x00, 0x08, 0x18, 0x00, 0x04, + 0x00, 0x0c, 0x80, 0xbd, 0xff, 0x21, 0xff, 0x20, + 0xf6, 0xf7, 0xd1, 0xf9, 0x00, 0x20, 0x80, 0xbd, + 0x00, 0x00, 0xa6, 0x69, 0x01, 0x00, 0x38, 0x23, + 0x59, 0x43, 0x06, 0x4a, 0x14, 0x23, 0x3c, 0x00, + 0x14, 0xaf, 0x00, 0x00, 0x89, 0x18, 0x82, 0x00, + 0x89, 0x5a, 0x05, 0x4a, 0x58, 0x43, 0x80, 0x18, + 0x40, 0x88, 0x08, 0x18, 0x00, 0x04, 0x00, 0x0c, + 0x70, 0x47, 0x00, 0x00, 0x8c, 0x41, 0x01, 0x00, + 0x74, 0x40, 0x01, 0x00, 0x02, 0x48, 0x03, 0x49, + 0x00, 0x68, 0x40, 0x00, 0x08, 0x5a, 0x70, 0x47, + 0xa8, 0x69, 0x01, 0x00, 0x54, 0x40, 0x01, 0x00, + 0x0a, 0x20, 0x70, 0x47, 0x10, 0xb5, 0x04, 0x1c, + 0x3c, 0x00, 0x50, 0xaf, 0x00, 0x00, 0xfd, 0xf7, + 0x62, 0xff, 0x20, 0x1c, 0x10, 0xbd, 0xb0, 0xb5, + 0x04, 0x1c, 0xc0, 0x68, 0x05, 0x68, 0xa0, 0x1d, + 0xff, 0xf7, 0xf5, 0xfe, 0x00, 0x28, 0x18, 0xd0, + 0x21, 0x1c, 0x14, 0x31, 0x20, 0x1c, 0x08, 0xf0, + 0xe2, 0xfd, 0x00, 0x28, 0x11, 0xd0, 0x29, 0x88, + 0x09, 0x48, 0x20, 0x22, 0x81, 0x82, 0x69, 0x88, + 0x01, 0x83, 0xa9, 0x88, 0x06, 0x35, 0x41, 0x83, + 0xc5, 0x61, 0x3c, 0x00, 0x8c, 0xaf, 0x00, 0x00, + 0x30, 0x21, 0x09, 0x5d, 0x11, 0x54, 0x61, 0x6b, + 0x41, 0x62, 0x01, 0x20, 0xf7, 0xf7, 0x28, 0xf8, + 0x20, 0x1c, 0xb0, 0xbd, 0x70, 0x7c, 0x01, 0x00, + 0x70, 0xb5, 0x04, 0x1c, 0xc0, 0x68, 0x21, 0x1c, + 0x14, 0x31, 0x05, 0x68, 0x20, 0x1c, 0x08, 0xf0, + 0xc1, 0xfd, 0x00, 0x28, 0x08, 0xd0, 0x05, 0x4e, + 0xf0, 0x68, 0x02, 0xf0, 0xcf, 0xfd, 0x28, 0x88, + 0xf0, 0x82, 0x03, 0x20, 0x3c, 0x00, 0xc8, 0xaf, + 0x00, 0x00, 0xf7, 0xf7, 0x10, 0xf8, 0x20, 0x1c, + 0x70, 0xbd, 0x70, 0x7c, 0x01, 0x00, 0x3e, 0xb5, + 0x04, 0x1c, 0xc0, 0x68, 0x05, 0x68, 0xa0, 0x1d, + 0xff, 0xf7, 0xb7, 0xfe, 0x00, 0x28, 0x21, 0xd0, + 0x21, 0x1c, 0x14, 0x31, 0x20, 0x1c, 0x02, 0xaa, + 0x08, 0xf0, 0x77, 0xfd, 0x00, 0x28, 0x19, 0xd0, + 0x02, 0x98, 0x4b, 0x21, 0x09, 0x5c, 0x00, 0x29, + 0x10, 0xd0, 0x01, 0x29, 0x14, 0xd0, 0x3c, 0x00, + 0x04, 0xb0, 0x00, 0x00, 0x02, 0x29, 0x0c, 0xd1, + 0x29, 0x88, 0x0d, 0x20, 0x00, 0xab, 0x18, 0x80, + 0x20, 0x1c, 0x03, 0xf0, 0x51, 0xf8, 0x01, 0x90, + 0x68, 0x46, 0x02, 0xf0, 0x5d, 0xfa, 0xf6, 0xf7, + 0xb5, 0xf8, 0x00, 0x21, 0x02, 0x98, 0x06, 0xf0, + 0x9f, 0xfe, 0x20, 0x1c, 0x3e, 0xbd, 0x07, 0xf0, + 0x29, 0xf8, 0x02, 0x98, 0x00, 0x21, 0x80, 0x69, + 0xc2, 0x07, 0xd2, 0x0f, 0x04, 0x20, 0xf6, 0xf7, + 0x3c, 0x00, 0x40, 0xb0, 0x00, 0x00, 0x7f, 0xff, + 0xee, 0xe7, 0x10, 0xb5, 0x04, 0x1c, 0xfd, 0xf7, + 0xe6, 0xfe, 0x20, 0x1c, 0x10, 0xbd, 0x3e, 0xb5, + 0x05, 0x1c, 0x00, 0xf0, 0x40, 0xfe, 0x00, 0x28, + 0x15, 0xd1, 0x28, 0x1c, 0x14, 0x30, 0xfa, 0xf7, + 0xce, 0xfb, 0x00, 0x28, 0x0f, 0xd0, 0x05, 0x21, + 0x28, 0x69, 0xff, 0xf7, 0x86, 0xfb, 0x04, 0x1c, + 0x09, 0xd0, 0x05, 0x22, 0x21, 0x1c, 0x68, 0x46, + 0xf5, 0xf7, 0x3c, 0x00, 0x7c, 0xb0, 0x00, 0x00, + 0x3d, 0xfa, 0x05, 0x34, 0x02, 0x94, 0x68, 0x46, + 0x03, 0xf0, 0x1a, 0xfb, 0x2a, 0x1c, 0x0d, 0x21, + 0x8f, 0x20, 0x08, 0xf0, 0x8f, 0xfb, 0x00, 0x20, + 0x3e, 0xbd, 0x00, 0x00, 0x10, 0xb5, 0x04, 0x1c, + 0xfa, 0xf7, 0x98, 0xf8, 0x20, 0x1c, 0x05, 0xf0, + 0xe5, 0xf8, 0x20, 0x1c, 0x10, 0xbd, 0x00, 0x00, + 0xb0, 0xb5, 0x04, 0x1c, 0x00, 0x69, 0x00, 0x21, + 0x94, 0xb0, 0xff, 0xf7, 0x3c, 0x00, 0xb8, 0xb0, + 0x00, 0x00, 0x61, 0xfb, 0x69, 0x46, 0xfb, 0xf7, + 0x26, 0xf8, 0x00, 0x28, 0x1e, 0xd0, 0x00, 0x98, + 0xfa, 0xf7, 0x29, 0xfa, 0x01, 0x1c, 0x01, 0xa8, + 0x02, 0xf0, 0xd7, 0xf9, 0x00, 0x98, 0xfa, 0xf7, + 0xd2, 0xf9, 0x04, 0x90, 0x05, 0x20, 0x09, 0xad, + 0x68, 0x72, 0x02, 0xa8, 0x21, 0x1c, 0x06, 0x22, + 0x02, 0x30, 0xf5, 0xf7, 0x06, 0xfa, 0x01, 0x20, + 0x08, 0x90, 0x21, 0x6a, 0x0a, 0x90, 0x3c, 0x00, + 0xf4, 0xb0, 0x00, 0x00, 0x28, 0x20, 0x09, 0x91, + 0x00, 0x5d, 0x28, 0x72, 0x01, 0xa8, 0x00, 0xf0, + 0x69, 0xf8, 0x20, 0x1c, 0x14, 0xb0, 0xb0, 0xbd, + 0xff, 0xb5, 0x16, 0x1c, 0x1f, 0x1c, 0x81, 0xb0, + 0x0a, 0x9d, 0x4c, 0x20, 0xf6, 0xf7, 0x90, 0xfb, + 0x04, 0x1c, 0x14, 0x30, 0x06, 0x22, 0x02, 0x99, + 0xf5, 0xf7, 0xea, 0xf9, 0x20, 0x1c, 0x06, 0x22, + 0x01, 0x99, 0xf5, 0xf7, 0xe5, 0xf9, 0x28, 0x20, + 0x3c, 0x00, 0x30, 0xb1, 0x00, 0x00, 0x00, 0x21, + 0x06, 0x55, 0xe1, 0x60, 0x27, 0x62, 0x00, 0x2d, + 0x01, 0xd0, 0x8e, 0x20, 0x00, 0xe0, 0x8d, 0x20, + 0x22, 0x1c, 0x0d, 0x21, 0x08, 0xf0, 0x33, 0xfb, + 0x05, 0xb0, 0xf0, 0xbd, 0x00, 0x00, 0xb0, 0xb5, + 0x05, 0x1c, 0x4c, 0x20, 0xf6, 0xf7, 0x6f, 0xfb, + 0x04, 0x1c, 0x4c, 0x22, 0x29, 0x1c, 0xf5, 0xf7, + 0x26, 0xfa, 0x29, 0x20, 0x40, 0x5d, 0x0d, 0x28, + 0x2c, 0xd2, 0x3c, 0x00, 0x6c, 0xb1, 0x00, 0x00, + 0x01, 0xa3, 0x1b, 0x5c, 0x5b, 0x00, 0x9f, 0x44, + 0x28, 0x1a, 0x28, 0x1e, 0x06, 0x0a, 0x28, 0x28, + 0x0e, 0x28, 0x22, 0x12, 0x16, 0x00, 0x22, 0x1c, + 0x0d, 0x21, 0x8c, 0x20, 0x1a, 0xe0, 0x22, 0x1c, + 0x0d, 0x21, 0x83, 0x20, 0x16, 0xe0, 0x22, 0x1c, + 0x0d, 0x21, 0x84, 0x20, 0x12, 0xe0, 0x22, 0x1c, + 0x0d, 0x21, 0x85, 0x20, 0x0e, 0xe0, 0x22, 0x1c, + 0x0d, 0x21, 0x86, 0x20, 0x3c, 0x00, 0xa8, 0xb1, + 0x00, 0x00, 0x0a, 0xe0, 0x22, 0x1c, 0x0d, 0x21, + 0x87, 0x20, 0x06, 0xe0, 0x22, 0x1c, 0x0d, 0x21, + 0x89, 0x20, 0x02, 0xe0, 0x22, 0x1c, 0x0d, 0x21, + 0x8b, 0x20, 0x08, 0xf0, 0xf6, 0xfa, 0xb0, 0xbd, + 0xe8, 0x68, 0xf6, 0xf7, 0xe6, 0xf9, 0x20, 0x1c, + 0xf6, 0xf7, 0x11, 0xfb, 0xb0, 0xbd, 0xfe, 0xb5, + 0x05, 0x1c, 0x90, 0x20, 0xf6, 0xf7, 0x2d, 0xfb, + 0x04, 0x1c, 0x90, 0x21, 0xf5, 0xf7, 0x3c, 0x00, + 0xe4, 0xb1, 0x00, 0x00, 0x5b, 0xf9, 0x37, 0x4e, + 0x01, 0x27, 0xf0, 0x69, 0x04, 0x28, 0x03, 0xd9, + 0x70, 0x6b, 0x01, 0x30, 0x70, 0x63, 0x4d, 0xe0, + 0x33, 0x48, 0xb1, 0x6b, 0x04, 0xf0, 0xd0, 0xf8, + 0x01, 0x20, 0x20, 0x62, 0xa8, 0x7e, 0x21, 0x1c, + 0x80, 0x31, 0x02, 0x91, 0x08, 0x70, 0x22, 0x1c, + 0x60, 0x32, 0x01, 0x92, 0x00, 0x20, 0x2f, 0x1c, + 0x20, 0x37, 0x90, 0x72, 0x78, 0x7a, 0x2b, 0x1c, + 0x3c, 0x00, 0x20, 0xb2, 0x00, 0x00, 0x14, 0x33, + 0xd0, 0x72, 0xe8, 0x68, 0xaa, 0x1d, 0xa0, 0x60, + 0xe8, 0x6b, 0x48, 0x60, 0x44, 0x20, 0x40, 0x5d, + 0x08, 0x72, 0x29, 0x1c, 0x20, 0x1c, 0x05, 0xf0, + 0xaa, 0xfc, 0x68, 0x6a, 0x00, 0x28, 0x0a, 0xd1, + 0x01, 0x9a, 0x20, 0x1c, 0x93, 0x7a, 0x02, 0x99, + 0x22, 0x1c, 0x70, 0x32, 0x58, 0x30, 0x09, 0x78, + 0xfa, 0xf7, 0xdb, 0xf9, 0x06, 0xe0, 0x3a, 0x7a, + 0x23, 0x1c, 0x3c, 0x00, 0x5c, 0xb2, 0x00, 0x00, + 0xe8, 0x69, 0x29, 0x6a, 0x70, 0x33, 0xfd, 0xf7, + 0x8d, 0xf9, 0x30, 0x20, 0x40, 0x5d, 0x18, 0x49, + 0x07, 0x28, 0x0b, 0xd1, 0x58, 0x20, 0x00, 0x5d, + 0xc0, 0x07, 0xc0, 0x17, 0x01, 0x30, 0xe0, 0x61, + 0x00, 0x20, 0x20, 0x61, 0x20, 0x1c, 0xf7, 0xf7, + 0x3f, 0xff, 0x18, 0xe0, 0x01, 0x22, 0x20, 0x1c, + 0x05, 0xf0, 0xac, 0xff, 0x07, 0x1c, 0x12, 0xd0, + 0x03, 0xf0, 0x06, 0xff, 0x3c, 0x00, 0x98, 0xb2, + 0x00, 0x00, 0xf3, 0x6d, 0x00, 0x2b, 0x06, 0xd0, + 0x60, 0x68, 0x20, 0x30, 0x82, 0x7b, 0x61, 0x6b, + 0x38, 0x1c, 0xf5, 0xf7, 0x99, 0xf8, 0xe8, 0x68, + 0xf6, 0xf7, 0x73, 0xf9, 0x20, 0x1c, 0xf6, 0xf7, + 0x9e, 0xfa, 0xfe, 0xbd, 0xf0, 0x69, 0x01, 0x30, + 0xf0, 0x61, 0xfa, 0xe7, 0x00, 0x00, 0xc4, 0x69, + 0x01, 0x00, 0x34, 0x63, 0x01, 0x00, 0x05, 0x31, + 0x00, 0x00, 0x70, 0xb5, 0x06, 0x1c, 0x3c, 0x00, + 0xd4, 0xb2, 0x00, 0x00, 0x0d, 0x1c, 0x09, 0x04, + 0x09, 0x0c, 0x00, 0x20, 0xf6, 0xf7, 0x7c, 0xf9, + 0x04, 0x1c, 0x2a, 0x1c, 0x31, 0x1c, 0x00, 0x68, + 0xf5, 0xf7, 0x06, 0xf9, 0x20, 0x1c, 0x70, 0xbd, + 0x40, 0x88, 0x70, 0x47, 0x03, 0x78, 0x1b, 0x07, + 0x9b, 0x0f, 0x0b, 0x70, 0x00, 0x78, 0x00, 0x09, + 0x10, 0x70, 0x70, 0x47, 0x04, 0x30, 0x70, 0x47, + 0x04, 0x30, 0x70, 0x47, 0xd4, 0x21, 0x01, 0x70, + 0x3c, 0x00, 0x10, 0xb3, 0x00, 0x00, 0x00, 0x21, + 0x41, 0x70, 0x70, 0x47, 0x00, 0x00, 0xc4, 0x21, + 0x01, 0x70, 0x00, 0x21, 0x41, 0x70, 0x70, 0x47, + 0x00, 0x00, 0xb4, 0x21, 0x01, 0x70, 0x00, 0x21, + 0x41, 0x70, 0x70, 0x47, 0x00, 0x00, 0x01, 0x49, + 0x48, 0x65, 0x70, 0x47, 0x00, 0x00, 0xc4, 0x69, + 0x01, 0x00, 0x01, 0x49, 0x08, 0x65, 0x70, 0x47, + 0x00, 0x00, 0xc4, 0x69, 0x01, 0x00, 0x01, 0x49, + 0x88, 0x65, 0x3c, 0x00, 0x4c, 0xb3, 0x00, 0x00, + 0x70, 0x47, 0x00, 0x00, 0xc4, 0x69, 0x01, 0x00, + 0xf8, 0xb5, 0x5f, 0x4f, 0x05, 0x1c, 0xb8, 0x68, + 0x01, 0x30, 0xb8, 0x60, 0x07, 0xf0, 0x24, 0xfd, + 0x38, 0x61, 0x90, 0x20, 0xf6, 0xf7, 0x66, 0xfa, + 0x04, 0x1c, 0x90, 0x21, 0xf5, 0xf7, 0x94, 0xf8, + 0x28, 0x6b, 0x27, 0x1c, 0x60, 0x63, 0x68, 0x8b, + 0x80, 0x37, 0x26, 0x1c, 0xc0, 0x07, 0xc0, 0x0f, + 0x20, 0x62, 0x68, 0x8b, 0x3c, 0x00, 0x88, 0xb3, + 0x00, 0x00, 0x60, 0x36, 0x02, 0x21, 0x40, 0x07, + 0xc0, 0x0f, 0x20, 0x63, 0x68, 0x8b, 0x80, 0x07, + 0xc0, 0x0f, 0xf8, 0x60, 0x28, 0x7f, 0x38, 0x70, + 0xb1, 0x72, 0x00, 0x28, 0x08, 0xd1, 0xf9, 0xf7, + 0xc8, 0xff, 0x00, 0x28, 0x02, 0xd0, 0x01, 0x20, + 0x60, 0x62, 0x01, 0xe0, 0x01, 0x20, 0xa0, 0x62, + 0xf8, 0x68, 0x00, 0x28, 0x03, 0xd0, 0x00, 0x21, + 0x02, 0x20, 0x06, 0xf0, 0xcc, 0xff, 0x3c, 0x00, + 0xc4, 0xb3, 0x00, 0x00, 0x2b, 0x1c, 0x10, 0x33, + 0xaa, 0x1d, 0x29, 0x1c, 0x20, 0x1c, 0x05, 0xf0, + 0xdf, 0xfb, 0xa8, 0x6a, 0x00, 0x28, 0x0c, 0xd1, + 0x39, 0x78, 0x02, 0x29, 0x07, 0xd0, 0x22, 0x1c, + 0x70, 0x32, 0x20, 0x1c, 0x58, 0x30, 0xb3, 0x7a, + 0xfa, 0xf7, 0x10, 0xf9, 0x08, 0xe0, 0x01, 0x26, + 0x5e, 0xe0, 0xaa, 0x7d, 0x23, 0x1c, 0x28, 0x6a, + 0x69, 0x6a, 0x70, 0x33, 0xfd, 0xf7, 0xc0, 0xf8, + 0x3c, 0x00, 0x00, 0xb4, 0x00, 0x00, 0xe9, 0x68, + 0x00, 0x20, 0x09, 0x89, 0x00, 0x29, 0x00, 0xd1, + 0x04, 0x20, 0xf0, 0x72, 0x38, 0x78, 0x01, 0x28, + 0x14, 0xd1, 0x00, 0x27, 0x00, 0x90, 0x00, 0x20, + 0x06, 0xe0, 0x29, 0x69, 0x01, 0x29, 0x03, 0xd1, + 0xa9, 0x69, 0x01, 0x27, 0x89, 0x07, 0x1a, 0xd5, + 0x06, 0xf0, 0x79, 0xfc, 0x00, 0x28, 0xf4, 0xd1, + 0x01, 0x2f, 0x14, 0xd1, 0x00, 0x98, 0x01, 0x28, + 0x11, 0xd1, 0x3c, 0x00, 0x3c, 0xb4, 0x00, 0x00, + 0x08, 0xe0, 0x20, 0x1c, 0x58, 0x30, 0x06, 0xf0, + 0xe1, 0xfc, 0x00, 0x28, 0x0a, 0xd0, 0x80, 0x69, + 0x80, 0x07, 0x07, 0xd5, 0xf0, 0x7a, 0x08, 0x21, + 0x08, 0x43, 0xf0, 0x72, 0x01, 0x20, 0xe0, 0x62, + 0xe8, 0x7d, 0x30, 0x73, 0xe8, 0x68, 0xa0, 0x60, + 0xe0, 0x6a, 0x00, 0x28, 0x12, 0xd0, 0x1a, 0x4f, + 0xf8, 0x6b, 0x00, 0x28, 0x0e, 0xd0, 0x30, 0x7b, + 0xf5, 0xf7, 0xde, 0xfe, 0x3c, 0x00, 0x78, 0xb4, + 0x00, 0x00, 0x00, 0x28, 0x09, 0xd0, 0x21, 0x1c, + 0x38, 0x1c, 0x40, 0x30, 0xfc, 0xf7, 0x55, 0xfc, + 0x14, 0x48, 0xb9, 0x6b, 0x03, 0xf0, 0x89, 0xff, + 0xf8, 0xbd, 0x10, 0x4f, 0x12, 0x48, 0xb9, 0x6b, + 0x03, 0xf0, 0x83, 0xff, 0x00, 0x22, 0x20, 0x1c, + 0x10, 0x49, 0x05, 0xf0, 0xa2, 0xfe, 0x06, 0x1c, + 0x03, 0xd1, 0x38, 0x6a, 0x01, 0x30, 0x38, 0x62, + 0xee, 0xe7, 0x20, 0x1c, 0xf6, 0xf7, 0x3c, 0x00, + 0xb4, 0xb4, 0x00, 0x00, 0x9f, 0xf9, 0xe8, 0x68, + 0xf6, 0xf7, 0x6e, 0xf8, 0x03, 0xf0, 0xf2, 0xfd, + 0x04, 0x48, 0x83, 0x6d, 0x00, 0x2b, 0xe2, 0xd0, + 0x00, 0x22, 0x30, 0x1c, 0x29, 0x6b, 0xf4, 0xf7, + 0x86, 0xff, 0xdc, 0xe7, 0xc4, 0x69, 0x01, 0x00, + 0xc4, 0x60, 0x01, 0x00, 0x34, 0x63, 0x01, 0x00, + 0x11, 0x30, 0x00, 0x00, 0x10, 0xb5, 0x0a, 0x20, + 0x07, 0xf0, 0xfe, 0xfc, 0x07, 0xf0, 0x5e, 0xfc, + 0x3c, 0x00, 0xf0, 0xb4, 0x00, 0x00, 0x0b, 0x49, + 0x44, 0x18, 0x0c, 0xe0, 0x20, 0x1c, 0x07, 0xf0, + 0x90, 0xfb, 0x00, 0x28, 0x07, 0xd0, 0xf7, 0xf7, + 0x34, 0xf9, 0x00, 0x28, 0x03, 0xd0, 0x12, 0x21, + 0x86, 0x20, 0xf5, 0xf7, 0xca, 0xfe, 0xf7, 0xf7, + 0x2c, 0xf9, 0x00, 0x28, 0xee, 0xd1, 0x01, 0xf0, + 0x80, 0xfd, 0x10, 0xbd, 0x00, 0x00, 0x40, 0x9c, + 0x00, 0x00, 0x10, 0xb5, 0x0c, 0x1c, 0x01, 0x1c, + 0x17, 0x4a, 0x3c, 0x00, 0x2c, 0xb5, 0x00, 0x00, + 0x01, 0x29, 0x50, 0x69, 0x04, 0xd0, 0x80, 0x29, + 0x1d, 0xd0, 0x81, 0x29, 0x21, 0xd1, 0x1c, 0xe0, + 0x91, 0x78, 0x01, 0x29, 0x15, 0xd1, 0x02, 0x21, + 0x91, 0x70, 0x14, 0x1c, 0x01, 0x1c, 0x10, 0x48, + 0x03, 0xf0, 0x28, 0xff, 0x01, 0x21, 0x60, 0x69, + 0x00, 0xf0, 0x2e, 0xf9, 0x60, 0x69, 0x01, 0xf0, + 0x5f, 0xfc, 0x20, 0x70, 0xa0, 0x88, 0xa1, 0x69, + 0x00, 0x23, 0x0a, 0x4a, 0x3c, 0x00, 0x68, 0xb5, + 0x00, 0x00, 0x07, 0xf0, 0x7e, 0xfc, 0x10, 0xbd, + 0x22, 0x21, 0x06, 0xe0, 0x01, 0xf0, 0x1d, 0xfc, + 0x20, 0x1c, 0x00, 0xf0, 0x4a, 0xf8, 0x10, 0xbd, + 0x1c, 0x21, 0x20, 0x20, 0xf5, 0xf7, 0x8f, 0xfe, + 0x10, 0xbd, 0xb4, 0x79, 0x01, 0x00, 0x34, 0x63, + 0x01, 0x00, 0x3d, 0x2e, 0x00, 0x00, 0x70, 0xb5, + 0x1c, 0x4c, 0xa0, 0x78, 0x00, 0x28, 0x32, 0xd0, + 0x05, 0x28, 0x30, 0xd0, 0x60, 0x69, 0x3c, 0x00, + 0xa4, 0xb5, 0x00, 0x00, 0x00, 0xf0, 0xea, 0xf8, + 0x18, 0x4e, 0xb5, 0x79, 0xa0, 0x78, 0x01, 0x28, + 0x0b, 0xd0, 0x02, 0x28, 0x0e, 0xd0, 0x03, 0x28, + 0x10, 0xd0, 0x04, 0x28, 0x17, 0xd1, 0x42, 0x1f, + 0x80, 0x21, 0x20, 0x20, 0x08, 0xf0, 0x08, 0xf8, + 0x0e, 0xe0, 0x00, 0x21, 0x20, 0x20, 0x08, 0xf0, + 0x31, 0xf8, 0x0c, 0xe0, 0xa0, 0x88, 0x07, 0xf0, + 0x1d, 0xfc, 0x05, 0xe0, 0x20, 0x78, 0x00, 0xf0, + 0x3c, 0x00, 0xe0, 0xb5, 0x00, 0x00, 0x39, 0xfa, + 0x00, 0x20, 0x00, 0xf0, 0xc4, 0xfd, 0x60, 0x69, + 0x01, 0xf0, 0xe1, 0xfb, 0x05, 0x20, 0xa0, 0x70, + 0xb5, 0x71, 0x60, 0x69, 0x00, 0xf0, 0x61, 0xf9, + 0x00, 0x22, 0x20, 0x21, 0x81, 0x20, 0x08, 0xf0, + 0xd6, 0xf8, 0x70, 0xbd, 0x00, 0x00, 0xb4, 0x79, + 0x01, 0x00, 0x20, 0x10, 0x07, 0x00, 0xb0, 0xb5, + 0x0d, 0x4d, 0x04, 0x1c, 0xa8, 0x78, 0x00, 0x28, + 0x14, 0xd0, 0x3c, 0x00, 0x1c, 0xb6, 0x00, 0x00, + 0x68, 0x69, 0x00, 0xf0, 0x0b, 0xf9, 0x0a, 0x48, + 0x69, 0x69, 0x03, 0xf0, 0xa7, 0xfe, 0xa8, 0x88, + 0x07, 0xf0, 0x9e, 0xfb, 0x00, 0x2c, 0x02, 0xd0, + 0x68, 0x78, 0x00, 0xf0, 0x79, 0xff, 0x00, 0x20, + 0xa8, 0x70, 0xa9, 0x68, 0x20, 0x1c, 0xf4, 0xf7, + 0xca, 0xfe, 0xb0, 0xbd, 0xb4, 0x79, 0x01, 0x00, + 0x34, 0x63, 0x01, 0x00, 0x06, 0x4b, 0x80, 0xb5, + 0x99, 0x78, 0x03, 0x29, 0x3c, 0x00, 0x58, 0xb6, + 0x00, 0x00, 0x06, 0xd1, 0x04, 0x21, 0x99, 0x70, + 0x20, 0x21, 0x02, 0x1c, 0x80, 0x20, 0x08, 0xf0, + 0xa4, 0xf8, 0x80, 0xbd, 0x00, 0x00, 0xb4, 0x79, + 0x01, 0x00, 0x10, 0xb5, 0x0c, 0x4c, 0xa1, 0x78, + 0x03, 0x29, 0x0f, 0xd1, 0x10, 0x30, 0xfa, 0xf7, + 0xde, 0xf8, 0x00, 0x28, 0x09, 0xd0, 0x20, 0x78, + 0x00, 0xf0, 0xe5, 0xf9, 0x00, 0x20, 0x00, 0xf0, + 0x70, 0xfd, 0x00, 0x21, 0x05, 0x48, 0x3c, 0x00, + 0x94, 0xb6, 0x00, 0x00, 0xfc, 0xf7, 0x9c, 0xfa, + 0x10, 0xbd, 0x1b, 0x21, 0x20, 0x20, 0xf5, 0xf7, + 0x01, 0xfe, 0x10, 0xbd, 0xb4, 0x79, 0x01, 0x00, + 0x51, 0xb6, 0x00, 0x00, 0x09, 0x49, 0x80, 0xb5, + 0x89, 0x78, 0x03, 0x29, 0x09, 0xd1, 0x00, 0xf0, + 0xcd, 0xf9, 0x00, 0x20, 0x00, 0xf0, 0x58, 0xfd, + 0x01, 0x21, 0x05, 0x48, 0xfc, 0xf7, 0x84, 0xfa, + 0x80, 0xbd, 0x17, 0x21, 0x20, 0x20, 0xf5, 0xf7, + 0x3c, 0x00, 0xd0, 0xb6, 0x00, 0x00, 0xe9, 0xfd, + 0x80, 0xbd, 0xb4, 0x79, 0x01, 0x00, 0x51, 0xb6, + 0x00, 0x00, 0x70, 0xb5, 0x10, 0x4c, 0x1d, 0x1c, + 0xa3, 0x78, 0x06, 0x1c, 0x04, 0x98, 0x00, 0x2b, + 0x18, 0xd1, 0x01, 0x23, 0xa3, 0x70, 0x22, 0x61, + 0xe6, 0x60, 0x61, 0x70, 0xa0, 0x60, 0xa5, 0x61, + 0x00, 0x20, 0x07, 0xf0, 0xac, 0xfa, 0xa0, 0x80, + 0x30, 0x1c, 0xf7, 0xf7, 0x3c, 0xfb, 0xe0, 0x80, + 0x07, 0xf0, 0x3c, 0x00, 0x0c, 0xb7, 0x00, 0x00, + 0x4f, 0xfb, 0xc7, 0x21, 0xc9, 0x00, 0x28, 0x1a, + 0x41, 0x1a, 0x00, 0x22, 0x20, 0x20, 0x07, 0xf0, + 0x57, 0xff, 0x70, 0xbd, 0xb4, 0x79, 0x01, 0x00, + 0xb0, 0xb5, 0x04, 0x1c, 0x0d, 0x1c, 0x00, 0xf0, + 0x09, 0xf8, 0x20, 0x1c, 0x00, 0xf0, 0x24, 0xf8, + 0x00, 0x2d, 0x01, 0xd0, 0xff, 0xf7, 0xd4, 0xfe, + 0xb0, 0xbd, 0x00, 0x00, 0xb0, 0xb5, 0x0c, 0x4c, + 0x05, 0x1c, 0xa0, 0x68, 0x3c, 0x00, 0x48, 0xb7, + 0x00, 0x00, 0x00, 0x28, 0x0f, 0xd1, 0x0a, 0x48, + 0x01, 0x7e, 0x02, 0x22, 0x11, 0x40, 0x61, 0x60, + 0x01, 0x7e, 0x11, 0x43, 0x01, 0x76, 0x07, 0x20, + 0x03, 0xf0, 0x49, 0xfc, 0x20, 0x60, 0x03, 0xf0, + 0x98, 0xff, 0x03, 0xf0, 0xee, 0xff, 0xa0, 0x68, + 0x28, 0x43, 0xa0, 0x60, 0xb0, 0xbd, 0x40, 0x7c, + 0x01, 0x00, 0x0c, 0x80, 0x07, 0x00, 0x0a, 0x49, + 0x38, 0xb5, 0x0a, 0x1c, 0x20, 0x32, 0x3c, 0x00, + 0x84, 0xb7, 0x00, 0x00, 0x94, 0x79, 0x00, 0xab, + 0x1c, 0x70, 0xd2, 0x79, 0x07, 0x4c, 0x5a, 0x70, + 0xe2, 0x68, 0x00, 0x2a, 0x02, 0xd1, 0x06, 0x4d, + 0x01, 0x23, 0x6b, 0x70, 0x10, 0x43, 0xe0, 0x60, + 0x00, 0xab, 0x18, 0x88, 0xc8, 0x84, 0x38, 0xbd, + 0x00, 0x10, 0x07, 0x00, 0x40, 0x7c, 0x01, 0x00, + 0x00, 0x50, 0x07, 0x00, 0xb0, 0xb5, 0x05, 0x1c, + 0x00, 0x29, 0x01, 0xd0, 0x00, 0xf0, 0x28, 0xf8, + 0x3c, 0x00, 0xc0, 0xb7, 0x00, 0x00, 0x06, 0x4c, + 0x60, 0x78, 0x21, 0x69, 0x08, 0x43, 0x03, 0xd1, + 0x01, 0x21, 0x0e, 0x20, 0x06, 0xf0, 0xc5, 0xfd, + 0x20, 0x69, 0x28, 0x43, 0x20, 0x61, 0xb0, 0xbd, + 0x00, 0x00, 0x18, 0x63, 0x01, 0x00, 0xb0, 0xb5, + 0x0a, 0x4c, 0x05, 0x1c, 0x22, 0x69, 0x00, 0x20, + 0x00, 0x2a, 0x0c, 0xd1, 0x00, 0x29, 0x00, 0xd0, + 0x04, 0xe0, 0x60, 0x78, 0x00, 0x28, 0x02, 0xd1, + 0x04, 0xf0, 0x3c, 0x00, 0xfc, 0xb7, 0x00, 0x00, + 0x69, 0xfb, 0x60, 0x70, 0x28, 0x1c, 0x06, 0xf0, + 0xef, 0xfc, 0x01, 0x20, 0xb0, 0xbd, 0x00, 0x00, + 0x18, 0x63, 0x01, 0x00, 0x10, 0xb5, 0x08, 0x4c, + 0x60, 0x78, 0x00, 0x28, 0x0a, 0xd0, 0x06, 0xf0, + 0xe3, 0xfc, 0x00, 0x20, 0x60, 0x70, 0x20, 0x69, + 0x00, 0x28, 0x03, 0xd0, 0x01, 0x21, 0x0e, 0x20, + 0x06, 0xf0, 0x96, 0xfd, 0x10, 0xbd, 0x00, 0x00, + 0x18, 0x63, 0x01, 0x00, 0x3c, 0x00, 0x38, 0xb8, + 0x00, 0x00, 0x09, 0x49, 0x80, 0xb5, 0x0b, 0x69, + 0x83, 0x42, 0x04, 0xd1, 0x4a, 0x78, 0x00, 0x2a, + 0x01, 0xd1, 0x01, 0x22, 0x00, 0xe0, 0x00, 0x22, + 0x83, 0x43, 0x0b, 0x61, 0x00, 0x2a, 0x03, 0xd0, + 0x00, 0x21, 0x0e, 0x20, 0x06, 0xf0, 0x7f, 0xfd, + 0x80, 0xbd, 0x18, 0x63, 0x01, 0x00, 0x80, 0xb5, + 0x01, 0x20, 0xf6, 0xf7, 0x56, 0xfe, 0x80, 0xbd, + 0x00, 0x00, 0x10, 0xb5, 0x04, 0x1c, 0x3c, 0x00, + 0x74, 0xb8, 0x00, 0x00, 0x00, 0xf0, 0x04, 0xf8, + 0x20, 0x1c, 0x00, 0xf0, 0x1f, 0xf8, 0x10, 0xbd, + 0xb0, 0xb5, 0x0c, 0x4d, 0x04, 0x1c, 0xa8, 0x68, + 0xa0, 0x42, 0x0f, 0xd1, 0x07, 0x20, 0x29, 0x68, + 0x08, 0xf0, 0x8c, 0xfb, 0x68, 0x68, 0x02, 0x22, + 0x07, 0x49, 0x00, 0x28, 0x08, 0x7e, 0x01, 0xd0, + 0x10, 0x43, 0x00, 0xe0, 0x90, 0x43, 0x08, 0x76, + 0x04, 0xf0, 0xc4, 0xf8, 0xa8, 0x68, 0xa0, 0x43, + 0x3c, 0x00, 0xb0, 0xb8, 0x00, 0x00, 0xa8, 0x60, + 0xb0, 0xbd, 0x40, 0x7c, 0x01, 0x00, 0x0c, 0x80, + 0x07, 0x00, 0x0a, 0x49, 0x38, 0xb5, 0x0a, 0x1c, + 0x20, 0x32, 0x94, 0x79, 0x00, 0xab, 0x1c, 0x70, + 0xd2, 0x79, 0x07, 0x4c, 0x5a, 0x70, 0xe2, 0x68, + 0x82, 0x42, 0x02, 0xd1, 0x06, 0x4d, 0x00, 0x23, + 0x6b, 0x70, 0x82, 0x43, 0xe2, 0x60, 0x00, 0xab, + 0x18, 0x88, 0xc8, 0x84, 0x38, 0xbd, 0x00, 0x10, + 0x07, 0x00, 0x3c, 0x00, 0xec, 0xb8, 0x00, 0x00, + 0x40, 0x7c, 0x01, 0x00, 0x00, 0x50, 0x07, 0x00, + 0xb0, 0xb5, 0x05, 0x1c, 0x0a, 0x4c, 0x00, 0x21, + 0x60, 0x69, 0xff, 0xf7, 0x11, 0xff, 0x04, 0x20, + 0x01, 0xf0, 0x46, 0xf9, 0x01, 0xf0, 0x88, 0xfb, + 0x00, 0x22, 0x04, 0x21, 0x04, 0x20, 0x01, 0xf0, + 0x8b, 0xf8, 0x28, 0x1c, 0x01, 0xf0, 0x4a, 0xfa, + 0x60, 0x69, 0xff, 0xf7, 0xa7, 0xff, 0xb0, 0xbd, + 0x40, 0x7c, 0x01, 0x00, 0x3c, 0x00, 0x28, 0xb9, + 0x00, 0x00, 0x80, 0xb5, 0x01, 0xf0, 0x77, 0xfa, + 0x80, 0xbd, 0xb0, 0xb5, 0x0d, 0x4d, 0x01, 0x21, + 0x28, 0x69, 0xff, 0xf7, 0xf4, 0xfe, 0xff, 0xf7, + 0x2a, 0xfe, 0x00, 0xf0, 0x2c, 0xfb, 0x00, 0xf0, + 0x84, 0xfa, 0x00, 0x24, 0x00, 0x22, 0x04, 0x21, + 0x20, 0x1c, 0x01, 0xf0, 0x6c, 0xf8, 0x01, 0x34, + 0x24, 0x06, 0x24, 0x0e, 0x04, 0x2c, 0xf5, 0xd3, + 0x28, 0x69, 0xff, 0xf7, 0x86, 0xff, 0x3c, 0x00, + 0x64, 0xb9, 0x00, 0x00, 0xb0, 0xbd, 0x00, 0x00, + 0x40, 0x7c, 0x01, 0x00, 0xf8, 0xb5, 0x05, 0x1c, + 0x0e, 0x1c, 0x07, 0x4c, 0x17, 0x1c, 0x01, 0x21, + 0x20, 0x69, 0xff, 0xf7, 0xd3, 0xfe, 0x3a, 0x1c, + 0x31, 0x1c, 0x28, 0x1c, 0x01, 0xf0, 0x52, 0xf8, + 0x20, 0x69, 0xff, 0xf7, 0x71, 0xff, 0xf8, 0xbd, + 0x40, 0x7c, 0x01, 0x00, 0xff, 0xb5, 0x89, 0xb0, + 0x06, 0x1c, 0x16, 0x98, 0x1d, 0x1c, 0x00, 0x28, + 0x3c, 0x00, 0xa0, 0xb9, 0x00, 0x00, 0x01, 0xd0, + 0x29, 0x48, 0x14, 0x90, 0x28, 0x68, 0x00, 0x88, + 0x00, 0x06, 0x80, 0x0e, 0x20, 0x28, 0x01, 0xd0, + 0x14, 0x28, 0x17, 0xd1, 0x0a, 0xaa, 0x18, 0x24, + 0x18, 0x21, 0x05, 0xca, 0xff, 0xf7, 0x77, 0xf9, + 0x07, 0x1c, 0x28, 0x1c, 0x01, 0x89, 0xa1, 0x42, + 0x02, 0xdd, 0x00, 0x68, 0x01, 0x19, 0x0b, 0xe0, + 0xc0, 0x68, 0x64, 0x1a, 0x00, 0x28, 0xf5, 0xd1, + 0x0f, 0x21, 0x3c, 0x00, 0xdc, 0xb9, 0x00, 0x00, + 0x86, 0x20, 0xf5, 0xf7, 0x61, 0xfc, 0x00, 0x21, + 0x01, 0xe0, 0x00, 0x21, 0x00, 0x27, 0x18, 0x48, + 0x08, 0x90, 0x80, 0x79, 0x07, 0x90, 0x0c, 0x20, + 0x16, 0x4a, 0x70, 0x43, 0x80, 0x18, 0x04, 0x79, + 0x04, 0x91, 0x12, 0x99, 0x15, 0x98, 0x14, 0x9a, + 0x01, 0x91, 0x03, 0x90, 0x05, 0x97, 0x00, 0x95, + 0x0a, 0xab, 0x02, 0x92, 0x21, 0x1c, 0x30, 0x1c, + 0x0c, 0xcb, 0xf7, 0xf7, 0x3c, 0x00, 0x18, 0xba, + 0x00, 0x00, 0x03, 0xf9, 0x01, 0x25, 0xb5, 0x40, + 0x0c, 0x4e, 0x08, 0x3e, 0x30, 0x78, 0x28, 0x40, + 0x06, 0xd0, 0x20, 0x1c, 0x00, 0xf0, 0xc9, 0xfd, + 0x30, 0x78, 0xa8, 0x43, 0x30, 0x70, 0x03, 0xe0, + 0x20, 0x1c, 0x13, 0x99, 0x00, 0xf0, 0x43, 0xff, + 0x07, 0xa9, 0x03, 0xc9, 0x88, 0x71, 0x0d, 0xb0, + 0xf0, 0xbd, 0x95, 0x24, 0x00, 0x00, 0x20, 0x10, + 0x07, 0x00, 0x74, 0x7a, 0x01, 0x00, 0x3c, 0x00, + 0x54, 0xba, 0x00, 0x00, 0xb0, 0xb5, 0x04, 0x1c, + 0x0c, 0x23, 0x09, 0x49, 0x58, 0x43, 0x40, 0x18, + 0x00, 0x79, 0x05, 0x1c, 0x00, 0xf0, 0x92, 0xfe, + 0x28, 0x1c, 0xf7, 0xf7, 0xc7, 0xf8, 0x01, 0x20, + 0x03, 0x4a, 0xa0, 0x40, 0x08, 0x3a, 0x11, 0x78, + 0x81, 0x43, 0x11, 0x70, 0xb0, 0xbd, 0x00, 0x00, + 0x74, 0x7a, 0x01, 0x00, 0x10, 0xb5, 0x05, 0x4c, + 0x20, 0x78, 0x00, 0x28, 0x03, 0xd1, 0x1a, 0x21, + 0x3c, 0x00, 0x90, 0xba, 0x00, 0x00, 0x86, 0x20, + 0xf5, 0xf7, 0x07, 0xfc, 0x20, 0x78, 0x10, 0xbd, + 0x00, 0x00, 0x18, 0x63, 0x01, 0x00, 0x01, 0x48, + 0x40, 0x78, 0x70, 0x47, 0x00, 0x00, 0x2c, 0x63, + 0x01, 0x00, 0x80, 0xb5, 0xf6, 0xf7, 0xd1, 0xfe, + 0x00, 0xf0, 0x1b, 0xf9, 0x80, 0xbd, 0xfe, 0xb5, + 0x01, 0x68, 0x05, 0x1c, 0x0c, 0x68, 0x0e, 0x1c, + 0x21, 0x78, 0x88, 0x07, 0x71, 0xd1, 0x68, 0x69, + 0xc2, 0x07, 0x3c, 0x00, 0xcc, 0xba, 0x00, 0x00, + 0x6e, 0xd5, 0x80, 0x07, 0x6d, 0xd5, 0xe8, 0x7a, + 0xc2, 0x07, 0x08, 0x07, 0x09, 0x09, 0x02, 0x91, + 0x45, 0x49, 0x80, 0x0f, 0xd2, 0x0f, 0x00, 0x28, + 0x4f, 0x68, 0x05, 0xd0, 0x01, 0x28, 0x09, 0xd0, + 0x02, 0x28, 0x21, 0xd0, 0x03, 0x28, 0x5b, 0xd1, + 0xff, 0x23, 0x20, 0x1c, 0xa9, 0x7a, 0xf4, 0xf7, + 0x74, 0xfc, 0x55, 0xe0, 0x02, 0x98, 0x0b, 0x28, + 0x0a, 0xd0, 0x0c, 0x28, 0x3c, 0x00, 0x08, 0xbb, + 0x00, 0x00, 0x0f, 0xd0, 0x0d, 0x28, 0x4e, 0xd1, + 0x39, 0x4f, 0xf8, 0x68, 0xf4, 0xf7, 0x61, 0xfc, + 0x00, 0x20, 0xc0, 0x43, 0x5a, 0xe0, 0x35, 0x4f, + 0xa9, 0x7a, 0xbb, 0x68, 0x20, 0x1c, 0xf4, 0xf7, + 0x5b, 0xfc, 0x40, 0xe0, 0x32, 0x4f, 0x38, 0x69, + 0xf4, 0xf7, 0x53, 0xfc, 0x3b, 0xe0, 0x00, 0x21, + 0x01, 0x91, 0x02, 0x99, 0x00, 0x20, 0xff, 0x23, + 0x09, 0x07, 0x01, 0xd4, 0x01, 0x20, 0x3c, 0x00, + 0x44, 0xbb, 0x00, 0x00, 0x13, 0xe0, 0x31, 0x89, + 0x19, 0x29, 0x01, 0xd3, 0x26, 0x7e, 0x07, 0xe0, + 0x15, 0x29, 0x04, 0xd3, 0x18, 0x26, 0x71, 0x1a, + 0x49, 0x19, 0x0e, 0x7b, 0x00, 0xe0, 0x00, 0x26, + 0xb1, 0x06, 0x02, 0xd4, 0x01, 0x20, 0x73, 0x07, + 0x5b, 0x0f, 0x01, 0x21, 0x01, 0x91, 0x00, 0x28, + 0x03, 0xd0, 0xa9, 0x7a, 0x20, 0x1c, 0xf4, 0xf7, + 0x36, 0xfc, 0x01, 0x99, 0x01, 0x29, 0x15, 0xd1, + 0x3c, 0x00, 0x80, 0xbb, 0x00, 0x00, 0xf0, 0x06, + 0xc6, 0x0f, 0x20, 0x88, 0x1b, 0x4f, 0xe4, 0x8a, + 0xf9, 0x6b, 0x00, 0x05, 0xc0, 0x0f, 0x00, 0x29, + 0x1a, 0xd0, 0x4b, 0x1c, 0x18, 0xd0, 0x00, 0x2e, + 0x0a, 0xd0, 0x00, 0x28, 0x08, 0xd0, 0x38, 0x88, + 0x84, 0x42, 0x13, 0xd0, 0x02, 0x98, 0x0c, 0x28, + 0x01, 0xe0, 0x1d, 0xe0, 0x12, 0xe0, 0x0d, 0xd0, + 0x08, 0x1c, 0x01, 0xf0, 0x76, 0xf9, 0x00, 0x28, + 0x03, 0xd1, 0x3c, 0x00, 0xbc, 0xbb, 0x00, 0x00, + 0x00, 0xf0, 0xa6, 0xfa, 0xf4, 0xf7, 0x0a, 0xfc, + 0x00, 0x20, 0xc0, 0x43, 0xf8, 0x63, 0x00, 0x2e, + 0x0d, 0xd0, 0x3c, 0x80, 0x00, 0x20, 0xf8, 0x63, + 0x09, 0xe0, 0x20, 0x88, 0x00, 0x06, 0x80, 0x0e, + 0x20, 0x28, 0x04, 0xd1, 0x04, 0x4f, 0x20, 0x1c, + 0xb9, 0x6a, 0xf4, 0xf7, 0xf8, 0xfb, 0x29, 0x1c, + 0x02, 0x48, 0xfb, 0xf7, 0xef, 0xff, 0xfe, 0xbd, + 0x28, 0x7a, 0x01, 0x00, 0x3c, 0x00, 0xf8, 0xbb, + 0x00, 0x00, 0xa5, 0x9a, 0x00, 0x00, 0x03, 0x48, + 0x80, 0xb5, 0x00, 0x78, 0x00, 0x21, 0x00, 0xf0, + 0xfc, 0xfb, 0x80, 0xbd, 0x00, 0x00, 0x18, 0x63, + 0x01, 0x00, 0x04, 0x4b, 0x05, 0x49, 0x00, 0x28, + 0x1a, 0x68, 0x00, 0xd0, 0x01, 0x1c, 0x10, 0x1c, + 0x19, 0x60, 0x70, 0x47, 0x00, 0x00, 0xd4, 0x79, + 0x01, 0x00, 0x95, 0x75, 0x00, 0x00, 0x05, 0x48, + 0x80, 0xb5, 0x00, 0x7f, 0x24, 0x23, 0x3c, 0x00, + 0x34, 0xbc, 0x00, 0x00, 0x04, 0x49, 0x58, 0x43, + 0x40, 0x18, 0xc0, 0x69, 0xf4, 0xf7, 0xcc, 0xfb, + 0x80, 0xbd, 0x00, 0x00, 0xd4, 0x79, 0x01, 0x00, + 0x94, 0x46, 0x01, 0x00, 0x02, 0x1c, 0x06, 0x48, + 0x80, 0xb5, 0x81, 0x62, 0x82, 0x60, 0x00, 0x7f, + 0x24, 0x23, 0x04, 0x49, 0x58, 0x43, 0x40, 0x18, + 0x80, 0x69, 0xf4, 0xf7, 0xb9, 0xfb, 0x80, 0xbd, + 0xd4, 0x79, 0x01, 0x00, 0x94, 0x46, 0x01, 0x00, + 0x3c, 0x00, 0x70, 0xbc, 0x00, 0x00, 0x80, 0xb5, + 0x00, 0x20, 0x00, 0xf0, 0x3c, 0xfb, 0x00, 0x20, + 0x00, 0xf0, 0x6d, 0xfa, 0x00, 0xf0, 0x65, 0xfa, + 0x04, 0x49, 0xc8, 0x6a, 0x01, 0x30, 0xc8, 0x62, + 0x08, 0x1f, 0x00, 0x88, 0x07, 0xf0, 0xc1, 0xf8, + 0x80, 0xbd, 0xd4, 0x79, 0x01, 0x00, 0x06, 0x48, + 0x80, 0xb5, 0x00, 0x21, 0x01, 0x77, 0xc1, 0x6a, + 0x01, 0x31, 0xc1, 0x62, 0x04, 0x38, 0x00, 0x88, + 0x07, 0xf0, 0x3c, 0x00, 0xac, 0xbc, 0x00, 0x00, + 0xb3, 0xf8, 0x03, 0xf0, 0xd1, 0xf9, 0x80, 0xbd, + 0xd4, 0x79, 0x01, 0x00, 0x80, 0xb5, 0x05, 0xf0, + 0xe9, 0xfa, 0x80, 0xbd, 0x80, 0xb5, 0x00, 0x28, + 0x03, 0xd1, 0x01, 0x20, 0x04, 0xf0, 0x22, 0xfa, + 0x80, 0xbd, 0x01, 0x20, 0x03, 0xf0, 0xe6, 0xfb, + 0x80, 0xbd, 0x00, 0x00, 0x03, 0x49, 0x01, 0x20, + 0x49, 0x78, 0x00, 0x29, 0x00, 0xd0, 0x00, 0x20, + 0x70, 0x47, 0x00, 0x00, 0x3c, 0x00, 0xe8, 0xbc, + 0x00, 0x00, 0x2c, 0x63, 0x01, 0x00, 0x70, 0xb5, + 0x13, 0x4d, 0x28, 0x78, 0x00, 0x28, 0x20, 0xd1, + 0x01, 0x21, 0x2e, 0x1c, 0x70, 0x68, 0xff, 0xf7, + 0x12, 0xfd, 0x00, 0x21, 0x07, 0x20, 0x06, 0xf0, + 0x2a, 0xfb, 0x0d, 0x48, 0x00, 0x24, 0x04, 0x71, + 0x04, 0xf0, 0xed, 0xf8, 0x06, 0xf0, 0xd5, 0xf9, + 0x01, 0x20, 0x28, 0x70, 0x0a, 0x48, 0x04, 0x60, + 0x44, 0x60, 0xf6, 0xf7, 0x4c, 0xfd, 0x3c, 0x00, + 0x24, 0xbd, 0x00, 0x00, 0xf7, 0xf7, 0x5e, 0xf8, + 0xff, 0xf7, 0xa2, 0xff, 0x00, 0xf0, 0xa8, 0xfd, + 0x05, 0x48, 0x71, 0x68, 0x03, 0xf0, 0x20, 0xfb, + 0x01, 0x20, 0x70, 0xbd, 0x2c, 0x63, 0x01, 0x00, + 0x50, 0x00, 0x07, 0x00, 0x80, 0x00, 0x07, 0x00, + 0xc4, 0x60, 0x01, 0x00, 0xb0, 0xb5, 0x1e, 0x4c, + 0x20, 0x78, 0x01, 0x28, 0x35, 0xd1, 0x25, 0x1c, + 0x69, 0x68, 0x1c, 0x48, 0x03, 0xf0, 0x20, 0xfb, + 0x3c, 0x00, 0x60, 0xbd, 0x00, 0x00, 0x04, 0xf0, + 0xf0, 0xf8, 0x1a, 0x48, 0x01, 0x68, 0x49, 0x08, + 0x49, 0x00, 0x01, 0x60, 0x01, 0x68, 0x01, 0x22, + 0x11, 0x43, 0x01, 0x60, 0x00, 0xf0, 0x2b, 0xfe, + 0x00, 0xf0, 0x1b, 0xfc, 0x06, 0xf0, 0x99, 0xf8, + 0xf6, 0xf7, 0x29, 0xfe, 0xf6, 0xf7, 0x2d, 0xfc, + 0x00, 0x20, 0x20, 0x70, 0xff, 0xf7, 0x83, 0xff, + 0x00, 0xf0, 0x8b, 0xfd, 0x0f, 0x48, 0x81, 0x78, + 0x08, 0x22, 0x3c, 0x00, 0x9c, 0xbd, 0x00, 0x00, + 0x91, 0x43, 0x81, 0x70, 0x81, 0x78, 0x11, 0x43, + 0x81, 0x70, 0x0c, 0x49, 0x10, 0x20, 0x08, 0x71, + 0x68, 0x68, 0xff, 0xf7, 0x5f, 0xfd, 0xf7, 0xf7, + 0x39, 0xf8, 0xf6, 0xf7, 0x4d, 0xfd, 0x01, 0x21, + 0x07, 0x20, 0x06, 0xf0, 0xcd, 0xfa, 0x01, 0x20, + 0xb0, 0xbd, 0x00, 0x00, 0x2c, 0x63, 0x01, 0x00, + 0xc4, 0x60, 0x01, 0x00, 0xf0, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x3c, 0x00, 0xd8, 0xbd, + 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x03, 0x49, + 0x01, 0x20, 0x89, 0x7a, 0x01, 0x29, 0x00, 0xd0, + 0x00, 0x20, 0x70, 0x47, 0x00, 0x00, 0x14, 0x7a, + 0x01, 0x00, 0xb0, 0xb5, 0x15, 0x4d, 0x04, 0x1c, + 0x28, 0x7a, 0x00, 0x28, 0x20, 0xd1, 0xf9, 0xf7, + 0x00, 0xfc, 0x02, 0x28, 0x1c, 0xd1, 0x01, 0x20, + 0x28, 0x72, 0xe8, 0x68, 0x00, 0x28, 0x10, 0xd0, + 0x20, 0x68, 0x29, 0x68, 0x08, 0x60, 0x3c, 0x00, + 0x14, 0xbe, 0x00, 0x00, 0x69, 0x68, 0x0d, 0x48, + 0x03, 0xf0, 0xc2, 0xfa, 0x01, 0x21, 0x68, 0x68, + 0xff, 0xf7, 0xc8, 0xfc, 0x00, 0x22, 0x24, 0x20, + 0x61, 0x68, 0x07, 0xf0, 0xcf, 0xfb, 0xb0, 0xbd, + 0x00, 0x20, 0x28, 0x72, 0x21, 0x68, 0x01, 0x20, + 0xf4, 0xf7, 0xcf, 0xfa, 0xb0, 0xbd, 0x00, 0x20, + 0x21, 0x68, 0xf4, 0xf7, 0xca, 0xfa, 0xb0, 0xbd, + 0x04, 0x7a, 0x01, 0x00, 0x34, 0x63, 0x01, 0x00, + 0x3c, 0x00, 0x50, 0xbe, 0x00, 0x00, 0x04, 0x48, + 0x80, 0xb5, 0x00, 0x7a, 0x01, 0x28, 0x02, 0xd1, + 0x00, 0x20, 0x02, 0xf0, 0xf0, 0xfe, 0x80, 0xbd, + 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x80, 0xb5, + 0x01, 0x28, 0x07, 0xd0, 0x80, 0x28, 0x09, 0xd1, + 0x07, 0x48, 0x00, 0x7a, 0x00, 0x28, 0x04, 0xd0, + 0x01, 0x20, 0x00, 0xe0, 0x00, 0x20, 0x02, 0xf0, + 0xde, 0xfe, 0x80, 0xbd, 0x0e, 0x21, 0x24, 0x20, + 0xf5, 0xf7, 0x3c, 0x00, 0x8c, 0xbe, 0x00, 0x00, + 0x0b, 0xfa, 0x80, 0xbd, 0x04, 0x7a, 0x01, 0x00, + 0xf8, 0xb5, 0x3a, 0x4e, 0x05, 0x1c, 0xb0, 0x7a, + 0x00, 0x28, 0x69, 0xd1, 0xf9, 0xf7, 0xae, 0xfb, + 0x02, 0x28, 0x65, 0xd1, 0x36, 0x48, 0x00, 0x68, + 0x00, 0x28, 0x61, 0xd0, 0x35, 0x48, 0x71, 0x68, + 0x03, 0xf0, 0x74, 0xfa, 0x01, 0x21, 0x70, 0x68, + 0xff, 0xf7, 0x7a, 0xfc, 0x6c, 0x20, 0xf5, 0xf7, + 0xb9, 0xfc, 0x04, 0x1c, 0x3c, 0x00, 0xc8, 0xbe, + 0x00, 0x00, 0x6c, 0x21, 0xf4, 0xf7, 0xe7, 0xfa, + 0x30, 0x68, 0x2c, 0x22, 0x04, 0x60, 0x29, 0x68, + 0x81, 0x60, 0x69, 0x68, 0xc1, 0x60, 0x00, 0x21, + 0x11, 0x54, 0x81, 0x62, 0xa9, 0x68, 0x00, 0x29, + 0x02, 0xd0, 0xe9, 0x68, 0x01, 0x61, 0x05, 0xe0, + 0x06, 0xf0, 0x5d, 0xff, 0x69, 0x68, 0x40, 0x18, + 0x31, 0x68, 0x08, 0x61, 0x70, 0x68, 0xff, 0xf7, + 0x14, 0xfd, 0x69, 0x21, 0x08, 0x55, 0x3c, 0x00, + 0x04, 0xbf, 0x00, 0x00, 0x00, 0x20, 0xf9, 0xf7, + 0x09, 0xfb, 0x01, 0x27, 0x3b, 0x1c, 0x06, 0x1c, + 0x22, 0x1c, 0x24, 0x32, 0x00, 0x21, 0xf9, 0xf7, + 0x79, 0xfb, 0x1c, 0x48, 0x03, 0x21, 0x00, 0x88, + 0x89, 0x03, 0x08, 0x43, 0x21, 0x1c, 0x40, 0x31, + 0x00, 0x91, 0x48, 0x83, 0x18, 0x48, 0x10, 0x21, + 0x60, 0x60, 0x18, 0x48, 0xa0, 0x60, 0xa7, 0x63, + 0x67, 0x63, 0x00, 0x20, 0xf5, 0xf7, 0x4c, 0xfb, + 0x3c, 0x00, 0x40, 0xbf, 0x00, 0x00, 0xe0, 0x60, + 0x02, 0x89, 0x00, 0x99, 0xca, 0x83, 0x07, 0x68, + 0x31, 0x1c, 0x38, 0x1d, 0x27, 0x61, 0xfe, 0xf7, + 0x8e, 0xfe, 0x38, 0x1c, 0x0a, 0x30, 0x0f, 0x49, + 0xfe, 0xf7, 0x89, 0xfe, 0xa4, 0x20, 0x38, 0x80, + 0x00, 0x20, 0x04, 0xf0, 0xde, 0xfb, 0x00, 0x22, + 0x1f, 0x20, 0x69, 0x68, 0x07, 0xf0, 0x2d, 0xfb, + 0xf8, 0xbd, 0xff, 0xe7, 0x00, 0x20, 0x29, 0x68, + 0xf4, 0xf7, 0x3c, 0x00, 0x7c, 0xbf, 0x00, 0x00, + 0x2e, 0xfa, 0xf8, 0xe7, 0x14, 0x7a, 0x01, 0x00, + 0x80, 0x5a, 0x01, 0x00, 0x34, 0x63, 0x01, 0x00, + 0xfa, 0x60, 0x01, 0x00, 0x99, 0xec, 0x00, 0x00, + 0x15, 0xed, 0x00, 0x00, 0x12, 0x61, 0x01, 0x00, + 0x06, 0x48, 0x80, 0xb5, 0x81, 0x7a, 0x00, 0x29, + 0x07, 0xd0, 0x00, 0x68, 0x04, 0x22, 0x20, 0x30, + 0x01, 0x7b, 0x11, 0x43, 0x01, 0x73, 0x02, 0xf0, + 0x6b, 0xfd, 0x80, 0xbd, 0x3c, 0x00, 0xb8, 0xbf, + 0x00, 0x00, 0x14, 0x7a, 0x01, 0x00, 0x10, 0xb5, + 0x04, 0x4c, 0xa0, 0x7a, 0x01, 0x28, 0x03, 0xd1, + 0x06, 0xf0, 0xf1, 0xfe, 0x21, 0x68, 0x88, 0x61, + 0x10, 0xbd, 0x14, 0x7a, 0x01, 0x00, 0x03, 0x1c, + 0x08, 0x1c, 0x1f, 0x49, 0x70, 0xb5, 0x0a, 0x68, + 0x01, 0x2b, 0x1c, 0xd0, 0x80, 0x2b, 0x05, 0xd0, + 0x83, 0x2b, 0x30, 0xd1, 0x88, 0x7a, 0x00, 0x28, + 0x14, 0xd0, 0x29, 0xe0, 0x53, 0x69, 0x3c, 0x00, + 0xf4, 0xbf, 0x00, 0x00, 0x00, 0x2b, 0x0e, 0xd0, + 0x94, 0x69, 0xd5, 0x69, 0x2e, 0x1b, 0x0c, 0x69, + 0x5d, 0x1b, 0x36, 0x1b, 0xb6, 0x10, 0xa4, 0x19, + 0x0c, 0x61, 0xcc, 0x68, 0x2d, 0x1b, 0xad, 0x10, + 0x64, 0x19, 0xcc, 0x60, 0x93, 0x61, 0x02, 0xf0, + 0x81, 0xfd, 0x70, 0xbd, 0x02, 0x28, 0x12, 0xd1, + 0x90, 0x6a, 0x0c, 0x1c, 0x00, 0x28, 0xf8, 0xd0, + 0x07, 0xf0, 0x0e, 0xfa, 0xa0, 0x7a, 0x01, 0x28, + 0x3c, 0x00, 0x30, 0xc0, 0x00, 0x00, 0xf3, 0xd1, + 0x20, 0x68, 0x81, 0x6a, 0x00, 0x29, 0xef, 0xd1, + 0x20, 0x30, 0x01, 0x7b, 0x08, 0x22, 0x11, 0x43, + 0x01, 0x73, 0x70, 0xbd, 0x02, 0xf0, 0x21, 0xfd, + 0x70, 0xbd, 0x0e, 0x21, 0x1f, 0x20, 0xf5, 0xf7, + 0x28, 0xf9, 0x70, 0xbd, 0x00, 0x00, 0x14, 0x7a, + 0x01, 0x00, 0x02, 0x49, 0x0c, 0x31, 0x03, 0xc9, + 0x40, 0x18, 0x70, 0x47, 0x00, 0x00, 0x14, 0x7a, + 0x01, 0x00, 0x3c, 0x00, 0x6c, 0xc0, 0x00, 0x00, + 0x05, 0x48, 0x80, 0xb5, 0x00, 0x68, 0x04, 0x22, + 0x20, 0x30, 0x01, 0x7b, 0x11, 0x43, 0x01, 0x73, + 0x07, 0xf0, 0xe4, 0xf9, 0x80, 0xbd, 0x00, 0x00, + 0x14, 0x7a, 0x01, 0x00, 0x70, 0xb5, 0x16, 0x4c, + 0x0e, 0x1c, 0xa1, 0x7a, 0x00, 0x29, 0x1c, 0xd0, + 0x21, 0x68, 0x08, 0x61, 0x07, 0xf0, 0x32, 0xfa, + 0x00, 0x28, 0x17, 0xd0, 0x20, 0x68, 0x00, 0x25, + 0x05, 0x62, 0x00, 0x22, 0x3c, 0x00, 0xa8, 0xc0, + 0x00, 0x00, 0x83, 0x21, 0x1f, 0x20, 0x07, 0xf0, + 0x94, 0xfa, 0x60, 0x68, 0xff, 0xf7, 0x03, 0xfc, + 0x21, 0x68, 0x04, 0x22, 0x20, 0x31, 0x08, 0x7b, + 0x2b, 0x1c, 0x90, 0x43, 0x08, 0x73, 0x31, 0x1c, + 0x00, 0x22, 0x1f, 0x20, 0x07, 0xf0, 0x61, 0xfb, + 0x70, 0xbd, 0x20, 0x68, 0x08, 0x22, 0x20, 0x30, + 0x01, 0x7b, 0x11, 0x43, 0x01, 0x73, 0x02, 0xf0, + 0xd6, 0xfc, 0x70, 0xbd, 0x00, 0x00, 0x3c, 0x00, + 0xe4, 0xc0, 0x00, 0x00, 0x14, 0x7a, 0x01, 0x00, + 0x80, 0xb5, 0x00, 0xf0, 0x77, 0xfc, 0x00, 0xf0, + 0x6f, 0xfc, 0x00, 0xf0, 0x29, 0xff, 0x00, 0xf0, + 0x5d, 0xfa, 0x00, 0xf0, 0xc5, 0xf8, 0x00, 0xf0, + 0x85, 0xff, 0x80, 0xbd, 0x80, 0xb5, 0xfa, 0xf7, + 0x85, 0xfa, 0x80, 0xbd, 0x01, 0x48, 0xc0, 0x68, + 0x70, 0x47, 0x00, 0x00, 0x28, 0x7a, 0x01, 0x00, + 0x03, 0x49, 0x00, 0x28, 0x00, 0xd0, 0x01, 0x1c, + 0x3c, 0x00, 0x20, 0xc1, 0x00, 0x00, 0x02, 0x48, + 0xc1, 0x60, 0x70, 0x47, 0x00, 0x00, 0x81, 0x75, + 0x00, 0x00, 0x28, 0x7a, 0x01, 0x00, 0x01, 0x48, + 0x02, 0x49, 0xc8, 0x60, 0x70, 0x47, 0x81, 0x75, + 0x00, 0x00, 0x28, 0x7a, 0x01, 0x00, 0x01, 0x49, + 0x88, 0x61, 0x70, 0x47, 0x00, 0x00, 0x28, 0x7a, + 0x01, 0x00, 0x01, 0x49, 0x00, 0x20, 0x88, 0x61, + 0x70, 0x47, 0x28, 0x7a, 0x01, 0x00, 0x03, 0x49, + 0x00, 0x28, 0x3c, 0x00, 0x5c, 0xc1, 0x00, 0x00, + 0x00, 0xd0, 0x01, 0x1c, 0x02, 0x48, 0xc1, 0x61, + 0x70, 0x47, 0x00, 0x00, 0x89, 0x75, 0x00, 0x00, + 0x28, 0x7a, 0x01, 0x00, 0x03, 0x49, 0x00, 0x28, + 0x00, 0xd0, 0x01, 0x1c, 0x02, 0x48, 0x81, 0x62, + 0x70, 0x47, 0x00, 0x00, 0x8d, 0x75, 0x00, 0x00, + 0x28, 0x7a, 0x01, 0x00, 0x03, 0x49, 0x00, 0x28, + 0x00, 0xd0, 0x01, 0x1c, 0x02, 0x48, 0x01, 0x62, + 0x70, 0x47, 0x00, 0x00, 0x3c, 0x00, 0x98, 0xc1, + 0x00, 0x00, 0x91, 0x75, 0x00, 0x00, 0x28, 0x7a, + 0x01, 0x00, 0x03, 0x49, 0x00, 0x28, 0x00, 0xd0, + 0x01, 0x1c, 0x02, 0x48, 0x01, 0x61, 0x70, 0x47, + 0x00, 0x00, 0x99, 0x75, 0x00, 0x00, 0x28, 0x7a, + 0x01, 0x00, 0x01, 0x48, 0x02, 0x49, 0x08, 0x61, + 0x70, 0x47, 0x81, 0x75, 0x00, 0x00, 0x28, 0x7a, + 0x01, 0x00, 0x02, 0x1c, 0x08, 0x1c, 0x80, 0x2a, + 0x80, 0xb5, 0x02, 0xd1, 0x00, 0xf0, 0x3c, 0x00, + 0xd4, 0xc1, 0x00, 0x00, 0x07, 0xf8, 0x80, 0xbd, + 0x1e, 0x21, 0x21, 0x20, 0xf5, 0xf7, 0x62, 0xf8, + 0x80, 0xbd, 0x00, 0x00, 0xb0, 0xb5, 0x10, 0x4d, + 0x04, 0x1c, 0xa8, 0x6b, 0x01, 0x30, 0xa8, 0x63, + 0x69, 0x6b, 0x09, 0x1a, 0x28, 0x1c, 0x00, 0x6b, + 0x0c, 0x29, 0x03, 0xd9, 0x00, 0x21, 0xff, 0xf7, + 0x91, 0xfa, 0x03, 0xe0, 0x08, 0x29, 0x01, 0xd1, + 0xff, 0xf7, 0x32, 0xfb, 0x20, 0x1c, 0x00, 0xf0, + 0x3c, 0x00, 0x10, 0xc2, 0x00, 0x00, 0x4d, 0xf9, + 0x60, 0x69, 0x40, 0x07, 0x01, 0xd5, 0x03, 0xf0, + 0x0c, 0xfc, 0x20, 0x1c, 0xe9, 0x6a, 0xf4, 0xf7, + 0xdb, 0xf8, 0xb0, 0xbd, 0x00, 0x00, 0x28, 0x7a, + 0x01, 0x00, 0x03, 0x49, 0x00, 0x28, 0x00, 0xd0, + 0x01, 0x1c, 0x02, 0x48, 0x41, 0x62, 0x70, 0x47, + 0x00, 0x00, 0xb5, 0x75, 0x00, 0x00, 0x28, 0x7a, + 0x01, 0x00, 0x03, 0x49, 0x01, 0x20, 0x09, 0x6c, + 0x00, 0x29, 0x3c, 0x00, 0x4c, 0xc2, 0x00, 0x00, + 0x00, 0xd1, 0x00, 0x20, 0x70, 0x47, 0x00, 0x00, + 0x28, 0x7a, 0x01, 0x00, 0x10, 0xb5, 0x07, 0x4c, + 0xe1, 0x6b, 0x00, 0x29, 0x01, 0xd1, 0xe0, 0x63, + 0x04, 0xe0, 0x81, 0x42, 0x02, 0xd0, 0x00, 0x20, + 0xc0, 0x43, 0xf8, 0xe7, 0x06, 0xf0, 0x9c, 0xfd, + 0x20, 0x64, 0x10, 0xbd, 0x28, 0x7a, 0x01, 0x00, + 0x01, 0x48, 0x00, 0x6c, 0x70, 0x47, 0x00, 0x00, + 0x28, 0x7a, 0x01, 0x00, 0x3c, 0x00, 0x88, 0xc2, + 0x00, 0x00, 0x05, 0x49, 0x80, 0xb5, 0x00, 0x20, + 0x48, 0x63, 0x88, 0x63, 0xff, 0x21, 0x09, 0x31, + 0x15, 0x22, 0x10, 0x20, 0xf6, 0xf7, 0xfb, 0xf9, + 0x80, 0xbd, 0x28, 0x7a, 0x01, 0x00, 0x03, 0x49, + 0x00, 0x28, 0x00, 0xd0, 0x01, 0x1c, 0x02, 0x48, + 0x81, 0x60, 0x70, 0x47, 0x00, 0x00, 0xc1, 0x75, + 0x00, 0x00, 0x28, 0x7a, 0x01, 0x00, 0x03, 0x49, + 0x00, 0x28, 0x00, 0xd0, 0x01, 0x1c, 0x3c, 0x00, + 0xc4, 0xc2, 0x00, 0x00, 0x02, 0x48, 0xc1, 0x62, + 0x70, 0x47, 0x00, 0x00, 0xc5, 0x75, 0x00, 0x00, + 0x28, 0x7a, 0x01, 0x00, 0x04, 0x4b, 0x05, 0x49, + 0x00, 0x28, 0x5a, 0x68, 0x00, 0xd0, 0x01, 0x1c, + 0x10, 0x1c, 0x59, 0x60, 0x70, 0x47, 0x00, 0x00, + 0x28, 0x7a, 0x01, 0x00, 0xc9, 0x75, 0x00, 0x00, + 0x03, 0x49, 0x00, 0x28, 0x00, 0xd0, 0x01, 0x1c, + 0x02, 0x48, 0x41, 0x61, 0x70, 0x47, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0xc3, 0x00, 0x00, 0xcd, 0x75, + 0x00, 0x00, 0x28, 0x7a, 0x01, 0x00, 0x0f, 0x4b, + 0x10, 0xb5, 0xd9, 0x68, 0x00, 0x29, 0x19, 0xd0, + 0x0e, 0x4c, 0x00, 0x21, 0xca, 0x00, 0x12, 0x19, + 0x40, 0x3a, 0xd2, 0x6b, 0x82, 0x42, 0x02, 0xda, + 0x01, 0x31, 0x03, 0x29, 0xf6, 0xd3, 0x48, 0x1c, + 0x1a, 0x78, 0x00, 0x06, 0x00, 0x0e, 0x90, 0x42, + 0x08, 0xd0, 0x18, 0x70, 0x08, 0x06, 0x00, 0x0e, + 0x04, 0x1c, 0x3c, 0x00, 0x3c, 0xc3, 0x00, 0x00, + 0xf6, 0xf7, 0xba, 0xfa, 0x20, 0x1c, 0x03, 0xf0, + 0x1b, 0xfd, 0x10, 0xbd, 0x18, 0x63, 0x01, 0x00, + 0x3c, 0x42, 0x01, 0x00, 0x10, 0xb5, 0x14, 0x4c, + 0xe1, 0x68, 0x00, 0x29, 0x22, 0xd0, 0x21, 0x78, + 0x12, 0x4b, 0xca, 0x00, 0xd2, 0x18, 0x40, 0x3a, + 0xd3, 0x6b, 0x83, 0x42, 0x02, 0xda, 0x48, 0x1c, + 0x20, 0x70, 0x0b, 0xe0, 0x92, 0x6b, 0x82, 0x42, + 0x14, 0xdd, 0xff, 0x31, 0x3c, 0x00, 0x78, 0xc3, + 0x00, 0x00, 0x08, 0x06, 0x00, 0x0e, 0x20, 0x70, + 0x03, 0xd1, 0x19, 0x21, 0x86, 0x20, 0xf4, 0xf7, + 0x8e, 0xff, 0x20, 0x78, 0xff, 0x30, 0x00, 0x06, + 0x00, 0x0e, 0xf6, 0xf7, 0x90, 0xfa, 0x20, 0x78, + 0xff, 0x30, 0x00, 0x06, 0x00, 0x0e, 0x03, 0xf0, + 0xee, 0xfc, 0x10, 0xbd, 0x00, 0x00, 0x18, 0x63, + 0x01, 0x00, 0x3c, 0x42, 0x01, 0x00, 0x09, 0x48, + 0x00, 0x21, 0x01, 0x81, 0x41, 0x81, 0x3c, 0x00, + 0xb4, 0xc3, 0x00, 0x00, 0x81, 0x81, 0xc1, 0x81, + 0x07, 0x4a, 0x02, 0x80, 0x01, 0x23, 0xdb, 0x02, + 0x43, 0x80, 0x82, 0x80, 0xc2, 0x80, 0x41, 0x76, + 0x31, 0x21, 0x81, 0x76, 0x01, 0x21, 0x01, 0x76, + 0x70, 0x47, 0x00, 0x00, 0x30, 0x80, 0x07, 0x00, + 0xff, 0xff, 0x00, 0x00, 0x80, 0xb5, 0x01, 0x20, + 0xf6, 0xf7, 0xf8, 0xf8, 0x01, 0x20, 0xf6, 0xf7, + 0xdb, 0xfc, 0x01, 0x20, 0xf6, 0xf7, 0x5a, 0xfa, + 0x3c, 0x00, 0xf0, 0xc3, 0x00, 0x00, 0x01, 0x20, + 0x00, 0xf0, 0xf1, 0xfd, 0x01, 0x20, 0xf7, 0xf7, + 0xc6, 0xfb, 0x80, 0xbd, 0x00, 0x00, 0x10, 0xb5, + 0x11, 0x4c, 0x00, 0x29, 0x07, 0xd1, 0x00, 0x28, + 0x02, 0xd1, 0x01, 0x20, 0xe0, 0x60, 0x06, 0xe0, + 0x00, 0x21, 0xe1, 0x60, 0x03, 0xe0, 0x01, 0x29, + 0x07, 0xd1, 0x00, 0x28, 0x01, 0xd0, 0x20, 0x70, + 0x03, 0xe0, 0x18, 0x21, 0x86, 0x20, 0xf4, 0xf7, + 0x3c, 0xff, 0x3c, 0x00, 0x2c, 0xc4, 0x00, 0x00, + 0x20, 0x78, 0xff, 0x30, 0x00, 0x06, 0x00, 0x0e, + 0xf6, 0xf7, 0x3e, 0xfa, 0x20, 0x78, 0xff, 0x30, + 0x00, 0x06, 0x00, 0x0e, 0x03, 0xf0, 0x9c, 0xfc, + 0x10, 0xbd, 0x00, 0x00, 0x18, 0x63, 0x01, 0x00, + 0x05, 0x49, 0x80, 0xb5, 0x09, 0x68, 0x88, 0x42, + 0x05, 0xd0, 0xfe, 0xf7, 0xff, 0xfb, 0x00, 0xf0, + 0x87, 0xfa, 0xff, 0xf7, 0x2b, 0xfc, 0x80, 0xbd, + 0xa8, 0x69, 0x01, 0x00, 0x3c, 0x00, 0x68, 0xc4, + 0x00, 0x00, 0x01, 0x49, 0x48, 0x70, 0x70, 0x47, + 0x00, 0x00, 0x2c, 0x63, 0x01, 0x00, 0x01, 0x49, + 0xc8, 0x60, 0x70, 0x47, 0x00, 0x00, 0x4c, 0x7b, + 0x01, 0x00, 0x03, 0x49, 0x01, 0x20, 0x09, 0x78, + 0x00, 0x29, 0x00, 0xd0, 0x00, 0x20, 0x70, 0x47, + 0x00, 0x00, 0x2c, 0x63, 0x01, 0x00, 0x04, 0x4a, + 0x00, 0x28, 0x02, 0xd0, 0x90, 0x69, 0x01, 0x30, + 0x90, 0x61, 0xd0, 0x69, 0x40, 0x18, 0x3c, 0x00, + 0xa4, 0xc4, 0x00, 0x00, 0xd0, 0x61, 0x70, 0x47, + 0x90, 0x5c, 0x01, 0x00, 0xfe, 0xb5, 0x04, 0x1c, + 0x00, 0x68, 0x05, 0x68, 0x28, 0x1c, 0xfe, 0xf7, + 0x27, 0xff, 0x07, 0x1c, 0x60, 0x69, 0x15, 0x4e, + 0xc0, 0x07, 0xc0, 0x0f, 0x21, 0xd0, 0x01, 0xaa, + 0x02, 0xa9, 0x28, 0x1c, 0xfe, 0xf7, 0x12, 0xff, + 0x38, 0x78, 0xc0, 0x07, 0x0c, 0xd4, 0x60, 0x69, + 0x80, 0x07, 0x08, 0xd5, 0x00, 0xab, 0x18, 0x7a, + 0x3c, 0x00, 0xe0, 0xc4, 0x00, 0x00, 0x00, 0x28, + 0x01, 0xd0, 0x02, 0x28, 0x02, 0xd1, 0x70, 0x6a, + 0x01, 0x30, 0x70, 0x62, 0xfe, 0xbd, 0x00, 0xab, + 0x18, 0x7a, 0x00, 0x28, 0x01, 0xd0, 0x02, 0x28, + 0xf8, 0xd1, 0x70, 0x6a, 0x01, 0x30, 0x70, 0x62, + 0xb0, 0x6a, 0x01, 0x30, 0xb0, 0x62, 0xf1, 0xe7, + 0xf0, 0x6a, 0x01, 0x30, 0xf0, 0x62, 0xed, 0xe7, + 0x00, 0x00, 0x90, 0x5c, 0x01, 0x00, 0x02, 0x49, + 0x48, 0x69, 0x3c, 0x00, 0x1c, 0xc5, 0x00, 0x00, + 0x01, 0x30, 0x48, 0x61, 0x70, 0x47, 0x00, 0x00, + 0x90, 0x5c, 0x01, 0x00, 0x70, 0x47, 0x00, 0x00, + 0x70, 0x47, 0x00, 0x00, 0x01, 0x1c, 0x40, 0x31, + 0x10, 0xb5, 0x0a, 0x8b, 0x12, 0x07, 0x92, 0x0f, + 0x01, 0x2a, 0x33, 0xd0, 0x4a, 0x78, 0x1a, 0x49, + 0x04, 0x1c, 0x60, 0x34, 0x00, 0x2a, 0x0b, 0x6a, + 0x22, 0xd1, 0xe2, 0x79, 0x01, 0x2a, 0x02, 0xd9, + 0xcc, 0x68, 0x01, 0x34, 0x3c, 0x00, 0x58, 0xc5, + 0x00, 0x00, 0xcc, 0x60, 0x02, 0x2a, 0x02, 0xd9, + 0x0c, 0x69, 0x01, 0x34, 0x0c, 0x61, 0x0c, 0x68, + 0x01, 0x34, 0x0c, 0x60, 0x44, 0x6b, 0x00, 0x2c, + 0x03, 0xd0, 0x04, 0x69, 0x24, 0x7c, 0xe4, 0x07, + 0x02, 0xd5, 0x4c, 0x68, 0x01, 0x34, 0x4c, 0x60, + 0x80, 0x6b, 0x00, 0x28, 0x02, 0xd0, 0x08, 0x6b, + 0x01, 0x30, 0x08, 0x63, 0x00, 0x2a, 0x0c, 0xd0, + 0x98, 0x18, 0x01, 0x38, 0x08, 0xe0, 0x3c, 0x00, + 0x94, 0xc5, 0x00, 0x00, 0x01, 0x2a, 0x01, 0xd0, + 0x02, 0x2a, 0x02, 0xd1, 0x88, 0x68, 0x01, 0x30, + 0x88, 0x60, 0xe0, 0x79, 0x18, 0x18, 0x08, 0x62, + 0x10, 0xbd, 0x00, 0x00, 0x90, 0x5c, 0x01, 0x00, + 0x70, 0x47, 0x00, 0x00, 0x01, 0x49, 0x0a, 0x20, + 0x08, 0x81, 0x70, 0x47, 0xc4, 0x7a, 0x01, 0x00, + 0xf0, 0xb5, 0x32, 0x4f, 0x04, 0x1c, 0x78, 0x78, + 0x85, 0xb0, 0xc0, 0x07, 0xc0, 0x0f, 0x03, 0x90, + 0x3c, 0x00, 0xd0, 0xc5, 0x00, 0x00, 0xb8, 0x78, + 0x02, 0x90, 0x01, 0x20, 0xa0, 0x40, 0x04, 0x90, + 0x39, 0x1c, 0x88, 0x70, 0x2c, 0x48, 0x00, 0x88, + 0x06, 0xf0, 0x0b, 0xfc, 0x01, 0x90, 0xfe, 0xf7, + 0xae, 0xfc, 0x04, 0x30, 0x29, 0x4e, 0xa5, 0x00, + 0x71, 0x59, 0x09, 0x79, 0x88, 0x42, 0x06, 0xd0, + 0xfe, 0xf7, 0xa5, 0xfc, 0x71, 0x59, 0x04, 0x30, + 0x08, 0x71, 0x01, 0x20, 0x78, 0x70, 0x00, 0x20, + 0x78, 0x70, 0x3c, 0x00, 0x0c, 0xc6, 0x00, 0x00, + 0x21, 0x48, 0x01, 0x21, 0x20, 0x4e, 0x30, 0x38, + 0x01, 0x55, 0x71, 0x59, 0x03, 0x20, 0x08, 0x70, + 0x06, 0xf0, 0xc6, 0xfb, 0x06, 0x1c, 0xfe, 0xf7, + 0x91, 0xfc, 0x36, 0x18, 0x0e, 0x36, 0x09, 0xe0, + 0x30, 0x1c, 0x06, 0xf0, 0xf5, 0xfa, 0x00, 0x28, + 0x04, 0xd0, 0x23, 0x21, 0x86, 0x20, 0xf4, 0xf7, + 0x33, 0xfe, 0x03, 0xe0, 0xf6, 0xf7, 0x34, 0xfb, + 0x00, 0x28, 0xf1, 0xd0, 0x3c, 0x00, 0x48, 0xc6, + 0x00, 0x00, 0x12, 0x48, 0x13, 0x49, 0x3c, 0x38, + 0x00, 0x78, 0x08, 0x72, 0x20, 0x1c, 0xf4, 0xf7, + 0xa2, 0xfa, 0x0e, 0x4e, 0x71, 0x59, 0x08, 0x71, + 0x03, 0x98, 0x00, 0x28, 0x01, 0xd0, 0x01, 0x21, + 0x79, 0x70, 0x09, 0x48, 0x00, 0x88, 0x01, 0x99, + 0x06, 0xf0, 0xbd, 0xfb, 0x02, 0x98, 0xb8, 0x70, + 0x09, 0x49, 0x49, 0x79, 0x04, 0x98, 0x88, 0x42, + 0x03, 0xd0, 0x24, 0x21, 0x86, 0x20, 0x3c, 0x00, + 0x84, 0xc6, 0x00, 0x00, 0xf4, 0xf7, 0x0e, 0xfe, + 0x05, 0xb0, 0xf0, 0xbd, 0x00, 0x50, 0x07, 0x00, + 0xd0, 0x79, 0x01, 0x00, 0x10, 0x7b, 0x01, 0x00, + 0x80, 0x80, 0x07, 0x00, 0x50, 0x80, 0x07, 0x00, + 0xb0, 0xb5, 0x0d, 0x1c, 0x04, 0x1c, 0x05, 0x28, + 0x01, 0xd3, 0xf4, 0xf7, 0x29, 0xfe, 0x05, 0x2d, + 0x01, 0xd3, 0xf4, 0xf7, 0x25, 0xfe, 0x0b, 0x4a, + 0xa8, 0x00, 0x11, 0x58, 0xa0, 0x00, 0x10, 0x58, + 0x3c, 0x00, 0xc0, 0xc6, 0x00, 0x00, 0x0e, 0xc9, + 0x0e, 0xc0, 0x06, 0x21, 0x06, 0x22, 0x06, 0x48, + 0x69, 0x43, 0x2a, 0x38, 0x09, 0x18, 0x62, 0x43, + 0x10, 0x18, 0x06, 0x22, 0xf3, 0xf7, 0x0f, 0xff, + 0x02, 0x48, 0x30, 0x38, 0x41, 0x5d, 0x01, 0x55, + 0xb0, 0xbd, 0x10, 0x7b, 0x01, 0x00, 0xb0, 0xb5, + 0x04, 0x1c, 0x0e, 0x48, 0x0d, 0x1c, 0x80, 0x78, + 0x01, 0x21, 0xa1, 0x40, 0x08, 0x40, 0x03, 0xd0, + 0x01, 0x21, 0x3c, 0x00, 0xfc, 0xc6, 0x00, 0x00, + 0x86, 0x20, 0xf4, 0xf7, 0xd1, 0xfd, 0x06, 0x21, + 0x06, 0x22, 0x09, 0x48, 0x69, 0x43, 0x09, 0x18, + 0x62, 0x43, 0x10, 0x18, 0x06, 0x22, 0xf3, 0xf7, + 0xf1, 0xfe, 0x20, 0x1c, 0xf4, 0xf7, 0x40, 0xfa, + 0x03, 0x4a, 0xa1, 0x00, 0x2a, 0x32, 0x51, 0x58, + 0x08, 0x71, 0xb0, 0xbd, 0x00, 0x50, 0x07, 0x00, + 0xe6, 0x7a, 0x01, 0x00, 0x03, 0x49, 0x80, 0xb5, + 0x00, 0x20, 0x48, 0x60, 0x3c, 0x00, 0x38, 0xc7, + 0x00, 0x00, 0x07, 0xf0, 0x32, 0xf9, 0x80, 0xbd, + 0x00, 0x00, 0xd4, 0x7a, 0x01, 0x00, 0x10, 0xb5, + 0x04, 0x1c, 0x05, 0x28, 0x01, 0xd3, 0xf4, 0xf7, + 0xd8, 0xfd, 0x07, 0x49, 0x08, 0x7a, 0x07, 0x4a, + 0x10, 0x70, 0x01, 0x20, 0x08, 0x72, 0xfe, 0xf7, + 0xf4, 0xfb, 0x04, 0x4a, 0x04, 0x30, 0xa1, 0x00, + 0x3c, 0x32, 0x51, 0x58, 0x08, 0x71, 0x10, 0xbd, + 0x00, 0x00, 0x80, 0x80, 0x07, 0x00, 0x3c, 0x00, + 0x74, 0xc7, 0x00, 0x00, 0xd4, 0x7a, 0x01, 0x00, + 0x03, 0x49, 0x80, 0xb5, 0x01, 0x20, 0x48, 0x60, + 0x07, 0xf0, 0x0e, 0xf9, 0x80, 0xbd, 0x00, 0x00, + 0xd4, 0x7a, 0x01, 0x00, 0x10, 0xb5, 0x04, 0x1c, + 0x05, 0x28, 0x01, 0xd3, 0xf4, 0xf7, 0xb4, 0xfd, + 0x20, 0x1c, 0xf5, 0xf7, 0x8f, 0xfe, 0x00, 0x21, + 0x20, 0x1c, 0xfb, 0xf7, 0x31, 0xfd, 0x01, 0x21, + 0x00, 0x28, 0x00, 0xd0, 0x01, 0x1c, 0x09, 0x04, + 0x3c, 0x00, 0xb0, 0xc7, 0x00, 0x00, 0x09, 0x0c, + 0x20, 0x1c, 0x04, 0xf0, 0x22, 0xfa, 0x10, 0xbd, + 0x00, 0x00, 0x06, 0x49, 0x01, 0x20, 0x05, 0x4b, + 0x88, 0x60, 0x00, 0x20, 0x3c, 0x33, 0x00, 0x21, + 0x82, 0x00, 0x9a, 0x58, 0x11, 0x70, 0x01, 0x30, + 0x05, 0x28, 0xf9, 0xdb, 0x70, 0x47, 0xd4, 0x7a, + 0x01, 0x00, 0x0f, 0x49, 0x38, 0xb5, 0x00, 0x20, + 0x88, 0x60, 0x0e, 0x48, 0x01, 0x1c, 0x20, 0x31, + 0x8a, 0x79, 0x3c, 0x00, 0xec, 0xc7, 0x00, 0x00, + 0x00, 0xab, 0x1a, 0x70, 0xc9, 0x79, 0x0a, 0x4c, + 0x09, 0x4d, 0x59, 0x70, 0x0c, 0x34, 0x3c, 0x35, + 0x00, 0x21, 0x03, 0x22, 0x63, 0x5c, 0x00, 0x2b, + 0x02, 0xd0, 0x8b, 0x00, 0xeb, 0x58, 0x1a, 0x70, + 0x01, 0x31, 0x05, 0x29, 0xf6, 0xdb, 0x00, 0xab, + 0x19, 0x88, 0xc1, 0x84, 0x38, 0xbd, 0x00, 0x00, + 0xd4, 0x7a, 0x01, 0x00, 0x00, 0x10, 0x07, 0x00, + 0xff, 0xb5, 0x14, 0x4f, 0x3c, 0x00, 0x28, 0xc8, + 0x00, 0x00, 0x04, 0x1c, 0xbe, 0x79, 0x0d, 0x1c, + 0x81, 0xb0, 0x0f, 0x20, 0x00, 0xf0, 0xb9, 0xf8, + 0x2a, 0x1c, 0x10, 0x4d, 0x00, 0x90, 0x21, 0x1c, + 0x28, 0x1c, 0xf4, 0xf7, 0xde, 0xfc, 0x21, 0x1c, + 0xa8, 0x1d, 0x03, 0x9a, 0xf4, 0xf7, 0xd9, 0xfc, + 0x21, 0x1c, 0x28, 0x1c, 0x0c, 0x30, 0x04, 0x9a, + 0xf4, 0xf7, 0xd3, 0xfc, 0x21, 0x1c, 0x28, 0x1c, + 0x12, 0x30, 0x0a, 0x9a, 0xf4, 0xf7, 0x3c, 0x00, + 0x64, 0xc8, 0x00, 0x00, 0xcd, 0xfc, 0x07, 0xf0, + 0x9b, 0xf8, 0x00, 0x98, 0x00, 0xf0, 0x76, 0xf8, + 0xbe, 0x71, 0x05, 0xb0, 0xf0, 0xbd, 0x00, 0x00, + 0x20, 0x10, 0x07, 0x00, 0xe6, 0x7a, 0x01, 0x00, + 0x10, 0xb5, 0x00, 0x20, 0xf6, 0xf7, 0x26, 0xf8, + 0x07, 0x49, 0x88, 0x78, 0x00, 0x09, 0x00, 0x01, + 0x88, 0x70, 0x00, 0x24, 0x20, 0x1c, 0xf5, 0xf7, + 0x11, 0xfe, 0x01, 0x34, 0x24, 0x06, 0x24, 0x0e, + 0x3c, 0x00, 0xa0, 0xc8, 0x00, 0x00, 0x04, 0x2c, + 0xf7, 0xd3, 0x10, 0xbd, 0x00, 0x00, 0x00, 0x50, + 0x07, 0x00, 0x80, 0xb5, 0x02, 0xf0, 0xe3, 0xfb, + 0x03, 0x48, 0x81, 0x78, 0x0f, 0x22, 0x11, 0x43, + 0x81, 0x70, 0x80, 0xbd, 0x00, 0x00, 0x00, 0x50, + 0x07, 0x00, 0xf8, 0xb5, 0x0d, 0x1c, 0x04, 0x1c, + 0x05, 0x28, 0x01, 0xd3, 0xf4, 0xf7, 0x17, 0xfd, + 0xa6, 0x00, 0x00, 0x2d, 0x11, 0x4f, 0x07, 0xd1, + 0xb8, 0x59, 0x3c, 0x00, 0xdc, 0xc8, 0x00, 0x00, + 0x81, 0x68, 0x00, 0x29, 0x0e, 0xd1, 0x40, 0x78, + 0x00, 0x28, 0x0b, 0xd0, 0x02, 0xe0, 0xff, 0x35, + 0x2d, 0x06, 0x2d, 0x0e, 0x29, 0x1c, 0x20, 0x1c, + 0xfb, 0xf7, 0x88, 0xfc, 0x01, 0x1c, 0x20, 0x1c, + 0x04, 0xf0, 0x7e, 0xf9, 0x06, 0x49, 0x01, 0x20, + 0x30, 0x39, 0x08, 0x55, 0x04, 0x48, 0x3c, 0x38, + 0x80, 0x68, 0x00, 0x28, 0x02, 0xd1, 0xb9, 0x59, + 0x03, 0x20, 0x08, 0x70, 0x3c, 0x00, 0x18, 0xc9, + 0x00, 0x00, 0xf8, 0xbd, 0x00, 0x00, 0x10, 0x7b, + 0x01, 0x00, 0x80, 0xb5, 0x04, 0xf0, 0xcd, 0xf9, + 0x80, 0xbd, 0x10, 0xb5, 0x04, 0x1c, 0x05, 0x28, + 0x01, 0xd3, 0xf4, 0xf7, 0xe6, 0xfc, 0x20, 0x1c, + 0xf5, 0xf7, 0xc1, 0xfd, 0x00, 0x20, 0x05, 0x4a, + 0xa1, 0x00, 0x51, 0x58, 0x88, 0x60, 0x04, 0x49, + 0x88, 0x78, 0x01, 0x22, 0xa2, 0x40, 0x10, 0x43, + 0x88, 0x70, 0x10, 0xbd, 0x00, 0x00, 0x3c, 0x00, + 0x54, 0xc9, 0x00, 0x00, 0x10, 0x7b, 0x01, 0x00, + 0x00, 0x50, 0x07, 0x00, 0x02, 0x4a, 0x91, 0x78, + 0x08, 0x43, 0x90, 0x70, 0x70, 0x47, 0x00, 0x00, + 0x00, 0x50, 0x07, 0x00, 0xf8, 0xb5, 0x0c, 0x4f, + 0xbe, 0x79, 0x0f, 0x20, 0x00, 0xf0, 0x18, 0xf8, + 0x05, 0x1c, 0x00, 0x24, 0x20, 0x1c, 0xf4, 0xf7, + 0x0d, 0xf9, 0x08, 0x4a, 0xa1, 0x00, 0x51, 0x58, + 0x08, 0x71, 0x01, 0x34, 0x24, 0x06, 0x24, 0x0e, + 0x3c, 0x00, 0x90, 0xc9, 0x00, 0x00, 0x04, 0x2c, + 0xf3, 0xd3, 0x28, 0x1c, 0xff, 0xf7, 0xe1, 0xff, + 0xbe, 0x71, 0xf8, 0xbd, 0x00, 0x00, 0x20, 0x10, + 0x07, 0x00, 0x10, 0x7b, 0x01, 0x00, 0xb0, 0xb5, + 0x08, 0x49, 0x8d, 0x78, 0x8a, 0x78, 0x05, 0x40, + 0x82, 0x43, 0x8a, 0x70, 0x06, 0xf0, 0xf9, 0xf9, + 0x04, 0x1c, 0x0a, 0x34, 0x20, 0x1c, 0x06, 0xf0, + 0x34, 0xf9, 0x00, 0x28, 0xfa, 0xd0, 0x28, 0x1c, + 0xb0, 0xbd, 0x3c, 0x00, 0xcc, 0xc9, 0x00, 0x00, + 0x00, 0x50, 0x07, 0x00, 0x01, 0x49, 0x0a, 0x20, + 0x08, 0x81, 0x70, 0x47, 0x38, 0x7b, 0x01, 0x00, + 0xf8, 0xb5, 0x10, 0x48, 0x04, 0x26, 0x04, 0x1c, + 0xe0, 0x34, 0x05, 0x1c, 0x38, 0x3d, 0x00, 0x27, + 0x20, 0x1c, 0x1c, 0x30, 0xe4, 0x60, 0xa0, 0x61, + 0x27, 0x61, 0x0b, 0x48, 0xa6, 0x82, 0xe0, 0x61, + 0x27, 0x62, 0xa7, 0x62, 0x06, 0x20, 0xa0, 0x84, + 0x20, 0x1c, 0xfe, 0xf7, 0x3c, 0x00, 0x08, 0xca, + 0x00, 0x00, 0x87, 0xfc, 0x20, 0x1c, 0x0c, 0x30, + 0xf6, 0xf7, 0xb7, 0xf9, 0x05, 0x49, 0x38, 0x3c, + 0xac, 0x42, 0x08, 0x80, 0xe7, 0xd1, 0xf8, 0xbd, + 0x00, 0x00, 0xd4, 0xe4, 0x01, 0x00, 0x12, 0x61, + 0x01, 0x00, 0x48, 0x7b, 0x01, 0x00, 0xf7, 0xb5, + 0x05, 0x1c, 0x0c, 0x23, 0x0f, 0x1c, 0x12, 0x49, + 0x58, 0x43, 0x44, 0x18, 0x20, 0x88, 0x06, 0xf0, + 0xea, 0xf9, 0xa0, 0x78, 0x01, 0x28, 0x3c, 0x00, + 0x44, 0xca, 0x00, 0x00, 0x1a, 0xd1, 0x66, 0x68, + 0x02, 0x2f, 0x05, 0xd1, 0x5c, 0x20, 0x80, 0x5b, + 0x02, 0x99, 0x00, 0x09, 0x88, 0x42, 0x11, 0xd1, + 0x28, 0x1c, 0xfe, 0xf7, 0xfb, 0xff, 0x30, 0x1c, + 0xf9, 0xf7, 0xfa, 0xfd, 0x04, 0x20, 0xa0, 0x70, + 0x39, 0x1c, 0x28, 0x1c, 0xfb, 0xf7, 0xf4, 0xf8, + 0x03, 0x4a, 0xe8, 0x00, 0x3c, 0x32, 0x11, 0x58, + 0x01, 0x31, 0x11, 0x50, 0xfe, 0xbd, 0x00, 0x00, + 0x3c, 0x00, 0x80, 0xca, 0x00, 0x00, 0x60, 0x7b, + 0x01, 0x00, 0x01, 0x20, 0x06, 0x4a, 0x00, 0x21, + 0x0c, 0x23, 0x4b, 0x43, 0x9b, 0x18, 0x9b, 0x78, + 0x00, 0x2b, 0x00, 0xd0, 0x00, 0x20, 0x01, 0x31, + 0x04, 0x29, 0xf5, 0xdb, 0x70, 0x47, 0x60, 0x7b, + 0x01, 0x00, 0x70, 0xb5, 0x04, 0x1c, 0xff, 0xf7, + 0xea, 0xfc, 0x00, 0x28, 0x03, 0xd1, 0x20, 0x21, + 0x0c, 0x20, 0xf4, 0xf7, 0xf6, 0xfb, 0x26, 0x1c, + 0x60, 0x36, 0x3c, 0x00, 0xbc, 0xca, 0x00, 0x00, + 0x00, 0x21, 0xf1, 0x71, 0xe1, 0x64, 0x60, 0x6b, + 0x25, 0x1c, 0x40, 0x35, 0x00, 0x28, 0x31, 0xd0, + 0xff, 0xf7, 0x04, 0xf9, 0x01, 0x22, 0x12, 0x03, + 0x00, 0x28, 0x20, 0x69, 0x01, 0x88, 0x01, 0xd0, + 0x91, 0x43, 0x00, 0xe0, 0x11, 0x43, 0x01, 0x80, + 0x20, 0x69, 0x01, 0x22, 0x00, 0x88, 0xd2, 0x02, + 0x28, 0x83, 0x20, 0x1c, 0x58, 0x30, 0x01, 0x88, + 0x91, 0x43, 0x01, 0x80, 0x3c, 0x00, 0xf8, 0xca, + 0x00, 0x00, 0xa3, 0x6b, 0x52, 0x08, 0x00, 0x2b, + 0x10, 0xd0, 0x91, 0x43, 0x01, 0x80, 0x28, 0x8b, + 0x00, 0x07, 0x80, 0x0f, 0x01, 0x28, 0x15, 0xd0, + 0x2e, 0x20, 0x01, 0x5d, 0x20, 0x69, 0x04, 0x30, + 0xf8, 0xf7, 0x41, 0xfd, 0x61, 0x6a, 0xfe, 0xf7, + 0xa8, 0xf9, 0x04, 0xe0, 0x11, 0x43, 0x01, 0x80, + 0x20, 0x1c, 0xfb, 0xf7, 0xcc, 0xfb, 0x68, 0x83, + 0x04, 0xe0, 0x20, 0x69, 0x41, 0x80, 0x3c, 0x00, + 0x34, 0xcb, 0x00, 0x00, 0xa8, 0x8b, 0x21, 0x69, + 0xc8, 0x82, 0xe0, 0x68, 0xf6, 0xf7, 0x20, 0xf9, + 0x30, 0x80, 0x60, 0x6d, 0x00, 0x28, 0x04, 0xd0, + 0x00, 0x22, 0x03, 0x21, 0x70, 0x7a, 0xfe, 0xf7, + 0x0d, 0xff, 0x20, 0x1c, 0x00, 0xf0, 0xb6, 0xf9, + 0x70, 0x7a, 0x06, 0xf0, 0x45, 0xf8, 0x70, 0xbd, + 0xb0, 0xb5, 0x00, 0x24, 0x06, 0xf0, 0x22, 0xf9, + 0x09, 0x4a, 0x00, 0x21, 0x0c, 0x23, 0x4b, 0x43, + 0x3c, 0x00, 0x70, 0xcb, 0x00, 0x00, 0x9d, 0x18, + 0x6b, 0x68, 0x5b, 0x6c, 0xad, 0x78, 0xc3, 0x1a, + 0x01, 0x2d, 0x02, 0xd1, 0xa3, 0x42, 0x00, 0xdd, + 0x1c, 0x1c, 0x01, 0x31, 0x05, 0x29, 0xf0, 0xd3, + 0x20, 0x1c, 0xb0, 0xbd, 0x00, 0x00, 0x60, 0x7b, + 0x01, 0x00, 0xb0, 0xb5, 0x04, 0x1c, 0x06, 0xf0, + 0xa8, 0xfe, 0x0c, 0x20, 0x08, 0x49, 0x60, 0x43, + 0x45, 0x18, 0x28, 0x88, 0x06, 0xf0, 0x35, 0xf9, + 0x68, 0x68, 0x3c, 0x00, 0xac, 0xcb, 0x00, 0x00, + 0x00, 0x28, 0x06, 0xd0, 0x20, 0x30, 0x00, 0x7b, + 0x01, 0x28, 0x02, 0xd1, 0x20, 0x1c, 0xff, 0xf7, + 0xa3, 0xfa, 0xb0, 0xbd, 0x60, 0x7b, 0x01, 0x00, + 0xff, 0xb5, 0x85, 0xb0, 0x0f, 0xae, 0x60, 0xce, + 0x38, 0x20, 0x1e, 0x49, 0x70, 0x43, 0x17, 0x1c, + 0x44, 0x18, 0xff, 0xf7, 0x7f, 0xf8, 0x01, 0x22, + 0x12, 0x03, 0x00, 0x28, 0x03, 0xd0, 0x20, 0x88, + 0x90, 0x43, 0x20, 0x80, 0x3c, 0x00, 0xe8, 0xcb, + 0x00, 0x00, 0x02, 0xe0, 0x21, 0x88, 0x11, 0x43, + 0x21, 0x80, 0x11, 0x98, 0x39, 0x1c, 0xe0, 0x62, + 0x05, 0x98, 0xf8, 0xf7, 0xd0, 0xfc, 0x01, 0x1c, + 0x2b, 0x1c, 0x38, 0x1c, 0x06, 0x9a, 0xfe, 0xf7, + 0x20, 0xf9, 0x60, 0x80, 0x06, 0x22, 0x20, 0x1d, + 0x0f, 0x49, 0xf3, 0xf7, 0x72, 0xfc, 0x23, 0x1c, + 0x08, 0x98, 0x30, 0x33, 0x18, 0x70, 0x0e, 0x98, + 0x0c, 0x49, 0x58, 0x70, 0x65, 0x63, 0x3c, 0x00, + 0x24, 0xcc, 0x00, 0x00, 0x00, 0x20, 0x02, 0x90, + 0x01, 0x22, 0x04, 0x92, 0x09, 0x48, 0x03, 0x91, + 0x5a, 0x78, 0x01, 0x88, 0x01, 0x92, 0x00, 0x91, + 0x19, 0x78, 0x24, 0x3b, 0x30, 0x1c, 0x62, 0x6b, + 0xfe, 0xf7, 0xa8, 0xfe, 0x09, 0xb0, 0xf0, 0xbd, + 0xd4, 0xe4, 0x01, 0x00, 0x12, 0x61, 0x01, 0x00, + 0x5d, 0x4e, 0x00, 0x00, 0x48, 0x7b, 0x01, 0x00, + 0xff, 0xb5, 0x87, 0xb0, 0x10, 0x98, 0x12, 0xaf, + 0x3c, 0x00, 0x60, 0xcc, 0x00, 0x00, 0x8c, 0x46, + 0xa2, 0xcf, 0x4c, 0x23, 0x30, 0x4c, 0x6b, 0x43, + 0x1c, 0x19, 0x16, 0x1c, 0x15, 0x9a, 0x27, 0x85, + 0x27, 0x1c, 0x30, 0x37, 0x06, 0x97, 0x05, 0x97, + 0x00, 0x23, 0x3b, 0x73, 0x05, 0x9f, 0x78, 0x73, + 0x11, 0x98, 0x27, 0x1c, 0x60, 0x64, 0x61, 0x60, + 0x22, 0x60, 0x40, 0x37, 0x3e, 0x70, 0x61, 0x46, + 0x61, 0x87, 0x07, 0x98, 0x31, 0x1c, 0xf8, 0xf7, + 0x80, 0xfc, 0x3c, 0x00, 0x9c, 0xcc, 0x00, 0x00, + 0x05, 0x99, 0xc8, 0x73, 0x0a, 0x98, 0x78, 0x70, + 0x30, 0x1c, 0xfe, 0xf7, 0x73, 0xf8, 0x00, 0x28, + 0x01, 0xd0, 0x01, 0x20, 0x00, 0xe0, 0x00, 0x20, + 0x41, 0x00, 0x02, 0x20, 0x01, 0x40, 0x11, 0x9a, + 0x01, 0x20, 0x00, 0x2a, 0x00, 0xd1, 0x00, 0x20, + 0x08, 0x43, 0x38, 0x72, 0x20, 0x1c, 0x2e, 0x30, + 0x07, 0x99, 0xfd, 0xf7, 0xcf, 0xff, 0x28, 0x1c, + 0x04, 0xf0, 0xae, 0xf8, 0x3c, 0x00, 0xd8, 0xcc, + 0x00, 0x00, 0xfe, 0xf7, 0xfe, 0xff, 0x4c, 0x22, + 0x12, 0x4b, 0x6a, 0x43, 0xd2, 0x18, 0x01, 0x21, + 0x09, 0x03, 0x2a, 0x32, 0x00, 0x28, 0x04, 0xd0, + 0x10, 0x1c, 0x12, 0x88, 0x8a, 0x43, 0x02, 0x80, + 0x02, 0xe0, 0x10, 0x88, 0x08, 0x43, 0x10, 0x80, + 0x0b, 0x49, 0x00, 0x20, 0x03, 0x91, 0x06, 0x99, + 0x02, 0x90, 0x00, 0x22, 0x04, 0x92, 0x08, 0x48, + 0x0a, 0x7b, 0x41, 0x88, 0x23, 0x1c, 0x3c, 0x00, + 0x14, 0xcd, 0x00, 0x00, 0x01, 0x92, 0x00, 0x91, + 0x79, 0x78, 0x08, 0x33, 0x28, 0x1c, 0x62, 0x68, + 0xfe, 0xf7, 0x38, 0xfe, 0x0b, 0xb0, 0xf0, 0xbd, + 0x58, 0xe3, 0x01, 0x00, 0x75, 0x4f, 0x00, 0x00, + 0x3c, 0x7c, 0x01, 0x00, 0xb0, 0xb5, 0x0c, 0x1c, + 0x01, 0x28, 0x27, 0xd0, 0x80, 0x28, 0x30, 0xd1, + 0xe0, 0x6c, 0x00, 0x28, 0x08, 0xd0, 0x69, 0x20, + 0x00, 0x5d, 0x18, 0x49, 0xc0, 0x00, 0x40, 0x18, + 0x3c, 0x00, 0x50, 0xcd, 0x00, 0x00, 0x04, 0x30, + 0x01, 0x68, 0x01, 0x31, 0x01, 0x60, 0x20, 0x1c, + 0xff, 0xf7, 0xe9, 0xfb, 0x13, 0x4d, 0x50, 0x3d, + 0xe8, 0x68, 0x00, 0x28, 0x05, 0xd0, 0x2e, 0x20, + 0x00, 0x5d, 0xfe, 0xf7, 0x10, 0xf8, 0x02, 0xf0, + 0x42, 0xfe, 0x20, 0x1c, 0x61, 0x68, 0xf3, 0xf7, + 0x2f, 0xfb, 0x40, 0x34, 0x60, 0x78, 0x00, 0x28, + 0x02, 0xd1, 0x06, 0xf0, 0x12, 0xf8, 0xa8, 0x60, + 0xb0, 0xbd, 0x3c, 0x00, 0x8c, 0xcd, 0x00, 0x00, + 0x20, 0x06, 0x00, 0x0e, 0x81, 0x28, 0xfa, 0xd1, + 0x22, 0x0c, 0x20, 0x04, 0x00, 0x0e, 0x02, 0x21, + 0xfe, 0xf7, 0xe6, 0xfd, 0xb0, 0xbd, 0x0a, 0x21, + 0x0c, 0x20, 0xf4, 0xf7, 0x7d, 0xfa, 0xb0, 0xbd, + 0x9c, 0x7b, 0x01, 0x00, 0xf8, 0xb5, 0x18, 0x4e, + 0x18, 0x4f, 0x05, 0x1c, 0x34, 0x79, 0xb8, 0x79, + 0x00, 0x90, 0x20, 0x1c, 0xf5, 0xf7, 0x7c, 0xff, + 0x00, 0x28, 0x06, 0xd0, 0x3c, 0x00, 0xc8, 0xcd, + 0x00, 0x00, 0x12, 0x48, 0x38, 0x38, 0x40, 0x68, + 0x85, 0x42, 0x01, 0xd1, 0x00, 0x2d, 0x03, 0xd1, + 0x10, 0x21, 0x86, 0x20, 0xf4, 0xf7, 0x63, 0xfa, + 0x0d, 0x49, 0x00, 0x20, 0x38, 0x39, 0x48, 0x60, + 0x04, 0x21, 0x20, 0x1c, 0xff, 0xf7, 0x59, 0xfc, + 0x04, 0x21, 0x20, 0x1c, 0xf5, 0xf7, 0xeb, 0xfe, + 0x0c, 0x21, 0x06, 0x4a, 0x61, 0x43, 0x30, 0x3a, + 0x89, 0x18, 0x0c, 0x71, 0x04, 0x20, 0x3c, 0x00, + 0x04, 0xce, 0x00, 0x00, 0x30, 0x71, 0x00, 0x98, + 0xb8, 0x71, 0x0f, 0x20, 0xff, 0xf7, 0xa6, 0xfd, + 0xf8, 0xbd, 0x00, 0x00, 0xa4, 0x7a, 0x01, 0x00, + 0x20, 0x10, 0x07, 0x00, 0xf8, 0xb5, 0x04, 0x1c, + 0x0f, 0x20, 0xff, 0xf7, 0xc1, 0xfd, 0xf5, 0xf7, + 0x3b, 0xff, 0x01, 0x25, 0x00, 0x28, 0x00, 0xd0, + 0x00, 0x25, 0x16, 0x4e, 0xb0, 0x79, 0x16, 0x4f, + 0x00, 0x90, 0x38, 0x79, 0x04, 0x28, 0x01, 0xd1, + 0x3c, 0x00, 0x40, 0xce, 0x00, 0x00, 0x00, 0x2c, + 0x03, 0xd1, 0x11, 0x21, 0x86, 0x20, 0xf4, 0xf7, + 0x2c, 0xfa, 0x10, 0x48, 0x29, 0x06, 0x38, 0x38, + 0x44, 0x60, 0x09, 0x0e, 0x0c, 0x1c, 0x04, 0x20, + 0xff, 0xf7, 0x21, 0xfc, 0x03, 0x21, 0x20, 0x1c, + 0xff, 0xf7, 0x41, 0xfc, 0x21, 0x1c, 0x04, 0x20, + 0xf5, 0xf7, 0xaf, 0xfe, 0x0c, 0x21, 0x07, 0x4a, + 0x69, 0x43, 0x04, 0x20, 0x30, 0x3a, 0x89, 0x18, + 0x08, 0x71, 0x3c, 0x00, 0x7c, 0xce, 0x00, 0x00, + 0x3c, 0x71, 0x00, 0x98, 0xb0, 0x71, 0x20, 0x1c, + 0xff, 0xf7, 0x50, 0xfd, 0x04, 0x20, 0xf8, 0xbd, + 0x20, 0x10, 0x07, 0x00, 0xa4, 0x7a, 0x01, 0x00, + 0x0c, 0x23, 0x02, 0x49, 0x58, 0x43, 0x40, 0x18, + 0x80, 0x68, 0x70, 0x47, 0x74, 0x7a, 0x01, 0x00, + 0x60, 0x30, 0xc1, 0x79, 0x80, 0x79, 0x81, 0x42, + 0x01, 0xd9, 0x01, 0x20, 0x70, 0x47, 0x00, 0x20, + 0x70, 0x47, 0x00, 0x00, 0x3c, 0x00, 0xb8, 0xce, + 0x00, 0x00, 0x01, 0x48, 0x80, 0x68, 0x70, 0x47, + 0x00, 0x00, 0x4c, 0x7b, 0x01, 0x00, 0x38, 0xb5, + 0x69, 0x21, 0x09, 0x5c, 0x18, 0x23, 0x10, 0x4a, + 0x59, 0x43, 0x89, 0x18, 0x8a, 0x68, 0x01, 0x32, + 0x8a, 0x60, 0x4b, 0x69, 0xd2, 0x1a, 0xcb, 0x68, + 0x93, 0x42, 0x00, 0xd2, 0xca, 0x60, 0x00, 0x22, + 0x0b, 0x4c, 0x02, 0x60, 0x22, 0x1c, 0x20, 0x32, + 0x95, 0x79, 0x00, 0xab, 0x1d, 0x70, 0x3c, 0x00, + 0xf4, 0xce, 0x00, 0x00, 0xd2, 0x79, 0x5a, 0x70, + 0x0a, 0x68, 0x00, 0x2a, 0x01, 0xd1, 0x48, 0x60, + 0x00, 0xe0, 0x10, 0x60, 0x00, 0xab, 0x08, 0x60, + 0x18, 0x88, 0xe0, 0x84, 0x38, 0xbd, 0x00, 0x00, + 0xc4, 0x7b, 0x01, 0x00, 0x00, 0x10, 0x07, 0x00, + 0x18, 0x23, 0x0a, 0x49, 0x58, 0x43, 0x41, 0x18, + 0x08, 0x69, 0x01, 0x30, 0x08, 0x61, 0x48, 0x68, + 0x00, 0x28, 0x09, 0xd0, 0x48, 0x69, 0x01, 0x30, + 0x3c, 0x00, 0x30, 0xcf, 0x00, 0x00, 0x48, 0x61, + 0x48, 0x68, 0x02, 0x68, 0x4a, 0x60, 0x00, 0x2a, + 0x00, 0xd1, 0x0a, 0x60, 0x70, 0x47, 0x00, 0x20, + 0x70, 0x47, 0xc4, 0x7b, 0x01, 0x00, 0xf8, 0xb5, + 0x12, 0x4e, 0x10, 0x4d, 0x0f, 0x4c, 0x0a, 0x27, + 0x21, 0x1c, 0x00, 0x20, 0xe0, 0x60, 0x2a, 0x31, + 0x22, 0x1c, 0x18, 0x32, 0xa1, 0x60, 0x62, 0x61, + 0x27, 0x82, 0x0c, 0x4a, 0xe0, 0x61, 0xa2, 0x61, + 0x60, 0x62, 0x3c, 0x00, 0x6c, 0xcf, 0x00, 0x00, + 0x06, 0x20, 0x20, 0x84, 0x08, 0x1c, 0xfe, 0xf7, + 0xd7, 0xf9, 0x20, 0x1c, 0x08, 0x30, 0xf5, 0xf7, + 0x01, 0xff, 0x4c, 0x3c, 0xac, 0x42, 0x70, 0x80, + 0xe5, 0xd1, 0xff, 0x20, 0x30, 0x70, 0xf8, 0xbd, + 0x88, 0xe4, 0x01, 0x00, 0x0c, 0xe3, 0x01, 0x00, + 0x3c, 0x7c, 0x01, 0x00, 0x12, 0x61, 0x01, 0x00, + 0xf8, 0xb5, 0x04, 0x1c, 0x0b, 0x48, 0x0e, 0x1c, + 0x17, 0x1c, 0x44, 0x70, 0x3c, 0x00, 0xa8, 0xcf, + 0x00, 0x00, 0x05, 0xf0, 0x00, 0xff, 0x05, 0x1c, + 0x39, 0x1c, 0x30, 0x1c, 0xfd, 0xf7, 0xab, 0xff, + 0x0c, 0x21, 0x05, 0x4a, 0x28, 0x18, 0x0a, 0x30, + 0x61, 0x43, 0x08, 0x32, 0x50, 0x50, 0x03, 0x48, + 0x89, 0x18, 0x00, 0x68, 0x88, 0x60, 0xf8, 0xbd, + 0x00, 0x00, 0x6c, 0x7a, 0x01, 0x00, 0x78, 0x6e, + 0x01, 0x00, 0x70, 0xb5, 0x0b, 0x4e, 0x05, 0x1c, + 0x70, 0x78, 0xff, 0x28, 0x0f, 0xd0, 0x3c, 0x00, + 0xe4, 0xcf, 0x00, 0x00, 0x0c, 0x23, 0x08, 0x4c, + 0x58, 0x43, 0x08, 0x34, 0x20, 0x58, 0x05, 0xf0, + 0x1d, 0xfe, 0x00, 0x28, 0x06, 0xd1, 0x70, 0x78, + 0x0c, 0x23, 0x58, 0x43, 0x00, 0x19, 0x81, 0x68, + 0x29, 0x43, 0x81, 0x60, 0x70, 0xbd, 0x00, 0x00, + 0x6c, 0x7a, 0x01, 0x00, 0x80, 0xb5, 0x30, 0x21, + 0x01, 0x48, 0xf3, 0xf7, 0x43, 0xfa, 0x80, 0xbd, + 0xec, 0xe5, 0x01, 0x00, 0x10, 0xb5, 0x05, 0xf0, + 0x3c, 0x00, 0x20, 0xd0, 0x00, 0x00, 0xc5, 0xfe, + 0x0a, 0x49, 0x44, 0x18, 0x0c, 0xe0, 0x20, 0x1c, + 0x05, 0xf0, 0xf7, 0xfd, 0x00, 0x28, 0x07, 0xd0, + 0xf5, 0xf7, 0x51, 0xfe, 0x00, 0x28, 0x03, 0xd0, + 0x13, 0x21, 0x86, 0x20, 0xf4, 0xf7, 0x31, 0xf9, + 0xf5, 0xf7, 0x49, 0xfe, 0x00, 0x28, 0xee, 0xd1, + 0x10, 0xbd, 0xb0, 0x36, 0x00, 0x00, 0xff, 0xb5, + 0x8b, 0xb0, 0x19, 0x9b, 0x0d, 0x1c, 0x04, 0x1c, + 0x1a, 0x20, 0x3c, 0x00, 0x5c, 0xd0, 0x00, 0x00, + 0x00, 0x2b, 0x16, 0x99, 0x00, 0xd1, 0x18, 0x20, + 0x01, 0x90, 0x14, 0x98, 0x00, 0x28, 0x27, 0xd0, + 0xff, 0x20, 0x19, 0x9b, 0x01, 0x30, 0x00, 0x2b, + 0x01, 0xd1, 0x18, 0x23, 0x00, 0xe0, 0x1a, 0x23, + 0x04, 0x33, 0x82, 0x42, 0x04, 0xd3, 0xd0, 0x1a, + 0x40, 0x08, 0x40, 0x00, 0x00, 0x04, 0x00, 0x0c, + 0x0d, 0x90, 0x6a, 0x48, 0x00, 0x88, 0xc2, 0x1a, + 0x12, 0x04, 0x12, 0x0c, 0x3c, 0x00, 0x98, 0xd0, + 0x00, 0x00, 0x04, 0x92, 0x00, 0x29, 0x08, 0xd0, + 0x89, 0x79, 0x66, 0x4a, 0x49, 0x00, 0x51, 0x5a, + 0x04, 0x9a, 0x51, 0x1a, 0x0a, 0x04, 0x12, 0x0c, + 0x04, 0x92, 0x04, 0x9a, 0x82, 0x42, 0x05, 0xd9, + 0x00, 0x20, 0x04, 0x90, 0x02, 0xe0, 0x60, 0x48, + 0x04, 0x90, 0x0d, 0x90, 0x01, 0x98, 0x01, 0x04, + 0x09, 0x0c, 0x0a, 0x91, 0x00, 0x20, 0xf4, 0xf7, + 0x84, 0xfa, 0x00, 0x90, 0x00, 0x68, 0x3c, 0x00, + 0xd4, 0xd0, 0x00, 0x00, 0x00, 0x26, 0x06, 0x90, + 0x20, 0x60, 0x00, 0x20, 0x05, 0x90, 0x0e, 0x98, + 0x00, 0x24, 0x00, 0x05, 0x00, 0x0c, 0x09, 0x90, + 0x1a, 0x98, 0x0d, 0x9f, 0x40, 0x07, 0x40, 0x0f, + 0x08, 0x90, 0x07, 0x94, 0x03, 0x95, 0x00, 0x2d, + 0x0d, 0xd0, 0x28, 0x89, 0xb8, 0x42, 0x04, 0xd8, + 0x36, 0x18, 0x3f, 0x1a, 0x07, 0xd0, 0xed, 0x68, + 0xf5, 0xe7, 0x39, 0x04, 0x09, 0x0c, 0x28, 0x1c, + 0x3c, 0x00, 0x10, 0xd1, 0x00, 0x00, 0xf4, 0xf7, + 0x38, 0xfb, 0xef, 0xe7, 0x00, 0x2e, 0x02, 0xd1, + 0x07, 0x99, 0x00, 0x29, 0x71, 0xd1, 0x27, 0x1c, + 0x6c, 0x20, 0xf4, 0xf7, 0x88, 0xfb, 0x07, 0x99, + 0x04, 0x1c, 0x00, 0x29, 0x20, 0xd1, 0x07, 0x94, + 0x00, 0x20, 0xa0, 0x61, 0x18, 0x98, 0x27, 0x1c, + 0x60, 0x60, 0x17, 0x98, 0x24, 0x37, 0xa0, 0x60, + 0x06, 0x98, 0x20, 0x61, 0x15, 0x98, 0x0f, 0xc8, + 0x0f, 0xc7, 0x3c, 0x00, 0x4c, 0xd1, 0x00, 0x00, + 0x14, 0x98, 0x5c, 0x21, 0x60, 0x63, 0x09, 0x98, + 0x08, 0x53, 0x19, 0x98, 0x69, 0x21, 0xe0, 0x63, + 0x1b, 0x98, 0x08, 0x55, 0x1c, 0x98, 0x60, 0x65, + 0x19, 0x98, 0x00, 0x28, 0x23, 0xd0, 0x08, 0x98, + 0x06, 0x99, 0x08, 0x83, 0x1f, 0xe0, 0x6c, 0x22, + 0x20, 0x1c, 0x07, 0x99, 0xf3, 0xf7, 0x1a, 0xfa, + 0x3c, 0x60, 0x01, 0x98, 0x62, 0x21, 0x30, 0x18, + 0xc8, 0x53, 0x15, 0x98, 0x3c, 0x00, 0x88, 0xd1, + 0x00, 0x00, 0x40, 0x21, 0x80, 0x7a, 0xc8, 0x55, + 0x00, 0x20, 0xb8, 0x63, 0x06, 0x98, 0x0a, 0x99, + 0xf4, 0xf7, 0x1f, 0xfa, 0xf8, 0x60, 0x02, 0x99, + 0xf4, 0xf7, 0x3b, 0xf9, 0x20, 0x1c, 0x40, 0x30, + 0x81, 0x8b, 0x05, 0x9a, 0x12, 0x07, 0x12, 0x0f, + 0x11, 0x43, 0x81, 0x83, 0x03, 0x98, 0x5e, 0x21, + 0x02, 0x90, 0x01, 0x98, 0x22, 0x4a, 0x30, 0x18, + 0x08, 0x53, 0x12, 0x68, 0x01, 0x21, 0x3c, 0x00, + 0xc4, 0xd1, 0x00, 0x00, 0x08, 0x1c, 0x00, 0x2a, + 0x00, 0xd0, 0x1b, 0x98, 0x00, 0x06, 0x04, 0x9a, + 0x00, 0x0e, 0x96, 0x42, 0x03, 0xd9, 0x2c, 0x22, + 0x11, 0x55, 0x1b, 0x49, 0x04, 0xe0, 0x15, 0x99, + 0x2c, 0x22, 0x09, 0x7a, 0x11, 0x55, 0x19, 0x49, + 0x08, 0x5c, 0x66, 0x21, 0x08, 0x55, 0x1c, 0x98, + 0x00, 0x28, 0x01, 0xd0, 0x1f, 0x20, 0x08, 0x55, + 0x00, 0x2d, 0x03, 0xd0, 0xe8, 0x68, 0x03, 0x90, + 0x3c, 0x00, 0x00, 0xd2, 0x00, 0x00, 0x00, 0x20, + 0x00, 0xe0, 0x09, 0xe0, 0xe8, 0x60, 0x05, 0x98, + 0x00, 0x26, 0x01, 0x30, 0x00, 0x04, 0x00, 0x0c, + 0x0d, 0x9f, 0x05, 0x90, 0x03, 0x9d, 0x6d, 0xe7, + 0x00, 0x98, 0xe0, 0x60, 0x02, 0x99, 0xf4, 0xf7, + 0xfa, 0xf8, 0x00, 0x20, 0x20, 0x60, 0x01, 0x21, + 0xa1, 0x63, 0x60, 0x34, 0x60, 0x80, 0x07, 0x98, + 0x0f, 0xb0, 0xf0, 0xbd, 0x00, 0x00, 0x06, 0x61, + 0x01, 0x00, 0x3c, 0x00, 0x3c, 0xd2, 0x00, 0x00, + 0x5c, 0x43, 0x01, 0x00, 0x38, 0x09, 0x00, 0x00, + 0x18, 0x67, 0x01, 0x00, 0x0e, 0x61, 0x01, 0x00, + 0x0a, 0x61, 0x01, 0x00, 0x01, 0x48, 0x00, 0x68, + 0x70, 0x47, 0x00, 0x00, 0xc4, 0x6a, 0x01, 0x00, + 0x02, 0x49, 0x09, 0x1d, 0x03, 0xc9, 0x40, 0x18, + 0x70, 0x47, 0x00, 0x00, 0xc4, 0x69, 0x01, 0x00, + 0x01, 0x48, 0x00, 0x69, 0x70, 0x47, 0x00, 0x00, + 0xc4, 0x69, 0x01, 0x00, 0x3c, 0x00, 0x78, 0xd2, + 0x00, 0x00, 0x01, 0x48, 0x40, 0x69, 0x70, 0x47, + 0x00, 0x00, 0xc4, 0x69, 0x01, 0x00, 0x01, 0x48, + 0x80, 0x69, 0x70, 0x47, 0x00, 0x00, 0xc4, 0x69, + 0x01, 0x00, 0x70, 0xb5, 0x0d, 0x4e, 0x00, 0x20, + 0x35, 0x1c, 0x40, 0x35, 0xf0, 0x63, 0x0d, 0xe0, + 0xa0, 0x68, 0xf4, 0xf7, 0x7a, 0xf9, 0xb3, 0x6d, + 0x00, 0x2b, 0x04, 0xd0, 0x00, 0x22, 0x01, 0x20, + 0x61, 0x6b, 0xf3, 0xf7, 0x95, 0xf8, 0x3c, 0x00, + 0xb4, 0xd2, 0x00, 0x00, 0x20, 0x1c, 0xf4, 0xf7, + 0x9d, 0xfa, 0x28, 0x1c, 0xfa, 0xf7, 0x42, 0xfd, + 0x04, 0x1c, 0xec, 0xd1, 0x70, 0xbd, 0x00, 0x00, + 0xc4, 0x69, 0x01, 0x00, 0xf8, 0xb5, 0x1a, 0x4f, + 0x00, 0x26, 0xf8, 0x6b, 0x00, 0x28, 0x2c, 0xd0, + 0x38, 0x1c, 0x40, 0x30, 0x00, 0x90, 0x1d, 0xe0, + 0x16, 0x48, 0xb9, 0x6b, 0x02, 0xf0, 0x5c, 0xf8, + 0x00, 0x22, 0x20, 0x1c, 0x14, 0x49, 0x03, 0xf0, + 0x3c, 0x00, 0xf0, 0xd2, 0x00, 0x00, 0x7b, 0xff, + 0x05, 0x1c, 0x04, 0xd1, 0x38, 0x6a, 0x01, 0x30, + 0x38, 0x62, 0x01, 0x36, 0x0d, 0xe0, 0xa0, 0x68, + 0xf4, 0xf7, 0x49, 0xf9, 0xbb, 0x6d, 0x00, 0x2b, + 0x04, 0xd0, 0x00, 0x22, 0x28, 0x1c, 0x61, 0x6b, + 0xf3, 0xf7, 0x64, 0xf8, 0x20, 0x1c, 0xf4, 0xf7, + 0x6c, 0xfa, 0x00, 0x98, 0xfa, 0xf7, 0x11, 0xfd, + 0x04, 0x1c, 0xdc, 0xd1, 0x07, 0x48, 0xb9, 0x6b, + 0x02, 0xf0, 0x3c, 0x00, 0x2c, 0xd3, 0x00, 0x00, + 0x25, 0xf8, 0x00, 0x20, 0xf8, 0x63, 0x30, 0x1c, + 0xf8, 0xbd, 0x00, 0x00, 0xc4, 0x69, 0x01, 0x00, + 0x34, 0x63, 0x01, 0x00, 0x11, 0x30, 0x00, 0x00, + 0xc4, 0x60, 0x01, 0x00, 0x01, 0x49, 0x01, 0x20, + 0xc8, 0x63, 0x70, 0x47, 0xc4, 0x69, 0x01, 0x00, + 0x80, 0xb5, 0x00, 0x20, 0x05, 0x4a, 0x00, 0x21, + 0x1c, 0x23, 0x43, 0x43, 0x9b, 0x18, 0x01, 0x30, + 0x04, 0x28, 0xd9, 0x66, 0x3c, 0x00, 0x68, 0xd3, + 0x00, 0x00, 0xf8, 0xdb, 0xfc, 0xf7, 0xfd, 0xfc, + 0x80, 0xbd, 0xc4, 0x69, 0x01, 0x00, 0x01, 0x49, + 0xc8, 0x64, 0x70, 0x47, 0x00, 0x00, 0xc4, 0x69, + 0x01, 0x00, 0x01, 0x49, 0x88, 0x64, 0x70, 0x47, + 0x00, 0x00, 0xc4, 0x69, 0x01, 0x00, 0xb0, 0xb5, + 0x04, 0x1c, 0x0d, 0x1c, 0x21, 0x1c, 0x02, 0x8e, + 0x80, 0x6a, 0x40, 0x31, 0xf3, 0xf7, 0x2f, 0xf8, + 0x00, 0x28, 0x16, 0xd1, 0x02, 0x21, 0x3c, 0x00, + 0xa4, 0xd3, 0x00, 0x00, 0x20, 0x1c, 0xf4, 0xf7, + 0x6f, 0xfa, 0xe2, 0x69, 0xc0, 0x00, 0x10, 0x18, + 0x82, 0x8b, 0xab, 0x88, 0x9a, 0x42, 0x04, 0xd1, + 0x82, 0x69, 0x2b, 0x68, 0x9a, 0x42, 0x08, 0xd2, + 0x01, 0xe0, 0x9a, 0x42, 0x05, 0xd2, 0x00, 0x21, + 0x18, 0x30, 0x0c, 0xcd, 0x0c, 0xc0, 0x00, 0xe0, + 0x01, 0x21, 0x08, 0x1c, 0xb0, 0xbd, 0x00, 0x00, + 0xf8, 0xb5, 0x06, 0x1c, 0x00, 0x27, 0x44, 0x68, + 0x3c, 0x00, 0xe0, 0xd3, 0x00, 0x00, 0x0f, 0xe0, + 0x09, 0x49, 0x48, 0x6a, 0x01, 0x30, 0x48, 0x62, + 0xa0, 0x69, 0x00, 0x28, 0x02, 0xd0, 0xf4, 0xf7, + 0x00, 0xfa, 0xa7, 0x61, 0x26, 0x62, 0x25, 0x68, + 0x20, 0x1c, 0xff, 0xf7, 0x52, 0xfb, 0x2c, 0x1c, + 0x00, 0x2c, 0xed, 0xd1, 0xf8, 0xbd, 0xc4, 0x69, + 0x01, 0x00, 0x03, 0x30, 0x07, 0x4a, 0x81, 0x08, + 0x13, 0x68, 0x50, 0x68, 0x1b, 0x68, 0x89, 0x00, + 0x09, 0x18, 0x3c, 0x00, 0x1c, 0xd4, 0x00, 0x00, + 0x8b, 0x42, 0x01, 0xd3, 0x51, 0x60, 0x00, 0xe0, + 0x00, 0x20, 0x90, 0x60, 0x70, 0x47, 0x00, 0x00, + 0x8c, 0x6e, 0x01, 0x00, 0x70, 0xb5, 0x12, 0x4e, + 0x80, 0x38, 0xc5, 0x00, 0x70, 0x59, 0x0c, 0x1c, + 0x00, 0x28, 0x04, 0xd1, 0x01, 0x21, 0x0d, 0x20, + 0xf3, 0xf7, 0x2e, 0xff, 0x0d, 0xe0, 0x20, 0x69, + 0x00, 0x28, 0x05, 0xd1, 0xa8, 0x19, 0x81, 0x88, + 0xe0, 0x68, 0x01, 0xf0, 0x3c, 0x00, 0x58, 0xd4, + 0x00, 0x00, 0x47, 0xfa, 0x20, 0x61, 0x71, 0x59, + 0x20, 0x1c, 0xf2, 0xf7, 0xbb, 0xff, 0x04, 0x1c, + 0x00, 0x2c, 0x07, 0xd0, 0xe0, 0x68, 0x00, 0x28, + 0x01, 0xd0, 0xf4, 0xf7, 0x92, 0xf8, 0x20, 0x1c, + 0xf4, 0xf7, 0xbd, 0xf9, 0x70, 0xbd, 0x54, 0x42, + 0x01, 0x00, 0x70, 0xb5, 0x04, 0x1c, 0x0d, 0x1c, + 0x0e, 0x49, 0x06, 0x22, 0xf3, 0xf7, 0x35, 0xf8, + 0x00, 0x26, 0xe6, 0x61, 0x66, 0x62, 0x3c, 0x00, + 0x94, 0xd4, 0x00, 0x00, 0x07, 0x20, 0x30, 0x21, + 0x08, 0x55, 0xe6, 0x63, 0x28, 0x1c, 0xf8, 0xf7, + 0x6b, 0xf8, 0xa0, 0x76, 0x20, 0x1c, 0x14, 0x30, + 0x06, 0x22, 0x29, 0x1c, 0xf3, 0xf7, 0x24, 0xf8, + 0x06, 0x22, 0x29, 0x1c, 0xa0, 0x18, 0xf3, 0xf7, + 0x1f, 0xf8, 0x26, 0x61, 0x70, 0xbd, 0x00, 0x00, + 0x12, 0x61, 0x01, 0x00, 0x80, 0xb5, 0xfd, 0xf7, + 0x85, 0xfe, 0x80, 0xbd, 0x01, 0x49, 0x48, 0x60, + 0x3c, 0x00, 0xd0, 0xd4, 0x00, 0x00, 0x70, 0x47, + 0x00, 0x00, 0xe4, 0x65, 0x01, 0x00, 0x02, 0x49, + 0x80, 0xb5, 0x49, 0x68, 0xf2, 0xf7, 0x7c, 0xff, + 0x80, 0xbd, 0xe4, 0x65, 0x01, 0x00, 0x80, 0xb5, + 0xf4, 0xf7, 0xe5, 0xf9, 0x07, 0x49, 0x07, 0x48, + 0x0e, 0xc9, 0x0e, 0xc0, 0x18, 0x38, 0x00, 0x68, + 0x00, 0x28, 0x02, 0xd0, 0x02, 0xf0, 0xb7, 0xfa, + 0x80, 0xbd, 0x02, 0xf0, 0x9e, 0xfa, 0x80, 0xbd, + 0x00, 0x00, 0x3c, 0x00, 0x0c, 0xd5, 0x00, 0x00, + 0xb0, 0x58, 0x01, 0x00, 0x90, 0x73, 0x01, 0x00, + 0x05, 0x49, 0x80, 0xb5, 0x89, 0x68, 0x00, 0x20, + 0x00, 0x29, 0x00, 0xd1, 0x03, 0x20, 0x00, 0x06, + 0x00, 0x0e, 0xfa, 0xf7, 0xe3, 0xfb, 0x80, 0xbd, + 0x60, 0x6c, 0x01, 0x00, 0x80, 0xb5, 0x03, 0x48, + 0x06, 0x22, 0x03, 0x49, 0xf2, 0xf7, 0xde, 0xff, + 0x80, 0xbd, 0x00, 0x00, 0x40, 0x80, 0x07, 0x00, + 0x12, 0x61, 0x01, 0x00, 0x3c, 0x00, 0x48, 0xd5, + 0x00, 0x00, 0xb0, 0xb5, 0x04, 0x1c, 0x0c, 0x4d, + 0x0b, 0x1c, 0x21, 0x1c, 0x00, 0x20, 0x0c, 0x3d, + 0x00, 0x29, 0x09, 0x4c, 0x05, 0xd0, 0x28, 0x78, + 0x21, 0x1c, 0x10, 0x80, 0x02, 0x1c, 0x18, 0x1c, + 0x07, 0xe0, 0x11, 0x88, 0x0e, 0x29, 0x07, 0xd8, + 0x0a, 0x06, 0x12, 0x0e, 0x19, 0x1c, 0x20, 0x1c, + 0x2a, 0x70, 0xf2, 0xf7, 0xbe, 0xff, 0x01, 0x20, + 0xb0, 0xbd, 0xb0, 0x69, 0x01, 0x00, 0x3c, 0x00, + 0x84, 0xd5, 0x00, 0x00, 0x10, 0xb5, 0x00, 0x20, + 0x0a, 0x4a, 0x01, 0x21, 0x11, 0x60, 0x0a, 0x4c, + 0x0a, 0xe0, 0x02, 0x1c, 0x01, 0x6a, 0x50, 0x32, + 0x91, 0x42, 0x05, 0xd0, 0x61, 0x78, 0x3c, 0x23, + 0x59, 0x43, 0x09, 0x19, 0x04, 0x31, 0x01, 0x62, + 0x04, 0xf0, 0xba, 0xfb, 0x00, 0x28, 0xf0, 0xd1, + 0x10, 0xbd, 0x00, 0x00, 0xdc, 0x62, 0x01, 0x00, + 0x68, 0x61, 0x01, 0x00, 0x04, 0x48, 0x80, 0xb5, + 0x3c, 0x00, 0xc0, 0xd5, 0x00, 0x00, 0x00, 0x68, + 0x00, 0x28, 0x03, 0xd0, 0x01, 0x1c, 0x10, 0x20, + 0x04, 0xf0, 0xc7, 0xfe, 0x80, 0xbd, 0x28, 0x61, + 0x01, 0x00, 0x03, 0x22, 0x11, 0x1f, 0x80, 0xb5, + 0x00, 0x20, 0xfb, 0xf7, 0x76, 0xf9, 0x80, 0xbd, + 0x00, 0x00, 0x80, 0xb5, 0x0b, 0xf0, 0xb9, 0xfa, + 0x80, 0xbd, 0xff, 0xb5, 0x83, 0xb0, 0x16, 0x1c, + 0x00, 0x21, 0x01, 0x91, 0x1f, 0x1c, 0x08, 0x21, + 0x02, 0xaa, 0x3c, 0x00, 0xfc, 0xd5, 0x00, 0x00, + 0xfa, 0xf7, 0x0e, 0xff, 0x04, 0x1c, 0x2a, 0xd1, + 0x02, 0x98, 0x41, 0x68, 0x49, 0x00, 0x01, 0xd4, + 0x09, 0x24, 0x24, 0xe0, 0xfa, 0xf7, 0x52, 0xff, + 0x38, 0x60, 0x02, 0x98, 0x41, 0x68, 0x49, 0x02, + 0xcd, 0x0f, 0x29, 0x1c, 0xfa, 0xf7, 0x44, 0xff, + 0x01, 0x1c, 0x30, 0x60, 0x38, 0x68, 0x00, 0x06, + 0x00, 0x0e, 0x00, 0xf0, 0x1b, 0xf8, 0x00, 0x28, + 0x01, 0xd1, 0x0a, 0x24, 0x3c, 0x00, 0x38, 0xd6, + 0x00, 0x00, 0x0f, 0xe0, 0x31, 0x68, 0x02, 0x98, + 0x2b, 0x1c, 0x01, 0xaa, 0xfa, 0xf7, 0xd7, 0xff, + 0x00, 0x28, 0x06, 0xd0, 0x01, 0x98, 0x00, 0x28, + 0x04, 0xd0, 0x04, 0x99, 0x09, 0x68, 0x81, 0x42, + 0x00, 0xd2, 0x03, 0x24, 0x01, 0x98, 0x04, 0x99, + 0x08, 0x60, 0x07, 0xb0, 0x20, 0x1c, 0xf0, 0xbd, + 0x00, 0x00, 0x70, 0xb5, 0x05, 0x1c, 0x0e, 0x1c, + 0x01, 0x24, 0x00, 0xf0, 0x84, 0xff, 0x3c, 0x00, + 0x74, 0xd6, 0x00, 0x00, 0x00, 0x28, 0x08, 0xd0, + 0x03, 0x2d, 0x01, 0xd0, 0x04, 0x2d, 0x04, 0xd1, + 0x03, 0x20, 0xc0, 0x03, 0x86, 0x42, 0x00, 0xd3, + 0x00, 0x24, 0x20, 0x1c, 0x70, 0xbd, 0x00, 0x00, + 0x7c, 0xb5, 0x15, 0x1c, 0x06, 0x1c, 0x0c, 0x1c, + 0x29, 0x1c, 0x6a, 0x46, 0x01, 0xab, 0xff, 0xf7, + 0xa5, 0xff, 0x00, 0x28, 0x02, 0xd1, 0x00, 0x2c, + 0x01, 0xd1, 0x03, 0x20, 0x7c, 0xbd, 0x17, 0x48, + 0x3c, 0x00, 0xb0, 0xd6, 0x00, 0x00, 0x00, 0xab, + 0x06, 0x60, 0x18, 0x79, 0x07, 0x28, 0x21, 0xd2, + 0x02, 0xa3, 0x1b, 0x5c, 0x5b, 0x00, 0x9f, 0x44, + 0x00, 0x00, 0x1d, 0x04, 0x04, 0x06, 0x10, 0x17, + 0x13, 0x00, 0x04, 0x20, 0xed, 0xe7, 0x2a, 0x1c, + 0x21, 0x1c, 0x01, 0x20, 0x00, 0x9b, 0xf2, 0xf7, + 0x81, 0xfe, 0x00, 0x28, 0x12, 0xd1, 0x06, 0x20, + 0xe3, 0xe7, 0x2a, 0x68, 0x00, 0x99, 0x05, 0xe0, + 0x00, 0x98, 0x3c, 0x00, 0xec, 0xd6, 0x00, 0x00, + 0x42, 0x78, 0x81, 0x1c, 0x01, 0xe0, 0x2a, 0x68, + 0x69, 0x46, 0x20, 0x1c, 0xf2, 0xf7, 0xfe, 0xfe, + 0x03, 0xe0, 0x04, 0x21, 0x87, 0x20, 0xf3, 0xf7, + 0xcf, 0xfd, 0x00, 0x20, 0xd0, 0xe7, 0x00, 0x00, + 0xf8, 0x6b, 0x01, 0x00, 0xf7, 0xb5, 0x86, 0xb0, + 0x0e, 0x1c, 0x08, 0x21, 0x05, 0xaa, 0x06, 0x98, + 0xfa, 0xf7, 0x7e, 0xfe, 0x04, 0x1c, 0x45, 0xd1, + 0x05, 0x98, 0x41, 0x68, 0x3c, 0x00, 0x28, 0xd7, + 0x00, 0x00, 0x02, 0x90, 0x49, 0x02, 0xc9, 0x0f, + 0x00, 0x25, 0x04, 0x95, 0x03, 0x91, 0x08, 0x9f, + 0xfa, 0xf7, 0xd5, 0xfe, 0x01, 0x90, 0x02, 0xa9, + 0x03, 0xc9, 0xfa, 0xf7, 0xc6, 0xfe, 0x01, 0x99, + 0x05, 0x29, 0x14, 0xd2, 0x02, 0xa3, 0x5b, 0x5c, + 0x5b, 0x00, 0x9f, 0x44, 0x00, 0x00, 0x0e, 0x03, + 0x06, 0x0c, 0x03, 0x00, 0x87, 0x42, 0x0e, 0xd8, + 0x07, 0xe0, 0x87, 0x42, 0x0b, 0xd8, 0x3c, 0x00, + 0x64, 0xd7, 0x00, 0x00, 0x01, 0x25, 0xc0, 0x1b, + 0x04, 0x90, 0x07, 0xe0, 0x87, 0x42, 0x05, 0xd1, + 0x01, 0x25, 0x03, 0xe0, 0x05, 0x21, 0x87, 0x20, + 0xf3, 0xf7, 0x94, 0xfd, 0x00, 0x2d, 0x01, 0xd1, + 0x03, 0x24, 0x15, 0xe0, 0x05, 0x98, 0x41, 0x68, + 0x00, 0x29, 0x69, 0xda, 0x3a, 0x4a, 0x06, 0x99, + 0x11, 0x60, 0xfa, 0xf7, 0x91, 0xfe, 0x07, 0x1c, + 0x05, 0x98, 0x03, 0x99, 0xfa, 0xf7, 0x86, 0xfe, + 0x3c, 0x00, 0xa0, 0xd7, 0x00, 0x00, 0x05, 0x1c, + 0x01, 0x1c, 0x38, 0x1c, 0xff, 0xf7, 0x5f, 0xff, + 0x00, 0x28, 0x01, 0xd1, 0x0a, 0x24, 0x5e, 0xe0, + 0x07, 0x2f, 0x57, 0xd2, 0x02, 0xa3, 0xdb, 0x5d, + 0x5b, 0x00, 0x9f, 0x44, 0x00, 0x00, 0x53, 0x04, + 0x04, 0x06, 0x2e, 0x50, 0x48, 0x00, 0x04, 0x24, + 0x51, 0xe0, 0x04, 0x98, 0x00, 0x28, 0x01, 0xd1, + 0x00, 0x27, 0x14, 0xe0, 0x08, 0x99, 0x08, 0x18, + 0x00, 0x04, 0x3c, 0x00, 0xdc, 0xd7, 0x00, 0x00, + 0x00, 0x0c, 0xf4, 0xf7, 0x2b, 0xf8, 0x07, 0x1c, + 0x31, 0x1c, 0x08, 0x9a, 0xf2, 0xf7, 0x86, 0xfe, + 0x08, 0x98, 0x04, 0x99, 0x38, 0x18, 0xf2, 0xf7, + 0x2f, 0xfe, 0x08, 0x98, 0x04, 0x99, 0x3e, 0x1c, + 0x40, 0x18, 0x08, 0x90, 0x31, 0x1c, 0x00, 0x20, + 0x08, 0xaa, 0xf2, 0xf7, 0xec, 0xfd, 0x00, 0x28, + 0x00, 0xd1, 0x05, 0x24, 0x00, 0x2f, 0x2d, 0xd0, + 0x38, 0x1c, 0xf3, 0xf7, 0x3c, 0x00, 0x18, 0xd8, + 0x00, 0x00, 0xed, 0xff, 0x29, 0xe0, 0x03, 0x99, + 0x00, 0x29, 0x04, 0xd0, 0x05, 0x98, 0x40, 0x68, + 0x87, 0x02, 0xbf, 0x0a, 0x00, 0xe0, 0x00, 0x27, + 0x31, 0x1c, 0x28, 0x1c, 0x08, 0x9a, 0xf2, 0xf7, + 0x60, 0xfe, 0x04, 0x99, 0x00, 0x29, 0x03, 0xd0, + 0x08, 0x98, 0x28, 0x18, 0xf2, 0xf7, 0x07, 0xfe, + 0x00, 0x2f, 0x12, 0xd0, 0xf2, 0xf7, 0xcc, 0xfd, + 0x0f, 0xe0, 0x31, 0x1c, 0xa8, 0x1c, 0x3c, 0x00, + 0x54, 0xd8, 0x00, 0x00, 0x08, 0x9a, 0xf2, 0xf7, + 0x4f, 0xfe, 0x08, 0x98, 0x68, 0x70, 0x07, 0xe0, + 0xff, 0xe7, 0x07, 0x24, 0x04, 0xe0, 0x08, 0x24, + 0x03, 0x21, 0x87, 0x20, 0xf3, 0xf7, 0x1a, 0xfd, + 0x20, 0x1c, 0x09, 0xb0, 0xf0, 0xbd, 0x00, 0x00, + 0xf8, 0x6b, 0x01, 0x00, 0x9e, 0xb5, 0x1c, 0x1c, + 0x00, 0xab, 0x19, 0x72, 0x00, 0x92, 0x00, 0x22, + 0x01, 0x94, 0x69, 0x46, 0xfb, 0xf7, 0x08, 0xfa, + 0x3c, 0x00, 0x90, 0xd8, 0x00, 0x00, 0x9e, 0xbd, + 0x00, 0x00, 0x8f, 0xb5, 0x02, 0x92, 0x00, 0x22, + 0x00, 0x90, 0x01, 0x90, 0x03, 0x91, 0x69, 0x46, + 0x04, 0x20, 0xfb, 0xf7, 0xfc, 0xf9, 0x8f, 0xbd, + 0x00, 0x00, 0xb0, 0xb5, 0x0c, 0x1c, 0x01, 0x28, + 0x0a, 0xd0, 0x03, 0x28, 0x19, 0xd0, 0x04, 0x28, + 0x2c, 0xd1, 0x60, 0x68, 0x01, 0xf0, 0x35, 0xfc, + 0x01, 0x1c, 0x83, 0x20, 0x0c, 0xcc, 0x22, 0xe0, + 0x1c, 0x20, 0x3c, 0x00, 0xcc, 0xd8, 0x00, 0x00, + 0x14, 0x49, 0x60, 0x43, 0x40, 0x18, 0x14, 0x49, + 0x45, 0x18, 0x28, 0x1c, 0xf8, 0xf7, 0x46, 0xfc, + 0xa9, 0x68, 0x00, 0x29, 0x03, 0xd0, 0x22, 0x1c, + 0x08, 0x20, 0x05, 0xf0, 0x71, 0xfe, 0xb0, 0xbd, + 0x20, 0x8c, 0xc8, 0x28, 0x01, 0xd3, 0x04, 0x20, + 0x04, 0xe0, 0x65, 0x28, 0x01, 0xd3, 0x02, 0x20, + 0x00, 0xe0, 0x01, 0x20, 0x20, 0x84, 0x20, 0x1c, + 0x03, 0xf0, 0xdc, 0xfa, 0x3c, 0x00, 0x08, 0xd9, + 0x00, 0x00, 0x22, 0x68, 0xe3, 0x68, 0x01, 0x1c, + 0x82, 0x20, 0xff, 0xf7, 0xb4, 0xff, 0xb0, 0xbd, + 0xa0, 0x21, 0x08, 0x20, 0xf3, 0xf7, 0xc3, 0xfc, + 0xb0, 0xbd, 0xdc, 0x71, 0x01, 0x00, 0x64, 0xee, + 0xff, 0xff, 0x03, 0x48, 0x04, 0x4a, 0x81, 0x68, + 0x51, 0x61, 0xc0, 0x68, 0x90, 0x61, 0x70, 0x47, + 0x00, 0x00, 0xf4, 0x68, 0x01, 0x00, 0xc0, 0x71, + 0x01, 0x00, 0x03, 0x49, 0x04, 0x4a, 0x3c, 0x00, + 0x44, 0xd9, 0x00, 0x00, 0x08, 0x6b, 0x90, 0x60, + 0x88, 0x68, 0xd0, 0x60, 0x70, 0x47, 0x00, 0x00, + 0x90, 0x5c, 0x01, 0x00, 0xc0, 0x71, 0x01, 0x00, + 0x00, 0xb5, 0xff, 0xf7, 0xf1, 0xff, 0xff, 0xf7, + 0xe3, 0xff, 0x00, 0xbd, 0xb0, 0xb5, 0x0d, 0x1c, + 0x00, 0x28, 0x14, 0xd0, 0x0b, 0x49, 0x0c, 0x4c, + 0x88, 0x68, 0x62, 0x69, 0xc9, 0x68, 0x80, 0x1a, + 0xa2, 0x69, 0x89, 0x1a, 0x40, 0x18, 0x04, 0xd0, + 0x3c, 0x00, 0x80, 0xd9, 0x00, 0x00, 0x64, 0x23, + 0x59, 0x43, 0xf2, 0xf7, 0xc4, 0xfe, 0x20, 0x61, + 0xff, 0xf7, 0xcd, 0xff, 0x20, 0x69, 0x28, 0x60, + 0x01, 0x20, 0xb0, 0xbd, 0x00, 0x20, 0xb0, 0xbd, + 0x00, 0x00, 0xf4, 0x68, 0x01, 0x00, 0xc0, 0x71, + 0x01, 0x00, 0xb0, 0xb5, 0x0d, 0x1c, 0x00, 0x28, + 0x17, 0xd0, 0x0c, 0x49, 0x0d, 0x4c, 0x08, 0x6b, + 0xa2, 0x68, 0x89, 0x68, 0x80, 0x1a, 0xe2, 0x68, + 0x89, 0x1a, 0x3c, 0x00, 0xbc, 0xd9, 0x00, 0x00, + 0x40, 0x18, 0x07, 0xd0, 0x22, 0x88, 0x90, 0x42, + 0x04, 0xd9, 0x64, 0x23, 0x59, 0x43, 0xf2, 0xf7, + 0xa1, 0xfe, 0x60, 0x60, 0xff, 0xf7, 0xb6, 0xff, + 0x60, 0x68, 0x28, 0x60, 0x01, 0x20, 0xb0, 0xbd, + 0x00, 0x20, 0xb0, 0xbd, 0x90, 0x5c, 0x01, 0x00, + 0xc0, 0x71, 0x01, 0x00, 0x7c, 0xb5, 0x10, 0x68, + 0x00, 0x28, 0x02, 0xd0, 0x00, 0xf0, 0x24, 0xf8, + 0x7c, 0xbd, 0x0f, 0x48, 0x3c, 0x00, 0xf8, 0xd9, + 0x00, 0x00, 0xc0, 0x69, 0x84, 0x68, 0xe0, 0x68, + 0x25, 0x6a, 0xa6, 0x69, 0xf3, 0xf7, 0xe3, 0xfd, + 0xe1, 0x69, 0xf3, 0xf7, 0x06, 0xfd, 0x20, 0x1c, + 0xe2, 0x69, 0x40, 0x30, 0xc1, 0x8b, 0x12, 0x89, + 0x89, 0x18, 0xc1, 0x83, 0x07, 0x49, 0x01, 0x94, + 0x00, 0x91, 0x28, 0x69, 0x33, 0x1c, 0x82, 0x88, + 0x01, 0x68, 0xe0, 0x68, 0xc0, 0x68, 0xf8, 0xf7, + 0x1e, 0xfc, 0xe0, 0xe7, 0x00, 0x00, 0x3c, 0x00, + 0x34, 0xda, 0x00, 0x00, 0x84, 0x6a, 0x01, 0x00, + 0x91, 0x5e, 0x00, 0x00, 0xf0, 0xb5, 0x85, 0x69, + 0x06, 0x6a, 0x04, 0x1c, 0xc0, 0x68, 0x85, 0xb0, + 0xc0, 0x68, 0x00, 0x28, 0x01, 0xd1, 0xf3, 0xf7, + 0x57, 0xfc, 0x0a, 0x49, 0x02, 0x95, 0x04, 0x94, + 0x03, 0x91, 0x30, 0x69, 0x82, 0x88, 0x01, 0x68, + 0x26, 0x20, 0x01, 0x92, 0x00, 0x91, 0x43, 0x5d, + 0xe0, 0x68, 0xe1, 0x69, 0x2a, 0x1c, 0x0e, 0x32, + 0x3c, 0x00, 0x70, 0xda, 0x00, 0x00, 0xc0, 0x68, + 0xf8, 0xf7, 0x37, 0xfd, 0x05, 0xb0, 0xf0, 0xbd, + 0x00, 0x00, 0xe9, 0xd9, 0x00, 0x00, 0x10, 0xb5, + 0x14, 0x1c, 0x05, 0x48, 0xfc, 0xf7, 0x7b, 0xfb, + 0xa0, 0x68, 0xf3, 0xf7, 0x9e, 0xfd, 0xe1, 0x68, + 0xc1, 0x60, 0x20, 0x1c, 0xf5, 0xf7, 0xbb, 0xfa, + 0x10, 0xbd, 0xa0, 0x6a, 0x01, 0x00, 0x7c, 0xb5, + 0x04, 0x1c, 0x60, 0x30, 0x02, 0x7b, 0xa1, 0x69, + 0x00, 0x91, 0x3c, 0x00, 0xac, 0xda, 0x00, 0x00, + 0x01, 0x92, 0x22, 0x1c, 0x21, 0x1c, 0x38, 0x31, + 0xa0, 0x68, 0x48, 0x32, 0x0d, 0x1c, 0x63, 0x69, + 0x03, 0xf0, 0x7a, 0xfb, 0x08, 0x21, 0x00, 0x20, + 0xf3, 0xf7, 0x88, 0xfd, 0xe0, 0x60, 0x26, 0x69, + 0xb1, 0x6b, 0x00, 0x29, 0x01, 0xd0, 0x10, 0x23, + 0x00, 0xe0, 0x18, 0x23, 0x05, 0x49, 0x01, 0x94, + 0x00, 0x91, 0x31, 0x68, 0xca, 0x18, 0x08, 0x23, + 0x01, 0x1c, 0x28, 0x1c, 0x3c, 0x00, 0xe8, 0xda, + 0x00, 0x00, 0xf8, 0xf7, 0x20, 0xfd, 0x7c, 0xbd, + 0x00, 0x00, 0x81, 0xda, 0x00, 0x00, 0xf0, 0xb5, + 0x46, 0x68, 0x17, 0x1c, 0x04, 0x1c, 0x01, 0x21, + 0x30, 0x1c, 0x9b, 0xb0, 0xfa, 0xf7, 0x0d, 0xfc, + 0x00, 0x25, 0x00, 0x28, 0x03, 0xd0, 0x13, 0x49, + 0x0a, 0x7a, 0x01, 0x2a, 0x01, 0xd1, 0x01, 0x25, + 0x1c, 0xe0, 0x88, 0x62, 0x4e, 0x61, 0x20, 0x89, + 0xc8, 0x61, 0x60, 0x89, 0x00, 0x28, 0x3c, 0x00, + 0x24, 0xdb, 0x00, 0x00, 0x03, 0xd0, 0x00, 0x20, + 0x08, 0x84, 0x48, 0x84, 0x04, 0xe0, 0xe0, 0x68, + 0x08, 0x84, 0x20, 0x8a, 0x48, 0x84, 0x60, 0x8a, + 0x88, 0x84, 0x08, 0x6b, 0x00, 0x28, 0x03, 0xd1, + 0x01, 0xa8, 0x03, 0xf0, 0x77, 0xfc, 0x04, 0xe0, + 0x01, 0x20, 0x08, 0x61, 0x00, 0x20, 0x02, 0xf0, + 0x39, 0xfb, 0x3d, 0x71, 0x1b, 0xb0, 0x01, 0x20, + 0xf0, 0xbd, 0x00, 0x00, 0xf4, 0x6e, 0x01, 0x00, + 0x3c, 0x00, 0x60, 0xdb, 0x00, 0x00, 0x10, 0xb5, + 0x04, 0x1c, 0xf7, 0xf7, 0xe8, 0xfb, 0x00, 0x28, + 0x11, 0xd1, 0x4b, 0x20, 0x00, 0x5d, 0x01, 0x28, + 0x0d, 0xd1, 0x20, 0x1c, 0x04, 0xf0, 0x85, 0xfa, + 0x00, 0x21, 0x20, 0x1c, 0x04, 0xf0, 0xf3, 0xf8, + 0xa0, 0x69, 0x00, 0x21, 0xc2, 0x07, 0xd2, 0x0f, + 0x04, 0x20, 0xf4, 0xf7, 0xd8, 0xf9, 0x10, 0xbd, + 0x00, 0x00, 0x38, 0xb5, 0x04, 0x1c, 0x04, 0xf0, + 0x36, 0xf9, 0x3c, 0x00, 0x9c, 0xdb, 0x00, 0x00, + 0x00, 0x28, 0x03, 0xd0, 0x40, 0x30, 0x80, 0x7a, + 0x00, 0x28, 0x25, 0xd1, 0x0c, 0x20, 0x29, 0x21, + 0x08, 0x55, 0x21, 0x1c, 0x06, 0x22, 0xa0, 0x18, + 0xf2, 0xf7, 0xa0, 0xfc, 0x20, 0x1c, 0x06, 0x22, + 0x0e, 0x49, 0xf2, 0xf7, 0x9b, 0xfc, 0x01, 0x20, + 0xe0, 0x61, 0x60, 0x62, 0x07, 0x20, 0x30, 0x21, + 0x08, 0x55, 0x00, 0x25, 0xe5, 0x63, 0x06, 0x20, + 0x00, 0xab, 0x18, 0x80, 0x3c, 0x00, 0xd8, 0xdb, + 0x00, 0x00, 0xe0, 0x68, 0x00, 0x28, 0x01, 0xd0, + 0xf3, 0xf7, 0xdb, 0xfc, 0x02, 0x21, 0x68, 0x46, + 0xfd, 0xf7, 0x73, 0xfb, 0xe0, 0x60, 0x20, 0x1c, + 0xff, 0xf7, 0x69, 0xfc, 0xe5, 0x60, 0x20, 0x1c, + 0x38, 0xbd, 0x12, 0x61, 0x01, 0x00, 0xfe, 0xb5, + 0x05, 0x1c, 0x0e, 0x1c, 0x15, 0x20, 0x00, 0xab, + 0x98, 0x80, 0x14, 0x21, 0x17, 0x1c, 0x00, 0x20, + 0xf3, 0xf7, 0xe3, 0xfc, 0x02, 0x90, 0x3c, 0x00, + 0x14, 0xdc, 0x00, 0x00, 0x04, 0x68, 0x06, 0x22, + 0x31, 0x1c, 0x60, 0x1d, 0x25, 0x71, 0xf2, 0xf7, + 0x6b, 0xfc, 0x06, 0x22, 0x39, 0x1c, 0x20, 0x1c, + 0x0b, 0x30, 0xf2, 0xf7, 0x65, 0xfc, 0x01, 0xa8, + 0xff, 0xf7, 0x52, 0xfc, 0xfe, 0xbd, 0x00, 0x00, + 0x80, 0xb5, 0x00, 0x23, 0xfb, 0xf7, 0x5c, 0xf8, + 0x80, 0xbd, 0x00, 0x00, 0x70, 0xb5, 0x05, 0x1c, + 0x08, 0x35, 0x0f, 0x4e, 0x29, 0x1c, 0x04, 0x1c, + 0x3c, 0x00, 0x50, 0xdc, 0x00, 0x00, 0x06, 0x22, + 0x30, 0x1c, 0xf2, 0xf7, 0x50, 0xfc, 0xa0, 0x88, + 0xb0, 0x82, 0x28, 0x1c, 0x05, 0xf0, 0xa1, 0xff, + 0x00, 0x28, 0x0b, 0xd0, 0xe0, 0x88, 0x30, 0x61, + 0x28, 0x1c, 0x04, 0xf0, 0xcc, 0xf8, 0xa1, 0x88, + 0x40, 0x30, 0x41, 0x80, 0x00, 0x20, 0xf4, 0xf7, + 0xb8, 0xf9, 0x02, 0xe0, 0x04, 0x20, 0xf4, 0xf7, + 0xa0, 0xf9, 0x00, 0x20, 0x70, 0xbd, 0x70, 0x7c, + 0x01, 0x00, 0x3c, 0x00, 0x8c, 0xdc, 0x00, 0x00, + 0x80, 0xb5, 0x00, 0x20, 0xfb, 0xf7, 0xf8, 0xfb, + 0x80, 0xbd, 0x00, 0x00, 0x70, 0xb5, 0x04, 0x1c, + 0x04, 0x30, 0x05, 0x1c, 0xfd, 0xf7, 0x32, 0xf8, + 0x00, 0x28, 0x09, 0xd0, 0x00, 0x20, 0xf7, 0xf7, + 0x37, 0xfc, 0x00, 0x28, 0x04, 0xd0, 0x06, 0x22, + 0x01, 0x1c, 0x28, 0x1c, 0xf2, 0xf7, 0x1e, 0xfc, + 0x0a, 0x4e, 0x06, 0x22, 0x29, 0x1c, 0x30, 0x1c, + 0xf2, 0xf7, 0x18, 0xfc, 0x3c, 0x00, 0xc8, 0xdc, + 0x00, 0x00, 0x60, 0x89, 0xf0, 0x82, 0x28, 0x1c, + 0x05, 0xf0, 0x69, 0xff, 0x00, 0x28, 0x03, 0xd0, + 0x02, 0x20, 0xf4, 0xf7, 0x88, 0xf9, 0x02, 0xe0, + 0x05, 0x20, 0xf9, 0xf7, 0xf4, 0xfa, 0x00, 0x20, + 0x70, 0xbd, 0x70, 0x7c, 0x01, 0x00, 0x10, 0xb5, + 0x04, 0x1c, 0x00, 0x79, 0x04, 0x28, 0x1c, 0xd2, + 0x60, 0x79, 0x01, 0x28, 0x01, 0xd0, 0x03, 0x28, + 0x04, 0xd1, 0x00, 0x22, 0x01, 0x21, 0x3c, 0x00, + 0x04, 0xdd, 0x00, 0x00, 0xa0, 0x1d, 0xf9, 0xf7, + 0x69, 0xfc, 0x60, 0x79, 0x00, 0x28, 0x04, 0xd1, + 0x22, 0x79, 0x00, 0x21, 0xf9, 0xf7, 0x62, 0xfc, + 0x0a, 0xe0, 0x03, 0x28, 0x08, 0xd1, 0x00, 0x24, + 0x22, 0x1c, 0x00, 0x21, 0x00, 0x20, 0xf9, 0xf7, + 0x59, 0xfc, 0x01, 0x34, 0x04, 0x2c, 0xf7, 0xdb, + 0x01, 0x20, 0x10, 0xbd, 0xf0, 0xb5, 0x97, 0xb0, + 0x17, 0x1c, 0x05, 0x1c, 0x04, 0x30, 0x04, 0x1c, + 0x3c, 0x00, 0x40, 0xdd, 0x00, 0x00, 0x15, 0xaa, + 0x16, 0xa9, 0x05, 0xf0, 0xe2, 0xfe, 0x00, 0x28, + 0x2e, 0xd0, 0x15, 0x98, 0x4b, 0x21, 0x09, 0x5c, + 0x00, 0x29, 0x23, 0xd0, 0x01, 0x29, 0x02, 0xd0, + 0x02, 0x29, 0x1f, 0xd1, 0x01, 0xe0, 0x04, 0xf0, + 0x90, 0xf9, 0xad, 0x7a, 0x13, 0x48, 0x16, 0x9e, + 0x05, 0x80, 0x06, 0x22, 0x21, 0x1c, 0x08, 0x30, + 0xf2, 0xf7, 0xc1, 0xfb, 0x22, 0x1c, 0x31, 0x1c, + 0x02, 0xa8, 0x3c, 0x00, 0x7c, 0xdd, 0x00, 0x00, + 0x00, 0xf0, 0x74, 0xfb, 0x0a, 0x20, 0x0a, 0xa9, + 0x48, 0x72, 0x00, 0xab, 0x9d, 0x80, 0x02, 0x21, + 0x01, 0xa8, 0xfd, 0xf7, 0x9f, 0xfa, 0x05, 0x90, + 0x02, 0xa8, 0xff, 0xf7, 0x95, 0xfb, 0xf3, 0xf7, + 0xf7, 0xf9, 0x00, 0x21, 0x15, 0x98, 0x03, 0xf0, + 0xe1, 0xff, 0x00, 0x20, 0x00, 0xe0, 0x01, 0x20, + 0x38, 0x71, 0x17, 0xb0, 0x01, 0x20, 0xf0, 0xbd, + 0x98, 0x7c, 0x01, 0x00, 0x3c, 0x00, 0xb8, 0xdd, + 0x00, 0x00, 0x80, 0xb5, 0x01, 0x20, 0xfb, 0xf7, + 0x62, 0xfb, 0x80, 0xbd, 0x00, 0x00, 0xb0, 0xb5, + 0x04, 0x1c, 0x80, 0x7d, 0x15, 0x1c, 0x0a, 0x1c, + 0xc0, 0x07, 0xc0, 0x17, 0x01, 0x30, 0x21, 0x1c, + 0xf9, 0xf7, 0xfb, 0xfc, 0x00, 0x28, 0x03, 0xd1, + 0x04, 0x20, 0x28, 0x71, 0x01, 0x20, 0xb0, 0xbd, + 0x20, 0x6a, 0xf7, 0xf7, 0x76, 0xfe, 0x60, 0x6a, + 0xf7, 0xf7, 0x7b, 0xfe, 0x20, 0x6a, 0x3c, 0x00, + 0xf4, 0xdd, 0x00, 0x00, 0xfe, 0xf7, 0x88, 0xfa, + 0x00, 0x20, 0xb0, 0xbd, 0x10, 0xb5, 0x14, 0x1c, + 0xc2, 0x79, 0x81, 0x79, 0x80, 0x88, 0xf7, 0xf7, + 0xa1, 0xfa, 0x20, 0x71, 0x01, 0x20, 0x10, 0xbd, + 0x80, 0xb5, 0x01, 0x23, 0xfa, 0xf7, 0x70, 0xff, + 0x80, 0xbd, 0x00, 0x00, 0xf0, 0xb5, 0x04, 0x1c, + 0x08, 0x1c, 0x00, 0x21, 0x0f, 0x28, 0x91, 0xb0, + 0x00, 0xd3, 0x02, 0x21, 0x00, 0x29, 0x41, 0xd1, + 0x3c, 0x00, 0x30, 0xde, 0x00, 0x00, 0xc0, 0x00, + 0x24, 0x4f, 0x10, 0x90, 0xc6, 0x19, 0xb2, 0x88, + 0x21, 0x68, 0x02, 0xa8, 0xf2, 0xf7, 0x5b, 0xfb, + 0x21, 0x89, 0xb0, 0x88, 0x09, 0x1a, 0x00, 0x29, + 0x07, 0xdd, 0x09, 0x04, 0x22, 0x68, 0x09, 0x0c, + 0x10, 0x18, 0xf3, 0xf7, 0xc0, 0xfb, 0x05, 0x1c, + 0x00, 0xe0, 0x00, 0x25, 0xb0, 0x79, 0x80, 0x21, + 0x88, 0x43, 0x17, 0x49, 0x78, 0x31, 0x09, 0x5c, + 0x00, 0x20, 0x3c, 0x00, 0x6c, 0xde, 0x00, 0x00, + 0xf3, 0xf7, 0xb4, 0xfb, 0x07, 0x1c, 0x00, 0x68, + 0x13, 0x49, 0x01, 0x90, 0x10, 0x98, 0x0b, 0x58, + 0x01, 0x9a, 0x29, 0x1c, 0x02, 0xa8, 0xf2, 0xf7, + 0xac, 0xfa, 0x00, 0x90, 0x28, 0x1c, 0xf3, 0xf7, + 0x73, 0xfb, 0x20, 0x1c, 0xf3, 0xf7, 0x82, 0xfb, + 0x00, 0x98, 0x00, 0x28, 0x08, 0xd0, 0x02, 0x98, + 0x01, 0x99, 0x08, 0x60, 0xb0, 0x79, 0x39, 0x1c, + 0xfa, 0xf7, 0x20, 0xff, 0x3c, 0x00, 0xa8, 0xde, + 0x00, 0x00, 0x11, 0xb0, 0xf0, 0xbd, 0x38, 0x1c, + 0xf3, 0xf7, 0x61, 0xfb, 0xf9, 0xe7, 0x2d, 0x20, + 0xf3, 0xf7, 0xf5, 0xf9, 0x20, 0x1c, 0xf3, 0xf7, + 0x6c, 0xfb, 0xf2, 0xe7, 0x00, 0x00, 0x24, 0x44, + 0x01, 0x00, 0x70, 0xb5, 0x05, 0x1c, 0x20, 0x35, + 0x06, 0x1c, 0xa8, 0x79, 0x04, 0x28, 0x48, 0xd2, + 0xe9, 0x79, 0x01, 0x29, 0x13, 0xd1, 0x30, 0x1c, + 0x28, 0x30, 0x03, 0xf0, 0x92, 0xff, 0x3c, 0x00, + 0xe4, 0xde, 0x00, 0x00, 0x00, 0x28, 0x3f, 0xd0, + 0x01, 0x1c, 0x8c, 0x31, 0x01, 0x65, 0xa9, 0x79, + 0x4c, 0x22, 0x04, 0x1c, 0x11, 0x54, 0x81, 0x18, + 0x41, 0x62, 0x50, 0x34, 0x04, 0x62, 0xe1, 0x1e, + 0x81, 0x62, 0x0b, 0xe0, 0x00, 0x29, 0x2f, 0xd1, + 0x3c, 0x22, 0x18, 0x49, 0x42, 0x43, 0x54, 0x18, + 0x17, 0x4a, 0x04, 0x34, 0x12, 0x68, 0x00, 0x2a, + 0x00, 0xd1, 0x48, 0x70, 0x00, 0x2c, 0x23, 0xd0, + 0x3c, 0x00, 0x20, 0xdf, 0x00, 0x00, 0x35, 0x1c, + 0x30, 0x35, 0xe8, 0x79, 0x01, 0x28, 0x01, 0xd0, + 0x05, 0x28, 0x01, 0xd1, 0x06, 0x20, 0xe8, 0x71, + 0x20, 0x22, 0x31, 0x1d, 0x20, 0x68, 0xf2, 0xf7, + 0xde, 0xfa, 0xb0, 0x8c, 0xa0, 0x80, 0xe8, 0x79, + 0xa0, 0x71, 0xa8, 0x79, 0x00, 0x25, 0xa0, 0x63, + 0x01, 0x20, 0x60, 0x81, 0x00, 0x20, 0xe0, 0x60, + 0x2e, 0x36, 0xe8, 0x00, 0x00, 0x19, 0x18, 0x30, + 0x08, 0x22, 0x3c, 0x00, 0x5c, 0xdf, 0x00, 0x00, + 0x31, 0x1c, 0xf2, 0xf7, 0xcb, 0xfa, 0x01, 0x35, + 0x04, 0x2d, 0xf5, 0xd3, 0x01, 0x20, 0x70, 0xbd, + 0x68, 0x61, 0x01, 0x00, 0xdc, 0x62, 0x01, 0x00, + 0x10, 0xb5, 0x04, 0x1c, 0xc0, 0x7a, 0x01, 0x28, + 0x01, 0xd0, 0x03, 0x28, 0x07, 0xd1, 0x20, 0x1d, + 0x03, 0xf0, 0x40, 0xff, 0x00, 0x28, 0x02, 0xd0, + 0xa1, 0x7a, 0x40, 0x30, 0x41, 0x73, 0xe0, 0x7a, + 0x00, 0x28, 0x01, 0xd0, 0x3c, 0x00, 0x98, 0xdf, + 0x00, 0x00, 0x03, 0x28, 0x02, 0xd1, 0xa0, 0x7a, + 0x02, 0x49, 0x08, 0x70, 0x01, 0x20, 0x10, 0xbd, + 0x00, 0x00, 0x68, 0x61, 0x01, 0x00, 0x70, 0xb5, + 0x0e, 0x1c, 0x03, 0x21, 0x04, 0x1c, 0x30, 0x1c, + 0xfc, 0xf7, 0xe1, 0xfb, 0x00, 0x28, 0x01, 0xd0, + 0x85, 0x78, 0x00, 0xe0, 0x00, 0x25, 0x0b, 0x48, + 0x32, 0x1c, 0x00, 0x68, 0x03, 0x68, 0x20, 0x7c, + 0x80, 0x07, 0xc0, 0x0f, 0x21, 0x1c, 0x3c, 0x00, + 0xd4, 0xdf, 0x00, 0x00, 0xf7, 0xf7, 0x62, 0xfe, + 0x00, 0x28, 0x05, 0xd0, 0x01, 0x21, 0x28, 0x1c, + 0xfd, 0xf7, 0xfe, 0xfb, 0x00, 0x20, 0x00, 0xe0, + 0x08, 0x20, 0x03, 0xf0, 0xc5, 0xff, 0x00, 0x20, + 0x70, 0xbd, 0x00, 0x00, 0xe4, 0x65, 0x01, 0x00, + 0x80, 0xb5, 0x42, 0x68, 0x00, 0x88, 0x01, 0x21, + 0x49, 0x06, 0x08, 0x43, 0x2d, 0x21, 0x05, 0xf0, + 0xd3, 0xfb, 0x80, 0xbd, 0x03, 0x49, 0x01, 0x20, + 0x3c, 0x00, 0x10, 0xe0, 0x00, 0x00, 0x49, 0x78, + 0x02, 0x29, 0x00, 0xd0, 0x00, 0x20, 0x70, 0x47, + 0x00, 0x00, 0x84, 0x66, 0x01, 0x00, 0x8c, 0xb5, + 0x01, 0x28, 0x1f, 0xd1, 0x00, 0x29, 0x0d, 0xd0, + 0x01, 0x29, 0x0b, 0xd0, 0x02, 0x29, 0x01, 0xd0, + 0x03, 0x29, 0x16, 0xd1, 0x00, 0x20, 0xf9, 0xf7, + 0x14, 0xfc, 0x93, 0x20, 0x00, 0xab, 0x18, 0x80, + 0x00, 0x20, 0x08, 0xe0, 0x01, 0x29, 0x00, 0xd0, + 0x00, 0x20, 0x3c, 0x00, 0x4c, 0xe0, 0x00, 0x00, + 0xf9, 0xf7, 0x0a, 0xfc, 0x83, 0x20, 0x00, 0xab, + 0x18, 0x80, 0x02, 0x20, 0x00, 0xf0, 0xcc, 0xf8, + 0x01, 0x90, 0x68, 0x46, 0xff, 0xf7, 0x3a, 0xfa, + 0x8c, 0xbd, 0x01, 0x21, 0x0e, 0x20, 0xf3, 0xf7, + 0x1b, 0xf9, 0xf9, 0xe7, 0xff, 0xb5, 0x17, 0x1c, + 0x1e, 0x1c, 0x14, 0x21, 0x00, 0x20, 0x83, 0xb0, + 0xf3, 0xf7, 0xac, 0xfa, 0x05, 0x1c, 0x04, 0x68, + 0x12, 0x20, 0x00, 0xab, 0x3c, 0x00, 0x88, 0xe0, + 0x00, 0x00, 0x98, 0x80, 0x06, 0x22, 0x60, 0x1d, + 0x03, 0x99, 0xf2, 0xf7, 0x32, 0xfa, 0x00, 0x20, + 0x20, 0x71, 0x27, 0x73, 0x04, 0x99, 0x20, 0x1c, + 0xe1, 0x72, 0x31, 0x1c, 0x06, 0x22, 0x0d, 0x30, + 0xf2, 0xf7, 0x27, 0xfa, 0x02, 0x95, 0x01, 0xa8, + 0xff, 0xf7, 0x13, 0xfa, 0x07, 0xb0, 0xf0, 0xbd, + 0x00, 0x00, 0xf8, 0xb5, 0x06, 0x1c, 0x0f, 0x1c, + 0x0c, 0x21, 0x00, 0x20, 0xf3, 0xf7, 0x3c, 0x00, + 0xc4, 0xe0, 0x00, 0x00, 0x89, 0xfa, 0x05, 0x68, + 0x04, 0x1c, 0x28, 0x1d, 0x06, 0x22, 0x31, 0x1c, + 0xf2, 0xf7, 0x12, 0xfa, 0x6f, 0x81, 0x20, 0x1c, + 0xf8, 0xbd, 0x00, 0x00, 0xb0, 0xb5, 0x04, 0x1c, + 0x0d, 0x1c, 0x08, 0x21, 0x00, 0x20, 0xf3, 0xf7, + 0x77, 0xfa, 0x01, 0x68, 0x8c, 0x71, 0x8d, 0x80, + 0xb0, 0xbd, 0x00, 0x00, 0xf7, 0xb5, 0x0e, 0x1c, + 0x10, 0x21, 0x17, 0x1c, 0x00, 0x20, 0xf3, 0xf7, + 0x3c, 0x00, 0x00, 0xe1, 0x00, 0x00, 0x6b, 0xfa, + 0x04, 0x68, 0x05, 0x1c, 0x20, 0x1d, 0x06, 0x22, + 0x00, 0x99, 0xf2, 0xf7, 0xf4, 0xf9, 0x66, 0x81, + 0xa7, 0x81, 0x28, 0x1c, 0xfe, 0xbd, 0xf3, 0xb5, + 0x0c, 0x1c, 0x08, 0x21, 0x00, 0x20, 0x85, 0xb0, + 0xf3, 0xf7, 0x59, 0xfa, 0x06, 0x1c, 0x07, 0x68, + 0xe0, 0x68, 0x00, 0x28, 0x02, 0xd0, 0x05, 0x99, + 0x01, 0x29, 0x04, 0xd1, 0x05, 0x98, 0x38, 0x71, + 0x00, 0x20, 0x3c, 0x00, 0x3c, 0xe1, 0x00, 0x00, + 0x78, 0x71, 0x56, 0xe0, 0x03, 0x68, 0x01, 0x21, + 0x03, 0x93, 0x20, 0x69, 0x02, 0x90, 0xfc, 0xf7, + 0x17, 0xfb, 0x05, 0x1c, 0x02, 0x98, 0x32, 0x21, + 0xfc, 0xf7, 0x12, 0xfb, 0x00, 0x22, 0xd2, 0x43, + 0x01, 0x1c, 0x28, 0x1c, 0x04, 0xab, 0xf7, 0xf7, + 0xb9, 0xf8, 0x00, 0x28, 0x04, 0xd1, 0x30, 0x1c, + 0xf3, 0xf7, 0x02, 0xfa, 0x00, 0x26, 0x3c, 0xe0, + 0x00, 0x2d, 0x05, 0xd0, 0x3c, 0x00, 0x78, 0xe1, + 0x00, 0x00, 0x68, 0x78, 0x09, 0x38, 0x07, 0x28, + 0x01, 0xd8, 0x32, 0x20, 0x28, 0x70, 0x1c, 0x21, + 0x00, 0x20, 0xf3, 0xf7, 0x26, 0xfa, 0x01, 0x90, + 0x05, 0x68, 0x01, 0x1c, 0x30, 0x1c, 0xf3, 0xf7, + 0x40, 0xf9, 0xe0, 0x68, 0xf3, 0xf7, 0x0b, 0xfa, + 0xa8, 0x61, 0xe1, 0x68, 0x01, 0x98, 0xf3, 0xf7, + 0x38, 0xf9, 0x00, 0x20, 0xe0, 0x60, 0x05, 0x98, + 0x80, 0x21, 0x08, 0x43, 0x38, 0x71, 0x3c, 0x00, + 0xb4, 0xe1, 0x00, 0x00, 0x01, 0x20, 0x21, 0x1c, + 0x14, 0x31, 0x78, 0x71, 0x28, 0x1c, 0x06, 0x22, + 0xf2, 0xf7, 0x9a, 0xf9, 0x02, 0x9a, 0x29, 0x20, + 0x00, 0x92, 0x00, 0x5d, 0x01, 0x21, 0xe2, 0x6a, + 0x08, 0x28, 0x00, 0xd0, 0x00, 0x21, 0x28, 0x1c, + 0x03, 0x9b, 0x02, 0xf0, 0x9d, 0xff, 0xa0, 0x6b, + 0x28, 0x61, 0x20, 0x6c, 0x68, 0x61, 0x7f, 0x30, + 0x01, 0xd1, 0x0f, 0x20, 0x68, 0x61, 0x30, 0x1c, + 0x3c, 0x00, 0xf0, 0xe1, 0x00, 0x00, 0x07, 0xb0, + 0xf0, 0xbd, 0x10, 0xb5, 0x04, 0x1c, 0x08, 0x21, + 0x00, 0x20, 0xf3, 0xf7, 0xec, 0xf9, 0x01, 0x68, + 0x0c, 0x71, 0x10, 0xbd, 0x00, 0x00, 0x01, 0x48, + 0x00, 0x68, 0x70, 0x47, 0x00, 0x00, 0x28, 0x61, + 0x01, 0x00, 0x01, 0x49, 0x08, 0x60, 0x70, 0x47, + 0x00, 0x00, 0xe4, 0x65, 0x01, 0x00, 0x02, 0x1c, + 0x01, 0x20, 0x00, 0x06, 0x08, 0x43, 0x80, 0xb5, + 0x2d, 0x21, 0x3c, 0x00, 0x2c, 0xe2, 0x00, 0x00, + 0x05, 0xf0, 0xc0, 0xfa, 0x80, 0xbd, 0x00, 0x00, + 0x80, 0xb5, 0x01, 0x28, 0x07, 0xd0, 0xf1, 0x28, + 0x25, 0xd0, 0xf3, 0x28, 0x27, 0xd1, 0x02, 0x20, + 0x02, 0xf0, 0xbc, 0xf9, 0x80, 0xbd, 0x00, 0x29, + 0x1a, 0xd0, 0x01, 0x29, 0x03, 0xd0, 0xf2, 0x29, + 0xf8, 0xd1, 0x88, 0x21, 0x1c, 0xe0, 0x10, 0x48, + 0x01, 0x78, 0x00, 0x29, 0x05, 0xd1, 0x40, 0x78, + 0x01, 0x28, 0xef, 0xd1, 0x3c, 0x00, 0x68, 0xe2, + 0x00, 0x00, 0x00, 0xf0, 0x16, 0xfa, 0x80, 0xbd, + 0x0b, 0x48, 0x14, 0x30, 0x00, 0x89, 0xfc, 0xf7, + 0x5a, 0xfc, 0x01, 0x1c, 0x01, 0x22, 0x0f, 0x20, + 0x05, 0xf0, 0x9f, 0xf9, 0x80, 0xbd, 0x04, 0xf0, + 0x52, 0xfa, 0x80, 0xbd, 0x00, 0x20, 0xfa, 0xf7, + 0x32, 0xfe, 0x80, 0xbd, 0x02, 0x21, 0x0f, 0x20, + 0xf3, 0xf7, 0x05, 0xf8, 0x80, 0xbd, 0x84, 0x66, + 0x01, 0x00, 0x01, 0x48, 0x00, 0x78, 0x3c, 0x00, + 0xa4, 0xe2, 0x00, 0x00, 0x70, 0x47, 0x00, 0x00, + 0x74, 0x66, 0x01, 0x00, 0x01, 0x49, 0x00, 0x20, + 0x48, 0x60, 0x70, 0x47, 0xec, 0x65, 0x01, 0x00, + 0xf8, 0xb5, 0x0e, 0x1c, 0x13, 0x4d, 0x01, 0x1c, + 0x14, 0x1c, 0x68, 0x22, 0x28, 0x1c, 0x1f, 0x1c, + 0x0c, 0x30, 0xf2, 0xf7, 0x71, 0xf9, 0x0f, 0x49, + 0x00, 0x20, 0xac, 0x39, 0x48, 0x60, 0x01, 0x21, + 0x29, 0x60, 0x19, 0x21, 0x19, 0x2c, 0x6e, 0x67, + 0x3c, 0x00, 0xe0, 0xe2, 0x00, 0x00, 0x00, 0xd3, + 0x21, 0x1c, 0x29, 0x81, 0x09, 0x49, 0x14, 0x39, + 0x88, 0x73, 0x8f, 0x74, 0xc8, 0x78, 0x01, 0x28, + 0x08, 0xd0, 0x01, 0x21, 0x0f, 0x20, 0x05, 0xf0, + 0x9c, 0xf9, 0x19, 0x20, 0xfc, 0xf7, 0x15, 0xfc, + 0xfb, 0xf7, 0x99, 0xf8, 0x01, 0x20, 0xf8, 0xbd, + 0x00, 0x00, 0x98, 0x66, 0x01, 0x00, 0x80, 0xb5, + 0x01, 0x28, 0x02, 0xd1, 0x00, 0xf0, 0x2f, 0xf8, + 0x80, 0xbd, 0x3c, 0x00, 0x1c, 0xe3, 0x00, 0x00, + 0x01, 0x21, 0x1d, 0x20, 0xf2, 0xf7, 0xc0, 0xff, + 0x80, 0xbd, 0x00, 0x00, 0x70, 0x47, 0x00, 0x00, + 0x01, 0x20, 0x07, 0x49, 0x00, 0x05, 0x80, 0xb5, + 0x88, 0x60, 0x00, 0x22, 0x80, 0x21, 0x16, 0x20, + 0x05, 0xf0, 0x4c, 0xf9, 0x04, 0xf0, 0x34, 0xfd, + 0x02, 0x49, 0x08, 0x61, 0x80, 0xbd, 0x00, 0x00, + 0x00, 0x10, 0x07, 0x00, 0x24, 0x6d, 0x01, 0x00, + 0x06, 0x4a, 0x80, 0xb5, 0x3c, 0x00, 0x58, 0xe3, + 0x00, 0x00, 0xd1, 0x6a, 0x81, 0x42, 0x07, 0xd1, + 0x10, 0x7f, 0x24, 0x23, 0x04, 0x49, 0x58, 0x43, + 0x40, 0x18, 0xc0, 0x68, 0xf2, 0xf7, 0x35, 0xf8, + 0x80, 0xbd, 0xd4, 0x79, 0x01, 0x00, 0x94, 0x46, + 0x01, 0x00, 0x1d, 0x48, 0x1c, 0xb5, 0x00, 0x78, + 0x00, 0x28, 0x2d, 0xd0, 0x1c, 0x48, 0x00, 0x68, + 0x00, 0x28, 0x29, 0xd0, 0x1a, 0x4a, 0x1a, 0x4b, + 0x04, 0x32, 0x11, 0x68, 0x1c, 0x69, 0x3c, 0x00, + 0x94, 0xe3, 0x00, 0x00, 0xa1, 0x42, 0x22, 0xd1, + 0x51, 0x68, 0x5b, 0x69, 0x99, 0x42, 0x1f, 0xd1, + 0x16, 0x49, 0x49, 0x68, 0x93, 0x68, 0xc9, 0x1a, + 0x81, 0x42, 0x19, 0xd2, 0xd0, 0x68, 0x14, 0x49, + 0x01, 0x30, 0xd0, 0x60, 0x09, 0x68, 0x88, 0x42, + 0x0c, 0xd9, 0x06, 0x22, 0xff, 0x21, 0x68, 0x46, + 0xf2, 0xf7, 0x2e, 0xf9, 0xf3, 0xf7, 0xac, 0xfc, + 0x01, 0x1c, 0x00, 0x23, 0x00, 0x22, 0x68, 0x46, + 0x3c, 0x00, 0xd0, 0xe3, 0x00, 0x00, 0x02, 0xf0, + 0xce, 0xf9, 0x01, 0x22, 0x1d, 0x20, 0x0a, 0x49, + 0x05, 0xf0, 0xf7, 0xf8, 0x1c, 0xbd, 0xf7, 0xf7, + 0x88, 0xf9, 0x04, 0x22, 0x81, 0x18, 0x08, 0x1c, + 0xfc, 0xf7, 0x27, 0xfb, 0xf6, 0xe7, 0x1c, 0x75, + 0x01, 0x00, 0x44, 0x75, 0x01, 0x00, 0x28, 0x61, + 0x01, 0x00, 0x90, 0x5c, 0x01, 0x00, 0xf0, 0x59, + 0x01, 0x00, 0xa0, 0x86, 0x01, 0x00, 0x80, 0xb5, + 0x01, 0x68, 0x3c, 0x00, 0x0c, 0xe4, 0x00, 0x00, + 0x00, 0x29, 0x15, 0xd1, 0x00, 0x79, 0x02, 0x28, + 0x12, 0xd1, 0x08, 0x1c, 0xf7, 0xf7, 0x80, 0xf8, + 0x00, 0x28, 0x0d, 0xd0, 0x03, 0xf0, 0xf2, 0xfc, + 0x08, 0x30, 0x41, 0x8f, 0x00, 0x29, 0x07, 0xd1, + 0x80, 0x69, 0x00, 0x28, 0x04, 0xd0, 0x80, 0x79, + 0x06, 0x28, 0x01, 0xd1, 0xfc, 0xf7, 0x18, 0xfb, + 0x80, 0xbd, 0x00, 0x00, 0x01, 0x49, 0x00, 0x20, + 0x88, 0x62, 0x70, 0x47, 0x3c, 0x00, 0x48, 0xe4, + 0x00, 0x00, 0x78, 0x69, 0x01, 0x00, 0xb0, 0xb5, + 0x05, 0x4d, 0x04, 0x1c, 0xa9, 0x1d, 0xff, 0xf7, + 0x14, 0xf8, 0x06, 0x22, 0x29, 0x1c, 0xa0, 0x18, + 0xf2, 0xf7, 0x4b, 0xf8, 0xb0, 0xbd, 0x70, 0x7c, + 0x01, 0x00, 0xb0, 0xb5, 0x04, 0x1c, 0x15, 0x1c, + 0xff, 0xf7, 0x07, 0xf8, 0x06, 0x22, 0x29, 0x1c, + 0xa0, 0x18, 0xf2, 0xf7, 0x3e, 0xf8, 0xb0, 0xbd, + 0x00, 0x00, 0x80, 0xb5, 0x0a, 0x30, 0x3c, 0x00, + 0x84, 0xe4, 0x00, 0x00, 0xf7, 0xf7, 0xbc, 0xf9, + 0x01, 0x23, 0x00, 0x28, 0x03, 0xd0, 0x05, 0x48, + 0x00, 0x78, 0x01, 0x28, 0x04, 0xd1, 0x00, 0x22, + 0x00, 0x21, 0x00, 0x20, 0x03, 0xf0, 0xc6, 0xfd, + 0x80, 0xbd, 0x00, 0x00, 0xa0, 0x79, 0x01, 0x00, + 0x80, 0xb5, 0x00, 0x23, 0x00, 0x22, 0x00, 0x21, + 0x00, 0x20, 0x03, 0xf0, 0xbb, 0xfd, 0x80, 0xbd, + 0xb0, 0xb5, 0x05, 0x4d, 0xac, 0x79, 0x0a, 0x1c, + 0x3c, 0x00, 0xc0, 0xe4, 0x00, 0x00, 0x01, 0x1c, + 0x01, 0x23, 0x01, 0x20, 0x03, 0xf0, 0xb1, 0xfd, + 0xac, 0x71, 0xb0, 0xbd, 0x00, 0x00, 0x20, 0x10, + 0x07, 0x00, 0xf8, 0xb5, 0x06, 0x1c, 0x0c, 0x1c, + 0x88, 0x07, 0x02, 0xd5, 0xf6, 0xf7, 0x47, 0xfa, + 0x10, 0xe0, 0x60, 0x07, 0x0e, 0xd5, 0x17, 0x4f, + 0xa3, 0x20, 0xc0, 0x5d, 0x15, 0x4d, 0x10, 0x28, + 0x00, 0xd3, 0x15, 0x4d, 0x04, 0xf0, 0x59, 0xfc, + 0xb9, 0x6f, 0x3c, 0x00, 0xfc, 0xe4, 0x00, 0x00, + 0x40, 0x1a, 0x29, 0x1a, 0x01, 0x20, 0xf6, 0xf7, + 0xc1, 0xfa, 0xe0, 0x07, 0x11, 0x49, 0xc0, 0x0f, + 0x48, 0x60, 0x0c, 0xd0, 0x0d, 0x4c, 0x44, 0x3c, + 0x20, 0x78, 0x03, 0x28, 0x0f, 0xd1, 0x00, 0x2e, + 0x06, 0xd0, 0xf6, 0xf7, 0xf9, 0xf9, 0x01, 0x1c, + 0x01, 0x20, 0xf6, 0xf7, 0xaf, 0xfa, 0xf8, 0xbd, + 0x09, 0x49, 0x01, 0x20, 0xf6, 0xf7, 0xaa, 0xfa, + 0x01, 0x20, 0x20, 0x70, 0x3c, 0x00, 0x38, 0xe5, + 0x00, 0x00, 0xf7, 0xe7, 0x01, 0x21, 0x30, 0x1c, + 0xf6, 0xf7, 0x89, 0xfa, 0xf2, 0xe7, 0xa6, 0x0e, + 0x00, 0x00, 0xa4, 0x6c, 0x01, 0x00, 0xc4, 0x09, + 0x00, 0x00, 0xb0, 0x57, 0x01, 0x00, 0x40, 0x42, + 0x0f, 0x00, 0x80, 0xb5, 0x06, 0x28, 0x04, 0xdb, + 0x05, 0x21, 0xff, 0x20, 0xf2, 0xf7, 0x9f, 0xfe, + 0x80, 0xbd, 0x03, 0x4a, 0xc0, 0x00, 0x11, 0x50, + 0x01, 0x21, 0x80, 0x18, 0x01, 0x71, 0x3c, 0x00, + 0x74, 0xe5, 0x00, 0x00, 0x80, 0xbd, 0x00, 0x00, + 0x9c, 0x5a, 0x01, 0x00, 0x01, 0x48, 0x80, 0x68, + 0x70, 0x47, 0x00, 0x00, 0xd0, 0x60, 0x01, 0x00, + 0xb0, 0xb5, 0x08, 0x4c, 0x25, 0x1d, 0x28, 0x1c, + 0x21, 0x68, 0x00, 0xf0, 0xf1, 0xfe, 0x00, 0x28, + 0x03, 0xd1, 0x01, 0x21, 0x04, 0x48, 0xf2, 0xf7, + 0xcf, 0xfa, 0x28, 0x1c, 0x21, 0x68, 0x00, 0xf0, + 0xfb, 0xfe, 0xb0, 0xbd, 0xc0, 0x60, 0x01, 0x00, + 0x3c, 0x00, 0xb0, 0xe5, 0x00, 0x00, 0x2c, 0x10, + 0x07, 0x00, 0xb0, 0xb5, 0x10, 0x4d, 0x0c, 0x1c, + 0xa8, 0x68, 0x00, 0x28, 0x02, 0xd1, 0x04, 0xf0, + 0xf4, 0xfb, 0x28, 0x60, 0x20, 0x1c, 0x04, 0xf0, + 0x38, 0xfb, 0x01, 0x21, 0x03, 0x20, 0x03, 0xf0, + 0xc4, 0xfe, 0x04, 0xf0, 0xf0, 0xfb, 0xa8, 0x68, + 0x00, 0x28, 0x0b, 0xd1, 0x04, 0xf0, 0xe5, 0xfb, + 0x29, 0x68, 0x00, 0x1b, 0x40, 0x1a, 0x69, 0x68, + 0x40, 0x18, 0x3c, 0x00, 0xec, 0xe5, 0x00, 0x00, + 0x41, 0x08, 0x40, 0x18, 0x28, 0x60, 0x01, 0x20, + 0xa8, 0x60, 0xb0, 0xbd, 0xd0, 0x60, 0x01, 0x00, + 0xf8, 0xb5, 0x1f, 0x4e, 0x00, 0x24, 0xb0, 0x68, + 0x00, 0x28, 0x02, 0xd1, 0x04, 0xf0, 0xd0, 0xfb, + 0x70, 0x60, 0x05, 0xf0, 0x61, 0xf8, 0x04, 0xf0, + 0x8f, 0xfb, 0x05, 0x1c, 0xf9, 0xf7, 0x66, 0xfe, + 0x31, 0x68, 0x18, 0x4a, 0x41, 0x18, 0x12, 0x68, + 0xe8, 0x0b, 0x00, 0x2a, 0x3c, 0x00, 0x28, 0xe6, + 0x00, 0x00, 0x00, 0xd1, 0xa8, 0x0a, 0x40, 0x18, + 0x85, 0x42, 0x1f, 0xd9, 0x14, 0x4f, 0x2d, 0x1a, + 0x38, 0x1c, 0x20, 0x30, 0x81, 0x79, 0x00, 0xab, + 0x19, 0x70, 0xc0, 0x79, 0x58, 0x70, 0x05, 0xf0, + 0x6e, 0xf8, 0x00, 0x28, 0x03, 0xd1, 0x02, 0x21, + 0x8f, 0x20, 0xf2, 0xf7, 0x28, 0xfe, 0x29, 0x1c, + 0x0c, 0x48, 0xf2, 0x68, 0xf8, 0xf7, 0x09, 0xfc, + 0x00, 0x28, 0x04, 0xd0, 0x01, 0x1c, 0x3c, 0x00, + 0x64, 0xe6, 0x00, 0x00, 0x28, 0x1c, 0xff, 0xf7, + 0xa5, 0xff, 0x01, 0x24, 0x00, 0xab, 0x18, 0x88, + 0xf8, 0x84, 0x05, 0xf0, 0x47, 0xf8, 0x20, 0x1c, + 0xf8, 0xbd, 0x00, 0x00, 0xd0, 0x60, 0x01, 0x00, + 0xf4, 0x74, 0x01, 0x00, 0x00, 0x10, 0x07, 0x00, + 0x89, 0x13, 0x01, 0x00, 0x01, 0x49, 0x01, 0x20, + 0xc8, 0x60, 0x70, 0x47, 0xd0, 0x60, 0x01, 0x00, + 0x06, 0x48, 0x80, 0xb5, 0x00, 0x68, 0x01, 0x28, + 0x3c, 0x00, 0xa0, 0xe6, 0x00, 0x00, 0x07, 0xd1, + 0x04, 0x48, 0xac, 0x38, 0x01, 0x69, 0x03, 0x48, + 0x00, 0xf0, 0x79, 0xfe, 0xf3, 0xf7, 0x2b, 0xfa, + 0x80, 0xbd, 0x98, 0x66, 0x01, 0x00, 0x34, 0x63, + 0x01, 0x00, 0x80, 0xb5, 0x42, 0x78, 0x81, 0x68, + 0x00, 0x79, 0x03, 0xf0, 0xde, 0xff, 0x00, 0x28, + 0x01, 0xd1, 0xf5, 0xf7, 0xb6, 0xf9, 0x80, 0xbd, + 0x00, 0x00, 0x1f, 0xb5, 0x04, 0xf0, 0x69, 0xfb, + 0xf6, 0xf7, 0x3c, 0x00, 0xdc, 0xe6, 0x00, 0x00, + 0x91, 0xff, 0x16, 0x4c, 0x02, 0x28, 0x03, 0xd1, + 0xff, 0xf7, 0xdc, 0xfd, 0x04, 0x28, 0x02, 0xd3, + 0x00, 0x20, 0x20, 0x70, 0x1f, 0xbd, 0xfb, 0xf7, + 0xf7, 0xfc, 0x00, 0x28, 0xfa, 0xd1, 0x60, 0x6a, + 0x00, 0x28, 0xf7, 0xd0, 0x20, 0x78, 0x80, 0x07, + 0xf4, 0xd4, 0x09, 0x21, 0x16, 0x20, 0x04, 0xf0, + 0x93, 0xff, 0x01, 0x20, 0x20, 0x70, 0x0b, 0x4c, + 0x09, 0x49, 0x02, 0x90, 0x3c, 0x00, 0x18, 0xe7, + 0x00, 0x00, 0x01, 0x94, 0x00, 0x91, 0x04, 0xf0, + 0x46, 0xfb, 0x00, 0x19, 0x03, 0x90, 0x68, 0x46, + 0xfd, 0xf7, 0xb5, 0xfb, 0x00, 0x22, 0x16, 0x21, + 0x84, 0x20, 0x05, 0xf0, 0x3e, 0xf8, 0xdc, 0xe7, + 0x00, 0x00, 0x60, 0x6c, 0x01, 0x00, 0x61, 0xed, + 0x00, 0x00, 0x40, 0x42, 0x0f, 0x00, 0x23, 0x48, + 0x70, 0xb5, 0x80, 0x78, 0x9c, 0xb0, 0x01, 0x28, + 0x3e, 0xd1, 0x20, 0x4c, 0x09, 0xa8, 0x3c, 0x00, + 0x54, 0xe7, 0x00, 0x00, 0x80, 0x3c, 0x61, 0x1c, + 0xfe, 0xf7, 0x92, 0xfe, 0x04, 0x20, 0x11, 0xad, + 0x68, 0x72, 0xa0, 0x6f, 0x19, 0xa9, 0x18, 0x90, + 0x7c, 0x20, 0x00, 0x5d, 0x01, 0x26, 0x08, 0x71, + 0x1d, 0x20, 0x00, 0x5d, 0x00, 0x28, 0x06, 0xd0, + 0x10, 0x96, 0x12, 0x96, 0xfc, 0xf7, 0xf6, 0xfa, + 0x28, 0x72, 0x20, 0x7a, 0x11, 0x90, 0xf3, 0xf7, + 0xcd, 0xff, 0x6a, 0x21, 0x08, 0x53, 0x40, 0x34, + 0x3c, 0x00, 0x90, 0xe7, 0x00, 0x00, 0x00, 0x22, + 0x01, 0xa9, 0x06, 0xa8, 0xf6, 0xf7, 0xcd, 0xff, + 0x21, 0x1c, 0x00, 0x20, 0xfb, 0xf7, 0xcb, 0xfb, + 0x06, 0xa9, 0xfb, 0xf7, 0xc8, 0xfb, 0x01, 0xa9, + 0xfb, 0xf7, 0xc5, 0xfb, 0x0a, 0x49, 0x09, 0x68, + 0x00, 0x29, 0x07, 0xd0, 0x33, 0x1c, 0x0a, 0x22, + 0x69, 0x46, 0xfb, 0xf7, 0xda, 0xfb, 0x00, 0x9a, + 0x07, 0x21, 0x91, 0x70, 0x0c, 0x90, 0x09, 0xa8, + 0xfe, 0xf7, 0x3c, 0x00, 0xcc, 0xe7, 0x00, 0x00, + 0x7b, 0xfe, 0x1c, 0xb0, 0x70, 0xbd, 0x00, 0x00, + 0x84, 0x66, 0x01, 0x00, 0xe4, 0x62, 0x01, 0x00, + 0xf8, 0xb5, 0x04, 0x1c, 0xc0, 0x68, 0xff, 0x22, + 0x01, 0x68, 0x12, 0x02, 0x0e, 0x1c, 0x08, 0x7b, + 0x49, 0x7b, 0x09, 0x02, 0x11, 0x40, 0x08, 0x43, + 0x05, 0x1c, 0x31, 0x1c, 0x06, 0x22, 0xa0, 0x18, + 0xf1, 0xf7, 0x7c, 0xfe, 0x06, 0x22, 0xb1, 0x18, + 0x20, 0x1c, 0xf1, 0xf7, 0x3c, 0x00, 0x08, 0xe8, + 0x00, 0x00, 0x77, 0xfe, 0x28, 0x0a, 0x29, 0x02, + 0x08, 0x43, 0x00, 0x04, 0x03, 0x21, 0x49, 0x02, + 0x00, 0x0c, 0x88, 0x42, 0x08, 0xd2, 0xe0, 0x68, + 0x01, 0x89, 0x0e, 0x39, 0x01, 0x81, 0xe0, 0x68, + 0x01, 0x68, 0x0e, 0x31, 0x01, 0x60, 0xf8, 0xbd, + 0x00, 0x26, 0x20, 0x1c, 0x10, 0x30, 0x03, 0xf0, + 0xe8, 0xfa, 0x21, 0x8b, 0x00, 0x29, 0x05, 0xd1, + 0xe1, 0x7d, 0x00, 0x29, 0x0b, 0xd0, 0x3c, 0x00, + 0x44, 0xe8, 0x00, 0x00, 0x80, 0x69, 0x80, 0x07, + 0x08, 0xd4, 0xe0, 0x68, 0x01, 0x26, 0x01, 0x89, + 0x02, 0x39, 0x01, 0x81, 0xe0, 0x68, 0x01, 0x68, + 0x02, 0x31, 0x06, 0xe0, 0xe0, 0x68, 0x01, 0x89, + 0x06, 0x39, 0x01, 0x81, 0xe0, 0x68, 0x01, 0x68, + 0x06, 0x31, 0x01, 0x60, 0x14, 0x49, 0x00, 0x20, + 0x0b, 0x1f, 0x42, 0x00, 0x9a, 0x5a, 0xaa, 0x42, + 0x02, 0xd1, 0x11, 0x49, 0x06, 0x31, 0x02, 0xe0, + 0x3c, 0x00, 0x80, 0xe8, 0x00, 0x00, 0x01, 0x30, + 0x02, 0x28, 0xf5, 0xd3, 0xe0, 0x68, 0x06, 0x22, + 0x00, 0x68, 0xf1, 0xf7, 0x34, 0xfe, 0x01, 0x2e, + 0xcb, 0xd1, 0x81, 0x20, 0x00, 0xab, 0x18, 0x80, + 0xe1, 0x7d, 0x20, 0x8b, 0x49, 0x03, 0x08, 0x43, + 0x31, 0x03, 0x08, 0x43, 0x00, 0x04, 0x00, 0x0c, + 0x01, 0x0a, 0x00, 0x02, 0x08, 0x43, 0x58, 0x80, + 0xe0, 0x68, 0x19, 0x88, 0x00, 0x68, 0xc1, 0x80, + 0x59, 0x88, 0x3c, 0x00, 0xbc, 0xe8, 0x00, 0x00, + 0x01, 0x81, 0xb5, 0xe7, 0x6a, 0x46, 0x01, 0x00, + 0xb0, 0xb5, 0x0d, 0x1c, 0x01, 0x89, 0x06, 0x22, + 0x08, 0x31, 0x01, 0x81, 0x04, 0x68, 0x04, 0x49, + 0x08, 0x3c, 0x04, 0x60, 0x20, 0x1c, 0xf1, 0xf7, + 0x0d, 0xfe, 0xe5, 0x80, 0xb0, 0xbd, 0x00, 0x00, + 0x6a, 0x46, 0x01, 0x00, 0xf8, 0xb5, 0x00, 0x29, + 0x01, 0xd0, 0x00, 0x28, 0x01, 0xd1, 0x00, 0x20, + 0xf8, 0xbd, 0x09, 0x04, 0x3c, 0x00, 0xf8, 0xe8, + 0x00, 0x00, 0x09, 0x0c, 0xf2, 0xf7, 0x43, 0xff, + 0x06, 0x1c, 0x05, 0x1c, 0x00, 0x27, 0x20, 0xe0, + 0x2c, 0x89, 0x29, 0x68, 0x02, 0x2c, 0x01, 0xd2, + 0x02, 0x20, 0x01, 0xe0, 0x48, 0x78, 0x02, 0x30, + 0x84, 0x42, 0x02, 0xdd, 0x24, 0x1a, 0x09, 0x18, + 0xf4, 0xe7, 0x84, 0x42, 0x10, 0xd0, 0x01, 0x1b, + 0x0a, 0x04, 0x01, 0x04, 0x09, 0x0c, 0x12, 0x0c, + 0x28, 0x1c, 0xf2, 0xf7, 0x9e, 0xfe, 0x3c, 0x00, + 0x34, 0xe9, 0x00, 0x00, 0x00, 0x28, 0x06, 0xd1, + 0xe8, 0x68, 0xf2, 0xf7, 0x2d, 0xfe, 0xef, 0x60, + 0x28, 0x89, 0x00, 0x1b, 0x28, 0x81, 0xed, 0x68, + 0x00, 0x2d, 0xdc, 0xd1, 0x30, 0x1c, 0xd1, 0xe7, + 0xf8, 0xb5, 0x85, 0x68, 0x04, 0x1c, 0x80, 0x69, + 0x2e, 0x1c, 0x00, 0x28, 0x0d, 0xd0, 0x71, 0x68, + 0xf2, 0xf7, 0xf6, 0xfd, 0xa0, 0x69, 0xf2, 0xf7, + 0x17, 0xfe, 0x06, 0xe0, 0x00, 0x21, 0xc1, 0x60, + 0x3c, 0x00, 0x70, 0xe9, 0x00, 0x00, 0xf1, 0x60, + 0xa0, 0x8d, 0x36, 0x68, 0x01, 0x38, 0xa0, 0x85, + 0xf0, 0x68, 0x00, 0x28, 0xf5, 0xd1, 0x30, 0x68, + 0xa0, 0x60, 0xa0, 0x8d, 0x01, 0x38, 0x00, 0x04, + 0x00, 0x0c, 0xa0, 0x85, 0x02, 0xd0, 0x20, 0x1c, + 0xf9, 0xf7, 0x39, 0xf8, 0x2a, 0x4f, 0x2a, 0x48, + 0x00, 0x68, 0x00, 0x28, 0x03, 0xd0, 0x06, 0x21, + 0x68, 0x68, 0xfa, 0xf7, 0x7c, 0xfd, 0x68, 0x68, + 0x00, 0x68, 0x3c, 0x00, 0xac, 0xe9, 0x00, 0x00, + 0x81, 0x78, 0x00, 0x29, 0x2b, 0xd1, 0xc1, 0x78, + 0x00, 0x29, 0x30, 0xd1, 0x21, 0x8e, 0x01, 0x39, + 0x21, 0x86, 0xfb, 0xf7, 0x15, 0xf8, 0xa1, 0x6a, + 0x08, 0x1a, 0xa0, 0x62, 0xe1, 0x69, 0x88, 0x42, + 0x03, 0xd9, 0x04, 0x21, 0x02, 0x20, 0xf2, 0xf7, + 0x67, 0xfc, 0xb8, 0x68, 0x00, 0x28, 0x1e, 0xd0, + 0x1a, 0x49, 0x20, 0x8e, 0x49, 0x68, 0x0c, 0x22, + 0x52, 0x1a, 0x90, 0x42, 0x3c, 0x00, 0xe8, 0xe9, + 0x00, 0x00, 0x08, 0xd3, 0x19, 0x23, 0x9b, 0x01, + 0xaf, 0x22, 0x92, 0x01, 0x59, 0x43, 0xa0, 0x6a, + 0x51, 0x1a, 0x88, 0x42, 0x0e, 0xd2, 0x00, 0x21, + 0x0c, 0x20, 0x03, 0xf0, 0xac, 0xfc, 0x00, 0x20, + 0xb8, 0x60, 0x07, 0xe0, 0x01, 0x29, 0x05, 0xd1, + 0xc0, 0x78, 0x17, 0x28, 0x02, 0xd1, 0xa0, 0x8e, + 0x01, 0x38, 0xa0, 0x86, 0x2a, 0x1d, 0x06, 0xca, + 0xe0, 0x68, 0x63, 0x69, 0xf1, 0xf7, 0x3c, 0x00, + 0x24, 0xea, 0x00, 0x00, 0xdc, 0xfc, 0xb5, 0x42, + 0x01, 0xd0, 0x2d, 0x68, 0xb4, 0xe7, 0xa0, 0x8d, + 0x00, 0x28, 0x03, 0xd1, 0x05, 0x48, 0xb9, 0x69, + 0x00, 0xf0, 0x9e, 0xfc, 0xf8, 0xbd, 0x00, 0x00, + 0xfc, 0x5a, 0x01, 0x00, 0xcc, 0x5c, 0x01, 0x00, + 0x18, 0x57, 0x01, 0x00, 0xc4, 0x60, 0x01, 0x00, + 0x89, 0x07, 0x07, 0x4b, 0xca, 0x0f, 0x80, 0xb5, + 0x19, 0x7c, 0x00, 0x29, 0x06, 0xd0, 0x81, 0x43, + 0x3c, 0x00, 0x60, 0xea, 0x00, 0x00, 0x19, 0x74, + 0x03, 0xd1, 0x07, 0x21, 0x15, 0x20, 0x04, 0xf0, + 0xa2, 0xfe, 0x80, 0xbd, 0x00, 0x00, 0x78, 0x69, + 0x01, 0x00, 0x80, 0xb5, 0x01, 0x1c, 0x01, 0x20, + 0xff, 0xf7, 0xe9, 0xff, 0x80, 0xbd, 0x80, 0xb5, + 0x01, 0x1c, 0x02, 0x20, 0xff, 0xf7, 0xe3, 0xff, + 0x80, 0xbd, 0xb0, 0xb5, 0x1b, 0x4c, 0x60, 0x68, + 0xfc, 0xf7, 0x2f, 0xff, 0x20, 0x68, 0x00, 0x25, + 0x40, 0x68, 0x3c, 0x00, 0x9c, 0xea, 0x00, 0x00, + 0x00, 0x28, 0x03, 0xd0, 0xfd, 0xf7, 0x18, 0xfc, + 0x20, 0x68, 0x45, 0x60, 0x60, 0x68, 0xfc, 0xf7, + 0xc5, 0xfe, 0x14, 0x48, 0x61, 0x68, 0x00, 0xf0, + 0x61, 0xfc, 0xa0, 0x7a, 0x01, 0x28, 0x05, 0xd0, + 0x02, 0x28, 0x03, 0xd0, 0x20, 0x68, 0x00, 0x68, + 0x00, 0xf0, 0xde, 0xf8, 0x01, 0x21, 0x1f, 0x20, + 0x04, 0xf0, 0xb2, 0xfd, 0x00, 0x21, 0x1f, 0x20, + 0x04, 0xf0, 0xae, 0xfd, 0x3c, 0x00, 0xd8, 0xea, + 0x00, 0x00, 0x02, 0x21, 0x1f, 0x20, 0x04, 0xf0, + 0xaa, 0xfd, 0xa5, 0x72, 0x21, 0x68, 0x2c, 0x20, + 0x40, 0x5c, 0x89, 0x68, 0xf1, 0xf7, 0x76, 0xfc, + 0x60, 0x68, 0xfc, 0xf7, 0xe4, 0xfe, 0x20, 0x68, + 0x05, 0x62, 0xb0, 0xbd, 0x00, 0x00, 0x14, 0x7a, + 0x01, 0x00, 0x34, 0x63, 0x01, 0x00, 0x04, 0x49, + 0x0a, 0x68, 0xc8, 0x68, 0x92, 0x6a, 0x00, 0x2a, + 0x01, 0xd0, 0x09, 0x69, 0x08, 0x18, 0x3c, 0x00, + 0x14, 0xeb, 0x00, 0x00, 0x70, 0x47, 0x00, 0x00, + 0x14, 0x7a, 0x01, 0x00, 0xb0, 0xb5, 0x13, 0x4c, + 0x05, 0x1c, 0xa0, 0x7a, 0x01, 0x38, 0x02, 0x28, + 0x19, 0xd8, 0x01, 0x21, 0x1f, 0x20, 0x04, 0xf0, + 0x81, 0xfd, 0x20, 0x68, 0xfc, 0x23, 0x01, 0x1c, + 0x20, 0x30, 0x02, 0x7b, 0x1a, 0x40, 0x02, 0x73, + 0x00, 0x2d, 0x0f, 0xd0, 0x01, 0x23, 0x1a, 0x43, + 0x02, 0x73, 0xa0, 0x7a, 0x03, 0x28, 0x07, 0xd1, + 0x3c, 0x00, 0x50, 0xeb, 0x00, 0x00, 0x01, 0x20, + 0x01, 0xf0, 0xe7, 0xfd, 0x00, 0x28, 0x01, 0xd1, + 0xff, 0xf7, 0x97, 0xff, 0xb0, 0xbd, 0x4b, 0x62, + 0xb0, 0xbd, 0x02, 0x21, 0x11, 0x43, 0x01, 0x73, + 0xf6, 0xe7, 0x14, 0x7a, 0x01, 0x00, 0x10, 0xb5, + 0x04, 0x1c, 0x0a, 0x30, 0xf6, 0xf7, 0x43, 0xfe, + 0x00, 0x28, 0x0c, 0xd0, 0x22, 0x88, 0x0a, 0x49, + 0x0b, 0x7a, 0x90, 0x04, 0xc0, 0x0f, 0x00, 0x2b, + 0x06, 0xd1, 0x3c, 0x00, 0x8c, 0xeb, 0x00, 0x00, + 0x12, 0x06, 0x92, 0x0e, 0x20, 0x2a, 0x00, 0xd1, + 0x01, 0x20, 0xc8, 0x60, 0x10, 0xbd, 0x00, 0x28, + 0xfc, 0xd1, 0x00, 0x22, 0x24, 0x21, 0x80, 0x20, + 0x04, 0xf0, 0x04, 0xfe, 0x10, 0xbd, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x80, 0xb5, 0x02, 0x1c, + 0x1f, 0x21, 0x80, 0x20, 0x04, 0xf0, 0xfa, 0xfd, + 0x80, 0xbd, 0x00, 0x00, 0xf8, 0xb5, 0x1d, 0x4e, + 0x04, 0x1c, 0x30, 0x68, 0x3c, 0x00, 0xc8, 0xeb, + 0x00, 0x00, 0x1d, 0x1c, 0x47, 0x68, 0x20, 0x1c, + 0xf1, 0xf7, 0x0a, 0xfc, 0xfb, 0xf7, 0x87, 0xfa, + 0x00, 0x28, 0x04, 0xd0, 0x28, 0x1c, 0xf2, 0xf7, + 0x2a, 0xfb, 0x00, 0x28, 0x28, 0xd1, 0x20, 0x88, + 0x40, 0x05, 0x25, 0xd4, 0x30, 0x68, 0x00, 0x68, + 0xfe, 0xf7, 0x59, 0xf9, 0x00, 0x28, 0x03, 0xd1, + 0xfd, 0xf7, 0x89, 0xfa, 0xf1, 0xf7, 0xed, 0xfb, + 0x30, 0x68, 0x00, 0x25, 0x40, 0x68, 0x3c, 0x00, + 0x04, 0xec, 0x00, 0x00, 0x00, 0x28, 0x03, 0xd0, + 0xfd, 0xf7, 0x64, 0xfb, 0x30, 0x68, 0x45, 0x60, + 0x20, 0x88, 0x00, 0x09, 0x00, 0x07, 0x03, 0xd1, + 0x04, 0xf0, 0xc8, 0xf8, 0x61, 0x88, 0x45, 0x18, + 0x30, 0x68, 0x45, 0x61, 0x81, 0x6a, 0x01, 0x31, + 0x81, 0x62, 0x20, 0x88, 0x80, 0x04, 0xc1, 0x0f, + 0x02, 0x48, 0xf8, 0xf7, 0xcd, 0xff, 0xf8, 0xbd, + 0x14, 0x7a, 0x01, 0x00, 0xb1, 0xeb, 0x00, 0x00, + 0x3c, 0x00, 0x40, 0xec, 0x00, 0x00, 0xb0, 0xb5, + 0x0e, 0x4c, 0x05, 0x1c, 0x60, 0x68, 0xfc, 0xf7, + 0xf6, 0xfd, 0x0c, 0x48, 0x61, 0x68, 0x00, 0xf0, + 0x92, 0xfb, 0x00, 0x21, 0x24, 0x20, 0x04, 0xf0, + 0xec, 0xfc, 0x00, 0x22, 0xd2, 0x43, 0x80, 0x21, + 0x24, 0x20, 0x04, 0xf0, 0xb8, 0xfc, 0x00, 0x20, + 0xe0, 0x60, 0x20, 0x72, 0x20, 0x68, 0x01, 0x68, + 0x28, 0x06, 0x00, 0x0e, 0xf1, 0xf7, 0xb0, 0xfb, + 0xb0, 0xbd, 0x3c, 0x00, 0x7c, 0xec, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x34, 0x63, 0x01, 0x00, + 0x10, 0xb5, 0x04, 0x1c, 0xc0, 0x68, 0xf2, 0xf7, + 0x85, 0xfc, 0x20, 0x1c, 0xf2, 0xf7, 0xb0, 0xfd, + 0x10, 0xbd, 0x00, 0x00, 0x70, 0xb5, 0x1c, 0x4e, + 0x05, 0x1c, 0xb0, 0x7a, 0x2c, 0x1c, 0x40, 0x34, + 0x02, 0x28, 0x26, 0xd1, 0xa0, 0x8b, 0x31, 0x89, + 0x88, 0x42, 0x22, 0xd1, 0x30, 0x68, 0x41, 0x6a, + 0x00, 0x29, 0x08, 0xd0, 0x3c, 0x00, 0xb8, 0xec, + 0x00, 0x00, 0x20, 0x30, 0x00, 0x7b, 0xc0, 0x07, + 0x04, 0xd5, 0x01, 0x20, 0x01, 0xf0, 0x2f, 0xfd, + 0x00, 0x28, 0x18, 0xd1, 0x60, 0x78, 0x00, 0x28, + 0x09, 0xd1, 0x30, 0x68, 0x02, 0x23, 0x20, 0x30, + 0x02, 0x7b, 0x0d, 0x49, 0x52, 0x08, 0x52, 0x00, + 0x1a, 0x43, 0x02, 0x73, 0x01, 0xe0, 0xff, 0x21, + 0xf5, 0x31, 0x01, 0x22, 0x1f, 0x20, 0x04, 0xf0, + 0x6e, 0xfc, 0x03, 0x20, 0xb0, 0x72, 0x3c, 0x00, + 0xf4, 0xec, 0x00, 0x00, 0x02, 0xe0, 0x28, 0x1c, + 0xff, 0xf7, 0xc4, 0xff, 0x60, 0x78, 0x00, 0x28, + 0x03, 0xd1, 0x29, 0x1c, 0x01, 0x20, 0x03, 0xf0, + 0x29, 0xfb, 0x70, 0xbd, 0x14, 0x7a, 0x01, 0x00, + 0x50, 0xc3, 0x00, 0x00, 0xb0, 0xb5, 0x04, 0x1c, + 0x60, 0x34, 0xe0, 0x79, 0x0e, 0x4d, 0x00, 0x28, + 0x0a, 0xd1, 0x02, 0x20, 0xa8, 0x72, 0x28, 0x68, + 0x40, 0x68, 0x00, 0x28, 0x04, 0xd1, 0x0b, 0x48, + 0x3c, 0x00, 0x30, 0xed, 0x00, 0x00, 0xfd, 0xf7, + 0xd0, 0xfa, 0x29, 0x68, 0x48, 0x60, 0x04, 0xf0, + 0x38, 0xf8, 0x29, 0x68, 0xc8, 0x61, 0xff, 0xf7, + 0xe0, 0xfe, 0x29, 0x68, 0x09, 0x69, 0x08, 0x1a, + 0x03, 0xf0, 0x6f, 0xff, 0x00, 0x28, 0x01, 0xd0, + 0xe0, 0x79, 0xa0, 0x71, 0xb0, 0xbd, 0x14, 0x7a, + 0x01, 0x00, 0xc1, 0xeb, 0x00, 0x00, 0xf8, 0xb5, + 0x04, 0x1c, 0x00, 0x26, 0x04, 0xf0, 0x21, 0xf8, + 0x05, 0x1c, 0x3c, 0x00, 0x6c, 0xed, 0x00, 0x00, + 0x22, 0x48, 0x00, 0x27, 0x07, 0x70, 0xa1, 0x07, + 0x04, 0xd0, 0xe1, 0x07, 0xc9, 0x0f, 0x01, 0x62, + 0xc5, 0x61, 0x01, 0x26, 0x41, 0x6b, 0x00, 0x29, + 0x34, 0xd1, 0x00, 0x2e, 0x32, 0xd0, 0x06, 0x1c, + 0xf9, 0xf7, 0x44, 0xff, 0x31, 0x6b, 0x1a, 0x4b, + 0x41, 0x1a, 0xa2, 0x07, 0x12, 0xd5, 0xda, 0x68, + 0x00, 0x2a, 0x08, 0xdd, 0x91, 0x42, 0x1a, 0x68, + 0x02, 0xda, 0x14, 0x09, 0x3c, 0x00, 0xa8, 0xed, + 0x00, 0x00, 0xa2, 0x18, 0x06, 0xe0, 0x14, 0x09, + 0x12, 0x1b, 0x03, 0xe0, 0x0a, 0x43, 0x02, 0xd1, + 0x1a, 0x68, 0x52, 0x00, 0x1a, 0x60, 0xb7, 0x63, + 0x0a, 0xe0, 0xb2, 0x6b, 0x01, 0x32, 0xb2, 0x63, + 0x02, 0x2a, 0x1a, 0x68, 0x01, 0xdd, 0x94, 0x08, + 0x00, 0xe0, 0x14, 0x09, 0x12, 0x1b, 0x1a, 0x60, + 0xd9, 0x60, 0x30, 0x63, 0xf5, 0x62, 0x18, 0x68, + 0x08, 0x49, 0x88, 0x42, 0x01, 0xd9, 0x3c, 0x00, + 0xe4, 0xed, 0x00, 0x00, 0x19, 0x60, 0x03, 0xe0, + 0x64, 0x28, 0x01, 0xd2, 0x64, 0x20, 0x18, 0x60, + 0xf5, 0xf7, 0xfc, 0xfd, 0xf8, 0xbd, 0x00, 0x00, + 0x60, 0x6c, 0x01, 0x00, 0xb0, 0x57, 0x01, 0x00, + 0x20, 0xa1, 0x07, 0x00, 0xfe, 0xb5, 0x04, 0x1c, + 0x00, 0x20, 0x50, 0x4d, 0x00, 0x21, 0x68, 0x61, + 0x20, 0x69, 0xfb, 0xf7, 0xb3, 0xfc, 0x07, 0x1c, + 0x20, 0x69, 0x03, 0x21, 0xfb, 0xf7, 0xae, 0xfc, + 0x3c, 0x00, 0x20, 0xee, 0x00, 0x00, 0x00, 0x28, + 0x03, 0xd0, 0x80, 0x78, 0x29, 0x78, 0x88, 0x42, + 0x63, 0xd1, 0x47, 0x4d, 0x20, 0x1c, 0x14, 0x30, + 0x39, 0x1c, 0x06, 0x1c, 0x2a, 0x78, 0x02, 0xf0, + 0x5a, 0xfa, 0x00, 0x28, 0x59, 0xd1, 0xe0, 0x68, + 0x05, 0x68, 0x41, 0x48, 0x01, 0x95, 0x58, 0x30, + 0x02, 0x90, 0xfb, 0xf7, 0x6a, 0xff, 0x3e, 0x4d, + 0x19, 0x35, 0x00, 0x28, 0x0b, 0xd0, 0x28, 0x1c, + 0xfb, 0xf7, 0x3c, 0x00, 0x5c, 0xee, 0x00, 0x00, + 0x55, 0xff, 0x00, 0x28, 0x1e, 0xd1, 0x31, 0x1c, + 0x28, 0x1c, 0xfb, 0xf7, 0x65, 0xff, 0x00, 0x28, + 0x42, 0xd0, 0x17, 0xe0, 0x28, 0x1c, 0xfb, 0xf7, + 0x49, 0xff, 0x00, 0x28, 0x06, 0xd0, 0x39, 0x1c, + 0x02, 0x98, 0xfb, 0xf7, 0x63, 0xff, 0x00, 0x28, + 0x36, 0xd0, 0x0b, 0xe0, 0x39, 0x1c, 0x02, 0x98, + 0xfb, 0xf7, 0x5c, 0xff, 0x00, 0x28, 0x2f, 0xd0, + 0x31, 0x1c, 0x28, 0x1c, 0x3c, 0x00, 0x98, 0xee, + 0x00, 0x00, 0xfb, 0xf7, 0x4c, 0xff, 0x00, 0x28, + 0x29, 0xd0, 0x30, 0x1c, 0xf6, 0xf7, 0xad, 0xfc, + 0x29, 0x4a, 0x18, 0x32, 0x11, 0x7c, 0x00, 0x29, + 0x04, 0xd0, 0x51, 0x6a, 0x00, 0x29, 0x01, 0xd0, + 0x00, 0x28, 0x1c, 0xd1, 0x90, 0x6a, 0x00, 0x28, + 0x3b, 0xd0, 0x13, 0x78, 0x01, 0x9d, 0x01, 0x21, + 0x6d, 0x89, 0x01, 0x20, 0x2b, 0x40, 0x9b, 0x07, + 0x11, 0xd0, 0xa3, 0x6b, 0x1e, 0x4e, 0x3c, 0x00, + 0xd4, 0xee, 0x00, 0x00, 0x1d, 0x1c, 0x7f, 0x35, + 0x98, 0x36, 0x00, 0x2d, 0x14, 0xd0, 0x55, 0x8a, + 0x00, 0x2d, 0x08, 0xd1, 0x55, 0x69, 0xab, 0x42, + 0x0f, 0xda, 0x00, 0x20, 0x17, 0x4d, 0x01, 0x23, + 0x6b, 0x61, 0x0a, 0xe0, 0x29, 0xe0, 0xf5, 0x78, + 0x02, 0x2d, 0x06, 0xd1, 0x14, 0x4f, 0x55, 0x69, + 0x3f, 0x68, 0xed, 0x19, 0xab, 0x42, 0x00, 0xda, + 0x00, 0x20, 0x23, 0x6c, 0x1d, 0x1c, 0x7f, 0x35, + 0x3c, 0x00, 0x10, 0xef, 0x00, 0x00, 0x10, 0xd0, + 0x55, 0x8a, 0x00, 0x2d, 0x03, 0xd1, 0x95, 0x69, + 0xab, 0x42, 0x0a, 0xd2, 0x08, 0xe0, 0xf5, 0x78, + 0x02, 0x2d, 0x06, 0xd1, 0x0b, 0x4e, 0x95, 0x69, + 0x36, 0x68, 0xad, 0x19, 0xab, 0x42, 0x00, 0xd2, + 0x00, 0x21, 0x08, 0x43, 0x08, 0xd0, 0x10, 0x6a, + 0x00, 0x28, 0x01, 0xd0, 0xf1, 0xf7, 0x4b, 0xfa, + 0x00, 0x21, 0x20, 0x1c, 0x01, 0xf0, 0xb9, 0xf9, + 0xfe, 0xbd, 0x3c, 0x00, 0x4c, 0xef, 0x00, 0x00, + 0xec, 0x65, 0x01, 0x00, 0xc4, 0x67, 0x01, 0x00, + 0xcc, 0x67, 0x01, 0x00, 0x3e, 0xb5, 0x05, 0x6a, + 0x04, 0x1c, 0xc0, 0x68, 0xf2, 0xf7, 0x34, 0xfb, + 0xe1, 0x69, 0xf2, 0xf7, 0x57, 0xfa, 0x20, 0x1c, + 0x40, 0x30, 0xc1, 0x8b, 0x04, 0x31, 0xc1, 0x83, + 0x2b, 0x69, 0x10, 0x49, 0x98, 0x79, 0x06, 0x28, + 0x0a, 0xd1, 0x98, 0x88, 0x01, 0x91, 0x02, 0x94, + 0x00, 0x90, 0x60, 0x69, 0x3c, 0x00, 0x88, 0xef, + 0x00, 0x00, 0x1b, 0x68, 0x01, 0x68, 0xe0, 0x68, + 0x03, 0x22, 0xc0, 0x68, 0x0a, 0xe0, 0x02, 0x28, + 0x0b, 0xd1, 0x10, 0x20, 0x00, 0x90, 0x01, 0x91, + 0x02, 0x94, 0xe0, 0x68, 0xa3, 0x69, 0xc0, 0x68, + 0x00, 0x22, 0x00, 0x21, 0xf7, 0xf7, 0x0f, 0xfb, + 0x3e, 0xbd, 0xf2, 0xf7, 0xa6, 0xf9, 0xfb, 0xe7, + 0x00, 0x00, 0xbd, 0xef, 0x00, 0x00, 0x80, 0xb5, + 0xd1, 0x68, 0x50, 0x69, 0xc9, 0x68, 0x3c, 0x00, + 0xc4, 0xef, 0x00, 0x00, 0xc1, 0x60, 0xd1, 0x68, + 0xc8, 0x60, 0x11, 0x1c, 0x40, 0x31, 0xcb, 0x8b, + 0x00, 0x89, 0x18, 0x18, 0xc8, 0x83, 0x10, 0x68, + 0x00, 0x28, 0x02, 0xd0, 0xff, 0xf7, 0xbc, 0xff, + 0x80, 0xbd, 0x03, 0x48, 0xfb, 0xf7, 0xcc, 0xf8, + 0x00, 0x6a, 0xfe, 0xf7, 0xf5, 0xf9, 0x80, 0xbd, + 0xa0, 0x6a, 0x01, 0x00, 0xf8, 0xb5, 0x06, 0x1c, + 0x0a, 0x24, 0x30, 0x07, 0x01, 0x09, 0xa0, 0x07, + 0x3c, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x01, 0x43, + 0x0f, 0x1c, 0x0a, 0x4d, 0x2f, 0x60, 0x04, 0xf0, + 0xfa, 0xfe, 0xad, 0x68, 0x28, 0x01, 0x00, 0x0f, + 0xb0, 0x42, 0x05, 0xd0, 0x01, 0x3c, 0xf4, 0xd2, + 0x01, 0x21, 0x9b, 0x20, 0xf2, 0xf7, 0x41, 0xf9, + 0x28, 0x02, 0x00, 0x0a, 0x08, 0x2e, 0x01, 0xd1, + 0x31, 0x05, 0x08, 0x43, 0xf8, 0xbd, 0x60, 0x00, + 0x07, 0x00, 0x01, 0x22, 0xd2, 0x05, 0x80, 0xb5, + 0x00, 0x21, 0x3c, 0x00, 0x3c, 0xf0, 0x00, 0x00, + 0x04, 0x20, 0x04, 0xf0, 0xdd, 0xfc, 0x0f, 0x20, + 0xff, 0xf7, 0xd6, 0xff, 0x0f, 0x21, 0x09, 0x04, + 0x08, 0x40, 0x00, 0x0c, 0x80, 0xbd, 0x00, 0x00, + 0x80, 0xb5, 0x05, 0x48, 0xfd, 0xf7, 0x4a, 0xf9, + 0x04, 0x48, 0xfd, 0xf7, 0x7b, 0xf8, 0x04, 0x48, + 0xfd, 0xf7, 0x6c, 0xf8, 0x80, 0xbd, 0x00, 0x00, + 0x89, 0x34, 0x01, 0x00, 0xed, 0x24, 0x00, 0x00, + 0x11, 0x1c, 0x00, 0x00, 0x3c, 0x00, 0x78, 0xf0, + 0x00, 0x00, 0x80, 0xb5, 0x02, 0x48, 0xf3, 0xf7, + 0x2a, 0xfc, 0x80, 0xbd, 0x00, 0x00, 0xd1, 0x24, + 0x00, 0x00, 0x80, 0xb5, 0xf2, 0xf7, 0x53, 0xf9, + 0x80, 0xbd, 0x80, 0xb5, 0x00, 0x21, 0x00, 0x20, + 0x01, 0xf0, 0x51, 0xfe, 0x03, 0x20, 0x02, 0xf0, + 0x46, 0xff, 0x80, 0xbd, 0x00, 0x00, 0x06, 0x48, + 0x80, 0xb5, 0xc1, 0x69, 0x00, 0x29, 0x06, 0xd1, + 0x01, 0x6a, 0x00, 0x29, 0x03, 0xd1, 0x3c, 0x00, + 0xb4, 0xf0, 0x00, 0x00, 0x81, 0x6b, 0x03, 0x48, + 0x00, 0xf0, 0x5e, 0xf9, 0x80, 0xbd, 0x00, 0x00, + 0xc4, 0x69, 0x01, 0x00, 0x34, 0x63, 0x01, 0x00, + 0x10, 0xb5, 0x04, 0x4c, 0x20, 0x6a, 0xfc, 0xf7, + 0xb3, 0xfb, 0x03, 0x48, 0x21, 0x6a, 0x00, 0xf0, + 0x4f, 0xf9, 0x10, 0xbd, 0x1c, 0x75, 0x01, 0x00, + 0x34, 0x63, 0x01, 0x00, 0xb0, 0xb5, 0x0d, 0x4c, + 0x20, 0x7c, 0x00, 0x28, 0x02, 0xd0, 0x01, 0x21, + 0x3c, 0x00, 0xf0, 0xf0, 0x00, 0x00, 0xfd, 0xf7, + 0x86, 0xf9, 0x00, 0x25, 0x25, 0x70, 0xa0, 0x68, + 0x01, 0x28, 0x03, 0xd1, 0x00, 0x20, 0xa5, 0x60, + 0x01, 0xf0, 0x8f, 0xf8, 0xa0, 0x78, 0x01, 0x28, + 0x05, 0xd1, 0x03, 0x48, 0x98, 0x38, 0x00, 0x69, + 0xfc, 0xf7, 0xef, 0xfb, 0xa5, 0x70, 0xb0, 0xbd, + 0x00, 0x00, 0x84, 0x66, 0x01, 0x00, 0x80, 0xb5, + 0x00, 0x21, 0x01, 0x20, 0x01, 0xf0, 0x09, 0xfe, + 0x80, 0xbd, 0x3c, 0x00, 0x2c, 0xf1, 0x00, 0x00, + 0x38, 0xb5, 0x69, 0x46, 0x00, 0x25, 0xf8, 0xf7, + 0xb7, 0xfe, 0x04, 0x1c, 0x01, 0xd1, 0x01, 0x20, + 0x38, 0xbd, 0xa0, 0x68, 0x00, 0x28, 0x04, 0xd0, + 0x00, 0x99, 0xa1, 0x31, 0x08, 0x20, 0x04, 0xf0, + 0x73, 0xfa, 0x1c, 0x21, 0x20, 0x1c, 0xf1, 0xf7, + 0xa3, 0xf9, 0x28, 0x1c, 0xf0, 0xe7, 0x00, 0x00, + 0xfe, 0xb5, 0x07, 0x1c, 0x4c, 0x23, 0x39, 0x49, + 0x58, 0x43, 0x44, 0x18, 0x3c, 0x00, 0x68, 0xf1, + 0x00, 0x00, 0x25, 0x1c, 0x40, 0x35, 0x28, 0x7a, + 0x37, 0x49, 0x48, 0x76, 0x21, 0x1c, 0x30, 0x31, + 0x02, 0x91, 0x0c, 0x23, 0xc8, 0x56, 0x42, 0x1c, + 0x0a, 0x73, 0x49, 0x7b, 0x88, 0x42, 0x46, 0xda, + 0x32, 0x48, 0x00, 0x78, 0x80, 0x07, 0x3e, 0xd5, + 0x00, 0x20, 0x01, 0x90, 0xf6, 0xf7, 0xaf, 0xfa, + 0x00, 0x28, 0x2e, 0xd0, 0xac, 0x21, 0x09, 0x58, + 0x00, 0x29, 0x01, 0xd0, 0xe4, 0x30, 0x3c, 0x00, + 0xa4, 0xf1, 0x00, 0x00, 0x00, 0xe0, 0xcc, 0x30, + 0x06, 0x1c, 0x40, 0x68, 0x00, 0x28, 0x25, 0xd0, + 0x02, 0x99, 0x08, 0x7b, 0x01, 0x28, 0x11, 0xd1, + 0x20, 0x1c, 0x2e, 0x30, 0x29, 0x78, 0xf6, 0xf7, + 0xed, 0xf9, 0x71, 0x68, 0x03, 0xe0, 0x72, 0x18, + 0x12, 0x7a, 0x82, 0x42, 0x03, 0xd9, 0xff, 0x31, + 0x09, 0x06, 0x09, 0x0e, 0xf7, 0xd1, 0xa9, 0x70, + 0x01, 0x20, 0x01, 0x90, 0x23, 0x1c, 0x3e, 0x33, + 0x3c, 0x00, 0xe0, 0xf1, 0x00, 0x00, 0x1a, 0x1d, + 0x30, 0x1c, 0x00, 0x97, 0x01, 0x99, 0xf8, 0xf7, + 0x58, 0xfa, 0x00, 0x28, 0x11, 0xd0, 0xa8, 0x78, + 0x80, 0x19, 0x00, 0x7a, 0x00, 0xe0, 0x00, 0x20, + 0x68, 0x70, 0x68, 0x78, 0x01, 0x21, 0xfb, 0xf7, + 0xe0, 0xfd, 0x60, 0x60, 0x38, 0x1c, 0x01, 0xf0, + 0x14, 0xfe, 0x38, 0x1c, 0x01, 0xf0, 0xa5, 0xfb, + 0xfe, 0xbd, 0x02, 0x99, 0x08, 0x7b, 0xff, 0x30, + 0x48, 0x73, 0x3c, 0x00, 0x1c, 0xf2, 0x00, 0x00, + 0x38, 0x1c, 0xfc, 0xf7, 0x19, 0xfc, 0x03, 0xf0, + 0xc3, 0xfd, 0x06, 0x1c, 0xfb, 0xf7, 0x8e, 0xfe, + 0x41, 0x00, 0x76, 0x18, 0x68, 0x78, 0x61, 0x68, + 0xfb, 0xf7, 0x6a, 0xfe, 0x31, 0x18, 0x20, 0x8d, + 0x3b, 0x1c, 0x05, 0x4a, 0x03, 0xf0, 0x12, 0xfe, + 0xe5, 0xe7, 0x00, 0x00, 0x58, 0xe3, 0x01, 0x00, + 0x30, 0x80, 0x07, 0x00, 0x1d, 0x75, 0x01, 0x00, + 0xd5, 0x4e, 0x00, 0x00, 0x3c, 0x00, 0x58, 0xf2, + 0x00, 0x00, 0x03, 0x1c, 0x04, 0x48, 0x80, 0xb5, + 0x02, 0x79, 0x20, 0x30, 0x03, 0x49, 0x00, 0xf0, + 0x30, 0xf8, 0x80, 0xbd, 0x00, 0x00, 0xac, 0x7c, + 0x01, 0x00, 0xc4, 0x67, 0x01, 0x00, 0x03, 0x1c, + 0x04, 0x48, 0x80, 0xb5, 0xc2, 0x78, 0x38, 0x30, + 0x03, 0x49, 0x00, 0xf0, 0x22, 0xf8, 0x80, 0xbd, + 0x00, 0x00, 0xac, 0x7c, 0x01, 0x00, 0xc8, 0x67, + 0x01, 0x00, 0x03, 0x1c, 0x04, 0x48, 0x3c, 0x00, + 0x94, 0xf2, 0x00, 0x00, 0x80, 0xb5, 0x82, 0x79, + 0x50, 0x30, 0x03, 0x49, 0x00, 0xf0, 0x14, 0xf8, + 0x80, 0xbd, 0x00, 0x00, 0xac, 0x7c, 0x01, 0x00, + 0xcc, 0x67, 0x01, 0x00, 0x03, 0x1c, 0x04, 0x48, + 0x80, 0xb5, 0x42, 0x79, 0x68, 0x30, 0x03, 0x49, + 0x00, 0xf0, 0x06, 0xf8, 0x80, 0xbd, 0x00, 0x00, + 0xac, 0x7c, 0x01, 0x00, 0xd0, 0x67, 0x01, 0x00, + 0x10, 0xb5, 0x00, 0x24, 0x84, 0x80, 0x0b, 0x60, + 0x3c, 0x00, 0xd0, 0xf2, 0x00, 0x00, 0x19, 0x1c, + 0x51, 0x43, 0x01, 0x60, 0x19, 0x06, 0x09, 0x16, + 0x10, 0x22, 0x06, 0x30, 0xf1, 0xf7, 0x9f, 0xf9, + 0x10, 0xbd, 0xb0, 0xb5, 0x06, 0x4d, 0x00, 0x24, + 0xac, 0x60, 0xec, 0x60, 0xec, 0x61, 0x2c, 0x62, + 0x02, 0xf0, 0xf1, 0xfc, 0x00, 0xf0, 0x0d, 0xf8, + 0xec, 0x62, 0x2c, 0x70, 0xb0, 0xbd, 0x44, 0x7d, + 0x01, 0x00, 0x80, 0xb5, 0x80, 0x21, 0x01, 0x48, + 0xf1, 0xf7, 0x3c, 0x00, 0x0c, 0xf3, 0x00, 0x00, + 0xc7, 0xf8, 0x80, 0xbd, 0x04, 0x66, 0x01, 0x00, + 0xf8, 0xb5, 0x07, 0x4f, 0x00, 0x24, 0x00, 0x26, + 0x18, 0x20, 0x60, 0x43, 0xc5, 0x19, 0xee, 0x60, + 0x03, 0xf0, 0x42, 0xfd, 0x10, 0x35, 0x01, 0x34, + 0x02, 0x2c, 0x41, 0xc5, 0xf4, 0xdb, 0xf8, 0xbd, + 0xb8, 0x7d, 0x01, 0x00, 0x00, 0x23, 0x03, 0x60, + 0x04, 0x4b, 0x00, 0x29, 0x00, 0xd1, 0x19, 0x1c, + 0x41, 0x60, 0x00, 0x2a, 0x3c, 0x00, 0x48, 0xf3, + 0x00, 0x00, 0x00, 0xd1, 0x1a, 0x1c, 0x82, 0x60, + 0x70, 0x47, 0xbd, 0x75, 0x00, 0x00, 0x10, 0xb5, + 0x07, 0x4c, 0x20, 0x68, 0x01, 0x30, 0x20, 0x60, + 0x20, 0x28, 0x03, 0xd9, 0x58, 0x21, 0x58, 0x20, + 0xf1, 0xf7, 0x9d, 0xff, 0x21, 0x68, 0x01, 0x20, + 0x01, 0x39, 0x88, 0x40, 0x10, 0xbd, 0x60, 0x5b, + 0x01, 0x00, 0xb0, 0xb5, 0x0d, 0x1c, 0x04, 0x1c, + 0x21, 0x68, 0x00, 0x20, 0x00, 0x29, 0x3c, 0x00, + 0x84, 0xf3, 0x00, 0x00, 0x0a, 0xd0, 0xa9, 0x43, + 0x21, 0x60, 0x07, 0xd1, 0xa0, 0x68, 0xf1, 0xf7, + 0x23, 0xf8, 0x00, 0x28, 0x02, 0xd1, 0x21, 0x68, + 0x29, 0x43, 0x21, 0x60, 0xb0, 0xbd, 0x00, 0x00, + 0xb0, 0xb5, 0x0d, 0x1c, 0x04, 0x1c, 0x21, 0x68, + 0x00, 0x20, 0x29, 0x43, 0x21, 0x60, 0xa9, 0x42, + 0x07, 0xd1, 0x60, 0x68, 0xf1, 0xf7, 0x10, 0xf8, + 0x00, 0x28, 0x02, 0xd1, 0x21, 0x68, 0xa9, 0x43, + 0x3c, 0x00, 0xc0, 0xf3, 0x00, 0x00, 0x21, 0x60, + 0xb0, 0xbd, 0x1a, 0x4b, 0xb0, 0xb5, 0x9a, 0x6a, + 0x00, 0x28, 0x0b, 0xd0, 0x00, 0x2a, 0x07, 0xdb, + 0xb8, 0x24, 0x24, 0x58, 0x01, 0x3c, 0xa4, 0x1a, + 0x00, 0x19, 0xb0, 0x30, 0x00, 0x7b, 0x02, 0xe0, + 0x0e, 0x20, 0x00, 0xe0, 0x0d, 0x20, 0x5d, 0x6a, + 0x12, 0x4c, 0x00, 0x2d, 0x01, 0xd0, 0x20, 0x78, + 0x00, 0xe0, 0x20, 0x5c, 0xff, 0x24, 0xa8, 0x34, + 0xc4, 0x40, 0x3c, 0x00, 0xfc, 0xf3, 0x00, 0x00, + 0x9c, 0x60, 0xf5, 0x24, 0xc4, 0x40, 0x9c, 0x61, + 0xfd, 0x24, 0xc4, 0x40, 0xdc, 0x61, 0xff, 0x24, + 0x29, 0x34, 0xc4, 0x40, 0x5c, 0x61, 0xff, 0x24, + 0x53, 0x34, 0xc4, 0x40, 0x00, 0x20, 0x0c, 0x33, + 0x11, 0xc3, 0x00, 0x29, 0x05, 0xd0, 0x00, 0x2a, + 0x03, 0xdc, 0x02, 0x21, 0x50, 0x42, 0x00, 0xf0, + 0x65, 0xfb, 0xb0, 0xbd, 0xac, 0x7e, 0x01, 0x00, + 0xb8, 0x52, 0x01, 0x00, 0x3c, 0x00, 0x38, 0xf4, + 0x00, 0x00, 0x10, 0xb5, 0x13, 0x4c, 0x13, 0x48, + 0x21, 0x1c, 0xff, 0x31, 0x69, 0x31, 0x0e, 0xc9, + 0x0e, 0xc0, 0x21, 0x1c, 0xff, 0x31, 0x24, 0x22, + 0x75, 0x31, 0x0f, 0x48, 0xf1, 0xf7, 0x51, 0xf8, + 0x21, 0x1c, 0xff, 0x31, 0x3c, 0x22, 0x99, 0x31, + 0x0d, 0x48, 0xf1, 0xf7, 0xa6, 0xf8, 0xfc, 0xf7, + 0xa2, 0xff, 0x21, 0x1c, 0xff, 0x31, 0x10, 0x22, + 0xd5, 0x31, 0x09, 0x48, 0xf1, 0xf7, 0x3c, 0x00, + 0x74, 0xf4, 0x00, 0x00, 0x41, 0xf8, 0x21, 0x1c, + 0xff, 0x31, 0x28, 0x22, 0xe5, 0x31, 0x07, 0x48, + 0xf1, 0xf7, 0x96, 0xf8, 0x10, 0xbd, 0x00, 0x00, + 0x40, 0x63, 0x01, 0x00, 0x00, 0x80, 0x07, 0x00, + 0x0c, 0x80, 0x07, 0x00, 0x30, 0x80, 0x07, 0x00, + 0x80, 0x80, 0x07, 0x00, 0xa0, 0x80, 0x07, 0x00, + 0xf8, 0xb5, 0x00, 0x28, 0x59, 0xd0, 0x04, 0xf0, + 0x4b, 0xf9, 0xf8, 0xf7, 0xb3, 0xfb, 0x00, 0x22, + 0x3c, 0x00, 0xb0, 0xf4, 0x00, 0x00, 0x01, 0x21, + 0x13, 0x20, 0x04, 0xf0, 0x7c, 0xf9, 0x2a, 0x49, + 0x29, 0x48, 0x49, 0x6c, 0x01, 0x60, 0x00, 0x21, + 0x29, 0x48, 0xc9, 0x43, 0x41, 0x60, 0x26, 0x4c, + 0x14, 0x34, 0x61, 0x6c, 0x81, 0x60, 0xa1, 0x6c, + 0xc1, 0x60, 0x00, 0x20, 0x25, 0x4d, 0x02, 0x26, + 0x01, 0x01, 0x6e, 0x50, 0x0a, 0x19, 0x4f, 0x19, + 0x50, 0x32, 0x04, 0x37, 0x0e, 0xca, 0x01, 0x30, + 0x08, 0x28, 0x3c, 0x00, 0xec, 0xf4, 0x00, 0x00, + 0x0e, 0xc7, 0xf4, 0xdb, 0x14, 0x22, 0x21, 0x1c, + 0xcc, 0x31, 0x1e, 0x48, 0xf1, 0xf7, 0x5a, 0xf8, + 0x1d, 0x48, 0x81, 0x78, 0x09, 0x09, 0x09, 0x01, + 0x81, 0x70, 0x00, 0x21, 0xc1, 0x70, 0x41, 0x70, + 0x21, 0x1c, 0xe0, 0x31, 0x0a, 0x78, 0x02, 0x70, + 0x49, 0x78, 0x41, 0x70, 0x21, 0x1c, 0xe8, 0x31, + 0x30, 0x22, 0x08, 0x30, 0xf1, 0xf7, 0x46, 0xf8, + 0x21, 0x1c, 0xff, 0x31, 0x3c, 0x00, 0x28, 0xf5, + 0x00, 0x00, 0x50, 0x22, 0x19, 0x31, 0x12, 0x48, + 0xf1, 0xf7, 0x3f, 0xf8, 0x83, 0x20, 0x80, 0x00, + 0x14, 0x22, 0x21, 0x18, 0x10, 0x48, 0xf1, 0xf7, + 0x38, 0xf8, 0x11, 0x20, 0x40, 0x01, 0x84, 0x22, + 0x21, 0x18, 0x0d, 0x48, 0xf1, 0xf7, 0x31, 0xf8, + 0xff, 0xf7, 0x73, 0xff, 0x20, 0x1c, 0xf1, 0xf7, + 0x28, 0xfd, 0xf8, 0xbd, 0xff, 0xf7, 0x6d, 0xff, + 0xfb, 0xe7, 0x08, 0x20, 0x07, 0x00, 0x3c, 0x00, + 0x64, 0xf5, 0x00, 0x00, 0x2c, 0x63, 0x01, 0x00, + 0x40, 0x20, 0x07, 0x00, 0x00, 0x30, 0x07, 0x00, + 0x00, 0x40, 0x07, 0x00, 0x00, 0x50, 0x07, 0x00, + 0x00, 0x60, 0x07, 0x00, 0x10, 0x00, 0x07, 0x00, + 0x00, 0x90, 0x07, 0x00, 0xf8, 0xb5, 0x05, 0x1c, + 0x18, 0x48, 0xc0, 0x68, 0x00, 0x28, 0x25, 0xd0, + 0x16, 0x4e, 0x01, 0x36, 0x74, 0x78, 0x30, 0x78, + 0x27, 0x1a, 0x79, 0x19, 0x20, 0x1c, 0xf1, 0xf7, + 0x3c, 0x00, 0xa0, 0xf5, 0x00, 0x00, 0x4b, 0xf8, + 0x00, 0x90, 0x29, 0x1c, 0x20, 0x1c, 0xf1, 0xf7, + 0xb2, 0xf8, 0xc1, 0x19, 0x20, 0x1c, 0xf1, 0xf7, + 0x42, 0xf8, 0x60, 0x1a, 0x30, 0x70, 0x70, 0x1e, + 0x80, 0x68, 0x00, 0x28, 0x0d, 0xd0, 0x53, 0x36, + 0xf4, 0x78, 0x00, 0x99, 0x20, 0x1c, 0xf1, 0xf7, + 0xa2, 0xf8, 0xb1, 0x78, 0x61, 0x1a, 0x41, 0x18, + 0x20, 0x1c, 0xf1, 0xf7, 0x9c, 0xf8, 0x60, 0x1a, + 0xb0, 0x70, 0x3c, 0x00, 0xdc, 0xf5, 0x00, 0x00, + 0x03, 0x48, 0x5c, 0x30, 0x01, 0x69, 0xc2, 0x68, + 0x69, 0x43, 0x51, 0x18, 0xc1, 0x60, 0xf8, 0xbd, + 0x44, 0x7d, 0x01, 0x00, 0xb0, 0xb5, 0x0c, 0x4d, + 0xe8, 0x68, 0x29, 0x69, 0x40, 0x18, 0x7d, 0x21, + 0x09, 0x01, 0x44, 0x18, 0x20, 0x1c, 0x03, 0xf0, + 0x0b, 0xfb, 0x00, 0x28, 0x0a, 0xd0, 0x03, 0xf0, + 0xcf, 0xfb, 0x01, 0x1b, 0x28, 0x69, 0xf1, 0xf7, + 0x7d, 0xf8, 0x01, 0x30, 0x3c, 0x00, 0x18, 0xf6, + 0x00, 0x00, 0x00, 0x04, 0x00, 0x0c, 0xff, 0xf7, + 0xb2, 0xff, 0xb0, 0xbd, 0x00, 0x00, 0xa0, 0x7d, + 0x01, 0x00, 0x70, 0xb5, 0x10, 0x4c, 0x60, 0x68, + 0x80, 0x25, 0xa8, 0x43, 0x60, 0x60, 0x20, 0x68, + 0x28, 0x43, 0x20, 0x60, 0x0d, 0x4e, 0x30, 0x1c, + 0x10, 0x30, 0xf3, 0xf7, 0xc8, 0xfc, 0x00, 0x28, + 0x03, 0xd1, 0x07, 0x21, 0x85, 0x20, 0xf1, 0xf7, + 0x2a, 0xfe, 0x08, 0x48, 0x00, 0x21, 0x3c, 0x00, + 0x54, 0xf6, 0x00, 0x00, 0x80, 0x68, 0x41, 0x63, + 0xc0, 0x6c, 0x10, 0x30, 0x70, 0x61, 0x01, 0x20, + 0x30, 0x61, 0x20, 0x68, 0xa8, 0x43, 0x20, 0x60, + 0x70, 0xbd, 0x00, 0x00, 0xf4, 0x00, 0x07, 0x00, + 0x00, 0x30, 0x07, 0x00, 0x24, 0x7e, 0x01, 0x00, + 0x01, 0x1c, 0x00, 0x20, 0x05, 0x29, 0x80, 0xb5, + 0x09, 0xd2, 0x02, 0xa3, 0x5b, 0x5c, 0x5b, 0x00, + 0x9f, 0x44, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, + 0x3c, 0x00, 0x90, 0xf6, 0x00, 0x00, 0x03, 0x00, + 0xff, 0xf7, 0xcf, 0xfc, 0x80, 0xbd, 0x01, 0x22, + 0x92, 0x02, 0x80, 0xb5, 0x00, 0x21, 0x07, 0x20, + 0x04, 0xf0, 0xab, 0xf9, 0x80, 0xbd, 0x80, 0xb5, + 0x40, 0x22, 0x00, 0x21, 0x00, 0x20, 0x04, 0xf0, + 0xa4, 0xf9, 0x03, 0x22, 0x00, 0x21, 0x00, 0x20, + 0x04, 0xf0, 0x9f, 0xf9, 0x80, 0xbd, 0x70, 0xb5, + 0x0e, 0x1c, 0x05, 0x1c, 0x14, 0x1c, 0x08, 0x28, + 0x0e, 0xd1, 0x3c, 0x00, 0xcc, 0xf6, 0x00, 0x00, + 0x00, 0xf0, 0x00, 0xfc, 0x0e, 0x28, 0x01, 0xd1, + 0x14, 0x20, 0x00, 0xe0, 0x10, 0x20, 0xe1, 0x03, + 0x00, 0xd5, 0x01, 0x38, 0xc0, 0x06, 0x0a, 0x49, + 0xc0, 0x0e, 0x88, 0x71, 0x08, 0xe0, 0x09, 0x2d, + 0x06, 0xd1, 0xa0, 0x04, 0x01, 0xd5, 0x00, 0x20, + 0x00, 0xe0, 0x01, 0x20, 0xf3, 0xf7, 0xb0, 0xf9, + 0x34, 0x40, 0x21, 0x1c, 0x32, 0x1c, 0x28, 0x1c, + 0x04, 0xf0, 0x7a, 0xf9, 0x3c, 0x00, 0x08, 0xf7, + 0x00, 0x00, 0x70, 0xbd, 0x00, 0x00, 0x00, 0x80, + 0x07, 0x00, 0x70, 0xb5, 0x00, 0x24, 0x13, 0x29, + 0x11, 0xd8, 0x00, 0x28, 0x01, 0xd1, 0x08, 0x4e, + 0x08, 0x25, 0x01, 0x28, 0x01, 0xd1, 0x07, 0x4e, + 0x09, 0x25, 0x00, 0xf0, 0x78, 0xfa, 0x00, 0x28, + 0x05, 0xd0, 0x02, 0x1c, 0x31, 0x1c, 0x28, 0x1c, + 0xff, 0xf7, 0xc3, 0xff, 0x01, 0x24, 0x20, 0x1c, + 0x70, 0xbd, 0xf8, 0xff, 0x07, 0x00, 0x3c, 0x00, + 0x44, 0xf7, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, + 0x01, 0x22, 0xd2, 0x02, 0x80, 0xb5, 0x00, 0x21, + 0x07, 0x20, 0x04, 0xf0, 0x53, 0xf9, 0x80, 0xbd, + 0x0f, 0x22, 0x12, 0x04, 0x07, 0x21, 0x49, 0x04, + 0x80, 0xb5, 0x09, 0x20, 0x04, 0xf0, 0x4a, 0xf9, + 0x80, 0xbd, 0x00, 0x00, 0x80, 0xb5, 0x00, 0x21, + 0x04, 0x20, 0x04, 0xf0, 0x1b, 0xfc, 0x40, 0x21, + 0x00, 0x20, 0x04, 0xf0, 0x17, 0xfc, 0x04, 0x49, + 0x3c, 0x00, 0x80, 0xf7, 0x00, 0x00, 0x00, 0x20, + 0x88, 0x60, 0x02, 0x48, 0x09, 0x69, 0x20, 0x30, + 0xff, 0xf7, 0x09, 0xfe, 0x80, 0xbd, 0x64, 0x73, + 0x01, 0x00, 0xb0, 0xb5, 0x60, 0x21, 0x00, 0x20, + 0x04, 0xf0, 0x07, 0xfc, 0x11, 0x4d, 0x00, 0x24, + 0x00, 0x22, 0x04, 0x20, 0x29, 0x5d, 0x04, 0xf0, + 0x28, 0xf9, 0x0c, 0x20, 0x03, 0xf0, 0x9b, 0xfb, + 0x01, 0x34, 0x24, 0x06, 0x24, 0x0e, 0x05, 0x2c, + 0xf2, 0xd3, 0x3c, 0x00, 0xbc, 0xf7, 0x00, 0x00, + 0x0f, 0x22, 0x00, 0x21, 0x0a, 0x20, 0x04, 0xf0, + 0x1b, 0xf9, 0x61, 0x21, 0x00, 0x20, 0x04, 0xf0, + 0xef, 0xfb, 0x06, 0x49, 0x01, 0x20, 0x88, 0x60, + 0x04, 0x48, 0x09, 0x69, 0x20, 0x30, 0xff, 0xf7, + 0xcd, 0xfd, 0xff, 0x20, 0x2d, 0x30, 0xb0, 0xbd, + 0xa8, 0x58, 0x01, 0x00, 0x64, 0x73, 0x01, 0x00, + 0xf8, 0xb5, 0x06, 0x1c, 0x12, 0x48, 0xc6, 0x70, + 0x01, 0x20, 0xff, 0xf7, 0x3c, 0x00, 0xf8, 0xf7, + 0x00, 0x00, 0xfd, 0xfb, 0x01, 0x27, 0xbf, 0x02, + 0x04, 0x1c, 0xb8, 0x43, 0x01, 0x1c, 0x01, 0x20, + 0x04, 0xf0, 0xd1, 0xfb, 0x03, 0x20, 0xff, 0xf7, + 0xf2, 0xfb, 0x05, 0x1c, 0xb8, 0x43, 0x01, 0x1c, + 0x03, 0x20, 0x04, 0xf0, 0xc8, 0xfb, 0x30, 0x1c, + 0x00, 0xf0, 0x9f, 0xf9, 0x00, 0xf0, 0x57, 0xf8, + 0x21, 0x1c, 0x01, 0x20, 0x04, 0xf0, 0xbf, 0xfb, + 0x29, 0x1c, 0x03, 0x20, 0x04, 0xf0, 0x3c, 0x00, + 0x34, 0xf8, 0x00, 0x00, 0xbb, 0xfb, 0x00, 0x20, + 0xf8, 0xbd, 0x00, 0x00, 0x64, 0x73, 0x01, 0x00, + 0x80, 0xb5, 0x00, 0x22, 0x40, 0x21, 0x00, 0x20, + 0x04, 0xf0, 0xd8, 0xf8, 0x80, 0xbd, 0x00, 0x00, + 0x70, 0xb5, 0x05, 0x1c, 0x01, 0x24, 0x09, 0x20, + 0xff, 0xf7, 0xcc, 0xfb, 0x0f, 0x21, 0x09, 0x04, + 0x88, 0x43, 0x03, 0x21, 0x89, 0x04, 0xe2, 0x04, + 0x05, 0x2d, 0x12, 0x4e, 0x20, 0xd2, 0x02, 0xa3, + 0x3c, 0x00, 0x70, 0xf8, 0x00, 0x00, 0x5b, 0x5d, + 0x5b, 0x00, 0x9f, 0x44, 0x00, 0x00, 0x06, 0x09, + 0x0c, 0x10, 0x03, 0x00, 0x03, 0x21, 0x09, 0x04, + 0x0c, 0xe0, 0x01, 0x21, 0x09, 0x04, 0x09, 0xe0, + 0x01, 0x21, 0x49, 0x04, 0x06, 0xe0, 0xf3, 0x68, + 0x04, 0x2b, 0x05, 0xd9, 0x02, 0xe0, 0xf3, 0x68, + 0x04, 0x2b, 0x01, 0xd8, 0x01, 0x43, 0x01, 0xe0, + 0x10, 0x43, 0x01, 0x1c, 0x09, 0x20, 0x04, 0xf0, + 0x80, 0xfb, 0x3c, 0x00, 0xac, 0xf8, 0x00, 0x00, + 0x20, 0x1c, 0x70, 0xbd, 0x00, 0x24, 0xfb, 0xe7, + 0x64, 0x73, 0x01, 0x00, 0x01, 0x21, 0xc9, 0x05, + 0x00, 0x28, 0x80, 0xb5, 0x02, 0xd0, 0x0a, 0x1c, + 0x00, 0x21, 0x00, 0xe0, 0x00, 0x22, 0x04, 0x20, + 0x04, 0xf0, 0x96, 0xf8, 0x80, 0xbd, 0x00, 0x00, + 0xf0, 0xb5, 0x91, 0xb0, 0x00, 0x26, 0x40, 0x21, + 0x01, 0xa8, 0xf0, 0xf7, 0xdd, 0xfd, 0x2a, 0x4f, + 0xb8, 0x79, 0x01, 0x22, 0x3c, 0x00, 0xe8, 0xf8, + 0x00, 0x00, 0x52, 0x03, 0x00, 0x90, 0x00, 0x21, + 0x06, 0x20, 0x04, 0xf0, 0x84, 0xf8, 0x60, 0x21, + 0x00, 0x20, 0x04, 0xf0, 0x58, 0xfb, 0x61, 0x21, + 0x00, 0x20, 0x04, 0xf0, 0x54, 0xfb, 0x08, 0x20, + 0x03, 0xf0, 0xef, 0xfa, 0x00, 0x24, 0x0f, 0x20, + 0xff, 0xf7, 0x71, 0xfb, 0x40, 0x05, 0x05, 0x0f, + 0xa8, 0x00, 0x01, 0xa9, 0x09, 0x58, 0x01, 0xaa, + 0x01, 0x31, 0x01, 0x34, 0x0c, 0x2c, 0x3c, 0x00, + 0x24, 0xf9, 0x00, 0x00, 0x11, 0x50, 0xf1, 0xd3, + 0x00, 0x20, 0x81, 0x00, 0x01, 0xaa, 0x51, 0x58, + 0xb1, 0x42, 0x01, 0xd9, 0x0e, 0x1c, 0x05, 0x1c, + 0x01, 0x30, 0x10, 0x28, 0xf5, 0xd3, 0x06, 0x20, + 0xff, 0xf7, 0x58, 0xfb, 0x0f, 0x21, 0x49, 0x02, + 0x88, 0x43, 0x69, 0x02, 0x08, 0x43, 0x01, 0x21, + 0x49, 0x03, 0x01, 0x43, 0x06, 0x20, 0x04, 0xf0, + 0x29, 0xfb, 0x0d, 0x48, 0x84, 0x68, 0x64, 0x34, + 0x3c, 0x00, 0x60, 0xf9, 0x00, 0x00, 0x08, 0xe0, + 0x20, 0x1c, 0x03, 0xf0, 0x5a, 0xf9, 0x00, 0x28, + 0x03, 0xd0, 0x01, 0x21, 0x95, 0x20, 0xf1, 0xf7, + 0x98, 0xfc, 0x0f, 0x20, 0xff, 0xf7, 0x3d, 0xfb, + 0x00, 0x04, 0xf1, 0xd5, 0x87, 0x20, 0x03, 0xf0, + 0xb2, 0xfa, 0x00, 0x98, 0xb8, 0x71, 0x11, 0xb0, + 0xf0, 0xbd, 0x20, 0x10, 0x07, 0x00, 0x00, 0x01, + 0x07, 0x00, 0x10, 0xb5, 0x17, 0x4c, 0x61, 0x69, + 0x00, 0x29, 0x3c, 0x00, 0x9c, 0xf9, 0x00, 0x00, + 0x04, 0xd0, 0x0a, 0x21, 0x13, 0x20, 0x03, 0xf0, + 0x47, 0xfe, 0x10, 0xbd, 0x01, 0x1c, 0x12, 0x48, + 0x01, 0x29, 0x00, 0x78, 0x0c, 0xd0, 0x11, 0x29, + 0xf7, 0xd1, 0x05, 0x28, 0x03, 0xd1, 0x01, 0x21, + 0x13, 0x20, 0xf1, 0xf7, 0x71, 0xfc, 0x20, 0x78, + 0x07, 0x28, 0xee, 0xd1, 0x02, 0x21, 0x0a, 0xe0, + 0x05, 0x28, 0x07, 0xd0, 0x06, 0x28, 0x0a, 0xd0, + 0x07, 0x28, 0xf7, 0xd0, 0x3c, 0x00, 0xd8, 0xf9, + 0x00, 0x00, 0x08, 0x28, 0xe4, 0xd1, 0x00, 0x20, + 0x05, 0xe0, 0x01, 0x21, 0x13, 0x20, 0xf1, 0xf7, + 0x5e, 0xfc, 0x10, 0xbd, 0x01, 0x20, 0x02, 0xf0, + 0x6c, 0xfd, 0x10, 0xbd, 0x00, 0x00, 0x7c, 0x78, + 0x01, 0x00, 0x0d, 0x49, 0x80, 0xb5, 0x09, 0x78, + 0x03, 0x29, 0x01, 0xd1, 0x00, 0x28, 0x0b, 0xd0, + 0x07, 0x29, 0x01, 0xd1, 0x00, 0x28, 0x07, 0xd0, + 0x02, 0x29, 0x01, 0xd1, 0x00, 0x28, 0x3c, 0x00, + 0x14, 0xfa, 0x00, 0x00, 0x03, 0xd1, 0x05, 0x29, + 0x09, 0xd1, 0x00, 0x28, 0x07, 0xd0, 0x00, 0x20, + 0xfc, 0xf7, 0x28, 0xfd, 0x00, 0x22, 0x13, 0x21, + 0x11, 0x20, 0x03, 0xf0, 0xc1, 0xfe, 0x80, 0xbd, + 0x7c, 0x78, 0x01, 0x00, 0x80, 0xb5, 0x06, 0x22, + 0x08, 0x21, 0x00, 0x20, 0x03, 0xf0, 0xde, 0xff, + 0x80, 0xbd, 0x00, 0x00, 0x07, 0x48, 0x80, 0xb5, + 0x40, 0x69, 0x00, 0x28, 0x01, 0xd1, 0xf1, 0xf7, + 0x3c, 0x00, 0x50, 0xfa, 0x00, 0x00, 0x33, 0xff, + 0x05, 0x49, 0x05, 0x4a, 0x08, 0x68, 0x50, 0x61, + 0x48, 0x68, 0x90, 0x61, 0x01, 0x20, 0x80, 0xbd, + 0x00, 0x00, 0x64, 0x73, 0x01, 0x00, 0xb0, 0x58, + 0x01, 0x00, 0x10, 0x00, 0x07, 0x00, 0x07, 0x48, + 0x80, 0xb5, 0x40, 0x69, 0x00, 0x28, 0x01, 0xd1, + 0xf1, 0xf7, 0x1d, 0xff, 0x05, 0x49, 0x05, 0x4a, + 0x08, 0x68, 0x90, 0x61, 0x48, 0x68, 0x50, 0x61, + 0x01, 0x20, 0x3c, 0x00, 0x8c, 0xfa, 0x00, 0x00, + 0x80, 0xbd, 0x00, 0x00, 0x64, 0x73, 0x01, 0x00, + 0xb0, 0x58, 0x01, 0x00, 0x10, 0x00, 0x07, 0x00, + 0x11, 0xb5, 0x00, 0xab, 0x59, 0x78, 0x14, 0x48, + 0x01, 0x23, 0xc0, 0x56, 0x00, 0x22, 0x09, 0x18, + 0x0b, 0x06, 0x1b, 0x16, 0x13, 0x21, 0x13, 0x2b, + 0x02, 0xdd, 0x00, 0xab, 0x59, 0x70, 0x07, 0xe0, + 0x00, 0x2b, 0x02, 0xda, 0x00, 0xab, 0x5a, 0x70, + 0x02, 0xe0, 0x1c, 0x1c, 0x3c, 0x00, 0xc8, 0xfa, + 0x00, 0x00, 0x00, 0xab, 0x5c, 0x70, 0x00, 0xab, + 0x1b, 0x78, 0x18, 0x18, 0x00, 0x06, 0x00, 0x16, + 0x13, 0x28, 0x02, 0xdd, 0x00, 0xab, 0x19, 0x70, + 0x06, 0xe0, 0x00, 0x28, 0x02, 0xda, 0x00, 0xab, + 0x1a, 0x70, 0x01, 0xe0, 0x00, 0xab, 0x18, 0x70, + 0x00, 0x98, 0x18, 0xbd, 0x00, 0x00, 0x64, 0x73, + 0x01, 0x00, 0x38, 0xb5, 0x0c, 0x1c, 0x15, 0x49, + 0x00, 0xab, 0x49, 0x68, 0x13, 0x25, 0x3c, 0x00, + 0x04, 0xfb, 0x00, 0x00, 0x00, 0x91, 0x59, 0x78, + 0x09, 0x18, 0x59, 0x70, 0x19, 0x78, 0x08, 0x18, + 0x18, 0x70, 0x19, 0x88, 0x10, 0x48, 0x02, 0x2c, + 0xc1, 0x80, 0x01, 0xd0, 0x00, 0x2c, 0x0b, 0xd1, + 0x00, 0xab, 0x18, 0x78, 0x13, 0x28, 0x00, 0xd9, + 0x1d, 0x70, 0x00, 0xab, 0x19, 0x78, 0x00, 0x20, + 0xff, 0xf7, 0xee, 0xfd, 0x02, 0x2c, 0x01, 0xd0, + 0x01, 0x2c, 0x09, 0xd1, 0x00, 0xab, 0x58, 0x78, + 0x3c, 0x00, 0x40, 0xfb, 0x00, 0x00, 0x13, 0x28, + 0x00, 0xd9, 0x5d, 0x70, 0x00, 0xab, 0x59, 0x78, + 0x01, 0x20, 0xff, 0xf7, 0xe0, 0xfd, 0x38, 0xbd, + 0x00, 0x00, 0x64, 0x73, 0x01, 0x00, 0xa0, 0x58, + 0x01, 0x00, 0x70, 0x47, 0x00, 0x00, 0xb0, 0xb5, + 0x04, 0x1c, 0x0e, 0x28, 0x13, 0x4d, 0x04, 0xd0, + 0x12, 0x49, 0xa0, 0x00, 0x00, 0x19, 0x4d, 0x39, + 0x45, 0x18, 0x06, 0x20, 0xff, 0xf7, 0x3d, 0xfa, + 0x0f, 0x49, 0x3c, 0x00, 0x7c, 0xfb, 0x00, 0x00, + 0xe0, 0x22, 0x09, 0x19, 0x10, 0x39, 0xc9, 0x7b, + 0x90, 0x43, 0x49, 0x01, 0x11, 0x40, 0x01, 0x43, + 0x06, 0x20, 0x04, 0xf0, 0x0d, 0xfa, 0x29, 0x1c, + 0x05, 0x20, 0x09, 0x4a, 0x03, 0xf0, 0x30, 0xff, + 0x08, 0x48, 0x1f, 0x22, 0x00, 0x19, 0x10, 0x38, + 0xc0, 0x7b, 0xc1, 0x04, 0xd2, 0x04, 0x08, 0x20, + 0x03, 0xf0, 0x26, 0xff, 0xb0, 0xbd, 0x00, 0x00, + 0xb4, 0x09, 0x00, 0x00, 0x3c, 0x00, 0xb8, 0xfb, + 0x00, 0x00, 0x14, 0x45, 0x01, 0x00, 0xff, 0x0f, + 0x00, 0x00, 0xc0, 0x58, 0x01, 0x00, 0x70, 0x47, + 0x00, 0x00, 0x80, 0xb5, 0x06, 0x49, 0x00, 0x28, + 0x01, 0xd1, 0x08, 0x68, 0x80, 0xbd, 0x01, 0x28, + 0x01, 0xd1, 0x48, 0x68, 0x80, 0xbd, 0xf1, 0xf7, + 0x90, 0xfb, 0x00, 0x20, 0x80, 0xbd, 0x7c, 0x73, + 0x01, 0x00, 0x01, 0x48, 0x40, 0x68, 0x70, 0x47, + 0x00, 0x00, 0xa0, 0x58, 0x01, 0x00, 0x3c, 0x00, + 0xf4, 0xfb, 0x00, 0x00, 0x04, 0x48, 0x01, 0x23, + 0x04, 0x49, 0xc0, 0x56, 0xc9, 0x56, 0x40, 0x18, + 0x00, 0x04, 0x00, 0x0c, 0x70, 0x47, 0x00, 0x00, + 0xa0, 0x58, 0x01, 0x00, 0xa2, 0x58, 0x01, 0x00, + 0x01, 0x48, 0x40, 0x68, 0x70, 0x47, 0x00, 0x00, + 0x64, 0x73, 0x01, 0x00, 0xf8, 0xb5, 0x05, 0x1c, + 0x0e, 0x1c, 0x00, 0xf0, 0x55, 0xf9, 0x04, 0x1c, + 0x00, 0xf0, 0x58, 0xf9, 0x00, 0x28, 0x2c, 0xd0, + 0x3c, 0x00, 0x30, 0xfc, 0x00, 0x00, 0xb3, 0x00, + 0x60, 0x1e, 0x00, 0x2d, 0x1c, 0x4e, 0x19, 0x49, + 0x1a, 0x4a, 0x06, 0xd1, 0x0b, 0x25, 0x0e, 0x2c, + 0x00, 0xd1, 0x19, 0x4a, 0xd2, 0x58, 0x08, 0x56, + 0x08, 0xe0, 0x01, 0x2d, 0x1c, 0xd1, 0x9a, 0x18, + 0x04, 0x36, 0x08, 0x18, 0x08, 0x25, 0x0e, 0x23, + 0x12, 0x6d, 0xc0, 0x56, 0x07, 0x1c, 0x47, 0x43, + 0xfb, 0x00, 0xdf, 0x19, 0x12, 0x4b, 0x3f, 0x21, + 0x58, 0x43, 0x3c, 0x00, 0x6c, 0xfc, 0x00, 0x00, + 0x11, 0x4b, 0xa9, 0x40, 0x0c, 0x1c, 0x38, 0x18, + 0xc0, 0x18, 0x14, 0x40, 0xec, 0x40, 0xc0, 0x11, + 0x60, 0x43, 0x1b, 0x0a, 0xc0, 0x18, 0x80, 0x12, + 0x03, 0xd1, 0x01, 0x20, 0x04, 0xe0, 0x00, 0x20, + 0xf8, 0xbd, 0x3f, 0x28, 0x00, 0xdd, 0x3f, 0x20, + 0x30, 0x60, 0xa8, 0x40, 0x08, 0x40, 0x8a, 0x43, + 0x10, 0x43, 0xf5, 0xe7, 0xcc, 0x59, 0x01, 0x00, + 0xdc, 0x58, 0x01, 0x00, 0x3c, 0x00, 0xa8, 0xfc, + 0x00, 0x00, 0x7c, 0x73, 0x01, 0x00, 0x7c, 0x59, + 0x01, 0x00, 0x06, 0x06, 0x00, 0x00, 0x26, 0x00, + 0x02, 0x00, 0x03, 0x48, 0x08, 0xb5, 0xc0, 0x88, + 0x00, 0xab, 0x18, 0x80, 0x00, 0x98, 0x08, 0xbd, + 0x00, 0x00, 0xa0, 0x58, 0x01, 0x00, 0xb0, 0xb5, + 0x0b, 0x4d, 0x09, 0x4c, 0x0e, 0x20, 0x6c, 0x60, + 0xff, 0xf7, 0x8d, 0xf9, 0x09, 0x49, 0x02, 0x1c, + 0xc8, 0x60, 0x01, 0x06, 0x09, 0x0e, 0x3c, 0x00, + 0xe4, 0xfc, 0x00, 0x00, 0x13, 0x3a, 0x02, 0x2a, + 0x02, 0xd9, 0x17, 0x38, 0x04, 0x28, 0x00, 0xd8, + 0x00, 0x21, 0x08, 0x1c, 0x6c, 0x60, 0xb0, 0xbd, + 0x04, 0x18, 0x02, 0x00, 0x60, 0x00, 0x07, 0x00, + 0x64, 0x73, 0x01, 0x00, 0x0a, 0x48, 0x98, 0xb5, + 0x02, 0x78, 0x13, 0x21, 0x14, 0x2a, 0x00, 0xd3, + 0x01, 0x70, 0x42, 0x78, 0x14, 0x2a, 0x00, 0xd3, + 0x41, 0x70, 0x06, 0x4c, 0x60, 0x68, 0xff, 0xf7, + 0x3c, 0x00, 0x20, 0xfd, 0x00, 0x00, 0xbd, 0xfe, + 0x00, 0x90, 0x00, 0xab, 0x18, 0x88, 0xe0, 0x80, + 0x00, 0xf0, 0x75, 0xff, 0x98, 0xbd, 0xa4, 0x58, + 0x01, 0x00, 0xa0, 0x58, 0x01, 0x00, 0x03, 0x48, + 0x80, 0xb5, 0x41, 0x78, 0x01, 0x20, 0xff, 0xf7, + 0xe6, 0xfc, 0x80, 0xbd, 0x00, 0x00, 0xa6, 0x58, + 0x01, 0x00, 0x03, 0x48, 0x80, 0xb5, 0x01, 0x78, + 0x00, 0x20, 0xff, 0xf7, 0xdc, 0xfc, 0x80, 0xbd, + 0x00, 0x00, 0x3c, 0x00, 0x5c, 0xfd, 0x00, 0x00, + 0xa6, 0x58, 0x01, 0x00, 0xb0, 0xb5, 0x05, 0x4d, + 0x00, 0x24, 0x20, 0x1c, 0xff, 0xf7, 0x44, 0xf9, + 0x01, 0x34, 0x10, 0x2c, 0x01, 0xc5, 0xf8, 0xd3, + 0xb0, 0xbd, 0x00, 0x00, 0xd4, 0x44, 0x01, 0x00, + 0x04, 0x49, 0x80, 0xb5, 0x88, 0x70, 0x04, 0x49, + 0x80, 0x00, 0x09, 0x58, 0x07, 0x20, 0x04, 0xf0, + 0x0f, 0xf9, 0x80, 0xbd, 0x64, 0x73, 0x01, 0x00, + 0xd0, 0x58, 0x01, 0x00, 0x3c, 0x00, 0x98, 0xfd, + 0x00, 0x00, 0xb0, 0xb5, 0x3f, 0x24, 0x02, 0x1c, + 0x00, 0x2a, 0x01, 0xd1, 0x08, 0x20, 0x0b, 0x23, + 0x01, 0x2a, 0x01, 0xd1, 0x09, 0x20, 0x08, 0x23, + 0x25, 0x1c, 0x9d, 0x40, 0x00, 0x29, 0x00, 0xd1, + 0x01, 0x21, 0x3f, 0x29, 0x00, 0xd9, 0x21, 0x1c, + 0x99, 0x40, 0x0a, 0x1c, 0x29, 0x1c, 0xff, 0xf7, + 0x7c, 0xfc, 0xb0, 0xbd, 0x00, 0x00, 0x91, 0xb5, + 0x12, 0x49, 0x00, 0xab, 0x1a, 0x78, 0x3c, 0x00, + 0xd4, 0xfd, 0x00, 0x00, 0x08, 0x78, 0x11, 0x4c, + 0x80, 0x18, 0x00, 0x06, 0x00, 0x0e, 0x20, 0x70, + 0x49, 0x78, 0x5a, 0x78, 0x89, 0x18, 0x09, 0x06, + 0x09, 0x0e, 0x13, 0x22, 0x13, 0x28, 0x61, 0x70, + 0x00, 0xd9, 0x22, 0x70, 0x13, 0x29, 0x00, 0xd9, + 0x62, 0x70, 0x08, 0x49, 0x08, 0x48, 0x06, 0x39, + 0xc9, 0x88, 0x81, 0x80, 0x21, 0x78, 0x00, 0x20, + 0xff, 0xf7, 0x82, 0xfc, 0x61, 0x78, 0x01, 0x20, + 0x3c, 0x00, 0x10, 0xfe, 0x00, 0x00, 0xff, 0xf7, + 0x7e, 0xfc, 0x98, 0xbd, 0x00, 0x00, 0xa4, 0x58, + 0x01, 0x00, 0xa6, 0x58, 0x01, 0x00, 0x64, 0x73, + 0x01, 0x00, 0x70, 0xb5, 0x1d, 0x4d, 0x04, 0x1c, + 0x28, 0x78, 0x0e, 0x1c, 0x03, 0x28, 0x03, 0xd1, + 0x02, 0x21, 0x11, 0x20, 0xf1, 0xf7, 0x35, 0xfa, + 0x20, 0x1c, 0x00, 0xf0, 0x4e, 0xf8, 0x00, 0x28, + 0x25, 0xd0, 0x28, 0x78, 0x01, 0x28, 0x0a, 0xd1, + 0x68, 0x68, 0x3c, 0x00, 0x4c, 0xfe, 0x00, 0x00, + 0x00, 0x28, 0x07, 0xd0, 0x01, 0x21, 0x11, 0x20, + 0x03, 0xf0, 0xee, 0xfb, 0x01, 0x20, 0x69, 0x68, + 0xf0, 0xf7, 0xbd, 0xfa, 0x6c, 0x70, 0x6e, 0x60, + 0x20, 0x1c, 0xff, 0xf7, 0xc1, 0xfc, 0x04, 0x1c, + 0x00, 0xf0, 0xd4, 0xfe, 0x00, 0x2c, 0x02, 0xd0, + 0x68, 0x68, 0x00, 0x28, 0x02, 0xd1, 0xf6, 0xf7, + 0xd9, 0xf8, 0x70, 0xbd, 0x01, 0x20, 0x28, 0x70, + 0x01, 0x22, 0x21, 0x1c, 0x3c, 0x00, 0x88, 0xfe, + 0x00, 0x00, 0x11, 0x20, 0x03, 0xf0, 0x9f, 0xfb, + 0x70, 0xbd, 0x02, 0x21, 0x11, 0x20, 0xf1, 0xf7, + 0x06, 0xfa, 0x70, 0xbd, 0x00, 0x00, 0x9c, 0x73, + 0x01, 0x00, 0x80, 0xb5, 0x01, 0x28, 0x05, 0xd1, + 0x00, 0x29, 0x04, 0xd0, 0x01, 0x29, 0x01, 0xd1, + 0xf6, 0xf7, 0xbf, 0xf8, 0x80, 0xbd, 0x05, 0x49, + 0x08, 0x78, 0x03, 0x28, 0x02, 0xd0, 0x00, 0x20, + 0x08, 0x70, 0x80, 0xbd, 0x03, 0x21, 0x3c, 0x00, + 0xc4, 0xfe, 0x00, 0x00, 0x11, 0x20, 0xf1, 0xf7, + 0xed, 0xf9, 0x80, 0xbd, 0x9c, 0x73, 0x01, 0x00, + 0x01, 0x48, 0x40, 0x78, 0x70, 0x47, 0x00, 0x00, + 0x9c, 0x73, 0x01, 0x00, 0x01, 0x1c, 0x01, 0x39, + 0x01, 0x20, 0x0e, 0x29, 0x00, 0xd3, 0x00, 0x20, + 0x70, 0x47, 0x00, 0x00, 0x10, 0xb5, 0x13, 0x4c, + 0x20, 0x78, 0x01, 0x28, 0x0e, 0xd1, 0x60, 0x68, + 0x00, 0x28, 0x0d, 0xd0, 0x01, 0x21, 0x11, 0x20, + 0x3c, 0x00, 0x00, 0xff, 0x00, 0x00, 0x03, 0xf0, + 0x98, 0xfb, 0x01, 0x20, 0x61, 0x68, 0xf0, 0xf7, + 0x67, 0xfa, 0x00, 0x20, 0x60, 0x60, 0x20, 0x70, + 0x01, 0xe0, 0x03, 0x28, 0x0e, 0xd0, 0x00, 0x21, + 0x11, 0x20, 0x03, 0xf0, 0x8a, 0xfb, 0xff, 0xf7, + 0x24, 0xfc, 0xff, 0xf7, 0xc0, 0xfb, 0x05, 0x49, + 0x08, 0x7b, 0x40, 0x08, 0x40, 0x00, 0x08, 0x73, + 0x03, 0x20, 0x20, 0x70, 0x01, 0x20, 0x10, 0xbd, + 0x00, 0x00, 0x3c, 0x00, 0x3c, 0xff, 0x00, 0x00, + 0x9c, 0x73, 0x01, 0x00, 0x88, 0x00, 0x07, 0x00, + 0x10, 0xb5, 0x0d, 0x4c, 0x20, 0x78, 0x03, 0x28, + 0x13, 0xd1, 0x00, 0x20, 0x20, 0x70, 0x0b, 0x48, + 0x01, 0x7b, 0x01, 0x22, 0x11, 0x43, 0x01, 0x73, + 0xff, 0xf7, 0x70, 0xfc, 0xff, 0xf7, 0x18, 0xfc, + 0x00, 0x28, 0x06, 0xd0, 0x02, 0x21, 0x21, 0x70, + 0x01, 0x1c, 0x00, 0x22, 0x11, 0x20, 0x03, 0xf0, + 0x2b, 0xfb, 0x01, 0x20, 0x3c, 0x00, 0x78, 0xff, + 0x00, 0x00, 0x10, 0xbd, 0x00, 0x00, 0x9c, 0x73, + 0x01, 0x00, 0x88, 0x00, 0x07, 0x00, 0x80, 0xb5, + 0x05, 0x49, 0x00, 0x28, 0x04, 0xd0, 0x00, 0x20, + 0x08, 0x60, 0x03, 0xf0, 0x5a, 0xfa, 0x80, 0xbd, + 0x01, 0x20, 0x08, 0x60, 0x80, 0xbd, 0x80, 0x5a, + 0x01, 0x00, 0xfe, 0xb5, 0x05, 0x1c, 0x80, 0x35, + 0x04, 0x1c, 0xa8, 0x68, 0x29, 0x79, 0x06, 0x68, + 0x20, 0x1c, 0xa0, 0x30, 0x02, 0x29, 0x3c, 0x00, + 0xb4, 0xff, 0x00, 0x00, 0x1c, 0xd1, 0x69, 0x79, + 0x08, 0x29, 0x01, 0xd0, 0x0c, 0x29, 0x17, 0xd1, + 0x01, 0x21, 0x61, 0x62, 0xa9, 0x68, 0x09, 0x68, + 0x09, 0x8b, 0x01, 0x82, 0xa9, 0x69, 0x01, 0x91, + 0x00, 0x8a, 0xc0, 0x06, 0x05, 0xd5, 0x60, 0x68, + 0x00, 0x88, 0x40, 0x05, 0x01, 0xd4, 0x01, 0x20, + 0x00, 0xe0, 0x00, 0x20, 0x02, 0x90, 0x05, 0x20, + 0x01, 0xa9, 0x02, 0xf0, 0xb7, 0xf9, 0x02, 0xe0, + 0x3c, 0x00, 0xf0, 0xff, 0x00, 0x00, 0x00, 0x21, + 0x61, 0x62, 0x01, 0x82, 0xa9, 0x68, 0x1a, 0x23, + 0x0a, 0x89, 0x67, 0x6a, 0x18, 0x1c, 0x00, 0x2f, + 0x00, 0xd1, 0x18, 0x20, 0x10, 0x1a, 0x08, 0x81, + 0xa8, 0x68, 0x01, 0x68, 0x62, 0x6a, 0x00, 0x2a, + 0x00, 0xd1, 0x18, 0x23, 0xc9, 0x18, 0x01, 0x60, + 0xa8, 0x68, 0x41, 0xc4, 0x30, 0x88, 0x08, 0x3c, + 0x40, 0x04, 0x03, 0xd5, 0x20, 0x1c, 0xf7, 0xf7, + 0xbc, 0xf9, 0x3c, 0x00, 0x2c, 0x00, 0x01, 0x00, + 0xfe, 0xbd, 0x00, 0x21, 0xe1, 0x61, 0x30, 0x79, + 0xc0, 0x07, 0x03, 0xd4, 0x20, 0x1c, 0xf7, 0xf7, + 0x91, 0xfe, 0xf5, 0xe7, 0x20, 0x1c, 0xf7, 0xf7, + 0x43, 0xff, 0xf1, 0xe7, 0xf7, 0xb5, 0x05, 0x1c, + 0x0a, 0x30, 0x06, 0x1c, 0xf5, 0xf7, 0xa4, 0xfa, + 0x14, 0x4f, 0x04, 0x1c, 0x39, 0x88, 0xf2, 0xf7, + 0x83, 0xfe, 0x32, 0x88, 0x78, 0x68, 0x02, 0x80, + 0x72, 0x88, 0x02, 0x30, 0x3c, 0x00, 0x68, 0x00, + 0x01, 0x00, 0x02, 0x80, 0xb1, 0x88, 0x41, 0x80, + 0x69, 0x88, 0x02, 0x9a, 0x20, 0x1c, 0xfa, 0xf7, + 0xce, 0xfe, 0x0b, 0x4d, 0x08, 0x35, 0x68, 0x80, + 0xfb, 0xf7, 0x2b, 0xfe, 0x01, 0x21, 0x09, 0x03, + 0x00, 0x28, 0x28, 0x88, 0x01, 0xd0, 0x88, 0x43, + 0x00, 0xe0, 0x08, 0x43, 0x28, 0x80, 0x04, 0x48, + 0x00, 0x22, 0x00, 0x21, 0x14, 0x30, 0xf2, 0xf7, + 0x32, 0xfe, 0x20, 0x1c, 0xfc, 0xf7, 0x3c, 0x00, + 0xa4, 0x00, 0x01, 0x00, 0x85, 0xfa, 0xfe, 0xbd, + 0x24, 0x7b, 0x01, 0x00, 0x10, 0xb5, 0x13, 0x4c, + 0x11, 0x49, 0x20, 0x1c, 0xff, 0x30, 0x69, 0x30, + 0x0e, 0xc9, 0x0e, 0xc0, 0x20, 0x1c, 0xff, 0x30, + 0x24, 0x22, 0x75, 0x30, 0x0e, 0x49, 0xf0, 0xf7, + 0x17, 0xfa, 0x20, 0x1c, 0xff, 0x30, 0x3c, 0x22, + 0x99, 0x30, 0x0c, 0x49, 0xf0, 0xf7, 0x6c, 0xfa, + 0x20, 0x1c, 0xff, 0x30, 0x10, 0x22, 0xd5, 0x30, + 0x3c, 0x00, 0xe0, 0x00, 0x01, 0x00, 0x09, 0x49, + 0xf0, 0xf7, 0x09, 0xfa, 0x20, 0x1c, 0xff, 0x30, + 0x28, 0x22, 0xe5, 0x30, 0x07, 0x49, 0xf0, 0xf7, + 0x5e, 0xfa, 0x10, 0xbd, 0x00, 0x00, 0x00, 0x80, + 0x07, 0x00, 0x40, 0x63, 0x01, 0x00, 0x0c, 0x80, + 0x07, 0x00, 0x30, 0x80, 0x07, 0x00, 0x80, 0x80, + 0x07, 0x00, 0xa0, 0x80, 0x07, 0x00, 0xb0, 0xb5, + 0x00, 0x28, 0x3f, 0xd0, 0x21, 0x48, 0x41, 0x68, + 0x21, 0x4c, 0x3c, 0x00, 0x1c, 0x01, 0x01, 0x00, + 0x61, 0x60, 0xc1, 0x68, 0xe1, 0x60, 0x01, 0x69, + 0x21, 0x61, 0x80, 0x6a, 0xa0, 0x62, 0x1e, 0x49, + 0x1c, 0x48, 0x09, 0x68, 0x14, 0x38, 0x41, 0x64, + 0x1c, 0x48, 0x25, 0x1c, 0x3c, 0x35, 0x0f, 0xc8, + 0x0f, 0xc5, 0x20, 0x1c, 0x80, 0x22, 0x4c, 0x30, + 0x19, 0x49, 0xf0, 0xf7, 0x33, 0xfa, 0x14, 0x22, + 0x20, 0x1c, 0xcc, 0x30, 0x17, 0x49, 0xf0, 0xf7, + 0x2d, 0xfa, 0x38, 0x22, 0x3c, 0x00, 0x58, 0x01, + 0x01, 0x00, 0x20, 0x1c, 0xe0, 0x30, 0x15, 0x49, + 0xf0, 0xf7, 0x27, 0xfa, 0x20, 0x1c, 0xff, 0x30, + 0x50, 0x22, 0x19, 0x30, 0x13, 0x49, 0xf0, 0xf7, + 0x20, 0xfa, 0x83, 0x20, 0x80, 0x00, 0x14, 0x22, + 0x20, 0x18, 0x10, 0x49, 0xf0, 0xf7, 0x19, 0xfa, + 0x11, 0x20, 0x40, 0x01, 0x84, 0x22, 0x20, 0x18, + 0x0e, 0x49, 0xf0, 0xf7, 0x12, 0xfa, 0xff, 0xf7, + 0x8e, 0xff, 0xf8, 0xf7, 0x94, 0xfb, 0x3c, 0x00, + 0x94, 0x01, 0x01, 0x00, 0xb0, 0xbd, 0xff, 0xf7, + 0x89, 0xff, 0xb0, 0xbd, 0x00, 0x10, 0x07, 0x00, + 0x40, 0x63, 0x01, 0x00, 0x08, 0x20, 0x07, 0x00, + 0x40, 0x20, 0x07, 0x00, 0x00, 0x30, 0x07, 0x00, + 0x00, 0x40, 0x07, 0x00, 0x00, 0x50, 0x07, 0x00, + 0x00, 0x60, 0x07, 0x00, 0x10, 0x00, 0x07, 0x00, + 0x00, 0x90, 0x07, 0x00, 0x0c, 0x49, 0x80, 0xb5, + 0x01, 0x20, 0x48, 0x60, 0x0a, 0x48, 0x14, 0x38, + 0x3c, 0x00, 0xd0, 0x01, 0x01, 0x00, 0x00, 0x78, + 0x01, 0x28, 0x04, 0xd0, 0x08, 0x48, 0x94, 0x38, + 0x40, 0x6f, 0x00, 0x28, 0x03, 0xd0, 0x00, 0x20, + 0x00, 0xf0, 0x1f, 0xf8, 0x80, 0xbd, 0x08, 0x68, + 0x00, 0x28, 0xfb, 0xd0, 0x03, 0x48, 0xf2, 0xf7, + 0x7a, 0xfe, 0x80, 0xbd, 0x00, 0x00, 0x98, 0x66, + 0x01, 0x00, 0xff, 0xff, 0x00, 0x00, 0x80, 0xb5, + 0x00, 0x28, 0x09, 0xd1, 0xf2, 0x21, 0x0f, 0x20, + 0x03, 0xf0, 0x3c, 0x00, 0x0c, 0x02, 0x01, 0x00, + 0x13, 0xfa, 0x00, 0x22, 0x0f, 0x21, 0xf1, 0x20, + 0x03, 0xf0, 0xcc, 0xfa, 0x80, 0xbd, 0x01, 0x20, + 0xf8, 0xf7, 0x6a, 0xfe, 0x80, 0xbd, 0x00, 0x00, + 0x10, 0xb5, 0x04, 0x1c, 0x03, 0x20, 0x00, 0xf0, + 0xc9, 0xf9, 0x00, 0x21, 0x0f, 0x20, 0x03, 0xf0, + 0xff, 0xf9, 0xff, 0xf7, 0x65, 0xf8, 0x0b, 0x49, + 0x00, 0x20, 0x48, 0x74, 0xfb, 0xf7, 0xe6, 0xfa, + 0x09, 0x48, 0x00, 0x68, 0x3c, 0x00, 0x48, 0x02, + 0x01, 0x00, 0x00, 0x28, 0x03, 0xdc, 0x02, 0x21, + 0x40, 0x42, 0xff, 0xf7, 0x52, 0xfc, 0x04, 0x48, + 0x14, 0x30, 0x00, 0x68, 0x00, 0x28, 0x02, 0xd0, + 0x20, 0x1c, 0xf2, 0xf7, 0x42, 0xfe, 0x10, 0xbd, + 0x00, 0x00, 0x84, 0x66, 0x01, 0x00, 0xd4, 0x7e, + 0x01, 0x00, 0x06, 0x49, 0x80, 0xb5, 0x09, 0x78, + 0x04, 0x29, 0x05, 0xd0, 0x05, 0x29, 0x03, 0xd0, + 0x06, 0x29, 0x01, 0xd0, 0x07, 0x29, 0x3c, 0x00, + 0x84, 0x02, 0x01, 0x00, 0x01, 0xd1, 0xfe, 0xf7, + 0xbd, 0xfd, 0x80, 0xbd, 0x74, 0x66, 0x01, 0x00, + 0x10, 0xb5, 0x09, 0x4c, 0xe0, 0x68, 0x00, 0x28, + 0x0b, 0xd1, 0x07, 0x48, 0x2c, 0x38, 0x00, 0x8a, + 0xc0, 0x07, 0x04, 0xd5, 0x00, 0x21, 0x01, 0x20, + 0x62, 0x68, 0xf9, 0xf7, 0xc9, 0xfa, 0x01, 0x20, + 0xe0, 0x60, 0x01, 0x20, 0x10, 0xbd, 0x00, 0x00, + 0xf4, 0x6e, 0x01, 0x00, 0x8c, 0xb5, 0x02, 0x1c, + 0x3c, 0x00, 0xc0, 0x02, 0x01, 0x00, 0x08, 0x1c, + 0x11, 0x1c, 0xfd, 0xf7, 0x28, 0xff, 0x01, 0x90, + 0x00, 0x28, 0x05, 0xd0, 0x17, 0x20, 0x00, 0xab, + 0x18, 0x80, 0x68, 0x46, 0xfd, 0xf7, 0xff, 0xf8, + 0x8c, 0xbd, 0xf1, 0xb5, 0x2e, 0x4c, 0xae, 0xb0, + 0x00, 0x25, 0x25, 0x63, 0x20, 0x69, 0x01, 0x28, + 0x03, 0xd1, 0x01, 0xa8, 0x01, 0xf0, 0xa1, 0xf8, + 0x4e, 0xe0, 0x01, 0x26, 0x28, 0x4f, 0x26, 0x70, + 0x50, 0x3f, 0x3c, 0x00, 0xfc, 0x02, 0x01, 0x00, + 0xb8, 0x69, 0xf8, 0xf7, 0x4f, 0xf8, 0x25, 0x49, + 0x2c, 0x39, 0x00, 0x28, 0x1d, 0xd0, 0xe0, 0x6a, + 0x01, 0x28, 0x1a, 0xd1, 0x08, 0x8a, 0x0f, 0x1c, + 0x80, 0x07, 0x04, 0xd5, 0x00, 0x21, 0x02, 0x20, + 0x62, 0x68, 0xf9, 0xf7, 0x8f, 0xfa, 0x38, 0x8a, + 0x00, 0x07, 0x07, 0xd5, 0xe0, 0x68, 0x01, 0x28, + 0x04, 0xd1, 0x00, 0x21, 0x08, 0x20, 0x62, 0x68, + 0xf9, 0xf7, 0x84, 0xfa, 0x3c, 0x00, 0x38, 0x03, + 0x01, 0x00, 0x00, 0x22, 0x18, 0x21, 0x82, 0x20, + 0x26, 0x63, 0x03, 0xf0, 0x36, 0xfa, 0x25, 0xe0, + 0x08, 0x8a, 0x0e, 0x1c, 0x80, 0x07, 0x04, 0xd5, + 0x00, 0x21, 0x02, 0x20, 0x62, 0x68, 0xf9, 0xf7, + 0x74, 0xfa, 0x30, 0x8a, 0x00, 0x07, 0x07, 0xd5, + 0xe0, 0x68, 0x01, 0x28, 0x04, 0xd1, 0x00, 0x21, + 0x08, 0x20, 0x62, 0x68, 0xf9, 0xf7, 0x69, 0xfa, + 0x30, 0x8a, 0x40, 0x07, 0x04, 0xd5, 0x3c, 0x00, + 0x74, 0x03, 0x01, 0x00, 0x00, 0x22, 0x00, 0x21, + 0x04, 0x20, 0xf9, 0xf7, 0x61, 0xfa, 0x2e, 0x98, + 0x01, 0x28, 0x04, 0xd0, 0x1e, 0x95, 0x09, 0x21, + 0x1b, 0xa8, 0xff, 0xf7, 0x97, 0xff, 0xe5, 0x62, + 0xbd, 0x61, 0xe5, 0x60, 0x2f, 0xb0, 0xf0, 0xbd, + 0xf4, 0x6e, 0x01, 0x00, 0x80, 0xb5, 0x07, 0x20, + 0xfe, 0xf7, 0xa0, 0xfe, 0x00, 0x21, 0x0f, 0x20, + 0x03, 0xf0, 0x44, 0xf9, 0x0c, 0x48, 0x01, 0x78, + 0x3c, 0x00, 0xb0, 0x03, 0x01, 0x00, 0x00, 0x29, + 0x0f, 0xd0, 0x02, 0x21, 0x01, 0x70, 0x88, 0x38, + 0x00, 0x78, 0x00, 0x28, 0x04, 0xd0, 0x07, 0x49, + 0x10, 0x31, 0x48, 0x7c, 0x01, 0x30, 0x48, 0x74, + 0xf2, 0x22, 0x0f, 0x20, 0x05, 0x49, 0x03, 0xf0, + 0xfc, 0xf8, 0x00, 0x22, 0x0f, 0x21, 0xf3, 0x20, + 0x03, 0xf0, 0xe9, 0xf9, 0x80, 0xbd, 0x74, 0x66, + 0x01, 0x00, 0x80, 0x84, 0x1e, 0x00, 0x10, 0xb5, + 0x04, 0x1c, 0x3c, 0x00, 0xec, 0x03, 0x01, 0x00, + 0xf2, 0x21, 0x0f, 0x20, 0x03, 0xf0, 0x20, 0xf9, + 0x01, 0x2c, 0x0a, 0xd1, 0x08, 0x48, 0x08, 0x49, + 0x00, 0x68, 0x14, 0x39, 0x00, 0x28, 0x05, 0xd0, + 0xc8, 0x78, 0x02, 0x28, 0x02, 0xd1, 0xf7, 0xf7, + 0xaf, 0xfa, 0x10, 0xbd, 0x00, 0x20, 0x48, 0x70, + 0x05, 0x20, 0xfe, 0xf7, 0x65, 0xfe, 0x10, 0xbd, + 0x98, 0x66, 0x01, 0x00, 0xf8, 0xb5, 0x28, 0x4e, + 0x30, 0x21, 0x35, 0x1c, 0x3c, 0x00, 0x28, 0x04, + 0x01, 0x00, 0x60, 0x35, 0x28, 0x89, 0x89, 0x5d, + 0x88, 0x42, 0x03, 0xd1, 0x00, 0x20, 0xff, 0xf7, + 0xf6, 0xfe, 0xf8, 0xbd, 0x34, 0x1c, 0x70, 0x34, + 0x01, 0x21, 0x21, 0x70, 0x41, 0x18, 0x80, 0x19, + 0x30, 0x30, 0x29, 0x81, 0x40, 0x78, 0x1d, 0x4f, + 0x18, 0x3f, 0x38, 0x70, 0x00, 0x28, 0x08, 0xd0, + 0x00, 0x21, 0xfb, 0xf7, 0xc2, 0xf9, 0x00, 0x28, + 0x07, 0xd1, 0x20, 0x78, 0xff, 0xf7, 0x3c, 0x00, + 0x64, 0x04, 0x01, 0x00, 0x9b, 0xff, 0xe7, 0xe7, + 0x01, 0x21, 0x0f, 0x20, 0xf0, 0xf7, 0x1a, 0xff, + 0x14, 0x48, 0x01, 0x21, 0x80, 0x30, 0x81, 0x70, + 0x38, 0x69, 0xfb, 0xf7, 0x55, 0xfa, 0x20, 0x73, + 0x00, 0x21, 0x0f, 0x20, 0x03, 0xf0, 0xd6, 0xf8, + 0x70, 0x7a, 0x01, 0x28, 0x0e, 0xd1, 0x0e, 0x48, + 0x00, 0x68, 0x00, 0x28, 0x04, 0xd0, 0x38, 0x78, + 0x02, 0xf0, 0xda, 0xfa, 0x00, 0x28, 0x05, 0xd0, + 0x3c, 0x00, 0xa0, 0x04, 0x01, 0x00, 0x30, 0x7f, + 0x60, 0x73, 0x03, 0x20, 0x20, 0x70, 0x71, 0x89, + 0x05, 0xe0, 0x05, 0x20, 0x20, 0x70, 0xa8, 0x88, + 0xfa, 0xf7, 0x3b, 0xfb, 0x01, 0x1c, 0x00, 0x22, + 0x0f, 0x20, 0x03, 0xf0, 0x86, 0xf8, 0xba, 0xe7, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0xe4, 0x62, + 0x01, 0x00, 0x70, 0xb5, 0x04, 0x1c, 0x02, 0xf0, + 0x6c, 0xfc, 0x36, 0x4b, 0x19, 0x1c, 0xa0, 0x31, + 0x0a, 0x78, 0x3c, 0x00, 0xdc, 0x04, 0x01, 0x00, + 0x10, 0x2a, 0x02, 0xd2, 0x0a, 0x79, 0x10, 0x2a, + 0x01, 0xd3, 0x01, 0x25, 0x00, 0xe0, 0x00, 0x25, + 0x30, 0x4e, 0xca, 0x79, 0x80, 0x36, 0x01, 0x2c, + 0x12, 0xd0, 0x00, 0x25, 0x02, 0x2c, 0x2e, 0xd0, + 0x04, 0x2c, 0x3c, 0xd1, 0x5c, 0x6b, 0x00, 0x2c, + 0x39, 0xd1, 0x9c, 0x6f, 0x00, 0x1b, 0x2a, 0x4c, + 0xa0, 0x42, 0x34, 0xd9, 0xb2, 0x68, 0x98, 0x6a, + 0x82, 0x42, 0x31, 0xd0, 0x3c, 0x00, 0x18, 0x05, + 0x01, 0x00, 0x4d, 0x72, 0x34, 0xe0, 0xb0, 0x68, + 0x9c, 0x6a, 0x02, 0x22, 0xa0, 0x42, 0x21, 0xd1, + 0x58, 0x6b, 0x00, 0x28, 0x1e, 0xd1, 0x00, 0x2d, + 0x1c, 0xd1, 0x48, 0x7a, 0x19, 0x28, 0x20, 0xd0, + 0x34, 0x68, 0x98, 0x6f, 0x64, 0x00, 0x00, 0x1b, + 0x74, 0x68, 0x00, 0x19, 0xff, 0x30, 0x1c, 0x4c, + 0x39, 0x30, 0xa0, 0x42, 0x16, 0xd2, 0x48, 0x79, + 0x8c, 0x79, 0x00, 0x19, 0x30, 0x28, 0x3c, 0x00, + 0x54, 0x05, 0x01, 0x00, 0x11, 0xd3, 0x10, 0x22, + 0x0f, 0xe0, 0x5c, 0x6b, 0x01, 0x2c, 0x06, 0xd1, + 0xb0, 0x68, 0x9a, 0x6a, 0x90, 0x42, 0x00, 0xd1, + 0x4d, 0x72, 0x00, 0x22, 0x05, 0xe0, 0x9c, 0x6f, + 0x00, 0x1b, 0x12, 0x4c, 0xa0, 0x42, 0x00, 0xd3, + 0x20, 0x22, 0x06, 0xe0, 0x4a, 0x7a, 0x19, 0x2a, + 0x01, 0xd2, 0x01, 0x32, 0x4a, 0x72, 0x20, 0x22, + 0xb0, 0x60, 0x30, 0x68, 0x9b, 0x6f, 0x98, 0x42, + 0x3c, 0x00, 0x90, 0x05, 0x01, 0x00, 0x04, 0xd1, + 0x00, 0x2a, 0x00, 0xd1, 0x48, 0x79, 0x4a, 0x71, + 0x06, 0xe0, 0x10, 0x2a, 0x04, 0xd3, 0x70, 0x60, + 0x33, 0x60, 0x48, 0x79, 0x88, 0x71, 0xf6, 0xe7, + 0xca, 0x71, 0x70, 0xbd, 0x00, 0x00, 0xa4, 0x6c, + 0x01, 0x00, 0xa3, 0x04, 0x00, 0x00, 0x71, 0x02, + 0x00, 0x00, 0x35, 0x0c, 0x00, 0x00, 0x05, 0x48, + 0x80, 0xb5, 0x81, 0x7b, 0x00, 0x29, 0x05, 0xd0, + 0x00, 0x21, 0x3c, 0x00, 0xcc, 0x05, 0x01, 0x00, + 0x81, 0x73, 0x03, 0x49, 0x0f, 0x20, 0x01, 0xf0, + 0x0f, 0xff, 0x80, 0xbd, 0x74, 0x66, 0x01, 0x00, + 0xe9, 0x03, 0x01, 0x00, 0xf8, 0xb5, 0x04, 0x1c, + 0x02, 0xf0, 0xe2, 0xfb, 0x05, 0x1c, 0x38, 0x4e, + 0x20, 0x1c, 0x37, 0x49, 0x34, 0x1c, 0xa0, 0x34, + 0x10, 0x22, 0x44, 0x39, 0x01, 0x28, 0x2c, 0xd0, + 0x04, 0x28, 0x4e, 0xd1, 0x37, 0x1c, 0x74, 0x36, + 0x09, 0xce, 0x26, 0x78, 0x3c, 0x00, 0x08, 0x06, + 0x01, 0x00, 0xc0, 0x1a, 0x20, 0x2e, 0x04, 0xd1, + 0x30, 0x4e, 0xb0, 0x42, 0x01, 0xd9, 0x00, 0x26, + 0x4e, 0x61, 0x3e, 0x1c, 0x3f, 0x6c, 0x00, 0x2f, + 0x48, 0xd1, 0x77, 0x6c, 0x00, 0x2f, 0x45, 0xd1, + 0xb7, 0x6a, 0x00, 0x2f, 0x3d, 0xd0, 0x77, 0x6b, + 0x00, 0x2f, 0x3a, 0xd0, 0x27, 0x4f, 0xb8, 0x42, + 0x37, 0xd2, 0x60, 0x78, 0x10, 0x28, 0x06, 0xd3, + 0xf0, 0x6f, 0x18, 0x1a, 0x24, 0x4b, 0x3c, 0x00, + 0x44, 0x06, 0x01, 0x00, 0x98, 0x42, 0x01, 0xd2, + 0xe2, 0x70, 0xf5, 0x66, 0x48, 0x69, 0x06, 0x28, + 0x2f, 0xd2, 0x01, 0x30, 0x2c, 0xe0, 0x20, 0x78, + 0x20, 0x28, 0x01, 0xd1, 0x06, 0x23, 0x4b, 0x61, + 0x02, 0x23, 0x23, 0x71, 0xb3, 0x6a, 0x00, 0x2b, + 0x19, 0xd0, 0x49, 0x69, 0x03, 0x29, 0x16, 0xd9, + 0x71, 0x6b, 0x73, 0x6d, 0x59, 0x40, 0x12, 0xd0, + 0xe1, 0x78, 0x10, 0x29, 0x10, 0xd3, 0x61, 0x78, + 0x3c, 0x00, 0x80, 0x06, 0x01, 0x00, 0x33, 0x1c, + 0x10, 0x29, 0x0c, 0xd3, 0xd9, 0x6f, 0x69, 0x1a, + 0x13, 0x4d, 0xa9, 0x42, 0x07, 0xd2, 0x58, 0x6c, + 0x00, 0x28, 0x02, 0xd0, 0x98, 0x6c, 0x00, 0x28, + 0x00, 0xd1, 0x22, 0x71, 0xf8, 0xbd, 0x02, 0x28, + 0xfc, 0xd1, 0x22, 0x70, 0xfa, 0xe7, 0x48, 0x69, + 0x00, 0x28, 0x01, 0xd0, 0x01, 0x38, 0x48, 0x61, + 0x0a, 0x49, 0xf0, 0x6e, 0x40, 0x18, 0x02, 0xf0, + 0xb0, 0xfa, 0x3c, 0x00, 0xbc, 0x06, 0x01, 0x00, + 0x00, 0x28, 0xee, 0xd0, 0x01, 0x20, 0xe0, 0x70, + 0x06, 0x48, 0x28, 0x18, 0xf0, 0x66, 0xe8, 0xe7, + 0xa4, 0x6c, 0x01, 0x00, 0xe2, 0x04, 0x00, 0x00, + 0x1a, 0x06, 0x00, 0x00, 0x53, 0x07, 0x00, 0x00, + 0x00, 0x2d, 0x31, 0x01, 0x00, 0x5a, 0x62, 0x02, + 0x80, 0xb5, 0x41, 0x68, 0x09, 0x79, 0xc9, 0x07, + 0x13, 0xd5, 0xc1, 0x69, 0x00, 0x29, 0x0d, 0xd0, + 0x89, 0x79, 0x02, 0x29, 0x3c, 0x00, 0xf8, 0x06, + 0x01, 0x00, 0x0a, 0xd1, 0x08, 0x21, 0x01, 0x86, + 0x01, 0x1c, 0x38, 0x31, 0x81, 0x62, 0x02, 0x1c, + 0x06, 0x48, 0x04, 0x49, 0xf9, 0xf7, 0xfd, 0xfc, + 0x80, 0xbd, 0xf7, 0xf7, 0xdc, 0xfb, 0x80, 0xbd, + 0xf7, 0xf7, 0x23, 0xfb, 0x80, 0xbd, 0xb9, 0x71, + 0x00, 0x00, 0xa0, 0x6a, 0x01, 0x00, 0x10, 0xb5, + 0x00, 0x24, 0x00, 0x28, 0x03, 0xd0, 0x02, 0xf0, + 0xe8, 0xfe, 0x00, 0x28, 0x17, 0xd0, 0x3c, 0x00, + 0x34, 0x07, 0x01, 0x00, 0x0c, 0x4c, 0x01, 0x20, + 0xa0, 0x72, 0x20, 0x68, 0x00, 0x21, 0x41, 0x62, + 0x0a, 0x49, 0x02, 0x68, 0xc9, 0x78, 0x60, 0x32, + 0x91, 0x71, 0x21, 0x89, 0x01, 0x31, 0x21, 0x81, + 0x00, 0x68, 0x40, 0x30, 0x81, 0x83, 0xfb, 0xf7, + 0x31, 0xfc, 0x20, 0x68, 0x00, 0x68, 0xfc, 0xf7, + 0xa1, 0xf9, 0x01, 0x24, 0x20, 0x1c, 0x10, 0xbd, + 0x14, 0x7a, 0x01, 0x00, 0x0e, 0x61, 0x01, 0x00, + 0x3c, 0x00, 0x70, 0x07, 0x01, 0x00, 0x7f, 0xb5, + 0x06, 0x1c, 0x1e, 0x48, 0x1d, 0x1c, 0x43, 0x88, + 0x02, 0x88, 0x1c, 0x21, 0x00, 0x20, 0x90, 0xb0, + 0xf0, 0xf7, 0x45, 0xff, 0x03, 0x90, 0x04, 0x68, + 0xff, 0x21, 0x01, 0x31, 0x21, 0x80, 0x08, 0x20, + 0x60, 0x80, 0x06, 0x20, 0x20, 0x71, 0x04, 0x20, + 0x60, 0x71, 0xc0, 0x01, 0x00, 0x2d, 0x00, 0xd1, + 0x08, 0x1c, 0xe0, 0x80, 0x01, 0xa8, 0x02, 0x30, + 0x31, 0x1c, 0x3c, 0x00, 0xac, 0x07, 0x01, 0x00, + 0x05, 0x1c, 0xfa, 0xf7, 0x5f, 0xfa, 0x10, 0x49, + 0x68, 0x46, 0xfa, 0xf7, 0x5b, 0xfa, 0x20, 0x1c, + 0x08, 0x30, 0x69, 0x46, 0xfa, 0xf7, 0x56, 0xfa, + 0x29, 0x1c, 0x20, 0x1c, 0x12, 0x30, 0xfa, 0xf7, + 0x51, 0xfa, 0x10, 0xab, 0x98, 0x88, 0x00, 0x22, + 0x01, 0x21, 0x20, 0x83, 0xd8, 0x88, 0x60, 0x83, + 0x18, 0x89, 0xe0, 0x81, 0x58, 0x89, 0x20, 0x82, + 0x68, 0x46, 0xf9, 0xf7, 0x3c, 0x00, 0xe8, 0x07, + 0x01, 0x00, 0x17, 0xff, 0x14, 0xb0, 0x70, 0xbd, + 0x00, 0x00, 0x14, 0x6e, 0x01, 0x00, 0x12, 0x61, + 0x01, 0x00, 0xb0, 0xb5, 0x04, 0x1c, 0x18, 0x48, + 0x25, 0x1c, 0x00, 0x78, 0x60, 0x35, 0x80, 0x07, + 0x00, 0x28, 0x08, 0xda, 0xe8, 0x79, 0x00, 0x28, + 0x05, 0xd0, 0xf4, 0xf7, 0x70, 0xff, 0x01, 0x1c, + 0x20, 0x1c, 0x00, 0xf0, 0x78, 0xf9, 0x29, 0x88, + 0x2e, 0x20, 0x00, 0x5d, 0xf2, 0xf7, 0x3c, 0x00, + 0x24, 0x08, 0x01, 0x00, 0x9f, 0xfa, 0xe8, 0x79, + 0x00, 0x28, 0x0b, 0xd1, 0x20, 0x1c, 0x40, 0x30, + 0x01, 0x8b, 0x22, 0x69, 0x11, 0x80, 0x41, 0x8b, + 0x22, 0x69, 0x51, 0x80, 0x80, 0x8b, 0x21, 0x69, + 0xc8, 0x82, 0x07, 0xe0, 0x01, 0x28, 0x05, 0xd1, + 0x20, 0x69, 0x01, 0x22, 0x01, 0x88, 0xd2, 0x02, + 0x11, 0x43, 0x01, 0x80, 0x6a, 0x7a, 0xe0, 0x68, + 0x02, 0x49, 0xf2, 0xf7, 0x53, 0xfa, 0xb0, 0xbd, + 0x3c, 0x00, 0x60, 0x08, 0x01, 0x00, 0x1d, 0x75, + 0x01, 0x00, 0xd1, 0x4f, 0x00, 0x00, 0x90, 0xb5, + 0x04, 0x1c, 0x38, 0x23, 0x0c, 0x49, 0x58, 0x43, + 0x43, 0x18, 0x85, 0xb0, 0x00, 0x20, 0x0a, 0x49, + 0x02, 0x90, 0x18, 0x1c, 0x01, 0x22, 0x03, 0x91, + 0x09, 0x49, 0x04, 0x92, 0x30, 0x30, 0x42, 0x78, + 0x09, 0x88, 0x01, 0x92, 0x00, 0x91, 0x01, 0x78, + 0x5a, 0x6b, 0x0c, 0x33, 0x20, 0x1c, 0xfb, 0xf7, + 0x7c, 0xf8, 0x3c, 0x00, 0x9c, 0x08, 0x01, 0x00, + 0x05, 0xb0, 0x90, 0xbd, 0xd4, 0xe4, 0x01, 0x00, + 0x5d, 0x4e, 0x00, 0x00, 0x48, 0x7b, 0x01, 0x00, + 0x90, 0xb5, 0x85, 0xb0, 0x03, 0x1c, 0x00, 0x20, + 0x02, 0x90, 0x0a, 0x49, 0x18, 0x1c, 0x00, 0x22, + 0x04, 0x92, 0x60, 0x30, 0x03, 0x91, 0xc2, 0x79, + 0x01, 0x88, 0x01, 0x92, 0x00, 0x91, 0x5a, 0x6a, + 0xdc, 0x68, 0x20, 0x33, 0x99, 0x7b, 0x40, 0x7a, + 0x23, 0x1c, 0xfb, 0xf7, 0x3c, 0x00, 0xd8, 0x08, + 0x01, 0x00, 0x5d, 0xf8, 0x05, 0xb0, 0x90, 0xbd, + 0x00, 0x00, 0x0d, 0x4f, 0x00, 0x00, 0x07, 0x49, + 0x80, 0xb5, 0x88, 0x6a, 0x00, 0x28, 0x08, 0xd1, + 0x01, 0x20, 0x88, 0x62, 0xf0, 0xf7, 0xaf, 0xfc, + 0x01, 0x1c, 0x03, 0x48, 0x00, 0x22, 0xf2, 0xf7, + 0xb8, 0xfe, 0x80, 0xbd, 0x00, 0x00, 0x78, 0x69, + 0x01, 0x00, 0x41, 0xe4, 0x00, 0x00, 0xf0, 0xb5, + 0x9b, 0xb0, 0x00, 0x28, 0x20, 0xd0, 0x3c, 0x00, + 0x14, 0x09, 0x01, 0x00, 0x01, 0x1c, 0x08, 0xa8, + 0xfc, 0xf7, 0xb2, 0xfd, 0x01, 0x20, 0x11, 0x90, + 0x03, 0x20, 0x10, 0xad, 0x28, 0x72, 0x04, 0x20, + 0x68, 0x72, 0x05, 0xa8, 0x00, 0x22, 0x69, 0x46, + 0xf4, 0xf7, 0x00, 0xff, 0x00, 0x24, 0x00, 0x26, + 0x05, 0xa9, 0x00, 0x20, 0xf9, 0xf7, 0xfc, 0xfa, + 0x69, 0x46, 0xf9, 0xf7, 0xf9, 0xfa, 0x0b, 0x90, + 0x08, 0xa8, 0xfc, 0xf7, 0xbb, 0xfd, 0x01, 0x34, + 0x3c, 0x00, 0x50, 0x09, 0x01, 0x00, 0x02, 0x2c, + 0x2e, 0x72, 0xf0, 0xdb, 0x1b, 0xb0, 0xf0, 0xbd, + 0x00, 0x00, 0x90, 0xb5, 0x04, 0x1c, 0x4c, 0x23, + 0x0c, 0x49, 0x58, 0x43, 0x43, 0x18, 0x85, 0xb0, + 0x00, 0x20, 0x0a, 0x49, 0x02, 0x90, 0x00, 0x22, + 0x04, 0x92, 0x3c, 0x20, 0x03, 0x91, 0xc2, 0x5c, + 0x08, 0x48, 0x41, 0x88, 0x01, 0x92, 0x41, 0x20, + 0x00, 0x91, 0xc1, 0x5c, 0x5a, 0x68, 0x08, 0x33, + 0x20, 0x1c, 0x3c, 0x00, 0x8c, 0x09, 0x01, 0x00, + 0xfb, 0xf7, 0x02, 0xf8, 0x05, 0xb0, 0x90, 0xbd, + 0x58, 0xe3, 0x01, 0x00, 0x75, 0x4f, 0x00, 0x00, + 0x3c, 0x7c, 0x01, 0x00, 0xf8, 0xb5, 0x0e, 0x1c, + 0x22, 0x4c, 0x38, 0x21, 0x17, 0x1c, 0x05, 0x1c, + 0x20, 0x1c, 0xef, 0xf7, 0x75, 0xfd, 0x23, 0x1c, + 0x25, 0x33, 0x21, 0x1c, 0x24, 0x31, 0x10, 0x20, + 0x6a, 0x46, 0xf9, 0xf7, 0x1d, 0xf8, 0x00, 0xab, + 0x18, 0x88, 0x07, 0x21, 0x3c, 0x00, 0xc8, 0x09, + 0x01, 0x00, 0x1a, 0x4a, 0x02, 0x38, 0x20, 0x84, + 0x20, 0x1c, 0x20, 0x30, 0x81, 0x70, 0xc5, 0x70, + 0x11, 0x1c, 0x06, 0x73, 0x47, 0x73, 0x34, 0x31, + 0x21, 0x63, 0x30, 0x32, 0x62, 0x63, 0x01, 0x79, + 0x25, 0x1c, 0x10, 0x35, 0x21, 0x81, 0x20, 0x60, + 0xe5, 0x60, 0x18, 0x88, 0x40, 0x1a, 0x20, 0x83, + 0x20, 0x1c, 0x28, 0x30, 0x20, 0x61, 0x20, 0x1c, + 0xf9, 0xf7, 0x11, 0xf8, 0x0d, 0x48, 0x3c, 0x00, + 0x04, 0x0a, 0x01, 0x00, 0x00, 0x68, 0x00, 0x28, + 0x07, 0xd0, 0x06, 0x21, 0x20, 0x1c, 0xf8, 0xf7, + 0x47, 0xfd, 0x10, 0x21, 0x28, 0x1c, 0xf8, 0xf7, + 0x43, 0xfd, 0x08, 0x48, 0x02, 0x21, 0x01, 0x62, + 0x44, 0x62, 0x01, 0x21, 0x01, 0x62, 0x06, 0x48, + 0x00, 0x68, 0xef, 0xf7, 0xd5, 0xfc, 0xf8, 0xbd, + 0x8c, 0x8e, 0x01, 0x00, 0xe4, 0xfe, 0x01, 0x00, + 0xcc, 0x5c, 0x01, 0x00, 0x00, 0x30, 0x07, 0x00, + 0x3c, 0x00, 0x40, 0x0a, 0x01, 0x00, 0x5c, 0x5b, + 0x01, 0x00, 0xf0, 0xb5, 0x06, 0x1c, 0x40, 0x36, + 0x31, 0x8b, 0x04, 0x1c, 0x25, 0x1c, 0x08, 0x07, + 0x80, 0x0f, 0x60, 0x35, 0x01, 0x28, 0x85, 0xb0, + 0x3b, 0xd0, 0xe8, 0x79, 0x00, 0x28, 0x05, 0xd1, + 0x20, 0x69, 0x01, 0x80, 0xb0, 0x8b, 0x21, 0x69, + 0xc8, 0x82, 0x07, 0xe0, 0x01, 0x28, 0x05, 0xd1, + 0x20, 0x69, 0x01, 0x22, 0x01, 0x88, 0xd2, 0x02, + 0x11, 0x43, 0x3c, 0x00, 0x7c, 0x0a, 0x01, 0x00, + 0x01, 0x80, 0x20, 0x48, 0x00, 0x78, 0x80, 0x07, + 0x26, 0xd5, 0xe8, 0x79, 0x00, 0x28, 0x23, 0xd0, + 0xa0, 0x6b, 0x00, 0x28, 0x1c, 0xd0, 0xf4, 0xf7, + 0x2f, 0xfe, 0x00, 0x28, 0x09, 0xd0, 0xb8, 0x21, + 0x09, 0x58, 0x00, 0x29, 0x05, 0xd0, 0x30, 0x21, + 0x09, 0x5d, 0xb4, 0x30, 0x08, 0x18, 0x07, 0x7a, + 0x00, 0xe0, 0x00, 0x27, 0x01, 0x21, 0x38, 0x1c, + 0xfa, 0xf7, 0x86, 0xf9, 0x3c, 0x00, 0xb8, 0x0a, + 0x01, 0x00, 0x04, 0x90, 0x20, 0x69, 0x04, 0x30, + 0x39, 0x1c, 0xf4, 0xf7, 0x6c, 0xfd, 0x04, 0x99, + 0xfa, 0xf7, 0xd3, 0xf9, 0x02, 0xe0, 0x20, 0x1c, + 0xf7, 0xf7, 0xf9, 0xfb, 0x70, 0x83, 0x70, 0x8b, + 0x21, 0x69, 0x00, 0x22, 0x48, 0x80, 0x09, 0x49, + 0x0a, 0x48, 0x04, 0x92, 0x03, 0x91, 0x02, 0x90, + 0xea, 0x79, 0x29, 0x88, 0x01, 0x92, 0x00, 0x91, + 0x62, 0x6a, 0xe3, 0x68, 0x20, 0x34, 0x3c, 0x00, + 0xf4, 0x0a, 0x01, 0x00, 0xa1, 0x7b, 0x68, 0x7a, + 0xfa, 0xf7, 0x4c, 0xff, 0x05, 0xb0, 0xf0, 0xbd, + 0x1d, 0x75, 0x01, 0x00, 0xd1, 0x4f, 0x00, 0x00, + 0xdd, 0x2f, 0x01, 0x00, 0xfe, 0xb5, 0x04, 0x1c, + 0x26, 0x1c, 0x01, 0x20, 0x20, 0x36, 0x00, 0x29, + 0x02, 0x90, 0x2e, 0xd0, 0x58, 0x20, 0x00, 0x5b, + 0x00, 0x07, 0x80, 0x0f, 0x01, 0x28, 0x01, 0xd1, + 0xcc, 0x31, 0x00, 0xe0, 0xb4, 0x31, 0x48, 0x68, + 0x3c, 0x00, 0x30, 0x0b, 0x01, 0x00, 0x0d, 0x1c, + 0x00, 0x28, 0x24, 0xd0, 0x20, 0x1c, 0x60, 0x30, + 0xc2, 0x79, 0x01, 0x21, 0x01, 0x2a, 0x00, 0xd0, + 0x00, 0x21, 0x27, 0x1c, 0x62, 0x6d, 0x30, 0x37, + 0x00, 0x2a, 0x04, 0xd0, 0x3a, 0x1c, 0x28, 0x1c, + 0xf6, 0xf7, 0xe7, 0xfd, 0x07, 0xe0, 0x42, 0x7a, + 0x23, 0x1c, 0x68, 0x33, 0x00, 0x92, 0x3a, 0x1c, + 0x28, 0x1c, 0xf6, 0xf7, 0x9a, 0xfd, 0x02, 0x90, + 0x38, 0x78, 0x3c, 0x00, 0x6c, 0x0b, 0x01, 0x00, + 0x40, 0x19, 0x00, 0x7a, 0x01, 0x21, 0xb0, 0x73, + 0xfa, 0xf7, 0x26, 0xf9, 0x01, 0xe0, 0x00, 0x20, + 0xb0, 0x73, 0x60, 0x62, 0xb0, 0x7b, 0x0d, 0x28, + 0x01, 0xd9, 0xf0, 0xf7, 0xbb, 0xfb, 0x02, 0x98, + 0xfe, 0xbd, 0x00, 0x00, 0xff, 0xb5, 0x04, 0x1c, + 0x80, 0x30, 0x25, 0x1c, 0x5e, 0x35, 0x00, 0x78, + 0xae, 0x1d, 0xaf, 0x1f, 0x00, 0x28, 0x83, 0xb0, + 0x12, 0xd1, 0xf4, 0xf7, 0x3c, 0x00, 0xa8, 0x0b, + 0x01, 0x00, 0xc7, 0xfb, 0x00, 0x28, 0x07, 0xd0, + 0x06, 0x98, 0x05, 0x99, 0x02, 0x90, 0x04, 0x98, + 0x01, 0x90, 0xa6, 0x61, 0x67, 0x61, 0x0d, 0xe0, + 0x04, 0x98, 0x06, 0x99, 0x02, 0x90, 0x05, 0x98, + 0x01, 0x90, 0x66, 0x61, 0x05, 0xe0, 0x04, 0xa9, + 0x03, 0xc9, 0x02, 0x90, 0x06, 0x98, 0x01, 0x90, + 0x67, 0x61, 0xa5, 0x61, 0x06, 0x22, 0x38, 0x1c, + 0xef, 0xf7, 0x8b, 0xfc, 0x06, 0x22, 0x3c, 0x00, + 0xe4, 0x0b, 0x01, 0x00, 0x28, 0x1c, 0x02, 0x99, + 0xef, 0xf7, 0x86, 0xfc, 0x06, 0x22, 0x30, 0x1c, + 0x01, 0x99, 0xef, 0xf7, 0x81, 0xfc, 0x07, 0xb0, + 0xf0, 0xbd, 0x00, 0x00, 0xb0, 0xb5, 0x0d, 0x1c, + 0x04, 0x1c, 0x05, 0x28, 0x01, 0xd3, 0xf0, 0xf7, + 0x7b, 0xfb, 0x02, 0x49, 0xa0, 0x00, 0x08, 0x58, + 0x85, 0x60, 0xb0, 0xbd, 0x10, 0x7b, 0x01, 0x00, + 0xf8, 0xb5, 0xff, 0xf7, 0x59, 0xf9, 0x05, 0x1c, + 0x3c, 0x00, 0x20, 0x0c, 0x01, 0x00, 0xfe, 0xf7, + 0xe8, 0xff, 0x04, 0x1c, 0x28, 0x1c, 0xff, 0xf7, + 0x58, 0xf9, 0x00, 0x28, 0x42, 0xd0, 0x69, 0x1e, + 0x21, 0x4d, 0x4a, 0x00, 0x20, 0x4b, 0x1c, 0x3d, + 0xae, 0x5c, 0x98, 0x5c, 0x30, 0x40, 0xd6, 0x18, + 0x01, 0x23, 0xf6, 0x56, 0x52, 0x19, 0xd2, 0x56, + 0x96, 0x42, 0x01, 0xdd, 0x15, 0x1c, 0x00, 0xe0, + 0x35, 0x1c, 0x18, 0x4b, 0x2a, 0x3b, 0x59, 0x56, + 0x51, 0x18, 0x3c, 0x00, 0x5c, 0x0c, 0x01, 0x00, + 0xb1, 0x42, 0x00, 0xdb, 0x31, 0x1c, 0x0e, 0x1c, + 0x00, 0x28, 0x26, 0xd0, 0xfe, 0xf7, 0xbe, 0xff, + 0x00, 0x90, 0x00, 0xab, 0x18, 0x78, 0x12, 0x49, + 0x00, 0x23, 0xc9, 0x56, 0x00, 0xab, 0x15, 0x22, + 0x10, 0x1a, 0x5b, 0x78, 0x00, 0x1b, 0x40, 0x18, + 0xd2, 0x1a, 0x12, 0x1b, 0x51, 0x18, 0x00, 0x22, + 0x85, 0x42, 0x02, 0xdb, 0x00, 0xab, 0x1a, 0x70, + 0x02, 0xe0, 0x40, 0x1b, 0x3c, 0x00, 0x98, 0x0c, + 0x01, 0x00, 0x00, 0xab, 0x18, 0x70, 0x8e, 0x42, + 0x02, 0xdb, 0x00, 0xab, 0x5a, 0x70, 0x02, 0xe0, + 0x88, 0x1b, 0x00, 0xab, 0x58, 0x70, 0x00, 0x98, + 0xff, 0xf7, 0x8d, 0xf8, 0x01, 0xf0, 0xff, 0xf8, + 0xf8, 0xbd, 0xe6, 0x78, 0x01, 0x00, 0x65, 0x73, + 0x01, 0x00, 0x70, 0xb5, 0x08, 0x4e, 0x06, 0x4d, + 0x00, 0x24, 0x06, 0x20, 0x60, 0x43, 0x80, 0x19, + 0x06, 0x22, 0x29, 0x1c, 0xef, 0xf7, 0x3c, 0x00, + 0xd4, 0x0c, 0x01, 0x00, 0x11, 0xfc, 0x01, 0x34, + 0x05, 0x2c, 0xf5, 0xdb, 0x70, 0xbd, 0x00, 0x00, + 0x4e, 0x47, 0x01, 0x00, 0xe6, 0x7a, 0x01, 0x00, + 0x03, 0x48, 0x80, 0xb5, 0x01, 0x68, 0x03, 0x48, + 0xfe, 0xf7, 0x42, 0xfb, 0x80, 0xbd, 0x00, 0x00, + 0xa8, 0x79, 0x01, 0x00, 0xc4, 0x60, 0x01, 0x00, + 0x03, 0x48, 0x80, 0xb5, 0x01, 0x68, 0x03, 0x48, + 0xfe, 0xf7, 0x4a, 0xfb, 0x80, 0xbd, 0x00, 0x00, + 0x3c, 0x00, 0x10, 0x0d, 0x01, 0x00, 0xa8, 0x79, + 0x01, 0x00, 0xc4, 0x60, 0x01, 0x00, 0x10, 0xb5, + 0x00, 0x28, 0x0a, 0xd0, 0x06, 0x4c, 0xa1, 0x69, + 0x00, 0x29, 0x01, 0xd1, 0x00, 0x20, 0x00, 0xe0, + 0x09, 0x68, 0xf7, 0xf7, 0x38, 0xfb, 0xa0, 0x61, + 0x10, 0xbd, 0x00, 0x20, 0x10, 0xbd, 0xa4, 0x6e, + 0x01, 0x00, 0xf3, 0xb5, 0x37, 0x48, 0x83, 0xb0, + 0x02, 0x90, 0x80, 0x79, 0x0e, 0x1c, 0x00, 0x27, + 0x01, 0x90, 0x3c, 0x00, 0x4c, 0x0d, 0x01, 0x00, + 0x34, 0x48, 0x35, 0x4a, 0x01, 0x6a, 0x03, 0x9c, + 0x03, 0x1c, 0x1b, 0x69, 0xa1, 0x42, 0x01, 0xd0, + 0x93, 0x61, 0x00, 0xe0, 0x53, 0x61, 0x31, 0x49, + 0x8a, 0x68, 0x96, 0x42, 0x3f, 0xd0, 0x2d, 0x48, + 0x8e, 0x60, 0xc1, 0x68, 0x00, 0x24, 0x25, 0x1c, + 0x00, 0x29, 0x2d, 0x48, 0x09, 0xd0, 0x00, 0x2e, + 0x0b, 0xd0, 0x28, 0x48, 0x01, 0x24, 0xc0, 0x6a, + 0x24, 0x03, 0x00, 0x28, 0x3c, 0x00, 0x88, 0x0d, + 0x01, 0x00, 0x06, 0xd0, 0x01, 0x27, 0x04, 0xe0, + 0x00, 0x2e, 0x01, 0xd0, 0x05, 0x1c, 0xf9, 0xe7, + 0x04, 0x1c, 0x00, 0x2f, 0x06, 0xd0, 0xfb, 0xf7, + 0x1e, 0xfb, 0x1f, 0x48, 0x01, 0x68, 0x22, 0x48, + 0xfe, 0xf7, 0xfb, 0xfa, 0x20, 0x1c, 0x28, 0x43, + 0x0e, 0xd0, 0x2a, 0x1c, 0x21, 0x1c, 0x01, 0x20, + 0x02, 0xf0, 0x21, 0xfe, 0x2a, 0x1c, 0x21, 0x1c, + 0x02, 0x20, 0x02, 0xf0, 0x1c, 0xfe, 0x3c, 0x00, + 0xc4, 0x0d, 0x01, 0x00, 0x2a, 0x1c, 0x21, 0x1c, + 0x03, 0x20, 0x02, 0xf0, 0x17, 0xfe, 0x00, 0x2f, + 0x06, 0xd1, 0x13, 0x48, 0x01, 0x68, 0x16, 0x48, + 0xfe, 0xf7, 0xce, 0xfa, 0xfa, 0xf7, 0x42, 0xfd, + 0x03, 0x9c, 0x00, 0x2c, 0x01, 0xd1, 0x01, 0xf0, + 0xe1, 0xff, 0x01, 0xa9, 0x03, 0xc9, 0x88, 0x71, + 0x01, 0xf0, 0xdc, 0xff, 0x0a, 0x4c, 0x0a, 0x4b, + 0x44, 0x3c, 0xa1, 0x69, 0x22, 0x69, 0x08, 0x3b, + 0x3c, 0x00, 0x00, 0x0e, 0x01, 0x00, 0x41, 0x1a, + 0x00, 0x2a, 0x03, 0xd0, 0x1a, 0x68, 0x51, 0x18, + 0x19, 0x60, 0x02, 0xe0, 0x5a, 0x68, 0x51, 0x18, + 0x59, 0x60, 0xa0, 0x61, 0x26, 0x61, 0x05, 0xb0, + 0xf0, 0xbd, 0x20, 0x10, 0x07, 0x00, 0xa4, 0x6c, + 0x01, 0x00, 0x10, 0x00, 0x07, 0x00, 0xb0, 0x57, + 0x01, 0x00, 0x00, 0x10, 0x60, 0x00, 0x84, 0x73, + 0x01, 0x00, 0x1c, 0xb5, 0x4c, 0x23, 0x08, 0x49, + 0x58, 0x43, 0x3c, 0x00, 0x3c, 0x0e, 0x01, 0x00, + 0x44, 0x18, 0x20, 0x1c, 0x40, 0x30, 0x41, 0x78, + 0x62, 0x68, 0x00, 0x91, 0x01, 0x92, 0x3f, 0x21, + 0x0b, 0x5d, 0x61, 0x8f, 0x00, 0x78, 0x62, 0x6c, + 0xfa, 0xf7, 0x28, 0xf8, 0xa0, 0x85, 0x1c, 0xbd, + 0x58, 0xe3, 0x01, 0x00, 0xb0, 0xb5, 0x16, 0x4d, + 0xa9, 0x69, 0x00, 0x29, 0x25, 0xd0, 0x2c, 0x1c, + 0x30, 0x34, 0x20, 0x7a, 0x00, 0x28, 0x20, 0xd0, + 0x00, 0x23, 0x81, 0x22, 0x3c, 0x00, 0x78, 0x0e, + 0x01, 0x00, 0x18, 0x20, 0x02, 0xf0, 0x89, 0xfc, + 0x20, 0x7a, 0xff, 0x30, 0x00, 0x06, 0x00, 0x0e, + 0x20, 0x72, 0x12, 0xd1, 0x0c, 0x48, 0x28, 0x21, + 0x2c, 0x38, 0x09, 0x5c, 0x21, 0x72, 0x29, 0x7a, + 0x00, 0x29, 0x01, 0xd1, 0x00, 0x6a, 0x00, 0xe0, + 0x40, 0x6a, 0xa9, 0x69, 0x80, 0x02, 0x81, 0x42, + 0x03, 0xd2, 0x49, 0x00, 0x81, 0x42, 0x01, 0xd2, + 0xa9, 0x61, 0xb0, 0xbd, 0xa8, 0x61, 0x3c, 0x00, + 0xb4, 0x0e, 0x01, 0x00, 0xb0, 0xbd, 0x01, 0xf0, + 0x1d, 0xf9, 0xb0, 0xbd, 0xf4, 0x6e, 0x01, 0x00, + 0x7f, 0xb5, 0x05, 0x1c, 0x04, 0x20, 0x6b, 0x46, + 0x1b, 0x18, 0x02, 0x90, 0x00, 0x26, 0x28, 0x18, + 0x6a, 0x46, 0x02, 0xa9, 0xfc, 0xf7, 0x8a, 0xfb, + 0x00, 0x28, 0x06, 0xd1, 0x00, 0xab, 0x18, 0x79, + 0x04, 0x28, 0x08, 0xd0, 0x18, 0x79, 0x03, 0x28, + 0x05, 0xd0, 0x00, 0xab, 0x18, 0x79, 0x10, 0x21, + 0x3c, 0x00, 0xf0, 0x0e, 0x01, 0x00, 0x08, 0x43, + 0x04, 0xb0, 0x70, 0xbd, 0x03, 0xa9, 0xe8, 0x68, + 0xf6, 0xf7, 0xd3, 0xff, 0x00, 0x28, 0x05, 0xd0, + 0x03, 0x98, 0x20, 0x21, 0x08, 0x43, 0x00, 0x06, + 0x00, 0x0e, 0xf1, 0xe7, 0x03, 0xa9, 0x00, 0x20, + 0xf6, 0xf7, 0xc7, 0xff, 0x04, 0x1c, 0x01, 0xd1, + 0x02, 0x20, 0xe9, 0xe7, 0xe8, 0x68, 0x00, 0xab, + 0x20, 0x60, 0x00, 0x98, 0x60, 0x60, 0x18, 0x79, + 0xa0, 0x76, 0x3c, 0x00, 0x2c, 0x0f, 0x01, 0x00, + 0xa8, 0x8c, 0x60, 0x76, 0xe8, 0x69, 0x20, 0x61, + 0x68, 0x8c, 0xa0, 0x82, 0x28, 0x8c, 0x20, 0x76, + 0x69, 0x69, 0x09, 0x48, 0x81, 0x42, 0x00, 0xd9, + 0x08, 0x1c, 0xa0, 0x60, 0x20, 0x1c, 0x02, 0xf0, + 0xa1, 0xfd, 0xa1, 0x68, 0x00, 0x29, 0x04, 0xd0, + 0x03, 0x9a, 0xa1, 0x32, 0x08, 0x20, 0x02, 0xf0, + 0x37, 0xfb, 0x30, 0x1c, 0xc7, 0xe7, 0x00, 0x00, + 0xa0, 0x86, 0x01, 0x00, 0x3c, 0x00, 0x68, 0x0f, + 0x01, 0x00, 0xfe, 0xb5, 0x06, 0x1c, 0x40, 0x78, + 0x01, 0x24, 0x06, 0x28, 0x50, 0xd3, 0xc1, 0x1e, + 0x03, 0x20, 0xef, 0xf7, 0x5e, 0xfb, 0x00, 0x90, + 0x0e, 0x28, 0x49, 0xd8, 0x00, 0x20, 0x0a, 0xe0, + 0x41, 0x00, 0x09, 0x18, 0x89, 0x19, 0x4a, 0x79, + 0x89, 0x79, 0x51, 0x18, 0x01, 0x39, 0x0e, 0x29, + 0x00, 0xd9, 0x00, 0x24, 0x01, 0x30, 0x00, 0x99, + 0x88, 0x42, 0xf1, 0xdb, 0x00, 0x2c, 0x3c, 0x00, + 0xa4, 0x0f, 0x01, 0x00, 0x37, 0xd0, 0x03, 0x22, + 0xb1, 0x1c, 0x1b, 0x48, 0xef, 0xf7, 0xa4, 0xfa, + 0x1a, 0x4c, 0x1c, 0x21, 0x20, 0x1c, 0xef, 0xf7, + 0x4d, 0xfa, 0x00, 0x25, 0x28, 0xe0, 0x69, 0x00, + 0x49, 0x19, 0x02, 0x91, 0x8a, 0x19, 0x53, 0x79, + 0x15, 0x48, 0x43, 0x54, 0x93, 0x79, 0x0f, 0x18, + 0x7b, 0x70, 0xd3, 0x79, 0xbb, 0x70, 0x07, 0x23, + 0xd2, 0x56, 0x01, 0x92, 0x44, 0x5c, 0x0f, 0xe0, + 0x3c, 0x00, 0xe0, 0x0f, 0x01, 0x00, 0x20, 0x1c, + 0xfe, 0xf7, 0x7b, 0xff, 0x00, 0x28, 0x07, 0xd0, + 0x0c, 0x4a, 0x60, 0x00, 0x80, 0x18, 0x01, 0x21, + 0x10, 0x38, 0x81, 0x73, 0x01, 0x99, 0xc1, 0x73, + 0x01, 0x34, 0x24, 0x06, 0x24, 0x0e, 0x07, 0x48, + 0x02, 0x99, 0x40, 0x5c, 0x79, 0x78, 0x40, 0x18, + 0xa0, 0x42, 0xe8, 0xd8, 0x01, 0x35, 0x00, 0x98, + 0x85, 0x42, 0xd3, 0xdb, 0xfe, 0xbd, 0xe8, 0x62, + 0x01, 0x00, 0x3c, 0x00, 0x1c, 0x10, 0x01, 0x00, + 0xe6, 0x78, 0x01, 0x00, 0xeb, 0x62, 0x01, 0x00, + 0x01, 0x68, 0x0f, 0x29, 0x01, 0xdd, 0x0f, 0x21, + 0x01, 0x60, 0x01, 0x68, 0x00, 0x29, 0x01, 0xda, + 0x00, 0x21, 0x01, 0x60, 0x70, 0x47, 0x00, 0x00, + 0xf8, 0xb5, 0x04, 0x1c, 0x1e, 0x48, 0x22, 0x1d, + 0x05, 0x68, 0x00, 0x92, 0x16, 0x1c, 0x23, 0x1c, + 0x0f, 0x1c, 0xcc, 0x33, 0x2a, 0x1c, 0x20, 0x1c, + 0x70, 0x30, 0xa1, 0x6d, 0x3c, 0x00, 0x58, 0x10, + 0x01, 0x00, 0x00, 0xf0, 0x3e, 0xf9, 0x00, 0x96, + 0xa1, 0x6d, 0x27, 0x20, 0x01, 0x40, 0x23, 0x1c, + 0xe4, 0x33, 0x20, 0x1c, 0x2a, 0x1c, 0x5c, 0x30, + 0x00, 0xf0, 0x33, 0xf9, 0x13, 0x48, 0x00, 0x78, + 0x0e, 0x28, 0x01, 0xd2, 0x01, 0x25, 0x85, 0x40, + 0x11, 0x48, 0xa1, 0x69, 0x00, 0x78, 0x29, 0x40, + 0x00, 0x07, 0x0b, 0xd4, 0x48, 0x07, 0x03, 0xd5, + 0x08, 0x07, 0x01, 0xd5, 0x04, 0x20, 0x3c, 0x00, + 0x94, 0x10, 0x01, 0x00, 0x81, 0x43, 0x88, 0x06, + 0x03, 0xd5, 0x48, 0x06, 0x01, 0xd5, 0x20, 0x20, + 0x81, 0x43, 0x23, 0x1c, 0xb4, 0x33, 0x2a, 0x1c, + 0x20, 0x1c, 0x30, 0x30, 0x00, 0x96, 0x00, 0xf0, + 0x13, 0xf9, 0x39, 0x1c, 0x20, 0x1c, 0xf0, 0xf7, + 0x47, 0xfc, 0xf8, 0xbd, 0x2c, 0x7d, 0x01, 0x00, + 0x10, 0x67, 0x01, 0x00, 0x1d, 0x75, 0x01, 0x00, + 0xb0, 0xb5, 0xf2, 0xf7, 0x27, 0xfc, 0xfe, 0xf7, + 0x3c, 0x00, 0xd0, 0x10, 0x01, 0x00, 0x09, 0xf9, + 0x0f, 0x48, 0x00, 0x25, 0x45, 0x70, 0x0e, 0x48, + 0x0d, 0x4c, 0x00, 0x88, 0x5b, 0x34, 0xa0, 0x82, + 0xf9, 0xf7, 0x23, 0xfd, 0x20, 0x61, 0xa0, 0x8a, + 0x00, 0x28, 0x04, 0xd0, 0x01, 0x21, 0x89, 0x05, + 0xef, 0xf7, 0x0d, 0xfb, 0xe1, 0x82, 0x05, 0x48, + 0x01, 0x38, 0x45, 0x60, 0x01, 0xf0, 0x55, 0xfe, + 0x02, 0x1c, 0x23, 0x1c, 0x00, 0x21, 0x00, 0x20, + 0xf4, 0xf7, 0x3c, 0x00, 0x0c, 0x11, 0x01, 0x00, + 0x49, 0xfd, 0xb0, 0xbd, 0x45, 0x7d, 0x01, 0x00, + 0xf4, 0x67, 0x01, 0x00, 0x70, 0xb5, 0x16, 0x1c, + 0x5a, 0x89, 0x04, 0x1c, 0x04, 0x98, 0x92, 0x07, + 0x92, 0x0f, 0x00, 0x25, 0x00, 0x29, 0xa2, 0x71, + 0x09, 0xd0, 0x05, 0x21, 0xf9, 0xf7, 0x24, 0xfb, + 0x00, 0x28, 0x01, 0xd0, 0xc0, 0x78, 0x00, 0xe0, + 0x01, 0x20, 0xe0, 0x71, 0x00, 0xe0, 0xe5, 0x71, + 0xe5, 0x60, 0xa6, 0x60, 0x3c, 0x00, 0x48, 0x11, + 0x01, 0x00, 0x70, 0xbd, 0x00, 0x00, 0xfe, 0xb5, + 0x05, 0x1c, 0x0e, 0x22, 0x9c, 0x30, 0x16, 0x49, + 0xef, 0xf7, 0xcf, 0xf9, 0x29, 0x1c, 0x28, 0x1c, + 0x80, 0x30, 0x88, 0x31, 0x00, 0x24, 0x2f, 0x1c, + 0x60, 0x37, 0x02, 0x91, 0x01, 0x90, 0x20, 0x06, + 0x00, 0x0e, 0x06, 0x1c, 0xf9, 0xf7, 0x0d, 0xfe, + 0x00, 0x28, 0x03, 0xd0, 0x01, 0x98, 0x42, 0x68, + 0x02, 0x99, 0x01, 0xe0, 0xea, 0x6d, 0x3c, 0x00, + 0x84, 0x11, 0x01, 0x00, 0x39, 0x1c, 0x00, 0x2a, + 0x0d, 0xd0, 0x00, 0x20, 0x03, 0xe0, 0x0b, 0x5c, + 0xb3, 0x42, 0x02, 0xd8, 0x01, 0x30, 0x90, 0x42, + 0xf9, 0xdb, 0x08, 0x18, 0x10, 0x38, 0xc0, 0x7b, + 0x29, 0x19, 0x90, 0x31, 0x08, 0x73, 0x01, 0x34, + 0x0e, 0x2c, 0xdf, 0xd3, 0xfe, 0xbd, 0x00, 0x00, + 0xcc, 0x47, 0x01, 0x00, 0xff, 0xb5, 0x81, 0xb0, + 0x14, 0x1c, 0x10, 0x1c, 0x06, 0x22, 0x0d, 0x1c, + 0x3c, 0x00, 0xc0, 0x11, 0x01, 0x00, 0x19, 0x1c, + 0x0b, 0x9e, 0x0a, 0x9f, 0xef, 0xf7, 0x97, 0xf9, + 0x06, 0x22, 0x39, 0x1c, 0xa0, 0x18, 0xef, 0xf7, + 0x92, 0xf9, 0xe6, 0x60, 0x2c, 0x60, 0x10, 0x20, + 0x28, 0x81, 0x6e, 0x60, 0x01, 0x98, 0xe8, 0x60, + 0x05, 0xb0, 0xf0, 0xbd, 0x00, 0x00, 0x70, 0xb5, + 0x04, 0x1c, 0x00, 0x20, 0x20, 0x61, 0x58, 0x20, + 0x00, 0x5d, 0x0e, 0x1c, 0x15, 0x1c, 0xc0, 0x07, + 0xc0, 0x17, 0x3c, 0x00, 0xfc, 0x11, 0x01, 0x00, + 0x01, 0x30, 0xe0, 0x61, 0x21, 0x6b, 0x00, 0x29, + 0x36, 0xd1, 0x1e, 0x49, 0x09, 0x68, 0x29, 0x43, + 0x32, 0xd0, 0xa1, 0x68, 0x89, 0x8a, 0x00, 0x29, + 0x2e, 0xd0, 0x00, 0x28, 0x0b, 0xd0, 0x20, 0x1c, + 0x58, 0x30, 0x00, 0xf0, 0xf3, 0xfd, 0x00, 0x28, + 0x1b, 0xd0, 0x81, 0x6a, 0x02, 0x6a, 0x40, 0x6a, + 0x09, 0x78, 0x00, 0x78, 0x06, 0xe0, 0x14, 0x4a, + 0x3c, 0x23, 0x11, 0x78, 0x3c, 0x00, 0x38, 0x12, + 0x01, 0x00, 0x50, 0x78, 0x43, 0x43, 0x9a, 0x18, + 0x04, 0x32, 0x00, 0x2d, 0x03, 0xd1, 0x02, 0x29, + 0x01, 0xd0, 0x03, 0x29, 0x02, 0xd1, 0x6d, 0x21, + 0x22, 0x61, 0x08, 0x55, 0x20, 0x69, 0x00, 0x28, + 0x0d, 0xd0, 0x81, 0x88, 0x00, 0x29, 0x01, 0xd1, + 0x01, 0x20, 0x70, 0xbd, 0x80, 0x79, 0x02, 0x28, + 0x05, 0xd1, 0x22, 0x1c, 0x07, 0x49, 0x07, 0x48, + 0xf8, 0xf7, 0x4b, 0xff, 0x02, 0xe0, 0x3c, 0x00, + 0x74, 0x12, 0x01, 0x00, 0x20, 0x1c, 0xef, 0xf7, + 0xb5, 0xf8, 0x00, 0x20, 0x70, 0xbd, 0x00, 0x00, + 0x28, 0x61, 0x01, 0x00, 0x68, 0x61, 0x01, 0x00, + 0xa1, 0xda, 0x00, 0x00, 0xa0, 0x6a, 0x01, 0x00, + 0x10, 0xb5, 0x00, 0x21, 0x00, 0x20, 0xf9, 0xf7, + 0x39, 0xfe, 0xc4, 0x00, 0xf9, 0xf7, 0x54, 0xfe, + 0x24, 0x18, 0xf9, 0xf7, 0x47, 0xfe, 0x08, 0x49, + 0x20, 0x18, 0x09, 0x88, 0x08, 0x4c, 0x40, 0x18, + 0x3c, 0x00, 0xb0, 0x12, 0x01, 0x00, 0x06, 0x49, + 0x09, 0x88, 0x40, 0x18, 0x60, 0x61, 0xf9, 0xf7, + 0x46, 0xfe, 0x05, 0x49, 0x09, 0x88, 0x40, 0x18, + 0x40, 0x00, 0xa0, 0x61, 0x10, 0xbd, 0x02, 0x61, + 0x01, 0x00, 0x04, 0x61, 0x01, 0x00, 0xd4, 0x79, + 0x01, 0x00, 0xa6, 0x69, 0x01, 0x00, 0x11, 0x40, + 0x08, 0x1c, 0x10, 0xb5, 0x1c, 0x1c, 0x19, 0x1c, + 0x08, 0x31, 0x18, 0x60, 0xf1, 0xf7, 0x31, 0xfe, + 0x60, 0x60, 0x3c, 0x00, 0xec, 0x12, 0x01, 0x00, + 0x10, 0xbd, 0x00, 0x00, 0xf8, 0xb5, 0x06, 0x1c, + 0x22, 0x48, 0x0f, 0x1c, 0x41, 0x68, 0x91, 0x42, + 0x03, 0xd0, 0x00, 0x21, 0x81, 0x60, 0xc1, 0x60, + 0x42, 0x60, 0xc4, 0x68, 0x15, 0xe0, 0x28, 0x20, + 0x1d, 0x49, 0x60, 0x43, 0x40, 0x18, 0x05, 0x1c, + 0x06, 0x22, 0x31, 0x1c, 0xef, 0xf7, 0x70, 0xf8, + 0x00, 0x28, 0x07, 0xd1, 0xa8, 0x1d, 0x39, 0x1c, + 0xf9, 0xf7, 0x10, 0xfd, 0x3c, 0x00, 0x28, 0x13, + 0x01, 0x00, 0x00, 0x28, 0x01, 0xd0, 0x01, 0x20, + 0xf8, 0xbd, 0x01, 0x34, 0x24, 0x07, 0x24, 0x0f, + 0x12, 0x48, 0x80, 0x68, 0x84, 0x42, 0xe5, 0xd1, + 0x10, 0x4c, 0x28, 0x23, 0xa0, 0x68, 0x0f, 0x4d, + 0x58, 0x43, 0x40, 0x19, 0x06, 0x22, 0x31, 0x1c, + 0xef, 0xf7, 0xd3, 0xf8, 0xa0, 0x68, 0x28, 0x23, + 0x58, 0x43, 0x40, 0x19, 0x06, 0x30, 0x22, 0x22, + 0x39, 0x1c, 0xef, 0xf7, 0xca, 0xf8, 0x3c, 0x00, + 0x64, 0x13, 0x01, 0x00, 0xa0, 0x68, 0x01, 0x30, + 0x00, 0x07, 0x00, 0x0f, 0xa0, 0x60, 0xe1, 0x68, + 0x81, 0x42, 0x03, 0xd1, 0x01, 0x31, 0x08, 0x07, + 0x00, 0x0f, 0xe0, 0x60, 0x00, 0x20, 0xd6, 0xe7, + 0xec, 0x65, 0x01, 0x00, 0xa0, 0xf4, 0x01, 0x00, + 0x10, 0xb5, 0x00, 0x21, 0x03, 0x20, 0x00, 0xf0, + 0xe5, 0xff, 0x05, 0x4c, 0xa0, 0x68, 0x00, 0x28, + 0x04, 0xd1, 0x01, 0xf0, 0x07, 0xfd, 0x61, 0x68, + 0x3c, 0x00, 0xa0, 0x13, 0x01, 0x00, 0x40, 0x1a, + 0x60, 0x60, 0x10, 0xbd, 0x00, 0x00, 0xd0, 0x60, + 0x01, 0x00, 0x02, 0x68, 0x0a, 0x60, 0x01, 0x60, + 0x70, 0x47, 0x01, 0x1c, 0x00, 0x68, 0x00, 0x28, + 0x01, 0xd0, 0x02, 0x68, 0x0a, 0x60, 0x70, 0x47, + 0x00, 0x00, 0xfe, 0xb5, 0x14, 0x1c, 0x1d, 0x1c, + 0x00, 0x22, 0xd2, 0x43, 0x01, 0xab, 0xf3, 0xf7, + 0x82, 0xff, 0x01, 0x98, 0x00, 0x26, 0x28, 0x40, + 0x01, 0x90, 0x3c, 0x00, 0xdc, 0x13, 0x01, 0x00, + 0x00, 0x25, 0x00, 0x27, 0x20, 0x60, 0x1e, 0xe0, + 0x01, 0x21, 0xb9, 0x40, 0x0a, 0x1c, 0x02, 0x40, + 0x18, 0xd0, 0x88, 0x43, 0x01, 0x90, 0x39, 0x06, + 0x09, 0x0e, 0x70, 0x19, 0x00, 0x19, 0x02, 0x91, + 0x01, 0x77, 0x08, 0x1c, 0xf9, 0xf7, 0xc6, 0xfc, + 0x00, 0x28, 0x06, 0xd0, 0x30, 0x1c, 0x00, 0x19, + 0x01, 0x36, 0x02, 0x99, 0x30, 0x30, 0x01, 0x70, + 0x04, 0xe0, 0x28, 0x1c, 0x3c, 0x00, 0x18, 0x14, + 0x01, 0x00, 0x01, 0x35, 0x02, 0x99, 0x00, 0x19, + 0x01, 0x72, 0x01, 0x37, 0x01, 0x98, 0x00, 0x28, + 0xdd, 0xd1, 0x70, 0x19, 0xa0, 0x61, 0x65, 0x60, + 0xe6, 0x62, 0xfe, 0xbd, 0x00, 0x00, 0xb0, 0xb5, + 0x14, 0x4d, 0x04, 0x1c, 0x28, 0x7a, 0x01, 0x28, + 0x02, 0xd1, 0x04, 0x20, 0xf6, 0xf7, 0xad, 0xf9, + 0x21, 0x1c, 0xa8, 0x6a, 0xf5, 0xf7, 0x21, 0xfc, + 0x00, 0x28, 0x03, 0xd1, 0x04, 0x20, 0x3c, 0x00, + 0x54, 0x14, 0x01, 0x00, 0xf6, 0xf7, 0xa4, 0xf9, + 0xb0, 0xbd, 0x02, 0x20, 0x28, 0x70, 0x28, 0x8c, + 0x00, 0x28, 0x00, 0xd0, 0x60, 0x81, 0x68, 0x8c, + 0x00, 0x28, 0x00, 0xd0, 0xa0, 0x81, 0xa8, 0x8c, + 0x00, 0x28, 0x00, 0xd0, 0xe0, 0x81, 0xe8, 0x69, + 0x01, 0x23, 0x02, 0x04, 0x12, 0x0c, 0x20, 0x1c, + 0x02, 0x49, 0xfc, 0xf7, 0x19, 0xff, 0xb0, 0xbd, + 0xf4, 0x6e, 0x01, 0x00, 0xa1, 0x77, 0x00, 0x00, + 0x3c, 0x00, 0x90, 0x14, 0x01, 0x00, 0xf8, 0xb5, + 0x19, 0x4e, 0x05, 0x1c, 0xb0, 0x69, 0x00, 0x28, + 0x00, 0xd1, 0x30, 0x68, 0xff, 0xf7, 0x3b, 0xfc, + 0x15, 0x4f, 0x04, 0x1c, 0x50, 0x37, 0x00, 0x28, + 0x0b, 0xd0, 0x60, 0x68, 0x29, 0x1c, 0x78, 0x60, + 0x01, 0x20, 0x38, 0x63, 0x20, 0x1c, 0xf5, 0xf7, + 0xea, 0xfb, 0x00, 0x28, 0x04, 0xd1, 0x00, 0x20, + 0xf8, 0xbd, 0x00, 0x23, 0xfb, 0x62, 0xfa, 0xe7, + 0x00, 0x23, 0x3c, 0x00, 0xcc, 0x14, 0x01, 0x00, + 0x23, 0x77, 0xf8, 0x6a, 0x00, 0x28, 0x01, 0xd1, + 0x01, 0x20, 0xf8, 0x62, 0x38, 0x7a, 0x01, 0x28, + 0x07, 0xd0, 0xf8, 0x69, 0x06, 0x49, 0x02, 0x04, + 0x12, 0x0c, 0x28, 0x1c, 0xfc, 0xf7, 0xe6, 0xfe, + 0x01, 0xe0, 0xfb, 0x62, 0xb3, 0x61, 0x01, 0x20, + 0xe5, 0xe7, 0x00, 0x00, 0xa4, 0x6e, 0x01, 0x00, + 0xdd, 0x02, 0x01, 0x00, 0x70, 0xb5, 0x0d, 0x1c, + 0x04, 0x1c, 0x16, 0x1c, 0x3c, 0x00, 0x08, 0x15, + 0x01, 0x00, 0x04, 0x2c, 0x1b, 0xd2, 0x10, 0x48, + 0x83, 0x42, 0x07, 0xd2, 0x58, 0x00, 0x0f, 0x49, + 0xef, 0xf7, 0xfb, 0xf8, 0xff, 0x30, 0x00, 0x0a, + 0x01, 0x38, 0x00, 0xe0, 0x00, 0x20, 0x1f, 0x35, + 0xea, 0x06, 0x61, 0x07, 0x09, 0x0e, 0xd2, 0x0e, + 0x11, 0x43, 0x72, 0x07, 0x52, 0x0d, 0x11, 0x43, + 0x00, 0x06, 0x00, 0x0a, 0x08, 0x43, 0x06, 0x4a, + 0xa1, 0x00, 0x50, 0x50, 0x70, 0xbd, 0x3c, 0x00, + 0x44, 0x15, 0x01, 0x00, 0x01, 0x21, 0x8d, 0x20, + 0xef, 0xf7, 0xac, 0xfe, 0x70, 0xbd, 0x00, 0x00, + 0x40, 0x9c, 0x00, 0x00, 0x00, 0x80, 0x38, 0x01, + 0xe8, 0x60, 0x01, 0x00, 0x09, 0x4a, 0x80, 0x00, + 0x10, 0x58, 0x40, 0x09, 0x40, 0x01, 0x07, 0x22, + 0x02, 0x43, 0x07, 0x48, 0x03, 0x68, 0x00, 0x2b, + 0xfc, 0xdb, 0x42, 0x60, 0x09, 0x06, 0x01, 0x60, + 0x01, 0x68, 0x00, 0x29, 0xfc, 0xdb, 0x08, 0x20, + 0x3c, 0x00, 0x80, 0x15, 0x01, 0x00, 0x70, 0x47, + 0x00, 0x00, 0xe8, 0x60, 0x01, 0x00, 0x30, 0x20, + 0x07, 0x00, 0xb0, 0xb5, 0x04, 0x1c, 0x0d, 0x1c, + 0x07, 0x49, 0xa0, 0x00, 0x08, 0x58, 0x00, 0x28, + 0x03, 0xd1, 0x02, 0x21, 0x8d, 0x20, 0xef, 0xf7, + 0x80, 0xfe, 0x29, 0x1c, 0x20, 0x1c, 0xf6, 0xf7, + 0xa8, 0xfa, 0xb0, 0xbd, 0x00, 0x00, 0xe8, 0x60, + 0x01, 0x00, 0xb0, 0xb5, 0x04, 0x1c, 0x0d, 0x1c, + 0x07, 0x49, 0x3c, 0x00, 0xbc, 0x15, 0x01, 0x00, + 0xa0, 0x00, 0x08, 0x58, 0x00, 0x28, 0x03, 0xd1, + 0x02, 0x21, 0x8d, 0x20, 0xef, 0xf7, 0x6c, 0xfe, + 0x29, 0x1c, 0x20, 0x1c, 0xff, 0xf7, 0xc4, 0xff, + 0xb0, 0xbd, 0x00, 0x00, 0xe8, 0x60, 0x01, 0x00, + 0xf8, 0xb5, 0x0d, 0x1c, 0x16, 0x1c, 0xf7, 0xf7, + 0x17, 0xf9, 0x04, 0x1c, 0x28, 0x68, 0x40, 0x4f, + 0x81, 0x78, 0x00, 0x29, 0x3b, 0xd1, 0xc1, 0x78, + 0x00, 0x29, 0x58, 0xd1, 0x3c, 0x00, 0xf8, 0x15, + 0x01, 0x00, 0xf8, 0xf7, 0xf8, 0xf9, 0x22, 0x8e, + 0x61, 0x8e, 0x8a, 0x42, 0x04, 0xd0, 0xa1, 0x6a, + 0x09, 0x18, 0xe0, 0x69, 0x81, 0x42, 0x10, 0xd9, + 0x38, 0x49, 0x32, 0x1c, 0x48, 0x6b, 0x01, 0x30, + 0x48, 0x63, 0x20, 0x6a, 0x01, 0x30, 0x20, 0x62, + 0x38, 0x68, 0x01, 0x30, 0x38, 0x60, 0xe0, 0x68, + 0x63, 0x69, 0x29, 0x1c, 0xee, 0xf7, 0xd8, 0xfe, + 0xf8, 0xbd, 0x01, 0x32, 0x12, 0x04, 0x3c, 0x00, + 0x34, 0x16, 0x01, 0x00, 0x12, 0x0c, 0x22, 0x86, + 0xa1, 0x62, 0xb8, 0x68, 0x00, 0x28, 0x34, 0xd1, + 0x2c, 0x48, 0x0c, 0x23, 0x00, 0x68, 0x1b, 0x1a, + 0x9a, 0x42, 0x07, 0xd2, 0x19, 0x23, 0x9b, 0x01, + 0xaf, 0x22, 0x92, 0x01, 0x58, 0x43, 0x10, 0x1a, + 0x81, 0x42, 0x26, 0xd3, 0x01, 0x20, 0xb8, 0x60, + 0x01, 0x21, 0x0c, 0x20, 0x00, 0xf0, 0x7a, 0xfe, + 0x1f, 0xe0, 0x01, 0x29, 0x1d, 0xd1, 0xc0, 0x78, + 0x3c, 0x00, 0x70, 0x16, 0x01, 0x00, 0x17, 0x28, + 0x1a, 0xd1, 0xa0, 0x8e, 0xe1, 0x8e, 0x88, 0x42, + 0x14, 0xd3, 0xe9, 0x68, 0x09, 0x68, 0x09, 0x79, + 0x09, 0x06, 0x0f, 0xd5, 0x60, 0x6a, 0x32, 0x1c, + 0x01, 0x30, 0x60, 0x62, 0xe0, 0x68, 0x63, 0x69, + 0x29, 0x1c, 0xee, 0xf7, 0xa3, 0xfe, 0xe8, 0x68, + 0x01, 0x68, 0x08, 0x31, 0x0b, 0x20, 0x00, 0xf0, + 0x5c, 0xfe, 0xc3, 0xe7, 0x01, 0x30, 0xa0, 0x86, + 0xa0, 0x8d, 0x3c, 0x00, 0xac, 0x16, 0x01, 0x00, + 0xe1, 0x8d, 0x88, 0x42, 0x04, 0xd1, 0x03, 0x21, + 0x02, 0x20, 0xef, 0xf7, 0xf5, 0xfd, 0xb8, 0xe7, + 0x60, 0x68, 0x45, 0x60, 0x86, 0x60, 0x00, 0x68, + 0x60, 0x60, 0xf8, 0x68, 0x01, 0x30, 0xf8, 0x60, + 0xa0, 0x8d, 0x41, 0x1c, 0xa1, 0x85, 0x00, 0x28, + 0xab, 0xd1, 0x08, 0x48, 0xb9, 0x69, 0xfd, 0xf7, + 0x61, 0xfe, 0x22, 0x1c, 0x02, 0x21, 0xf1, 0x20, + 0x02, 0xf0, 0x64, 0xf8, 0x3c, 0x00, 0xe8, 0x16, + 0x01, 0x00, 0xa1, 0xe7, 0x00, 0x00, 0xfc, 0x5a, + 0x01, 0x00, 0x90, 0x5c, 0x01, 0x00, 0x18, 0x57, + 0x01, 0x00, 0xc4, 0x60, 0x01, 0x00, 0x80, 0xb5, + 0x02, 0x1c, 0x02, 0x21, 0xf0, 0x20, 0x02, 0xf0, + 0x54, 0xf8, 0x80, 0xbd, 0x00, 0x00, 0x00, 0x28, + 0x03, 0xd1, 0x02, 0x48, 0x41, 0x78, 0xc9, 0x07, + 0xfc, 0xd5, 0x70, 0x47, 0x00, 0x00, 0x04, 0x00, + 0x07, 0x00, 0x80, 0xb5, 0x00, 0x06, 0x3c, 0x00, + 0x24, 0x17, 0x01, 0x00, 0x01, 0xd1, 0xf1, 0xf7, + 0x71, 0xfe, 0x80, 0xbd, 0x80, 0xb5, 0xf4, 0xf7, + 0xe5, 0xfa, 0x80, 0xbd, 0x80, 0xb5, 0xf6, 0xf7, + 0xeb, 0xf8, 0x80, 0xbd, 0x01, 0x49, 0x00, 0x20, + 0x08, 0x74, 0x70, 0x47, 0x78, 0x69, 0x01, 0x00, + 0x80, 0xb5, 0xc0, 0x07, 0x03, 0xd5, 0x02, 0x49, + 0x01, 0x20, 0x00, 0xf0, 0x1d, 0xfc, 0x80, 0xbd, + 0x50, 0xc3, 0x00, 0x00, 0x00, 0x06, 0x00, 0x0e, + 0x3c, 0x00, 0x60, 0x17, 0x01, 0x00, 0x01, 0x28, + 0x80, 0xb5, 0x02, 0xd1, 0xf6, 0xf7, 0xe1, 0xf9, + 0x80, 0xbd, 0x00, 0x28, 0xfc, 0xd1, 0xf1, 0xf7, + 0x4c, 0xfe, 0x80, 0xbd, 0x00, 0x00, 0x80, 0xb5, + 0xf6, 0xf7, 0xd7, 0xf9, 0x80, 0xbd, 0x03, 0x49, + 0x80, 0xb5, 0x00, 0x20, 0x08, 0x74, 0xf6, 0xf7, + 0xfe, 0xf9, 0x80, 0xbd, 0x00, 0x00, 0x78, 0x69, + 0x01, 0x00, 0x80, 0xb5, 0x00, 0x06, 0x00, 0x0e, + 0xf1, 0xf7, 0x3c, 0x00, 0x9c, 0x17, 0x01, 0x00, + 0x71, 0xfe, 0x80, 0xbd, 0x10, 0xb5, 0x01, 0x28, + 0x08, 0xd0, 0x02, 0x28, 0x03, 0xd0, 0x03, 0x28, + 0x01, 0xd0, 0xef, 0xf7, 0xa7, 0xfd, 0xf6, 0xf7, + 0xe9, 0xf9, 0x10, 0xbd, 0x01, 0xf0, 0xf8, 0xfa, + 0x04, 0x1c, 0xfa, 0xf7, 0x5d, 0xfd, 0x24, 0x1a, + 0xfa, 0xf7, 0x3e, 0xfd, 0x08, 0x49, 0x00, 0x28, + 0x0b, 0xd0, 0x48, 0x6a, 0x00, 0x28, 0x08, 0xd0, + 0x06, 0x48, 0x84, 0x42, 0x3c, 0x00, 0xd8, 0x17, + 0x01, 0x00, 0x05, 0xd2, 0x01, 0x1b, 0x01, 0x22, + 0x07, 0x20, 0x01, 0xf0, 0xf4, 0xfe, 0xe5, 0xe7, + 0x00, 0x20, 0x48, 0x61, 0xe2, 0xe7, 0x78, 0x69, + 0x01, 0x00, 0x50, 0xc3, 0x00, 0x00, 0x09, 0x49, + 0x80, 0xb5, 0x48, 0x69, 0x00, 0x28, 0x0c, 0xd0, + 0x08, 0x6a, 0xca, 0x69, 0x80, 0x1a, 0x00, 0x28, + 0x07, 0xdd, 0x00, 0x20, 0x48, 0x61, 0x01, 0x21, + 0x07, 0x20, 0x01, 0xf0, 0x10, 0xff, 0x3c, 0x00, + 0x14, 0x18, 0x01, 0x00, 0xf6, 0xf7, 0xb8, 0xf9, + 0x80, 0xbd, 0x00, 0x00, 0x78, 0x69, 0x01, 0x00, + 0x80, 0xb5, 0x00, 0xf0, 0xe7, 0xfb, 0x80, 0xbd, + 0x80, 0xb5, 0x00, 0xf0, 0x3f, 0xfc, 0x00, 0x20, + 0xf7, 0xf7, 0xd4, 0xfc, 0x80, 0xbd, 0x00, 0x00, + 0x80, 0xb5, 0x00, 0xf0, 0x37, 0xfc, 0xfd, 0xf7, + 0x6f, 0xfc, 0xf5, 0xf7, 0x73, 0xfd, 0x30, 0xf0, + 0x47, 0xfb, 0x80, 0xbd, 0x04, 0x48, 0x80, 0xb5, + 0x3c, 0x00, 0x50, 0x18, 0x01, 0x00, 0xc1, 0x6a, + 0x00, 0x6b, 0xf2, 0xf7, 0xde, 0xff, 0x01, 0x20, + 0xf7, 0xf7, 0x89, 0xf8, 0x80, 0xbd, 0xa4, 0x6c, + 0x01, 0x00, 0x10, 0xb5, 0xf3, 0xf7, 0x41, 0xf8, + 0x0d, 0x4c, 0x00, 0x28, 0x04, 0xd0, 0x01, 0x20, + 0xe0, 0x64, 0xf7, 0xf7, 0xb2, 0xfc, 0x10, 0xbd, + 0x01, 0x21, 0x01, 0x20, 0xf3, 0xf7, 0xe9, 0xf8, + 0xfd, 0xf7, 0x4d, 0xfc, 0x60, 0x6d, 0x00, 0x28, + 0x03, 0xd0, 0x3c, 0x00, 0x8c, 0x18, 0x01, 0x00, + 0xf3, 0xf7, 0x82, 0xf8, 0x00, 0x28, 0x01, 0xd0, + 0xf5, 0xf7, 0x4a, 0xfd, 0x01, 0x20, 0xf2, 0xf7, + 0xc1, 0xfc, 0x10, 0xbd, 0xa4, 0x6c, 0x01, 0x00, + 0x04, 0x48, 0x80, 0xb5, 0xc1, 0x6a, 0x00, 0x6b, + 0xf2, 0xf7, 0xb2, 0xff, 0x01, 0x20, 0xf7, 0xf7, + 0x5d, 0xf8, 0x80, 0xbd, 0xa4, 0x6c, 0x01, 0x00, + 0x80, 0xb5, 0x00, 0xf0, 0xf5, 0xfb, 0xf5, 0xf7, + 0x33, 0xfd, 0xfc, 0xf7, 0x3c, 0x00, 0xc8, 0x18, + 0x01, 0x00, 0x31, 0xfd, 0xf9, 0xf7, 0xcb, 0xff, + 0x04, 0x20, 0xf2, 0xf7, 0xa6, 0xfc, 0x80, 0xbd, + 0x00, 0x00, 0x03, 0x48, 0x80, 0xb5, 0xc1, 0x6a, + 0x00, 0x6b, 0xf2, 0xf7, 0x98, 0xff, 0x80, 0xbd, + 0x00, 0x00, 0xa4, 0x6c, 0x01, 0x00, 0x80, 0xb5, + 0x00, 0xf0, 0xdd, 0xfb, 0x00, 0x20, 0xf7, 0xf7, + 0x3c, 0xf8, 0x30, 0xf0, 0xee, 0xfa, 0x80, 0xbd, + 0x00, 0x00, 0x80, 0xb5, 0x00, 0x21, 0x3c, 0x00, + 0x04, 0x19, 0x01, 0x00, 0x01, 0x20, 0xff, 0xf7, + 0x19, 0xfa, 0x01, 0x20, 0xf2, 0xf7, 0x88, 0xfc, + 0x80, 0xbd, 0x00, 0x00, 0x80, 0xb5, 0x00, 0xf0, + 0xc9, 0xfb, 0xfc, 0xf7, 0x07, 0xfd, 0x01, 0x21, + 0x01, 0x20, 0xff, 0xf7, 0x0b, 0xfa, 0x04, 0x20, + 0xf2, 0xf7, 0x7a, 0xfc, 0x80, 0xbd, 0x00, 0x00, + 0x80, 0xb5, 0x00, 0x22, 0x00, 0x21, 0x00, 0x20, + 0x00, 0xf0, 0x8a, 0xfb, 0x80, 0xbd, 0x00, 0x00, + 0x3c, 0x00, 0x40, 0x19, 0x01, 0x00, 0x03, 0x48, + 0x80, 0xb5, 0x82, 0x6a, 0x01, 0x21, 0x04, 0x20, + 0x00, 0xf0, 0x81, 0xfb, 0x80, 0xbd, 0xd4, 0x79, + 0x01, 0x00, 0x80, 0xb5, 0x00, 0x22, 0x00, 0x21, + 0x03, 0x20, 0x00, 0xf0, 0x78, 0xfb, 0x80, 0xbd, + 0x00, 0x00, 0x03, 0x48, 0x80, 0xb5, 0x82, 0x6a, + 0x01, 0x21, 0x04, 0x20, 0x00, 0xf0, 0x6f, 0xfb, + 0x80, 0xbd, 0xd4, 0x79, 0x01, 0x00, 0x80, 0xb5, + 0x00, 0x22, 0x3c, 0x00, 0x7c, 0x19, 0x01, 0x00, + 0x00, 0x21, 0x03, 0x20, 0x00, 0xf0, 0x66, 0xfb, + 0x80, 0xbd, 0x00, 0x00, 0x06, 0x48, 0x80, 0xb5, + 0x81, 0x68, 0x42, 0x69, 0x00, 0x69, 0x51, 0x18, + 0x81, 0x42, 0x03, 0xd9, 0x01, 0x21, 0x01, 0x20, + 0x00, 0xf0, 0x58, 0xfb, 0x80, 0xbd, 0x00, 0x00, + 0xd4, 0x79, 0x01, 0x00, 0x06, 0x48, 0x80, 0xb5, + 0x82, 0x88, 0x81, 0x68, 0x00, 0x69, 0x51, 0x18, + 0x81, 0x42, 0x03, 0xd9, 0x3c, 0x00, 0xb8, 0x19, + 0x01, 0x00, 0x01, 0x21, 0x02, 0x20, 0x00, 0xf0, + 0x48, 0xfb, 0x80, 0xbd, 0x00, 0x00, 0xd4, 0x79, + 0x01, 0x00, 0x10, 0xb5, 0x08, 0x4c, 0x20, 0x7b, + 0x21, 0x6a, 0xf9, 0xf7, 0x9c, 0xfa, 0xa1, 0x69, + 0x42, 0x18, 0xa0, 0x68, 0x21, 0x69, 0x80, 0x18, + 0x88, 0x42, 0x03, 0xd9, 0x01, 0x21, 0x02, 0x20, + 0x00, 0xf0, 0x33, 0xfb, 0x10, 0xbd, 0xd4, 0x79, + 0x01, 0x00, 0x80, 0xb5, 0x00, 0x22, 0x3c, 0x00, + 0xf4, 0x19, 0x01, 0x00, 0x00, 0x21, 0x00, 0x20, + 0x00, 0xf0, 0x2a, 0xfb, 0x80, 0xbd, 0x00, 0x00, + 0x00, 0x06, 0x00, 0x0e, 0x01, 0x28, 0x80, 0xb5, + 0x02, 0xd1, 0xf6, 0xf7, 0x8f, 0xf8, 0x80, 0xbd, + 0x00, 0x28, 0xfc, 0xd1, 0xf1, 0xf7, 0xfa, 0xfc, + 0x80, 0xbd, 0x00, 0x00, 0x80, 0xb5, 0xf6, 0xf7, + 0x85, 0xf8, 0x80, 0xbd, 0x80, 0xb5, 0x00, 0x06, + 0x00, 0x0e, 0xf1, 0xf7, 0x29, 0xfd, 0x80, 0xbd, + 0x3c, 0x00, 0x30, 0x1a, 0x01, 0x00, 0xb0, 0xb5, + 0x02, 0x25, 0x02, 0x28, 0x10, 0x4c, 0x0b, 0xd1, + 0xfb, 0xf7, 0x47, 0xfc, 0x00, 0x28, 0x01, 0xd1, + 0xfe, 0xf7, 0x4f, 0xff, 0x25, 0x70, 0xa1, 0x68, + 0x0c, 0x48, 0xfd, 0xf7, 0xa8, 0xfc, 0xb0, 0xbd, + 0x03, 0x28, 0x0d, 0xd1, 0x08, 0x48, 0x7d, 0x23, + 0x1c, 0x38, 0x00, 0x69, 0xdb, 0x00, 0x58, 0x43, + 0x19, 0x1c, 0x40, 0x18, 0x41, 0x08, 0x02, 0x20, + 0x00, 0xf0, 0x3c, 0x00, 0x6c, 0x1a, 0x01, 0x00, + 0x91, 0xfa, 0x25, 0x70, 0xb0, 0xbd, 0xf8, 0xf7, + 0x31, 0xf9, 0xb0, 0xbd, 0x78, 0x69, 0x01, 0x00, + 0x34, 0x63, 0x01, 0x00, 0x10, 0xb5, 0x05, 0x4c, + 0xe0, 0x68, 0x00, 0x28, 0x01, 0xd1, 0xef, 0xf7, + 0x39, 0xfc, 0x02, 0x20, 0x20, 0x70, 0x00, 0xf0, + 0xaf, 0xfa, 0x10, 0xbd, 0x78, 0x69, 0x01, 0x00, + 0x03, 0x48, 0x80, 0xb5, 0x82, 0x6a, 0x01, 0x21, + 0x04, 0x20, 0x00, 0xf0, 0x3c, 0x00, 0xa8, 0x1a, + 0x01, 0x00, 0xd3, 0xfa, 0x80, 0xbd, 0xd4, 0x79, + 0x01, 0x00, 0x80, 0xb5, 0x00, 0x22, 0x00, 0x21, + 0x03, 0x20, 0x00, 0xf0, 0xca, 0xfa, 0x80, 0xbd, + 0x00, 0x00, 0x80, 0xb5, 0x00, 0x22, 0x00, 0x21, + 0x00, 0x20, 0x00, 0xf0, 0xc2, 0xfa, 0x80, 0xbd, + 0x00, 0x00, 0x03, 0x48, 0x80, 0xb5, 0x42, 0x69, + 0x01, 0x21, 0x01, 0x20, 0x00, 0xf0, 0xb9, 0xfa, + 0x80, 0xbd, 0xd4, 0x79, 0x01, 0x00, 0x3c, 0x00, + 0xe4, 0x1a, 0x01, 0x00, 0x06, 0x48, 0x80, 0xb5, + 0x82, 0x88, 0x00, 0x2a, 0x02, 0xd0, 0x01, 0x21, + 0x02, 0x20, 0x02, 0xe0, 0x00, 0x22, 0x00, 0x21, + 0x00, 0x20, 0x00, 0xf0, 0xa9, 0xfa, 0x80, 0xbd, + 0xd4, 0x79, 0x01, 0x00, 0x10, 0xb5, 0x06, 0x4c, + 0x20, 0x7b, 0x21, 0x6a, 0xf9, 0xf7, 0xfe, 0xf9, + 0xa1, 0x69, 0x42, 0x18, 0x01, 0x21, 0x02, 0x20, + 0x00, 0xf0, 0x9a, 0xfa, 0x10, 0xbd, 0x00, 0x00, + 0x3c, 0x00, 0x20, 0x1b, 0x01, 0x00, 0xd4, 0x79, + 0x01, 0x00, 0x80, 0xb5, 0x00, 0x22, 0x00, 0x21, + 0x00, 0x20, 0x00, 0xf0, 0x90, 0xfa, 0x80, 0xbd, + 0x00, 0x00, 0x38, 0xb5, 0xfa, 0xf7, 0x41, 0xfe, + 0x00, 0x20, 0xf0, 0xf7, 0x80, 0xf8, 0x00, 0x90, + 0x00, 0xab, 0x1c, 0x88, 0x5d, 0x88, 0xf8, 0xf7, + 0x3c, 0xf9, 0x00, 0x2c, 0x02, 0xd0, 0xfd, 0xf7, + 0x9e, 0xfa, 0x02, 0xe0, 0x01, 0x20, 0xf6, 0xf7, + 0x0a, 0xff, 0x3c, 0x00, 0x5c, 0x1b, 0x01, 0x00, + 0x29, 0x1c, 0x20, 0x1c, 0xfc, 0xf7, 0xb8, 0xfc, + 0x00, 0x2c, 0x02, 0xd0, 0xf5, 0xf7, 0xe0, 0xfb, + 0x02, 0xe0, 0x00, 0x20, 0x00, 0xf0, 0xdc, 0xf9, + 0x03, 0x20, 0x00, 0x2c, 0x00, 0xd1, 0x02, 0x20, + 0x00, 0x06, 0x00, 0x0e, 0xf2, 0xf7, 0x4e, 0xfb, + 0x38, 0xbd, 0x00, 0x00, 0x03, 0x48, 0x80, 0xb5, + 0x82, 0x6a, 0x01, 0x21, 0x04, 0x20, 0x00, 0xf0, + 0x5d, 0xfa, 0x80, 0xbd, 0x3c, 0x00, 0x98, 0x1b, + 0x01, 0x00, 0xd4, 0x79, 0x01, 0x00, 0x80, 0xb5, + 0x30, 0xf0, 0x9b, 0xf9, 0x80, 0xbd, 0x80, 0xb5, + 0x00, 0x22, 0x00, 0x21, 0x03, 0x20, 0x00, 0xf0, + 0x50, 0xfa, 0x80, 0xbd, 0x00, 0x00, 0x03, 0x48, + 0x80, 0xb5, 0x42, 0x69, 0x01, 0x21, 0x01, 0x20, + 0x00, 0xf0, 0x47, 0xfa, 0x80, 0xbd, 0xd4, 0x79, + 0x01, 0x00, 0x04, 0x48, 0x80, 0xb5, 0x82, 0x88, + 0x00, 0x2a, 0x03, 0xd0, 0x01, 0x21, 0x3c, 0x00, + 0xd4, 0x1b, 0x01, 0x00, 0x02, 0x20, 0x00, 0xf0, + 0x3b, 0xfa, 0x80, 0xbd, 0xd4, 0x79, 0x01, 0x00, + 0x10, 0xb5, 0x06, 0x4c, 0x20, 0x7b, 0x21, 0x6a, + 0xf9, 0xf7, 0x90, 0xf9, 0xa1, 0x69, 0x42, 0x18, + 0x01, 0x21, 0x02, 0x20, 0x00, 0xf0, 0x2c, 0xfa, + 0x10, 0xbd, 0x00, 0x00, 0xd4, 0x79, 0x01, 0x00, + 0x80, 0xb5, 0xfc, 0xf7, 0x93, 0xfb, 0x01, 0x21, + 0x01, 0x20, 0xff, 0xf7, 0x97, 0xf8, 0x04, 0x20, + 0x3c, 0x00, 0x10, 0x1c, 0x01, 0x00, 0xf2, 0xf7, + 0x06, 0xfb, 0x80, 0xbd, 0x00, 0x00, 0x80, 0xb5, + 0x2f, 0xf0, 0x6b, 0xfb, 0x00, 0x28, 0x0a, 0xd0, + 0x01, 0x20, 0xf2, 0xf7, 0xfc, 0xfa, 0xfa, 0xf7, + 0x2a, 0xfc, 0x00, 0x28, 0x02, 0xd1, 0x04, 0x20, + 0xf6, 0xf7, 0x5d, 0xf8, 0x80, 0xbd, 0x03, 0x21, + 0x16, 0x20, 0xef, 0xf7, 0x32, 0xfb, 0x80, 0xbd, + 0x00, 0x00, 0x02, 0x48, 0x80, 0xb5, 0x00, 0x68, + 0xee, 0xf7, 0x3c, 0x00, 0x4c, 0x1c, 0x01, 0x00, + 0xc5, 0xfb, 0x80, 0xbd, 0xd4, 0x79, 0x01, 0x00, + 0x03, 0x48, 0x80, 0xb5, 0x42, 0x69, 0x01, 0x21, + 0x01, 0x20, 0x00, 0xf0, 0xf7, 0xf9, 0x80, 0xbd, + 0xd4, 0x79, 0x01, 0x00, 0x80, 0xb5, 0x30, 0xf0, + 0x35, 0xf9, 0x80, 0xbd, 0xb0, 0xb5, 0x18, 0x4c, + 0xaa, 0x20, 0x00, 0x5d, 0x04, 0x28, 0x19, 0xd1, + 0x01, 0x25, 0xe5, 0x62, 0x25, 0x63, 0x01, 0xf0, + 0x93, 0xf8, 0xa0, 0x66, 0x3c, 0x00, 0x88, 0x1c, + 0x01, 0x00, 0x01, 0xf0, 0xfc, 0xfd, 0xf2, 0xf7, + 0x2e, 0xfe, 0x00, 0x28, 0x0e, 0xd0, 0x02, 0x20, + 0xf2, 0xf7, 0xc3, 0xfa, 0xa5, 0x60, 0x01, 0xf0, + 0x86, 0xf8, 0x64, 0x30, 0x60, 0x60, 0xfa, 0xf7, + 0x8a, 0xfd, 0x01, 0x21, 0x01, 0x20, 0xff, 0xf7, + 0x46, 0xf8, 0xb0, 0xbd, 0x01, 0x20, 0xf2, 0xf7, + 0xb4, 0xfa, 0x00, 0x20, 0xa0, 0x60, 0x00, 0x21, + 0x01, 0x20, 0xff, 0xf7, 0x3c, 0xf8, 0x3c, 0x00, + 0xc4, 0x1c, 0x01, 0x00, 0xf2, 0xf7, 0x66, 0xfe, + 0x00, 0x28, 0xf1, 0xd0, 0xfa, 0xf7, 0x76, 0xfd, + 0xb0, 0xbd, 0x00, 0x00, 0xa4, 0x6c, 0x01, 0x00, + 0x80, 0xb5, 0x00, 0x20, 0xef, 0xf7, 0xd6, 0xfe, + 0x80, 0xbd, 0x00, 0x00, 0x80, 0xb5, 0x01, 0x20, + 0xef, 0xf7, 0xd0, 0xfe, 0x80, 0xbd, 0x00, 0x00, + 0xac, 0x21, 0x09, 0x5c, 0x02, 0x4a, 0x09, 0x02, + 0x89, 0x18, 0xc0, 0x31, 0x81, 0x60, 0x70, 0x47, + 0x3c, 0x00, 0x00, 0x1d, 0x01, 0x00, 0x70, 0x75, + 0x01, 0x00, 0x80, 0xb5, 0x01, 0x28, 0x04, 0xd1, + 0x03, 0xc9, 0x09, 0x68, 0xee, 0xf7, 0x64, 0xfb, + 0x80, 0xbd, 0x01, 0x21, 0x14, 0x20, 0xef, 0xf7, + 0xc4, 0xfa, 0x80, 0xbd, 0x00, 0x00, 0x00, 0x28, + 0x02, 0xd1, 0x02, 0x48, 0x40, 0x68, 0x70, 0x47, + 0x40, 0x68, 0x70, 0x47, 0x00, 0x00, 0x58, 0x75, + 0x01, 0x00, 0x10, 0xb5, 0x00, 0x24, 0xf8, 0xf7, + 0x1c, 0xfb, 0x3c, 0x00, 0x3c, 0x1d, 0x01, 0x00, + 0x00, 0x28, 0x04, 0xd0, 0x40, 0x30, 0x80, 0x7a, + 0x05, 0x28, 0x00, 0xd1, 0x01, 0x24, 0x20, 0x1c, + 0x10, 0xbd, 0x00, 0x00, 0x04, 0x48, 0x00, 0x21, + 0x40, 0x68, 0x01, 0xe0, 0x01, 0x63, 0x40, 0x68, + 0x00, 0x28, 0xfb, 0xd1, 0x70, 0x47, 0x00, 0x00, + 0x58, 0x75, 0x01, 0x00, 0xb0, 0xb5, 0x04, 0x1c, + 0x0d, 0x1c, 0xf7, 0xf7, 0xa5, 0xf8, 0x40, 0x34, + 0xe5, 0x72, 0xb0, 0xbd, 0x3c, 0x00, 0x78, 0x1d, + 0x01, 0x00, 0xf8, 0xb5, 0x07, 0x1c, 0xf8, 0xf7, + 0xfa, 0xfa, 0x04, 0x1c, 0x04, 0xd0, 0x05, 0x21, + 0x14, 0x20, 0xef, 0xf7, 0x8c, 0xfa, 0x28, 0xe0, + 0x00, 0x25, 0x14, 0x49, 0x28, 0x02, 0x46, 0x18, + 0x30, 0x1c, 0x44, 0x30, 0x06, 0x22, 0x12, 0x49, + 0xee, 0xf7, 0x2d, 0xfb, 0x00, 0x28, 0x02, 0xd1, + 0xac, 0x20, 0x85, 0x55, 0x34, 0x1c, 0x01, 0x35, + 0x03, 0x2d, 0xee, 0xd3, 0x00, 0x2c, 0x3c, 0x00, + 0xb4, 0x1d, 0x01, 0x00, 0x14, 0xd0, 0x39, 0x1c, + 0x20, 0x1c, 0xf8, 0xf7, 0x2b, 0xf8, 0x09, 0x49, + 0x00, 0x20, 0x20, 0x60, 0x18, 0x39, 0x48, 0x68, + 0x60, 0x60, 0x00, 0x28, 0x00, 0xd0, 0x04, 0x60, + 0x4c, 0x60, 0xca, 0x68, 0x00, 0x2a, 0x03, 0xd0, + 0x01, 0x21, 0x20, 0x1c, 0xee, 0xf7, 0xfe, 0xfa, + 0x20, 0x1c, 0xf8, 0xbd, 0x70, 0x75, 0x01, 0x00, + 0x58, 0x46, 0x01, 0x00, 0x80, 0xb5, 0xf8, 0xf7, + 0x3c, 0x00, 0xf0, 0x1d, 0x01, 0x00, 0xc1, 0xfa, + 0x00, 0x28, 0x04, 0xd1, 0x06, 0x21, 0x14, 0x20, + 0xef, 0xf7, 0x53, 0xfa, 0x80, 0xbd, 0xf5, 0xf7, + 0x16, 0xfc, 0x80, 0xbd, 0x00, 0x00, 0x80, 0xb5, + 0xf8, 0xf7, 0xb3, 0xfa, 0x80, 0xbd, 0x10, 0xb5, + 0x09, 0x4c, 0x21, 0x88, 0x02, 0x29, 0x03, 0xd1, + 0x14, 0x20, 0xef, 0xf7, 0x42, 0xfa, 0x04, 0xe0, + 0xa3, 0x68, 0x8a, 0x00, 0x98, 0x50, 0x48, 0x1c, + 0x20, 0x80, 0x3c, 0x00, 0x2c, 0x1e, 0x01, 0x00, + 0x20, 0x88, 0x01, 0x38, 0x00, 0x04, 0x00, 0x0c, + 0x10, 0xbd, 0x00, 0x00, 0x58, 0x75, 0x01, 0x00, + 0x0b, 0x1c, 0x11, 0x1c, 0x08, 0x4a, 0x80, 0xb5, + 0x12, 0x88, 0x90, 0x42, 0x06, 0xd2, 0xda, 0x68, + 0xc0, 0x00, 0x12, 0x18, 0x14, 0x20, 0x01, 0xf0, + 0xbb, 0xfb, 0x80, 0xbd, 0x03, 0x21, 0x14, 0x20, + 0xef, 0xf7, 0x22, 0xfa, 0x80, 0xbd, 0x00, 0x00, + 0x58, 0x75, 0x01, 0x00, 0x3c, 0x00, 0x68, 0x1e, + 0x01, 0x00, 0x08, 0x4a, 0x80, 0xb5, 0x12, 0x88, + 0x90, 0x42, 0x06, 0xd2, 0xc9, 0x68, 0xc0, 0x00, + 0x09, 0x18, 0x14, 0x20, 0x01, 0xf0, 0xdb, 0xfb, + 0x80, 0xbd, 0x04, 0x21, 0x14, 0x20, 0xef, 0xf7, + 0x0e, 0xfa, 0x80, 0xbd, 0x00, 0x00, 0x58, 0x75, + 0x01, 0x00, 0x01, 0x49, 0xc8, 0x60, 0x70, 0x47, + 0x00, 0x00, 0x58, 0x75, 0x01, 0x00, 0x80, 0xb5, + 0x06, 0x22, 0x44, 0x30, 0xee, 0xf7, 0x3c, 0x00, + 0xa4, 0x1e, 0x01, 0x00, 0xab, 0xfa, 0x00, 0x28, + 0x01, 0xd1, 0x01, 0x20, 0x80, 0xbd, 0x00, 0x20, + 0x80, 0xbd, 0x00, 0x00, 0x1c, 0xb5, 0x14, 0x4c, + 0x20, 0x69, 0x00, 0x28, 0x23, 0xd0, 0x20, 0x78, + 0x0a, 0x28, 0x01, 0xd0, 0x00, 0xf0, 0xfc, 0xf8, + 0x00, 0x20, 0x60, 0x61, 0x0f, 0x48, 0x40, 0x79, + 0xa0, 0x70, 0x00, 0x28, 0x01, 0xd0, 0x01, 0x28, + 0x15, 0xd1, 0xfd, 0xf7, 0xed, 0xfe, 0x01, 0x90, + 0x3c, 0x00, 0xe0, 0x1e, 0x01, 0x00, 0xfd, 0xf7, + 0x82, 0xfe, 0x00, 0x90, 0x00, 0xab, 0x18, 0x79, + 0x19, 0x78, 0x40, 0x1a, 0x18, 0x71, 0x58, 0x79, + 0x59, 0x78, 0x40, 0x1a, 0x58, 0x71, 0x01, 0x98, + 0xf2, 0xf7, 0x89, 0xfe, 0x05, 0x20, 0x20, 0x70, + 0x00, 0xf0, 0xbf, 0xf9, 0x1c, 0xbd, 0x7c, 0x78, + 0x01, 0x00, 0x0c, 0x5a, 0x01, 0x00, 0x08, 0xb5, + 0x04, 0x4a, 0x00, 0x90, 0x14, 0x32, 0x00, 0x20, + 0x02, 0x4b, 0x3c, 0x00, 0x1c, 0x1f, 0x01, 0x00, + 0x02, 0x49, 0xf1, 0xf7, 0x7d, 0xf9, 0x08, 0xbd, + 0x2c, 0x75, 0x01, 0x00, 0xb1, 0xa8, 0x00, 0x00, + 0xb0, 0xb5, 0x00, 0x28, 0x06, 0xd0, 0x01, 0x28, + 0x06, 0xd0, 0x02, 0x28, 0x07, 0xd1, 0x0c, 0x4c, + 0x01, 0x25, 0x07, 0xe0, 0x0b, 0x4c, 0x04, 0xe0, + 0x0a, 0x4c, 0x2a, 0x3c, 0x01, 0xe0, 0x08, 0x4c, + 0xb6, 0x34, 0x00, 0x25, 0x00, 0xf0, 0x2c, 0xff, + 0x07, 0x49, 0x89, 0x6e, 0x3c, 0x00, 0x58, 0x1f, + 0x01, 0x00, 0x09, 0x19, 0x09, 0x1a, 0xa1, 0x42, + 0x00, 0xd9, 0x00, 0x21, 0x2a, 0x1c, 0x16, 0x20, + 0x01, 0xf0, 0x31, 0xfb, 0xb0, 0xbd, 0x71, 0x02, + 0x00, 0x00, 0x0c, 0x05, 0x00, 0x00, 0xa4, 0x6c, + 0x01, 0x00, 0x8c, 0xb5, 0x00, 0xab, 0x8e, 0x21, + 0x19, 0x80, 0xfc, 0xf7, 0x38, 0xf9, 0x01, 0x90, + 0x68, 0x46, 0xfb, 0xf7, 0xa6, 0xfa, 0x8c, 0xbd, + 0x00, 0x00, 0xbf, 0xb5, 0x13, 0x4a, 0x3c, 0x00, + 0x94, 0x1f, 0x01, 0x00, 0x01, 0x91, 0x0d, 0x1c, + 0x11, 0x7c, 0x88, 0x43, 0x04, 0x1c, 0x21, 0x43, + 0x08, 0x1c, 0x10, 0x74, 0xa0, 0x07, 0x0b, 0xd5, + 0x0e, 0x48, 0x00, 0x90, 0x01, 0x20, 0x02, 0x90, + 0x00, 0xf0, 0xfc, 0xfe, 0x0c, 0x49, 0x40, 0x18, + 0x03, 0x90, 0x68, 0x46, 0xf9, 0xf7, 0x6a, 0xff, + 0xe0, 0x07, 0x0c, 0xd5, 0xf1, 0xf7, 0x2c, 0xfd, + 0x00, 0x28, 0x03, 0xd0, 0x07, 0x48, 0x85, 0x42, + 0x3c, 0x00, 0xd0, 0x1f, 0x01, 0x00, 0x00, 0xd2, + 0x01, 0x90, 0x06, 0x48, 0x00, 0x90, 0x68, 0x46, + 0xf9, 0xf7, 0x09, 0xff, 0xbf, 0xbd, 0x78, 0x69, + 0x01, 0x00, 0x81, 0xea, 0x00, 0x00, 0x10, 0x27, + 0x00, 0x00, 0xa0, 0x86, 0x01, 0x00, 0x75, 0xea, + 0x00, 0x00, 0x10, 0xb5, 0x0a, 0x4c, 0x60, 0x69, + 0x00, 0x28, 0x0e, 0xd1, 0x01, 0x20, 0x60, 0x61, + 0xa1, 0x68, 0x07, 0x48, 0xfd, 0xf7, 0xcb, 0xf9, + 0x00, 0x21, 0x3c, 0x00, 0x0c, 0x20, 0x01, 0x00, + 0xa0, 0x68, 0xf9, 0xf7, 0xd1, 0xfb, 0x01, 0x22, + 0x07, 0x20, 0x04, 0x49, 0x01, 0xf0, 0xd8, 0xfa, + 0x10, 0xbd, 0x00, 0x00, 0x78, 0x69, 0x01, 0x00, + 0x34, 0x63, 0x01, 0x00, 0x98, 0x3a, 0x00, 0x00, + 0x10, 0xb5, 0x0c, 0x1c, 0x11, 0x1c, 0x06, 0x4a, + 0x00, 0x2b, 0x10, 0x70, 0x03, 0xd0, 0x00, 0x28, + 0x02, 0xd1, 0xf9, 0xf7, 0xf5, 0xfd, 0x10, 0xbd, + 0x20, 0x1c, 0xf9, 0xf7, 0x3c, 0x00, 0x48, 0x20, + 0x01, 0x00, 0x01, 0xfe, 0x10, 0xbd, 0xa0, 0x79, + 0x01, 0x00, 0xb0, 0xb5, 0x0a, 0x4c, 0x05, 0x1c, + 0xe3, 0x6a, 0x20, 0x1f, 0x01, 0x33, 0xe3, 0x62, + 0x00, 0x88, 0x00, 0x29, 0x06, 0xd0, 0xa1, 0x68, + 0x89, 0x18, 0x21, 0x61, 0x05, 0x4a, 0x00, 0xf0, + 0xfc, 0xfe, 0x01, 0xe0, 0x00, 0xf0, 0xcf, 0xfe, + 0x25, 0x77, 0xb0, 0xbd, 0x00, 0x00, 0xd4, 0x79, + 0x01, 0x00, 0x55, 0xe3, 0x00, 0x00, 0x3c, 0x00, + 0x84, 0x20, 0x01, 0x00, 0x01, 0x1c, 0x03, 0x48, + 0x80, 0xb5, 0x40, 0x88, 0xff, 0xf7, 0xec, 0xfe, + 0x80, 0xbd, 0x00, 0x00, 0x98, 0x7c, 0x01, 0x00, + 0x03, 0x48, 0x80, 0xb5, 0xc1, 0x68, 0x18, 0x38, + 0x80, 0x88, 0xff, 0xf7, 0xe1, 0xfe, 0x80, 0xbd, + 0x70, 0x7c, 0x01, 0x00, 0x80, 0xb5, 0x00, 0x21, + 0x16, 0x20, 0x01, 0xf0, 0xbf, 0xfa, 0x01, 0x21, + 0x16, 0x20, 0x01, 0xf0, 0xbb, 0xfa, 0x80, 0xbd, + 0x3c, 0x00, 0xc0, 0x20, 0x01, 0x00, 0x10, 0xb5, + 0x0b, 0x4c, 0x20, 0x78, 0x0a, 0x28, 0x10, 0xd0, + 0x01, 0x20, 0x60, 0x61, 0x0a, 0x21, 0x13, 0x20, + 0x01, 0xf0, 0xaf, 0xfa, 0x0a, 0x20, 0x60, 0x70, + 0x20, 0x70, 0xfd, 0xf7, 0x3c, 0xfb, 0x01, 0x20, + 0xfd, 0xf7, 0xe9, 0xfb, 0x00, 0x20, 0xfa, 0xf7, + 0xc4, 0xf9, 0x10, 0xbd, 0x00, 0x00, 0x7c, 0x78, + 0x01, 0x00, 0x10, 0xb5, 0x0c, 0x4c, 0x00, 0x20, + 0x0b, 0x49, 0x3c, 0x00, 0xfc, 0x20, 0x01, 0x00, + 0x20, 0x63, 0xe0, 0x62, 0x50, 0x39, 0x88, 0x61, + 0x20, 0x70, 0x08, 0x48, 0x38, 0x21, 0x0c, 0x38, + 0x00, 0x7a, 0x08, 0x55, 0x81, 0x21, 0x18, 0x20, + 0x01, 0xf0, 0x8e, 0xfa, 0x20, 0x69, 0x01, 0x28, + 0x02, 0xd1, 0x00, 0x20, 0xf5, 0xf7, 0x3e, 0xfb, + 0x10, 0xbd, 0x00, 0x00, 0xf4, 0x6e, 0x01, 0x00, + 0xb0, 0xb5, 0x1c, 0x4c, 0x00, 0x25, 0x2c, 0x22, + 0x01, 0x1d, 0x20, 0x1c, 0x3c, 0x00, 0x38, 0x21, + 0x01, 0x00, 0x9a, 0xb0, 0xee, 0xf7, 0x39, 0xfa, + 0x18, 0x49, 0x2c, 0x31, 0x08, 0x1c, 0x00, 0x7a, + 0x8a, 0x69, 0x00, 0x2a, 0x13, 0xd1, 0x02, 0x28, + 0x03, 0xd1, 0xa0, 0x68, 0x00, 0x28, 0x20, 0xd0, + 0x04, 0xe0, 0x00, 0x28, 0x1d, 0xd1, 0x60, 0x68, + 0x00, 0x28, 0x1a, 0xd0, 0x80, 0x02, 0x88, 0x61, + 0x0e, 0x48, 0x69, 0x46, 0x24, 0x38, 0x00, 0x68, + 0xef, 0xf7, 0xcb, 0xfb, 0x11, 0xe0, 0x3c, 0x00, + 0x74, 0x21, 0x01, 0x00, 0x00, 0x22, 0x02, 0x28, + 0x03, 0xd1, 0xa0, 0x68, 0x00, 0x28, 0x09, 0xd1, + 0x04, 0xe0, 0x00, 0x28, 0x08, 0xd1, 0x60, 0x68, + 0x00, 0x28, 0x03, 0xd1, 0x8a, 0x61, 0xff, 0xf7, + 0xb1, 0xff, 0x01, 0xe0, 0x80, 0x02, 0x88, 0x61, + 0x28, 0x1c, 0x1a, 0xb0, 0xb0, 0xbd, 0x00, 0x00, + 0xc8, 0x6e, 0x01, 0x00, 0xf8, 0xb5, 0x0c, 0x49, + 0x02, 0x20, 0x48, 0x60, 0x0b, 0x49, 0x00, 0x05, + 0x3c, 0x00, 0xb0, 0x21, 0x01, 0x00, 0x08, 0x60, + 0x0b, 0x4f, 0xb8, 0x68, 0xf9, 0x68, 0x7c, 0x68, + 0x45, 0x1a, 0x2e, 0x1c, 0x04, 0xe0, 0xa0, 0x68, + 0x61, 0x68, 0xee, 0xf7, 0x09, 0xf9, 0x24, 0x68, + 0x01, 0x3d, 0xf8, 0xd2, 0x7c, 0x60, 0xf8, 0x68, + 0x80, 0x19, 0xf8, 0x60, 0xf8, 0xbd, 0x40, 0x20, + 0x07, 0x00, 0x00, 0x10, 0x07, 0x00, 0x44, 0xe3, + 0x01, 0x00, 0xf8, 0xb5, 0x1f, 0x4e, 0x04, 0x1c, + 0x30, 0x69, 0x3c, 0x00, 0xec, 0x21, 0x01, 0x00, + 0x01, 0x21, 0xf9, 0xf7, 0x99, 0xfa, 0x1d, 0x49, + 0x60, 0x00, 0x40, 0x18, 0x10, 0x38, 0x81, 0x7b, + 0x1b, 0x4a, 0x51, 0x72, 0xc0, 0x7b, 0x10, 0x74, + 0x1a, 0x4f, 0x1b, 0x4d, 0x0e, 0x2c, 0x0a, 0xd1, + 0x01, 0x22, 0x02, 0x21, 0x08, 0x20, 0x01, 0xf0, + 0xf3, 0xfb, 0x03, 0x20, 0xff, 0x21, 0x41, 0x31, + 0x39, 0x86, 0x14, 0x21, 0x08, 0xe0, 0x02, 0x22, + 0x01, 0x21, 0x08, 0x20, 0x3c, 0x00, 0x28, 0x22, + 0x01, 0x00, 0x01, 0xf0, 0xe8, 0xfb, 0x12, 0x49, + 0x02, 0x20, 0x39, 0x86, 0x10, 0x21, 0xa9, 0x71, + 0xe8, 0x71, 0x10, 0x48, 0x11, 0x4a, 0x00, 0x19, + 0x10, 0x38, 0xc0, 0x7b, 0x00, 0x28, 0x03, 0xd0, + 0x01, 0x21, 0x51, 0x73, 0x10, 0x73, 0x01, 0xe0, + 0x00, 0x20, 0x50, 0x73, 0x00, 0x21, 0x20, 0x1c, + 0xfd, 0xf7, 0xe5, 0xfd, 0x30, 0x69, 0xf9, 0xf7, + 0x08, 0xfb, 0xf8, 0xbd, 0x00, 0x00, 0x3c, 0x00, + 0x64, 0x22, 0x01, 0x00, 0x40, 0x7c, 0x01, 0x00, + 0x76, 0x46, 0x01, 0x00, 0x0c, 0x80, 0x07, 0x00, + 0x30, 0x80, 0x07, 0x00, 0x00, 0x80, 0x07, 0x00, + 0xff, 0x01, 0x00, 0x00, 0x5c, 0x57, 0x01, 0x00, + 0xd0, 0x80, 0x07, 0x00, 0x10, 0xb5, 0x15, 0x4c, + 0x14, 0x4a, 0x21, 0x78, 0x00, 0x20, 0x18, 0x32, + 0x05, 0x29, 0x1d, 0xd0, 0x06, 0x29, 0x1b, 0xd0, + 0x07, 0x29, 0x01, 0xd0, 0x08, 0x29, 0x06, 0xd1, + 0x3c, 0x00, 0xa0, 0x22, 0x01, 0x00, 0x91, 0x68, + 0x05, 0x20, 0x10, 0x29, 0x00, 0xdb, 0x06, 0x20, + 0x20, 0x70, 0x01, 0x20, 0xa1, 0x78, 0x00, 0x28, + 0x61, 0x70, 0x0b, 0xd0, 0x00, 0x20, 0xfa, 0xf7, + 0xdc, 0xf8, 0x00, 0x21, 0x60, 0x78, 0xf4, 0xf7, + 0x3c, 0xfa, 0x0a, 0x22, 0x1e, 0x21, 0x13, 0x20, + 0x01, 0xf0, 0x7f, 0xf9, 0x10, 0xbd, 0xd1, 0x69, + 0x07, 0x20, 0x10, 0x29, 0xe8, 0xdb, 0x08, 0x20, + 0xe6, 0xe7, 0x3c, 0x00, 0xdc, 0x22, 0x01, 0x00, + 0x7c, 0x78, 0x01, 0x00, 0xb0, 0xb5, 0x0d, 0x1c, + 0x01, 0x1c, 0x04, 0x1c, 0x44, 0x31, 0x00, 0x20, + 0xf6, 0xf7, 0x40, 0xfa, 0x30, 0x34, 0x00, 0x2d, + 0x07, 0xd0, 0x0e, 0xc8, 0x0e, 0xc4, 0x08, 0xc8, + 0x10, 0x38, 0x08, 0xc4, 0xf4, 0xf7, 0xc4, 0xf9, + 0xb0, 0xbd, 0x1e, 0xcc, 0x1e, 0xc0, 0xb0, 0xbd, + 0xf8, 0xb5, 0x08, 0x1c, 0x11, 0x1c, 0xf4, 0xf7, + 0x87, 0xfa, 0x08, 0x4c, 0x3c, 0x00, 0x18, 0x23, + 0x01, 0x00, 0x00, 0x25, 0x08, 0x4e, 0x08, 0x4f, + 0x06, 0xe0, 0x30, 0x6b, 0x00, 0x28, 0x03, 0xd0, + 0x35, 0x63, 0x20, 0x68, 0xee, 0xf7, 0x55, 0xf8, + 0x38, 0x68, 0x00, 0x28, 0xf5, 0xd0, 0xf8, 0xbd, + 0x00, 0x00, 0x5c, 0x5b, 0x01, 0x00, 0xe4, 0xfe, + 0x01, 0x00, 0x84, 0x5a, 0x01, 0x00, 0x80, 0xb5, + 0x00, 0x06, 0x00, 0x0e, 0x00, 0xf0, 0x07, 0xf8, + 0x80, 0xbd, 0x80, 0xb5, 0x0a, 0x1c, 0x3c, 0x00, + 0x54, 0x23, 0x01, 0x00, 0x23, 0x21, 0x01, 0xf0, + 0x2b, 0xfa, 0x80, 0xbd, 0xb0, 0xb5, 0x0d, 0x1c, + 0x04, 0x1c, 0x12, 0x28, 0x03, 0xd3, 0x01, 0x21, + 0x23, 0x20, 0xee, 0xf7, 0x9b, 0xff, 0x06, 0x49, + 0xa0, 0x00, 0x08, 0x58, 0x04, 0xe0, 0x12, 0xc8, + 0x28, 0x1c, 0xee, 0xf7, 0x2e, 0xf8, 0x20, 0x1c, + 0x00, 0x28, 0xf8, 0xd1, 0xb0, 0xbd, 0x00, 0x00, + 0x68, 0x5b, 0x01, 0x00, 0xf8, 0xb5, 0x0e, 0x1c, + 0x3c, 0x00, 0x90, 0x23, 0x01, 0x00, 0x00, 0x25, + 0x04, 0x1c, 0x12, 0x28, 0x03, 0xd3, 0x01, 0x21, + 0x23, 0x20, 0xee, 0xf7, 0x82, 0xff, 0x13, 0x48, + 0xa7, 0x00, 0xc4, 0x59, 0x08, 0xe0, 0x20, 0x68, + 0xb0, 0x42, 0x03, 0xd1, 0x03, 0x21, 0x23, 0x20, + 0xee, 0xf7, 0x77, 0xff, 0x25, 0x1c, 0x64, 0x68, + 0x00, 0x2c, 0xf4, 0xd1, 0x0c, 0x4a, 0x04, 0x3a, + 0x10, 0x68, 0x00, 0x28, 0x01, 0xd0, 0x41, 0x68, + 0x11, 0x60, 0x3c, 0x00, 0xcc, 0x23, 0x01, 0x00, + 0x00, 0x28, 0x04, 0xd1, 0x02, 0x21, 0x23, 0x20, + 0xee, 0xf7, 0x66, 0xff, 0xf8, 0xbd, 0x00, 0x21, + 0x41, 0x60, 0x06, 0x60, 0x00, 0x2d, 0x01, 0xd0, + 0x68, 0x60, 0xf7, 0xe7, 0x01, 0x49, 0xc8, 0x51, + 0xf4, 0xe7, 0x00, 0x00, 0x68, 0x5b, 0x01, 0x00, + 0x70, 0xb5, 0x0e, 0x1c, 0x05, 0x1c, 0x00, 0x24, + 0x12, 0x28, 0x03, 0xd3, 0x01, 0x21, 0x23, 0x20, + 0xee, 0xf7, 0x4e, 0xff, 0x3c, 0x00, 0x08, 0x24, + 0x01, 0x00, 0x0d, 0x4b, 0xaa, 0x00, 0x98, 0x58, + 0x04, 0xe0, 0x01, 0x68, 0xb1, 0x42, 0x04, 0xd0, + 0x04, 0x1c, 0x40, 0x68, 0x00, 0x28, 0xf8, 0xd1, + 0x70, 0xbd, 0x00, 0x28, 0xfc, 0xd0, 0x00, 0x2c, + 0x41, 0x68, 0x01, 0xd1, 0x99, 0x50, 0x00, 0xe0, + 0x61, 0x60, 0x00, 0x21, 0x03, 0x4a, 0x01, 0x60, + 0x04, 0x3a, 0x11, 0x68, 0x41, 0x60, 0x10, 0x60, + 0x70, 0xbd, 0x68, 0x5b, 0x01, 0x00, 0x3c, 0x00, + 0x44, 0x24, 0x01, 0x00, 0xf3, 0xb5, 0x81, 0xb0, + 0x00, 0x28, 0x17, 0xd0, 0x01, 0x78, 0xff, 0x29, + 0x14, 0xd0, 0x45, 0x78, 0x44, 0x19, 0x02, 0x34, + 0x80, 0x27, 0x01, 0x3c, 0x26, 0x78, 0x01, 0x3d, + 0xbe, 0x43, 0x30, 0x1c, 0xf8, 0xf7, 0x82, 0xfc, + 0x01, 0x21, 0x81, 0x40, 0x02, 0x98, 0x01, 0x40, + 0x02, 0xd0, 0x3e, 0x43, 0x30, 0x1c, 0x20, 0x70, + 0x00, 0x2d, 0xee, 0xd1, 0xfe, 0xbd, 0x00, 0x00, + 0x3c, 0x00, 0x80, 0x24, 0x01, 0x00, 0x10, 0x4b, + 0x10, 0xb5, 0x59, 0x68, 0x41, 0x1a, 0x0f, 0x29, + 0x0d, 0xdc, 0x0e, 0x22, 0xd2, 0x43, 0x91, 0x42, + 0x09, 0xdb, 0x1a, 0x1c, 0x92, 0x68, 0x00, 0x29, + 0x01, 0xdd, 0x00, 0x2a, 0x03, 0xda, 0x00, 0x29, + 0x0d, 0xda, 0x00, 0x2a, 0x0b, 0xdc, 0x04, 0x33, + 0x03, 0xc3, 0xfd, 0xf7, 0x10, 0xfd, 0x04, 0x1c, + 0xfd, 0xf7, 0x13, 0xfd, 0x00, 0x28, 0x02, 0xd0, + 0x20, 0x1c, 0x3c, 0x00, 0xbc, 0x24, 0x01, 0x00, + 0xff, 0xf7, 0x92, 0xfe, 0x10, 0xbd, 0x00, 0x00, + 0x18, 0x63, 0x01, 0x00, 0xf8, 0xb5, 0x64, 0x4c, + 0x07, 0x1c, 0x60, 0x78, 0xa1, 0x78, 0x88, 0x42, + 0x0f, 0xd1, 0x08, 0x1c, 0xfd, 0xf7, 0xce, 0xf8, + 0xe0, 0x60, 0x04, 0x20, 0x60, 0x70, 0x0a, 0x22, + 0x1e, 0x21, 0x13, 0x20, 0x01, 0xf0, 0x70, 0xf8, + 0x00, 0x21, 0x60, 0x78, 0xf4, 0xf7, 0x24, 0xf9, + 0xf8, 0xbd, 0x04, 0x28, 0x3c, 0x00, 0xf8, 0x24, + 0x01, 0x00, 0x6e, 0xd1, 0x58, 0x4e, 0xfd, 0xf7, + 0xbc, 0xf8, 0x00, 0x90, 0x71, 0x78, 0x04, 0x1c, + 0x00, 0x20, 0x05, 0x29, 0x21, 0xd2, 0x01, 0xa3, + 0x5b, 0x5c, 0x5b, 0x00, 0x9f, 0x44, 0x0b, 0x0f, + 0x14, 0x1a, 0x02, 0x00, 0x51, 0x48, 0x51, 0x49, + 0x60, 0x43, 0x41, 0x18, 0x7d, 0x20, 0xc0, 0x00, + 0xee, 0xf7, 0x87, 0xf8, 0x11, 0xe0, 0x87, 0x20, + 0x60, 0x43, 0x4d, 0x49, 0x02, 0xe0, 0x3c, 0x00, + 0x34, 0x25, 0x01, 0x00, 0x45, 0x20, 0x4d, 0x49, + 0x60, 0x43, 0x40, 0x18, 0x08, 0xe0, 0x4c, 0x48, + 0xcd, 0x21, 0x09, 0x01, 0x60, 0x43, 0x40, 0x1a, + 0x02, 0xe0, 0x46, 0x20, 0x60, 0x43, 0x82, 0x38, + 0x06, 0x06, 0x48, 0x48, 0x07, 0x21, 0x00, 0x79, + 0x36, 0x16, 0x08, 0x1a, 0x00, 0x19, 0x00, 0x90, + 0x68, 0x46, 0xfe, 0xf7, 0x5f, 0xfd, 0x38, 0x1c, + 0xfd, 0xf7, 0x2e, 0xfb, 0x00, 0x99, 0x42, 0x4a, + 0x3c, 0x00, 0x70, 0x25, 0x01, 0x00, 0x49, 0x00, + 0x51, 0x5a, 0x48, 0x43, 0x39, 0x49, 0x04, 0x1c, + 0x88, 0x78, 0x00, 0x28, 0x01, 0xd0, 0x01, 0x28, + 0x1e, 0xd1, 0x35, 0x49, 0x00, 0x28, 0x03, 0xd1, + 0x3a, 0x48, 0x05, 0x78, 0x04, 0x20, 0x02, 0xe0, + 0x38, 0x48, 0x45, 0x78, 0x0c, 0x20, 0x30, 0x49, + 0xc9, 0x68, 0x49, 0x1b, 0x08, 0x18, 0x00, 0x90, + 0x68, 0x46, 0xfe, 0xf7, 0x3e, 0xfd, 0x00, 0x98, + 0x33, 0x49, 0x3c, 0x00, 0xac, 0x25, 0x01, 0x00, + 0x40, 0x00, 0x20, 0x31, 0x08, 0x5a, 0x2a, 0x49, + 0x44, 0x43, 0xc8, 0x68, 0xa8, 0x42, 0x01, 0xd9, + 0x01, 0x25, 0x00, 0xe0, 0x00, 0x25, 0x2e, 0x48, + 0x21, 0x18, 0x40, 0x00, 0xee, 0xf7, 0xa2, 0xf8, + 0x04, 0x1c, 0x00, 0x2d, 0x03, 0xd0, 0xfd, 0xf7, + 0xc3, 0xfa, 0x02, 0xe0, 0x3d, 0xe0, 0xfd, 0xf7, + 0xf3, 0xfa, 0x00, 0x2f, 0x02, 0xd1, 0x25, 0x48, + 0x0e, 0x38, 0x01, 0xe0, 0x3c, 0x00, 0xe8, 0x25, + 0x01, 0x00, 0x23, 0x48, 0x0a, 0x38, 0x01, 0x68, + 0x61, 0x1a, 0xcb, 0x1c, 0x01, 0xdb, 0x03, 0x29, + 0x00, 0xdd, 0x04, 0x60, 0x01, 0x68, 0xa1, 0x42, + 0x01, 0xd2, 0x01, 0x31, 0x04, 0xe0, 0xa1, 0x42, + 0x03, 0xd9, 0x00, 0x29, 0x01, 0xd0, 0x01, 0x39, + 0x01, 0x60, 0x01, 0x68, 0x38, 0x1c, 0xfd, 0xf7, + 0xc0, 0xfb, 0x10, 0x4c, 0x0a, 0x20, 0x60, 0x70, + 0x0a, 0x22, 0x13, 0x20, 0xa1, 0x68, 0x3c, 0x00, + 0x24, 0x26, 0x01, 0x00, 0x00, 0xf0, 0xd2, 0xff, + 0x60, 0x68, 0x00, 0xf0, 0xf7, 0xfa, 0x00, 0x28, + 0x00, 0xd1, 0x5f, 0xe7, 0x00, 0xf0, 0xba, 0xfb, + 0x11, 0x49, 0x00, 0x23, 0x40, 0x18, 0x0e, 0x49, + 0x60, 0x60, 0x1e, 0x39, 0xc8, 0x56, 0xb0, 0x42, + 0xf3, 0xd0, 0x0e, 0x70, 0x31, 0x1c, 0x00, 0x20, + 0xff, 0xf7, 0x84, 0xfe, 0x4e, 0xe7, 0xff, 0xf7, + 0x15, 0xfe, 0x4b, 0xe7, 0x7c, 0x78, 0x01, 0x00, + 0x3c, 0x00, 0x60, 0x26, 0x01, 0x00, 0x60, 0xd7, + 0xff, 0xff, 0x60, 0x8f, 0x01, 0x00, 0x54, 0x0b, + 0x00, 0x00, 0xc9, 0x09, 0x00, 0x00, 0x8e, 0xfe, + 0xff, 0xff, 0x0c, 0x5a, 0x01, 0x00, 0x12, 0x5a, + 0x01, 0x00, 0x20, 0xa1, 0x07, 0x00, 0x40, 0x42, + 0x0f, 0x00, 0x30, 0xb5, 0x0c, 0x4b, 0xfe, 0x24, + 0x1b, 0x88, 0x04, 0x40, 0xc0, 0x07, 0x5d, 0x07, + 0x6d, 0x0f, 0xdb, 0x08, 0xc0, 0x0f, 0x9c, 0x42, + 0x0b, 0xd8, 0x3c, 0x00, 0x9c, 0x26, 0x01, 0x00, + 0xa2, 0x18, 0x04, 0x3a, 0x9a, 0x42, 0x07, 0xd3, + 0x1a, 0x1b, 0x89, 0x5c, 0x01, 0x22, 0xaa, 0x40, + 0x11, 0x40, 0x01, 0xd0, 0x02, 0x21, 0x08, 0x43, + 0x30, 0xbd, 0x00, 0x00, 0xfa, 0x60, 0x01, 0x00, + 0x80, 0xb5, 0x00, 0x28, 0x03, 0xd0, 0x01, 0x1c, + 0x14, 0x20, 0xf5, 0xf7, 0xff, 0xfa, 0x80, 0xbd, + 0xb0, 0xb5, 0x04, 0x1c, 0xf7, 0xf7, 0x08, 0xfd, + 0x13, 0x4d, 0x00, 0x28, 0x3c, 0x00, 0xd8, 0x26, + 0x01, 0x00, 0x1d, 0xd1, 0xa0, 0x07, 0x16, 0xd5, + 0x02, 0x20, 0x84, 0x43, 0x11, 0x48, 0x01, 0x22, + 0x2a, 0x62, 0x40, 0x68, 0x00, 0x28, 0x13, 0xd0, + 0xf2, 0xf7, 0x51, 0xf9, 0x00, 0x28, 0x0f, 0xd1, + 0x0b, 0x48, 0xe4, 0x30, 0x80, 0x7a, 0x01, 0x28, + 0x00, 0xd0, 0x00, 0x22, 0x11, 0x1c, 0x01, 0x20, + 0xf2, 0xf7, 0xa5, 0xf9, 0x04, 0xe0, 0x00, 0xf0, + 0x4e, 0xfb, 0xe8, 0x61, 0xf2, 0xf7, 0x3c, 0x00, + 0x14, 0x27, 0x01, 0x00, 0x6b, 0xf9, 0xa9, 0x6a, + 0x00, 0x29, 0x02, 0xd0, 0x20, 0x1c, 0xed, 0xf7, + 0x5c, 0xfe, 0xb0, 0xbd, 0x60, 0x6c, 0x01, 0x00, + 0xb0, 0x57, 0x01, 0x00, 0x20, 0x48, 0xb0, 0xb5, + 0x81, 0x68, 0x01, 0x29, 0x04, 0xd1, 0x00, 0x78, + 0x00, 0x28, 0x01, 0xd1, 0xfd, 0xf7, 0x72, 0xfd, + 0x1b, 0x4d, 0x80, 0x3d, 0x2c, 0x1c, 0x70, 0x34, + 0x20, 0x78, 0x03, 0x38, 0x05, 0x28, 0x18, 0xd2, + 0x3c, 0x00, 0x50, 0x27, 0x01, 0x00, 0x01, 0xa3, + 0x1b, 0x5c, 0x5b, 0x00, 0x9f, 0x44, 0x04, 0x15, + 0x27, 0x27, 0x27, 0x00, 0xfb, 0xf7, 0xf1, 0xff, + 0x60, 0x7b, 0x01, 0x1c, 0xff, 0x31, 0x61, 0x73, + 0x00, 0x28, 0xf7, 0xd1, 0x04, 0x20, 0x20, 0x70, + 0xa8, 0x89, 0xf8, 0xf7, 0xda, 0xf9, 0x01, 0x1c, + 0x00, 0x22, 0x0f, 0x20, 0x00, 0xf0, 0x25, 0xff, + 0xb0, 0xbd, 0xef, 0xf7, 0xce, 0xff, 0x6a, 0x21, + 0x49, 0x5b, 0x3c, 0x00, 0x8c, 0x27, 0x01, 0x00, + 0x88, 0x42, 0x0b, 0xd0, 0xe8, 0x89, 0xf8, 0xf7, + 0xcb, 0xf9, 0x01, 0x1c, 0x00, 0x23, 0x00, 0x22, + 0x0f, 0x20, 0x00, 0xf0, 0xf7, 0xff, 0x07, 0x20, + 0x20, 0x70, 0xb0, 0xbd, 0xfd, 0xf7, 0x3a, 0xfe, + 0xb0, 0xbd, 0x00, 0x00, 0x84, 0x66, 0x01, 0x00, + 0xf0, 0xb5, 0x85, 0xb0, 0x04, 0x1c, 0x03, 0x80, + 0x18, 0x0c, 0x60, 0x80, 0x0d, 0x1c, 0x51, 0x78, + 0x10, 0x78, 0x09, 0x02, 0x3c, 0x00, 0xc8, 0x27, + 0x01, 0x00, 0x48, 0x40, 0xa0, 0x80, 0xd1, 0x78, + 0x90, 0x78, 0x09, 0x02, 0x48, 0x40, 0xe0, 0x80, + 0x51, 0x79, 0x10, 0x79, 0x09, 0x02, 0x48, 0x40, + 0x20, 0x81, 0x68, 0x46, 0x1a, 0x49, 0x14, 0x22, + 0xed, 0xf7, 0xe3, 0xfe, 0x00, 0x23, 0x00, 0x20, + 0xd9, 0x07, 0xc9, 0x0f, 0x8c, 0x46, 0x42, 0x00, + 0x56, 0x07, 0x76, 0x0f, 0x61, 0x46, 0x89, 0x19, + 0x49, 0x00, 0x6e, 0x5c, 0x49, 0x19, 0x3c, 0x00, + 0x04, 0x28, 0x01, 0x00, 0x49, 0x78, 0x6f, 0x46, + 0x09, 0x02, 0x4e, 0x40, 0x81, 0x00, 0x79, 0x58, + 0x0f, 0x4f, 0x49, 0x00, 0x61, 0x5a, 0x01, 0x30, + 0x4e, 0x40, 0x31, 0x06, 0x36, 0x0a, 0x76, 0x00, + 0xc9, 0x0d, 0x79, 0x5a, 0xf6, 0x19, 0x01, 0x27, + 0x7f, 0x02, 0xf6, 0x19, 0x36, 0x88, 0x71, 0x40, + 0xa6, 0x5a, 0x89, 0x19, 0xa1, 0x52, 0x05, 0x28, + 0xdc, 0xdb, 0x20, 0x89, 0xc0, 0x18, 0x01, 0x33, + 0x3c, 0x00, 0x40, 0x28, 0x01, 0x00, 0x08, 0x2b, + 0x20, 0x81, 0xd2, 0xdb, 0x05, 0xb0, 0xf0, 0xbd, + 0x00, 0x00, 0xd8, 0x56, 0x01, 0x00, 0xd8, 0x52, + 0x01, 0x00, 0xf0, 0xb5, 0x05, 0x1c, 0x0c, 0x1c, + 0x1e, 0x1c, 0x00, 0x20, 0x89, 0xb0, 0x41, 0x00, + 0x53, 0x5a, 0x01, 0x30, 0x06, 0xaf, 0x7b, 0x52, + 0x05, 0x28, 0xf8, 0xdb, 0x10, 0x89, 0x00, 0xab, + 0x3a, 0x49, 0x80, 0x19, 0x58, 0x84, 0x68, 0x46, + 0x18, 0x22, 0x3c, 0x00, 0x7c, 0x28, 0x01, 0x00, + 0xed, 0xf7, 0x98, 0xfe, 0x00, 0x20, 0x41, 0x00, + 0x0a, 0x19, 0x52, 0x78, 0x63, 0x5c, 0x6f, 0x46, + 0x12, 0x02, 0x53, 0x40, 0x82, 0x00, 0xba, 0x58, + 0x06, 0xaf, 0x52, 0x00, 0xba, 0x5a, 0x31, 0x4f, + 0x01, 0x30, 0x53, 0x40, 0x1a, 0x06, 0x1b, 0x0a, + 0x5b, 0x00, 0xd2, 0x0d, 0xba, 0x5a, 0xdb, 0x19, + 0x01, 0x27, 0x7f, 0x02, 0xdb, 0x19, 0x1b, 0x88, + 0x5a, 0x40, 0x06, 0xab, 0x3c, 0x00, 0xb8, 0x28, + 0x01, 0x00, 0x5b, 0x5a, 0xd2, 0x18, 0x06, 0xab, + 0x5a, 0x52, 0x06, 0x28, 0xde, 0xdb, 0x61, 0x7b, + 0x20, 0x7b, 0x00, 0xab, 0x09, 0x02, 0x48, 0x40, + 0x59, 0x8c, 0x48, 0x40, 0x41, 0x08, 0xc0, 0x03, + 0x48, 0x40, 0x19, 0x8b, 0x40, 0x18, 0x18, 0x83, + 0xe1, 0x7b, 0xa0, 0x7b, 0x09, 0x02, 0x48, 0x40, + 0x19, 0x8b, 0x48, 0x40, 0x41, 0x08, 0xc0, 0x03, + 0x48, 0x40, 0x59, 0x8b, 0x40, 0x18, 0x3c, 0x00, + 0xf4, 0x28, 0x01, 0x00, 0x58, 0x83, 0x02, 0x20, + 0x41, 0x00, 0x06, 0xaa, 0x8a, 0x18, 0x20, 0x3a, + 0xd2, 0x8b, 0x01, 0x30, 0x53, 0x08, 0xd2, 0x03, + 0x5a, 0x40, 0x06, 0xab, 0x5b, 0x5a, 0xd2, 0x18, + 0x06, 0xab, 0x5a, 0x52, 0x06, 0x28, 0xef, 0xdb, + 0x30, 0x0a, 0x28, 0x70, 0x70, 0x04, 0x40, 0x0e, + 0x20, 0x21, 0x08, 0x43, 0x68, 0x70, 0xae, 0x70, + 0x61, 0x78, 0x20, 0x78, 0x00, 0xab, 0x09, 0x02, + 0x3c, 0x00, 0x30, 0x29, 0x01, 0x00, 0x48, 0x40, + 0x59, 0x8c, 0x48, 0x40, 0xc0, 0x05, 0x00, 0x0e, + 0xe8, 0x70, 0x00, 0x20, 0x41, 0x00, 0x06, 0xaa, + 0x53, 0x5a, 0x4a, 0x19, 0x01, 0x30, 0x13, 0x71, + 0x06, 0xab, 0x59, 0x5a, 0x09, 0x0a, 0x51, 0x71, + 0x06, 0x28, 0xf3, 0xdb, 0x09, 0xb0, 0xf0, 0xbd, + 0x00, 0x00, 0xec, 0x56, 0x01, 0x00, 0xd8, 0x52, + 0x01, 0x00, 0xf0, 0xb5, 0x46, 0x68, 0x05, 0x1c, + 0x60, 0x30, 0x3c, 0x00, 0x6c, 0x29, 0x01, 0x00, + 0x85, 0xb0, 0x04, 0x90, 0x60, 0xe0, 0x68, 0x68, + 0x0c, 0x21, 0x07, 0x69, 0x00, 0x20, 0xee, 0xf7, + 0x2d, 0xfe, 0x70, 0x61, 0x01, 0x89, 0x04, 0x39, + 0x09, 0x04, 0x09, 0x0c, 0x01, 0x81, 0x70, 0x69, + 0x00, 0x68, 0x40, 0x18, 0x04, 0x21, 0xee, 0xf7, + 0x21, 0xfe, 0xf0, 0x61, 0x70, 0x69, 0x20, 0x21, + 0x04, 0x68, 0x04, 0x98, 0x04, 0x22, 0x40, 0x7b, + 0x80, 0x01, 0x08, 0x43, 0x3c, 0x00, 0xa8, 0x29, + 0x01, 0x00, 0xe0, 0x70, 0x28, 0x69, 0x40, 0x89, + 0xa0, 0x70, 0x28, 0x69, 0x40, 0x89, 0x00, 0x0a, + 0x20, 0x70, 0x29, 0x69, 0x0c, 0x31, 0xa0, 0x18, + 0xed, 0xf7, 0x9b, 0xfd, 0x20, 0x78, 0x20, 0x21, + 0x40, 0x06, 0x40, 0x0e, 0x08, 0x43, 0x60, 0x70, + 0x28, 0x69, 0x0a, 0x30, 0x01, 0x88, 0x01, 0x31, + 0x09, 0x04, 0x09, 0x0c, 0x01, 0x80, 0x04, 0xd1, + 0x28, 0x69, 0x0c, 0x30, 0x01, 0x68, 0x3c, 0x00, + 0xe4, 0x29, 0x01, 0x00, 0x01, 0x31, 0x01, 0x60, + 0x35, 0x62, 0x61, 0x79, 0x20, 0x79, 0x09, 0x02, + 0x40, 0x18, 0xa1, 0x79, 0x09, 0x04, 0x40, 0x18, + 0xe1, 0x79, 0x09, 0x06, 0x43, 0x18, 0x00, 0x93, + 0xa0, 0x78, 0x21, 0x78, 0x09, 0x02, 0x40, 0x18, + 0x04, 0x04, 0x24, 0x0c, 0x10, 0x20, 0xee, 0xf7, + 0x13, 0xff, 0xb0, 0x61, 0x28, 0x69, 0x3a, 0x1c, + 0x01, 0x68, 0x00, 0x9b, 0x01, 0xa8, 0x0a, 0x32, + 0x3c, 0x00, 0x20, 0x2a, 0x01, 0x00, 0xff, 0xf7, + 0xc8, 0xfe, 0x28, 0x69, 0x23, 0x1c, 0x01, 0x68, + 0xb0, 0x69, 0x01, 0xaa, 0xff, 0xf7, 0x11, 0xff, + 0x36, 0x68, 0x00, 0x2e, 0x9c, 0xd1, 0x03, 0x49, + 0x04, 0x48, 0x6a, 0x68, 0xf7, 0xf7, 0x63, 0xfb, + 0x05, 0xb0, 0xf0, 0xbd, 0x00, 0x00, 0xfd, 0x6b, + 0x00, 0x00, 0xa0, 0x6a, 0x01, 0x00, 0x01, 0x38, + 0x07, 0x49, 0x40, 0x00, 0x09, 0x5c, 0x00, 0x29, + 0x06, 0xd0, 0x3c, 0x00, 0x5c, 0x2a, 0x01, 0x00, + 0x04, 0x49, 0x1c, 0x39, 0x08, 0x5c, 0x00, 0x28, + 0x01, 0xd0, 0x01, 0x20, 0x70, 0x47, 0x00, 0x20, + 0x70, 0x47, 0x00, 0x00, 0xe6, 0x78, 0x01, 0x00, + 0xfe, 0xb5, 0x05, 0x1c, 0x00, 0x20, 0x02, 0x90, + 0x13, 0x48, 0x17, 0x1c, 0x00, 0x68, 0x0c, 0x1c, + 0x86, 0x78, 0x30, 0x1c, 0xfd, 0xf7, 0x28, 0xfa, + 0x00, 0x28, 0x01, 0xd1, 0x02, 0x98, 0xfe, 0xbd, + 0x00, 0x2d, 0x08, 0xd1, 0x3c, 0x00, 0x98, 0x2a, + 0x01, 0x00, 0x20, 0x68, 0x00, 0xab, 0x18, 0x71, + 0x60, 0x68, 0x58, 0x71, 0xa0, 0x68, 0x98, 0x71, + 0x03, 0x20, 0x38, 0x80, 0x29, 0x1c, 0x30, 0x1c, + 0x01, 0xaa, 0x00, 0xf0, 0x0e, 0xf8, 0x00, 0x2d, + 0xec, 0xd0, 0x00, 0xab, 0x19, 0x79, 0x21, 0x60, + 0x59, 0x79, 0x61, 0x60, 0x99, 0x79, 0xa1, 0x60, + 0x0c, 0x21, 0x39, 0x80, 0xe2, 0xe7, 0xf8, 0x6b, + 0x01, 0x00, 0xf8, 0xb5, 0x15, 0x1c, 0x3c, 0x00, + 0xd4, 0x2a, 0x01, 0x00, 0x42, 0x1e, 0x01, 0x38, + 0x47, 0x00, 0x3f, 0x18, 0x1f, 0x48, 0x3e, 0x18, + 0x00, 0x29, 0x06, 0xd0, 0x01, 0x24, 0x03, 0x22, + 0x31, 0x1c, 0x28, 0x1c, 0xed, 0xf7, 0x04, 0xfd, + 0x32, 0xe0, 0x68, 0x78, 0x01, 0x24, 0x00, 0x28, + 0x05, 0xd0, 0x29, 0x78, 0x08, 0x18, 0x01, 0x38, + 0x0e, 0x28, 0x00, 0xd9, 0x00, 0x24, 0x00, 0x2c, + 0x26, 0xd0, 0x00, 0x2a, 0x07, 0xd1, 0x2a, 0x21, + 0x3c, 0x00, 0x10, 0x2b, 0x01, 0x00, 0x12, 0x48, + 0xed, 0xf7, 0x9f, 0xfc, 0x1c, 0x21, 0x11, 0x48, + 0xed, 0xf7, 0x9b, 0xfc, 0x0f, 0x48, 0x03, 0x22, + 0x29, 0x1c, 0x30, 0x1c, 0xed, 0xf7, 0xe7, 0xfc, + 0x0c, 0x48, 0x71, 0x78, 0xc0, 0x5d, 0xb2, 0x78, + 0x00, 0x29, 0x0e, 0xd0, 0x00, 0x2a, 0x0c, 0xd0, + 0x01, 0x22, 0x43, 0x18, 0x08, 0x4d, 0x06, 0xe0, + 0x41, 0x00, 0x49, 0x19, 0x10, 0x39, 0x8a, 0x73, + 0xb7, 0x78, 0x3c, 0x00, 0x4c, 0x2b, 0x01, 0x00, + 0x01, 0x30, 0xcf, 0x73, 0x83, 0x42, 0xf6, 0xd8, + 0xfe, 0xf7, 0x60, 0xf8, 0x20, 0x1c, 0xf8, 0xbd, + 0xeb, 0x62, 0x01, 0x00, 0xca, 0x78, 0x01, 0x00, + 0x70, 0xb5, 0x05, 0x1c, 0x1c, 0x48, 0x00, 0x23, + 0xc0, 0x56, 0x43, 0x1c, 0x32, 0xd1, 0xa8, 0x7a, + 0xf8, 0xf7, 0x0c, 0xf9, 0x00, 0x26, 0x00, 0x28, + 0x18, 0x4c, 0x08, 0xd0, 0xe8, 0x69, 0xe1, 0x6b, + 0x00, 0x29, 0x0b, 0xd1, 0x3c, 0x00, 0x88, 0x2b, + 0x01, 0x00, 0x66, 0x63, 0x01, 0x21, 0xe1, 0x63, + 0xa6, 0x63, 0x06, 0xe0, 0xa8, 0x69, 0xe1, 0x6b, + 0x00, 0x29, 0x02, 0xd0, 0x66, 0x63, 0xa6, 0x63, + 0xe6, 0x63, 0xa1, 0x6b, 0x01, 0x31, 0xa1, 0x63, + 0x82, 0x03, 0x01, 0xd5, 0x0e, 0x4a, 0x10, 0x43, + 0xe2, 0x6b, 0x00, 0x2a, 0x00, 0xd0, 0x40, 0x42, + 0x62, 0x6b, 0x10, 0x18, 0x60, 0x63, 0x08, 0x29, + 0x0b, 0xd1, 0x00, 0x28, 0x01, 0xdd, 0x3c, 0x00, + 0xc4, 0x2b, 0x01, 0x00, 0x01, 0x20, 0x03, 0xe0, + 0x00, 0x28, 0x03, 0xda, 0x00, 0x20, 0xc0, 0x43, + 0xef, 0xf7, 0x62, 0xfe, 0x66, 0x63, 0xa6, 0x63, + 0x70, 0xbd, 0x00, 0x00, 0xf4, 0x6b, 0x01, 0x00, + 0x84, 0x6a, 0x01, 0x00, 0x00, 0x00, 0xfe, 0xff, + 0x0c, 0x21, 0x05, 0x4a, 0x41, 0x43, 0x89, 0x18, + 0x80, 0xb5, 0x89, 0x78, 0x00, 0x29, 0x01, 0xd1, + 0xf3, 0xf7, 0xf2, 0xfa, 0x80, 0xbd, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0x2c, 0x01, 0x00, 0x60, 0x7b, + 0x01, 0x00, 0x80, 0xb5, 0x01, 0x1c, 0x00, 0x20, + 0xf7, 0xf7, 0x03, 0xfa, 0x80, 0xbd, 0x80, 0xb5, + 0x01, 0x1c, 0x01, 0x20, 0xf7, 0xf7, 0xfd, 0xf9, + 0x80, 0xbd, 0x02, 0x49, 0x89, 0x68, 0x40, 0x1a, + 0xc0, 0x0f, 0x70, 0x47, 0x00, 0x00, 0x00, 0x01, + 0x07, 0x00, 0x02, 0x49, 0x89, 0x68, 0x08, 0x1a, + 0xc0, 0x17, 0x01, 0x30, 0x70, 0x47, 0x00, 0x01, + 0x07, 0x00, 0x3c, 0x00, 0x3c, 0x2c, 0x01, 0x00, + 0x05, 0x49, 0x4a, 0x68, 0x01, 0x23, 0x1a, 0x43, + 0x4a, 0x60, 0x8a, 0x68, 0x10, 0x18, 0x88, 0x60, + 0x48, 0x68, 0x98, 0x43, 0x48, 0x60, 0x70, 0x47, + 0x00, 0x01, 0x07, 0x00, 0x10, 0xb5, 0x15, 0x4b, + 0x00, 0x21, 0x0a, 0x01, 0x9a, 0x58, 0x00, 0x2a, + 0x17, 0xd1, 0x01, 0x24, 0x0a, 0x01, 0x9c, 0x50, + 0xd2, 0x18, 0x10, 0x73, 0x00, 0x23, 0x53, 0x73, + 0x02, 0x23, 0x01, 0x28, 0x3c, 0x00, 0x78, 0x2c, + 0x01, 0x00, 0x0e, 0x4a, 0x05, 0xd1, 0xc8, 0x00, + 0x80, 0x18, 0x10, 0x30, 0x02, 0x78, 0x9a, 0x43, + 0x04, 0xe0, 0xc8, 0x00, 0x80, 0x18, 0x10, 0x30, + 0x02, 0x78, 0x1a, 0x43, 0x02, 0x70, 0x02, 0xe0, + 0x01, 0x31, 0x08, 0x29, 0xe0, 0xdb, 0x08, 0x29, + 0x04, 0xd1, 0x01, 0x21, 0x99, 0x20, 0xee, 0xf7, + 0xfe, 0xfa, 0x03, 0x49, 0x08, 0x04, 0x00, 0x0c, + 0x10, 0xbd, 0xac, 0x73, 0x01, 0x00, 0x3c, 0x00, + 0xb4, 0x2c, 0x01, 0x00, 0x00, 0x60, 0x07, 0x00, + 0xff, 0xff, 0x00, 0x00, 0xf7, 0xb5, 0x19, 0x4f, + 0x19, 0x4e, 0x0c, 0x1c, 0xc1, 0x00, 0xc9, 0x19, + 0xb2, 0x68, 0x10, 0x31, 0x81, 0xb0, 0x01, 0x3a, + 0x4a, 0x60, 0x0b, 0x78, 0x1d, 0x1c, 0x0d, 0x22, + 0x93, 0x43, 0x0b, 0x70, 0x01, 0x22, 0x82, 0x40, + 0x3a, 0x73, 0x12, 0x4b, 0x00, 0x01, 0x03, 0x9a, + 0xc0, 0x18, 0x82, 0x60, 0x10, 0x4a, 0x10, 0x1c, + 0x3c, 0x00, 0xf0, 0x2c, 0x01, 0x00, 0x20, 0x30, + 0x87, 0x79, 0x00, 0xab, 0x1f, 0x70, 0xc0, 0x79, + 0x58, 0x70, 0xb0, 0x68, 0x03, 0x30, 0x00, 0x23, + 0x26, 0x1a, 0x01, 0xd5, 0x04, 0x1c, 0x01, 0x23, + 0x4c, 0x60, 0x0d, 0x70, 0x00, 0x2b, 0x04, 0xd0, + 0x20, 0x1c, 0xff, 0xf7, 0x8a, 0xff, 0x00, 0x28, + 0xfa, 0xd0, 0x00, 0xab, 0x18, 0x88, 0xd0, 0x84, + 0xff, 0xbd, 0x00, 0x60, 0x07, 0x00, 0x00, 0x01, + 0x07, 0x00, 0x3c, 0x00, 0x2c, 0x2d, 0x01, 0x00, + 0xac, 0x73, 0x01, 0x00, 0x00, 0x10, 0x07, 0x00, + 0x30, 0xb5, 0x00, 0x20, 0xc0, 0x43, 0x0b, 0x4c, + 0x09, 0x4b, 0x00, 0x22, 0xd1, 0x00, 0x09, 0x19, + 0x0d, 0x7c, 0xed, 0x07, 0x07, 0xd5, 0x49, 0x69, + 0x9d, 0x68, 0x49, 0x1b, 0x00, 0xd5, 0x00, 0x21, + 0x81, 0x42, 0x00, 0xd2, 0x08, 0x1c, 0x01, 0x32, + 0x08, 0x2a, 0xef, 0xdb, 0x30, 0xbd, 0x00, 0x00, + 0x00, 0x01, 0x07, 0x00, 0x3c, 0x00, 0x68, 0x2d, + 0x01, 0x00, 0x00, 0x60, 0x07, 0x00, 0xb0, 0xb5, + 0x08, 0x28, 0x0b, 0xd2, 0x08, 0x4d, 0x04, 0x01, + 0x29, 0x59, 0x00, 0x29, 0x04, 0xd0, 0x00, 0xf0, + 0x4a, 0xf8, 0x00, 0x20, 0x28, 0x51, 0xb0, 0xbd, + 0x02, 0x21, 0x00, 0xe0, 0x03, 0x21, 0x99, 0x20, + 0xee, 0xf7, 0x89, 0xfa, 0xb0, 0xbd, 0xac, 0x73, + 0x01, 0x00, 0x03, 0x49, 0x00, 0x01, 0x40, 0x18, + 0x41, 0x7b, 0x08, 0x22, 0x11, 0x43, 0x3c, 0x00, + 0xa4, 0x2d, 0x01, 0x00, 0x41, 0x73, 0x70, 0x47, + 0xac, 0x73, 0x01, 0x00, 0x01, 0x48, 0x80, 0x68, + 0x70, 0x47, 0x00, 0x00, 0x00, 0x01, 0x07, 0x00, + 0x70, 0xb5, 0x0b, 0x4e, 0x09, 0x4d, 0x00, 0x22, + 0xd0, 0x00, 0x84, 0x19, 0x20, 0x7c, 0xc0, 0x07, + 0x07, 0xd5, 0x60, 0x69, 0xff, 0xf7, 0x26, 0xff, + 0x00, 0x28, 0x02, 0xd0, 0xa8, 0x68, 0x32, 0x30, + 0x60, 0x61, 0x01, 0x32, 0x08, 0x2a, 0xef, 0xdb, + 0x3c, 0x00, 0xe0, 0x2d, 0x01, 0x00, 0x70, 0xbd, + 0x00, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x60, + 0x07, 0x00, 0x02, 0x4a, 0xc0, 0x00, 0x80, 0x18, + 0x01, 0x74, 0x70, 0x47, 0x00, 0x00, 0x00, 0x60, + 0x07, 0x00, 0x04, 0x49, 0xc0, 0x00, 0x41, 0x18, + 0x08, 0x7c, 0x08, 0x23, 0x02, 0x1c, 0x9a, 0x43, + 0x0a, 0x74, 0x70, 0x47, 0x00, 0x00, 0x00, 0x60, + 0x07, 0x00, 0x70, 0xb5, 0x08, 0x28, 0x17, 0xd2, + 0x0e, 0x49, 0x3c, 0x00, 0x1c, 0x2e, 0x01, 0x00, + 0x8a, 0x68, 0x0e, 0x4d, 0x01, 0x3a, 0xc1, 0x00, + 0x49, 0x19, 0x4a, 0x61, 0x0c, 0x4b, 0x9a, 0x79, + 0x10, 0x31, 0x0c, 0x78, 0x0d, 0x26, 0xb4, 0x43, + 0x0c, 0x70, 0x01, 0x21, 0x81, 0x40, 0x29, 0x73, + 0x9a, 0x71, 0x09, 0x4a, 0x07, 0x49, 0x00, 0x01, + 0x80, 0x18, 0x41, 0x60, 0x70, 0xbd, 0x05, 0x21, + 0x99, 0x20, 0xee, 0xf7, 0x29, 0xfa, 0x70, 0xbd, + 0x00, 0x01, 0x07, 0x00, 0x3c, 0x00, 0x58, 0x2e, + 0x01, 0x00, 0x00, 0x60, 0x07, 0x00, 0x20, 0x10, + 0x07, 0x00, 0xd1, 0x75, 0x00, 0x00, 0xac, 0x73, + 0x01, 0x00, 0xf8, 0xb5, 0x9e, 0x46, 0x1a, 0x4b, + 0x94, 0x46, 0x9b, 0x68, 0x1a, 0x4c, 0xc2, 0x00, + 0x12, 0x19, 0x01, 0x3b, 0x53, 0x61, 0x15, 0x1c, + 0x18, 0x4c, 0xa6, 0x79, 0x2a, 0x1c, 0x10, 0x32, + 0x13, 0x78, 0x0d, 0x27, 0xbb, 0x43, 0x13, 0x70, + 0x01, 0x27, 0x12, 0x4b, 0x87, 0x40, 0x3c, 0x00, + 0x94, 0x2e, 0x01, 0x00, 0x1f, 0x73, 0xa6, 0x71, + 0x12, 0x4e, 0x00, 0x01, 0x80, 0x19, 0x63, 0x46, + 0x43, 0x60, 0x73, 0x46, 0x83, 0x60, 0x13, 0x78, + 0x40, 0x7b, 0xa6, 0x79, 0x01, 0x27, 0x18, 0x43, + 0x38, 0x43, 0x14, 0x35, 0x00, 0xab, 0x1e, 0x70, + 0xe4, 0x79, 0x5c, 0x70, 0x06, 0x4b, 0x9b, 0x68, + 0x03, 0x33, 0xcc, 0x1a, 0x00, 0xd5, 0x19, 0x1c, + 0x29, 0x60, 0x10, 0x70, 0x00, 0xab, 0x18, 0x88, + 0x3c, 0x00, 0xd0, 0x2e, 0x01, 0x00, 0x03, 0x4c, + 0x20, 0x3c, 0xe0, 0x84, 0xf8, 0xbd, 0x00, 0x01, + 0x07, 0x00, 0x00, 0x60, 0x07, 0x00, 0x20, 0x10, + 0x07, 0x00, 0xac, 0x73, 0x01, 0x00, 0x00, 0xb5, + 0x01, 0x1c, 0xff, 0xf7, 0x5e, 0xff, 0x42, 0x18, + 0x10, 0x1c, 0xff, 0xf7, 0x92, 0xfe, 0x00, 0x28, + 0xfa, 0xd0, 0x00, 0xbd, 0x00, 0x00, 0x89, 0x1a, + 0x40, 0x1a, 0x99, 0x18, 0x88, 0x42, 0x01, 0xd8, + 0x01, 0x20, 0x3c, 0x00, 0x0c, 0x2f, 0x01, 0x00, + 0x70, 0x47, 0x00, 0x20, 0x70, 0x47, 0x00, 0x00, + 0xf8, 0xb5, 0x0f, 0x1c, 0x04, 0x1c, 0x00, 0x28, + 0x01, 0xd1, 0xee, 0xf7, 0xef, 0xf9, 0x21, 0x1c, + 0x01, 0x20, 0xff, 0xf7, 0x19, 0xfa, 0x41, 0x20, + 0x00, 0x5d, 0x00, 0x28, 0x01, 0xd1, 0x00, 0x25, + 0x04, 0xe0, 0x02, 0x28, 0x01, 0xd1, 0x05, 0x25, + 0x00, 0xe0, 0x01, 0x25, 0xe0, 0x68, 0xee, 0xf7, + 0x29, 0xfb, 0xa6, 0x6b, 0x3c, 0x00, 0x48, 0x2f, + 0x01, 0x00, 0x00, 0x2e, 0x10, 0xd0, 0x00, 0x2f, + 0x06, 0xd0, 0x2f, 0x20, 0x02, 0x5d, 0x20, 0x6a, + 0x41, 0x6b, 0x28, 0x1c, 0xed, 0xf7, 0x44, 0xfa, + 0xa0, 0x69, 0x00, 0x28, 0x01, 0xd0, 0xee, 0xf7, + 0x46, 0xfc, 0x20, 0x6a, 0xee, 0xf7, 0x43, 0xfc, + 0x20, 0x1c, 0xee, 0xf7, 0x40, 0xfc, 0x30, 0x1c, + 0xf8, 0xbd, 0xb0, 0xb5, 0x04, 0x1c, 0xc0, 0x6b, + 0x00, 0x28, 0x09, 0xd0, 0x20, 0x69, 0x3c, 0x00, + 0x84, 0x2f, 0x01, 0x00, 0x00, 0x8b, 0xee, 0xf7, + 0x55, 0xf9, 0x00, 0x28, 0x03, 0xd0, 0x21, 0x1c, + 0x06, 0x20, 0xff, 0xf7, 0xe3, 0xf9, 0x08, 0x4d, + 0x20, 0x1c, 0xa9, 0x6d, 0xff, 0xf7, 0xba, 0xff, + 0x00, 0x28, 0x07, 0xd0, 0xe8, 0x68, 0x01, 0x30, + 0xe8, 0x60, 0x28, 0x6a, 0x01, 0x38, 0x28, 0x62, + 0xfc, 0xf7, 0x78, 0xf8, 0xb0, 0xbd, 0x00, 0x00, + 0xc4, 0x69, 0x01, 0x00, 0x10, 0xb5, 0x06, 0x4c, + 0x3c, 0x00, 0xc0, 0x2f, 0x01, 0x00, 0xe1, 0x6d, + 0xff, 0xf7, 0xa7, 0xff, 0x00, 0x28, 0x04, 0xd0, + 0xe0, 0x69, 0x01, 0x38, 0xe0, 0x61, 0xfc, 0xf7, + 0x68, 0xf8, 0x10, 0xbd, 0x00, 0x00, 0xc4, 0x69, + 0x01, 0x00, 0x0c, 0x23, 0x0c, 0x49, 0x58, 0x43, + 0x40, 0x18, 0x10, 0xb5, 0x44, 0x68, 0xa1, 0x68, + 0x00, 0x29, 0x02, 0xd0, 0x20, 0x1c, 0xed, 0xf7, + 0xf3, 0xf9, 0xe0, 0x6b, 0x00, 0x28, 0x08, 0xd0, + 0x20, 0x69, 0x3c, 0x00, 0xfc, 0x2f, 0x01, 0x00, + 0x00, 0x8b, 0xee, 0xf7, 0x19, 0xf9, 0x00, 0x28, + 0x02, 0xd0, 0x20, 0x1c, 0xf9, 0xf7, 0x26, 0xf9, + 0x10, 0xbd, 0x00, 0x00, 0x60, 0x7b, 0x01, 0x00, + 0xf8, 0xb5, 0x22, 0x49, 0x48, 0x68, 0x80, 0x00, + 0x06, 0xd4, 0x01, 0x20, 0x40, 0x07, 0x08, 0x60, + 0x4a, 0x69, 0x92, 0x00, 0x00, 0xd4, 0x48, 0x60, + 0x1d, 0x4f, 0x78, 0x7e, 0xc3, 0x06, 0x01, 0x20, + 0x02, 0x1c, 0xdb, 0x0e, 0x3c, 0x00, 0x38, 0x30, + 0x01, 0x00, 0x9a, 0x40, 0x0a, 0x60, 0x79, 0x69, + 0x8c, 0x68, 0x8c, 0x60, 0x21, 0x07, 0x89, 0x0f, + 0x09, 0xd0, 0x21, 0x07, 0x04, 0xd5, 0x0b, 0x21, + 0x9e, 0x20, 0xee, 0xf7, 0x28, 0xf9, 0x00, 0xe0, + 0x78, 0x64, 0x0c, 0x20, 0x84, 0x43, 0x12, 0x48, + 0x3d, 0x68, 0x06, 0x5d, 0x6c, 0x68, 0x2c, 0x34, + 0x06, 0xe0, 0xa0, 0x68, 0x00, 0x68, 0xa0, 0x60, + 0xe9, 0x68, 0x28, 0x1c, 0xed, 0xf7, 0x3c, 0x00, + 0x74, 0x30, 0x01, 0x00, 0xb2, 0xf9, 0x01, 0x3e, + 0xf6, 0xd2, 0xa0, 0x68, 0x80, 0x68, 0x00, 0x28, + 0x0d, 0xd0, 0x40, 0x89, 0x00, 0x28, 0x0a, 0xd0, + 0x78, 0x6c, 0x00, 0x28, 0x07, 0xd1, 0x78, 0x69, + 0x80, 0x68, 0x80, 0x07, 0x03, 0xd1, 0x0c, 0x21, + 0x9e, 0x20, 0xee, 0xf7, 0x03, 0xf9, 0xf8, 0xbd, + 0x00, 0x10, 0x07, 0x00, 0xcc, 0x6d, 0x01, 0x00, + 0xb4, 0x44, 0x01, 0x00, 0x09, 0x49, 0x80, 0xb5, + 0x3c, 0x00, 0xb0, 0x30, 0x01, 0x00, 0x08, 0x7e, + 0xc2, 0x06, 0xd2, 0x0e, 0x01, 0x20, 0x90, 0x40, + 0x07, 0x4a, 0x10, 0x60, 0x00, 0x20, 0x0a, 0x69, + 0xc0, 0x43, 0x90, 0x60, 0x08, 0x68, 0x24, 0x31, + 0x06, 0xc9, 0x03, 0x69, 0xed, 0xf7, 0x86, 0xf9, + 0x80, 0xbd, 0xcc, 0x6d, 0x01, 0x00, 0x00, 0x10, + 0x07, 0x00, 0xf8, 0xb5, 0x44, 0x68, 0x06, 0x1c, + 0x2c, 0x34, 0x20, 0x68, 0x0d, 0x1c, 0x80, 0x68, + 0x00, 0x90, 0x3c, 0x00, 0xec, 0x30, 0x01, 0x00, + 0x00, 0x28, 0x00, 0xd0, 0xc5, 0x60, 0x20, 0x68, + 0x00, 0x68, 0x20, 0x60, 0x40, 0x68, 0x00, 0x28, + 0x03, 0xd0, 0x0a, 0x21, 0x9e, 0x20, 0xee, 0xf7, + 0xcf, 0xf8, 0x20, 0x68, 0x45, 0x60, 0x28, 0x1c, + 0x02, 0xe0, 0x00, 0x22, 0x42, 0x60, 0x08, 0x1c, + 0xc1, 0x68, 0x00, 0x29, 0xf9, 0xd1, 0x71, 0x68, + 0x60, 0x27, 0x0b, 0x1c, 0x40, 0x33, 0x9c, 0x46, + 0x9b, 0x78, 0xca, 0x7e, 0x3c, 0x00, 0x28, 0x31, + 0x01, 0x00, 0x5b, 0x01, 0x12, 0x07, 0x12, 0x0f, + 0x3b, 0x40, 0x1a, 0x43, 0x8b, 0x8f, 0xff, 0x27, + 0x3f, 0x04, 0x1b, 0x04, 0x3b, 0x40, 0x1a, 0x43, + 0x90, 0x23, 0x1a, 0x43, 0x42, 0x60, 0x63, 0x46, + 0x9a, 0x78, 0x01, 0x32, 0xd2, 0x07, 0xd2, 0x0f, + 0x9a, 0x70, 0x89, 0x6b, 0xc1, 0x60, 0x21, 0x68, + 0x88, 0x60, 0x00, 0x98, 0x00, 0x28, 0x01, 0xd0, + 0x00, 0x98, 0xc5, 0x60, 0x0a, 0x4f, 0x3c, 0x00, + 0x64, 0x31, 0x01, 0x00, 0xbd, 0x79, 0xa0, 0x69, + 0x00, 0x28, 0x0c, 0xd0, 0x00, 0x22, 0xa2, 0x61, + 0x74, 0x68, 0x60, 0x69, 0xef, 0xf7, 0x2e, 0xff, + 0xe0, 0x6a, 0x61, 0x69, 0x40, 0x68, 0x48, 0x60, + 0x61, 0x69, 0x01, 0x20, 0x08, 0x60, 0xbd, 0x71, + 0xf8, 0xbd, 0x00, 0x00, 0x20, 0x10, 0x07, 0x00, + 0xfe, 0xb5, 0x44, 0x68, 0x0f, 0x1c, 0x01, 0x94, + 0x2c, 0x34, 0x20, 0x1c, 0x12, 0x30, 0x02, 0x90, + 0x3c, 0x00, 0xa0, 0x31, 0x01, 0x00, 0x2c, 0xe0, + 0x0c, 0x20, 0xee, 0xf7, 0x00, 0xfb, 0x05, 0x1c, + 0x60, 0x68, 0x00, 0x28, 0x1d, 0xd1, 0x02, 0x98, + 0x00, 0x21, 0x00, 0x90, 0x00, 0x20, 0xee, 0xf7, + 0x0e, 0xfa, 0x06, 0x1c, 0x00, 0x98, 0x04, 0x21, + 0xee, 0xf7, 0x09, 0xfa, 0x01, 0x1c, 0x01, 0x98, + 0xc0, 0x7e, 0x00, 0x07, 0x00, 0x0f, 0xd0, 0x30, + 0x70, 0x60, 0x01, 0x98, 0xc0, 0x7e, 0x00, 0x07, + 0x00, 0x0f, 0x3c, 0x00, 0xdc, 0x31, 0x01, 0x00, + 0xf0, 0x30, 0x48, 0x60, 0x30, 0x1c, 0xee, 0xf7, + 0x19, 0xf9, 0x65, 0x60, 0xe6, 0x60, 0x01, 0xe0, + 0x20, 0x68, 0x05, 0x60, 0x60, 0x68, 0x28, 0x60, + 0x25, 0x60, 0x00, 0x20, 0x68, 0x60, 0xa8, 0x60, + 0x38, 0x1c, 0xff, 0x30, 0x00, 0x06, 0x00, 0x0e, + 0x39, 0x1c, 0x07, 0x1c, 0x00, 0x29, 0xca, 0xd1, + 0x60, 0x68, 0xa0, 0x60, 0xfe, 0xbd, 0x00, 0x00, + 0xff, 0xb5, 0x05, 0x1c, 0x3c, 0x00, 0x18, 0x32, + 0x01, 0x00, 0x08, 0x1c, 0x00, 0x26, 0x81, 0xb0, + 0xf4, 0xf7, 0x2f, 0xfe, 0x04, 0x1c, 0x02, 0xd0, + 0x60, 0x68, 0xff, 0x28, 0x01, 0xd1, 0x06, 0x26, + 0x28, 0xe0, 0x21, 0x1c, 0x20, 0x31, 0x0a, 0x78, + 0x01, 0x2a, 0x01, 0xd1, 0x03, 0x26, 0x21, 0xe0, + 0x01, 0x27, 0x25, 0x60, 0x0f, 0x70, 0x11, 0xc5, + 0x1d, 0x48, 0x08, 0x3d, 0x68, 0x61, 0x03, 0x98, + 0x6a, 0x46, 0xe8, 0x60, 0x04, 0x98, 0x3c, 0x00, + 0x54, 0x32, 0x01, 0x00, 0x28, 0x61, 0x1a, 0x48, + 0xa8, 0x61, 0x1a, 0x48, 0xe8, 0x61, 0x1a, 0x48, + 0x28, 0x62, 0x1a, 0x48, 0x68, 0x62, 0x20, 0x7e, + 0xa1, 0x68, 0xed, 0xf7, 0xb3, 0xfe, 0x00, 0x28, + 0x06, 0xd1, 0x60, 0x7e, 0xe1, 0x68, 0x6a, 0x46, + 0xed, 0xf7, 0xac, 0xfe, 0x00, 0x28, 0x07, 0xd0, + 0x04, 0x26, 0x31, 0x1c, 0x9e, 0x20, 0xee, 0xf7, + 0x0d, 0xf8, 0x30, 0x1c, 0x05, 0xb0, 0xf0, 0xbd, + 0x3c, 0x00, 0x90, 0x32, 0x01, 0x00, 0x6a, 0x46, + 0x0f, 0x49, 0x1d, 0x20, 0xed, 0xf7, 0x9d, 0xfe, + 0x01, 0x21, 0x0d, 0x48, 0x49, 0x07, 0x01, 0x60, + 0x22, 0x7e, 0x3b, 0x1c, 0xd2, 0x06, 0xd2, 0x0e, + 0x93, 0x40, 0x43, 0x60, 0x62, 0x7e, 0xd2, 0x06, + 0xd2, 0x0e, 0x97, 0x40, 0x47, 0x60, 0x41, 0x60, + 0xe6, 0xe7, 0x31, 0x33, 0x01, 0x00, 0xd9, 0x32, + 0x01, 0x00, 0x91, 0x31, 0x01, 0x00, 0xdd, 0x30, + 0x01, 0x00, 0x3c, 0x00, 0xcc, 0x32, 0x01, 0x00, + 0xfd, 0x32, 0x01, 0x00, 0x71, 0x33, 0x01, 0x00, + 0x00, 0x10, 0x07, 0x00, 0x42, 0x68, 0x2c, 0x32, + 0x50, 0x68, 0x43, 0x68, 0x0b, 0x60, 0x81, 0x68, + 0x4b, 0x89, 0x0b, 0x81, 0x83, 0x68, 0x00, 0x21, + 0xd9, 0x60, 0x41, 0x60, 0x81, 0x60, 0x00, 0x68, + 0x50, 0x60, 0x00, 0x20, 0x70, 0x47, 0x00, 0x00, + 0x70, 0xb5, 0x42, 0x68, 0xff, 0x26, 0x91, 0x87, + 0x10, 0x6b, 0x0c, 0x04, 0x3c, 0x00, 0x08, 0x33, + 0x01, 0x00, 0x05, 0x1c, 0x36, 0x04, 0x34, 0x40, + 0x43, 0x68, 0x59, 0x68, 0xb1, 0x43, 0x21, 0x43, + 0x59, 0x60, 0x00, 0x68, 0xa8, 0x42, 0xf7, 0xd1, + 0x10, 0x6b, 0x51, 0x69, 0x40, 0x68, 0x48, 0x60, + 0x51, 0x69, 0x01, 0x20, 0x08, 0x60, 0x70, 0xbd, + 0x00, 0x00, 0xb0, 0xb5, 0x43, 0x68, 0x08, 0x1c, + 0x59, 0x62, 0x9a, 0x62, 0x00, 0x25, 0x0a, 0xe0, + 0x45, 0x81, 0xc4, 0x68, 0x2a, 0x1c, 0x3c, 0x00, + 0x44, 0x33, 0x01, 0x00, 0x00, 0x2c, 0x03, 0xd1, + 0x9a, 0x7e, 0x12, 0x07, 0x12, 0x0f, 0x10, 0x32, + 0x42, 0x60, 0x20, 0x1c, 0x00, 0x28, 0xf2, 0xd1, + 0x18, 0x69, 0x41, 0x60, 0x19, 0x69, 0x01, 0x20, + 0x08, 0x60, 0x02, 0x48, 0x00, 0x68, 0xed, 0xf7, + 0x37, 0xf8, 0xb0, 0xbd, 0x5c, 0x5b, 0x01, 0x00, + 0x01, 0x20, 0x05, 0x49, 0x40, 0x07, 0x80, 0xb5, + 0x88, 0x60, 0x04, 0x48, 0x01, 0x68, 0x0d, 0x20, + 0x3c, 0x00, 0x80, 0x33, 0x01, 0x00, 0xfe, 0xf7, + 0xe6, 0xff, 0x80, 0xbd, 0x00, 0x00, 0x00, 0x10, + 0x07, 0x00, 0xc4, 0x60, 0x01, 0x00, 0xf8, 0xb5, + 0x0e, 0x4f, 0x0c, 0x4e, 0x00, 0x24, 0x48, 0x20, + 0x60, 0x43, 0xc5, 0x19, 0x48, 0x21, 0x28, 0x1c, + 0xed, 0xf7, 0x7b, 0xf8, 0x1c, 0x20, 0x60, 0x43, + 0x81, 0x19, 0x28, 0x1d, 0x1c, 0x22, 0xed, 0xf7, + 0xfe, 0xf8, 0x1c, 0x23, 0xe8, 0x56, 0x05, 0x49, + 0xfb, 0xf7, 0x3c, 0x00, 0xbc, 0x33, 0x01, 0x00, + 0xcd, 0xf8, 0x01, 0x34, 0x01, 0x2c, 0xe9, 0xd3, + 0xf8, 0xbd, 0x00, 0x00, 0xb8, 0x44, 0x01, 0x00, + 0xcc, 0x6d, 0x01, 0x00, 0x15, 0x32, 0x01, 0x00, + 0xff, 0xb5, 0x05, 0x1c, 0x0a, 0x30, 0x06, 0x1c, + 0x81, 0xb0, 0xf2, 0xf7, 0xdd, 0xf8, 0x18, 0x4f, + 0x04, 0x1c, 0x39, 0x88, 0xef, 0xf7, 0xbc, 0xfc, + 0x32, 0x88, 0x78, 0x68, 0x02, 0x80, 0x72, 0x88, + 0x02, 0x30, 0x02, 0x80, 0x3c, 0x00, 0xf8, 0x33, + 0x01, 0x00, 0xb1, 0x88, 0x12, 0x4e, 0x41, 0x80, + 0x28, 0x88, 0x08, 0x36, 0x40, 0x05, 0x00, 0x28, + 0x05, 0xda, 0x69, 0x88, 0x03, 0x9a, 0x20, 0x1c, + 0xf7, 0xf7, 0x01, 0xfd, 0x00, 0xe0, 0x00, 0x20, + 0x70, 0x80, 0xf8, 0xf7, 0x5e, 0xfc, 0x01, 0x21, + 0x09, 0x03, 0x00, 0x28, 0x30, 0x88, 0x01, 0xd0, + 0x88, 0x43, 0x00, 0xe0, 0x08, 0x43, 0x30, 0x80, + 0x05, 0x48, 0x00, 0x22, 0x00, 0x21, 0x3c, 0x00, + 0x34, 0x34, 0x01, 0x00, 0x14, 0x30, 0xef, 0xf7, + 0x65, 0xfc, 0x20, 0x1c, 0xf9, 0xf7, 0x74, 0xf8, + 0x05, 0xb0, 0xf0, 0xbd, 0xb0, 0x7a, 0x01, 0x00, + 0x10, 0xb5, 0x0e, 0x4c, 0x60, 0x68, 0xf8, 0xf7, + 0x95, 0xf9, 0x20, 0x68, 0x00, 0x6a, 0x00, 0x28, + 0x13, 0xd1, 0xf8, 0xf7, 0xbf, 0xfc, 0x00, 0x28, + 0x08, 0xd0, 0x21, 0x68, 0x01, 0x20, 0x08, 0x62, + 0x1f, 0x21, 0x00, 0x22, 0x83, 0x20, 0x00, 0xf0, + 0x3c, 0x00, 0x70, 0x34, 0x01, 0x00, 0x9f, 0xf9, + 0x02, 0xe0, 0x60, 0x68, 0xf8, 0xf7, 0x21, 0xfa, + 0xff, 0xf7, 0x97, 0xfc, 0x21, 0x68, 0x08, 0x61, + 0x10, 0xbd, 0x14, 0x7a, 0x01, 0x00, 0xfe, 0xb5, + 0x1b, 0x4e, 0x0f, 0x1c, 0x1d, 0x1c, 0x14, 0x1c, + 0xb0, 0x60, 0x08, 0x1c, 0xf7, 0xf7, 0x2b, 0xff, + 0xb0, 0x80, 0x34, 0x73, 0x35, 0x62, 0x38, 0x1c, + 0x01, 0xaa, 0x02, 0xa9, 0xf7, 0xf7, 0x25, 0xff, + 0x00, 0xab, 0x3c, 0x00, 0xac, 0x34, 0x01, 0x00, + 0x18, 0x7a, 0x01, 0x28, 0x18, 0xd1, 0x18, 0x79, + 0x0b, 0x28, 0x08, 0xd1, 0x30, 0x7f, 0x24, 0x23, + 0x0f, 0x49, 0x58, 0x43, 0x40, 0x18, 0x80, 0x68, + 0xec, 0xf7, 0x88, 0xff, 0xfe, 0xbd, 0x00, 0xab, + 0x18, 0x79, 0x0a, 0x28, 0x08, 0xd1, 0xf7, 0xf7, + 0x39, 0xfd, 0x07, 0x1c, 0x29, 0x1c, 0x20, 0x1c, + 0xf7, 0xf7, 0x16, 0xfd, 0x38, 0x18, 0xb0, 0x80, + 0x30, 0x7f, 0x24, 0x23, 0x3c, 0x00, 0xe8, 0x34, + 0x01, 0x00, 0x04, 0x49, 0x58, 0x43, 0x40, 0x18, + 0x40, 0x68, 0xec, 0xf7, 0x72, 0xff, 0xe8, 0xe7, + 0x00, 0x00, 0xd4, 0x79, 0x01, 0x00, 0x94, 0x46, + 0x01, 0x00, 0xb0, 0xb5, 0xff, 0xf7, 0x53, 0xfc, + 0x04, 0x1c, 0xfb, 0xf7, 0xfc, 0xfa, 0x0c, 0x4d, + 0x29, 0x68, 0x09, 0x69, 0x09, 0x1b, 0x0c, 0x1a, + 0x02, 0x21, 0x1f, 0x20, 0x00, 0xf0, 0x8b, 0xf8, + 0x14, 0x2c, 0x06, 0xdd, 0x02, 0x22, 0x3c, 0x00, + 0x24, 0x35, 0x01, 0x00, 0x21, 0x1c, 0x1f, 0x20, + 0x00, 0xf0, 0x50, 0xf8, 0x01, 0x20, 0xb0, 0xbd, + 0x29, 0x68, 0x01, 0x20, 0x89, 0x6a, 0x00, 0x29, + 0xf9, 0xd0, 0x00, 0x20, 0xb0, 0xbd, 0x00, 0x00, + 0x14, 0x7a, 0x01, 0x00, 0xf8, 0xb5, 0x1a, 0x4d, + 0x07, 0x1c, 0xae, 0x79, 0x01, 0x21, 0x19, 0x4c, + 0x00, 0x20, 0x22, 0x68, 0x00, 0x2a, 0x14, 0xd1, + 0xae, 0x71, 0xa2, 0x68, 0xd0, 0x68, 0x06, 0xca, + 0x3c, 0x00, 0x60, 0x35, 0x01, 0x00, 0xec, 0xf7, + 0x3c, 0xff, 0xae, 0x79, 0x00, 0x21, 0x13, 0x4a, + 0x50, 0x69, 0x01, 0x30, 0x50, 0x61, 0xa0, 0x68, + 0x80, 0x68, 0xa0, 0x60, 0x62, 0x68, 0x90, 0x42, + 0x06, 0xd1, 0x01, 0x20, 0x20, 0x60, 0x03, 0xe0, + 0x01, 0x30, 0x0c, 0x34, 0x03, 0x28, 0xe3, 0xdb, + 0x00, 0x2f, 0x08, 0xd1, 0x00, 0x29, 0x0a, 0xd0, + 0x0a, 0x48, 0x40, 0x68, 0x00, 0x28, 0x06, 0xd0, + 0xfa, 0xf7, 0x3c, 0x00, 0x9c, 0x35, 0x01, 0x00, + 0xf5, 0xff, 0x03, 0xe0, 0x01, 0x2f, 0x03, 0xd0, + 0x00, 0x29, 0x01, 0xd1, 0xae, 0x71, 0xce, 0xe7, + 0xae, 0x71, 0xf8, 0xbd, 0x20, 0x10, 0x07, 0x00, + 0x18, 0xd9, 0x01, 0x00, 0xa8, 0x60, 0x01, 0x00, + 0x70, 0x5d, 0x01, 0x00, 0x80, 0xb5, 0x01, 0x23, + 0xf5, 0xf7, 0x7c, 0xf8, 0x80, 0xbd, 0x00, 0x00, + 0x80, 0xb5, 0x00, 0x23, 0xf5, 0xf7, 0x76, 0xf8, + 0x80, 0xbd, 0x00, 0x00, 0x3c, 0x00, 0xd8, 0x35, + 0x01, 0x00, 0xf8, 0xb5, 0x13, 0x4b, 0x00, 0x24, + 0x1b, 0x88, 0x98, 0x42, 0x1b, 0xd2, 0x11, 0x4b, + 0xc0, 0x00, 0xc0, 0x18, 0x45, 0x68, 0x06, 0x68, + 0x28, 0x68, 0x00, 0x28, 0x17, 0xd1, 0x0e, 0x4f, + 0xa8, 0x68, 0x43, 0x68, 0xb3, 0x42, 0x09, 0xd1, + 0xc3, 0x68, 0x8b, 0x42, 0x06, 0xd1, 0x03, 0x68, + 0x93, 0x42, 0x01, 0xd0, 0x53, 0x1c, 0x01, 0xd1, + 0x01, 0x24, 0x47, 0x60, 0x80, 0x68, 0x3c, 0x00, + 0x14, 0x36, 0x01, 0x00, 0x6b, 0x68, 0x83, 0x42, + 0xee, 0xd1, 0x03, 0xe0, 0x01, 0x21, 0x80, 0x20, + 0xed, 0xf7, 0x40, 0xfe, 0x20, 0x1c, 0xf8, 0xbd, + 0x56, 0x57, 0x01, 0x00, 0x84, 0x5d, 0x01, 0x00, + 0x29, 0xe3, 0x00, 0x00, 0xf8, 0xb5, 0x17, 0x4f, + 0x0a, 0x1c, 0xbe, 0x79, 0x16, 0x4d, 0x00, 0x23, + 0x6c, 0x68, 0x07, 0xe0, 0x21, 0x68, 0x91, 0x42, + 0x02, 0xd1, 0x21, 0x79, 0x81, 0x42, 0x04, 0xd0, + 0x3c, 0x00, 0x50, 0x36, 0x01, 0x00, 0x23, 0x1c, + 0xe4, 0x68, 0x00, 0x2c, 0xf5, 0xd1, 0x17, 0xe0, + 0x00, 0x2c, 0x15, 0xd0, 0x00, 0x2b, 0x0d, 0xd1, + 0xe3, 0x68, 0x0d, 0x48, 0x6b, 0x60, 0x00, 0x88, + 0x00, 0x2b, 0x02, 0xd1, 0xff, 0xf7, 0xd1, 0xfb, + 0x06, 0xe0, 0x0a, 0x4a, 0x99, 0x68, 0xff, 0xf7, + 0xf6, 0xfb, 0x01, 0xe0, 0xe0, 0x68, 0xd8, 0x60, + 0x28, 0x68, 0xe0, 0x60, 0x2c, 0x60, 0x02, 0xe0, + 0x01, 0x21, 0x3c, 0x00, 0x8c, 0x36, 0x01, 0x00, + 0xff, 0xf7, 0xa4, 0xff, 0xbe, 0x71, 0xf8, 0xbd, + 0x20, 0x10, 0x07, 0x00, 0x7c, 0x5d, 0x01, 0x00, + 0x2c, 0x74, 0x01, 0x00, 0x21, 0x38, 0x01, 0x00, + 0x70, 0xb5, 0x09, 0x4e, 0xb5, 0x79, 0xf9, 0xf7, + 0xaf, 0xfe, 0x04, 0x1c, 0x09, 0xd0, 0x20, 0x1c, + 0xed, 0xf7, 0x0c, 0xfb, 0x05, 0x49, 0x8a, 0x68, + 0x80, 0x18, 0x88, 0x60, 0x08, 0x68, 0x01, 0x30, + 0x08, 0x60, 0xb5, 0x71, 0x3c, 0x00, 0xc8, 0x36, + 0x01, 0x00, 0x20, 0x1c, 0x70, 0xbd, 0x20, 0x10, + 0x07, 0x00, 0xa8, 0x60, 0x01, 0x00, 0x09, 0x48, + 0x80, 0xb5, 0x40, 0x68, 0x02, 0x1c, 0x0b, 0xe0, + 0x01, 0x69, 0x00, 0x29, 0x07, 0xd0, 0x82, 0x42, + 0x04, 0xd0, 0x81, 0x68, 0x05, 0x48, 0x00, 0x88, + 0xff, 0xf7, 0xe5, 0xfa, 0x80, 0xbd, 0xc0, 0x68, + 0x00, 0x28, 0xf1, 0xd1, 0x80, 0xbd, 0x7c, 0x5d, + 0x01, 0x00, 0x2c, 0x74, 0x01, 0x00, 0x3c, 0x00, + 0x04, 0x37, 0x01, 0x00, 0x05, 0x48, 0x80, 0xb5, + 0x42, 0x68, 0x00, 0x2a, 0x04, 0xd0, 0x04, 0x48, + 0x00, 0x88, 0x91, 0x68, 0xff, 0xf7, 0xd2, 0xfa, + 0x80, 0xbd, 0x00, 0x00, 0x7c, 0x5d, 0x01, 0x00, + 0x2c, 0x74, 0x01, 0x00, 0x05, 0x48, 0x01, 0x68, + 0x00, 0x29, 0x04, 0xd0, 0xc0, 0x68, 0x00, 0x28, + 0x01, 0xd0, 0x01, 0x20, 0x70, 0x47, 0x00, 0x20, + 0x70, 0x47, 0x00, 0x00, 0x18, 0xd9, 0x01, 0x00, + 0x3c, 0x00, 0x40, 0x37, 0x01, 0x00, 0x80, 0xb5, + 0xf6, 0xf7, 0xd1, 0xfa, 0x80, 0xbd, 0x13, 0x1c, + 0x0d, 0x4a, 0xb0, 0xb5, 0x12, 0x88, 0x90, 0x42, + 0x0f, 0xd2, 0x03, 0x29, 0x0d, 0xd2, 0x0a, 0x4a, + 0xc0, 0x00, 0x14, 0x58, 0x0a, 0x4d, 0xac, 0x42, + 0x07, 0xd1, 0x13, 0x50, 0x0c, 0x23, 0x59, 0x43, + 0x08, 0x4b, 0xc9, 0x18, 0x80, 0x18, 0x41, 0x60, + 0xb0, 0xbd, 0x02, 0x21, 0x80, 0x20, 0xed, 0xf7, + 0x94, 0xfd, 0x3c, 0x00, 0x7c, 0x37, 0x01, 0x00, + 0xb0, 0xbd, 0x00, 0x00, 0x56, 0x57, 0x01, 0x00, + 0x84, 0x5d, 0x01, 0x00, 0x09, 0xa0, 0x00, 0x00, + 0x18, 0xd9, 0x01, 0x00, 0xf8, 0xb5, 0x0f, 0x1c, + 0x1e, 0x1c, 0x15, 0x1c, 0x04, 0x1c, 0x11, 0x1c, + 0xff, 0xf7, 0x4a, 0xff, 0x33, 0x1c, 0x2a, 0x1c, + 0x39, 0x1c, 0x20, 0x1c, 0xf4, 0xf7, 0x8a, 0xff, + 0xf8, 0xbd, 0x00, 0x00, 0xf7, 0xb5, 0x94, 0x46, + 0xff, 0x29, 0x21, 0xd0, 0x3c, 0x00, 0xb8, 0x37, + 0x01, 0x00, 0x15, 0x48, 0x00, 0x88, 0x81, 0x42, + 0x21, 0xd2, 0x14, 0x4a, 0x15, 0x4e, 0xc8, 0x00, + 0x85, 0x18, 0xb4, 0x79, 0x68, 0x68, 0x02, 0x68, + 0x00, 0x2a, 0x03, 0xd1, 0x03, 0x1d, 0x0c, 0xcb, + 0x9a, 0x42, 0x11, 0xd0, 0x43, 0x68, 0x9a, 0x68, + 0x42, 0x60, 0x0e, 0x4a, 0x17, 0x69, 0x01, 0x37, + 0x17, 0x61, 0xb4, 0x71, 0x00, 0x22, 0x02, 0x60, + 0x00, 0x98, 0xd8, 0x60, 0x60, 0x46, 0x3c, 0x00, + 0xf4, 0x37, 0x01, 0x00, 0x18, 0x60, 0x19, 0x74, + 0x28, 0x68, 0x58, 0x60, 0xfe, 0xbd, 0xb4, 0x71, + 0x06, 0x21, 0x00, 0xe0, 0x07, 0x21, 0x80, 0x20, + 0xed, 0xf7, 0x4c, 0xfd, 0xf6, 0xe7, 0x00, 0x00, + 0x56, 0x57, 0x01, 0x00, 0x84, 0x5d, 0x01, 0x00, + 0x20, 0x10, 0x07, 0x00, 0xa8, 0x60, 0x01, 0x00, + 0xb0, 0xb5, 0x14, 0x4d, 0x6c, 0x68, 0x00, 0x2c, + 0x01, 0xd0, 0x84, 0x42, 0x04, 0xd0, 0x0c, 0x21, + 0x3c, 0x00, 0x30, 0x38, 0x01, 0x00, 0x80, 0x20, + 0xed, 0xf7, 0x37, 0xfd, 0xb0, 0xbd, 0xff, 0xf7, + 0xb8, 0xfa, 0xa1, 0x68, 0x40, 0x1a, 0x0d, 0x49, + 0x88, 0x42, 0x03, 0xda, 0x10, 0x21, 0x80, 0x20, + 0xed, 0xf7, 0x2b, 0xfd, 0x21, 0x79, 0x22, 0x68, + 0x01, 0x20, 0xff, 0xf7, 0xac, 0xff, 0xe3, 0x68, + 0x6b, 0x60, 0x00, 0x2b, 0x05, 0xd0, 0x07, 0x48, + 0x06, 0x4a, 0x00, 0x88, 0x99, 0x68, 0xff, 0xf7, + 0xfe, 0xfa, 0x3c, 0x00, 0x6c, 0x38, 0x01, 0x00, + 0x28, 0x68, 0xe0, 0x60, 0x2c, 0x60, 0xb0, 0xbd, + 0x7c, 0x5d, 0x01, 0x00, 0x18, 0xfc, 0xff, 0xff, + 0x21, 0x38, 0x01, 0x00, 0x2c, 0x74, 0x01, 0x00, + 0xb0, 0xb5, 0x15, 0x4c, 0x08, 0x20, 0x21, 0x1c, + 0x80, 0x31, 0x08, 0x70, 0x13, 0x4a, 0x41, 0x04, + 0x11, 0x60, 0x13, 0x48, 0x00, 0x68, 0x13, 0x4d, + 0x6b, 0x69, 0x18, 0x40, 0x01, 0xd1, 0x10, 0x20, + 0x00, 0xe0, 0x00, 0x20, 0x3c, 0x00, 0xa8, 0x38, + 0x01, 0x00, 0xa8, 0x23, 0x5b, 0x5d, 0x18, 0x43, + 0x23, 0x1c, 0x40, 0x33, 0x18, 0x73, 0x51, 0x60, + 0x20, 0x78, 0x80, 0x08, 0x80, 0x00, 0x20, 0x70, + 0x00, 0x20, 0xff, 0xf7, 0x12, 0xfb, 0xff, 0xf7, + 0x72, 0xfa, 0x64, 0x30, 0x28, 0x66, 0x01, 0x38, + 0xa0, 0x61, 0x20, 0x78, 0x03, 0x21, 0x08, 0x43, + 0x20, 0x70, 0xb0, 0xbd, 0x00, 0x00, 0x00, 0x90, + 0x07, 0x00, 0x00, 0x10, 0x07, 0x00, 0x3c, 0x00, + 0xe4, 0x38, 0x01, 0x00, 0x10, 0x00, 0x07, 0x00, + 0xa4, 0x6c, 0x01, 0x00, 0x38, 0xb5, 0x0a, 0x4c, + 0x21, 0x1c, 0x20, 0x31, 0x8a, 0x79, 0x00, 0xab, + 0x1a, 0x70, 0xc9, 0x79, 0x07, 0x4d, 0x59, 0x70, + 0x69, 0x78, 0x88, 0x42, 0x03, 0xd1, 0xf8, 0xf7, + 0x13, 0xfc, 0xff, 0x20, 0x68, 0x70, 0x00, 0xab, + 0x18, 0x88, 0xe0, 0x84, 0x38, 0xbd, 0x00, 0x00, + 0x00, 0x10, 0x07, 0x00, 0x4c, 0x7b, 0x01, 0x00, + 0x3c, 0x00, 0x20, 0x39, 0x01, 0x00, 0xf8, 0xb5, + 0x0b, 0x1c, 0x06, 0x1c, 0x04, 0x1d, 0x7f, 0x33, + 0x14, 0xd0, 0x33, 0x68, 0x5d, 0x18, 0x35, 0x60, + 0x23, 0x88, 0x1f, 0x18, 0x06, 0x23, 0xff, 0x56, + 0xeb, 0x1b, 0x33, 0x60, 0x23, 0x88, 0x18, 0x18, + 0x81, 0x71, 0x20, 0x88, 0x01, 0x30, 0x00, 0x04, + 0x00, 0x0c, 0x20, 0x80, 0x90, 0x42, 0x01, 0xd3, + 0x00, 0x20, 0x20, 0x80, 0x10, 0x1c, 0x31, 0x68, + 0xec, 0xf7, 0x3c, 0x00, 0x5c, 0x39, 0x01, 0x00, + 0x6d, 0xfe, 0xf8, 0xbd, 0x0e, 0x49, 0x0a, 0x7c, + 0x83, 0x78, 0x1a, 0x43, 0x0a, 0x74, 0x42, 0x78, + 0x83, 0x78, 0x9a, 0x43, 0x0b, 0x7c, 0x93, 0x43, + 0x0b, 0x74, 0x8a, 0x7c, 0x43, 0x78, 0x1a, 0x43, + 0x8a, 0x74, 0x8a, 0x7c, 0x03, 0x78, 0x9a, 0x43, + 0x8a, 0x74, 0x02, 0x78, 0x43, 0x78, 0x1a, 0x43, + 0x4b, 0x7c, 0x1a, 0x43, 0x4a, 0x74, 0x4a, 0x7c, + 0xc0, 0x78, 0x82, 0x43, 0x3c, 0x00, 0x98, 0x39, + 0x01, 0x00, 0x4a, 0x74, 0x70, 0x47, 0x10, 0x00, + 0x07, 0x00, 0xb0, 0xb5, 0x06, 0x4d, 0x00, 0x24, + 0x20, 0x06, 0x00, 0x0e, 0xed, 0xf7, 0xf7, 0xf8, + 0xa1, 0x00, 0x69, 0x58, 0x08, 0x71, 0x01, 0x34, + 0x04, 0x2c, 0xf5, 0xdb, 0xb0, 0xbd, 0x10, 0x7b, + 0x01, 0x00, 0x0b, 0x48, 0x0c, 0x49, 0x7d, 0x23, + 0x42, 0x69, 0xdb, 0x00, 0x00, 0x2a, 0xc8, 0x6b, + 0x07, 0xd0, 0xc0, 0x18, 0x1a, 0x01, 0x3c, 0x00, + 0xd4, 0x39, 0x01, 0x00, 0x90, 0x42, 0xc8, 0x63, + 0x01, 0xd9, 0x07, 0x48, 0xc8, 0x63, 0x70, 0x47, + 0xff, 0x38, 0xf5, 0x38, 0xc8, 0x63, 0x98, 0x42, + 0xf9, 0xd2, 0xcb, 0x63, 0x70, 0x47, 0x00, 0x00, + 0xf4, 0x68, 0x01, 0x00, 0x44, 0x7d, 0x01, 0x00, + 0x70, 0x17, 0x00, 0x00, 0x70, 0xb5, 0x0d, 0x1c, + 0x04, 0x1c, 0x16, 0x1c, 0xfb, 0xf7, 0xf6, 0xfa, + 0xb0, 0x43, 0x28, 0x43, 0x01, 0x1c, 0x20, 0x1c, + 0x3c, 0x00, 0x10, 0x3a, 0x01, 0x00, 0x00, 0xf0, + 0xcc, 0xfa, 0x70, 0xbd, 0x00, 0x00, 0x80, 0xb5, + 0x0b, 0x4a, 0x00, 0x29, 0x09, 0xd0, 0x02, 0x29, + 0x0f, 0xd1, 0x01, 0x1c, 0x08, 0x48, 0xd2, 0x78, + 0x38, 0x30, 0xff, 0xf7, 0x78, 0xff, 0x06, 0x49, + 0x06, 0xe0, 0x01, 0x1c, 0x04, 0x48, 0x12, 0x79, + 0x20, 0x30, 0xff, 0xf7, 0x70, 0xff, 0x03, 0x49, + 0x08, 0x60, 0x80, 0xbd, 0x00, 0x00, 0xac, 0x7c, + 0x01, 0x00, 0x3c, 0x00, 0x4c, 0x3a, 0x01, 0x00, + 0xc8, 0x67, 0x01, 0x00, 0xc4, 0x67, 0x01, 0x00, + 0x80, 0xb5, 0x0b, 0x4a, 0x00, 0x29, 0x09, 0xd0, + 0x02, 0x29, 0x0f, 0xd1, 0x01, 0x1c, 0x08, 0x48, + 0x52, 0x79, 0x68, 0x30, 0xff, 0xf7, 0x5a, 0xff, + 0x06, 0x49, 0x06, 0xe0, 0x01, 0x1c, 0x04, 0x48, + 0x92, 0x79, 0x50, 0x30, 0xff, 0xf7, 0x52, 0xff, + 0x03, 0x49, 0x08, 0x60, 0x80, 0xbd, 0x00, 0x00, + 0xac, 0x7c, 0x01, 0x00, 0x3c, 0x00, 0x88, 0x3a, + 0x01, 0x00, 0xd0, 0x67, 0x01, 0x00, 0xcc, 0x67, + 0x01, 0x00, 0x08, 0xb5, 0x04, 0x21, 0x00, 0x91, + 0x81, 0x7e, 0x43, 0x68, 0x03, 0x29, 0x06, 0xd1, + 0x01, 0x1c, 0x0c, 0x31, 0x01, 0x20, 0x6a, 0x46, + 0xec, 0xf7, 0x9a, 0xfc, 0x08, 0xbd, 0x19, 0x68, + 0xc1, 0x60, 0xfb, 0xe7, 0x00, 0x00, 0x10, 0xb5, + 0x03, 0x1c, 0x00, 0x20, 0x08, 0x4c, 0x00, 0x21, + 0xca, 0x00, 0x12, 0x19, 0x92, 0x78, 0x3c, 0x00, + 0xc4, 0x3a, 0x01, 0x00, 0x9a, 0x42, 0x03, 0xd1, + 0xc8, 0x00, 0x00, 0x19, 0x40, 0x68, 0x10, 0xbd, + 0x01, 0x31, 0x09, 0x06, 0x09, 0x16, 0x06, 0x29, + 0xf1, 0xdb, 0x10, 0xbd, 0xcc, 0x5a, 0x01, 0x00, + 0xf8, 0xb5, 0x0f, 0x1c, 0x16, 0x1c, 0x00, 0x25, + 0xfe, 0xf7, 0x8e, 0xf9, 0x04, 0x1c, 0x0a, 0xd0, + 0x4a, 0x20, 0x00, 0x5d, 0x05, 0x28, 0x06, 0xd1, + 0x38, 0x1c, 0xf1, 0xf7, 0x81, 0xfe, 0x00, 0x28, + 0x3c, 0x00, 0x00, 0x3b, 0x01, 0x00, 0x01, 0xd0, + 0x01, 0x25, 0x34, 0x60, 0x28, 0x1c, 0xf8, 0xbd, + 0x00, 0x00, 0x70, 0xb5, 0x0d, 0x1c, 0x16, 0x1c, + 0x00, 0x24, 0xfe, 0xf7, 0x78, 0xf9, 0x00, 0x28, + 0x0b, 0xd0, 0x4a, 0x21, 0x09, 0x5c, 0x05, 0x29, + 0x07, 0xd1, 0x01, 0x69, 0x00, 0x29, 0x04, 0xd1, + 0x30, 0x60, 0xf1, 0xf7, 0x04, 0xfd, 0x01, 0x24, + 0x28, 0x60, 0x20, 0x1c, 0x70, 0xbd, 0xf8, 0xb5, + 0x06, 0x1c, 0x3c, 0x00, 0x3c, 0x3b, 0x01, 0x00, + 0x00, 0x25, 0x0c, 0x1c, 0x08, 0x1c, 0xf1, 0xf7, + 0x5d, 0xfe, 0x00, 0x28, 0x01, 0xd0, 0x00, 0x21, + 0x05, 0xe0, 0x20, 0x1c, 0xf1, 0xf7, 0x74, 0xfe, + 0x00, 0x28, 0x14, 0xd0, 0x01, 0x21, 0x30, 0x1c, + 0xf4, 0xf7, 0x80, 0xfb, 0x00, 0x90, 0x00, 0x28, + 0x0d, 0xd0, 0x08, 0x4f, 0x01, 0x25, 0x06, 0x22, + 0x31, 0x1c, 0x38, 0x1c, 0xec, 0xf7, 0xc2, 0xfc, + 0x06, 0x22, 0x21, 0x1c, 0x3c, 0x00, 0x78, 0x3b, + 0x01, 0x00, 0xb8, 0x18, 0xec, 0xf7, 0xbd, 0xfc, + 0x00, 0x98, 0xf8, 0x60, 0x28, 0x1c, 0xf8, 0xbd, + 0x00, 0x00, 0x70, 0x7c, 0x01, 0x00, 0x00, 0x21, + 0x00, 0x28, 0x06, 0xd0, 0x42, 0x78, 0x07, 0x2a, + 0x03, 0xd1, 0xc0, 0x79, 0x01, 0x28, 0x00, 0xd1, + 0x01, 0x21, 0x08, 0x1c, 0x70, 0x47, 0xf8, 0xb5, + 0x05, 0x1c, 0x00, 0x27, 0x16, 0x4e, 0xf1, 0xf7, + 0x28, 0xfe, 0x00, 0x28, 0x07, 0xd0, 0x3c, 0x00, + 0xb4, 0x3b, 0x01, 0x00, 0xf1, 0xf7, 0xc0, 0xfb, + 0x00, 0x28, 0x10, 0xd1, 0x00, 0x24, 0xf1, 0xf7, + 0xbb, 0xfc, 0x06, 0xe0, 0xf1, 0xf7, 0x02, 0xfe, + 0x00, 0x28, 0x08, 0xd0, 0x01, 0x24, 0xf1, 0xf7, + 0x99, 0xfd, 0x01, 0x1c, 0x06, 0x22, 0x30, 0x1c, + 0xec, 0xf7, 0x8e, 0xfc, 0x01, 0x27, 0x00, 0x2f, + 0x0d, 0xd0, 0x21, 0x1c, 0x28, 0x1c, 0xf4, 0xf7, + 0x3b, 0xfb, 0x01, 0x1c, 0x05, 0x48, 0x06, 0x22, + 0x3c, 0x00, 0xf0, 0x3b, 0x01, 0x00, 0x06, 0x38, + 0xc1, 0x60, 0x29, 0x1c, 0xec, 0xf7, 0x7f, 0xfc, + 0x01, 0x20, 0xf8, 0xbd, 0x00, 0x20, 0xfc, 0xe7, + 0x00, 0x00, 0x76, 0x7c, 0x01, 0x00, 0xf0, 0xb5, + 0x07, 0x1c, 0x00, 0x68, 0x02, 0x21, 0x04, 0x68, + 0x78, 0x69, 0x87, 0xb0, 0x01, 0x40, 0x00, 0x25, + 0x00, 0x29, 0x05, 0x91, 0x74, 0x4e, 0x12, 0xd0, + 0x22, 0x88, 0x01, 0x21, 0x13, 0x05, 0x02, 0xd4, + 0xc0, 0x07, 0x3c, 0x00, 0x2c, 0x3c, 0x01, 0x00, + 0xc1, 0x17, 0x01, 0x31, 0x6f, 0x48, 0x00, 0x29, + 0x00, 0x68, 0x01, 0xd0, 0x01, 0x30, 0x04, 0xe0, + 0x11, 0x06, 0x89, 0x0e, 0x2d, 0x29, 0x01, 0xd1, + 0x03, 0x30, 0x30, 0x60, 0x20, 0x88, 0x80, 0x07, + 0x67, 0xd1, 0x78, 0x69, 0xc0, 0x07, 0x64, 0xd5, + 0x03, 0xaa, 0x04, 0xa9, 0x20, 0x1c, 0xf7, 0xf7, + 0x4b, 0xfb, 0x00, 0xab, 0x18, 0x7c, 0x00, 0x28, + 0x07, 0xd0, 0x18, 0x7c, 0x3c, 0x00, 0x68, 0x3c, + 0x01, 0x00, 0x02, 0x28, 0x58, 0xd1, 0x18, 0x7b, + 0x40, 0x07, 0x40, 0x0f, 0x04, 0x28, 0x53, 0xd8, + 0x20, 0x79, 0x05, 0x99, 0xc0, 0x07, 0xc0, 0x17, + 0x01, 0x30, 0x02, 0x90, 0x00, 0x29, 0x02, 0xd1, + 0x02, 0x98, 0x00, 0x28, 0x48, 0xd1, 0x05, 0x99, + 0x00, 0x29, 0x04, 0xd0, 0x20, 0x88, 0x00, 0x05, + 0x01, 0xd4, 0x00, 0x20, 0x30, 0x60, 0xc0, 0x20, + 0xed, 0xf7, 0xcb, 0xfd, 0x05, 0x1c, 0x3c, 0x00, + 0xa4, 0x3c, 0x01, 0x00, 0x20, 0x1c, 0x0a, 0x30, + 0x06, 0x90, 0xfe, 0xf7, 0xad, 0xf8, 0x06, 0x1c, + 0x28, 0x1c, 0x08, 0x30, 0x23, 0x88, 0x02, 0x1d, + 0x11, 0x1d, 0xdb, 0x05, 0x06, 0xd5, 0x06, 0x9b, + 0x03, 0x60, 0x20, 0x1c, 0x10, 0x30, 0x10, 0x60, + 0x20, 0x1d, 0x0e, 0xe0, 0x23, 0x1d, 0x13, 0x60, + 0x22, 0x88, 0x92, 0x05, 0x05, 0xd5, 0x22, 0x1c, + 0x10, 0x32, 0x02, 0x60, 0x06, 0x9b, 0x0b, 0x60, + 0x3c, 0x00, 0xe0, 0x3c, 0x01, 0x00, 0x04, 0xe0, + 0x06, 0x9b, 0x03, 0x60, 0x20, 0x1c, 0x10, 0x30, + 0x08, 0x60, 0x28, 0x69, 0xf1, 0xf7, 0x43, 0xfc, + 0x00, 0x28, 0x08, 0xd0, 0x01, 0x28, 0x12, 0xd0, + 0x02, 0x28, 0x58, 0xd1, 0x00, 0xab, 0x18, 0x7c, + 0x00, 0x28, 0x54, 0xd1, 0x12, 0xe0, 0x00, 0xab, + 0x18, 0x7c, 0x02, 0x28, 0x0b, 0xd1, 0x00, 0x2e, + 0x4d, 0xd0, 0x4b, 0x20, 0x80, 0x5d, 0x02, 0x28, + 0x49, 0xd1, 0x3c, 0x00, 0x1c, 0x3d, 0x01, 0x00, + 0x07, 0xe0, 0x63, 0xe0, 0x00, 0xab, 0x18, 0x7c, + 0x00, 0x28, 0x02, 0xd1, 0x38, 0x1c, 0xfe, 0xf7, + 0x1b, 0xff, 0x20, 0x88, 0x41, 0x04, 0x30, 0x48, + 0x11, 0xd5, 0x00, 0x2e, 0x52, 0xd0, 0x00, 0xab, + 0x19, 0x7c, 0x00, 0x29, 0x26, 0xd0, 0x02, 0x99, + 0x00, 0x29, 0x02, 0xd0, 0xb0, 0x6a, 0x00, 0x78, + 0x00, 0xe0, 0x00, 0x78, 0x01, 0x28, 0x1d, 0xd0, + 0x03, 0x28, 0x43, 0xd1, 0x3c, 0x00, 0x58, 0x3d, + 0x01, 0x00, 0x1a, 0xe0, 0x00, 0xab, 0x19, 0x7c, + 0x02, 0x29, 0x16, 0xd1, 0x19, 0x7b, 0x04, 0x29, + 0x13, 0xd0, 0x19, 0x7b, 0x0c, 0x29, 0x10, 0xd0, + 0x22, 0x49, 0x09, 0x68, 0x00, 0x29, 0x0c, 0xd0, + 0x00, 0x2e, 0x0a, 0xd0, 0x02, 0x99, 0x00, 0x29, + 0x02, 0xd0, 0xb0, 0x6a, 0x00, 0x78, 0x00, 0xe0, + 0x00, 0x78, 0x01, 0x28, 0x29, 0xd0, 0x03, 0x28, + 0x27, 0xd0, 0x28, 0x22, 0x39, 0x1c, 0x3c, 0x00, + 0x94, 0x3d, 0x01, 0x00, 0x28, 0x1c, 0x88, 0x30, + 0xec, 0xf7, 0x0a, 0xfc, 0x00, 0xab, 0x19, 0x7c, + 0x28, 0x1c, 0x80, 0x30, 0x01, 0x71, 0x19, 0x7b, + 0x41, 0x71, 0x6c, 0x60, 0x6e, 0x61, 0x1b, 0xe0, + 0x05, 0x99, 0x00, 0x29, 0x14, 0xd0, 0x11, 0x48, + 0x84, 0x6c, 0x00, 0x2c, 0x10, 0xd0, 0x00, 0x22, + 0x00, 0x2e, 0x04, 0xd0, 0x40, 0x36, 0xb0, 0x7a, + 0x05, 0x28, 0x00, 0xd1, 0x01, 0x22, 0x00, 0x92, + 0x3c, 0x00, 0xd0, 0x3d, 0x01, 0x00, 0xf8, 0x7a, + 0xba, 0x7a, 0x29, 0x69, 0xc3, 0x07, 0xdb, 0x0f, + 0x06, 0x98, 0xec, 0xf7, 0x00, 0xfb, 0x28, 0x1c, + 0xed, 0xf7, 0x07, 0xfd, 0x00, 0x25, 0x28, 0x1c, + 0x07, 0xb0, 0xf0, 0xbd, 0x00, 0x00, 0xc4, 0x6a, + 0x01, 0x00, 0x68, 0x61, 0x01, 0x00, 0x28, 0x61, + 0x01, 0x00, 0xc4, 0x69, 0x01, 0x00, 0x80, 0xb5, + 0x02, 0x20, 0xff, 0xf7, 0x70, 0xf8, 0x80, 0xbd, + 0x00, 0x00, 0x3c, 0x00, 0x0c, 0x3e, 0x01, 0x00, + 0xb0, 0xb5, 0x1d, 0x4d, 0x01, 0x28, 0x17, 0xd0, + 0xa2, 0x28, 0x06, 0xd0, 0xa3, 0x28, 0x03, 0xd1, + 0x01, 0x21, 0x15, 0x20, 0xff, 0xf7, 0x08, 0xfc, + 0xb0, 0xbd, 0x00, 0x29, 0x01, 0xd1, 0x17, 0x48, + 0x02, 0xe0, 0x7d, 0x20, 0xc0, 0x00, 0x48, 0x43, + 0x00, 0x23, 0x01, 0x22, 0x01, 0x1c, 0x28, 0x60, + 0x15, 0x20, 0xff, 0xf7, 0xa7, 0xfc, 0xb0, 0xbd, + 0x01, 0x29, 0x04, 0xd0, 0x3c, 0x00, 0x48, 0x3e, + 0x01, 0x00, 0x02, 0x29, 0xfa, 0xd1, 0x00, 0xf0, + 0x2a, 0xf8, 0xb0, 0xbd, 0x6c, 0x68, 0xf5, 0xf7, + 0xde, 0xfc, 0xfe, 0xf7, 0xa8, 0xff, 0x68, 0x60, + 0x00, 0x2c, 0x09, 0xd0, 0x29, 0x68, 0x0a, 0x23, + 0x59, 0x43, 0x00, 0x1b, 0x88, 0x42, 0x03, 0xd9, + 0x01, 0x21, 0x15, 0x20, 0xed, 0xf7, 0x17, 0xfa, + 0x01, 0x22, 0x15, 0x20, 0x29, 0x68, 0xff, 0xf7, + 0xa6, 0xfb, 0xb0, 0xbd, 0x00, 0x00, 0x3c, 0x00, + 0x84, 0x3e, 0x01, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x87, 0x93, 0x03, 0x01, 0x20, 0x04, 0x49, + 0x40, 0x03, 0x80, 0xb5, 0x08, 0x60, 0x03, 0x21, + 0x15, 0x20, 0xed, 0xf7, 0x03, 0xfa, 0x80, 0xbd, + 0x00, 0x10, 0x07, 0x00, 0x07, 0x48, 0x80, 0xb5, + 0xbe, 0x21, 0x01, 0x73, 0x01, 0x7a, 0x10, 0x22, + 0x11, 0x43, 0x01, 0x72, 0x00, 0x23, 0x02, 0x22, + 0x15, 0x20, 0x03, 0x49, 0xff, 0xf7, 0x68, 0xfc, + 0x3c, 0x00, 0xc0, 0x3e, 0x01, 0x00, 0x80, 0xbd, + 0x00, 0x00, 0x00, 0x03, 0x07, 0x00, 0x80, 0x9f, + 0xd5, 0x00, 0x80, 0xb5, 0x00, 0x28, 0x03, 0xd0, + 0x0a, 0x1c, 0x15, 0x21, 0xa2, 0x20, 0x02, 0xe0, + 0x00, 0x22, 0x15, 0x21, 0xa3, 0x20, 0xff, 0xf7, + 0x66, 0xfc, 0x80, 0xbd, 0x00, 0x00, 0x10, 0xb5, + 0x00, 0xf0, 0x19, 0xf8, 0x0a, 0x48, 0xbe, 0x21, + 0x01, 0x73, 0x03, 0x7a, 0x10, 0x22, 0x93, 0x43, + 0x01, 0x24, 0x3c, 0x00, 0xfc, 0x3e, 0x01, 0x00, + 0x23, 0x43, 0x03, 0x72, 0x01, 0x73, 0x01, 0x7a, + 0x91, 0x43, 0x20, 0x22, 0x11, 0x43, 0x01, 0x72, + 0x02, 0x22, 0x15, 0x20, 0x02, 0x49, 0xff, 0xf7, + 0x5b, 0xfb, 0x10, 0xbd, 0x00, 0x03, 0x07, 0x00, + 0x80, 0x9f, 0xd5, 0x00, 0x80, 0xb5, 0x02, 0x21, + 0x15, 0x20, 0xff, 0xf7, 0x85, 0xfb, 0x04, 0x48, + 0xbe, 0x21, 0x01, 0x73, 0x01, 0x7a, 0x11, 0x22, + 0x91, 0x43, 0x01, 0x72, 0x3c, 0x00, 0x38, 0x3f, + 0x01, 0x00, 0x80, 0xbd, 0x00, 0x00, 0x00, 0x03, + 0x07, 0x00, 0xf8, 0xb5, 0x06, 0x1c, 0x05, 0x1c, + 0x60, 0x36, 0x00, 0x27, 0x44, 0x68, 0x22, 0xe0, + 0x08, 0x21, 0x00, 0x20, 0xed, 0xf7, 0x41, 0xfb, + 0x60, 0x61, 0x01, 0x89, 0x04, 0x39, 0x09, 0x04, + 0x09, 0x0c, 0x01, 0x81, 0x60, 0x69, 0x00, 0x68, + 0x40, 0x18, 0x04, 0x21, 0xed, 0xf7, 0x35, 0xfb, + 0xe0, 0x61, 0x60, 0x69, 0x71, 0x7b, 0x3c, 0x00, + 0x74, 0x3f, 0x01, 0x00, 0x00, 0x68, 0x89, 0x01, + 0xc1, 0x70, 0x29, 0x69, 0x0c, 0x31, 0x03, 0x22, + 0xec, 0xf7, 0xba, 0xfa, 0x28, 0x69, 0x0c, 0x30, + 0x01, 0x68, 0x01, 0x31, 0x01, 0x60, 0x25, 0x62, + 0xa7, 0x61, 0x24, 0x68, 0x00, 0x2c, 0xda, 0xd1, + 0x02, 0x49, 0x03, 0x48, 0x6a, 0x68, 0xf6, 0xf7, + 0xb3, 0xf8, 0xf8, 0xbd, 0xfd, 0x6b, 0x00, 0x00, + 0xa0, 0x6a, 0x01, 0x00, 0x80, 0xb5, 0x00, 0x07, + 0x3c, 0x00, 0xb0, 0x3f, 0x01, 0x00, 0x00, 0x09, + 0x09, 0x02, 0x09, 0x0a, 0x08, 0x43, 0x02, 0x49, + 0x08, 0x60, 0xff, 0xf7, 0x20, 0xff, 0x80, 0xbd, + 0x00, 0x00, 0x60, 0x00, 0x07, 0x00, 0x08, 0x00, + 0x14, 0x00, 0xc8, 0x00, 0x00, 0x00, 0xe8, 0x03, + 0x00, 0x00, 0x10, 0x00, 0x14, 0x00, 0xc8, 0x00, + 0x00, 0x00, 0xe8, 0x03, 0x00, 0x00, 0x1c, 0x00, + 0x14, 0x00, 0xc8, 0x00, 0x00, 0x00, 0xe8, 0x03, + 0x00, 0x00, 0x3c, 0x00, 0xec, 0x3f, 0x01, 0x00, + 0x24, 0x01, 0x07, 0x00, 0x32, 0x00, 0x00, 0x00, + 0xe8, 0x03, 0x00, 0x00, 0x40, 0x06, 0x01, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x41, 0x6e, 0x62, 0x69, 0x7e, 0x64, 0x61, 0x6f, + 0x6f, 0x00, 0x00, 0x00, 0x52, 0x65, 0x6c, 0x65, + 0x61, 0x73, 0x65, 0x20, 0x36, 0x5f, 0x37, 0x5f, + 0x31, 0x35, 0x20, 0x42, 0x75, 0x69, 0x6c, 0x64, + 0x20, 0x32, 0x3a, 0x35, 0x3c, 0x00, 0x28, 0x40, + 0x01, 0x00, 0x32, 0x39, 0x38, 0x20, 0x53, 0x65, + 0x70, 0x20, 0x30, 0x34, 0x20, 0x32, 0x30, 0x30, + 0x39, 0x20, 0x31, 0x37, 0x3a, 0x31, 0x33, 0x3a, + 0x32, 0x30, 0x20, 0x28, 0x48, 0x57, 0x3d, 0x34, + 0x3a, 0x33, 0x2c, 0x42, 0x54, 0x43, 0x4f, 0x45, + 0x58, 0x29, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, + 0x1c, 0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3c, 0x00, + 0x64, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xe8, 0x03, 0x70, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0xd0, 0x07, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x7c, 0x15, 0x15, 0x00, + 0x3c, 0x00, 0xa0, 0x40, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x70, 0x17, + 0x1e, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, + 0x00, 0x00, 0x28, 0x23, 0x16, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0xf8, 0x2a, + 0x0b, 0x00, 0x3c, 0x00, 0xdc, 0x40, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, + 0xe0, 0x2e, 0x12, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x18, 0x00, 0x00, 0x00, 0x50, 0x46, 0x0e, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, + 0xf0, 0x55, 0x08, 0x00, 0x3c, 0x00, 0x18, 0x41, + 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2c, 0x00, + 0x00, 0x00, 0xc0, 0x5d, 0x0e, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0xe8, 0x80, + 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x42, 0x00, + 0x00, 0x00, 0xa0, 0x8c, 0x0a, 0x00, 0x3c, 0x00, + 0x54, 0x41, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x48, 0x00, 0x00, 0x00, 0x80, 0xbb, 0x0a, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0xf0, 0xd2, 0x0a, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x6c, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x90, 0x00, + 0x3c, 0x00, 0x90, 0x41, 0x01, 0x00, 0xc0, 0x00, + 0x90, 0x00, 0xc0, 0x00, 0x90, 0x00, 0x14, 0x00, + 0x10, 0x00, 0x14, 0x00, 0x10, 0x00, 0xc0, 0x00, + 0x90, 0x00, 0x14, 0x00, 0x10, 0x00, 0x14, 0x00, + 0x10, 0x00, 0xc0, 0x00, 0x90, 0x00, 0x14, 0x00, + 0x10, 0x00, 0xc0, 0x00, 0x90, 0x00, 0x14, 0x00, + 0x10, 0x00, 0x14, 0x00, 0x10, 0x00, 0x14, 0x00, + 0x10, 0x00, 0xc0, 0x00, 0x90, 0x00, 0x60, 0x00, + 0x48, 0x00, 0x3c, 0x00, 0xcc, 0x41, 0x01, 0x00, + 0x60, 0x00, 0x48, 0x00, 0x14, 0x00, 0x10, 0x00, + 0x14, 0x00, 0x10, 0x00, 0x60, 0x00, 0x48, 0x00, + 0x14, 0x00, 0x10, 0x00, 0x14, 0x00, 0x10, 0x00, + 0x60, 0x00, 0x48, 0x00, 0x14, 0x00, 0x10, 0x00, + 0x60, 0x00, 0x48, 0x00, 0x14, 0x00, 0x10, 0x00, + 0x14, 0x00, 0x10, 0x00, 0x14, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x04, 0x01, 0x0b, 0x02, 0x0c, 0x03, + 0x12, 0x04, 0x16, 0x05, 0x3c, 0x00, 0x08, 0x42, + 0x01, 0x00, 0x18, 0x06, 0x00, 0x0e, 0x00, 0x0e, + 0x24, 0x07, 0x00, 0x0e, 0x2c, 0x08, 0x30, 0x09, + 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x42, 0x0a, + 0x00, 0x0e, 0x48, 0x0b, 0x00, 0x0e, 0x00, 0x0e, + 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x60, 0x0c, + 0x00, 0x0e, 0x00, 0x0e, 0x6c, 0x0d, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0xc0, 0xff, 0xff, 0xff, 0x3c, 0x00, + 0x44, 0x42, 0x01, 0x00, 0xb6, 0xff, 0xff, 0xff, + 0xd3, 0xff, 0xff, 0xff, 0xc9, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x51, 0xb0, 0x00, 0x00, + 0x0c, 0x00, 0x00, 0x00, 0x51, 0xb0, 0x00, 0x00, + 0x0c, 0x00, 0x00, 0x00, 0x59, 0xaf, 0x00, 0x00, + 0x3c, 0x00, 0x80, 0x42, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xa5, 0xaf, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x45, 0xb0, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xd5, 0xaf, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xad, 0xb0, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xbc, 0x42, 0x01, 0x00, + 0x95, 0xdb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x95, 0xdb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x99, 0xb0, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xf8, 0x42, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0x17, + 0x01, 0x00, 0x35, 0x17, 0x01, 0x00, 0x21, 0x17, + 0x01, 0x00, 0xd9, 0x9c, 0x00, 0x00, 0x49, 0x17, + 0x01, 0x00, 0x3d, 0x17, 0x01, 0x00, 0xd1, 0x9c, + 0x00, 0x00, 0xd1, 0x9c, 0x00, 0x00, 0x1d, 0x1a, + 0x01, 0x00, 0xd1, 0x9c, 0x00, 0x00, 0x01, 0x1a, + 0x01, 0x00, 0x31, 0x1a, 0x01, 0x00, 0x25, 0x1a, + 0x01, 0x00, 0x3d, 0x17, 0x01, 0x00, 0x3c, 0x00, + 0x34, 0x43, 0x01, 0x00, 0x81, 0x1a, 0x01, 0x00, + 0xd1, 0x9c, 0x00, 0x00, 0x79, 0x17, 0x01, 0x00, + 0xd9, 0x9c, 0x00, 0x00, 0x5d, 0x17, 0x01, 0x00, + 0xa1, 0x17, 0x01, 0x00, 0x95, 0x17, 0x01, 0x00, + 0x81, 0x17, 0x01, 0x00, 0x21, 0x18, 0x01, 0x00, + 0xf5, 0x17, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, + 0x0c, 0x00, 0x00, 0x00, 0x10, 0x00, 0x08, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x70, 0x43, 0x01, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, + 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x19, 0x1c, + 0x01, 0x00, 0x89, 0x41, 0x00, 0x00, 0x89, 0x41, + 0x00, 0x00, 0x85, 0x41, 0x00, 0x00, 0x85, 0x41, + 0x00, 0x00, 0x85, 0x41, 0x00, 0x00, 0x85, 0x41, + 0x00, 0x00, 0x89, 0x41, 0x00, 0x00, 0x85, 0x41, + 0x00, 0x00, 0x85, 0x41, 0x00, 0x00, 0x35, 0x1b, + 0x01, 0x00, 0x3c, 0x00, 0xac, 0x43, 0x01, 0x00, + 0x9d, 0x1b, 0x01, 0x00, 0x01, 0x1c, 0x01, 0x00, + 0x89, 0x41, 0x00, 0x00, 0x89, 0x41, 0x00, 0x00, + 0x89, 0x41, 0x00, 0x00, 0x85, 0x41, 0x00, 0x00, + 0x65, 0x18, 0x01, 0x00, 0x29, 0x18, 0x01, 0x00, + 0x39, 0x18, 0x01, 0x00, 0xbd, 0x18, 0x01, 0x00, + 0x89, 0x41, 0x00, 0x00, 0x4d, 0x18, 0x01, 0x00, + 0xa5, 0x18, 0x01, 0x00, 0x85, 0x41, 0x00, 0x00, + 0x01, 0x19, 0x01, 0x00, 0x3c, 0x00, 0xe8, 0x43, + 0x01, 0x00, 0xd9, 0x18, 0x01, 0x00, 0xed, 0x18, + 0x01, 0x00, 0x15, 0x19, 0x01, 0x00, 0x89, 0x41, + 0x00, 0x00, 0x89, 0x41, 0x00, 0x00, 0x89, 0x41, + 0x00, 0x00, 0x85, 0x41, 0x00, 0x00, 0x89, 0x41, + 0x00, 0x00, 0x89, 0x41, 0x00, 0x00, 0x69, 0x1c, + 0x01, 0x00, 0x89, 0x41, 0x00, 0x00, 0x71, 0x1c, + 0x01, 0x00, 0x89, 0x41, 0x00, 0x00, 0x89, 0x41, + 0x00, 0x00, 0xfd, 0xdb, 0x00, 0x00, 0x3c, 0x00, + 0x24, 0x44, 0x01, 0x00, 0x1d, 0x7c, 0x00, 0x00, + 0x00, 0x00, 0x80, 0x00, 0xf5, 0xda, 0x00, 0x00, + 0x14, 0x00, 0x81, 0x00, 0xfd, 0xdd, 0x00, 0x00, + 0x08, 0x00, 0x82, 0x00, 0xc5, 0xdd, 0x00, 0x00, + 0x38, 0x00, 0x83, 0x00, 0x45, 0xdc, 0x00, 0x00, + 0x10, 0x00, 0x84, 0x00, 0x99, 0xdc, 0x00, 0x00, + 0x0c, 0x00, 0x86, 0x00, 0x39, 0xdc, 0x00, 0x00, + 0x10, 0x00, 0x88, 0x00, 0x11, 0xde, 0x00, 0x00, + 0x3c, 0x00, 0x60, 0x44, 0x01, 0x00, 0x10, 0x00, + 0x8a, 0x00, 0x35, 0xdd, 0x00, 0x00, 0x0c, 0x00, + 0x8c, 0x00, 0xad, 0xdf, 0x00, 0x00, 0x1c, 0x00, + 0x8e, 0x00, 0xc9, 0xde, 0x00, 0x00, 0x38, 0x00, + 0x8f, 0x00, 0xed, 0xdc, 0x00, 0x00, 0x38, 0x00, + 0x90, 0x00, 0x75, 0xdf, 0x00, 0x00, 0x0c, 0x00, + 0x91, 0x00, 0x8d, 0xdc, 0x00, 0x00, 0x0c, 0x00, + 0x93, 0x00, 0xb9, 0xdd, 0x00, 0x00, 0x0c, 0x00, + 0x94, 0x00, 0x3c, 0x00, 0x9c, 0x44, 0x01, 0x00, + 0x00, 0x08, 0x08, 0x08, 0x10, 0x0c, 0x0c, 0x0c, + 0x08, 0x0c, 0x08, 0x0c, 0x08, 0x0c, 0x08, 0x08, + 0x08, 0x08, 0x14, 0x08, 0x08, 0x14, 0x00, 0x30, + 0x00, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, + 0xad, 0x30, 0x01, 0x00, 0x15, 0x30, 0x01, 0x00, + 0x20, 0x30, 0x07, 0x00, 0x30, 0x30, 0x07, 0x00, + 0x06, 0x07, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xd8, 0x44, + 0x01, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0xc9, 0x02, 0x00, 0x94, 0x3f, + 0x03, 0x00, 0xe0, 0x8b, 0x5a, 0x00, 0x05, 0x3a, + 0x85, 0x00, 0xc8, 0xf2, 0x06, 0x00, 0xf8, 0x4c, + 0x56, 0x00, 0x20, 0xa7, 0x3d, 0x00, 0xb7, 0x4a, + 0x00, 0x00, 0xb7, 0x4a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x14, 0x45, 0x01, 0x00, 0x01, 0x01, 0x01, 0x02, + 0x02, 0x02, 0x03, 0x03, 0x03, 0x04, 0x04, 0x04, + 0x05, 0x06, 0x00, 0x00, 0x2d, 0x7c, 0x00, 0x00, + 0x00, 0x00, 0xff, 0x00, 0xfd, 0x95, 0x00, 0x00, + 0x08, 0x00, 0xff, 0x00, 0xed, 0x97, 0x00, 0x00, + 0x08, 0x00, 0x82, 0x00, 0xcd, 0x95, 0x00, 0x00, + 0x0c, 0x00, 0x83, 0x00, 0x4d, 0x96, 0x00, 0x00, + 0x0c, 0x00, 0x85, 0x00, 0x2d, 0x7c, 0x00, 0x00, + 0x3c, 0x00, 0x50, 0x45, 0x01, 0x00, 0x00, 0x00, + 0xff, 0x00, 0x2d, 0x7c, 0x00, 0x00, 0x00, 0x00, + 0xff, 0x00, 0x2d, 0x7c, 0x00, 0x00, 0x00, 0x00, + 0xff, 0x00, 0x3d, 0x96, 0x00, 0x00, 0x0c, 0x00, + 0x89, 0x00, 0xd9, 0x97, 0x00, 0x00, 0x08, 0x00, + 0x8a, 0x00, 0x91, 0x95, 0x00, 0x00, 0x08, 0x00, + 0xff, 0x00, 0x2d, 0x7c, 0x00, 0x00, 0x00, 0x00, + 0xff, 0x00, 0x2d, 0x7c, 0x00, 0x00, 0x00, 0x00, + 0xff, 0x00, 0x3c, 0x00, 0x8c, 0x45, 0x01, 0x00, + 0xf9, 0x97, 0x00, 0x00, 0x08, 0x00, 0x8d, 0x00, + 0x2d, 0x7c, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, + 0x2d, 0x7c, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, + 0xc9, 0x97, 0x00, 0x00, 0x30, 0x00, 0x90, 0x00, + 0x11, 0x95, 0x00, 0x00, 0x18, 0x00, 0x91, 0x00, + 0x15, 0x96, 0x00, 0x00, 0x08, 0x00, 0x92, 0x00, + 0x59, 0x95, 0x00, 0x00, 0x3c, 0x00, 0x93, 0x00, + 0x29, 0x96, 0x00, 0x00, 0x3c, 0x00, 0xc8, 0x45, + 0x01, 0x00, 0x08, 0x00, 0x94, 0x00, 0xa1, 0x95, + 0x00, 0x00, 0x08, 0x00, 0x95, 0x00, 0x81, 0x97, + 0x00, 0x00, 0x0c, 0x00, 0x96, 0x00, 0x6d, 0x97, + 0x00, 0x00, 0x10, 0x00, 0x98, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x10, + 0x08, 0x00, 0x00, 0x08, 0x00, 0x10, 0x3c, 0x00, + 0x04, 0x46, 0x01, 0x00, 0x08, 0x0c, 0x0c, 0x0c, + 0x0c, 0x1c, 0x0c, 0x0c, 0x08, 0x00, 0x00, 0x00, + 0x0d, 0x8b, 0x00, 0x00, 0xf5, 0x8a, 0x00, 0x00, + 0xe9, 0x8a, 0x00, 0x00, 0x01, 0x8b, 0x00, 0x00, + 0x14, 0x08, 0x0c, 0x0c, 0x10, 0x0c, 0x00, 0x00, + 0xb1, 0x98, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, + 0x19, 0x99, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00, + 0x3d, 0x7c, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x40, 0x46, 0x01, 0x00, 0x3d, 0x99, + 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x09, 0x99, + 0x00, 0x00, 0x83, 0x00, 0x00, 0x00, 0x3d, 0x7c, + 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x02, 0x01, + 0x04, 0x04, 0x08, 0x08, 0x81, 0x37, 0x80, 0xf3, + 0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00, 0xaa, 0xaa, + 0x03, 0x00, 0x00, 0xf8, 0x6d, 0xa9, 0x6d, 0xa9, + 0x6e, 0xa9, 0x3c, 0x00, 0x7c, 0x46, 0x01, 0x00, + 0x6e, 0xa8, 0x6e, 0xa8, 0x6e, 0xa8, 0x6f, 0xa7, + 0x6f, 0xa7, 0x6f, 0xa7, 0x6f, 0xa6, 0x6f, 0xa6, + 0x70, 0xa6, 0x70, 0xa5, 0x70, 0xa4, 0x00, 0x00, + 0xb5, 0x1b, 0x01, 0x00, 0xc9, 0x1b, 0x01, 0x00, + 0xe1, 0x1b, 0x01, 0x00, 0xe5, 0x9c, 0x00, 0x00, + 0xa5, 0x1b, 0x01, 0x00, 0xe5, 0x9c, 0x00, 0x00, + 0x89, 0x1b, 0x01, 0x00, 0xd5, 0x9c, 0x00, 0x00, + 0xd5, 0x9c, 0x00, 0x00, 0x3c, 0x00, 0xb8, 0x46, + 0x01, 0x00, 0xd1, 0x1a, 0x01, 0x00, 0xe5, 0x1a, + 0x01, 0x00, 0x05, 0x1b, 0x01, 0x00, 0x25, 0x1b, + 0x01, 0x00, 0xb1, 0x1a, 0x01, 0x00, 0xe5, 0x9c, + 0x00, 0x00, 0x9d, 0x1a, 0x01, 0x00, 0xd5, 0x9c, + 0x00, 0x00, 0xc1, 0x1a, 0x01, 0x00, 0x89, 0x19, + 0x01, 0x00, 0xa9, 0x19, 0x01, 0x00, 0xc9, 0x19, + 0x01, 0x00, 0xf1, 0x19, 0x01, 0x00, 0x79, 0x19, + 0x01, 0x00, 0xe5, 0x9c, 0x00, 0x00, 0x3c, 0x00, + 0xf4, 0x46, 0x01, 0x00, 0x65, 0x19, 0x01, 0x00, + 0xd5, 0x9c, 0x00, 0x00, 0xd5, 0x9c, 0x00, 0x00, + 0xd5, 0x9c, 0x00, 0x00, 0xd5, 0x9c, 0x00, 0x00, + 0xd5, 0x9c, 0x00, 0x00, 0xd5, 0x9c, 0x00, 0x00, + 0xd5, 0x9c, 0x00, 0x00, 0x55, 0x1c, 0x01, 0x00, + 0x45, 0x1c, 0x01, 0x00, 0x45, 0x1c, 0x01, 0x00, + 0xd5, 0x9c, 0x00, 0x00, 0xd5, 0x9c, 0x00, 0x00, + 0xd5, 0x9c, 0x00, 0x00, 0xd5, 0x9c, 0x00, 0x00, + 0x3c, 0x00, 0x30, 0x47, 0x01, 0x00, 0xd5, 0x9c, + 0x00, 0x00, 0x55, 0x19, 0x01, 0x00, 0xe5, 0x9c, + 0x00, 0x00, 0x41, 0x19, 0x01, 0x00, 0x31, 0x19, + 0x01, 0x00, 0xd5, 0x9c, 0x00, 0x00, 0x02, 0x05, + 0x0a, 0x00, 0x00, 0x00, 0x02, 0x04, 0x0a, 0x00, + 0x00, 0x00, 0xc5, 0x20, 0x00, 0x00, 0x21, 0x21, + 0x00, 0x00, 0x25, 0x21, 0x00, 0x00, 0x39, 0x21, + 0x00, 0x00, 0x49, 0x21, 0x00, 0x00, 0x55, 0x21, + 0x00, 0x00, 0x3c, 0x00, 0x6c, 0x47, 0x01, 0x00, + 0x61, 0x21, 0x00, 0x00, 0xed, 0x21, 0x00, 0x00, + 0x0d, 0x22, 0x00, 0x00, 0x21, 0x22, 0x00, 0x00, + 0x3d, 0x22, 0x00, 0x00, 0x49, 0x22, 0x00, 0x00, + 0xc5, 0x22, 0x00, 0x00, 0xe1, 0x22, 0x00, 0x00, + 0xf5, 0x22, 0x00, 0x00, 0xe9, 0x1f, 0x00, 0x00, + 0xe9, 0x1f, 0x00, 0x00, 0xe9, 0x1f, 0x00, 0x00, + 0xe9, 0x1f, 0x00, 0x00, 0xe9, 0x1f, 0x00, 0x00, + 0x11, 0x23, 0x00, 0x00, 0x3c, 0x00, 0xa8, 0x47, + 0x01, 0x00, 0x1d, 0x23, 0x00, 0x00, 0x89, 0x23, + 0x00, 0x00, 0xa5, 0x23, 0x00, 0x00, 0xb9, 0x23, + 0x00, 0x00, 0x11, 0x20, 0x00, 0x00, 0x1d, 0x20, + 0x00, 0x00, 0x6d, 0x20, 0x00, 0x00, 0x8d, 0x20, + 0x00, 0x00, 0xb9, 0x20, 0x00, 0x00, 0x00, 0x01, + 0x02, 0x03, 0x03, 0x05, 0x06, 0x06, 0x08, 0x09, + 0x08, 0x09, 0x09, 0x09, 0xc4, 0x80, 0xca, 0x80, + 0x80, 0x80, 0x80, 0x80, 0xd0, 0x80, 0x3c, 0x00, + 0xe4, 0x47, 0x01, 0x00, 0xd6, 0xd9, 0xdc, 0xdf, + 0xe2, 0x80, 0x80, 0x80, 0xe5, 0xe8, 0x80, 0x80, + 0x80, 0x80, 0xeb, 0xee, 0xf1, 0xf4, 0xf7, 0xfa, + 0xfd, 0x00, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00, + 0x04, 0x00, 0x05, 0x00, 0x06, 0x00, 0x07, 0x00, + 0x08, 0x00, 0x09, 0x00, 0x0a, 0x00, 0x0b, 0x00, + 0x0c, 0x00, 0x0e, 0x00, 0x10, 0x00, 0x11, 0x00, + 0x13, 0x00, 0x16, 0x00, 0x18, 0x00, 0x1b, 0x00, + 0x3c, 0x00, 0x20, 0x48, 0x01, 0x00, 0x1e, 0x00, + 0x22, 0x00, 0x26, 0x00, 0x2b, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x3c, 0x00, 0x44, 0x00, 0x4c, 0x00, + 0x55, 0x00, 0x5f, 0x00, 0x6b, 0x00, 0x78, 0x00, + 0x86, 0x00, 0x97, 0x00, 0xa9, 0x00, 0xbe, 0x00, + 0xd5, 0x00, 0xef, 0x00, 0xff, 0x7f, 0x0c, 0x00, + 0x06, 0x00, 0x02, 0x00, 0x00, 0x00, 0xfe, 0xff, + 0xfc, 0xff, 0xfb, 0xff, 0xfa, 0xff, 0xf9, 0xff, + 0xf8, 0xff, 0x3c, 0x00, 0x5c, 0x48, 0x01, 0x00, + 0xf7, 0xff, 0xf6, 0xff, 0xf5, 0xff, 0xf4, 0xff, + 0xf3, 0xff, 0xf2, 0xff, 0xf1, 0xff, 0xf0, 0xff, + 0xef, 0xff, 0xee, 0xff, 0xed, 0xff, 0xec, 0xff, + 0xeb, 0xff, 0xea, 0xff, 0xe9, 0xff, 0xe8, 0xff, + 0xe7, 0xff, 0xe6, 0xff, 0xe5, 0xff, 0xe4, 0xff, + 0xe3, 0xff, 0xe2, 0xff, 0xe1, 0xff, 0xe0, 0xff, + 0xdf, 0xff, 0xde, 0xff, 0xdd, 0xff, 0xdc, 0xff, + 0xdc, 0xff, 0x00, 0x00, 0x3c, 0x00, 0x98, 0x48, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xb1, 0x7c, 0x41, 0x00, 0x11, 0x5a, + 0x40, 0xe2, 0xb2, 0x7c, 0x41, 0x00, 0x05, 0x5a, + 0x40, 0xe2, 0xaf, 0x7c, 0x41, 0x00, 0xf9, 0x59, + 0x40, 0xe2, 0xb0, 0x7c, 0x41, 0x00, 0xed, 0x59, + 0x40, 0xe2, 0x24, 0x67, 0x01, 0x00, 0x0e, 0x00, + 0x00, 0xe3, 0x5c, 0x67, 0x01, 0x00, 0x0e, 0x00, + 0x00, 0xe3, 0x0a, 0x61, 0x01, 0x00, 0x3c, 0x00, + 0xd4, 0x48, 0x01, 0x00, 0x01, 0x00, 0x00, 0xe3, + 0x0e, 0x61, 0x01, 0x00, 0x01, 0x00, 0x00, 0xe3, + 0x32, 0x67, 0x01, 0x00, 0x0e, 0x00, 0x00, 0xe3, + 0x6a, 0x67, 0x01, 0x00, 0x0e, 0x00, 0x00, 0xe3, + 0x0b, 0x61, 0x01, 0x00, 0x01, 0x00, 0x00, 0xe3, + 0x0f, 0x61, 0x01, 0x00, 0x01, 0x00, 0x00, 0xe3, + 0x40, 0x67, 0x01, 0x00, 0x0e, 0x00, 0x00, 0xe3, + 0x78, 0x67, 0x01, 0x00, 0x0e, 0x00, 0x00, 0xe3, + 0x3c, 0x00, 0x10, 0x49, 0x01, 0x00, 0x0c, 0x61, + 0x01, 0x00, 0x01, 0x00, 0x00, 0xe3, 0x10, 0x61, + 0x01, 0x00, 0x01, 0x00, 0x00, 0xe3, 0x4e, 0x67, + 0x01, 0x00, 0x0e, 0x00, 0x00, 0xe3, 0x86, 0x67, + 0x01, 0x00, 0x0e, 0x00, 0x00, 0xe3, 0x0d, 0x61, + 0x01, 0x00, 0x01, 0x00, 0x00, 0xe3, 0x11, 0x61, + 0x01, 0x00, 0x01, 0x00, 0x00, 0xe3, 0xc0, 0x48, + 0x01, 0x00, 0x04, 0x00, 0x00, 0x0a, 0xe0, 0x48, + 0x01, 0x00, 0x3c, 0x00, 0x4c, 0x49, 0x01, 0x00, + 0x04, 0x00, 0x00, 0x0a, 0x00, 0x49, 0x01, 0x00, + 0x04, 0x00, 0x00, 0x0a, 0x20, 0x49, 0x01, 0x00, + 0x04, 0x00, 0x00, 0x0a, 0x18, 0x67, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x28, 0x75, 0x01, 0x01, + 0x7d, 0xa9, 0x40, 0xe2, 0x2c, 0x75, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x20, 0x75, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x44, 0x75, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x3c, 0x00, 0x88, 0x49, + 0x01, 0x00, 0xf0, 0x59, 0x01, 0x00, 0x04, 0x00, + 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x24, 0x75, 0x01, 0x00, 0x04, 0x00, + 0x00, 0xe2, 0xb8, 0x7c, 0x01, 0x00, 0x04, 0x00, + 0x00, 0xe2, 0x8d, 0xa9, 0x00, 0x00, 0x01, 0x00, + 0x00, 0xda, 0x1d, 0x75, 0x01, 0x00, 0x01, 0x00, + 0x00, 0xe2, 0xc4, 0x67, 0x01, 0x00, 0x3c, 0x00, + 0xc4, 0x49, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x21, 0x59, 0x00, 0x00, 0x0e, 0x00, 0x00, 0xd9, + 0xc8, 0x67, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0xcc, 0x67, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0xd0, 0x67, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0x65, 0xd9, 0x00, 0x00, 0x04, 0x00, 0x00, 0xda, + 0xa5, 0xd9, 0x00, 0x00, 0x04, 0x00, 0x00, 0xda, + 0x3c, 0x00, 0x00, 0x4a, 0x01, 0x00, 0x01, 0x59, + 0x00, 0x00, 0x01, 0x00, 0x00, 0xda, 0x32, 0x67, + 0x01, 0x00, 0x0e, 0x00, 0x00, 0xe3, 0x6a, 0x67, + 0x01, 0x00, 0x0e, 0x00, 0x00, 0xe3, 0x11, 0x59, + 0x00, 0x00, 0x01, 0x00, 0x00, 0xda, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x48, + 0x01, 0x00, 0x02, 0x00, 0x00, 0x0a, 0xa0, 0x48, + 0x01, 0x00, 0x02, 0x00, 0x00, 0x0a, 0x40, 0x49, + 0x01, 0x00, 0x3c, 0x00, 0x3c, 0x4a, 0x01, 0x00, + 0x05, 0x00, 0x00, 0x0a, 0x68, 0x49, 0x01, 0x00, + 0x09, 0x00, 0x00, 0x0a, 0x6c, 0x57, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x38, 0x61, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xac, 0x6e, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0xb0, 0x6e, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x70, 0x57, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x3c, 0x00, 0x78, 0x4a, + 0x01, 0x00, 0xe8, 0x59, 0x01, 0x00, 0x08, 0x00, + 0x00, 0xe3, 0xdc, 0x58, 0x01, 0x14, 0x4d, 0xfd, + 0x40, 0xe3, 0x2c, 0x59, 0x01, 0x14, 0x39, 0xfd, + 0x40, 0xe3, 0xc0, 0x58, 0x01, 0x00, 0x0e, 0x00, + 0x00, 0xe3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x64, 0x73, 0x41, 0x00, 0x3d, 0x2e, + 0x44, 0xe2, 0x7c, 0x59, 0x01, 0x14, 0x3c, 0x00, + 0xb4, 0x4a, 0x01, 0x00, 0x9d, 0x2f, 0x44, 0xe3, + 0x5c, 0x57, 0x01, 0x00, 0x0e, 0x00, 0x00, 0xe2, + 0x79, 0x2e, 0x04, 0x00, 0x01, 0x00, 0x00, 0xdb, + 0xa0, 0x58, 0x01, 0x00, 0x02, 0x00, 0x00, 0xe3, + 0xa2, 0x58, 0x01, 0x00, 0x02, 0x00, 0x00, 0xe3, + 0xa0, 0x57, 0x01, 0x00, 0x0e, 0x00, 0x00, 0xe3, + 0xd1, 0x88, 0x01, 0x00, 0x01, 0x00, 0x00, 0xda, + 0x1d, 0x89, 0x01, 0x00, 0x04, 0x00, 0x00, 0xda, + 0x3c, 0x00, 0xf0, 0x4a, 0x01, 0x00, 0x95, 0x88, + 0x01, 0x00, 0x04, 0x00, 0x00, 0xdb, 0x31, 0x2f, + 0x04, 0x00, 0x0e, 0x00, 0x00, 0xd9, 0xc5, 0x2e, + 0x04, 0x00, 0x0e, 0x00, 0x00, 0xd9, 0x68, 0x6c, + 0x01, 0x01, 0x15, 0xd5, 0x40, 0xe2, 0xc0, 0x57, + 0x01, 0x00, 0x08, 0x00, 0x00, 0xe3, 0xc8, 0x57, + 0x01, 0x00, 0x34, 0x00, 0x00, 0xe3, 0x9c, 0x6c, + 0x01, 0x00, 0x08, 0x00, 0x00, 0xe3, 0xb0, 0x58, + 0x01, 0x03, 0x3c, 0x00, 0x2c, 0x4b, 0x01, 0x00, + 0xe9, 0xd4, 0x40, 0xe2, 0xbc, 0x58, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x9d, 0xa3, 0x00, 0x00, + 0x60, 0x00, 0x00, 0xd9, 0x70, 0x79, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x78, 0x79, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x7c, 0x5a, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x5d, 0x1c, 0x00, 0x00, + 0x11, 0x00, 0x00, 0xd9, 0x24, 0x6e, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x3c, 0x00, 0x68, 0x4b, + 0x01, 0x00, 0x18, 0x58, 0x01, 0x05, 0xd5, 0xd5, + 0x40, 0xe3, 0xfc, 0x57, 0x01, 0x00, 0x14, 0x00, + 0x00, 0xe3, 0x04, 0x8e, 0x01, 0x03, 0xe5, 0xd5, + 0x40, 0xe3, 0x00, 0x5b, 0x01, 0x00, 0x04, 0x00, + 0x00, 0xe2, 0x18, 0x5b, 0x01, 0x00, 0x40, 0x00, + 0x00, 0xe2, 0xd4, 0x67, 0x01, 0x00, 0x04, 0x00, + 0x00, 0xe2, 0x8d, 0x37, 0x00, 0x00, 0x04, 0x00, + 0x00, 0xdb, 0xbd, 0x36, 0x00, 0x00, 0x3c, 0x00, + 0xa4, 0x4b, 0x01, 0x00, 0x04, 0x00, 0x00, 0xdb, + 0xfc, 0x60, 0x01, 0x00, 0x02, 0x00, 0x00, 0xe2, + 0x90, 0x7d, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0x70, 0x69, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb0, 0x49, 0x01, 0x00, 0x1a, 0x00, 0x00, 0x0a, + 0x90, 0x4b, 0x01, 0x00, 0x06, 0x00, 0x00, 0x0a, + 0xa4, 0x58, 0x81, 0x00, 0x05, 0xfd, 0x40, 0xe3, + 0x3c, 0x00, 0xe0, 0x4b, 0x01, 0x00, 0x80, 0x4a, + 0x01, 0x00, 0x0c, 0x00, 0x00, 0x0a, 0x0c, 0x5a, + 0x81, 0x01, 0x25, 0x2d, 0x44, 0xe3, 0xe0, 0x4a, + 0x01, 0x00, 0x03, 0x00, 0x00, 0x0a, 0x18, 0x63, + 0x41, 0x00, 0xfd, 0xbb, 0x40, 0xe2, 0x08, 0x57, + 0x01, 0x00, 0x01, 0x00, 0x00, 0xe2, 0x9c, 0x48, + 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x4a, + 0x01, 0x00, 0x3c, 0x00, 0x1c, 0x4c, 0x01, 0x00, + 0x02, 0x00, 0x00, 0x0a, 0xcc, 0x74, 0x01, 0x00, + 0x03, 0x00, 0x00, 0xe3, 0x65, 0x73, 0x41, 0x00, + 0xa9, 0x2e, 0x44, 0xe2, 0xf6, 0x59, 0x01, 0x01, + 0xd1, 0x2c, 0x44, 0xe3, 0x08, 0x4b, 0x01, 0x00, + 0x04, 0x00, 0x00, 0x0a, 0x07, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x6a, 0x28, 0x4b, 0x01, 0x00, + 0x02, 0x00, 0x00, 0x0a, 0x88, 0x7d, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x3c, 0x00, 0x58, 0x4c, + 0x01, 0x00, 0x00, 0x75, 0x01, 0x04, 0x65, 0x6f, + 0x40, 0xe3, 0xbc, 0x78, 0x01, 0x00, 0x0e, 0x00, + 0x00, 0xe3, 0x38, 0x4b, 0x01, 0x00, 0x04, 0x00, + 0x00, 0x0a, 0x04, 0x57, 0x01, 0x00, 0x04, 0x00, + 0x00, 0x62, 0x58, 0x4b, 0x01, 0x00, 0x02, 0x00, + 0x00, 0x0a, 0x80, 0x4b, 0x01, 0x00, 0x02, 0x00, + 0x00, 0x0a, 0x68, 0x4b, 0x01, 0x00, 0x03, 0x00, + 0x00, 0x0a, 0x8c, 0x7d, 0x01, 0x00, 0x3c, 0x00, + 0x94, 0x4c, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0x39, 0x2d, 0x04, 0x00, 0x04, 0x00, 0x00, 0xdb, + 0x94, 0x7d, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x10, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x64, + 0xa8, 0x4c, 0x01, 0x00, 0x04, 0x00, 0x00, 0x0a, + 0x3c, 0x00, 0xd0, 0x4c, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x4c, + 0x01, 0x00, 0x01, 0x00, 0x00, 0x0a, 0xd0, 0x4c, + 0x01, 0x00, 0x02, 0x00, 0x00, 0x0a, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe7, 0x7a, + 0x01, 0x00, 0x01, 0x00, 0x00, 0xe2, 0xe8, 0x7a, + 0x01, 0x00, 0x01, 0x00, 0x00, 0xe2, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xed, 0x7a, + 0x01, 0x00, 0x3c, 0x00, 0x0c, 0x4d, 0x01, 0x00, + 0x01, 0x00, 0x00, 0xe2, 0xee, 0x7a, 0x01, 0x00, + 0x01, 0x00, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xf3, 0x7a, 0x01, 0x00, + 0x01, 0x00, 0x00, 0xe2, 0xf4, 0x7a, 0x01, 0x00, + 0x01, 0x00, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xf9, 0x7a, 0x01, 0x00, + 0x01, 0x00, 0x00, 0xe2, 0xfa, 0x7a, 0x01, 0x00, + 0x01, 0x00, 0x00, 0xe2, 0x3c, 0x00, 0x48, 0x4d, + 0x01, 0x00, 0xe8, 0x4c, 0x01, 0x00, 0x03, 0x00, + 0x00, 0x0a, 0x00, 0x4d, 0x01, 0x00, 0x03, 0x00, + 0x00, 0x0a, 0x18, 0x4d, 0x01, 0x00, 0x03, 0x00, + 0x00, 0x0a, 0x30, 0x4d, 0x01, 0x00, 0x03, 0x00, + 0x00, 0x0a, 0x90, 0x5c, 0x01, 0x00, 0x04, 0x00, + 0x00, 0xe2, 0x94, 0x5c, 0x01, 0x00, 0x04, 0x00, + 0x00, 0xe2, 0x98, 0x5c, 0x01, 0x00, 0x04, 0x00, + 0x00, 0xe2, 0x9c, 0x5c, 0x01, 0x00, 0x3c, 0x00, + 0x84, 0x4d, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0xa0, 0x5c, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0xa4, 0x5c, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0xa8, 0x5c, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0xac, 0x5c, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0xb0, 0x5c, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0xb4, 0x5c, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0xb8, 0x5c, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0x3c, 0x00, 0xc0, 0x4d, 0x01, 0x00, 0xbc, 0x5c, + 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, 0xc0, 0x5c, + 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, 0xc4, 0x5c, + 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, 0x90, 0x5c, + 0x01, 0x00, 0x38, 0x00, 0x00, 0xe3, 0x68, 0x4d, + 0x01, 0x00, 0x0e, 0x00, 0x00, 0x0a, 0xd8, 0x4d, + 0x01, 0x00, 0x02, 0x00, 0x00, 0xfa, 0x12, 0x61, + 0x81, 0x01, 0x31, 0xd5, 0x40, 0xe3, 0x06, 0x61, + 0x01, 0x00, 0x3c, 0x00, 0xfc, 0x4d, 0x01, 0x00, + 0x02, 0x00, 0x00, 0xe2, 0x0b, 0x61, 0x01, 0x00, + 0x01, 0x00, 0x00, 0xe3, 0x0f, 0x61, 0x01, 0x00, + 0x01, 0x00, 0x00, 0xe3, 0x08, 0x61, 0x01, 0x00, + 0x02, 0x00, 0x00, 0xe2, 0x50, 0x7b, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0x01, 0x00, + 0x0e, 0x00, 0x00, 0x64, 0x9c, 0x57, 0x01, 0x01, + 0x91, 0x88, 0x41, 0xe3, 0x3c, 0x00, 0x38, 0x4e, + 0x01, 0x00, 0x6e, 0x41, 0x67, 0x6f, 0xe2, 0x65, + 0x60, 0x69, 0x6f, 0x20, 0x41, 0x42, 0x00, 0x00, + 0x00, 0x00, 0xf0, 0x4d, 0x01, 0x00, 0x09, 0x00, + 0x00, 0x0a, 0x48, 0x4e, 0x01, 0x00, 0x01, 0x00, + 0x00, 0x0a, 0xe8, 0x4d, 0x01, 0x00, 0x01, 0x00, + 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x48, 0x4d, 0x01, 0x00, 0x04, 0x00, + 0x00, 0x0a, 0x28, 0x61, 0x01, 0x01, 0x3c, 0x00, + 0x74, 0x4e, 0x01, 0x00, 0xbd, 0xd5, 0x40, 0xe2, + 0x69, 0x61, 0x41, 0x00, 0x85, 0xd5, 0x40, 0xe2, + 0x30, 0x61, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0x34, 0x61, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0x3c, 0x61, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0x34, 0x61, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0x44, 0x61, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x6a, + 0x3c, 0x00, 0xb0, 0x4e, 0x01, 0x00, 0x70, 0x4e, + 0x01, 0x00, 0x08, 0x00, 0x00, 0x0a, 0x18, 0x61, + 0x01, 0x00, 0x02, 0x00, 0x00, 0xe2, 0x1c, 0x61, + 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, 0x20, 0x61, + 0x01, 0x00, 0x02, 0x00, 0x00, 0xe2, 0x24, 0x61, + 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, 0xb8, 0x4e, + 0x01, 0x00, 0x02, 0x00, 0x00, 0x0a, 0xc8, 0x4e, + 0x01, 0x00, 0x02, 0x00, 0x00, 0x0a, 0xd8, 0x4e, + 0x01, 0x00, 0x3c, 0x00, 0xec, 0x4e, 0x01, 0x00, + 0x02, 0x00, 0x00, 0x0a, 0x96, 0x48, 0x01, 0x00, + 0x06, 0x00, 0x00, 0xe3, 0xe0, 0x62, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x6a, 0x9b, 0x7d, 0x01, 0x00, + 0x01, 0x00, 0x00, 0x62, 0x9c, 0x7d, 0x01, 0x00, + 0x02, 0x00, 0x00, 0x62, 0x60, 0x7c, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x01, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x6a, 0x3c, 0x00, 0x28, 0x4f, + 0x01, 0x00, 0x2d, 0x63, 0x01, 0x00, 0x01, 0x00, + 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x49, 0xd5, 0x00, 0x00, 0x0e, 0x00, + 0x00, 0xd9, 0xf4, 0x67, 0x01, 0x00, 0x02, 0x00, + 0x00, 0x62, 0x46, 0x7d, 0x01, 0x00, 0x01, 0x00, + 0x00, 0x62, 0x9c, 0x7c, 0x01, 0x00, 0x04, 0x00, + 0x00, 0xe2, 0x98, 0x7c, 0x01, 0x00, 0x3c, 0x00, + 0x64, 0x4f, 0x01, 0x00, 0x02, 0x00, 0x00, 0x62, + 0xa0, 0x7c, 0x01, 0x00, 0x06, 0x00, 0x00, 0x62, + 0x58, 0x7c, 0x01, 0x00, 0x02, 0x00, 0x00, 0x62, + 0x64, 0x7c, 0x01, 0x00, 0x06, 0x00, 0x00, 0x62, + 0x5a, 0x7c, 0x01, 0x00, 0x02, 0x00, 0x00, 0x62, + 0x6a, 0x7c, 0x01, 0x00, 0x06, 0x00, 0x00, 0x62, + 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x6a, + 0xe4, 0x62, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0x3c, 0x00, 0xa0, 0x4f, 0x01, 0x00, 0xe8, 0x62, + 0x01, 0x00, 0x03, 0x00, 0x00, 0xe2, 0x00, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x6a, 0x00, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x6a, 0x01, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x6a, 0x00, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x6a, 0x00, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x6a, 0x00, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x6a, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xdc, 0x4f, 0x01, 0x00, + 0x04, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x6a, 0x3c, 0x00, 0x18, 0x50, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x6a, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x6a, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x6a, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x6a, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x6a, 0xf0, 0x4e, 0x01, 0x00, 0x2a, 0x00, + 0x00, 0x0a, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x6a, 0x75, 0x2a, 0x01, 0x00, 0x3c, 0x00, + 0x54, 0x50, 0x01, 0x00, 0x0c, 0x00, 0x00, 0xdb, + 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x6a, + 0x75, 0x2a, 0x01, 0x00, 0x0c, 0x00, 0x00, 0xdb, + 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x6a, + 0x75, 0x2a, 0x01, 0x00, 0x0c, 0x00, 0x00, 0xdb, + 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x6a, + 0x75, 0x2a, 0x01, 0x00, 0x0c, 0x00, 0x00, 0xdb, + 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x6a, + 0x3c, 0x00, 0x90, 0x50, 0x01, 0x00, 0x75, 0x2a, + 0x01, 0x00, 0x0c, 0x00, 0x00, 0xdb, 0x06, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x6a, 0x75, 0x2a, + 0x01, 0x00, 0x0c, 0x00, 0x00, 0xdb, 0x07, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x6a, 0x75, 0x2a, + 0x01, 0x00, 0x0c, 0x00, 0x00, 0xdb, 0x08, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x6a, 0x75, 0x2a, + 0x01, 0x00, 0x0c, 0x00, 0x00, 0xdb, 0x09, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xcc, 0x50, 0x01, 0x00, + 0x04, 0x00, 0x00, 0x6a, 0x75, 0x2a, 0x01, 0x00, + 0x0c, 0x00, 0x00, 0xdb, 0x0a, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x6a, 0x75, 0x2a, 0x01, 0x00, + 0x0c, 0x00, 0x00, 0xdb, 0x0b, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x6a, 0x75, 0x2a, 0x01, 0x00, + 0x0c, 0x00, 0x00, 0xdb, 0x0c, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x6a, 0x75, 0x2a, 0x01, 0x00, + 0x0c, 0x00, 0x00, 0xdb, 0x3c, 0x00, 0x08, 0x51, + 0x01, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x6a, 0x75, 0x2a, 0x01, 0x00, 0x0c, 0x00, + 0x00, 0xdb, 0x0e, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x6a, 0x75, 0x2a, 0x01, 0x00, 0x0c, 0x00, + 0x00, 0xdb, 0x48, 0x50, 0x01, 0x00, 0x02, 0x00, + 0x00, 0x0a, 0x58, 0x50, 0x01, 0x00, 0x02, 0x00, + 0x00, 0x0a, 0x68, 0x50, 0x01, 0x00, 0x02, 0x00, + 0x00, 0x0a, 0x78, 0x50, 0x01, 0x00, 0x3c, 0x00, + 0x44, 0x51, 0x01, 0x00, 0x02, 0x00, 0x00, 0x0a, + 0x88, 0x50, 0x01, 0x00, 0x02, 0x00, 0x00, 0x0a, + 0x98, 0x50, 0x01, 0x00, 0x02, 0x00, 0x00, 0x0a, + 0xa8, 0x50, 0x01, 0x00, 0x02, 0x00, 0x00, 0x0a, + 0xb8, 0x50, 0x01, 0x00, 0x02, 0x00, 0x00, 0x0a, + 0xc8, 0x50, 0x01, 0x00, 0x02, 0x00, 0x00, 0x0a, + 0xd8, 0x50, 0x01, 0x00, 0x02, 0x00, 0x00, 0x0a, + 0xe8, 0x50, 0x01, 0x00, 0x02, 0x00, 0x00, 0x0a, + 0x3c, 0x00, 0x80, 0x51, 0x01, 0x00, 0xf8, 0x50, + 0x01, 0x00, 0x02, 0x00, 0x00, 0x0a, 0x08, 0x51, + 0x01, 0x00, 0x02, 0x00, 0x00, 0x0a, 0x18, 0x51, + 0x01, 0x00, 0x02, 0x00, 0x00, 0x0a, 0x40, 0x50, + 0x01, 0x00, 0x01, 0x00, 0x00, 0x0a, 0xe8, 0x4e, + 0x01, 0x00, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x4e, + 0x01, 0x00, 0x3c, 0x00, 0xbc, 0x51, 0x01, 0x00, + 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x28, 0x51, 0x01, 0x00, + 0x0e, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xf8, 0x51, + 0x01, 0x00, 0x98, 0x51, 0x01, 0x00, 0x0c, 0x00, + 0x00, 0x0a, 0x50, 0x4e, 0x01, 0x00, 0x04, 0x00, + 0x00, 0x0a, 0xe0, 0x4c, 0x01, 0x00, 0x01, 0x00, + 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xc0, 0x4b, 0x01, 0x00, 0x1d, 0x00, + 0x00, 0x0a, 0xf8, 0x51, 0x01, 0x00, 0x05, 0x00, + 0x00, 0x0a, 0x24, 0x80, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x1d, 0x80, 0x07, 0x00, 0x3c, 0x00, + 0x34, 0x52, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x2a, 0x80, 0x07, 0x00, 0x5c, 0x00, 0x00, 0x00, + 0x24, 0x80, 0x07, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x1d, 0x80, 0x07, 0x00, 0x20, 0x00, 0x00, 0x00, + 0x2a, 0x80, 0x07, 0x00, 0x6a, 0x00, 0x00, 0x00, + 0x24, 0x80, 0x07, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x1d, 0x80, 0x07, 0x00, 0x20, 0x00, 0x00, 0x00, + 0x2a, 0x80, 0x07, 0x00, 0x6a, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x70, 0x52, 0x01, 0x00, 0x00, 0x01, + 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, + 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, + 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, + 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x01, 0x63, + 0x00, 0x00, 0xa1, 0x63, 0x00, 0x00, 0xc5, 0x63, + 0x00, 0x00, 0xb1, 0x62, 0x00, 0x00, 0xc5, 0x63, + 0x00, 0x00, 0x21, 0x63, 0x00, 0x00, 0x4d, 0x63, + 0x00, 0x00, 0x3c, 0x00, 0xac, 0x52, 0x01, 0x00, + 0xa1, 0x63, 0x00, 0x00, 0x01, 0x63, 0x00, 0x00, + 0xa1, 0x63, 0x00, 0x00, 0x06, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x03, 0x05, 0x06, 0x07, 0x08, 0x09, + 0x0a, 0x0a, 0x0c, 0x0d, 0x0e, 0x0f, 0x0f, 0x10, + 0x11, 0x00, 0x00, 0x00, 0xa5, 0xc6, 0x84, 0xf8, + 0x99, 0xee, 0x8d, 0xf6, 0x0d, 0xff, 0xbd, 0xd6, + 0xb1, 0xde, 0x54, 0x91, 0x3c, 0x00, 0xe8, 0x52, + 0x01, 0x00, 0x50, 0x60, 0x03, 0x02, 0xa9, 0xce, + 0x7d, 0x56, 0x19, 0xe7, 0x62, 0xb5, 0xe6, 0x4d, + 0x9a, 0xec, 0x45, 0x8f, 0x9d, 0x1f, 0x40, 0x89, + 0x87, 0xfa, 0x15, 0xef, 0xeb, 0xb2, 0xc9, 0x8e, + 0x0b, 0xfb, 0xec, 0x41, 0x67, 0xb3, 0xfd, 0x5f, + 0xea, 0x45, 0xbf, 0x23, 0xf7, 0x53, 0x96, 0xe4, + 0x5b, 0x9b, 0xc2, 0x75, 0x1c, 0xe1, 0xae, 0x3d, + 0x6a, 0x4c, 0x5a, 0x6c, 0x41, 0x7e, 0x3c, 0x00, + 0x24, 0x53, 0x01, 0x00, 0x02, 0xf5, 0x4f, 0x83, + 0x5c, 0x68, 0xf4, 0x51, 0x34, 0xd1, 0x08, 0xf9, + 0x93, 0xe2, 0x73, 0xab, 0x53, 0x62, 0x3f, 0x2a, + 0x0c, 0x08, 0x52, 0x95, 0x65, 0x46, 0x5e, 0x9d, + 0x28, 0x30, 0xa1, 0x37, 0x0f, 0x0a, 0xb5, 0x2f, + 0x09, 0x0e, 0x36, 0x24, 0x9b, 0x1b, 0x3d, 0xdf, + 0x26, 0xcd, 0x69, 0x4e, 0xcd, 0x7f, 0x9f, 0xea, + 0x1b, 0x12, 0x9e, 0x1d, 0x74, 0x58, 0x2e, 0x34, + 0x3c, 0x00, 0x60, 0x53, 0x01, 0x00, 0x2d, 0x36, + 0xb2, 0xdc, 0xee, 0xb4, 0xfb, 0x5b, 0xf6, 0xa4, + 0x4d, 0x76, 0x61, 0xb7, 0xce, 0x7d, 0x7b, 0x52, + 0x3e, 0xdd, 0x71, 0x5e, 0x97, 0x13, 0xf5, 0xa6, + 0x68, 0xb9, 0x00, 0x00, 0x2c, 0xc1, 0x60, 0x40, + 0x1f, 0xe3, 0xc8, 0x79, 0xed, 0xb6, 0xbe, 0xd4, + 0x46, 0x8d, 0xd9, 0x67, 0x4b, 0x72, 0xde, 0x94, + 0xd4, 0x98, 0xe8, 0xb0, 0x4a, 0x85, 0x6b, 0xbb, + 0x2a, 0xc5, 0x3c, 0x00, 0x9c, 0x53, 0x01, 0x00, + 0xe5, 0x4f, 0x16, 0xed, 0xc5, 0x86, 0xd7, 0x9a, + 0x55, 0x66, 0x94, 0x11, 0xcf, 0x8a, 0x10, 0xe9, + 0x06, 0x04, 0x81, 0xfe, 0xf0, 0xa0, 0x44, 0x78, + 0xba, 0x25, 0xe3, 0x4b, 0xf3, 0xa2, 0xfe, 0x5d, + 0xc0, 0x80, 0x8a, 0x05, 0xad, 0x3f, 0xbc, 0x21, + 0x48, 0x70, 0x04, 0xf1, 0xdf, 0x63, 0xc1, 0x77, + 0x75, 0xaf, 0x63, 0x42, 0x30, 0x20, 0x1a, 0xe5, + 0x0e, 0xfd, 0x6d, 0xbf, 0x3c, 0x00, 0xd8, 0x53, + 0x01, 0x00, 0x4c, 0x81, 0x14, 0x18, 0x35, 0x26, + 0x2f, 0xc3, 0xe1, 0xbe, 0xa2, 0x35, 0xcc, 0x88, + 0x39, 0x2e, 0x57, 0x93, 0xf2, 0x55, 0x82, 0xfc, + 0x47, 0x7a, 0xac, 0xc8, 0xe7, 0xba, 0x2b, 0x32, + 0x95, 0xe6, 0xa0, 0xc0, 0x98, 0x19, 0xd1, 0x9e, + 0x7f, 0xa3, 0x66, 0x44, 0x7e, 0x54, 0xab, 0x3b, + 0x83, 0x0b, 0xca, 0x8c, 0x29, 0xc7, 0xd3, 0x6b, + 0x3c, 0x28, 0x79, 0xa7, 0xe2, 0xbc, 0x3c, 0x00, + 0x14, 0x54, 0x01, 0x00, 0x1d, 0x16, 0x76, 0xad, + 0x3b, 0xdb, 0x56, 0x64, 0x4e, 0x74, 0x1e, 0x14, + 0xdb, 0x92, 0x0a, 0x0c, 0x6c, 0x48, 0xe4, 0xb8, + 0x5d, 0x9f, 0x6e, 0xbd, 0xef, 0x43, 0xa6, 0xc4, + 0xa8, 0x39, 0xa4, 0x31, 0x37, 0xd3, 0x8b, 0xf2, + 0x32, 0xd5, 0x43, 0x8b, 0x59, 0x6e, 0xb7, 0xda, + 0x8c, 0x01, 0x64, 0xb1, 0xd2, 0x9c, 0xe0, 0x49, + 0xb4, 0xd8, 0xfa, 0xac, 0x07, 0xf3, 0x25, 0xcf, + 0x3c, 0x00, 0x50, 0x54, 0x01, 0x00, 0xaf, 0xca, + 0x8e, 0xf4, 0xe9, 0x47, 0x18, 0x10, 0xd5, 0x6f, + 0x88, 0xf0, 0x6f, 0x4a, 0x72, 0x5c, 0x24, 0x38, + 0xf1, 0x57, 0xc7, 0x73, 0x51, 0x97, 0x23, 0xcb, + 0x7c, 0xa1, 0x9c, 0xe8, 0x21, 0x3e, 0xdd, 0x96, + 0xdc, 0x61, 0x86, 0x0d, 0x85, 0x0f, 0x90, 0xe0, + 0x42, 0x7c, 0xc4, 0x71, 0xaa, 0xcc, 0xd8, 0x90, + 0x05, 0x06, 0x01, 0xf7, 0x12, 0x1c, 0xa3, 0xc2, + 0x5f, 0x6a, 0x3c, 0x00, 0x8c, 0x54, 0x01, 0x00, + 0xf9, 0xae, 0xd0, 0x69, 0x91, 0x17, 0x58, 0x99, + 0x27, 0x3a, 0xb9, 0x27, 0x38, 0xd9, 0x13, 0xeb, + 0xb3, 0x2b, 0x33, 0x22, 0xbb, 0xd2, 0x70, 0xa9, + 0x89, 0x07, 0xa7, 0x33, 0xb6, 0x2d, 0x22, 0x3c, + 0x92, 0x15, 0x20, 0xc9, 0x49, 0x87, 0xff, 0xaa, + 0x78, 0x50, 0x7a, 0xa5, 0x8f, 0x03, 0xf8, 0x59, + 0x80, 0x09, 0x17, 0x1a, 0xda, 0x65, 0x31, 0xd7, + 0xc6, 0x84, 0xb8, 0xd0, 0x3c, 0x00, 0xc8, 0x54, + 0x01, 0x00, 0xc3, 0x82, 0xb0, 0x29, 0x77, 0x5a, + 0x11, 0x1e, 0xcb, 0x7b, 0xfc, 0xa8, 0xd6, 0x6d, + 0x3a, 0x2c, 0xc6, 0xa5, 0xf8, 0x84, 0xee, 0x99, + 0xf6, 0x8d, 0xff, 0x0d, 0xd6, 0xbd, 0xde, 0xb1, + 0x91, 0x54, 0x60, 0x50, 0x02, 0x03, 0xce, 0xa9, + 0x56, 0x7d, 0xe7, 0x19, 0xb5, 0x62, 0x4d, 0xe6, + 0xec, 0x9a, 0x8f, 0x45, 0x1f, 0x9d, 0x89, 0x40, + 0xfa, 0x87, 0xef, 0x15, 0xb2, 0xeb, 0x3c, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x8e, 0xc9, 0xfb, 0x0b, + 0x41, 0xec, 0xb3, 0x67, 0x5f, 0xfd, 0x45, 0xea, + 0x23, 0xbf, 0x53, 0xf7, 0xe4, 0x96, 0x9b, 0x5b, + 0x75, 0xc2, 0xe1, 0x1c, 0x3d, 0xae, 0x4c, 0x6a, + 0x6c, 0x5a, 0x7e, 0x41, 0xf5, 0x02, 0x83, 0x4f, + 0x68, 0x5c, 0x51, 0xf4, 0xd1, 0x34, 0xf9, 0x08, + 0xe2, 0x93, 0xab, 0x73, 0x62, 0x53, 0x2a, 0x3f, + 0x08, 0x0c, 0x95, 0x52, 0x46, 0x65, 0x9d, 0x5e, + 0x3c, 0x00, 0x40, 0x55, 0x01, 0x00, 0x30, 0x28, + 0x37, 0xa1, 0x0a, 0x0f, 0x2f, 0xb5, 0x0e, 0x09, + 0x24, 0x36, 0x1b, 0x9b, 0xdf, 0x3d, 0xcd, 0x26, + 0x4e, 0x69, 0x7f, 0xcd, 0xea, 0x9f, 0x12, 0x1b, + 0x1d, 0x9e, 0x58, 0x74, 0x34, 0x2e, 0x36, 0x2d, + 0xdc, 0xb2, 0xb4, 0xee, 0x5b, 0xfb, 0xa4, 0xf6, + 0x76, 0x4d, 0xb7, 0x61, 0x7d, 0xce, 0x52, 0x7b, + 0xdd, 0x3e, 0x5e, 0x71, 0x13, 0x97, 0xa6, 0xf5, + 0xb9, 0x68, 0x3c, 0x00, 0x7c, 0x55, 0x01, 0x00, + 0x00, 0x00, 0xc1, 0x2c, 0x40, 0x60, 0xe3, 0x1f, + 0x79, 0xc8, 0xb6, 0xed, 0xd4, 0xbe, 0x8d, 0x46, + 0x67, 0xd9, 0x72, 0x4b, 0x94, 0xde, 0x98, 0xd4, + 0xb0, 0xe8, 0x85, 0x4a, 0xbb, 0x6b, 0xc5, 0x2a, + 0x4f, 0xe5, 0xed, 0x16, 0x86, 0xc5, 0x9a, 0xd7, + 0x66, 0x55, 0x11, 0x94, 0x8a, 0xcf, 0xe9, 0x10, + 0x04, 0x06, 0xfe, 0x81, 0xa0, 0xf0, 0x78, 0x44, + 0x25, 0xba, 0x4b, 0xe3, 0x3c, 0x00, 0xb8, 0x55, + 0x01, 0x00, 0xa2, 0xf3, 0x5d, 0xfe, 0x80, 0xc0, + 0x05, 0x8a, 0x3f, 0xad, 0x21, 0xbc, 0x70, 0x48, + 0xf1, 0x04, 0x63, 0xdf, 0x77, 0xc1, 0xaf, 0x75, + 0x42, 0x63, 0x20, 0x30, 0xe5, 0x1a, 0xfd, 0x0e, + 0xbf, 0x6d, 0x81, 0x4c, 0x18, 0x14, 0x26, 0x35, + 0xc3, 0x2f, 0xbe, 0xe1, 0x35, 0xa2, 0x88, 0xcc, + 0x2e, 0x39, 0x93, 0x57, 0x55, 0xf2, 0xfc, 0x82, + 0x7a, 0x47, 0xc8, 0xac, 0xba, 0xe7, 0x3c, 0x00, + 0xf4, 0x55, 0x01, 0x00, 0x32, 0x2b, 0xe6, 0x95, + 0xc0, 0xa0, 0x19, 0x98, 0x9e, 0xd1, 0xa3, 0x7f, + 0x44, 0x66, 0x54, 0x7e, 0x3b, 0xab, 0x0b, 0x83, + 0x8c, 0xca, 0xc7, 0x29, 0x6b, 0xd3, 0x28, 0x3c, + 0xa7, 0x79, 0xbc, 0xe2, 0x16, 0x1d, 0xad, 0x76, + 0xdb, 0x3b, 0x64, 0x56, 0x74, 0x4e, 0x14, 0x1e, + 0x92, 0xdb, 0x0c, 0x0a, 0x48, 0x6c, 0xb8, 0xe4, + 0x9f, 0x5d, 0xbd, 0x6e, 0x43, 0xef, 0xc4, 0xa6, + 0x3c, 0x00, 0x30, 0x56, 0x01, 0x00, 0x39, 0xa8, + 0x31, 0xa4, 0xd3, 0x37, 0xf2, 0x8b, 0xd5, 0x32, + 0x8b, 0x43, 0x6e, 0x59, 0xda, 0xb7, 0x01, 0x8c, + 0xb1, 0x64, 0x9c, 0xd2, 0x49, 0xe0, 0xd8, 0xb4, + 0xac, 0xfa, 0xf3, 0x07, 0xcf, 0x25, 0xca, 0xaf, + 0xf4, 0x8e, 0x47, 0xe9, 0x10, 0x18, 0x6f, 0xd5, + 0xf0, 0x88, 0x4a, 0x6f, 0x5c, 0x72, 0x38, 0x24, + 0x57, 0xf1, 0x73, 0xc7, 0x97, 0x51, 0xcb, 0x23, + 0xa1, 0x7c, 0x3c, 0x00, 0x6c, 0x56, 0x01, 0x00, + 0xe8, 0x9c, 0x3e, 0x21, 0x96, 0xdd, 0x61, 0xdc, + 0x0d, 0x86, 0x0f, 0x85, 0xe0, 0x90, 0x7c, 0x42, + 0x71, 0xc4, 0xcc, 0xaa, 0x90, 0xd8, 0x06, 0x05, + 0xf7, 0x01, 0x1c, 0x12, 0xc2, 0xa3, 0x6a, 0x5f, + 0xae, 0xf9, 0x69, 0xd0, 0x17, 0x91, 0x99, 0x58, + 0x3a, 0x27, 0x27, 0xb9, 0xd9, 0x38, 0xeb, 0x13, + 0x2b, 0xb3, 0x22, 0x33, 0xd2, 0xbb, 0xa9, 0x70, + 0x07, 0x89, 0x33, 0xa7, 0x3c, 0x00, 0xa8, 0x56, + 0x01, 0x00, 0x2d, 0xb6, 0x3c, 0x22, 0x15, 0x92, + 0xc9, 0x20, 0x87, 0x49, 0xaa, 0xff, 0x50, 0x78, + 0xa5, 0x7a, 0x03, 0x8f, 0x59, 0xf8, 0x09, 0x80, + 0x1a, 0x17, 0x65, 0xda, 0xd7, 0x31, 0x84, 0xc6, + 0xd0, 0xb8, 0x82, 0xc3, 0x29, 0xb0, 0x5a, 0x77, + 0x1e, 0x11, 0x7b, 0xcb, 0xa8, 0xfc, 0x6d, 0xd6, + 0x2c, 0x3a, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xe4, 0x56, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x72, 0x65, 0x71, 0x45, 0x72, 0x72, 0x52, + 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x20, 0x57, 0x01, 0x00, 0xc4, 0x8e, + 0x01, 0x00, 0x24, 0x9a, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x24, 0x9a, + 0x01, 0x00, 0xa4, 0xb2, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0xa4, 0xb2, + 0x01, 0x00, 0x14, 0xc8, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x10, 0x20, + 0x30, 0x40, 0x50, 0xbb, 0x30, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x5c, 0x57, 0x01, 0x00, + 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e, 0x20, 0x22, + 0x24, 0x26, 0x28, 0x2a, 0x2b, 0x2c, 0x01, 0x00, + 0x70, 0x17, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0d, 0x25, 0x00, 0x00, 0x41, 0x3f, 0x01, 0x00, + 0x65, 0x29, 0x01, 0x00, 0x0d, 0x25, 0x00, 0x00, + 0xf5, 0x5e, 0x00, 0x00, 0x41, 0x3f, 0x01, 0x00, + 0x41, 0x3f, 0x01, 0x00, 0x02, 0x04, 0x0b, 0x0c, + 0x12, 0x16, 0x18, 0x24, 0x3c, 0x00, 0x98, 0x57, + 0x01, 0x00, 0x30, 0x48, 0x60, 0x6c, 0x01, 0x00, + 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x02, 0x10, 0x12, 0x11, 0x00, + 0x00, 0x01, 0x18, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xd4, 0x57, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xe0, 0x93, 0x04, 0x00, + 0x40, 0x42, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0xdf, 0x40, 0xcf, 0xfd, 0x00, 0x40, 0x83, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, + 0x3c, 0x00, 0x10, 0x58, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x40, 0x00, 0x80, 0x81, 0x00, 0x00, + 0x80, 0x00, 0xbf, 0xff, 0x7f, 0x7e, 0x01, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x78, 0x6f, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, 0x6f, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x6f, + 0x01, 0x00, 0x3c, 0x00, 0x4c, 0x58, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x70, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x78, 0x70, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xb8, 0x70, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xf8, 0x70, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x71, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x78, 0x71, 0x01, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x90, 0x71, 0x01, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x3c, 0x00, 0x88, 0x58, + 0x01, 0x00, 0xa8, 0x71, 0x01, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x05, 0x0a, 0x01, 0x06, 0x0b, + 0x02, 0x07, 0x0c, 0x03, 0x08, 0x0d, 0x04, 0x09, + 0x00, 0x00, 0x03, 0x03, 0x01, 0x01, 0x00, 0x04, + 0x00, 0x04, 0x04, 0x06, 0x16, 0x1e, 0x1f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, + 0xff, 0xff, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, + 0xc4, 0x58, 0x01, 0x00, 0x18, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, + 0x61, 0x8b, 0x4a, 0x00, 0x61, 0x8f, 0x4a, 0x00, + 0x61, 0x8b, 0x4a, 0x00, 0x05, 0xe3, 0xc0, 0x00, + 0x05, 0xcb, 0xc0, 0x00, 0x05, 0xbb, 0xc0, 0x00, + 0x85, 0xba, 0xc0, 0x00, 0x85, 0xa2, 0xc0, 0x00, + 0x85, 0x92, 0xc0, 0x00, 0x85, 0x8a, 0xc0, 0x00, + 0x85, 0x7a, 0xc0, 0x00, 0x45, 0x89, 0xc0, 0x00, + 0x3c, 0x00, 0x00, 0x59, 0x01, 0x00, 0x45, 0x71, + 0xc0, 0x00, 0x45, 0x69, 0xc0, 0x00, 0x45, 0x61, + 0xc0, 0x00, 0x45, 0x59, 0xc0, 0x00, 0x45, 0x51, + 0xc0, 0x00, 0x45, 0x49, 0xc0, 0x00, 0x45, 0x41, + 0xc0, 0x00, 0x45, 0x39, 0xc0, 0x00, 0x45, 0x31, + 0xc0, 0x00, 0x45, 0x29, 0xc0, 0x00, 0x45, 0x21, + 0xc0, 0x00, 0x60, 0x2d, 0x06, 0x00, 0x60, 0x2d, + 0x06, 0x00, 0x60, 0x2d, 0x06, 0x00, 0x60, 0x2d, + 0x06, 0x00, 0x3c, 0x00, 0x3c, 0x59, 0x01, 0x00, + 0x60, 0x2d, 0x06, 0x00, 0x60, 0x28, 0x06, 0x00, + 0x50, 0x26, 0x06, 0x00, 0x50, 0x21, 0x06, 0x00, + 0x50, 0x1f, 0x06, 0x00, 0x50, 0x1c, 0x06, 0x00, + 0x50, 0x1a, 0x06, 0x00, 0x50, 0x18, 0x06, 0x00, + 0x50, 0x16, 0x06, 0x00, 0x50, 0x14, 0x06, 0x00, + 0x50, 0x12, 0x06, 0x00, 0x50, 0x10, 0x06, 0x00, + 0x50, 0x0e, 0x06, 0x00, 0x50, 0x0c, 0x06, 0x00, + 0x50, 0x0a, 0x06, 0x00, 0x3c, 0x00, 0x78, 0x59, + 0x01, 0x00, 0x2b, 0x0b, 0x06, 0x00, 0x1d, 0x75, + 0xc0, 0x00, 0x1d, 0x75, 0xc0, 0x00, 0x1d, 0x75, + 0xc0, 0x00, 0x1d, 0x75, 0xc0, 0x00, 0x1d, 0x75, + 0xc0, 0x00, 0x1d, 0x75, 0xc0, 0x00, 0x1d, 0x6d, + 0xc0, 0x00, 0xdd, 0x5b, 0xc0, 0x00, 0xdd, 0x4b, + 0xc0, 0x00, 0xdd, 0x43, 0xc0, 0x00, 0xdd, 0x3b, + 0xc0, 0x00, 0xdd, 0x33, 0xc0, 0x00, 0xdd, 0x2b, + 0xc0, 0x00, 0xdd, 0x23, 0xc0, 0x00, 0x3c, 0x00, + 0xb4, 0x59, 0x01, 0x00, 0xdd, 0x1b, 0xc0, 0x00, + 0xdd, 0x13, 0xc0, 0x00, 0xdd, 0x13, 0xc0, 0x00, + 0xdd, 0x13, 0xc0, 0x00, 0xdd, 0x13, 0xc0, 0x00, + 0xdd, 0x13, 0xc0, 0x00, 0x05, 0x05, 0x05, 0x04, + 0x04, 0x03, 0x03, 0x02, 0x02, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x05, 0x05, 0x05, 0x04, 0x04, 0x03, + 0x03, 0x02, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x88, 0x13, 0x00, 0x00, + 0x3c, 0x00, 0xf0, 0x59, 0x01, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x80, 0x00, 0x5b, 0x00, 0x40, 0x02, + 0xe0, 0xfd, 0xf2, 0x00, 0xb8, 0xfc, 0xa4, 0x01, + 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0f, 0x00, + 0x00, 0x00, 0x03, 0x0b, 0x9f, 0x5f, 0x07, 0x01, + 0x2a, 0x04, 0x21, 0x04, 0x17, 0x04, 0x0e, 0x04, + 0x04, 0x04, 0xfb, 0x03, 0xf1, 0x03, 0xe8, 0x03, + 0xc9, 0x03, 0xaa, 0x03, 0x8a, 0x03, 0x6b, 0x03, + 0x4c, 0x03, 0x3c, 0x00, 0x2c, 0x5a, 0x01, 0x00, + 0x2d, 0x03, 0x0e, 0x03, 0xee, 0x02, 0xec, 0x02, + 0x01, 0x03, 0x16, 0x03, 0x2b, 0x03, 0x40, 0x03, + 0x55, 0x03, 0x6a, 0x03, 0x7f, 0x03, 0x94, 0x03, + 0xa9, 0x03, 0xbe, 0x03, 0xd3, 0x03, 0xe8, 0x03, + 0xbe, 0x03, 0x94, 0x03, 0x6a, 0x03, 0x00, 0x02, + 0x04, 0x06, 0x07, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x00, 0x03, 0x3c, 0x00, 0x68, 0x5a, + 0x01, 0x00, 0x05, 0x08, 0x0b, 0x0e, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xa4, 0x5a, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xe0, 0x5a, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x1c, 0x5b, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x58, 0x5b, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x94, 0x5b, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xd0, 0x5b, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x0c, 0x5c, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x48, 0x5c, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x84, 0x5c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xc0, 0x5c, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xfc, 0x5c, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x38, 0x5d, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x74, 0x5d, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xb0, 0x5d, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xec, 0x5d, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x28, 0x5e, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x64, 0x5e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xa0, 0x5e, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xdc, 0x5e, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x18, 0x5f, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x54, 0x5f, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x90, 0x5f, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xcc, 0x5f, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x08, 0x60, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x44, 0x60, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x80, 0x60, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xbc, 0x60, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xf8, 0x60, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x34, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x70, 0x61, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xac, 0x61, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xe8, 0x61, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x24, 0x62, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x60, 0x62, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x9c, 0x62, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xd8, 0x62, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x14, 0x63, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x50, 0x63, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x8c, 0x63, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xc8, 0x63, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x40, 0x64, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x7c, 0x64, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xb8, 0x64, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xf4, 0x64, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x30, 0x65, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x6c, 0x65, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xa8, 0x65, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xe4, 0x65, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x20, 0x66, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x5c, 0x66, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x98, 0x66, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xd4, 0x66, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x10, 0x67, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x4c, 0x67, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x88, 0x67, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xc4, 0x67, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0x68, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x68, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x78, 0x68, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xb4, 0x68, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xf0, 0x68, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x2c, 0x69, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x68, 0x69, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xa4, 0x69, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xe0, 0x69, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x1c, 0x6a, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x58, 0x6a, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x94, 0x6a, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xd0, 0x6a, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x0c, 0x6b, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x48, 0x6b, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x84, 0x6b, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xc0, 0x6b, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xfc, 0x6b, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x38, 0x6c, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x74, 0x6c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xb0, 0x6c, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xec, 0x6c, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x28, 0x6d, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x64, 0x6d, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xa0, 0x6d, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xdc, 0x6d, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x18, 0x6e, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x54, 0x6e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x90, 0x6e, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xcc, 0x6e, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x08, 0x6f, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x44, 0x6f, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x80, 0x6f, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xbc, 0x6f, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xf8, 0x6f, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x34, 0x70, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x70, 0x70, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xac, 0x70, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xe8, 0x70, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x24, 0x71, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x60, 0x71, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x9c, 0x71, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xd8, 0x71, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x14, 0x72, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x50, 0x72, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x8c, 0x72, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xc8, 0x72, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x40, 0x73, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x7c, 0x73, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xb8, 0x73, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xf4, 0x73, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x30, 0x74, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x6c, 0x74, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xa8, 0x74, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xe4, 0x74, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x20, 0x75, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x5c, 0x75, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x98, 0x75, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xd4, 0x75, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x10, 0x76, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x4c, 0x76, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x88, 0x76, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xc4, 0x76, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0x77, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x77, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x78, 0x77, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xb4, 0x77, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xf0, 0x77, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x2c, 0x78, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x68, 0x78, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xa4, 0x78, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xe0, 0x78, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x1c, 0x79, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x58, 0x79, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x94, 0x79, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xd0, 0x79, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x0c, 0x7a, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x48, 0x7a, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x84, 0x7a, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xc0, 0x7a, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xfc, 0x7a, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x38, 0x7b, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x74, 0x7b, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xb0, 0x7b, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xec, 0x7b, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x28, 0x7c, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x64, 0x7c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xa0, 0x7c, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xdc, 0x7c, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x18, 0x7d, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x54, 0x7d, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x90, 0x7d, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xcc, 0x7d, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x08, 0x7e, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x44, 0x7e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x80, 0x7e, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xbc, 0x7e, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xf8, 0x7e, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x34, 0x7f, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x70, 0x7f, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xac, 0x7f, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xe8, 0x7f, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x70, 0xb5, 0x01, 0x25, 0x07, 0x4e, + 0xad, 0x03, 0x75, 0x61, 0x0a, 0x20, 0xfa, 0xf7, + 0x6c, 0xff, 0x30, 0x68, 0x80, 0x03, 0xc4, 0x0f, + 0xb5, 0x61, 0x0a, 0x20, 0xfa, 0xf7, 0x65, 0xff, + 0x20, 0x1c, 0x70, 0xbd, 0x00, 0x00, 0x3c, 0x00, + 0x24, 0x80, 0x01, 0x00, 0x10, 0x00, 0x07, 0x00, + 0x70, 0xb5, 0x01, 0x25, 0x6d, 0x04, 0x00, 0x28, + 0x10, 0x4c, 0x01, 0xd0, 0x65, 0x61, 0x00, 0xe0, + 0xa5, 0x61, 0x60, 0x68, 0x28, 0x43, 0x60, 0x60, + 0xa0, 0x68, 0x28, 0x43, 0xa0, 0x60, 0x0a, 0x20, + 0xfa, 0xf7, 0x4e, 0xff, 0x01, 0x26, 0xb6, 0x03, + 0x66, 0x61, 0x0a, 0x20, 0xfa, 0xf7, 0x48, 0xff, + 0xa6, 0x61, 0x01, 0x20, 0xfa, 0xf7, 0x44, 0xff, + 0x3c, 0x00, 0x60, 0x80, 0x01, 0x00, 0xa0, 0x68, + 0xa8, 0x43, 0xa0, 0x60, 0x60, 0x68, 0x28, 0x43, + 0x60, 0x60, 0x0a, 0x20, 0xfa, 0xf7, 0x3b, 0xff, + 0x70, 0xbd, 0x10, 0x00, 0x07, 0x00, 0x70, 0xb5, + 0x01, 0x25, 0x10, 0x4c, 0x6d, 0x04, 0x65, 0x61, + 0x60, 0x68, 0x28, 0x43, 0x60, 0x60, 0xa0, 0x68, + 0x28, 0x43, 0xa0, 0x60, 0xee, 0x08, 0xa6, 0x61, + 0x0a, 0x20, 0xfa, 0xf7, 0x28, 0xff, 0x66, 0x61, + 0x0a, 0x20, 0x3c, 0x00, 0x9c, 0x80, 0x01, 0x00, + 0xfa, 0xf7, 0x24, 0xff, 0xa5, 0x61, 0x0a, 0x20, + 0xfa, 0xf7, 0x20, 0xff, 0xa6, 0x61, 0x0a, 0x20, + 0xfa, 0xf7, 0x1c, 0xff, 0xa0, 0x68, 0xa8, 0x43, + 0xa0, 0x60, 0x60, 0x68, 0x28, 0x43, 0x60, 0x60, + 0x70, 0xbd, 0x00, 0x00, 0x10, 0x00, 0x07, 0x00, + 0x70, 0xb5, 0x01, 0x25, 0x0e, 0x4c, 0x6d, 0x04, + 0xa5, 0x61, 0x60, 0x68, 0x28, 0x43, 0x60, 0x60, + 0xa0, 0x68, 0x28, 0x43, 0x3c, 0x00, 0xd8, 0x80, + 0x01, 0x00, 0xa0, 0x60, 0xee, 0x08, 0x66, 0x61, + 0x0a, 0x20, 0xfa, 0xf7, 0x02, 0xff, 0x65, 0x61, + 0x0a, 0x20, 0xfa, 0xf7, 0xfe, 0xfe, 0xa6, 0x61, + 0x0a, 0x20, 0xfa, 0xf7, 0xfa, 0xfe, 0xa0, 0x68, + 0xa8, 0x43, 0xa0, 0x60, 0x60, 0x68, 0x28, 0x43, + 0x60, 0x60, 0x70, 0xbd, 0x00, 0x00, 0x10, 0x00, + 0x07, 0x00, 0x70, 0xb5, 0x05, 0x1c, 0x00, 0x24, + 0x80, 0x26, 0x28, 0x1c, 0x30, 0x40, 0x3c, 0x00, + 0x14, 0x81, 0x01, 0x00, 0xff, 0xf7, 0x88, 0xff, + 0x68, 0x06, 0x05, 0x0e, 0x01, 0x34, 0x08, 0x2c, + 0xf6, 0xdb, 0xff, 0xf7, 0x6d, 0xff, 0x70, 0xbd, + 0x80, 0xb5, 0x02, 0x1c, 0x0b, 0x21, 0x80, 0x20, + 0xfb, 0xf7, 0x3e, 0xfb, 0x80, 0xbd, 0x00, 0x00, + 0xf8, 0xb5, 0x12, 0x48, 0x00, 0x25, 0x07, 0x1c, + 0xff, 0x37, 0x06, 0x1d, 0x01, 0x37, 0x28, 0x1c, + 0xf9, 0xf7, 0xea, 0xfd, 0x04, 0x1c, 0x17, 0xd0, + 0x3c, 0x00, 0x50, 0x81, 0x01, 0x00, 0x20, 0x69, + 0x00, 0x28, 0x04, 0xd0, 0xe0, 0x6a, 0x00, 0x28, + 0x03, 0xd0, 0x00, 0x20, 0xe0, 0x62, 0x25, 0x1c, + 0xf0, 0xe7, 0x7b, 0x68, 0x00, 0x2b, 0x05, 0xd0, + 0x32, 0x1c, 0x21, 0x1c, 0x44, 0x31, 0x01, 0x20, + 0xe8, 0xf7, 0x34, 0xf9, 0x20, 0x1c, 0x44, 0x30, + 0xf9, 0xf7, 0x37, 0xfe, 0xe2, 0xe7, 0xf8, 0xbd, + 0x00, 0x00, 0x20, 0xf7, 0x01, 0x00, 0x11, 0x48, + 0x70, 0xb5, 0x3c, 0x00, 0x8c, 0x81, 0x01, 0x00, + 0x00, 0x68, 0xff, 0x28, 0x1d, 0xd1, 0xff, 0x20, + 0x32, 0x30, 0xfa, 0xf7, 0xa7, 0xfe, 0x0e, 0x4d, + 0x6c, 0x68, 0x0e, 0x48, 0xfa, 0xf7, 0xa2, 0xfe, + 0x68, 0x68, 0x24, 0x1a, 0x01, 0x20, 0x00, 0xf0, + 0x95, 0xfd, 0x6e, 0x68, 0x09, 0x48, 0xfa, 0xf7, + 0x99, 0xfe, 0x68, 0x68, 0x21, 0x1c, 0x0a, 0x39, + 0x30, 0x1a, 0x88, 0x42, 0x02, 0xd3, 0x0a, 0x34, + 0xa0, 0x42, 0x02, 0xd9, 0x3c, 0x00, 0xc8, 0x81, + 0x01, 0x00, 0x00, 0x20, 0x00, 0xf0, 0x85, 0xfd, + 0x70, 0xbd, 0xf4, 0x74, 0x01, 0x00, 0x00, 0x03, + 0x07, 0x00, 0x93, 0x03, 0x00, 0x00, 0x70, 0xb5, + 0x00, 0xf0, 0x4d, 0xf8, 0x01, 0x20, 0xed, 0xf7, + 0x34, 0xf9, 0x11, 0x4d, 0x18, 0x21, 0x68, 0x60, + 0x00, 0x20, 0xe9, 0xf7, 0xf2, 0xf9, 0x28, 0x60, + 0x04, 0x68, 0x80, 0x20, 0x20, 0x80, 0x00, 0x26, + 0x06, 0x22, 0xff, 0x21, 0x20, 0x1d, 0x3c, 0x00, + 0x04, 0x82, 0x01, 0x00, 0x66, 0x80, 0xe8, 0xf7, + 0x0b, 0xfa, 0x20, 0x1c, 0x0a, 0x30, 0x09, 0x49, + 0xf2, 0xf7, 0x2e, 0xfd, 0x20, 0x1c, 0x10, 0x30, + 0x07, 0x49, 0xf2, 0xf7, 0x29, 0xfd, 0xe6, 0x82, + 0x03, 0xcd, 0xe9, 0xf7, 0xf9, 0xf8, 0x02, 0x49, + 0x01, 0x20, 0x14, 0x39, 0x88, 0x60, 0x70, 0xbd, + 0x90, 0xd9, 0x01, 0x00, 0x12, 0x61, 0x01, 0x00, + 0x24, 0xf7, 0x01, 0x00, 0x70, 0x47, 0x00, 0x00, + 0x3c, 0x00, 0x40, 0x82, 0x01, 0x00, 0x10, 0xb5, + 0x06, 0x4c, 0x00, 0x22, 0x02, 0x20, 0xe1, 0x68, + 0xf0, 0xf7, 0x11, 0xfb, 0x60, 0x78, 0x02, 0x28, + 0x01, 0xd1, 0x00, 0xf0, 0x1a, 0xf9, 0x10, 0xbd, + 0x00, 0x00, 0x40, 0xd9, 0x01, 0x00, 0x80, 0xb5, + 0xa1, 0x20, 0xff, 0xf7, 0x50, 0xff, 0x80, 0xbd, + 0x00, 0x00, 0x40, 0x00, 0x0e, 0x21, 0x08, 0x40, + 0x80, 0xb5, 0xa0, 0x30, 0xff, 0xf7, 0x47, 0xff, + 0x80, 0xbd, 0x3c, 0x00, 0x7c, 0x82, 0x01, 0x00, + 0x10, 0xb5, 0x05, 0x4c, 0x20, 0x68, 0x00, 0x28, + 0x04, 0xd0, 0xe9, 0xf7, 0x87, 0xf9, 0x00, 0x20, + 0x20, 0x60, 0x60, 0x60, 0x10, 0xbd, 0x00, 0x00, + 0x90, 0xd9, 0x01, 0x00, 0x10, 0xb5, 0x07, 0x4c, + 0x01, 0x21, 0x07, 0x4a, 0x21, 0x61, 0x02, 0x20, + 0x10, 0x70, 0x61, 0x61, 0x00, 0xf0, 0xd6, 0xfc, + 0x00, 0xf0, 0xc8, 0xfb, 0x20, 0x1c, 0xed, 0xf7, + 0x9f, 0xfa, 0x10, 0xbd, 0x3c, 0x00, 0xb8, 0x82, + 0x01, 0x00, 0x20, 0xf7, 0x01, 0x00, 0x7c, 0xd9, + 0x01, 0x00, 0x70, 0xb5, 0x02, 0x1c, 0x08, 0x1c, + 0x02, 0x25, 0x00, 0x2a, 0x13, 0x4e, 0x14, 0xd0, + 0x00, 0xf0, 0x11, 0xfc, 0x30, 0x78, 0x01, 0x21, + 0x08, 0x43, 0x30, 0x70, 0x30, 0x78, 0x28, 0x43, + 0x30, 0x70, 0x00, 0x20, 0x7d, 0x21, 0x49, 0x01, + 0xb2, 0x79, 0x92, 0x07, 0x00, 0xd5, 0x01, 0x34, + 0x01, 0x30, 0x88, 0x42, 0xf8, 0xdb, 0x3c, 0x00, + 0xf4, 0x82, 0x01, 0x00, 0x20, 0x1c, 0x70, 0xbd, + 0x30, 0x78, 0xa8, 0x43, 0x30, 0x70, 0x30, 0x78, + 0x40, 0x08, 0x40, 0x00, 0x30, 0x70, 0x05, 0x49, + 0x48, 0x68, 0x01, 0x22, 0x12, 0x04, 0x90, 0x43, + 0x48, 0x60, 0x01, 0x20, 0x70, 0xbd, 0x00, 0x00, + 0x88, 0x00, 0x07, 0x00, 0x6c, 0x00, 0x07, 0x00, + 0xff, 0xb5, 0x09, 0xae, 0x00, 0x20, 0x60, 0xce, + 0x28, 0x60, 0x00, 0x23, 0x9c, 0x46, 0x30, 0x60, + 0x3c, 0x00, 0x30, 0x83, 0x01, 0x00, 0x69, 0x46, + 0x01, 0xaa, 0x17, 0xe0, 0xdb, 0x07, 0x0e, 0xd5, + 0x12, 0x4b, 0x1c, 0x56, 0x63, 0x1c, 0x0a, 0xd0, + 0x01, 0x27, 0x2b, 0x68, 0xa7, 0x40, 0x3b, 0x43, + 0x2b, 0x60, 0x13, 0x68, 0xdb, 0x07, 0x02, 0xd5, + 0x33, 0x68, 0x3b, 0x43, 0x33, 0x60, 0x0b, 0x68, + 0x5b, 0x08, 0x0b, 0x60, 0x13, 0x68, 0x5b, 0x08, + 0x13, 0x60, 0x01, 0x30, 0x0b, 0x68, 0x00, 0x2b, + 0x01, 0xd0, 0x3c, 0x00, 0x6c, 0x83, 0x01, 0x00, + 0x22, 0x28, 0xe2, 0xd3, 0x63, 0x46, 0x01, 0x33, + 0x20, 0x20, 0x02, 0x2b, 0x9c, 0x46, 0x02, 0xa9, + 0x03, 0xaa, 0xf2, 0xdb, 0xff, 0xbd, 0x00, 0x00, + 0xb4, 0x8d, 0x01, 0x00, 0xb0, 0xb5, 0x04, 0x1c, + 0x0d, 0x1c, 0x1e, 0x21, 0x00, 0x22, 0x03, 0x20, + 0x05, 0x4b, 0xf9, 0xf7, 0xb3, 0xf8, 0x21, 0x1c, + 0x03, 0x20, 0xf9, 0xf7, 0xf5, 0xf8, 0x29, 0x1c, + 0x03, 0x20, 0xf9, 0xf7, 0x3c, 0x00, 0xa8, 0x83, + 0x01, 0x00, 0xf1, 0xf8, 0xb0, 0xbd, 0x80, 0x38, + 0x01, 0x00, 0xb0, 0xb5, 0x1c, 0x4c, 0x1c, 0x4d, + 0x21, 0x78, 0x02, 0x29, 0x09, 0xd0, 0x03, 0x29, + 0x19, 0xd0, 0x04, 0x29, 0x1f, 0xd0, 0x05, 0x29, + 0x23, 0xd1, 0x00, 0x20, 0x00, 0xf0, 0x17, 0xfb, + 0x23, 0xe0, 0x68, 0x61, 0x14, 0x48, 0x1c, 0x30, + 0xc1, 0x68, 0x02, 0x69, 0x89, 0x18, 0xc1, 0x60, + 0x00, 0xf0, 0x2f, 0xfb, 0xe0, 0x68, 0x3c, 0x00, + 0xe4, 0x83, 0x01, 0x00, 0x01, 0x38, 0xe0, 0x60, + 0x16, 0xd1, 0x32, 0x20, 0xe0, 0x60, 0xff, 0xf7, + 0xa3, 0xfe, 0x11, 0xe0, 0x00, 0x20, 0x00, 0xf0, + 0x01, 0xfb, 0x00, 0xf0, 0x2d, 0xfc, 0x01, 0x20, + 0x20, 0x70, 0x09, 0xe0, 0x00, 0x20, 0x00, 0xf0, + 0xf9, 0xfa, 0xff, 0xf7, 0x45, 0xff, 0x03, 0xe0, + 0x05, 0x21, 0x0b, 0x20, 0xe8, 0xf7, 0x46, 0xff, + 0x68, 0x69, 0x61, 0x68, 0xe7, 0xf7, 0xdd, 0xff, + 0x3c, 0x00, 0x20, 0x84, 0x01, 0x00, 0xb0, 0xbd, + 0x00, 0x00, 0x7c, 0xd9, 0x01, 0x00, 0x20, 0xf7, + 0x01, 0x00, 0xf7, 0xb5, 0x04, 0x1c, 0x17, 0x1c, + 0xff, 0xf7, 0x21, 0xfe, 0x20, 0x0a, 0xff, 0xf7, + 0x18, 0xff, 0x20, 0x06, 0x00, 0x0e, 0xff, 0xf7, + 0x62, 0xfe, 0xff, 0xf7, 0x18, 0xfe, 0xa1, 0x20, + 0xff, 0xf7, 0x5d, 0xfe, 0x00, 0x25, 0x16, 0xe0, + 0x00, 0x20, 0x00, 0x24, 0x40, 0x06, 0x06, 0x0e, + 0xff, 0xf7, 0x3c, 0x00, 0x5c, 0x84, 0x01, 0x00, + 0xd1, 0xfd, 0x00, 0x06, 0x00, 0x0e, 0x30, 0x43, + 0x01, 0x34, 0x08, 0x2c, 0xf5, 0xdb, 0x29, 0x1c, + 0x01, 0x9a, 0x01, 0x35, 0xbd, 0x42, 0x50, 0x54, + 0x01, 0xda, 0x00, 0x20, 0x00, 0xe0, 0x01, 0x20, + 0xff, 0xf7, 0xd4, 0xfd, 0xbd, 0x42, 0xe6, 0xdb, + 0xff, 0xf7, 0x1e, 0xfe, 0xfe, 0xbd, 0x00, 0x00, + 0x80, 0xb5, 0xff, 0xf7, 0x19, 0xfe, 0x09, 0x21, + 0x89, 0x03, 0x00, 0x22, 0x3c, 0x00, 0x98, 0x84, + 0x01, 0x00, 0x02, 0x20, 0xf0, 0xf7, 0xe9, 0xf9, + 0x80, 0xbd, 0x09, 0x21, 0x89, 0x03, 0x80, 0xb5, + 0x00, 0x22, 0x02, 0x20, 0xf0, 0xf7, 0xc9, 0xf9, + 0x01, 0x21, 0x09, 0x48, 0x89, 0x03, 0x81, 0x61, + 0x42, 0x68, 0x0a, 0x43, 0x42, 0x60, 0x82, 0x68, + 0x11, 0x43, 0x81, 0x60, 0x01, 0x21, 0x49, 0x04, + 0x81, 0x61, 0x82, 0x68, 0x8a, 0x43, 0x82, 0x60, + 0x42, 0x68, 0x11, 0x43, 0x41, 0x60, 0x3c, 0x00, + 0xd4, 0x84, 0x01, 0x00, 0x80, 0xbd, 0x00, 0x00, + 0x10, 0x00, 0x07, 0x00, 0xf0, 0xb5, 0x04, 0x1c, + 0xc0, 0x68, 0x7b, 0x4e, 0x05, 0x68, 0x30, 0x78, + 0x85, 0xb0, 0x01, 0x28, 0x01, 0xd0, 0x02, 0x28, + 0x72, 0xd1, 0x00, 0x21, 0x20, 0x69, 0xf2, 0xf7, + 0x41, 0xf9, 0x76, 0x49, 0xf2, 0xf7, 0x24, 0xfc, + 0x00, 0x28, 0x69, 0xd0, 0x20, 0x1c, 0x20, 0x30, + 0x41, 0x7a, 0x08, 0x29, 0x02, 0xd1, 0x72, 0x4a, + 0x3c, 0x00, 0x10, 0x85, 0x01, 0x00, 0x00, 0x21, + 0x51, 0x61, 0x00, 0x7a, 0x22, 0x6a, 0x18, 0x21, + 0xf2, 0xf7, 0xc9, 0xfb, 0xe1, 0x6a, 0x37, 0x1c, + 0x40, 0x18, 0x6c, 0x49, 0x02, 0x90, 0x30, 0x78, + 0x0e, 0x1c, 0xff, 0x36, 0x0a, 0x1d, 0x01, 0x36, + 0x01, 0x28, 0x04, 0x92, 0x07, 0xd0, 0x65, 0x4a, + 0x02, 0x99, 0x1c, 0x32, 0x28, 0x1c, 0xed, 0xf7, + 0xe2, 0xfb, 0x00, 0x28, 0x6b, 0xd0, 0x32, 0x21, + 0x20, 0x69, 0x3c, 0x00, 0x4c, 0x85, 0x01, 0x00, + 0xf2, 0xf7, 0x16, 0xf9, 0x01, 0x90, 0x20, 0x69, + 0x01, 0x21, 0xf2, 0xf7, 0x11, 0xf9, 0x01, 0x1c, + 0x5e, 0x48, 0x01, 0x23, 0x01, 0x9a, 0xed, 0xf7, + 0x07, 0xfc, 0x00, 0x28, 0x04, 0xd1, 0x5b, 0x48, + 0xed, 0xf7, 0x92, 0xfa, 0x00, 0x21, 0xb9, 0x60, + 0x56, 0x48, 0x1c, 0x30, 0x81, 0x68, 0xea, 0xf7, + 0x19, 0xfc, 0x20, 0x1c, 0x14, 0x30, 0x03, 0x90, + 0x04, 0x99, 0xf2, 0xf7, 0x3c, 0x00, 0x88, 0x85, + 0x01, 0x00, 0xd5, 0xfb, 0x00, 0x28, 0x05, 0xd1, + 0x00, 0x22, 0xba, 0x60, 0x04, 0x98, 0x03, 0x99, + 0xf2, 0xf7, 0x6b, 0xfb, 0x4f, 0x49, 0x28, 0x89, + 0x09, 0x88, 0x88, 0x42, 0x03, 0xd0, 0x00, 0x22, + 0x4c, 0x49, 0xba, 0x60, 0x08, 0x80, 0x03, 0x21, + 0x20, 0x69, 0xf2, 0xf7, 0xe4, 0xf8, 0x00, 0x28, + 0x10, 0xd0, 0x46, 0x49, 0x82, 0x78, 0x20, 0x31, + 0x0b, 0x79, 0x94, 0x46, 0x9a, 0x42, 0x3c, 0x00, + 0xc4, 0x85, 0x01, 0x00, 0x09, 0xd0, 0x00, 0x22, + 0xba, 0x60, 0x62, 0x46, 0x0a, 0x71, 0x80, 0x78, + 0x01, 0x21, 0xf3, 0xf7, 0x05, 0xf9, 0x00, 0xe0, + 0x77, 0xe0, 0x06, 0x21, 0x20, 0x69, 0xf2, 0xf7, + 0xcd, 0xf8, 0x00, 0x28, 0x08, 0xd0, 0x81, 0x78, + 0x3a, 0x48, 0x40, 0x30, 0x82, 0x88, 0x91, 0x42, + 0x02, 0xd0, 0x00, 0x22, 0xba, 0x60, 0x81, 0x80, + 0x2a, 0x21, 0x20, 0x69, 0xf2, 0xf7, 0xbe, 0xf8, + 0x3c, 0x00, 0x00, 0x86, 0x01, 0x00, 0x00, 0x28, + 0x0d, 0xd0, 0x80, 0x78, 0xf1, 0x69, 0x33, 0x4a, + 0x81, 0x42, 0x08, 0xd0, 0x00, 0x21, 0xb9, 0x60, + 0xf0, 0x61, 0x10, 0x1c, 0xed, 0xf7, 0x09, 0xfb, + 0x2f, 0x48, 0xed, 0xf7, 0xfa, 0xfa, 0x38, 0x78, + 0x3b, 0x1c, 0x01, 0x28, 0x17, 0xd1, 0x02, 0x20, + 0x18, 0x70, 0x2a, 0x4f, 0x01, 0x23, 0x3b, 0x61, + 0x27, 0x4b, 0x03, 0xcd, 0x1c, 0x33, 0x08, 0x3d, + 0x02, 0x9a, 0x3c, 0x00, 0x3c, 0x86, 0x01, 0x00, + 0xed, 0xf7, 0xb0, 0xfa, 0x38, 0x1c, 0xed, 0xf7, + 0xd7, 0xf8, 0x32, 0x68, 0x00, 0x2a, 0x03, 0xd0, + 0x00, 0x21, 0x01, 0x20, 0xe7, 0xf7, 0xc4, 0xfe, + 0x00, 0xf0, 0xf4, 0xf9, 0x20, 0x1c, 0xf9, 0xf7, + 0xd5, 0xfb, 0x07, 0x1c, 0x11, 0xd1, 0x20, 0x1c, + 0xf9, 0xf7, 0x88, 0xfb, 0x07, 0x1c, 0x2e, 0xd0, + 0x01, 0x23, 0x3b, 0x61, 0x68, 0x89, 0x40, 0x21, + 0xc8, 0x53, 0x73, 0x68, 0x3c, 0x00, 0x78, 0x86, + 0x01, 0x00, 0x00, 0x2b, 0x04, 0xd0, 0x21, 0x1c, + 0x00, 0x20, 0x04, 0x9a, 0xe7, 0xf7, 0xac, 0xfe, + 0x01, 0x23, 0xfb, 0x62, 0x20, 0x69, 0x32, 0x21, + 0xf2, 0xf7, 0x75, 0xf8, 0x05, 0x1c, 0x20, 0x69, + 0x01, 0x21, 0xf2, 0xf7, 0x70, 0xf8, 0x0e, 0x4e, + 0x01, 0x1c, 0x2a, 0x1c, 0x30, 0x1c, 0xed, 0xf7, + 0xc0, 0xfb, 0x00, 0x28, 0x0e, 0xd1, 0x32, 0x21, + 0x20, 0x69, 0xf2, 0xf7, 0x64, 0xf8, 0x3c, 0x00, + 0xb4, 0x86, 0x01, 0x00, 0x05, 0x1c, 0x20, 0x69, + 0x01, 0x21, 0xf2, 0xf7, 0x5f, 0xf8, 0x01, 0x1c, + 0x3b, 0x1c, 0x2a, 0x1c, 0x30, 0x1c, 0xed, 0xf7, + 0xd7, 0xfa, 0x05, 0xb0, 0xf0, 0xbd, 0x00, 0x00, + 0x7c, 0xd9, 0x01, 0x00, 0x40, 0xf8, 0x01, 0x00, + 0x20, 0xf7, 0x01, 0x00, 0x02, 0x1c, 0x08, 0x1c, + 0x80, 0x2a, 0x80, 0xb5, 0x06, 0xd0, 0x81, 0x2a, + 0x03, 0xd0, 0x04, 0x21, 0x0b, 0x20, 0xe8, 0xf7, + 0x3c, 0x00, 0xf0, 0x86, 0x01, 0x00, 0xd9, 0xfd, + 0x80, 0xbd, 0xff, 0xf7, 0x5c, 0xfe, 0x80, 0xbd, + 0x00, 0x00, 0x03, 0x48, 0x81, 0x78, 0xff, 0x29, + 0x01, 0xd0, 0x00, 0x79, 0x70, 0x47, 0x00, 0x20, + 0x70, 0x47, 0x80, 0xf8, 0x01, 0x00, 0x30, 0xb5, + 0x89, 0xb0, 0x00, 0x93, 0x0e, 0x4d, 0x13, 0x1c, + 0x04, 0x1c, 0x2a, 0x1c, 0xec, 0xf7, 0x25, 0xfd, + 0x01, 0xa9, 0x06, 0xa8, 0xa2, 0x68, 0xec, 0xf7, + 0xce, 0xfe, 0x3c, 0x00, 0x2c, 0x87, 0x01, 0x00, + 0x01, 0xaa, 0x06, 0xa9, 0x28, 0x1c, 0x63, 0x6a, + 0xed, 0xf7, 0x44, 0xfa, 0x04, 0x1c, 0x01, 0x28, + 0x04, 0xd1, 0x28, 0x1c, 0xed, 0xf7, 0x2c, 0xf8, + 0x00, 0xf0, 0x4a, 0xf8, 0x20, 0x1c, 0x09, 0xb0, + 0x30, 0xbd, 0x00, 0x00, 0x20, 0xf7, 0x01, 0x00, + 0x80, 0xb5, 0xed, 0xf7, 0x2b, 0xf8, 0x00, 0xf0, + 0x7d, 0xf8, 0x02, 0x48, 0xed, 0xf7, 0x02, 0xfa, + 0x80, 0xbd, 0x00, 0x00, 0x3c, 0x00, 0x68, 0x87, + 0x01, 0x00, 0x20, 0xf7, 0x01, 0x00, 0x80, 0xb5, + 0x00, 0x28, 0x0b, 0xd1, 0x06, 0x48, 0xed, 0xf7, + 0xf8, 0xf9, 0x00, 0xf0, 0x6e, 0xf8, 0x01, 0x20, + 0xed, 0xf7, 0xeb, 0xfa, 0x03, 0x49, 0x03, 0x20, + 0xf9, 0xf7, 0x35, 0xfe, 0x80, 0xbd, 0x20, 0xf7, + 0x01, 0x00, 0x6d, 0x87, 0x01, 0x00, 0xb0, 0xb5, + 0x10, 0x4d, 0x04, 0x1c, 0x13, 0x1c, 0x2a, 0x1c, + 0x88, 0xb0, 0xec, 0xf7, 0x02, 0xfd, 0x3c, 0x00, + 0xa4, 0x87, 0x01, 0x00, 0x21, 0x1c, 0x0a, 0x31, + 0x06, 0x22, 0x28, 0x1d, 0xe7, 0xf7, 0xa4, 0xfe, + 0x69, 0x46, 0x05, 0xa8, 0x62, 0x69, 0xec, 0xf7, + 0x87, 0xfe, 0x28, 0x1c, 0xec, 0xf7, 0xee, 0xff, + 0x7f, 0x23, 0xdb, 0x43, 0x28, 0x1c, 0x6a, 0x46, + 0x05, 0xa9, 0xed, 0xf7, 0xf9, 0xf9, 0x00, 0xf0, + 0x1d, 0xf8, 0x08, 0xb0, 0xb0, 0xbd, 0x00, 0x00, + 0x20, 0xf7, 0x01, 0x00, 0x0a, 0x48, 0x80, 0xb5, + 0x3c, 0x00, 0xe0, 0x87, 0x01, 0x00, 0x01, 0x78, + 0x00, 0x29, 0x06, 0xd0, 0x02, 0x29, 0x01, 0xd0, + 0x05, 0x29, 0x07, 0xd1, 0x03, 0x21, 0x01, 0x70, + 0x80, 0xbd, 0x01, 0x21, 0x01, 0x70, 0x00, 0xf0, + 0x2e, 0xfa, 0x80, 0xbd, 0x03, 0x21, 0x0b, 0x20, + 0xe8, 0xf7, 0x4f, 0xfd, 0x80, 0xbd, 0x7c, 0xd9, + 0x01, 0x00, 0x09, 0x49, 0x80, 0xb5, 0x08, 0x78, + 0x00, 0x28, 0x06, 0xd0, 0x02, 0x28, 0x01, 0xd0, + 0x05, 0x28, 0x3c, 0x00, 0x1c, 0x88, 0x01, 0x00, + 0x05, 0xd1, 0x04, 0x20, 0x08, 0x70, 0x80, 0xbd, + 0xff, 0xf7, 0x38, 0xfd, 0x80, 0xbd, 0x02, 0x21, + 0x0b, 0x20, 0xe8, 0xf7, 0x39, 0xfd, 0x80, 0xbd, + 0x7c, 0xd9, 0x01, 0x00, 0x80, 0xb5, 0x02, 0x21, + 0x0b, 0x20, 0x04, 0x4a, 0xfa, 0xf7, 0x82, 0xff, + 0xf6, 0xf7, 0x86, 0xfd, 0x02, 0x49, 0x08, 0x61, + 0x80, 0xbd, 0x00, 0x00, 0xdd, 0x86, 0x01, 0x00, + 0x7c, 0xd9, 0x01, 0x00, 0x3c, 0x00, 0x58, 0x88, + 0x01, 0x00, 0x0c, 0x48, 0x80, 0xb5, 0x01, 0x78, + 0x06, 0x29, 0x0e, 0xd2, 0x02, 0xa3, 0x5b, 0x5c, + 0x5b, 0x00, 0x9f, 0x44, 0x00, 0x00, 0x06, 0x03, + 0x07, 0x07, 0x07, 0x06, 0x00, 0x20, 0x00, 0xf0, + 0xc2, 0xf8, 0x80, 0xbd, 0x05, 0x21, 0x01, 0x70, + 0x80, 0xbd, 0x04, 0x21, 0x0b, 0x20, 0xe8, 0xf7, + 0x0e, 0xfd, 0x80, 0xbd, 0x00, 0x00, 0x7c, 0xd9, + 0x01, 0x00, 0x70, 0x47, 0x00, 0x00, 0x3c, 0x00, + 0x94, 0x88, 0x01, 0x00, 0x10, 0xb5, 0x0d, 0x4b, + 0x04, 0x1c, 0x18, 0x1c, 0x10, 0x30, 0x00, 0x2c, + 0x08, 0xd0, 0xdb, 0x88, 0x5b, 0x04, 0x5b, 0x0c, + 0x0b, 0x80, 0x80, 0x7b, 0x48, 0x80, 0x04, 0x20, + 0x10, 0x80, 0x08, 0xe0, 0xda, 0x88, 0x01, 0x24, + 0xe4, 0x03, 0x22, 0x40, 0x0c, 0x88, 0x22, 0x43, + 0xda, 0x80, 0x49, 0x88, 0x81, 0x73, 0x01, 0x20, + 0x10, 0xbd, 0x00, 0x00, 0x30, 0x00, 0x07, 0x00, + 0x3c, 0x00, 0xd0, 0x88, 0x01, 0x00, 0x70, 0xb5, + 0x10, 0x4e, 0x02, 0x1c, 0x00, 0x23, 0xf0, 0x56, + 0x00, 0x2a, 0x02, 0xd0, 0x08, 0x70, 0x01, 0x24, + 0x15, 0xe0, 0x00, 0x23, 0xcd, 0x56, 0x85, 0x42, + 0x01, 0xd1, 0x01, 0x20, 0x70, 0xbd, 0x28, 0x1c, + 0x00, 0xf0, 0x5f, 0xf9, 0x04, 0x1c, 0x0a, 0xd0, + 0x07, 0x48, 0x35, 0x70, 0x00, 0x68, 0x00, 0x28, + 0x03, 0xd0, 0x00, 0x21, 0x0a, 0x20, 0xf9, 0xf7, + 0x28, 0xfd, 0x3c, 0x00, 0x0c, 0x89, 0x01, 0x00, + 0x00, 0xf0, 0x16, 0xfa, 0x20, 0x1c, 0x70, 0xbd, + 0xf4, 0x6b, 0x01, 0x00, 0x3c, 0xd9, 0x01, 0x00, + 0x03, 0x1c, 0x08, 0x1c, 0x00, 0x2b, 0x80, 0xb5, + 0x06, 0xd0, 0x04, 0x21, 0x11, 0x80, 0x04, 0x22, + 0x04, 0x49, 0xe7, 0xf7, 0xe3, 0xfd, 0x02, 0xe0, + 0x00, 0x68, 0x00, 0xf0, 0xcf, 0xf9, 0x01, 0x20, + 0x80, 0xbd, 0x00, 0x00, 0xf4, 0x74, 0x01, 0x00, + 0x10, 0xb5, 0xff, 0xf7, 0x3c, 0x00, 0x48, 0x89, + 0x01, 0x00, 0x97, 0xfb, 0xff, 0xf7, 0x89, 0xfc, + 0x04, 0x1c, 0xff, 0xf7, 0xb8, 0xfb, 0xff, 0xf7, + 0x84, 0xfc, 0x00, 0x2c, 0x02, 0xd1, 0x01, 0x28, + 0x00, 0xd1, 0x10, 0xbd, 0x00, 0x20, 0x10, 0xbd, + 0x00, 0x00, 0xf8, 0xb5, 0x20, 0x4f, 0x04, 0x1c, + 0x78, 0x78, 0x0e, 0x1c, 0x02, 0x28, 0x2e, 0xd0, + 0x1e, 0x4a, 0xf9, 0x68, 0x91, 0x61, 0x14, 0x23, + 0x1d, 0x49, 0x58, 0x43, 0x40, 0x18, 0x3c, 0x00, + 0x84, 0x89, 0x01, 0x00, 0x41, 0x7b, 0xb8, 0x78, + 0xf8, 0xf7, 0x14, 0xfe, 0x00, 0xf0, 0x8a, 0xf9, + 0x00, 0x25, 0x04, 0xe0, 0x00, 0x21, 0xb8, 0x78, + 0xf8, 0xf7, 0x0c, 0xfe, 0x01, 0x35, 0x78, 0x78, + 0x14, 0x23, 0x14, 0x49, 0x58, 0x43, 0x40, 0x18, + 0x80, 0x7a, 0xa8, 0x42, 0xf2, 0xdc, 0x00, 0x25, + 0x08, 0xe0, 0x00, 0x21, 0xb8, 0x78, 0xf8, 0xf7, + 0xfd, 0xfd, 0x0f, 0x48, 0x00, 0x68, 0x20, 0x70, + 0x3c, 0x00, 0xc0, 0x89, 0x01, 0x00, 0x01, 0x34, + 0x01, 0x35, 0xb5, 0x42, 0xf4, 0xdb, 0x09, 0x4a, + 0xf8, 0x68, 0x50, 0x61, 0x78, 0x78, 0x02, 0x28, + 0x06, 0xd1, 0xb8, 0x68, 0x32, 0x1c, 0x21, 0x1c, + 0x00, 0x04, 0x00, 0x0c, 0xff, 0xf7, 0x25, 0xfd, + 0xb8, 0x68, 0x80, 0x19, 0xb8, 0x60, 0xf8, 0xbd, + 0x00, 0x00, 0x40, 0xd9, 0x01, 0x00, 0x10, 0x00, + 0x07, 0x00, 0x64, 0x8d, 0x01, 0x00, 0x30, 0x20, + 0x07, 0x00, 0x3c, 0x00, 0xfc, 0x89, 0x01, 0x00, + 0x70, 0xb5, 0x06, 0x1c, 0x0c, 0x4d, 0x00, 0x24, + 0x2c, 0x70, 0xff, 0xf7, 0x39, 0xfc, 0x0a, 0x48, + 0x18, 0x21, 0x1c, 0x30, 0xac, 0x60, 0xe7, 0xf7, + 0x43, 0xfd, 0x08, 0x48, 0x44, 0x61, 0xf9, 0xf7, + 0x63, 0xf9, 0x00, 0x2e, 0x06, 0xd1, 0x06, 0x48, + 0x29, 0x69, 0xf6, 0xf7, 0xa7, 0xfc, 0x00, 0x20, + 0xec, 0xf7, 0xb0, 0xfe, 0x70, 0xbd, 0x00, 0x00, + 0x7c, 0xd9, 0x01, 0x00, 0x3c, 0x00, 0x38, 0x8a, + 0x01, 0x00, 0x20, 0xf7, 0x01, 0x00, 0x34, 0x63, + 0x01, 0x00, 0x30, 0xb5, 0x12, 0x4c, 0x85, 0xb0, + 0x20, 0x68, 0x00, 0x28, 0x1c, 0xd0, 0x0f, 0x48, + 0x14, 0x38, 0x80, 0x68, 0x00, 0x28, 0x01, 0xd1, + 0xff, 0xf7, 0xc1, 0xfb, 0x20, 0x68, 0x00, 0x23, + 0x00, 0x68, 0x01, 0xaa, 0x04, 0x30, 0x01, 0x21, + 0xec, 0xf7, 0xd1, 0xfd, 0x08, 0x49, 0x08, 0x4a, + 0x08, 0x31, 0x0c, 0x31, 0x00, 0x92, 0x3c, 0x00, + 0x74, 0x8a, 0x01, 0x00, 0x03, 0xc9, 0x00, 0xab, + 0x45, 0x18, 0x99, 0x7b, 0x01, 0x9a, 0x20, 0x68, + 0x2b, 0x1c, 0xf2, 0xf7, 0x2b, 0xfe, 0x05, 0xb0, + 0x30, 0xbd, 0x00, 0x00, 0x90, 0xd9, 0x01, 0x00, + 0x29, 0x81, 0x01, 0x00, 0x10, 0xb5, 0x13, 0x4c, + 0x14, 0x23, 0x60, 0x70, 0x58, 0x43, 0x12, 0x4b, + 0xc1, 0x18, 0x8a, 0x88, 0xe2, 0x80, 0x18, 0x58, + 0xe0, 0x60, 0x08, 0x7a, 0xa0, 0x70, 0xff, 0x28, + 0x3c, 0x00, 0xb0, 0x8a, 0x01, 0x00, 0x12, 0xd0, + 0x00, 0x22, 0x08, 0x21, 0x0d, 0x4b, 0xf8, 0xf7, + 0x22, 0xfd, 0x00, 0x22, 0x02, 0x20, 0xe1, 0x68, + 0xef, 0xf7, 0xbd, 0xfe, 0x0a, 0x49, 0xe0, 0x68, + 0x48, 0x61, 0x4a, 0x68, 0x02, 0x43, 0x4a, 0x60, + 0x8a, 0x68, 0x10, 0x43, 0x88, 0x60, 0x60, 0x78, + 0x02, 0x28, 0x01, 0xd1, 0xff, 0xf7, 0xdf, 0xfc, + 0x10, 0xbd, 0x40, 0xd9, 0x01, 0x00, 0x64, 0x8d, + 0x01, 0x00, 0x3c, 0x00, 0xec, 0x8a, 0x01, 0x00, + 0xb8, 0x0b, 0x00, 0x00, 0x10, 0x00, 0x07, 0x00, + 0xfe, 0x30, 0x00, 0x06, 0x00, 0x0e, 0x06, 0x21, + 0x15, 0x4b, 0x41, 0x43, 0x58, 0x5c, 0x82, 0x06, + 0x14, 0x48, 0x92, 0x0e, 0x42, 0x71, 0xc9, 0x18, + 0x4a, 0x78, 0xd2, 0x06, 0xd2, 0x0e, 0x02, 0x71, + 0x42, 0x78, 0x0c, 0x23, 0x1a, 0x43, 0x42, 0x70, + 0x42, 0x78, 0x8b, 0x78, 0x92, 0x08, 0x92, 0x00, + 0x9b, 0x07, 0x9b, 0x0f, 0x3c, 0x00, 0x28, 0x8b, + 0x01, 0x00, 0x1a, 0x43, 0x42, 0x70, 0x02, 0x78, + 0xc0, 0x23, 0x9a, 0x43, 0x40, 0x32, 0x02, 0x70, + 0x02, 0x78, 0x38, 0x23, 0x1a, 0x43, 0x02, 0x70, + 0x02, 0x78, 0xc9, 0x78, 0x04, 0x23, 0x9a, 0x43, + 0x89, 0x00, 0x19, 0x40, 0x11, 0x43, 0x01, 0x70, + 0x01, 0x20, 0x70, 0x47, 0x00, 0x00, 0xd8, 0x8d, + 0x01, 0x00, 0x88, 0x00, 0x07, 0x00, 0x8f, 0xb5, + 0x00, 0x20, 0x02, 0x90, 0x03, 0x90, 0x3c, 0x00, + 0x64, 0x8b, 0x01, 0x00, 0x07, 0x48, 0x02, 0xaa, + 0x03, 0xa9, 0x00, 0x91, 0x01, 0x92, 0x43, 0x89, + 0x02, 0x89, 0x03, 0xc8, 0xff, 0xf7, 0xd4, 0xfb, + 0x03, 0x98, 0x02, 0x99, 0xff, 0xf7, 0x04, 0xfc, + 0x8f, 0xbd, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, + 0x08, 0x49, 0x4a, 0x78, 0x00, 0x2a, 0x03, 0xd1, + 0x88, 0x80, 0x00, 0x20, 0x88, 0x60, 0x70, 0x47, + 0x14, 0x23, 0x5a, 0x43, 0x04, 0x4b, 0xd2, 0x18, + 0x3c, 0x00, 0xa0, 0x8b, 0x01, 0x00, 0xd2, 0x88, + 0x42, 0x43, 0xc8, 0x88, 0x42, 0x43, 0x8a, 0x60, + 0x70, 0x47, 0x40, 0xd9, 0x01, 0x00, 0x64, 0x8d, + 0x01, 0x00, 0xf8, 0xb5, 0x25, 0x4e, 0x04, 0x1c, + 0x30, 0x7a, 0x40, 0x08, 0x40, 0x00, 0x30, 0x72, + 0xb0, 0x7a, 0x00, 0x20, 0xb0, 0x72, 0x01, 0x27, + 0x01, 0x2c, 0x20, 0x4d, 0x01, 0xd0, 0xfc, 0x42, + 0x13, 0xd1, 0x30, 0x7b, 0x38, 0x43, 0x30, 0x73, + 0x00, 0x22, 0x3c, 0x00, 0xdc, 0x8b, 0x01, 0x00, + 0x21, 0x1c, 0x00, 0x20, 0xff, 0xf7, 0x6e, 0xfb, + 0x63, 0x1c, 0x01, 0xd1, 0x3f, 0x21, 0xe9, 0x73, + 0xb1, 0x7a, 0xa0, 0x22, 0x11, 0x43, 0xb1, 0x72, + 0x31, 0x7a, 0x39, 0x43, 0x31, 0x72, 0xf8, 0xbd, + 0x30, 0x7b, 0x40, 0x08, 0x40, 0x00, 0x30, 0x73, + 0x01, 0x22, 0x21, 0x1c, 0x01, 0x20, 0xff, 0xf7, + 0x59, 0xfb, 0x01, 0x20, 0x00, 0x21, 0xe9, 0x73, + 0xb1, 0x7a, 0x02, 0x22, 0x3c, 0x00, 0x18, 0x8c, + 0x01, 0x00, 0x11, 0x43, 0xb1, 0x72, 0xb1, 0x7a, + 0x04, 0x22, 0x11, 0x43, 0xb1, 0x72, 0xb1, 0x7a, + 0x30, 0x22, 0x11, 0x43, 0xb1, 0x72, 0x31, 0x7a, + 0x39, 0x43, 0x31, 0x72, 0x08, 0x49, 0x4a, 0x68, + 0x80, 0x23, 0x9a, 0x43, 0x4a, 0x60, 0x0a, 0x68, + 0x1a, 0x43, 0x0a, 0x60, 0x31, 0x7b, 0x39, 0x43, + 0x31, 0x73, 0xd7, 0xe7, 0x00, 0x00, 0x88, 0x00, + 0x07, 0x00, 0x40, 0x00, 0x07, 0x00, 0x3c, 0x00, + 0x54, 0x8c, 0x01, 0x00, 0x6c, 0x00, 0x07, 0x00, + 0xb0, 0xb5, 0x0e, 0x4d, 0x0e, 0x48, 0x29, 0x69, + 0xf6, 0xf7, 0x9e, 0xfb, 0x0d, 0x48, 0xec, 0xf7, + 0x93, 0xfd, 0x0d, 0x48, 0x09, 0x4c, 0x00, 0x88, + 0x1c, 0x34, 0xa0, 0x82, 0xf1, 0xf7, 0x5a, 0xff, + 0x20, 0x61, 0xfa, 0xf7, 0x97, 0xf8, 0x02, 0x1c, + 0x23, 0x1c, 0x00, 0x21, 0x00, 0x20, 0xec, 0xf7, + 0x8b, 0xff, 0x32, 0x20, 0xe8, 0x60, 0xff, 0xf7, + 0x3c, 0x00, 0x90, 0x8c, 0x01, 0x00, 0xa5, 0xfa, + 0xb0, 0xbd, 0x7c, 0xd9, 0x01, 0x00, 0x34, 0x63, + 0x01, 0x00, 0xdd, 0x84, 0x01, 0x00, 0x20, 0xf7, + 0x01, 0x00, 0xb0, 0xb5, 0x0a, 0x4d, 0x68, 0x78, + 0x00, 0x28, 0x0e, 0xd0, 0x14, 0x23, 0x08, 0x49, + 0x58, 0x43, 0x40, 0x18, 0x44, 0x7a, 0x06, 0xe0, + 0xa8, 0x68, 0xe0, 0x40, 0x01, 0x06, 0x09, 0x0e, + 0xa8, 0x78, 0xf8, 0xf7, 0x76, 0xfc, 0x08, 0x3c, + 0xf6, 0xd5, 0x3c, 0x00, 0xcc, 0x8c, 0x01, 0x00, + 0xb0, 0xbd, 0x00, 0x00, 0x40, 0xd9, 0x01, 0x00, + 0x64, 0x8d, 0x01, 0x00, 0x01, 0x1c, 0x14, 0x48, + 0xb0, 0xb5, 0x01, 0x60, 0x13, 0x48, 0x02, 0x7f, + 0x02, 0x23, 0x9a, 0x43, 0x02, 0x77, 0x02, 0x7f, + 0x01, 0x24, 0x22, 0x43, 0x02, 0x77, 0x10, 0x4d, + 0x00, 0x29, 0x0c, 0xd0, 0x01, 0x22, 0x00, 0x21, + 0x03, 0x20, 0xef, 0xf7, 0x9f, 0xfd, 0x0d, 0x49, + 0x48, 0x7c, 0xa0, 0x43, 0x3c, 0x00, 0x08, 0x8d, + 0x01, 0x00, 0x48, 0x74, 0x68, 0x7a, 0x20, 0x43, + 0x68, 0x72, 0xb0, 0xbd, 0x01, 0x7f, 0x21, 0x43, + 0x01, 0x77, 0x68, 0x7a, 0x40, 0x08, 0x40, 0x00, + 0x68, 0x72, 0x01, 0x22, 0x00, 0x21, 0x03, 0x20, + 0xef, 0xf7, 0xb1, 0xfd, 0xb0, 0xbd, 0xf4, 0x74, + 0x01, 0x00, 0x30, 0x00, 0x07, 0x00, 0x88, 0x00, + 0x07, 0x00, 0x10, 0x00, 0x07, 0x00, 0x10, 0xb5, + 0x07, 0x4c, 0x21, 0x1c, 0x00, 0x20, 0x3c, 0x00, + 0x44, 0x8d, 0x01, 0x00, 0xf9, 0xf7, 0x56, 0xfb, + 0x05, 0x48, 0x00, 0x23, 0xc0, 0x56, 0x01, 0x28, + 0x03, 0xdd, 0x21, 0x1c, 0x00, 0x20, 0xf9, 0xf7, + 0x19, 0xfb, 0x10, 0xbd, 0x65, 0x1a, 0x00, 0x00, + 0xf4, 0x6b, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x08, 0x01, 0x01, 0x00, 0x02, 0x18, 0x04, 0xff, + 0x82, 0xe8, 0xd7, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, + 0x3c, 0x00, 0x80, 0x8d, 0x01, 0x00, 0x00, 0x18, + 0x00, 0x06, 0x02, 0x03, 0x05, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, + 0x01, 0x00, 0xff, 0x10, 0x00, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x20, 0x00, 0x01, 0x00, 0x02, 0x10, + 0x00, 0x06, 0x02, 0x03, 0x05, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x04, 0x05, 0x06, 0x07, 0x08, 0x0c, + 0x0d, 0x0e, 0x3c, 0x00, 0xbc, 0x8d, 0x01, 0x00, + 0xff, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1b, + 0x1c, 0x1d, 0xff, 0x1a, 0x11, 0x13, 0x12, 0x0f, + 0x10, 0xff, 0x02, 0x00, 0xff, 0x01, 0x03, 0x09, + 0x0a, 0x0b, 0x00, 0x00, 0x30, 0x0d, 0x02, 0x00, + 0x00, 0x00, 0x28, 0x0e, 0x03, 0x00, 0x00, 0x00, + 0x1e, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x30, 0x0d, + 0x02, 0x01, 0x00, 0x00, 0x1e, 0x0c, 0x00, 0x01, + 0x00, 0x00, 0x23, 0x0d, 0x3c, 0x00, 0xf8, 0x8d, + 0x01, 0x00, 0x02, 0x01, 0x00, 0x00, 0x1d, 0x0d, + 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0xff, 0xfe, + 0xfb, 0x6d, 0x00, 0x00, 0x80, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x34, 0x8e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x70, 0x8e, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xac, 0x8e, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xe8, 0x8e, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x24, 0x8f, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x60, 0x8f, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x9c, 0x8f, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xd8, 0x8f, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x14, 0x90, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x50, 0x90, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x8c, 0x90, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xc8, 0x90, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x04, 0x91, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x40, 0x91, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x7c, 0x91, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xb8, 0x91, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xf4, 0x91, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x30, 0x92, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x6c, 0x92, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xa8, 0x92, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xe4, 0x92, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x20, 0x93, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x5c, 0x93, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x98, 0x93, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xd4, 0x93, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x10, 0x94, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x4c, 0x94, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x88, 0x94, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xc4, 0x94, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x95, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x78, 0x95, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xb4, 0x95, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xf0, 0x95, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x2c, 0x96, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x68, 0x96, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xa4, 0x96, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xe0, 0x96, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x1c, 0x97, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x58, 0x97, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x94, 0x97, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xd0, 0x97, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x0c, 0x98, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x48, 0x98, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x84, 0x98, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xc0, 0x98, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xfc, 0x98, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x38, 0x99, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x74, 0x99, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xb0, 0x99, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xec, 0x99, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x28, 0x9a, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x64, 0x9a, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xa0, 0x9a, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xdc, 0x9a, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x18, 0x9b, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x54, 0x9b, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x90, 0x9b, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xcc, 0x9b, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x08, 0x9c, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x44, 0x9c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x80, 0x9c, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xbc, 0x9c, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xf8, 0x9c, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x34, 0x9d, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x70, 0x9d, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xac, 0x9d, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xe8, 0x9d, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x24, 0x9e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x60, 0x9e, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x9c, 0x9e, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xd8, 0x9e, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x14, 0x9f, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x50, 0x9f, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x8c, 0x9f, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xc8, 0x9f, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x04, 0xa0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x40, 0xa0, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x7c, 0xa0, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xb8, 0xa0, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xf4, 0xa0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x30, 0xa1, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x6c, 0xa1, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xa8, 0xa1, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xe4, 0xa1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x20, 0xa2, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x5c, 0xa2, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x98, 0xa2, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xd4, 0xa2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x10, 0xa3, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x4c, 0xa3, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x88, 0xa3, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xc4, 0xa3, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0xa4, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x3c, 0xa4, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x78, 0xa4, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xb4, 0xa4, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xf0, 0xa4, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x2c, 0xa5, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x68, 0xa5, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xa4, 0xa5, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xe0, 0xa5, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x1c, 0xa6, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x58, 0xa6, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x94, 0xa6, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xd0, 0xa6, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x0c, 0xa7, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x48, 0xa7, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x84, 0xa7, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xc0, 0xa7, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xfc, 0xa7, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x38, 0xa8, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x74, 0xa8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xb0, 0xa8, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xec, 0xa8, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x28, 0xa9, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x64, 0xa9, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xa0, 0xa9, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xdc, 0xa9, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x18, 0xaa, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x54, 0xaa, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x90, 0xaa, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xcc, 0xaa, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x08, 0xab, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x44, 0xab, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x80, 0xab, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xbc, 0xab, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xf8, 0xab, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x34, 0xac, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x70, 0xac, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xac, 0xac, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xe8, 0xac, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x24, 0xad, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x60, 0xad, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x9c, 0xad, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xd8, 0xad, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x14, 0xae, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x50, 0xae, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x8c, 0xae, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xc8, 0xae, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x04, 0xaf, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x40, 0xaf, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x7c, 0xaf, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xb8, 0xaf, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xf4, 0xaf, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x30, 0xb0, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x6c, 0xb0, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xa8, 0xb0, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xe4, 0xb0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x20, 0xb1, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x5c, 0xb1, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x98, 0xb1, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xd4, 0xb1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x10, 0xb2, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x4c, 0xb2, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x88, 0xb2, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xc4, 0xb2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0xb3, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x3c, 0xb3, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x78, 0xb3, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xb4, 0xb3, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xf0, 0xb3, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x2c, 0xb4, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x68, 0xb4, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xa4, 0xb4, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xe0, 0xb4, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x1c, 0xb5, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x58, 0xb5, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x94, 0xb5, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xd0, 0xb5, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x0c, 0xb6, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x48, 0xb6, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x84, 0xb6, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xc0, 0xb6, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xfc, 0xb6, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x38, 0xb7, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x74, 0xb7, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xb0, 0xb7, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xec, 0xb7, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x28, 0xb8, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x64, 0xb8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xa0, 0xb8, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xdc, 0xb8, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x18, 0xb9, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x54, 0xb9, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x90, 0xb9, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xcc, 0xb9, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x08, 0xba, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x44, 0xba, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x80, 0xba, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xbc, 0xba, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xf8, 0xba, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x34, 0xbb, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x70, 0xbb, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xac, 0xbb, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xe8, 0xbb, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x24, 0xbc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x60, 0xbc, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x9c, 0xbc, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xd8, 0xbc, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x14, 0xbd, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x50, 0xbd, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x8c, 0xbd, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xc8, 0xbd, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x04, 0xbe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x40, 0xbe, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x7c, 0xbe, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xb8, 0xbe, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xf4, 0xbe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x30, 0xbf, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x6c, 0xbf, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xa8, 0xbf, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xe4, 0xbf, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x20, 0xc0, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x5c, 0xc0, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x98, 0xc0, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xd4, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x10, 0xc1, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x4c, 0xc1, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x88, 0xc1, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xc4, 0xc1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0xc2, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x3c, 0xc2, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x78, 0xc2, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xb4, 0xc2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xf0, 0xc2, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x2c, 0xc3, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x68, 0xc3, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xa4, 0xc3, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xe0, 0xc3, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x1c, 0xc4, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x58, 0xc4, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x94, 0xc4, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xd0, 0xc4, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x0c, 0xc5, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x48, 0xc5, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x84, 0xc5, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xc0, 0xc5, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xfc, 0xc5, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x38, 0xc6, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x74, 0xc6, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xb0, 0xc6, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xec, 0xc6, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x28, 0xc7, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x64, 0xc7, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xa0, 0xc7, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xdc, 0xc7, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x18, 0xc8, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x54, 0xc8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x90, 0xc8, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xcc, 0xc8, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x08, 0xc9, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x44, 0xc9, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x80, 0xc9, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xbc, 0xc9, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xf8, 0xc9, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x34, 0xca, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x70, 0xca, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xac, 0xca, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xe8, 0xca, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x24, 0xcb, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x60, 0xcb, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x9c, 0xcb, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xd8, 0xcb, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x14, 0xcc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x50, 0xcc, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x8c, 0xcc, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xc8, 0xcc, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x04, 0xcd, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x40, 0xcd, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x7c, 0xcd, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xb8, 0xcd, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xf4, 0xcd, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x30, 0xce, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x6c, 0xce, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xa8, 0xce, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xe4, 0xce, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x20, 0xcf, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x5c, 0xcf, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x98, 0xcf, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xd4, 0xcf, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x10, 0xd0, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x4c, 0xd0, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x88, 0xd0, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xc4, 0xd0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0xd1, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x3c, 0xd1, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x78, 0xd1, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xb4, 0xd1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xf0, 0xd1, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x2c, 0xd2, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x68, 0xd2, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xa4, 0xd2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xe0, 0xd2, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x1c, 0xd3, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x58, 0xd3, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x94, 0xd3, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xd0, 0xd3, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x0c, 0xd4, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x48, 0xd4, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x84, 0xd4, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xc0, 0xd4, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xfc, 0xd4, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x38, 0xd5, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x74, 0xd5, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xb0, 0xd5, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xec, 0xd5, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x28, 0xd6, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x64, 0xd6, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xa0, 0xd6, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xdc, 0xd6, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x18, 0xd7, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x54, 0xd7, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x90, 0xd7, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xcc, 0xd7, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x08, 0xd8, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x44, 0xd8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x80, 0xd8, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xbc, 0xd8, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xf8, 0xd8, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x34, 0xd9, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x70, 0xd9, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xac, 0xd9, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xe8, 0xd9, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x24, 0xda, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x60, 0xda, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x9c, 0xda, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xd8, 0xda, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x14, 0xdb, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x50, 0xdb, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x8c, 0xdb, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xc8, 0xdb, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x04, 0xdc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x40, 0xdc, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x7c, 0xdc, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xb8, 0xdc, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xf4, 0xdc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x30, 0xdd, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x6c, 0xdd, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xa8, 0xdd, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xe4, 0xdd, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x20, 0xde, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x5c, 0xde, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x98, 0xde, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xd4, 0xde, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x10, 0xdf, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x4c, 0xdf, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x88, 0xdf, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xc4, 0xdf, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x3c, 0xe0, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x78, 0xe0, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xb4, 0xe0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xf0, 0xe0, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x2c, 0xe1, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x68, 0xe1, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xa4, 0xe1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xe0, 0xe1, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x1c, 0xe2, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x58, 0xe2, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x94, 0xe2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xd0, 0xe2, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x0c, 0xe3, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x48, 0xe3, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x84, 0xe3, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xc0, 0xe3, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xfc, 0xe3, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x38, 0xe4, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x74, 0xe4, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xb0, 0xe4, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xec, 0xe4, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x28, 0xe5, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x64, 0xe5, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xa0, 0xe5, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xdc, 0xe5, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x18, 0xe6, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x54, 0xe6, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x90, 0xe6, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xcc, 0xe6, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x08, 0xe7, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x44, 0xe7, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x80, 0xe7, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xbc, 0xe7, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xf8, 0xe7, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x34, 0xe8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x70, 0xe8, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xac, 0xe8, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xe8, 0xe8, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x24, 0xe9, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x60, 0xe9, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x9c, 0xe9, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xd8, 0xe9, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x14, 0xea, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x50, 0xea, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x8c, 0xea, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xc8, 0xea, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x04, 0xeb, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x40, 0xeb, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x7c, 0xeb, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xb8, 0xeb, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xf4, 0xeb, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x30, 0xec, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x6c, 0xec, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xa8, 0xec, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xe4, 0xec, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x20, 0xed, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x5c, 0xed, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x98, 0xed, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xd4, 0xed, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x10, 0xee, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x4c, 0xee, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x88, 0xee, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xc4, 0xee, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0xef, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x3c, 0xef, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x78, 0xef, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xb4, 0xef, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xf0, 0xef, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x2c, 0xf0, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x68, 0xf0, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xa4, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xe0, 0xf0, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x1c, 0xf1, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x58, 0xf1, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x94, 0xf1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xd0, 0xf1, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x0c, 0xf2, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x48, 0xf2, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x84, 0xf2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xc0, 0xf2, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xfc, 0xf2, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x38, 0xf3, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x74, 0xf3, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xb0, 0xf3, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xec, 0xf3, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x28, 0xf4, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x64, 0xf4, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xa0, 0xf4, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xdc, 0xf4, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x18, 0xf5, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x54, 0xf5, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x90, 0xf5, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xcc, 0xf5, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x08, 0xf6, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x44, 0xf6, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x80, 0xf6, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xbc, 0xf6, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xf8, 0xf6, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x34, 0xf7, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x70, 0xf7, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xac, 0xf7, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xe8, 0xf7, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x24, 0xf8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x60, 0xf8, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x9c, 0xf8, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xd8, 0xf8, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x14, 0xf9, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x50, 0xf9, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x8c, 0xf9, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xc8, 0xf9, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x04, 0xfa, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x40, 0xfa, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x7c, 0xfa, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xb8, 0xfa, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xf4, 0xfa, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x30, 0xfb, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x6c, 0xfb, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xa8, 0xfb, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xe4, 0xfb, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x20, 0xfc, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x5c, 0xfc, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x98, 0xfc, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xd4, 0xfc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x10, 0xfd, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x4c, 0xfd, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x88, 0xfd, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xc4, 0xfd, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x3c, 0xfe, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x78, 0xfe, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xb4, 0xfe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xf0, 0xfe, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x2c, 0xff, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x68, 0xff, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x00, 0x10, 0x04, 0x00, 0x70, 0xb5, 0x2b, 0x48, + 0x06, 0x21, 0x81, 0x75, 0xc1, 0x75, 0x01, 0x7e, + 0x49, 0x08, 0x49, 0x00, 0x01, 0x76, 0x01, 0x7e, + 0x02, 0x22, 0x91, 0x43, 0x01, 0x76, 0x26, 0x49, + 0x0b, 0x78, 0x5b, 0x08, 0x5b, 0x00, 0x0b, 0x70, + 0x04, 0x23, 0x8b, 0x70, 0x0c, 0x23, 0x43, 0x76, + 0x20, 0x23, 0x03, 0x75, 0x1a, 0x24, 0x44, 0x75, + 0x24, 0x24, 0x84, 0x76, 0x10, 0x24, 0xc4, 0x76, + 0x3c, 0x00, 0x3c, 0x10, 0x04, 0x00, 0x2a, 0x25, + 0x4d, 0x70, 0x05, 0x7a, 0x30, 0x26, 0xb5, 0x43, + 0x20, 0x35, 0x05, 0x72, 0x85, 0x7a, 0x6d, 0x08, + 0x6d, 0x00, 0x85, 0x72, 0x85, 0x7a, 0x95, 0x43, + 0x85, 0x72, 0x85, 0x7a, 0x04, 0x26, 0x35, 0x43, + 0x85, 0x72, 0x85, 0x7a, 0x08, 0x26, 0x35, 0x43, + 0x85, 0x72, 0x85, 0x7a, 0xa5, 0x43, 0x85, 0x72, + 0x05, 0x7b, 0x2c, 0x43, 0x04, 0x73, 0x04, 0x7b, + 0x1c, 0x43, 0x3c, 0x00, 0x78, 0x10, 0x04, 0x00, + 0x04, 0x73, 0x04, 0x7b, 0x40, 0x25, 0x2c, 0x43, + 0x04, 0x73, 0x84, 0x7a, 0x23, 0x43, 0x83, 0x72, + 0x83, 0x7a, 0xab, 0x43, 0x83, 0x72, 0x03, 0x7b, + 0x80, 0x24, 0x23, 0x43, 0x03, 0x73, 0x08, 0x78, + 0x90, 0x43, 0x08, 0x70, 0x08, 0x78, 0x01, 0x22, + 0x10, 0x43, 0x08, 0x70, 0x08, 0x78, 0x04, 0x22, + 0x90, 0x43, 0x08, 0x70, 0x70, 0xbd, 0x00, 0x00, + 0x0c, 0x80, 0x07, 0x00, 0x3c, 0x00, 0xb4, 0x10, + 0x04, 0x00, 0x80, 0x80, 0x07, 0x00, 0x01, 0x49, + 0x04, 0x20, 0x48, 0x73, 0x70, 0x47, 0x40, 0x80, + 0x07, 0x00, 0x03, 0x49, 0x80, 0xb5, 0x00, 0x20, + 0x08, 0x80, 0x00, 0xf0, 0x0a, 0xfb, 0x80, 0xbd, + 0x00, 0x00, 0xfc, 0x6b, 0x01, 0x00, 0x70, 0x47, + 0x00, 0x00, 0x80, 0xb5, 0x00, 0xf0, 0x67, 0xfb, + 0x80, 0xbd, 0x80, 0xb5, 0x0a, 0x49, 0x18, 0x20, + 0xc1, 0xf7, 0x3b, 0xfa, 0x09, 0x49, 0x3c, 0x00, + 0xf0, 0x10, 0x04, 0x00, 0x02, 0x20, 0xc1, 0xf7, + 0x37, 0xfa, 0x08, 0x49, 0x1f, 0x20, 0xc1, 0xf7, + 0x33, 0xfa, 0x07, 0x49, 0x1c, 0x20, 0xc1, 0xf7, + 0x2f, 0xfa, 0x06, 0x49, 0x03, 0x20, 0xc1, 0xf7, + 0x2b, 0xfa, 0x80, 0xbd, 0x99, 0x2a, 0x00, 0x00, + 0x41, 0x25, 0x00, 0x00, 0x55, 0x25, 0x00, 0x00, + 0x5d, 0x25, 0x00, 0x00, 0x39, 0x25, 0x00, 0x00, + 0x80, 0xb5, 0xbf, 0xf7, 0x91, 0xfd, 0x80, 0xbd, + 0x3c, 0x00, 0x2c, 0x11, 0x04, 0x00, 0x80, 0xb5, + 0x05, 0x4a, 0x05, 0x49, 0x0a, 0x20, 0xbf, 0xf7, + 0x4e, 0xff, 0x01, 0x20, 0x04, 0x49, 0x80, 0x02, + 0x08, 0x60, 0x48, 0x60, 0x80, 0xbd, 0xb4, 0x74, + 0x01, 0x00, 0xb1, 0x64, 0x00, 0x00, 0x00, 0x10, + 0x07, 0x00, 0x80, 0xb5, 0x00, 0xf0, 0x91, 0xfe, + 0x80, 0xbd, 0x80, 0xb5, 0x05, 0x4a, 0x05, 0x49, + 0x1b, 0x20, 0xbf, 0xf7, 0x38, 0xff, 0x01, 0x20, + 0x04, 0x49, 0x3c, 0x00, 0x68, 0x11, 0x04, 0x00, + 0xc0, 0x06, 0x08, 0x60, 0x48, 0x60, 0x80, 0xbd, + 0xb8, 0x74, 0x01, 0x00, 0x2d, 0x6e, 0x00, 0x00, + 0x00, 0x10, 0x07, 0x00, 0x80, 0xb5, 0x04, 0x48, + 0x00, 0xf0, 0x80, 0xfe, 0x03, 0x49, 0x00, 0x20, + 0x48, 0x60, 0x88, 0x60, 0x80, 0xbd, 0x00, 0x00, + 0x41, 0x4b, 0x00, 0x00, 0xbc, 0x74, 0x01, 0x00, + 0x80, 0xb5, 0xc5, 0xf7, 0xd5, 0xfe, 0xce, 0xf7, + 0xd9, 0xf8, 0x03, 0x49, 0x3c, 0x00, 0xa4, 0x11, + 0x04, 0x00, 0x08, 0x60, 0x03, 0x49, 0x0a, 0x20, + 0xd1, 0xf7, 0xef, 0xf8, 0x80, 0xbd, 0xbc, 0x74, + 0x01, 0x00, 0x49, 0x6e, 0x00, 0x00, 0x80, 0xb5, + 0x01, 0x22, 0x20, 0x21, 0x06, 0x20, 0xc8, 0xf7, + 0x56, 0xfc, 0xbf, 0xf7, 0x70, 0xfe, 0x03, 0x49, + 0x00, 0x20, 0x08, 0x60, 0x20, 0x21, 0x02, 0x48, + 0xbf, 0xf7, 0x63, 0xf9, 0x80, 0xbd, 0xcc, 0x5c, + 0x01, 0x00, 0x64, 0x6d, 0x01, 0x00, 0x3c, 0x00, + 0xe0, 0x11, 0x04, 0x00, 0x08, 0x48, 0x80, 0xb5, + 0x00, 0x68, 0x00, 0x28, 0x05, 0xd0, 0x06, 0x48, + 0x54, 0x30, 0x42, 0x6a, 0x00, 0x21, 0xbf, 0xf7, + 0xf3, 0xf8, 0x04, 0x4a, 0x04, 0x49, 0x03, 0x20, + 0xbf, 0xf7, 0xac, 0xfd, 0x80, 0xbd, 0x00, 0x00, + 0x50, 0x6d, 0x01, 0x00, 0x89, 0x98, 0x00, 0x00, + 0x91, 0x98, 0x00, 0x00, 0x80, 0xb5, 0x00, 0xf0, + 0x03, 0xf8, 0x00, 0xf0, 0x19, 0xf8, 0x80, 0xbd, + 0x3c, 0x00, 0x1c, 0x12, 0x04, 0x00, 0x10, 0xb5, + 0x09, 0x4c, 0x60, 0x21, 0x20, 0x1c, 0xbf, 0xf7, + 0x3a, 0xf9, 0x00, 0x20, 0xc0, 0x43, 0xa0, 0x60, + 0x20, 0x60, 0xff, 0x20, 0x02, 0x30, 0xe0, 0x84, + 0x20, 0x22, 0x20, 0x1c, 0x40, 0x30, 0x02, 0x49, + 0xbf, 0xf7, 0x5b, 0xf9, 0x10, 0xbd, 0x00, 0x10, + 0x07, 0x00, 0x70, 0x52, 0x01, 0x00, 0x00, 0x20, + 0x0a, 0x49, 0xc0, 0x43, 0x88, 0x60, 0x09, 0x4b, + 0x0a, 0x49, 0x3c, 0x00, 0x58, 0x12, 0x04, 0x00, + 0x00, 0x20, 0x82, 0x00, 0x01, 0x30, 0x00, 0x06, + 0x00, 0x0e, 0x20, 0x28, 0x99, 0x50, 0xf8, 0xd3, + 0x06, 0x49, 0x04, 0x4a, 0x08, 0x1c, 0x10, 0x30, + 0x08, 0x3a, 0x03, 0xc2, 0x70, 0x47, 0x00, 0x00, + 0x00, 0x10, 0x07, 0x00, 0xe0, 0x7e, 0x01, 0x00, + 0x75, 0x75, 0x00, 0x00, 0x00, 0xa0, 0x07, 0x00, + 0x04, 0x48, 0x00, 0x21, 0x00, 0x22, 0x00, 0x23, + 0x0e, 0xc0, 0x0c, 0x38, 0x3c, 0x00, 0x94, 0x12, + 0x04, 0x00, 0x01, 0x21, 0x41, 0x60, 0x70, 0x47, + 0x00, 0x00, 0x70, 0x78, 0x01, 0x00, 0x70, 0x47, + 0x00, 0x00, 0x03, 0x48, 0x00, 0x21, 0x00, 0x22, + 0x00, 0x23, 0x0e, 0xc0, 0x08, 0xc0, 0x70, 0x47, + 0x00, 0x00, 0x88, 0x5a, 0x01, 0x00, 0x04, 0x49, + 0x80, 0xb5, 0x00, 0x20, 0x48, 0x61, 0x02, 0x48, + 0x40, 0x21, 0x1c, 0x30, 0xbf, 0xf7, 0xe9, 0xf8, + 0x80, 0xbd, 0xfc, 0x5a, 0x01, 0x00, 0x3c, 0x00, + 0xd0, 0x12, 0x04, 0x00, 0x80, 0xb5, 0xce, 0xf7, + 0x3f, 0xf8, 0x03, 0x49, 0x88, 0x61, 0x03, 0x49, + 0x03, 0x20, 0xd1, 0xf7, 0x55, 0xf8, 0x80, 0xbd, + 0xfc, 0x5a, 0x01, 0x00, 0x0d, 0x17, 0x01, 0x00, + 0x80, 0xb5, 0xc0, 0xf7, 0xa5, 0xf9, 0x80, 0xbd, + 0xfe, 0xb5, 0x6c, 0x49, 0x00, 0x20, 0x00, 0x90, + 0xc8, 0x78, 0x6b, 0x4c, 0x6b, 0x4f, 0x43, 0x07, + 0xc0, 0x06, 0xc0, 0x17, 0xdb, 0x0e, 0xe3, 0x58, + 0x3c, 0x00, 0x0c, 0x13, 0x04, 0x00, 0x01, 0x30, + 0x38, 0x62, 0x3b, 0x61, 0x08, 0x1c, 0x80, 0x78, + 0x66, 0x4e, 0x03, 0x22, 0x41, 0x07, 0xa0, 0x36, + 0x02, 0x96, 0x49, 0x0f, 0x31, 0x72, 0x89, 0x00, + 0x61, 0x58, 0x3c, 0x1c, 0x61, 0x61, 0x01, 0x91, + 0xc0, 0x06, 0xc0, 0x0f, 0x78, 0x62, 0x20, 0x1c, + 0x00, 0x27, 0x87, 0x61, 0x00, 0x20, 0x21, 0x1c, + 0xc8, 0x61, 0x59, 0x48, 0x59, 0x49, 0x00, 0x78, + 0x09, 0x79, 0x3c, 0x00, 0x48, 0x13, 0x04, 0x00, + 0x5a, 0x4c, 0x4e, 0x07, 0x76, 0x0f, 0x71, 0x1c, + 0x8c, 0x46, 0xb1, 0x00, 0x8e, 0x46, 0x56, 0x49, + 0x80, 0x31, 0x00, 0x28, 0x24, 0xd0, 0x52, 0x4f, + 0x01, 0x28, 0x7f, 0x78, 0x1a, 0xd0, 0x02, 0x28, + 0x71, 0xd1, 0x4f, 0x48, 0x00, 0x2f, 0x0c, 0xd0, + 0x01, 0x2f, 0x6c, 0xd1, 0x40, 0x79, 0x4d, 0x4d, + 0x40, 0x07, 0x40, 0x0f, 0x82, 0x00, 0xaa, 0x58, + 0x4b, 0x4d, 0x01, 0x30, 0x3c, 0x00, 0x84, 0x13, + 0x04, 0x00, 0xea, 0x61, 0xa0, 0x73, 0x04, 0x22, + 0x4b, 0x48, 0x48, 0x4d, 0xc8, 0x61, 0x4a, 0x48, + 0x00, 0x2f, 0x00, 0xd0, 0x4a, 0x48, 0x2f, 0x1c, + 0x11, 0xe0, 0x42, 0x48, 0x00, 0x2f, 0x55, 0xd1, + 0x07, 0x70, 0x02, 0x27, 0x47, 0x70, 0x3f, 0x48, + 0x40, 0x78, 0x00, 0x28, 0x10, 0xd0, 0x01, 0x28, + 0x01, 0xd0, 0x02, 0x28, 0x4a, 0xd1, 0x3f, 0x48, + 0x3d, 0x4f, 0xc8, 0x61, 0x3f, 0x48, 0x3c, 0x00, + 0xc0, 0x13, 0x04, 0x00, 0x88, 0x61, 0x3a, 0x49, + 0x70, 0x46, 0x08, 0x58, 0x35, 0x1c, 0xb8, 0x61, + 0x60, 0x46, 0x60, 0x73, 0x04, 0xe0, 0x3c, 0x48, + 0x02, 0x22, 0x88, 0x61, 0x3b, 0x48, 0xc8, 0x61, + 0x00, 0x20, 0x32, 0x49, 0x06, 0xe0, 0x0e, 0x18, + 0xb6, 0x78, 0x76, 0x07, 0x76, 0x0f, 0x04, 0x2e, + 0x2f, 0xd8, 0x01, 0x30, 0x90, 0x42, 0xf6, 0xd3, + 0xc8, 0x79, 0x2e, 0x4f, 0xc0, 0x07, 0xc0, 0x0f, + 0x3c, 0x00, 0xfc, 0x13, 0x04, 0x00, 0xf8, 0x60, + 0x33, 0x48, 0x41, 0x68, 0x19, 0x43, 0x41, 0x60, + 0x81, 0x68, 0x19, 0x43, 0x81, 0x60, 0x01, 0x9a, + 0xb9, 0x69, 0x8c, 0x46, 0x11, 0x43, 0xfa, 0x69, + 0x86, 0x68, 0x11, 0x43, 0x8e, 0x43, 0x86, 0x60, + 0x46, 0x68, 0x31, 0x43, 0x41, 0x60, 0x01, 0x99, + 0x0b, 0x43, 0x18, 0x1c, 0x61, 0x46, 0x08, 0x43, + 0x10, 0x43, 0x01, 0x1c, 0x00, 0x22, 0x02, 0x20, + 0xc7, 0xf7, 0x3c, 0x00, 0x38, 0x14, 0x04, 0x00, + 0x03, 0xfa, 0x1e, 0x4e, 0x40, 0x3e, 0x70, 0x78, + 0xc0, 0x08, 0xc0, 0x00, 0x28, 0x43, 0x70, 0x70, + 0x70, 0x1c, 0x01, 0x78, 0x00, 0xe0, 0x29, 0xe0, + 0x08, 0x25, 0xa9, 0x43, 0x01, 0x70, 0x01, 0x20, + 0xc0, 0x43, 0xb0, 0x80, 0x00, 0x21, 0x01, 0x20, + 0xcf, 0xf7, 0x6c, 0xfc, 0x30, 0x1c, 0x80, 0x30, + 0x81, 0x78, 0x09, 0x09, 0x09, 0x01, 0x81, 0x70, + 0x0f, 0x21, 0x01, 0x70, 0x3c, 0x00, 0x74, 0x14, + 0x04, 0x00, 0x16, 0x4a, 0x69, 0x04, 0x11, 0x60, + 0x51, 0x60, 0x02, 0x9e, 0x10, 0x21, 0x32, 0x7a, + 0x7b, 0x6a, 0x00, 0x2b, 0x00, 0xd1, 0x00, 0x21, + 0x11, 0x43, 0x21, 0x73, 0x81, 0x78, 0x29, 0x43, + 0x81, 0x70, 0xe0, 0x78, 0x01, 0x21, 0x08, 0x43, + 0xe0, 0x70, 0xd2, 0xf7, 0xf2, 0xf9, 0x01, 0x20, + 0x00, 0x90, 0x00, 0x98, 0xfe, 0xbd, 0xc0, 0x57, + 0x01, 0x00, 0x6c, 0x43, 0x01, 0x00, 0x3c, 0x00, + 0xb0, 0x14, 0x04, 0x00, 0xa4, 0x6c, 0x01, 0x00, + 0x40, 0x90, 0x07, 0x00, 0xc9, 0x1d, 0x00, 0x00, + 0x81, 0x1d, 0x00, 0x00, 0xa5, 0x1d, 0x00, 0x00, + 0x99, 0x1d, 0x00, 0x00, 0xf1, 0x1d, 0x00, 0x00, + 0x10, 0x00, 0x07, 0x00, 0x00, 0x10, 0x07, 0x00, + 0x03, 0x49, 0x00, 0x20, 0x88, 0x62, 0x08, 0x70, + 0x48, 0x70, 0x08, 0x71, 0x08, 0x62, 0x70, 0x47, + 0xac, 0x7e, 0x01, 0x00, 0x80, 0xb5, 0x01, 0x21, + 0x3c, 0x00, 0xec, 0x14, 0x04, 0x00, 0x00, 0x20, + 0xcd, 0xf7, 0x69, 0xff, 0x80, 0xbd, 0xb0, 0xb5, + 0x0f, 0x48, 0xc0, 0xf7, 0x18, 0xfc, 0x0e, 0x4d, + 0x03, 0x20, 0x28, 0x70, 0x0d, 0x49, 0x0d, 0x48, + 0x0c, 0x39, 0x48, 0x60, 0x0d, 0x48, 0x0a, 0x4c, + 0x88, 0x60, 0x40, 0x21, 0x18, 0x34, 0x20, 0x1c, + 0xbe, 0xf7, 0xc1, 0xff, 0xff, 0x21, 0x68, 0x68, + 0x09, 0x06, 0x08, 0x43, 0x20, 0x60, 0xff, 0x21, + 0x06, 0x22, 0x3c, 0x00, 0x28, 0x15, 0x04, 0x00, + 0x20, 0x1d, 0xbf, 0xf7, 0x79, 0xf8, 0x01, 0x20, + 0xe0, 0x60, 0xb0, 0xbd, 0xc0, 0xa8, 0x13, 0x0a, + 0x20, 0x6e, 0x01, 0x00, 0xc0, 0xa8, 0x13, 0x01, + 0xff, 0xff, 0xff, 0x00, 0x80, 0xb5, 0x02, 0x49, + 0x01, 0x20, 0xc8, 0xf7, 0x45, 0xff, 0x80, 0xbd, + 0x9d, 0x1c, 0x00, 0x00, 0x98, 0xb5, 0x0c, 0x4c, + 0x00, 0x20, 0x60, 0x60, 0xe0, 0x60, 0x0b, 0x4b, + 0x0b, 0x49, 0x82, 0x00, 0x3c, 0x00, 0x64, 0x15, + 0x04, 0x00, 0x01, 0x30, 0x20, 0x28, 0x99, 0x50, + 0xfa, 0xdb, 0x6a, 0x46, 0x09, 0x49, 0x05, 0x20, + 0xbf, 0xf7, 0x2f, 0xfd, 0x00, 0x20, 0xc0, 0x43, + 0x20, 0x60, 0x06, 0x49, 0x20, 0x20, 0x08, 0x60, + 0x48, 0x60, 0x98, 0xbd, 0x00, 0x00, 0x00, 0x40, + 0x07, 0x00, 0x30, 0x74, 0x01, 0x00, 0xa9, 0x75, + 0x00, 0x00, 0xb5, 0x9f, 0x00, 0x00, 0x00, 0x10, + 0x07, 0x00, 0x05, 0x49, 0x00, 0x20, 0x3c, 0x00, + 0xa0, 0x15, 0x04, 0x00, 0x08, 0x60, 0x05, 0x48, + 0x81, 0x78, 0x28, 0x22, 0x91, 0x43, 0x81, 0x70, + 0x81, 0x78, 0x11, 0x43, 0x81, 0x70, 0x70, 0x47, + 0x78, 0x6e, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x70, 0x47, 0x00, 0x00, 0x41, 0x48, 0x10, 0xb5, + 0x00, 0x68, 0x02, 0x21, 0x88, 0x43, 0x3f, 0x49, + 0x08, 0x60, 0x08, 0x1c, 0x00, 0x68, 0x02, 0x21, + 0x08, 0x43, 0x3c, 0x49, 0x08, 0x60, 0x3c, 0x48, + 0x3c, 0x00, 0xdc, 0x15, 0x04, 0x00, 0x40, 0x68, + 0x80, 0x21, 0x88, 0x43, 0x3a, 0x49, 0x48, 0x60, + 0x08, 0x1c, 0x00, 0x68, 0x80, 0x21, 0x08, 0x43, + 0x37, 0x49, 0x08, 0x60, 0x37, 0x48, 0x01, 0x7a, + 0x01, 0x24, 0x21, 0x43, 0x01, 0x72, 0x01, 0x7a, + 0x02, 0x22, 0x11, 0x43, 0x01, 0x72, 0x01, 0x7a, + 0x04, 0x22, 0x91, 0x43, 0x01, 0x72, 0x01, 0x7a, + 0x08, 0x22, 0x11, 0x43, 0x01, 0x72, 0x01, 0x7b, + 0x21, 0x43, 0x3c, 0x00, 0x18, 0x16, 0x04, 0x00, + 0x01, 0x73, 0x01, 0x7b, 0x02, 0x22, 0x11, 0x43, + 0x01, 0x73, 0x01, 0x7b, 0x04, 0x22, 0x11, 0x43, + 0x01, 0x73, 0x01, 0x7b, 0x08, 0x22, 0x11, 0x43, + 0x01, 0x73, 0x2e, 0x21, 0x41, 0x73, 0x81, 0x7b, + 0x38, 0x22, 0x91, 0x43, 0x28, 0x31, 0x81, 0x73, + 0x20, 0x21, 0x41, 0x74, 0x81, 0x7b, 0xc9, 0x08, + 0xc9, 0x00, 0x03, 0x31, 0x81, 0x73, 0x22, 0x21, + 0xc1, 0x73, 0x20, 0x49, 0x3c, 0x00, 0x54, 0x16, + 0x04, 0x00, 0x09, 0x7a, 0x41, 0x72, 0x1e, 0x49, + 0x49, 0x7a, 0x01, 0x74, 0x3c, 0x22, 0x02, 0x77, + 0x01, 0x1c, 0x10, 0x31, 0x4a, 0x73, 0x50, 0x23, + 0x8b, 0x73, 0x5a, 0x23, 0xcb, 0x73, 0x0d, 0x23, + 0x01, 0x1c, 0x20, 0x31, 0x0b, 0x70, 0x17, 0x4b, + 0x43, 0x84, 0x0e, 0x23, 0x4b, 0x70, 0x00, 0x21, + 0x41, 0x82, 0x30, 0x21, 0x01, 0x70, 0x05, 0x21, + 0x41, 0x70, 0x04, 0x21, 0x41, 0x71, 0x3c, 0x00, + 0x90, 0x16, 0x04, 0x00, 0x84, 0x71, 0xc4, 0x71, + 0x0c, 0x21, 0x01, 0x71, 0xf8, 0x21, 0x41, 0x80, + 0x0f, 0x49, 0xca, 0x72, 0x8a, 0x72, 0x03, 0x22, + 0x0a, 0x72, 0x09, 0x22, 0x4a, 0x72, 0x08, 0x22, + 0x0a, 0x73, 0x02, 0x7a, 0x40, 0x23, 0x1a, 0x43, + 0x02, 0x72, 0x4c, 0x73, 0xff, 0xf7, 0xa2, 0xfc, + 0x08, 0x48, 0x01, 0x78, 0x21, 0x43, 0x01, 0x70, + 0x10, 0xbd, 0x00, 0x00, 0xf0, 0x00, 0x07, 0x00, + 0x3c, 0x00, 0xcc, 0x16, 0x04, 0x00, 0xf4, 0x00, + 0x07, 0x00, 0x0c, 0x80, 0x07, 0x00, 0x76, 0x46, + 0x01, 0x00, 0x24, 0x09, 0x00, 0x00, 0x80, 0x80, + 0x07, 0x00, 0xa0, 0x80, 0x07, 0x00, 0x80, 0xb5, + 0x18, 0x21, 0x09, 0x48, 0xbe, 0xf7, 0xd7, 0xfe, + 0x08, 0x48, 0x00, 0x21, 0x3c, 0x38, 0x41, 0x60, + 0x81, 0x60, 0xc1, 0x60, 0x01, 0x61, 0x41, 0x61, + 0x81, 0x61, 0x01, 0x21, 0x01, 0x62, 0xff, 0xf7, + 0x5c, 0xff, 0x3c, 0x00, 0x08, 0x17, 0x04, 0x00, + 0xc0, 0xf7, 0x6c, 0xff, 0x80, 0xbd, 0x00, 0x00, + 0x24, 0x7e, 0x01, 0x00, 0xb0, 0xb5, 0x21, 0x48, + 0x00, 0x68, 0x40, 0x08, 0x1f, 0x49, 0x40, 0x00, + 0x08, 0x60, 0x08, 0x1c, 0x00, 0x68, 0x01, 0x21, + 0x08, 0x43, 0x1c, 0x49, 0x08, 0x60, 0x1c, 0x4a, + 0x10, 0x79, 0x01, 0x21, 0x08, 0x43, 0x10, 0x71, + 0x10, 0x79, 0x02, 0x21, 0x88, 0x43, 0x10, 0x71, + 0x00, 0xf0, 0x6c, 0xf8, 0x3c, 0x00, 0x44, 0x17, + 0x04, 0x00, 0x10, 0x7a, 0x01, 0x21, 0x08, 0x43, + 0x10, 0x72, 0x10, 0x7a, 0xfe, 0x21, 0x88, 0x43, + 0x0a, 0x30, 0x10, 0x72, 0x28, 0x20, 0x90, 0x72, + 0x5a, 0x20, 0xd0, 0x72, 0x11, 0x4d, 0x14, 0x20, + 0x28, 0x77, 0x2c, 0x1c, 0x10, 0x34, 0xa0, 0x73, + 0x16, 0x20, 0xa8, 0x75, 0x18, 0x20, 0xe8, 0x75, + 0xff, 0xf7, 0xa1, 0xfc, 0x0c, 0x48, 0x68, 0x86, + 0xe0, 0x7b, 0x40, 0x06, 0x40, 0x0e, 0x3c, 0x00, + 0x80, 0x17, 0x04, 0x00, 0x0e, 0x21, 0x08, 0x43, + 0xe0, 0x73, 0xe0, 0x7b, 0x80, 0x21, 0x08, 0x43, + 0xe0, 0x73, 0x07, 0x48, 0x41, 0x79, 0x04, 0x22, + 0x11, 0x43, 0x41, 0x71, 0xb0, 0xbd, 0x00, 0x00, + 0xf0, 0x00, 0x07, 0x00, 0x00, 0x80, 0x07, 0x00, + 0x30, 0x80, 0x07, 0x00, 0xff, 0x01, 0x00, 0x00, + 0x50, 0x00, 0x07, 0x00, 0x80, 0xb5, 0xff, 0xf7, + 0xaf, 0xff, 0x00, 0x20, 0x14, 0x49, 0xc0, 0x43, + 0x3c, 0x00, 0xbc, 0x17, 0x04, 0x00, 0x88, 0x60, + 0xc1, 0xf7, 0x0b, 0xf9, 0x13, 0x49, 0x00, 0x20, + 0x48, 0x62, 0xc8, 0x60, 0x48, 0x61, 0x08, 0x61, + 0x88, 0x61, 0xc8, 0x61, 0x0f, 0x4b, 0x08, 0x62, + 0x0f, 0x4a, 0x08, 0x63, 0x38, 0x33, 0x1a, 0x80, + 0x01, 0x22, 0x5a, 0x71, 0x0b, 0x4a, 0x40, 0x32, + 0xd0, 0x60, 0x13, 0x60, 0x08, 0x23, 0x13, 0x81, + 0x50, 0x60, 0x09, 0x4a, 0x8a, 0x62, 0xff, 0x22, + 0x0a, 0x70, 0x3c, 0x00, 0xf8, 0x17, 0x04, 0x00, + 0x48, 0x70, 0x05, 0x48, 0x00, 0x21, 0x00, 0x22, + 0x50, 0x30, 0x00, 0x23, 0x0e, 0xc0, 0xc1, 0xf7, + 0xff, 0xf8, 0x80, 0xbd, 0x00, 0x30, 0x07, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0xbe, 0xba, 0x00, 0x00, + 0x85, 0x75, 0x00, 0x00, 0x03, 0x48, 0x10, 0x21, + 0x81, 0x71, 0x02, 0x21, 0xc1, 0x71, 0x30, 0x21, + 0x41, 0x72, 0x70, 0x47, 0x00, 0x80, 0x07, 0x00, + 0x70, 0x47, 0x00, 0x00, 0x3c, 0x00, 0x34, 0x18, + 0x04, 0x00, 0x00, 0xb5, 0xc1, 0xf7, 0xdb, 0xfb, + 0x00, 0xbd, 0x70, 0x47, 0x00, 0x00, 0x80, 0xb5, + 0xcd, 0xf7, 0x87, 0xfd, 0x01, 0x49, 0x88, 0x60, + 0x80, 0xbd, 0x50, 0xd9, 0x01, 0x00, 0x80, 0xb5, + 0x06, 0x21, 0x05, 0x48, 0xbe, 0xf7, 0xfd, 0xfd, + 0x04, 0x49, 0x00, 0x20, 0x04, 0x39, 0x08, 0x60, + 0x00, 0xf0, 0x67, 0xf8, 0x00, 0xf0, 0x03, 0xf8, + 0x80, 0xbd, 0xec, 0x67, 0x01, 0x00, 0x3c, 0x00, + 0x70, 0x18, 0x04, 0x00, 0x10, 0xb5, 0x07, 0x4c, + 0x2c, 0x21, 0x20, 0x1c, 0xbe, 0xf7, 0x10, 0xfe, + 0x01, 0x20, 0x20, 0x70, 0x03, 0x49, 0x00, 0x20, + 0x1c, 0x39, 0xc8, 0x60, 0x08, 0x61, 0x88, 0x61, + 0x10, 0xbd, 0x00, 0x00, 0x78, 0x69, 0x01, 0x00, + 0x80, 0xb5, 0xcd, 0xf7, 0x5d, 0xfd, 0x09, 0x49, + 0x88, 0x60, 0x09, 0x49, 0x08, 0x20, 0xd0, 0xf7, + 0x73, 0xfd, 0x08, 0x49, 0x09, 0x20, 0xd0, 0xf7, + 0x3c, 0x00, 0xac, 0x18, 0x04, 0x00, 0x6f, 0xfd, + 0x07, 0x49, 0x11, 0x20, 0xd0, 0xf7, 0x6b, 0xfd, + 0x06, 0x48, 0xc2, 0xf7, 0x74, 0xf9, 0x80, 0xbd, + 0x00, 0x00, 0x78, 0x69, 0x01, 0x00, 0x21, 0x35, + 0x00, 0x00, 0xa1, 0x38, 0x00, 0x00, 0x45, 0x34, + 0x00, 0x00, 0xbd, 0x26, 0x01, 0x00, 0x80, 0xb5, + 0x86, 0xb0, 0x0f, 0x48, 0xc4, 0xf7, 0x45, 0xf9, + 0x00, 0xf0, 0x45, 0xf8, 0xff, 0xf7, 0xd7, 0xff, + 0xff, 0xf7, 0x3c, 0x00, 0xe8, 0x18, 0x04, 0x00, + 0xab, 0xff, 0x0c, 0x49, 0x03, 0x20, 0xd0, 0xf7, + 0x4d, 0xfd, 0x0b, 0x48, 0x69, 0x46, 0x00, 0x90, + 0x00, 0x20, 0x01, 0x90, 0x09, 0x48, 0x04, 0x90, + 0x09, 0x48, 0x02, 0x90, 0x09, 0x48, 0x03, 0x90, + 0x09, 0x48, 0x05, 0x90, 0x00, 0x20, 0xc4, 0xf7, + 0xcf, 0xf8, 0x06, 0xb0, 0x80, 0xbd, 0x00, 0x00, + 0xf4, 0x67, 0x01, 0x00, 0x45, 0x35, 0x00, 0x00, + 0x95, 0x32, 0x00, 0x00, 0x3c, 0x00, 0x24, 0x19, + 0x04, 0x00, 0xa0, 0x7d, 0x01, 0x00, 0xfd, 0x32, + 0x00, 0x00, 0xcd, 0x31, 0x00, 0x00, 0x45, 0x7d, + 0x01, 0x00, 0x10, 0xb5, 0xcd, 0xf7, 0xd5, 0xfc, + 0x09, 0x48, 0x09, 0x4c, 0x30, 0x21, 0x60, 0x61, + 0x08, 0x48, 0x74, 0x30, 0xbe, 0xf7, 0xa9, 0xfd, + 0x00, 0x20, 0xa0, 0x62, 0x06, 0x49, 0x20, 0x61, + 0xe1, 0x63, 0x60, 0x64, 0xa0, 0x64, 0x14, 0x21, + 0x21, 0x65, 0x60, 0x62, 0x10, 0xbd, 0x3c, 0x00, + 0x60, 0x19, 0x04, 0x00, 0xb9, 0x75, 0x00, 0x00, + 0x44, 0x7d, 0x01, 0x00, 0x70, 0x17, 0x00, 0x00, + 0x80, 0xb5, 0x02, 0x21, 0x09, 0x20, 0x04, 0x4a, + 0xd1, 0xf7, 0xe8, 0xfe, 0xcd, 0xf7, 0xec, 0xfc, + 0x02, 0x49, 0x08, 0x63, 0x80, 0xbd, 0x00, 0x00, + 0x39, 0x39, 0x00, 0x00, 0x44, 0x7d, 0x01, 0x00, + 0x80, 0xb5, 0xac, 0x21, 0x03, 0x48, 0xbe, 0xf7, + 0x83, 0xfd, 0x00, 0xf0, 0x51, 0xf8, 0x00, 0xf0, + 0x3c, 0x00, 0x9c, 0x19, 0x04, 0x00, 0x49, 0xf8, + 0x80, 0xbd, 0xa4, 0x6c, 0x01, 0x00, 0x08, 0xb5, + 0x00, 0xf0, 0x4d, 0xf8, 0x00, 0xf0, 0x45, 0xf8, + 0x00, 0x21, 0x16, 0x20, 0x18, 0x4a, 0xd1, 0xf7, + 0xc8, 0xfe, 0x17, 0x4a, 0x04, 0x21, 0x10, 0x1c, + 0x40, 0x30, 0x01, 0x70, 0x00, 0x21, 0x81, 0x70, + 0x11, 0x21, 0xc1, 0x80, 0x14, 0x49, 0x01, 0x81, + 0x10, 0x1c, 0x80, 0x30, 0xc1, 0x78, 0x08, 0x22, + 0x91, 0x43, 0x3c, 0x00, 0xd8, 0x19, 0x04, 0x00, + 0xc1, 0x70, 0xc1, 0x78, 0x11, 0x43, 0xc1, 0x70, + 0x6a, 0x46, 0x0f, 0x49, 0x14, 0x20, 0xbf, 0xf7, + 0xf5, 0xfa, 0x0e, 0x49, 0x07, 0x20, 0xd0, 0xf7, + 0xcd, 0xfc, 0x0d, 0x49, 0x0f, 0x20, 0xd0, 0xf7, + 0xc9, 0xfc, 0xcd, 0xf7, 0xab, 0xfc, 0x0b, 0x49, + 0x08, 0x60, 0x0a, 0x48, 0x44, 0x38, 0x80, 0x68, + 0x00, 0x28, 0x02, 0xd0, 0x00, 0x20, 0xc6, 0xf7, + 0x6f, 0xf9, 0x08, 0xbd, 0x3c, 0x00, 0x14, 0x1a, + 0x04, 0x00, 0xb5, 0x3b, 0x00, 0x00, 0x00, 0x90, + 0x07, 0x00, 0xe7, 0xfd, 0x00, 0x00, 0x8d, 0x41, + 0x00, 0x00, 0xcd, 0x48, 0x00, 0x00, 0xd9, 0x49, + 0x00, 0x00, 0xa4, 0x6c, 0x01, 0x00, 0x80, 0xb5, + 0x00, 0xf0, 0x6f, 0xfc, 0x80, 0xbd, 0x70, 0x47, + 0x00, 0x00, 0x80, 0xb5, 0x00, 0xf0, 0x61, 0xfc, + 0x80, 0xbd, 0x70, 0x47, 0x00, 0x00, 0xb0, 0xb5, + 0x30, 0x21, 0x0c, 0x48, 0xbe, 0xf7, 0x3c, 0x00, + 0x50, 0x1a, 0x04, 0x00, 0x25, 0xfd, 0x0b, 0x4c, + 0x00, 0x25, 0x0a, 0x48, 0x84, 0x3c, 0x38, 0x22, + 0x03, 0x21, 0x70, 0x38, 0x65, 0x60, 0xbe, 0xf7, + 0xdd, 0xfd, 0x06, 0x48, 0x38, 0x22, 0x01, 0x21, + 0x38, 0x38, 0xbe, 0xf7, 0xd7, 0xfd, 0x0e, 0x20, + 0xa5, 0x60, 0x60, 0x70, 0x20, 0x70, 0x00, 0xf0, + 0x1d, 0xf8, 0xb0, 0xbd, 0x94, 0x67, 0x01, 0x00, + 0x04, 0x49, 0x00, 0xb5, 0x01, 0x20, 0x48, 0x60, + 0x3c, 0x00, 0x8c, 0x1a, 0x04, 0x00, 0x88, 0x60, + 0xc8, 0x60, 0xc3, 0xf7, 0xf8, 0xff, 0x00, 0xbd, + 0x00, 0x00, 0xd4, 0x67, 0x01, 0x00, 0x80, 0xb5, + 0x02, 0x21, 0x0a, 0x20, 0x02, 0x4a, 0xd1, 0xf7, + 0x50, 0xfe, 0x80, 0xbd, 0x00, 0x00, 0x1d, 0x5a, + 0x00, 0x00, 0x80, 0xb5, 0x00, 0xf0, 0x05, 0xf8, + 0x80, 0xbd, 0x80, 0xb5, 0x00, 0xf0, 0xfd, 0xfb, + 0x80, 0xbd, 0x80, 0xb5, 0x02, 0x49, 0x04, 0x20, + 0xd0, 0xf7, 0x3c, 0x00, 0xc8, 0x1a, 0x04, 0x00, + 0x61, 0xfc, 0x80, 0xbd, 0x65, 0x1f, 0x00, 0x00, + 0x00, 0x21, 0x17, 0x48, 0xc9, 0x43, 0x80, 0xb5, + 0x16, 0x4b, 0x01, 0x70, 0x18, 0x1c, 0x10, 0x22, + 0x20, 0x30, 0x02, 0x71, 0x00, 0x22, 0x10, 0x33, + 0x9a, 0x73, 0x42, 0x79, 0x04, 0x23, 0x1a, 0x43, + 0x42, 0x71, 0x42, 0x79, 0x18, 0x23, 0x9a, 0x43, + 0x08, 0x32, 0x42, 0x71, 0x08, 0x1c, 0xd7, 0xf7, + 0x59, 0xf8, 0x00, 0x28, 0x3c, 0x00, 0x04, 0x1b, + 0x04, 0x00, 0x03, 0xd1, 0x01, 0x21, 0x9a, 0x20, + 0xbf, 0xf7, 0xcb, 0xfb, 0x50, 0x20, 0x09, 0x49, + 0x50, 0x22, 0x0a, 0x60, 0xc8, 0x60, 0x88, 0x60, + 0x48, 0x60, 0x08, 0x61, 0x01, 0x20, 0x48, 0x61, + 0x00, 0x20, 0xd7, 0xf7, 0xd8, 0xf8, 0x04, 0x49, + 0xff, 0x20, 0x08, 0x60, 0x80, 0xbd, 0xf4, 0x6b, + 0x01, 0x00, 0x30, 0x00, 0x07, 0x00, 0x04, 0x02, + 0x07, 0x00, 0xf4, 0x74, 0x01, 0x00, 0x3c, 0x00, + 0x40, 0x1b, 0x04, 0x00, 0x80, 0xb5, 0xd7, 0xf7, + 0xfb, 0xf8, 0x80, 0xbd, 0x10, 0xb5, 0xff, 0xf7, + 0xab, 0xfb, 0xbf, 0xf7, 0xdd, 0xfb, 0x81, 0x48, + 0xcd, 0xf7, 0x98, 0xfa, 0x00, 0x24, 0x23, 0x1c, + 0x04, 0x22, 0x04, 0x21, 0x00, 0x20, 0x01, 0xf0, + 0x39, 0xfa, 0x00, 0x28, 0x01, 0xd0, 0xbf, 0xf7, + 0xc9, 0xfb, 0x23, 0x1c, 0x00, 0x22, 0xff, 0x21, + 0x00, 0x20, 0x01, 0xf0, 0x2f, 0xfa, 0x00, 0x28, + 0x3c, 0x00, 0x7c, 0x1b, 0x04, 0x00, 0x01, 0xd0, + 0xbf, 0xf7, 0xbf, 0xfb, 0x23, 0x1c, 0x00, 0x22, + 0xff, 0x21, 0x00, 0x20, 0x01, 0xf0, 0x25, 0xfa, + 0x00, 0x28, 0x01, 0xd0, 0xbf, 0xf7, 0xb5, 0xfb, + 0xc4, 0xf7, 0x27, 0xff, 0x70, 0x48, 0x84, 0x70, + 0x6f, 0x49, 0x7f, 0x20, 0x88, 0x70, 0x6e, 0x49, + 0x0c, 0x60, 0x03, 0x20, 0x08, 0x60, 0x6b, 0x48, + 0x44, 0x70, 0x6c, 0x48, 0x04, 0x80, 0x69, 0x48, + 0xc0, 0x78, 0x3c, 0x00, 0xb8, 0x1b, 0x04, 0x00, + 0x08, 0x21, 0x08, 0x43, 0x67, 0x49, 0xc8, 0x70, + 0x08, 0x1c, 0xc0, 0x78, 0x04, 0x21, 0x08, 0x43, + 0x64, 0x49, 0xc8, 0x70, 0x01, 0xf0, 0x7e, 0xfa, + 0xff, 0xf7, 0x7e, 0xff, 0xff, 0xf7, 0x2c, 0xfe, + 0x01, 0xf0, 0x46, 0xfb, 0xff, 0xf7, 0x18, 0xfb, + 0x01, 0xf0, 0x52, 0xfa, 0xff, 0xf7, 0x82, 0xfb, + 0x5f, 0x48, 0xc1, 0x68, 0x10, 0x22, 0x91, 0x43, + 0xc1, 0x60, 0x01, 0x69, 0x3c, 0x00, 0xf4, 0x1b, + 0x04, 0x00, 0x5d, 0x4a, 0x11, 0x43, 0x01, 0x61, + 0x01, 0x69, 0xd2, 0x0a, 0x91, 0x43, 0x01, 0x61, + 0xc1, 0x68, 0x5a, 0x4a, 0x11, 0x43, 0xc1, 0x60, + 0x81, 0x6a, 0x59, 0x4a, 0x11, 0x43, 0x81, 0x62, + 0x00, 0xf0, 0x77, 0xf9, 0x01, 0xf0, 0x1f, 0xf8, + 0x00, 0xf0, 0x93, 0xfa, 0x01, 0xf0, 0x99, 0xfb, + 0x00, 0xf0, 0xf1, 0xff, 0x00, 0xf0, 0x99, 0xfc, + 0x00, 0xf0, 0xdd, 0xfc, 0x00, 0xf0, 0x3c, 0x00, + 0x30, 0x1c, 0x04, 0x00, 0x83, 0xfc, 0xff, 0xf7, + 0xb3, 0xfc, 0x01, 0xf0, 0x31, 0xfa, 0x01, 0xf0, + 0x71, 0xfa, 0xff, 0xf7, 0x87, 0xfa, 0xff, 0xf7, + 0x9b, 0xfa, 0x01, 0x21, 0x01, 0x20, 0x4b, 0x4a, + 0xd1, 0xf7, 0x7c, 0xfd, 0x01, 0x21, 0x02, 0x20, + 0x49, 0x4a, 0xd1, 0xf7, 0x77, 0xfd, 0x02, 0x21, + 0x03, 0x20, 0x48, 0x4a, 0xd1, 0xf7, 0x72, 0xfd, + 0x02, 0x21, 0x04, 0x20, 0x46, 0x4a, 0xd1, 0xf7, + 0x3c, 0x00, 0x6c, 0x1c, 0x04, 0x00, 0x6d, 0xfd, + 0x02, 0x21, 0x05, 0x20, 0x45, 0x4a, 0xd1, 0xf7, + 0x68, 0xfd, 0x02, 0x21, 0x06, 0x20, 0x43, 0x4a, + 0xd1, 0xf7, 0x63, 0xfd, 0x01, 0x21, 0x07, 0x20, + 0x42, 0x4a, 0xd1, 0xf7, 0x5e, 0xfd, 0x02, 0x21, + 0x17, 0x20, 0x40, 0x4a, 0xd1, 0xf7, 0x59, 0xfd, + 0x02, 0x21, 0x08, 0x20, 0x3f, 0x4a, 0xd1, 0xf7, + 0x54, 0xfd, 0xff, 0xf7, 0xc8, 0xfd, 0x3d, 0x48, + 0x04, 0x60, 0x3c, 0x00, 0xa8, 0x1c, 0x04, 0x00, + 0x44, 0x60, 0xff, 0xf7, 0x17, 0xfa, 0xff, 0xf7, + 0x09, 0xfa, 0xff, 0xf7, 0x4f, 0xfc, 0x00, 0xf0, + 0x43, 0xf9, 0xff, 0xf7, 0x33, 0xfa, 0xff, 0xf7, + 0xfb, 0xfa, 0x01, 0xf0, 0x85, 0xf8, 0x01, 0xf0, + 0xeb, 0xf9, 0x01, 0xf0, 0x23, 0xfa, 0x01, 0xf0, + 0x71, 0xf9, 0x00, 0xf0, 0xe3, 0xff, 0xff, 0xf7, + 0x6f, 0xfa, 0x00, 0xf0, 0xaf, 0xf9, 0x00, 0xf0, + 0xbd, 0xf9, 0x00, 0xf0, 0x3c, 0x00, 0xe4, 0x1c, + 0x04, 0x00, 0xad, 0xfc, 0x00, 0xf0, 0x9b, 0xfe, + 0xff, 0xf7, 0xcd, 0xfa, 0xff, 0xf7, 0xab, 0xfe, + 0x00, 0xf0, 0xc3, 0xf9, 0xff, 0xf7, 0xab, 0xfd, + 0x00, 0xf0, 0x8d, 0xff, 0x00, 0xf0, 0x21, 0xff, + 0x00, 0xf0, 0x65, 0xf9, 0x00, 0xf0, 0x97, 0xf9, + 0x00, 0xf0, 0xfd, 0xfe, 0x00, 0xf0, 0xe5, 0xfe, + 0x00, 0xf0, 0x3f, 0xf9, 0x00, 0xf0, 0x73, 0xf9, + 0xff, 0xf7, 0x37, 0xfe, 0x00, 0xf0, 0x3c, 0x00, + 0x20, 0x1d, 0x04, 0x00, 0x21, 0xf9, 0x00, 0xf0, + 0x73, 0xfb, 0xff, 0xf7, 0xe5, 0xfb, 0x00, 0xf0, + 0xd3, 0xfb, 0xff, 0xf7, 0xa9, 0xfe, 0x00, 0xf0, + 0xbb, 0xfb, 0x00, 0xf0, 0x09, 0xff, 0x00, 0xf0, + 0xdb, 0xf9, 0x18, 0x48, 0xc9, 0xf7, 0x56, 0xf8, + 0x17, 0x48, 0xc9, 0xf7, 0x2b, 0xf8, 0x00, 0x22, + 0x01, 0x21, 0xf0, 0x20, 0xd1, 0xf7, 0x2e, 0xfd, + 0x00, 0x20, 0x10, 0xbd, 0xa9, 0x69, 0x00, 0x00, + 0x3c, 0x00, 0x5c, 0x1d, 0x04, 0x00, 0x00, 0x00, + 0x07, 0x00, 0xf0, 0x00, 0x07, 0x00, 0x2c, 0x00, + 0x07, 0x00, 0x00, 0x10, 0x07, 0x00, 0x3c, 0x00, + 0x08, 0x00, 0xc0, 0x3f, 0x74, 0x38, 0xfc, 0xdf, + 0x7f, 0x38, 0x55, 0x69, 0x00, 0x00, 0xe5, 0x13, + 0x00, 0x00, 0x61, 0x0c, 0x00, 0x00, 0x6d, 0x0c, + 0x00, 0x00, 0x3d, 0x0c, 0x00, 0x00, 0xf1, 0x0d, + 0x00, 0x00, 0xc5, 0x33, 0x00, 0x00, 0x3d, 0x0f, + 0x00, 0x00, 0x3c, 0x00, 0x98, 0x1d, 0x04, 0x00, + 0xad, 0xd8, 0x00, 0x00, 0x80, 0x00, 0x07, 0x00, + 0x50, 0x57, 0x01, 0x00, 0x04, 0x40, 0x01, 0x00, + 0x80, 0xb5, 0x01, 0xf0, 0xa9, 0xf9, 0x00, 0xf0, + 0xc9, 0xf8, 0xff, 0xf7, 0xc5, 0xfe, 0x01, 0xf0, + 0x03, 0xfb, 0x01, 0xf0, 0x93, 0xfa, 0xff, 0xf7, + 0xcb, 0xf9, 0x2c, 0x48, 0xff, 0xf7, 0xe8, 0xf9, + 0x00, 0xf0, 0xaa, 0xf8, 0x00, 0xf0, 0x58, 0xff, + 0xff, 0xf7, 0x34, 0xfd, 0x3c, 0x00, 0xd4, 0x1d, + 0x04, 0x00, 0xff, 0xf7, 0xf2, 0xfb, 0xff, 0xf7, + 0x7a, 0xfa, 0xff, 0xf7, 0x00, 0xfa, 0x00, 0xf0, + 0x34, 0xf9, 0x00, 0xf0, 0x3c, 0xf9, 0x01, 0xf0, + 0xe2, 0xf8, 0xff, 0xf7, 0x7a, 0xf9, 0xff, 0xf7, + 0x72, 0xf9, 0xff, 0xf7, 0x9a, 0xf9, 0x01, 0xf0, + 0x66, 0xf9, 0x01, 0xf0, 0x8e, 0xf9, 0x01, 0xf0, + 0xe0, 0xf8, 0x00, 0xf0, 0x06, 0xff, 0x00, 0xf0, + 0xf0, 0xfb, 0x00, 0xf0, 0x46, 0xfb, 0x3c, 0x00, + 0x10, 0x1e, 0x04, 0x00, 0x00, 0xf0, 0xbc, 0xff, + 0x00, 0xf0, 0xe4, 0xfc, 0x00, 0xf0, 0x20, 0xfe, + 0xff, 0xf7, 0x40, 0xfa, 0xff, 0xf7, 0x46, 0xfe, + 0xff, 0xf7, 0x56, 0xfd, 0x00, 0xf0, 0x2c, 0xf9, + 0x00, 0xf0, 0xfa, 0xfe, 0x00, 0xf0, 0x8a, 0xfe, + 0x00, 0xf0, 0xd4, 0xf8, 0x00, 0xf0, 0xb4, 0xf8, + 0x00, 0xf0, 0x78, 0xfe, 0x00, 0xf0, 0x4e, 0xfe, + 0x00, 0xf0, 0xde, 0xf8, 0xff, 0xf7, 0xac, 0xfd, + 0x3c, 0x00, 0x4c, 0x1e, 0x04, 0x00, 0x00, 0xf0, + 0x8c, 0xf8, 0x00, 0xf0, 0xf8, 0xfa, 0xff, 0xf7, + 0x76, 0xfb, 0xff, 0xf7, 0x20, 0xfe, 0x01, 0xf0, + 0xa6, 0xfa, 0x00, 0xf0, 0x48, 0xfb, 0x00, 0xf0, + 0x7c, 0xfe, 0x00, 0xf0, 0x5c, 0xf9, 0xbe, 0xf7, + 0x57, 0xfd, 0x00, 0x20, 0x80, 0xbd, 0x80, 0x38, + 0x01, 0x00, 0x01, 0x49, 0x00, 0x20, 0x08, 0x60, + 0x70, 0x47, 0xa8, 0x7e, 0x01, 0x00, 0x10, 0xb5, + 0x04, 0x1c, 0x3c, 0x00, 0x88, 0x1e, 0x04, 0x00, + 0x01, 0xd1, 0xbf, 0xf7, 0x39, 0xfa, 0x0f, 0x48, + 0x7d, 0x21, 0xc9, 0x00, 0x84, 0x60, 0x01, 0x80, + 0x0d, 0x49, 0x01, 0x61, 0x80, 0x21, 0x41, 0x80, + 0x00, 0x21, 0xc1, 0x60, 0x01, 0x62, 0x0b, 0x48, + 0x41, 0x80, 0x14, 0x21, 0x81, 0x80, 0x07, 0x21, + 0x41, 0x81, 0x06, 0x4a, 0x46, 0x23, 0x04, 0x32, + 0x05, 0x24, 0x13, 0x70, 0x54, 0x70, 0x0a, 0x21, + 0x91, 0x70, 0x81, 0x76, 0x3c, 0x00, 0xc4, 0x1e, + 0x04, 0x00, 0x03, 0x76, 0x04, 0x81, 0x10, 0xbd, + 0x00, 0x00, 0xc8, 0x74, 0x01, 0x00, 0x00, 0x87, + 0x93, 0x03, 0x30, 0x00, 0x07, 0x00, 0x09, 0x48, + 0x80, 0xb5, 0x01, 0x69, 0x42, 0x69, 0x11, 0x43, + 0x82, 0x69, 0xc0, 0x69, 0x11, 0x43, 0x01, 0x43, + 0x00, 0x22, 0x03, 0x20, 0xc6, 0xf7, 0xbf, 0xfc, + 0xcc, 0xf7, 0x1b, 0xfa, 0x00, 0x20, 0xc2, 0xf7, + 0x92, 0xf9, 0x80, 0xbd, 0x00, 0x00, 0x3c, 0x00, + 0x00, 0x1f, 0x04, 0x00, 0xa4, 0x6c, 0x01, 0x00, + 0x05, 0x48, 0x80, 0xb5, 0x00, 0x21, 0x81, 0x60, + 0x02, 0x21, 0xc1, 0x60, 0x03, 0x39, 0x41, 0x60, + 0xc7, 0xf7, 0x3a, 0xff, 0x80, 0xbd, 0x00, 0x00, + 0x40, 0x20, 0x07, 0x00, 0x08, 0xb5, 0x6a, 0x46, + 0x04, 0x49, 0x15, 0x20, 0xbf, 0xf7, 0x54, 0xf8, + 0x01, 0x20, 0x03, 0x49, 0x40, 0x05, 0x08, 0x60, + 0x48, 0x60, 0x08, 0xbd, 0xa5, 0x21, 0x01, 0x00, + 0x3c, 0x00, 0x3c, 0x1f, 0x04, 0x00, 0x00, 0x10, + 0x07, 0x00, 0x70, 0x47, 0x00, 0x00, 0x06, 0x48, + 0x80, 0xb5, 0x80, 0x68, 0xc0, 0x01, 0x80, 0x0f, + 0x05, 0xd1, 0x03, 0x22, 0xc1, 0x43, 0xc6, 0xf7, + 0xba, 0xfc, 0xd6, 0xf7, 0x00, 0xfe, 0x80, 0xbd, + 0x00, 0x00, 0x10, 0x00, 0x07, 0x00, 0x70, 0x47, + 0x00, 0x00, 0x80, 0xb5, 0x02, 0x21, 0x2a, 0x20, + 0x06, 0x4a, 0xd1, 0xf7, 0xea, 0xfb, 0x00, 0x22, + 0x07, 0x20, 0x3c, 0x00, 0x78, 0x1f, 0x04, 0x00, + 0x04, 0x49, 0xbe, 0xf7, 0xed, 0xfe, 0x04, 0x48, + 0xc7, 0xf7, 0x58, 0xfc, 0x80, 0xbd, 0x00, 0x00, + 0x8d, 0x89, 0x00, 0x00, 0xd5, 0x9b, 0x00, 0x00, + 0x10, 0x46, 0x01, 0x00, 0x02, 0x48, 0x00, 0x21, + 0x00, 0x22, 0x00, 0x23, 0x0e, 0xc0, 0x70, 0x47, + 0x80, 0x6e, 0x01, 0x00, 0x80, 0xb5, 0x02, 0x21, + 0x2c, 0x20, 0x06, 0x4a, 0xd1, 0xf7, 0xcc, 0xfb, + 0x00, 0x22, 0x00, 0x20, 0x3c, 0x00, 0xb4, 0x1f, + 0x04, 0x00, 0x04, 0x49, 0xbe, 0xf7, 0xcf, 0xfe, + 0x04, 0x49, 0x02, 0x20, 0xc8, 0xf7, 0x0b, 0xfa, + 0x80, 0xbd, 0x05, 0x8a, 0x00, 0x00, 0xe9, 0x9b, + 0x00, 0x00, 0xb1, 0x8b, 0x00, 0x00, 0x02, 0x48, + 0x00, 0x21, 0x00, 0x22, 0x00, 0x23, 0x0e, 0xc0, + 0x70, 0x47, 0x10, 0x75, 0x01, 0x00, 0x80, 0xb5, + 0x02, 0x21, 0x2b, 0x20, 0x04, 0x4a, 0xd1, 0xf7, + 0xae, 0xfb, 0x00, 0x22, 0x02, 0x20, 0x3c, 0x00, + 0xf0, 0x1f, 0x04, 0x00, 0x02, 0x49, 0xbe, 0xf7, + 0xb1, 0xfe, 0x80, 0xbd, 0x2d, 0x8a, 0x00, 0x00, + 0x8d, 0x8c, 0x00, 0x00, 0x70, 0x47, 0x00, 0x00, + 0x80, 0xb5, 0x02, 0x21, 0x2d, 0x20, 0x07, 0x4a, + 0xd1, 0xf7, 0x9c, 0xfb, 0x00, 0x22, 0x01, 0x20, + 0x05, 0x49, 0xbe, 0xf7, 0x9f, 0xfe, 0x05, 0x48, + 0xcb, 0xf7, 0x56, 0xfa, 0x04, 0x48, 0xcc, 0xf7, + 0xf7, 0xf8, 0x80, 0xbd, 0xad, 0x8a, 0x00, 0x00, + 0x3c, 0x00, 0x2c, 0x20, 0x04, 0x00, 0x21, 0xe2, + 0x00, 0x00, 0xf9, 0xdf, 0x00, 0x00, 0x20, 0x44, + 0x01, 0x00, 0x70, 0x47, 0x00, 0x00, 0x02, 0x49, + 0x00, 0x20, 0x08, 0x60, 0x01, 0x20, 0x48, 0x60, + 0x70, 0x47, 0xac, 0x79, 0x01, 0x00, 0x80, 0xb5, + 0x02, 0x49, 0x0d, 0x20, 0xd0, 0xf7, 0x9b, 0xf9, + 0x80, 0xbd, 0x61, 0x98, 0x00, 0x00, 0x70, 0x47, + 0x00, 0x00, 0x80, 0xb5, 0xcd, 0xf7, 0x77, 0xf9, + 0x03, 0x49, 0x3c, 0x00, 0x68, 0x20, 0x04, 0x00, + 0x08, 0x60, 0x01, 0x1c, 0x02, 0x48, 0xcd, 0xf7, + 0x97, 0xf9, 0x80, 0xbd, 0xa8, 0x79, 0x01, 0x00, + 0xc4, 0x60, 0x01, 0x00, 0x80, 0xb5, 0x00, 0xf0, + 0x29, 0xf8, 0x80, 0xbd, 0x80, 0xb5, 0x86, 0xb0, + 0x0c, 0x48, 0xc3, 0xf7, 0x6d, 0xfd, 0xd6, 0xf7, + 0xd3, 0xfb, 0x0b, 0x48, 0x0d, 0x49, 0x00, 0x90, + 0x0a, 0x48, 0x04, 0x91, 0x01, 0x90, 0x0a, 0x48, + 0x69, 0x46, 0x02, 0x90, 0x3c, 0x00, 0xa4, 0x20, + 0x04, 0x00, 0x00, 0x20, 0x03, 0x90, 0x05, 0x90, + 0x01, 0x20, 0xc3, 0xf7, 0x00, 0xfd, 0x07, 0x49, + 0x03, 0x20, 0xd0, 0xf7, 0x6a, 0xf9, 0x06, 0xb0, + 0x80, 0xbd, 0x20, 0xf7, 0x01, 0x00, 0x11, 0x87, + 0x01, 0x00, 0x95, 0x87, 0x01, 0x00, 0x55, 0x87, + 0x01, 0x00, 0x98, 0xd9, 0x01, 0x00, 0x6d, 0x87, + 0x01, 0x00, 0x80, 0xb5, 0x01, 0x20, 0xd6, 0xf7, + 0x90, 0xfc, 0x03, 0x49, 0x00, 0x20, 0x3c, 0x00, + 0xe0, 0x20, 0x04, 0x00, 0x08, 0x60, 0x48, 0x60, + 0x02, 0x48, 0x14, 0x39, 0x48, 0x60, 0x80, 0xbd, + 0x90, 0xd9, 0x01, 0x00, 0x3d, 0x82, 0x01, 0x00, + 0x70, 0xb5, 0x00, 0x26, 0x09, 0x4c, 0x09, 0x4d, + 0x26, 0x60, 0x66, 0x60, 0x44, 0x21, 0x50, 0x35, + 0x28, 0x1c, 0xa6, 0x61, 0xbe, 0xf7, 0xc8, 0xf9, + 0x14, 0x20, 0xe0, 0x60, 0xe8, 0x63, 0x28, 0x20, + 0xe8, 0x61, 0xa0, 0x60, 0x28, 0x64, 0x2e, 0x70, + 0x3c, 0x00, 0x1c, 0x21, 0x04, 0x00, 0x70, 0xbd, + 0x00, 0x00, 0xa4, 0x6e, 0x01, 0x00, 0x80, 0xb5, + 0x02, 0x21, 0x18, 0x20, 0x04, 0x4a, 0xd1, 0xf7, + 0x0c, 0xfb, 0x03, 0x49, 0x08, 0x20, 0xd0, 0xf7, + 0x2a, 0xf9, 0x80, 0xbd, 0x00, 0x00, 0x15, 0x9c, + 0x00, 0x00, 0x69, 0x9c, 0x00, 0x00, 0xfe, 0xb5, + 0x26, 0x4d, 0x28, 0x78, 0xc0, 0x07, 0x0c, 0xd4, + 0x25, 0x49, 0x00, 0x20, 0x08, 0x70, 0x28, 0x70, + 0x24, 0x48, 0x3c, 0x00, 0x58, 0x21, 0x04, 0x00, + 0x81, 0x78, 0x49, 0x08, 0x49, 0x00, 0x81, 0x70, + 0x81, 0x78, 0x01, 0x22, 0x11, 0x43, 0x81, 0x70, + 0x00, 0x24, 0xff, 0x26, 0x1f, 0x4f, 0x01, 0x36, + 0x21, 0x1c, 0x01, 0xa8, 0xc6, 0xf7, 0x32, 0xf8, + 0x00, 0xab, 0x18, 0x79, 0x01, 0x28, 0x1f, 0xd0, + 0x02, 0x28, 0x19, 0xd0, 0x03, 0x28, 0x1e, 0xd1, + 0xb8, 0x68, 0x00, 0x21, 0xb0, 0x43, 0xb8, 0x60, + 0x78, 0x68, 0x30, 0x43, 0x3c, 0x00, 0x94, 0x21, + 0x04, 0x00, 0x78, 0x60, 0x3a, 0x68, 0x32, 0x40, + 0xa0, 0x20, 0x05, 0xe0, 0x3b, 0x68, 0x33, 0x40, + 0x93, 0x42, 0x01, 0xd0, 0x01, 0x21, 0x01, 0xe0, + 0x01, 0x38, 0xf7, 0xd2, 0x78, 0x68, 0xb0, 0x43, + 0x78, 0x60, 0x00, 0x29, 0x03, 0xd0, 0x01, 0xa8, + 0x00, 0xf0, 0x27, 0xff, 0x02, 0xe0, 0x01, 0xa8, + 0x00, 0xf0, 0x45, 0xff, 0x01, 0x34, 0x24, 0x06, + 0x24, 0x16, 0x06, 0x2c, 0xcf, 0xdb, 0x3c, 0x00, + 0xd0, 0x21, 0x04, 0x00, 0x04, 0x49, 0x02, 0x22, + 0x08, 0x78, 0x10, 0x43, 0x08, 0x70, 0x28, 0x70, + 0xfe, 0xbd, 0x00, 0x00, 0x04, 0x00, 0x07, 0x00, + 0xe0, 0x60, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x10, 0x00, 0x07, 0x00, 0xb0, 0xb5, 0x00, 0x20, + 0x15, 0x23, 0x14, 0x49, 0x01, 0x25, 0x42, 0x00, + 0x8d, 0x54, 0x52, 0x18, 0x01, 0x30, 0x0e, 0x28, + 0x53, 0x70, 0xf8, 0xd3, 0x0f, 0x48, 0x1c, 0x22, + 0x3c, 0x00, 0x0c, 0x22, 0x04, 0x00, 0x1c, 0x38, + 0xbe, 0xf7, 0x73, 0xf9, 0x0d, 0x48, 0x0e, 0x21, + 0x2a, 0x38, 0xbe, 0xf7, 0x1c, 0xf9, 0x0b, 0x49, + 0x00, 0x20, 0x08, 0x60, 0x0b, 0x4c, 0x2a, 0x21, + 0x20, 0x1c, 0xbe, 0xf7, 0x14, 0xf9, 0x25, 0x70, + 0x0e, 0x20, 0x60, 0x70, 0x17, 0x20, 0xa0, 0x70, + 0x07, 0x48, 0x53, 0x21, 0x01, 0x70, 0x45, 0x21, + 0x41, 0x70, 0x20, 0x21, 0x81, 0x70, 0xb0, 0xbd, + 0x00, 0x00, 0x3c, 0x00, 0x48, 0x22, 0x04, 0x00, + 0xe6, 0x78, 0x01, 0x00, 0xe4, 0x62, 0x01, 0x00, + 0xeb, 0x62, 0x01, 0x00, 0xe8, 0x62, 0x01, 0x00, + 0x0c, 0x49, 0x0d, 0x48, 0x00, 0x22, 0x41, 0x60, + 0x0c, 0x49, 0x81, 0x60, 0x0c, 0x49, 0xc1, 0x60, + 0x0c, 0x49, 0x01, 0x61, 0x0c, 0x49, 0x41, 0x61, + 0x0c, 0x49, 0x82, 0x61, 0xc1, 0x61, 0x0c, 0x49, + 0x01, 0x62, 0x0c, 0x49, 0x41, 0x62, 0x0c, 0x49, + 0x81, 0x62, 0x0c, 0x49, 0x3c, 0x00, 0x84, 0x22, + 0x04, 0x00, 0xc1, 0x62, 0xc2, 0x63, 0x70, 0x47, + 0x00, 0x00, 0xc9, 0x75, 0x00, 0x00, 0x28, 0x7a, + 0x01, 0x00, 0xc1, 0x75, 0x00, 0x00, 0x81, 0x75, + 0x00, 0x00, 0x99, 0x75, 0x00, 0x00, 0xcd, 0x75, + 0x00, 0x00, 0x89, 0x75, 0x00, 0x00, 0x91, 0x75, + 0x00, 0x00, 0xb5, 0x75, 0x00, 0x00, 0x8d, 0x75, + 0x00, 0x00, 0xc5, 0x75, 0x00, 0x00, 0xb0, 0xb5, + 0x0e, 0x48, 0x0e, 0x49, 0x08, 0x60, 0x3c, 0x00, + 0xc0, 0x22, 0x04, 0x00, 0x08, 0x31, 0xc0, 0xf7, + 0x43, 0xfe, 0x0c, 0x49, 0x00, 0x25, 0x48, 0x60, + 0x0b, 0x48, 0x0a, 0x4c, 0x05, 0x60, 0x0b, 0x48, + 0x80, 0x3c, 0x05, 0x60, 0x10, 0x20, 0x20, 0x71, + 0xe0, 0x70, 0xa0, 0x71, 0x60, 0x71, 0x27, 0x20, + 0xc0, 0x43, 0xc3, 0xf7, 0xf7, 0xfb, 0x28, 0x20, + 0xc3, 0xf7, 0xfc, 0xfb, 0x25, 0x72, 0xb0, 0xbd, + 0xff, 0x3f, 0x00, 0x00, 0x2c, 0x7d, 0x01, 0x00, + 0x3c, 0x00, 0xfc, 0x22, 0x04, 0x00, 0x1c, 0x67, + 0x01, 0x00, 0x20, 0x67, 0x01, 0x00, 0x80, 0xb5, + 0x2c, 0x21, 0x01, 0x48, 0xbe, 0xf7, 0xc7, 0xf8, + 0x80, 0xbd, 0x3c, 0x7e, 0x01, 0x00, 0x80, 0xb5, + 0x38, 0x21, 0x01, 0x48, 0xbe, 0xf7, 0xbf, 0xf8, + 0x80, 0xbd, 0x68, 0x7e, 0x01, 0x00, 0x80, 0xb5, + 0x02, 0x21, 0x0e, 0x20, 0x02, 0x4a, 0xd1, 0xf7, + 0x0c, 0xfa, 0x80, 0xbd, 0x00, 0x00, 0x21, 0xe0, + 0x00, 0x00, 0x3c, 0x00, 0x38, 0x23, 0x04, 0x00, + 0x70, 0x47, 0x00, 0x00, 0xf0, 0xb5, 0x85, 0xb0, + 0x00, 0x27, 0x00, 0xab, 0x2f, 0x4e, 0x1f, 0x81, + 0x00, 0x25, 0x00, 0x24, 0x28, 0x1c, 0xd6, 0xf7, + 0xa1, 0xfb, 0x02, 0x2d, 0x03, 0xd1, 0xd6, 0xf7, + 0xf5, 0xfa, 0x00, 0x28, 0x0c, 0xd0, 0x01, 0x24, + 0x01, 0x2d, 0x03, 0xd1, 0x07, 0x20, 0x00, 0xab, + 0x18, 0x71, 0x01, 0xe0, 0x00, 0xab, 0x1f, 0x71, + 0x00, 0xab, 0x18, 0x79, 0x3c, 0x00, 0x74, 0x23, + 0x04, 0x00, 0xd6, 0xf7, 0x08, 0xfc, 0x00, 0x2c, + 0x39, 0xd0, 0x08, 0x21, 0x03, 0xa8, 0xd6, 0xf7, + 0xf2, 0xfa, 0x00, 0xab, 0x18, 0x7b, 0xfe, 0x28, + 0x31, 0xd1, 0x58, 0x7b, 0x01, 0x28, 0x2a, 0xd1, + 0x02, 0x21, 0x02, 0xa8, 0xd6, 0xf7, 0xe7, 0xfa, + 0x00, 0xab, 0x18, 0x89, 0x00, 0x28, 0x26, 0xd0, + 0x18, 0x89, 0x18, 0x49, 0x88, 0x42, 0x22, 0xd0, + 0x19, 0x89, 0x00, 0x20, 0xbf, 0xf7, 0x3c, 0x00, + 0xb0, 0x23, 0x04, 0x00, 0x13, 0xf9, 0x04, 0x1c, + 0x00, 0x69, 0x00, 0xab, 0x19, 0x89, 0xd6, 0xf7, + 0xd5, 0xfa, 0x20, 0x68, 0x00, 0xab, 0x1a, 0x89, + 0x01, 0x1c, 0x08, 0x31, 0x08, 0x3a, 0xcb, 0xf7, + 0xa1, 0xf9, 0x00, 0x28, 0x06, 0xd0, 0x02, 0x28, + 0x04, 0xd0, 0x02, 0x21, 0x94, 0x20, 0x37, 0x60, + 0xbe, 0xf7, 0x62, 0xff, 0x20, 0x1c, 0xbf, 0xf7, + 0xc7, 0xf8, 0xd4, 0xe7, 0x01, 0x21, 0x94, 0x20, + 0x3c, 0x00, 0xec, 0x23, 0x04, 0x00, 0xbe, 0xf7, + 0x5a, 0xff, 0xd5, 0xf7, 0x26, 0xff, 0x01, 0x35, + 0x2d, 0x06, 0x2d, 0x0e, 0x04, 0x2d, 0xa5, 0xd3, + 0x05, 0xb0, 0xf0, 0xbd, 0x00, 0x00, 0x58, 0x57, + 0x01, 0x00, 0xff, 0xff, 0x00, 0x00, 0x0a, 0x48, + 0x00, 0x21, 0x02, 0x1c, 0x18, 0x32, 0x80, 0xb5, + 0x09, 0x4b, 0x02, 0xe0, 0x01, 0x60, 0x83, 0x80, + 0x08, 0x30, 0x82, 0x42, 0xfa, 0xd1, 0x04, 0x48, + 0x6c, 0x21, 0x3c, 0x00, 0x28, 0x24, 0x04, 0x00, + 0x6c, 0x38, 0xbe, 0xf7, 0x37, 0xf8, 0x04, 0x49, + 0x02, 0x20, 0xc7, 0xf7, 0xd1, 0xff, 0x80, 0xbd, + 0x7c, 0x79, 0x01, 0x00, 0xfc, 0x05, 0x00, 0x00, + 0x9d, 0x75, 0x00, 0x00, 0x80, 0xb5, 0x02, 0x21, + 0x26, 0x20, 0x0d, 0x4a, 0xd1, 0xf7, 0x7c, 0xf9, + 0x0c, 0x48, 0xc8, 0xf7, 0x73, 0xff, 0x0c, 0x48, + 0xc8, 0xf7, 0x76, 0xff, 0x0b, 0x49, 0x10, 0x20, + 0xcf, 0xf7, 0x94, 0xff, 0x3c, 0x00, 0x64, 0x24, + 0x04, 0x00, 0x0a, 0x49, 0x0c, 0x20, 0xcf, 0xf7, + 0x90, 0xff, 0x09, 0x49, 0x00, 0x20, 0xc7, 0xf7, + 0xb2, 0xff, 0xcc, 0xf7, 0x6e, 0xff, 0x07, 0x49, + 0x08, 0x60, 0x80, 0xbd, 0x00, 0x00, 0x9d, 0xa6, + 0x00, 0x00, 0xa9, 0xa4, 0x00, 0x00, 0x81, 0xa4, + 0x00, 0x00, 0x31, 0xa7, 0x00, 0x00, 0xb9, 0x6d, + 0x00, 0x00, 0xbd, 0xa6, 0x00, 0x00, 0x0c, 0x79, + 0x01, 0x00, 0x02, 0x49, 0x08, 0x78, 0x3c, 0x00, + 0xa0, 0x24, 0x04, 0x00, 0x40, 0x08, 0x40, 0x00, + 0x08, 0x70, 0x70, 0x47, 0x58, 0x00, 0x07, 0x00, + 0x00, 0x21, 0x08, 0x48, 0x80, 0xb5, 0x41, 0x61, + 0x81, 0x61, 0x01, 0x70, 0x41, 0x70, 0x41, 0x60, + 0x81, 0x60, 0x14, 0x22, 0xc2, 0x60, 0x01, 0x61, + 0x42, 0x62, 0xc1, 0x61, 0xff, 0xf7, 0x04, 0xf8, + 0x80, 0xbd, 0x00, 0x00, 0x1c, 0x75, 0x01, 0x00, + 0x80, 0xb5, 0x02, 0x21, 0x1d, 0x20, 0x04, 0x4a, + 0x3c, 0x00, 0xdc, 0x24, 0x04, 0x00, 0xd1, 0xf7, + 0x34, 0xf9, 0x03, 0x49, 0x08, 0x20, 0xcf, 0xf7, + 0x52, 0xff, 0x80, 0xbd, 0x00, 0x00, 0x11, 0xe3, + 0x00, 0x00, 0x09, 0xe4, 0x00, 0x00, 0x80, 0xb5, + 0x01, 0x21, 0x25, 0x20, 0x0a, 0x4a, 0xd1, 0xf7, + 0x24, 0xf9, 0xcc, 0xf7, 0x28, 0xff, 0x08, 0x49, + 0x08, 0x62, 0x08, 0x49, 0x01, 0x20, 0xcf, 0xf7, + 0x3e, 0xff, 0x07, 0x49, 0x02, 0x20, 0xcf, 0xf7, + 0x3a, 0xff, 0x3c, 0x00, 0x18, 0x25, 0x04, 0x00, + 0xfe, 0xf7, 0xe6, 0xff, 0x05, 0x48, 0xc1, 0xf7, + 0xe1, 0xf9, 0x80, 0xbd, 0x29, 0xa9, 0x00, 0x00, + 0x1c, 0x75, 0x01, 0x00, 0xa1, 0xaa, 0x00, 0x00, + 0x2d, 0x19, 0x00, 0x00, 0x45, 0xa8, 0x00, 0x00, + 0x10, 0xb5, 0x06, 0x4c, 0x0c, 0x22, 0x22, 0x70, + 0xa0, 0x18, 0x05, 0x49, 0xbd, 0xf7, 0xd8, 0xff, + 0x00, 0x20, 0xc8, 0xf7, 0x85, 0xfb, 0x01, 0x20, + 0xa0, 0x60, 0x10, 0xbd, 0x3c, 0x00, 0x54, 0x25, + 0x04, 0x00, 0xa4, 0x69, 0x01, 0x00, 0x90, 0x57, + 0x01, 0x00, 0xb0, 0xb5, 0x1f, 0x4c, 0x00, 0x25, + 0x65, 0x80, 0x01, 0x20, 0x20, 0x70, 0x0a, 0x20, + 0xa0, 0x80, 0x90, 0x20, 0xe0, 0x80, 0x30, 0x20, + 0x20, 0x81, 0x90, 0x20, 0x60, 0x81, 0x30, 0x20, + 0xa0, 0x81, 0x17, 0x48, 0x04, 0x22, 0x07, 0x21, + 0x12, 0x30, 0xbe, 0xf7, 0x4c, 0xf8, 0x14, 0x48, + 0x04, 0x22, 0x05, 0x21, 0x16, 0x30, 0x3c, 0x00, + 0x90, 0x25, 0x04, 0x00, 0xbe, 0xf7, 0x46, 0xf8, + 0x12, 0x48, 0x11, 0x4a, 0xe0, 0x81, 0x20, 0x82, + 0x70, 0x32, 0x15, 0x70, 0x55, 0x70, 0x00, 0x20, + 0x3c, 0x23, 0x41, 0x01, 0x43, 0x43, 0x89, 0x18, + 0xf4, 0x31, 0x9b, 0x18, 0x01, 0x30, 0x04, 0x28, + 0x59, 0x60, 0xf5, 0xdb, 0x08, 0x48, 0x06, 0x22, + 0x1a, 0x30, 0x09, 0x49, 0xbd, 0xf7, 0x9a, 0xff, + 0x07, 0x48, 0x05, 0x4c, 0x0c, 0x30, 0x0f, 0xc8, + 0x3c, 0x00, 0xcc, 0x25, 0x04, 0x00, 0x20, 0x34, + 0x0f, 0xc4, 0x20, 0x21, 0x20, 0x1c, 0xbd, 0xf7, + 0x62, 0xff, 0xb0, 0xbd, 0x00, 0x00, 0xf8, 0x60, + 0x01, 0x00, 0x2c, 0x09, 0x00, 0x00, 0x58, 0x40, + 0x01, 0x00, 0x70, 0x47, 0x00, 0x00, 0x07, 0x48, + 0x10, 0xb5, 0x00, 0x68, 0x00, 0x28, 0x08, 0xd0, + 0x06, 0x48, 0xbe, 0xf7, 0x9c, 0xfe, 0x04, 0x1c, + 0xff, 0xf7, 0x9d, 0xfe, 0x20, 0x1c, 0xbe, 0xf7, + 0x96, 0xfe, 0x3c, 0x00, 0x08, 0x26, 0x04, 0x00, + 0x10, 0xbd, 0x00, 0x00, 0x58, 0x57, 0x01, 0x00, + 0xb5, 0xad, 0x00, 0x00, 0x04, 0x49, 0x80, 0xb5, + 0x00, 0x20, 0x88, 0x70, 0x02, 0x21, 0x20, 0x20, + 0x02, 0x4a, 0xd1, 0xf7, 0x91, 0xf8, 0x80, 0xbd, + 0xb4, 0x79, 0x01, 0x00, 0x25, 0xb5, 0x00, 0x00, + 0x80, 0xb5, 0xcc, 0xf7, 0x8f, 0xfe, 0x01, 0x49, + 0x48, 0x61, 0x80, 0xbd, 0xb4, 0x79, 0x01, 0x00, + 0x80, 0xb5, 0x18, 0x21, 0x3c, 0x00, 0x44, 0x26, + 0x04, 0x00, 0x14, 0x48, 0xbd, 0xf7, 0x29, 0xff, + 0x14, 0x48, 0x01, 0x21, 0x01, 0x70, 0x00, 0x21, + 0xc1, 0x60, 0x41, 0x70, 0x01, 0x61, 0x00, 0xf0, + 0x02, 0xf9, 0x00, 0xf0, 0xaa, 0xf8, 0x00, 0xf0, + 0x1e, 0xf8, 0x00, 0xf0, 0xba, 0xf9, 0x00, 0xf0, + 0xcc, 0xf9, 0x00, 0xf0, 0x20, 0xf9, 0x00, 0xf0, + 0x64, 0xf9, 0x00, 0xf0, 0xce, 0xf9, 0x00, 0xf0, + 0xfc, 0xf8, 0x00, 0xf0, 0x82, 0xf9, 0x3c, 0x00, + 0x80, 0x26, 0x04, 0x00, 0x00, 0xf0, 0x28, 0xf8, + 0x00, 0xf0, 0x6e, 0xf8, 0x00, 0xf0, 0x4a, 0xf8, + 0xff, 0xf7, 0xc2, 0xff, 0x00, 0xf0, 0x72, 0xf9, + 0x80, 0xbd, 0x00, 0x00, 0x40, 0x7c, 0x01, 0x00, + 0x18, 0x63, 0x01, 0x00, 0xb0, 0xb5, 0x08, 0x4c, + 0x00, 0x25, 0x08, 0x48, 0x25, 0x77, 0x20, 0x60, + 0xce, 0xf7, 0xf0, 0xfd, 0x00, 0x20, 0xe5, 0x62, + 0xd0, 0xf7, 0xd0, 0xfa, 0x21, 0x1f, 0x08, 0x80, + 0x3c, 0x00, 0xbc, 0x26, 0x04, 0x00, 0xd0, 0xf7, + 0x6c, 0xfb, 0xb0, 0xbd, 0x00, 0x00, 0xd4, 0x79, + 0x01, 0x00, 0x95, 0x75, 0x00, 0x00, 0x80, 0xb5, + 0xcc, 0xf7, 0xc1, 0xfc, 0x80, 0xbd, 0x05, 0x49, + 0x80, 0xb5, 0x00, 0x20, 0x08, 0x70, 0x48, 0x70, + 0x03, 0x48, 0x04, 0x49, 0x03, 0x4a, 0x08, 0x30, + 0xcc, 0xf7, 0x27, 0xfe, 0x80, 0xbd, 0x2c, 0x63, + 0x01, 0x00, 0xed, 0xbc, 0x00, 0x00, 0x4d, 0xbd, + 0x00, 0x00, 0x3c, 0x00, 0xf8, 0x26, 0x04, 0x00, + 0x80, 0xb5, 0xcc, 0xf7, 0x2b, 0xfe, 0x05, 0x49, + 0x48, 0x60, 0x01, 0x1c, 0x04, 0x48, 0xcc, 0xf7, + 0x4b, 0xfe, 0x04, 0x49, 0x03, 0x20, 0xcf, 0xf7, + 0x3d, 0xfe, 0x80, 0xbd, 0x2c, 0x63, 0x01, 0x00, + 0xc4, 0x60, 0x01, 0x00, 0xc1, 0xbc, 0x00, 0x00, + 0x04, 0x48, 0x00, 0x21, 0x00, 0x22, 0x00, 0x23, + 0x0e, 0xc0, 0x08, 0xc0, 0x02, 0x49, 0x10, 0x38, + 0x01, 0x60, 0x70, 0x47, 0x3c, 0x00, 0x34, 0x27, + 0x04, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x1c, 0xe6, + 0x01, 0x00, 0x80, 0xb5, 0xcc, 0xf7, 0x09, 0xfe, + 0x05, 0x49, 0x05, 0x4a, 0x48, 0x60, 0x02, 0x21, + 0x24, 0x20, 0xd0, 0xf7, 0xfc, 0xff, 0x03, 0x48, + 0xc9, 0xf7, 0x6b, 0xfd, 0x80, 0xbd, 0x04, 0x7a, + 0x01, 0x00, 0x69, 0xbe, 0x00, 0x00, 0x71, 0xeb, + 0x00, 0x00, 0x10, 0xb5, 0x04, 0x4c, 0x14, 0x21, + 0x20, 0x1c, 0xbd, 0xf7, 0x96, 0xfe, 0x3c, 0x00, + 0x70, 0x27, 0x04, 0x00, 0x02, 0x48, 0x20, 0x60, + 0x10, 0xbd, 0x00, 0x00, 0x14, 0x7a, 0x01, 0x00, + 0xec, 0xe5, 0x01, 0x00, 0x80, 0xb5, 0xcc, 0xf7, + 0xe7, 0xfd, 0x07, 0x49, 0x07, 0x4a, 0x48, 0x60, + 0x02, 0x21, 0x1f, 0x20, 0xd0, 0xf7, 0xda, 0xff, + 0x05, 0x49, 0x01, 0x20, 0x08, 0x60, 0x05, 0x49, + 0x0c, 0x20, 0xcf, 0xf7, 0xf5, 0xfd, 0x80, 0xbd, + 0x14, 0x7a, 0x01, 0x00, 0xd5, 0xbf, 0x00, 0x00, + 0x3c, 0x00, 0xac, 0x27, 0x04, 0x00, 0x80, 0x5a, + 0x01, 0x00, 0x85, 0xff, 0x00, 0x00, 0x80, 0xb5, + 0xff, 0xf7, 0x4f, 0xfd, 0x01, 0x21, 0x21, 0x20, + 0x02, 0x4a, 0xd0, 0xf7, 0xc2, 0xff, 0x80, 0xbd, + 0x00, 0x00, 0xc9, 0xc1, 0x00, 0x00, 0x80, 0xb5, + 0xcc, 0xf7, 0xc1, 0xfd, 0x02, 0x49, 0x08, 0x63, + 0xc9, 0xf7, 0x57, 0xfd, 0x80, 0xbd, 0x28, 0x7a, + 0x01, 0x00, 0x10, 0xb5, 0xcc, 0xf7, 0xb7, 0xfd, + 0x16, 0x4c, 0x3c, 0x00, 0xe8, 0x27, 0x04, 0x00, + 0x20, 0x61, 0xcc, 0xf7, 0xb3, 0xfd, 0x60, 0x61, + 0x14, 0x48, 0x15, 0x49, 0x08, 0x60, 0x16, 0x49, + 0x14, 0x48, 0x08, 0x60, 0xcc, 0xf7, 0xaa, 0xfd, + 0x14, 0x49, 0x08, 0x60, 0x00, 0xf0, 0x34, 0xf8, + 0xff, 0xf7, 0xe0, 0xff, 0xff, 0xf7, 0x5e, 0xff, + 0x00, 0xf0, 0x04, 0xf9, 0x00, 0xf0, 0x8e, 0xf8, + 0xff, 0xf7, 0x6e, 0xff, 0xff, 0xf7, 0xb0, 0xff, + 0xff, 0xf7, 0x8c, 0xff, 0x3c, 0x00, 0x24, 0x28, + 0x04, 0x00, 0xff, 0xf7, 0x04, 0xff, 0x00, 0xf0, + 0xaa, 0xf8, 0x0a, 0x48, 0xbf, 0xf7, 0xbd, 0xff, + 0xc9, 0xf7, 0xbb, 0xfd, 0x09, 0x49, 0x00, 0x20, + 0xcf, 0xf7, 0xa7, 0xfd, 0x10, 0xbd, 0x40, 0x7c, + 0x01, 0x00, 0x7d, 0xb7, 0x00, 0x00, 0x18, 0x7e, + 0x01, 0x00, 0xbd, 0xb8, 0x00, 0x00, 0x1c, 0x7e, + 0x01, 0x00, 0x20, 0x7e, 0x01, 0x00, 0xb9, 0xba, + 0x00, 0x00, 0x81, 0x24, 0x01, 0x00, 0x3c, 0x00, + 0x60, 0x28, 0x04, 0x00, 0x80, 0xb5, 0x38, 0x21, + 0x01, 0x48, 0xbd, 0xf7, 0x19, 0xfe, 0x80, 0xbd, + 0x90, 0x5c, 0x01, 0x00, 0x70, 0x47, 0x00, 0x00, + 0xb0, 0xb5, 0x0c, 0x4c, 0x0b, 0x4d, 0x00, 0x20, + 0x0c, 0x34, 0x60, 0x60, 0x25, 0x60, 0xe0, 0x60, + 0x0a, 0x20, 0x20, 0x81, 0x28, 0x1c, 0xc8, 0xf7, + 0x3f, 0xfd, 0x28, 0x1c, 0xc8, 0xf7, 0x3a, 0xfd, + 0x08, 0x3d, 0x68, 0x60, 0x04, 0x48, 0xc9, 0xf7, + 0x3c, 0x00, 0x9c, 0x28, 0x04, 0x00, 0x1b, 0xfd, + 0x20, 0x1c, 0xc0, 0xf7, 0x6e, 0xfa, 0x28, 0x80, + 0xb0, 0xbd, 0xb8, 0x7a, 0x01, 0x00, 0xd5, 0x33, + 0x01, 0x00, 0xf8, 0xb5, 0x1f, 0x4e, 0x1d, 0x4c, + 0x00, 0x20, 0x0c, 0x21, 0x41, 0x43, 0x82, 0x00, + 0x01, 0x30, 0x09, 0x19, 0x08, 0x31, 0x00, 0x06, + 0x00, 0x0e, 0x04, 0x28, 0xb1, 0x50, 0xf4, 0xd3, + 0x18, 0x48, 0x0c, 0x38, 0x30, 0x61, 0xce, 0xf7, + 0xf4, 0xf9, 0x3c, 0x00, 0xd8, 0x28, 0x04, 0x00, + 0x14, 0x4c, 0xa0, 0x78, 0x00, 0x09, 0x00, 0x01, + 0xa0, 0x70, 0x00, 0x27, 0xe7, 0x70, 0x67, 0x70, + 0x00, 0x24, 0xa5, 0x00, 0x70, 0x59, 0x07, 0x70, + 0x20, 0x1c, 0xbe, 0xf7, 0x53, 0xf9, 0x71, 0x59, + 0x08, 0x71, 0x00, 0x21, 0x20, 0x1c, 0xce, 0xf7, + 0x7d, 0xf9, 0x01, 0x34, 0x24, 0x06, 0x24, 0x0e, + 0x04, 0x2c, 0xee, 0xd3, 0x07, 0x4c, 0x20, 0x78, + 0x00, 0x09, 0x00, 0x01, 0x3c, 0x00, 0x14, 0x29, + 0x04, 0x00, 0x0a, 0x30, 0x20, 0x70, 0x20, 0x78, + 0xf0, 0x21, 0x88, 0x43, 0x30, 0x30, 0x20, 0x70, + 0xa0, 0x78, 0x0f, 0x21, 0x08, 0x43, 0xa0, 0x70, + 0xf8, 0xbd, 0x00, 0x50, 0x07, 0x00, 0x10, 0x7b, + 0x01, 0x00, 0x80, 0xb5, 0xcc, 0xf7, 0x9f, 0xfb, + 0x80, 0xbd, 0xb0, 0xb5, 0x0c, 0x4c, 0x0b, 0x4d, + 0x00, 0x20, 0x0c, 0x34, 0x60, 0x60, 0x25, 0x60, + 0xe0, 0x60, 0x0a, 0x20, 0x20, 0x81, 0x3c, 0x00, + 0x50, 0x29, 0x04, 0x00, 0x28, 0x1c, 0xc8, 0xf7, + 0xe1, 0xfc, 0x28, 0x1c, 0xc8, 0xf7, 0xd4, 0xfc, + 0x08, 0x3d, 0x68, 0x60, 0x20, 0x1c, 0xc0, 0xf7, + 0x0d, 0xfa, 0x28, 0x80, 0x02, 0x48, 0xc9, 0xf7, + 0x9b, 0xfc, 0xb0, 0xbd, 0x2c, 0x7b, 0x01, 0x00, + 0x49, 0x00, 0x01, 0x00, 0x80, 0xb5, 0xca, 0xf7, + 0x2f, 0xf8, 0x80, 0xbd, 0x70, 0x47, 0x00, 0x00, + 0xb0, 0xb5, 0x12, 0x4d, 0x3c, 0x21, 0x28, 0x1c, + 0x3c, 0x00, 0x8c, 0x29, 0x04, 0x00, 0xbd, 0xf7, + 0x86, 0xfd, 0x0f, 0x48, 0x28, 0x21, 0x3c, 0x30, + 0xbd, 0xf7, 0x81, 0xfd, 0x0d, 0x48, 0x00, 0x21, + 0x14, 0x38, 0x01, 0x61, 0xc1, 0x60, 0xff, 0x21, + 0x01, 0x70, 0x41, 0x70, 0x0a, 0x49, 0x0a, 0x4a, + 0x41, 0x60, 0x01, 0x21, 0x0c, 0x20, 0xd0, 0xf7, + 0xc8, 0xfe, 0x2c, 0x1c, 0x30, 0x34, 0x0c, 0x3d, + 0x00, 0x20, 0xd0, 0xf7, 0x4a, 0xf9, 0x20, 0x80, + 0x0c, 0x3c, 0x3c, 0x00, 0xc8, 0x29, 0x04, 0x00, + 0xac, 0x42, 0xf8, 0xd1, 0xb0, 0xbd, 0x00, 0x00, + 0x60, 0x7b, 0x01, 0x00, 0x20, 0xa1, 0x07, 0x00, + 0x35, 0xcd, 0x00, 0x00, 0x08, 0x49, 0x00, 0x20, + 0x0c, 0x22, 0x42, 0x43, 0x52, 0x18, 0x10, 0x71, + 0x01, 0x30, 0x05, 0x28, 0xf8, 0xdb, 0x04, 0x48, + 0x00, 0x21, 0x08, 0x38, 0x01, 0x70, 0x41, 0x60, + 0xff, 0x21, 0x41, 0x70, 0x70, 0x47, 0x00, 0x00, + 0x74, 0x7a, 0x01, 0x00, 0x3c, 0x00, 0x04, 0x2a, + 0x04, 0x00, 0x80, 0xb5, 0x78, 0x21, 0x01, 0x48, + 0xbd, 0xf7, 0x47, 0xfd, 0x80, 0xbd, 0xc4, 0x7b, + 0x01, 0x00, 0x80, 0xb5, 0xca, 0xf7, 0x97, 0xfa, + 0x80, 0xbd, 0x70, 0x47, 0x00, 0x00, 0x10, 0xb5, + 0x0b, 0x4c, 0xff, 0x21, 0x05, 0x31, 0x20, 0x1c, + 0xbd, 0xf7, 0x37, 0xfd, 0x09, 0x48, 0xf0, 0x21, + 0x08, 0x51, 0x20, 0x1c, 0x40, 0x30, 0xc5, 0xf7, + 0x8e, 0xf9, 0x6c, 0x21, 0x06, 0x48, 0x3c, 0x00, + 0x40, 0x2a, 0x04, 0x00, 0xbd, 0xf7, 0x2c, 0xfd, + 0x04, 0x48, 0xc0, 0x21, 0x6c, 0x30, 0xbd, 0xf7, + 0x27, 0xfd, 0x10, 0xbd, 0xc4, 0x69, 0x01, 0x00, + 0xb0, 0xd9, 0x01, 0x00, 0xc8, 0x6a, 0x01, 0x00, + 0xb0, 0xb5, 0x0b, 0x4d, 0x00, 0x24, 0x1c, 0x20, + 0x60, 0x43, 0x40, 0x19, 0x6c, 0x30, 0xc3, 0xf7, + 0x0f, 0xfe, 0x01, 0x34, 0x04, 0x2c, 0xf6, 0xdb, + 0xcc, 0xf7, 0x6e, 0xfc, 0xa8, 0x63, 0xc7, 0xf7, + 0x3c, 0x00, 0x7c, 0x2a, 0x04, 0x00, 0x75, 0xf9, + 0x04, 0x48, 0xc9, 0xf7, 0x1c, 0xfc, 0x03, 0x48, + 0xcf, 0xf7, 0x03, 0xfa, 0xb0, 0xbd, 0xc4, 0x69, + 0x01, 0x00, 0xfd, 0x80, 0x00, 0x00, 0xe1, 0x22, + 0x01, 0x00, 0x10, 0xb5, 0x05, 0x4c, 0x00, 0x20, + 0x20, 0x80, 0x03, 0x48, 0x06, 0x21, 0x08, 0x30, + 0xbd, 0xf7, 0xd5, 0xfc, 0x14, 0x20, 0x60, 0x60, + 0x10, 0xbd, 0x98, 0x7c, 0x01, 0x00, 0x10, 0xb5, + 0x08, 0x4c, 0x3c, 0x00, 0xb8, 0x2a, 0x04, 0x00, + 0x00, 0x20, 0x20, 0x80, 0x60, 0x80, 0x06, 0x48, + 0x06, 0x21, 0x0c, 0x30, 0xbd, 0xf7, 0xc6, 0xfc, + 0x03, 0x48, 0x06, 0x21, 0x12, 0x30, 0xbd, 0xf7, + 0xc1, 0xfc, 0x14, 0x20, 0xa0, 0x60, 0x10, 0xbd, + 0x58, 0x7c, 0x01, 0x00, 0x70, 0x47, 0x00, 0x00, + 0x80, 0xb5, 0x02, 0x21, 0x0d, 0x20, 0x05, 0x4a, + 0xd0, 0xf7, 0x2e, 0xfe, 0x04, 0x48, 0xc8, 0xf7, + 0x1f, 0xfc, 0x04, 0x48, 0x3c, 0x00, 0xf4, 0x2a, + 0x04, 0x00, 0xca, 0xf7, 0x44, 0xfc, 0x80, 0xbd, + 0x00, 0x00, 0x31, 0xd4, 0x00, 0x00, 0x51, 0xb1, + 0x00, 0x00, 0x09, 0xb1, 0x00, 0x00, 0x08, 0x49, + 0x80, 0xb5, 0x00, 0x20, 0x08, 0x60, 0xff, 0xf7, + 0xd0, 0xff, 0xff, 0xf7, 0xc0, 0xff, 0xff, 0xf7, + 0x04, 0xfc, 0x00, 0xf0, 0x4a, 0xf8, 0xff, 0xf7, + 0x0a, 0xfc, 0x00, 0xf0, 0x3c, 0xf8, 0x80, 0xbd, + 0x00, 0x00, 0xe4, 0x65, 0x01, 0x00, 0x3c, 0x00, + 0x30, 0x2b, 0x04, 0x00, 0x80, 0xb5, 0x00, 0xf0, + 0x29, 0xf8, 0x00, 0xf0, 0x1b, 0xf8, 0x00, 0xf0, + 0x51, 0xf8, 0x00, 0xf0, 0x31, 0xf8, 0x80, 0xbd, + 0x70, 0x47, 0x00, 0x00, 0x70, 0x47, 0x00, 0x00, + 0x80, 0xb5, 0xff, 0x21, 0x89, 0x31, 0x02, 0x48, + 0xbd, 0xf7, 0xa2, 0xfc, 0x80, 0xbd, 0x00, 0x00, + 0xdc, 0x71, 0x01, 0x00, 0x80, 0xb5, 0x02, 0x49, + 0x08, 0x20, 0xcf, 0xf7, 0x11, 0xfc, 0x80, 0xbd, + 0x3c, 0x00, 0x6c, 0x2b, 0x04, 0x00, 0x59, 0xd9, + 0x00, 0x00, 0x80, 0xb5, 0x03, 0x48, 0xcf, 0xf7, + 0x4c, 0xf9, 0x02, 0x49, 0x48, 0x80, 0x80, 0xbd, + 0x00, 0x00, 0x8d, 0x1f, 0x00, 0x00, 0x98, 0x7c, + 0x01, 0x00, 0x80, 0xb5, 0x03, 0x48, 0xcf, 0xf7, + 0x40, 0xf9, 0x02, 0x49, 0x88, 0x80, 0x80, 0xbd, + 0x00, 0x00, 0xd5, 0x23, 0x00, 0x00, 0x58, 0x7c, + 0x01, 0x00, 0x70, 0x47, 0x00, 0x00, 0x80, 0xb5, + 0x02, 0x48, 0x3c, 0x00, 0xa8, 0x2b, 0x04, 0x00, + 0xca, 0xf7, 0xe4, 0xfb, 0x80, 0xbd, 0x00, 0x00, + 0x71, 0xe0, 0x00, 0x00, 0x80, 0xb5, 0xcc, 0xf7, + 0xa5, 0xfb, 0x02, 0x21, 0x0f, 0x20, 0x06, 0x4a, + 0xd0, 0xf7, 0xc2, 0xfd, 0x14, 0x21, 0x05, 0x48, + 0xbd, 0xf7, 0x68, 0xfc, 0x03, 0x48, 0x78, 0x21, + 0x14, 0x30, 0xbd, 0xf7, 0x63, 0xfc, 0x80, 0xbd, + 0x35, 0xe2, 0x00, 0x00, 0x84, 0x66, 0x01, 0x00, + 0x80, 0xb5, 0xcc, 0xf7, 0x3c, 0x00, 0xe4, 0x2b, + 0x04, 0x00, 0xb7, 0xfb, 0x05, 0x49, 0x08, 0x61, + 0x05, 0x49, 0x0e, 0x20, 0xcf, 0xf7, 0xcd, 0xfb, + 0x04, 0x49, 0x08, 0x20, 0xcf, 0xf7, 0xc9, 0xfb, + 0x80, 0xbd, 0xec, 0x65, 0x01, 0x00, 0x01, 0x02, + 0x01, 0x00, 0xc1, 0x2e, 0x00, 0x00, 0x01, 0x49, + 0x00, 0x20, 0x08, 0x70, 0x70, 0x47, 0x40, 0xd9, + 0x01, 0x00, 0x70, 0x47, 0x00, 0x00, 0x01, 0x49, + 0x00, 0x20, 0x08, 0x70, 0x70, 0x47, 0x3c, 0x00, + 0x20, 0x2c, 0x04, 0x00, 0xa0, 0x79, 0x01, 0x00, + 0x80, 0xb5, 0x07, 0x48, 0xc8, 0xf7, 0xf2, 0xff, + 0x06, 0x49, 0x48, 0x60, 0x06, 0x48, 0xc0, 0xf7, + 0x07, 0xfb, 0x06, 0x48, 0xc0, 0xf7, 0x86, 0xfb, + 0x05, 0x48, 0xc9, 0xf7, 0xa3, 0xfa, 0x80, 0xbd, + 0xa9, 0xe4, 0x00, 0x00, 0xa0, 0x79, 0x01, 0x00, + 0xb9, 0xe4, 0x00, 0x00, 0x85, 0x2e, 0x00, 0x00, + 0x81, 0xe4, 0x00, 0x00, 0x07, 0x48, 0x80, 0xb5, + 0x3c, 0x00, 0x5c, 0x2c, 0x04, 0x00, 0x00, 0x21, + 0x00, 0x22, 0x00, 0x23, 0x0e, 0xc0, 0x08, 0xc0, + 0x10, 0x38, 0xc8, 0x21, 0x01, 0x60, 0x00, 0x21, + 0x0c, 0x38, 0x02, 0x4a, 0xcc, 0xf7, 0x61, 0xfb, + 0x80, 0xbd, 0xd0, 0x60, 0x01, 0x00, 0xfd, 0xe5, + 0x00, 0x00, 0x80, 0xb5, 0xcc, 0xf7, 0x67, 0xfb, + 0x04, 0x49, 0x08, 0x60, 0x01, 0x1c, 0x02, 0x48, + 0x04, 0x30, 0xcc, 0xf7, 0x86, 0xfb, 0x80, 0xbd, + 0x00, 0x00, 0x3c, 0x00, 0x98, 0x2c, 0x04, 0x00, + 0xc0, 0x60, 0x01, 0x00, 0x09, 0x48, 0x80, 0xb5, + 0x0a, 0x21, 0x01, 0x70, 0x41, 0x70, 0x08, 0x49, + 0x08, 0x4a, 0x81, 0x60, 0x00, 0x21, 0xc1, 0x60, + 0x52, 0x79, 0x82, 0x70, 0x01, 0x61, 0x41, 0x61, + 0x28, 0x21, 0x18, 0x30, 0xbd, 0xf7, 0xee, 0xfb, + 0x80, 0xbd, 0x00, 0x00, 0x7c, 0x78, 0x01, 0x00, + 0xa0, 0x86, 0x01, 0x00, 0x0c, 0x5a, 0x01, 0x00, + 0xf8, 0xb5, 0x0f, 0x49, 0x3c, 0x00, 0xd4, 0x2c, + 0x04, 0x00, 0x0f, 0x48, 0x0d, 0x88, 0x4f, 0x88, + 0x06, 0x79, 0x00, 0x24, 0x30, 0x1b, 0x68, 0x43, + 0x68, 0x23, 0x0c, 0x49, 0x58, 0x43, 0x41, 0x18, + 0x7d, 0x20, 0xc0, 0x00, 0xbd, 0xf7, 0x0f, 0xfd, + 0x61, 0x00, 0x09, 0x4a, 0xa6, 0x42, 0x50, 0x52, + 0x00, 0xd1, 0x3d, 0x1c, 0x01, 0x34, 0x24, 0x06, + 0x24, 0x0e, 0x10, 0x2c, 0xea, 0xd3, 0x05, 0x49, + 0x01, 0x20, 0x08, 0x61, 0xf8, 0xbd, 0x3c, 0x00, + 0x10, 0x2d, 0x04, 0x00, 0xf6, 0x59, 0x01, 0x00, + 0x0c, 0x5a, 0x01, 0x00, 0x34, 0x44, 0x0f, 0x00, + 0x12, 0x5a, 0x01, 0x00, 0x7c, 0x78, 0x01, 0x00, + 0x80, 0xb5, 0x00, 0xf0, 0xe7, 0xfa, 0x02, 0x49, + 0x01, 0x20, 0x08, 0x61, 0x80, 0xbd, 0x00, 0x00, + 0x7c, 0x78, 0x01, 0x00, 0x10, 0xb5, 0x04, 0x1c, + 0x08, 0x1c, 0x0f, 0x49, 0x49, 0x79, 0x00, 0x29, + 0x01, 0xd1, 0x0e, 0x4b, 0x00, 0xe0, 0x0e, 0x4b, + 0x3c, 0x00, 0x4c, 0x2d, 0x04, 0x00, 0x00, 0x2c, + 0x07, 0xd0, 0x04, 0x21, 0x11, 0x80, 0x0a, 0x1c, + 0x01, 0x24, 0x19, 0x1c, 0xbd, 0xf7, 0xcd, 0xfb, + 0x0a, 0xe0, 0x01, 0x24, 0x01, 0x1c, 0x18, 0x1c, + 0x12, 0x88, 0xbd, 0xf7, 0xc6, 0xfb, 0x00, 0xf0, + 0xc4, 0xfa, 0x05, 0x49, 0x01, 0x20, 0x08, 0x61, + 0x20, 0x1c, 0x10, 0xbd, 0x00, 0x00, 0x0c, 0x5a, + 0x01, 0x00, 0xfe, 0x59, 0x01, 0x00, 0xfa, 0x59, + 0x01, 0x00, 0x3c, 0x00, 0x88, 0x2d, 0x04, 0x00, + 0x7c, 0x78, 0x01, 0x00, 0x0d, 0x48, 0x8c, 0xb5, + 0xc1, 0x88, 0x00, 0xab, 0x0c, 0x4a, 0x99, 0x80, + 0x01, 0x89, 0x04, 0x20, 0xd9, 0x80, 0x18, 0x80, + 0x02, 0x21, 0x13, 0x20, 0xd0, 0xf7, 0xd0, 0xfc, + 0x00, 0xf0, 0xa6, 0xfa, 0x07, 0x49, 0x01, 0x20, + 0x08, 0x61, 0xff, 0xf7, 0x8d, 0xff, 0x6a, 0x46, + 0x01, 0xa9, 0x00, 0x20, 0xff, 0xf7, 0xbc, 0xff, + 0x8c, 0xbd, 0x00, 0x00, 0x3c, 0x00, 0xc4, 0x2d, + 0x04, 0x00, 0xf4, 0x59, 0x01, 0x00, 0x95, 0xf9, + 0x00, 0x00, 0x7c, 0x78, 0x01, 0x00, 0xf8, 0xb5, + 0x13, 0x4e, 0x01, 0x25, 0xb5, 0x70, 0x05, 0x20, + 0xf0, 0x70, 0x11, 0x49, 0x10, 0x48, 0x0e, 0xc9, + 0x2c, 0x30, 0x0e, 0xc0, 0x00, 0x20, 0x70, 0x61, + 0x0f, 0x48, 0x0f, 0x49, 0x10, 0x4f, 0x00, 0x24, + 0x48, 0x60, 0xa0, 0x00, 0x39, 0x58, 0x20, 0x1c, + 0xd1, 0xf7, 0xd7, 0xf8, 0x01, 0x34, 0x3c, 0x00, + 0x00, 0x2e, 0x04, 0x00, 0x10, 0x2c, 0xf7, 0xd3, + 0x06, 0x4c, 0x0b, 0x4a, 0x20, 0x34, 0x20, 0x1c, + 0x0a, 0x49, 0xb5, 0x60, 0xcc, 0xf7, 0x92, 0xfa, + 0xcc, 0xf7, 0x9e, 0xfa, 0x30, 0x61, 0x20, 0x60, + 0xf8, 0xbd, 0x00, 0x00, 0x64, 0x73, 0x01, 0x00, + 0xb0, 0x58, 0x01, 0x00, 0x04, 0x18, 0x02, 0x00, + 0x60, 0x00, 0x07, 0x00, 0xd4, 0x44, 0x01, 0x00, + 0x45, 0xfa, 0x00, 0x00, 0x71, 0xfa, 0x00, 0x00, + 0x3c, 0x00, 0x3c, 0x2e, 0x04, 0x00, 0x0c, 0x49, + 0x30, 0xb5, 0x00, 0x23, 0xcc, 0x56, 0x0b, 0x4b, + 0x00, 0x20, 0xf0, 0x25, 0x1a, 0x5c, 0x11, 0x07, + 0x09, 0x0f, 0x09, 0x19, 0x0f, 0x29, 0x01, 0xdd, + 0x0f, 0x21, 0x02, 0xe0, 0x00, 0x29, 0x00, 0xda, + 0x00, 0x21, 0x2a, 0x40, 0x51, 0x18, 0x19, 0x54, + 0x01, 0x30, 0x0e, 0x28, 0xee, 0xdb, 0x30, 0xbd, + 0x00, 0x00, 0x64, 0x73, 0x01, 0x00, 0xc0, 0x58, + 0x01, 0x00, 0x3c, 0x00, 0x78, 0x2e, 0x04, 0x00, + 0xb0, 0xb5, 0x0d, 0x1c, 0x00, 0x28, 0x08, 0xd0, + 0x01, 0x24, 0x14, 0x80, 0x05, 0x20, 0xcc, 0xf7, + 0xb5, 0xf8, 0x80, 0x03, 0xc0, 0x0f, 0x28, 0x70, + 0x07, 0xe0, 0x28, 0x78, 0x01, 0x22, 0x41, 0x04, + 0x52, 0x04, 0x05, 0x20, 0xd0, 0xf7, 0xae, 0xfd, + 0x01, 0x24, 0x20, 0x1c, 0xb0, 0xbd, 0x00, 0x00, + 0x98, 0xb5, 0x05, 0x4c, 0x60, 0x68, 0xcc, 0xf7, + 0xf5, 0xfd, 0x00, 0x90, 0x3c, 0x00, 0xb4, 0x2e, + 0x04, 0x00, 0x00, 0xab, 0x18, 0x88, 0xe0, 0x80, + 0xce, 0xf7, 0xfb, 0xff, 0x98, 0xbd, 0xa0, 0x58, + 0x01, 0x00, 0x38, 0xb5, 0x03, 0x1c, 0x08, 0x1c, + 0x00, 0x24, 0x00, 0x2b, 0x17, 0x4d, 0x07, 0xd0, + 0x0e, 0x21, 0x11, 0x80, 0x0a, 0x1c, 0x01, 0x24, + 0x29, 0x1c, 0xbd, 0xf7, 0x0c, 0xfb, 0x22, 0xe0, + 0x11, 0x88, 0x04, 0x29, 0x17, 0xd1, 0x01, 0x1c, + 0x68, 0x46, 0x12, 0x88, 0xbd, 0xf7, 0x3c, 0x00, + 0xf0, 0x2e, 0x04, 0x00, 0x03, 0xfb, 0x00, 0x98, + 0x00, 0x28, 0x01, 0xdb, 0x32, 0x30, 0x00, 0xe0, + 0x32, 0x38, 0x00, 0x90, 0x01, 0x1c, 0x64, 0x20, + 0xbd, 0xf7, 0x98, 0xfb, 0x01, 0x06, 0x09, 0x16, + 0x00, 0x90, 0x0e, 0x22, 0x28, 0x1c, 0xbd, 0xf7, + 0x85, 0xfb, 0x06, 0xe0, 0x0e, 0x29, 0x05, 0xd1, + 0x0a, 0x1c, 0x01, 0x1c, 0x28, 0x1c, 0xbd, 0xf7, + 0xe9, 0xfa, 0x01, 0x24, 0x20, 0x1c, 0x38, 0xbd, + 0x3c, 0x00, 0x2c, 0x2f, 0x04, 0x00, 0xda, 0x59, + 0x01, 0x00, 0x38, 0xb5, 0x03, 0x1c, 0x08, 0x1c, + 0x00, 0x24, 0x00, 0x2b, 0x17, 0x4d, 0x07, 0xd0, + 0x0e, 0x21, 0x11, 0x80, 0x0a, 0x1c, 0x01, 0x24, + 0x29, 0x1c, 0xbd, 0xf7, 0xd6, 0xfa, 0x22, 0xe0, + 0x11, 0x88, 0x04, 0x29, 0x17, 0xd1, 0x01, 0x1c, + 0x68, 0x46, 0x12, 0x88, 0xbd, 0xf7, 0xcd, 0xfa, + 0x00, 0x98, 0x00, 0x28, 0x01, 0xdb, 0x32, 0x30, + 0x00, 0xe0, 0x3c, 0x00, 0x68, 0x2f, 0x04, 0x00, + 0x32, 0x38, 0x00, 0x90, 0x01, 0x1c, 0x64, 0x20, + 0xbd, 0xf7, 0x62, 0xfb, 0x01, 0x06, 0x09, 0x16, + 0x00, 0x90, 0x0e, 0x22, 0x28, 0x1c, 0xbd, 0xf7, + 0x4f, 0xfb, 0x06, 0xe0, 0x0e, 0x29, 0x05, 0xd1, + 0x0a, 0x1c, 0x01, 0x1c, 0x28, 0x1c, 0xbd, 0xf7, + 0xb3, 0xfa, 0x01, 0x24, 0x20, 0x1c, 0x38, 0xbd, + 0xcc, 0x59, 0x01, 0x00, 0x03, 0x48, 0x80, 0xb5, + 0x01, 0x78, 0x00, 0x20, 0x3c, 0x00, 0xa4, 0x2f, + 0x04, 0x00, 0xcc, 0xf7, 0xb4, 0xfb, 0x80, 0xbd, + 0x00, 0x00, 0xa6, 0x58, 0x01, 0x00, 0x70, 0x47, + 0x00, 0x00, 0x02, 0x49, 0x03, 0x20, 0x08, 0x70, + 0x00, 0x20, 0x48, 0x70, 0x70, 0x47, 0x9c, 0x73, + 0x01, 0x00, 0x80, 0xb5, 0x02, 0x21, 0x11, 0x20, + 0x02, 0x4a, 0xd0, 0xf7, 0xbc, 0xfb, 0x80, 0xbd, + 0x00, 0x00, 0xa1, 0xfe, 0x00, 0x00, 0xf0, 0xb5, + 0x0b, 0x4f, 0x1c, 0x1c, 0x00, 0x23, 0x3c, 0x00, + 0xe0, 0x2f, 0x04, 0x00, 0xfd, 0x56, 0x2b, 0x1c, + 0x06, 0x2d, 0x01, 0xd1, 0x01, 0x20, 0xf0, 0xbd, + 0x06, 0x4e, 0x05, 0x1c, 0xd8, 0x00, 0x34, 0x36, + 0x35, 0x54, 0x80, 0x19, 0x41, 0x70, 0x82, 0x70, + 0x44, 0x60, 0x58, 0x1c, 0x38, 0x70, 0x00, 0x20, + 0xf0, 0xbd, 0x00, 0x00, 0x98, 0x5a, 0x01, 0x00, + 0x10, 0xb5, 0x04, 0x1c, 0x0c, 0x48, 0x00, 0xf0, + 0x21, 0xf9, 0x60, 0x78, 0xff, 0x28, 0x04, 0xd0, + 0x3c, 0x00, 0x1c, 0x30, 0x04, 0x00, 0x01, 0x23, + 0xe0, 0x56, 0x06, 0x21, 0x00, 0xf0, 0xcd, 0xf8, + 0x08, 0x4a, 0x01, 0x21, 0x10, 0x78, 0x08, 0x43, + 0x07, 0x49, 0x08, 0x70, 0x20, 0x23, 0x18, 0x43, + 0x08, 0x70, 0x80, 0x23, 0x18, 0x43, 0x10, 0x70, + 0x08, 0x70, 0x10, 0xbd, 0x00, 0x00, 0x91, 0x9b, + 0x00, 0x00, 0xe0, 0x60, 0x01, 0x00, 0x04, 0x00, + 0x07, 0x00, 0x10, 0xb5, 0x0a, 0x49, 0x04, 0x1c, + 0x08, 0x78, 0x3c, 0x00, 0x58, 0x30, 0x04, 0x00, + 0x40, 0x08, 0x40, 0x00, 0x08, 0x70, 0x08, 0x49, + 0x08, 0x70, 0x08, 0x48, 0x00, 0xf0, 0xf8, 0xf8, + 0x60, 0x78, 0xff, 0x28, 0x04, 0xd0, 0x01, 0x23, + 0xe0, 0x56, 0x05, 0x21, 0x00, 0xf0, 0xa4, 0xf8, + 0x10, 0xbd, 0x00, 0x00, 0xe0, 0x60, 0x01, 0x00, + 0x04, 0x00, 0x07, 0x00, 0x91, 0x9b, 0x00, 0x00, + 0x03, 0x48, 0x00, 0x21, 0x00, 0x22, 0x00, 0x23, + 0x0e, 0xc0, 0x08, 0xc0, 0x3c, 0x00, 0x94, 0x30, + 0x04, 0x00, 0x70, 0x47, 0x00, 0x00, 0xe8, 0x60, + 0x01, 0x00, 0x70, 0x47, 0x00, 0x00, 0x10, 0xb5, + 0x07, 0x4c, 0x00, 0x20, 0x60, 0x60, 0x20, 0x80, + 0xe0, 0x60, 0x02, 0x21, 0x14, 0x20, 0x04, 0x4a, + 0xd0, 0xf7, 0x49, 0xfb, 0x02, 0x48, 0x10, 0x30, + 0xa0, 0x60, 0x10, 0xbd, 0x00, 0x00, 0x58, 0x75, + 0x01, 0x00, 0x05, 0x1d, 0x01, 0x00, 0x70, 0x47, + 0x00, 0x00, 0x10, 0xb5, 0x48, 0x21, 0x3c, 0x00, + 0xd0, 0x30, 0x04, 0x00, 0x0a, 0x48, 0xbd, 0xf7, + 0xe3, 0xf9, 0x09, 0x4c, 0xe0, 0x21, 0x48, 0x34, + 0x20, 0x1c, 0xbd, 0xf7, 0xdd, 0xf9, 0x00, 0x20, + 0xc1, 0x00, 0x09, 0x19, 0x0a, 0x1c, 0x08, 0x32, + 0x01, 0x30, 0x1b, 0x28, 0x4a, 0x60, 0xf7, 0xd3, + 0x01, 0x48, 0x04, 0x38, 0x04, 0x60, 0x10, 0xbd, + 0x68, 0x5b, 0x01, 0x00, 0x80, 0xb5, 0x02, 0x21, + 0x23, 0x20, 0x02, 0x4a, 0xd0, 0xf7, 0x1e, 0xfb, + 0x3c, 0x00, 0x0c, 0x31, 0x04, 0x00, 0x80, 0xbd, + 0x00, 0x00, 0x45, 0x23, 0x01, 0x00, 0x80, 0xb5, + 0xff, 0xf7, 0x6b, 0xf8, 0x80, 0xbd, 0x70, 0x47, + 0x00, 0x00, 0xf8, 0xb5, 0x01, 0x20, 0x1d, 0x49, + 0xc0, 0x07, 0x48, 0x60, 0x1d, 0x49, 0xff, 0x20, + 0x08, 0x73, 0x1c, 0x4e, 0x10, 0x20, 0x30, 0x60, + 0x05, 0x01, 0x35, 0x60, 0x1b, 0x4c, 0x80, 0x21, + 0x20, 0x1c, 0xbd, 0xf7, 0xac, 0xf9, 0x00, 0x21, + 0x19, 0x4a, 0x3c, 0x00, 0x48, 0x31, 0x04, 0x00, + 0x15, 0x4f, 0x00, 0x20, 0x0b, 0x01, 0x1b, 0x19, + 0x5a, 0x60, 0xcb, 0x00, 0xdb, 0x19, 0x18, 0x74, + 0x01, 0x31, 0x08, 0x29, 0xf6, 0xdb, 0x0f, 0x4c, + 0xfa, 0x21, 0x21, 0x80, 0x12, 0x49, 0x61, 0x80, + 0xa0, 0x60, 0x6a, 0x46, 0x11, 0x49, 0x04, 0x20, + 0xbd, 0xf7, 0x30, 0xff, 0x6a, 0x46, 0x10, 0x49, + 0x08, 0x20, 0xbd, 0xf7, 0x2b, 0xff, 0x10, 0x20, + 0x70, 0x60, 0x75, 0x60, 0x3c, 0x00, 0x84, 0x31, + 0x04, 0x00, 0x60, 0x68, 0x02, 0x21, 0x08, 0x43, + 0x60, 0x60, 0x0b, 0x49, 0x06, 0x4a, 0x08, 0x1c, + 0x10, 0x30, 0x08, 0x3a, 0x03, 0xc2, 0xf8, 0xbd, + 0x00, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x60, + 0x07, 0x00, 0x00, 0x10, 0x07, 0x00, 0xac, 0x73, + 0x01, 0x00, 0xd1, 0x75, 0x00, 0x00, 0x20, 0x4e, + 0x00, 0x00, 0x05, 0x2c, 0x01, 0x00, 0x11, 0x2c, + 0x01, 0x00, 0x00, 0xa0, 0x07, 0x00, 0x3c, 0x00, + 0xc0, 0x31, 0x04, 0x00, 0x70, 0xb5, 0x0e, 0x1c, + 0x00, 0x24, 0xc4, 0xf7, 0x5b, 0xfe, 0x00, 0x28, + 0x3b, 0xd0, 0x45, 0x68, 0xff, 0x2d, 0x38, 0xd0, + 0x0c, 0x2e, 0x28, 0xd2, 0x01, 0xa3, 0x9b, 0x5d, + 0x5b, 0x00, 0x9f, 0x44, 0x05, 0x07, 0x09, 0x0b, + 0x0d, 0x10, 0x13, 0x16, 0x18, 0x1b, 0x1e, 0x21, + 0x18, 0x24, 0x20, 0xe0, 0x30, 0x24, 0x1e, 0xe0, + 0x60, 0x24, 0x1c, 0xe0, 0xc0, 0x24, 0x1a, 0xe0, + 0x3c, 0x00, 0xfc, 0x31, 0x04, 0x00, 0xff, 0x24, + 0x81, 0x34, 0x17, 0xe0, 0x09, 0x24, 0xa4, 0x01, + 0x14, 0xe0, 0x09, 0x24, 0xe4, 0x01, 0x11, 0xe0, + 0x0f, 0x4c, 0x0f, 0xe0, 0x09, 0x24, 0x24, 0x02, + 0x0c, 0xe0, 0x09, 0x24, 0x64, 0x02, 0x09, 0xe0, + 0x03, 0x24, 0xe4, 0x02, 0x06, 0xe0, 0x09, 0x24, + 0xa4, 0x02, 0x03, 0xe0, 0x09, 0x21, 0x9e, 0x20, + 0xbe, 0xf7, 0x39, 0xf8, 0x60, 0x00, 0x00, 0x19, + 0x40, 0x08, 0x3c, 0x00, 0x38, 0x32, 0x04, 0x00, + 0x05, 0x49, 0x80, 0x04, 0x40, 0x18, 0x05, 0x4a, + 0xa9, 0x00, 0x89, 0x18, 0x48, 0x60, 0x64, 0x20, + 0x60, 0x43, 0x70, 0xbd, 0xdc, 0x07, 0x00, 0x00, + 0x80, 0x38, 0x01, 0x00, 0x04, 0x00, 0x07, 0x00, + 0x02, 0x49, 0x80, 0xb5, 0x08, 0x60, 0xd0, 0xf7, + 0x97, 0xf8, 0x80, 0xbd, 0x5c, 0x5b, 0x01, 0x00, + 0xf8, 0xb5, 0x00, 0x26, 0x17, 0x4c, 0x17, 0x4b, + 0x19, 0x49, 0x26, 0x70, 0x3c, 0x00, 0x74, 0x32, + 0x04, 0x00, 0x00, 0x20, 0x14, 0x33, 0x0d, 0x88, + 0x15, 0x4e, 0x15, 0x4a, 0x04, 0xe0, 0xc1, 0x00, + 0xcf, 0x18, 0x7a, 0x60, 0x5e, 0x50, 0x01, 0x30, + 0xa8, 0x42, 0xf8, 0xdb, 0xc6, 0xf7, 0x2b, 0xfd, + 0xff, 0x21, 0x11, 0x4d, 0xa5, 0x31, 0x28, 0x1c, + 0xbd, 0xf7, 0xff, 0xf8, 0x00, 0x21, 0x28, 0x1c, + 0x02, 0x1c, 0x14, 0x32, 0xc2, 0x60, 0x10, 0x1c, + 0x01, 0x31, 0x14, 0x29, 0xf8, 0xdb, 0x3c, 0x00, + 0xb0, 0x32, 0x04, 0x00, 0x00, 0x26, 0xc6, 0x60, + 0x05, 0x48, 0x0c, 0x30, 0x60, 0xc0, 0x09, 0x48, + 0x18, 0x21, 0xbd, 0xf7, 0xed, 0xf8, 0x01, 0x20, + 0x04, 0x34, 0x41, 0xc4, 0x00, 0x20, 0xf8, 0xbd, + 0x70, 0x5d, 0x01, 0x00, 0x09, 0xa0, 0x00, 0x00, + 0x30, 0xd9, 0x01, 0x00, 0x56, 0x57, 0x01, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0xa8, 0x60, 0x01, 0x00, + 0x80, 0xb5, 0x00, 0x20, 0xcf, 0xf7, 0xb6, 0xfc, + 0x3c, 0x00, 0xec, 0x32, 0x04, 0x00, 0x01, 0x49, + 0x08, 0x80, 0x80, 0xbd, 0x00, 0x00, 0x2c, 0x74, + 0x01, 0x00, 0x11, 0x48, 0xf8, 0xb5, 0x41, 0x79, + 0x00, 0x29, 0x02, 0xd1, 0x05, 0x78, 0x0f, 0x4e, + 0x01, 0xe0, 0x45, 0x78, 0x0f, 0x4e, 0x02, 0x23, + 0xf7, 0x5e, 0x00, 0x24, 0x60, 0x1b, 0x78, 0x43, + 0x64, 0x23, 0x0c, 0x49, 0x58, 0x43, 0x41, 0x18, + 0x7d, 0x20, 0xc0, 0x00, 0xbd, 0xf7, 0xf5, 0xf9, + 0x61, 0x00, 0x3c, 0x00, 0x28, 0x33, 0x04, 0x00, + 0x09, 0x4a, 0xac, 0x42, 0x50, 0x52, 0x01, 0xd1, + 0x00, 0x23, 0xf7, 0x5e, 0x01, 0x34, 0x24, 0x06, + 0x24, 0x0e, 0x10, 0x2c, 0xe9, 0xd3, 0xf8, 0xbd, + 0x0c, 0x5a, 0x01, 0x00, 0xfe, 0x59, 0x01, 0x00, + 0xfa, 0x59, 0x01, 0x00, 0x34, 0x44, 0x0f, 0x00, + 0x32, 0x5a, 0x01, 0x00, 0x38, 0xb5, 0x10, 0x4c, + 0xbe, 0x25, 0x25, 0x73, 0x20, 0x7a, 0x18, 0x21, + 0x88, 0x43, 0x20, 0x72, 0x3c, 0x00, 0x64, 0x33, + 0x04, 0x00, 0x6a, 0x46, 0x0d, 0x49, 0x0d, 0x20, + 0xbd, 0xf7, 0x33, 0xfe, 0x01, 0x20, 0x0b, 0x49, + 0x40, 0x03, 0x08, 0x60, 0x48, 0x60, 0x25, 0x73, + 0x2d, 0x20, 0xc0, 0x03, 0x20, 0x60, 0x25, 0x73, + 0x20, 0x7a, 0x10, 0x21, 0x08, 0x43, 0x20, 0x72, + 0x06, 0x48, 0x06, 0x49, 0x08, 0x60, 0x00, 0x20, + 0x48, 0x60, 0x38, 0xbd, 0x00, 0x00, 0x00, 0x03, + 0x07, 0x00, 0x8d, 0x3e, 0x01, 0x00, 0x24, 0x00, + 0xa0, 0x33, 0x04, 0x00, 0x00, 0x10, 0x07, 0x00, + 0x00, 0x87, 0x93, 0x03, 0x04, 0x79, 0x01, 0x00, + 0x80, 0xb5, 0x02, 0x21, 0x15, 0x20, 0x02, 0x4a, + 0xd0, 0xf7, 0xc8, 0xf9, 0x80, 0xbd, 0x00, 0x00, + 0x0d, 0x3e, 0x01, 0x00, 0x70, 0x47, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x44, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x40, 0x20, 0x07, 0x00, + 0xff, 0xff, 0xff, 0xff, +}; +const uint32_t fw_len = sizeof(fw_buf) / sizeof(fw_buf[0]); diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/wl_os.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/wl_os.h new file mode 100644 index 000000000..1a3b75f35 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/wl_os.h @@ -0,0 +1,35 @@ +#ifndef WL_OS_H +#define WL_OS_H + +#include +#include + +void *owl_os_alloc(size_t size); +void *owl_os_realloc(void *ptr, size_t size); +void owl_os_free(void *p); +void *owl_os_memcpy(void *dst, const void *src, size_t n); +void *owl_os_memset(void *s, int c, size_t n); +void *owl_os_memmove(void *dst, const void *src, size_t n); +size_t owl_os_strlen(char *s); +char *owl_os_strncpy(char *dst, const char *src, size_t n); +int owl_os_strncmp(const char *s1, const char *s2, size_t n); +int owl_os_strcmp(const char *s1, const char *s2); +char *owl_os_strcpy(char *dst, const char *src); +char *owl_os_strdup(const char *s); +char *owl_os_strndup(const char *s, size_t n); +int owl_os_memcmp(const void *s1, const void *s2, size_t n); +long int owl_os_strtol(const char *nptr, char **endptr, int base); +char *owl_os_strchr(const char *s, int c); +char *owl_os_strrchr(const char *s, int c); +int owl_os_strcasecmp(const char *s1, const char *s2); +char *owl_os_strstr(const char *haystack, const char *needle); + +int owl_os_snprintf(char *str, size_t size, const char *format, ...) + __attribute__((format(printf, 3, 4))); + +int owl_os_vprintf(const char *format, va_list arg); /* debug only */ +int owl_os_printf(const char *format, ...) /* debug only */ + __attribute__((format(printf, 1, 2))); + +#endif /* WL_OS_H */ + diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/wl_sdio.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/wl_sdio.h new file mode 100644 index 000000000..ee08fad71 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/wl_sdio.h @@ -0,0 +1,172 @@ +/*! + * \file wl_sdio.h + * \brief SDIO interface for wl_api. + * Copyright (C) 2010 HD Wireless AB + * + * You should have received a copy of the license along with this library. + */ + +#ifndef WL_SDIO_H +#define WL_SDIO_H + +/** \defgroup wl_sdio SDIO Interface + * + * These functions implement the interface that the wl_api library + * needs to work with a SDIO transport layer. + * + * The functions prototyped here must be implemented when porting the + * wl_api library to a new platform with a different SDIO configuration + * + * On platforms supported by H&D Wireless these functions are + * implemented in the file avr32_sdio.c + * + * @{ + */ + +/** + * Maximum transfer size. This will set an upper limit on the len parameter + * passed to owl_sdio_tx() and owl_sdio_rx(). + * + */ +#define MAX_BLOCK_LEN 512 + + +/** + * This flag might be set when owl_sdio_cmd() is called in case the cmd will + * be followed by a data transfer. If the flag is set, the transfer direction is + * from the device to the host (read). Otherwise, the transfer direction is + * from the host to the device (write). + * + */ + #define CMD_FLAG_TO_HOST (1 << 0) + + +/** + * Indicates that the sdio driver needs to be polled in order to make + * forward progress, i.e. it does not support interrupts + * + * The actual polling will result in owl_sdio_cmd() being called to + * request status information from the device. + * + * To activate polling, this flag should be set in owl_sdio_init(). + */ +#define SDIO_FLAG_POLL (1 << 0) + +/** + * Indicates that the sdio driver only supports 1-bit mode. + * + * To set 1-bit mode, this flag should be set in owl_sdio_init(). + */ +#define SDIO_FLAG_1BIT_MODE (1 << 1) + +/** + * This function will be invoked when wlan initialization should be performed, + * this happens when the wl_fw_download() function in the transport group of + * wl_api is invoked. + * + * The wifi device supports sdio high speed mode and clock frequencies up to + * 50 MHz. + * + * The function is responsible for doing any necessary sdio initialization such + * as allocating gpio's, setting up the mci master, one time allocations of + * dma buffers etc. + * + * @param flags is an out parameter that should hold any sdio flags upon return. + * The avaible flags are prefixed with SDIO_FLAG_ + * + * + */ +void owl_sdio_init(uint8_t *flags); + + + +/** + * This function will be invoked when an sdio cmd should be sent to the + * device. + * + * @param idx is the sdio command number + * @param arg is the sdio command argument + * @param flags specifies other options, such as any transfer direction. + * @param rsp should hold the command response upon return. If null, the + * response can be ignored. + * @param data holds a pointer to any data that might follow the command. This + * allows the sdio driver to setup dma transfers while waiting for the + * command response. NULL if no data transfer will follow. Note that + * the same data pointer will be passed to owl_sdio_tx(), which should + * start the actual transfer. + * @param len is the length of the data buffer. + * + */ +void owl_sdio_cmd(uint8_t idx, uint32_t arg, uint8_t flags, uint32_t *rsp, + const uint8_t *data, uint16_t len); + + +/** + * This function will be invoked when data should be transmitted to the device. + * + * If wl_fw_downlad() was called with the size_align parameter set to non-zero, + * the pad parameter should be used. If the pad parameter is not 0, additional + * data must be transmitted after the data buffer has be sent. Depending on + * how the data buffer was first allocated (probably by an TCP/IP stack), it + * might be safe or unsafe to continue reading beyond the data buffer to + * transmit the additional padding bytes. + * + * @param data holds a pointer to the data to transmit, the pointer is the + * same as the one passed to wl_tx(). + * @param len is the number of bytes that should be transmitted, including + * padding. + * @param pad is the number of padding bytes to send. + * + */ +void owl_sdio_tx(const uint8_t *data, uint16_t len, uint8_t pad); + + +/** + * This function will be invoked when data should be received from the device. + * + * @param data should hold the read data upon return. + * @param len is the number of bytes to read. + * + */ +void owl_sdio_rx(uint8_t *data, uint16_t len); + + +/** + * Invoked when sdio rx interrupts from the device should be enabled or + * disabled. + * + * If SDIO_FLAG_POLL was set in wl_spi_init(), then this function can be + * left empty. + * + * @param enable specifies if interrupts should be enabled or disabled. + * + */ +void owl_sdio_irq(uint8_t enable); + + +/** + * Delay executiom for the specified number of ms. This function will be called + * with delays in the 10-20 ms range during fw download and startup of the + * Wi-Fi device. This function can be implemented with a simple for-loop if + * desired (beware of optimization). The timing does not have to be accurate as + * long as the actual delay becomes at least the specified number of ms. + * + * @param ms is the minimal amount of time to wait [ms]. + * + */ +void owl_sdio_mdelay(uint32_t ms); + + +/** + * This function should be called whenever an interrupt is detected. It can + * be called from an interrupt context. + * + * If SDIO_FLAG_POLL was set in owl_sdio_init(), then wl_sdio_irq() + * should never be called. + * + */ +extern void wl_sdio_irq(void); + +/*! @} */ + +#endif diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/wl_spi.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/wl_spi.h new file mode 100644 index 000000000..5d9137499 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/wl_spi.h @@ -0,0 +1,185 @@ +/*! + * \file wl_spi.h + * \brief SPI interface for wl_api. + * Copyright (C) 2010 HD Wireless AB + * + * You should have received a copy of the license along with this library. + */ + +#ifndef WL_SPI_H +#define WL_SPI_H + +#ifndef WITHOUT_STDINT +#include +#endif + +/** \defgroup wl_spi SPI Interface + * + * These functions implement the interface that the wl_api library + * needs to work with a SPI transport layer. + * + * The functions prototyped here must be implemented when porting the + * wl_api library to a new platform with a different SPI configuration + * + * On platforms supported by H&D Wireless these functions are + * implemented in the file avr32_spi.c + * + * @{ + */ + +/** + * Maximum transfer size. This will set an upper limit on the len parameter + * passed to owl_spi_txrx(). + * + * + */ +#define MAX_BLOCK_LEN 512 + + +/** + * Indicates that the spi driver needs to be polled in order to make + * forward progress, i.e. it does not support interrupts through SD pin 8. + * + * The actual polling will result in owl_spi_txrx() being call to + * request status information from the device. + * + * To activate polling, this flag should be set in owl_spi_init(). + * + * See wl_poll() and wl_register_rx_isr() for more information regarding + * polled and interrupt modes. + * + */ +#define SPI_FLAG_POLL (1 << 0) + + +/** + * This function will be invoked when wlan device initialization should be + * performed, this happens when the wl_fw_download() function in the transport + * group of wl_api is invoked. + * + * The wifi device requires spi mode 3, i.e. clock polarity high and sample + * on second phase. This corresponds to CPOL=1, CPHA=1. Maximum frequency on + * spi clock is 30 MHz. + * + * The function is also responsible for doing any necessary spi initialization + * such as allocating gpio's, setting up the SPI master, one time allocations of + * dma buffers etc. + * + * + * If the SPB105 device is used, two signals; POWER (pin 10 on SPB105) and + * SHUTDOWN (pin 4 on SPB105) might be connected to gpio's on the host. + * The GPIO_POWER_PIN is the main power supply to the device. The + * GPIO_SHUTDOWN_PIN (active low) should be defined as an input. + * + * After GPIO_POWER_PIN is pulled high by the host, the device will pull the + * GPIO_SHUTDOWN_PIN high once the device is properly powered. + * + * However, if pin 4 (GPIO_SHUTDOWN_PIN) is not connected to the host, a delay + * of up to 250 ms must be added after GPIO_POWER_PIN is pulled high to ensure + * that startup is completed. The actual time is usually much shorter, therefore + * one might try to reduce the delay for a particualar hardware design. + * + * On SPB104, the GPIO_POWER_PIN will be connected to VCC and GPIO_SHUTDOWN_PIN + * will be unconnected; hence we have to make sure that we have enough delay + * after powering on the host. Since the device power-on usually happens at the + * same time as the host power-on, the startup time of the host can be + * subtracted from any delay put into owl_spi_init(). + * + * @param flags is an out parameter that should hold any spi flags upon return. + * The avaible flags are prefixed with SPI_FLAG_ + * + * @return 0 on success + * -1 if any error occurs + * + */ +int owl_spi_init(uint8_t *flags); + + +/** + * Invoked when a spi transfer should be performed. + * + * All buffers that are allocated by the wl library will have a size that is + * aligned to 4. If size-unaligned data is passed to this function, it is + * always allocated by the ip stack. If 4-byte size alignment (e.g. for DMA) + * is required, 1-3 extra padding bytes can be transmitted after the in buffer. + * These bytes must be 0xff. + * + * Since size-unaligned data always comes from the ip stack, the out ptr is + * always NULL for such data. + * + * @param in points a buffer which holds the data to be transmitted. If NULL, + * then \a len bytes with the value 0xff should be transmitted on the + * bus. + * @param out points a buffer should hold the data received from the device. If + * NULL, any received data can be discarded. + * @param len is the length of the in and out buffers. + * + */ +void owl_spi_txrx(const uint8_t *in, uint8_t* out, uint16_t len); + + +/** + * Invoked when spi rx interrupts from the device should be enabled or disabled. + * Note that the spi interrupts are obtained from pin 8 on SPB104 or pin 3 from + * SPB105. This pin can be be connected to a gpio on the host. The irq line + * will signal an interrupt on both edges. + * + * In general, the wifi device will not issue a new interrupt unless the + * last interrupt has been handled. Also, during normal operation (i.e after + * the complete callback registered in wl_init() has been invoked), + * owl_spi_irq() will never be invoked so interrupts will be enabled all + * the time. For the SPI-mode, the purpose of owl_spi_irq() is basically to + * make sure that the first interrupt (coming after the reset performed in + * owl_spi_init()) is ignored. + * + * If SPI_FLAG_POLL was set in owl_spi_init(), then this function can be + * left empty and the wifi device will be used in polled mode. In polled mode, + * the interrupt line is not used. Regardless of polled or interrupt-mode, + * wl_poll() must be called to ensure progress of the driver. + * + * @param enable specifies if interrupts should be enabled or disabled. + * + */ +void owl_spi_irq(uint8_t enable); + + +/** + * Invoked when the spi cs for the wifi device should be enabled. Note that + * multiple calls to owl_spi_txrx() might be done during a 'single' chip + * select. + * + * @param enable specifies whether chip select should be asserted or deasserted, + * The chip select signal is active low, so if enable is '1' then the + * chip select connected to the wifi device should be set to '0'. + * + */ +void owl_spi_cs(uint8_t enable); + + +/** + * Delay executiom for the specified number of ms. This function will be called + * with delays in the 10-20 ms range during fw download and startup of the + * Wi-Fi device. This function can be implemented with a simple for-loop if + * desired (beware of optimization). The timing does not have to be accurate as + * long as the actual delay becomes at least the specified number of ms. + * + * @param ms is the minimal amount of time to wait [ms]. + * + */ +void owl_spi_mdelay(uint32_t ms); + + +/** + * This function should be called whenever an interrupt is detected. It can + * be called from an interrupt context. + * + * If SPI_FLAG_POLL was set in owl_spi_init(), then wl_spi_irq() + * should never be called. + * + */ +extern void wl_spi_irq(void); + + +/*! @} */ + +#endif diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/wlap_api.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/wlap_api.h new file mode 100644 index 000000000..9a4483afa --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/wlap_api.h @@ -0,0 +1,154 @@ +/* + * Programming interface for wlap_api. + * Copyright (C) 2011 HD Wireless AB + * + * You should have received a copy of the license along with this library. + */ + +/*! \file wlap_api.h ************************************************************* + * + * \brief WiFi AP API + * + * This file provides the wlap_api interface. + * + * - Compiler: GNU GCC for AVR32 + * - Supported devices: + * \li SPB104 + EVK1100 + * \li SPB104 + EVK1101 + * \li SPB104 + EVK1104 + * \li SPB104 + EVK1105 (SPI) + * \li SPB104 + EVK1105 (SPI + irq) + * \li SPB105 + EVK1105 (SPI) + * - AppNote: + * + * \author H&D Wireless AB: \n + * + ***************************************************************************** + * + * \section intro Introduction + * This is the documentation for the WiFi AP Driver API \a wlap_api. + * + * \section files Main Files + * - wlap_api.h : WiFi driver interface. + * - libwlap_api_*.*.a - Driver library. + * + */ + +#ifndef WLAP_API_H +#define WLAP_API_H + +#define WLAP_API_RELEASE_NAME "unknown" + +#include + +/** \defgroup wl_softap Access Point Mode + * + * \brief Support the WiFi Access Point mode. + * + * @{ + */ +/* + * Station representation + * + */ +struct wl_sta_t +{ + struct wl_mac_addr_t bssid; /**< The BSSID of the network. */ + uint8_t queued_pkt_cnt; /**< Number of queueud packets for + this STA. */ + uint8_t in_ps; /**< Is the STA in power save mode. */ + uint8_t aid; /**< STA AID */ +}; + +/* Station list representation. Array of pointers to wl_sta_t entries. */ +struct wl_sta_list_t +{ + struct wl_sta_t **sta; /**< The list of pointers to stations */ + size_t cnt; /**< Number of stations */ +}; + +/*! \brief Get the list of currently associated stations (SoftAP). + * + * Retrieves the list of current stations from + * the driver. + * + * This function is not thread safe. It must be called in the + * same execution context as wl_poll(). + * + * @param network_list Output buffer. The API call returns + * a pointer to allocated memory containing the network list. + * @return + * - WL_SUCCESS + * - WL_FAILURE. + */ +wl_err_t wlap_get_sta_list(struct wl_sta_list_t **network_list); + + +/*! Callback used to read data from a TX packet. + * This function is supplied by the user of the API. + * + * @param dst Destination buffer. The data should be copied + * to this buffer. + * @param src_handle Handle to the source packet from where + * the data should be copied. This handle is the same one that + * is passed in parameter \a pkt_handle to \a wl_process_tx(). + * @param read_len Number of bytes to copy from \a src_handle + * to \a dst. + * @param offset The offset in bytes, counting from the + * beginning of the Ethernet header, from where to copy data. + * @return + * - The number of bytes copied. This number may be smaller + * than the length requested in \a read_len but it may not + * be shorter than the length of the packet counting from + * \a offset. In other words, if the caller of this function + * receives a return count that is shorter than \a read_len + * he will assume that all packet data has been read. + * - < 0 on error. + */ +typedef ssize_t (*wl_pkt_read_cb_t)(char *dst, + void *src_handle, + size_t read_len, + int offset); + +/*! \brief Register a data access function for TX packets (SoftAP). + * + * When a TX data packet has a different representation than a single + * contiguous buffer in memory then a packet read function must be + * implemented and registered with this call. Whenever the library + * needs to read packet data it will call this function to do it. + * + * This function can be ignored if the TX packet representation is + * a single contiguous buffer. This function is only needed in SoftAP + * mode. + * + * @param pkt_read_cb Read callback. + * @param ctx Context + */ +void wl_register_pkt_read_cb(wl_pkt_read_cb_t pkt_read_cb); + +/*! \brief Start a network using the SoftAP mode. + * + * This call will cause the WiFi chip to start sending beacons + * and accept associations from WiFi stations. + * + */ +wl_err_t wlap_start_ap(const char *ssid, + const size_t ssid_len, + const uint8_t channel, + const enum wl_auth_mode auth_mode, + const enum wl_enc_type enc_type); + +/*! \brief Disconnect a STA (SoftAP) + * + * @param bssid The BSSID of the station to disconnect. + * @return + * - WL_SUCCESS + * - WL_FAILURE. + */ +wl_err_t wlap_disconnect_sta(const struct wl_mac_addr_t bssid); + + +/*! @} */ /* End wl_softap group */ + + +#endif diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/CPU/CYCLE_COUNTER/cycle_counter.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/CPU/CYCLE_COUNTER/cycle_counter.h new file mode 100644 index 000000000..d0c51dfa1 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/CPU/CYCLE_COUNTER/cycle_counter.h @@ -0,0 +1,309 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file has been prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Cycle counter driver. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32UC devices. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + *****************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _CYCLE_COUNTER_H_ +#define _CYCLE_COUNTER_H_ + +#include "compiler.h" + + +//! Structure holding private information, automatically initialized by the +//! cpu_set_timeout() function. +typedef struct +{ + //! The cycle count at the begining of the timeout. + unsigned long delay_start_cycle; + + //! The cycle count at the end of the timeout. + unsigned long delay_end_cycle; + + //! Enable/disable the timout detection + unsigned char timer_state; + #define CPU_TIMER_STATE_STARTED 0 + #define CPU_TIMER_STATE_REACHED 1 + #define CPU_TIMER_STATE_STOPPED 2 +} t_cpu_time; + + +/*! + * \brief Convert milli-seconds into CPU cycles. + * + * \param ms: Number of millisecond. + * \param fcpu_hz: CPU frequency in Hz. + * + * \return the converted number of CPU cycles. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ U32 cpu_ms_2_cy(unsigned long ms, unsigned long fcpu_hz) +{ + return ((unsigned long long)ms * fcpu_hz + 999) / 1000; +} + + +/*! + * \brief Convert micro-seconds into CPU cycles. + * + * \param us: Number of microsecond. + * \param fcpu_hz: CPU frequency in Hz. + * + * \return the converted number of CPU cycles. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ U32 cpu_us_2_cy(unsigned long us, unsigned long fcpu_hz) +{ + return ((unsigned long long)us * fcpu_hz + 999999) / 1000000; +} + + +/*! + * \brief Convert CPU cycles into milli-seconds. + * + * \param cy: Number of CPU cycles. + * \param fcpu_hz: CPU frequency in Hz. + * + * \return the converted number of milli-second. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ U32 cpu_cy_2_ms(unsigned long cy, unsigned long fcpu_hz) +{ + return ((unsigned long long)cy * 1000 + fcpu_hz-1) / fcpu_hz; +} + + +/*! + * \brief Convert CPU cycles into micro-seconds. + * + * \param cy: Number of CPU cycles. + * \param fcpu_hz: CPU frequency in Hz. + * + * \return the converted number of micro-second. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ U32 cpu_cy_2_us(unsigned long cy, unsigned long fcpu_hz) +{ + return ((unsigned long long)cy * 1000000 + fcpu_hz-1) / fcpu_hz; +} + + +/*! + * \brief Set a timer variable. + * + * Ex: t_cpu_time timer; + * cpu_set_timeout( cpu_ms_2_cy(10, FOSC0), &timer ); // timeout in 10 ms + * if( cpu_is_timeout(&timer) ) + * cpu_stop_timeout(&timer); + * ../.. + * + * \param delay: (input) delay in CPU cycles before timeout. + * \param cpu_time: (output) internal information used by the timer API. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void cpu_set_timeout(unsigned long delay, t_cpu_time *cpu_time) +{ + cpu_time->delay_start_cycle = Get_system_register(AVR32_COUNT); + cpu_time->delay_end_cycle = cpu_time->delay_start_cycle + delay; + cpu_time->timer_state = CPU_TIMER_STATE_STARTED; +} + + +/*! + * \brief Test if a timer variable reached its timeout. + * + * Once the timeout is reached, the function will always return TRUE, + * until the cpu_stop_timeout() function is called. + * + * Ex: t_cpu_time timer; + * cpu_set_timeout( 10, FOSC0, &timer ); // timeout in 10 ms + * if( cpu_is_timeout(&timer) ) + * cpu_stop_timeout(&timer); + * ../.. + * + * \param cpu_time: (input) internal information used by the timer API. + * + * \return TRUE if timeout occured, otherwise FALSE. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ unsigned long cpu_is_timeout(t_cpu_time *cpu_time) +{ + unsigned long current_cycle_count = Get_system_register(AVR32_COUNT); + + if( cpu_time->timer_state==CPU_TIMER_STATE_STOPPED ) + return FALSE; + + // Test if the timeout as already occured. + else if (cpu_time->timer_state == CPU_TIMER_STATE_REACHED) + return TRUE; + + // If the ending cycle count of this timeout is wrapped, ... + else if (cpu_time->delay_start_cycle > cpu_time->delay_end_cycle) + { + if (current_cycle_count < cpu_time->delay_start_cycle && current_cycle_count > cpu_time->delay_end_cycle) + { + cpu_time->timer_state = CPU_TIMER_STATE_REACHED; + return TRUE; + } + return FALSE; + } + else + { + if (current_cycle_count < cpu_time->delay_start_cycle || current_cycle_count > cpu_time->delay_end_cycle) + { + cpu_time->timer_state = CPU_TIMER_STATE_REACHED; + return TRUE; + } + return FALSE; + } +} + + +/*! + * \brief Stop a timeout detection. + * + * Ex: t_cpu_time timer; + * cpu_set_timeout( 10, FOSC0, &timer ); // timeout in 10 ms + * if( cpu_is_timeout(&timer) ) + * cpu_stop_timeout(&timer); + * ../.. + * + * \param cpu_time: (input) internal information used by the timer API. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void cpu_stop_timeout(t_cpu_time *cpu_time) +{ + cpu_time->timer_state = CPU_TIMER_STATE_STOPPED; +} + + +/*! + * \brief Test if a timer is stopped. + * + * \param cpu_time: (input) internal information used by the timer API. + * + * \return TRUE if timer is stopped, otherwise FALSE. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ unsigned long cpu_is_timer_stopped(t_cpu_time *cpu_time) +{ + + if( cpu_time->timer_state==CPU_TIMER_STATE_STOPPED ) + return TRUE; + else + return FALSE; +} + + +/*! + * \brief Waits during at least the specified delay (in millisecond) before returning. + * + * \param delay: Number of millisecond to wait. + * \param fcpu_hz: CPU frequency in Hz. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void cpu_delay_ms(unsigned long delay, unsigned long fcpu_hz) +{ + t_cpu_time timer; + cpu_set_timeout( cpu_ms_2_cy(delay, fcpu_hz), &timer); + while( !cpu_is_timeout(&timer) ); +} + +/*! + * \brief Waits during at least the specified delay (in microsecond) before returning. + * + * \param delay: Number of microsecond to wait. + * \param fcpu_hz: CPU frequency in Hz. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void cpu_delay_us(unsigned long delay, unsigned long fcpu_hz) +{ + t_cpu_time timer; + cpu_set_timeout( cpu_us_2_cy(delay, fcpu_hz), &timer); + while( !cpu_is_timeout(&timer) ); +} + +/*! + * \brief Waits during at least the specified delay (in CPU cycles) before returning. + * + * \param delay: Number of CPU cycles to wait. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void cpu_delay_cy(unsigned long delay) +{ + t_cpu_time timer; + cpu_set_timeout( delay, &timer); + while( !cpu_is_timeout(&timer) ); +} + + +#define Get_sys_count() ( Get_system_register(AVR32_COUNT) ) +#define Set_sys_count(x) ( Set_system_register(AVR32_COUNT, (x)) ) +#define Get_sys_compare() ( Get_system_register(AVR32_COMPARE) ) +#define Set_sys_compare(x) ( Set_system_register(AVR32_COMPARE, (x)) ) + + +#endif // _CYCLE_COUNTER_H_ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/EBI/SMC/smc.c b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/EBI/SMC/smc.c new file mode 100644 index 000000000..543fed644 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/EBI/SMC/smc.c @@ -0,0 +1,995 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief SMC on EBI driver for AVR32 UC3. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with a SMC module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#include "compiler.h" +#include "preprocessor.h" +#include "gpio.h" +#include "smc.h" + +// Configure the SM Controller with SM setup and timing information for all chip select +#define SMC_CS_SETUP(ncs) { \ + U32 nwe_setup = ((NWE_SETUP * hsb_mhz_up + 999) / 1000); \ + U32 ncs_wr_setup = ((NCS_WR_SETUP * hsb_mhz_up + 999) / 1000); \ + U32 nrd_setup = ((NRD_SETUP * hsb_mhz_up + 999) / 1000); \ + U32 ncs_rd_setup = ((NCS_RD_SETUP * hsb_mhz_up + 999) / 1000); \ + U32 nwe_pulse = ((NWE_PULSE * hsb_mhz_up + 999) / 1000); \ + U32 ncs_wr_pulse = ((NCS_WR_PULSE * hsb_mhz_up + 999) / 1000); \ + U32 nrd_pulse = ((NRD_PULSE * hsb_mhz_up + 999) / 1000); \ + U32 ncs_rd_pulse = ((NCS_RD_PULSE * hsb_mhz_up + 999) / 1000); \ + U32 nwe_cycle = ((NWE_CYCLE * hsb_mhz_up + 999) / 1000); \ + U32 nrd_cycle = ((NRD_CYCLE * hsb_mhz_up + 999) / 1000); \ + \ + /* Some coherence checks... */ \ + /* Ensures CS is active during Rd or Wr */ \ + if( ncs_rd_setup + ncs_rd_pulse < nrd_setup + nrd_pulse ) \ + ncs_rd_pulse = nrd_setup + nrd_pulse - ncs_rd_setup; \ + if( ncs_wr_setup + ncs_wr_pulse < nwe_setup + nwe_pulse ) \ + ncs_wr_pulse = nwe_setup + nwe_pulse - ncs_wr_setup; \ + \ + /* ncs_hold = n_cycle - ncs_setup - ncs_pulse */ \ + /* n_hold = n_cycle - n_setup - n_pulse */ \ + /* */ \ + /* All holds parameters must be positive or null, so: */ \ + /* nwe_cycle shall be >= ncs_wr_setup + ncs_wr_pulse */ \ + if( nwe_cycle < ncs_wr_setup + ncs_wr_pulse ) \ + nwe_cycle = ncs_wr_setup + ncs_wr_pulse; \ + \ + /* nwe_cycle shall be >= nwe_setup + nwe_pulse */ \ + if( nwe_cycle < nwe_setup + nwe_pulse ) \ + nwe_cycle = nwe_setup + nwe_pulse; \ + \ + /* nrd_cycle shall be >= ncs_rd_setup + ncs_rd_pulse */ \ + if( nrd_cycle < ncs_rd_setup + ncs_rd_pulse ) \ + nrd_cycle = ncs_rd_setup + ncs_rd_pulse; \ + \ + /* nrd_cycle shall be >= nrd_setup + nrd_pulse */ \ + if( nrd_cycle < nrd_setup + nrd_pulse ) \ + nrd_cycle = nrd_setup + nrd_pulse; \ + \ + AVR32_SMC.cs[ncs].setup = (nwe_setup << AVR32_SMC_SETUP0_NWE_SETUP_OFFSET) | \ + (ncs_wr_setup << AVR32_SMC_SETUP0_NCS_WR_SETUP_OFFSET) | \ + (nrd_setup << AVR32_SMC_SETUP0_NRD_SETUP_OFFSET) | \ + (ncs_rd_setup << AVR32_SMC_SETUP0_NCS_RD_SETUP_OFFSET); \ + AVR32_SMC.cs[ncs].pulse = (nwe_pulse << AVR32_SMC_PULSE0_NWE_PULSE_OFFSET) | \ + (ncs_wr_pulse << AVR32_SMC_PULSE0_NCS_WR_PULSE_OFFSET) | \ + (nrd_pulse << AVR32_SMC_PULSE0_NRD_PULSE_OFFSET) | \ + (ncs_rd_pulse << AVR32_SMC_PULSE0_NCS_RD_PULSE_OFFSET); \ + AVR32_SMC.cs[ncs].cycle = (nwe_cycle << AVR32_SMC_CYCLE0_NWE_CYCLE_OFFSET) | \ + (nrd_cycle << AVR32_SMC_CYCLE0_NRD_CYCLE_OFFSET); \ + AVR32_SMC.cs[ncs].mode = (((NCS_CONTROLLED_READ) ? AVR32_SMC_MODE0_READ_MODE_NCS_CONTROLLED : \ + AVR32_SMC_MODE0_READ_MODE_NRD_CONTROLLED) << AVR32_SMC_MODE0_READ_MODE_OFFSET) | \ + + (((NCS_CONTROLLED_WRITE) ? AVR32_SMC_MODE0_WRITE_MODE_NCS_CONTROLLED : \ + AVR32_SMC_MODE0_WRITE_MODE_NWE_CONTROLLED) << AVR32_SMC_MODE0_WRITE_MODE_OFFSET) | \ + (NWAIT_MODE << AVR32_SMC_MODE0_EXNW_MODE_OFFSET) | \ + (((SMC_8_BIT_CHIPS) ? AVR32_SMC_MODE0_BAT_BYTE_WRITE : \ + AVR32_SMC_MODE0_BAT_BYTE_SELECT) << AVR32_SMC_MODE0_BAT_OFFSET) | \ + (((SMC_DBW <= 8 ) ? AVR32_SMC_MODE0_DBW_8_BITS : \ + (SMC_DBW <= 16) ? AVR32_SMC_MODE0_DBW_16_BITS : \ + AVR32_SMC_MODE0_DBW_32_BITS) << AVR32_SMC_MODE0_DBW_OFFSET) | \ + (TDF_CYCLES << AVR32_SMC_MODE0_TDF_CYCLES_OFFSET) | \ + (TDF_OPTIM << AVR32_SMC_MODE0_TDF_MODE_OFFSET) | \ + (PAGE_MODE << AVR32_SMC_MODE0_PMEN_OFFSET) | \ + (PAGE_SIZE << AVR32_SMC_MODE0_PS_OFFSET); \ + smc_tab_cs_size[ncs] = (U8)EXT_SM_SIZE; \ + } + +static U8 smc_tab_cs_size[6]; + +static void smc_enable_muxed_pins(void); + + +void smc_init(unsigned long hsb_hz) +{ + unsigned long hsb_mhz_up = (hsb_hz + 999999) / 1000000; + +//! Whether to use the NCS0 pin +#ifdef SMC_USE_NCS0 + #include SMC_COMPONENT_CS0 + + // Setup SMC for NCS0 + SMC_CS_SETUP(0) + + #ifdef SMC_DBW_GLOBAL + #if (SMC_DBW_GLOBAL < SMC_DBW) + #undef SMC_DBW_GLOBAL + #if (SMC_DBW == 8) + #define SMC_DBW_GLOBAL 8 + #elif (SMC_DBW == 16) + #define SMC_DBW_GLOBAL 16 + #elif (SMC_DBW == 32) + #define SMC_DBW_GLOBAL 32 + #else + #error error in SMC_DBW size + #endif + #endif + #else + #if (SMC_DBW == 8) + #define SMC_DBW_GLOBAL 8 + #elif (SMC_DBW == 16) + #define SMC_DBW_GLOBAL 16 + #elif (SMC_DBW == 32) + #define SMC_DBW_GLOBAL 32 + #else + #error error in SMC_DBW size + #endif + #endif + + #ifdef SMC_8_BIT_CHIPS_GLOBAL + #if (SMC_8_BIT_CHIPS_GLOBAL < SMC_8_BIT) + #undef SMC_8_BIT_CHIPS_GLOBAL + #if (SMC_8_BIT_CHIPS == TRUE) + #define SMC_8_BIT_CHIPS_GLOBAL TRUE + #elif (SMC_8_BIT_CHIPS == FALSE) + #define SMC_8_BIT_CHIPS_GLOBAL FALSE + #else + #error error in SMC_8_BIT_CHIPS size + #endif + #endif + #else + #if (SMC_8_BIT_CHIPS == TRUE) + #define SMC_8_BIT_CHIPS_GLOBAL TRUE + #elif (SMC_8_BIT_CHIPS == FALSE) + #define SMC_8_BIT_CHIPS_GLOBAL FALSE + #else + #error error in SMC_8_BIT_CHIPS size + #endif + #endif + + #ifdef NWAIT_MODE_GLOBAL + #if (NWAIT_MODE_GLOBAL < NWAIT_MODE) + #undef NWAIT_MODE_GLOBAL + #if (NWAIT_MODE == AVR32_SMC_EXNW_MODE_DISABLED) + #define NWAIT_MODE_GLOBAL AVR32_SMC_EXNW_MODE_DISABLED + #elif (NWAIT_MODE == AVR32_SMC_EXNW_MODE_FROZEN) + #define NWAIT_MODE_GLOBAL AVR32_SMC_EXNW_MODE_FROZEN + #else + #error error in NWAIT_MODE size + #endif + #endif + #else + #if (NWAIT_MODE == AVR32_SMC_EXNW_MODE_DISABLED) + #define NWAIT_MODE_GLOBAL AVR32_SMC_EXNW_MODE_DISABLED + #elif (NWAIT_MODE == AVR32_SMC_EXNW_MODE_FROZEN) + #define NWAIT_MODE_GLOBAL AVR32_SMC_EXNW_MODE_FROZEN + #else + #error error in NWAIT_MODE size + #endif + #endif + + #undef EXT_SM_SIZE + #undef SMC_DBW + #undef SMC_8_BIT_CHIPS + #undef NWE_SETUP + #undef NCS_WR_SETUP + #undef NRD_SETUP + #undef NCS_RD_SETUP + #undef NCS_WR_PULSE + #undef NWE_PULSE + #undef NCS_RD_PULSE + #undef NRD_PULSE + #undef NCS_WR_HOLD + #undef NWE_HOLD + #undef NWE_CYCLE + #undef NCS_RD_HOLD + #undef NRD_CYCLE + #undef TDF_CYCLES + #undef TDF_OPTIM + #undef PAGE_MODE + #undef PAGE_SIZE + #undef NCS_CONTROLLED_READ + #undef NCS_CONTROLLED_WRITE + #undef NWAIT_MODE +#endif + + +//! Whether to use the NCS1 pin +#ifdef SMC_USE_NCS1 + #include SMC_COMPONENT_CS1 + + // Enable SM mode for CS1 if necessary. + AVR32_HMATRIX.sfr[AVR32_EBI_HMATRIX_NR] &= ~(1 << AVR32_EBI_SDRAM_CS); + AVR32_HMATRIX.sfr[AVR32_EBI_HMATRIX_NR]; + + // Setup SMC for NCS1 + SMC_CS_SETUP(1) + + #ifdef SMC_DBW_GLOBAL + #if (SMC_DBW_GLOBAL < SMC_DBW) + #undef SMC_DBW_GLOBAL + #if (SMC_DBW == 8) + #define SMC_DBW_GLOBAL 8 + #elif (SMC_DBW == 16) + #define SMC_DBW_GLOBAL 16 + #elif (SMC_DBW == 32) + #define SMC_DBW_GLOBAL 32 + #else + #error error in SMC_DBW size + #endif + #endif + #else + #if (SMC_DBW == 8) + #define SMC_DBW_GLOBAL 8 + #elif (SMC_DBW == 16) + #define SMC_DBW_GLOBAL 16 + #elif (SMC_DBW == 32) + #define SMC_DBW_GLOBAL 32 + #else + #error error in SMC_DBW size + #endif + #endif + + #ifdef SMC_8_BIT_CHIPS_GLOBAL + #if (SMC_8_BIT_CHIPS_GLOBAL < SMC_8_BIT) + #undef SMC_8_BIT_CHIPS_GLOBAL + #if (SMC_8_BIT_CHIPS == TRUE) + #define SMC_8_BIT_CHIPS_GLOBAL TRUE + #elif (SMC_8_BIT_CHIPS == FALSE) + #define SMC_8_BIT_CHIPS_GLOBAL FALSE + #else + #error error in SMC_8_BIT_CHIPS size + #endif + #endif + #else + #if (SMC_8_BIT_CHIPS == TRUE) + #define SMC_8_BIT_CHIPS_GLOBAL TRUE + #elif (SMC_8_BIT_CHIPS == FALSE) + #define SMC_8_BIT_CHIPS_GLOBAL FALSE + #else + #error error in SMC_8_BIT_CHIPS size + #endif + #endif + + #ifdef NWAIT_MODE_GLOBAL + #if (NWAIT_MODE_GLOBAL < NWAIT_MODE) + #undef NWAIT_MODE_GLOBAL + #if (NWAIT_MODE == AVR32_SMC_EXNW_MODE_DISABLED) + #define NWAIT_MODE_GLOBAL AVR32_SMC_EXNW_MODE_DISABLED + #elif (NWAIT_MODE == AVR32_SMC_EXNW_MODE_FROZEN) + #define NWAIT_MODE_GLOBAL AVR32_SMC_EXNW_MODE_FROZEN + #else + #error error in NWAIT_MODE size + #endif + #endif + #else + #if (NWAIT_MODE == AVR32_SMC_EXNW_MODE_DISABLED) + #define NWAIT_MODE_GLOBAL AVR32_SMC_EXNW_MODE_DISABLED + #elif (NWAIT_MODE == AVR32_SMC_EXNW_MODE_FROZEN) + #define NWAIT_MODE_GLOBAL AVR32_SMC_EXNW_MODE_FROZEN + #else + #error error in NWAIT_MODE size + #endif + #endif + + #undef EXT_SM_SIZE + #undef SMC_DBW + #undef SMC_8_BIT_CHIPS + #undef NWE_SETUP + #undef NCS_WR_SETUP + #undef NRD_SETUP + #undef NCS_RD_SETUP + #undef NCS_WR_PULSE + #undef NWE_PULSE + #undef NCS_RD_PULSE + #undef NRD_PULSE + #undef NCS_WR_HOLD + #undef NWE_HOLD + #undef NWE_CYCLE + #undef NCS_RD_HOLD + #undef NRD_CYCLE + #undef TDF_CYCLES + #undef TDF_OPTIM + #undef PAGE_MODE + #undef PAGE_SIZE + #undef NCS_CONTROLLED_READ + #undef NCS_CONTROLLED_WRITE + #undef NWAIT_MODE +#endif + +//! Whether to use the NCS2 pin +#ifdef SMC_USE_NCS2 + #include SMC_COMPONENT_CS2 + + // Setup SMC for NCS2 + SMC_CS_SETUP(2) + + #ifdef SMC_DBW_GLOBAL + #if (SMC_DBW_GLOBAL < SMC_DBW) + #undef SMC_DBW_GLOBAL + #if (SMC_DBW == 8) + #define SMC_DBW_GLOBAL 8 + #elif (SMC_DBW == 16) + #define SMC_DBW_GLOBAL 16 + #elif (SMC_DBW == 32) + #define SMC_DBW_GLOBAL 32 + #else + #error error in SMC_DBW size + #endif + #endif + #else + #if (SMC_DBW == 8) + #define SMC_DBW_GLOBAL 8 + #elif (SMC_DBW == 16) + #define SMC_DBW_GLOBAL 16 + #elif (SMC_DBW == 32) + #define SMC_DBW_GLOBAL 32 + #else + #error error in SMC_DBW size + #endif + #endif + + #ifdef SMC_8_BIT_CHIPS_GLOBAL + #if (SMC_8_BIT_CHIPS_GLOBAL < SMC_8_BIT) + #undef SMC_8_BIT_CHIPS_GLOBAL + #if (SMC_8_BIT_CHIPS == TRUE) + #define SMC_8_BIT_CHIPS_GLOBAL TRUE + #elif (SMC_8_BIT_CHIPS == FALSE) + #define SMC_8_BIT_CHIPS_GLOBAL FALSE + #else + #error error in SMC_8_BIT_CHIPS size + #endif + #endif + #else + #if (SMC_8_BIT_CHIPS == TRUE) + #define SMC_8_BIT_CHIPS_GLOBAL TRUE + #elif (SMC_8_BIT_CHIPS == FALSE) + #define SMC_8_BIT_CHIPS_GLOBAL FALSE + #else + #error error in SMC_8_BIT_CHIPS size + #endif + #endif + + #ifdef NWAIT_MODE_GLOBAL + #if (NWAIT_MODE_GLOBAL < NWAIT_MODE) + #undef NWAIT_MODE_GLOBAL + #if (NWAIT_MODE == AVR32_SMC_EXNW_MODE_DISABLED) + #define NWAIT_MODE_GLOBAL AVR32_SMC_EXNW_MODE_DISABLED + #elif (NWAIT_MODE == AVR32_SMC_EXNW_MODE_FROZEN) + #define NWAIT_MODE_GLOBAL AVR32_SMC_EXNW_MODE_FROZEN + #else + #error error in NWAIT_MODE size + #endif + #endif + #else + #if (NWAIT_MODE == AVR32_SMC_EXNW_MODE_DISABLED) + #define NWAIT_MODE_GLOBAL AVR32_SMC_EXNW_MODE_DISABLED + #elif (NWAIT_MODE == AVR32_SMC_EXNW_MODE_FROZEN) + #define NWAIT_MODE_GLOBAL AVR32_SMC_EXNW_MODE_FROZEN + #else + #error error in NWAIT_MODE size + #endif + #endif + + + #undef EXT_SM_SIZE + #undef SMC_DBW + #undef SMC_8_BIT_CHIPS + #undef NWE_SETUP + #undef NCS_WR_SETUP + #undef NRD_SETUP + #undef NCS_RD_SETUP + #undef NCS_WR_PULSE + #undef NWE_PULSE + #undef NCS_RD_PULSE + #undef NRD_PULSE + #undef NCS_WR_HOLD + #undef NWE_HOLD + #undef NWE_CYCLE + #undef NCS_RD_HOLD + #undef NRD_CYCLE + #undef TDF_CYCLES + #undef TDF_OPTIM + #undef PAGE_MODE + #undef PAGE_SIZE + #undef NCS_CONTROLLED_READ + #undef NCS_CONTROLLED_WRITE + #undef NWAIT_MODE +#endif + +//! Whether to use the NCS3 pin +#ifdef SMC_USE_NCS3 + #include SMC_COMPONENT_CS3 + + // Setup SMC for NCS3 + SMC_CS_SETUP(3) + + #ifdef SMC_DBW_GLOBAL + #if (SMC_DBW_GLOBAL < SMC_DBW) + #undef SMC_DBW_GLOBAL + #if (SMC_DBW == 8) + #define SMC_DBW_GLOBAL 8 + #elif (SMC_DBW == 16) + #define SMC_DBW_GLOBAL 16 + #elif (SMC_DBW == 32) + #define SMC_DBW_GLOBAL 32 + #else + #error error in SMC_DBW size + #endif + #endif + #else + #if (SMC_DBW == 8) + #define SMC_DBW_GLOBAL 8 + #elif (SMC_DBW == 16) + #define SMC_DBW_GLOBAL 16 + #elif (SMC_DBW == 32) + #define SMC_DBW_GLOBAL 32 + #else + #error error in SMC_DBW size + #endif + #endif + + #ifdef SMC_8_BIT_CHIPS_GLOBAL + #if (SMC_8_BIT_CHIPS_GLOBAL < SMC_8_BIT) + #undef SMC_8_BIT_CHIPS_GLOBAL + #if (SMC_8_BIT_CHIPS == TRUE) + #define SMC_8_BIT_CHIPS_GLOBAL TRUE + #elif (SMC_8_BIT_CHIPS == FALSE) + #define SMC_8_BIT_CHIPS_GLOBAL FALSE + #else + #error error in SMC_8_BIT_CHIPS size + #endif + #endif + #else + #if (SMC_8_BIT_CHIPS == TRUE) + #define SMC_8_BIT_CHIPS_GLOBAL TRUE + #elif (SMC_8_BIT_CHIPS == FALSE) + #define SMC_8_BIT_CHIPS_GLOBAL FALSE + #else + #error error in SMC_8_BIT_CHIPS size + #endif + #endif + + #ifdef NWAIT_MODE_GLOBAL + #if (NWAIT_MODE_GLOBAL < NWAIT_MODE) + #undef NWAIT_MODE_GLOBAL + #if (NWAIT_MODE == AVR32_SMC_EXNW_MODE_DISABLED) + #define NWAIT_MODE_GLOBAL AVR32_SMC_EXNW_MODE_DISABLED + #elif (NWAIT_MODE == AVR32_SMC_EXNW_MODE_FROZEN) + #define NWAIT_MODE_GLOBAL AVR32_SMC_EXNW_MODE_FROZEN + #else + #error error in NWAIT_MODE size + #endif + #endif + #else + #if (NWAIT_MODE == AVR32_SMC_EXNW_MODE_DISABLED) + #define NWAIT_MODE_GLOBAL AVR32_SMC_EXNW_MODE_DISABLED + #elif (NWAIT_MODE == AVR32_SMC_EXNW_MODE_FROZEN) + #define NWAIT_MODE_GLOBAL AVR32_SMC_EXNW_MODE_FROZEN + #else + #error error in NWAIT_MODE size + #endif + #endif + + + #undef EXT_SM_SIZE + #undef SMC_DBW + #undef SMC_8_BIT_CHIPS + #undef NWE_SETUP + #undef NCS_WR_SETUP + #undef NRD_SETUP + #undef NCS_RD_SETUP + #undef NCS_WR_PULSE + #undef NWE_PULSE + #undef NCS_RD_PULSE + #undef NRD_PULSE + #undef NCS_WR_HOLD + #undef NWE_HOLD + #undef NWE_CYCLE + #undef NCS_RD_HOLD + #undef NRD_CYCLE + #undef TDF_CYCLES + #undef TDF_OPTIM + #undef PAGE_MODE + #undef PAGE_SIZE + #undef NCS_CONTROLLED_READ + #undef NCS_CONTROLLED_WRITE + #undef NWAIT_MODE +#endif + +//! Whether to use the NCS4 pin +#ifdef SMC_USE_NCS4 + #include SMC_COMPONENT_CS4 + + // Setup SMC for NCS4 + SMC_CS_SETUP(4) + + #ifdef SMC_DBW_GLOBAL + #if (SMC_DBW_GLOBAL < SMC_DBW) + #undef SMC_DBW_GLOBAL + #if (SMC_DBW == 8) + #define SMC_DBW_GLOBAL 8 + #elif (SMC_DBW == 16) + #define SMC_DBW_GLOBAL 16 + #elif (SMC_DBW == 32) + #define SMC_DBW_GLOBAL 32 + #else + #error error in SMC_DBW size + #endif + #endif + #else + #if (SMC_DBW == 8) + #define SMC_DBW_GLOBAL 8 + #elif (SMC_DBW == 16) + #define SMC_DBW_GLOBAL 16 + #elif (SMC_DBW == 32) + #define SMC_DBW_GLOBAL 32 + #else + #error error in SMC_DBW size + #endif + #endif + + #ifdef SMC_8_BIT_CHIPS_GLOBAL + #if (SMC_8_BIT_CHIPS_GLOBAL < SMC_8_BIT) + #undef SMC_8_BIT_CHIPS_GLOBAL + #if (SMC_8_BIT_CHIPS == TRUE) + #define SMC_8_BIT_CHIPS_GLOBAL TRUE + #elif (SMC_8_BIT_CHIPS == FALSE) + #define SMC_8_BIT_CHIPS_GLOBAL FALSE + #else + #error error in SMC_8_BIT_CHIPS size + #endif + #endif + #else + #if (SMC_8_BIT_CHIPS == TRUE) + #define SMC_8_BIT_CHIPS_GLOBAL TRUE + #elif (SMC_8_BIT_CHIPS == FALSE) + #define SMC_8_BIT_CHIPS_GLOBAL FALSE + #else + #error error in SMC_8_BIT_CHIPS size + #endif + #endif + + #ifdef NWAIT_MODE_GLOBAL + #if (NWAIT_MODE_GLOBAL < NWAIT_MODE) + #undef NWAIT_MODE_GLOBAL + #if (NWAIT_MODE == AVR32_SMC_EXNW_MODE_DISABLED) + #define NWAIT_MODE_GLOBAL AVR32_SMC_EXNW_MODE_DISABLED + #elif (NWAIT_MODE == AVR32_SMC_EXNW_MODE_FROZEN) + #define NWAIT_MODE_GLOBAL AVR32_SMC_EXNW_MODE_FROZEN + #else + #error error in NWAIT_MODE size + #endif + #endif + #else + #if (NWAIT_MODE == AVR32_SMC_EXNW_MODE_DISABLED) + #define NWAIT_MODE_GLOBAL AVR32_SMC_EXNW_MODE_DISABLED + #elif (NWAIT_MODE == AVR32_SMC_EXNW_MODE_FROZEN) + #define NWAIT_MODE_GLOBAL AVR32_SMC_EXNW_MODE_FROZEN + #else + #error error in NWAIT_MODE size + #endif + #endif + + + #undef EXT_SM_SIZE + #undef SMC_DBW + #undef SMC_8_BIT_CHIPS + #undef NWE_SETUP + #undef NCS_WR_SETUP + #undef NRD_SETUP + #undef NCS_RD_SETUP + #undef NCS_WR_PULSE + #undef NWE_PULSE + #undef NCS_RD_PULSE + #undef NRD_PULSE + #undef NCS_WR_HOLD + #undef NWE_HOLD + #undef NWE_CYCLE + #undef NCS_RD_HOLD + #undef NRD_CYCLE + #undef TDF_CYCLES + #undef TDF_OPTIM + #undef PAGE_MODE + #undef PAGE_SIZE + #undef NCS_CONTROLLED_READ + #undef NCS_CONTROLLED_WRITE + #undef NWAIT_MODE +#endif + +//! Whether to use the NCS5 pin +#ifdef SMC_USE_NCS5 + #include SMC_COMPONENT_CS5 + + // Setup SMC for NCS5 + SMC_CS_SETUP(5) + + #ifdef SMC_DBW_GLOBAL + #if (SMC_DBW_GLOBAL < SMC_DBW) + #undef SMC_DBW_GLOBAL + #if (SMC_DBW == 8) + #define SMC_DBW_GLOBAL 8 + #elif (SMC_DBW == 16) + #define SMC_DBW_GLOBAL 16 + #elif (SMC_DBW == 32) + #define SMC_DBW_GLOBAL 32 + #else + #error error in SMC_DBW size + #endif + #endif + #else + #if (SMC_DBW == 8) + #define SMC_DBW_GLOBAL 8 + #elif (SMC_DBW == 16) + #define SMC_DBW_GLOBAL 16 + #elif (SMC_DBW == 32) + #define SMC_DBW_GLOBAL 32 + #else + #error error in SMC_DBW size + #endif + #endif + + #ifdef SMC_8_BIT_CHIPS_GLOBAL + #if (SMC_8_BIT_CHIPS_GLOBAL < SMC_8_BIT) + #undef SMC_8_BIT_CHIPS_GLOBAL + #if (SMC_8_BIT_CHIPS == TRUE) + #define SMC_8_BIT_CHIPS_GLOBAL TRUE + #elif (SMC_8_BIT_CHIPS == FALSE) + #define SMC_8_BIT_CHIPS_GLOBAL FALSE + #else + #error error in SMC_8_BIT_CHIPS size + #endif + #endif + #else + #if (SMC_8_BIT_CHIPS == TRUE) + #define SMC_8_BIT_CHIPS_GLOBAL TRUE + #elif (SMC_8_BIT_CHIPS == FALSE) + #define SMC_8_BIT_CHIPS_GLOBAL FALSE + #else + #error error in SMC_8_BIT_CHIPS size + #endif + #endif + + #ifdef NWAIT_MODE_GLOBAL + #if (NWAIT_MODE_GLOBAL < NWAIT_MODE) + #undef NWAIT_MODE_GLOBAL + #if (NWAIT_MODE == AVR32_SMC_EXNW_MODE_DISABLED) + #define NWAIT_MODE_GLOBAL AVR32_SMC_EXNW_MODE_DISABLED + #elif (NWAIT_MODE == AVR32_SMC_EXNW_MODE_FROZEN) + #define NWAIT_MODE_GLOBAL AVR32_SMC_EXNW_MODE_FROZEN + #else + #error error in NWAIT_MODE size + #endif + #endif + #else + #if (NWAIT_MODE == AVR32_SMC_EXNW_MODE_DISABLED) + #define NWAIT_MODE_GLOBAL AVR32_SMC_EXNW_MODE_DISABLED + #elif (NWAIT_MODE == AVR32_SMC_EXNW_MODE_FROZEN) + #define NWAIT_MODE_GLOBAL AVR32_SMC_EXNW_MODE_FROZEN + #else + #error error in NWAIT_MODE size + #endif + #endif + + + #undef EXT_SM_SIZE + #undef SMC_DBW + #undef SMC_8_BIT_CHIPS + #undef NWE_SETUP + #undef NCS_WR_SETUP + #undef NRD_SETUP + #undef NCS_RD_SETUP + #undef NCS_WR_PULSE + #undef NWE_PULSE + #undef NCS_RD_PULSE + #undef NRD_PULSE + #undef NCS_WR_HOLD + #undef NWE_HOLD + #undef NWE_CYCLE + #undef NCS_RD_HOLD + #undef NRD_CYCLE + #undef TDF_CYCLES + #undef TDF_OPTIM + #undef PAGE_MODE + #undef PAGE_SIZE + #undef NCS_CONTROLLED_READ + #undef NCS_CONTROLLED_WRITE + #undef NWAIT_MODE +#endif + // Put the multiplexed MCU pins used for the SM under control of the SMC. + smc_enable_muxed_pins(); +} + +/*! \brief Puts the multiplexed MCU pins used for the SMC + * + */ +static void smc_enable_muxed_pins(void) +{ + static const gpio_map_t SMC_EBI_GPIO_MAP = + { + // Enable data pins. +#ifdef EBI_DATA_0 + {ATPASTE2(EBI_DATA_0,_PIN),ATPASTE2(EBI_DATA_0,_FUNCTION)}, +#endif +#ifdef EBI_DATA_1 + {ATPASTE2(EBI_DATA_1,_PIN),ATPASTE2(EBI_DATA_1,_FUNCTION)}, +#endif +#ifdef EBI_DATA_2 + {ATPASTE2(EBI_DATA_2,_PIN),ATPASTE2(EBI_DATA_2,_FUNCTION)}, +#endif +#ifdef EBI_DATA_3 + {ATPASTE2(EBI_DATA_3,_PIN),ATPASTE2(EBI_DATA_3,_FUNCTION)}, +#endif +#ifdef EBI_DATA_4 + {ATPASTE2(EBI_DATA_4,_PIN),ATPASTE2(EBI_DATA_4,_FUNCTION)}, +#endif +#ifdef EBI_DATA_5 + {ATPASTE2(EBI_DATA_5,_PIN),ATPASTE2(EBI_DATA_5,_FUNCTION)}, +#endif +#ifdef EBI_DATA_6 + {ATPASTE2(EBI_DATA_6,_PIN),ATPASTE2(EBI_DATA_6,_FUNCTION)}, +#endif +#ifdef EBI_DATA_7 + {ATPASTE2(EBI_DATA_7,_PIN),ATPASTE2(EBI_DATA_7,_FUNCTION)}, +#endif +#ifdef EBI_DATA_8 + {ATPASTE2(EBI_DATA_8,_PIN),ATPASTE2(EBI_DATA_8,_FUNCTION)}, +#endif +#ifdef EBI_DATA_9 + {ATPASTE2(EBI_DATA_9,_PIN),ATPASTE2(EBI_DATA_9,_FUNCTION)}, +#endif +#ifdef EBI_DATA_10 + {ATPASTE2(EBI_DATA_10,_PIN),ATPASTE2(EBI_DATA_10,_FUNCTION)}, +#endif +#ifdef EBI_DATA_11 + {ATPASTE2(EBI_DATA_11,_PIN),ATPASTE2(EBI_DATA_11,_FUNCTION)}, +#endif +#ifdef EBI_DATA_12 + {ATPASTE2(EBI_DATA_12,_PIN),ATPASTE2(EBI_DATA_12,_FUNCTION)}, +#endif +#ifdef EBI_DATA_13 + {ATPASTE2(EBI_DATA_13,_PIN),ATPASTE2(EBI_DATA_13,_FUNCTION)}, +#endif +#ifdef EBI_DATA_14 + {ATPASTE2(EBI_DATA_14,_PIN),ATPASTE2(EBI_DATA_14,_FUNCTION)}, +#endif +#ifdef EBI_DATA_15 + {ATPASTE2(EBI_DATA_15,_PIN),ATPASTE2(EBI_DATA_15,_FUNCTION)}, +#endif +#ifdef EBI_DATA_16 + {ATPASTE2(EBI_DATA_16,_PIN),ATPASTE2(EBI_DATA_16,_FUNCTION)}, +#endif +#ifdef EBI_DATA_17 + {ATPASTE2(EBI_DATA_17,_PIN),ATPASTE2(EBI_DATA_17,_FUNCTION)}, +#endif +#ifdef EBI_DATA_18 + {ATPASTE2(EBI_DATA_18,_PIN),ATPASTE2(EBI_DATA_18,_FUNCTION)}, +#endif +#ifdef EBI_DATA_19 + {ATPASTE2(EBI_DATA_19,_PIN),ATPASTE2(EBI_DATA_19,_FUNCTION)}, +#endif +#ifdef EBI_DATA_20 + {ATPASTE2(EBI_DATA_20,_PIN),ATPASTE2(EBI_DATA_20,_FUNCTION)}, +#endif +#ifdef EBI_DATA_21 + {ATPASTE2(EBI_DATA_21,_PIN),ATPASTE2(EBI_DATA_21,_FUNCTION)}, +#endif +#ifdef EBI_DATA_22 + {ATPASTE2(EBI_DATA_22,_PIN),ATPASTE2(EBI_DATA_22,_FUNCTION)}, +#endif +#ifdef EBI_DATA_23 + {ATPASTE2(EBI_DATA_23,_PIN),ATPASTE2(EBI_DATA_23,_FUNCTION)}, +#endif +#ifdef EBI_DATA_24 + {ATPASTE2(EBI_DATA_24,_PIN),ATPASTE2(EBI_DATA_24,_FUNCTION)}, +#endif +#ifdef EBI_DATA_25 + {ATPASTE2(EBI_DATA_25,_PIN),ATPASTE2(EBI_DATA_25,_FUNCTION)}, +#endif +#ifdef EBI_DATA_26 + {ATPASTE2(EBI_DATA_26,_PIN),ATPASTE2(EBI_DATA_26,_FUNCTION)}, +#endif +#ifdef EBI_DATA_27 + {ATPASTE2(EBI_DATA_27,_PIN),ATPASTE2(EBI_DATA_27,_FUNCTION)}, +#endif +#ifdef EBI_DATA_28 + {ATPASTE2(EBI_DATA_28,_PIN),ATPASTE2(EBI_DATA_28,_FUNCTION)}, +#endif +#ifdef EBI_DATA_29 + {ATPASTE2(EBI_DATA_29,_PIN),ATPASTE2(EBI_DATA_29,_FUNCTION)}, +#endif +#ifdef EBI_DATA_30 + {ATPASTE2(EBI_DATA_30,_PIN),ATPASTE2(EBI_DATA_30,_FUNCTION)}, +#endif +#ifdef EBI_DATA_31 + {ATPASTE2(EBI_DATA_31,_PIN),ATPASTE2(EBI_DATA_31,_FUNCTION)}, +#endif + + // Enable address pins. +#if SMC_DBW_GLOBAL <= 8 +#ifdef EBI_ADDR_0 + {ATPASTE2(EBI_ADDR_0,_PIN),ATPASTE2(EBI_ADDR_0,_FUNCTION)}, +#endif +#endif +#if SMC_DBW_GLOBAL <= 16 +#ifdef EBI_ADDR_1 + {ATPASTE2(EBI_ADDR_1,_PIN),ATPASTE2(EBI_ADDR_1,_FUNCTION)}, +#endif +#endif + +#ifdef EBI_ADDR_2 + {ATPASTE2(EBI_ADDR_2,_PIN),ATPASTE2(EBI_ADDR_2,_FUNCTION)}, +#endif +#ifdef EBI_ADDR_3 + {ATPASTE2(EBI_ADDR_3,_PIN),ATPASTE2(EBI_ADDR_3,_FUNCTION)}, +#endif +#ifdef EBI_ADDR_4 + {ATPASTE2(EBI_ADDR_4,_PIN),ATPASTE2(EBI_ADDR_4,_FUNCTION)}, +#endif +#ifdef EBI_ADDR_5 + {ATPASTE2(EBI_ADDR_5,_PIN),ATPASTE2(EBI_ADDR_5,_FUNCTION)}, +#endif +#ifdef EBI_ADDR_6 + {ATPASTE2(EBI_ADDR_6,_PIN),ATPASTE2(EBI_ADDR_6,_FUNCTION)}, +#endif +#ifdef EBI_ADDR_7 + {ATPASTE2(EBI_ADDR_7,_PIN),ATPASTE2(EBI_ADDR_7,_FUNCTION)}, +#endif +#ifdef EBI_ADDR_8 + {ATPASTE2(EBI_ADDR_8,_PIN),ATPASTE2(EBI_ADDR_8,_FUNCTION)}, +#endif +#ifdef EBI_ADDR_9 + {ATPASTE2(EBI_ADDR_9,_PIN),ATPASTE2(EBI_ADDR_9,_FUNCTION)}, +#endif +#ifdef EBI_ADDR_10 + {ATPASTE2(EBI_ADDR_10,_PIN),ATPASTE2(EBI_ADDR_10,_FUNCTION)}, +#endif +#ifdef EBI_ADDR_11 + {ATPASTE2(EBI_ADDR_11,_PIN),ATPASTE2(EBI_ADDR_11,_FUNCTION)}, +#endif +#ifdef EBI_ADDR_12 + {ATPASTE2(EBI_ADDR_12,_PIN),ATPASTE2(EBI_ADDR_12,_FUNCTION)}, +#endif +#ifdef EBI_ADDR_13 + {ATPASTE2(EBI_ADDR_13,_PIN),ATPASTE2(EBI_ADDR_13,_FUNCTION)}, +#endif +#ifdef EBI_ADDR_14 + {ATPASTE2(EBI_ADDR_14,_PIN),ATPASTE2(EBI_ADDR_14,_FUNCTION)}, +#endif +#ifdef EBI_ADDR_15 + {ATPASTE2(EBI_ADDR_15,_PIN),ATPASTE2(EBI_ADDR_15,_FUNCTION)}, +#endif +#ifdef EBI_ADDR_16 + {ATPASTE2(EBI_ADDR_16,_PIN),ATPASTE2(EBI_ADDR_16,_FUNCTION)}, +#endif +#ifdef EBI_ADDR_17 + {ATPASTE2(EBI_ADDR_17,_PIN),ATPASTE2(EBI_ADDR_17,_FUNCTION)}, +#endif +#ifdef EBI_ADDR_18 + {ATPASTE2(EBI_ADDR_18,_PIN),ATPASTE2(EBI_ADDR_18,_FUNCTION)}, +#endif +#ifdef EBI_ADDR_19 + {ATPASTE2(EBI_ADDR_19,_PIN),ATPASTE2(EBI_ADDR_19,_FUNCTION)}, +#endif +#ifdef EBI_ADDR_20 + {ATPASTE2(EBI_ADDR_20,_PIN),ATPASTE2(EBI_ADDR_20,_FUNCTION)}, +#endif +#ifdef EBI_ADDR_21 + {ATPASTE2(EBI_ADDR_21,_PIN),ATPASTE2(EBI_ADDR_21,_FUNCTION)}, +#endif +#ifdef EBI_ADDR_22 + {ATPASTE2(EBI_ADDR_22,_PIN),ATPASTE2(EBI_ADDR_22,_FUNCTION)}, +#endif +#ifdef EBI_ADDR_23 + {ATPASTE2(EBI_ADDR_23,_PIN),ATPASTE2(EBI_ADDR_23,_FUNCTION)}, +#endif + +#if SMC_DBW_GLOBAL <= 8 + #undef SMC_8_BIT_CHIPS + #define SMC_8_BIT_CHIPS TRUE +#endif + + // Enable data mask pins. +#if !SMC_8_BIT_CHIPS_GLOBAL +#ifdef EBI_ADDR_0 + {ATPASTE2(EBI_ADDR_0,_PIN),ATPASTE2(EBI_ADDR_0,_FUNCTION)}, +#endif +#endif +#ifdef EBI_NWE0 + {ATPASTE2(EBI_NWE0,_PIN),ATPASTE2(EBI_NWE0,_FUNCTION)}, +#endif + +#if SMC_DBW_GLOBAL >= 16 + #ifdef EBI_NWE1 + {ATPASTE2(EBI_NWE1,_PIN),ATPASTE2(EBI_NWE1,_FUNCTION)}, + #endif + #if SMC_DBW_GLOBAL >= 32 + #ifdef EBI_ADDR_1 + {ATPASTE2(EBI_ADDR_1,_PIN),ATPASTE2(EBI_ADDR_1,_FUNCTION)}, + #endif + #ifdef EBI_NWE3 + {ATPASTE2(EBI_NWE3,_PIN),ATPASTE2(EBI_NWE3,_FUNCTION)}, + #endif + #endif +#endif + #ifdef EBI_NRD + {ATPASTE2(EBI_NRD,_PIN),ATPASTE2(EBI_NRD,_FUNCTION)}, + #endif + + // Enable control pins. +#if NWAIT_MODE_GLOBAL != AVR32_SMC_EXNW_MODE_DISABLED + #ifdef EBI_NWAIT + {ATPASTE2(EBI_NWAIT,_PIN),ATPASTE2(EBI_NWAIT,_FUNCTION)}, + #endif +#endif +#ifdef SMC_USE_NCS0 + #ifdef EBI_NCS_0 + {ATPASTE2(EBI_NCS_0,_PIN),ATPASTE2(EBI_NCS_0,_FUNCTION)}, + #endif +#endif +#ifdef SMC_USE_NCS1 + #ifdef EBI_NCS_1 + {ATPASTE2(EBI_NCS_1,_PIN),ATPASTE2(EBI_NCS_1,_FUNCTION)}, + #endif +#endif +#ifdef SMC_USE_NCS2 + #ifdef EBI_NCS_2 + {ATPASTE2(EBI_NCS_2,_PIN),ATPASTE2(EBI_NCS_2,_FUNCTION)}, + #endif +#endif +#ifdef SMC_USE_NCS3 + #ifdef EBI_NCS_3 + {ATPASTE2(EBI_NCS_3,_PIN),ATPASTE2(EBI_NCS_3,_FUNCTION)}, + #endif +#endif +#ifdef SMC_USE_NCS4 + #ifdef EBI_NCS_4 + {ATPASTE2(EBI_NCS_4,_PIN),ATPASTE2(EBI_NCS_4,_FUNCTION)}, + #endif +#endif +#ifdef SMC_USE_NCS5 + #ifdef EBI_NCS_5 + {ATPASTE2(EBI_NCS_5,_PIN),ATPASTE2(EBI_NCS_5,_FUNCTION)}, + #endif +#endif + }; + + gpio_enable_module(SMC_EBI_GPIO_MAP, sizeof(SMC_EBI_GPIO_MAP) / sizeof(SMC_EBI_GPIO_MAP[0])); +} + +unsigned char smc_get_cs_size(unsigned char cs) +{ + return smc_tab_cs_size[cs]; +} diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/EBI/SMC/smc.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/EBI/SMC/smc.h new file mode 100644 index 000000000..c3bdf43c4 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/EBI/SMC/smc.h @@ -0,0 +1,68 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief SMC on EBI driver for AVR32 UC3. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with a SMC module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _SMC_H_ +#define _SMC_H_ + +#include + +#include "compiler.h" +#include "conf_ebi.h" + +/*! \brief Initializes the AVR32 SMC module and the connected SRAM(s). + * \param hsb_hz HSB frequency in Hz (the HSB frequency is applied to the SMC). + * \note Each access to the SMC address space validates the mode of the SMC + * and generates an operation corresponding to this mode. + */ +extern void smc_init(unsigned long hsb_hz); + +/*! \brief Return the size of the peripheral connected . + * \param cs The chip select value + */ +extern unsigned char smc_get_cs_size(unsigned char cs); + +#endif // _SMC_H_ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/EIC/eic.c b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/EIC/eic.c new file mode 100644 index 000000000..1008c9440 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/EIC/eic.c @@ -0,0 +1,183 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief EIC driver for AVR32 UC3. + * + * AVR32 External Interrupt Controller driver module. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with an EIC module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#include +#include "compiler.h" +#include "preprocessor.h" +#include "eic.h" + + + +void eic_init(volatile avr32_eic_t *eic, const eic_options_t *opt, unsigned int nb_lines) +{ + int i; + for (i = 0; i < nb_lines; i++) + { + // Set up mode level + eic->mode = (opt[i].eic_mode == 1) ? (eic->mode | (1 << opt[i].eic_line)) : (eic->mode & ~(1 << opt[i].eic_line)); + // Set up edge type + eic->edge = (opt[i].eic_edge == 1) ? (eic->edge | (1 << opt[i].eic_line)) : (eic->edge & ~(1 << opt[i].eic_line)); + // Set up level + eic->level = (opt[i].eic_level == 1) ? (eic->level | (1 << opt[i].eic_line)) : (eic->level & ~(1 << opt[i].eic_line)); + // Set up if filter is used + eic->filter = (opt[i].eic_filter == 1) ? (eic->filter | (1 << opt[i].eic_line)) : (eic->filter & ~(1 << opt[i].eic_line)); + // Set up which mode is used : asynchronous mode/ synchronous mode + eic->async = (opt[i].eic_async == 1) ? (eic->async | (1 << opt[i].eic_line)) : (eic->async & ~(1 << opt[i].eic_line)); + } +} + +void eic_enable_lines(volatile avr32_eic_t *eic, unsigned int mask_lines) +{ + eic->en = mask_lines; +} + +void eic_enable_line(volatile avr32_eic_t *eic, unsigned int line_number) +{ + // Enable line line_number + eic->en = 1 << line_number; +} + +void eic_disable_lines(volatile avr32_eic_t *eic, unsigned int mask_lines) +{ + eic->dis = mask_lines; +} + +void eic_disable_line(volatile avr32_eic_t *eic, unsigned int line_number) +{ + // Disable line line_number + eic->dis = 1 << line_number; +} + +Bool eic_is_line_enabled(volatile avr32_eic_t *eic, unsigned int line_number) +{ + return (eic->ctrl & (1 << line_number)) != 0; +} + +void eic_enable_interrupt_lines(volatile avr32_eic_t *eic, unsigned int mask_lines) +{ + eic->ier = mask_lines; +} + +void eic_enable_interrupt_line(volatile avr32_eic_t *eic, unsigned int line_number) +{ + // Enable line line_number + eic->ier = 1 << line_number; +} + +void eic_disable_interrupt_lines(volatile avr32_eic_t *eic, unsigned int mask_lines) +{ + Bool global_interrupt_enabled = Is_global_interrupt_enabled(); + + if (global_interrupt_enabled) Disable_global_interrupt(); + eic->idr = mask_lines; + eic->imr; + if (global_interrupt_enabled) Enable_global_interrupt(); +} + +void eic_disable_interrupt_line(volatile avr32_eic_t *eic, unsigned int line_number) +{ + Bool global_interrupt_enabled = Is_global_interrupt_enabled(); + + // Disable line line_number + if (global_interrupt_enabled) Disable_global_interrupt(); + eic->idr = 1 << line_number; + eic->imr; + if (global_interrupt_enabled) Enable_global_interrupt(); +} + +Bool eic_is_interrupt_line_enabled(volatile avr32_eic_t *eic, unsigned int line_number) +{ + return (eic->imr & (1 << line_number)) != 0; +} + +void eic_clear_interrupt_lines(volatile avr32_eic_t *eic, unsigned int mask_lines) +{ + Bool global_interrupt_enabled = Is_global_interrupt_enabled(); + + if (global_interrupt_enabled) Disable_global_interrupt(); + eic->icr = mask_lines; + eic->isr; + if (global_interrupt_enabled) Enable_global_interrupt(); +} + +void eic_clear_interrupt_line(volatile avr32_eic_t *eic, unsigned int line_number) +{ + Bool global_interrupt_enabled = Is_global_interrupt_enabled(); + + // Clear line line_number + if (global_interrupt_enabled) Disable_global_interrupt(); + eic->icr = 1 << line_number; + eic->isr; + if (global_interrupt_enabled) Enable_global_interrupt(); +} + +Bool eic_is_interrupt_line_pending(volatile avr32_eic_t *eic, unsigned int line_number) +{ + return (eic->isr & (1 << line_number)) != 0; +} + +#if !defined(AVR32_EIC_301_H_INCLUDED) +void eic_enable_interrupt_scan(volatile avr32_eic_t *eic,unsigned int presc) +{ + // Enable SCAN function with PRESC value + eic->scan |= (presc << AVR32_EIC_SCAN_PRESC_OFFSET) | (1 << AVR32_EIC_SCAN_EN_OFFSET); +} + +void eic_disable_interrupt_scan(volatile avr32_eic_t *eic) +{ + // Disable SCAN function + eic->scan = 0 << AVR32_EIC_SCAN_EN_OFFSET; +} + +unsigned long eic_get_interrupt_pad_scan(volatile avr32_eic_t *eic) +{ + // Return pad number that causes interrupt + return(eic->scan>>AVR32_EIC_SCAN_PIN_OFFSET); +} +#endif \ No newline at end of file diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/EIC/eic.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/EIC/eic.h new file mode 100644 index 000000000..32641b78e --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/EIC/eic.h @@ -0,0 +1,275 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief EIC driver for AVR32 UC3. + * + * AVR32 External Interrupt Controller driver module. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with an EIC module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _EIC_H_ +#define _EIC_H_ + +#include "compiler.h" + +/*! \name External Interrupt lines + */ +//! @{ +#if (UC3A || UC3B) +#define EXT_INT0 AVR32_EIC_INT0 //!< Line 0 +#define EXT_INT1 AVR32_EIC_INT1 //!< Line 1 +#define EXT_INT2 AVR32_EIC_INT2 //!< Line 2 +#define EXT_INT3 AVR32_EIC_INT3 //!< Line 3 +#define EXT_INT4 AVR32_EIC_INT4 //!< Line 4 +#define EXT_INT5 AVR32_EIC_INT5 //!< Line 5 +#define EXT_INT6 AVR32_EIC_INT6 //!< Line 6 +#define EXT_INT7 AVR32_EIC_INT7 //!< Line 7 +#define EXT_NMI AVR32_EIC_NMI //!< Line 8 +#else +#define EXT_INT0 AVR32_EIC_INT1 //!< Line 0 +#define EXT_INT1 AVR32_EIC_INT2 //!< Line 1 +#define EXT_INT2 AVR32_EIC_INT3 //!< Line 2 +#define EXT_INT3 AVR32_EIC_INT4 //!< Line 3 +#define EXT_INT4 AVR32_EIC_INT5 //!< Line 4 +#define EXT_INT5 AVR32_EIC_INT6 //!< Line 5 +#define EXT_INT6 AVR32_EIC_INT7 //!< Line 6 +#define EXT_INT7 AVR32_EIC_INT8 //!< Line 7 +#define EXT_NMI AVR32_EIC_NMI //!< Line 8 + +#endif + +//! @} + +/*! \name Mode Trigger Options + */ +//! @{ +#define EIC_MODE_EDGE_TRIGGERED AVR32_EIC_EDGE_IRQ //!< +#define EIC_MODE_LEVEL_TRIGGERED AVR32_EIC_LEVEL_IRQ //!< +//! @} + +/*! \name Edge level Options + */ +//! @{ +#define EIC_EDGE_FALLING_EDGE AVR32_EIC_FALLING_EDGE //!< +#define EIC_EDGE_RISING_EDGE AVR32_EIC_RISING_EDGE //!< +//! @} + +/*! \name Level Options + */ +//! @{ +#define EIC_LEVEL_LOW_LEVEL AVR32_EIC_LOW_LEVEL //!< +#define EIC_LEVEL_HIGH_LEVEL AVR32_EIC_HIGH_LEVEL //!< +//! @} + +/*! \name Filter Options + */ +//! @{ +#define EIC_FILTER_ENABLED AVR32_EIC_FILTER_ON //!< +#define EIC_FILTER_DISABLED AVR32_EIC_FILTER_OFF //!< +//! @} + +/*! \name Synch Mode Options + */ +//! @{ +#define EIC_SYNCH_MODE AVR32_EIC_SYNC //!< +#define EIC_ASYNCH_MODE AVR32_EIC_USE_ASYNC //!< +//! @} + +//! Configuration parameters of the EIC module. +typedef struct +{ + //!Line + unsigned char eic_line; + + //! Mode : EDGE_LEVEL or TRIGGER_LEVEL + unsigned char eic_mode; + + //! Edge : FALLING_EDGE or RISING_EDGE + unsigned char eic_edge; + + //! Level : LOW_LEVEL or HIGH_LEVEL + unsigned char eic_level; + + //! Filter: NOT_FILTERED or FILTERED + unsigned char eic_filter; + + //! Async: SYNC mode or ASYNC + unsigned char eic_async; + +} eic_options_t; + + +/*! \brief Init the EIC driver. + * + * \param eic Base address of the EIC module + * \param opt Configuration parameters of the EIC module (see \ref eic_options_t) + * \param nb_lines Number of lines to consider, equal to size of opt buffer + */ +extern void eic_init(volatile avr32_eic_t *eic, const eic_options_t *opt, unsigned int nb_lines); + +/*! \brief Enable the EIC driver. + * + * \param eic Base address of the EIC module + * \param mask_lines Mask for current selected lines + */ +extern void eic_enable_lines(volatile avr32_eic_t *eic, unsigned int mask_lines); + +/*! \brief Enable the EIC driver. + * + * \param eic Base address of the EIC module + * \param line_number Line number to enable + */ +extern void eic_enable_line(volatile avr32_eic_t *eic, unsigned int line_number); + +/*! \brief Disable the EIC driver. + * + * \param eic Base address of the EIC module + * \param mask_lines Mask for current selected lines + */ +extern void eic_disable_lines(volatile avr32_eic_t *eic, unsigned int mask_lines); + +/*! \brief Disable the EIC driver. + * + * \param eic Base address of the EIC module + * \param line_number Line number to disable + */ +extern void eic_disable_line(volatile avr32_eic_t *eic, unsigned int line_number); + +/*! \brief Tells whether an EIC line is enabled. + * + * \param eic Base address of the EIC module + * \param line_number Line number to test + * + * \return Whether an EIC line is enabled. + */ +extern Bool eic_is_line_enabled(volatile avr32_eic_t *eic, unsigned int line_number); + +/*! \name Interrupt Control Functions + */ +//! @{ + +/*! \brief Enable the interrupt feature of the EIC. + * + * \param eic Base address of the EIC (i.e. &AVR32_EIC). + * \param mask_lines Mask for current selected lines + */ +extern void eic_enable_interrupt_lines(volatile avr32_eic_t *eic, unsigned int mask_lines); + +/*! \brief Enable the interrupt feature of the EIC. + * + * \param eic Base address of the EIC (i.e. &AVR32_EIC). + * \param line_number Line number to enable + */ +extern void eic_enable_interrupt_line(volatile avr32_eic_t *eic, unsigned int line_number); + +/*! \brief Disable the interrupt feature of the EIC. + * + * \param eic Base address of the EIC (i.e. &AVR32_EIC). + * \param mask_lines Mask for current selected lines + */ +extern void eic_disable_interrupt_lines(volatile avr32_eic_t *eic, unsigned int mask_lines); + +/*! \brief Disable the interrupt feature of the EIC. + * + * \param eic Base address of the EIC (i.e. &AVR32_EIC). + * \param line_number Line number to disable + */ +extern void eic_disable_interrupt_line(volatile avr32_eic_t *eic, unsigned int line_number); + +/*! \brief Tells whether an EIC interrupt line is enabled. + * + * \param eic Base address of the EIC module + * \param line_number Line number to test + * + * \return Whether an EIC interrupt line is enabled. + */ +extern Bool eic_is_interrupt_line_enabled(volatile avr32_eic_t *eic, unsigned int line_number); + +/*! \brief Clear the interrupt flag. + * Call this function once you've handled the interrupt. + * + * \param eic Base address of the EIC (i.e. &AVR32_EIC). + * \param mask_lines Mask for current selected lines + */ +extern void eic_clear_interrupt_lines(volatile avr32_eic_t *eic, unsigned int mask_lines); + +/*! \brief Clear the interrupt flag. + * Call this function once you've handled the interrupt. + * + * \param eic Base address of the EIC (i.e. &AVR32_EIC). + * \param line_number Line number to clear + */ +extern void eic_clear_interrupt_line(volatile avr32_eic_t *eic, unsigned int line_number); + +/*! \brief Tells whether an EIC interrupt line is pending. + * + * \param eic Base address of the EIC module + * \param line_number Line number to test + * + * \return Whether an EIC interrupt line is pending. + */ +extern Bool eic_is_interrupt_line_pending(volatile avr32_eic_t *eic, unsigned int line_number); + +/*! \brief Enable the interrupt scan feature of the EIC. + * + * \param eic Base address of the EIC (i.e. &AVR32_EIC). + * \param presc Prescale select for the keypad scan rate in the range [0,31]. + */ +extern void eic_enable_interrupt_scan(volatile avr32_eic_t *eic, unsigned int presc); + +/*! \brief Disable the interrupt scan feature of the EIC. + * + * \param eic Base address of the EIC (i.e. &AVR32_EIC). + */ +extern void eic_disable_interrupt_scan(volatile avr32_eic_t *eic); + +/*! \brief Return scan pad number that causes interrupt. + * + * \param eic Base address of the EIC (i.e. &AVR32_EIC). + */ +extern unsigned long eic_get_interrupt_pad_scan(volatile avr32_eic_t *eic); + +//! @} + + +#endif // _EIC_H_ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC/flashc.c b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC/flashc.c new file mode 100644 index 000000000..2eee15c0a --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC/flashc.c @@ -0,0 +1,1117 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief FLASHC driver for AVR32 UC3. + * + * AVR32 Flash Controller driver module. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with a FLASHC module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#include +#include +#include "compiler.h" +#include "flashc.h" + + +/*! \name FLASHC Writable Bit-Field Registers + */ +//! @{ + +typedef union +{ + unsigned long fcr; + avr32_flashc_fcr_t FCR; +} u_avr32_flashc_fcr_t; + +typedef union +{ + unsigned long fcmd; + avr32_flashc_fcmd_t FCMD; +} u_avr32_flashc_fcmd_t; + +//! @} + + +/*! \name Flash Properties + */ +//! @{ + + +unsigned int flashc_get_flash_size(void) +{ +#if (defined AVR32_FLASHC_300_H_INCLUDED) + static const unsigned int FLASH_SIZE[1 << AVR32_FLASHC_PR_FSZ_SIZE] = + { + 32 << 10, + 64 << 10, + 128 << 10, + 256 << 10, + 384 << 10, + 512 << 10, + 768 << 10, + 1024 << 10 + }; + return FLASH_SIZE[(AVR32_FLASHC.pr & AVR32_FLASHC_PR_FSZ_MASK) >> AVR32_FLASHC_PR_FSZ_OFFSET]; +#else + static const unsigned int FLASH_SIZE[1 << AVR32_FLASHC_FSR_FSZ_SIZE] = + { + 32 << 10, + 64 << 10, + 128 << 10, + 256 << 10, + 384 << 10, + 512 << 10, + 768 << 10, + 1024 << 10 + }; + return FLASH_SIZE[(AVR32_FLASHC.fsr & AVR32_FLASHC_FSR_FSZ_MASK) >> AVR32_FLASHC_FSR_FSZ_OFFSET]; +#endif +} + + +unsigned int flashc_get_page_count(void) +{ + return flashc_get_flash_size() / AVR32_FLASHC_PAGE_SIZE; +} + + +unsigned int flashc_get_page_count_per_region(void) +{ + return flashc_get_page_count() / AVR32_FLASHC_REGIONS; +} + + +unsigned int flashc_get_page_region(int page_number) +{ + return ((page_number >= 0) ? page_number : flashc_get_page_number()) / flashc_get_page_count_per_region(); +} + + +unsigned int flashc_get_region_first_page_number(unsigned int region) +{ + return region * flashc_get_page_count_per_region(); +} + + +//! @} + + +/*! \name FLASHC Control + */ +//! @{ + + +unsigned int flashc_get_wait_state(void) +{ + return (AVR32_FLASHC.fcr & AVR32_FLASHC_FCR_FWS_MASK) >> AVR32_FLASHC_FCR_FWS_OFFSET; +} + + +void flashc_set_wait_state(unsigned int wait_state) +{ + u_avr32_flashc_fcr_t u_avr32_flashc_fcr = {AVR32_FLASHC.fcr}; + u_avr32_flashc_fcr.FCR.fws = wait_state; + AVR32_FLASHC.fcr = u_avr32_flashc_fcr.fcr; +} + + +Bool flashc_is_ready_int_enabled(void) +{ + return ((AVR32_FLASHC.fcr & AVR32_FLASHC_FCR_FRDY_MASK) != 0); +} + + +void flashc_enable_ready_int(Bool enable) +{ + u_avr32_flashc_fcr_t u_avr32_flashc_fcr = {AVR32_FLASHC.fcr}; + u_avr32_flashc_fcr.FCR.frdy = (enable != FALSE); + AVR32_FLASHC.fcr = u_avr32_flashc_fcr.fcr; +} + + +Bool flashc_is_lock_error_int_enabled(void) +{ + return ((AVR32_FLASHC.fcr & AVR32_FLASHC_FCR_LOCKE_MASK) != 0); +} + + +void flashc_enable_lock_error_int(Bool enable) +{ + u_avr32_flashc_fcr_t u_avr32_flashc_fcr = {AVR32_FLASHC.fcr}; + u_avr32_flashc_fcr.FCR.locke = (enable != FALSE); + AVR32_FLASHC.fcr = u_avr32_flashc_fcr.fcr; +} + + +Bool flashc_is_prog_error_int_enabled(void) +{ + return ((AVR32_FLASHC.fcr & AVR32_FLASHC_FCR_PROGE_MASK) != 0); +} + + +void flashc_enable_prog_error_int(Bool enable) +{ + u_avr32_flashc_fcr_t u_avr32_flashc_fcr = {AVR32_FLASHC.fcr}; + u_avr32_flashc_fcr.FCR.proge = (enable != FALSE); + AVR32_FLASHC.fcr = u_avr32_flashc_fcr.fcr; +} + + +//! @} + + +/*! \name FLASHC Status + */ +//! @{ + + +Bool flashc_is_ready(void) +{ + return ((AVR32_FLASHC.fsr & AVR32_FLASHC_FSR_FRDY_MASK) != 0); +} + + +void flashc_default_wait_until_ready(void) +{ + while (!flashc_is_ready()); +} + + +void (*volatile flashc_wait_until_ready)(void) = flashc_default_wait_until_ready; + + +/*! \brief Gets the error status of the FLASHC. + * + * \return The error status of the FLASHC built up from + * \c AVR32_FLASHC_FSR_LOCKE_MASK and \c AVR32_FLASHC_FSR_PROGE_MASK. + * + * \warning This hardware error status is cleared by all functions reading the + * Flash Status Register (FSR). This function is therefore not part of + * the driver's API which instead presents \ref flashc_is_lock_error + * and \ref flashc_is_programming_error. + */ +static unsigned int flashc_get_error_status(void) +{ + return AVR32_FLASHC.fsr & (AVR32_FLASHC_FSR_LOCKE_MASK | + AVR32_FLASHC_FSR_PROGE_MASK); +} + + +//! Sticky error status of the FLASHC. +//! This variable is updated by functions that issue FLASHC commands. It +//! contains the cumulated FLASHC error status of all the FLASHC commands issued +//! by a function. +static unsigned int flashc_error_status = 0; + + +Bool flashc_is_lock_error(void) +{ + return ((flashc_error_status & AVR32_FLASHC_FSR_LOCKE_MASK) != 0); +} + + +Bool flashc_is_programming_error(void) +{ + return ((flashc_error_status & AVR32_FLASHC_FSR_PROGE_MASK) != 0); +} + + +//! @} + + +/*! \name FLASHC Command Control + */ +//! @{ + + +unsigned int flashc_get_command(void) +{ + return (AVR32_FLASHC.fcmd & AVR32_FLASHC_FCMD_CMD_MASK) >> AVR32_FLASHC_FCMD_CMD_OFFSET; +} + + +unsigned int flashc_get_page_number(void) +{ + return (AVR32_FLASHC.fcmd & AVR32_FLASHC_FCMD_PAGEN_MASK) >> AVR32_FLASHC_FCMD_PAGEN_OFFSET; +} + + +void flashc_issue_command(unsigned int command, int page_number) +{ + u_avr32_flashc_fcmd_t u_avr32_flashc_fcmd; + flashc_wait_until_ready(); + u_avr32_flashc_fcmd.fcmd = AVR32_FLASHC.fcmd; + u_avr32_flashc_fcmd.FCMD.cmd = command; + if (page_number >= 0) u_avr32_flashc_fcmd.FCMD.pagen = page_number; + u_avr32_flashc_fcmd.FCMD.key = AVR32_FLASHC_FCMD_KEY_KEY; + AVR32_FLASHC.fcmd = u_avr32_flashc_fcmd.fcmd; + flashc_error_status = flashc_get_error_status(); + flashc_wait_until_ready(); +} + + +//! @} + + +/*! \name FLASHC Global Commands + */ +//! @{ + + +void flashc_no_operation(void) +{ + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_NOP, -1); +} + + +void flashc_erase_all(void) +{ + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_EA, -1); +} + + +//! @} + + +/*! \name FLASHC Protection Mechanisms + */ +//! @{ + + +Bool flashc_is_security_bit_active(void) +{ + return ((AVR32_FLASHC.fsr & AVR32_FLASHC_FSR_SECURITY_MASK) != 0); +} + + +void flashc_activate_security_bit(void) +{ + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_SSB, -1); +} + + +unsigned int flashc_get_bootloader_protected_size(void) +{ + unsigned int bootprot = (1 << AVR32_FLASHC_FGPFRLO_BOOTPROT_SIZE) - 1 - + flashc_read_gp_fuse_bitfield(AVR32_FLASHC_FGPFRLO_BOOTPROT_OFFSET, + AVR32_FLASHC_FGPFRLO_BOOTPROT_SIZE); + return (bootprot) ? AVR32_FLASHC_PAGE_SIZE << bootprot : 0; +} + + +unsigned int flashc_set_bootloader_protected_size(unsigned int bootprot_size) +{ + flashc_set_gp_fuse_bitfield(AVR32_FLASHC_FGPFRLO_BOOTPROT_OFFSET, + AVR32_FLASHC_FGPFRLO_BOOTPROT_SIZE, + (1 << AVR32_FLASHC_FGPFRLO_BOOTPROT_SIZE) - 1 - + ((bootprot_size) ? + 32 - clz((((min(max(bootprot_size, AVR32_FLASHC_PAGE_SIZE << 1), + AVR32_FLASHC_PAGE_SIZE << + ((1 << AVR32_FLASHC_FGPFRLO_BOOTPROT_SIZE) - 1)) + + AVR32_FLASHC_PAGE_SIZE - 1) / + AVR32_FLASHC_PAGE_SIZE) << 1) - 1) - 1 : + 0)); + return flashc_get_bootloader_protected_size(); +} + + +Bool flashc_is_external_privileged_fetch_locked(void) +{ + return (!flashc_read_gp_fuse_bit(AVR32_FLASHC_FGPFRLO_EPFL_OFFSET)); +} + + +void flashc_lock_external_privileged_fetch(Bool lock) +{ + flashc_set_gp_fuse_bit(AVR32_FLASHC_FGPFRLO_EPFL_OFFSET, !lock); +} + + +Bool flashc_is_page_region_locked(int page_number) +{ + return flashc_is_region_locked(flashc_get_page_region(page_number)); +} + + +Bool flashc_is_region_locked(unsigned int region) +{ + return ((AVR32_FLASHC.fsr & AVR32_FLASHC_FSR_LOCK0_MASK << (region & (AVR32_FLASHC_REGIONS - 1))) != 0); +} + + +void flashc_lock_page_region(int page_number, Bool lock) +{ + flashc_issue_command((lock) ? AVR32_FLASHC_FCMD_CMD_LP : AVR32_FLASHC_FCMD_CMD_UP, page_number); +} + + +void flashc_lock_region(unsigned int region, Bool lock) +{ + flashc_lock_page_region(flashc_get_region_first_page_number(region), lock); +} + + +void flashc_lock_all_regions(Bool lock) +{ + unsigned int error_status = 0; + unsigned int region = AVR32_FLASHC_REGIONS; + while (region) + { + flashc_lock_region(--region, lock); + error_status |= flashc_error_status; + } + flashc_error_status = error_status; +} + + +//! @} + + +/*! \name Access to General-Purpose Fuses + */ +//! @{ + + +Bool flashc_read_gp_fuse_bit(unsigned int gp_fuse_bit) +{ + return ((flashc_read_all_gp_fuses() & 1ULL << (gp_fuse_bit & 0x3F)) != 0); +} + + +U64 flashc_read_gp_fuse_bitfield(unsigned int pos, unsigned int width) +{ + return flashc_read_all_gp_fuses() >> (pos & 0x3F) & ((1ULL << min(width, 64)) - 1); +} + + +U8 flashc_read_gp_fuse_byte(unsigned int gp_fuse_byte) +{ + return flashc_read_all_gp_fuses() >> ((gp_fuse_byte & 0x07) << 3); +} + + +U64 flashc_read_all_gp_fuses(void) +{ + return AVR32_FLASHC.fgpfrlo | (U64)AVR32_FLASHC.fgpfrhi << 32; +} + + +Bool flashc_erase_gp_fuse_bit(unsigned int gp_fuse_bit, Bool check) +{ + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_EGPB, gp_fuse_bit & 0x3F); + return (check) ? flashc_read_gp_fuse_bit(gp_fuse_bit) : TRUE; +} + + +Bool flashc_erase_gp_fuse_bitfield(unsigned int pos, unsigned int width, Bool check) +{ + unsigned int error_status = 0; + unsigned int gp_fuse_bit; + pos &= 0x3F; + width = min(width, 64); + for (gp_fuse_bit = pos; gp_fuse_bit < pos + width; gp_fuse_bit++) + { + flashc_erase_gp_fuse_bit(gp_fuse_bit, FALSE); + error_status |= flashc_error_status; + } + flashc_error_status = error_status; + return (check) ? (flashc_read_gp_fuse_bitfield(pos, width) == (1ULL << width) - 1) : TRUE; +} + + +Bool flashc_erase_gp_fuse_byte(unsigned int gp_fuse_byte, Bool check) +{ + unsigned int error_status; + unsigned int current_gp_fuse_byte; + U64 value = flashc_read_all_gp_fuses(); + flashc_erase_all_gp_fuses(FALSE); + error_status = flashc_error_status; + for (current_gp_fuse_byte = 0; current_gp_fuse_byte < 8; current_gp_fuse_byte++, value >>= 8) + { + if (current_gp_fuse_byte != gp_fuse_byte) + { + flashc_write_gp_fuse_byte(current_gp_fuse_byte, value); + error_status |= flashc_error_status; + } + } + flashc_error_status = error_status; + return (check) ? (flashc_read_gp_fuse_byte(gp_fuse_byte) == 0xFF) : TRUE; +} + + +Bool flashc_erase_all_gp_fuses(Bool check) +{ + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_EAGPF, -1); + return (check) ? (flashc_read_all_gp_fuses() == 0xFFFFFFFFFFFFFFFFULL) : TRUE; +} + + +void flashc_write_gp_fuse_bit(unsigned int gp_fuse_bit, Bool value) +{ + if (!value) + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_WGPB, gp_fuse_bit & 0x3F); +} + + +void flashc_write_gp_fuse_bitfield(unsigned int pos, unsigned int width, U64 value) +{ + unsigned int error_status = 0; + unsigned int gp_fuse_bit; + pos &= 0x3F; + width = min(width, 64); + for (gp_fuse_bit = pos; gp_fuse_bit < pos + width; gp_fuse_bit++, value >>= 1) + { + flashc_write_gp_fuse_bit(gp_fuse_bit, value & 0x01); + error_status |= flashc_error_status; + } + flashc_error_status = error_status; +} + + +void flashc_write_gp_fuse_byte(unsigned int gp_fuse_byte, U8 value) +{ + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_PGPFB, (gp_fuse_byte & 0x07) | value << 3); +} + + +void flashc_write_all_gp_fuses(U64 value) +{ + unsigned int error_status = 0; + unsigned int gp_fuse_byte; + for (gp_fuse_byte = 0; gp_fuse_byte < 8; gp_fuse_byte++, value >>= 8) + { + flashc_write_gp_fuse_byte(gp_fuse_byte, value); + error_status |= flashc_error_status; + } + flashc_error_status = error_status; +} + + +void flashc_set_gp_fuse_bit(unsigned int gp_fuse_bit, Bool value) +{ + if (value) + flashc_erase_gp_fuse_bit(gp_fuse_bit, FALSE); + else + flashc_write_gp_fuse_bit(gp_fuse_bit, FALSE); +} + + +void flashc_set_gp_fuse_bitfield(unsigned int pos, unsigned int width, U64 value) +{ + unsigned int error_status = 0; + unsigned int gp_fuse_bit; + pos &= 0x3F; + width = min(width, 64); + for (gp_fuse_bit = pos; gp_fuse_bit < pos + width; gp_fuse_bit++, value >>= 1) + { + flashc_set_gp_fuse_bit(gp_fuse_bit, value & 0x01); + error_status |= flashc_error_status; + } + flashc_error_status = error_status; +} + + +void flashc_set_gp_fuse_byte(unsigned int gp_fuse_byte, U8 value) +{ + unsigned int error_status; + switch (value) + { + case 0xFF: + flashc_erase_gp_fuse_byte(gp_fuse_byte, FALSE); + break; + case 0x00: + flashc_write_gp_fuse_byte(gp_fuse_byte, 0x00); + break; + default: + flashc_erase_gp_fuse_byte(gp_fuse_byte, FALSE); + error_status = flashc_error_status; + flashc_write_gp_fuse_byte(gp_fuse_byte, value); + flashc_error_status |= error_status; + } +} + + +void flashc_set_all_gp_fuses(U64 value) +{ + unsigned int error_status; + switch (value) + { + case 0xFFFFFFFFFFFFFFFFULL: + flashc_erase_all_gp_fuses(FALSE); + break; + case 0x0000000000000000ULL: + flashc_write_all_gp_fuses(0x0000000000000000ULL); + break; + default: + flashc_erase_all_gp_fuses(FALSE); + error_status = flashc_error_status; + flashc_write_all_gp_fuses(value); + flashc_error_status |= error_status; + } +} + + +//! @} + + +/*! \name Access to Flash Pages + */ +//! @{ + + +void flashc_clear_page_buffer(void) +{ + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_CPB, -1); +} + + +Bool flashc_is_page_erased(void) +{ + return ((AVR32_FLASHC.fsr & AVR32_FLASHC_FSR_QPRR_MASK) != 0); +} + + +Bool flashc_quick_page_read(int page_number) +{ + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_QPR, page_number); + return flashc_is_page_erased(); +} + + +Bool flashc_erase_page(int page_number, Bool check) +{ + Bool page_erased = TRUE; + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_EP, page_number); + if (check) + { + unsigned int error_status = flashc_error_status; + page_erased = flashc_quick_page_read(-1); + flashc_error_status |= error_status; + } + return page_erased; +} + + +Bool flashc_erase_all_pages(Bool check) +{ + Bool all_pages_erased = TRUE; + unsigned int error_status = 0; + unsigned int page_number = flashc_get_page_count(); + while (page_number) + { + all_pages_erased &= flashc_erase_page(--page_number, check); + error_status |= flashc_error_status; + } + flashc_error_status = error_status; + return all_pages_erased; +} + + +void flashc_write_page(int page_number) +{ + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_WP, page_number); +} + + +Bool flashc_quick_user_page_read(void) +{ + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_QPRUP, -1); + return flashc_is_page_erased(); +} + + +Bool flashc_erase_user_page(Bool check) +{ + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_EUP, -1); + return (check) ? flashc_quick_user_page_read() : TRUE; +} + + +void flashc_write_user_page(void) +{ + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_WUP, -1); +} + + +volatile void *flashc_memset8(volatile void *dst, U8 src, size_t nbytes, Bool erase) +{ + return flashc_memset16(dst, src | (U16)src << 8, nbytes, erase); +} + + +volatile void *flashc_memset16(volatile void *dst, U16 src, size_t nbytes, Bool erase) +{ + return flashc_memset32(dst, src | (U32)src << 16, nbytes, erase); +} + + +volatile void *flashc_memset32(volatile void *dst, U32 src, size_t nbytes, Bool erase) +{ + return flashc_memset64(dst, src | (U64)src << 32, nbytes, erase); +} + + +volatile void *flashc_memset64(volatile void *dst, U64 src, size_t nbytes, Bool erase) +{ + // Use aggregated pointers to have several alignments available for a same address. + UnionCVPtr flash_array_end; + UnionVPtr dest; + Union64 source = {0}; + StructCVPtr dest_end; + UnionCVPtr flash_page_source_end; + Bool incomplete_flash_page_end; + Union64 flash_dword; + UnionVPtr tmp; + unsigned int error_status = 0; + unsigned int i; + + // Reformat arguments. + flash_array_end.u8ptr = AVR32_FLASH + flashc_get_flash_size(); + dest.u8ptr = dst; + for (i = (Get_align((U32)dest.u8ptr, sizeof(U64)) - 1) & (sizeof(U64) - 1); + src; i = (i - 1) & (sizeof(U64) - 1)) + { + source.u8[i] = src; + src >>= 8; + } + dest_end.u8ptr = dest.u8ptr + nbytes; + + // If destination is outside flash, go to next flash page if any. + if (dest.u8ptr < AVR32_FLASH) + { + dest.u8ptr = AVR32_FLASH; + } + else if (flash_array_end.u8ptr <= dest.u8ptr && dest.u8ptr < AVR32_FLASHC_USER_PAGE) + { + dest.u8ptr = AVR32_FLASHC_USER_PAGE; + } + + // If end of destination is outside flash, move it to the end of the previous flash page if any. + if (dest_end.u8ptr > AVR32_FLASHC_USER_PAGE + AVR32_FLASHC_USER_PAGE_SIZE) + { + dest_end.u8ptr = AVR32_FLASHC_USER_PAGE + AVR32_FLASHC_USER_PAGE_SIZE; + } + else if (AVR32_FLASHC_USER_PAGE >= dest_end.u8ptr && dest_end.u8ptr > flash_array_end.u8ptr) + { + dest_end.u8ptr = flash_array_end.u8ptr; + } + + // Align each end of destination pointer with its natural boundary. + dest_end.u16ptr = (U16 *)Align_down((U32)dest_end.u8ptr, sizeof(U16)); + dest_end.u32ptr = (U32 *)Align_down((U32)dest_end.u16ptr, sizeof(U32)); + dest_end.u64ptr = (U64 *)Align_down((U32)dest_end.u32ptr, sizeof(U64)); + + // While end of destination is not reached... + while (dest.u8ptr < dest_end.u8ptr) + { + // Clear the page buffer in order to prepare data for a flash page write. + flashc_clear_page_buffer(); + error_status |= flashc_error_status; + + // Determine where the source data will end in the current flash page. + flash_page_source_end.u64ptr = + (U64 *)min((U32)dest_end.u64ptr, + Align_down((U32)dest.u8ptr, AVR32_FLASHC_PAGE_SIZE) + AVR32_FLASHC_PAGE_SIZE); + + // Determine if the current destination page has an incomplete end. + incomplete_flash_page_end = (Align_down((U32)dest.u8ptr, AVR32_FLASHC_PAGE_SIZE) >= + Align_down((U32)dest_end.u8ptr, AVR32_FLASHC_PAGE_SIZE)); + + // Use a flash double-word buffer to manage unaligned accesses. + flash_dword.u64 = source.u64; + + // If destination does not point to the beginning of the current flash page... + if (!Test_align((U32)dest.u8ptr, AVR32_FLASHC_PAGE_SIZE)) + { + // Fill the beginning of the page buffer with the current flash page data. + // This is required by the hardware, even if page erase is not requested, + // in order to be able to write successfully to erased parts of flash + // pages that have already been written to. + for (tmp.u8ptr = (U8 *)Align_down((U32)dest.u8ptr, AVR32_FLASHC_PAGE_SIZE); + tmp.u64ptr < (U64 *)Align_down((U32)dest.u8ptr, sizeof(U64)); + tmp.u64ptr++) + *tmp.u64ptr = *tmp.u64ptr; + + // If destination is not 64-bit aligned... + if (!Test_align((U32)dest.u8ptr, sizeof(U64))) + { + // Fill the beginning of the flash double-word buffer with the current + // flash page data. + // This is required by the hardware, even if page erase is not + // requested, in order to be able to write successfully to erased parts + // of flash pages that have already been written to. + for (i = 0; i < Get_align((U32)dest.u8ptr, sizeof(U64)); i++) + flash_dword.u8[i] = *tmp.u8ptr++; + + // Align the destination pointer with its 64-bit boundary. + dest.u64ptr = (U64 *)Align_down((U32)dest.u8ptr, sizeof(U64)); + + // If the current destination double-word is not the last one... + if (dest.u64ptr < dest_end.u64ptr) + { + // Write the flash double-word buffer to the page buffer and reinitialize it. + *dest.u64ptr++ = flash_dword.u64; + flash_dword.u64 = source.u64; + } + } + } + + // Write the source data to the page buffer with 64-bit alignment. + for (i = flash_page_source_end.u64ptr - dest.u64ptr; i; i--) + *dest.u64ptr++ = source.u64; + + // If the current destination page has an incomplete end... + if (incomplete_flash_page_end) + { + // This is required by the hardware, even if page erase is not requested, + // in order to be able to write successfully to erased parts of flash + // pages that have already been written to. + { + tmp.u8ptr = (volatile U8 *)dest_end.u8ptr; + + // If end of destination is not 64-bit aligned... + if (!Test_align((U32)dest_end.u8ptr, sizeof(U64))) + { + // Fill the end of the flash double-word buffer with the current flash page data. + for (i = Get_align((U32)dest_end.u8ptr, sizeof(U64)); i < sizeof(U64); i++) + flash_dword.u8[i] = *tmp.u8ptr++; + + // Write the flash double-word buffer to the page buffer. + *dest.u64ptr++ = flash_dword.u64; + } + + // Fill the end of the page buffer with the current flash page data. + for (; !Test_align((U32)tmp.u64ptr, AVR32_FLASHC_PAGE_SIZE); tmp.u64ptr++) + *tmp.u64ptr = *tmp.u64ptr; + } + } + + // If the current flash page is in the flash array... + if (dest.u8ptr <= AVR32_FLASHC_USER_PAGE) + { + // Erase the current page if requested and write it from the page buffer. + if (erase) + { + flashc_erase_page(-1, FALSE); + error_status |= flashc_error_status; + } + flashc_write_page(-1); + error_status |= flashc_error_status; + + // If the end of the flash array is reached, go to the User page. + if (dest.u8ptr >= flash_array_end.u8ptr) + dest.u8ptr = AVR32_FLASHC_USER_PAGE; + } + // If the current flash page is the User page... + else + { + // Erase the User page if requested and write it from the page buffer. + if (erase) + { + flashc_erase_user_page(FALSE); + error_status |= flashc_error_status; + } + flashc_write_user_page(); + error_status |= flashc_error_status; + } + } + + // Update the FLASHC error status. + flashc_error_status = error_status; + + // Return the initial destination pointer as the standard memset function does. + return dst; +} + + +volatile void *flashc_memcpy(volatile void *dst, const void *src, size_t nbytes, Bool erase) +{ + // Use aggregated pointers to have several alignments available for a same address. + UnionCVPtr flash_array_end; + UnionVPtr dest; + UnionCPtr source; + StructCVPtr dest_end; + UnionCVPtr flash_page_source_end; + Bool incomplete_flash_page_end; + Union64 flash_dword; + Bool flash_dword_pending = FALSE; + UnionVPtr tmp; + unsigned int error_status = 0; + unsigned int i, j; + + // Reformat arguments. + flash_array_end.u8ptr = AVR32_FLASH + flashc_get_flash_size(); + dest.u8ptr = dst; + source.u8ptr = src; + dest_end.u8ptr = dest.u8ptr + nbytes; + + // If destination is outside flash, go to next flash page if any. + if (dest.u8ptr < AVR32_FLASH) + { + source.u8ptr += AVR32_FLASH - dest.u8ptr; + dest.u8ptr = AVR32_FLASH; + } + else if (flash_array_end.u8ptr <= dest.u8ptr && dest.u8ptr < AVR32_FLASHC_USER_PAGE) + { + source.u8ptr += AVR32_FLASHC_USER_PAGE - dest.u8ptr; + dest.u8ptr = AVR32_FLASHC_USER_PAGE; + } + + // If end of destination is outside flash, move it to the end of the previous flash page if any. + if (dest_end.u8ptr > AVR32_FLASHC_USER_PAGE + AVR32_FLASHC_USER_PAGE_SIZE) + { + dest_end.u8ptr = AVR32_FLASHC_USER_PAGE + AVR32_FLASHC_USER_PAGE_SIZE; + } + else if (AVR32_FLASHC_USER_PAGE >= dest_end.u8ptr && dest_end.u8ptr > flash_array_end.u8ptr) + { + dest_end.u8ptr = flash_array_end.u8ptr; + } + + // Align each end of destination pointer with its natural boundary. + dest_end.u16ptr = (U16 *)Align_down((U32)dest_end.u8ptr, sizeof(U16)); + dest_end.u32ptr = (U32 *)Align_down((U32)dest_end.u16ptr, sizeof(U32)); + dest_end.u64ptr = (U64 *)Align_down((U32)dest_end.u32ptr, sizeof(U64)); + + // While end of destination is not reached... + while (dest.u8ptr < dest_end.u8ptr) + { + // Clear the page buffer in order to prepare data for a flash page write. + flashc_clear_page_buffer(); + error_status |= flashc_error_status; + + // Determine where the source data will end in the current flash page. + flash_page_source_end.u64ptr = + (U64 *)min((U32)dest_end.u64ptr, + Align_down((U32)dest.u8ptr, AVR32_FLASHC_PAGE_SIZE) + AVR32_FLASHC_PAGE_SIZE); + + // Determine if the current destination page has an incomplete end. + incomplete_flash_page_end = (Align_down((U32)dest.u8ptr, AVR32_FLASHC_PAGE_SIZE) >= + Align_down((U32)dest_end.u8ptr, AVR32_FLASHC_PAGE_SIZE)); + + // If destination does not point to the beginning of the current flash page... + if (!Test_align((U32)dest.u8ptr, AVR32_FLASHC_PAGE_SIZE)) + { + // Fill the beginning of the page buffer with the current flash page data. + // This is required by the hardware, even if page erase is not requested, + // in order to be able to write successfully to erased parts of flash + // pages that have already been written to. + for (tmp.u8ptr = (U8 *)Align_down((U32)dest.u8ptr, AVR32_FLASHC_PAGE_SIZE); + tmp.u64ptr < (U64 *)Align_down((U32)dest.u8ptr, sizeof(U64)); + tmp.u64ptr++) + *tmp.u64ptr = *tmp.u64ptr; + + // If destination is not 64-bit aligned... + if (!Test_align((U32)dest.u8ptr, sizeof(U64))) + { + // Fill the beginning of the flash double-word buffer with the current + // flash page data. + // This is required by the hardware, even if page erase is not + // requested, in order to be able to write successfully to erased parts + // of flash pages that have already been written to. + for (i = 0; i < Get_align((U32)dest.u8ptr, sizeof(U64)); i++) + flash_dword.u8[i] = *tmp.u8ptr++; + + // Fill the end of the flash double-word buffer with the source data. + for (; i < sizeof(U64); i++) + flash_dword.u8[i] = *source.u8ptr++; + + // Align the destination pointer with its 64-bit boundary. + dest.u64ptr = (U64 *)Align_down((U32)dest.u8ptr, sizeof(U64)); + + // If the current destination double-word is not the last one... + if (dest.u64ptr < dest_end.u64ptr) + { + // Write the flash double-word buffer to the page buffer. + *dest.u64ptr++ = flash_dword.u64; + } + // If the current destination double-word is the last one, the flash + // double-word buffer must be kept for later. + else flash_dword_pending = TRUE; + } + } + + // Read the source data with the maximal possible alignment and write it to + // the page buffer with 64-bit alignment. + switch (Get_align((U32)source.u8ptr, sizeof(U32))) + { + case 0: + for (i = flash_page_source_end.u64ptr - dest.u64ptr; i; i--) + *dest.u64ptr++ = *source.u64ptr++; + break; + + case sizeof(U16): + for (i = flash_page_source_end.u64ptr - dest.u64ptr; i; i--) + { + for (j = 0; j < sizeof(U64) / sizeof(U16); j++) flash_dword.u16[j] = *source.u16ptr++; + *dest.u64ptr++ = flash_dword.u64; + } + break; + + default: + for (i = flash_page_source_end.u64ptr - dest.u64ptr; i; i--) + { + for (j = 0; j < sizeof(U64); j++) flash_dword.u8[j] = *source.u8ptr++; + *dest.u64ptr++ = flash_dword.u64; + } + } + + // If the current destination page has an incomplete end... + if (incomplete_flash_page_end) + { + // If the flash double-word buffer is in use, do not initialize it. + if (flash_dword_pending) i = Get_align((U32)dest_end.u8ptr, sizeof(U64)); + // If the flash double-word buffer is free... + else + { + // Fill the beginning of the flash double-word buffer with the source data. + for (i = 0; i < Get_align((U32)dest_end.u8ptr, sizeof(U64)); i++) + flash_dword.u8[i] = *source.u8ptr++; + } + + // This is required by the hardware, even if page erase is not requested, + // in order to be able to write successfully to erased parts of flash + // pages that have already been written to. + { + tmp.u8ptr = (volatile U8 *)dest_end.u8ptr; + + // If end of destination is not 64-bit aligned... + if (!Test_align((U32)dest_end.u8ptr, sizeof(U64))) + { + // Fill the end of the flash double-word buffer with the current flash page data. + for (; i < sizeof(U64); i++) + flash_dword.u8[i] = *tmp.u8ptr++; + + // Write the flash double-word buffer to the page buffer. + *dest.u64ptr++ = flash_dword.u64; + } + + // Fill the end of the page buffer with the current flash page data. + for (; !Test_align((U32)tmp.u64ptr, AVR32_FLASHC_PAGE_SIZE); tmp.u64ptr++) + *tmp.u64ptr = *tmp.u64ptr; + } + } + + // If the current flash page is in the flash array... + if (dest.u8ptr <= AVR32_FLASHC_USER_PAGE) + { + // Erase the current page if requested and write it from the page buffer. + if (erase) + { + flashc_erase_page(-1, FALSE); + error_status |= flashc_error_status; + } + flashc_write_page(-1); + error_status |= flashc_error_status; + + // If the end of the flash array is reached, go to the User page. + if (dest.u8ptr >= flash_array_end.u8ptr) + { + source.u8ptr += AVR32_FLASHC_USER_PAGE - dest.u8ptr; + dest.u8ptr = AVR32_FLASHC_USER_PAGE; + } + } + // If the current flash page is the User page... + else + { + // Erase the User page if requested and write it from the page buffer. + if (erase) + { + flashc_erase_user_page(FALSE); + error_status |= flashc_error_status; + } + flashc_write_user_page(); + error_status |= flashc_error_status; + } + } + + // Update the FLASHC error status. + flashc_error_status = error_status; + + // Return the initial destination pointer as the standard memcpy function does. + return dst; +} + + +#if UC3C +void flashc_set_flash_waitstate_and_readmode(unsigned long cpu_f_hz) +{ + //! Device-specific data + #undef AVR32_FLASHC_FWS_0_MAX_FREQ + #undef AVR32_FLASHC_FWS_1_MAX_FREQ + #undef AVR32_FLASHC_HSEN_FWS_0_MAX_FREQ + #undef AVR32_FLASHC_HSEN_FWS_1_MAX_FREQ + #define AVR32_FLASHC_FWS_0_MAX_FREQ 33000000 + #define AVR32_FLASHC_FWS_1_MAX_FREQ 66000000 + #define AVR32_FLASHC_HSEN_FWS_0_MAX_FREQ 33000000 + #define AVR32_FLASHC_HSEN_FWS_1_MAX_FREQ 72000000 + // These defines are missing from or wrong in the toolchain header files uc3cxxx.h + // Put a Bugzilla + + if(cpu_f_hz > AVR32_FLASHC_HSEN_FWS_0_MAX_FREQ) // > 33MHz + { + // Set a wait-state + flashc_set_wait_state(1); + if(cpu_f_hz <= AVR32_FLASHC_FWS_1_MAX_FREQ) // <= 66MHz and >33Mhz + { + // Disable the high-speed read mode. + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_HSDIS, -1); + } + else // > 66Mhz + { + // Enable the high-speed read mode. + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_HSEN, -1); + } + } + else // <= 33 MHz + { + // Disable wait-state + flashc_set_wait_state(0); + + // Disable the high-speed read mode. + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_HSDIS, -1); + + } +} +#endif // UC3C device-specific implementation + +//! @} diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC/flashc.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC/flashc.h new file mode 100644 index 000000000..9f2547a6e --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC/flashc.h @@ -0,0 +1,1002 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief FLASHC driver for AVR32 UC3. + * + * AVR32 Flash Controller driver module. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with a FLASHC module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _FLASHC_H_ +#define _FLASHC_H_ + +#include +#include +#include "compiler.h" + +//! Number of flash regions defined by the FLASHC. +#define AVR32_FLASHC_REGIONS (AVR32_FLASHC_FLASH_SIZE /\ + (AVR32_FLASHC_PAGES_PR_REGION * AVR32_FLASHC_PAGE_SIZE)) + + +/*! \name Flash Properties + */ +//! @{ + +/*! \brief Gets the size of the whole flash array. + * + * \return The size of the whole flash array in bytes. + */ +extern unsigned int flashc_get_flash_size(void); + +/*! \brief Gets the total number of pages in the flash array. + * + * \return The total number of pages in the flash array. + */ +extern unsigned int flashc_get_page_count(void); + +/*! \brief Gets the number of pages in each flash region. + * + * \return The number of pages in each flash region. + */ +extern unsigned int flashc_get_page_count_per_region(void); + +/*! \brief Gets the region number of a page. + * + * \param page_number The page number: + * \arg \c 0 to (flashc_get_page_count() - 1): a page number within + * the flash array; + * \arg < 0: the current page number. + * + * \return The region number of the specified page. + */ +extern unsigned int flashc_get_page_region(int page_number); + +/*! \brief Gets the number of the first page of a region. + * + * \param region The region number: \c 0 to (AVR32_FLASHC_REGIONS - 1). + * + * \return The number of the first page of the specified region. + */ +extern unsigned int flashc_get_region_first_page_number(unsigned int region); + +//! @} + + +/*! \name FLASHC Control + */ +//! @{ + +/*! \brief Gets the number of wait states of flash read accesses. + * + * \return The number of wait states of flash read accesses. + */ +extern unsigned int flashc_get_wait_state(void); + +/*! \brief Sets the number of wait states of flash read accesses. + * + * \param wait_state The number of wait states of flash read accesses: \c 0 to + * \c 1. + */ +extern void flashc_set_wait_state(unsigned int wait_state); + +/*! \brief Tells whether the Flash Ready interrupt is enabled. + * + * \return Whether the Flash Ready interrupt is enabled. + */ +extern Bool flashc_is_ready_int_enabled(void); + +/*! \brief Enables or disables the Flash Ready interrupt. + * + * \param enable Whether to enable the Flash Ready interrupt: \c TRUE or + * \c FALSE. + */ +extern void flashc_enable_ready_int(Bool enable); + +/*! \brief Tells whether the Lock Error interrupt is enabled. + * + * \return Whether the Lock Error interrupt is enabled. + */ +extern Bool flashc_is_lock_error_int_enabled(void); + +/*! \brief Enables or disables the Lock Error interrupt. + * + * \param enable Whether to enable the Lock Error interrupt: \c TRUE or + * \c FALSE. + */ +extern void flashc_enable_lock_error_int(Bool enable); + +/*! \brief Tells whether the Programming Error interrupt is enabled. + * + * \return Whether the Programming Error interrupt is enabled. + */ +extern Bool flashc_is_prog_error_int_enabled(void); + +/*! \brief Enables or disables the Programming Error interrupt. + * + * \param enable Whether to enable the Programming Error interrupt: \c TRUE or + * \c FALSE. + */ +extern void flashc_enable_prog_error_int(Bool enable); + +//! @} + + +/*! \name FLASHC Status + */ +//! @{ + +/*! \brief Tells whether the FLASHC is ready to run a new command. + * + * \return Whether the FLASHC is ready to run a new command. + */ +extern Bool flashc_is_ready(void); + +/*! \brief Waits actively until the FLASHC is ready to run a new command. + * + * This is the default function assigned to \ref flashc_wait_until_ready. + */ +extern void flashc_default_wait_until_ready(void); + +//! Pointer to the function used by the driver when it needs to wait until the +//! FLASHC is ready to run a new command. +//! The default function is \ref flashc_default_wait_until_ready. +//! The user may change this pointer to use another implementation. +extern void (*volatile flashc_wait_until_ready)(void); + +/*! \brief Tells whether a Lock Error has occurred during the last function + * called that issued one or more FLASHC commands. + * + * \return Whether a Lock Error has occurred during the last function called + * that issued one or more FLASHC commands. + */ +extern Bool flashc_is_lock_error(void); + +/*! \brief Tells whether a Programming Error has occurred during the last + * function called that issued one or more FLASHC commands. + * + * \return Whether a Programming Error has occurred during the last function + * called that issued one or more FLASHC commands. + */ +extern Bool flashc_is_programming_error(void); + +//! @} + + +/*! \name FLASHC Command Control + */ +//! @{ + +/*! \brief Gets the last issued FLASHC command. + * + * \return The last issued FLASHC command. + */ +extern unsigned int flashc_get_command(void); + +/*! \brief Gets the current FLASHC page number. + * + * \return The current FLASHC page number. + */ +extern unsigned int flashc_get_page_number(void); + +/*! \brief Issues a FLASHC command. + * + * \param command The command: \c AVR32_FLASHC_FCMD_CMD_x. + * \param page_number The page number to apply the command to: + * \arg \c 0 to (flashc_get_page_count() - 1): a page number within + * the flash array; + * \arg < 0: use this to apply the command to the current page number + * or if the command does not apply to any page number; + * \arg this argument may have other meanings according to the command. See + * the FLASHC chapter of the MCU datasheet. + * + * \warning A Lock Error is issued if the command violates the protection + * mechanism. + * + * \warning A Programming Error is issued if the command is invalid. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +extern void flashc_issue_command(unsigned int command, int page_number); + +//! @} + + +/*! \name FLASHC Global Commands + */ +//! @{ + +/*! \brief Issues a No Operation command to the FLASHC. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +extern void flashc_no_operation(void); + +/*! \brief Issues an Erase All command to the FLASHC. + * + * This command erases all bits in the flash array, the general-purpose fuse + * bits and the Security bit. The User page is not erased. + * + * This command also ensures that all volatile memories, such as register file + * and RAMs, are erased before the Security bit is erased, i.e. deactivated. + * + * \warning A Lock Error is issued if at least one region is locked or the + * bootloader protection is active. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note An erase operation can only set bits. + */ +extern void flashc_erase_all(void); + +//! @} + + +/*! \name FLASHC Protection Mechanisms + */ +//! @{ + +/*! \brief Tells whether the Security bit is active. + * + * \return Whether the Security bit is active. + */ +extern Bool flashc_is_security_bit_active(void); + +/*! \brief Activates the Security bit. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +extern void flashc_activate_security_bit(void); + +/*! \brief Gets the bootloader protected size. + * + * \return The bootloader protected size in bytes. + */ +extern unsigned int flashc_get_bootloader_protected_size(void); + +/*! \brief Sets the bootloader protected size. + * + * \param bootprot_size The wanted bootloader protected size in bytes. If this + * size is not supported, the actual size will be the + * nearest greater available size or the maximal possible + * size if the requested size is too large. + * + * \return The actual bootloader protected size in bytes. + * + * \warning A Lock Error is issued if the Security bit is active. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +extern unsigned int flashc_set_bootloader_protected_size(unsigned int bootprot_size); + +/*! \brief Tells whether external privileged fetch is locked. + * + * \return Whether external privileged fetch is locked. + */ +extern Bool flashc_is_external_privileged_fetch_locked(void); + +/*! \brief Locks or unlocks external privileged fetch. + * + * \param lock Whether to lock external privileged fetch: \c TRUE or \c FALSE. + * + * \warning A Lock Error is issued if the Security bit is active. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +extern void flashc_lock_external_privileged_fetch(Bool lock); + +/*! \brief Tells whether the region of a page is locked. + * + * \param page_number The page number: + * \arg \c 0 to (flashc_get_page_count() - 1): a page number within + * the flash array; + * \arg < 0: the current page number. + * + * \return Whether the region of the specified page is locked. + */ +extern Bool flashc_is_page_region_locked(int page_number); + +/*! \brief Tells whether a region is locked. + * + * \param region The region number: \c 0 to (AVR32_FLASHC_REGIONS - 1). + * + * \return Whether the specified region is locked. + */ +extern Bool flashc_is_region_locked(unsigned int region); + +/*! \brief Locks or unlocks the region of a page. + * + * \param page_number The page number: + * \arg \c 0 to (flashc_get_page_count() - 1): a page number within + * the flash array; + * \arg < 0: the current page number. + * \param lock Whether to lock the region of the specified page: \c TRUE or + * \c FALSE. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +extern void flashc_lock_page_region(int page_number, Bool lock); + +/*! \brief Locks or unlocks a region. + * + * \param region The region number: \c 0 to (AVR32_FLASHC_REGIONS - 1). + * \param lock Whether to lock the specified region: \c TRUE or \c FALSE. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +extern void flashc_lock_region(unsigned int region, Bool lock); + +/*! \brief Locks or unlocks all regions. + * + * \param lock Whether to lock the regions: \c TRUE or \c FALSE. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +extern void flashc_lock_all_regions(Bool lock); + +//! @} + + +/*! \name Access to General-Purpose Fuses + */ +//! @{ + +/*! \brief Reads a general-purpose fuse bit. + * + * \param gp_fuse_bit The general-purpose fuse bit: \c 0 to \c 63. + * + * \return The value of the specified general-purpose fuse bit. + * + * \note The actual number of general-purpose fuse bits implemented by hardware + * is given by \c AVR32_FLASHC_GPF_NUM. The other bits among the 64 are + * fixed at 1 by hardware. + */ +extern Bool flashc_read_gp_fuse_bit(unsigned int gp_fuse_bit); + +/*! \brief Reads a general-purpose fuse bit-field. + * + * \param pos The bit-position of the general-purpose fuse bit-field: \c 0 to + * \c 63. + * \param width The bit-width of the general-purpose fuse bit-field: \c 0 to + * \c 64. + * + * \return The value of the specified general-purpose fuse bit-field. + * + * \note The actual number of general-purpose fuse bits implemented by hardware + * is given by \c AVR32_FLASHC_GPF_NUM. The other bits among the 64 are + * fixed at 1 by hardware. + */ +extern U64 flashc_read_gp_fuse_bitfield(unsigned int pos, unsigned int width); + +/*! \brief Reads a general-purpose fuse byte. + * + * \param gp_fuse_byte The general-purpose fuse byte: \c 0 to \c 7. + * + * \return The value of the specified general-purpose fuse byte. + * + * \note The actual number of general-purpose fuse bits implemented by hardware + * is given by \c AVR32_FLASHC_GPF_NUM. The other bits among the 64 are + * fixed at 1 by hardware. + */ +extern U8 flashc_read_gp_fuse_byte(unsigned int gp_fuse_byte); + +/*! \brief Reads all general-purpose fuses. + * + * \return The value of all general-purpose fuses as a word. + * + * \note The actual number of general-purpose fuse bits implemented by hardware + * is given by \c AVR32_FLASHC_GPF_NUM. The other bits among the 64 are + * fixed at 1 by hardware. + */ +extern U64 flashc_read_all_gp_fuses(void); + +/*! \brief Erases a general-purpose fuse bit. + * + * \param gp_fuse_bit The general-purpose fuse bit: \c 0 to \c 63. + * \param check Whether to check erase: \c TRUE or \c FALSE. + * + * \return Whether the erase succeeded or always \c TRUE if erase check was not + * requested. + * + * \warning A Lock Error is issued if the Security bit is active and the command + * is applied to BOOTPROT or EPFL fuses. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note An erase operation can only set bits. + * + * \note The actual number of general-purpose fuse bits implemented by hardware + * is given by \c AVR32_FLASHC_GPF_NUM. The other bits among the 64 are + * fixed at 1 by hardware. + */ +extern Bool flashc_erase_gp_fuse_bit(unsigned int gp_fuse_bit, Bool check); + +/*! \brief Erases a general-purpose fuse bit-field. + * + * \param pos The bit-position of the general-purpose fuse bit-field: \c 0 to + * \c 63. + * \param width The bit-width of the general-purpose fuse bit-field: \c 0 to + * \c 64. + * \param check Whether to check erase: \c TRUE or \c FALSE. + * + * \return Whether the erase succeeded or always \c TRUE if erase check was not + * requested. + * + * \warning A Lock Error is issued if the Security bit is active and the command + * is applied to BOOTPROT or EPFL fuses. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note An erase operation can only set bits. + * + * \note The actual number of general-purpose fuse bits implemented by hardware + * is given by \c AVR32_FLASHC_GPF_NUM. The other bits among the 64 are + * fixed at 1 by hardware. + */ +extern Bool flashc_erase_gp_fuse_bitfield(unsigned int pos, unsigned int width, Bool check); + +/*! \brief Erases a general-purpose fuse byte. + * + * \param gp_fuse_byte The general-purpose fuse byte: \c 0 to \c 7. + * \param check Whether to check erase: \c TRUE or \c FALSE. + * + * \return Whether the erase succeeded or always \c TRUE if erase check was not + * requested. + * + * \warning A Lock Error is issued if the Security bit is active. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note An erase operation can only set bits. + * + * \note The actual number of general-purpose fuse bits implemented by hardware + * is given by \c AVR32_FLASHC_GPF_NUM. The other bits among the 64 are + * fixed at 1 by hardware. + */ +extern Bool flashc_erase_gp_fuse_byte(unsigned int gp_fuse_byte, Bool check); + +/*! \brief Erases all general-purpose fuses. + * + * \param check Whether to check erase: \c TRUE or \c FALSE. + * + * \return Whether the erase succeeded or always \c TRUE if erase check was not + * requested. + * + * \warning A Lock Error is issued if the Security bit is active. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note An erase operation can only set bits. + * + * \note The actual number of general-purpose fuse bits implemented by hardware + * is given by \c AVR32_FLASHC_GPF_NUM. The other bits among the 64 are + * fixed at 1 by hardware. + */ +extern Bool flashc_erase_all_gp_fuses(Bool check); + +/*! \brief Writes a general-purpose fuse bit. + * + * \param gp_fuse_bit The general-purpose fuse bit: \c 0 to \c 63. + * \param value The value of the specified general-purpose fuse bit. + * + * \warning A Lock Error is issued if the Security bit is active and the command + * is applied to BOOTPROT or EPFL fuses. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note A write operation can only clear bits. + * + * \note The actual number of general-purpose fuse bits implemented by hardware + * is given by \c AVR32_FLASHC_GPF_NUM. The other bits among the 64 are + * fixed at 1 by hardware. + */ +extern void flashc_write_gp_fuse_bit(unsigned int gp_fuse_bit, Bool value); + +/*! \brief Writes a general-purpose fuse bit-field. + * + * \param pos The bit-position of the general-purpose fuse bit-field: \c 0 to + * \c 63. + * \param width The bit-width of the general-purpose fuse bit-field: \c 0 to + * \c 64. + * \param value The value of the specified general-purpose fuse bit-field. + * + * \warning A Lock Error is issued if the Security bit is active and the command + * is applied to BOOTPROT or EPFL fuses. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note A write operation can only clear bits. + * + * \note The actual number of general-purpose fuse bits implemented by hardware + * is given by \c AVR32_FLASHC_GPF_NUM. The other bits among the 64 are + * fixed at 1 by hardware. + */ +extern void flashc_write_gp_fuse_bitfield(unsigned int pos, unsigned int width, U64 value); + +/*! \brief Writes a general-purpose fuse byte. + * + * \param gp_fuse_byte The general-purpose fuse byte: \c 0 to \c 7. + * \param value The value of the specified general-purpose fuse byte. + * + * \warning A Lock Error is issued if the Security bit is active. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note A write operation can only clear bits. + * + * \note The actual number of general-purpose fuse bits implemented by hardware + * is given by \c AVR32_FLASHC_GPF_NUM. The other bits among the 64 are + * fixed at 1 by hardware. + */ +extern void flashc_write_gp_fuse_byte(unsigned int gp_fuse_byte, U8 value); + +/*! \brief Writes all general-purpose fuses. + * + * \param value The value of all general-purpose fuses as a word. + * + * \warning A Lock Error is issued if the Security bit is active. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note A write operation can only clear bits. + * + * \note The actual number of general-purpose fuse bits implemented by hardware + * is given by \c AVR32_FLASHC_GPF_NUM. The other bits among the 64 are + * fixed at 1 by hardware. + */ +extern void flashc_write_all_gp_fuses(U64 value); + +/*! \brief Sets a general-purpose fuse bit with the appropriate erase and write + * operations. + * + * \param gp_fuse_bit The general-purpose fuse bit: \c 0 to \c 63. + * \param value The value of the specified general-purpose fuse bit. + * + * \warning A Lock Error is issued if the Security bit is active and the command + * is applied to BOOTPROT or EPFL fuses. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note The actual number of general-purpose fuse bits implemented by hardware + * is given by \c AVR32_FLASHC_GPF_NUM. The other bits among the 64 are + * fixed at 1 by hardware. + */ +extern void flashc_set_gp_fuse_bit(unsigned int gp_fuse_bit, Bool value); + +/*! \brief Sets a general-purpose fuse bit-field with the appropriate erase and + * write operations. + * + * \param pos The bit-position of the general-purpose fuse bit-field: \c 0 to + * \c 63. + * \param width The bit-width of the general-purpose fuse bit-field: \c 0 to + * \c 64. + * \param value The value of the specified general-purpose fuse bit-field. + * + * \warning A Lock Error is issued if the Security bit is active and the command + * is applied to BOOTPROT or EPFL fuses. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note The actual number of general-purpose fuse bits implemented by hardware + * is given by \c AVR32_FLASHC_GPF_NUM. The other bits among the 64 are + * fixed at 1 by hardware. + */ +extern void flashc_set_gp_fuse_bitfield(unsigned int pos, unsigned int width, U64 value); + +/*! \brief Sets a general-purpose fuse byte with the appropriate erase and write + * operations. + * + * \param gp_fuse_byte The general-purpose fuse byte: \c 0 to \c 7. + * \param value The value of the specified general-purpose fuse byte. + * + * \warning A Lock Error is issued if the Security bit is active. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note The actual number of general-purpose fuse bits implemented by hardware + * is given by \c AVR32_FLASHC_GPF_NUM. The other bits among the 64 are + * fixed at 1 by hardware. + */ +extern void flashc_set_gp_fuse_byte(unsigned int gp_fuse_byte, U8 value); + +/*! \brief Sets all general-purpose fuses with the appropriate erase and write + * operations. + * + * \param value The value of all general-purpose fuses as a word. + * + * \warning A Lock Error is issued if the Security bit is active. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note The actual number of general-purpose fuse bits implemented by hardware + * is given by \c AVR32_FLASHC_GPF_NUM. The other bits among the 64 are + * fixed at 1 by hardware. + */ +extern void flashc_set_all_gp_fuses(U64 value); + +//! @} + + +/*! \name Access to Flash Pages + */ +//! @{ + +/*! \brief Clears the page buffer. + * + * This command resets all bits in the page buffer to one. Write accesses to the + * page buffer can only change page buffer bits from one to zero. + * + * \warning The page buffer is not automatically reset after a page write. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +extern void flashc_clear_page_buffer(void); + +/*! \brief Tells whether the page to which the last Quick Page Read or Quick + * Page Read User Page command was applied was erased. + * + * \return Whether the page to which the last Quick Page Read or Quick Page Read + * User Page command was applied was erased. + */ +extern Bool flashc_is_page_erased(void); + +/*! \brief Applies the Quick Page Read command to a page. + * + * \param page_number The page number: + * \arg \c 0 to (flashc_get_page_count() - 1): a page number within + * the flash array; + * \arg < 0: the current page number. + * + * \return Whether the specified page is erased. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +extern Bool flashc_quick_page_read(int page_number); + +/*! \brief Erases a page. + * + * \param page_number The page number: + * \arg \c 0 to (flashc_get_page_count() - 1): a page number within + * the flash array; + * \arg < 0: the current page number. + * \param check Whether to check erase: \c TRUE or \c FALSE. + * + * \return Whether the erase succeeded or always \c TRUE if erase check was not + * requested. + * + * \warning A Lock Error is issued if the command is applied to a page belonging + * to a locked region or to the bootloader protected area. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note An erase operation can only set bits. + */ +extern Bool flashc_erase_page(int page_number, Bool check); + +/*! \brief Erases all pages within the flash array. + * + * \param check Whether to check erase: \c TRUE or \c FALSE. + * + * \return Whether the erase succeeded or always \c TRUE if erase check was not + * requested. + * + * \warning A Lock Error is issued if at least one region is locked or the + * bootloader protection is active. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note An erase operation can only set bits. + */ +extern Bool flashc_erase_all_pages(Bool check); + +/*! \brief Writes a page from the page buffer. + * + * \param page_number The page number: + * \arg \c 0 to (flashc_get_page_count() - 1): a page number within + * the flash array; + * \arg < 0: the current page number. + * + * \warning A Lock Error is issued if the command is applied to a page belonging + * to a locked region or to the bootloader protected area. + * + * \warning The page buffer is not automatically reset after a page write. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note A write operation can only clear bits. + */ +extern void flashc_write_page(int page_number); + +/*! \brief Issues a Quick Page Read User Page command to the FLASHC. + * + * \return Whether the User page is erased. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +extern Bool flashc_quick_user_page_read(void); + +/*! \brief Erases the User page. + * + * \param check Whether to check erase: \c TRUE or \c FALSE. + * + * \return Whether the erase succeeded or always \c TRUE if erase check was not + * requested. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note An erase operation can only set bits. + */ +extern Bool flashc_erase_user_page(Bool check); + +/*! \brief Writes the User page from the page buffer. + * + * \warning The page buffer is not automatically reset after a page write. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note A write operation can only clear bits. + */ +extern void flashc_write_user_page(void); + +/*! \brief Copies \a nbytes bytes to the flash destination pointed to by \a dst + * from the repeated \a src source byte. + * + * The destination areas that are not within the flash array or the User page + * are ignored. + * + * All pointer and size alignments are supported. + * + * \param dst Pointer to flash destination. + * \param src Source byte. + * \param nbytes Number of bytes to set. + * \param erase Whether to erase before writing: \c TRUE or \c FALSE. + * + * \return The value of \a dst. + * + * \warning This function may be called with \a erase set to \c FALSE only if + * the destination consists only of erased words, i.e. this function + * can not be used to write only one bit of a previously written word. + * E.g., if \c 0x00000001 then \c 0xFFFFFFFE are written to a word, the + * resulting value in flash may be different from \c 0x00000000. + * + * \warning A Lock Error is issued if the command is applied to pages belonging + * to a locked region or to the bootloader protected area. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +extern volatile void *flashc_memset8(volatile void *dst, U8 src, size_t nbytes, Bool erase); + +/*! \brief Copies \a nbytes bytes to the flash destination pointed to by \a dst + * from the repeated \a src big-endian source half-word. + * + * The destination areas that are not within the flash array or the User page + * are ignored. + * + * All pointer and size alignments are supported. + * + * \param dst Pointer to flash destination. + * \param src Source half-word. + * \param nbytes Number of bytes to set. + * \param erase Whether to erase before writing: \c TRUE or \c FALSE. + * + * \return The value of \a dst. + * + * \warning This function may be called with \a erase set to \c FALSE only if + * the destination consists only of erased words, i.e. this function + * can not be used to write only one bit of a previously written word. + * E.g., if \c 0x00000001 then \c 0xFFFFFFFE are written to a word, the + * resulting value in flash may be different from \c 0x00000000. + * + * \warning A Lock Error is issued if the command is applied to pages belonging + * to a locked region or to the bootloader protected area. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +extern volatile void *flashc_memset16(volatile void *dst, U16 src, size_t nbytes, Bool erase); + +/*! \brief Copies \a nbytes bytes to the flash destination pointed to by \a dst + * from the repeated \a src big-endian source word. + * + * The destination areas that are not within the flash array or the User page + * are ignored. + * + * All pointer and size alignments are supported. + * + * \param dst Pointer to flash destination. + * \param src Source word. + * \param nbytes Number of bytes to set. + * \param erase Whether to erase before writing: \c TRUE or \c FALSE. + * + * \return The value of \a dst. + * + * \warning This function may be called with \a erase set to \c FALSE only if + * the destination consists only of erased words, i.e. this function + * can not be used to write only one bit of a previously written word. + * E.g., if \c 0x00000001 then \c 0xFFFFFFFE are written to a word, the + * resulting value in flash may be different from \c 0x00000000. + * + * \warning A Lock Error is issued if the command is applied to pages belonging + * to a locked region or to the bootloader protected area. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +extern volatile void *flashc_memset32(volatile void *dst, U32 src, size_t nbytes, Bool erase); + +/*! \brief Copies \a nbytes bytes to the flash destination pointed to by \a dst + * from the repeated \a src big-endian source double-word. + * + * The destination areas that are not within the flash array or the User page + * are ignored. + * + * All pointer and size alignments are supported. + * + * \param dst Pointer to flash destination. + * \param src Source double-word. + * \param nbytes Number of bytes to set. + * \param erase Whether to erase before writing: \c TRUE or \c FALSE. + * + * \return The value of \a dst. + * + * \warning This function may be called with \a erase set to \c FALSE only if + * the destination consists only of erased words, i.e. this function + * can not be used to write only one bit of a previously written word. + * E.g., if \c 0x00000001 then \c 0xFFFFFFFE are written to a word, the + * resulting value in flash may be different from \c 0x00000000. + * + * \warning A Lock Error is issued if the command is applied to pages belonging + * to a locked region or to the bootloader protected area. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +extern volatile void *flashc_memset64(volatile void *dst, U64 src, size_t nbytes, Bool erase); + +/*! \brief Copies \a nbytes bytes to the flash destination pointed to by \a dst + * from the repeated \a src big-endian source pattern. + * + * The destination areas that are not within the flash array or the User page + * are ignored. + * + * All pointer and size alignments are supported. + * + * \param dst Pointer to flash destination. + * \param src Source double-word. + * \param src_width \a src width in bits: 8, 16, 32 or 64. + * \param nbytes Number of bytes to set. + * \param erase Whether to erase before writing: \c TRUE or \c FALSE. + * + * \return The value of \a dst. + * + * \warning This function may be called with \a erase set to \c FALSE only if + * the destination consists only of erased words, i.e. this function + * can not be used to write only one bit of a previously written word. + * E.g., if \c 0x00000001 then \c 0xFFFFFFFE are written to a word, the + * resulting value in flash may be different from \c 0x00000000. + * + * \warning A Lock Error is issued if the command is applied to pages belonging + * to a locked region or to the bootloader protected area. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +#define flashc_memset(dst, src, src_width, nbytes, erase) \ + TPASTE2(flashc_memset, src_width)((dst), (src), (nbytes), (erase)) + +/*! \brief Copies \a nbytes bytes to the flash destination pointed to by \a dst + * from the source pointed to by \a src. + * + * The destination areas that are not within the flash array or the User page + * are ignored. + * + * All pointer and size alignments are supported. + * + * \param dst Pointer to flash destination. + * \param src Pointer to source data. + * \param nbytes Number of bytes to copy. + * \param erase Whether to erase before writing: \c TRUE or \c FALSE. + * + * \return The value of \a dst. + * + * \warning If copying takes place between areas that overlap, the behavior is + * undefined. + * + * \warning This function may be called with \a erase set to \c FALSE only if + * the destination consists only of erased words, i.e. this function + * can not be used to write only one bit of a previously written word. + * E.g., if \c 0x00000001 then \c 0xFFFFFFFE are written to a word, the + * resulting value in flash may be different from \c 0x00000000. + * + * \warning A Lock Error is issued if the command is applied to pages belonging + * to a locked region or to the bootloader protected area. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +extern volatile void *flashc_memcpy(volatile void *dst, const void *src, size_t nbytes, Bool erase); + +#if UC3C + +/*! \brief Depednding to the CPU frequency, set the wait states of flash read + * accesses and enable or disable the High speed read mode. + * + * \param cpu_f_hz The CPU frequency + */ +void flashc_set_flash_waitstate_and_readmode(unsigned long cpu_f_hz); +#endif // UC3C device-specific implementation + +//! @} + + +#endif // _FLASHC_H_ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO/gpio.c b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO/gpio.c new file mode 100644 index 000000000..b6b83c73f --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO/gpio.c @@ -0,0 +1,458 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file has been prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief GPIO driver for AVR32 UC3. + * + * This file defines a useful set of functions for the GPIO. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with a GPIO module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + *****************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#include "gpio.h" + +//! GPIO module instance. +#define GPIO AVR32_GPIO + + +/*! \name Peripheral Bus Interface + */ +//! @{ + + +int gpio_enable_module(const gpio_map_t gpiomap, unsigned int size) +{ + int status = GPIO_SUCCESS; + unsigned int i; + + for (i = 0; i < size; i++) + { + status |= gpio_enable_module_pin(gpiomap->pin, gpiomap->function); + gpiomap++; + } + + return status; +} + + +int gpio_enable_module_pin(unsigned int pin, unsigned int function) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + + // Enable the correct function. + switch (function) + { + case 0: // A function. + gpio_port->pmr0c = 1 << (pin & 0x1F); + gpio_port->pmr1c = 1 << (pin & 0x1F); +#if defined(AVR32_GPIO_210_H_INCLUDED) || defined(AVR32_GPIO_211_H_INCLUDED) + gpio_port->pmr2c = 1 << (pin & 0x1F); +#endif + break; + + case 1: // B function. + gpio_port->pmr0s = 1 << (pin & 0x1F); + gpio_port->pmr1c = 1 << (pin & 0x1F); +#if defined(AVR32_GPIO_210_H_INCLUDED) || defined(AVR32_GPIO_211_H_INCLUDED) + gpio_port->pmr2c = 1 << (pin & 0x1F); +#endif + break; + + case 2: // C function. + gpio_port->pmr0c = 1 << (pin & 0x1F); + gpio_port->pmr1s = 1 << (pin & 0x1F); +#if defined(AVR32_GPIO_210_H_INCLUDED) || defined(AVR32_GPIO_211_H_INCLUDED) + gpio_port->pmr2c = 1 << (pin & 0x1F); +#endif + break; + + case 3: // D function. + gpio_port->pmr0s = 1 << (pin & 0x1F); + gpio_port->pmr1s = 1 << (pin & 0x1F); +#if defined(AVR32_GPIO_210_H_INCLUDED) || defined(AVR32_GPIO_211_H_INCLUDED) + gpio_port->pmr2c = 1 << (pin & 0x1F); +#endif + break; + +#if defined(AVR32_GPIO_210_H_INCLUDED) || defined(AVR32_GPIO_211_H_INCLUDED) + case 4: // E function. + gpio_port->pmr0c = 1 << (pin & 0x1F); + gpio_port->pmr1c = 1 << (pin & 0x1F); + gpio_port->pmr2s = 1 << (pin & 0x1F); + break; + + case 5: // F function. + gpio_port->pmr0s = 1 << (pin & 0x1F); + gpio_port->pmr1c = 1 << (pin & 0x1F); + gpio_port->pmr2s = 1 << (pin & 0x1F); + break; + + case 6: // G function. + gpio_port->pmr0c = 1 << (pin & 0x1F); + gpio_port->pmr1s = 1 << (pin & 0x1F); + gpio_port->pmr2s = 1 << (pin & 0x1F); + break; + + case 7: // H function. + gpio_port->pmr0s = 1 << (pin & 0x1F); + gpio_port->pmr1s = 1 << (pin & 0x1F); + gpio_port->pmr2s = 1 << (pin & 0x1F); + break; +#endif + + default: + return GPIO_INVALID_ARGUMENT; + } + + // Disable GPIO control. + gpio_port->gperc = 1 << (pin & 0x1F); + + return GPIO_SUCCESS; +} + + +void gpio_enable_gpio(const gpio_map_t gpiomap, unsigned int size) +{ + unsigned int i; + + for (i = 0; i < size; i++) + { + gpio_enable_gpio_pin(gpiomap->pin); + gpiomap++; + } +} + + +void gpio_enable_gpio_pin(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + gpio_port->oderc = 1 << (pin & 0x1F); + gpio_port->gpers = 1 << (pin & 0x1F); +} + + +// The open-drain mode is not synthesized on the current AVR32 products. +// If one day some AVR32 products have this feature, the corresponding part +// numbers should be listed in the #if below. +// Note that other functions are available in this driver to use pins with open +// drain in GPIO mode. The advantage of the open-drain mode functions over these +// other functions is that they can be used not only in GPIO mode but also in +// module mode. +#if 0 + + +void gpio_enable_pin_open_drain(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + gpio_port->odmers = 1 << (pin & 0x1F); +} + + +void gpio_disable_pin_open_drain(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + gpio_port->odmerc = 1 << (pin & 0x1F); +} + + +#endif + + +void gpio_enable_pin_pull_up(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + gpio_port->puers = 1 << (pin & 0x1F); +#if defined(AVR32_GPIO_200_H_INCLUDED) || defined(AVR32_GPIO_210_H_INCLUDED) || defined(AVR32_GPIO_211_H_INCLUDED) + gpio_port->pderc = 1 << (pin & 0x1F); +#endif +} + + +void gpio_disable_pin_pull_up(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + gpio_port->puerc = 1 << (pin & 0x1F); +} + +#if defined(AVR32_GPIO_200_H_INCLUDED) || defined(AVR32_GPIO_210_H_INCLUDED) || defined(AVR32_GPIO_211_H_INCLUDED) +// Added support of Pull-up Resistor, Pull-down Resistor and Buskeeper Control. + +/*! \brief Enables the pull-down resistor of a pin. + * + * \param pin The pin number. + */ +void gpio_enable_pin_pull_down(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + gpio_port->puerc = 1 << (pin & 0x1F); + gpio_port->pders = 1 << (pin & 0x1F); +} + +/*! \brief Disables the pull-down resistor of a pin. + * + * \param pin The pin number. + */ +void gpio_disable_pin_pull_down(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + gpio_port->pderc = 1 << (pin & 0x1F); +} + +/*! \brief Enables the buskeeper functionality on a pin. + * + * \param pin The pin number. + */ +void gpio_enable_pin_buskeeper(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + gpio_port->puers = 1 << (pin & 0x1F); + gpio_port->pders = 1 << (pin & 0x1F); +} + +/*! \brief Disables the buskeeper functionality on a pin. + * + * \param pin The pin number. + */ +void gpio_disable_pin_buskeeper(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + gpio_port->puerc = 1 << (pin & 0x1F); + gpio_port->pderc = 1 << (pin & 0x1F); +} + +#endif + +int gpio_get_pin_value(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + return (gpio_port->pvr >> (pin & 0x1F)) & 1; +} + + +int gpio_get_gpio_pin_output_value(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + return (gpio_port->ovr >> (pin & 0x1F)) & 1; +} + + +int gpio_get_gpio_open_drain_pin_output_value(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + return ((gpio_port->oder >> (pin & 0x1F)) & 1) ^ 1; +} + + +void gpio_set_gpio_pin(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + + gpio_port->ovrs = 1 << (pin & 0x1F); // Value to be driven on the I/O line: 1. + gpio_port->oders = 1 << (pin & 0x1F); // The GPIO output driver is enabled for that pin. + gpio_port->gpers = 1 << (pin & 0x1F); // The GPIO module controls that pin. +} + + +void gpio_clr_gpio_pin(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + + gpio_port->ovrc = 1 << (pin & 0x1F); // Value to be driven on the I/O line: 0. + gpio_port->oders = 1 << (pin & 0x1F); // The GPIO output driver is enabled for that pin. + gpio_port->gpers = 1 << (pin & 0x1F); // The GPIO module controls that pin. +} + + +void gpio_tgl_gpio_pin(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + + gpio_port->ovrt = 1 << (pin & 0x1F); // Toggle the I/O line. + gpio_port->oders = 1 << (pin & 0x1F); // The GPIO output driver is enabled for that pin. + gpio_port->gpers = 1 << (pin & 0x1F); // The GPIO module controls that pin. +} + + +void gpio_set_gpio_open_drain_pin(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + + gpio_port->oderc = 1 << (pin & 0x1F); // The GPIO output driver is disabled for that pin. + gpio_port->gpers = 1 << (pin & 0x1F); // The GPIO module controls that pin. +} + + +void gpio_clr_gpio_open_drain_pin(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + + gpio_port->ovrc = 1 << (pin & 0x1F); // Value to be driven on the I/O line: 0. + gpio_port->oders = 1 << (pin & 0x1F); // The GPIO output driver is enabled for that pin. + gpio_port->gpers = 1 << (pin & 0x1F); // The GPIO module controls that pin. +} + + +void gpio_tgl_gpio_open_drain_pin(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + + gpio_port->ovrc = 1 << (pin & 0x1F); // Value to be driven on the I/O line if the GPIO output driver is enabled: 0. + gpio_port->odert = 1 << (pin & 0x1F); // The GPIO output driver is toggled for that pin. + gpio_port->gpers = 1 << (pin & 0x1F); // The GPIO module controls that pin. +} + + +void gpio_enable_pin_glitch_filter(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + gpio_port->gfers = 1 << (pin & 0x1F); +} + + +void gpio_disable_pin_glitch_filter(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + gpio_port->gferc = 1 << (pin & 0x1F); +} + +/*! \brief Configure the edge detector of an input pin + * + * \param pin The pin number. + * \param mode The edge detection mode (\ref GPIO_PIN_CHANGE, \ref GPIO_RISING_EDGE + * or \ref GPIO_FALLING_EDGE). + * + * \return \ref GPIO_SUCCESS or \ref GPIO_INVALID_ARGUMENT. + */ +static int gpio_configure_edge_detector(unsigned int pin, unsigned int mode) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + + // Configure the edge detector. + switch (mode) + { + case GPIO_PIN_CHANGE: + gpio_port->imr0c = 1 << (pin & 0x1F); + gpio_port->imr1c = 1 << (pin & 0x1F); + break; + + case GPIO_RISING_EDGE: + gpio_port->imr0s = 1 << (pin & 0x1F); + gpio_port->imr1c = 1 << (pin & 0x1F); + break; + + case GPIO_FALLING_EDGE: + gpio_port->imr0c = 1 << (pin & 0x1F); + gpio_port->imr1s = 1 << (pin & 0x1F); + break; + + default: + return GPIO_INVALID_ARGUMENT; + } + + return GPIO_SUCCESS; +} + + +int gpio_enable_pin_interrupt(unsigned int pin, unsigned int mode) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + + // Enable the glitch filter. + gpio_port->gfers = 1 << (pin & 0x1F); + + // Configure the edge detector. + if(GPIO_INVALID_ARGUMENT == gpio_configure_edge_detector(pin, mode)) + return(GPIO_INVALID_ARGUMENT); + + // Enable interrupt. + gpio_port->iers = 1 << (pin & 0x1F); + + return GPIO_SUCCESS; +} + + +void gpio_disable_pin_interrupt(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + gpio_port->ierc = 1 << (pin & 0x1F); +} + + +int gpio_get_pin_interrupt_flag(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + return (gpio_port->ifr >> (pin & 0x1F)) & 1; +} + + +void gpio_clear_pin_interrupt_flag(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + gpio_port->ifrc = 1 << (pin & 0x1F); +} + + +//# +//# Peripheral Event System Support. +//# +#if UC3L +int gpio_configure_pin_periph_event_mode(unsigned int pin, unsigned int mode, unsigned int use_igf) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + + if(TRUE == use_igf) + { + // Enable the glitch filter. + gpio_port->gfers = 1 << (pin & 0x1F); + } + else + { + // Disable the glitch filter. + gpio_port->gferc = 1 << (pin & 0x1F); + } + + // Configure the edge detector. + return(gpio_configure_edge_detector(pin, mode)); +} + +#endif + +//! @} diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO/gpio.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO/gpio.h new file mode 100644 index 000000000..f0b5fd884 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO/gpio.h @@ -0,0 +1,583 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file has been prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief GPIO header for AVR32 UC3. + * + * This file contains basic GPIO driver functions. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with a GPIO module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + *****************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _GPIO_H_ +#define _GPIO_H_ + +#include +#include "compiler.h" + +/*! \name Return Values of the GPIO API + */ +//! @{ +#define GPIO_SUCCESS 0 //!< Function successfully completed. +#define GPIO_INVALID_ARGUMENT 1 //!< Input parameters are out of range. +//! @} + + +/*! \name Interrupt Trigger Modes + */ +//! @{ +#define GPIO_PIN_CHANGE 0 //!< Interrupt triggered upon pin change. +#define GPIO_RISING_EDGE 1 //!< Interrupt triggered upon rising edge. +#define GPIO_FALLING_EDGE 2 //!< Interrupt triggered upon falling edge. +//! @} + + +//! A type definition of pins and modules connectivity. +typedef struct +{ + unsigned char pin; //!< Module pin. + unsigned char function; //!< Module function. +} gpio_map_t[]; + + +/*! \name Peripheral Bus Interface + * + * Low-speed interface with a non-deterministic number of clock cycles per + * access. + * + * This interface operates with lower clock frequencies (fPB <= fCPU), and its + * timing is not deterministic since it needs to access a shared bus which may + * be heavily loaded. + * + * \note This interface is immediately available without initialization. + */ +//! @{ + +/*! \brief Enables specific module modes for a set of pins. + * + * \param gpiomap The pin map. + * \param size The number of pins in \a gpiomap. + * + * \return \ref GPIO_SUCCESS or \ref GPIO_INVALID_ARGUMENT. + */ +extern int gpio_enable_module(const gpio_map_t gpiomap, unsigned int size); + +/*! \brief Enables a specific module mode for a pin. + * + * \param pin The pin number.\n + * Refer to the product header file `uc3x.h' (where x is the part + * number; e.g. x = a0512) for module pins. E.g., to enable a PWM + * channel output, the pin number can be AVR32_PWM_3_PIN for PWM + * channel 3. + * \param function The pin function.\n + * Refer to the product header file `uc3x.h' (where x is the + * part number; e.g. x = a0512) for module pin functions. E.g., + * to enable a PWM channel output, the pin function can be + * AVR32_PWM_3_FUNCTION for PWM channel 3. + * + * \return \ref GPIO_SUCCESS or \ref GPIO_INVALID_ARGUMENT. + */ +extern int gpio_enable_module_pin(unsigned int pin, unsigned int function); + +/*! \brief Enables the GPIO mode of a set of pins. + * + * \param gpiomap The pin map. + * \param size The number of pins in \a gpiomap. + */ +extern void gpio_enable_gpio(const gpio_map_t gpiomap, unsigned int size); + +/*! \brief Enables the GPIO mode of a pin. + * + * \param pin The pin number.\n + * Refer to the product header file `uc3x.h' (where x is the part + * number; e.g. x = a0512) for pin definitions. E.g., to enable the + * GPIO mode of PX21, AVR32_PIN_PX21 can be used. Module pins such as + * AVR32_PWM_3_PIN for PWM channel 3 can also be used to release + * module pins for GPIO. + */ +extern void gpio_enable_gpio_pin(unsigned int pin); + +// The open-drain mode is not synthesized on the current AVR32 products. +// If one day some AVR32 products have this feature, the corresponding part +// numbers should be listed in the #if below. +// Note that other functions are available in this driver to use pins with open +// drain in GPIO mode. The advantage of the open-drain mode functions over these +// other functions is that they can be used not only in GPIO mode but also in +// module mode. +#if 0 + +/*! \brief Enables the open-drain mode of a pin. + * + * \param pin The pin number. + */ +extern void gpio_enable_pin_open_drain(unsigned int pin); + +/*! \brief Disables the open-drain mode of a pin. + * + * \param pin The pin number. + */ +extern void gpio_disable_pin_open_drain(unsigned int pin); + +#endif + +/*! \brief Enables the pull-up resistor of a pin. + * + * \param pin The pin number. + */ +extern void gpio_enable_pin_pull_up(unsigned int pin); + +/*! \brief Disables the pull-up resistor of a pin. + * + * \param pin The pin number. + */ +extern void gpio_disable_pin_pull_up(unsigned int pin); + +#if defined(AVR32_GPIO_200_H_INCLUDED) || defined(AVR32_GPIO_210_H_INCLUDED) || defined(AVR32_GPIO_211_H_INCLUDED) +// Added support of Pull-up Resistor, Pull-down Resistor and Buskeeper Control. + +/*! \brief Enables the pull-down resistor of a pin. + * + * \param pin The pin number. + */ +extern void gpio_enable_pin_pull_down(unsigned int pin); + +/*! \brief Disables the pull-down resistor of a pin. + * + * \param pin The pin number. + */ +extern void gpio_disable_pin_pull_down(unsigned int pin); + +/*! \brief Enables the buskeeper functionality on a pin. + * + * \param pin The pin number. + */ +extern void gpio_enable_pin_buskeeper(unsigned int pin); + +/*! \brief Disables the buskeeper functionality on a pin. + * + * \param pin The pin number. + */ +extern void gpio_disable_pin_buskeeper(unsigned int pin); + +#endif + +/*! \brief Returns the value of a pin. + * + * \param pin The pin number. + * + * \return The pin value. + */ +extern int gpio_get_pin_value(unsigned int pin); + +/*! \brief Returns the output value set for a GPIO pin. + * + * \param pin The pin number. + * + * \return The pin output value. + * + * \note This function must be used in conjunction with \ref gpio_set_gpio_pin, + * \ref gpio_clr_gpio_pin and \ref gpio_tgl_gpio_pin. + */ +extern int gpio_get_gpio_pin_output_value(unsigned int pin); + +/*! \brief Returns the output value set for a GPIO pin using open drain. + * + * \param pin The pin number. + * + * \return The pin output value. + * + * \note This function must be used in conjunction with + * \ref gpio_set_gpio_open_drain_pin, \ref gpio_clr_gpio_open_drain_pin + * and \ref gpio_tgl_gpio_open_drain_pin. + */ +extern int gpio_get_gpio_open_drain_pin_output_value(unsigned int pin); + +/*! \brief Drives a GPIO pin to 1. + * + * \param pin The pin number. + */ +extern void gpio_set_gpio_pin(unsigned int pin); + +/*! \brief Drives a GPIO pin to 0. + * + * \param pin The pin number. + */ +extern void gpio_clr_gpio_pin(unsigned int pin); + +/*! \brief Toggles a GPIO pin. + * + * \param pin The pin number. + */ +extern void gpio_tgl_gpio_pin(unsigned int pin); + +/*! \brief Drives a GPIO pin to 1 using open drain. + * + * \param pin The pin number. + */ +extern void gpio_set_gpio_open_drain_pin(unsigned int pin); + +/*! \brief Drives a GPIO pin to 0 using open drain. + * + * \param pin The pin number. + */ +extern void gpio_clr_gpio_open_drain_pin(unsigned int pin); + +/*! \brief Toggles a GPIO pin using open drain. + * + * \param pin The pin number. + */ +extern void gpio_tgl_gpio_open_drain_pin(unsigned int pin); + +/*! \brief Enables the glitch filter of a pin. + * + * When the glitch filter is enabled, a glitch with duration of less than 1 + * clock cycle is automatically rejected, while a pulse with duration of 2 clock + * cycles or more is accepted. For pulse durations between 1 clock cycle and 2 + * clock cycles, the pulse may or may not be taken into account, depending on + * the precise timing of its occurrence. Thus for a pulse to be guaranteed + * visible it must exceed 2 clock cycles, whereas for a glitch to be reliably + * filtered out, its duration must not exceed 1 clock cycle. The filter + * introduces 2 clock cycles latency. + * + * \param pin The pin number. + */ +extern void gpio_enable_pin_glitch_filter(unsigned int pin); + +/*! \brief Disables the glitch filter of a pin. + * + * \param pin The pin number. + */ +extern void gpio_disable_pin_glitch_filter(unsigned int pin); + +/*! \brief Enables the interrupt of a pin with the specified settings. + * + * \param pin The pin number. + * \param mode The trigger mode (\ref GPIO_PIN_CHANGE, \ref GPIO_RISING_EDGE or + * \ref GPIO_FALLING_EDGE). + * + * \return \ref GPIO_SUCCESS or \ref GPIO_INVALID_ARGUMENT. + */ +extern int gpio_enable_pin_interrupt(unsigned int pin, unsigned int mode); + +/*! \brief Disables the interrupt of a pin. + * + * \param pin The pin number. + */ +extern void gpio_disable_pin_interrupt(unsigned int pin); + +/*! \brief Gets the interrupt flag of a pin. + * + * \param pin The pin number. + * + * \return The pin interrupt flag. + */ +extern int gpio_get_pin_interrupt_flag(unsigned int pin); + +/*! \brief Clears the interrupt flag of a pin. + * + * \param pin The pin number. + */ +extern void gpio_clear_pin_interrupt_flag(unsigned int pin); + +//! @} + + +#if (defined AVR32_GPIO_LOCAL_ADDRESS) +/*! \name Local Bus Interface + * + * High-speed interface with only one clock cycle per access. + * + * This interface operates with high clock frequency (fCPU), and its timing is + * deterministic since it does not need to access a shared bus which may be + * heavily loaded. + * + * \warning To use this interface, the clock frequency of the peripheral bus on + * which the GPIO peripheral is connected must be set to the CPU clock + * frequency (fPB = fCPU). + * + * \note This interface has to be initialized in order to be available. + */ +//! @{ + +/*! \brief Enables the local bus interface for GPIO. + * + * \note This function must have been called at least once before using other + * functions in this interface. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void gpio_local_init(void) +{ + Set_system_register(AVR32_CPUCR, + Get_system_register(AVR32_CPUCR) | AVR32_CPUCR_LOCEN_MASK); +} + +/*! \brief Enables the output driver of a pin. + * + * \param pin The pin number. + * + * \note \ref gpio_local_init must have been called beforehand. + * + * \note This function does not enable the GPIO mode of the pin. + * \ref gpio_enable_gpio_pin can be called for this purpose. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void gpio_local_enable_pin_output_driver(unsigned int pin) +{ + AVR32_GPIO_LOCAL.port[pin >> 5].oders = 1 << (pin & 0x1F); +} + +/*! \brief Disables the output driver of a pin. + * + * \param pin The pin number. + * + * \note \ref gpio_local_init must have been called beforehand. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void gpio_local_disable_pin_output_driver(unsigned int pin) +{ + AVR32_GPIO_LOCAL.port[pin >> 5].oderc = 1 << (pin & 0x1F); +} + +/*! \brief Returns the value of a pin. + * + * \param pin The pin number. + * + * \return The pin value. + * + * \note \ref gpio_local_init must have been called beforehand. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ int gpio_local_get_pin_value(unsigned int pin) +{ + return (AVR32_GPIO_LOCAL.port[pin >> 5].pvr >> (pin & 0x1F)) & 1; +} + +/*! \brief Drives a GPIO pin to 1. + * + * \param pin The pin number. + * + * \note \ref gpio_local_init must have been called beforehand. + * + * \note This function does not enable the GPIO mode of the pin nor its output + * driver. \ref gpio_enable_gpio_pin and + * \ref gpio_local_enable_pin_output_driver can be called for this + * purpose. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void gpio_local_set_gpio_pin(unsigned int pin) +{ + AVR32_GPIO_LOCAL.port[pin >> 5].ovrs = 1 << (pin & 0x1F); +} + +/*! \brief Drives a GPIO pin to 0. + * + * \param pin The pin number. + * + * \note \ref gpio_local_init must have been called beforehand. + * + * \note This function does not enable the GPIO mode of the pin nor its output + * driver. \ref gpio_enable_gpio_pin and + * \ref gpio_local_enable_pin_output_driver can be called for this + * purpose. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void gpio_local_clr_gpio_pin(unsigned int pin) +{ + AVR32_GPIO_LOCAL.port[pin >> 5].ovrc = 1 << (pin & 0x1F); +} + +/*! \brief Toggles a GPIO pin. + * + * \param pin The pin number. + * + * \note \ref gpio_local_init must have been called beforehand. + * + * \note This function does not enable the GPIO mode of the pin nor its output + * driver. \ref gpio_enable_gpio_pin and + * \ref gpio_local_enable_pin_output_driver can be called for this + * purpose. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void gpio_local_tgl_gpio_pin(unsigned int pin) +{ + AVR32_GPIO_LOCAL.port[pin >> 5].ovrt = 1 << (pin & 0x1F); +} + +/*! \brief Initializes the configuration of a GPIO pin so that it can be used + * with GPIO open-drain functions. + * + * \note This function must have been called at least once before using + * \ref gpio_local_set_gpio_open_drain_pin, + * \ref gpio_local_clr_gpio_open_drain_pin or + * \ref gpio_local_tgl_gpio_open_drain_pin. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void gpio_local_init_gpio_open_drain_pin(unsigned int pin) +{ + AVR32_GPIO_LOCAL.port[pin >> 5].ovrc = 1 << (pin & 0x1F); +} + +/*! \brief Drives a GPIO pin to 1 using open drain. + * + * \param pin The pin number. + * + * \note \ref gpio_local_init and \ref gpio_local_init_gpio_open_drain_pin must + * have been called beforehand. + * + * \note This function does not enable the GPIO mode of the pin. + * \ref gpio_enable_gpio_pin can be called for this purpose. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void gpio_local_set_gpio_open_drain_pin(unsigned int pin) +{ + AVR32_GPIO_LOCAL.port[pin >> 5].oderc = 1 << (pin & 0x1F); +} + +/*! \brief Drives a GPIO pin to 0 using open drain. + * + * \param pin The pin number. + * + * \note \ref gpio_local_init and \ref gpio_local_init_gpio_open_drain_pin must + * have been called beforehand. + * + * \note This function does not enable the GPIO mode of the pin. + * \ref gpio_enable_gpio_pin can be called for this purpose. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void gpio_local_clr_gpio_open_drain_pin(unsigned int pin) +{ + AVR32_GPIO_LOCAL.port[pin >> 5].oders = 1 << (pin & 0x1F); +} + +/*! \brief Toggles a GPIO pin using open drain. + * + * \param pin The pin number. + * + * \note \ref gpio_local_init and \ref gpio_local_init_gpio_open_drain_pin must + * have been called beforehand. + * + * \note This function does not enable the GPIO mode of the pin. + * \ref gpio_enable_gpio_pin can be called for this purpose. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void gpio_local_tgl_gpio_open_drain_pin(unsigned int pin) +{ + AVR32_GPIO_LOCAL.port[pin >> 5].odert = 1 << (pin & 0x1F); +} + +//! @} +#endif // AVR32_GPIO_LOCAL_ADDRESS + +#if UC3L +//! @{ +/*! \name Peripheral Event System support + * + * The GPIO can be programmed to output peripheral events whenever an interrupt + * condition is detected, such as pin value change, or only when a rising or + * falling edge is detected. + * + */ + +/*! \brief Enables the peripheral event generation of a pin. + * + * \param pin The pin number. + * + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void gpio_enable_pin_periph_event(unsigned int pin) +{ + AVR32_GPIO.port[pin >> 5].oderc = 1 << (pin & 0x1F); // The GPIO output driver is disabled for that pin. + AVR32_GPIO.port[pin >> 5].evers = 1 << (pin & 0x1F); +} + +/*! \brief Disables the peripheral event generation of a pin. + * + * \param pin The pin number. + * + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void gpio_disable_pin_periph_event(unsigned int pin) +{ + AVR32_GPIO.port[pin >> 5].everc = 1 << (pin & 0x1F); +} + +/*! \brief Configure the peripheral event trigger mode of a pin + * + * \param pin The pin number. + * \param mode The trigger mode (\ref GPIO_PIN_CHANGE, \ref GPIO_RISING_EDGE or + * \ref GPIO_FALLING_EDGE). + * \param use_igf use the Input Glitch Filter (TRUE) or not (FALSE). + * + * \return \ref GPIO_SUCCESS or \ref GPIO_INVALID_ARGUMENT. + */ +extern int gpio_configure_pin_periph_event_mode(unsigned int pin, unsigned int mode, unsigned int use_igf); + +//! @} +#endif + + +#endif // _GPIO_H_ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/INTC/exception.x b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/INTC/exception.x new file mode 100644 index 000000000..ec4109d46 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/INTC/exception.x @@ -0,0 +1,239 @@ +/* This file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Exception and interrupt vectors. + * + * This file maps all events supported by an AVR32. + * + * - Compiler: GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with an INTC module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#if !__AVR32_UC__ && !__AVR32_AP__ + #error Implementation of the AVR32 architecture not supported by the INTC driver. +#endif + + +#include + + +//! @{ +//! \verbatim + + + .section .exception, "ax", @progbits + + +// Start of Exception Vector Table. + + // EVBA must be aligned with a power of two strictly greater than the EVBA- + // relative offset of the last vector. + .balign 0x200 + + // Export symbol. + .global _evba + .type _evba, @function +_evba: + + .org 0x000 + // Unrecoverable Exception. +_handle_Unrecoverable_Exception: + rjmp $ + + .org 0x004 + // TLB Multiple Hit. +_handle_TLB_Multiple_Hit: + rjmp $ + + .org 0x008 + // Bus Error Data Fetch. +_handle_Bus_Error_Data_Fetch: + rjmp $ + + .org 0x00C + // Bus Error Instruction Fetch. +_handle_Bus_Error_Instruction_Fetch: + rjmp $ + + .org 0x010 + // NMI. +_handle_NMI: + rjmp $ + + .org 0x014 + // Instruction Address. +_handle_Instruction_Address: + rjmp $ + + .org 0x018 + // ITLB Protection. +_handle_ITLB_Protection: + rjmp $ + + .org 0x01C + // Breakpoint. +_handle_Breakpoint: + rjmp $ + + .org 0x020 + // Illegal Opcode. +_handle_Illegal_Opcode: + rjmp $ + + .org 0x024 + // Unimplemented Instruction. +_handle_Unimplemented_Instruction: + rjmp $ + + .org 0x028 + // Privilege Violation. +_handle_Privilege_Violation: + rjmp $ + + .org 0x02C + // Floating-Point: UNUSED IN AVR32UC and AVR32AP. +_handle_Floating_Point: + rjmp $ + + .org 0x030 + // Coprocessor Absent: UNUSED IN AVR32UC. +_handle_Coprocessor_Absent: + rjmp $ + + .org 0x034 + // Data Address (Read). +_handle_Data_Address_Read: + rjmp $ + + .org 0x038 + // Data Address (Write). +_handle_Data_Address_Write: + rjmp $ + + .org 0x03C + // DTLB Protection (Read). +_handle_DTLB_Protection_Read: + rjmp $ + + .org 0x040 + // DTLB Protection (Write). +_handle_DTLB_Protection_Write: + rjmp $ + + .org 0x044 + // DTLB Modified: UNUSED IN AVR32UC. +_handle_DTLB_Modified: + rjmp $ + + .org 0x050 + // ITLB Miss. +_handle_ITLB_Miss: + rjmp $ + + .org 0x060 + // DTLB Miss (Read). +_handle_DTLB_Miss_Read: + rjmp $ + + .org 0x070 + // DTLB Miss (Write). +_handle_DTLB_Miss_Write: + rjmp $ + + .org 0x100 + // Supervisor Call. +_handle_Supervisor_Call: + rjmp $ + + +// Interrupt support. +// The interrupt controller must provide the offset address relative to EVBA. +// Important note: +// All interrupts call a C function named _get_interrupt_handler. +// This function will read group and interrupt line number to then return in +// R12 a pointer to a user-provided interrupt handler. + + .balign 4 + + .irp priority, 0, 1, 2, 3 +_int\priority: +#if __AVR32_UC__ + // R8-R12, LR, PC and SR are automatically pushed onto the system stack by the + // CPU upon interrupt entry. No other register is saved by hardware. +#elif __AVR32_AP__ + // PC and SR are automatically saved in respectively RAR_INTx and RSR_INTx by + // the CPU upon interrupt entry. No other register is saved by hardware. + pushm r8-r12, lr +#endif + mov r12, \priority // Pass the int_level parameter to the _get_interrupt_handler function. + call _get_interrupt_handler + cp.w r12, 0 // Get the pointer to the interrupt handler returned by the function. +#if __AVR32_UC__ + movne pc, r12 // If this was not a spurious interrupt (R12 != NULL), jump to the handler. +#elif __AVR32_AP__ + breq spint\priority // If this was a spurious interrupt (R12 == NULL), branch. + st.w --sp, r12 // Push the pointer to the interrupt handler onto the system stack since no register may be altered. + popm r8-r12, lr, pc // Restore registers and jump to the handler. +spint\priority: + popm r8-r12, lr +#endif + rete // If this was a spurious interrupt (R12 == NULL), return from event handler. + .endr + + +// Constant data area. + + .balign 4 + + // Values to store in the interrupt priority registers for the various interrupt priority levels. + // The interrupt priority registers contain the interrupt priority level and + // the EVBA-relative interrupt vector offset. + .global ipr_val + .type ipr_val, @object +ipr_val: + .word (AVR32_INTC_INT0 << AVR32_INTC_IPR_INTLEVEL_OFFSET) | (_int0 - _evba),\ + (AVR32_INTC_INT1 << AVR32_INTC_IPR_INTLEVEL_OFFSET) | (_int1 - _evba),\ + (AVR32_INTC_INT2 << AVR32_INTC_IPR_INTLEVEL_OFFSET) | (_int2 - _evba),\ + (AVR32_INTC_INT3 << AVR32_INTC_IPR_INTLEVEL_OFFSET) | (_int3 - _evba) + + +//! \endverbatim +//! @} diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/INTC/intc.c b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/INTC/intc.c new file mode 100644 index 000000000..84d498d1a --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/INTC/intc.c @@ -0,0 +1,214 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief INTC driver for AVR32 UC3. + * + * AVR32 Interrupt Controller driver module. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with an INTC module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#include +#include "compiler.h" +#include "preprocessor.h" +#include "intc.h" + +// define _evba from exception.S +extern void _evba; + +//! Values to store in the interrupt priority registers for the various interrupt priority levels. +extern const unsigned int ipr_val[AVR32_INTC_NUM_INT_LEVELS]; + +//! Creates a table of interrupt line handlers per interrupt group in order to optimize RAM space. +//! Each line handler table contains a set of pointers to interrupt handlers. +#if (defined __GNUC__) +#define DECL_INT_LINE_HANDLER_TABLE(GRP, unused) \ +static volatile __int_handler _int_line_handler_table_##GRP[Max(AVR32_INTC_NUM_IRQS_PER_GRP##GRP, 1)]; +#elif (defined __ICCAVR32__) +#define DECL_INT_LINE_HANDLER_TABLE(GRP, unused) \ +static volatile __no_init __int_handler _int_line_handler_table_##GRP[Max(AVR32_INTC_NUM_IRQS_PER_GRP##GRP, 1)]; +#endif +MREPEAT(AVR32_INTC_NUM_INT_GRPS, DECL_INT_LINE_HANDLER_TABLE, ~); +#undef DECL_INT_LINE_HANDLER_TABLE + +//! Table containing for each interrupt group the number of interrupt request +//! lines and a pointer to the table of interrupt line handlers. +static const struct +{ + unsigned int num_irqs; + volatile __int_handler *_int_line_handler_table; +} _int_handler_table[AVR32_INTC_NUM_INT_GRPS] = +{ +#define INSERT_INT_LINE_HANDLER_TABLE(GRP, unused) \ + {AVR32_INTC_NUM_IRQS_PER_GRP##GRP, _int_line_handler_table_##GRP}, + MREPEAT(AVR32_INTC_NUM_INT_GRPS, INSERT_INT_LINE_HANDLER_TABLE, ~) +#undef INSERT_INT_LINE_HANDLER_TABLE +}; + + +/*! \brief Default interrupt handler. + * + * \note Taken and adapted from Newlib. + */ +#if (defined __GNUC__) +__attribute__((__interrupt__)) +#elif (defined __ICCAVR32__) +__interrupt +#endif +static void _unhandled_interrupt(void) +{ + // Catch unregistered interrupts. + while (TRUE); +} + + +/*! \brief Gets the interrupt handler of the current event at the \a int_level + * interrupt priority level (called from exception.S). + * + * \param int_level Interrupt priority level to handle. + * + * \return Interrupt handler to execute. + * + * \note Taken and adapted from Newlib. + */ +__int_handler _get_interrupt_handler(unsigned int int_level) +{ + // ICR3 is mapped first, ICR0 last. + // Code in exception.S puts int_level in R12 which is used by AVR32-GCC to + // pass a single argument to a function. + unsigned int int_grp = AVR32_INTC.icr[AVR32_INTC_INT3 - int_level]; + unsigned int int_req = AVR32_INTC.irr[int_grp]; + + // As an interrupt may disappear while it is being fetched by the CPU + // (spurious interrupt caused by a delayed response from an MCU peripheral to + // an interrupt flag clear or interrupt disable instruction), check if there + // are remaining interrupt lines to process. + // If a spurious interrupt occurs, the status register (SR) contains an + // execution mode and interrupt level masks corresponding to a level 0 + // interrupt, whatever the interrupt priority level causing the spurious + // event. This behavior has been chosen because a spurious interrupt has not + // to be a priority one and because it may not cause any trouble to other + // interrupts. + // However, these spurious interrupts place the hardware in an unstable state + // and could give problems in other/future versions of the CPU, so the + // software has to be written so that they never occur. The only safe way of + // achieving this is to always clear or disable peripheral interrupts with the + // following sequence: + // 1: Mask the interrupt in the CPU by setting GM (or IxM) in SR. + // 2: Perform the bus access to the peripheral register that clears or + // disables the interrupt. + // 3: Wait until the interrupt has actually been cleared or disabled by the + // peripheral. This is usually performed by reading from a register in the + // same peripheral (it DOES NOT have to be the same register that was + // accessed in step 2, but it MUST be in the same peripheral), what takes + // bus system latencies into account, but peripheral internal latencies + // (generally 0 cycle) also have to be considered. + // 4: Unmask the interrupt in the CPU by clearing GM (or IxM) in SR. + // Note that steps 1 and 4 are useless inside interrupt handlers as the + // corresponding interrupt level is automatically masked by IxM (unless IxM is + // explicitly cleared by the software). + // + // Get the right IRQ handler. + // + // If several interrupt lines are active in the group, the interrupt line with + // the highest number is selected. This is to be coherent with the + // prioritization of interrupt groups performed by the hardware interrupt + // controller. + // + // If no handler has been registered for the pending interrupt, + // _unhandled_interrupt will be selected thanks to the initialization of + // _int_line_handler_table_x by INTC_init_interrupts. + // + // exception.S will provide the interrupt handler with a clean interrupt stack + // frame, with nothing more pushed onto the stack. The interrupt handler must + // manage the `rete' instruction, what can be done thanks to pure assembly, + // inline assembly or the `__attribute__((__interrupt__))' C function + // attribute. + return (int_req) ? _int_handler_table[int_grp]._int_line_handler_table[32 - clz(int_req) - 1] : NULL; +} + +//! Init EVBA address. This sequence might also be done in the UTILS/STARTUP/GCC/crt0.S +static __inline__ void INTC_init_evba(void) +{ + Set_system_register(AVR32_EVBA, (int)&_evba ); +} + +void INTC_init_interrupts(void) +{ + unsigned int int_grp, int_req; + + INTC_init_evba(); + + // For all interrupt groups, + for (int_grp = 0; int_grp < AVR32_INTC_NUM_INT_GRPS; int_grp++) + { + // For all interrupt request lines of each group, + for (int_req = 0; int_req < _int_handler_table[int_grp].num_irqs; int_req++) + { + // Assign _unhandled_interrupt as default interrupt handler. + _int_handler_table[int_grp]._int_line_handler_table[int_req] = &_unhandled_interrupt; + } + + // Set the interrupt group priority register to its default value. + // By default, all interrupt groups are linked to the interrupt priority + // level 0 and to the interrupt vector _int0. + AVR32_INTC.ipr[int_grp] = ipr_val[AVR32_INTC_INT0]; + } +} + + +void INTC_register_interrupt(__int_handler handler, unsigned int irq, unsigned int int_level) +{ + // Determine the group of the IRQ. + unsigned int int_grp = irq / AVR32_INTC_MAX_NUM_IRQS_PER_GRP; + + // Store in _int_line_handler_table_x the pointer to the interrupt handler, so + // that _get_interrupt_handler can retrieve it when the interrupt is vectored. + _int_handler_table[int_grp]._int_line_handler_table[irq % AVR32_INTC_MAX_NUM_IRQS_PER_GRP] = handler; + + // Program the corresponding IPRX register to set the interrupt priority level + // and the interrupt vector offset that will be fetched by the core interrupt + // system. + // NOTE: The _intx functions are intermediate assembly functions between the + // core interrupt system and the user interrupt handler. + AVR32_INTC.ipr[int_grp] = ipr_val[int_level & (AVR32_INTC_IPR_INTLEVEL_MASK >> AVR32_INTC_IPR_INTLEVEL_OFFSET)]; +} diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/INTC/intc.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/INTC/intc.h new file mode 100644 index 000000000..31a4fc16b --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/INTC/intc.h @@ -0,0 +1,100 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief INTC driver for AVR32 UC3. + * + * AVR32 Interrupt Controller driver module. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with an INTC module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _INTC_H_ +#define _INTC_H_ + +#include "compiler.h" + + +//! Maximal number of interrupt request lines per group. +#define AVR32_INTC_MAX_NUM_IRQS_PER_GRP 32 + +//! Number of interrupt priority levels. +#define AVR32_INTC_NUM_INT_LEVELS (1 << AVR32_INTC_IPR_INTLEVEL_SIZE) + + +#ifdef __AVR32_ABI_COMPILER__ // Automatically defined when compiling for AVR32, not when assembling. + +//! Pointer to interrupt handler. +#if (defined __GNUC__) +typedef void (*__int_handler)(void); +#elif (defined __ICCAVR32__) +typedef void (__interrupt *__int_handler)(void); +#endif + + +/*! \brief Initializes the hardware interrupt controller driver. + * + * \note Taken and adapted from Newlib. + */ +extern void INTC_init_interrupts(void); + +/*! \brief Registers an interrupt handler. + * + * \param handler Interrupt handler to register. + * \param irq IRQ of the interrupt handler to register. + * \param int_level Interrupt priority level to assign to the group of this IRQ. + * + * \warning The interrupt handler must manage the `rete' instruction, what can + * be done thanks to pure assembly, inline assembly or the + * `__attribute__((__interrupt__))' C function attribute. + * + * \warning If several interrupt handlers of a same group are registered with + * different priority levels, only the latest priority level set will + * be effective. + * + * \note Taken and adapted from Newlib. + */ +extern void INTC_register_interrupt(__int_handler handler, unsigned int irq, unsigned int int_level); + +#endif // __AVR32_ABI_COMPILER__ + + +#endif // _INTC_H_ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/PDCA/pdca.c b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/PDCA/pdca.c new file mode 100644 index 000000000..6c00f9e79 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/PDCA/pdca.c @@ -0,0 +1,296 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief PDCA driver for AVR32 UC3. + * + * This file defines a useful set of functions for the PDCA interface on AVR32 + * devices. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with a PDCA module. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#include "compiler.h" +#include "pdca.h" + + +volatile avr32_pdca_channel_t *pdca_get_handler(unsigned int pdca_ch_number) +{ + // get the correct channel pointer + volatile avr32_pdca_channel_t *pdca_channel = &AVR32_PDCA.channel[pdca_ch_number]; + + if (pdca_ch_number >= AVR32_PDCA_CHANNEL_LENGTH) + return (volatile avr32_pdca_channel_t *)PDCA_INVALID_ARGUMENT; + + return pdca_channel; +} + + +int pdca_init_channel(unsigned int pdca_ch_number, const pdca_channel_options_t *opt) +{ + // get the correct channel pointer + volatile avr32_pdca_channel_t *pdca_channel = pdca_get_handler(pdca_ch_number); + + pdca_disable_interrupt_transfer_complete(pdca_ch_number); // disable channel interrupt + pdca_disable_interrupt_reload_counter_zero(pdca_ch_number); // disable channel interrupt + + Bool global_interrupt_enabled = Is_global_interrupt_enabled(); + + if (global_interrupt_enabled) Disable_global_interrupt(); + pdca_channel->mar = (unsigned long)opt->addr; + pdca_channel->tcr = opt->size; + pdca_channel->psr = opt->pid; + pdca_channel->marr = (unsigned long)opt->r_addr; + pdca_channel->tcrr = opt->r_size; + pdca_channel->mr = +#if (defined AVR32_PDCA_120_H_INCLUDED ) || (defined AVR32_PDCA_121_H_INCLUDED ) || (defined AVR32_PDCA_122_H_INCLUDED ) +opt->etrig << AVR32_PDCA_ETRIG_OFFSET | +#endif // #ifdef AVR32_PDCA_120_H_INCLUDED + opt->transfer_size << AVR32_PDCA_SIZE_OFFSET; + pdca_channel->cr = AVR32_PDCA_ECLR_MASK; + pdca_channel->isr; + if (global_interrupt_enabled) Enable_global_interrupt(); + + return PDCA_SUCCESS; +} + + +unsigned int pdca_get_channel_status(unsigned int pdca_ch_number) +{ + // get the correct channel pointer + volatile avr32_pdca_channel_t *pdca_channel = pdca_get_handler(pdca_ch_number); + + return (pdca_channel->sr & AVR32_PDCA_TEN_MASK) != 0; +} + + +void pdca_disable(unsigned int pdca_ch_number) +{ + // get the correct channel pointer + volatile avr32_pdca_channel_t *pdca_channel = pdca_get_handler(pdca_ch_number); + + // Disable transfer + pdca_channel->cr = AVR32_PDCA_TDIS_MASK; + +} + + +void pdca_enable(unsigned int pdca_ch_number) +{ + // get the correct channel pointer + volatile avr32_pdca_channel_t *pdca_channel = pdca_get_handler(pdca_ch_number); + + // Enable transfer + pdca_channel->cr = AVR32_PDCA_TEN_MASK; +} + + +unsigned int pdca_get_load_size(unsigned int pdca_ch_number) +{ + // get the correct channel pointer + volatile avr32_pdca_channel_t *pdca_channel = pdca_get_handler(pdca_ch_number); + + return pdca_channel->tcr; +} + + +void pdca_load_channel(unsigned int pdca_ch_number, volatile void *addr, unsigned int size) +{ + // get the correct channel pointer + volatile avr32_pdca_channel_t *pdca_channel = pdca_get_handler(pdca_ch_number); + + Bool global_interrupt_enabled = Is_global_interrupt_enabled(); + + if (global_interrupt_enabled) Disable_global_interrupt(); + pdca_channel->mar = (unsigned long)addr; + pdca_channel->tcr = size; + pdca_channel->cr = AVR32_PDCA_ECLR_MASK; + pdca_channel->isr; + if (global_interrupt_enabled) Enable_global_interrupt(); +} + + +unsigned int pdca_get_reload_size(unsigned int pdca_ch_number) +{ + // get the correct channel pointer + volatile avr32_pdca_channel_t *pdca_channel = pdca_get_handler(pdca_ch_number); + + return pdca_channel->tcrr; +} + + +void pdca_reload_channel(unsigned int pdca_ch_number, volatile void *addr, unsigned int size) +{ + // get the correct channel pointer + volatile avr32_pdca_channel_t *pdca_channel = pdca_get_handler(pdca_ch_number); + + Bool global_interrupt_enabled = Is_global_interrupt_enabled(); + + if (global_interrupt_enabled) Disable_global_interrupt(); + // set up next memory address + pdca_channel->marr = (unsigned long)addr; + // set up next memory size + pdca_channel->tcrr = size; + pdca_channel->cr = AVR32_PDCA_ECLR_MASK; + pdca_channel->isr; + if (global_interrupt_enabled) Enable_global_interrupt(); +} + + +void pdca_set_peripheral_select(unsigned int pdca_ch_number, unsigned int pid) +{ + // get the correct channel pointer + volatile avr32_pdca_channel_t *pdca_channel = pdca_get_handler(pdca_ch_number); + + pdca_channel->psr = pid; +} + + +void pdca_set_transfer_size(unsigned int pdca_ch_number, unsigned int transfer_size) +{ + // get the correct channel pointer + volatile avr32_pdca_channel_t *pdca_channel = pdca_get_handler(pdca_ch_number); + + pdca_channel->mr = (pdca_channel->mr & ~AVR32_PDCA_SIZE_MASK) | + transfer_size << AVR32_PDCA_SIZE_OFFSET; +} + + +#if (defined AVR32_PDCA_120_H_INCLUDED ) || (defined AVR32_PDCA_121_H_INCLUDED ) || (defined AVR32_PDCA_122_H_INCLUDED ) + + +void pdca_disable_event_trigger(unsigned int pdca_ch_number) +{ + // get the correct channel pointer + volatile avr32_pdca_channel_t *pdca_channel = pdca_get_handler(pdca_ch_number); + + pdca_channel->mr &= ~AVR32_PDCA_ETRIG_MASK; +} + + +void pdca_enable_event_trigger(unsigned int pdca_ch_number) +{ + // get the correct channel pointer + volatile avr32_pdca_channel_t *pdca_channel = pdca_get_handler(pdca_ch_number); + + pdca_channel->mr |= AVR32_PDCA_ETRIG_MASK; +} + + +#endif // #ifdef AVR32_PDCA_120_H_INCLUDED + + +void pdca_disable_interrupt_transfer_error(unsigned int pdca_ch_number) +{ + // get the correct channel pointer + volatile avr32_pdca_channel_t *pdca_channel = pdca_get_handler(pdca_ch_number); + + Bool global_interrupt_enabled = Is_global_interrupt_enabled(); + + if (global_interrupt_enabled) Disable_global_interrupt(); + pdca_channel->idr = AVR32_PDCA_TERR_MASK; + pdca_channel->isr; + if (global_interrupt_enabled) Enable_global_interrupt(); +} + + +void pdca_enable_interrupt_transfer_error(unsigned int pdca_ch_number) +{ + // get the correct channel pointer + volatile avr32_pdca_channel_t *pdca_channel = pdca_get_handler(pdca_ch_number); + + pdca_channel->ier = AVR32_PDCA_TERR_MASK; +} + + +void pdca_disable_interrupt_transfer_complete(unsigned int pdca_ch_number) +{ + // get the correct channel pointer + volatile avr32_pdca_channel_t *pdca_channel = pdca_get_handler(pdca_ch_number); + + Bool global_interrupt_enabled = Is_global_interrupt_enabled(); + + if (global_interrupt_enabled) Disable_global_interrupt(); + pdca_channel->idr = AVR32_PDCA_TRC_MASK; + pdca_channel->isr; + if (global_interrupt_enabled) Enable_global_interrupt(); +} + + +void pdca_enable_interrupt_transfer_complete(unsigned int pdca_ch_number) +{ + // get the correct channel pointer + volatile avr32_pdca_channel_t *pdca_channel = pdca_get_handler(pdca_ch_number); + + pdca_channel->ier = AVR32_PDCA_TRC_MASK; +} + + +void pdca_disable_interrupt_reload_counter_zero(unsigned int pdca_ch_number) +{ + // get the correct channel pointer + volatile avr32_pdca_channel_t *pdca_channel = pdca_get_handler(pdca_ch_number); + + Bool global_interrupt_enabled = Is_global_interrupt_enabled(); + + if (global_interrupt_enabled) Disable_global_interrupt(); + pdca_channel->idr = AVR32_PDCA_RCZ_MASK; + pdca_channel->isr; + if (global_interrupt_enabled) Enable_global_interrupt(); +} + + +void pdca_enable_interrupt_reload_counter_zero(unsigned int pdca_ch_number) +{ + // get the correct channel pointer + volatile avr32_pdca_channel_t *pdca_channel = pdca_get_handler(pdca_ch_number); + + pdca_channel->ier = AVR32_PDCA_RCZ_MASK; +} + + +unsigned long pdca_get_transfer_status(unsigned int pdca_ch_number) +{ + // get the correct channel pointer + volatile avr32_pdca_channel_t *pdca_channel = pdca_get_handler(pdca_ch_number); + + return pdca_channel->isr; +} diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/PDCA/pdca.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/PDCA/pdca.h new file mode 100644 index 000000000..5668fe997 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/PDCA/pdca.h @@ -0,0 +1,251 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief PDCA driver for AVR32 UC3. + * + * This file defines a useful set of functions for the PDCA interface on AVR32 + * devices. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with a PDCA module. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _PDCA_H_ +#define _PDCA_H_ + +#include + + +//! Size of PDCA transfer: byte. +#define PDCA_TRANSFER_SIZE_BYTE AVR32_PDCA_BYTE + +//! Size of PDCA transfer: half-word. +#define PDCA_TRANSFER_SIZE_HALF_WORD AVR32_PDCA_HALF_WORD + +//! Size of PDCA transfer: word. +#define PDCA_TRANSFER_SIZE_WORD AVR32_PDCA_WORD + +/*! \name PDCA Driver Status Codes + */ +//! @{ +#define PDCA_SUCCESS 0 +#define PDCA_INVALID_ARGUMENT -1 +//! @} + +/*! \name PDCA Transfer Status Codes + */ +//! @{ +#define PDCA_TRANSFER_ERROR AVR32_PDCA_TERR_MASK +#define PDCA_TRANSFER_COMPLETE AVR32_PDCA_TRC_MASK +#define PDCA_TRANSFER_COUNTER_RELOAD_IS_ZERO AVR32_PDCA_RCZ_MASK +//! @} + + +//! PDCA channel options. +typedef struct +{ + //! Memory address. + volatile void *addr ; + //! Transfer counter. + unsigned int size ; + //! Next memory address. + volatile void *r_addr ; + //! Next transfer counter. + unsigned int r_size ; + //! Select peripheral ID. + unsigned int pid ; + //! Select the size of the transfer (byte, half-word or word). + unsigned int transfer_size ; +#if (defined AVR32_PDCA_120_H_INCLUDED ) || (defined AVR32_PDCA_121_H_INCLUDED ) || (defined AVR32_PDCA_122_H_INCLUDED ) +// Note: the options in this preprocessor section are only available from the PDCA IP version 1.2.0 on. + //! Enable (\c 1) or disable (\c 0) the transfer upon event trigger. + unsigned char etrig ; +#endif // #ifdef AVR32_PDCA_120_H_INCLUDED +} pdca_channel_options_t; + + +/*! \brief Get PDCA channel handler + * + * \param pdca_ch_number PDCA channel + * + * \return channel handled or PDCA_INVALID_ARGUMENT + */ +extern volatile avr32_pdca_channel_t *pdca_get_handler(unsigned int pdca_ch_number); + +/*! \brief Set the channel configuration + * + * \param pdca_ch_number PDCA channel + * \param opt channel option + */ +extern int pdca_init_channel(unsigned int pdca_ch_number, const pdca_channel_options_t *opt); + +/*! \brief Get the PDCA channel transfer enable status + * + * \param pdca_ch_number PDCA channel + * + * \return \c 1 if channel transfer is enabled, else \c 0 + */ +extern unsigned int pdca_get_channel_status(unsigned int pdca_ch_number); + +/*! \brief Disable the PDCA for the given channel + * + * \param pdca_ch_number PDCA channel + */ +extern void pdca_disable(unsigned int pdca_ch_number); + +/*! \brief Enable the PDCA for the given channel + * + * \param pdca_ch_number PDCA channel + */ +extern void pdca_enable(unsigned int pdca_ch_number); + +/*! \brief Get PDCA channel load size (or remaining size if transfer started) + * + * \param pdca_ch_number PDCA channel + * + * \return size current size to transfer + */ +extern unsigned int pdca_get_load_size(unsigned int pdca_ch_number); + +/*! \brief Set PDCA channel load values + * + * \param pdca_ch_number PDCA channel + * \param addr address where data to load are stored + * \param size size of the data block to load + */ +extern void pdca_load_channel(unsigned int pdca_ch_number, volatile void *addr, unsigned int size); + +/*! \brief Get PDCA channel reload size + * + * \param pdca_ch_number PDCA channel + * + * \return size current reload size + */ +extern unsigned int pdca_get_reload_size(unsigned int pdca_ch_number); + +/*! \brief Set PDCA channel reload values + * + * \param pdca_ch_number PDCA channel + * \param addr address where data to load are stored + * \param size size of the data block to load + */ +extern void pdca_reload_channel(unsigned int pdca_ch_number, volatile void *addr, unsigned int size); + +/*! \brief Set the peripheral function to use with the PDCA channel + * + * \param pdca_ch_number PDCA channel + * \param pid the peripheral ID + */ +extern void pdca_set_peripheral_select(unsigned int pdca_ch_number, unsigned int pid); + +/*! \brief Set the size of the transfer + * + * \param pdca_ch_number PDCA channel + * \param transfer_size size of the transfer (byte, half-word or word) + */ +extern void pdca_set_transfer_size(unsigned int pdca_ch_number, unsigned int transfer_size); + +#if (defined AVR32_PDCA_120_H_INCLUDED ) || (defined AVR32_PDCA_121_H_INCLUDED ) || (defined AVR32_PDCA_122_H_INCLUDED ) +// Note: the functions in this preprocessor section are only available from the PDCA IP version 1.2.0 on. + +/*! \brief Disable the event-triggered transfer feature + * + * \param pdca_ch_number PDCA channel + */ +extern void pdca_disable_event_trigger(unsigned int pdca_ch_number); + +/*! \brief Enable the event-triggered transfer feature + * + * \param pdca_ch_number PDCA channel + */ +extern void pdca_enable_event_trigger(unsigned int pdca_ch_number); + +#endif // #ifdef AVR32_PDCA_120_H_INCLUDED + +/*! \brief Disable PDCA transfer error interrupt + * + * \param pdca_ch_number PDCA channel + */ +extern void pdca_disable_interrupt_transfer_error(unsigned int pdca_ch_number); + +/*! \brief Enable PDCA transfer error interrupt + * + * \param pdca_ch_number PDCA channel + */ +extern void pdca_enable_interrupt_transfer_error(unsigned int pdca_ch_number); + +/*! \brief Disable PDCA transfer interrupt when completed (ie TCR and TCRR are both zero) + * + * \param pdca_ch_number PDCA channel + */ +extern void pdca_disable_interrupt_transfer_complete(unsigned int pdca_ch_number); + +/*! \brief Enable PDCA transfer interrupt when completed (ie TCR and TCRR are both zero) + * + * \param pdca_ch_number PDCA channel + */ +extern void pdca_enable_interrupt_transfer_complete(unsigned int pdca_ch_number); + +/*! \brief Disable PDCA transfer interrupt when TCRR reaches zero + * + * \param pdca_ch_number PDCA channel + */ +extern void pdca_disable_interrupt_reload_counter_zero(unsigned int pdca_ch_number); + +/*! \brief Enable PDCA transfer interrupt when TCRR reaches zero + * + * \param pdca_ch_number PDCA channel + */ +extern void pdca_enable_interrupt_reload_counter_zero(unsigned int pdca_ch_number); + +/*! \brief Get PDCA channel transfer status + * + * \param pdca_ch_number PDCA channel + * + * \return PDCA transfer status with the following bit-masks:\n + * - \c PDCA_TRANSFER_ERROR;\n + * - \c PDCA_TRANSFER_COMPLETE;\n + * - \c PDCA_TRANSFER_COUNTER_RELOAD_IS_ZERO. + */ +extern unsigned long pdca_get_transfer_status(unsigned int pdca_ch_number); + + +#endif // _PDCA_H_ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/pm.c b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/pm.c new file mode 100644 index 000000000..76d9268b4 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/pm.c @@ -0,0 +1,546 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file has been prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Power Manager driver. + * + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + *****************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#include "compiler.h" +#include "pm.h" + + +/*! \name PM Writable Bit-Field Registers + */ +//! @{ + +typedef union +{ + unsigned long mcctrl; + avr32_pm_mcctrl_t MCCTRL; +} u_avr32_pm_mcctrl_t; + +typedef union +{ + unsigned long cksel; + avr32_pm_cksel_t CKSEL; +} u_avr32_pm_cksel_t; + +typedef union +{ + unsigned long pll; + avr32_pm_pll_t PLL; +} u_avr32_pm_pll_t; + +typedef union +{ + unsigned long oscctrl0; + avr32_pm_oscctrl0_t OSCCTRL0; +} u_avr32_pm_oscctrl0_t; + +typedef union +{ + unsigned long oscctrl1; + avr32_pm_oscctrl1_t OSCCTRL1; +} u_avr32_pm_oscctrl1_t; + +typedef union +{ + unsigned long oscctrl32; + avr32_pm_oscctrl32_t OSCCTRL32; +} u_avr32_pm_oscctrl32_t; + +typedef union +{ + unsigned long ier; + avr32_pm_ier_t IER; +} u_avr32_pm_ier_t; + +typedef union +{ + unsigned long idr; + avr32_pm_idr_t IDR; +} u_avr32_pm_idr_t; + +typedef union +{ + unsigned long icr; + avr32_pm_icr_t ICR; +} u_avr32_pm_icr_t; + +typedef union +{ + unsigned long gcctrl; + avr32_pm_gcctrl_t GCCTRL; +} u_avr32_pm_gcctrl_t; + +typedef union +{ + unsigned long rccr; + avr32_pm_rccr_t RCCR; +} u_avr32_pm_rccr_t; + +typedef union +{ + unsigned long bgcr; + avr32_pm_bgcr_t BGCR; +} u_avr32_pm_bgcr_t; + +typedef union +{ + unsigned long vregcr; + avr32_pm_vregcr_t VREGCR; +} u_avr32_pm_vregcr_t; + +typedef union +{ + unsigned long bod; + avr32_pm_bod_t BOD; +} u_avr32_pm_bod_t; + +//! @} + + +/*! \brief Sets the mode of the oscillator 0. + * + * \param pm Base address of the Power Manager (i.e. &AVR32_PM). + * \param mode Oscillator 0 mode (i.e. AVR32_PM_OSCCTRL0_MODE_x). + */ +static void pm_set_osc0_mode(volatile avr32_pm_t *pm, unsigned int mode) +{ + // Read + u_avr32_pm_oscctrl0_t u_avr32_pm_oscctrl0 = {pm->oscctrl0}; + // Modify + u_avr32_pm_oscctrl0.OSCCTRL0.mode = mode; + // Write + pm->oscctrl0 = u_avr32_pm_oscctrl0.oscctrl0; +} + + +void pm_enable_osc0_ext_clock(volatile avr32_pm_t *pm) +{ + pm_set_osc0_mode(pm, AVR32_PM_OSCCTRL0_MODE_EXT_CLOCK); +} + + +void pm_enable_osc0_crystal(volatile avr32_pm_t *pm, unsigned int fosc0) +{ + pm_set_osc0_mode(pm, (fosc0 < 900000) ? AVR32_PM_OSCCTRL0_MODE_CRYSTAL_G0 : + (fosc0 < 3000000) ? AVR32_PM_OSCCTRL0_MODE_CRYSTAL_G1 : + (fosc0 < 8000000) ? AVR32_PM_OSCCTRL0_MODE_CRYSTAL_G2 : + AVR32_PM_OSCCTRL0_MODE_CRYSTAL_G3); +} + + +void pm_enable_clk0(volatile avr32_pm_t *pm, unsigned int startup) +{ + pm_enable_clk0_no_wait(pm, startup); + pm_wait_for_clk0_ready(pm); +} + + +void pm_disable_clk0(volatile avr32_pm_t *pm) +{ + pm->mcctrl &= ~AVR32_PM_MCCTRL_OSC0EN_MASK; +} + + +void pm_enable_clk0_no_wait(volatile avr32_pm_t *pm, unsigned int startup) +{ + // Read register + u_avr32_pm_oscctrl0_t u_avr32_pm_oscctrl0 = {pm->oscctrl0}; + // Modify + u_avr32_pm_oscctrl0.OSCCTRL0.startup = startup; + // Write back + pm->oscctrl0 = u_avr32_pm_oscctrl0.oscctrl0; + + pm->mcctrl |= AVR32_PM_MCCTRL_OSC0EN_MASK; +} + + +void pm_wait_for_clk0_ready(volatile avr32_pm_t *pm) +{ + while (!(pm->poscsr & AVR32_PM_POSCSR_OSC0RDY_MASK)); +} + + +/*! \brief Sets the mode of the oscillator 1. + * + * \param pm Base address of the Power Manager (i.e. &AVR32_PM). + * \param mode Oscillator 1 mode (i.e. AVR32_PM_OSCCTRL1_MODE_x). + */ +static void pm_set_osc1_mode(volatile avr32_pm_t *pm, unsigned int mode) +{ + // Read + u_avr32_pm_oscctrl1_t u_avr32_pm_oscctrl1 = {pm->oscctrl1}; + // Modify + u_avr32_pm_oscctrl1.OSCCTRL1.mode = mode; + // Write + pm->oscctrl1 = u_avr32_pm_oscctrl1.oscctrl1; +} + + +void pm_enable_osc1_ext_clock(volatile avr32_pm_t *pm) +{ + pm_set_osc1_mode(pm, AVR32_PM_OSCCTRL1_MODE_EXT_CLOCK); +} + + +void pm_enable_osc1_crystal(volatile avr32_pm_t *pm, unsigned int fosc1) +{ + pm_set_osc1_mode(pm, (fosc1 < 900000) ? AVR32_PM_OSCCTRL1_MODE_CRYSTAL_G0 : + (fosc1 < 3000000) ? AVR32_PM_OSCCTRL1_MODE_CRYSTAL_G1 : + (fosc1 < 8000000) ? AVR32_PM_OSCCTRL1_MODE_CRYSTAL_G2 : + AVR32_PM_OSCCTRL1_MODE_CRYSTAL_G3); +} + + +void pm_enable_clk1(volatile avr32_pm_t *pm, unsigned int startup) +{ + pm_enable_clk1_no_wait(pm, startup); + pm_wait_for_clk1_ready(pm); +} + + +void pm_disable_clk1(volatile avr32_pm_t *pm) +{ + pm->mcctrl &= ~AVR32_PM_MCCTRL_OSC1EN_MASK; +} + + +void pm_enable_clk1_no_wait(volatile avr32_pm_t *pm, unsigned int startup) +{ + // Read register + u_avr32_pm_oscctrl1_t u_avr32_pm_oscctrl1 = {pm->oscctrl1}; + // Modify + u_avr32_pm_oscctrl1.OSCCTRL1.startup = startup; + // Write back + pm->oscctrl1 = u_avr32_pm_oscctrl1.oscctrl1; + + pm->mcctrl |= AVR32_PM_MCCTRL_OSC1EN_MASK; +} + + +void pm_wait_for_clk1_ready(volatile avr32_pm_t *pm) +{ + while (!(pm->poscsr & AVR32_PM_POSCSR_OSC1RDY_MASK)); +} + + +/*! \brief Sets the mode of the 32-kHz oscillator. + * + * \param pm Base address of the Power Manager (i.e. &AVR32_PM). + * \param mode 32-kHz oscillator mode (i.e. AVR32_PM_OSCCTRL32_MODE_x). + */ +static void pm_set_osc32_mode(volatile avr32_pm_t *pm, unsigned int mode) +{ + // Read + u_avr32_pm_oscctrl32_t u_avr32_pm_oscctrl32 = {pm->oscctrl32}; + // Modify + u_avr32_pm_oscctrl32.OSCCTRL32.mode = mode; + // Write + pm->oscctrl32 = u_avr32_pm_oscctrl32.oscctrl32; +} + + +void pm_enable_osc32_ext_clock(volatile avr32_pm_t *pm) +{ + pm_set_osc32_mode(pm, AVR32_PM_OSCCTRL32_MODE_EXT_CLOCK); +} + + +void pm_enable_osc32_crystal(volatile avr32_pm_t *pm) +{ + pm_set_osc32_mode(pm, AVR32_PM_OSCCTRL32_MODE_CRYSTAL); +} + + +void pm_enable_clk32(volatile avr32_pm_t *pm, unsigned int startup) +{ + pm_enable_clk32_no_wait(pm, startup); + pm_wait_for_clk32_ready(pm); +} + + +void pm_disable_clk32(volatile avr32_pm_t *pm) +{ + pm->oscctrl32 &= ~AVR32_PM_OSCCTRL32_OSC32EN_MASK; +} + + +void pm_enable_clk32_no_wait(volatile avr32_pm_t *pm, unsigned int startup) +{ + // Read register + u_avr32_pm_oscctrl32_t u_avr32_pm_oscctrl32 = {pm->oscctrl32}; + // Modify + u_avr32_pm_oscctrl32.OSCCTRL32.osc32en = 1; + u_avr32_pm_oscctrl32.OSCCTRL32.startup = startup; + // Write back + pm->oscctrl32 = u_avr32_pm_oscctrl32.oscctrl32; +} + + +void pm_wait_for_clk32_ready(volatile avr32_pm_t *pm) +{ + while (!(pm->poscsr & AVR32_PM_POSCSR_OSC32RDY_MASK)); +} + + +void pm_cksel(volatile avr32_pm_t *pm, + unsigned int pbadiv, + unsigned int pbasel, + unsigned int pbbdiv, + unsigned int pbbsel, + unsigned int hsbdiv, + unsigned int hsbsel) +{ + u_avr32_pm_cksel_t u_avr32_pm_cksel = {0}; + + u_avr32_pm_cksel.CKSEL.cpusel = hsbsel; + u_avr32_pm_cksel.CKSEL.cpudiv = hsbdiv; + u_avr32_pm_cksel.CKSEL.hsbsel = hsbsel; + u_avr32_pm_cksel.CKSEL.hsbdiv = hsbdiv; + u_avr32_pm_cksel.CKSEL.pbasel = pbasel; + u_avr32_pm_cksel.CKSEL.pbadiv = pbadiv; + u_avr32_pm_cksel.CKSEL.pbbsel = pbbsel; + u_avr32_pm_cksel.CKSEL.pbbdiv = pbbdiv; + + pm->cksel = u_avr32_pm_cksel.cksel; + + // Wait for ckrdy bit and then clear it + while (!(pm->poscsr & AVR32_PM_POSCSR_CKRDY_MASK)); +} + + +void pm_gc_setup(volatile avr32_pm_t *pm, + unsigned int gc, + unsigned int osc_or_pll, // Use Osc (=0) or PLL (=1) + unsigned int pll_osc, // Sel Osc0/PLL0 or Osc1/PLL1 + unsigned int diven, + unsigned int div) +{ + u_avr32_pm_gcctrl_t u_avr32_pm_gcctrl = {0}; + + u_avr32_pm_gcctrl.GCCTRL.oscsel = pll_osc; + u_avr32_pm_gcctrl.GCCTRL.pllsel = osc_or_pll; + u_avr32_pm_gcctrl.GCCTRL.diven = diven; + u_avr32_pm_gcctrl.GCCTRL.div = div; + + pm->gcctrl[gc] = u_avr32_pm_gcctrl.gcctrl; +} + + +void pm_gc_enable(volatile avr32_pm_t *pm, + unsigned int gc) +{ + pm->gcctrl[gc] |= AVR32_PM_GCCTRL_CEN_MASK; +} + + +void pm_gc_disable(volatile avr32_pm_t *pm, + unsigned int gc) +{ + pm->gcctrl[gc] &= ~AVR32_PM_GCCTRL_CEN_MASK; +} + + +void pm_pll_setup(volatile avr32_pm_t *pm, + unsigned int pll, + unsigned int mul, + unsigned int div, + unsigned int osc, + unsigned int lockcount) +{ + u_avr32_pm_pll_t u_avr32_pm_pll = {0}; + + u_avr32_pm_pll.PLL.pllosc = osc; + u_avr32_pm_pll.PLL.plldiv = div; + u_avr32_pm_pll.PLL.pllmul = mul; + u_avr32_pm_pll.PLL.pllcount = lockcount; + + pm->pll[pll] = u_avr32_pm_pll.pll; +} + + +void pm_pll_set_option(volatile avr32_pm_t *pm, + unsigned int pll, + unsigned int pll_freq, + unsigned int pll_div2, + unsigned int pll_wbwdisable) +{ + u_avr32_pm_pll_t u_avr32_pm_pll = {pm->pll[pll]}; + u_avr32_pm_pll.PLL.pllopt = pll_freq | (pll_div2 << 1) | (pll_wbwdisable << 2); + pm->pll[pll] = u_avr32_pm_pll.pll; +} + + +unsigned int pm_pll_get_option(volatile avr32_pm_t *pm, + unsigned int pll) +{ + return (pm->pll[pll] & AVR32_PM_PLLOPT_MASK) >> AVR32_PM_PLLOPT_OFFSET; +} + + +void pm_pll_enable(volatile avr32_pm_t *pm, + unsigned int pll) +{ + pm->pll[pll] |= AVR32_PM_PLLEN_MASK; +} + + +void pm_pll_disable(volatile avr32_pm_t *pm, + unsigned int pll) +{ + pm->pll[pll] &= ~AVR32_PM_PLLEN_MASK; +} + + +void pm_wait_for_pll0_locked(volatile avr32_pm_t *pm) +{ + while (!(pm->poscsr & AVR32_PM_POSCSR_LOCK0_MASK)); +} + + +void pm_wait_for_pll1_locked(volatile avr32_pm_t *pm) +{ + while (!(pm->poscsr & AVR32_PM_POSCSR_LOCK1_MASK)); +} + + +void pm_switch_to_clock(volatile avr32_pm_t *pm, unsigned long clock) +{ + // Read + u_avr32_pm_mcctrl_t u_avr32_pm_mcctrl = {pm->mcctrl}; + // Modify + u_avr32_pm_mcctrl.MCCTRL.mcsel = clock; + // Write back + pm->mcctrl = u_avr32_pm_mcctrl.mcctrl; +} + + +void pm_switch_to_osc0(volatile avr32_pm_t *pm, unsigned int fosc0, unsigned int startup) +{ + pm_enable_osc0_crystal(pm, fosc0); // Enable the Osc0 in crystal mode + pm_enable_clk0(pm, startup); // Crystal startup time - This parameter is critical and depends on the characteristics of the crystal + pm_switch_to_clock(pm, AVR32_PM_MCSEL_OSC0); // Then switch main clock to Osc0 +} + + +void pm_bod_enable_irq(volatile avr32_pm_t *pm) +{ + pm->ier = AVR32_PM_IER_BODDET_MASK; +} + + +void pm_bod_disable_irq(volatile avr32_pm_t *pm) +{ + Bool global_interrupt_enabled = Is_global_interrupt_enabled(); + + if (global_interrupt_enabled) Disable_global_interrupt(); + pm->idr = AVR32_PM_IDR_BODDET_MASK; + pm->isr; + if (global_interrupt_enabled) Enable_global_interrupt(); +} + + +void pm_bod_clear_irq(volatile avr32_pm_t *pm) +{ + pm->icr = AVR32_PM_ICR_BODDET_MASK; +} + + +unsigned long pm_bod_get_irq_status(volatile avr32_pm_t *pm) +{ + return ((pm->isr & AVR32_PM_ISR_BODDET_MASK) != 0); +} + + +unsigned long pm_bod_get_irq_enable_bit(volatile avr32_pm_t *pm) +{ + return ((pm->imr & AVR32_PM_IMR_BODDET_MASK) != 0); +} + + +unsigned long pm_bod_get_level(volatile avr32_pm_t *pm) +{ + return (pm->bod & AVR32_PM_BOD_LEVEL_MASK) >> AVR32_PM_BOD_LEVEL_OFFSET; +} + + +unsigned long pm_read_gplp(volatile avr32_pm_t *pm, unsigned long gplp) +{ + return pm->gplp[gplp]; +} + + +void pm_write_gplp(volatile avr32_pm_t *pm, unsigned long gplp, unsigned long value) +{ + pm->gplp[gplp] = value; +} + + +long pm_enable_module(volatile avr32_pm_t *pm, unsigned long module) +{ + unsigned long domain = module>>5; + unsigned long *regptr = (unsigned long*)(&(pm->cpumask) + domain); + + // Implementation-specific shortcut: the ckMASK registers are contiguous and + // memory-mapped in that order: CPUMASK, HSBMASK, PBAMASK, PBBMASK. + + *regptr |= (1<<(module%32)); + + return PASS; +} + +long pm_disable_module(volatile avr32_pm_t *pm, unsigned long module) +{ + unsigned long domain = module>>5; + unsigned long *regptr = (unsigned long*)(&(pm->cpumask) + domain); + + // Implementation-specific shortcut: the ckMASK registers are contiguous and + // memory-mapped in that order: CPUMASK, HSBMASK, PBAMASK, PBBMASK. + + *regptr &= ~(1<<(module%32)); + + return PASS; +} diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/pm.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/pm.h new file mode 100644 index 000000000..ca679f734 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/pm.h @@ -0,0 +1,493 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file has been prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Power Manager driver. + * + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + *****************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _PM_H_ +#define _PM_H_ + +#include +#include "compiler.h" +#include "preprocessor.h" + + +/*! \brief Sets the MCU in the specified sleep mode. + * + * \param mode Sleep mode: + * \arg \c AVR32_PM_SMODE_IDLE: Idle; + * \arg \c AVR32_PM_SMODE_FROZEN: Frozen; + * \arg \c AVR32_PM_SMODE_STANDBY: Standby; + * \arg \c AVR32_PM_SMODE_STOP: Stop; + * \arg \c AVR32_PM_SMODE_DEEP_STOP: DeepStop; + * \arg \c AVR32_PM_SMODE_STATIC: Static. + */ +#define SLEEP(mode) {__asm__ __volatile__ ("sleep "STRINGZ(mode));} + + +//! Input and output parameters when initializing PM clocks using pm_configure_clocks(). +typedef struct +{ + //! CPU frequency (input/output argument). + unsigned long cpu_f; + + //! PBA frequency (input/output argument). + unsigned long pba_f; + + //! Oscillator 0's external crystal(or external clock) frequency (board dependant) (input argument). + unsigned long osc0_f; + + //! Oscillator 0's external crystal(or external clock) startup time: AVR32_PM_OSCCTRL0_STARTUP_x_RCOSC (input argument). + unsigned long osc0_startup; +} pm_freq_param_t; + +#define PM_FREQ_STATUS_FAIL (-1) +#define PM_FREQ_STATUS_OK (0) + + +/*! \brief Gets the MCU reset cause. + * + * \param pm Base address of the Power Manager instance (i.e. &AVR32_PM). + * + * \return The MCU reset cause which can be masked with the + * \c AVR32_PM_RCAUSE_x_MASK bit-masks to isolate specific causes. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ unsigned int pm_get_reset_cause(volatile avr32_pm_t *pm) +{ + return pm->rcause; +} + + +/*! + * \brief This function will enable the external clock mode of the oscillator 0. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + */ +extern void pm_enable_osc0_ext_clock(volatile avr32_pm_t *pm); + + +/*! + * \brief This function will enable the crystal mode of the oscillator 0. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param fosc0 Oscillator 0 crystal frequency (Hz) + */ +extern void pm_enable_osc0_crystal(volatile avr32_pm_t *pm, unsigned int fosc0); + + +/*! + * \brief This function will enable the oscillator 0 to be used with a startup time. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param startup Clock 0 startup time. AVR32_PM_OSCCTRL0_STARTUP_x_RCOSC. + */ +extern void pm_enable_clk0(volatile avr32_pm_t *pm, unsigned int startup); + + +/*! + * \brief This function will disable the oscillator 0. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + */ +extern void pm_disable_clk0(volatile avr32_pm_t *pm); + + +/*! + * \brief This function will enable the oscillator 0 to be used with no startup time. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param startup Clock 0 startup time, for which the function does not wait. AVR32_PM_OSCCTRL0_STARTUP_x_RCOSC. + */ +extern void pm_enable_clk0_no_wait(volatile avr32_pm_t *pm, unsigned int startup); + + +/*! + * \brief This function will wait until the Osc0 clock is ready. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + */ +extern void pm_wait_for_clk0_ready(volatile avr32_pm_t *pm); + + +/*! + * \brief This function will enable the external clock mode of the oscillator 1. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + */ +extern void pm_enable_osc1_ext_clock(volatile avr32_pm_t *pm); + + +/*! + * \brief This function will enable the crystal mode of the oscillator 1. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param fosc1 Oscillator 1 crystal frequency (Hz) + */ +extern void pm_enable_osc1_crystal(volatile avr32_pm_t *pm, unsigned int fosc1); + + +/*! + * \brief This function will enable the oscillator 1 to be used with a startup time. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param startup Clock 1 startup time. AVR32_PM_OSCCTRL1_STARTUP_x_RCOSC. + */ +extern void pm_enable_clk1(volatile avr32_pm_t *pm, unsigned int startup); + + +/*! + * \brief This function will disable the oscillator 1. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + */ +extern void pm_disable_clk1(volatile avr32_pm_t *pm); + + +/*! + * \brief This function will enable the oscillator 1 to be used with no startup time. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param startup Clock 1 startup time, for which the function does not wait. AVR32_PM_OSCCTRL1_STARTUP_x_RCOSC. + */ +extern void pm_enable_clk1_no_wait(volatile avr32_pm_t *pm, unsigned int startup); + + +/*! + * \brief This function will wait until the Osc1 clock is ready. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + */ +extern void pm_wait_for_clk1_ready(volatile avr32_pm_t *pm); + + +/*! + * \brief This function will enable the external clock mode of the 32-kHz oscillator. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + */ +extern void pm_enable_osc32_ext_clock(volatile avr32_pm_t *pm); + + +/*! + * \brief This function will enable the crystal mode of the 32-kHz oscillator. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + */ +extern void pm_enable_osc32_crystal(volatile avr32_pm_t *pm); + + +/*! + * \brief This function will enable the oscillator 32 to be used with a startup time. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param startup Clock 32 kHz startup time. AVR32_PM_OSCCTRL32_STARTUP_x_RCOSC. + */ +extern void pm_enable_clk32(volatile avr32_pm_t *pm, unsigned int startup); + + +/*! + * \brief This function will disable the oscillator 32. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + */ +extern void pm_disable_clk32(volatile avr32_pm_t *pm); + + +/*! + * \brief This function will enable the oscillator 32 to be used with no startup time. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param startup Clock 32 kHz startup time, for which the function does not wait. AVR32_PM_OSCCTRL32_STARTUP_x_RCOSC. + */ +extern void pm_enable_clk32_no_wait(volatile avr32_pm_t *pm, unsigned int startup); + + +/*! + * \brief This function will wait until the osc32 clock is ready. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + */ +extern void pm_wait_for_clk32_ready(volatile avr32_pm_t *pm); + + +/*! + * \brief This function will select all the power manager clocks. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param pbadiv Peripheral Bus A clock divisor enable + * \param pbasel Peripheral Bus A select + * \param pbbdiv Peripheral Bus B clock divisor enable + * \param pbbsel Peripheral Bus B select + * \param hsbdiv High Speed Bus clock divisor enable (CPU clock = HSB clock) + * \param hsbsel High Speed Bus select (CPU clock = HSB clock ) + */ +extern void pm_cksel(volatile avr32_pm_t *pm, unsigned int pbadiv, unsigned int pbasel, unsigned int pbbdiv, unsigned int pbbsel, unsigned int hsbdiv, unsigned int hsbsel); + + +/*! + * \brief This function will setup a generic clock. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param gc generic clock number (0 for gc0...) + * \param osc_or_pll Use OSC (=0) or PLL (=1) + * \param pll_osc Select Osc0/PLL0 or Osc1/PLL1 + * \param diven Generic clock divisor enable + * \param div Generic clock divisor + */ +extern void pm_gc_setup(volatile avr32_pm_t *pm, unsigned int gc, unsigned int osc_or_pll, unsigned int pll_osc, unsigned int diven, unsigned int div); + + +/*! + * \brief This function will enable a generic clock. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param gc generic clock number (0 for gc0...) + */ +extern void pm_gc_enable(volatile avr32_pm_t *pm, unsigned int gc); + + +/*! + * \brief This function will disable a generic clock. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param gc generic clock number (0 for gc0...) + */ +extern void pm_gc_disable(volatile avr32_pm_t *pm, unsigned int gc); + + +/*! + * \brief This function will setup a PLL. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param pll PLL number(0 for PLL0, 1 for PLL1) + * \param mul PLL MUL in the PLL formula + * \param div PLL DIV in the PLL formula + * \param osc OSC number (0 for osc0, 1 for osc1) + * \param lockcount PLL lockount + */ +extern void pm_pll_setup(volatile avr32_pm_t *pm, unsigned int pll, unsigned int mul, unsigned int div, unsigned int osc, unsigned int lockcount); + + +/*! + * \brief This function will set a PLL option. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param pll PLL number(0 for PLL0, 1 for PLL1) + * \param pll_freq Set to 1 for VCO frequency range 80-180MHz, set to 0 for VCO frequency range 160-240Mhz. + * \param pll_div2 Divide the PLL output frequency by 2 (this settings does not change the FVCO value) + * \param pll_wbwdisable 1 Disable the Wide-Bandith Mode (Wide-Bandwith mode allow a faster startup time and out-of-lock time). 0 to enable the Wide-Bandith Mode. + */ +extern void pm_pll_set_option(volatile avr32_pm_t *pm, unsigned int pll, unsigned int pll_freq, unsigned int pll_div2, unsigned int pll_wbwdisable); + + +/*! + * \brief This function will get a PLL option. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param pll PLL number(0 for PLL0, 1 for PLL1) + * \return Option + */ +extern unsigned int pm_pll_get_option(volatile avr32_pm_t *pm, unsigned int pll); + + +/*! + * \brief This function will enable a PLL. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param pll PLL number(0 for PLL0, 1 for PLL1) + */ +extern void pm_pll_enable(volatile avr32_pm_t *pm, unsigned int pll); + + +/*! + * \brief This function will disable a PLL. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param pll PLL number(0 for PLL0, 1 for PLL1) + */ +extern void pm_pll_disable(volatile avr32_pm_t *pm, unsigned int pll); + + +/*! + * \brief This function will wait for PLL0 locked + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + */ +extern void pm_wait_for_pll0_locked(volatile avr32_pm_t *pm); + + +/*! + * \brief This function will wait for PLL1 locked + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + */ +extern void pm_wait_for_pll1_locked(volatile avr32_pm_t *pm); + + +/*! + * \brief This function will switch the power manager main clock. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param clock Clock to be switched on. AVR32_PM_MCSEL_SLOW for RCOsc, AVR32_PM_MCSEL_OSC0 for Osc0, AVR32_PM_MCSEL_PLL0 for PLL0. + */ +extern void pm_switch_to_clock(volatile avr32_pm_t *pm, unsigned long clock); + + +/*! + * \brief Switch main clock to clock Osc0 (crystal mode) + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param fosc0 Oscillator 0 crystal frequency (Hz) + * \param startup Crystal 0 startup time. AVR32_PM_OSCCTRL0_STARTUP_x_RCOSC. + */ +extern void pm_switch_to_osc0(volatile avr32_pm_t *pm, unsigned int fosc0, unsigned int startup); + + +/*! \brief Enables the Brown-Out Detector interrupt. + * + * \param pm Base address of the Power Manager (i.e. &AVR32_PM). + */ +extern void pm_bod_enable_irq(volatile avr32_pm_t *pm); + + +/*! \brief Disables the Brown-Out Detector interrupt. + * + * \param pm Base address of the Power Manager (i.e. &AVR32_PM). + */ +extern void pm_bod_disable_irq(volatile avr32_pm_t *pm); + + +/*! \brief Clears the Brown-Out Detector interrupt flag. + * + * \param pm Base address of the Power Manager (i.e. &AVR32_PM). + */ +extern void pm_bod_clear_irq(volatile avr32_pm_t *pm); + + +/*! \brief Gets the Brown-Out Detector interrupt flag. + * + * \param pm Base address of the Power Manager (i.e. &AVR32_PM). + * + * \retval 0 No BOD interrupt. + * \retval 1 BOD interrupt pending. + */ +extern unsigned long pm_bod_get_irq_status(volatile avr32_pm_t *pm); + + +/*! \brief Gets the Brown-Out Detector interrupt enable status. + * + * \param pm Base address of the Power Manager (i.e. &AVR32_PM). + * + * \retval 0 BOD interrupt disabled. + * \retval 1 BOD interrupt enabled. + */ +extern unsigned long pm_bod_get_irq_enable_bit(volatile avr32_pm_t *pm); + + +/*! \brief Gets the triggering threshold of the Brown-Out Detector. + * + * \param pm Base address of the Power Manager (i.e. &AVR32_PM). + * + * \return Triggering threshold of the BOD. See the electrical characteristics + * in the part datasheet for actual voltage levels. + */ +extern unsigned long pm_bod_get_level(volatile avr32_pm_t *pm); + + +/*! + * \brief Read the content of the PM GPLP registers + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param gplp GPLP register index (0,1,... depending on the number of GPLP registers for a given part) + * + * \return The content of the chosen GPLP register. + */ +extern unsigned long pm_read_gplp(volatile avr32_pm_t *pm, unsigned long gplp); + + +/*! + * \brief Write into the PM GPLP registers + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param gplp GPLP register index (0,1,... depending on the number of GPLP registers for a given part) + * \param value Value to write + */ +extern void pm_write_gplp(volatile avr32_pm_t *pm, unsigned long gplp, unsigned long value); + + +/*! \brief Enable the clock of a module. + * + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param module The module to clock (use one of the defines in the part-specific + * header file under "toolchain folder"/avr32/inc(lude)/avr32/; depending on the + * clock domain, look for the sections "CPU clocks", "HSB clocks", "PBx clocks") + * + * \return Status. + * \retval 0 Success. + * \retval <0 An error occured. + */ +extern long pm_enable_module(volatile avr32_pm_t *pm, unsigned long module); + +/*! \brief Disable the clock of a module. + * + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param module The module to shut down (use one of the defines in the part-specific + * header file under "toolchain folder"/avr32/inc(lude)/avr32/; depending on the + * clock domain, look for the sections "CPU clocks", "HSB clocks", "PBx clocks") + * + * \return Status. + * \retval 0 Success. + * \retval <0 An error occured. + */ +extern long pm_disable_module(volatile avr32_pm_t *pm, unsigned long module); + + + +/*! \brief Automatically configure the CPU, PBA, PBB, and HSB clocks + * according to the user wishes. + * + * This function needs some parameters stored in a pm_freq_param_t structure: + * - cpu_f and pba_f are the wanted frequencies, + * - osc0_f is the oscillator 0 on-board frequency (e.g. FOSC0), + * - osc0_startup is the oscillator 0 startup time (e.g. OSC0_STARTUP). + * + * The function will then configure the clocks using the following rules: + * - It first try to find a valid PLL frequency (the highest possible value to avoid jitter) in order + * to satisfy the CPU frequency, + * - It optimizes the configuration depending the various divide stages, + * - Then, the PBA frequency is configured from the CPU freq. + * - Note that HSB and PBB are configured with the same frequency as CPU. + * - Note also that the number of wait states of the flash read accesses is automatically set-up depending + * the CPU frequency. As a consequence, the application needs the FLASHC driver to compile. + * + * The CPU, HSB and PBA frequencies programmed after configuration are stored back into cpu_f and pba_f. + * + * \param param pointer on the configuration structure. + * + * \retval PM_FREQ_STATUS_OK Mode successfully initialized. + * \retval PM_FREQ_STATUS_FAIL The configuration can not be done. + */ +extern int pm_configure_clocks(pm_freq_param_t *param); + + +/*! \brief Automatically configure the USB clock. + * + * USB clock is configured to 48MHz, using the PLL1 from the Oscillator0, assuming + * a 12 MHz crystal is connected to it. + */ +extern void pm_configure_usb_clock(void); + + +#endif // _PM_H_ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/pm_conf_clocks.c b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/pm_conf_clocks.c new file mode 100644 index 000000000..8beb83b20 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/pm_conf_clocks.c @@ -0,0 +1,268 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file has been prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Power Manager clocks configuration helper. + * + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + *****************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#include +#include "compiler.h" +#include "pm.h" + +extern void flashc_set_wait_state(unsigned int wait_state); +#if (defined AVR32_FLASHC_210_H_INCLUDED) +extern void flashc_issue_command(unsigned int command, int page_number); +#endif + + +#define PM_MAX_MUL ((1 << AVR32_PM_PLL0_PLLMUL_SIZE) - 1) + + +int pm_configure_clocks(pm_freq_param_t *param) +{ + // Supported frequencies: + // Fosc0 mul div PLL div2_en cpu_f pba_f Comment + // 12 15 1 192 1 12 12 + // 12 9 3 40 1 20 20 PLL out of spec + // 12 15 1 192 1 24 12 + // 12 9 1 120 1 30 15 + // 12 9 3 40 0 40 20 PLL out of spec + // 12 15 1 192 1 48 12 + // 12 15 1 192 1 48 24 + // 12 8 1 108 1 54 27 + // 12 9 1 120 1 60 15 + // 12 9 1 120 1 60 30 + // 12 10 1 132 1 66 16.5 + // + unsigned long in_cpu_f = param->cpu_f; + unsigned long in_osc0_f = param->osc0_f; + unsigned long mul, div, div2_en = 0, div2_cpu = 0, div2_pba = 0; + unsigned long pll_freq, rest; + Bool b_div2_pba, b_div2_cpu; + + // Switch to external Oscillator 0 + pm_switch_to_osc0(&AVR32_PM, in_osc0_f, param->osc0_startup); + + // Start with CPU freq config + if (in_cpu_f == in_osc0_f) + { + param->cpu_f = in_osc0_f; + param->pba_f = in_osc0_f; + return PM_FREQ_STATUS_OK; + } + else if (in_cpu_f < in_osc0_f) + { + // TBD + } + + rest = in_cpu_f % in_osc0_f; + + for (div = 1; div < 32; div++) + { + if ((div * rest) % in_osc0_f == 0) + break; + } + if (div == 32) + return PM_FREQ_STATUS_FAIL; + + mul = (in_cpu_f * div) / in_osc0_f; + + if (mul > PM_MAX_MUL) + return PM_FREQ_STATUS_FAIL; + + // export 2power from PLL div to div2_cpu + while (!(div % 2)) + { + div /= 2; + div2_cpu++; + } + + // Here we know the mul and div parameter of the PLL config. + // . Check out if the PLL has a valid in_cpu_f. + // . Try to have for the PLL frequency (VCO output) the highest possible value + // to reduce jitter. + while (in_osc0_f * 2 * mul / div < AVR32_PM_PLL_VCO_RANGE0_MAX_FREQ) + { + if (2 * mul > PM_MAX_MUL) + break; + mul *= 2; + div2_cpu++; + } + + if (div2_cpu != 0) + { + div2_cpu--; + div2_en = 1; + } + + pll_freq = in_osc0_f * mul / (div * (1 << div2_en)); + + // Update real CPU Frequency + param->cpu_f = pll_freq / (1 << div2_cpu); + mul--; + + pm_pll_setup(&AVR32_PM + , 0 // pll + , mul // mul + , div // div + , 0 // osc + , 16 // lockcount + ); + + pm_pll_set_option(&AVR32_PM + , 0 // pll + // PLL clock is lower than 160MHz: need to set pllopt. + , (pll_freq < AVR32_PM_PLL_VCO_RANGE0_MIN_FREQ) ? 1 : 0 // pll_freq + , div2_en // pll_div2 + , 0 // pll_wbwdisable + ); + + rest = pll_freq; + while (rest > AVR32_PM_PBA_MAX_FREQ || + rest != param->pba_f) + { + div2_pba++; + rest = pll_freq / (1 << div2_pba); + if (rest < param->pba_f) + break; + } + + // Update real PBA Frequency + param->pba_f = pll_freq / (1 << div2_pba); + + // Enable PLL0 + pm_pll_enable(&AVR32_PM, 0); + + // Wait for PLL0 locked + pm_wait_for_pll0_locked(&AVR32_PM); + + if (div2_cpu) + { + b_div2_cpu = TRUE; + div2_cpu--; + } + else + b_div2_cpu = FALSE; + + if (div2_pba) + { + b_div2_pba = TRUE; + div2_pba--; + } + else + b_div2_pba = FALSE; + + pm_cksel(&AVR32_PM + , b_div2_pba, div2_pba // PBA + , b_div2_cpu, div2_cpu // PBB + , b_div2_cpu, div2_cpu // HSB + ); + + if (param->cpu_f > AVR32_FLASHC_FWS_0_MAX_FREQ) + { + flashc_set_wait_state(1); +#if (defined AVR32_FLASHC_210_H_INCLUDED) + if (param->cpu_f > AVR32_FLASHC_HSEN_FWS_1_MAX_FREQ) + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_HSEN, -1); + else + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_HSDIS, -1); +#endif + } + else + { + flashc_set_wait_state(0); +#if (defined AVR32_FLASHC_210_H_INCLUDED) + if (param->cpu_f > AVR32_FLASHC_HSEN_FWS_0_MAX_FREQ) + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_HSEN, -1); + else + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_HSDIS, -1); +#endif + } + + pm_switch_to_clock(&AVR32_PM, AVR32_PM_MCCTRL_MCSEL_PLL0); + + return PM_FREQ_STATUS_OK; +} + + +void pm_configure_usb_clock(void) +{ +#if UC3A3 + + // Setup USB GCLK. + pm_gc_setup(&AVR32_PM, AVR32_PM_GCLK_USBB, // gc + 0, // osc_or_pll: use Osc (if 0) or PLL (if 1) + 0, // pll_osc: select Osc0/PLL0 or Osc1/PLL1 + 0, // diven + 0); // div + + // Enable USB GCLK. + pm_gc_enable(&AVR32_PM, AVR32_PM_GCLK_USBB); +#else + // Use 12MHz from OSC0 and generate 96 MHz + pm_pll_setup(&AVR32_PM, 1, // pll. + 7, // mul. + 1, // div. + 0, // osc. + 16); // lockcount. + + pm_pll_set_option(&AVR32_PM, 1, // pll. + 1, // pll_freq: choose the range 80-180MHz. + 1, // pll_div2. + 0); // pll_wbwdisable. + + // start PLL1 and wait forl lock + pm_pll_enable(&AVR32_PM, 1); + + // Wait for PLL1 locked. + pm_wait_for_pll1_locked(&AVR32_PM); + + pm_gc_setup(&AVR32_PM, AVR32_PM_GCLK_USBB, // gc. + 1, // osc_or_pll: use Osc (if 0) or PLL (if 1). + 1, // pll_osc: select Osc0/PLL0 or Osc1/PLL1. + 0, // diven. + 0); // div. + pm_gc_enable(&AVR32_PM, AVR32_PM_GCLK_USBB); +#endif +} diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/power_clocks_lib.c b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/power_clocks_lib.c new file mode 100644 index 000000000..f5fc1553d --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/power_clocks_lib.c @@ -0,0 +1,566 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file has been prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief High-level library abstracting features such as oscillators/pll/dfll + * configuration, clock configuration, System-sensible parameters + * configuration, buses clocks configuration, sleep mode, reset. + * + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + *****************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ +#include "power_clocks_lib.h" + + +//! Device-specific data +#if UC3L +static long int pcl_configure_clocks_uc3l(pcl_freq_param_t *param); // FORWARD declaration +#endif + +#if UC3C +static long int pcl_configure_clocks_uc3c(pcl_freq_param_t *param); // FORWARD declaration +#endif + +long int pcl_configure_clocks(pcl_freq_param_t *param) +{ +#ifndef AVR32_PM_VERSION_RESETVALUE + // Implementation for UC3A, UC3A3, UC3B parts. + return(pm_configure_clocks(param)); +#else + #ifdef AVR32_PM_410_H_INCLUDED + // Implementation for UC3C parts. + return(pcl_configure_clocks_uc3c(param)); + #else + // Implementation for UC3L parts. + return(pcl_configure_clocks_uc3l(param)); + #endif +#endif +} + + +//! Device-specific implementation +#if UC3L +// FORWARD declaration +static long int pcl_configure_synchronous_clocks( pm_clk_src_t main_clk_src, + unsigned long main_clock_freq_hz, + pcl_freq_param_t *param); + +long int pcl_configure_clocks_rcsys(pcl_freq_param_t *param) +{ + // Supported main clock sources: PCL_MC_RCSYS + + // Supported synchronous clocks frequencies if RCSYS is the main clock source: + // 115200Hz, 57600Hz, 28800Hz, 14400Hz, 7200Hz, 3600Hz, 1800Hz, 900Hz, 450Hz. + + // NOTE: by default, this implementation doesn't perform thorough checks on the + // input parameters. To enable the checks, define AVR32SFW_INPUT_CHECK. + +#ifdef AVR32SFW_INPUT_CHECK + // Verify that fCPU >= fPBx + if((param->cpu_f < param->pba_f) || (param->cpu_f < param->pbb_f)) + return(-1); +#endif + +#ifdef AVR32SFW_INPUT_CHECK + // Verify that the target frequencies are reachable. + if((param->cpu_f > SCIF_SLOWCLOCK_FREQ_HZ) || (param->pba_f > SCIF_SLOWCLOCK_FREQ_HZ) + || (param->pbb_f > SCIF_SLOWCLOCK_FREQ_HZ)) + return(-1); +#endif + + return(pcl_configure_synchronous_clocks(PM_CLK_SRC_SLOW, SCIF_SLOWCLOCK_FREQ_HZ, param)); +} + + +long int pcl_configure_clocks_rc120m(pcl_freq_param_t *param) +{ + // Supported main clock sources: PCL_MC_RC120M + + // Supported synchronous clocks frequencies if RC120M is the main clock source: + // 30MHz, 15MHz, 7.5MHz, 3.75MHz, 1.875MHz, 937.5kHz, 468.75kHz. + + // NOTE: by default, this implementation doesn't perform thorough checks on the + // input parameters. To enable the checks, define AVR32SFW_INPUT_CHECK. + +#ifdef AVR32SFW_INPUT_CHECK + // Verify that fCPU >= fPBx + if((param->cpu_f < param->pba_f) || (param->cpu_f < param->pbb_f)) + return(-1); +#endif + +#ifdef AVR32SFW_INPUT_CHECK + // Verify that the target frequencies are reachable. + if((param->cpu_f > SCIF_RC120M_FREQ_HZ) || (param->pba_f > SCIF_RC120M_FREQ_HZ) + || (param->pbb_f > SCIF_RC120M_FREQ_HZ)) + return(-1); +#endif + + // Start the 120MHz internal RCosc (RC120M) clock + scif_start_rc120M(); + + return(pcl_configure_synchronous_clocks(PM_CLK_SRC_RC120M, SCIF_RC120M_FREQ_HZ, param)); +} + + +long int pcl_configure_clocks_osc0(pcl_freq_param_t *param) +{ + // Supported main clock sources: PCL_MC_OSC0 + + // Supported synchronous clocks frequencies if OSC0 is the main clock source: + // (these obviously depend on the OSC0 frequency; we'll take 16MHz as an example) + // 16MHz, 8MHz, 4MHz, 2MHz, 1MHz, 500kHz, 250kHz, 125kHz, 62.5kHz. + + // NOTE: by default, this implementation doesn't perform thorough checks on the + // input parameters. To enable the checks, define AVR32SFW_INPUT_CHECK. + + unsigned long main_clock_freq; + + +#ifdef AVR32SFW_INPUT_CHECK + // Verify that fCPU >= fPBx + if((param->cpu_f < param->pba_f) || (param->cpu_f < param->pbb_f)) + return(-1); +#endif + + main_clock_freq = param->osc0_f; +#ifdef AVR32SFW_INPUT_CHECK + // Verify that the target frequencies are reachable. + if((param->cpu_f > main_clock_freq) || (param->pba_f > main_clock_freq) + || (param->pbb_f > main_clock_freq)) + return(-1); +#endif + // Configure OSC0 in crystal mode, external crystal with a fcrystal Hz frequency. + scif_configure_osc_crystalmode(SCIF_OSC0, main_clock_freq); + // Enable the OSC0 + scif_enable_osc(SCIF_OSC0, param->osc0_startup, true); + + return(pcl_configure_synchronous_clocks(PM_CLK_SRC_OSC0, main_clock_freq, param)); +} + + +long int pcl_configure_clocks_dfll0(pcl_freq_param_t *param) +{ + // Supported main clock sources: PCL_MC_DFLL + + // Supported synchronous clocks frequencies if DFLL is the main clock source: + // (these obviously depend on the DFLL target frequency; we'll take 100MHz as an example) + // 50MHz, 25MHz, 12.5MHz, 6.25MHz, 3.125MHz, 1562.5kHz, 781.25kHz, 390.625kHz. + + // NOTE: by default, this implementation doesn't perform thorough checks on the + // input parameters. To enable the checks, define AVR32SFW_INPUT_CHECK. + + unsigned long main_clock_freq; + scif_gclk_opt_t *pgc_dfllif_ref_opt; + + +#ifdef AVR32SFW_INPUT_CHECK + // Verify that fCPU >= fPBx + if((param->cpu_f < param->pba_f) || (param->cpu_f < param->pbb_f)) + return(-1); +#endif + + main_clock_freq = param->dfll_f; +#ifdef AVR32SFW_INPUT_CHECK + // Verify that the target DFLL output frequency is in the correct range. + if((main_clock_freq > SCIF_DFLL_MAXFREQ_HZ) || (main_clock_freq < SCIF_DFLL_MINFREQ_HZ)) + return(-1); + // Verify that the target frequencies are reachable. + if((param->cpu_f > main_clock_freq) || (param->pba_f > main_clock_freq) + || (param->pbb_f > main_clock_freq)) + return(-1); +#endif + pgc_dfllif_ref_opt = (scif_gclk_opt_t *)param->pextra_params; + // Implementation note: this implementation configures the DFLL in closed-loop + // mode (because it gives the best accuracy) which enables the generic clock CLK_DFLLIF_REF + // as a reference (RCSYS being used as the generic clock source, undivided). + scif_dfll0_closedloop_configure_and_start(pgc_dfllif_ref_opt, main_clock_freq, TRUE); + + return(pcl_configure_synchronous_clocks(PM_CLK_SRC_DFLL0, main_clock_freq, param)); +} + + +static long int pcl_configure_clocks_uc3l(pcl_freq_param_t *param) +{ + // Supported main clock sources: PCL_MC_RCSYS, PCL_MC_OSC0, PCL_MC_DFLL0, PCL_MC_RC120M + + // Supported synchronous clocks frequencies if RCSYS is the main clock source: + // 115200Hz, 57600Hz, 28800Hz, 14400Hz, 7200Hz, 3600Hz, 1800Hz, 900Hz, 450Hz. + + // Supported synchronous clocks frequencies if RC120M is the main clock source: + // 30MHz, 15MHz, 7.5MHz, 3.75MHz, 1.875MHz, 937.5kHz, 468.75kHz. + + // Supported synchronous clocks frequencies if OSC0 is the main clock source: + // (these obviously depend on the OSC0 frequency; we'll take 16MHz as an example) + // 16MHz, 8MHz, 4MHz, 2MHz, 1MHz, 500kHz, 250kHz, 125kHz, 62.5kHz. + + // Supported synchronous clocks frequencies if DFLL is the main clock source: + // (these obviously depend on the DFLL target frequency; we'll take 100MHz as an example) + // 50MHz, 25MHz, 12.5MHz, 6.25MHz, 3.125MHz, 1562.5kHz, 781.25kHz, 390.625kHz. + + // NOTE: by default, this implementation doesn't perform thorough checks on the + // input parameters. To enable the checks, define AVR32SFW_INPUT_CHECK. + + +#ifdef AVR32SFW_INPUT_CHECK + // Verify that fCPU >= fPBx + if((param->cpu_f < param->pba_f) || (param->cpu_f < param->pbb_f)) + return(-1); +#endif + + if(PCL_MC_RCSYS == param->main_clk_src) + { + return(pcl_configure_clocks_rcsys(param)); + } + else if(PCL_MC_RC120M == param->main_clk_src) + { + return(pcl_configure_clocks_rc120m(param)); + } + else if(PCL_MC_OSC0 == param->main_clk_src) + { + return(pcl_configure_clocks_osc0(param)); + } + else // PCL_MC_DFLL0 == param->main_clk_src + { + return(pcl_configure_clocks_dfll0(param)); + } +} + +static long int pcl_configure_synchronous_clocks(pm_clk_src_t main_clk_src, unsigned long main_clock_freq_hz, pcl_freq_param_t *param) +{ + //# + //# Set the Synchronous clock division ratio for each clock domain + //# + pm_set_all_cksel(main_clock_freq_hz, param->cpu_f, param->pba_f, param->pbb_f); + + //# + //# Set the Flash wait state and the speed read mode (depending on the target CPU frequency). + //# +#if UC3L + flashcdw_set_flash_waitstate_and_readmode(param->cpu_f); +#elif UC3C + flashc_set_flash_waitstate_and_readmode(param->cpu_f); +#endif + + + //# + //# Switch the main clock source to the selected clock. + //# + pm_set_mclk_source(main_clk_src); + + return PASS; +} + +#endif // UC3L device-specific implementation + +//! UC3C Device-specific implementation +#if UC3C +static long int pcl_configure_clocks_uc3c(pcl_freq_param_t *param) +{ + #define PM_MAX_MUL ((1 << AVR32_SCIF_PLLMUL_SIZE) - 1) + #define AVR32_PM_PBA_MAX_FREQ 66000000 + #define AVR32_PM_PLL_VCO_RANGE0_MAX_FREQ 240000000 + #define AVR32_PM_PLL_VCO_RANGE0_MIN_FREQ 160000000 + + // Implementation for UC3C parts. + // Supported frequencies: + // Fosc0 mul div PLL div2_en cpu_f pba_f Comment + // 12 15 1 192 1 12 12 + // 12 9 3 40 1 20 20 PLL out of spec + // 12 15 1 192 1 24 12 + // 12 9 1 120 1 30 15 + // 12 9 3 40 0 40 20 PLL out of spec + // 12 15 1 192 1 48 12 + // 12 15 1 192 1 48 24 + // 12 8 1 108 1 54 27 + // 12 9 1 120 1 60 15 + // 12 9 1 120 1 60 30 + // 12 10 1 132 1 66 16.5 + // + unsigned long in_cpu_f = param->cpu_f; + unsigned long in_osc0_f = param->osc0_f; + unsigned long mul, div, div2_en = 0, div2_cpu = 0, div2_pba = 0; + unsigned long pll_freq, rest; + Bool b_div2_pba, b_div2_cpu; + + // Configure OSC0 in crystal mode, external crystal with a FOSC0 Hz frequency. + scif_configure_osc_crystalmode(SCIF_OSC0, in_osc0_f); + // Enable the OSC0 + scif_enable_osc(SCIF_OSC0, param->osc0_startup, true); + // Set the main clock source as being OSC0. + pm_set_mclk_source(PM_CLK_SRC_OSC0); + + // Start with CPU freq config + if (in_cpu_f == in_osc0_f) + { + param->cpu_f = in_osc0_f; + param->pba_f = in_osc0_f; + return PASS; + } + else if (in_cpu_f < in_osc0_f) + { + // TBD + } + + rest = in_cpu_f % in_osc0_f; + + for (div = 1; div < 32; div++) + { + if ((div * rest) % in_osc0_f == 0) + break; + } + if (div == 32) + return FAIL; + + mul = (in_cpu_f * div) / in_osc0_f; + + if (mul > PM_MAX_MUL) + return FAIL; + + // export 2power from PLL div to div2_cpu + while (!(div % 2)) + { + div /= 2; + div2_cpu++; + } + + // Here we know the mul and div parameter of the PLL config. + // . Check out if the PLL has a valid in_cpu_f. + // . Try to have for the PLL frequency (VCO output) the highest possible value + // to reduce jitter. + while (in_osc0_f * 2 * mul / div < AVR32_PM_PLL_VCO_RANGE0_MAX_FREQ) + { + if (2 * mul > PM_MAX_MUL) + break; + mul *= 2; + div2_cpu++; + } + + if (div2_cpu != 0) + { + div2_cpu--; + div2_en = 1; + } + + pll_freq = in_osc0_f * mul / (div * (1 << div2_en)); + + // Update real CPU Frequency + param->cpu_f = pll_freq / (1 << div2_cpu); + mul--; + + scif_pll_opt_t opt; + + opt.osc = SCIF_OSC0, // Sel Osc0 or Osc1 + opt.lockcount = 16, // lockcount in main clock for the PLL wait lock + opt.div = div, // DIV=1 in the formula + opt.mul = mul, // MUL=7 in the formula + opt.pll_div2 = div2_en, // pll_div2 Divide the PLL output frequency by 2 (this settings does not change the FVCO value) + opt.pll_wbwdisable = 0, //pll_wbwdisable 1 Disable the Wide-Bandith Mode (Wide-Bandwith mode allow a faster startup time and out-of-lock time). 0 to enable the Wide-Bandith Mode. + opt.pll_freq = (pll_freq < AVR32_PM_PLL_VCO_RANGE0_MIN_FREQ) ? 1 : 0, // Set to 1 for VCO frequency range 80-180MHz, set to 0 for VCO frequency range 160-240Mhz. + + + scif_pll_setup(SCIF_PLL0, opt); // lockcount in main clock for the PLL wait lock + + /* Enable PLL0 */ + scif_pll_enable(SCIF_PLL0); + + /* Wait for PLL0 locked */ + scif_wait_for_pll_locked(SCIF_PLL0) ; + + rest = pll_freq; + while (rest > AVR32_PM_PBA_MAX_FREQ || + rest != param->pba_f) + { + div2_pba++; + rest = pll_freq / (1 << div2_pba); + if (rest < param->pba_f) + break; + } + + // Update real PBA Frequency + param->pba_f = pll_freq / (1 << div2_pba); + + + if (div2_cpu) + { + b_div2_cpu = TRUE; + div2_cpu--; + } + else + b_div2_cpu = FALSE; + + if (div2_pba) + { + b_div2_pba = TRUE; + div2_pba--; + } + else + b_div2_pba = FALSE; + + if (b_div2_cpu == TRUE ) + { + pm_set_clk_domain_div(PM_CLK_DOMAIN_0, (pm_divratio_t) div2_cpu); // CPU + pm_set_clk_domain_div(PM_CLK_DOMAIN_1, (pm_divratio_t) div2_cpu); // HSB + pm_set_clk_domain_div(PM_CLK_DOMAIN_3, (pm_divratio_t) div2_cpu); // PBB + } + if (b_div2_pba == TRUE ) + { + pm_set_clk_domain_div(PM_CLK_DOMAIN_2, (pm_divratio_t) div2_pba); // PBA + pm_set_clk_domain_div(PM_CLK_DOMAIN_4, (pm_divratio_t) div2_pba); // PBC + } + + // Set Flashc Wait State + flashc_set_flash_waitstate_and_readmode(param->cpu_f); + + // Set the main clock source as being PLL0. + pm_set_mclk_source(PM_CLK_SRC_PLL0); + + return PASS; +} +#endif // UC3C device-specific implementation + +long int pcl_switch_to_osc(pcl_osc_t osc, unsigned int fcrystal, unsigned int startup) +{ +#ifndef AVR32_PM_VERSION_RESETVALUE +// Implementation for UC3A, UC3A3, UC3B parts. + if(PCL_OSC0 == osc) + { + // Configure OSC0 in crystal mode, external crystal with a FOSC0 Hz frequency, + // enable the OSC0, set the main clock source as being OSC0. + pm_switch_to_osc0(&AVR32_PM, fcrystal, startup); + } + else + { + return PCL_NOT_SUPPORTED; + } +#else +// Implementation for UC3C, UC3L parts. + #if AVR32_PM_VERSION_RESETVALUE < 0x400 + return PCL_NOT_SUPPORTED; + #else + if(PCL_OSC0 == osc) + { + // Configure OSC0 in crystal mode, external crystal with a fcrystal Hz frequency. + scif_configure_osc_crystalmode(SCIF_OSC0, fcrystal); + // Enable the OSC0 + scif_enable_osc(SCIF_OSC0, startup, true); + // Set the Flash wait state and the speed read mode (depending on the target CPU frequency). +#if UC3L + flashcdw_set_flash_waitstate_and_readmode(fcrystal); +#elif UC3C + flashc_set_flash_waitstate_and_readmode(fcrystal); +#endif + // Set the main clock source as being OSC0. + pm_set_mclk_source(PM_CLK_SRC_OSC0); + } + else + { + return PCL_NOT_SUPPORTED; + } + #endif +#endif + return PASS; +} + +long int pcl_configure_usb_clock(void) +{ +#ifndef AVR32_PM_VERSION_RESETVALUE +// Implementation for UC3A, UC3A3, UC3B parts. + pm_configure_usb_clock(); + return PASS; +#else + #ifdef AVR32_PM_410_H_INCLUDED + const scif_pll_opt_t opt = { + .osc = SCIF_OSC0, // Sel Osc0 or Osc1 + .lockcount = 16, // lockcount in main clock for the PLL wait lock + .div = 1, // DIV=1 in the formula + .mul = 5, // MUL=7 in the formula + .pll_div2 = 1, // pll_div2 Divide the PLL output frequency by 2 (this settings does not change the FVCO value) + .pll_wbwdisable = 0, //pll_wbwdisable 1 Disable the Wide-Bandith Mode (Wide-Bandwith mode allow a faster startup time and out-of-lock time). 0 to enable the Wide-Bandith Mode. + .pll_freq = 1, // Set to 1 for VCO frequency range 80-180MHz, set to 0 for VCO frequency range 160-240Mhz. + }; + + /* Setup PLL1 on Osc0, mul=7 ,no divisor, lockcount=16, ie. 16Mhzx6 = 96MHz output */ + scif_pll_setup(SCIF_PLL1, opt); // lockcount in main clock for the PLL wait lock + + /* Enable PLL1 */ + scif_pll_enable(SCIF_PLL1); + + /* Wait for PLL1 locked */ + scif_wait_for_pll_locked(SCIF_PLL1) ; + + // Implementation for UC3C parts. + // Setup the generic clock for USB + scif_gc_setup(AVR32_SCIF_GCLK_USB, + SCIF_GCCTRL_PLL1, + AVR32_SCIF_GC_NO_DIV_CLOCK, + 0); + // Now enable the generic clock + scif_gc_enable(AVR32_SCIF_GCLK_USB); + return PASS; + #else + return PCL_NOT_SUPPORTED; + #endif +#endif +} + + +#if UC3L +#else +void pcl_write_gplp(unsigned long gplp, unsigned long value) +{ +#ifndef AVR32_PM_VERSION_RESETVALUE +// Implementation for UC3A, UC3A3, UC3B parts. + pm_write_gplp(&AVR32_PM,gplp,value); +#else + scif_write_gplp(gplp,value); +#endif +} + +unsigned long pcl_read_gplp(unsigned long gplp) +{ +#ifndef AVR32_PM_VERSION_RESETVALUE +// Implementation for UC3A, UC3A3, UC3B parts. + return pm_read_gplp(&AVR32_PM,gplp); +#else + return scif_read_gplp(gplp); +#endif +} +#endif diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/power_clocks_lib.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/power_clocks_lib.h new file mode 100644 index 000000000..28c5888da --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/power_clocks_lib.h @@ -0,0 +1,379 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file has been prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief High-level library abstracting features such as oscillators/pll/dfll + * configuration, clock configuration, System-sensible parameters + * configuration, buses clocks configuration, sleep mode, reset. + * + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + *****************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _POWER_CLOCKS_LIB_H_ +#define _POWER_CLOCKS_LIB_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include "compiler.h" + +#ifndef AVR32_PM_VERSION_RESETVALUE +// Support for UC3A, UC3A3, UC3B parts. + #include "pm.h" +#else +//! Device-specific data +#if UC3L + #include "pm_uc3l.h" + #include "scif_uc3l.h" + #include "flashcdw.h" +#elif UC3C + #include "pm_uc3c.h" + #include "scif_uc3c.h" + #include "flashc.h" +#endif +#endif + +/*! \name Clocks Management + */ +//! @{ + +//! The different oscillators +typedef enum +{ + PCL_OSC0 = 0, + PCL_OSC1 = 1 +} pcl_osc_t; + +//! The different DFLLs +typedef enum +{ + PCL_DFLL0 = 0, + PCL_DFLL1 = 1 +} pcl_dfll_t; + +//! Possible Main Clock Sources +typedef enum +{ + PCL_MC_RCSYS, // Default main clock source, supported by all (aka Slow Clock) + PCL_MC_OSC0, // Supported by all + PCL_MC_OSC1, // Supported by UC3C only + PCL_MC_OSC0_PLL0, // Supported by UC3A, UC3B, UC3A3, UC3C (the main clock source is PLL0 with OSC0 as reference) + PCL_MC_OSC1_PLL0, // Supported by UC3A, UC3B, UC3A3, UC3C (the main clock source is PLL0 with OSC1 as reference) + PCL_MC_OSC0_PLL1, // Supported by UC3C (the main clock source is PLL1 with OSC0 as reference) + PCL_MC_OSC1_PLL1, // Supported by UC3C (the main clock source is PLL1 with OSC1 as reference) + PCL_MC_DFLL0, // Supported by UC3L + PCL_MC_DFLL1, // Not supported yet + PCL_MC_RC120M, // Supported by UC3L, UC3C + PCL_MC_RC8M, // Supported by UC3C + PCL_MC_CRIPOSC // Supported by UC3C +} pcl_mainclk_t; + +//! Input and output parameters to configure clocks with pcl_configure_clocks(). +// NOTE: regarding the frequency settings, always abide by the datasheet rules and min & max supported frequencies. +#ifndef AVR32_PM_VERSION_RESETVALUE +// Support for UC3A, UC3A3, UC3B parts. +#define pcl_freq_param_t pm_freq_param_t // See pm.h +#else +// Support for UC3C, UC3L parts. +typedef struct +{ + //! Main clock source selection (input argument). + pcl_mainclk_t main_clk_src; + + //! Target CPU frequency (input/output argument). + unsigned long cpu_f; + + //! Target PBA frequency (input/output argument). + unsigned long pba_f; + + //! Target PBB frequency (input/output argument). + unsigned long pbb_f; + + //! Target PBC frequency (input/output argument). + unsigned long pbc_f; + + //! Oscillator 0's external crystal(or external clock) frequency (board dependant) (input argument). + unsigned long osc0_f; + + //! Oscillator 0's external crystal(or external clock) startup time: AVR32_PM_OSCCTRL0_STARTUP_x_RCOSC (input argument). + unsigned long osc0_startup; + + //! DFLL target frequency (input/output argument) (NOTE: the bigger, the most stable the frequency) + unsigned long dfll_f; + + //! Other parameters that might be necessary depending on the device (implementation-dependent). + // For the UC3L DFLL setup, this parameter should be pointing to a structure of + // type (scif_gclk_opt_t *). + void *pextra_params; +} pcl_freq_param_t; +#endif + +//! Define "not supported" for the lib. +#define PCL_NOT_SUPPORTED (-10000) + +/*! \brief Automatically configure the CPU, PBA, PBB, and HSB clocks + * + * This function needs some parameters stored in a pcl_freq_param_t structure: + * - main_clk_src is the id of the main clock source to use, + * - cpu_f and pba_f and pbb_f are the wanted frequencies, + * - osc0_f is the oscillator 0's external crystal (or external clock) on-board frequency (e.g. FOSC0), + * - osc0_startup is the oscillator 0's external crystal (or external clock) startup time (e.g. OSC0_STARTUP). + * - dfll_f is the target DFLL frequency to set-up if main_clk_src is the dfll. + * + * The CPU, HSB and PBA frequencies programmed after configuration are stored back into cpu_f and pba_f. + * + * \note: since it is dynamically computing the appropriate field values of the + * configuration registers from the parameters structure, this function is not + * optimal in terms of code size. For a code size optimal solution, it is better + * to create a new function from pcl_configure_clocks() and modify it to use + * preprocessor computation from pre-defined target frequencies. + * + * \param param pointer on the configuration structure. + * + * \retval 0 Success. + * \retval <0 The configuration cannot be performed. + */ +extern long int pcl_configure_clocks(pcl_freq_param_t *param); + +/*! \brief Automatically configure the CPU, PBA, PBB, and HSB clocks using the RCSYS osc as main source clock. + * + * This function needs some parameters stored in a pcl_freq_param_t structure: + * - cpu_f and pba_f and pbb_f are the wanted frequencies + * + * Supported main clock sources: PCL_MC_RCSYS + * + * Supported synchronous clocks frequencies: + * 115200Hz, 57600Hz, 28800Hz, 14400Hz, 7200Hz, 3600Hz, 1800Hz, 900Hz, 450Hz. + * + * \note: by default, this implementation doesn't perform thorough checks on the + * input parameters. To enable the checks, define AVR32SFW_INPUT_CHECK. + * + * \note: since it is dynamically computing the appropriate field values of the + * configuration registers from the parameters structure, this function is not + * optimal in terms of code size. For a code size optimal solution, it is better + * to create a new function from pcl_configure_clocks_rcsys() and modify it to use + * preprocessor computation from pre-defined target frequencies. + * + * \param param pointer on the configuration structure. + * + * \retval 0 Success. + * \retval <0 The configuration cannot be performed. + */ +extern long int pcl_configure_clocks_rcsys(pcl_freq_param_t *param); + +/*! \brief Automatically configure the CPU, PBA, PBB, and HSB clocks using the RC120M osc as main source clock. + * + * This function needs some parameters stored in a pcl_freq_param_t structure: + * - cpu_f and pba_f and pbb_f are the wanted frequencies + * + * Supported main clock sources: PCL_MC_RC120M + * + * Supported synchronous clocks frequencies: + * 30MHz, 15MHz, 7.5MHz, 3.75MHz, 1.875MHz, 937.5kHz, 468.75kHz. + * + * \note: by default, this implementation doesn't perform thorough checks on the + * input parameters. To enable the checks, define AVR32SFW_INPUT_CHECK. + * + * \note: since it is dynamically computing the appropriate field values of the + * configuration registers from the parameters structure, this function is not + * optimal in terms of code size. For a code size optimal solution, it is better + * to create a new function from pcl_configure_clocks_rc120m() and modify it to + * use preprocessor computation from pre-defined target frequencies. + * + * \param param pointer on the configuration structure. + * + * \retval 0 Success. + * \retval <0 The configuration cannot be performed. + */ +extern long int pcl_configure_clocks_rc120m(pcl_freq_param_t *param); + +/*! \brief Automatically configure the CPU, PBA, PBB, and HSB clocks using the OSC0 osc as main source clock + * + * This function needs some parameters stored in a pcl_freq_param_t structure: + * - cpu_f and pba_f and pbb_f are the wanted frequencies, + * - osc0_f is the oscillator 0's external crystal (or external clock) on-board frequency (e.g. FOSC0), + * - osc0_startup is the oscillator 0's external crystal (or external clock) startup time (e.g. OSC0_STARTUP). + * + * Supported main clock sources: PCL_MC_OSC0 + * + * Supported synchronous clocks frequencies: + * (these obviously depend on the OSC0 frequency; we'll take 16MHz as an example) + * 16MHz, 8MHz, 4MHz, 2MHz, 1MHz, 500kHz, 250kHz, 125kHz, 62.5kHz. + * + * \note: by default, this implementation doesn't perform thorough checks on the + * input parameters. To enable the checks, define AVR32SFW_INPUT_CHECK. + * + * \note: since it is dynamically computing the appropriate field values of the + * configuration registers from the parameters structure, this function is not + * optimal in terms of code size. For a code size optimal solution, it is better + * to create a new function from pcl_configure_clocks_osc0() and modify it to use + * preprocessor computation from pre-defined target frequencies. + * + * \param param pointer on the configuration structure. + * + * \retval 0 Success. + * \retval <0 The configuration cannot be performed. + */ +extern long int pcl_configure_clocks_osc0(pcl_freq_param_t *param); + +/*! \brief Automatically configure the CPU, PBA, PBB, and HSB clocks using the DFLL0 as main source clock + * + * This function needs some parameters stored in a pcl_freq_param_t structure: + * - cpu_f and pba_f and pbb_f are the wanted frequencies, + * - dfll_f is the target DFLL frequency to set-up + * + * \note: when the DFLL0 is to be used as main source clock for the synchronous clocks, + * the target frequency of the DFLL should be chosen to be as high as possible + * within the specification range (for stability reasons); the target cpu and pbx + * frequencies will then be reached by appropriate division ratio. + * + * Supported main clock sources: PCL_MC_DFLL0 + * + * Supported synchronous clocks frequencies: + * (these obviously depend on the DFLL target frequency; we'll take 100MHz as an example) + * 50MHz, 25MHz, 12.5MHz, 6.25MHz, 3.125MHz, 1562.5kHz, 781.25kHz, 390.625kHz. + * + * \note: by default, this implementation doesn't perform thorough checks on the + * input parameters. To enable the checks, define AVR32SFW_INPUT_CHECK. + * + * \note: since it is dynamically computing the appropriate field values of the + * configuration registers from the parameters structure, this function is not + * optimal in terms of code size. For a code size optimal solution, it is better + * to create a new function from pcl_configure_clocks_dfll0() and modify it to + * use preprocessor computation from pre-defined target frequencies. + * + * \param param pointer on the configuration structure. + * + * \retval 0 Success. + * \retval <0 The configuration cannot be performed. + */ +extern long int pcl_configure_clocks_dfll0(pcl_freq_param_t *param); + +/*! \brief Switch the main clock source to Osc0 configured in crystal mode + * + * \param osc The oscillator to enable and switch to. + * \param fcrystal Oscillator external crystal frequency (Hz) + * \param startup Oscillator startup time. + * + * \return Status. + * \retval 0 Success. + * \retval <0 An error occured. + */ +extern long int pcl_switch_to_osc(pcl_osc_t osc, unsigned int fcrystal, unsigned int startup); + +/*! \brief Enable the clock of a module. + * + * \param module The module to clock (use one of the defines in the part-specific + * header file under "toolchain folder"/avr32/inc(lude)/avr32/; depending on the + * clock domain, look for the sections "CPU clocks", "HSB clocks", "PBx clocks" + * or look in the module section). + * + * \return Status. + * \retval 0 Success. + * \retval <0 An error occured. + */ +#ifndef AVR32_PM_VERSION_RESETVALUE +// Implementation for UC3A, UC3A3, UC3B parts. +#define pcl_enable_module(module) pm_enable_module(&AVR32_PM, module) +#else +// Implementation for UC3C, UC3L parts. +#define pcl_enable_module(module) pm_enable_module(module) +#endif + +/*! \brief Disable the clock of a module. + * + * \param module The module to shut down (use one of the defines in the part-specific + * header file under "toolchain folder"/avr32/inc(lude)/avr32/; depending on the + * clock domain, look for the sections "CPU clocks", "HSB clocks", "PBx clocks" + * or look in the module section). + * + * \return Status. + * \retval 0 Success. + * \retval <0 An error occured. + */ +#ifndef AVR32_PM_VERSION_RESETVALUE +// Implementation for UC3A, UC3A3, UC3B parts. +#define pcl_disable_module(module) pm_disable_module(&AVR32_PM, module) +#else +// Implementation for UC3C, UC3L parts. +#define pcl_disable_module(module) pm_disable_module(module) +#endif + +/*! \brief Configure the USB Clock + * + * + * \return Status. + * \retval 0 Success. + * \retval <0 An error occured. + */ +extern long int pcl_configure_usb_clock(void); + +//! @} + +/*! \name Power Management + */ +//! @{ +/*! + * \brief Read the content of the GPLP registers + * \param gplp GPLP register index (0,1,... depending on the number of GPLP registers for a given part) + * + * \return The content of the chosen GPLP register. + */ +extern unsigned long pcl_read_gplp(unsigned long gplp); + + +/*! + * \brief Write into the GPLP registers + * \param gplp GPLP register index (0,1,... depending on the number of GPLP registers for a given part) + * \param value Value to write + */ +extern void pcl_write_gplp(unsigned long gplp, unsigned long value); + +//! @} + +#ifdef __cplusplus +} +#endif + +#endif // _POWER_CLOCKS_LIB_H_ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/RTC/rtc.c b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/RTC/rtc.c new file mode 100644 index 000000000..4cbae0f70 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/RTC/rtc.c @@ -0,0 +1,213 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief RTC driver for AVR32 UC3. + * + * AVR32 Real Time Counter driver module. + * + * - Compiler: GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with an RTC and a PM module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#include +#include "compiler.h" +#include "pm.h" +#include "rtc.h" + + +int rtc_is_busy(volatile avr32_rtc_t *rtc) +{ + return (rtc->ctrl & AVR32_RTC_CTRL_BUSY_MASK) != 0; +} + + +int rtc_init(volatile avr32_rtc_t *rtc, unsigned char osc_type, unsigned char psel) +{ + // If exit, it means that the configuration has not been set correctly + if (osc_type > (1 << AVR32_RTC_CTRL_CLK32_SIZE) - 1 || + psel > (1 << AVR32_RTC_CTRL_PSEL_SIZE) - 1) + return 0; + + // If we use the 32-kHz oscillator, we have to enable it first + if (osc_type == RTC_OSC_32KHZ) + { + // Select the 32-kHz oscillator crystal + pm_enable_osc32_crystal(&AVR32_PM); + // Enable the 32-kHz clock + pm_enable_clk32_no_wait(&AVR32_PM, AVR32_PM_OSCCTRL32_STARTUP_0_RCOSC); + } + + // Wait until the rtc CTRL register is up-to-date + while (rtc_is_busy(rtc)); + + // Set the new RTC configuration + rtc->ctrl = osc_type << AVR32_RTC_CTRL_CLK32_OFFSET | + psel << AVR32_RTC_CTRL_PSEL_OFFSET | + AVR32_RTC_CTRL_CLKEN_MASK; + + // Wait until write is done + while (rtc_is_busy(rtc)); + + // Set the counter value to 0 + rtc_set_value(rtc, 0x00000000); + // Set the top value to 0xFFFFFFFF + rtc_set_top_value(rtc, 0xFFFFFFFF); + + return 1; +} + + +void rtc_set_value(volatile avr32_rtc_t *rtc, unsigned long val) +{ + // Wait until we can write into the VAL register + while (rtc_is_busy(rtc)); + // Set the new val value + rtc->val = val; + // Wait until write is done + while (rtc_is_busy(rtc)); +} + + +unsigned long rtc_get_value(volatile avr32_rtc_t *rtc) +{ + return rtc->val; +} + + +void rtc_enable_wake_up(volatile avr32_rtc_t *rtc) +{ + // Wait until the rtc CTRL register is up-to-date + while (rtc_is_busy(rtc)); + // Enable the wake up of the RTC + rtc->ctrl |= AVR32_RTC_CTRL_WAKE_EN_MASK; + // Wait until write is done + while (rtc_is_busy(rtc)); +} + + +void rtc_disable_wake_up(volatile avr32_rtc_t *rtc) +{ + // Wait until the rtc CTRL register is up-to-date + while (rtc_is_busy(rtc)); + // Disable the wake up of the RTC + rtc->ctrl &= ~AVR32_RTC_CTRL_WAKE_EN_MASK; + // Wait until write is done + while (rtc_is_busy(rtc)); +} + + +void rtc_enable(volatile avr32_rtc_t *rtc) +{ + // Wait until the rtc CTRL register is up-to-date + while (rtc_is_busy(rtc)); + // Enable the RTC + rtc->ctrl |= AVR32_RTC_CTRL_EN_MASK; + // Wait until write is done + while (rtc_is_busy(rtc)); +} + + +void rtc_disable(volatile avr32_rtc_t *rtc) +{ + // Wait until the rtc CTRL register is up-to-date + while (rtc_is_busy(rtc)); + // Disable the RTC + rtc->ctrl &= ~AVR32_RTC_CTRL_EN_MASK; + // Wait until write is done + while (rtc_is_busy(rtc)); +} + + +void rtc_enable_interrupt(volatile avr32_rtc_t *rtc) +{ + rtc->ier = AVR32_RTC_IER_TOPI_MASK; +} + + +void rtc_disable_interrupt(volatile avr32_rtc_t *rtc) +{ + Bool global_interrupt_enabled = Is_global_interrupt_enabled(); + + if (global_interrupt_enabled) Disable_global_interrupt(); + rtc->idr = AVR32_RTC_IDR_TOPI_MASK; + rtc->imr; + if (global_interrupt_enabled) Enable_global_interrupt(); +} + + +void rtc_clear_interrupt(volatile avr32_rtc_t *rtc) +{ + Bool global_interrupt_enabled = Is_global_interrupt_enabled(); + + if (global_interrupt_enabled) Disable_global_interrupt(); + rtc->icr = AVR32_RTC_ICR_TOPI_MASK; + rtc->isr; + if (global_interrupt_enabled) Enable_global_interrupt(); +} + + +void rtc_set_top_value(volatile avr32_rtc_t *rtc, unsigned long top) +{ + // Wait until we can write into the VAL register + while (rtc_is_busy(rtc)); + // Set the new val value + rtc->top = top; + // Wait until write is done + while (rtc_is_busy(rtc)); +} + + +unsigned long rtc_get_top_value(volatile avr32_rtc_t *rtc) +{ + return rtc->top; +} + + +int rtc_interrupt_enabled(volatile avr32_rtc_t *rtc) +{ + return (rtc->imr & AVR32_RTC_IMR_TOPI_MASK) != 0; +} + + +int rtc_is_interrupt(volatile avr32_rtc_t *rtc) +{ + return (rtc->isr & AVR32_RTC_ISR_TOPI_MASK) != 0; +} diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/RTC/rtc.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/RTC/rtc.h new file mode 100644 index 000000000..5702c2959 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/RTC/rtc.h @@ -0,0 +1,191 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief RTC driver for AVR32 UC3. + * + * AVR32 Real Time Counter driver module. + * + * - Compiler: GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with an RTC and a PM module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _RTC_H_ +#define _RTC_H_ + +#include "compiler.h" +#include + + +/*! \name Oscillator Types + */ +//! @{ +#define RTC_OSC_32KHZ 1 +#define RTC_OSC_RC 0 +//! @} + +/*! \name Predefined PSEL Values + */ +//! @{ + +//! The PSEL value to set the RTC source clock (after the prescaler) to 1 Hz, +//! when using an external 32-kHz crystal. +#define RTC_PSEL_32KHZ_1HZ 14 + +//! The PSEL value to set the RTC source clock (after the prescaler) to 1.76 Hz, +//! when using the internal RC oscillator (~ 115 kHz). +#define RTC_PSEL_RC_1_76HZ 15 + +//! @} + + +/*! + * \brief This function will initialise the RTC module. + * If you use the 32 KHz oscillator, it will enable this module. + * This function also set the top value of the RTC to 0xFFFFFFFF + * and the value to 0. + * \param rtc Base address of the RTC (i.e. &AVR32_RTC). + * \param osc_type The oscillator you want to use. If you need a better + * accuracy, use the 32 KHz oscillator (i.e. RTC_OSC_32KHZ). + * \param psel The preselector value for the corresponding oscillator (4-bits). + * To obtain this value, you can use this formula: + * psel = log(Fosc/Frtc)/log(2)-1, where Fosc is the frequency of the + * oscillator you are using (32 KHz or 115 KHz) and Frtc the frequency + * desired. + * \return 1 if the initialisation succeds otherwize it will return 0. + */ +extern int rtc_init(volatile avr32_rtc_t *rtc, unsigned char osc_type, unsigned char psel); + +/*! + * \brief Enable the RTC. + * \param rtc Base address of the RTC (i.e. &AVR32_RTC). + */ +extern void rtc_enable(volatile avr32_rtc_t *rtc); + +/*! + * \brief Disable the RTC. + * \param rtc Base address of the RTC (i.e. &AVR32_RTC). + */ +extern void rtc_disable(volatile avr32_rtc_t *rtc); + +/*! + * \brief Enable the wake up feature of the RTC. + * \param rtc Base address of the RTC (i.e. &AVR32_RTC). + */ +extern void rtc_enable_wake_up(volatile avr32_rtc_t *rtc); + +/*! + * \brief Disable the wake up feature of the RTC. + * \param rtc Base address of the RTC (i.e. &AVR32_RTC). + */ +extern void rtc_disable_wake_up(volatile avr32_rtc_t *rtc); + +/*! + * \brief Enable the interrupt feature of the RTC. + * An interrupt is raised when the value of the RTC + * is equal to its top value. + * \param rtc Base address of the RTC (i.e. &AVR32_RTC). + */ +extern void rtc_enable_interrupt(volatile avr32_rtc_t *rtc); + +/*! + * \brief Disable the interrupt feature of the RTC. + * \param rtc Base address of the RTC (i.e. &AVR32_RTC). + */ +extern void rtc_disable_interrupt(volatile avr32_rtc_t *rtc); + +/*! + * \brief Clear the interrupt flag. + * Call this function once you handled the interrupt. + * \param rtc Base address of the RTC (i.e. &AVR32_RTC). + */ +extern void rtc_clear_interrupt(volatile avr32_rtc_t *rtc); + +/*! + * \brief Get the status of interrupts. + * \param rtc Base address of the RTC (i.e. &AVR32_RTC). + * \return 1 if the interrupts are enabled otherwize it returns 0. + */ +extern int rtc_interrupt_enabled(volatile avr32_rtc_t *rtc); + +/*! + * \brief Check if an interrupt is raised. + * \param rtc Base address of the RTC (i.e. &AVR32_RTC). + * \return 1 if an interrupt is currently raised otherwize it returns 0. + */ +extern int rtc_is_interrupt(volatile avr32_rtc_t *rtc); + +/*! + * \brief This function sets the RTC current top value. + * \param rtc Base address of the RTC (i.e. &AVR32_RTC). + * \param top The top value you want to store. + */ +extern void rtc_set_top_value(volatile avr32_rtc_t *rtc, unsigned long top); + +/*! + * \brief This function returns the RTC current top value. + * \param rtc Base address of the RTC (i.e. &AVR32_RTC). + * \return The RTC current top value. + */ +extern unsigned long rtc_get_top_value(volatile avr32_rtc_t *rtc); + +/*! + * \brief This function checks if the RTC is busy or not. + * \param rtc Base address of the RTC (i.e. &AVR32_RTC). + * \return 1 if the RTC is busy otherwize it will return 0. + */ +extern int rtc_is_busy(volatile avr32_rtc_t *rtc); + +/*! + * \brief This function sets the RTC current value. + * \param rtc Base address of the RTC (i.e. &AVR32_RTC). + * \param val The value you want to store. + */ +extern void rtc_set_value(volatile avr32_rtc_t *rtc, unsigned long val); + +/*! + * \brief This function returns the RTC current value. + * \param rtc Base address of the RTC (i.e. &AVR32_RTC). + * \return The RTC current value. + */ +extern unsigned long rtc_get_value(volatile avr32_rtc_t *rtc); + + +#endif // _RTC_H_ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/SPI/spi.c b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/SPI/spi.c new file mode 100644 index 000000000..d2b7ccd94 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/SPI/spi.c @@ -0,0 +1,443 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief SPI driver for AVR32 UC3. + * + * This file defines a useful set of functions for the SPI interface on AVR32 + * devices. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with an SPI module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#include "spi.h" + +#ifdef FREERTOS_USED + +#include "FreeRTOS.h" +#include "semphr.h" + +#endif + + +/*! \name SPI Writable Bit-Field Registers + */ +//! @{ + +typedef union +{ + unsigned long cr; + avr32_spi_cr_t CR; +} u_avr32_spi_cr_t; + +typedef union +{ + unsigned long mr; + avr32_spi_mr_t MR; +} u_avr32_spi_mr_t; + +typedef union +{ + unsigned long tdr; + avr32_spi_tdr_t TDR; +} u_avr32_spi_tdr_t; + +typedef union +{ + unsigned long ier; + avr32_spi_ier_t IER; +} u_avr32_spi_ier_t; + +typedef union +{ + unsigned long idr; + avr32_spi_idr_t IDR; +} u_avr32_spi_idr_t; + +typedef union +{ + unsigned long csr; + avr32_spi_csr0_t CSR; +} u_avr32_spi_csr_t; + +//! @} + + +#ifdef FREERTOS_USED + +//! The SPI mutex. +static xSemaphoreHandle xSPIMutex; + +#endif + + +/*! \brief Calculates the baudrate divider. + * + * \param options Pointer to a structure containing initialization options for + * an SPI channel. + * \param pba_hz SPI module input clock frequency (PBA clock, Hz). + * + * \return Divider or error code. + * \retval >=0 Success. + * \retval <0 Error. + */ +static int getBaudDiv(const spi_options_t *options, unsigned int pba_hz) +{ + int baudDiv = (pba_hz + options->baudrate / 2) / options->baudrate; + + if (baudDiv <= 0 || baudDiv > 255) { + return -1; + } + + return baudDiv; +} + + +void spi_reset(volatile avr32_spi_t *spi) +{ + spi->cr = AVR32_SPI_CR_SWRST_MASK; +} + + +spi_status_t spi_initSlave(volatile avr32_spi_t *spi, + unsigned char bits, + unsigned char spi_mode) +{ + if (spi_mode > 3 || + bits < 8 || bits > 16) { + return SPI_ERROR_ARGUMENT; + } + + // Reset. + spi->cr = AVR32_SPI_CR_SWRST_MASK; + + // Will use CSR0 offsets; these are the same for CSR0 to CSR3. + spi->csr0 = ((spi_mode >> 1) << AVR32_SPI_CSR0_CPOL_OFFSET) | + (((spi_mode & 0x1) ^ 0x1) << AVR32_SPI_CSR0_NCPHA_OFFSET) | + ((bits - 8) << AVR32_SPI_CSR0_BITS_OFFSET); + + return SPI_OK; +} + + +spi_status_t spi_initTest(volatile avr32_spi_t *spi) +{ + // Reset. + spi->cr = AVR32_SPI_CR_SWRST_MASK; + spi->mr |= AVR32_SPI_MR_MSTR_MASK | // Master Mode. + AVR32_SPI_MR_LLB_MASK; // Local Loopback. + + return SPI_OK; +} + + +spi_status_t spi_initMaster(volatile avr32_spi_t *spi, const spi_options_t *options) +{ + u_avr32_spi_mr_t u_avr32_spi_mr; + + if (options->modfdis > 1) { + return SPI_ERROR_ARGUMENT; + } + + // Reset. + spi->cr = AVR32_SPI_CR_SWRST_MASK; + + // Master Mode. + u_avr32_spi_mr.mr = spi->mr; + u_avr32_spi_mr.MR.mstr = 1; + u_avr32_spi_mr.MR.modfdis = options->modfdis; + u_avr32_spi_mr.MR.llb = 0; + u_avr32_spi_mr.MR.pcs = (1 << AVR32_SPI_MR_PCS_SIZE) - 1; + spi->mr = u_avr32_spi_mr.mr; + + return SPI_OK; +} + + +spi_status_t spi_selectionMode(volatile avr32_spi_t *spi, + unsigned char variable_ps, + unsigned char pcs_decode, + unsigned char delay) +{ + u_avr32_spi_mr_t u_avr32_spi_mr; + + if (variable_ps > 1 || + pcs_decode > 1) { + return SPI_ERROR_ARGUMENT; + } + + u_avr32_spi_mr.mr = spi->mr; + u_avr32_spi_mr.MR.ps = variable_ps; + u_avr32_spi_mr.MR.pcsdec = pcs_decode; + u_avr32_spi_mr.MR.dlybcs = delay; + spi->mr = u_avr32_spi_mr.mr; + + return SPI_OK; +} + + +spi_status_t spi_selectChip(volatile avr32_spi_t *spi, unsigned char chip) +{ +#ifdef FREERTOS_USED + while (pdFALSE == xSemaphoreTake(xSPIMutex, 20)); +#endif + + // Assert all lines; no peripheral is selected. + spi->mr |= AVR32_SPI_MR_PCS_MASK; + + if (spi->mr & AVR32_SPI_MR_PCSDEC_MASK) { + // The signal is decoded; allow up to 15 chips. + if (chip > 14) { + return SPI_ERROR_ARGUMENT; + } + + spi->mr &= ~AVR32_SPI_MR_PCS_MASK | (chip << AVR32_SPI_MR_PCS_OFFSET); + } else { + if (chip > 3) { + return SPI_ERROR_ARGUMENT; + } + + spi->mr &= ~(1 << (AVR32_SPI_MR_PCS_OFFSET + chip)); + } + + return SPI_OK; +} + + +spi_status_t spi_unselectChip(volatile avr32_spi_t *spi, unsigned char chip) +{ + unsigned int timeout = SPI_TIMEOUT; + + while (!(spi->sr & AVR32_SPI_SR_TXEMPTY_MASK)) { + if (!timeout--) { + return SPI_ERROR_TIMEOUT; + } + } + + // Assert all lines; no peripheral is selected. + spi->mr |= AVR32_SPI_MR_PCS_MASK; + + // Last transfer, so deassert the current NPCS if CSAAT is set. + spi->cr = AVR32_SPI_CR_LASTXFER_MASK; + +#ifdef FREERTOS_USED + xSemaphoreGive(xSPIMutex); +#endif + + return SPI_OK; +} + + +spi_status_t spi_setupChipReg(volatile avr32_spi_t *spi, + const spi_options_t *options, + unsigned int pba_hz) +{ + u_avr32_spi_csr_t u_avr32_spi_csr; + + if (options->spi_mode > 3 || + options->stay_act > 1 || + options->bits < 8 || options->bits > 16) { + return SPI_ERROR_ARGUMENT; + } + + int baudDiv = getBaudDiv(options, pba_hz); + + if (baudDiv < 0) { + return SPI_ERROR_ARGUMENT; + } + + // Will use CSR0 offsets; these are the same for CSR0 to CSR3. + u_avr32_spi_csr.csr = 0; + u_avr32_spi_csr.CSR.cpol = options->spi_mode >> 1; + u_avr32_spi_csr.CSR.ncpha = (options->spi_mode & 0x1) ^ 0x1; + u_avr32_spi_csr.CSR.csaat = options->stay_act; + u_avr32_spi_csr.CSR.bits = options->bits - 8; + u_avr32_spi_csr.CSR.scbr = baudDiv; + u_avr32_spi_csr.CSR.dlybs = options->spck_delay; + u_avr32_spi_csr.CSR.dlybct = options->trans_delay; + + switch(options->reg) { + case 0: + spi->csr0 = u_avr32_spi_csr.csr; + break; + case 1: + spi->csr1 = u_avr32_spi_csr.csr; + break; + case 2: + spi->csr2 = u_avr32_spi_csr.csr; + break; + case 3: + spi->csr3 = u_avr32_spi_csr.csr; + break; + default: + return SPI_ERROR_ARGUMENT; + } + +#ifdef FREERTOS_USED + if (!xSPIMutex) + { + // Create the SPI mutex. + vSemaphoreCreateBinary(xSPIMutex); + if (!xSPIMutex) + { + while(1); + } + } +#endif + + return SPI_OK; +} + + +void spi_enable(volatile avr32_spi_t *spi) +{ + spi->cr = AVR32_SPI_CR_SPIEN_MASK; +} + + +void spi_disable(volatile avr32_spi_t *spi) +{ + spi->cr = AVR32_SPI_CR_SPIDIS_MASK; +} + + +int spi_is_enabled(volatile avr32_spi_t *spi) +{ + return (spi->sr & AVR32_SPI_SR_SPIENS_MASK) != 0; +} + + +inline unsigned char spi_writeRegisterEmptyCheck(volatile avr32_spi_t *spi) +{ + return ((spi->sr & AVR32_SPI_SR_TDRE_MASK) != 0); +} + + +inline spi_status_t spi_write(volatile avr32_spi_t *spi, unsigned short data) +{ + unsigned int timeout = SPI_TIMEOUT; + + while (!(spi->sr & AVR32_SPI_SR_TDRE_MASK)) { + if (!timeout--) { + return SPI_ERROR_TIMEOUT; + } + } + + spi->tdr = data << AVR32_SPI_TDR_TD_OFFSET; + + return SPI_OK; +} + + +spi_status_t spi_variableSlaveWrite(volatile avr32_spi_t *spi, unsigned short data, + unsigned char pcs, unsigned char lastxfer) +{ + unsigned int timeout = SPI_TIMEOUT; + + if (pcs > 14 || lastxfer > 1) { + return SPI_ERROR_ARGUMENT; + } + + while (!(spi->sr & AVR32_SPI_SR_TDRE_MASK)) { + if (!timeout--) { + return SPI_ERROR_TIMEOUT; + } + } + + spi->tdr = (data << AVR32_SPI_TDR_TD_OFFSET) | + (pcs << AVR32_SPI_TDR_PCS_OFFSET) | + (lastxfer << AVR32_SPI_TDR_LASTXFER_OFFSET); + + return SPI_OK; +} + + +inline unsigned char spi_writeEndCheck(volatile avr32_spi_t *spi) +{ + return ((spi->sr & AVR32_SPI_SR_TXEMPTY_MASK) != 0); +} + + +unsigned char spi_readRegisterFullCheck(volatile avr32_spi_t *spi) +{ + return ((spi->sr & AVR32_SPI_SR_RDRF_MASK) != 0); +} + + +inline spi_status_t spi_read(volatile avr32_spi_t *spi, unsigned short *data) +{ + unsigned int timeout = SPI_TIMEOUT; + + while ((spi->sr & (AVR32_SPI_SR_RDRF_MASK | AVR32_SPI_SR_TXEMPTY_MASK)) != + (AVR32_SPI_SR_RDRF_MASK | AVR32_SPI_SR_TXEMPTY_MASK)) { + if (!timeout--) { + return SPI_ERROR_TIMEOUT; + } + } + + *data = spi->rdr >> AVR32_SPI_RDR_RD_OFFSET; + + return SPI_OK; +} + + +unsigned char spi_getStatus(volatile avr32_spi_t *spi) +{ + spi_status_t ret = SPI_OK; + unsigned long sr = spi->sr; + + if (sr & AVR32_SPI_SR_OVRES_MASK) { + ret = SPI_ERROR_OVERRUN; + } + + if (sr & AVR32_SPI_SR_MODF_MASK) { + ret += SPI_ERROR_MODE_FAULT; + } + + if (ret == (SPI_ERROR_OVERRUN + SPI_ERROR_MODE_FAULT)) { + return SPI_ERROR_OVERRUN_AND_MODE_FAULT; + } + else if (ret > 0) { + return ret; + } else { + return SPI_OK; + } +} diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/SPI/spi.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/SPI/spi.h new file mode 100644 index 000000000..6dcc92848 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/SPI/spi.h @@ -0,0 +1,342 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief SPI driver for AVR32 UC3. + * + * This file defines a useful set of functions for the SPI interface on AVR32 + * devices. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with an SPI module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _SPI_H_ +#define _SPI_H_ + +#include + + +//! Time-out value (number of attempts). +#define SPI_TIMEOUT 10000 + + +//! Status codes used by the SPI driver. +typedef enum +{ + SPI_ERROR = -1, + SPI_OK = 0, + SPI_ERROR_TIMEOUT = 1, + SPI_ERROR_ARGUMENT, + SPI_ERROR_OVERRUN, + SPI_ERROR_MODE_FAULT, + SPI_ERROR_OVERRUN_AND_MODE_FAULT +} spi_status_t; + +//! Option structure for SPI channels. +typedef struct +{ + //! The SPI channel to set up. + unsigned char reg; + + //! Preferred baudrate for the SPI. + unsigned int baudrate; + + //! Number of bits in each character (8 to 16). + unsigned char bits; + + //! Delay before first clock pulse after selecting slave (in PBA clock periods). + unsigned char spck_delay; + + //! Delay between each transfer/character (in PBA clock periods). + unsigned char trans_delay; + + //! Sets this chip to stay active after last transfer to it. + unsigned char stay_act; + + //! Which SPI mode to use when transmitting. + unsigned char spi_mode; + + //! Disables the mode fault detection. + //! With this bit cleared, the SPI master mode will disable itself if another + //! master tries to address it. + unsigned char modfdis; +} spi_options_t; + + +/*! \brief Resets the SPI controller. + * + * \param spi Base address of the SPI instance. + */ +extern void spi_reset(volatile avr32_spi_t *spi); + +/*! \brief Initializes the SPI in slave mode. + * + * \param spi Base address of the SPI instance. + * \param bits Number of bits in each transmitted character (8 to 16). + * \param spi_mode Clock polarity and phase. + * + * \return Status. + * \retval SPI_OK Success. + * \retval SPI_ERROR_ARGUMENT Invalid argument(s) passed. + */ +extern spi_status_t spi_initSlave(volatile avr32_spi_t *spi, + unsigned char bits, + unsigned char spi_mode); + +/*! \brief Sets up the SPI in a test mode where the transmitter is connected to + * the receiver (local loopback). + * + * \param spi Base address of the SPI instance. + * + * \return Status. + * \retval SPI_OK Success. + */ +extern spi_status_t spi_initTest(volatile avr32_spi_t *spi); + +/*! \brief Initializes the SPI in master mode. + * + * \param spi Base address of the SPI instance. + * \param options Pointer to a structure containing initialization options. + * + * \return Status. + * \retval SPI_OK Success. + * \retval SPI_ERROR_ARGUMENT Invalid argument(s) passed. + */ +extern spi_status_t spi_initMaster(volatile avr32_spi_t *spi, const spi_options_t *options); + +/*! \brief Sets up how and when the slave chips are selected (master mode only). + * + * \param spi Base address of the SPI instance. + * \param variable_ps Target slave is selected in transfer register for every + * character to transmit. + * \param pcs_decode The four chip select lines are decoded externally. Values + * 0 to 14 can be given to \ref spi_selectChip. + * \param delay Delay in PBA periods between chip selects. + * + * \return Status. + * \retval SPI_OK Success. + * \retval SPI_ERROR_ARGUMENT Invalid argument(s) passed. + */ +extern spi_status_t spi_selectionMode(volatile avr32_spi_t *spi, + unsigned char variable_ps, + unsigned char pcs_decode, + unsigned char delay); + +/*! \brief Selects slave chip. + * + * \param spi Base address of the SPI instance. + * \param chip Slave chip number (normal: 0 to 3, extarnally decoded signal: 0 + * to 14). + * + * \return Status. + * \retval SPI_OK Success. + * \retval SPI_ERROR_ARGUMENT Invalid argument(s) passed. + */ +extern spi_status_t spi_selectChip(volatile avr32_spi_t *spi, unsigned char chip); + +/*! \brief Unselects slave chip. + * + * \param spi Base address of the SPI instance. + * \param chip Slave chip number (normal: 0 to 3, extarnally decoded signal: 0 + * to 14). + * + * \return Status. + * \retval SPI_OK Success. + * \retval SPI_ERROR_TIMEOUT Time-out. + * + * \note Will block program execution until time-out occurs if last transmission + * is not complete. Invoke \ref spi_writeEndCheck beforehand if needed. + */ +extern spi_status_t spi_unselectChip(volatile avr32_spi_t *spi, unsigned char chip); + +/*! \brief Sets options for a specific slave chip. + * + * The baudrate field has to be written before transfer in master mode. Four + * similar registers exist, one for each slave. When using encoded slave + * addressing, reg=0 sets options for slaves 0 to 3, reg=1 for slaves 4 to 7 and + * so on. + * + * \param spi Base address of the SPI instance. + * \param options Pointer to a structure containing initialization options for + * an SPI channel. + * \param pba_hz SPI module input clock frequency (PBA clock, Hz). + * + * \return Status. + * \retval SPI_OK Success. + * \retval SPI_ERROR_ARGUMENT Invalid argument(s) passed. + */ +extern spi_status_t spi_setupChipReg(volatile avr32_spi_t *spi, + const spi_options_t *options, + unsigned int pba_hz); + +/*! \brief Enables the SPI. + * + * \param spi Base address of the SPI instance. + */ +extern void spi_enable(volatile avr32_spi_t *spi); + +/*! \brief Disables the SPI. + * + * Ensures that nothing is transferred while setting up buffers. + * + * \param spi Base address of the SPI instance. + * + * \warning This may cause data loss if used on a slave SPI. + */ +extern void spi_disable(volatile avr32_spi_t *spi); + +/*! \brief Tests if the SPI is enabled. + * + * \param spi Base address of the SPI instance. + * + * \return \c 1 if the SPI is enabled, otherwise \c 0. + */ +extern int spi_is_enabled(volatile avr32_spi_t *spi); + +/*! \brief Checks if there is no data in the transmit register. + * + * \param spi Base address of the SPI instance. + * + * \return Status. + * \retval 1 No data in TDR. + * \retval 0 Some data in TDR. + */ +extern unsigned char spi_writeRegisterEmptyCheck(volatile avr32_spi_t *spi); + +/*! \brief Writes one data word in master fixed peripheral select mode or in + * slave mode. + * + * \param spi Base address of the SPI instance. + * \param data The data word to write. + * + * \return Status. + * \retval SPI_OK Success. + * \retval SPI_ERROR_TIMEOUT Time-out. + * + * \note Will block program execution until time-out occurs if transmitter is + * busy and transmit buffer is full. Invoke + * \ref spi_writeRegisterEmptyCheck beforehand if needed. + * + * \note Once the data has been written to the transmit buffer, the end of + * transmission is not waited for. Invoke \ref spi_writeEndCheck if + * needed. + */ +extern spi_status_t spi_write(volatile avr32_spi_t *spi, unsigned short data); + +/*! \brief Selects a slave in master variable peripheral select mode and writes + * one data word to it. + * + * \param spi Base address of the SPI instance. + * \param data The data word to write. + * \param pcs Slave selector (bit 0 -> nCS line 0, bit 1 -> nCS line 1, + * etc.). + * \param lastxfer Boolean indicating whether this is the last data word + * transfer. + * + * \return Status. + * \retval SPI_OK Success. + * \retval SPI_ERROR_TIMEOUT Time-out. + * \retval SPI_ERROR_ARGUMENT Invalid argument(s) passed. + * + * \note Will block program execution until time-out occurs if transmitter is + * busy and transmit buffer is full. Invoke + * \ref spi_writeRegisterEmptyCheck beforehand if needed. + * + * \note Once the data has been written to the transmit buffer, the end of + * transmission is not waited for. Invoke \ref spi_writeEndCheck if + * needed. + */ +extern spi_status_t spi_variableSlaveWrite(volatile avr32_spi_t *spi, + unsigned short data, + unsigned char pcs, + unsigned char lastxfer); + +/*! \brief Checks if all transmissions are complete. + * + * \param spi Base address of the SPI instance. + * + * \return Status. + * \retval 1 All transmissions complete. + * \retval 0 Transmissions not complete. + */ +extern unsigned char spi_writeEndCheck(volatile avr32_spi_t *spi); + +/*! \brief Checks if there is data in the receive register. + * + * \param spi Base address of the SPI instance. + * + * \return Status. + * \retval 1 Some data in RDR. + * \retval 0 No data in RDR. + */ +extern unsigned char spi_readRegisterFullCheck(volatile avr32_spi_t *spi); + +/*! \brief Reads one data word in master mode or in slave mode. + * + * \param spi Base address of the SPI instance. + * \param data Pointer to the location where to store the received data word. + * + * \return Status. + * \retval SPI_OK Success. + * \retval SPI_ERROR_TIMEOUT Time-out. + * + * \note Will block program execution until time-out occurs if no data is + * received or last transmission is not complete. Invoke + * \ref spi_writeEndCheck or \ref spi_readRegisterFullCheck beforehand if + * needed. + */ +extern spi_status_t spi_read(volatile avr32_spi_t *spi, unsigned short *data); + +/*! \brief Gets status information from the SPI. + * + * \param spi Base address of the SPI instance. + * + * \return Status. + * \retval SPI_OK Success. + * \retval SPI_ERROR_OVERRUN Overrun error. + * \retval SPI_ERROR_MODE_FAULT Mode fault (SPI addressed as slave + * while in master mode). + * \retval SPI_ERROR_OVERRUN_AND_MODE_FAULT Overrun error and mode fault. + */ +extern unsigned char spi_getStatus(volatile avr32_spi_t *spi); + + +#endif // _SPI_H_ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/TC/tc.c b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/TC/tc.c new file mode 100644 index 000000000..225642ede --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/TC/tc.c @@ -0,0 +1,314 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief TC driver for AVR32 UC3. + * + * AVR32 Timer/Counter driver module. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with a TC module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#include +#include "compiler.h" +#include "tc.h" + + +int tc_get_interrupt_settings(volatile avr32_tc_t *tc, unsigned int channel) +{ + // Check for valid input. + if (channel >= TC_NUMBER_OF_CHANNELS) + return TC_INVALID_ARGUMENT; + + return tc->channel[channel].imr; +} + + +int tc_configure_interrupts(volatile avr32_tc_t *tc, unsigned int channel, const tc_interrupt_t *bitfield) +{ + Bool global_interrupt_enabled = Is_global_interrupt_enabled(); + + // Check for valid input. + if (channel >= TC_NUMBER_OF_CHANNELS) + return TC_INVALID_ARGUMENT; + + // Enable the appropriate interrupts. + tc->channel[channel].ier = bitfield->etrgs << AVR32_TC_ETRGS_OFFSET | + bitfield->ldrbs << AVR32_TC_LDRBS_OFFSET | + bitfield->ldras << AVR32_TC_LDRAS_OFFSET | + bitfield->cpcs << AVR32_TC_CPCS_OFFSET | + bitfield->cpbs << AVR32_TC_CPBS_OFFSET | + bitfield->cpas << AVR32_TC_CPAS_OFFSET | + bitfield->lovrs << AVR32_TC_LOVRS_OFFSET | + bitfield->covfs << AVR32_TC_COVFS_OFFSET; + + // Disable the appropriate interrupts. + if (global_interrupt_enabled) Disable_global_interrupt(); + tc->channel[channel].idr = (~bitfield->etrgs & 1) << AVR32_TC_ETRGS_OFFSET | + (~bitfield->ldrbs & 1) << AVR32_TC_LDRBS_OFFSET | + (~bitfield->ldras & 1) << AVR32_TC_LDRAS_OFFSET | + (~bitfield->cpcs & 1) << AVR32_TC_CPCS_OFFSET | + (~bitfield->cpbs & 1) << AVR32_TC_CPBS_OFFSET | + (~bitfield->cpas & 1) << AVR32_TC_CPAS_OFFSET | + (~bitfield->lovrs & 1) << AVR32_TC_LOVRS_OFFSET | + (~bitfield->covfs & 1) << AVR32_TC_COVFS_OFFSET; + tc->channel[channel].sr; + if (global_interrupt_enabled) Enable_global_interrupt(); + + return 0; +} + + +int tc_select_external_clock(volatile avr32_tc_t *tc, unsigned int channel, unsigned int ext_clk_sig_src) +{ + // Check for valid input. + if (channel >= TC_NUMBER_OF_CHANNELS || ext_clk_sig_src >= 1 << AVR32_TC_BMR_TC0XC0S_SIZE) + return TC_INVALID_ARGUMENT; + + // Clear bit-field and set the correct behavior. + tc->bmr = (tc->bmr & ~(AVR32_TC_BMR_TC0XC0S_MASK << (channel * AVR32_TC_BMR_TC0XC0S_SIZE))) | + (ext_clk_sig_src << (channel * AVR32_TC_BMR_TC0XC0S_SIZE)); + + return 0; +} + + +int tc_init_capture(volatile avr32_tc_t *tc, const tc_capture_opt_t *opt) +{ + // Check for valid input. + if (opt->channel >= TC_NUMBER_OF_CHANNELS) + return TC_INVALID_ARGUMENT; + + // MEASURE SIGNALS: Capture operating mode. + tc->channel[opt->channel].cmr = opt->ldrb << AVR32_TC_LDRB_OFFSET | + opt->ldra << AVR32_TC_LDRA_OFFSET | + 0 << AVR32_TC_WAVE_OFFSET | + opt->cpctrg << AVR32_TC_CPCTRG_OFFSET | + opt->abetrg << AVR32_TC_ABETRG_OFFSET | + opt->etrgedg << AVR32_TC_ETRGEDG_OFFSET| + opt->ldbdis << AVR32_TC_LDBDIS_OFFSET | + opt->ldbstop << AVR32_TC_LDBSTOP_OFFSET | + opt->burst << AVR32_TC_BURST_OFFSET | + opt->clki << AVR32_TC_CLKI_OFFSET | + opt->tcclks << AVR32_TC_TCCLKS_OFFSET; + + return 0; +} + + +int tc_init_waveform(volatile avr32_tc_t *tc, const tc_waveform_opt_t *opt) +{ + // Check for valid input. + if (opt->channel >= TC_NUMBER_OF_CHANNELS) + return TC_INVALID_ARGUMENT; + + // GENERATE SIGNALS: Waveform operating mode. + tc->channel[opt->channel].cmr = opt->bswtrg << AVR32_TC_BSWTRG_OFFSET | + opt->beevt << AVR32_TC_BEEVT_OFFSET | + opt->bcpc << AVR32_TC_BCPC_OFFSET | + opt->bcpb << AVR32_TC_BCPB_OFFSET | + opt->aswtrg << AVR32_TC_ASWTRG_OFFSET | + opt->aeevt << AVR32_TC_AEEVT_OFFSET | + opt->acpc << AVR32_TC_ACPC_OFFSET | + opt->acpa << AVR32_TC_ACPA_OFFSET | + 1 << AVR32_TC_WAVE_OFFSET | + opt->wavsel << AVR32_TC_WAVSEL_OFFSET | + opt->enetrg << AVR32_TC_ENETRG_OFFSET | + opt->eevt << AVR32_TC_EEVT_OFFSET | + opt->eevtedg << AVR32_TC_EEVTEDG_OFFSET | + opt->cpcdis << AVR32_TC_CPCDIS_OFFSET | + opt->cpcstop << AVR32_TC_CPCSTOP_OFFSET | + opt->burst << AVR32_TC_BURST_OFFSET | + opt->clki << AVR32_TC_CLKI_OFFSET | + opt->tcclks << AVR32_TC_TCCLKS_OFFSET; + + return 0; +} + + +int tc_start(volatile avr32_tc_t *tc, unsigned int channel) +{ + // Check for valid input. + if (channel >= TC_NUMBER_OF_CHANNELS) + return TC_INVALID_ARGUMENT; + + // Enable, reset and start the selected timer/counter channel. + tc->channel[channel].ccr = AVR32_TC_SWTRG_MASK | AVR32_TC_CLKEN_MASK; + + return 0; +} + + +int tc_stop(volatile avr32_tc_t *tc, unsigned int channel) +{ + // Check for valid input. + if (channel >= TC_NUMBER_OF_CHANNELS) + return TC_INVALID_ARGUMENT; + + // Disable the selected timer/counter channel. + tc->channel[channel].ccr = AVR32_TC_CLKDIS_MASK; + + return 0; +} + + +int tc_software_trigger(volatile avr32_tc_t *tc, unsigned int channel) +{ + // Check for valid input. + if (channel >= TC_NUMBER_OF_CHANNELS) + return TC_INVALID_ARGUMENT; + + // Reset the selected timer/counter channel. + tc->channel[channel].ccr = AVR32_TC_SWTRG_MASK; + + return 0; +} + + +void tc_sync_trigger(volatile avr32_tc_t *tc) +{ + // Reset all channels of the selected timer/counter. + tc->bcr = AVR32_TC_BCR_SYNC_MASK; +} + + +void tc_sync_start(volatile avr32_tc_t *tc) +{ + unsigned int i; + // Enable the clock for each channel. + for(i=0; ichannel[i].ccr = AVR32_TC_CLKEN_MASK; + + // Reset all channels of the selected timer/counter. + tc->bcr = AVR32_TC_BCR_SYNC_MASK; +} + + +int tc_read_sr(volatile avr32_tc_t *tc, unsigned int channel) +{ + // Check for valid input. + if (channel >= TC_NUMBER_OF_CHANNELS) + return TC_INVALID_ARGUMENT; + + return tc->channel[channel].sr; +} + + +int tc_read_tc(volatile avr32_tc_t *tc, unsigned int channel) +{ + // Check for valid input. + if (channel >= TC_NUMBER_OF_CHANNELS) + return TC_INVALID_ARGUMENT; + + return Rd_bitfield(tc->channel[channel].cv, AVR32_TC_CV_MASK); +} + + +int tc_read_ra(volatile avr32_tc_t *tc, unsigned int channel) +{ + // Check for valid input. + if (channel >= TC_NUMBER_OF_CHANNELS) + return TC_INVALID_ARGUMENT; + + return Rd_bitfield(tc->channel[channel].ra, AVR32_TC_RA_MASK); +} + + +int tc_read_rb(volatile avr32_tc_t *tc, unsigned int channel) +{ + // Check for valid input. + if (channel >= TC_NUMBER_OF_CHANNELS) + return TC_INVALID_ARGUMENT; + + return Rd_bitfield(tc->channel[channel].rb, AVR32_TC_RB_MASK); +} + + +int tc_read_rc(volatile avr32_tc_t *tc, unsigned int channel) +{ + // Check for valid input. + if (channel >= TC_NUMBER_OF_CHANNELS) + return TC_INVALID_ARGUMENT; + + return Rd_bitfield(tc->channel[channel].rc, AVR32_TC_RC_MASK); +} + + +int tc_write_ra(volatile avr32_tc_t *tc, unsigned int channel, unsigned short value) +{ + // Check for valid input. + if (channel >= TC_NUMBER_OF_CHANNELS) + return TC_INVALID_ARGUMENT; + + // This function is only available in WAVEFORM mode. + if (Tst_bits(tc->channel[channel].cmr, AVR32_TC_WAVE_MASK)) + Wr_bitfield(tc->channel[channel].ra, AVR32_TC_RA_MASK, value); + + return value; +} + + +int tc_write_rb(volatile avr32_tc_t *tc, unsigned int channel, unsigned short value) +{ + // Check for valid input. + if (channel >= TC_NUMBER_OF_CHANNELS) + return TC_INVALID_ARGUMENT; + + // This function is only available in WAVEFORM mode. + if (Tst_bits(tc->channel[channel].cmr, AVR32_TC_WAVE_MASK)) + Wr_bitfield(tc->channel[channel].rb, AVR32_TC_RB_MASK, value); + + return value; +} + + +int tc_write_rc(volatile avr32_tc_t *tc, unsigned int channel, unsigned short value) +{ + // Check for valid input. + if (channel >= TC_NUMBER_OF_CHANNELS) + return TC_INVALID_ARGUMENT; + + // This function is only available in WAVEFORM mode. + if (Tst_bits(tc->channel[channel].cmr, AVR32_TC_WAVE_MASK)) + Wr_bitfield(tc->channel[channel].rc, AVR32_TC_RC_MASK, value); + + return value; +} diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/TC/tc.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/TC/tc.h new file mode 100644 index 000000000..45ef4f25a --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/TC/tc.h @@ -0,0 +1,591 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Timer/Counter driver for AVR32 UC3. + * + * AVR32 Timer/Counter driver module. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with a TC module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _TC_H_ +#define _TC_H_ + +#include + + +//! TC driver functions return value in case of invalid argument(s). +#define TC_INVALID_ARGUMENT (-1) + +//! Number of timer/counter channels. +#define TC_NUMBER_OF_CHANNELS (sizeof(((avr32_tc_t *)0)->channel) / sizeof(avr32_tc_channel_t)) + +/*! \name External Clock Signal 0 Selection + */ +//! @{ +#define TC_CH0_EXT_CLK0_SRC_TCLK0 AVR32_TC_TC0XC0S_TCLK0 +#define TC_CH0_EXT_CLK0_SRC_NO_CLK AVR32_TC_TC0XC0S_NO_CLK +#define TC_CH0_EXT_CLK0_SRC_TIOA1 AVR32_TC_TC0XC0S_TIOA1 +#define TC_CH0_EXT_CLK0_SRC_TIOA2 AVR32_TC_TC0XC0S_TIOA2 +//! @} + +/*! \name External Clock Signal 1 Selection + */ +//! @{ +#define TC_CH1_EXT_CLK1_SRC_TCLK1 AVR32_TC_TC1XC1S_TCLK1 +#define TC_CH1_EXT_CLK1_SRC_NO_CLK AVR32_TC_TC1XC1S_NO_CLK +#define TC_CH1_EXT_CLK1_SRC_TIOA0 AVR32_TC_TC1XC1S_TIOA0 +#define TC_CH1_EXT_CLK1_SRC_TIOA2 AVR32_TC_TC1XC1S_TIOA2 +//! @} + +/*! \name External Clock Signal 2 Selection + */ +//! @{ +#define TC_CH2_EXT_CLK2_SRC_TCLK2 AVR32_TC_TC2XC2S_TCLK2 +#define TC_CH2_EXT_CLK2_SRC_NO_CLK AVR32_TC_TC2XC2S_NO_CLK +#define TC_CH2_EXT_CLK2_SRC_TIOA0 AVR32_TC_TC2XC2S_TIOA0 +#define TC_CH2_EXT_CLK2_SRC_TIOA1 AVR32_TC_TC2XC2S_TIOA1 +//! @} + +/*! \name Event/Trigger Actions on Output + */ +//! @{ +#define TC_EVT_EFFECT_NOOP AVR32_TC_NONE +#define TC_EVT_EFFECT_SET AVR32_TC_SET +#define TC_EVT_EFFECT_CLEAR AVR32_TC_CLEAR +#define TC_EVT_EFFECT_TOGGLE AVR32_TC_TOGGLE +//! @} + +/*! \name RC Compare Trigger Enable + */ +//! @{ +#define TC_NO_TRIGGER_COMPARE_RC 0 +#define TC_TRIGGER_COMPARE_RC 1 +//! @} + +/*! \name Waveform Selection + */ +//! @{ +#define TC_WAVEFORM_SEL_UP_MODE AVR32_TC_WAVSEL_UP_NO_AUTO +#define TC_WAVEFORM_SEL_UP_MODE_RC_TRIGGER AVR32_TC_WAVSEL_UP_AUTO +#define TC_WAVEFORM_SEL_UPDOWN_MODE AVR32_TC_WAVSEL_UPDOWN_NO_AUTO +#define TC_WAVEFORM_SEL_UPDOWN_MODE_RC_TRIGGER AVR32_TC_WAVSEL_UPDOWN_AUTO +//! @} + +/*! \name TIOA or TIOB External Trigger Selection + */ +//! @{ +#define TC_EXT_TRIG_SEL_TIOA 1 +#define TC_EXT_TRIG_SEL_TIOB 0 +//! @} + +/*! \name External Event Selection + */ +//! @{ +#define TC_EXT_EVENT_SEL_TIOB_INPUT AVR32_TC_EEVT_TIOB_INPUT +#define TC_EXT_EVENT_SEL_XC0_OUTPUT AVR32_TC_EEVT_XC0_OUTPUT +#define TC_EXT_EVENT_SEL_XC1_OUTPUT AVR32_TC_EEVT_XC1_OUTPUT +#define TC_EXT_EVENT_SEL_XC2_OUTPUT AVR32_TC_EEVT_XC2_OUTPUT +//! @} + +/*! \name Edge Selection + */ +//! @{ +#define TC_SEL_NO_EDGE AVR32_TC_EEVTEDG_NO_EDGE +#define TC_SEL_RISING_EDGE AVR32_TC_EEVTEDG_POS_EDGE +#define TC_SEL_FALLING_EDGE AVR32_TC_EEVTEDG_NEG_EDGE +#define TC_SEL_EACH_EDGE AVR32_TC_EEVTEDG_BOTH_EDGES +//! @} + +/*! \name Burst Signal Selection + */ +//! @{ +#define TC_BURST_NOT_GATED AVR32_TC_BURST_NOT_GATED +#define TC_BURST_CLK_AND_XC0 AVR32_TC_BURST_CLK_AND_XC0 +#define TC_BURST_CLK_AND_XC1 AVR32_TC_BURST_CLK_AND_XC1 +#define TC_BURST_CLK_AND_XC2 AVR32_TC_BURST_CLK_AND_XC2 +//! @} + +/*! \name Clock Invert + */ +//! @{ +#define TC_CLOCK_RISING_EDGE 0 +#define TC_CLOCK_FALLING_EDGE 1 +//! @} + +/*! \name Clock Selection + */ +//! @{ +#define TC_CLOCK_SOURCE_TC1 AVR32_TC_TCCLKS_TIMER_CLOCK1 +#define TC_CLOCK_SOURCE_TC2 AVR32_TC_TCCLKS_TIMER_CLOCK2 +#define TC_CLOCK_SOURCE_TC3 AVR32_TC_TCCLKS_TIMER_CLOCK3 +#define TC_CLOCK_SOURCE_TC4 AVR32_TC_TCCLKS_TIMER_CLOCK4 +#define TC_CLOCK_SOURCE_TC5 AVR32_TC_TCCLKS_TIMER_CLOCK5 +#define TC_CLOCK_SOURCE_XC0 AVR32_TC_TCCLKS_XC0 +#define TC_CLOCK_SOURCE_XC1 AVR32_TC_TCCLKS_XC1 +#define TC_CLOCK_SOURCE_XC2 AVR32_TC_TCCLKS_XC2 +//! @} + + +//! Timer/counter interrupts. +typedef struct +{ + unsigned int :24; + + //! External trigger interrupt. + unsigned int etrgs : 1; + + //! RB load interrupt. + unsigned int ldrbs : 1; + + //! RA load interrupt. + unsigned int ldras : 1; + + //! RC compare interrupt. + unsigned int cpcs : 1; + + //! RB compare interrupt. + unsigned int cpbs : 1; + + //! RA compare interrupt. + unsigned int cpas : 1; + + //! Load overrun interrupt. + unsigned int lovrs : 1; + + //! Counter overflow interrupt. + unsigned int covfs : 1; +} tc_interrupt_t; + +//! Parameters when initializing a timer/counter in capture mode. +typedef struct +{ + //! Channel to initialize. + unsigned int channel ; + + unsigned int :12; + + //! RB loading selection:\n + //! - \ref TC_SEL_NO_EDGE;\n + //! - \ref TC_SEL_RISING_EDGE;\n + //! - \ref TC_SEL_FALLING_EDGE;\n + //! - \ref TC_SEL_EACH_EDGE. + unsigned int ldrb : 2; + + //! RA loading selection:\n + //! - \ref TC_SEL_NO_EDGE;\n + //! - \ref TC_SEL_RISING_EDGE;\n + //! - \ref TC_SEL_FALLING_EDGE;\n + //! - \ref TC_SEL_EACH_EDGE. + unsigned int ldra : 2; + + unsigned int : 1; + + //! RC compare trigger enable:\n + //! - \ref TC_NO_TRIGGER_COMPARE_RC;\n + //! - \ref TC_TRIGGER_COMPARE_RC. + unsigned int cpctrg : 1; + + unsigned int : 3; + + //! TIOA or TIOB external trigger selection:\n + //! - \ref TC_EXT_TRIG_SEL_TIOA;\n + //! - \ref TC_EXT_TRIG_SEL_TIOB. + unsigned int abetrg : 1; + + //! External trigger edge selection:\n + //! - \ref TC_SEL_NO_EDGE;\n + //! - \ref TC_SEL_RISING_EDGE;\n + //! - \ref TC_SEL_FALLING_EDGE;\n + //! - \ref TC_SEL_EACH_EDGE. + unsigned int etrgedg : 2; + + //! Counter clock disable with RB loading:\n + //! - \c FALSE;\n + //! - \c TRUE. + unsigned int ldbdis : 1; + + //! Counter clock stopped with RB loading:\n + //! - \c FALSE;\n + //! - \c TRUE. + unsigned int ldbstop : 1; + + //! Burst signal selection:\n + //! - \ref TC_BURST_NOT_GATED;\n + //! - \ref TC_BURST_CLK_AND_XC0;\n + //! - \ref TC_BURST_CLK_AND_XC1;\n + //! - \ref TC_BURST_CLK_AND_XC2. + unsigned int burst : 2; + + //! Clock invert:\n + //! - \ref TC_CLOCK_RISING_EDGE;\n + //! - \ref TC_CLOCK_FALLING_EDGE. + unsigned int clki : 1; + + //! Clock selection:\n + //! - \ref TC_CLOCK_SOURCE_TC1;\n + //! - \ref TC_CLOCK_SOURCE_TC2;\n + //! - \ref TC_CLOCK_SOURCE_TC3;\n + //! - \ref TC_CLOCK_SOURCE_TC4;\n + //! - \ref TC_CLOCK_SOURCE_TC5;\n + //! - \ref TC_CLOCK_SOURCE_XC0;\n + //! - \ref TC_CLOCK_SOURCE_XC1;\n + //! - \ref TC_CLOCK_SOURCE_XC2. + unsigned int tcclks : 3; +} tc_capture_opt_t; + +//! Parameters when initializing a timer/counter in waveform mode. +typedef struct +{ + //! Channel to initialize. + unsigned int channel ; + + //! Software trigger effect on TIOB:\n + //! - \ref TC_EVT_EFFECT_NOOP;\n + //! - \ref TC_EVT_EFFECT_SET;\n + //! - \ref TC_EVT_EFFECT_CLEAR;\n + //! - \ref TC_EVT_EFFECT_TOGGLE. + unsigned int bswtrg : 2; + + //! External event effect on TIOB:\n + //! - \ref TC_EVT_EFFECT_NOOP;\n + //! - \ref TC_EVT_EFFECT_SET;\n + //! - \ref TC_EVT_EFFECT_CLEAR;\n + //! - \ref TC_EVT_EFFECT_TOGGLE. + unsigned int beevt : 2; + + //! RC compare effect on TIOB:\n + //! - \ref TC_EVT_EFFECT_NOOP;\n + //! - \ref TC_EVT_EFFECT_SET;\n + //! - \ref TC_EVT_EFFECT_CLEAR;\n + //! - \ref TC_EVT_EFFECT_TOGGLE. + unsigned int bcpc : 2; + + //! RB compare effect on TIOB:\n + //! - \ref TC_EVT_EFFECT_NOOP;\n + //! - \ref TC_EVT_EFFECT_SET;\n + //! - \ref TC_EVT_EFFECT_CLEAR;\n + //! - \ref TC_EVT_EFFECT_TOGGLE. + unsigned int bcpb : 2; + + //! Software trigger effect on TIOA:\n + //! - \ref TC_EVT_EFFECT_NOOP;\n + //! - \ref TC_EVT_EFFECT_SET;\n + //! - \ref TC_EVT_EFFECT_CLEAR;\n + //! - \ref TC_EVT_EFFECT_TOGGLE. + unsigned int aswtrg : 2; + + //! External event effect on TIOA:\n + //! - \ref TC_EVT_EFFECT_NOOP;\n + //! - \ref TC_EVT_EFFECT_SET;\n + //! - \ref TC_EVT_EFFECT_CLEAR;\n + //! - \ref TC_EVT_EFFECT_TOGGLE. + unsigned int aeevt : 2; + + //! RC compare effect on TIOA:\n + //! - \ref TC_EVT_EFFECT_NOOP;\n + //! - \ref TC_EVT_EFFECT_SET;\n + //! - \ref TC_EVT_EFFECT_CLEAR;\n + //! - \ref TC_EVT_EFFECT_TOGGLE. + unsigned int acpc : 2; + + //! RA compare effect on TIOA:\n + //! - \ref TC_EVT_EFFECT_NOOP;\n + //! - \ref TC_EVT_EFFECT_SET;\n + //! - \ref TC_EVT_EFFECT_CLEAR;\n + //! - \ref TC_EVT_EFFECT_TOGGLE. + unsigned int acpa : 2; + + unsigned int : 1; + + //! Waveform selection:\n + //! - \ref TC_WAVEFORM_SEL_UP_MODE;\n + //! - \ref TC_WAVEFORM_SEL_UP_MODE_RC_TRIGGER;\n + //! - \ref TC_WAVEFORM_SEL_UPDOWN_MODE;\n + //! - \ref TC_WAVEFORM_SEL_UPDOWN_MODE_RC_TRIGGER. + unsigned int wavsel : 2; + + //! External event trigger enable:\n + //! - \c FALSE;\n + //! - \c TRUE. + unsigned int enetrg : 1; + + //! External event selection:\n + //! - \ref TC_EXT_EVENT_SEL_TIOB_INPUT;\n + //! - \ref TC_EXT_EVENT_SEL_XC0_OUTPUT;\n + //! - \ref TC_EXT_EVENT_SEL_XC1_OUTPUT;\n + //! - \ref TC_EXT_EVENT_SEL_XC2_OUTPUT. + unsigned int eevt : 2; + + //! External event edge selection:\n + //! - \ref TC_SEL_NO_EDGE;\n + //! - \ref TC_SEL_RISING_EDGE;\n + //! - \ref TC_SEL_FALLING_EDGE;\n + //! - \ref TC_SEL_EACH_EDGE. + unsigned int eevtedg : 2; + + //! Counter clock disable with RC compare:\n + //! - \c FALSE;\n + //! - \c TRUE. + unsigned int cpcdis : 1; + + //! Counter clock stopped with RC compare:\n + //! - \c FALSE;\n + //! - \c TRUE. + unsigned int cpcstop : 1; + + //! Burst signal selection:\n + //! - \ref TC_BURST_NOT_GATED;\n + //! - \ref TC_BURST_CLK_AND_XC0;\n + //! - \ref TC_BURST_CLK_AND_XC1;\n + //! - \ref TC_BURST_CLK_AND_XC2. + unsigned int burst : 2; + + //! Clock invert:\n + //! - \ref TC_CLOCK_RISING_EDGE;\n + //! - \ref TC_CLOCK_FALLING_EDGE. + unsigned int clki : 1; + + //! Clock selection:\n + //! - \ref TC_CLOCK_SOURCE_TC1;\n + //! - \ref TC_CLOCK_SOURCE_TC2;\n + //! - \ref TC_CLOCK_SOURCE_TC3;\n + //! - \ref TC_CLOCK_SOURCE_TC4;\n + //! - \ref TC_CLOCK_SOURCE_TC5;\n + //! - \ref TC_CLOCK_SOURCE_XC0;\n + //! - \ref TC_CLOCK_SOURCE_XC1;\n + //! - \ref TC_CLOCK_SOURCE_XC2. + unsigned int tcclks : 3; +} tc_waveform_opt_t; + + +/*! \brief Reads timer/counter interrupt settings. + * + * \param tc Pointer to the TC instance to access. + * \param channel The TC instance channel to access. + * + * \retval >=0 The interrupt enable configuration organized according to \ref tc_interrupt_t. + * \retval TC_INVALID_ARGUMENT Invalid argument(s). + */ +extern int tc_get_interrupt_settings(volatile avr32_tc_t *tc, unsigned int channel); + +/*! \brief Enables various timer/counter interrupts. + * + * \param tc Pointer to the TC instance to access. + * \param channel The TC instance channel to access. + * \param bitfield The interrupt enable configuration. + * + * \retval 0 Success. + * \retval TC_INVALID_ARGUMENT Invalid argument(s). + */ +extern int tc_configure_interrupts(volatile avr32_tc_t *tc, unsigned int channel, const tc_interrupt_t *bitfield); + +/*! \brief Selects which external clock to use and how to configure it. + * + * \param tc Pointer to the TC instance to access. + * \param channel The TC instance channel to access. + * \param ext_clk_sig_src External clock signal selection: + * \arg \c TC_CH0_EXT_CLK0_SRC_TCLK0; + * \arg \c TC_CH0_EXT_CLK0_SRC_NO_CLK; + * \arg \c TC_CH0_EXT_CLK0_SRC_TIOA1; + * \arg \c TC_CH0_EXT_CLK0_SRC_TIOA2; + * \arg \c TC_CH1_EXT_CLK1_SRC_TCLK1; + * \arg \c TC_CH1_EXT_CLK1_SRC_NO_CLK; + * \arg \c TC_CH1_EXT_CLK1_SRC_TIOA0; + * \arg \c TC_CH1_EXT_CLK1_SRC_TIOA2; + * \arg \c TC_CH2_EXT_CLK2_SRC_TCLK2; + * \arg \c TC_CH2_EXT_CLK2_SRC_NO_CLK; + * \arg \c TC_CH2_EXT_CLK2_SRC_TIOA0; + * \arg \c TC_CH2_EXT_CLK2_SRC_TIOA1. + * + * \retval 0 Success. + * \retval TC_INVALID_ARGUMENT Invalid argument(s). + */ +extern int tc_select_external_clock(volatile avr32_tc_t *tc, unsigned int channel, unsigned int ext_clk_sig_src); + +/*! \brief Sets options for timer/counter capture initialization. + * + * \param tc Pointer to the TC instance to access. + * \param opt Options for capture mode. + * + * \retval 0 Success. + * \retval TC_INVALID_ARGUMENT Invalid argument(s). + */ +extern int tc_init_capture(volatile avr32_tc_t *tc, const tc_capture_opt_t *opt); + +/*! \brief Sets options for timer/counter waveform initialization. + * + * \param tc Pointer to the TC instance to access. + * \param opt Options for waveform generation. + * + * \retval 0 Success. + * \retval TC_INVALID_ARGUMENT Invalid argument(s). + */ +extern int tc_init_waveform(volatile avr32_tc_t *tc, const tc_waveform_opt_t *opt); + +/*! \brief Starts a timer/counter. + * + * \param tc Pointer to the TC instance to access. + * \param channel The TC instance channel to access. + * + * \retval 0 Success. + * \retval TC_INVALID_ARGUMENT Invalid argument(s). + */ +extern int tc_start(volatile avr32_tc_t *tc, unsigned int channel); + +/*! \brief Stops a timer/counter. + * + * \param tc Pointer to the TC instance to access. + * \param channel The TC instance channel to access. + * + * \retval 0 Success. + * \retval TC_INVALID_ARGUMENT Invalid argument(s). + */ +extern int tc_stop(volatile avr32_tc_t *tc, unsigned int channel); + +/*! \brief Performs a software trigger: the counter is reset and the clock is started. + * + * \param tc Pointer to the TC instance to access. + * \param channel The TC instance channel to access. + * + * \retval 0 Success. + * \retval TC_INVALID_ARGUMENT Invalid argument(s). + */ +extern int tc_software_trigger(volatile avr32_tc_t *tc, unsigned int channel); + +/*! \brief Asserts a SYNC signal to generate a software trigger and reset all channels. + * + * \param tc Pointer to the TC instance to access. + */ +extern void tc_sync_trigger(volatile avr32_tc_t *tc); + +/*! \brief Start all TC channels simultaneously. + * + * \param tc Pointer to the TC instance to access. + */ +extern void tc_sync_start(volatile avr32_tc_t *tc); + +/*! \brief Reads the status register. + * + * \param tc Pointer to the TC instance to access. + * \param channel The TC instance channel to access. + * + * \retval >=0 Status register value. + * \retval TC_INVALID_ARGUMENT Invalid argument(s). + */ +extern int tc_read_sr(volatile avr32_tc_t *tc, unsigned int channel); + +/*! \brief Reads the channel's TC counter and returns the value. + * + * \param tc Pointer to the TC instance to access. + * \param channel The TC instance channel to access. + * + * \retval >=0 TC counter value. + * \retval TC_INVALID_ARGUMENT Invalid argument(s). + */ +extern int tc_read_tc(volatile avr32_tc_t *tc, unsigned int channel); + +/*! \brief Reads the channel's RA register and returns the value. + * + * \param tc Pointer to the TC instance to access. + * \param channel The TC instance channel to access. + * + * \retval >=0 RA register value. + * \retval TC_INVALID_ARGUMENT Invalid argument(s). + */ +extern int tc_read_ra(volatile avr32_tc_t *tc, unsigned int channel); + +/*! \brief Reads the channel's RB register and returns the value. + * + * \param tc Pointer to the TC instance to access. + * \param channel The TC instance channel to access. + * + * \retval >=0 RB register value. + * \retval TC_INVALID_ARGUMENT Invalid argument(s). + */ +extern int tc_read_rb(volatile avr32_tc_t *tc, unsigned int channel); + +/*! \brief Reads the channel's RC register and returns the value. + * + * \param tc Pointer to the TC instance to access. + * \param channel The TC instance channel to access. + * + * \retval >=0 RC register value. + * \retval TC_INVALID_ARGUMENT Invalid argument(s). + */ +extern int tc_read_rc(volatile avr32_tc_t *tc, unsigned int channel); + +/*! \brief Writes a value to the channel's RA register. + * + * \param tc Pointer to the TC instance to access. + * \param channel The TC instance channel to access. + * \param value Value to write to the RA register. + * + * \retval >=0 Written value. + * \retval TC_INVALID_ARGUMENT Invalid argument(s). + */ +extern int tc_write_ra(volatile avr32_tc_t *tc, unsigned int channel, unsigned short value); + +/*! \brief Writes a value to the channel's RB register. + * + * \param tc Pointer to the TC instance to access. + * \param channel The TC instance channel to access. + * \param value Value to write to the RB register. + * + * \retval >=0 Written value. + * \retval TC_INVALID_ARGUMENT Invalid argument(s). + */ +extern int tc_write_rb(volatile avr32_tc_t *tc, unsigned int channel, unsigned short value); + +/*! \brief Writes a value to the channel's RC register. + * + * \param tc Pointer to the TC instance to access. + * \param channel The TC instance channel to access. + * \param value Value to write to the RC register. + * + * \retval >=0 Written value. + * \retval TC_INVALID_ARGUMENT Invalid argument(s). + */ +extern int tc_write_rc(volatile avr32_tc_t *tc, unsigned int channel, unsigned short value); + + +#endif // _TC_H_ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/USART/usart.c b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/USART/usart.c new file mode 100644 index 000000000..b95882a75 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/USART/usart.c @@ -0,0 +1,914 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief USART driver for AVR32 UC3. + * + * This file contains basic functions for the AVR32 USART, with support for all + * modes, settings and clock speeds. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with a USART module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#include "compiler.h" +#include "usart.h" + + +//------------------------------------------------------------------------------ +/*! \name Private Functions + */ +//! @{ + + +/*! \brief Checks if the USART is in multidrop mode. + * + * \param usart Base address of the USART instance. + * + * \return \c 1 if the USART is in multidrop mode, otherwise \c 0. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +static __inline__ int usart_mode_is_multidrop(volatile avr32_usart_t *usart) +{ + return ((usart->mr >> AVR32_USART_MR_PAR_OFFSET) & AVR32_USART_MR_PAR_MULTI) == AVR32_USART_MR_PAR_MULTI; +} + + +/*! \brief Calculates a clock divider (\e CD) and a fractional part (\e FP) for + * the USART asynchronous modes to generate a baud rate as close as + * possible to the baud rate set point. + * + * Baud rate calculation: + * \f$ Baudrate = \frac{SelectedClock}{Over \times (CD + \frac{FP}{8})} \f$, \e Over being 16 or 8. + * The maximal oversampling is selected if it allows to generate a baud rate close to the set point. + * + * \param usart Base address of the USART instance. + * \param baudrate Baud rate set point. + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * + * \retval USART_SUCCESS Baud rate successfully initialized. + * \retval USART_INVALID_INPUT Baud rate set point is out of range for the given input clock frequency. + */ +static int usart_set_async_baudrate(volatile avr32_usart_t *usart, unsigned int baudrate, unsigned long pba_hz) +{ + unsigned int over = (pba_hz >= 16 * baudrate) ? 16 : 8; + unsigned int cd_fp = ((1 << AVR32_USART_BRGR_FP_SIZE) * pba_hz + (over * baudrate) / 2) / (over * baudrate); + unsigned int cd = cd_fp >> AVR32_USART_BRGR_FP_SIZE; + unsigned int fp = cd_fp & ((1 << AVR32_USART_BRGR_FP_SIZE) - 1); + + if (cd < 1 || cd > (1 << AVR32_USART_BRGR_CD_SIZE) - 1) + return USART_INVALID_INPUT; + + usart->mr = (usart->mr & ~(AVR32_USART_MR_USCLKS_MASK | + AVR32_USART_MR_SYNC_MASK | + AVR32_USART_MR_OVER_MASK)) | + AVR32_USART_MR_USCLKS_MCK << AVR32_USART_MR_USCLKS_OFFSET | + ((over == 16) ? AVR32_USART_MR_OVER_X16 : AVR32_USART_MR_OVER_X8) << AVR32_USART_MR_OVER_OFFSET; + + usart->brgr = cd << AVR32_USART_BRGR_CD_OFFSET | + fp << AVR32_USART_BRGR_FP_OFFSET; + + return USART_SUCCESS; +} + + +/*! \brief Calculates a clock divider (\e CD) for the USART synchronous master + * modes to generate a baud rate as close as possible to the baud rate + * set point. + * + * Baud rate calculation: + * \f$ Baudrate = \frac{SelectedClock}{CD} \f$. + * + * \param usart Base address of the USART instance. + * \param baudrate Baud rate set point. + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * + * \retval USART_SUCCESS Baud rate successfully initialized. + * \retval USART_INVALID_INPUT Baud rate set point is out of range for the given input clock frequency. + */ +static int usart_set_sync_master_baudrate(volatile avr32_usart_t *usart, unsigned int baudrate, unsigned long pba_hz) +{ + unsigned int cd = (pba_hz + baudrate / 2) / baudrate; + + if (cd < 1 || cd > (1 << AVR32_USART_BRGR_CD_SIZE) - 1) + return USART_INVALID_INPUT; + + usart->mr = (usart->mr & ~AVR32_USART_MR_USCLKS_MASK) | + AVR32_USART_MR_USCLKS_MCK << AVR32_USART_MR_USCLKS_OFFSET | + AVR32_USART_MR_SYNC_MASK; + + usart->brgr = cd << AVR32_USART_BRGR_CD_OFFSET; + + return USART_SUCCESS; +} + + +/*! \brief Selects the SCK pin as the source of baud rate for the USART + * synchronous slave modes. + * + * \param usart Base address of the USART instance. + * + * \retval USART_SUCCESS Baud rate successfully initialized. + */ +static int usart_set_sync_slave_baudrate(volatile avr32_usart_t *usart) +{ + usart->mr = (usart->mr & ~AVR32_USART_MR_USCLKS_MASK) | + AVR32_USART_MR_USCLKS_SCK << AVR32_USART_MR_USCLKS_OFFSET | + AVR32_USART_MR_SYNC_MASK; + + return USART_SUCCESS; +} + + +/*! \brief Calculates a clock divider (\e CD) for the USART ISO7816 mode to + * generate an ISO7816 clock as close as possible to the clock set point. + * + * ISO7816 clock calculation: + * \f$ Clock = \frac{SelectedClock}{CD} \f$. + * + * \param usart Base address of the USART instance. + * \param clock ISO7816 clock set point. + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * + * \retval USART_SUCCESS ISO7816 clock successfully initialized. + * \retval USART_INVALID_INPUT ISO7816 clock set point is out of range for the given input clock frequency. + */ +static int usart_set_iso7816_clock(volatile avr32_usart_t *usart, unsigned int clock, unsigned long pba_hz) +{ + unsigned int cd = (pba_hz + clock / 2) / clock; + + if (cd < 1 || cd > (1 << AVR32_USART_BRGR_CD_SIZE) - 1) + return USART_INVALID_INPUT; + + usart->mr = (usart->mr & ~(AVR32_USART_MR_USCLKS_MASK | + AVR32_USART_MR_SYNC_MASK | + AVR32_USART_MR_OVER_MASK)) | + AVR32_USART_MR_USCLKS_MCK << AVR32_USART_MR_USCLKS_OFFSET | + AVR32_USART_MR_OVER_X16 << AVR32_USART_MR_OVER_OFFSET; + + usart->brgr = cd << AVR32_USART_BRGR_CD_OFFSET; + + return USART_SUCCESS; +} + + +#if defined(AVR32_USART_400_H_INCLUDED) || \ + defined(AVR32_USART_410_H_INCLUDED) || \ + defined(AVR32_USART_420_H_INCLUDED) || \ + defined(AVR32_USART_440_H_INCLUDED) || \ + defined(AVR32_USART_602_H_INCLUDED) + + +/*! \brief Calculates a clock divider (\e CD) for the USART SPI master mode to + * generate a baud rate as close as possible to the baud rate set point. + * + * Baud rate calculation: + * \f$ Baudrate = \frac{SelectedClock}{CD} \f$. + * + * \param usart Base address of the USART instance. + * \param baudrate Baud rate set point. + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * + * \retval USART_SUCCESS Baud rate successfully initialized. + * \retval USART_INVALID_INPUT Baud rate set point is out of range for the given input clock frequency. + */ +static int usart_set_spi_master_baudrate(volatile avr32_usart_t *usart, unsigned int baudrate, unsigned long pba_hz) +{ + unsigned int cd = (pba_hz + baudrate / 2) / baudrate; + + if (cd < 4 || cd > (1 << AVR32_USART_BRGR_CD_SIZE) - 1) + return USART_INVALID_INPUT; + + usart->mr = (usart->mr & ~AVR32_USART_MR_USCLKS_MASK) | + AVR32_USART_MR_USCLKS_MCK << AVR32_USART_MR_USCLKS_OFFSET; + + usart->brgr = cd << AVR32_USART_BRGR_CD_OFFSET; + + return USART_SUCCESS; +} + + +/*! \brief Selects the SCK pin as the source of baud rate for the USART SPI + * slave mode. + * + * \param usart Base address of the USART instance. + * + * \retval USART_SUCCESS Baud rate successfully initialized. + */ +static int usart_set_spi_slave_baudrate(volatile avr32_usart_t *usart) +{ + usart->mr = (usart->mr & ~AVR32_USART_MR_USCLKS_MASK) | + AVR32_USART_MR_USCLKS_SCK << AVR32_USART_MR_USCLKS_OFFSET; + + return USART_SUCCESS; +} + + +#endif // USART rev. >= 4.0.0 + + +//! @} + + +//------------------------------------------------------------------------------ +/*! \name Initialization Functions + */ +//! @{ + + +void usart_reset(volatile avr32_usart_t *usart) +{ + Bool global_interrupt_enabled = Is_global_interrupt_enabled(); + + // Disable all USART interrupts. + // Interrupts needed should be set explicitly on every reset. + if (global_interrupt_enabled) Disable_global_interrupt(); + usart->idr = 0xFFFFFFFF; + usart->csr; + if (global_interrupt_enabled) Enable_global_interrupt(); + + // Reset mode and other registers that could cause unpredictable behavior after reset. + usart->mr = 0; + usart->rtor = 0; + usart->ttgr = 0; + + // Shutdown TX and RX (will be re-enabled when setup has successfully completed), + // reset status bits and turn off DTR and RTS. + usart->cr = AVR32_USART_CR_RSTRX_MASK | + AVR32_USART_CR_RSTTX_MASK | + AVR32_USART_CR_RSTSTA_MASK | + AVR32_USART_CR_RSTIT_MASK | + AVR32_USART_CR_RSTNACK_MASK | +#ifndef AVR32_USART_440_H_INCLUDED +// Note: Modem Signal Management DTR-DSR-DCD-RI are not included in USART rev.440. + AVR32_USART_CR_DTRDIS_MASK | +#endif + AVR32_USART_CR_RTSDIS_MASK; +} + + +int usart_init_rs232(volatile avr32_usart_t *usart, const usart_options_t *opt, long pba_hz) +{ + // Reset the USART and shutdown TX and RX. + usart_reset(usart); + + // Check input values. + if (!opt || // Null pointer. + opt->charlength < 5 || opt->charlength > 9 || + opt->paritytype > 7 || + opt->stopbits > 2 + 255 || + opt->channelmode > 3 || + usart_set_async_baudrate(usart, opt->baudrate, pba_hz) == USART_INVALID_INPUT) + return USART_INVALID_INPUT; + + if (opt->charlength == 9) + { + // Character length set to 9 bits. MODE9 dominates CHRL. + usart->mr |= AVR32_USART_MR_MODE9_MASK; + } + else + { + // CHRL gives the character length (- 5) when MODE9 = 0. + usart->mr |= (opt->charlength - 5) << AVR32_USART_MR_CHRL_OFFSET; + } + + usart->mr |= opt->paritytype << AVR32_USART_MR_PAR_OFFSET | + opt->channelmode << AVR32_USART_MR_CHMODE_OFFSET; + + if (opt->stopbits > USART_2_STOPBITS) + { + // Set two stop bits + usart->mr |= AVR32_USART_MR_NBSTOP_2 << AVR32_USART_MR_NBSTOP_OFFSET; + // and a timeguard period gives the rest. + usart->ttgr = opt->stopbits - USART_2_STOPBITS; + } + else + // Insert 1, 1.5 or 2 stop bits. + usart->mr |= opt->stopbits << AVR32_USART_MR_NBSTOP_OFFSET; + + // Set normal mode. + usart->mr = (usart->mr & ~AVR32_USART_MR_MODE_MASK) | + AVR32_USART_MR_MODE_NORMAL << AVR32_USART_MR_MODE_OFFSET; + + // Setup complete; enable communication. + // Enable input and output. + usart->cr = AVR32_USART_CR_RXEN_MASK | + AVR32_USART_CR_TXEN_MASK; + + return USART_SUCCESS; +} + + +int usart_init_rs232_tx_only(volatile avr32_usart_t *usart, const usart_options_t *opt, long pba_hz) +{ + // Reset the USART and shutdown TX and RX. + usart_reset(usart); + + // Check input values. + if (!opt || // Null pointer. + opt->charlength < 5 || opt->charlength > 9 || + opt->paritytype > 7 || + opt->stopbits == 1 || opt->stopbits > 2 + 255 || + opt->channelmode > 3 || + usart_set_sync_master_baudrate(usart, opt->baudrate, pba_hz) == USART_INVALID_INPUT) + return USART_INVALID_INPUT; + + if (opt->charlength == 9) + { + // Character length set to 9 bits. MODE9 dominates CHRL. + usart->mr |= AVR32_USART_MR_MODE9_MASK; + } + else + { + // CHRL gives the character length (- 5) when MODE9 = 0. + usart->mr |= (opt->charlength - 5) << AVR32_USART_MR_CHRL_OFFSET; + } + + usart->mr |= opt->paritytype << AVR32_USART_MR_PAR_OFFSET | + opt->channelmode << AVR32_USART_MR_CHMODE_OFFSET; + + if (opt->stopbits > USART_2_STOPBITS) + { + // Set two stop bits + usart->mr |= AVR32_USART_MR_NBSTOP_2 << AVR32_USART_MR_NBSTOP_OFFSET; + // and a timeguard period gives the rest. + usart->ttgr = opt->stopbits - USART_2_STOPBITS; + } + else + // Insert 1 or 2 stop bits. + usart->mr |= opt->stopbits << AVR32_USART_MR_NBSTOP_OFFSET; + + // Set normal mode. + usart->mr = (usart->mr & ~AVR32_USART_MR_MODE_MASK) | + AVR32_USART_MR_MODE_NORMAL << AVR32_USART_MR_MODE_OFFSET; + + // Setup complete; enable communication. + // Enable only output as input is not possible in synchronous mode without + // transferring clock. + usart->cr = AVR32_USART_CR_TXEN_MASK; + + return USART_SUCCESS; +} + + +int usart_init_hw_handshaking(volatile avr32_usart_t *usart, const usart_options_t *opt, long pba_hz) +{ + // First: Setup standard RS232. + if (usart_init_rs232(usart, opt, pba_hz) == USART_INVALID_INPUT) + return USART_INVALID_INPUT; + + // Set hardware handshaking mode. + usart->mr = (usart->mr & ~AVR32_USART_MR_MODE_MASK) | + AVR32_USART_MR_MODE_HARDWARE << AVR32_USART_MR_MODE_OFFSET; + + return USART_SUCCESS; +} + + +int usart_init_modem(volatile avr32_usart_t *usart, const usart_options_t *opt, long pba_hz) +{ + // First: Setup standard RS232. + if (usart_init_rs232(usart, opt, pba_hz) == USART_INVALID_INPUT) + return USART_INVALID_INPUT; + + // Set modem mode. + usart->mr = (usart->mr & ~AVR32_USART_MR_MODE_MASK) | + AVR32_USART_MR_MODE_MODEM << AVR32_USART_MR_MODE_OFFSET; + + return USART_SUCCESS; +} + + +int usart_init_sync_master(volatile avr32_usart_t *usart, const usart_options_t *opt, long pba_hz) +{ + // Reset the USART and shutdown TX and RX. + usart_reset(usart); + + // Check input values. + if (!opt || // Null pointer. + opt->charlength < 5 || opt->charlength > 9 || + opt->paritytype > 7 || + opt->stopbits == 1 || opt->stopbits > 2 + 255 || + opt->channelmode > 3 || + usart_set_sync_master_baudrate(usart, opt->baudrate, pba_hz) == USART_INVALID_INPUT) + return USART_INVALID_INPUT; + + if (opt->charlength == 9) + { + // Character length set to 9 bits. MODE9 dominates CHRL. + usart->mr |= AVR32_USART_MR_MODE9_MASK; + } + else + { + // CHRL gives the character length (- 5) when MODE9 = 0. + usart->mr |= (opt->charlength - 5) << AVR32_USART_MR_CHRL_OFFSET; + } + + usart->mr |= opt->paritytype << AVR32_USART_MR_PAR_OFFSET | + opt->channelmode << AVR32_USART_MR_CHMODE_OFFSET; + + if (opt->stopbits > USART_2_STOPBITS) + { + // Set two stop bits + usart->mr |= AVR32_USART_MR_NBSTOP_2 << AVR32_USART_MR_NBSTOP_OFFSET; + // and a timeguard period gives the rest. + usart->ttgr = opt->stopbits - USART_2_STOPBITS; + } + else + // Insert 1 or 2 stop bits. + usart->mr |= opt->stopbits << AVR32_USART_MR_NBSTOP_OFFSET; + + // Set normal mode. + usart->mr = (usart->mr & ~AVR32_USART_MR_MODE_MASK) | + AVR32_USART_MR_MODE_NORMAL << AVR32_USART_MR_MODE_OFFSET | + AVR32_USART_MR_CLKO_MASK; + + // Setup complete; enable communication. + // Enable input and output. + usart->cr = AVR32_USART_CR_RXEN_MASK | + AVR32_USART_CR_TXEN_MASK; + + return USART_SUCCESS; +} + + +int usart_init_sync_slave(volatile avr32_usart_t *usart, const usart_options_t *opt, long pba_hz) +{ + // Reset the USART and shutdown TX and RX. + usart_reset(usart); + + // Check input values. + if (!opt || // Null pointer. + opt->charlength < 5 || opt->charlength > 9 || + opt->paritytype > 7 || + opt->stopbits == 1 || opt->stopbits > 2 + 255 || + opt->channelmode > 3 || + usart_set_sync_slave_baudrate(usart) == USART_INVALID_INPUT) + return USART_INVALID_INPUT; + + if (opt->charlength == 9) + { + // Character length set to 9 bits. MODE9 dominates CHRL. + usart->mr |= AVR32_USART_MR_MODE9_MASK; + } + else + { + // CHRL gives the character length (- 5) when MODE9 = 0. + usart->mr |= (opt->charlength - 5) << AVR32_USART_MR_CHRL_OFFSET; + } + + usart->mr |= opt->paritytype << AVR32_USART_MR_PAR_OFFSET | + opt->channelmode << AVR32_USART_MR_CHMODE_OFFSET; + + if (opt->stopbits > USART_2_STOPBITS) + { + // Set two stop bits + usart->mr |= AVR32_USART_MR_NBSTOP_2 << AVR32_USART_MR_NBSTOP_OFFSET; + // and a timeguard period gives the rest. + usart->ttgr = opt->stopbits - USART_2_STOPBITS; + } + else + // Insert 1 or 2 stop bits. + usart->mr |= opt->stopbits << AVR32_USART_MR_NBSTOP_OFFSET; + + // Set normal mode. + usart->mr = (usart->mr & ~AVR32_USART_MR_MODE_MASK) | + AVR32_USART_MR_MODE_NORMAL << AVR32_USART_MR_MODE_OFFSET; + + // Setup complete; enable communication. + // Enable input and output. + usart->cr = AVR32_USART_CR_RXEN_MASK | + AVR32_USART_CR_TXEN_MASK; + + return USART_SUCCESS; +} + + +int usart_init_rs485(volatile avr32_usart_t *usart, const usart_options_t *opt, long pba_hz) +{ + // First: Setup standard RS232. + if (usart_init_rs232(usart, opt, pba_hz) == USART_INVALID_INPUT) + return USART_INVALID_INPUT; + + // Set RS485 mode. + usart->mr = (usart->mr & ~AVR32_USART_MR_MODE_MASK) | + AVR32_USART_MR_MODE_RS485 << AVR32_USART_MR_MODE_OFFSET; + + return USART_SUCCESS; +} + + +int usart_init_IrDA(volatile avr32_usart_t *usart, const usart_options_t *opt, + long pba_hz, unsigned char irda_filter) +{ + // First: Setup standard RS232. + if (usart_init_rs232(usart, opt, pba_hz) == USART_INVALID_INPUT) + return USART_INVALID_INPUT; + + // Set IrDA filter. + usart->ifr = irda_filter; + + // Set IrDA mode and activate filtering of input. + usart->mr = (usart->mr & ~AVR32_USART_MR_MODE_MASK) | + AVR32_USART_MODE_IRDA << AVR32_USART_MR_MODE_OFFSET | + AVR32_USART_MR_FILTER_MASK; + + return USART_SUCCESS; +} + + +int usart_init_iso7816(volatile avr32_usart_t *usart, const usart_iso7816_options_t *opt, int t, long pba_hz) +{ + // Reset the USART and shutdown TX and RX. + usart_reset(usart); + + // Check input values. + if (!opt || // Null pointer. + opt->paritytype > 1) + return USART_INVALID_INPUT; + + if (t == 0) + { + // Set USART mode to ISO7816, T=0. + // The T=0 protocol always uses 2 stop bits. + usart->mr = AVR32_USART_MR_MODE_ISO7816_T0 << AVR32_USART_MR_MODE_OFFSET | + AVR32_USART_MR_NBSTOP_2 << AVR32_USART_MR_NBSTOP_OFFSET | + opt->bit_order << AVR32_USART_MR_MSBF_OFFSET; // Allow MSBF in T=0. + } + else if (t == 1) + { + // Only LSB first in the T=1 protocol. + // max_iterations field is only used in T=0 mode. + if (opt->bit_order != 0 || + opt->max_iterations != 0) + return USART_INVALID_INPUT; + + // Set USART mode to ISO7816, T=1. + // The T=1 protocol always uses 1 stop bit. + usart->mr = AVR32_USART_MR_MODE_ISO7816_T1 << AVR32_USART_MR_MODE_OFFSET | + AVR32_USART_MR_NBSTOP_1 << AVR32_USART_MR_NBSTOP_OFFSET; + } + else + return USART_INVALID_INPUT; + + if (usart_set_iso7816_clock(usart, opt->iso7816_hz, pba_hz) == USART_INVALID_INPUT) + return USART_INVALID_INPUT; + + // Set FIDI register: bit rate = selected clock/FI_DI_ratio/16. + usart->fidi = opt->fidi_ratio; + + // Set ISO7816 spesific options in the MODE register. + usart->mr |= opt->paritytype << AVR32_USART_MR_PAR_OFFSET | + AVR32_USART_MR_CLKO_MASK | // Enable clock output. + opt->inhibit_nack << AVR32_USART_MR_INACK_OFFSET | + opt->dis_suc_nack << AVR32_USART_MR_DSNACK_OFFSET | + opt->max_iterations << AVR32_USART_MR_MAX_ITERATION_OFFSET; + + // Setup complete; enable the receiver by default. + usart_iso7816_enable_receiver(usart); + + return USART_SUCCESS; +} + + +#if defined(AVR32_USART_400_H_INCLUDED) || \ + defined(AVR32_USART_410_H_INCLUDED) || \ + defined(AVR32_USART_420_H_INCLUDED) || \ + defined(AVR32_USART_440_H_INCLUDED) || \ + defined(AVR32_USART_602_H_INCLUDED) + + +int usart_init_lin_master(volatile avr32_usart_t *usart, unsigned long baudrate, long pba_hz) +{ + // Reset the USART and shutdown TX and RX. + usart_reset(usart); + + // Check input values. + if (usart_set_async_baudrate(usart, baudrate, pba_hz) == USART_INVALID_INPUT) + return USART_INVALID_INPUT; + + usart->mr |= AVR32_USART_MR_MODE_LIN_MASTER << AVR32_USART_MR_MODE_OFFSET; // LIN master mode. + + // Setup complete; enable communication. + // Enable input and output. + usart->cr = AVR32_USART_CR_RXEN_MASK | + AVR32_USART_CR_TXEN_MASK; + + return USART_SUCCESS; +} + + +int usart_init_lin_slave(volatile avr32_usart_t *usart, unsigned long baudrate, long pba_hz) +{ + // Reset the USART and shutdown TX and RX. + usart_reset(usart); + + // Check input values. + if (usart_set_async_baudrate(usart, baudrate, pba_hz) == USART_INVALID_INPUT) + return USART_INVALID_INPUT; + + usart->mr |= AVR32_USART_MR_MODE_LIN_SLAVE << AVR32_USART_MR_MODE_OFFSET; // LIN slave mode. + + // Setup complete; enable communication. + // Enable input and output. + usart->cr = AVR32_USART_CR_RXEN_MASK | + AVR32_USART_CR_TXEN_MASK; + + return USART_SUCCESS; +} + + +int usart_init_spi_master(volatile avr32_usart_t *usart, const usart_spi_options_t *opt, long pba_hz) +{ + // Reset the USART and shutdown TX and RX. + usart_reset(usart); + + // Check input values. + if (!opt || // Null pointer. + opt->charlength < 5 || opt->charlength > 9 || + opt->spimode > 3 || + opt->channelmode > 3 || + usart_set_spi_master_baudrate(usart, opt->baudrate, pba_hz) == USART_INVALID_INPUT) + return USART_INVALID_INPUT; + + if (opt->charlength == 9) + { + // Character length set to 9 bits. MODE9 dominates CHRL. + usart->mr |= AVR32_USART_MR_MODE9_MASK; + } + else + { + // CHRL gives the character length (- 5) when MODE9 = 0. + usart->mr |= (opt->charlength - 5) << AVR32_USART_MR_CHRL_OFFSET; + } + + usart->mr |= AVR32_USART_MR_MODE_SPI_MASTER << AVR32_USART_MR_MODE_OFFSET | // SPI master mode. + ((opt->spimode & 0x1) ^ 0x1) << AVR32_USART_MR_SYNC_OFFSET | // SPI clock phase. + opt->channelmode << AVR32_USART_MR_CHMODE_OFFSET | // Channel mode. + (opt->spimode >> 1) << AVR32_USART_MR_MSBF_OFFSET | // SPI clock polarity. + AVR32_USART_MR_CLKO_MASK; // Drive SCK pin. + + // Setup complete; enable communication. + // Enable input and output. + usart->cr = AVR32_USART_CR_RXEN_MASK | + AVR32_USART_CR_TXEN_MASK; + + return USART_SUCCESS; +} + + +int usart_init_spi_slave(volatile avr32_usart_t *usart, const usart_spi_options_t *opt, long pba_hz) +{ + // Reset the USART and shutdown TX and RX. + usart_reset(usart); + + // Check input values. + if (!opt || // Null pointer. + opt->charlength < 5 || opt->charlength > 9 || + opt->spimode > 3 || + opt->channelmode > 3 || + usart_set_spi_slave_baudrate(usart) == USART_INVALID_INPUT) + return USART_INVALID_INPUT; + + if (opt->charlength == 9) + { + // Character length set to 9 bits. MODE9 dominates CHRL. + usart->mr |= AVR32_USART_MR_MODE9_MASK; + } + else + { + // CHRL gives the character length (- 5) when MODE9 = 0. + usart->mr |= (opt->charlength - 5) << AVR32_USART_MR_CHRL_OFFSET; + } + + usart->mr |= AVR32_USART_MR_MODE_SPI_SLAVE << AVR32_USART_MR_MODE_OFFSET | // SPI slave mode. + ((opt->spimode & 0x1) ^ 0x1) << AVR32_USART_MR_SYNC_OFFSET | // SPI clock phase. + opt->channelmode << AVR32_USART_MR_CHMODE_OFFSET | // Channel mode. + (opt->spimode >> 1) << AVR32_USART_MR_MSBF_OFFSET; // SPI clock polarity. + + // Setup complete; enable communication. + // Enable input and output. + usart->cr = AVR32_USART_CR_RXEN_MASK | + AVR32_USART_CR_TXEN_MASK; + + return USART_SUCCESS; +} + + +#endif // USART rev. >= 4.0.0 + + +//! @} + + +//------------------------------------------------------------------------------ +#if defined(AVR32_USART_400_H_INCLUDED) || \ + defined(AVR32_USART_410_H_INCLUDED) || \ + defined(AVR32_USART_420_H_INCLUDED) || \ + defined(AVR32_USART_440_H_INCLUDED) || \ + defined(AVR32_USART_602_H_INCLUDED) + + +/*! \name SPI Control Functions + */ +//! @{ + + +int usart_spi_selectChip(volatile avr32_usart_t *usart) +{ + // Force the SPI chip select. + usart->cr = AVR32_USART_CR_RTSEN_MASK; + + return USART_SUCCESS; +} + + +int usart_spi_unselectChip(volatile avr32_usart_t *usart) +{ + int timeout = USART_DEFAULT_TIMEOUT; + + do + { + if (!timeout--) return USART_FAILURE; + } while (!usart_tx_empty(usart)); + + // Release the SPI chip select. + usart->cr = AVR32_USART_CR_RTSDIS_MASK; + + return USART_SUCCESS; +} + + +//! @} + + +#endif // USART rev. >= 4.0.0 + + +//------------------------------------------------------------------------------ +/*! \name Transmit/Receive Functions + */ +//! @{ + + +int usart_send_address(volatile avr32_usart_t *usart, int address) +{ + // Check if USART is in multidrop / RS485 mode. + if (!usart_mode_is_multidrop(usart)) return USART_MODE_FAULT; + + // Prepare to send an address. + usart->cr = AVR32_USART_CR_SENDA_MASK; + + // Write the address to TX. + usart_bw_write_char(usart, address); + + return USART_SUCCESS; +} + + +int usart_write_char(volatile avr32_usart_t *usart, int c) +{ + if (usart_tx_ready(usart)) + { + usart->thr = (c << AVR32_USART_THR_TXCHR_OFFSET) & AVR32_USART_THR_TXCHR_MASK; + return USART_SUCCESS; + } + else + return USART_TX_BUSY; +} + + +int usart_putchar(volatile avr32_usart_t *usart, int c) +{ + int timeout = USART_DEFAULT_TIMEOUT; + + if (c == '\n') + { + do + { + if (!timeout--) return USART_FAILURE; + } while (usart_write_char(usart, '\r') != USART_SUCCESS); + + timeout = USART_DEFAULT_TIMEOUT; + } + + do + { + if (!timeout--) return USART_FAILURE; + } while (usart_write_char(usart, c) != USART_SUCCESS); + + return USART_SUCCESS; +} + + +int usart_read_char(volatile avr32_usart_t *usart, int *c) +{ + // Check for errors: frame, parity and overrun. In RS485 mode, a parity error + // would mean that an address char has been received. + if (usart->csr & (AVR32_USART_CSR_OVRE_MASK | + AVR32_USART_CSR_FRAME_MASK | + AVR32_USART_CSR_PARE_MASK)) + return USART_RX_ERROR; + + // No error; if we really did receive a char, read it and return SUCCESS. + if (usart_test_hit(usart)) + { + *c = (usart->rhr & AVR32_USART_RHR_RXCHR_MASK) >> AVR32_USART_RHR_RXCHR_OFFSET; + return USART_SUCCESS; + } + else + return USART_RX_EMPTY; +} + + +int usart_getchar(volatile avr32_usart_t *usart) +{ + int c, ret; + + while ((ret = usart_read_char(usart, &c)) == USART_RX_EMPTY); + + if (ret == USART_RX_ERROR) + return USART_FAILURE; + + return c; +} + + +void usart_write_line(volatile avr32_usart_t *usart, const char *string) +{ + while (*string != '\0') + usart_putchar(usart, *string++); +} + + +int usart_get_echo_line(volatile avr32_usart_t *usart) +{ + int rx_char; + int retval = USART_SUCCESS; + + while (1) + { + rx_char = usart_getchar(usart); + if (rx_char == USART_FAILURE) + { + usart_write_line(usart, "Error!!!\n"); + retval = USART_FAILURE; + break; + } + if (rx_char == '\x03') + { + retval = USART_FAILURE; + break; + } + usart_putchar(usart, rx_char); + if (rx_char == '\r') + { + usart_putchar(usart, '\n'); + break; + } + } + + return retval; +} + + +//! @} diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/USART/usart.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/USART/usart.h new file mode 100644 index 000000000..bc1c100f8 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/USART/usart.h @@ -0,0 +1,889 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief USART driver for AVR32 UC3. + * + * This file contains basic functions for the AVR32 USART, with support for all + * modes, settings and clock speeds. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with a USART module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _USART_H_ +#define _USART_H_ + +#include +#include "compiler.h" + + +/*! \name Return Values + */ +//! @{ +#define USART_SUCCESS 0 //!< Successful completion. +#define USART_FAILURE -1 //!< Failure because of some unspecified reason. +#define USART_INVALID_INPUT 1 //!< Input value out of range. +#define USART_INVALID_ARGUMENT -1 //!< Argument value out of range. +#define USART_TX_BUSY 2 //!< Transmitter was busy. +#define USART_RX_EMPTY 3 //!< Nothing was received. +#define USART_RX_ERROR 4 //!< Transmission error occurred. +#define USART_MODE_FAULT 5 //!< USART not in the appropriate mode. +//! @} + +//! Default time-out value (number of attempts). +#define USART_DEFAULT_TIMEOUT 10000 + +/*! \name Parity Settings + */ +//! @{ +#define USART_EVEN_PARITY AVR32_USART_MR_PAR_EVEN //!< Use even parity on character transmission. +#define USART_ODD_PARITY AVR32_USART_MR_PAR_ODD //!< Use odd parity on character transmission. +#define USART_SPACE_PARITY AVR32_USART_MR_PAR_SPACE //!< Use a space as parity bit. +#define USART_MARK_PARITY AVR32_USART_MR_PAR_MARK //!< Use a mark as parity bit. +#define USART_NO_PARITY AVR32_USART_MR_PAR_NONE //!< Don't use a parity bit. +#define USART_MULTIDROP_PARITY AVR32_USART_MR_PAR_MULTI //!< Parity bit is used to flag address characters. +//! @} + +/*! \name Stop Bits Settings + */ +//! @{ +#define USART_1_STOPBIT AVR32_USART_MR_NBSTOP_1 //!< Use 1 stop bit. +#define USART_1_5_STOPBITS AVR32_USART_MR_NBSTOP_1_5 //!< Use 1.5 stop bits. +#define USART_2_STOPBITS AVR32_USART_MR_NBSTOP_2 //!< Use 2 stop bits (for more, just give the number of bits). +//! @} + +/*! \name Channel Modes + */ +//! @{ +#define USART_NORMAL_CHMODE AVR32_USART_MR_CHMODE_NORMAL //!< Normal communication. +#define USART_AUTO_ECHO AVR32_USART_MR_CHMODE_ECHO //!< Echo data. +#define USART_LOCAL_LOOPBACK AVR32_USART_MR_CHMODE_LOCAL_LOOP //!< Local loopback. +#define USART_REMOTE_LOOPBACK AVR32_USART_MR_CHMODE_REMOTE_LOOP //!< Remote loopback. +//! @} + +#if defined(AVR32_USART_400_H_INCLUDED) || \ + defined(AVR32_USART_410_H_INCLUDED) || \ + defined(AVR32_USART_420_H_INCLUDED) || \ + defined(AVR32_USART_440_H_INCLUDED) || \ + defined(AVR32_USART_602_H_INCLUDED) + +/*! \name LIN Node Actions + */ +//! @{ +#define USART_LIN_PUBLISH_ACTION AVR32_USART_LINMR_NACT_PUBLISH //!< The USART transmits the response. +#define USART_LIN_SUBSCRIBE_ACTION AVR32_USART_LINMR_NACT_SUBSCRIBE //!< The USART receives the response. +#define USART_LIN_IGNORE_ACTION AVR32_USART_LINMR_NACT_IGNORE //!< The USART does not transmit and does not receive the reponse. +//! @} + +/*! \name LIN Checksum Types + */ +//! @{ +#define USART_LIN_ENHANCED_CHECKSUM 0 //!< LIN 2.0 "enhanced" checksum. +#define USART_LIN_CLASSIC_CHECKSUM 1 //!< LIN 1.3 "classic" checksum. +//! @} + +#endif // USART rev. >= 4.0.0 + + +//! Input parameters when initializing RS232 and similar modes. +typedef struct +{ + //! Set baud rate of the USART (unused in slave modes). + unsigned long baudrate; + + //! Number of bits to transmit as a character (5 to 9). + unsigned char charlength; + + //! How to calculate the parity bit: \ref USART_EVEN_PARITY, \ref USART_ODD_PARITY, + //! \ref USART_SPACE_PARITY, \ref USART_MARK_PARITY, \ref USART_NO_PARITY or + //! \ref USART_MULTIDROP_PARITY. + unsigned char paritytype; + + //! Number of stop bits between two characters: \ref USART_1_STOPBIT, + //! \ref USART_1_5_STOPBITS, \ref USART_2_STOPBITS or any number from 3 to 257 + //! which will result in a time guard period of that length between characters. + //! \note \ref USART_1_5_STOPBITS is supported in asynchronous modes only. + unsigned short stopbits; + + //! Run the channel in testmode: \ref USART_NORMAL_CHMODE, \ref USART_AUTO_ECHO, + //! \ref USART_LOCAL_LOOPBACK or \ref USART_REMOTE_LOOPBACK. + unsigned char channelmode; +} usart_options_t; + +//! Input parameters when initializing ISO7816 mode. +typedef struct +{ + //! Set the frequency of the ISO7816 clock. + unsigned long iso7816_hz; + + //! The number of ISO7816 clock ticks in every bit period (1 to 2047, 0 = disable clock). + //! Bit rate = \ref iso7816_hz / \ref fidi_ratio. + unsigned short fidi_ratio; + + //! How to calculate the parity bit: \ref USART_EVEN_PARITY for normal mode or + //! \ref USART_ODD_PARITY for inverse mode. + unsigned char paritytype; + + //! Inhibit Non Acknowledge:\n + //! - 0: the NACK is generated;\n + //! - 1: the NACK is not generated. + //! + //! \note This bit will be used only in ISO7816 mode, protocol T = 0 receiver. + int inhibit_nack; + + //! Disable successive NACKs. + //! Successive parity errors are counted up to the value in the \ref max_iterations field. + //! These parity errors generate a NACK on the ISO line. As soon as this value is reached, + //! no addititional NACK is sent on the ISO line. The ITERATION flag is asserted. + int dis_suc_nack; + + //! Max number of repetitions (0 to 7). + unsigned char max_iterations; + + //! Bit order in transmitted characters:\n + //! - 0: LSB first;\n + //! - 1: MSB first. + int bit_order; +} usart_iso7816_options_t; + +#if defined(AVR32_USART_400_H_INCLUDED) || \ + defined(AVR32_USART_410_H_INCLUDED) || \ + defined(AVR32_USART_420_H_INCLUDED) || \ + defined(AVR32_USART_440_H_INCLUDED) || \ + defined(AVR32_USART_602_H_INCLUDED) + +//! Input parameters when initializing SPI mode. +typedef struct +{ + //! Set the frequency of the SPI clock (unused in slave mode). + unsigned long baudrate; + + //! Number of bits to transmit as a character (5 to 9). + unsigned char charlength; + + //! Which SPI mode to use. + unsigned char spimode; + + //! Run the channel in testmode: \ref USART_NORMAL_CHMODE, \ref USART_AUTO_ECHO, + //! \ref USART_LOCAL_LOOPBACK or \ref USART_REMOTE_LOOPBACK. + unsigned char channelmode; +} usart_spi_options_t; + +#endif // USART rev. >= 4.0.0 + + +//------------------------------------------------------------------------------ +/*! \name Initialization Functions + */ +//! @{ + +/*! \brief Resets the USART and disables TX and RX. + * + * \param usart Base address of the USART instance. + */ +extern void usart_reset(volatile avr32_usart_t *usart); + +/*! \brief Sets up the USART to use the standard RS232 protocol. + * + * \param usart Base address of the USART instance. + * \param opt Options needed to set up RS232 communication (see \ref usart_options_t). + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * + * \retval USART_SUCCESS Mode successfully initialized. + * \retval USART_INVALID_INPUT One or more of the arguments is out of valid range. + */ +extern int usart_init_rs232(volatile avr32_usart_t *usart, const usart_options_t *opt, long pba_hz); + +/*! \brief Sets up the USART to use the standard RS232 protocol in TX-only mode. + * + * Compared to \ref usart_init_rs232, this function allows very high baud rates + * (up to \a pba_hz instead of \a pba_hz / \c 8) at the expense of full duplex. + * + * \param usart Base address of the USART instance. + * \param opt Options needed to set up RS232 communication (see \ref usart_options_t). + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * + * \retval USART_SUCCESS Mode successfully initialized. + * \retval USART_INVALID_INPUT One or more of the arguments is out of valid range. + * + * \note The \c 1.5 stop bit is not supported in this mode. + */ +extern int usart_init_rs232_tx_only(volatile avr32_usart_t *usart, const usart_options_t *opt, long pba_hz); + +/*! \brief Sets up the USART to use hardware handshaking. + * + * \param usart Base address of the USART instance. + * \param opt Options needed to set up RS232 communication (see \ref usart_options_t). + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * + * \retval USART_SUCCESS Mode successfully initialized. + * \retval USART_INVALID_INPUT One or more of the arguments is out of valid range. + * + * \note \ref usart_init_rs232 does not need to be invoked before this function. + */ +extern int usart_init_hw_handshaking(volatile avr32_usart_t *usart, const usart_options_t *opt, long pba_hz); + +/*! \brief Sets up the USART to use the modem protocol, activating dedicated inputs/outputs. + * + * \param usart Base address of the USART instance. + * \param opt Options needed to set up RS232 communication (see \ref usart_options_t). + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * + * \retval USART_SUCCESS Mode successfully initialized. + * \retval USART_INVALID_INPUT One or more of the arguments is out of valid range. + */ +extern int usart_init_modem(volatile avr32_usart_t *usart, const usart_options_t *opt, long pba_hz); + +/*! \brief Sets up the USART to use a synchronous RS232-like protocol in master mode. + * + * \param usart Base address of the USART instance. + * \param opt Options needed to set up RS232 communication (see \ref usart_options_t). + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * + * \retval USART_SUCCESS Mode successfully initialized. + * \retval USART_INVALID_INPUT One or more of the arguments is out of valid range. + */ +extern int usart_init_sync_master(volatile avr32_usart_t *usart, const usart_options_t *opt, long pba_hz); + +/*! \brief Sets up the USART to use a synchronous RS232-like protocol in slave mode. + * + * \param usart Base address of the USART instance. + * \param opt Options needed to set up RS232 communication (see \ref usart_options_t). + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * + * \retval USART_SUCCESS Mode successfully initialized. + * \retval USART_INVALID_INPUT One or more of the arguments is out of valid range. + */ +extern int usart_init_sync_slave(volatile avr32_usart_t *usart, const usart_options_t *opt, long pba_hz); + +/*! \brief Sets up the USART to use the RS485 protocol. + * + * \param usart Base address of the USART instance. + * \param opt Options needed to set up RS232 communication (see \ref usart_options_t). + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * + * \retval USART_SUCCESS Mode successfully initialized. + * \retval USART_INVALID_INPUT One or more of the arguments is out of valid range. + */ +extern int usart_init_rs485(volatile avr32_usart_t *usart, const usart_options_t *opt, long pba_hz); + +/*! \brief Sets up the USART to use the IrDA protocol. + * + * \param usart Base address of the USART instance. + * \param opt Options needed to set up RS232 communication (see \ref usart_options_t). + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * \param irda_filter Counter used to distinguish received ones from zeros. + * + * \retval USART_SUCCESS Mode successfully initialized. + * \retval USART_INVALID_INPUT One or more of the arguments is out of valid range. + */ +extern int usart_init_IrDA(volatile avr32_usart_t *usart, const usart_options_t *opt, + long pba_hz, unsigned char irda_filter); + +/*! \brief Sets up the USART to use the ISO7816 T=0 or T=1 smartcard protocols. + * + * The receiver is enabled by default. \ref usart_iso7816_enable_receiver and + * \ref usart_iso7816_enable_transmitter can be called to change the half-duplex + * communication direction. + * + * \param usart Base address of the USART instance. + * \param opt Options needed to set up ISO7816 communication (see \ref usart_iso7816_options_t). + * \param t ISO7816 mode to use (T=0 or T=1). + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * + * \retval USART_SUCCESS Mode successfully initialized. + * \retval USART_INVALID_INPUT One or more of the arguments is out of valid range. + */ +extern int usart_init_iso7816(volatile avr32_usart_t *usart, const usart_iso7816_options_t *opt, int t, long pba_hz); + +#if defined(AVR32_USART_400_H_INCLUDED) || \ + defined(AVR32_USART_410_H_INCLUDED) || \ + defined(AVR32_USART_420_H_INCLUDED) || \ + defined(AVR32_USART_440_H_INCLUDED) || \ + defined(AVR32_USART_602_H_INCLUDED) + +/*! \brief Sets up the USART to use the LIN master mode. + * + * \param usart Base address of the USART instance. + * \param baudrate Baud rate. + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * + */ +extern int usart_init_lin_master(volatile avr32_usart_t *usart, unsigned long baudrate, long pba_hz); + +/*! \brief Sets up the USART to use the LIN slave mode. + * + * \param usart Base address of the USART instance. + * \param baudrate Baud rate. + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * + */ +extern int usart_init_lin_slave(volatile avr32_usart_t *usart, unsigned long baudrate, long pba_hz); + +/*! \brief Sets up the USART to use the SPI master mode. + * + * \ref usart_spi_selectChip and \ref usart_spi_unselectChip can be called to + * select or unselect the SPI slave chip. + * + * \param usart Base address of the USART instance. + * \param opt Options needed to set up SPI mode (see \ref usart_spi_options_t). + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * + * \retval USART_SUCCESS Mode successfully initialized. + * \retval USART_INVALID_INPUT One or more of the arguments is out of valid range. + */ +extern int usart_init_spi_master(volatile avr32_usart_t *usart, const usart_spi_options_t *opt, long pba_hz); + +/*! \brief Sets up the USART to use the SPI slave mode. + * + * \param usart Base address of the USART instance. + * \param opt Options needed to set up SPI mode (see \ref usart_spi_options_t). + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * + * \retval USART_SUCCESS Mode successfully initialized. + * \retval USART_INVALID_INPUT One or more of the arguments is out of valid range. + */ +extern int usart_init_spi_slave(volatile avr32_usart_t *usart, const usart_spi_options_t *opt, long pba_hz); + +#endif // USART rev. >= 4.0.0 + +//! @} + + +//------------------------------------------------------------------------------ +/*! \name Read and Reset Error Status Bits + */ +//! @{ + +/*! \brief Resets the error status. + * + * This function resets the status bits indicating that a parity error, + * framing error or overrun has occurred. The RXBRK bit, indicating + * a start/end of break condition on the RX line, is also reset. + * + * \param usart Base address of the USART instance. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void usart_reset_status(volatile avr32_usart_t *usart) +{ + usart->cr = AVR32_USART_CR_RSTSTA_MASK; +} + +/*! \brief Checks if a parity error has occurred since last status reset. + * + * \param usart Base address of the USART instance. + * + * \return \c 1 if a parity error has been detected, otherwise \c 0. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ int usart_parity_error(volatile avr32_usart_t *usart) +{ + return (usart->csr & AVR32_USART_CSR_PARE_MASK) != 0; +} + +/*! \brief Checks if a framing error has occurred since last status reset. + * + * \param usart Base address of the USART instance. + * + * \return \c 1 if a framing error has been detected, otherwise \c 0. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ int usart_framing_error(volatile avr32_usart_t *usart) +{ + return (usart->csr & AVR32_USART_CSR_FRAME_MASK) != 0; +} + +/*! \brief Checks if an overrun error has occurred since last status reset. + * + * \param usart Base address of the USART instance. + * + * \return \c 1 if a overrun error has been detected, otherwise \c 0. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ int usart_overrun_error(volatile avr32_usart_t *usart) +{ + return (usart->csr & AVR32_USART_CSR_OVRE_MASK) != 0; +} + +#if defined(AVR32_USART_400_H_INCLUDED) || \ + defined(AVR32_USART_410_H_INCLUDED) || \ + defined(AVR32_USART_420_H_INCLUDED) || \ + defined(AVR32_USART_440_H_INCLUDED) || \ + defined(AVR32_USART_602_H_INCLUDED) + +/*! \brief Get LIN Error Status + * + * \param usart Base address of the USART instance. + * + * \retval The binary value of the error field. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ int usart_lin_get_error(volatile avr32_usart_t *usart) +{ + return (usart->csr & (AVR32_USART_CSR_LINSNRE_MASK | + AVR32_USART_CSR_LINCE_MASK | + AVR32_USART_CSR_LINIPE_MASK | + AVR32_USART_CSR_LINISFE_MASK | + AVR32_USART_CSR_LINBE_MASK)) >> AVR32_USART_CSR_LINBE_OFFSET; +} + +#endif // USART rev. >= 4.0.0 + +//! @} + + +//------------------------------------------------------------------------------ +/*! \name ISO7816 Control Functions + */ +//! @{ + +/*! \brief Enables the ISO7816 receiver. + * + * The ISO7816 transmitter is disabled. + * + * \param usart Base address of the USART instance. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void usart_iso7816_enable_receiver(volatile avr32_usart_t *usart) +{ + usart->cr = AVR32_USART_CR_TXDIS_MASK | AVR32_USART_CR_RXEN_MASK; +} + +/*! \brief Enables the ISO7816 transmitter. + * + * The ISO7816 receiver is disabled. + * + * \param usart Base address of the USART instance. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void usart_iso7816_enable_transmitter(volatile avr32_usart_t *usart) +{ + usart->cr = AVR32_USART_CR_RXDIS_MASK | AVR32_USART_CR_TXEN_MASK; +} + +//! @} + + +//------------------------------------------------------------------------------ +#if defined(AVR32_USART_400_H_INCLUDED) || \ + defined(AVR32_USART_410_H_INCLUDED) || \ + defined(AVR32_USART_420_H_INCLUDED) || \ + defined(AVR32_USART_440_H_INCLUDED) || \ + defined(AVR32_USART_602_H_INCLUDED) + +/*! \name LIN Control Functions + */ +//! @{ + +/*! \brief Sets the node action. + * + * \param usart Base address of the USART instance. + * \param action The node action: \ref USART_LIN_PUBLISH_ACTION, + * \ref USART_LIN_SUBSCRIBE_ACTION or + * \ref USART_LIN_IGNORE_ACTION. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void usart_lin_set_node_action(volatile avr32_usart_t *usart, unsigned char action) +{ + usart->linmr = (usart->linmr & ~AVR32_USART_LINMR_NACT_MASK) | + action << AVR32_USART_LINMR_NACT_OFFSET; +} + +/*! \brief Enables or disables the Identifier parity. + * + * \param usart Base address of the USART instance. + * \param parity Whether to enable the Identifier parity: \c TRUE or \c FALSE. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void usart_lin_enable_parity(volatile avr32_usart_t *usart, unsigned char parity) +{ + usart->linmr = (usart->linmr & ~AVR32_USART_LINMR_PARDIS_MASK) | + !parity << AVR32_USART_LINMR_PARDIS_OFFSET; +} + +/*! \brief Enables or disables the checksum. + * + * \param usart Base address of the USART instance. + * \param parity Whether to enable the checksum: \c TRUE or \c FALSE. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void usart_lin_enable_checksum(volatile avr32_usart_t *usart, unsigned char checksum) +{ + usart->linmr = (usart->linmr & ~AVR32_USART_LINMR_CHKDIS_MASK) | + !checksum << AVR32_USART_LINMR_CHKDIS_OFFSET; +} + +/*! \brief Sets the checksum type. + * + * \param usart Base address of the USART instance. + * \param chktyp The checksum type: \ref USART_LIN_ENHANCED_CHEKSUM or + * \ref USART_LIN_CLASSIC_CHECKSUM. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void usart_lin_set_checksum(volatile avr32_usart_t *usart, unsigned char chktyp) +{ + usart->linmr = (usart->linmr & ~AVR32_USART_LINMR_CHKTYP_MASK) | + chktyp << AVR32_USART_LINMR_CHKTYP_OFFSET; +} + +/*! \brief Gets the response data length. + * + * \param usart Base address of the USART instance. + * + * \return The response data length. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ unsigned char usart_lin_get_data_length(volatile avr32_usart_t *usart) +{ + if (usart->linmr & AVR32_USART_LINMR_DLM_MASK) + { + unsigned char data_length = 1 << ((usart->linir >> (AVR32_USART_LINIR_IDCHR_OFFSET + 4)) & 0x03); + if (data_length == 1) + data_length = 2; + return data_length; + } + else + return ((usart->linmr & AVR32_USART_LINMR_DLC_MASK) >> AVR32_USART_LINMR_DLC_OFFSET) + 1; +} + +/*! \brief Sets the response data length for LIN 1.x. + * + * \param usart Base address of the USART instance. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void usart_lin_set_data_length_lin1x(volatile avr32_usart_t *usart) +{ + usart->linmr |= AVR32_USART_LINMR_DLM_MASK; +} + +/*! \brief Sets the response data length for LIN 2.x. + * + * \param usart Base address of the USART instance. + * \param data_length The response data length. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void usart_lin_set_data_length_lin2x(volatile avr32_usart_t *usart, unsigned char data_length) +{ + usart->linmr = (usart->linmr & ~(AVR32_USART_LINMR_DLC_MASK | + AVR32_USART_LINMR_DLM_MASK)) | + (data_length - 1) << AVR32_USART_LINMR_DLC_OFFSET; +} + +/*! \brief Enables or disables the frame slot mode. + * + * \param usart Base address of the USART instance. + * \param frameslot Whether to enable the frame slot mode: \c TRUE or + * \c FALSE. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void usart_lin_enable_frameslot(volatile avr32_usart_t *usart, unsigned char frameslot) +{ + usart->linmr = (usart->linmr & ~AVR32_USART_LINMR_FSDIS_MASK) | + !frameslot << AVR32_USART_LINMR_FSDIS_OFFSET; +} + +/*! \brief Gets the Identifier character. + * + * \param usart Base address of the USART instance. + * + * \return The Identifier character. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ unsigned char usart_lin_get_id_char(volatile avr32_usart_t *usart) +{ + return (usart->linir & AVR32_USART_LINIR_IDCHR_MASK) >> AVR32_USART_LINIR_IDCHR_OFFSET; +} + +/*! \brief Sets the Identifier character. + * + * \param usart Base address of the USART instance. + * \param id_char The Identifier character. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void usart_lin_set_id_char(volatile avr32_usart_t *usart, unsigned char id_char) +{ + usart->linir = (usart->linir & ~AVR32_USART_LINIR_IDCHR_MASK) | + id_char << AVR32_USART_LINIR_IDCHR_OFFSET; +} + +//! @} + +#endif // USART rev. >= 4.0.0 + + +//------------------------------------------------------------------------------ +#if defined(AVR32_USART_400_H_INCLUDED) || \ + defined(AVR32_USART_410_H_INCLUDED) || \ + defined(AVR32_USART_420_H_INCLUDED) || \ + defined(AVR32_USART_440_H_INCLUDED) || \ + defined(AVR32_USART_602_H_INCLUDED) + +/*! \name SPI Control Functions + */ +//! @{ + +/*! \brief Selects SPI slave chip. + * + * \param usart Base address of the USART instance. + * + * \retval USART_SUCCESS Success. + */ +extern int usart_spi_selectChip(volatile avr32_usart_t *usart); + +/*! \brief Unselects SPI slave chip. + * + * \param usart Base address of the USART instance. + * + * \retval USART_SUCCESS Success. + * \retval USART_FAILURE Time-out. + */ +extern int usart_spi_unselectChip(volatile avr32_usart_t *usart); + +//! @} + +#endif // USART rev. >= 4.0.0 + + +//------------------------------------------------------------------------------ +/*! \name Transmit/Receive Functions + */ +//! @{ + +/*! \brief Addresses a receiver. + * + * While in RS485 mode, receivers only accept data addressed to them. + * A packet/char with the address tag set has to precede any data. + * This function is used to address a receiver. This receiver should read + * all the following data, until an address packet addresses another receiver. + * + * \param usart Base address of the USART instance. + * \param address Address of the target device. + * + * \retval USART_SUCCESS Address successfully sent (if current mode is RS485). + * \retval USART_MODE_FAULT Wrong operating mode. + */ +extern int usart_send_address(volatile avr32_usart_t *usart, int address); + +/*! \brief Tests if the USART is ready to transmit a character. + * + * \param usart Base address of the USART instance. + * + * \return \c 1 if the USART Transmit Holding Register is free, otherwise \c 0. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ int usart_tx_ready(volatile avr32_usart_t *usart) +{ + return (usart->csr & AVR32_USART_CSR_TXRDY_MASK) != 0; +} + +/*! \brief Writes the given character to the TX buffer if the transmitter is ready. + * + * \param usart Base address of the USART instance. + * \param c The character (up to 9 bits) to transmit. + * + * \retval USART_SUCCESS The transmitter was ready. + * \retval USART_TX_BUSY The transmitter was busy. + */ +extern int usart_write_char(volatile avr32_usart_t *usart, int c); + +/*! \brief An active wait writing a character to the USART. + * + * \param usart Base address of the USART instance. + * \param c The character (up to 9 bits) to transmit. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void usart_bw_write_char(volatile avr32_usart_t *usart, int c) +{ + while (usart_write_char(usart, c) != USART_SUCCESS); +} + +/*! \brief Sends a character with the USART. + * + * \param usart Base address of the USART instance. + * \param c Character to write. + * + * \retval USART_SUCCESS The character was written. + * \retval USART_FAILURE The function timed out before the USART transmitter became ready to send. + */ +extern int usart_putchar(volatile avr32_usart_t *usart, int c); + +/*! \brief Tests if all requested USART transmissions are over. + * + * \param usart Base address of the USART instance. + * + * \return \c 1 if the USART Transmit Shift Register and the USART Transmit + * Holding Register are free, otherwise \c 0. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ int usart_tx_empty(volatile avr32_usart_t *usart) +{ + return (usart->csr & AVR32_USART_CSR_TXEMPTY_MASK) != 0; +} + +/*! \brief Tests if the USART contains a received character. + * + * \param usart Base address of the USART instance. + * + * \return \c 1 if the USART Receive Holding Register is full, otherwise \c 0. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ int usart_test_hit(volatile avr32_usart_t *usart) +{ + return (usart->csr & AVR32_USART_CSR_RXRDY_MASK) != 0; +} + +/*! \brief Checks the RX buffer for a received character, and stores it at the + * given memory location. + * + * \param usart Base address of the USART instance. + * \param c Pointer to the where the read character should be stored + * (must be at least short in order to accept 9-bit characters). + * + * \retval USART_SUCCESS The character was read successfully. + * \retval USART_RX_EMPTY The RX buffer was empty. + * \retval USART_RX_ERROR An error was deteceted. + */ +extern int usart_read_char(volatile avr32_usart_t *usart, int *c); + +/*! \brief Waits until a character is received, and returns it. + * + * \param usart Base address of the USART instance. + * + * \return The received character, or \ref USART_FAILURE upon error. + */ +extern int usart_getchar(volatile avr32_usart_t *usart); + +/*! \brief Writes one character string to the USART. + * + * \param usart Base address of the USART instance. + * \param string String to be written. + */ +extern void usart_write_line(volatile avr32_usart_t *usart, const char *string); + +/*! \brief Gets and echoes characters until end of line. + * + * \param usart Base address of the USART instance. + * + * \retval USART_SUCCESS Success. + * \retval USART_FAILURE Low-level error detected or ETX character received. + */ +extern int usart_get_echo_line(volatile avr32_usart_t *usart); + +#if defined(AVR32_USART_400_H_INCLUDED) || \ + defined(AVR32_USART_410_H_INCLUDED) || \ + defined(AVR32_USART_420_H_INCLUDED) || \ + defined(AVR32_USART_440_H_INCLUDED) || \ + defined(AVR32_USART_602_H_INCLUDED) + +/*! \brief Abort LIN transmission. + * + * \param usart Base address of the USART instance. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void usart_lin_abort(volatile avr32_usart_t *usart) +{ + usart->cr = AVR32_USART_LINABT_MASK; +} + +/*! \brief Tests if a LIN transfer has been completed. + * + * \param usart Base address of the USART instance. + * + * \return \c 1 if a LIN transfer has been completed, otherwise \c 0. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ int usart_lin_transfer_completed(volatile avr32_usart_t *usart) +{ + return (usart->csr & AVR32_USART_CSR_LINTC_MASK) != 0; +} + +#endif // USART rev. >= 4.0.0 + +//! @} + + +#endif // _USART_H_ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/DELAY/delay.c b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/DELAY/delay.c new file mode 100644 index 000000000..ad5ecca65 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/DELAY/delay.c @@ -0,0 +1,87 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ****************************************************************** + * + * \brief Management of the delays. + * + * This file manages the "delays", with or without an OS. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ***************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +//_____ I N C L U D E S ___________________________________________________ + +#include "delay.h" + + +//_____ M A C R O S ________________________________________________________ + + +//_____ D E F I N I T I O N S ______________________________________________ + +//! CPU frequency +#ifndef FREERTOS_USED +static unsigned long s_fcpu_hz; +#endif +#if (defined NUTOS_USED) +extern void NutSleep(unsigned long ms); +#endif + +//_____ D E C L A R A T I O N S ____________________________________________ + +void delay_init(unsigned long fcpu_hz) +{ +#ifndef FREERTOS_USED + s_fcpu_hz = fcpu_hz; +#endif +} + + +void delay_ms(unsigned long delay) +{ +#if (defined FREERTOS_USED) + vTaskDelay( (portTickType)TASK_DELAY_MS(delay) ); +#elif (defined NUTOS_USED) + NutSleep(delay); +#else + cpu_delay_ms(delay, s_fcpu_hz); +#endif +} diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/DELAY/delay.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/DELAY/delay.h new file mode 100644 index 000000000..28113267b --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/DELAY/delay.h @@ -0,0 +1,80 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief AT32UC3 delay management header file. + * + * This file contains definitions and services to handle "delays". + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 AT32UC3 devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _DELAY_H_ +#define _DELAY_H_ + +#include "compiler.h" +#ifdef FREERTOS_USED +# include "FreeRTOS.h" +# include "task.h" +#else +# include "cycle_counter.h" +#endif + + +/*! + * \brief Initialize the delay driver. + * + * \param fcpu_hz: CPU frequency in Hz. + */ +extern void delay_init(unsigned long fcpu_hz); + + +/*! + * \brief Waits during at least the specified delay (in millisecond) before returning. + * + * Note that in the case of FreeRTOS, the function will delay the current task for a given number of ms. + * + * \param delay: Number of millisecond to wait. + */ +extern void delay_ms(unsigned long delay); + + +#endif // _DELAY_H_ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/dhcp.c b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/dhcp.c new file mode 100644 index 000000000..8ef6c8426 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/dhcp.c @@ -0,0 +1,1724 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/** + * @file + * Dynamic Host Configuration Protocol client + * + */ + +/* + * + * Copyright (c) 2001-2004 Leon Woestenberg + * Copyright (c) 2001-2004 Axon Digital Design B.V., The Netherlands. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is a contribution to the lwIP TCP/IP stack. + * The Swedish Institute of Computer Science and Adam Dunkels + * are specifically granted permission to redistribute this + * source code. + * + * Author: Leon Woestenberg + * + * This is a DHCP client for the lwIP TCP/IP stack. It aims to conform + * with RFC 2131 and RFC 2132. + * + * TODO: + * - Proper parsing of DHCP messages exploiting file/sname field overloading. + * - Add JavaDoc style documentation (API, internals). + * - Support for interfaces other than Ethernet (SLIP, PPP, ...) + * + * Please coordinate changes and requests with Leon Woestenberg + * + * + * Integration with your code: + * + * In lwip/dhcp.h + * #define DHCP_COARSE_TIMER_SECS (recommended 60 which is a minute) + * #define DHCP_FINE_TIMER_MSECS (recommended 500 which equals TCP coarse timer) + * + * Then have your application call dhcp_coarse_tmr() and + * dhcp_fine_tmr() on the defined intervals. + * + * dhcp_start(struct netif *netif); + * starts a DHCP client instance which configures the interface by + * obtaining an IP address lease and maintaining it. + * + * Use dhcp_release(netif) to end the lease and use dhcp_stop(netif) + * to remove the DHCP client. + * + */ + +#include "lwip/opt.h" + +#if LWIP_DHCP /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/stats.h" +#include "lwip/mem.h" +#include "lwip/udp.h" +#include "lwip/ip_addr.h" +#include "lwip/netif.h" +#include "lwip/inet.h" +#include "lwip/sys.h" +#include "lwip/dhcp.h" +#include "lwip/autoip.h" +#include "lwip/dns.h" +#include "netif/etharp.h" + +#include + +/** Default for DHCP_GLOBAL_XID is 0xABCD0000 + * This can be changed by defining DHCP_GLOBAL_XID and DHCP_GLOBAL_XID_HEADER, e.g. + * #define DHCP_GLOBAL_XID_HEADER "stdlib.h" + * #define DHCP_GLOBAL_XID rand() + */ +#ifdef DHCP_GLOBAL_XID_HEADER +#include DHCP_GLOBAL_XID_HEADER /* include optional starting XID generation prototypes */ +#endif + +/** DHCP_OPTION_MAX_MSG_SIZE is set to the MTU + * MTU is checked to be big enough in dhcp_start */ +#define DHCP_MAX_MSG_LEN(netif) (netif->mtu) +#define DHCP_MAX_MSG_LEN_MIN_REQUIRED 576 +/** Minimum length for reply before packet is parsed */ +#define DHCP_MIN_REPLY_LEN 44 + +#define REBOOT_TRIES 2 + +/* DHCP client state machine functions */ +static void dhcp_handle_ack(struct netif *netif); +static void dhcp_handle_nak(struct netif *netif); +static void dhcp_handle_offer(struct netif *netif); + +static err_t dhcp_discover(struct netif *netif); +static err_t dhcp_select(struct netif *netif); +static void dhcp_bind(struct netif *netif); +#if DHCP_DOES_ARP_CHECK +static void dhcp_check(struct netif *netif); +static err_t dhcp_decline(struct netif *netif); +#endif /* DHCP_DOES_ARP_CHECK */ +static err_t dhcp_rebind(struct netif *netif); +static err_t dhcp_reboot(struct netif *netif); +static void dhcp_set_state(struct dhcp *dhcp, u8_t new_state); + +/* receive, unfold, parse and free incoming messages */ +static void dhcp_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p, struct ip_addr *addr, u16_t port); +static err_t dhcp_unfold_reply(struct dhcp *dhcp, struct pbuf *p); +static u8_t *dhcp_get_option_ptr(struct dhcp *dhcp, u8_t option_type); +static u8_t dhcp_get_option_byte(u8_t *ptr); +#if 0 +static u16_t dhcp_get_option_short(u8_t *ptr); +#endif +static u32_t dhcp_get_option_long(u8_t *ptr); +static void dhcp_free_reply(struct dhcp *dhcp); + +/* set the DHCP timers */ +static void dhcp_timeout(struct netif *netif); +static void dhcp_t1_timeout(struct netif *netif); +static void dhcp_t2_timeout(struct netif *netif); + +/* build outgoing messages */ +/* create a DHCP request, fill in common headers */ +static err_t dhcp_create_request(struct netif *netif); +/* free a DHCP request */ +static void dhcp_delete_request(struct netif *netif); +/* add a DHCP option (type, then length in bytes) */ +static void dhcp_option(struct dhcp *dhcp, u8_t option_type, u8_t option_len); +/* add option values */ +static void dhcp_option_byte(struct dhcp *dhcp, u8_t value); +static void dhcp_option_short(struct dhcp *dhcp, u16_t value); +static void dhcp_option_long(struct dhcp *dhcp, u32_t value); +/* always add the DHCP options trailer to end and pad */ +static void dhcp_option_trailer(struct dhcp *dhcp); + +/** + * Back-off the DHCP client (because of a received NAK response). + * + * Back-off the DHCP client because of a received NAK. Receiving a + * NAK means the client asked for something non-sensible, for + * example when it tries to renew a lease obtained on another network. + * + * We clear any existing set IP address and restart DHCP negotiation + * afresh (as per RFC2131 3.2.3). + * + * @param netif the netif under DHCP control + */ +static void +dhcp_handle_nak(struct netif *netif) +{ + struct dhcp *dhcp = netif->dhcp; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_handle_nak(netif=%p) %c%c%"U16_F"\n", + (void*)netif, netif->name[0], netif->name[1], (u16_t)netif->num)); + /* Set the interface down since the address must no longer be used, as per RFC2131 */ + netif_set_down(netif); + /* remove IP address from interface */ + netif_set_ipaddr(netif, IP_ADDR_ANY); + netif_set_gw(netif, IP_ADDR_ANY); + netif_set_netmask(netif, IP_ADDR_ANY); + /* Change to a defined state */ + dhcp_set_state(dhcp, DHCP_BACKING_OFF); + /* We can immediately restart discovery */ + dhcp_discover(netif); +} + +#if DHCP_DOES_ARP_CHECK +/** + * Checks if the offered IP address is already in use. + * + * It does so by sending an ARP request for the offered address and + * entering CHECKING state. If no ARP reply is received within a small + * interval, the address is assumed to be free for use by us. + * + * @param netif the netif under DHCP control + */ +static void +dhcp_check(struct netif *netif) +{ + struct dhcp *dhcp = netif->dhcp; + err_t result; + u16_t msecs; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_check(netif=%p) %c%c\n", (void *)netif, (s16_t)netif->name[0], + (s16_t)netif->name[1])); + dhcp_set_state(dhcp, DHCP_CHECKING); + /* create an ARP query for the offered IP address, expecting that no host + responds, as the IP address should not be in use. */ + result = etharp_query(netif, &dhcp->offered_ip_addr, NULL); + if (result != ERR_OK) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, ("dhcp_check: could not perform ARP query\n")); + } + dhcp->tries++; + msecs = 500; + dhcp->request_timeout = (msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_check(): set request timeout %"U16_F" msecs\n", msecs)); +} +#endif /* DHCP_DOES_ARP_CHECK */ + +/** + * Remember the configuration offered by a DHCP server. + * + * @param netif the netif under DHCP control + */ +static void +dhcp_handle_offer(struct netif *netif) +{ + struct dhcp *dhcp = netif->dhcp; + /* obtain the server address */ + u8_t *option_ptr = dhcp_get_option_ptr(dhcp, DHCP_OPTION_SERVER_ID); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_handle_offer(netif=%p) %c%c%"U16_F"\n", + (void*)netif, netif->name[0], netif->name[1], (u16_t)netif->num)); + if (option_ptr != NULL) { + dhcp->server_ip_addr.addr = htonl(dhcp_get_option_long(&option_ptr[2])); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_handle_offer(): server 0x%08"X32_F"\n", dhcp->server_ip_addr.addr)); + /* remember offered address */ + ip_addr_set(&dhcp->offered_ip_addr, (struct ip_addr *)&dhcp->msg_in->yiaddr); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_handle_offer(): offer for 0x%08"X32_F"\n", dhcp->offered_ip_addr.addr)); + + dhcp_select(netif); + } +} + +/** + * Select a DHCP server offer out of all offers. + * + * Simply select the first offer received. + * + * @param netif the netif under DHCP control + * @return lwIP specific error (see error.h) + */ +static err_t +dhcp_select(struct netif *netif) +{ + struct dhcp *dhcp = netif->dhcp; + err_t result; + u16_t msecs; +#if LWIP_NETIF_HOSTNAME + const char *p; +#endif /* LWIP_NETIF_HOSTNAME */ + + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_select(netif=%p) %c%c%"U16_F"\n", (void*)netif, netif->name[0], netif->name[1], (u16_t)netif->num)); + dhcp_set_state(dhcp, DHCP_REQUESTING); + + /* create and initialize the DHCP message header */ + result = dhcp_create_request(netif); + if (result == ERR_OK) { + dhcp_option(dhcp, DHCP_OPTION_MESSAGE_TYPE, DHCP_OPTION_MESSAGE_TYPE_LEN); + dhcp_option_byte(dhcp, DHCP_REQUEST); + + dhcp_option(dhcp, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); + dhcp_option_short(dhcp, DHCP_MAX_MSG_LEN(netif)); + + /* MUST request the offered IP address */ + dhcp_option(dhcp, DHCP_OPTION_REQUESTED_IP, 4); + dhcp_option_long(dhcp, ntohl(dhcp->offered_ip_addr.addr)); + + dhcp_option(dhcp, DHCP_OPTION_SERVER_ID, 4); + dhcp_option_long(dhcp, ntohl(dhcp->server_ip_addr.addr)); + + dhcp_option(dhcp, DHCP_OPTION_PARAMETER_REQUEST_LIST, 4/*num options*/); + dhcp_option_byte(dhcp, DHCP_OPTION_SUBNET_MASK); + dhcp_option_byte(dhcp, DHCP_OPTION_ROUTER); + dhcp_option_byte(dhcp, DHCP_OPTION_BROADCAST); + dhcp_option_byte(dhcp, DHCP_OPTION_DNS_SERVER); + +#if LWIP_NETIF_HOSTNAME + p = (const char*)netif->hostname; + if (p != NULL) { + dhcp_option(dhcp, DHCP_OPTION_HOSTNAME, strlen(p)); + while (*p) { + dhcp_option_byte(dhcp, *p++); + } + } +#endif /* LWIP_NETIF_HOSTNAME */ + + dhcp_option_trailer(dhcp); + /* shrink the pbuf to the actual content length */ + pbuf_realloc(dhcp->p_out, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + dhcp->options_out_len); + + /* send broadcast to any DHCP server */ + udp_sendto_if(dhcp->pcb, dhcp->p_out, IP_ADDR_BROADCAST, DHCP_SERVER_PORT, netif); + dhcp_delete_request(netif); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_select: REQUESTING\n")); + } else { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, ("dhcp_select: could not allocate DHCP request\n")); + } + dhcp->tries++; + msecs = (dhcp->tries < 6 ? 1 << dhcp->tries : 60) * 1000; + dhcp->request_timeout = (msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_select(): set request timeout %"U16_F" msecs\n", msecs)); + return result; +} + +/** + * The DHCP timer that checks for lease renewal/rebind timeouts. + * + */ +void +dhcp_coarse_tmr() +{ + struct netif *netif = netif_list; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_coarse_tmr()\n")); + /* iterate through all network interfaces */ + while (netif != NULL) { + /* only act on DHCP configured interfaces */ + if (netif->dhcp != NULL) { + /* timer is active (non zero), and triggers (zeroes) now? */ + if (netif->dhcp->t2_timeout-- == 1) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_coarse_tmr(): t2 timeout\n")); + /* this clients' rebind timeout triggered */ + dhcp_t2_timeout(netif); + /* timer is active (non zero), and triggers (zeroes) now */ + } else if (netif->dhcp->t1_timeout-- == 1) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_coarse_tmr(): t1 timeout\n")); + /* this clients' renewal timeout triggered */ + dhcp_t1_timeout(netif); + } + } + /* proceed to next netif */ + netif = netif->next; + } +} + +/** + * DHCP transaction timeout handling + * + * A DHCP server is expected to respond within a short period of time. + * This timer checks whether an outstanding DHCP request is timed out. + * + */ +void +dhcp_fine_tmr() +{ + struct netif *netif = netif_list; + /* loop through netif's */ + while (netif != NULL) { + /* only act on DHCP configured interfaces */ + if (netif->dhcp != NULL) { + /* timer is active (non zero), and is about to trigger now */ + if (netif->dhcp->request_timeout > 1) { + netif->dhcp->request_timeout--; + } + else if (netif->dhcp->request_timeout == 1) { + netif->dhcp->request_timeout--; + /* { netif->dhcp->request_timeout == 0 } */ + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_fine_tmr(): request timeout\n")); + /* this clients' request timeout triggered */ + dhcp_timeout(netif); + } + } + /* proceed to next network interface */ + netif = netif->next; + } +} + +/** + * A DHCP negotiation transaction, or ARP request, has timed out. + * + * The timer that was started with the DHCP or ARP request has + * timed out, indicating no response was received in time. + * + * @param netif the netif under DHCP control + */ +static void +dhcp_timeout(struct netif *netif) +{ + struct dhcp *dhcp = netif->dhcp; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_timeout()\n")); + /* back-off period has passed, or server selection timed out */ + if ((dhcp->state == DHCP_BACKING_OFF) || (dhcp->state == DHCP_SELECTING)) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_timeout(): restarting discovery\n")); + dhcp_discover(netif); + /* receiving the requested lease timed out */ + } else if (dhcp->state == DHCP_REQUESTING) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_timeout(): REQUESTING, DHCP request timed out\n")); + if (dhcp->tries <= 5) { + dhcp_select(netif); + } else { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_timeout(): REQUESTING, releasing, restarting\n")); + dhcp_release(netif); + dhcp_discover(netif); + } +#if DHCP_DOES_ARP_CHECK + /* received no ARP reply for the offered address (which is good) */ + } else if (dhcp->state == DHCP_CHECKING) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_timeout(): CHECKING, ARP request timed out\n")); + if (dhcp->tries <= 1) { + dhcp_check(netif); + /* no ARP replies on the offered address, + looks like the IP address is indeed free */ + } else { + /* bind the interface to the offered address */ + dhcp_bind(netif); + } +#endif /* DHCP_DOES_ARP_CHECK */ + } + /* did not get response to renew request? */ + else if (dhcp->state == DHCP_RENEWING) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_timeout(): RENEWING, DHCP request timed out\n")); + /* just retry renewal */ + /* note that the rebind timer will eventually time-out if renew does not work */ + dhcp_renew(netif); + /* did not get response to rebind request? */ + } else if (dhcp->state == DHCP_REBINDING) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_timeout(): REBINDING, DHCP request timed out\n")); + if (dhcp->tries <= 8) { + dhcp_rebind(netif); + } else { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_timeout(): RELEASING, DISCOVERING\n")); + dhcp_release(netif); + dhcp_discover(netif); + } + } else if (dhcp->state == DHCP_REBOOTING) { + if (dhcp->tries < REBOOT_TRIES) { + dhcp_reboot(netif); + } else { + dhcp_discover(netif); + } + } +} + +/** + * The renewal period has timed out. + * + * @param netif the netif under DHCP control + */ +static void +dhcp_t1_timeout(struct netif *netif) +{ + struct dhcp *dhcp = netif->dhcp; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_t1_timeout()\n")); + if ((dhcp->state == DHCP_REQUESTING) || (dhcp->state == DHCP_BOUND) || (dhcp->state == DHCP_RENEWING)) { + /* just retry to renew - note that the rebind timer (t2) will + * eventually time-out if renew tries fail. */ + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_t1_timeout(): must renew\n")); + dhcp_renew(netif); + } +} + +/** + * The rebind period has timed out. + * + * @param netif the netif under DHCP control + */ +static void +dhcp_t2_timeout(struct netif *netif) +{ + struct dhcp *dhcp = netif->dhcp; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_t2_timeout()\n")); + if ((dhcp->state == DHCP_REQUESTING) || (dhcp->state == DHCP_BOUND) || (dhcp->state == DHCP_RENEWING)) { + /* just retry to rebind */ + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_t2_timeout(): must rebind\n")); + dhcp_rebind(netif); + } +} + +/** + * Handle a DHCP ACK packet + * + * @param netif the netif under DHCP control + */ +static void +dhcp_handle_ack(struct netif *netif) +{ + struct dhcp *dhcp = netif->dhcp; + u8_t *option_ptr; + /* clear options we might not get from the ACK */ + dhcp->offered_sn_mask.addr = 0; + dhcp->offered_gw_addr.addr = 0; + dhcp->offered_bc_addr.addr = 0; + + /* lease time given? */ + option_ptr = dhcp_get_option_ptr(dhcp, DHCP_OPTION_LEASE_TIME); + if (option_ptr != NULL) { + /* remember offered lease time */ + dhcp->offered_t0_lease = dhcp_get_option_long(option_ptr + 2); + } + /* renewal period given? */ + option_ptr = dhcp_get_option_ptr(dhcp, DHCP_OPTION_T1); + if (option_ptr != NULL) { + /* remember given renewal period */ + dhcp->offered_t1_renew = dhcp_get_option_long(option_ptr + 2); + } else { + /* calculate safe periods for renewal */ + dhcp->offered_t1_renew = dhcp->offered_t0_lease / 2; + } + + /* renewal period given? */ + option_ptr = dhcp_get_option_ptr(dhcp, DHCP_OPTION_T2); + if (option_ptr != NULL) { + /* remember given rebind period */ + dhcp->offered_t2_rebind = dhcp_get_option_long(option_ptr + 2); + } else { + /* calculate safe periods for rebinding */ + dhcp->offered_t2_rebind = dhcp->offered_t0_lease; + } + + /* (y)our internet address */ + ip_addr_set(&dhcp->offered_ip_addr, &dhcp->msg_in->yiaddr); + +/** + * Patch #1308 + * TODO: we must check if the file field is not overloaded by DHCP options! + */ +#if 0 + /* boot server address */ + ip_addr_set(&dhcp->offered_si_addr, &dhcp->msg_in->siaddr); + /* boot file name */ + if (dhcp->msg_in->file[0]) { + dhcp->boot_file_name = mem_malloc(strlen(dhcp->msg_in->file) + 1); + strcpy(dhcp->boot_file_name, dhcp->msg_in->file); + } +#endif + + /* subnet mask */ + option_ptr = dhcp_get_option_ptr(dhcp, DHCP_OPTION_SUBNET_MASK); + /* subnet mask given? */ + if (option_ptr != NULL) { + dhcp->offered_sn_mask.addr = htonl(dhcp_get_option_long(&option_ptr[2])); + } + + /* gateway router */ + option_ptr = dhcp_get_option_ptr(dhcp, DHCP_OPTION_ROUTER); + if (option_ptr != NULL) { + dhcp->offered_gw_addr.addr = htonl(dhcp_get_option_long(&option_ptr[2])); + } + + /* broadcast address */ + option_ptr = dhcp_get_option_ptr(dhcp, DHCP_OPTION_BROADCAST); + if (option_ptr != NULL) { + dhcp->offered_bc_addr.addr = htonl(dhcp_get_option_long(&option_ptr[2])); + } + + /* DNS servers */ + option_ptr = dhcp_get_option_ptr(dhcp, DHCP_OPTION_DNS_SERVER); + if (option_ptr != NULL) { + u8_t n; + dhcp->dns_count = dhcp_get_option_byte(&option_ptr[1]) / (u32_t)sizeof(struct ip_addr); + /* limit to at most DHCP_MAX_DNS DNS servers */ + if (dhcp->dns_count > DHCP_MAX_DNS) + dhcp->dns_count = DHCP_MAX_DNS; + for (n = 0; n < dhcp->dns_count; n++) { + dhcp->offered_dns_addr[n].addr = htonl(dhcp_get_option_long(&option_ptr[2 + n * 4])); +#if LWIP_DNS + dns_setserver( n, (struct ip_addr *)(&(dhcp->offered_dns_addr[n].addr))); +#endif /* LWIP_DNS */ + } +#if LWIP_DNS + dns_setserver( n, (struct ip_addr *)(&ip_addr_any)); +#endif /* LWIP_DNS */ + } +} + +/** + * Start DHCP negotiation for a network interface. + * + * If no DHCP client instance was attached to this interface, + * a new client is created first. If a DHCP client instance + * was already present, it restarts negotiation. + * + * @param netif The lwIP network interface + * @return lwIP error code + * - ERR_OK - No error + * - ERR_MEM - Out of memory + */ +err_t +dhcp_start(struct netif *netif) +{ + struct dhcp *dhcp; + err_t result = ERR_OK; + + LWIP_ERROR("netif != NULL", (netif != NULL), return ERR_ARG;); + dhcp = netif->dhcp; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_start(netif=%p) %c%c%"U16_F"\n", (void*)netif, netif->name[0], netif->name[1], (u16_t)netif->num)); + /* Remove the flag that says this netif is handled by DHCP, + it is set when we succeeded starting. */ + netif->flags &= ~NETIF_FLAG_DHCP; + + /* check MTU of the netif */ + if (netif->mtu < DHCP_MAX_MSG_LEN_MIN_REQUIRED) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_start(): Cannot use this netif with DHCP: MTU is too small\n")); + return ERR_MEM; + } + + /* no DHCP client attached yet? */ + if (dhcp == NULL) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_start(): starting new DHCP client\n")); + dhcp = mem_malloc(sizeof(struct dhcp)); + if (dhcp == NULL) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_start(): could not allocate dhcp\n")); + return ERR_MEM; + } + /* store this dhcp client in the netif */ + netif->dhcp = dhcp; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_start(): allocated dhcp")); + /* already has DHCP client attached */ + } else { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_start(): restarting DHCP configuration\n")); + if (dhcp->pcb != NULL) { + udp_remove(dhcp->pcb); + } + LWIP_ASSERT("pbuf p_out wasn't freed", dhcp->p_out == NULL); + LWIP_ASSERT("reply wasn't freed", dhcp->msg_in == NULL && + dhcp->options_in == NULL && dhcp->options_in_len == 0); + } + + /* clear data structure */ + memset(dhcp, 0, sizeof(struct dhcp)); + /* allocate UDP PCB */ + dhcp->pcb = udp_new(); + if (dhcp->pcb == NULL) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_start(): could not obtain pcb\n")); + mem_free((void *)dhcp); + netif->dhcp = dhcp = NULL; + return ERR_MEM; + } +#if IP_SOF_BROADCAST + dhcp->pcb->so_options|=SOF_BROADCAST; +#endif /* IP_SOF_BROADCAST */ + /* set up local and remote port for the pcb */ + udp_bind(dhcp->pcb, IP_ADDR_ANY, DHCP_CLIENT_PORT); + udp_connect(dhcp->pcb, IP_ADDR_ANY, DHCP_SERVER_PORT); + /* set up the recv callback and argument */ + udp_recv(dhcp->pcb, dhcp_recv, netif); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_start(): starting DHCP configuration\n")); + /* (re)start the DHCP negotiation */ + result = dhcp_discover(netif); + if (result != ERR_OK) { + /* free resources allocated above */ + dhcp_stop(netif); + return ERR_MEM; + } + /* Set the flag that says this netif is handled by DHCP. */ + netif->flags |= NETIF_FLAG_DHCP; + return result; +} + +/** + * Inform a DHCP server of our manual configuration. + * + * This informs DHCP servers of our fixed IP address configuration + * by sending an INFORM message. It does not involve DHCP address + * configuration, it is just here to be nice to the network. + * + * @param netif The lwIP network interface + */ +void +dhcp_inform(struct netif *netif) +{ + struct dhcp *dhcp, *old_dhcp; + err_t result = ERR_OK; + dhcp = mem_malloc(sizeof(struct dhcp)); + if (dhcp == NULL) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_inform(): could not allocate dhcp\n")); + return; + } + memset(dhcp, 0, sizeof(struct dhcp)); + + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_inform(): allocated dhcp\n")); + dhcp->pcb = udp_new(); + if (dhcp->pcb == NULL) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_inform(): could not obtain pcb")); + goto free_dhcp_and_return; + } + old_dhcp = netif->dhcp; + netif->dhcp = dhcp; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_inform(): created new udp pcb\n")); + /* create and initialize the DHCP message header */ + result = dhcp_create_request(netif); + if (result == ERR_OK) { + + dhcp_option(dhcp, DHCP_OPTION_MESSAGE_TYPE, DHCP_OPTION_MESSAGE_TYPE_LEN); + dhcp_option_byte(dhcp, DHCP_INFORM); + + dhcp_option(dhcp, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); + dhcp_option_short(dhcp, DHCP_MAX_MSG_LEN(netif)); + + dhcp_option_trailer(dhcp); + + pbuf_realloc(dhcp->p_out, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + dhcp->options_out_len); + +#if IP_SOF_BROADCAST + dhcp->pcb->so_options|=SOF_BROADCAST; +#endif /* IP_SOF_BROADCAST */ + udp_bind(dhcp->pcb, IP_ADDR_ANY, DHCP_CLIENT_PORT); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_inform: INFORMING\n")); + udp_sendto_if(dhcp->pcb, dhcp->p_out, IP_ADDR_BROADCAST, DHCP_SERVER_PORT, netif); + dhcp_delete_request(netif); + } else { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_inform: could not allocate DHCP request\n")); + } + + udp_remove(dhcp->pcb); + dhcp->pcb = NULL; + netif->dhcp = old_dhcp; +free_dhcp_and_return: + mem_free((void *)dhcp); +} + +/** Handle a possible change in the network configuration. + * + * This enters the REBOOTING state to verify that the currently bound + * address is still valid. + */ +void +dhcp_network_changed(struct netif *netif) +{ + struct dhcp *dhcp = netif->dhcp; + if (!dhcp) + return; + switch (dhcp->state) { + case DHCP_REBINDING: + case DHCP_RENEWING: + case DHCP_BOUND: + case DHCP_REBOOTING: + netif_set_down(netif); + dhcp->tries = 0; + dhcp_reboot(netif); + break; + case DHCP_OFF: + /* stay off */ + break; + default: + dhcp->tries = 0; + dhcp_discover(netif); + break; + } +} + +#if DHCP_DOES_ARP_CHECK +/** + * Match an ARP reply with the offered IP address. + * + * @param netif the network interface on which the reply was received + * @param addr The IP address we received a reply from + */ +void dhcp_arp_reply(struct netif *netif, struct ip_addr *addr) +{ + LWIP_ERROR("netif != NULL", (netif != NULL), return;); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_arp_reply()\n")); + /* is a DHCP client doing an ARP check? */ + if ((netif->dhcp != NULL) && (netif->dhcp->state == DHCP_CHECKING)) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_arp_reply(): CHECKING, arp reply for 0x%08"X32_F"\n", addr->addr)); + /* did a host respond with the address we + were offered by the DHCP server? */ + if (ip_addr_cmp(addr, &netif->dhcp->offered_ip_addr)) { + /* we will not accept the offered address */ + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE | LWIP_DBG_LEVEL_WARNING, + ("dhcp_arp_reply(): arp reply matched with offered address, declining\n")); + dhcp_decline(netif); + } + } +} + +/** + * Decline an offered lease. + * + * Tell the DHCP server we do not accept the offered address. + * One reason to decline the lease is when we find out the address + * is already in use by another host (through ARP). + * + * @param netif the netif under DHCP control + */ +static err_t +dhcp_decline(struct netif *netif) +{ + struct dhcp *dhcp = netif->dhcp; + err_t result = ERR_OK; + u16_t msecs; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_decline()\n")); + dhcp_set_state(dhcp, DHCP_BACKING_OFF); + /* create and initialize the DHCP message header */ + result = dhcp_create_request(netif); + if (result == ERR_OK) { + dhcp_option(dhcp, DHCP_OPTION_MESSAGE_TYPE, DHCP_OPTION_MESSAGE_TYPE_LEN); + dhcp_option_byte(dhcp, DHCP_DECLINE); + + dhcp_option(dhcp, DHCP_OPTION_REQUESTED_IP, 4); + dhcp_option_long(dhcp, ntohl(dhcp->offered_ip_addr.addr)); + + dhcp_option_trailer(dhcp); + /* resize pbuf to reflect true size of options */ + pbuf_realloc(dhcp->p_out, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + dhcp->options_out_len); + + /* per section 4.4.4, broadcast DECLINE messages */ + udp_sendto_if(dhcp->pcb, dhcp->p_out, IP_ADDR_BROADCAST, DHCP_SERVER_PORT, netif); + dhcp_delete_request(netif); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_decline: BACKING OFF\n")); + } else { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, + ("dhcp_decline: could not allocate DHCP request\n")); + } + dhcp->tries++; + msecs = 10*1000; + dhcp->request_timeout = (msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_decline(): set request timeout %"U16_F" msecs\n", msecs)); + return result; +} +#endif + + +/** + * Start the DHCP process, discover a DHCP server. + * + * @param netif the netif under DHCP control + */ +static err_t +dhcp_discover(struct netif *netif) +{ + struct dhcp *dhcp = netif->dhcp; + err_t result = ERR_OK; + u16_t msecs; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_discover()\n")); + ip_addr_set(&dhcp->offered_ip_addr, IP_ADDR_ANY); + dhcp_set_state(dhcp, DHCP_SELECTING); + /* create and initialize the DHCP message header */ + result = dhcp_create_request(netif); + if (result == ERR_OK) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_discover: making request\n")); + dhcp_option(dhcp, DHCP_OPTION_MESSAGE_TYPE, DHCP_OPTION_MESSAGE_TYPE_LEN); + dhcp_option_byte(dhcp, DHCP_DISCOVER); + + dhcp_option(dhcp, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); + dhcp_option_short(dhcp, DHCP_MAX_MSG_LEN(netif)); + + dhcp_option(dhcp, DHCP_OPTION_PARAMETER_REQUEST_LIST, 4/*num options*/); + dhcp_option_byte(dhcp, DHCP_OPTION_SUBNET_MASK); + dhcp_option_byte(dhcp, DHCP_OPTION_ROUTER); + dhcp_option_byte(dhcp, DHCP_OPTION_BROADCAST); + dhcp_option_byte(dhcp, DHCP_OPTION_DNS_SERVER); + + dhcp_option_trailer(dhcp); + + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_discover: realloc()ing\n")); + pbuf_realloc(dhcp->p_out, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + dhcp->options_out_len); + + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_discover: sendto(DISCOVER, IP_ADDR_BROADCAST, DHCP_SERVER_PORT)\n")); + udp_sendto_if(dhcp->pcb, dhcp->p_out, IP_ADDR_BROADCAST, DHCP_SERVER_PORT, netif); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_discover: deleting()ing\n")); + dhcp_delete_request(netif); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_discover: SELECTING\n")); + } else { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_discover: could not allocate DHCP request\n")); + } + dhcp->tries++; +#if LWIP_DHCP_AUTOIP_COOP + if(dhcp->tries >= LWIP_DHCP_AUTOIP_COOP_TRIES && dhcp->autoip_coop_state == DHCP_AUTOIP_COOP_STATE_OFF) { + dhcp->autoip_coop_state = DHCP_AUTOIP_COOP_STATE_ON; + autoip_start(netif); + } +#endif /* LWIP_DHCP_AUTOIP_COOP */ + msecs = (dhcp->tries < 6 ? 1 << dhcp->tries : 60) * 1000; + dhcp->request_timeout = (msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_discover(): set request timeout %"U16_F" msecs\n", msecs)); + return result; +} + + +/** + * Bind the interface to the offered IP address. + * + * @param netif network interface to bind to the offered address + */ +static void +dhcp_bind(struct netif *netif) +{ + u32_t timeout; + struct dhcp *dhcp; + struct ip_addr sn_mask, gw_addr; + LWIP_ERROR("dhcp_bind: netif != NULL", (netif != NULL), return;); + dhcp = netif->dhcp; + LWIP_ERROR("dhcp_bind: dhcp != NULL", (dhcp != NULL), return;); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_bind(netif=%p) %c%c%"U16_F"\n", (void*)netif, netif->name[0], netif->name[1], (u16_t)netif->num)); + + /* temporary DHCP lease? */ + if (dhcp->offered_t1_renew != 0xffffffffUL) { + /* set renewal period timer */ + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_bind(): t1 renewal timer %"U32_F" secs\n", dhcp->offered_t1_renew)); + timeout = (dhcp->offered_t1_renew + DHCP_COARSE_TIMER_SECS / 2) / DHCP_COARSE_TIMER_SECS; + if(timeout > 0xffff) { + timeout = 0xffff; + } + dhcp->t1_timeout = (u16_t)timeout; + if (dhcp->t1_timeout == 0) { + dhcp->t1_timeout = 1; + } + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_bind(): set request timeout %"U32_F" msecs\n", dhcp->offered_t1_renew*1000)); + } + /* set renewal period timer */ + if (dhcp->offered_t2_rebind != 0xffffffffUL) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_bind(): t2 rebind timer %"U32_F" secs\n", dhcp->offered_t2_rebind)); + timeout = (dhcp->offered_t2_rebind + DHCP_COARSE_TIMER_SECS / 2) / DHCP_COARSE_TIMER_SECS; + if(timeout > 0xffff) { + timeout = 0xffff; + } + dhcp->t2_timeout = (u16_t)timeout; + if (dhcp->t2_timeout == 0) { + dhcp->t2_timeout = 1; + } + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_bind(): set request timeout %"U32_F" msecs\n", dhcp->offered_t2_rebind*1000)); + } + /* copy offered network mask */ + ip_addr_set(&sn_mask, &dhcp->offered_sn_mask); + + /* subnet mask not given? */ + /* TODO: this is not a valid check. what if the network mask is 0? */ + if (sn_mask.addr == 0) { + /* choose a safe subnet mask given the network class */ + u8_t first_octet = ip4_addr1(&sn_mask); + if (first_octet <= 127) { + sn_mask.addr = htonl(0xff000000); + } else if (first_octet >= 192) { + sn_mask.addr = htonl(0xffffff00); + } else { + sn_mask.addr = htonl(0xffff0000); + } + } + + ip_addr_set(&gw_addr, &dhcp->offered_gw_addr); + /* gateway address not given? */ + if (gw_addr.addr == 0) { + /* copy network address */ + gw_addr.addr = (dhcp->offered_ip_addr.addr & sn_mask.addr); + /* use first host address on network as gateway */ + gw_addr.addr |= htonl(0x00000001); + } + +#if LWIP_DHCP_AUTOIP_COOP + if(dhcp->autoip_coop_state == DHCP_AUTOIP_COOP_STATE_ON) { + autoip_stop(netif); + dhcp->autoip_coop_state = DHCP_AUTOIP_COOP_STATE_OFF; + } +#endif /* LWIP_DHCP_AUTOIP_COOP */ + + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_bind(): IP: 0x%08"X32_F"\n", dhcp->offered_ip_addr.addr)); + netif_set_ipaddr(netif, &dhcp->offered_ip_addr); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_bind(): SN: 0x%08"X32_F"\n", sn_mask.addr)); + netif_set_netmask(netif, &sn_mask); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_bind(): GW: 0x%08"X32_F"\n", gw_addr.addr)); + netif_set_gw(netif, &gw_addr); + /* bring the interface up */ + netif_set_up(netif); + /* netif is now bound to DHCP leased address */ + dhcp_set_state(dhcp, DHCP_BOUND); +} + +/** + * Renew an existing DHCP lease at the involved DHCP server. + * + * @param netif network interface which must renew its lease + */ +err_t +dhcp_renew(struct netif *netif) +{ + struct dhcp *dhcp = netif->dhcp; + err_t result; + u16_t msecs; +#if LWIP_NETIF_HOSTNAME + const char *p; +#endif /* LWIP_NETIF_HOSTNAME */ + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_renew()\n")); + dhcp_set_state(dhcp, DHCP_RENEWING); + + /* create and initialize the DHCP message header */ + result = dhcp_create_request(netif); + if (result == ERR_OK) { + + dhcp_option(dhcp, DHCP_OPTION_MESSAGE_TYPE, DHCP_OPTION_MESSAGE_TYPE_LEN); + dhcp_option_byte(dhcp, DHCP_REQUEST); + + dhcp_option(dhcp, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); + dhcp_option_short(dhcp, DHCP_MAX_MSG_LEN(netif)); + +#if LWIP_NETIF_HOSTNAME + p = (const char*)netif->hostname; + if (p != NULL) { + dhcp_option(dhcp, DHCP_OPTION_HOSTNAME, strlen(p)); + while (*p) { + dhcp_option_byte(dhcp, *p++); + } + } +#endif /* LWIP_NETIF_HOSTNAME */ + +#if 0 + dhcp_option(dhcp, DHCP_OPTION_REQUESTED_IP, 4); + dhcp_option_long(dhcp, ntohl(dhcp->offered_ip_addr.addr)); +#endif + +#if 0 + dhcp_option(dhcp, DHCP_OPTION_SERVER_ID, 4); + dhcp_option_long(dhcp, ntohl(dhcp->server_ip_addr.addr)); +#endif + /* append DHCP message trailer */ + dhcp_option_trailer(dhcp); + + pbuf_realloc(dhcp->p_out, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + dhcp->options_out_len); + + udp_sendto_if(dhcp->pcb, dhcp->p_out, &dhcp->server_ip_addr, DHCP_SERVER_PORT, netif); + dhcp_delete_request(netif); + + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_renew: RENEWING\n")); + } else { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_renew: could not allocate DHCP request\n")); + } + dhcp->tries++; + /* back-off on retries, but to a maximum of 20 seconds */ + msecs = dhcp->tries < 10 ? dhcp->tries * 2000 : 20 * 1000; + dhcp->request_timeout = (msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_renew(): set request timeout %"U16_F" msecs\n", msecs)); + return result; +} + +/** + * Rebind with a DHCP server for an existing DHCP lease. + * + * @param netif network interface which must rebind with a DHCP server + */ +static err_t +dhcp_rebind(struct netif *netif) +{ + struct dhcp *dhcp = netif->dhcp; + err_t result; + u16_t msecs; +#if LWIP_NETIF_HOSTNAME + const char *p; +#endif /* LWIP_NETIF_HOSTNAME */ + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_rebind()\n")); + dhcp_set_state(dhcp, DHCP_REBINDING); + + /* create and initialize the DHCP message header */ + result = dhcp_create_request(netif); + if (result == ERR_OK) { + + dhcp_option(dhcp, DHCP_OPTION_MESSAGE_TYPE, DHCP_OPTION_MESSAGE_TYPE_LEN); + dhcp_option_byte(dhcp, DHCP_REQUEST); + + dhcp_option(dhcp, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); + dhcp_option_short(dhcp, DHCP_MAX_MSG_LEN(netif)); + +#if LWIP_NETIF_HOSTNAME + p = (const char*)netif->hostname; + if (p != NULL) { + dhcp_option(dhcp, DHCP_OPTION_HOSTNAME, strlen(p)); + while (*p) { + dhcp_option_byte(dhcp, *p++); + } + } +#endif /* LWIP_NETIF_HOSTNAME */ + +#if 0 + dhcp_option(dhcp, DHCP_OPTION_REQUESTED_IP, 4); + dhcp_option_long(dhcp, ntohl(dhcp->offered_ip_addr.addr)); + + dhcp_option(dhcp, DHCP_OPTION_SERVER_ID, 4); + dhcp_option_long(dhcp, ntohl(dhcp->server_ip_addr.addr)); +#endif + + dhcp_option_trailer(dhcp); + + pbuf_realloc(dhcp->p_out, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + dhcp->options_out_len); + + /* broadcast to server */ + udp_sendto_if(dhcp->pcb, dhcp->p_out, IP_ADDR_BROADCAST, DHCP_SERVER_PORT, netif); + dhcp_delete_request(netif); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_rebind: REBINDING\n")); + } else { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_rebind: could not allocate DHCP request\n")); + } + dhcp->tries++; + msecs = dhcp->tries < 10 ? dhcp->tries * 1000 : 10 * 1000; + dhcp->request_timeout = (msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_rebind(): set request timeout %"U16_F" msecs\n", msecs)); + return result; +} + +/** + * Enter REBOOTING state to verify an existing lease + * + * @param netif network interface which must reboot + */ +static err_t +dhcp_reboot(struct netif *netif) +{ + struct dhcp *dhcp = netif->dhcp; + err_t result; + u16_t msecs; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_reboot()\n")); + dhcp_set_state(dhcp, DHCP_REBOOTING); + + /* create and initialize the DHCP message header */ + result = dhcp_create_request(netif); + if (result == ERR_OK) { + + dhcp_option(dhcp, DHCP_OPTION_MESSAGE_TYPE, DHCP_OPTION_MESSAGE_TYPE_LEN); + dhcp_option_byte(dhcp, DHCP_REQUEST); + + dhcp_option(dhcp, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); + dhcp_option_short(dhcp, 576); + + dhcp_option(dhcp, DHCP_OPTION_REQUESTED_IP, 4); + dhcp_option_long(dhcp, ntohl(dhcp->offered_ip_addr.addr)); + + dhcp_option_trailer(dhcp); + + pbuf_realloc(dhcp->p_out, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + dhcp->options_out_len); + + /* broadcast to server */ + udp_sendto_if(dhcp->pcb, dhcp->p_out, IP_ADDR_BROADCAST, DHCP_SERVER_PORT, netif); + dhcp_delete_request(netif); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_reboot: REBOOTING\n")); + } else { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_reboot: could not allocate DHCP request\n")); + } + dhcp->tries++; + msecs = dhcp->tries < 10 ? dhcp->tries * 1000 : 10 * 1000; + dhcp->request_timeout = (msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_reboot(): set request timeout %"U16_F" msecs\n", msecs)); + return result; +} + + +/** + * Release a DHCP lease. + * + * @param netif network interface which must release its lease + */ +err_t +dhcp_release(struct netif *netif) +{ + struct dhcp *dhcp = netif->dhcp; + err_t result; + u16_t msecs; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_release()\n")); + + /* idle DHCP client */ + dhcp_set_state(dhcp, DHCP_OFF); + /* clean old DHCP offer */ + dhcp->server_ip_addr.addr = 0; + dhcp->offered_ip_addr.addr = dhcp->offered_sn_mask.addr = 0; + dhcp->offered_gw_addr.addr = dhcp->offered_bc_addr.addr = 0; + dhcp->offered_t0_lease = dhcp->offered_t1_renew = dhcp->offered_t2_rebind = 0; + dhcp->dns_count = 0; + + /* create and initialize the DHCP message header */ + result = dhcp_create_request(netif); + if (result == ERR_OK) { + dhcp_option(dhcp, DHCP_OPTION_MESSAGE_TYPE, DHCP_OPTION_MESSAGE_TYPE_LEN); + dhcp_option_byte(dhcp, DHCP_RELEASE); + + dhcp_option_trailer(dhcp); + + pbuf_realloc(dhcp->p_out, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + dhcp->options_out_len); + + udp_sendto_if(dhcp->pcb, dhcp->p_out, &dhcp->server_ip_addr, DHCP_SERVER_PORT, netif); + dhcp_delete_request(netif); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_release: RELEASED, DHCP_OFF\n")); + } else { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_release: could not allocate DHCP request\n")); + } + dhcp->tries++; + msecs = dhcp->tries < 10 ? dhcp->tries * 1000 : 10 * 1000; + dhcp->request_timeout = (msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_release(): set request timeout %"U16_F" msecs\n", msecs)); + /* bring the interface down */ + netif_set_down(netif); + /* remove IP address from interface */ + netif_set_ipaddr(netif, IP_ADDR_ANY); + netif_set_gw(netif, IP_ADDR_ANY); + netif_set_netmask(netif, IP_ADDR_ANY); + + /* TODO: netif_down(netif); */ + return result; +} + +/** + * Remove the DHCP client from the interface. + * + * @param netif The network interface to stop DHCP on + */ +void +dhcp_stop(struct netif *netif) +{ + struct dhcp *dhcp = netif->dhcp; + LWIP_ERROR("dhcp_stop: netif != NULL", (netif != NULL), return;); + /* Remove the flag that says this netif is handled by DHCP. */ + netif->flags &= ~NETIF_FLAG_DHCP; + + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_stop()\n")); + /* netif is DHCP configured? */ + if (dhcp != NULL) { +#if LWIP_DHCP_AUTOIP_COOP + if(dhcp->autoip_coop_state == DHCP_AUTOIP_COOP_STATE_ON) { + autoip_stop(netif); + dhcp->autoip_coop_state = DHCP_AUTOIP_COOP_STATE_OFF; + } +#endif /* LWIP_DHCP_AUTOIP_COOP */ + + if (dhcp->pcb != NULL) { + udp_remove(dhcp->pcb); + dhcp->pcb = NULL; + } + LWIP_ASSERT("reply wasn't freed", dhcp->msg_in == NULL && + dhcp->options_in == NULL && dhcp->options_in_len == 0); + mem_free((void *)dhcp); + netif->dhcp = NULL; + } +} + +/* + * Set the DHCP state of a DHCP client. + * + * If the state changed, reset the number of tries. + * + * TODO: we might also want to reset the timeout here? + */ +static void +dhcp_set_state(struct dhcp *dhcp, u8_t new_state) +{ + if (new_state != dhcp->state) { + dhcp->state = new_state; + dhcp->tries = 0; + } +} + +/* + * Concatenate an option type and length field to the outgoing + * DHCP message. + * + */ +static void +dhcp_option(struct dhcp *dhcp, u8_t option_type, u8_t option_len) +{ + LWIP_ASSERT("dhcp_option: dhcp->options_out_len + 2 + option_len <= DHCP_OPTIONS_LEN", dhcp->options_out_len + 2U + option_len <= DHCP_OPTIONS_LEN); + dhcp->msg_out->options[dhcp->options_out_len++] = option_type; + dhcp->msg_out->options[dhcp->options_out_len++] = option_len; +} +/* + * Concatenate a single byte to the outgoing DHCP message. + * + */ +static void +dhcp_option_byte(struct dhcp *dhcp, u8_t value) +{ + LWIP_ASSERT("dhcp_option_byte: dhcp->options_out_len < DHCP_OPTIONS_LEN", dhcp->options_out_len < DHCP_OPTIONS_LEN); + dhcp->msg_out->options[dhcp->options_out_len++] = value; +} + +static void +dhcp_option_short(struct dhcp *dhcp, u16_t value) +{ + LWIP_ASSERT("dhcp_option_short: dhcp->options_out_len + 2 <= DHCP_OPTIONS_LEN", dhcp->options_out_len + 2U <= DHCP_OPTIONS_LEN); + dhcp->msg_out->options[dhcp->options_out_len++] = (u8_t)((value & 0xff00U) >> 8); + dhcp->msg_out->options[dhcp->options_out_len++] = (u8_t) (value & 0x00ffU); +} + +static void +dhcp_option_long(struct dhcp *dhcp, u32_t value) +{ + LWIP_ASSERT("dhcp_option_long: dhcp->options_out_len + 4 <= DHCP_OPTIONS_LEN", dhcp->options_out_len + 4U <= DHCP_OPTIONS_LEN); + dhcp->msg_out->options[dhcp->options_out_len++] = (u8_t)((value & 0xff000000UL) >> 24); + dhcp->msg_out->options[dhcp->options_out_len++] = (u8_t)((value & 0x00ff0000UL) >> 16); + dhcp->msg_out->options[dhcp->options_out_len++] = (u8_t)((value & 0x0000ff00UL) >> 8); + dhcp->msg_out->options[dhcp->options_out_len++] = (u8_t)((value & 0x000000ffUL)); +} + +/** + * Extract the DHCP message and the DHCP options. + * + * Extract the DHCP message and the DHCP options, each into a contiguous + * piece of memory. As a DHCP message is variable sized by its options, + * and also allows overriding some fields for options, the easy approach + * is to first unfold the options into a conitguous piece of memory, and + * use that further on. + * + */ +static err_t +dhcp_unfold_reply(struct dhcp *dhcp, struct pbuf *p) +{ + u16_t ret; + LWIP_ERROR("dhcp != NULL", (dhcp != NULL), return ERR_ARG;); + /* free any left-overs from previous unfolds */ + dhcp_free_reply(dhcp); + /* options present? */ + if (p->tot_len > (sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN)) { + dhcp->options_in_len = p->tot_len - (sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN); + dhcp->options_in = mem_malloc(dhcp->options_in_len); + if (dhcp->options_in == NULL) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, + ("dhcp_unfold_reply(): could not allocate dhcp->options\n")); + dhcp->options_in_len = 0; + return ERR_MEM; + } + } + dhcp->msg_in = mem_malloc(sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN); + if (dhcp->msg_in == NULL) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, + ("dhcp_unfold_reply(): could not allocate dhcp->msg_in\n")); + if (dhcp->options_in != NULL) { + mem_free(dhcp->options_in); + dhcp->options_in = NULL; + dhcp->options_in_len = 0; + } + return ERR_MEM; + } + + /** copy the DHCP message without options */ + ret = pbuf_copy_partial(p, dhcp->msg_in, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN, 0); + LWIP_ASSERT("ret == sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN", ret == sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_unfold_reply(): copied %"U16_F" bytes into dhcp->msg_in[]\n", + sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN)); + + if (dhcp->options_in != NULL) { + /** copy the DHCP options */ + ret = pbuf_copy_partial(p, dhcp->options_in, dhcp->options_in_len, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN); + LWIP_ASSERT("ret == dhcp->options_in_len", ret == dhcp->options_in_len); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_unfold_reply(): copied %"U16_F" bytes to dhcp->options_in[]\n", + dhcp->options_in_len)); + } + LWIP_UNUSED_ARG(ret); + return ERR_OK; +} + +/** + * Free the incoming DHCP message including contiguous copy of + * its DHCP options. + */ +static void dhcp_free_reply(struct dhcp *dhcp) +{ + if (dhcp->msg_in != NULL) { + mem_free((void *)dhcp->msg_in); + dhcp->msg_in = NULL; + } + if (dhcp->options_in) { + mem_free(dhcp->options_in); + dhcp->options_in = NULL; + dhcp->options_in_len = 0; + } + LWIP_DEBUGF(DHCP_DEBUG, ("dhcp_free_reply(): free'd\n")); +} + +/** + * If an incoming DHCP message is in response to us, then trigger the state machine + */ +static void dhcp_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p, struct ip_addr *addr, u16_t port) +{ + struct netif *netif = (struct netif *)arg; + struct dhcp *dhcp = netif->dhcp; + struct dhcp_msg *reply_msg = (struct dhcp_msg *)p->payload; + u8_t *options_ptr; + u8_t msg_type; + u8_t i; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_recv(pbuf = %p) from DHCP server %"U16_F".%"U16_F".%"U16_F".%"U16_F" port %"U16_F"\n", (void*)p, + (u16_t)(ntohl(addr->addr) >> 24 & 0xff), (u16_t)(ntohl(addr->addr) >> 16 & 0xff), + (u16_t)(ntohl(addr->addr) >> 8 & 0xff), (u16_t)(ntohl(addr->addr) & 0xff), port)); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("pbuf->len = %"U16_F"\n", p->len)); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("pbuf->tot_len = %"U16_F"\n", p->tot_len)); + /* prevent warnings about unused arguments */ + LWIP_UNUSED_ARG(pcb); + LWIP_UNUSED_ARG(addr); + LWIP_UNUSED_ARG(port); + + LWIP_ASSERT("reply wasn't freed", dhcp->msg_in == NULL && + dhcp->options_in == NULL && dhcp->options_in_len == 0); + + if (p->len < DHCP_MIN_REPLY_LEN) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, ("DHCP reply message too short\n")); + goto free_pbuf_and_return; + } + + if (reply_msg->op != DHCP_BOOTREPLY) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, ("not a DHCP reply message, but type %"U16_F"\n", (u16_t)reply_msg->op)); + goto free_pbuf_and_return; + } + /* iterate through hardware address and match against DHCP message */ + for (i = 0; i < netif->hwaddr_len; i++) { + if (netif->hwaddr[i] != reply_msg->chaddr[i]) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, + ("netif->hwaddr[%"U16_F"]==%02"X16_F" != reply_msg->chaddr[%"U16_F"]==%02"X16_F"\n", + (u16_t)i, (u16_t)netif->hwaddr[i], (u16_t)i, (u16_t)reply_msg->chaddr[i])); + goto free_pbuf_and_return; + } + } + /* match transaction ID against what we expected */ + if (ntohl(reply_msg->xid) != dhcp->xid) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, + ("transaction id mismatch reply_msg->xid(%"X32_F")!=dhcp->xid(%"X32_F")\n",ntohl(reply_msg->xid),dhcp->xid)); + goto free_pbuf_and_return; + } + /* option fields could be unfold? */ + if (dhcp_unfold_reply(dhcp, p) != ERR_OK) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, + ("problem unfolding DHCP message - too short on memory?\n")); + goto free_pbuf_and_return; + } + + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("searching DHCP_OPTION_MESSAGE_TYPE\n")); + /* obtain pointer to DHCP message type */ + options_ptr = dhcp_get_option_ptr(dhcp, DHCP_OPTION_MESSAGE_TYPE); + if (options_ptr == NULL) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, ("DHCP_OPTION_MESSAGE_TYPE option not found\n")); + goto free_pbuf_and_return; + } + + /* read DHCP message type */ + msg_type = dhcp_get_option_byte(options_ptr + 2); + /* message type is DHCP ACK? */ + if (msg_type == DHCP_ACK) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("DHCP_ACK received\n")); + /* in requesting state? */ + if (dhcp->state == DHCP_REQUESTING) { + dhcp_handle_ack(netif); + dhcp->request_timeout = 0; +#if DHCP_DOES_ARP_CHECK + /* check if the acknowledged lease address is already in use */ + dhcp_check(netif); +#else + /* bind interface to the acknowledged lease address */ + dhcp_bind(netif); +#endif + } + /* already bound to the given lease address? */ + else if ((dhcp->state == DHCP_REBOOTING) || (dhcp->state == DHCP_REBINDING) || (dhcp->state == DHCP_RENEWING)) { + dhcp->request_timeout = 0; + dhcp_bind(netif); + } + } + /* received a DHCP_NAK in appropriate state? */ + else if ((msg_type == DHCP_NAK) && + ((dhcp->state == DHCP_REBOOTING) || (dhcp->state == DHCP_REQUESTING) || + (dhcp->state == DHCP_REBINDING) || (dhcp->state == DHCP_RENEWING ))) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("DHCP_NAK received\n")); + dhcp->request_timeout = 0; + dhcp_handle_nak(netif); + } + /* received a DHCP_OFFER in DHCP_SELECTING state? */ + else if ((msg_type == DHCP_OFFER) && (dhcp->state == DHCP_SELECTING)) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("DHCP_OFFER received in DHCP_SELECTING state\n")); + dhcp->request_timeout = 0; + /* remember offered lease */ + dhcp_handle_offer(netif); + } +free_pbuf_and_return: + dhcp_free_reply(dhcp); + pbuf_free(p); +} + +/** + * Create a DHCP request, fill in common headers + * + * @param netif the netif under DHCP control + */ +static err_t +dhcp_create_request(struct netif *netif) +{ + struct dhcp *dhcp; + u16_t i; +#ifndef DHCP_GLOBAL_XID + /** default global transaction identifier starting value (easy to match + * with a packet analyser). We simply increment for each new request. + * Predefine DHCP_GLOBAL_XID to a better value or a function call to generate one + * at runtime, any supporting function prototypes can be defined in DHCP_GLOBAL_XID_HEADER */ + static u32_t xid = 0xABCD0000; +#else + static u32_t xid; + static u8_t xid_initialised = 0; + if (!xid_initialised) { + xid = DHCP_GLOBAL_XID; + xid_initialised = !xid_initialised; + } +#endif + LWIP_ERROR("dhcp_create_request: netif != NULL", (netif != NULL), return ERR_ARG;); + dhcp = netif->dhcp; + LWIP_ERROR("dhcp_create_request: dhcp != NULL", (dhcp != NULL), return ERR_VAL;); + LWIP_ASSERT("dhcp_create_request: dhcp->p_out == NULL", dhcp->p_out == NULL); + LWIP_ASSERT("dhcp_create_request: dhcp->msg_out == NULL", dhcp->msg_out == NULL); + dhcp->p_out = pbuf_alloc(PBUF_TRANSPORT, sizeof(struct dhcp_msg), PBUF_RAM); + if (dhcp->p_out == NULL) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, + ("dhcp_create_request(): could not allocate pbuf\n")); + return ERR_MEM; + } + LWIP_ASSERT("dhcp_create_request: check that first pbuf can hold struct dhcp_msg", + (dhcp->p_out->len >= sizeof(struct dhcp_msg))); + + /* reuse transaction identifier in retransmissions */ + if (dhcp->tries==0) + xid++; + dhcp->xid = xid; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, + ("transaction id xid(%"X32_F")\n", xid)); + + dhcp->msg_out = (struct dhcp_msg *)dhcp->p_out->payload; + + dhcp->msg_out->op = DHCP_BOOTREQUEST; + /* TODO: make link layer independent */ + dhcp->msg_out->htype = DHCP_HTYPE_ETH; + /* TODO: make link layer independent */ + dhcp->msg_out->hlen = DHCP_HLEN_ETH; + dhcp->msg_out->hops = 0; + dhcp->msg_out->xid = htonl(dhcp->xid); + dhcp->msg_out->secs = 0; + dhcp->msg_out->flags = 0; + dhcp->msg_out->ciaddr.addr = 0; + if (dhcp->state==DHCP_BOUND || dhcp->state==DHCP_RENEWING || dhcp->state==DHCP_REBINDING) { + dhcp->msg_out->ciaddr.addr = netif->ip_addr.addr; + } + dhcp->msg_out->yiaddr.addr = 0; + dhcp->msg_out->siaddr.addr = 0; + dhcp->msg_out->giaddr.addr = 0; + for (i = 0; i < DHCP_CHADDR_LEN; i++) { + /* copy netif hardware address, pad with zeroes */ + dhcp->msg_out->chaddr[i] = (i < netif->hwaddr_len) ? netif->hwaddr[i] : 0/* pad byte*/; + } + for (i = 0; i < DHCP_SNAME_LEN; i++) { + dhcp->msg_out->sname[i] = 0; + } + for (i = 0; i < DHCP_FILE_LEN; i++) { + dhcp->msg_out->file[i] = 0; + } + dhcp->msg_out->cookie = htonl(0x63825363UL); + dhcp->options_out_len = 0; + /* fill options field with an incrementing array (for debugging purposes) */ + for (i = 0; i < DHCP_OPTIONS_LEN; i++) { + dhcp->msg_out->options[i] = (u8_t)i; /* for debugging only, no matter if truncated */ + } + return ERR_OK; +} + +/** + * Free previously allocated memory used to send a DHCP request. + * + * @param netif the netif under DHCP control + */ +static void +dhcp_delete_request(struct netif *netif) +{ + struct dhcp *dhcp; + LWIP_ERROR("dhcp_delete_request: netif != NULL", (netif != NULL), return;); + dhcp = netif->dhcp; + LWIP_ERROR("dhcp_delete_request: dhcp != NULL", (dhcp != NULL), return;); + LWIP_ASSERT("dhcp_delete_request: dhcp->p_out != NULL", dhcp->p_out != NULL); + LWIP_ASSERT("dhcp_delete_request: dhcp->msg_out != NULL", dhcp->msg_out != NULL); + if (dhcp->p_out != NULL) { + pbuf_free(dhcp->p_out); + } + dhcp->p_out = NULL; + dhcp->msg_out = NULL; +} + +/** + * Add a DHCP message trailer + * + * Adds the END option to the DHCP message, and if + * necessary, up to three padding bytes. + * + * @param dhcp DHCP state structure + */ +static void +dhcp_option_trailer(struct dhcp *dhcp) +{ + LWIP_ERROR("dhcp_option_trailer: dhcp != NULL", (dhcp != NULL), return;); + LWIP_ASSERT("dhcp_option_trailer: dhcp->msg_out != NULL\n", dhcp->msg_out != NULL); + LWIP_ASSERT("dhcp_option_trailer: dhcp->options_out_len < DHCP_OPTIONS_LEN\n", dhcp->options_out_len < DHCP_OPTIONS_LEN); + dhcp->msg_out->options[dhcp->options_out_len++] = DHCP_OPTION_END; + /* packet is too small, or not 4 byte aligned? */ + while ((dhcp->options_out_len < DHCP_MIN_OPTIONS_LEN) || (dhcp->options_out_len & 3)) { + /* LWIP_DEBUGF(DHCP_DEBUG,("dhcp_option_trailer:dhcp->options_out_len=%"U16_F", DHCP_OPTIONS_LEN=%"U16_F, dhcp->options_out_len, DHCP_OPTIONS_LEN)); */ + LWIP_ASSERT("dhcp_option_trailer: dhcp->options_out_len < DHCP_OPTIONS_LEN\n", dhcp->options_out_len < DHCP_OPTIONS_LEN); + /* add a fill/padding byte */ + dhcp->msg_out->options[dhcp->options_out_len++] = 0; + } +} + +/** + * Find the offset of a DHCP option inside the DHCP message. + * + * @param dhcp DHCP client + * @param option_type + * + * @return a byte offset into the UDP message where the option was found, or + * zero if the given option was not found. + */ +static u8_t *dhcp_get_option_ptr(struct dhcp *dhcp, u8_t option_type) +{ + u8_t overload = DHCP_OVERLOAD_NONE; + + /* options available? */ + if ((dhcp->options_in != NULL) && (dhcp->options_in_len > 0)) { + /* start with options field */ + u8_t *options = (u8_t *)dhcp->options_in; + u16_t offset = 0; + /* at least 1 byte to read and no end marker, then at least 3 bytes to read? */ + while ((offset < dhcp->options_in_len) && (options[offset] != DHCP_OPTION_END)) { + /* LWIP_DEBUGF(DHCP_DEBUG, ("msg_offset=%"U16_F", q->len=%"U16_F, msg_offset, q->len)); */ + /* are the sname and/or file field overloaded with options? */ + if (options[offset] == DHCP_OPTION_OVERLOAD) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("overloaded message detected\n")); + /* skip option type and length */ + offset += 2; + overload = options[offset++]; + } + /* requested option found */ + else if (options[offset] == option_type) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("option found at offset %"U16_F" in options\n", offset)); + return &options[offset]; + /* skip option */ + } else { + LWIP_DEBUGF(DHCP_DEBUG, ("skipping option %"U16_F" in options\n", options[offset])); + /* skip option type */ + offset++; + /* skip option length, and then length bytes */ + offset += 1 + options[offset]; + } + } + /* is this an overloaded message? */ + if (overload != DHCP_OVERLOAD_NONE) { + u16_t field_len; + if (overload == DHCP_OVERLOAD_FILE) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("overloaded file field\n")); + options = (u8_t *)&dhcp->msg_in->file; + field_len = DHCP_FILE_LEN; + } else if (overload == DHCP_OVERLOAD_SNAME) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("overloaded sname field\n")); + options = (u8_t *)&dhcp->msg_in->sname; + field_len = DHCP_SNAME_LEN; + /* TODO: check if else if () is necessary */ + } else { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("overloaded sname and file field\n")); + options = (u8_t *)&dhcp->msg_in->sname; + field_len = DHCP_FILE_LEN + DHCP_SNAME_LEN; + } + offset = 0; + + /* at least 1 byte to read and no end marker */ + while ((offset < field_len) && (options[offset] != DHCP_OPTION_END)) { + if (options[offset] == option_type) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("option found at offset=%"U16_F"\n", offset)); + return &options[offset]; + /* skip option */ + } else { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("skipping option %"U16_F"\n", options[offset])); + /* skip option type */ + offset++; + offset += 1 + options[offset]; + } + } + } + } + return NULL; +} + +/** + * Return the byte of DHCP option data. + * + * @param client DHCP client. + * @param ptr pointer obtained by dhcp_get_option_ptr(). + * + * @return byte value at the given address. + */ +static u8_t +dhcp_get_option_byte(u8_t *ptr) +{ + LWIP_DEBUGF(DHCP_DEBUG, ("option byte value=%"U16_F"\n", (u16_t)(*ptr))); + return *ptr; +} + +#if 0 /* currently unused */ +/** + * Return the 16-bit value of DHCP option data. + * + * @param client DHCP client. + * @param ptr pointer obtained by dhcp_get_option_ptr(). + * + * @return byte value at the given address. + */ +static u16_t +dhcp_get_option_short(u8_t *ptr) +{ + u16_t value; + value = *ptr++ << 8; + value |= *ptr; + LWIP_DEBUGF(DHCP_DEBUG, ("option short value=%"U16_F"\n", value)); + return value; +} +#endif + +/** + * Return the 32-bit value of DHCP option data. + * + * @param client DHCP client. + * @param ptr pointer obtained by dhcp_get_option_ptr(). + * + * @return byte value at the given address. + */ +static u32_t dhcp_get_option_long(u8_t *ptr) +{ + u32_t value; + value = (u32_t)(*ptr++) << 24; + value |= (u32_t)(*ptr++) << 16; + value |= (u32_t)(*ptr++) << 8; + value |= (u32_t)(*ptr++); + LWIP_DEBUGF(DHCP_DEBUG, ("option long value=%"U32_F"\n", value)); + return value; +} + +#endif /* LWIP_DHCP */ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/dns.c b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/dns.c new file mode 100644 index 000000000..62ccf6314 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/dns.c @@ -0,0 +1,982 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/** + * @file + * DNS - host name to IP address resolver. + * + */ + +/** + + * This file implements a DNS host name to IP address resolver. + + * Port to lwIP from uIP + * by Jim Pettinato April 2007 + + * uIP version Copyright (c) 2002-2003, Adam Dunkels. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * + * DNS.C + * + * The lwIP DNS resolver functions are used to lookup a host name and + * map it to a numerical IP address. It maintains a list of resolved + * hostnames that can be queried with the dns_lookup() function. + * New hostnames can be resolved using the dns_query() function. + * + * The lwIP version of the resolver also adds a non-blocking version of + * gethostbyname() that will work with a raw API application. This function + * checks for an IP address string first and converts it if it is valid. + * gethostbyname() then does a dns_lookup() to see if the name is + * already in the table. If so, the IP is returned. If not, a query is + * issued and the function returns with a ERR_INPROGRESS status. The app + * using the dns client must then go into a waiting state. + * + * Once a hostname has been resolved (or found to be non-existent), + * the resolver code calls a specified callback function (which + * must be implemented by the module that uses the resolver). + */ + +/*----------------------------------------------------------------------------- + * RFC 1035 - Domain names - implementation and specification + * RFC 2181 - Clarifications to the DNS Specification + *----------------------------------------------------------------------------*/ + +/** @todo: define good default values (rfc compliance) */ +/** @todo: improve answer parsing, more checkings... */ +/** @todo: check RFC1035 - 7.3. Processing responses */ + +/*----------------------------------------------------------------------------- + * Includes + *----------------------------------------------------------------------------*/ + +#include "lwip/opt.h" + +#if LWIP_DNS /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/udp.h" +#include "lwip/mem.h" +#include "lwip/dns.h" + +#include + +/** DNS server IP address */ +#ifndef DNS_SERVER_ADDRESS +#define DNS_SERVER_ADDRESS inet_addr("208.67.222.222") /* resolver1.opendns.com */ +#endif + +/** DNS server port address */ +#ifndef DNS_SERVER_PORT +#define DNS_SERVER_PORT 53 +#endif + +/** DNS maximum number of retries when asking for a name, before "timeout". */ +#ifndef DNS_MAX_RETRIES +#define DNS_MAX_RETRIES 4 +#endif + +/** DNS resource record max. TTL (one week as default) */ +#ifndef DNS_MAX_TTL +#define DNS_MAX_TTL 604800 +#endif + +/* DNS protocol flags */ +#define DNS_FLAG1_RESPONSE 0x80 +#define DNS_FLAG1_OPCODE_STATUS 0x10 +#define DNS_FLAG1_OPCODE_INVERSE 0x08 +#define DNS_FLAG1_OPCODE_STANDARD 0x00 +#define DNS_FLAG1_AUTHORATIVE 0x04 +#define DNS_FLAG1_TRUNC 0x02 +#define DNS_FLAG1_RD 0x01 +#define DNS_FLAG2_RA 0x80 +#define DNS_FLAG2_ERR_MASK 0x0f +#define DNS_FLAG2_ERR_NONE 0x00 +#define DNS_FLAG2_ERR_NAME 0x03 + +/* DNS protocol states */ +#define DNS_STATE_UNUSED 0 +#define DNS_STATE_NEW 1 +#define DNS_STATE_ASKING 2 +#define DNS_STATE_DONE 3 + +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +/** DNS message header */ +struct dns_hdr { + PACK_STRUCT_FIELD(u16_t id); + PACK_STRUCT_FIELD(u8_t flags1); + PACK_STRUCT_FIELD(u8_t flags2); + PACK_STRUCT_FIELD(u16_t numquestions); + PACK_STRUCT_FIELD(u16_t numanswers); + PACK_STRUCT_FIELD(u16_t numauthrr); + PACK_STRUCT_FIELD(u16_t numextrarr); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif +#define SIZEOF_DNS_HDR 12 + +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +/** DNS query message structure */ +struct dns_query { + /* DNS query record starts with either a domain name or a pointer + to a name already present somewhere in the packet. */ + PACK_STRUCT_FIELD(u16_t type); + PACK_STRUCT_FIELD(u16_t class); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif +#define SIZEOF_DNS_QUERY 4 + +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +/** DNS answer message structure */ +struct dns_answer { + /* DNS answer record starts with either a domain name or a pointer + to a name already present somewhere in the packet. */ + PACK_STRUCT_FIELD(u16_t type); + PACK_STRUCT_FIELD(u16_t class); + PACK_STRUCT_FIELD(u32_t ttl); + PACK_STRUCT_FIELD(u16_t len); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif +#define SIZEOF_DNS_ANSWER 10 + +/** DNS table entry */ +struct dns_table_entry { + u8_t state; + u8_t numdns; + u8_t tmr; + u8_t retries; + u8_t seqno; + u8_t err; + u32_t ttl; + char name[DNS_MAX_NAME_LENGTH]; + struct ip_addr ipaddr; + /* pointer to callback on DNS query done */ + dns_found_callback found; + void *arg; +}; + +#if DNS_LOCAL_HOSTLIST +/** struct used for local host-list */ +struct local_hostlist_entry { + /** static hostname */ + const char *name; + /** static host address in network byteorder */ + u32_t addr; + struct local_hostlist_entry *next; +}; + +#if DNS_LOCAL_HOSTLIST_IS_DYNAMIC +/** Local host-list. For hostnames in this list, no + * external name resolution is performed */ +static struct local_hostlist_entry *local_hostlist_dynamic; +#else /* DNS_LOCAL_HOSTLIST_IS_DYNAMIC */ + +/** Defining this allows the local_hostlist_static to be placed in a different + * linker section (e.g. FLASH) */ +#ifndef DNS_LOCAL_HOSTLIST_STORAGE_PRE +#define DNS_LOCAL_HOSTLIST_STORAGE_PRE static +#endif /* DNS_LOCAL_HOSTLIST_STORAGE_PRE */ +/** Defining this allows the local_hostlist_static to be placed in a different + * linker section (e.g. FLASH) */ +#ifndef DNS_LOCAL_HOSTLIST_STORAGE_POST +#define DNS_LOCAL_HOSTLIST_STORAGE_POST +#endif /* DNS_LOCAL_HOSTLIST_STORAGE_POST */ +DNS_LOCAL_HOSTLIST_STORAGE_PRE struct local_hostlist_entry local_hostlist_static[] + DNS_LOCAL_HOSTLIST_STORAGE_POST = DNS_LOCAL_HOSTLIST_INIT; + +#endif /* DNS_LOCAL_HOSTLIST_IS_DYNAMIC */ + +static void dns_init_local(); +#endif /* DNS_LOCAL_HOSTLIST */ + + +/* forward declarations */ +static void dns_recv(void *s, struct udp_pcb *pcb, struct pbuf *p, struct ip_addr *addr, u16_t port); +static void dns_check_entries(void); + +/*----------------------------------------------------------------------------- + * Globales + *----------------------------------------------------------------------------*/ + +/* DNS variables */ +static struct udp_pcb *dns_pcb; +static u8_t dns_seqno; +static struct dns_table_entry dns_table[DNS_TABLE_SIZE]; +static struct ip_addr dns_servers[DNS_MAX_SERVERS]; + +#if (DNS_USES_STATIC_BUF == 1) +static u8_t dns_payload[DNS_MSG_SIZE]; +#endif /* (DNS_USES_STATIC_BUF == 1) */ + +/** + * Initialize the resolver: set up the UDP pcb and configure the default server + * (DNS_SERVER_ADDRESS). + */ +void +dns_init() +{ + struct ip_addr dnsserver; + + /* initialize default DNS server address */ + dnsserver.addr = DNS_SERVER_ADDRESS; + + LWIP_DEBUGF(DNS_DEBUG, ("dns_init: initializing\n")); + + /* if dns client not yet initialized... */ + if (dns_pcb == NULL) { + dns_pcb = udp_new(); + + if (dns_pcb != NULL) { + /* initialize DNS table not needed (initialized to zero since it is a + * global variable) */ + LWIP_ASSERT("For implicit initialization to work, DNS_STATE_UNUSED needs to be 0", + DNS_STATE_UNUSED == 0); + + /* initialize DNS client */ + udp_bind(dns_pcb, IP_ADDR_ANY, 0); + udp_recv(dns_pcb, dns_recv, NULL); + + /* initialize default DNS primary server */ + dns_setserver(0, &dnsserver); + } + } +#if DNS_LOCAL_HOSTLIST + dns_init_local(); +#endif +} + +/** + * Initialize one of the DNS servers. + * + * @param numdns the index of the DNS server to set must be < DNS_MAX_SERVERS + * @param dnsserver IP address of the DNS server to set + */ +void +dns_setserver(u8_t numdns, struct ip_addr *dnsserver) +{ + if ((numdns < DNS_MAX_SERVERS) && (dns_pcb != NULL) && + (dnsserver != NULL) && (dnsserver->addr !=0 )) { + dns_servers[numdns] = (*dnsserver); + } +} + +/** + * Obtain one of the currently configured DNS server. + * + * @param numdns the index of the DNS server + * @return IP address of the indexed DNS server or "ip_addr_any" if the DNS + * server has not been configured. + */ +struct ip_addr +dns_getserver(u8_t numdns) +{ + if (numdns < DNS_MAX_SERVERS) { + return dns_servers[numdns]; + } else { + return *IP_ADDR_ANY; + } +} + +/** + * The DNS resolver client timer - handle retries and timeouts and should + * be called every DNS_TMR_INTERVAL milliseconds (every second by default). + */ +void +dns_tmr(void) +{ + if (dns_pcb != NULL) { + LWIP_DEBUGF(DNS_DEBUG, ("dns_tmr: dns_check_entries\n")); + dns_check_entries(); + } +} + +#if DNS_LOCAL_HOSTLIST +static void +dns_init_local() +{ +#if DNS_LOCAL_HOSTLIST_IS_DYNAMIC && defined(DNS_LOCAL_HOSTLIST_INIT) + int i; + struct local_hostlist_entry *entry; + /* Dynamic: copy entries from DNS_LOCAL_HOSTLIST_INIT to list */ + struct local_hostlist_entry local_hostlist_init[] = DNS_LOCAL_HOSTLIST_INIT; + for (i = 0; i < sizeof(local_hostlist_init) / sizeof(struct local_hostlist_entry); i++) { + entry = mem_malloc(sizeof(struct local_hostlist_entry)); + LWIP_ASSERT("mem-error in dns_init_local", entry != NULL); + if (entry != NULL) { + struct local_hostlist_entry *init_entry = &local_hostlist_init[i]; + entry->name = init_entry->name; + entry->addr = init_entry->addr; + entry->next = local_hostlist_dynamic; + local_hostlist_dynamic = entry; + } + } +#endif /* DNS_LOCAL_HOSTLIST_IS_DYNAMIC && defined(DNS_LOCAL_HOSTLIST_INIT) */ +} + +/** + * Scans the local host-list for a hostname. + * + * @param hostname Hostname to look for in the local host-list + * @return The first IP address for the hostname in the local host-list or + * INADDR_NONE if not found. + */ +static u32_t +dns_lookup_local(const char *hostname) +{ +#if DNS_LOCAL_HOSTLIST_IS_DYNAMIC + struct local_hostlist_entry *entry = local_hostlist_dynamic; + while(entry != NULL) { + if(strcmp(entry->name, hostname) == 0) { + return entry->addr; + } + entry = entry->next; + } +#else /* DNS_LOCAL_HOSTLIST_IS_DYNAMIC */ + int i; + for (i = 0; i < sizeof(local_hostlist_static) / sizeof(struct local_hostlist_entry); i++) { + if(strcmp(local_hostlist_static[i].name, hostname) == 0) { + return local_hostlist_static[i].addr; + } + } +#endif /* DNS_LOCAL_HOSTLIST_IS_DYNAMIC */ + return INADDR_NONE; +} + +#if DNS_LOCAL_HOSTLIST_IS_DYNAMIC +/** Remove all entries from the local host-list for a specific hostname + * and/or IP addess + * + * @param hostname hostname for which entries shall be removed from the local + * host-list + * @param addr address for which entries shall be removed from the local host-list + * @return the number of removed entries + */ +int +dns_local_removehost(const char *hostname, const struct ip_addr *addr) +{ + int removed = 0; + struct local_hostlist_entry *entry = local_hostlist_dynamic; + struct local_hostlist_entry *last_entry = NULL; + while (entry != NULL) { + if (((hostname == NULL) || !strcmp(entry->name, hostname)) && + ((addr == NULL) || (entry->addr == addr->addr))) { + struct local_hostlist_entry *free_entry; + if (last_entry != NULL) { + last_entry->next = entry->next; + } else { + local_hostlist_dynamic = entry->next; + } + free_entry = entry; + entry = entry->next; + mem_free(free_entry); + removed++; + } else { + last_entry = entry; + entry = entry->next; + } + } + return removed; +} + +/** + * Add a hostname/IP address pair to the local host-list. + * Duplicates are not checked. + * + * @param hostname hostname of the new entry + * @param addr IP address of the new entry + * @return ERR_OK if succeeded or ERR_MEM on memory error + */ +err_t +dns_local_addhost(const char *hostname, const struct ip_addr *addr) +{ + struct local_hostlist_entry *entry; + entry = mem_malloc(sizeof(struct local_hostlist_entry)); + if (entry == NULL) { + return ERR_MEM; + } + entry->name = hostname; + entry->addr = addr->addr; + entry->next = local_hostlist_dynamic; + local_hostlist_dynamic = entry; + return ERR_OK; +} +#endif /* DNS_LOCAL_HOSTLIST_IS_DYNAMIC*/ +#endif /* DNS_LOCAL_HOSTLIST */ + +/** + * Look up a hostname in the array of known hostnames. + * + * @note This function only looks in the internal array of known + * hostnames, it does not send out a query for the hostname if none + * was found. The function dns_enqueue() can be used to send a query + * for a hostname. + * + * @param name the hostname to look up + * @return the hostname's IP address, as u32_t (instead of struct ip_addr to + * better check for failure: != INADDR_NONE) or INADDR_NONE if the hostname + * was not found in the cached dns_table. + */ +static u32_t +dns_lookup(const char *name) +{ + u8_t i; +#if DNS_LOCAL_HOSTLIST || defined(DNS_LOOKUP_LOCAL_EXTERN) + u32_t addr; +#endif /* DNS_LOCAL_HOSTLIST || defined(DNS_LOOKUP_LOCAL_EXTERN) */ +#if DNS_LOCAL_HOSTLIST + if ((addr = dns_lookup_local(name)) != INADDR_NONE) { + return addr; + } +#endif /* DNS_LOCAL_HOSTLIST */ +#ifdef DNS_LOOKUP_LOCAL_EXTERN + if((addr = DNS_LOOKUP_LOCAL_EXTERN(name)) != INADDR_NONE) { + return addr; + } +#endif /* DNS_LOOKUP_LOCAL_EXTERN */ + + /* Walk through name list, return entry if found. If not, return NULL. */ + for (i = 0; i < DNS_TABLE_SIZE; ++i) { + if ((dns_table[i].state == DNS_STATE_DONE) && + (strcmp(name, dns_table[i].name) == 0)) { + LWIP_DEBUGF(DNS_DEBUG, ("dns_lookup: \"%s\": found = ", name)); + ip_addr_debug_print(DNS_DEBUG, &(dns_table[i].ipaddr)); + LWIP_DEBUGF(DNS_DEBUG, ("\n")); + return dns_table[i].ipaddr.addr; + } + } + + return INADDR_NONE; +} + +#if DNS_DOES_NAME_CHECK +/** + * Compare the "dotted" name "query" with the encoded name "response" + * to make sure an answer from the DNS server matches the current dns_table + * entry (otherwise, answers might arrive late for hostname not on the list + * any more). + * + * @param query hostname (not encoded) from the dns_table + * @param response encoded hostname in the DNS response + * @return 0: names equal; 1: names differ + */ +static u8_t +dns_compare_name(unsigned char *query, unsigned char *response) +{ + unsigned char n; + + do { + n = *response++; + /** @see RFC 1035 - 4.1.4. Message compression */ + if ((n & 0xc0) == 0xc0) { + /* Compressed name */ + break; + } else { + /* Not compressed name */ + while (n > 0) { + if ((*query) != (*response)) { + return 1; + } + ++response; + ++query; + --n; + }; + ++query; + } + } while (*response != 0); + + return 0; +} +#endif /* DNS_DOES_NAME_CHECK */ + +/** + * Walk through a compact encoded DNS name and return the end of the name. + * + * @param query encoded DNS name in the DNS server response + * @return end of the name + */ +static unsigned char * +dns_parse_name(unsigned char *query) +{ + unsigned char n; + + do { + n = *query++; + /** @see RFC 1035 - 4.1.4. Message compression */ + if ((n & 0xc0) == 0xc0) { + /* Compressed name */ + break; + } else { + /* Not compressed name */ + while (n > 0) { + ++query; + --n; + }; + } + } while (*query != 0); + + return query + 1; +} + +/** + * Send a DNS query packet. + * + * @param numdns index of the DNS server in the dns_servers table + * @param name hostname to query + * @param id index of the hostname in dns_table, used as transaction ID in the + * DNS query packet + * @return ERR_OK if packet is sent; an err_t indicating the problem otherwise + */ +static err_t +dns_send(u8_t numdns, const char* name, u8_t id) +{ + err_t err; + struct dns_hdr *hdr; + struct dns_query qry; + struct pbuf *p; + char *query, *nptr; + const char *pHostname; + u8_t n; + + LWIP_DEBUGF(DNS_DEBUG, ("dns_send: dns_servers[%"U16_F"] \"%s\": request\n", + (u16_t)(numdns), name)); + LWIP_ASSERT("dns server out of array", numdns < DNS_MAX_SERVERS); + LWIP_ASSERT("dns server has no IP address set", dns_servers[numdns].addr != 0); + + /* if here, we have either a new query or a retry on a previous query to process */ + p = pbuf_alloc(PBUF_TRANSPORT, SIZEOF_DNS_HDR + DNS_MAX_NAME_LENGTH + + SIZEOF_DNS_QUERY, PBUF_RAM); + if (p != NULL) { + LWIP_ASSERT("pbuf must be in one piece", p->next == NULL); + /* fill dns header */ + hdr = (struct dns_hdr*)p->payload; + memset(hdr, 0, SIZEOF_DNS_HDR); + hdr->id = htons(id); + hdr->flags1 = DNS_FLAG1_RD; + hdr->numquestions = htons(1); + query = (char*)hdr + SIZEOF_DNS_HDR; + pHostname = name; + --pHostname; + + /* convert hostname into suitable query format. */ + do { + ++pHostname; + nptr = query; + ++query; + for(n = 0; *pHostname != '.' && *pHostname != 0; ++pHostname) { + *query = *pHostname; + ++query; + ++n; + } + *nptr = n; + } while(*pHostname != 0); + *query++='\0'; + + /* fill dns query */ + qry.type = htons(DNS_RRTYPE_A); + qry.class = htons(DNS_RRCLASS_IN); + MEMCPY( query, &qry, SIZEOF_DNS_QUERY); + + /* resize pbuf to the exact dns query */ + pbuf_realloc(p, (query + SIZEOF_DNS_QUERY) - ((char*)(p->payload))); + + /* connect to the server for faster receiving */ + udp_connect(dns_pcb, &dns_servers[numdns], DNS_SERVER_PORT); + /* send dns packet */ + err = udp_sendto(dns_pcb, p, &dns_servers[numdns], DNS_SERVER_PORT); + + /* free pbuf */ + pbuf_free(p); + } else { + err = ERR_MEM; + } + + return err; +} + +/** + * dns_check_entry() - see if pEntry has not yet been queried and, if so, sends out a query. + * Check an entry in the dns_table: + * - send out query for new entries + * - retry old pending entries on timeout (also with different servers) + * - remove completed entries from the table if their TTL has expired + * + * @param i index of the dns_table entry to check + */ +static void +dns_check_entry(u8_t i) +{ + struct dns_table_entry *pEntry = &dns_table[i]; + + LWIP_ASSERT("array index out of bounds", i < DNS_TABLE_SIZE); + + switch(pEntry->state) { + + case DNS_STATE_NEW: { + /* initialize new entry */ + pEntry->state = DNS_STATE_ASKING; + pEntry->numdns = 0; + pEntry->tmr = 1; + pEntry->retries = 0; + + /* send DNS packet for this entry */ + dns_send(pEntry->numdns, pEntry->name, i); + break; + } + + case DNS_STATE_ASKING: { + if (--pEntry->tmr == 0) { + if (++pEntry->retries == DNS_MAX_RETRIES) { + if ((pEntry->numdns+1numdns+1].addr!=0)) { + /* change of server */ + pEntry->numdns++; + pEntry->tmr = 1; + pEntry->retries = 0; + break; + } else { + LWIP_DEBUGF(DNS_DEBUG, ("dns_check_entry: \"%s\": timeout\n", pEntry->name)); + /* call specified callback function if provided */ + if (pEntry->found) + (*pEntry->found)(pEntry->name, NULL, pEntry->arg); + /* flush this entry */ + pEntry->state = DNS_STATE_UNUSED; + pEntry->found = NULL; + break; + } + } + + /* wait longer for the next retry */ + pEntry->tmr = pEntry->retries; + + /* send DNS packet for this entry */ + dns_send(pEntry->numdns, pEntry->name, i); + } + break; + } + + case DNS_STATE_DONE: { + /* if the time to live is nul */ + if (--pEntry->ttl == 0) { + LWIP_DEBUGF(DNS_DEBUG, ("dns_check_entry: \"%s\": flush\n", pEntry->name)); + /* flush this entry */ + pEntry->state = DNS_STATE_UNUSED; + pEntry->found = NULL; + } + break; + } + case DNS_STATE_UNUSED: + /* nothing to do */ + break; + default: + LWIP_ASSERT("unknown dns_table entry state:", 0); + break; + } +} + +/** + * Call dns_check_entry for each entry in dns_table - check all entries. + */ +static void +dns_check_entries(void) +{ + u8_t i; + + for (i = 0; i < DNS_TABLE_SIZE; ++i) { + dns_check_entry(i); + } +} + +/** + * Receive input function for DNS response packets arriving for the dns UDP pcb. + * + * @params see udp.h + */ +static void +dns_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p, struct ip_addr *addr, u16_t port) +{ + u8_t i; + char *pHostname; + struct dns_hdr *hdr; + struct dns_answer ans; + struct dns_table_entry *pEntry; + u8_t nquestions, nanswers; +#if (DNS_USES_STATIC_BUF == 0) + u8_t dns_payload[DNS_MSG_SIZE]; +#endif /* (DNS_USES_STATIC_BUF == 0) */ +#if (DNS_USES_STATIC_BUF == 2) + u8_t* dns_payload; +#endif /* (DNS_USES_STATIC_BUF == 2) */ + + LWIP_UNUSED_ARG(arg); + LWIP_UNUSED_ARG(pcb); + LWIP_UNUSED_ARG(addr); + LWIP_UNUSED_ARG(port); + + /* is the dns message too big ? */ + if (p->tot_len > DNS_MSG_SIZE) { + LWIP_DEBUGF(DNS_DEBUG, ("dns_recv: pbuf too big\n")); + /* free pbuf and return */ + goto memerr1; + } + + /* is the dns message big enough ? */ + if (p->tot_len < (SIZEOF_DNS_HDR + SIZEOF_DNS_QUERY + SIZEOF_DNS_ANSWER)) { + LWIP_DEBUGF(DNS_DEBUG, ("dns_recv: pbuf too small\n")); + /* free pbuf and return */ + goto memerr1; + } + +#if (DNS_USES_STATIC_BUF == 2) + dns_payload = mem_malloc(p->tot_len); + if (dns_payload == NULL) { + LWIP_DEBUGF(DNS_DEBUG, ("dns_recv: mem_malloc error\n")); + /* free pbuf and return */ + goto memerr1; + } +#endif /* (DNS_USES_STATIC_BUF == 2) */ + + /* copy dns payload inside static buffer for processing */ + if (pbuf_copy_partial(p, dns_payload, p->tot_len, 0) == p->tot_len) { + /* The ID in the DNS header should be our entry into the name table. */ + hdr = (struct dns_hdr*)dns_payload; + i = htons(hdr->id); + if (i < DNS_TABLE_SIZE) { + pEntry = &dns_table[i]; + if(pEntry->state == DNS_STATE_ASKING) { + /* This entry is now completed. */ + pEntry->state = DNS_STATE_DONE; + pEntry->err = hdr->flags2 & DNS_FLAG2_ERR_MASK; + + /* We only care about the question(s) and the answers. The authrr + and the extrarr are simply discarded. */ + nquestions = htons(hdr->numquestions); + nanswers = htons(hdr->numanswers); + + /* Check for error. If so, call callback to inform. */ + if (((hdr->flags1 & DNS_FLAG1_RESPONSE) == 0) || (pEntry->err != 0) || (nquestions != 1)) { + LWIP_DEBUGF(DNS_DEBUG, ("dns_recv: \"%s\": error in flags\n", pEntry->name)); + /* call callback to indicate error, clean up memory and return */ + goto responseerr; + } + +#if DNS_DOES_NAME_CHECK + /* Check if the name in the "question" part match with the name in the entry. */ + if (dns_compare_name((unsigned char *)(pEntry->name), (unsigned char *)dns_payload + SIZEOF_DNS_HDR) != 0) { + LWIP_DEBUGF(DNS_DEBUG, ("dns_recv: \"%s\": response not match to query\n", pEntry->name)); + /* call callback to indicate error, clean up memory and return */ + goto responseerr; + } +#endif /* DNS_DOES_NAME_CHECK */ + + /* Skip the name in the "question" part */ + pHostname = (char *) dns_parse_name((unsigned char *)dns_payload + SIZEOF_DNS_HDR) + SIZEOF_DNS_QUERY; + + while(nanswers > 0) { + /* skip answer resource record's host name */ + pHostname = (char *) dns_parse_name((unsigned char *)pHostname); + + /* Check for IP address type and Internet class. Others are discarded. */ + MEMCPY(&ans, pHostname, SIZEOF_DNS_ANSWER); + if((ntohs(ans.type) == DNS_RRTYPE_A) && (ntohs(ans.class) == DNS_RRCLASS_IN) && (ntohs(ans.len) == sizeof(struct ip_addr)) ) { + /* read the answer resource record's TTL, and maximize it if needed */ + pEntry->ttl = ntohl(ans.ttl); + if (pEntry->ttl > DNS_MAX_TTL) { + pEntry->ttl = DNS_MAX_TTL; + } + /* read the IP address after answer resource record's header */ + MEMCPY( &(pEntry->ipaddr), (pHostname+SIZEOF_DNS_ANSWER), sizeof(struct ip_addr)); + LWIP_DEBUGF(DNS_DEBUG, ("dns_recv: \"%s\": response = ", pEntry->name)); + ip_addr_debug_print(DNS_DEBUG, (&(pEntry->ipaddr))); + LWIP_DEBUGF(DNS_DEBUG, ("\n")); + /* call specified callback function if provided */ + if (pEntry->found) { + (*pEntry->found)(pEntry->name, &pEntry->ipaddr, pEntry->arg); + } + /* deallocate memory and return */ + goto memerr2; + } else { + pHostname = pHostname + SIZEOF_DNS_ANSWER + htons(ans.len); + } + --nanswers; + } + LWIP_DEBUGF(DNS_DEBUG, ("dns_recv: \"%s\": error in response\n", pEntry->name)); + /* call callback to indicate error, clean up memory and return */ + goto responseerr; + } + } + } + + /* deallocate memory and return */ + goto memerr2; + +responseerr: + /* ERROR: call specified callback function with NULL as name to indicate an error */ + if (pEntry->found) { + (*pEntry->found)(pEntry->name, NULL, pEntry->arg); + } + /* flush this entry */ + pEntry->state = DNS_STATE_UNUSED; + pEntry->found = NULL; + +memerr2: +#if (DNS_USES_STATIC_BUF == 2) + /* free dns buffer */ + mem_free(dns_payload); +#endif /* (DNS_USES_STATIC_BUF == 2) */ + +memerr1: + /* free pbuf */ + pbuf_free(p); + return; +} + +/** + * Queues a new hostname to resolve and sends out a DNS query for that hostname + * + * @param name the hostname that is to be queried + * @param found a callback founction to be called on success, failure or timeout + * @param callback_arg argument to pass to the callback function + * @return @return a err_t return code. + */ +static err_t +dns_enqueue(const char *name, dns_found_callback found, void *callback_arg) +{ + u8_t i; + u8_t lseq, lseqi; + struct dns_table_entry *pEntry = NULL; + + /* search an unused entry, or the oldest one */ + lseq = lseqi = 0; + for (i = 0; i < DNS_TABLE_SIZE; ++i) { + pEntry = &dns_table[i]; + /* is it an unused entry ? */ + if (pEntry->state == DNS_STATE_UNUSED) + break; + + /* check if this is the oldest completed entry */ + if (pEntry->state == DNS_STATE_DONE) { + if ((dns_seqno - pEntry->seqno) > lseq) { + lseq = dns_seqno - pEntry->seqno; + lseqi = i; + } + } + } + + /* if we don't have found an unused entry, use the oldest completed one */ + if (i == DNS_TABLE_SIZE) { + if ((lseqi >= DNS_TABLE_SIZE) || (dns_table[lseqi].state != DNS_STATE_DONE)) { + /* no entry can't be used now, table is full */ + LWIP_DEBUGF(DNS_DEBUG, ("dns_enqueue: \"%s\": DNS entries table is full\n", name)); + return ERR_MEM; + } else { + /* use the oldest completed one */ + i = lseqi; + pEntry = &dns_table[i]; + } + } + + /* use this entry */ + LWIP_DEBUGF(DNS_DEBUG, ("dns_enqueue: \"%s\": use DNS entry %"U16_F"\n", name, (u16_t)(i))); + + /* fill the entry */ + pEntry->state = DNS_STATE_NEW; + pEntry->seqno = dns_seqno++; + pEntry->found = found; + pEntry->arg = callback_arg; + strcpy(pEntry->name, name); + + /* force to send query without waiting timer */ + dns_check_entry(i); + + /* dns query is enqueued */ + return ERR_INPROGRESS; +} + +/** + * Resolve a hostname (string) into an IP address. + * NON-BLOCKING callback version for use with raw API!!! + * + * Returns immediately with one of err_t return codes: + * - ERR_OK if hostname is a valid IP address string or the host + * name is already in the local names table. + * - ERR_INPROGRESS enqueue a request to be sent to the DNS server + * for resolution if no errors are present. + * + * @param hostname the hostname that is to be queried + * @param addr pointer to a struct ip_addr where to store the address if it is already + * cached in the dns_table (only valid if ERR_OK is returned!) + * @param found a callback function to be called on success, failure or timeout (only if + * ERR_INPROGRESS is returned!) + * @param callback_arg argument to pass to the callback function + * @return a err_t return code. + */ +err_t +dns_gethostbyname(const char *hostname, struct ip_addr *addr, dns_found_callback found, + void *callback_arg) +{ + /* not initialized or no valid server yet, or invalid addr pointer + * or invalid hostname or invalid hostname length */ + if ((dns_pcb == NULL) || (addr == NULL) || + (!hostname) || (!hostname[0]) || + (strlen(hostname) >= DNS_MAX_NAME_LENGTH)) { + return ERR_VAL; + } + +#if LWIP_HAVE_LOOPIF + if (strcmp(hostname,"localhost")==0) { + addr->addr = htonl(INADDR_LOOPBACK); + return ERR_OK; + } +#endif /* LWIP_HAVE_LOOPIF */ + + /* host name already in octet notation? set ip addr and return ERR_OK + * already have this address cached? */ + if (((addr->addr = inet_addr(hostname)) != INADDR_NONE) || + ((addr->addr = dns_lookup(hostname)) != INADDR_NONE)) { + return ERR_OK; + } + + /* queue query with specified callback */ + return dns_enqueue(hostname, found, callback_arg); +} + +#endif /* LWIP_DNS */ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/init.c b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/init.c new file mode 100644 index 000000000..b7995276c --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/init.c @@ -0,0 +1,276 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/** + * @file + * Modules initialization + * + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#include "lwip/opt.h" + +#include "lwip/init.h" +#include "lwip/stats.h" +#include "lwip/sys.h" +#include "lwip/mem.h" +#include "lwip/memp.h" +#include "lwip/pbuf.h" +#include "lwip/netif.h" +#include "lwip/sockets.h" +#include "lwip/ip.h" +#include "lwip/raw.h" +#include "lwip/udp.h" +#include "lwip/tcp.h" +#include "lwip/snmp_msg.h" +#include "lwip/autoip.h" +#include "lwip/igmp.h" +#include "lwip/dns.h" +#include "netif/etharp.h" + +/* Compile-time sanity checks for configuration errors. + * These can be done independently of LWIP_DEBUG, without penalty. + */ +#ifndef BYTE_ORDER + #error "BYTE_ORDER is not defined, you have to define it in your cc.h" +#endif +#if (!IP_SOF_BROADCAST && IP_SOF_BROADCAST_RECV) + #error "If you want to use broadcast filter per pcb on recv operations, you have to define IP_SOF_BROADCAST=1 in your lwipopts.h" +#endif +#if (!LWIP_ARP && ARP_QUEUEING) + #error "If you want to use ARP Queueing, you have to define LWIP_ARP=1 in your lwipopts.h" +#endif +#if (!LWIP_UDP && LWIP_UDPLITE) + #error "If you want to use UDP Lite, you have to define LWIP_UDP=1 in your lwipopts.h" +#endif +#if (!LWIP_UDP && LWIP_SNMP) + #error "If you want to use SNMP, you have to define LWIP_UDP=1 in your lwipopts.h" +#endif +#if (!LWIP_UDP && LWIP_DHCP) + #error "If you want to use DHCP, you have to define LWIP_UDP=1 in your lwipopts.h" +#endif +#if (!LWIP_UDP && LWIP_IGMP) + #error "If you want to use IGMP, you have to define LWIP_UDP=1 in your lwipopts.h" +#endif +#if (!LWIP_UDP && LWIP_DNS) + #error "If you want to use DNS, you have to define LWIP_UDP=1 in your lwipopts.h" +#endif +#if (LWIP_ARP && (ARP_TABLE_SIZE > 0x7f)) + #error "If you want to use ARP, ARP_TABLE_SIZE must fit in an s8_t, so, you have to reduce it in your lwipopts.h" +#endif +#if (LWIP_ARP && ARP_QUEUEING && (MEMP_NUM_ARP_QUEUE<=0)) + #error "If you want to use ARP Queueing, you have to define MEMP_NUM_ARP_QUEUE>=1 in your lwipopts.h" +#endif +#if (LWIP_RAW && (MEMP_NUM_RAW_PCB<=0)) + #error "If you want to use RAW, you have to define MEMP_NUM_RAW_PCB>=1 in your lwipopts.h" +#endif +#if (LWIP_UDP && (MEMP_NUM_UDP_PCB<=0)) + #error "If you want to use UDP, you have to define MEMP_NUM_UDP_PCB>=1 in your lwipopts.h" +#endif +#if (LWIP_TCP && (MEMP_NUM_TCP_PCB<=0)) + #error "If you want to use TCP, you have to define MEMP_NUM_TCP_PCB>=1 in your lwipopts.h" +#endif +#if (LWIP_TCP && (TCP_WND > 0xffff)) + #error "If you want to use TCP, TCP_WND must fit in an u16_t, so, you have to reduce it in your lwipopts.h" +#endif +#if (LWIP_TCP && (TCP_SND_QUEUELEN > 0xffff)) + #error "If you want to use TCP, TCP_SND_QUEUELEN must fit in an u16_t, so, you have to reduce it in your lwipopts.h" +#endif +#if (LWIP_TCP && ((TCP_MAXRTX > 12) || (TCP_SYNMAXRTX > 12))) + #error "If you want to use TCP, TCP_MAXRTX and TCP_SYNMAXRTX must less or equal to 12 (due to tcp_backoff table), so, you have to reduce them in your lwipopts.h" +#endif +#if (LWIP_TCP && TCP_LISTEN_BACKLOG && (TCP_DEFAULT_LISTEN_BACKLOG < 0) || (TCP_DEFAULT_LISTEN_BACKLOG > 0xff)) + #error "If you want to use TCP backlog, TCP_DEFAULT_LISTEN_BACKLOG must fit into an u8_t" +#endif +#if (LWIP_IGMP && (MEMP_NUM_IGMP_GROUP<=1)) + #error "If you want to use IGMP, you have to define MEMP_NUM_IGMP_GROUP>1 in your lwipopts.h" +#endif +#if (PPP_SUPPORT && (NO_SYS==1)) + #error "If you want to use PPP, you have to define NO_SYS=0 in your lwipopts.h" +#endif +#if (LWIP_NETIF_API && (NO_SYS==1)) + #error "If you want to use NETIF API, you have to define NO_SYS=0 in your lwipopts.h" +#endif +#if ((LWIP_SOCKET || LWIP_NETCONN) && (NO_SYS==1)) + #error "If you want to use Sequential API, you have to define NO_SYS=0 in your lwipopts.h" +#endif +#if ((LWIP_NETCONN || LWIP_SOCKET) && (MEMP_NUM_TCPIP_MSG_API<=0)) + #error "If you want to use Sequential API, you have to define MEMP_NUM_TCPIP_MSG_API>=1 in your lwipopts.h" +#endif +#if (!LWIP_NETCONN && LWIP_SOCKET) + #error "If you want to use Socket API, you have to define LWIP_NETCONN=1 in your lwipopts.h" +#endif +#if (((!LWIP_DHCP) || (!LWIP_AUTOIP)) && LWIP_DHCP_AUTOIP_COOP) + #error "If you want to use DHCP/AUTOIP cooperation mode, you have to define LWIP_DHCP=1 and LWIP_AUTOIP=1 in your lwipopts.h" +#endif +#if (((!LWIP_DHCP) || (!LWIP_ARP)) && DHCP_DOES_ARP_CHECK) + #error "If you want to use DHCP ARP checking, you have to define LWIP_DHCP=1 and LWIP_ARP=1 in your lwipopts.h" +#endif +#if (!LWIP_ARP && LWIP_AUTOIP) + #error "If you want to use AUTOIP, you have to define LWIP_ARP=1 in your lwipopts.h" +#endif +#if (LWIP_SNMP && (SNMP_CONCURRENT_REQUESTS<=0)) + #error "If you want to use SNMP, you have to define SNMP_CONCURRENT_REQUESTS>=1 in your lwipopts.h" +#endif +#if (LWIP_SNMP && (SNMP_TRAP_DESTINATIONS<=0)) + #error "If you want to use SNMP, you have to define SNMP_TRAP_DESTINATIONS>=1 in your lwipopts.h" +#endif +#if (LWIP_TCP && ((LWIP_EVENT_API && LWIP_CALLBACK_API) || (!LWIP_EVENT_API && !LWIP_CALLBACK_API))) + #error "One and exactly one of LWIP_EVENT_API and LWIP_CALLBACK_API has to be enabled in your lwipopts.h" +#endif +/* There must be sufficient timeouts, taking into account requirements of the subsystems. */ +#if ((NO_SYS==0) && (MEMP_NUM_SYS_TIMEOUT < (LWIP_TCP + IP_REASSEMBLY + LWIP_ARP + (2*LWIP_DHCP) + LWIP_AUTOIP + LWIP_IGMP + LWIP_DNS + PPP_SUPPORT))) + #error "MEMP_NUM_SYS_TIMEOUT is too low to accomodate all required timeouts" +#endif +#if (IP_REASSEMBLY && (MEMP_NUM_REASSDATA > IP_REASS_MAX_PBUFS)) + #error "MEMP_NUM_REASSDATA > IP_REASS_MAX_PBUFS doesn't make sense since each struct ip_reassdata must hold 2 pbufs at least!" +#endif +#if (MEM_LIBC_MALLOC && MEM_USE_POOLS) + #error "MEM_LIBC_MALLOC and MEM_USE_POOLS may not both be simultaneously enabled in your lwipopts.h" +#endif +#if (MEM_USE_POOLS && !MEMP_USE_CUSTOM_POOLS) + #error "MEM_USE_POOLS requires custom pools (MEMP_USE_CUSTOM_POOLS) to be enabled in your lwipopts.h" +#endif +#if (PBUF_POOL_BUFSIZE <= MEM_ALIGNMENT) + #error "PBUF_POOL_BUFSIZE must be greater than MEM_ALIGNMENT or the offset may take the full first pbuf" +#endif +#if (TCP_QUEUE_OOSEQ && !LWIP_TCP) + #error "TCP_QUEUE_OOSEQ requires LWIP_TCP" +#endif +#if (DNS_LOCAL_HOSTLIST && !DNS_LOCAL_HOSTLIST_IS_DYNAMIC && !(defined(DNS_LOCAL_HOSTLIST_INIT))) + #error "you have to define define DNS_LOCAL_HOSTLIST_INIT {{'host1', 0x123}, {'host2', 0x234}} to initialize DNS_LOCAL_HOSTLIST" +#endif +#if PPP_SUPPORT && !PPPOS_SUPPORT & !PPPOE_SUPPORT + #error "PPP_SUPPORT needs either PPPOS_SUPPORT or PPPOE_SUPPORT turned on" +#endif + + +/* Compile-time checks for deprecated options. + */ +#ifdef MEMP_NUM_TCPIP_MSG + #error "MEMP_NUM_TCPIP_MSG option is deprecated. Remove it from your lwipopts.h." +#endif +#ifdef MEMP_NUM_API_MSG + #error "MEMP_NUM_API_MSG option is deprecated. Remove it from your lwipopts.h." +#endif +#ifdef TCP_REXMIT_DEBUG + #error "TCP_REXMIT_DEBUG option is deprecated. Remove it from your lwipopts.h." +#endif +#ifdef RAW_STATS + #error "RAW_STATS option is deprecated. Remove it from your lwipopts.h." +#endif +#ifdef ETHARP_QUEUE_FIRST + #error "ETHARP_QUEUE_FIRST option is deprecated. Remove it from your lwipopts.h." +#endif +#ifdef ETHARP_ALWAYS_INSERT + #error "ETHARP_ALWAYS_INSERT option is deprecated. Remove it from your lwipopts.h." +#endif +#if SO_REUSE +/* I removed the lot since this was an ugly hack. It broke the raw-API. + It also came with many ugly goto's, Christiaan Simons. */ + #error "SO_REUSE currently unavailable, this was a hack" +#endif + +#ifdef LWIP_DEBUG +static void +lwip_sanity_check(void) +{ + /* Warnings */ +#if LWIP_NETCONN + if (MEMP_NUM_NETCONN > (MEMP_NUM_TCP_PCB+MEMP_NUM_TCP_PCB_LISTEN+MEMP_NUM_UDP_PCB+MEMP_NUM_RAW_PCB)) + LWIP_PLATFORM_DIAG(("lwip_sanity_check: WARNING: MEMP_NUM_NETCONN should be less than the sum of MEMP_NUM_{TCP,RAW,UDP}_PCB+MEMP_NUM_TCP_PCB_LISTEN\n")); +#endif /* LWIP_NETCONN */ +#if LWIP_TCP + if (MEMP_NUM_TCP_SEG < TCP_SND_QUEUELEN) + LWIP_PLATFORM_DIAG(("lwip_sanity_check: WARNING: MEMP_NUM_TCP_SEG should be at least as big as TCP_SND_QUEUELEN\n")); + if (TCP_SND_BUF < 2 * TCP_MSS) + LWIP_PLATFORM_DIAG(("lwip_sanity_check: WARNING: TCP_SND_BUF must be at least as much as (2 * TCP_MSS) for things to work smoothly\n")); + if (TCP_SND_QUEUELEN < (2 * (TCP_SND_BUF/TCP_MSS))) + LWIP_PLATFORM_DIAG(("lwip_sanity_check: WARNING: TCP_SND_QUEUELEN must be at least as much as (2 * TCP_SND_BUF/TCP_MSS) for things to work\n")); + if (TCP_SNDLOWAT > TCP_SND_BUF) + LWIP_PLATFORM_DIAG(("lwip_sanity_check: WARNING: TCP_SNDLOWAT must be less than or equal to TCP_SND_BUF.\n")); + if (TCP_WND > (PBUF_POOL_SIZE*PBUF_POOL_BUFSIZE)) + LWIP_PLATFORM_DIAG(("lwip_sanity_check: WARNING: TCP_WND is larger than space provided by PBUF_POOL_SIZE*PBUF_POOL_BUFSIZE\n")); + if (TCP_WND < TCP_MSS) + LWIP_PLATFORM_DIAG(("lwip_sanity_check: WARNING: TCP_WND is smaller than MSS\n")); +#endif /* LWIP_TCP */ +} +#else /* LWIP_DEBUG */ +#define lwip_sanity_check() +#endif /* LWIP_DEBUG */ + +/** + * Perform Sanity check of user-configurable values, and initialize all modules. + */ +void +lwip_init(void) +{ + /* Sanity check user-configurable values */ + lwip_sanity_check(); + + /* Modules initialization */ + stats_init(); + sys_init(); + mem_init(); + memp_init(); + pbuf_init(); + netif_init(); +#if LWIP_SOCKET + lwip_socket_init(); +#endif /* LWIP_SOCKET */ + ip_init(); +#if LWIP_ARP + etharp_init(); +#endif /* LWIP_ARP */ +#if LWIP_RAW + raw_init(); +#endif /* LWIP_RAW */ +#if LWIP_UDP + udp_init(); +#endif /* LWIP_UDP */ +#if LWIP_TCP + tcp_init(); +#endif /* LWIP_TCP */ +#if LWIP_SNMP + snmp_init(); +#endif /* LWIP_SNMP */ +#if LWIP_AUTOIP + autoip_init(); +#endif /* LWIP_AUTOIP */ +#if LWIP_IGMP + igmp_init(); +#endif /* LWIP_IGMP */ +#if LWIP_DNS + dns_init(); +#endif /* LWIP_DNS */ +} diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/autoip.c b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/autoip.c new file mode 100644 index 000000000..dde6b6d05 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/autoip.c @@ -0,0 +1,499 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/** + * @file + * AutoIP Automatic LinkLocal IP Configuration + * + */ + +/* + * + * Copyright (c) 2007 Dominik Spies + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * Author: Dominik Spies + * + * This is a AutoIP implementation for the lwIP TCP/IP stack. It aims to conform + * with RFC 3927. + * + * + * Please coordinate changes and requests with Dominik Spies + * + */ + +/******************************************************************************* + * USAGE: + * + * define LWIP_AUTOIP 1 in your lwipopts.h + * + * If you don't use tcpip.c (so, don't call, you don't call tcpip_init): + * - First, call autoip_init(). + * - call autoip_tmr() all AUTOIP_TMR_INTERVAL msces, + * that should be defined in autoip.h. + * I recommend a value of 100. The value must divide 1000 with a remainder almost 0. + * Possible values are 1000, 500, 333, 250, 200, 166, 142, 125, 111, 100 .... + * + * Without DHCP: + * - Call autoip_start() after netif_add(). + * + * With DHCP: + * - define LWIP_DHCP_AUTOIP_COOP 1 in your lwipopts.h. + * - Configure your DHCP Client. + * + */ + +#include "lwip/opt.h" + +#if LWIP_AUTOIP /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/mem.h" +#include "lwip/udp.h" +#include "lwip/ip_addr.h" +#include "lwip/netif.h" +#include "lwip/autoip.h" +#include "netif/etharp.h" + +#include +#include + +/* 169.254.0.0 */ +#define AUTOIP_NET 0xA9FE0000 +/* 169.254.1.0 */ +#define AUTOIP_RANGE_START (AUTOIP_NET | 0x0100) +/* 169.254.254.255 */ +#define AUTOIP_RANGE_END (AUTOIP_NET | 0xFEFF) + + +/** Pseudo random macro based on netif informations. + * You could use "rand()" from the C Library if you define LWIP_AUTOIP_RAND in lwipopts.h */ +#ifndef LWIP_AUTOIP_RAND +#define LWIP_AUTOIP_RAND(netif) ( (((u32_t)((netif->hwaddr[5]) & 0xff) << 24) | \ + ((u32_t)((netif->hwaddr[3]) & 0xff) << 16) | \ + ((u32_t)((netif->hwaddr[2]) & 0xff) << 8) | \ + ((u32_t)((netif->hwaddr[4]) & 0xff))) + \ + (netif->autoip?netif->autoip->tried_llipaddr:0)) +#endif /* LWIP_AUTOIP_RAND */ + +/** + * Macro that generates the initial IP address to be tried by AUTOIP. + * If you want to override this, define it to something else in lwipopts.h. + */ +#ifndef LWIP_AUTOIP_CREATE_SEED_ADDR +#define LWIP_AUTOIP_CREATE_SEED_ADDR(netif) \ + htonl(AUTOIP_RANGE_START + ((u32_t)(((u8_t)(netif->hwaddr[4])) | \ + ((u32_t)((u8_t)(netif->hwaddr[5]))) << 8))) +#endif /* LWIP_AUTOIP_CREATE_SEED_ADDR */ + +/* static functions */ +static void autoip_handle_arp_conflict(struct netif *netif); + +/* creates a pseudo random LL IP-Address for a network interface */ +static void autoip_create_addr(struct netif *netif, struct ip_addr *ipaddr); + +/* sends an ARP probe */ +static err_t autoip_arp_probe(struct netif *netif); + +/* sends an ARP announce */ +static err_t autoip_arp_announce(struct netif *netif); + +/* configure interface for use with current LL IP-Address */ +static err_t autoip_bind(struct netif *netif); + +/* start sending probes for llipaddr */ +static void autoip_start_probing(struct netif *netif); + +/** + * Initialize this module + */ +void +autoip_init(void) +{ + LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE, ("autoip_init()\n")); +} + +/** + * Handle a IP address conflict after an ARP conflict detection + */ +static void +autoip_handle_arp_conflict(struct netif *netif) +{ + /* Somehow detect if we are defending or retreating */ + unsigned char defend = 1; /* tbd */ + + if(defend) { + if(netif->autoip->lastconflict > 0) { + /* retreat, there was a conflicting ARP in the last + * DEFEND_INTERVAL seconds + */ + LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, + ("autoip_handle_arp_conflict(): we are defending, but in DEFEND_INTERVAL, retreating\n")); + + /* TODO: close all TCP sessions */ + autoip_start(netif); + } else { + LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, + ("autoip_handle_arp_conflict(): we are defend, send ARP Announce\n")); + autoip_arp_announce(netif); + netif->autoip->lastconflict = DEFEND_INTERVAL * AUTOIP_TICKS_PER_SECOND; + } + } else { + LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, + ("autoip_handle_arp_conflict(): we do not defend, retreating\n")); + /* TODO: close all TCP sessions */ + autoip_start(netif); + } +} + +/** + * Create an IP-Address out of range 169.254.1.0 to 169.254.254.255 + * + * @param netif network interface on which create the IP-Address + * @param ipaddr ip address to initialize + */ +static void +autoip_create_addr(struct netif *netif, struct ip_addr *ipaddr) +{ + /* Here we create an IP-Address out of range 169.254.1.0 to 169.254.254.255 + * compliant to RFC 3927 Section 2.1 + * We have 254 * 256 possibilities */ + + u32_t addr = ntohl(LWIP_AUTOIP_CREATE_SEED_ADDR(netif)); + addr += netif->autoip->tried_llipaddr; + addr = AUTOIP_NET | (addr & 0xffff); + /* Now, 169.254.0.0 <= addr <= 169.254.255.255 */ + + if (addr < AUTOIP_RANGE_START) { + addr += AUTOIP_RANGE_END - AUTOIP_RANGE_START + 1; + } + if (addr > AUTOIP_RANGE_END) { + addr -= AUTOIP_RANGE_END - AUTOIP_RANGE_START + 1; + } + LWIP_ASSERT("AUTOIP address not in range", (addr >= AUTOIP_RANGE_START) && + (addr <= AUTOIP_RANGE_END)); + ipaddr->addr = htonl(addr); + + LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, + ("autoip_create_addr(): tried_llipaddr=%"U16_F", 0x%08"X32_F"\n", + (u16_t)(netif->autoip->tried_llipaddr), (u32_t)(ipaddr->addr))); +} + +/** + * Sends an ARP probe from a network interface + * + * @param netif network interface used to send the probe + */ +static err_t +autoip_arp_probe(struct netif *netif) +{ + return etharp_raw(netif, (struct eth_addr *)netif->hwaddr, ðbroadcast, + (struct eth_addr *)netif->hwaddr, IP_ADDR_ANY, ðzero, + &netif->autoip->llipaddr, ARP_REQUEST); +} + +/** + * Sends an ARP announce from a network interface + * + * @param netif network interface used to send the announce + */ +static err_t +autoip_arp_announce(struct netif *netif) +{ + return etharp_raw(netif, (struct eth_addr *)netif->hwaddr, ðbroadcast, + (struct eth_addr *)netif->hwaddr, &netif->autoip->llipaddr, ðzero, + &netif->autoip->llipaddr, ARP_REQUEST); +} + +/** + * Configure interface for use with current LL IP-Address + * + * @param netif network interface to configure with current LL IP-Address + */ +static err_t +autoip_bind(struct netif *netif) +{ + struct autoip *autoip = netif->autoip; + struct ip_addr sn_mask, gw_addr; + + LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE, + ("autoip_bind(netif=%p) %c%c%"U16_F" 0x%08"X32_F"\n", + (void*)netif, netif->name[0], netif->name[1], (u16_t)netif->num, autoip->llipaddr.addr)); + + IP4_ADDR(&sn_mask, 255, 255, 0, 0); + IP4_ADDR(&gw_addr, 0, 0, 0, 0); + + netif_set_ipaddr(netif, &autoip->llipaddr); + netif_set_netmask(netif, &sn_mask); + netif_set_gw(netif, &gw_addr); + + /* bring the interface up */ + netif_set_up(netif); + + return ERR_OK; +} + +/** + * Start AutoIP client + * + * @param netif network interface on which start the AutoIP client + */ +err_t +autoip_start(struct netif *netif) +{ + struct autoip *autoip = netif->autoip; + err_t result = ERR_OK; + + if(netif_is_up(netif)) { + netif_set_down(netif); + } + + /* Set IP-Address, Netmask and Gateway to 0 to make sure that + * ARP Packets are formed correctly + */ + netif->ip_addr.addr = 0; + netif->netmask.addr = 0; + netif->gw.addr = 0; + + LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, + ("autoip_start(netif=%p) %c%c%"U16_F"\n", (void*)netif, netif->name[0], + netif->name[1], (u16_t)netif->num)); + if(autoip == NULL) { + /* no AutoIP client attached yet? */ + LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE, + ("autoip_start(): starting new AUTOIP client\n")); + autoip = mem_malloc(sizeof(struct autoip)); + if(autoip == NULL) { + LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE, + ("autoip_start(): could not allocate autoip\n")); + return ERR_MEM; + } + memset( autoip, 0, sizeof(struct autoip)); + /* store this AutoIP client in the netif */ + netif->autoip = autoip; + LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE, ("autoip_start(): allocated autoip")); + } else { + autoip->state = AUTOIP_STATE_OFF; + autoip->ttw = 0; + autoip->sent_num = 0; + memset(&autoip->llipaddr, 0, sizeof(struct ip_addr)); + autoip->lastconflict = 0; + } + + autoip_create_addr(netif, &(autoip->llipaddr)); + autoip->tried_llipaddr++; + autoip_start_probing(netif); + + return result; +} + +static void +autoip_start_probing(struct netif *netif) +{ + struct autoip *autoip = netif->autoip; + + autoip->state = AUTOIP_STATE_PROBING; + autoip->sent_num = 0; + + /* time to wait to first probe, this is randomly + * choosen out of 0 to PROBE_WAIT seconds. + * compliant to RFC 3927 Section 2.2.1 + */ + autoip->ttw = (u16_t)(LWIP_AUTOIP_RAND(netif) % (PROBE_WAIT * AUTOIP_TICKS_PER_SECOND)); + + /* + * if we tried more then MAX_CONFLICTS we must limit our rate for + * accquiring and probing address + * compliant to RFC 3927 Section 2.2.1 + */ + if(autoip->tried_llipaddr > MAX_CONFLICTS) { + autoip->ttw = RATE_LIMIT_INTERVAL * AUTOIP_TICKS_PER_SECOND; + } +} + +/** + * Handle a possible change in the network configuration. + * + * If there is an AutoIP address configured, take the interface down + * and begin probing with the same address. + */ +void +autoip_network_changed(struct netif *netif) +{ + if (netif->autoip && netif->autoip->state != AUTOIP_STATE_OFF) { + netif_set_down(netif); + autoip_start_probing(netif); + } +} + +/** + * Stop AutoIP client + * + * @param netif network interface on which stop the AutoIP client + */ +err_t +autoip_stop(struct netif *netif) +{ + netif->autoip->state = AUTOIP_STATE_OFF; + netif_set_down(netif); + return ERR_OK; +} + +/** + * Has to be called in loop every AUTOIP_TMR_INTERVAL milliseconds + */ +void +autoip_tmr() +{ + struct netif *netif = netif_list; + /* loop through netif's */ + while (netif != NULL) { + /* only act on AutoIP configured interfaces */ + if (netif->autoip != NULL) { + if(netif->autoip->lastconflict > 0) { + netif->autoip->lastconflict--; + } + + LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE, + ("autoip_tmr() AutoIP-State: %"U16_F", ttw=%"U16_F"\n", + (u16_t)(netif->autoip->state), netif->autoip->ttw)); + + switch(netif->autoip->state) { + case AUTOIP_STATE_PROBING: + if(netif->autoip->ttw > 0) { + netif->autoip->ttw--; + } else { + if(netif->autoip->sent_num >= PROBE_NUM) { + netif->autoip->state = AUTOIP_STATE_ANNOUNCING; + netif->autoip->sent_num = 0; + netif->autoip->ttw = ANNOUNCE_WAIT * AUTOIP_TICKS_PER_SECOND; + } else { + autoip_arp_probe(netif); + LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE, + ("autoip_tmr() PROBING Sent Probe\n")); + netif->autoip->sent_num++; + /* calculate time to wait to next probe */ + netif->autoip->ttw = (u16_t)((LWIP_AUTOIP_RAND(netif) % + ((PROBE_MAX - PROBE_MIN) * AUTOIP_TICKS_PER_SECOND) ) + + PROBE_MIN * AUTOIP_TICKS_PER_SECOND); + } + } + break; + + case AUTOIP_STATE_ANNOUNCING: + if(netif->autoip->ttw > 0) { + netif->autoip->ttw--; + } else { + if(netif->autoip->sent_num == 0) { + /* We are here the first time, so we waited ANNOUNCE_WAIT seconds + * Now we can bind to an IP address and use it. + * + * autoip_bind calls netif_set_up. This triggers a gratuitous ARP + * which counts as an announcement. + */ + autoip_bind(netif); + } else { + autoip_arp_announce(netif); + LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE, + ("autoip_tmr() ANNOUNCING Sent Announce\n")); + } + netif->autoip->ttw = ANNOUNCE_INTERVAL * AUTOIP_TICKS_PER_SECOND; + netif->autoip->sent_num++; + + if(netif->autoip->sent_num >= ANNOUNCE_NUM) { + netif->autoip->state = AUTOIP_STATE_BOUND; + netif->autoip->sent_num = 0; + netif->autoip->ttw = 0; + } + } + break; + } + } + /* proceed to next network interface */ + netif = netif->next; + } +} + +/** + * Handles every incoming ARP Packet, called by etharp_arp_input. + * + * @param netif network interface to use for autoip processing + * @param hdr Incoming ARP packet + */ +void +autoip_arp_reply(struct netif *netif, struct etharp_hdr *hdr) +{ + LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE, ("autoip_arp_reply()\n")); + if ((netif->autoip != NULL) && (netif->autoip->state != AUTOIP_STATE_OFF)) { + /* when ip.src == llipaddr && hw.src != netif->hwaddr + * + * when probing ip.dst == llipaddr && hw.src != netif->hwaddr + * we have a conflict and must solve it + */ + struct ip_addr sipaddr, dipaddr; + struct eth_addr netifaddr; + netifaddr.addr[0] = netif->hwaddr[0]; + netifaddr.addr[1] = netif->hwaddr[1]; + netifaddr.addr[2] = netif->hwaddr[2]; + netifaddr.addr[3] = netif->hwaddr[3]; + netifaddr.addr[4] = netif->hwaddr[4]; + netifaddr.addr[5] = netif->hwaddr[5]; + + /* Copy struct ip_addr2 to aligned ip_addr, to support compilers without + * structure packing (not using structure copy which breaks strict-aliasing rules). + */ + SMEMCPY(&sipaddr, &hdr->sipaddr, sizeof(sipaddr)); + SMEMCPY(&dipaddr, &hdr->dipaddr, sizeof(dipaddr)); + + if ((netif->autoip->state == AUTOIP_STATE_PROBING) || + ((netif->autoip->state == AUTOIP_STATE_ANNOUNCING) && + (netif->autoip->sent_num == 0))) { + /* RFC 3927 Section 2.2.1: + * from beginning to after ANNOUNCE_WAIT + * seconds we have a conflict if + * ip.src == llipaddr OR + * ip.dst == llipaddr && hw.src != own hwaddr + */ + if ((ip_addr_cmp(&sipaddr, &netif->autoip->llipaddr)) || + (ip_addr_cmp(&dipaddr, &netif->autoip->llipaddr) && + !eth_addr_cmp(&netifaddr, &hdr->shwaddr))) { + LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE | LWIP_DBG_LEVEL_WARNING, + ("autoip_arp_reply(): Probe Conflict detected\n")); + autoip_start(netif); + } + } else { + /* RFC 3927 Section 2.5: + * in any state we have a conflict if + * ip.src == llipaddr && hw.src != own hwaddr + */ + if (ip_addr_cmp(&sipaddr, &netif->autoip->llipaddr) && + !eth_addr_cmp(&netifaddr, &hdr->shwaddr)) { + LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE | LWIP_DBG_LEVEL_WARNING, + ("autoip_arp_reply(): Conflicting ARP-Packet detected\n")); + autoip_handle_arp_conflict(netif); + } + } + } +} + +#endif /* LWIP_AUTOIP */ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/icmp.c b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/icmp.c new file mode 100644 index 000000000..3ee17ae57 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/icmp.c @@ -0,0 +1,333 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/** + * @file + * ICMP - Internet Control Message Protocol + * + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +/* Some ICMP messages should be passed to the transport protocols. This + is not implemented. */ + +#include "lwip/opt.h" + +#if LWIP_ICMP /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/icmp.h" +#include "lwip/inet.h" +#include "lwip/inet_chksum.h" +#include "lwip/ip.h" +#include "lwip/def.h" +#include "lwip/stats.h" +#include "lwip/snmp.h" + +#include + +/** Small optimization: set to 0 if incoming PBUF_POOL pbuf always can be + * used to modify and send a response packet (and to 1 if this is not the case, + * e.g. when link header is stripped of when receiving) */ +#ifndef LWIP_ICMP_ECHO_CHECK_INPUT_PBUF_LEN +#define LWIP_ICMP_ECHO_CHECK_INPUT_PBUF_LEN 1 +#endif /* LWIP_ICMP_ECHO_CHECK_INPUT_PBUF_LEN */ + +/* The amount of data from the original packet to return in a dest-unreachable */ +#define ICMP_DEST_UNREACH_DATASIZE 8 + +static void icmp_send_response(struct pbuf *p, u8_t type, u8_t code); + +/** + * Processes ICMP input packets, called from ip_input(). + * + * Currently only processes icmp echo requests and sends + * out the echo response. + * + * @param p the icmp echo request packet, p->payload pointing to the ip header + * @param inp the netif on which this packet was received + */ +void +icmp_input(struct pbuf *p, struct netif *inp) +{ + u8_t type; +#ifdef LWIP_DEBUG + u8_t code; +#endif /* LWIP_DEBUG */ + struct icmp_echo_hdr *iecho; + struct ip_hdr *iphdr; + struct ip_addr tmpaddr; + s16_t hlen; + + ICMP_STATS_INC(icmp.recv); + snmp_inc_icmpinmsgs(); + + + iphdr = p->payload; + hlen = IPH_HL(iphdr) * 4; + if (pbuf_header(p, -hlen) || (p->tot_len < sizeof(u16_t)*2)) { + LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: short ICMP (%"U16_F" bytes) received\n", p->tot_len)); + goto lenerr; + } + + type = *((u8_t *)p->payload); +#ifdef LWIP_DEBUG + code = *(((u8_t *)p->payload)+1); +#endif /* LWIP_DEBUG */ + switch (type) { + case ICMP_ECHO: +#if !LWIP_MULTICAST_PING || !LWIP_BROADCAST_PING + { + int accepted = 1; +#if !LWIP_MULTICAST_PING + /* multicast destination address? */ + if (ip_addr_ismulticast(&iphdr->dest)) { + accepted = 0; + } +#endif /* LWIP_MULTICAST_PING */ +#if !LWIP_BROADCAST_PING + /* broadcast destination address? */ + if (ip_addr_isbroadcast(&iphdr->dest, inp)) { + accepted = 0; + } +#endif /* LWIP_BROADCAST_PING */ + /* broadcast or multicast destination address not acceptd? */ + if (!accepted) { + LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: Not echoing to multicast or broadcast pings\n")); + ICMP_STATS_INC(icmp.err); + pbuf_free(p); + return; + } + } +#endif /* !LWIP_MULTICAST_PING || !LWIP_BROADCAST_PING */ + LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: ping\n")); + if (p->tot_len < sizeof(struct icmp_echo_hdr)) { + LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: bad ICMP echo received\n")); + goto lenerr; + } + if (inet_chksum_pbuf(p) != 0) { + LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: checksum failed for received ICMP echo\n")); + pbuf_free(p); + ICMP_STATS_INC(icmp.chkerr); + snmp_inc_icmpinerrors(); + return; + } +#if LWIP_ICMP_ECHO_CHECK_INPUT_PBUF_LEN + if (pbuf_header(p, (PBUF_IP_HLEN + PBUF_LINK_HLEN))) { + /* p is not big enough to contain link headers + * allocate a new one and copy p into it + */ + struct pbuf *r; + /* switch p->payload to ip header */ + if (pbuf_header(p, hlen)) { + LWIP_ASSERT("icmp_input: moving p->payload to ip header failed\n", 0); + goto memerr; + } + /* allocate new packet buffer with space for link headers */ + r = pbuf_alloc(PBUF_LINK, p->tot_len, PBUF_RAM); + if (r == NULL) { + LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: allocating new pbuf failed\n")); + goto memerr; + } + LWIP_ASSERT("check that first pbuf can hold struct the ICMP header", + (r->len >= hlen + sizeof(struct icmp_echo_hdr))); + /* copy the whole packet including ip header */ + if (pbuf_copy(r, p) != ERR_OK) { + LWIP_ASSERT("icmp_input: copying to new pbuf failed\n", 0); + goto memerr; + } + iphdr = r->payload; + /* switch r->payload back to icmp header */ + if (pbuf_header(r, -hlen)) { + LWIP_ASSERT("icmp_input: restoring original p->payload failed\n", 0); + goto memerr; + } + /* free the original p */ + pbuf_free(p); + /* we now have an identical copy of p that has room for link headers */ + p = r; + } else { + /* restore p->payload to point to icmp header */ + if (pbuf_header(p, -(s16_t)(PBUF_IP_HLEN + PBUF_LINK_HLEN))) { + LWIP_ASSERT("icmp_input: restoring original p->payload failed\n", 0); + goto memerr; + } + } +#endif /* LWIP_ICMP_ECHO_CHECK_INPUT_PBUF_LEN */ + /* At this point, all checks are OK. */ + /* We generate an answer by switching the dest and src ip addresses, + * setting the icmp type to ECHO_RESPONSE and updating the checksum. */ + iecho = p->payload; + tmpaddr.addr = iphdr->src.addr; + iphdr->src.addr = iphdr->dest.addr; + iphdr->dest.addr = tmpaddr.addr; + ICMPH_TYPE_SET(iecho, ICMP_ER); + /* adjust the checksum */ + if (iecho->chksum >= htons(0xffff - (ICMP_ECHO << 8))) { + iecho->chksum += htons(ICMP_ECHO << 8) + 1; + } else { + iecho->chksum += htons(ICMP_ECHO << 8); + } + + /* Set the correct TTL and recalculate the header checksum. */ + IPH_TTL_SET(iphdr, ICMP_TTL); + IPH_CHKSUM_SET(iphdr, 0); +#if CHECKSUM_GEN_IP + IPH_CHKSUM_SET(iphdr, inet_chksum(iphdr, IP_HLEN)); +#endif /* CHECKSUM_GEN_IP */ + + ICMP_STATS_INC(icmp.xmit); + /* increase number of messages attempted to send */ + snmp_inc_icmpoutmsgs(); + /* increase number of echo replies attempted to send */ + snmp_inc_icmpoutechoreps(); + + if(pbuf_header(p, hlen)) { + LWIP_ASSERT("Can't move over header in packet", 0); + } else { + err_t ret; + ret = ip_output_if(p, &(iphdr->src), IP_HDRINCL, + ICMP_TTL, 0, IP_PROTO_ICMP, inp); + if (ret != ERR_OK) { + LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: ip_output_if returned an error: %c.\n", ret)); + } + } + break; + default: + LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: ICMP type %"S16_F" code %"S16_F" not supported.\n", + (s16_t)type, (s16_t)code)); + ICMP_STATS_INC(icmp.proterr); + ICMP_STATS_INC(icmp.drop); + } + pbuf_free(p); + return; +lenerr: + pbuf_free(p); + ICMP_STATS_INC(icmp.lenerr); + snmp_inc_icmpinerrors(); + return; +#if LWIP_ICMP_ECHO_CHECK_INPUT_PBUF_LEN +memerr: + pbuf_free(p); + ICMP_STATS_INC(icmp.err); + snmp_inc_icmpinerrors(); + return; +#endif /* LWIP_ICMP_ECHO_CHECK_INPUT_PBUF_LEN */ +} + +/** + * Send an icmp 'destination unreachable' packet, called from ip_input() if + * the transport layer protocol is unknown and from udp_input() if the local + * port is not bound. + * + * @param p the input packet for which the 'unreachable' should be sent, + * p->payload pointing to the IP header + * @param t type of the 'unreachable' packet + */ +void +icmp_dest_unreach(struct pbuf *p, enum icmp_dur_type t) +{ + icmp_send_response(p, ICMP_DUR, t); +} + +#if IP_FORWARD || IP_REASSEMBLY +/** + * Send a 'time exceeded' packet, called from ip_forward() if TTL is 0. + * + * @param p the input packet for which the 'time exceeded' should be sent, + * p->payload pointing to the IP header + * @param t type of the 'time exceeded' packet + */ +void +icmp_time_exceeded(struct pbuf *p, enum icmp_te_type t) +{ + icmp_send_response(p, ICMP_TE, t); +} + +#endif /* IP_FORWARD || IP_REASSEMBLY */ + +/** + * Send an icmp packet in response to an incoming packet. + * + * @param p the input packet for which the 'unreachable' should be sent, + * p->payload pointing to the IP header + * @param type Type of the ICMP header + * @param code Code of the ICMP header + */ +static void +icmp_send_response(struct pbuf *p, u8_t type, u8_t code) +{ + struct pbuf *q; + struct ip_hdr *iphdr; + /* we can use the echo header here */ + struct icmp_echo_hdr *icmphdr; + + /* ICMP header + IP header + 8 bytes of data */ + q = pbuf_alloc(PBUF_IP, sizeof(struct icmp_echo_hdr) + IP_HLEN + ICMP_DEST_UNREACH_DATASIZE, + PBUF_RAM); + if (q == NULL) { + LWIP_DEBUGF(ICMP_DEBUG, ("icmp_time_exceeded: failed to allocate pbuf for ICMP packet.\n")); + return; + } + LWIP_ASSERT("check that first pbuf can hold icmp message", + (q->len >= (sizeof(struct icmp_echo_hdr) + IP_HLEN + ICMP_DEST_UNREACH_DATASIZE))); + + iphdr = p->payload; + LWIP_DEBUGF(ICMP_DEBUG, ("icmp_time_exceeded from ")); + ip_addr_debug_print(ICMP_DEBUG, &(iphdr->src)); + LWIP_DEBUGF(ICMP_DEBUG, (" to ")); + ip_addr_debug_print(ICMP_DEBUG, &(iphdr->dest)); + LWIP_DEBUGF(ICMP_DEBUG, ("\n")); + + icmphdr = q->payload; + icmphdr->type = type; + icmphdr->code = code; + icmphdr->id = 0; + icmphdr->seqno = 0; + + /* copy fields from original packet */ + SMEMCPY((u8_t *)q->payload + sizeof(struct icmp_echo_hdr), (u8_t *)p->payload, + IP_HLEN + ICMP_DEST_UNREACH_DATASIZE); + + /* calculate checksum */ + icmphdr->chksum = 0; + icmphdr->chksum = inet_chksum(icmphdr, q->len); + ICMP_STATS_INC(icmp.xmit); + /* increase number of messages attempted to send */ + snmp_inc_icmpoutmsgs(); + /* increase number of destination unreachable messages attempted to send */ + snmp_inc_icmpouttimeexcds(); + ip_output(q, NULL, &(iphdr->src), ICMP_TTL, 0, IP_PROTO_ICMP); + pbuf_free(q); +} + +#endif /* LWIP_ICMP */ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/igmp.c b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/igmp.c new file mode 100644 index 000000000..b302ef482 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/igmp.c @@ -0,0 +1,759 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/** + * @file + * IGMP - Internet Group Management Protocol + * + */ + +/* + * Copyright (c) 2002 CITEL Technologies Ltd. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of CITEL Technologies Ltd nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY CITEL TECHNOLOGIES AND CONTRIBUTORS ``AS IS'' + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL CITEL TECHNOLOGIES OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is a contribution to the lwIP TCP/IP stack. + * The Swedish Institute of Computer Science and Adam Dunkels + * are specifically granted permission to redistribute this + * source code. +*/ + +/*------------------------------------------------------------- +Note 1) +Although the rfc requires V1 AND V2 capability +we will only support v2 since now V1 is very old (August 1989) +V1 can be added if required + +a debug print and statistic have been implemented to +show this up. +------------------------------------------------------------- +------------------------------------------------------------- +Note 2) +A query for a specific group address (as opposed to ALLHOSTS) +has now been implemented as I am unsure if it is required + +a debug print and statistic have been implemented to +show this up. +------------------------------------------------------------- +------------------------------------------------------------- +Note 3) +The router alert rfc 2113 is implemented in outgoing packets +but not checked rigorously incoming +------------------------------------------------------------- +Steve Reynolds +------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- + * RFC 988 - Host extensions for IP multicasting - V0 + * RFC 1054 - Host extensions for IP multicasting - + * RFC 1112 - Host extensions for IP multicasting - V1 + * RFC 2236 - Internet Group Management Protocol, Version 2 - V2 <- this code is based on this RFC (it's the "de facto" standard) + * RFC 3376 - Internet Group Management Protocol, Version 3 - V3 + * RFC 4604 - Using Internet Group Management Protocol Version 3... - V3+ + * RFC 2113 - IP Router Alert Option - + *----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- + * Includes + *----------------------------------------------------------------------------*/ + +#include "lwip/opt.h" + +#if LWIP_IGMP /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/igmp.h" +#include "lwip/debug.h" +#include "lwip/def.h" +#include "lwip/mem.h" +#include "lwip/ip.h" +#include "lwip/inet.h" +#include "lwip/inet_chksum.h" +#include "lwip/netif.h" +#include "lwip/icmp.h" +#include "lwip/udp.h" +#include "lwip/tcp.h" +#include "lwip/stats.h" + +#include "string.h" + +/*----------------------------------------------------------------------------- + * Globales + *----------------------------------------------------------------------------*/ + +static struct igmp_group* igmp_group_list; +static struct ip_addr allsystems; +static struct ip_addr allrouters; + +/** + * Initialize the IGMP module + */ +void +igmp_init(void) +{ + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_init: initializing\n")); + + IP4_ADDR(&allsystems, 224, 0, 0, 1); + IP4_ADDR(&allrouters, 224, 0, 0, 2); +} + +#ifdef LWIP_DEBUG +/** + * Dump global IGMP groups list + */ +void +igmp_dump_group_list() +{ + struct igmp_group *group = igmp_group_list; + + while (group != NULL) { + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_dump_group_list: [%"U32_F"] ", (u32_t)(group->group_state))); + ip_addr_debug_print(IGMP_DEBUG, &group->group_address); + LWIP_DEBUGF(IGMP_DEBUG, (" on if %p\n", group->interface)); + group = group->next; + } + LWIP_DEBUGF(IGMP_DEBUG, ("\n")); +} +#else +#define igmp_dump_group_list() +#endif /* LWIP_DEBUG */ + +/** + * Start IGMP processing on interface + * + * @param netif network interface on which start IGMP processing + */ +err_t +igmp_start(struct netif *netif) +{ + struct igmp_group* group; + + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_start: starting IGMP processing on if %p\n", netif)); + + group = igmp_lookup_group(netif, &allsystems); + + if (group != NULL) { + group->group_state = IGMP_GROUP_IDLE_MEMBER; + group->use++; + + /* Allow the igmp messages at the MAC level */ + if (netif->igmp_mac_filter != NULL) { + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_start: igmp_mac_filter(ADD ")); + ip_addr_debug_print(IGMP_DEBUG, &allsystems); + LWIP_DEBUGF(IGMP_DEBUG, (") on if %p\n", netif)); + netif->igmp_mac_filter( netif, &allsystems, IGMP_ADD_MAC_FILTER); + } + + return ERR_OK; + } + + return ERR_MEM; +} + +/** + * Stop IGMP processing on interface + * + * @param netif network interface on which stop IGMP processing + */ +err_t +igmp_stop(struct netif *netif) +{ + struct igmp_group *group = igmp_group_list; + struct igmp_group *prev = NULL; + struct igmp_group *next; + + /* look for groups joined on this interface further down the list */ + while (group != NULL) { + next = group->next; + /* is it a group joined on this interface? */ + if (group->interface == netif) { + /* is it the first group of the list? */ + if (group == igmp_group_list) { + igmp_group_list = next; + } + /* is there a "previous" group defined? */ + if (prev != NULL) { + prev->next = next; + } + /* disable the group at the MAC level */ + if (netif->igmp_mac_filter != NULL) { + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_stop: igmp_mac_filter(DEL ")); + ip_addr_debug_print(IGMP_DEBUG, &group->group_address); + LWIP_DEBUGF(IGMP_DEBUG, (") on if %p\n", netif)); + netif->igmp_mac_filter(netif, &(group->group_address), IGMP_DEL_MAC_FILTER); + } + /* free group */ + memp_free(MEMP_IGMP_GROUP, group); + } else { + /* change the "previous" */ + prev = group; + } + /* move to "next" */ + group = next; + } + return ERR_OK; +} + +/** + * Report IGMP memberships for this interface + * + * @param netif network interface on which report IGMP memberships + */ +void +igmp_report_groups( struct netif *netif) +{ + struct igmp_group *group = igmp_group_list; + + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_report_groups: sending IGMP reports on if %p\n", netif)); + + while (group != NULL) { + if (group->interface == netif) { + igmp_delaying_member( group, IGMP_JOIN_DELAYING_MEMBER_TMR); + } + group = group->next; + } +} + +/** + * Search for a group in the global igmp_group_list + * + * @param ifp the network interface for which to look + * @param addr the group ip address to search for + * @return a struct igmp_group* if the group has been found, + * NULL if the group wasn't found. + */ +struct igmp_group * +igmp_lookfor_group(struct netif *ifp, struct ip_addr *addr) +{ + struct igmp_group *group = igmp_group_list; + + while (group != NULL) { + if ((group->interface == ifp) && (ip_addr_cmp(&(group->group_address), addr))) { + return group; + } + group = group->next; + } + + /* to be clearer, we return NULL here instead of + * 'group' (which is also NULL at this point). + */ + return NULL; +} + +/** + * Search for a specific igmp group and create a new one if not found- + * + * @param ifp the network interface for which to look + * @param addr the group ip address to search + * @return a struct igmp_group*, + * NULL on memory error. + */ +struct igmp_group * +igmp_lookup_group(struct netif *ifp, struct ip_addr *addr) +{ + struct igmp_group *group = igmp_group_list; + + /* Search if the group already exists */ + group = igmp_lookfor_group(ifp, addr); + if (group != NULL) { + /* Group already exists. */ + return group; + } + + /* Group doesn't exist yet, create a new one */ + group = memp_malloc(MEMP_IGMP_GROUP); + if (group != NULL) { + group->interface = ifp; + ip_addr_set(&(group->group_address), addr); + group->timer = 0; /* Not running */ + group->group_state = IGMP_GROUP_NON_MEMBER; + group->last_reporter_flag = 0; + group->use = 0; + group->next = igmp_group_list; + + igmp_group_list = group; + } + + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_lookup_group: %sallocated a new group with address ", (group?"":"impossible to "))); + ip_addr_debug_print(IGMP_DEBUG, addr); + LWIP_DEBUGF(IGMP_DEBUG, (" on if %p\n", ifp)); + + return group; +} + +/** + * Remove a group in the global igmp_group_list + * + * @param group the group to remove from the global igmp_group_list + * @return ERR_OK if group was removed from the list, an err_t otherwise + */ +err_t +igmp_remove_group(struct igmp_group *group) +{ + err_t err = ERR_OK; + + /* Is it the first group? */ + if (igmp_group_list == group) { + igmp_group_list = group->next; + } else { + /* look for group further down the list */ + struct igmp_group *tmpGroup; + for (tmpGroup = igmp_group_list; tmpGroup != NULL; tmpGroup = tmpGroup->next) { + if (tmpGroup->next == group) { + tmpGroup->next = group->next; + break; + } + } + /* Group not found in the global igmp_group_list */ + if (tmpGroup == NULL) + err = ERR_ARG; + } + /* free group */ + memp_free(MEMP_IGMP_GROUP, group); + + return err; +} + +/** + * Called from ip_input() if a new IGMP packet is received. + * + * @param p received igmp packet, p->payload pointing to the ip header + * @param inp network interface on which the packet was received + * @param dest destination ip address of the igmp packet + */ +void +igmp_input(struct pbuf *p, struct netif *inp, struct ip_addr *dest) +{ + struct ip_hdr * iphdr; + struct igmp_msg* igmp; + struct igmp_group* group; + struct igmp_group* groupref; + + /* Note that the length CAN be greater than 8 but only 8 are used - All are included in the checksum */ + iphdr = p->payload; + if (pbuf_header(p, -(s16_t)(IPH_HL(iphdr) * 4)) || (p->len < IGMP_MINLEN)) { + pbuf_free(p); + IGMP_STATS_INC(igmp.lenerr); + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_input: length error\n")); + return; + } + + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_input: message from ")); + ip_addr_debug_print(IGMP_DEBUG, &(iphdr->src)); + LWIP_DEBUGF(IGMP_DEBUG, (" to address ")); + ip_addr_debug_print(IGMP_DEBUG, &(iphdr->dest)); + LWIP_DEBUGF(IGMP_DEBUG, (" on if %p\n", inp)); + + /* Now calculate and check the checksum */ + igmp = (struct igmp_msg *)p->payload; + if (inet_chksum(igmp, p->len)) { + pbuf_free(p); + IGMP_STATS_INC(igmp.chkerr); + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_input: checksum error\n")); + return; + } + + /* Packet is ok so find an existing group */ + group = igmp_lookfor_group(inp, dest); /* use the incoming IP address! */ + + /* If group can be found or create... */ + if (!group) { + pbuf_free(p); + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_input: IGMP frame not for us\n")); + return; + } + + /* NOW ACT ON THE INCOMING MESSAGE TYPE... */ + switch (igmp->igmp_msgtype) { + case IGMP_MEMB_QUERY: { + /* IGMP_MEMB_QUERY to the "all systems" address ? */ + if ((ip_addr_cmp(dest, &allsystems)) && (igmp->igmp_group_address.addr == 0)) { + /* THIS IS THE GENERAL QUERY */ + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_input: General IGMP_MEMB_QUERY on \"ALL SYSTEMS\" address (224.0.0.1) [igmp_maxresp=%i]\n", (int)(igmp->igmp_maxresp))); + + if (igmp->igmp_maxresp == 0) { + IGMP_STATS_INC(igmp.v1_rxed); + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_input: got an all hosts query with time== 0 - this is V1 and not implemented - treat as v2\n")); + igmp->igmp_maxresp = IGMP_V1_DELAYING_MEMBER_TMR; + } + + IGMP_STATS_INC(igmp.group_query_rxed); + groupref = igmp_group_list; + while (groupref) { + /* Do not send messages on the all systems group address! */ + if ((groupref->interface == inp) && (!(ip_addr_cmp(&(groupref->group_address), &allsystems)))) { + igmp_delaying_member( groupref, igmp->igmp_maxresp); + } + groupref = groupref->next; + } + } else { + /* IGMP_MEMB_QUERY to a specific group ? */ + if (group->group_address.addr != 0) { + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_input: IGMP_MEMB_QUERY to a specific group ")); + ip_addr_debug_print(IGMP_DEBUG, &group->group_address); + if (ip_addr_cmp (dest, &allsystems)) { + LWIP_DEBUGF(IGMP_DEBUG, (" using \"ALL SYSTEMS\" address (224.0.0.1) [igmp_maxresp=%i]\n", (int)(igmp->igmp_maxresp))); + /* we first need to re-lookfor the group since we used dest last time */ + group = igmp_lookfor_group(inp, &igmp->igmp_group_address); + } else { + LWIP_DEBUGF(IGMP_DEBUG, (" with the group address as destination [igmp_maxresp=%i]\n", (int)(igmp->igmp_maxresp))); + } + + if (group != NULL) { + IGMP_STATS_INC(igmp.unicast_query); + igmp_delaying_member( group, igmp->igmp_maxresp); + } + } + } + break; + } + case IGMP_V2_MEMB_REPORT: { + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_input: IGMP_V2_MEMB_REPORT\n")); + + IGMP_STATS_INC(igmp.report_rxed); + if (group->group_state == IGMP_GROUP_DELAYING_MEMBER) { + /* This is on a specific group we have already looked up */ + group->timer = 0; /* stopped */ + group->group_state = IGMP_GROUP_IDLE_MEMBER; + group->last_reporter_flag = 0; + } + break; + } + default: { + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_input: unexpected msg %d in state %d on group %p on if %p\n", + igmp->igmp_msgtype, group->group_state, &group, group->interface)); + break; + } + } + + pbuf_free(p); + return; +} + +/** + * Join a group on one network interface. + * + * @param ifaddr ip address of the network interface which should join a new group + * @param groupaddr the ip address of the group which to join + * @return ERR_OK if group was joined on the netif(s), an err_t otherwise + */ +err_t +igmp_joingroup(struct ip_addr *ifaddr, struct ip_addr *groupaddr) +{ + err_t err = ERR_VAL; /* no matching interface */ + struct igmp_group *group; + struct netif *netif; + + /* make sure it is multicast address */ + LWIP_ERROR("igmp_joingroup: attempt to join non-multicast address", ip_addr_ismulticast(groupaddr), return ERR_VAL;); + LWIP_ERROR("igmp_joingroup: attempt to join allsystems address", (!ip_addr_cmp(groupaddr, &allsystems)), return ERR_VAL;); + + /* loop through netif's */ + netif = netif_list; + while (netif != NULL) { + /* Should we join this interface ? */ + if ((netif->flags & NETIF_FLAG_IGMP) && ((ip_addr_isany(ifaddr) || ip_addr_cmp(&(netif->ip_addr), ifaddr)))) { + /* find group or create a new one if not found */ + group = igmp_lookup_group(netif, groupaddr); + + if (group != NULL) { + /* This should create a new group, check the state to make sure */ + if (group->group_state != IGMP_GROUP_NON_MEMBER) { + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_joingroup: join to group not in state IGMP_GROUP_NON_MEMBER\n")); + } else { + /* OK - it was new group */ + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_joingroup: join to new group: ")); + ip_addr_debug_print(IGMP_DEBUG, groupaddr); + LWIP_DEBUGF(IGMP_DEBUG, ("\n")); + + /* If first use of the group, allow the group at the MAC level */ + if ((group->use==0) && (netif->igmp_mac_filter != NULL)) { + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_joingroup: igmp_mac_filter(ADD ")); + ip_addr_debug_print(IGMP_DEBUG, groupaddr); + LWIP_DEBUGF(IGMP_DEBUG, (") on if %p\n", netif)); + netif->igmp_mac_filter(netif, groupaddr, IGMP_ADD_MAC_FILTER); + } + + IGMP_STATS_INC(igmp.join_sent); + igmp_send(group, IGMP_V2_MEMB_REPORT); + + igmp_start_timer(group, IGMP_JOIN_DELAYING_MEMBER_TMR); + + /* Need to work out where this timer comes from */ + group->group_state = IGMP_GROUP_DELAYING_MEMBER; + } + /* Increment group use */ + group->use++; + /* Join on this interface */ + err = ERR_OK; + } else { + /* Return an error even if some network interfaces are joined */ + /** @todo undo any other netif already joined */ + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_joingroup: Not enought memory to join to group\n")); + return ERR_MEM; + } + } + /* proceed to next network interface */ + netif = netif->next; + } + + return err; +} + +/** + * Leave a group on one network interface. + * + * @param ifaddr ip address of the network interface which should leave a group + * @param groupaddr the ip address of the group which to leave + * @return ERR_OK if group was left on the netif(s), an err_t otherwise + */ +err_t +igmp_leavegroup(struct ip_addr *ifaddr, struct ip_addr *groupaddr) +{ + err_t err = ERR_VAL; /* no matching interface */ + struct igmp_group *group; + struct netif *netif; + + /* make sure it is multicast address */ + LWIP_ERROR("igmp_leavegroup: attempt to leave non-multicast address", ip_addr_ismulticast(groupaddr), return ERR_VAL;); + LWIP_ERROR("igmp_leavegroup: attempt to leave allsystems address", (!ip_addr_cmp(groupaddr, &allsystems)), return ERR_VAL;); + + /* loop through netif's */ + netif = netif_list; + while (netif != NULL) { + /* Should we leave this interface ? */ + if ((netif->flags & NETIF_FLAG_IGMP) && ((ip_addr_isany(ifaddr) || ip_addr_cmp(&(netif->ip_addr), ifaddr)))) { + /* find group */ + group = igmp_lookfor_group(netif, groupaddr); + + if (group != NULL) { + /* Only send a leave if the flag is set according to the state diagram */ + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_leavegroup: Leaving group: ")); + ip_addr_debug_print(IGMP_DEBUG, groupaddr); + LWIP_DEBUGF(IGMP_DEBUG, ("\n")); + + /* If there is no other use of the group */ + if (group->use <= 1) { + /* If we are the last reporter for this group */ + if (group->last_reporter_flag) { + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_leavegroup: sending leaving group\n")); + IGMP_STATS_INC(igmp.leave_sent); + igmp_send(group, IGMP_LEAVE_GROUP); + } + + /* Disable the group at the MAC level */ + if (netif->igmp_mac_filter != NULL) { + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_leavegroup: igmp_mac_filter(DEL ")); + ip_addr_debug_print(IGMP_DEBUG, groupaddr); + LWIP_DEBUGF(IGMP_DEBUG, (") on if %p\n", netif)); + netif->igmp_mac_filter(netif, groupaddr, IGMP_DEL_MAC_FILTER); + } + + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_leavegroup: remove group: ")); + ip_addr_debug_print(IGMP_DEBUG, groupaddr); + LWIP_DEBUGF(IGMP_DEBUG, ("\n")); + + /* Free the group */ + igmp_remove_group(group); + } else { + /* Decrement group use */ + group->use--; + } + /* Leave on this interface */ + err = ERR_OK; + } else { + /* It's not a fatal error on "leavegroup" */ + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_leavegroup: not member of group\n")); + } + } + /* proceed to next network interface */ + netif = netif->next; + } + + return err; +} + +/** + * The igmp timer function (both for NO_SYS=1 and =0) + * Should be called every IGMP_TMR_INTERVAL milliseconds (100 ms is default). + */ +void +igmp_tmr(void) +{ + struct igmp_group *group = igmp_group_list; + + while (group != NULL) { + if (group->timer != 0) { + group->timer -= 1; + if (group->timer == 0) { + igmp_timeout(group); + } + } + group = group->next; + } +} + +/** + * Called if a timeout for one group is reached. + * Sends a report for this group. + * + * @param group an igmp_group for which a timeout is reached + */ +void +igmp_timeout(struct igmp_group *group) +{ + /* If the state is IGMP_GROUP_DELAYING_MEMBER then we send a report for this group */ + if (group->group_state == IGMP_GROUP_DELAYING_MEMBER) { + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_timeout: report membership for group with address ")); + ip_addr_debug_print(IGMP_DEBUG, &(group->group_address)); + LWIP_DEBUGF(IGMP_DEBUG, (" on if %p\n", group->interface)); + + igmp_send(group, IGMP_V2_MEMB_REPORT); + } +} + +/** + * Start a timer for an igmp group + * + * @param group the igmp_group for which to start a timer + * @param max_time the time in multiples of IGMP_TMR_INTERVAL (decrease with + * every call to igmp_tmr()) + */ +void +igmp_start_timer(struct igmp_group *group, u8_t max_time) +{ + /** + * @todo Important !! this should be random 0 -> max_time. Find out how to do this + */ + group->timer = max_time; +} + +/** + * Stop a timer for an igmp_group + * + * @param group the igmp_group for which to stop the timer + */ +void +igmp_stop_timer(struct igmp_group *group) +{ + group->timer = 0; +} + +/** + * Delaying membership report for a group if necessary + * + * @param group the igmp_group for which "delaying" membership report + * @param maxresp query delay + */ +void +igmp_delaying_member( struct igmp_group *group, u8_t maxresp) +{ + if ((group->group_state == IGMP_GROUP_IDLE_MEMBER) || + ((group->group_state == IGMP_GROUP_DELAYING_MEMBER) && (maxresp > group->timer))) { + igmp_start_timer(group, (maxresp)/2); + group->group_state = IGMP_GROUP_DELAYING_MEMBER; + } +} + + +/** + * Sends an IP packet on a network interface. This function constructs the IP header + * and calculates the IP header checksum. If the source IP address is NULL, + * the IP address of the outgoing network interface is filled in as source address. + * + * @param p the packet to send (p->payload points to the data, e.g. next + protocol header; if dest == IP_HDRINCL, p already includes an IP + header and p->payload points to that IP header) + * @param src the source IP address to send from (if src == IP_ADDR_ANY, the + * IP address of the netif used to send is used as source address) + * @param dest the destination IP address to send the packet to + * @param ttl the TTL value to be set in the IP header + * @param proto the PROTOCOL to be set in the IP header + * @param netif the netif on which to send this packet + * @return ERR_OK if the packet was sent OK + * ERR_BUF if p doesn't have enough space for IP/LINK headers + * returns errors returned by netif->output + */ +err_t +igmp_ip_output_if(struct pbuf *p, struct ip_addr *src, struct ip_addr *dest, + u8_t ttl, u8_t proto, struct netif *netif) +{ + /* This is the "router alert" option */ + u16_t ra[2]; + ra[0] = htons (ROUTER_ALERT); + ra[1] = 0x0000; /* Router shall examine packet */ + return ip_output_if_opt(p, src, dest, ttl, 0, proto, netif, ra, ROUTER_ALERTLEN); +} + +/** + * Send an igmp packet to a specific group. + * + * @param group the group to which to send the packet + * @param type the type of igmp packet to send + */ +void +igmp_send(struct igmp_group *group, u8_t type) +{ + struct pbuf* p = NULL; + struct igmp_msg* igmp = NULL; + struct ip_addr src = {0}; + struct ip_addr* dest = NULL; + + /* IP header + "router alert" option + IGMP header */ + p = pbuf_alloc(PBUF_TRANSPORT, IGMP_MINLEN, PBUF_RAM); + + if (p) { + igmp = p->payload; + LWIP_ASSERT("igmp_send: check that first pbuf can hold struct igmp_msg", + (p->len >= sizeof(struct igmp_msg))); + ip_addr_set(&src, &((group->interface)->ip_addr)); + + if (type == IGMP_V2_MEMB_REPORT) { + dest = &(group->group_address); + IGMP_STATS_INC(igmp.report_sent); + ip_addr_set(&(igmp->igmp_group_address), &(group->group_address)); + group->last_reporter_flag = 1; /* Remember we were the last to report */ + } else { + if (type == IGMP_LEAVE_GROUP) { + dest = &allrouters; + ip_addr_set(&(igmp->igmp_group_address), &(group->group_address)); + } + } + + if ((type == IGMP_V2_MEMB_REPORT) || (type == IGMP_LEAVE_GROUP)) { + igmp->igmp_msgtype = type; + igmp->igmp_maxresp = 0; + igmp->igmp_checksum = 0; + igmp->igmp_checksum = inet_chksum( igmp, IGMP_MINLEN); + + igmp_ip_output_if(p, &src, dest, IGMP_TTL, IP_PROTO_IGMP, group->interface); + } + + pbuf_free(p); + } else { + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_send: not enough memory for igmp_send\n")); + } +} + +#endif /* LWIP_IGMP */ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/inet.c b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/inet.c new file mode 100644 index 000000000..0d4f922fe --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/inet.c @@ -0,0 +1,280 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/** + * @file + * Functions common to all TCP/IPv4 modules, such as the byte order functions. + * + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#include "lwip/opt.h" + +#include "lwip/inet.h" + +/* Here for now until needed in other places in lwIP */ +#ifndef isprint +#define in_range(c, lo, up) ((u8_t)c >= lo && (u8_t)c <= up) +#define isprint(c) in_range(c, 0x20, 0x7f) +#define isdigit(c) in_range(c, '0', '9') +#define isxdigit(c) (isdigit(c) || in_range(c, 'a', 'f') || in_range(c, 'A', 'F')) +#define islower(c) in_range(c, 'a', 'z') +#define isspace(c) (c == ' ' || c == '\f' || c == '\n' || c == '\r' || c == '\t' || c == '\v') +#endif + +/** + * Ascii internet address interpretation routine. + * The value returned is in network order. + * + * @param cp IP address in ascii represenation (e.g. "127.0.0.1") + * @return ip address in network order + */ +u32_t +inet_addr(const char *cp) +{ + struct in_addr val; + + if (inet_aton(cp, &val)) { + return (val.s_addr); + } + return (INADDR_NONE); +} + +/** + * Check whether "cp" is a valid ascii representation + * of an Internet address and convert to a binary address. + * Returns 1 if the address is valid, 0 if not. + * This replaces inet_addr, the return value from which + * cannot distinguish between failure and a local broadcast address. + * + * @param cp IP address in ascii represenation (e.g. "127.0.0.1") + * @param addr pointer to which to save the ip address in network order + * @return 1 if cp could be converted to addr, 0 on failure + */ +int +inet_aton(const char *cp, struct in_addr *addr) +{ + u32_t val; + u8_t base; + char c; + u32_t parts[4]; + u32_t *pp = parts; + + c = *cp; + for (;;) { + /* + * Collect number up to ``.''. + * Values are specified as for C: + * 0x=hex, 0=octal, 1-9=decimal. + */ + if (!isdigit(c)) + return (0); + val = 0; + base = 10; + if (c == '0') { + c = *++cp; + if (c == 'x' || c == 'X') { + base = 16; + c = *++cp; + } else + base = 8; + } + for (;;) { + if (isdigit(c)) { + val = (val * base) + (int)(c - '0'); + c = *++cp; + } else if (base == 16 && isxdigit(c)) { + val = (val << 4) | (int)(c + 10 - (islower(c) ? 'a' : 'A')); + c = *++cp; + } else + break; + } + if (c == '.') { + /* + * Internet format: + * a.b.c.d + * a.b.c (with c treated as 16 bits) + * a.b (with b treated as 24 bits) + */ + if (pp >= parts + 3) + return (0); + *pp++ = val; + c = *++cp; + } else + break; + } + /* + * Check for trailing characters. + */ + if (c != '\0' && !isspace(c)) + return (0); + /* + * Concoct the address according to + * the number of parts specified. + */ + switch (pp - parts + 1) { + + case 0: + return (0); /* initial nondigit */ + + case 1: /* a -- 32 bits */ + break; + + case 2: /* a.b -- 8.24 bits */ + if (val > 0xffffffUL) + return (0); + val |= parts[0] << 24; + break; + + case 3: /* a.b.c -- 8.8.16 bits */ + if (val > 0xffff) + return (0); + val |= (parts[0] << 24) | (parts[1] << 16); + break; + + case 4: /* a.b.c.d -- 8.8.8.8 bits */ + if (val > 0xff) + return (0); + val |= (parts[0] << 24) | (parts[1] << 16) | (parts[2] << 8); + break; + } + if (addr) + addr->s_addr = htonl(val); + return (1); +} + +/** + * Convert numeric IP address into decimal dotted ASCII representation. + * returns ptr to static buffer; not reentrant! + * + * @param addr ip address in network order to convert + * @return pointer to a global static (!) buffer that holds the ASCII + * represenation of addr + */ +char * +inet_ntoa(struct in_addr addr) +{ + static char str[16]; + u32_t s_addr = addr.s_addr; + char inv[3]; + char *rp; + u8_t *ap; + u8_t rem; + u8_t n; + u8_t i; + + rp = str; + ap = (u8_t *)&s_addr; + for(n = 0; n < 4; n++) { + i = 0; + do { + rem = *ap % (u8_t)10; + *ap /= (u8_t)10; + inv[i++] = '0' + rem; + } while(*ap); + while(i--) + *rp++ = inv[i]; + *rp++ = '.'; + ap++; + } + *--rp = 0; + return str; +} + +/** + * These are reference implementations of the byte swapping functions. + * Again with the aim of being simple, correct and fully portable. + * Byte swapping is the second thing you would want to optimize. You will + * need to port it to your architecture and in your cc.h: + * + * #define LWIP_PLATFORM_BYTESWAP 1 + * #define LWIP_PLATFORM_HTONS(x) + * #define LWIP_PLATFORM_HTONL(x) + * + * Note ntohs() and ntohl() are merely references to the htonx counterparts. + */ + +#if (LWIP_PLATFORM_BYTESWAP == 0) && (BYTE_ORDER == LITTLE_ENDIAN) + +/** + * Convert an u16_t from host- to network byte order. + * + * @param n u16_t in host byte order + * @return n in network byte order + */ +u16_t +htons(u16_t n) +{ + return ((n & 0xff) << 8) | ((n & 0xff00) >> 8); +} + +/** + * Convert an u16_t from network- to host byte order. + * + * @param n u16_t in network byte order + * @return n in host byte order + */ +u16_t +ntohs(u16_t n) +{ + return htons(n); +} + +/** + * Convert an u32_t from host- to network byte order. + * + * @param n u32_t in host byte order + * @return n in network byte order + */ +u32_t +htonl(u32_t n) +{ + return ((n & 0xff) << 24) | + ((n & 0xff00) << 8) | + ((n & 0xff0000UL) >> 8) | + ((n & 0xff000000UL) >> 24); +} + +/** + * Convert an u32_t from network- to host byte order. + * + * @param n u32_t in network byte order + * @return n in host byte order + */ +u32_t +ntohl(u32_t n) +{ + return htonl(n); +} + +#endif /* (LWIP_PLATFORM_BYTESWAP == 0) && (BYTE_ORDER == LITTLE_ENDIAN) */ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/inet_chksum.c b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/inet_chksum.c new file mode 100644 index 000000000..47a11d4eb --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/inet_chksum.c @@ -0,0 +1,440 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/** + * @file + * Incluse internet checksum functions. + * + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#include "lwip/opt.h" + +#include "lwip/inet_chksum.h" +#include "lwip/inet.h" + +#include + +/* These are some reference implementations of the checksum algorithm, with the + * aim of being simple, correct and fully portable. Checksumming is the + * first thing you would want to optimize for your platform. If you create + * your own version, link it in and in your cc.h put: + * + * #define LWIP_CHKSUM + * + * Or you can select from the implementations below by defining + * LWIP_CHKSUM_ALGORITHM to 1, 2 or 3. + */ + +#ifndef LWIP_CHKSUM +# define LWIP_CHKSUM lwip_standard_chksum +# ifndef LWIP_CHKSUM_ALGORITHM +# define LWIP_CHKSUM_ALGORITHM 1 +# endif +#endif +/* If none set: */ +#ifndef LWIP_CHKSUM_ALGORITHM +# define LWIP_CHKSUM_ALGORITHM 0 +#endif + +/** Like the name says... */ +#if LWIP_PLATFORM_BYTESWAP && (BYTE_ORDER == LITTLE_ENDIAN) +/* little endian and PLATFORM_BYTESWAP defined */ +#define SWAP_BYTES_IN_WORD(w) LWIP_PLATFORM_HTONS(w) +#else +/* can't use htons on big endian (or PLATFORM_BYTESWAP not defined)... */ +#define SWAP_BYTES_IN_WORD(w) ((w & 0xff) << 8) | ((w & 0xff00) >> 8) +#endif + +/** Split an u32_t in two u16_ts and add them up */ +#define FOLD_U32T(u) ((u >> 16) + (u & 0x0000ffffUL)) + +#if (LWIP_CHKSUM_ALGORITHM == 1) /* Version #1 */ +/** + * lwip checksum + * + * @param dataptr points to start of data to be summed at any boundary + * @param len length of data to be summed + * @return host order (!) lwip checksum (non-inverted Internet sum) + * + * @note accumulator size limits summable length to 64k + * @note host endianess is irrelevant (p3 RFC1071) + */ +static u16_t +lwip_standard_chksum(void *dataptr, u16_t len) +{ + u32_t acc; + u16_t src; + u8_t *octetptr; + + acc = 0; + /* dataptr may be at odd or even addresses */ + octetptr = (u8_t*)dataptr; + while (len > 1) { + /* declare first octet as most significant + thus assume network order, ignoring host order */ + src = (*octetptr) << 8; + octetptr++; + /* declare second octet as least significant */ + src |= (*octetptr); + octetptr++; + acc += src; + len -= 2; + } + if (len > 0) { + /* accumulate remaining octet */ + src = (*octetptr) << 8; + acc += src; + } + /* add deferred carry bits */ + acc = (acc >> 16) + (acc & 0x0000ffffUL); + if ((acc & 0xffff0000UL) != 0) { + acc = (acc >> 16) + (acc & 0x0000ffffUL); + } + /* This maybe a little confusing: reorder sum using htons() + instead of ntohs() since it has a little less call overhead. + The caller must invert bits for Internet sum ! */ + return htons((u16_t)acc); +} +#endif + +#if (LWIP_CHKSUM_ALGORITHM == 2) /* Alternative version #2 */ +/* + * Curt McDowell + * Broadcom Corp. + * csm@broadcom.com + * + * IP checksum two bytes at a time with support for + * unaligned buffer. + * Works for len up to and including 0x20000. + * by Curt McDowell, Broadcom Corp. 12/08/2005 + * + * @param dataptr points to start of data to be summed at any boundary + * @param len length of data to be summed + * @return host order (!) lwip checksum (non-inverted Internet sum) + */ + +static u16_t +lwip_standard_chksum(void *dataptr, int len) +{ + u8_t *pb = dataptr; + u16_t *ps, t = 0; + u32_t sum = 0; + int odd = ((u32_t)pb & 1); + + /* Get aligned to u16_t */ + if (odd && len > 0) { + ((u8_t *)&t)[1] = *pb++; + len--; + } + + /* Add the bulk of the data */ + ps = (u16_t *)pb; + while (len > 1) { + sum += *ps++; + len -= 2; + } + + /* Consume left-over byte, if any */ + if (len > 0) { + ((u8_t *)&t)[0] = *(u8_t *)ps;; + } + + /* Add end bytes */ + sum += t; + + /* Fold 32-bit sum to 16 bits + calling this twice is propably faster than if statements... */ + sum = FOLD_U32T(sum); + sum = FOLD_U32T(sum); + + /* Swap if alignment was odd */ + if (odd) { + sum = SWAP_BYTES_IN_WORD(sum); + } + + return sum; +} +#endif + +#if (LWIP_CHKSUM_ALGORITHM == 3) /* Alternative version #3 */ +/** + * An optimized checksum routine. Basically, it uses loop-unrolling on + * the checksum loop, treating the head and tail bytes specially, whereas + * the inner loop acts on 8 bytes at a time. + * + * @arg start of buffer to be checksummed. May be an odd byte address. + * @len number of bytes in the buffer to be checksummed. + * @return host order (!) lwip checksum (non-inverted Internet sum) + * + * by Curt McDowell, Broadcom Corp. December 8th, 2005 + */ + +static u16_t +lwip_standard_chksum(void *dataptr, int len) +{ + u8_t *pb = dataptr; + u16_t *ps, t = 0; + u32_t *pl; + u32_t sum = 0, tmp; + /* starts at odd byte address? */ + int odd = ((u32_t)pb & 1); + + if (odd && len > 0) { + ((u8_t *)&t)[1] = *pb++; + len--; + } + + ps = (u16_t *)pb; + + if (((u32_t)ps & 3) && len > 1) { + sum += *ps++; + len -= 2; + } + + pl = (u32_t *)ps; + + while (len > 7) { + tmp = sum + *pl++; /* ping */ + if (tmp < sum) { + tmp++; /* add back carry */ + } + + sum = tmp + *pl++; /* pong */ + if (sum < tmp) { + sum++; /* add back carry */ + } + + len -= 8; + } + + /* make room in upper bits */ + sum = FOLD_U32T(sum); + + ps = (u16_t *)pl; + + /* 16-bit aligned word remaining? */ + while (len > 1) { + sum += *ps++; + len -= 2; + } + + /* dangling tail byte remaining? */ + if (len > 0) { /* include odd byte */ + ((u8_t *)&t)[0] = *(u8_t *)ps; + } + + sum += t; /* add end bytes */ + + /* Fold 32-bit sum to 16 bits + calling this twice is propably faster than if statements... */ + sum = FOLD_U32T(sum); + sum = FOLD_U32T(sum); + + if (odd) { + sum = SWAP_BYTES_IN_WORD(sum); + } + + return sum; +} +#endif + +/* inet_chksum_pseudo: + * + * Calculates the pseudo Internet checksum used by TCP and UDP for a pbuf chain. + * IP addresses are expected to be in network byte order. + * + * @param p chain of pbufs over that a checksum should be calculated (ip data part) + * @param src source ip address (used for checksum of pseudo header) + * @param dst destination ip address (used for checksum of pseudo header) + * @param proto ip protocol (used for checksum of pseudo header) + * @param proto_len length of the ip data part (used for checksum of pseudo header) + * @return checksum (as u16_t) to be saved directly in the protocol header + */ +u16_t +inet_chksum_pseudo(struct pbuf *p, + struct ip_addr *src, struct ip_addr *dest, + u8_t proto, u16_t proto_len) +{ + u32_t acc; + struct pbuf *q; + u8_t swapped; + + acc = 0; + swapped = 0; + /* iterate through all pbuf in chain */ + for(q = p; q != NULL; q = q->next) { + LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): checksumming pbuf %p (has next %p) \n", + (void *)q, (void *)q->next)); + acc += LWIP_CHKSUM(q->payload, q->len); + /*LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): unwrapped lwip_chksum()=%"X32_F" \n", acc));*/ + /* just executing this next line is probably faster that the if statement needed + to check whether we really need to execute it, and does no harm */ + acc = FOLD_U32T(acc); + if (q->len % 2 != 0) { + swapped = 1 - swapped; + acc = SWAP_BYTES_IN_WORD(acc); + } + /*LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): wrapped lwip_chksum()=%"X32_F" \n", acc));*/ + } + + if (swapped) { + acc = SWAP_BYTES_IN_WORD(acc); + } + acc += (src->addr & 0xffffUL); + acc += ((src->addr >> 16) & 0xffffUL); + acc += (dest->addr & 0xffffUL); + acc += ((dest->addr >> 16) & 0xffffUL); + acc += (u32_t)htons((u16_t)proto); + acc += (u32_t)htons(proto_len); + + /* Fold 32-bit sum to 16 bits + calling this twice is propably faster than if statements... */ + acc = FOLD_U32T(acc); + acc = FOLD_U32T(acc); + LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): pbuf chain lwip_chksum()=%"X32_F"\n", acc)); + return (u16_t)~(acc & 0xffffUL); +} + +/* inet_chksum_pseudo: + * + * Calculates the pseudo Internet checksum used by TCP and UDP for a pbuf chain. + * IP addresses are expected to be in network byte order. + * + * @param p chain of pbufs over that a checksum should be calculated (ip data part) + * @param src source ip address (used for checksum of pseudo header) + * @param dst destination ip address (used for checksum of pseudo header) + * @param proto ip protocol (used for checksum of pseudo header) + * @param proto_len length of the ip data part (used for checksum of pseudo header) + * @return checksum (as u16_t) to be saved directly in the protocol header + */ +/* Currently only used by UDPLITE, although this could change in the future. */ +#if LWIP_UDPLITE +u16_t +inet_chksum_pseudo_partial(struct pbuf *p, + struct ip_addr *src, struct ip_addr *dest, + u8_t proto, u16_t proto_len, u16_t chksum_len) +{ + u32_t acc; + struct pbuf *q; + u8_t swapped; + u16_t chklen; + + acc = 0; + swapped = 0; + /* iterate through all pbuf in chain */ + for(q = p; (q != NULL) && (chksum_len > 0); q = q->next) { + LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): checksumming pbuf %p (has next %p) \n", + (void *)q, (void *)q->next)); + chklen = q->len; + if (chklen > chksum_len) { + chklen = chksum_len; + } + acc += LWIP_CHKSUM(q->payload, chklen); + chksum_len -= chklen; + LWIP_ASSERT("delete me", chksum_len < 0x7fff); + /*LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): unwrapped lwip_chksum()=%"X32_F" \n", acc));*/ + /* fold the upper bit down */ + acc = FOLD_U32T(acc); + if (q->len % 2 != 0) { + swapped = 1 - swapped; + acc = SWAP_BYTES_IN_WORD(acc); + } + /*LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): wrapped lwip_chksum()=%"X32_F" \n", acc));*/ + } + + if (swapped) { + acc = SWAP_BYTES_IN_WORD(acc); + } + acc += (src->addr & 0xffffUL); + acc += ((src->addr >> 16) & 0xffffUL); + acc += (dest->addr & 0xffffUL); + acc += ((dest->addr >> 16) & 0xffffUL); + acc += (u32_t)htons((u16_t)proto); + acc += (u32_t)htons(proto_len); + + /* Fold 32-bit sum to 16 bits + calling this twice is propably faster than if statements... */ + acc = FOLD_U32T(acc); + acc = FOLD_U32T(acc); + LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): pbuf chain lwip_chksum()=%"X32_F"\n", acc)); + return (u16_t)~(acc & 0xffffUL); +} +#endif /* LWIP_UDPLITE */ + +/* inet_chksum: + * + * Calculates the Internet checksum over a portion of memory. Used primarily for IP + * and ICMP. + * + * @param dataptr start of the buffer to calculate the checksum (no alignment needed) + * @param len length of the buffer to calculate the checksum + * @return checksum (as u16_t) to be saved directly in the protocol header + */ + +u16_t +inet_chksum(void *dataptr, u16_t len) +{ + return ~LWIP_CHKSUM(dataptr, len); +} + +/** + * Calculate a checksum over a chain of pbufs (without pseudo-header, much like + * inet_chksum only pbufs are used). + * + * @param p pbuf chain over that the checksum should be calculated + * @return checksum (as u16_t) to be saved directly in the protocol header + */ +u16_t +inet_chksum_pbuf(struct pbuf *p) +{ + u32_t acc; + struct pbuf *q; + u8_t swapped; + + acc = 0; + swapped = 0; + for(q = p; q != NULL; q = q->next) { + acc += LWIP_CHKSUM(q->payload, q->len); + acc = FOLD_U32T(acc); + if (q->len % 2 != 0) { + swapped = 1 - swapped; + acc = SWAP_BYTES_IN_WORD(acc); + } + } + + if (swapped) { + acc = SWAP_BYTES_IN_WORD(acc); + } + return (u16_t)~(acc & 0xffffUL); +} diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/ip.c b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/ip.c new file mode 100644 index 000000000..a958242a4 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/ip.c @@ -0,0 +1,725 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/** + * @file + * This is the IPv4 layer implementation for incoming and outgoing IP traffic. + * + * @see ip_frag.c + * + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#include "lwip/opt.h" +#include "lwip/ip.h" +#include "lwip/def.h" +#include "lwip/mem.h" +#include "lwip/ip_frag.h" +#include "lwip/inet.h" +#include "lwip/inet_chksum.h" +#include "lwip/netif.h" +#include "lwip/icmp.h" +#include "lwip/igmp.h" +#include "lwip/raw.h" +#include "lwip/udp.h" +#include "lwip/tcp.h" +#include "lwip/snmp.h" +#include "lwip/dhcp.h" +#include "lwip/stats.h" +#include "arch/perf.h" + +#include + +/** + * The interface that provided the packet for the current callback + * invocation. + */ +struct netif *current_netif; + +/** + * Header of the input packet currently being processed. + */ +const struct ip_hdr *current_header; + +/** + * Finds the appropriate network interface for a given IP address. It + * searches the list of network interfaces linearly. A match is found + * if the masked IP address of the network interface equals the masked + * IP address given to the function. + * + * @param dest the destination IP address for which to find the route + * @return the netif on which to send to reach dest + */ +struct netif * +ip_route(struct ip_addr *dest) +{ + struct netif *netif; + + /* iterate through netifs */ + for(netif = netif_list; netif != NULL; netif = netif->next) { + /* network mask matches? */ + if (netif_is_up(netif)) { + if (ip_addr_netcmp(dest, &(netif->ip_addr), &(netif->netmask))) { + /* return netif on which to forward IP packet */ + return netif; + } + } + } + if ((netif_default == NULL) || (!netif_is_up(netif_default))) { + LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("ip_route: No route to 0x%"X32_F"\n", dest->addr)); + IP_STATS_INC(ip.rterr); + snmp_inc_ipoutnoroutes(); + return NULL; + } + /* no matching netif found, use default netif */ + return netif_default; +} + +#if IP_FORWARD +/** + * Forwards an IP packet. It finds an appropriate route for the + * packet, decrements the TTL value of the packet, adjusts the + * checksum and outputs the packet on the appropriate interface. + * + * @param p the packet to forward (p->payload points to IP header) + * @param iphdr the IP header of the input packet + * @param inp the netif on which this packet was received + * @return the netif on which the packet was sent (NULL if it wasn't sent) + */ +static struct netif * +ip_forward(struct pbuf *p, struct ip_hdr *iphdr, struct netif *inp) +{ + struct netif *netif; + + PERF_START; + /* Find network interface where to forward this IP packet to. */ + netif = ip_route((struct ip_addr *)&(iphdr->dest)); + if (netif == NULL) { + LWIP_DEBUGF(IP_DEBUG, ("ip_forward: no forwarding route for 0x%"X32_F" found\n", + iphdr->dest.addr)); + snmp_inc_ipoutnoroutes(); + return (struct netif *)NULL; + } + /* Do not forward packets onto the same network interface on which + * they arrived. */ + if (netif == inp) { + LWIP_DEBUGF(IP_DEBUG, ("ip_forward: not bouncing packets back on incoming interface.\n")); + snmp_inc_ipoutnoroutes(); + return (struct netif *)NULL; + } + + /* decrement TTL */ + IPH_TTL_SET(iphdr, IPH_TTL(iphdr) - 1); + /* send ICMP if TTL == 0 */ + if (IPH_TTL(iphdr) == 0) { + snmp_inc_ipinhdrerrors(); +#if LWIP_ICMP + /* Don't send ICMP messages in response to ICMP messages */ + if (IPH_PROTO(iphdr) != IP_PROTO_ICMP) { + icmp_time_exceeded(p, ICMP_TE_TTL); + } +#endif /* LWIP_ICMP */ + return (struct netif *)NULL; + } + + /* Incrementally update the IP checksum. */ + if (IPH_CHKSUM(iphdr) >= htons(0xffff - 0x100)) { + IPH_CHKSUM_SET(iphdr, IPH_CHKSUM(iphdr) + htons(0x100) + 1); + } else { + IPH_CHKSUM_SET(iphdr, IPH_CHKSUM(iphdr) + htons(0x100)); + } + + LWIP_DEBUGF(IP_DEBUG, ("ip_forward: forwarding packet to 0x%"X32_F"\n", + iphdr->dest.addr)); + + IP_STATS_INC(ip.fw); + IP_STATS_INC(ip.xmit); + snmp_inc_ipforwdatagrams(); + + PERF_STOP("ip_forward"); + /* transmit pbuf on chosen interface */ + netif->output(netif, p, (struct ip_addr *)&(iphdr->dest)); + return netif; +} +#endif /* IP_FORWARD */ + +/** + * This function is called by the network interface device driver when + * an IP packet is received. The function does the basic checks of the + * IP header such as packet size being at least larger than the header + * size etc. If the packet was not destined for us, the packet is + * forwarded (using ip_forward). The IP checksum is always checked. + * + * Finally, the packet is sent to the upper layer protocol input function. + * + * @param p the received IP packet (p->payload points to IP header) + * @param inp the netif on which this packet was received + * @return ERR_OK if the packet was processed (could return ERR_* if it wasn't + * processed, but currently always returns ERR_OK) + */ +err_t +ip_input(struct pbuf *p, struct netif *inp) +{ + struct ip_hdr *iphdr; + struct netif *netif; + u16_t iphdr_hlen; + u16_t iphdr_len; +#if LWIP_DHCP + int check_ip_src=1; +#endif /* LWIP_DHCP */ + + IP_STATS_INC(ip.recv); + snmp_inc_ipinreceives(); + + /* identify the IP header */ + iphdr = p->payload; + if (IPH_V(iphdr) != 4) { + LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_WARNING, ("IP packet dropped due to bad version number %"U16_F"\n", IPH_V(iphdr))); + ip_debug_print(p); + pbuf_free(p); + IP_STATS_INC(ip.err); + IP_STATS_INC(ip.drop); + snmp_inc_ipinhdrerrors(); + return ERR_OK; + } + + /* obtain IP header length in number of 32-bit words */ + iphdr_hlen = IPH_HL(iphdr); + /* calculate IP header length in bytes */ + iphdr_hlen *= 4; + /* obtain ip length in bytes */ + iphdr_len = ntohs(IPH_LEN(iphdr)); + + /* header length exceeds first pbuf length, or ip length exceeds total pbuf length? */ + if ((iphdr_hlen > p->len) || (iphdr_len > p->tot_len)) { + if (iphdr_hlen > p->len) { + LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, + ("IP header (len %"U16_F") does not fit in first pbuf (len %"U16_F"), IP packet dropped.\n", + iphdr_hlen, p->len)); + } + if (iphdr_len > p->tot_len) { + LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, + ("IP (len %"U16_F") is longer than pbuf (len %"U16_F"), IP packet dropped.\n", + iphdr_len, p->tot_len)); + } + /* free (drop) packet pbufs */ + pbuf_free(p); + IP_STATS_INC(ip.lenerr); + IP_STATS_INC(ip.drop); + snmp_inc_ipindiscards(); + return ERR_OK; + } + + /* verify checksum */ +#if CHECKSUM_CHECK_IP + if (inet_chksum(iphdr, iphdr_hlen) != 0) { + + LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, + ("Checksum (0x%"X16_F") failed, IP packet dropped.\n", inet_chksum(iphdr, iphdr_hlen))); + ip_debug_print(p); + pbuf_free(p); + IP_STATS_INC(ip.chkerr); + IP_STATS_INC(ip.drop); + snmp_inc_ipinhdrerrors(); + return ERR_OK; + } +#endif + + /* Trim pbuf. This should have been done at the netif layer, + * but we'll do it anyway just to be sure that its done. */ + pbuf_realloc(p, iphdr_len); + + /* match packet against an interface, i.e. is this packet for us? */ +#if LWIP_IGMP + if (ip_addr_ismulticast(&(iphdr->dest))) { + if ((inp->flags & NETIF_FLAG_IGMP) && (igmp_lookfor_group(inp, &(iphdr->dest)))) { + netif = inp; + } else { + netif = NULL; + } + } else +#endif /* LWIP_IGMP */ + { + /* start trying with inp. if that's not acceptable, start walking the + list of configured netifs. + 'first' is used as a boolean to mark whether we started walking the list */ + int first = 1; + netif = inp; + do { + LWIP_DEBUGF(IP_DEBUG, ("ip_input: iphdr->dest 0x%"X32_F" netif->ip_addr 0x%"X32_F" (0x%"X32_F", 0x%"X32_F", 0x%"X32_F")\n", + iphdr->dest.addr, netif->ip_addr.addr, + iphdr->dest.addr & netif->netmask.addr, + netif->ip_addr.addr & netif->netmask.addr, + iphdr->dest.addr & ~(netif->netmask.addr))); + + /* interface is up and configured? */ + if ((netif_is_up(netif)) && (!ip_addr_isany(&(netif->ip_addr)))) { + /* unicast to this interface address? */ + if (ip_addr_cmp(&(iphdr->dest), &(netif->ip_addr)) || + /* or broadcast on this interface network address? */ + ip_addr_isbroadcast(&(iphdr->dest), netif)) { + LWIP_DEBUGF(IP_DEBUG, ("ip_input: packet accepted on interface %c%c\n", + netif->name[0], netif->name[1])); + /* break out of for loop */ + break; + } + } + if (first) { + first = 0; + netif = netif_list; + } else { + netif = netif->next; + } + if (netif == inp) { + netif = netif->next; + } + } while(netif != NULL); + } + +#if LWIP_DHCP + /* Pass DHCP messages regardless of destination address. DHCP traffic is addressed + * using link layer addressing (such as Ethernet MAC) so we must not filter on IP. + * According to RFC 1542 section 3.1.1, referred by RFC 2131). + */ + if (netif == NULL) { + /* remote port is DHCP server? */ + if (IPH_PROTO(iphdr) == IP_PROTO_UDP) { + LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_TRACE, ("ip_input: UDP packet to DHCP client port %"U16_F"\n", + ntohs(((struct udp_hdr *)((u8_t *)iphdr + iphdr_hlen))->dest))); + if (ntohs(((struct udp_hdr *)((u8_t *)iphdr + iphdr_hlen))->dest) == DHCP_CLIENT_PORT) { + LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_TRACE, ("ip_input: DHCP packet accepted.\n")); + netif = inp; + check_ip_src = 0; + } + } + } +#endif /* LWIP_DHCP */ + + /* broadcast or multicast packet source address? Compliant with RFC 1122: 3.2.1.3 */ +#if LWIP_DHCP + /* DHCP servers need 0.0.0.0 to be allowed as source address (RFC 1.1.2.2: 3.2.1.3/a) */ + if (check_ip_src && (iphdr->src.addr != 0)) +#endif /* LWIP_DHCP */ + { if ((ip_addr_isbroadcast(&(iphdr->src), inp)) || + (ip_addr_ismulticast(&(iphdr->src)))) { + /* packet source is not valid */ + LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, ("ip_input: packet source is not valid.\n")); + /* free (drop) packet pbufs */ + pbuf_free(p); + IP_STATS_INC(ip.drop); + snmp_inc_ipinaddrerrors(); + snmp_inc_ipindiscards(); + return ERR_OK; + } + } + + /* packet not for us? */ + if (netif == NULL) { + /* packet not for us, route or discard */ + LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_TRACE, ("ip_input: packet not for us.\n")); +#if IP_FORWARD + /* non-broadcast packet? */ + if (!ip_addr_isbroadcast(&(iphdr->dest), inp)) { + /* try to forward IP packet on (other) interfaces */ + ip_forward(p, iphdr, inp); + } else +#endif /* IP_FORWARD */ + { + snmp_inc_ipinaddrerrors(); + snmp_inc_ipindiscards(); + } + pbuf_free(p); + return ERR_OK; + } + /* packet consists of multiple fragments? */ + if ((IPH_OFFSET(iphdr) & htons(IP_OFFMASK | IP_MF)) != 0) { +#if IP_REASSEMBLY /* packet fragment reassembly code present? */ + LWIP_DEBUGF(IP_DEBUG, ("IP packet is a fragment (id=0x%04"X16_F" tot_len=%"U16_F" len=%"U16_F" MF=%"U16_F" offset=%"U16_F"), calling ip_reass()\n", + ntohs(IPH_ID(iphdr)), p->tot_len, ntohs(IPH_LEN(iphdr)), !!(IPH_OFFSET(iphdr) & htons(IP_MF)), (ntohs(IPH_OFFSET(iphdr)) & IP_OFFMASK)*8)); + /* reassemble the packet*/ + p = ip_reass(p); + /* packet not fully reassembled yet? */ + if (p == NULL) { + return ERR_OK; + } + iphdr = p->payload; +#else /* IP_REASSEMBLY == 0, no packet fragment reassembly code present */ + pbuf_free(p); + LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("IP packet dropped since it was fragmented (0x%"X16_F") (while IP_REASSEMBLY == 0).\n", + ntohs(IPH_OFFSET(iphdr)))); + IP_STATS_INC(ip.opterr); + IP_STATS_INC(ip.drop); + /* unsupported protocol feature */ + snmp_inc_ipinunknownprotos(); + return ERR_OK; +#endif /* IP_REASSEMBLY */ + } + +#if IP_OPTIONS_ALLOWED == 0 /* no support for IP options in the IP header? */ + +#if LWIP_IGMP + /* there is an extra "router alert" option in IGMP messages which we allow for but do not police */ + if((iphdr_hlen > IP_HLEN && (IPH_PROTO(iphdr) != IP_PROTO_IGMP)) { +#else + if (iphdr_hlen > IP_HLEN) { +#endif /* LWIP_IGMP */ + LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("IP packet dropped since there were IP options (while IP_OPTIONS_ALLOWED == 0).\n")); + pbuf_free(p); + IP_STATS_INC(ip.opterr); + IP_STATS_INC(ip.drop); + /* unsupported protocol feature */ + snmp_inc_ipinunknownprotos(); + return ERR_OK; + } +#endif /* IP_OPTIONS_ALLOWED == 0 */ + + /* send to upper layers */ + LWIP_DEBUGF(IP_DEBUG, ("ip_input: \n")); + ip_debug_print(p); + LWIP_DEBUGF(IP_DEBUG, ("ip_input: p->len %"U16_F" p->tot_len %"U16_F"\n", p->len, p->tot_len)); + + current_netif = inp; + current_header = iphdr; + +#if LWIP_RAW + /* raw input did not eat the packet? */ + if (raw_input(p, inp) == 0) +#endif /* LWIP_RAW */ + { + + switch (IPH_PROTO(iphdr)) { +#if LWIP_UDP + case IP_PROTO_UDP: +#if LWIP_UDPLITE + case IP_PROTO_UDPLITE: +#endif /* LWIP_UDPLITE */ + snmp_inc_ipindelivers(); + udp_input(p, inp); + break; +#endif /* LWIP_UDP */ +#if LWIP_TCP + case IP_PROTO_TCP: + snmp_inc_ipindelivers(); + tcp_input(p, inp); + break; +#endif /* LWIP_TCP */ +#if LWIP_ICMP + case IP_PROTO_ICMP: + snmp_inc_ipindelivers(); + icmp_input(p, inp); + break; +#endif /* LWIP_ICMP */ +#if LWIP_IGMP + case IP_PROTO_IGMP: + igmp_input(p,inp,&(iphdr->dest)); + break; +#endif /* LWIP_IGMP */ + default: +#if LWIP_ICMP + /* send ICMP destination protocol unreachable unless is was a broadcast */ + if (!ip_addr_isbroadcast(&(iphdr->dest), inp) && + !ip_addr_ismulticast(&(iphdr->dest))) { + p->payload = iphdr; + icmp_dest_unreach(p, ICMP_DUR_PROTO); + } +#endif /* LWIP_ICMP */ + pbuf_free(p); + + LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("Unsupported transport protocol %"U16_F"\n", IPH_PROTO(iphdr))); + + IP_STATS_INC(ip.proterr); + IP_STATS_INC(ip.drop); + snmp_inc_ipinunknownprotos(); + } + } + + current_netif = NULL; + current_header = NULL; + + return ERR_OK; +} + +/** + * Sends an IP packet on a network interface. This function constructs + * the IP header and calculates the IP header checksum. If the source + * IP address is NULL, the IP address of the outgoing network + * interface is filled in as source address. + * If the destination IP address is IP_HDRINCL, p is assumed to already + * include an IP header and p->payload points to it instead of the data. + * + * @param p the packet to send (p->payload points to the data, e.g. next + protocol header; if dest == IP_HDRINCL, p already includes an IP + header and p->payload points to that IP header) + * @param src the source IP address to send from (if src == IP_ADDR_ANY, the + * IP address of the netif used to send is used as source address) + * @param dest the destination IP address to send the packet to + * @param ttl the TTL value to be set in the IP header + * @param tos the TOS value to be set in the IP header + * @param proto the PROTOCOL to be set in the IP header + * @param netif the netif on which to send this packet + * @return ERR_OK if the packet was sent OK + * ERR_BUF if p doesn't have enough space for IP/LINK headers + * returns errors returned by netif->output + * + * @note ip_id: RFC791 "some host may be able to simply use + * unique identifiers independent of destination" + */ +err_t +ip_output_if(struct pbuf *p, struct ip_addr *src, struct ip_addr *dest, + u8_t ttl, u8_t tos, + u8_t proto, struct netif *netif) +{ +#if IP_OPTIONS_SEND + return ip_output_if_opt(p, src, dest, ttl, tos, proto, netif, NULL, 0); +} + +/** + * Same as ip_output_if() but with the possibility to include IP options: + * + * @ param ip_options pointer to the IP options, copied into the IP header + * @ param optlen length of ip_options + */ +err_t ip_output_if_opt(struct pbuf *p, struct ip_addr *src, struct ip_addr *dest, + u8_t ttl, u8_t tos, u8_t proto, struct netif *netif, void *ip_options, + u16_t optlen) +{ +#endif /* IP_OPTIONS_SEND */ + struct ip_hdr *iphdr; + static u16_t ip_id = 0; + + snmp_inc_ipoutrequests(); + + /* Should the IP header be generated or is it already included in p? */ + if (dest != IP_HDRINCL) { + u16_t ip_hlen = IP_HLEN; +#if IP_OPTIONS_SEND + u16_t optlen_aligned = 0; + if (optlen != 0) { + /* round up to a multiple of 4 */ + optlen_aligned = ((optlen + 3) & ~3); + ip_hlen += optlen_aligned; + /* First write in the IP options */ + if (pbuf_header(p, optlen_aligned)) { + LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("ip_output_if_opt: not enough room for IP options in pbuf\n")); + IP_STATS_INC(ip.err); + snmp_inc_ipoutdiscards(); + return ERR_BUF; + } + MEMCPY(p->payload, ip_options, optlen); + if (optlen < optlen_aligned) { + /* zero the remaining bytes */ + memset(((char*)p->payload) + optlen, 0, optlen_aligned - optlen); + } + } +#endif /* IP_OPTIONS_SEND */ + /* generate IP header */ + if (pbuf_header(p, IP_HLEN)) { + LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("ip_output: not enough room for IP header in pbuf\n")); + + IP_STATS_INC(ip.err); + snmp_inc_ipoutdiscards(); + return ERR_BUF; + } + + iphdr = p->payload; + LWIP_ASSERT("check that first pbuf can hold struct ip_hdr", + (p->len >= sizeof(struct ip_hdr))); + + IPH_TTL_SET(iphdr, ttl); + IPH_PROTO_SET(iphdr, proto); + + ip_addr_set(&(iphdr->dest), dest); + + IPH_VHLTOS_SET(iphdr, 4, ip_hlen / 4, tos); + IPH_LEN_SET(iphdr, htons(p->tot_len)); + IPH_OFFSET_SET(iphdr, 0); + IPH_ID_SET(iphdr, htons(ip_id)); + ++ip_id; + + if (ip_addr_isany(src)) { + ip_addr_set(&(iphdr->src), &(netif->ip_addr)); + } else { + ip_addr_set(&(iphdr->src), src); + } + + IPH_CHKSUM_SET(iphdr, 0); +#if CHECKSUM_GEN_IP + IPH_CHKSUM_SET(iphdr, inet_chksum(iphdr, ip_hlen)); +#endif + } else { + /* IP header already included in p */ + iphdr = p->payload; + dest = &(iphdr->dest); + } + + IP_STATS_INC(ip.xmit); + + LWIP_DEBUGF(IP_DEBUG, ("ip_output_if: %c%c%"U16_F"\n", netif->name[0], netif->name[1], netif->num)); + ip_debug_print(p); + +#if ENABLE_LOOPBACK + if (ip_addr_cmp(dest, &netif->ip_addr)) { + /* Packet to self, enqueue it for loopback */ + LWIP_DEBUGF(IP_DEBUG, ("netif_loop_output()")); + return netif_loop_output(netif, p, dest); + } +#endif /* ENABLE_LOOPBACK */ +#if IP_FRAG + /* don't fragment if interface has mtu set to 0 [loopif] */ + if (netif->mtu && (p->tot_len > netif->mtu)) { + return ip_frag(p,netif,dest); + } +#endif + + LWIP_DEBUGF(IP_DEBUG, ("netif->output()")); + return netif->output(netif, p, dest); +} + +/** + * Simple interface to ip_output_if. It finds the outgoing network + * interface and calls upon ip_output_if to do the actual work. + * + * @param p the packet to send (p->payload points to the data, e.g. next + protocol header; if dest == IP_HDRINCL, p already includes an IP + header and p->payload points to that IP header) + * @param src the source IP address to send from (if src == IP_ADDR_ANY, the + * IP address of the netif used to send is used as source address) + * @param dest the destination IP address to send the packet to + * @param ttl the TTL value to be set in the IP header + * @param tos the TOS value to be set in the IP header + * @param proto the PROTOCOL to be set in the IP header + * + * @return ERR_RTE if no route is found + * see ip_output_if() for more return values + */ +err_t +ip_output(struct pbuf *p, struct ip_addr *src, struct ip_addr *dest, + u8_t ttl, u8_t tos, u8_t proto) +{ + struct netif *netif; + + if ((netif = ip_route(dest)) == NULL) { + LWIP_DEBUGF(IP_DEBUG, ("ip_output: No route to 0x%"X32_F"\n", dest->addr)); + IP_STATS_INC(ip.rterr); + return ERR_RTE; + } + + return ip_output_if(p, src, dest, ttl, tos, proto, netif); +} + +#if LWIP_NETIF_HWADDRHINT +/** Like ip_output, but takes and addr_hint pointer that is passed on to netif->addr_hint + * before calling ip_output_if. + * + * @param p the packet to send (p->payload points to the data, e.g. next + protocol header; if dest == IP_HDRINCL, p already includes an IP + header and p->payload points to that IP header) + * @param src the source IP address to send from (if src == IP_ADDR_ANY, the + * IP address of the netif used to send is used as source address) + * @param dest the destination IP address to send the packet to + * @param ttl the TTL value to be set in the IP header + * @param tos the TOS value to be set in the IP header + * @param proto the PROTOCOL to be set in the IP header + * @param addr_hint address hint pointer set to netif->addr_hint before + * calling ip_output_if() + * + * @return ERR_RTE if no route is found + * see ip_output_if() for more return values + */ +err_t +ip_output_hinted(struct pbuf *p, struct ip_addr *src, struct ip_addr *dest, + u8_t ttl, u8_t tos, u8_t proto, u8_t *addr_hint) +{ + struct netif *netif; + err_t err; + + if ((netif = ip_route(dest)) == NULL) { + LWIP_DEBUGF(IP_DEBUG, ("ip_output: No route to 0x%"X32_F"\n", dest->addr)); + IP_STATS_INC(ip.rterr); + return ERR_RTE; + } + + netif->addr_hint = addr_hint; + err = ip_output_if(p, src, dest, ttl, tos, proto, netif); + netif->addr_hint = NULL; + + return err; +} +#endif /* LWIP_NETIF_HWADDRHINT*/ + +#if IP_DEBUG +/* Print an IP header by using LWIP_DEBUGF + * @param p an IP packet, p->payload pointing to the IP header + */ +void +ip_debug_print(struct pbuf *p) +{ + struct ip_hdr *iphdr = p->payload; + u8_t *payload; + + payload = (u8_t *)iphdr + IP_HLEN; + + LWIP_DEBUGF(IP_DEBUG, ("IP header:\n")); + LWIP_DEBUGF(IP_DEBUG, ("+-------------------------------+\n")); + LWIP_DEBUGF(IP_DEBUG, ("|%2"S16_F" |%2"S16_F" | 0x%02"X16_F" | %5"U16_F" | (v, hl, tos, len)\n", + IPH_V(iphdr), + IPH_HL(iphdr), + IPH_TOS(iphdr), + ntohs(IPH_LEN(iphdr)))); + LWIP_DEBUGF(IP_DEBUG, ("+-------------------------------+\n")); + LWIP_DEBUGF(IP_DEBUG, ("| %5"U16_F" |%"U16_F"%"U16_F"%"U16_F"| %4"U16_F" | (id, flags, offset)\n", + ntohs(IPH_ID(iphdr)), + ntohs(IPH_OFFSET(iphdr)) >> 15 & 1, + ntohs(IPH_OFFSET(iphdr)) >> 14 & 1, + ntohs(IPH_OFFSET(iphdr)) >> 13 & 1, + ntohs(IPH_OFFSET(iphdr)) & IP_OFFMASK)); + LWIP_DEBUGF(IP_DEBUG, ("+-------------------------------+\n")); + LWIP_DEBUGF(IP_DEBUG, ("| %3"U16_F" | %3"U16_F" | 0x%04"X16_F" | (ttl, proto, chksum)\n", + IPH_TTL(iphdr), + IPH_PROTO(iphdr), + ntohs(IPH_CHKSUM(iphdr)))); + LWIP_DEBUGF(IP_DEBUG, ("+-------------------------------+\n")); + LWIP_DEBUGF(IP_DEBUG, ("| %3"U16_F" | %3"U16_F" | %3"U16_F" | %3"U16_F" | (src)\n", + ip4_addr1(&iphdr->src), + ip4_addr2(&iphdr->src), + ip4_addr3(&iphdr->src), + ip4_addr4(&iphdr->src))); + LWIP_DEBUGF(IP_DEBUG, ("+-------------------------------+\n")); + LWIP_DEBUGF(IP_DEBUG, ("| %3"U16_F" | %3"U16_F" | %3"U16_F" | %3"U16_F" | (dest)\n", + ip4_addr1(&iphdr->dest), + ip4_addr2(&iphdr->dest), + ip4_addr3(&iphdr->dest), + ip4_addr4(&iphdr->dest))); + LWIP_DEBUGF(IP_DEBUG, ("+-------------------------------+\n")); +} +#endif /* IP_DEBUG */ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/ip_addr.c b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/ip_addr.c new file mode 100644 index 000000000..33e0aaddd --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/ip_addr.c @@ -0,0 +1,86 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/** + * @file + * This is the IPv4 address tools implementation. + * + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#include "lwip/opt.h" +#include "lwip/ip_addr.h" +#include "lwip/inet.h" +#include "lwip/netif.h" + +#define IP_ADDR_ANY_VALUE 0x00000000UL +#define IP_ADDR_BROADCAST_VALUE 0xffffffffUL + +/* used by IP_ADDR_ANY and IP_ADDR_BROADCAST in ip_addr.h */ +const struct ip_addr ip_addr_any = { IP_ADDR_ANY_VALUE }; +const struct ip_addr ip_addr_broadcast = { IP_ADDR_BROADCAST_VALUE }; + +/** + * Determine if an address is a broadcast address on a network interface + * + * @param addr address to be checked + * @param netif the network interface against which the address is checked + * @return returns non-zero if the address is a broadcast address + */ +u8_t ip_addr_isbroadcast(struct ip_addr *addr, struct netif *netif) +{ + u32_t addr2test; + + addr2test = addr->addr; + /* all ones (broadcast) or all zeroes (old skool broadcast) */ + if ((~addr2test == IP_ADDR_ANY_VALUE) || + (addr2test == IP_ADDR_ANY_VALUE)) + return 1; + /* no broadcast support on this network interface? */ + else if ((netif->flags & NETIF_FLAG_BROADCAST) == 0) + /* the given address cannot be a broadcast address + * nor can we check against any broadcast addresses */ + return 0; + /* address matches network interface address exactly? => no broadcast */ + else if (addr2test == netif->ip_addr.addr) + return 0; + /* on the same (sub) network... */ + else if (ip_addr_netcmp(addr, &(netif->ip_addr), &(netif->netmask)) + /* ...and host identifier bits are all ones? =>... */ + && ((addr2test & ~netif->netmask.addr) == + (IP_ADDR_BROADCAST_VALUE & ~netif->netmask.addr))) + /* => network broadcast address */ + return 1; + else + return 0; +} diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/ip_frag.c b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/ip_frag.c new file mode 100644 index 000000000..ab35572e4 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/ip_frag.c @@ -0,0 +1,794 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/** + * @file + * This is the IPv4 packet segmentation and reassembly implementation. + * + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Jani Monoses + * Simon Goldschmidt + * original reassembly code by Adam Dunkels + * + */ + +#include "lwip/opt.h" +#include "lwip/ip_frag.h" +#include "lwip/ip.h" +#include "lwip/inet.h" +#include "lwip/inet_chksum.h" +#include "lwip/netif.h" +#include "lwip/snmp.h" +#include "lwip/stats.h" +#include "lwip/icmp.h" + +#include + +#if IP_REASSEMBLY +/** + * The IP reassembly code currently has the following limitations: + * - IP header options are not supported + * - fragments must not overlap (e.g. due to different routes), + * currently, overlapping or duplicate fragments are thrown away + * if IP_REASS_CHECK_OVERLAP=1 (the default)! + * + * @todo: work with IP header options + */ + +/** Setting this to 0, you can turn off checking the fragments for overlapping + * regions. The code gets a little smaller. Only use this if you know that + * overlapping won't occur on your network! */ +#ifndef IP_REASS_CHECK_OVERLAP +#define IP_REASS_CHECK_OVERLAP 1 +#endif /* IP_REASS_CHECK_OVERLAP */ + +/** Set to 0 to prevent freeing the oldest datagram when the reassembly buffer is + * full (IP_REASS_MAX_PBUFS pbufs are enqueued). The code gets a little smaller. + * Datagrams will be freed by timeout only. Especially useful when MEMP_NUM_REASSDATA + * is set to 1, so one datagram can be reassembled at a time, only. */ +#ifndef IP_REASS_FREE_OLDEST +#define IP_REASS_FREE_OLDEST 1 +#endif /* IP_REASS_FREE_OLDEST */ + +#define IP_REASS_FLAG_LASTFRAG 0x01 + +/** This is a helper struct which holds the starting + * offset and the ending offset of this fragment to + * easily chain the fragments. + * It has to be packed since it has to fit inside the IP header. + */ +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct ip_reass_helper { + PACK_STRUCT_FIELD(struct pbuf *next_pbuf); + PACK_STRUCT_FIELD(u16_t start); + PACK_STRUCT_FIELD(u16_t end); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +#define IP_ADDRESSES_AND_ID_MATCH(iphdrA, iphdrB) \ + (ip_addr_cmp(&(iphdrA)->src, &(iphdrB)->src) && \ + ip_addr_cmp(&(iphdrA)->dest, &(iphdrB)->dest) && \ + IPH_ID(iphdrA) == IPH_ID(iphdrB)) ? 1 : 0 + +/* global variables */ +static struct ip_reassdata *reassdatagrams; +static u16_t ip_reass_pbufcount; + +/* function prototypes */ +static void ip_reass_dequeue_datagram(struct ip_reassdata *ipr, struct ip_reassdata *prev); +static int ip_reass_free_complete_datagram(struct ip_reassdata *ipr, struct ip_reassdata *prev); + +/** + * Reassembly timer base function + * for both NO_SYS == 0 and 1 (!). + * + * Should be called every 1000 msec (defined by IP_TMR_INTERVAL). + */ +void +ip_reass_tmr(void) +{ + struct ip_reassdata *r, *prev = NULL; + + r = reassdatagrams; + while (r != NULL) { + /* Decrement the timer. Once it reaches 0, + * clean up the incomplete fragment assembly */ + if (r->timer > 0) { + r->timer--; + LWIP_DEBUGF(IP_REASS_DEBUG, ("ip_reass_tmr: timer dec %"U16_F"\n",(u16_t)r->timer)); + prev = r; + r = r->next; + } else { + /* reassembly timed out */ + struct ip_reassdata *tmp; + LWIP_DEBUGF(IP_REASS_DEBUG, ("ip_reass_tmr: timer timed out\n")); + tmp = r; + /* get the next pointer before freeing */ + r = r->next; + /* free the helper struct and all enqueued pbufs */ + ip_reass_free_complete_datagram(tmp, prev); + } + } +} + +/** + * Free a datagram (struct ip_reassdata) and all its pbufs. + * Updates the total count of enqueued pbufs (ip_reass_pbufcount), + * SNMP counters and sends an ICMP time exceeded packet. + * + * @param ipr datagram to free + * @param prev the previous datagram in the linked list + * @return the number of pbufs freed + */ +static int +ip_reass_free_complete_datagram(struct ip_reassdata *ipr, struct ip_reassdata *prev) +{ + int pbufs_freed = 0; + struct pbuf *p; + struct ip_reass_helper *iprh; + + LWIP_ASSERT("prev != ipr", prev != ipr); + if (prev != NULL) { + LWIP_ASSERT("prev->next == ipr", prev->next == ipr); + } + + snmp_inc_ipreasmfails(); +#if LWIP_ICMP + iprh = (struct ip_reass_helper *)ipr->p->payload; + if (iprh->start == 0) { + /* The first fragment was received, send ICMP time exceeded. */ + /* First, de-queue the first pbuf from r->p. */ + p = ipr->p; + ipr->p = iprh->next_pbuf; + /* Then, copy the original header into it. */ + SMEMCPY(p->payload, &ipr->iphdr, IP_HLEN); + icmp_time_exceeded(p, ICMP_TE_FRAG); + pbufs_freed += pbuf_clen(p); + pbuf_free(p); + } +#endif /* LWIP_ICMP */ + + /* First, free all received pbufs. The individual pbufs need to be released + separately as they have not yet been chained */ + p = ipr->p; + while (p != NULL) { + struct pbuf *pcur; + iprh = (struct ip_reass_helper *)p->payload; + pcur = p; + /* get the next pointer before freeing */ + p = iprh->next_pbuf; + pbufs_freed += pbuf_clen(pcur); + pbuf_free(pcur); + } + /* Then, unchain the struct ip_reassdata from the list and free it. */ + ip_reass_dequeue_datagram(ipr, prev); + LWIP_ASSERT("ip_reass_pbufcount >= clen", ip_reass_pbufcount >= pbufs_freed); + ip_reass_pbufcount -= pbufs_freed; + + return pbufs_freed; +} + +#if IP_REASS_FREE_OLDEST +/** + * Free the oldest datagram to make room for enqueueing new fragments. + * The datagram 'fraghdr' belongs to is not freed! + * + * @param fraghdr IP header of the current fragment + * @param pbufs_needed number of pbufs needed to enqueue + * (used for freeing other datagrams if not enough space) + * @return the number of pbufs freed + */ +static int +ip_reass_remove_oldest_datagram(struct ip_hdr *fraghdr, int pbufs_needed) +{ + /* @todo Can't we simply remove the last datagram in the + * linked list behind reassdatagrams? + */ + struct ip_reassdata *r, *oldest, *prev; + int pbufs_freed = 0, pbufs_freed_current; + int other_datagrams; + + /* Free datagrams until being allowed to enqueue 'pbufs_needed' pbufs, + * but don't free the datagram that 'fraghdr' belongs to! */ + do { + oldest = NULL; + prev = NULL; + other_datagrams = 0; + r = reassdatagrams; + while (r != NULL) { + if (!IP_ADDRESSES_AND_ID_MATCH(&r->iphdr, fraghdr)) { + /* Not the same datagram as fraghdr */ + other_datagrams++; + if (oldest == NULL) { + oldest = r; + } else if (r->timer <= oldest->timer) { + /* older than the previous oldest */ + oldest = r; + } + } + if (r->next != NULL) { + prev = r; + } + r = r->next; + } + if (oldest != NULL) { + pbufs_freed_current = ip_reass_free_complete_datagram(oldest, prev); + pbufs_freed += pbufs_freed_current; + } + } while ((pbufs_freed < pbufs_needed) && (other_datagrams > 1)); + return pbufs_freed; +} +#endif /* IP_REASS_FREE_OLDEST */ + +/** + * Enqueues a new fragment into the fragment queue + * @param fraghdr points to the new fragments IP hdr + * @param clen number of pbufs needed to enqueue (used for freeing other datagrams if not enough space) + * @return A pointer to the queue location into which the fragment was enqueued + */ +static struct ip_reassdata* +ip_reass_enqueue_new_datagram(struct ip_hdr *fraghdr, int clen) +{ + struct ip_reassdata* ipr; + /* No matching previous fragment found, allocate a new reassdata struct */ + ipr = memp_malloc(MEMP_REASSDATA); + if (ipr == NULL) { +#if IP_REASS_FREE_OLDEST + if (ip_reass_remove_oldest_datagram(fraghdr, clen) >= clen) { + ipr = memp_malloc(MEMP_REASSDATA); + } + if (ipr == NULL) +#endif /* IP_REASS_FREE_OLDEST */ + { + IPFRAG_STATS_INC(ip_frag.memerr); + LWIP_DEBUGF(IP_REASS_DEBUG,("Failed to alloc reassdata struct\n")); + return NULL; + } + } + memset(ipr, 0, sizeof(struct ip_reassdata)); + ipr->timer = IP_REASS_MAXAGE; + + /* enqueue the new structure to the front of the list */ + ipr->next = reassdatagrams; + reassdatagrams = ipr; + /* copy the ip header for later tests and input */ + /* @todo: no ip options supported? */ + SMEMCPY(&(ipr->iphdr), fraghdr, IP_HLEN); + return ipr; +} + +/** + * Dequeues a datagram from the datagram queue. Doesn't deallocate the pbufs. + * @param ipr points to the queue entry to dequeue + */ +static void +ip_reass_dequeue_datagram(struct ip_reassdata *ipr, struct ip_reassdata *prev) +{ + + /* dequeue the reass struct */ + if (reassdatagrams == ipr) { + /* it was the first in the list */ + reassdatagrams = ipr->next; + } else { + /* it wasn't the first, so it must have a valid 'prev' */ + LWIP_ASSERT("sanity check linked list", prev != NULL); + prev->next = ipr->next; + } + + /* now we can free the ip_reass struct */ + memp_free(MEMP_REASSDATA, ipr); +} + +/** + * Chain a new pbuf into the pbuf list that composes the datagram. The pbuf list + * will grow over time as new pbufs are rx. + * Also checks that the datagram passes basic continuity checks (if the last + * fragment was received at least once). + * @param root_p points to the 'root' pbuf for the current datagram being assembled. + * @param new_p points to the pbuf for the current fragment + * @return 0 if invalid, >0 otherwise + */ +static int +ip_reass_chain_frag_into_datagram_and_validate(struct ip_reassdata *ipr, struct pbuf *new_p) +{ + struct ip_reass_helper *iprh, *iprh_tmp, *iprh_prev=NULL; + struct pbuf *q; + u16_t offset,len; + struct ip_hdr *fraghdr; + int valid = 1; + + /* Extract length and fragment offset from current fragment */ + fraghdr = (struct ip_hdr*)new_p->payload; + len = ntohs(IPH_LEN(fraghdr)) - IPH_HL(fraghdr) * 4; + offset = (ntohs(IPH_OFFSET(fraghdr)) & IP_OFFMASK) * 8; + + /* overwrite the fragment's ip header from the pbuf with our helper struct, + * and setup the embedded helper structure. */ + /* make sure the struct ip_reass_helper fits into the IP header */ + LWIP_ASSERT("sizeof(struct ip_reass_helper) <= IP_HLEN", + sizeof(struct ip_reass_helper) <= IP_HLEN); + iprh = (struct ip_reass_helper*)new_p->payload; + iprh->next_pbuf = NULL; + iprh->start = offset; + iprh->end = offset + len; + + /* Iterate through until we either get to the end of the list (append), + * or we find on with a larger offset (insert). */ + for (q = ipr->p; q != NULL;) { + iprh_tmp = (struct ip_reass_helper*)q->payload; + if (iprh->start < iprh_tmp->start) { + /* the new pbuf should be inserted before this */ + iprh->next_pbuf = q; + if (iprh_prev != NULL) { + /* not the fragment with the lowest offset */ +#if IP_REASS_CHECK_OVERLAP + if ((iprh->start < iprh_prev->end) || (iprh->end > iprh_tmp->start)) { + /* fragment overlaps with previous or following, throw away */ + goto freepbuf; + } +#endif /* IP_REASS_CHECK_OVERLAP */ + iprh_prev->next_pbuf = new_p; + } else { + /* fragment with the lowest offset */ + ipr->p = new_p; + } + break; + } else if(iprh->start == iprh_tmp->start) { + /* received the same datagram twice: no need to keep the datagram */ + goto freepbuf; +#if IP_REASS_CHECK_OVERLAP + } else if(iprh->start < iprh_tmp->end) { + /* overlap: no need to keep the new datagram */ + goto freepbuf; +#endif /* IP_REASS_CHECK_OVERLAP */ + } else { + /* Check if the fragments received so far have no wholes. */ + if (iprh_prev != NULL) { + if (iprh_prev->end != iprh_tmp->start) { + /* There is a fragment missing between the current + * and the previous fragment */ + valid = 0; + } + } + } + q = iprh_tmp->next_pbuf; + iprh_prev = iprh_tmp; + } + + /* If q is NULL, then we made it to the end of the list. Determine what to do now */ + if (q == NULL) { + if (iprh_prev != NULL) { + /* this is (for now), the fragment with the highest offset: + * chain it to the last fragment */ +#if IP_REASS_CHECK_OVERLAP + LWIP_ASSERT("check fragments don't overlap", iprh_prev->end <= iprh->start); +#endif /* IP_REASS_CHECK_OVERLAP */ + iprh_prev->next_pbuf = new_p; + if (iprh_prev->end != iprh->start) { + valid = 0; + } + } else { +#if IP_REASS_CHECK_OVERLAP + LWIP_ASSERT("no previous fragment, this must be the first fragment!", + ipr->p == NULL); +#endif /* IP_REASS_CHECK_OVERLAP */ + /* this is the first fragment we ever received for this ip datagram */ + ipr->p = new_p; + } + } + + /* At this point, the validation part begins: */ + /* If we already received the last fragment */ + if ((ipr->flags & IP_REASS_FLAG_LASTFRAG) != 0) { + /* and had no wholes so far */ + if (valid) { + /* then check if the rest of the fragments is here */ + /* Check if the queue starts with the first datagram */ + if (((struct ip_reass_helper*)ipr->p->payload)->start != 0) { + valid = 0; + } else { + /* and check that there are no wholes after this datagram */ + iprh_prev = iprh; + q = iprh->next_pbuf; + while (q != NULL) { + iprh = (struct ip_reass_helper*)q->payload; + if (iprh_prev->end != iprh->start) { + valid = 0; + break; + } + iprh_prev = iprh; + q = iprh->next_pbuf; + } + /* if still valid, all fragments are received + * (because to the MF==0 already arrived */ + if (valid) { + LWIP_ASSERT("sanity check", ipr->p != NULL); + LWIP_ASSERT("sanity check", + ((struct ip_reass_helper*)ipr->p->payload) != iprh); + LWIP_ASSERT("validate_datagram:next_pbuf!=NULL", + iprh->next_pbuf == NULL); + LWIP_ASSERT("validate_datagram:datagram end!=datagram len", + iprh->end == ipr->datagram_len); + } + } + } + /* If valid is 0 here, there are some fragments missing in the middle + * (since MF == 0 has already arrived). Such datagrams simply time out if + * no more fragments are received... */ + return valid; + } + /* If we come here, not all fragments were received, yet! */ + return 0; /* not yet valid! */ +#if IP_REASS_CHECK_OVERLAP +freepbuf: + ip_reass_pbufcount -= pbuf_clen(new_p); + pbuf_free(new_p); + return 0; +#endif /* IP_REASS_CHECK_OVERLAP */ +} + +/** + * Reassembles incoming IP fragments into an IP datagram. + * + * @param p points to a pbuf chain of the fragment + * @return NULL if reassembly is incomplete, ? otherwise + */ +struct pbuf * +ip_reass(struct pbuf *p) +{ + struct pbuf *r; + struct ip_hdr *fraghdr; + struct ip_reassdata *ipr; + struct ip_reass_helper *iprh; + u16_t offset, len; + u8_t clen; + struct ip_reassdata *ipr_prev = NULL; + + IPFRAG_STATS_INC(ip_frag.recv); + snmp_inc_ipreasmreqds(); + + fraghdr = (struct ip_hdr*)p->payload; + + if ((IPH_HL(fraghdr) * 4) != IP_HLEN) { + LWIP_DEBUGF(IP_REASS_DEBUG,("ip_reass: IP options currently not supported!\n")); + IPFRAG_STATS_INC(ip_frag.err); + goto nullreturn; + } + + offset = (ntohs(IPH_OFFSET(fraghdr)) & IP_OFFMASK) * 8; + len = ntohs(IPH_LEN(fraghdr)) - IPH_HL(fraghdr) * 4; + + /* Check if we are allowed to enqueue more datagrams. */ + clen = pbuf_clen(p); + if ((ip_reass_pbufcount + clen) > IP_REASS_MAX_PBUFS) { +#if IP_REASS_FREE_OLDEST + if (!ip_reass_remove_oldest_datagram(fraghdr, clen) || + ((ip_reass_pbufcount + clen) > IP_REASS_MAX_PBUFS)) +#endif /* IP_REASS_FREE_OLDEST */ + { + /* No datagram could be freed and still too many pbufs enqueued */ + LWIP_DEBUGF(IP_REASS_DEBUG,("ip_reass: Overflow condition: pbufct=%d, clen=%d, MAX=%d\n", + ip_reass_pbufcount, clen, IP_REASS_MAX_PBUFS)); + IPFRAG_STATS_INC(ip_frag.memerr); + /* @todo: send ICMP time exceeded here? */ + /* drop this pbuf */ + goto nullreturn; + } + } + + /* Look for the datagram the fragment belongs to in the current datagram queue, + * remembering the previous in the queue for later dequeueing. */ + for (ipr = reassdatagrams; ipr != NULL; ipr = ipr->next) { + /* Check if the incoming fragment matches the one currently present + in the reassembly buffer. If so, we proceed with copying the + fragment into the buffer. */ + if (IP_ADDRESSES_AND_ID_MATCH(&ipr->iphdr, fraghdr)) { + LWIP_DEBUGF(IP_REASS_DEBUG, ("ip_reass: matching previous fragment ID=%"X16_F"\n", + ntohs(IPH_ID(fraghdr)))); + IPFRAG_STATS_INC(ip_frag.cachehit); + break; + } + ipr_prev = ipr; + } + + if (ipr == NULL) { + /* Enqueue a new datagram into the datagram queue */ + ipr = ip_reass_enqueue_new_datagram(fraghdr, clen); + /* Bail if unable to enqueue */ + if(ipr == NULL) { + goto nullreturn; + } + } else { + if (((ntohs(IPH_OFFSET(fraghdr)) & IP_OFFMASK) == 0) && + ((ntohs(IPH_OFFSET(&ipr->iphdr)) & IP_OFFMASK) != 0)) { + /* ipr->iphdr is not the header from the first fragment, but fraghdr is + * -> copy fraghdr into ipr->iphdr since we want to have the header + * of the first fragment (for ICMP time exceeded and later, for copying + * all options, if supported)*/ + SMEMCPY(&ipr->iphdr, fraghdr, IP_HLEN); + } + } + /* Track the current number of pbufs current 'in-flight', in order to limit + the number of fragments that may be enqueued at any one time */ + ip_reass_pbufcount += clen; + + /* At this point, we have either created a new entry or pointing + * to an existing one */ + + /* check for 'no more fragments', and update queue entry*/ + if ((ntohs(IPH_OFFSET(fraghdr)) & IP_MF) == 0) { + ipr->flags |= IP_REASS_FLAG_LASTFRAG; + ipr->datagram_len = offset + len; + LWIP_DEBUGF(IP_REASS_DEBUG, + ("ip_reass: last fragment seen, total len %"S16_F"\n", + ipr->datagram_len)); + } + /* find the right place to insert this pbuf */ + /* @todo: trim pbufs if fragments are overlapping */ + if (ip_reass_chain_frag_into_datagram_and_validate(ipr, p)) { + /* the totally last fragment (flag more fragments = 0) was received at least + * once AND all fragments are received */ + ipr->datagram_len += IP_HLEN; + + /* save the second pbuf before copying the header over the pointer */ + r = ((struct ip_reass_helper*)ipr->p->payload)->next_pbuf; + + /* copy the original ip header back to the first pbuf */ + fraghdr = (struct ip_hdr*)(ipr->p->payload); + SMEMCPY(fraghdr, &ipr->iphdr, IP_HLEN); + IPH_LEN_SET(fraghdr, htons(ipr->datagram_len)); + IPH_OFFSET_SET(fraghdr, 0); + IPH_CHKSUM_SET(fraghdr, 0); + /* @todo: do we need to set calculate the correct checksum? */ + IPH_CHKSUM_SET(fraghdr, inet_chksum(fraghdr, IP_HLEN)); + + p = ipr->p; + + /* chain together the pbufs contained within the reass_data list. */ + while(r != NULL) { + iprh = (struct ip_reass_helper*)r->payload; + + /* hide the ip header for every succeding fragment */ + pbuf_header(r, -IP_HLEN); + pbuf_cat(p, r); + r = iprh->next_pbuf; + } + /* release the sources allocate for the fragment queue entry */ + ip_reass_dequeue_datagram(ipr, ipr_prev); + + /* and adjust the number of pbufs currently queued for reassembly. */ + ip_reass_pbufcount -= pbuf_clen(p); + + /* Return the pbuf chain */ + return p; + } + /* the datagram is not (yet?) reassembled completely */ + LWIP_DEBUGF(IP_REASS_DEBUG,("ip_reass_pbufcount: %d out\n", ip_reass_pbufcount)); + return NULL; + +nullreturn: + LWIP_DEBUGF(IP_REASS_DEBUG,("ip_reass: nullreturn\n")); + IPFRAG_STATS_INC(ip_frag.drop); + pbuf_free(p); + return NULL; +} +#endif /* IP_REASSEMBLY */ + +#if IP_FRAG +#if IP_FRAG_USES_STATIC_BUF +static u8_t buf[LWIP_MEM_ALIGN_SIZE(IP_FRAG_MAX_MTU + MEM_ALIGNMENT - 1)]; +#endif /* IP_FRAG_USES_STATIC_BUF */ + +/** + * Fragment an IP datagram if too large for the netif. + * + * Chop the datagram in MTU sized chunks and send them in order + * by using a fixed size static memory buffer (PBUF_REF) or + * point PBUF_REFs into p (depending on IP_FRAG_USES_STATIC_BUF). + * + * @param p ip packet to send + * @param netif the netif on which to send + * @param dest destination ip address to which to send + * + * @return ERR_OK if sent successfully, err_t otherwise + */ +err_t +ip_frag(struct pbuf *p, struct netif *netif, struct ip_addr *dest) +{ + struct pbuf *rambuf; +#if IP_FRAG_USES_STATIC_BUF + struct pbuf *header; +#else + struct pbuf *newpbuf; + struct ip_hdr *original_iphdr; +#endif + struct ip_hdr *iphdr; + u16_t nfb; + u16_t left, cop; + u16_t mtu = netif->mtu; + u16_t ofo, omf; + u16_t last; + u16_t poff = IP_HLEN; + u16_t tmp; +#if !IP_FRAG_USES_STATIC_BUF + u16_t newpbuflen = 0; + u16_t left_to_copy; +#endif + + /* Get a RAM based MTU sized pbuf */ +#if IP_FRAG_USES_STATIC_BUF + /* When using a static buffer, we use a PBUF_REF, which we will + * use to reference the packet (without link header). + * Layer and length is irrelevant. + */ + rambuf = pbuf_alloc(PBUF_LINK, 0, PBUF_REF); + if (rambuf == NULL) { + LWIP_DEBUGF(IP_REASS_DEBUG, ("ip_frag: pbuf_alloc(PBUF_LINK, 0, PBUF_REF) failed\n")); + return ERR_MEM; + } + rambuf->tot_len = rambuf->len = mtu; + rambuf->payload = LWIP_MEM_ALIGN((void *)buf); + + /* Copy the IP header in it */ + iphdr = rambuf->payload; + SMEMCPY(iphdr, p->payload, IP_HLEN); +#else /* IP_FRAG_USES_STATIC_BUF */ + original_iphdr = p->payload; + iphdr = original_iphdr; +#endif /* IP_FRAG_USES_STATIC_BUF */ + + /* Save original offset */ + tmp = ntohs(IPH_OFFSET(iphdr)); + ofo = tmp & IP_OFFMASK; + omf = tmp & IP_MF; + + left = p->tot_len - IP_HLEN; + + nfb = (mtu - IP_HLEN) / 8; + + while (left) { + last = (left <= mtu - IP_HLEN); + + /* Set new offset and MF flag */ + tmp = omf | (IP_OFFMASK & (ofo)); + if (!last) + tmp = tmp | IP_MF; + + /* Fill this fragment */ + cop = last ? left : nfb * 8; + +#if IP_FRAG_USES_STATIC_BUF + poff += pbuf_copy_partial(p, (u8_t*)iphdr + IP_HLEN, cop, poff); +#else /* IP_FRAG_USES_STATIC_BUF */ + /* When not using a static buffer, create a chain of pbufs. + * The first will be a PBUF_RAM holding the link and IP header. + * The rest will be PBUF_REFs mirroring the pbuf chain to be fragged, + * but limited to the size of an mtu. + */ + rambuf = pbuf_alloc(PBUF_LINK, IP_HLEN, PBUF_RAM); + if (rambuf == NULL) { + return ERR_MEM; + } + LWIP_ASSERT("this needs a pbuf in one piece!", + (p->len >= (IP_HLEN))); + SMEMCPY(rambuf->payload, original_iphdr, IP_HLEN); + iphdr = rambuf->payload; + + /* Can just adjust p directly for needed offset. */ + p->payload = (u8_t *)p->payload + poff; + p->len -= poff; + + left_to_copy = cop; + while (left_to_copy) { + newpbuflen = (left_to_copy < p->len) ? left_to_copy : p->len; + /* Is this pbuf already empty? */ + if (!newpbuflen) { + p = p->next; + continue; + } + newpbuf = pbuf_alloc(PBUF_RAW, 0, PBUF_REF); + if (newpbuf == NULL) { + pbuf_free(rambuf); + return ERR_MEM; + } + /* Mirror this pbuf, although we might not need all of it. */ + newpbuf->payload = p->payload; + newpbuf->len = newpbuf->tot_len = newpbuflen; + /* Add it to end of rambuf's chain, but using pbuf_cat, not pbuf_chain + * so that it is removed when pbuf_dechain is later called on rambuf. + */ + pbuf_cat(rambuf, newpbuf); + left_to_copy -= newpbuflen; + if (left_to_copy) + p = p->next; + } + poff = newpbuflen; +#endif /* IP_FRAG_USES_STATIC_BUF */ + + /* Correct header */ + IPH_OFFSET_SET(iphdr, htons(tmp)); + IPH_LEN_SET(iphdr, htons(cop + IP_HLEN)); + IPH_CHKSUM_SET(iphdr, 0); + IPH_CHKSUM_SET(iphdr, inet_chksum(iphdr, IP_HLEN)); + +#if IP_FRAG_USES_STATIC_BUF + if (last) + pbuf_realloc(rambuf, left + IP_HLEN); + + /* This part is ugly: we alloc a RAM based pbuf for + * the link level header for each chunk and then + * free it.A PBUF_ROM style pbuf for which pbuf_header + * worked would make things simpler. + */ + header = pbuf_alloc(PBUF_LINK, 0, PBUF_RAM); + if (header != NULL) { + pbuf_chain(header, rambuf); + netif->output(netif, header, dest); + IPFRAG_STATS_INC(ip_frag.xmit); + snmp_inc_ipfragcreates(); + pbuf_free(header); + } else { + LWIP_DEBUGF(IP_REASS_DEBUG, ("ip_frag: pbuf_alloc() for header failed\n")); + pbuf_free(rambuf); + return ERR_MEM; + } +#else /* IP_FRAG_USES_STATIC_BUF */ + /* No need for separate header pbuf - we allowed room for it in rambuf + * when allocated. + */ + netif->output(netif, rambuf, dest); + IPFRAG_STATS_INC(ip_frag.xmit); + + /* Unfortunately we can't reuse rambuf - the hardware may still be + * using the buffer. Instead we free it (and the ensuing chain) and + * recreate it next time round the loop. If we're lucky the hardware + * will have already sent the packet, the free will really free, and + * there will be zero memory penalty. + */ + + pbuf_free(rambuf); +#endif /* IP_FRAG_USES_STATIC_BUF */ + left -= cop; + ofo += nfb; + } +#if IP_FRAG_USES_STATIC_BUF + pbuf_free(rambuf); +#endif /* IP_FRAG_USES_STATIC_BUF */ + snmp_inc_ipfragoks(); + return ERR_OK; +} +#endif /* IP_FRAG */ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/mem.c b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/mem.c new file mode 100644 index 000000000..ea3f4a6cd --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/mem.c @@ -0,0 +1,635 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/** + * @file + * Dynamic memory manager + * + * This is a lightweight replacement for the standard C library malloc(). + * + * If you want to use the standard C library malloc() instead, define + * MEM_LIBC_MALLOC to 1 in your lwipopts.h + * + * To let mem_malloc() use pools (prevents fragmentation and is much faster than + * a heap but might waste some memory), define MEM_USE_POOLS to 1, define + * MEM_USE_CUSTOM_POOLS to 1 and create a file "lwippools.h" that includes a list + * of pools like this (more pools can be added between _START and _END): + * + * Define three pools with sizes 256, 512, and 1512 bytes + * LWIP_MALLOC_MEMPOOL_START + * LWIP_MALLOC_MEMPOOL(20, 256) + * LWIP_MALLOC_MEMPOOL(10, 512) + * LWIP_MALLOC_MEMPOOL(5, 1512) + * LWIP_MALLOC_MEMPOOL_END + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * Simon Goldschmidt + * + */ + +#include "lwip/opt.h" + +#if !MEM_LIBC_MALLOC /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/def.h" +#include "lwip/mem.h" +#include "lwip/sys.h" +#include "lwip/stats.h" + +#include + +#if MEM_USE_POOLS +/* lwIP head implemented with different sized pools */ + +/** + * Allocate memory: determine the smallest pool that is big enough + * to contain an element of 'size' and get an element from that pool. + * + * @param size the size in bytes of the memory needed + * @return a pointer to the allocated memory or NULL if the pool is empty + */ +void * +mem_malloc(mem_size_t size) +{ + struct memp_malloc_helper *element; + memp_t poolnr; + mem_size_t required_size = size + sizeof(struct memp_malloc_helper); + + for (poolnr = MEMP_POOL_FIRST; poolnr <= MEMP_POOL_LAST; poolnr++) { +#if MEM_USE_POOLS_TRY_BIGGER_POOL +again: +#endif /* MEM_USE_POOLS_TRY_BIGGER_POOL */ + /* is this pool big enough to hold an element of the required size + plus a struct memp_malloc_helper that saves the pool this element came from? */ + if (required_size <= memp_sizes[poolnr]) { + break; + } + } + if (poolnr > MEMP_POOL_LAST) { + LWIP_ASSERT("mem_malloc(): no pool is that big!", 0); + return NULL; + } + element = (struct memp_malloc_helper*)memp_malloc(poolnr); + if (element == NULL) { + /* No need to DEBUGF or ASSERT: This error is already + taken care of in memp.c */ +#if MEM_USE_POOLS_TRY_BIGGER_POOL + /** Try a bigger pool if this one is empty! */ + if (poolnr < MEMP_POOL_LAST) { + poolnr++; + goto again; + } +#endif /* MEM_USE_POOLS_TRY_BIGGER_POOL */ + return NULL; + } + + /* save the pool number this element came from */ + element->poolnr = poolnr; + /* and return a pointer to the memory directly after the struct memp_malloc_helper */ + element++; + + return element; +} + +/** + * Free memory previously allocated by mem_malloc. Loads the pool number + * and calls memp_free with that pool number to put the element back into + * its pool + * + * @param rmem the memory element to free + */ +void +mem_free(void *rmem) +{ + struct memp_malloc_helper *hmem = (struct memp_malloc_helper*)rmem; + + LWIP_ASSERT("rmem != NULL", (rmem != NULL)); + LWIP_ASSERT("rmem == MEM_ALIGN(rmem)", (rmem == LWIP_MEM_ALIGN(rmem))); + + /* get the original struct memp_malloc_helper */ + hmem--; + + LWIP_ASSERT("hmem != NULL", (hmem != NULL)); + LWIP_ASSERT("hmem == MEM_ALIGN(hmem)", (hmem == LWIP_MEM_ALIGN(hmem))); + LWIP_ASSERT("hmem->poolnr < MEMP_MAX", (hmem->poolnr < MEMP_MAX)); + + /* and put it in the pool we saved earlier */ + memp_free(hmem->poolnr, hmem); +} + +#else /* MEM_USE_POOLS */ +/* lwIP replacement for your libc malloc() */ + +/** + * The heap is made up as a list of structs of this type. + * This does not have to be aligned since for getting its size, + * we only use the macro SIZEOF_STRUCT_MEM, which automatically alignes. + */ +struct mem { + /** index (-> ram[next]) of the next struct */ + mem_size_t next; + /** index (-> ram[next]) of the next struct */ + mem_size_t prev; + /** 1: this area is used; 0: this area is unused */ + u8_t used; +}; + +/** All allocated blocks will be MIN_SIZE bytes big, at least! + * MIN_SIZE can be overridden to suit your needs. Smaller values save space, + * larger values could prevent too small blocks to fragment the RAM too much. */ +#ifndef MIN_SIZE +#define MIN_SIZE 12 +#endif /* MIN_SIZE */ +/* some alignment macros: we define them here for better source code layout */ +#define MIN_SIZE_ALIGNED LWIP_MEM_ALIGN_SIZE(MIN_SIZE) +#define SIZEOF_STRUCT_MEM LWIP_MEM_ALIGN_SIZE(sizeof(struct mem)) +#define MEM_SIZE_ALIGNED LWIP_MEM_ALIGN_SIZE(MEM_SIZE) + +/** the heap. we need one struct mem at the end and some room for alignment */ +static u8_t ram_heap[MEM_SIZE_ALIGNED + (2*SIZEOF_STRUCT_MEM) + MEM_ALIGNMENT]; +/** pointer to the heap (ram_heap): for alignment, ram is now a pointer instead of an array */ +static u8_t *ram; +/** the last entry, always unused! */ +static struct mem *ram_end; +/** pointer to the lowest free block, this is used for faster search */ +static struct mem *lfree; + +/** concurrent access protection */ +static sys_sem_t mem_sem; + +#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT + +static volatile u8_t mem_free_count; + +/* Allow mem_free from other (e.g. interrupt) context */ +#define LWIP_MEM_FREE_DECL_PROTECT() SYS_ARCH_DECL_PROTECT(lev_free) +#define LWIP_MEM_FREE_PROTECT() SYS_ARCH_PROTECT(lev_free) +#define LWIP_MEM_FREE_UNPROTECT() SYS_ARCH_UNPROTECT(lev_free) +#define LWIP_MEM_ALLOC_DECL_PROTECT() SYS_ARCH_DECL_PROTECT(lev_alloc) +#define LWIP_MEM_ALLOC_PROTECT() SYS_ARCH_PROTECT(lev_alloc) +#define LWIP_MEM_ALLOC_UNPROTECT() SYS_ARCH_UNPROTECT(lev_alloc) + +#else /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */ + +/* Protect the heap only by using a semaphore */ +#define LWIP_MEM_FREE_DECL_PROTECT() +#define LWIP_MEM_FREE_PROTECT() sys_arch_sem_wait(mem_sem, 0) +#define LWIP_MEM_FREE_UNPROTECT() sys_sem_signal(mem_sem) +/* mem_malloc is protected using semaphore AND LWIP_MEM_ALLOC_PROTECT */ +#define LWIP_MEM_ALLOC_DECL_PROTECT() +#define LWIP_MEM_ALLOC_PROTECT() +#define LWIP_MEM_ALLOC_UNPROTECT() + +#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */ + + +/** + * "Plug holes" by combining adjacent empty struct mems. + * After this function is through, there should not exist + * one empty struct mem pointing to another empty struct mem. + * + * @param mem this points to a struct mem which just has been freed + * @internal this function is only called by mem_free() and mem_realloc() + * + * This assumes access to the heap is protected by the calling function + * already. + */ +static void +plug_holes(struct mem *mem) +{ + struct mem *nmem; + struct mem *pmem; + + LWIP_ASSERT("plug_holes: mem >= ram", (u8_t *)mem >= ram); + LWIP_ASSERT("plug_holes: mem < ram_end", (u8_t *)mem < (u8_t *)ram_end); + LWIP_ASSERT("plug_holes: mem->used == 0", mem->used == 0); + + /* plug hole forward */ + LWIP_ASSERT("plug_holes: mem->next <= MEM_SIZE_ALIGNED", mem->next <= MEM_SIZE_ALIGNED); + + nmem = (struct mem *)&ram[mem->next]; + if (mem != nmem && nmem->used == 0 && (u8_t *)nmem != (u8_t *)ram_end) { + /* if mem->next is unused and not end of ram, combine mem and mem->next */ + if (lfree == nmem) { + lfree = mem; + } + mem->next = nmem->next; + ((struct mem *)&ram[nmem->next])->prev = (u8_t *)mem - ram; + } + + /* plug hole backward */ + pmem = (struct mem *)&ram[mem->prev]; + if (pmem != mem && pmem->used == 0) { + /* if mem->prev is unused, combine mem and mem->prev */ + if (lfree == mem) { + lfree = pmem; + } + pmem->next = mem->next; + ((struct mem *)&ram[mem->next])->prev = (u8_t *)pmem - ram; + } +} + +/** + * Zero the heap and initialize start, end and lowest-free + */ +void +mem_init(void) +{ + struct mem *mem; + + LWIP_ASSERT("Sanity check alignment", + (SIZEOF_STRUCT_MEM & (MEM_ALIGNMENT-1)) == 0); + + /* align the heap */ + ram = LWIP_MEM_ALIGN(ram_heap); + /* initialize the start of the heap */ + mem = (struct mem *)ram; + mem->next = MEM_SIZE_ALIGNED; + mem->prev = 0; + mem->used = 0; + /* initialize the end of the heap */ + ram_end = (struct mem *)&ram[MEM_SIZE_ALIGNED]; + ram_end->used = 1; + ram_end->next = MEM_SIZE_ALIGNED; + ram_end->prev = MEM_SIZE_ALIGNED; + + mem_sem = sys_sem_new(1); + + /* initialize the lowest-free pointer to the start of the heap */ + lfree = (struct mem *)ram; + + MEM_STATS_AVAIL(avail, MEM_SIZE_ALIGNED); +} + +/** + * Put a struct mem back on the heap + * + * @param rmem is the data portion of a struct mem as returned by a previous + * call to mem_malloc() + */ +void +mem_free(void *rmem) +{ + struct mem *mem; + LWIP_MEM_FREE_DECL_PROTECT(); + + if (rmem == NULL) { + LWIP_DEBUGF(MEM_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("mem_free(p == NULL) was called.\n")); + return; + } + LWIP_ASSERT("mem_free: sanity check alignment", (((mem_ptr_t)rmem) & (MEM_ALIGNMENT-1)) == 0); + + LWIP_ASSERT("mem_free: legal memory", (u8_t *)rmem >= (u8_t *)ram && + (u8_t *)rmem < (u8_t *)ram_end); + + if ((u8_t *)rmem < (u8_t *)ram || (u8_t *)rmem >= (u8_t *)ram_end) { + SYS_ARCH_DECL_PROTECT(lev); + LWIP_DEBUGF(MEM_DEBUG | LWIP_DBG_LEVEL_SEVERE, ("mem_free: illegal memory\n")); + /* protect mem stats from concurrent access */ + SYS_ARCH_PROTECT(lev); + MEM_STATS_INC(illegal); + SYS_ARCH_UNPROTECT(lev); + return; + } + /* protect the heap from concurrent access */ + LWIP_MEM_FREE_PROTECT(); + /* Get the corresponding struct mem ... */ + mem = (struct mem *)((u8_t *)rmem - SIZEOF_STRUCT_MEM); + /* ... which has to be in a used state ... */ + LWIP_ASSERT("mem_free: mem->used", mem->used); + /* ... and is now unused. */ + mem->used = 0; + + if (mem < lfree) { + /* the newly freed struct is now the lowest */ + lfree = mem; + } + + MEM_STATS_DEC_USED(used, mem->next - ((u8_t *)mem - ram)); + + /* finally, see if prev or next are free also */ + plug_holes(mem); +#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT + mem_free_count = 1; +#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */ + LWIP_MEM_FREE_UNPROTECT(); +} + +/** + * In contrast to its name, mem_realloc can only shrink memory, not expand it. + * Since the only use (for now) is in pbuf_realloc (which also can only shrink), + * this shouldn't be a problem! + * + * @param rmem pointer to memory allocated by mem_malloc the is to be shrinked + * @param newsize required size after shrinking (needs to be smaller than or + * equal to the previous size) + * @return for compatibility reasons: is always == rmem, at the moment + * or NULL if newsize is > old size, in which case rmem is NOT touched + * or freed! + */ +void * +mem_realloc(void *rmem, mem_size_t newsize) +{ + mem_size_t size; + mem_size_t ptr, ptr2; + struct mem *mem, *mem2; + /* use the FREE_PROTECT here: it protects with sem OR SYS_ARCH_PROTECT */ + LWIP_MEM_FREE_DECL_PROTECT(); + + /* Expand the size of the allocated memory region so that we can + adjust for alignment. */ + newsize = LWIP_MEM_ALIGN_SIZE(newsize); + + if(newsize < MIN_SIZE_ALIGNED) { + /* every data block must be at least MIN_SIZE_ALIGNED long */ + newsize = MIN_SIZE_ALIGNED; + } + + if (newsize > MEM_SIZE_ALIGNED) { + return NULL; + } + + LWIP_ASSERT("mem_realloc: legal memory", (u8_t *)rmem >= (u8_t *)ram && + (u8_t *)rmem < (u8_t *)ram_end); + + if ((u8_t *)rmem < (u8_t *)ram || (u8_t *)rmem >= (u8_t *)ram_end) { + SYS_ARCH_DECL_PROTECT(lev); + LWIP_DEBUGF(MEM_DEBUG | LWIP_DBG_LEVEL_SEVERE, ("mem_realloc: illegal memory\n")); + /* protect mem stats from concurrent access */ + SYS_ARCH_PROTECT(lev); + MEM_STATS_INC(illegal); + SYS_ARCH_UNPROTECT(lev); + return rmem; + } + /* Get the corresponding struct mem ... */ + mem = (struct mem *)((u8_t *)rmem - SIZEOF_STRUCT_MEM); + /* ... and its offset pointer */ + ptr = (u8_t *)mem - ram; + + size = mem->next - ptr - SIZEOF_STRUCT_MEM; + LWIP_ASSERT("mem_realloc can only shrink memory", newsize <= size); + if (newsize > size) { + /* not supported */ + return NULL; + } + if (newsize == size) { + /* No change in size, simply return */ + return rmem; + } + + /* protect the heap from concurrent access */ + LWIP_MEM_FREE_PROTECT(); + + MEM_STATS_DEC_USED(used, (size - newsize)); + + mem2 = (struct mem *)&ram[mem->next]; + if(mem2->used == 0) { + /* The next struct is unused, we can simply move it at little */ + mem_size_t next; + /* remember the old next pointer */ + next = mem2->next; + /* create new struct mem which is moved directly after the shrinked mem */ + ptr2 = ptr + SIZEOF_STRUCT_MEM + newsize; + if (lfree == mem2) { + lfree = (struct mem *)&ram[ptr2]; + } + mem2 = (struct mem *)&ram[ptr2]; + mem2->used = 0; + /* restore the next pointer */ + mem2->next = next; + /* link it back to mem */ + mem2->prev = ptr; + /* link mem to it */ + mem->next = ptr2; + /* last thing to restore linked list: as we have moved mem2, + * let 'mem2->next->prev' point to mem2 again. but only if mem2->next is not + * the end of the heap */ + if (mem2->next != MEM_SIZE_ALIGNED) { + ((struct mem *)&ram[mem2->next])->prev = ptr2; + } + /* no need to plug holes, we've already done that */ + } else if (newsize + SIZEOF_STRUCT_MEM + MIN_SIZE_ALIGNED <= size) { + /* Next struct is used but there's room for another struct mem with + * at least MIN_SIZE_ALIGNED of data. + * Old size ('size') must be big enough to contain at least 'newsize' plus a struct mem + * ('SIZEOF_STRUCT_MEM') with some data ('MIN_SIZE_ALIGNED'). + * @todo we could leave out MIN_SIZE_ALIGNED. We would create an empty + * region that couldn't hold data, but when mem->next gets freed, + * the 2 regions would be combined, resulting in more free memory */ + ptr2 = ptr + SIZEOF_STRUCT_MEM + newsize; + mem2 = (struct mem *)&ram[ptr2]; + if (mem2 < lfree) { + lfree = mem2; + } + mem2->used = 0; + mem2->next = mem->next; + mem2->prev = ptr; + mem->next = ptr2; + if (mem2->next != MEM_SIZE_ALIGNED) { + ((struct mem *)&ram[mem2->next])->prev = ptr2; + } + /* the original mem->next is used, so no need to plug holes! */ + } + /* else { + next struct mem is used but size between mem and mem2 is not big enough + to create another struct mem + -> don't do anyhting. + -> the remaining space stays unused since it is too small + } */ +#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT + mem_free_count = 1; +#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */ + LWIP_MEM_FREE_UNPROTECT(); + return rmem; +} + +/** + * Adam's mem_malloc() plus solution for bug #17922 + * Allocate a block of memory with a minimum of 'size' bytes. + * + * @param size is the minimum size of the requested block in bytes. + * @return pointer to allocated memory or NULL if no free memory was found. + * + * Note that the returned value will always be aligned (as defined by MEM_ALIGNMENT). + */ +void * +mem_malloc(mem_size_t size) +{ + mem_size_t ptr, ptr2; + struct mem *mem, *mem2; +#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT + u8_t local_mem_free_count = 0; +#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */ + LWIP_MEM_ALLOC_DECL_PROTECT(); + + if (size == 0) { + return NULL; + } + + /* Expand the size of the allocated memory region so that we can + adjust for alignment. */ + size = LWIP_MEM_ALIGN_SIZE(size); + + if(size < MIN_SIZE_ALIGNED) { + /* every data block must be at least MIN_SIZE_ALIGNED long */ + size = MIN_SIZE_ALIGNED; + } + + if (size > MEM_SIZE_ALIGNED) { + return NULL; + } + + /* protect the heap from concurrent access */ + sys_arch_sem_wait(mem_sem, 0); + LWIP_MEM_ALLOC_PROTECT(); +#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT + /* run as long as a mem_free disturbed mem_malloc */ + do { + local_mem_free_count = 0; +#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */ + + /* Scan through the heap searching for a free block that is big enough, + * beginning with the lowest free block. + */ + for (ptr = (u8_t *)lfree - ram; ptr < MEM_SIZE_ALIGNED - size; + ptr = ((struct mem *)&ram[ptr])->next) { + mem = (struct mem *)&ram[ptr]; +#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT + mem_free_count = 0; + LWIP_MEM_ALLOC_UNPROTECT(); + /* allow mem_free to run */ + LWIP_MEM_ALLOC_PROTECT(); + if (mem_free_count != 0) { + local_mem_free_count = mem_free_count; + } + mem_free_count = 0; +#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */ + + if ((!mem->used) && + (mem->next - (ptr + SIZEOF_STRUCT_MEM)) >= size) { + /* mem is not used and at least perfect fit is possible: + * mem->next - (ptr + SIZEOF_STRUCT_MEM) gives us the 'user data size' of mem */ + + if (mem->next - (ptr + SIZEOF_STRUCT_MEM) >= (size + SIZEOF_STRUCT_MEM + MIN_SIZE_ALIGNED)) { + /* (in addition to the above, we test if another struct mem (SIZEOF_STRUCT_MEM) containing + * at least MIN_SIZE_ALIGNED of data also fits in the 'user data space' of 'mem') + * -> split large block, create empty remainder, + * remainder must be large enough to contain MIN_SIZE_ALIGNED data: if + * mem->next - (ptr + (2*SIZEOF_STRUCT_MEM)) == size, + * struct mem would fit in but no data between mem2 and mem2->next + * @todo we could leave out MIN_SIZE_ALIGNED. We would create an empty + * region that couldn't hold data, but when mem->next gets freed, + * the 2 regions would be combined, resulting in more free memory + */ + ptr2 = ptr + SIZEOF_STRUCT_MEM + size; + /* create mem2 struct */ + mem2 = (struct mem *)&ram[ptr2]; + mem2->used = 0; + mem2->next = mem->next; + mem2->prev = ptr; + /* and insert it between mem and mem->next */ + mem->next = ptr2; + mem->used = 1; + + if (mem2->next != MEM_SIZE_ALIGNED) { + ((struct mem *)&ram[mem2->next])->prev = ptr2; + } + MEM_STATS_INC_USED(used, (size + SIZEOF_STRUCT_MEM)); + } else { + /* (a mem2 struct does no fit into the user data space of mem and mem->next will always + * be used at this point: if not we have 2 unused structs in a row, plug_holes should have + * take care of this). + * -> near fit or excact fit: do not split, no mem2 creation + * also can't move mem->next directly behind mem, since mem->next + * will always be used at this point! + */ + mem->used = 1; + MEM_STATS_INC_USED(used, mem->next - ((u8_t *)mem - ram)); + } + + if (mem == lfree) { + /* Find next free block after mem and update lowest free pointer */ + while (lfree->used && lfree != ram_end) { + LWIP_MEM_ALLOC_UNPROTECT(); + /* prevent high interrupt latency... */ + LWIP_MEM_ALLOC_PROTECT(); + lfree = (struct mem *)&ram[lfree->next]; + } + LWIP_ASSERT("mem_malloc: !lfree->used", ((lfree == ram_end) || (!lfree->used))); + } + LWIP_MEM_ALLOC_UNPROTECT(); + sys_sem_signal(mem_sem); + LWIP_ASSERT("mem_malloc: allocated memory not above ram_end.", + (mem_ptr_t)mem + SIZEOF_STRUCT_MEM + size <= (mem_ptr_t)ram_end); + LWIP_ASSERT("mem_malloc: allocated memory properly aligned.", + ((mem_ptr_t)mem + SIZEOF_STRUCT_MEM) % MEM_ALIGNMENT == 0); + LWIP_ASSERT("mem_malloc: sanity check alignment", + (((mem_ptr_t)mem) & (MEM_ALIGNMENT-1)) == 0); + + return (u8_t *)mem + SIZEOF_STRUCT_MEM; + } + } +#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT + /* if we got interrupted by a mem_free, try again */ + } while(local_mem_free_count != 0); +#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */ + LWIP_DEBUGF(MEM_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("mem_malloc: could not allocate %"S16_F" bytes\n", (s16_t)size)); + MEM_STATS_INC(err); + LWIP_MEM_ALLOC_UNPROTECT(); + sys_sem_signal(mem_sem); + return NULL; +} + +#endif /* MEM_USE_POOLS */ +/** + * Contiguously allocates enough space for count objects that are size bytes + * of memory each and returns a pointer to the allocated memory. + * + * The allocated memory is filled with bytes of value zero. + * + * @param count number of objects to allocate + * @param size size of the objects to allocate + * @return pointer to allocated memory / NULL pointer if there is an error + */ +void *mem_calloc(mem_size_t count, mem_size_t size) +{ + void *p; + + /* allocate 'count' objects of size 'size' */ + p = mem_malloc(count * size); + if (p) { + /* zero the memory */ + memset(p, 0, count * size); + } + return p; +} + +#endif /* !MEM_LIBC_MALLOC */ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/memp.c b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/memp.c new file mode 100644 index 000000000..bd2fd26a8 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/memp.c @@ -0,0 +1,388 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/** + * @file + * Dynamic pool memory manager + * + * lwIP has dedicated pools for many structures (netconn, protocol control blocks, + * packet buffers, ...). All these pools are managed here. + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#include "lwip/opt.h" + +#include "lwip/memp.h" +#include "lwip/pbuf.h" +#include "lwip/udp.h" +#include "lwip/raw.h" +#include "lwip/tcp.h" +#include "lwip/igmp.h" +#include "lwip/api.h" +#include "lwip/api_msg.h" +#include "lwip/tcpip.h" +#include "lwip/sys.h" +#include "lwip/stats.h" +#include "netif/etharp.h" +#include "lwip/ip_frag.h" + +#include + +#if !MEMP_MEM_MALLOC /* don't build if not configured for use in lwipopts.h */ + +struct memp { + struct memp *next; +#if MEMP_OVERFLOW_CHECK + const char *file; + int line; +#endif /* MEMP_OVERFLOW_CHECK */ +}; + +#if MEMP_OVERFLOW_CHECK +/* if MEMP_OVERFLOW_CHECK is turned on, we reserve some bytes at the beginning + * and at the end of each element, initialize them as 0xcd and check + * them later. */ +/* If MEMP_OVERFLOW_CHECK is >= 2, on every call to memp_malloc or memp_free, + * every single element in each pool is checked! + * This is VERY SLOW but also very helpful. */ +/* MEMP_SANITY_REGION_BEFORE and MEMP_SANITY_REGION_AFTER can be overridden in + * lwipopts.h to change the amount reserved for checking. */ +#ifndef MEMP_SANITY_REGION_BEFORE +#define MEMP_SANITY_REGION_BEFORE 16 +#endif /* MEMP_SANITY_REGION_BEFORE*/ +#if MEMP_SANITY_REGION_BEFORE > 0 +#define MEMP_SANITY_REGION_BEFORE_ALIGNED LWIP_MEM_ALIGN_SIZE(MEMP_SANITY_REGION_BEFORE) +#else +#define MEMP_SANITY_REGION_BEFORE_ALIGNED 0 +#endif /* MEMP_SANITY_REGION_BEFORE*/ +#ifndef MEMP_SANITY_REGION_AFTER +#define MEMP_SANITY_REGION_AFTER 16 +#endif /* MEMP_SANITY_REGION_AFTER*/ +#if MEMP_SANITY_REGION_AFTER > 0 +#define MEMP_SANITY_REGION_AFTER_ALIGNED LWIP_MEM_ALIGN_SIZE(MEMP_SANITY_REGION_AFTER) +#else +#define MEMP_SANITY_REGION_AFTER_ALIGNED 0 +#endif /* MEMP_SANITY_REGION_AFTER*/ + +/* MEMP_SIZE: save space for struct memp and for sanity check */ +#define MEMP_SIZE (LWIP_MEM_ALIGN_SIZE(sizeof(struct memp)) + MEMP_SANITY_REGION_BEFORE_ALIGNED) +#define MEMP_ALIGN_SIZE(x) (LWIP_MEM_ALIGN_SIZE(x) + MEMP_SANITY_REGION_AFTER_ALIGNED) + +#else /* MEMP_OVERFLOW_CHECK */ + +/* No sanity checks + * We don't need to preserve the struct memp while not allocated, so we + * can save a little space and set MEMP_SIZE to 0. + */ +#define MEMP_SIZE 0 +#define MEMP_ALIGN_SIZE(x) (LWIP_MEM_ALIGN_SIZE(x)) + +#endif /* MEMP_OVERFLOW_CHECK */ + +/** This array holds the first free element of each pool. + * Elements form a linked list. */ +static struct memp *memp_tab[MEMP_MAX]; + +#else /* MEMP_MEM_MALLOC */ + +#define MEMP_ALIGN_SIZE(x) (LWIP_MEM_ALIGN_SIZE(x)) + +#endif /* MEMP_MEM_MALLOC */ + +/** This array holds the element sizes of each pool. */ +#if !MEM_USE_POOLS && !MEMP_MEM_MALLOC +static +#endif +const u16_t memp_sizes[MEMP_MAX] = { +#define LWIP_MEMPOOL(name,num,size,desc) LWIP_MEM_ALIGN_SIZE(size), +#include "lwip/memp_std.h" +}; + +#if !MEMP_MEM_MALLOC /* don't build if not configured for use in lwipopts.h */ + +/** This array holds the number of elements in each pool. */ +static const u16_t memp_num[MEMP_MAX] = { +#define LWIP_MEMPOOL(name,num,size,desc) (num), +#include "lwip/memp_std.h" +}; + +/** This array holds a textual description of each pool. */ +#ifdef LWIP_DEBUG +static const char *memp_desc[MEMP_MAX] = { +#define LWIP_MEMPOOL(name,num,size,desc) (desc), +#include "lwip/memp_std.h" +}; +#endif /* LWIP_DEBUG */ + +/** This is the actual memory used by the pools. */ +static u8_t memp_memory[MEM_ALIGNMENT - 1 +#define LWIP_MEMPOOL(name,num,size,desc) + ( (num) * (MEMP_SIZE + MEMP_ALIGN_SIZE(size) ) ) +#include "lwip/memp_std.h" +]; + +#if MEMP_SANITY_CHECK +/** + * Check that memp-lists don't form a circle + */ +static int +memp_sanity(void) +{ + s16_t i, c; + struct memp *m, *n; + + for (i = 0; i < MEMP_MAX; i++) { + for (m = memp_tab[i]; m != NULL; m = m->next) { + c = 1; + for (n = memp_tab[i]; n != NULL; n = n->next) { + if (n == m && --c < 0) { + return 0; + } + } + } + } + return 1; +} +#endif /* MEMP_SANITY_CHECK*/ +#if MEMP_OVERFLOW_CHECK +/** + * Check if a memp element was victim of an overflow + * (e.g. the restricted area after it has been altered) + * + * @param p the memp element to check + * @param memp_size the element size of the pool p comes from + */ +static void +memp_overflow_check_element(struct memp *p, u16_t memp_size) +{ + u16_t k; + u8_t *m; +#if MEMP_SANITY_REGION_BEFORE_ALIGNED > 0 + m = (u8_t*)p + MEMP_SIZE - MEMP_SANITY_REGION_BEFORE_ALIGNED; + for (k = 0; k < MEMP_SANITY_REGION_BEFORE_ALIGNED; k++) { + if (m[k] != 0xcd) { + LWIP_ASSERT("detected memp underflow!", 0); + } + } +#endif +#if MEMP_SANITY_REGION_AFTER_ALIGNED > 0 + m = (u8_t*)p + MEMP_SIZE + memp_size; + for (k = 0; k < MEMP_SANITY_REGION_AFTER_ALIGNED; k++) { + if (m[k] != 0xcd) { + LWIP_ASSERT("detected memp overflow!", 0); + } + } +#endif +} + +/** + * Do an overflow check for all elements in every pool. + * + * @see memp_overflow_check_element for a description of the check + */ +static void +memp_overflow_check_all(void) +{ + u16_t i, j; + struct memp *p; + + p = LWIP_MEM_ALIGN(memp_memory); + for (i = 0; i < MEMP_MAX; ++i) { + p = p; + for (j = 0; j < memp_num[i]; ++j) { + memp_overflow_check_element(p, memp_sizes[i]); + p = (struct memp*)((u8_t*)p + MEMP_SIZE + memp_sizes[i] + MEMP_SANITY_REGION_AFTER_ALIGNED); + } + } +} + +/** + * Initialize the restricted areas of all memp elements in every pool. + */ +static void +memp_overflow_init(void) +{ + u16_t i, j; + struct memp *p; + u8_t *m; + + p = LWIP_MEM_ALIGN(memp_memory); + for (i = 0; i < MEMP_MAX; ++i) { + p = p; + for (j = 0; j < memp_num[i]; ++j) { +#if MEMP_SANITY_REGION_BEFORE_ALIGNED > 0 + m = (u8_t*)p + MEMP_SIZE - MEMP_SANITY_REGION_BEFORE_ALIGNED; + memset(m, 0xcd, MEMP_SANITY_REGION_BEFORE_ALIGNED); +#endif +#if MEMP_SANITY_REGION_AFTER_ALIGNED > 0 + m = (u8_t*)p + MEMP_SIZE + memp_sizes[i]; + memset(m, 0xcd, MEMP_SANITY_REGION_AFTER_ALIGNED); +#endif + p = (struct memp*)((u8_t*)p + MEMP_SIZE + memp_sizes[i] + MEMP_SANITY_REGION_AFTER_ALIGNED); + } + } +} +#endif /* MEMP_OVERFLOW_CHECK */ + +/** + * Initialize this module. + * + * Carves out memp_memory into linked lists for each pool-type. + */ +void +memp_init(void) +{ + struct memp *memp; + u16_t i, j; + + for (i = 0; i < MEMP_MAX; ++i) { + MEMP_STATS_AVAIL(used, i, 0); + MEMP_STATS_AVAIL(max, i, 0); + MEMP_STATS_AVAIL(err, i, 0); + MEMP_STATS_AVAIL(avail, i, memp_num[i]); + } + + memp = LWIP_MEM_ALIGN(memp_memory); + /* for every pool: */ + for (i = 0; i < MEMP_MAX; ++i) { + memp_tab[i] = NULL; + /* create a linked list of memp elements */ + for (j = 0; j < memp_num[i]; ++j) { + memp->next = memp_tab[i]; + memp_tab[i] = memp; + memp = (struct memp *)((u8_t *)memp + MEMP_SIZE + memp_sizes[i] +#if MEMP_OVERFLOW_CHECK + + MEMP_SANITY_REGION_AFTER_ALIGNED +#endif + ); + } + } +#if MEMP_OVERFLOW_CHECK + memp_overflow_init(); + /* check everything a first time to see if it worked */ + memp_overflow_check_all(); +#endif /* MEMP_OVERFLOW_CHECK */ +} + +/** + * Get an element from a specific pool. + * + * @param type the pool to get an element from + * + * the debug version has two more parameters: + * @param file file name calling this function + * @param line number of line where this function is called + * + * @return a pointer to the allocated memory or a NULL pointer on error + */ +void * +#if !MEMP_OVERFLOW_CHECK +memp_malloc(memp_t type) +#else +memp_malloc_fn(memp_t type, const char* file, const int line) +#endif +{ + struct memp *memp; + SYS_ARCH_DECL_PROTECT(old_level); + + LWIP_ERROR("memp_malloc: type < MEMP_MAX", (type < MEMP_MAX), return NULL;); + + SYS_ARCH_PROTECT(old_level); +#if MEMP_OVERFLOW_CHECK >= 2 + memp_overflow_check_all(); +#endif /* MEMP_OVERFLOW_CHECK >= 2 */ + + memp = memp_tab[type]; + + if (memp != NULL) { + memp_tab[type] = memp->next; +#if MEMP_OVERFLOW_CHECK + memp->next = NULL; + memp->file = file; + memp->line = line; +#endif /* MEMP_OVERFLOW_CHECK */ + MEMP_STATS_INC_USED(used, type); + LWIP_ASSERT("memp_malloc: memp properly aligned", + ((mem_ptr_t)memp % MEM_ALIGNMENT) == 0); + memp = (struct memp*)((u8_t*)memp + MEMP_SIZE); + } else { + LWIP_DEBUGF(MEMP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("memp_malloc: out of memory in pool %s\n", memp_desc[type])); + MEMP_STATS_INC(err, type); + } + + SYS_ARCH_UNPROTECT(old_level); + + return memp; +} + +/** + * Put an element back into its pool. + * + * @param type the pool where to put mem + * @param mem the memp element to free + */ +void +memp_free(memp_t type, void *mem) +{ + struct memp *memp; + SYS_ARCH_DECL_PROTECT(old_level); + + if (mem == NULL) { + return; + } + LWIP_ASSERT("memp_free: mem properly aligned", + ((mem_ptr_t)mem % MEM_ALIGNMENT) == 0); + + memp = (struct memp *)((u8_t*)mem - MEMP_SIZE); + + SYS_ARCH_PROTECT(old_level); +#if MEMP_OVERFLOW_CHECK +#if MEMP_OVERFLOW_CHECK >= 2 + memp_overflow_check_all(); +#else + memp_overflow_check_element(memp, memp_sizes[type]); +#endif /* MEMP_OVERFLOW_CHECK >= 2 */ +#endif /* MEMP_OVERFLOW_CHECK */ + + MEMP_STATS_DEC(used, type); + + memp->next = memp_tab[type]; + memp_tab[type] = memp; + +#if MEMP_SANITY_CHECK + LWIP_ASSERT("memp sanity", memp_sanity()); +#endif /* MEMP_SANITY_CHECK */ + + SYS_ARCH_UNPROTECT(old_level); +} + +#endif /* MEMP_MEM_MALLOC */ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/netif.c b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/netif.c new file mode 100644 index 000000000..cf3815c49 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/netif.c @@ -0,0 +1,683 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/** + * @file + * lwIP network interface abstraction + * + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#include "lwip/opt.h" + +#include "lwip/def.h" +#include "lwip/ip_addr.h" +#include "lwip/netif.h" +#include "lwip/tcp.h" +#include "lwip/snmp.h" +#include "lwip/igmp.h" +#include "netif/etharp.h" +#if ENABLE_LOOPBACK +#include "lwip/sys.h" +#if LWIP_NETIF_LOOPBACK_MULTITHREADING +#include "lwip/tcpip.h" +#endif /* LWIP_NETIF_LOOPBACK_MULTITHREADING */ +#endif /* ENABLE_LOOPBACK */ + +#if LWIP_AUTOIP +#include "lwip/autoip.h" +#endif /* LWIP_AUTOIP */ +#if LWIP_DHCP +#include "lwip/dhcp.h" +#endif /* LWIP_DHCP */ + +#if LWIP_NETIF_STATUS_CALLBACK +#define NETIF_STATUS_CALLBACK(n) { if (n->status_callback) (n->status_callback)(n); } +#else +#define NETIF_STATUS_CALLBACK(n) { /* NOP */ } +#endif /* LWIP_NETIF_STATUS_CALLBACK */ + +#if LWIP_NETIF_LINK_CALLBACK +#define NETIF_LINK_CALLBACK(n) { if (n->link_callback) (n->link_callback)(n); } +#else +#define NETIF_LINK_CALLBACK(n) { /* NOP */ } +#endif /* LWIP_NETIF_LINK_CALLBACK */ + +struct netif *netif_list; +struct netif *netif_default; + +/** + * Add a network interface to the list of lwIP netifs. + * + * @param netif a pre-allocated netif structure + * @param ipaddr IP address for the new netif + * @param netmask network mask for the new netif + * @param gw default gateway IP address for the new netif + * @param state opaque data passed to the new netif + * @param init callback function that initializes the interface + * @param input callback function that is called to pass + * ingress packets up in the protocol layer stack. + * + * @return netif, or NULL if failed. + */ +struct netif * +netif_add(struct netif *netif, struct ip_addr *ipaddr, struct ip_addr *netmask, + struct ip_addr *gw, + void *state, + err_t (* init)(struct netif *netif), + err_t (* input)(struct pbuf *p, struct netif *netif)) +{ + static u8_t netifnum = 0; + + /* reset new interface configuration state */ + netif->ip_addr.addr = 0; + netif->netmask.addr = 0; + netif->gw.addr = 0; + netif->flags = 0; +#if LWIP_DHCP + /* netif not under DHCP control by default */ + netif->dhcp = NULL; +#endif /* LWIP_DHCP */ +#if LWIP_AUTOIP + /* netif not under AutoIP control by default */ + netif->autoip = NULL; +#endif /* LWIP_AUTOIP */ +#if LWIP_NETIF_STATUS_CALLBACK + netif->status_callback = NULL; +#endif /* LWIP_NETIF_STATUS_CALLBACK */ +#if LWIP_NETIF_LINK_CALLBACK + netif->link_callback = NULL; +#endif /* LWIP_NETIF_LINK_CALLBACK */ +#if LWIP_IGMP + netif->igmp_mac_filter = NULL; +#endif /* LWIP_IGMP */ +#if ENABLE_LOOPBACK + netif->loop_first = NULL; + netif->loop_last = NULL; +#endif /* ENABLE_LOOPBACK */ + + /* remember netif specific state information data */ + netif->state = state; + netif->num = netifnum++; + netif->input = input; +#if LWIP_NETIF_HWADDRHINT + netif->addr_hint = NULL; +#endif /* LWIP_NETIF_HWADDRHINT*/ +#if ENABLE_LOOPBACK && LWIP_LOOPBACK_MAX_PBUFS + netif->loop_cnt_current = 0; +#endif /* ENABLE_LOOPBACK && LWIP_LOOPBACK_MAX_PBUFS */ + + netif_set_addr(netif, ipaddr, netmask, gw); + + /* call user specified initialization function for netif */ + if (init(netif) != ERR_OK) { + return NULL; + } + + /* add this netif to the list */ + netif->next = netif_list; + netif_list = netif; + snmp_inc_iflist(); + +#if LWIP_IGMP + /* start IGMP processing */ + if (netif->flags & NETIF_FLAG_IGMP) { + igmp_start( netif); + } +#endif /* LWIP_IGMP */ + + LWIP_DEBUGF(NETIF_DEBUG, ("netif: added interface %c%c IP addr ", + netif->name[0], netif->name[1])); + ip_addr_debug_print(NETIF_DEBUG, ipaddr); + LWIP_DEBUGF(NETIF_DEBUG, (" netmask ")); + ip_addr_debug_print(NETIF_DEBUG, netmask); + LWIP_DEBUGF(NETIF_DEBUG, (" gw ")); + ip_addr_debug_print(NETIF_DEBUG, gw); + LWIP_DEBUGF(NETIF_DEBUG, ("\n")); + return netif; +} + +/** + * Change IP address configuration for a network interface (including netmask + * and default gateway). + * + * @param netif the network interface to change + * @param ipaddr the new IP address + * @param netmask the new netmask + * @param gw the new default gateway + */ +void +netif_set_addr(struct netif *netif, struct ip_addr *ipaddr, struct ip_addr *netmask, + struct ip_addr *gw) +{ + netif_set_ipaddr(netif, ipaddr); + netif_set_netmask(netif, netmask); + netif_set_gw(netif, gw); +} + +/** + * Remove a network interface from the list of lwIP netifs. + * + * @param netif the network interface to remove + */ +void netif_remove(struct netif * netif) +{ + if ( netif == NULL ) return; + +#if LWIP_IGMP + /* stop IGMP processing */ + if (netif->flags & NETIF_FLAG_IGMP) { + igmp_stop( netif); + } +#endif /* LWIP_IGMP */ + + snmp_delete_ipaddridx_tree(netif); + + /* is it the first netif? */ + if (netif_list == netif) { + netif_list = netif->next; + snmp_dec_iflist(); + } + else { + /* look for netif further down the list */ + struct netif * tmpNetif; + for (tmpNetif = netif_list; tmpNetif != NULL; tmpNetif = tmpNetif->next) { + if (tmpNetif->next == netif) { + tmpNetif->next = netif->next; + snmp_dec_iflist(); + break; + } + } + if (tmpNetif == NULL) + return; /* we didn't find any netif today */ + } + /* this netif is default? */ + if (netif_default == netif) + /* reset default netif */ + netif_set_default(NULL); + LWIP_DEBUGF( NETIF_DEBUG, ("netif_remove: removed netif\n") ); +} + +/** + * Find a network interface by searching for its name + * + * @param name the name of the netif (like netif->name) plus concatenated number + * in ascii representation (e.g. 'en0') + */ +struct netif * +netif_find(char *name) +{ + struct netif *netif; + u8_t num; + + if (name == NULL) { + return NULL; + } + + num = name[2] - '0'; + + for(netif = netif_list; netif != NULL; netif = netif->next) { + if (num == netif->num && + name[0] == netif->name[0] && + name[1] == netif->name[1]) { + LWIP_DEBUGF(NETIF_DEBUG, ("netif_find: found %c%c\n", name[0], name[1])); + return netif; + } + } + LWIP_DEBUGF(NETIF_DEBUG, ("netif_find: didn't find %c%c\n", name[0], name[1])); + return NULL; +} + +/** + * Change the IP address of a network interface + * + * @param netif the network interface to change + * @param ipaddr the new IP address + * + * @note call netif_set_addr() if you also want to change netmask and + * default gateway + */ +void +netif_set_ipaddr(struct netif *netif, struct ip_addr *ipaddr) +{ + /* TODO: Handling of obsolete pcbs */ + /* See: http://mail.gnu.org/archive/html/lwip-users/2003-03/msg00118.html */ +#if LWIP_TCP + struct tcp_pcb *pcb; + struct tcp_pcb_listen *lpcb; + + /* address is actually being changed? */ + if ((ip_addr_cmp(ipaddr, &(netif->ip_addr))) == 0) + { + /* extern struct tcp_pcb *tcp_active_pcbs; defined by tcp.h */ + LWIP_DEBUGF(NETIF_DEBUG | LWIP_DBG_STATE, ("netif_set_ipaddr: netif address being changed\n")); + pcb = tcp_active_pcbs; + while (pcb != NULL) { + /* PCB bound to current local interface address? */ + if (ip_addr_cmp(&(pcb->local_ip), &(netif->ip_addr))) { + /* this connection must be aborted */ + struct tcp_pcb *next = pcb->next; + LWIP_DEBUGF(NETIF_DEBUG | LWIP_DBG_STATE, ("netif_set_ipaddr: aborting TCP pcb %p\n", (void *)pcb)); + tcp_abort(pcb); + pcb = next; + } else { + pcb = pcb->next; + } + } + for (lpcb = tcp_listen_pcbs.listen_pcbs; lpcb != NULL; lpcb = lpcb->next) { + /* PCB bound to current local interface address? */ + if ((!(ip_addr_isany(&(lpcb->local_ip)))) && + (ip_addr_cmp(&(lpcb->local_ip), &(netif->ip_addr)))) { + /* The PCB is listening to the old ipaddr and + * is set to listen to the new one instead */ + ip_addr_set(&(lpcb->local_ip), ipaddr); + } + } + } +#endif + snmp_delete_ipaddridx_tree(netif); + snmp_delete_iprteidx_tree(0,netif); + /* set new IP address to netif */ + ip_addr_set(&(netif->ip_addr), ipaddr); + snmp_insert_ipaddridx_tree(netif); + snmp_insert_iprteidx_tree(0,netif); + + LWIP_DEBUGF(NETIF_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("netif: IP address of interface %c%c set to %"U16_F".%"U16_F".%"U16_F".%"U16_F"\n", + netif->name[0], netif->name[1], + ip4_addr1(&netif->ip_addr), + ip4_addr2(&netif->ip_addr), + ip4_addr3(&netif->ip_addr), + ip4_addr4(&netif->ip_addr))); +} + +/** + * Change the default gateway for a network interface + * + * @param netif the network interface to change + * @param gw the new default gateway + * + * @note call netif_set_addr() if you also want to change ip address and netmask + */ +void +netif_set_gw(struct netif *netif, struct ip_addr *gw) +{ + ip_addr_set(&(netif->gw), gw); + LWIP_DEBUGF(NETIF_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("netif: GW address of interface %c%c set to %"U16_F".%"U16_F".%"U16_F".%"U16_F"\n", + netif->name[0], netif->name[1], + ip4_addr1(&netif->gw), + ip4_addr2(&netif->gw), + ip4_addr3(&netif->gw), + ip4_addr4(&netif->gw))); +} + +/** + * Change the netmask of a network interface + * + * @param netif the network interface to change + * @param netmask the new netmask + * + * @note call netif_set_addr() if you also want to change ip address and + * default gateway + */ +void +netif_set_netmask(struct netif *netif, struct ip_addr *netmask) +{ + snmp_delete_iprteidx_tree(0, netif); + /* set new netmask to netif */ + ip_addr_set(&(netif->netmask), netmask); + snmp_insert_iprteidx_tree(0, netif); + LWIP_DEBUGF(NETIF_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("netif: netmask of interface %c%c set to %"U16_F".%"U16_F".%"U16_F".%"U16_F"\n", + netif->name[0], netif->name[1], + ip4_addr1(&netif->netmask), + ip4_addr2(&netif->netmask), + ip4_addr3(&netif->netmask), + ip4_addr4(&netif->netmask))); +} + +/** + * Set a network interface as the default network interface + * (used to output all packets for which no specific route is found) + * + * @param netif the default network interface + */ +void +netif_set_default(struct netif *netif) +{ + if (netif == NULL) + { + /* remove default route */ + snmp_delete_iprteidx_tree(1, netif); + } + else + { + /* install default route */ + snmp_insert_iprteidx_tree(1, netif); + } + netif_default = netif; + LWIP_DEBUGF(NETIF_DEBUG, ("netif: setting default interface %c%c\n", + netif ? netif->name[0] : '\'', netif ? netif->name[1] : '\'')); +} + +/** + * Bring an interface up, available for processing + * traffic. + * + * @note: Enabling DHCP on a down interface will make it come + * up once configured. + * + * @see dhcp_start() + */ +void netif_set_up(struct netif *netif) +{ + if ( !(netif->flags & NETIF_FLAG_UP )) { + netif->flags |= NETIF_FLAG_UP; + +#if LWIP_SNMP + snmp_get_sysuptime(&netif->ts); +#endif /* LWIP_SNMP */ + + NETIF_LINK_CALLBACK(netif); + NETIF_STATUS_CALLBACK(netif); + +#if LWIP_ARP + /* For Ethernet network interfaces, we would like to send a "gratuitous ARP" */ + if (netif->flags & NETIF_FLAG_ETHARP) { + etharp_gratuitous(netif); + } +#endif /* LWIP_ARP */ + +#if LWIP_IGMP + /* resend IGMP memberships */ + if (netif->flags & NETIF_FLAG_IGMP) { + igmp_report_groups( netif); + } +#endif /* LWIP_IGMP */ + } +} + +/** + * Bring an interface down, disabling any traffic processing. + * + * @note: Enabling DHCP on a down interface will make it come + * up once configured. + * + * @see dhcp_start() + */ +void netif_set_down(struct netif *netif) +{ + if ( netif->flags & NETIF_FLAG_UP ) + { + netif->flags &= ~NETIF_FLAG_UP; +#if LWIP_SNMP + snmp_get_sysuptime(&netif->ts); +#endif + + NETIF_LINK_CALLBACK(netif); + NETIF_STATUS_CALLBACK(netif); + } +} + +/** + * Ask if an interface is up + */ +u8_t netif_is_up(struct netif *netif) +{ + return (netif->flags & NETIF_FLAG_UP)?1:0; +} + +#if LWIP_NETIF_STATUS_CALLBACK +/** + * Set callback to be called when interface is brought up/down + */ +void netif_set_status_callback(struct netif *netif, void (* status_callback)(struct netif *netif )) +{ + if ( netif ) + netif->status_callback = status_callback; +} +#endif /* LWIP_NETIF_STATUS_CALLBACK */ + +#if LWIP_NETIF_LINK_CALLBACK +/** + * Called by a driver when its link goes up + */ +void netif_set_link_up(struct netif *netif ) +{ + netif->flags |= NETIF_FLAG_LINK_UP; + +#if LWIP_DHCP + if (netif->dhcp) { + dhcp_network_changed(netif); + } +#endif /* LWIP_DHCP */ + +#if LWIP_AUTOIP + if (netif->autoip) { + autoip_network_changed(netif); + } +#endif /* LWIP_AUTOIP */ + + if (netif->flags & NETIF_FLAG_UP) { +#if LWIP_ARP + /* For Ethernet network interfaces, we would like to send a "gratuitous ARP" */ + if (netif->flags & NETIF_FLAG_ETHARP) { + etharp_gratuitous(netif); + } +#endif /* LWIP_ARP */ + +#if LWIP_IGMP + /* resend IGMP memberships */ + if (netif->flags & NETIF_FLAG_IGMP) { + igmp_report_groups( netif); + } +#endif /* LWIP_IGMP */ + } + NETIF_LINK_CALLBACK(netif); +} + +/** + * Called by a driver when its link goes down + */ +void netif_set_link_down(struct netif *netif ) +{ + netif->flags &= ~NETIF_FLAG_LINK_UP; + NETIF_LINK_CALLBACK(netif); +} + +/** + * Ask if a link is up + */ +u8_t netif_is_link_up(struct netif *netif) +{ + return (netif->flags & NETIF_FLAG_LINK_UP) ? 1 : 0; +} + +/** + * Set callback to be called when link is brought up/down + */ +void netif_set_link_callback(struct netif *netif, void (* link_callback)(struct netif *netif )) +{ + if (netif) { + netif->link_callback = link_callback; + } +} +#endif /* LWIP_NETIF_LINK_CALLBACK */ + +#if ENABLE_LOOPBACK +/** + * Send an IP packet to be received on the same netif (loopif-like). + * The pbuf is simply copied and handed back to netif->input. + * In multithreaded mode, this is done directly since netif->input must put + * the packet on a queue. + * In callback mode, the packet is put on an internal queue and is fed to + * netif->input by netif_poll(). + * + * @param netif the lwip network interface structure + * @param p the (IP) packet to 'send' + * @param ipaddr the ip address to send the packet to (not used) + * @return ERR_OK if the packet has been sent + * ERR_MEM if the pbuf used to copy the packet couldn't be allocated + */ +err_t +netif_loop_output(struct netif *netif, struct pbuf *p, + struct ip_addr *ipaddr) +{ + struct pbuf *r; + err_t err; + struct pbuf *last; +#if LWIP_LOOPBACK_MAX_PBUFS + u8_t clen = 0; +#endif /* LWIP_LOOPBACK_MAX_PBUFS */ + SYS_ARCH_DECL_PROTECT(lev); + LWIP_UNUSED_ARG(ipaddr); + + /* Allocate a new pbuf */ + r = pbuf_alloc(PBUF_LINK, p->tot_len, PBUF_RAM); + if (r == NULL) { + return ERR_MEM; + } +#if LWIP_LOOPBACK_MAX_PBUFS + clen = pbuf_clen(r); + /* check for overflow or too many pbuf on queue */ + if(((netif->loop_cnt_current + clen) < netif->loop_cnt_current) || + ((netif->loop_cnt_current + clen) > LWIP_LOOPBACK_MAX_PBUFS)) { + pbuf_free(r); + r = NULL; + return ERR_MEM; + } + netif->loop_cnt_current += clen; +#endif /* LWIP_LOOPBACK_MAX_PBUFS */ + + /* Copy the whole pbuf queue p into the single pbuf r */ + if ((err = pbuf_copy(r, p)) != ERR_OK) { + pbuf_free(r); + r = NULL; + return err; + } + + /* Put the packet on a linked list which gets emptied through calling + netif_poll(). */ + + /* let last point to the last pbuf in chain r */ + for (last = r; last->next != NULL; last = last->next); + + SYS_ARCH_PROTECT(lev); + if(netif->loop_first != NULL) { + LWIP_ASSERT("if first != NULL, last must also be != NULL", netif->loop_last != NULL); + netif->loop_last->next = r; + netif->loop_last = last; + } else { + netif->loop_first = r; + netif->loop_last = last; + } + SYS_ARCH_UNPROTECT(lev); + +#if LWIP_NETIF_LOOPBACK_MULTITHREADING + /* For multithreading environment, schedule a call to netif_poll */ + tcpip_callback((void (*)(void *))(netif_poll), netif); +#endif /* LWIP_NETIF_LOOPBACK_MULTITHREADING */ + + return ERR_OK; +} + +/** + * Call netif_poll() in the main loop of your application. This is to prevent + * reentering non-reentrant functions like tcp_input(). Packets passed to + * netif_loop_output() are put on a list that is passed to netif->input() by + * netif_poll(). + */ +void +netif_poll(struct netif *netif) +{ + struct pbuf *in; + SYS_ARCH_DECL_PROTECT(lev); + + do { + /* Get a packet from the list. With SYS_LIGHTWEIGHT_PROT=1, this is protected */ + SYS_ARCH_PROTECT(lev); + in = netif->loop_first; + if(in != NULL) { + struct pbuf *in_end = in; +#if LWIP_LOOPBACK_MAX_PBUFS + u8_t clen = pbuf_clen(in); + /* adjust the number of pbufs on queue */ + LWIP_ASSERT("netif->loop_cnt_current underflow", + ((netif->loop_cnt_current - clen) < netif->loop_cnt_current)); + netif->loop_cnt_current -= clen; +#endif /* LWIP_LOOPBACK_MAX_PBUFS */ + while(in_end->len != in_end->tot_len) { + LWIP_ASSERT("bogus pbuf: len != tot_len but next == NULL!", in_end->next != NULL); + in_end = in_end->next; + } + /* 'in_end' now points to the last pbuf from 'in' */ + if(in_end == netif->loop_last) { + /* this was the last pbuf in the list */ + netif->loop_first = netif->loop_last = NULL; + } else { + /* pop the pbuf off the list */ + netif->loop_first = in_end->next; + LWIP_ASSERT("should not be null since first != last!", netif->loop_first != NULL); + } + /* De-queue the pbuf from its successors on the 'loop_' list. */ + in_end->next = NULL; + } + SYS_ARCH_UNPROTECT(lev); + + if(in != NULL) { + /* loopback packets are always IP packets! */ + if(ip_input(in, netif) != ERR_OK) { + pbuf_free(in); + } + /* Don't reference the packet any more! */ + in = NULL; + } + /* go on while there is a packet on the list */ + } while(netif->loop_first != NULL); +} + +#if !LWIP_NETIF_LOOPBACK_MULTITHREADING +/** + * Calls netif_poll() for every netif on the netif_list. + */ +void +netif_poll_all(void) +{ + struct netif *netif = netif_list; + /* loop through netifs */ + while (netif != NULL) { + netif_poll(netif); + /* proceed to next network interface */ + netif = netif->next; + } +} +#endif /* !LWIP_NETIF_LOOPBACK_MULTITHREADING */ +#endif /* ENABLE_LOOPBACK */ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/pbuf.c b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/pbuf.c new file mode 100644 index 000000000..6284b9a3a --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/pbuf.c @@ -0,0 +1,931 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/** + * @file + * Packet buffer management + * + * Packets are built from the pbuf data structure. It supports dynamic + * memory allocation for packet contents or can reference externally + * managed packet contents both in RAM and ROM. Quick allocation for + * incoming packets is provided through pools with fixed sized pbufs. + * + * A packet may span over multiple pbufs, chained as a singly linked + * list. This is called a "pbuf chain". + * + * Multiple packets may be queued, also using this singly linked list. + * This is called a "packet queue". + * + * So, a packet queue consists of one or more pbuf chains, each of + * which consist of one or more pbufs. CURRENTLY, PACKET QUEUES ARE + * NOT SUPPORTED!!! Use helper structs to queue multiple packets. + * + * The differences between a pbuf chain and a packet queue are very + * precise but subtle. + * + * The last pbuf of a packet has a ->tot_len field that equals the + * ->len field. It can be found by traversing the list. If the last + * pbuf of a packet has a ->next field other than NULL, more packets + * are on the queue. + * + * Therefore, looping through a pbuf of a single packet, has an + * loop end condition (tot_len == p->len), NOT (next == NULL). + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#include "lwip/opt.h" + +#include "lwip/stats.h" +#include "lwip/def.h" +#include "lwip/mem.h" +#include "lwip/memp.h" +#include "lwip/pbuf.h" +#include "lwip/sys.h" +#include "arch/perf.h" +#if TCP_QUEUE_OOSEQ +#include "lwip/tcp.h" +#endif + +#include + +#define SIZEOF_STRUCT_PBUF LWIP_MEM_ALIGN_SIZE(sizeof(struct pbuf)) +/* Since the pool is created in memp, PBUF_POOL_BUFSIZE will be automatically + aligned there. Therefore, PBUF_POOL_BUFSIZE_ALIGNED can be used here. */ +#define PBUF_POOL_BUFSIZE_ALIGNED LWIP_MEM_ALIGN_SIZE(PBUF_POOL_BUFSIZE) + +#if !TCP_QUEUE_OOSEQ || NO_SYS +#define PBUF_POOL_IS_EMPTY() +#else /* !TCP_QUEUE_OOSEQ || NO_SYS */ +/** Define this to 0 to prevent freeing ooseq pbufs when the PBUF_POOL is empty */ +#ifndef PBUF_POOL_FREE_OOSEQ +#define PBUF_POOL_FREE_OOSEQ 1 +#endif /* PBUF_POOL_FREE_OOSEQ */ + +#if PBUF_POOL_FREE_OOSEQ +#include "lwip/tcpip.h" +#define PBUF_POOL_IS_EMPTY() pbuf_pool_is_empty() +static u8_t pbuf_free_ooseq_queued; +/** + * Attempt to reclaim some memory from queued out-of-sequence TCP segments + * if we run out of pool pbufs. It's better to give priority to new packets + * if we're running out. + * + * This must be done in the correct thread context therefore this function + * can only be used with NO_SYS=0 and through tcpip_callback. + */ +static void +pbuf_free_ooseq(void* arg) +{ + struct tcp_pcb* pcb; + SYS_ARCH_DECL_PROTECT(old_level); + LWIP_UNUSED_ARG(arg); + + SYS_ARCH_PROTECT(old_level); + pbuf_free_ooseq_queued = 0; + SYS_ARCH_UNPROTECT(old_level); + + for (pcb = tcp_active_pcbs; NULL != pcb; pcb = pcb->next) { + if (NULL != pcb->ooseq) { + /** Free the ooseq pbufs of one PCB only */ + LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_free_ooseq: freeing out-of-sequence pbufs\n")); + tcp_segs_free(pcb->ooseq); + pcb->ooseq = NULL; + return; + } + } +} + +/** Queue a call to pbuf_free_ooseq if not already queued. */ +static void +pbuf_pool_is_empty(void) +{ + u8_t queued; + SYS_ARCH_DECL_PROTECT(old_level); + + SYS_ARCH_PROTECT(old_level); + queued = pbuf_free_ooseq_queued; + pbuf_free_ooseq_queued = 1; + SYS_ARCH_UNPROTECT(old_level); + + if(!queued) { + /* queue a call to pbuf_free_ooseq if not already queued */ + if(tcpip_callback_with_block(pbuf_free_ooseq, NULL, 0) != ERR_OK) { + SYS_ARCH_PROTECT(old_level); + pbuf_free_ooseq_queued = 0; + SYS_ARCH_UNPROTECT(old_level); + } + } +} +#endif /* PBUF_POOL_FREE_OOSEQ */ +#endif /* !TCP_QUEUE_OOSEQ || NO_SYS */ + +/** + * Allocates a pbuf of the given type (possibly a chain for PBUF_POOL type). + * + * The actual memory allocated for the pbuf is determined by the + * layer at which the pbuf is allocated and the requested size + * (from the size parameter). + * + * @param layer flag to define header size + * @param length size of the pbuf's payload + * @param type this parameter decides how and where the pbuf + * should be allocated as follows: + * + * - PBUF_RAM: buffer memory for pbuf is allocated as one large + * chunk. This includes protocol headers as well. + * - PBUF_ROM: no buffer memory is allocated for the pbuf, even for + * protocol headers. Additional headers must be prepended + * by allocating another pbuf and chain in to the front of + * the ROM pbuf. It is assumed that the memory used is really + * similar to ROM in that it is immutable and will not be + * changed. Memory which is dynamic should generally not + * be attached to PBUF_ROM pbufs. Use PBUF_REF instead. + * - PBUF_REF: no buffer memory is allocated for the pbuf, even for + * protocol headers. It is assumed that the pbuf is only + * being used in a single thread. If the pbuf gets queued, + * then pbuf_take should be called to copy the buffer. + * - PBUF_POOL: the pbuf is allocated as a pbuf chain, with pbufs from + * the pbuf pool that is allocated during pbuf_init(). + * + * @return the allocated pbuf. If multiple pbufs where allocated, this + * is the first pbuf of a pbuf chain. + */ +struct pbuf * +pbuf_alloc(pbuf_layer layer, u16_t length, pbuf_type type) +{ + struct pbuf *p, *q, *r; + u16_t offset; + s32_t rem_len; /* remaining length */ + LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_alloc(length=%"U16_F")\n", length)); + + /* determine header offset */ + offset = 0; + switch (layer) { + case PBUF_TRANSPORT: + /* add room for transport (often TCP) layer header */ + offset += PBUF_TRANSPORT_HLEN; + /* FALLTHROUGH */ + case PBUF_IP: + /* add room for IP layer header */ + offset += PBUF_IP_HLEN; + /* FALLTHROUGH */ + case PBUF_LINK: + /* add room for link layer header */ + offset += PBUF_LINK_HLEN; + break; + case PBUF_RAW: + break; + default: + LWIP_ASSERT("pbuf_alloc: bad pbuf layer", 0); + return NULL; + } + + switch (type) { + case PBUF_POOL: + /* allocate head of pbuf chain into p */ + p = memp_malloc(MEMP_PBUF_POOL); + LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_alloc: allocated pbuf %p\n", (void *)p)); + if (p == NULL) { + PBUF_POOL_IS_EMPTY(); + return NULL; + } + p->type = type; + p->next = NULL; + + /* make the payload pointer point 'offset' bytes into pbuf data memory */ + p->payload = LWIP_MEM_ALIGN((void *)((u8_t *)p + (SIZEOF_STRUCT_PBUF + offset))); + LWIP_ASSERT("pbuf_alloc: pbuf p->payload properly aligned", + ((mem_ptr_t)p->payload % MEM_ALIGNMENT) == 0); + /* the total length of the pbuf chain is the requested size */ + p->tot_len = length; + /* set the length of the first pbuf in the chain */ + p->len = LWIP_MIN(length, PBUF_POOL_BUFSIZE_ALIGNED - LWIP_MEM_ALIGN_SIZE(offset)); + LWIP_ASSERT("check p->payload + p->len does not overflow pbuf", + ((u8_t*)p->payload + p->len <= + (u8_t*)p + SIZEOF_STRUCT_PBUF + PBUF_POOL_BUFSIZE_ALIGNED)); + LWIP_ASSERT("PBUF_POOL_BUFSIZE must be bigger than MEM_ALIGNMENT", + (PBUF_POOL_BUFSIZE_ALIGNED - LWIP_MEM_ALIGN_SIZE(offset)) > 0 ); + /* set reference count (needed here in case we fail) */ + p->ref = 1; + + /* now allocate the tail of the pbuf chain */ + + /* remember first pbuf for linkage in next iteration */ + r = p; + /* remaining length to be allocated */ + rem_len = length - p->len; + /* any remaining pbufs to be allocated? */ + while (rem_len > 0) { + q = memp_malloc(MEMP_PBUF_POOL); + if (q == NULL) { + PBUF_POOL_IS_EMPTY(); + /* free chain so far allocated */ + pbuf_free(p); + /* bail out unsuccesfully */ + return NULL; + } + q->type = type; + q->flags = 0; + q->next = NULL; + /* make previous pbuf point to this pbuf */ + r->next = q; + /* set total length of this pbuf and next in chain */ + LWIP_ASSERT("rem_len < max_u16_t", rem_len < 0xffff); + q->tot_len = (u16_t)rem_len; + /* this pbuf length is pool size, unless smaller sized tail */ + q->len = LWIP_MIN((u16_t)rem_len, PBUF_POOL_BUFSIZE_ALIGNED); + q->payload = (void *)((u8_t *)q + SIZEOF_STRUCT_PBUF); + LWIP_ASSERT("pbuf_alloc: pbuf q->payload properly aligned", + ((mem_ptr_t)q->payload % MEM_ALIGNMENT) == 0); + LWIP_ASSERT("check p->payload + p->len does not overflow pbuf", + ((u8_t*)p->payload + p->len <= + (u8_t*)p + SIZEOF_STRUCT_PBUF + PBUF_POOL_BUFSIZE_ALIGNED)); + q->ref = 1; + /* calculate remaining length to be allocated */ + rem_len -= q->len; + /* remember this pbuf for linkage in next iteration */ + r = q; + } + /* end of chain */ + /*r->next = NULL;*/ + + break; + case PBUF_RAM: + /* If pbuf is to be allocated in RAM, allocate memory for it. */ + p = (struct pbuf*)mem_malloc(LWIP_MEM_ALIGN_SIZE(SIZEOF_STRUCT_PBUF + offset) + LWIP_MEM_ALIGN_SIZE(length)); + if (p == NULL) { + return NULL; + } + /* Set up internal structure of the pbuf. */ + p->payload = LWIP_MEM_ALIGN((void *)((u8_t *)p + SIZEOF_STRUCT_PBUF + offset)); + p->len = p->tot_len = length; + p->next = NULL; + p->type = type; + + LWIP_ASSERT("pbuf_alloc: pbuf->payload properly aligned", + ((mem_ptr_t)p->payload % MEM_ALIGNMENT) == 0); + break; + /* pbuf references existing (non-volatile static constant) ROM payload? */ + case PBUF_ROM: + /* pbuf references existing (externally allocated) RAM payload? */ + case PBUF_REF: + /* only allocate memory for the pbuf structure */ + p = memp_malloc(MEMP_PBUF); + if (p == NULL) { + LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_LEVEL_SERIOUS, + ("pbuf_alloc: Could not allocate MEMP_PBUF for PBUF_%s.\n", + (type == PBUF_ROM) ? "ROM" : "REF")); + return NULL; + } + /* caller must set this field properly, afterwards */ + p->payload = NULL; + p->len = p->tot_len = length; + p->next = NULL; + p->type = type; + break; + default: + LWIP_ASSERT("pbuf_alloc: erroneous type", 0); + return NULL; + } + /* set reference count */ + p->ref = 1; + /* set flags */ + p->flags = 0; + LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_alloc(length=%"U16_F") == %p\n", length, (void *)p)); + return p; +} + + +/** + * Shrink a pbuf chain to a desired length. + * + * @param p pbuf to shrink. + * @param new_len desired new length of pbuf chain + * + * Depending on the desired length, the first few pbufs in a chain might + * be skipped and left unchanged. The new last pbuf in the chain will be + * resized, and any remaining pbufs will be freed. + * + * @note If the pbuf is ROM/REF, only the ->tot_len and ->len fields are adjusted. + * @note May not be called on a packet queue. + * + * @note Despite its name, pbuf_realloc cannot grow the size of a pbuf (chain). + */ +void +pbuf_realloc(struct pbuf *p, u16_t new_len) +{ + struct pbuf *q; + u16_t rem_len; /* remaining length */ + s32_t grow; + + LWIP_ASSERT("pbuf_realloc: p != NULL", p != NULL); + LWIP_ASSERT("pbuf_realloc: sane p->type", p->type == PBUF_POOL || + p->type == PBUF_ROM || + p->type == PBUF_RAM || + p->type == PBUF_REF); + + /* desired length larger than current length? */ + if (new_len >= p->tot_len) { + /* enlarging not yet supported */ + return; + } + + /* the pbuf chain grows by (new_len - p->tot_len) bytes + * (which may be negative in case of shrinking) */ + grow = new_len - p->tot_len; + + /* first, step over any pbufs that should remain in the chain */ + rem_len = new_len; + q = p; + /* should this pbuf be kept? */ + while (rem_len > q->len) { + /* decrease remaining length by pbuf length */ + rem_len -= q->len; + /* decrease total length indicator */ + LWIP_ASSERT("grow < max_u16_t", grow < 0xffff); + q->tot_len += (u16_t)grow; + /* proceed to next pbuf in chain */ + q = q->next; + LWIP_ASSERT("pbuf_realloc: q != NULL", q != NULL); + } + /* we have now reached the new last pbuf (in q) */ + /* rem_len == desired length for pbuf q */ + + /* shrink allocated memory for PBUF_RAM */ + /* (other types merely adjust their length fields */ + if ((q->type == PBUF_RAM) && (rem_len != q->len)) { + /* reallocate and adjust the length of the pbuf that will be split */ + q = mem_realloc(q, (u8_t *)q->payload - (u8_t *)q + rem_len); + LWIP_ASSERT("mem_realloc give q == NULL", q != NULL); + } + /* adjust length fields for new last pbuf */ + q->len = rem_len; + q->tot_len = q->len; + + /* any remaining pbufs in chain? */ + if (q->next != NULL) { + /* free remaining pbufs in chain */ + pbuf_free(q->next); + } + /* q is last packet in chain */ + q->next = NULL; + +} + +/** + * Adjusts the payload pointer to hide or reveal headers in the payload. + * + * Adjusts the ->payload pointer so that space for a header + * (dis)appears in the pbuf payload. + * + * The ->payload, ->tot_len and ->len fields are adjusted. + * + * @param p pbuf to change the header size. + * @param header_size_increment Number of bytes to increment header size which + * increases the size of the pbuf. New space is on the front. + * (Using a negative value decreases the header size.) + * If hdr_size_inc is 0, this function does nothing and returns succesful. + * + * PBUF_ROM and PBUF_REF type buffers cannot have their sizes increased, so + * the call will fail. A check is made that the increase in header size does + * not move the payload pointer in front of the start of the buffer. + * @return non-zero on failure, zero on success. + * + */ +u8_t +pbuf_header(struct pbuf *p, s16_t header_size_increment) +{ + u16_t type; + void *payload; + u16_t increment_magnitude; + + LWIP_ASSERT("p != NULL", p != NULL); + if ((header_size_increment == 0) || (p == NULL)) + return 0; + + if (header_size_increment < 0){ + increment_magnitude = -header_size_increment; + /* Check that we aren't going to move off the end of the pbuf */ + LWIP_ERROR("increment_magnitude <= p->len", (increment_magnitude <= p->len), return 1;); + } else { + increment_magnitude = header_size_increment; +#if 0 + /* Can't assert these as some callers speculatively call + pbuf_header() to see if it's OK. Will return 1 below instead. */ + /* Check that we've got the correct type of pbuf to work with */ + LWIP_ASSERT("p->type == PBUF_RAM || p->type == PBUF_POOL", + p->type == PBUF_RAM || p->type == PBUF_POOL); + /* Check that we aren't going to move off the beginning of the pbuf */ + LWIP_ASSERT("p->payload - increment_magnitude >= p + SIZEOF_STRUCT_PBUF", + (u8_t *)p->payload - increment_magnitude >= (u8_t *)p + SIZEOF_STRUCT_PBUF); +#endif + } + + type = p->type; + /* remember current payload pointer */ + payload = p->payload; + + /* pbuf types containing payloads? */ + if (type == PBUF_RAM || type == PBUF_POOL) { + /* set new payload pointer */ + p->payload = (u8_t *)p->payload - header_size_increment; + /* boundary check fails? */ + if ((u8_t *)p->payload < (u8_t *)p + SIZEOF_STRUCT_PBUF) { + LWIP_DEBUGF( PBUF_DEBUG | LWIP_DBG_LEVEL_SERIOUS, + ("pbuf_header: failed as %p < %p (not enough space for new header size)\n", + (void *)p->payload, (void *)(p + 1))); + /* restore old payload pointer */ + p->payload = payload; + /* bail out unsuccesfully */ + return 1; + } + /* pbuf types refering to external payloads? */ + } else if (type == PBUF_REF || type == PBUF_ROM) { + /* hide a header in the payload? */ + if ((header_size_increment < 0) && (increment_magnitude <= p->len)) { + /* increase payload pointer */ + p->payload = (u8_t *)p->payload - header_size_increment; + } else { + /* cannot expand payload to front (yet!) + * bail out unsuccesfully */ + return 1; + } + } + else { + /* Unknown type */ + LWIP_ASSERT("bad pbuf type", 0); + return 1; + } + /* modify pbuf length fields */ + p->len += header_size_increment; + p->tot_len += header_size_increment; + + LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_header: old %p new %p (%"S16_F")\n", + (void *)payload, (void *)p->payload, header_size_increment)); + + return 0; +} + +/** + * Dereference a pbuf chain or queue and deallocate any no-longer-used + * pbufs at the head of this chain or queue. + * + * Decrements the pbuf reference count. If it reaches zero, the pbuf is + * deallocated. + * + * For a pbuf chain, this is repeated for each pbuf in the chain, + * up to the first pbuf which has a non-zero reference count after + * decrementing. So, when all reference counts are one, the whole + * chain is free'd. + * + * @param p The pbuf (chain) to be dereferenced. + * + * @return the number of pbufs that were de-allocated + * from the head of the chain. + * + * @note MUST NOT be called on a packet queue (Not verified to work yet). + * @note the reference counter of a pbuf equals the number of pointers + * that refer to the pbuf (or into the pbuf). + * + * @internal examples: + * + * Assuming existing chains a->b->c with the following reference + * counts, calling pbuf_free(a) results in: + * + * 1->2->3 becomes ...1->3 + * 3->3->3 becomes 2->3->3 + * 1->1->2 becomes ......1 + * 2->1->1 becomes 1->1->1 + * 1->1->1 becomes ....... + * + */ +u8_t +pbuf_free(struct pbuf *p) +{ + u16_t type; + struct pbuf *q; + u8_t count; + + if (p == NULL) { + LWIP_ASSERT("p != NULL", p != NULL); + /* if assertions are disabled, proceed with debug output */ + LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_LEVEL_SERIOUS, + ("pbuf_free(p == NULL) was called.\n")); + return 0; + } + LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_free(%p)\n", (void *)p)); + + PERF_START; + + LWIP_ASSERT("pbuf_free: sane type", + p->type == PBUF_RAM || p->type == PBUF_ROM || + p->type == PBUF_REF || p->type == PBUF_POOL); + + count = 0; + /* de-allocate all consecutive pbufs from the head of the chain that + * obtain a zero reference count after decrementing*/ + while (p != NULL) { + u16_t ref; + SYS_ARCH_DECL_PROTECT(old_level); + /* Since decrementing ref cannot be guaranteed to be a single machine operation + * we must protect it. We put the new ref into a local variable to prevent + * further protection. */ + SYS_ARCH_PROTECT(old_level); + /* all pbufs in a chain are referenced at least once */ + LWIP_ASSERT("pbuf_free: p->ref > 0", p->ref > 0); + /* decrease reference count (number of pointers to pbuf) */ + ref = --(p->ref); + SYS_ARCH_UNPROTECT(old_level); + /* this pbuf is no longer referenced to? */ + if (ref == 0) { + /* remember next pbuf in chain for next iteration */ + q = p->next; + LWIP_DEBUGF( PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_free: deallocating %p\n", (void *)p)); + type = p->type; + /* is this a pbuf from the pool? */ + if (type == PBUF_POOL) { + memp_free(MEMP_PBUF_POOL, p); + /* is this a ROM or RAM referencing pbuf? */ + } else if (type == PBUF_ROM || type == PBUF_REF) { + memp_free(MEMP_PBUF, p); + /* type == PBUF_RAM */ + } else { + mem_free(p); + } + count++; + /* proceed to next pbuf */ + p = q; + /* p->ref > 0, this pbuf is still referenced to */ + /* (and so the remaining pbufs in chain as well) */ + } else { + LWIP_DEBUGF( PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_free: %p has ref %"U16_F", ending here.\n", (void *)p, ref)); + /* stop walking through the chain */ + p = NULL; + } + } + PERF_STOP("pbuf_free"); + /* return number of de-allocated pbufs */ + return count; +} + +/** + * Count number of pbufs in a chain + * + * @param p first pbuf of chain + * @return the number of pbufs in a chain + */ + +u8_t +pbuf_clen(struct pbuf *p) +{ + u8_t len; + + len = 0; + while (p != NULL) { + ++len; + p = p->next; + } + return len; +} + +/** + * Increment the reference count of the pbuf. + * + * @param p pbuf to increase reference counter of + * + */ +void +pbuf_ref(struct pbuf *p) +{ + SYS_ARCH_DECL_PROTECT(old_level); + /* pbuf given? */ + if (p != NULL) { + SYS_ARCH_PROTECT(old_level); + ++(p->ref); + SYS_ARCH_UNPROTECT(old_level); + } +} + +/** + * Concatenate two pbufs (each may be a pbuf chain) and take over + * the caller's reference of the tail pbuf. + * + * @note The caller MAY NOT reference the tail pbuf afterwards. + * Use pbuf_chain() for that purpose. + * + * @see pbuf_chain() + */ + +void +pbuf_cat(struct pbuf *h, struct pbuf *t) +{ + struct pbuf *p; + + LWIP_ERROR("(h != NULL) && (t != NULL) (programmer violates API)", + ((h != NULL) && (t != NULL)), return;); + + /* proceed to last pbuf of chain */ + for (p = h; p->next != NULL; p = p->next) { + /* add total length of second chain to all totals of first chain */ + p->tot_len += t->tot_len; + } + /* { p is last pbuf of first h chain, p->next == NULL } */ + LWIP_ASSERT("p->tot_len == p->len (of last pbuf in chain)", p->tot_len == p->len); + LWIP_ASSERT("p->next == NULL", p->next == NULL); + /* add total length of second chain to last pbuf total of first chain */ + p->tot_len += t->tot_len; + /* chain last pbuf of head (p) with first of tail (t) */ + p->next = t; + /* p->next now references t, but the caller will drop its reference to t, + * so netto there is no change to the reference count of t. + */ +} + +/** + * Chain two pbufs (or pbuf chains) together. + * + * The caller MUST call pbuf_free(t) once it has stopped + * using it. Use pbuf_cat() instead if you no longer use t. + * + * @param h head pbuf (chain) + * @param t tail pbuf (chain) + * @note The pbufs MUST belong to the same packet. + * @note MAY NOT be called on a packet queue. + * + * The ->tot_len fields of all pbufs of the head chain are adjusted. + * The ->next field of the last pbuf of the head chain is adjusted. + * The ->ref field of the first pbuf of the tail chain is adjusted. + * + */ +void +pbuf_chain(struct pbuf *h, struct pbuf *t) +{ + pbuf_cat(h, t); + /* t is now referenced by h */ + pbuf_ref(t); + LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_chain: %p references %p\n", (void *)h, (void *)t)); +} + +/** + * Dechains the first pbuf from its succeeding pbufs in the chain. + * + * Makes p->tot_len field equal to p->len. + * @param p pbuf to dechain + * @return remainder of the pbuf chain, or NULL if it was de-allocated. + * @note May not be called on a packet queue. + */ +struct pbuf * +pbuf_dechain(struct pbuf *p) +{ + struct pbuf *q; + u8_t tail_gone = 1; + /* tail */ + q = p->next; + /* pbuf has successor in chain? */ + if (q != NULL) { + /* assert tot_len invariant: (p->tot_len == p->len + (p->next? p->next->tot_len: 0) */ + LWIP_ASSERT("p->tot_len == p->len + q->tot_len", q->tot_len == p->tot_len - p->len); + /* enforce invariant if assertion is disabled */ + q->tot_len = p->tot_len - p->len; + /* decouple pbuf from remainder */ + p->next = NULL; + /* total length of pbuf p is its own length only */ + p->tot_len = p->len; + /* q is no longer referenced by p, free it */ + LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_dechain: unreferencing %p\n", (void *)q)); + tail_gone = pbuf_free(q); + if (tail_gone > 0) { + LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, + ("pbuf_dechain: deallocated %p (as it is no longer referenced)\n", (void *)q)); + } + /* return remaining tail or NULL if deallocated */ + } + /* assert tot_len invariant: (p->tot_len == p->len + (p->next? p->next->tot_len: 0) */ + LWIP_ASSERT("p->tot_len == p->len", p->tot_len == p->len); + return ((tail_gone > 0) ? NULL : q); +} + +/** + * + * Create PBUF_RAM copies of pbufs. + * + * Used to queue packets on behalf of the lwIP stack, such as + * ARP based queueing. + * + * @note You MUST explicitly use p = pbuf_take(p); + * + * @note Only one packet is copied, no packet queue! + * + * @param p_to pbuf destination of the copy + * @param p_from pbuf source of the copy + * + * @return ERR_OK if pbuf was copied + * ERR_ARG if one of the pbufs is NULL or p_to is not big + * enough to hold p_from + */ +err_t +pbuf_copy(struct pbuf *p_to, struct pbuf *p_from) +{ + u16_t offset_to=0, offset_from=0, len; + + LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_copy(%p, %p)\n", + (void*)p_to, (void*)p_from)); + + /* is the target big enough to hold the source? */ + LWIP_ERROR("pbuf_copy: target not big enough to hold source", ((p_to != NULL) && + (p_from != NULL) && (p_to->tot_len >= p_from->tot_len)), return ERR_ARG;); + + /* iterate through pbuf chain */ + do + { + LWIP_ASSERT("p_to != NULL", p_to != NULL); + /* copy one part of the original chain */ + if ((p_to->len - offset_to) >= (p_from->len - offset_from)) { + /* complete current p_from fits into current p_to */ + len = p_from->len - offset_from; + } else { + /* current p_from does not fit into current p_to */ + len = p_to->len - offset_to; + } + MEMCPY((u8_t*)p_to->payload + offset_to, (u8_t*)p_from->payload + offset_from, len); + offset_to += len; + offset_from += len; + LWIP_ASSERT("offset_to <= p_to->len", offset_to <= p_to->len); + if (offset_to == p_to->len) { + /* on to next p_to (if any) */ + offset_to = 0; + p_to = p_to->next; + } + LWIP_ASSERT("offset_from <= p_from->len", offset_from <= p_from->len); + if (offset_from >= p_from->len) { + /* on to next p_from (if any) */ + offset_from = 0; + p_from = p_from->next; + } + + if((p_from != NULL) && (p_from->len == p_from->tot_len)) { + /* don't copy more than one packet! */ + LWIP_ERROR("pbuf_copy() does not allow packet queues!\n", + (p_from->next == NULL), return ERR_VAL;); + } + if((p_to != NULL) && (p_to->len == p_to->tot_len)) { + /* don't copy more than one packet! */ + LWIP_ERROR("pbuf_copy() does not allow packet queues!\n", + (p_to->next == NULL), return ERR_VAL;); + } + } while (p_from); + LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_copy: end of chain reached.\n")); + return ERR_OK; +} + +/** + * Copy (part of) the contents of a packet buffer + * to an application supplied buffer. + * + * @param buf the pbuf from which to copy data + * @param dataptr the application supplied buffer + * @param len length of data to copy (dataptr must be big enough). No more + * than buf->tot_len will be copied, irrespective of len + * @param offset offset into the packet buffer from where to begin copying len bytes + * @return the number of bytes copied, or 0 on failure + */ +u16_t +pbuf_copy_partial(struct pbuf *buf, void *dataptr, u16_t len, u16_t offset) +{ + struct pbuf *p; + u16_t left; + u16_t buf_copy_len; + u16_t copied_total = 0; + + LWIP_ERROR("pbuf_copy_partial: invalid buf", (buf != NULL), return 0;); + LWIP_ERROR("pbuf_copy_partial: invalid dataptr", (dataptr != NULL), return 0;); + + left = 0; + + if((buf == NULL) || (dataptr == NULL)) { + return 0; + } + + /* Note some systems use byte copy if dataptr or one of the pbuf payload pointers are unaligned. */ + for(p = buf; len != 0 && p != NULL; p = p->next) { + if ((offset != 0) && (offset >= p->len)) { + /* don't copy from this buffer -> on to the next */ + offset -= p->len; + } else { + /* copy from this buffer. maybe only partially. */ + buf_copy_len = p->len - offset; + if (buf_copy_len > len) + buf_copy_len = len; + /* copy the necessary parts of the buffer */ + MEMCPY(&((char*)dataptr)[left], &((char*)p->payload)[offset], buf_copy_len); + copied_total += buf_copy_len; + left += buf_copy_len; + len -= buf_copy_len; + offset = 0; + } + } + return copied_total; +} + +/** + * Copy application supplied data into a pbuf. + * This function can only be used to copy the equivalent of buf->tot_len data. + * + * @param buf pbuf to fill with data + * @param dataptr application supplied data buffer + * @param len length of the application supplied data buffer + * + * @return ERR_OK if successful, ERR_MEM if the pbuf is not big enough + */ +err_t +pbuf_take(struct pbuf *buf, const void *dataptr, u16_t len) +{ + struct pbuf *p; + u16_t buf_copy_len; + u16_t total_copy_len = len; + u16_t copied_total = 0; + + LWIP_ERROR("pbuf_take: invalid buf", (buf != NULL), return 0;); + LWIP_ERROR("pbuf_take: invalid dataptr", (dataptr != NULL), return 0;); + + if ((buf == NULL) || (dataptr == NULL) || (buf->tot_len < len)) { + return ERR_ARG; + } + + /* Note some systems use byte copy if dataptr or one of the pbuf payload pointers are unaligned. */ + for(p = buf; total_copy_len != 0; p = p->next) { + LWIP_ASSERT("pbuf_take: invalid pbuf", p != NULL); + buf_copy_len = total_copy_len; + if (buf_copy_len > p->len) { + /* this pbuf cannot hold all remaining data */ + buf_copy_len = p->len; + } + /* copy the necessary parts of the buffer */ + MEMCPY(p->payload, &((char*)dataptr)[copied_total], buf_copy_len); + total_copy_len -= buf_copy_len; + copied_total += buf_copy_len; + } + LWIP_ASSERT("did not copy all data", total_copy_len == 0 && copied_total == len); + return ERR_OK; +} + +/** + * Creates a single pbuf out of a queue of pbufs. + * + * @remark: The source pbuf 'p' is not freed by this function because that can + * be illegal in some places! + * + * @param p the source pbuf + * @param layer pbuf_layer of the new pbuf + * + * @return a new, single pbuf (p->next is NULL) + * or the old pbuf if allocation fails + */ +struct pbuf* +pbuf_coalesce(struct pbuf *p, pbuf_layer layer) +{ + struct pbuf *q; + err_t err; + if (p->next == NULL) { + return p; + } + q = pbuf_alloc(layer, p->tot_len, PBUF_RAM); + if (q == NULL) { + /* @todo: what do we do now? */ + return p; + } + err = pbuf_copy(q, p); + LWIP_ASSERT("pbuf_copy failed", err == ERR_OK); + pbuf_free(p); + return q; +} diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/raw.c b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/raw.c new file mode 100644 index 000000000..6966bbc44 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/raw.c @@ -0,0 +1,355 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/** + * @file + * Implementation of raw protocol PCBs for low-level handling of + * different types of protocols besides (or overriding) those + * already available in lwIP. + * + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#include "lwip/opt.h" + +#if LWIP_RAW /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/def.h" +#include "lwip/memp.h" +#include "lwip/inet.h" +#include "lwip/ip_addr.h" +#include "lwip/netif.h" +#include "lwip/raw.h" +#include "lwip/stats.h" +#include "lwip/snmp.h" +#include "arch/perf.h" + +#include + +/** The list of RAW PCBs */ +static struct raw_pcb *raw_pcbs; + +/** + * Determine if in incoming IP packet is covered by a RAW PCB + * and if so, pass it to a user-provided receive callback function. + * + * Given an incoming IP datagram (as a chain of pbufs) this function + * finds a corresponding RAW PCB and calls the corresponding receive + * callback function. + * + * @param p pbuf to be demultiplexed to a RAW PCB. + * @param inp network interface on which the datagram was received. + * @return - 1 if the packet has been eaten by a RAW PCB receive + * callback function. The caller MAY NOT not reference the + * packet any longer, and MAY NOT call pbuf_free(). + * @return - 0 if packet is not eaten (pbuf is still referenced by the + * caller). + * + */ +u8_t +raw_input(struct pbuf *p, struct netif *inp) +{ + struct raw_pcb *pcb, *prev; + struct ip_hdr *iphdr; + s16_t proto; + u8_t eaten = 0; + + LWIP_UNUSED_ARG(inp); + + iphdr = p->payload; + proto = IPH_PROTO(iphdr); + + prev = NULL; + pcb = raw_pcbs; + /* loop through all raw pcbs until the packet is eaten by one */ + /* this allows multiple pcbs to match against the packet by design */ + while ((eaten == 0) && (pcb != NULL)) { + if (pcb->protocol == proto) { +#if IP_SOF_BROADCAST_RECV + /* broadcast filter? */ + if ((pcb->so_options & SOF_BROADCAST) || !ip_addr_isbroadcast(&(iphdr->dest), inp)) +#endif /* IP_SOF_BROADCAST_RECV */ + { + /* receive callback function available? */ + if (pcb->recv != NULL) { + /* the receive callback function did not eat the packet? */ + if (pcb->recv(pcb->recv_arg, pcb, p, &(iphdr->src)) != 0) { + /* receive function ate the packet */ + p = NULL; + eaten = 1; + if (prev != NULL) { + /* move the pcb to the front of raw_pcbs so that is + found faster next time */ + prev->next = pcb->next; + pcb->next = raw_pcbs; + raw_pcbs = pcb; + } + } + } + /* no receive callback function was set for this raw PCB */ + } + /* drop the packet */ + } + prev = pcb; + pcb = pcb->next; + } + return eaten; +} + +/** + * Bind a RAW PCB. + * + * @param pcb RAW PCB to be bound with a local address ipaddr. + * @param ipaddr local IP address to bind with. Use IP_ADDR_ANY to + * bind to all local interfaces. + * + * @return lwIP error code. + * - ERR_OK. Successful. No error occured. + * - ERR_USE. The specified IP address is already bound to by + * another RAW PCB. + * + * @see raw_disconnect() + */ +err_t +raw_bind(struct raw_pcb *pcb, struct ip_addr *ipaddr) +{ + ip_addr_set(&pcb->local_ip, ipaddr); + return ERR_OK; +} + +/** + * Connect an RAW PCB. This function is required by upper layers + * of lwip. Using the raw api you could use raw_sendto() instead + * + * This will associate the RAW PCB with the remote address. + * + * @param pcb RAW PCB to be connected with remote address ipaddr and port. + * @param ipaddr remote IP address to connect with. + * + * @return lwIP error code + * + * @see raw_disconnect() and raw_sendto() + */ +err_t +raw_connect(struct raw_pcb *pcb, struct ip_addr *ipaddr) +{ + ip_addr_set(&pcb->remote_ip, ipaddr); + return ERR_OK; +} + + +/** + * Set the callback function for received packets that match the + * raw PCB's protocol and binding. + * + * The callback function MUST either + * - eat the packet by calling pbuf_free() and returning non-zero. The + * packet will not be passed to other raw PCBs or other protocol layers. + * - not free the packet, and return zero. The packet will be matched + * against further PCBs and/or forwarded to another protocol layers. + * + * @return non-zero if the packet was free()d, zero if the packet remains + * available for others. + */ +void +raw_recv(struct raw_pcb *pcb, + u8_t (* recv)(void *arg, struct raw_pcb *upcb, struct pbuf *p, + struct ip_addr *addr), + void *recv_arg) +{ + /* remember recv() callback and user data */ + pcb->recv = recv; + pcb->recv_arg = recv_arg; +} + +/** + * Send the raw IP packet to the given address. Note that actually you cannot + * modify the IP headers (this is inconsistent with the receive callback where + * you actually get the IP headers), you can only specify the IP payload here. + * It requires some more changes in lwIP. (there will be a raw_send() function + * then.) + * + * @param pcb the raw pcb which to send + * @param p the IP payload to send + * @param ipaddr the destination address of the IP packet + * + */ +err_t +raw_sendto(struct raw_pcb *pcb, struct pbuf *p, struct ip_addr *ipaddr) +{ + err_t err; + struct netif *netif; + struct ip_addr *src_ip; + struct pbuf *q; /* q will be sent down the stack */ + + LWIP_DEBUGF(RAW_DEBUG | LWIP_DBG_TRACE, ("raw_sendto\n")); + + /* not enough space to add an IP header to first pbuf in given p chain? */ + if (pbuf_header(p, IP_HLEN)) { + /* allocate header in new pbuf */ + q = pbuf_alloc(PBUF_IP, 0, PBUF_RAM); + /* new header pbuf could not be allocated? */ + if (q == NULL) { + LWIP_DEBUGF(RAW_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("raw_sendto: could not allocate header\n")); + return ERR_MEM; + } + /* chain header q in front of given pbuf p */ + pbuf_chain(q, p); + /* { first pbuf q points to header pbuf } */ + LWIP_DEBUGF(RAW_DEBUG, ("raw_sendto: added header pbuf %p before given pbuf %p\n", (void *)q, (void *)p)); + } else { + /* first pbuf q equals given pbuf */ + q = p; + if(pbuf_header(q, -IP_HLEN)) { + LWIP_ASSERT("Can't restore header we just removed!", 0); + return ERR_MEM; + } + } + + if ((netif = ip_route(ipaddr)) == NULL) { + LWIP_DEBUGF(RAW_DEBUG | LWIP_DBG_LEVEL_WARNING, ("raw_sendto: No route to 0x%"X32_F"\n", ipaddr->addr)); + /* free any temporary header pbuf allocated by pbuf_header() */ + if (q != p) { + pbuf_free(q); + } + return ERR_RTE; + } + +#if IP_SOF_BROADCAST + /* broadcast filter? */ + if ( ((pcb->so_options & SOF_BROADCAST) == 0) && ip_addr_isbroadcast(ipaddr, netif) ) { + LWIP_DEBUGF(RAW_DEBUG | LWIP_DBG_LEVEL_WARNING, ("raw_sendto: SOF_BROADCAST not enabled on pcb %p\n", (void *)pcb)); + /* free any temporary header pbuf allocated by pbuf_header() */ + if (q != p) { + pbuf_free(q); + } + return ERR_VAL; + } +#endif /* IP_SOF_BROADCAST */ + + if (ip_addr_isany(&pcb->local_ip)) { + /* use outgoing network interface IP address as source address */ + src_ip = &(netif->ip_addr); + } else { + /* use RAW PCB local IP address as source address */ + src_ip = &(pcb->local_ip); + } + +#if LWIP_NETIF_HWADDRHINT + netif->addr_hint = &(pcb->addr_hint); +#endif /* LWIP_NETIF_HWADDRHINT*/ + err = ip_output_if (q, src_ip, ipaddr, pcb->ttl, pcb->tos, pcb->protocol, netif); +#if LWIP_NETIF_HWADDRHINT + netif->addr_hint = NULL; +#endif /* LWIP_NETIF_HWADDRHINT*/ + + /* did we chain a header earlier? */ + if (q != p) { + /* free the header */ + pbuf_free(q); + } + return err; +} + +/** + * Send the raw IP packet to the address given by raw_connect() + * + * @param pcb the raw pcb which to send + * @param p the IP payload to send + * + */ +err_t +raw_send(struct raw_pcb *pcb, struct pbuf *p) +{ + return raw_sendto(pcb, p, &pcb->remote_ip); +} + +/** + * Remove an RAW PCB. + * + * @param pcb RAW PCB to be removed. The PCB is removed from the list of + * RAW PCB's and the data structure is freed from memory. + * + * @see raw_new() + */ +void +raw_remove(struct raw_pcb *pcb) +{ + struct raw_pcb *pcb2; + /* pcb to be removed is first in list? */ + if (raw_pcbs == pcb) { + /* make list start at 2nd pcb */ + raw_pcbs = raw_pcbs->next; + /* pcb not 1st in list */ + } else { + for(pcb2 = raw_pcbs; pcb2 != NULL; pcb2 = pcb2->next) { + /* find pcb in raw_pcbs list */ + if (pcb2->next != NULL && pcb2->next == pcb) { + /* remove pcb from list */ + pcb2->next = pcb->next; + } + } + } + memp_free(MEMP_RAW_PCB, pcb); +} + +/** + * Create a RAW PCB. + * + * @return The RAW PCB which was created. NULL if the PCB data structure + * could not be allocated. + * + * @param proto the protocol number of the IPs payload (e.g. IP_PROTO_ICMP) + * + * @see raw_remove() + */ +struct raw_pcb * +raw_new(u8_t proto) { + struct raw_pcb *pcb; + + LWIP_DEBUGF(RAW_DEBUG | LWIP_DBG_TRACE, ("raw_new\n")); + + pcb = memp_malloc(MEMP_RAW_PCB); + /* could allocate RAW PCB? */ + if (pcb != NULL) { + /* initialize PCB to all zeroes */ + memset(pcb, 0, sizeof(struct raw_pcb)); + pcb->protocol = proto; + pcb->ttl = RAW_TTL; + pcb->next = raw_pcbs; + raw_pcbs = pcb; + } + return pcb; +} + +#endif /* LWIP_RAW */ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/stats.c b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/stats.c new file mode 100644 index 000000000..4299a9480 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/stats.c @@ -0,0 +1,151 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/** + * @file + * Statistics module + * + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#include "lwip/opt.h" + +#if LWIP_STATS /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/def.h" +#include "lwip/stats.h" +#include "lwip/mem.h" + +#include + +struct stats_ lwip_stats; + +#if LWIP_STATS_DISPLAY +void +stats_display_proto(struct stats_proto *proto, char *name) +{ + LWIP_PLATFORM_DIAG(("\n%s\n\t", name)); + LWIP_PLATFORM_DIAG(("xmit: %"STAT_COUNTER_F"\n\t", proto->xmit)); + LWIP_PLATFORM_DIAG(("recv: %"STAT_COUNTER_F"\n\t", proto->recv)); + LWIP_PLATFORM_DIAG(("fw: %"STAT_COUNTER_F"\n\t", proto->fw)); + LWIP_PLATFORM_DIAG(("drop: %"STAT_COUNTER_F"\n\t", proto->drop)); + LWIP_PLATFORM_DIAG(("chkerr: %"STAT_COUNTER_F"\n\t", proto->chkerr)); + LWIP_PLATFORM_DIAG(("lenerr: %"STAT_COUNTER_F"\n\t", proto->lenerr)); + LWIP_PLATFORM_DIAG(("memerr: %"STAT_COUNTER_F"\n\t", proto->memerr)); + LWIP_PLATFORM_DIAG(("rterr: %"STAT_COUNTER_F"\n\t", proto->rterr)); + LWIP_PLATFORM_DIAG(("proterr: %"STAT_COUNTER_F"\n\t", proto->proterr)); + LWIP_PLATFORM_DIAG(("opterr: %"STAT_COUNTER_F"\n\t", proto->opterr)); + LWIP_PLATFORM_DIAG(("err: %"STAT_COUNTER_F"\n\t", proto->err)); + LWIP_PLATFORM_DIAG(("cachehit: %"STAT_COUNTER_F"\n", proto->cachehit)); +} + +#if IGMP_STATS +void +stats_display_igmp(struct stats_igmp *igmp) +{ + LWIP_PLATFORM_DIAG(("\nIGMP\n\t")); + LWIP_PLATFORM_DIAG(("lenerr: %"STAT_COUNTER_F"\n\t", igmp->lenerr)); + LWIP_PLATFORM_DIAG(("chkerr: %"STAT_COUNTER_F"\n\t", igmp->chkerr)); + LWIP_PLATFORM_DIAG(("v1_rxed: %"STAT_COUNTER_F"\n\t", igmp->v1_rxed)); + LWIP_PLATFORM_DIAG(("join_sent: %"STAT_COUNTER_F"\n\t", igmp->join_sent)); + LWIP_PLATFORM_DIAG(("leave_sent: %"STAT_COUNTER_F"\n\t", igmp->leave_sent)); + LWIP_PLATFORM_DIAG(("unicast_query: %"STAT_COUNTER_F"\n\t", igmp->unicast_query)); + LWIP_PLATFORM_DIAG(("report_sent: %"STAT_COUNTER_F"\n\t", igmp->report_sent)); + LWIP_PLATFORM_DIAG(("report_rxed: %"STAT_COUNTER_F"\n\t", igmp->report_rxed)); + LWIP_PLATFORM_DIAG(("group_query_rxed: %"STAT_COUNTER_F"\n", igmp->group_query_rxed)); +} +#endif /* IGMP_STATS */ + +#if MEM_STATS || MEMP_STATS +void +stats_display_mem(struct stats_mem *mem, char *name) +{ + LWIP_PLATFORM_DIAG(("\nMEM %s\n\t", name)); + LWIP_PLATFORM_DIAG(("avail: %"U32_F"\n\t", (u32_t)mem->avail)); + LWIP_PLATFORM_DIAG(("used: %"U32_F"\n\t", (u32_t)mem->used)); + LWIP_PLATFORM_DIAG(("max: %"U32_F"\n\t", (u32_t)mem->max)); + LWIP_PLATFORM_DIAG(("err: %"U32_F"\n", (u32_t)mem->err)); +} + +#if MEMP_STATS +void +stats_display_memp(struct stats_mem *mem, int index) +{ + char * memp_names[] = { +#define LWIP_MEMPOOL(name,num,size,desc) desc, +#include "lwip/memp_std.h" + }; + if(index < MEMP_MAX) { + stats_display_mem(mem, memp_names[index]); + } +} +#endif /* MEMP_STATS */ +#endif /* MEM_STATS || MEMP_STATS */ + +#if SYS_STATS +void +stats_display_sys(struct stats_sys *sys) +{ + LWIP_PLATFORM_DIAG(("\nSYS\n\t")); + LWIP_PLATFORM_DIAG(("sem.used: %"U32_F"\n\t", (u32_t)sys->sem.used)); + LWIP_PLATFORM_DIAG(("sem.max: %"U32_F"\n\t", (u32_t)sys->sem.max)); + LWIP_PLATFORM_DIAG(("sem.err: %"U32_F"\n\t", (u32_t)sys->sem.err)); + LWIP_PLATFORM_DIAG(("mbox.used: %"U32_F"\n\t", (u32_t)sys->mbox.used)); + LWIP_PLATFORM_DIAG(("mbox.max: %"U32_F"\n\t", (u32_t)sys->mbox.max)); + LWIP_PLATFORM_DIAG(("mbox.err: %"U32_F"\n\t", (u32_t)sys->mbox.err)); +} +#endif /* SYS_STATS */ + +void +stats_display(void) +{ + s16_t i; + + LINK_STATS_DISPLAY(); + ETHARP_STATS_DISPLAY(); + IPFRAG_STATS_DISPLAY(); + IP_STATS_DISPLAY(); + IGMP_STATS_DISPLAY(); + ICMP_STATS_DISPLAY(); + UDP_STATS_DISPLAY(); + TCP_STATS_DISPLAY(); + MEM_STATS_DISPLAY(); + for (i = 0; i < MEMP_MAX; i++) { + MEMP_STATS_DISPLAY(i); + } + SYS_STATS_DISPLAY(); +} +#endif /* LWIP_STATS_DISPLAY */ + +#endif /* LWIP_STATS */ + diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/tcp.c b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/tcp.c new file mode 100644 index 000000000..c588d21df --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/tcp.c @@ -0,0 +1,1463 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/** + * @file + * Transmission Control Protocol for IP + * + * This file contains common functions for the TCP implementation, such as functinos + * for manipulating the data structures and the TCP timer functions. TCP functions + * related to input and output is found in tcp_in.c and tcp_out.c respectively. + * + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#include "lwip/opt.h" + +#if LWIP_TCP /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/def.h" +#include "lwip/mem.h" +#include "lwip/memp.h" +#include "lwip/snmp.h" +#include "lwip/tcp.h" +#include "lwip/debug.h" +#include "lwip/stats.h" + +#include + +const char *tcp_state_str[] = { + "CLOSED", + "LISTEN", + "SYN_SENT", + "SYN_RCVD", + "ESTABLISHED", + "FIN_WAIT_1", + "FIN_WAIT_2", + "CLOSE_WAIT", + "CLOSING", + "LAST_ACK", + "TIME_WAIT" +}; + +/* Incremented every coarse grained timer shot (typically every 500 ms). */ +u32_t tcp_ticks; +const u8_t tcp_backoff[13] = + { 1, 2, 3, 4, 5, 6, 7, 7, 7, 7, 7, 7, 7}; + /* Times per slowtmr hits */ +const u8_t tcp_persist_backoff[7] = { 3, 6, 12, 24, 48, 96, 120 }; + +/* The TCP PCB lists. */ + +/** List of all TCP PCBs bound but not yet (connected || listening) */ +struct tcp_pcb *tcp_bound_pcbs; +/** List of all TCP PCBs in LISTEN state */ +union tcp_listen_pcbs_t tcp_listen_pcbs; +/** List of all TCP PCBs that are in a state in which + * they accept or send data. */ +struct tcp_pcb *tcp_active_pcbs; +/** List of all TCP PCBs in TIME-WAIT state */ +struct tcp_pcb *tcp_tw_pcbs; + +struct tcp_pcb *tcp_tmp_pcb; + +static u8_t tcp_timer; +static u16_t tcp_new_port(void); + +/** + * Called periodically to dispatch TCP timers. + * + */ +void +tcp_tmr(void) +{ + /* Call tcp_fasttmr() every 250 ms */ + tcp_fasttmr(); + + if (++tcp_timer & 1) { + /* Call tcp_tmr() every 500 ms, i.e., every other timer + tcp_tmr() is called. */ + tcp_slowtmr(); + } +} + +/** + * Closes the connection held by the PCB. + * + * Listening pcbs are freed and may not be referenced any more. + * Connection pcbs are freed if not yet connected and may not be referenced + * any more. If a connection is established (at least SYN received or in + * a closing state), the connection is closed, and put in a closing state. + * The pcb is then automatically freed in tcp_slowtmr(). It is therefore + * unsafe to reference it. + * + * @param pcb the tcp_pcb to close + * @return ERR_OK if connection has been closed + * another err_t if closing failed and pcb is not freed + */ +err_t +tcp_close(struct tcp_pcb *pcb) +{ + err_t err; + +#if TCP_DEBUG + LWIP_DEBUGF(TCP_DEBUG, ("tcp_close: closing in ")); + tcp_debug_print_state(pcb->state); +#endif /* TCP_DEBUG */ + + switch (pcb->state) { + case CLOSED: + /* Closing a pcb in the CLOSED state might seem erroneous, + * however, it is in this state once allocated and as yet unused + * and the user needs some way to free it should the need arise. + * Calling tcp_close() with a pcb that has already been closed, (i.e. twice) + * or for a pcb that has been used and then entered the CLOSED state + * is erroneous, but this should never happen as the pcb has in those cases + * been freed, and so any remaining handles are bogus. */ + err = ERR_OK; + TCP_RMV(&tcp_bound_pcbs, pcb); + memp_free(MEMP_TCP_PCB, pcb); + pcb = NULL; + break; + case LISTEN: + err = ERR_OK; + tcp_pcb_remove((struct tcp_pcb **)&tcp_listen_pcbs.pcbs, pcb); + memp_free(MEMP_TCP_PCB_LISTEN, pcb); + pcb = NULL; + break; + case SYN_SENT: + err = ERR_OK; + tcp_pcb_remove(&tcp_active_pcbs, pcb); + memp_free(MEMP_TCP_PCB, pcb); + pcb = NULL; + snmp_inc_tcpattemptfails(); + break; + case SYN_RCVD: + err = tcp_send_ctrl(pcb, TCP_FIN); + if (err == ERR_OK) { + snmp_inc_tcpattemptfails(); + pcb->state = FIN_WAIT_1; + } + break; + case ESTABLISHED: + err = tcp_send_ctrl(pcb, TCP_FIN); + if (err == ERR_OK) { + snmp_inc_tcpestabresets(); + pcb->state = FIN_WAIT_1; + } + break; + case CLOSE_WAIT: + err = tcp_send_ctrl(pcb, TCP_FIN); + if (err == ERR_OK) { + snmp_inc_tcpestabresets(); + pcb->state = LAST_ACK; + } + break; + default: + /* Has already been closed, do nothing. */ + err = ERR_OK; + pcb = NULL; + break; + } + + if (pcb != NULL && err == ERR_OK) { + /* To ensure all data has been sent when tcp_close returns, we have + to make sure tcp_output doesn't fail. + Since we don't really have to ensure all data has been sent when tcp_close + returns (unsent data is sent from tcp timer functions, also), we don't care + for the return value of tcp_output for now. */ + /* @todo: When implementing SO_LINGER, this must be changed somehow: + If SOF_LINGER is set, the data should be sent when tcp_close returns. */ + tcp_output(pcb); + } + return err; +} + +/** + * Abandons a connection and optionally sends a RST to the remote + * host. Deletes the local protocol control block. This is done when + * a connection is killed because of shortage of memory. + * + * @param pcb the tcp_pcb to abort + * @param reset boolean to indicate whether a reset should be sent + */ +void +tcp_abandon(struct tcp_pcb *pcb, int reset) +{ + u32_t seqno, ackno; + u16_t remote_port, local_port; + struct ip_addr remote_ip, local_ip; +#if LWIP_CALLBACK_API + void (* errf)(void *arg, err_t err); +#endif /* LWIP_CALLBACK_API */ + void *errf_arg; + + + /* Figure out on which TCP PCB list we are, and remove us. If we + are in an active state, call the receive function associated with + the PCB with a NULL argument, and send an RST to the remote end. */ + if (pcb->state == TIME_WAIT) { + tcp_pcb_remove(&tcp_tw_pcbs, pcb); + memp_free(MEMP_TCP_PCB, pcb); + } else { + seqno = pcb->snd_nxt; + ackno = pcb->rcv_nxt; + ip_addr_set(&local_ip, &(pcb->local_ip)); + ip_addr_set(&remote_ip, &(pcb->remote_ip)); + local_port = pcb->local_port; + remote_port = pcb->remote_port; +#if LWIP_CALLBACK_API + errf = pcb->errf; +#endif /* LWIP_CALLBACK_API */ + errf_arg = pcb->callback_arg; + tcp_pcb_remove(&tcp_active_pcbs, pcb); + if (pcb->unacked != NULL) { + tcp_segs_free(pcb->unacked); + } + if (pcb->unsent != NULL) { + tcp_segs_free(pcb->unsent); + } +#if TCP_QUEUE_OOSEQ + if (pcb->ooseq != NULL) { + tcp_segs_free(pcb->ooseq); + } +#endif /* TCP_QUEUE_OOSEQ */ + memp_free(MEMP_TCP_PCB, pcb); + TCP_EVENT_ERR(errf, errf_arg, ERR_ABRT); + if (reset) { + LWIP_DEBUGF(TCP_RST_DEBUG, ("tcp_abandon: sending RST\n")); + tcp_rst(seqno, ackno, &local_ip, &remote_ip, local_port, remote_port); + } + } +} + +/** + * Binds the connection to a local portnumber and IP address. If the + * IP address is not given (i.e., ipaddr == NULL), the IP address of + * the outgoing network interface is used instead. + * + * @param pcb the tcp_pcb to bind (no check is done whether this pcb is + * already bound!) + * @param ipaddr the local ip address to bind to (use IP_ADDR_ANY to bind + * to any local address + * @param port the local port to bind to + * @return ERR_USE if the port is already in use + * ERR_OK if bound + */ +err_t +tcp_bind(struct tcp_pcb *pcb, struct ip_addr *ipaddr, u16_t port) +{ + struct tcp_pcb *cpcb; + + LWIP_ERROR("tcp_bind: can only bind in state CLOSED", pcb->state == CLOSED, return ERR_ISCONN); + + if (port == 0) { + port = tcp_new_port(); + } + /* Check if the address already is in use. */ + /* Check the listen pcbs. */ + for(cpcb = (struct tcp_pcb *)tcp_listen_pcbs.pcbs; + cpcb != NULL; cpcb = cpcb->next) { + if (cpcb->local_port == port) { + if (ip_addr_isany(&(cpcb->local_ip)) || + ip_addr_isany(ipaddr) || + ip_addr_cmp(&(cpcb->local_ip), ipaddr)) { + return ERR_USE; + } + } + } + /* Check the connected pcbs. */ + for(cpcb = tcp_active_pcbs; + cpcb != NULL; cpcb = cpcb->next) { + if (cpcb->local_port == port) { + if (ip_addr_isany(&(cpcb->local_ip)) || + ip_addr_isany(ipaddr) || + ip_addr_cmp(&(cpcb->local_ip), ipaddr)) { + return ERR_USE; + } + } + } + /* Check the bound, not yet connected pcbs. */ + for(cpcb = tcp_bound_pcbs; cpcb != NULL; cpcb = cpcb->next) { + if (cpcb->local_port == port) { + if (ip_addr_isany(&(cpcb->local_ip)) || + ip_addr_isany(ipaddr) || + ip_addr_cmp(&(cpcb->local_ip), ipaddr)) { + return ERR_USE; + } + } + } + /* @todo: until SO_REUSEADDR is implemented (see task #6995 on savannah), + * we have to check the pcbs in TIME-WAIT state, also: */ + for(cpcb = tcp_tw_pcbs; cpcb != NULL; cpcb = cpcb->next) { + if (cpcb->local_port == port) { + if (ip_addr_cmp(&(cpcb->local_ip), ipaddr)) { + return ERR_USE; + } + } + } + + if (!ip_addr_isany(ipaddr)) { + pcb->local_ip = *ipaddr; + } + pcb->local_port = port; + TCP_REG(&tcp_bound_pcbs, pcb); + LWIP_DEBUGF(TCP_DEBUG, ("tcp_bind: bind to port %"U16_F"\n", port)); + return ERR_OK; +} +#if LWIP_CALLBACK_API +/** + * Default accept callback if no accept callback is specified by the user. + */ +static err_t +tcp_accept_null(void *arg, struct tcp_pcb *pcb, err_t err) +{ + LWIP_UNUSED_ARG(arg); + LWIP_UNUSED_ARG(pcb); + LWIP_UNUSED_ARG(err); + + return ERR_ABRT; +} +#endif /* LWIP_CALLBACK_API */ + +/** + * Set the state of the connection to be LISTEN, which means that it + * is able to accept incoming connections. The protocol control block + * is reallocated in order to consume less memory. Setting the + * connection to LISTEN is an irreversible process. + * + * @param pcb the original tcp_pcb + * @param backlog the incoming connections queue limit + * @return tcp_pcb used for listening, consumes less memory. + * + * @note The original tcp_pcb is freed. This function therefore has to be + * called like this: + * tpcb = tcp_listen(tpcb); + */ +struct tcp_pcb * +tcp_listen_with_backlog(struct tcp_pcb *pcb, u8_t backlog) +{ + struct tcp_pcb_listen *lpcb; + + LWIP_UNUSED_ARG(backlog); + LWIP_ERROR("tcp_listen: pcb already connected", pcb->state == CLOSED, return NULL); + + /* already listening? */ + if (pcb->state == LISTEN) { + return pcb; + } + lpcb = memp_malloc(MEMP_TCP_PCB_LISTEN); + if (lpcb == NULL) { + return NULL; + } + lpcb->callback_arg = pcb->callback_arg; + lpcb->local_port = pcb->local_port; + lpcb->state = LISTEN; + lpcb->so_options = pcb->so_options; + lpcb->so_options |= SOF_ACCEPTCONN; + lpcb->ttl = pcb->ttl; + lpcb->tos = pcb->tos; + ip_addr_set(&lpcb->local_ip, &pcb->local_ip); + TCP_RMV(&tcp_bound_pcbs, pcb); + memp_free(MEMP_TCP_PCB, pcb); +#if LWIP_CALLBACK_API + lpcb->accept = tcp_accept_null; +#endif /* LWIP_CALLBACK_API */ +#if TCP_LISTEN_BACKLOG + lpcb->accepts_pending = 0; + lpcb->backlog = (backlog ? backlog : 1); +#endif /* TCP_LISTEN_BACKLOG */ + TCP_REG(&tcp_listen_pcbs.listen_pcbs, lpcb); + return (struct tcp_pcb *)lpcb; +} + +/** + * Update the state that tracks the available window space to advertise. + * + * Returns how much extra window would be advertised if we sent an + * update now. + */ +u32_t tcp_update_rcv_ann_wnd(struct tcp_pcb *pcb) +{ + u32_t new_right_edge = pcb->rcv_nxt + pcb->rcv_wnd; + + if (TCP_SEQ_GEQ(new_right_edge, pcb->rcv_ann_right_edge + LWIP_MIN((TCP_WND / 2), pcb->mss))) { + /* we can advertise more window */ + pcb->rcv_ann_wnd = pcb->rcv_wnd; + return new_right_edge - pcb->rcv_ann_right_edge; + } else { + if (TCP_SEQ_GT(pcb->rcv_nxt, pcb->rcv_ann_right_edge)) { + /* Can happen due to other end sending out of advertised window, + * but within actual available (but not yet advertised) window */ + pcb->rcv_ann_wnd = 0; + } else { + /* keep the right edge of window constant */ + pcb->rcv_ann_wnd = pcb->rcv_ann_right_edge - pcb->rcv_nxt; + } + return 0; + } +} + +/** + * This function should be called by the application when it has + * processed the data. The purpose is to advertise a larger window + * when the data has been processed. + * + * @param pcb the tcp_pcb for which data is read + * @param len the amount of bytes that have been read by the application + */ +void +tcp_recved(struct tcp_pcb *pcb, u16_t len) +{ + int wnd_inflation; + + LWIP_ASSERT("tcp_recved: len would wrap rcv_wnd\n", + len <= 0xffff - pcb->rcv_wnd ); + + pcb->rcv_wnd += len; + if (pcb->rcv_wnd > TCP_WND) + pcb->rcv_wnd = TCP_WND; + + wnd_inflation = tcp_update_rcv_ann_wnd(pcb); + + /* If the change in the right edge of window is significant (default + * watermark is TCP_WND/2), then send an explicit update now. + * Otherwise wait for a packet to be sent in the normal course of + * events (or more window to be available later) */ + if (wnd_inflation >= TCP_WND_UPDATE_THRESHOLD) + tcp_ack_now(pcb); + + LWIP_DEBUGF(TCP_DEBUG, ("tcp_recved: recveived %"U16_F" bytes, wnd %"U16_F" (%"U16_F").\n", + len, pcb->rcv_wnd, TCP_WND - pcb->rcv_wnd)); +} + +/** + * A nastly hack featuring 'goto' statements that allocates a + * new TCP local port. + * + * @return a new (free) local TCP port number + */ +static u16_t +tcp_new_port(void) +{ + struct tcp_pcb *pcb; +#ifndef TCP_LOCAL_PORT_RANGE_START +#define TCP_LOCAL_PORT_RANGE_START 4096 +#define TCP_LOCAL_PORT_RANGE_END 0x7fff +#endif + static u16_t port = TCP_LOCAL_PORT_RANGE_START; + + again: + if (++port > TCP_LOCAL_PORT_RANGE_END) { + port = TCP_LOCAL_PORT_RANGE_START; + } + + for(pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) { + if (pcb->local_port == port) { + goto again; + } + } + for(pcb = tcp_tw_pcbs; pcb != NULL; pcb = pcb->next) { + if (pcb->local_port == port) { + goto again; + } + } + for(pcb = (struct tcp_pcb *)tcp_listen_pcbs.pcbs; pcb != NULL; pcb = pcb->next) { + if (pcb->local_port == port) { + goto again; + } + } + return port; +} + +/** + * Connects to another host. The function given as the "connected" + * argument will be called when the connection has been established. + * + * @param pcb the tcp_pcb used to establish the connection + * @param ipaddr the remote ip address to connect to + * @param port the remote tcp port to connect to + * @param connected callback function to call when connected (or on error) + * @return ERR_VAL if invalid arguments are given + * ERR_OK if connect request has been sent + * other err_t values if connect request couldn't be sent + */ +err_t +tcp_connect(struct tcp_pcb *pcb, struct ip_addr *ipaddr, u16_t port, + err_t (* connected)(void *arg, struct tcp_pcb *tpcb, err_t err)) +{ + err_t ret; + u32_t iss; + + LWIP_ERROR("tcp_connect: can only connected from state CLOSED", pcb->state == CLOSED, return ERR_ISCONN); + + LWIP_DEBUGF(TCP_DEBUG, ("tcp_connect to port %"U16_F"\n", port)); + if (ipaddr != NULL) { + pcb->remote_ip = *ipaddr; + } else { + return ERR_VAL; + } + pcb->remote_port = port; + if (pcb->local_port == 0) { + pcb->local_port = tcp_new_port(); + } + iss = tcp_next_iss(); + pcb->rcv_nxt = 0; + pcb->snd_nxt = iss; + pcb->lastack = iss - 1; + pcb->snd_lbb = iss - 1; + pcb->rcv_wnd = TCP_WND; + pcb->rcv_ann_wnd = TCP_WND; + pcb->rcv_ann_right_edge = pcb->rcv_nxt; + pcb->snd_wnd = TCP_WND; + /* As initial send MSS, we use TCP_MSS but limit it to 536. + The send MSS is updated when an MSS option is received. */ + pcb->mss = (TCP_MSS > 536) ? 536 : TCP_MSS; +#if TCP_CALCULATE_EFF_SEND_MSS + pcb->mss = tcp_eff_send_mss(pcb->mss, ipaddr); +#endif /* TCP_CALCULATE_EFF_SEND_MSS */ + pcb->cwnd = 1; + pcb->ssthresh = pcb->mss * 10; + pcb->state = SYN_SENT; +#if LWIP_CALLBACK_API + pcb->connected = connected; +#endif /* LWIP_CALLBACK_API */ + TCP_RMV(&tcp_bound_pcbs, pcb); + TCP_REG(&tcp_active_pcbs, pcb); + + snmp_inc_tcpactiveopens(); + + ret = tcp_enqueue(pcb, NULL, 0, TCP_SYN, 0, TF_SEG_OPTS_MSS +#if LWIP_TCP_TIMESTAMPS + | TF_SEG_OPTS_TS +#endif + ); + if (ret == ERR_OK) { + tcp_output(pcb); + } + return ret; +} + +/** + * Called every 500 ms and implements the retransmission timer and the timer that + * removes PCBs that have been in TIME-WAIT for enough time. It also increments + * various timers such as the inactivity timer in each PCB. + * + * Automatically called from tcp_tmr(). + */ +void +tcp_slowtmr(void) +{ + struct tcp_pcb *pcb, *pcb2, *prev; + u16_t eff_wnd; + u8_t pcb_remove; /* flag if a PCB should be removed */ + u8_t pcb_reset; /* flag if a RST should be sent when removing */ + err_t err; + + err = ERR_OK; + + ++tcp_ticks; + + /* Steps through all of the active PCBs. */ + prev = NULL; + pcb = tcp_active_pcbs; + if (pcb == NULL) { + LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: no active pcbs\n")); + } + while (pcb != NULL) { + LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: processing active pcb\n")); + LWIP_ASSERT("tcp_slowtmr: active pcb->state != CLOSED\n", pcb->state != CLOSED); + LWIP_ASSERT("tcp_slowtmr: active pcb->state != LISTEN\n", pcb->state != LISTEN); + LWIP_ASSERT("tcp_slowtmr: active pcb->state != TIME-WAIT\n", pcb->state != TIME_WAIT); + + pcb_remove = 0; + pcb_reset = 0; + + if (pcb->state == SYN_SENT && pcb->nrtx == TCP_SYNMAXRTX) { + ++pcb_remove; + LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: max SYN retries reached\n")); + } + else if (pcb->nrtx == TCP_MAXRTX) { + ++pcb_remove; + LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: max DATA retries reached\n")); + } else { + if (pcb->persist_backoff > 0) { + /* If snd_wnd is zero, use persist timer to send 1 byte probes + * instead of using the standard retransmission mechanism. */ + pcb->persist_cnt++; + if (pcb->persist_cnt >= tcp_persist_backoff[pcb->persist_backoff-1]) { + pcb->persist_cnt = 0; + if (pcb->persist_backoff < sizeof(tcp_persist_backoff)) { + pcb->persist_backoff++; + } + tcp_zero_window_probe(pcb); + } + } else { + /* Increase the retransmission timer if it is running */ + if(pcb->rtime >= 0) + ++pcb->rtime; + + if (pcb->unacked != NULL && pcb->rtime >= pcb->rto) { + /* Time for a retransmission. */ + LWIP_DEBUGF(TCP_RTO_DEBUG, ("tcp_slowtmr: rtime %"S16_F + " pcb->rto %"S16_F"\n", + pcb->rtime, pcb->rto)); + + /* Double retransmission time-out unless we are trying to + * connect to somebody (i.e., we are in SYN_SENT). */ + if (pcb->state != SYN_SENT) { + pcb->rto = ((pcb->sa >> 3) + pcb->sv) << tcp_backoff[pcb->nrtx]; + } + + /* Reset the retransmission timer. */ + pcb->rtime = 0; + + /* Reduce congestion window and ssthresh. */ + eff_wnd = LWIP_MIN(pcb->cwnd, pcb->snd_wnd); + pcb->ssthresh = eff_wnd >> 1; + if (pcb->ssthresh < pcb->mss) { + pcb->ssthresh = pcb->mss * 2; + } + pcb->cwnd = pcb->mss; + LWIP_DEBUGF(TCP_CWND_DEBUG, ("tcp_slowtmr: cwnd %"U16_F + " ssthresh %"U16_F"\n", + pcb->cwnd, pcb->ssthresh)); + + /* The following needs to be called AFTER cwnd is set to one + mss - STJ */ + tcp_rexmit_rto(pcb); + } + } + } + /* Check if this PCB has stayed too long in FIN-WAIT-2 */ + if (pcb->state == FIN_WAIT_2) { + if ((u32_t)(tcp_ticks - pcb->tmr) > + TCP_FIN_WAIT_TIMEOUT / TCP_SLOW_INTERVAL) { + ++pcb_remove; + LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: removing pcb stuck in FIN-WAIT-2\n")); + } + } + + /* Check if KEEPALIVE should be sent */ + if((pcb->so_options & SOF_KEEPALIVE) && + ((pcb->state == ESTABLISHED) || + (pcb->state == CLOSE_WAIT))) { +#if LWIP_TCP_KEEPALIVE + if((u32_t)(tcp_ticks - pcb->tmr) > + (pcb->keep_idle + (pcb->keep_cnt*pcb->keep_intvl)) + / TCP_SLOW_INTERVAL) +#else + if((u32_t)(tcp_ticks - pcb->tmr) > + (pcb->keep_idle + TCP_MAXIDLE) / TCP_SLOW_INTERVAL) +#endif /* LWIP_TCP_KEEPALIVE */ + { + LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: KEEPALIVE timeout. Aborting connection to %"U16_F".%"U16_F".%"U16_F".%"U16_F".\n", + ip4_addr1(&pcb->remote_ip), ip4_addr2(&pcb->remote_ip), + ip4_addr3(&pcb->remote_ip), ip4_addr4(&pcb->remote_ip))); + + ++pcb_remove; + ++pcb_reset; + } +#if LWIP_TCP_KEEPALIVE + else if((u32_t)(tcp_ticks - pcb->tmr) > + (pcb->keep_idle + pcb->keep_cnt_sent * pcb->keep_intvl) + / TCP_SLOW_INTERVAL) +#else + else if((u32_t)(tcp_ticks - pcb->tmr) > + (pcb->keep_idle + pcb->keep_cnt_sent * TCP_KEEPINTVL_DEFAULT) + / TCP_SLOW_INTERVAL) +#endif /* LWIP_TCP_KEEPALIVE */ + { + tcp_keepalive(pcb); + pcb->keep_cnt_sent++; + } + } + + /* If this PCB has queued out of sequence data, but has been + inactive for too long, will drop the data (it will eventually + be retransmitted). */ +#if TCP_QUEUE_OOSEQ + if (pcb->ooseq != NULL && + (u32_t)tcp_ticks - pcb->tmr >= pcb->rto * TCP_OOSEQ_TIMEOUT) { + tcp_segs_free(pcb->ooseq); + pcb->ooseq = NULL; + LWIP_DEBUGF(TCP_CWND_DEBUG, ("tcp_slowtmr: dropping OOSEQ queued data\n")); + } +#endif /* TCP_QUEUE_OOSEQ */ + + /* Check if this PCB has stayed too long in SYN-RCVD */ + if (pcb->state == SYN_RCVD) { + if ((u32_t)(tcp_ticks - pcb->tmr) > + TCP_SYN_RCVD_TIMEOUT / TCP_SLOW_INTERVAL) { + ++pcb_remove; + LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: removing pcb stuck in SYN-RCVD\n")); + } + } + + /* Check if this PCB has stayed too long in LAST-ACK */ + if (pcb->state == LAST_ACK) { + if ((u32_t)(tcp_ticks - pcb->tmr) > 2 * TCP_MSL / TCP_SLOW_INTERVAL) { + ++pcb_remove; + LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: removing pcb stuck in LAST-ACK\n")); + } + } + + /* If the PCB should be removed, do it. */ + if (pcb_remove) { + tcp_pcb_purge(pcb); + /* Remove PCB from tcp_active_pcbs list. */ + if (prev != NULL) { + LWIP_ASSERT("tcp_slowtmr: middle tcp != tcp_active_pcbs", pcb != tcp_active_pcbs); + prev->next = pcb->next; + } else { + /* This PCB was the first. */ + LWIP_ASSERT("tcp_slowtmr: first pcb == tcp_active_pcbs", tcp_active_pcbs == pcb); + tcp_active_pcbs = pcb->next; + } + + TCP_EVENT_ERR(pcb->errf, pcb->callback_arg, ERR_ABRT); + if (pcb_reset) { + tcp_rst(pcb->snd_nxt, pcb->rcv_nxt, &pcb->local_ip, &pcb->remote_ip, + pcb->local_port, pcb->remote_port); + } + + pcb2 = pcb->next; + memp_free(MEMP_TCP_PCB, pcb); + pcb = pcb2; + } else { + + /* We check if we should poll the connection. */ + ++pcb->polltmr; + if (pcb->polltmr >= pcb->pollinterval) { + pcb->polltmr = 0; + LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: polling application\n")); + TCP_EVENT_POLL(pcb, err); + if (err == ERR_OK) { + tcp_output(pcb); + } + } + + prev = pcb; + pcb = pcb->next; + } + } + + + /* Steps through all of the TIME-WAIT PCBs. */ + prev = NULL; + pcb = tcp_tw_pcbs; + while (pcb != NULL) { + LWIP_ASSERT("tcp_slowtmr: TIME-WAIT pcb->state == TIME-WAIT", pcb->state == TIME_WAIT); + pcb_remove = 0; + + /* Check if this PCB has stayed long enough in TIME-WAIT */ + if ((u32_t)(tcp_ticks - pcb->tmr) > 2 * TCP_MSL / TCP_SLOW_INTERVAL) { + ++pcb_remove; + } + + + + /* If the PCB should be removed, do it. */ + if (pcb_remove) { + tcp_pcb_purge(pcb); + /* Remove PCB from tcp_tw_pcbs list. */ + if (prev != NULL) { + LWIP_ASSERT("tcp_slowtmr: middle tcp != tcp_tw_pcbs", pcb != tcp_tw_pcbs); + prev->next = pcb->next; + } else { + /* This PCB was the first. */ + LWIP_ASSERT("tcp_slowtmr: first pcb == tcp_tw_pcbs", tcp_tw_pcbs == pcb); + tcp_tw_pcbs = pcb->next; + } + pcb2 = pcb->next; + memp_free(MEMP_TCP_PCB, pcb); + pcb = pcb2; + } else { + prev = pcb; + pcb = pcb->next; + } + } +} + +/** + * Is called every TCP_FAST_INTERVAL (250 ms) and process data previously + * "refused" by upper layer (application) and sends delayed ACKs. + * + * Automatically called from tcp_tmr(). + */ +void +tcp_fasttmr(void) +{ + struct tcp_pcb *pcb; + + for(pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) { + /* If there is data which was previously "refused" by upper layer */ + if (pcb->refused_data != NULL) { + /* Notify again application with data previously received. */ + err_t err; + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_fasttmr: notify kept packet\n")); + TCP_EVENT_RECV(pcb, pcb->refused_data, ERR_OK, err); + if (err == ERR_OK) { + pcb->refused_data = NULL; + } + } + + /* send delayed ACKs */ + if (pcb->flags & TF_ACK_DELAY) { + LWIP_DEBUGF(TCP_DEBUG, ("tcp_fasttmr: delayed ACK\n")); + tcp_ack_now(pcb); + pcb->flags &= ~(TF_ACK_DELAY | TF_ACK_NOW); + } + } +} + +/** + * Deallocates a list of TCP segments (tcp_seg structures). + * + * @param seg tcp_seg list of TCP segments to free + * @return the number of pbufs that were deallocated + */ +u8_t +tcp_segs_free(struct tcp_seg *seg) +{ + u8_t count = 0; + struct tcp_seg *next; + while (seg != NULL) { + next = seg->next; + count += tcp_seg_free(seg); + seg = next; + } + return count; +} + +/** + * Frees a TCP segment (tcp_seg structure). + * + * @param seg single tcp_seg to free + * @return the number of pbufs that were deallocated + */ +u8_t +tcp_seg_free(struct tcp_seg *seg) +{ + u8_t count = 0; + + if (seg != NULL) { + if (seg->p != NULL) { + count = pbuf_free(seg->p); +#if TCP_DEBUG + seg->p = NULL; +#endif /* TCP_DEBUG */ + } + memp_free(MEMP_TCP_SEG, seg); + } + return count; +} + +/** + * Sets the priority of a connection. + * + * @param pcb the tcp_pcb to manipulate + * @param prio new priority + */ +void +tcp_setprio(struct tcp_pcb *pcb, u8_t prio) +{ + pcb->prio = prio; +} +#if TCP_QUEUE_OOSEQ + +/** + * Returns a copy of the given TCP segment. + * The pbuf and data are not copied, only the pointers + * + * @param seg the old tcp_seg + * @return a copy of seg + */ +struct tcp_seg * +tcp_seg_copy(struct tcp_seg *seg) +{ + struct tcp_seg *cseg; + + cseg = memp_malloc(MEMP_TCP_SEG); + if (cseg == NULL) { + return NULL; + } + SMEMCPY((u8_t *)cseg, (const u8_t *)seg, sizeof(struct tcp_seg)); + pbuf_ref(cseg->p); + return cseg; +} +#endif + +#if LWIP_CALLBACK_API +/** + * Default receive callback that is called if the user didn't register + * a recv callback for the pcb. + */ +err_t +tcp_recv_null(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err) +{ + LWIP_UNUSED_ARG(arg); + if (p != NULL) { + tcp_recved(pcb, p->tot_len); + pbuf_free(p); + } else if (err == ERR_OK) { + return tcp_close(pcb); + } + return ERR_OK; +} +#endif /* LWIP_CALLBACK_API */ + +/** + * Kills the oldest active connection that has lower priority than prio. + * + * @param prio minimum priority + */ +static void +tcp_kill_prio(u8_t prio) +{ + struct tcp_pcb *pcb, *inactive; + u32_t inactivity; + u8_t mprio; + + + mprio = TCP_PRIO_MAX; + + /* We kill the oldest active connection that has lower priority than prio. */ + inactivity = 0; + inactive = NULL; + for(pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) { + if (pcb->prio <= prio && + pcb->prio <= mprio && + (u32_t)(tcp_ticks - pcb->tmr) >= inactivity) { + inactivity = tcp_ticks - pcb->tmr; + inactive = pcb; + mprio = pcb->prio; + } + } + if (inactive != NULL) { + LWIP_DEBUGF(TCP_DEBUG, ("tcp_kill_prio: killing oldest PCB %p (%"S32_F")\n", + (void *)inactive, inactivity)); + tcp_abort(inactive); + } +} + +/** + * Kills the oldest connection that is in TIME_WAIT state. + * Called from tcp_alloc() if no more connections are available. + */ +static void +tcp_kill_timewait(void) +{ + struct tcp_pcb *pcb, *inactive; + u32_t inactivity; + + inactivity = 0; + inactive = NULL; + /* Go through the list of TIME_WAIT pcbs and get the oldest pcb. */ + for(pcb = tcp_tw_pcbs; pcb != NULL; pcb = pcb->next) { + if ((u32_t)(tcp_ticks - pcb->tmr) >= inactivity) { + inactivity = tcp_ticks - pcb->tmr; + inactive = pcb; + } + } + if (inactive != NULL) { + LWIP_DEBUGF(TCP_DEBUG, ("tcp_kill_timewait: killing oldest TIME-WAIT PCB %p (%"S32_F")\n", + (void *)inactive, inactivity)); + tcp_abort(inactive); + } +} + +/** + * Allocate a new tcp_pcb structure. + * + * @param prio priority for the new pcb + * @return a new tcp_pcb that initially is in state CLOSED + */ +struct tcp_pcb * +tcp_alloc(u8_t prio) +{ + struct tcp_pcb *pcb; + u32_t iss; + + pcb = memp_malloc(MEMP_TCP_PCB); + if (pcb == NULL) { + /* Try killing oldest connection in TIME-WAIT. */ + LWIP_DEBUGF(TCP_DEBUG, ("tcp_alloc: killing off oldest TIME-WAIT connection\n")); + tcp_kill_timewait(); + /* Try to allocate a tcp_pcb again. */ + pcb = memp_malloc(MEMP_TCP_PCB); + if (pcb == NULL) { + /* Try killing active connections with lower priority than the new one. */ + LWIP_DEBUGF(TCP_DEBUG, ("tcp_alloc: killing connection with prio lower than %d\n", prio)); + tcp_kill_prio(prio); + /* Try to allocate a tcp_pcb again. */ + pcb = memp_malloc(MEMP_TCP_PCB); + if (pcb != NULL) { + /* adjust err stats: memp_malloc failed twice before */ + MEMP_STATS_DEC(err, MEMP_TCP_PCB); + } + } + if (pcb != NULL) { + /* adjust err stats: timewait PCB was freed above */ + MEMP_STATS_DEC(err, MEMP_TCP_PCB); + } + } + if (pcb != NULL) { + memset(pcb, 0, sizeof(struct tcp_pcb)); + pcb->prio = TCP_PRIO_NORMAL; + pcb->snd_buf = TCP_SND_BUF; + pcb->snd_queuelen = 0; + pcb->rcv_wnd = TCP_WND; + pcb->rcv_ann_wnd = TCP_WND; + pcb->tos = 0; + pcb->ttl = TCP_TTL; + /* As initial send MSS, we use TCP_MSS but limit it to 536. + The send MSS is updated when an MSS option is received. */ + pcb->mss = (TCP_MSS > 536) ? 536 : TCP_MSS; + pcb->rto = 3000 / TCP_SLOW_INTERVAL; + pcb->sa = 0; + pcb->sv = 3000 / TCP_SLOW_INTERVAL; + pcb->rtime = -1; + pcb->cwnd = 1; + iss = tcp_next_iss(); + pcb->snd_wl2 = iss; + pcb->snd_nxt = iss; + pcb->lastack = iss; + pcb->snd_lbb = iss; + pcb->tmr = tcp_ticks; + + pcb->polltmr = 0; + +#if LWIP_CALLBACK_API + pcb->recv = tcp_recv_null; +#endif /* LWIP_CALLBACK_API */ + + /* Init KEEPALIVE timer */ + pcb->keep_idle = TCP_KEEPIDLE_DEFAULT; + +#if LWIP_TCP_KEEPALIVE + pcb->keep_intvl = TCP_KEEPINTVL_DEFAULT; + pcb->keep_cnt = TCP_KEEPCNT_DEFAULT; +#endif /* LWIP_TCP_KEEPALIVE */ + + pcb->keep_cnt_sent = 0; + } + return pcb; +} + +/** + * Creates a new TCP protocol control block but doesn't place it on + * any of the TCP PCB lists. + * The pcb is not put on any list until binding using tcp_bind(). + * + * @internal: Maybe there should be a idle TCP PCB list where these + * PCBs are put on. Port reservation using tcp_bind() is implemented but + * allocated pcbs that are not bound can't be killed automatically if wanting + * to allocate a pcb with higher prio (@see tcp_kill_prio()) + * + * @return a new tcp_pcb that initially is in state CLOSED + */ +struct tcp_pcb * +tcp_new(void) +{ + return tcp_alloc(TCP_PRIO_NORMAL); +} + +/** + * Used to specify the argument that should be passed callback + * functions. + * + * @param pcb tcp_pcb to set the callback argument + * @param arg void pointer argument to pass to callback functions + */ +void +tcp_arg(struct tcp_pcb *pcb, void *arg) +{ + pcb->callback_arg = arg; +} +#if LWIP_CALLBACK_API + +/** + * Used to specify the function that should be called when a TCP + * connection receives data. + * + * @param pcb tcp_pcb to set the recv callback + * @param recv callback function to call for this pcb when data is received + */ +void +tcp_recv(struct tcp_pcb *pcb, + err_t (* recv)(void *arg, struct tcp_pcb *tpcb, struct pbuf *p, err_t err)) +{ + pcb->recv = recv; +} + +/** + * Used to specify the function that should be called when TCP data + * has been successfully delivered to the remote host. + * + * @param pcb tcp_pcb to set the sent callback + * @param sent callback function to call for this pcb when data is successfully sent + */ +void +tcp_sent(struct tcp_pcb *pcb, + err_t (* sent)(void *arg, struct tcp_pcb *tpcb, u16_t len)) +{ + pcb->sent = sent; +} + +/** + * Used to specify the function that should be called when a fatal error + * has occured on the connection. + * + * @param pcb tcp_pcb to set the err callback + * @param errf callback function to call for this pcb when a fatal error + * has occured on the connection + */ +void +tcp_err(struct tcp_pcb *pcb, + void (* errf)(void *arg, err_t err)) +{ + pcb->errf = errf; +} + +/** + * Used for specifying the function that should be called when a + * LISTENing connection has been connected to another host. + * + * @param pcb tcp_pcb to set the accept callback + * @param accept callback function to call for this pcb when LISTENing + * connection has been connected to another host + */ +void +tcp_accept(struct tcp_pcb *pcb, + err_t (* accept)(void *arg, struct tcp_pcb *newpcb, err_t err)) +{ + pcb->accept = accept; +} +#endif /* LWIP_CALLBACK_API */ + + +/** + * Used to specify the function that should be called periodically + * from TCP. The interval is specified in terms of the TCP coarse + * timer interval, which is called twice a second. + * + */ +void +tcp_poll(struct tcp_pcb *pcb, + err_t (* poll)(void *arg, struct tcp_pcb *tpcb), u8_t interval) +{ +#if LWIP_CALLBACK_API + pcb->poll = poll; +#endif /* LWIP_CALLBACK_API */ + pcb->pollinterval = interval; +} + +/** + * Purges a TCP PCB. Removes any buffered data and frees the buffer memory + * (pcb->ooseq, pcb->unsent and pcb->unacked are freed). + * + * @param pcb tcp_pcb to purge. The pcb itself is not deallocated! + */ +void +tcp_pcb_purge(struct tcp_pcb *pcb) +{ + if (pcb->state != CLOSED && + pcb->state != TIME_WAIT && + pcb->state != LISTEN) { + + LWIP_DEBUGF(TCP_DEBUG, ("tcp_pcb_purge\n")); + +#if TCP_LISTEN_BACKLOG + if (pcb->state == SYN_RCVD) { + /* Need to find the corresponding listen_pcb and decrease its accepts_pending */ + struct tcp_pcb_listen *lpcb; + LWIP_ASSERT("tcp_pcb_purge: pcb->state == SYN_RCVD but tcp_listen_pcbs is NULL", + tcp_listen_pcbs.listen_pcbs != NULL); + for (lpcb = tcp_listen_pcbs.listen_pcbs; lpcb != NULL; lpcb = lpcb->next) { + if ((lpcb->local_port == pcb->local_port) && + (ip_addr_isany(&lpcb->local_ip) || + ip_addr_cmp(&pcb->local_ip, &lpcb->local_ip))) { + /* port and address of the listen pcb match the timed-out pcb */ + LWIP_ASSERT("tcp_pcb_purge: listen pcb does not have accepts pending", + lpcb->accepts_pending > 0); + lpcb->accepts_pending--; + break; + } + } + } +#endif /* TCP_LISTEN_BACKLOG */ + + + if (pcb->refused_data != NULL) { + LWIP_DEBUGF(TCP_DEBUG, ("tcp_pcb_purge: data left on ->refused_data\n")); + pbuf_free(pcb->refused_data); + pcb->refused_data = NULL; + } + if (pcb->unsent != NULL) { + LWIP_DEBUGF(TCP_DEBUG, ("tcp_pcb_purge: not all data sent\n")); + } + if (pcb->unacked != NULL) { + LWIP_DEBUGF(TCP_DEBUG, ("tcp_pcb_purge: data left on ->unacked\n")); + } +#if TCP_QUEUE_OOSEQ /* LW */ + if (pcb->ooseq != NULL) { + LWIP_DEBUGF(TCP_DEBUG, ("tcp_pcb_purge: data left on ->ooseq\n")); + } + + /* Stop the retransmission timer as it will expect data on unacked + queue if it fires */ + pcb->rtime = -1; + + tcp_segs_free(pcb->ooseq); + pcb->ooseq = NULL; +#endif /* TCP_QUEUE_OOSEQ */ + tcp_segs_free(pcb->unsent); + tcp_segs_free(pcb->unacked); + pcb->unacked = pcb->unsent = NULL; + } +} + +/** + * Purges the PCB and removes it from a PCB list. Any delayed ACKs are sent first. + * + * @param pcblist PCB list to purge. + * @param pcb tcp_pcb to purge. The pcb itself is NOT deallocated! + */ +void +tcp_pcb_remove(struct tcp_pcb **pcblist, struct tcp_pcb *pcb) +{ + TCP_RMV(pcblist, pcb); + + tcp_pcb_purge(pcb); + + /* if there is an outstanding delayed ACKs, send it */ + if (pcb->state != TIME_WAIT && + pcb->state != LISTEN && + pcb->flags & TF_ACK_DELAY) { + pcb->flags |= TF_ACK_NOW; + tcp_output(pcb); + } + + if (pcb->state != LISTEN) { + LWIP_ASSERT("unsent segments leaking", pcb->unsent == NULL); + LWIP_ASSERT("unacked segments leaking", pcb->unacked == NULL); +#if TCP_QUEUE_OOSEQ + LWIP_ASSERT("ooseq segments leaking", pcb->ooseq == NULL); +#endif /* TCP_QUEUE_OOSEQ */ + } + + pcb->state = CLOSED; + + LWIP_ASSERT("tcp_pcb_remove: tcp_pcbs_sane()", tcp_pcbs_sane()); +} + +/** + * Calculates a new initial sequence number for new connections. + * + * @return u32_t pseudo random sequence number + */ +u32_t +tcp_next_iss(void) +{ + static u32_t iss = 6510; + + iss += tcp_ticks; /* XXX */ + return iss; +} + +#if TCP_CALCULATE_EFF_SEND_MSS +/** + * Calcluates the effective send mss that can be used for a specific IP address + * by using ip_route to determin the netif used to send to the address and + * calculating the minimum of TCP_MSS and that netif's mtu (if set). + */ +u16_t +tcp_eff_send_mss(u16_t sendmss, struct ip_addr *addr) +{ + u16_t mss_s; + struct netif *outif; + + outif = ip_route(addr); + if ((outif != NULL) && (outif->mtu != 0)) { + mss_s = outif->mtu - IP_HLEN - TCP_HLEN; + /* RFC 1122, chap 4.2.2.6: + * Eff.snd.MSS = min(SendMSS+20, MMS_S) - TCPhdrsize - IPoptionsize + * We correct for TCP options in tcp_enqueue(), and don't support + * IP options + */ + sendmss = LWIP_MIN(sendmss, mss_s); + } + return sendmss; +} +#endif /* TCP_CALCULATE_EFF_SEND_MSS */ + +const char* +tcp_debug_state_str(enum tcp_state s) +{ + return tcp_state_str[s]; +} + +#if TCP_DEBUG || TCP_INPUT_DEBUG || TCP_OUTPUT_DEBUG +/** + * Print a tcp header for debugging purposes. + * + * @param tcphdr pointer to a struct tcp_hdr + */ +void +tcp_debug_print(struct tcp_hdr *tcphdr) +{ + LWIP_DEBUGF(TCP_DEBUG, ("TCP header:\n")); + LWIP_DEBUGF(TCP_DEBUG, ("+-------------------------------+\n")); + LWIP_DEBUGF(TCP_DEBUG, ("| %5"U16_F" | %5"U16_F" | (src port, dest port)\n", + ntohs(tcphdr->src), ntohs(tcphdr->dest))); + LWIP_DEBUGF(TCP_DEBUG, ("+-------------------------------+\n")); + LWIP_DEBUGF(TCP_DEBUG, ("| %010"U32_F" | (seq no)\n", + ntohl(tcphdr->seqno))); + LWIP_DEBUGF(TCP_DEBUG, ("+-------------------------------+\n")); + LWIP_DEBUGF(TCP_DEBUG, ("| %010"U32_F" | (ack no)\n", + ntohl(tcphdr->ackno))); + LWIP_DEBUGF(TCP_DEBUG, ("+-------------------------------+\n")); + LWIP_DEBUGF(TCP_DEBUG, ("| %2"U16_F" | |%"U16_F"%"U16_F"%"U16_F"%"U16_F"%"U16_F"%"U16_F"| %5"U16_F" | (hdrlen, flags (", + TCPH_HDRLEN(tcphdr), + TCPH_FLAGS(tcphdr) >> 5 & 1, + TCPH_FLAGS(tcphdr) >> 4 & 1, + TCPH_FLAGS(tcphdr) >> 3 & 1, + TCPH_FLAGS(tcphdr) >> 2 & 1, + TCPH_FLAGS(tcphdr) >> 1 & 1, + TCPH_FLAGS(tcphdr) & 1, + ntohs(tcphdr->wnd))); + tcp_debug_print_flags(TCPH_FLAGS(tcphdr)); + LWIP_DEBUGF(TCP_DEBUG, ("), win)\n")); + LWIP_DEBUGF(TCP_DEBUG, ("+-------------------------------+\n")); + LWIP_DEBUGF(TCP_DEBUG, ("| 0x%04"X16_F" | %5"U16_F" | (chksum, urgp)\n", + ntohs(tcphdr->chksum), ntohs(tcphdr->urgp))); + LWIP_DEBUGF(TCP_DEBUG, ("+-------------------------------+\n")); +} + +/** + * Print a tcp state for debugging purposes. + * + * @param s enum tcp_state to print + */ +void +tcp_debug_print_state(enum tcp_state s) +{ + LWIP_DEBUGF(TCP_DEBUG, ("State: %s\n", tcp_state_str[s])); +} + +/** + * Print tcp flags for debugging purposes. + * + * @param flags tcp flags, all active flags are printed + */ +void +tcp_debug_print_flags(u8_t flags) +{ + if (flags & TCP_FIN) { + LWIP_DEBUGF(TCP_DEBUG, ("FIN ")); + } + if (flags & TCP_SYN) { + LWIP_DEBUGF(TCP_DEBUG, ("SYN ")); + } + if (flags & TCP_RST) { + LWIP_DEBUGF(TCP_DEBUG, ("RST ")); + } + if (flags & TCP_PSH) { + LWIP_DEBUGF(TCP_DEBUG, ("PSH ")); + } + if (flags & TCP_ACK) { + LWIP_DEBUGF(TCP_DEBUG, ("ACK ")); + } + if (flags & TCP_URG) { + LWIP_DEBUGF(TCP_DEBUG, ("URG ")); + } + if (flags & TCP_ECE) { + LWIP_DEBUGF(TCP_DEBUG, ("ECE ")); + } + if (flags & TCP_CWR) { + LWIP_DEBUGF(TCP_DEBUG, ("CWR ")); + } + LWIP_DEBUGF(TCP_DEBUG, ("\n")); +} + +/** + * Print all tcp_pcbs in every list for debugging purposes. + */ +void +tcp_debug_print_pcbs(void) +{ + struct tcp_pcb *pcb; + LWIP_DEBUGF(TCP_DEBUG, ("Active PCB states:\n")); + for(pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) { + LWIP_DEBUGF(TCP_DEBUG, ("[%p]Local port %"U16_F", foreign port %"U16_F" snd_nxt %"U32_F" rcv_nxt %"U32_F" ", + pcb, pcb->local_port, pcb->remote_port, + pcb->snd_nxt, pcb->rcv_nxt)); + tcp_debug_print_state(pcb->state); + } + LWIP_DEBUGF(TCP_DEBUG, ("Listen PCB states:\n")); + for(pcb = (struct tcp_pcb *)tcp_listen_pcbs.pcbs; pcb != NULL; pcb = pcb->next) { + LWIP_DEBUGF(TCP_DEBUG, ("[%p]Local port %"U16_F", foreign port %"U16_F" snd_nxt %"U32_F" rcv_nxt %"U32_F" ", + pcb, pcb->local_port, pcb->remote_port, + pcb->snd_nxt, pcb->rcv_nxt)); + tcp_debug_print_state(pcb->state); + } + LWIP_DEBUGF(TCP_DEBUG, ("TIME-WAIT PCB states:\n")); + for(pcb = tcp_tw_pcbs; pcb != NULL; pcb = pcb->next) { + LWIP_DEBUGF(TCP_DEBUG, ("[%p]Local port %"U16_F", foreign port %"U16_F" snd_nxt %"U32_F" rcv_nxt %"U32_F" ", + pcb, pcb->local_port, pcb->remote_port, + pcb->snd_nxt, pcb->rcv_nxt)); + tcp_debug_print_state(pcb->state); + } +} + +/** + * Check state consistency of the tcp_pcb lists. + */ +s16_t +tcp_pcbs_sane(void) +{ + struct tcp_pcb *pcb; + for(pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) { + LWIP_ASSERT("tcp_pcbs_sane: active pcb->state != CLOSED", pcb->state != CLOSED); + LWIP_ASSERT("tcp_pcbs_sane: active pcb->state != LISTEN", pcb->state != LISTEN); + LWIP_ASSERT("tcp_pcbs_sane: active pcb->state != TIME-WAIT", pcb->state != TIME_WAIT); + } + for(pcb = tcp_tw_pcbs; pcb != NULL; pcb = pcb->next) { + LWIP_ASSERT("tcp_pcbs_sane: tw pcb->state == TIME-WAIT", pcb->state == TIME_WAIT); + } + return 1; +} +#endif /* TCP_DEBUG */ + +#endif /* LWIP_TCP */ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/tcp_in.c b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/tcp_in.c new file mode 100644 index 000000000..3930b40f6 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/tcp_in.c @@ -0,0 +1,1508 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/** + * @file + * Transmission Control Protocol, incoming traffic + * + * The input processing functions of the TCP layer. + * + * These functions are generally called in the order (ip_input() ->) + * tcp_input() -> * tcp_process() -> tcp_receive() (-> application). + * + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#include "lwip/opt.h" + +#if LWIP_TCP /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/tcp.h" +#include "lwip/def.h" +#include "lwip/ip_addr.h" +#include "lwip/netif.h" +#include "lwip/mem.h" +#include "lwip/memp.h" +#include "lwip/inet.h" +#include "lwip/inet_chksum.h" +#include "lwip/stats.h" +#include "lwip/snmp.h" +#include "arch/perf.h" + +/* These variables are global to all functions involved in the input + processing of TCP segments. They are set by the tcp_input() + function. */ +static struct tcp_seg inseg; +static struct tcp_hdr *tcphdr; +static struct ip_hdr *iphdr; +static u32_t seqno, ackno; +static u8_t flags; +static u16_t tcplen; + +static u8_t recv_flags; +static struct pbuf *recv_data; + +struct tcp_pcb *tcp_input_pcb; + +/* Forward declarations. */ +static err_t tcp_process(struct tcp_pcb *pcb); +static void tcp_receive(struct tcp_pcb *pcb); +static void tcp_parseopt(struct tcp_pcb *pcb); + +static err_t tcp_listen_input(struct tcp_pcb_listen *pcb); +static err_t tcp_timewait_input(struct tcp_pcb *pcb); + +/** + * The initial input processing of TCP. It verifies the TCP header, demultiplexes + * the segment between the PCBs and passes it on to tcp_process(), which implements + * the TCP finite state machine. This function is called by the IP layer (in + * ip_input()). + * + * @param p received TCP segment to process (p->payload pointing to the IP header) + * @param inp network interface on which this segment was received + */ +void +tcp_input(struct pbuf *p, struct netif *inp) +{ + struct tcp_pcb *pcb, *prev; + struct tcp_pcb_listen *lpcb; + u8_t hdrlen; + err_t err; + + PERF_START; + + TCP_STATS_INC(tcp.recv); + snmp_inc_tcpinsegs(); + + iphdr = p->payload; + tcphdr = (struct tcp_hdr *)((u8_t *)p->payload + IPH_HL(iphdr) * 4); + +#if TCP_INPUT_DEBUG + tcp_debug_print(tcphdr); +#endif + + /* remove header from payload */ + if (pbuf_header(p, -((s16_t)(IPH_HL(iphdr) * 4))) || (p->tot_len < sizeof(struct tcp_hdr))) { + /* drop short packets */ + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_input: short packet (%"U16_F" bytes) discarded\n", p->tot_len)); + TCP_STATS_INC(tcp.lenerr); + TCP_STATS_INC(tcp.drop); + snmp_inc_tcpinerrs(); + pbuf_free(p); + return; + } + + /* Don't even process incoming broadcasts/multicasts. */ + if (ip_addr_isbroadcast(&(iphdr->dest), inp) || + ip_addr_ismulticast(&(iphdr->dest))) { + TCP_STATS_INC(tcp.proterr); + TCP_STATS_INC(tcp.drop); + snmp_inc_tcpinerrs(); + pbuf_free(p); + return; + } + +#if CHECKSUM_CHECK_TCP + /* Verify TCP checksum. */ + if (inet_chksum_pseudo(p, (struct ip_addr *)&(iphdr->src), + (struct ip_addr *)&(iphdr->dest), + IP_PROTO_TCP, p->tot_len) != 0) { + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_input: packet discarded due to failing checksum 0x%04"X16_F"\n", + inet_chksum_pseudo(p, (struct ip_addr *)&(iphdr->src), (struct ip_addr *)&(iphdr->dest), + IP_PROTO_TCP, p->tot_len))); +#if TCP_DEBUG + tcp_debug_print(tcphdr); +#endif /* TCP_DEBUG */ + TCP_STATS_INC(tcp.chkerr); + TCP_STATS_INC(tcp.drop); + snmp_inc_tcpinerrs(); + pbuf_free(p); + return; + } +#endif + + /* Move the payload pointer in the pbuf so that it points to the + TCP data instead of the TCP header. */ + hdrlen = TCPH_HDRLEN(tcphdr); + if(pbuf_header(p, -(hdrlen * 4))){ + /* drop short packets */ + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_input: short packet\n")); + TCP_STATS_INC(tcp.lenerr); + TCP_STATS_INC(tcp.drop); + snmp_inc_tcpinerrs(); + pbuf_free(p); + return; + } + + /* Convert fields in TCP header to host byte order. */ + tcphdr->src = ntohs(tcphdr->src); + tcphdr->dest = ntohs(tcphdr->dest); + seqno = tcphdr->seqno = ntohl(tcphdr->seqno); + ackno = tcphdr->ackno = ntohl(tcphdr->ackno); + tcphdr->wnd = ntohs(tcphdr->wnd); + + flags = TCPH_FLAGS(tcphdr); + tcplen = p->tot_len + ((flags & (TCP_FIN | TCP_SYN)) ? 1 : 0); + + /* Demultiplex an incoming segment. First, we check if it is destined + for an active connection. */ + prev = NULL; + + + for(pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) { + LWIP_ASSERT("tcp_input: active pcb->state != CLOSED", pcb->state != CLOSED); + LWIP_ASSERT("tcp_input: active pcb->state != TIME-WAIT", pcb->state != TIME_WAIT); + LWIP_ASSERT("tcp_input: active pcb->state != LISTEN", pcb->state != LISTEN); + if (pcb->remote_port == tcphdr->src && + pcb->local_port == tcphdr->dest && + ip_addr_cmp(&(pcb->remote_ip), &(iphdr->src)) && + ip_addr_cmp(&(pcb->local_ip), &(iphdr->dest))) { + + /* Move this PCB to the front of the list so that subsequent + lookups will be faster (we exploit locality in TCP segment + arrivals). */ + LWIP_ASSERT("tcp_input: pcb->next != pcb (before cache)", pcb->next != pcb); + if (prev != NULL) { + prev->next = pcb->next; + pcb->next = tcp_active_pcbs; + tcp_active_pcbs = pcb; + } + LWIP_ASSERT("tcp_input: pcb->next != pcb (after cache)", pcb->next != pcb); + break; + } + prev = pcb; + } + + if (pcb == NULL) { + /* If it did not go to an active connection, we check the connections + in the TIME-WAIT state. */ + for(pcb = tcp_tw_pcbs; pcb != NULL; pcb = pcb->next) { + LWIP_ASSERT("tcp_input: TIME-WAIT pcb->state == TIME-WAIT", pcb->state == TIME_WAIT); + if (pcb->remote_port == tcphdr->src && + pcb->local_port == tcphdr->dest && + ip_addr_cmp(&(pcb->remote_ip), &(iphdr->src)) && + ip_addr_cmp(&(pcb->local_ip), &(iphdr->dest))) { + /* We don't really care enough to move this PCB to the front + of the list since we are not very likely to receive that + many segments for connections in TIME-WAIT. */ + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_input: packed for TIME_WAITing connection.\n")); + tcp_timewait_input(pcb); + pbuf_free(p); + return; + } + } + + /* Finally, if we still did not get a match, we check all PCBs that + are LISTENing for incoming connections. */ + prev = NULL; + for(lpcb = tcp_listen_pcbs.listen_pcbs; lpcb != NULL; lpcb = lpcb->next) { + if ((ip_addr_isany(&(lpcb->local_ip)) || + ip_addr_cmp(&(lpcb->local_ip), &(iphdr->dest))) && + lpcb->local_port == tcphdr->dest) { + /* Move this PCB to the front of the list so that subsequent + lookups will be faster (we exploit locality in TCP segment + arrivals). */ + if (prev != NULL) { + ((struct tcp_pcb_listen *)prev)->next = lpcb->next; + /* our successor is the remainder of the listening list */ + lpcb->next = tcp_listen_pcbs.listen_pcbs; + /* put this listening pcb at the head of the listening list */ + tcp_listen_pcbs.listen_pcbs = lpcb; + } + + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_input: packed for LISTENing connection.\n")); + tcp_listen_input(lpcb); + pbuf_free(p); + return; + } + prev = (struct tcp_pcb *)lpcb; + } + } + +#if TCP_INPUT_DEBUG + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("+-+-+-+-+-+-+-+-+-+-+-+-+-+- tcp_input: flags ")); + tcp_debug_print_flags(TCPH_FLAGS(tcphdr)); + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n")); +#endif /* TCP_INPUT_DEBUG */ + + + if (pcb != NULL) { + /* The incoming segment belongs to a connection. */ +#if TCP_INPUT_DEBUG +#if TCP_DEBUG + tcp_debug_print_state(pcb->state); +#endif /* TCP_DEBUG */ +#endif /* TCP_INPUT_DEBUG */ + + /* Set up a tcp_seg structure. */ + inseg.next = NULL; + inseg.len = p->tot_len; + inseg.dataptr = p->payload; + inseg.p = p; + inseg.tcphdr = tcphdr; + + recv_data = NULL; + recv_flags = 0; + + /* If there is data which was previously "refused" by upper layer */ + if (pcb->refused_data != NULL) { + /* Notify again application with data previously received. */ + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_input: notify kept packet\n")); + TCP_EVENT_RECV(pcb, pcb->refused_data, ERR_OK, err); + if (err == ERR_OK) { + pcb->refused_data = NULL; + } else { + /* drop incoming packets, because pcb is "full" */ + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_input: drop incoming packets, because pcb is \"full\"\n")); + TCP_STATS_INC(tcp.drop); + snmp_inc_tcpinerrs(); + pbuf_free(p); + return; + } + } + tcp_input_pcb = pcb; + err = tcp_process(pcb); + /* A return value of ERR_ABRT means that tcp_abort() was called + and that the pcb has been freed. If so, we don't do anything. */ + if (err != ERR_ABRT) { + if (recv_flags & TF_RESET) { + /* TF_RESET means that the connection was reset by the other + end. We then call the error callback to inform the + application that the connection is dead before we + deallocate the PCB. */ + TCP_EVENT_ERR(pcb->errf, pcb->callback_arg, ERR_RST); + tcp_pcb_remove(&tcp_active_pcbs, pcb); + memp_free(MEMP_TCP_PCB, pcb); + } else if (recv_flags & TF_CLOSED) { + /* The connection has been closed and we will deallocate the + PCB. */ + tcp_pcb_remove(&tcp_active_pcbs, pcb); + memp_free(MEMP_TCP_PCB, pcb); + } else { + err = ERR_OK; + /* If the application has registered a "sent" function to be + called when new send buffer space is available, we call it + now. */ + if (pcb->acked > 0) { + TCP_EVENT_SENT(pcb, pcb->acked, err); + } + + if (recv_data != NULL) { + if(flags & TCP_PSH) { + recv_data->flags |= PBUF_FLAG_PUSH; + } + + /* Notify application that data has been received. */ + TCP_EVENT_RECV(pcb, recv_data, ERR_OK, err); + + /* If the upper layer can't receive this data, store it */ + if (err != ERR_OK) { + pcb->refused_data = recv_data; + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_input: keep incoming packet, because pcb is \"full\"\n")); + } + } + + /* If a FIN segment was received, we call the callback + function with a NULL buffer to indicate EOF. */ + if (recv_flags & TF_GOT_FIN) { + TCP_EVENT_RECV(pcb, NULL, ERR_OK, err); + } + + tcp_input_pcb = NULL; + /* Try to send something out. */ + tcp_output(pcb); +#if TCP_INPUT_DEBUG +#if TCP_DEBUG + tcp_debug_print_state(pcb->state); +#endif /* TCP_DEBUG */ +#endif /* TCP_INPUT_DEBUG */ + } + } + tcp_input_pcb = NULL; + + + /* give up our reference to inseg.p */ + if (inseg.p != NULL) + { + pbuf_free(inseg.p); + inseg.p = NULL; + } + } else { + + /* If no matching PCB was found, send a TCP RST (reset) to the + sender. */ + LWIP_DEBUGF(TCP_RST_DEBUG, ("tcp_input: no PCB match found, resetting.\n")); + if (!(TCPH_FLAGS(tcphdr) & TCP_RST)) { + TCP_STATS_INC(tcp.proterr); + TCP_STATS_INC(tcp.drop); + tcp_rst(ackno, seqno + tcplen, + &(iphdr->dest), &(iphdr->src), + tcphdr->dest, tcphdr->src); + } + pbuf_free(p); + } + + LWIP_ASSERT("tcp_input: tcp_pcbs_sane()", tcp_pcbs_sane()); + PERF_STOP("tcp_input"); +} + +/** + * Called by tcp_input() when a segment arrives for a listening + * connection (from tcp_input()). + * + * @param pcb the tcp_pcb_listen for which a segment arrived + * @return ERR_OK if the segment was processed + * another err_t on error + * + * @note the return value is not (yet?) used in tcp_input() + * @note the segment which arrived is saved in global variables, therefore only the pcb + * involved is passed as a parameter to this function + */ +static err_t +tcp_listen_input(struct tcp_pcb_listen *pcb) +{ + struct tcp_pcb *npcb; + err_t rc; + + /* In the LISTEN state, we check for incoming SYN segments, + creates a new PCB, and responds with a SYN|ACK. */ + if (flags & TCP_ACK) { + /* For incoming segments with the ACK flag set, respond with a + RST. */ + LWIP_DEBUGF(TCP_RST_DEBUG, ("tcp_listen_input: ACK in LISTEN, sending reset\n")); + tcp_rst(ackno + 1, seqno + tcplen, + &(iphdr->dest), &(iphdr->src), + tcphdr->dest, tcphdr->src); + } else if (flags & TCP_SYN) { + LWIP_DEBUGF(TCP_DEBUG, ("TCP connection request %"U16_F" -> %"U16_F".\n", tcphdr->src, tcphdr->dest)); +#if TCP_LISTEN_BACKLOG + if (pcb->accepts_pending >= pcb->backlog) { + LWIP_DEBUGF(TCP_DEBUG, ("tcp_listen_input: listen backlog exceeded for port %"U16_F"\n", tcphdr->dest)); + return ERR_ABRT; + } +#endif /* TCP_LISTEN_BACKLOG */ + npcb = tcp_alloc(pcb->prio); + /* If a new PCB could not be created (probably due to lack of memory), + we don't do anything, but rely on the sender will retransmit the + SYN at a time when we have more memory available. */ + if (npcb == NULL) { + LWIP_DEBUGF(TCP_DEBUG, ("tcp_listen_input: could not allocate PCB\n")); + TCP_STATS_INC(tcp.memerr); + return ERR_MEM; + } +#if TCP_LISTEN_BACKLOG + pcb->accepts_pending++; +#endif /* TCP_LISTEN_BACKLOG */ + /* Set up the new PCB. */ + ip_addr_set(&(npcb->local_ip), &(iphdr->dest)); + npcb->local_port = pcb->local_port; + ip_addr_set(&(npcb->remote_ip), &(iphdr->src)); + npcb->remote_port = tcphdr->src; + npcb->state = SYN_RCVD; + npcb->rcv_nxt = seqno + 1; + npcb->rcv_ann_right_edge = npcb->rcv_nxt; + npcb->snd_wnd = tcphdr->wnd; + npcb->ssthresh = npcb->snd_wnd; + npcb->snd_wl1 = seqno - 1;/* initialise to seqno-1 to force window update */ + npcb->callback_arg = pcb->callback_arg; +#if LWIP_CALLBACK_API + npcb->accept = pcb->accept; +#endif /* LWIP_CALLBACK_API */ + /* inherit socket options */ + npcb->so_options = pcb->so_options & (SOF_DEBUG|SOF_DONTROUTE|SOF_KEEPALIVE|SOF_OOBINLINE|SOF_LINGER); + /* Register the new PCB so that we can begin receiving segments + for it. */ + TCP_REG(&tcp_active_pcbs, npcb); + + /* Parse any options in the SYN. */ + tcp_parseopt(npcb); +#if TCP_CALCULATE_EFF_SEND_MSS + npcb->mss = tcp_eff_send_mss(npcb->mss, &(npcb->remote_ip)); +#endif /* TCP_CALCULATE_EFF_SEND_MSS */ + + snmp_inc_tcppassiveopens(); + + /* Send a SYN|ACK together with the MSS option. */ + rc = tcp_enqueue(npcb, NULL, 0, TCP_SYN | TCP_ACK, 0, TF_SEG_OPTS_MSS +#if LWIP_TCP_TIMESTAMPS + /* and maybe include the TIMESTAMP option */ + | (npcb->flags & TF_TIMESTAMP ? TF_SEG_OPTS_TS : 0) +#endif + ); + if (rc != ERR_OK) { + tcp_abandon(npcb, 0); + return rc; + } + return tcp_output(npcb); + } + return ERR_OK; +} + +/** + * Called by tcp_input() when a segment arrives for a connection in + * TIME_WAIT. + * + * @param pcb the tcp_pcb for which a segment arrived + * + * @note the segment which arrived is saved in global variables, therefore only the pcb + * involved is passed as a parameter to this function + */ +static err_t +tcp_timewait_input(struct tcp_pcb *pcb) +{ + /* RFC 1337: in TIME_WAIT, ignore RST and ACK FINs + any 'acceptable' segments */ + /* RFC 793 3.9 Event Processing - Segment Arrives: + * - first check sequence number - we skip that one in TIME_WAIT (always + * acceptable since we only send ACKs) + * - second check the RST bit (... return) */ + if (flags & TCP_RST) { + return ERR_OK; + } + /* - fourth, check the SYN bit, */ + if (flags & TCP_SYN) { + /* If an incoming segment is not acceptable, an acknowledgment + should be sent in reply */ + if (TCP_SEQ_BETWEEN(seqno, pcb->rcv_nxt, pcb->rcv_nxt+pcb->rcv_wnd)) { + /* If the SYN is in the window it is an error, send a reset */ + tcp_rst(ackno, seqno + tcplen, &(iphdr->dest), &(iphdr->src), + tcphdr->dest, tcphdr->src); + return ERR_OK; + } + } else if (flags & TCP_FIN) { + /* - eighth, check the FIN bit: Remain in the TIME-WAIT state. + Restart the 2 MSL time-wait timeout.*/ + pcb->tmr = tcp_ticks; + } + + if ((tcplen > 0)) { + /* Acknowledge data, FIN or out-of-window SYN */ + pcb->flags |= TF_ACK_NOW; + return tcp_output(pcb); + } + return ERR_OK; +} + +/** + * Implements the TCP state machine. Called by tcp_input. In some + * states tcp_receive() is called to receive data. The tcp_seg + * argument will be freed by the caller (tcp_input()) unless the + * recv_data pointer in the pcb is set. + * + * @param pcb the tcp_pcb for which a segment arrived + * + * @note the segment which arrived is saved in global variables, therefore only the pcb + * involved is passed as a parameter to this function + */ +static err_t +tcp_process(struct tcp_pcb *pcb) +{ + struct tcp_seg *rseg; + u8_t acceptable = 0; + err_t err; + + err = ERR_OK; + + /* Process incoming RST segments. */ + if (flags & TCP_RST) { + /* First, determine if the reset is acceptable. */ + if (pcb->state == SYN_SENT) { + if (ackno == pcb->snd_nxt) { + acceptable = 1; + } + } else { + if (TCP_SEQ_BETWEEN(seqno, pcb->rcv_nxt, + pcb->rcv_nxt+pcb->rcv_wnd)) { + acceptable = 1; + } + } + + if (acceptable) { + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_process: Connection RESET\n")); + LWIP_ASSERT("tcp_input: pcb->state != CLOSED", pcb->state != CLOSED); + recv_flags |= TF_RESET; + pcb->flags &= ~TF_ACK_DELAY; + return ERR_RST; + } else { + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_process: unacceptable reset seqno %"U32_F" rcv_nxt %"U32_F"\n", + seqno, pcb->rcv_nxt)); + LWIP_DEBUGF(TCP_DEBUG, ("tcp_process: unacceptable reset seqno %"U32_F" rcv_nxt %"U32_F"\n", + seqno, pcb->rcv_nxt)); + return ERR_OK; + } + } + + if ((flags & TCP_SYN) && (pcb->state != SYN_SENT && pcb->state != SYN_RCVD)) { + /* Cope with new connection attempt after remote end crashed */ + tcp_ack_now(pcb); + return ERR_OK; + } + + /* Update the PCB (in)activity timer. */ + pcb->tmr = tcp_ticks; + pcb->keep_cnt_sent = 0; + + tcp_parseopt(pcb); + + /* Do different things depending on the TCP state. */ + switch (pcb->state) { + case SYN_SENT: + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("SYN-SENT: ackno %"U32_F" pcb->snd_nxt %"U32_F" unacked %"U32_F"\n", ackno, + pcb->snd_nxt, ntohl(pcb->unacked->tcphdr->seqno))); + /* received SYN ACK with expected sequence number? */ + if ((flags & TCP_ACK) && (flags & TCP_SYN) + && ackno == ntohl(pcb->unacked->tcphdr->seqno) + 1) { + pcb->snd_buf++; + pcb->rcv_nxt = seqno + 1; + pcb->rcv_ann_right_edge = pcb->rcv_nxt; + pcb->lastack = ackno; + pcb->snd_wnd = tcphdr->wnd; + pcb->snd_wl1 = seqno - 1; /* initialise to seqno - 1 to force window update */ + pcb->state = ESTABLISHED; + +#if TCP_CALCULATE_EFF_SEND_MSS + pcb->mss = tcp_eff_send_mss(pcb->mss, &(pcb->remote_ip)); +#endif /* TCP_CALCULATE_EFF_SEND_MSS */ + + /* Set ssthresh again after changing pcb->mss (already set in tcp_connect + * but for the default value of pcb->mss) */ + pcb->ssthresh = pcb->mss * 10; + + pcb->cwnd = ((pcb->cwnd == 1) ? (pcb->mss * 2) : pcb->mss); + LWIP_ASSERT("pcb->snd_queuelen > 0", (pcb->snd_queuelen > 0)); + --pcb->snd_queuelen; + LWIP_DEBUGF(TCP_QLEN_DEBUG, ("tcp_process: SYN-SENT --queuelen %"U16_F"\n", (u16_t)pcb->snd_queuelen)); + rseg = pcb->unacked; + pcb->unacked = rseg->next; + + /* If there's nothing left to acknowledge, stop the retransmit + timer, otherwise reset it to start again */ + if(pcb->unacked == NULL) + pcb->rtime = -1; + else { + pcb->rtime = 0; + pcb->nrtx = 0; + } + + tcp_seg_free(rseg); + + /* Call the user specified function to call when sucessfully + * connected. */ + TCP_EVENT_CONNECTED(pcb, ERR_OK, err); + tcp_ack_now(pcb); + } + /* received ACK? possibly a half-open connection */ + else if (flags & TCP_ACK) { + /* send a RST to bring the other side in a non-synchronized state. */ + tcp_rst(ackno, seqno + tcplen, &(iphdr->dest), &(iphdr->src), + tcphdr->dest, tcphdr->src); + } + break; + case SYN_RCVD: + if (flags & TCP_ACK) { + /* expected ACK number? */ + if (TCP_SEQ_BETWEEN(ackno, pcb->lastack+1, pcb->snd_nxt)) { + u16_t old_cwnd; + pcb->state = ESTABLISHED; + LWIP_DEBUGF(TCP_DEBUG, ("TCP connection established %"U16_F" -> %"U16_F".\n", inseg.tcphdr->src, inseg.tcphdr->dest)); +#if LWIP_CALLBACK_API + LWIP_ASSERT("pcb->accept != NULL", pcb->accept != NULL); +#endif + /* Call the accept function. */ + TCP_EVENT_ACCEPT(pcb, ERR_OK, err); + if (err != ERR_OK) { + /* If the accept function returns with an error, we abort + * the connection. */ + tcp_abort(pcb); + return ERR_ABRT; + } + old_cwnd = pcb->cwnd; + /* If there was any data contained within this ACK, + * we'd better pass it on to the application as well. */ + tcp_receive(pcb); + + /* Prevent ACK for SYN to generate a sent event */ + if (pcb->acked != 0) { + pcb->acked--; + } + + pcb->cwnd = ((old_cwnd == 1) ? (pcb->mss * 2) : pcb->mss); + + if (recv_flags & TF_GOT_FIN) { + tcp_ack_now(pcb); + pcb->state = CLOSE_WAIT; + } + } + /* incorrect ACK number */ + else { + /* send RST */ + tcp_rst(ackno, seqno + tcplen, &(iphdr->dest), &(iphdr->src), + tcphdr->dest, tcphdr->src); + } + } else if ((flags & TCP_SYN) && (seqno == pcb->rcv_nxt - 1)) { + /* Looks like another copy of the SYN - retransmit our SYN-ACK */ + tcp_rexmit(pcb); + } + break; + case CLOSE_WAIT: + /* FALLTHROUGH */ + case ESTABLISHED: + tcp_receive(pcb); + if (recv_flags & TF_GOT_FIN) { /* passive close */ + tcp_ack_now(pcb); + pcb->state = CLOSE_WAIT; + } + break; + case FIN_WAIT_1: + tcp_receive(pcb); + if (recv_flags & TF_GOT_FIN) { + if ((flags & TCP_ACK) && (ackno == pcb->snd_nxt)) { + LWIP_DEBUGF(TCP_DEBUG, + ("TCP connection closed: FIN_WAIT_1 %"U16_F" -> %"U16_F".\n", inseg.tcphdr->src, inseg.tcphdr->dest)); + tcp_ack_now(pcb); + tcp_pcb_purge(pcb); + TCP_RMV(&tcp_active_pcbs, pcb); + pcb->state = TIME_WAIT; + TCP_REG(&tcp_tw_pcbs, pcb); + } else { + tcp_ack_now(pcb); + pcb->state = CLOSING; + } + } else if ((flags & TCP_ACK) && (ackno == pcb->snd_nxt)) { + pcb->state = FIN_WAIT_2; + } + break; + case FIN_WAIT_2: + tcp_receive(pcb); + if (recv_flags & TF_GOT_FIN) { + LWIP_DEBUGF(TCP_DEBUG, ("TCP connection closed: FIN_WAIT_2 %"U16_F" -> %"U16_F".\n", inseg.tcphdr->src, inseg.tcphdr->dest)); + tcp_ack_now(pcb); + tcp_pcb_purge(pcb); + TCP_RMV(&tcp_active_pcbs, pcb); + pcb->state = TIME_WAIT; + TCP_REG(&tcp_tw_pcbs, pcb); + } + break; + case CLOSING: + tcp_receive(pcb); + if (flags & TCP_ACK && ackno == pcb->snd_nxt) { + LWIP_DEBUGF(TCP_DEBUG, ("TCP connection closed: CLOSING %"U16_F" -> %"U16_F".\n", inseg.tcphdr->src, inseg.tcphdr->dest)); + tcp_pcb_purge(pcb); + TCP_RMV(&tcp_active_pcbs, pcb); + pcb->state = TIME_WAIT; + TCP_REG(&tcp_tw_pcbs, pcb); + } + break; + case LAST_ACK: + tcp_receive(pcb); + if (flags & TCP_ACK && ackno == pcb->snd_nxt) { + LWIP_DEBUGF(TCP_DEBUG, ("TCP connection closed: LAST_ACK %"U16_F" -> %"U16_F".\n", inseg.tcphdr->src, inseg.tcphdr->dest)); + /* bugfix #21699: don't set pcb->state to CLOSED here or we risk leaking segments */ + recv_flags |= TF_CLOSED; + } + break; + default: + break; + } + return ERR_OK; +} + +#if TCP_QUEUE_OOSEQ +/** + * Insert segment into the list (segments covered with new one will be deleted) + * + * Called from tcp_receive() + */ +static void +tcp_oos_insert_segment(struct tcp_seg *cseg, struct tcp_seg *next) +{ + struct tcp_seg *old_seg; + + if (TCPH_FLAGS(cseg->tcphdr) & TCP_FIN) { + /* received segment overlaps all following segments */ + tcp_segs_free(next); + next = NULL; + } + else { + /* delete some following segments + oos queue may have segments with FIN flag */ + while (next && + TCP_SEQ_GEQ((seqno + cseg->len), + (next->tcphdr->seqno + next->len))) { + /* cseg with FIN already processed */ + if (TCPH_FLAGS(next->tcphdr) & TCP_FIN) { + TCPH_FLAGS_SET(cseg->tcphdr, TCPH_FLAGS(cseg->tcphdr) | TCP_FIN); + } + old_seg = next; + next = next->next; + tcp_seg_free(old_seg); + } + if (next && + TCP_SEQ_GT(seqno + cseg->len, next->tcphdr->seqno)) { + /* We need to trim the incoming segment. */ + cseg->len = (u16_t)(next->tcphdr->seqno - seqno); + pbuf_realloc(cseg->p, cseg->len); + } + } + cseg->next = next; +} +#endif + +/** + * Called by tcp_process. Checks if the given segment is an ACK for outstanding + * data, and if so frees the memory of the buffered data. Next, is places the + * segment on any of the receive queues (pcb->recved or pcb->ooseq). If the segment + * is buffered, the pbuf is referenced by pbuf_ref so that it will not be freed until + * i it has been removed from the buffer. + * + * If the incoming segment constitutes an ACK for a segment that was used for RTT + * estimation, the RTT is estimated here as well. + * + * Called from tcp_process(). + */ +static void +tcp_receive(struct tcp_pcb *pcb) +{ + struct tcp_seg *next; +#if TCP_QUEUE_OOSEQ + struct tcp_seg *prev, *cseg; +#endif + struct pbuf *p; + s32_t off; + s16_t m; + u32_t right_wnd_edge; + u16_t new_tot_len; + int found_dupack = 0; + + if (flags & TCP_ACK) { + right_wnd_edge = pcb->snd_wnd + pcb->snd_wl2; + + /* Update window. */ + if (TCP_SEQ_LT(pcb->snd_wl1, seqno) || + (pcb->snd_wl1 == seqno && TCP_SEQ_LT(pcb->snd_wl2, ackno)) || + (pcb->snd_wl2 == ackno && tcphdr->wnd > pcb->snd_wnd)) { + pcb->snd_wnd = tcphdr->wnd; + pcb->snd_wl1 = seqno; + pcb->snd_wl2 = ackno; + if (pcb->snd_wnd > 0 && pcb->persist_backoff > 0) { + pcb->persist_backoff = 0; + } + LWIP_DEBUGF(TCP_WND_DEBUG, ("tcp_receive: window update %"U16_F"\n", pcb->snd_wnd)); +#if TCP_WND_DEBUG + } else { + if (pcb->snd_wnd != tcphdr->wnd) { + LWIP_DEBUGF(TCP_WND_DEBUG, + ("tcp_receive: no window update lastack %"U32_F" ackno %" + U32_F" wl1 %"U32_F" seqno %"U32_F" wl2 %"U32_F"\n", + pcb->lastack, ackno, pcb->snd_wl1, seqno, pcb->snd_wl2)); + } +#endif /* TCP_WND_DEBUG */ + } + + /* (From Stevens TCP/IP Illustrated Vol II, p970.) Its only a + * duplicate ack if: + * 1) It doesn't ACK new data + * 2) length of received packet is zero (i.e. no payload) + * 3) the advertised window hasn't changed + * 4) There is outstanding unacknowledged data (retransmission timer running) + * 5) The ACK is == biggest ACK sequence number so far seen (snd_una) + * + * If it passes all five, should process as a dupack: + * a) dupacks < 3: do nothing + * b) dupacks == 3: fast retransmit + * c) dupacks > 3: increase cwnd + * + * If it only passes 1-3, should reset dupack counter (and add to + * stats, which we don't do in lwIP) + * + * If it only passes 1, should reset dupack counter + * + */ + + /* Clause 1 */ + if (TCP_SEQ_LEQ(ackno, pcb->lastack)) { + pcb->acked = 0; + /* Clause 2 */ + if (tcplen == 0) { + /* Clause 3 */ + if (pcb->snd_wl2 + pcb->snd_wnd == right_wnd_edge){ + /* Clause 4 */ + if (pcb->rtime >= 0) { + /* Clause 5 */ + if (pcb->lastack == ackno) { + found_dupack = 1; + if (pcb->dupacks + 1 > pcb->dupacks) + ++pcb->dupacks; + if (pcb->dupacks > 3) { + /* Inflate the congestion window, but not if it means that + the value overflows. */ + if ((u16_t)(pcb->cwnd + pcb->mss) > pcb->cwnd) { + pcb->cwnd += pcb->mss; + } + } else if (pcb->dupacks == 3) { + /* Do fast retransmit */ + tcp_rexmit_fast(pcb); + } + } + } + } + } + /* If Clause (1) or more is true, but not a duplicate ack, reset + * count of consecutive duplicate acks */ + if (!found_dupack) { + pcb->dupacks = 0; + } + } else if (TCP_SEQ_BETWEEN(ackno, pcb->lastack+1, pcb->snd_nxt)){ + /* We come here when the ACK acknowledges new data. */ + + /* Reset the "IN Fast Retransmit" flag, since we are no longer + in fast retransmit. Also reset the congestion window to the + slow start threshold. */ + if (pcb->flags & TF_INFR) { + pcb->flags &= ~TF_INFR; + pcb->cwnd = pcb->ssthresh; + } + + /* Reset the number of retransmissions. */ + pcb->nrtx = 0; + + /* Reset the retransmission time-out. */ + pcb->rto = (pcb->sa >> 3) + pcb->sv; + + /* Update the send buffer space. Diff between the two can never exceed 64K? */ + pcb->acked = (u16_t)(ackno - pcb->lastack); + + pcb->snd_buf += pcb->acked; + + /* Reset the fast retransmit variables. */ + pcb->dupacks = 0; + pcb->lastack = ackno; + + /* Update the congestion control variables (cwnd and + ssthresh). */ + if (pcb->state >= ESTABLISHED) { + if (pcb->cwnd < pcb->ssthresh) { + if ((u16_t)(pcb->cwnd + pcb->mss) > pcb->cwnd) { + pcb->cwnd += pcb->mss; + } + LWIP_DEBUGF(TCP_CWND_DEBUG, ("tcp_receive: slow start cwnd %"U16_F"\n", pcb->cwnd)); + } else { + u16_t new_cwnd = (pcb->cwnd + pcb->mss * pcb->mss / pcb->cwnd); + if (new_cwnd > pcb->cwnd) { + pcb->cwnd = new_cwnd; + } + LWIP_DEBUGF(TCP_CWND_DEBUG, ("tcp_receive: congestion avoidance cwnd %"U16_F"\n", pcb->cwnd)); + } + } + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_receive: ACK for %"U32_F", unacked->seqno %"U32_F":%"U32_F"\n", + ackno, + pcb->unacked != NULL? + ntohl(pcb->unacked->tcphdr->seqno): 0, + pcb->unacked != NULL? + ntohl(pcb->unacked->tcphdr->seqno) + TCP_TCPLEN(pcb->unacked): 0)); + + /* Remove segment from the unacknowledged list if the incoming + ACK acknowlegdes them. */ + while (pcb->unacked != NULL && + TCP_SEQ_LEQ(ntohl(pcb->unacked->tcphdr->seqno) + + TCP_TCPLEN(pcb->unacked), ackno)) { + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_receive: removing %"U32_F":%"U32_F" from pcb->unacked\n", + ntohl(pcb->unacked->tcphdr->seqno), + ntohl(pcb->unacked->tcphdr->seqno) + + TCP_TCPLEN(pcb->unacked))); + + next = pcb->unacked; + pcb->unacked = pcb->unacked->next; + + LWIP_DEBUGF(TCP_QLEN_DEBUG, ("tcp_receive: queuelen %"U16_F" ... ", (u16_t)pcb->snd_queuelen)); + LWIP_ASSERT("pcb->snd_queuelen >= pbuf_clen(next->p)", (pcb->snd_queuelen >= pbuf_clen(next->p))); + /* Prevent ACK for FIN to generate a sent event */ + if ((pcb->acked != 0) && ((TCPH_FLAGS(next->tcphdr) & TCP_FIN) != 0)) { + pcb->acked--; + } + + pcb->snd_queuelen -= pbuf_clen(next->p); + tcp_seg_free(next); + + LWIP_DEBUGF(TCP_QLEN_DEBUG, ("%"U16_F" (after freeing unacked)\n", (u16_t)pcb->snd_queuelen)); + if (pcb->snd_queuelen != 0) { + LWIP_ASSERT("tcp_receive: valid queue length", pcb->unacked != NULL || + pcb->unsent != NULL); + } + } + + /* If there's nothing left to acknowledge, stop the retransmit + timer, otherwise reset it to start again */ + if(pcb->unacked == NULL) + pcb->rtime = -1; + else + pcb->rtime = 0; + + pcb->polltmr = 0; + } else { + /* Fix bug bug #21582: out of sequence ACK, didn't really ack anything */ + pcb->acked = 0; + } + + /* We go through the ->unsent list to see if any of the segments + on the list are acknowledged by the ACK. This may seem + strange since an "unsent" segment shouldn't be acked. The + rationale is that lwIP puts all outstanding segments on the + ->unsent list after a retransmission, so these segments may + in fact have been sent once. */ + while (pcb->unsent != NULL && + TCP_SEQ_BETWEEN(ackno, ntohl(pcb->unsent->tcphdr->seqno) + + TCP_TCPLEN(pcb->unsent), pcb->snd_nxt)) { + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_receive: removing %"U32_F":%"U32_F" from pcb->unsent\n", + ntohl(pcb->unsent->tcphdr->seqno), ntohl(pcb->unsent->tcphdr->seqno) + + TCP_TCPLEN(pcb->unsent))); + + next = pcb->unsent; + pcb->unsent = pcb->unsent->next; + LWIP_DEBUGF(TCP_QLEN_DEBUG, ("tcp_receive: queuelen %"U16_F" ... ", (u16_t)pcb->snd_queuelen)); + LWIP_ASSERT("pcb->snd_queuelen >= pbuf_clen(next->p)", (pcb->snd_queuelen >= pbuf_clen(next->p))); + /* Prevent ACK for FIN to generate a sent event */ + if ((pcb->acked != 0) && ((TCPH_FLAGS(next->tcphdr) & TCP_FIN) != 0)) { + pcb->acked--; + } + pcb->snd_queuelen -= pbuf_clen(next->p); + tcp_seg_free(next); + LWIP_DEBUGF(TCP_QLEN_DEBUG, ("%"U16_F" (after freeing unsent)\n", (u16_t)pcb->snd_queuelen)); + if (pcb->snd_queuelen != 0) { + LWIP_ASSERT("tcp_receive: valid queue length", + pcb->unacked != NULL || pcb->unsent != NULL); + } + } + /* End of ACK for new data processing. */ + + LWIP_DEBUGF(TCP_RTO_DEBUG, ("tcp_receive: pcb->rttest %"U32_F" rtseq %"U32_F" ackno %"U32_F"\n", + pcb->rttest, pcb->rtseq, ackno)); + + /* RTT estimation calculations. This is done by checking if the + incoming segment acknowledges the segment we use to take a + round-trip time measurement. */ + if (pcb->rttest && TCP_SEQ_LT(pcb->rtseq, ackno)) { + /* diff between this shouldn't exceed 32K since this are tcp timer ticks + and a round-trip shouldn't be that long... */ + m = (s16_t)(tcp_ticks - pcb->rttest); + + LWIP_DEBUGF(TCP_RTO_DEBUG, ("tcp_receive: experienced rtt %"U16_F" ticks (%"U16_F" msec).\n", + m, m * TCP_SLOW_INTERVAL)); + + /* This is taken directly from VJs original code in his paper */ + m = m - (pcb->sa >> 3); + pcb->sa += m; + if (m < 0) { + m = -m; + } + m = m - (pcb->sv >> 2); + pcb->sv += m; + pcb->rto = (pcb->sa >> 3) + pcb->sv; + + LWIP_DEBUGF(TCP_RTO_DEBUG, ("tcp_receive: RTO %"U16_F" (%"U16_F" milliseconds)\n", + pcb->rto, pcb->rto * TCP_SLOW_INTERVAL)); + + pcb->rttest = 0; + } + } + + /* If the incoming segment contains data, we must process it + further. */ + if (tcplen > 0) { + /* This code basically does three things: + + +) If the incoming segment contains data that is the next + in-sequence data, this data is passed to the application. This + might involve trimming the first edge of the data. The rcv_nxt + variable and the advertised window are adjusted. + + +) If the incoming segment has data that is above the next + sequence number expected (->rcv_nxt), the segment is placed on + the ->ooseq queue. This is done by finding the appropriate + place in the ->ooseq queue (which is ordered by sequence + number) and trim the segment in both ends if needed. An + immediate ACK is sent to indicate that we received an + out-of-sequence segment. + + +) Finally, we check if the first segment on the ->ooseq queue + now is in sequence (i.e., if rcv_nxt >= ooseq->seqno). If + rcv_nxt > ooseq->seqno, we must trim the first edge of the + segment on ->ooseq before we adjust rcv_nxt. The data in the + segments that are now on sequence are chained onto the + incoming segment so that we only need to call the application + once. + */ + + /* First, we check if we must trim the first edge. We have to do + this if the sequence number of the incoming segment is less + than rcv_nxt, and the sequence number plus the length of the + segment is larger than rcv_nxt. */ + /* if (TCP_SEQ_LT(seqno, pcb->rcv_nxt)){ + if (TCP_SEQ_LT(pcb->rcv_nxt, seqno + tcplen)) {*/ + if (TCP_SEQ_BETWEEN(pcb->rcv_nxt, seqno + 1, seqno + tcplen - 1)){ + /* Trimming the first edge is done by pushing the payload + pointer in the pbuf downwards. This is somewhat tricky since + we do not want to discard the full contents of the pbuf up to + the new starting point of the data since we have to keep the + TCP header which is present in the first pbuf in the chain. + + What is done is really quite a nasty hack: the first pbuf in + the pbuf chain is pointed to by inseg.p. Since we need to be + able to deallocate the whole pbuf, we cannot change this + inseg.p pointer to point to any of the later pbufs in the + chain. Instead, we point the ->payload pointer in the first + pbuf to data in one of the later pbufs. We also set the + inseg.data pointer to point to the right place. This way, the + ->p pointer will still point to the first pbuf, but the + ->p->payload pointer will point to data in another pbuf. + + After we are done with adjusting the pbuf pointers we must + adjust the ->data pointer in the seg and the segment + length.*/ + + off = pcb->rcv_nxt - seqno; + p = inseg.p; + LWIP_ASSERT("inseg.p != NULL", inseg.p); + LWIP_ASSERT("insane offset!", (off < 0x7fff)); + if (inseg.p->len < off) { + LWIP_ASSERT("pbuf too short!", (((s32_t)inseg.p->tot_len) >= off)); + new_tot_len = (u16_t)(inseg.p->tot_len - off); + while (p->len < off) { + off -= p->len; + /* KJM following line changed (with addition of new_tot_len var) + to fix bug #9076 + inseg.p->tot_len -= p->len; */ + p->tot_len = new_tot_len; + p->len = 0; + p = p->next; + } + if(pbuf_header(p, (s16_t)-off)) { + /* Do we need to cope with this failing? Assert for now */ + LWIP_ASSERT("pbuf_header failed", 0); + } + } else { + if(pbuf_header(inseg.p, (s16_t)-off)) { + /* Do we need to cope with this failing? Assert for now */ + LWIP_ASSERT("pbuf_header failed", 0); + } + } + /* KJM following line changed to use p->payload rather than inseg->p->payload + to fix bug #9076 */ + inseg.dataptr = p->payload; + inseg.len -= (u16_t)(pcb->rcv_nxt - seqno); + inseg.tcphdr->seqno = seqno = pcb->rcv_nxt; + } + else { + if (TCP_SEQ_LT(seqno, pcb->rcv_nxt)){ + /* the whole segment is < rcv_nxt */ + /* must be a duplicate of a packet that has already been correctly handled */ + + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_receive: duplicate seqno %"U32_F"\n", seqno)); + tcp_ack_now(pcb); + } + } + + /* The sequence number must be within the window (above rcv_nxt + and below rcv_nxt + rcv_wnd) in order to be further + processed. */ + if (TCP_SEQ_BETWEEN(seqno, pcb->rcv_nxt, + pcb->rcv_nxt + pcb->rcv_wnd - 1)){ + if (pcb->rcv_nxt == seqno) { + /* The incoming segment is the next in sequence. We check if + we have to trim the end of the segment and update rcv_nxt + and pass the data to the application. */ + tcplen = TCP_TCPLEN(&inseg); + + if (tcplen > pcb->rcv_wnd) { + LWIP_DEBUGF(TCP_INPUT_DEBUG, + ("tcp_receive: other end overran receive window" + "seqno %"U32_F" len %"U32_F" right edge %"U32_F"\n", + seqno, tcplen, pcb->rcv_nxt + pcb->rcv_wnd)); + if (TCPH_FLAGS(inseg.tcphdr) & TCP_FIN) { + /* Must remove the FIN from the header as we're trimming + * that byte of sequence-space from the packet */ + TCPH_FLAGS_SET(inseg.tcphdr, TCPH_FLAGS(inseg.tcphdr) &~ TCP_FIN); + } + /* Adjust length of segment to fit in the window. */ + inseg.len = pcb->rcv_wnd; + if (TCPH_FLAGS(inseg.tcphdr) & TCP_SYN) { + inseg.len -= 1; + } + pbuf_realloc(inseg.p, inseg.len); + tcplen = TCP_TCPLEN(&inseg); + LWIP_ASSERT("tcp_receive: segment not trimmed correctly to rcv_wnd\n", + (seqno + tcplen) == (pcb->rcv_nxt + pcb->rcv_wnd)); + } +#if TCP_QUEUE_OOSEQ + if (pcb->ooseq != NULL) { + if (TCPH_FLAGS(inseg.tcphdr) & TCP_FIN) { + LWIP_DEBUGF(TCP_INPUT_DEBUG, + ("tcp_receive: received in-order FIN, binning ooseq queue\n")); + /* Received in-order FIN means anything that was received + * out of order must now have been received in-order, so + * bin the ooseq queue + * rcv_nxt + * . |--ooseq--| + * .==seg============|FIN + */ + while (pcb->ooseq != NULL) { + struct tcp_seg *old_ooseq = pcb->ooseq; + pcb->ooseq = pcb->ooseq->next; + tcp_seg_free(old_ooseq); + } + } + else { + struct tcp_seg* next = pcb->ooseq; + struct tcp_seg *old_seg; + /* rcv_nxt + * . |--ooseq--| + * .==seg============| + */ + while (next && + TCP_SEQ_GEQ(seqno + tcplen, + next->tcphdr->seqno + next->len)) { + /* inseg doesn't have FIN (already processed) */ + if (TCPH_FLAGS(next->tcphdr) & TCP_FIN && + (TCPH_FLAGS(inseg.tcphdr) & TCP_SYN) == 0) { + TCPH_FLAGS_SET(inseg.tcphdr, + TCPH_FLAGS(inseg.tcphdr) | TCP_FIN); + tcplen = TCP_TCPLEN(&inseg); + } + old_seg = next; + next = next->next; + tcp_seg_free(old_seg); + } + /* rcv_nxt + * . |--ooseq--| + * .==seg============| + */ + if (next && + TCP_SEQ_GT(seqno + tcplen, + next->tcphdr->seqno)) { + /* FIN in inseg already handled by dropping whole ooseq queue */ + inseg.len = (u16_t)(pcb->ooseq->tcphdr->seqno - seqno); + if (TCPH_FLAGS(inseg.tcphdr) & TCP_SYN) { + inseg.len -= 1; + } + pbuf_realloc(inseg.p, inseg.len); + tcplen = TCP_TCPLEN(&inseg); + LWIP_ASSERT("tcp_receive: segment not trimmed correctly to ooseq queue\n", + (seqno + tcplen) == pcb->ooseq->tcphdr->seqno); + } + pcb->ooseq = next; + } + } +#endif /* TCP_QUEUE_OOSEQ */ + + pcb->rcv_nxt = seqno + tcplen; + + /* Update the receiver's (our) window. */ + LWIP_ASSERT("tcp_receive: tcplen > rcv_wnd\n", pcb->rcv_wnd >= tcplen); + pcb->rcv_wnd -= tcplen; + + tcp_update_rcv_ann_wnd(pcb); + + /* If there is data in the segment, we make preparations to + pass this up to the application. The ->recv_data variable + is used for holding the pbuf that goes to the + application. The code for reassembling out-of-sequence data + chains its data on this pbuf as well. + + If the segment was a FIN, we set the TF_GOT_FIN flag that will + be used to indicate to the application that the remote side has + closed its end of the connection. */ + if (inseg.p->tot_len > 0) { + recv_data = inseg.p; + /* Since this pbuf now is the responsibility of the + application, we delete our reference to it so that we won't + (mistakingly) deallocate it. */ + inseg.p = NULL; + } + if (TCPH_FLAGS(inseg.tcphdr) & TCP_FIN) { + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_receive: received FIN.\n")); + recv_flags |= TF_GOT_FIN; + } + +#if TCP_QUEUE_OOSEQ + /* We now check if we have segments on the ->ooseq queue that + is now in sequence. */ + while (pcb->ooseq != NULL && + pcb->ooseq->tcphdr->seqno == pcb->rcv_nxt) { + + cseg = pcb->ooseq; + seqno = pcb->ooseq->tcphdr->seqno; + + pcb->rcv_nxt += TCP_TCPLEN(cseg); + LWIP_ASSERT("tcp_receive: ooseq tcplen > rcv_wnd\n", + pcb->rcv_wnd >= TCP_TCPLEN(cseg)); + pcb->rcv_wnd -= TCP_TCPLEN(cseg); + + tcp_update_rcv_ann_wnd(pcb); + + if (cseg->p->tot_len > 0) { + /* Chain this pbuf onto the pbuf that we will pass to + the application. */ + if (recv_data) { + pbuf_cat(recv_data, cseg->p); + } else { + recv_data = cseg->p; + } + cseg->p = NULL; + } + if (TCPH_FLAGS(cseg->tcphdr) & TCP_FIN) { + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_receive: dequeued FIN.\n")); + recv_flags |= TF_GOT_FIN; + if (pcb->state == ESTABLISHED) { /* force passive close or we can move to active close */ + pcb->state = CLOSE_WAIT; + } + } + + pcb->ooseq = cseg->next; + tcp_seg_free(cseg); + } +#endif /* TCP_QUEUE_OOSEQ */ + + + /* Acknowledge the segment(s). */ + tcp_ack(pcb); + + } else { + /* We get here if the incoming segment is out-of-sequence. */ + tcp_send_empty_ack(pcb); +#if TCP_QUEUE_OOSEQ + /* We queue the segment on the ->ooseq queue. */ + if (pcb->ooseq == NULL) { + pcb->ooseq = tcp_seg_copy(&inseg); + } else { + /* If the queue is not empty, we walk through the queue and + try to find a place where the sequence number of the + incoming segment is between the sequence numbers of the + previous and the next segment on the ->ooseq queue. That is + the place where we put the incoming segment. If needed, we + trim the second edges of the previous and the incoming + segment so that it will fit into the sequence. + + If the incoming segment has the same sequence number as a + segment on the ->ooseq queue, we discard the segment that + contains less data. */ + + prev = NULL; + for(next = pcb->ooseq; next != NULL; next = next->next) { + if (seqno == next->tcphdr->seqno) { + /* The sequence number of the incoming segment is the + same as the sequence number of the segment on + ->ooseq. We check the lengths to see which one to + discard. */ + if (inseg.len > next->len) { + /* The incoming segment is larger than the old + segment. We replace some segments with the new + one. */ + cseg = tcp_seg_copy(&inseg); + if (cseg != NULL) { + if (prev != NULL) { + prev->next = cseg; + } else { + pcb->ooseq = cseg; + } + tcp_oos_insert_segment(cseg, next); + } + break; + } else { + /* Either the lenghts are the same or the incoming + segment was smaller than the old one; in either + case, we ditch the incoming segment. */ + break; + } + } else { + if (prev == NULL) { + if (TCP_SEQ_LT(seqno, next->tcphdr->seqno)) { + /* The sequence number of the incoming segment is lower + than the sequence number of the first segment on the + queue. We put the incoming segment first on the + queue. */ + cseg = tcp_seg_copy(&inseg); + if (cseg != NULL) { + pcb->ooseq = cseg; + tcp_oos_insert_segment(cseg, next); + } + break; + } + } else { + /*if (TCP_SEQ_LT(prev->tcphdr->seqno, seqno) && + TCP_SEQ_LT(seqno, next->tcphdr->seqno)) {*/ + if (TCP_SEQ_BETWEEN(seqno, prev->tcphdr->seqno+1, next->tcphdr->seqno-1)) { + /* The sequence number of the incoming segment is in + between the sequence numbers of the previous and + the next segment on ->ooseq. We trim trim the previous + segment, delete next segments that included in received segment + and trim received, if needed. */ + cseg = tcp_seg_copy(&inseg); + if (cseg != NULL) { + if (TCP_SEQ_GT(prev->tcphdr->seqno + prev->len, seqno)) { + /* We need to trim the prev segment. */ + prev->len = (u16_t)(seqno - prev->tcphdr->seqno); + pbuf_realloc(prev->p, prev->len); + } + prev->next = cseg; + tcp_oos_insert_segment(cseg, next); + } + break; + } + } + /* If the "next" segment is the last segment on the + ooseq queue, we add the incoming segment to the end + of the list. */ + if (next->next == NULL && + TCP_SEQ_GT(seqno, next->tcphdr->seqno)) { + if (TCPH_FLAGS(next->tcphdr) & TCP_FIN) { + /* segment "next" already contains all data */ + break; + } + next->next = tcp_seg_copy(&inseg); + if (next->next != NULL) { + if (TCP_SEQ_GT(next->tcphdr->seqno + next->len, seqno)) { + /* We need to trim the last segment. */ + next->len = (u16_t)(seqno - next->tcphdr->seqno); + pbuf_realloc(next->p, next->len); + } + } + break; + } + } + prev = next; + } + } +#endif /* TCP_QUEUE_OOSEQ */ + + } + } else { + /* The incoming segment is not withing the window. */ + tcp_send_empty_ack(pcb); + } + } else { + /* Segments with length 0 is taken care of here. Segments that + fall out of the window are ACKed. */ + /*if (TCP_SEQ_GT(pcb->rcv_nxt, seqno) || + TCP_SEQ_GEQ(seqno, pcb->rcv_nxt + pcb->rcv_wnd)) {*/ + if(!TCP_SEQ_BETWEEN(seqno, pcb->rcv_nxt, pcb->rcv_nxt + pcb->rcv_wnd-1)){ + tcp_ack_now(pcb); + } + } +} + +/** + * Parses the options contained in the incoming segment. + * + * Called from tcp_listen_input() and tcp_process(). + * Currently, only the MSS option is supported! + * + * @param pcb the tcp_pcb for which a segment arrived + */ +static void +tcp_parseopt(struct tcp_pcb *pcb) +{ + u16_t c, max_c; + u16_t mss; + u8_t *opts, opt; +#if LWIP_TCP_TIMESTAMPS + u32_t tsval; +#endif + + opts = (u8_t *)tcphdr + TCP_HLEN; + + /* Parse the TCP MSS option, if present. */ + if(TCPH_HDRLEN(tcphdr) > 0x5) { + max_c = (TCPH_HDRLEN(tcphdr) - 5) << 2; + for (c = 0; c < max_c; ) { + opt = opts[c]; + switch (opt) { + case 0x00: + /* End of options. */ + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_parseopt: EOL\n")); + return; + case 0x01: + /* NOP option. */ + ++c; + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_parseopt: NOP\n")); + break; + case 0x02: + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_parseopt: MSS\n")); + if (opts[c + 1] != 0x04 || c + 0x04 > max_c) { + /* Bad length */ + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_parseopt: bad length\n")); + return; + } + /* An MSS option with the right option length. */ + mss = (opts[c + 2] << 8) | opts[c + 3]; + /* Limit the mss to the configured TCP_MSS and prevent division by zero */ + pcb->mss = ((mss > TCP_MSS) || (mss == 0)) ? TCP_MSS : mss; + /* Advance to next option */ + c += 0x04; + break; +#if LWIP_TCP_TIMESTAMPS + case 0x08: + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_parseopt: TS\n")); + if (opts[c + 1] != 0x0A || c + 0x0A > max_c) { + /* Bad length */ + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_parseopt: bad length\n")); + return; + } + /* TCP timestamp option with valid length */ + tsval = (opts[c+2]) | (opts[c+3] << 8) | + (opts[c+4] << 16) | (opts[c+5] << 24); + if (flags & TCP_SYN) { + pcb->ts_recent = ntohl(tsval); + pcb->flags |= TF_TIMESTAMP; + } else if (TCP_SEQ_BETWEEN(pcb->ts_lastacksent, seqno, seqno+tcplen)) { + pcb->ts_recent = ntohl(tsval); + } + /* Advance to next option */ + c += 0x0A; + break; +#endif + default: + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_parseopt: other\n")); + if (opts[c + 1] == 0) { + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_parseopt: bad length\n")); + /* If the length field is zero, the options are malformed + and we don't process them further. */ + return; + } + /* All other options have a length field, so that we easily + can skip past them. */ + c += opts[c + 1]; + } + } + } +} + +#endif /* LWIP_TCP */ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/tcp_out.c b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/tcp_out.c new file mode 100644 index 000000000..9605beb8e --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/tcp_out.c @@ -0,0 +1,1071 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/** + * @file + * Transmission Control Protocol, outgoing traffic + * + * The output functions of TCP. + * + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#include "lwip/opt.h" + +#if LWIP_TCP /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/tcp.h" +#include "lwip/def.h" +#include "lwip/mem.h" +#include "lwip/memp.h" +#include "lwip/sys.h" +#include "lwip/ip_addr.h" +#include "lwip/netif.h" +#include "lwip/inet.h" +#include "lwip/inet_chksum.h" +#include "lwip/stats.h" +#include "lwip/snmp.h" + +#include +#define _TEST_HD_ +/* Forward declarations.*/ +static void tcp_output_segment(struct tcp_seg *seg, struct tcp_pcb *pcb); + +static struct tcp_hdr * +tcp_output_set_header(struct tcp_pcb *pcb, struct pbuf *p, int optlen, + u32_t seqno_be /* already in network byte order */) +{ + struct tcp_hdr *tcphdr = p->payload; + tcphdr->src = htons(pcb->local_port); + tcphdr->dest = htons(pcb->remote_port); + tcphdr->seqno = seqno_be; + tcphdr->ackno = htonl(pcb->rcv_nxt); + TCPH_FLAGS_SET(tcphdr, TCP_ACK); + tcphdr->wnd = htons(pcb->rcv_ann_wnd); + tcphdr->urgp = 0; + TCPH_HDRLEN_SET(tcphdr, (5 + optlen / 4)); + tcphdr->chksum = 0; + + /* If we're sending a packet, update the announced right window edge */ + pcb->rcv_ann_right_edge = pcb->rcv_nxt + pcb->rcv_ann_wnd; + + return tcphdr; +} + +/** + * Called by tcp_close() to send a segment including flags but not data. + * + * @param pcb the tcp_pcb over which to send a segment + * @param flags the flags to set in the segment header + * @return ERR_OK if sent, another err_t otherwise + */ +err_t +tcp_send_ctrl(struct tcp_pcb *pcb, u8_t flags) +{ + /* no data, no length, flags, copy=1, no optdata */ + return tcp_enqueue(pcb, NULL, 0, flags, TCP_WRITE_FLAG_COPY, 0); +} + +/** + * Write data for sending (but does not send it immediately). + * + * It waits in the expectation of more data being sent soon (as + * it can send them more efficiently by combining them together). + * To prompt the system to send data now, call tcp_output() after + * calling tcp_write(). + * + * @param pcb Protocol control block of the TCP connection to enqueue data for. + * @param data pointer to the data to send + * @param len length (in bytes) of the data to send + * @param apiflags combination of following flags : + * - TCP_WRITE_FLAG_COPY (0x01) data will be copied into memory belonging to the stack + * - TCP_WRITE_FLAG_MORE (0x02) for TCP connection, PSH flag will be set on last segment sent, + * @return ERR_OK if enqueued, another err_t on error + * + * @see tcp_write() + */ +err_t +tcp_write(struct tcp_pcb *pcb, const void *data, u16_t len, u8_t apiflags) +{ + LWIP_DEBUGF(TCP_OUTPUT_DEBUG, ("tcp_write(pcb=%p, data=%p, len=%"U16_F", apiflags=%"U16_F")\n", (void *)pcb, + data, len, (u16_t)apiflags)); + /* connection is in valid state for data transmission? */ + if (pcb->state == ESTABLISHED || + pcb->state == CLOSE_WAIT || + pcb->state == SYN_SENT || + pcb->state == SYN_RCVD) { + if (len > 0) { +#if LWIP_TCP_TIMESTAMPS + return tcp_enqueue(pcb, (void *)data, len, 0, apiflags, + pcb->flags & TF_TIMESTAMP ? TF_SEG_OPTS_TS : 0); +#else + return tcp_enqueue(pcb, (void *)data, len, 0, apiflags, 0); +#endif + } + return ERR_OK; + } else { + LWIP_DEBUGF(TCP_OUTPUT_DEBUG | LWIP_DBG_STATE | LWIP_DBG_LEVEL_SEVERE, ("tcp_write() called in invalid state\n")); + return ERR_CONN; + } +} + +/** + * Enqueue data and/or TCP options for transmission + * + * Called by tcp_connect(), tcp_listen_input(), tcp_send_ctrl() and tcp_write(). + * + * @param pcb Protocol control block for the TCP connection to enqueue data for. + * @param arg Pointer to the data to be enqueued for sending. + * @param len Data length in bytes + * @param flags tcp header flags to set in the outgoing segment + * @param apiflags combination of following flags : + * - TCP_WRITE_FLAG_COPY (0x01) data will be copied into memory belonging to the stack + * - TCP_WRITE_FLAG_MORE (0x02) for TCP connection, PSH flag will be set on last segment sent, + * @param optflags options to include in segment later on (see definition of struct tcp_seg) + */ +err_t +tcp_enqueue(struct tcp_pcb *pcb, void *arg, u16_t len, + u8_t flags, u8_t apiflags, u8_t optflags) +{ + struct pbuf *p; + struct tcp_seg *seg, *useg, *queue; + u32_t seqno; + u16_t left, seglen; + void *ptr; + u16_t queuelen; + u8_t optlen; + + LWIP_DEBUGF(TCP_OUTPUT_DEBUG, + ("tcp_enqueue(pcb=%p, arg=%p, len=%"U16_F", flags=%"X16_F", apiflags=%"U16_F")\n", + (void *)pcb, arg, len, (u16_t)flags, (u16_t)apiflags)); + LWIP_ERROR("tcp_enqueue: packet needs payload, options, or SYN/FIN (programmer violates API)", + ((len != 0) || (optflags != 0) || ((flags & (TCP_SYN | TCP_FIN)) != 0)), + return ERR_ARG;); + LWIP_ERROR("tcp_enqueue: len != 0 || arg == NULL (programmer violates API)", + ((len != 0) || (arg == NULL)), return ERR_ARG;); + + /* fail on too much data */ + if (len > pcb->snd_buf) { + LWIP_DEBUGF(TCP_OUTPUT_DEBUG | LWIP_DBG_LEVEL_WARNING, + ("tcp_enqueue: too much data (len=%"U16_F" > snd_buf=%"U16_F")\n", len, pcb->snd_buf)); + pcb->flags |= TF_NAGLEMEMERR; + return ERR_MEM; + } + left = len; + ptr = arg; + + optlen = LWIP_TCP_OPT_LENGTH(optflags); + + /* seqno will be the sequence number of the first segment enqueued + * by the call to this function. */ + seqno = pcb->snd_lbb; + + LWIP_DEBUGF(TCP_QLEN_DEBUG, ("tcp_enqueue: queuelen: %"U16_F"\n", (u16_t)pcb->snd_queuelen)); + + /* If total number of pbufs on the unsent/unacked queues exceeds the + * configured maximum, return an error */ + queuelen = pcb->snd_queuelen; + /* check for configured max queuelen and possible overflow */ + if ((queuelen >= TCP_SND_QUEUELEN) || (queuelen > TCP_SNDQUEUELEN_OVERFLOW)) { + LWIP_DEBUGF(TCP_OUTPUT_DEBUG | LWIP_DBG_LEVEL_WARNING, + ("tcp_enqueue: too long queue %"U16_F" (max %"U16_F")\n", queuelen, TCP_SND_QUEUELEN)); + TCP_STATS_INC(tcp.memerr); + pcb->flags |= TF_NAGLEMEMERR; + return ERR_MEM; + } + if (queuelen != 0) { + LWIP_ASSERT("tcp_enqueue: pbufs on queue => at least one queue non-empty", + pcb->unacked != NULL || pcb->unsent != NULL); + } else { + LWIP_ASSERT("tcp_enqueue: no pbufs on queue => both queues empty", + pcb->unacked == NULL && pcb->unsent == NULL); + } + + /* First, break up the data into segments and tuck them together in + * the local "queue" variable. */ + useg = queue = seg = NULL; + seglen = 0; + while (queue == NULL || left > 0) { + /* The segment length (including options) should be at most the MSS */ + seglen = left > (pcb->mss - optlen) ? (pcb->mss - optlen) : left; + + /* Allocate memory for tcp_seg, and fill in fields. */ + seg = memp_malloc(MEMP_TCP_SEG); + if (seg == NULL) { + LWIP_DEBUGF(TCP_OUTPUT_DEBUG | LWIP_DBG_LEVEL_SERIOUS, + ("tcp_enqueue: could not allocate memory for tcp_seg\n")); + goto memerr; + } + seg->next = NULL; + seg->p = NULL; + + /* first segment of to-be-queued data? */ + if (queue == NULL) { + queue = seg; + } + /* subsequent segments of to-be-queued data */ + else { + /* Attach the segment to the end of the queued segments */ + LWIP_ASSERT("useg != NULL", useg != NULL); + useg->next = seg; + } + /* remember last segment of to-be-queued data for next iteration */ + useg = seg; + + /* If copy is set, memory should be allocated + * and data copied into pbuf, otherwise data comes from + * ROM or other static memory, and need not be copied. */ + if (apiflags & TCP_WRITE_FLAG_COPY) { + if ((seg->p = pbuf_alloc(PBUF_TRANSPORT, seglen + optlen, PBUF_RAM)) == NULL) { + LWIP_DEBUGF(TCP_OUTPUT_DEBUG | LWIP_DBG_LEVEL_SERIOUS, + ("tcp_enqueue : could not allocate memory for pbuf copy size %"U16_F"\n", seglen)); + goto memerr; + } + LWIP_ASSERT("check that first pbuf can hold the complete seglen", + (seg->p->len >= seglen + optlen)); + queuelen += pbuf_clen(seg->p); + if (arg != NULL) { + MEMCPY((char *)seg->p->payload + optlen, ptr, seglen); + } + seg->dataptr = seg->p->payload; + } + /* do not copy data */ + else { + /* First, allocate a pbuf for the headers. */ + if ((seg->p = pbuf_alloc(PBUF_TRANSPORT, optlen, PBUF_RAM)) == NULL) { + LWIP_DEBUGF(TCP_OUTPUT_DEBUG | LWIP_DBG_LEVEL_SERIOUS, + ("tcp_enqueue: could not allocate memory for header pbuf\n")); + goto memerr; + } + queuelen += pbuf_clen(seg->p); + + /* Second, allocate a pbuf for holding the data. + * since the referenced data is available at least until it is sent out on the + * link (as it has to be ACKed by the remote party) we can safely use PBUF_ROM + * instead of PBUF_REF here. + */ + if (left > 0) { + if ((p = pbuf_alloc(PBUF_RAW, seglen, PBUF_ROM)) == NULL) { + /* If allocation fails, we have to deallocate the header pbuf as well. */ + pbuf_free(seg->p); + seg->p = NULL; + LWIP_DEBUGF(TCP_OUTPUT_DEBUG | LWIP_DBG_LEVEL_SERIOUS, + ("tcp_enqueue: could not allocate memory for zero-copy pbuf\n")); + goto memerr; + } + ++queuelen; + /* reference the non-volatile payload data */ + p->payload = ptr; + seg->dataptr = ptr; + + /* Concatenate the headers and data pbufs together. */ + pbuf_cat(seg->p/*header*/, p/*data*/); + p = NULL; + } + } + + /* Now that there are more segments queued, we check again if the + length of the queue exceeds the configured maximum or overflows. */ + if ((queuelen > TCP_SND_QUEUELEN) || (queuelen > TCP_SNDQUEUELEN_OVERFLOW)) { + LWIP_DEBUGF(TCP_OUTPUT_DEBUG | LWIP_DBG_LEVEL_SERIOUS, + ("tcp_enqueue: queue too long %"U16_F" (%"U16_F")\n", queuelen, TCP_SND_QUEUELEN)); + goto memerr; + } + + seg->len = seglen; + + /* build TCP header */ + if (pbuf_header(seg->p, TCP_HLEN)) { + LWIP_DEBUGF(TCP_OUTPUT_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("tcp_enqueue: no room for TCP header in pbuf.\n")); + TCP_STATS_INC(tcp.err); + goto memerr; + } + seg->tcphdr = seg->p->payload; + seg->tcphdr->src = htons(pcb->local_port); + seg->tcphdr->dest = htons(pcb->remote_port); + seg->tcphdr->seqno = htonl(seqno); + seg->tcphdr->urgp = 0; + TCPH_FLAGS_SET(seg->tcphdr, flags); + /* don't fill in tcphdr->ackno and tcphdr->wnd until later */ + + seg->flags = optflags; + + /* Set the length of the header */ + TCPH_HDRLEN_SET(seg->tcphdr, (5 + optlen / 4)); + LWIP_DEBUGF(TCP_OUTPUT_DEBUG | LWIP_DBG_TRACE, ("tcp_enqueue: queueing %"U32_F":%"U32_F" (0x%"X16_F")\n", + ntohl(seg->tcphdr->seqno), + ntohl(seg->tcphdr->seqno) + TCP_TCPLEN(seg), + (u16_t)flags)); + + left -= seglen; + seqno += seglen; + ptr = (void *)((u8_t *)ptr + seglen); + } + + /* Now that the data to be enqueued has been broken up into TCP + segments in the queue variable, we add them to the end of the + pcb->unsent queue. */ + if (pcb->unsent == NULL) { + useg = NULL; + } + else { + for (useg = pcb->unsent; useg->next != NULL; useg = useg->next); + } + /* { useg is last segment on the unsent queue, NULL if list is empty } */ + + /* If there is room in the last pbuf on the unsent queue, + chain the first pbuf on the queue together with that. */ + if (useg != NULL && + TCP_TCPLEN(useg) != 0 && + !(TCPH_FLAGS(useg->tcphdr) & (TCP_SYN | TCP_FIN)) && + (!(flags & (TCP_SYN | TCP_FIN)) || (flags == TCP_FIN)) && + /* fit within max seg size */ + (useg->len + queue->len <= pcb->mss) && + /* only concatenate segments with the same options */ + (useg->flags == queue->flags) && + /* segments are consecutive */ + (ntohl(useg->tcphdr->seqno) + useg->len == ntohl(queue->tcphdr->seqno)) ) { + /* Remove TCP header from first segment of our to-be-queued list */ + if(pbuf_header(queue->p, -(TCP_HLEN + optlen))) { + /* Can we cope with this failing? Just assert for now */ + LWIP_ASSERT("pbuf_header failed\n", 0); + TCP_STATS_INC(tcp.err); + goto memerr; + } + if (queue->p->len == 0) { + /* free the first (header-only) pbuf if it is now empty (contained only headers) */ + struct pbuf *old_q = queue->p; + queue->p = queue->p->next; + old_q->next = NULL; + queuelen--; + pbuf_free(old_q); + } + if (flags & TCP_FIN) { + /* the new segment contains only FIN, no data -> put the FIN into the last segment */ + LWIP_ASSERT("FIN enqueued together with data", queue->p == NULL && queue->len == 0); + TCPH_SET_FLAG(useg->tcphdr, TCP_FIN); + } else { + LWIP_ASSERT("zero-length pbuf", (queue->p != NULL) && (queue->p->len > 0)); + pbuf_cat(useg->p, queue->p); + useg->len += queue->len; + useg->next = queue->next; + } + + LWIP_DEBUGF(TCP_OUTPUT_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("tcp_enqueue: chaining segments, new len %"U16_F"\n", useg->len)); + if (seg == queue) { + seg = useg; + seglen = useg->len; + } + memp_free(MEMP_TCP_SEG, queue); + } + else { + /* empty list */ + if (useg == NULL) { + /* initialize list with this segment */ + pcb->unsent = queue; + } + /* enqueue segment */ + else { + useg->next = queue; + } + } + if ((flags & TCP_SYN) || (flags & TCP_FIN)) { + ++len; + } + if (flags & TCP_FIN) { + pcb->flags |= TF_FIN; + } + pcb->snd_lbb += len; + + pcb->snd_buf -= len; + + /* update number of segments on the queues */ + pcb->snd_queuelen = queuelen; + LWIP_DEBUGF(TCP_QLEN_DEBUG, ("tcp_enqueue: %"S16_F" (after enqueued)\n", pcb->snd_queuelen)); + if (pcb->snd_queuelen != 0) { + LWIP_ASSERT("tcp_enqueue: valid queue length", + pcb->unacked != NULL || pcb->unsent != NULL); + } + + /* Set the PSH flag in the last segment that we enqueued, but only + if the segment has data (indicated by seglen > 0). */ + if (seg != NULL && seglen > 0 && seg->tcphdr != NULL && ((apiflags & TCP_WRITE_FLAG_MORE)==0)) { + TCPH_SET_FLAG(seg->tcphdr, TCP_PSH); + } + + return ERR_OK; +memerr: + pcb->flags |= TF_NAGLEMEMERR; + TCP_STATS_INC(tcp.memerr); + + if (queue != NULL) { + tcp_segs_free(queue); + } + if (pcb->snd_queuelen != 0) { + LWIP_ASSERT("tcp_enqueue: valid queue length", pcb->unacked != NULL || + pcb->unsent != NULL); + } + LWIP_DEBUGF(TCP_QLEN_DEBUG | LWIP_DBG_STATE, ("tcp_enqueue: %"S16_F" (with mem err)\n", pcb->snd_queuelen)); + return ERR_MEM; +} + + +#if LWIP_TCP_TIMESTAMPS +/* Build a timestamp option (12 bytes long) at the specified options pointer) + * + * @param pcb tcp_pcb + * @param opts option pointer where to store the timestamp option + */ +static void +tcp_build_timestamp_option(struct tcp_pcb *pcb, u32_t *opts) +{ + /* Pad with two NOP options to make everything nicely aligned */ + opts[0] = htonl(0x0101080A); + opts[1] = htonl(sys_now()); + opts[2] = htonl(pcb->ts_recent); +} +#endif + +/** Send an ACK without data. + * + * @param pcb Protocol control block for the TCP connection to send the ACK + */ +err_t +tcp_send_empty_ack(struct tcp_pcb *pcb) +{ + struct pbuf *p; + struct tcp_hdr *tcphdr; + u8_t optlen = 0; + +#if LWIP_TCP_TIMESTAMPS + if (pcb->flags & TF_TIMESTAMP) { + optlen = LWIP_TCP_OPT_LENGTH(TF_SEG_OPTS_TS); + } +#endif + p = pbuf_alloc(PBUF_IP, TCP_HLEN + optlen, PBUF_RAM); + if (p == NULL) { + LWIP_DEBUGF(TCP_OUTPUT_DEBUG, ("tcp_output: (ACK) could not allocate pbuf\n")); + return ERR_BUF; + } + LWIP_DEBUGF(TCP_OUTPUT_DEBUG, + ("tcp_output: sending ACK for %"U32_F"\n", pcb->rcv_nxt)); + /* remove ACK flags from the PCB, as we send an empty ACK now */ + pcb->flags &= ~(TF_ACK_DELAY | TF_ACK_NOW); + + tcphdr = tcp_output_set_header(pcb, p, optlen, htonl(pcb->snd_nxt)); + + /* NB. MSS option is only sent on SYNs, so ignore it here */ +#if LWIP_TCP_TIMESTAMPS + pcb->ts_lastacksent = pcb->rcv_nxt; + + if (pcb->flags & TF_TIMESTAMP) { + tcp_build_timestamp_option(pcb, (u32_t *)(tcphdr + 1)); + } +#endif + +#if CHECKSUM_GEN_TCP + tcphdr->chksum = inet_chksum_pseudo(p, &(pcb->local_ip), &(pcb->remote_ip), + IP_PROTO_TCP, p->tot_len); +#endif +#if LWIP_NETIF_HWADDRHINT + ip_output_hinted(p, &(pcb->local_ip), &(pcb->remote_ip), pcb->ttl, pcb->tos, + IP_PROTO_TCP, &(pcb->addr_hint)); +#else /* LWIP_NETIF_HWADDRHINT*/ + ip_output(p, &(pcb->local_ip), &(pcb->remote_ip), pcb->ttl, pcb->tos, + IP_PROTO_TCP); +#endif /* LWIP_NETIF_HWADDRHINT*/ + pbuf_free(p); + + return ERR_OK; +} + +/** + * Find out what we can send and send it + * + * @param pcb Protocol control block for the TCP connection to send data + * @return ERR_OK if data has been sent or nothing to send + * another err_t on error + */ +err_t +tcp_output(struct tcp_pcb *pcb) +{ + struct tcp_seg *seg, *useg; + u32_t wnd, snd_nxt; +#if TCP_CWND_DEBUG + s16_t i = 0; +#endif /* TCP_CWND_DEBUG */ + + /* First, check if we are invoked by the TCP input processing + code. If so, we do not output anything. Instead, we rely on the + input processing code to call us when input processing is done + with. */ + if (tcp_input_pcb == pcb) { + return ERR_OK; + } + + wnd = LWIP_MIN(pcb->snd_wnd, pcb->cwnd); + + seg = pcb->unsent; + + /* If the TF_ACK_NOW flag is set and no data will be sent (either + * because the ->unsent queue is empty or because the window does + * not allow it), construct an empty ACK segment and send it. + * + * If data is to be sent, we will just piggyback the ACK (see below). + */ + if (pcb->flags & TF_ACK_NOW && + (seg == NULL || + ntohl(seg->tcphdr->seqno) - pcb->lastack + seg->len > wnd)) { + return tcp_send_empty_ack(pcb); + } + + /* useg should point to last segment on unacked queue */ + useg = pcb->unacked; + if (useg != NULL) { + for (; useg->next != NULL; useg = useg->next); + } + +#if TCP_OUTPUT_DEBUG + if (seg == NULL) { + LWIP_DEBUGF(TCP_OUTPUT_DEBUG, ("tcp_output: nothing to send (%p)\n", + (void*)pcb->unsent)); + } +#endif /* TCP_OUTPUT_DEBUG */ +#if TCP_CWND_DEBUG + if (seg == NULL) { + LWIP_DEBUGF(TCP_CWND_DEBUG, ("tcp_output: snd_wnd %"U16_F + ", cwnd %"U16_F", wnd %"U32_F + ", seg == NULL, ack %"U32_F"\n", + pcb->snd_wnd, pcb->cwnd, wnd, pcb->lastack)); + } else { + LWIP_DEBUGF(TCP_CWND_DEBUG, + ("tcp_output: snd_wnd %"U16_F", cwnd %"U16_F", wnd %"U32_F + ", effwnd %"U32_F", seq %"U32_F", ack %"U32_F"\n", + pcb->snd_wnd, pcb->cwnd, wnd, + ntohl(seg->tcphdr->seqno) - pcb->lastack + seg->len, + ntohl(seg->tcphdr->seqno), pcb->lastack)); + } +#endif /* TCP_CWND_DEBUG */ + /* data available and window allows it to be sent? */ + while (seg != NULL && + ntohl(seg->tcphdr->seqno) - pcb->lastack + seg->len <= wnd) { + LWIP_ASSERT("RST not expected here!", + (TCPH_FLAGS(seg->tcphdr) & TCP_RST) == 0); + /* Stop sending if the nagle algorithm would prevent it + * Don't stop: + * - if tcp_enqueue had a memory error before (prevent delayed ACK timeout) or + * - if FIN was already enqueued for this PCB (SYN is always alone in a segment - + * either seg->next != NULL or pcb->unacked == NULL; + * RST is no sent using tcp_enqueue/tcp_output. + */ + if((tcp_do_output_nagle(pcb) == 0) && + ((pcb->flags & (TF_NAGLEMEMERR | TF_FIN)) == 0)){ + break; + } +#if TCP_CWND_DEBUG + LWIP_DEBUGF(TCP_CWND_DEBUG, ("tcp_output: snd_wnd %"U16_F", cwnd %"U16_F", wnd %"U32_F", effwnd %"U32_F", seq %"U32_F", ack %"U32_F", i %"S16_F"\n", + pcb->snd_wnd, pcb->cwnd, wnd, + ntohl(seg->tcphdr->seqno) + seg->len - + pcb->lastack, + ntohl(seg->tcphdr->seqno), pcb->lastack, i)); + ++i; +#endif /* TCP_CWND_DEBUG */ + + pcb->unsent = seg->next; + + if (pcb->state != SYN_SENT) { + TCPH_SET_FLAG(seg->tcphdr, TCP_ACK); + pcb->flags &= ~(TF_ACK_DELAY | TF_ACK_NOW); + } + + tcp_output_segment(seg, pcb); + snd_nxt = ntohl(seg->tcphdr->seqno) + TCP_TCPLEN(seg); + if (TCP_SEQ_LT(pcb->snd_nxt, snd_nxt)) { + pcb->snd_nxt = snd_nxt; + } + /* put segment on unacknowledged list if length > 0 */ + if (TCP_TCPLEN(seg) > 0) { + seg->next = NULL; + /* unacked list is empty? */ + if (pcb->unacked == NULL) { + pcb->unacked = seg; + useg = seg; + /* unacked list is not empty? */ + } else { + /* In the case of fast retransmit, the packet should not go to the tail + * of the unacked queue, but rather somewhere before it. We need to check for + * this case. -STJ Jul 27, 2004 */ + if (TCP_SEQ_LT(ntohl(seg->tcphdr->seqno), ntohl(useg->tcphdr->seqno))){ + /* add segment to before tail of unacked list, keeping the list sorted */ + struct tcp_seg **cur_seg = &(pcb->unacked); + while (*cur_seg && + TCP_SEQ_LT(ntohl((*cur_seg)->tcphdr->seqno), ntohl(seg->tcphdr->seqno))) { + cur_seg = &((*cur_seg)->next ); + } + seg->next = (*cur_seg); + (*cur_seg) = seg; + } else { + /* add segment to tail of unacked list */ + useg->next = seg; + useg = useg->next; + } + } + /* do not queue empty segments on the unacked list */ + } else { + tcp_seg_free(seg); + } + seg = pcb->unsent; + } + + if (seg != NULL && pcb->persist_backoff == 0 && + ntohl(seg->tcphdr->seqno) - pcb->lastack + seg->len > pcb->snd_wnd) { + /* prepare for persist timer */ + pcb->persist_cnt = 0; + pcb->persist_backoff = 1; + } + + pcb->flags &= ~TF_NAGLEMEMERR; + return ERR_OK; +} + +/** + * Called by tcp_output() to actually send a TCP segment over IP. + * + * @param seg the tcp_seg to send + * @param pcb the tcp_pcb for the TCP connection used to send the segment + */ +static void +tcp_output_segment(struct tcp_seg *seg, struct tcp_pcb *pcb) +{ + u16_t len; + struct netif *netif; + u32_t *opts; + + /** @bug Exclude retransmitted segments from this count. */ + snmp_inc_tcpoutsegs(); + + /* The TCP header has already been constructed, but the ackno and + wnd fields remain. */ + seg->tcphdr->ackno = htonl(pcb->rcv_nxt); + + /* advertise our receive window size in this TCP segment */ + seg->tcphdr->wnd = htons(pcb->rcv_ann_wnd); + + pcb->rcv_ann_right_edge = pcb->rcv_nxt + pcb->rcv_ann_wnd; + + /* Add any requested options. NB MSS option is only set on SYN + packets, so ignore it here */ + opts = (u32_t *)(seg->tcphdr + 1); + if (seg->flags & TF_SEG_OPTS_MSS) { + TCP_BUILD_MSS_OPTION(*opts); + opts += 1; + } +#if LWIP_TCP_TIMESTAMPS + pcb->ts_lastacksent = pcb->rcv_nxt; + + if (seg->flags & TF_SEG_OPTS_TS) { + tcp_build_timestamp_option(pcb, opts); + opts += 3; + } +#endif + +#ifdef _TEST_HD_ + /* ANGR: set rtime this _before_ checking ip_route(). Otherwise TCP_SYN will + * not be retransmitted in case the interface was down and tcp_connect() + * will not return any error. Since we still want the err_cb() (or maybe + * the wifi link comes up), make sure that we fulfill the retransmissions in + * tcp_slowtmr() + */ + + /* Set retransmission timer running if it is not currently enabled */ + if(pcb->rtime == -1) + pcb->rtime = 0; +#endif + + /* If we don't have a local IP address, we get one by + calling ip_route(). */ + if (ip_addr_isany(&(pcb->local_ip))) { + netif = ip_route(&(pcb->remote_ip)); + if (netif == NULL) { + return; + } + ip_addr_set(&(pcb->local_ip), &(netif->ip_addr)); + } + +#ifndef _TEST_HD_ + //Set retransmission timer running if it is not currently enabled + if(pcb->rtime == -1) + pcb->rtime = 0; +#endif + + if (pcb->rttest == 0) { + pcb->rttest = tcp_ticks; + pcb->rtseq = ntohl(seg->tcphdr->seqno); + + LWIP_DEBUGF(TCP_RTO_DEBUG, ("tcp_output_segment: rtseq %"U32_F"\n", pcb->rtseq)); + } + LWIP_DEBUGF(TCP_OUTPUT_DEBUG, ("tcp_output_segment: %"U32_F":%"U32_F"\n", + htonl(seg->tcphdr->seqno), htonl(seg->tcphdr->seqno) + + seg->len)); + + len = (u16_t)((u8_t *)seg->tcphdr - (u8_t *)seg->p->payload); + + seg->p->len -= len; + seg->p->tot_len -= len; + + seg->p->payload = seg->tcphdr; + + seg->tcphdr->chksum = 0; +#if CHECKSUM_GEN_TCP + seg->tcphdr->chksum = inet_chksum_pseudo(seg->p, + &(pcb->local_ip), + &(pcb->remote_ip), + IP_PROTO_TCP, seg->p->tot_len); +#endif + TCP_STATS_INC(tcp.xmit); + +#if LWIP_NETIF_HWADDRHINT + ip_output_hinted(seg->p, &(pcb->local_ip), &(pcb->remote_ip), pcb->ttl, pcb->tos, + IP_PROTO_TCP, &(pcb->addr_hint)); +#else /* LWIP_NETIF_HWADDRHINT*/ + ip_output(seg->p, &(pcb->local_ip), &(pcb->remote_ip), pcb->ttl, pcb->tos, + IP_PROTO_TCP); +#endif /* LWIP_NETIF_HWADDRHINT*/ +} + +/** + * Send a TCP RESET packet (empty segment with RST flag set) either to + * abort a connection or to show that there is no matching local connection + * for a received segment. + * + * Called by tcp_abort() (to abort a local connection), tcp_input() (if no + * matching local pcb was found), tcp_listen_input() (if incoming segment + * has ACK flag set) and tcp_process() (received segment in the wrong state) + * + * Since a RST segment is in most cases not sent for an active connection, + * tcp_rst() has a number of arguments that are taken from a tcp_pcb for + * most other segment output functions. + * + * @param seqno the sequence number to use for the outgoing segment + * @param ackno the acknowledge number to use for the outgoing segment + * @param local_ip the local IP address to send the segment from + * @param remote_ip the remote IP address to send the segment to + * @param local_port the local TCP port to send the segment from + * @param remote_port the remote TCP port to send the segment to + */ +void +tcp_rst(u32_t seqno, u32_t ackno, + struct ip_addr *local_ip, struct ip_addr *remote_ip, + u16_t local_port, u16_t remote_port) +{ + struct pbuf *p; + struct tcp_hdr *tcphdr; + p = pbuf_alloc(PBUF_IP, TCP_HLEN, PBUF_RAM); + if (p == NULL) { + LWIP_DEBUGF(TCP_DEBUG, ("tcp_rst: could not allocate memory for pbuf\n")); + return; + } + LWIP_ASSERT("check that first pbuf can hold struct tcp_hdr", + (p->len >= sizeof(struct tcp_hdr))); + + tcphdr = p->payload; + tcphdr->src = htons(local_port); + tcphdr->dest = htons(remote_port); + tcphdr->seqno = htonl(seqno); + tcphdr->ackno = htonl(ackno); + TCPH_FLAGS_SET(tcphdr, TCP_RST | TCP_ACK); + tcphdr->wnd = htons(TCP_WND); + tcphdr->urgp = 0; + TCPH_HDRLEN_SET(tcphdr, 5); + + tcphdr->chksum = 0; +#if CHECKSUM_GEN_TCP + tcphdr->chksum = inet_chksum_pseudo(p, local_ip, remote_ip, + IP_PROTO_TCP, p->tot_len); +#endif + TCP_STATS_INC(tcp.xmit); + snmp_inc_tcpoutrsts(); + /* Send output with hardcoded TTL since we have no access to the pcb */ + ip_output(p, local_ip, remote_ip, TCP_TTL, 0, IP_PROTO_TCP); + pbuf_free(p); + LWIP_DEBUGF(TCP_RST_DEBUG, ("tcp_rst: seqno %"U32_F" ackno %"U32_F".\n", seqno, ackno)); +} + +/** + * Requeue all unacked segments for retransmission + * + * Called by tcp_slowtmr() for slow retransmission. + * + * @param pcb the tcp_pcb for which to re-enqueue all unacked segments + */ +void +tcp_rexmit_rto(struct tcp_pcb *pcb) +{ + struct tcp_seg *seg; + + if (pcb->unacked == NULL) { + return; + } + + /* Move all unacked segments to the head of the unsent queue */ + for (seg = pcb->unacked; seg->next != NULL; seg = seg->next); + /* concatenate unsent queue after unacked queue */ + seg->next = pcb->unsent; + /* unsent queue is the concatenated queue (of unacked, unsent) */ + pcb->unsent = pcb->unacked; + /* unacked queue is now empty */ + pcb->unacked = NULL; + + /* increment number of retransmissions */ + ++pcb->nrtx; + + /* Don't take any RTT measurements after retransmitting. */ + pcb->rttest = 0; + + /* Do the actual retransmission */ + tcp_output(pcb); +} + +/** + * Requeue the first unacked segment for retransmission + * + * Called by tcp_receive() for fast retramsmit. + * + * @param pcb the tcp_pcb for which to retransmit the first unacked segment + */ +void +tcp_rexmit(struct tcp_pcb *pcb) +{ + struct tcp_seg *seg; + struct tcp_seg **cur_seg; + + if (pcb->unacked == NULL) { + return; + } + + /* Move the first unacked segment to the unsent queue */ + /* Keep the unsent queue sorted. */ + seg = pcb->unacked; + pcb->unacked = seg->next; + + cur_seg = &(pcb->unsent); + while (*cur_seg && + TCP_SEQ_LT(ntohl((*cur_seg)->tcphdr->seqno), ntohl(seg->tcphdr->seqno))) { + cur_seg = &((*cur_seg)->next ); + } + seg->next = *cur_seg; + *cur_seg = seg; + + ++pcb->nrtx; + + /* Don't take any rtt measurements after retransmitting. */ + pcb->rttest = 0; + + /* Do the actual retransmission. */ + snmp_inc_tcpretranssegs(); + /* No need to call tcp_output: we are always called from tcp_input() + and thus tcp_output directly returns. */ +} + + +/** + * Handle retransmission after three dupacks received + * + * @param pcb the tcp_pcb for which to retransmit the first unacked segment + */ +void +tcp_rexmit_fast(struct tcp_pcb *pcb) +{ + if (pcb->unacked != NULL && !(pcb->flags & TF_INFR)) { + /* This is fast retransmit. Retransmit the first unacked segment. */ + LWIP_DEBUGF(TCP_FR_DEBUG, + ("tcp_receive: dupacks %"U16_F" (%"U32_F + "), fast retransmit %"U32_F"\n", + (u16_t)pcb->dupacks, pcb->lastack, + ntohl(pcb->unacked->tcphdr->seqno))); + tcp_rexmit(pcb); + + /* Set ssthresh to half of the minimum of the current + * cwnd and the advertised window */ + if (pcb->cwnd > pcb->snd_wnd) + pcb->ssthresh = pcb->snd_wnd / 2; + else + pcb->ssthresh = pcb->cwnd / 2; + + /* The minimum value for ssthresh should be 2 MSS */ + if (pcb->ssthresh < 2*pcb->mss) { + LWIP_DEBUGF(TCP_FR_DEBUG, + ("tcp_receive: The minimum value for ssthresh %"U16_F + " should be min 2 mss %"U16_F"...\n", + pcb->ssthresh, 2*pcb->mss)); + pcb->ssthresh = 2*pcb->mss; + } + + pcb->cwnd = pcb->ssthresh + 3 * pcb->mss; + pcb->flags |= TF_INFR; + } +} + + +/** + * Send keepalive packets to keep a connection active although + * no data is sent over it. + * + * Called by tcp_slowtmr() + * + * @param pcb the tcp_pcb for which to send a keepalive packet + */ +void +tcp_keepalive(struct tcp_pcb *pcb) +{ + struct pbuf *p; + struct tcp_hdr *tcphdr; + + LWIP_DEBUGF(TCP_DEBUG, ("tcp_keepalive: sending KEEPALIVE probe to %"U16_F".%"U16_F".%"U16_F".%"U16_F"\n", + ip4_addr1(&pcb->remote_ip), ip4_addr2(&pcb->remote_ip), + ip4_addr3(&pcb->remote_ip), ip4_addr4(&pcb->remote_ip))); + + LWIP_DEBUGF(TCP_DEBUG, ("tcp_keepalive: tcp_ticks %"U32_F" pcb->tmr %"U32_F" pcb->keep_cnt_sent %"U16_F"\n", + tcp_ticks, pcb->tmr, pcb->keep_cnt_sent)); + + p = pbuf_alloc(PBUF_IP, TCP_HLEN, PBUF_RAM); + + if(p == NULL) { + LWIP_DEBUGF(TCP_DEBUG, + ("tcp_keepalive: could not allocate memory for pbuf\n")); + return; + } + LWIP_ASSERT("check that first pbuf can hold struct tcp_hdr", + (p->len >= sizeof(struct tcp_hdr))); + + tcphdr = tcp_output_set_header(pcb, p, 0, htonl(pcb->snd_nxt - 1)); + +#if CHECKSUM_GEN_TCP + tcphdr->chksum = inet_chksum_pseudo(p, &pcb->local_ip, &pcb->remote_ip, + IP_PROTO_TCP, p->tot_len); +#endif + TCP_STATS_INC(tcp.xmit); + + /* Send output to IP */ +#if LWIP_NETIF_HWADDRHINT + ip_output_hinted(p, &pcb->local_ip, &pcb->remote_ip, pcb->ttl, 0, IP_PROTO_TCP, + &(pcb->addr_hint)); +#else /* LWIP_NETIF_HWADDRHINT*/ + ip_output(p, &pcb->local_ip, &pcb->remote_ip, pcb->ttl, 0, IP_PROTO_TCP); +#endif /* LWIP_NETIF_HWADDRHINT*/ + + pbuf_free(p); + + LWIP_DEBUGF(TCP_DEBUG, ("tcp_keepalive: seqno %"U32_F" ackno %"U32_F".\n", + pcb->snd_nxt - 1, pcb->rcv_nxt)); +} + + +/** + * Send persist timer zero-window probes to keep a connection active + * when a window update is lost. + * + * Called by tcp_slowtmr() + * + * @param pcb the tcp_pcb for which to send a zero-window probe packet + */ +void +tcp_zero_window_probe(struct tcp_pcb *pcb) +{ + struct pbuf *p; + struct tcp_hdr *tcphdr; + struct tcp_seg *seg; + u16_t len; + u8_t is_fin; + + LWIP_DEBUGF(TCP_DEBUG, + ("tcp_zero_window_probe: sending ZERO WINDOW probe to %" + U16_F".%"U16_F".%"U16_F".%"U16_F"\n", + ip4_addr1(&pcb->remote_ip), ip4_addr2(&pcb->remote_ip), + ip4_addr3(&pcb->remote_ip), ip4_addr4(&pcb->remote_ip))); + + LWIP_DEBUGF(TCP_DEBUG, + ("tcp_zero_window_probe: tcp_ticks %"U32_F + " pcb->tmr %"U32_F" pcb->keep_cnt_sent %"U16_F"\n", + tcp_ticks, pcb->tmr, pcb->keep_cnt_sent)); + + seg = pcb->unacked; + + if(seg == NULL) + seg = pcb->unsent; + + if(seg == NULL) + return; + + is_fin = ((TCPH_FLAGS(seg->tcphdr) & TCP_FIN) != 0) && (seg->len == 0); + len = is_fin ? TCP_HLEN : TCP_HLEN + 1; + + p = pbuf_alloc(PBUF_IP, len, PBUF_RAM); + if(p == NULL) { + LWIP_DEBUGF(TCP_DEBUG, ("tcp_zero_window_probe: no memory for pbuf\n")); + return; + } + LWIP_ASSERT("check that first pbuf can hold struct tcp_hdr", + (p->len >= sizeof(struct tcp_hdr))); + + tcphdr = tcp_output_set_header(pcb, p, 0, seg->tcphdr->seqno); + + if (is_fin) { + /* FIN segment, no data */ + TCPH_FLAGS_SET(tcphdr, TCP_ACK | TCP_FIN); + } else { + /* Data segment, copy in one byte from the head of the unacked queue */ + *((char *)p->payload + sizeof(struct tcp_hdr)) = *(char *)seg->dataptr; + } + +#if CHECKSUM_GEN_TCP + tcphdr->chksum = inet_chksum_pseudo(p, &pcb->local_ip, &pcb->remote_ip, + IP_PROTO_TCP, p->tot_len); +#endif + TCP_STATS_INC(tcp.xmit); + + /* Send output to IP */ +#if LWIP_NETIF_HWADDRHINT + ip_output_hinted(p, &pcb->local_ip, &pcb->remote_ip, pcb->ttl, 0, IP_PROTO_TCP, + &(pcb->addr_hint)); +#else /* LWIP_NETIF_HWADDRHINT*/ + ip_output(p, &pcb->local_ip, &pcb->remote_ip, pcb->ttl, 0, IP_PROTO_TCP); +#endif /* LWIP_NETIF_HWADDRHINT*/ + + pbuf_free(p); + + LWIP_DEBUGF(TCP_DEBUG, ("tcp_zero_window_probe: seqno %"U32_F + " ackno %"U32_F".\n", + pcb->snd_nxt - 1, pcb->rcv_nxt)); +} +#endif /* LWIP_TCP */ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/udp.c b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/udp.c new file mode 100644 index 000000000..697ca7ce3 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/udp.c @@ -0,0 +1,843 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/** + * @file + * User Datagram Protocol module + * + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + + +/* udp.c + * + * The code for the User Datagram Protocol UDP & UDPLite (RFC 3828). + * + */ + +/* @todo Check the use of '(struct udp_pcb).chksum_len_rx'! + */ + +#include "lwip/opt.h" + +#if LWIP_UDP /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/udp.h" +#include "lwip/def.h" +#include "lwip/memp.h" +#include "lwip/inet.h" +#include "lwip/inet_chksum.h" +#include "lwip/ip_addr.h" +#include "lwip/netif.h" +#include "lwip/icmp.h" +#include "lwip/stats.h" +#include "lwip/snmp.h" +#include "arch/perf.h" +#include "lwip/dhcp.h" + +#include + +/* The list of UDP PCBs */ +/* exported in udp.h (was static) */ +struct udp_pcb *udp_pcbs; + +/** + * Process an incoming UDP datagram. + * + * Given an incoming UDP datagram (as a chain of pbufs) this function + * finds a corresponding UDP PCB and hands over the pbuf to the pcbs + * recv function. If no pcb is found or the datagram is incorrect, the + * pbuf is freed. + * + * @param p pbuf to be demultiplexed to a UDP PCB. + * @param inp network interface on which the datagram was received. + * + */ +void +udp_input(struct pbuf *p, struct netif *inp) +{ + struct udp_hdr *udphdr; + struct udp_pcb *pcb, *prev; + struct udp_pcb *uncon_pcb; + struct ip_hdr *iphdr; + u16_t src, dest; + u8_t local_match; + u8_t broadcast; + + PERF_START; + + UDP_STATS_INC(udp.recv); + + iphdr = p->payload; + + /* Check minimum length (IP header + UDP header) + * and move payload pointer to UDP header */ + if (p->tot_len < (IPH_HL(iphdr) * 4 + UDP_HLEN) || pbuf_header(p, -(s16_t)(IPH_HL(iphdr) * 4))) { + /* drop short packets */ + LWIP_DEBUGF(UDP_DEBUG, + ("udp_input: short UDP datagram (%"U16_F" bytes) discarded\n", p->tot_len)); + UDP_STATS_INC(udp.lenerr); + UDP_STATS_INC(udp.drop); + snmp_inc_udpinerrors(); + pbuf_free(p); + goto end; + } + + udphdr = (struct udp_hdr *)p->payload; + + /* is broadcast packet ? */ + broadcast = ip_addr_isbroadcast(&(iphdr->dest), inp); + + LWIP_DEBUGF(UDP_DEBUG, ("udp_input: received datagram of length %"U16_F"\n", p->tot_len)); + + /* convert src and dest ports to host byte order */ + src = ntohs(udphdr->src); + dest = ntohs(udphdr->dest); + + udp_debug_print(udphdr); + + /* print the UDP source and destination */ + LWIP_DEBUGF(UDP_DEBUG, + ("udp (%"U16_F".%"U16_F".%"U16_F".%"U16_F", %"U16_F") <-- " + "(%"U16_F".%"U16_F".%"U16_F".%"U16_F", %"U16_F")\n", + ip4_addr1(&iphdr->dest), ip4_addr2(&iphdr->dest), + ip4_addr3(&iphdr->dest), ip4_addr4(&iphdr->dest), ntohs(udphdr->dest), + ip4_addr1(&iphdr->src), ip4_addr2(&iphdr->src), + ip4_addr3(&iphdr->src), ip4_addr4(&iphdr->src), ntohs(udphdr->src))); + +#if LWIP_DHCP + pcb = NULL; + /* when LWIP_DHCP is active, packets to DHCP_CLIENT_PORT may only be processed by + the dhcp module, no other UDP pcb may use the local UDP port DHCP_CLIENT_PORT */ + if (dest == DHCP_CLIENT_PORT) { + /* all packets for DHCP_CLIENT_PORT not coming from DHCP_SERVER_PORT are dropped! */ + if (src == DHCP_SERVER_PORT) { + if ((inp->dhcp != NULL) && (inp->dhcp->pcb != NULL)) { + /* accept the packe if + (- broadcast or directed to us) -> DHCP is link-layer-addressed, local ip is always ANY! + - inp->dhcp->pcb->remote == ANY or iphdr->src */ + if ((ip_addr_isany(&inp->dhcp->pcb->remote_ip) || + ip_addr_cmp(&(inp->dhcp->pcb->remote_ip), &(iphdr->src)))) { + pcb = inp->dhcp->pcb; + } + } + } + } else +#endif /* LWIP_DHCP */ + { + prev = NULL; + local_match = 0; + uncon_pcb = NULL; + /* Iterate through the UDP pcb list for a matching pcb. + * 'Perfect match' pcbs (connected to the remote port & ip address) are + * preferred. If no perfect match is found, the first unconnected pcb that + * matches the local port and ip address gets the datagram. */ + for (pcb = udp_pcbs; pcb != NULL; pcb = pcb->next) { + local_match = 0; + /* print the PCB local and remote address */ + LWIP_DEBUGF(UDP_DEBUG, + ("pcb (%"U16_F".%"U16_F".%"U16_F".%"U16_F", %"U16_F") --- " + "(%"U16_F".%"U16_F".%"U16_F".%"U16_F", %"U16_F")\n", + ip4_addr1(&pcb->local_ip), ip4_addr2(&pcb->local_ip), + ip4_addr3(&pcb->local_ip), ip4_addr4(&pcb->local_ip), pcb->local_port, + ip4_addr1(&pcb->remote_ip), ip4_addr2(&pcb->remote_ip), + ip4_addr3(&pcb->remote_ip), ip4_addr4(&pcb->remote_ip), pcb->remote_port)); + + /* compare PCB local addr+port to UDP destination addr+port */ + if ((pcb->local_port == dest) && + ((!broadcast && ip_addr_isany(&pcb->local_ip)) || + ip_addr_cmp(&(pcb->local_ip), &(iphdr->dest)) || +#if LWIP_IGMP + ip_addr_ismulticast(&(iphdr->dest)) || +#endif /* LWIP_IGMP */ +#if IP_SOF_BROADCAST_RECV + (broadcast && (pcb->so_options & SOF_BROADCAST)))) { +#else /* IP_SOF_BROADCAST_RECV */ + (broadcast))) { +#endif /* IP_SOF_BROADCAST_RECV */ + local_match = 1; + if ((uncon_pcb == NULL) && + ((pcb->flags & UDP_FLAGS_CONNECTED) == 0)) { + /* the first unconnected matching PCB */ + uncon_pcb = pcb; + } + } + /* compare PCB remote addr+port to UDP source addr+port */ + if ((local_match != 0) && + (pcb->remote_port == src) && + (ip_addr_isany(&pcb->remote_ip) || + ip_addr_cmp(&(pcb->remote_ip), &(iphdr->src)))) { + /* the first fully matching PCB */ + if (prev != NULL) { + /* move the pcb to the front of udp_pcbs so that is + found faster next time */ + prev->next = pcb->next; + pcb->next = udp_pcbs; + udp_pcbs = pcb; + } else { + UDP_STATS_INC(udp.cachehit); + } + break; + } + prev = pcb; + } + /* no fully matching pcb found? then look for an unconnected pcb */ + if (pcb == NULL) { + pcb = uncon_pcb; + } + } + + /* Check checksum if this is a match or if it was directed at us. */ + if (pcb != NULL || ip_addr_cmp(&inp->ip_addr, &iphdr->dest)) { + LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE, ("udp_input: calculating checksum\n")); +#if LWIP_UDPLITE + if (IPH_PROTO(iphdr) == IP_PROTO_UDPLITE) { + /* Do the UDP Lite checksum */ +#if CHECKSUM_CHECK_UDP + u16_t chklen = ntohs(udphdr->len); + if (chklen < sizeof(struct udp_hdr)) { + if (chklen == 0) { + /* For UDP-Lite, checksum length of 0 means checksum + over the complete packet (See RFC 3828 chap. 3.1) */ + chklen = p->tot_len; + } else { + /* At least the UDP-Lite header must be covered by the + checksum! (Again, see RFC 3828 chap. 3.1) */ + UDP_STATS_INC(udp.chkerr); + UDP_STATS_INC(udp.drop); + snmp_inc_udpinerrors(); + pbuf_free(p); + goto end; + } + } + if (inet_chksum_pseudo_partial(p, (struct ip_addr *)&(iphdr->src), + (struct ip_addr *)&(iphdr->dest), + IP_PROTO_UDPLITE, p->tot_len, chklen) != 0) { + LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, + ("udp_input: UDP Lite datagram discarded due to failing checksum\n")); + UDP_STATS_INC(udp.chkerr); + UDP_STATS_INC(udp.drop); + snmp_inc_udpinerrors(); + pbuf_free(p); + goto end; + } +#endif /* CHECKSUM_CHECK_UDP */ + } else +#endif /* LWIP_UDPLITE */ + { +#if CHECKSUM_CHECK_UDP + if (udphdr->chksum != 0) { + if (inet_chksum_pseudo(p, (struct ip_addr *)&(iphdr->src), + (struct ip_addr *)&(iphdr->dest), + IP_PROTO_UDP, p->tot_len) != 0) { + LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, + ("udp_input: UDP datagram discarded due to failing checksum\n")); + UDP_STATS_INC(udp.chkerr); + UDP_STATS_INC(udp.drop); + snmp_inc_udpinerrors(); + pbuf_free(p); + goto end; + } + } +#endif /* CHECKSUM_CHECK_UDP */ + } + if(pbuf_header(p, -UDP_HLEN)) { + /* Can we cope with this failing? Just assert for now */ + LWIP_ASSERT("pbuf_header failed\n", 0); + UDP_STATS_INC(udp.drop); + snmp_inc_udpinerrors(); + pbuf_free(p); + goto end; + } + if (pcb != NULL) { + snmp_inc_udpindatagrams(); + /* callback */ + if (pcb->recv != NULL) { + /* now the recv function is responsible for freeing p */ + pcb->recv(pcb->recv_arg, pcb, p, &iphdr->src, src); + } else { + /* no recv function registered? then we have to free the pbuf! */ + pbuf_free(p); + goto end; + } + } else { + LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE, ("udp_input: not for us.\n")); + +#if LWIP_ICMP + /* No match was found, send ICMP destination port unreachable unless + destination address was broadcast/multicast. */ + if (!broadcast && + !ip_addr_ismulticast(&iphdr->dest)) { + /* move payload pointer back to ip header */ + pbuf_header(p, (IPH_HL(iphdr) * 4) + UDP_HLEN); + LWIP_ASSERT("p->payload == iphdr", (p->payload == iphdr)); + icmp_dest_unreach(p, ICMP_DUR_PORT); + } +#endif /* LWIP_ICMP */ + UDP_STATS_INC(udp.proterr); + UDP_STATS_INC(udp.drop); + snmp_inc_udpnoports(); + pbuf_free(p); + } + } else { + pbuf_free(p); + } +end: + PERF_STOP("udp_input"); +} + +/** + * Send data using UDP. + * + * @param pcb UDP PCB used to send the data. + * @param p chain of pbuf's to be sent. + * + * The datagram will be sent to the current remote_ip & remote_port + * stored in pcb. If the pcb is not bound to a port, it will + * automatically be bound to a random port. + * + * @return lwIP error code. + * - ERR_OK. Successful. No error occured. + * - ERR_MEM. Out of memory. + * - ERR_RTE. Could not find route to destination address. + * - More errors could be returned by lower protocol layers. + * + * @see udp_disconnect() udp_sendto() + */ +err_t +udp_send(struct udp_pcb *pcb, struct pbuf *p) +{ + /* send to the packet using remote ip and port stored in the pcb */ + return udp_sendto(pcb, p, &pcb->remote_ip, pcb->remote_port); +} + +/** + * Send data to a specified address using UDP. + * + * @param pcb UDP PCB used to send the data. + * @param p chain of pbuf's to be sent. + * @param dst_ip Destination IP address. + * @param dst_port Destination UDP port. + * + * dst_ip & dst_port are expected to be in the same byte order as in the pcb. + * + * If the PCB already has a remote address association, it will + * be restored after the data is sent. + * + * @return lwIP error code (@see udp_send for possible error codes) + * + * @see udp_disconnect() udp_send() + */ +err_t +udp_sendto(struct udp_pcb *pcb, struct pbuf *p, + struct ip_addr *dst_ip, u16_t dst_port) +{ + struct netif *netif; + + LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE, ("udp_send\n")); + + /* find the outgoing network interface for this packet */ +#if LWIP_IGMP + netif = ip_route((ip_addr_ismulticast(dst_ip))?(&(pcb->multicast_ip)):(dst_ip)); +#else + netif = ip_route(dst_ip); +#endif /* LWIP_IGMP */ + + /* no outgoing network interface could be found? */ + if (netif == NULL) { + LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("udp_send: No route to 0x%"X32_F"\n", dst_ip->addr)); + UDP_STATS_INC(udp.rterr); + return ERR_RTE; + } + return udp_sendto_if(pcb, p, dst_ip, dst_port, netif); +} + +/** + * Send data to a specified address using UDP. + * The netif used for sending can be specified. + * + * This function exists mainly for DHCP, to be able to send UDP packets + * on a netif that is still down. + * + * @param pcb UDP PCB used to send the data. + * @param p chain of pbuf's to be sent. + * @param dst_ip Destination IP address. + * @param dst_port Destination UDP port. + * @param netif the netif used for sending. + * + * dst_ip & dst_port are expected to be in the same byte order as in the pcb. + * + * @return lwIP error code (@see udp_send for possible error codes) + * + * @see udp_disconnect() udp_send() + */ +err_t +udp_sendto_if(struct udp_pcb *pcb, struct pbuf *p, + struct ip_addr *dst_ip, u16_t dst_port, struct netif *netif) +{ + struct udp_hdr *udphdr; + struct ip_addr *src_ip; + err_t err; + struct pbuf *q; /* q will be sent down the stack */ + +#if IP_SOF_BROADCAST + /* broadcast filter? */ + if ( ((pcb->so_options & SOF_BROADCAST) == 0) && ip_addr_isbroadcast(dst_ip, netif) ) { + LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, + ("udp_sendto_if: SOF_BROADCAST not enabled on pcb %p\n", (void *)pcb)); + return ERR_VAL; + } +#endif /* IP_SOF_BROADCAST */ + + /* if the PCB is not yet bound to a port, bind it here */ + if (pcb->local_port == 0) { + LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE, ("udp_send: not yet bound to a port, binding now\n")); + err = udp_bind(pcb, &pcb->local_ip, pcb->local_port); + if (err != ERR_OK) { + LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("udp_send: forced port bind failed\n")); + return err; + } + } + + /* not enough space to add an UDP header to first pbuf in given p chain? */ + if (pbuf_header(p, UDP_HLEN)) { + /* allocate header in a separate new pbuf */ + q = pbuf_alloc(PBUF_IP, UDP_HLEN, PBUF_RAM); + /* new header pbuf could not be allocated? */ + if (q == NULL) { + LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("udp_send: could not allocate header\n")); + return ERR_MEM; + } + /* chain header q in front of given pbuf p */ + pbuf_chain(q, p); + /* first pbuf q points to header pbuf */ + LWIP_DEBUGF(UDP_DEBUG, + ("udp_send: added header pbuf %p before given pbuf %p\n", (void *)q, (void *)p)); + } else { + /* adding space for header within p succeeded */ + /* first pbuf q equals given pbuf */ + q = p; + LWIP_DEBUGF(UDP_DEBUG, ("udp_send: added header in given pbuf %p\n", (void *)p)); + } + LWIP_ASSERT("check that first pbuf can hold struct udp_hdr", + (q->len >= sizeof(struct udp_hdr))); + /* q now represents the packet to be sent */ + udphdr = q->payload; + udphdr->src = htons(pcb->local_port); + udphdr->dest = htons(dst_port); + /* in UDP, 0 checksum means 'no checksum' */ + udphdr->chksum = 0x0000; + + /* PCB local address is IP_ANY_ADDR? */ + if (ip_addr_isany(&pcb->local_ip)) { + /* use outgoing network interface IP address as source address */ + src_ip = &(netif->ip_addr); + } else { + /* check if UDP PCB local IP address is correct + * this could be an old address if netif->ip_addr has changed */ + if (!ip_addr_cmp(&(pcb->local_ip), &(netif->ip_addr))) { + /* local_ip doesn't match, drop the packet */ + if (q != p) { + /* free the header pbuf */ + pbuf_free(q); + q = NULL; + /* p is still referenced by the caller, and will live on */ + } + return ERR_VAL; + } + /* use UDP PCB local IP address as source address */ + src_ip = &(pcb->local_ip); + } + + LWIP_DEBUGF(UDP_DEBUG, ("udp_send: sending datagram of length %"U16_F"\n", q->tot_len)); + +#if LWIP_UDPLITE + /* UDP Lite protocol? */ + if (pcb->flags & UDP_FLAGS_UDPLITE) { + u16_t chklen, chklen_hdr; + LWIP_DEBUGF(UDP_DEBUG, ("udp_send: UDP LITE packet length %"U16_F"\n", q->tot_len)); + /* set UDP message length in UDP header */ + chklen_hdr = chklen = pcb->chksum_len_tx; + if ((chklen < sizeof(struct udp_hdr)) || (chklen > q->tot_len)) { + if (chklen != 0) { + LWIP_DEBUGF(UDP_DEBUG, ("udp_send: UDP LITE pcb->chksum_len is illegal: %"U16_F"\n", chklen)); + } + /* For UDP-Lite, checksum length of 0 means checksum + over the complete packet. (See RFC 3828 chap. 3.1) + At least the UDP-Lite header must be covered by the + checksum, therefore, if chksum_len has an illegal + value, we generate the checksum over the complete + packet to be safe. */ + chklen_hdr = 0; + chklen = q->tot_len; + } + udphdr->len = htons(chklen_hdr); + /* calculate checksum */ +#if CHECKSUM_GEN_UDP + udphdr->chksum = inet_chksum_pseudo_partial(q, src_ip, dst_ip, + IP_PROTO_UDPLITE, q->tot_len, chklen); + /* chksum zero must become 0xffff, as zero means 'no checksum' */ + if (udphdr->chksum == 0x0000) + udphdr->chksum = 0xffff; +#endif /* CHECKSUM_CHECK_UDP */ + /* output to IP */ + LWIP_DEBUGF(UDP_DEBUG, ("udp_send: ip_output_if (,,,,IP_PROTO_UDPLITE,)\n")); +#if LWIP_NETIF_HWADDRHINT + netif->addr_hint = &(pcb->addr_hint); +#endif /* LWIP_NETIF_HWADDRHINT*/ + err = ip_output_if(q, src_ip, dst_ip, pcb->ttl, pcb->tos, IP_PROTO_UDPLITE, netif); +#if LWIP_NETIF_HWADDRHINT + netif->addr_hint = NULL; +#endif /* LWIP_NETIF_HWADDRHINT*/ + } else +#endif /* LWIP_UDPLITE */ + { /* UDP */ + LWIP_DEBUGF(UDP_DEBUG, ("udp_send: UDP packet length %"U16_F"\n", q->tot_len)); + udphdr->len = htons(q->tot_len); + /* calculate checksum */ +#if CHECKSUM_GEN_UDP + if ((pcb->flags & UDP_FLAGS_NOCHKSUM) == 0) { + udphdr->chksum = inet_chksum_pseudo(q, src_ip, dst_ip, IP_PROTO_UDP, q->tot_len); + /* chksum zero must become 0xffff, as zero means 'no checksum' */ + if (udphdr->chksum == 0x0000) udphdr->chksum = 0xffff; + } +#endif /* CHECKSUM_CHECK_UDP */ + LWIP_DEBUGF(UDP_DEBUG, ("udp_send: UDP checksum 0x%04"X16_F"\n", udphdr->chksum)); + LWIP_DEBUGF(UDP_DEBUG, ("udp_send: ip_output_if (,,,,IP_PROTO_UDP,)\n")); + /* output to IP */ +#if LWIP_NETIF_HWADDRHINT + netif->addr_hint = &(pcb->addr_hint); +#endif /* LWIP_NETIF_HWADDRHINT*/ + err = ip_output_if(q, src_ip, dst_ip, pcb->ttl, pcb->tos, IP_PROTO_UDP, netif); +#if LWIP_NETIF_HWADDRHINT + netif->addr_hint = NULL; +#endif /* LWIP_NETIF_HWADDRHINT*/ + } + /* TODO: must this be increased even if error occured? */ + snmp_inc_udpoutdatagrams(); + + /* did we chain a separate header pbuf earlier? */ + if (q != p) { + /* free the header pbuf */ + pbuf_free(q); + q = NULL; + /* p is still referenced by the caller, and will live on */ + } + + UDP_STATS_INC(udp.xmit); + return err; +} + +/** + * Bind an UDP PCB. + * + * @param pcb UDP PCB to be bound with a local address ipaddr and port. + * @param ipaddr local IP address to bind with. Use IP_ADDR_ANY to + * bind to all local interfaces. + * @param port local UDP port to bind with. Use 0 to automatically bind + * to a random port between UDP_LOCAL_PORT_RANGE_START and + * UDP_LOCAL_PORT_RANGE_END. + * + * ipaddr & port are expected to be in the same byte order as in the pcb. + * + * @return lwIP error code. + * - ERR_OK. Successful. No error occured. + * - ERR_USE. The specified ipaddr and port are already bound to by + * another UDP PCB. + * + * @see udp_disconnect() + */ +err_t +udp_bind(struct udp_pcb *pcb, struct ip_addr *ipaddr, u16_t port) +{ + struct udp_pcb *ipcb; + u8_t rebind; + + LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE, ("udp_bind(ipaddr = ")); + ip_addr_debug_print(UDP_DEBUG, ipaddr); + LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE, (", port = %"U16_F")\n", port)); + + rebind = 0; + /* Check for double bind and rebind of the same pcb */ + for (ipcb = udp_pcbs; ipcb != NULL; ipcb = ipcb->next) { + /* is this UDP PCB already on active list? */ + if (pcb == ipcb) { + /* pcb may occur at most once in active list */ + LWIP_ASSERT("rebind == 0", rebind == 0); + /* pcb already in list, just rebind */ + rebind = 1; + } + + /* this code does not allow upper layer to share a UDP port for + listening to broadcast or multicast traffic (See SO_REUSE_ADDR and + SO_REUSE_PORT under *BSD). TODO: See where it fits instead, OR + combine with implementation of UDP PCB flags. Leon Woestenberg. */ +#ifdef LWIP_UDP_TODO + /* port matches that of PCB in list? */ + else + if ((ipcb->local_port == port) && + /* IP address matches, or one is IP_ADDR_ANY? */ + (ip_addr_isany(&(ipcb->local_ip)) || + ip_addr_isany(ipaddr) || + ip_addr_cmp(&(ipcb->local_ip), ipaddr))) { + /* other PCB already binds to this local IP and port */ + LWIP_DEBUGF(UDP_DEBUG, + ("udp_bind: local port %"U16_F" already bound by another pcb\n", port)); + return ERR_USE; + } +#endif + } + + ip_addr_set(&pcb->local_ip, ipaddr); + + /* no port specified? */ + if (port == 0) { +#ifndef UDP_LOCAL_PORT_RANGE_START +#define UDP_LOCAL_PORT_RANGE_START 4096 +#define UDP_LOCAL_PORT_RANGE_END 0x7fff +#endif + port = UDP_LOCAL_PORT_RANGE_START; + ipcb = udp_pcbs; + while ((ipcb != NULL) && (port != UDP_LOCAL_PORT_RANGE_END)) { + if (ipcb->local_port == port) { + /* port is already used by another udp_pcb */ + port++; + /* restart scanning all udp pcbs */ + ipcb = udp_pcbs; + } else + /* go on with next udp pcb */ + ipcb = ipcb->next; + } + if (ipcb != NULL) { + /* no more ports available in local range */ + LWIP_DEBUGF(UDP_DEBUG, ("udp_bind: out of free UDP ports\n")); + return ERR_USE; + } + } + pcb->local_port = port; + snmp_insert_udpidx_tree(pcb); + /* pcb not active yet? */ + if (rebind == 0) { + /* place the PCB on the active list if not already there */ + pcb->next = udp_pcbs; + udp_pcbs = pcb; + } + LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, + ("udp_bind: bound to %"U16_F".%"U16_F".%"U16_F".%"U16_F", port %"U16_F"\n", + (u16_t)((ntohl(pcb->local_ip.addr) >> 24) & 0xff), + (u16_t)((ntohl(pcb->local_ip.addr) >> 16) & 0xff), + (u16_t)((ntohl(pcb->local_ip.addr) >> 8) & 0xff), + (u16_t)(ntohl(pcb->local_ip.addr) & 0xff), pcb->local_port)); + return ERR_OK; +} +/** + * Connect an UDP PCB. + * + * This will associate the UDP PCB with the remote address. + * + * @param pcb UDP PCB to be connected with remote address ipaddr and port. + * @param ipaddr remote IP address to connect with. + * @param port remote UDP port to connect with. + * + * @return lwIP error code + * + * ipaddr & port are expected to be in the same byte order as in the pcb. + * + * The udp pcb is bound to a random local port if not already bound. + * + * @see udp_disconnect() + */ +err_t +udp_connect(struct udp_pcb *pcb, struct ip_addr *ipaddr, u16_t port) +{ + struct udp_pcb *ipcb; + + if (pcb->local_port == 0) { + err_t err = udp_bind(pcb, &pcb->local_ip, pcb->local_port); + if (err != ERR_OK) + return err; + } + + ip_addr_set(&pcb->remote_ip, ipaddr); + pcb->remote_port = port; + pcb->flags |= UDP_FLAGS_CONNECTED; +/** TODO: this functionality belongs in upper layers */ +#ifdef LWIP_UDP_TODO + /* Nail down local IP for netconn_addr()/getsockname() */ + if (ip_addr_isany(&pcb->local_ip) && !ip_addr_isany(&pcb->remote_ip)) { + struct netif *netif; + + if ((netif = ip_route(&(pcb->remote_ip))) == NULL) { + LWIP_DEBUGF(UDP_DEBUG, ("udp_connect: No route to 0x%lx\n", pcb->remote_ip.addr)); + UDP_STATS_INC(udp.rterr); + return ERR_RTE; + } + /** TODO: this will bind the udp pcb locally, to the interface which + is used to route output packets to the remote address. However, we + might want to accept incoming packets on any interface! */ + pcb->local_ip = netif->ip_addr; + } else if (ip_addr_isany(&pcb->remote_ip)) { + pcb->local_ip.addr = 0; + } +#endif + LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, + ("udp_connect: connected to %"U16_F".%"U16_F".%"U16_F".%"U16_F",port %"U16_F"\n", + (u16_t)((ntohl(pcb->remote_ip.addr) >> 24) & 0xff), + (u16_t)((ntohl(pcb->remote_ip.addr) >> 16) & 0xff), + (u16_t)((ntohl(pcb->remote_ip.addr) >> 8) & 0xff), + (u16_t)(ntohl(pcb->remote_ip.addr) & 0xff), pcb->remote_port)); + + /* Insert UDP PCB into the list of active UDP PCBs. */ + for (ipcb = udp_pcbs; ipcb != NULL; ipcb = ipcb->next) { + if (pcb == ipcb) { + /* already on the list, just return */ + return ERR_OK; + } + } + /* PCB not yet on the list, add PCB now */ + pcb->next = udp_pcbs; + udp_pcbs = pcb; + return ERR_OK; +} + +/** + * Disconnect a UDP PCB + * + * @param pcb the udp pcb to disconnect. + */ +void +udp_disconnect(struct udp_pcb *pcb) +{ + /* reset remote address association */ + ip_addr_set(&pcb->remote_ip, IP_ADDR_ANY); + pcb->remote_port = 0; + /* mark PCB as unconnected */ + pcb->flags &= ~UDP_FLAGS_CONNECTED; +} + +/** + * Set a receive callback for a UDP PCB + * + * This callback will be called when receiving a datagram for the pcb. + * + * @param pcb the pcb for wich to set the recv callback + * @param recv function pointer of the callback function + * @param recv_arg additional argument to pass to the callback function + */ +void +udp_recv(struct udp_pcb *pcb, + void (* recv)(void *arg, struct udp_pcb *upcb, struct pbuf *p, + struct ip_addr *addr, u16_t port), + void *recv_arg) +{ + /* remember recv() callback and user data */ + pcb->recv = recv; + pcb->recv_arg = recv_arg; +} + +/** + * Remove an UDP PCB. + * + * @param pcb UDP PCB to be removed. The PCB is removed from the list of + * UDP PCB's and the data structure is freed from memory. + * + * @see udp_new() + */ +void +udp_remove(struct udp_pcb *pcb) +{ + struct udp_pcb *pcb2; + + snmp_delete_udpidx_tree(pcb); + /* pcb to be removed is first in list? */ + if (udp_pcbs == pcb) { + /* make list start at 2nd pcb */ + udp_pcbs = udp_pcbs->next; + /* pcb not 1st in list */ + } else + for (pcb2 = udp_pcbs; pcb2 != NULL; pcb2 = pcb2->next) { + /* find pcb in udp_pcbs list */ + if (pcb2->next != NULL && pcb2->next == pcb) { + /* remove pcb from list */ + pcb2->next = pcb->next; + } + } + memp_free(MEMP_UDP_PCB, pcb); +} + +/** + * Create a UDP PCB. + * + * @return The UDP PCB which was created. NULL if the PCB data structure + * could not be allocated. + * + * @see udp_remove() + */ +struct udp_pcb * +udp_new(void) +{ + struct udp_pcb *pcb; + pcb = memp_malloc(MEMP_UDP_PCB); + /* could allocate UDP PCB? */ + if (pcb != NULL) { + /* UDP Lite: by initializing to all zeroes, chksum_len is set to 0 + * which means checksum is generated over the whole datagram per default + * (recommended as default by RFC 3828). */ + /* initialize PCB to all zeroes */ + memset(pcb, 0, sizeof(struct udp_pcb)); + pcb->ttl = UDP_TTL; + } + return pcb; +} + +#if UDP_DEBUG +/** + * Print UDP header information for debug purposes. + * + * @param udphdr pointer to the udp header in memory. + */ +void +udp_debug_print(struct udp_hdr *udphdr) +{ + LWIP_DEBUGF(UDP_DEBUG, ("UDP header:\n")); + LWIP_DEBUGF(UDP_DEBUG, ("+-------------------------------+\n")); + LWIP_DEBUGF(UDP_DEBUG, ("| %5"U16_F" | %5"U16_F" | (src port, dest port)\n", + ntohs(udphdr->src), ntohs(udphdr->dest))); + LWIP_DEBUGF(UDP_DEBUG, ("+-------------------------------+\n")); + LWIP_DEBUGF(UDP_DEBUG, ("| %5"U16_F" | 0x%04"X16_F" | (len, chksum)\n", + ntohs(udphdr->len), ntohs(udphdr->chksum))); + LWIP_DEBUGF(UDP_DEBUG, ("+-------------------------------+\n")); +} +#endif /* UDP_DEBUG */ + +#endif /* LWIP_UDP */ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/autoip.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/autoip.h new file mode 100644 index 000000000..d5464b709 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/autoip.h @@ -0,0 +1,118 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/** + * @file + * + * AutoIP Automatic LinkLocal IP Configuration + */ + +/* + * + * Copyright (c) 2007 Dominik Spies + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * Author: Dominik Spies + * + * This is a AutoIP implementation for the lwIP TCP/IP stack. It aims to conform + * with RFC 3927. + * + * + * Please coordinate changes and requests with Dominik Spies + * + */ + +#ifndef __LWIP_AUTOIP_H__ +#define __LWIP_AUTOIP_H__ + +#include "lwip/opt.h" + +#if LWIP_AUTOIP /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/netif.h" +#include "lwip/udp.h" +#include "netif/etharp.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* AutoIP Timing */ +#define AUTOIP_TMR_INTERVAL 100 +#define AUTOIP_TICKS_PER_SECOND (1000 / AUTOIP_TMR_INTERVAL) + +/* RFC 3927 Constants */ +#define PROBE_WAIT 1 /* second (initial random delay) */ +#define PROBE_MIN 1 /* second (minimum delay till repeated probe) */ +#define PROBE_MAX 2 /* seconds (maximum delay till repeated probe) */ +#define PROBE_NUM 3 /* (number of probe packets) */ +#define ANNOUNCE_NUM 2 /* (number of announcement packets) */ +#define ANNOUNCE_INTERVAL 2 /* seconds (time between announcement packets) */ +#define ANNOUNCE_WAIT 2 /* seconds (delay before announcing) */ +#define MAX_CONFLICTS 10 /* (max conflicts before rate limiting) */ +#define RATE_LIMIT_INTERVAL 60 /* seconds (delay between successive attempts) */ +#define DEFEND_INTERVAL 10 /* seconds (min. wait between defensive ARPs) */ + +/* AutoIP client states */ +#define AUTOIP_STATE_OFF 0 +#define AUTOIP_STATE_PROBING 1 +#define AUTOIP_STATE_ANNOUNCING 2 +#define AUTOIP_STATE_BOUND 3 + +struct autoip +{ + struct ip_addr llipaddr; /* the currently selected, probed, announced or used LL IP-Address */ + u8_t state; /* current AutoIP state machine state */ + u8_t sent_num; /* sent number of probes or announces, dependent on state */ + u16_t ttw; /* ticks to wait, tick is AUTOIP_TMR_INTERVAL long */ + u8_t lastconflict; /* ticks until a conflict can be solved by defending */ + u8_t tried_llipaddr; /* total number of probed/used Link Local IP-Addresses */ +}; + + +/** Init srand, has to be called before entering mainloop */ +void autoip_init(void); + +/** Start AutoIP client */ +err_t autoip_start(struct netif *netif); + +/** Stop AutoIP client */ +err_t autoip_stop(struct netif *netif); + +/** Handles every incoming ARP Packet, called by etharp_arp_input */ +void autoip_arp_reply(struct netif *netif, struct etharp_hdr *hdr); + +/** Has to be called in loop every AUTOIP_TMR_INTERVAL milliseconds */ +void autoip_tmr(void); + +/** Handle a possible change in the network configuration */ +void autoip_network_changed(struct netif *netif); + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_AUTOIP */ + +#endif /* __LWIP_AUTOIP_H__ */ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/icmp.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/icmp.h new file mode 100644 index 000000000..3f917ba04 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/icmp.h @@ -0,0 +1,113 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIP_ICMP_H__ +#define __LWIP_ICMP_H__ + +#include "lwip/opt.h" +#include "lwip/pbuf.h" +#include "lwip/ip_addr.h" +#include "lwip/netif.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define ICMP_ER 0 /* echo reply */ +#define ICMP_DUR 3 /* destination unreachable */ +#define ICMP_SQ 4 /* source quench */ +#define ICMP_RD 5 /* redirect */ +#define ICMP_ECHO 8 /* echo */ +#define ICMP_TE 11 /* time exceeded */ +#define ICMP_PP 12 /* parameter problem */ +#define ICMP_TS 13 /* timestamp */ +#define ICMP_TSR 14 /* timestamp reply */ +#define ICMP_IRQ 15 /* information request */ +#define ICMP_IR 16 /* information reply */ + +enum icmp_dur_type { + ICMP_DUR_NET = 0, /* net unreachable */ + ICMP_DUR_HOST = 1, /* host unreachable */ + ICMP_DUR_PROTO = 2, /* protocol unreachable */ + ICMP_DUR_PORT = 3, /* port unreachable */ + ICMP_DUR_FRAG = 4, /* fragmentation needed and DF set */ + ICMP_DUR_SR = 5 /* source route failed */ +}; + +enum icmp_te_type { + ICMP_TE_TTL = 0, /* time to live exceeded in transit */ + ICMP_TE_FRAG = 1 /* fragment reassembly time exceeded */ +}; + +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +/** This is the standard ICMP header only that the u32_t data + * is splitted to two u16_t like ICMP echo needs it. + * This header is also used for other ICMP types that do not + * use the data part. + */ +PACK_STRUCT_BEGIN +struct icmp_echo_hdr { + PACK_STRUCT_FIELD(u8_t type); + PACK_STRUCT_FIELD(u8_t code); + PACK_STRUCT_FIELD(u16_t chksum); + PACK_STRUCT_FIELD(u16_t id); + PACK_STRUCT_FIELD(u16_t seqno); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +#define ICMPH_TYPE(hdr) ((hdr)->type) +#define ICMPH_CODE(hdr) ((hdr)->code) + +/** Combines type and code to an u16_t */ +#define ICMPH_TYPE_SET(hdr, t) ((hdr)->type = (t)) +#define ICMPH_CODE_SET(hdr, c) ((hdr)->code = (c)) + + +#if LWIP_ICMP /* don't build if not configured for use in lwipopts.h */ + +void icmp_input(struct pbuf *p, struct netif *inp); +void icmp_dest_unreach(struct pbuf *p, enum icmp_dur_type t); +void icmp_time_exceeded(struct pbuf *p, enum icmp_te_type t); + +#endif /* LWIP_ICMP */ + +#ifdef __cplusplus +} +#endif + +#endif /* __LWIP_ICMP_H__ */ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/igmp.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/igmp.h new file mode 100644 index 000000000..da67e7508 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/igmp.h @@ -0,0 +1,164 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Copyright (c) 2002 CITEL Technologies Ltd. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of CITEL Technologies Ltd nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY CITEL TECHNOLOGIES AND CONTRIBUTORS ``AS IS'' + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL CITEL TECHNOLOGIES OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is a contribution to the lwIP TCP/IP stack. + * The Swedish Institute of Computer Science and Adam Dunkels + * are specifically granted permission to redistribute this + * source code. +*/ + +#ifndef __LWIP_IGMP_H__ +#define __LWIP_IGMP_H__ + +#include "lwip/opt.h" +#include "lwip/ip_addr.h" +#include "lwip/netif.h" +#include "lwip/pbuf.h" + +#if LWIP_IGMP /* don't build if not configured for use in lwipopts.h */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * IGMP constants + */ +#define IP_PROTO_IGMP 2 +#define IGMP_TTL 1 +#define IGMP_MINLEN 8 +#define ROUTER_ALERT 0x9404 +#define ROUTER_ALERTLEN 4 + +/* + * IGMP message types, including version number. + */ +#define IGMP_MEMB_QUERY 0x11 /* Membership query */ +#define IGMP_V1_MEMB_REPORT 0x12 /* Ver. 1 membership report */ +#define IGMP_V2_MEMB_REPORT 0x16 /* Ver. 2 membership report */ +#define IGMP_LEAVE_GROUP 0x17 /* Leave-group message */ + +/* IGMP timer */ +#define IGMP_TMR_INTERVAL 100 /* Milliseconds */ +#define IGMP_V1_DELAYING_MEMBER_TMR (1000/IGMP_TMR_INTERVAL) +#define IGMP_JOIN_DELAYING_MEMBER_TMR (500 /IGMP_TMR_INTERVAL) + +/* MAC Filter Actions */ +#define IGMP_DEL_MAC_FILTER 0 +#define IGMP_ADD_MAC_FILTER 1 + +/* Group membership states */ +#define IGMP_GROUP_NON_MEMBER 0 +#define IGMP_GROUP_DELAYING_MEMBER 1 +#define IGMP_GROUP_IDLE_MEMBER 2 + +/* + * IGMP packet format. + */ +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct igmp_msg { + PACK_STRUCT_FIELD(u8_t igmp_msgtype); + PACK_STRUCT_FIELD(u8_t igmp_maxresp); + PACK_STRUCT_FIELD(u16_t igmp_checksum); + PACK_STRUCT_FIELD(struct ip_addr igmp_group_address); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +/* + * now a group structure - there is + * a list of groups for each interface + * these should really be linked from the interface, but + * if we keep them separate we will not affect the lwip original code + * too much + * + * There will be a group for the all systems group address but this + * will not run the state machine as it is used to kick off reports + * from all the other groups + */ + +struct igmp_group { + struct igmp_group *next; + struct netif *interface; + struct ip_addr group_address; + u8_t last_reporter_flag; /* signifies we were the last person to report */ + u8_t group_state; + u16_t timer; + u8_t use; /* counter of simultaneous uses */ +}; + + +/* Prototypes */ +void igmp_init(void); + +err_t igmp_start( struct netif *netif); + +err_t igmp_stop( struct netif *netif); + +void igmp_report_groups( struct netif *netif); + +struct igmp_group *igmp_lookfor_group( struct netif *ifp, struct ip_addr *addr); + +struct igmp_group *igmp_lookup_group( struct netif *ifp, struct ip_addr *addr); + +err_t igmp_remove_group( struct igmp_group *group); + +void igmp_input( struct pbuf *p, struct netif *inp, struct ip_addr *dest); + +err_t igmp_joingroup( struct ip_addr *ifaddr, struct ip_addr *groupaddr); + +err_t igmp_leavegroup( struct ip_addr *ifaddr, struct ip_addr *groupaddr); + +void igmp_tmr(void); + +void igmp_timeout( struct igmp_group *group); + +void igmp_start_timer( struct igmp_group *group, u8_t max_time); + +void igmp_stop_timer( struct igmp_group *group); + +void igmp_delaying_member( struct igmp_group *group, u8_t maxresp); + +err_t igmp_ip_output_if( struct pbuf *p, struct ip_addr *src, struct ip_addr *dest, u8_t ttl, u8_t proto, struct netif *netif); + +void igmp_send( struct igmp_group *group, u8_t type); + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_IGMP */ + +#endif /* __LWIP_IGMP_H__ */ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/inet.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/inet.h new file mode 100644 index 000000000..903afdf0f --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/inet.h @@ -0,0 +1,105 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIP_INET_H__ +#define __LWIP_INET_H__ + +#include "lwip/opt.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* For compatibility with BSD code */ +struct in_addr { + u32_t s_addr; +}; + +#define INADDR_NONE ((u32_t)0xffffffffUL) /* 255.255.255.255 */ +#define INADDR_LOOPBACK ((u32_t)0x7f000001UL) /* 127.0.0.1 */ +#define INADDR_ANY ((u32_t)0x00000000UL) /* 0.0.0.0 */ +#define INADDR_BROADCAST ((u32_t)0xffffffffUL) /* 255.255.255.255 */ + +u32_t inet_addr(const char *cp); +int inet_aton(const char *cp, struct in_addr *addr); +char *inet_ntoa(struct in_addr addr); /* returns ptr to static buffer; not reentrant! */ + +#ifdef htons +#undef htons +#endif /* htons */ +#ifdef htonl +#undef htonl +#endif /* htonl */ +#ifdef ntohs +#undef ntohs +#endif /* ntohs */ +#ifdef ntohl +#undef ntohl +#endif /* ntohl */ + +#ifndef LWIP_PLATFORM_BYTESWAP +#define LWIP_PLATFORM_BYTESWAP 0 +#endif + +#if BYTE_ORDER == BIG_ENDIAN +#define htons(x) (x) +#define ntohs(x) (x) +#define htonl(x) (x) +#define ntohl(x) (x) +#else /* BYTE_ORDER != BIG_ENDIAN */ +#ifdef LWIP_PREFIX_BYTEORDER_FUNCS +/* workaround for naming collisions on some platforms */ +#define htons lwip_htons +#define ntohs lwip_ntohs +#define htonl lwip_htonl +#define ntohl lwip_ntohl +#endif /* LWIP_PREFIX_BYTEORDER_FUNCS */ +#if LWIP_PLATFORM_BYTESWAP +#define htons(x) LWIP_PLATFORM_HTONS(x) +#define ntohs(x) LWIP_PLATFORM_HTONS(x) +#define htonl(x) LWIP_PLATFORM_HTONL(x) +#define ntohl(x) LWIP_PLATFORM_HTONL(x) +#else /* LWIP_PLATFORM_BYTESWAP */ +u16_t htons(u16_t x); +u16_t ntohs(u16_t x); +u32_t htonl(u32_t x); +u32_t ntohl(u32_t x); +#endif /* LWIP_PLATFORM_BYTESWAP */ + +#endif /* BYTE_ORDER == BIG_ENDIAN */ + +#ifdef __cplusplus +} +#endif + +#endif /* __LWIP_INET_H__ */ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/inet_chksum.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/inet_chksum.h new file mode 100644 index 000000000..6f5b1b63a --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/inet_chksum.h @@ -0,0 +1,62 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIP_INET_CHKSUM_H__ +#define __LWIP_INET_CHKSUM_H__ + +#include "lwip/opt.h" + +#include "lwip/pbuf.h" +#include "lwip/ip_addr.h" + +#ifdef __cplusplus +extern "C" { +#endif + +u16_t inet_chksum(void *dataptr, u16_t len); +u16_t inet_chksum_pbuf(struct pbuf *p); +u16_t inet_chksum_pseudo(struct pbuf *p, + struct ip_addr *src, struct ip_addr *dest, + u8_t proto, u16_t proto_len); +#if LWIP_UDPLITE +u16_t inet_chksum_pseudo_partial(struct pbuf *p, + struct ip_addr *src, struct ip_addr *dest, + u8_t proto, u16_t proto_len, u16_t chksum_len); +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* __LWIP_INET_H__ */ + diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/ip.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/ip.h new file mode 100644 index 000000000..6b2cdee17 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/ip.h @@ -0,0 +1,200 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIP_IP_H__ +#define __LWIP_IP_H__ + +#include "lwip/opt.h" + +#include "lwip/def.h" +#include "lwip/pbuf.h" +#include "lwip/ip_addr.h" +#include "lwip/err.h" +#include "lwip/netif.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** Currently, the function ip_output_if_opt() is only used with IGMP */ +#define IP_OPTIONS_SEND LWIP_IGMP + +#define IP_HLEN 20 + +#define IP_PROTO_ICMP 1 +#define IP_PROTO_UDP 17 +#define IP_PROTO_UDPLITE 136 +#define IP_PROTO_TCP 6 + +/* This is passed as the destination address to ip_output_if (not + to ip_output), meaning that an IP header already is constructed + in the pbuf. This is used when TCP retransmits. */ +#ifdef IP_HDRINCL +#undef IP_HDRINCL +#endif /* IP_HDRINCL */ +#define IP_HDRINCL NULL + +#if LWIP_NETIF_HWADDRHINT +#define IP_PCB_ADDRHINT ;u8_t addr_hint +#else +#define IP_PCB_ADDRHINT +#endif /* LWIP_NETIF_HWADDRHINT */ + +/* This is the common part of all PCB types. It needs to be at the + beginning of a PCB type definition. It is located here so that + changes to this common part are made in one location instead of + having to change all PCB structs. */ +#define IP_PCB \ + /* ip addresses in network byte order */ \ + struct ip_addr local_ip; \ + struct ip_addr remote_ip; \ + /* Socket options */ \ + u16_t so_options; \ + /* Type Of Service */ \ + u8_t tos; \ + /* Time To Live */ \ + u8_t ttl \ + /* link layer address resolution hint */ \ + IP_PCB_ADDRHINT + +struct ip_pcb { +/* Common members of all PCB types */ + IP_PCB; +}; + +/* + * Option flags per-socket. These are the same like SO_XXX. + */ +#define SOF_DEBUG (u16_t)0x0001U /* turn on debugging info recording */ +#define SOF_ACCEPTCONN (u16_t)0x0002U /* socket has had listen() */ +#define SOF_REUSEADDR (u16_t)0x0004U /* allow local address reuse */ +#define SOF_KEEPALIVE (u16_t)0x0008U /* keep connections alive */ +#define SOF_DONTROUTE (u16_t)0x0010U /* just use interface addresses */ +#define SOF_BROADCAST (u16_t)0x0020U /* permit to send and to receive broadcast messages (see IP_SOF_BROADCAST option) */ +#define SOF_USELOOPBACK (u16_t)0x0040U /* bypass hardware when possible */ +#define SOF_LINGER (u16_t)0x0080U /* linger on close if data present */ +#define SOF_OOBINLINE (u16_t)0x0100U /* leave received OOB data in line */ +#define SOF_REUSEPORT (u16_t)0x0200U /* allow local address & port reuse */ + + +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct ip_hdr { + /* version / header length / type of service */ + PACK_STRUCT_FIELD(u16_t _v_hl_tos); + /* total length */ + PACK_STRUCT_FIELD(u16_t _len); + /* identification */ + PACK_STRUCT_FIELD(u16_t _id); + /* fragment offset field */ + PACK_STRUCT_FIELD(u16_t _offset); +#define IP_RF 0x8000 /* reserved fragment flag */ +#define IP_DF 0x4000 /* dont fragment flag */ +#define IP_MF 0x2000 /* more fragments flag */ +#define IP_OFFMASK 0x1fff /* mask for fragmenting bits */ + /* time to live / protocol*/ + PACK_STRUCT_FIELD(u16_t _ttl_proto); + /* checksum */ + PACK_STRUCT_FIELD(u16_t _chksum); + /* source and destination IP addresses */ + PACK_STRUCT_FIELD(struct ip_addr src); + PACK_STRUCT_FIELD(struct ip_addr dest); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +#define IPH_V(hdr) (ntohs((hdr)->_v_hl_tos) >> 12) +#define IPH_HL(hdr) ((ntohs((hdr)->_v_hl_tos) >> 8) & 0x0f) +#define IPH_TOS(hdr) (ntohs((hdr)->_v_hl_tos) & 0xff) +#define IPH_LEN(hdr) ((hdr)->_len) +#define IPH_ID(hdr) ((hdr)->_id) +#define IPH_OFFSET(hdr) ((hdr)->_offset) +#define IPH_TTL(hdr) (ntohs((hdr)->_ttl_proto) >> 8) +#define IPH_PROTO(hdr) (ntohs((hdr)->_ttl_proto) & 0xff) +#define IPH_CHKSUM(hdr) ((hdr)->_chksum) + +#define IPH_VHLTOS_SET(hdr, v, hl, tos) (hdr)->_v_hl_tos = (htons(((v) << 12) | ((hl) << 8) | (tos))) +#define IPH_LEN_SET(hdr, len) (hdr)->_len = (len) +#define IPH_ID_SET(hdr, id) (hdr)->_id = (id) +#define IPH_OFFSET_SET(hdr, off) (hdr)->_offset = (off) +#define IPH_TTL_SET(hdr, ttl) (hdr)->_ttl_proto = (htons(IPH_PROTO(hdr) | ((u16_t)(ttl) << 8))) +#define IPH_PROTO_SET(hdr, proto) (hdr)->_ttl_proto = (htons((proto) | (IPH_TTL(hdr) << 8))) +#define IPH_CHKSUM_SET(hdr, chksum) (hdr)->_chksum = (chksum) + +/** The interface that provided the packet for the current callback invocation. */ +extern struct netif *current_netif; +/** Header of the input packet currently being processed. */ +extern const struct ip_hdr *current_header; + +#define ip_init() /* Compatibility define, not init needed. */ +struct netif *ip_route(struct ip_addr *dest); +err_t ip_input(struct pbuf *p, struct netif *inp); +err_t ip_output(struct pbuf *p, struct ip_addr *src, struct ip_addr *dest, + u8_t ttl, u8_t tos, u8_t proto); +err_t ip_output_if(struct pbuf *p, struct ip_addr *src, struct ip_addr *dest, + u8_t ttl, u8_t tos, u8_t proto, + struct netif *netif); +#if LWIP_NETIF_HWADDRHINT +err_t ip_output_hinted(struct pbuf *p, struct ip_addr *src, struct ip_addr *dest, + u8_t ttl, u8_t tos, u8_t proto, u8_t *addr_hint); +#endif /* LWIP_NETIF_HWADDRHINT */ +#if IP_OPTIONS_SEND +err_t ip_output_if_opt(struct pbuf *p, struct ip_addr *src, struct ip_addr *dest, + u8_t ttl, u8_t tos, u8_t proto, struct netif *netif, void *ip_options, + u16_t optlen); +#endif /* IP_OPTIONS_SEND */ +/** Get the interface that received the current packet. + * This function must only be called from a receive callback (udp_recv, + * raw_recv, tcp_accept). It will return NULL otherwise. */ +#define ip_current_netif() (current_netif) +/** Get the IP header of the current packet. + * This function must only be called from a receive callback (udp_recv, + * raw_recv, tcp_accept). It will return NULL otherwise. */ +#define ip_current_header() (current_header) +#if IP_DEBUG +void ip_debug_print(struct pbuf *p); +#else +#define ip_debug_print(p) +#endif /* IP_DEBUG */ + +#ifdef __cplusplus +} +#endif + +#endif /* __LWIP_IP_H__ */ + + diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/ip_addr.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/ip_addr.h new file mode 100644 index 000000000..5fbc44d14 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/ip_addr.h @@ -0,0 +1,175 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIP_IP_ADDR_H__ +#define __LWIP_IP_ADDR_H__ + +#include "lwip/opt.h" + +#include "lwip/inet.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct ip_addr { + PACK_STRUCT_FIELD(u32_t addr); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +/* + * struct ipaddr2 is used in the definition of the ARP packet format in + * order to support compilers that don't have structure packing. + */ +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct ip_addr2 { + PACK_STRUCT_FIELD(u16_t addrw[2]); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +struct netif; + +extern const struct ip_addr ip_addr_any; +extern const struct ip_addr ip_addr_broadcast; + +/** IP_ADDR_ can be used as a fixed IP address + * for the wildcard and the broadcast address + */ +#define IP_ADDR_ANY ((struct ip_addr *)&ip_addr_any) +#define IP_ADDR_BROADCAST ((struct ip_addr *)&ip_addr_broadcast) + +/* Definitions of the bits in an Internet address integer. + + On subnets, host and network parts are found according to + the subnet mask, not these masks. */ + +#define IN_CLASSA(a) ((((u32_t)(a)) & 0x80000000UL) == 0) +#define IN_CLASSA_NET 0xff000000 +#define IN_CLASSA_NSHIFT 24 +#define IN_CLASSA_HOST (0xffffffff & ~IN_CLASSA_NET) +#define IN_CLASSA_MAX 128 + +#define IN_CLASSB(a) ((((u32_t)(a)) & 0xc0000000UL) == 0x80000000UL) +#define IN_CLASSB_NET 0xffff0000 +#define IN_CLASSB_NSHIFT 16 +#define IN_CLASSB_HOST (0xffffffff & ~IN_CLASSB_NET) +#define IN_CLASSB_MAX 65536 + +#define IN_CLASSC(a) ((((u32_t)(a)) & 0xe0000000UL) == 0xc0000000UL) +#define IN_CLASSC_NET 0xffffff00 +#define IN_CLASSC_NSHIFT 8 +#define IN_CLASSC_HOST (0xffffffff & ~IN_CLASSC_NET) + +#define IN_CLASSD(a) (((u32_t)(a) & 0xf0000000UL) == 0xe0000000UL) +#define IN_CLASSD_NET 0xf0000000 /* These ones aren't really */ +#define IN_CLASSD_NSHIFT 28 /* net and host fields, but */ +#define IN_CLASSD_HOST 0x0fffffff /* routing needn't know. */ +#define IN_MULTICAST(a) IN_CLASSD(a) + +#define IN_EXPERIMENTAL(a) (((u32_t)(a) & 0xf0000000UL) == 0xf0000000UL) +#define IN_BADCLASS(a) (((u32_t)(a) & 0xf0000000UL) == 0xf0000000UL) + +#define IN_LOOPBACKNET 127 /* official! */ + +#define IP4_ADDR(ipaddr, a,b,c,d) \ + (ipaddr)->addr = htonl(((u32_t)((a) & 0xff) << 24) | \ + ((u32_t)((b) & 0xff) << 16) | \ + ((u32_t)((c) & 0xff) << 8) | \ + (u32_t)((d) & 0xff)) + +#define ip_addr_set(dest, src) (dest)->addr = \ + ((src) == NULL? 0:\ + (src)->addr) +/** + * Determine if two address are on the same network. + * + * @arg addr1 IP address 1 + * @arg addr2 IP address 2 + * @arg mask network identifier mask + * @return !0 if the network identifiers of both address match + */ +#define ip_addr_netcmp(addr1, addr2, mask) (((addr1)->addr & \ + (mask)->addr) == \ + ((addr2)->addr & \ + (mask)->addr)) +#define ip_addr_cmp(addr1, addr2) ((addr1)->addr == (addr2)->addr) + +#define ip_addr_isany(addr1) ((addr1) == NULL || (addr1)->addr == 0) + +u8_t ip_addr_isbroadcast(struct ip_addr *, struct netif *); + +#define ip_addr_ismulticast(addr1) (((addr1)->addr & ntohl(0xf0000000UL)) == ntohl(0xe0000000UL)) + +#define ip_addr_islinklocal(addr1) (((addr1)->addr & ntohl(0xffff0000UL)) == ntohl(0xa9fe0000UL)) + +#define ip_addr_debug_print(debug, ipaddr) \ + LWIP_DEBUGF(debug, ("%"U16_F".%"U16_F".%"U16_F".%"U16_F, \ + ipaddr != NULL ? \ + (u16_t)(ntohl((ipaddr)->addr) >> 24) & 0xff : 0, \ + ipaddr != NULL ? \ + (u16_t)(ntohl((ipaddr)->addr) >> 16) & 0xff : 0, \ + ipaddr != NULL ? \ + (u16_t)(ntohl((ipaddr)->addr) >> 8) & 0xff : 0, \ + ipaddr != NULL ? \ + (u16_t)ntohl((ipaddr)->addr) & 0xff : 0)) + +/* These are cast to u16_t, with the intent that they are often arguments + * to printf using the U16_F format from cc.h. */ +#define ip4_addr1(ipaddr) ((u16_t)(ntohl((ipaddr)->addr) >> 24) & 0xff) +#define ip4_addr2(ipaddr) ((u16_t)(ntohl((ipaddr)->addr) >> 16) & 0xff) +#define ip4_addr3(ipaddr) ((u16_t)(ntohl((ipaddr)->addr) >> 8) & 0xff) +#define ip4_addr4(ipaddr) ((u16_t)(ntohl((ipaddr)->addr)) & 0xff) + +/** + * Same as inet_ntoa() but takes a struct ip_addr* + */ +#define ip_ntoa(addr) ((addr != NULL) ? inet_ntoa(*((struct in_addr*)(addr))) : "NULL") + +#ifdef __cplusplus +} +#endif + +#endif /* __LWIP_IP_ADDR_H__ */ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/ip_frag.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/ip_frag.h new file mode 100644 index 000000000..adc6e9195 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/ip_frag.h @@ -0,0 +1,78 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Jani Monoses + * + */ + +#ifndef __LWIP_IP_FRAG_H__ +#define __LWIP_IP_FRAG_H__ + +#include "lwip/opt.h" +#include "lwip/err.h" +#include "lwip/pbuf.h" +#include "lwip/netif.h" +#include "lwip/ip_addr.h" +#include "lwip/ip.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#if IP_REASSEMBLY +/* The IP reassembly timer interval in milliseconds. */ +#define IP_TMR_INTERVAL 1000 + +/* IP reassembly helper struct. + * This is exported because memp needs to know the size. + */ +struct ip_reassdata { + struct ip_reassdata *next; + struct pbuf *p; + struct ip_hdr iphdr; + u16_t datagram_len; + u8_t flags; + u8_t timer; +}; + +void ip_reass_init(void); +void ip_reass_tmr(void); +struct pbuf * ip_reass(struct pbuf *p); +#endif /* IP_REASSEMBLY */ + +#if IP_FRAG +err_t ip_frag(struct pbuf *p, struct netif *netif, struct ip_addr *dest); +#endif /* IP_FRAG */ + +#ifdef __cplusplus +} +#endif + +#endif /* __LWIP_IP_FRAG_H__ */ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/api.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/api.h new file mode 100644 index 000000000..7d2c9e6ec --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/api.h @@ -0,0 +1,224 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIP_API_H__ +#define __LWIP_API_H__ + +#include "lwip/opt.h" + +#if LWIP_NETCONN /* don't build if not configured for use in lwipopts.h */ + +#include /* for size_t */ + +#include "lwip/netbuf.h" +#include "lwip/sys.h" +#include "lwip/ip_addr.h" +#include "lwip/err.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Throughout this file, IP addresses and port numbers are expected to be in + * the same byte order as in the corresponding pcb. + */ + +/* Flags for netconn_write */ +#define NETCONN_NOFLAG 0x00 +#define NETCONN_NOCOPY 0x00 /* Only for source code compatibility */ +#define NETCONN_COPY 0x01 +#define NETCONN_MORE 0x02 + +/* Helpers to process several netconn_types by the same code */ +#define NETCONNTYPE_GROUP(t) (t&0xF0) +#define NETCONNTYPE_DATAGRAM(t) (t&0xE0) + +enum netconn_type { + NETCONN_INVALID = 0, + /* NETCONN_TCP Group */ + NETCONN_TCP = 0x10, + /* NETCONN_UDP Group */ + NETCONN_UDP = 0x20, + NETCONN_UDPLITE = 0x21, + NETCONN_UDPNOCHKSUM= 0x22, + /* NETCONN_RAW Group */ + NETCONN_RAW = 0x40 +}; + +enum netconn_state { + NETCONN_NONE, + NETCONN_WRITE, + NETCONN_LISTEN, + NETCONN_CONNECT, + NETCONN_CLOSE +}; + +enum netconn_evt { + NETCONN_EVT_RCVPLUS, + NETCONN_EVT_RCVMINUS, + NETCONN_EVT_SENDPLUS, + NETCONN_EVT_SENDMINUS +}; + +#if LWIP_IGMP +enum netconn_igmp { + NETCONN_JOIN, + NETCONN_LEAVE +}; +#endif /* LWIP_IGMP */ + +/* forward-declare some structs to avoid to include their headers */ +struct ip_pcb; +struct tcp_pcb; +struct udp_pcb; +struct raw_pcb; +struct netconn; + +/** A callback prototype to inform about events for a netconn */ +typedef void (* netconn_callback)(struct netconn *, enum netconn_evt, u16_t len); + +/** A netconn descriptor */ +struct netconn { + /** type of the netconn (TCP, UDP or RAW) */ + enum netconn_type type; + /** current state of the netconn */ + enum netconn_state state; + /** the lwIP internal protocol control block */ + union { + struct ip_pcb *ip; + struct tcp_pcb *tcp; + struct udp_pcb *udp; + struct raw_pcb *raw; + } pcb; + /** the last error this netconn had */ + err_t err; + /** sem that is used to synchroneously execute functions in the core context */ + sys_sem_t op_completed; + /** mbox where received packets are stored until they are fetched + by the netconn application thread (can grow quite big) */ + sys_mbox_t recvmbox; + /** mbox where new connections are stored until processed + by the application thread */ + sys_mbox_t acceptmbox; + /** only used for socket layer */ + int socket; +#if LWIP_SO_RCVTIMEO + /** timeout to wait for new data to be received + (or connections to arrive for listening netconns) */ + int recv_timeout; +#endif /* LWIP_SO_RCVTIMEO */ +#if LWIP_SO_RCVBUF + /** maximum amount of bytes queued in recvmbox */ + int recv_bufsize; +#endif /* LWIP_SO_RCVBUF */ + s16_t recv_avail; +#if LWIP_TCP + /** TCP: when data passed to netconn_write doesn't fit into the send buffer, + this temporarily stores the message. */ + struct api_msg_msg *write_msg; + /** TCP: when data passed to netconn_write doesn't fit into the send buffer, + this temporarily stores how much is already sent. */ + size_t write_offset; +#if LWIP_TCPIP_CORE_LOCKING + /** TCP: when data passed to netconn_write doesn't fit into the send buffer, + this temporarily stores whether to wake up the original application task + if data couldn't be sent in the first try. */ + u8_t write_delayed; +#endif /* LWIP_TCPIP_CORE_LOCKING */ +#endif /* LWIP_TCP */ + /** A callback function that is informed about events for this netconn */ + netconn_callback callback; +}; + +/* Register an Network connection event */ +#define API_EVENT(c,e,l) if (c->callback) { \ + (*c->callback)(c, e, l); \ + } + +/* Network connection functions: */ +#define netconn_new(t) netconn_new_with_proto_and_callback(t, 0, NULL) +#define netconn_new_with_callback(t, c) netconn_new_with_proto_and_callback(t, 0, c) +struct +netconn *netconn_new_with_proto_and_callback(enum netconn_type t, u8_t proto, + netconn_callback callback); +err_t netconn_delete (struct netconn *conn); +/** Get the type of a netconn (as enum netconn_type). */ +#define netconn_type(conn) (conn->type) + +err_t netconn_getaddr (struct netconn *conn, + struct ip_addr *addr, + u16_t *port, + u8_t local); +#define netconn_peer(c,i,p) netconn_getaddr(c,i,p,0) +#define netconn_addr(c,i,p) netconn_getaddr(c,i,p,1) + +err_t netconn_bind (struct netconn *conn, + struct ip_addr *addr, + u16_t port); +err_t netconn_connect (struct netconn *conn, + struct ip_addr *addr, + u16_t port); +err_t netconn_disconnect (struct netconn *conn); +err_t netconn_listen_with_backlog(struct netconn *conn, u8_t backlog); +#define netconn_listen(conn) netconn_listen_with_backlog(conn, TCP_DEFAULT_LISTEN_BACKLOG) +struct netconn * netconn_accept (struct netconn *conn); +struct netbuf * netconn_recv (struct netconn *conn); +err_t netconn_sendto (struct netconn *conn, + struct netbuf *buf, struct ip_addr *addr, u16_t port); +err_t netconn_send (struct netconn *conn, + struct netbuf *buf); +err_t netconn_write (struct netconn *conn, + const void *dataptr, size_t size, + u8_t apiflags); +err_t netconn_close (struct netconn *conn); + +#if LWIP_IGMP +err_t netconn_join_leave_group (struct netconn *conn, + struct ip_addr *multiaddr, + struct ip_addr *interface, + enum netconn_igmp join_or_leave); +#endif /* LWIP_IGMP */ +#if LWIP_DNS +err_t netconn_gethostbyname(const char *name, struct ip_addr *addr); +#endif /* LWIP_DNS */ + +#define netconn_err(conn) ((conn)->err) +#define netconn_recv_bufsize(conn) ((conn)->recv_bufsize) + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_NETCONN */ + +#endif /* __LWIP_API_H__ */ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/api_msg.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/api_msg.h new file mode 100644 index 000000000..7718d909b --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/api_msg.h @@ -0,0 +1,164 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIP_API_MSG_H__ +#define __LWIP_API_MSG_H__ + +#include "lwip/opt.h" + +#if LWIP_NETCONN /* don't build if not configured for use in lwipopts.h */ + +#include /* for size_t */ + +#include "lwip/ip_addr.h" +#include "lwip/err.h" +#include "lwip/sys.h" +#include "lwip/igmp.h" +#include "lwip/api.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* IP addresses and port numbers are expected to be in + * the same byte order as in the corresponding pcb. + */ +/** This struct includes everything that is necessary to execute a function + for a netconn in another thread context (mainly used to process netconns + in the tcpip_thread context to be thread safe). */ +struct api_msg_msg { + /** The netconn which to process - always needed: it includes the semaphore + which is used to block the application thread until the function finished. */ + struct netconn *conn; + /** Depending on the executed function, one of these union members is used */ + union { + /** used for do_send */ + struct netbuf *b; + /** used for do_newconn */ + struct { + u8_t proto; + } n; + /** used for do_bind and do_connect */ + struct { + struct ip_addr *ipaddr; + u16_t port; + } bc; + /** used for do_getaddr */ + struct { + struct ip_addr *ipaddr; + u16_t *port; + u8_t local; + } ad; + /** used for do_write */ + struct { + const void *dataptr; + size_t len; + u8_t apiflags; + } w; + /** used for do_recv */ + struct { + u16_t len; + } r; +#if LWIP_IGMP + /** used for do_join_leave_group */ + struct { + struct ip_addr *multiaddr; + struct ip_addr *interface; + enum netconn_igmp join_or_leave; + } jl; +#endif /* LWIP_IGMP */ +#if TCP_LISTEN_BACKLOG + struct { + u8_t backlog; + } lb; +#endif /* TCP_LISTEN_BACKLOG */ + } msg; +}; + +/** This struct contains a function to execute in another thread context and + a struct api_msg_msg that serves as an argument for this function. + This is passed to tcpip_apimsg to execute functions in tcpip_thread context. */ +struct api_msg { + /** function to execute in tcpip_thread context */ + void (* function)(struct api_msg_msg *msg); + /** arguments for this function */ + struct api_msg_msg msg; +}; + +#if LWIP_DNS +/** As do_gethostbyname requires more arguments but doesn't require a netconn, + it has its own struct (to avoid struct api_msg getting bigger than necessary). + do_gethostbyname must be called using tcpip_callback instead of tcpip_apimsg + (see netconn_gethostbyname). */ +struct dns_api_msg { + /** Hostname to query or dotted IP address string */ + const char *name; + /** Rhe resolved address is stored here */ + struct ip_addr *addr; + /** This semaphore is posted when the name is resolved, the application thread + should wait on it. */ + sys_sem_t sem; + /** Errors are given back here */ + err_t *err; +}; +#endif /* LWIP_DNS */ + +void do_newconn ( struct api_msg_msg *msg); +void do_delconn ( struct api_msg_msg *msg); +void do_bind ( struct api_msg_msg *msg); +void do_connect ( struct api_msg_msg *msg); +void do_disconnect ( struct api_msg_msg *msg); +void do_listen ( struct api_msg_msg *msg); +void do_send ( struct api_msg_msg *msg); +void do_recv ( struct api_msg_msg *msg); +void do_write ( struct api_msg_msg *msg); +void do_getaddr ( struct api_msg_msg *msg); +void do_close ( struct api_msg_msg *msg); +#if LWIP_IGMP +void do_join_leave_group( struct api_msg_msg *msg); +#endif /* LWIP_IGMP */ + +#if LWIP_DNS +void do_gethostbyname(void *arg); +#endif /* LWIP_DNS */ + +struct netconn* netconn_alloc(enum netconn_type t, netconn_callback callback); +void netconn_free(struct netconn *conn); + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_NETCONN */ + +#endif /* __LWIP_API_MSG_H__ */ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/arch.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/arch.h new file mode 100644 index 000000000..5ab190a73 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/arch.h @@ -0,0 +1,235 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIP_ARCH_H__ +#define __LWIP_ARCH_H__ + +#ifndef LITTLE_ENDIAN +#define LITTLE_ENDIAN 1234 +#endif + +#ifndef BIG_ENDIAN +#define BIG_ENDIAN 4321 +#endif + +#include "arch/cc.h" + +/** Temporary: define format string for size_t if not defined in cc.h */ +#ifndef SZT_F +#define SZT_F U32_F +#endif /* SZT_F */ + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef PACK_STRUCT_BEGIN +#define PACK_STRUCT_BEGIN +#endif /* PACK_STRUCT_BEGIN */ + +#ifndef PACK_STRUCT_END +#define PACK_STRUCT_END +#endif /* PACK_STRUCT_END */ + +#ifndef PACK_STRUCT_FIELD +#define PACK_STRUCT_FIELD(x) x +#endif /* PACK_STRUCT_FIELD */ + + +#ifndef LWIP_UNUSED_ARG +#define LWIP_UNUSED_ARG(x) (void)x +#endif /* LWIP_UNUSED_ARG */ + + +#ifdef LWIP_PROVIDE_ERRNO + +#define EPERM 1 /* Operation not permitted */ +#define ENOENT 2 /* No such file or directory */ +#define ESRCH 3 /* No such process */ +#define EINTR 4 /* Interrupted system call */ +#define EIO 5 /* I/O error */ +#define ENXIO 6 /* No such device or address */ +#define E2BIG 7 /* Arg list too long */ +#define ENOEXEC 8 /* Exec format error */ +#define EBADF 9 /* Bad file number */ +#define ECHILD 10 /* No child processes */ +#define EAGAIN 11 /* Try again */ +#define ENOMEM 12 /* Out of memory */ +#define EACCES 13 /* Permission denied */ +#define EFAULT 14 /* Bad address */ +#define ENOTBLK 15 /* Block device required */ +#define EBUSY 16 /* Device or resource busy */ +#define EEXIST 17 /* File exists */ +#define EXDEV 18 /* Cross-device link */ +#define ENODEV 19 /* No such device */ +#define ENOTDIR 20 /* Not a directory */ +#define EISDIR 21 /* Is a directory */ +#define EINVAL 22 /* Invalid argument */ +#define ENFILE 23 /* File table overflow */ +#define EMFILE 24 /* Too many open files */ +#define ENOTTY 25 /* Not a typewriter */ +#define ETXTBSY 26 /* Text file busy */ +#define EFBIG 27 /* File too large */ +#define ENOSPC 28 /* No space left on device */ +#define ESPIPE 29 /* Illegal seek */ +#define EROFS 30 /* Read-only file system */ +#define EMLINK 31 /* Too many links */ +#define EPIPE 32 /* Broken pipe */ +#define EDOM 33 /* Math argument out of domain of func */ +#define ERANGE 34 /* Math result not representable */ +#define EDEADLK 35 /* Resource deadlock would occur */ +#define ENAMETOOLONG 36 /* File name too long */ +#define ENOLCK 37 /* No record locks available */ +#define ENOSYS 38 /* Function not implemented */ +#define ENOTEMPTY 39 /* Directory not empty */ +#define ELOOP 40 /* Too many symbolic links encountered */ +#define EWOULDBLOCK EAGAIN /* Operation would block */ +#define ENOMSG 42 /* No message of desired type */ +#define EIDRM 43 /* Identifier removed */ +#define ECHRNG 44 /* Channel number out of range */ +#define EL2NSYNC 45 /* Level 2 not synchronized */ +#define EL3HLT 46 /* Level 3 halted */ +#define EL3RST 47 /* Level 3 reset */ +#define ELNRNG 48 /* Link number out of range */ +#define EUNATCH 49 /* Protocol driver not attached */ +#define ENOCSI 50 /* No CSI structure available */ +#define EL2HLT 51 /* Level 2 halted */ +#define EBADE 52 /* Invalid exchange */ +#define EBADR 53 /* Invalid request descriptor */ +#define EXFULL 54 /* Exchange full */ +#define ENOANO 55 /* No anode */ +#define EBADRQC 56 /* Invalid request code */ +#define EBADSLT 57 /* Invalid slot */ + +#define EDEADLOCK EDEADLK + +#define EBFONT 59 /* Bad font file format */ +#define ENOSTR 60 /* Device not a stream */ +#define ENODATA 61 /* No data available */ +#define ETIME 62 /* Timer expired */ +#define ENOSR 63 /* Out of streams resources */ +#define ENONET 64 /* Machine is not on the network */ +#define ENOPKG 65 /* Package not installed */ +#define EREMOTE 66 /* Object is remote */ +#define ENOLINK 67 /* Link has been severed */ +#define EADV 68 /* Advertise error */ +#define ESRMNT 69 /* Srmount error */ +#define ECOMM 70 /* Communication error on send */ +#define EPROTO 71 /* Protocol error */ +#define EMULTIHOP 72 /* Multihop attempted */ +#define EDOTDOT 73 /* RFS specific error */ +#define EBADMSG 74 /* Not a data message */ +#define EOVERFLOW 75 /* Value too large for defined data type */ +#define ENOTUNIQ 76 /* Name not unique on network */ +#define EBADFD 77 /* File descriptor in bad state */ +#define EREMCHG 78 /* Remote address changed */ +#define ELIBACC 79 /* Can not access a needed shared library */ +#define ELIBBAD 80 /* Accessing a corrupted shared library */ +#define ELIBSCN 81 /* .lib section in a.out corrupted */ +#define ELIBMAX 82 /* Attempting to link in too many shared libraries */ +#define ELIBEXEC 83 /* Cannot exec a shared library directly */ +#define EILSEQ 84 /* Illegal byte sequence */ +#define ERESTART 85 /* Interrupted system call should be restarted */ +#define ESTRPIPE 86 /* Streams pipe error */ +#define EUSERS 87 /* Too many users */ +#define ENOTSOCK 88 /* Socket operation on non-socket */ +#define EDESTADDRREQ 89 /* Destination address required */ +#define EMSGSIZE 90 /* Message too long */ +#define EPROTOTYPE 91 /* Protocol wrong type for socket */ +#define ENOPROTOOPT 92 /* Protocol not available */ +#define EPROTONOSUPPORT 93 /* Protocol not supported */ +#define ESOCKTNOSUPPORT 94 /* Socket type not supported */ +#define EOPNOTSUPP 95 /* Operation not supported on transport endpoint */ +#define EPFNOSUPPORT 96 /* Protocol family not supported */ +#define EAFNOSUPPORT 97 /* Address family not supported by protocol */ +#define EADDRINUSE 98 /* Address already in use */ +#define EADDRNOTAVAIL 99 /* Cannot assign requested address */ +#define ENETDOWN 100 /* Network is down */ +#define ENETUNREACH 101 /* Network is unreachable */ +#define ENETRESET 102 /* Network dropped connection because of reset */ +#define ECONNABORTED 103 /* Software caused connection abort */ +#define ECONNRESET 104 /* Connection reset by peer */ +#define ENOBUFS 105 /* No buffer space available */ +#define EISCONN 106 /* Transport endpoint is already connected */ +#define ENOTCONN 107 /* Transport endpoint is not connected */ +#define ESHUTDOWN 108 /* Cannot send after transport endpoint shutdown */ +#define ETOOMANYREFS 109 /* Too many references: cannot splice */ +#define ETIMEDOUT 110 /* Connection timed out */ +#define ECONNREFUSED 111 /* Connection refused */ +#define EHOSTDOWN 112 /* Host is down */ +#define EHOSTUNREACH 113 /* No route to host */ +#define EALREADY 114 /* Operation already in progress */ +#define EINPROGRESS 115 /* Operation now in progress */ +#define ESTALE 116 /* Stale NFS file handle */ +#define EUCLEAN 117 /* Structure needs cleaning */ +#define ENOTNAM 118 /* Not a XENIX named type file */ +#define ENAVAIL 119 /* No XENIX semaphores available */ +#define EISNAM 120 /* Is a named type file */ +#define EREMOTEIO 121 /* Remote I/O error */ +#define EDQUOT 122 /* Quota exceeded */ + +#define ENOMEDIUM 123 /* No medium found */ +#define EMEDIUMTYPE 124 /* Wrong medium type */ + + +#define ENSROK 0 /* DNS server returned answer with no data */ +#define ENSRNODATA 160 /* DNS server returned answer with no data */ +#define ENSRFORMERR 161 /* DNS server claims query was misformatted */ +#define ENSRSERVFAIL 162 /* DNS server returned general failure */ +#define ENSRNOTFOUND 163 /* Domain name not found */ +#define ENSRNOTIMP 164 /* DNS server does not implement requested operation */ +#define ENSRREFUSED 165 /* DNS server refused query */ +#define ENSRBADQUERY 166 /* Misformatted DNS query */ +#define ENSRBADNAME 167 /* Misformatted domain name */ +#define ENSRBADFAMILY 168 /* Unsupported address family */ +#define ENSRBADRESP 169 /* Misformatted DNS reply */ +#define ENSRCONNREFUSED 170 /* Could not contact DNS servers */ +#define ENSRTIMEOUT 171 /* Timeout while contacting DNS servers */ +#define ENSROF 172 /* End of file */ +#define ENSRFILE 173 /* Error reading file */ +#define ENSRNOMEM 174 /* Out of memory */ +#define ENSRDESTRUCTION 175 /* Application terminated lookup */ +#define ENSRQUERYDOMAINTOOLONG 176 /* Domain name is too long */ +#define ENSRCNAMELOOP 177 /* Domain name is too long */ + +#ifndef errno +extern int errno; +#endif + +#endif /* LWIP_PROVIDE_ERRNO */ + +#ifdef __cplusplus +} +#endif + +#endif /* __LWIP_ARCH_H__ */ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/debug.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/debug.h new file mode 100644 index 000000000..fb0760790 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/debug.h @@ -0,0 +1,100 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIP_DEBUG_H__ +#define __LWIP_DEBUG_H__ + +#include "lwip/arch.h" + +/** lower two bits indicate debug level + * - 0 all + * - 1 warning + * - 2 serious + * - 3 severe + */ +#define LWIP_DBG_LEVEL_ALL 0x00 +#define LWIP_DBG_LEVEL_OFF LWIP_DBG_LEVEL_ALL /* compatibility define only */ +#define LWIP_DBG_LEVEL_WARNING 0x01 /* bad checksums, dropped packets, ... */ +#define LWIP_DBG_LEVEL_SERIOUS 0x02 /* memory allocation failures, ... */ +#define LWIP_DBG_LEVEL_SEVERE 0x03 +#define LWIP_DBG_MASK_LEVEL 0x03 + +/** flag for LWIP_DEBUGF to enable that debug message */ +#define LWIP_DBG_ON 0x80U +/** flag for LWIP_DEBUGF to disable that debug message */ +#define LWIP_DBG_OFF 0x00U + +/** flag for LWIP_DEBUGF indicating a tracing message (to follow program flow) */ +#define LWIP_DBG_TRACE 0x40U +/** flag for LWIP_DEBUGF indicating a state debug message (to follow module states) */ +#define LWIP_DBG_STATE 0x20U +/** flag for LWIP_DEBUGF indicating newly added code, not thoroughly tested yet */ +#define LWIP_DBG_FRESH 0x10U +/** flag for LWIP_DEBUGF to halt after printing this debug message */ +#define LWIP_DBG_HALT 0x08U + +#ifndef LWIP_NOASSERT +#define LWIP_ASSERT(message, assertion) do { if(!(assertion)) \ + LWIP_PLATFORM_ASSERT(message); } while(0) +#else /* LWIP_NOASSERT */ +#define LWIP_ASSERT(message, assertion) +#endif /* LWIP_NOASSERT */ + +/** if "expression" isn't true, then print "message" and execute "handler" expression */ +#ifndef LWIP_ERROR +#define LWIP_ERROR(message, expression, handler) do { if (!(expression)) { \ + LWIP_PLATFORM_ASSERT(message); handler;}} while(0) +#endif /* LWIP_ERROR */ + +#ifdef LWIP_DEBUG +/** print debug message only if debug message type is enabled... + * AND is of correct type AND is at least LWIP_DBG_LEVEL + */ +#define LWIP_DEBUGF(debug, message) do { \ + if ( \ + ((debug) & LWIP_DBG_ON) && \ + ((debug) & LWIP_DBG_TYPES_ON) && \ + ((s16_t)((debug) & LWIP_DBG_MASK_LEVEL) >= LWIP_DBG_MIN_LEVEL)) { \ + LWIP_PLATFORM_DIAG(message); \ + if ((debug) & LWIP_DBG_HALT) { \ + while(1); \ + } \ + } \ + } while(0) + +#else /* LWIP_DEBUG */ +#define LWIP_DEBUGF(debug, message) +#endif /* LWIP_DEBUG */ + +#endif /* __LWIP_DEBUG_H__ */ + diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/def.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/def.h new file mode 100644 index 000000000..c3681ac1f --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/def.h @@ -0,0 +1,49 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIP_DEF_H__ +#define __LWIP_DEF_H__ + +/* this might define NULL already */ +#include "lwip/arch.h" + +#define LWIP_MAX(x , y) (((x) > (y)) ? (x) : (y)) +#define LWIP_MIN(x , y) (((x) < (y)) ? (x) : (y)) + +#ifndef NULL +#define NULL ((void *)0) +#endif + + +#endif /* __LWIP_DEF_H__ */ + diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/dhcp.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/dhcp.h new file mode 100644 index 000000000..27a0adeb8 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/dhcp.h @@ -0,0 +1,248 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/** @file + */ + +#ifndef __LWIP_DHCP_H__ +#define __LWIP_DHCP_H__ + +#include "lwip/opt.h" + +#if LWIP_DHCP /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/netif.h" +#include "lwip/udp.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** period (in seconds) of the application calling dhcp_coarse_tmr() */ +#define DHCP_COARSE_TIMER_SECS 60 +/** period (in milliseconds) of the application calling dhcp_coarse_tmr() */ +#define DHCP_COARSE_TIMER_MSECS (DHCP_COARSE_TIMER_SECS * 1000UL) +/** period (in milliseconds) of the application calling dhcp_fine_tmr() */ +#define DHCP_FINE_TIMER_MSECS 500 + +struct dhcp +{ + /** transaction identifier of last sent request */ + u32_t xid; + /** our connection to the DHCP server */ + struct udp_pcb *pcb; + /** incoming msg */ + struct dhcp_msg *msg_in; + /** incoming msg options */ + void *options_in; + /** ingoing msg options length */ + u16_t options_in_len; + /** current DHCP state machine state */ + u8_t state; + /** retries of current request */ + u8_t tries; + + struct pbuf *p_out; /* pbuf of outcoming msg */ + struct dhcp_msg *msg_out; /* outgoing msg */ + u16_t options_out_len; /* outgoing msg options length */ + u16_t request_timeout; /* #ticks with period DHCP_FINE_TIMER_SECS for request timeout */ + u16_t t1_timeout; /* #ticks with period DHCP_COARSE_TIMER_SECS for renewal time */ + u16_t t2_timeout; /* #ticks with period DHCP_COARSE_TIMER_SECS for rebind time */ + struct ip_addr server_ip_addr; /* dhcp server address that offered this lease */ + struct ip_addr offered_ip_addr; + struct ip_addr offered_sn_mask; + struct ip_addr offered_gw_addr; + struct ip_addr offered_bc_addr; +#define DHCP_MAX_DNS 2 + u32_t dns_count; /* actual number of DNS servers obtained */ + struct ip_addr offered_dns_addr[DHCP_MAX_DNS]; /* DNS server addresses */ + + u32_t offered_t0_lease; /* lease period (in seconds) */ + u32_t offered_t1_renew; /* recommended renew time (usually 50% of lease period) */ + u32_t offered_t2_rebind; /* recommended rebind time (usually 66% of lease period) */ +#if LWIP_DHCP_AUTOIP_COOP + u8_t autoip_coop_state; +#endif +/** Patch #1308 + * TODO: See dhcp.c "TODO"s + */ +#if 0 + struct ip_addr offered_si_addr; + u8_t *boot_file_name; +#endif +}; + +/* MUST be compiled with "pack structs" or equivalent! */ +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +/** minimum set of fields of any DHCP message */ +struct dhcp_msg +{ + PACK_STRUCT_FIELD(u8_t op); + PACK_STRUCT_FIELD(u8_t htype); + PACK_STRUCT_FIELD(u8_t hlen); + PACK_STRUCT_FIELD(u8_t hops); + PACK_STRUCT_FIELD(u32_t xid); + PACK_STRUCT_FIELD(u16_t secs); + PACK_STRUCT_FIELD(u16_t flags); + PACK_STRUCT_FIELD(struct ip_addr ciaddr); + PACK_STRUCT_FIELD(struct ip_addr yiaddr); + PACK_STRUCT_FIELD(struct ip_addr siaddr); + PACK_STRUCT_FIELD(struct ip_addr giaddr); +#define DHCP_CHADDR_LEN 16U + PACK_STRUCT_FIELD(u8_t chaddr[DHCP_CHADDR_LEN]); +#define DHCP_SNAME_LEN 64U + PACK_STRUCT_FIELD(u8_t sname[DHCP_SNAME_LEN]); +#define DHCP_FILE_LEN 128U + PACK_STRUCT_FIELD(u8_t file[DHCP_FILE_LEN]); + PACK_STRUCT_FIELD(u32_t cookie); +#define DHCP_MIN_OPTIONS_LEN 68U +/** make sure user does not configure this too small */ +#if ((defined(DHCP_OPTIONS_LEN)) && (DHCP_OPTIONS_LEN < DHCP_MIN_OPTIONS_LEN)) +# undef DHCP_OPTIONS_LEN +#endif +/** allow this to be configured in lwipopts.h, but not too small */ +#if (!defined(DHCP_OPTIONS_LEN)) +/** set this to be sufficient for your options in outgoing DHCP msgs */ +# define DHCP_OPTIONS_LEN DHCP_MIN_OPTIONS_LEN +#endif + PACK_STRUCT_FIELD(u8_t options[DHCP_OPTIONS_LEN]); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +/** start DHCP configuration */ +err_t dhcp_start(struct netif *netif); +/** enforce early lease renewal (not needed normally)*/ +err_t dhcp_renew(struct netif *netif); +/** release the DHCP lease, usually called before dhcp_stop()*/ +err_t dhcp_release(struct netif *netif); +/** stop DHCP configuration */ +void dhcp_stop(struct netif *netif); +/** inform server of our manual IP address */ +void dhcp_inform(struct netif *netif); +/** Handle a possible change in the network configuration */ +void dhcp_network_changed(struct netif *netif); + +/** if enabled, check whether the offered IP address is not in use, using ARP */ +#if DHCP_DOES_ARP_CHECK +void dhcp_arp_reply(struct netif *netif, struct ip_addr *addr); +#endif + +/** to be called every minute */ +void dhcp_coarse_tmr(void); +/** to be called every half second */ +void dhcp_fine_tmr(void); + +/** DHCP message item offsets and length */ +#define DHCP_MSG_OFS (UDP_DATA_OFS) + #define DHCP_OP_OFS (DHCP_MSG_OFS + 0) + #define DHCP_HTYPE_OFS (DHCP_MSG_OFS + 1) + #define DHCP_HLEN_OFS (DHCP_MSG_OFS + 2) + #define DHCP_HOPS_OFS (DHCP_MSG_OFS + 3) + #define DHCP_XID_OFS (DHCP_MSG_OFS + 4) + #define DHCP_SECS_OFS (DHCP_MSG_OFS + 8) + #define DHCP_FLAGS_OFS (DHCP_MSG_OFS + 10) + #define DHCP_CIADDR_OFS (DHCP_MSG_OFS + 12) + #define DHCP_YIADDR_OFS (DHCP_MSG_OFS + 16) + #define DHCP_SIADDR_OFS (DHCP_MSG_OFS + 20) + #define DHCP_GIADDR_OFS (DHCP_MSG_OFS + 24) + #define DHCP_CHADDR_OFS (DHCP_MSG_OFS + 28) + #define DHCP_SNAME_OFS (DHCP_MSG_OFS + 44) + #define DHCP_FILE_OFS (DHCP_MSG_OFS + 108) +#define DHCP_MSG_LEN 236 + +#define DHCP_COOKIE_OFS (DHCP_MSG_OFS + DHCP_MSG_LEN) +#define DHCP_OPTIONS_OFS (DHCP_MSG_OFS + DHCP_MSG_LEN + 4) + +#define DHCP_CLIENT_PORT 68 +#define DHCP_SERVER_PORT 67 + +/** DHCP client states */ +#define DHCP_REQUESTING 1 +#define DHCP_INIT 2 +#define DHCP_REBOOTING 3 +#define DHCP_REBINDING 4 +#define DHCP_RENEWING 5 +#define DHCP_SELECTING 6 +#define DHCP_INFORMING 7 +#define DHCP_CHECKING 8 +#define DHCP_PERMANENT 9 +#define DHCP_BOUND 10 +/** not yet implemented #define DHCP_RELEASING 11 */ +#define DHCP_BACKING_OFF 12 +#define DHCP_OFF 13 + +/** AUTOIP cooperatation flags */ +#define DHCP_AUTOIP_COOP_STATE_OFF 0 +#define DHCP_AUTOIP_COOP_STATE_ON 1 + +#define DHCP_BOOTREQUEST 1 +#define DHCP_BOOTREPLY 2 + +#define DHCP_DISCOVER 1 +#define DHCP_OFFER 2 +#define DHCP_REQUEST 3 +#define DHCP_DECLINE 4 +#define DHCP_ACK 5 +#define DHCP_NAK 6 +#define DHCP_RELEASE 7 +#define DHCP_INFORM 8 + +#define DHCP_HTYPE_ETH 1 + +#define DHCP_HLEN_ETH 6 + +#define DHCP_BROADCAST_FLAG 15 +#define DHCP_BROADCAST_MASK (1 << DHCP_FLAG_BROADCAST) + +/** BootP options */ +#define DHCP_OPTION_PAD 0 +#define DHCP_OPTION_SUBNET_MASK 1 /* RFC 2132 3.3 */ +#define DHCP_OPTION_ROUTER 3 +#define DHCP_OPTION_DNS_SERVER 6 +#define DHCP_OPTION_HOSTNAME 12 +#define DHCP_OPTION_IP_TTL 23 +#define DHCP_OPTION_MTU 26 +#define DHCP_OPTION_BROADCAST 28 +#define DHCP_OPTION_TCP_TTL 37 +#define DHCP_OPTION_END 255 + +/** DHCP options */ +#define DHCP_OPTION_REQUESTED_IP 50 /* RFC 2132 9.1, requested IP address */ +#define DHCP_OPTION_LEASE_TIME 51 /* RFC 2132 9.2, time in seconds, in 4 bytes */ +#define DHCP_OPTION_OVERLOAD 52 /* RFC2132 9.3, use file and/or sname field for options */ + +#define DHCP_OPTION_MESSAGE_TYPE 53 /* RFC 2132 9.6, important for DHCP */ +#define DHCP_OPTION_MESSAGE_TYPE_LEN 1 + + +#define DHCP_OPTION_SERVER_ID 54 /* RFC 2132 9.7, server IP address */ +#define DHCP_OPTION_PARAMETER_REQUEST_LIST 55 /* RFC 2132 9.8, requested option types */ + +#define DHCP_OPTION_MAX_MSG_SIZE 57 /* RFC 2132 9.10, message size accepted >= 576 */ +#define DHCP_OPTION_MAX_MSG_SIZE_LEN 2 + +#define DHCP_OPTION_T1 58 /* T1 renewal time */ +#define DHCP_OPTION_T2 59 /* T2 rebinding time */ +#define DHCP_OPTION_US 60 +#define DHCP_OPTION_CLIENT_ID 61 +#define DHCP_OPTION_TFTP_SERVERNAME 66 +#define DHCP_OPTION_BOOTFILE 67 + +/** possible combinations of overloading the file and sname fields with options */ +#define DHCP_OVERLOAD_NONE 0 +#define DHCP_OVERLOAD_FILE 1 +#define DHCP_OVERLOAD_SNAME 2 +#define DHCP_OVERLOAD_SNAME_FILE 3 + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_DHCP */ + +#endif /*__LWIP_DHCP_H__*/ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/dns.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/dns.h new file mode 100644 index 000000000..c1b8ae031 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/dns.h @@ -0,0 +1,99 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/** + * lwip DNS resolver header file. + + * Author: Jim Pettinato + * April 2007 + + * ported from uIP resolv.c Copyright (c) 2002-2003, Adam Dunkels. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef __LWIP_DNS_H__ +#define __LWIP_DNS_H__ + +#include "lwip/opt.h" + +#if LWIP_DNS /* don't build if not configured for use in lwipopts.h */ + +/** DNS timer period */ +#define DNS_TMR_INTERVAL 1000 + +/** DNS field TYPE used for "Resource Records" */ +#define DNS_RRTYPE_A 1 /* a host address */ +#define DNS_RRTYPE_NS 2 /* an authoritative name server */ +#define DNS_RRTYPE_MD 3 /* a mail destination (Obsolete - use MX) */ +#define DNS_RRTYPE_MF 4 /* a mail forwarder (Obsolete - use MX) */ +#define DNS_RRTYPE_CNAME 5 /* the canonical name for an alias */ +#define DNS_RRTYPE_SOA 6 /* marks the start of a zone of authority */ +#define DNS_RRTYPE_MB 7 /* a mailbox domain name (EXPERIMENTAL) */ +#define DNS_RRTYPE_MG 8 /* a mail group member (EXPERIMENTAL) */ +#define DNS_RRTYPE_MR 9 /* a mail rename domain name (EXPERIMENTAL) */ +#define DNS_RRTYPE_NULL 10 /* a null RR (EXPERIMENTAL) */ +#define DNS_RRTYPE_WKS 11 /* a well known service description */ +#define DNS_RRTYPE_PTR 12 /* a domain name pointer */ +#define DNS_RRTYPE_HINFO 13 /* host information */ +#define DNS_RRTYPE_MINFO 14 /* mailbox or mail list information */ +#define DNS_RRTYPE_MX 15 /* mail exchange */ +#define DNS_RRTYPE_TXT 16 /* text strings */ + +/** DNS field CLASS used for "Resource Records" */ +#define DNS_RRCLASS_IN 1 /* the Internet */ +#define DNS_RRCLASS_CS 2 /* the CSNET class (Obsolete - used only for examples in some obsolete RFCs) */ +#define DNS_RRCLASS_CH 3 /* the CHAOS class */ +#define DNS_RRCLASS_HS 4 /* Hesiod [Dyer 87] */ +#define DNS_RRCLASS_FLUSH 0x800 /* Flush bit */ + +/** Callback which is invoked when a hostname is found. + * A function of this type must be implemented by the application using the DNS resolver. + * @param name pointer to the name that was looked up. + * @param ipaddr pointer to a struct ip_addr containing the IP address of the hostname, + * or NULL if the name could not be found (or on any other error). + * @param callback_arg a user-specified callback argument passed to dns_gethostbyname +*/ +typedef void (*dns_found_callback)(const char *name, struct ip_addr *ipaddr, void *callback_arg); + + +void dns_init(void); + +void dns_tmr(void); + +void dns_setserver(u8_t numdns, struct ip_addr *dnsserver); + +struct ip_addr dns_getserver(u8_t numdns); + +err_t dns_gethostbyname(const char *hostname, struct ip_addr *addr, + dns_found_callback found, void *callback_arg); + +#if DNS_LOCAL_HOSTLIST && DNS_LOCAL_HOSTLIST_IS_DYNAMIC +int dns_local_removehost(const char *hostname, const struct ip_addr *addr); +err_t dns_local_addhost(const char *hostname, const struct ip_addr *addr); +#endif /* DNS_LOCAL_HOSTLIST && DNS_LOCAL_HOSTLIST_IS_DYNAMIC */ + +#endif /* LWIP_DNS */ + +#endif /* __LWIP_DNS_H__ */ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/err.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/err.h new file mode 100644 index 000000000..792f27606 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/err.h @@ -0,0 +1,89 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIP_ERR_H__ +#define __LWIP_ERR_H__ + +#include "lwip/opt.h" +#include "lwip/arch.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** Define LWIP_ERR_T in cc.h if you want to use + * a different type for your platform (must be signed). */ +#ifdef LWIP_ERR_T +typedef LWIP_ERR_T err_t; +#else /* LWIP_ERR_T */ + typedef s8_t err_t; +#endif /* LWIP_ERR_T*/ + +/* Definitions for error constants. */ + +#define ERR_OK 0 /* No error, everything OK. */ +#define ERR_MEM -1 /* Out of memory error. */ +#define ERR_BUF -2 /* Buffer error. */ +#define ERR_TIMEOUT -3 /* Timeout. */ +#define ERR_RTE -4 /* Routing problem. */ + +#define ERR_IS_FATAL(e) ((e) < ERR_RTE) + +#define ERR_ABRT -5 /* Connection aborted. */ +#define ERR_RST -6 /* Connection reset. */ +#define ERR_CLSD -7 /* Connection closed. */ +#define ERR_CONN -8 /* Not connected. */ + +#define ERR_VAL -9 /* Illegal value. */ + +#define ERR_ARG -10 /* Illegal argument. */ + +#define ERR_USE -11 /* Address in use. */ + +#define ERR_IF -12 /* Low-level netif error */ +#define ERR_ISCONN -13 /* Already connected. */ + +#define ERR_INPROGRESS -14 /* Operation in progress */ + + +#ifdef LWIP_DEBUG +extern const char *lwip_strerr(err_t err); +#else +#define lwip_strerr(x) "" +#endif /* LWIP_DEBUG */ + +#ifdef __cplusplus +} +#endif + +#endif /* __LWIP_ERR_H__ */ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/init.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/init.h new file mode 100644 index 000000000..a86e0d9c8 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/init.h @@ -0,0 +1,74 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIP_INIT_H__ +#define __LWIP_INIT_H__ + +#include "lwip/opt.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** X.x.x: Major version of the stack */ +#define LWIP_VERSION_MAJOR 1U +/** x.X.x: Minor version of the stack */ +#define LWIP_VERSION_MINOR 3U +/** x.x.X: Revision of the stack */ +#define LWIP_VERSION_REVISION 2U +/** For release candidates, this is set to 1..254 + * For official releases, this is set to 255 (LWIP_RC_RELEASE) + * For development versions (CVS), this is set to 0 (LWIP_RC_DEVELOPMENT) */ +#define LWIP_VERSION_RC 255U + +/** LWIP_VERSION_RC is set to LWIP_RC_RELEASE for official releases */ +#define LWIP_RC_RELEASE 255U +/** LWIP_VERSION_RC is set to LWIP_RC_DEVELOPMENT for CVS versions */ +#define LWIP_RC_DEVELOPMENT 0U + +#define LWIP_VERSION_IS_RELEASE (LWIP_VERSION_RC == LWIP_RC_RELEASE) +#define LWIP_VERSION_IS_DEVELOPMENT (LWIP_VERSION_RC == LWIP_RC_DEVELOPMENT) +#define LWIP_VERSION_IS_RC ((LWIP_VERSION_RC != LWIP_RC_RELEASE) && (LWIP_VERSION_RC != LWIP_RC_DEVELOPMENT)) + +/** Provides the version of the stack */ +#define LWIP_VERSION (LWIP_VERSION_MAJOR << 24 | LWIP_VERSION_MINOR << 16 | \ + LWIP_VERSION_REVISION << 8 | LWIP_VERSION_RC) + +/* Modules initialization */ +void lwip_init(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __LWIP_INIT_H__ */ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/mem.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/mem.h new file mode 100644 index 000000000..327229e58 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/mem.h @@ -0,0 +1,109 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIP_MEM_H__ +#define __LWIP_MEM_H__ + +#include "lwip/opt.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#if MEM_LIBC_MALLOC + +#include /* for size_t */ + +typedef size_t mem_size_t; + +/* aliases for C library malloc() */ +#define mem_init() +/* in case C library malloc() needs extra protection, + * allow these defines to be overridden. + */ +#ifndef mem_free +#define mem_free free +#endif +#ifndef mem_malloc +#define mem_malloc malloc +#endif +#ifndef mem_calloc +#define mem_calloc calloc +#endif +#ifndef mem_realloc +static void *mem_realloc(void *mem, mem_size_t size) +{ + LWIP_UNUSED_ARG(size); + return mem; +} +#endif +#else /* MEM_LIBC_MALLOC */ + +/* MEM_SIZE would have to be aligned, but using 64000 here instead of + * 65535 leaves some room for alignment... + */ +#if MEM_SIZE > 64000l +typedef u32_t mem_size_t; +#else +typedef u16_t mem_size_t; +#endif /* MEM_SIZE > 64000 */ + +#if MEM_USE_POOLS +/** mem_init is not used when using pools instead of a heap */ +#define mem_init() +/** mem_realloc is not used when using pools instead of a heap: + we can't free part of a pool element and don't want to copy the rest */ +#define mem_realloc(mem, size) (mem) +#else /* MEM_USE_POOLS */ +/* lwIP alternative malloc */ +void mem_init(void); +void *mem_realloc(void *mem, mem_size_t size); +#endif /* MEM_USE_POOLS */ +void *mem_malloc(mem_size_t size); +void *mem_calloc(mem_size_t count, mem_size_t size); +void mem_free(void *mem); +#endif /* MEM_LIBC_MALLOC */ + +#ifndef LWIP_MEM_ALIGN_SIZE +#define LWIP_MEM_ALIGN_SIZE(size) (((size) + MEM_ALIGNMENT - 1) & ~(MEM_ALIGNMENT-1)) +#endif + +#ifndef LWIP_MEM_ALIGN +#define LWIP_MEM_ALIGN(addr) ((void *)(((mem_ptr_t)(addr) + MEM_ALIGNMENT - 1) & ~(mem_ptr_t)(MEM_ALIGNMENT-1))) +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* __LWIP_MEM_H__ */ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/memp.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/memp.h new file mode 100644 index 000000000..3de7bf9a0 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/memp.h @@ -0,0 +1,118 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#ifndef __LWIP_MEMP_H__ +#define __LWIP_MEMP_H__ + +#include "lwip/opt.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Create the list of all memory pools managed by memp. MEMP_MAX represents a NULL pool at the end */ +typedef enum { +#define LWIP_MEMPOOL(name,num,size,desc) MEMP_##name, +#include "lwip/memp_std.h" + MEMP_MAX +} memp_t; + +#if MEM_USE_POOLS +/* Use a helper type to get the start and end of the user "memory pools" for mem_malloc */ +typedef enum { + /* Get the first (via: + MEMP_POOL_HELPER_START = ((u8_t) 1*MEMP_POOL_A + 0*MEMP_POOL_B + 0*MEMP_POOL_C + 0)*/ + MEMP_POOL_HELPER_FIRST = ((u8_t) +#define LWIP_MEMPOOL(name,num,size,desc) +#define LWIP_MALLOC_MEMPOOL_START 1 +#define LWIP_MALLOC_MEMPOOL(num, size) * MEMP_POOL_##size + 0 +#define LWIP_MALLOC_MEMPOOL_END +#include "lwip/memp_std.h" + ) , + /* Get the last (via: + MEMP_POOL_HELPER_END = ((u8_t) 0 + MEMP_POOL_A*0 + MEMP_POOL_B*0 + MEMP_POOL_C*1) */ + MEMP_POOL_HELPER_LAST = ((u8_t) +#define LWIP_MEMPOOL(name,num,size,desc) +#define LWIP_MALLOC_MEMPOOL_START +#define LWIP_MALLOC_MEMPOOL(num, size) 0 + MEMP_POOL_##size * +#define LWIP_MALLOC_MEMPOOL_END 1 +#include "lwip/memp_std.h" + ) +} memp_pool_helper_t; + +/* The actual start and stop values are here (cast them over) + We use this helper type and these defines so we can avoid using const memp_t values */ +#define MEMP_POOL_FIRST ((memp_t) MEMP_POOL_HELPER_FIRST) +#define MEMP_POOL_LAST ((memp_t) MEMP_POOL_HELPER_LAST) +#endif /* MEM_USE_POOLS */ + +#if MEMP_MEM_MALLOC || MEM_USE_POOLS +extern const u16_t memp_sizes[MEMP_MAX]; +#endif /* MEMP_MEM_MALLOC || MEM_USE_POOLS */ + +#if MEMP_MEM_MALLOC + +#include "mem.h" + +#define memp_init() +#define memp_malloc(type) mem_malloc(memp_sizes[type]) +#define memp_free(type, mem) mem_free(mem) + +#else /* MEMP_MEM_MALLOC */ + +#if MEM_USE_POOLS +/** This structure is used to save the pool one element came from. */ +struct memp_malloc_helper +{ + memp_t poolnr; +}; +#endif /* MEM_USE_POOLS */ + +void memp_init(void); + +#if MEMP_OVERFLOW_CHECK +void *memp_malloc_fn(memp_t type, const char* file, const int line); +#define memp_malloc(t) memp_malloc_fn((t), __FILE__, __LINE__) +#else +void *memp_malloc(memp_t type); +#endif +void memp_free(memp_t type, void *mem); + +#endif /* MEMP_MEM_MALLOC */ + +#ifdef __cplusplus +} +#endif + +#endif /* __LWIP_MEMP_H__ */ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/memp_std.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/memp_std.h new file mode 100644 index 000000000..d8d4945dd --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/memp_std.h @@ -0,0 +1,104 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * SETUP: Make sure we define everything we will need. + * + * We have create three types of pools: + * 1) MEMPOOL - standard pools + * 2) MALLOC_MEMPOOL - to be used by mem_malloc in mem.c + * 3) PBUF_MEMPOOL - a mempool of pbuf's, so include space for the pbuf struct + * + * If the include'r doesn't require any special treatment of each of the types + * above, then will declare #2 & #3 to be just standard mempools. + */ +#ifndef LWIP_MALLOC_MEMPOOL +/* This treats "malloc pools" just like any other pool. + The pools are a little bigger to provide 'size' as the amount of user data. */ +#define LWIP_MALLOC_MEMPOOL(num, size) LWIP_MEMPOOL(POOL_##size, num, (size + sizeof(struct memp_malloc_helper)), "MALLOC_"#size) +#define LWIP_MALLOC_MEMPOOL_START +#define LWIP_MALLOC_MEMPOOL_END +#endif /* LWIP_MALLOC_MEMPOOL */ + +#ifndef LWIP_PBUF_MEMPOOL +/* This treats "pbuf pools" just like any other pool. + * Allocates buffers for a pbuf struct AND a payload size */ +#define LWIP_PBUF_MEMPOOL(name, num, payload, desc) LWIP_MEMPOOL(name, num, (MEMP_ALIGN_SIZE(sizeof(struct pbuf)) + MEMP_ALIGN_SIZE(payload)), desc) +#endif /* LWIP_PBUF_MEMPOOL */ + + +/* + * A list of internal pools used by LWIP. + * + * LWIP_MEMPOOL(pool_name, number_elements, element_size, pool_description) + * creates a pool name MEMP_pool_name. description is used in stats.c + */ +#if LWIP_RAW +LWIP_MEMPOOL(RAW_PCB, MEMP_NUM_RAW_PCB, sizeof(struct raw_pcb), "RAW_PCB") +#endif /* LWIP_RAW */ + +#if LWIP_UDP +LWIP_MEMPOOL(UDP_PCB, MEMP_NUM_UDP_PCB, sizeof(struct udp_pcb), "UDP_PCB") +#endif /* LWIP_UDP */ + +#if LWIP_TCP +LWIP_MEMPOOL(TCP_PCB, MEMP_NUM_TCP_PCB, sizeof(struct tcp_pcb), "TCP_PCB") +LWIP_MEMPOOL(TCP_PCB_LISTEN, MEMP_NUM_TCP_PCB_LISTEN, sizeof(struct tcp_pcb_listen), "TCP_PCB_LISTEN") +LWIP_MEMPOOL(TCP_SEG, MEMP_NUM_TCP_SEG, sizeof(struct tcp_seg), "TCP_SEG") +#endif /* LWIP_TCP */ + +#if IP_REASSEMBLY +LWIP_MEMPOOL(REASSDATA, MEMP_NUM_REASSDATA, sizeof(struct ip_reassdata), "REASSDATA") +#endif /* IP_REASSEMBLY */ + +#if LWIP_NETCONN +LWIP_MEMPOOL(NETBUF, MEMP_NUM_NETBUF, sizeof(struct netbuf), "NETBUF") +LWIP_MEMPOOL(NETCONN, MEMP_NUM_NETCONN, sizeof(struct netconn), "NETCONN") +#endif /* LWIP_NETCONN */ + +#if NO_SYS==0 +LWIP_MEMPOOL(TCPIP_MSG_API, MEMP_NUM_TCPIP_MSG_API, sizeof(struct tcpip_msg), "TCPIP_MSG_API") +LWIP_MEMPOOL(TCPIP_MSG_INPKT,MEMP_NUM_TCPIP_MSG_INPKT, sizeof(struct tcpip_msg), "TCPIP_MSG_INPKT") +#endif /* NO_SYS==0 */ + +#if ARP_QUEUEING +LWIP_MEMPOOL(ARP_QUEUE, MEMP_NUM_ARP_QUEUE, sizeof(struct etharp_q_entry), "ARP_QUEUE") +#endif /* ARP_QUEUEING */ + +#if LWIP_IGMP +LWIP_MEMPOOL(IGMP_GROUP, MEMP_NUM_IGMP_GROUP, sizeof(struct igmp_group), "IGMP_GROUP") +#endif /* LWIP_IGMP */ + +#if NO_SYS==0 +LWIP_MEMPOOL(SYS_TIMEOUT, MEMP_NUM_SYS_TIMEOUT, sizeof(struct sys_timeo), "SYS_TIMEOUT") +#endif /* NO_SYS==0 */ + + +/* + * A list of pools of pbuf's used by LWIP. + * + * LWIP_PBUF_MEMPOOL(pool_name, number_elements, pbuf_payload_size, pool_description) + * creates a pool name MEMP_pool_name. description is used in stats.c + * This allocates enough space for the pbuf struct and a payload. + * (Example: pbuf_payload_size=0 allocates only size for the struct) + */ +LWIP_PBUF_MEMPOOL(PBUF, MEMP_NUM_PBUF, 0, "PBUF_REF/ROM") +LWIP_PBUF_MEMPOOL(PBUF_POOL, PBUF_POOL_SIZE, PBUF_POOL_BUFSIZE, "PBUF_POOL") + + +/* + * Allow for user-defined pools; this must be explicitly set in lwipopts.h + * since the default is to NOT look for lwippools.h + */ +#if MEMP_USE_CUSTOM_POOLS +#include "lwippools.h" +#endif /* MEMP_USE_CUSTOM_POOLS */ + +/* + * REQUIRED CLEANUP: Clear up so we don't get "multiply defined" error later + * (#undef is ignored for something that is not defined) + */ +#undef LWIP_MEMPOOL +#undef LWIP_MALLOC_MEMPOOL +#undef LWIP_MALLOC_MEMPOOL_START +#undef LWIP_MALLOC_MEMPOOL_END +#undef LWIP_PBUF_MEMPOOL diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/netbuf.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/netbuf.h new file mode 100644 index 000000000..ab9ea33d1 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/netbuf.h @@ -0,0 +1,88 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIP_NETBUF_H__ +#define __LWIP_NETBUF_H__ + +#include "lwip/opt.h" +#include "lwip/pbuf.h" +#include "lwip/ip_addr.h" + +#ifdef __cplusplus +extern "C" { +#endif + +struct netbuf { + struct pbuf *p, *ptr; + struct ip_addr *addr; + u16_t port; +#if LWIP_NETBUF_RECVINFO + struct ip_addr *toaddr; + u16_t toport; +#endif /* LWIP_NETBUF_RECVINFO */ +}; + +/* Network buffer functions: */ +struct netbuf * netbuf_new (void); +void netbuf_delete (struct netbuf *buf); +void * netbuf_alloc (struct netbuf *buf, u16_t size); +void netbuf_free (struct netbuf *buf); +err_t netbuf_ref (struct netbuf *buf, + const void *dataptr, u16_t size); +void netbuf_chain (struct netbuf *head, + struct netbuf *tail); + +u16_t netbuf_len (struct netbuf *buf); +err_t netbuf_data (struct netbuf *buf, + void **dataptr, u16_t *len); +s8_t netbuf_next (struct netbuf *buf); +void netbuf_first (struct netbuf *buf); + + +#define netbuf_copy_partial(buf, dataptr, len, offset) \ + pbuf_copy_partial((buf)->p, (dataptr), (len), (offset)) +#define netbuf_copy(buf,dataptr,len) netbuf_copy_partial(buf, dataptr, len, 0) +#define netbuf_take(buf, dataptr, len) pbuf_take((buf)->p, dataptr, len) +#define netbuf_len(buf) ((buf)->p->tot_len) +#define netbuf_fromaddr(buf) ((buf)->addr) +#define netbuf_fromport(buf) ((buf)->port) +#if LWIP_NETBUF_RECVINFO +#define netbuf_destaddr(buf) ((buf)->toaddr) +#define netbuf_destport(buf) ((buf)->toport) +#endif /* LWIP_NETBUF_RECVINFO */ + +#ifdef __cplusplus +} +#endif + +#endif /* __LWIP_NETBUF_H__ */ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/netdb.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/netdb.h new file mode 100644 index 000000000..c59c3a442 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/netdb.h @@ -0,0 +1,113 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Simon Goldschmidt + * + */ + +#include "lwip/opt.h" + +#if LWIP_DNS && LWIP_SOCKET + +#include /* for size_t */ + +#include "lwip/sockets.h" + +/* some rarely used options */ +#ifndef LWIP_DNS_API_DECLARE_H_ERRNO +#define LWIP_DNS_API_DECLARE_H_ERRNO 1 +#endif + +#ifndef LWIP_DNS_API_DEFINE_ERRORS +#define LWIP_DNS_API_DEFINE_ERRORS 1 +#endif + +#ifndef LWIP_DNS_API_DECLARE_STRUCTS +#define LWIP_DNS_API_DECLARE_STRUCTS 1 +#endif + +#if LWIP_DNS_API_DEFINE_ERRORS +/** Errors used by the DNS API functions, h_errno can be one of them */ +#define EAI_NONAME 200 +#define EAI_SERVICE 201 +#define EAI_FAIL 202 +#define EAI_MEMORY 203 + +#define HOST_NOT_FOUND 210 +#define NO_DATA 211 +#define NO_RECOVERY 212 +#define TRY_AGAIN 213 +#endif /* LWIP_DNS_API_DEFINE_ERRORS */ + +#if LWIP_DNS_API_DECLARE_STRUCTS +struct hostent { + char *h_name; /* Official name of the host. */ + char **h_aliases; /* A pointer to an array of pointers to alternative host names, + terminated by a null pointer. */ + int h_addrtype; /* Address type. */ + int h_length; /* The length, in bytes, of the address. */ + char **h_addr_list; /* A pointer to an array of pointers to network addresses (in + network byte order) for the host, terminated by a null pointer. */ +#define h_addr h_addr_list[0] /* for backward compatibility */ +}; + +struct addrinfo { + int ai_flags; /* Input flags. */ + int ai_family; /* Address family of socket. */ + int ai_socktype; /* Socket type. */ + int ai_protocol; /* Protocol of socket. */ + socklen_t ai_addrlen; /* Length of socket address. */ + struct sockaddr *ai_addr; /* Socket address of socket. */ + char *ai_canonname; /* Canonical name of service location. */ + struct addrinfo *ai_next; /* Pointer to next in list. */ +}; +#endif /* LWIP_DNS_API_DECLARE_STRUCTS */ + +#if LWIP_DNS_API_DECLARE_H_ERRNO +/* application accessable error code set by the DNS API functions */ +extern int h_errno; +#endif /* LWIP_DNS_API_DECLARE_H_ERRNO*/ + +struct hostent *lwip_gethostbyname(const char *name); +int lwip_gethostbyname_r(const char *name, struct hostent *ret, char *buf, + size_t buflen, struct hostent **result, int *h_errnop); +void lwip_freeaddrinfo(struct addrinfo *ai); +int lwip_getaddrinfo(const char *nodename, + const char *servname, + const struct addrinfo *hints, + struct addrinfo **res); + +#if LWIP_COMPAT_SOCKETS +#define gethostbyname(name) lwip_gethostbyname(name) +#define gethostbyname_r(name, ret, buf, buflen, result, h_errnop) \ + lwip_gethostbyname_r(name, ret, buf, buflen, result, h_errnop) +#define freeaddrinfo(addrinfo) lwip_freeaddrinfo(addrinfo) +#define getaddrinfo(nodname, servname, hints, res) \ + lwip_getaddrinfo(nodname, servname, hints, res) +#endif /* LWIP_COMPAT_SOCKETS */ + +#endif /* LWIP_DNS && LWIP_SOCKET */ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/netif.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/netif.h new file mode 100644 index 000000000..8e650d74d --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/netif.h @@ -0,0 +1,265 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIP_NETIF_H__ +#define __LWIP_NETIF_H__ + +#include "lwip/opt.h" + +#define ENABLE_LOOPBACK (LWIP_NETIF_LOOPBACK || LWIP_HAVE_LOOPIF) + +#include "lwip/err.h" + +#include "lwip/ip_addr.h" + +#include "lwip/inet.h" +#include "lwip/pbuf.h" +#if LWIP_DHCP +struct dhcp; +#endif +#if LWIP_AUTOIP +struct autoip; +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* Throughout this file, IP addresses are expected to be in + * the same byte order as in IP_PCB. */ + +/** must be the maximum of all used hardware address lengths + across all types of interfaces in use */ +#define NETIF_MAX_HWADDR_LEN 6U + +/** TODO: define the use (where, when, whom) of netif flags */ + +/** whether the network interface is 'up'. this is + * a software flag used to control whether this network + * interface is enabled and processes traffic. + */ +#define NETIF_FLAG_UP 0x01U +/** if set, the netif has broadcast capability */ +#define NETIF_FLAG_BROADCAST 0x02U +/** if set, the netif is one end of a point-to-point connection */ +#define NETIF_FLAG_POINTTOPOINT 0x04U +/** if set, the interface is configured using DHCP */ +#define NETIF_FLAG_DHCP 0x08U +/** if set, the interface has an active link + * (set by the network interface driver) */ +#define NETIF_FLAG_LINK_UP 0x10U +/** if set, the netif is an device using ARP */ +#define NETIF_FLAG_ETHARP 0x20U +/** if set, the netif has IGMP capability */ +#define NETIF_FLAG_IGMP 0x40U + +/** Generic data structure used for all lwIP network interfaces. + * The following fields should be filled in by the initialization + * function for the device driver: hwaddr_len, hwaddr[], mtu, flags */ + +struct netif { + /** pointer to next in linked list */ + struct netif *next; + + /** IP address configuration in network byte order */ + struct ip_addr ip_addr; + struct ip_addr netmask; + struct ip_addr gw; + + /** This function is called by the network device driver + * to pass a packet up the TCP/IP stack. */ + err_t (* input)(struct pbuf *p, struct netif *inp); + /** This function is called by the IP module when it wants + * to send a packet on the interface. This function typically + * first resolves the hardware address, then sends the packet. */ + err_t (* output)(struct netif *netif, struct pbuf *p, + struct ip_addr *ipaddr); + /** This function is called by the ARP module when it wants + * to send a packet on the interface. This function outputs + * the pbuf as-is on the link medium. */ + err_t (* linkoutput)(struct netif *netif, struct pbuf *p); +#if LWIP_NETIF_STATUS_CALLBACK + /** This function is called when the netif state is set to up or down + */ + void (* status_callback)(struct netif *netif); +#endif /* LWIP_NETIF_STATUS_CALLBACK */ +#if LWIP_NETIF_LINK_CALLBACK + /** This function is called when the netif link is set to up or down + */ + void (* link_callback)(struct netif *netif); +#endif /* LWIP_NETIF_LINK_CALLBACK */ + /** This field can be set by the device driver and could point + * to state information for the device. */ + void *state; +#if LWIP_DHCP + /** the DHCP client state information for this netif */ + struct dhcp *dhcp; +#endif /* LWIP_DHCP */ +#if LWIP_AUTOIP + /** the AutoIP client state information for this netif */ + struct autoip *autoip; +#endif +#if LWIP_NETIF_HOSTNAME + /* the hostname for this netif, NULL is a valid value */ + char* hostname; +#endif /* LWIP_NETIF_HOSTNAME */ + /** maximum transfer unit (in bytes) */ + u16_t mtu; + /** number of bytes used in hwaddr */ + u8_t hwaddr_len; + /** link level hardware address of this interface */ + u8_t hwaddr[NETIF_MAX_HWADDR_LEN]; + /** flags (see NETIF_FLAG_ above) */ + u8_t flags; + /** descriptive abbreviation */ + char name[2]; + /** number of this interface */ + u8_t num; +#if LWIP_SNMP + /** link type (from "snmp_ifType" enum from snmp.h) */ + u8_t link_type; + /** (estimate) link speed */ + u32_t link_speed; + /** timestamp at last change made (up/down) */ + u32_t ts; + /** counters */ + u32_t ifinoctets; + u32_t ifinucastpkts; + u32_t ifinnucastpkts; + u32_t ifindiscards; + u32_t ifoutoctets; + u32_t ifoutucastpkts; + u32_t ifoutnucastpkts; + u32_t ifoutdiscards; +#endif /* LWIP_SNMP */ +#if LWIP_IGMP + /* This function could be called to add or delete a entry in the multicast filter table of the ethernet MAC.*/ + err_t (*igmp_mac_filter)( struct netif *netif, struct ip_addr *group, u8_t action); +#endif /* LWIP_IGMP */ +#if LWIP_NETIF_HWADDRHINT + u8_t *addr_hint; +#endif /* LWIP_NETIF_HWADDRHINT */ +#if ENABLE_LOOPBACK + /* List of packets to be queued for ourselves. */ + struct pbuf *loop_first; + struct pbuf *loop_last; +#if LWIP_LOOPBACK_MAX_PBUFS + u16_t loop_cnt_current; +#endif /* LWIP_LOOPBACK_MAX_PBUFS */ +#endif /* ENABLE_LOOPBACK */ +}; + +#if LWIP_SNMP +#define NETIF_INIT_SNMP(netif, type, speed) \ + /* use "snmp_ifType" enum from snmp.h for "type", snmp_ifType_ethernet_csmacd by example */ \ + netif->link_type = type; \ + /* your link speed here (units: bits per second) */ \ + netif->link_speed = speed; \ + netif->ts = 0; \ + netif->ifinoctets = 0; \ + netif->ifinucastpkts = 0; \ + netif->ifinnucastpkts = 0; \ + netif->ifindiscards = 0; \ + netif->ifoutoctets = 0; \ + netif->ifoutucastpkts = 0; \ + netif->ifoutnucastpkts = 0; \ + netif->ifoutdiscards = 0 +#else /* LWIP_SNMP */ +#define NETIF_INIT_SNMP(netif, type, speed) +#endif /* LWIP_SNMP */ + + +/** The list of network interfaces. */ +extern struct netif *netif_list; +/** The default network interface. */ +extern struct netif *netif_default; + +#define netif_init() /* Compatibility define, not init needed. */ + +struct netif *netif_add(struct netif *netif, struct ip_addr *ipaddr, struct ip_addr *netmask, + struct ip_addr *gw, + void *state, + err_t (* init)(struct netif *netif), + err_t (* input)(struct pbuf *p, struct netif *netif)); + +void +netif_set_addr(struct netif *netif,struct ip_addr *ipaddr, struct ip_addr *netmask, + struct ip_addr *gw); +void netif_remove(struct netif * netif); + +/* Returns a network interface given its name. The name is of the form + "et0", where the first two letters are the "name" field in the + netif structure, and the digit is in the num field in the same + structure. */ +struct netif *netif_find(char *name); + +void netif_set_default(struct netif *netif); + +void netif_set_ipaddr(struct netif *netif, struct ip_addr *ipaddr); +void netif_set_netmask(struct netif *netif, struct ip_addr *netmask); +void netif_set_gw(struct netif *netif, struct ip_addr *gw); + +void netif_set_up(struct netif *netif); +void netif_set_down(struct netif *netif); +u8_t netif_is_up(struct netif *netif); + +#if LWIP_NETIF_STATUS_CALLBACK +/* + * Set callback to be called when interface is brought up/down + */ +void netif_set_status_callback(struct netif *netif, void (* status_callback)(struct netif *netif)); +#endif /* LWIP_NETIF_STATUS_CALLBACK */ + +#if LWIP_NETIF_LINK_CALLBACK +void netif_set_link_up(struct netif *netif); +void netif_set_link_down(struct netif *netif); +u8_t netif_is_link_up(struct netif *netif); +/* + * Set callback to be called when link is brought up/down + */ +void netif_set_link_callback(struct netif *netif, void (* link_callback)(struct netif *netif)); +#endif /* LWIP_NETIF_LINK_CALLBACK */ + +#ifdef __cplusplus +} +#endif + +#if ENABLE_LOOPBACK +err_t netif_loop_output(struct netif *netif, struct pbuf *p, struct ip_addr *dest_ip); +void netif_poll(struct netif *netif); +#if !LWIP_NETIF_LOOPBACK_MULTITHREADING +void netif_poll_all(void); +#endif /* !LWIP_NETIF_LOOPBACK_MULTITHREADING */ +#endif /* ENABLE_LOOPBACK */ + +#endif /* __LWIP_NETIF_H__ */ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/netifapi.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/netifapi.h new file mode 100644 index 000000000..22d8690ea --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/netifapi.h @@ -0,0 +1,107 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + */ + +#ifndef __LWIP_NETIFAPI_H__ +#define __LWIP_NETIFAPI_H__ + +#include "lwip/opt.h" + +#if LWIP_NETIF_API /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/sys.h" +#include "lwip/netif.h" +#include "lwip/dhcp.h" +#include "lwip/autoip.h" + +#ifdef __cplusplus +extern "C" { +#endif + +struct netifapi_msg_msg { +#if !LWIP_TCPIP_CORE_LOCKING + sys_sem_t sem; +#endif /* !LWIP_TCPIP_CORE_LOCKING */ + err_t err; + struct netif *netif; + union { + struct { + struct ip_addr *ipaddr; + struct ip_addr *netmask; + struct ip_addr *gw; + void *state; + err_t (* init) (struct netif *netif); + err_t (* input)(struct pbuf *p, struct netif *netif); + } add; + struct { + void (* voidfunc)(struct netif *netif); + err_t (* errtfunc)(struct netif *netif); + } common; + } msg; +}; + +struct netifapi_msg { + void (* function)(struct netifapi_msg_msg *msg); + struct netifapi_msg_msg msg; +}; + + +/* API for application */ +err_t netifapi_netif_add ( struct netif *netif, + struct ip_addr *ipaddr, + struct ip_addr *netmask, + struct ip_addr *gw, + void *state, + err_t (* init)(struct netif *netif), + err_t (* input)(struct pbuf *p, struct netif *netif) ); + +err_t netifapi_netif_set_addr ( struct netif *netif, + struct ip_addr *ipaddr, + struct ip_addr *netmask, + struct ip_addr *gw ); + +err_t netifapi_netif_common ( struct netif *netif, + void (* voidfunc)(struct netif *netif), + err_t (* errtfunc)(struct netif *netif) ); + +#define netifapi_netif_remove(n) netifapi_netif_common(n, netif_remove, NULL) +#define netifapi_netif_set_up(n) netifapi_netif_common(n, netif_set_up, NULL) +#define netifapi_netif_set_down(n) netifapi_netif_common(n, netif_set_down, NULL) +#define netifapi_netif_set_default(n) netifapi_netif_common(n, netif_set_default, NULL) +#define netifapi_dhcp_start(n) netifapi_netif_common(n, NULL, dhcp_start) +#define netifapi_dhcp_stop(n) netifapi_netif_common(n, dhcp_stop, NULL) +#define netifapi_autoip_start(n) netifapi_netif_common(n, NULL, autoip_start) +#define netifapi_autoip_stop(n) netifapi_netif_common(n, NULL, autoip_stop) + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_NETIF_API */ + +#endif /* __LWIP_NETIFAPI_H__ */ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/opt.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/opt.h new file mode 100644 index 000000000..a7cdbd8e7 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/opt.h @@ -0,0 +1,1842 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/** + * @file + * + * lwIP Options Configuration + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIP_OPT_H__ +#define __LWIP_OPT_H__ + +/* + * Include user defined options first. Anything not defined in these files + * will be set to standard values. Override anything you dont like! + */ +#include "lwipopts.h" +#include "lwip/debug.h" + +/* + ----------------------------------------------- + ---------- Platform specific locking ---------- + ----------------------------------------------- +*/ + +/** + * SYS_LIGHTWEIGHT_PROT==1: if you want inter-task protection for certain + * critical regions during buffer allocation, deallocation and memory + * allocation and deallocation. + */ +#ifndef SYS_LIGHTWEIGHT_PROT +#define SYS_LIGHTWEIGHT_PROT 0 +#endif + +/** + * NO_SYS==1: Provides VERY minimal functionality. Otherwise, + * use lwIP facilities. + */ +#ifndef NO_SYS +#define NO_SYS 0 +#endif + +/** + * MEMCPY: override this if you have a faster implementation at hand than the + * one included in your C library + */ +#ifndef MEMCPY +#define MEMCPY(dst,src,len) memcpy(dst,src,len) +#endif + +/** + * SMEMCPY: override this with care! Some compilers (e.g. gcc) can inline a + * call to memcpy() if the length is known at compile time and is small. + */ +#ifndef SMEMCPY +#define SMEMCPY(dst,src,len) memcpy(dst,src,len) +#endif + +/* + ------------------------------------ + ---------- Memory options ---------- + ------------------------------------ +*/ +/** + * MEM_LIBC_MALLOC==1: Use malloc/free/realloc provided by your C-library + * instead of the lwip internal allocator. Can save code size if you + * already use it. + */ +#ifndef MEM_LIBC_MALLOC +#define MEM_LIBC_MALLOC 0 +#endif + +/** +* MEMP_MEM_MALLOC==1: Use mem_malloc/mem_free instead of the lwip pool allocator. +* Especially useful with MEM_LIBC_MALLOC but handle with care regarding execution +* speed and usage from interrupts! +*/ +#ifndef MEMP_MEM_MALLOC +#define MEMP_MEM_MALLOC 0 +#endif + +/** + * MEM_ALIGNMENT: should be set to the alignment of the CPU + * 4 byte alignment -> #define MEM_ALIGNMENT 4 + * 2 byte alignment -> #define MEM_ALIGNMENT 2 + */ +#ifndef MEM_ALIGNMENT +#define MEM_ALIGNMENT 1 +#endif + +/** + * MEM_SIZE: the size of the heap memory. If the application will send + * a lot of data that needs to be copied, this should be set high. + */ +#ifndef MEM_SIZE +#define MEM_SIZE 1600 +#endif + +/** + * MEMP_OVERFLOW_CHECK: memp overflow protection reserves a configurable + * amount of bytes before and after each memp element in every pool and fills + * it with a prominent default value. + * MEMP_OVERFLOW_CHECK == 0 no checking + * MEMP_OVERFLOW_CHECK == 1 checks each element when it is freed + * MEMP_OVERFLOW_CHECK >= 2 checks each element in every pool every time + * memp_malloc() or memp_free() is called (useful but slow!) + */ +#ifndef MEMP_OVERFLOW_CHECK +#define MEMP_OVERFLOW_CHECK 0 +#endif + +/** + * MEMP_SANITY_CHECK==1: run a sanity check after each memp_free() to make + * sure that there are no cycles in the linked lists. + */ +#ifndef MEMP_SANITY_CHECK +#define MEMP_SANITY_CHECK 0 +#endif + +/** + * MEM_USE_POOLS==1: Use an alternative to malloc() by allocating from a set + * of memory pools of various sizes. When mem_malloc is called, an element of + * the smallest pool that can provide the length needed is returned. + * To use this, MEMP_USE_CUSTOM_POOLS also has to be enabled. + */ +#ifndef MEM_USE_POOLS +#define MEM_USE_POOLS 0 +#endif + +/** + * MEM_USE_POOLS_TRY_BIGGER_POOL==1: if one malloc-pool is empty, try the next + * bigger pool - WARNING: THIS MIGHT WASTE MEMORY but it can make a system more + * reliable. */ +#ifndef MEM_USE_POOLS_TRY_BIGGER_POOL +#define MEM_USE_POOLS_TRY_BIGGER_POOL 0 +#endif + +/** + * MEMP_USE_CUSTOM_POOLS==1: whether to include a user file lwippools.h + * that defines additional pools beyond the "standard" ones required + * by lwIP. If you set this to 1, you must have lwippools.h in your + * inlude path somewhere. + */ +#ifndef MEMP_USE_CUSTOM_POOLS +#define MEMP_USE_CUSTOM_POOLS 0 +#endif + +/** + * Set this to 1 if you want to free PBUF_RAM pbufs (or call mem_free()) from + * interrupt context (or another context that doesn't allow waiting for a + * semaphore). + * If set to 1, mem_malloc will be protected by a semaphore and SYS_ARCH_PROTECT, + * while mem_free will only use SYS_ARCH_PROTECT. mem_malloc SYS_ARCH_UNPROTECTs + * with each loop so that mem_free can run. + * + * ATTENTION: As you can see from the above description, this leads to dis-/ + * enabling interrupts often, which can be slow! Also, on low memory, mem_malloc + * can need longer. + * + * If you don't want that, at least for NO_SYS=0, you can still use the following + * functions to enqueue a deallocation call which then runs in the tcpip_thread + * context: + * - pbuf_free_callback(p); + * - mem_free_callback(m); + */ +#ifndef LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT +#define LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT 0 +#endif + +/* + ------------------------------------------------ + ---------- Internal Memory Pool Sizes ---------- + ------------------------------------------------ +*/ +/** + * MEMP_NUM_PBUF: the number of memp struct pbufs (used for PBUF_ROM and PBUF_REF). + * If the application sends a lot of data out of ROM (or other static memory), + * this should be set high. + */ +#ifndef MEMP_NUM_PBUF +#define MEMP_NUM_PBUF 16 +#endif + +/** + * MEMP_NUM_RAW_PCB: Number of raw connection PCBs + * (requires the LWIP_RAW option) + */ +#ifndef MEMP_NUM_RAW_PCB +#define MEMP_NUM_RAW_PCB 4 +#endif + +/** + * MEMP_NUM_UDP_PCB: the number of UDP protocol control blocks. One + * per active UDP "connection". + * (requires the LWIP_UDP option) + */ +#ifndef MEMP_NUM_UDP_PCB +#define MEMP_NUM_UDP_PCB 4 +#endif + +/** + * MEMP_NUM_TCP_PCB: the number of simulatenously active TCP connections. + * (requires the LWIP_TCP option) + */ +#ifndef MEMP_NUM_TCP_PCB +#define MEMP_NUM_TCP_PCB 5 +#endif + +/** + * MEMP_NUM_TCP_PCB_LISTEN: the number of listening TCP connections. + * (requires the LWIP_TCP option) + */ +#ifndef MEMP_NUM_TCP_PCB_LISTEN +#define MEMP_NUM_TCP_PCB_LISTEN 8 +#endif + +/** + * MEMP_NUM_TCP_SEG: the number of simultaneously queued TCP segments. + * (requires the LWIP_TCP option) + */ +#ifndef MEMP_NUM_TCP_SEG +#define MEMP_NUM_TCP_SEG 16 +#endif + +/** + * MEMP_NUM_REASSDATA: the number of simultaneously IP packets queued for + * reassembly (whole packets, not fragments!) + */ +#ifndef MEMP_NUM_REASSDATA +#define MEMP_NUM_REASSDATA 5 +#endif + +/** + * MEMP_NUM_ARP_QUEUE: the number of simulateously queued outgoing + * packets (pbufs) that are waiting for an ARP request (to resolve + * their destination address) to finish. + * (requires the ARP_QUEUEING option) + */ +#ifndef MEMP_NUM_ARP_QUEUE +#define MEMP_NUM_ARP_QUEUE 30 +#endif + +/** + * MEMP_NUM_IGMP_GROUP: The number of multicast groups whose network interfaces + * can be members et the same time (one per netif - allsystems group -, plus one + * per netif membership). + * (requires the LWIP_IGMP option) + */ +#ifndef MEMP_NUM_IGMP_GROUP +#define MEMP_NUM_IGMP_GROUP 8 +#endif + +/** + * MEMP_NUM_SYS_TIMEOUT: the number of simulateously active timeouts. + * (requires NO_SYS==0) + */ +#ifndef MEMP_NUM_SYS_TIMEOUT +#define MEMP_NUM_SYS_TIMEOUT 3 +#endif + +/** + * MEMP_NUM_NETBUF: the number of struct netbufs. + * (only needed if you use the sequential API, like api_lib.c) + */ +#ifndef MEMP_NUM_NETBUF +#define MEMP_NUM_NETBUF 2 +#endif + +/** + * MEMP_NUM_NETCONN: the number of struct netconns. + * (only needed if you use the sequential API, like api_lib.c) + */ +#ifndef MEMP_NUM_NETCONN +#define MEMP_NUM_NETCONN 4 +#endif + +/** + * MEMP_NUM_TCPIP_MSG_API: the number of struct tcpip_msg, which are used + * for callback/timeout API communication. + * (only needed if you use tcpip.c) + */ +#ifndef MEMP_NUM_TCPIP_MSG_API +#define MEMP_NUM_TCPIP_MSG_API 8 +#endif + +/** + * MEMP_NUM_TCPIP_MSG_INPKT: the number of struct tcpip_msg, which are used + * for incoming packets. + * (only needed if you use tcpip.c) + */ +#ifndef MEMP_NUM_TCPIP_MSG_INPKT +#define MEMP_NUM_TCPIP_MSG_INPKT 8 +#endif + +/** + * PBUF_POOL_SIZE: the number of buffers in the pbuf pool. + */ +#ifndef PBUF_POOL_SIZE +#define PBUF_POOL_SIZE 16 +#endif + +/* + --------------------------------- + ---------- ARP options ---------- + --------------------------------- +*/ +/** + * LWIP_ARP==1: Enable ARP functionality. + */ +#ifndef LWIP_ARP +#define LWIP_ARP 1 +#endif + +/** + * ARP_TABLE_SIZE: Number of active MAC-IP address pairs cached. + */ +#ifndef ARP_TABLE_SIZE +#define ARP_TABLE_SIZE 10 +#endif + +/** + * ARP_QUEUEING==1: Outgoing packets are queued during hardware address + * resolution. + */ +#ifndef ARP_QUEUEING +#define ARP_QUEUEING 1 +#endif + +/** + * ETHARP_TRUST_IP_MAC==1: Incoming IP packets cause the ARP table to be + * updated with the source MAC and IP addresses supplied in the packet. + * You may want to disable this if you do not trust LAN peers to have the + * correct addresses, or as a limited approach to attempt to handle + * spoofing. If disabled, lwIP will need to make a new ARP request if + * the peer is not already in the ARP table, adding a little latency. + */ +#ifndef ETHARP_TRUST_IP_MAC +#define ETHARP_TRUST_IP_MAC 1 +#endif + +/** + * ETHARP_SUPPORT_VLAN==1: support receiving ethernet packets with VLAN header. + * Additionally, you can define ETHARP_VLAN_CHECK to an u16_t VLAN ID to check. + * If ETHARP_VLAN_CHECK is defined, only VLAN-traffic for this VLAN is accepted. + * If ETHARP_VLAN_CHECK is not defined, all traffic is accepted. + */ +#ifndef ETHARP_SUPPORT_VLAN +#define ETHARP_SUPPORT_VLAN 0 +#endif + +/* + -------------------------------- + ---------- IP options ---------- + -------------------------------- +*/ +/** + * IP_FORWARD==1: Enables the ability to forward IP packets across network + * interfaces. If you are going to run lwIP on a device with only one network + * interface, define this to 0. + */ +#ifndef IP_FORWARD +#define IP_FORWARD 0 +#endif + +/** + * IP_OPTIONS_ALLOWED: Defines the behavior for IP options. + * IP_OPTIONS_ALLOWED==0: All packets with IP options are dropped. + * IP_OPTIONS_ALLOWED==1: IP options are allowed (but not parsed). + */ +#ifndef IP_OPTIONS_ALLOWED +#define IP_OPTIONS_ALLOWED 1 +#endif + +/** + * IP_REASSEMBLY==1: Reassemble incoming fragmented IP packets. Note that + * this option does not affect outgoing packet sizes, which can be controlled + * via IP_FRAG. + */ +#ifndef IP_REASSEMBLY +#define IP_REASSEMBLY 1 +#endif + +/** + * IP_FRAG==1: Fragment outgoing IP packets if their size exceeds MTU. Note + * that this option does not affect incoming packet sizes, which can be + * controlled via IP_REASSEMBLY. + */ +#ifndef IP_FRAG +#define IP_FRAG 1 +#endif + +/** + * IP_REASS_MAXAGE: Maximum time (in multiples of IP_TMR_INTERVAL - so seconds, normally) + * a fragmented IP packet waits for all fragments to arrive. If not all fragments arrived + * in this time, the whole packet is discarded. + */ +#ifndef IP_REASS_MAXAGE +#define IP_REASS_MAXAGE 3 +#endif + +/** + * IP_REASS_MAX_PBUFS: Total maximum amount of pbufs waiting to be reassembled. + * Since the received pbufs are enqueued, be sure to configure + * PBUF_POOL_SIZE > IP_REASS_MAX_PBUFS so that the stack is still able to receive + * packets even if the maximum amount of fragments is enqueued for reassembly! + */ +#ifndef IP_REASS_MAX_PBUFS +#define IP_REASS_MAX_PBUFS 10 +#endif + +/** + * IP_FRAG_USES_STATIC_BUF==1: Use a static MTU-sized buffer for IP + * fragmentation. Otherwise pbufs are allocated and reference the original + * packet data to be fragmented. + */ +#ifndef IP_FRAG_USES_STATIC_BUF +#define IP_FRAG_USES_STATIC_BUF 1 +#endif + +/** + * IP_FRAG_MAX_MTU: Assumed max MTU on any interface for IP frag buffer + * (requires IP_FRAG_USES_STATIC_BUF==1) + */ +#if IP_FRAG_USES_STATIC_BUF && !defined(IP_FRAG_MAX_MTU) +#define IP_FRAG_MAX_MTU 1500 +#endif + +/** + * IP_DEFAULT_TTL: Default value for Time-To-Live used by transport layers. + */ +#ifndef IP_DEFAULT_TTL +#define IP_DEFAULT_TTL 255 +#endif + +/** + * IP_SOF_BROADCAST=1: Use the SOF_BROADCAST field to enable broadcast + * filter per pcb on udp and raw send operations. To enable broadcast filter + * on recv operations, you also have to set IP_SOF_BROADCAST_RECV=1. + */ +#ifndef IP_SOF_BROADCAST +#define IP_SOF_BROADCAST 0 +#endif + +/** + * IP_SOF_BROADCAST_RECV (requires IP_SOF_BROADCAST=1) enable the broadcast + * filter on recv operations. + */ +#ifndef IP_SOF_BROADCAST_RECV +#define IP_SOF_BROADCAST_RECV 0 +#endif + +/* + ---------------------------------- + ---------- ICMP options ---------- + ---------------------------------- +*/ +/** + * LWIP_ICMP==1: Enable ICMP module inside the IP stack. + * Be careful, disable that make your product non-compliant to RFC1122 + */ +#ifndef LWIP_ICMP +#define LWIP_ICMP 1 +#endif + +/** + * ICMP_TTL: Default value for Time-To-Live used by ICMP packets. + */ +#ifndef ICMP_TTL +#define ICMP_TTL (IP_DEFAULT_TTL) +#endif + +/** + * LWIP_BROADCAST_PING==1: respond to broadcast pings (default is unicast only) + */ +#ifndef LWIP_BROADCAST_PING +#define LWIP_BROADCAST_PING 0 +#endif + +/** + * LWIP_MULTICAST_PING==1: respond to multicast pings (default is unicast only) + */ +#ifndef LWIP_MULTICAST_PING +#define LWIP_MULTICAST_PING 0 +#endif + +/* + --------------------------------- + ---------- RAW options ---------- + --------------------------------- +*/ +/** + * LWIP_RAW==1: Enable application layer to hook into the IP layer itself. + */ +#ifndef LWIP_RAW +#define LWIP_RAW 1 +#endif + +/** + * LWIP_RAW==1: Enable application layer to hook into the IP layer itself. + */ +#ifndef RAW_TTL +#define RAW_TTL (IP_DEFAULT_TTL) +#endif + +/* + ---------------------------------- + ---------- DHCP options ---------- + ---------------------------------- +*/ +/** + * LWIP_DHCP==1: Enable DHCP module. + */ +#ifndef LWIP_DHCP +#define LWIP_DHCP 0 +#endif + +/** + * DHCP_DOES_ARP_CHECK==1: Do an ARP check on the offered address. + */ +#ifndef DHCP_DOES_ARP_CHECK +#define DHCP_DOES_ARP_CHECK ((LWIP_DHCP) && (LWIP_ARP)) +#endif + +/* + ------------------------------------ + ---------- AUTOIP options ---------- + ------------------------------------ +*/ +/** + * LWIP_AUTOIP==1: Enable AUTOIP module. + */ +#ifndef LWIP_AUTOIP +#define LWIP_AUTOIP 0 +#endif + +/** + * LWIP_DHCP_AUTOIP_COOP==1: Allow DHCP and AUTOIP to be both enabled on + * the same interface at the same time. + */ +#ifndef LWIP_DHCP_AUTOIP_COOP +#define LWIP_DHCP_AUTOIP_COOP 0 +#endif + +/** + * LWIP_DHCP_AUTOIP_COOP_TRIES: Set to the number of DHCP DISCOVER probes + * that should be sent before falling back on AUTOIP. This can be set + * as low as 1 to get an AutoIP address very quickly, but you should + * be prepared to handle a changing IP address when DHCP overrides + * AutoIP. + */ +#ifndef LWIP_DHCP_AUTOIP_COOP_TRIES +#define LWIP_DHCP_AUTOIP_COOP_TRIES 9 +#endif + +/* + ---------------------------------- + ---------- SNMP options ---------- + ---------------------------------- +*/ +/** + * LWIP_SNMP==1: Turn on SNMP module. UDP must be available for SNMP + * transport. + */ +#ifndef LWIP_SNMP +#define LWIP_SNMP 0 +#endif + +/** + * SNMP_CONCURRENT_REQUESTS: Number of concurrent requests the module will + * allow. At least one request buffer is required. + */ +#ifndef SNMP_CONCURRENT_REQUESTS +#define SNMP_CONCURRENT_REQUESTS 1 +#endif + +/** + * SNMP_TRAP_DESTINATIONS: Number of trap destinations. At least one trap + * destination is required + */ +#ifndef SNMP_TRAP_DESTINATIONS +#define SNMP_TRAP_DESTINATIONS 1 +#endif + +/** + * SNMP_PRIVATE_MIB: + */ +#ifndef SNMP_PRIVATE_MIB +#define SNMP_PRIVATE_MIB 0 +#endif + +/** + * Only allow SNMP write actions that are 'safe' (e.g. disabeling netifs is not + * a safe action and disabled when SNMP_SAFE_REQUESTS = 1). + * Unsafe requests are disabled by default! + */ +#ifndef SNMP_SAFE_REQUESTS +#define SNMP_SAFE_REQUESTS 1 +#endif + +/* + ---------------------------------- + ---------- IGMP options ---------- + ---------------------------------- +*/ +/** + * LWIP_IGMP==1: Turn on IGMP module. + */ +#ifndef LWIP_IGMP +#define LWIP_IGMP 0 +#endif + +/* + ---------------------------------- + ---------- DNS options ----------- + ---------------------------------- +*/ +/** + * LWIP_DNS==1: Turn on DNS module. UDP must be available for DNS + * transport. + */ +#ifndef LWIP_DNS +#define LWIP_DNS 0 +#endif + +/** DNS maximum number of entries to maintain locally. */ +#ifndef DNS_TABLE_SIZE +#define DNS_TABLE_SIZE 4 +#endif + +/** DNS maximum host name length supported in the name table. */ +#ifndef DNS_MAX_NAME_LENGTH +#define DNS_MAX_NAME_LENGTH 256 +#endif + +/** The maximum of DNS servers */ +#ifndef DNS_MAX_SERVERS +#define DNS_MAX_SERVERS 2 +#endif + +/** DNS do a name checking between the query and the response. */ +#ifndef DNS_DOES_NAME_CHECK +#define DNS_DOES_NAME_CHECK 1 +#endif + +/** DNS use a local buffer if DNS_USES_STATIC_BUF=0, a static one if + DNS_USES_STATIC_BUF=1, or a dynamic one if DNS_USES_STATIC_BUF=2. + The buffer will be of size DNS_MSG_SIZE */ +#ifndef DNS_USES_STATIC_BUF +#define DNS_USES_STATIC_BUF 1 +#endif + +/** DNS message max. size. Default value is RFC compliant. */ +#ifndef DNS_MSG_SIZE +#define DNS_MSG_SIZE 512 +#endif + +/** DNS_LOCAL_HOSTLIST: Implements a local host-to-address list. If enabled, + * you have to define + * #define DNS_LOCAL_HOSTLIST_INIT {{"host1", 0x123}, {"host2", 0x234}} + * (an array of structs name/address, where address is an u32_t in network + * byte order). + * + * Instead, you can also use an external function: + * #define DNS_LOOKUP_LOCAL_EXTERN(x) extern u32_t my_lookup_function(const char *name) + * that returns the IP address or INADDR_NONE if not found. + */ +#ifndef DNS_LOCAL_HOSTLIST +#define DNS_LOCAL_HOSTLIST 0 +#endif /* DNS_LOCAL_HOSTLIST */ + +/** If this is turned on, the local host-list can be dynamically changed + * at runtime. */ +#ifndef DNS_LOCAL_HOSTLIST_IS_DYNAMIC +#define DNS_LOCAL_HOSTLIST_IS_DYNAMIC 0 +#endif /* DNS_LOCAL_HOSTLIST_IS_DYNAMIC */ + +/* + --------------------------------- + ---------- UDP options ---------- + --------------------------------- +*/ +/** + * LWIP_UDP==1: Turn on UDP. + */ +#ifndef LWIP_UDP +#define LWIP_UDP 1 +#endif + +/** + * LWIP_UDPLITE==1: Turn on UDP-Lite. (Requires LWIP_UDP) + */ +#ifndef LWIP_UDPLITE +#define LWIP_UDPLITE 0 +#endif + +/** + * UDP_TTL: Default Time-To-Live value. + */ +#ifndef UDP_TTL +#define UDP_TTL (IP_DEFAULT_TTL) +#endif + +/** + * LWIP_NETBUF_RECVINFO==1: append destination addr and port to every netbuf. + */ +#ifndef LWIP_NETBUF_RECVINFO +#define LWIP_NETBUF_RECVINFO 0 +#endif + +/* + --------------------------------- + ---------- TCP options ---------- + --------------------------------- +*/ +/** + * LWIP_TCP==1: Turn on TCP. + */ +#ifndef LWIP_TCP +#define LWIP_TCP 1 +#endif + +/** + * TCP_TTL: Default Time-To-Live value. + */ +#ifndef TCP_TTL +#define TCP_TTL (IP_DEFAULT_TTL) +#endif + +/** + * TCP_WND: The size of a TCP window. This must be at least + * (2 * TCP_MSS) for things to work well + */ +#ifndef TCP_WND +#define TCP_WND (4 * TCP_MSS) +#endif + +/** + * TCP_MAXRTX: Maximum number of retransmissions of data segments. + */ +#ifndef TCP_MAXRTX +#define TCP_MAXRTX 12 +#endif + +/** + * TCP_SYNMAXRTX: Maximum number of retransmissions of SYN segments. + */ +#ifndef TCP_SYNMAXRTX +#define TCP_SYNMAXRTX 6 +#endif + +/** + * TCP_QUEUE_OOSEQ==1: TCP will queue segments that arrive out of order. + * Define to 0 if your device is low on memory. + */ +#ifndef TCP_QUEUE_OOSEQ +#define TCP_QUEUE_OOSEQ (LWIP_TCP) +#endif + +/** + * TCP_MSS: TCP Maximum segment size. (default is 536, a conservative default, + * you might want to increase this.) + * For the receive side, this MSS is advertised to the remote side + * when opening a connection. For the transmit size, this MSS sets + * an upper limit on the MSS advertised by the remote host. + */ +#ifndef TCP_MSS +#define TCP_MSS 536 +#endif + +/** + * TCP_CALCULATE_EFF_SEND_MSS: "The maximum size of a segment that TCP really + * sends, the 'effective send MSS,' MUST be the smaller of the send MSS (which + * reflects the available reassembly buffer size at the remote host) and the + * largest size permitted by the IP layer" (RFC 1122) + * Setting this to 1 enables code that checks TCP_MSS against the MTU of the + * netif used for a connection and limits the MSS if it would be too big otherwise. + */ +#ifndef TCP_CALCULATE_EFF_SEND_MSS +#define TCP_CALCULATE_EFF_SEND_MSS 1 +#endif + + +/** + * TCP_SND_BUF: TCP sender buffer space (bytes). + */ +#ifndef TCP_SND_BUF +#define TCP_SND_BUF 256 +#endif + +/** + * TCP_SND_QUEUELEN: TCP sender buffer space (pbufs). This must be at least + * as much as (2 * TCP_SND_BUF/TCP_MSS) for things to work. + */ +#ifndef TCP_SND_QUEUELEN +#define TCP_SND_QUEUELEN (4 * (TCP_SND_BUF)/(TCP_MSS)) +#endif + +/** + * TCP_SNDLOWAT: TCP writable space (bytes). This must be less than or equal + * to TCP_SND_BUF. It is the amount of space which must be available in the + * TCP snd_buf for select to return writable. + */ +#ifndef TCP_SNDLOWAT +#define TCP_SNDLOWAT ((TCP_SND_BUF)/2) +#endif + +/** + * TCP_LISTEN_BACKLOG: Enable the backlog option for tcp listen pcb. + */ +#ifndef TCP_LISTEN_BACKLOG +#define TCP_LISTEN_BACKLOG 0 +#endif + +/** + * The maximum allowed backlog for TCP listen netconns. + * This backlog is used unless another is explicitly specified. + * 0xff is the maximum (u8_t). + */ +#ifndef TCP_DEFAULT_LISTEN_BACKLOG +#define TCP_DEFAULT_LISTEN_BACKLOG 0xff +#endif + +/** + * LWIP_TCP_TIMESTAMPS==1: support the TCP timestamp option. + */ +#ifndef LWIP_TCP_TIMESTAMPS +#define LWIP_TCP_TIMESTAMPS 0 +#endif + +/** + * TCP_WND_UPDATE_THRESHOLD: difference in window to trigger an + * explicit window update + */ +#ifndef TCP_WND_UPDATE_THRESHOLD +#define TCP_WND_UPDATE_THRESHOLD (TCP_WND / 4) +#endif + +/** + * LWIP_EVENT_API and LWIP_CALLBACK_API: Only one of these should be set to 1. + * LWIP_EVENT_API==1: The user defines lwip_tcp_event() to receive all + * events (accept, sent, etc) that happen in the system. + * LWIP_CALLBACK_API==1: The PCB callback function is called directly + * for the event. + */ +#ifndef LWIP_EVENT_API +#define LWIP_EVENT_API 0 +#define LWIP_CALLBACK_API 1 +#else +#define LWIP_EVENT_API 1 +#define LWIP_CALLBACK_API 0 +#endif + + +/* + ---------------------------------- + ---------- Pbuf options ---------- + ---------------------------------- +*/ +/** + * PBUF_LINK_HLEN: the number of bytes that should be allocated for a + * link level header. The default is 14, the standard value for + * Ethernet. + */ +#ifndef PBUF_LINK_HLEN +#define PBUF_LINK_HLEN 14 +#endif + +/** + * PBUF_POOL_BUFSIZE: the size of each pbuf in the pbuf pool. The default is + * designed to accomodate single full size TCP frame in one pbuf, including + * TCP_MSS, IP header, and link header. + */ +#ifndef PBUF_POOL_BUFSIZE +#define PBUF_POOL_BUFSIZE LWIP_MEM_ALIGN_SIZE(TCP_MSS+40+PBUF_LINK_HLEN) +#endif + +/* + ------------------------------------------------ + ---------- Network Interfaces options ---------- + ------------------------------------------------ +*/ +/** + * LWIP_NETIF_HOSTNAME==1: use DHCP_OPTION_HOSTNAME with netif's hostname + * field. + */ +#ifndef LWIP_NETIF_HOSTNAME +#define LWIP_NETIF_HOSTNAME 0 +#endif + +/** + * LWIP_NETIF_API==1: Support netif api (in netifapi.c) + */ +#ifndef LWIP_NETIF_API +#define LWIP_NETIF_API 0 +#endif + +/** + * LWIP_NETIF_STATUS_CALLBACK==1: Support a callback function whenever an interface + * changes its up/down status (i.e., due to DHCP IP acquistion) + */ +#ifndef LWIP_NETIF_STATUS_CALLBACK +#define LWIP_NETIF_STATUS_CALLBACK 0 +#endif + +/** + * LWIP_NETIF_LINK_CALLBACK==1: Support a callback function from an interface + * whenever the link changes (i.e., link down) + */ +#ifndef LWIP_NETIF_LINK_CALLBACK +#define LWIP_NETIF_LINK_CALLBACK 0 +#endif + +/** + * LWIP_NETIF_HWADDRHINT==1: Cache link-layer-address hints (e.g. table + * indices) in struct netif. TCP and UDP can make use of this to prevent + * scanning the ARP table for every sent packet. While this is faster for big + * ARP tables or many concurrent connections, it might be counterproductive + * if you have a tiny ARP table or if there never are concurrent connections. + */ +#ifndef LWIP_NETIF_HWADDRHINT +#define LWIP_NETIF_HWADDRHINT 0 +#endif + +/** + * LWIP_NETIF_LOOPBACK==1: Support sending packets with a destination IP + * address equal to the netif IP address, looping them back up the stack. + */ +#ifndef LWIP_NETIF_LOOPBACK +#define LWIP_NETIF_LOOPBACK 0 +#endif + +/** + * LWIP_LOOPBACK_MAX_PBUFS: Maximum number of pbufs on queue for loopback + * sending for each netif (0 = disabled) + */ +#ifndef LWIP_LOOPBACK_MAX_PBUFS +#define LWIP_LOOPBACK_MAX_PBUFS 0 +#endif + +/** + * LWIP_NETIF_LOOPBACK_MULTITHREADING: Indicates whether threading is enabled in + * the system, as netifs must change how they behave depending on this setting + * for the LWIP_NETIF_LOOPBACK option to work. + * Setting this is needed to avoid reentering non-reentrant functions like + * tcp_input(). + * LWIP_NETIF_LOOPBACK_MULTITHREADING==1: Indicates that the user is using a + * multithreaded environment like tcpip.c. In this case, netif->input() + * is called directly. + * LWIP_NETIF_LOOPBACK_MULTITHREADING==0: Indicates a polling (or NO_SYS) setup. + * The packets are put on a list and netif_poll() must be called in + * the main application loop. + */ +#ifndef LWIP_NETIF_LOOPBACK_MULTITHREADING +#define LWIP_NETIF_LOOPBACK_MULTITHREADING (!NO_SYS) +#endif + +/** + * LWIP_NETIF_TX_SINGLE_PBUF: if this is set to 1, lwIP tries to put all data + * to be sent into one single pbuf. This is for compatibility with DMA-enabled + * MACs that do not support scatter-gather. + * Beware that this might involve CPU-memcpy before transmitting that would not + * be needed without this flag! Use this only if you need to! + * + * @todo: TCP and IP-frag do not work with this, yet: + */ +#ifndef LWIP_NETIF_TX_SINGLE_PBUF +#define LWIP_NETIF_TX_SINGLE_PBUF 0 +#endif /* LWIP_NETIF_TX_SINGLE_PBUF */ + +/* + ------------------------------------ + ---------- LOOPIF options ---------- + ------------------------------------ +*/ +/** + * LWIP_HAVE_LOOPIF==1: Support loop interface (127.0.0.1) and loopif.c + */ +#ifndef LWIP_HAVE_LOOPIF +#define LWIP_HAVE_LOOPIF 0 +#endif + +/* + ------------------------------------ + ---------- SLIPIF options ---------- + ------------------------------------ +*/ +/** + * LWIP_HAVE_SLIPIF==1: Support slip interface and slipif.c + */ +#ifndef LWIP_HAVE_SLIPIF +#define LWIP_HAVE_SLIPIF 0 +#endif + +/* + ------------------------------------ + ---------- Thread options ---------- + ------------------------------------ +*/ +/** + * TCPIP_THREAD_NAME: The name assigned to the main tcpip thread. + */ +#ifndef TCPIP_THREAD_NAME +#define TCPIP_THREAD_NAME "tcpip_thread" +#endif + +/** + * TCPIP_THREAD_STACKSIZE: The stack size used by the main tcpip thread. + * The stack size value itself is platform-dependent, but is passed to + * sys_thread_new() when the thread is created. + */ +#ifndef TCPIP_THREAD_STACKSIZE +#define TCPIP_THREAD_STACKSIZE 0 +#endif + +/** + * TCPIP_THREAD_PRIO: The priority assigned to the main tcpip thread. + * The priority value itself is platform-dependent, but is passed to + * sys_thread_new() when the thread is created. + */ +#ifndef TCPIP_THREAD_PRIO +#define TCPIP_THREAD_PRIO 1 +#endif + +/** + * TCPIP_MBOX_SIZE: The mailbox size for the tcpip thread messages + * The queue size value itself is platform-dependent, but is passed to + * sys_mbox_new() when tcpip_init is called. + */ +#ifndef TCPIP_MBOX_SIZE +#define TCPIP_MBOX_SIZE 0 +#endif + +/** + * SLIPIF_THREAD_NAME: The name assigned to the slipif_loop thread. + */ +#ifndef SLIPIF_THREAD_NAME +#define SLIPIF_THREAD_NAME "slipif_loop" +#endif + +/** + * SLIP_THREAD_STACKSIZE: The stack size used by the slipif_loop thread. + * The stack size value itself is platform-dependent, but is passed to + * sys_thread_new() when the thread is created. + */ +#ifndef SLIPIF_THREAD_STACKSIZE +#define SLIPIF_THREAD_STACKSIZE 0 +#endif + +/** + * SLIPIF_THREAD_PRIO: The priority assigned to the slipif_loop thread. + * The priority value itself is platform-dependent, but is passed to + * sys_thread_new() when the thread is created. + */ +#ifndef SLIPIF_THREAD_PRIO +#define SLIPIF_THREAD_PRIO 1 +#endif + +/** + * PPP_THREAD_NAME: The name assigned to the pppMain thread. + */ +#ifndef PPP_THREAD_NAME +#define PPP_THREAD_NAME "pppMain" +#endif + +/** + * PPP_THREAD_STACKSIZE: The stack size used by the pppMain thread. + * The stack size value itself is platform-dependent, but is passed to + * sys_thread_new() when the thread is created. + */ +#ifndef PPP_THREAD_STACKSIZE +#define PPP_THREAD_STACKSIZE 0 +#endif + +/** + * PPP_THREAD_PRIO: The priority assigned to the pppMain thread. + * The priority value itself is platform-dependent, but is passed to + * sys_thread_new() when the thread is created. + */ +#ifndef PPP_THREAD_PRIO +#define PPP_THREAD_PRIO 1 +#endif + +/** + * DEFAULT_THREAD_NAME: The name assigned to any other lwIP thread. + */ +#ifndef DEFAULT_THREAD_NAME +#define DEFAULT_THREAD_NAME "lwIP" +#endif + +/** + * DEFAULT_THREAD_STACKSIZE: The stack size used by any other lwIP thread. + * The stack size value itself is platform-dependent, but is passed to + * sys_thread_new() when the thread is created. + */ +#ifndef DEFAULT_THREAD_STACKSIZE +#define DEFAULT_THREAD_STACKSIZE 0 +#endif + +/** + * DEFAULT_THREAD_PRIO: The priority assigned to any other lwIP thread. + * The priority value itself is platform-dependent, but is passed to + * sys_thread_new() when the thread is created. + */ +#ifndef DEFAULT_THREAD_PRIO +#define DEFAULT_THREAD_PRIO 1 +#endif + +/** + * DEFAULT_RAW_RECVMBOX_SIZE: The mailbox size for the incoming packets on a + * NETCONN_RAW. The queue size value itself is platform-dependent, but is passed + * to sys_mbox_new() when the recvmbox is created. + */ +#ifndef DEFAULT_RAW_RECVMBOX_SIZE +#define DEFAULT_RAW_RECVMBOX_SIZE 0 +#endif + +/** + * DEFAULT_UDP_RECVMBOX_SIZE: The mailbox size for the incoming packets on a + * NETCONN_UDP. The queue size value itself is platform-dependent, but is passed + * to sys_mbox_new() when the recvmbox is created. + */ +#ifndef DEFAULT_UDP_RECVMBOX_SIZE +#define DEFAULT_UDP_RECVMBOX_SIZE 0 +#endif + +/** + * DEFAULT_TCP_RECVMBOX_SIZE: The mailbox size for the incoming packets on a + * NETCONN_TCP. The queue size value itself is platform-dependent, but is passed + * to sys_mbox_new() when the recvmbox is created. + */ +#ifndef DEFAULT_TCP_RECVMBOX_SIZE +#define DEFAULT_TCP_RECVMBOX_SIZE 0 +#endif + +/** + * DEFAULT_ACCEPTMBOX_SIZE: The mailbox size for the incoming connections. + * The queue size value itself is platform-dependent, but is passed to + * sys_mbox_new() when the acceptmbox is created. + */ +#ifndef DEFAULT_ACCEPTMBOX_SIZE +#define DEFAULT_ACCEPTMBOX_SIZE 0 +#endif + +/* + ---------------------------------------------- + ---------- Sequential layer options ---------- + ---------------------------------------------- +*/ +/** + * LWIP_TCPIP_CORE_LOCKING: (EXPERIMENTAL!) + * Don't use it if you're not an active lwIP project member + */ +#ifndef LWIP_TCPIP_CORE_LOCKING +#define LWIP_TCPIP_CORE_LOCKING 0 +#endif + +/** + * LWIP_NETCONN==1: Enable Netconn API (require to use api_lib.c) + */ +#ifndef LWIP_NETCONN +#define LWIP_NETCONN 1 +#endif + +/* + ------------------------------------ + ---------- Socket options ---------- + ------------------------------------ +*/ +/** + * LWIP_SOCKET==1: Enable Socket API (require to use sockets.c) + */ +#ifndef LWIP_SOCKET +#define LWIP_SOCKET 1 +#endif + +/** + * LWIP_COMPAT_SOCKETS==1: Enable BSD-style sockets functions names. + * (only used if you use sockets.c) + */ +#ifndef LWIP_COMPAT_SOCKETS +#define LWIP_COMPAT_SOCKETS 1 +#endif + +/** + * LWIP_POSIX_SOCKETS_IO_NAMES==1: Enable POSIX-style sockets functions names. + * Disable this option if you use a POSIX operating system that uses the same + * names (read, write & close). (only used if you use sockets.c) + */ +#ifndef LWIP_POSIX_SOCKETS_IO_NAMES +#define LWIP_POSIX_SOCKETS_IO_NAMES 1 +#endif + +/** + * LWIP_TCP_KEEPALIVE==1: Enable TCP_KEEPIDLE, TCP_KEEPINTVL and TCP_KEEPCNT + * options processing. Note that TCP_KEEPIDLE and TCP_KEEPINTVL have to be set + * in seconds. (does not require sockets.c, and will affect tcp.c) + */ +#ifndef LWIP_TCP_KEEPALIVE +#define LWIP_TCP_KEEPALIVE 1 +#endif + +/** + * LWIP_SO_RCVTIMEO==1: Enable SO_RCVTIMEO processing. + */ +#ifndef LWIP_SO_RCVTIMEO +#define LWIP_SO_RCVTIMEO 0 +#endif + +/** + * LWIP_SO_RCVBUF==1: Enable SO_RCVBUF processing. + */ +#ifndef LWIP_SO_RCVBUF +#define LWIP_SO_RCVBUF 0 +#endif + +/** + * If LWIP_SO_RCVBUF is used, this is the default value for recv_bufsize. + */ +#ifndef RECV_BUFSIZE_DEFAULT +#define RECV_BUFSIZE_DEFAULT INT_MAX +#endif + +/** + * SO_REUSE==1: Enable SO_REUSEADDR and SO_REUSEPORT options. DO NOT USE! + */ +#ifndef SO_REUSE +#define SO_REUSE 0 +#endif + +/* + ---------------------------------------- + ---------- Statistics options ---------- + ---------------------------------------- +*/ +/** + * LWIP_STATS==1: Enable statistics collection in lwip_stats. + */ +#ifndef LWIP_STATS +#define LWIP_STATS 1 +#endif + +#if LWIP_STATS + +/** + * LWIP_STATS_DISPLAY==1: Compile in the statistics output functions. + */ +#ifndef LWIP_STATS_DISPLAY +#define LWIP_STATS_DISPLAY 0 +#endif + +/** + * LINK_STATS==1: Enable link stats. + */ +#ifndef LINK_STATS +#define LINK_STATS 1 +#endif + +/** + * ETHARP_STATS==1: Enable etharp stats. + */ +#ifndef ETHARP_STATS +#define ETHARP_STATS (LWIP_ARP) +#endif + +/** + * IP_STATS==1: Enable IP stats. + */ +#ifndef IP_STATS +#define IP_STATS 1 +#endif + +/** + * IPFRAG_STATS==1: Enable IP fragmentation stats. Default is + * on if using either frag or reass. + */ +#ifndef IPFRAG_STATS +#define IPFRAG_STATS (IP_REASSEMBLY || IP_FRAG) +#endif + +/** + * ICMP_STATS==1: Enable ICMP stats. + */ +#ifndef ICMP_STATS +#define ICMP_STATS 1 +#endif + +/** + * IGMP_STATS==1: Enable IGMP stats. + */ +#ifndef IGMP_STATS +#define IGMP_STATS (LWIP_IGMP) +#endif + +/** + * UDP_STATS==1: Enable UDP stats. Default is on if + * UDP enabled, otherwise off. + */ +#ifndef UDP_STATS +#define UDP_STATS (LWIP_UDP) +#endif + +/** + * TCP_STATS==1: Enable TCP stats. Default is on if TCP + * enabled, otherwise off. + */ +#ifndef TCP_STATS +#define TCP_STATS (LWIP_TCP) +#endif + +/** + * MEM_STATS==1: Enable mem.c stats. + */ +#ifndef MEM_STATS +#define MEM_STATS ((MEM_LIBC_MALLOC == 0) && (MEM_USE_POOLS == 0)) +#endif + +/** + * MEMP_STATS==1: Enable memp.c pool stats. + */ +#ifndef MEMP_STATS +#define MEMP_STATS (MEMP_MEM_MALLOC == 0) +#endif + +/** + * SYS_STATS==1: Enable system stats (sem and mbox counts, etc). + */ +#ifndef SYS_STATS +#define SYS_STATS (NO_SYS == 0) +#endif + +#else + +#define LINK_STATS 0 +#define IP_STATS 0 +#define IPFRAG_STATS 0 +#define ICMP_STATS 0 +#define IGMP_STATS 0 +#define UDP_STATS 0 +#define TCP_STATS 0 +#define MEM_STATS 0 +#define MEMP_STATS 0 +#define SYS_STATS 0 +#define LWIP_STATS_DISPLAY 0 + +#endif /* LWIP_STATS */ + +/* + --------------------------------- + ---------- PPP options ---------- + --------------------------------- +*/ +/** + * PPP_SUPPORT==1: Enable PPP. + */ +#ifndef PPP_SUPPORT +#define PPP_SUPPORT 0 +#endif + +/** + * PPPOE_SUPPORT==1: Enable PPP Over Ethernet + */ +#ifndef PPPOE_SUPPORT +#define PPPOE_SUPPORT 0 +#endif + +/** + * PPPOS_SUPPORT==1: Enable PPP Over Serial + */ +#ifndef PPPOS_SUPPORT +#define PPPOS_SUPPORT PPP_SUPPORT +#endif + +#if PPP_SUPPORT + +/** + * NUM_PPP: Max PPP sessions. + */ +#ifndef NUM_PPP +#define NUM_PPP 1 +#endif + +/** + * PAP_SUPPORT==1: Support PAP. + */ +#ifndef PAP_SUPPORT +#define PAP_SUPPORT 0 +#endif + +/** + * CHAP_SUPPORT==1: Support CHAP. + */ +#ifndef CHAP_SUPPORT +#define CHAP_SUPPORT 0 +#endif + +/** + * MSCHAP_SUPPORT==1: Support MSCHAP. CURRENTLY NOT SUPPORTED! DO NOT SET! + */ +#ifndef MSCHAP_SUPPORT +#define MSCHAP_SUPPORT 0 +#endif + +/** + * CBCP_SUPPORT==1: Support CBCP. CURRENTLY NOT SUPPORTED! DO NOT SET! + */ +#ifndef CBCP_SUPPORT +#define CBCP_SUPPORT 0 +#endif + +/** + * CCP_SUPPORT==1: Support CCP. CURRENTLY NOT SUPPORTED! DO NOT SET! + */ +#ifndef CCP_SUPPORT +#define CCP_SUPPORT 0 +#endif + +/** + * VJ_SUPPORT==1: Support VJ header compression. + */ +#ifndef VJ_SUPPORT +#define VJ_SUPPORT 0 +#endif + +/** + * MD5_SUPPORT==1: Support MD5 (see also CHAP). + */ +#ifndef MD5_SUPPORT +#define MD5_SUPPORT 0 +#endif + +/* + * Timeouts + */ +#ifndef FSM_DEFTIMEOUT +#define FSM_DEFTIMEOUT 6 /* Timeout time in seconds */ +#endif + +#ifndef FSM_DEFMAXTERMREQS +#define FSM_DEFMAXTERMREQS 2 /* Maximum Terminate-Request transmissions */ +#endif + +#ifndef FSM_DEFMAXCONFREQS +#define FSM_DEFMAXCONFREQS 10 /* Maximum Configure-Request transmissions */ +#endif + +#ifndef FSM_DEFMAXNAKLOOPS +#define FSM_DEFMAXNAKLOOPS 5 /* Maximum number of nak loops */ +#endif + +#ifndef UPAP_DEFTIMEOUT +#define UPAP_DEFTIMEOUT 6 /* Timeout (seconds) for retransmitting req */ +#endif + +#ifndef UPAP_DEFREQTIME +#define UPAP_DEFREQTIME 30 /* Time to wait for auth-req from peer */ +#endif + +#ifndef CHAP_DEFTIMEOUT +#define CHAP_DEFTIMEOUT 6 /* Timeout time in seconds */ +#endif + +#ifndef CHAP_DEFTRANSMITS +#define CHAP_DEFTRANSMITS 10 /* max # times to send challenge */ +#endif + +/* Interval in seconds between keepalive echo requests, 0 to disable. */ +#ifndef LCP_ECHOINTERVAL +#define LCP_ECHOINTERVAL 0 +#endif + +/* Number of unanswered echo requests before failure. */ +#ifndef LCP_MAXECHOFAILS +#define LCP_MAXECHOFAILS 3 +#endif + +/* Max Xmit idle time (in jiffies) before resend flag char. */ +#ifndef PPP_MAXIDLEFLAG +#define PPP_MAXIDLEFLAG 100 +#endif + +/* + * Packet sizes + * + * Note - lcp shouldn't be allowed to negotiate stuff outside these + * limits. See lcp.h in the pppd directory. + * (XXX - these constants should simply be shared by lcp.c instead + * of living in lcp.h) + */ +#define PPP_MTU 1500 /* Default MTU (size of Info field) */ +#ifndef PPP_MAXMTU +/* #define PPP_MAXMTU 65535 - (PPP_HDRLEN + PPP_FCSLEN) */ +#define PPP_MAXMTU 1500 /* Largest MTU we allow */ +#endif +#define PPP_MINMTU 64 +#define PPP_MRU 1500 /* default MRU = max length of info field */ +#define PPP_MAXMRU 1500 /* Largest MRU we allow */ +#ifndef PPP_DEFMRU +#define PPP_DEFMRU 296 /* Try for this */ +#endif +#define PPP_MINMRU 128 /* No MRUs below this */ + +#ifndef MAXNAMELEN +#define MAXNAMELEN 256 /* max length of hostname or name for auth */ +#endif +#ifndef MAXSECRETLEN +#define MAXSECRETLEN 256 /* max length of password or secret */ +#endif + +#endif /* PPP_SUPPORT */ + +/* + -------------------------------------- + ---------- Checksum options ---------- + -------------------------------------- +*/ +/** + * CHECKSUM_GEN_IP==1: Generate checksums in software for outgoing IP packets. + */ +#ifndef CHECKSUM_GEN_IP +#define CHECKSUM_GEN_IP 1 +#endif + +/** + * CHECKSUM_GEN_UDP==1: Generate checksums in software for outgoing UDP packets. + */ +#ifndef CHECKSUM_GEN_UDP +#define CHECKSUM_GEN_UDP 1 +#endif + +/** + * CHECKSUM_GEN_TCP==1: Generate checksums in software for outgoing TCP packets. + */ +#ifndef CHECKSUM_GEN_TCP +#define CHECKSUM_GEN_TCP 1 +#endif + +/** + * CHECKSUM_CHECK_IP==1: Check checksums in software for incoming IP packets. + */ +#ifndef CHECKSUM_CHECK_IP +#define CHECKSUM_CHECK_IP 1 +#endif + +/** + * CHECKSUM_CHECK_UDP==1: Check checksums in software for incoming UDP packets. + */ +#ifndef CHECKSUM_CHECK_UDP +#define CHECKSUM_CHECK_UDP 1 +#endif + +/** + * CHECKSUM_CHECK_TCP==1: Check checksums in software for incoming TCP packets. + */ +#ifndef CHECKSUM_CHECK_TCP +#define CHECKSUM_CHECK_TCP 1 +#endif + +/* + --------------------------------------- + ---------- Debugging options ---------- + --------------------------------------- +*/ +/** + * LWIP_DBG_MIN_LEVEL: After masking, the value of the debug is + * compared against this value. If it is smaller, then debugging + * messages are written. + */ +#ifndef LWIP_DBG_MIN_LEVEL +#define LWIP_DBG_MIN_LEVEL LWIP_DBG_LEVEL_ALL +#endif + +/** + * LWIP_DBG_TYPES_ON: A mask that can be used to globally enable/disable + * debug messages of certain types. + */ +#ifndef LWIP_DBG_TYPES_ON +#define LWIP_DBG_TYPES_ON LWIP_DBG_ON +#endif + +/** + * ETHARP_DEBUG: Enable debugging in etharp.c. + */ +#ifndef ETHARP_DEBUG +#define ETHARP_DEBUG LWIP_DBG_OFF +#endif + +/** + * NETIF_DEBUG: Enable debugging in netif.c. + */ +#ifndef NETIF_DEBUG +#define NETIF_DEBUG LWIP_DBG_OFF +#endif + +/** + * PBUF_DEBUG: Enable debugging in pbuf.c. + */ +#ifndef PBUF_DEBUG +#define PBUF_DEBUG LWIP_DBG_OFF +#endif + +/** + * API_LIB_DEBUG: Enable debugging in api_lib.c. + */ +#ifndef API_LIB_DEBUG +#define API_LIB_DEBUG LWIP_DBG_OFF +#endif + +/** + * API_MSG_DEBUG: Enable debugging in api_msg.c. + */ +#ifndef API_MSG_DEBUG +#define API_MSG_DEBUG LWIP_DBG_OFF +#endif + +/** + * SOCKETS_DEBUG: Enable debugging in sockets.c. + */ +#ifndef SOCKETS_DEBUG +#define SOCKETS_DEBUG LWIP_DBG_OFF +#endif + +/** + * ICMP_DEBUG: Enable debugging in icmp.c. + */ +#ifndef ICMP_DEBUG +#define ICMP_DEBUG LWIP_DBG_OFF +#endif + +/** + * IGMP_DEBUG: Enable debugging in igmp.c. + */ +#ifndef IGMP_DEBUG +#define IGMP_DEBUG LWIP_DBG_OFF +#endif + +/** + * INET_DEBUG: Enable debugging in inet.c. + */ +#ifndef INET_DEBUG +#define INET_DEBUG LWIP_DBG_OFF +#endif + +/** + * IP_DEBUG: Enable debugging for IP. + */ +#ifndef IP_DEBUG +#define IP_DEBUG LWIP_DBG_OFF +#endif + +/** + * IP_REASS_DEBUG: Enable debugging in ip_frag.c for both frag & reass. + */ +#ifndef IP_REASS_DEBUG +#define IP_REASS_DEBUG LWIP_DBG_OFF +#endif + +/** + * RAW_DEBUG: Enable debugging in raw.c. + */ +#ifndef RAW_DEBUG +#define RAW_DEBUG LWIP_DBG_OFF +#endif + +/** + * MEM_DEBUG: Enable debugging in mem.c. + */ +#ifndef MEM_DEBUG +#define MEM_DEBUG LWIP_DBG_OFF +#endif + +/** + * MEMP_DEBUG: Enable debugging in memp.c. + */ +#ifndef MEMP_DEBUG +#define MEMP_DEBUG LWIP_DBG_OFF +#endif + +/** + * SYS_DEBUG: Enable debugging in sys.c. + */ +#ifndef SYS_DEBUG +#define SYS_DEBUG LWIP_DBG_OFF +#endif + +/** + * TCP_DEBUG: Enable debugging for TCP. + */ +#ifndef TCP_DEBUG +#define TCP_DEBUG LWIP_DBG_OFF +#endif + +/** + * TCP_INPUT_DEBUG: Enable debugging in tcp_in.c for incoming debug. + */ +#ifndef TCP_INPUT_DEBUG +#define TCP_INPUT_DEBUG LWIP_DBG_ON +#endif + +/** + * TCP_FR_DEBUG: Enable debugging in tcp_in.c for fast retransmit. + */ +#ifndef TCP_FR_DEBUG +#define TCP_FR_DEBUG LWIP_DBG_OFF +#endif + +/** + * TCP_RTO_DEBUG: Enable debugging in TCP for retransmit + * timeout. + */ +#ifndef TCP_RTO_DEBUG +#define TCP_RTO_DEBUG LWIP_DBG_OFF +#endif + +/** + * TCP_CWND_DEBUG: Enable debugging for TCP congestion window. + */ +#ifndef TCP_CWND_DEBUG +#define TCP_CWND_DEBUG LWIP_DBG_OFF +#endif + +/** + * TCP_WND_DEBUG: Enable debugging in tcp_in.c for window updating. + */ +#ifndef TCP_WND_DEBUG +#define TCP_WND_DEBUG LWIP_DBG_OFF +#endif + +/** + * TCP_OUTPUT_DEBUG: Enable debugging in tcp_out.c output functions. + */ +#ifndef TCP_OUTPUT_DEBUG +#define TCP_OUTPUT_DEBUG LWIP_DBG_OFF +#endif + +/** + * TCP_RST_DEBUG: Enable debugging for TCP with the RST message. + */ +#ifndef TCP_RST_DEBUG +#define TCP_RST_DEBUG LWIP_DBG_OFF +#endif + +/** + * TCP_QLEN_DEBUG: Enable debugging for TCP queue lengths. + */ +#ifndef TCP_QLEN_DEBUG +#define TCP_QLEN_DEBUG LWIP_DBG_OFF +#endif + +/** + * UDP_DEBUG: Enable debugging in UDP. + */ +#ifndef UDP_DEBUG +#define UDP_DEBUG LWIP_DBG_OFF +#endif + +/** + * TCPIP_DEBUG: Enable debugging in tcpip.c. + */ +#ifndef TCPIP_DEBUG +#define TCPIP_DEBUG LWIP_DBG_OFF +#endif + +/** + * PPP_DEBUG: Enable debugging for PPP. + */ +#ifndef PPP_DEBUG +#define PPP_DEBUG LWIP_DBG_OFF +#endif + +/** + * SLIP_DEBUG: Enable debugging in slipif.c. + */ +#ifndef SLIP_DEBUG +#define SLIP_DEBUG LWIP_DBG_OFF +#endif + +/** + * DHCP_DEBUG: Enable debugging in dhcp.c. + */ +#ifndef DHCP_DEBUG +#define DHCP_DEBUG LWIP_DBG_OFF +#endif + +/** + * AUTOIP_DEBUG: Enable debugging in autoip.c. + */ +#ifndef AUTOIP_DEBUG +#define AUTOIP_DEBUG LWIP_DBG_OFF +#endif + +/** + * SNMP_MSG_DEBUG: Enable debugging for SNMP messages. + */ +#ifndef SNMP_MSG_DEBUG +#define SNMP_MSG_DEBUG LWIP_DBG_OFF +#endif + +/** + * SNMP_MIB_DEBUG: Enable debugging for SNMP MIBs. + */ +#ifndef SNMP_MIB_DEBUG +#define SNMP_MIB_DEBUG LWIP_DBG_OFF +#endif + +/** + * DNS_DEBUG: Enable debugging for DNS. + */ +#ifndef DNS_DEBUG +#define DNS_DEBUG LWIP_DBG_OFF +#endif + +#endif /* __LWIP_OPT_H__ */ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/pbuf.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/pbuf.h new file mode 100644 index 000000000..8ca61b176 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/pbuf.h @@ -0,0 +1,122 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#ifndef __LWIP_PBUF_H__ +#define __LWIP_PBUF_H__ + +#include "lwip/opt.h" +#include "lwip/err.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define PBUF_TRANSPORT_HLEN 20 +#define PBUF_IP_HLEN 20 + +typedef enum { + PBUF_TRANSPORT, + PBUF_IP, + PBUF_LINK, + PBUF_RAW +} pbuf_layer; + +typedef enum { + PBUF_RAM, /* pbuf data is stored in RAM */ + PBUF_ROM, /* pbuf data is stored in ROM */ + PBUF_REF, /* pbuf comes from the pbuf pool */ + PBUF_POOL /* pbuf payload refers to RAM */ +} pbuf_type; + + +/** indicates this packet's data should be immediately passed to the application */ +#define PBUF_FLAG_PUSH 0x01U + +struct pbuf { + /** next pbuf in singly linked pbuf chain */ + struct pbuf *next; + + /** pointer to the actual data in the buffer */ + void *payload; + + /** + * total length of this buffer and all next buffers in chain + * belonging to the same packet. + * + * For non-queue packet chains this is the invariant: + * p->tot_len == p->len + (p->next? p->next->tot_len: 0) + */ + u16_t tot_len; + + /** length of this buffer */ + u16_t len; + + /** pbuf_type as u8_t instead of enum to save space */ + u8_t /*pbuf_type*/ type; + + /** misc flags */ + u8_t flags; + + /** + * the reference count always equals the number of pointers + * that refer to this pbuf. This can be pointers from an application, + * the stack itself, or pbuf->next pointers from a chain. + */ + u16_t ref; + +}; + +/* Initializes the pbuf module. This call is empty for now, but may not be in future. */ +#define pbuf_init() + +struct pbuf *pbuf_alloc(pbuf_layer l, u16_t size, pbuf_type type); +void pbuf_realloc(struct pbuf *p, u16_t size); +u8_t pbuf_header(struct pbuf *p, s16_t header_size); +void pbuf_ref(struct pbuf *p); +void pbuf_ref_chain(struct pbuf *p); +u8_t pbuf_free(struct pbuf *p); +u8_t pbuf_clen(struct pbuf *p); +void pbuf_cat(struct pbuf *head, struct pbuf *tail); +void pbuf_chain(struct pbuf *head, struct pbuf *tail); +struct pbuf *pbuf_dechain(struct pbuf *p); +err_t pbuf_copy(struct pbuf *p_to, struct pbuf *p_from); +u16_t pbuf_copy_partial(struct pbuf *p, void *dataptr, u16_t len, u16_t offset); +err_t pbuf_take(struct pbuf *buf, const void *dataptr, u16_t len); +struct pbuf *pbuf_coalesce(struct pbuf *p, pbuf_layer layer); + +#ifdef __cplusplus +} +#endif + +#endif /* __LWIP_PBUF_H__ */ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/raw.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/raw.h new file mode 100644 index 000000000..545c43367 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/raw.h @@ -0,0 +1,99 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIP_RAW_H__ +#define __LWIP_RAW_H__ + +#include "lwip/opt.h" + +#if LWIP_RAW /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/pbuf.h" +#include "lwip/inet.h" +#include "lwip/ip.h" +#include "lwip/ip_addr.h" + +#ifdef __cplusplus +extern "C" { +#endif + +struct raw_pcb { +/* Common members of all PCB types */ + IP_PCB; + + struct raw_pcb *next; + + u8_t protocol; + + /* receive callback function + * @param arg user supplied argument (raw_pcb.recv_arg) + * @param pcb the raw_pcb which received data + * @param p the packet buffer that was received + * @param addr the remote IP address from which the packet was received + * @return 1 if the packet was 'eaten' (aka. deleted), + * 0 if the packet lives on + * If returning 1, the callback is responsible for freeing the pbuf + * if it's not used any more. + */ + u8_t (* recv)(void *arg, struct raw_pcb *pcb, struct pbuf *p, + struct ip_addr *addr); + /* user-supplied argument for the recv callback */ + void *recv_arg; +}; + +/* The following functions is the application layer interface to the + RAW code. */ +struct raw_pcb * raw_new (u8_t proto); +void raw_remove (struct raw_pcb *pcb); +err_t raw_bind (struct raw_pcb *pcb, struct ip_addr *ipaddr); +err_t raw_connect (struct raw_pcb *pcb, struct ip_addr *ipaddr); + +void raw_recv (struct raw_pcb *pcb, + u8_t (* recv)(void *arg, struct raw_pcb *pcb, + struct pbuf *p, + struct ip_addr *addr), + void *recv_arg); +err_t raw_sendto (struct raw_pcb *pcb, struct pbuf *p, struct ip_addr *ipaddr); +err_t raw_send (struct raw_pcb *pcb, struct pbuf *p); + +/* The following functions are the lower layer interface to RAW. */ +u8_t raw_input (struct pbuf *p, struct netif *inp); +#define raw_init() /* Compatibility define, not init needed. */ + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_RAW */ + +#endif /* __LWIP_RAW_H__ */ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/sio.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/sio.h new file mode 100644 index 000000000..10eabcf16 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/sio.h @@ -0,0 +1,143 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + */ + +/* + * This is the interface to the platform specific serial IO module + * It needs to be implemented by those platforms which need SLIP or PPP + */ + +#ifndef __SIO_H__ +#define __SIO_H__ + +#include "lwip/arch.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* If you want to define sio_fd_t elsewhere or differently, + define this in your cc.h file. */ +#ifndef __sio_fd_t_defined +typedef void * sio_fd_t; +#endif + +/* The following functions can be defined to something else in your cc.h file + or be implemented in your custom sio.c file. */ + +#ifndef sio_open +/** + * Opens a serial device for communication. + * + * @param devnum device number + * @return handle to serial device if successful, NULL otherwise + */ +sio_fd_t sio_open(u8_t devnum); +#endif + +#ifndef sio_send +/** + * Sends a single character to the serial device. + * + * @param c character to send + * @param fd serial device handle + * + * @note This function will block until the character can be sent. + */ +void sio_send(u8_t c, sio_fd_t fd); +#endif + +#ifndef sio_recv +/** + * Receives a single character from the serial device. + * + * @param fd serial device handle + * + * @note This function will block until a character is received. + */ +u8_t sio_recv(sio_fd_t fd); +#endif + +#ifndef sio_read +/** + * Reads from the serial device. + * + * @param fd serial device handle + * @param data pointer to data buffer for receiving + * @param len maximum length (in bytes) of data to receive + * @return number of bytes actually received - may be 0 if aborted by sio_read_abort + * + * @note This function will block until data can be received. The blocking + * can be cancelled by calling sio_read_abort(). + */ +u32_t sio_read(sio_fd_t fd, u8_t *data, u32_t len); +#endif + +#ifndef sio_tryread +/** + * Tries to read from the serial device. Same as sio_read but returns + * immediately if no data is available and never blocks. + * + * @param fd serial device handle + * @param data pointer to data buffer for receiving + * @param len maximum length (in bytes) of data to receive + * @return number of bytes actually received + */ +u32_t sio_tryread(sio_fd_t fd, u8_t *data, u32_t len); +#endif + +#ifndef sio_write +/** + * Writes to the serial device. + * + * @param fd serial device handle + * @param data pointer to data to send + * @param len length (in bytes) of data to send + * @return number of bytes actually sent + * + * @note This function will block until all data can be sent. + */ +u32_t sio_write(sio_fd_t fd, u8_t *data, u32_t len); +#endif + +#ifndef sio_read_abort +/** + * Aborts a blocking sio_read() call. + * + * @param fd serial device handle + */ +void sio_read_abort(sio_fd_t fd); +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* __SIO_H__ */ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/snmp.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/snmp.h new file mode 100644 index 000000000..b87717f9a --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/snmp.h @@ -0,0 +1,366 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Copyright (c) 2001, 2002 Leon Woestenberg + * Copyright (c) 2001, 2002 Axon Digital Design B.V., The Netherlands. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Leon Woestenberg + * + */ +#ifndef __LWIP_SNMP_H__ +#define __LWIP_SNMP_H__ + +#include "lwip/opt.h" +#include "lwip/netif.h" +#include "lwip/udp.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @see RFC1213, "MIB-II, 6. Definitions" + */ +enum snmp_ifType { + snmp_ifType_other=1, /* none of the following */ + snmp_ifType_regular1822, + snmp_ifType_hdh1822, + snmp_ifType_ddn_x25, + snmp_ifType_rfc877_x25, + snmp_ifType_ethernet_csmacd, + snmp_ifType_iso88023_csmacd, + snmp_ifType_iso88024_tokenBus, + snmp_ifType_iso88025_tokenRing, + snmp_ifType_iso88026_man, + snmp_ifType_starLan, + snmp_ifType_proteon_10Mbit, + snmp_ifType_proteon_80Mbit, + snmp_ifType_hyperchannel, + snmp_ifType_fddi, + snmp_ifType_lapb, + snmp_ifType_sdlc, + snmp_ifType_ds1, /* T-1 */ + snmp_ifType_e1, /* european equiv. of T-1 */ + snmp_ifType_basicISDN, + snmp_ifType_primaryISDN, /* proprietary serial */ + snmp_ifType_propPointToPointSerial, + snmp_ifType_ppp, + snmp_ifType_softwareLoopback, + snmp_ifType_eon, /* CLNP over IP [11] */ + snmp_ifType_ethernet_3Mbit, + snmp_ifType_nsip, /* XNS over IP */ + snmp_ifType_slip, /* generic SLIP */ + snmp_ifType_ultra, /* ULTRA technologies */ + snmp_ifType_ds3, /* T-3 */ + snmp_ifType_sip, /* SMDS */ + snmp_ifType_frame_relay +}; + +#if LWIP_SNMP /* don't build if not configured for use in lwipopts.h */ + +/** SNMP "sysuptime" Interval */ +#define SNMP_SYSUPTIME_INTERVAL 10 + +/** fixed maximum length for object identifier type */ +#define LWIP_SNMP_OBJ_ID_LEN 32 + +/** internal object identifier representation */ +struct snmp_obj_id +{ + u8_t len; + s32_t id[LWIP_SNMP_OBJ_ID_LEN]; +}; + +/* system */ +void snmp_set_sysdesr(u8_t* str, u8_t* len); +void snmp_set_sysobjid(struct snmp_obj_id *oid); +void snmp_get_sysobjid_ptr(struct snmp_obj_id **oid); +void snmp_inc_sysuptime(void); +void snmp_add_sysuptime(u32_t value); +void snmp_get_sysuptime(u32_t *value); +void snmp_set_syscontact(u8_t *ocstr, u8_t *ocstrlen); +void snmp_set_sysname(u8_t *ocstr, u8_t *ocstrlen); +void snmp_set_syslocation(u8_t *ocstr, u8_t *ocstrlen); + +/* network interface */ +void snmp_add_ifinoctets(struct netif *ni, u32_t value); +void snmp_inc_ifinucastpkts(struct netif *ni); +void snmp_inc_ifinnucastpkts(struct netif *ni); +void snmp_inc_ifindiscards(struct netif *ni); +void snmp_add_ifoutoctets(struct netif *ni, u32_t value); +void snmp_inc_ifoutucastpkts(struct netif *ni); +void snmp_inc_ifoutnucastpkts(struct netif *ni); +void snmp_inc_ifoutdiscards(struct netif *ni); +void snmp_inc_iflist(void); +void snmp_dec_iflist(void); + +/* ARP (for atTable and ipNetToMediaTable) */ +void snmp_insert_arpidx_tree(struct netif *ni, struct ip_addr *ip); +void snmp_delete_arpidx_tree(struct netif *ni, struct ip_addr *ip); + +/* IP */ +void snmp_inc_ipinreceives(void); +void snmp_inc_ipinhdrerrors(void); +void snmp_inc_ipinaddrerrors(void); +void snmp_inc_ipforwdatagrams(void); +void snmp_inc_ipinunknownprotos(void); +void snmp_inc_ipindiscards(void); +void snmp_inc_ipindelivers(void); +void snmp_inc_ipoutrequests(void); +void snmp_inc_ipoutdiscards(void); +void snmp_inc_ipoutnoroutes(void); +void snmp_inc_ipreasmreqds(void); +void snmp_inc_ipreasmoks(void); +void snmp_inc_ipreasmfails(void); +void snmp_inc_ipfragoks(void); +void snmp_inc_ipfragfails(void); +void snmp_inc_ipfragcreates(void); +void snmp_inc_iproutingdiscards(void); +void snmp_insert_ipaddridx_tree(struct netif *ni); +void snmp_delete_ipaddridx_tree(struct netif *ni); +void snmp_insert_iprteidx_tree(u8_t dflt, struct netif *ni); +void snmp_delete_iprteidx_tree(u8_t dflt, struct netif *ni); + +/* ICMP */ +void snmp_inc_icmpinmsgs(void); +void snmp_inc_icmpinerrors(void); +void snmp_inc_icmpindestunreachs(void); +void snmp_inc_icmpintimeexcds(void); +void snmp_inc_icmpinparmprobs(void); +void snmp_inc_icmpinsrcquenchs(void); +void snmp_inc_icmpinredirects(void); +void snmp_inc_icmpinechos(void); +void snmp_inc_icmpinechoreps(void); +void snmp_inc_icmpintimestamps(void); +void snmp_inc_icmpintimestampreps(void); +void snmp_inc_icmpinaddrmasks(void); +void snmp_inc_icmpinaddrmaskreps(void); +void snmp_inc_icmpoutmsgs(void); +void snmp_inc_icmpouterrors(void); +void snmp_inc_icmpoutdestunreachs(void); +void snmp_inc_icmpouttimeexcds(void); +void snmp_inc_icmpoutparmprobs(void); +void snmp_inc_icmpoutsrcquenchs(void); +void snmp_inc_icmpoutredirects(void); +void snmp_inc_icmpoutechos(void); +void snmp_inc_icmpoutechoreps(void); +void snmp_inc_icmpouttimestamps(void); +void snmp_inc_icmpouttimestampreps(void); +void snmp_inc_icmpoutaddrmasks(void); +void snmp_inc_icmpoutaddrmaskreps(void); + +/* TCP */ +void snmp_inc_tcpactiveopens(void); +void snmp_inc_tcppassiveopens(void); +void snmp_inc_tcpattemptfails(void); +void snmp_inc_tcpestabresets(void); +void snmp_inc_tcpinsegs(void); +void snmp_inc_tcpoutsegs(void); +void snmp_inc_tcpretranssegs(void); +void snmp_inc_tcpinerrs(void); +void snmp_inc_tcpoutrsts(void); + +/* UDP */ +void snmp_inc_udpindatagrams(void); +void snmp_inc_udpnoports(void); +void snmp_inc_udpinerrors(void); +void snmp_inc_udpoutdatagrams(void); +void snmp_insert_udpidx_tree(struct udp_pcb *pcb); +void snmp_delete_udpidx_tree(struct udp_pcb *pcb); + +/* SNMP */ +void snmp_inc_snmpinpkts(void); +void snmp_inc_snmpoutpkts(void); +void snmp_inc_snmpinbadversions(void); +void snmp_inc_snmpinbadcommunitynames(void); +void snmp_inc_snmpinbadcommunityuses(void); +void snmp_inc_snmpinasnparseerrs(void); +void snmp_inc_snmpintoobigs(void); +void snmp_inc_snmpinnosuchnames(void); +void snmp_inc_snmpinbadvalues(void); +void snmp_inc_snmpinreadonlys(void); +void snmp_inc_snmpingenerrs(void); +void snmp_add_snmpintotalreqvars(u8_t value); +void snmp_add_snmpintotalsetvars(u8_t value); +void snmp_inc_snmpingetrequests(void); +void snmp_inc_snmpingetnexts(void); +void snmp_inc_snmpinsetrequests(void); +void snmp_inc_snmpingetresponses(void); +void snmp_inc_snmpintraps(void); +void snmp_inc_snmpouttoobigs(void); +void snmp_inc_snmpoutnosuchnames(void); +void snmp_inc_snmpoutbadvalues(void); +void snmp_inc_snmpoutgenerrs(void); +void snmp_inc_snmpoutgetrequests(void); +void snmp_inc_snmpoutgetnexts(void); +void snmp_inc_snmpoutsetrequests(void); +void snmp_inc_snmpoutgetresponses(void); +void snmp_inc_snmpouttraps(void); +void snmp_get_snmpgrpid_ptr(struct snmp_obj_id **oid); +void snmp_set_snmpenableauthentraps(u8_t *value); +void snmp_get_snmpenableauthentraps(u8_t *value); + +/* LWIP_SNMP support not available */ +/* define everything to be empty */ +#else + +/* system */ +#define snmp_set_sysdesr(str, len) +#define snmp_set_sysobjid(oid); +#define snmp_get_sysobjid_ptr(oid) +#define snmp_inc_sysuptime() +#define snmp_add_sysuptime(value) +#define snmp_get_sysuptime(value) +#define snmp_set_syscontact(ocstr, ocstrlen); +#define snmp_set_sysname(ocstr, ocstrlen); +#define snmp_set_syslocation(ocstr, ocstrlen); + +/* network interface */ +#define snmp_add_ifinoctets(ni,value) +#define snmp_inc_ifinucastpkts(ni) +#define snmp_inc_ifinnucastpkts(ni) +#define snmp_inc_ifindiscards(ni) +#define snmp_add_ifoutoctets(ni,value) +#define snmp_inc_ifoutucastpkts(ni) +#define snmp_inc_ifoutnucastpkts(ni) +#define snmp_inc_ifoutdiscards(ni) +#define snmp_inc_iflist() +#define snmp_dec_iflist() + +/* ARP */ +#define snmp_insert_arpidx_tree(ni,ip) +#define snmp_delete_arpidx_tree(ni,ip) + +/* IP */ +#define snmp_inc_ipinreceives() +#define snmp_inc_ipinhdrerrors() +#define snmp_inc_ipinaddrerrors() +#define snmp_inc_ipforwdatagrams() +#define snmp_inc_ipinunknownprotos() +#define snmp_inc_ipindiscards() +#define snmp_inc_ipindelivers() +#define snmp_inc_ipoutrequests() +#define snmp_inc_ipoutdiscards() +#define snmp_inc_ipoutnoroutes() +#define snmp_inc_ipreasmreqds() +#define snmp_inc_ipreasmoks() +#define snmp_inc_ipreasmfails() +#define snmp_inc_ipfragoks() +#define snmp_inc_ipfragfails() +#define snmp_inc_ipfragcreates() +#define snmp_inc_iproutingdiscards() +#define snmp_insert_ipaddridx_tree(ni) +#define snmp_delete_ipaddridx_tree(ni) +#define snmp_insert_iprteidx_tree(dflt, ni) +#define snmp_delete_iprteidx_tree(dflt, ni) + +/* ICMP */ +#define snmp_inc_icmpinmsgs() +#define snmp_inc_icmpinerrors() +#define snmp_inc_icmpindestunreachs() +#define snmp_inc_icmpintimeexcds() +#define snmp_inc_icmpinparmprobs() +#define snmp_inc_icmpinsrcquenchs() +#define snmp_inc_icmpinredirects() +#define snmp_inc_icmpinechos() +#define snmp_inc_icmpinechoreps() +#define snmp_inc_icmpintimestamps() +#define snmp_inc_icmpintimestampreps() +#define snmp_inc_icmpinaddrmasks() +#define snmp_inc_icmpinaddrmaskreps() +#define snmp_inc_icmpoutmsgs() +#define snmp_inc_icmpouterrors() +#define snmp_inc_icmpoutdestunreachs() +#define snmp_inc_icmpouttimeexcds() +#define snmp_inc_icmpoutparmprobs() +#define snmp_inc_icmpoutsrcquenchs() +#define snmp_inc_icmpoutredirects() +#define snmp_inc_icmpoutechos() +#define snmp_inc_icmpoutechoreps() +#define snmp_inc_icmpouttimestamps() +#define snmp_inc_icmpouttimestampreps() +#define snmp_inc_icmpoutaddrmasks() +#define snmp_inc_icmpoutaddrmaskreps() +/* TCP */ +#define snmp_inc_tcpactiveopens() +#define snmp_inc_tcppassiveopens() +#define snmp_inc_tcpattemptfails() +#define snmp_inc_tcpestabresets() +#define snmp_inc_tcpinsegs() +#define snmp_inc_tcpoutsegs() +#define snmp_inc_tcpretranssegs() +#define snmp_inc_tcpinerrs() +#define snmp_inc_tcpoutrsts() + +/* UDP */ +#define snmp_inc_udpindatagrams() +#define snmp_inc_udpnoports() +#define snmp_inc_udpinerrors() +#define snmp_inc_udpoutdatagrams() +#define snmp_insert_udpidx_tree(pcb) +#define snmp_delete_udpidx_tree(pcb) + +/* SNMP */ +#define snmp_inc_snmpinpkts() +#define snmp_inc_snmpoutpkts() +#define snmp_inc_snmpinbadversions() +#define snmp_inc_snmpinbadcommunitynames() +#define snmp_inc_snmpinbadcommunityuses() +#define snmp_inc_snmpinasnparseerrs() +#define snmp_inc_snmpintoobigs() +#define snmp_inc_snmpinnosuchnames() +#define snmp_inc_snmpinbadvalues() +#define snmp_inc_snmpinreadonlys() +#define snmp_inc_snmpingenerrs() +#define snmp_add_snmpintotalreqvars(value) +#define snmp_add_snmpintotalsetvars(value) +#define snmp_inc_snmpingetrequests() +#define snmp_inc_snmpingetnexts() +#define snmp_inc_snmpinsetrequests() +#define snmp_inc_snmpingetresponses() +#define snmp_inc_snmpintraps() +#define snmp_inc_snmpouttoobigs() +#define snmp_inc_snmpoutnosuchnames() +#define snmp_inc_snmpoutbadvalues() +#define snmp_inc_snmpoutgenerrs() +#define snmp_inc_snmpoutgetrequests() +#define snmp_inc_snmpoutgetnexts() +#define snmp_inc_snmpoutsetrequests() +#define snmp_inc_snmpoutgetresponses() +#define snmp_inc_snmpouttraps() +#define snmp_get_snmpgrpid_ptr(oid) +#define snmp_set_snmpenableauthentraps(value) +#define snmp_get_snmpenableauthentraps(value) + +#endif /* LWIP_SNMP */ + +#ifdef __cplusplus +} +#endif + +#endif /* __LWIP_SNMP_H__ */ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/snmp_asn1.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/snmp_asn1.h new file mode 100644 index 000000000..a40d5ef8d --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/snmp_asn1.h @@ -0,0 +1,103 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/** + * @file + * Abstract Syntax Notation One (ISO 8824, 8825) codec. + */ + +/* + * Copyright (c) 2006 Axon Digital Design B.V., The Netherlands. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * Author: Christiaan Simons + */ + +#ifndef __LWIP_SNMP_ASN1_H__ +#define __LWIP_SNMP_ASN1_H__ + +#include "lwip/opt.h" +#include "lwip/err.h" +#include "lwip/pbuf.h" +#include "lwip/snmp.h" + +#if LWIP_SNMP + +#ifdef __cplusplus +extern "C" { +#endif + +#define SNMP_ASN1_UNIV (!0x80 | !0x40) +#define SNMP_ASN1_APPLIC (!0x80 | 0x40) +#define SNMP_ASN1_CONTXT ( 0x80 | !0x40) + +#define SNMP_ASN1_CONSTR (0x20) +#define SNMP_ASN1_PRIMIT (!0x20) + +/* universal tags */ +#define SNMP_ASN1_INTEG 2 +#define SNMP_ASN1_OC_STR 4 +#define SNMP_ASN1_NUL 5 +#define SNMP_ASN1_OBJ_ID 6 +#define SNMP_ASN1_SEQ 16 + +/* application specific (SNMP) tags */ +#define SNMP_ASN1_IPADDR 0 /* octet string size(4) */ +#define SNMP_ASN1_COUNTER 1 /* u32_t */ +#define SNMP_ASN1_GAUGE 2 /* u32_t */ +#define SNMP_ASN1_TIMETICKS 3 /* u32_t */ +#define SNMP_ASN1_OPAQUE 4 /* octet string */ + +/* context specific (SNMP) tags */ +#define SNMP_ASN1_PDU_GET_REQ 0 +#define SNMP_ASN1_PDU_GET_NEXT_REQ 1 +#define SNMP_ASN1_PDU_GET_RESP 2 +#define SNMP_ASN1_PDU_SET_REQ 3 +#define SNMP_ASN1_PDU_TRAP 4 + +err_t snmp_asn1_dec_type(struct pbuf *p, u16_t ofs, u8_t *type); +err_t snmp_asn1_dec_length(struct pbuf *p, u16_t ofs, u8_t *octets_used, u16_t *length); +err_t snmp_asn1_dec_u32t(struct pbuf *p, u16_t ofs, u16_t len, u32_t *value); +err_t snmp_asn1_dec_s32t(struct pbuf *p, u16_t ofs, u16_t len, s32_t *value); +err_t snmp_asn1_dec_oid(struct pbuf *p, u16_t ofs, u16_t len, struct snmp_obj_id *oid); +err_t snmp_asn1_dec_raw(struct pbuf *p, u16_t ofs, u16_t len, u16_t raw_len, u8_t *raw); + +void snmp_asn1_enc_length_cnt(u16_t length, u8_t *octets_needed); +void snmp_asn1_enc_u32t_cnt(u32_t value, u16_t *octets_needed); +void snmp_asn1_enc_s32t_cnt(s32_t value, u16_t *octets_needed); +void snmp_asn1_enc_oid_cnt(u8_t ident_len, s32_t *ident, u16_t *octets_needed); +err_t snmp_asn1_enc_type(struct pbuf *p, u16_t ofs, u8_t type); +err_t snmp_asn1_enc_length(struct pbuf *p, u16_t ofs, u16_t length); +err_t snmp_asn1_enc_u32t(struct pbuf *p, u16_t ofs, u8_t octets_needed, u32_t value); +err_t snmp_asn1_enc_s32t(struct pbuf *p, u16_t ofs, u8_t octets_needed, s32_t value); +err_t snmp_asn1_enc_oid(struct pbuf *p, u16_t ofs, u8_t ident_len, s32_t *ident); +err_t snmp_asn1_enc_raw(struct pbuf *p, u16_t ofs, u8_t raw_len, u8_t *raw); + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_SNMP */ + +#endif /* __LWIP_SNMP_ASN1_H__ */ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/snmp_msg.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/snmp_msg.h new file mode 100644 index 000000000..6e50a6186 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/snmp_msg.h @@ -0,0 +1,313 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/** + * @file + * SNMP Agent message handling structures. + */ + +/* + * Copyright (c) 2006 Axon Digital Design B.V., The Netherlands. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * Author: Christiaan Simons + */ + +#ifndef __LWIP_SNMP_MSG_H__ +#define __LWIP_SNMP_MSG_H__ + +#include "lwip/opt.h" +#include "lwip/snmp.h" +#include "lwip/snmp_structs.h" + +#if LWIP_SNMP + +#if SNMP_PRIVATE_MIB +#include "private_mib.h" +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* The listen port of the SNMP agent. Clients have to make their requests to + this port. Most standard clients won't work if you change this! */ +#ifndef SNMP_IN_PORT +#define SNMP_IN_PORT 161 +#endif +/* The remote port the SNMP agent sends traps to. Most standard trap sinks won't + work if you change this! */ +#ifndef SNMP_TRAP_PORT +#define SNMP_TRAP_PORT 162 +#endif + +#define SNMP_ES_NOERROR 0 +#define SNMP_ES_TOOBIG 1 +#define SNMP_ES_NOSUCHNAME 2 +#define SNMP_ES_BADVALUE 3 +#define SNMP_ES_READONLY 4 +#define SNMP_ES_GENERROR 5 + +#define SNMP_GENTRAP_COLDSTART 0 +#define SNMP_GENTRAP_WARMSTART 1 +#define SNMP_GENTRAP_AUTHFAIL 4 +#define SNMP_GENTRAP_ENTERPRISESPC 6 + +struct snmp_varbind +{ + /* next pointer, NULL for last in list */ + struct snmp_varbind *next; + /* previous pointer, NULL for first in list */ + struct snmp_varbind *prev; + + /* object identifier length (in s32_t) */ + u8_t ident_len; + /* object identifier array */ + s32_t *ident; + + /* object value ASN1 type */ + u8_t value_type; + /* object value length (in u8_t) */ + u8_t value_len; + /* object value */ + void *value; + + /* encoding varbind seq length length */ + u8_t seqlenlen; + /* encoding object identifier length length */ + u8_t olenlen; + /* encoding object value length length */ + u8_t vlenlen; + /* encoding varbind seq length */ + u16_t seqlen; + /* encoding object identifier length */ + u16_t olen; + /* encoding object value length */ + u16_t vlen; +}; + +struct snmp_varbind_root +{ + struct snmp_varbind *head; + struct snmp_varbind *tail; + /* number of variable bindings in list */ + u8_t count; + /* encoding varbind-list seq length length */ + u8_t seqlenlen; + /* encoding varbind-list seq length */ + u16_t seqlen; +}; + +/** output response message header length fields */ +struct snmp_resp_header_lengths +{ + /* encoding error-index length length */ + u8_t erridxlenlen; + /* encoding error-status length length */ + u8_t errstatlenlen; + /* encoding request id length length */ + u8_t ridlenlen; + /* encoding pdu length length */ + u8_t pdulenlen; + /* encoding community length length */ + u8_t comlenlen; + /* encoding version length length */ + u8_t verlenlen; + /* encoding sequence length length */ + u8_t seqlenlen; + + /* encoding error-index length */ + u16_t erridxlen; + /* encoding error-status length */ + u16_t errstatlen; + /* encoding request id length */ + u16_t ridlen; + /* encoding pdu length */ + u16_t pdulen; + /* encoding community length */ + u16_t comlen; + /* encoding version length */ + u16_t verlen; + /* encoding sequence length */ + u16_t seqlen; +}; + +/** output response message header length fields */ +struct snmp_trap_header_lengths +{ + /* encoding timestamp length length */ + u8_t tslenlen; + /* encoding specific-trap length length */ + u8_t strplenlen; + /* encoding generic-trap length length */ + u8_t gtrplenlen; + /* encoding agent-addr length length */ + u8_t aaddrlenlen; + /* encoding enterprise-id length length */ + u8_t eidlenlen; + /* encoding pdu length length */ + u8_t pdulenlen; + /* encoding community length length */ + u8_t comlenlen; + /* encoding version length length */ + u8_t verlenlen; + /* encoding sequence length length */ + u8_t seqlenlen; + + /* encoding timestamp length */ + u16_t tslen; + /* encoding specific-trap length */ + u16_t strplen; + /* encoding generic-trap length */ + u16_t gtrplen; + /* encoding agent-addr length */ + u16_t aaddrlen; + /* encoding enterprise-id length */ + u16_t eidlen; + /* encoding pdu length */ + u16_t pdulen; + /* encoding community length */ + u16_t comlen; + /* encoding version length */ + u16_t verlen; + /* encoding sequence length */ + u16_t seqlen; +}; + +/* Accepting new SNMP messages. */ +#define SNMP_MSG_EMPTY 0 +/* Search for matching object for variable binding. */ +#define SNMP_MSG_SEARCH_OBJ 1 +/* Perform SNMP operation on in-memory object. + Pass-through states, for symmetry only. */ +#define SNMP_MSG_INTERNAL_GET_OBJDEF 2 +#define SNMP_MSG_INTERNAL_GET_VALUE 3 +#define SNMP_MSG_INTERNAL_SET_TEST 4 +#define SNMP_MSG_INTERNAL_GET_OBJDEF_S 5 +#define SNMP_MSG_INTERNAL_SET_VALUE 6 +/* Perform SNMP operation on object located externally. + In theory this could be used for building a proxy agent. + Practical use is for an enterprise spc. app. gateway. */ +#define SNMP_MSG_EXTERNAL_GET_OBJDEF 7 +#define SNMP_MSG_EXTERNAL_GET_VALUE 8 +#define SNMP_MSG_EXTERNAL_SET_TEST 9 +#define SNMP_MSG_EXTERNAL_GET_OBJDEF_S 10 +#define SNMP_MSG_EXTERNAL_SET_VALUE 11 + +#define SNMP_COMMUNITY_STR_LEN 64 +struct snmp_msg_pstat +{ + /* lwIP local port (161) binding */ + struct udp_pcb *pcb; + /* source IP address */ + struct ip_addr sip; + /* source UDP port */ + u16_t sp; + /* request type */ + u8_t rt; + /* request ID */ + s32_t rid; + /* error status */ + s32_t error_status; + /* error index */ + s32_t error_index; + /* community name (zero terminated) */ + u8_t community[SNMP_COMMUNITY_STR_LEN + 1]; + /* community string length (exclusive zero term) */ + u8_t com_strlen; + /* one out of MSG_EMPTY, MSG_DEMUX, MSG_INTERNAL, MSG_EXTERNAL_x */ + u8_t state; + /* saved arguments for MSG_EXTERNAL_x */ + struct mib_external_node *ext_mib_node; + struct snmp_name_ptr ext_name_ptr; + struct obj_def ext_object_def; + struct snmp_obj_id ext_oid; + /* index into input variable binding list */ + u8_t vb_idx; + /* ptr into input variable binding list */ + struct snmp_varbind *vb_ptr; + /* list of variable bindings from input */ + struct snmp_varbind_root invb; + /* list of variable bindings to output */ + struct snmp_varbind_root outvb; + /* output response lengths used in ASN encoding */ + struct snmp_resp_header_lengths rhl; +}; + +struct snmp_msg_trap +{ + /* lwIP local port (161) binding */ + struct udp_pcb *pcb; + /* destination IP address in network order */ + struct ip_addr dip; + + /* source enterprise ID (sysObjectID) */ + struct snmp_obj_id *enterprise; + /* source IP address, raw network order format */ + u8_t sip_raw[4]; + /* generic trap code */ + u32_t gen_trap; + /* specific trap code */ + u32_t spc_trap; + /* timestamp */ + u32_t ts; + /* list of variable bindings to output */ + struct snmp_varbind_root outvb; + /* output trap lengths used in ASN encoding */ + struct snmp_trap_header_lengths thl; +}; + +/** Agent Version constant, 0 = v1 oddity */ +extern const s32_t snmp_version; +/** Agent default "public" community string */ +extern const char snmp_publiccommunity[7]; + +extern struct snmp_msg_trap trap_msg; + +/** Agent setup, start listening to port 161. */ +void snmp_init(void); +void snmp_trap_dst_enable(u8_t dst_idx, u8_t enable); +void snmp_trap_dst_ip_set(u8_t dst_idx, struct ip_addr *dst); + +/** Varbind-list functions. */ +struct snmp_varbind* snmp_varbind_alloc(struct snmp_obj_id *oid, u8_t type, u8_t len); +void snmp_varbind_free(struct snmp_varbind *vb); +void snmp_varbind_list_free(struct snmp_varbind_root *root); +void snmp_varbind_tail_add(struct snmp_varbind_root *root, struct snmp_varbind *vb); +struct snmp_varbind* snmp_varbind_tail_remove(struct snmp_varbind_root *root); + +/** Handle an internal (recv) or external (private response) event. */ +void snmp_msg_event(u8_t request_id); +err_t snmp_send_response(struct snmp_msg_pstat *m_stat); +err_t snmp_send_trap(s8_t generic_trap, struct snmp_obj_id *eoid, s32_t specific_trap); +void snmp_coldstart_trap(void); +void snmp_authfail_trap(void); + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_SNMP */ + +#endif /* __LWIP_SNMP_MSG_H__ */ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/snmp_structs.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/snmp_structs.h new file mode 100644 index 000000000..93f4ea3c1 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/snmp_structs.h @@ -0,0 +1,264 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/** + * @file + * Generic MIB tree structures. + * + * @todo namespace prefixes + */ + +/* + * Copyright (c) 2006 Axon Digital Design B.V., The Netherlands. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * Author: Christiaan Simons + */ + +#ifndef __LWIP_SNMP_STRUCTS_H__ +#define __LWIP_SNMP_STRUCTS_H__ + +#include "lwip/opt.h" + +#if LWIP_SNMP /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/snmp.h" + +#if SNMP_PRIVATE_MIB +#include "private_mib.h" +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* MIB object instance */ +#define MIB_OBJECT_NONE 0 +#define MIB_OBJECT_SCALAR 1 +#define MIB_OBJECT_TAB 2 + +/* MIB object access */ +#define MIB_OBJECT_READ_ONLY 0 +#define MIB_OBJECT_READ_WRITE 1 +#define MIB_OBJECT_WRITE_ONLY 2 +#define MIB_OBJECT_NOT_ACCESSIBLE 3 + +/** object definition returned by (get_object_def)() */ +struct obj_def +{ + /* MIB_OBJECT_NONE (0), MIB_OBJECT_SCALAR (1), MIB_OBJECT_TAB (2) */ + u8_t instance; + /* 0 read-only, 1 read-write, 2 write-only, 3 not-accessible */ + u8_t access; + /* ASN type for this object */ + u8_t asn_type; + /* value length (host length) */ + u16_t v_len; + /* length of instance part of supplied object identifier */ + u8_t id_inst_len; + /* instance part of supplied object identifier */ + s32_t *id_inst_ptr; +}; + +struct snmp_name_ptr +{ + u8_t ident_len; + s32_t *ident; +}; + +/** MIB const scalar (.0) node */ +#define MIB_NODE_SC 0x01 +/** MIB const array node */ +#define MIB_NODE_AR 0x02 +/** MIB array node (mem_malloced from RAM) */ +#define MIB_NODE_RA 0x03 +/** MIB list root node (mem_malloced from RAM) */ +#define MIB_NODE_LR 0x04 +/** MIB node for external objects */ +#define MIB_NODE_EX 0x05 + +/** node "base class" layout, the mandatory fields for a node */ +struct mib_node +{ + /** returns struct obj_def for the given object identifier */ + void (*get_object_def)(u8_t ident_len, s32_t *ident, struct obj_def *od); + /** returns object value for the given object identifier, + @note the caller must allocate at least len bytes for the value */ + void (*get_value)(struct obj_def *od, u16_t len, void *value); + /** tests length and/or range BEFORE setting */ + u8_t (*set_test)(struct obj_def *od, u16_t len, void *value); + /** sets object value, only to be called when set_test() */ + void (*set_value)(struct obj_def *od, u16_t len, void *value); + /** One out of MIB_NODE_AR, MIB_NODE_LR or MIB_NODE_EX */ + const u8_t node_type; + /* array or max list length */ + const u16_t maxlength; +}; + +/** derived node for scalars .0 index */ +typedef struct mib_node mib_scalar_node; + +/** derived node, points to a fixed size const array + of sub-identifiers plus a 'child' pointer */ +struct mib_array_node +{ + /* inherited "base class" members */ + void (* const get_object_def)(u8_t ident_len, s32_t *ident, struct obj_def *od); + void (* const get_value)(struct obj_def *od, u16_t len, void *value); + u8_t (*set_test)(struct obj_def *od, u16_t len, void *value); + void (*set_value)(struct obj_def *od, u16_t len, void *value); + + const u8_t node_type; + const u16_t maxlength; + + /* aditional struct members */ + const s32_t *objid; + struct mib_node* const *nptr; +}; + +/** derived node, points to a fixed size mem_malloced array + of sub-identifiers plus a 'child' pointer */ +struct mib_ram_array_node +{ + /* inherited "base class" members */ + void (*get_object_def)(u8_t ident_len, s32_t *ident, struct obj_def *od); + void (*get_value)(struct obj_def *od, u16_t len, void *value); + u8_t (*set_test)(struct obj_def *od, u16_t len, void *value); + void (*set_value)(struct obj_def *od, u16_t len, void *value); + + u8_t node_type; + u16_t maxlength; + + /* aditional struct members */ + s32_t *objid; + struct mib_node **nptr; +}; + +struct mib_list_node +{ + struct mib_list_node *prev; + struct mib_list_node *next; + s32_t objid; + struct mib_node *nptr; +}; + +/** derived node, points to a doubly linked list + of sub-identifiers plus a 'child' pointer */ +struct mib_list_rootnode +{ + /* inherited "base class" members */ + void (*get_object_def)(u8_t ident_len, s32_t *ident, struct obj_def *od); + void (*get_value)(struct obj_def *od, u16_t len, void *value); + u8_t (*set_test)(struct obj_def *od, u16_t len, void *value); + void (*set_value)(struct obj_def *od, u16_t len, void *value); + + u8_t node_type; + u16_t maxlength; + + /* aditional struct members */ + struct mib_list_node *head; + struct mib_list_node *tail; + /* counts list nodes in list */ + u16_t count; +}; + +/** derived node, has access functions for mib object in external memory or device + using 'tree_level' and 'idx', with a range 0 .. (level_length() - 1) */ +struct mib_external_node +{ + /* inherited "base class" members */ + void (*get_object_def)(u8_t ident_len, s32_t *ident, struct obj_def *od); + void (*get_value)(struct obj_def *od, u16_t len, void *value); + u8_t (*set_test)(struct obj_def *od, u16_t len, void *value); + void (*set_value)(struct obj_def *od, u16_t len, void *value); + + u8_t node_type; + u16_t maxlength; + + /* aditional struct members */ + /** points to an extenal (in memory) record of some sort of addressing + information, passed to and interpreted by the funtions below */ + void* addr_inf; + /** tree levels under this node */ + u8_t tree_levels; + /** number of objects at this level */ + u16_t (*level_length)(void* addr_inf, u8_t level); + /** compares object sub identifier with external id + return zero when equal, nonzero when unequal */ + s32_t (*ident_cmp)(void* addr_inf, u8_t level, u16_t idx, s32_t sub_id); + void (*get_objid)(void* addr_inf, u8_t level, u16_t idx, s32_t *sub_id); + + /** async Questions */ + void (*get_object_def_q)(void* addr_inf, u8_t rid, u8_t ident_len, s32_t *ident); + void (*get_value_q)(u8_t rid, struct obj_def *od); + void (*set_test_q)(u8_t rid, struct obj_def *od); + void (*set_value_q)(u8_t rid, struct obj_def *od, u16_t len, void *value); + /** async Answers */ + void (*get_object_def_a)(u8_t rid, u8_t ident_len, s32_t *ident, struct obj_def *od); + void (*get_value_a)(u8_t rid, struct obj_def *od, u16_t len, void *value); + u8_t (*set_test_a)(u8_t rid, struct obj_def *od, u16_t len, void *value); + void (*set_value_a)(u8_t rid, struct obj_def *od, u16_t len, void *value); + /** async Panic Close (agent returns error reply, + e.g. used for external transaction cleanup) */ + void (*get_object_def_pc)(u8_t rid, u8_t ident_len, s32_t *ident); + void (*get_value_pc)(u8_t rid, struct obj_def *od); + void (*set_test_pc)(u8_t rid, struct obj_def *od); + void (*set_value_pc)(u8_t rid, struct obj_def *od); +}; + +/** export MIB tree from mib2.c */ +extern const struct mib_array_node internet; + +/** dummy function pointers for non-leaf MIB nodes from mib2.c */ +void noleafs_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od); +void noleafs_get_value(struct obj_def *od, u16_t len, void *value); +u8_t noleafs_set_test(struct obj_def *od, u16_t len, void *value); +void noleafs_set_value(struct obj_def *od, u16_t len, void *value); + +void snmp_oidtoip(s32_t *ident, struct ip_addr *ip); +void snmp_iptooid(struct ip_addr *ip, s32_t *ident); +void snmp_ifindextonetif(s32_t ifindex, struct netif **netif); +void snmp_netiftoifindex(struct netif *netif, s32_t *ifidx); + +struct mib_list_node* snmp_mib_ln_alloc(s32_t id); +void snmp_mib_ln_free(struct mib_list_node *ln); +struct mib_list_rootnode* snmp_mib_lrn_alloc(void); +void snmp_mib_lrn_free(struct mib_list_rootnode *lrn); + +s8_t snmp_mib_node_insert(struct mib_list_rootnode *rn, s32_t objid, struct mib_list_node **insn); +s8_t snmp_mib_node_find(struct mib_list_rootnode *rn, s32_t objid, struct mib_list_node **fn); +struct mib_list_rootnode *snmp_mib_node_delete(struct mib_list_rootnode *rn, struct mib_list_node *n); + +struct mib_node* snmp_search_tree(struct mib_node *node, u8_t ident_len, s32_t *ident, struct snmp_name_ptr *np); +struct mib_node* snmp_expand_tree(struct mib_node *node, u8_t ident_len, s32_t *ident, struct snmp_obj_id *oidret); +u8_t snmp_iso_prefix_tst(u8_t ident_len, s32_t *ident); +u8_t snmp_iso_prefix_expand(u8_t ident_len, s32_t *ident, struct snmp_obj_id *oidret); + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_SNMP */ + +#endif /* __LWIP_SNMP_STRUCTS_H__ */ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/sockets.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/sockets.h new file mode 100644 index 000000000..675c1f740 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/sockets.h @@ -0,0 +1,359 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + + +#ifndef __LWIP_SOCKETS_H__ +#define __LWIP_SOCKETS_H__ + +#include "lwip/opt.h" + +#if LWIP_SOCKET /* don't build if not configured for use in lwipopts.h */ + +#include /* for size_t */ + +#include "lwip/ip_addr.h" +#include "lwip/inet.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* members are in network byte order */ +struct sockaddr_in { + u8_t sin_len; + u8_t sin_family; + u16_t sin_port; + struct in_addr sin_addr; + char sin_zero[8]; +}; + +struct sockaddr { + u8_t sa_len; + u8_t sa_family; + char sa_data[14]; +}; + +#ifndef socklen_t +# define socklen_t u32_t +#endif + +/* Socket protocol types (TCP/UDP/RAW) */ +#define SOCK_STREAM 1 +#define SOCK_DGRAM 2 +#define SOCK_RAW 3 + +/* + * Option flags per-socket. These must match the SOF_ flags in ip.h! + */ +#define SO_DEBUG 0x0001 /* Unimplemented: turn on debugging info recording */ +#define SO_ACCEPTCONN 0x0002 /* socket has had listen() */ +#define SO_REUSEADDR 0x0004 /* Unimplemented: allow local address reuse */ +#define SO_KEEPALIVE 0x0008 /* keep connections alive */ +#define SO_DONTROUTE 0x0010 /* Unimplemented: just use interface addresses */ +#define SO_BROADCAST 0x0020 /* permit to send and to receive broadcast messages (see IP_SOF_BROADCAST option) */ +#define SO_USELOOPBACK 0x0040 /* Unimplemented: bypass hardware when possible */ +#define SO_LINGER 0x0080 /* linger on close if data present */ +#define SO_OOBINLINE 0x0100 /* Unimplemented: leave received OOB data in line */ +#define SO_REUSEPORT 0x0200 /* Unimplemented: allow local address & port reuse */ + +#define SO_DONTLINGER ((int)(~SO_LINGER)) + +/* + * Additional options, not kept in so_options. + */ +#define SO_SNDBUF 0x1001 /* Unimplemented: send buffer size */ +#define SO_RCVBUF 0x1002 /* receive buffer size */ +#define SO_SNDLOWAT 0x1003 /* Unimplemented: send low-water mark */ +#define SO_RCVLOWAT 0x1004 /* Unimplemented: receive low-water mark */ +#define SO_SNDTIMEO 0x1005 /* Unimplemented: send timeout */ +#define SO_RCVTIMEO 0x1006 /* receive timeout */ +#define SO_ERROR 0x1007 /* get error status and clear */ +#define SO_TYPE 0x1008 /* get socket type */ +#define SO_CONTIMEO 0x1009 /* Unimplemented: connect timeout */ +#define SO_NO_CHECK 0x100a /* don't create UDP checksum */ + + +/* + * Structure used for manipulating linger option. + */ +struct linger { + int l_onoff; /* option on/off */ + int l_linger; /* linger time */ +}; + +/* + * Level number for (get/set)sockopt() to apply to socket itself. + */ +#define SOL_SOCKET 0xfff /* options for socket level */ + + +#define AF_UNSPEC 0 +#define AF_INET 2 +#define PF_INET AF_INET +#define PF_UNSPEC AF_UNSPEC + +#define IPPROTO_IP 0 +#define IPPROTO_TCP 6 +#define IPPROTO_UDP 17 +#define IPPROTO_UDPLITE 136 + +/* Flags we can use with send and recv. */ +#define MSG_PEEK 0x01 /* Peeks at an incoming message */ +#define MSG_WAITALL 0x02 /* Unimplemented: Requests that the function block until the full amount of data requested can be returned */ +#define MSG_OOB 0x04 /* Unimplemented: Requests out-of-band data. The significance and semantics of out-of-band data are protocol-specific */ +#define MSG_DONTWAIT 0x08 /* Nonblocking i/o for this operation only */ +#define MSG_MORE 0x10 /* Sender will send more */ + + +/* + * Options for level IPPROTO_IP + */ +#define IP_TOS 1 +#define IP_TTL 2 + +#if LWIP_TCP +/* + * Options for level IPPROTO_TCP + */ +#define TCP_NODELAY 0x01 /* don't delay send to coalesce packets */ +#define TCP_KEEPALIVE 0x02 /* send KEEPALIVE probes when idle for pcb->keep_idle milliseconds */ +#define TCP_KEEPIDLE 0x03 /* set pcb->keep_idle - Same as TCP_KEEPALIVE, but use seconds for get/setsockopt */ +#define TCP_KEEPINTVL 0x04 /* set pcb->keep_intvl - Use seconds for get/setsockopt */ +#define TCP_KEEPCNT 0x05 /* set pcb->keep_cnt - Use number of probes sent for get/setsockopt */ +#endif /* LWIP_TCP */ + +#if LWIP_UDP && LWIP_UDPLITE +/* + * Options for level IPPROTO_UDPLITE + */ +#define UDPLITE_SEND_CSCOV 0x01 /* sender checksum coverage */ +#define UDPLITE_RECV_CSCOV 0x02 /* minimal receiver checksum coverage */ +#endif /* LWIP_UDP && LWIP_UDPLITE*/ + + +#if LWIP_IGMP +/* + * Options and types for UDP multicast traffic handling + */ +#define IP_ADD_MEMBERSHIP 3 +#define IP_DROP_MEMBERSHIP 4 +#define IP_MULTICAST_TTL 5 +#define IP_MULTICAST_IF 6 +#define IP_MULTICAST_LOOP 7 + +typedef struct ip_mreq { + struct in_addr imr_multiaddr; /* IP multicast address of group */ + struct in_addr imr_interface; /* local IP address of interface */ +} ip_mreq; +#endif /* LWIP_IGMP */ + +/* + * The Type of Service provides an indication of the abstract + * parameters of the quality of service desired. These parameters are + * to be used to guide the selection of the actual service parameters + * when transmitting a datagram through a particular network. Several + * networks offer service precedence, which somehow treats high + * precedence traffic as more important than other traffic (generally + * by accepting only traffic above a certain precedence at time of high + * load). The major choice is a three way tradeoff between low-delay, + * high-reliability, and high-throughput. + * The use of the Delay, Throughput, and Reliability indications may + * increase the cost (in some sense) of the service. In many networks + * better performance for one of these parameters is coupled with worse + * performance on another. Except for very unusual cases at most two + * of these three indications should be set. + */ +#define IPTOS_TOS_MASK 0x1E +#define IPTOS_TOS(tos) ((tos) & IPTOS_TOS_MASK) +#define IPTOS_LOWDELAY 0x10 +#define IPTOS_THROUGHPUT 0x08 +#define IPTOS_RELIABILITY 0x04 +#define IPTOS_LOWCOST 0x02 +#define IPTOS_MINCOST IPTOS_LOWCOST + +/* + * The Network Control precedence designation is intended to be used + * within a network only. The actual use and control of that + * designation is up to each network. The Internetwork Control + * designation is intended for use by gateway control originators only. + * If the actual use of these precedence designations is of concern to + * a particular network, it is the responsibility of that network to + * control the access to, and use of, those precedence designations. + */ +#define IPTOS_PREC_MASK 0xe0 +#define IPTOS_PREC(tos) ((tos) & IPTOS_PREC_MASK) +#define IPTOS_PREC_NETCONTROL 0xe0 +#define IPTOS_PREC_INTERNETCONTROL 0xc0 +#define IPTOS_PREC_CRITIC_ECP 0xa0 +#define IPTOS_PREC_FLASHOVERRIDE 0x80 +#define IPTOS_PREC_FLASH 0x60 +#define IPTOS_PREC_IMMEDIATE 0x40 +#define IPTOS_PREC_PRIORITY 0x20 +#define IPTOS_PREC_ROUTINE 0x00 + + +/* + * Commands for ioctlsocket(), taken from the BSD file fcntl.h. + * lwip_ioctl only supports FIONREAD and FIONBIO, for now + * + * Ioctl's have the command encoded in the lower word, + * and the size of any in or out parameters in the upper + * word. The high 2 bits of the upper word are used + * to encode the in/out status of the parameter; for now + * we restrict parameters to at most 128 bytes. + */ +#if !defined(FIONREAD) || !defined(FIONBIO) +#define IOCPARM_MASK 0x7fU /* parameters must be < 128 bytes */ +#define IOC_VOID 0x20000000UL /* no parameters */ +#define IOC_OUT 0x40000000UL /* copy out parameters */ +#define IOC_IN 0x80000000UL /* copy in parameters */ +#define IOC_INOUT (IOC_IN|IOC_OUT) + /* 0x20000000 distinguishes new & + old ioctl's */ +#define _IO(x,y) (IOC_VOID|((x)<<8)|(y)) + +#define _IOR(x,y,t) (IOC_OUT|(((long)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y)) + +#define _IOW(x,y,t) (IOC_IN|(((long)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y)) +#endif /* !defined(FIONREAD) || !defined(FIONBIO) */ + +#ifndef FIONREAD +#define FIONREAD _IOR('f', 127, unsigned long) /* get # bytes to read */ +#endif +#ifndef FIONBIO +#define FIONBIO _IOW('f', 126, unsigned long) /* set/clear non-blocking i/o */ +#endif + +/* Socket I/O Controls: unimplemented */ +#ifndef SIOCSHIWAT +#define SIOCSHIWAT _IOW('s', 0, unsigned long) /* set high watermark */ +#define SIOCGHIWAT _IOR('s', 1, unsigned long) /* get high watermark */ +#define SIOCSLOWAT _IOW('s', 2, unsigned long) /* set low watermark */ +#define SIOCGLOWAT _IOR('s', 3, unsigned long) /* get low watermark */ +#define SIOCATMARK _IOR('s', 7, unsigned long) /* at oob mark? */ +#endif + +/* Socket flags: */ +#ifndef O_NONBLOCK +#define O_NONBLOCK 04000U +#endif + +/* FD_SET used for lwip_select */ +#ifndef FD_SET + #undef FD_SETSIZE + /* Make FD_SETSIZE match NUM_SOCKETS in socket.c */ + #define FD_SETSIZE MEMP_NUM_NETCONN + #define FD_SET(n, p) ((p)->fd_bits[(n)/8] |= (1 << ((n) & 7))) + #define FD_CLR(n, p) ((p)->fd_bits[(n)/8] &= ~(1 << ((n) & 7))) + #define FD_ISSET(n,p) ((p)->fd_bits[(n)/8] & (1 << ((n) & 7))) + #define FD_ZERO(p) memset((void*)(p),0,sizeof(*(p))) + + typedef struct fd_set { + unsigned char fd_bits [(FD_SETSIZE+7)/8]; + } fd_set; + +#endif /* FD_SET */ + +/** LWIP_TIMEVAL_PRIVATE: if you want to use the struct timeval provided + * by your system, set this to 0 and include in cc.h */ +#ifndef LWIP_TIMEVAL_PRIVATE +#define LWIP_TIMEVAL_PRIVATE 1 +#endif + +#if LWIP_TIMEVAL_PRIVATE +struct timeval { + long tv_sec; /* seconds */ + long tv_usec; /* and microseconds */ +}; +#endif /* LWIP_TIMEVAL_PRIVATE */ + +void lwip_socket_init(void); + +int lwip_accept(int s, struct sockaddr *addr, socklen_t *addrlen); +int lwip_bind(int s, const struct sockaddr *name, socklen_t namelen); +int lwip_shutdown(int s, int how); +int lwip_getpeername (int s, struct sockaddr *name, socklen_t *namelen); +int lwip_getsockname (int s, struct sockaddr *name, socklen_t *namelen); +int lwip_getsockopt (int s, int level, int optname, void *optval, socklen_t *optlen); +int lwip_setsockopt (int s, int level, int optname, const void *optval, socklen_t optlen); +int lwip_close(int s); +int lwip_connect(int s, const struct sockaddr *name, socklen_t namelen); +int lwip_listen(int s, int backlog); +int lwip_recv(int s, void *mem, size_t len, int flags); +int lwip_read(int s, void *mem, size_t len); +int lwip_recvfrom(int s, void *mem, size_t len, int flags, + struct sockaddr *from, socklen_t *fromlen); +int lwip_send(int s, const void *dataptr, size_t size, int flags); +int lwip_sendto(int s, const void *dataptr, size_t size, int flags, + const struct sockaddr *to, socklen_t tolen); +int lwip_socket(int domain, int type, int protocol); +int lwip_write(int s, const void *dataptr, size_t size); +int lwip_select(int maxfdp1, fd_set *readset, fd_set *writeset, fd_set *exceptset, + struct timeval *timeout); +int lwip_ioctl(int s, long cmd, void *argp); + +#if LWIP_COMPAT_SOCKETS +#define accept(a,b,c) lwip_accept(a,b,c) +#define bind(a,b,c) lwip_bind(a,b,c) +#define shutdown(a,b) lwip_shutdown(a,b) +#define closesocket(s) lwip_close(s) +#define connect(a,b,c) lwip_connect(a,b,c) +#define getsockname(a,b,c) lwip_getsockname(a,b,c) +#define getpeername(a,b,c) lwip_getpeername(a,b,c) +#define setsockopt(a,b,c,d,e) lwip_setsockopt(a,b,c,d,e) +#define getsockopt(a,b,c,d,e) lwip_getsockopt(a,b,c,d,e) +#define listen(a,b) lwip_listen(a,b) +#define recv(a,b,c,d) lwip_recv(a,b,c,d) +#define recvfrom(a,b,c,d,e,f) lwip_recvfrom(a,b,c,d,e,f) +#define send(a,b,c,d) lwip_send(a,b,c,d) +#define sendto(a,b,c,d,e,f) lwip_sendto(a,b,c,d,e,f) +#define socket(a,b,c) lwip_socket(a,b,c) +#define select(a,b,c,d,e) lwip_select(a,b,c,d,e) +#define ioctlsocket(a,b,c) lwip_ioctl(a,b,c) + +#if LWIP_POSIX_SOCKETS_IO_NAMES +#define read(a,b,c) lwip_read(a,b,c) +#define write(a,b,c) lwip_write(a,b,c) +#define close(s) lwip_close(s) +#endif /* LWIP_POSIX_SOCKETS_IO_NAMES */ + +#endif /* LWIP_COMPAT_SOCKETS */ + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_SOCKET */ + +#endif /* __LWIP_SOCKETS_H__ */ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/stats.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/stats.h new file mode 100644 index 000000000..4aec5e544 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/stats.h @@ -0,0 +1,285 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIP_STATS_H__ +#define __LWIP_STATS_H__ + +#include "lwip/opt.h" + +#include "lwip/mem.h" +#include "lwip/memp.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#if LWIP_STATS + +#ifndef LWIP_STATS_LARGE +#define LWIP_STATS_LARGE 0 +#endif + +#if LWIP_STATS_LARGE +#define STAT_COUNTER u32_t +#define STAT_COUNTER_F U32_F +#else +#define STAT_COUNTER u16_t +#define STAT_COUNTER_F U16_F +#endif + +struct stats_proto { + STAT_COUNTER xmit; /* Transmitted packets. */ + STAT_COUNTER recv; /* Received packets. */ + STAT_COUNTER fw; /* Forwarded packets. */ + STAT_COUNTER drop; /* Dropped packets. */ + STAT_COUNTER chkerr; /* Checksum error. */ + STAT_COUNTER lenerr; /* Invalid length error. */ + STAT_COUNTER memerr; /* Out of memory error. */ + STAT_COUNTER rterr; /* Routing error. */ + STAT_COUNTER proterr; /* Protocol error. */ + STAT_COUNTER opterr; /* Error in options. */ + STAT_COUNTER err; /* Misc error. */ + STAT_COUNTER cachehit; +}; + +struct stats_igmp { + STAT_COUNTER lenerr; /* Invalid length error. */ + STAT_COUNTER chkerr; /* Checksum error. */ + STAT_COUNTER v1_rxed; /* */ + STAT_COUNTER join_sent; /* */ + STAT_COUNTER leave_sent; /* */ + STAT_COUNTER unicast_query; /* */ + STAT_COUNTER report_sent; /* */ + STAT_COUNTER report_rxed; /* */ + STAT_COUNTER group_query_rxed; /* */ +}; + +struct stats_mem { + mem_size_t avail; + mem_size_t used; + mem_size_t max; + STAT_COUNTER err; + STAT_COUNTER illegal; +}; + +struct stats_syselem { + STAT_COUNTER used; + STAT_COUNTER max; + STAT_COUNTER err; +}; + +struct stats_sys { + struct stats_syselem sem; + struct stats_syselem mbox; +}; + +struct stats_ { +#if LINK_STATS + struct stats_proto link; +#endif +#if ETHARP_STATS + struct stats_proto etharp; +#endif +#if IPFRAG_STATS + struct stats_proto ip_frag; +#endif +#if IP_STATS + struct stats_proto ip; +#endif +#if ICMP_STATS + struct stats_proto icmp; +#endif +#if IGMP_STATS + struct stats_igmp igmp; +#endif +#if UDP_STATS + struct stats_proto udp; +#endif +#if TCP_STATS + struct stats_proto tcp; +#endif +#if MEM_STATS + struct stats_mem mem; +#endif +#if MEMP_STATS + struct stats_mem memp[MEMP_MAX]; +#endif +#if SYS_STATS + struct stats_sys sys; +#endif +}; + +extern struct stats_ lwip_stats; + +#define stats_init() /* Compatibility define, not init needed. */ + +#define STATS_INC(x) ++lwip_stats.x +#define STATS_DEC(x) --lwip_stats.x +#else +#define stats_init() +#define STATS_INC(x) +#define STATS_DEC(x) +#endif /* LWIP_STATS */ + +#if TCP_STATS +#define TCP_STATS_INC(x) STATS_INC(x) +#define TCP_STATS_DISPLAY() stats_display_proto(&lwip_stats.tcp, "TCP") +#else +#define TCP_STATS_INC(x) +#define TCP_STATS_DISPLAY() +#endif + +#if UDP_STATS +#define UDP_STATS_INC(x) STATS_INC(x) +#define UDP_STATS_DISPLAY() stats_display_proto(&lwip_stats.udp, "UDP") +#else +#define UDP_STATS_INC(x) +#define UDP_STATS_DISPLAY() +#endif + +#if ICMP_STATS +#define ICMP_STATS_INC(x) STATS_INC(x) +#define ICMP_STATS_DISPLAY() stats_display_proto(&lwip_stats.icmp, "ICMP") +#else +#define ICMP_STATS_INC(x) +#define ICMP_STATS_DISPLAY() +#endif + +#if IGMP_STATS +#define IGMP_STATS_INC(x) STATS_INC(x) +#define IGMP_STATS_DISPLAY() stats_display_igmp(&lwip_stats.igmp) +#else +#define IGMP_STATS_INC(x) +#define IGMP_STATS_DISPLAY() +#endif + +#if IP_STATS +#define IP_STATS_INC(x) STATS_INC(x) +#define IP_STATS_DISPLAY() stats_display_proto(&lwip_stats.ip, "IP") +#else +#define IP_STATS_INC(x) +#define IP_STATS_DISPLAY() +#endif + +#if IPFRAG_STATS +#define IPFRAG_STATS_INC(x) STATS_INC(x) +#define IPFRAG_STATS_DISPLAY() stats_display_proto(&lwip_stats.ip_frag, "IP_FRAG") +#else +#define IPFRAG_STATS_INC(x) +#define IPFRAG_STATS_DISPLAY() +#endif + +#if ETHARP_STATS +#define ETHARP_STATS_INC(x) STATS_INC(x) +#define ETHARP_STATS_DISPLAY() stats_display_proto(&lwip_stats.etharp, "ETHARP") +#else +#define ETHARP_STATS_INC(x) +#define ETHARP_STATS_DISPLAY() +#endif + +#if LINK_STATS +#define LINK_STATS_INC(x) STATS_INC(x) +#define LINK_STATS_DISPLAY() stats_display_proto(&lwip_stats.link, "LINK") +#else +#define LINK_STATS_INC(x) +#define LINK_STATS_DISPLAY() +#endif + +#if MEM_STATS +#define MEM_STATS_AVAIL(x, y) lwip_stats.mem.x = y +#define MEM_STATS_INC(x) STATS_INC(mem.x) +#define MEM_STATS_INC_USED(x, y) do { lwip_stats.mem.used += y; \ + if (lwip_stats.mem.max < lwip_stats.mem.used) { \ + lwip_stats.mem.max = lwip_stats.mem.used; \ + } \ + } while(0) +#define MEM_STATS_DEC_USED(x, y) lwip_stats.mem.x -= y +#define MEM_STATS_DISPLAY() stats_display_mem(&lwip_stats.mem, "HEAP") +#else +#define MEM_STATS_AVAIL(x, y) +#define MEM_STATS_INC(x) +#define MEM_STATS_INC_USED(x, y) +#define MEM_STATS_DEC_USED(x, y) +#define MEM_STATS_DISPLAY() +#endif + +#if MEMP_STATS +#define MEMP_STATS_AVAIL(x, i, y) lwip_stats.memp[i].x = y +#define MEMP_STATS_INC(x, i) STATS_INC(memp[i].x) +#define MEMP_STATS_DEC(x, i) STATS_DEC(memp[i].x) +#define MEMP_STATS_INC_USED(x, i) do { ++lwip_stats.memp[i].used; \ + if (lwip_stats.memp[i].max < lwip_stats.memp[i].used) { \ + lwip_stats.memp[i].max = lwip_stats.memp[i].used; \ + } \ + } while(0) +#define MEMP_STATS_DISPLAY(i) stats_display_memp(&lwip_stats.memp[i], i) +#else +#define MEMP_STATS_AVAIL(x, i, y) +#define MEMP_STATS_INC(x, i) +#define MEMP_STATS_DEC(x, i) +#define MEMP_STATS_INC_USED(x, i) +#define MEMP_STATS_DISPLAY(i) +#endif + +#if SYS_STATS +#define SYS_STATS_INC(x) STATS_INC(sys.x) +#define SYS_STATS_DEC(x) STATS_DEC(sys.x) +#define SYS_STATS_DISPLAY() stats_display_sys(&lwip_stats.sys) +#else +#define SYS_STATS_INC(x) +#define SYS_STATS_DEC(x) +#define SYS_STATS_DISPLAY() +#endif + +/* Display of statistics */ +#if LWIP_STATS_DISPLAY +void stats_display(void); +void stats_display_proto(struct stats_proto *proto, char *name); +void stats_display_igmp(struct stats_igmp *igmp); +void stats_display_mem(struct stats_mem *mem, char *name); +void stats_display_memp(struct stats_mem *mem, int index); +void stats_display_sys(struct stats_sys *sys); +#else +#define stats_display() +#define stats_display_proto(proto, name) +#define stats_display_igmp(igmp) +#define stats_display_mem(mem, name) +#define stats_display_memp(mem, index) +#define stats_display_sys(sys) +#endif /* LWIP_STATS_DISPLAY */ + +#ifdef __cplusplus +} +#endif + +#endif /* __LWIP_STATS_H__ */ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/sys.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/sys.h new file mode 100644 index 000000000..9a4f02abc --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/sys.h @@ -0,0 +1,245 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIP_SYS_H__ +#define __LWIP_SYS_H__ + +#include "lwip/opt.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#if NO_SYS + +/* For a totally minimal and standalone system, we provide null + definitions of the sys_ functions. */ +typedef u8_t sys_sem_t; +typedef u8_t sys_mbox_t; +struct sys_timeo {u8_t dummy;}; + +#define sys_init() +#define sys_timeout(m,h,a) +#define sys_untimeout(m,a) +#define sys_sem_new(c) c +#define sys_sem_signal(s) +#define sys_sem_wait(s) +#define sys_sem_wait_timeout(s,t) +#define sys_arch_sem_wait(s,t) +#define sys_sem_free(s) +#define sys_mbox_new(s) 0 +#define sys_mbox_fetch(m,d) +#define sys_mbox_tryfetch(m,d) +#define sys_mbox_post(m,d) +#define sys_mbox_trypost(m,d) +#define sys_mbox_free(m) + +#define sys_thread_new(n,t,a,s,p) + +#else /* NO_SYS */ + +/** Return code for timeouts from sys_arch_mbox_fetch and sys_arch_sem_wait */ +#define SYS_ARCH_TIMEOUT 0xffffffffUL + +/* sys_mbox_tryfetch returns SYS_MBOX_EMPTY if appropriate. + * For now we use the same magic value, but we allow this to change in future. + */ +#define SYS_MBOX_EMPTY SYS_ARCH_TIMEOUT + +#include "lwip/err.h" +#include "arch/sys_arch.h" + +typedef void (* sys_timeout_handler)(void *arg); + +struct sys_timeo { + struct sys_timeo *next; + u32_t time; + sys_timeout_handler h; + void *arg; +}; + +struct sys_timeouts { + struct sys_timeo *next; +}; + +/* sys_init() must be called before anthing else. */ +void sys_init(void); + +/* + * sys_timeout(): + * + * Schedule a timeout a specified amount of milliseconds in the + * future. When the timeout occurs, the specified timeout handler will + * be called. The handler will be passed the "arg" argument when + * called. + * + */ +void sys_timeout(u32_t msecs, sys_timeout_handler h, void *arg); +void sys_untimeout(sys_timeout_handler h, void *arg); +struct sys_timeouts *sys_arch_timeouts(void); + +/* Semaphore functions. */ +sys_sem_t sys_sem_new(u8_t count); +void sys_sem_signal(sys_sem_t sem); +u32_t sys_arch_sem_wait(sys_sem_t sem, u32_t timeout); +void sys_sem_free(sys_sem_t sem); +void sys_sem_wait(sys_sem_t sem); +int sys_sem_wait_timeout(sys_sem_t sem, u32_t timeout); + +/* Time functions. */ +#ifndef sys_msleep +void sys_msleep(u32_t ms); /* only has a (close to) 1 jiffy resolution. */ +#endif +#ifndef sys_jiffies +u32_t sys_jiffies(void); /* since power up. */ +#endif + +/* Mailbox functions. */ +sys_mbox_t sys_mbox_new(int size); +void sys_mbox_post(sys_mbox_t mbox, void *msg); +err_t sys_mbox_trypost(sys_mbox_t mbox, void *msg); +u32_t sys_arch_mbox_fetch(sys_mbox_t mbox, void **msg, u32_t timeout); +#ifndef sys_arch_mbox_tryfetch /* Allow port to override with a macro */ +u32_t sys_arch_mbox_tryfetch(sys_mbox_t mbox, void **msg); +#endif +/* For now, we map straight to sys_arch implementation. */ +#define sys_mbox_tryfetch(mbox, msg) sys_arch_mbox_tryfetch(mbox, msg) +void sys_mbox_free(sys_mbox_t mbox); +void sys_mbox_fetch(sys_mbox_t mbox, void **msg); + +/* Thread functions. */ +sys_thread_t sys_thread_new(char *name, void (* thread)(void *arg), void *arg, int stacksize, int prio); + +#endif /* NO_SYS */ + +/** Returns the current time in milliseconds. */ +u32_t sys_now(void); + +/* Critical Region Protection */ +/* These functions must be implemented in the sys_arch.c file. + In some implementations they can provide a more light-weight protection + mechanism than using semaphores. Otherwise semaphores can be used for + implementation */ +#ifndef SYS_ARCH_PROTECT +/** SYS_LIGHTWEIGHT_PROT + * define SYS_LIGHTWEIGHT_PROT in lwipopts.h if you want inter-task protection + * for certain critical regions during buffer allocation, deallocation and memory + * allocation and deallocation. + */ +#if SYS_LIGHTWEIGHT_PROT + +/** SYS_ARCH_DECL_PROTECT + * declare a protection variable. This macro will default to defining a variable of + * type sys_prot_t. If a particular port needs a different implementation, then + * this macro may be defined in sys_arch.h. + */ +#define SYS_ARCH_DECL_PROTECT(lev) sys_prot_t lev +/** SYS_ARCH_PROTECT + * Perform a "fast" protect. This could be implemented by + * disabling interrupts for an embedded system or by using a semaphore or + * mutex. The implementation should allow calling SYS_ARCH_PROTECT when + * already protected. The old protection level is returned in the variable + * "lev". This macro will default to calling the sys_arch_protect() function + * which should be implemented in sys_arch.c. If a particular port needs a + * different implementation, then this macro may be defined in sys_arch.h + */ +#define SYS_ARCH_PROTECT(lev) lev = sys_arch_protect() +/** SYS_ARCH_UNPROTECT + * Perform a "fast" set of the protection level to "lev". This could be + * implemented by setting the interrupt level to "lev" within the MACRO or by + * using a semaphore or mutex. This macro will default to calling the + * sys_arch_unprotect() function which should be implemented in + * sys_arch.c. If a particular port needs a different implementation, then + * this macro may be defined in sys_arch.h + */ +#define SYS_ARCH_UNPROTECT(lev) sys_arch_unprotect(lev) +sys_prot_t sys_arch_protect(void); +void sys_arch_unprotect(sys_prot_t pval); + +#else + +#define SYS_ARCH_DECL_PROTECT(lev) +#define SYS_ARCH_PROTECT(lev) +#define SYS_ARCH_UNPROTECT(lev) + +#endif /* SYS_LIGHTWEIGHT_PROT */ + +#endif /* SYS_ARCH_PROTECT */ + +/* + * Macros to set/get and increase/decrease variables in a thread-safe way. + * Use these for accessing variable that are used from more than one thread. + */ + +#ifndef SYS_ARCH_INC +#define SYS_ARCH_INC(var, val) do { \ + SYS_ARCH_DECL_PROTECT(old_level); \ + SYS_ARCH_PROTECT(old_level); \ + var += val; \ + SYS_ARCH_UNPROTECT(old_level); \ + } while(0) +#endif /* SYS_ARCH_INC */ + +#ifndef SYS_ARCH_DEC +#define SYS_ARCH_DEC(var, val) do { \ + SYS_ARCH_DECL_PROTECT(old_level); \ + SYS_ARCH_PROTECT(old_level); \ + var -= val; \ + SYS_ARCH_UNPROTECT(old_level); \ + } while(0) +#endif /* SYS_ARCH_DEC */ + +#ifndef SYS_ARCH_GET +#define SYS_ARCH_GET(var, ret) do { \ + SYS_ARCH_DECL_PROTECT(old_level); \ + SYS_ARCH_PROTECT(old_level); \ + ret = var; \ + SYS_ARCH_UNPROTECT(old_level); \ + } while(0) +#endif /* SYS_ARCH_GET */ + +#ifndef SYS_ARCH_SET +#define SYS_ARCH_SET(var, val) do { \ + SYS_ARCH_DECL_PROTECT(old_level); \ + SYS_ARCH_PROTECT(old_level); \ + var = val; \ + SYS_ARCH_UNPROTECT(old_level); \ + } while(0) +#endif /* SYS_ARCH_SET */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __LWIP_SYS_H__ */ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/tcp.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/tcp.h new file mode 100644 index 000000000..c1515744d --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/tcp.h @@ -0,0 +1,709 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIP_TCP_H__ +#define __LWIP_TCP_H__ + +#include "lwip/opt.h" + +#if LWIP_TCP /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/sys.h" +#include "lwip/mem.h" +#include "lwip/pbuf.h" +#include "lwip/ip.h" +#include "lwip/icmp.h" +#include "lwip/err.h" + +#ifdef __cplusplus +extern "C" { +#endif + +struct tcp_pcb; + +/* Functions for interfacing with TCP: */ + +/* Lower layer interface to TCP: */ +#define tcp_init() /* Compatibility define, not init needed. */ +void tcp_tmr (void); /* Must be called every + TCP_TMR_INTERVAL + ms. (Typically 250 ms). */ +/* Application program's interface: */ +struct tcp_pcb * tcp_new (void); +struct tcp_pcb * tcp_alloc (u8_t prio); + +void tcp_arg (struct tcp_pcb *pcb, void *arg); +void tcp_accept (struct tcp_pcb *pcb, + err_t (* accept)(void *arg, struct tcp_pcb *newpcb, + err_t err)); +void tcp_recv (struct tcp_pcb *pcb, + err_t (* recv)(void *arg, struct tcp_pcb *tpcb, + struct pbuf *p, err_t err)); +void tcp_sent (struct tcp_pcb *pcb, + err_t (* sent)(void *arg, struct tcp_pcb *tpcb, + u16_t len)); +void tcp_poll (struct tcp_pcb *pcb, + err_t (* poll)(void *arg, struct tcp_pcb *tpcb), + u8_t interval); +void tcp_err (struct tcp_pcb *pcb, + void (* err)(void *arg, err_t err)); + +#define tcp_mss(pcb) ((pcb)->mss) +#define tcp_sndbuf(pcb) ((pcb)->snd_buf) +#define tcp_nagle_disable(pcb) ((pcb)->flags |= TF_NODELAY) +#define tcp_nagle_enable(pcb) ((pcb)->flags &= ~TF_NODELAY) +#define tcp_nagle_disabled(pcb) (((pcb)->flags & TF_NODELAY) != 0) + +#if TCP_LISTEN_BACKLOG +#define tcp_accepted(pcb) (((struct tcp_pcb_listen *)(pcb))->accepts_pending--) +#else /* TCP_LISTEN_BACKLOG */ +#define tcp_accepted(pcb) +#endif /* TCP_LISTEN_BACKLOG */ + +void tcp_recved (struct tcp_pcb *pcb, u16_t len); +err_t tcp_bind (struct tcp_pcb *pcb, struct ip_addr *ipaddr, + u16_t port); +err_t tcp_connect (struct tcp_pcb *pcb, struct ip_addr *ipaddr, + u16_t port, err_t (* connected)(void *arg, + struct tcp_pcb *tpcb, + err_t err)); + +struct tcp_pcb * tcp_listen_with_backlog(struct tcp_pcb *pcb, u8_t backlog); +#define tcp_listen(pcb) tcp_listen_with_backlog(pcb, TCP_DEFAULT_LISTEN_BACKLOG) + +void tcp_abandon (struct tcp_pcb *pcb, int reset); +#define tcp_abort(pcb) tcp_abandon((pcb), 1) +err_t tcp_close (struct tcp_pcb *pcb); + +/* Flags for "apiflags" parameter in tcp_write and tcp_enqueue */ +#define TCP_WRITE_FLAG_COPY 0x01 +#define TCP_WRITE_FLAG_MORE 0x02 + +err_t tcp_write (struct tcp_pcb *pcb, const void *dataptr, u16_t len, + u8_t apiflags); + +void tcp_setprio (struct tcp_pcb *pcb, u8_t prio); + +#define TCP_PRIO_MIN 1 +#define TCP_PRIO_NORMAL 64 +#define TCP_PRIO_MAX 127 + +/* It is also possible to call these two functions at the right + intervals (instead of calling tcp_tmr()). */ +void tcp_slowtmr (void); +void tcp_fasttmr (void); + + +/* Only used by IP to pass a TCP segment to TCP: */ +void tcp_input (struct pbuf *p, struct netif *inp); +/* Used within the TCP code only: */ +err_t tcp_send_empty_ack(struct tcp_pcb *pcb); +err_t tcp_output (struct tcp_pcb *pcb); +void tcp_rexmit (struct tcp_pcb *pcb); +void tcp_rexmit_rto (struct tcp_pcb *pcb); +void tcp_rexmit_fast (struct tcp_pcb *pcb); +u32_t tcp_update_rcv_ann_wnd(struct tcp_pcb *pcb); + +/** + * This is the Nagle algorithm: try to combine user data to send as few TCP + * segments as possible. Only send if + * - no previously transmitted data on the connection remains unacknowledged or + * - the TF_NODELAY flag is set (nagle algorithm turned off for this pcb) or + * - the only unsent segment is at least pcb->mss bytes long (or there is more + * than one unsent segment - with lwIP, this can happen although unsent->len < mss) + * - or if we are in fast-retransmit (TF_INFR) + */ +#define tcp_do_output_nagle(tpcb) ((((tpcb)->unacked == NULL) || \ + ((tpcb)->flags & (TF_NODELAY | TF_INFR)) || \ + (((tpcb)->unsent != NULL) && (((tpcb)->unsent->next != NULL) || \ + ((tpcb)->unsent->len >= (tpcb)->mss))) \ + ) ? 1 : 0) +#define tcp_output_nagle(tpcb) (tcp_do_output_nagle(tpcb) ? tcp_output(tpcb) : ERR_OK) + + +#define TCP_SEQ_LT(a,b) ((s32_t)((a)-(b)) < 0) +#define TCP_SEQ_LEQ(a,b) ((s32_t)((a)-(b)) <= 0) +#define TCP_SEQ_GT(a,b) ((s32_t)((a)-(b)) > 0) +#define TCP_SEQ_GEQ(a,b) ((s32_t)((a)-(b)) >= 0) +/* is b<=a<=c? */ +#if 0 /* see bug #10548 */ +#define TCP_SEQ_BETWEEN(a,b,c) ((c)-(b) >= (a)-(b)) +#endif +#define TCP_SEQ_BETWEEN(a,b,c) (TCP_SEQ_GEQ(a,b) && TCP_SEQ_LEQ(a,c)) +#define TCP_FIN 0x01U +#define TCP_SYN 0x02U +#define TCP_RST 0x04U +#define TCP_PSH 0x08U +#define TCP_ACK 0x10U +#define TCP_URG 0x20U +#define TCP_ECE 0x40U +#define TCP_CWR 0x80U + +#define TCP_FLAGS 0x3fU + +/* Length of the TCP header, excluding options. */ +#define TCP_HLEN 20 + +#ifndef TCP_TMR_INTERVAL +#define TCP_TMR_INTERVAL 250 /* The TCP timer interval in milliseconds. */ +#endif /* TCP_TMR_INTERVAL */ + +#ifndef TCP_FAST_INTERVAL +#define TCP_FAST_INTERVAL TCP_TMR_INTERVAL /* the fine grained timeout in milliseconds */ +#endif /* TCP_FAST_INTERVAL */ + +#ifndef TCP_SLOW_INTERVAL +#define TCP_SLOW_INTERVAL (2*TCP_TMR_INTERVAL) /* the coarse grained timeout in milliseconds */ +#endif /* TCP_SLOW_INTERVAL */ + +#define TCP_FIN_WAIT_TIMEOUT 20000 /* milliseconds */ +#define TCP_SYN_RCVD_TIMEOUT 20000 /* milliseconds */ + +#define TCP_OOSEQ_TIMEOUT 6U /* x RTO */ + +#ifndef TCP_MSL +#define TCP_MSL 60000UL /* The maximum segment lifetime in milliseconds */ +#endif + +/* Keepalive values, compliant with RFC 1122. Don't change this unless you know what you're doing */ +#ifndef TCP_KEEPIDLE_DEFAULT +#define TCP_KEEPIDLE_DEFAULT 7200000UL /* Default KEEPALIVE timer in milliseconds */ +#endif + +#ifndef TCP_KEEPINTVL_DEFAULT +#define TCP_KEEPINTVL_DEFAULT 75000UL /* Default Time between KEEPALIVE probes in milliseconds */ +#endif + +#ifndef TCP_KEEPCNT_DEFAULT +#define TCP_KEEPCNT_DEFAULT 9U /* Default Counter for KEEPALIVE probes */ +#endif + +#define TCP_MAXIDLE TCP_KEEPCNT_DEFAULT * TCP_KEEPINTVL_DEFAULT /* Maximum KEEPALIVE probe time */ + +/* Fields are (of course) in network byte order. + * Some fields are converted to host byte order in tcp_input(). + */ +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct tcp_hdr { + PACK_STRUCT_FIELD(u16_t src); + PACK_STRUCT_FIELD(u16_t dest); + PACK_STRUCT_FIELD(u32_t seqno); + PACK_STRUCT_FIELD(u32_t ackno); + PACK_STRUCT_FIELD(u16_t _hdrlen_rsvd_flags); + PACK_STRUCT_FIELD(u16_t wnd); + PACK_STRUCT_FIELD(u16_t chksum); + PACK_STRUCT_FIELD(u16_t urgp); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +#define TCPH_OFFSET(phdr) (ntohs((phdr)->_hdrlen_rsvd_flags) >> 8) +#define TCPH_HDRLEN(phdr) (ntohs((phdr)->_hdrlen_rsvd_flags) >> 12) +#define TCPH_FLAGS(phdr) (ntohs((phdr)->_hdrlen_rsvd_flags) & TCP_FLAGS) + +#define TCPH_OFFSET_SET(phdr, offset) (phdr)->_hdrlen_rsvd_flags = htons(((offset) << 8) | TCPH_FLAGS(phdr)) +#define TCPH_HDRLEN_SET(phdr, len) (phdr)->_hdrlen_rsvd_flags = htons(((len) << 12) | TCPH_FLAGS(phdr)) +#define TCPH_FLAGS_SET(phdr, flags) (phdr)->_hdrlen_rsvd_flags = (((phdr)->_hdrlen_rsvd_flags & htons((u16_t)(~(u16_t)(TCP_FLAGS)))) | htons(flags)) +#define TCPH_SET_FLAG(phdr, flags ) (phdr)->_hdrlen_rsvd_flags = ((phdr)->_hdrlen_rsvd_flags | htons(flags)) +#define TCPH_UNSET_FLAG(phdr, flags) (phdr)->_hdrlen_rsvd_flags = htons(ntohs((phdr)->_hdrlen_rsvd_flags) | (TCPH_FLAGS(phdr) & ~(flags)) ) + +#define TCP_TCPLEN(seg) ((seg)->len + ((TCPH_FLAGS((seg)->tcphdr) & (TCP_FIN | TCP_SYN)) != 0)) + +enum tcp_state { + CLOSED = 0, + LISTEN = 1, + SYN_SENT = 2, + SYN_RCVD = 3, + ESTABLISHED = 4, + FIN_WAIT_1 = 5, + FIN_WAIT_2 = 6, + CLOSE_WAIT = 7, + CLOSING = 8, + LAST_ACK = 9, + TIME_WAIT = 10 +}; + +/** Flags used on input processing, not on pcb->flags +*/ +#define TF_RESET (u8_t)0x08U /* Connection was reset. */ +#define TF_CLOSED (u8_t)0x10U /* Connection was sucessfully closed. */ +#define TF_GOT_FIN (u8_t)0x20U /* Connection was closed by the remote end. */ + + +#if LWIP_CALLBACK_API + /* Function to call when a listener has been connected. + * @param arg user-supplied argument (tcp_pcb.callback_arg) + * @param pcb a new tcp_pcb that now is connected + * @param err an error argument (TODO: that is current always ERR_OK?) + * @return ERR_OK: accept the new connection, + * any other err_t abortsthe new connection + */ +#define DEF_ACCEPT_CALLBACK err_t (* accept)(void *arg, struct tcp_pcb *newpcb, err_t err) +#else /* LWIP_CALLBACK_API */ +#define DEF_ACCEPT_CALLBACK +#endif /* LWIP_CALLBACK_API */ + +/** + * members common to struct tcp_pcb and struct tcp_listen_pcb + */ +#define TCP_PCB_COMMON(type) \ + type *next; /* for the linked list */ \ + enum tcp_state state; /* TCP state */ \ + u8_t prio; \ + void *callback_arg; \ + /* ports are in host byte order */ \ + u16_t local_port; \ + /* the accept callback for listen- and normal pcbs, if LWIP_CALLBACK_API */ \ + DEF_ACCEPT_CALLBACK + + +/* the TCP protocol control block */ +struct tcp_pcb { +/** common PCB members */ + IP_PCB; +/** protocol specific PCB members */ + TCP_PCB_COMMON(struct tcp_pcb); + + /* ports are in host byte order */ + u16_t remote_port; + + u8_t flags; +#define TF_ACK_DELAY ((u8_t)0x01U) /* Delayed ACK. */ +#define TF_ACK_NOW ((u8_t)0x02U) /* Immediate ACK. */ +#define TF_INFR ((u8_t)0x04U) /* In fast recovery. */ +#define TF_TIMESTAMP ((u8_t)0x08U) /* Timestamp option enabled */ +#define TF_FIN ((u8_t)0x20U) /* Connection was closed locally (FIN segment enqueued). */ +#define TF_NODELAY ((u8_t)0x40U) /* Disable Nagle algorithm */ +#define TF_NAGLEMEMERR ((u8_t)0x80U) /* nagle enabled, memerr, try to output to prevent delayed ACK to happen */ + + /* the rest of the fields are in host byte order + as we have to do some math with them */ + /* receiver variables */ + u32_t rcv_nxt; /* next seqno expected */ + u16_t rcv_wnd; /* receiver window available */ + u16_t rcv_ann_wnd; /* receiver window to announce */ + u32_t rcv_ann_right_edge; /* announced right edge of window */ + + /* Timers */ + u32_t tmr; + u8_t polltmr, pollinterval; + + /* Retransmission timer. */ + s16_t rtime; + + u16_t mss; /* maximum segment size */ + + /* RTT (round trip time) estimation variables */ + u32_t rttest; /* RTT estimate in 500ms ticks */ + u32_t rtseq; /* sequence number being timed */ + s16_t sa, sv; /* @todo document this */ + + s16_t rto; /* retransmission time-out */ + u8_t nrtx; /* number of retransmissions */ + + /* fast retransmit/recovery */ + u32_t lastack; /* Highest acknowledged seqno. */ + u8_t dupacks; + + /* congestion avoidance/control variables */ + u16_t cwnd; + u16_t ssthresh; + + /* sender variables */ + u32_t snd_nxt; /* next new seqno to be sent */ + u16_t snd_wnd; /* sender window */ + u32_t snd_wl1, snd_wl2; /* Sequence and acknowledgement numbers of last + window update. */ + u32_t snd_lbb; /* Sequence number of next byte to be buffered. */ + + u16_t acked; + + u16_t snd_buf; /* Available buffer space for sending (in bytes). */ +#define TCP_SNDQUEUELEN_OVERFLOW (0xffff-3) + u16_t snd_queuelen; /* Available buffer space for sending (in tcp_segs). */ + + + /* These are ordered by sequence number: */ + struct tcp_seg *unsent; /* Unsent (queued) segments. */ + struct tcp_seg *unacked; /* Sent but unacknowledged segments. */ +#if TCP_QUEUE_OOSEQ + struct tcp_seg *ooseq; /* Received out of sequence segments. */ +#endif /* TCP_QUEUE_OOSEQ */ + + struct pbuf *refused_data; /* Data previously received but not yet taken by upper layer */ + +#if LWIP_CALLBACK_API + /* Function to be called when more send buffer space is available. + * @param arg user-supplied argument (tcp_pcb.callback_arg) + * @param pcb the tcp_pcb which has send buffer space available + * @param space the amount of bytes available + * @return ERR_OK: try to send some data by calling tcp_output + */ + err_t (* sent)(void *arg, struct tcp_pcb *pcb, u16_t space); + + /* Function to be called when (in-sequence) data has arrived. + * @param arg user-supplied argument (tcp_pcb.callback_arg) + * @param pcb the tcp_pcb for which data has arrived + * @param p the packet buffer which arrived + * @param err an error argument (TODO: that is current always ERR_OK?) + * @return ERR_OK: try to send some data by calling tcp_output + */ + err_t (* recv)(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err); + + /* Function to be called when a connection has been set up. + * @param arg user-supplied argument (tcp_pcb.callback_arg) + * @param pcb the tcp_pcb that now is connected + * @param err an error argument (TODO: that is current always ERR_OK?) + * @return value is currently ignored + */ + err_t (* connected)(void *arg, struct tcp_pcb *pcb, err_t err); + + /* Function which is called periodically. + * The period can be adjusted in multiples of the TCP slow timer interval + * by changing tcp_pcb.polltmr. + * @param arg user-supplied argument (tcp_pcb.callback_arg) + * @param pcb the tcp_pcb to poll for + * @return ERR_OK: try to send some data by calling tcp_output + */ + err_t (* poll)(void *arg, struct tcp_pcb *pcb); + + /* Function to be called whenever a fatal error occurs. + * There is no pcb parameter since most of the times, the pcb is + * already deallocated (or there is no pcb) when this function is called. + * @param arg user-supplied argument (tcp_pcb.callback_arg) + * @param err an indication why the error callback is called: + * ERR_ABRT: aborted through tcp_abort or by a TCP timer + * ERR_RST: the connection was reset by the remote host + */ + void (* errf)(void *arg, err_t err); +#endif /* LWIP_CALLBACK_API */ + +#if LWIP_TCP_TIMESTAMPS + u32_t ts_lastacksent; + u32_t ts_recent; +#endif /* LWIP_TCP_TIMESTAMPS */ + + /* idle time before KEEPALIVE is sent */ + u32_t keep_idle; +#if LWIP_TCP_KEEPALIVE + u32_t keep_intvl; + u32_t keep_cnt; +#endif /* LWIP_TCP_KEEPALIVE */ + + /* Persist timer counter */ + u32_t persist_cnt; + /* Persist timer back-off */ + u8_t persist_backoff; + + /* KEEPALIVE counter */ + u8_t keep_cnt_sent; +}; + +struct tcp_pcb_listen { +/* Common members of all PCB types */ + IP_PCB; +/* Protocol specific PCB members */ + TCP_PCB_COMMON(struct tcp_pcb_listen); + +#if TCP_LISTEN_BACKLOG + u8_t backlog; + u8_t accepts_pending; +#endif /* TCP_LISTEN_BACKLOG */ +}; + +#if LWIP_EVENT_API + +enum lwip_event { + LWIP_EVENT_ACCEPT, + LWIP_EVENT_SENT, + LWIP_EVENT_RECV, + LWIP_EVENT_CONNECTED, + LWIP_EVENT_POLL, + LWIP_EVENT_ERR +}; + +err_t lwip_tcp_event(void *arg, struct tcp_pcb *pcb, + enum lwip_event, + struct pbuf *p, + u16_t size, + err_t err); + +#define TCP_EVENT_ACCEPT(pcb,err,ret) ret = lwip_tcp_event((pcb)->callback_arg, (pcb),\ + LWIP_EVENT_ACCEPT, NULL, 0, err) +#define TCP_EVENT_SENT(pcb,space,ret) ret = lwip_tcp_event((pcb)->callback_arg, (pcb),\ + LWIP_EVENT_SENT, NULL, space, ERR_OK) +#define TCP_EVENT_RECV(pcb,p,err,ret) ret = lwip_tcp_event((pcb)->callback_arg, (pcb),\ + LWIP_EVENT_RECV, (p), 0, (err)) +#define TCP_EVENT_CONNECTED(pcb,err,ret) ret = lwip_tcp_event((pcb)->callback_arg, (pcb),\ + LWIP_EVENT_CONNECTED, NULL, 0, (err)) +#define TCP_EVENT_POLL(pcb,ret) ret = lwip_tcp_event((pcb)->callback_arg, (pcb),\ + LWIP_EVENT_POLL, NULL, 0, ERR_OK) +#define TCP_EVENT_ERR(errf,arg,err) lwip_tcp_event((arg), NULL, \ + LWIP_EVENT_ERR, NULL, 0, (err)) +#else /* LWIP_EVENT_API */ + +#define TCP_EVENT_ACCEPT(pcb,err,ret) \ + do { \ + if((pcb)->accept != NULL) \ + (ret) = (pcb)->accept((pcb)->callback_arg,(pcb),(err)); \ + else (ret) = ERR_OK; \ + } while (0) + +#define TCP_EVENT_SENT(pcb,space,ret) \ + do { \ + if((pcb)->sent != NULL) \ + (ret) = (pcb)->sent((pcb)->callback_arg,(pcb),(space)); \ + else (ret) = ERR_OK; \ + } while (0) + +#define TCP_EVENT_RECV(pcb,p,err,ret) \ + do { \ + if((pcb)->recv != NULL) { \ + (ret) = (pcb)->recv((pcb)->callback_arg,(pcb),(p),(err)); \ + } else { \ + (ret) = tcp_recv_null(NULL, (pcb), (p), (err)); \ + } \ + } while (0) + +#define TCP_EVENT_CONNECTED(pcb,err,ret) \ + do { \ + if((pcb)->connected != NULL) \ + (ret) = (pcb)->connected((pcb)->callback_arg,(pcb),(err)); \ + else (ret) = ERR_OK; \ + } while (0) + +#define TCP_EVENT_POLL(pcb,ret) \ + do { \ + if((pcb)->poll != NULL) \ + (ret) = (pcb)->poll((pcb)->callback_arg,(pcb)); \ + else (ret) = ERR_OK; \ + } while (0) + +#define TCP_EVENT_ERR(errf,arg,err) \ + do { \ + if((errf) != NULL) \ + (errf)((arg),(err)); \ + } while (0) + +#endif /* LWIP_EVENT_API */ + +/* This structure represents a TCP segment on the unsent and unacked queues */ +struct tcp_seg { + struct tcp_seg *next; /* used when putting segements on a queue */ + struct pbuf *p; /* buffer containing data + TCP header */ + void *dataptr; /* pointer to the TCP data in the pbuf */ + u16_t len; /* the TCP length of this segment */ + u8_t flags; +#define TF_SEG_OPTS_MSS (u8_t)0x01U /* Include MSS option. */ +#define TF_SEG_OPTS_TS (u8_t)0x02U /* Include timestamp option. */ + struct tcp_hdr *tcphdr; /* the TCP header */ +}; + +#define LWIP_TCP_OPT_LENGTH(flags) \ + (flags & TF_SEG_OPTS_MSS ? 4 : 0) + \ + (flags & TF_SEG_OPTS_TS ? 12 : 0) + +/** This returns a TCP header option for MSS in an u32_t */ +#define TCP_BUILD_MSS_OPTION(x) (x) = htonl(((u32_t)2 << 24) | \ + ((u32_t)4 << 16) | \ + (((u32_t)TCP_MSS / 256) << 8) | \ + (TCP_MSS & 255)) + +/* Internal functions and global variables: */ +struct tcp_pcb *tcp_pcb_copy(struct tcp_pcb *pcb); +void tcp_pcb_purge(struct tcp_pcb *pcb); +void tcp_pcb_remove(struct tcp_pcb **pcblist, struct tcp_pcb *pcb); + +u8_t tcp_segs_free(struct tcp_seg *seg); +u8_t tcp_seg_free(struct tcp_seg *seg); +struct tcp_seg *tcp_seg_copy(struct tcp_seg *seg); + +#define tcp_ack(pcb) \ + do { \ + if((pcb)->flags & TF_ACK_DELAY) { \ + (pcb)->flags &= ~TF_ACK_DELAY; \ + (pcb)->flags |= TF_ACK_NOW; \ + tcp_output(pcb); \ + } \ + else { \ + (pcb)->flags |= TF_ACK_DELAY; \ + } \ + } while (0) + +#define tcp_ack_now(pcb) \ + do { \ + (pcb)->flags |= TF_ACK_NOW; \ + tcp_output(pcb); \ + } while (0) + +err_t tcp_send_ctrl(struct tcp_pcb *pcb, u8_t flags); +err_t tcp_enqueue(struct tcp_pcb *pcb, void *dataptr, u16_t len, + u8_t flags, u8_t apiflags, u8_t optflags); + +void tcp_rexmit_seg(struct tcp_pcb *pcb, struct tcp_seg *seg); + +void tcp_rst(u32_t seqno, u32_t ackno, + struct ip_addr *local_ip, struct ip_addr *remote_ip, + u16_t local_port, u16_t remote_port); + +u32_t tcp_next_iss(void); + +void tcp_keepalive(struct tcp_pcb *pcb); +void tcp_zero_window_probe(struct tcp_pcb *pcb); + +#if TCP_CALCULATE_EFF_SEND_MSS +u16_t tcp_eff_send_mss(u16_t sendmss, struct ip_addr *addr); +#endif /* TCP_CALCULATE_EFF_SEND_MSS */ + +#if LWIP_CALLBACK_API +err_t tcp_recv_null(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err); +#endif /* LWIP_CALLBACK_API */ + +extern struct tcp_pcb *tcp_input_pcb; +extern u32_t tcp_ticks; + +const char* tcp_debug_state_str(enum tcp_state s); +#if TCP_DEBUG || TCP_INPUT_DEBUG || TCP_OUTPUT_DEBUG +void tcp_debug_print(struct tcp_hdr *tcphdr); +void tcp_debug_print_flags(u8_t flags); +void tcp_debug_print_state(enum tcp_state s); +void tcp_debug_print_pcbs(void); +s16_t tcp_pcbs_sane(void); +#else +# define tcp_debug_print(tcphdr) +# define tcp_debug_print_flags(flags) +# define tcp_debug_print_state(s) +# define tcp_debug_print_pcbs() +# define tcp_pcbs_sane() 1 +#endif /* TCP_DEBUG */ + +#if NO_SYS +#define tcp_timer_needed() +#else +void tcp_timer_needed(void); +#endif + +/* The TCP PCB lists. */ +union tcp_listen_pcbs_t { /* List of all TCP PCBs in LISTEN state. */ + struct tcp_pcb_listen *listen_pcbs; + struct tcp_pcb *pcbs; +}; +extern union tcp_listen_pcbs_t tcp_listen_pcbs; +extern struct tcp_pcb *tcp_active_pcbs; /* List of all TCP PCBs that are in a + state in which they accept or send + data. */ +extern struct tcp_pcb *tcp_tw_pcbs; /* List of all TCP PCBs in TIME-WAIT. */ + +extern struct tcp_pcb *tcp_tmp_pcb; /* Only used for temporary storage. */ + +/* Axioms about the above lists: + 1) Every TCP PCB that is not CLOSED is in one of the lists. + 2) A PCB is only in one of the lists. + 3) All PCBs in the tcp_listen_pcbs list is in LISTEN state. + 4) All PCBs in the tcp_tw_pcbs list is in TIME-WAIT state. +*/ + +/* Define two macros, TCP_REG and TCP_RMV that registers a TCP PCB + with a PCB list or removes a PCB from a list, respectively. */ +#if 0 +#define TCP_REG(pcbs, npcb) do {\ + LWIP_DEBUGF(TCP_DEBUG, ("TCP_REG %p local port %d\n", npcb, npcb->local_port)); \ + for(tcp_tmp_pcb = *pcbs; \ + tcp_tmp_pcb != NULL; \ + tcp_tmp_pcb = tcp_tmp_pcb->next) { \ + LWIP_ASSERT("TCP_REG: already registered\n", tcp_tmp_pcb != npcb); \ + } \ + LWIP_ASSERT("TCP_REG: pcb->state != CLOSED", npcb->state != CLOSED); \ + npcb->next = *pcbs; \ + LWIP_ASSERT("TCP_REG: npcb->next != npcb", npcb->next != npcb); \ + *(pcbs) = npcb; \ + LWIP_ASSERT("TCP_RMV: tcp_pcbs sane", tcp_pcbs_sane()); \ + tcp_timer_needed(); \ + } while(0) +#define TCP_RMV(pcbs, npcb) do { \ + LWIP_ASSERT("TCP_RMV: pcbs != NULL", *pcbs != NULL); \ + LWIP_DEBUGF(TCP_DEBUG, ("TCP_RMV: removing %p from %p\n", npcb, *pcbs)); \ + if(*pcbs == npcb) { \ + *pcbs = (*pcbs)->next; \ + } else for(tcp_tmp_pcb = *pcbs; tcp_tmp_pcb != NULL; tcp_tmp_pcb = tcp_tmp_pcb->next) { \ + if(tcp_tmp_pcb->next == npcb) { \ + tcp_tmp_pcb->next = npcb->next; \ + break; \ + } \ + } \ + npcb->next = NULL; \ + LWIP_ASSERT("TCP_RMV: tcp_pcbs sane", tcp_pcbs_sane()); \ + LWIP_DEBUGF(TCP_DEBUG, ("TCP_RMV: removed %p from %p\n", npcb, *pcbs)); \ + } while(0) + +#else /* LWIP_DEBUG */ + +#define TCP_REG(pcbs, npcb) \ + do { \ + npcb->next = *pcbs; \ + *(pcbs) = npcb; \ + tcp_timer_needed(); \ + } while (0) + +#define TCP_RMV(pcbs, npcb) \ + do { \ + if(*(pcbs) == npcb) { \ + (*(pcbs)) = (*pcbs)->next; \ + } \ + else { \ + for(tcp_tmp_pcb = *pcbs; \ + tcp_tmp_pcb != NULL; \ + tcp_tmp_pcb = tcp_tmp_pcb->next) { \ + if(tcp_tmp_pcb->next == npcb) { \ + tcp_tmp_pcb->next = npcb->next; \ + break; \ + } \ + } \ + } \ + npcb->next = NULL; \ + } while(0) + +#endif /* LWIP_DEBUG */ + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_TCP */ + +#endif /* __LWIP_TCP_H__ */ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/tcpip.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/tcpip.h new file mode 100644 index 000000000..00a3ec5dc --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/tcpip.h @@ -0,0 +1,143 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIP_TCPIP_H__ +#define __LWIP_TCPIP_H__ + +#include "lwip/opt.h" + +#if !NO_SYS /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/api_msg.h" +#include "lwip/netifapi.h" +#include "lwip/pbuf.h" +#include "lwip/api.h" +#include "lwip/sys.h" +#include "lwip/netif.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#if LWIP_TCPIP_CORE_LOCKING +/** The global semaphore to lock the stack. */ +extern sys_sem_t lock_tcpip_core; +#define LOCK_TCPIP_CORE() sys_sem_wait(lock_tcpip_core) +#define UNLOCK_TCPIP_CORE() sys_sem_signal(lock_tcpip_core) +#define TCPIP_APIMSG(m) tcpip_apimsg_lock(m) +#define TCPIP_APIMSG_ACK(m) +#define TCPIP_NETIFAPI(m) tcpip_netifapi_lock(m) +#define TCPIP_NETIFAPI_ACK(m) +#else +#define LOCK_TCPIP_CORE() +#define UNLOCK_TCPIP_CORE() +#define TCPIP_APIMSG(m) tcpip_apimsg(m) +#define TCPIP_APIMSG_ACK(m) sys_sem_signal(m->conn->op_completed) +#define TCPIP_NETIFAPI(m) tcpip_netifapi(m) +#define TCPIP_NETIFAPI_ACK(m) sys_sem_signal(m->sem) +#endif /* LWIP_TCPIP_CORE_LOCKING */ + +void tcpip_init(void (* tcpip_init_done)(void *), void *arg); + +#if LWIP_NETCONN +err_t tcpip_apimsg(struct api_msg *apimsg); +#if LWIP_TCPIP_CORE_LOCKING +err_t tcpip_apimsg_lock(struct api_msg *apimsg); +#endif /* LWIP_TCPIP_CORE_LOCKING */ +#endif /* LWIP_NETCONN */ + +err_t tcpip_input(struct pbuf *p, struct netif *inp); + +#if LWIP_NETIF_API +err_t tcpip_netifapi(struct netifapi_msg *netifapimsg); +#if LWIP_TCPIP_CORE_LOCKING +err_t tcpip_netifapi_lock(struct netifapi_msg *netifapimsg); +#endif /* LWIP_TCPIP_CORE_LOCKING */ +#endif /* LWIP_NETIF_API */ + +err_t tcpip_callback_with_block(void (*f)(void *ctx), void *ctx, u8_t block); +#define tcpip_callback(f, ctx) tcpip_callback_with_block(f, ctx, 1) + +/* free pbufs or heap memory from another context without blocking */ +err_t pbuf_free_callback(struct pbuf *p); +err_t mem_free_callback(void *m); + +err_t tcpip_timeout(u32_t msecs, sys_timeout_handler h, void *arg); +err_t tcpip_untimeout(sys_timeout_handler h, void *arg); + +enum tcpip_msg_type { +#if LWIP_NETCONN + TCPIP_MSG_API, +#endif /* LWIP_NETCONN */ + TCPIP_MSG_INPKT, +#if LWIP_NETIF_API + TCPIP_MSG_NETIFAPI, +#endif /* LWIP_NETIF_API */ + TCPIP_MSG_CALLBACK, + TCPIP_MSG_TIMEOUT, + TCPIP_MSG_UNTIMEOUT +}; + +struct tcpip_msg { + enum tcpip_msg_type type; + sys_sem_t *sem; + union { +#if LWIP_NETCONN + struct api_msg *apimsg; +#endif /* LWIP_NETCONN */ +#if LWIP_NETIF_API + struct netifapi_msg *netifapimsg; +#endif /* LWIP_NETIF_API */ + struct { + struct pbuf *p; + struct netif *netif; + } inp; + struct { + void (*f)(void *ctx); + void *ctx; + } cb; + struct { + u32_t msecs; + sys_timeout_handler h; + void *arg; + } tmo; + } msg; +}; + +#ifdef __cplusplus +} +#endif + +#endif /* !NO_SYS */ + +#endif /* __LWIP_TCPIP_H__ */ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/udp.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/udp.h new file mode 100644 index 000000000..1269ee19c --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/udp.h @@ -0,0 +1,155 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIP_UDP_H__ +#define __LWIP_UDP_H__ + +#include "lwip/opt.h" + +#if LWIP_UDP /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/pbuf.h" +#include "lwip/netif.h" +#include "lwip/ip_addr.h" +#include "lwip/ip.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define UDP_HLEN 8 + +/* Fields are (of course) in network byte order. */ +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct udp_hdr { + PACK_STRUCT_FIELD(u16_t src); + PACK_STRUCT_FIELD(u16_t dest); /* src/dest UDP ports */ + PACK_STRUCT_FIELD(u16_t len); + PACK_STRUCT_FIELD(u16_t chksum); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +#define UDP_FLAGS_NOCHKSUM 0x01U +#define UDP_FLAGS_UDPLITE 0x02U +#define UDP_FLAGS_CONNECTED 0x04U + +struct udp_pcb { +/* Common members of all PCB types */ + IP_PCB; + +/* Protocol specific PCB members */ + + struct udp_pcb *next; + + u8_t flags; + /* ports are in host byte order */ + u16_t local_port, remote_port; + +#if LWIP_IGMP + /* outgoing network interface for multicast packets */ + struct ip_addr multicast_ip; +#endif /* LWIP_IGMP */ + +#if LWIP_UDPLITE + /* used for UDP_LITE only */ + u16_t chksum_len_rx, chksum_len_tx; +#endif /* LWIP_UDPLITE */ + + /* receive callback function + * addr and port are in same byte order as in the pcb + * The callback is responsible for freeing the pbuf + * if it's not used any more. + * + * ATTENTION: Be aware that 'addr' points into the pbuf 'p' so freeing this pbuf + * makes 'addr' invalid, too. + * + * @param arg user supplied argument (udp_pcb.recv_arg) + * @param pcb the udp_pcb which received data + * @param p the packet buffer that was received + * @param addr the remote IP address from which the packet was received + * @param port the remote port from which the packet was received + */ + void (* recv)(void *arg, struct udp_pcb *pcb, struct pbuf *p, + struct ip_addr *addr, u16_t port); + /* user-supplied argument for the recv callback */ + void *recv_arg; +}; +/* udp_pcbs export for exernal reference (e.g. SNMP agent) */ +extern struct udp_pcb *udp_pcbs; + +/* The following functions is the application layer interface to the + UDP code. */ +struct udp_pcb * udp_new (void); +void udp_remove (struct udp_pcb *pcb); +err_t udp_bind (struct udp_pcb *pcb, struct ip_addr *ipaddr, + u16_t port); +err_t udp_connect (struct udp_pcb *pcb, struct ip_addr *ipaddr, + u16_t port); +void udp_disconnect (struct udp_pcb *pcb); +void udp_recv (struct udp_pcb *pcb, + void (* recv)(void *arg, struct udp_pcb *upcb, + struct pbuf *p, + struct ip_addr *addr, + u16_t port), + void *recv_arg); +err_t udp_sendto_if (struct udp_pcb *pcb, struct pbuf *p, struct ip_addr *dst_ip, u16_t dst_port, struct netif *netif); +err_t udp_sendto (struct udp_pcb *pcb, struct pbuf *p, struct ip_addr *dst_ip, u16_t dst_port); +err_t udp_send (struct udp_pcb *pcb, struct pbuf *p); + +#define udp_flags(pcb) ((pcb)->flags) +#define udp_setflags(pcb, f) ((pcb)->flags = (f)) + +/* The following functions are the lower layer interface to UDP. */ +void udp_input (struct pbuf *p, struct netif *inp); + +#define udp_init() /* Compatibility define, not init needed. */ + +#if UDP_DEBUG +void udp_debug_print(struct udp_hdr *udphdr); +#else +#define udp_debug_print(udphdr) +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_UDP */ + +#endif /* __LWIP_UDP_H__ */ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/netif/etharp.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/netif/etharp.h new file mode 100644 index 000000000..fb1542a77 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/netif/etharp.h @@ -0,0 +1,194 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Copyright (c) 2001-2003 Swedish Institute of Computer Science. + * Copyright (c) 2003-2004 Leon Woestenberg + * Copyright (c) 2003-2004 Axon Digital Design B.V., The Netherlands. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#ifndef __NETIF_ETHARP_H__ +#define __NETIF_ETHARP_H__ + +#include "lwip/opt.h" + +#if LWIP_ARP /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/pbuf.h" +#include "lwip/ip_addr.h" +#include "lwip/netif.h" +#include "lwip/ip.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef ETH_PAD_SIZE +#define ETH_PAD_SIZE 0 +#endif + +#ifndef ETHARP_HWADDR_LEN +#define ETHARP_HWADDR_LEN 6 +#endif + +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct eth_addr { + PACK_STRUCT_FIELD(u8_t addr[ETHARP_HWADDR_LEN]); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct eth_hdr { +#if ETH_PAD_SIZE + PACK_STRUCT_FIELD(u8_t padding[ETH_PAD_SIZE]); +#endif + PACK_STRUCT_FIELD(struct eth_addr dest); + PACK_STRUCT_FIELD(struct eth_addr src); + PACK_STRUCT_FIELD(u16_t type); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +#define SIZEOF_ETH_HDR (14 + ETH_PAD_SIZE) + +#if ETHARP_SUPPORT_VLAN + +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct eth_vlan_hdr { + PACK_STRUCT_FIELD(u16_t tpid); + PACK_STRUCT_FIELD(u16_t prio_vid); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +#define SIZEOF_VLAN_HDR 4 +#define VLAN_ID(vlan_hdr) (htons((vlan_hdr)->prio_vid) & 0xFFF) + +#endif /* ETHARP_SUPPORT_VLAN */ + +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +/** the ARP message */ +struct etharp_hdr { + PACK_STRUCT_FIELD(u16_t hwtype); + PACK_STRUCT_FIELD(u16_t proto); + PACK_STRUCT_FIELD(u16_t _hwlen_protolen); + PACK_STRUCT_FIELD(u16_t opcode); + PACK_STRUCT_FIELD(struct eth_addr shwaddr); + PACK_STRUCT_FIELD(struct ip_addr2 sipaddr); + PACK_STRUCT_FIELD(struct eth_addr dhwaddr); + PACK_STRUCT_FIELD(struct ip_addr2 dipaddr); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +#define SIZEOF_ETHARP_HDR 28 +#define SIZEOF_ETHARP_PACKET (SIZEOF_ETH_HDR + SIZEOF_ETHARP_HDR) + +/** 5 seconds period */ +#define ARP_TMR_INTERVAL 5000 + +#define ETHTYPE_ARP 0x0806 +#define ETHTYPE_IP 0x0800 +#define ETHTYPE_VLAN 0x8100 +#define ETHTYPE_PPPOEDISC 0x8863 /* PPP Over Ethernet Discovery Stage */ +#define ETHTYPE_PPPOE 0x8864 /* PPP Over Ethernet Session Stage */ + +/** ARP message types (opcodes) */ +#define ARP_REQUEST 1 +#define ARP_REPLY 2 + +#if ARP_QUEUEING +/** struct for queueing outgoing packets for unknown address + * defined here to be accessed by memp.h + */ +struct etharp_q_entry { + struct etharp_q_entry *next; + struct pbuf *p; +}; +#endif /* ARP_QUEUEING */ + +#define etharp_init() /* Compatibility define, not init needed. */ +void etharp_tmr(void); +s8_t etharp_find_addr(struct netif *netif, struct ip_addr *ipaddr, + struct eth_addr **eth_ret, struct ip_addr **ip_ret); +void etharp_ip_input(struct netif *netif, struct pbuf *p); +void etharp_arp_input(struct netif *netif, struct eth_addr *ethaddr, + struct pbuf *p); +err_t etharp_output(struct netif *netif, struct pbuf *q, struct ip_addr *ipaddr); +err_t etharp_query(struct netif *netif, struct ip_addr *ipaddr, struct pbuf *q); +err_t etharp_request(struct netif *netif, struct ip_addr *ipaddr); +/** For Ethernet network interfaces, we might want to send "gratuitous ARP"; + * this is an ARP packet sent by a node in order to spontaneously cause other + * nodes to update an entry in their ARP cache. + * From RFC 3220 "IP Mobility Support for IPv4" section 4.6. */ +#define etharp_gratuitous(netif) etharp_request((netif), &(netif)->ip_addr) + +err_t ethernet_input(struct pbuf *p, struct netif *netif); + +#if LWIP_AUTOIP +err_t etharp_raw(struct netif *netif, const struct eth_addr *ethsrc_addr, + const struct eth_addr *ethdst_addr, + const struct eth_addr *hwsrc_addr, const struct ip_addr *ipsrc_addr, + const struct eth_addr *hwdst_addr, const struct ip_addr *ipdst_addr, + const u16_t opcode); +#endif /* LWIP_AUTOIP */ + +#define eth_addr_cmp(addr1, addr2) (memcmp((addr1)->addr, (addr2)->addr, ETHARP_HWADDR_LEN) == 0) + +extern const struct eth_addr ethbroadcast, ethzero; + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_ARP */ + +#endif /* __NETIF_ARP_H__ */ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/netif/loopif.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/netif/loopif.h new file mode 100644 index 000000000..3f4fa62cb --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/netif/loopif.h @@ -0,0 +1,55 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __NETIF_LOOPIF_H__ +#define __NETIF_LOOPIF_H__ + +#include "lwip/opt.h" +#include "lwip/netif.h" +#include "lwip/err.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#if !LWIP_NETIF_LOOPBACK_MULTITHREADING +#define loopif_poll netif_poll +#endif /* !LWIP_NETIF_LOOPBACK_MULTITHREADING */ + +err_t loopif_init(struct netif *netif); + +#ifdef __cplusplus +} +#endif + +#endif /* __NETIF_LOOPIF_H__ */ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/netif/ppp_oe.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/netif/ppp_oe.h new file mode 100644 index 000000000..fac0a78d0 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/netif/ppp_oe.h @@ -0,0 +1,163 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/***************************************************************************** +* ppp_oe.h - PPP Over Ethernet implementation for lwIP. +* +* Copyright (c) 2006 by Marc Boucher, Services Informatiques (MBSI) inc. +* +* The authors hereby grant permission to use, copy, modify, distribute, +* and license this software and its documentation for any purpose, provided +* that existing copyright notices are retained in all copies and that this +* notice and the following disclaimer are included verbatim in any +* distributions. No written agreement, license, or royalty fee is required +* for any of the authorized uses. +* +* THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS *AS IS* AND ANY EXPRESS OR +* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +* IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +****************************************************************************** +* REVISION HISTORY +* +* 06-01-01 Marc Boucher +* Ported to lwIP. +*****************************************************************************/ + + + +/* based on NetBSD: if_pppoe.c,v 1.64 2006/01/31 23:50:15 martin Exp */ + +/*- + * Copyright (c) 2002 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Martin Husemann . + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the NetBSD + * Foundation, Inc. and its contributors. + * 4. Neither the name of The NetBSD Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef PPP_OE_H +#define PPP_OE_H + +#include "lwip/opt.h" + +#if PPPOE_SUPPORT > 0 + +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct pppoehdr { + PACK_STRUCT_FIELD(u8_t vertype); + PACK_STRUCT_FIELD(u8_t code); + PACK_STRUCT_FIELD(u16_t session); + PACK_STRUCT_FIELD(u16_t plen); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct pppoetag { + PACK_STRUCT_FIELD(u16_t tag); + PACK_STRUCT_FIELD(u16_t len); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + + +#define PPPOE_STATE_INITIAL 0 +#define PPPOE_STATE_PADI_SENT 1 +#define PPPOE_STATE_PADR_SENT 2 +#define PPPOE_STATE_SESSION 3 +#define PPPOE_STATE_CLOSING 4 +/* passive */ +#define PPPOE_STATE_PADO_SENT 1 + +#define PPPOE_HEADERLEN sizeof(struct pppoehdr) +#define PPPOE_VERTYPE 0x11 /* VER=1, TYPE = 1 */ + +#define PPPOE_TAG_EOL 0x0000 /* end of list */ +#define PPPOE_TAG_SNAME 0x0101 /* service name */ +#define PPPOE_TAG_ACNAME 0x0102 /* access concentrator name */ +#define PPPOE_TAG_HUNIQUE 0x0103 /* host unique */ +#define PPPOE_TAG_ACCOOKIE 0x0104 /* AC cookie */ +#define PPPOE_TAG_VENDOR 0x0105 /* vendor specific */ +#define PPPOE_TAG_RELAYSID 0x0110 /* relay session id */ +#define PPPOE_TAG_SNAME_ERR 0x0201 /* service name error */ +#define PPPOE_TAG_ACSYS_ERR 0x0202 /* AC system error */ +#define PPPOE_TAG_GENERIC_ERR 0x0203 /* gerneric error */ + +#define PPPOE_CODE_PADI 0x09 /* Active Discovery Initiation */ +#define PPPOE_CODE_PADO 0x07 /* Active Discovery Offer */ +#define PPPOE_CODE_PADR 0x19 /* Active Discovery Request */ +#define PPPOE_CODE_PADS 0x65 /* Active Discovery Session confirmation */ +#define PPPOE_CODE_PADT 0xA7 /* Active Discovery Terminate */ + +#ifndef ETHERMTU +#define ETHERMTU 1500 +#endif + +/* two byte PPP protocol discriminator, then IP data */ +#define PPPOE_MAXMTU (ETHERMTU-PPPOE_HEADERLEN-2) + +struct pppoe_softc; + + +void pppoe_init(void); + +err_t pppoe_create(struct netif *ethif, int pd, void (*linkStatusCB)(int pd, int up), struct pppoe_softc **scptr); +err_t pppoe_destroy(struct netif *ifp); + +int pppoe_connect(struct pppoe_softc *sc); +void pppoe_disconnect(struct pppoe_softc *sc); + +void pppoe_disc_input(struct netif *netif, struct pbuf *p); +void pppoe_data_input(struct netif *netif, struct pbuf *p); + +err_t pppoe_xmit(struct pppoe_softc *sc, struct pbuf *pb); + +extern int pppoe_hdrlen; + +#endif /* PPPOE_SUPPORT */ + +#endif /* PPP_OE_H */ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/netif/slipif.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/netif/slipif.h new file mode 100644 index 000000000..ddc2dfa56 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/netif/slipif.h @@ -0,0 +1,53 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Copyright (c) 2001, Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __NETIF_SLIPIF_H__ +#define __NETIF_SLIPIF_H__ + +#include "lwip/netif.h" + +#ifdef __cplusplus +extern "C" { +#endif + +err_t slipif_init(struct netif * netif); +void slipif_poll(struct netif *netif); + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/netif/etharp.c b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/netif/etharp.c new file mode 100644 index 000000000..1a5d13404 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/netif/etharp.c @@ -0,0 +1,1224 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/** + * @file + * Address Resolution Protocol module for IP over Ethernet + * + * Functionally, ARP is divided into two parts. The first maps an IP address + * to a physical address when sending a packet, and the second part answers + * requests from other machines for our physical address. + * + * This implementation complies with RFC 826 (Ethernet ARP). It supports + * Gratuitious ARP from RFC3220 (IP Mobility Support for IPv4) section 4.6 + * if an interface calls etharp_gratuitous(our_netif) upon address change. + */ + +/* + * Copyright (c) 2001-2003 Swedish Institute of Computer Science. + * Copyright (c) 2003-2004 Leon Woestenberg + * Copyright (c) 2003-2004 Axon Digital Design B.V., The Netherlands. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + */ + +#include "lwip/opt.h" + +#if LWIP_ARP /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/inet.h" +#include "lwip/ip.h" +#include "lwip/stats.h" +#include "lwip/snmp.h" +#include "lwip/dhcp.h" +#include "lwip/autoip.h" +#include "netif/etharp.h" + +#if PPPOE_SUPPORT +#include "netif/ppp_oe.h" +#endif /* PPPOE_SUPPORT */ + +#include + +/** the time an ARP entry stays valid after its last update, + * for ARP_TMR_INTERVAL = 5000, this is + * (240 * 5) seconds = 20 minutes. + */ +#define ARP_MAXAGE 240 +/** the time an ARP entry stays pending after first request, + * for ARP_TMR_INTERVAL = 5000, this is + * (2 * 5) seconds = 10 seconds. + * + * @internal Keep this number at least 2, otherwise it might + * run out instantly if the timeout occurs directly after a request. + */ +#define ARP_MAXPENDING 2 + +#define HWTYPE_ETHERNET 1 + +#define ARPH_HWLEN(hdr) (ntohs((hdr)->_hwlen_protolen) >> 8) +#define ARPH_PROTOLEN(hdr) (ntohs((hdr)->_hwlen_protolen) & 0xff) + +#define ARPH_HWLEN_SET(hdr, len) (hdr)->_hwlen_protolen = htons(ARPH_PROTOLEN(hdr) | ((len) << 8)) +#define ARPH_PROTOLEN_SET(hdr, len) (hdr)->_hwlen_protolen = htons((len) | (ARPH_HWLEN(hdr) << 8)) + +enum etharp_state { + ETHARP_STATE_EMPTY = 0, + ETHARP_STATE_PENDING, + ETHARP_STATE_STABLE +}; + +struct etharp_entry { +#if ARP_QUEUEING + /** + * Pointer to queue of pending outgoing packets on this ARP entry. + */ + struct etharp_q_entry *q; +#endif + struct ip_addr ipaddr; + struct eth_addr ethaddr; + enum etharp_state state; + u8_t ctime; + struct netif *netif; +}; + +const struct eth_addr ethbroadcast = {{0xff,0xff,0xff,0xff,0xff,0xff}}; +const struct eth_addr ethzero = {{0,0,0,0,0,0}}; +static struct etharp_entry arp_table[ARP_TABLE_SIZE]; +#if !LWIP_NETIF_HWADDRHINT +static u8_t etharp_cached_entry; +#endif + +/** + * Try hard to create a new entry - we want the IP address to appear in + * the cache (even if this means removing an active entry or so). */ +#define ETHARP_TRY_HARD 1 +#define ETHARP_FIND_ONLY 2 + +#if LWIP_NETIF_HWADDRHINT +#define NETIF_SET_HINT(netif, hint) if (((netif) != NULL) && ((netif)->addr_hint != NULL)) \ + *((netif)->addr_hint) = (hint); +static s8_t find_entry(struct ip_addr *ipaddr, u8_t flags, struct netif *netif); +#else /* LWIP_NETIF_HWADDRHINT */ +static s8_t find_entry(struct ip_addr *ipaddr, u8_t flags); +#endif /* LWIP_NETIF_HWADDRHINT */ + +static err_t update_arp_entry(struct netif *netif, struct ip_addr *ipaddr, struct eth_addr *ethaddr, u8_t flags); + + +/* Some checks, instead of etharp_init(): */ +#if (LWIP_ARP && (ARP_TABLE_SIZE > 0x7f)) + #error "If you want to use ARP, ARP_TABLE_SIZE must fit in an s8_t, so, you have to reduce it in your lwipopts.h" +#endif + + +#if ARP_QUEUEING +/** + * Free a complete queue of etharp entries + * + * @param q a qeueue of etharp_q_entry's to free + */ +static void +free_etharp_q(struct etharp_q_entry *q) +{ + struct etharp_q_entry *r; + LWIP_ASSERT("q != NULL", q != NULL); + LWIP_ASSERT("q->p != NULL", q->p != NULL); + while (q) { + r = q; + q = q->next; + LWIP_ASSERT("r->p != NULL", (r->p != NULL)); + pbuf_free(r->p); + memp_free(MEMP_ARP_QUEUE, r); + } +} +#endif + +/** + * Clears expired entries in the ARP table. + * + * This function should be called every ETHARP_TMR_INTERVAL microseconds (5 seconds), + * in order to expire entries in the ARP table. + */ +void +etharp_tmr(void) +{ + u8_t i; + + LWIP_DEBUGF(ETHARP_DEBUG, ("etharp_timer\n")); + /* remove expired entries from the ARP table */ + for (i = 0; i < ARP_TABLE_SIZE; ++i) { + arp_table[i].ctime++; + if (((arp_table[i].state == ETHARP_STATE_STABLE) && + (arp_table[i].ctime >= ARP_MAXAGE)) || + ((arp_table[i].state == ETHARP_STATE_PENDING) && + (arp_table[i].ctime >= ARP_MAXPENDING))) { + /* pending or stable entry has become old! */ + LWIP_DEBUGF(ETHARP_DEBUG, ("etharp_timer: expired %s entry %"U16_F".\n", + arp_table[i].state == ETHARP_STATE_STABLE ? "stable" : "pending", (u16_t)i)); + /* clean up entries that have just been expired */ + /* remove from SNMP ARP index tree */ + snmp_delete_arpidx_tree(arp_table[i].netif, &arp_table[i].ipaddr); +#if ARP_QUEUEING + /* and empty packet queue */ + if (arp_table[i].q != NULL) { + /* remove all queued packets */ + LWIP_DEBUGF(ETHARP_DEBUG, ("etharp_timer: freeing entry %"U16_F", packet queue %p.\n", (u16_t)i, (void *)(arp_table[i].q))); + free_etharp_q(arp_table[i].q); + arp_table[i].q = NULL; + } +#endif + /* recycle entry for re-use */ + arp_table[i].state = ETHARP_STATE_EMPTY; + } +#if ARP_QUEUEING + /* still pending entry? (not expired) */ + if (arp_table[i].state == ETHARP_STATE_PENDING) { + /* resend an ARP query here? */ + } +#endif + } +} + +/** + * Search the ARP table for a matching or new entry. + * + * If an IP address is given, return a pending or stable ARP entry that matches + * the address. If no match is found, create a new entry with this address set, + * but in state ETHARP_EMPTY. The caller must check and possibly change the + * state of the returned entry. + * + * If ipaddr is NULL, return a initialized new entry in state ETHARP_EMPTY. + * + * In all cases, attempt to create new entries from an empty entry. If no + * empty entries are available and ETHARP_TRY_HARD flag is set, recycle + * old entries. Heuristic choose the least important entry for recycling. + * + * @param ipaddr IP address to find in ARP cache, or to add if not found. + * @param flags + * - ETHARP_TRY_HARD: Try hard to create a entry by allowing recycling of + * active (stable or pending) entries. + * + * @return The ARP entry index that matched or is created, ERR_MEM if no + * entry is found or could be recycled. + */ +static s8_t +#if LWIP_NETIF_HWADDRHINT +find_entry(struct ip_addr *ipaddr, u8_t flags, struct netif *netif) +#else /* LWIP_NETIF_HWADDRHINT */ +find_entry(struct ip_addr *ipaddr, u8_t flags) +#endif /* LWIP_NETIF_HWADDRHINT */ +{ + s8_t old_pending = ARP_TABLE_SIZE, old_stable = ARP_TABLE_SIZE; + s8_t empty = ARP_TABLE_SIZE; + u8_t i = 0, age_pending = 0, age_stable = 0; +#if ARP_QUEUEING + /* oldest entry with packets on queue */ + s8_t old_queue = ARP_TABLE_SIZE; + /* its age */ + u8_t age_queue = 0; +#endif + + /* First, test if the last call to this function asked for the + * same address. If so, we're really fast! */ + if (ipaddr) { + /* ipaddr to search for was given */ +#if LWIP_NETIF_HWADDRHINT + if ((netif != NULL) && (netif->addr_hint != NULL)) { + /* per-pcb cached entry was given */ + u8_t per_pcb_cache = *(netif->addr_hint); + if ((per_pcb_cache < ARP_TABLE_SIZE) && arp_table[per_pcb_cache].state == ETHARP_STATE_STABLE) { + /* the per-pcb-cached entry is stable */ + if (ip_addr_cmp(ipaddr, &arp_table[per_pcb_cache].ipaddr)) { + /* per-pcb cached entry was the right one! */ + ETHARP_STATS_INC(etharp.cachehit); + return per_pcb_cache; + } + } + } +#else /* #if LWIP_NETIF_HWADDRHINT */ + if (arp_table[etharp_cached_entry].state == ETHARP_STATE_STABLE) { + /* the cached entry is stable */ + if (ip_addr_cmp(ipaddr, &arp_table[etharp_cached_entry].ipaddr)) { + /* cached entry was the right one! */ + ETHARP_STATS_INC(etharp.cachehit); + return etharp_cached_entry; + } + } +#endif /* #if LWIP_NETIF_HWADDRHINT */ + } + + /** + * a) do a search through the cache, remember candidates + * b) select candidate entry + * c) create new entry + */ + + /* a) in a single search sweep, do all of this + * 1) remember the first empty entry (if any) + * 2) remember the oldest stable entry (if any) + * 3) remember the oldest pending entry without queued packets (if any) + * 4) remember the oldest pending entry with queued packets (if any) + * 5) search for a matching IP entry, either pending or stable + * until 5 matches, or all entries are searched for. + */ + + for (i = 0; i < ARP_TABLE_SIZE; ++i) { + /* no empty entry found yet and now we do find one? */ + if ((empty == ARP_TABLE_SIZE) && (arp_table[i].state == ETHARP_STATE_EMPTY)) { + LWIP_DEBUGF(ETHARP_DEBUG, ("find_entry: found empty entry %"U16_F"\n", (u16_t)i)); + /* remember first empty entry */ + empty = i; + } + /* pending entry? */ + else if (arp_table[i].state == ETHARP_STATE_PENDING) { + /* if given, does IP address match IP address in ARP entry? */ + if (ipaddr && ip_addr_cmp(ipaddr, &arp_table[i].ipaddr)) { + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("find_entry: found matching pending entry %"U16_F"\n", (u16_t)i)); + /* found exact IP address match, simply bail out */ +#if LWIP_NETIF_HWADDRHINT + NETIF_SET_HINT(netif, i); +#else /* #if LWIP_NETIF_HWADDRHINT */ + etharp_cached_entry = i; +#endif /* #if LWIP_NETIF_HWADDRHINT */ + return i; +#if ARP_QUEUEING + /* pending with queued packets? */ + } else if (arp_table[i].q != NULL) { + if (arp_table[i].ctime >= age_queue) { + old_queue = i; + age_queue = arp_table[i].ctime; + } +#endif + /* pending without queued packets? */ + } else { + if (arp_table[i].ctime >= age_pending) { + old_pending = i; + age_pending = arp_table[i].ctime; + } + } + } + /* stable entry? */ + else if (arp_table[i].state == ETHARP_STATE_STABLE) { + /* if given, does IP address match IP address in ARP entry? */ + if (ipaddr && ip_addr_cmp(ipaddr, &arp_table[i].ipaddr)) { + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("find_entry: found matching stable entry %"U16_F"\n", (u16_t)i)); + /* found exact IP address match, simply bail out */ +#if LWIP_NETIF_HWADDRHINT + NETIF_SET_HINT(netif, i); +#else /* #if LWIP_NETIF_HWADDRHINT */ + etharp_cached_entry = i; +#endif /* #if LWIP_NETIF_HWADDRHINT */ + return i; + /* remember entry with oldest stable entry in oldest, its age in maxtime */ + } else if (arp_table[i].ctime >= age_stable) { + old_stable = i; + age_stable = arp_table[i].ctime; + } + } + } + /* { we have no match } => try to create a new entry */ + + /* no empty entry found and not allowed to recycle? */ + if (((empty == ARP_TABLE_SIZE) && ((flags & ETHARP_TRY_HARD) == 0)) + /* or don't create new entry, only search? */ + || ((flags & ETHARP_FIND_ONLY) != 0)) { + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("find_entry: no empty entry found and not allowed to recycle\n")); + return (s8_t)ERR_MEM; + } + + /* b) choose the least destructive entry to recycle: + * 1) empty entry + * 2) oldest stable entry + * 3) oldest pending entry without queued packets + * 4) oldest pending entry with queued packets + * + * { ETHARP_TRY_HARD is set at this point } + */ + + /* 1) empty entry available? */ + if (empty < ARP_TABLE_SIZE) { + i = empty; + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("find_entry: selecting empty entry %"U16_F"\n", (u16_t)i)); + } + /* 2) found recyclable stable entry? */ + else if (old_stable < ARP_TABLE_SIZE) { + /* recycle oldest stable*/ + i = old_stable; + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("find_entry: selecting oldest stable entry %"U16_F"\n", (u16_t)i)); +#if ARP_QUEUEING + /* no queued packets should exist on stable entries */ + LWIP_ASSERT("arp_table[i].q == NULL", arp_table[i].q == NULL); +#endif + /* 3) found recyclable pending entry without queued packets? */ + } else if (old_pending < ARP_TABLE_SIZE) { + /* recycle oldest pending */ + i = old_pending; + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("find_entry: selecting oldest pending entry %"U16_F" (without queue)\n", (u16_t)i)); +#if ARP_QUEUEING + /* 4) found recyclable pending entry with queued packets? */ + } else if (old_queue < ARP_TABLE_SIZE) { + /* recycle oldest pending */ + i = old_queue; + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("find_entry: selecting oldest pending entry %"U16_F", freeing packet queue %p\n", (u16_t)i, (void *)(arp_table[i].q))); + free_etharp_q(arp_table[i].q); + arp_table[i].q = NULL; +#endif + /* no empty or recyclable entries found */ + } else { + return (s8_t)ERR_MEM; + } + + /* { empty or recyclable entry found } */ + LWIP_ASSERT("i < ARP_TABLE_SIZE", i < ARP_TABLE_SIZE); + + if (arp_table[i].state != ETHARP_STATE_EMPTY) + { + snmp_delete_arpidx_tree(arp_table[i].netif, &arp_table[i].ipaddr); + } + /* recycle entry (no-op for an already empty entry) */ + arp_table[i].state = ETHARP_STATE_EMPTY; + + /* IP address given? */ + if (ipaddr != NULL) { + /* set IP address */ + ip_addr_set(&arp_table[i].ipaddr, ipaddr); + } + arp_table[i].ctime = 0; +#if LWIP_NETIF_HWADDRHINT + NETIF_SET_HINT(netif, i); +#else /* #if LWIP_NETIF_HWADDRHINT */ + etharp_cached_entry = i; +#endif /* #if LWIP_NETIF_HWADDRHINT */ + return (err_t)i; +} + +/** + * Send an IP packet on the network using netif->linkoutput + * The ethernet header is filled in before sending. + * + * @params netif the lwIP network interface on which to send the packet + * @params p the packet to send, p->payload pointing to the (uninitialized) ethernet header + * @params src the source MAC address to be copied into the ethernet header + * @params dst the destination MAC address to be copied into the ethernet header + * @return ERR_OK if the packet was sent, any other err_t on failure + */ +static err_t +etharp_send_ip(struct netif *netif, struct pbuf *p, struct eth_addr *src, struct eth_addr *dst) +{ + struct eth_hdr *ethhdr = p->payload; + u8_t k; + + LWIP_ASSERT("netif->hwaddr_len must be the same as ETHARP_HWADDR_LEN for etharp!", + (netif->hwaddr_len == ETHARP_HWADDR_LEN)); + k = ETHARP_HWADDR_LEN; + while(k > 0) { + k--; + ethhdr->dest.addr[k] = dst->addr[k]; + ethhdr->src.addr[k] = src->addr[k]; + } + ethhdr->type = htons(ETHTYPE_IP); + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_send_ip: sending packet %p\n", (void *)p)); + /* send the packet */ + return netif->linkoutput(netif, p); +} + +/** + * Update (or insert) a IP/MAC address pair in the ARP cache. + * + * If a pending entry is resolved, any queued packets will be sent + * at this point. + * + * @param ipaddr IP address of the inserted ARP entry. + * @param ethaddr Ethernet address of the inserted ARP entry. + * @param flags Defines behaviour: + * - ETHARP_TRY_HARD Allows ARP to insert this as a new item. If not specified, + * only existing ARP entries will be updated. + * + * @return + * - ERR_OK Succesfully updated ARP cache. + * - ERR_MEM If we could not add a new ARP entry when ETHARP_TRY_HARD was set. + * - ERR_ARG Non-unicast address given, those will not appear in ARP cache. + * + * @see pbuf_free() + */ +static err_t +update_arp_entry(struct netif *netif, struct ip_addr *ipaddr, struct eth_addr *ethaddr, u8_t flags) +{ + s8_t i; + u8_t k; + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("update_arp_entry()\n")); + LWIP_ASSERT("netif->hwaddr_len == ETHARP_HWADDR_LEN", netif->hwaddr_len == ETHARP_HWADDR_LEN); + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("update_arp_entry: %"U16_F".%"U16_F".%"U16_F".%"U16_F" - %02"X16_F":%02"X16_F":%02"X16_F":%02"X16_F":%02"X16_F":%02"X16_F"\n", + ip4_addr1(ipaddr), ip4_addr2(ipaddr), ip4_addr3(ipaddr), ip4_addr4(ipaddr), + ethaddr->addr[0], ethaddr->addr[1], ethaddr->addr[2], + ethaddr->addr[3], ethaddr->addr[4], ethaddr->addr[5])); + /* non-unicast address? */ + if (ip_addr_isany(ipaddr) || + ip_addr_isbroadcast(ipaddr, netif) || + ip_addr_ismulticast(ipaddr)) { + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("update_arp_entry: will not add non-unicast IP address to ARP cache\n")); + return ERR_ARG; + } + /* find or create ARP entry */ +#if LWIP_NETIF_HWADDRHINT + i = find_entry(ipaddr, flags, netif); +#else /* LWIP_NETIF_HWADDRHINT */ + i = find_entry(ipaddr, flags); +#endif /* LWIP_NETIF_HWADDRHINT */ + /* bail out if no entry could be found */ + if (i < 0) + return (err_t)i; + + /* mark it stable */ + arp_table[i].state = ETHARP_STATE_STABLE; + /* record network interface */ + arp_table[i].netif = netif; + + /* insert in SNMP ARP index tree */ + snmp_insert_arpidx_tree(netif, &arp_table[i].ipaddr); + + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("update_arp_entry: updating stable entry %"S16_F"\n", (s16_t)i)); + /* update address */ + k = ETHARP_HWADDR_LEN; + while (k > 0) { + k--; + arp_table[i].ethaddr.addr[k] = ethaddr->addr[k]; + } + /* reset time stamp */ + arp_table[i].ctime = 0; +#if ARP_QUEUEING + /* this is where we will send out queued packets! */ + while (arp_table[i].q != NULL) { + struct pbuf *p; + /* remember remainder of queue */ + struct etharp_q_entry *q = arp_table[i].q; + /* pop first item off the queue */ + arp_table[i].q = q->next; + /* get the packet pointer */ + p = q->p; + /* now queue entry can be freed */ + memp_free(MEMP_ARP_QUEUE, q); + /* send the queued IP packet */ + etharp_send_ip(netif, p, (struct eth_addr*)(netif->hwaddr), ethaddr); + /* free the queued IP packet */ + pbuf_free(p); + } +#endif + return ERR_OK; +} + +/** + * Finds (stable) ethernet/IP address pair from ARP table + * using interface and IP address index. + * @note the addresses in the ARP table are in network order! + * + * @param netif points to interface index + * @param ipaddr points to the (network order) IP address index + * @param eth_ret points to return pointer + * @param ip_ret points to return pointer + * @return table index if found, -1 otherwise + */ +s8_t +etharp_find_addr(struct netif *netif, struct ip_addr *ipaddr, + struct eth_addr **eth_ret, struct ip_addr **ip_ret) +{ + s8_t i; + + LWIP_UNUSED_ARG(netif); + +#if LWIP_NETIF_HWADDRHINT + i = find_entry(ipaddr, ETHARP_FIND_ONLY, NULL); +#else /* LWIP_NETIF_HWADDRHINT */ + i = find_entry(ipaddr, ETHARP_FIND_ONLY); +#endif /* LWIP_NETIF_HWADDRHINT */ + if((i >= 0) && arp_table[i].state == ETHARP_STATE_STABLE) { + *eth_ret = &arp_table[i].ethaddr; + *ip_ret = &arp_table[i].ipaddr; + return i; + } + return -1; +} + +/** + * Updates the ARP table using the given IP packet. + * + * Uses the incoming IP packet's source address to update the + * ARP cache for the local network. The function does not alter + * or free the packet. This function must be called before the + * packet p is passed to the IP layer. + * + * @param netif The lwIP network interface on which the IP packet pbuf arrived. + * @param p The IP packet that arrived on netif. + * + * @return NULL + * + * @see pbuf_free() + */ +void +etharp_ip_input(struct netif *netif, struct pbuf *p) +{ + struct eth_hdr *ethhdr; + struct ip_hdr *iphdr; + LWIP_ERROR("netif != NULL", (netif != NULL), return;); + /* Only insert an entry if the source IP address of the + incoming IP packet comes from a host on the local network. */ + ethhdr = p->payload; + iphdr = (struct ip_hdr *)((u8_t*)ethhdr + SIZEOF_ETH_HDR); +#if ETHARP_SUPPORT_VLAN + if (ethhdr->type == ETHTYPE_VLAN) { + iphdr = (struct ip_hdr *)((u8_t*)ethhdr + SIZEOF_ETH_HDR + SIZEOF_VLAN_HDR); + } +#endif /* ETHARP_SUPPORT_VLAN */ + + /* source is not on the local network? */ + if (!ip_addr_netcmp(&(iphdr->src), &(netif->ip_addr), &(netif->netmask))) { + /* do nothing */ + return; + } + + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_ip_input: updating ETHARP table.\n")); + /* update ARP table */ + /* @todo We could use ETHARP_TRY_HARD if we think we are going to talk + * back soon (for example, if the destination IP address is ours. */ + update_arp_entry(netif, &(iphdr->src), &(ethhdr->src), 0); +} + + +/** + * Responds to ARP requests to us. Upon ARP replies to us, add entry to cache + * send out queued IP packets. Updates cache with snooped address pairs. + * + * Should be called for incoming ARP packets. The pbuf in the argument + * is freed by this function. + * + * @param netif The lwIP network interface on which the ARP packet pbuf arrived. + * @param ethaddr Ethernet address of netif. + * @param p The ARP packet that arrived on netif. Is freed by this function. + * + * @return NULL + * + * @see pbuf_free() + */ +void +etharp_arp_input(struct netif *netif, struct eth_addr *ethaddr, struct pbuf *p) +{ + struct etharp_hdr *hdr; + struct eth_hdr *ethhdr; + /* these are aligned properly, whereas the ARP header fields might not be */ + struct ip_addr sipaddr, dipaddr; + u8_t i; + u8_t for_us; +#if LWIP_AUTOIP + const u8_t * ethdst_hwaddr; +#endif /* LWIP_AUTOIP */ + + LWIP_ERROR("netif != NULL", (netif != NULL), return;); + + /* drop short ARP packets: we have to check for p->len instead of p->tot_len here + since a struct etharp_hdr is pointed to p->payload, so it musn't be chained! */ + if (p->len < SIZEOF_ETHARP_PACKET) { + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, + ("etharp_arp_input: packet dropped, too short (%"S16_F"/%"S16_F")\n", p->tot_len, + (s16_t)SIZEOF_ETHARP_PACKET)); + ETHARP_STATS_INC(etharp.lenerr); + ETHARP_STATS_INC(etharp.drop); + pbuf_free(p); + return; + } + + ethhdr = p->payload; + hdr = (struct etharp_hdr *)((u8_t*)ethhdr + SIZEOF_ETH_HDR); +#if ETHARP_SUPPORT_VLAN + if (ethhdr->type == ETHTYPE_VLAN) { + hdr = (struct etharp_hdr *)(((u8_t*)ethhdr) + SIZEOF_ETH_HDR + SIZEOF_VLAN_HDR); + } +#endif /* ETHARP_SUPPORT_VLAN */ + + /* RFC 826 "Packet Reception": */ + if ((hdr->hwtype != htons(HWTYPE_ETHERNET)) || + (hdr->_hwlen_protolen != htons((ETHARP_HWADDR_LEN << 8) | sizeof(struct ip_addr))) || + (hdr->proto != htons(ETHTYPE_IP)) || + (ethhdr->type != htons(ETHTYPE_ARP))) { + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, + ("etharp_arp_input: packet dropped, wrong hw type, hwlen, proto, protolen or ethernet type (%"U16_F"/%"U16_F"/%"U16_F"/%"U16_F"/%"U16_F")\n", + hdr->hwtype, ARPH_HWLEN(hdr), hdr->proto, ARPH_PROTOLEN(hdr), ethhdr->type)); + ETHARP_STATS_INC(etharp.proterr); + ETHARP_STATS_INC(etharp.drop); + pbuf_free(p); + return; + } + ETHARP_STATS_INC(etharp.recv); + +#if LWIP_AUTOIP + /* We have to check if a host already has configured our random + * created link local address and continously check if there is + * a host with this IP-address so we can detect collisions */ + autoip_arp_reply(netif, hdr); +#endif /* LWIP_AUTOIP */ + + /* Copy struct ip_addr2 to aligned ip_addr, to support compilers without + * structure packing (not using structure copy which breaks strict-aliasing rules). */ + SMEMCPY(&sipaddr, &hdr->sipaddr, sizeof(sipaddr)); + SMEMCPY(&dipaddr, &hdr->dipaddr, sizeof(dipaddr)); + + /* this interface is not configured? */ + if (netif->ip_addr.addr == 0) { + for_us = 0; + } else { + /* ARP packet directed to us? */ + for_us = ip_addr_cmp(&dipaddr, &(netif->ip_addr)); + } + + /* ARP message directed to us? */ + if (for_us) { + /* add IP address in ARP cache; assume requester wants to talk to us. + * can result in directly sending the queued packets for this host. */ + update_arp_entry(netif, &sipaddr, &(hdr->shwaddr), ETHARP_TRY_HARD); + /* ARP message not directed to us? */ + } else { + /* update the source IP address in the cache, if present */ + update_arp_entry(netif, &sipaddr, &(hdr->shwaddr), 0); + } + + /* now act on the message itself */ + switch (htons(hdr->opcode)) { + /* ARP request? */ + case ARP_REQUEST: + /* ARP request. If it asked for our address, we send out a + * reply. In any case, we time-stamp any existing ARP entry, + * and possiby send out an IP packet that was queued on it. */ + + LWIP_DEBUGF (ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_arp_input: incoming ARP request\n")); + /* ARP request for our address? */ + if (for_us) { + + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_arp_input: replying to ARP request for our IP address\n")); + /* Re-use pbuf to send ARP reply. + Since we are re-using an existing pbuf, we can't call etharp_raw since + that would allocate a new pbuf. */ + hdr->opcode = htons(ARP_REPLY); + + hdr->dipaddr = hdr->sipaddr; + SMEMCPY(&hdr->sipaddr, &netif->ip_addr, sizeof(hdr->sipaddr)); + + LWIP_ASSERT("netif->hwaddr_len must be the same as ETHARP_HWADDR_LEN for etharp!", + (netif->hwaddr_len == ETHARP_HWADDR_LEN)); + i = ETHARP_HWADDR_LEN; +#if LWIP_AUTOIP + /* If we are using Link-Local, ARP packets must be broadcast on the + * link layer. (See RFC3927 Section 2.5) */ + ethdst_hwaddr = ((netif->autoip != NULL) && (netif->autoip->state != AUTOIP_STATE_OFF)) ? (u8_t*)(ethbroadcast.addr) : hdr->shwaddr.addr; +#endif /* LWIP_AUTOIP */ + + while(i > 0) { + i--; + hdr->dhwaddr.addr[i] = hdr->shwaddr.addr[i]; +#if LWIP_AUTOIP + ethhdr->dest.addr[i] = ethdst_hwaddr[i]; +#else /* LWIP_AUTOIP */ + ethhdr->dest.addr[i] = hdr->shwaddr.addr[i]; +#endif /* LWIP_AUTOIP */ + hdr->shwaddr.addr[i] = ethaddr->addr[i]; + ethhdr->src.addr[i] = ethaddr->addr[i]; + } + + /* hwtype, hwaddr_len, proto, protolen and the type in the ethernet header + are already correct, we tested that before */ + + /* return ARP reply */ + netif->linkoutput(netif, p); + /* we are not configured? */ + } else if (netif->ip_addr.addr == 0) { + /* { for_us == 0 and netif->ip_addr.addr == 0 } */ + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_arp_input: we are unconfigured, ARP request ignored.\n")); + /* request was not directed to us */ + } else { + /* { for_us == 0 and netif->ip_addr.addr != 0 } */ + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_arp_input: ARP request was not for us.\n")); + } + break; + case ARP_REPLY: + /* ARP reply. We already updated the ARP cache earlier. */ + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_arp_input: incoming ARP reply\n")); +#if (LWIP_DHCP && DHCP_DOES_ARP_CHECK) + /* DHCP wants to know about ARP replies from any host with an + * IP address also offered to us by the DHCP server. We do not + * want to take a duplicate IP address on a single network. + * @todo How should we handle redundant (fail-over) interfaces? */ + dhcp_arp_reply(netif, &sipaddr); +#endif + break; + default: + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_arp_input: ARP unknown opcode type %"S16_F"\n", htons(hdr->opcode))); + ETHARP_STATS_INC(etharp.err); + break; + } + /* free ARP packet */ + pbuf_free(p); +} + +/** + * Resolve and fill-in Ethernet address header for outgoing IP packet. + * + * For IP multicast and broadcast, corresponding Ethernet addresses + * are selected and the packet is transmitted on the link. + * + * For unicast addresses, the packet is submitted to etharp_query(). In + * case the IP address is outside the local network, the IP address of + * the gateway is used. + * + * @param netif The lwIP network interface which the IP packet will be sent on. + * @param q The pbuf(s) containing the IP packet to be sent. + * @param ipaddr The IP address of the packet destination. + * + * @return + * - ERR_RTE No route to destination (no gateway to external networks), + * or the return type of either etharp_query() or etharp_send_ip(). + */ +err_t +etharp_output(struct netif *netif, struct pbuf *q, struct ip_addr *ipaddr) +{ + struct eth_addr *dest, mcastaddr; + + /* make room for Ethernet header - should not fail */ + if (pbuf_header(q, sizeof(struct eth_hdr)) != 0) { + /* bail out */ + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, + ("etharp_output: could not allocate room for header.\n")); + LINK_STATS_INC(link.lenerr); + return ERR_BUF; + } + + /* assume unresolved Ethernet address */ + dest = NULL; + /* Determine on destination hardware address. Broadcasts and multicasts + * are special, other IP addresses are looked up in the ARP table. */ + + /* broadcast destination IP address? */ + if (ip_addr_isbroadcast(ipaddr, netif)) { + /* broadcast on Ethernet also */ + dest = (struct eth_addr *)ðbroadcast; + /* multicast destination IP address? */ + } else if (ip_addr_ismulticast(ipaddr)) { + /* Hash IP multicast address to MAC address.*/ + mcastaddr.addr[0] = 0x01; + mcastaddr.addr[1] = 0x00; + mcastaddr.addr[2] = 0x5e; + mcastaddr.addr[3] = ip4_addr2(ipaddr) & 0x7f; + mcastaddr.addr[4] = ip4_addr3(ipaddr); + mcastaddr.addr[5] = ip4_addr4(ipaddr); + /* destination Ethernet address is multicast */ + dest = &mcastaddr; + /* unicast destination IP address? */ + } else { + /* outside local network? */ + if (!ip_addr_netcmp(ipaddr, &(netif->ip_addr), &(netif->netmask))) { + /* interface has default gateway? */ + if (netif->gw.addr != 0) { + /* send to hardware address of default gateway IP address */ + ipaddr = &(netif->gw); + /* no default gateway available */ + } else { + /* no route to destination error (default gateway missing) */ + return ERR_RTE; + } + } + /* queue on destination Ethernet address belonging to ipaddr */ + return etharp_query(netif, ipaddr, q); + } + + /* continuation for multicast/broadcast destinations */ + /* obtain source Ethernet address of the given interface */ + /* send packet directly on the link */ + return etharp_send_ip(netif, q, (struct eth_addr*)(netif->hwaddr), dest); +} + +/** + * Send an ARP request for the given IP address and/or queue a packet. + * + * If the IP address was not yet in the cache, a pending ARP cache entry + * is added and an ARP request is sent for the given address. The packet + * is queued on this entry. + * + * If the IP address was already pending in the cache, a new ARP request + * is sent for the given address. The packet is queued on this entry. + * + * If the IP address was already stable in the cache, and a packet is + * given, it is directly sent and no ARP request is sent out. + * + * If the IP address was already stable in the cache, and no packet is + * given, an ARP request is sent out. + * + * @param netif The lwIP network interface on which ipaddr + * must be queried for. + * @param ipaddr The IP address to be resolved. + * @param q If non-NULL, a pbuf that must be delivered to the IP address. + * q is not freed by this function. + * + * @note q must only be ONE packet, not a packet queue! + * + * @return + * - ERR_BUF Could not make room for Ethernet header. + * - ERR_MEM Hardware address unknown, and no more ARP entries available + * to query for address or queue the packet. + * - ERR_MEM Could not queue packet due to memory shortage. + * - ERR_RTE No route to destination (no gateway to external networks). + * - ERR_ARG Non-unicast address given, those will not appear in ARP cache. + * + */ +err_t +etharp_query(struct netif *netif, struct ip_addr *ipaddr, struct pbuf *q) +{ + struct eth_addr * srcaddr = (struct eth_addr *)netif->hwaddr; + err_t result = ERR_MEM; + s8_t i; /* ARP entry index */ + + /* non-unicast address? */ + if (ip_addr_isbroadcast(ipaddr, netif) || + ip_addr_ismulticast(ipaddr) || + ip_addr_isany(ipaddr)) { + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_query: will not add non-unicast IP address to ARP cache\n")); + return ERR_ARG; + } + + /* find entry in ARP cache, ask to create entry if queueing packet */ +#if LWIP_NETIF_HWADDRHINT + i = find_entry(ipaddr, ETHARP_TRY_HARD, netif); +#else /* LWIP_NETIF_HWADDRHINT */ + i = find_entry(ipaddr, ETHARP_TRY_HARD); +#endif /* LWIP_NETIF_HWADDRHINT */ + + /* could not find or create entry? */ + if (i < 0) { + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_query: could not create ARP entry\n")); + if (q) { + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_query: packet dropped\n")); + ETHARP_STATS_INC(etharp.memerr); + } + return (err_t)i; + } + + /* mark a fresh entry as pending (we just sent a request) */ + if (arp_table[i].state == ETHARP_STATE_EMPTY) { + arp_table[i].state = ETHARP_STATE_PENDING; + } + + /* { i is either a STABLE or (new or existing) PENDING entry } */ + LWIP_ASSERT("arp_table[i].state == PENDING or STABLE", + ((arp_table[i].state == ETHARP_STATE_PENDING) || + (arp_table[i].state == ETHARP_STATE_STABLE))); + + /* do we have a pending entry? or an implicit query request? */ + if ((arp_table[i].state == ETHARP_STATE_PENDING) || (q == NULL)) { + /* try to resolve it; send out ARP request */ + result = etharp_request(netif, ipaddr); + if (result != ERR_OK) { + /* ARP request couldn't be sent */ + /* We don't re-send arp request in etharp_tmr, but we still queue packets, + since this failure could be temporary, and the next packet calling + etharp_query again could lead to sending the queued packets. */ + } + } + + /* packet given? */ + if (q != NULL) { + /* stable entry? */ + if (arp_table[i].state == ETHARP_STATE_STABLE) { + /* we have a valid IP->Ethernet address mapping */ + /* send the packet */ + result = etharp_send_ip(netif, q, srcaddr, &(arp_table[i].ethaddr)); + /* pending entry? (either just created or already pending */ + } else if (arp_table[i].state == ETHARP_STATE_PENDING) { +#if ARP_QUEUEING /* queue the given q packet */ + struct pbuf *p; + int copy_needed = 0; + /* IF q includes a PBUF_REF, PBUF_POOL or PBUF_RAM, we have no choice but + * to copy the whole queue into a new PBUF_RAM (see bug #11400) + * PBUF_ROMs can be left as they are, since ROM must not get changed. */ + p = q; + while (p) { + LWIP_ASSERT("no packet queues allowed!", (p->len != p->tot_len) || (p->next == 0)); + if(p->type != PBUF_ROM) { + copy_needed = 1; + break; + } + p = p->next; + } + if(copy_needed) { + /* copy the whole packet into new pbufs */ + p = pbuf_alloc(PBUF_RAW, p->tot_len, PBUF_RAM); + if(p != NULL) { + if (pbuf_copy(p, q) != ERR_OK) { + pbuf_free(p); + p = NULL; + } + } + } else { + /* referencing the old pbuf is enough */ + p = q; + pbuf_ref(p); + } + /* packet could be taken over? */ + if (p != NULL) { + /* queue packet ... */ + struct etharp_q_entry *new_entry; + /* allocate a new arp queue entry */ + new_entry = memp_malloc(MEMP_ARP_QUEUE); + if (new_entry != NULL) { + new_entry->next = 0; + new_entry->p = p; + if(arp_table[i].q != NULL) { + /* queue was already existent, append the new entry to the end */ + struct etharp_q_entry *r; + r = arp_table[i].q; + while (r->next != NULL) { + r = r->next; + } + r->next = new_entry; + } else { + /* queue did not exist, first item in queue */ + arp_table[i].q = new_entry; + } + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_query: queued packet %p on ARP entry %"S16_F"\n", (void *)q, (s16_t)i)); + result = ERR_OK; + } else { + /* the pool MEMP_ARP_QUEUE is empty */ + pbuf_free(p); + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_query: could not queue a copy of PBUF_REF packet %p (out of memory)\n", (void *)q)); + /* { result == ERR_MEM } through initialization */ + } + } else { + ETHARP_STATS_INC(etharp.memerr); + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_query: could not queue a copy of PBUF_REF packet %p (out of memory)\n", (void *)q)); + /* { result == ERR_MEM } through initialization */ + } +#else /* ARP_QUEUEING == 0 */ + /* q && state == PENDING && ARP_QUEUEING == 0 => result = ERR_MEM */ + /* { result == ERR_MEM } through initialization */ + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_query: Ethernet destination address unknown, queueing disabled, packet %p dropped\n", (void *)q)); +#endif + } + } + return result; +} + +/** + * Send a raw ARP packet (opcode and all addresses can be modified) + * + * @param netif the lwip network interface on which to send the ARP packet + * @param ethsrc_addr the source MAC address for the ethernet header + * @param ethdst_addr the destination MAC address for the ethernet header + * @param hwsrc_addr the source MAC address for the ARP protocol header + * @param ipsrc_addr the source IP address for the ARP protocol header + * @param hwdst_addr the destination MAC address for the ARP protocol header + * @param ipdst_addr the destination IP address for the ARP protocol header + * @param opcode the type of the ARP packet + * @return ERR_OK if the ARP packet has been sent + * ERR_MEM if the ARP packet couldn't be allocated + * any other err_t on failure + */ +#if !LWIP_AUTOIP +static +#endif /* LWIP_AUTOIP */ +err_t +etharp_raw(struct netif *netif, const struct eth_addr *ethsrc_addr, + const struct eth_addr *ethdst_addr, + const struct eth_addr *hwsrc_addr, const struct ip_addr *ipsrc_addr, + const struct eth_addr *hwdst_addr, const struct ip_addr *ipdst_addr, + const u16_t opcode) +{ + struct pbuf *p; + err_t result = ERR_OK; + u8_t k; /* ARP entry index */ + struct eth_hdr *ethhdr; + struct etharp_hdr *hdr; +#if LWIP_AUTOIP + const u8_t * ethdst_hwaddr; +#endif /* LWIP_AUTOIP */ + + /* allocate a pbuf for the outgoing ARP request packet */ + p = pbuf_alloc(PBUF_RAW, SIZEOF_ETHARP_PACKET, PBUF_RAM); + /* could allocate a pbuf for an ARP request? */ + if (p == NULL) { + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, + ("etharp_raw: could not allocate pbuf for ARP request.\n")); + ETHARP_STATS_INC(etharp.memerr); + return ERR_MEM; + } + LWIP_ASSERT("check that first pbuf can hold struct etharp_hdr", + (p->len >= SIZEOF_ETHARP_PACKET)); + + ethhdr = p->payload; + hdr = (struct etharp_hdr *)((u8_t*)ethhdr + SIZEOF_ETH_HDR); + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_raw: sending raw ARP packet.\n")); + hdr->opcode = htons(opcode); + + LWIP_ASSERT("netif->hwaddr_len must be the same as ETHARP_HWADDR_LEN for etharp!", + (netif->hwaddr_len == ETHARP_HWADDR_LEN)); + k = ETHARP_HWADDR_LEN; +#if LWIP_AUTOIP + /* If we are using Link-Local, ARP packets must be broadcast on the + * link layer. (See RFC3927 Section 2.5) */ + ethdst_hwaddr = ((netif->autoip != NULL) && (netif->autoip->state != AUTOIP_STATE_OFF)) ? (u8_t*)(ethbroadcast.addr) : ethdst_addr->addr; +#endif /* LWIP_AUTOIP */ + /* Write MAC-Addresses (combined loop for both headers) */ + while(k > 0) { + k--; + /* Write the ARP MAC-Addresses */ + hdr->shwaddr.addr[k] = hwsrc_addr->addr[k]; + hdr->dhwaddr.addr[k] = hwdst_addr->addr[k]; + /* Write the Ethernet MAC-Addresses */ +#if LWIP_AUTOIP + ethhdr->dest.addr[k] = ethdst_hwaddr[k]; +#else /* LWIP_AUTOIP */ + ethhdr->dest.addr[k] = ethdst_addr->addr[k]; +#endif /* LWIP_AUTOIP */ + ethhdr->src.addr[k] = ethsrc_addr->addr[k]; + } + hdr->sipaddr = *(struct ip_addr2 *)ipsrc_addr; + hdr->dipaddr = *(struct ip_addr2 *)ipdst_addr; + + hdr->hwtype = htons(HWTYPE_ETHERNET); + hdr->proto = htons(ETHTYPE_IP); + /* set hwlen and protolen together */ + hdr->_hwlen_protolen = htons((ETHARP_HWADDR_LEN << 8) | sizeof(struct ip_addr)); + + ethhdr->type = htons(ETHTYPE_ARP); + /* send ARP query */ + result = netif->linkoutput(netif, p); + ETHARP_STATS_INC(etharp.xmit); + /* free ARP query packet */ + pbuf_free(p); + p = NULL; + /* could not allocate pbuf for ARP request */ + + return result; +} + +/** + * Send an ARP request packet asking for ipaddr. + * + * @param netif the lwip network interface on which to send the request + * @param ipaddr the IP address for which to ask + * @return ERR_OK if the request has been sent + * ERR_MEM if the ARP packet couldn't be allocated + * any other err_t on failure + */ +err_t +etharp_request(struct netif *netif, struct ip_addr *ipaddr) +{ + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_request: sending ARP request.\n")); + return etharp_raw(netif, (struct eth_addr *)netif->hwaddr, ðbroadcast, + (struct eth_addr *)netif->hwaddr, &netif->ip_addr, ðzero, + ipaddr, ARP_REQUEST); +} + +/** + * Process received ethernet frames. Using this function instead of directly + * calling ip_input and passing ARP frames through etharp in ethernetif_input, + * the ARP cache is protected from concurrent access. + * + * @param p the recevied packet, p->payload pointing to the ethernet header + * @param netif the network interface on which the packet was received + */ +err_t +ethernet_input(struct pbuf *p, struct netif *netif) +{ + struct eth_hdr* ethhdr; + u16_t type; + + /* points to packet payload, which starts with an Ethernet header */ + ethhdr = p->payload; + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, + ("ethernet_input: dest:%02x:%02x:%02x:%02x:%02x:%02x, src:%02x:%02x:%02x:%02x:%02x:%02x, type:%2hx\n", + (unsigned)ethhdr->dest.addr[0], (unsigned)ethhdr->dest.addr[1], (unsigned)ethhdr->dest.addr[2], + (unsigned)ethhdr->dest.addr[3], (unsigned)ethhdr->dest.addr[4], (unsigned)ethhdr->dest.addr[5], + (unsigned)ethhdr->src.addr[0], (unsigned)ethhdr->src.addr[1], (unsigned)ethhdr->src.addr[2], + (unsigned)ethhdr->src.addr[3], (unsigned)ethhdr->src.addr[4], (unsigned)ethhdr->src.addr[5], + (unsigned)htons(ethhdr->type))); + + type = htons(ethhdr->type); +#if ETHARP_SUPPORT_VLAN + if (type == ETHTYPE_VLAN) { + struct eth_vlan_hdr *vlan = (struct eth_vlan_hdr*)(((char*)ethhdr) + SIZEOF_ETH_HDR); +#ifdef ETHARP_VLAN_CHECK /* if not, allow all VLANs */ + if (VLAN_ID(vlan) != ETHARP_VLAN_CHECK) { + /* silently ignore this packet: not for our VLAN */ + pbuf_free(p); + return ERR_OK; + } +#endif /* ETHARP_VLAN_CHECK */ + type = htons(vlan->tpid); + } +#endif /* ETHARP_SUPPORT_VLAN */ + + switch (type) { + /* IP packet? */ + case ETHTYPE_IP: +#if ETHARP_TRUST_IP_MAC + /* update ARP table */ + etharp_ip_input(netif, p); +#endif /* ETHARP_TRUST_IP_MAC */ + /* skip Ethernet header */ + if(pbuf_header(p, -(s16_t)SIZEOF_ETH_HDR)) { + LWIP_ASSERT("Can't move over header in packet", 0); + pbuf_free(p); + p = NULL; + } else { + /* pass to IP layer */ + ip_input(p, netif); + } + break; + + case ETHTYPE_ARP: + /* pass p to ARP module */ + etharp_arp_input(netif, (struct eth_addr*)(netif->hwaddr), p); + break; + +#if PPPOE_SUPPORT + case ETHTYPE_PPPOEDISC: /* PPP Over Ethernet Discovery Stage */ + pppoe_disc_input(netif, p); + break; + + case ETHTYPE_PPPOE: /* PPP Over Ethernet Session Stage */ + pppoe_data_input(netif, p); + break; +#endif /* PPPOE_SUPPORT */ + + default: + ETHARP_STATS_INC(etharp.proterr); + ETHARP_STATS_INC(etharp.drop); + pbuf_free(p); + p = NULL; + break; + } + + /* This means the pbuf is freed or consumed, + so the caller doesn't have to free it again */ + return ERR_OK; +} +#endif /* LWIP_ARP */ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/netif/loopif.c b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/netif/loopif.c new file mode 100644 index 000000000..b7d663294 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/netif/loopif.c @@ -0,0 +1,68 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/** + * @file + * Loop Interface + * + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#include "lwip/opt.h" + +#if LWIP_HAVE_LOOPIF + +#include "netif/loopif.h" +#include "lwip/snmp.h" + +/** + * Initialize a lwip network interface structure for a loopback interface + * + * @param netif the lwip network interface structure for this loopif + * @return ERR_OK if the loopif is initialized + * ERR_MEM if private data couldn't be allocated + */ +err_t +loopif_init(struct netif *netif) +{ + /* initialize the snmp variables and counters inside the struct netif + * ifSpeed: no assumption can be made! + */ + NETIF_INIT_SNMP(netif, snmp_ifType_softwareLoopback, 0); + + netif->name[0] = 'l'; + netif->name[1] = 'o'; + netif->output = netif_loop_output; + return ERR_OK; +} + +#endif /* LWIP_HAVE_LOOPIF */ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/include/arch/cc.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/include/arch/cc.h new file mode 100644 index 000000000..fc9c07df3 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/include/arch/cc.h @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2001-2003 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __ARCH_CC_H__ +#define __ARCH_CC_H__ + +/* Define platform endianness */ +#ifndef BYTE_ORDER +#define BYTE_ORDER BIG_ENDIAN +#endif /* BYTE_ORDER */ + +/* Define generic types used in lwIP */ +typedef unsigned char u8_t; +typedef signed char s8_t; +typedef unsigned short u16_t; +typedef signed short s16_t; +typedef unsigned long u32_t; +typedef signed long s32_t; + +typedef u32_t mem_ptr_t; + +/* Define (sn)printf formatters for these lwIP types */ +#define U16_F "u" +#define S16_F "d" +#define X16_F "x" +#define U32_F "u" +#define S32_F "d" +#define X32_F "x" + +/* Compiler hints for packing structures */ +#define PACK_STRUCT_FIELD(x) x +#define PACK_STRUCT_STRUCT __attribute__((packed)) +#define PACK_STRUCT_BEGIN +#define PACK_STRUCT_END + +/* Plaform specific diagnostic output */ +#ifdef CONFIG_OWL +# include +# define LWIP_PLATFORM_DIAG(x) owl_printf x +# define LWIP_PLATFORM_ASSERT(x) owl_assert(x) +#else +# include +# define LWIP_PLATFORM_DIAG(x) do { printk x; } while(0) +# define LWIP_PLATFORM_ASSERT(x) do { \ + printk("Assertion \"%s\" failed at line " \ + "%d in %s\n", \ + x, __LINE__, __FILE__); while(1); \ + } while(0) +#endif + +#endif /* __ARCH_CC_H__ */ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/include/arch/perf.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/include/arch/perf.h new file mode 100644 index 000000000..49917871e --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/include/arch/perf.h @@ -0,0 +1,7 @@ +#ifndef __PERF_H__ +#define __PERF_H__ + +#define PERF_START /* null definition */ +#define PERF_STOP(x) /* null definition */ + +#endif diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/include/lwipopts.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/include/lwipopts.h new file mode 100644 index 000000000..ae4df230f --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/include/lwipopts.h @@ -0,0 +1,426 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/** + * @file + * + * lwIP Options Configuration + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIPOPTS_H__ +#define __LWIPOPTS_H__ + +#include "wl_api.h" + +/* + ----------------------------------------------- + ---------- Platform specific locking ---------- + ----------------------------------------------- +*/ + +/** + * NO_SYS==1: Provides VERY minimal functionality. Otherwise, + * use lwIP facilities. + */ +#define NO_SYS 1 + + +/* + ------------------------------------ + ---------- Memory options ---------- + ------------------------------------ +*/ +/** + * MEM_ALIGNMENT: should be set to the alignment of the CPU + * 4 byte alignment -> #define MEM_ALIGNMENT 4 + * 2 byte alignment -> #define MEM_ALIGNMENT 2 + */ +#define MEM_ALIGNMENT 4 + +/** + * MEM_SIZE: the size of the heap memory. If the application will send + * a lot of data that needs to be copied, this should be set high. + */ +#define MEM_SIZE 16000 + + +/* + ------------------------------------------------ + ---------- Internal Memory Pool Sizes ---------- + ------------------------------------------------ +*/ +/** + * MEMP_NUM_PBUF: the number of memp struct pbufs (used for PBUF_ROM and PBUF_REF). + * If the application sends a lot of data out of ROM (or other static memory), + * this should be set high. + */ +#define MEMP_NUM_PBUF 30 + +/** + * MEMP_NUM_RAW_PCB: Number of raw connection PCBs + * (requires the LWIP_RAW option) + */ +#define MEMP_NUM_RAW_PCB 4 + +/** + * MEMP_NUM_UDP_PCB: the number of UDP protocol control blocks. One + * per active UDP "connection". + * (requires the LWIP_UDP option) + */ +#define MEMP_NUM_UDP_PCB 4 + +/** + * MEMP_NUM_TCP_PCB: the number of simulatenously active TCP connections. + * (requires the LWIP_TCP option) + */ +#define MEMP_NUM_TCP_PCB 2 + +/** + * MEMP_NUM_TCP_PCB_LISTEN: the number of listening TCP connections. + * (requires the LWIP_TCP option) + */ +#define MEMP_NUM_TCP_PCB_LISTEN 2 + +/** + * MEMP_NUM_TCP_SEG: the number of simultaneously queued TCP segments. + * (requires the LWIP_TCP option) + */ +#define MEMP_NUM_TCP_SEG 32 + +/** + * MEMP_NUM_ARP_QUEUE: the number of simulateously queued outgoing + * packets (pbufs) that are waiting for an ARP request (to resolve + * their destination address) to finish. + * (requires the ARP_QUEUEING option) + */ +#define MEMP_NUM_ARP_QUEUE 2 + +/** + * MEMP_NUM_SYS_TIMEOUT: the number of simulateously active timeouts. + * (requires NO_SYS==0) + */ +#define MEMP_NUM_SYS_TIMEOUT 0 + +/** + * MEMP_NUM_NETBUF: the number of struct netbufs. + * (only needed if you use the sequential API, like api_lib.c) + */ +#define MEMP_NUM_NETBUF 0 + +/** + * MEMP_NUM_NETCONN: the number of struct netconns. + * (only needed if you use the sequential API, like api_lib.c) + */ +#define MEMP_NUM_NETCONN 0 + +/** + * MEMP_NUM_TCPIP_MSG_API: the number of struct tcpip_msg, which are used + * for callback/timeout API communication. + * (only needed if you use tcpip.c) + */ +#define MEMP_NUM_TCPIP_MSG_API 0 + +/** + * MEMP_NUM_TCPIP_MSG_INPKT: the number of struct tcpip_msg, which are used + * for incoming packets. + * (only needed if you use tcpip.c) + */ +#define MEMP_NUM_TCPIP_MSG_INPKT 0 + +/** + * PBUF_POOL_SIZE: the number of buffers in the pbuf pool. + */ +#define PBUF_POOL_SIZE 32 + +/* + --------------------------------- + ---------- ARP options ---------- + --------------------------------- +*/ +/** + * LWIP_ARP==1: Enable ARP functionality. + */ +#define LWIP_ARP 1 + +/* + -------------------------------- + ---------- IP options ---------- + -------------------------------- +*/ +/** + * IP_FORWARD==1: Enables the ability to forward IP packets across network + * interfaces. If you are going to run lwIP on a device with only one network + * interface, define this to 0. + */ +#define IP_FORWARD 0 + +/** + * IP_OPTIONS: Defines the behavior for IP options. + * IP_OPTIONS==0_ALLOWED: All packets with IP options are dropped. + * IP_OPTIONS==1_ALLOWED: IP options are allowed (but not parsed). + */ +#define IP_OPTIONS_ALLOWED 1 + +/** + * IP_REASSEMBLY==1: Reassemble incoming fragmented IP packets. Note that + * this option does not affect outgoing packet sizes, which can be controlled + * via IP_FRAG. + */ +#define IP_REASSEMBLY 1 + +/** + * IP_FRAG==1: Fragment outgoing IP packets if their size exceeds MTU. Note + * that this option does not affect incoming packet sizes, which can be + * controlled via IP_REASSEMBLY. + */ +#define IP_FRAG 1 + +/** + * IP_REASS_MAXAGE: Maximum time (in multiples of IP_TMR_INTERVAL - so seconds, normally) + * a fragmented IP packet waits for all fragments to arrive. If not all fragments arrived + * in this time, the whole packet is discarded. + */ +#define IP_REASS_MAXAGE 3 + +/** + * IP_REASS_MAX_PBUFS: Total maximum amount of pbufs waiting to be reassembled. + * Since the received pbufs are enqueued, be sure to configure + * PBUF_POOL_SIZE > IP_REASS_MAX_PBUFS so that the stack is still able to receive + * packets even if the maximum amount of fragments is enqueued for reassembly! + */ +#define IP_REASS_MAX_PBUFS 10 + +/** + * IP_FRAG_USES_STATIC_BUF==1: Use a static MTU-sized buffer for IP + * fragmentation. Otherwise pbufs are allocated and reference the original + * packet data to be fragmented. + */ +#define IP_FRAG_USES_STATIC_BUF 0 + +/** + * IP_DEFAULT_TTL: Default value for Time-To-Live used by transport layers. + */ +#define IP_DEFAULT_TTL 255 + +/* + ---------------------------------- + ---------- ICMP options ---------- + ---------------------------------- +*/ +/** + * LWIP_ICMP==1: Enable ICMP module inside the IP stack. + * Be careful, disable that make your product non-compliant to RFC1122 + */ +#define LWIP_ICMP 1 + +/** + * ICMP_TTL: Default value for Time-To-Live used by ICMP packets. + */ +#define ICMP_TTL (IP_DEFAULT_TTL) + +/* + --------------------------------- + ---------- RAW options ---------- + --------------------------------- +*/ +/** + * LWIP_RAW==1: Enable application layer to hook into the IP layer itself. + */ +#define LWIP_RAW 1 + +/* + ---------------------------------- + ---------- DHCP options ---------- + ---------------------------------- +*/ +/** + * LWIP_DHCP==1: Enable DHCP module. + */ +#define LWIP_DHCP 1 + +/* + ------------------------------------ + ---------- AUTOIP options ---------- + ------------------------------------ +*/ +/** + * LWIP_AUTOIP==1: Enable AUTOIP module. + */ +#define LWIP_AUTOIP 0 + +/* + ---------------------------------- + ---------- SNMP options ---------- + ---------------------------------- +*/ +/** + * LWIP_SNMP==1: Turn on SNMP module. UDP must be available for SNMP + * transport. + */ +#define LWIP_SNMP 0 +#define SNMP_PRIVATE_MIB 0 + +/* + ---------------------------------- + ---------- IGMP options ---------- + ---------------------------------- +*/ +/** + * LWIP_IGMP==1: Turn on IGMP module. + */ +#define LWIP_IGMP 1 + +/* + ---------------------------------- + ---------- DNS options ----------- + ---------------------------------- +*/ +/** + * LWIP_DNS==1: Turn on DNS module. UDP must be available for DNS + * transport. + */ +#define LWIP_DNS 1 + +/* + --------------------------------- + ---------- UDP options ---------- + --------------------------------- +*/ +/** + * LWIP_UDP==1: Turn on UDP. + */ +#define LWIP_UDP 1 + +/** + * LWIP_UDPLITE==1: Turn on UDP-Lite. (Requires LWIP_UDP) + */ +#define LWIP_UDPLITE 0 + +/** + * UDP_TTL: Default Time-To-Live value. + */ +#define UDP_TTL (IP_DEFAULT_TTL) + +/* + --------------------------------- + ---------- TCP options ---------- + --------------------------------- +*/ +/** + * LWIP_TCP==1: Turn on TCP. + */ +#define LWIP_TCP 1 + +/* + ---------------------------------- + ---------- Pbuf options ---------- + ---------------------------------- +*/ +/** + * PBUF_LINK_HLEN: the number of bytes that should be allocated for a + * link level header. The default is 14, the standard value for + * Ethernet. + */ +#define PBUF_LINK_HLEN (14 + ETH_PAD_SIZE) + +/* + ------------------------------------ + ---------- LOOPIF options ---------- + ------------------------------------ +*/ +/** + * LWIP_HAVE_LOOPIF==1: Support loop interface (127.0.0.1) and loopif.c + */ +#define LWIP_HAVE_LOOPIF 1 +#define LWIP_LOOPIF_MULTITHREADING 0 + +/* + ---------------------------------------------- + ---------- Sequential layer options ---------- + ---------------------------------------------- +*/ + +/** + * LWIP_NETCONN==1: Enable Netconn API (require to use api_lib.c) + */ +#define LWIP_NETCONN 0 + +/* + ------------------------------------ + ---------- Socket options ---------- + ------------------------------------ +*/ +/** + * LWIP_SOCKET==1: Enable Socket API (require to use sockets.c) + */ +#define LWIP_SOCKET 0 + +/* + ---------------------------------------- + ---------- Statistics options ---------- + ---------------------------------------- +*/ +/** + * LWIP_STATS==1: Enable statistics collection in lwip_stats. + */ +#define LWIP_STATS 1 +#define LINK_STATS 1 + +/* Misc */ +#define LWIP_NETIF_LINK_CALLBACK 1 +#define LWIP_NETIF_STATUS_CALLBACK 1 +#define LWIP_TIMEVAL_PRIVATE 0 + +#undef DHCP_DOES_ARP_CHECK + +#if 0 +#define LWIP_DEBUG 1 +//#define NETIF_DEBUG LWIP_DBG_ON +#define DHCP_DEBUG LWIP_DBG_ON +//#define ICMP_DEBUG LWIP_DBG_ON +//#define TCP_DEBUG LWIP_DBG_ON +//#define TCP_RTO_DEBUG LWIP_DBG_ON +//#define IP_DEBUG LWIP_DBG_ON +//#define TCP_CWND_DEBUG LWIP_DBG_ON +//#define ETHARP_DEBUG LWIP_DBG_ON +//#define PBUF_DEBUG LWIP_DBG_ON +#define TCP_INPUT_DEBUG LWIP_DBG_ON +#define TCP_OUTPUT_DEBUG LWIP_DBG_ON +#endif + +#define ETH_PAD_SIZE WL_HEADER_SIZE /* size of wifiengine header */ +#define MEM_LIBC_MALLOC 1 + +#define TCP_MSS 512 +#define TCP_SND_BUF 4096 +#endif /* __LWIPOPTS_H__ */ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/include/netif/wlif.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/include/netif/wlif.h new file mode 100644 index 000000000..6354e1c91 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/include/netif/wlif.h @@ -0,0 +1,10 @@ +#ifndef __NETIF_NRWLANIF_H__ +#define __NETIF_NRWLANIF_H__ + +#include "lwip/netif.h" +#include "lwip/err.h" + +err_t wlif_init(struct netif *netif); +void wlif_poll(struct netif *netif); + +#endif diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/netif/wlif.c b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/netif/wlif.c new file mode 100644 index 000000000..55d5b6abd --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/netif/wlif.c @@ -0,0 +1,386 @@ +#include "lwip/opt.h" +#include "lwip/def.h" +#include "lwip/mem.h" +#include "lwip/pbuf.h" +#include "lwip/stats.h" +#include "lwip/sys.h" +#include "netif/etharp.h" +#include "netif/wlif.h" +#include +#include + +#define IFNAME0 'w' +#define IFNAME1 'l' + +/* the queue size will affect the tx performance when using power save. + * A small queue will quickly become filled up if we have to wake the device + * before the actual transmission can occur. When the queue is filled up, the + * packets will be discarded and retransmission will be handled by the upper + * layers. In case of TCP, the retransmission time might be quite long. + * + * If the packets can be put in the pqueue instead, all the packets + * (if possible) will be transmitted when the device wakes up, so we don't have + * to wait for retransmission from upper layers. + */ +#define PQUEUE_SIZE 8 + +struct wlif_t { + volatile uint8_t rx_pending; + + struct { + struct pbuf* buf[PQUEUE_SIZE]; + uint8_t first; + uint8_t last; + } pqueue; +}; + +#define PQUEUE_EMPTY(q) (q.last == q.first) +#define PQUEUE_FULL(q) ((q.last + 1) % PQUEUE_SIZE == q.first) +#define PQUEUE_FIRST(q) (q.buf[q.first]) +#define PQUEUE_DEQUEUE(q) \ + ({ \ + struct pbuf* __p = PQUEUE_FIRST(q); \ + q.first = (q.first + 1) % PQUEUE_SIZE; \ + __p; \ + }) +#define PQUEUE_ENQUEUE(q, p) \ + ({ \ + q.buf[q.last] = p; \ + q.last = (q.last + 1) % PQUEUE_SIZE; \ + }) + + +static err_t process_pqueue(struct netif* netif) +{ + struct pbuf *p; + struct pbuf *q; + int status; + struct wlif_t *priv = (struct wlif_t*) netif->state; + + /* queue empty? finished */ + if (PQUEUE_EMPTY(priv->pqueue)) + return ERR_OK; + + /* get first packet in queue */ + p = PQUEUE_FIRST(priv->pqueue); + + status = wl_process_tx( + p->payload + WL_HEADER_SIZE, /* ptr to eth hdr */ + p->len - WL_HEADER_SIZE, /* input buffer len */ + p->tot_len - WL_HEADER_SIZE, /* pkt len */ + p->payload, /* ptr to WE hdr */ + 0, /* prio */ + p); /* pkt handle */ + + /* if we fail due to power save mode, leave packet in queue and + * try again when target is awake again (upon WL_RX_EVENT_WAKEUP). + */ + if (status == WL_RESOURCES) + return ERR_IF; + + /* if we fail for another reason, just discard the packet */ + if (status != WL_SUCCESS) { + PQUEUE_DEQUEUE(priv->pqueue); + pbuf_free(p); + return ERR_IF; + } + + /* Send the data from the pbuf to the interface, one pbuf at a + * time. The size of the data in each pbuf is kept in the ->len + * variable. + */ + for (q = p; q != NULL; q = q->next) + wl_tx(q->payload, q->len); + + /* remove packet from queue and dec refcnt */ + PQUEUE_DEQUEUE(priv->pqueue); + pbuf_free(p); + + LINK_STATS_INC(link.xmit); + + /* tell caller to process next packet */ + return ERR_INPROGRESS; +} + + +/** + * Called in interrupt context when we can read more data from the mac. + * + */ +static void +rx_isr(void* ctx) +{ + struct netif *netif = ctx; + struct wlif_t *priv = (struct wlif_t*) netif->state; + priv->rx_pending = 1; +} + + +/** + * In this function, the hardware should be initialized. + * Called from wlif_init(). + * + * @param netif the already initialized lwip network interface structure + * for this ethernetif + */ +static err_t +low_level_init(struct netif *netif) +{ + /* device capabilities */ + netif->flags = NETIF_FLAG_BROADCAST | NETIF_FLAG_ETHARP | + NETIF_FLAG_IGMP; + + /* NETIF_FLAG_LINK_UP must be set only when we have an wlan assoc */ + + /* set MAC hardware address length */ + netif->hwaddr_len = ETHARP_HWADDR_LEN; + + if (wl_get_mac_addr(netif->hwaddr) != WL_SUCCESS) + return ERR_IF; + + /* maximum transfer unit */ + netif->mtu = 1500; + + return ERR_OK; +} + + +/** + * This function should do the actual transmission of the packet. The packet is + * contained in the pbuf that is passed to the function. This pbuf + * might be chained. + * + * @param netif the lwip network interface structure for this ethernetif + * @param p the MAC packet to send (e.g. IP packet including MAC addresses and + * type) + * @return ERR_OK if the packet could be sent + * an err_t value if the packet couldn't be sent + * + * @note Returning ERR_MEM here if a DMA queue of your MAC is full can lead to + * strange results. You might consider waiting for space in the DMA queue + * to become availale since the stack doesn't retry to send a packet + * dropped because of memory failure (except for the TCP timers). + */ +static err_t +low_level_output(struct netif *netif, struct pbuf *p) +{ + struct wlif_t* priv = (struct wlif_t*) netif->state; + + /* must have a linear buffer containing up to and including + * the ethernet header + */ + if (p->len < sizeof(struct eth_hdr)) + return ERR_IF; + + /* queue full? drop packet */ + if (PQUEUE_FULL(priv->pqueue)) + return ERR_INPROGRESS; /* no one seems to check this anyway */ + + /* queue packet */ + PQUEUE_ENQUEUE(priv->pqueue, p); + pbuf_ref(p); + while (process_pqueue(netif) == ERR_INPROGRESS); + return ERR_OK; /* no one seems to check this anyway */ +} + +/** + * Should allocate a pbuf and transfer the bytes of the incoming + * packet from the interface into the pbuf. + * + * @param netif the lwip network interface structure for this ethernetif + * @return a pbuf filled with the received packet (including MAC header) + * NULL on memory error + */ +static struct pbuf * +low_level_input(struct netif *netif) +{ + struct pbuf *p; + struct wlif_t *priv = (struct wlif_t*) netif->state; + + char *stripped_pkt; + size_t stripped_pkt_len; + u16_t vlan; + u8_t rx_hdr_size; + int status; + u16_t len; + + /* maximum packet length from wl_rx() */ + len = WL_MAX_PKT_LEN; + + /* We allocate a continous pbuf */ + p = pbuf_alloc(PBUF_RAW, len, PBUF_RAM); + if (p == NULL) { + LWIP_DEBUGF(NETIF_DEBUG, ("low_level_input: fail to alloc " + "pbuf of len:%"S32_F"\n", len)); + return NULL; + } + + /* Read the entire msg */ + priv->rx_pending = 0; + wl_rx(p->payload, &len); + if (len == 0) { + LWIP_DEBUGF(NETIF_DEBUG, ("low_level_input: len was 0")); + return NULL; + } + + status = wl_process_rx( + p->payload, /* input buf */ + len, /* input buf length */ + &stripped_pkt, + &stripped_pkt_len, + &vlan); + + if (status == WL_ABSORBED) { + LWIP_DEBUGF(NETIF_DEBUG, ("low_level_input: absorbed")); + pbuf_free(p); + return NULL; + } + + /* Data packet, remove padding */ + rx_hdr_size = stripped_pkt - (char*) p->payload; + pbuf_realloc(p, stripped_pkt_len + rx_hdr_size); + + LINK_STATS_INC(link.recv); + return p; +} + + +/** + * This function will be called by wlif_poll() when a packet has been received + * from the mac. Then the type of the received packet is determined and + * the appropriate input function is called. + * + * @param netif the lwip network interface structure for this ethernetif + */ +static void +wlif_input(struct netif *netif) +{ + struct eth_hdr *ethhdr; + struct pbuf *p; + + /* move received packet into a new pbuf */ + p = low_level_input(netif); + + /* no packet could be read, silently ignore this */ + if (p == NULL) + return; + + /* points to packet payload, which starts with an Ethernet header */ + ethhdr = p->payload; + switch (htons(ethhdr->type)) { + /* IP or ARP packet? */ + case ETHTYPE_IP: + case ETHTYPE_ARP: +#if PPPOE_SUPPORT + /* PPPoE packet? */ + case ETHTYPE_PPPOEDISC: + case ETHTYPE_PPPOE: +#endif /* PPPOE_SUPPORT */ + /* full packet send to tcpip_thread to process */ + if (netif->input(p, netif) != ERR_OK) { + LWIP_DEBUGF(NETIF_DEBUG, + ("wlif_input: IP input error\n")); + pbuf_free(p); + p = NULL; + } + break; + + default: + pbuf_free(p); + p = NULL; + break; + } +} + +static ssize_t pkt_read_cb(char *dst, + void *src_handle, + size_t read_len, + int offset) { + ssize_t rc; + + rc = pbuf_copy_partial((struct pbuf *)src_handle, + dst, + read_len, + offset + WL_HEADER_SIZE); + if ( 0 == rc ) { + return -1; + } + + return rc; +} + +/** + * Should be called at the beginning of the program to set up the + * network interface. It calls the function low_level_init() to do the + * actual setup of the hardware. + * + * This function should be passed as a parameter to netif_add(). + * + * @param netif the lwip network interface structure for this ethernetif + * @return ERR_OK if the loopif is initialized + * ERR_MEM if private data couldn't be allocated + * any other err_t on error + */ +err_t +wlif_init(struct netif *netif) +{ + static struct wlif_t wlif; + + LWIP_ASSERT("netif != NULL", (netif != NULL)); + +#if LWIP_NETIF_HOSTNAME + /* Initialize interface hostname */ + if ( NULL == netif->hostname ) { + netif->hostname = "wlif"; + } +#endif /* LWIP_NETIF_HOSTNAME */ + + netif->state = &wlif; + netif->name[0] = IFNAME0; + netif->name[1] = IFNAME1; + + /* We directly use etharp_output() here to save a function call. + * You can instead declare your own function an call etharp_output() + * from it if you have to do some checks before sending (e.g. if link + * is available...) */ + netif->output = etharp_output; + netif->linkoutput = low_level_output; + + wl_register_rx_isr(rx_isr, netif); + wl_register_pkt_read_cb(pkt_read_cb); + + /* initialize the hardware */ + return low_level_init(netif); +} + + +/** + * + */ +void +wlif_poll(struct netif* netif) +{ + struct wlif_t* priv = NULL; + + /* wl api forward progress */ + wl_poll(); + + if (netif) + priv = (struct wlif_t*) netif->state; + + /* wlif_init() not called yet? */ + if (priv == NULL) + return; + + /* no packets pending? */ + if (!priv->rx_pending) + return; + + /* read the pending packet */ + wlif_input(netif); + + /* send any packets that was queued due to filled up target queue + * or power save mode. + */ + process_pqueue(netif); +} diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/readme.txt b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/readme.txt new file mode 100644 index 000000000..c95f30e72 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/readme.txt @@ -0,0 +1 @@ +This directory is specific to the WIFI H&D SPB104 components (\COMPONENTS\WIFI\HD_SPB104). diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS/ctrl_access.c b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS/ctrl_access.c new file mode 100644 index 000000000..09790c259 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS/ctrl_access.c @@ -0,0 +1,571 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Abstraction layer for memory interfaces. + * + * This module contains the interfaces: + * - MEM <-> USB; + * - MEM <-> RAM; + * - MEM <-> MEM. + * + * This module may be configured and expanded to support the following features: + * - write-protected globals; + * - password-protected data; + * - specific features; + * - etc. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +//_____ I N C L U D E S ____________________________________________________ + +#include "compiler.h" +#include "preprocessor.h" +#ifdef FREERTOS_USED +#include "FreeRTOS.h" +#include "semphr.h" +#endif +#include "ctrl_access.h" + + +//_____ D E F I N I T I O N S ______________________________________________ + +#ifdef FREERTOS_USED + +/*! \name LUN Access Protection Macros + */ +//! @{ + +/*! \brief Locks accesses to LUNs. + * + * \return \c TRUE if the access was successfully locked, else \c FALSE. + */ +#define Ctrl_access_lock() ctrl_access_lock() + +/*! \brief Unlocks accesses to LUNs. + */ +#define Ctrl_access_unlock() xSemaphoreGive(ctrl_access_semphr) + +//! @} + +//! Handle to the semaphore protecting accesses to LUNs. +static xSemaphoreHandle ctrl_access_semphr = NULL; + +#else + +/*! \name LUN Access Protection Macros + */ +//! @{ + +/*! \brief Locks accesses to LUNs. + * + * \return \c TRUE if the access was successfully locked, else \c FALSE. + */ +#define Ctrl_access_lock() TRUE + +/*! \brief Unlocks accesses to LUNs. + */ +#define Ctrl_access_unlock() + +//! @} + +#endif // FREERTOS_USED + + +#if MAX_LUN + +/*! \brief Initializes an entry of the LUN descriptor table. + * + * \param lun Logical Unit Number. + * + * \return LUN descriptor table entry initializer. + */ +#if ACCESS_USB == ENABLED && ACCESS_MEM_TO_RAM == ENABLED +#define Lun_desc_entry(lun) \ + {\ + TPASTE3(Lun_, lun, _test_unit_ready),\ + TPASTE3(Lun_, lun, _read_capacity),\ + TPASTE3(Lun_, lun, _wr_protect),\ + TPASTE3(Lun_, lun, _removal),\ + TPASTE3(Lun_, lun, _usb_read_10),\ + TPASTE3(Lun_, lun, _usb_write_10),\ + TPASTE3(Lun_, lun, _mem_2_ram),\ + TPASTE3(Lun_, lun, _ram_2_mem),\ + TPASTE3(LUN_, lun, _NAME)\ + } +#elif ACCESS_USB == ENABLED +#define Lun_desc_entry(lun) \ + {\ + TPASTE3(Lun_, lun, _test_unit_ready),\ + TPASTE3(Lun_, lun, _read_capacity),\ + TPASTE3(Lun_, lun, _wr_protect),\ + TPASTE3(Lun_, lun, _removal),\ + TPASTE3(Lun_, lun, _usb_read_10),\ + TPASTE3(Lun_, lun, _usb_write_10),\ + TPASTE3(LUN_, lun, _NAME)\ + } +#elif ACCESS_MEM_TO_RAM == ENABLED +#define Lun_desc_entry(lun) \ + {\ + TPASTE3(Lun_, lun, _test_unit_ready),\ + TPASTE3(Lun_, lun, _read_capacity),\ + TPASTE3(Lun_, lun, _wr_protect),\ + TPASTE3(Lun_, lun, _removal),\ + TPASTE3(Lun_, lun, _mem_2_ram),\ + TPASTE3(Lun_, lun, _ram_2_mem),\ + TPASTE3(LUN_, lun, _NAME)\ + } +#else +#define Lun_desc_entry(lun) \ + {\ + TPASTE3(Lun_, lun, _test_unit_ready),\ + TPASTE3(Lun_, lun, _read_capacity),\ + TPASTE3(Lun_, lun, _wr_protect),\ + TPASTE3(Lun_, lun, _removal),\ + TPASTE3(LUN_, lun, _NAME)\ + } +#endif + +//! LUN descriptor table. +static const struct +{ + Ctrl_status (*test_unit_ready)(void); + Ctrl_status (*read_capacity)(U32 *); + Bool (*wr_protect)(void); + Bool (*removal)(void); +#if ACCESS_USB == ENABLED + Ctrl_status (*usb_read_10)(U32, U16); + Ctrl_status (*usb_write_10)(U32, U16); +#endif +#if ACCESS_MEM_TO_RAM == ENABLED + Ctrl_status (*mem_2_ram)(U32, void *); + Ctrl_status (*ram_2_mem)(U32, const void *); +#endif + const char *name; +} lun_desc[MAX_LUN] = +{ +#if LUN_0 == ENABLE + Lun_desc_entry(0), +#endif +#if LUN_1 == ENABLE + Lun_desc_entry(1), +#endif +#if LUN_2 == ENABLE + Lun_desc_entry(2), +#endif +#if LUN_3 == ENABLE + Lun_desc_entry(3), +#endif +#if LUN_4 == ENABLE + Lun_desc_entry(4), +#endif +#if LUN_5 == ENABLE + Lun_desc_entry(5), +#endif +#if LUN_6 == ENABLE + Lun_desc_entry(6), +#endif +#if LUN_7 == ENABLE + Lun_desc_entry(7) +#endif +}; + +#endif + + +#if GLOBAL_WR_PROTECT == ENABLED +Bool g_wr_protect; +#endif + + +/*! \name Control Interface + */ +//! @{ + + +#ifdef FREERTOS_USED + +Bool ctrl_access_init(void) +{ + // If the handle to the protecting semaphore is not valid, + if (!ctrl_access_semphr) + { + // try to create the semaphore. + vSemaphoreCreateBinary(ctrl_access_semphr); + + // If the semaphore could not be created, there is no backup solution. + if (!ctrl_access_semphr) return FALSE; + } + + return TRUE; +} + + +/*! \brief Locks accesses to LUNs. + * + * \return \c TRUE if the access was successfully locked, else \c FALSE. + */ +static Bool ctrl_access_lock(void) +{ + // If the semaphore could not be created, there is no backup solution. + if (!ctrl_access_semphr) return FALSE; + + // Wait for the semaphore. + while (!xSemaphoreTake(ctrl_access_semphr, portMAX_DELAY)); + + return TRUE; +} + +#endif // FREERTOS_USED + + +U8 get_nb_lun(void) +{ +#if MEM_USB == ENABLE + U8 nb_lun; + + if (!Ctrl_access_lock()) return MAX_LUN; + + nb_lun = MAX_LUN + host_get_lun(); + + Ctrl_access_unlock(); + + return nb_lun; +#else + return MAX_LUN; +#endif +} + + +U8 get_cur_lun(void) +{ + return LUN_ID_0; +} + + +Ctrl_status mem_test_unit_ready(U8 lun) +{ + Ctrl_status status; + + if (!Ctrl_access_lock()) return CTRL_FAIL; + + status = +#if MAX_LUN + (lun < MAX_LUN) ? lun_desc[lun].test_unit_ready() : +#endif +#if LUN_USB == ENABLE + Lun_usb_test_unit_ready(lun - LUN_ID_USB); +#else + CTRL_FAIL; +#endif + + Ctrl_access_unlock(); + + return status; +} + + +Ctrl_status mem_read_capacity(U8 lun, U32 *u32_nb_sector) +{ + Ctrl_status status; + + if (!Ctrl_access_lock()) return CTRL_FAIL; + + status = +#if MAX_LUN + (lun < MAX_LUN) ? lun_desc[lun].read_capacity(u32_nb_sector) : +#endif +#if LUN_USB == ENABLE + Lun_usb_read_capacity(lun - LUN_ID_USB, u32_nb_sector); +#else + CTRL_FAIL; +#endif + + Ctrl_access_unlock(); + + return status; +} + + +U8 mem_sector_size(U8 lun) +{ + U8 sector_size; + + if (!Ctrl_access_lock()) return 0; + + sector_size = +#if MAX_LUN + (lun < MAX_LUN) ? 1 : +#endif +#if LUN_USB == ENABLE + Lun_usb_read_sector_size(lun - LUN_ID_USB); +#else + 0; +#endif + + Ctrl_access_unlock(); + + return sector_size; +} + + +Bool mem_wr_protect(U8 lun) +{ + Bool wr_protect; + + if (!Ctrl_access_lock()) return TRUE; + + wr_protect = +#if MAX_LUN + (lun < MAX_LUN) ? lun_desc[lun].wr_protect() : +#endif +#if LUN_USB == ENABLE + Lun_usb_wr_protect(lun - LUN_ID_USB); +#else + TRUE; +#endif + + Ctrl_access_unlock(); + + return wr_protect; +} + + +Bool mem_removal(U8 lun) +{ + Bool removal; + + if (!Ctrl_access_lock()) return TRUE; + + removal = +#if MAX_LUN + (lun < MAX_LUN) ? lun_desc[lun].removal() : +#endif +#if LUN_USB == ENABLE + Lun_usb_removal(); +#else + TRUE; +#endif + + Ctrl_access_unlock(); + + return removal; +} + + +const char *mem_name(U8 lun) +{ + return +#if MAX_LUN + (lun < MAX_LUN) ? lun_desc[lun].name : +#endif +#if LUN_USB == ENABLE + LUN_USB_NAME; +#else + NULL; +#endif +} + + +//! @} + + +#if ACCESS_USB == ENABLED + +/*! \name MEM <-> USB Interface + */ +//! @{ + + +Ctrl_status memory_2_usb(U8 lun, U32 addr, U16 nb_sector) +{ + Ctrl_status status; + + if (!Ctrl_access_lock()) return CTRL_FAIL; + + memory_start_read_action(nb_sector); + status = +#if MAX_LUN + (lun < MAX_LUN) ? lun_desc[lun].usb_read_10(addr, nb_sector) : +#endif + CTRL_FAIL; + memory_stop_read_action(); + + Ctrl_access_unlock(); + + return status; +} + + +Ctrl_status usb_2_memory(U8 lun, U32 addr, U16 nb_sector) +{ + Ctrl_status status; + + if (!Ctrl_access_lock()) return CTRL_FAIL; + + memory_start_write_action(nb_sector); + status = +#if MAX_LUN + (lun < MAX_LUN) ? lun_desc[lun].usb_write_10(addr, nb_sector) : +#endif + CTRL_FAIL; + memory_stop_write_action(); + + Ctrl_access_unlock(); + + return status; +} + + +//! @} + +#endif // ACCESS_USB == ENABLED + + +#if ACCESS_MEM_TO_RAM == ENABLED + +/*! \name MEM <-> RAM Interface + */ +//! @{ + + +Ctrl_status memory_2_ram(U8 lun, U32 addr, void *ram) +{ + Ctrl_status status; + + if (!Ctrl_access_lock()) return CTRL_FAIL; + + memory_start_read_action(1); + status = +#if MAX_LUN + (lun < MAX_LUN) ? lun_desc[lun].mem_2_ram(addr, ram) : +#endif +#if LUN_USB == ENABLE + Lun_usb_mem_2_ram(addr, ram); +#else + CTRL_FAIL; +#endif + memory_stop_read_action(); + + Ctrl_access_unlock(); + + return status; +} + + +Ctrl_status ram_2_memory(U8 lun, U32 addr, const void *ram) +{ + Ctrl_status status; + + if (!Ctrl_access_lock()) return CTRL_FAIL; + + memory_start_write_action(1); + status = +#if MAX_LUN + (lun < MAX_LUN) ? lun_desc[lun].ram_2_mem(addr, ram) : +#endif +#if LUN_USB == ENABLE + Lun_usb_ram_2_mem(addr, ram); +#else + CTRL_FAIL; +#endif + memory_stop_write_action(); + + Ctrl_access_unlock(); + + return status; +} + + +//! @} + +#endif // ACCESS_MEM_TO_RAM == ENABLED + + +#if ACCESS_STREAM == ENABLED + +/*! \name Streaming MEM <-> MEM Interface + */ +//! @{ + + + #if ACCESS_MEM_TO_MEM == ENABLED + +#include "fat.h" + +Ctrl_status stream_mem_to_mem(U8 src_lun, U32 src_addr, U8 dest_lun, U32 dest_addr, U16 nb_sector) +{ +#if (defined __GNUC__) && (defined __AVR32__) + __attribute__((__aligned__(4))) +#elif (defined __ICCAVR32__) + #pragma data_alignment = 4 +#endif + static U8 sector_buf[FS_512B]; + Ctrl_status status = CTRL_GOOD; + + while (nb_sector--) + { + if ((status = memory_2_ram(src_lun, src_addr++, sector_buf)) != CTRL_GOOD) break; + if ((status = ram_2_memory(dest_lun, dest_addr++, sector_buf)) != CTRL_GOOD) break; + } + + return status; +} + + #endif // ACCESS_MEM_TO_MEM == ENABLED + + +Ctrl_status stream_state(U8 id) +{ + return CTRL_GOOD; +} + + +U16 stream_stop(U8 id) +{ + return 0; +} + + +//! @} + +#endif // ACCESS_STREAM == ENABLED diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS/ctrl_access.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS/ctrl_access.h new file mode 100644 index 000000000..358bf6589 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS/ctrl_access.h @@ -0,0 +1,369 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Abstraction layer for memory interfaces. + * + * This module contains the interfaces: + * - MEM <-> USB; + * - MEM <-> RAM; + * - MEM <-> MEM. + * + * This module may be configured and expanded to support the following features: + * - write-protected globals; + * - password-protected data; + * - specific features; + * - etc. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _CTRL_ACCESS_H_ +#define _CTRL_ACCESS_H_ + +#include "compiler.h" +#include "conf_access.h" + + +//! Status returned by CTRL_ACCESS interfaces. +typedef enum +{ + CTRL_GOOD = PASS, //!< Success, memory ready. + CTRL_FAIL = FAIL, //!< An error occurred. + CTRL_NO_PRESENT = FAIL + 1, //!< Memory unplugged. + CTRL_BUSY = FAIL + 2 //!< Memory not initialized or changed. +} Ctrl_status; + + +// FYI: Each Logical Unit Number (LUN) corresponds to a memory. + +// Check LUN defines. +#ifndef LUN_0 + #error LUN_0 must be defined as ENABLE or DISABLE in conf_access.h +#endif +#ifndef LUN_1 + #error LUN_1 must be defined as ENABLE or DISABLE in conf_access.h +#endif +#ifndef LUN_2 + #error LUN_2 must be defined as ENABLE or DISABLE in conf_access.h +#endif +#ifndef LUN_3 + #error LUN_3 must be defined as ENABLE or DISABLE in conf_access.h +#endif +#ifndef LUN_4 + #error LUN_4 must be defined as ENABLE or DISABLE in conf_access.h +#endif +#ifndef LUN_5 + #error LUN_5 must be defined as ENABLE or DISABLE in conf_access.h +#endif +#ifndef LUN_6 + #error LUN_6 must be defined as ENABLE or DISABLE in conf_access.h +#endif +#ifndef LUN_7 + #error LUN_7 must be defined as ENABLE or DISABLE in conf_access.h +#endif +#ifndef LUN_USB + #error LUN_USB must be defined as ENABLE or DISABLE in conf_access.h +#endif + +/*! \name LUN IDs + */ +//! @{ +#define LUN_ID_0 (0) //!< First static LUN. +#define LUN_ID_1 (LUN_ID_0 + LUN_0) +#define LUN_ID_2 (LUN_ID_1 + LUN_1) +#define LUN_ID_3 (LUN_ID_2 + LUN_2) +#define LUN_ID_4 (LUN_ID_3 + LUN_3) +#define LUN_ID_5 (LUN_ID_4 + LUN_4) +#define LUN_ID_6 (LUN_ID_5 + LUN_5) +#define LUN_ID_7 (LUN_ID_6 + LUN_6) +#define MAX_LUN (LUN_ID_7 + LUN_7) //!< Number of static LUNs. +#define LUN_ID_USB (MAX_LUN) //!< First dynamic LUN (USB host mass storage). +//! @} + + +// Include LUN header files. +#if LUN_0 == ENABLE + #include LUN_0_INCLUDE +#endif +#if LUN_1 == ENABLE + #include LUN_1_INCLUDE +#endif +#if LUN_2 == ENABLE + #include LUN_2_INCLUDE +#endif +#if LUN_3 == ENABLE + #include LUN_3_INCLUDE +#endif +#if LUN_4 == ENABLE + #include LUN_4_INCLUDE +#endif +#if LUN_5 == ENABLE + #include LUN_5_INCLUDE +#endif +#if LUN_6 == ENABLE + #include LUN_6_INCLUDE +#endif +#if LUN_7 == ENABLE + #include LUN_7_INCLUDE +#endif +#if LUN_USB == ENABLE + #include LUN_USB_INCLUDE +#endif + + +// Check the configuration of write protection in conf_access.h. +#ifndef GLOBAL_WR_PROTECT + #error GLOBAL_WR_PROTECT must be defined as ENABLED or DISABLED in conf_access.h +#endif + + +#if GLOBAL_WR_PROTECT == ENABLED + +//! Write protect. +extern Bool g_wr_protect; + +#endif + + +/*! \name Control Interface + */ +//! @{ + +#ifdef FREERTOS_USED + +/*! \brief Initializes the LUN access locker. + * + * \return \c TRUE if the locker was successfully initialized, else \c FALSE. + */ +extern Bool ctrl_access_init(void); + +#endif // FREERTOS_USED + +/*! \brief Returns the number of LUNs. + * + * \return Number of LUNs in the system. + */ +extern U8 get_nb_lun(void); + +/*! \brief Returns the current LUN. + * + * \return Current LUN. + * + * \todo Implement. + */ +extern U8 get_cur_lun(void); + +/*! \brief Tests the memory state and initializes the memory if required. + * + * The TEST UNIT READY SCSI primary command allows an application client to poll + * a LUN until it is ready without having to allocate memory for returned data. + * + * This command may be used to check the media status of LUNs with removable + * media. + * + * \param lun Logical Unit Number. + * + * \return Status. + */ +extern Ctrl_status mem_test_unit_ready(U8 lun); + +/*! \brief Returns the address of the last valid sector (512 bytes) in the + * memory. + * + * \param lun Logical Unit Number. + * \param u32_nb_sector Pointer to the address of the last valid sector. + * + * \return Status. + */ +extern Ctrl_status mem_read_capacity(U8 lun, U32 *u32_nb_sector); + +/*! \brief Returns the size of the physical sector. + * + * \param lun Logical Unit Number. + * + * \return Sector size (unit: 512 bytes). + */ +extern U8 mem_sector_size(U8 lun); + +/*! \brief Returns the write-protection state of the memory. + * + * \param lun Logical Unit Number. + * + * \return \c TRUE if the memory is write-protected, else \c FALSE. + * + * \note Only used by removable memories with hardware-specific write + * protection. + */ +extern Bool mem_wr_protect(U8 lun); + +/*! \brief Tells whether the memory is removable. + * + * \param lun Logical Unit Number. + * + * \return \c TRUE if the memory is removable, else \c FALSE. + */ +extern Bool mem_removal(U8 lun); + +/*! \brief Returns a pointer to the LUN name. + * + * \param lun Logical Unit Number. + * + * \return Pointer to the LUN name string. + */ +extern const char *mem_name(U8 lun); + +//! @} + + +#if ACCESS_USB == ENABLED + +/*! \name MEM <-> USB Interface + */ +//! @{ + +/*! \brief Tranfers data from the memory to USB. + * + * \param lun Logical Unit Number. + * \param addr Address of first memory sector to read. + * \param nb_sector Number of sectors to transfer. + * + * \return Status. + */ +extern Ctrl_status memory_2_usb(U8 lun, U32 addr, U16 nb_sector); + +/*! \brief Tranfers data from USB to the memory. + * + * \param lun Logical Unit Number. + * \param addr Address of first memory sector to write. + * \param nb_sector Number of sectors to transfer. + * + * \return Status. + */ +extern Ctrl_status usb_2_memory(U8 lun, U32 addr, U16 nb_sector); + +//! @} + +#endif // ACCESS_USB == ENABLED + + +#if ACCESS_MEM_TO_RAM == ENABLED + +/*! \name MEM <-> RAM Interface + */ +//! @{ + +/*! \brief Copies 1 data sector from the memory to RAM. + * + * \param lun Logical Unit Number. + * \param addr Address of first memory sector to read. + * \param ram Pointer to RAM buffer to write. + * + * \return Status. + */ +extern Ctrl_status memory_2_ram(U8 lun, U32 addr, void *ram); + +/*! \brief Copies 1 data sector from RAM to the memory. + * + * \param lun Logical Unit Number. + * \param addr Address of first memory sector to write. + * \param ram Pointer to RAM buffer to read. + * + * \return Status. + */ +extern Ctrl_status ram_2_memory(U8 lun, U32 addr, const void *ram); + +//! @} + +#endif // ACCESS_MEM_TO_RAM == ENABLED + + +#if ACCESS_STREAM == ENABLED + +/*! \name Streaming MEM <-> MEM Interface + */ +//! @{ + +//! Erroneous streaming data transfer ID. +#define ID_STREAM_ERR 0xFF + + #if ACCESS_MEM_TO_MEM == ENABLED + +/*! \brief Copies data from one memory to another. + * + * \param src_lun Source Logical Unit Number. + * \param src_addr Source address of first memory sector to read. + * \param dest_lun Destination Logical Unit Number. + * \param dest_addr Destination address of first memory sector to write. + * \param nb_sector Number of sectors to copy. + * + * \return Status. + */ +extern Ctrl_status stream_mem_to_mem(U8 src_lun, U32 src_addr, U8 dest_lun, U32 dest_addr, U16 nb_sector); + + #endif // ACCESS_MEM_TO_MEM == ENABLED + +/*! \brief Returns the state of a streaming data transfer. + * + * \param id Transfer ID. + * + * \return Status. + * + * \todo Implement. + */ +extern Ctrl_status stream_state(U8 id); + +/*! \brief Stops a streaming data transfer. + * + * \param id Transfer ID. + * + * \return Number of remaining sectors. + * + * \todo Implement. + */ +extern U16 stream_stop(U8 id); + +//! @} + +#endif // ACCESS_STREAM == ENABLED + + +#endif // _CTRL_ACCESS_H_ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/DEBUG/debug.c b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/DEBUG/debug.c new file mode 100644 index 000000000..fe8a2a0d8 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/DEBUG/debug.c @@ -0,0 +1,133 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Macros and functions dedicated to debug purposes. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with a USART module can be used. + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#include "compiler.h" +#include "debug.h" +#include "util.h" + + +#if (defined __GNUC__) +# include "malloc.h" + +U32 get_heap_curr_used_size( void ) +{ + struct mallinfo my_info=mallinfo(); + return my_info.uordblks; +} + +U32 get_heap_total_used_size( void ) +{ + struct mallinfo my_info=mallinfo(); + return my_info.arena; +} +#endif + +U32 get_heap_free_size( void ) +{ + U32 high_mark= AVR32_SRAM_SIZE; + U32 low_mark = 0; + U32 size ; + void* p_mem; + + size = (high_mark + low_mark)/2; + + do + { + p_mem = malloc(size); + if( p_mem != NULL) + { // Can allocate memory + free(p_mem); + low_mark = size; + } + else + { // Can not allocate memory + high_mark = size; + } + + size = (high_mark + low_mark)/2; + } + while( (high_mark-low_mark) >1 ); + + return size; +} + +static void* round_trace_pbuf; +static U32 round_trace_size; + +void uc3_round_trace_init(void* buf, U32 size) +{ + round_trace_pbuf = buf; + (*(U32*)round_trace_pbuf)=(U32)buf+4; + round_trace_size = size; +} + +void uc3_round_trace(U32 val) +{ + //Disable_global_interrupt(); + + U32* p_wr = (U32*)(*(U32*)round_trace_pbuf); + *p_wr = val; + p_wr++; + if( ((U32)p_wr % round_trace_size) ==0 ) + p_wr= (U32*)round_trace_pbuf+1; + *p_wr = 0xdeadbeef; + *(U32*)round_trace_pbuf = (U32)p_wr; + + //Enable_global_interrupt(); +} + +void dump(char* _buf, uint16_t _count) { + + int i; + for (i = 0; i < _count; ++i) + { + printk("0x%x ", _buf[i]); + if ((i!=0)&&(i % 10 == 0)) + printk("\n\t"); + } + printk("\n"); +} + diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/DEBUG/debug.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/DEBUG/debug.h new file mode 100644 index 000000000..a832d7c9c --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/DEBUG/debug.h @@ -0,0 +1,116 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Macros and functions dedicated to debug purposes. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with a USART module can be used. + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _DEBUG_H_ +#define _DEBUG_H_ + +#include "stringz.h" + +/*! \brief These macros are used to add traces memory. + * + * First, initialise the trace with Uc3_trace_init(pointer), giving the start address + * of the memory location where will be stored the trace. + * Use Uc3_trace(something) to store "something" into the memory. The end of the trace + * is signaled by the "0xdeadbeef" pattern. + */ +#define Uc3_trace_init(debug_addr) \ + *(U32*)(debug_addr)=debug_addr+4 + +#define Uc3_trace(debug_addr, x) \ + *(U32*)(*(U32*)(debug_addr) ) = (U32)(x) ;\ + *(U32*)(*(U32*)(debug_addr)+4) = 0xdeadbeef ;\ + *(U32*)(debug_addr ) = *(U32*)(debug_addr)+4 + +/*! \brief This macro is used to insert labels into assembly output. + * + */ +#define Insert_label(name) \ + __asm__ __volatile__ (STRINGZ(name)":"); + +#if (defined __GNUC__) +/*! \brief Returns the number of total of used bytes allocated from the HEAP. + * + * \retval total number of used bytes. + */ +U32 get_heap_total_used_size( void ); + +/*! \brief Returns the number of bytes currently used from the HEAP. + * + * \retval total number of used bytes. + */ +U32 get_heap_curr_used_size( void ); +#endif + +/*! \brief Returns the number of free bytes in the HEAP. + * + * This funtion tries to allocate the maximum number of bytes by dichotomical method. + * + * \retval number of free bytes. + */ +extern U32 get_heap_free_size( void ); + +/*! \name Traces function using a round buffer + */ +//! @{ + +/*! \brief Initialize the trace using a round buffer. + * + * \param buf Base address of the buffer used for the trace. + * \param size Size of the round buffer. Must be a power of 2. + */ +void uc3_round_trace_init(void* buf, U32 size); + +/*! \brief Trace a data in the round buffer. + * + * The end of the trace is signaled by the "0xdeadbeef" pattern. + * \param val Data to trace; + */ +void uc3_round_trace(U32 val); + +//! @} + + +#endif // _DEBUG_H_ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/DEBUG/print_funcs.c b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/DEBUG/print_funcs.c new file mode 100644 index 000000000..99e927466 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/DEBUG/print_funcs.c @@ -0,0 +1,215 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Strings and integers print module for debug purposes. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with a USART module can be used. + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#include "compiler.h" +#include "gpio.h" +#include "usart.h" +#include "print_funcs.h" + + +//! ASCII representation of hexadecimal digits. +static const char HEX_DIGITS[16] = "0123456789ABCDEF"; + + +void init_dbg_rs232(long pba_hz) +{ + init_dbg_rs232_ex(DBG_USART_BAUDRATE, pba_hz); +} + + +void init_dbg_rs232_ex(unsigned long baudrate, long pba_hz) +{ + static const gpio_map_t DBG_USART_GPIO_MAP = + { + {DBG_USART_RX_PIN, DBG_USART_RX_FUNCTION}, + {DBG_USART_TX_PIN, DBG_USART_TX_FUNCTION} + }; + + // Options for debug USART. + usart_options_t dbg_usart_options = + { + .baudrate = baudrate, + .charlength = 8, + .paritytype = USART_NO_PARITY, + .stopbits = USART_1_STOPBIT, + .channelmode = USART_NORMAL_CHMODE + }; + + // Setup GPIO for debug USART. + gpio_enable_module(DBG_USART_GPIO_MAP, + sizeof(DBG_USART_GPIO_MAP) / sizeof(DBG_USART_GPIO_MAP[0])); + + // Initialize it in RS232 mode. + usart_init_rs232(DBG_USART, &dbg_usart_options, pba_hz); +} + + +void print_dbg(const char *str) +{ + // Redirection to the debug USART. + print(DBG_USART, str); +} + + +void print_dbg_char(int c) +{ + // Redirection to the debug USART. + print_char(DBG_USART, c); +} + + +void print_dbg_ulong(unsigned long n) +{ + // Redirection to the debug USART. + print_ulong(DBG_USART, n); +} + + +void print_dbg_char_hex(unsigned char n) +{ + // Redirection to the debug USART. + print_char_hex(DBG_USART, n); +} + + +void print_dbg_short_hex(unsigned short n) +{ + // Redirection to the debug USART. + print_short_hex(DBG_USART, n); +} + + +void print_dbg_hex(unsigned long n) +{ + // Redirection to the debug USART. + print_hex(DBG_USART, n); +} + + +void print(volatile avr32_usart_t *usart, const char *str) +{ + // Invoke the USART driver to transmit the input string with the given USART. + usart_write_line(usart, str); +} + + +void print_char(volatile avr32_usart_t *usart, int c) +{ + // Invoke the USART driver to transmit the input character with the given USART. + usart_putchar(usart, c); +} + + +void print_ulong(volatile avr32_usart_t *usart, unsigned long n) +{ + char tmp[11]; + int i = sizeof(tmp) - 1; + + // Convert the given number to an ASCII decimal representation. + tmp[i] = '\0'; + do + { + tmp[--i] = '0' + n % 10; + n /= 10; + } while (n); + + // Transmit the resulting string with the given USART. + print(usart, tmp + i); +} + + +void print_char_hex(volatile avr32_usart_t *usart, unsigned char n) +{ + char tmp[3]; + int i; + + // Convert the given number to an ASCII hexadecimal representation. + tmp[2] = '\0'; + for (i = 1; i >= 0; i--) + { + tmp[i] = HEX_DIGITS[n & 0xF]; + n >>= 4; + } + + // Transmit the resulting string with the given USART. + print(usart, tmp); +} + + +void print_short_hex(volatile avr32_usart_t *usart, unsigned short n) +{ + char tmp[5]; + int i; + + // Convert the given number to an ASCII hexadecimal representation. + tmp[4] = '\0'; + for (i = 3; i >= 0; i--) + { + tmp[i] = HEX_DIGITS[n & 0xF]; + n >>= 4; + } + + // Transmit the resulting string with the given USART. + print(usart, tmp); +} + + +void print_hex(volatile avr32_usart_t *usart, unsigned long n) +{ + char tmp[9]; + int i; + + // Convert the given number to an ASCII hexadecimal representation. + tmp[8] = '\0'; + for (i = 7; i >= 0; i--) + { + tmp[i] = HEX_DIGITS[n & 0xF]; + n >>= 4; + } + + // Transmit the resulting string with the given USART. + print(usart, tmp); +} diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/DEBUG/print_funcs.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/DEBUG/print_funcs.h new file mode 100644 index 000000000..38f931dc2 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/DEBUG/print_funcs.h @@ -0,0 +1,294 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Strings and integers print module for debug purposes. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with a USART module can be used. + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _PRINT_FUNCS_H_ +#define _PRINT_FUNCS_H_ + +#include +#include "board.h" + + +/*! \name USART Settings for the Debug Module + */ +//! @{ +#if BOARD == EVK1100 +# define DBG_USART (&AVR32_USART1) +# define DBG_USART_RX_PIN AVR32_USART1_RXD_0_0_PIN +# define DBG_USART_RX_FUNCTION AVR32_USART1_RXD_0_0_FUNCTION +# define DBG_USART_TX_PIN AVR32_USART1_TXD_0_0_PIN +# define DBG_USART_TX_FUNCTION AVR32_USART1_TXD_0_0_FUNCTION +# define DBG_USART_BAUDRATE 57600 +#elif BOARD == EVK1101 +# define DBG_USART (&AVR32_USART1) +# define DBG_USART_RX_PIN AVR32_USART1_RXD_0_0_PIN +# define DBG_USART_RX_FUNCTION AVR32_USART1_RXD_0_0_FUNCTION +# define DBG_USART_TX_PIN AVR32_USART1_TXD_0_0_PIN +# define DBG_USART_TX_FUNCTION AVR32_USART1_TXD_0_0_FUNCTION +# define DBG_USART_BAUDRATE 57600 +#elif BOARD == UC3C_EK +# define DBG_USART (&AVR32_USART2) +# define DBG_USART_RX_PIN AVR32_USART2_RXD_0_1_PIN +# define DBG_USART_RX_FUNCTION AVR32_USART2_RXD_0_1_FUNCTION +# define DBG_USART_TX_PIN AVR32_USART2_TXD_0_1_PIN +# define DBG_USART_TX_FUNCTION AVR32_USART2_TXD_0_1_FUNCTION +# define DBG_USART_BAUDRATE 57600 +#elif BOARD == EVK1104 +# define DBG_USART (&AVR32_USART1) +# define DBG_USART_RX_PIN AVR32_USART1_RXD_0_0_PIN +# define DBG_USART_RX_FUNCTION AVR32_USART1_RXD_0_0_FUNCTION +# define DBG_USART_TX_PIN AVR32_USART1_TXD_0_0_PIN +# define DBG_USART_TX_FUNCTION AVR32_USART1_TXD_0_0_FUNCTION +# define DBG_USART_BAUDRATE 57600 +#elif BOARD == EVK1105 +# define DBG_USART (&AVR32_USART0) +# define DBG_USART_RX_PIN AVR32_USART0_RXD_0_0_PIN +# define DBG_USART_RX_FUNCTION AVR32_USART0_RXD_0_0_FUNCTION +# define DBG_USART_TX_PIN AVR32_USART0_TXD_0_0_PIN +# define DBG_USART_TX_FUNCTION AVR32_USART0_TXD_0_0_FUNCTION +# define DBG_USART_BAUDRATE 57600 +#elif BOARD == STK1000 +# define DBG_USART (&AVR32_USART1) +# define DBG_USART_RX_PIN AVR32_USART1_RXD_0_PIN +# define DBG_USART_RX_FUNCTION AVR32_USART1_RXD_0_FUNCTION +# define DBG_USART_TX_PIN AVR32_USART1_TXD_0_PIN +# define DBG_USART_TX_FUNCTION AVR32_USART1_TXD_0_FUNCTION +# define DBG_USART_BAUDRATE 115200 +#elif BOARD == NGW100 +# define DBG_USART (&AVR32_USART1) +# define DBG_USART_RX_PIN AVR32_USART1_RXD_0_PIN +# define DBG_USART_RX_FUNCTION AVR32_USART1_RXD_0_FUNCTION +# define DBG_USART_TX_PIN AVR32_USART1_TXD_0_PIN +# define DBG_USART_TX_FUNCTION AVR32_USART1_TXD_0_FUNCTION +# define DBG_USART_BAUDRATE 115200 +#elif BOARD == STK600_RCUC3L0 +# define DBG_USART (&AVR32_USART1) +# define DBG_USART_RX_PIN AVR32_USART1_RXD_0_1_PIN +# define DBG_USART_RX_FUNCTION AVR32_USART1_RXD_0_1_FUNCTION +// For the RX pin, connect STK600.PORTE.PE3 to STK600.RS232 SPARE.RXD +# define DBG_USART_TX_PIN AVR32_USART1_TXD_0_1_PIN +# define DBG_USART_TX_FUNCTION AVR32_USART1_TXD_0_1_FUNCTION +// For the TX pin, connect STK600.PORTE.PE2 to STK600.RS232 SPARE.TXD +# define DBG_USART_BAUDRATE 57600 +# define DBG_USART_CLOCK_MASK AVR32_USART1_CLK_PBA +#elif BOARD == UC3L_EK +# define DBG_USART (&AVR32_USART3) +# define DBG_USART_RX_PIN AVR32_USART3_RXD_0_0_PIN +# define DBG_USART_RX_FUNCTION AVR32_USART3_RXD_0_0_FUNCTION +# define DBG_USART_TX_PIN AVR32_USART3_TXD_0_0_PIN +# define DBG_USART_TX_FUNCTION AVR32_USART3_TXD_0_0_FUNCTION +# define DBG_USART_BAUDRATE 57600 +# define DBG_USART_CLOCK_MASK AVR32_USART3_CLK_PBA +#elif BOARD == ARDUINO +# define DBG_USART (&AVR32_USART1) +# define DBG_USART_RX_PIN AVR32_USART1_RXD_0_0_PIN +# define DBG_USART_RX_FUNCTION AVR32_USART1_RXD_0_0_FUNCTION +# define DBG_USART_TX_PIN AVR32_USART1_TXD_0_0_PIN +# define DBG_USART_TX_FUNCTION AVR32_USART1_TXD_0_0_FUNCTION +# define DBG_USART_BAUDRATE 57600 +# define DBG_USART_CLOCK_MASK AVR32_USART1_CLK_PBA +#endif + +#if !defined(DBG_USART) || \ + !defined(DBG_USART_RX_PIN) || \ + !defined(DBG_USART_RX_FUNCTION) || \ + !defined(DBG_USART_TX_PIN) || \ + !defined(DBG_USART_TX_FUNCTION) || \ + !defined(DBG_USART_BAUDRATE) +# error The USART configuration to use for debug on your board is missing +#endif +//! @} + +/*! \name VT100 Common Commands + */ +//! @{ +#define CLEARSCR "\x1B[2J\x1B[;H" //!< Clear screen. +#define CLEAREOL "\x1B[K" //!< Clear end of line. +#define CLEAREOS "\x1B[J" //!< Clear end of screen. +#define CLEARLCR "\x1B[0K" //!< Clear line cursor right. +#define CLEARLCL "\x1B[1K" //!< Clear line cursor left. +#define CLEARELN "\x1B[2K" //!< Clear entire line. +#define CLEARCDW "\x1B[0J" //!< Clear cursor down. +#define CLEARCUP "\x1B[1J" //!< Clear cursor up. +#define GOTOYX "\x1B[%.2d;%.2dH" //!< Set cursor to (y, x). +#define INSERTMOD "\x1B[4h" //!< Insert mode. +#define OVERWRITEMOD "\x1B[4l" //!< Overwrite mode. +#define DELAFCURSOR "\x1B[K" //!< Erase from cursor to end of line. +#define CRLF "\r\n" //!< Carriage Return + Line Feed. +//! @} + +/*! \name VT100 Cursor Commands + */ +//! @{ +#define CURSON "\x1B[?25h" //!< Show cursor. +#define CURSOFF "\x1B[?25l" //!< Hide cursor. +//! @} + +/*! \name VT100 Character Commands + */ +//! @{ +#define NORMAL "\x1B[0m" //!< Normal. +#define BOLD "\x1B[1m" //!< Bold. +#define UNDERLINE "\x1B[4m" //!< Underline. +#define BLINKING "\x1B[5m" //!< Blink. +#define INVVIDEO "\x1B[7m" //!< Inverse video. +//! @} + +/*! \name VT100 Color Commands + */ +//! @{ +#define CL_BLACK "\033[22;30m" //!< Black. +#define CL_RED "\033[22;31m" //!< Red. +#define CL_GREEN "\033[22;32m" //!< Green. +#define CL_BROWN "\033[22;33m" //!< Brown. +#define CL_BLUE "\033[22;34m" //!< Blue. +#define CL_MAGENTA "\033[22;35m" //!< Magenta. +#define CL_CYAN "\033[22;36m" //!< Cyan. +#define CL_GRAY "\033[22;37m" //!< Gray. +#define CL_DARKGRAY "\033[01;30m" //!< Dark gray. +#define CL_LIGHTRED "\033[01;31m" //!< Light red. +#define CL_LIGHTGREEN "\033[01;32m" //!< Light green. +#define CL_YELLOW "\033[01;33m" //!< Yellow. +#define CL_LIGHTBLUE "\033[01;34m" //!< Light blue. +#define CL_LIGHTMAGENTA "\033[01;35m" //!< Light magenta. +#define CL_LIGHTCYAN "\033[01;36m" //!< Light cyan. +#define CL_WHITE "\033[01;37m" //!< White. +//! @} + + +/*! \brief Sets up DBG_USART with 8N1 at DBG_USART_BAUDRATE. + * + * \param pba_hz PBA clock frequency (Hz). + */ +extern void init_dbg_rs232(long pba_hz); + +/*! \brief Sets up DBG_USART with 8N1 at a given baud rate. + * + * \param baudrate Baud rate to set DBG_USART to. + * \param pba_hz PBA clock frequency (Hz). + */ +extern void init_dbg_rs232_ex(unsigned long baudrate, long pba_hz); + +/*! \brief Prints a string of characters to DBG_USART. + * + * \param str The string of characters to print. + */ +extern void print_dbg(const char *str); + +/*! \brief Prints a character to DBG_USART. + * + * \param c The character to print. + */ +extern void print_dbg_char(int c); + +/*! \brief Prints an integer to DBG_USART in a decimal representation. + * + * \param n The integer to print. + */ +extern void print_dbg_ulong(unsigned long n); + +/*! \brief Prints a char to DBG_USART in an hexadecimal representation. + * + * \param n The char to print. + */ +extern void print_dbg_char_hex(unsigned char n); + +/*! \brief Prints a short integer to DBG_USART in an hexadecimal representation. + * + * \param n The short integer to print. + */ +extern void print_dbg_short_hex(unsigned short n); + +/*! \brief Prints an integer to DBG_USART in an hexadecimal representation. + * + * \param n The integer to print. + */ +extern void print_dbg_hex(unsigned long n); + +/*! \brief Prints a string of characters to a given USART. + * + * \param usart Base address of the USART instance to print to. + * \param str The string of characters to print. + */ +extern void print(volatile avr32_usart_t *usart, const char *str); + +/*! \brief Prints a character to a given USART. + * + * \param usart Base address of the USART instance to print to. + * \param c The character to print. + */ +extern void print_char(volatile avr32_usart_t *usart, int c); + +/*! \brief Prints an integer to a given USART in a decimal representation. + * + * \param usart Base address of the USART instance to print to. + * \param n The integer to print. + */ +extern void print_ulong(volatile avr32_usart_t *usart, unsigned long n); + +/*! \brief Prints a char to a given USART in an hexadecimal representation. + * + * \param usart Base address of the USART instance to print to. + * \param n The char to print. + */ +extern void print_char_hex(volatile avr32_usart_t *usart, unsigned char n); + +/*! \brief Prints a short integer to a given USART in an hexadecimal + * representation. + * + * \param usart Base address of the USART instance to print to. + * \param n The short integer to print. + */ +extern void print_short_hex(volatile avr32_usart_t *usart, unsigned short n); + +/*! \brief Prints an integer to a given USART in an hexadecimal representation. + * + * \param usart Base address of the USART instance to print to. + * \param n The integer to print. + */ +extern void print_hex(volatile avr32_usart_t *usart, unsigned long n); + + +#endif // _PRINT_FUNCS_H_ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_cpu.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_cpu.h new file mode 100644 index 000000000..e3ebea7a1 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_cpu.h @@ -0,0 +1,63 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief NEWLIB_ADDONS CPU include file for AVR32. + * + * - Compiler: GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef __AVR32_NEWLIB_ADDONS_CPU_H__ +#define __AVR32_NEWLIB_ADDONS_CPU_H__ + +#include <_ansi.h> + +_BEGIN_STD_C + +#define CPU_HZ get_cpu_hz() + +void udelay(unsigned long usec); +void set_cpu_hz(unsigned int clk_hz); +unsigned int get_cpu_hz(); + +_END_STD_C + +#endif diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_exceptions.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_exceptions.h new file mode 100644 index 000000000..31caf1304 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_exceptions.h @@ -0,0 +1,120 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief NEWLIB_ADDONS exceptions include file for AVR32. + * + * - Compiler: GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef __AVR32_NEWLIB_ADDONS_EXCEPTIONS_H__ +#define __AVR32_NEWLIB_ADDONS_EXCEPTIONS_H__ + +#include <_ansi.h> + +_BEGIN_STD_C + +/* + Exception vector offsets +*/ +#define EVBA_UNRECOVERABLE 0x000 +#define EVBA_TLB_MULTIPLE 0x004 +#define EVBA_BUS_ERROR_DATA 0x008 +#define EVBA_BUS_ERROR_INSTR 0x00C +#define EVBA_NMI 0x010 +#define EVBA_INSTR_ADDR 0x014 +#define EVBA_ITLB_MISS 0x050 +#define EVBA_ITLB_PROT 0x018 +#define EVBA_BREAKPOINT 0x01C +#define EVBA_ILLEGAL_OPCODE 0x020 +#define EVBA_UNIMPLEMENTED 0x024 +#define EVBA_PRIVILEGE_VIOL 0x028 +#define EVBA_FLOATING_POINT 0x02C +#define EVBA_COP_ABSENT 0x030 +#define EVBA_SCALL 0x100 +#define EVBA_DATA_ADDR_R 0x034 +#define EVBA_DATA_ADDR_W 0x038 +#define EVBA_DTLB_MISS_R 0x060 +#define EVBA_DTLB_MISS_W 0x070 +#define EVBA_DTLB_PROT_R 0x03C +#define EVBA_DTLB_PROT_W 0x040 +#define EVBA_DTLB_MODIFIED 0x044 + + +/* + Define the form of the function used when registering exceptions. + The function should return the address which the exception should + return to after the exception processing. +*/ + +typedef unsigned int (*__exception_handler)(int /*evba_offset*/, int /*return address*/); + +/* + Define the form of the function used when registering a scall handler. +*/ + +typedef void (*__scall_handler)(int /*code*/, int /*p1*/, int /*p2*/ + , int /*p3*/, int /*p4*/); + +/* + Function for registering an exception handler for the exception with + offset given by evba_offset. +*/ +void _register_exception_handler(__exception_handler handler, int evba_offset); + +/* + Function for registering a scall handler which can be a arbirary + function which uses r8-r12 for parameters. +*/ +void _register_scall_handler(__scall_handler handler); + +/* + Initialize exceptions. Must be called before registering exception handlers + and needed to enable exceptions. 'evba' is the pointer to the exception + vector. 'handler_table' is a pointer to an array where the pointers to + the exception handlers are stored. This array must be at least 0x104 bytes + and word aligned. +*/ +void init_exceptions(void *evba, void *handler_table); + +_END_STD_C + +#endif diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_interrupts.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_interrupts.h new file mode 100644 index 000000000..76d81f737 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_interrupts.h @@ -0,0 +1,82 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief NEWLIB_ADDONS interrupts include file for AVR32. + * + * - Compiler: GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef __AVR32_NEWLIB_ADDONS_INTERRUPTS_H__ +#define __AVR32_NEWLIB_ADDONS_INTERRUPTS_H__ + +#include <_ansi.h> + +_BEGIN_STD_C + +#define INT_GRPS 64 +#define INT_LINES 32 +#define INTPR_BASE (__intc_base__ + 0x0000) +#define INTREQ_BASE (__intc_base__ + 64*4) +#define INTCAUSE_BASE (__intc_base__ + 2*64*4) + +//Register offsets +#define INTLEVEL 30 +#define AUTOVECTOR 0 +#define AUTOVECTOR_BITS 14 + +//Priorities +#define INT0 0 +#define INT1 1 +#define INT2 2 +#define INT3 3 + + +typedef void (*__newlib_int_handler)(int /* int_grp*/, void */*user_handle*/); + +__newlib_int_handler register_interrupt(__newlib_int_handler handler, int int_grp, int line, int priority, + .../* void *user_handle*/); +void init_interrupts(); +void set_interrupts_base(void *base); + +_END_STD_C + +#endif diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_io.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_io.h new file mode 100644 index 000000000..a725769fa --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_io.h @@ -0,0 +1,174 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief NEWLIB_ADDONS miscellaneous macros include file for AVR32. + * + * - Compiler: GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef __AVR32_NEWLIB_ADDONS_IO_H__ +#define __AVR32_NEWLIB_ADDONS_IO_H__ + +#include <_ansi.h> + +_BEGIN_STD_C + +typedef char u8; +typedef unsigned int u32; + +#define __raw_writeb(v,a) (*(volatile unsigned char *)(a) = (v)) +#define __raw_writew(v,a) (*(volatile unsigned short *)(a) = (v)) +#define __raw_writel(v,a) (*(volatile unsigned int *)(a) = (v)) + +#define __raw_readb(a) (*(volatile unsigned char *)(a)) +#define __raw_readw(a) (*(volatile unsigned short *)(a)) +#define __raw_readl(a) (*(volatile unsigned int *)(a)) + +/* As long as I/O is only performed in P4 (or possibly P3), we're safe */ +#define writeb(v,a) __raw_writeb(v,a) +#define writew(v,a) __raw_writew(v,a) +#define writel(v,a) __raw_writel(v,a) + +#define readb(a) __raw_readb(a) +#define readw(a) __raw_readw(a) +#define readl(a) __raw_readl(a) + +/* Memory segments when segmentation is enabled */ +#define P0SEG 0x00000000 +#define P1SEG 0x80000000 +#define P2SEG 0xa0000000 +#define P3SEG 0xc0000000 +#define P4SEG 0xe0000000 + +/* Returns the privileged segment base of a given address */ +#define PXSEG(a) (((unsigned long)(a)) & 0xe0000000) + +/* Returns the physical address of a PnSEG (n=1,2) address */ +#define PHYSADDR(a) (((unsigned long)(a)) & 0x1fffffff) + +/* + * Map an address to a certain privileged segment + */ +#define P1SEGADDR(a) ((__typeof__(a))(((unsigned long)(a) & 0x1fffffff) | P1SEG)) +#define P2SEGADDR(a) ((__typeof__(a))(((unsigned long)(a) & 0x1fffffff) | P2SEG)) +#define P3SEGADDR(a) ((__typeof__(a))(((unsigned long)(a) & 0x1fffffff) | P3SEG)) +#define P4SEGADDR(a) ((__typeof__(a))(((unsigned long)(a) & 0x1fffffff) | P4SEG)) + + +#define cached(addr) P1SEGADDR(addr) +#define uncached(addr) P2SEGADDR(addr) +#define physaddr(addr) PHYSADDR(addr) + +#define BF(field, value) \ + ({ union { \ + struct { \ + unsigned : 32 - field ## _OFFSET - field ## _SIZE ; \ + unsigned long __val: field ## _SIZE ; \ + }; \ + unsigned long __ul; \ + } __tmp; \ + __tmp.__ul = 0; \ + __tmp.__val = value; \ + __tmp.__ul;}) + +#define BF_D(field, value) \ + ({ union { \ + struct { \ + unsigned long long : 64 - field ## _OFFSET - field ## _SIZE ; \ + unsigned long long __val: field ## _SIZE ; \ + }; \ + unsigned long long __ul; \ + } __tmp; \ + __tmp.__ul = 0; \ + __tmp.__val = value; \ + __tmp.__ul;}) + +#define BFINS(var, field, value) \ + { union {\ + struct { \ + unsigned : 32 - field ## _OFFSET - field ## _SIZE ; \ + unsigned long __val: field ## _SIZE ; \ + }; \ + unsigned long __ul; \ + } __tmp; \ + __tmp.__ul = var; \ + __tmp.__val = value; \ + var = __tmp.__ul;} + +#define BFEXT(var, field) \ + ({ union {\ + struct { \ + unsigned : 32 - field ## _OFFSET - field ## _SIZE ; \ + unsigned long __val: field ## _SIZE ; \ + }; \ + unsigned long __ul; \ + } __tmp; \ + __tmp.__ul = var; \ + __tmp.__val; }) + +#define BFINS_D(var, field, value) \ + { union {\ + struct { \ + unsigned long long : 64 - field ## _OFFSET - field ## _SIZE ; \ + unsigned long long __val: field ## _SIZE ; \ + }; \ + unsigned long long __ul; \ + } __tmp; \ + __tmp.__ul = var; \ + __tmp.__val = value; \ + var = __tmp.__ul;} + +#define BFEXT_D(var, field) \ + ({ union {\ + struct { \ + unsigned long long : 64 - field ## _OFFSET - field ## _SIZE ; \ + unsigned long long __val: field ## _SIZE ; \ + }; \ + unsigned long long __ul; \ + } __tmp; \ + __tmp.__ul = var; \ + __tmp.__val; }) + + +_END_STD_C + +#endif diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_usart.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_usart.h new file mode 100644 index 000000000..6c4697d78 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_usart.h @@ -0,0 +1,208 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief NEWLIB_ADDONS USART include file for AVR32. + * + * - Compiler: GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef __AVR32_NEWLIB_ADDONS_USART_H__ +#define __AVR32_NEWLIB_ADDONS_USART_H__ + +#include <_ansi.h> + +#include "nlao_io.h" + +_BEGIN_STD_C + +struct usart3 { + volatile u32 us_cr; + volatile u32 us_mr; + volatile u32 us_ier; + volatile u32 us_idr; + volatile u32 us_imr; + volatile u32 us_csr; + volatile u32 us_rhr; + volatile u32 us_thr; + volatile u32 us_brgr; + volatile u32 us_rtor; + volatile u32 us_ttgr; + volatile u32 us_reserved[5]; + volatile u32 us_fidi; + volatile u32 us_ner; + volatile u32 us_xxr; + volatile u32 us_if; +}; + +/* Register offsets */ +#define US_CR 0x0000 +#define US_MR 0x0004 +#define US_IER 0x0008 +#define US_IDR 0x000c +#define US_IMR 0x0010 +#define US_CSR 0x0014 +#define US_RHR 0x0018 +#define US_THR 0x001c +#define US_BRGR 0x0020 +#define US_RTOR 0x0024 +#define US_TTGR 0x0028 + +#define US_FIDI 0x0040 +#define US_NER 0x0044 +#define US_XXR 0x0048 +#define US_IF 0x004c + +#define US_RPR 0x0100 +#define US_RCR 0x0104 +#define US_TPR 0x0108 +#define US_TCR 0x010c +#define US_RNPR 0x0110 +#define US_RNCR 0x0114 +#define US_TNPR 0x0118 +#define US_TNCR 0x011c +#define US_PTCR 0x0120 +#define US_PTSR 0x0124 + + + + +/* USART3 Control Register */ +#define US_CR_RSTRX (1 << 2) +#define US_CR_RSTTX (1 << 3) +#define US_CR_RXEN (1 << 4) +#define US_CR_RXDIS (1 << 5) +#define US_CR_TXEN (1 << 6) +#define US_CR_TXDIS (1 << 7) +#define US_CR_RSTSTA (1 << 8) +#define US_CR_STTBRK (1 << 9) +#define US_CR_STPBRK (1 << 10) + +#define US_CR_DTREN (1 << 16) +#define US_CR_DTRDIS (1 << 17) +#define US_CR_RTSEN (1 << 18) +#define US_CR_RTSDIS (1 << 19) + +/* USART3 Mode Register */ +#define US_MR_MODE (15 << 0) +#define US_MR_MODE_NORMAL ( 0 << 0) +#define US_MR_MODE_HWFLOW ( 2 << 0) +#define US_MR_CLKS ( 3 << 4) +#define US_MR_CLKS_CLOCK ( 0 << 4) +#define US_MR_CLKS_FDIV1 ( 1 << 4) +#define US_MR_CLKS_SLOW ( 2 << 4) +#define US_MR_CLKS_EXT ( 3 << 4) +#define US_MR_CHRL_5BITS ( 0 << 6) +#define US_MR_CHRL_6BITS ( 1 << 6) +#define US_MR_CHRL_7BITS ( 2 << 6) +#define US_MR_CHRL_8BITS ( 3 << 6) +#define US_MR_SYNC ( 1 << 8) +#define US_MR_PAR_EVEN ( 0 << 9) +#define US_MR_PAR_ODD ( 1 << 9) +#define US_MR_PAR_SPACE ( 2 << 9) +#define US_MR_PAR_MARK ( 3 << 9) +#define US_MR_PAR_NONE ( 4 << 9) +#define US_MR_PAR_MDROP ( 6 << 9) +#define US_MR_NBSTOP_1BIT ( 0 << 12) +#define US_MR_NBSTOP_1_5BIT ( 1 << 12) +#define US_MR_NBSTOP_2BITS ( 2 << 12) +#define US_MR_OVER ( 1 << 19) +#define US_MR_OVER_X16 ( 0 << 19) +#define US_MR_OVER_X8 ( 1 << 19) + +/* USART3 Channel Status Register */ +#define US_CSR_RXRDY (1 << 0) +#define US_CSR_TXRDY (1 << 1) +#define US_CSR_RXBRK (1 << 2) +#define US_CSR_ENDRX (1 << 3) +#define US_CSR_ENDTX (1 << 4) + + +#define US_CSR_OVRE (1 << 5) +#define US_CSR_FRAME (1 << 6) +#define US_CSR_PARE (1 << 7) + +#define US_CSR_TXEMPTY (1 << 9) + +#define US_CSR_TXBUFE (1 << 11) +#define US_CSR_RXBUFF (1 << 12) +#define US_CSR_RIIC (1 << 16) +#define US_CSR_DSRIC (1 << 17) +#define US_CSR_DCDIC (1 << 18) +#define US_CSR_CTSIC (1 << 19) +#define US_CSR_RI (1 << 20) +#define US_CSR_DSR (1 << 21) +#define US_CSR_DCD (1 << 22) +#define US_CSR_CTS (1 << 23) + +/* USART3 Baud Rate Generator Register */ +#define US_BRGR_CD_OFFSET 0 +#define US_BRGR_FP_OFFSET 16 + +#define US_BRGR_CD_SIZE 16 +#define US_BRGR_FP_SIZE 3 + +#define US_BRGR_CD (0xFFFF << 0) +#define US_BRGR_FP ( 7 << 16) + +/*USART3 PDC Transfer Control Register */ +#define US_PTCR_RXTEN (1 << 0) +#define US_PTCR_RXTDIS (1 << 1) +#define US_PTCR_TXTEN (1 << 8) +#define US_PTCR_TXTDIS (1 << 9) + +/*USART3 PDC Transfer Status Register */ +#define US_PTSR_RXTEN (1 << 0) +#define US_PTSR_TXTEN (1 << 8) + + +int usart_init(int baudrate); +void usart_putc(char c); +void usart_puts(const char *s); +int usart_getc(void); +int usart_tstc(void); +void usart_setbrg(int baudrate, int cpu_clock); +void set_usart_base(void *usart_base); + + +_END_STD_C + +#endif /* MERLIN_USART3_H */ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/libnewlib_addons-at32ucr2-speed_opt.a b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/libnewlib_addons-at32ucr2-speed_opt.a new file mode 100644 index 000000000..aa673eccd Binary files /dev/null and b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/libnewlib_addons-at32ucr2-speed_opt.a differ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/LINKER_SCRIPTS/AT32UC3A/0512/GCC/link_uc3a0512.lds b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/LINKER_SCRIPTS/AT32UC3A/0512/GCC/link_uc3a0512.lds new file mode 100644 index 000000000..59152ac0b --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/LINKER_SCRIPTS/AT32UC3A/0512/GCC/link_uc3a0512.lds @@ -0,0 +1,266 @@ +/****************************************************************************** + * AVR32 AT32UC3A0512 GNU LD script file. + * + * - Compiler: GNU GCC for AVR32 + * - Supported devices: AVR32 AT32UC3A0512 + * + * - author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +OUTPUT_FORMAT("elf32-avr32", "elf32-avr32", "elf32-avr32") + +OUTPUT_ARCH(avr32:uc) + +ENTRY(_start) + +MEMORY +{ + FLASH (rxai!w) : ORIGIN = 0x80000000, LENGTH = 0x00080000 + INTRAM (wxa!ri) : ORIGIN = 0x00000004, LENGTH = 0x0000FFFC + USERPAGE : ORIGIN = 0x80800000, LENGTH = 0x00000200 +} + +PHDRS +{ + FLASH PT_LOAD; + INTRAM_ALIGN PT_NULL; + INTRAM_AT_FLASH PT_LOAD; + INTRAM PT_NULL; + USERPAGE PT_LOAD; +} + +SECTIONS +{ + /* If this heap size is selected, all the INTRAM space from the end of the + data area to the beginning of the stack will be allocated for the heap. */ + __max_heap_size__ = -1; + + /* Use a default heap size if heap size was not defined. */ + __heap_size__ = DEFINED(__heap_size__) ? __heap_size__ : __max_heap_size__; + + /* Use a default stack size if stack size was not defined. */ + __stack_size__ = DEFINED(__stack_size__) ? __stack_size__ : 4K; + + /* Read-only sections, merged into text segment: */ + PROVIDE (__executable_start = 0x80000000); . = 0x80000000; + .interp : { *(.interp) } >FLASH AT>FLASH :FLASH + .reset : { *(.reset) } >FLASH AT>FLASH :FLASH + .hash : { *(.hash) } >FLASH AT>FLASH :FLASH + .dynsym : { *(.dynsym) } >FLASH AT>FLASH :FLASH + .dynstr : { *(.dynstr) } >FLASH AT>FLASH :FLASH + .gnu.version : { *(.gnu.version) } >FLASH AT>FLASH :FLASH + .gnu.version_d : { *(.gnu.version_d) } >FLASH AT>FLASH :FLASH + .gnu.version_r : { *(.gnu.version_r) } >FLASH AT>FLASH :FLASH + .rel.init : { *(.rel.init) } >FLASH AT>FLASH :FLASH + .rela.init : { *(.rela.init) } >FLASH AT>FLASH :FLASH + .rel.text : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) } >FLASH AT>FLASH :FLASH + .rela.text : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) } >FLASH AT>FLASH :FLASH + .rel.fini : { *(.rel.fini) } >FLASH AT>FLASH :FLASH + .rela.fini : { *(.rela.fini) } >FLASH AT>FLASH :FLASH + .rel.rodata : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) } >FLASH AT>FLASH :FLASH + .rela.rodata : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) } >FLASH AT>FLASH :FLASH + .rel.data.rel.ro : { *(.rel.data.rel.ro*) } >FLASH AT>FLASH :FLASH + .rela.data.rel.ro : { *(.rel.data.rel.ro*) } >FLASH AT>FLASH :FLASH + .rel.data : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) } >FLASH AT>FLASH :FLASH + .rela.data : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) } >FLASH AT>FLASH :FLASH + .rel.tdata : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) } >FLASH AT>FLASH :FLASH + .rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) } >FLASH AT>FLASH :FLASH + .rel.tbss : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) } >FLASH AT>FLASH :FLASH + .rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) } >FLASH AT>FLASH :FLASH + .rel.ctors : { *(.rel.ctors) } >FLASH AT>FLASH :FLASH + .rela.ctors : { *(.rela.ctors) } >FLASH AT>FLASH :FLASH + .rel.dtors : { *(.rel.dtors) } >FLASH AT>FLASH :FLASH + .rela.dtors : { *(.rela.dtors) } >FLASH AT>FLASH :FLASH + .rel.got : { *(.rel.got) } >FLASH AT>FLASH :FLASH + .rela.got : { *(.rela.got) } >FLASH AT>FLASH :FLASH + .rel.bss : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) } >FLASH AT>FLASH :FLASH + .rela.bss : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) } >FLASH AT>FLASH :FLASH + .rel.plt : { *(.rel.plt) } >FLASH AT>FLASH :FLASH + .rela.plt : { *(.rela.plt) } >FLASH AT>FLASH :FLASH + .init : + { + KEEP (*(.init)) + } >FLASH AT>FLASH :FLASH =0xd703d703 + .plt : { *(.plt) } >FLASH AT>FLASH :FLASH + .text : + { + *(.text .stub .text.* .gnu.linkonce.t.*) + KEEP (*(.text.*personality*)) + /* .gnu.warning sections are handled specially by elf32.em. */ + *(.gnu.warning) + } >FLASH AT>FLASH :FLASH =0xd703d703 + .fini : + { + KEEP (*(.fini)) + } >FLASH AT>FLASH :FLASH =0xd703d703 + PROVIDE (__etext = .); + PROVIDE (_etext = .); + PROVIDE (etext = .); + .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } >FLASH AT>FLASH :FLASH + .rodata1 : { *(.rodata1) } >FLASH AT>FLASH :FLASH + .eh_frame_hdr : { *(.eh_frame_hdr) } >FLASH AT>FLASH :FLASH + .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) } >FLASH AT>FLASH :FLASH + .gcc_except_table : ONLY_IF_RO { KEEP (*(.gcc_except_table)) *(.gcc_except_table.*) } >FLASH AT>FLASH :FLASH + .lalign : { . = ALIGN(8); PROVIDE(_data_lma = .); } >FLASH AT>FLASH :FLASH + . = ORIGIN(INTRAM); + .dalign : { . = ALIGN(8); PROVIDE(_data = .); } >INTRAM AT>INTRAM :INTRAM_ALIGN + /* Exception handling */ + .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .gcc_except_table : ONLY_IF_RW { KEEP (*(.gcc_except_table)) *(.gcc_except_table.*) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + /* Thread Local Storage sections */ + .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + /* Ensure the __preinit_array_start label is properly aligned. We + could instead move the label definition inside the section, but + the linker would then create the section even if it turns out to + be empty, which isn't pretty. */ + PROVIDE (__preinit_array_start = ALIGN(32 / 8)); + .preinit_array : { KEEP (*(.preinit_array)) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + PROVIDE (__preinit_array_end = .); + PROVIDE (__init_array_start = .); + .init_array : { KEEP (*(.init_array)) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + PROVIDE (__init_array_end = .); + PROVIDE (__fini_array_start = .); + .fini_array : { KEEP (*(.fini_array)) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + PROVIDE (__fini_array_end = .); + .ctors : + { + /* gcc uses crtbegin.o to find the start of + the constructors, so we make sure it is + first. Because this is a wildcard, it + doesn't matter if the user does not + actually link against crtbegin.o; the + linker won't look for a file to match a + wildcard. The wildcard also means that it + doesn't matter which directory crtbegin.o + is in. */ + KEEP (*crtbegin*.o(.ctors)) + /* We don't want to include the .ctor section from + from the crtend.o file until after the sorted ctors. + The .ctor section from the crtend file contains the + end of ctors marker and it must be last */ + KEEP (*(EXCLUDE_FILE (*crtend*.o ) .ctors)) + KEEP (*(SORT(.ctors.*))) + KEEP (*(.ctors)) + } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .dtors : + { + KEEP (*crtbegin*.o(.dtors)) + KEEP (*(EXCLUDE_FILE (*crtend*.o ) .dtors)) + KEEP (*(SORT(.dtors.*))) + KEEP (*(.dtors)) + } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .jcr : { KEEP (*(.jcr)) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .data.rel.ro : { *(.data.rel.ro.local) *(.data.rel.ro*) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .dynamic : { *(.dynamic) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .got : { *(.got.plt) *(.got) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .ramtext : { *(.ramtext .ramtext.*) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .ddalign : { . = ALIGN(8); } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .data : + { + *(.data .data.* .gnu.linkonce.d.*) + KEEP (*(.gnu.linkonce.d.*personality*)) + SORT(CONSTRUCTORS) + } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .data1 : { *(.data1) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .balign : { . = ALIGN(8); PROVIDE(_edata = .); } >INTRAM AT>FLASH :INTRAM_AT_FLASH + PROVIDE (edata = .); + __bss_start = .; + .bss : + { + *(.dynbss) + *(.bss .bss.* .gnu.linkonce.b.*) + *(COMMON) + /* Align here to ensure that the .bss section occupies space up to + _end. Align after .bss to ensure correct alignment even if the + .bss section disappears because there are no input sections. */ + . = ALIGN(8); + } >INTRAM AT>INTRAM :INTRAM + . = ALIGN(8); + _end = .; + PROVIDE (end = .); + __heap_start__ = ALIGN(8); + .heap : + { + *(.heap) + . = (__heap_size__ == __max_heap_size__) ? + ORIGIN(INTRAM) + LENGTH(INTRAM) - __stack_size__ - ABSOLUTE(.) : + __heap_size__; + } >INTRAM AT>INTRAM :INTRAM + __heap_end__ = .; + /* Stabs debugging sections. */ + .stab 0 : { *(.stab) } + .stabstr 0 : { *(.stabstr) } + .stab.excl 0 : { *(.stab.excl) } + .stab.exclstr 0 : { *(.stab.exclstr) } + .stab.index 0 : { *(.stab.index) } + .stab.indexstr 0 : { *(.stab.indexstr) } + .comment 0 : { *(.comment) } + /* DWARF debug sections. + Symbols in the DWARF debugging sections are relative to the beginning + of the section so we begin them at 0. */ + /* DWARF 1 */ + .debug 0 : { *(.debug) } + .line 0 : { *(.line) } + /* GNU DWARF 1 extensions */ + .debug_srcinfo 0 : { *(.debug_srcinfo) } + .debug_sfnames 0 : { *(.debug_sfnames) } + /* DWARF 1.1 and DWARF 2 */ + .debug_aranges 0 : { *(.debug_aranges) } + .debug_pubnames 0 : { *(.debug_pubnames) } + /* DWARF 2 */ + .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } + .debug_abbrev 0 : { *(.debug_abbrev) } + .debug_line 0 : { *(.debug_line) } + .debug_frame 0 : { *(.debug_frame) } + .debug_str 0 : { *(.debug_str) } + .debug_loc 0 : { *(.debug_loc) } + .debug_macinfo 0 : { *(.debug_macinfo) } + /* SGI/MIPS DWARF 2 extensions */ + .debug_weaknames 0 : { *(.debug_weaknames) } + .debug_funcnames 0 : { *(.debug_funcnames) } + .debug_typenames 0 : { *(.debug_typenames) } + .debug_varnames 0 : { *(.debug_varnames) } + .stack ORIGIN(INTRAM) + LENGTH(INTRAM) - __stack_size__ : + { + _stack = .; + *(.stack) + . = __stack_size__; + _estack = .; + } >INTRAM AT>INTRAM :INTRAM + .userpage : { *(.userpage .userpage.*) } >USERPAGE AT>USERPAGE :USERPAGE + /DISCARD/ : { *(.note.GNU-stack) } +} diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/LINKER_SCRIPTS/AT32UC3A/1256/GCC/link_uc3a1256.lds b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/LINKER_SCRIPTS/AT32UC3A/1256/GCC/link_uc3a1256.lds new file mode 100644 index 000000000..a5926d8be --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/LINKER_SCRIPTS/AT32UC3A/1256/GCC/link_uc3a1256.lds @@ -0,0 +1,266 @@ +/****************************************************************************** + * AVR32 AT32UC3A1256 GNU LD script file. + * + * - Compiler: GNU GCC for AVR32 + * - Supported devices: AVR32 AT32UC3A1256 + * + * - author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +OUTPUT_FORMAT("elf32-avr32", "elf32-avr32", "elf32-avr32") + +OUTPUT_ARCH(avr32:uc) + +ENTRY(_start) + +MEMORY +{ + FLASH (rxai!w) : ORIGIN = 0x80000000, LENGTH = 0x00040000 + INTRAM (wxa!ri) : ORIGIN = 0x00000004, LENGTH = 0x0000FFFC + USERPAGE : ORIGIN = 0x80800000, LENGTH = 0x00000200 +} + +PHDRS +{ + FLASH PT_LOAD; + INTRAM_ALIGN PT_NULL; + INTRAM_AT_FLASH PT_LOAD; + INTRAM PT_NULL; + USERPAGE PT_LOAD; +} + +SECTIONS +{ + /* If this heap size is selected, all the INTRAM space from the end of the + data area to the beginning of the stack will be allocated for the heap. */ + __max_heap_size__ = -1; + + /* Use a default heap size if heap size was not defined. */ + __heap_size__ = DEFINED(__heap_size__) ? __heap_size__ : __max_heap_size__; + + /* Use a default stack size if stack size was not defined. */ + __stack_size__ = DEFINED(__stack_size__) ? __stack_size__ : 4K; + + /* Read-only sections, merged into text segment: */ + PROVIDE (__executable_start = 0x80000000); . = 0x80000000; + .interp : { *(.interp) } >FLASH AT>FLASH :FLASH + .reset : { *(.reset) } >FLASH AT>FLASH :FLASH + .hash : { *(.hash) } >FLASH AT>FLASH :FLASH + .dynsym : { *(.dynsym) } >FLASH AT>FLASH :FLASH + .dynstr : { *(.dynstr) } >FLASH AT>FLASH :FLASH + .gnu.version : { *(.gnu.version) } >FLASH AT>FLASH :FLASH + .gnu.version_d : { *(.gnu.version_d) } >FLASH AT>FLASH :FLASH + .gnu.version_r : { *(.gnu.version_r) } >FLASH AT>FLASH :FLASH + .rel.init : { *(.rel.init) } >FLASH AT>FLASH :FLASH + .rela.init : { *(.rela.init) } >FLASH AT>FLASH :FLASH + .rel.text : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) } >FLASH AT>FLASH :FLASH + .rela.text : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) } >FLASH AT>FLASH :FLASH + .rel.fini : { *(.rel.fini) } >FLASH AT>FLASH :FLASH + .rela.fini : { *(.rela.fini) } >FLASH AT>FLASH :FLASH + .rel.rodata : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) } >FLASH AT>FLASH :FLASH + .rela.rodata : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) } >FLASH AT>FLASH :FLASH + .rel.data.rel.ro : { *(.rel.data.rel.ro*) } >FLASH AT>FLASH :FLASH + .rela.data.rel.ro : { *(.rel.data.rel.ro*) } >FLASH AT>FLASH :FLASH + .rel.data : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) } >FLASH AT>FLASH :FLASH + .rela.data : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) } >FLASH AT>FLASH :FLASH + .rel.tdata : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) } >FLASH AT>FLASH :FLASH + .rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) } >FLASH AT>FLASH :FLASH + .rel.tbss : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) } >FLASH AT>FLASH :FLASH + .rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) } >FLASH AT>FLASH :FLASH + .rel.ctors : { *(.rel.ctors) } >FLASH AT>FLASH :FLASH + .rela.ctors : { *(.rela.ctors) } >FLASH AT>FLASH :FLASH + .rel.dtors : { *(.rel.dtors) } >FLASH AT>FLASH :FLASH + .rela.dtors : { *(.rela.dtors) } >FLASH AT>FLASH :FLASH + .rel.got : { *(.rel.got) } >FLASH AT>FLASH :FLASH + .rela.got : { *(.rela.got) } >FLASH AT>FLASH :FLASH + .rel.bss : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) } >FLASH AT>FLASH :FLASH + .rela.bss : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) } >FLASH AT>FLASH :FLASH + .rel.plt : { *(.rel.plt) } >FLASH AT>FLASH :FLASH + .rela.plt : { *(.rela.plt) } >FLASH AT>FLASH :FLASH + .init : + { + KEEP (*(.init)) + } >FLASH AT>FLASH :FLASH =0xd703d703 + .plt : { *(.plt) } >FLASH AT>FLASH :FLASH + .text : + { + *(.text .stub .text.* .gnu.linkonce.t.*) + KEEP (*(.text.*personality*)) + /* .gnu.warning sections are handled specially by elf32.em. */ + *(.gnu.warning) + } >FLASH AT>FLASH :FLASH =0xd703d703 + .fini : + { + KEEP (*(.fini)) + } >FLASH AT>FLASH :FLASH =0xd703d703 + PROVIDE (__etext = .); + PROVIDE (_etext = .); + PROVIDE (etext = .); + .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } >FLASH AT>FLASH :FLASH + .rodata1 : { *(.rodata1) } >FLASH AT>FLASH :FLASH + .eh_frame_hdr : { *(.eh_frame_hdr) } >FLASH AT>FLASH :FLASH + .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) } >FLASH AT>FLASH :FLASH + .gcc_except_table : ONLY_IF_RO { KEEP (*(.gcc_except_table)) *(.gcc_except_table.*) } >FLASH AT>FLASH :FLASH + .lalign : { . = ALIGN(8); PROVIDE(_data_lma = .); } >FLASH AT>FLASH :FLASH + . = ORIGIN(INTRAM); + .dalign : { . = ALIGN(8); PROVIDE(_data = .); } >INTRAM AT>INTRAM :INTRAM_ALIGN + /* Exception handling */ + .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .gcc_except_table : ONLY_IF_RW { KEEP (*(.gcc_except_table)) *(.gcc_except_table.*) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + /* Thread Local Storage sections */ + .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + /* Ensure the __preinit_array_start label is properly aligned. We + could instead move the label definition inside the section, but + the linker would then create the section even if it turns out to + be empty, which isn't pretty. */ + PROVIDE (__preinit_array_start = ALIGN(32 / 8)); + .preinit_array : { KEEP (*(.preinit_array)) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + PROVIDE (__preinit_array_end = .); + PROVIDE (__init_array_start = .); + .init_array : { KEEP (*(.init_array)) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + PROVIDE (__init_array_end = .); + PROVIDE (__fini_array_start = .); + .fini_array : { KEEP (*(.fini_array)) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + PROVIDE (__fini_array_end = .); + .ctors : + { + /* gcc uses crtbegin.o to find the start of + the constructors, so we make sure it is + first. Because this is a wildcard, it + doesn't matter if the user does not + actually link against crtbegin.o; the + linker won't look for a file to match a + wildcard. The wildcard also means that it + doesn't matter which directory crtbegin.o + is in. */ + KEEP (*crtbegin*.o(.ctors)) + /* We don't want to include the .ctor section from + from the crtend.o file until after the sorted ctors. + The .ctor section from the crtend file contains the + end of ctors marker and it must be last */ + KEEP (*(EXCLUDE_FILE (*crtend*.o ) .ctors)) + KEEP (*(SORT(.ctors.*))) + KEEP (*(.ctors)) + } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .dtors : + { + KEEP (*crtbegin*.o(.dtors)) + KEEP (*(EXCLUDE_FILE (*crtend*.o ) .dtors)) + KEEP (*(SORT(.dtors.*))) + KEEP (*(.dtors)) + } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .jcr : { KEEP (*(.jcr)) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .data.rel.ro : { *(.data.rel.ro.local) *(.data.rel.ro*) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .dynamic : { *(.dynamic) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .got : { *(.got.plt) *(.got) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .ramtext : { *(.ramtext .ramtext.*) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .ddalign : { . = ALIGN(8); } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .data : + { + *(.data .data.* .gnu.linkonce.d.*) + KEEP (*(.gnu.linkonce.d.*personality*)) + SORT(CONSTRUCTORS) + } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .data1 : { *(.data1) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .balign : { . = ALIGN(8); PROVIDE(_edata = .); } >INTRAM AT>FLASH :INTRAM_AT_FLASH + PROVIDE (edata = .); + __bss_start = .; + .bss : + { + *(.dynbss) + *(.bss .bss.* .gnu.linkonce.b.*) + *(COMMON) + /* Align here to ensure that the .bss section occupies space up to + _end. Align after .bss to ensure correct alignment even if the + .bss section disappears because there are no input sections. */ + . = ALIGN(8); + } >INTRAM AT>INTRAM :INTRAM + . = ALIGN(8); + _end = .; + PROVIDE (end = .); + __heap_start__ = ALIGN(8); + .heap : + { + *(.heap) + . = (__heap_size__ == __max_heap_size__) ? + ORIGIN(INTRAM) + LENGTH(INTRAM) - __stack_size__ - ABSOLUTE(.) : + __heap_size__; + } >INTRAM AT>INTRAM :INTRAM + __heap_end__ = .; + /* Stabs debugging sections. */ + .stab 0 : { *(.stab) } + .stabstr 0 : { *(.stabstr) } + .stab.excl 0 : { *(.stab.excl) } + .stab.exclstr 0 : { *(.stab.exclstr) } + .stab.index 0 : { *(.stab.index) } + .stab.indexstr 0 : { *(.stab.indexstr) } + .comment 0 : { *(.comment) } + /* DWARF debug sections. + Symbols in the DWARF debugging sections are relative to the beginning + of the section so we begin them at 0. */ + /* DWARF 1 */ + .debug 0 : { *(.debug) } + .line 0 : { *(.line) } + /* GNU DWARF 1 extensions */ + .debug_srcinfo 0 : { *(.debug_srcinfo) } + .debug_sfnames 0 : { *(.debug_sfnames) } + /* DWARF 1.1 and DWARF 2 */ + .debug_aranges 0 : { *(.debug_aranges) } + .debug_pubnames 0 : { *(.debug_pubnames) } + /* DWARF 2 */ + .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } + .debug_abbrev 0 : { *(.debug_abbrev) } + .debug_line 0 : { *(.debug_line) } + .debug_frame 0 : { *(.debug_frame) } + .debug_str 0 : { *(.debug_str) } + .debug_loc 0 : { *(.debug_loc) } + .debug_macinfo 0 : { *(.debug_macinfo) } + /* SGI/MIPS DWARF 2 extensions */ + .debug_weaknames 0 : { *(.debug_weaknames) } + .debug_funcnames 0 : { *(.debug_funcnames) } + .debug_typenames 0 : { *(.debug_typenames) } + .debug_varnames 0 : { *(.debug_varnames) } + .stack ORIGIN(INTRAM) + LENGTH(INTRAM) - __stack_size__ : + { + _stack = .; + *(.stack) + . = __stack_size__; + _estack = .; + } >INTRAM AT>INTRAM :INTRAM + .userpage : { *(.userpage .userpage.*) } >USERPAGE AT>USERPAGE :USERPAGE + /DISCARD/ : { *(.note.GNU-stack) } +} diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR/mrepeat.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR/mrepeat.h new file mode 100644 index 000000000..41163b6d9 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR/mrepeat.h @@ -0,0 +1,328 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Preprocessor macro repeating utils. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _MREPEAT_H_ +#define _MREPEAT_H_ + +#include "preprocessor.h" + + +//! Maximal number of repetitions supported by MREPEAT. +#define MREPEAT_LIMIT 256 + +/*! \brief Macro repeat. + * + * This macro represents a horizontal repetition construct. + * + * \param count The number of repetitious calls to macro. Valid values range from 0 to MREPEAT_LIMIT. + * \param macro A binary operation of the form macro(n, data). This macro is expanded by MREPEAT with + * the current repetition number and the auxiliary data argument. + * \param data Auxiliary data passed to macro. + * + * \return macro(0, data) macro(1, data) ... macro(count - 1, data) + */ +#define MREPEAT(count, macro, data) TPASTE2(MREPEAT, count)(macro, data) + +#define MREPEAT0( macro, data) +#define MREPEAT1( macro, data) MREPEAT0( macro, data) macro( 0, data) +#define MREPEAT2( macro, data) MREPEAT1( macro, data) macro( 1, data) +#define MREPEAT3( macro, data) MREPEAT2( macro, data) macro( 2, data) +#define MREPEAT4( macro, data) MREPEAT3( macro, data) macro( 3, data) +#define MREPEAT5( macro, data) MREPEAT4( macro, data) macro( 4, data) +#define MREPEAT6( macro, data) MREPEAT5( macro, data) macro( 5, data) +#define MREPEAT7( macro, data) MREPEAT6( macro, data) macro( 6, data) +#define MREPEAT8( macro, data) MREPEAT7( macro, data) macro( 7, data) +#define MREPEAT9( macro, data) MREPEAT8( macro, data) macro( 8, data) +#define MREPEAT10( macro, data) MREPEAT9( macro, data) macro( 9, data) +#define MREPEAT11( macro, data) MREPEAT10( macro, data) macro( 10, data) +#define MREPEAT12( macro, data) MREPEAT11( macro, data) macro( 11, data) +#define MREPEAT13( macro, data) MREPEAT12( macro, data) macro( 12, data) +#define MREPEAT14( macro, data) MREPEAT13( macro, data) macro( 13, data) +#define MREPEAT15( macro, data) MREPEAT14( macro, data) macro( 14, data) +#define MREPEAT16( macro, data) MREPEAT15( macro, data) macro( 15, data) +#define MREPEAT17( macro, data) MREPEAT16( macro, data) macro( 16, data) +#define MREPEAT18( macro, data) MREPEAT17( macro, data) macro( 17, data) +#define MREPEAT19( macro, data) MREPEAT18( macro, data) macro( 18, data) +#define MREPEAT20( macro, data) MREPEAT19( macro, data) macro( 19, data) +#define MREPEAT21( macro, data) MREPEAT20( macro, data) macro( 20, data) +#define MREPEAT22( macro, data) MREPEAT21( macro, data) macro( 21, data) +#define MREPEAT23( macro, data) MREPEAT22( macro, data) macro( 22, data) +#define MREPEAT24( macro, data) MREPEAT23( macro, data) macro( 23, data) +#define MREPEAT25( macro, data) MREPEAT24( macro, data) macro( 24, data) +#define MREPEAT26( macro, data) MREPEAT25( macro, data) macro( 25, data) +#define MREPEAT27( macro, data) MREPEAT26( macro, data) macro( 26, data) +#define MREPEAT28( macro, data) MREPEAT27( macro, data) macro( 27, data) +#define MREPEAT29( macro, data) MREPEAT28( macro, data) macro( 28, data) +#define MREPEAT30( macro, data) MREPEAT29( macro, data) macro( 29, data) +#define MREPEAT31( macro, data) MREPEAT30( macro, data) macro( 30, data) +#define MREPEAT32( macro, data) MREPEAT31( macro, data) macro( 31, data) +#define MREPEAT33( macro, data) MREPEAT32( macro, data) macro( 32, data) +#define MREPEAT34( macro, data) MREPEAT33( macro, data) macro( 33, data) +#define MREPEAT35( macro, data) MREPEAT34( macro, data) macro( 34, data) +#define MREPEAT36( macro, data) MREPEAT35( macro, data) macro( 35, data) +#define MREPEAT37( macro, data) MREPEAT36( macro, data) macro( 36, data) +#define MREPEAT38( macro, data) MREPEAT37( macro, data) macro( 37, data) +#define MREPEAT39( macro, data) MREPEAT38( macro, data) macro( 38, data) +#define MREPEAT40( macro, data) MREPEAT39( macro, data) macro( 39, data) +#define MREPEAT41( macro, data) MREPEAT40( macro, data) macro( 40, data) +#define MREPEAT42( macro, data) MREPEAT41( macro, data) macro( 41, data) +#define MREPEAT43( macro, data) MREPEAT42( macro, data) macro( 42, data) +#define MREPEAT44( macro, data) MREPEAT43( macro, data) macro( 43, data) +#define MREPEAT45( macro, data) MREPEAT44( macro, data) macro( 44, data) +#define MREPEAT46( macro, data) MREPEAT45( macro, data) macro( 45, data) +#define MREPEAT47( macro, data) MREPEAT46( macro, data) macro( 46, data) +#define MREPEAT48( macro, data) MREPEAT47( macro, data) macro( 47, data) +#define MREPEAT49( macro, data) MREPEAT48( macro, data) macro( 48, data) +#define MREPEAT50( macro, data) MREPEAT49( macro, data) macro( 49, data) +#define MREPEAT51( macro, data) MREPEAT50( macro, data) macro( 50, data) +#define MREPEAT52( macro, data) MREPEAT51( macro, data) macro( 51, data) +#define MREPEAT53( macro, data) MREPEAT52( macro, data) macro( 52, data) +#define MREPEAT54( macro, data) MREPEAT53( macro, data) macro( 53, data) +#define MREPEAT55( macro, data) MREPEAT54( macro, data) macro( 54, data) +#define MREPEAT56( macro, data) MREPEAT55( macro, data) macro( 55, data) +#define MREPEAT57( macro, data) MREPEAT56( macro, data) macro( 56, data) +#define MREPEAT58( macro, data) MREPEAT57( macro, data) macro( 57, data) +#define MREPEAT59( macro, data) MREPEAT58( macro, data) macro( 58, data) +#define MREPEAT60( macro, data) MREPEAT59( macro, data) macro( 59, data) +#define MREPEAT61( macro, data) MREPEAT60( macro, data) macro( 60, data) +#define MREPEAT62( macro, data) MREPEAT61( macro, data) macro( 61, data) +#define MREPEAT63( macro, data) MREPEAT62( macro, data) macro( 62, data) +#define MREPEAT64( macro, data) MREPEAT63( macro, data) macro( 63, data) +#define MREPEAT65( macro, data) MREPEAT64( macro, data) macro( 64, data) +#define MREPEAT66( macro, data) MREPEAT65( macro, data) macro( 65, data) +#define MREPEAT67( macro, data) MREPEAT66( macro, data) macro( 66, data) +#define MREPEAT68( macro, data) MREPEAT67( macro, data) macro( 67, data) +#define MREPEAT69( macro, data) MREPEAT68( macro, data) macro( 68, data) +#define MREPEAT70( macro, data) MREPEAT69( macro, data) macro( 69, data) +#define MREPEAT71( macro, data) MREPEAT70( macro, data) macro( 70, data) +#define MREPEAT72( macro, data) MREPEAT71( macro, data) macro( 71, data) +#define MREPEAT73( macro, data) MREPEAT72( macro, data) macro( 72, data) +#define MREPEAT74( macro, data) MREPEAT73( macro, data) macro( 73, data) +#define MREPEAT75( macro, data) MREPEAT74( macro, data) macro( 74, data) +#define MREPEAT76( macro, data) MREPEAT75( macro, data) macro( 75, data) +#define MREPEAT77( macro, data) MREPEAT76( macro, data) macro( 76, data) +#define MREPEAT78( macro, data) MREPEAT77( macro, data) macro( 77, data) +#define MREPEAT79( macro, data) MREPEAT78( macro, data) macro( 78, data) +#define MREPEAT80( macro, data) MREPEAT79( macro, data) macro( 79, data) +#define MREPEAT81( macro, data) MREPEAT80( macro, data) macro( 80, data) +#define MREPEAT82( macro, data) MREPEAT81( macro, data) macro( 81, data) +#define MREPEAT83( macro, data) MREPEAT82( macro, data) macro( 82, data) +#define MREPEAT84( macro, data) MREPEAT83( macro, data) macro( 83, data) +#define MREPEAT85( macro, data) MREPEAT84( macro, data) macro( 84, data) +#define MREPEAT86( macro, data) MREPEAT85( macro, data) macro( 85, data) +#define MREPEAT87( macro, data) MREPEAT86( macro, data) macro( 86, data) +#define MREPEAT88( macro, data) MREPEAT87( macro, data) macro( 87, data) +#define MREPEAT89( macro, data) MREPEAT88( macro, data) macro( 88, data) +#define MREPEAT90( macro, data) MREPEAT89( macro, data) macro( 89, data) +#define MREPEAT91( macro, data) MREPEAT90( macro, data) macro( 90, data) +#define MREPEAT92( macro, data) MREPEAT91( macro, data) macro( 91, data) +#define MREPEAT93( macro, data) MREPEAT92( macro, data) macro( 92, data) +#define MREPEAT94( macro, data) MREPEAT93( macro, data) macro( 93, data) +#define MREPEAT95( macro, data) MREPEAT94( macro, data) macro( 94, data) +#define MREPEAT96( macro, data) MREPEAT95( macro, data) macro( 95, data) +#define MREPEAT97( macro, data) MREPEAT96( macro, data) macro( 96, data) +#define MREPEAT98( macro, data) MREPEAT97( macro, data) macro( 97, data) +#define MREPEAT99( macro, data) MREPEAT98( macro, data) macro( 98, data) +#define MREPEAT100(macro, data) MREPEAT99( macro, data) macro( 99, data) +#define MREPEAT101(macro, data) MREPEAT100(macro, data) macro(100, data) +#define MREPEAT102(macro, data) MREPEAT101(macro, data) macro(101, data) +#define MREPEAT103(macro, data) MREPEAT102(macro, data) macro(102, data) +#define MREPEAT104(macro, data) MREPEAT103(macro, data) macro(103, data) +#define MREPEAT105(macro, data) MREPEAT104(macro, data) macro(104, data) +#define MREPEAT106(macro, data) MREPEAT105(macro, data) macro(105, data) +#define MREPEAT107(macro, data) MREPEAT106(macro, data) macro(106, data) +#define MREPEAT108(macro, data) MREPEAT107(macro, data) macro(107, data) +#define MREPEAT109(macro, data) MREPEAT108(macro, data) macro(108, data) +#define MREPEAT110(macro, data) MREPEAT109(macro, data) macro(109, data) +#define MREPEAT111(macro, data) MREPEAT110(macro, data) macro(110, data) +#define MREPEAT112(macro, data) MREPEAT111(macro, data) macro(111, data) +#define MREPEAT113(macro, data) MREPEAT112(macro, data) macro(112, data) +#define MREPEAT114(macro, data) MREPEAT113(macro, data) macro(113, data) +#define MREPEAT115(macro, data) MREPEAT114(macro, data) macro(114, data) +#define MREPEAT116(macro, data) MREPEAT115(macro, data) macro(115, data) +#define MREPEAT117(macro, data) MREPEAT116(macro, data) macro(116, data) +#define MREPEAT118(macro, data) MREPEAT117(macro, data) macro(117, data) +#define MREPEAT119(macro, data) MREPEAT118(macro, data) macro(118, data) +#define MREPEAT120(macro, data) MREPEAT119(macro, data) macro(119, data) +#define MREPEAT121(macro, data) MREPEAT120(macro, data) macro(120, data) +#define MREPEAT122(macro, data) MREPEAT121(macro, data) macro(121, data) +#define MREPEAT123(macro, data) MREPEAT122(macro, data) macro(122, data) +#define MREPEAT124(macro, data) MREPEAT123(macro, data) macro(123, data) +#define MREPEAT125(macro, data) MREPEAT124(macro, data) macro(124, data) +#define MREPEAT126(macro, data) MREPEAT125(macro, data) macro(125, data) +#define MREPEAT127(macro, data) MREPEAT126(macro, data) macro(126, data) +#define MREPEAT128(macro, data) MREPEAT127(macro, data) macro(127, data) +#define MREPEAT129(macro, data) MREPEAT128(macro, data) macro(128, data) +#define MREPEAT130(macro, data) MREPEAT129(macro, data) macro(129, data) +#define MREPEAT131(macro, data) MREPEAT130(macro, data) macro(130, data) +#define MREPEAT132(macro, data) MREPEAT131(macro, data) macro(131, data) +#define MREPEAT133(macro, data) MREPEAT132(macro, data) macro(132, data) +#define MREPEAT134(macro, data) MREPEAT133(macro, data) macro(133, data) +#define MREPEAT135(macro, data) MREPEAT134(macro, data) macro(134, data) +#define MREPEAT136(macro, data) MREPEAT135(macro, data) macro(135, data) +#define MREPEAT137(macro, data) MREPEAT136(macro, data) macro(136, data) +#define MREPEAT138(macro, data) MREPEAT137(macro, data) macro(137, data) +#define MREPEAT139(macro, data) MREPEAT138(macro, data) macro(138, data) +#define MREPEAT140(macro, data) MREPEAT139(macro, data) macro(139, data) +#define MREPEAT141(macro, data) MREPEAT140(macro, data) macro(140, data) +#define MREPEAT142(macro, data) MREPEAT141(macro, data) macro(141, data) +#define MREPEAT143(macro, data) MREPEAT142(macro, data) macro(142, data) +#define MREPEAT144(macro, data) MREPEAT143(macro, data) macro(143, data) +#define MREPEAT145(macro, data) MREPEAT144(macro, data) macro(144, data) +#define MREPEAT146(macro, data) MREPEAT145(macro, data) macro(145, data) +#define MREPEAT147(macro, data) MREPEAT146(macro, data) macro(146, data) +#define MREPEAT148(macro, data) MREPEAT147(macro, data) macro(147, data) +#define MREPEAT149(macro, data) MREPEAT148(macro, data) macro(148, data) +#define MREPEAT150(macro, data) MREPEAT149(macro, data) macro(149, data) +#define MREPEAT151(macro, data) MREPEAT150(macro, data) macro(150, data) +#define MREPEAT152(macro, data) MREPEAT151(macro, data) macro(151, data) +#define MREPEAT153(macro, data) MREPEAT152(macro, data) macro(152, data) +#define MREPEAT154(macro, data) MREPEAT153(macro, data) macro(153, data) +#define MREPEAT155(macro, data) MREPEAT154(macro, data) macro(154, data) +#define MREPEAT156(macro, data) MREPEAT155(macro, data) macro(155, data) +#define MREPEAT157(macro, data) MREPEAT156(macro, data) macro(156, data) +#define MREPEAT158(macro, data) MREPEAT157(macro, data) macro(157, data) +#define MREPEAT159(macro, data) MREPEAT158(macro, data) macro(158, data) +#define MREPEAT160(macro, data) MREPEAT159(macro, data) macro(159, data) +#define MREPEAT161(macro, data) MREPEAT160(macro, data) macro(160, data) +#define MREPEAT162(macro, data) MREPEAT161(macro, data) macro(161, data) +#define MREPEAT163(macro, data) MREPEAT162(macro, data) macro(162, data) +#define MREPEAT164(macro, data) MREPEAT163(macro, data) macro(163, data) +#define MREPEAT165(macro, data) MREPEAT164(macro, data) macro(164, data) +#define MREPEAT166(macro, data) MREPEAT165(macro, data) macro(165, data) +#define MREPEAT167(macro, data) MREPEAT166(macro, data) macro(166, data) +#define MREPEAT168(macro, data) MREPEAT167(macro, data) macro(167, data) +#define MREPEAT169(macro, data) MREPEAT168(macro, data) macro(168, data) +#define MREPEAT170(macro, data) MREPEAT169(macro, data) macro(169, data) +#define MREPEAT171(macro, data) MREPEAT170(macro, data) macro(170, data) +#define MREPEAT172(macro, data) MREPEAT171(macro, data) macro(171, data) +#define MREPEAT173(macro, data) MREPEAT172(macro, data) macro(172, data) +#define MREPEAT174(macro, data) MREPEAT173(macro, data) macro(173, data) +#define MREPEAT175(macro, data) MREPEAT174(macro, data) macro(174, data) +#define MREPEAT176(macro, data) MREPEAT175(macro, data) macro(175, data) +#define MREPEAT177(macro, data) MREPEAT176(macro, data) macro(176, data) +#define MREPEAT178(macro, data) MREPEAT177(macro, data) macro(177, data) +#define MREPEAT179(macro, data) MREPEAT178(macro, data) macro(178, data) +#define MREPEAT180(macro, data) MREPEAT179(macro, data) macro(179, data) +#define MREPEAT181(macro, data) MREPEAT180(macro, data) macro(180, data) +#define MREPEAT182(macro, data) MREPEAT181(macro, data) macro(181, data) +#define MREPEAT183(macro, data) MREPEAT182(macro, data) macro(182, data) +#define MREPEAT184(macro, data) MREPEAT183(macro, data) macro(183, data) +#define MREPEAT185(macro, data) MREPEAT184(macro, data) macro(184, data) +#define MREPEAT186(macro, data) MREPEAT185(macro, data) macro(185, data) +#define MREPEAT187(macro, data) MREPEAT186(macro, data) macro(186, data) +#define MREPEAT188(macro, data) MREPEAT187(macro, data) macro(187, data) +#define MREPEAT189(macro, data) MREPEAT188(macro, data) macro(188, data) +#define MREPEAT190(macro, data) MREPEAT189(macro, data) macro(189, data) +#define MREPEAT191(macro, data) MREPEAT190(macro, data) macro(190, data) +#define MREPEAT192(macro, data) MREPEAT191(macro, data) macro(191, data) +#define MREPEAT193(macro, data) MREPEAT192(macro, data) macro(192, data) +#define MREPEAT194(macro, data) MREPEAT193(macro, data) macro(193, data) +#define MREPEAT195(macro, data) MREPEAT194(macro, data) macro(194, data) +#define MREPEAT196(macro, data) MREPEAT195(macro, data) macro(195, data) +#define MREPEAT197(macro, data) MREPEAT196(macro, data) macro(196, data) +#define MREPEAT198(macro, data) MREPEAT197(macro, data) macro(197, data) +#define MREPEAT199(macro, data) MREPEAT198(macro, data) macro(198, data) +#define MREPEAT200(macro, data) MREPEAT199(macro, data) macro(199, data) +#define MREPEAT201(macro, data) MREPEAT200(macro, data) macro(200, data) +#define MREPEAT202(macro, data) MREPEAT201(macro, data) macro(201, data) +#define MREPEAT203(macro, data) MREPEAT202(macro, data) macro(202, data) +#define MREPEAT204(macro, data) MREPEAT203(macro, data) macro(203, data) +#define MREPEAT205(macro, data) MREPEAT204(macro, data) macro(204, data) +#define MREPEAT206(macro, data) MREPEAT205(macro, data) macro(205, data) +#define MREPEAT207(macro, data) MREPEAT206(macro, data) macro(206, data) +#define MREPEAT208(macro, data) MREPEAT207(macro, data) macro(207, data) +#define MREPEAT209(macro, data) MREPEAT208(macro, data) macro(208, data) +#define MREPEAT210(macro, data) MREPEAT209(macro, data) macro(209, data) +#define MREPEAT211(macro, data) MREPEAT210(macro, data) macro(210, data) +#define MREPEAT212(macro, data) MREPEAT211(macro, data) macro(211, data) +#define MREPEAT213(macro, data) MREPEAT212(macro, data) macro(212, data) +#define MREPEAT214(macro, data) MREPEAT213(macro, data) macro(213, data) +#define MREPEAT215(macro, data) MREPEAT214(macro, data) macro(214, data) +#define MREPEAT216(macro, data) MREPEAT215(macro, data) macro(215, data) +#define MREPEAT217(macro, data) MREPEAT216(macro, data) macro(216, data) +#define MREPEAT218(macro, data) MREPEAT217(macro, data) macro(217, data) +#define MREPEAT219(macro, data) MREPEAT218(macro, data) macro(218, data) +#define MREPEAT220(macro, data) MREPEAT219(macro, data) macro(219, data) +#define MREPEAT221(macro, data) MREPEAT220(macro, data) macro(220, data) +#define MREPEAT222(macro, data) MREPEAT221(macro, data) macro(221, data) +#define MREPEAT223(macro, data) MREPEAT222(macro, data) macro(222, data) +#define MREPEAT224(macro, data) MREPEAT223(macro, data) macro(223, data) +#define MREPEAT225(macro, data) MREPEAT224(macro, data) macro(224, data) +#define MREPEAT226(macro, data) MREPEAT225(macro, data) macro(225, data) +#define MREPEAT227(macro, data) MREPEAT226(macro, data) macro(226, data) +#define MREPEAT228(macro, data) MREPEAT227(macro, data) macro(227, data) +#define MREPEAT229(macro, data) MREPEAT228(macro, data) macro(228, data) +#define MREPEAT230(macro, data) MREPEAT229(macro, data) macro(229, data) +#define MREPEAT231(macro, data) MREPEAT230(macro, data) macro(230, data) +#define MREPEAT232(macro, data) MREPEAT231(macro, data) macro(231, data) +#define MREPEAT233(macro, data) MREPEAT232(macro, data) macro(232, data) +#define MREPEAT234(macro, data) MREPEAT233(macro, data) macro(233, data) +#define MREPEAT235(macro, data) MREPEAT234(macro, data) macro(234, data) +#define MREPEAT236(macro, data) MREPEAT235(macro, data) macro(235, data) +#define MREPEAT237(macro, data) MREPEAT236(macro, data) macro(236, data) +#define MREPEAT238(macro, data) MREPEAT237(macro, data) macro(237, data) +#define MREPEAT239(macro, data) MREPEAT238(macro, data) macro(238, data) +#define MREPEAT240(macro, data) MREPEAT239(macro, data) macro(239, data) +#define MREPEAT241(macro, data) MREPEAT240(macro, data) macro(240, data) +#define MREPEAT242(macro, data) MREPEAT241(macro, data) macro(241, data) +#define MREPEAT243(macro, data) MREPEAT242(macro, data) macro(242, data) +#define MREPEAT244(macro, data) MREPEAT243(macro, data) macro(243, data) +#define MREPEAT245(macro, data) MREPEAT244(macro, data) macro(244, data) +#define MREPEAT246(macro, data) MREPEAT245(macro, data) macro(245, data) +#define MREPEAT247(macro, data) MREPEAT246(macro, data) macro(246, data) +#define MREPEAT248(macro, data) MREPEAT247(macro, data) macro(247, data) +#define MREPEAT249(macro, data) MREPEAT248(macro, data) macro(248, data) +#define MREPEAT250(macro, data) MREPEAT249(macro, data) macro(249, data) +#define MREPEAT251(macro, data) MREPEAT250(macro, data) macro(250, data) +#define MREPEAT252(macro, data) MREPEAT251(macro, data) macro(251, data) +#define MREPEAT253(macro, data) MREPEAT252(macro, data) macro(252, data) +#define MREPEAT254(macro, data) MREPEAT253(macro, data) macro(253, data) +#define MREPEAT255(macro, data) MREPEAT254(macro, data) macro(254, data) +#define MREPEAT256(macro, data) MREPEAT255(macro, data) macro(255, data) + + +#endif // _MREPEAT_H_ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR/preprocessor.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR/preprocessor.h new file mode 100644 index 000000000..5b996ba11 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR/preprocessor.h @@ -0,0 +1,55 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Preprocessor utils. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _PREPROCESSOR_H_ +#define _PREPROCESSOR_H_ + +#include "tpaste.h" +#include "stringz.h" +#include "mrepeat.h" + + +#endif // _PREPROCESSOR_H_ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR/stringz.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR/stringz.h new file mode 100644 index 000000000..3528ea0da --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR/stringz.h @@ -0,0 +1,75 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Preprocessor stringizing utils. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _STRINGZ_H_ +#define _STRINGZ_H_ + + +/*! \brief Stringize. + * + * Stringize a preprocessing token, this token being allowed to be \#defined. + * + * May be used only within macros with the token passed as an argument if the token is \#defined. + * + * For example, writing STRINGZ(PIN) within a macro \#defined by PIN_NAME(PIN) + * and invoked as PIN_NAME(PIN0) with PIN0 \#defined as A0 is equivalent to + * writing "A0". + */ +#define STRINGZ(x) #x + +/*! \brief Absolute stringize. + * + * Stringize a preprocessing token, this token being allowed to be \#defined. + * + * No restriction of use if the token is \#defined. + * + * For example, writing ASTRINGZ(PIN0) anywhere with PIN0 \#defined as A0 is + * equivalent to writing "A0". + */ +#define ASTRINGZ(x) STRINGZ(x) + + +#endif // _STRINGZ_H_ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR/tpaste.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR/tpaste.h new file mode 100644 index 000000000..a5d7beeaa --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR/tpaste.h @@ -0,0 +1,95 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Preprocessor token pasting utils. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _TPASTE_H_ +#define _TPASTE_H_ + + +/*! \name Token Paste + * + * Paste N preprocessing tokens together, these tokens being allowed to be \#defined. + * + * May be used only within macros with the tokens passed as arguments if the tokens are \#defined. + * + * For example, writing TPASTE2(U, WIDTH) within a macro \#defined by + * UTYPE(WIDTH) and invoked as UTYPE(UL_WIDTH) with UL_WIDTH \#defined as 32 is + * equivalent to writing U32. + */ +//! @{ +#define TPASTE2( a, b) a##b +#define TPASTE3( a, b, c) a##b##c +#define TPASTE4( a, b, c, d) a##b##c##d +#define TPASTE5( a, b, c, d, e) a##b##c##d##e +#define TPASTE6( a, b, c, d, e, f) a##b##c##d##e##f +#define TPASTE7( a, b, c, d, e, f, g) a##b##c##d##e##f##g +#define TPASTE8( a, b, c, d, e, f, g, h) a##b##c##d##e##f##g##h +#define TPASTE9( a, b, c, d, e, f, g, h, i) a##b##c##d##e##f##g##h##i +#define TPASTE10(a, b, c, d, e, f, g, h, i, j) a##b##c##d##e##f##g##h##i##j +//! @} + +/*! \name Absolute Token Paste + * + * Paste N preprocessing tokens together, these tokens being allowed to be \#defined. + * + * No restriction of use if the tokens are \#defined. + * + * For example, writing ATPASTE2(U, UL_WIDTH) anywhere with UL_WIDTH \#defined + * as 32 is equivalent to writing U32. + */ +//! @{ +#define ATPASTE2( a, b) TPASTE2( a, b) +#define ATPASTE3( a, b, c) TPASTE3( a, b, c) +#define ATPASTE4( a, b, c, d) TPASTE4( a, b, c, d) +#define ATPASTE5( a, b, c, d, e) TPASTE5( a, b, c, d, e) +#define ATPASTE6( a, b, c, d, e, f) TPASTE6( a, b, c, d, e, f) +#define ATPASTE7( a, b, c, d, e, f, g) TPASTE7( a, b, c, d, e, f, g) +#define ATPASTE8( a, b, c, d, e, f, g, h) TPASTE8( a, b, c, d, e, f, g, h) +#define ATPASTE9( a, b, c, d, e, f, g, h, i) TPASTE9( a, b, c, d, e, f, g, h, i) +#define ATPASTE10(a, b, c, d, e, f, g, h, i, j) TPASTE10(a, b, c, d, e, f, g, h, i, j) +//! @} + + +#endif // _TPASTE_H_ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/STARTUP_FILES/GCC/crt0.x b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/STARTUP_FILES/GCC/crt0.x new file mode 100644 index 000000000..23b658b98 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/STARTUP_FILES/GCC/crt0.x @@ -0,0 +1,121 @@ +/* This file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief AVR32UC C runtime startup file. + * + * This file has been built from the Newlib crt0.S. + * + * - Compiler: GNU GCC for AVR32 + * - Supported devices: All AVR32UC devices can be used. + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#include + + +//! @{ +//! \verbatim + + + // This must be linked @ 0x80000000 if it is to be run upon reset. + .section .reset, "ax", @progbits + + + .global _start + .type _start, @function +_start: + // Jump to the C runtime startup routine. + lda.w pc, _stext + + + // _stext is placed outside the .reset section so that the program entry point + // can be changed without affecting the C runtime startup. + .section .text._stext, "ax", @progbits + + + .global _stext + .type _stext, @function +_stext: + // Set initial stack pointer. + lda.w sp, _estack + + // Set up EVBA so interrupts can be enabled. + lda.w r0, _evba + mtsr AVR32_EVBA, r0 + + // Enable the exception processing. + csrf AVR32_SR_EM_OFFSET + + // Load initialized data having a global lifetime from the data LMA. + lda.w r0, _data + lda.w r1, _edata + cp r0, r1 + brhs idata_load_loop_end + lda.w r2, _data_lma +idata_load_loop: + ld.d r4, r2++ + st.d r0++, r4 + cp r0, r1 + brlo idata_load_loop +idata_load_loop_end: + + // Clear uninitialized data having a global lifetime in the blank static storage section. + lda.w r0, __bss_start + lda.w r1, _end + cp r0, r1 + brhs udata_clear_loop_end + mov r2, 0 + mov r3, 0 +udata_clear_loop: + st.d r0++, r2 + cp r0, r1 + brlo udata_clear_loop +udata_clear_loop_end: + +#ifdef CONFIG_FRAME_POINTER + // Safety: Set the default "return" @ to the exit routine address. + lda.w lr, exit +#endif + + // Start the show. + lda.w pc, main + + +//! \endverbatim +//! @} diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/compiler.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/compiler.h new file mode 100644 index 000000000..885be7fb9 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/compiler.h @@ -0,0 +1,1145 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Compiler file for AVR32. + * + * This file defines commonly used types and macros. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _COMPILER_H_ +#define _COMPILER_H_ + +#if ((defined __GNUC__) && (defined __AVR32__)) || (defined __ICCAVR32__ || defined __AAVR32__) +# include +#endif +#if (defined __ICCAVR32__) +# include +#endif +#include "preprocessor.h" + +#include "parts.h" + + +//_____ D E C L A R A T I O N S ____________________________________________ + +#ifdef __AVR32_ABI_COMPILER__ // Automatically defined when compiling for AVR32, not when assembling. + +#include +#include + + +#if (defined __ICCAVR32__) + +/*! \name Compiler Keywords + * + * Port of some keywords from GNU GCC for AVR32 to IAR Embedded Workbench for Atmel AVR32. + */ +//! @{ +#define __asm__ asm +#define __inline__ inline +#define __volatile__ +//! @} + +#endif + + +/*! \name Usual Types + */ +//! @{ +typedef unsigned char Bool; //!< Boolean. +#ifndef __cplusplus +#if !defined(__bool_true_false_are_defined) +typedef unsigned char bool; //!< Boolean. +#endif +#endif +typedef signed char S8 ; //!< 8-bit signed integer. +typedef unsigned char U8 ; //!< 8-bit unsigned integer. +typedef signed short int S16; //!< 16-bit signed integer. +typedef unsigned short int U16; //!< 16-bit unsigned integer. +typedef signed long int S32; //!< 32-bit signed integer. +typedef unsigned long int U32; //!< 32-bit unsigned integer. +typedef signed long long int S64; //!< 64-bit signed integer. +typedef unsigned long long int U64; //!< 64-bit unsigned integer. +typedef float F32; //!< 32-bit floating-point number. +typedef double F64; //!< 64-bit floating-point number. +//! @} + + +/*! \name Status Types + */ +//! @{ +typedef Bool Status_bool_t; //!< Boolean status. +typedef U8 Status_t; //!< 8-bit-coded status. +//! @} + + +/*! \name Aliasing Aggregate Types + */ +//! @{ + +//! 16-bit union. +typedef union +{ + S16 s16 ; + U16 u16 ; + S8 s8 [2]; + U8 u8 [2]; +} Union16; + +//! 32-bit union. +typedef union +{ + S32 s32 ; + U32 u32 ; + S16 s16[2]; + U16 u16[2]; + S8 s8 [4]; + U8 u8 [4]; +} Union32; + +//! 64-bit union. +typedef union +{ + S64 s64 ; + U64 u64 ; + S32 s32[2]; + U32 u32[2]; + S16 s16[4]; + U16 u16[4]; + S8 s8 [8]; + U8 u8 [8]; +} Union64; + +//! Union of pointers to 64-, 32-, 16- and 8-bit unsigned integers. +typedef union +{ + S64 *s64ptr; + U64 *u64ptr; + S32 *s32ptr; + U32 *u32ptr; + S16 *s16ptr; + U16 *u16ptr; + S8 *s8ptr ; + U8 *u8ptr ; +} UnionPtr; + +//! Union of pointers to volatile 64-, 32-, 16- and 8-bit unsigned integers. +typedef union +{ + volatile S64 *s64ptr; + volatile U64 *u64ptr; + volatile S32 *s32ptr; + volatile U32 *u32ptr; + volatile S16 *s16ptr; + volatile U16 *u16ptr; + volatile S8 *s8ptr ; + volatile U8 *u8ptr ; +} UnionVPtr; + +//! Union of pointers to constant 64-, 32-, 16- and 8-bit unsigned integers. +typedef union +{ + const S64 *s64ptr; + const U64 *u64ptr; + const S32 *s32ptr; + const U32 *u32ptr; + const S16 *s16ptr; + const U16 *u16ptr; + const S8 *s8ptr ; + const U8 *u8ptr ; +} UnionCPtr; + +//! Union of pointers to constant volatile 64-, 32-, 16- and 8-bit unsigned integers. +typedef union +{ + const volatile S64 *s64ptr; + const volatile U64 *u64ptr; + const volatile S32 *s32ptr; + const volatile U32 *u32ptr; + const volatile S16 *s16ptr; + const volatile U16 *u16ptr; + const volatile S8 *s8ptr ; + const volatile U8 *u8ptr ; +} UnionCVPtr; + +//! Structure of pointers to 64-, 32-, 16- and 8-bit unsigned integers. +typedef struct +{ + S64 *s64ptr; + U64 *u64ptr; + S32 *s32ptr; + U32 *u32ptr; + S16 *s16ptr; + U16 *u16ptr; + S8 *s8ptr ; + U8 *u8ptr ; +} StructPtr; + +//! Structure of pointers to volatile 64-, 32-, 16- and 8-bit unsigned integers. +typedef struct +{ + volatile S64 *s64ptr; + volatile U64 *u64ptr; + volatile S32 *s32ptr; + volatile U32 *u32ptr; + volatile S16 *s16ptr; + volatile U16 *u16ptr; + volatile S8 *s8ptr ; + volatile U8 *u8ptr ; +} StructVPtr; + +//! Structure of pointers to constant 64-, 32-, 16- and 8-bit unsigned integers. +typedef struct +{ + const S64 *s64ptr; + const U64 *u64ptr; + const S32 *s32ptr; + const U32 *u32ptr; + const S16 *s16ptr; + const U16 *u16ptr; + const S8 *s8ptr ; + const U8 *u8ptr ; +} StructCPtr; + +//! Structure of pointers to constant volatile 64-, 32-, 16- and 8-bit unsigned integers. +typedef struct +{ + const volatile S64 *s64ptr; + const volatile U64 *u64ptr; + const volatile S32 *s32ptr; + const volatile U32 *u32ptr; + const volatile S16 *s16ptr; + const volatile U16 *u16ptr; + const volatile S8 *s8ptr ; + const volatile U8 *u8ptr ; +} StructCVPtr; + +//! @} + +#endif // __AVR32_ABI_COMPILER__ + + +//_____ M A C R O S ________________________________________________________ + +/*! \name Usual Constants + */ +//! @{ +#define DISABLE 0 +#define ENABLE 1 +#define DISABLED 0 +#define ENABLED 1 +#define OFF 0 +#define ON 1 +#define FALSE 0 +#define TRUE 1 +#ifndef __cplusplus +#if !defined(__bool_true_false_are_defined) +#define false FALSE +#define true TRUE +#endif +#endif +#define KO 0 +#define OK 1 +#define PASS 0 +#define FAIL 1 +#define LOW 0 +#define HIGH 1 +#define CLR 0 +#define SET 1 +//! @} + + +#ifdef __AVR32_ABI_COMPILER__ // Automatically defined when compiling for AVR32, not when assembling. + +/*! \name Bit-Field Handling + */ +//! @{ + +/*! \brief Reads the bits of a value specified by a given bit-mask. + * + * \param value Value to read bits from. + * \param mask Bit-mask indicating bits to read. + * + * \return Read bits. + */ +#define Rd_bits( value, mask) ((value) & (mask)) + +/*! \brief Writes the bits of a C lvalue specified by a given bit-mask. + * + * \param lvalue C lvalue to write bits to. + * \param mask Bit-mask indicating bits to write. + * \param bits Bits to write. + * + * \return Resulting value with written bits. + */ +#define Wr_bits(lvalue, mask, bits) ((lvalue) = ((lvalue) & ~(mask)) |\ + ((bits ) & (mask))) + +/*! \brief Tests the bits of a value specified by a given bit-mask. + * + * \param value Value of which to test bits. + * \param mask Bit-mask indicating bits to test. + * + * \return \c 1 if at least one of the tested bits is set, else \c 0. + */ +#define Tst_bits( value, mask) (Rd_bits(value, mask) != 0) + +/*! \brief Clears the bits of a C lvalue specified by a given bit-mask. + * + * \param lvalue C lvalue of which to clear bits. + * \param mask Bit-mask indicating bits to clear. + * + * \return Resulting value with cleared bits. + */ +#define Clr_bits(lvalue, mask) ((lvalue) &= ~(mask)) + +/*! \brief Sets the bits of a C lvalue specified by a given bit-mask. + * + * \param lvalue C lvalue of which to set bits. + * \param mask Bit-mask indicating bits to set. + * + * \return Resulting value with set bits. + */ +#define Set_bits(lvalue, mask) ((lvalue) |= (mask)) + +/*! \brief Toggles the bits of a C lvalue specified by a given bit-mask. + * + * \param lvalue C lvalue of which to toggle bits. + * \param mask Bit-mask indicating bits to toggle. + * + * \return Resulting value with toggled bits. + */ +#define Tgl_bits(lvalue, mask) ((lvalue) ^= (mask)) + +/*! \brief Reads the bit-field of a value specified by a given bit-mask. + * + * \param value Value to read a bit-field from. + * \param mask Bit-mask indicating the bit-field to read. + * + * \return Read bit-field. + */ +#define Rd_bitfield( value, mask) (Rd_bits( value, mask) >> ctz(mask)) + +/*! \brief Writes the bit-field of a C lvalue specified by a given bit-mask. + * + * \param lvalue C lvalue to write a bit-field to. + * \param mask Bit-mask indicating the bit-field to write. + * \param bitfield Bit-field to write. + * + * \return Resulting value with written bit-field. + */ +#define Wr_bitfield(lvalue, mask, bitfield) (Wr_bits(lvalue, mask, (U32)(bitfield) << ctz(mask))) + +//! @} + + +/*! \brief This macro is used to test fatal errors. + * + * The macro tests if the expression is FALSE. If it is, a fatal error is + * detected and the application hangs up. + * + * \param expr Expression to evaluate and supposed to be nonzero. + */ +#ifdef _ASSERT_ENABLE_ + #define Assert(expr) \ + {\ + if (!(expr)) while (TRUE);\ + } +#else + #define Assert(expr) +#endif + + +/*! \name Zero-Bit Counting + * + * Under AVR32-GCC, __builtin_clz and __builtin_ctz behave like macros when + * applied to constant expressions (values known at compile time), so they are + * more optimized than the use of the corresponding assembly instructions and + * they can be used as constant expressions e.g. to initialize objects having + * static storage duration, and like the corresponding assembly instructions + * when applied to non-constant expressions (values unknown at compile time), so + * they are more optimized than an assembly periphrasis. Hence, clz and ctz + * ensure a possible and optimized behavior for both constant and non-constant + * expressions. + */ +//! @{ + +/*! \brief Counts the leading zero bits of the given value considered as a 32-bit integer. + * + * \param u Value of which to count the leading zero bits. + * + * \return The count of leading zero bits in \a u. + */ +#if (defined __GNUC__) + #define clz(u) __builtin_clz(u) +#elif (defined __ICCAVR32__) + #define clz(u) __count_leading_zeros(u) +#endif + +/*! \brief Counts the trailing zero bits of the given value considered as a 32-bit integer. + * + * \param u Value of which to count the trailing zero bits. + * + * \return The count of trailing zero bits in \a u. + */ +#if (defined __GNUC__) + #define ctz(u) __builtin_ctz(u) +#elif (defined __ICCAVR32__) + #define ctz(u) __count_trailing_zeros(u) +#endif + +//! @} + + +/*! \name Bit Reversing + */ +//! @{ + +/*! \brief Reverses the bits of \a u8. + * + * \param u8 U8 of which to reverse the bits. + * + * \return Value resulting from \a u8 with reversed bits. + */ +#define bit_reverse8(u8) ((U8)(bit_reverse32((U8)(u8)) >> 24)) + +/*! \brief Reverses the bits of \a u16. + * + * \param u16 U16 of which to reverse the bits. + * + * \return Value resulting from \a u16 with reversed bits. + */ +#define bit_reverse16(u16) ((U16)(bit_reverse32((U16)(u16)) >> 16)) + +/*! \brief Reverses the bits of \a u32. + * + * \param u32 U32 of which to reverse the bits. + * + * \return Value resulting from \a u32 with reversed bits. + */ +#if (defined __GNUC__) + #define bit_reverse32(u32) \ + (\ + {\ + unsigned int __value = (U32)(u32);\ + __asm__ ("brev\t%0" : "+r" (__value) : : "cc");\ + (U32)__value;\ + }\ + ) +#elif (defined __ICCAVR32__) + #define bit_reverse32(u32) ((U32)__bit_reverse((U32)(u32))) +#endif + +/*! \brief Reverses the bits of \a u64. + * + * \param u64 U64 of which to reverse the bits. + * + * \return Value resulting from \a u64 with reversed bits. + */ +#define bit_reverse64(u64) ((U64)(((U64)bit_reverse32((U64)(u64) >> 32)) |\ + ((U64)bit_reverse32((U64)(u64)) << 32))) + +//! @} + + +/*! \name Alignment + */ +//! @{ + +/*! \brief Tests alignment of the number \a val with the \a n boundary. + * + * \param val Input value. + * \param n Boundary. + * + * \return \c 1 if the number \a val is aligned with the \a n boundary, else \c 0. + */ +#define Test_align(val, n ) (!Tst_bits( val, (n) - 1 ) ) + +/*! \brief Gets alignment of the number \a val with respect to the \a n boundary. + * + * \param val Input value. + * \param n Boundary. + * + * \return Alignment of the number \a val with respect to the \a n boundary. + */ +#define Get_align( val, n ) ( Rd_bits( val, (n) - 1 ) ) + +/*! \brief Sets alignment of the lvalue number \a lval to \a alg with respect to the \a n boundary. + * + * \param lval Input/output lvalue. + * \param n Boundary. + * \param alg Alignment. + * + * \return New value of \a lval resulting from its alignment set to \a alg with respect to the \a n boundary. + */ +#define Set_align(lval, n, alg) ( Wr_bits(lval, (n) - 1, alg) ) + +/*! \brief Aligns the number \a val with the upper \a n boundary. + * + * \param val Input value. + * \param n Boundary. + * + * \return Value resulting from the number \a val aligned with the upper \a n boundary. + */ +#define Align_up( val, n ) (((val) + ((n) - 1)) & ~((n) - 1)) + +/*! \brief Aligns the number \a val with the lower \a n boundary. + * + * \param val Input value. + * \param n Boundary. + * + * \return Value resulting from the number \a val aligned with the lower \a n boundary. + */ +#define Align_down(val, n ) ( (val) & ~((n) - 1)) + +//! @} + + +/*! \name Mathematics + * + * The same considerations as for clz and ctz apply here but AVR32-GCC does not + * provide built-in functions to access the assembly instructions abs, min and + * max and it does not produce them by itself in most cases, so two sets of + * macros are defined here: + * - Abs, Min and Max to apply to constant expressions (values known at + * compile time); + * - abs, min and max to apply to non-constant expressions (values unknown at + * compile time). + */ +//! @{ + +/*! \brief Takes the absolute value of \a a. + * + * \param a Input value. + * + * \return Absolute value of \a a. + * + * \note More optimized if only used with values known at compile time. + */ +#define Abs(a) (((a) < 0 ) ? -(a) : (a)) + +/*! \brief Takes the minimal value of \a a and \a b. + * + * \param a Input value. + * \param b Input value. + * + * \return Minimal value of \a a and \a b. + * + * \note More optimized if only used with values known at compile time. + */ +#define Min(a, b) (((a) < (b)) ? (a) : (b)) + +/*! \brief Takes the maximal value of \a a and \a b. + * + * \param a Input value. + * \param b Input value. + * + * \return Maximal value of \a a and \a b. + * + * \note More optimized if only used with values known at compile time. + */ +#define Max(a, b) (((a) > (b)) ? (a) : (b)) + +/*! \brief Takes the absolute value of \a a. + * + * \param a Input value. + * + * \return Absolute value of \a a. + * + * \note More optimized if only used with values unknown at compile time. + */ +#if (defined __GNUC__) + #define abs(a) \ + (\ + {\ + int __value = (a);\ + __asm__ ("abs\t%0" : "+r" (__value) : : "cc");\ + __value;\ + }\ + ) +#elif (defined __ICCAVR32__) + #define abs(a) Abs(a) +#endif + +/*! \brief Takes the minimal value of \a a and \a b. + * + * \param a Input value. + * \param b Input value. + * + * \return Minimal value of \a a and \a b. + * + * \note More optimized if only used with values unknown at compile time. + */ +#if (defined __GNUC__) + #define min(a, b) \ + (\ + {\ + int __value, __arg_a = (a), __arg_b = (b);\ + __asm__ ("min\t%0, %1, %2" : "=r" (__value) : "r" (__arg_a), "r" (__arg_b));\ + __value;\ + }\ + ) +#elif (defined __ICCAVR32__) + #define min(a, b) __min(a, b) +#endif + +/*! \brief Takes the maximal value of \a a and \a b. + * + * \param a Input value. + * \param b Input value. + * + * \return Maximal value of \a a and \a b. + * + * \note More optimized if only used with values unknown at compile time. + */ +#if (defined __GNUC__) + #define max(a, b) \ + (\ + {\ + int __value, __arg_a = (a), __arg_b = (b);\ + __asm__ ("max\t%0, %1, %2" : "=r" (__value) : "r" (__arg_a), "r" (__arg_b));\ + __value;\ + }\ + ) +#elif (defined __ICCAVR32__) + #define max(a, b) __max(a, b) +#endif + +//! @} + + +/*! \brief Calls the routine at address \a addr. + * + * It generates a long call opcode. + * + * For example, `Long_call(0x80000000)' generates a software reset on a UC3 if + * it is invoked from the CPU supervisor mode. + * + * \param addr Address of the routine to call. + * + * \note It may be used as a long jump opcode in some special cases. + */ +#define Long_call(addr) ((*(void (*)(void))(addr))()) + +/*! \brief Resets the CPU by software. + * + * \warning It shall not be called from the CPU application mode. + */ +#if (defined __GNUC__) + #define Reset_CPU() \ + (\ + {\ + __asm__ __volatile__ (\ + "lddpc r9, 3f\n\t"\ + "mfsr r8, %[SR]\n\t"\ + "bfextu r8, r8, %[SR_M_OFFSET], %[SR_M_SIZE]\n\t"\ + "cp.w r8, 0b001\n\t"\ + "breq 0f\n\t"\ + "sub r8, pc, $ - 1f\n\t"\ + "pushm r8-r9\n\t"\ + "rete\n"\ + "0:\n\t"\ + "mtsr %[SR], r9\n"\ + "1:\n\t"\ + "mov r0, 0\n\t"\ + "mov r1, 0\n\t"\ + "mov r2, 0\n\t"\ + "mov r3, 0\n\t"\ + "mov r4, 0\n\t"\ + "mov r5, 0\n\t"\ + "mov r6, 0\n\t"\ + "mov r7, 0\n\t"\ + "mov r8, 0\n\t"\ + "mov r9, 0\n\t"\ + "mov r10, 0\n\t"\ + "mov r11, 0\n\t"\ + "mov r12, 0\n\t"\ + "mov sp, 0\n\t"\ + "stdsp sp[0], sp\n\t"\ + "ldmts sp, sp\n\t"\ + "mov lr, 0\n\t"\ + "lddpc pc, 2f\n\t"\ + ".balign 4\n"\ + "2:\n\t"\ + ".word _start\n"\ + "3:\n\t"\ + ".word %[RESET_SR]"\ + :\ + : [SR] "i" (AVR32_SR),\ + [SR_M_OFFSET] "i" (AVR32_SR_M_OFFSET),\ + [SR_M_SIZE] "i" (AVR32_SR_M_SIZE),\ + [RESET_SR] "i" (AVR32_SR_GM_MASK | AVR32_SR_EM_MASK | (AVR32_SR_M_SUP << AVR32_SR_M_OFFSET))\ + );\ + }\ + ) +#elif (defined __ICCAVR32__) + #define Reset_CPU() \ + {\ + extern void *volatile __program_start;\ + __asm__ __volatile__ (\ + "mov r7, LWRD(__program_start)\n\t"\ + "orh r7, HWRD(__program_start)\n\t"\ + "mov r9, LWRD("ASTRINGZ(AVR32_SR_GM_MASK | AVR32_SR_EM_MASK | (AVR32_SR_M_SUP << AVR32_SR_M_OFFSET))")\n\t"\ + "orh r9, HWRD("ASTRINGZ(AVR32_SR_GM_MASK | AVR32_SR_EM_MASK | (AVR32_SR_M_SUP << AVR32_SR_M_OFFSET))")\n\t"\ + "mfsr r8, "ASTRINGZ(AVR32_SR)"\n\t"\ + "bfextu r8, r8, "ASTRINGZ(AVR32_SR_M_OFFSET)", "ASTRINGZ(AVR32_SR_M_SIZE)"\n\t"\ + "cp.w r8, 001b\n\t"\ + "breq $ + 10\n\t"\ + "sub r8, pc, -12\n\t"\ + "pushm r8-r9\n\t"\ + "rete\n\t"\ + "mtsr "ASTRINGZ(AVR32_SR)", r9\n\t"\ + "mov r0, 0\n\t"\ + "mov r1, 0\n\t"\ + "mov r2, 0\n\t"\ + "mov r3, 0\n\t"\ + "mov r4, 0\n\t"\ + "mov r5, 0\n\t"\ + "mov r6, 0\n\t"\ + "st.w r0[4], r7\n\t"\ + "mov r7, 0\n\t"\ + "mov r8, 0\n\t"\ + "mov r9, 0\n\t"\ + "mov r10, 0\n\t"\ + "mov r11, 0\n\t"\ + "mov r12, 0\n\t"\ + "mov sp, 0\n\t"\ + "stdsp sp[0], sp\n\t"\ + "ldmts sp, sp\n\t"\ + "mov lr, 0\n\t"\ + "ld.w pc, lr[4]"\ + );\ + __program_start;\ + } +#endif + + +/*! \name System Register Access + */ +//! @{ + +/*! \brief Gets the value of the \a sysreg system register. + * + * \param sysreg Address of the system register of which to get the value. + * + * \return Value of the \a sysreg system register. + */ +#if (defined __GNUC__) + #define Get_system_register(sysreg) __builtin_mfsr(sysreg) +#elif (defined __ICCAVR32__) + #define Get_system_register(sysreg) __get_system_register(sysreg) +#endif + +/*! \brief Sets the value of the \a sysreg system register to \a value. + * + * \param sysreg Address of the system register of which to set the value. + * \param value Value to set the \a sysreg system register to. + */ +#if (defined __GNUC__) + #define Set_system_register(sysreg, value) __builtin_mtsr(sysreg, value) +#elif (defined __ICCAVR32__) + #define Set_system_register(sysreg, value) __set_system_register(sysreg, value) +#endif + +//! @} + + +/*! \name CPU Status Register Access + */ +//! @{ + +/*! \brief Tells whether exceptions are globally enabled. + * + * \return \c 1 if exceptions are globally enabled, else \c 0. + */ +#define Is_global_exception_enabled() (!Tst_bits(Get_system_register(AVR32_SR), AVR32_SR_EM_MASK)) + +/*! \brief Disables exceptions globally. + */ +#if (defined __GNUC__) + #define Disable_global_exception() ({__asm__ __volatile__ ("ssrf\t%0" : : "i" (AVR32_SR_EM_OFFSET));}) +#elif (defined __ICCAVR32__) + #define Disable_global_exception() (__set_status_flag(AVR32_SR_EM_OFFSET)) +#endif + +/*! \brief Enables exceptions globally. + */ +#if (defined __GNUC__) + #define Enable_global_exception() ({__asm__ __volatile__ ("csrf\t%0" : : "i" (AVR32_SR_EM_OFFSET));}) +#elif (defined __ICCAVR32__) + #define Enable_global_exception() (__clear_status_flag(AVR32_SR_EM_OFFSET)) +#endif + +/*! \brief Tells whether interrupts are globally enabled. + * + * \return \c 1 if interrupts are globally enabled, else \c 0. + */ +#define Is_global_interrupt_enabled() (!Tst_bits(Get_system_register(AVR32_SR), AVR32_SR_GM_MASK)) + +/*! \brief Disables interrupts globally. + */ +#if (defined __GNUC__) + #define Disable_global_interrupt() ({__asm__ __volatile__ ("ssrf\t%0" : : "i" (AVR32_SR_GM_OFFSET));}) +#elif (defined __ICCAVR32__) + #define Disable_global_interrupt() (__disable_interrupt()) +#endif + +/*! \brief Enables interrupts globally. + */ +#if (defined __GNUC__) + #define Enable_global_interrupt() ({__asm__ __volatile__ ("csrf\t%0" : : "i" (AVR32_SR_GM_OFFSET));}) +#elif (defined __ICCAVR32__) + #define Enable_global_interrupt() (__enable_interrupt()) +#endif + +/*! \brief Tells whether interrupt level \a int_level is enabled. + * + * \param int_level Interrupt level (0 to 3). + * + * \return \c 1 if interrupt level \a int_level is enabled, else \c 0. + */ +#define Is_interrupt_level_enabled(int_level) (!Tst_bits(Get_system_register(AVR32_SR), TPASTE3(AVR32_SR_I, int_level, M_MASK))) + +/*! \brief Disables interrupt level \a int_level. + * + * \param int_level Interrupt level to disable (0 to 3). + */ +#if (defined __GNUC__) + #define Disable_interrupt_level(int_level) ({__asm__ __volatile__ ("ssrf\t%0" : : "i" (TPASTE3(AVR32_SR_I, int_level, M_OFFSET)));}) +#elif (defined __ICCAVR32__) + #define Disable_interrupt_level(int_level) (__set_status_flag(TPASTE3(AVR32_SR_I, int_level, M_OFFSET))) +#endif + +/*! \brief Enables interrupt level \a int_level. + * + * \param int_level Interrupt level to enable (0 to 3). + */ +#if (defined __GNUC__) + #define Enable_interrupt_level(int_level) ({__asm__ __volatile__ ("csrf\t%0" : : "i" (TPASTE3(AVR32_SR_I, int_level, M_OFFSET)));}) +#elif (defined __ICCAVR32__) + #define Enable_interrupt_level(int_level) (__clear_status_flag(TPASTE3(AVR32_SR_I, int_level, M_OFFSET))) +#endif + +/*! \brief Protects subsequent code from interrupts. + */ +#define AVR32_ENTER_CRITICAL_REGION( ) \ + { \ + Bool global_interrupt_enabled = Is_global_interrupt_enabled(); \ + Disable_global_interrupt(); // Disable the appropriate interrupts. + +/*! \brief This macro must always be used in conjunction with AVR32_ENTER_CRITICAL_REGION + * so that interrupts are enabled again. + */ +#define AVR32_LEAVE_CRITICAL_REGION( ) \ + if (global_interrupt_enabled) Enable_global_interrupt(); \ + } + +//! @} + + +/*! \name Debug Register Access + */ +//! @{ + +/*! \brief Gets the value of the \a dbgreg debug register. + * + * \param dbgreg Address of the debug register of which to get the value. + * + * \return Value of the \a dbgreg debug register. + */ +#if (defined __GNUC__) + #define Get_debug_register(dbgreg) __builtin_mfdr(dbgreg) +#elif (defined __ICCAVR32__) + #define Get_debug_register(dbgreg) __get_debug_register(dbgreg) +#endif + +/*! \brief Sets the value of the \a dbgreg debug register to \a value. + * + * \param dbgreg Address of the debug register of which to set the value. + * \param value Value to set the \a dbgreg debug register to. + */ +#if (defined __GNUC__) + #define Set_debug_register(dbgreg, value) __builtin_mtdr(dbgreg, value) +#elif (defined __ICCAVR32__) + #define Set_debug_register(dbgreg, value) __set_debug_register(dbgreg, value) +#endif + +//! @} + +#endif // __AVR32_ABI_COMPILER__ + + +//! Boolean evaluating MCU little endianism. +#if ((defined __GNUC__) && (defined __AVR32__)) || ((defined __ICCAVR32__) || (defined __AAVR32__)) + #define LITTLE_ENDIAN_MCU FALSE +#else + #error If you are here, you should check what is exactly the processor you are using... + #define LITTLE_ENDIAN_MCU FALSE +#endif + +// Check that MCU endianism is correctly defined. +#ifndef LITTLE_ENDIAN_MCU + #error YOU MUST define the MCU endianism with LITTLE_ENDIAN_MCU: either FALSE or TRUE +#endif + +//! Boolean evaluating MCU big endianism. +#define BIG_ENDIAN_MCU (!LITTLE_ENDIAN_MCU) + + +#ifdef __AVR32_ABI_COMPILER__ // Automatically defined when compiling for AVR32, not when assembling. + +/*! \name MCU Endianism Handling + */ +//! @{ + +#if (LITTLE_ENDIAN_MCU==TRUE) + #define LSB(u16) (((U8 *)&(u16))[0]) //!< Least significant byte of \a u16. + #define MSB(u16) (((U8 *)&(u16))[1]) //!< Most significant byte of \a u16. + + #define LSH(u32) (((U16 *)&(u32))[0]) //!< Least significant half-word of \a u32. + #define MSH(u32) (((U16 *)&(u32))[1]) //!< Most significant half-word of \a u32. + #define LSB0W(u32) (((U8 *)&(u32))[0]) //!< Least significant byte of 1st rank of \a u32. + #define LSB1W(u32) (((U8 *)&(u32))[1]) //!< Least significant byte of 2nd rank of \a u32. + #define LSB2W(u32) (((U8 *)&(u32))[2]) //!< Least significant byte of 3rd rank of \a u32. + #define LSB3W(u32) (((U8 *)&(u32))[3]) //!< Least significant byte of 4th rank of \a u32. + #define MSB3W(u32) LSB0W(u32) //!< Most significant byte of 4th rank of \a u32. + #define MSB2W(u32) LSB1W(u32) //!< Most significant byte of 3rd rank of \a u32. + #define MSB1W(u32) LSB2W(u32) //!< Most significant byte of 2nd rank of \a u32. + #define MSB0W(u32) LSB3W(u32) //!< Most significant byte of 1st rank of \a u32. + + #define LSW(u64) (((U32 *)&(u64))[0]) //!< Least significant word of \a u64. + #define MSW(u64) (((U32 *)&(u64))[1]) //!< Most significant word of \a u64. + #define LSH0(u64) (((U16 *)&(u64))[0]) //!< Least significant half-word of 1st rank of \a u64. + #define LSH1(u64) (((U16 *)&(u64))[1]) //!< Least significant half-word of 2nd rank of \a u64. + #define LSH2(u64) (((U16 *)&(u64))[2]) //!< Least significant half-word of 3rd rank of \a u64. + #define LSH3(u64) (((U16 *)&(u64))[3]) //!< Least significant half-word of 4th rank of \a u64. + #define MSH3(u64) LSH0(u64) //!< Most significant half-word of 4th rank of \a u64. + #define MSH2(u64) LSH1(u64) //!< Most significant half-word of 3rd rank of \a u64. + #define MSH1(u64) LSH2(u64) //!< Most significant half-word of 2nd rank of \a u64. + #define MSH0(u64) LSH3(u64) //!< Most significant half-word of 1st rank of \a u64. + #define LSB0D(u64) (((U8 *)&(u64))[0]) //!< Least significant byte of 1st rank of \a u64. + #define LSB1D(u64) (((U8 *)&(u64))[1]) //!< Least significant byte of 2nd rank of \a u64. + #define LSB2D(u64) (((U8 *)&(u64))[2]) //!< Least significant byte of 3rd rank of \a u64. + #define LSB3D(u64) (((U8 *)&(u64))[3]) //!< Least significant byte of 4th rank of \a u64. + #define LSB4D(u64) (((U8 *)&(u64))[4]) //!< Least significant byte of 5th rank of \a u64. + #define LSB5D(u64) (((U8 *)&(u64))[5]) //!< Least significant byte of 6th rank of \a u64. + #define LSB6D(u64) (((U8 *)&(u64))[6]) //!< Least significant byte of 7th rank of \a u64. + #define LSB7D(u64) (((U8 *)&(u64))[7]) //!< Least significant byte of 8th rank of \a u64. + #define MSB7D(u64) LSB0D(u64) //!< Most significant byte of 8th rank of \a u64. + #define MSB6D(u64) LSB1D(u64) //!< Most significant byte of 7th rank of \a u64. + #define MSB5D(u64) LSB2D(u64) //!< Most significant byte of 6th rank of \a u64. + #define MSB4D(u64) LSB3D(u64) //!< Most significant byte of 5th rank of \a u64. + #define MSB3D(u64) LSB4D(u64) //!< Most significant byte of 4th rank of \a u64. + #define MSB2D(u64) LSB5D(u64) //!< Most significant byte of 3rd rank of \a u64. + #define MSB1D(u64) LSB6D(u64) //!< Most significant byte of 2nd rank of \a u64. + #define MSB0D(u64) LSB7D(u64) //!< Most significant byte of 1st rank of \a u64. + +#elif (BIG_ENDIAN_MCU==TRUE) + #define MSB(u16) (((U8 *)&(u16))[0]) //!< Most significant byte of \a u16. + #define LSB(u16) (((U8 *)&(u16))[1]) //!< Least significant byte of \a u16. + + #define MSH(u32) (((U16 *)&(u32))[0]) //!< Most significant half-word of \a u32. + #define LSH(u32) (((U16 *)&(u32))[1]) //!< Least significant half-word of \a u32. + #define MSB0W(u32) (((U8 *)&(u32))[0]) //!< Most significant byte of 1st rank of \a u32. + #define MSB1W(u32) (((U8 *)&(u32))[1]) //!< Most significant byte of 2nd rank of \a u32. + #define MSB2W(u32) (((U8 *)&(u32))[2]) //!< Most significant byte of 3rd rank of \a u32. + #define MSB3W(u32) (((U8 *)&(u32))[3]) //!< Most significant byte of 4th rank of \a u32. + #define LSB3W(u32) MSB0W(u32) //!< Least significant byte of 4th rank of \a u32. + #define LSB2W(u32) MSB1W(u32) //!< Least significant byte of 3rd rank of \a u32. + #define LSB1W(u32) MSB2W(u32) //!< Least significant byte of 2nd rank of \a u32. + #define LSB0W(u32) MSB3W(u32) //!< Least significant byte of 1st rank of \a u32. + + #define MSW(u64) (((U32 *)&(u64))[0]) //!< Most significant word of \a u64. + #define LSW(u64) (((U32 *)&(u64))[1]) //!< Least significant word of \a u64. + #define MSH0(u64) (((U16 *)&(u64))[0]) //!< Most significant half-word of 1st rank of \a u64. + #define MSH1(u64) (((U16 *)&(u64))[1]) //!< Most significant half-word of 2nd rank of \a u64. + #define MSH2(u64) (((U16 *)&(u64))[2]) //!< Most significant half-word of 3rd rank of \a u64. + #define MSH3(u64) (((U16 *)&(u64))[3]) //!< Most significant half-word of 4th rank of \a u64. + #define LSH3(u64) MSH0(u64) //!< Least significant half-word of 4th rank of \a u64. + #define LSH2(u64) MSH1(u64) //!< Least significant half-word of 3rd rank of \a u64. + #define LSH1(u64) MSH2(u64) //!< Least significant half-word of 2nd rank of \a u64. + #define LSH0(u64) MSH3(u64) //!< Least significant half-word of 1st rank of \a u64. + #define MSB0D(u64) (((U8 *)&(u64))[0]) //!< Most significant byte of 1st rank of \a u64. + #define MSB1D(u64) (((U8 *)&(u64))[1]) //!< Most significant byte of 2nd rank of \a u64. + #define MSB2D(u64) (((U8 *)&(u64))[2]) //!< Most significant byte of 3rd rank of \a u64. + #define MSB3D(u64) (((U8 *)&(u64))[3]) //!< Most significant byte of 4th rank of \a u64. + #define MSB4D(u64) (((U8 *)&(u64))[4]) //!< Most significant byte of 5th rank of \a u64. + #define MSB5D(u64) (((U8 *)&(u64))[5]) //!< Most significant byte of 6th rank of \a u64. + #define MSB6D(u64) (((U8 *)&(u64))[6]) //!< Most significant byte of 7th rank of \a u64. + #define MSB7D(u64) (((U8 *)&(u64))[7]) //!< Most significant byte of 8th rank of \a u64. + #define LSB7D(u64) MSB0D(u64) //!< Least significant byte of 8th rank of \a u64. + #define LSB6D(u64) MSB1D(u64) //!< Least significant byte of 7th rank of \a u64. + #define LSB5D(u64) MSB2D(u64) //!< Least significant byte of 6th rank of \a u64. + #define LSB4D(u64) MSB3D(u64) //!< Least significant byte of 5th rank of \a u64. + #define LSB3D(u64) MSB4D(u64) //!< Least significant byte of 4th rank of \a u64. + #define LSB2D(u64) MSB5D(u64) //!< Least significant byte of 3rd rank of \a u64. + #define LSB1D(u64) MSB6D(u64) //!< Least significant byte of 2nd rank of \a u64. + #define LSB0D(u64) MSB7D(u64) //!< Least significant byte of 1st rank of \a u64. + +#else + #error Unknown endianism. +#endif + +//! @} + + +/*! \name Endianism Conversion + * + * The same considerations as for clz and ctz apply here but AVR32-GCC's + * __builtin_bswap_16 and __builtin_bswap_32 do not behave like macros when + * applied to constant expressions, so two sets of macros are defined here: + * - Swap16, Swap32 and Swap64 to apply to constant expressions (values known + * at compile time); + * - swap16, swap32 and swap64 to apply to non-constant expressions (values + * unknown at compile time). + */ +//! @{ + +/*! \brief Toggles the endianism of \a u16 (by swapping its bytes). + * + * \param u16 U16 of which to toggle the endianism. + * + * \return Value resulting from \a u16 with toggled endianism. + * + * \note More optimized if only used with values known at compile time. + */ +#define Swap16(u16) ((U16)(((U16)(u16) >> 8) |\ + ((U16)(u16) << 8))) + +/*! \brief Toggles the endianism of \a u32 (by swapping its bytes). + * + * \param u32 U32 of which to toggle the endianism. + * + * \return Value resulting from \a u32 with toggled endianism. + * + * \note More optimized if only used with values known at compile time. + */ +#define Swap32(u32) ((U32)(((U32)Swap16((U32)(u32) >> 16)) |\ + ((U32)Swap16((U32)(u32)) << 16))) + +/*! \brief Toggles the endianism of \a u64 (by swapping its bytes). + * + * \param u64 U64 of which to toggle the endianism. + * + * \return Value resulting from \a u64 with toggled endianism. + * + * \note More optimized if only used with values known at compile time. + */ +#define Swap64(u64) ((U64)(((U64)Swap32((U64)(u64) >> 32)) |\ + ((U64)Swap32((U64)(u64)) << 32))) + +/*! \brief Toggles the endianism of \a u16 (by swapping its bytes). + * + * \param u16 U16 of which to toggle the endianism. + * + * \return Value resulting from \a u16 with toggled endianism. + * + * \note More optimized if only used with values unknown at compile time. + */ +#if (defined __GNUC__) + #define swap16(u16) ((U16)__builtin_bswap_16((U16)(u16))) +#elif (defined __ICCAVR32__) + #define swap16(u16) ((U16)__swap_bytes_in_halfwords((U16)(u16))) +#endif + +/*! \brief Toggles the endianism of \a u32 (by swapping its bytes). + * + * \param u32 U32 of which to toggle the endianism. + * + * \return Value resulting from \a u32 with toggled endianism. + * + * \note More optimized if only used with values unknown at compile time. + */ +#if (defined __GNUC__) + #define swap32(u32) ((U32)__builtin_bswap_32((U32)(u32))) +#elif (defined __ICCAVR32__) + #define swap32(u32) ((U32)__swap_bytes((U32)(u32))) +#endif + +/*! \brief Toggles the endianism of \a u64 (by swapping its bytes). + * + * \param u64 U64 of which to toggle the endianism. + * + * \return Value resulting from \a u64 with toggled endianism. + * + * \note More optimized if only used with values unknown at compile time. + */ +#define swap64(u64) ((U64)(((U64)swap32((U64)(u64) >> 32)) |\ + ((U64)swap32((U64)(u64)) << 32))) + +//! @} + + +/*! \name Target Abstraction + */ +//! @{ + +#define _GLOBEXT_ extern //!< extern storage-class specifier. +#define _CONST_TYPE_ const //!< const type qualifier. +#define _MEM_TYPE_SLOW_ //!< Slow memory type. +#define _MEM_TYPE_MEDFAST_ //!< Fairly fast memory type. +#define _MEM_TYPE_FAST_ //!< Fast memory type. + +typedef U8 Byte; //!< 8-bit unsigned integer. + +#define memcmp_ram2ram memcmp //!< Target-specific memcmp of RAM to RAM. +#define memcmp_code2ram memcmp //!< Target-specific memcmp of RAM to NVRAM. +#define memcpy_ram2ram memcpy //!< Target-specific memcpy from RAM to RAM. +#define memcpy_code2ram memcpy //!< Target-specific memcpy from NVRAM to RAM. + +#define LSB0(u32) LSB0W(u32) //!< Least significant byte of 1st rank of \a u32. +#define LSB1(u32) LSB1W(u32) //!< Least significant byte of 2nd rank of \a u32. +#define LSB2(u32) LSB2W(u32) //!< Least significant byte of 3rd rank of \a u32. +#define LSB3(u32) LSB3W(u32) //!< Least significant byte of 4th rank of \a u32. +#define MSB3(u32) MSB3W(u32) //!< Most significant byte of 4th rank of \a u32. +#define MSB2(u32) MSB2W(u32) //!< Most significant byte of 3rd rank of \a u32. +#define MSB1(u32) MSB1W(u32) //!< Most significant byte of 2nd rank of \a u32. +#define MSB0(u32) MSB0W(u32) //!< Most significant byte of 1st rank of \a u32. + +//! @} + +#endif // __AVR32_ABI_COMPILER__ + + +#endif // _COMPILER_H_ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/conf_isp.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/conf_isp.h new file mode 100644 index 000000000..ca516ee00 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/conf_isp.h @@ -0,0 +1,136 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ****************************************************************** + * + * \brief ISP configuration file. + * + * This file contains the possible external configuration of the ISP. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with a USB module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ***************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _CONF_ISP_H_ +#define _CONF_ISP_H_ + +#include +#include "compiler.h" + + +//_____ D E F I N I T I O N S ______________________________________________ + +#define PRODUCT_MANUFACTURER_ID 0x58 +#define PRODUCT_FAMILY_ID 0x20 + +#define ISP_VERSION 0x10 +#define ISP_ID0 0x00 +#define ISP_ID1 0x00 + +#define ISP_CFG1 (*(volatile U32 *)ISP_CFG1_ADDRESS) +#define ISP_CFG1_ADDRESS (AVR32_FLASHC_USER_PAGE_ADDRESS + ISP_CFG1_OFFSET) +#define ISP_CFG1_OFFSET 0x000001FC +#define ISP_CFG1_SIZE 4 + +#define ISP_CFG1_BOOT_KEY1 16 +#define ISP_CFG1_BOOT_KEY1_MASK 0xFFFF0000 +#define ISP_CFG1_BOOT_KEY1_OFFSET 16 +#define ISP_CFG1_BOOT_KEY1_SIZE 16 +#define ISP_CFG1_BOOT_KEY1_VALUE 0xE11E + +#define ISP_CFG1_FORCE 9 +#define ISP_CFG1_FORCE_MASK 0x00000200 +#define ISP_CFG1_FORCE_OFFSET 9 +#define ISP_CFG1_FORCE_SIZE 1 + +#define ISP_CFG1_IO_COND_EN 8 +#define ISP_CFG1_IO_COND_EN_MASK 0x00000100 +#define ISP_CFG1_IO_COND_EN_OFFSET 8 +#define ISP_CFG1_IO_COND_EN_SIZE 1 + +#define ISP_CFG1_CRC8 0 +#define ISP_CFG1_CRC8_MASK 0x000000FF +#define ISP_CFG1_CRC8_OFFSET 0 +#define ISP_CFG1_CRC8_SIZE 8 +#define ISP_CFG1_CRC8_POLYNOMIAL 0x107 + +#define ISP_CFG2 (*(volatile U32 *)ISP_CFG2_ADDRESS) +#define ISP_CFG2_ADDRESS (AVR32_FLASHC_USER_PAGE_ADDRESS + ISP_CFG2_OFFSET) +#define ISP_CFG2_OFFSET 0x000001F8 +#define ISP_CFG2_SIZE 4 + +#define ISP_CFG2_BOOT_KEY 17 +#define ISP_CFG2_BOOT_KEY_MASK 0xFFFE0000 +#define ISP_CFG2_BOOT_KEY_OFFSET 17 +#define ISP_CFG2_BOOT_KEY_SIZE 15 +#define ISP_CFG2_BOOT_KEY_VALUE 0x494F + +#define ISP_CFG2_IO_COND_LEVEL 16 +#define ISP_CFG2_IO_COND_LEVEL_MASK 0x00010000 +#define ISP_CFG2_IO_COND_LEVEL_OFFSET 16 +#define ISP_CFG2_IO_COND_LEVEL_SIZE 1 + +#define ISP_CFG2_IO_COND_PIN 8 +#define ISP_CFG2_IO_COND_PIN_MASK 0x0000FF00 +#define ISP_CFG2_IO_COND_PIN_OFFSET 8 +#define ISP_CFG2_IO_COND_PIN_SIZE 8 + +#define ISP_CFG2_CRC8 0 +#define ISP_CFG2_CRC8_MASK 0x000000FF +#define ISP_CFG2_CRC8_OFFSET 0 +#define ISP_CFG2_CRC8_SIZE 8 +#define ISP_CFG2_CRC8_POLYNOMIAL 0x107 + +#define ISP_KEY (*(volatile U32 *)ISP_KEY_ADDRESS) +#define ISP_KEY_ADDRESS (AVR32_SRAM_ADDRESS + ISP_KEY_OFFSET) +#define ISP_KEY_OFFSET 0x00000000 +#define ISP_KEY_SIZE 4 +#define ISP_KEY_VALUE ('I' << 24 | 'S' << 16 | 'P' << 8 | 'K') + +#ifndef ISP_OSC + #define ISP_OSC 0 +#endif + +#define DFU_FRAME_LENGTH 2048 + +#define PROGRAM_START_ADDRESS (AVR32_FLASH_ADDRESS + PROGRAM_START_OFFSET) +#define PROGRAM_START_OFFSET 0x00002000 + + +#endif // _CONF_ISP_H_ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/parts.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/parts.h new file mode 100644 index 000000000..6637b2f76 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/parts.h @@ -0,0 +1,203 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Arch file for AVR32. + * + * This file defines common AVR32 UC3 series. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _ARCH_H_ +#define _ARCH_H_ + +// UC3 A Series +#define UC3A0 ( defined (__GNUC__) && \ + ( defined (__AVR32_UC3A0128__) || \ + defined (__AVR32_UC3A0256__) || \ + defined (__AVR32_UC3A0512__) || \ + defined (__AVR32_UC3A0512ES__))) \ + ||((defined(__ICCAVR32__) || defined(__AAVR32__)) && \ + ( defined (__AT32UC3A0128__) || \ + defined (__AT32UC3A0256__) || \ + defined (__AT32UC3A0512__) || \ + defined (__AT32UC3A0512ES__))) + +#define UC3A1 ( defined (__GNUC__) && \ + ( defined (__AVR32_UC3A1128__) || \ + defined (__AVR32_UC3A1256__) || \ + defined (__AVR32_UC3A1512__) || \ + defined (__AVR32_UC3A1512ES__))) \ + ||((defined(__ICCAVR32__) || defined(__AAVR32__)) && \ + ( defined (__AT32UC3A1128__) || \ + defined (__AT32UC3A1256__) || \ + defined (__AT32UC3A1512__) || \ + defined (__AT32UC3A1512ES__))) + +#define UC3A3 ( defined (__GNUC__) && \ + ( defined (__AVR32_UC3A364__) || \ + defined (__AVR32_UC3A364S__) || \ + defined (__AVR32_UC3A3128__) || \ + defined (__AVR32_UC3A3128S__) || \ + defined (__AVR32_UC3A3256__) || \ + defined (__AVR32_UC3A3256S__))) \ + ||((defined(__ICCAVR32__) || defined(__AAVR32__)) && \ + ( defined (__AT32UC3A364__) || \ + defined (__AT32UC3A364S__) || \ + defined (__AT32UC3A3128__) || \ + defined (__AT32UC3A3128S__) || \ + defined (__AT32UC3A3256__) || \ + defined (__AT32UC3A3256S__))) + +#define UC3A (UC3A0 || UC3A1 || UC3A3) + +// UC3 B Series +#define UC3B0 ( defined (__GNUC__) && \ + ( defined (__AVR32_UC3B064__) || \ + defined (__AVR32_UC3B0128__) || \ + defined (__AVR32_UC3B0256__) || \ + defined (__AVR32_UC3B0256ES__) || \ + defined (__AVR32_UC3B0512__) || \ + defined (__AVR32_UC3B0512REVC_))) \ + ||((defined(__ICCAVR32__) || defined(__AAVR32__)) && \ + ( defined (__AT32UC3B064__) || \ + defined (__AT32UC3B0128__) || \ + defined (__AT32UC3B0256__) || \ + defined (__AT32UC3B0256ES__) || \ + defined (__AT32UC3B0512__) || \ + defined (__AT32UC3B0512REVC__))) + +#define UC3B1 ( defined (__GNUC__) && \ + ( defined (__AVR32_UC3B164__) || \ + defined (__AVR32_UC3B1128__) || \ + defined (__AVR32_UC3B1256__) || \ + defined (__AVR32_UC3B1256ES__) || \ + defined (__AVR32_UC3B1512__) || \ + defined (__AVR32_UC3B1512ES__))) \ + ||((defined(__ICCAVR32__) || defined(__AAVR32__)) && \ + ( defined (__AT32UC3B164__) || \ + defined (__AT32UC3B1128__) || \ + defined (__AT32UC3B1256__) || \ + defined (__AT32UC3B1256ES__) || \ + defined (__AT32UC3B1512__) || \ + defined (__AT32UC3B1512REVC__))) + +#define UC3B (UC3B0 || UC3B1 ) + +// UC3 C Series +#define UC3C0 ( defined (__GNUC__) && \ + ( defined (__AVR32_UC3C064C__) || \ + defined (__AVR32_UC3C0128C__) || \ + defined (__AVR32_UC3C0256C__) || \ + defined (__AVR32_UC3C0512CREVC__))) \ + ||((defined(__ICCAVR32__) || defined(__AAVR32__)) && \ + ( defined (__AT32UC3C064C__) || \ + defined (__AT32UC3C0128C__) || \ + defined (__AT32UC3C0256C__) || \ + defined (__AT32UC3C0512C__))) + +#define UC3C1 ( defined (__GNUC__) && \ + ( defined (__AVR32_UC3C164C__) || \ + defined (__AVR32_UC3C1128C__) || \ + defined (__AVR32_UC3C1256C__) || \ + defined (__AVR32_UC3C1512CREVC__))) \ + ||((defined(__ICCAVR32__) || defined(__AAVR32__)) && \ + ( defined (__AT32UC3C164C__) || \ + defined (__AT32UC3C1128C__) || \ + defined (__AT32UC3C1256C__) || \ + defined (__AT32UC3C1512C__))) + +#define UC3C2 ( defined (__GNUC__) && \ + ( defined (__AVR32_UC3C264C__) || \ + defined (__AVR32_UC3C2128C__) || \ + defined (__AVR32_UC3C2256C__) || \ + defined (__AVR32_UC3C2512CREVC__))) \ + ||((defined(__ICCAVR32__) || defined(__AAVR32__)) && \ + ( defined (__AT32UC3C264C__) || \ + defined (__AT32UC3C2128C__) || \ + defined (__AT32UC3C2256C__) || \ + defined (__AT32UC3C2512C__))) + +#define UC3C (UC3C0 || UC3C1 || UC3C2) + +// UC3 L Device series +#define UC3L0 ( defined (__GNUC__) && \ + ( defined (__AVR32_UC3L016__) || \ + defined (__AVR32_UC3L032__) || \ + defined (__AVR32_UC3L064__) || \ + defined (__AVR32_UC3L064REVB__))) \ + ||((defined(__ICCAVR32__) || defined(__AAVR32__)) && \ + ( defined (__AT32UC3L016__) || \ + defined (__AT32UC3L032__) || \ + defined (__AT32UC3L064__) || \ + defined (__AT32UC3L064REVB__))) + +#define UC3L1 ( defined (__GNUC__) && \ + ( defined (__AVR32_UC3L116__) || \ + defined (__AVR32_UC3L132__) || \ + defined (__AVR32_UC3L164__))) \ + ||((defined(__ICCAVR32__) || defined(__AAVR32__)) && \ + ( defined (__AT32UC3L116__) || \ + defined (__AT32UC3L132__) || \ + defined (__AT32UC3L164__))) + +#define UC3L2 ( defined (__GNUC__) && \ + ( defined (__AVR32_UC3L216__) || \ + defined (__AVR32_UC3L232__) || \ + defined (__AVR32_UC3L264__))) \ + ||((defined(__ICCAVR32__) || defined(__AAVR32__)) && \ + ( defined (__AT32UC3L216__) || \ + defined (__AT32UC3L232__) || \ + defined (__AT32UC3L264__))) + +#define UC3L3 ( defined (__GNUC__) && \ + ( defined (__AVR32_UC3L316__) || \ + defined (__AVR32_UC3L332__) || \ + defined (__AVR32_UC3L364__))) \ + ||((defined(__ICCAVR32__) || defined(__AAVR32__)) && \ + ( defined (__AT32UC3L316__) || \ + defined (__AT32UC3L332__) || \ + defined (__AT32UC3L364__))) + +#define UC3L (UC3L0 || UC3L1 || UC3L2 || UC3L3) + +#endif // _ARCH_H_ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/ard_spi.c b/external/arduino/avr/firmwares/wifishield/wifiHD/src/ard_spi.c new file mode 100644 index 000000000..8bd288ba1 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/ard_spi.c @@ -0,0 +1,1969 @@ +/* + * ard_spi.c + * + * Created on: May 27, 2010 + * Author: mlf by Metodo2 srl + */ + +//#define _APP_DEBUG_ + +#include +#include "board.h" +#include "gpio.h" +#include "usart.h" +#include "ard_spi.h" +#include "ard_tcp.h" +#include "wifi_spi.h" +#include "wl_cm.h" +#include "ard_utils.h" +#include "intc.h" +#include "spi.h" +#include "debug.h" +#include "delay.h" +#include "eic.h" +#include "timer.h" +#include "lwip/dns.h" +#include +#include "util.h" +#include "lwip/udp.h" +#include "lwip_setup.h" + +extern const char* fwVersion; + +/*! \name USART Settings + */ +//! @{ +#if BOARD == EVK1105 +# define ARD_USART_SPI (&AVR32_USART1) +# define ARD_USART_SPI_SCK_PIN AVR32_USART1_CLK_0_PIN +# define ARD_USART_SPI_SCK_FUNCTION AVR32_USART1_CLK_0_FUNCTION +# define ARD_USART_SPI_MISO_PIN AVR32_USART1_TXD_0_0_PIN +# define ARD_USART_SPI_MISO_FUNCTION AVR32_USART1_TXD_0_0_FUNCTION +# define ARD_USART_SPI_MOSI_PIN AVR32_USART1_RXD_0_0_PIN +# define ARD_USART_SPI_MOSI_FUNCTION AVR32_USART1_RXD_0_0_FUNCTION +# define ARD_USART_SPI_NSS_PIN AVR32_USART1_CTS_0_0_PIN +# define ARD_USART_SPI_NSS_FUNCTION AVR32_USART1_CTS_0_0_FUNCTION +# define ARD_USART_SPI_IRQ AVR32_USART1_IRQ +#endif +#if BOARD == ARDUINO +# define ARD_SPI (&AVR32_SPI0) +#define EXT_INT_PIN_LINE1 AVR32_EIC_EXTINT_5_PIN +#define EXT_INT_FUNCTION_LINE1 AVR32_EIC_EXTINT_5_FUNCTION +#define EXT_INT_LINE1 EXT_INT5 +#define EXT_INT_IRQ_LINE1 AVR32_EIC_IRQ_5 +#define EXT_INT_NB_LINES 1 +#endif + +/* These defines should be adjusted to match the application */ +/*! \brief CPU core speed in Hz */ +#define CPUHZ 60000000 +/*! \brief Number of bytes in the receive buffer when operating in slave mode */ +#define BUFFERSIZE 64 +/*! \brief A adjustable delay avoiding multiple requests on the switches */ +//#define TIMEOUT 150000 +#define TIMEOUT CPUHZ/200 +/*! \brief Number of bits in each SPI package*/ +#define SPI_BITS 8 +/*! \brief SPI slave speed in Hz */ +#define SPI_SLAVE_SPEED 1000000 + + +#ifndef CMD_MAX_LEN +#define CMD_MAX_LEN 1024 +#endif +#ifndef REPLY_MAX_LEN +#define REPLY_MAX_LEN 1024 +#endif + +#define _BUFFERSIZE 100 + +extern void tcp_debug_print_pcbs(void); +extern bool ifStatus; +extern bool scanNetCompleted; + +static char buf[CMD_MAX_LEN]; +static char reply[REPLY_MAX_LEN]; +static uint16_t cmdCorr = 0; +static uint16_t count = 0; +static uint16_t replyCount = 0; +static cmd_spi_state_t state = SPI_CMD_IDLE; +int receivedChars = 0; +static uint8_t _receiveBuffer[_BUFFERSIZE]; +bool startReply = false; +bool end_write = false; //TODO only for debug + +// Signal indicating a new command is coming from SPI interface +static volatile Bool startRecvCmdSignal = FALSE; + +#define MAX_CMD_NUM 36 +typedef struct sCmd_spi_list{ + cmd_spi_cb_t cb; + char cmd_id; + cmd_spi_rcb_t reply_cb; + void* ctx; + char flags; +}tCmd_spi_list; + +static tCmd_spi_list cmd_spi_list[MAX_CMD_NUM] = { {0} }; + +#ifdef _SPI_STATS_ +typedef struct sStatSpi +{ + int timeoutIntErr; + int timeoutErr; + int txErr; + int rxErr; + int wrongFrame; + int frameDisalign; + int overrideFrame; + int lastCmd; + int lastError; + unsigned long status; +}tStatSpi; + +tStatSpi statSpi = {0}; + +void initStatSpi() +{ + statSpi.lastCmd = 0; + statSpi.lastError = 0; + statSpi.status= 0; + statSpi.txErr = 0; + statSpi.rxErr = 0; + statSpi.timeoutErr= 0; + statSpi.timeoutIntErr= 0; + statSpi.wrongFrame = 0; + statSpi.frameDisalign = 0; + statSpi.overrideFrame = 0; +} + +void printStatSpi() +{ + printk("totSpiCmds\t: 0x%x\n", cmdCorr); + printk("lastCmd \t: 0x%x\n", statSpi.lastCmd); + printk("lastErr \t: 0x%x\n", statSpi.lastError); + printk("spiStatus\t: 0x%X\n", statSpi.status); + printk("spiTxErr \t: 0x%x\n", statSpi.txErr); + printk("spiRxErr \t: 0x%x\n", statSpi.rxErr); + printk("spiTmoErr\t: 0x%x\n", statSpi.timeoutErr); + printk("spiTmoIntErr\t: 0x%x\n", statSpi.timeoutIntErr); + printk("wrongFrame\t: 0x%x\n", statSpi.wrongFrame); + printk("disalFrame\t: 0x%x\n", statSpi.frameDisalign); + printk("overrideFrame\t: 0x%x\n", statSpi.overrideFrame); +} + +cmd_state_t +cmd_statSpi(int argc, char* argv[], void* ctx) +{ + printStatSpi(); + return CMD_DONE; +} + +cmd_state_t +cmd_resetStatSpi(int argc, char* argv[], void* ctx) +{ + initStatSpi(); + return CMD_DONE; +} +#endif + +#define ARRAY_SIZE(a) sizeof(a) / sizeof(a[0]) +#define RETURN_ERR(e) return (e==WL_SUCCESS) ? WIFI_SPI_ACK : WIFI_SPI_ERR; +#define RESET_USART_CSR(usart) usart->cr = AVR32_USART_CR_RSTSTA_MASK; + +int result = WL_CONNECT_FAILED; //Store the result of the last operation + +void* mapSockTCP[MAX_SOCK_NUM][MAX_MODE_NUM]; + +//Udp RemoteIp and remote Port +static tRemoteClient remoteClients[MAX_SOCK_NUM] = {{0,0}}; + +void setRemoteClient(uint16_t sock, uint32_t _ipaddr, uint16_t _port) +{ + if (sock < MAX_SOCK_NUM) + { + remoteClients[sock].ipaddr = _ipaddr; + remoteClients[sock].port = _port; + } +} + +tRemoteClient* getRemoteClient(uint16_t sock) +{ + if (sock < MAX_SOCK_NUM) + { + return &remoteClients[sock]; + } + return NULL; +} + +struct netif* ard_netif = NULL; + +// Network list retrived in the last scanNetwork +static struct wl_network_list_t network_list = { 0 }; + +struct ip_addr _hostIpAddr; + +static bool hostIpAddrFound = false; + +void* getTTCP(uint8_t sock, uint8_t mode) +{ + if (sock < MAX_SOCK_NUM) + return mapSockTCP[sock][mode]; + return NULL; +} + +int getSock(void * _ttcp) +{ + if (_ttcp != NULL) + { + int i = 0; + for (; istart_time; + uint32_t bytes = ttcp->mode == TTCP_MODE_TRANSMIT ? ttcp->nbuf + * ttcp->buflen : ttcp->recved; + + if (ttcp->verbose) + printk("\n"); + + printk("TTCP [%p]: %d bytes processed, %d.%d KB/s (%s/%s)\n", ttcp, bytes, + bytes / ms, bytes % ms, ProtMode2Str(ttcp->udp), + Mode2Str(ttcp->mode)); +} +#endif + +void showTTCPstatus() +{ + printk("IF status: %s\n", (ifStatus) ? "UP":"DOWN"); + printk("CONN status: %s\n", (_connected) ? "UP":"DOWN"); + + int i = 0; + for (; iudp), Mode2Str(_ttcp->mode), ip2str(_ttcp->addr), _ttcp->port); + if (_ttcp->udp == TCP_MODE) + { + int j = 0; + for (; jtpcb[j]){ + printk("[%d tpcp-%p]-Status:%d\n", j, _ttcp->tpcb[j], _ttcp->tpcb[j]->state); + } + } + + if (_ttcp->lpcb){ + printk("[tlcp-%p]-Status:%d\n", _ttcp->lpcb, _ttcp->lpcb->state); + } + }else{ + if (_ttcp->upcb){ + struct ip_addr loc = _ttcp->upcb->local_ip; + printk("[upcp-%p] flags:0x%x local:%s[0x%x]-%d\n", + _ttcp->upcb, _ttcp->upcb->flags, + ip2str(loc), loc, _ttcp->upcb->local_port); + tRemoteClient remote = {0,0};; + getRemoteData(i, ii, &remote); + struct ip_addr ipaddr = { remote.ipaddr }; + printk("remote:%s(0x%x)-%d\n", ip2str(ipaddr), remote.ipaddr, remote.port); + } + } + //ard_tcp_print_stats(_ttcp); + printk("Data avail:%s\n", isAvailTcpDataByte(i)?"YES":"NO"); + printk("------------------------------\n"); + } + } + } + + tcp_debug_print_pcbs(); +} + +int write_stream(volatile avr32_spi_t *spi, const char *stream, uint16_t len) +{ + uint16_t _len = 0; + unsigned short dummy=0; + + do { + //SIGN1_DN(); + if (spi_write(spi, *stream) == SPI_ERROR_TIMEOUT) + { +#ifdef _SPI_STATS_ + statSpi.timeoutErr++; + statSpi.txErr++; + statSpi.lastError = SPI_ERROR_TIMEOUT; + statSpi.status = spi_getStatus(spi); +#endif + return SPI_ERROR_TIMEOUT; + } + else + { + stream++; + _len++; + spi_read(spi,&dummy); + } + //SIGN1_UP(); + }while (_len < len); + return SPI_OK; +} + +void sendError() +{ + AVAIL_FOR_SPI(); + if (spi_write(&AVR32_SPI, ERR_CMD) != SPI_ERROR_TIMEOUT) + { + //Wait to empty the buffer + while(!spi_writeRegisterEmptyCheck(&AVR32_SPI)); + } + BUSY_FOR_SPI(); + WARN("Send SPI error!\n"); +} + +#define ENABLE_SPI_INT() do { \ + volatile avr32_spi_t *spi = ARD_SPI; \ + Bool global_interrupt_enabled = Is_global_interrupt_enabled(); \ + if (global_interrupt_enabled) Disable_global_interrupt(); \ + spi->IER.rdrf = 1; spi->IER.rxbuff = 1; spi->IER.endrx = 1; \ + if (global_interrupt_enabled) Enable_global_interrupt(); \ +}while(0); + +#define DISABLE_SPI_INT() do { \ + volatile avr32_spi_t *spi = ARD_SPI; \ + Bool global_interrupt_enabled = Is_global_interrupt_enabled(); \ + if (global_interrupt_enabled) Disable_global_interrupt(); \ + spi->IDR.rdrf = 1; spi->IDR.rxbuff = 1; spi->IDR.endrx = 1; \ + if (global_interrupt_enabled) Enable_global_interrupt(); \ +}while(0); + +#define CLEAR_SPI_INT() do { \ + eic_clear_interrupt_line(&AVR32_EIC, AVR32_SPI0_IRQ); \ + }while(0); + +int spi_add_cmd(char _cmd_id, cmd_spi_cb_t cb, cmd_spi_rcb_t rcb, void* ctx, + char flag) { + U32 i; + for (i = 0; i < ARRAY_SIZE(cmd_spi_list); i++) + if (!cmd_spi_list[i].cb) + break; + + if (i == ARRAY_SIZE(cmd_spi_list)) + { + printk("List Commands full!\n"); + return -1; + } + cmd_spi_list[i].cmd_id = _cmd_id; + cmd_spi_list[i].cb = cb; + cmd_spi_list[i].reply_cb = rcb; + cmd_spi_list[i].ctx = ctx; + cmd_spi_list[i].flags = flag; + return 0; +} + +int set_net_cmd_cb(int numParam, char* buf, void* ctx) { + struct wl_ssid_t ssid; + wl_err_t err = WL_FAILURE; + tParam* param = (tParam*) buf; + + if (param->paramLen < WL_SSID_MAX_LENGTH) { + memcpy(ssid.ssid, ¶m->param, param->paramLen); + ssid.len = param->paramLen; + ssid.ssid[ssid.len] = 0; + INFO_SPI("SSID:%s\n", ssid.ssid); + //dump(ssid.ssid, ssid.len); + err = wl_cm_set_network(&ssid, NULL); + if (err != 1) + WARN("err=%d\n", err); + } else { + WARN("SSID len out of range"); + } + return err; +} + +extern uint8_t ascii_to_key(char *outp, const char *inp); + +int set_key_cmd_cb(int numParam, char* buf, void* ctx) { + struct wl_ssid_t ssid; + struct wl_mac_addr_t bssid; + uint8_t idx=0, len=0; + char key[13], key_hex[27]; + char keyIdx[2]; + wl_err_t err = WL_SUCCESS; + tParam* params = (tParam*) buf; + + INFO_SPI("%s params=%d\n", __FUNCTION__, numParam); + + // SSID + memset(&ssid, 0, sizeof ssid); + + if (params->paramLen < WL_SSID_MAX_LENGTH) { + memcpy(ssid.ssid, ¶ms->param, params->paramLen); + ssid.len = params->paramLen; + INFO_SPI("%s\n", ssid.ssid); + } else { + //printk("SSID len out of range"); + RETURN_ERR(WL_FAILURE) + } + + params = (tParam*)((char*)buf+PARAM_LEN_SIZE+params->paramLen); + strncpy(keyIdx, (const char*)¶ms->param, params->paramLen); + keyIdx[(uint8_t)params->paramLen]='\0'; + + idx = (uint8_t)atoi(keyIdx); + // KEY IDX + if ((params->paramLen != 1)||(idx < 0)||(idx > 3)){ + //printk("KEY IDX out of range %d\n", idx); + RETURN_ERR(WL_FAILURE) + } + + params = (tParam*)((char*)params+PARAM_LEN_SIZE+params->paramLen); + strncpy(key_hex, (const char*)¶ms->param, params->paramLen); + key_hex[(uint8_t)params->paramLen]='\0'; + len = ascii_to_key(key, key_hex); + // KEY + if (( len != 5)&&(len != 13)) + { + //printk("KEY len out of range %d", len); + RETURN_ERR(WL_FAILURE) + } +#if 0 + printk("KEY IDX = %d\n", idx); + dump(key, len); + printk("KEY len %d\n", len); +#endif + memset(&bssid.octet, 0xff, sizeof bssid.octet); + + wl_add_wep_key(idx, len, key, &bssid); + //wl_set_auth_mode(AUTH_MODE_SHARED_KEY); + wl_set_default_wep_key(idx); + + //Connect + err = wl_cm_set_network(&ssid, NULL); + if (err != 1) + WARN("err=%d\n", err); + RETURN_ERR(err) +} + +int set_passphrase_cmd_cb(int numParam, char* buf, void* ctx) { + struct wl_network_t net; + char pass[64]; + wl_err_t err = WL_SUCCESS; + tParam* params = (tParam*) buf; + + INFO_SPI("%s params=%d\n", __FUNCTION__, numParam); + + memset(&net, 0, sizeof net); + memset(net.bssid.octet, 0xFF, sizeof net.bssid.octet); + + net.enc_type = ENC_TYPE_AUTO; + + // SSID + if (params->paramLen < WL_SSID_MAX_LENGTH) { + memcpy(net.ssid.ssid, ¶ms->param, params->paramLen); + net.ssid.len = params->paramLen; + INFO_SPI("%s %d\n", net.ssid.ssid, net.ssid.len); + } else { + //printk("SSID len out of range"); + RETURN_ERR(WL_FAILURE) + } + params = (tParam*)((char*)buf+PARAM_LEN_SIZE+params->paramLen); + // PASSPHRASE + + strncpy(pass, (const char*)¶ms->param, params->paramLen); + pass[(uint8_t)params->paramLen]='\0'; + INFO_SPI("Pass: %s %d\n", pass, params->paramLen); + + if (wl_set_passphrase(&net, + pass, + params->paramLen, + ENC_TYPE_AUTO, + AUTH_MODE_AUTO) + != WL_SUCCESS) { + WARN("%s : Failed to add passphrase\n", __func__); + + RETURN_ERR(WL_FAILURE) + } + printk("Connect to network..."); + //Connect + err = wl_cm_set_network(&net.ssid, NULL); + if (err != 1) + printk("err=%d\n", err); + else + printk("OK\n"); + RETURN_ERR(err) +} + +int set_ip_config_cmd_cb(int numParam, char* buf, void* ctx) { + struct ip_addr lwip_addr; + struct ctx_server *hs = ctx; + struct net_cfg *ncfg = &(hs->net_cfg); + struct netif *nif = ncfg->netif; + uint8_t parmsToChange=0; + const uint8_t MAX_IP_CONFIG_PARAMS = 3; + + wl_err_t err = WL_SUCCESS; + tParam* params = (tParam*) buf; + + if (params->paramLen == 1) + { + GET_PARAM_NEXT(BYTE, params, _parmsToChange); + parmsToChange = _parmsToChange; + } + else + RETURN_ERR(WL_FAILURE) + + INFO_SPI("%p numParam=%d parmsToChange=%d\n", ctx, numParam, parmsToChange); + + if (parmsToChange <= MAX_IP_CONFIG_PARAMS) + { + int i=0; + for (; iparamLen == 4) + { + GET_PARAM_NEXT(LONG, params, _ip_addr); + lwip_addr.addr = _ip_addr; + INFO_SPI("%d] nif:%p lwip_addr=0x%x\n", i, nif, lwip_addr.addr); + switch (i) + { + case 0: // local_ip + { + netif_set_ipaddr(nif, &lwip_addr); + break; + } + case 1: // gateway + { + netif_set_gw(nif, &lwip_addr); + break; + } + case 2: // subnet + { + netif_set_netmask(nif, &lwip_addr); + break; + } + } + }else{ + RETURN_ERR(WL_FAILURE) + } + + } + /* Disable DHCP */ + ncfg->dhcp_enabled = STATIC_IP_CONFIG; + }else + RETURN_ERR(WL_FAILURE) + + RETURN_ERR(err) +} + +int set_dns_config_cmd_cb(int numParam, char* buf, void* ctx) { + struct ip_addr lwip_addr; + struct ctx_server *hs = ctx; + struct net_cfg *ncfg = &(hs->net_cfg); + struct netif *nif = ncfg->netif; + uint8_t parmsToChange=0; + const uint8_t MAX_DNS_CONFIG_PARAMS = 2; + + wl_err_t err = WL_SUCCESS; + tParam* params = (tParam*) buf; + + if (params->paramLen == 1) + { + GET_PARAM_NEXT(BYTE, params, _parmsToChange); + parmsToChange = _parmsToChange; + } + else + RETURN_ERR(WL_FAILURE) + + INFO_SPI("%p numParam=%d parmsToChange=%d\n", ctx, numParam, parmsToChange); + + if (parmsToChange <= MAX_DNS_CONFIG_PARAMS) + { + int i=0; + for (; iparamLen == 4) + { + GET_PARAM_NEXT(LONG, params, _ip_addr); + lwip_addr.addr = _ip_addr; + INFO_SPI("%d] nif:%p lwip_addr=0x%x\n", i, nif, lwip_addr.addr); + dns_setserver(i, &lwip_addr); + }else{ + RETURN_ERR(WL_FAILURE) + } + } + /* Disable DHCP */ + ncfg->dhcp_enabled = STATIC_IP_CONFIG; + }else + RETURN_ERR(WL_FAILURE) + + RETURN_ERR(err) +} + + + +void set_result(wl_status_t _status) +{ + result = _status; +} + + +void set_result_cmd(int err) +{ + wl_err_t _err = (wl_err_t)err; + switch (_err) + { + case WL_SUCCESS: + set_result(WL_CONNECTED); + ERROR_LED_OFF(); + break; + default: + case WL_OOM: + case WL_INVALID_LENGTH: + case WL_NOT_SUPPORTED: + case WL_ABSORBED: + case WL_RESOURCES: + case WL_BUSY: + case WL_RETRY: + case WL_FAILURE: + set_result(WL_CONNECT_FAILED); + ERROR_LED_ON(); + break; + } + INFO_SPI("%s %d\n", __FUNCTION__, result); +} + + + +extern int ttcp_start(struct ip_addr addr, uint16_t port, void *opaque, + void *done_cb, int mode, uint16_t nbuf, uint16_t buflen, int udp, int verbose); + + +int start_server_tcp(uint16_t port, uint8_t sock, uint8_t protMode) +{ + struct ip_addr addr = { 0 }; + uint16_t buflen = 1024; + uint16_t nbuf = 1024; + wl_err_t err = WL_FAILURE; + +#ifdef _APP_DEBUG_ + int verbose = 1; +#else + int verbose = 0; +#endif + int udp = protMode; + int mode = 1; //RECEIVE + void* _ttcp = NULL; + + if (sock >= MAX_SOCK_NUM) + return WIFI_SPI_ERR; + + if (_connected) + { + WARN("Still connected...wait\n"); + return WIFI_SPI_ERR; + } + + if (!ifStatus) + { + WARN_VER("IF down...wait\n"); + return WIFI_SPI_ERR; + } + + + if (ard_tcp_start(addr, port, NULL, NULL, mode, nbuf, buflen, udp, verbose, sock, &_ttcp) == 0) + { + INFO_SPI("Start Server %s [%d, %d] OK!\n", ProtMode2Str(protMode), port, sock); + setMapSock(sock, _ttcp); + err = WL_SUCCESS; + }else{ + + WARN("Start Server %s [%d, %d] FAILED!\n", ProtMode2Str(protMode), port, sock); + clearMapSockTcp(sock, TTCP_MODE_RECEIVE); + } + return err; +} + + +int start_server_tcp_cmd_cb(int numParam, char* buf, void* ctx) { + wl_err_t err = WL_FAILURE; + tParam* params = (tParam*) buf; + if (numParam == 3) + { + GET_PARAM_NEXT(INT, params, port); + GET_PARAM_NEXT(BYTE, params, sock); + GET_PARAM_NEXT(BYTE, params, protMode); + err = start_server_tcp(port, sock, protMode); + } + return (err==WL_SUCCESS) ? WIFI_SPI_ACK : WIFI_SPI_ERR; +} + +int start_client_tcp(uint32_t _addr, uint16_t port, uint8_t sock, uint8_t protMode) +{ + uint16_t buflen = 1024; + uint16_t nbuf = 1024; + wl_err_t err = WL_FAILURE; + struct ip_addr addr = { .addr = _addr}; + + INFO_SPI("Addr:0x%x, port:%d, sock:%d, prot:%s\n", _addr, port, sock, ProtMode2Str(protMode)); + + #ifdef _APP_DEBUG_ + int verbose = 1; + #else + int verbose = 0; + #endif + + int udp = protMode; + int mode = 0; //TRANSMIT + void* _ttcp = NULL; + + if (sock >= MAX_SOCK_NUM) + return WIFI_SPI_ERR; + + // Check previous connection + _ttcp = getTTCP(sock, TTCP_MODE_TRANSMIT); + if (_ttcp != NULL) + { + WARN("Previous client %p not stopped !\n", _ttcp); + ard_tcp_stop(_ttcp); + clearMapSockTcp(sock, TTCP_MODE_TRANSMIT); + } + + if (ard_tcp_start(addr, port, NULL, NULL, mode, nbuf, buflen, udp, verbose, sock, &_ttcp) == 0) + { + INFO_SPI("Start Client %s %p [0x%x, %d, %d] OK!\n", ProtMode2Str(protMode), + _ttcp, addr, port, sock); + setMapSock(sock, _ttcp); + err = WL_SUCCESS; + }else{ + INFO_SPI("Start Client %s %p [0x%x, %d, %d] FAILED!\n", ProtMode2Str(protMode), + _ttcp, addr, port, sock); + clearMapSockTcp(sock, TTCP_MODE_TRANSMIT); + } + return err; +} + + +int start_client_tcp_cmd_cb(int numParam, char* buf, void* ctx) { + wl_err_t err = WL_FAILURE; + tParam* params = (tParam*) buf; + if (numParam == 4) + { + GET_PARAM_NEXT(LONG, params, _addr); + GET_PARAM_NEXT(INT, params, port); + GET_PARAM_NEXT(BYTE, params, sock); + GET_PARAM_NEXT(BYTE, params, protMode); + err = start_client_tcp(_addr, port, sock, protMode); + } + return (err==WL_SUCCESS) ? WIFI_SPI_ACK : WIFI_SPI_ERR; +} + +int stop_client_tcp_cmd_cb(int numParam, char* buf, void* ctx) { + wl_err_t err = WL_FAILURE; + tParam* params = (tParam*) buf; + void* _ttcp = NULL; + + if (numParam == 1) + { + GET_PARAM_NEXT(BYTE, params, sock); + + INFO_SPI("Stop client sock:%d\n", sock); + + if (sock < MAX_SOCK_NUM) + { + _ttcp = getTTCP(sock, TTCP_MODE_TRANSMIT); + ard_tcp_stop(_ttcp); + err = WL_SUCCESS; + } + } + return (err==WL_SUCCESS) ? WIFI_SPI_ACK : WIFI_SPI_ERR; +} + +int insert_data_cmd_cb(int numParam, char* buf, void* ctx) { + + tDataParam* msg = (tDataParam*) buf; + if ((numParam == 2)&&(msg->dataLen == 1)) + { + GET_DATA_BYTE(sock, buf+2); + GET_DATA_INT(len, buf+3); + //printk("tcp:%p buf:%p len:%d\n", getTTCP(sock), (uint8_t*)(buf+5), len); + insertBuf(sock, (uint8_t*)(buf+5), len); + } + return WIFI_SPI_ACK; +} + +int send_data_udp_cmd_cb(int numParam, char* buf, void* ctx) { + wl_err_t err = WL_FAILURE; + + tParam* params = (tParam*) buf; + if ((numParam == 1)&&(params->paramLen == 1)) + { + GET_PARAM_NEXT(BYTE, params, sock); + uint16_t len = 0; + uint8_t* p = mergeBuf(sock, NULL, &len); + err = sendUdpData(getTTCP(sock, TTCP_MODE_TRANSMIT), p, len); + clearBuf(sock); + free(p); + } + + return (err==WL_SUCCESS) ? WIFI_SPI_ACK : WIFI_SPI_ERR; +} + + +int send_data_tcp_cmd_cb(int numParam, char* buf, void* ctx) { + wl_err_t err = WL_FAILURE; + DATA_LED_ON(); + tDataParam* msg = (tDataParam*) buf; + if ((numParam == 2)&&(msg->dataLen == 1)) + { + GET_DATA_BYTE(sock, buf+2); + GET_DATA_INT(len, buf+3); + //printk("tcp:%p buf:%p len:%d\n", getTTCP(sock), (uint8_t*)(buf+5), len); + err = sendTcpData(getTTCP(sock, TTCP_MODE_TRANSMIT), (uint8_t*)(buf+5), len); + } + DATA_LED_OFF(); + return (err==WL_SUCCESS) ? WIFI_SPI_ACK : WIFI_SPI_ERR; +} + +int ack_cmd_cb(int numParam, char* buf, void* ctx) { + return WIFI_SPI_ACK; +} + +int get_result_cmd_cb(int numParam, char* buf, void* ctx) { + INFO_SPI("ifStatus:%d result:%d\n", ifStatus, result); + return WIFI_SPI_ACK; +} + +int disconnect_cmd_cb(int numParam, char* buf, void* ctx) +{ + return ((wl_disconnect()==WL_SUCCESS)? WIFI_SPI_ACK : WIFI_SPI_ERR); +} + + +cmd_spi_state_t get_reply_cb(char* recv, char* reply, void* ctx, uint16_t* count) { + + CREATE_HEADER_REPLY(reply, recv, 1); + + reply[3] = 1; // paramLen + if (ctx != NULL) { + reply[4] = (*(uint8_t*)ctx); //param + } else { + reply[4] = (ifStatus)?WL_CONNECTED:result; //param + } + + END_HEADER_REPLY(reply, 5, *count); + + //INFO_SPI("result:%d\n", result); + return SPI_CMD_DONE; +} + +cmd_spi_state_t ack_reply_cb(char* recv, char* reply, void* ctx, uint16_t* count) { + + CREATE_HEADER_REPLY(reply, recv, 1); + + reply[3] = 1; // paramLen + if (ctx != NULL) { + reply[4] = (*(uint8_t*) ctx != 1) ? WIFI_SPI_ERR : WIFI_SPI_ACK; //param + } else { + reply[4] = WIFI_SPI_ACK; //param + } + + END_HEADER_REPLY(reply, 5, *count); + + return SPI_CMD_DONE; +} + +cmd_spi_state_t get_reply_ipaddr_cb(char* recv, char* reply, void* ctx, uint16_t* count) { + + CHECK_ARD_NETIF(recv, reply, count); + + CREATE_HEADER_REPLY(reply, recv, 3); + + PUT_LONG_IN_BYTE_NO(ard_netif->ip_addr.addr, reply, 3); + PUT_LONG_IN_BYTE_NO(ard_netif->netmask.addr, reply, 8); + PUT_LONG_IN_BYTE_NO(ard_netif->gw.addr, reply, 13); + + END_HEADER_REPLY(reply, 18, *count); + + return SPI_CMD_DONE; +} + +void getRemoteData(uint8_t sock, uint8_t mode, tRemoteClient* remoteData) +{ + if ((sock>=0) && (sockudp == UDP_MODE)) + { + if (_ttcp->mode == TTCP_MODE_RECEIVE) + { + remoteData->ipaddr = getRemoteClient(sock)->ipaddr; + remoteData->port = getRemoteClient(sock)->port; + }else{ + remoteData->ipaddr = (_ttcp->upcb) ? _ttcp->upcb->remote_ip.addr : 0; + remoteData->port = (_ttcp->upcb) ? _ttcp->upcb->remote_port : 0; + } + } + } + } +} + + +cmd_spi_state_t get_reply_remote_data_cb(char* recv, char* reply, void* ctx, uint16_t* count) { + + CHECK_ARD_NETIF(recv, reply, count); + DUMP_SPI_CMD(recv); + + GET_DATA_BYTE(sock, recv+4); + + CREATE_HEADER_REPLY(reply, recv, 2); + tRemoteClient remoteData = {0,0}; + //TODO pass the mode + getRemoteData(sock, TTCP_MODE_RECEIVE, &remoteData); + + PUT_LONG_IN_BYTE_NO(remoteData.ipaddr, reply, 3); + PUT_DATA_INT(remoteData.port, reply, 8); + + END_HEADER_REPLY(reply, 11, *count); + + return SPI_CMD_DONE; +} + + +void foundHostByName(const char *name, struct ip_addr *ipaddr, void *callback_arg) +{ + _hostIpAddr.addr = (ipaddr)?ipaddr->addr:0xffffffff; + INFO_SPI("foundHostByName: Found Host: name=%s ip=0x%x\n", name, _hostIpAddr.addr); + hostIpAddrFound = true; +} + +int req_reply_host_by_name_cb(int numParam, char* buf, void* ctx) { + + char hostName[DNS_MAX_NAME_LENGTH]; + tParam* params = (tParam*) buf; + + // HostName + if (params->paramLen < DNS_MAX_NAME_LENGTH) { + memcpy(hostName, ¶ms->param, params->paramLen); + hostName[params->paramLen]='\0'; + } else { + RETURN_ERR(WL_FAILURE) + } + + INFO_SPI("Looking for Host: name=%s\n", hostName); + _hostIpAddr.addr = 0; + hostIpAddrFound = false; + err_t err = dns_gethostbyname(hostName, &_hostIpAddr, foundHostByName, NULL); + if (err == ERR_OK) + { + INFO_SPI("Found Host: name=%s ip=0x%x\n", hostName, _hostIpAddr.addr); + hostIpAddrFound = true; + RETURN_ERR(WL_SUCCESS) + } + RETURN_ERR(WL_FAILURE) +} + +cmd_spi_state_t get_reply_host_by_name_cb(char* recv, char* reply, void* ctx, uint16_t* count) { + + u32_t addr = (hostIpAddrFound)?_hostIpAddr.addr : 0xffffffff; + INFO_SPI("Searching for Host: ip=0x%x found=%d\n", addr, hostIpAddrFound); + + CHECK_ARD_NETIF(recv, reply, count); + + CREATE_HEADER_REPLY(reply, recv, 1); + + PUT_LONG_IN_BYTE_NO(addr, reply, 3); + + END_HEADER_REPLY(reply, 8, *count); + + return SPI_CMD_DONE; +} + +cmd_spi_state_t get_reply_mac_cb(char* recv, char* reply, void* ctx, uint16_t* count) { + + CHECK_ARD_NETIF(recv, reply, count); + + CREATE_HEADER_REPLY(reply, recv, 1); + + reply[3] = WL_MAC_ADDR_LENGTH; + uint8_t mac[WL_MAC_ADDR_LENGTH]; + if (wl_get_mac_addr(mac) != WL_SUCCESS) { + RETURN_ERR_REPLY(recv, reply, count); + } + //rotate the byte order + reply[4]=mac[5]; + reply[5]=mac[4]; + reply[6]=mac[3]; + reply[7]=mac[2]; + reply[8]=mac[1]; + reply[9]=mac[0]; + END_HEADER_REPLY(reply, 10, *count); + + return SPI_CMD_DONE; +} + +cmd_spi_state_t get_reply_curr_net_cb(char* recv, char* reply, void* ctx, uint16_t* count) { + + uint32_t type = (uint32_t)ctx; + CHECK_ARD_NETIF(recv, reply, count); + + CREATE_HEADER_REPLY(reply, recv, 1); + + struct wl_network_t* net = wl_get_current_network(); + uint8_t len = 0; + if (net != NULL) + { + switch (type) + { + default: + case GET_CURR_SSID_CMD: + { + len = net->ssid.len; + PUT_BUFDATA_BYTE(net->ssid.ssid, len, reply, 3); + break; + } + case GET_CURR_BSSID_CMD: + { + len = WL_MAC_ADDR_LENGTH; ; + PUT_BUFDATA_BYTE_REV(net->bssid.octet, len, reply, 3); + break; + } + case GET_CURR_RSSI_CMD: + { + len=sizeof(net->rssi); + PUT_LONG_IN_BYTE_HO(net->rssi, reply, 3); + //printk("RSSI:%d", net->rssi); + break; + } + case GET_CURR_ENCT_CMD: + { + len = sizeof(net->enc_type); + PUT_DATA_BYTE(net->enc_type, reply, 3); + //printk("ENCT:%d", net->enc_type); + break; + } + } + }else{ + PUT_DATA_BYTE(0, reply, 3); + } + + END_HEADER_REPLY(reply, 3+len+1, *count); + + //dump(reply, *count); + + return SPI_CMD_DONE; +} + +cmd_spi_state_t get_reply_idx_net_cb(char* recv, char* reply, void* ctx, uint16_t* count) { + + uint32_t type = (uint32_t)ctx; + CHECK_ARD_NETIF(recv, reply, count); + + CREATE_HEADER_REPLY(reply, recv, 1); + + DUMP_SPI_CMD(recv); + + GET_DATA_BYTE(idx, recv+4); + + if (idx >= WL_NETWORKS_LIST_MAXNUM) + { + WARN("Index out of range: %d\n", idx); + return SPI_CMD_DONE; + } + uint8_t len = 0; + switch (type) + { + default: + case GET_IDX_SSID_CMD: + { + len = network_list.net[idx]->ssid.len; + PUT_BUFDATA_BYTE(network_list.net[idx]->ssid.ssid, len, reply, 3); + INFO_UTIL("SSID:%s\n", network_list.net[idx]->ssid.ssid); + break; + } + case GET_IDX_RSSI_CMD: + { + len = 4; + PUT_LONG_IN_BYTE_HO(network_list.net[idx]->rssi, reply, 3); + INFO_UTIL("RSSI:%d\n", network_list.net[idx]->rssi); + break; + } + case GET_IDX_ENCT_CMD: + { + len = 1; + PUT_DATA_BYTE(network_list.net[idx]->enc_type, reply, 3); + INFO_UTIL("ENCT:%d\n", network_list.net[idx]->enc_type); + break; + } + } + + + END_HEADER_REPLY(reply, 3+len+1, *count); + + DUMP(reply, *count); + + return SPI_CMD_DONE; +} + +static void copy_network_list(struct wl_network_list_t *dst, + struct wl_network_list_t *src) +{ + int i; + for (i = 0; i < dst->cnt; i++) + free(dst->net[i]); + free(dst->net); + + dst->cnt = 0; + + if (src->cnt == 0) + return; + dst->net = calloc(1, src->cnt * sizeof(struct wl_network_t *)); + if (dst->net == NULL) { + printk("could not allocate all gui net array\n"); + return; + } + + for (i = 0; i < src->cnt; i++) { + struct wl_network_t *net = src->net[i]; + dst->net[i] = malloc(sizeof(*net)); + if (dst->net[i] == NULL) { + printk("could not allocate all gui nets\n"); + return; + } + + memcpy(dst->net[i], net, sizeof(*net)); + dst->cnt++; + } +} + +int start_scan_net_cmd_cb(int numParam, char* buf, void* ctx) { + wl_err_t err = WL_FAILURE; + + INFO_SPI("Start Network Scan %d\n", numParam); + if (scanNetCompleted){ + scanNetCompleted = false; + err = wl_scan(); + if (err != WL_SUCCESS) + { + // May be busy scanning already, no fatal error + WARN("err=%d\n", err); + err = WL_SUCCESS; + } + } + return err; +} + +cmd_spi_state_t get_reply_scan_networks_cb(char* recv, char* reply, void* ctx, uint16_t* count) { + + const int8_t SCAN_NOT_YET_COMPLETED = 0; + + if (!scanNetCompleted) + { + //return empty list with an error to retry + CREATE_HEADER_REPLY(reply, recv, SCAN_NOT_YET_COMPLETED); + END_HEADER_REPLY(reply, 3, *count); + INFO_SPI("Scan not completed!\n"); + return SPI_CMD_DONE; + } + + int network_cnt = 0; + struct wl_network_list_t* wl_network_list; + + wl_get_network_list(&wl_network_list); + if (wl_network_list->cnt == 0) + { + CREATE_HEADER_REPLY(reply, recv, 0); + END_HEADER_REPLY(reply, 3, *count); + INFO_SPI("Networks not found!\n"); + return SPI_CMD_DONE; + } + + if (wl_network_list->cnt > WL_NETWORKS_LIST_MAXNUM) + { + network_cnt = WL_NETWORKS_LIST_MAXNUM ; + } + else{ + network_cnt = wl_network_list->cnt ; + } + + copy_network_list(&network_list, wl_network_list); + CREATE_HEADER_REPLY(reply, recv, network_cnt); + + uint8_t start = 3; + int ii = 0; + for (; ii < network_cnt; ii++) + { + uint8_t len = network_list.net[ii]->ssid.len+1; + network_list.net[ii]->ssid.ssid[network_list.net[ii]->ssid.len]=0; + PUT_BUFDATA_BYTE(network_list.net[ii]->ssid.ssid, len, reply, start); + start += len+1; + INFO_SPI("%d - %s [%d]- %d - %d - 0x%x\n",ii, network_list.net[ii]->ssid.ssid, + len, network_list.net[ii]->enc_type, + network_list.net[ii]->rssi, network_list.net[ii]->bssid); + } + + END_HEADER_REPLY(reply, start, *count); + //DUMP(reply, *count); + + return SPI_CMD_DONE; +} + +cmd_spi_state_t get_state_tcp_cmd_cb(char* recv, char* reply, void* ctx, uint16_t* count) { + + CHECK_ARD_NETIF(recv, reply, count); + + CREATE_HEADER_REPLY(reply, recv, PARAM_NUMS_1); + + uint8_t _state = CLOSED; + if ((recv[3]==1)&&(recv[4]>=0)&&(recv[4]=0)&&(_sock=0)&&(recv[4]=0)&&(recv[4]=0)&&(recv[4]=0)&&(sock=0)&&(recv[4]<0xFF)) + { + len = recv[4]; + int i= 0; + for (; i")); + DUMP_SPI(recv, count); + IF_SPI_DUMP(printk("<==")); + DUMP_SPI(reply, _count); + replyCount = _count; + return _result; +} + +unsigned char* getStartCmdSeq(unsigned char* _recv, int len, int *offset) +{ + int i = 0; + *offset = 0; + //DEB_PIN_UP(); + for (; inParam, + (char*) &(spiMsg->params[0]), cmd_spi_list[i].ctx); + }else + { + tSpiMsgData* spiMsg = (tSpiMsgData*) recv; + _result = cmd_spi_list[i].cb(spiMsg->nParam, + (char*) &(spiMsg->params[0]), cmd_spi_list[i].ctx); + } + + if (_result != WIFI_SPI_ACK) + return REPLY_ERR_CMD; + else + return REPLY_NO_ERR; + }else{ + if (spiMsg8(cmdId)) + { + tSpiMsg* spiMsg = (tSpiMsg*) recv; + _result = cmd_spi_list[i].cb(spiMsg->nParam, + (char*) &(spiMsg->params[0]), NULL); + }else{ + tSpiMsgData* spiMsg = (tSpiMsgData*) recv; + _result = cmd_spi_list[i].cb(spiMsg->nParam, + (char*) &(spiMsg->params[0]), NULL); + } + //Send Reply for GET commands or Immediate SET apply + if (cmd_spi_list[i].flags == CMD_GET_FLAG) { + if (sendReply(i, recv, reply, cmd_spi_list[i].ctx) != SPI_OK) + return REPLY_ERR_GET; + else + return REPLY_NO_ERR; + }else if (cmd_spi_list[i].flags == CMD_IMM_SET_FLAG) + { + if (sendReply(i, recv, reply, &_result) != SPI_OK) + return REPLY_ERR_GET; + else + return REPLY_NO_ERR; + + } + } + } + } + // Command not found + if (i==ARRAY_SIZE(cmd_spi_list)) + { + WARN("Unknown cmd 0x%x\n", cmdId); + DUMP(recv, count); + return REPLY_ERR_CMD; + } + return REPLY_NO_ERR; +} + +void init_spi_cmds(void* ctx) { + spi_add_cmd(SET_NET_CMD, set_net_cmd_cb, ack_reply_cb, NULL, CMD_SET_FLAG); + spi_add_cmd(SET_PASSPHRASE_CMD, set_passphrase_cmd_cb, ack_reply_cb, NULL, CMD_SET_FLAG); + spi_add_cmd(SET_KEY_CMD, set_key_cmd_cb, ack_reply_cb, NULL, CMD_SET_FLAG); + spi_add_cmd(SET_IP_CONFIG_CMD, set_ip_config_cmd_cb, ack_reply_cb, ctx, CMD_SET_FLAG); + spi_add_cmd(SET_DNS_CONFIG_CMD, set_dns_config_cmd_cb, ack_reply_cb, ctx, CMD_SET_FLAG); + spi_add_cmd(GET_CONN_STATUS_CMD, get_result_cmd_cb, get_reply_cb, NULL, CMD_GET_FLAG); + spi_add_cmd(GET_IPADDR_CMD, ack_cmd_cb, get_reply_ipaddr_cb, NULL, CMD_GET_FLAG); + spi_add_cmd(GET_MACADDR_CMD, ack_cmd_cb, get_reply_mac_cb, NULL, CMD_GET_FLAG); + spi_add_cmd(GET_CURR_SSID_CMD, ack_cmd_cb, get_reply_curr_net_cb, (void*)GET_CURR_SSID_CMD, CMD_GET_FLAG); + spi_add_cmd(GET_CURR_BSSID_CMD, ack_cmd_cb, get_reply_curr_net_cb, (void*)GET_CURR_BSSID_CMD, CMD_GET_FLAG); + spi_add_cmd(GET_CURR_RSSI_CMD, ack_cmd_cb, get_reply_curr_net_cb, (void*)GET_CURR_RSSI_CMD, CMD_GET_FLAG); + spi_add_cmd(GET_CURR_ENCT_CMD, ack_cmd_cb, get_reply_curr_net_cb, (void*)GET_CURR_ENCT_CMD, CMD_GET_FLAG); + spi_add_cmd(START_SCAN_NETWORKS, start_scan_net_cmd_cb, ack_reply_cb, NULL, CMD_SET_FLAG); + spi_add_cmd(SCAN_NETWORKS, ack_cmd_cb, get_reply_scan_networks_cb, NULL, CMD_GET_FLAG); + spi_add_cmd(DISCONNECT_CMD, disconnect_cmd_cb, ack_reply_cb, NULL, CMD_SET_FLAG); + spi_add_cmd(GET_IDX_ENCT_CMD, ack_cmd_cb, get_reply_idx_net_cb, (void*)GET_IDX_ENCT_CMD, CMD_GET_FLAG); + spi_add_cmd(GET_IDX_SSID_CMD, ack_cmd_cb, get_reply_idx_net_cb, (void*)GET_IDX_SSID_CMD, CMD_GET_FLAG); + spi_add_cmd(GET_IDX_RSSI_CMD, ack_cmd_cb, get_reply_idx_net_cb, (void*)GET_IDX_RSSI_CMD, CMD_GET_FLAG); + spi_add_cmd(REQ_HOST_BY_NAME_CMD, req_reply_host_by_name_cb, ack_reply_cb, NULL, CMD_SET_FLAG); + spi_add_cmd(GET_HOST_BY_NAME_CMD, ack_cmd_cb, get_reply_host_by_name_cb, NULL, CMD_GET_FLAG); + spi_add_cmd(START_SERVER_TCP_CMD, start_server_tcp_cmd_cb, ack_reply_cb, NULL, CMD_SET_FLAG); + spi_add_cmd(START_CLIENT_TCP_CMD, start_client_tcp_cmd_cb, ack_reply_cb, NULL, CMD_SET_FLAG); + spi_add_cmd(STOP_CLIENT_TCP_CMD, stop_client_tcp_cmd_cb, ack_reply_cb, NULL, CMD_SET_FLAG); + spi_add_cmd(GET_STATE_TCP_CMD, ack_cmd_cb, get_state_tcp_cmd_cb, NULL, CMD_GET_FLAG); + spi_add_cmd(GET_DATA_TCP_CMD, ack_cmd_cb, get_data_tcp_cmd_cb, NULL, CMD_GET_FLAG); + spi_add_cmd(AVAIL_DATA_TCP_CMD, ack_cmd_cb, avail_data_tcp_cmd_cb, NULL, CMD_GET_FLAG); + spi_add_cmd(SEND_DATA_TCP_CMD, send_data_tcp_cmd_cb, ack_reply_cb, NULL, CMD_IMM_SET_FLAG); + spi_add_cmd(DATA_SENT_TCP_CMD, ack_cmd_cb, data_sent_tcp_cmd_cb, NULL, CMD_GET_FLAG); + spi_add_cmd(GET_DATABUF_TCP_CMD, ack_cmd_cb, get_databuf_tcp_cmd_cb, NULL, CMD_GET_FLAG); + spi_add_cmd(GET_CLIENT_STATE_TCP_CMD, ack_cmd_cb, get_client_state_tcp_cmd_cb, NULL, CMD_GET_FLAG); + spi_add_cmd(GET_FW_VERSION_CMD, ack_cmd_cb, get_firmware_version_cmd_cb, NULL, CMD_GET_FLAG); + spi_add_cmd(GET_TEST_CMD, ack_cmd_cb, get_test_cmd_cb, NULL, CMD_GET_FLAG); + spi_add_cmd(INSERT_DATABUF_CMD, insert_data_cmd_cb, ack_reply_cb, NULL, CMD_IMM_SET_FLAG); + spi_add_cmd(SEND_DATA_UDP_CMD, send_data_udp_cmd_cb, ack_reply_cb, NULL, CMD_SET_FLAG); + spi_add_cmd(GET_REMOTE_DATA_CMD, ack_cmd_cb, get_reply_remote_data_cb, NULL, CMD_GET_FLAG); +} + + +int checkMsgParam8(unsigned char* buf) +{ + int paramLenTot=0; + tSpiMsg* spiMsg = (tSpiMsg*)buf; + tParam *param = spiMsg->params; + int i=0; + for (; inParam; ++i) + { + uint8_t _len = param->paramLen; + paramLenTot+= _len+1; + //printk("%d) len:0x%x\n", i, _len); + param = (tParam*)((char*)(param)+_len+1); + } + return paramLenTot; +} + +int checkMsgParam16(unsigned char* buf) +{ + int paramLenTot=0; + tSpiMsgData* spiMsg = (tSpiMsgData*)buf; + tDataParam* param = (tDataParam*)spiMsg->params; + int i=0; + for (; inParam; ++i) + { + uint16_t _len = param->dataLen; + paramLenTot+= _len+sizeof(param->dataLen); + //printk("%d) len:0x%x\n", i, _len); + param = (tDataParam*)((char*)(param)+_len+sizeof(param->dataLen)); + } + return paramLenTot; +} + +bool checkMsgFormat(uint8_t* _recv, int len, int* offset) +{ + + unsigned char* recv = getStartCmdSeq(_recv, len, offset); + if ((recv == NULL)||(recv!=_recv)) + { + DEB_PIN_TRIGGER(); + + IF_WARN_VER(DUMP((char*)_recv, len)); + + STATSPI_DISALIGN_ERROR(); + + if (recv == NULL) + return false; + } + tSpiMsg* spiMsg = (tSpiMsg*) recv; + if ((spiMsg->cmd == START_CMD)&&((spiMsg->tcmd & REPLY_FLAG) == 0)) + { + int paramLenTot = 0; + if (spiMsg8(spiMsg->tcmd)) + paramLenTot = checkMsgParam8(recv); + else + { + DUMP_SPI(_recv, len); + paramLenTot = checkMsgParam16(recv); + } + + //INFO_SPI("cmd:0x%x TotLen:%d\n", spiMsg->tcmd, paramLenTot); + char* p = (char*)recv + paramLenTot + sizeof(tSpiHdr); + if (*p == END_CMD) + { + return true; + }else{ + WARN("%d] Not found end cmd: 0x%x\n", cmdCorr, *p); + } + } + return false; +} + +//#define AVR32_USART_CSR_ITERATION_MASK (UNDERRUN) 0x00000400 +//#define AVR32_USART_CSR_OVRE_MASK 0x00000020 +//#define AVR32_USART_CSR_RXRDY_MASK 0x00000001 + + +void spi_poll(struct netif* netif) { + + ard_netif = netif; + + if (startReply) + { + startReply = false; + int offset = 0; + DISABLE_SPI_INT(); + if (checkMsgFormat(_receiveBuffer, receivedChars, &offset)) + { + state = SPI_CMD_INPROGRESS; + count = receivedChars-offset; + if (count >= CMD_MAX_LEN) + count = CMD_MAX_LEN; + memcpy(buf, &_receiveBuffer[offset], count); + + //mark as buffer used + _receiveBuffer[0] = 0; + + int err = call_reply_cb(buf, &reply[0]); + if (err != REPLY_NO_ERR) + { + DUMP_SPI(buf, count); + DUMP_SPI(reply, replyCount); + } + receivedChars = 0; + count = 0; + state = SPI_CMD_IDLE; + } + else + { + sendError(); + WARN("%d] Check format msg failed!\n", cmdCorr); + IF_WARN_VER(dump((char*)_receiveBuffer, receivedChars)); + state = SPI_CMD_IDLE; + count=0; + //mark as buffer used + _receiveBuffer[0] = 0; + } + CLEAR_SPI_INT(); + //Enable Spi int to receive a new command + ENABLE_SPI_INT(); + //Available for receiving a new spi data + AVAIL_FOR_SPI(); + } + +#ifdef _SPI_STATS_ + if (statSpi.lastError != 0) + { + WARN("%d] Errot=0x%x spiStatus:0x%x\n", cmdCorr, statSpi.lastError, statSpi.status); + statSpi.lastError = 0; + } +#endif +} + +inline int spi_slaveReceiveInt(volatile avr32_spi_t *spi) +{ + receivedChars=0; + int index = 0; + int err = SPI_OK; + state = SPI_CMD_INPUT; + bool endOfFrame = false; + + do { + unsigned int timeout = SPI_TIMEOUT; + err = SPI_OK; + + while ((spi->sr & (AVR32_SPI_SR_RDRF_MASK | AVR32_SPI_SR_TXEMPTY_MASK)) != + (AVR32_SPI_SR_RDRF_MASK | AVR32_SPI_SR_TXEMPTY_MASK)) { + if ((timeout--)==0) { + err=SPI_ERROR_TIMEOUT; + break; + } + } + //DEB_PIN_TG(); + #if 0 +#ifdef _SPI_STATS_ + if (spi->sr & AVR32_SPI_SR_OVRES_MASK) + { + STATSPI_OVERRIDE_ERROR(); + } +#endif +#endif + if (err == SPI_OK) { + _receiveBuffer[index] = (spi->rdr >> AVR32_SPI_RDR_RD_OFFSET) & 0x00ff; + DEB_PIN_UP(2); + if ((index==0) && (_receiveBuffer[index] != START_CMD)) + DEB_PIN_TRIGGER(); + ++index; + ++receivedChars; + }else{ +#ifdef _SPI_STATS_ + STATSPI_TIMEOUT_ERROR(); +#endif + break; + } + + /* break on buffer overflow */ + if (receivedChars >= _BUFFERSIZE) { + err = SPI_ERROR_OVERRUN_AND_MODE_FAULT; + break; + } + + if (_receiveBuffer[index - 1] == END_CMD) + { + int8_t numParams = 0; + int idx = PARAM_LEN_POS+1; + bool islen16bit = ((_receiveBuffer[CMD_POS] & DATA_FLAG) == DATA_FLAG); + if (index >= idx) + { + numParams = _receiveBuffer[PARAM_LEN_POS]; + while (((index-1) > idx)&&(numParams>0)) + { + if (islen16bit) + idx += (_receiveBuffer[idx]<<8) + _receiveBuffer[idx+1]+2; + else + idx += _receiveBuffer[idx]+1; + --numParams; + } + if (((index-1) == idx) && (numParams == 0)) + endOfFrame = true; + } + if (!endOfFrame){ + WARN("Wrong termination index:%d nParam:%d idx:%d 16bit:%d\n", index, numParams, idx, islen16bit); + #ifdef _DEBUG_ + dump((char*)_receiveBuffer, receivedChars); + while(0); + #endif + } + } + } while (!endOfFrame); + return err; +} + +#if defined (__GNUC__) +__attribute__((__interrupt__)) +#elif defined (__ICCAVR32__) +__interrupt +#endif +static void spi_int_handler(void) +{ + volatile avr32_spi_t *spi = ARD_SPI; + DEB_PIN_DN(2); + DISABLE_SPI_INT(); + + if ((spi->sr & AVR32_SPI_SR_RDRF_MASK) != 0) + { + int err = spi_slaveReceiveInt(ARD_SPI); + if (err == SPI_OK) + { + BUSY_FOR_SPI(); + startReply=true; + ++cmdCorr; + //maintain disable interrupt to send the reply command + return; + } + } + ENABLE_SPI_INT(); +} + +inline spi_status_t spi_read8(volatile avr32_spi_t *spi, unsigned char *data) +{ + unsigned int timeout = SPI_TIMEOUT; + + while ((spi->sr & (AVR32_SPI_SR_RDRF_MASK | AVR32_SPI_SR_TXEMPTY_MASK)) != + (AVR32_SPI_SR_RDRF_MASK | AVR32_SPI_SR_TXEMPTY_MASK)) { + if (!timeout--) { + return SPI_ERROR_TIMEOUT; + } + } + + *data = (spi->rdr >> AVR32_SPI_RDR_RD_OFFSET) & 0x00ff; + + return SPI_OK; +} + + +/*! + * \brief Interrupt handler of the External interrupt line "1". + */ +#if __GNUC__ +__attribute__((__interrupt__)) +#elif __ICCAVR32__ +__interrupt +#endif +static void eic_int_handler1(void) +{ + eic_clear_interrupt_line(&AVR32_EIC, EXT_INT_LINE1); + startRecvCmdSignal = TRUE; +} + +//! Structure holding the configuration parameters of the EIC module. +eic_options_t eic_options[EXT_INT_NB_LINES]; + +void initExtInt() +{ + // Enable edge-triggered interrupt. + eic_options[0].eic_mode = EIC_MODE_EDGE_TRIGGERED; + // Interrupt will trigger on falling edge. + eic_options[0].eic_edge = EIC_EDGE_FALLING_EDGE; + // Initialize in synchronous mode : interrupt is synchronized to the clock + eic_options[0].eic_async = EIC_SYNCH_MODE; + // Set the interrupt line number. + eic_options[0].eic_line = EXT_INT_LINE1; + + // Disable all interrupts. + Disable_global_interrupt(); + + INTC_register_interrupt(&eic_int_handler1, EXT_INT_IRQ_LINE1, AVR32_INTC_INT0); + + // Map the interrupt lines to the GPIO pins with the right peripheral functions. + gpio_enable_module_pin(EXT_INT_PIN_LINE1,EXT_INT_FUNCTION_LINE1); + + // Init the EIC controller with the options + eic_init(&AVR32_EIC, eic_options, EXT_INT_NB_LINES); + + // Enable the chosen lines and their corresponding interrupt feature. + eic_enable_line(&AVR32_EIC, eic_options[0].eic_line); + eic_enable_interrupt_line(&AVR32_EIC, eic_options[0].eic_line); + + // Enable all interrupts. + Enable_global_interrupt(); +} + +int initSpi(void* ctx) +{ + volatile avr32_spi_t *spi = &AVR32_SPI0; + gpio_map_t spi_piomap = { \ + {AVR32_SPI0_SCK_0_0_PIN, AVR32_SPI0_SCK_0_0_FUNCTION}, \ + {AVR32_SPI0_MISO_0_0_PIN, AVR32_SPI0_MISO_0_0_FUNCTION}, \ + {AVR32_SPI0_MOSI_0_0_PIN, AVR32_SPI0_MOSI_0_0_FUNCTION}, \ + {AVR32_SPI0_NPCS_0_0_PIN, AVR32_SPI0_NPCS_0_0_FUNCTION}, \ + }; + + INFO_INIT("SPI init...\n"); + + /* Init PIO */ + gpio_enable_module(spi_piomap, ARRAY_SIZE(spi_piomap)); + + spi_options_t spiOptions; + + spiOptions.reg = 0; + spiOptions.baudrate = SPI_SLAVE_SPEED; + spiOptions.bits = SPI_BITS; + spiOptions.spck_delay = 0; + spiOptions.trans_delay = 4; + spiOptions.stay_act = 0; + spiOptions.spi_mode = 0; + spiOptions.modfdis = 0; + + /* Initialize as slave; bits, spi_mode */ + if (spi_initSlave(spi, spiOptions.bits, spiOptions.spi_mode) != SPI_OK) + { + INFO_SPI("SPI initialization failed!"); + return 1; + } + + spi_status_t status = spi_setupChipReg(spi, &spiOptions, FPBA_HZ); + if (status == SPI_ERROR_ARGUMENT) + WARN("Error configuring SPI\n"); + + // Disable all interrupts. + Disable_global_interrupt(); + + // Register the SPI interrupt handler to the interrupt controller. + INTC_register_interrupt((__int_handler)(&spi_int_handler), AVR32_SPI0_IRQ, AVR32_INTC_INT0); + + // Enable all interrupts. + Enable_global_interrupt(); + + ENABLE_SPI_INT(); + + spi_enable(spi); +#ifdef _SPI_STATS_ + initStatSpi(); +#endif + init_spi_cmds(ctx); + + memset(_receiveBuffer, 0, sizeof(_receiveBuffer)); + memset(buf, 0, sizeof(buf)); + memset(reply, 0, sizeof(reply)); + + initMapSockTcp(); + set_result(WL_IDLE_STATUS); + + init_pBuf(); + + return 0; +} + diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/ard_spi.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/ard_spi.h new file mode 100644 index 000000000..27ec33e81 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/ard_spi.h @@ -0,0 +1,88 @@ +/* + * ard_spi.h + * + * Created on: May 27, 2010 + * Author: mlf by Metodo2 srl + */ + +#ifndef ARD_SPI_H_ +#define ARD_SPI_H_ + +#include "lwip/netif.h" +#include "console.h" +#include "wl_definitions.h" + + +typedef enum { + SPI_CMD_IDLE, + SPI_CMD_INPUT, + SPI_CMD_DONE, + SPI_CMD_INPROGRESS, + SPI_CMD_REPLING, + SPI_CMD_FAIL, +} cmd_spi_state_t; + +typedef enum { + REPLY_ERR_GET, + REPLY_ERR_SET, + REPLY_ERR_CMD, + REPLY_ERR_MSG, + REPLY_NO_ERR, +} reply_err_t; + + +typedef enum { + CMD_GET_FLAG = 0x01, + CMD_SET_FLAG = 0x02, + CMD_IMM_SET_FLAG = 0x04, +}cmd_flags; + +typedef enum eProtMode {TCP_MODE, UDP_MODE}tProtMode; + +#define TIMEOUT_SPI 200 +#define SPI_ALIGN_ERROR 0xF0 +#define SPI_OVERRIDE_ERROR 0xF1 +#define SPI_TIMEOUT_ERROR 0xF2 +#define DUMMY_DATA 0xFF + +typedef int (*cmd_spi_cb_t)(int numParam, char* buf, void* ctx); +typedef cmd_spi_state_t (*cmd_spi_rcb_t)(char* recv, char* reply, void* ctx, uint16_t* _count); + +typedef struct eRemoteClient{ + uint32_t ipaddr; + uint16_t port; +}tRemoteClient; + +void set_result_cmd(int err) ; + +void set_result(wl_status_t _status); + +int initSpi(void* ctx); + +void initExtInt(); + +void spi_poll(struct netif* netif); + +int spi_slaveReceive(volatile avr32_spi_t *spi); + +void showTTCPstatus(); + +int getSock(void * _ttcp); + +void* getTTCP(uint8_t sock, uint8_t mode); + +void setMapSockMode(uint8_t sock, void* _ttcp, uint8_t _tcp_mode); + +void clearMapSockTcp(uint8_t sock, uint8_t mode); + +int start_server_tcp(uint16_t port, uint8_t sock, uint8_t protMode); + +int start_client_tcp(uint32_t _addr, uint16_t port, uint8_t sock, uint8_t protMode); + +void setRemoteClient(uint16_t sock, uint32_t _ipaddr, uint16_t _port); + +tRemoteClient* getRemoteClient(uint16_t sock); + +void getRemoteData(uint8_t sock, uint8_t mode, tRemoteClient* remoteData); + +#endif /* ARD_SPI_H_ */ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/ard_tcp.c b/external/arduino/avr/firmwares/wifishield/wifiHD/src/ard_tcp.c new file mode 100644 index 000000000..0a73b200d --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/ard_tcp.c @@ -0,0 +1,987 @@ +/* + * ard_tcp.c + * + * Created on: May 27, 2010 + * Author: mlf by Metodo2 srl + */ + +//#define _APP_DEBUG_ +#include "lwip/opt.h" + +#include "lwip/mem.h" +#include "lwip/raw.h" +#include "lwip/icmp.h" +#include "lwip/netif.h" +#include "lwip/sys.h" +#include "lwip/sockets.h" +#include "lwip/inet.h" +#include "lwip/inet_chksum.h" +#include "lwip/tcp.h" +#include "lwip/udp.h" + +#include "ard_tcp.h" +#include "ard_spi.h" +#include "timer.h" +#include "util.h" + +#include "getopt.h" +#include "ard_utils.h" +#include "debug.h" +#include "trace.h" + +unsigned int startTime = 0; +extern bool ifStatus; + +static err_t tcp_data_sent(void *arg, struct tcp_pcb *pcb, u16_t len); + +static void atcp_init_pend_flags(struct ttcp* _ttcp) +{ + int i = 0; + for (; ipending_close[i] = false; + } +} + +/** + * Clean up and free the ttcp structure + */ +static void ard_tcp_destroy(struct ttcp* ttcp) { + err_t err = ERR_OK; + DUMP_TCP_STATE(ttcp); + + uint8_t sock = getSock(ttcp); + if (sock == -1) + WARN("ttcp already deallocated!\n"); + + freeAllTcpData(sock); + int i = 0; + for (; itpcb[i]) { + tcp_arg(ttcp->tpcb[i], NULL); + tcp_sent(ttcp->tpcb[i], NULL); + tcp_recv(ttcp->tpcb[i], NULL); + tcp_err(ttcp->tpcb[i], NULL); + //TEMPORAQARY + //err = tcp_close(ttcp->tpcb); + INFO_TCP("Closing tpcb: state:0x%x err:%d\n", ttcp->tpcb[i]->state, err); + } + } + + if (ttcp->lpcb) { + tcp_arg(ttcp->lpcb, NULL); + tcp_accept(ttcp->lpcb, NULL); + err = tcp_close(ttcp->lpcb); + INFO_TCP("Closing lpcb: state:0x%x err:%d\n", ttcp->lpcb->state, err); + } + + if (ttcp->upcb) { + udp_disconnect(ttcp->upcb); + udp_remove(ttcp->upcb); + } + + FREE_PAYLOAD(ttcp); + free(ttcp); +} + +/** + * Invoked when transfer is done or aborted (non-zero result). + */ +static void ard_tcp_done(struct ttcp* ttcp, int result) { +// if (result == 0) +// ard_tcp_print_stats(ttcp); + + if (ttcp->done_cb) + ttcp->done_cb(ttcp->opaque, result); + + ard_tcp_destroy(ttcp); + clearMapSockTcp(getSock(ttcp), GET_TCP_MODE(ttcp)); +} + +/** + * Only used in TCP mode. + * Will transmit a maximum of pbuf->tot_len bytes. + * Called upon connect and when there's space available in the TCP send window + * + */ +static err_t tcp_send_data_pcb(struct ttcp *ttcp, struct tcp_pcb *pcb) { + err_t err = ERR_OK; + uint32_t len; + + GET_CLIENT_ID(ttcp, pcb); + + len = ttcp->left[id]; + ttcp->buff_sent[id] = 0; + + if (len == 0) return ERR_MEM; + + INFO_TCP_VER("left=%d len:%d\n", ttcp->left[id], len); + + /* don't send more than we have in the payload */ + if (len > ttcp->buflen) + len = ttcp->buflen; + + /* We cannot send more data than space available in the send + buffer. */ + if (len > tcp_sndbuf(pcb)) + len = tcp_sndbuf(pcb); + + IF_TCP(startTime = timer_get_ms()); + err = tcp_write(pcb, ttcp->payload[id], len, TCP_WRITE_FLAG_COPY); + if (err != ERR_OK) + { + INFO_TCP("tcp_write failed %p state:%d len:%d err:%d\n", + pcb, pcb->state, len, err); + ttcp->buff_sent[id] = 0; + }else{ + ttcp->buff_sent[id] = 1; + ttcp->left[id] -= len; + } + + return err; +} + + +/** + * Only used in TCP mode. + */ +static err_t tcp_connect_cb(void *arg, struct tcp_pcb *tpcb, err_t err) { + struct ttcp* _ttcp = arg; + + if (_ttcp == NULL) return ERR_ARG; + + GET_CLIENT_ID(_ttcp, tpcb); + INFO_TCP("TTCP [%p-%p]: connect %d %d\n", _ttcp, tpcb, err, tpcb->state); + + _connected = ( tpcb->state == ESTABLISHED) ? 1 : 0; + _ttcp->tcp_poll_retries[id] = 0; + + _ttcp->start_time = timer_get_ms(); + + return ERR_OK; +} + +static void cleanSockState_cb(void *ctx) { + struct ttcp* _ttcp = ctx; + + if (_ttcp == NULL) return; + + int sock = getSock(_ttcp); + if (sock != -1) + clearMapSockTcp(sock, GET_TCP_MODE(_ttcp)); + INFO_TCP("TTCP [%p]: cleanSockState_cb %d\n", _ttcp, sock); + _connected = false; +} + +/** + * Only used in TCP mode. + */ + +static err_t close_conn_pcb(struct tcp_pcb* tpcb) { + + err_t err = tcp_close(tpcb); + if (err== ERR_OK) + { + tcp_arg(tpcb, NULL); + tcp_sent(tpcb, NULL); + tcp_recv(tpcb, NULL); + } + + INFO_TCP("Closing tpcb[%p]: state:0x%x err:%d\n", tpcb, tpcb->state, err); + return err; +} + +static void atcp_conn_err_cb(void *arg, err_t err) { + struct ttcp* _ttcp = arg; + + WARN("TTCP [%p]: connection error: %d currId:%d\n", + _ttcp, err, getCurrClientConnId()); + + if (ifStatus == false) + printk("Abort connection\n"); + + if (err == ERR_ABRT) + { + removeNewClientConn(_ttcp, GET_CURR_PCB(_ttcp)); + FREE_PAYLOAD_ID(_ttcp, getCurrClientConnId()); + } +} + +static void atcp_conn_cli_err_cb(void *arg, err_t err) { + struct ttcp* _ttcp = arg; + + if (_ttcp == NULL) return; + + WARN("TTCP [%p]: connection error: %d arg:%p\n", + _ttcp, err, arg); + + if (ifStatus == false) + printk("Abort connection\n"); + + if ((_ttcp)&&(err == ERR_ABRT)) + { + WARN("TTCP [%p]: free memory\n", _ttcp); + cleanSockState_cb(_ttcp); + // TODO + FREE_PAYLOAD(_ttcp); + } + + //atcp_init_pend_flags(_ttcp); +} + +static err_t close_conn(struct ttcp *_ttcp, struct tcp_pcb* tpcb) { + + if (_ttcp == NULL) return ERR_MEM; + + GET_CLIENT_ID(_ttcp, tpcb); + + err_t err = close_conn_pcb(_ttcp->tpcb[id]); + + if (err == ERR_MEM) + { + WARN("Cannot close id:%d-%p put pending\n", id, _ttcp->tpcb[id]); + _ttcp->pending_close[id] = true; + } + else{ + _ttcp->pending_close[id] = false; + removeNewClientConn(_ttcp, _ttcp->tpcb[id]); + FREE_PAYLOAD_ID(_ttcp, id); + INFO_TCP("----------------------\n"); + } + return err; +} + +void closeConnections() +{ + int ii=0; + for (; iiudp == TCP_MODE) + { + ard_tcp_destroy(_ttcp); + clearMapSockTcp(getSock(_ttcp), GET_TCP_MODE(_ttcp)); + } + } + } + } +} + +/** + * Only used in TCP mode. + */ +static err_t atcp_recv_cb(void *arg, struct tcp_pcb *pcb, struct pbuf *p, + err_t err) { + struct ttcp* ttcp = arg; + + if (err == ERR_OK && p != NULL) { + DATA_LED_ON(); + /* for print_stats() */ + ttcp->recved += p->tot_len; + + if ((ttcp->verbose)||(verboseDebug & INFO_TCP_FLAG)) { + INFO_TCP("len:%d\n",p->tot_len); + DUMP_TCP(p->payload, p->tot_len); + ttcp->print_cnt++; + } + + uint8_t* pBufferStore = insert_pBuf(p, ttcp->sock, (void*) pcb); + INFO_TCP("sock:%d pcb:%p pbuf:%p err:%d bufStore:%p len:%d\n", + ttcp->sock, pcb, p, err, pBufferStore, p->tot_len); + pbuf_free(p); + DATA_LED_OFF(); + } + + /* p will be NULL when remote end is done */ + if (err == ERR_OK && p == NULL) { + INFO_TCP("atcp_recv_cb p=NULL on sock:%d pcb:%p\n", ttcp->sock, pcb); + close_conn(ttcp, pcb); + } + + if (err!=ERR_OK) + WARN("err=%d p=%p\n", err, p); + return ERR_OK; +} + +void ack_recved(void* pcb, int len) { + // Comment the call because it is activated on atcp_recv_cb + INFO_TCP("Received %p len:%d\n", pcb, len); + tcp_recved(pcb, len); +} + +static err_t atcp_poll(void *arg, struct tcp_pcb *pcb) { + struct ttcp* _ttcp = arg; + + if (_ttcp == NULL) return ERR_ARG; + + GET_CLIENT_ID(_ttcp, pcb); + + if (_ttcp->left[id]>0) + ++_ttcp->tcp_poll_retries[id]; + + if (_ttcp->tcp_poll_retries[id] > 4) { + WARN("ARD TCP [%p] arg=%p retries=%d abort\n", + pcb, arg, _ttcp->tcp_poll_retries[id]); + _ttcp->tcp_poll_retries[id] = 0; + tcp_abort(pcb); + _ttcp->pending_close[id] = false; + return ERR_ABRT; + } + + if (pcb) + INFO_TCP_POLL("keepAliveCnt:%d keep_idle:%d persist_cnt:%d\n", + pcb->keep_cnt_sent, pcb->keep_idle, pcb->persist_cnt); + + if (_ttcp->left[id] > 0) + INFO_TCP("ARD TCP [%p-%p] arg=%p retries=%d pend.close:%d len:%d\n", + (_ttcp)?GET_FIRST_CLIENT_TCP(_ttcp):0, pcb, arg, + _ttcp->tcp_poll_retries[id], _ttcp->pending_close[id], (_ttcp)?_ttcp->left[id]:0); + tcp_send_data_pcb(_ttcp, pcb); + + if (_ttcp->pending_close[id]) + { + err_t err = ERR_OK; + if (id >=0){ + err = tcp_close(pcb); + if (err == ERR_MEM) + { + _ttcp->pending_close[id] = true; + } + else + { + _ttcp->pending_close[id] = false; + removeNewClientConn(_ttcp, _ttcp->tpcb[id]); + FREE_PAYLOAD_ID(_ttcp, id); + INFO_TCP("----------------------\n"); + } + } + INFO_TCP("ARD TCP [%p-%p] try to close pending:%d err:%d id:%d\n", pcb, + (_ttcp)?GET_FIRST_CLIENT_TCP(_ttcp):0, _ttcp->pending_close[id], err, id); + } + return ERR_OK; +} + +static err_t atcp_poll_conn(void *arg, struct tcp_pcb *pcb) { + struct ttcp* _ttcp = arg; + + if (_ttcp == NULL) return ERR_ARG; + + GET_CLIENT_ID(_ttcp, pcb) + + INFO_TCP_POLL("ARD TCP [%p-%p] arg=%p retries=%d pend.close:%d conn:%d\n", + (_ttcp)?GET_FIRST_CLIENT_TCP(_ttcp):0, pcb, arg, + _ttcp->tcp_poll_retries[id], _ttcp->pending_close[id], _connected); + + if (id != NO_VALID_ID) + { + if (_ttcp->pending_close[id]) + ++(_ttcp->tcp_poll_retries[id]); + } + + if (_ttcp->tcp_poll_retries[id] > 8) { + WARN("ARD TCP [%p-%p] arg=%p retries=%d\n", + pcb, GET_FIRST_CLIENT_TCP(_ttcp), arg, _ttcp->tcp_poll_retries[id]); + _ttcp->tcp_poll_retries[id] = 0; + tcp_abort(pcb); + return ERR_ABRT; + } + + if ((_ttcp)&&(_connected)) tcp_send_data_pcb(_ttcp, pcb); + + if ((id != NO_VALID_ID) && (_ttcp->pending_close[id])) + { + err_t err = tcp_close(pcb); + if (err == ERR_MEM) + { + _ttcp->pending_close[id] = true; + } + else + { + cleanSockState_cb(_ttcp); + FREE_PAYLOAD_ID(_ttcp, id); + _ttcp->pending_close[id] = false; + } + + INFO_TCP("ARD TCP [%p-%p] try to close pending:%d\n", pcb, (_ttcp)?GET_FIRST_CLIENT_TCP(_ttcp):0, _ttcp->pending_close[id]); + } + return ERR_OK; +} + +int8_t currConnId = 0; + +int8_t getCurrClientConnId() { return currConnId;} + +int8_t getNewClientConnId(struct ttcp* _ttcp, struct tcp_pcb *newpcb) +{ + if (_ttcp != NULL){ + int i = 0; + for (; itpcb[idx] == newpcb) + { + INFO_TCP_VER("ttcp:%p id=%d, tpcb=%p\n", _ttcp, idx, newpcb); + return idx; + } + } + } + WARN("No Valid Id for ttcp:%p pcb:%p\n", _ttcp, newpcb); + return NO_VALID_ID; +} + +struct tcp_pcb * getFirstClient(struct ttcp* _ttcp, bool verbose) +{ + if (_ttcp != NULL){ + int i = 0; + for (; itpcb[idx] != NULL) + { + if (verbose) INFO_TCP("ttcp:%p id=%d, tpcb=%p\n", _ttcp, idx, _ttcp->tpcb[idx]); + currConnId = idx; + return _ttcp->tpcb[idx]; + } + } + } + if (verbose) WARN("No Valid client for ttcp:%p\n", _ttcp); + return NULL; +} + + +int8_t setNewClientConn(struct ttcp* _ttcp, struct tcp_pcb *newpcb, uint8_t id) +{ + if ((_ttcp != NULL)&&(id>=0)&&(idtpcb[id] = newpcb; + return id; + } + return NO_VALID_ID; +} + +int8_t insertNewClientConn(struct ttcp* _ttcp, struct tcp_pcb *newpcb) +{ + if (_ttcp != NULL){ + int i = 0; + for (; itpcb[idx] == NULL)||(_ttcp->tpcb[idx] == newpcb)) + { + INFO_TCP("ttcp:%p id=%d, tpcb=%p\n", _ttcp, idx, newpcb); + _ttcp->tpcb[idx] = newpcb; + return idx; + } + } + } + return NO_VALID_ID; +} + +int8_t removeNewClientConn(struct ttcp* _ttcp, struct tcp_pcb *newpcb) +{ + if (_ttcp != NULL){ + int i = 0; + for (; itpcb[idx] == newpcb) + { + INFO_TCP("ttcp:%p id=%d, tpcb=%p\n", _ttcp, idx, newpcb); + _ttcp->tpcb[idx] = NULL; + return idx; + } + } + } + return NO_VALID_ID; +} + +bool cleanNewClientConn(struct ttcp* _ttcp) +{ + if (_ttcp != NULL){ + int i = 0; + for (; itpcb[i] = NULL; + return true; + } + return false; +} + + +/** + * Only used in TCP mode. + */ +static err_t atcp_accept_cb(void *arg, struct tcp_pcb *newpcb, err_t err) { + struct ttcp* _ttcp = arg; + + if (_ttcp == NULL) return ERR_ARG; + + INFO_TCP("ARD TCP [%p]: accept new [%p]\n", _ttcp, newpcb); + INFO_TCP("local:%d remote:%d state:%d\n", newpcb->local_port, newpcb->remote_port, newpcb->state); + + int8_t id = insertNewClientConn(_ttcp, newpcb); + + ASSERT((_ttcp->payload[id]==NULL), "payload not freed!"); + _ttcp->payload[id] = malloc(_ttcp->buflen); + INFO_TCP("Alloc payload %d-%p\n", id, _ttcp->payload[id]); + if (_ttcp->payload[id] == NULL) { + WARN("TTCP [%p]: could not allocate payload\n", _ttcp); + return -1; + } + tcp_arg(_ttcp->tpcb[id], _ttcp); + tcp_recv(_ttcp->tpcb[id], atcp_recv_cb); + tcp_err(_ttcp->tpcb[id], atcp_conn_err_cb); + tcp_poll(_ttcp->tpcb[id], atcp_poll, 4); + // Copy the pointer to ttcp also to TRANSMIT mode for the clients connected to the server + int _sock = getSock(_ttcp); + if ((_sock != -1)&&(IS_VALID_SOCK(_sock))) + setMapSockMode(_sock, _ttcp, TTCP_MODE_TRANSMIT); + _ttcp->start_time = timer_get_ms(); + return ERR_OK; +} + +/** + * Start TCP transfer. + */ +static int atcp_start(struct ttcp* ttcp) { + err_t err = ERR_OK; + + struct tcp_pcb * p = tcp_new(); + + if (p == NULL) { + WARN("TTCP [%p]: could not allocate pcb\n", ttcp); + return -1; + } + + currConnId = 0; + tcp_arg(p, ttcp); + atcp_init_pend_flags(ttcp); + + if (ttcp->mode == TTCP_MODE_TRANSMIT) { + int8_t id = insertNewClientConn(ttcp, p); + ttcp->payload[id] = malloc(ttcp->buflen); + INFO_TCP("Alloc payload %d-%p\n", id, ttcp->payload[id]); + if (ttcp->payload[id] == NULL) { + WARN("TTCP [%p]: could not allocate payload\n", ttcp); + return -1; + } + + struct tcp_pcb * pcb = p; + tcp_err(pcb, atcp_conn_cli_err_cb); + tcp_recv(pcb, atcp_recv_cb); + tcp_sent(pcb, tcp_data_sent); + tcp_poll(pcb, atcp_poll_conn, 4); + _connected = false; + INFO_TCP("[tpcb]-%p payload:%p\n", pcb, ttcp->payload[id]); + DUMP_TCP_STATE(ttcp); + if (tcp_connect(pcb, &ttcp->addr, ttcp->port, tcp_connect_cb) + != ERR_OK) { + WARN("TTCP [%p]: tcp connect failed\n", ttcp); + return -1; + } + + } else { + INFO_TCP("BEFORE BIND ttcp:%p lpcb:%p pcb:%p\n", ttcp, ttcp->lpcb, GET_FIRST_CLIENT_TCP(ttcp)); + + err = tcp_bind(p, IP_ADDR_ANY, ttcp->port); + if (err != ERR_OK){ + WARN("TTCP [%p]: bind failed err=%d Port already used\n", ttcp, err); + return -1; + } + + ttcp->lpcb = tcp_listen(p); + if (ttcp->lpcb == NULL) { + WARN("TTCP [%p]: listen failed\n", ttcp); + return -1; + } + + DUMP_TCP_STATE(ttcp); + tcp_accept(ttcp->lpcb, atcp_accept_cb); + } + + return 0; +} + +/** + * Only used in UDP mode. Will finalize the ttcp process when an end marker + * is seen. + */ +static void audp_recv_cb(void *arg, struct udp_pcb *upcb, struct pbuf *p, + struct ip_addr *addr, u16_t port) { + struct ttcp* ttcp = arg; + + /* for print_stats() */ + ttcp->recved += p->tot_len; + DUMP(p->payload,p->tot_len); + if (ttcp->verbose) { + printk("."); + if (ttcp->print_cnt % 80 == 0) + printk("\n"); + ttcp->print_cnt++; + } + INFO_TCP("UDP Insert %p sock:%d addr:%s port:%d\n", p, ttcp->sock, + ip2str(*addr), port); + insert_pBuf(p, ttcp->sock, (void*) upcb); + setRemoteClient(ttcp->sock, addr->addr, port); + + pbuf_free(p); +} + +/** + * Start UDP transfer. + */ +static int udp_start(struct ttcp* ttcp) { + err_t err = ERR_OK; + ttcp->udp_end_marker_left = 5; + ttcp->upcb = udp_new(); + if (ttcp->upcb == NULL) { + WARN("TTCP [%p]: could not allocate pcb\n", ttcp); + return -1; + } + + INFO_TCP("%s, upcb:%p %s:%d\n", __FUNCTION__, ttcp->upcb, ip2str(ttcp->addr), ttcp->port); + if (ttcp->mode == TTCP_MODE_TRANSMIT) { + if (udp_connect(ttcp->upcb, &(ttcp->addr), ttcp->port) != ERR_OK) { + WARN("TTCP [%p]: udp connect failed\n", ttcp); + return -1; + } + udp_recv(ttcp->upcb, audp_recv_cb, ttcp); + } else { + /* bind to any IP address on port specified */ + err = udp_bind(ttcp->upcb, IP_ADDR_ANY, ttcp->port); + if (err!= ERR_OK) { + WARN("TTCP [%p]: bind failed err=%d Port already used\n", ttcp, err); + return -1; + } + // clear remote client data + setRemoteClient(ttcp->sock, 0, 0); + udp_recv(ttcp->upcb, audp_recv_cb, ttcp); + } + INFO_TCP("%s, loc:0x%x-%d rem:0x%x-%d\n", __FUNCTION__, + ttcp->upcb->local_ip.addr, ttcp->upcb->local_port, + ttcp->upcb->remote_ip.addr, ttcp->upcb->remote_port); + return 0; +} + +/** + * Start a new ttcp transfer. It should be possible to call this function + * multiple times in order to get multiple ttcp streams. done_cb() will be + * invoked upon completion. + * + */ +int ard_tcp_start(struct ip_addr addr, uint16_t port, void *opaque, + ard_tcp_done_cb_t *done_cb, int mode, uint16_t nbuf, uint16_t buflen, + int udp, int verbose, uint8_t sock, void** _ttcp) { + struct ttcp* ttcp; + int status; + + if (mode != TTCP_MODE_TRANSMIT && mode != TTCP_MODE_RECEIVE) { + WARN("TTCP [-]: invalid mode\n"); + return -1; + } + + if (nbuf == 0) { + WARN("TTCP [-]: invalid nbuf\n"); + return -1; + } + + if (buflen == 0) { + WARN("TTCP [-]: invalid buflen\n"); + return -1; + } + + ttcp = calloc(1, sizeof(struct ttcp)); + if (ttcp == NULL) { + WARN("TTCP [-]: could not allocate memory for ttcp\n"); + return -1; + } + + ttcp->addr = addr; + ttcp->port = port; + ttcp->nbuf = nbuf; + ttcp->mode = mode; + ttcp->done_cb = done_cb; + ttcp->opaque = opaque; + ttcp->udp = udp; + ttcp->verbose = verbose; + ttcp->buflen = buflen; + cleanNewClientConn(ttcp); + + if (ttcp->udp) + status = udp_start(ttcp); + else + status = atcp_start(ttcp); + + if (status) { + WARN("Start server FAILED!\n"); + goto fail; + } + INFO_TCP("TTCP [%p-%p]: nbuf=%d, buflen=%d, port=%d (%s/%s)\n", ttcp, + ((ttcp->udp==1)?(void*)ttcp->upcb:GET_FIRST_CLIENT_TCP(ttcp)), ttcp->nbuf, ttcp->buflen, + ttcp->port, ProtMode2Str(ttcp->udp), Mode2Str(ttcp->mode)); + + *_ttcp = (void*) ttcp; + ttcp->sock = sock; + + return 0; + + fail: ard_tcp_destroy(ttcp); + return -1; +} + +void ard_tcp_stop(void* ttcp) { + struct ttcp* _ttcp = (struct ttcp*) ttcp; + if (_ttcp == NULL) + { + WARN("ttcp = NULL!\n"); + return; + } + if (_ttcp->mode == TTCP_MODE_TRANSMIT) { + int i = getCurrClientConnId(); + ard_tcp_destroy(_ttcp); + clearMapSockTcp(getSock(_ttcp), GET_TCP_MODE(_ttcp)); + _ttcp->tcp_poll_retries[i] = 0; + }else{ + DUMP_TCP_STATE(_ttcp); + + int i = getCurrClientConnId(); + if ((_ttcp)&&(_ttcp->tpcb[i])&&(_ttcp->tpcb[i]->state!=LAST_ACK)&&(_ttcp->tpcb[i]->state!=CLOSED)) + { + // Flush all the data + err_t err=tcp_output(_ttcp->tpcb[i]); + INFO_TCP("flush data: tpcb:%p err:%d\n", _ttcp->tpcb[i], err); + // if any socket cannot be close stop the close connection + close_conn(_ttcp, _ttcp->tpcb[i]); + } + } +} + +uint8_t getStateTcp(void* p, bool client) { + struct ttcp* _ttcp = (struct ttcp*) p; + + if (ifStatus == false) + return CLOSED; + struct tcp_pcb * pcb = GET_FIRST_CLIENT_TCP_NV(_ttcp); + if ((_ttcp != NULL) && ((pcb != NULL) || (client==0))) { + IF_SPI_POLL(DUMP_TCP_STATE(_ttcp)); + if (client) + { + if ((pcb->state != ESTABLISHED)&&(pcb->state != CLOSED)) + DUMP_TCP_STATE(_ttcp); + return pcb->state; + } + else + { + return _ttcp->lpcb->state; + } + } else { + WARN_POLL("TCP not initialized ttcp:%p tpcb:%p lpcb:%p\n", + _ttcp, ((_ttcp)?pcb:0), ((_ttcp)?_ttcp->lpcb:0)); + } + return CLOSED; +} + +uint8_t getModeTcp(void* p) { + struct ttcp* _ttcp = (struct ttcp*) p; + + if (_ttcp != NULL) + return _ttcp->mode; + return 0; +} + +uint8_t isDataSent(void* p) { + struct ttcp *_ttcp = (struct ttcp *)p; + + int8_t id = getCurrClientConnId(); + if ((_ttcp)&&(!_ttcp->buff_sent[id])) + { + return 0; + } + + return 1; +} + +static err_t tcp_data_sent(void *arg, struct tcp_pcb *pcb, u16_t len) { + struct ttcp *_ttcp; + + LWIP_UNUSED_ARG(len); + + _ttcp = arg; + + if (_ttcp == NULL) return ERR_ARG; + + GET_CLIENT_ID(_ttcp, pcb); + _ttcp->tcp_poll_retries[id] = 0; + _ttcp->buff_sent[id] = 1; + + INFO_TCP("Packet sent pcb:%p len:%d dur:%d left:%d\n", pcb, len, timer_get_ms() - startTime, + (_ttcp)?(_ttcp->left[id]):0); + + if ((_ttcp)&&(_ttcp->left[id] > 0)) { + tcp_send_data_pcb(_ttcp, pcb); + } + + return ERR_OK; +} + +int sendTcpData(void* p, uint8_t* buf, uint16_t len) +{ + struct ttcp* _ttcp = (struct ttcp*) p; + + if (_ttcp==NULL) + { + WARN("ttcp == NULL!\n"); + return WL_FAILURE; + } + + struct tcp_pcb * pcb = GET_FIRST_CLIENT_TCP_NV(_ttcp); + GET_CLIENT_ID(_ttcp, pcb); + + INFO_TCP_VER("ttcp:%p pcb:%p buf:%p len:%d\n", _ttcp, pcb, buf, len); + DUMP_TCP(buf,len); + IF_TCP_VER(DUMP_TCP_STATE(_ttcp)); + + if ((_ttcp != NULL) && (pcb != NULL) && + (buf != NULL) && (len != 0) && (_ttcp->payload[id] != NULL)) { + if (pcb->state == ESTABLISHED || pcb->state == CLOSE_WAIT || + pcb->state == SYN_SENT || pcb->state == SYN_RCVD) { + + memcpy(_ttcp->payload[id], buf, len); + _ttcp->payload[id][len]='\0'; + INFO_TCP_VER("'%s'\n", _ttcp->payload[id]); + _ttcp->left[id] = len; + tcp_sent(pcb, tcp_data_sent); + tcp_send_data_pcb(_ttcp, pcb); + + return WL_SUCCESS; + } + } + //printk("Write failure _ttcp=%p _ttcp->tpcb=%p buf=%p len=%d\n", _ttcp, _ttcp->tpcb, buf, len); + return WL_FAILURE; +} + +int sendUdpData(void* ttcp, uint8_t* buf, uint16_t len) { + struct ttcp* _ttcp = (struct ttcp*) ttcp; + if ((_ttcp != NULL) && (buf != NULL) && (len != 0)) + { + INFO_TCP("buf:%p len:%d\n", buf, len); + DUMP_TCP(buf,len); + }else{ + return WL_FAILURE; + } + + struct pbuf* p = pbuf_alloc(PBUF_TRANSPORT, len, PBUF_RAM); + if (p == NULL) { + WARN("TTCP [%p]: could not allocate pbuf\n", ttcp); + return WL_FAILURE; + } + memcpy(p->payload, buf, len); + if (udp_send(_ttcp->upcb, p) != ERR_OK) { + WARN("TTCP [%p]: udp_send() failed\n", _ttcp); + pbuf_free(p); + return WL_FAILURE; + } + + pbuf_free(p); + return WL_SUCCESS; +} + + + +char + usage[] = + "Usage: ttcp -t/-r [-options] host\n\ + -l length of bufs written to network (default 1024)\n\ + -n number of bufs written to network (default 1024)\n\ + -p port number to send to (default 2000)\n\ + -u udp\n\ + -v verbose\n"; + +/** + * + */ +cmd_state_t cmd_ttcp(int argc, char* argv[], void* ctx) { + + int c; + int mode = TTCP_MODE_TRANSMIT; + int verbose = 0; + uint16_t buflen = 1024; + uint16_t nbuf = 1024; + uint16_t port = 2000; + int udp = 0; + struct ip_addr addr = { 0 }; + + optind = 1; + while ((c = getopt(argc, argv, "utrl:n:p:v")) != -1) { + switch (c) { + case 't': + mode = TTCP_MODE_TRANSMIT; + break; + case 'r': + mode = TTCP_MODE_RECEIVE; + break; + case 'l': + buflen = atoi(optarg); + break; + case 'v': + verbose = 1; + break; + case 'n': + nbuf = atoi(optarg); + break; + case 'u': + udp = 1; + break; + case 'p': + port = atoi(optarg); + break; + } + } + + if (mode == TTCP_MODE_TRANSMIT) { + if (optind >= argc) { + printk("%s", usage); + return CMD_DONE; + } + + addr = str2ip(argv[optind]); + if (!addr.addr) { + printk("%s", usage); + return CMD_DONE; + } + } + void* _ttcp = NULL; + if (ard_tcp_start(addr, port, NULL, NULL, mode, nbuf, buflen, udp, verbose, + 0, &_ttcp)) + return CMD_DONE; + + return CMD_DONE; +} + + +#if 0 +#include "lwip/sockets.h" + +void testlwip() +{ + int Sock; + fd_set fdsetR; + FD_ZERO(&fdsetR); + FD_SET(Sock, &fdsetR); + fd_set fdsetE = fdsetR; + + int rc; + const int cMillies = 10000; + struct timeval timeout; + timeout.tv_sec = cMillies / 1000; + timeout.tv_usec = (cMillies % 1000) * 1000; + //rc = lwip_select(Sock + 1, &fdsetR, NULL, &fdsetE, &timeout); +} +#endif diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/ard_tcp.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/ard_tcp.h new file mode 100644 index 000000000..078e0b0c5 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/ard_tcp.h @@ -0,0 +1,124 @@ +/* + * ard_tcp.h + * + * Created on: May 27, 2010 + * Author: mlf by Metodo2 srl + */ + +#ifndef ARD_TCP_H +#define ARD_TCP_H + +#include "console.h" +#include "lwip/tcp.h" + +typedef void (ard_tcp_done_cb_t)(void *opaque, int result); + +#define TTCP_MODE_TRANSMIT 0 +#define TTCP_MODE_RECEIVE 1 +#define MAX_MODE_NUM 2 + +#define GET_TCP_MODE(X) ((X!=NULL)?((struct ttcp*)(X))->mode:0) +#define IS_VALID_SOCK(SOCK) ((SOCK>=0)&&(SOCKudp:0) + +// Maximum number of client connection accepted by server +#define MAX_CLIENT_ACCEPTED 4 +#define NO_VALID_ID 0xff + +#define GET_FIRST_CLIENT_TCP(TTCP) getFirstClient(TTCP, 1) +#define GET_FIRST_CLIENT_TCP_NV(TTCP) getFirstClient(TTCP, 0) +#define GET_CLIENT_TCP(TTCP,ID) (((TTCP!=NULL)&&(ID>=0)&&(IDtpcb[ID] : NULL) +#define GET_CLIENT_ID(TTCP, PCB) uint8_t id = NO_VALID_ID; do { \ + id = getNewClientConnId(TTCP, PCB); \ + if (id == NO_VALID_ID) return ERR_MEM; \ + }while(0); +#define GET_IDX_CONN(I) ((I+currConnId)payload[id]); \ + if (TTCP->payload[id]) { \ + free(TTCP->payload[id]); \ + TTCP->payload[id] = NULL; } \ +}while(0); + +#define FREE_PAYLOAD_ID(TTCP,ID) do { \ + INFO_TCP("Freeing payload %d-%p\n", ID, TTCP->payload[ID]); \ + if (TTCP->payload[ID]) { \ + free(TTCP->payload[ID]); \ + TTCP->payload[ID] = NULL; } \ +}while(0); + + +typedef struct ttcp { + + /* options */ + struct ip_addr addr; /* host */ + uint16_t port; /* -p */ + uint16_t nbuf; /* -n */ + int mode; /* -t */ + int verbose; /* -v */ + int udp; /* -u */ + uint8_t sock; + uint8_t buff_sent[MAX_CLIENT_ACCEPTED]; + + /* common */ + uint16_t print_cnt; + uint32_t start_time; + uint32_t left[MAX_CLIENT_ACCEPTED]; + uint32_t recved; + ard_tcp_done_cb_t* done_cb; + void* opaque; + uint32_t buflen; /* -l */ + uint32_t tid; + + /* TCP specific */ + struct tcp_pcb* tpcb[MAX_CLIENT_ACCEPTED]; + struct tcp_pcb* lpcb; + char* payload[MAX_CLIENT_ACCEPTED]; + uint8_t tcp_poll_retries[MAX_CLIENT_ACCEPTED]; + bool pending_close[MAX_CLIENT_ACCEPTED]; + + /* UDP specific */ + int udp_started; + uint16_t udp_end_marker_left; + struct udp_pcb* upcb; +}ttcp_t; + +bool _connected; + +int ard_tcp_start(struct ip_addr addr, uint16_t port, void *opaque, + ard_tcp_done_cb_t *done_cb, int mode, uint16_t nbuf, uint16_t buflen, int udp, int verbose, uint8_t sock, void** _ttcp); + +void ard_tcp_stop(void* ttcp); + +uint8_t getStateTcp(void* p, bool client ); + +uint8_t getModeTcp(void* p); + +int sendTcpData(void* p, uint8_t* buf, uint16_t len); + +int sendUdpData(void* p, uint8_t* buf, uint16_t len); + +uint8_t isDataSent(void* p ); + +cmd_state_t cmd_ttcp(int argc, char* argv[], void* ctx); + +int8_t setNewClientConn(struct ttcp* _ttcp, struct tcp_pcb *newpcb, uint8_t id); + +int8_t insertNewClientConn(struct ttcp* _ttcp, struct tcp_pcb *newpcb); + +int8_t removeNewClientConn(struct ttcp* _ttcp, struct tcp_pcb *newpcb); + +bool cleanNewClientConn(struct ttcp* _ttcp); + +int8_t getNewClientConnId(struct ttcp* _ttcp, struct tcp_pcb *newpcb); + +int8_t getCurrClientConnId(); + +struct tcp_pcb * getFirstClient(struct ttcp* _ttcp, bool verbose); + +void closeConnections(); + +#endif diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/ard_utils.c b/external/arduino/avr/firmwares/wifishield/wifiHD/src/ard_utils.c new file mode 100644 index 000000000..c2937d897 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/ard_utils.c @@ -0,0 +1,347 @@ +/* + * ard_utils.c + * + * Created on: Jul 4, 2010 + * Author: mlf by Metodo2 srl + */ +//#define _APP_DEBUG_ + +#include "lwip/pbuf.h" +#include "wifi_spi.h" +#include "ard_utils.h" +#include "debug.h" +#include "ard_spi.h" +#include "ard_tcp.h" + +#define MAX_PBUF_STORED 30 + +tData pBufStore[MAX_PBUF_STORED][MAX_SOCK_NUM]; + +unsigned char headBuf[MAX_SOCK_NUM] = {0}; +unsigned char tailBuf[MAX_SOCK_NUM] = {0}; + +#define IS_BUF_AVAIL(x) (tailBuf[x] != headBuf[x]) +#define IS_BUF_EMPTY(x) ((tailBuf[x] == 0) && (headBuf[x] == 0)) + +void init_pBuf() +{ + memset(pBufStore, 0, sizeof(pBufStore)); +} + +uint8_t* insertBuf(uint8_t sock, uint8_t* buf, uint16_t len) +{ + DUMP(buf,len); + if (sock>= MAX_SOCK_NUM) + { + WARN("Sock out of range: sock=%d", sock); + return NULL; + } + if (pBufStore[headBuf[sock]][sock].data != NULL) + { + WARN("Overwriting buffer %p idx:%d!\n", pBufStore[headBuf[sock]][sock].data, headBuf[sock]); + // to avoid memory leak free the oldest buffer + freetDataIdx(headBuf[sock], sock); + } + + u8_t* p = (u8_t*)calloc(len,sizeof(u8_t)); + if(p != NULL) { + memcpy(p, buf, len); + + pBufStore[headBuf[sock]][sock].data = p; + pBufStore[headBuf[sock]][sock].len = len; + pBufStore[headBuf[sock]][sock].idx = 0; + pBufStore[headBuf[sock]][sock].pcb = getTTCP(sock, TTCP_MODE_TRANSMIT); + headBuf[sock]++; + + if (headBuf[sock] == MAX_PBUF_STORED) + headBuf[sock] = 0; + if (headBuf[sock] == tailBuf[sock]) + { + WARN("Avoid to Overwrite data [%d-%d]!\n", headBuf[sock], tailBuf[sock]); + if (headBuf[sock] != 0) + --headBuf[sock]; + else + headBuf[sock] = MAX_PBUF_STORED-1; + } + INFO_UTIL("Insert[%d]: %p:%d-%d [%d,%d]\n", sock, p, len, p[0], headBuf[sock], tailBuf[sock]); + } + return p; +} + + +uint16_t calcMergeLen(uint8_t sock) +{ + uint16_t len = 0; + + unsigned char index = tailBuf[sock]; + do { + if (pBufStore[index][sock].data != NULL) + { + len += pBufStore[index][sock].len; + len -= pBufStore[index][sock].idx; + INFO_UTIL_VER(" [%d]: len:%d idx:%d tot:%d\n", sock, pBufStore[index][sock].len, pBufStore[index][sock].idx, len); + } + ++index; + if (index == MAX_PBUF_STORED) + index = 0; + }while (index!=headBuf[sock]); + return len; +} + +uint16_t clearBuf(uint8_t sock) +{ + uint16_t len = 0; + + unsigned char index = tailBuf[sock]; + do { + if (pBufStore[index][sock].data != NULL) + { + freetDataIdx(index,sock); + } + ++index; + if (index == MAX_PBUF_STORED) + index = 0; + }while (index!=headBuf[sock]); + tailBuf[sock]=index; + return len; +} + +uint8_t* mergeBuf(uint8_t sock, uint8_t** buf, uint16_t* _len) +{ + uint16_t len = calcMergeLen(sock); + uint8_t* p = (u8_t*)calloc(len,sizeof(u8_t)); + uint8_t* _p = p; + if(p != NULL) { + unsigned char index = tailBuf[sock]; + do { + if (pBufStore[index][sock].data != NULL) + { + memcpy(p, pBufStore[index][sock].data, pBufStore[index][sock].len); + p += pBufStore[index][sock].len; + } + ++index; + if (index == MAX_PBUF_STORED) + index = 0; + }while (index!=headBuf[sock]); + } + DUMP(_p,len); + if (buf != NULL) + *buf = _p; + if (_len != NULL) + *_len = len; + return _p; +} + +uint8_t* insert_pBuf(struct pbuf* q, uint8_t sock, void* _pcb) +{ + if (q == NULL) + return NULL; + + if (pBufStore[headBuf[sock]][sock].data != NULL) + { + WARN("Overwriting buffer %p idx:%d!\n", pBufStore[headBuf[sock]][sock].data, headBuf[sock]); + // to avoid memory leak free the oldest buffer + freetDataIdx(headBuf[sock], sock); + } + + u8_t* p = (u8_t*)calloc(q->tot_len,sizeof(u8_t)); + if(p != NULL) { + if (pbuf_copy_partial(q, p, q->tot_len,0) != q->tot_len) { + WARN("pbuf_copy_partial failed: src:%p, dst:%p, len:%d\n", q, p, q->tot_len); + free(p); + p = NULL; + return p; + } + + pBufStore[headBuf[sock]][sock].data = p; + pBufStore[headBuf[sock]][sock].len = q->tot_len; + pBufStore[headBuf[sock]][sock].idx = 0; + pBufStore[headBuf[sock]][sock].pcb = _pcb; + headBuf[sock]++; + + if (headBuf[sock] == MAX_PBUF_STORED) + headBuf[sock] = 0; + if (headBuf[sock] == tailBuf[sock]) + { + WARN("Avoid to Overwrite data [%d-%d]!\n", headBuf[sock], tailBuf[sock]); + if (headBuf[sock] != 0) + --headBuf[sock]; + else + headBuf[sock] = MAX_PBUF_STORED-1; + } + INFO_UTIL("Insert[%d]: %p:%d-%d [%d,%d]\n", sock, p, q->tot_len, p[0], headBuf[sock], tailBuf[sock]); + } + return p; +} + +void dumpPbuf(uint8_t sock) +{ + unsigned char index = tailBuf[sock]; + printk("headBuf=%d tailBuf=%d\n", headBuf[sock], tailBuf[sock]); + do { + if (pBufStore[index][sock].data != NULL) + { + printk("%d] pcb:%p Buf: %p Len:%d\n", pBufStore[index][sock].idx, pBufStore[index][sock].pcb, + pBufStore[index][sock].data, pBufStore[index][sock].len); + } + ++index; + if (index == MAX_PBUF_STORED) + index = 0; + }while (index!=headBuf[sock]); +} + +tData* get_pBuf(uint8_t sock) +{ + if (IS_BUF_EMPTY(sock)) + return NULL; + + if (IS_BUF_AVAIL(sock)) + { + tData* p = &(pBufStore[tailBuf[sock]][sock]); + INFO_UTIL_VER("%p [%d,%d]\n", p, headBuf[sock], tailBuf[sock]); + return p; + } + return NULL; +} + +void freetData(void * buf, uint8_t sock) +{ + if (buf==NULL) + { + WARN("Buf == NULL!"); + return; + } + + pBufStore[tailBuf[sock]][sock].data = NULL; + pBufStore[tailBuf[sock]][sock].len = 0; + pBufStore[tailBuf[sock]][sock].idx = 0; + pBufStore[tailBuf[sock]][sock].pcb = 0; + + if (++tailBuf[sock] == MAX_PBUF_STORED) + tailBuf[sock] = 0; + INFO_UTIL("%p [%d,%d]\n", buf, headBuf[sock], tailBuf[sock]); + free(buf); +} + +void freetDataIdx(uint8_t idxBuf, uint8_t sock) +{ + if (idxBuf >=MAX_PBUF_STORED) + { + WARN("idxBuf out of range: %d\n", idxBuf); + return; + } + + void * buf = pBufStore[idxBuf][sock].data; + + INFO_UTIL("%p idx:%d\n", buf, idxBuf); + + free(buf); + + pBufStore[idxBuf][sock].data = 0; + pBufStore[idxBuf][sock].len = 0; + pBufStore[idxBuf][sock].idx = 0; + pBufStore[idxBuf][sock].pcb = 0; +} + + +void ack_recved(void* pcb, int len); + +void ackAndFreeData(void* pcb, int len, uint8_t sock, uint8_t* data) +{ + INFO_TCP("Ack pcb:%p len:%d sock:%d data:%p\n", pcb, len, sock, data); + if (!IS_UDP_SOCK(sock)) + ack_recved(pcb, len); + if (data != NULL) + freetData(data, sock); +} + + +bool isAvailTcpDataByte(uint8_t sock) +{ + tData* p = get_pBuf(sock); + + if (p != NULL) + { + INFO_UTIL_VER("check:%d %d %p\n",p->idx, p->len, p->data); + if (p->idx == p->len) + { + INFO_UTIL("Free %p other buf %d tail:%d head:%d\n", + p->data, IS_BUF_AVAIL(sock), tailBuf[sock], headBuf[sock]); + ackAndFreeData(p->pcb, p->len, sock, p->data); + return (IS_BUF_AVAIL(sock)); + }else{ + return true; + } + } + return false; +} + +uint16_t getAvailTcpDataByte(uint8_t sock) +{ + uint16_t len = calcMergeLen(sock); + INFO_UTIL_VER("Availabled data: %d\n", len); + return len; +} + + +bool getTcpDataByte(uint8_t sock, uint8_t* payload, uint8_t peek) +{ + // ref field in struct pbuf has been used as index pointer for byte data + tData* p = get_pBuf(sock); + + if (p != NULL) + { + if (p->idx < p->len) + { + uint8_t* buf = (uint8_t*)p->data; + if (peek) + *payload = buf[p->idx]; + else + *payload = buf[p->idx++]; + INFO_UTIL_VER("get:%d %p %d\n",p->idx, p->data, *payload); + if (p->idx == p->len) + ackAndFreeData(p->pcb, p->len, sock, p->data); + return true; + }else{ + ackAndFreeData(p->pcb, p->len, sock, p->data); + } + } + return false; +} + +bool getTcpData(uint8_t sock, void** payload, uint16_t* len) +{ + tData* p = NULL; + p = get_pBuf(sock); + if (p != NULL) + { + *payload = p->data; + *len = p->len; + return true; + } + return false; +} + +bool freeTcpData(uint8_t sock) +{ + tData* p = NULL; + p = get_pBuf(sock); + if (p != NULL) + { + ackAndFreeData(p->pcb, p->len, sock, p->data); + return true; + } + return false; +} + +void freeAllTcpData(uint8_t sock) +{ + tData* p = NULL; + do{ + p = get_pBuf(sock); + if (p != NULL) + freetData(p->data, sock); + }while(p!=NULL); +} + + diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/ard_utils.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/ard_utils.h new file mode 100644 index 000000000..323b32833 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/ard_utils.h @@ -0,0 +1,295 @@ +/* + * ard_utils.h + * + * Created on: Jul 4, 2010 + * Author: mlf by Metodo2 srl + */ + +#ifndef ARD_UTILS_H_ +#define ARD_UTILS_H_ + +#include "gpio.h" +#include "debug.h" +#include "ARDUINO/arduino.h" +#define INIT_SIGNAL_FOR_SPI() gpio_disable_pin_pull_up(ARDUINO_HANDSHAKE_PIN); +#define BUSY_FOR_SPI() gpio_set_gpio_pin(ARDUINO_HANDSHAKE_PIN) +#define AVAIL_FOR_SPI() gpio_clr_gpio_pin(ARDUINO_HANDSHAKE_PIN) + +#define LED0_UP() gpio_set_gpio_pin(LED0_GPIO) +#define LED0_DN() gpio_clr_gpio_pin(LED0_GPIO) +#define LED0_TL() gpio_tgl_gpio_pin(LED0_GPIO) +#define LED1_UP() gpio_set_gpio_pin(LED1_GPIO) +#define LED1_DN() gpio_clr_gpio_pin(LED1_GPIO) +#define LED1_TL() gpio_tgl_gpio_pin(LED1_GPIO) +#define LED2_UP() gpio_set_gpio_pin(LED2_GPIO) +#define LED2_DN() gpio_clr_gpio_pin(LED2_GPIO) +#define LED2_TL() gpio_tgl_gpio_pin(LED2_GPIO) + +#ifdef _DEBUG_ +#define SIGN0_UP LED0_UP +#define SIGN0_DN LED0_DN +#define SIGN0_TL LED0_TL +#define SIGN1_UP LED1_UP +#define SIGN1_DN LED1_DN +#define SIGN1_TL LED1_TL +#define SIGN2_UP LED2_UP +#define SIGN2_DN LED2_DN +#define SIGN2_TL LED2_TL + +#define DEB_PIN_UP(X) gpio_set_gpio_pin(DEB##X##_PIN_GPIO) +#define DEB_PIN_DN(X) gpio_clr_gpio_pin(DEB##X##_PIN_GPIO) +#define DEB_PIN_ENA(X) gpio_enable_gpio_pin(DEB##X##_PIN_GPIO) +#define DEB_PIN_TOGGLE(X) gpio_tgl_gpio_pin(DEB##X##_PIN_GPIO) +#define DEB_PIN_TRIGGER(X) DEB_PIN_DN(X); DEB_PIN_UP(X); + + +#else +#define SIGN0_UP() +#define SIGN0_DN() +#define SIGN0_TL() +#define SIGN1_UP() +#define SIGN1_DN() +#define SIGN1_TL() +#define SIGN2_UP() +#define SIGN2_DN() +#define SIGN2_TL() + +#define DEB_PIN_UP(X) +#define DEB_PIN_DN(X) +#define DEB_PIN_ENA(X) +#define DEB_PIN_TOGGLE(X) +#define DEB_PIN_TRIGGER(X) + +//#define TOGGLE_SIG0 +#endif + +#define DELAY_450NS asm volatile("nop") +#define DELAY_1uS DELAY_450NS; DELAY_450NS; +#define TOGGLE_SIG0() SIGN0_UP(); DELAY_450NS;SIGN0_DN(); + + +#define LINK_LED_OFF LED0_UP +#define ERROR_LED_OFF LED1_UP +#define DATA_LED_OFF LED2_UP + +#define LINK_LED_ON LED0_DN +#define ERROR_LED_ON LED1_DN +#define DATA_LED_ON LED2_DN + +#define LINK_LED_BL LED0_TL +#define ERROR_LED_BL LED1_TL +#define DATA_LED_BL LED2_TL + + +#define CREATE_HEADER_REPLY(REPLY, RECV, NUM_PARAMS)\ + REPLY[0] = RECV[0]; \ + REPLY[1] = RECV[1] | REPLY_FLAG; \ + REPLY[2] = NUM_PARAMS; + +#define CREATE_HEADER_REPLY_WAIT(REPLY, RECV, NUM_PARAMS)\ + REPLY[0] = RECV[0]; \ + REPLY[1] = RECV[1] | WAIT_FLAG; \ + REPLY[2] = NUM_PARAMS; + + +#define END_HEADER_REPLY(REPLY, TOT_LEN, COUNT)\ + REPLY[TOT_LEN] = END_CMD; \ + REPLY[TOT_LEN+1] = 0; \ + COUNT=TOT_LEN+1; + +#define RETURN_ERR_REPLY(RECV,REPLY,COUNT) \ + {uint8_t err = 0; return ack_reply_cb(RECV,REPLY,&err,COUNT);} + +#define CHECK_ARD_NETIF(RECV,REPLY,COUNT) \ + if (ard_netif == NULL) \ + { uint8_t err = 0; return ack_reply_cb(RECV,REPLY,&err,COUNT); } + +#define PUT_LONG_IN_BYTE_HO(LONG, BYTE, IDX) { \ + uint32_t _long = LONG; \ + BYTE[IDX] = 4; \ + BYTE[IDX+1] = (uint8_t)(_long & 0xff); \ + BYTE[IDX+2] = (uint8_t)((_long & 0xff00)>>8); \ + BYTE[IDX+3] = (uint8_t)((_long & 0xff0000)>>16); \ + BYTE[IDX+4] = (uint8_t)((_long & 0xff000000)>>24); \ +} + +#define PUT_LONG_IN_BYTE_NO(LONG, BYTE, IDX) { \ + uint32_t _long = LONG; \ + BYTE[IDX] = 4; \ + BYTE[IDX+4] = (uint8_t)(_long & 0xff); \ + BYTE[IDX+3] = (uint8_t)((_long & 0xff00)>>8); \ + BYTE[IDX+2] = (uint8_t)((_long & 0xff0000)>>16); \ + BYTE[IDX+1] = (uint8_t)((_long & 0xff000000)>>24); \ +} + + +#define PUT_DATA_INT(INT, BYTE, IDX) { \ + uint16_t _int = INT; \ + BYTE[IDX] = 2; \ + BYTE[IDX+1] = (uint8_t)((_int & 0xff00)>>8); \ + BYTE[IDX+2] = (uint8_t)(_int & 0xff); \ +} + +#define PUT_DATA_INT_NO(INT, BYTE, IDX) { \ + uint16_t _int = INT; \ + BYTE[IDX] = 2; \ + BYTE[IDX+2] = (uint8_t)((_int & 0xff00)>>8); \ + BYTE[IDX+1] = (uint8_t)(_int & 0xff); \ +} + +#define PUT_DATA_BYTE(DATA, BYTE, IDX) { \ + BYTE[IDX] = 1; \ + BYTE[IDX+1] = (uint8_t)DATA; \ +} + +#define PUT_BUFDATA_BYTE(BUF, BUFLEN, BYTE, IDX) { \ + BYTE[IDX] = (uint8_t)(BUFLEN & 0xff); \ + uint16_t i = 0; \ + for (; i>8); \ + BYTE[IDX+1] = (uint8_t)(BUFLEN & 0xff); \ + uint16_t i = 0; \ + for (; iparamLen == LEN)) + +#define NEXT_PARAM(PARAM) \ + do { \ + if (PARAM!=NULL){ \ + PARAM=(tParam*)((uint8_t*)PARAM+PARAM->paramLen+1); \ + GET_PARAM_BYTE(PARAM, end) \ + if (end == END_CMD) WARN("End of cmd params", PARAM); \ + } \ + }while(0); + +#define GET_PARAM_LONG(PARAM, LONG) \ + uint32_t LONG = 0; \ + if CHECK_PARAM_LEN(PARAM, 4) { \ + tLongParam* s = (tLongParam*)PARAM; \ + LONG = s->param; \ + } + +#define GET_PARAM_INT(PARAM, INT) \ + uint16_t INT = 0; \ + if CHECK_PARAM_LEN(PARAM, 2) { \ + tIntParam* s = (tIntParam*)PARAM; \ + INT = s->param; \ + } + +#define GET_PARAM_BYTE(PARAM, BYTE) \ + uint8_t BYTE = 0; \ + if CHECK_PARAM_LEN(PARAM, 1) { \ + tByteParam* s = (tByteParam*)PARAM; \ + BYTE = s->param; \ + } + +#define GET_PARAM_NEXT(TYPE, PARAM, DATA) \ + GET_PARAM_##TYPE(PARAM, DATA) \ + NEXT_PARAM(PARAM) + +#ifdef _SPI_STATS_ +#define STATSPI_TIMEOUT_ERROR() \ + statSpi.timeoutIntErr++; \ + statSpi.rxErr++; \ + statSpi.lastError = SPI_TIMEOUT_ERROR; \ + statSpi.status = spi_getStatus(ARD_SPI); + +#define STATSPI_DISALIGN_ERROR() \ + statSpi.frameDisalign++; \ + statSpi.rxErr++; \ + statSpi.lastError = SPI_ALIGN_ERROR; \ + statSpi.status = spi_getStatus(ARD_SPI); + +#define STATSPI_OVERRIDE_ERROR() \ + statSpi.overrideFrame++; \ + statSpi.rxErr++; \ + statSpi.lastError = SPI_OVERRIDE_ERROR; \ + statSpi.status = spi_getStatus(ARD_SPI); + +#define STATSPI_TX_TIMEOUT_ERROR() \ + statSpi.timeoutErr++; \ + statSpi.txErr++; \ + statSpi.lastError = SPI_ERROR_TIMEOUT; \ + statSpi.status = spi_getStatus(ARD_SPI); +#else +#define STATSPI_TIMEOUT_ERROR() +#define STATSPI_TX_TIMEOUT_ERROR() +#define STATSPI_DISALIGN_ERROR() +#define STATSPI_OVERRIDE_ERROR() +#endif + +#define DUMP_TCP_STATE(TTCP) do {\ + int i = getCurrClientConnId(); \ + INFO_TCP("%d] ttcp:%p tpcb:%p state:%d lpcb:%p state:%d left:%d sent:%d\n", \ + i, TTCP, TTCP->tpcb[i], (TTCP->tpcb[i])?TTCP->tpcb[i]->state:0, \ + TTCP->lpcb, (TTCP->lpcb)?TTCP->lpcb->state:0, \ + (TTCP->tpcb[i])?TTCP->left[i]:0, (TTCP->tpcb[i])?TTCP->buff_sent[i]:0); \ + } while(0); + +#define Mode2Str(_Mode) ((_Mode==0)?"TRANSMIT":"RECEIVE") +#define ProtMode2Str(_protMode) ((_protMode==0)?"TCP":"UDP") + +typedef struct sData +{ + uint8_t* data; + uint16_t len; + uint16_t idx; + void* pcb; +}tData; + +struct pbuf; + +void init_pBuf(); + +uint8_t* insert_pBuf(struct pbuf* q, uint8_t sock, void* _pcb); + +uint8_t* insertBuf(uint8_t sock, uint8_t* buf, uint16_t len); + +uint8_t* mergeBuf(uint8_t sock, uint8_t** buf, uint16_t* _len); + +uint16_t clearBuf(uint8_t sock); + +tData* get_pBuf(uint8_t sock); + +void freetData(void * buf, uint8_t sock); + +void freetDataIdx(uint8_t idxBuf, uint8_t sock); + +bool isBufAvail(); + +bool getTcpData(uint8_t sock, void** payload, uint16_t* len); + +bool getTcpDataByte(uint8_t sock, uint8_t* payload, uint8_t peek); + +uint16_t getAvailTcpDataByte(uint8_t sock); + +bool isAvailTcpDataByte(uint8_t sock); + +uint8_t freeTcpData(uint8_t sock); + +void freeAllTcpData(uint8_t sock); + +#endif /* ARD_UTILS_H_ */ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/avr32_spi.c b/external/arduino/avr/firmwares/wifishield/wifiHD/src/avr32_spi.c new file mode 100644 index 000000000..739fb284c --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/avr32_spi.c @@ -0,0 +1,394 @@ +/*! \page License + * Copyright (C) 2009, H&D Wireless AB All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of H&D Wireless AB may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY H&D WIRELESS AB ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND + * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#include +#include +#include +#include +#include +#include +#include +#include + +#define ARRAY_SIZE(a) sizeof(a) / sizeof(a[0]) + +__attribute__((__interrupt__)) void avr32_irq_handler(void); +void owl_spi_mdelay(uint32_t ms); + +int owl_spi_init(U8 *flags) +{ +#ifdef _ASSERT_ENABLE_ /* To silence warning if Assert() macro is empty */ + volatile avr32_pm_t *pm = &AVR32_PM; +#endif + + volatile avr32_spi_t *spi = &WL_SPI; +#if WL_SPI_CS == 1 + volatile avr32_spi_csr1_t* CSR = &spi->CSR1; +#elif WL_SPI_CS == 2 + volatile avr32_spi_csr2_t* CSR = &spi->CSR2; +#elif WL_SPI_CS == 3 + volatile avr32_spi_csr3_t* CSR = &spi->CSR3; +#elif SPI_CS == 0 + volatile avr32_spi_csr0_t* CSR = &spi->CSR0; +#endif + +#ifndef WITH_NO_DMA + volatile avr32_pdca_channel_t *pdca_tx = &AVR32_PDCA.channel[0]; + volatile avr32_pdca_channel_t *pdca_rx = &AVR32_PDCA.channel[1]; +#endif + +#ifndef WL_IRQ_PIN + *flags = SPI_FLAG_POLL; +#else + *flags = 0; +#endif + + +#ifdef WL_IRQ_PIN + /* input, irq */ + gpio_enable_gpio_pin(WL_IRQ_PIN); + gpio_enable_pin_pull_up(WL_IRQ_PIN); +#endif + +//#ifdef WL_RESET_PIN +// /* reset pin */ +// gpio_enable_gpio_pin(WL_RESET_PIN); +// gpio_set_gpio_pin(WL_RESET_PIN); +//#endif + + +#ifdef WL_POWER_PIN + /* power off the device */ + gpio_enable_gpio_pin(WL_POWER_PIN); + gpio_set_gpio_pin(WL_POWER_PIN); +#endif + +#ifdef WL_SHUTDOWN_PIN + gpio_enable_gpio_pin(WL_SHUTDOWN_PIN); + +#ifdef WL_NO_INTERNAL_RESET /* never defined for SPB104/SPB105 */ + gpio_clr_gpio_pin(WL_SHUTDOWN_PIN); +#endif + +#ifdef WL_EXTERNAL_RESET + gpio_enable_gpio_pin(WL_RESET_PIN); +#endif + +#endif /* WL_SHUTDOWN_PIN */ + +#ifdef WL_POWER_PIN + /* power on the device */ + gpio_clr_gpio_pin(WL_POWER_PIN); +#endif + +#ifdef WL_SHUTDOWN_PIN + +#ifdef WL_NO_INTERNAL_RESET /* never defined for SPB104/SPB105 */ + owl_spi_mdelay(5); + gpio_set_gpio_pin(WL_SHUTDOWN_PIN); + +#elif WL_EXTERNAL_RESET + owl_spi_mdelay(5); + gpio_set_gpio_pin(WL_SHUTDOWN_PIN); + + owl_spi_mdelay(20); + //delay_ms(10); //2ms + + /* reset pin */ + gpio_set_gpio_pin(WL_RESET_PIN); + +#else + + /* The shutdown pin will go high once the device is powered */ + { +#define SHUTDOWN_TIMEOUT 350 + uint32_t shutdown_timer = 0; + while (gpio_get_pin_value(WL_SHUTDOWN_PIN) == 0) { + if (shutdown_timer > SHUTDOWN_TIMEOUT) + { + printk("Timeout WL Shutdown\n"); + return -1; + } + owl_spi_mdelay(5); + shutdown_timer += 5; + } + } +#endif /* WL_NO_INTERNAL_RESET */ + +#else + /* We need to make a guess about the time needed to power the device, + * this will depend on the hardware design. + */ + owl_spi_mdelay(5); +#endif /* WL_SHUTDOWN_PIN */ + + /* Note: SPI0 clock enabled at reset in pm->pbamask (see 13.6.3) */ + Assert(pm->pbamask & (1 << 5)); + + /* Note: GPIO clock enabled at reset in pm->pbamask (see 13.6.3) */ + Assert(pm->pbamask & (1 << 1)); +#ifdef WL_IRQ_PIN + /* 22.4.7: "In every port there are four interrupt lines + * connected to the interrupt controller. Every eigth + * interrupts in the port are ored together to form an + * interrupt line." + * + * WL_IRQ_# = (WL_IRQ_PIN / 32) * 4 + (WL_IRQ_PIN / 8) % 4 + * 62 => 1 * 4 + 3 = 7 + */ + INTC_register_interrupt(&avr32_irq_handler, WL_IRQ, AVR32_INTC_INT0); +#endif + +#ifndef WITH_NO_DMA + INTC_register_interrupt(&avr32_irq_handler, AVR32_PDCA_IRQ_0, + AVR32_INTC_INT0); + INTC_register_interrupt(&avr32_irq_handler, AVR32_PDCA_IRQ_1, + AVR32_INTC_INT0); + pdca_tx->IER.terr = 1; + pdca_rx->IER.terr = 1; +#endif + +#ifdef WL_SPI_CLOCK_DIVIDER + CSR->scbr = WL_SPI_CLOCK_DIVIDER; +#else + CSR->scbr = 2; +#endif + + /* Use max width of TDR register, 16 bit transfers */ + CSR->bits = 0x8; + + /* Make sure that we can hold CS low until transfer is completed, e.g + * LASTXFER is set in TDR. + */ + CSR->csaat = 1; + + /* NRG component requires clock polarity high */ + CSR->cpol = 1; + + +#ifdef WL_IRQ_PIN + /* make sure to clear any pending bits in ifr here. */ + gpio_clear_pin_interrupt_flag(WL_IRQ_PIN); +#endif + + return 0; +} + +#ifndef WITH_NO_DMA +static void dma_txrx(const U8* in, U8* out, U16 len) +{ + volatile avr32_pdca_channel_t *pdca_tx = &AVR32_PDCA.channel[0]; + volatile avr32_pdca_channel_t *pdca_rx = &AVR32_PDCA.channel[1]; + + /* setup tx */ + pdca_tx->mar = (U32) in; + pdca_tx->PSR.pid = WL_PDCA_PID_TX; + pdca_tx->tcr = len / 2; + pdca_tx->MR.size = 1; /* 2-byte */ + pdca_tx->IER.trc = 1; + + /* setup rx */ + pdca_rx->mar = (U32) out; + pdca_rx->PSR.pid = WL_PDCA_PID_RX; + pdca_rx->tcr = len / 2; + pdca_rx->MR.size = 1; /* 2-byte */ + pdca_rx->IER.trc = 1; + + /* start dma's. for some reason rx must be started prior to tx */ + pdca_rx->CR.ten = 1; + pdca_tx->CR.ten = 1; + + /* blocking wait until transfer is completed */ + while (!(pdca_tx->ISR.trc && pdca_rx->ISR.trc)); +} +#endif + +/* access data using byte pointers since we might get unaligned + * data from lwip. The cpu will issue a data abort if we try + * to access data which is not properly aligned. See data sheet. + * + * Note that fifo_txrx() doesn't handle the case where len is not a + * multiple of two bytes properly. + * + * However, there is no actual case where len is odd at the same time + * as the "out" pointer is non-NULL; therefore I think that in practice, + * we'll not write beyond the end of the "out" array. + * + * The extra unknown byte fetched from the in pointer will be discarded + * by the device since a length field included in the packet header will inform + * the device of the actual number of valid bytes (this implementation is + * kind of hidden inside the library). + */ +static void fifo_txrx(const U8 *in, U8* out, U16 len) +{ + volatile avr32_spi_t *spi = &WL_SPI; + UnionCPtr in_ptr; + UnionPtr out_ptr; + U32 sr; + + Assert(len); + + in_ptr.u8ptr = in; + out_ptr.u8ptr = out; + + while (len) { + U16 rdr; + union { + avr32_spi_tdr_t TDR; + U32 tdr; + } reg = { { 0 } }; + + while (!spi->SR.tdre); + while (!spi->SR.txempty); + + /* prepare tx data register contents */ + if (in_ptr.u8ptr) { + reg.TDR.td |= (in_ptr.u8ptr[0] << 8) | in_ptr.u8ptr[1]; + in_ptr.u16ptr++; + } + else + reg.TDR.td |= 0xffff; + + /* perform tx */ + spi->tdr = reg.tdr; + + /* wait until rx is ready */ + while (!spi->SR.rdrf); + + /* fetch rx data */ + rdr = spi->RDR.rd; + if (out_ptr.u8ptr) { + out_ptr.u8ptr[0] = (rdr >> 8) & 0xff; + out_ptr.u8ptr[1] = rdr & 0xff; + out_ptr.u16ptr++; + } + + if (len >= 2) + len -= 2; + else + len = 0; + } + + sr = spi->sr; + Assert(!(sr & AVR32_SPI_SR_OVRES_MASK)); + Assert(!(sr & AVR32_SPI_SR_MODF_MASK)); +} + +void owl_spi_txrx(const U8 *in, U8* out, U16 len) +{ +#ifndef WITH_NO_DMA + static uint8_t buf[MAX_BLOCK_LEN]; + + /* unaligned data or odd number of bytes, then skip dma */ + if ((U32) in % 4 || (U32) out % 4 || len % 2) { + fifo_txrx(in, out, len); + } else { + if (in == NULL) { + memset(buf, 0xff, len); + in = buf; + } else if (out == NULL) { + out = buf; + } + dma_txrx(in, out, len); + } +#else + fifo_txrx(in, out, len); +#endif +} + +void owl_spi_irq(U8 enable) +{ +#ifdef WL_IRQ_PIN + + if (enable) + gpio_enable_pin_interrupt(WL_IRQ_PIN, GPIO_PIN_CHANGE); + else + gpio_disable_pin_interrupt(WL_IRQ_PIN); +#endif +} + +void owl_spi_cs(U8 enable) +{ + volatile avr32_spi_t *spi = &WL_SPI; + + /* + * PCS = xxx0 => NPCS[3:0] = 1110 + * PCS = xx01 => NPCS[3:0] = 1101 + * PCS = x011 => NPCS[3:0] = 1011 + * PCS = 0111 => NPCS[3:0] = 0111 + * PCS = 1111 => forbidden (no peripheral is selected) + */ + + if (enable) +#if WL_SPI_CS == 2 + spi->MR.pcs = 0x3; /* cs2 */ +#elif WL_SPI_CS == 1 + spi->MR.pcs = 0x1; /* cs1 */ +#elif WL_SPI_CS == 3 + spi->MR.pcs = 0x7; /* cs3 */ +#elif WL_SPI_CS == 0 + spi->MR.pcs = 0x0; /* cs0 */ +#endif + else + spi->MR.pcs = 0xf; +} + +void owl_spi_mdelay(uint32_t ms) +{ + volatile int a = 0; + int i; + for (i = 0; i < ms * 5000; i++) + a++; +} + +__attribute__((__interrupt__)) void avr32_irq_handler(void) +{ +#ifndef WITH_NO_DMA + volatile avr32_pdca_channel_t *pdca_tx = &AVR32_PDCA.channel[0]; + volatile avr32_pdca_channel_t *pdca_rx = &AVR32_PDCA.channel[1]; + + /* tx xfer complete */ + if (pdca_tx->IMR.trc && pdca_tx->ISR.trc) { + pdca_tx->IDR.trc = 1; + pdca_tx->CR.tdis = 1; /* disable tx xfer */ + } + + /* rx xfer complete */ + if (pdca_rx->IMR.trc && pdca_rx->ISR.trc) { + pdca_rx->IDR.trc = 1; + pdca_rx->CR.tdis = 1; /* disable rx xfer */ + } +#endif + +#ifdef WL_IRQ_PIN + if (gpio_get_pin_interrupt_flag(WL_IRQ_PIN)) { + gpio_clear_pin_interrupt_flag(WL_IRQ_PIN); + wl_spi_irq(); + } +#endif + +} diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/board_init.c b/external/arduino/avr/firmwares/wifishield/wifiHD/src/board_init.c new file mode 100644 index 000000000..a2a191ea9 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/board_init.c @@ -0,0 +1,297 @@ +/*! \page License + * Copyright (C) 2009, H&D Wireless AB All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of H&D Wireless AB may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY H&D WIRELESS AB ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND + * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include +#include +#ifdef WITH_SDRAM + #include +#endif +#include +#include + +#ifndef NO_SERIAL /* The bootloader does not want serial port + * code */ +#include + +int board_putchar(char c) +{ + int timeout = USART_DEFAULT_TIMEOUT; + if (c == '\n') { + do { + if (!timeout--) + return USART_FAILURE; + } while (usart_write_char(&CONFIG_CONSOLE_PORT, '\r') != + USART_SUCCESS); + + timeout = USART_DEFAULT_TIMEOUT; + } + + do { + if (!timeout--) + return USART_FAILURE; + } while (usart_write_char(&CONFIG_CONSOLE_PORT, c) != USART_SUCCESS); + + return USART_SUCCESS; +} +#endif /* NO_SERIAL */ +/** + * Initializes the MCU system clocks. + */ +static void +init_sys_clocks(void) +{ + + /* if we don't run on OSC0 don't switch to it since we don't know + * what kind of oscillator we have here + */ + +#if OSC == 0 + /* switch to OSC0 to speed up the booting */ + pm_switch_to_osc0(&AVR32_PM, FOSC0, OSC0_STARTUP); +#endif + + +#ifndef USE_PLL + return; +#endif + + /* For audio, ee have to use OSC1 on to generate the correct clockrate + * for the SSC + */ +#if OSC == 1 + /* start oscillator1 */ + pm_enable_osc1_crystal(&AVR32_PM, FOSC1); + pm_enable_clk1(&AVR32_PM, OSC1_STARTUP); +#endif + + /* configure pll multipliers */ + pm_pll_setup(&AVR32_PM, + 0, /* pll */ + PLL_MUL, /* mul */ + 1, /* div */ + OSC, /* osc */ + 16); /* lockcount */ + + /* set PLL operating range and divider (fpll = fvco/2) + * this gives PLL output = 66 MHz (62.0928 MHz for EVK1105/OSC1) + */ + pm_pll_set_option(&AVR32_PM, + 0, /* pll */ + 1, /* pll_freq */ + 1, /* pll_div2 */ + 0); /* pll_wbwdisable. */ + + + /* start PLL0 and wait for the lock */ + pm_pll_enable(&AVR32_PM, 0); + pm_wait_for_pll0_locked(&AVR32_PM); + + /* Set all peripheral clocks torun at master clock rate */ + pm_cksel(&AVR32_PM, + 0, /* pbadiv */ + 0, /* pbasel */ + 0, /* pbbdiv */ + 0, /* pbbsel */ + 0, /* hsbdiv */ + 0); /* hsbsel */ + + /* Set one waitstate for the flash */ + flashc_set_wait_state(1); + + /* Switch to PLL0 as the master clock */ + pm_switch_to_clock(&AVR32_PM, AVR32_PM_MCCTRL_MCSEL_PLL0); +} + +static void init_exceptions(void) +{ + extern void _evba; + Set_system_register(AVR32_EVBA, (int)&_evba); + Enable_global_exception(); +} + +static void init_hmatrix(void) +{ + union { + unsigned long scfg; + avr32_hmatrix_scfg_t SCFG; + } u_avr32_hmatrix_scfg = { + AVR32_HMATRIX.scfg[AVR32_HMATRIX_SLAVE_FLASH] + }; + u_avr32_hmatrix_scfg.SCFG.defmstr_type = + AVR32_HMATRIX_DEFMSTR_TYPE_LAST_DEFAULT; + AVR32_HMATRIX.scfg[AVR32_HMATRIX_SLAVE_FLASH] = + u_avr32_hmatrix_scfg.scfg; +} + +static void init_interrupts(void) +{ + INTC_init_interrupts(); + Enable_global_interrupt(); +} + +static void init_spi(void) +{ +#if defined(WL_SPI) + int i; +#endif + + +#if defined(AT45DBX_SPI) + static const gpio_map_t AT45DBX_SPI_GPIO_MAP = { + { AT45DBX_SPI_SCK_PIN, AT45DBX_SPI_SCK_FUNCTION }, + { AT45DBX_SPI_MISO_PIN, AT45DBX_SPI_MISO_FUNCTION }, + { AT45DBX_SPI_MOSI_PIN, AT45DBX_SPI_MOSI_FUNCTION }, + { AT45DBX_SPI_NPCS2_PIN, AT45DBX_SPI_NPCS2_FUNCTION }, + }; +#endif + + +#if defined(WL_SPI) + const gpio_map_t WL_SPI_GPIO_MAP = { +#if defined(WL_SPI_NPCS0) + WL_SPI_NPCS0, +#endif + WL_SPI_NPCS, WL_SPI_MISO, WL_SPI_MOSI, WL_SPI_SCK + }; +#endif + +#if defined(WL_SPI) || defined(AT45DBX_SPI) + spi_options_t spiOptions = { + .modfdis = 1 /* only param used by spi_initMaster() */ + }; +#endif + +#if defined(AT45DBX_SPI) + gpio_enable_module(AT45DBX_SPI_GPIO_MAP, + sizeof(AT45DBX_SPI_GPIO_MAP) / + sizeof(AT45DBX_SPI_GPIO_MAP[0])); + spi_initMaster(AT45DBX_SPI, &spiOptions); + spi_selectionMode(AT45DBX_SPI, 0, 0, 0); +#endif + +#if defined(WL_SPI) + /* same pins might be initialized twice here */ + gpio_enable_module(WL_SPI_GPIO_MAP, + sizeof(WL_SPI_GPIO_MAP) / + sizeof(WL_SPI_GPIO_MAP[0])); + for (i = 0; i < sizeof(WL_SPI_GPIO_MAP)/sizeof(WL_SPI_GPIO_MAP[0]); i++) + gpio_enable_pin_pull_up(WL_SPI_GPIO_MAP[i].pin); + + /* same SPI controller might be initialized again */ + spi_initMaster(&WL_SPI, &spiOptions); + spi_selectionMode(&WL_SPI, 0, 0, 0); +#endif + +#if defined(AT45DBX_SPI) + spi_enable(AT45DBX_SPI); + + /* put up flash reset pin */ + gpio_set_gpio_pin(AT45DBX_CHIP_RESET); +#endif + +#if defined(WL_SPI) + spi_enable(&WL_SPI); +#endif +} + + +static void init_rs232(void) +{ +#ifndef NO_SERIAL +#if defined(BOARD_RS232_0) + const gpio_map_t BOARD_RS232_0_GPIO_MAP = { + BOARD_RS232_0_TX, + BOARD_RS232_0_RX, +#if defined(BOARD_RS232_0_RTS) && defined (BOARD_RS232_0_CTS) + BOARD_RS232_0_RTS, + BOARD_RS232_0_CTS +#endif + + }; +#endif + +#if defined(BOARD_RS232_1) + const gpio_map_t BOARD_RS232_1_GPIO_MAP = { + BOARD_RS232_1_TX, + BOARD_RS232_1_RX +#if defined(BOARD_RS232_1_RTS) && defined (BOARD_RS232_1_CTS) + BOARD_RS232_1_RTS, + BOARD_RS232_1_CTS +#endif + }; +#endif + +#if defined(BOARD_RS232_0) + gpio_enable_module(BOARD_RS232_0_GPIO_MAP, + sizeof(BOARD_RS232_0_GPIO_MAP) / + sizeof(BOARD_RS232_0_GPIO_MAP[0])); +#endif + +#if defined(BOARD_RS232_1) + gpio_enable_module(BOARD_RS232_1_GPIO_MAP, + sizeof(BOARD_RS232_1_GPIO_MAP) / + sizeof(BOARD_RS232_1_GPIO_MAP[0])); +#endif +#endif /* NO_SERIAL */ +} + +static void init_printk(void) +{ +#ifndef NO_SERIAL +#if defined(CONFIG_CONSOLE_PORT) + const usart_options_t usart_options = { + .baudrate = 57600, + .charlength = 8, + .paritytype = USART_NO_PARITY, + .stopbits = USART_1_STOPBIT, + .channelmode = USART_NORMAL_CHMODE + }; + usart_init_rs232(&CONFIG_CONSOLE_PORT, &usart_options, FPBA_HZ); +#endif +#endif /* NO_SERIAL */ +} + +void board_init(void) +{ + + init_exceptions(); + init_hmatrix(); + init_sys_clocks(); + init_interrupts(); + + init_rs232(); + init_printk(); + +#ifdef WITH_SDRAM + sdramc_init(FHSB_HZ); +#endif + init_spi(); +} diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/board_init.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/board_init.h new file mode 100644 index 000000000..05a660998 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/board_init.h @@ -0,0 +1,313 @@ +/*! \page License + * Copyright (C) 2009, H&D Wireless AB All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of H&D Wireless AB may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY H&D WIRELESS AB ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND + * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef STARTUP_H +#define STARTUP_H + +#include +#include /* defines SPB104, SPB105 */ + +void board_init(void); + + + +/* + * + * EVK1100 + * --------------------------------------------------------------------------- + * + */ +#if BOARD == EVK1100 + +/* USART0 physical assignment */ +#define BOARD_RS232_0 AVR32_USART1 +#define BOARD_RS232_0_TX \ + { AVR32_USART1_TXD_0_0_PIN, AVR32_USART1_TXD_0_0_FUNCTION } +#define BOARD_RS232_0_RX \ + { AVR32_USART1_RXD_0_0_PIN, AVR32_USART1_RXD_0_0_FUNCTION } + +/* USART1 physical assignment */ +#define BOARD_RS232_1 AVR32_USART0 +#define BOARD_RS232_1_TX \ + { AVR32_USART0_TXD_0_0_PIN, AVR32_USART0_TXD_0_0_FUNCTION } +#define BOARD_RS232_1_RX \ + { AVR32_USART0_RXD_0_0_PIN, AVR32_USART0_RXD_0_0_FUNCTION }, + +/* Clocks */ +#define USE_PLL +#define OSC 0 +#define PLL_MUL 10 + +/* Wifi (SPB104 only) */ +#if defined(EXT_BOARD) +#if EXT_BOARD == SPB104 +#define WL_SPI AVR32_SPI1 /* Pin 8 NC, so no irq support if using SD-slot */ +#define WL_SPI_CLOCK_DIVIDER 3 /* due to adapter */ +#define WL_PDCA_PID_TX AVR32_PDCA_PID_SPI1_TX +#define WL_PDCA_PID_RX AVR32_PDCA_PID_SPI1_RX +#define WL_SPI_CS 1 +#define WL_SPI_NPCS0 { AVR32_SPI1_NPCS_0_0_PIN, AVR32_SPI1_NPCS_0_0_FUNCTION } +#define WL_SPI_NPCS { AVR32_SPI1_NPCS_1_0_PIN, AVR32_SPI1_NPCS_1_0_FUNCTION } +#define WL_SPI_MISO { AVR32_SPI1_MISO_0_0_PIN, AVR32_SPI1_MISO_0_0_FUNCTION } +#define WL_SPI_MOSI { AVR32_SPI1_MOSI_0_0_PIN, AVR32_SPI1_MOSI_0_0_FUNCTION } +#define WL_SPI_SCK { AVR32_SPI1_SCK_0_0_PIN, AVR32_SPI1_SCK_0_0_FUNCTION } +#endif +#endif /* EXT_BOARD */ + + + + + + +/* + * + * EVK1101 + * --------------------------------------------------------------------------- + * + */ +#elif BOARD == EVK1101 + +/* USART0 physical assignment */ +#define BOARD_RS232_0 AVR32_USART1 +#define BOARD_RS232_0_TX \ + { AVR32_USART1_TXD_0_0_PIN, AVR32_USART1_TXD_0_0_FUNCTION } +#define BOARD_RS232_0_RX \ + { AVR32_USART1_RXD_0_0_PIN, AVR32_USART1_RXD_0_0_FUNCTION } + +/* Clocks */ +#define USE_PLL +#define OSC 0 +#define PLL_MUL 9 + +/* Wifi (SPB104 only) */ +#if defined(EXT_BOARD) +#if EXT_BOARD == SPB104 /* Pin 8 NC, so no irq support if using SD-slot */ +#define WL_SPI AVR32_SPI +#define WL_SPI_CLOCK_DIVIDER 3 /* due to adapter */ +#define WL_PDCA_PID_TX AVR32_PDCA_PID_SPI_TX +#define WL_PDCA_PID_RX AVR32_PDCA_PID_SPI_RX +#define WL_SPI_CS 1 +#if EXT_BOARD == SPB105 + #define WL_SHUTDOWN_PIN AVR32_PIN_PA06 + #define WL_POWER_PIN AVR32_PIN_PA30 +#endif +#define WL_SPI_NPCS0 { AVR32_SPI_NPCS_0_0_PIN, AVR32_SPI_NPCS_0_0_FUNCTION } +#define WL_SPI_NPCS { AVR32_SPI_NPCS_1_0_PIN, AVR32_SPI_NPCS_1_0_FUNCTION } +#define WL_SPI_MISO { AVR32_SPI_MISO_0_0_PIN, AVR32_SPI_MISO_0_0_FUNCTION } +#define WL_SPI_MOSI { AVR32_SPI_MOSI_0_0_PIN, AVR32_SPI_MOSI_0_0_FUNCTION } +#define WL_SPI_SCK { AVR32_SPI_SCK_0_0_PIN, AVR32_SPI_SCK_0_0_FUNCTION } +#endif +#endif /* EXT_BOARD */ + + + + + + + +/* + * + * EVK1104 + * --------------------------------------------------------------------------- + * + */ +#elif BOARD == EVK1104 /* EVK1104 */ + +/* USART0 physical assignment */ +#define BOARD_RS232_0 AVR32_USART1 +#define BOARD_RS232_0_TX \ + { AVR32_USART1_TXD_0_0_PIN, AVR32_USART1_TXD_0_0_FUNCTION } +#define BOARD_RS232_0_RX \ + { AVR32_USART1_RXD_0_0_PIN, AVR32_USART1_RXD_0_0_FUNCTION } + +/* Clocks */ +#define USE_PLL +#define OSC 0 +#define PLL_MUL 9 /* for some reason we cant use 66 MHz */ + +/* Wifi (SDIO: SPB104 only; SPI: SPB105 only) */ +#if defined(EXT_BOARD) +#if EXT_BOARD == SPB105 + #define WL_SPI AVR32_SPI0 + #define WL_PDCA_PID_TX AVR32_PDCA_PID_SPI0_TX + #define WL_PDCA_PID_RX AVR32_PDCA_PID_SPI0_RX + #define WL_SPI_CLOCK_DIVIDER 3 /* due to adapter */ + #define WL_SHUTDOWN_PIN AVR32_PIN_PA17 /* Pin 8 on RF-head -> Pin 4 on wifi */ + #define WL_IRQ_PIN AVR32_PIN_PA18 /* Pin 6 on RF-head -> Pin 3 on wifi */ + #define WL_IRQ AVR32_GPIO_IRQ_2 + #define WL_SPI_CS 3 + #define WL_SPI_NPCS { AVR32_SPI0_NPCS_3_1_PIN, AVR32_SPI0_NPCS_3_1_FUNCTION } + #define WL_SPI_MISO { AVR32_SPI0_MISO_0_0_PIN, AVR32_SPI0_MISO_0_0_FUNCTION } + #define WL_SPI_MOSI { AVR32_SPI0_MOSI_0_0_PIN, AVR32_SPI0_MOSI_0_0_FUNCTION } + #define WL_SPI_SCK { AVR32_SPI0_SCK_0_0_PIN, AVR32_SPI0_SCK_0_0_FUNCTION } +#elif EXT_BOARD == SPB104 + #ifdef SDIO_SLOT_A + #define WL_SDIO_CLK { AVR32_MCI_CLK_0_PIN, AVR32_MCI_CLK_0_FUNCTION } + #define WL_SDIO_CMD { AVR32_MCI_CMD_0_PIN, AVR32_MCI_CMD_0_FUNCTION } + #define WL_SDIO_DAT0 { AVR32_MCI_DATA_0_PIN, AVR32_MCI_DATA_0_FUNCTION } + #define WL_SDIO_DAT1 { AVR32_MCI_DATA_1_PIN, AVR32_MCI_DATA_1_FUNCTION } + #define WL_SDIO_DAT2 { AVR32_MCI_DATA_2_PIN, AVR32_MCI_DATA_2_FUNCTION } + #define WL_SDIO_DAT3 { AVR32_MCI_DATA_3_PIN, AVR32_MCI_DATA_3_FUNCTION } + #else + #define WL_SDIO_CLK { AVR32_MCI_CLK_0_PIN, AVR32_MCI_CLK_0_FUNCTION } + #define WL_SDIO_CMD { AVR32_MCI_CMD_1_0_PIN, AVR32_MCI_CMD_1_0_FUNCTION } + #define WL_SDIO_DAT0 { AVR32_MCI_DATA_8_0_PIN, AVR32_MCI_DATA_8_0_FUNCTION } + #define WL_SDIO_DAT1 { AVR32_MCI_DATA_9_0_PIN, AVR32_MCI_DATA_9_0_FUNCTION } + #define WL_SDIO_DAT2 { AVR32_MCI_DATA_10_0_PIN, AVR32_MCI_DATA_10_0_FUNCTION } + #define WL_SDIO_DAT3 { AVR32_MCI_DATA_11_0_PIN, AVR32_MCI_DATA_11_0_FUNCTION } + #endif +#endif +#endif /* EXT_BOARD */ + + + + + + + +/* + * + * EVK1105 + * --------------------------------------------------------------------------- + * + */ +#elif BOARD == EVK1105 /* EVK1105 */ + + +/* USART0 physical assignment */ +#define BOARD_RS232_0 AVR32_USART0 +#define BOARD_RS232_0_TX \ + { AVR32_USART0_TXD_0_0_PIN, AVR32_USART0_TXD_0_0_FUNCTION } +#define BOARD_RS232_0_RX \ + { AVR32_USART0_RXD_0_0_PIN, AVR32_USART0_RXD_0_0_FUNCTION } + +/* Clocks */ +#define USE_PLL +#define OSC 1 +#define PLL_MUL 10 + +/* Wifi SPB104/SPB105 */ +#if defined(EXT_BOARD) + #define WL_SPI AVR32_SPI0 + #define WL_PDCA_PID_TX AVR32_PDCA_PID_SPI0_TX + #define WL_PDCA_PID_RX AVR32_PDCA_PID_SPI0_RX + #if EXT_BOARD == SPB105 + #define WL_SPI_CLOCK_DIVIDER 3 /* due to adapter */ + #define WL_SHUTDOWN_PIN AVR32_PIN_PB31 /* Pin 8 on RF-head -> Pin 4 on wifi */ + #define WL_IRQ_PIN AVR32_PIN_PB30 /* Pin 6 on RF-head -> Pin 3 on wifi */ + #define WL_IRQ AVR32_GPIO_IRQ_7 + #define WL_SPI_CS 2 + #elif EXT_BOARD == SPB104 + #define WL_SPI_CLOCK_DIVIDER 3 /* due to adapter */ + #define WL_SPI_CS 1 + #endif + #define WL_SPI_NPCS0 { AVR32_SPI0_NPCS_0_0_PIN, AVR32_SPI0_NPCS_0_0_FUNCTION } + #if WL_SPI_CS == 1 + #define WL_SPI_NPCS { AVR32_SPI0_NPCS_1_0_PIN, AVR32_SPI0_NPCS_1_0_FUNCTION } + #elif WL_SPI_CS == 2 + #define WL_SPI_NPCS { AVR32_SPI0_NPCS_2_0_PIN, AVR32_SPI0_NPCS_2_0_FUNCTION } + #endif + #define WL_SPI_MISO { AVR32_SPI0_MISO_0_0_PIN, AVR32_SPI0_MISO_0_0_FUNCTION } + #define WL_SPI_MOSI { AVR32_SPI0_MOSI_0_0_PIN, AVR32_SPI0_MOSI_0_0_FUNCTION } + #define WL_SPI_SCK { AVR32_SPI0_SCK_0_0_PIN, AVR32_SPI0_SCK_0_0_FUNCTION } +#endif /* EXT_BOARD */ + +/* + * + * ARDUINO + * --------------------------------------------------------------------------- + * + */ +#elif BOARD == ARDUINO /* ARDUINO */ + + +/* USART0 physical assignment */ +#define BOARD_RS232_1 AVR32_USART1 +#define BOARD_RS232_1_TX \ + { AVR32_USART1_TXD_0_0_PIN, AVR32_USART1_TXD_0_0_FUNCTION } +#define BOARD_RS232_1_RX \ + { AVR32_USART1_RXD_0_0_PIN, AVR32_USART1_RXD_0_0_FUNCTION } + +/* Clocks */ +#define USE_PLL +#define OSC 0 +#define PLL_MUL 8 + +#define WL_SPI AVR32_SPI1 +#define WL_PDCA_PID_TX AVR32_PDCA_PID_SPI1_TX +#define WL_PDCA_PID_RX AVR32_PDCA_PID_SPI1_RX + +#define WL_SHUTDOWN_PIN AVR32_PIN_PA09 +#define WL_IRQ_PIN AVR32_PIN_PA03 +/* +* WL_IRQ_# = (WL_IRQ_PIN / 32) * 4 + (WL_IRQ_PIN / 8) % 4 + * 3 => 0 * 4 + 0 = 0 +*/ +#define WL_IRQ AVR32_GPIO_IRQ_0 +#define WL_SPI_CS 0 +#define WL_RESET_PIN AVR32_PIN_PA07 +#define WL_EXTERNAL_RESET 1 + + +#define WL_SPI_NPCS { AVR32_SPI1_NPCS_0_0_PIN, AVR32_SPI1_NPCS_0_0_FUNCTION } +#define WL_SPI_MISO { AVR32_SPI1_MISO_0_0_PIN, AVR32_SPI1_MISO_0_0_FUNCTION } +#define WL_SPI_MOSI { AVR32_SPI1_MOSI_0_0_PIN, AVR32_SPI1_MOSI_0_0_FUNCTION } +#define WL_SPI_SCK { AVR32_SPI1_SCK_0_0_PIN, AVR32_SPI1_SCK_0_0_FUNCTION } + +#endif /* EVKxxxx */ + + + + + + + + + +#if OSC == 0 +# define FOSC FOSC0 /* 12 MHz */ +#else +# define FOSC FOSC1 /* 11.2896 MHz */ +#endif + +#ifdef USE_PLL +# define FMCK_HZ ((FOSC * (PLL_MUL + 1)) / 2) +#else +# define FMCK_HZ FOSC +#endif + +#define FCPU_HZ FMCK_HZ +#define FHSB_HZ FCPU_HZ +#define FPBB_HZ FMCK_HZ +#define FPBA_HZ FMCK_HZ + + +#ifndef CONFIG_CONSOLE_PORT +#define CONFIG_CONSOLE_PORT BOARD_RS232_1 +#endif + +#endif diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/cmd_wl.c b/external/arduino/avr/firmwares/wifishield/wifiHD/src/cmd_wl.c new file mode 100644 index 000000000..a210dec37 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/cmd_wl.c @@ -0,0 +1,731 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*! \page License + * Copyright (C) 2009, H&D Wireless AB All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of H&D Wireless AB may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY H&D WIRELESS AB ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND + * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#include +#include +#include +#include + +#include + +#include +#include +#include +#include + +#include "lwip/netif.h" +#include "lwip/dns.h" +#include "debug.h" +#include "ard_spi.h" +#include "ard_tcp.h" +#include "ard_utils.h" + +extern void showTTCPstatus(); + +#define _DNS_CMD_ + +/** + * + */ +cmd_state_t +cmd_scan(int argc, char* argv[], void* ctx) +{ + /* Note that the scan results presented will + * be from the last scan, not this one. + */ + wl_scan(); + print_network_list(); + return CMD_DONE; +} + +cmd_state_t +cmd_debug_toggle(int argc, char* argv[], void* ctx) +{ + extern uint8_t tr_data_trace; + if ( argc != 2 ) { + printk("usage: dt <1|0>\n"); + return CMD_DONE; + } + if ( '0' == argv[1][0] ) { + tr_data_trace = 0; + } + if ( '1' == argv[1][0] ) { + tr_data_trace = 1; + } + return CMD_DONE; +} + +/** + * + */ +cmd_state_t +cmd_connect(int argc, char* argv[], void* ctx) +{ + struct wl_ssid_t ssid; + char desired_ssid[WL_SSID_MAX_LENGTH]; + int len = 0; + + if (argc < 2) { + printk("usage: connect \n"); + return CMD_DONE; + } + + len = join_argv(desired_ssid, sizeof desired_ssid, argc - 1, argv + 1); + if (0 == len) { + return CMD_DONE; + } + + memcpy(ssid.ssid, desired_ssid, len); + ssid.len = len; + /* Start connection manager */ + wl_cm_set_network(&ssid, NULL); + wl_cm_start(); + return CMD_DONE; +} + +#ifdef WFE_6_12 +cmd_state_t +cmd_ibss(int argc, char* argv[], void* ctx) +{ + struct wl_ssid_t ssid; + char desired_ssid[WL_SSID_MAX_LENGTH]; + uint8_t channel; + enum wl_auth_mode amode; + int len = 0; + wl_err_t ret; + + if ( 2 == argc && ! strncmp(argv[1], "none", 4) ) { + printk("Disconnecting\n"); + wl_disconnect(); + wl_cm_stop(); + return CMD_DONE; + } + if (argc < 4) { + printk("usage: ibss \n"); + printk(" ibss none\n"); + return CMD_DONE; + } + + channel = atoi(argv[argc - 2]); + if ( *argv[argc - 1] == '0' ) { + amode = AUTH_MODE_OPEN_SYSTEM; + } else { + amode = AUTH_MODE_SHARED_KEY; + } + len = join_argv(desired_ssid, sizeof desired_ssid, argc - 3, argv + 1); + if (0 == len) { + return CMD_DONE; + } + if ( channel > 14 ) { + printk("Invalid channel %d\n", (int)channel); + return CMD_DONE; + } + printk("%s : Start with ssid \"%s\", channel %d\n", __func__, + desired_ssid, channel); + memcpy(ssid.ssid, desired_ssid, len); + ssid.len = len; + /* Stop the connection manager */ + wl_cm_stop(); + + ret = wl_start_adhoc_net(ssid, channel, amode); + switch (ret) { + case WL_BUSY: + printk("Driver is busy. Already connected?\n"); + break; + case WL_RETRY: + printk("Driver is busy. Retry operation\n"); + break; + case WL_OOM: + printk("Out of memory\n"); + break; + case WL_INVALID_ARGS: + printk("Invalid argument\n"); + break; + case WL_SUCCESS: + break; + default: + printk("Unknown error %d\n", ret); + break; + } + return CMD_DONE; +} +#endif +/** + * + */ +cmd_state_t +cmd_set_ip(int argc, char* argv[], void* ctx) +{ + struct ctx_server *hs = ctx; + struct net_cfg *ncfg = &(hs->net_cfg); + struct ip_addr lwip_addr; + struct netif *nif = ncfg->netif; + + if (argc == 2 && + (strncmp(argv[1], "none", 4) == 0)) { + ncfg->dhcp_enabled = DYNAMIC_IP_CONFIG; + + return CMD_DONE; + } + else if (argc != 4 ) { + printk("usage: ipconfig \n"); + printk(" or : ipconfig none (to enable DHCP)\n"); + return CMD_DONE; + } + + /* IP address */ + lwip_addr = str2ip(argv[1]); + INFO_SPI("nif:%p lwip_addr=0x%x\n", nif, lwip_addr.addr); + netif_set_ipaddr(nif, &lwip_addr); + /* Netmask */ + lwip_addr = str2ip(argv[2]); + netif_set_netmask(nif, &lwip_addr); + /* Default Gateway address */ + lwip_addr = str2ip(argv[3]); + netif_set_gw(nif, &lwip_addr); + /* Disable DHCP */ + ncfg->dhcp_enabled = STATIC_IP_CONFIG; + + return CMD_DONE; +} + +#ifdef WITH_WPA + +/** + * + */ +cmd_state_t +cmd_delpass(int argc, char* argv[], void* ctx) +{ + const char *usage = "usage: dpass \n"; + struct wl_network_t net; + char desired_ssid[WL_SSID_MAX_LENGTH]; + int len = 0; + + if (argc != 2) { + printk(usage); + return CMD_DONE; + } + + memset(&net, 0, sizeof net); + memset(net.bssid.octet, 0xFF, sizeof net.bssid.octet); + + len = join_argv(desired_ssid, sizeof desired_ssid, argc - 1, argv + 1); + if (0 == len) { + return CMD_DONE; + } + memcpy(net.ssid.ssid, desired_ssid, len); + net.ssid.len = len; + net.enc_type = ENC_TYPE_AUTO; + if (wl_clear_passphrase(&net) != WL_SUCCESS) { + printk("%s : Failed to delete passphrase\n", __func__); + } + + return CMD_DONE; +} + + +/** + * + */ +cmd_state_t +cmd_setpass(int argc, char* argv[], void* ctx) +{ + const char *usage = "usage: wpass \n"; + struct wl_network_t net; + char desired_ssid[WL_SSID_MAX_LENGTH]; + int len = 0; + + if (argc < 3) { + printk(usage); + return CMD_DONE; + } + /* Not really kosher, an ssid may legally contain 0-bytes but + * the console interface does not deal with that. + */ + memset(&net, 0, sizeof net); + memset(net.bssid.octet, 0xFF, sizeof net.bssid.octet); + + len = join_argv(desired_ssid, sizeof desired_ssid, argc - 2, argv + 1); + if (0 == len) { + return CMD_DONE; + } + + memcpy(net.ssid.ssid, desired_ssid, len); + net.ssid.len = len; + net.enc_type = ENC_TYPE_AUTO; + if (wl_set_passphrase(&net, + argv[argc - 1], + strlen(argv[argc - 1]), + ENC_TYPE_AUTO, + AUTH_MODE_AUTO) + != WL_SUCCESS) { + printk("%s : Failed to add passphrase\n", __func__); + } + + return CMD_DONE; +} +#endif + +#ifdef _DNS_CMD_ +void foundHost(const char *name, struct ip_addr *ipaddr, void *callback_arg) +{ + printk("Found Host: name=%s ip=0x%x\n", name, ipaddr->addr); +} + +/** + * + */ +cmd_state_t +cmd_gethostbyname(int argc, char* argv[], void* ctx) +{ + const char *usage = "usage: getHost \n"; + char hostname[DNS_MAX_NAME_LENGTH]; + struct ip_addr _addr; + int len = 0; + + if (argc < 2) { + printk(usage); + return CMD_DONE; + } + + len = join_argv(hostname, sizeof hostname, argc - 1, argv + 1); + if (0 == len) { + return CMD_DONE; + } + err_t err = dns_gethostbyname(hostname, &_addr, foundHost, NULL); + if (err == ERR_OK) + { + printk("Found Host: name=%s ip=0x%x\n", hostname, _addr.addr); + } + + return CMD_DONE; +} + +/** + * + */ +cmd_state_t +cmd_setDnsServer(int argc, char* argv[], void* ctx) +{ + const char *usage = "usage: setdns [1-2] aaa.bbb.ccc.ddd\n"; + struct ip_addr dnsIp; + int dnsIdx = 0; + + if (argc < 3) { + printk(usage); + return CMD_DONE; + } + + /* DNS IDX */ + dnsIdx = atoi(argv[1])-1; + /* IP address */ + dnsIp = str2ip(argv[2]); + + printk("Set DNS server %d to %s\n", dnsIdx, ip2str(dnsIp)); + dns_setserver(dnsIdx, &dnsIp); + struct ip_addr addr1 = dns_getserver(0); + struct ip_addr addr2 = dns_getserver(1); + + printk("==> DNS1: %s\n", ip2str(addr1), addr1); + printk("==> DNS2: %s\n", ip2str(addr2), addr2); + + return CMD_DONE; +} + +/** + * + */ +cmd_state_t +cmd_startSrv(int argc, char* argv[], void* ctx) +{ + const char *usage = "usage: startSrv \n"; + + int port = 0; + int sock = 0; + int protMode = 0; + + if (argc < 4) { + printk(usage); + return CMD_DONE; + } + + /* TCP port */ + port = atoi(argv[1]); + /* socket index */ + sock = atoi(argv[2]); + /* Protocol Mode */ + protMode = atoi(argv[3]); + + printk("Start %s server on port %d sock %d\n", ProtMode2Str(protMode), port, sock); + if (start_server_tcp(port, sock, protMode) == -1) + { + WARN("Start %s server on port %d sock %d FAILED\n", ProtMode2Str(protMode), port, sock); + } + return CMD_DONE; +} + +/** + * + */ +cmd_state_t +cmd_startCli(int argc, char* argv[], void* ctx) +{ + const char *usage = "usage: startCli \n"; + struct ip_addr addr = {0}; + int port = 0; + int sock = 0; + int protMode = 0; + + if (argc < 5) { + printk(usage); + return CMD_DONE; + } + + /* IP address */ + addr = str2ip(argv[1]); + /* TCP port */ + port = atoi(argv[2]); + /* socket index */ + sock = atoi(argv[3]); + /* Protocol Mode */ + protMode = atoi(argv[4]); + + printk("Start client on addr 0x%x, port %d sock %d mode %d\n", addr, port, sock, protMode); + if (start_client_tcp(addr.addr, port, sock, protMode) == -1) + { + WARN("Start client on port %d sock %d prot %d mode %d FAILED\n", port, sock, protMode); + } + return CMD_DONE; +} + +#endif + + +/** + * + */ +cmd_state_t +cmd_status(int argc, char* argv[], void* ctx) +{ + struct net_cfg *ncfg = ctx; + struct wl_network_t* net; + uint8_t mac[WL_MAC_ADDR_LENGTH]; + + printk("wl_api version " WL_API_RELEASE_NAME "\n"); + /* print mac address */ + if (wl_get_mac_addr(mac) != WL_SUCCESS) { + printk("failed to get mac address\n"); + }else{ + printk("hw addr: %s\n", mac2str(mac)); + } + + /* print network info */ + net = wl_get_current_network(); + printk("link status: "); + if (!net) { + printk("down\n"); + + }else{ + print_network(net); + } + + /* print ip address */ + if (netif_is_up(netif_default)) + { + printk("ip addr: %s - ", ip2str(netif_default->ip_addr)); + printk("netmask: %s - ", ip2str(netif_default->netmask)); + printk("gateway: %s\n", ip2str(netif_default->gw)); + } + else + printk("ip interface is down\n"); + printk("dhcp : "); + if (ncfg->dhcp_enabled == DYNAMIC_IP_CONFIG) { + printk("enabled\n"); + } + else { + printk("disabled\n"); + } + struct ip_addr addr1 = dns_getserver(0); + struct ip_addr addr2 = dns_getserver(1); + + printk("DNS: %s - ", ip2str(addr1)); + printk("%s\n", ip2str(addr2)); + + showTTCPstatus(); + return CMD_DONE; +} + +#ifdef ADD_CMDS +/** + * + */ +cmd_state_t +cmd_power(int argc, char* argv[], void* ctx) +{ + const char *usage = "usage: powersave \n"; + + if (argc < 2) { + printk(usage); + return CMD_DONE; + } + + if (!strcmp(argv[1], "on")) { + if (wl_enable_ps() != WL_SUCCESS) { + printk("could not enable power save\n"); + return CMD_DONE; + } + return CMD_DONE; + } + else if(!strcmp(argv[1], "off")) { + if (wl_disable_ps() != WL_SUCCESS) { + printk("could not disable power save\n"); + return CMD_DONE; + } + return CMD_DONE; + } + + printk(usage); + return CMD_DONE; +} +#endif + +#ifdef ADD_CMDS +/** + * + */ +cmd_state_t +cmd_psconf(int argc, char* argv[], void* ctx) +{ + const char *usage = + "usage: psconf (0/1 default 0)\n" \ + " ([ms] default 10)\n" \ + " ([ms] default 5000)\n"\ + " (0/1 default 1)\n"\ + " ([beacons] default 20)\n"; + + uint8_t use_ps_poll; + uint32_t traffic_timeout; + uint32_t ps_delay; + uint8_t rx_all_dtim; + uint16_t listen_interval; + + if (argc < 6) { + printk(usage); + return CMD_DONE; + } + + use_ps_poll = atoi(argv[1]); + traffic_timeout = atoi(argv[2]); + ps_delay = atoi(argv[3]); + rx_all_dtim = atoi(argv[4]); + listen_interval = atoi(argv[5]); + + if (use_ps_poll > 1) { + printk(usage); + return CMD_DONE; + } + + if (rx_all_dtim > 1) { + printk(usage); + return CMD_DONE; + } + + if (wl_conf_ps(use_ps_poll, traffic_timeout, ps_delay, + rx_all_dtim, listen_interval) != WL_SUCCESS) + printk("configuration failed\n"); + + return CMD_DONE; +} +#endif + +/** + * + */ +cmd_state_t +cmd_setkey(int argc, char* argv[], void* ctx) +{ + int idx, len; + char key[13]; + struct wl_mac_addr_t bssid; + const char *usage = "usage: setkey \n\t "\ + "or: setkey none\n"; + + memset(&bssid.octet, 0xff, sizeof bssid.octet); + if (argc == 2 && strcmp(argv[1], "none") == 0) { + printk("Deleting WEP keys\n"); + wl_delete_wep_key(0, &bssid); + wl_delete_wep_key(1, &bssid); + wl_delete_wep_key(2, &bssid); + wl_delete_wep_key(3, &bssid); + return CMD_DONE; + } + if (argc < 3) { + printk(usage); + return CMD_DONE; + } + idx = atoi(argv[1]); + len = strlen(argv[2]); + /* Pass phrase? */ + if ( 5 == len || 13 == len ) { + strncpy(key, argv[2], len); + } + /* Otherwise it's a hex string */ + else { + len = ascii_to_key(key, argv[2]); + if (0 == len || idx > 3 || idx < 0 || (idx == 0 && *argv[1] != '0')) { + printk(usage); + return CMD_DONE; + } + if (len != 5 && len != 13) { + printk(" WEP key must be 10 (WEP-40) or 26 (WEP-104) digits\n"); + return CMD_DONE; + } + } + wl_add_wep_key(idx, len, key, &bssid); + wl_set_default_wep_key(idx); + + return CMD_DONE; +} + +cmd_state_t +cmd_debug(int argc, char* argv[], void* ctx) +{ + int level; + const char *usage = "usage: debug
\n\t"\ + "section: init, cm, spi, tcp , util, warn\n\t" + "level : 0 (off), 1 (on), 2 (verbose)\n\t" + "or: debug print/on/off\n"; + + if (argc == 2 && strcmp(argv[1], "off") == 0) { + printk("Debug OFF\n"); + INIT_DEBUG_VARIABLES() + return CMD_DONE; + }else if (argc == 2 && strcmp(argv[1], "print") == 0) { + PRINT_DEBUG_VARIABLES() + return CMD_DONE; + }else if (argc == 2 && strcmp(argv[1], "on") == 0) { + printk("Debug ON\n"); + TURNON_DEBUG_VARIABLES(); + return CMD_DONE; + } + if (argc < 3) { + printk(usage); + return CMD_DONE; + } + level = atoi(argv[2]); + if (argc == 3 && strcmp(argv[1], "init") == 0) { + CHECK_DEBUG_LEVEL(level, INFO_INIT_FLAG); + }else if (argc == 3 && strcmp(argv[1], "spi") == 0) { + CHECK_DEBUG_LEVEL(level, INFO_SPI_FLAG); + }else if (argc == 3 && strcmp(argv[1], "tcp") == 0) { + CHECK_DEBUG_LEVEL(level, INFO_TCP_FLAG); + }else if (argc == 3 && strcmp(argv[1], "cm") == 0) { + CHECK_DEBUG_LEVEL(level, INFO_CM_FLAG); + }else if (argc == 3 && strcmp(argv[1], "util") == 0) { + CHECK_DEBUG_LEVEL(level, INFO_UTIL_FLAG); + }else if (argc == 3 && strcmp(argv[1], "warn") == 0) { + CHECK_DEBUG_LEVEL(level, INFO_WARN_FLAG); + } + return CMD_DONE; +} + +extern void dumpPbuf(uint8_t sock); + +/** + * + */ +cmd_state_t +cmd_dumpBuf(int argc, char* argv[], void* ctx) +{ + const char *usage = "usage: dumpPbuf [sock]\n\t"\ + "sock: socket Number\n"; + + if (argc == 2 && strcmp(argv[1], "all") == 0) { + printk("Dump All Buffers\n"); + int i = 0; + for (; i= 2) { + + uint8_t sock = atoi(argv[1]); + printk("Socket: %d\n", sock); + + if (argc >= 3) { + uint8_t patternType = atoi(argv[2]); + printk("PatternType: %d\n", patternType); + if (patternType == 1) + { + insertBuf(sock, (uint8_t*)pattern2[0], strlen(pattern2[0])); + insertBuf(sock, (uint8_t*)pattern2[1], strlen(pattern2[1])); + insertBuf(sock, (uint8_t*)pattern2[2], strlen(pattern2[2])); + } + if (patternType == 2) + { + mergeBuf(sock, NULL, NULL); + } + }else{ + if (sock < MAX_SOCK_NUM) + { + sendUdpData(getTTCP(sock, TTCP_MODE_TRANSMIT), (uint8_t*)pattern, sizeof(pattern)/sizeof(char)); + } + } + + } + return CMD_DONE; +} diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/cmd_wl.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/cmd_wl.h new file mode 100644 index 000000000..a1d1a0f37 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/cmd_wl.h @@ -0,0 +1,66 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*! \page License + * Copyright (C) 2009, H&D Wireless AB All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of H&D Wireless AB may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY H&D WIRELESS AB ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND + * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef CMD_CM_H +#define CMD_CM_H + +#include +#include "netif/wlif.h" + +/*! A pointer to a struct of type "struct net_cfg" should be passed as + * the ctx pointer in the callbacks below. The struct must have a + * single instance per netif. + */ +#define _DNS_CMD_ + +cmd_state_t cmd_scan(int argc, char* argv[], void* ctx); +cmd_state_t cmd_connect(int argc, char* argv[], void* ctx); +cmd_state_t cmd_set_ip(int argc, char* argv[], void* ctx); +cmd_state_t cmd_setkey(int argc, char* argv[], void* ctx); +cmd_state_t cmd_status(int argc, char* argv[], void* ctx); +cmd_state_t cmd_power(int argc, char* argv[], void* ctx); +cmd_state_t cmd_psconf(int argc, char* argv[], void* ctx); +cmd_state_t cmd_setpass(int argc, char* argv[], void* ctx); +cmd_state_t cmd_delpass(int argc, char* argv[], void* ctx); +cmd_state_t cmd_debug(int argc, char* argv[], void* ctx); +cmd_state_t cmd_debug_toggle(int argc, char* argv[], void* ctx); +cmd_state_t cmd_statSpi(int argc, char* argv[], void* ctx); +cmd_state_t cmd_resetStatSpi(int argc, char* argv[], void* ctx); +cmd_state_t cmd_gethostbyname(int argc, char* argv[], void* ctx); +cmd_state_t cmd_setDnsServer(int argc, char* argv[], void* ctx); +cmd_state_t cmd_startSrv(int argc, char* argv[], void* ctx); +cmd_state_t cmd_startCli(int argc, char* argv[], void* ctx); +cmd_state_t cmd_dumpBuf(int argc, char* argv[], void* ctx); +cmd_state_t cmd_sendUdpData(int argc, char* argv[], void* ctx); +#ifdef WFE_6_12 +cmd_state_t cmd_ibss(int argc, char* argv[], void* ctx); +#endif + + +#endif diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/console.c b/external/arduino/avr/firmwares/wifishield/wifiHD/src/console.c new file mode 100644 index 000000000..e54943f09 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/console.c @@ -0,0 +1,212 @@ +/*! \page License + * Copyright (C) 2009, H&D Wireless AB All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of H&D Wireless AB may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY H&D WIRELESS AB ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND + * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#define MAX_CMD_CONSOLE_NUM 15 +struct { + cmd_cb_t cb; + const char* str; + void* ctx; +} cmd_list[MAX_CMD_CONSOLE_NUM] = { { 0 } }; + +#ifndef CMD_MAX_LEN +#define CMD_MAX_LEN 80 +#endif +extern int board_putchar(char c); +int io_getc(char *c) +{ + int ci; + int status; + status = usart_read_char(&CONFIG_CONSOLE_PORT, &ci); + if (status == USART_RX_EMPTY) + return 1; + + if (status == USART_RX_ERROR) { + CONFIG_CONSOLE_PORT.cr = AVR32_USART_CR_RSTSTA_MASK; + return 1; + } + + if (ci == '\r') { + board_putchar('\n'); + /* Echo char. */ + } else if (ci == '\b') { + board_putchar(ci); + board_putchar(' '); + board_putchar(ci); + } else + board_putchar(ci); + + + *c = ci; + return 0; +} + +static uint8_t is_initialized = 0; + +char* console_gets() +{ + static char buf[CMD_MAX_LEN]; + static int pos = 0; + char c; + + for (;;) { + if (io_getc(&c)) + return NULL; + + if (c == '\r' || c == '\n') { + buf[pos] = 0; + pos = 0; + return buf; + } + if (c == '\b') { + pos -= 1; + if (pos < 0) pos = 0; + buf[pos] = 0; + } + else + buf[pos++] = c; + if (pos == sizeof(buf)) + pos = 0; + } + return NULL; +} + +int console_add_cmd(const char* str, cmd_cb_t cb, void* ctx) +{ + uint32_t i; + for (i = 0; i < ARRAY_SIZE(cmd_list); i++) + if (!cmd_list[i].cb) + break; + + if (i == ARRAY_SIZE(cmd_list)) + return -1; + + cmd_list[i].str = str; + cmd_list[i].cb = cb; + cmd_list[i].ctx = ctx; + return 0; +} + +void console_init(void) +{ + printk("\n$ "); + is_initialized = 1; +} + +void console_init_silent(void) { + is_initialized = 1; +} + +int console_schedule_cmd(char *cmd, int interactive) { +#define MAX_ARGS 16 + static int argc, i; + static char* argv[MAX_ARGS]; + static char *buf; + static enum { INPUT, RUN } state = INPUT; + + switch (state) { + case INPUT: { + char* token; + if (NULL == cmd) { + return 0; + } + buf = strdup(cmd); + if (!buf) + return 0; + if (!strlen(buf)) { + interactive ? printk("$ ") : 0; + free(buf); + return 0; + } +#ifdef WIFI_DEBUG_ON + printk("%s : Scheduling command \"%s\"\n", + __func__, + buf); +#endif + for (i = 0; i < ARRAY_SIZE(cmd_list); i++) + if(cmd_list[i].str && !strncmp(cmd_list[i].str, buf, min(strlen(cmd_list[i].str), strlen(buf)))) + break; + + if (ARRAY_SIZE(cmd_list) == 0) { + printk("No commands available. Is the WiFi card responding?\n"); + } + if (i == ARRAY_SIZE(cmd_list)) { + if (interactive) { + printk("available commands:\n"); + for (i = 0; i < ARRAY_SIZE(cmd_list); i++) + if (cmd_list[i].cb) + printk(" %s\n", cmd_list[i].str); + printk("$ "); + } + free(buf); + return 0; + } + + for (token = strtok(buf, " "); token != NULL; + token = strtok(NULL, " ")) { + argv[argc] = token; + argc++; + if (argc == MAX_ARGS) + break; + } + + state = RUN; + } /* fall through */ + + case RUN: { + cmd_state_t s = cmd_list[i].cb(argc, argv, cmd_list[i].ctx); + if (s == CMD_INPROGRESS) + return 1; + + interactive ? printk("$ ") : 0; + + argc = 0; + memset(argv, 0, sizeof argv); + free(buf); + state = INPUT; + } + } + + return 1; +} + + +void console_poll(void) +{ + char *buf; + buf = console_gets(); + console_schedule_cmd(buf, 1); +} diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/console.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/console.h new file mode 100644 index 000000000..79bfedb88 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/console.h @@ -0,0 +1,46 @@ +/*! \page License + * Copyright (C) 2009, H&D Wireless AB All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of H&D Wireless AB may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY H&D WIRELESS AB ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND + * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef CONSOLE_H +#define CONSOLE_H + + +typedef enum { + CMD_DONE, + CMD_INPROGRESS +} cmd_state_t; + +typedef cmd_state_t (*cmd_cb_t)(int argc, char* argv[], void* ctx); + +void console_init(void); +void console_init_silent(void); +char* console_gets(void); +int console_add_cmd(const char* str, cmd_cb_t cb, void* ctx); +int console_schedule_cmd(char *cmd, int interactive); +void console_poll(void); + +#endif diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/debug.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/debug.h new file mode 100644 index 000000000..154b79984 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/debug.h @@ -0,0 +1,191 @@ +//*********************************************/ +// +// File: debug.h +// +// Author: Domenico La Fauci +// +//********************************************/ + + +#ifndef Debug_H +#define Debug_H + +#include +#include + +#define INFO_INIT_FLAG 1 +#define INFO_TCP_FLAG 2 +#define INFO_SPI_FLAG 4 +#define INFO_CM_FLAG 8 +#define INFO_UTIL_FLAG 16 + +#define INFO_D (1<<0xD) // Debug +#define INFO_E (1<<0xE) // Error +#define INFO_WARN_FLAG (1<<0xF) // Warning +#define DEFAULT_INFO_FLAG 0 //INFO_WARN_FLAG + +#ifdef _DEBUG_ +#define DEFINE_DEBUG_VARIABLES() \ +uint16_t enableDebug = DEFAULT_INFO_FLAG | INFO_WARN_FLAG; \ +uint16_t verboseDebug = 0; \ +uint16_t dumpDebug = 0; \ +uint16_t pollDebug = 0; +#else +#define DEFINE_DEBUG_VARIABLES() \ +uint16_t enableDebug = DEFAULT_INFO_FLAG; \ +uint16_t verboseDebug = 0; \ +uint16_t dumpDebug = 0; \ +uint16_t pollDebug = 0; +#endif + +#define INIT_DEBUG_VARIABLES() \ + enableDebug = DEFAULT_INFO_FLAG | INFO_WARN_FLAG; \ + verboseDebug = 0; \ + dumpDebug = 0; pollDebug = 0; + + +#define PRINT_DEBUG_VARIABLES() \ + printk("Debug enabled: 0x%x\n", enableDebug); \ + printk("Verbose enabled: 0x%x\n", verboseDebug); \ + printk("Dump enabled: 0x%x\n", dumpDebug); \ + printk("POoll enabled: 0x%x\n", pollDebug); + +#define TURNON_DEBUG_VARIABLES() \ + enableDebug = 0xff; + +extern uint16_t enableDebug; +extern uint16_t verboseDebug; +extern uint16_t dumpDebug; +extern uint16_t pollDebug; + +#define ENABLE_DEBUG_LEVEL 1 +#define VERBOSE_DEBUG_LEVEL 2 +#define DUMP_DEBUG_LEVEL 3 +#define POLL_DEBUG_LEVEL 4 + +#define CHECK_DEBUG(VAR, LEVEL, LEVEL_LIMIT, FLAG) \ + do{ \ + if (LEVEL >= LEVEL_LIMIT) VAR |= FLAG; \ + else VAR &= ~FLAG; \ + }while(0); + +#define CHECK_ENA_DEBUG(LEVEL, FLAG) \ + CHECK_DEBUG(enableDebug, LEVEL, ENABLE_DEBUG_LEVEL, FLAG) +#define CHECK_VERB_DEBUG(LEVEL, FLAG) \ + CHECK_DEBUG(verboseDebug, LEVEL, VERBOSE_DEBUG_LEVEL, FLAG) +#define CHECK_DUMP_DEBUG(LEVEL, FLAG) \ + CHECK_DEBUG(dumpDebug, LEVEL, DUMP_DEBUG_LEVEL, FLAG) +#define CHECK_POLL_DEBUG(LEVEL, FLAG) \ + CHECK_DEBUG(pollDebug, LEVEL, POLL_DEBUG_LEVEL, FLAG) + + +#define CHECK_DEBUG_LEVEL(LEVEL, INFO_FLAG) \ + CHECK_ENA_DEBUG(LEVEL, INFO_FLAG) \ + CHECK_VERB_DEBUG(LEVEL, INFO_FLAG) \ + CHECK_DUMP_DEBUG(LEVEL, INFO_FLAG) \ + CHECK_POLL_DEBUG(LEVEL, INFO_FLAG) + +#ifdef _INFO_DEBUG_ +#define PRINT_DEBUG(msg, args...) do { \ + printk("[%s] " msg , __func__ , ##args ); \ +} while (0) + +#define INFO_DEBUG(msg, args...) do { \ + printk("I-[%s] " msg , __func__ , ##args ); \ +} while (0) + +#define WARN_DEBUG(msg, args...) do { \ + printk("W-[%s] " msg , __func__ , ##args ); \ +} while (0) + +#else +do { }while(0); +#endif + +#define IF_DEBUG(X,Y) do { \ +if (enableDebug & INFO_##X##_FLAG) \ +Y; \ +} while (0) + +#define IF_DEBUG_VER(X,Y) do { \ +if (verboseDebug & INFO_##X##_FLAG) \ +Y; \ +} while (0) + +#define IF_DEBUG_DUMP(X,Y) do { \ +if (dumpDebug & INFO_##X##_FLAG) \ +Y; \ +} while (0) + +#define IF_DEBUG_POLL(X,Y) do { \ +if (pollDebug & INFO_##X##_FLAG) {\ +Y; \ +}} while (0) + + + +#define IF_WARN(Y) IF_DEBUG(WARN,Y) +#define IF_WARN_VER(Y) IF_DEBUG_VER(WARN,Y) +#define IF_TCP(Y) IF_DEBUG(TCP,Y) +#define IF_TCP_VER(Y) IF_DEBUG_VER(TCP,Y) +#define IF_TCP_POLL(Y) IF_DEBUG_POLL(TCP,Y) +#define IF_TCP_DUMP(Y) IF_DEBUG_DUMP(TCP,Y) +#define IF_SPI(Y) IF_DEBUG(SPI,Y) +#define IF_SPI_VER(Y) IF_DEBUG_VER(SPI,Y) +#define IF_SPI_DUMP(Y) IF_DEBUG_DUMP(SPI,Y) +#define IF_SPI_POLL(Y) IF_DEBUG_POLL(SPI,Y) +#define IF_UTIL(Y) IF_DEBUG(UTIL,Y) +#define IF_UTIL_VER(Y) IF_DEBUG_VER(UTIL,Y) + +#define WARN(msg, args...) IF_DEBUG(WARN,WARN_DEBUG(msg, ##args)) +#define WARN_VER(msg, args...) IF_DEBUG_VER(WARN,WARN_DEBUG(msg, ##args)) +#define WARN_POLL(msg, args...) IF_DEBUG_POLL(WARN,WARN_DEBUG(msg, ##args)) +#if 0 // disable to reduce the size of binary +#define INFO_INIT(msg, args...) IF_DEBUG(INIT,PRINT_DEBUG(msg, ##args)) +#define INFO_INIT_VER(msg, args...) IF_DEBUG_VER(INIT,PRINT_DEBUG(msg, ##args)) +#else +#define INFO_INIT(msg, args...) +#define INFO_INIT_VER(msg, args...) +#endif +#define INFO_TCP(msg, args...) IF_DEBUG(TCP,PRINT_DEBUG(msg, ##args)) +#define INFO_TCP_VER(msg, args...) IF_DEBUG_VER(TCP,PRINT_DEBUG(msg, ##args)) +#define INFO_TCP_DUMP(msg, args...) IF_DEBUG_DUMP(TCP,PRINT_DEBUG(msg, ##args)) +#define INFO_TCP_POLL(msg, args...) IF_DEBUG_POLL(TCP,PRINT_DEBUG(msg, ##args)) +#define INFO_SPI(msg, args...) IF_DEBUG(SPI,PRINT_DEBUG(msg, ##args)) +#define INFO_SPI_VER(msg, args...) IF_DEBUG_VER(SPI,PRINT_DEBUG(msg, ##args)) +#define INFO_SPI_DUMP(msg, args...) IF_DEBUG_DUMP(SPI,PRINT_DEBUG(msg, ##args)) +#define INFO_SPI_POLL(msg, args...) IF_DEBUG_POLL(SPI,PRINT_DEBUG(msg, ##args)) +#define INFO_UTIL(msg, args...) IF_DEBUG(UTIL,PRINT_DEBUG(msg, ##args)) +#define INFO_UTIL_VER(msg, args...) IF_DEBUG_VER(UTIL,PRINT_DEBUG(msg, ##args)) +#define CM_DPRINTF(msg, args...) IF_DEBUG(CM,PRINT_DEBUG(msg, ##args)) + +extern void dump(char* _buf, uint16_t _count); + +#define _DUMP(BUF, COUNT) do { \ + printk("[%s]: ", __func__); \ + dump((char*)BUF, COUNT); \ + } while (0) + +#ifdef _APP_DEBUG_ +#define DUMP(BUF, COUNT) _DUMP(BUF, COUNT) +#else +#define DUMP(BUF, COUNT) do {} while (0) +#endif +#endif + +#define DUMP_TCP(BUF, COUNT) IF_TCP_DUMP(_DUMP(BUF, COUNT)) +#define DUMP_SPI(BUF, COUNT) IF_SPI_DUMP(_DUMP(BUF, COUNT)) + +#define DUMP_SPI_CMD(BUF) do { \ + if (dumpDebug & INFO_SPI_FLAG) { \ + int i = 0; \ + for (; i < CMD_MAX_LEN; ++i) \ + { \ + printk("0x%x ", BUF[i]); \ + if (BUF[i] == END_CMD) \ + break; \ + } \ + printk("\n"); \ + } \ +}while(0); + diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/fw_download.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/fw_download.h new file mode 100644 index 000000000..e36214f76 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/fw_download.h @@ -0,0 +1,38 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*! \page License + * Copyright (C) 2009, H&D Wireless AB All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of H&D Wireless AB may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY H&D WIRELESS AB ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND + * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef FW_DOWNLOAD_H +#define FW_DOWNLOAD_H + +#include +#include + +int fw_download_init(void); +size_t fw_read_cb(void *ctx, const uint8_t** buf, size_t offset, size_t len); +#endif diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/fw_download_extflash.c b/external/arduino/avr/firmwares/wifishield/wifiHD/src/fw_download_extflash.c new file mode 100644 index 000000000..d679271f2 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/fw_download_extflash.c @@ -0,0 +1,82 @@ +/*! \page License + * Copyright (C) 2009, H&D Wireless AB All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of H&D Wireless AB may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY H&D WIRELESS AB ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND + * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#include +#include +#include +#include +#include + +int fw_download_init(void) +{ + nvram_init(); + return 0; +} + +#define BUF_SIZE 512 + + +size_t fw_read_cb(void* ctx, + const uint8_t** buf, + size_t offset, + size_t len) +{ + static uint8_t* fw_buf = NULL; + size_t rlen; + /* when firmware download is completed, this function will be + * invoked one additional time with buf set to NULL. we can + * free the firmware buffer at this time since it's no longer + * needed. + */ + if (NULL == buf) { + if (fw_buf) { + free(fw_buf); + fw_buf = NULL; + } + return 0; + } + + /* first call? then initialize flash and allocate a buffer to hold + * firmware data. + */ + if (fw_buf == NULL) { + fw_buf = malloc(BUF_SIZE); + + if (fw_buf == NULL) { + printk("could not allocate firmware buffer\n"); + return 0; + } + } + /* read at most a full buffer */ + rlen = len > BUF_SIZE ? BUF_SIZE : len; + + /* read data and update output parameters */ + nvram_read(offset, fw_buf, rlen); + *buf = fw_buf; + + return rlen; +} diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/license.txt b/external/arduino/avr/firmwares/wifishield/wifiHD/src/license.txt new file mode 100644 index 000000000..e57439f37 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/license.txt @@ -0,0 +1,42 @@ + Copyright (C) 2009, H&D Wireless AB All rights reserved. + + The license to use this software in whole and in part and to + redistribute it in any form follows with the WiFi HW module from H&D + Wireless and is granted under the following restrictions: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + 3. The name of H&D Wireless AB may not be used to endorse or promote + products derived from this software without specific prior written + permission. + + 4. The software may only be used together with hardware from H&D + Wireless all other use is prohibited. + + 5. The license to use and redistribute the software is granted + together with the purchase of a hardware platform on a one to one + basis + + 6. The binary code may not be reversed engineered or by other means + copied to circumvent this license. + + THIS SOFTWARE IS PROVIDED BY H&D WIRELESS AB ``AS IS'' AND ANY + EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT + SHALL HD WIRELESS AB BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + OF THE POSSIBILITY OF SUCH DAMAGE. + + For more information regarding this software license Contact H&D + Wireless AB (support@hd-wireless.se). diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/lwip_setup.c b/external/arduino/avr/firmwares/wifishield/wifiHD/src/lwip_setup.c new file mode 100644 index 000000000..bfa8c090a --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/lwip_setup.c @@ -0,0 +1,145 @@ +/*! \page License + * Copyright (C) 2009, H&D Wireless AB All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of H&D Wireless AB may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY H&D WIRELESS AB ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND + * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/*! + * \file lwIP setup code + * + * \brief Collects the lwIP setup code that an application has to + * execute in a standalone environment. + * + * \author H&D Wireless AB \n + * + */ + +#include +#include +#include +#include +#include +#include +#include + +#include "lwip_setup.h" +#include "lwip/dns.h" + + +/** + * + */ +static void +tcp_tmr_cb(void *ctx) +{ + tcp_tmr(); +} + +/** + * + */ +static void +ip_tmr_cb(void *ctx) +{ + ip_reass_tmr(); +} + +/** + * + */ +static void +dns_tmr_cb(void *ctx) +{ + dns_tmr(); +} + +/** + * + */ +static void +etharp_tmr_cb(void *ctx) +{ + etharp_tmr(); +} + + +/** + * + */ +static void +dhcp_fine_tmr_cb(void *ctx) +{ + dhcp_fine_tmr(); +} + +/** + * + */ +static void +dhcp_coarse_tmr_cb(void *ctx) +{ + dhcp_coarse_tmr(); +} + +int start_ip_stack(struct net_cfg *cfg, + struct ip_addr ipaddr, + struct ip_addr netmask, + struct ip_addr gw) { + + if (cfg->dhcp_enabled) { + IP4_ADDR(&gw, 0,0,0,0); + IP4_ADDR(&ipaddr, 0,0,0,0); + IP4_ADDR(&netmask, 0,0,0,0); + } + + /* add wl to lwip interface list and set as default */ + cfg->netif = netif_add(cfg->netif, + &ipaddr, + &netmask, + &gw, + NULL, + wlif_init, /* init */ + ethernet_input /* handles ARP and IP packets */); + + if (cfg->netif == NULL) + return -1; + netif_set_default(cfg->netif); + + /* register lwip timer callbacks for tcp, arp and dhcp protocols */ + timer_sched_timeout_cb(5000, TIMEOUT_PERIODIC, + etharp_tmr_cb, NULL); + timer_sched_timeout_cb(TCP_TMR_INTERVAL, TIMEOUT_PERIODIC, + tcp_tmr_cb, NULL); + timer_sched_timeout_cb(DHCP_FINE_TIMER_MSECS, TIMEOUT_PERIODIC, + dhcp_fine_tmr_cb, NULL); + timer_sched_timeout_cb(DHCP_COARSE_TIMER_MSECS, TIMEOUT_PERIODIC, + dhcp_coarse_tmr_cb, NULL); + timer_sched_timeout_cb(IP_TMR_INTERVAL, TIMEOUT_PERIODIC, + ip_tmr_cb, NULL); + timer_sched_timeout_cb(DNS_TMR_INTERVAL, TIMEOUT_PERIODIC, + dns_tmr_cb, NULL); + + return 1; +} diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/lwip_setup.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/lwip_setup.h new file mode 100644 index 000000000..7edf2b579 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/lwip_setup.h @@ -0,0 +1,30 @@ +#ifndef _LWIP_SETUP_H +#define _LWIP_SETUP_H + +#define INIT_IP_CONFIG 0xff +#define STATIC_IP_CONFIG 0 +#define DYNAMIC_IP_CONFIG 1 + +struct net_cfg { + struct netif *netif; /* lwip network interface */ + uint8_t dhcp_enabled; + uint8_t dhcp_running; +}; + +struct ctx_server { + struct net_cfg net_cfg; + uint8_t wl_init_complete; +}; + +/*! Start the IP stack. + * If cfg->netif must have been allocated and lwip_init() + * must have been called before this function is called + * (since the IP stack may have to be polled before this + * function can be called). + */ +int start_ip_stack(struct net_cfg *cfg, + struct ip_addr ipaddr, + struct ip_addr netmask, + struct ip_addr gw); + +#endif /* _LWIP_SETUP_H */ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/lwipopts.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/lwipopts.h new file mode 100644 index 000000000..7b08b8489 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/lwipopts.h @@ -0,0 +1,450 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/** + * @file + * + * lwIP Options Configuration + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIPOPTS_H__ +#define __LWIPOPTS_H__ + +#include "wl_api.h" +#include + +#ifndef BOARD +#error "BOARD must be defined" +#endif + +/* + ----------------------------------------------- + ---------- Platform specific locking ---------- + ----------------------------------------------- +*/ + +/** + * NO_SYS==1: Provides VERY minimal functionality. Otherwise, + * use lwIP facilities. + */ +#define NO_SYS 1 + + +/* + ------------------------------------ + ---------- Memory options ---------- + ------------------------------------ +*/ +/** + * MEM_ALIGNMENT: should be set to the alignment of the CPU + * 4 byte alignment -> #define MEM_ALIGNMENT 4 + * 2 byte alignment -> #define MEM_ALIGNMENT 2 + */ +#define MEM_ALIGNMENT 4 + +/** + * MEM_SIZE: the size of the heap memory. If the application will send + * a lot of data that needs to be copied, this should be set high. + */ +#define MEM_SIZE 16000 + + +/* + ------------------------------------------------ + ---------- Internal Memory Pool Sizes ---------- + ------------------------------------------------ +*/ +/** + * MEMP_NUM_PBUF: the number of memp struct pbufs (used for PBUF_ROM and PBUF_REF). + * If the application sends a lot of data out of ROM (or other static memory), + * this should be set high. + */ +#if BOARD == EVK1101 /* Reduced RAM */ + #define MEMP_NUM_PBUF 4 +#else + #define MEMP_NUM_PBUF 30 +#endif +/** + * MEMP_NUM_RAW_PCB: Number of raw connection PCBs + * (requires the LWIP_RAW option) + */ +#define MEMP_NUM_RAW_PCB 4 + +/** + * MEMP_NUM_UDP_PCB: the number of UDP protocol control blocks. One + * per active UDP "connection". + * (requires the LWIP_UDP option) + */ +#define MEMP_NUM_UDP_PCB 4 + +/** + * MEMP_NUM_TCP_PCB: the number of simulatenously active TCP connections. + * (requires the LWIP_TCP option) + */ +#define MEMP_NUM_TCP_PCB 4 + +/** + * MEMP_NUM_TCP_PCB_LISTEN: the number of listening TCP connections. + * (requires the LWIP_TCP option) + */ +#define MEMP_NUM_TCP_PCB_LISTEN 2 + +/** + * MEMP_NUM_TCP_SEG: the number of simultaneously queued TCP segments. + * (requires the LWIP_TCP option) + */ +#if BOARD == EVK1101 /* Reduced RAM */ + #define MEMP_NUM_TCP_SEG 2 +#else + #define MEMP_NUM_TCP_SEG 32 +#endif + +/** + * MEMP_NUM_ARP_QUEUE: the number of simulateously queued outgoing + * packets (pbufs) that are waiting for an ARP request (to resolve + * their destination address) to finish. + * (requires the ARP_QUEUEING option) + */ +#define MEMP_NUM_ARP_QUEUE 2 + +/** + * MEMP_NUM_SYS_TIMEOUT: the number of simulateously active timeouts. + * (requires NO_SYS==0) + */ +#define MEMP_NUM_SYS_TIMEOUT 0 + +/** + * MEMP_NUM_NETBUF: the number of struct netbufs. + * (only needed if you use the sequential API, like api_lib.c) + */ +#define MEMP_NUM_NETBUF 0 + +/** + * MEMP_NUM_NETCONN: the number of struct netconns. + * (only needed if you use the sequential API, like api_lib.c) + */ +#define MEMP_NUM_NETCONN 0 + +/** + * MEMP_NUM_TCPIP_MSG_API: the number of struct tcpip_msg, which are used + * for callback/timeout API communication. + * (only needed if you use tcpip.c) + */ +#define MEMP_NUM_TCPIP_MSG_API 0 + +/** + * MEMP_NUM_TCPIP_MSG_INPKT: the number of struct tcpip_msg, which are used + * for incoming packets. + * (only needed if you use tcpip.c) + */ +#define MEMP_NUM_TCPIP_MSG_INPKT 0 + +/** + * PBUF_POOL_SIZE: the number of buffers in the pbuf pool. + */ +#if BOARD == EVK1101 /* Reduced RAM */ + #define PBUF_POOL_SIZE 2 +#else + #define PBUF_POOL_SIZE 32 +#endif +/* + --------------------------------- + ---------- ARP options ---------- + --------------------------------- +*/ +/** + * LWIP_ARP==1: Enable ARP functionality. + */ +#define LWIP_ARP 1 + +/* + -------------------------------- + ---------- IP options ---------- + -------------------------------- +*/ +/** + * IP_FORWARD==1: Enables the ability to forward IP packets across network + * interfaces. If you are going to run lwIP on a device with only one network + * interface, define this to 0. + */ +#define IP_FORWARD 0 + +/** + * IP_OPTIONS: Defines the behavior for IP options. + * IP_OPTIONS==0_ALLOWED: All packets with IP options are dropped. + * IP_OPTIONS==1_ALLOWED: IP options are allowed (but not parsed). + */ +#define IP_OPTIONS_ALLOWED 1 + +/** + * IP_REASSEMBLY==1: Reassemble incoming fragmented IP packets. Note that + * this option does not affect outgoing packet sizes, which can be controlled + * via IP_FRAG. + */ +#define IP_REASSEMBLY 1 + +/** + * IP_FRAG==1: Fragment outgoing IP packets if their size exceeds MTU. Note + * that this option does not affect incoming packet sizes, which can be + * controlled via IP_REASSEMBLY. + */ +#define IP_FRAG 1 + +/** + * IP_REASS_MAXAGE: Maximum time (in multiples of IP_TMR_INTERVAL - so seconds, normally) + * a fragmented IP packet waits for all fragments to arrive. If not all fragments arrived + * in this time, the whole packet is discarded. + */ +#define IP_REASS_MAXAGE 3 + +/** + * IP_REASS_MAX_PBUFS: Total maximum amount of pbufs waiting to be reassembled. + * Since the received pbufs are enqueued, be sure to configure + * PBUF_POOL_SIZE > IP_REASS_MAX_PBUFS so that the stack is still able to receive + * packets even if the maximum amount of fragments is enqueued for reassembly! + */ +#if BOARD == EVK1101 /* Reduced RAM */ + #define IP_REASS_MAX_PBUFS PBUF_POOL_SIZE + #define MEMP_NUM_REASSDATA PBUF_POOL_SIZE-1 +#else + #define IP_REASS_MAX_PBUFS 10 +#endif + +/** + * IP_FRAG_USES_STATIC_BUF==1: Use a static MTU-sized buffer for IP + * fragmentation. Otherwise pbufs are allocated and reference the original + * packet data to be fragmented. + */ +#define IP_FRAG_USES_STATIC_BUF 0 + +/** + * IP_DEFAULT_TTL: Default value for Time-To-Live used by transport layers. + */ +#define IP_DEFAULT_TTL 255 + +/* + ---------------------------------- + ---------- ICMP options ---------- + ---------------------------------- +*/ +/** + * LWIP_ICMP==1: Enable ICMP module inside the IP stack. + * Be careful, disable that make your product non-compliant to RFC1122 + */ +#define LWIP_ICMP 1 + +/** + * ICMP_TTL: Default value for Time-To-Live used by ICMP packets. + */ +#define ICMP_TTL (IP_DEFAULT_TTL) + +/* + --------------------------------- + ---------- RAW options ---------- + --------------------------------- +*/ +/** + * LWIP_RAW==1: Enable application layer to hook into the IP layer itself. + */ +#define LWIP_RAW 1 + +/* + ---------------------------------- + ---------- DHCP options ---------- + ---------------------------------- +*/ +/** + * LWIP_DHCP==1: Enable DHCP module. + */ +#define LWIP_DHCP 1 + +/* + ------------------------------------ + ---------- AUTOIP options ---------- + ------------------------------------ +*/ +/** + * LWIP_AUTOIP==1: Enable AUTOIP module. + */ +#define LWIP_AUTOIP 0 + +/* + ---------------------------------- + ---------- SNMP options ---------- + ---------------------------------- +*/ +/** + * LWIP_SNMP==1: Turn on SNMP module. UDP must be available for SNMP + * transport. + */ +#define LWIP_SNMP 0 +#define SNMP_PRIVATE_MIB 0 + +/* + ---------------------------------- + ---------- IGMP options ---------- + ---------------------------------- +*/ +/** + * LWIP_IGMP==1: Turn on IGMP module. + */ +#define LWIP_IGMP 0 + +/* + ---------------------------------- + ---------- DNS options ----------- + ---------------------------------- +*/ +/** + * LWIP_DNS==1: Turn on DNS module. UDP must be available for DNS + * transport. + */ +#define LWIP_DNS 1 + +/* + --------------------------------- + ---------- UDP options ---------- + --------------------------------- +*/ +/** + * LWIP_UDP==1: Turn on UDP. + */ +#define LWIP_UDP 1 + +/** + * LWIP_UDPLITE==1: Turn on UDP-Lite. (Requires LWIP_UDP) + */ +#define LWIP_UDPLITE 0 + +/** + * UDP_TTL: Default Time-To-Live value. + */ +#define UDP_TTL (IP_DEFAULT_TTL) + +/* + --------------------------------- + ---------- TCP options ---------- + --------------------------------- +*/ +/** + * LWIP_TCP==1: Turn on TCP. + */ +#define LWIP_TCP 1 + +/* + ---------------------------------- + ---------- Pbuf options ---------- + ---------------------------------- +*/ +/** + * PBUF_LINK_HLEN: the number of bytes that should be allocated for a + * link level header. The default is 14, the standard value for + * Ethernet. + */ +#define PBUF_LINK_HLEN (14 + ETH_PAD_SIZE) + +/* + ------------------------------------ + ---------- LOOPIF options ---------- + ------------------------------------ +*/ +/** + * LWIP_HAVE_LOOPIF==1: Support loop interface (127.0.0.1) and loopif.c + */ +#define LWIP_HAVE_LOOPIF 1 +#define LWIP_LOOPIF_MULTITHREADING 0 + +/* + ---------------------------------------------- + ---------- Sequential layer options ---------- + ---------------------------------------------- +*/ + +/** + * LWIP_NETCONN==1: Enable Netconn API (require to use api_lib.c) + */ +#define LWIP_NETCONN 0 + +/* + ------------------------------------ + ---------- Socket options ---------- + ------------------------------------ +*/ +/** + * LWIP_SOCKET==1: Enable Socket API (require to use sockets.c) + */ +#define LWIP_SOCKET 0 + +/* + ---------------------------------------- + ---------- Statistics options ---------- + ---------------------------------------- +*/ +/** + * LWIP_STATS==1: Enable statistics collection in lwip_stats. + */ +#define LWIP_STATS 1 +#define LINK_STATS 1 + +/* Misc */ +#define LWIP_NETIF_LINK_CALLBACK 1 +#define LWIP_NETIF_STATUS_CALLBACK 1 +#define LWIP_TIMEVAL_PRIVATE 0 + +#undef DHCP_DOES_ARP_CHECK + +#if 0 +#define LWIP_DEBUG 1 +//#define NETIF_DEBUG LWIP_DBG_ON +//#define DHCP_DEBUG LWIP_DBG_ON +//#define ICMP_DEBUG LWIP_DBG_ON +//#define TCP_DEBUG LWIP_DBG_ON +//#define TCP_RTO_DEBUG LWIP_DBG_ON +//#define IP_DEBUG LWIP_DBG_ON +//#define TCP_CWND_DEBUG LWIP_DBG_ON +//#define ETHARP_DEBUG LWIP_DBG_ON +#define PBUF_DEBUG LWIP_DBG_ON +//#define TCP_INPUT_DEBUG LWIP_DBG_ON +//#define TCP_OUTPUT_DEBUG LWIP_DBG_ON +#endif + +#define ETH_PAD_SIZE WL_HEADER_SIZE /* size of wifiengine header */ +#define MEM_LIBC_MALLOC 1 + +#define TCP_MSS 512 +#if BOARD == EVK1101 /* Reduced RAM */ + #define TCP_SND_BUF (1460*1) /* MTU (1500) - IP - TCP hdrs == 1460 */ +#else + #define TCP_SND_BUF 4096 +#endif +#endif /* __LWIPOPTS_H__ */ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/main.c b/external/arduino/avr/firmwares/wifishield/wifiHD/src/main.c new file mode 100644 index 000000000..fffb34e48 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/main.c @@ -0,0 +1,454 @@ +/* + * main.c + * + * Created on: May 27, 2010 + * Author: mlf by Metodo2 srl + */ + +//#define _TEST_SPI_ + +#include +#include "board.h" +#include "gpio.h" + +#include +#include "wl_api.h" +#include "wl_cm.h" + +#include "lwip/init.h" +#include "lwip/dhcp.h" +#include "lwip/dns.h" +#include "lwip/tcp.h" +#include "netif/etharp.h" +#include "netif/wlif.h" + +#include "board_init.h" +#include "trace.h" + +#include "timer.h" +#include "util.h" +#include "cmd_wl.h" +#include "ping.h" +#include "ard_tcp.h" +#include "spi.h" +#include "ard_spi.h" +#include "delay.h" +#include "tc.h" +#include "debug.h" +#include "ard_utils.h" +#include + +/* FIRMWARE version */ +const char* fwVersion = "1.1.0"; + +#if BOARD == ARDUINO +#if !defined(DATAFLASH) +#include "wl_fw.h" + +int fw_download_init(void) { return 0;} +void fw_download_cb(void* ctx, uint8_t** buf, uint32_t* len) +{ + //printk("Fw download not available!\n"); + /* remember accross different calls */ + static uint8_t* _fw_buf = (uint8_t*)&fw_buf[0]; + static uint32_t offset = 0; + + /* when firmware download is completed, this function will be invoked + * on additional time with the input value of len set to 0. we can free + * the firmware buffer at this time since it's no longer needed. + */ + if (*len == 0) { + return; + } + + /* decide how much to read. we know *len bytes remains, but we only have + * room for SECTOR_SIEZ bytes in our buffer (fw_buf) + */ + uint32_t fw_len = *len; + + *buf = (_fw_buf+offset); + *len = fw_len; + + /* we need to know where to start reading upon next call */ + offset += fw_len; + +} +#else +#include "fw_download.h" +#endif +#endif + +bool ifStatus = false; +bool scanNetCompleted = false; + +static bool initSpiComplete = false; + +// variable used as enable flag for debug prints +DEFINE_DEBUG_VARIABLES(); + +/** + * + */ +static void +wl_cm_scan_cb(void* ctx) +{ + INFO_INIT("Scan Completed!\n"); + scanNetCompleted=true; +} + +/** + * + */ +static void +wl_cm_conn_cb(struct wl_network_t* net, void* ctx) +{ + struct ctx_server* hs = ctx; + + LINK_LED_ON(); + + INFO_INIT("Connection cb...\n"); + + printk("link up, connected to \"%s\"\n", ssid2str(&net->ssid)); + if ( hs->net_cfg.dhcp_enabled == DYNAMIC_IP_CONFIG ) { + INFO_INIT("Start DHCP...\n"); + printk("requesting dhcp ... "); + int8_t result = dhcp_start(hs->net_cfg.netif); + printk((result==ERR_OK)?"OK\n":"FAILED\n"); + hs->net_cfg.dhcp_running = 1; + } + else { + netif_set_up(hs->net_cfg.netif); + } + + INFO_INIT("Start DNS...\n"); + dns_init(); +} + + +/** + * + */ +static void +wl_cm_disconn_cb(void* ctx) +{ + struct ctx_server* hs = ctx; + + LINK_LED_OFF(); + INFO_INIT("Disconnection cb...\n"); + + if (hs->net_cfg.dhcp_running) { + printk("link down, release dhcp\n"); + dhcp_release(hs->net_cfg.netif); + dhcp_stop(hs->net_cfg.netif); + hs->net_cfg.dhcp_running = 0; + } else { + printk("link down\n"); + netif_set_down(hs->net_cfg.netif); + } + + set_result_cmd(WL_FAILURE); +} + +#if 0 +static void wl_cm_err_cb(void* ctx) +{ + int err = *(int*)ctx; + WARN("Error: %d\n", err); + set_result_cmd(err); +} +#endif + +/** + * + */ +static void +ip_status_cb(struct netif* netif) +{ + INFO_INIT("IP status cb...\n"); + if (netif_is_up(netif)) { + set_result_cmd(WL_SUCCESS); + printk("bound to %s\n", ip2str(netif->ip_addr)); + ifStatus = true; + }else{ + ifStatus = false; + closeConnections(); + WARN("Interface not up!\n"); + } +} + + +/** + * + */ +void +led_init(void) +{ + gpio_enable_gpio_pin(LED0_GPIO); + gpio_enable_gpio_pin(LED1_GPIO); + gpio_enable_gpio_pin(LED2_GPIO); + LINK_LED_OFF(); + ERROR_LED_OFF(); + DATA_LED_OFF(); +} + + +void tc_init(void) +{ + // The timer/counter instance and channel number are used in several functions. + // It's defined as local variable for ease-of-use causes and readability. + volatile avr32_tc_t *tc = WIFI_TC; + + // Options for waveform genration. + tc_waveform_opt_t waveform_opt = + { + .channel = WIFI_TC_CHANNEL_ID, // Channel selection. + + .bswtrg = TC_EVT_EFFECT_NOOP, // Software trigger effect on TIOB. + .beevt = TC_EVT_EFFECT_NOOP, // External event effect on TIOB. + .bcpc = TC_EVT_EFFECT_NOOP, // RC compare effect on TIOB. + .bcpb = TC_EVT_EFFECT_NOOP, // RB compare effect on TIOB. + + .aswtrg = TC_EVT_EFFECT_NOOP, // Software trigger effect on TIOA. + .aeevt = TC_EVT_EFFECT_NOOP, // External event effect on TIOA. + .acpc = TC_EVT_EFFECT_TOGGLE, // RC compare effect on TIOA: toggle. + .acpa = TC_EVT_EFFECT_TOGGLE, // RA compare effect on TIOA: toggle (other possibilities are none, set and clear). + + .wavsel = TC_WAVEFORM_SEL_UP_MODE_RC_TRIGGER,// Waveform selection: Up mode with automatic trigger(reset) on RC compare. + .enetrg = FALSE, // External event trigger enable. + .eevt = TC_EXT_EVENT_SEL_TIOB_INPUT, // External event selection. + .eevtedg = TC_SEL_NO_EDGE, // External event edge selection. + .cpcdis = FALSE, // Counter disable when RC compare. + .cpcstop = FALSE, // Counter clock stopped with RC compare. + + .burst = TC_BURST_NOT_GATED, // Burst signal selection. + .clki = TC_CLOCK_RISING_EDGE, // Clock inversion. + .tcclks = TC_CLOCK_SOURCE_TC2 // Internal source clock 3, connected to fPBA / 2. + }; + + // Assign I/O to timer/counter channel pin & function. + gpio_enable_module_pin(WIFI_TC_CHANNEL_PIN, WIFI_TC_CHANNEL_FUNCTION); + + // Initialize the timer/counter. + tc_init_waveform(tc, &waveform_opt); // Initialize the timer/counter waveform. + + // Set the compare triggers. + tc_write_ra(tc, WIFI_TC_CHANNEL_ID, 0x01A4); // Set RA value. + tc_write_rc(tc, WIFI_TC_CHANNEL_ID, 0x0348); // Set RC value. + + // Start the timer/counter. + tc_start(tc, WIFI_TC_CHANNEL_ID); + +} + +/** + * + */ +void +poll(struct ctx_server* hs) +{ + /* this will trigger any scheduled timer callbacks */ + timer_poll(); + + /* handle console input */ + console_poll(); + + /* wl api 'tick' */ + wl_tick(timer_get_ms()); + + /* lwip driver poll */ + wlif_poll(hs->net_cfg.netif); + + if (initSpiComplete) spi_poll(hs->net_cfg.netif); + +#ifdef WITH_GUI + gui_exec(timer_get_ms()); +#endif +} + +void initShell(void* ctx) +{ + /* initialize shell */ + INFO_INIT("Shell init...\n"); + console_init(); + console_add_cmd("scan", cmd_scan, NULL); + console_add_cmd("connect", cmd_connect, NULL); + console_add_cmd("setkey", cmd_setkey, NULL); + console_add_cmd("status", cmd_status, ctx); + console_add_cmd("debug", cmd_debug, NULL); + console_add_cmd("dumpBuf", cmd_dumpBuf, NULL); + console_add_cmd("ipconfig", cmd_set_ip, ctx); +#ifdef ADD_CMDS + console_add_cmd("powersave", cmd_power, NULL); + console_add_cmd("psconf", cmd_psconf, NULL); +#endif +#ifdef PING_CMD + console_add_cmd("ping", cmd_ping, NULL); +#endif + console_add_cmd("ttcp", cmd_ttcp, NULL); +#ifdef WITH_WPA + console_add_cmd("wpass", cmd_setpass, NULL); + console_add_cmd("dpass", cmd_delpass, NULL); +#endif +#ifdef _SPI_STATS_ + console_add_cmd("spiStat", cmd_statSpi, NULL); + console_add_cmd("resetSpiStat", cmd_resetStatSpi, NULL); +#endif +#ifdef _DNS_CMD_ + console_add_cmd("getHost", cmd_gethostbyname, NULL); + console_add_cmd("setDNS", cmd_setDnsServer, NULL); +#endif + console_add_cmd("startSrv", cmd_startSrv, NULL); + console_add_cmd("startCli", cmd_startCli, NULL); + console_add_cmd("sendUdp", cmd_sendUdpData, NULL); + +} + +/** + * + */ +void +wl_init_complete_cb(void* ctx) +{ + struct ctx_server *hs = ctx; + struct ip_addr ipaddr, netmask, gw; + wl_err_t wl_status; + + if (hs->net_cfg.dhcp_enabled == INIT_IP_CONFIG) + { + IP4_ADDR(&gw, 0,0,0,0); + IP4_ADDR(&ipaddr, 0,0,0,0); + IP4_ADDR(&netmask, 0,0,0,0); + + /* default is dhcp enabled */ + hs->net_cfg.dhcp_enabled = DYNAMIC_IP_CONFIG; + } + + start_ip_stack(&hs->net_cfg, + ipaddr, + netmask, + gw); + netif_set_status_callback(hs->net_cfg.netif, ip_status_cb); + + INFO_INIT("Starting CM...\n"); + /* start connection manager */ + wl_status = wl_cm_init(wl_cm_scan_cb, wl_cm_conn_cb, wl_cm_disconn_cb, hs); + ASSERT(wl_status == WL_SUCCESS, "failed to init wl conn mgr"); + wl_cm_start(); + + wl_scan(); + + if (initSpi(hs)){ + WARN("Spi not initialized\n"); + }else + { + initSpiComplete = true; + AVAIL_FOR_SPI(); + } + + hs->wl_init_complete = 1; +} + +void startup_init(void) +{ + INIT_SIGNAL_FOR_SPI(); + BUSY_FOR_SPI(); + + // if DEBUG enabled use DEB_PIN_GPIO for debug purposes + DEB_PIN_ENA(); + DEB_PIN_ENA(2); + DEB_PIN_UP(); + DEB_PIN_UP(2); +} + +const char timestamp[] = __TIMESTAMP__; + +/** + * + */ +int +main(void) +{ + wl_err_t wl_status; + int status; + struct ctx_server *hs; + enum wl_host_attention_mode mode; + + startup_init(); + + board_init(); + + led_init(); + + tc_init(); + + delay_init(FOSC0); + +#ifdef _TEST_SPI_ + for (;;) + { + /* handle console input */ + + console_poll(); + + spi_poll(NULL); + + } +#else + printk("Arduino Wifi Startup... [%s]\n", timestamp); + + size_t size_ctx_server = sizeof(struct ctx_server); + hs = calloc(1, size_ctx_server); + ASSERT(hs, "out of memory"); + + size_t size_netif = sizeof(struct netif); + hs->net_cfg.netif = calloc(1, size_netif); + ASSERT(hs->net_cfg.netif, "out of memory"); + hs->net_cfg.dhcp_enabled = INIT_IP_CONFIG; + + INFO_INIT("hs:%p size:0x%x netif:%p size:0x%x\n", hs, size_ctx_server, + hs->net_cfg.netif, size_netif); + initShell(hs); + timer_init(NULL, NULL); + lwip_init(); + + status = fw_download_init(); + ASSERT(status == 0, "failed to prepare for firmware download\n"); + + wl_status = wl_transport_init(fw_read_cb, hs, &mode); + if (wl_status != WL_SUCCESS) + goto err; + INFO_INIT("Mode: 0x%x\n", mode); + wl_status = wl_init(hs, wl_init_complete_cb, mode); + if (wl_status != WL_SUCCESS) + goto err; + + /* start main loop */ + for (;;) + poll(hs); + + +err: + /* show error message on console and display if wlan initialization fails */ + +#define WL_CARD_FAILURE_STR "Could not detect wl device, aborting\n" +#define WL_FIRMWARE_INVALID_STR "Invalid firmware data, aborting\n" +#define WL_OTHER_FAILURE_STR "Failed to start wl initialization\n" + + switch (wl_status) { + case WL_CARD_FAILURE: + printk(WL_CARD_FAILURE_STR); + break; + + case WL_FIRMWARE_INVALID: + printk(WL_FIRMWARE_INVALID_STR); + break; + + default: + printk(WL_OTHER_FAILURE_STR); + break; + } + for (;;) { + timer_poll(); + } +#endif +} diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/nvram.c b/external/arduino/avr/firmwares/wifishield/wifiHD/src/nvram.c new file mode 100644 index 000000000..2c61c5f1f --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/nvram.c @@ -0,0 +1,153 @@ +/*! \page License + * Copyright (C) 2009, H&D Wireless AB All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of H&D Wireless AB may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY H&D WIRELESS AB ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND + * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#include + +#include "compiler.h" +#include "preprocessor.h" +#include "board.h" +#include "power_clocks_lib.h" +#include "gpio.h" +#include "spi.h" +#include "conf_at45dbx.h" +#include "at45dbx.h" +#include +#include + + +static struct nvram { + uint8_t read; + void *data; + uint32_t len; + uint16_t off; +} PRIV; + +int nvram_init(void) +{ + spi_options_t spiOptions = { + .reg = AT45DBX_SPI_FIRST_NPCS, + .baudrate = AT45DBX_SPI_MASTER_SPEED, + .bits = AT45DBX_SPI_BITS, + .spck_delay = 0, + .trans_delay = 0, + .stay_act = 1, + .spi_mode = 0, + .modfdis = 1 + }; + + at45dbx_init(spiOptions, FPBA_HZ); + return 0; +} + + +/** + * Invoked by at45dbx driver + * + */ +void at45dbx_read_multiple_sector_callback(const void *psector) +{ + struct nvram *priv = &PRIV; + const uint8_t *buf = psector; + + if (!priv->read) + return; + + memcpy(priv->data, buf + priv->off, priv->len); +} + + +/** + * Invoked by at45dbx driver + * + */ +void at45dbx_write_multiple_sector_callback(void *psector) +{ + struct nvram *priv = &PRIV; + uint8_t *buf = psector; + memcpy(buf + priv->off, priv->data, priv->len); +} + + +/** + * Write/read any number bytes into any offset of nor flash by taking care + * of cases where the length is not aligned to the sector size or where + * the addr is not aligned to the sector offsets. + * + */ +static int nvram_rw(uint32_t addr, void *data, uint16_t len, int write) +{ + struct nvram *priv = &PRIV; + priv->read = write ? 0 : 1; + + while (len) { + uint32_t sector = addr / AT45DBX_SECTOR_SIZE; + priv->data = data; + priv->off = addr % AT45DBX_SECTOR_SIZE; + priv->len = AT45DBX_SECTOR_SIZE; + + if (len < AT45DBX_SECTOR_SIZE) + priv->len = len; + + if (priv->len > AT45DBX_SECTOR_SIZE - priv->off) + priv->len = AT45DBX_SECTOR_SIZE - priv->off; + + at45dbx_read_open(sector); + at45dbx_read_multiple_sector(1); + at45dbx_read_close(); + + if (write) { + at45dbx_write_open(sector); + at45dbx_write_multiple_sector(1); + at45dbx_write_close(); + } + + data += priv->len; + len -= priv->len; + addr += priv->len; + } + + return 0; +} + +/** + * Write any number bytes into any offset of nor flash. + * + */ +int nvram_write(uint32_t addr, const void *data, uint32_t len) +{ + return nvram_rw(addr, (void *) data, len, 1); +} + + +/** + * Read any number bytes into any offset of nor flash. + * + */ +int nvram_read(uint32_t addr, void *data, uint32_t len) +{ + return nvram_rw(addr, data, len, 0); +} diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/nvram.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/nvram.h new file mode 100644 index 000000000..888274987 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/nvram.h @@ -0,0 +1,10 @@ +#ifndef NVRAM_H +#define NVRAM_H + +#include + +int nvram_init(void); +int nvram_read(uint32_t addr, void *data, uint32_t len); +int nvram_write(uint32_t addr, const void *data, uint32_t len); + +#endif diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/owl_os.c b/external/arduino/avr/firmwares/wifishield/wifiHD/src/owl_os.c new file mode 100644 index 000000000..9fdf9a8e0 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/owl_os.c @@ -0,0 +1,140 @@ +#include +#include +#include +#include + +#include + +void *owl_os_alloc(size_t size) +{ + return malloc(size); +} + +void *owl_os_realloc(void *ptr, size_t size) +{ + return realloc(ptr, size); +} + +void owl_os_free(void *p) +{ + free(p); +} + +void *owl_os_memcpy(void *dst, const void *src, size_t n) +{ + return memcpy(dst, src, n); +} + +void *owl_os_memset(void *s, int c, size_t n) +{ + return memset(s, c, n); +} + +void *owl_os_memmove(void *dst, const void *src, size_t n) +{ + return memmove(dst, src, n); +} + +size_t owl_os_strlen(char *s) +{ + return strlen(s); +} + +char *owl_os_strncpy(char *dst, const char *src, size_t n) +{ + return strncpy(dst, src, n); +} + +int owl_os_strncmp(const char *s1, const char *s2, size_t n) +{ + return strncmp(s1, s2, n); +} + +int owl_os_strcmp(const char *s1, const char *s2) +{ + return strcmp(s1, s2); +} + +char *owl_os_strcpy(char *dst, const char *src) +{ + return strcpy(dst, src); +} + +char *owl_os_strdup(const char *s) +{ + return strdup(s); +} + +char *owl_os_strndup(const char *s, size_t n) +{ + return strndup(s, n); +} + +int owl_os_memcmp(const void *s1, const void *s2, size_t n) +{ + return memcmp(s1, s2, n); +} + +long int owl_os_strtol(const char *nptr, char **endptr, int base) +{ + return strtol(nptr, endptr, base); +} + +char *owl_os_strchr(const char *s, int c) +{ + return strchr(s, c); +} + +char *owl_os_strrchr(const char *s, int c) +{ + return strrchr(s, c); +} + +int owl_os_strcasecmp(const char *s1, const char *s2) +{ + return strcasecmp(s1, s2); +} + +char *owl_os_strstr(const char *haystack, const char *needle) +{ + return strstr(haystack, needle); +} + +int owl_os_snprintf(char *str, size_t size, const char *format, ...) +{ + int ret; + va_list ap; + va_start(ap, format); + ret = vsniprintf(str, size, format, ap); + va_end(ap); + return ret; +} + +/* for debugging only, never called if wl_api was built without debug */ +#ifdef CONFIG_OWL +#include "owl_env.h" +int owl_os_printf(const char *fmt, ...) +{ + char *str = NULL; + va_list args; + int len; + char *iter; + + va_start(args, fmt); + + if ((str = malloc(160)) == NULL) + return -1; + + if ((len = vsniprintf(str, 160, fmt, args)) < 0) { + free(str); + return -1; + } + + iter = str; + while (*iter) + owl_putc(*iter++); + + free(str); + return len; +} +#endif diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/ping.c b/external/arduino/avr/firmwares/wifishield/wifiHD/src/ping.c new file mode 100644 index 000000000..aba97db04 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/ping.c @@ -0,0 +1,340 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Copyright (c) 2001-2003 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is derived from a part of the lwIP TCP/IP stack. + * + */ +#ifdef PING_CMD +#include "lwip/opt.h" + +#include "lwip/mem.h" +#include "lwip/raw.h" +#include "lwip/icmp.h" +#include "lwip/netif.h" +#include "lwip/sys.h" +#include "lwip/sockets.h" +#include "lwip/inet.h" +#include "lwip/inet_chksum.h" + +#include "ping.h" +#include "timer.h" +#include "util.h" + +#include "getopt.h" + +#define PING_ID 0xAFAF + +struct ping_info_t { + struct ip_addr destination; + uint32_t deadline; /* -w (in seconds) */ + uint32_t interval; /* -i (in ms) */ + uint32_t timeout; /* ms */ + uint32_t data_size; /* -s */ + uint32_t count; /* -c, 0 means continous ping */ + uint32_t size; + uint32_t first_tx_tm; + uint32_t last_tx_tm; + uint32_t last_rx_tm; + uint32_t num_tx; + uint32_t num_rx; + uint32_t flags; + uint16_t seq_num; + Bool quiet; /* -q */ + ping_complete_cb_t complete_cb; + void *ctx; +#define PING_REPLY (1 << 0) +}; + +static struct ping_info_t INFO; + +/** Prepare a echo ICMP request */ +static void ping_prepare_echo(struct icmp_echo_hdr *iecho, + struct ping_info_t* ping_info) +{ + int i; + + ICMPH_TYPE_SET(iecho,ICMP_ECHO); + ICMPH_CODE_SET(iecho, 0); + iecho->chksum = 0; + iecho->id = PING_ID; + iecho->seqno = htons(++ping_info->seq_num); + iecho->chksum = 0; + + /* fill the additional data buffer with some data */ + for(i = 0; i < ping_info->data_size; i++) { + ((char*)iecho)[sizeof(struct icmp_echo_hdr) + i] = i; + } + + iecho->chksum = inet_chksum(iecho, ping_info->size); +} + +/* Ping using the raw ip */ +static u8_t ping_recv(void *arg, struct raw_pcb *pcb, struct pbuf *p, + struct ip_addr *addr) +{ + struct icmp_echo_hdr *iecho; + struct ip_hdr *ip = p->payload; + struct ping_info_t* ping_info = (struct ping_info_t*) arg; + uint32_t us; + + if (pbuf_header( p, -PBUF_IP_HLEN)==0) { + iecho = p->payload; + + if ((iecho->id == PING_ID) && + (iecho->seqno == htons(ping_info->seq_num))) { + ping_info->last_rx_tm = timer_get_ms(); + ping_info->num_rx++; + us = 1000 * + (ping_info->last_rx_tm - ping_info->last_tx_tm); + + if (!ping_info->quiet) + printk("%d bytes from %s: icmp_seq=%d ttl=%d " \ + "time=%d.%03d ms\n", + p->tot_len, ip2str(ip->src), + iecho->seqno, + IPH_TTL(ip), + us / 1000, us % 1000); + + /* do some ping result processing */ + ping_info->flags |= PING_REPLY; + } + } + + pbuf_free(p); + return 1; /* eat the event */ +} + +static void ping_send(struct raw_pcb *raw, struct ping_info_t* ping_info) +{ + struct pbuf *p; + struct icmp_echo_hdr *iecho; + + if (!(p = pbuf_alloc(PBUF_IP, ping_info->size, PBUF_RAM))) { + return; + } + if ((p->len == p->tot_len) && (p->next == NULL)) { + iecho = p->payload; + + ping_prepare_echo(iecho, ping_info); + raw_sendto(raw, p, &ping_info->destination); + + if (!ping_info->first_tx_tm) + ping_info->first_tx_tm = timer_get_ms(); + ping_info->last_tx_tm = timer_get_ms(); + ping_info->num_tx++; + } + pbuf_free(p); +} + +void ping_set_callback(ping_complete_cb_t cb, void *ctx) { + INFO.complete_cb = cb; + INFO.ctx = ctx; +} + +void ping_stop(uint32_t *tx_cnt, uint32_t *rx_cnt) { + struct ping_info_t *ping_info = &INFO; + + *tx_cnt = ping_info->num_tx; + *rx_cnt = ping_info->num_rx; + ping_info->count = ping_info->num_tx; + if ( 0 == ping_info->count ) { + ping_info->count = 1; + } +} + +static int init_ping_info(int argc, char* argv[], struct ping_info_t* ping_info) +{ + int c; + ping_complete_cb_t cb; + void *ctx; + + cb = ping_info->complete_cb; + ctx = ping_info->ctx; + memset(ping_info, 0, sizeof(struct ping_info_t)); + ping_info->complete_cb = cb; + ping_info->ctx = ctx; + + ping_info->deadline = 0; + ping_info->interval = 1000; + ping_info->timeout = 3000; + ping_info->data_size = 32; + ping_info->count = 3; + ping_info->destination = + netif_default ? netif_default->gw : ip_addr_any; + + optind = 1; + while ((c = getopt(argc, argv, "c:i:s:w:q")) != -1) { + switch (c) { + case 'c': + ping_info->count = atoi(optarg); + break; + + case 'i': + ping_info->interval = atoi(optarg); + break; + + case 's': + ping_info->data_size = atoi(optarg); + break; + + case 'q': + ping_info->quiet = TRUE; + break; + + case 'w': + ping_info->deadline = atoi(optarg); + break; + } + } + + ping_info->size = sizeof(struct icmp_echo_hdr) + ping_info->data_size; + + if (optind >= argc) + return -1; + + ping_info->destination = str2ip(argv[optind]); + if (!ping_info->destination.addr) + return -1; + + + ping_info->last_rx_tm = timer_get_ms(); + + return 0; +} + +static void print_stats(struct ping_info_t* ping_info) +{ + printk("\n--- %s ping statistics ---\n", + ip2str(ping_info->destination)); + printk("%d packets transmitted, %d received, %d%% packet loss, "\ + "time %dms\n\n", + ping_info->num_tx, ping_info->num_rx, + 100 * (ping_info->num_tx - ping_info->num_rx) / + ping_info->num_tx, + timer_get_ms() - ping_info->first_tx_tm); +} + +static void ping_finalize(struct ping_info_t* ping_info) { + print_stats(ping_info); + if (ping_info->complete_cb) { + ping_info->complete_cb(ping_info->num_tx, ping_info->num_rx, ping_info->ctx); + } +} + +cmd_state_t cmd_ping(int argc, char* argv[], void* ctx) +{ + static enum { + INIT, + PING, + WAIT_REPLY + } state = INIT; + + struct ping_info_t *ping_info = &INFO; + static struct raw_pcb *pcb; + + switch (state) { + case INIT: + if (init_ping_info(argc, argv, ping_info) != 0) { + printk("Usage: ping [-c count] [-i interval] " \ + "[-s packetsize]\n " \ + "[-w deadline] [-q] destination\n"); + return CMD_DONE; + } + + if (!(pcb = raw_new(IP_PROTO_ICMP))) { + printk("could not allocate pcb\n"); + state = INIT; + return CMD_DONE; + } + raw_recv(pcb, ping_recv, ping_info); + raw_bind(pcb, IP_ADDR_ANY); + + printk("PING %s %d(%d) bytes of data\n", + ip2str(ping_info->destination), + ping_info->data_size, + ping_info->size); + state = PING; + /* fall through */ + + case PING: + if (!netif_is_up(netif_default)) { + printk("netif is down\n"); + raw_remove(pcb); + state = INIT; + return CMD_DONE; + } + + if (ping_info->count && ping_info->num_tx == ping_info->count) { + ping_finalize(ping_info); + raw_remove(pcb); + state = INIT; + return CMD_DONE; + } + + + if (timer_get_ms() < ping_info->last_rx_tm + ping_info->interval) { + return CMD_INPROGRESS; + } + ping_send(pcb, ping_info); + + state = WAIT_REPLY; + return CMD_INPROGRESS; + + case WAIT_REPLY: + if (ping_info->flags & PING_REPLY) { + ping_info->flags &= (~PING_REPLY); + state = PING; + return CMD_INPROGRESS; + } + + if (timer_get_ms() > + ping_info->last_tx_tm + ping_info->timeout) { + if (!ping_info->quiet) + printk("timeout from %s\n", + ip2str(ping_info->destination)); + state = PING; + return CMD_INPROGRESS; + } + + if (ping_info->deadline && + timer_get_ms() > + ping_info->first_tx_tm + ping_info->deadline * 1000) { + ping_finalize(ping_info); + raw_remove(pcb); + state = INIT; + return CMD_DONE; + } + + return CMD_INPROGRESS; + } + + /* unreachable */ + Assert(0); + return CMD_DONE; +} +#endif diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/ping.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/ping.h new file mode 100644 index 000000000..47d409d74 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/ping.h @@ -0,0 +1,45 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Copyright (c) 2001-2003 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is derived from a part of the lwIP TCP/IP stack. + * + */ +#ifndef PING_H +#define PING_H + +#include "console.h" + +typedef void (*ping_complete_cb_t)(uint32_t tx_pkt_cnt, uint32_t rx_pkt_cnt, void *ctx); + +void ping_set_callback(ping_complete_cb_t cb, void *ctx); + +void ping_stop(uint32_t *tx_cnt, uint32_t *rx_cnt); + +cmd_state_t cmd_ping(int argc, char* argv[], void* ctx); + +#endif diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/printf-stdarg.c b/external/arduino/avr/firmwares/wifishield/wifiHD/src/printf-stdarg.c new file mode 100644 index 000000000..92eb21721 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/printf-stdarg.c @@ -0,0 +1,323 @@ +/* This source file is part of the ATMEL AVR32-SoftwareFramework-AT32UC3A-1.4.0 Release */ + +/*This file has been prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief sprintf functions to replace newlib for AVR32 UC3. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + *****************************************************************************/ + +/* Copyright (C) 2006-2008, Atmel Corporation All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of ATMEL may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND + * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + Copyright 2001, 2002 Georges Menie (www.menie.org) + stdarg version contributed by Christian Ettinger + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +/* + putchar is the only external dependency for this file, + if you have a working putchar, leave it commented out. + If not, uncomment the define below and + replace outbyte(c) by your own function call. + +*/ + + +#include + +static void printchar(char **str, int c) +{ + extern int board_putchar(char c); + + if (str) { + **str = c; + ++(*str); + } + else (void) board_putchar(c); +} + +#define PAD_RIGHT 1 +#define PAD_ZERO 2 + +static int prints(char **out, const char *string, int width, int pad) +{ + register int pc = 0, padchar = ' '; + + if (width > 0) { + register int len = 0; + register const char *ptr; + for (ptr = string; *ptr; ++ptr) ++len; + if (len >= width) width = 0; + else width -= len; + if (pad & PAD_ZERO) padchar = '0'; + } + if (!(pad & PAD_RIGHT)) { + for ( ; width > 0; --width) { + printchar (out, padchar); + ++pc; + } + } + for ( ; *string ; ++string) { + printchar (out, *string); + ++pc; + } + for ( ; width > 0; --width) { + printchar (out, padchar); + ++pc; + } + + return pc; +} + +/* the following should be enough for 32 bit int */ +#define PRINT_BUF_LEN 12 + +static int printi(char **out, int i, int b, int sg, int width, int pad, int letbase) +{ + char print_buf[PRINT_BUF_LEN]; + register char *s; + register int t, neg = 0, pc = 0; + register unsigned int u = i; + + if (i == 0) { + print_buf[0] = '0'; + print_buf[1] = '\0'; + return prints (out, print_buf, width, pad); + } + + if (sg && b == 10 && i < 0) { + neg = 1; + u = -i; + } + + s = print_buf + PRINT_BUF_LEN-1; + *s = '\0'; + + while (u) { + t = u % b; + if( t >= 10 ) + t += letbase - '0' - 10; + *--s = t + '0'; + u /= b; + } + + if (neg) { + if( width && (pad & PAD_ZERO) ) { + printchar (out, '-'); + ++pc; + --width; + } + else { + *--s = '-'; + } + } + + return pc + prints (out, s, width, pad); +} + +#if 0 +int fprintf(__FILE *stream, const char *format, ...) +{ +return 0; +} +#endif + +int printk_va(char **out, const char *format, va_list args ) +{ + register int width, pad; + register int pc = 0; + char scr[2]; + + for (; *format != 0; ++format) { + if (*format == '%') { + ++format; + width = pad = 0; + if (*format == '\0') break; + if (*format == '%') goto out; + if (*format == '-') { + ++format; + pad = PAD_RIGHT; + } + while (*format == '0') { + ++format; + pad |= PAD_ZERO; + } + for ( ; *format >= '0' && *format <= '9'; ++format) { + width *= 10; + width += *format - '0'; + } + if( *format == 's' ) { + register char *s = (char *)va_arg( args, int ); + pc += prints (out, s?s:"(null)", width, pad); + continue; + } + if( *format == 'd' ) { + pc += printi (out, va_arg( args, int ), 10, 1, width, pad, 'a'); + continue; + } + if( *format == 'p' ) { + pad = 8; + pc += printi (out, va_arg( args, int ), 16, 0, width, pad, 'a'); + continue; + } + if( *format == 'x' ) { + pc += printi (out, va_arg( args, int ), 16, 0, width, pad, 'a'); + continue; + } + if( *format == 'X' ) { + pc += printi (out, va_arg( args, int ), 16, 0, width, pad, 'A'); + continue; + } + if( *format == 'u' ) { + pc += printi (out, va_arg( args, int ), 10, 0, width, pad, 'a'); + continue; + } + if( *format == 'c' ) { + /* char are converted to int then pushed on the stack */ + scr[0] = (char)va_arg( args, int ); + scr[1] = '\0'; + pc += prints (out, scr, width, pad); + continue; + } + } + else { + out: + printchar (out, *format); + ++pc; + } + } + if (out) **out = '\0'; + va_end( args ); + return pc; +} + +int printk(const char *format, ...) +{ + va_list args; + + va_start( args, format ); + return printk_va( 0, format, args ); +} + +#ifndef __ARM__ +int sprintf(char *out, const char *format, ...) +{ + va_list args; + + va_start( args, format ); + return printk_va( &out, format, args ); +} +#endif + +#ifdef TEST_PRINTF +int main(void) +{ + char *ptr = "Hello world!"; + char *np = 0; + int i = 5; + unsigned int bs = sizeof(int)*8; + int mi; + char buf[80]; + + mi = (1 << (bs-1)) + 1; + printf("%s\n", ptr); + printf("printf test\n"); + printf("%s is null pointer\n", np); + printf("%d = 5\n", i); + printf("%d = - max int\n", mi); + printf("char %c = 'a'\n", 'a'); + printf("hex %x = ff\n", 0xff); + printf("hex %02x = 00\n", 0); + printf("signed %d = unsigned %u = hex %x\n", -3, -3, -3); + printf("%d %s(s)%", 0, "message"); + printf("\n"); + printf("%d %s(s) with %%\n", 0, "message"); + sprintf(buf, "justif: \"%-10s\"\n", "left"); printf("%s", buf); + sprintf(buf, "justif: \"%10s\"\n", "right"); printf("%s", buf); + sprintf(buf, " 3: %04d zero padded\n", 3); printf("%s", buf); + sprintf(buf, " 3: %-4d left justif.\n", 3); printf("%s", buf); + sprintf(buf, " 3: %4d right justif.\n", 3); printf("%s", buf); + sprintf(buf, "-3: %04d zero padded\n", -3); printf("%s", buf); + sprintf(buf, "-3: %-4d left justif.\n", -3); printf("%s", buf); + sprintf(buf, "-3: %4d right justif.\n", -3); printf("%s", buf); + + return 0; +} + +/* + * if you compile this file with + * gcc -Wall $(YOUR_C_OPTIONS) -DTEST_PRINTF -c printf.c + * you will get a normal warning: + * printf.c:214: warning: spurious trailing `%' in format + * this line is testing an invalid % at the end of the format string. + * + * this should display (on 32bit int machine) : + * + * Hello world! + * printf test + * (null) is null pointer + * 5 = 5 + * -2147483647 = - max int + * char a = 'a' + * hex ff = ff + * hex 00 = 00 + * signed -3 = unsigned 4294967293 = hex fffffffd + * 0 message(s) + * 0 message(s) with % + * justif: "left " + * justif: " right" + * 3: 0003 zero padded + * 3: 3 left justif. + * 3: 3 right justif. + * -3: -003 zero padded + * -3: -3 left justif. + * -3: -3 right justif. + */ + +#endif diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/printf-stdarg.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/printf-stdarg.h new file mode 100644 index 000000000..bce38b6f2 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/printf-stdarg.h @@ -0,0 +1,34 @@ +/*! \page License + * Copyright (C) 2009, H&D Wireless AB All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of H&D Wireless AB may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY H&D WIRELESS AB ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND + * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef PRINTF_STDARG_H +#define PRINTF_STDARG_H +#include + +int printk(const char *format, ...); +int printk_va(char **out, const char *format, va_list args ); +#endif diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/timer.c b/external/arduino/avr/firmwares/wifishield/wifiHD/src/timer.c new file mode 100644 index 000000000..6ffba634a --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/timer.c @@ -0,0 +1,232 @@ +/*! \page License + * Copyright (C) 2009, H&D Wireless AB All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of H&D Wireless AB may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY H&D WIRELESS AB ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND + * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include +#ifdef FREERTOS_USED +#include "FreeRTOS.h" +#include "task.h" +#endif + +#define TIMER_HZ 4 + + +struct timeout_t { + U32 tick; + U32 expire_at_tick; + Bool expired; + U8 type; + void (*cb)(void* ctx); + void* ctx; +}; + +struct timer_t { + volatile U32 tick; + struct timeout_t timeout[10]; + void (*tick_isr) (void* ctx); + const U32 MS_PER_TICK; + void *ctx; +}; + +#define ARRAY_SIZE(a) sizeof(a) / sizeof(a[0]) + + +static struct timer_t TIMER = { + .tick = 0, +#ifdef FREERTOS_USED + .MS_PER_TICK = 1 / portTICK_RATE_MS, +#else + .MS_PER_TICK = TIMER_HZ, +#endif + .timeout = { { 0 } }, +}; + +#ifdef FREERTOS_USED /* Use TICK-hook */ + +void vApplicationTickHook( void ) { + struct timer_t* priv = &TIMER; + priv->tick++; + if(priv->tick_isr) { + priv->tick_isr(priv->ctx); + } +} + +#else /* Use interrupt directly */ + +static __attribute__((__interrupt__)) void irq_handler(void) +{ + volatile avr32_rtc_t *rtc = &AVR32_RTC; + struct timer_t* priv = &TIMER; + priv->tick++; + + if(priv->tick_isr) + priv->tick_isr(priv->ctx); + + rtc->icr = AVR32_RTC_ICR_TOPI_MASK; + rtc->isr; +} + +#endif + +void timer_init(void (*tick_isr) (void* ctx), void* ctx) +{ + struct timer_t* priv = &TIMER; + uint8_t id; + +#ifndef FREERTOS_USED + INTC_register_interrupt(&irq_handler, AVR32_RTC_IRQ, AVR32_INTC_INT0); + if (!rtc_init(&AVR32_RTC, RTC_OSC_RC, 0)) + Assert(0); + + rtc_set_top_value(&AVR32_RTC, 115 * priv->MS_PER_TICK / 2); + rtc_enable_interrupt(&AVR32_RTC); + rtc_enable(&AVR32_RTC); +#else + /* With FreeRTOS we use the OS tick instead */ +#endif + priv->tick_isr = tick_isr; + priv->ctx = ctx; + + for (id = 0; id < ARRAY_SIZE(priv->timeout); id++) + priv->timeout[id].expired = TRUE; +} + + +U32 timer_get_ms(void) +{ + struct timer_t* priv = &TIMER; + return priv->tick * priv->MS_PER_TICK; +} + +void timer_delay(U32 ms) +{ + struct timer_t* priv = &TIMER; + U32 expire_at_tick = priv->tick + ms / priv->MS_PER_TICK; + while (priv->tick < expire_at_tick); +} + +/** + * Called from application main loop to invoke any scheduled timeout cbs. + * This function might be called as often as possible rather than at each tick + * to support the timeout value '0', e.g a timeout within less than one tick. + * + */ +void timer_poll(void) +{ + struct timer_t* priv = &TIMER; + U8 i; + + for (i = 0; i < ARRAY_SIZE(priv->timeout); i++) { + struct timeout_t* tmo = &priv->timeout[i]; + if (tmo->expired) + continue; + + if (tmo->expire_at_tick > priv->tick) + continue; + + if (tmo->cb) + tmo->cb(tmo->ctx); + + if (tmo->type == TIMEOUT_PERIODIC) + tmo->expire_at_tick = priv->tick + tmo->tick; + else + tmo->expired = TRUE; + } +} + +static U32 timer_sched_timeout(U32 ms, U8 type) +{ + struct timer_t* priv = &TIMER; + struct timeout_t* tmo; + U8 id; + + Assert(type == TIMEOUT_ONESHOT || type == TIMEOUT_PERIODIC); + + for (id = 0; id < ARRAY_SIZE(priv->timeout); id++) { + tmo = &priv->timeout[id]; + if (tmo->expired) + break; + } + + Assert(id != ARRAY_SIZE(priv->timeout)); + + tmo->tick = ms / priv->MS_PER_TICK; + tmo->expire_at_tick = priv->tick + tmo->tick; + tmo->type = type; + tmo->expired = FALSE; + return id; +} + +U32 timer_sched_timeout_cb(U32 ms, U8 type, void (*cb)(void *ctx), void* ctx) +{ + struct timer_t* priv = &TIMER; + struct timeout_t* tmo; + U8 id; + + Assert(cb); + id = timer_sched_timeout(ms, type); + tmo = &priv->timeout[id]; + + tmo->cb = cb; + tmo->ctx = ctx; + return id; +} + + +U32 timer_mod(U32 id, U32 ms, U8 type, void (*cb)(void *ctx), void* ctx) +{ + struct timer_t* priv = &TIMER; + + if (id != INVALID_TIMER_ID && !priv->timeout[id].expired) + timer_cancel_timeout(id); + + return timer_sched_timeout_cb(ms, type, cb, ctx); +} + +void timer_cancel_timeout(U32 id) +{ + struct timer_t* priv = &TIMER; + struct timeout_t* tmo; + + tmo = &priv->timeout[id]; + tmo->expired = TRUE; +} + +int timer_interval_passed(U32 old, U32 new, U32 diff) { + /* New did not wrap */ + if (new > old && new - old > diff) { + return 1; + } + /* New did wrap */ + else if (new < old && ( ( (U32)(-1) - old ) + new ) > diff ) { + return 1; + } + return 0; +} diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/timer.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/timer.h new file mode 100644 index 000000000..6614fbc44 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/timer.h @@ -0,0 +1,51 @@ +/*! \page License + * Copyright (C) 2009, H&D Wireless AB All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of H&D Wireless AB may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY H&D WIRELESS AB ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND + * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef TIMER_H +#define TIMER_H +#include + +enum { + TIMEOUT_ONESHOT, + TIMEOUT_PERIODIC +}; + +#define INVALID_TIMER_ID 0xFFFFFFFF + +/* Handle timer overflows. Return 1 if the interval has passed. */ +int timer_interval_passed(uint32_t old, uint32_t new, uint32_t diff); + +void timer_tick(); +void timer_init(void (*tick_isr) (void* ctx), void* ctx); +void timer_poll(void); +void timer_delay(uint32_t ms); +uint32_t timer_sched_timeout_cb(uint32_t ms, uint8_t type, void (*cb)(void *ctx), void* ctx); +uint32_t timer_mod(uint32_t id, uint32_t ms, uint8_t type, void (*cb)(void *ctx), void* ctx); +void timer_cancel_timeout(uint32_t id); +uint32_t timer_get_ms(void); + +#endif diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/top_defs.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/top_defs.h new file mode 100644 index 000000000..09f7c3ef8 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/top_defs.h @@ -0,0 +1,120 @@ +/*! \page License + * Copyright (C) 2009, H&D Wireless AB All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of H&D Wireless AB may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY H&D WIRELESS AB ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND + * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef _TOP_DEFS_H +#define _TOP_DEFS_H + +#include +#include + +#define ARRAY_SIZE(a) sizeof(a) / sizeof((a)[0]) + +#ifndef UNREF +#define UNREF(x) x = x +#endif + +#if __GNUC__ +#ifdef __KERNEL__ +#define WEAK_DECL +#else +#define WEAK_DECL __attribute__ ((__weak__)) +#endif +#define PACKED __attribute__ ((__packed__)) +#define USED __attribute__ ((__used__)) +#else + #error "Unsupported compiler" +#endif + +#ifndef TRUE +#define TRUE 1 +#endif + +#ifndef FALSE +#define FALSE 0 +#endif + + +#if 0 +#include +/* + * These functions should _NOT_ be used, call iprintf, sniprintf, iscanf, siscanf etc + * instead. Those functions do not have support for floating point formats. + * Not using these functions saves 27kB of code. + */ +extern int printf(const char *format, ...) __attribute__ ((deprecated)); +extern int sprintf(char *str, const char *format, ...) __attribute__ ((deprecated)); +extern int snprintf(char *str, size_t size, const char *format, ...) __attribute__ ((deprecated)); + +int vprintf(const char *format, va_list ap) __attribute__ ((deprecated)); +int vfprintf(FILE *stream, const char *format, va_list ap) __attribute__ ((deprecated)); +int vsprintf(char *str, const char *format, va_list ap) __attribute__ ((deprecated)); +int vsnprintf(char *str, size_t size, const char *format, va_list ap) __attribute__ ((deprecated)); + +int scanf(const char *format, ...) __attribute__ ((deprecated)); +int fscanf(FILE *stream, const char *format, ...) __attribute__ ((deprecated)); +int sscanf(const char *str, const char *format, ...) __attribute__ ((deprecated)); + +int vscanf(const char *format, va_list ap) __attribute__ ((deprecated)); +int vsscanf(const char *str, const char *format, va_list ap) __attribute__ ((deprecated)); +int vfscanf(FILE *stream, const char *format, va_list ap) __attribute__ ((deprecated)); +#endif + +#endif + + + +#if defined(__linux__) || defined(__APPLE__) + #include + #include + #define sniprintf snprintf + #define asiprintf asprintf + #define printk printf + #define siscanf sscanf + + #define WL_ASSERT(x) assert(x) + #define WL_DEBUG(args...) printf(args) + + #ifdef NO_LWIP + /* IP address representation from lwIP */ + struct ip_addr { + uint32_t addr; + } PACKED; + #endif + + #define FEAT_SOCKETS + +#else + #define WL_ASSERT(cond) do { \ + if (!(cond)) { \ + printk("%s:%d\n", __FILE__, __LINE__); \ + for(;;); \ + } \ + } while(0) + #define WL_DEBUG(args...) printk(args) + + +#endif diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/trace.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/trace.h new file mode 100644 index 000000000..984262a81 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/trace.h @@ -0,0 +1,44 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*! \page License + * Copyright (C) 2009, H&D Wireless AB All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of H&D Wireless AB may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY H&D WIRELESS AB ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND + * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef TRACE_H +#define TRACE_H + +#include +#include "printf-stdarg.h" + +#define ASSERT(cond, str) do { \ + if (!(cond)) { \ + printk("%s\n", str); \ + Assert(0); \ + } \ + } while(0) + + +#endif diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/util.c b/external/arduino/avr/firmwares/wifishield/wifiHD/src/util.c new file mode 100644 index 000000000..c01edebf4 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/util.c @@ -0,0 +1,260 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*! \page License + * Copyright (C) 2009, H&D Wireless AB All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of H&D Wireless AB may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY H&D WIRELESS AB ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND + * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +const char* ip2str(struct ip_addr addr) +{ + static char buf[16]; + +#if BYTE_ORDER == LITTLE_ENDIAN + sniprintf(buf, sizeof(buf), "%lu.%lu.%lu.%lu", + addr.addr & 0xff, + (addr.addr >> 8) & 0xff, + (addr.addr >> 16) & 0xff, + (addr.addr >> 24) & 0xff); + return buf; +#else + sniprintf(buf, sizeof(buf), "%lu.%lu.%lu.%lu", + (addr.addr >> 24) & 0xff, + (addr.addr >> 16) & 0xff, + (addr.addr >> 8) & 0xff, + (addr.addr) & 0xff); + return buf; +#endif +} + +struct ip_addr str2ip(const char* str) +{ + int a,b,c,d; + uint32_t ip = 0; + struct ip_addr addr; + + if (siscanf(str,"%d.%d.%d.%d",&a,&b,&c,&d) != 4) + goto out; + + if (a < 0 || a > 255 || b < 0 || b > 255 || + c < 0 || c > 255 || d < 0 || d > 255) { + goto out; + } + +#if BYTE_ORDER == LITTLE_ENDIAN + ip = (d << 24) | (c << 16) | (b << 8) | a; +#else + ip = (a << 24) | (b << 16) | (c << 8) | d; +#endif + + out: + addr.addr = ip; + return addr; +} + +uint8_t ascii_to_key(char *outp, const char *inp) { + char buf[3]; + int len; + buf[2] = '\0'; + len = strlen(inp); + if (len % 2) { + printk("Invalid length\n"); + } + len = 0; + while (*inp) { + if (! isxdigit(*inp) || ! isxdigit(*(inp+1)) || + len > WL_MAX_PASS_LEN) { + return 0; + } + buf[0] = *inp++; + buf[1] = *inp++; + *outp++ = strtol(buf, NULL, 16); + len++; + } + return len; +} + + + +void printbuf(const char *prefix, const void *data, size_t len) +{ + const unsigned char *s = data; + int i, j; + + for (i = 0; i < len; i += 16) + { + printk("%s ", prefix); + for(j = 0; j < 16; j++) { + if(i + j >= len) + printk(" "); + else + printk("%02X ", (uint16_t)s[i + j]); + } + printk(": "); + for(j = 0; j < 16; j++) { + if(i + j >= len) + break; + if(s[i+j] >= 32 && s[i+j] < 127) + printk("%c", s[i + j]); + else + printk("."); + } + printk("\n"); + } +} + + +void print_network(struct wl_network_t* wl_network) +{ + printk("%s ", mac2str(wl_network->bssid.octet)); + printk("\"%s\"", ssid2str(&wl_network->ssid)); + printk(" RSSI %d dBm ", wl_network->rssi); + switch(wl_network->net_type) { + case WL_CONN_TYPE_ADHOC: + printk(" Ad-Hoc "); + break; + default : + break; + } + switch (wl_network->enc_type) { + case ENC_TYPE_WEP : + printk(" (WEP encryption)"); + break; + case ENC_TYPE_TKIP : + printk(" (TKIP encryption)"); + break; + case ENC_TYPE_CCMP : + printk(" (CCMP encryption)"); + break; + case ENC_TYPE_NONE : + break; + } + printk("\n"); + +} + +void print_network_list(void) +{ + struct wl_network_list_t* wl_network_list; + uint8_t i; + + wl_get_network_list(&wl_network_list); + + if (wl_network_list->cnt == 0) + printk("no nets found\n"); + + for (i = 0; i < wl_network_list->cnt; i++) + print_network(wl_network_list->net[i]); +} + +int join_argv(char *dst, size_t dst_len, int argc, char* argv[]) { + char *p = dst; + int i; + int len = 0; + + /* Not really kosher, an ssid may legally contain 0-bytes but + * the console interface does not deal with that. + */ + for (i = 0; i < argc; i++) { + len += strlen(argv[i]); + if (len > dst_len) { + printk("ssid too long (max %d)\n", (int) dst_len); + return 0; + } + p += sniprintf(p, + dst_len - (p - dst), + "%s ", + argv[i]); + } + if (p == dst) { + return 0; + } + p--; + *p = '\0'; /* Delete last space */ + + return p - dst; +} + +const char* ssid2str(struct wl_ssid_t *ssid) { + static char buf[WL_SSID_MAX_LENGTH + 1]; + + memset(buf, 0, sizeof buf); + memcpy(buf, ssid->ssid, ssid->len); + + return buf; +} + + +const char* mac2str(uint8_t* mac) +{ + static char buf[18]; + sniprintf(buf, sizeof(buf), "%02x-%02x-%02x-%02x-%02x-%02x", + mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); + return buf; +} + + +char* enc_type2str(enum wl_enc_type enc_type) +{ + switch(enc_type) { + case ENC_TYPE_WEP: + return "WEP"; + case ENC_TYPE_CCMP: + return "CCMP"; + case ENC_TYPE_TKIP: + return "TKIP"; + default: + return ""; + }; +} + +int equal_ssid(const struct wl_ssid_t* ssid1, + const struct wl_ssid_t* ssid2) { + if (ssid1->len == ssid2->len && + (memcmp(ssid1->ssid, ssid2->ssid, ssid1->len) == 0)) { + return 1; + } + return 0; +} + +int equal_bssid(const struct wl_mac_addr_t* bssid1, + const struct wl_mac_addr_t* bssid2) { + if (memcmp(bssid1, bssid2, sizeof *bssid1) == 0) { + return 1; + } + return 0; +} + + diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/util.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/util.h new file mode 100644 index 000000000..2b3f74f83 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/util.h @@ -0,0 +1,71 @@ +/*! \page License + * Copyright (C) 2009, H&D Wireless AB All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of H&D Wireless AB may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY H&D WIRELESS AB ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND + * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef _UTIL_H +#define _UTIL_H +#include +#include +#include +#include "lwip/ip.h" +#include + +const char* ip2str(struct ip_addr addr); + +struct ip_addr str2ip(const char* str); + +uint8_t ascii_to_key(char *outp, const char *inp); + +void print_network(struct wl_network_t* wl_network); + +void print_network_list(void); + +int join_argv(char *dst, size_t dst_len, int argc, char* argv[]); + +void printbuf(const char *prefix, const void *data, size_t len); + +const char* ssid2str(struct wl_ssid_t *ssid); + +const char* mac2str(uint8_t mac[6]); + +char* enc_type2str(enum wl_enc_type enc_type); + +int equal_ssid(const struct wl_ssid_t* ssid1, + const struct wl_ssid_t* ssid2); + +int equal_bssid(const struct wl_mac_addr_t* bssid1, + const struct wl_mac_addr_t* bssid2); + +#define NET_SET_SSID(net, xssid, ssid_len) do { \ + DE_MEMCPY((net)->ssid.ssid, (xssid), (ssid_len)); \ + (net)->ssid.len = (ssid_len); \ + } while (0) + +#define NET_SET_BSSID(net, xbssid) do { \ + DE_MEMCPY(&(net)->bssid, &(xbssid), sizeof (xbssid)); \ + } while (0) + +#endif /* _UTIL_H */ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/wifi_spi.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/wifi_spi.h new file mode 100644 index 000000000..e2e262c2f --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/wifi_spi.h @@ -0,0 +1,160 @@ +/* + * wifi_spi.h + * + * Created on: Jul 4, 2010 + * Author: mlf by Metodo2 srl + */ +#ifndef WiFi_Spi_h +#define WiFi_Spi_h + +#include "wl_definitions.h" + +#define CMD_FLAG 0 +#define REPLY_FLAG 1<<7 +#define DATA_FLAG 0x40 + +#define WIFI_SPI_ACK 1 +#define WIFI_SPI_ERR 0xFF + +#define TIMEOUT_CHAR 1000 + +//#define MAX_SOCK_NUM 4 /**< Maxmium number of socket */ +#define NO_SOCKET_AVAIL 255 + +#define START_CMD 0xE0 +#define END_CMD 0xEE +#define ERR_CMD 0xEF +#define CMD_POS 1 // Position of Command OpCode on SPI stream +#define PARAM_LEN_POS 2 // Position of Param len on SPI stream + +enum { + SET_NET_CMD = 0x10, + SET_PASSPHRASE_CMD = 0x11, + SET_KEY_CMD = 0x12, + TEST_CMD = 0x13, + SET_IP_CONFIG_CMD = 0x14, + SET_DNS_CONFIG_CMD = 0x15, + + GET_CONN_STATUS_CMD = 0x20, + GET_IPADDR_CMD = 0x21, + GET_MACADDR_CMD = 0x22, + GET_CURR_SSID_CMD = 0x23, + GET_CURR_BSSID_CMD = 0x24, + GET_CURR_RSSI_CMD = 0x25, + GET_CURR_ENCT_CMD = 0x26, + SCAN_NETWORKS = 0x27, + START_SERVER_TCP_CMD= 0x28, + GET_STATE_TCP_CMD = 0x29, + DATA_SENT_TCP_CMD = 0x2A, + AVAIL_DATA_TCP_CMD = 0x2B, + GET_DATA_TCP_CMD = 0x2C, + START_CLIENT_TCP_CMD= 0x2D, + STOP_CLIENT_TCP_CMD = 0x2E, + GET_CLIENT_STATE_TCP_CMD = 0x2F, + DISCONNECT_CMD = 0x30, + GET_IDX_SSID_CMD = 0x31, + GET_IDX_RSSI_CMD = 0x32, + GET_IDX_ENCT_CMD = 0x33, + REQ_HOST_BY_NAME_CMD= 0x34, + GET_HOST_BY_NAME_CMD= 0x35, + START_SCAN_NETWORKS = 0x36, + GET_FW_VERSION_CMD = 0x37, + GET_TEST_CMD = 0x38, + SEND_DATA_UDP_CMD = 0x39, + GET_REMOTE_DATA_CMD = 0x3A, + + // All command with DATA_FLAG 0x40 send a 16bit Len + + SEND_DATA_TCP_CMD = 0x44, + GET_DATABUF_TCP_CMD = 0x45, + INSERT_DATABUF_CMD = 0x46, + +}; + +#if 0 +enum wl_tcp_state { + CLOSED = 0, + LISTEN = 1, + SYN_SENT = 2, + SYN_RCVD = 3, + ESTABLISHED = 4, + FIN_WAIT_1 = 5, + FIN_WAIT_2 = 6, + CLOSE_WAIT = 7, + CLOSING = 8, + LAST_ACK = 9, + TIME_WAIT = 10 +}; +#endif + +enum numParams{ + PARAM_NUMS_0, + PARAM_NUMS_1, + PARAM_NUMS_2, + PARAM_NUMS_3, + PARAM_NUMS_4, + PARAM_NUMS_5, + MAX_PARAM_NUMS +}; + +#define MAX_PARAMS MAX_PARAM_NUMS-1 +#define PARAM_LEN_SIZE 1 + +typedef struct __attribute__((__packed__)) +{ + uint8_t paramLen; + char* param; +}tParam; + +typedef struct __attribute__((__packed__)) +{ + uint16_t dataLen; + char* data; +}tDataParam; + + +typedef struct __attribute__((__packed__)) +{ + unsigned char cmd; + unsigned char tcmd; + unsigned char nParam; + tParam params[MAX_PARAMS]; +}tSpiMsg; + +typedef struct __attribute__((__packed__)) +{ + unsigned char cmd; + unsigned char tcmd; + unsigned char nParam; + tDataParam params[MAX_PARAMS]; +}tSpiMsgData; + + +typedef struct __attribute__((__packed__)) +{ + unsigned char cmd; + unsigned char tcmd; + //unsigned char totLen; + unsigned char nParam; +}tSpiHdr; + +typedef struct __attribute__((__packed__)) +{ + uint8_t paramLen; + uint32_t param; +}tLongParam; + +typedef struct __attribute__((__packed__)) +{ + uint8_t paramLen; + uint16_t param; +}tIntParam; + +typedef struct __attribute__((__packed__)) +{ + uint8_t paramLen; + uint8_t param; +}tByteParam; + +#endif +uint8_t param; \ No newline at end of file diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/wl_cm.c b/external/arduino/avr/firmwares/wifishield/wifiHD/src/wl_cm.c new file mode 100644 index 000000000..ebc0e45dd --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/wl_cm.c @@ -0,0 +1,431 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*! \page License + * Copyright (C) 2009, H&D Wireless AB All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of H&D Wireless AB may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY H&D WIRELESS AB ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND + * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#include "wl_cm.h" +#include "util.h" +#include +#include "debug.h" + +/** Roaming configuration parameters **/ + +/*! The ROAMING_RSSI_THRESHOLD setting defines how bad the current + * signal strength should be before we'll consider roaming to an AP + * with better signal strength. The objective is to stay on the + * current AP as long as the RSSI is decent, even if there are other + * APs in the same BSS with better RSSI available. + * If ROAMING_RSSI_THRESHOLD is too high we might roam unecessarily. + * If ROAMING_RSSI_THRESHOLD is too low we might not roam in time to + * avoid packet loss. This also impacts power consumption, staying + * too long with an AP with poor RSSI will consume more power. + * Unit is dBm. + */ +#define ROAMING_RSSI_THRESHOLD -65 + +/*! The ROAMING_RSSI_DIFF setting defines how much better + * than the currently associated AP a new AP must be before + * we'll attempt to roam over to the new AP. + * If ROAMING_RSSI_DIFF is too high it might be too hard + * to roam (important if the STA is expected to move + * quickly through different AP coverage areas). + * If ROAMING_RSSI_DIFF is too low we might bounce between + * two APs with similar signal strengths. + * Unit is dBm. + */ +#define ROAMING_RSSI_DIFF 10 + +# include "printf-stdarg.h" +#include "ard_utils.h" +#include "debug.h" + +/** \defgroup wl_cm Connection Manager + * + * These functions are used to configure and control the WiFi connetion + * manager. + * + * + * @{ + */ + +struct cm_candidate { + struct wl_ssid_t ssid; + struct wl_mac_addr_t bssid; +}; + +struct cm { + cm_scan_cb_t *scan_cb; + cm_conn_cb_t *conn_cb; + cm_disconn_cb_t *disconn_cb; + void* ctx; + uint8_t enabled; + struct cm_candidate candidate; +}; + + +/** + * This function can be modified to pick a network based on + * application specific criteria. + * + * If the SSID can not be found in the scan list it will be + * assumed to be a hidden SSID and the wl_connect() command + * will be called to attempt to probe for the network and + * connect to it. + */ +static struct wl_network_t* +find_best_candidate(struct cm* cm) +{ + struct wl_network_list_t* netlist; + struct wl_network_t *best_net = NULL; + uint8_t i; + + if (wl_get_network_list(&netlist) != WL_SUCCESS) + return NULL; + + if (netlist->cnt == 0) + return NULL; + + for (i = 0; i < netlist->cnt; i++) { + /* match on ssid */ + if (cm->candidate.ssid.len) + if (!equal_ssid(&cm->candidate.ssid, + &netlist->net[i]->ssid)) + continue; + + /* match bssid */ + if (strncmp((char*) cm->candidate.bssid.octet, + "\xff\xff\xff\xff\xff\xff", 6)) + if (!equal_bssid(&cm->candidate.bssid, + &netlist->net[i]->bssid)) + continue; + /* check for best rssi. */ + if ( best_net && + ( best_net->rssi > netlist->net[i]->rssi) ) { + continue; + } + best_net = netlist->net[i]; + } + + return best_net; +} + + +/** + * + */ +static void +select_net(struct cm* cm) +{ + struct wl_network_t *candidate_net; + struct wl_network_t *current_net; + struct wl_ssid_t *ssid_p; + + int ret; + + /* Nothing to do */ + if (0 == cm->candidate.ssid.len) { + return; + } + + current_net = wl_get_current_network(); + candidate_net = find_best_candidate(cm); + + /* Connected to the candidate? ... */ + if ( current_net == candidate_net ) { + if ( current_net ) { + /* ...yes, dont change. */ + + return; + } + } + + /* Roaming checks */ + if (current_net && candidate_net) { + /* Are we changing BSSs? */ + if ( equal_ssid(&candidate_net->ssid, + ¤t_net->ssid)) { + + /* ...no. Does the currently connected + * net have a decent RSSI?...*/ + if ( current_net->rssi > ROAMING_RSSI_THRESHOLD ) { + /* ...yes, stay with it. */ + return; + } + /* ...no. Does the candidate have + * sufficiently better RSSI to + * motivate a switch to it? */ + if ( candidate_net->rssi < current_net->rssi + + ROAMING_RSSI_DIFF) { + return; + } + /* ...yes, try to roam to candidate_net */ + CM_DPRINTF("CM: Roaming from rssi %d to %d\n", + current_net->rssi, + candidate_net->rssi); + } + } + /* a candidate is found */ + if (candidate_net) { + /* We connect to a specific bssid here because + * find_best_candidate() might have picked a + * particulare AP among many with the same SSID. + * wl_connect() would pick one of them at random. + */ + ret = wl_connect_bssid(candidate_net->bssid); + } + /* no candidate found */ + else { + CM_DPRINTF("CM: No candidate found for ssid \"%s\"\n", + ssid2str(&cm->candidate.ssid)); + /* Might be a hidden SSID so we try to connect to it. + * wl_connect() will trigger a directed scan + * for the SSID in this case. + */ + ssid_p = &cm->candidate.ssid; + ret = wl_connect(ssid_p->ssid, ssid_p->len); + } + switch (ret) { + case WL_SUCCESS : + return; + case WL_BUSY: + wl_disconnect(); + return; + case WL_RETRY: + break; + default : + CM_DPRINTF("CM: failed to connect\n"); + break; + } + + /* some operation failed or no candidate found */ + if (wl_scan() != WL_SUCCESS) + CM_DPRINTF("CM: failed to scan\n"); +} + + +/** + * + */ +static void +wl_scan_complete_cb(void* ctx) +{ + struct cm *cm = ctx; + + CM_DPRINTF("CM: scan completed\n"); + + if (cm->scan_cb) + cm->scan_cb(cm->ctx); + + if ( 0 == cm->enabled ) { + return; + } + select_net(cm); +} + +/** + * + */ +static void +wl_media_connected_cb(void* ctx) +{ + struct cm *cm = ctx; + struct wl_network_t *net = wl_get_current_network(); + CM_DPRINTF("CM: connected to %s\n", ssid2str(&net->ssid)); + LINK_LED_ON(); + ERROR_LED_OFF(); + if (cm->conn_cb) + cm->conn_cb(net, cm->ctx); +} + + +/** + * + */ +static void +wl_conn_failure_cb(void* ctx) +{ + struct cm *cm = ctx; + CM_DPRINTF("CM: connect failed, scanning\n"); + ERROR_LED_ON(); + LINK_LED_OFF(); + + if ( 0 == cm->enabled ) { + return; + } + if (wl_scan() != WL_SUCCESS) + /* should never happen */ + CM_DPRINTF("CM: could not start scan after connect fail!\n"); +} + + +/** + * + */ +static void +wl_conn_lost_cb(void* ctx) +{ + struct cm *cm = ctx; + CM_DPRINTF("CM: connection lost, scanning\n"); + LINK_LED_OFF(); + if (cm->disconn_cb) + cm->disconn_cb(cm->ctx); + + if ( 0 == cm->enabled ) { + return; + } + if (wl_scan() != WL_SUCCESS) + /* should never happen */ + CM_DPRINTF("CM: could not start scan after connect lost!\n"); +} + + +/** + * + */ +static void +wl_event_cb(struct wl_event_t event, void* ctx) +{ + struct cm *cm = ctx; + + switch (event.id) { + case WL_EVENT_MEDIA_CONNECTED: + wl_media_connected_cb(cm); + break; + + case WL_EVENT_CONN_FAILURE: + wl_conn_failure_cb(cm); + break; + + case WL_EVENT_MEDIA_DISCONNECTED: + CM_DPRINTF("CM: disconnected\n"); + wl_conn_lost_cb(cm); + break; + + case WL_EVENT_SCAN_COMPLETE: + wl_scan_complete_cb(cm); + break; + + default: + CM_DPRINTF("CM: unhandled event\n"); + }; +} + +static struct cm *cm = NULL; + + +/** + * Doesn't actually start the CM, just initializing. CM will run whenever + * an valid ssid is set through wl_cm_set_network() and wl_cm_start() + * has been called. + */ +wl_err_t +wl_cm_init(cm_scan_cb_t scan_cb, + cm_conn_cb_t conn_cb, + cm_disconn_cb_t disconn_cb, + void* ctx) +{ + if (cm != NULL) + return WL_FAILURE; + + cm = calloc(1, sizeof(struct cm)); + if (cm == NULL) { + CM_DPRINTF("CM: out of memory\n"); + return WL_FAILURE; + } + + if (wl_register_event_cb(wl_event_cb, cm) != WL_SUCCESS) { + CM_DPRINTF("CM: could not register event cb\n"); + return WL_FAILURE; + } + + cm->scan_cb = scan_cb; + cm->conn_cb = conn_cb; + cm->disconn_cb = disconn_cb; + cm->enabled = 0; + cm->ctx = ctx; + + CM_DPRINTF("CM: initialized\n"); + return WL_SUCCESS; +} + +wl_err_t +wl_cm_start(void) { + if (NULL == cm) + return WL_FAILURE; + + cm->enabled = 1; + return WL_SUCCESS; +} + +wl_err_t +wl_cm_stop(void) { + if (NULL == cm) + return WL_FAILURE; + + cm->enabled = 0; + return WL_SUCCESS; +} + + +/** + * Set the desired network which the connection manager should try to + * connect to. + * + * The ssid and bssid of the desired network should be specified. The ssid and + * bssid will be matched against the networks found during scan. If any + * parameter is null, it will always match. If both parameters are null, + * the first found network will be chosen. + * + * @param ssid The ssid of the desired network. If null, any ssid will match. + * @param bssid The bssid of the desired network. If null, any bssid will match. + * + */ +wl_err_t +wl_cm_set_network(struct wl_ssid_t *ssid, struct wl_mac_addr_t *bssid) +{ + if (cm == NULL) + return WL_FAILURE; + + if (ssid) + memcpy(&cm->candidate.ssid, ssid, sizeof(cm->candidate.ssid)); + else + cm->candidate.ssid.len = 0; + + if (bssid) + memcpy(&cm->candidate.bssid, bssid, + sizeof(cm->candidate.bssid)); + else + memset(&cm->candidate.bssid, 0xff, sizeof(cm->candidate.bssid)); + + if (cm->candidate.ssid.len) + wl_scan(); + + return WL_SUCCESS; +} +/* + * @} + */ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/wl_cm.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/wl_cm.h new file mode 100644 index 000000000..bbb65d979 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/wl_cm.h @@ -0,0 +1,51 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*! \page License + * Copyright (C) 2009, H&D Wireless AB All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of H&D Wireless AB may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY H&D WIRELESS AB ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND + * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef WL_CM_H +#define WL_CM_H + +#include +#include +#include + +typedef void (cm_scan_cb_t)(void* ctx); +typedef void (cm_conn_cb_t)(struct wl_network_t *net, void* ctx); +typedef void (cm_disconn_cb_t)(void* ctx); + +wl_err_t wl_cm_set_network(struct wl_ssid_t *ssid, struct wl_mac_addr_t *bssid); + +wl_err_t wl_cm_init(cm_scan_cb_t scan_cb, + cm_conn_cb_t conn_cb, + cm_disconn_cb_t disconn_cb, + void* ctx); + +wl_err_t wl_cm_start(void); +wl_err_t wl_cm_stop(void); + +#endif diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/src/wl_definitions.h b/external/arduino/avr/firmwares/wifishield/wifiHD/src/wl_definitions.h new file mode 100644 index 000000000..b07c203fc --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/src/wl_definitions.h @@ -0,0 +1,39 @@ +/* + * wl_definitions.h + * + * Created on: Mar 6, 2011 + * Author: mlf by Metodo2 srl + */ + +#ifndef WL_DEFINITIONS_H_ +#define WL_DEFINITIONS_H_ + +// Maximum size of a SSID +#define WL_SSID_MAX_LENGTH 32 +// Length of passphrase. Valid lengths are 8-63. +#define WL_WPA_KEY_MAX_LENGTH 63 +// Length of key in bytes. Valid values are 5 and 13. +#define WL_WEP_KEY_MAX_LENGTH 13 +// Size of a MAC-address or BSSID +#define WL_MAC_ADDR_LENGTH 6 +// Size of a MAC-address or BSSID +#define WL_IPV4_LENGTH 4 +// Maximum size of a SSID list +#define WL_NETWORKS_LIST_MAXNUM 10 +// Maxmium number of socket +#define MAX_SOCK_NUM 4 +//Maximum number of attempts to establish wifi connection +#define WL_MAX_ATTEMPT_CONNECTION 10 + +typedef enum { + WL_IDLE_STATUS, + WL_NO_SSID_AVAIL, + WL_SCAN_COMPLETED, + WL_CONNECTED, + WL_CONNECT_FAILED, + WL_CONNECTION_LOST, + WL_DISCONNECTED +} wl_status_t; + + +#endif /* WL_DEFINITIONS_H_ */ diff --git a/external/arduino/avr/firmwares/wifishield/wifiHD/wifiHD.cproj b/external/arduino/avr/firmwares/wifishield/wifiHD/wifiHD.cproj new file mode 100644 index 000000000..3d15941fd --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifiHD/wifiHD.cproj @@ -0,0 +1,1291 @@ + + + + 2.0 + 6.0 + com.Atmel.AVRGCC32 + 417e15db-488a-4b56-8d4e-fbe832b2b649 + wifiHD + AT32uc3a1256 + none + Importer + Executable + C + wifiHD + .elf + $(MSBuildProjectDirectory)\$(Configuration) + Native + com.atmel.avrdbg.tool.jtagicemk3 + true + + + + + + + + + + + + + + JTAG + + com.atmel.avrdbg.tool.jtagicemk3 + JTAGICE3 + J30200003078 + true + false + + + + 127.0.0.1 + 51999 + False + + + JTAG + + 250000 + 1000000 + 150000 + false + false + 0 + 0 + 0 + 0 + + + + 3.5.0 + false + + 0 + + + + + True + True + True + True + + + BOARD=ARDUINO + WITH_KEY + WITH_WPA + WITH_NO_DMA + DATAFLASH=1 + _INFO_DEBUG_=1 + + + + + ../src/SOFTWARE_FRAMEWORK/DRIVERS/PDCA + ../src/SOFTWARE_FRAMEWORK/DRIVERS/TC + ../src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS + ../src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX + ../src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC + ../src/SOFTWARE_FRAMEWORK/DRIVERS/EBI/SMC + ../src/SOFTWARE_FRAMEWORK/UTILS/DEBUG + ../src/SOFTWARE_FRAMEWORK/SERVICES/DELAY + ../src/SOFTWARE_FRAMEWORK/DRIVERS/USART + ../src/SOFTWARE_FRAMEWORK/DRIVERS/SPI + ../src/SOFTWARE_FRAMEWORK/DRIVERS/RTC + ../src/SOFTWARE_FRAMEWORK/DRIVERS/PM + ../src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO + ../src/SOFTWARE_FRAMEWORK/DRIVERS/EIC + ../src/CONFIG + ../src/SOFTWARE_FRAMEWORK/DRIVERS/CPU/CYCLE_COUNTER + ../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE + ../src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR + ../src/SOFTWARE_FRAMEWORK/UTILS + ../src/SOFTWARE_FRAMEWORK/DRIVERS/INTC + ../src/SOFTWARE_FRAMEWORK/BOARDS + ../src + ../src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include + ../src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4 + ../src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/include + ../src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD + + + Optimize for size (-Os) + -fdata-sections -ffunction-sections + True + True + True + True + -c -fmessage-length=0 + True + + + newlib_addons-at32ucr2-speed_opt + _ucr2_hd_spi_v2.7.0 + _ucr2_hd_wl_sta_intwpa_v2.7.0 + + + + + ../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS + ../src/SOFTWARE_FRAMEWORK/BOARDS + ../src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/v2.7.0/UCR2/GCC + + + True + True + True + -Wl,--gc-sections -Wl,-e,_trampoline -T../src/SOFTWARE_FRAMEWORK/UTILS/LINKER_SCRIPTS/AT32UC3A/1256/GCC/link_uc3a1256.lds + + + ../src/SOFTWARE_FRAMEWORK/DRIVERS/PDCA + ../src/SOFTWARE_FRAMEWORK/DRIVERS/TC + ../src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS + ../src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX + ../src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC + ../src/SOFTWARE_FRAMEWORK/DRIVERS/EBI/SMC + ../src/SOFTWARE_FRAMEWORK/UTILS/DEBUG + ../src/SOFTWARE_FRAMEWORK/SERVICES/DELAY + ../src/SOFTWARE_FRAMEWORK/DRIVERS/USART + ../src/SOFTWARE_FRAMEWORK/DRIVERS/SPI + ../src/SOFTWARE_FRAMEWORK/DRIVERS/RTC + ../src/SOFTWARE_FRAMEWORK/DRIVERS/PM + ../src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO + ../src/SOFTWARE_FRAMEWORK/DRIVERS/EIC + ../src/CONFIG + ../src/SOFTWARE_FRAMEWORK/DRIVERS/CPU/CYCLE_COUNTER + ../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE + ../src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR + ../src/SOFTWARE_FRAMEWORK/UTILS + ../src/SOFTWARE_FRAMEWORK/DRIVERS/INTC + ../src/SOFTWARE_FRAMEWORK/BOARDS + + + -Wa,-g + + + ../src/SOFTWARE_FRAMEWORK/DRIVERS/PDCA + ../src/SOFTWARE_FRAMEWORK/DRIVERS/TC + ../src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS + ../src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX + ../src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC + ../src/SOFTWARE_FRAMEWORK/DRIVERS/EBI/SMC + ../src/SOFTWARE_FRAMEWORK/UTILS/DEBUG + ../src/SOFTWARE_FRAMEWORK/SERVICES/DELAY + ../src/SOFTWARE_FRAMEWORK/DRIVERS/USART + ../src/SOFTWARE_FRAMEWORK/DRIVERS/SPI + ../src/SOFTWARE_FRAMEWORK/DRIVERS/RTC + ../src/SOFTWARE_FRAMEWORK/DRIVERS/PM + ../src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO + ../src/SOFTWARE_FRAMEWORK/DRIVERS/EIC + ../src/CONFIG + ../src/SOFTWARE_FRAMEWORK/DRIVERS/CPU/CYCLE_COUNTER + ../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE + ../src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR + ../src/SOFTWARE_FRAMEWORK/UTILS + ../src/SOFTWARE_FRAMEWORK/DRIVERS/INTC + ../src/SOFTWARE_FRAMEWORK/BOARDS + + + + + + + + + True + True + True + True + false + false + + + BOARD=ARDUINO + NO_SYS + _DEBUG_ + _ASSERT_ENABLE_ + WITH_KEY + WITH_WPA + WITH_NO_DMA + DATAFLASH=1 + _INFO_DEBUG_=1 + + + + + ../src/SOFTWARE_FRAMEWORK/DRIVERS/PDCA + ../src/SOFTWARE_FRAMEWORK/DRIVERS/TC + ../src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS + ../src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX + ../src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC + ../src/SOFTWARE_FRAMEWORK/DRIVERS/EBI/SMC + ../src/SOFTWARE_FRAMEWORK/UTILS/DEBUG + ../src/SOFTWARE_FRAMEWORK/SERVICES/DELAY + ../src/SOFTWARE_FRAMEWORK/DRIVERS/USART + ../src/SOFTWARE_FRAMEWORK/DRIVERS/SPI + ../src/SOFTWARE_FRAMEWORK/DRIVERS/RTC + ../src/SOFTWARE_FRAMEWORK/DRIVERS/PM + ../src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO + ../src/SOFTWARE_FRAMEWORK/DRIVERS/EIC + ../src/CONFIG + ../src/SOFTWARE_FRAMEWORK/DRIVERS/CPU/CYCLE_COUNTER + ../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE + ../src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR + ../src/SOFTWARE_FRAMEWORK/UTILS + ../src/SOFTWARE_FRAMEWORK/DRIVERS/INTC + ../src/SOFTWARE_FRAMEWORK/BOARDS + ../src + ../src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include + ../src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4 + ../src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/include + ../src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD + + + Optimize (-O1) + -fdata-sections -ffunction-sections + true + false + false + false + false + true + true + false + false + false + Maximum (-g3) + false + false + true + false + false + false + false + -c -fmessage-length=0 + false + true + false + false + false + false + + + newlib_addons-at32ucr2-speed_opt + _ucr2_hd_spi_v2.7.0 + _ucr2_hd_wl_sta_intwpa_v2.7.0 + + + + + ../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS + ../src/SOFTWARE_FRAMEWORK/BOARDS + ../src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/v2.7.0/UCR2/GCC + + + true + false + false + false + false + true + true + + + ../src/SOFTWARE_FRAMEWORK/DRIVERS/PDCA + ../src/SOFTWARE_FRAMEWORK/DRIVERS/TC + ../src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS + ../src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX + ../src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC + ../src/SOFTWARE_FRAMEWORK/DRIVERS/EBI/SMC + ../src/SOFTWARE_FRAMEWORK/UTILS/DEBUG + ../src/SOFTWARE_FRAMEWORK/SERVICES/DELAY + ../src/SOFTWARE_FRAMEWORK/DRIVERS/USART + ../src/SOFTWARE_FRAMEWORK/DRIVERS/SPI + ../src/SOFTWARE_FRAMEWORK/DRIVERS/RTC + ../src/SOFTWARE_FRAMEWORK/DRIVERS/PM + ../src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO + ../src/SOFTWARE_FRAMEWORK/DRIVERS/EIC + ../src/CONFIG + ../src/SOFTWARE_FRAMEWORK/DRIVERS/CPU/CYCLE_COUNTER + ../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE + ../src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR + ../src/SOFTWARE_FRAMEWORK/UTILS + ../src/SOFTWARE_FRAMEWORK/DRIVERS/INTC + ../src/SOFTWARE_FRAMEWORK/BOARDS + + + false + Default (-g) + -Wa,-g + + + ../src/SOFTWARE_FRAMEWORK/DRIVERS/PDCA + ../src/SOFTWARE_FRAMEWORK/DRIVERS/TC + ../src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS + ../src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX + ../src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC + ../src/SOFTWARE_FRAMEWORK/DRIVERS/EBI/SMC + ../src/SOFTWARE_FRAMEWORK/UTILS/DEBUG + ../src/SOFTWARE_FRAMEWORK/SERVICES/DELAY + ../src/SOFTWARE_FRAMEWORK/DRIVERS/USART + ../src/SOFTWARE_FRAMEWORK/DRIVERS/SPI + ../src/SOFTWARE_FRAMEWORK/DRIVERS/RTC + ../src/SOFTWARE_FRAMEWORK/DRIVERS/PM + ../src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO + ../src/SOFTWARE_FRAMEWORK/DRIVERS/EIC + ../src/CONFIG + ../src/SOFTWARE_FRAMEWORK/DRIVERS/CPU/CYCLE_COUNTER + ../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE + ../src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR + ../src/SOFTWARE_FRAMEWORK/UTILS + ../src/SOFTWARE_FRAMEWORK/DRIVERS/INTC + ../src/SOFTWARE_FRAMEWORK/BOARDS + + + false + false + Default (-Wa,-g) + + + + + bin\Debug_512\ + + + True + True + True + True + false + false + + + BOARD=ARDUINO + _APP_DEBUG_ + _DEBUG_ + _ASSERT_ENABLE_ + EXT_BOARD=SPB104 + WITH_KEY + WITH_WPA + WITH_NO_DMA + LWIP_DEBUG + _INFO_DEBUG_=1 + + + + + ../src/SOFTWARE_FRAMEWORK/DRIVERS/PDCA + ../src/SOFTWARE_FRAMEWORK/DRIVERS/TC + ../src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS + ../src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX + ../src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC + ../src/SOFTWARE_FRAMEWORK/DRIVERS/EBI/SMC + ../src/SOFTWARE_FRAMEWORK/UTILS/DEBUG + ../src/SOFTWARE_FRAMEWORK/SERVICES/DELAY + ../src/SOFTWARE_FRAMEWORK/DRIVERS/USART + ../src/SOFTWARE_FRAMEWORK/DRIVERS/SPI + ../src/SOFTWARE_FRAMEWORK/DRIVERS/RTC + ../src/SOFTWARE_FRAMEWORK/DRIVERS/PM + ../src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO + ../src/SOFTWARE_FRAMEWORK/DRIVERS/EIC + ../src/CONFIG + ../src/SOFTWARE_FRAMEWORK/DRIVERS/CPU/CYCLE_COUNTER + ../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE + ../src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR + ../src/SOFTWARE_FRAMEWORK/UTILS + ../src/SOFTWARE_FRAMEWORK/DRIVERS/INTC + ../src/SOFTWARE_FRAMEWORK/BOARDS + ../src + ../src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include + ../src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4 + ../src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/include + ../src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD + + + Optimize (-O1) + -fdata-sections + true + false + false + false + false + true + false + false + false + false + Maximum (-g3) + false + false + true + false + false + false + false + -c -fmessage-length=0 + false + true + false + false + false + false + + + newlib_addons-at32ucr2-speed_opt + _ucr2_hd_spi_standalone_v2.1.1 + _ucr2_hd_wl_standalone_v2.1.1 + + + + + ../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS + ../src/SOFTWARE_FRAMEWORK/BOARDS + ../src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/v2.1.1/UCR2/GCC + + + true + false + false + false + false + true + true + + + ../src/SOFTWARE_FRAMEWORK/DRIVERS/PDCA + ../src/SOFTWARE_FRAMEWORK/DRIVERS/TC + ../src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS + ../src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX + ../src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC + ../src/SOFTWARE_FRAMEWORK/DRIVERS/EBI/SMC + ../src/SOFTWARE_FRAMEWORK/UTILS/DEBUG + ../src/SOFTWARE_FRAMEWORK/SERVICES/DELAY + ../src/SOFTWARE_FRAMEWORK/DRIVERS/USART + ../src/SOFTWARE_FRAMEWORK/DRIVERS/SPI + ../src/SOFTWARE_FRAMEWORK/DRIVERS/RTC + ../src/SOFTWARE_FRAMEWORK/DRIVERS/PM + ../src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO + ../src/SOFTWARE_FRAMEWORK/DRIVERS/EIC + ../src/CONFIG + ../src/SOFTWARE_FRAMEWORK/DRIVERS/CPU/CYCLE_COUNTER + ../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE + ../src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR + ../src/SOFTWARE_FRAMEWORK/UTILS + ../src/SOFTWARE_FRAMEWORK/DRIVERS/INTC + ../src/SOFTWARE_FRAMEWORK/BOARDS + + + false + Default (-g) + -Wa,-g + + + ../src/SOFTWARE_FRAMEWORK/DRIVERS/PDCA + ../src/SOFTWARE_FRAMEWORK/DRIVERS/TC + ../src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS + ../src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX + ../src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC + ../src/SOFTWARE_FRAMEWORK/DRIVERS/EBI/SMC + ../src/SOFTWARE_FRAMEWORK/UTILS/DEBUG + ../src/SOFTWARE_FRAMEWORK/SERVICES/DELAY + ../src/SOFTWARE_FRAMEWORK/DRIVERS/USART + ../src/SOFTWARE_FRAMEWORK/DRIVERS/SPI + ../src/SOFTWARE_FRAMEWORK/DRIVERS/RTC + ../src/SOFTWARE_FRAMEWORK/DRIVERS/PM + ../src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO + ../src/SOFTWARE_FRAMEWORK/DRIVERS/EIC + ../src/CONFIG + ../src/SOFTWARE_FRAMEWORK/DRIVERS/CPU/CYCLE_COUNTER + ../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE + ../src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR + ../src/SOFTWARE_FRAMEWORK/UTILS + ../src/SOFTWARE_FRAMEWORK/DRIVERS/INTC + ../src/SOFTWARE_FRAMEWORK/BOARDS + + + false + false + Default (-Wa,-g) + + + + + bin\Release_512\ + + + True + True + True + True + false + false + + + BOARD=ARDUINO + _ASSERT_ENABLE_ + EXT_BOARD=SPB104 + WITH_KEY + WITH_WPA + WITH_NO_DMA + LWIP_DEBUG + _INFO_DEBUG_=1 + + + + + ../src/SOFTWARE_FRAMEWORK/DRIVERS/PDCA + ../src/SOFTWARE_FRAMEWORK/DRIVERS/TC + ../src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS + ../src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX + ../src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC + ../src/SOFTWARE_FRAMEWORK/DRIVERS/EBI/SMC + ../src/SOFTWARE_FRAMEWORK/UTILS/DEBUG + ../src/SOFTWARE_FRAMEWORK/SERVICES/DELAY + ../src/SOFTWARE_FRAMEWORK/DRIVERS/USART + ../src/SOFTWARE_FRAMEWORK/DRIVERS/SPI + ../src/SOFTWARE_FRAMEWORK/DRIVERS/RTC + ../src/SOFTWARE_FRAMEWORK/DRIVERS/PM + ../src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO + ../src/SOFTWARE_FRAMEWORK/DRIVERS/EIC + ../src/CONFIG + ../src/SOFTWARE_FRAMEWORK/DRIVERS/CPU/CYCLE_COUNTER + ../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE + ../src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR + ../src/SOFTWARE_FRAMEWORK/UTILS + ../src/SOFTWARE_FRAMEWORK/DRIVERS/INTC + ../src/SOFTWARE_FRAMEWORK/BOARDS + ../src + ../src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include + ../src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4 + ../src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/include + ../src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD + + + -fdata-sections + true + false + false + false + false + true + false + false + false + false + false + false + true + false + false + false + false + -c -fmessage-length=0 + false + true + false + false + false + false + + + newlib_addons-at32ucr2-speed_opt + _ucr2_hd_spi_standalone_v2.1.1 + _ucr2_hd_wl_standalone_v2.1.1 + + + + + ../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS + ../src/SOFTWARE_FRAMEWORK/BOARDS + ../src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/v2.1.1/UCR2/GCC + + + true + false + false + false + false + true + true + + + ../src/SOFTWARE_FRAMEWORK/DRIVERS/PDCA + ../src/SOFTWARE_FRAMEWORK/DRIVERS/TC + ../src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS + ../src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX + ../src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC + ../src/SOFTWARE_FRAMEWORK/DRIVERS/EBI/SMC + ../src/SOFTWARE_FRAMEWORK/UTILS/DEBUG + ../src/SOFTWARE_FRAMEWORK/SERVICES/DELAY + ../src/SOFTWARE_FRAMEWORK/DRIVERS/USART + ../src/SOFTWARE_FRAMEWORK/DRIVERS/SPI + ../src/SOFTWARE_FRAMEWORK/DRIVERS/RTC + ../src/SOFTWARE_FRAMEWORK/DRIVERS/PM + ../src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO + ../src/SOFTWARE_FRAMEWORK/DRIVERS/EIC + ../src/CONFIG + ../src/SOFTWARE_FRAMEWORK/DRIVERS/CPU/CYCLE_COUNTER + ../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE + ../src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR + ../src/SOFTWARE_FRAMEWORK/UTILS + ../src/SOFTWARE_FRAMEWORK/DRIVERS/INTC + ../src/SOFTWARE_FRAMEWORK/BOARDS + + + false + -Wa,-g + + + ../src/SOFTWARE_FRAMEWORK/DRIVERS/PDCA + ../src/SOFTWARE_FRAMEWORK/DRIVERS/TC + ../src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS + ../src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX + ../src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC + ../src/SOFTWARE_FRAMEWORK/DRIVERS/EBI/SMC + ../src/SOFTWARE_FRAMEWORK/UTILS/DEBUG + ../src/SOFTWARE_FRAMEWORK/SERVICES/DELAY + ../src/SOFTWARE_FRAMEWORK/DRIVERS/USART + ../src/SOFTWARE_FRAMEWORK/DRIVERS/SPI + ../src/SOFTWARE_FRAMEWORK/DRIVERS/RTC + ../src/SOFTWARE_FRAMEWORK/DRIVERS/PM + ../src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO + ../src/SOFTWARE_FRAMEWORK/DRIVERS/EIC + ../src/CONFIG + ../src/SOFTWARE_FRAMEWORK/DRIVERS/CPU/CYCLE_COUNTER + ../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE + ../src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR + ../src/SOFTWARE_FRAMEWORK/UTILS + ../src/SOFTWARE_FRAMEWORK/DRIVERS/INTC + ../src/SOFTWARE_FRAMEWORK/BOARDS + + + false + false + + + + + + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + + compile + + + compile + + + + + compile + + + + compile + + + compile + + + + compile + + + compile + + + compile + + + + + + + + + compile + + + compile + + + compile + + + compile + + + compile + + + + compile + + + compile + + + compile + + + + + compile + + + compile + + + compile + + + + + compile + + + compile + + + compile + + + + + + compile + + + + + compile + + + compile + + + + compile + + + compile + + + + compile + + + compile + + + + compile + + + compile + + + compile + + + + compile + + + compile + + + + compile + + + compile + + + compile + + + compile + + + compile + + + + compile + + + compile + + + + compile + + + compile + + + + compile + + + compile + + + + compile + + + compile + + + + + compile + + + compile + + + + + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + + compile + + + compile + + + compile + + + compile + + + + compile + + + compile + + + + + compile + + + + + compile + + + + compile + + + compile + + + + compile + + + + compile + + + + + compile + + + compile + + + + compile + + + compile + + + compile + + + + compile + + + compile + + + compile + + + compile + + + + + compile + + + + compile + + + compile + + + compile + + + compile + + + compile + + + + + + + compile + + + + + compile + + + + compile + + + compile + + + compile + + + compile + + + + + compile + + + \ No newline at end of file diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/.cproject b/external/arduino/avr/firmwares/wifishield/wifi_dnld/.cproject new file mode 100644 index 000000000..286dad7b9 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifi_dnld/.cproject @@ -0,0 +1,1281 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/.project b/external/arduino/avr/firmwares/wifishield/wifi_dnld/.project new file mode 100644 index 000000000..aa3047b51 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifi_dnld/.project @@ -0,0 +1,70 @@ + + + wifi_dnld + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + ?name? + + + + org.eclipse.cdt.make.core.append_environment + true + + + org.eclipse.cdt.make.core.buildArguments + + + + org.eclipse.cdt.make.core.buildCommand + make + + + org.eclipse.cdt.make.core.buildLocation + ${workspace_loc:/wifi_dnld/Debug} + + + org.eclipse.cdt.make.core.contents + org.eclipse.cdt.make.core.activeConfigSettings + + + org.eclipse.cdt.make.core.enableAutoBuild + false + + + org.eclipse.cdt.make.core.enableCleanBuild + true + + + org.eclipse.cdt.make.core.enableFullBuild + true + + + org.eclipse.cdt.make.core.stopOnError + true + + + org.eclipse.cdt.make.core.useDefaultBuildCmd + true + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + + + + + + com.atmel.avr32.core.nature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/Release/wifi_dnld.elf b/external/arduino/avr/firmwares/wifishield/wifi_dnld/Release/wifi_dnld.elf new file mode 100644 index 000000000..11ec3ddc7 Binary files /dev/null and b/external/arduino/avr/firmwares/wifishield/wifi_dnld/Release/wifi_dnld.elf differ diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/CONFIG/conf_access.h b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/CONFIG/conf_access.h new file mode 100644 index 000000000..23e9b3450 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/CONFIG/conf_access.h @@ -0,0 +1,170 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Memory access control configuration file. + * + * This file contains the possible external configuration of the memory access + * control. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _CONF_ACCESS_H_ +#define _CONF_ACCESS_H_ + +#include "compiler.h" +#include "board.h" + + +/*! \name Activation of Logical Unit Numbers + */ +//! @{ +#define LUN_0 DISABLE //!< On-Chip Virtual Memory. +#define LUN_1 ENABLE //!< AT45DBX Data Flash. +#define LUN_2 DISABLE //!< SD/MMC Card over SPI. +#define LUN_3 DISABLE +#define LUN_4 DISABLE +#define LUN_5 DISABLE +#define LUN_6 DISABLE +#define LUN_7 DISABLE +#define LUN_USB DISABLE //!< Host Mass-Storage Memory. +//! @} + +/*! \name LUN 0 Definitions + */ +//! @{ +#define VIRTUAL_MEM LUN_0 +#define LUN_ID_VIRTUAL_MEM LUN_ID_0 +#define LUN_0_INCLUDE "virtual_mem.h" +#define Lun_0_test_unit_ready virtual_test_unit_ready +#define Lun_0_read_capacity virtual_read_capacity +#define Lun_0_wr_protect virtual_wr_protect +#define Lun_0_removal virtual_removal +#define Lun_0_usb_read_10 virtual_usb_read_10 +#define Lun_0_usb_write_10 virtual_usb_write_10 +#define Lun_0_mem_2_ram virtual_mem_2_ram +#define Lun_0_ram_2_mem virtual_ram_2_mem +#define LUN_0_NAME "\"On-Chip Virtual Memory\"" +//! @} + +/*! \name LUN 1 Definitions + */ +//! @{ +#define AT45DBX_MEM LUN_1 +#define LUN_ID_AT45DBX_MEM LUN_ID_1 +#define LUN_1_INCLUDE "at45dbx_mem.h" +#define Lun_1_test_unit_ready at45dbx_test_unit_ready +#define Lun_1_read_capacity at45dbx_read_capacity +#define Lun_1_wr_protect at45dbx_wr_protect +#define Lun_1_removal at45dbx_removal +#define Lun_1_usb_read_10 at45dbx_usb_read_10 +#define Lun_1_usb_write_10 at45dbx_usb_write_10 +#define Lun_1_mem_2_ram at45dbx_df_2_ram +#define Lun_1_ram_2_mem at45dbx_ram_2_df +#define LUN_1_NAME "\"AT45DBX Data Flash\"" +//! @} + +/*! \name LUN 2 Definitions + */ +//! @{ +#define SD_MMC_SPI_MEM LUN_2 +#define LUN_ID_SD_MMC_SPI_MEM LUN_ID_2 +#define LUN_2_INCLUDE "sd_mmc_spi_mem.h" +#define Lun_2_test_unit_ready sd_mmc_spi_test_unit_ready +#define Lun_2_read_capacity sd_mmc_spi_read_capacity +#define Lun_2_wr_protect sd_mmc_spi_wr_protect +#define Lun_2_removal sd_mmc_spi_removal +#define Lun_2_usb_read_10 sd_mmc_spi_usb_read_10 +#define Lun_2_usb_write_10 sd_mmc_spi_usb_write_10 +#define Lun_2_mem_2_ram sd_mmc_spi_mem_2_ram +#define Lun_2_ram_2_mem sd_mmc_spi_ram_2_mem +#define LUN_2_NAME "\"SD/MMC Card over SPI\"" +//! @} + +/*! \name USB LUNs Definitions + */ +//! @{ +#define MEM_USB LUN_USB +#define LUN_ID_MEM_USB LUN_ID_USB +#define LUN_USB_INCLUDE "host_mem.h" +#define Lun_usb_test_unit_ready(lun) host_test_unit_ready(lun) +#define Lun_usb_read_capacity(lun, nb_sect) host_read_capacity(lun, nb_sect) +#define Lun_usb_read_sector_size(lun) host_read_sector_size(lun) +#define Lun_usb_wr_protect(lun) host_wr_protect(lun) +#define Lun_usb_removal() host_removal() +#define Lun_usb_mem_2_ram(addr, ram) host_read_10_ram(addr, ram) +#define Lun_usb_ram_2_mem(addr, ram) host_write_10_ram(addr, ram) +#define LUN_USB_NAME "\"Host Mass-Storage Memory\"" +//! @} + +/*! \name Actions Associated with Memory Accesses + * + * Write here the action to associate with each memory access. + * + * \warning Be careful not to waste time in order not to disturb the functions. + */ +//! @{ +#define memory_start_read_action(nb_sectors) +#define memory_stop_read_action() +#define memory_start_write_action(nb_sectors) +#define memory_stop_write_action() +//! @} + +/*! \name Activation of Interface Features + */ +//! @{ +#define ACCESS_USB DISABLED //!< MEM <-> USB interface. +#define ACCESS_MEM_TO_RAM ENABLED //!< MEM <-> RAM interface. +#define ACCESS_STREAM DISABLED //!< Streaming MEM <-> MEM interface. +#define ACCESS_STREAM_RECORD DISABLED //!< Streaming MEM <-> MEM interface in record mode. +#define ACCESS_MEM_TO_MEM DISABLED //!< MEM <-> MEM interface. +#define ACCESS_CODEC DISABLED //!< Codec interface. +//! @} + +/*! \name Specific Options for Access Control + */ +//! @{ +#define GLOBAL_WR_PROTECT DISABLED //!< Management of a global write protection. +//! @} + + +#endif // _CONF_ACCESS_H_ diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/CONFIG/conf_at45dbx.h b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/CONFIG/conf_at45dbx.h new file mode 100644 index 000000000..3280e4fc1 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/CONFIG/conf_at45dbx.h @@ -0,0 +1,83 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief AT45DBX configuration file. + * + * This file contains the possible external configuration of the AT45DBX. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with an SPI module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _CONF_AT45DBX_H_ +#define _CONF_AT45DBX_H_ + + +#include "conf_access.h" + +#if AT45DBX_MEM == DISABLE + #error conf_at45dbx.h is #included although AT45DBX_MEM is disabled +#endif + + +#include "at45dbx.h" + + +//_____ D E F I N I T I O N S ______________________________________________ + +//! Size of AT45DBX data flash memories to manage. +#define AT45DBX_MEM_SIZE AT45DBX_1MB + +//! Number of AT45DBX components to manage. +#define AT45DBX_MEM_CNT 1 + +//! First chip select used by AT45DBX components on the SPI module instance. +//! AT45DBX_SPI_NPCS0_PIN always corresponds to this first NPCS, whatever it is. +#define AT45DBX_SPI_FIRST_NPCS AT45DBX_SPI_NPCS + +//! SPI master speed in Hz. +#define AT45DBX_SPI_MASTER_SPEED 12000000 + +//! Number of bits in each SPI transfer. +#define AT45DBX_SPI_BITS 8 + + +#endif // _CONF_AT45DBX_H_ diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/Doc/SPB104 product brief.pdf b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/Doc/SPB104 product brief.pdf new file mode 100644 index 000000000..8705cb148 Binary files /dev/null and b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/Doc/SPB104 product brief.pdf differ diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/Doc/gettingstarted.pdf b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/Doc/gettingstarted.pdf new file mode 100644 index 000000000..7c37693b5 Binary files /dev/null and b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/Doc/gettingstarted.pdf differ diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/ASM/trampoline.x b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/ASM/trampoline.x new file mode 100644 index 000000000..c12712150 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/ASM/trampoline.x @@ -0,0 +1,74 @@ +/* This file is part of the ATMEL AVR32-SoftwareFramework-AT32UC3A-1.4.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief AVR32 UC3 ISP trampoline. + * + * In order to be able to program a project with both BatchISP and JTAGICE mkII + * without having to take the general-purpose fuses into consideration, add this + * file to the project and change the program entry point to _trampoline. + * + * The pre-programmed ISP will be erased if JTAGICE mkII is used. + * + * - Compiler: GNU GCC for AVR32 + * - Supported devices: All AVR32UC devices can be used. + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (C) 2006-2008, Atmel Corporation All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of ATMEL may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND + * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + +#include "conf_isp.h" + + +//! @{ +//! \verbatim + + + // This must be linked @ 0x80000000 if it is to be run upon reset. + .section .reset, "ax", @progbits + + + .global _trampoline + .type _trampoline, @function +_trampoline: + // Jump to program start. + rjmp program_start + + .org PROGRAM_START_OFFSET +program_start: + // Jump to the C runtime startup routine. + lda.w pc, _stext + + +//! \endverbatim +//! @} diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/BOARDS/ARDUINO/arduino.h b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/BOARDS/ARDUINO/arduino.h new file mode 100644 index 000000000..fbdd466ef --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/BOARDS/ARDUINO/arduino.h @@ -0,0 +1,234 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief AT32UC3A EVK1100 board header file. + * + * This file contains definitions and services related to the features of the + * EVK1100 board rev. B and C. + * + * To use this board, define BOARD=EVK1100. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 AT32UC3A devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _ARDUINO_H_ +#define _ARDUINO_H_ + +#include "compiler.h" + +#ifdef __AVR32_ABI_COMPILER__ // Automatically defined when compiling for AVR32, not when assembling. +# include "led.h" +#endif // __AVR32_ABI_COMPILER__ + + +/*! \name Oscillator Definitions + */ +//! @{ + +// RCOsc has no custom calibration by default. Set the following definition to +// the appropriate value if a custom RCOsc calibration has been applied to your +// part. +//#define FRCOSC AVR32_PM_RCOSC_FREQUENCY //!< RCOsc frequency: Hz. + +#define FOSC32 32768 //!< Osc32 frequency: Hz. +#define OSC32_STARTUP AVR32_PM_OSCCTRL32_STARTUP_8192_RCOSC //!< Osc32 startup time: RCOsc periods. + +#define FOSC0 12000000 //!< Osc0 frequency: Hz. +#define OSC0_STARTUP AVR32_PM_OSCCTRL0_STARTUP_2048_RCOSC //!< Osc0 startup time: RCOsc periods. + +// Osc1 crystal is not mounted by default. Set the following definitions to the +// appropriate values if a custom Osc1 crystal is mounted on your board. +//#define FOSC1 12000000 //!< Osc1 frequency: Hz. +//#define OSC1_STARTUP AVR32_PM_OSCCTRL1_STARTUP_2048_RCOSC //!< Osc1 startup time: RCOsc periods. + +//! @} + + +//! Number of LEDs. +#define LED_COUNT 3 + +/*! \name GPIO Connections of LEDs + */ +//! @{ +#define LED0_GPIO AVR32_PIN_PB19 +#define LED1_GPIO AVR32_PIN_PB20 +#define LED2_GPIO AVR32_PIN_PB21 +//! @} + +/*! \name PWM Channels of LEDs + */ +//! @{ +#define LED0_PWM 0 +#define LED1_PWM 1 +#define LED2_PWM 2 +//! @} + +/*! \name PWM Functions of LEDs + */ +//! @{ +#define LED0_PWM_FUNCTION AVR32_PWM_0_FUNCTION +#define LED1_PWM_FUNCTION AVR32_PWM_1_FUNCTION +#define LED2_PWM_FUNCTION AVR32_PWM_2_FUNCTION +//! @} + +/*! \name Color Identifiers of LEDs to Use with LED Functions + */ +//! @{ +#define LED_MONO0_GREEN LED0 +#define LED_MONO1_GREEN LED1 +#define LED_MONO2_GREEN LED2 +//! @} + +#if 0 +/*! \name SPI Connections of the DIP204 LCD + */ +//! @{ +#define DIP204_SPI (&AVR32_SPI1) +#define DIP204_SPI_NPCS 2 +#define DIP204_SPI_SCK_PIN AVR32_SPI1_SCK_0_0_PIN +#define DIP204_SPI_SCK_FUNCTION AVR32_SPI1_SCK_0_0_FUNCTION +#define DIP204_SPI_MISO_PIN AVR32_SPI1_MISO_0_0_PIN +#define DIP204_SPI_MISO_FUNCTION AVR32_SPI1_MISO_0_0_FUNCTION +#define DIP204_SPI_MOSI_PIN AVR32_SPI1_MOSI_0_0_PIN +#define DIP204_SPI_MOSI_FUNCTION AVR32_SPI1_MOSI_0_0_FUNCTION +#define DIP204_SPI_NPCS_PIN AVR32_SPI1_NPCS_2_0_PIN +#define DIP204_SPI_NPCS_FUNCTION AVR32_SPI1_NPCS_2_0_FUNCTION +//! @} + +/*! \name GPIO and PWM Connections of the DIP204 LCD Backlight + */ +//! @{ +#define DIP204_BACKLIGHT_PIN AVR32_PIN_PB18 +#define DIP204_PWM_CHANNEL 6 +#define DIP204_PWM_PIN AVR32_PWM_6_PIN +#define DIP204_PWM_FUNCTION AVR32_PWM_6_FUNCTION +//! @} +#endif + +/*! \name SPI Connections of the AT45DBX Data Flash Memory + */ +//! @{ +#define AT45DBX_SPI (&AVR32_SPI1) +#define AT45DBX_SPI_NPCS 2 +#define AT45DBX_SPI_SCK_PIN AVR32_SPI1_SCK_0_0_PIN +#define AT45DBX_SPI_SCK_FUNCTION AVR32_SPI1_SCK_0_0_FUNCTION +#define AT45DBX_SPI_MISO_PIN AVR32_SPI1_MISO_0_0_PIN +#define AT45DBX_SPI_MISO_FUNCTION AVR32_SPI1_MISO_0_0_FUNCTION +#define AT45DBX_SPI_MOSI_PIN AVR32_SPI1_MOSI_0_0_PIN +#define AT45DBX_SPI_MOSI_FUNCTION AVR32_SPI1_MOSI_0_0_FUNCTION +#define AT45DBX_SPI_NPCS2_PIN AVR32_SPI1_NPCS_2_0_PIN +#define AT45DBX_SPI_NPCS2_FUNCTION AVR32_SPI1_NPCS_2_0_FUNCTION +#define AT45DBX_CHIP_RESET AVR32_PIN_PA02 +//! @} + + +/*! \name GPIO and SPI Connections of the SD/MMC Connector + */ +//! @{ +//#define SD_MMC_CARD_DETECT_PIN AVR32_PIN_PA02 +//#define SD_MMC_WRITE_PROTECT_PIN AVR32_PIN_PA07 +#define SD_MMC_SPI (&AVR32_SPI1) +#define SD_MMC_SPI_NPCS 1 +#define SD_MMC_SPI_SCK_PIN AVR32_SPI1_SCK_0_0_PIN +#define SD_MMC_SPI_SCK_FUNCTION AVR32_SPI1_SCK_0_0_FUNCTION +#define SD_MMC_SPI_MISO_PIN AVR32_SPI1_MISO_0_0_PIN +#define SD_MMC_SPI_MISO_FUNCTION AVR32_SPI1_MISO_0_0_FUNCTION +#define SD_MMC_SPI_MOSI_PIN AVR32_SPI1_MOSI_0_0_PIN +#define SD_MMC_SPI_MOSI_FUNCTION AVR32_SPI1_MOSI_0_0_FUNCTION +#define SD_MMC_SPI_NPCS_PIN AVR32_SPI1_NPCS_1_0_PIN +#define SD_MMC_SPI_NPCS_FUNCTION AVR32_SPI1_NPCS_1_0_FUNCTION +//! @} + +/* Timer Counter to generate clock for WiFi chip*/ +# define WIFI_TC (&AVR32_TC) +# define WIFI_TC_CHANNEL_ID 0 +# define WIFI_TC_CHANNEL_PIN AVR32_TC_A0_0_0_PIN +# define WIFI_TC_CHANNEL_FUNCTION AVR32_TC_A0_0_0_FUNCTION +// Note that TC_A0_0_0 pin is pin 6 (PB23) on AT32UC3A1512 QFP100. + +/* Pin related to WiFi chip communication */ +#ifndef USE_POLL + #define USE_POLL +#endif + #define SPI_CS 0 + #define AVR32_SPI AVR32_SPI1 + #define GPIO_IRQ_PIN AVR32_PIN_PA03 + #define GPIO_IRQ AVR32_GPIO_IRQ_7 + #define GPIO_W_RESET_PIN AVR32_PIN_PA07 + #define GPIO_W_SHUTDOWN_PIN AVR32_PIN_PA09 + +/* Pin related to shield communication */ + #define ARDUINO_HANDSHAKE_PIN AVR32_PIN_PA25 + + #define AVR32_PDCA_PID_TX AVR32_PDCA_PID_SPI1_TX + #define AVR32_PDCA_PID_RX AVR32_PDCA_PID_SPI1_RX + + +#if 0 +/*! \name TWI Connections of the Spare TWI Connector + */ +//! @{ +#define SPARE_TWI (&AVR32_TWI) +#define SPARE_TWI_SCL_PIN AVR32_TWI_SCL_0_0_PIN +#define SPARE_TWI_SCL_FUNCTION AVR32_TWI_SCL_0_0_FUNCTION +#define SPARE_TWI_SDA_PIN AVR32_TWI_SDA_0_0_PIN +#define SPARE_TWI_SDA_FUNCTION AVR32_TWI_SDA_0_0_FUNCTION +//! @} + + +/*! \name SPI Connections of the Spare SPI Connector + */ +//! @{ +#define SPARE_SPI (&AVR32_SPI0) +#define SPARE_SPI_NPCS 0 +#define SPARE_SPI_SCK_PIN AVR32_SPI0_SCK_0_0_PIN +#define SPARE_SPI_SCK_FUNCTION AVR32_SPI0_SCK_0_0_FUNCTION +#define SPARE_SPI_MISO_PIN AVR32_SPI0_MISO_0_0_PIN +#define SPARE_SPI_MISO_FUNCTION AVR32_SPI0_MISO_0_0_FUNCTION +#define SPARE_SPI_MOSI_PIN AVR32_SPI0_MOSI_0_0_PIN +#define SPARE_SPI_MOSI_FUNCTION AVR32_SPI0_MOSI_0_0_FUNCTION +#define SPARE_SPI_NPCS_PIN AVR32_SPI0_NPCS_0_0_PIN +#define SPARE_SPI_NPCS_FUNCTION AVR32_SPI0_NPCS_0_0_FUNCTION +//! @} +#endif + +#endif // _ARDUINO_H_ diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/BOARDS/ARDUINO/led.c b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/BOARDS/ARDUINO/led.c new file mode 100644 index 000000000..d7cd439db --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/BOARDS/ARDUINO/led.c @@ -0,0 +1,346 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief AT32UC3A EVK1100 board LEDs support package. + * + * This file contains definitions and services related to the LED features of + * the EVK1100 board. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 AT32UC3A devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#include +#include "preprocessor.h" +#include "compiler.h" +#include "arduino.h" +#include "led.h" + + +//! Structure describing LED hardware connections. +typedef const struct +{ + struct + { + U32 PORT; //!< LED GPIO port. + U32 PIN_MASK; //!< Bit-mask of LED pin in GPIO port. + } GPIO; //!< LED GPIO descriptor. + struct + { + S32 CHANNEL; //!< LED PWM channel (< 0 if N/A). + S32 FUNCTION; //!< LED pin PWM function (< 0 if N/A). + } PWM; //!< LED PWM descriptor. +} tLED_DESCRIPTOR; + + +//! Hardware descriptors of all LEDs. +static tLED_DESCRIPTOR LED_DESCRIPTOR[LED_COUNT] = +{ +#define INSERT_LED_DESCRIPTOR(LED_NO, unused) \ + { \ + {LED##LED_NO##_GPIO / 32, 1 << (LED##LED_NO##_GPIO % 32)},\ + {LED##LED_NO##_PWM, LED##LED_NO##_PWM_FUNCTION } \ + }, + MREPEAT(LED_COUNT, INSERT_LED_DESCRIPTOR, ~) +#undef INSERT_LED_DESCRIPTOR +}; + + +//! Saved state of all LEDs. +static volatile U32 LED_State = (1 << LED_COUNT) - 1; + + +U32 LED_Read_Display(void) +{ + return LED_State; +} + + +void LED_Display(U32 leds) +{ + // Use the LED descriptors to get the connections of a given LED to the MCU. + tLED_DESCRIPTOR *led_descriptor; + volatile avr32_gpio_port_t *led_gpio_port; + + // Make sure only existing LEDs are specified. + leds &= (1 << LED_COUNT) - 1; + + // Update the saved state of all LEDs with the requested changes. + LED_State = leds; + + // For all LEDs... + for (led_descriptor = &LED_DESCRIPTOR[0]; + led_descriptor < LED_DESCRIPTOR + LED_COUNT; + led_descriptor++) + { + // Set the LED to the requested state. + led_gpio_port = &AVR32_GPIO.port[led_descriptor->GPIO.PORT]; + if (leds & 1) + { + led_gpio_port->ovrc = led_descriptor->GPIO.PIN_MASK; + } + else + { + led_gpio_port->ovrs = led_descriptor->GPIO.PIN_MASK; + } + led_gpio_port->oders = led_descriptor->GPIO.PIN_MASK; + led_gpio_port->gpers = led_descriptor->GPIO.PIN_MASK; + leds >>= 1; + } +} + + +U32 LED_Read_Display_Mask(U32 mask) +{ + return Rd_bits(LED_State, mask); +} + + +void LED_Display_Mask(U32 mask, U32 leds) +{ + // Use the LED descriptors to get the connections of a given LED to the MCU. + tLED_DESCRIPTOR *led_descriptor = &LED_DESCRIPTOR[0] - 1; + volatile avr32_gpio_port_t *led_gpio_port; + U8 led_shift; + + // Make sure only existing LEDs are specified. + mask &= (1 << LED_COUNT) - 1; + + // Update the saved state of all LEDs with the requested changes. + Wr_bits(LED_State, mask, leds); + + // While there are specified LEDs left to manage... + while (mask) + { + // Select the next specified LED and set it to the requested state. + led_shift = 1 + ctz(mask); + led_descriptor += led_shift; + led_gpio_port = &AVR32_GPIO.port[led_descriptor->GPIO.PORT]; + leds >>= led_shift - 1; + if (leds & 1) + { + led_gpio_port->ovrc = led_descriptor->GPIO.PIN_MASK; + } + else + { + led_gpio_port->ovrs = led_descriptor->GPIO.PIN_MASK; + } + led_gpio_port->oders = led_descriptor->GPIO.PIN_MASK; + led_gpio_port->gpers = led_descriptor->GPIO.PIN_MASK; + leds >>= 1; + mask >>= led_shift; + } +} + + +Bool LED_Test(U32 leds) +{ + return Tst_bits(LED_State, leds); +} + + +void LED_Off(U32 leds) +{ + // Use the LED descriptors to get the connections of a given LED to the MCU. + tLED_DESCRIPTOR *led_descriptor = &LED_DESCRIPTOR[0] - 1; + volatile avr32_gpio_port_t *led_gpio_port; + U8 led_shift; + + // Make sure only existing LEDs are specified. + leds &= (1 << LED_COUNT) - 1; + + // Update the saved state of all LEDs with the requested changes. + Clr_bits(LED_State, leds); + + // While there are specified LEDs left to manage... + while (leds) + { + // Select the next specified LED and turn it off. + led_shift = 1 + ctz(leds); + led_descriptor += led_shift; + led_gpio_port = &AVR32_GPIO.port[led_descriptor->GPIO.PORT]; + led_gpio_port->ovrs = led_descriptor->GPIO.PIN_MASK; + led_gpio_port->oders = led_descriptor->GPIO.PIN_MASK; + led_gpio_port->gpers = led_descriptor->GPIO.PIN_MASK; + leds >>= led_shift; + } +} + + +void LED_On(U32 leds) +{ + // Use the LED descriptors to get the connections of a given LED to the MCU. + tLED_DESCRIPTOR *led_descriptor = &LED_DESCRIPTOR[0] - 1; + volatile avr32_gpio_port_t *led_gpio_port; + U8 led_shift; + + // Make sure only existing LEDs are specified. + leds &= (1 << LED_COUNT) - 1; + + // Update the saved state of all LEDs with the requested changes. + Set_bits(LED_State, leds); + + // While there are specified LEDs left to manage... + while (leds) + { + // Select the next specified LED and turn it on. + led_shift = 1 + ctz(leds); + led_descriptor += led_shift; + led_gpio_port = &AVR32_GPIO.port[led_descriptor->GPIO.PORT]; + led_gpio_port->ovrc = led_descriptor->GPIO.PIN_MASK; + led_gpio_port->oders = led_descriptor->GPIO.PIN_MASK; + led_gpio_port->gpers = led_descriptor->GPIO.PIN_MASK; + leds >>= led_shift; + } +} + + +void LED_Toggle(U32 leds) +{ + // Use the LED descriptors to get the connections of a given LED to the MCU. + tLED_DESCRIPTOR *led_descriptor = &LED_DESCRIPTOR[0] - 1; + volatile avr32_gpio_port_t *led_gpio_port; + U8 led_shift; + + // Make sure only existing LEDs are specified. + leds &= (1 << LED_COUNT) - 1; + + // Update the saved state of all LEDs with the requested changes. + Tgl_bits(LED_State, leds); + + // While there are specified LEDs left to manage... + while (leds) + { + // Select the next specified LED and toggle it. + led_shift = 1 + ctz(leds); + led_descriptor += led_shift; + led_gpio_port = &AVR32_GPIO.port[led_descriptor->GPIO.PORT]; + led_gpio_port->ovrt = led_descriptor->GPIO.PIN_MASK; + led_gpio_port->oders = led_descriptor->GPIO.PIN_MASK; + led_gpio_port->gpers = led_descriptor->GPIO.PIN_MASK; + leds >>= led_shift; + } +} + + +U32 LED_Read_Display_Field(U32 field) +{ + return Rd_bitfield(LED_State, field); +} + + +void LED_Display_Field(U32 field, U32 leds) +{ + // Move the bit-field to the appropriate position for the bit-mask. + LED_Display_Mask(field, leds << ctz(field)); +} + + +U8 LED_Get_Intensity(U32 led) +{ + tLED_DESCRIPTOR *led_descriptor; + + // Check that the argument value is valid. + led = ctz(led); + led_descriptor = &LED_DESCRIPTOR[led]; + if (led >= LED_COUNT || led_descriptor->PWM.CHANNEL < 0) return 0; + + // Return the duty cycle value if the LED PWM channel is enabled, else 0. + return (AVR32_PWM.sr & (1 << led_descriptor->PWM.CHANNEL)) ? + AVR32_PWM.channel[led_descriptor->PWM.CHANNEL].cdty : 0; +} + + +void LED_Set_Intensity(U32 leds, U8 intensity) +{ + tLED_DESCRIPTOR *led_descriptor = &LED_DESCRIPTOR[0] - 1; + volatile avr32_pwm_channel_t *led_pwm_channel; + volatile avr32_gpio_port_t *led_gpio_port; + U8 led_shift; + + // For each specified LED... + for (leds &= (1 << LED_COUNT) - 1; leds; leds >>= led_shift) + { + // Select the next specified LED and check that it has a PWM channel. + led_shift = 1 + ctz(leds); + led_descriptor += led_shift; + if (led_descriptor->PWM.CHANNEL < 0) continue; + + // Initialize or update the LED PWM channel. + led_pwm_channel = &AVR32_PWM.channel[led_descriptor->PWM.CHANNEL]; + if (!(AVR32_PWM.sr & (1 << led_descriptor->PWM.CHANNEL))) + { + led_pwm_channel->cmr = (AVR32_PWM_CPRE_MCK << AVR32_PWM_CPRE_OFFSET) & + ~(AVR32_PWM_CALG_MASK | + AVR32_PWM_CPOL_MASK | + AVR32_PWM_CPD_MASK); + led_pwm_channel->cprd = 0x000000FF; + led_pwm_channel->cdty = intensity; + AVR32_PWM.ena = 1 << led_descriptor->PWM.CHANNEL; + } + else + { + AVR32_PWM.isr; + while (!(AVR32_PWM.isr & (1 << led_descriptor->PWM.CHANNEL))); + led_pwm_channel->cupd = intensity; + } + + // Switch the LED pin to its PWM function. + led_gpio_port = &AVR32_GPIO.port[led_descriptor->GPIO.PORT]; + if (led_descriptor->PWM.FUNCTION & 0x1) + { + led_gpio_port->pmr0s = led_descriptor->GPIO.PIN_MASK; + } + else + { + led_gpio_port->pmr0c = led_descriptor->GPIO.PIN_MASK; + } + if (led_descriptor->PWM.FUNCTION & 0x2) + { + led_gpio_port->pmr1s = led_descriptor->GPIO.PIN_MASK; + } + else + { + led_gpio_port->pmr1c = led_descriptor->GPIO.PIN_MASK; + } + led_gpio_port->gperc = led_descriptor->GPIO.PIN_MASK; + } +} diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/BOARDS/ARDUINO/led.h b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/BOARDS/ARDUINO/led.h new file mode 100644 index 000000000..a577124ff --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/BOARDS/ARDUINO/led.h @@ -0,0 +1,191 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief AT32UC3A EVK1100 board LEDs support package. + * + * This file contains definitions and services related to the LED features of + * the EVK1100 board. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 AT32UC3A devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _LED_H_ +#define _LED_H_ + +#include "compiler.h" + + +/*! \name Identifiers of LEDs to Use with LED Functions + */ +//! @{ +#define LED0 0x01 +#define LED1 0x02 +#define LED2 0x04 +#define LED3 0x08 +#define LED4 0x10 +#define LED5 0x20 +#define LED6 0x40 +#define LED7 0x80 +//! @} + + +/*! \brief Gets the last state of all LEDs set through the LED API. + * + * \return State of all LEDs (1 bit per LED). + * + * \note The GPIO pin configuration of all LEDs is left unchanged. + */ +extern U32 LED_Read_Display(void); + +/*! \brief Sets the state of all LEDs. + * + * \param leds New state of all LEDs (1 bit per LED). + * + * \note The pins of all LEDs are set to GPIO output mode. + */ +extern void LED_Display(U32 leds); + +/*! \brief Gets the last state of the specified LEDs set through the LED API. + * + * \param mask LEDs of which to get the state (1 bit per LED). + * + * \return State of the specified LEDs (1 bit per LED). + * + * \note The GPIO pin configuration of all LEDs is left unchanged. + */ +extern U32 LED_Read_Display_Mask(U32 mask); + +/*! \brief Sets the state of the specified LEDs. + * + * \param mask LEDs of which to set the state (1 bit per LED). + * + * \param leds New state of the specified LEDs (1 bit per LED). + * + * \note The pins of the specified LEDs are set to GPIO output mode. + */ +extern void LED_Display_Mask(U32 mask, U32 leds); + +/*! \brief Tests the last state of the specified LEDs set through the LED API. + * + * \param leds LEDs of which to test the state (1 bit per LED). + * + * \return \c TRUE if at least one of the specified LEDs has a state on, else + * \c FALSE. + * + * \note The GPIO pin configuration of all LEDs is left unchanged. + */ +extern Bool LED_Test(U32 leds); + +/*! \brief Turns off the specified LEDs. + * + * \param leds LEDs to turn off (1 bit per LED). + * + * \note The pins of the specified LEDs are set to GPIO output mode. + */ +extern void LED_Off(U32 leds); + +/*! \brief Turns on the specified LEDs. + * + * \param leds LEDs to turn on (1 bit per LED). + * + * \note The pins of the specified LEDs are set to GPIO output mode. + */ +extern void LED_On(U32 leds); + +/*! \brief Toggles the specified LEDs. + * + * \param leds LEDs to toggle (1 bit per LED). + * + * \note The pins of the specified LEDs are set to GPIO output mode. + */ +extern void LED_Toggle(U32 leds); + +/*! \brief Gets as a bit-field the last state of the specified LEDs set through + * the LED API. + * + * \param field LEDs of which to get the state (1 bit per LED). + * + * \return State of the specified LEDs (1 bit per LED, beginning with the first + * specified LED). + * + * \note The GPIO pin configuration of all LEDs is left unchanged. + */ +extern U32 LED_Read_Display_Field(U32 field); + +/*! \brief Sets as a bit-field the state of the specified LEDs. + * + * \param field LEDs of which to set the state (1 bit per LED). + * \param leds New state of the specified LEDs (1 bit per LED, beginning with + * the first specified LED). + * + * \note The pins of the specified LEDs are set to GPIO output mode. + */ +extern void LED_Display_Field(U32 field, U32 leds); + +/*! \brief Gets the intensity of the specified LED. + * + * \param led LED of which to get the intensity (1 bit per LED; only the least + * significant set bit is used). + * + * \return Intensity of the specified LED (0x00 to 0xFF). + * + * \warning The PWM channel of the specified LED is supposed to be used only by + * this module. + * + * \note The GPIO pin configuration of all LEDs is left unchanged. + */ +extern U8 LED_Get_Intensity(U32 led); + +/*! \brief Sets the intensity of the specified LEDs. + * + * \param leds LEDs of which to set the intensity (1 bit per LED). + * \param intensity New intensity of the specified LEDs (0x00 to 0xFF). + * + * \warning The PWM channels of the specified LEDs are supposed to be used only + * by this module. + * + * \note The pins of the specified LEDs are set to PWM output mode. + */ +extern void LED_Set_Intensity(U32 leds, U8 intensity); + + +#endif // _LED_H_ diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/BOARDS/EVK1105/evk1105.h b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/BOARDS/EVK1105/evk1105.h new file mode 100644 index 000000000..edda44cb3 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/BOARDS/EVK1105/evk1105.h @@ -0,0 +1,433 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief AT32UC3A EVK1105 board header file. + * + * This file contains definitions and services related to the features of the + * EVK1105 board rev. B. + * + * To use this board, define BOARD=EVK1105. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 AT32UC3A devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _EVK1105_H_ +#define _EVK1105_H_ + +#ifdef EVK1105_REV3 +# include "evk1105_rev3.h" +#else + +#include "compiler.h" + +#ifdef __AVR32_ABI_COMPILER__ // Automatically defined when compiling for AVR32, not when assembling. +# include "led.h" +#endif // __AVR32_ABI_COMPILER__ + + +/*! \name Oscillator Definitions + */ +//! @{ + +// RCOsc has no custom calibration by default. Set the following definition to +// the appropriate value if a custom RCOsc calibration has been applied to your +// part. +//#define FRCOSC AVR32_PM_RCOSC_FREQUENCY //!< RCOsc frequency: Hz. + +#define FOSC32 32768 //!< Osc32 frequency: Hz. +#define OSC32_STARTUP AVR32_PM_OSCCTRL32_STARTUP_8192_RCOSC //!< Osc32 startup time: RCOsc periods. + +#define FOSC0 12000000 //!< Osc0 frequency: Hz. +#define OSC0_STARTUP AVR32_PM_OSCCTRL0_STARTUP_2048_RCOSC //!< Osc0 startup time: RCOsc periods. + +#define FOSC1 11289600 //!< Osc1 frequency: Hz +#define OSC1_STARTUP AVR32_PM_OSCCTRL1_STARTUP_2048_RCOSC //!< Osc1 startup time: RCOsc periods. + + +//! @} + + +/*! \name SDRAM Definitions + */ +//! @{ + +//! Part header file of used SDRAM(s). +#define SDRAM_PART_HDR "MT48LC16M16A2TG7E/mt48lc16m16a2tg7e.h" + +//! Data bus width to use the SDRAM(s) with (16 or 32 bits; always 16 bits on +//! UC3). +#define SDRAM_DBW 16 +//! @} + + +/*! \name USB Definitions + */ +//! @{ +//! Multiplexed pin used for USB_ID: AVR32_USBB_USB_ID_x_x. +//! To be selected according to the AVR32_USBB_USB_ID_x_x_PIN and +//! AVR32_USBB_USB_ID_x_x_FUNCTION definitions from . +#define AVR32_USBB_USB_ID_0_2_PIN 21 +#define AVR32_USBB_USB_ID_0_2_FUNCTION 2 +#define USB_ID AVR32_USBB_USB_ID_0_2 + +//! Multiplexed pin used for USB_VBOF: AVR32_USBB_USB_VBOF_x_x. +//! To be selected according to the AVR32_USBB_USB_VBOF_x_x_PIN and +//! AVR32_USBB_USB_VBOF_x_x_FUNCTION definitions from . +# define USB_VBOF AVR32_USBB_USB_VBOF_0_1 + + +//! Active level of the USB_VBOF output pin. +# define USB_VBOF_ACTIVE_LEVEL LOW + +//! USB overcurrent detection pin. +# define USB_OVERCURRENT_DETECT_PIN AVR32_PIN_PX15 + +//! @} + + +//! GPIO connection of the MAC PHY PWR_DOWN/INT signal. +# define MACB_INTERRUPT_PIN AVR32_PIN_PA26 + + + +//! Number of LEDs. +#define LED_COUNT 4 + +/*! \name GPIO Connections of LEDs + */ +//! @{ +# define LED0_GPIO AVR32_PIN_PB27 +# define LED1_GPIO AVR32_PIN_PB28 +# define LED2_GPIO AVR32_PIN_PA05 +# define LED3_GPIO AVR32_PIN_PA06 +//! @} + +/*! \name Color Identifiers of LEDs to Use with LED Functions + */ +//! @{ +#define LED_MONO0_GREEN LED0 +#define LED_MONO1_GREEN LED1 +#define LED_MONO2_GREEN LED2 +#define LED_MONO3_GREEN LED3 +//! @} + +/*! \name PWM Channels of LEDs + */ +//! @{ +#define LED0_PWM 4 +#define LED1_PWM 5 +#define LED2_PWM (-1) +#define LED3_PWM (-1) +//! @} + +/*! \name PWM Functions of LEDs + */ +//! @{ +/* TODO: Implement PWM functionality */ +#define LED0_PWM_FUNCTION (-1)//AVR32_PWM_0_FUNCTION +#define LED1_PWM_FUNCTION (-1)//AVR32_PWM_1_FUNCTION +#define LED2_PWM_FUNCTION (-1) +#define LED3_PWM_FUNCTION (-1) +//! @} + +//! External interrupt connection of touch sensor. +#define QT1081_EIC_EXTINT_PIN AVR32_EIC_EXTINT_1_PIN +#define QT1081_EIC_EXTINT_FUNCTION AVR32_EIC_EXTINT_1_FUNCTION +#define QT1081_EIC_EXTINT_IRQ AVR32_EIC_IRQ_1 +#define QT1081_EIC_EXTINT_INT AVR32_EIC_INT1 +/*! \name Touch sensor low power mode select + */ +#define QT1081_LP_MODE AVR32_PIN_PB29 + +/*! \name GPIO Connections of touch buttons + */ +//! @{ +#define QT1081_TOUCH_SENSOR_0 AVR32_PIN_PB22 +#define QT1081_TOUCH_SENSOR_0_PRESSED 1 +#define QT1081_TOUCH_SENSOR_1 AVR32_PIN_PB23 +#define QT1081_TOUCH_SENSOR_1_PRESSED 1 +#define QT1081_TOUCH_SENSOR_2 AVR32_PIN_PB24 +#define QT1081_TOUCH_SENSOR_2_PRESSED 1 +#define QT1081_TOUCH_SENSOR_3 AVR32_PIN_PB25 +#define QT1081_TOUCH_SENSOR_3_PRESSED 1 +#define QT1081_TOUCH_SENSOR_4 AVR32_PIN_PB26 +#define QT1081_TOUCH_SENSOR_4_PRESSED 1 + +#define QT1081_TOUCH_SENSOR_ENTER QT1081_TOUCH_SENSOR_4 +#define QT1081_TOUCH_SENSOR_ENTER_PRESSED QT1081_TOUCH_SENSOR_4_PRESSED +#define QT1081_TOUCH_SENSOR_LEFT QT1081_TOUCH_SENSOR_3 +#define QT1081_TOUCH_SENSOR_LEFT_PRESSED QT1081_TOUCH_SENSOR_3_PRESSED +#define QT1081_TOUCH_SENSOR_RIGHT QT1081_TOUCH_SENSOR_2 +#define QT1081_TOUCH_SENSOR_RIGHT_PRESSED QT1081_TOUCH_SENSOR_2_PRESSED +#define QT1081_TOUCH_SENSOR_UP QT1081_TOUCH_SENSOR_0 +#define QT1081_TOUCH_SENSOR_UP_PRESSED QT1081_TOUCH_SENSOR_0_PRESSED +#define QT1081_TOUCH_SENSOR_DOWN QT1081_TOUCH_SENSOR_1 +#define QT1081_TOUCH_SENSOR_DOWN_PRESSED QT1081_TOUCH_SENSOR_1_PRESSED +//! @} + +/*! \name SPI Connections of the AT45DBX Data Flash Memory + */ +//! @{ +#define AT45DBX_SPI (&AVR32_SPI0) +#define AT45DBX_SPI_NPCS 0 +#define AT45DBX_SPI_SCK_PIN AVR32_SPI0_SCK_0_0_PIN +#define AT45DBX_SPI_SCK_FUNCTION AVR32_SPI0_SCK_0_0_FUNCTION +#define AT45DBX_SPI_MISO_PIN AVR32_SPI0_MISO_0_0_PIN +#define AT45DBX_SPI_MISO_FUNCTION AVR32_SPI0_MISO_0_0_FUNCTION +#define AT45DBX_SPI_MOSI_PIN AVR32_SPI0_MOSI_0_0_PIN +#define AT45DBX_SPI_MOSI_FUNCTION AVR32_SPI0_MOSI_0_0_FUNCTION +#define AT45DBX_SPI_NPCS0_PIN AVR32_SPI0_NPCS_0_0_PIN +#define AT45DBX_SPI_NPCS0_FUNCTION AVR32_SPI0_NPCS_0_0_FUNCTION +//! @} + +/*! \name GPIO and SPI Connections of the SD/MMC Connector + */ +//! @{ +#define SD_MMC_CARD_DETECT_PIN AVR32_PIN_PA02 +#define SD_MMC_WRITE_PROTECT_PIN AVR32_PIN_PA18 +#define SD_MMC_SPI (&AVR32_SPI0) +#define SD_MMC_SPI_NPCS 1 +#define SD_MMC_SPI_SCK_PIN AVR32_SPI0_SCK_0_0_PIN +#define SD_MMC_SPI_SCK_FUNCTION AVR32_SPI0_SCK_0_0_FUNCTION +#define SD_MMC_SPI_MISO_PIN AVR32_SPI0_MISO_0_0_PIN +#define SD_MMC_SPI_MISO_FUNCTION AVR32_SPI0_MISO_0_0_FUNCTION +#define SD_MMC_SPI_MOSI_PIN AVR32_SPI0_MOSI_0_0_PIN +#define SD_MMC_SPI_MOSI_FUNCTION AVR32_SPI0_MOSI_0_0_FUNCTION +#define SD_MMC_SPI_NPCS_PIN AVR32_SPI0_NPCS_1_0_PIN +#define SD_MMC_SPI_NPCS_FUNCTION AVR32_SPI0_NPCS_1_0_FUNCTION +//! @} + + +/*! \name TWI expansion + */ +//! @{ +#define EXPANSION_TWI (&AVR32_TWI) +#define EXPANSION_RESET AVR32_PIN_PX16 +#define EXPANSION_TWI_SCL_PIN AVR32_TWI_SCL_0_0_PIN +#define EXPANSION_TWI_SCL_FUNCTION AVR32_TWI_SCL_0_0_FUNCTION +#define EXPANSION_TWI_SDA_PIN AVR32_TWI_SDA_0_0_PIN +#define EXPANSION_TWI_SDA_FUNCTION AVR32_TWI_SDA_0_0_FUNCTION +//! @} + +/*! \name Wireless expansion + */ + +#define WEXPANSION_EXTINT_PIN AVR32_EIC_EXTINT_8_PIN +#define WEXPANSION_EXTINT_FUNCTION AVR32_EIC_EXTINT_8_FUNCTION +#define WEXPANSION_GPIO1 AVR32_PIN_PB30 +#define WEXPANSION_GPIO2 AVR32_PIN_PB31 + +#define WEXPANSION_SPI (&AVR32_SPI0) +#define WEXPANSION_SPI_NPCS 2 +#define WEXPANSION_SPI_SCK_PIN AVR32_SPI0_SCK_0_0_PIN +#define WEXPANSION_SPI_SCK_FUNCTION AVR32_SPI0_SCK_0_0_FUNCTION +#define WEXPANSION_SPI_MISO_PIN AVR32_SPI0_MISO_0_0_PIN +#define WEXPANSION_SPI_MISO_FUNCTION AVR32_SPI0_MISO_0_0_FUNCTION +#define WEXPANSION_SPI_MOSI_PIN AVR32_SPI0_MOSI_0_0_PIN +#define WEXPANSION_SPI_MOSI_FUNCTION AVR32_SPI0_MOSI_0_0_FUNCTION +#define WEXPANSION_SPI_NPCS_PIN AVR32_SPI0_NPCS_2_0_PIN +#define WEXPANSION_SPI_NPCS_FUNCTION AVR32_SPI0_NPCS_2_0_FUNCTION + +//! @} + +/*! \name ET024006DHU TFT display + */ +//! @{ + +#define ET024006DHU_TE_PIN AVR32_PIN_PX19 +#define ET024006DHU_RESET_PIN AVR32_PIN_PX22 +#define ET024006DHU_BL_PIN AVR32_PWM_6_PIN +#define ET024006DHU_BL_FUNCTION AVR32_PWM_6_FUNCTION +#define ET024006DHU_DNC_PIN AVR32_EBI_ADDR_21_1_PIN +#define ET024006DHU_DNC_FUNCTION AVR32_EBI_ADDR_21_1_FUNCTION +#define ET024006DHU_EBI_NCS_PIN AVR32_EBI_NCS_0_1_PIN +#define ET024006DHU_EBI_NCS_FUNCTION AVR32_EBI_NCS_0_1_FUNCTION + +//! @} +/*! \name Optional SPI connection to the TFT + */ +//! @{ + +#define ET024006DHU_SPI (&AVR32_SPI0) +#define ET024006DHU_SPI_NPCS 3 +#define ET024006DHU_SPI_SCK_PIN AVR32_SPI0_SCK_0_0_PIN +#define ET024006DHU_SPI_SCK_FUNCTION AVR32_SPI0_SCK_0_0_FUNCTION +#define ET024006DHU_SPI_MISO_PIN AVR32_SPI0_MISO_0_0_PIN +#define ET024006DHU_SPI_MISO_FUNCTION AVR32_SPI0_MISO_0_0_FUNCTION +#define ET024006DHU_SPI_MOSI_PIN AVR32_SPI0_MOSI_0_0_PIN +#define ET024006DHU_SPI_MOSI_FUNCTION AVR32_SPI0_MOSI_0_0_FUNCTION +#define ET024006DHU_SPI_NPCS_PIN AVR32_SPI1_NPCS_3_0_PIN +#define ET024006DHU_SPI_NPCS_FUNCTION AVR32_SPI1_NPCS_3_0_FUNCTION + +//! @} + + +/*! \name Audio amplifier connection to the DAC + */ +//! @{ + +#define TPA6130_ABDAC (&AVR32_ABDAC) + +#define TPA6130_DATA0_PIN AVR32_ABDAC_DATA_0_1_PIN +#define TPA6130_DATA0_FUNCTION AVR32_ABDAC_DATA_0_1_FUNCTION +#define TPA6130_DATAN0_PIN AVR32_ABDAC_DATAN_0_1_PIN +#define TPA6130_DATAN0_FUNCTION AVR32_ABDAC_DATAN_0_1_FUNCTION +#define TPA6130_DATA1_PIN AVR32_ABDAC_DATA_1_1_PIN +#define TPA6130_DATA1_FUNCTION AVR32_ABDAC_DATA_1_1_FUNCTION +#define TPA6130_DATAN1_PIN AVR32_ABDAC_DATAN_1_1_PIN +#define TPA6130_DATAN1_FUNCTION AVR32_ABDAC_DATAN_1_1_FUNCTION + +#define TPA6130_ABDAC_PDCA_PID AVR32_PDCA_PID_ABDAC_TX +#define TPA6130_ABDAC_PDCA_CHANNEL 0 +#define TPA6130_ABDAC_PDCA_IRQ AVR32_PDCA_IRQ_0 +#define TPA6130_ABDAC_PDCA_INT_LEVEL AVR32_INTC_INT3 + +#define TPA6130_TWI (&AVR32_TWI) +#define TPA6130_TWI_SCL_PIN AVR32_TWI_SCL_0_0_PIN +#define TPA6130_TWI_SCL_FUNCTION AVR32_TWI_SCL_0_0_FUNCTION +#define TPA6130_TWI_SDA_PIN AVR32_TWI_SDA_0_0_PIN +#define TPA6130_TWI_SDA_FUNCTION AVR32_TWI_SDA_0_0_FUNCTION + +//! }@ +/*! \name TI TLV320AIC23B sound chip + */ +//! @{ +#define TLV320_SSC (&AVR32_SSC) +#define TLV320_SSC_TX_CLOCK_PIN AVR32_SSC_TX_CLOCK_0_PIN +#define TLV320_SSC_TX_CLOCK_FUNCTION AVR32_SSC_TX_CLOCK_0_FUNCTION +#define TLV320_SSC_TX_DATA_PIN AVR32_SSC_TX_DATA_0_PIN +#define TLV320_SSC_TX_DATA_FUNCTION AVR32_SSC_TX_DATA_0_FUNCTION +#define TLV320_SSC_TX_FRAME_SYNC_PIN AVR32_SSC_TX_FRAME_SYNC_0_PIN +#define TLV320_SSC_TX_FRAME_SYNC_FUNCTION AVR32_SSC_TX_FRAME_SYNC_0_FUNCTION + +#define TLV320_TWI (&AVR32_TWI) +#define TLV320_TWI_SCL_PIN AVR32_TWI_SCL_0_0_PIN +#define TLV320_TWI_SCL_FUNCTION AVR32_TWI_SCL_0_0_FUNCTION +#define TLV320_TWI_SDA_PIN AVR32_TWI_SDA_0_0_PIN +#define TLV320_TWI_SDA_FUNCTION AVR32_TWI_SDA_0_0_FUNCTION + +#define TLV320_PM_GCLK_PIN AVR32_PM_GCLK_0_0_PIN +#define TLV320_PM_GCLK_FUNCTION AVR32_PM_GCLK_0_0_FUNCTION +//! @} + +////! \name SPI: Apple Authentication Chip Hardware Connections +////! @{ +#define IPOD_AUTH_CHIP_SPI (&AVR32_SPI0) +#define IPOD_AUTH_CHIP_SPI_IRQ AVR32_SPI0_IRQ +#define IPOD_AUTH_CHIP_SPI_NPCS 2 +#define IPOD_AUTH_CHIP_SPI_SCK_PIN AVR32_SPI0_SCK_0_0_PIN +#define IPOD_AUTH_CHIP_SPI_SCK_FUNCTION AVR32_SPI0_SCK_0_0_FUNCTION +#define IPOD_AUTH_CHIP_SPI_MISO_PIN AVR32_SPI0_MISO_0_0_PIN +#define IPOD_AUTH_CHIP_SPI_MISO_FUNCTION AVR32_SPI0_MISO_0_0_FUNCTION +#define IPOD_AUTH_CHIP_SPI_MOSI_PIN AVR32_SPI0_MOSI_0_0_PIN +#define IPOD_AUTH_CHIP_SPI_MOSI_FUNCTION AVR32_SPI0_MOSI_0_0_FUNCTION +#define IPOD_AUTH_CHIP_SPI_NPCS_PIN AVR32_SPI0_NPCS_2_0_PIN +#define IPOD_AUTH_CHIP_SPI_NPCS_FUNCTION AVR32_SPI0_NPCS_2_0_FUNCTION +#define IPOD_AUTH_CHIP_SPI_N_RESET_PIN AVR32_PIN_PB30 +#define IPOD_AUTH_CHIP_SPI_CP_READY_PIN AVR32_PIN_PB31 +//! }@ + +/*! \name Connections of the iPOD Authentication Coprocessor + */ +//! @{ + +#define IPOD_AUTH_CHIP_TWI (&AVR32_TWI) +#define IPOD_AUTH_CHIP_TWI_SCL_PIN AVR32_TWI_SCL_0_0_PIN +#define IPOD_AUTH_CHIP_TWI_SCL_FUNCTION AVR32_TWI_SCL_0_0_FUNCTION +#define IPOD_AUTH_CHIP_TWI_SDA_PIN AVR32_TWI_SDA_0_0_PIN +#define IPOD_AUTH_CHIP_TWI_SDA_FUNCTION AVR32_TWI_SDA_0_0_FUNCTION +#define IPOD_AUTH_CHIP_TWI_N_RESET_PIN AVR32_PIN_PX16 + +//! @} + +/*! \name USART connection to the UC3B board controller + */ +//! @{ + +#define USART0_RXD_PIN AVR32_USART0_RXD_0_0_PIN +#define USART0_RXD_FUNCTION AVR32_USART0_RXD_0_0_FUNCTION +#define USART0_TXD_PIN AVR32_USART0_TXD_0_0_PIN +#define USART0_TXD_FUNCTION AVR32_USART0_TXD_0_0_FUNCTION +#define USART0_RTS_PIN AVR32_USART0_RTS_0_0_PIN +#define USART0_RTS_FUNCTION AVR32_USART0_RTS_0_0_FUNCTION +#define USART0_CTS_PIN AVR32_USART0_CTS_0_0_PIN +#define USART0_CTS_FUNCTION AVR32_USART0_CTS_0_0_FUNCTION + +//! @} + +#define ADC_VEXT_PIN AVR32_ADC_AD_7_PIN +#define ADC_VEXT_FUNCTION AVR32_ADC_AD_7_FUNCTION + +/*! \name LCD Connections of the ET024006DHU display + */ +//! @{ +#define ET024006DHU_SMC_USE_NCS 0 +#define ET024006DHU_SMC_COMPONENT_CS "smc_et024006dhu.h" + +#define ET024006DHU_EBI_DATA_0 AVR32_EBI_DATA_0 +#define ET024006DHU_EBI_DATA_1 AVR32_EBI_DATA_1 +#define ET024006DHU_EBI_DATA_2 AVR32_EBI_DATA_2 +#define ET024006DHU_EBI_DATA_3 AVR32_EBI_DATA_3 +#define ET024006DHU_EBI_DATA_4 AVR32_EBI_DATA_4 +#define ET024006DHU_EBI_DATA_5 AVR32_EBI_DATA_5 +#define ET024006DHU_EBI_DATA_6 AVR32_EBI_DATA_6 +#define ET024006DHU_EBI_DATA_7 AVR32_EBI_DATA_7 +#define ET024006DHU_EBI_DATA_8 AVR32_EBI_DATA_8 +#define ET024006DHU_EBI_DATA_9 AVR32_EBI_DATA_9 +#define ET024006DHU_EBI_DATA_10 AVR32_EBI_DATA_10 +#define ET024006DHU_EBI_DATA_11 AVR32_EBI_DATA_11 +#define ET024006DHU_EBI_DATA_12 AVR32_EBI_DATA_12 +#define ET024006DHU_EBI_DATA_13 AVR32_EBI_DATA_13 +#define ET024006DHU_EBI_DATA_14 AVR32_EBI_DATA_14 +#define ET024006DHU_EBI_DATA_15 AVR32_EBI_DATA_15 + +#define ET024006DHU_EBI_ADDR_21 AVR32_EBI_ADDR_21_1 + +#define ET024006DHU_EBI_NWE AVR32_EBI_NWE0_0 +#define ET024006DHU_EBI_NRD AVR32_EBI_NRD_0 +#define ET024006DHU_EBI_NCS AVR32_EBI_NCS_0_1 +//! @} + + +#endif // !EVK1105_REVA + +#endif // _EVK1105_H_ diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/BOARDS/EVK1105/led.c b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/BOARDS/EVK1105/led.c new file mode 100644 index 000000000..561652aeb --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/BOARDS/EVK1105/led.c @@ -0,0 +1,346 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief AT32UC3A EVK1105 board LEDs support package. + * + * This file contains definitions and services related to the LED features of + * the EVK1105 board. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 AT32UC3A devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#include +#include "preprocessor.h" +#include "compiler.h" +#include "evk1105.h" +#include "led.h" + + +//! Structure describing LED hardware connections. +typedef const struct +{ + struct + { + U32 PORT; //!< LED GPIO port. + U32 PIN_MASK; //!< Bit-mask of LED pin in GPIO port. + } GPIO; //!< LED GPIO descriptor. + struct + { + S32 CHANNEL; //!< LED PWM channel (< 0 if N/A). + S32 FUNCTION; //!< LED pin PWM function (< 0 if N/A). + } PWM; //!< LED PWM descriptor. +} tLED_DESCRIPTOR; + + +//! Hardware descriptors of all LEDs. +static tLED_DESCRIPTOR LED_DESCRIPTOR[LED_COUNT] = +{ +#define INSERT_LED_DESCRIPTOR(LED_NO, unused) \ + { \ + {LED##LED_NO##_GPIO / 32, 1 << (LED##LED_NO##_GPIO % 32)},\ + {LED##LED_NO##_PWM, LED##LED_NO##_PWM_FUNCTION } \ + }, + MREPEAT(LED_COUNT, INSERT_LED_DESCRIPTOR, ~) +#undef INSERT_LED_DESCRIPTOR +}; + + +//! Saved state of all LEDs. +static volatile U32 LED_State = (1 << LED_COUNT) - 1; + + +U32 LED_Read_Display(void) +{ + return LED_State; +} + + +void LED_Display(U32 leds) +{ + // Use the LED descriptors to get the connections of a given LED to the MCU. + tLED_DESCRIPTOR *led_descriptor; + volatile avr32_gpio_port_t *led_gpio_port; + + // Make sure only existing LEDs are specified. + leds &= (1 << LED_COUNT) - 1; + + // Update the saved state of all LEDs with the requested changes. + LED_State = leds; + + // For all LEDs... + for (led_descriptor = &LED_DESCRIPTOR[0]; + led_descriptor < LED_DESCRIPTOR + LED_COUNT; + led_descriptor++) + { + // Set the LED to the requested state. + led_gpio_port = &AVR32_GPIO.port[led_descriptor->GPIO.PORT]; + if (leds & 1) + { + led_gpio_port->ovrc = led_descriptor->GPIO.PIN_MASK; + } + else + { + led_gpio_port->ovrs = led_descriptor->GPIO.PIN_MASK; + } + led_gpio_port->oders = led_descriptor->GPIO.PIN_MASK; + led_gpio_port->gpers = led_descriptor->GPIO.PIN_MASK; + leds >>= 1; + } +} + + +U32 LED_Read_Display_Mask(U32 mask) +{ + return Rd_bits(LED_State, mask); +} + + +void LED_Display_Mask(U32 mask, U32 leds) +{ + // Use the LED descriptors to get the connections of a given LED to the MCU. + tLED_DESCRIPTOR *led_descriptor = &LED_DESCRIPTOR[0] - 1; + volatile avr32_gpio_port_t *led_gpio_port; + U8 led_shift; + + // Make sure only existing LEDs are specified. + mask &= (1 << LED_COUNT) - 1; + + // Update the saved state of all LEDs with the requested changes. + Wr_bits(LED_State, mask, leds); + + // While there are specified LEDs left to manage... + while (mask) + { + // Select the next specified LED and set it to the requested state. + led_shift = 1 + ctz(mask); + led_descriptor += led_shift; + led_gpio_port = &AVR32_GPIO.port[led_descriptor->GPIO.PORT]; + leds >>= led_shift - 1; + if (leds & 1) + { + led_gpio_port->ovrc = led_descriptor->GPIO.PIN_MASK; + } + else + { + led_gpio_port->ovrs = led_descriptor->GPIO.PIN_MASK; + } + led_gpio_port->oders = led_descriptor->GPIO.PIN_MASK; + led_gpio_port->gpers = led_descriptor->GPIO.PIN_MASK; + leds >>= 1; + mask >>= led_shift; + } +} + + +Bool LED_Test(U32 leds) +{ + return Tst_bits(LED_State, leds); +} + + +void LED_Off(U32 leds) +{ + // Use the LED descriptors to get the connections of a given LED to the MCU. + tLED_DESCRIPTOR *led_descriptor = &LED_DESCRIPTOR[0] - 1; + volatile avr32_gpio_port_t *led_gpio_port; + U8 led_shift; + + // Make sure only existing LEDs are specified. + leds &= (1 << LED_COUNT) - 1; + + // Update the saved state of all LEDs with the requested changes. + Clr_bits(LED_State, leds); + + // While there are specified LEDs left to manage... + while (leds) + { + // Select the next specified LED and turn it off. + led_shift = 1 + ctz(leds); + led_descriptor += led_shift; + led_gpio_port = &AVR32_GPIO.port[led_descriptor->GPIO.PORT]; + led_gpio_port->ovrs = led_descriptor->GPIO.PIN_MASK; + led_gpio_port->oders = led_descriptor->GPIO.PIN_MASK; + led_gpio_port->gpers = led_descriptor->GPIO.PIN_MASK; + leds >>= led_shift; + } +} + + +void LED_On(U32 leds) +{ + // Use the LED descriptors to get the connections of a given LED to the MCU. + tLED_DESCRIPTOR *led_descriptor = &LED_DESCRIPTOR[0] - 1; + volatile avr32_gpio_port_t *led_gpio_port; + U8 led_shift; + + // Make sure only existing LEDs are specified. + leds &= (1 << LED_COUNT) - 1; + + // Update the saved state of all LEDs with the requested changes. + Set_bits(LED_State, leds); + + // While there are specified LEDs left to manage... + while (leds) + { + // Select the next specified LED and turn it on. + led_shift = 1 + ctz(leds); + led_descriptor += led_shift; + led_gpio_port = &AVR32_GPIO.port[led_descriptor->GPIO.PORT]; + led_gpio_port->ovrc = led_descriptor->GPIO.PIN_MASK; + led_gpio_port->oders = led_descriptor->GPIO.PIN_MASK; + led_gpio_port->gpers = led_descriptor->GPIO.PIN_MASK; + leds >>= led_shift; + } +} + + +void LED_Toggle(U32 leds) +{ + // Use the LED descriptors to get the connections of a given LED to the MCU. + tLED_DESCRIPTOR *led_descriptor = &LED_DESCRIPTOR[0] - 1; + volatile avr32_gpio_port_t *led_gpio_port; + U8 led_shift; + + // Make sure only existing LEDs are specified. + leds &= (1 << LED_COUNT) - 1; + + // Update the saved state of all LEDs with the requested changes. + Tgl_bits(LED_State, leds); + + // While there are specified LEDs left to manage... + while (leds) + { + // Select the next specified LED and toggle it. + led_shift = 1 + ctz(leds); + led_descriptor += led_shift; + led_gpio_port = &AVR32_GPIO.port[led_descriptor->GPIO.PORT]; + led_gpio_port->ovrt = led_descriptor->GPIO.PIN_MASK; + led_gpio_port->oders = led_descriptor->GPIO.PIN_MASK; + led_gpio_port->gpers = led_descriptor->GPIO.PIN_MASK; + leds >>= led_shift; + } +} + + +U32 LED_Read_Display_Field(U32 field) +{ + return Rd_bitfield(LED_State, field); +} + + +void LED_Display_Field(U32 field, U32 leds) +{ + // Move the bit-field to the appropriate position for the bit-mask. + LED_Display_Mask(field, leds << ctz(field)); +} + + +U8 LED_Get_Intensity(U32 led) +{ + tLED_DESCRIPTOR *led_descriptor; + + // Check that the argument value is valid. + led = ctz(led); + led_descriptor = &LED_DESCRIPTOR[led]; + if (led >= LED_COUNT || led_descriptor->PWM.CHANNEL < 0) return 0; + + // Return the duty cycle value if the LED PWM channel is enabled, else 0. + return (AVR32_PWM.sr & (1 << led_descriptor->PWM.CHANNEL)) ? + AVR32_PWM.channel[led_descriptor->PWM.CHANNEL].cdty : 0; +} + + +void LED_Set_Intensity(U32 leds, U8 intensity) +{ + tLED_DESCRIPTOR *led_descriptor = &LED_DESCRIPTOR[0] - 1; + volatile avr32_pwm_channel_t *led_pwm_channel; + volatile avr32_gpio_port_t *led_gpio_port; + U8 led_shift; + + // For each specified LED... + for (leds &= (1 << LED_COUNT) - 1; leds; leds >>= led_shift) + { + // Select the next specified LED and check that it has a PWM channel. + led_shift = 1 + ctz(leds); + led_descriptor += led_shift; + if (led_descriptor->PWM.CHANNEL < 0) continue; + + // Initialize or update the LED PWM channel. + led_pwm_channel = &AVR32_PWM.channel[led_descriptor->PWM.CHANNEL]; + if (!(AVR32_PWM.sr & (1 << led_descriptor->PWM.CHANNEL))) + { + led_pwm_channel->cmr = (AVR32_PWM_CPRE_MCK << AVR32_PWM_CPRE_OFFSET) & + ~(AVR32_PWM_CALG_MASK | + AVR32_PWM_CPOL_MASK | + AVR32_PWM_CPD_MASK); + led_pwm_channel->cprd = 0x000000FF; + led_pwm_channel->cdty = intensity; + AVR32_PWM.ena = 1 << led_descriptor->PWM.CHANNEL; + } + else + { + AVR32_PWM.isr; + while (!(AVR32_PWM.isr & (1 << led_descriptor->PWM.CHANNEL))); + led_pwm_channel->cupd = intensity; + } + + // Switch the LED pin to its PWM function. + led_gpio_port = &AVR32_GPIO.port[led_descriptor->GPIO.PORT]; + if (led_descriptor->PWM.FUNCTION & 0x1) + { + led_gpio_port->pmr0s = led_descriptor->GPIO.PIN_MASK; + } + else + { + led_gpio_port->pmr0c = led_descriptor->GPIO.PIN_MASK; + } + if (led_descriptor->PWM.FUNCTION & 0x2) + { + led_gpio_port->pmr1s = led_descriptor->GPIO.PIN_MASK; + } + else + { + led_gpio_port->pmr1c = led_descriptor->GPIO.PIN_MASK; + } + led_gpio_port->gperc = led_descriptor->GPIO.PIN_MASK; + } +} diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/BOARDS/EVK1105/led.h b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/BOARDS/EVK1105/led.h new file mode 100644 index 000000000..7766b6a76 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/BOARDS/EVK1105/led.h @@ -0,0 +1,187 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief AT32UC3A EVK1105 board LEDs support package. + * + * This file contains definitions and services related to the LED features of + * the EVK1105 board. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 AT32UC3A devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _LED_H_ +#define _LED_H_ + +#include "compiler.h" + + +/*! \name Identifiers of LEDs to Use with LED Functions + */ +//! @{ +#define LED0 0x01 +#define LED1 0x02 +#define LED2 0x04 +#define LED3 0x08 +//! @} + + +/*! \brief Gets the last state of all LEDs set through the LED API. + * + * \return State of all LEDs (1 bit per LED). + * + * \note The GPIO pin configuration of all LEDs is left unchanged. + */ +extern U32 LED_Read_Display(void); + +/*! \brief Sets the state of all LEDs. + * + * \param leds New state of all LEDs (1 bit per LED). + * + * \note The pins of all LEDs are set to GPIO output mode. + */ +extern void LED_Display(U32 leds); + +/*! \brief Gets the last state of the specified LEDs set through the LED API. + * + * \param mask LEDs of which to get the state (1 bit per LED). + * + * \return State of the specified LEDs (1 bit per LED). + * + * \note The GPIO pin configuration of all LEDs is left unchanged. + */ +extern U32 LED_Read_Display_Mask(U32 mask); + +/*! \brief Sets the state of the specified LEDs. + * + * \param mask LEDs of which to set the state (1 bit per LED). + * + * \param leds New state of the specified LEDs (1 bit per LED). + * + * \note The pins of the specified LEDs are set to GPIO output mode. + */ +extern void LED_Display_Mask(U32 mask, U32 leds); + +/*! \brief Tests the last state of the specified LEDs set through the LED API. + * + * \param leds LEDs of which to test the state (1 bit per LED). + * + * \return \c TRUE if at least one of the specified LEDs has a state on, else + * \c FALSE. + * + * \note The GPIO pin configuration of all LEDs is left unchanged. + */ +extern Bool LED_Test(U32 leds); + +/*! \brief Turns off the specified LEDs. + * + * \param leds LEDs to turn off (1 bit per LED). + * + * \note The pins of the specified LEDs are set to GPIO output mode. + */ +extern void LED_Off(U32 leds); + +/*! \brief Turns on the specified LEDs. + * + * \param leds LEDs to turn on (1 bit per LED). + * + * \note The pins of the specified LEDs are set to GPIO output mode. + */ +extern void LED_On(U32 leds); + +/*! \brief Toggles the specified LEDs. + * + * \param leds LEDs to toggle (1 bit per LED). + * + * \note The pins of the specified LEDs are set to GPIO output mode. + */ +extern void LED_Toggle(U32 leds); + +/*! \brief Gets as a bit-field the last state of the specified LEDs set through + * the LED API. + * + * \param field LEDs of which to get the state (1 bit per LED). + * + * \return State of the specified LEDs (1 bit per LED, beginning with the first + * specified LED). + * + * \note The GPIO pin configuration of all LEDs is left unchanged. + */ +extern U32 LED_Read_Display_Field(U32 field); + +/*! \brief Sets as a bit-field the state of the specified LEDs. + * + * \param field LEDs of which to set the state (1 bit per LED). + * \param leds New state of the specified LEDs (1 bit per LED, beginning with + * the first specified LED). + * + * \note The pins of the specified LEDs are set to GPIO output mode. + */ +extern void LED_Display_Field(U32 field, U32 leds); + +/*! \brief Gets the intensity of the specified LED. + * + * \param led LED of which to get the intensity (1 bit per LED; only the least + * significant set bit is used). + * + * \return Intensity of the specified LED (0x00 to 0xFF). + * + * \warning The PWM channel of the specified LED is supposed to be used only by + * this module. + * + * \note The GPIO pin configuration of all LEDs is left unchanged. + */ +extern U8 LED_Get_Intensity(U32 led); + +/*! \brief Sets the intensity of the specified LEDs. + * + * \param leds LEDs of which to set the intensity (1 bit per LED). + * \param intensity New intensity of the specified LEDs (0x00 to 0xFF). + * + * \warning The PWM channels of the specified LEDs are supposed to be used only + * by this module. + * + * \note The pins of the specified LEDs are set to PWM output mode. + */ +extern void LED_Set_Intensity(U32 leds, U8 intensity); + + +#endif // _LED_H_ diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/BOARDS/board.h b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/BOARDS/board.h new file mode 100644 index 000000000..78ee91e75 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/BOARDS/board.h @@ -0,0 +1,120 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Standard board header file. + * + * This file includes the appropriate board header file according to the + * defined board. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _BOARD_H_ +#define _BOARD_H_ + +#include + +/*! \name Base Boards + */ +//! @{ +#define EVK1100 1 //!< AT32UC3A EVK1100 board. +#define EVK1101 2 //!< AT32UC3B EVK1101 board. +#define UC3C_EK 3 //!< AT32UC3C UC3C_EK board. +#define EVK1104 4 //!< AT32UC3A3 EVK1104 board. +#define EVK1105 5 //!< AT32UC3A EVK1105 board. +#define STK1000 6 //!< AT32AP7000 STK1000 board. +#define NGW100 7 //!< AT32AP7000 NGW100 board. +#define STK600_RCUC3L0 8 //!< STK600 RCUC3L0 board. +#define UC3L_EK 9 //!< AT32UC3L-EK board. +#define USER_BOARD 99 //!< User-reserved board (if any). +//! @} + +/*! \name Extension Boards + */ +//! @{ +#define EXT1102 1 //!< AT32UC3B EXT1102 board. +#define MC300 2 //!< AT32UC3 MC300 board. +#define USER_EXT_BOARD 99 //!< User-reserved extension board (if any). +//! @} + +#if BOARD == EVK1100 + #include "EVK1100/evk1100.h" +#elif BOARD == EVK1101 + #include "EVK1101/evk1101.h" +#elif BOARD == UC3C_EK + #include "UC3C_EK/uc3c_ek.h" +#elif BOARD == EVK1104 + #include "EVK1104/evk1104.h" +#elif BOARD == EVK1105 + #include "EVK1105/evk1105.h" +#elif BOARD == STK1000 + #include "STK1000/stk1000.h" +#elif BOARD == NGW100 + #include "NGW100/ngw100.h" +#elif BOARD == STK600_RCUC3L0 + #include "STK600/RCUC3L0/stk600_rcuc3l0.h" +#elif BOARD == UC3L_EK + #include "UC3L_EK/uc3l_ek.h" +#elif BOARD == ARDUINO + #include "ARDUINO/arduino.h" +#else + #error No known AVR32 board defined +#endif + +#if (defined EXT_BOARD) + #if EXT_BOARD == EXT1102 + #include "EXT1102/ext1102.h" + #elif EXT_BOARD == MC300 + #include "MC300/mc300.h" + #elif EXT_BOARD == USER_EXT_BOARD + // User-reserved area: #include the header file of your extension board here + // (if any). + #endif +#endif + + +#ifndef FRCOSC + #define FRCOSC AVR32_PM_RCOSC_FREQUENCY //!< Default RCOsc frequency. +#endif + + +#endif // _BOARD_H_ diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/BOARDS/board.h.ori b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/BOARDS/board.h.ori new file mode 100644 index 000000000..30052c8ab --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/BOARDS/board.h.ori @@ -0,0 +1,121 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Standard board header file. + * + * This file includes the appropriate board header file according to the + * defined board. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _BOARD_H_ +#define _BOARD_H_ + +#include + +/*! \name Base Boards + */ +//! @{ +#define EVK1100 1 //!< AT32UC3A EVK1100 board. +#define EVK1101 2 //!< AT32UC3B EVK1101 board. +#define UC3C_EK 3 //!< AT32UC3C UC3C_EK board. +#define EVK1104 4 //!< AT32UC3A3 EVK1104 board. +#define EVK1105 5 //!< AT32UC3A EVK1105 board. +#define STK1000 6 //!< AT32AP7000 STK1000 board. +#define NGW100 7 //!< AT32AP7000 NGW100 board. +#define STK600_RCUC3L0 8 //!< STK600 RCUC3L0 board. +#define UC3L_EK 9 //!< AT32UC3L-EK board. +#define USER_BOARD 99 //!< User-reserved board (if any). +//! @} + +/*! \name Extension Boards + */ +//! @{ +#define EXT1102 1 //!< AT32UC3B EXT1102 board. +#define MC300 2 //!< AT32UC3 MC300 board. +#define USER_EXT_BOARD 99 //!< User-reserved extension board (if any). +//! @} + +#if BOARD == EVK1100 + #include "EVK1100/evk1100.h" +#elif BOARD == EVK1101 + #include "EVK1101/evk1101.h" +#elif BOARD == UC3C_EK + #include "UC3C_EK/uc3c_ek.h" +#elif BOARD == EVK1104 + #include "EVK1104/evk1104.h" +#elif BOARD == EVK1105 + #include "EVK1105/evk1105.h" +#elif BOARD == STK1000 + #include "STK1000/stk1000.h" +#elif BOARD == NGW100 + #include "NGW100/ngw100.h" +#elif BOARD == STK600_RCUC3L0 + #include "STK600/RCUC3L0/stk600_rcuc3l0.h" +#elif BOARD == UC3L_EK + #include "UC3L_EK/uc3l_ek.h" +#elif BOARD == USER_BOARD + // User-reserved area: #include the header file of your board here (if any). + #include "user_board.h" +#else + #error No known AVR32 board defined +#endif + +#if (defined EXT_BOARD) + #if EXT_BOARD == EXT1102 + #include "EXT1102/ext1102.h" + #elif EXT_BOARD == MC300 + #include "MC300/mc300.h" + #elif EXT_BOARD == USER_EXT_BOARD + // User-reserved area: #include the header file of your extension board here + // (if any). + #endif +#endif + + +#ifndef FRCOSC + #define FRCOSC AVR32_PM_RCOSC_FREQUENCY //!< Default RCOsc frequency. +#endif + + +#endif // _BOARD_H_ diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX/at45dbx.c b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX/at45dbx.c new file mode 100644 index 000000000..d4b1b730f --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX/at45dbx.c @@ -0,0 +1,672 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Management of the AT45DBX data flash controller through SPI. + * + * This file manages the accesses to the AT45DBX data flash components. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with an SPI module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +//_____ I N C L U D E S ___________________________________________________ + +#include "conf_access.h" + + +#if AT45DBX_MEM == ENABLE + +#include "compiler.h" +#include "board.h" +#include "gpio.h" +#include "spi.h" +#include "conf_at45dbx.h" +#include "at45dbx.h" +#include "printf-stdarg.h" + +#if AT45DBX_MEM_CNT > 4 + #error AT45DBX_MEM_CNT must not exceed 4 +#endif + + +//_____ D E F I N I T I O N S ______________________________________________ + +/*! \name AT45DBX Group A Commands + */ +//! @{ +#define AT45DBX_CMDA_RD_PAGE 0xD2 //!< Main Memory Page Read (Serial/8-bit Mode). +#define AT45DBX_CMDA_RD_ARRAY_LEG 0xE8 //!< Continuous Array Read, Legacy Command (Serial/8-bit Mode). +#define AT45DBX_CMDA_RD_ARRAY_LF_SM 0x03 //!< Continuous Array Read, Low-Frequency Mode (Serial Mode). +#define AT45DBX_CMDA_RD_ARRAY_AF_SM 0x0B //!< Continuous Array Read, Any-Frequency Mode (Serial Mode). +#define AT45DBX_CMDA_RD_SECTOR_PROT_REG 0x32 //!< Read Sector Protection Register (Serial/8-bit Mode). +#define AT45DBX_CMDA_RD_SECTOR_LKDN_REG 0x35 //!< Read Sector Lockdown Register (Serial/8-bit Mode). +#define AT45DBX_CMDA_RD_SECURITY_REG 0x77 //!< Read Security Register (Serial/8-bit Mode). +//! @} + +/*! \name AT45DBX Group B Commands + */ +//! @{ +#define AT45DBX_CMDB_ER_PAGE 0x81 //!< Page Erase (Serial/8-bit Mode). +#define AT45DBX_CMDB_ER_BLOCK 0x50 //!< Block Erase (Serial/8-bit Mode). +#define AT45DBX_CMDB_ER_SECTOR 0x7C //!< Sector Erase (Serial/8-bit Mode). +#define AT45DBX_CMDB_ER_CHIP 0xC794809A //!< Chip Erase (Serial/8-bit Mode). +#define AT45DBX_CMDB_XFR_PAGE_TO_BUF1 0x53 //!< Main Memory Page to Buffer 1 Transfer (Serial/8-bit Mode). +#define AT45DBX_CMDB_XFR_PAGE_TO_BUF2 0x55 //!< Main Memory Page to Buffer 2 Transfer (Serial/8-bit Mode). +#define AT45DBX_CMDB_CMP_PAGE_TO_BUF1 0x60 //!< Main Memory Page to Buffer 1 Compare (Serial/8-bit Mode). +#define AT45DBX_CMDB_CMP_PAGE_TO_BUF2 0x61 //!< Main Memory Page to Buffer 2 Compare (Serial/8-bit Mode). +#define AT45DBX_CMDB_PR_BUF1_TO_PAGE_ER 0x83 //!< Buffer 1 to Main Memory Page Program with Built-in Erase (Serial/8-bit Mode). +#define AT45DBX_CMDB_PR_BUF2_TO_PAGE_ER 0x86 //!< Buffer 2 to Main Memory Page Program with Built-in Erase (Serial/8-bit Mode). +#define AT45DBX_CMDB_PR_BUF1_TO_PAGE 0x88 //!< Buffer 1 to Main Memory Page Program without Built-in Erase (Serial/8-bit Mode). +#define AT45DBX_CMDB_PR_BUF2_TO_PAGE 0x89 //!< Buffer 2 to Main Memory Page Program without Built-in Erase (Serial/8-bit Mode). +#define AT45DBX_CMDB_PR_PAGE_TH_BUF1 0x82 //!< Main Memory Page Program through Buffer 1 (Serial/8-bit Mode). +#define AT45DBX_CMDB_PR_PAGE_TH_BUF2 0x85 //!< Main Memory Page Program through Buffer 2 (Serial/8-bit Mode). +#define AT45DBX_CMDB_RWR_PAGE_TH_BUF1 0x58 //!< Auto Page Rewrite through Buffer 1 (Serial/8-bit Mode). +#define AT45DBX_CMDB_RWR_PAGE_TH_BUF2 0x59 //!< Auto Page Rewrite through Buffer 2 (Serial/8-bit Mode). +//! @} + +/*! \name AT45DBX Group C Commands + */ +//! @{ +#define AT45DBX_CMDC_RD_BUF1_LF_SM 0xD1 //!< Buffer 1 Read, Low-Frequency Mode (Serial Mode). +#define AT45DBX_CMDC_RD_BUF2_LF_SM 0xD3 //!< Buffer 2 Read, Low-Frequency Mode (Serial Mode). +#define AT45DBX_CMDC_RD_BUF1_AF_SM 0xD4 //!< Buffer 1 Read, Any-Frequency Mode (Serial Mode). +#define AT45DBX_CMDC_RD_BUF2_AF_SM 0xD6 //!< Buffer 2 Read, Any-Frequency Mode (Serial Mode). +#define AT45DBX_CMDC_RD_BUF1_AF_8M 0x54 //!< Buffer 1 Read, Any-Frequency Mode (8-bit Mode). +#define AT45DBX_CMDC_RD_BUF2_AF_8M 0x56 //!< Buffer 2 Read, Any-Frequency Mode (8-bit Mode). +#define AT45DBX_CMDC_WR_BUF1 0x84 //!< Buffer 1 Write (Serial/8-bit Mode). +#define AT45DBX_CMDC_WR_BUF2 0x87 //!< Buffer 2 Write (Serial/8-bit Mode). +#define AT45DBX_CMDC_RD_STATUS_REG 0xD7 //!< Status Register Read (Serial/8-bit Mode). +#define AT45DBX_CMDC_RD_MNFCT_DEV_ID_SM 0x9F //!< Manufacturer and Device ID Read (Serial Mode). +//! @} + +/*! \name AT45DBX Group D Commands + */ +//! @{ +#define AT45DBX_CMDD_EN_SECTOR_PROT 0x3D2A7FA9 //!< Enable Sector Protection (Serial/8-bit Mode). +#define AT45DBX_CMDD_DIS_SECTOR_PROT 0x3D2A7F9A //!< Disable Sector Protection (Serial/8-bit Mode). +#define AT45DBX_CMDD_ER_SECTOR_PROT_REG 0x3D2A7FCF //!< Erase Sector Protection Register (Serial/8-bit Mode). +#define AT45DBX_CMDD_PR_SECTOR_PROT_REG 0x3D2A7FFC //!< Program Sector Protection Register (Serial/8-bit Mode). +#define AT45DBX_CMDD_LKDN_SECTOR 0x3D2A7F30 //!< Sector Lockdown (Serial/8-bit Mode). +#define AT45DBX_CMDD_PR_SECURITY_REG 0x9B000000 //!< Program Security Register (Serial/8-bit Mode). +#define AT45DBX_CMDD_PR_CONF_REG 0x3D2A80A6 //!< Program Configuration Register (Serial/8-bit Mode). +#define AT45DBX_CMDD_DEEP_PWR_DN 0xB9 //!< Deep Power-down (Serial/8-bit Mode). +#define AT45DBX_CMDD_RSM_DEEP_PWR_DN 0xAB //!< Resume from Deep Power-down (Serial/8-bit Mode). +//! @} + + +/*! \name Bit-Masks and Values for the Status Register + */ +//! @{ +#define AT45DBX_MSK_BUSY 0x80 //!< Busy status bit-mask. +#define AT45DBX_BUSY 0x00 //!< Busy status value (0x00 when busy, 0x80 when ready). +#define AT45DBX_MSK_DENSITY 0x3C //!< Device density bit-mask. +//! @} +#if AT45DBX_MEM_SIZE == AT45DBX_1MB + +/*! \name AT45DB081 Memories + */ +//! @{ +#define AT45DB021D_DENSITY 0x14 //!< Device density value. +#define AT45DBX_DENSITY 0x24 //!< Device density value. +#define AT45DBX_BYTE_ADDR_BITS 9 //!< Address bits for byte position within buffer. + +//! @} +#elif AT45DBX_MEM_SIZE == AT45DBX_2MB +/*! \name AT45DB021D Memories + */ +//! @{ +#define AT45DBX_DENSITY 0x21 //!< Device density value. +#define AT45DBX_BYTE_ADDR_BITS 10 //!< Address bits for byte position within buffer. + +//! @} +#if 0 +/*! \name AT45DB161 Memories + */ +//! @{ +#define AT45DBX_DENSITY 0x2C //!< Device density value. +#define AT45DBX_BYTE_ADDR_BITS 10 //!< Address bits for byte position within buffer. + +//! @} +#endif + +#elif AT45DBX_MEM_SIZE == AT45DBX_4MB + +/*! \name AT45DB321 Memories + */ +//! @{ +#define AT45DBX_DENSITY 0x34 //!< Device density value. +#define AT45DBX_BYTE_ADDR_BITS 10 //!< Address bits for byte position within buffer. + +//! @} + +#elif AT45DBX_MEM_SIZE == AT45DBX_8MB + +/*! \name AT45DB642 Memories + */ +//! @{ +#define AT45DBX_DENSITY 0x3C //!< Device density value. +#define AT45DBX_BYTE_ADDR_BITS 11 //!< Address bits for byte position within buffer. + + +//! @} + +#else + #error AT45DBX_MEM_SIZE is not defined to a supported value +#endif + + + +//! Address bits for page selection. +#define AT45DBX_PAGE_ADDR_BITS (AT45DBX_MEM_SIZE - AT45DBX_PAGE_BITS) + +//! Number of bits for addresses within pages. +#define AT45DBX_PAGE_BITS (AT45DBX_BYTE_ADDR_BITS - 1) + +//! Page size in bytes. +#define AT45DBX_PAGE_SIZE (1 << AT45DBX_PAGE_BITS) + +//! Bit-mask for byte position within buffer in \ref gl_ptr_mem. +#define AT45DBX_MSK_PTR_BYTE ((1 << AT45DBX_PAGE_BITS) - 1) + +//! Bit-mask for page selection in \ref gl_ptr_mem. +#define AT45DBX_MSK_PTR_PAGE (((1 << AT45DBX_PAGE_ADDR_BITS) - 1) << AT45DBX_PAGE_BITS) + +//! Bit-mask for byte position within sector in \ref gl_ptr_mem. +#define AT45DBX_MSK_PTR_SECTOR ((1 << AT45DBX_SECTOR_BITS) - 1) + + +/*! \brief Sends a dummy byte through SPI. + */ +#define spi_write_dummy() spi_write(AT45DBX_SPI, 0xFF) + + +//! Boolean indicating whether memory is in busy state. +static Bool at45dbx_busy; + +//! Memory data pointer. +static U32 gl_ptr_mem; + +//! Sector buffer. +static U8 sector_buf[AT45DBX_SECTOR_SIZE]; + + +/*! \name Control Functions + */ +//! @{ + + +Bool at45dbx_init(spi_options_t spiOptions, unsigned int pba_hz) +{ + // Setup SPI registers according to spiOptions. + for (spiOptions.reg = AT45DBX_SPI_FIRST_NPCS; + spiOptions.reg < AT45DBX_SPI_FIRST_NPCS + AT45DBX_MEM_CNT; + spiOptions.reg++) + { + if (spi_setupChipReg(AT45DBX_SPI, &spiOptions, pba_hz) != SPI_OK) return KO; + } + + // Memory ready. + at45dbx_busy = FALSE; + + return OK; +} + + +/*! \brief Selects or unselects a DF memory. + * + * \param memidx Memory ID of DF to select or unselect. + * \param bSelect Boolean indicating whether the DF memory has to be selected. + */ +static void at45dbx_chipselect_df(U8 memidx, Bool bSelect) +{ + if (bSelect) + { + // Select SPI chip. + spi_selectChip(AT45DBX_SPI, AT45DBX_SPI_FIRST_NPCS + memidx); + } + else + { + // Unselect SPI chip. + spi_unselectChip(AT45DBX_SPI, AT45DBX_SPI_FIRST_NPCS + memidx); + } +} + + +Bool at45dbx_mem_check(void) +{ + U8 df; + U16 status = 0; + + // DF memory check. + for (df = 0; df < AT45DBX_MEM_CNT; df++) + { + // Select the DF memory to check. + at45dbx_chipselect_df(df, TRUE); + + // Send the Status Register Read command. + spi_write(AT45DBX_SPI, AT45DBX_CMDC_RD_STATUS_REG); + + // Send a dummy byte to read the status register. + spi_write_dummy(); + spi_read(AT45DBX_SPI, &status); + + // Unselect the checked DF memory. + at45dbx_chipselect_df(df, FALSE); + + // Unexpected device density value. + if ((status & AT45DBX_MSK_DENSITY) < AT45DB021D_DENSITY) + { + printk("Unexpected device density value: %d (0x%x)\n", (status & AT45DBX_MSK_DENSITY), status); + return KO; + } + } + + return OK; +} + + +/*! \brief Waits until the DF is ready. + */ +static void at45dbx_wait_ready(void) +{ + U16 status; + + // Select the DF memory gl_ptr_mem points to. + at45dbx_chipselect_df(gl_ptr_mem >> AT45DBX_MEM_SIZE, TRUE); + + // Send the Status Register Read command. + spi_write(AT45DBX_SPI, AT45DBX_CMDC_RD_STATUS_REG); + + // Read the status register until the DF is ready. + do + { + // Send a dummy byte to read the status register. + spi_write_dummy(); + spi_read(AT45DBX_SPI, &status); + } while ((status & AT45DBX_MSK_BUSY) == AT45DBX_BUSY); + + // Unselect the DF memory gl_ptr_mem points to. + at45dbx_chipselect_df(gl_ptr_mem >> AT45DBX_MEM_SIZE, FALSE); +} + + +Bool at45dbx_read_open(U32 sector) +{ + U32 addr; + + // Set the global memory pointer to a byte address. + gl_ptr_mem = sector << AT45DBX_SECTOR_BITS; // gl_ptr_mem = sector * AT45DBX_SECTOR_SIZE. + + // If the DF memory is busy, wait until it's ready. + if (at45dbx_busy) at45dbx_wait_ready(); + at45dbx_busy = FALSE; + + // Select the DF memory gl_ptr_mem points to. + at45dbx_chipselect_df(gl_ptr_mem >> AT45DBX_MEM_SIZE, TRUE); + + // Initiate a page read at a given sector. + + // Send the Main Memory Page Read command. + spi_write(AT45DBX_SPI, AT45DBX_CMDA_RD_PAGE); + + // Send the three address bytes, which comprise: + // - (24 - (AT45DBX_PAGE_ADDR_BITS + AT45DBX_BYTE_ADDR_BITS)) reserved bits; + // - then AT45DBX_PAGE_ADDR_BITS bits specifying the page in main memory to be read; + // - then AT45DBX_BYTE_ADDR_BITS bits specifying the starting byte address within that page. + // NOTE: The bits of gl_ptr_mem above the AT45DBX_MEM_SIZE bits are useless for the local + // DF addressing. They are used for DF discrimination when there are several DFs. + addr = (Rd_bitfield(gl_ptr_mem, AT45DBX_MSK_PTR_PAGE) << AT45DBX_BYTE_ADDR_BITS) | + Rd_bitfield(gl_ptr_mem, AT45DBX_MSK_PTR_BYTE); + spi_write(AT45DBX_SPI, LSB2W(addr)); + spi_write(AT45DBX_SPI, LSB1W(addr)); + spi_write(AT45DBX_SPI, LSB0W(addr)); + + // Send 32 don't care clock cycles to initialize the read operation. + spi_write_dummy(); + spi_write_dummy(); + spi_write_dummy(); + spi_write_dummy(); + + return OK; +} + + +void at45dbx_read_close(void) +{ + // Unselect the DF memory gl_ptr_mem points to. + at45dbx_chipselect_df(gl_ptr_mem >> AT45DBX_MEM_SIZE, FALSE); + + // Memory ready. + at45dbx_busy = FALSE; +} + + +Bool at45dbx_write_open(U32 sector) +{ + U32 addr; + + // Set the global memory pointer to a byte address. + gl_ptr_mem = sector << AT45DBX_SECTOR_BITS; // gl_ptr_mem = sector * AT45DBX_SECTOR_SIZE. + + // If the DF memory is busy, wait until it's ready. + if (at45dbx_busy) at45dbx_wait_ready(); + at45dbx_busy = FALSE; + +#if AT45DBX_PAGE_SIZE > AT45DBX_SECTOR_SIZE + // Select the DF memory gl_ptr_mem points to. + at45dbx_chipselect_df(gl_ptr_mem >> AT45DBX_MEM_SIZE, TRUE); + + // Transfer the content of the current page to buffer 1. + + // Send the Main Memory Page to Buffer 1 Transfer command. + spi_write(AT45DBX_SPI, AT45DBX_CMDB_XFR_PAGE_TO_BUF1); + + // Send the three address bytes, which comprise: + // - (24 - (AT45DBX_PAGE_ADDR_BITS + AT45DBX_BYTE_ADDR_BITS)) reserved bits; + // - then AT45DBX_PAGE_ADDR_BITS bits specifying the page in main memory to be read; + // - then AT45DBX_BYTE_ADDR_BITS don't care bits. + // NOTE: The bits of gl_ptr_mem above the AT45DBX_MEM_SIZE bits are useless for the local + // DF addressing. They are used for DF discrimination when there are several DFs. + addr = Rd_bitfield(gl_ptr_mem, AT45DBX_MSK_PTR_PAGE) << AT45DBX_BYTE_ADDR_BITS; + spi_write(AT45DBX_SPI, LSB2W(addr)); + spi_write(AT45DBX_SPI, LSB1W(addr)); + spi_write(AT45DBX_SPI, LSB0W(addr)); + + // Unselect the DF memory gl_ptr_mem points to. + at45dbx_chipselect_df(gl_ptr_mem >> AT45DBX_MEM_SIZE, FALSE); + + // Wait for end of page transfer. + at45dbx_wait_ready(); +#endif + + // Select the DF memory gl_ptr_mem points to. + at45dbx_chipselect_df(gl_ptr_mem >> AT45DBX_MEM_SIZE, TRUE); + + // Initiate a page write at a given sector. + + // Send the Main Memory Page Program through Buffer 1 command. + spi_write(AT45DBX_SPI, AT45DBX_CMDB_PR_PAGE_TH_BUF1); + + // Send the three address bytes, which comprise: + // - (24 - (AT45DBX_PAGE_ADDR_BITS + AT45DBX_BYTE_ADDR_BITS)) reserved bits; + // - then AT45DBX_PAGE_ADDR_BITS bits specifying the page in main memory to be written; + // - then AT45DBX_BYTE_ADDR_BITS bits specifying the starting byte address within that page. + // NOTE: The bits of gl_ptr_mem above the AT45DBX_MEM_SIZE bits are useless for the local + // DF addressing. They are used for DF discrimination when there are several DFs. + addr = (Rd_bitfield(gl_ptr_mem, AT45DBX_MSK_PTR_PAGE) << AT45DBX_BYTE_ADDR_BITS) | + Rd_bitfield(gl_ptr_mem, AT45DBX_MSK_PTR_BYTE); + spi_write(AT45DBX_SPI, LSB2W(addr)); + spi_write(AT45DBX_SPI, LSB1W(addr)); + spi_write(AT45DBX_SPI, LSB0W(addr)); + + return OK; +} + + +void at45dbx_write_close(void) +{ + // While end of logical sector not reached, zero-fill remaining memory bytes. + while (Rd_bitfield(gl_ptr_mem, AT45DBX_MSK_PTR_SECTOR)) + { + spi_write(AT45DBX_SPI, 0x00); + gl_ptr_mem++; + } + + // Unselect the DF memory gl_ptr_mem points to. + at45dbx_chipselect_df(gl_ptr_mem >> AT45DBX_MEM_SIZE, FALSE); + + // Memory busy. + at45dbx_busy = TRUE; +} + + +//! @} + + +/*! \name Single-Byte Access Functions + */ +//! @{ + + +U8 at45dbx_read_byte(void) +{ + U16 data; + + // Memory busy. + if (at45dbx_busy) + { + // Being here, we know that we previously finished a page read. + // => We have to access the next page. + + // Memory ready. + at45dbx_busy = FALSE; + + // Eventually select the next DF and open the next page. + // NOTE: at45dbx_read_open input parameter is a sector. + at45dbx_read_open(gl_ptr_mem >> AT45DBX_SECTOR_BITS); // gl_ptr_mem / AT45DBX_SECTOR_SIZE. + } + + // Send a dummy byte to read the next data byte. + spi_write_dummy(); + spi_read(AT45DBX_SPI, &data); + gl_ptr_mem++; + + // If end of page reached, + if (!Rd_bitfield(gl_ptr_mem, AT45DBX_MSK_PTR_BYTE)) + { + // unselect the DF memory gl_ptr_mem points to. + at45dbx_chipselect_df(gl_ptr_mem >> AT45DBX_MEM_SIZE, FALSE); + + // Memory busy. + at45dbx_busy = TRUE; + } + + return data; +} + + +Bool at45dbx_write_byte(U8 b) +{ + // Memory busy. + if (at45dbx_busy) + { + // Being here, we know that we previously launched a page programming. + // => We have to access the next page. + + // Eventually select the next DF and open the next page. + // NOTE: at45dbx_write_open input parameter is a sector. + at45dbx_write_open(gl_ptr_mem >> AT45DBX_SECTOR_BITS); // gl_ptr_mem / AT45DBX_SECTOR_SIZE. + } + + // Write the next data byte. + spi_write(AT45DBX_SPI, b); + gl_ptr_mem++; + + // If end of page reached, + if (!Rd_bitfield(gl_ptr_mem, AT45DBX_MSK_PTR_BYTE)) + { + // unselect the DF memory gl_ptr_mem points to in order to program the page. + at45dbx_chipselect_df(gl_ptr_mem >> AT45DBX_MEM_SIZE, FALSE); + + // Memory busy. + at45dbx_busy = TRUE; + } + + return OK; +} + + +//! @} + + +/*! \name Multiple-Sector Access Functions + */ +//! @{ + + +Bool at45dbx_read_multiple_sector(U16 nb_sector) +{ + while (nb_sector--) + { + // Read the next sector. + at45dbx_read_sector_2_ram(sector_buf); + at45dbx_read_multiple_sector_callback(sector_buf); + } + + return OK; +} + + +Bool at45dbx_write_multiple_sector(U16 nb_sector) +{ + while (nb_sector--) + { + // Write the next sector. + at45dbx_write_multiple_sector_callback(sector_buf); + at45dbx_write_sector_from_ram(sector_buf); + } + + return OK; +} + + +//! @} + + +/*! \name Single-Sector Access Functions + */ +//! @{ + + +Bool at45dbx_read_sector_2_ram(void *ram) +{ + U8 *_ram = ram; + U16 i; + U16 data; + + // Memory busy. + if (at45dbx_busy) + { + // Being here, we know that we previously finished a page read. + // => We have to access the next page. + + // Memory ready. + at45dbx_busy = FALSE; + + // Eventually select the next DF and open the next page. + // NOTE: at45dbx_read_open input parameter is a sector. + at45dbx_read_open(gl_ptr_mem >> AT45DBX_SECTOR_BITS); // gl_ptr_mem / AT45DBX_SECTOR_SIZE. + } + + // Read the next sector. + for (i = AT45DBX_SECTOR_SIZE; i; i--) + { + // Send a dummy byte to read the next data byte. + spi_write_dummy(); + spi_read(AT45DBX_SPI, &data); + *_ram++ = data; + } + + // Update the memory pointer. + gl_ptr_mem += AT45DBX_SECTOR_SIZE; + +#if AT45DBX_PAGE_SIZE > AT45DBX_SECTOR_SIZE + // If end of page reached, + if (!Rd_bitfield(gl_ptr_mem, AT45DBX_MSK_PTR_BYTE)) +#endif + { + // unselect the DF memory gl_ptr_mem points to. + at45dbx_chipselect_df(gl_ptr_mem >> AT45DBX_MEM_SIZE, FALSE); + + // Memory busy. + at45dbx_busy = TRUE; + } + + return OK; +} + + +Bool at45dbx_write_sector_from_ram(const void *ram) +{ + const U8 *_ram = ram; + U16 i; + + // Memory busy. + if (at45dbx_busy) + { + // Being here, we know that we previously launched a page programming. + // => We have to access the next page. + + // Eventually select the next DF and open the next page. + // NOTE: at45dbx_write_open input parameter is a sector. + at45dbx_write_open(gl_ptr_mem >> AT45DBX_SECTOR_BITS); // gl_ptr_mem / AT45DBX_SECTOR_SIZE. + } + + // Write the next sector. + for (i = AT45DBX_SECTOR_SIZE; i; i--) + { + // Write the next data byte. + spi_write(AT45DBX_SPI, *_ram++); + } + + // Update the memory pointer. + gl_ptr_mem += AT45DBX_SECTOR_SIZE; + +#if AT45DBX_PAGE_SIZE > AT45DBX_SECTOR_SIZE + // If end of page reached, + if (!Rd_bitfield(gl_ptr_mem, AT45DBX_MSK_PTR_BYTE)) +#endif + { + // unselect the DF memory gl_ptr_mem points to in order to program the page. + at45dbx_chipselect_df(gl_ptr_mem >> AT45DBX_MEM_SIZE, FALSE); + + // Memory busy. + at45dbx_busy = TRUE; + } + + return OK; +} + + +//! @} + + +#endif // AT45DBX_MEM == ENABLE diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX/at45dbx.h b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX/at45dbx.h new file mode 100644 index 000000000..5816b618b --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX/at45dbx.h @@ -0,0 +1,269 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Management of the AT45DBX data flash controller through SPI. + * + * This file manages the accesses to the AT45DBX data flash components. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with an SPI module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _AT45DBX_H_ +#define _AT45DBX_H_ + + +#include "conf_access.h" + +#if AT45DBX_MEM == DISABLE + #error at45dbx.h is #included although AT45DBX_MEM is disabled +#endif + + +#include "spi.h" + + +//_____ D E F I N I T I O N S ______________________________________________ + +/*! \name Available AT45DBX Sizes + * + * Number of address bits of available AT45DBX data flash memories. + * + * \note Only memories with page sizes of at least 512 bytes (sector size) are + * supported. + */ +//! @{ +#define AT45DBX_1MB 20 +#define AT45DBX_2MB 21 +#define AT45DBX_4MB 22 +#define AT45DBX_8MB 23 +//! @} + +// AT45DBX_1MB +#define AT45DBX_SECTOR_BITS 8 //! Number of bits for addresses within sectors. +// AT45DBX_2MB AT45DBX_4MB AT45DBX_8MB +//#define AT45DBX_SECTOR_BITS 9 //! Number of bits for addresses within sectors. + +//! Sector size in bytes. +#define AT45DBX_SECTOR_SIZE (1 << AT45DBX_SECTOR_BITS) + +//_____ D E C L A R A T I O N S ____________________________________________ + +/*! \name Control Functions + */ +//! @{ + +/*! \brief Initializes the data flash controller and the SPI channel by which + * the DF is controlled. + * + * \param spiOptions Initialization options of the DF SPI channel. + * \param pba_hz SPI module input clock frequency (PBA clock, Hz). + * + * \retval OK Success. + * \retval KO Failure. + */ +extern Bool at45dbx_init(spi_options_t spiOptions, unsigned int pba_hz); + +/*! \brief Performs a memory check on all DFs. + * + * \retval OK Success. + * \retval KO Failure. + */ +extern Bool at45dbx_mem_check(void); + +/*! \brief Opens a DF memory in read mode at a given sector. + * + * \param sector Start sector. + * + * \retval OK Success. + * \retval KO Failure. + * + * \note Sector may be page-unaligned (depending on the DF page size). + */ +extern Bool at45dbx_read_open(U32 sector); + +/*! \brief Unselects the current DF memory. + */ +extern void at45dbx_read_close(void); + +/*! \brief This function opens a DF memory in write mode at a given sector. + * + * \param sector Start sector. + * + * \retval OK Success. + * \retval KO Failure. + * + * \note Sector may be page-unaligned (depending on the DF page size). + * + * \note If \ref AT45DBX_PAGE_SIZE > \ref AT45DBX_SECTOR_SIZE, page content is + * first loaded in buffer to then be partially updated by write byte or + * write sector functions. + */ +extern Bool at45dbx_write_open(U32 sector); + +/*! \brief Fills the end of the current logical sector and launches page programming. + */ +extern void at45dbx_write_close(void); + +//! @} + + +/*! \name Single-Byte Access Functions + */ +//! @{ + +/*! \brief Performs a single byte read from DF memory. + * + * \return The read byte. + * + * \note First call must be preceded by a call to the \ref at45dbx_read_open + * function. + */ +extern U8 at45dbx_read_byte(void); + +/*! \brief Performs a single byte write to DF memory. + * + * \param b The byte to write. + * + * \retval OK Success. + * \retval KO Failure. + * + * \note First call must be preceded by a call to the \ref at45dbx_write_open + * function. + */ +extern Bool at45dbx_write_byte(U8 b); + +//! @} + + +/*! \name Multiple-Sector Access Functions + */ +//! @{ + +/*! \brief Reads \a nb_sector sectors from DF memory. + * + * Data flow is: DF -> callback. + * + * \param nb_sector Number of contiguous sectors to read. + * + * \retval OK Success. + * \retval KO Failure. + * + * \note First call must be preceded by a call to the \ref at45dbx_read_open + * function. + * + * \note As \ref AT45DBX_PAGE_SIZE is always a multiple of + * \ref AT45DBX_SECTOR_SIZE, there is no need to check page end for each + * byte. + */ +extern Bool at45dbx_read_multiple_sector(U16 nb_sector); + +/*! \brief Callback function invoked after each sector read during + * \ref at45dbx_read_multiple_sector. + * + * \param psector Pointer to read sector. + */ +extern void at45dbx_read_multiple_sector_callback(const void *psector); + +/*! \brief Writes \a nb_sector sectors to DF memory. + * + * Data flow is: callback -> DF. + * + * \param nb_sector Number of contiguous sectors to write. + * + * \retval OK Success. + * \retval KO Failure. + * + * \note First call must be preceded by a call to the \ref at45dbx_write_open + * function. + * + * \note As \ref AT45DBX_PAGE_SIZE is always a multiple of + * \ref AT45DBX_SECTOR_SIZE, there is no need to check page end for each + * byte. + */ +extern Bool at45dbx_write_multiple_sector(U16 nb_sector); + +/*! \brief Callback function invoked before each sector write during + * \ref at45dbx_write_multiple_sector. + * + * \param psector Pointer to sector to write. + */ +extern void at45dbx_write_multiple_sector_callback(void *psector); + +//! @} + + +/*! \name Single-Sector Access Functions + */ +//! @{ + +/*! \brief Reads 1 DF sector to a RAM buffer. + * + * Data flow is: DF -> RAM. + * + * \param ram Pointer to RAM buffer. + * + * \retval OK Success. + * \retval KO Failure. + * + * \note First call must be preceded by a call to the \ref at45dbx_read_open + * function. + */ +extern Bool at45dbx_read_sector_2_ram(void *ram); + +/*! \brief Writes 1 DF sector from a RAM buffer. + * + * Data flow is: RAM -> DF. + * + * \param ram Pointer to RAM buffer. + * + * \retval OK Success. + * \retval KO Failure. + * + * \note First call must be preceded by a call to the \ref at45dbx_write_open + * function. + */ +extern Bool at45dbx_write_sector_from_ram(const void *ram); + +//! @} + + +#endif // _AT45DBX_H_ diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX/at45dbx_mem.c b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX/at45dbx_mem.c new file mode 100644 index 000000000..4c0ace2f5 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX/at45dbx_mem.c @@ -0,0 +1,234 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief CTRL_ACCESS interface for the AT45DBX data flash controller. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with an SPI module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +//_____ I N C L U D E S ___________________________________________________ + +#include "conf_access.h" + + +#if AT45DBX_MEM == ENABLE + +#include "conf_at45dbx.h" +#include "at45dbx.h" +#include "at45dbx_mem.h" + + +//_____ D E F I N I T I O N S ______________________________________________ + +//! Whether to detect write accesses to the memory. +#define AT45DBX_MEM_TEST_CHANGE_STATE ENABLED + + +#if (ACCESS_USB == ENABLED || ACCESS_MEM_TO_RAM == ENABLED) && AT45DBX_MEM_TEST_CHANGE_STATE == ENABLED + +//! Memory data modified flag. +static volatile Bool s_b_data_modify = FALSE; + +#endif + + +/*! \name Control Interface + */ +//! @{ + + +Ctrl_status at45dbx_test_unit_ready(void) +{ + return (at45dbx_mem_check() == OK) ? CTRL_GOOD : CTRL_NO_PRESENT; +} + + +Ctrl_status at45dbx_read_capacity(U32 *u32_nb_sector) +{ + *u32_nb_sector = (AT45DBX_MEM_CNT << (AT45DBX_MEM_SIZE - AT45DBX_SECTOR_BITS)) - 1; + + return CTRL_GOOD; +} + + +Bool at45dbx_wr_protect(void) +{ + return FALSE; +} + + +Bool at45dbx_removal(void) +{ + return FALSE; +} + + +//! @} + + +#if ACCESS_USB == ENABLED + +#include "usb_drv.h" +#include "scsi_decoder.h" + + +/*! \name MEM <-> USB Interface + */ +//! @{ + + +Ctrl_status at45dbx_usb_read_10(U32 addr, U16 nb_sector) +{ + if (addr + nb_sector > AT45DBX_MEM_CNT << (AT45DBX_MEM_SIZE - AT45DBX_SECTOR_BITS)) return CTRL_FAIL; + + at45dbx_read_open(addr); + at45dbx_read_multiple_sector(nb_sector); + at45dbx_read_close(); + + return CTRL_GOOD; +} + + +void at45dbx_read_multiple_sector_callback(const void *psector) +{ + U16 data_to_transfer = AT45DBX_SECTOR_SIZE; + + // Transfer read sector to the USB interface. + while (data_to_transfer) + { + while (!Is_usb_in_ready(g_scsi_ep_ms_in)) + { + if(!Is_usb_endpoint_enabled(g_scsi_ep_ms_in)) + return; // USB Reset + } + + Usb_reset_endpoint_fifo_access(g_scsi_ep_ms_in); + data_to_transfer = usb_write_ep_txpacket(g_scsi_ep_ms_in, psector, + data_to_transfer, &psector); + Usb_ack_in_ready_send(g_scsi_ep_ms_in); + } +} + + +Ctrl_status at45dbx_usb_write_10(U32 addr, U16 nb_sector) +{ + if (addr + nb_sector > AT45DBX_MEM_CNT << (AT45DBX_MEM_SIZE - AT45DBX_SECTOR_BITS)) return CTRL_FAIL; + +#if AT45DBX_MEM_TEST_CHANGE_STATE == ENABLED + if (nb_sector) s_b_data_modify = TRUE; +#endif + + at45dbx_write_open(addr); + at45dbx_write_multiple_sector(nb_sector); + at45dbx_write_close(); + + return CTRL_GOOD; +} + + +void at45dbx_write_multiple_sector_callback(void *psector) +{ + U16 data_to_transfer = AT45DBX_SECTOR_SIZE; + + // Transfer sector to write from the USB interface. + while (data_to_transfer) + { + while (!Is_usb_out_received(g_scsi_ep_ms_out)) + { + if(!Is_usb_endpoint_enabled(g_scsi_ep_ms_out)) + return; // USB Reset + } + + Usb_reset_endpoint_fifo_access(g_scsi_ep_ms_out); + data_to_transfer = usb_read_ep_rxpacket(g_scsi_ep_ms_out, psector, + data_to_transfer, &psector); + Usb_ack_out_received_free(g_scsi_ep_ms_out); + } +} + + +//! @} + +#endif // ACCESS_USB == ENABLED + + +#if ACCESS_MEM_TO_RAM == ENABLED + +/*! \name MEM <-> RAM Interface + */ +//! @{ + + +Ctrl_status at45dbx_df_2_ram(U32 addr, void *ram) +{ + if (addr + 1 > AT45DBX_MEM_CNT << (AT45DBX_MEM_SIZE - AT45DBX_SECTOR_BITS)) return CTRL_FAIL; + + at45dbx_read_open(addr); + at45dbx_read_sector_2_ram(ram); + at45dbx_read_close(); + + return CTRL_GOOD; +} + + +Ctrl_status at45dbx_ram_2_df(U32 addr, const void *ram) +{ + if (addr + 1 > AT45DBX_MEM_CNT << (AT45DBX_MEM_SIZE - AT45DBX_SECTOR_BITS)) return CTRL_FAIL; + +#if AT45DBX_MEM_TEST_CHANGE_STATE == ENABLED + s_b_data_modify = TRUE; +#endif + + at45dbx_write_open(addr); + at45dbx_write_sector_from_ram(ram); + at45dbx_write_close(); + + return CTRL_GOOD; +} + + +//! @} + +#endif // ACCESS_MEM_TO_RAM == ENABLED + + +#endif // AT45DBX_MEM == ENABLE diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX/at45dbx_mem.h b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX/at45dbx_mem.h new file mode 100644 index 000000000..de24fa371 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX/at45dbx_mem.h @@ -0,0 +1,164 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief CTRL_ACCESS interface for the AT45DBX data flash controller. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with an SPI module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _AT45DBX_MEM_H_ +#define _AT45DBX_MEM_H_ + + +#include "conf_access.h" + +#if AT45DBX_MEM == DISABLE + #error at45dbx_mem.h is #included although AT45DBX_MEM is disabled +#endif + + +#include "ctrl_access.h" + + +//_____ D E C L A R A T I O N S ____________________________________________ + +/*! \name Control Interface + */ +//! @{ + +/*! \brief Tests the memory state and initializes the memory if required. + * + * The TEST UNIT READY SCSI primary command allows an application client to poll + * a LUN until it is ready without having to allocate memory for returned data. + * + * This command may be used to check the media status of LUNs with removable + * media. + * + * \return Status. + */ +extern Ctrl_status at45dbx_test_unit_ready(void); + +/*! \brief Returns the address of the last valid sector in the memory. + * + * \param u32_nb_sector Pointer to the address of the last valid sector. + * + * \return Status. + */ +extern Ctrl_status at45dbx_read_capacity(U32 *u32_nb_sector); + +/*! \brief Returns the write-protection state of the memory. + * + * \return \c TRUE if the memory is write-protected, else \c FALSE. + * + * \note Only used by removable memories with hardware-specific write + * protection. + */ +extern Bool at45dbx_wr_protect(void); + +/*! \brief Tells whether the memory is removable. + * + * \return \c TRUE if the memory is removable, else \c FALSE. + */ +extern Bool at45dbx_removal(void); + +//! @} + + +#if ACCESS_USB == ENABLED + +/*! \name MEM <-> USB Interface + */ +//! @{ + +/*! \brief Tranfers data from the memory to USB. + * + * \param addr Address of first memory sector to read. + * \param nb_sector Number of sectors to transfer. + * + * \return Status. + */ +extern Ctrl_status at45dbx_usb_read_10(U32 addr, U16 nb_sector); + +/*! \brief Tranfers data from USB to the memory. + * + * \param addr Address of first memory sector to write. + * \param nb_sector Number of sectors to transfer. + * + * \return Status. + */ +extern Ctrl_status at45dbx_usb_write_10(U32 addr, U16 nb_sector); + +//! @} + +#endif + + +#if ACCESS_MEM_TO_RAM == ENABLED + +/*! \name MEM <-> RAM Interface + */ +//! @{ + +/*! \brief Copies 1 data sector from the memory to RAM. + * + * \param addr Address of first memory sector to read. + * \param ram Pointer to RAM buffer to write. + * + * \return Status. + */ +extern Ctrl_status at45dbx_df_2_ram(U32 addr, void *ram); + +/*! \brief Copies 1 data sector from RAM to the memory. + * + * \param addr Address of first memory sector to write. + * \param ram Pointer to RAM buffer to read. + * + * \return Status. + */ +extern Ctrl_status at45dbx_ram_2_df(U32 addr, const void *ram); + +//! @} + +#endif + + +#endif // _AT45DBX_MEM_H_ diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC/flashc.c b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC/flashc.c new file mode 100644 index 000000000..2eee15c0a --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC/flashc.c @@ -0,0 +1,1117 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief FLASHC driver for AVR32 UC3. + * + * AVR32 Flash Controller driver module. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with a FLASHC module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#include +#include +#include "compiler.h" +#include "flashc.h" + + +/*! \name FLASHC Writable Bit-Field Registers + */ +//! @{ + +typedef union +{ + unsigned long fcr; + avr32_flashc_fcr_t FCR; +} u_avr32_flashc_fcr_t; + +typedef union +{ + unsigned long fcmd; + avr32_flashc_fcmd_t FCMD; +} u_avr32_flashc_fcmd_t; + +//! @} + + +/*! \name Flash Properties + */ +//! @{ + + +unsigned int flashc_get_flash_size(void) +{ +#if (defined AVR32_FLASHC_300_H_INCLUDED) + static const unsigned int FLASH_SIZE[1 << AVR32_FLASHC_PR_FSZ_SIZE] = + { + 32 << 10, + 64 << 10, + 128 << 10, + 256 << 10, + 384 << 10, + 512 << 10, + 768 << 10, + 1024 << 10 + }; + return FLASH_SIZE[(AVR32_FLASHC.pr & AVR32_FLASHC_PR_FSZ_MASK) >> AVR32_FLASHC_PR_FSZ_OFFSET]; +#else + static const unsigned int FLASH_SIZE[1 << AVR32_FLASHC_FSR_FSZ_SIZE] = + { + 32 << 10, + 64 << 10, + 128 << 10, + 256 << 10, + 384 << 10, + 512 << 10, + 768 << 10, + 1024 << 10 + }; + return FLASH_SIZE[(AVR32_FLASHC.fsr & AVR32_FLASHC_FSR_FSZ_MASK) >> AVR32_FLASHC_FSR_FSZ_OFFSET]; +#endif +} + + +unsigned int flashc_get_page_count(void) +{ + return flashc_get_flash_size() / AVR32_FLASHC_PAGE_SIZE; +} + + +unsigned int flashc_get_page_count_per_region(void) +{ + return flashc_get_page_count() / AVR32_FLASHC_REGIONS; +} + + +unsigned int flashc_get_page_region(int page_number) +{ + return ((page_number >= 0) ? page_number : flashc_get_page_number()) / flashc_get_page_count_per_region(); +} + + +unsigned int flashc_get_region_first_page_number(unsigned int region) +{ + return region * flashc_get_page_count_per_region(); +} + + +//! @} + + +/*! \name FLASHC Control + */ +//! @{ + + +unsigned int flashc_get_wait_state(void) +{ + return (AVR32_FLASHC.fcr & AVR32_FLASHC_FCR_FWS_MASK) >> AVR32_FLASHC_FCR_FWS_OFFSET; +} + + +void flashc_set_wait_state(unsigned int wait_state) +{ + u_avr32_flashc_fcr_t u_avr32_flashc_fcr = {AVR32_FLASHC.fcr}; + u_avr32_flashc_fcr.FCR.fws = wait_state; + AVR32_FLASHC.fcr = u_avr32_flashc_fcr.fcr; +} + + +Bool flashc_is_ready_int_enabled(void) +{ + return ((AVR32_FLASHC.fcr & AVR32_FLASHC_FCR_FRDY_MASK) != 0); +} + + +void flashc_enable_ready_int(Bool enable) +{ + u_avr32_flashc_fcr_t u_avr32_flashc_fcr = {AVR32_FLASHC.fcr}; + u_avr32_flashc_fcr.FCR.frdy = (enable != FALSE); + AVR32_FLASHC.fcr = u_avr32_flashc_fcr.fcr; +} + + +Bool flashc_is_lock_error_int_enabled(void) +{ + return ((AVR32_FLASHC.fcr & AVR32_FLASHC_FCR_LOCKE_MASK) != 0); +} + + +void flashc_enable_lock_error_int(Bool enable) +{ + u_avr32_flashc_fcr_t u_avr32_flashc_fcr = {AVR32_FLASHC.fcr}; + u_avr32_flashc_fcr.FCR.locke = (enable != FALSE); + AVR32_FLASHC.fcr = u_avr32_flashc_fcr.fcr; +} + + +Bool flashc_is_prog_error_int_enabled(void) +{ + return ((AVR32_FLASHC.fcr & AVR32_FLASHC_FCR_PROGE_MASK) != 0); +} + + +void flashc_enable_prog_error_int(Bool enable) +{ + u_avr32_flashc_fcr_t u_avr32_flashc_fcr = {AVR32_FLASHC.fcr}; + u_avr32_flashc_fcr.FCR.proge = (enable != FALSE); + AVR32_FLASHC.fcr = u_avr32_flashc_fcr.fcr; +} + + +//! @} + + +/*! \name FLASHC Status + */ +//! @{ + + +Bool flashc_is_ready(void) +{ + return ((AVR32_FLASHC.fsr & AVR32_FLASHC_FSR_FRDY_MASK) != 0); +} + + +void flashc_default_wait_until_ready(void) +{ + while (!flashc_is_ready()); +} + + +void (*volatile flashc_wait_until_ready)(void) = flashc_default_wait_until_ready; + + +/*! \brief Gets the error status of the FLASHC. + * + * \return The error status of the FLASHC built up from + * \c AVR32_FLASHC_FSR_LOCKE_MASK and \c AVR32_FLASHC_FSR_PROGE_MASK. + * + * \warning This hardware error status is cleared by all functions reading the + * Flash Status Register (FSR). This function is therefore not part of + * the driver's API which instead presents \ref flashc_is_lock_error + * and \ref flashc_is_programming_error. + */ +static unsigned int flashc_get_error_status(void) +{ + return AVR32_FLASHC.fsr & (AVR32_FLASHC_FSR_LOCKE_MASK | + AVR32_FLASHC_FSR_PROGE_MASK); +} + + +//! Sticky error status of the FLASHC. +//! This variable is updated by functions that issue FLASHC commands. It +//! contains the cumulated FLASHC error status of all the FLASHC commands issued +//! by a function. +static unsigned int flashc_error_status = 0; + + +Bool flashc_is_lock_error(void) +{ + return ((flashc_error_status & AVR32_FLASHC_FSR_LOCKE_MASK) != 0); +} + + +Bool flashc_is_programming_error(void) +{ + return ((flashc_error_status & AVR32_FLASHC_FSR_PROGE_MASK) != 0); +} + + +//! @} + + +/*! \name FLASHC Command Control + */ +//! @{ + + +unsigned int flashc_get_command(void) +{ + return (AVR32_FLASHC.fcmd & AVR32_FLASHC_FCMD_CMD_MASK) >> AVR32_FLASHC_FCMD_CMD_OFFSET; +} + + +unsigned int flashc_get_page_number(void) +{ + return (AVR32_FLASHC.fcmd & AVR32_FLASHC_FCMD_PAGEN_MASK) >> AVR32_FLASHC_FCMD_PAGEN_OFFSET; +} + + +void flashc_issue_command(unsigned int command, int page_number) +{ + u_avr32_flashc_fcmd_t u_avr32_flashc_fcmd; + flashc_wait_until_ready(); + u_avr32_flashc_fcmd.fcmd = AVR32_FLASHC.fcmd; + u_avr32_flashc_fcmd.FCMD.cmd = command; + if (page_number >= 0) u_avr32_flashc_fcmd.FCMD.pagen = page_number; + u_avr32_flashc_fcmd.FCMD.key = AVR32_FLASHC_FCMD_KEY_KEY; + AVR32_FLASHC.fcmd = u_avr32_flashc_fcmd.fcmd; + flashc_error_status = flashc_get_error_status(); + flashc_wait_until_ready(); +} + + +//! @} + + +/*! \name FLASHC Global Commands + */ +//! @{ + + +void flashc_no_operation(void) +{ + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_NOP, -1); +} + + +void flashc_erase_all(void) +{ + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_EA, -1); +} + + +//! @} + + +/*! \name FLASHC Protection Mechanisms + */ +//! @{ + + +Bool flashc_is_security_bit_active(void) +{ + return ((AVR32_FLASHC.fsr & AVR32_FLASHC_FSR_SECURITY_MASK) != 0); +} + + +void flashc_activate_security_bit(void) +{ + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_SSB, -1); +} + + +unsigned int flashc_get_bootloader_protected_size(void) +{ + unsigned int bootprot = (1 << AVR32_FLASHC_FGPFRLO_BOOTPROT_SIZE) - 1 - + flashc_read_gp_fuse_bitfield(AVR32_FLASHC_FGPFRLO_BOOTPROT_OFFSET, + AVR32_FLASHC_FGPFRLO_BOOTPROT_SIZE); + return (bootprot) ? AVR32_FLASHC_PAGE_SIZE << bootprot : 0; +} + + +unsigned int flashc_set_bootloader_protected_size(unsigned int bootprot_size) +{ + flashc_set_gp_fuse_bitfield(AVR32_FLASHC_FGPFRLO_BOOTPROT_OFFSET, + AVR32_FLASHC_FGPFRLO_BOOTPROT_SIZE, + (1 << AVR32_FLASHC_FGPFRLO_BOOTPROT_SIZE) - 1 - + ((bootprot_size) ? + 32 - clz((((min(max(bootprot_size, AVR32_FLASHC_PAGE_SIZE << 1), + AVR32_FLASHC_PAGE_SIZE << + ((1 << AVR32_FLASHC_FGPFRLO_BOOTPROT_SIZE) - 1)) + + AVR32_FLASHC_PAGE_SIZE - 1) / + AVR32_FLASHC_PAGE_SIZE) << 1) - 1) - 1 : + 0)); + return flashc_get_bootloader_protected_size(); +} + + +Bool flashc_is_external_privileged_fetch_locked(void) +{ + return (!flashc_read_gp_fuse_bit(AVR32_FLASHC_FGPFRLO_EPFL_OFFSET)); +} + + +void flashc_lock_external_privileged_fetch(Bool lock) +{ + flashc_set_gp_fuse_bit(AVR32_FLASHC_FGPFRLO_EPFL_OFFSET, !lock); +} + + +Bool flashc_is_page_region_locked(int page_number) +{ + return flashc_is_region_locked(flashc_get_page_region(page_number)); +} + + +Bool flashc_is_region_locked(unsigned int region) +{ + return ((AVR32_FLASHC.fsr & AVR32_FLASHC_FSR_LOCK0_MASK << (region & (AVR32_FLASHC_REGIONS - 1))) != 0); +} + + +void flashc_lock_page_region(int page_number, Bool lock) +{ + flashc_issue_command((lock) ? AVR32_FLASHC_FCMD_CMD_LP : AVR32_FLASHC_FCMD_CMD_UP, page_number); +} + + +void flashc_lock_region(unsigned int region, Bool lock) +{ + flashc_lock_page_region(flashc_get_region_first_page_number(region), lock); +} + + +void flashc_lock_all_regions(Bool lock) +{ + unsigned int error_status = 0; + unsigned int region = AVR32_FLASHC_REGIONS; + while (region) + { + flashc_lock_region(--region, lock); + error_status |= flashc_error_status; + } + flashc_error_status = error_status; +} + + +//! @} + + +/*! \name Access to General-Purpose Fuses + */ +//! @{ + + +Bool flashc_read_gp_fuse_bit(unsigned int gp_fuse_bit) +{ + return ((flashc_read_all_gp_fuses() & 1ULL << (gp_fuse_bit & 0x3F)) != 0); +} + + +U64 flashc_read_gp_fuse_bitfield(unsigned int pos, unsigned int width) +{ + return flashc_read_all_gp_fuses() >> (pos & 0x3F) & ((1ULL << min(width, 64)) - 1); +} + + +U8 flashc_read_gp_fuse_byte(unsigned int gp_fuse_byte) +{ + return flashc_read_all_gp_fuses() >> ((gp_fuse_byte & 0x07) << 3); +} + + +U64 flashc_read_all_gp_fuses(void) +{ + return AVR32_FLASHC.fgpfrlo | (U64)AVR32_FLASHC.fgpfrhi << 32; +} + + +Bool flashc_erase_gp_fuse_bit(unsigned int gp_fuse_bit, Bool check) +{ + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_EGPB, gp_fuse_bit & 0x3F); + return (check) ? flashc_read_gp_fuse_bit(gp_fuse_bit) : TRUE; +} + + +Bool flashc_erase_gp_fuse_bitfield(unsigned int pos, unsigned int width, Bool check) +{ + unsigned int error_status = 0; + unsigned int gp_fuse_bit; + pos &= 0x3F; + width = min(width, 64); + for (gp_fuse_bit = pos; gp_fuse_bit < pos + width; gp_fuse_bit++) + { + flashc_erase_gp_fuse_bit(gp_fuse_bit, FALSE); + error_status |= flashc_error_status; + } + flashc_error_status = error_status; + return (check) ? (flashc_read_gp_fuse_bitfield(pos, width) == (1ULL << width) - 1) : TRUE; +} + + +Bool flashc_erase_gp_fuse_byte(unsigned int gp_fuse_byte, Bool check) +{ + unsigned int error_status; + unsigned int current_gp_fuse_byte; + U64 value = flashc_read_all_gp_fuses(); + flashc_erase_all_gp_fuses(FALSE); + error_status = flashc_error_status; + for (current_gp_fuse_byte = 0; current_gp_fuse_byte < 8; current_gp_fuse_byte++, value >>= 8) + { + if (current_gp_fuse_byte != gp_fuse_byte) + { + flashc_write_gp_fuse_byte(current_gp_fuse_byte, value); + error_status |= flashc_error_status; + } + } + flashc_error_status = error_status; + return (check) ? (flashc_read_gp_fuse_byte(gp_fuse_byte) == 0xFF) : TRUE; +} + + +Bool flashc_erase_all_gp_fuses(Bool check) +{ + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_EAGPF, -1); + return (check) ? (flashc_read_all_gp_fuses() == 0xFFFFFFFFFFFFFFFFULL) : TRUE; +} + + +void flashc_write_gp_fuse_bit(unsigned int gp_fuse_bit, Bool value) +{ + if (!value) + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_WGPB, gp_fuse_bit & 0x3F); +} + + +void flashc_write_gp_fuse_bitfield(unsigned int pos, unsigned int width, U64 value) +{ + unsigned int error_status = 0; + unsigned int gp_fuse_bit; + pos &= 0x3F; + width = min(width, 64); + for (gp_fuse_bit = pos; gp_fuse_bit < pos + width; gp_fuse_bit++, value >>= 1) + { + flashc_write_gp_fuse_bit(gp_fuse_bit, value & 0x01); + error_status |= flashc_error_status; + } + flashc_error_status = error_status; +} + + +void flashc_write_gp_fuse_byte(unsigned int gp_fuse_byte, U8 value) +{ + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_PGPFB, (gp_fuse_byte & 0x07) | value << 3); +} + + +void flashc_write_all_gp_fuses(U64 value) +{ + unsigned int error_status = 0; + unsigned int gp_fuse_byte; + for (gp_fuse_byte = 0; gp_fuse_byte < 8; gp_fuse_byte++, value >>= 8) + { + flashc_write_gp_fuse_byte(gp_fuse_byte, value); + error_status |= flashc_error_status; + } + flashc_error_status = error_status; +} + + +void flashc_set_gp_fuse_bit(unsigned int gp_fuse_bit, Bool value) +{ + if (value) + flashc_erase_gp_fuse_bit(gp_fuse_bit, FALSE); + else + flashc_write_gp_fuse_bit(gp_fuse_bit, FALSE); +} + + +void flashc_set_gp_fuse_bitfield(unsigned int pos, unsigned int width, U64 value) +{ + unsigned int error_status = 0; + unsigned int gp_fuse_bit; + pos &= 0x3F; + width = min(width, 64); + for (gp_fuse_bit = pos; gp_fuse_bit < pos + width; gp_fuse_bit++, value >>= 1) + { + flashc_set_gp_fuse_bit(gp_fuse_bit, value & 0x01); + error_status |= flashc_error_status; + } + flashc_error_status = error_status; +} + + +void flashc_set_gp_fuse_byte(unsigned int gp_fuse_byte, U8 value) +{ + unsigned int error_status; + switch (value) + { + case 0xFF: + flashc_erase_gp_fuse_byte(gp_fuse_byte, FALSE); + break; + case 0x00: + flashc_write_gp_fuse_byte(gp_fuse_byte, 0x00); + break; + default: + flashc_erase_gp_fuse_byte(gp_fuse_byte, FALSE); + error_status = flashc_error_status; + flashc_write_gp_fuse_byte(gp_fuse_byte, value); + flashc_error_status |= error_status; + } +} + + +void flashc_set_all_gp_fuses(U64 value) +{ + unsigned int error_status; + switch (value) + { + case 0xFFFFFFFFFFFFFFFFULL: + flashc_erase_all_gp_fuses(FALSE); + break; + case 0x0000000000000000ULL: + flashc_write_all_gp_fuses(0x0000000000000000ULL); + break; + default: + flashc_erase_all_gp_fuses(FALSE); + error_status = flashc_error_status; + flashc_write_all_gp_fuses(value); + flashc_error_status |= error_status; + } +} + + +//! @} + + +/*! \name Access to Flash Pages + */ +//! @{ + + +void flashc_clear_page_buffer(void) +{ + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_CPB, -1); +} + + +Bool flashc_is_page_erased(void) +{ + return ((AVR32_FLASHC.fsr & AVR32_FLASHC_FSR_QPRR_MASK) != 0); +} + + +Bool flashc_quick_page_read(int page_number) +{ + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_QPR, page_number); + return flashc_is_page_erased(); +} + + +Bool flashc_erase_page(int page_number, Bool check) +{ + Bool page_erased = TRUE; + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_EP, page_number); + if (check) + { + unsigned int error_status = flashc_error_status; + page_erased = flashc_quick_page_read(-1); + flashc_error_status |= error_status; + } + return page_erased; +} + + +Bool flashc_erase_all_pages(Bool check) +{ + Bool all_pages_erased = TRUE; + unsigned int error_status = 0; + unsigned int page_number = flashc_get_page_count(); + while (page_number) + { + all_pages_erased &= flashc_erase_page(--page_number, check); + error_status |= flashc_error_status; + } + flashc_error_status = error_status; + return all_pages_erased; +} + + +void flashc_write_page(int page_number) +{ + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_WP, page_number); +} + + +Bool flashc_quick_user_page_read(void) +{ + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_QPRUP, -1); + return flashc_is_page_erased(); +} + + +Bool flashc_erase_user_page(Bool check) +{ + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_EUP, -1); + return (check) ? flashc_quick_user_page_read() : TRUE; +} + + +void flashc_write_user_page(void) +{ + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_WUP, -1); +} + + +volatile void *flashc_memset8(volatile void *dst, U8 src, size_t nbytes, Bool erase) +{ + return flashc_memset16(dst, src | (U16)src << 8, nbytes, erase); +} + + +volatile void *flashc_memset16(volatile void *dst, U16 src, size_t nbytes, Bool erase) +{ + return flashc_memset32(dst, src | (U32)src << 16, nbytes, erase); +} + + +volatile void *flashc_memset32(volatile void *dst, U32 src, size_t nbytes, Bool erase) +{ + return flashc_memset64(dst, src | (U64)src << 32, nbytes, erase); +} + + +volatile void *flashc_memset64(volatile void *dst, U64 src, size_t nbytes, Bool erase) +{ + // Use aggregated pointers to have several alignments available for a same address. + UnionCVPtr flash_array_end; + UnionVPtr dest; + Union64 source = {0}; + StructCVPtr dest_end; + UnionCVPtr flash_page_source_end; + Bool incomplete_flash_page_end; + Union64 flash_dword; + UnionVPtr tmp; + unsigned int error_status = 0; + unsigned int i; + + // Reformat arguments. + flash_array_end.u8ptr = AVR32_FLASH + flashc_get_flash_size(); + dest.u8ptr = dst; + for (i = (Get_align((U32)dest.u8ptr, sizeof(U64)) - 1) & (sizeof(U64) - 1); + src; i = (i - 1) & (sizeof(U64) - 1)) + { + source.u8[i] = src; + src >>= 8; + } + dest_end.u8ptr = dest.u8ptr + nbytes; + + // If destination is outside flash, go to next flash page if any. + if (dest.u8ptr < AVR32_FLASH) + { + dest.u8ptr = AVR32_FLASH; + } + else if (flash_array_end.u8ptr <= dest.u8ptr && dest.u8ptr < AVR32_FLASHC_USER_PAGE) + { + dest.u8ptr = AVR32_FLASHC_USER_PAGE; + } + + // If end of destination is outside flash, move it to the end of the previous flash page if any. + if (dest_end.u8ptr > AVR32_FLASHC_USER_PAGE + AVR32_FLASHC_USER_PAGE_SIZE) + { + dest_end.u8ptr = AVR32_FLASHC_USER_PAGE + AVR32_FLASHC_USER_PAGE_SIZE; + } + else if (AVR32_FLASHC_USER_PAGE >= dest_end.u8ptr && dest_end.u8ptr > flash_array_end.u8ptr) + { + dest_end.u8ptr = flash_array_end.u8ptr; + } + + // Align each end of destination pointer with its natural boundary. + dest_end.u16ptr = (U16 *)Align_down((U32)dest_end.u8ptr, sizeof(U16)); + dest_end.u32ptr = (U32 *)Align_down((U32)dest_end.u16ptr, sizeof(U32)); + dest_end.u64ptr = (U64 *)Align_down((U32)dest_end.u32ptr, sizeof(U64)); + + // While end of destination is not reached... + while (dest.u8ptr < dest_end.u8ptr) + { + // Clear the page buffer in order to prepare data for a flash page write. + flashc_clear_page_buffer(); + error_status |= flashc_error_status; + + // Determine where the source data will end in the current flash page. + flash_page_source_end.u64ptr = + (U64 *)min((U32)dest_end.u64ptr, + Align_down((U32)dest.u8ptr, AVR32_FLASHC_PAGE_SIZE) + AVR32_FLASHC_PAGE_SIZE); + + // Determine if the current destination page has an incomplete end. + incomplete_flash_page_end = (Align_down((U32)dest.u8ptr, AVR32_FLASHC_PAGE_SIZE) >= + Align_down((U32)dest_end.u8ptr, AVR32_FLASHC_PAGE_SIZE)); + + // Use a flash double-word buffer to manage unaligned accesses. + flash_dword.u64 = source.u64; + + // If destination does not point to the beginning of the current flash page... + if (!Test_align((U32)dest.u8ptr, AVR32_FLASHC_PAGE_SIZE)) + { + // Fill the beginning of the page buffer with the current flash page data. + // This is required by the hardware, even if page erase is not requested, + // in order to be able to write successfully to erased parts of flash + // pages that have already been written to. + for (tmp.u8ptr = (U8 *)Align_down((U32)dest.u8ptr, AVR32_FLASHC_PAGE_SIZE); + tmp.u64ptr < (U64 *)Align_down((U32)dest.u8ptr, sizeof(U64)); + tmp.u64ptr++) + *tmp.u64ptr = *tmp.u64ptr; + + // If destination is not 64-bit aligned... + if (!Test_align((U32)dest.u8ptr, sizeof(U64))) + { + // Fill the beginning of the flash double-word buffer with the current + // flash page data. + // This is required by the hardware, even if page erase is not + // requested, in order to be able to write successfully to erased parts + // of flash pages that have already been written to. + for (i = 0; i < Get_align((U32)dest.u8ptr, sizeof(U64)); i++) + flash_dword.u8[i] = *tmp.u8ptr++; + + // Align the destination pointer with its 64-bit boundary. + dest.u64ptr = (U64 *)Align_down((U32)dest.u8ptr, sizeof(U64)); + + // If the current destination double-word is not the last one... + if (dest.u64ptr < dest_end.u64ptr) + { + // Write the flash double-word buffer to the page buffer and reinitialize it. + *dest.u64ptr++ = flash_dword.u64; + flash_dword.u64 = source.u64; + } + } + } + + // Write the source data to the page buffer with 64-bit alignment. + for (i = flash_page_source_end.u64ptr - dest.u64ptr; i; i--) + *dest.u64ptr++ = source.u64; + + // If the current destination page has an incomplete end... + if (incomplete_flash_page_end) + { + // This is required by the hardware, even if page erase is not requested, + // in order to be able to write successfully to erased parts of flash + // pages that have already been written to. + { + tmp.u8ptr = (volatile U8 *)dest_end.u8ptr; + + // If end of destination is not 64-bit aligned... + if (!Test_align((U32)dest_end.u8ptr, sizeof(U64))) + { + // Fill the end of the flash double-word buffer with the current flash page data. + for (i = Get_align((U32)dest_end.u8ptr, sizeof(U64)); i < sizeof(U64); i++) + flash_dword.u8[i] = *tmp.u8ptr++; + + // Write the flash double-word buffer to the page buffer. + *dest.u64ptr++ = flash_dword.u64; + } + + // Fill the end of the page buffer with the current flash page data. + for (; !Test_align((U32)tmp.u64ptr, AVR32_FLASHC_PAGE_SIZE); tmp.u64ptr++) + *tmp.u64ptr = *tmp.u64ptr; + } + } + + // If the current flash page is in the flash array... + if (dest.u8ptr <= AVR32_FLASHC_USER_PAGE) + { + // Erase the current page if requested and write it from the page buffer. + if (erase) + { + flashc_erase_page(-1, FALSE); + error_status |= flashc_error_status; + } + flashc_write_page(-1); + error_status |= flashc_error_status; + + // If the end of the flash array is reached, go to the User page. + if (dest.u8ptr >= flash_array_end.u8ptr) + dest.u8ptr = AVR32_FLASHC_USER_PAGE; + } + // If the current flash page is the User page... + else + { + // Erase the User page if requested and write it from the page buffer. + if (erase) + { + flashc_erase_user_page(FALSE); + error_status |= flashc_error_status; + } + flashc_write_user_page(); + error_status |= flashc_error_status; + } + } + + // Update the FLASHC error status. + flashc_error_status = error_status; + + // Return the initial destination pointer as the standard memset function does. + return dst; +} + + +volatile void *flashc_memcpy(volatile void *dst, const void *src, size_t nbytes, Bool erase) +{ + // Use aggregated pointers to have several alignments available for a same address. + UnionCVPtr flash_array_end; + UnionVPtr dest; + UnionCPtr source; + StructCVPtr dest_end; + UnionCVPtr flash_page_source_end; + Bool incomplete_flash_page_end; + Union64 flash_dword; + Bool flash_dword_pending = FALSE; + UnionVPtr tmp; + unsigned int error_status = 0; + unsigned int i, j; + + // Reformat arguments. + flash_array_end.u8ptr = AVR32_FLASH + flashc_get_flash_size(); + dest.u8ptr = dst; + source.u8ptr = src; + dest_end.u8ptr = dest.u8ptr + nbytes; + + // If destination is outside flash, go to next flash page if any. + if (dest.u8ptr < AVR32_FLASH) + { + source.u8ptr += AVR32_FLASH - dest.u8ptr; + dest.u8ptr = AVR32_FLASH; + } + else if (flash_array_end.u8ptr <= dest.u8ptr && dest.u8ptr < AVR32_FLASHC_USER_PAGE) + { + source.u8ptr += AVR32_FLASHC_USER_PAGE - dest.u8ptr; + dest.u8ptr = AVR32_FLASHC_USER_PAGE; + } + + // If end of destination is outside flash, move it to the end of the previous flash page if any. + if (dest_end.u8ptr > AVR32_FLASHC_USER_PAGE + AVR32_FLASHC_USER_PAGE_SIZE) + { + dest_end.u8ptr = AVR32_FLASHC_USER_PAGE + AVR32_FLASHC_USER_PAGE_SIZE; + } + else if (AVR32_FLASHC_USER_PAGE >= dest_end.u8ptr && dest_end.u8ptr > flash_array_end.u8ptr) + { + dest_end.u8ptr = flash_array_end.u8ptr; + } + + // Align each end of destination pointer with its natural boundary. + dest_end.u16ptr = (U16 *)Align_down((U32)dest_end.u8ptr, sizeof(U16)); + dest_end.u32ptr = (U32 *)Align_down((U32)dest_end.u16ptr, sizeof(U32)); + dest_end.u64ptr = (U64 *)Align_down((U32)dest_end.u32ptr, sizeof(U64)); + + // While end of destination is not reached... + while (dest.u8ptr < dest_end.u8ptr) + { + // Clear the page buffer in order to prepare data for a flash page write. + flashc_clear_page_buffer(); + error_status |= flashc_error_status; + + // Determine where the source data will end in the current flash page. + flash_page_source_end.u64ptr = + (U64 *)min((U32)dest_end.u64ptr, + Align_down((U32)dest.u8ptr, AVR32_FLASHC_PAGE_SIZE) + AVR32_FLASHC_PAGE_SIZE); + + // Determine if the current destination page has an incomplete end. + incomplete_flash_page_end = (Align_down((U32)dest.u8ptr, AVR32_FLASHC_PAGE_SIZE) >= + Align_down((U32)dest_end.u8ptr, AVR32_FLASHC_PAGE_SIZE)); + + // If destination does not point to the beginning of the current flash page... + if (!Test_align((U32)dest.u8ptr, AVR32_FLASHC_PAGE_SIZE)) + { + // Fill the beginning of the page buffer with the current flash page data. + // This is required by the hardware, even if page erase is not requested, + // in order to be able to write successfully to erased parts of flash + // pages that have already been written to. + for (tmp.u8ptr = (U8 *)Align_down((U32)dest.u8ptr, AVR32_FLASHC_PAGE_SIZE); + tmp.u64ptr < (U64 *)Align_down((U32)dest.u8ptr, sizeof(U64)); + tmp.u64ptr++) + *tmp.u64ptr = *tmp.u64ptr; + + // If destination is not 64-bit aligned... + if (!Test_align((U32)dest.u8ptr, sizeof(U64))) + { + // Fill the beginning of the flash double-word buffer with the current + // flash page data. + // This is required by the hardware, even if page erase is not + // requested, in order to be able to write successfully to erased parts + // of flash pages that have already been written to. + for (i = 0; i < Get_align((U32)dest.u8ptr, sizeof(U64)); i++) + flash_dword.u8[i] = *tmp.u8ptr++; + + // Fill the end of the flash double-word buffer with the source data. + for (; i < sizeof(U64); i++) + flash_dword.u8[i] = *source.u8ptr++; + + // Align the destination pointer with its 64-bit boundary. + dest.u64ptr = (U64 *)Align_down((U32)dest.u8ptr, sizeof(U64)); + + // If the current destination double-word is not the last one... + if (dest.u64ptr < dest_end.u64ptr) + { + // Write the flash double-word buffer to the page buffer. + *dest.u64ptr++ = flash_dword.u64; + } + // If the current destination double-word is the last one, the flash + // double-word buffer must be kept for later. + else flash_dword_pending = TRUE; + } + } + + // Read the source data with the maximal possible alignment and write it to + // the page buffer with 64-bit alignment. + switch (Get_align((U32)source.u8ptr, sizeof(U32))) + { + case 0: + for (i = flash_page_source_end.u64ptr - dest.u64ptr; i; i--) + *dest.u64ptr++ = *source.u64ptr++; + break; + + case sizeof(U16): + for (i = flash_page_source_end.u64ptr - dest.u64ptr; i; i--) + { + for (j = 0; j < sizeof(U64) / sizeof(U16); j++) flash_dword.u16[j] = *source.u16ptr++; + *dest.u64ptr++ = flash_dword.u64; + } + break; + + default: + for (i = flash_page_source_end.u64ptr - dest.u64ptr; i; i--) + { + for (j = 0; j < sizeof(U64); j++) flash_dword.u8[j] = *source.u8ptr++; + *dest.u64ptr++ = flash_dword.u64; + } + } + + // If the current destination page has an incomplete end... + if (incomplete_flash_page_end) + { + // If the flash double-word buffer is in use, do not initialize it. + if (flash_dword_pending) i = Get_align((U32)dest_end.u8ptr, sizeof(U64)); + // If the flash double-word buffer is free... + else + { + // Fill the beginning of the flash double-word buffer with the source data. + for (i = 0; i < Get_align((U32)dest_end.u8ptr, sizeof(U64)); i++) + flash_dword.u8[i] = *source.u8ptr++; + } + + // This is required by the hardware, even if page erase is not requested, + // in order to be able to write successfully to erased parts of flash + // pages that have already been written to. + { + tmp.u8ptr = (volatile U8 *)dest_end.u8ptr; + + // If end of destination is not 64-bit aligned... + if (!Test_align((U32)dest_end.u8ptr, sizeof(U64))) + { + // Fill the end of the flash double-word buffer with the current flash page data. + for (; i < sizeof(U64); i++) + flash_dword.u8[i] = *tmp.u8ptr++; + + // Write the flash double-word buffer to the page buffer. + *dest.u64ptr++ = flash_dword.u64; + } + + // Fill the end of the page buffer with the current flash page data. + for (; !Test_align((U32)tmp.u64ptr, AVR32_FLASHC_PAGE_SIZE); tmp.u64ptr++) + *tmp.u64ptr = *tmp.u64ptr; + } + } + + // If the current flash page is in the flash array... + if (dest.u8ptr <= AVR32_FLASHC_USER_PAGE) + { + // Erase the current page if requested and write it from the page buffer. + if (erase) + { + flashc_erase_page(-1, FALSE); + error_status |= flashc_error_status; + } + flashc_write_page(-1); + error_status |= flashc_error_status; + + // If the end of the flash array is reached, go to the User page. + if (dest.u8ptr >= flash_array_end.u8ptr) + { + source.u8ptr += AVR32_FLASHC_USER_PAGE - dest.u8ptr; + dest.u8ptr = AVR32_FLASHC_USER_PAGE; + } + } + // If the current flash page is the User page... + else + { + // Erase the User page if requested and write it from the page buffer. + if (erase) + { + flashc_erase_user_page(FALSE); + error_status |= flashc_error_status; + } + flashc_write_user_page(); + error_status |= flashc_error_status; + } + } + + // Update the FLASHC error status. + flashc_error_status = error_status; + + // Return the initial destination pointer as the standard memcpy function does. + return dst; +} + + +#if UC3C +void flashc_set_flash_waitstate_and_readmode(unsigned long cpu_f_hz) +{ + //! Device-specific data + #undef AVR32_FLASHC_FWS_0_MAX_FREQ + #undef AVR32_FLASHC_FWS_1_MAX_FREQ + #undef AVR32_FLASHC_HSEN_FWS_0_MAX_FREQ + #undef AVR32_FLASHC_HSEN_FWS_1_MAX_FREQ + #define AVR32_FLASHC_FWS_0_MAX_FREQ 33000000 + #define AVR32_FLASHC_FWS_1_MAX_FREQ 66000000 + #define AVR32_FLASHC_HSEN_FWS_0_MAX_FREQ 33000000 + #define AVR32_FLASHC_HSEN_FWS_1_MAX_FREQ 72000000 + // These defines are missing from or wrong in the toolchain header files uc3cxxx.h + // Put a Bugzilla + + if(cpu_f_hz > AVR32_FLASHC_HSEN_FWS_0_MAX_FREQ) // > 33MHz + { + // Set a wait-state + flashc_set_wait_state(1); + if(cpu_f_hz <= AVR32_FLASHC_FWS_1_MAX_FREQ) // <= 66MHz and >33Mhz + { + // Disable the high-speed read mode. + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_HSDIS, -1); + } + else // > 66Mhz + { + // Enable the high-speed read mode. + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_HSEN, -1); + } + } + else // <= 33 MHz + { + // Disable wait-state + flashc_set_wait_state(0); + + // Disable the high-speed read mode. + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_HSDIS, -1); + + } +} +#endif // UC3C device-specific implementation + +//! @} diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC/flashc.h b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC/flashc.h new file mode 100644 index 000000000..9f2547a6e --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC/flashc.h @@ -0,0 +1,1002 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief FLASHC driver for AVR32 UC3. + * + * AVR32 Flash Controller driver module. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with a FLASHC module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _FLASHC_H_ +#define _FLASHC_H_ + +#include +#include +#include "compiler.h" + +//! Number of flash regions defined by the FLASHC. +#define AVR32_FLASHC_REGIONS (AVR32_FLASHC_FLASH_SIZE /\ + (AVR32_FLASHC_PAGES_PR_REGION * AVR32_FLASHC_PAGE_SIZE)) + + +/*! \name Flash Properties + */ +//! @{ + +/*! \brief Gets the size of the whole flash array. + * + * \return The size of the whole flash array in bytes. + */ +extern unsigned int flashc_get_flash_size(void); + +/*! \brief Gets the total number of pages in the flash array. + * + * \return The total number of pages in the flash array. + */ +extern unsigned int flashc_get_page_count(void); + +/*! \brief Gets the number of pages in each flash region. + * + * \return The number of pages in each flash region. + */ +extern unsigned int flashc_get_page_count_per_region(void); + +/*! \brief Gets the region number of a page. + * + * \param page_number The page number: + * \arg \c 0 to (flashc_get_page_count() - 1): a page number within + * the flash array; + * \arg < 0: the current page number. + * + * \return The region number of the specified page. + */ +extern unsigned int flashc_get_page_region(int page_number); + +/*! \brief Gets the number of the first page of a region. + * + * \param region The region number: \c 0 to (AVR32_FLASHC_REGIONS - 1). + * + * \return The number of the first page of the specified region. + */ +extern unsigned int flashc_get_region_first_page_number(unsigned int region); + +//! @} + + +/*! \name FLASHC Control + */ +//! @{ + +/*! \brief Gets the number of wait states of flash read accesses. + * + * \return The number of wait states of flash read accesses. + */ +extern unsigned int flashc_get_wait_state(void); + +/*! \brief Sets the number of wait states of flash read accesses. + * + * \param wait_state The number of wait states of flash read accesses: \c 0 to + * \c 1. + */ +extern void flashc_set_wait_state(unsigned int wait_state); + +/*! \brief Tells whether the Flash Ready interrupt is enabled. + * + * \return Whether the Flash Ready interrupt is enabled. + */ +extern Bool flashc_is_ready_int_enabled(void); + +/*! \brief Enables or disables the Flash Ready interrupt. + * + * \param enable Whether to enable the Flash Ready interrupt: \c TRUE or + * \c FALSE. + */ +extern void flashc_enable_ready_int(Bool enable); + +/*! \brief Tells whether the Lock Error interrupt is enabled. + * + * \return Whether the Lock Error interrupt is enabled. + */ +extern Bool flashc_is_lock_error_int_enabled(void); + +/*! \brief Enables or disables the Lock Error interrupt. + * + * \param enable Whether to enable the Lock Error interrupt: \c TRUE or + * \c FALSE. + */ +extern void flashc_enable_lock_error_int(Bool enable); + +/*! \brief Tells whether the Programming Error interrupt is enabled. + * + * \return Whether the Programming Error interrupt is enabled. + */ +extern Bool flashc_is_prog_error_int_enabled(void); + +/*! \brief Enables or disables the Programming Error interrupt. + * + * \param enable Whether to enable the Programming Error interrupt: \c TRUE or + * \c FALSE. + */ +extern void flashc_enable_prog_error_int(Bool enable); + +//! @} + + +/*! \name FLASHC Status + */ +//! @{ + +/*! \brief Tells whether the FLASHC is ready to run a new command. + * + * \return Whether the FLASHC is ready to run a new command. + */ +extern Bool flashc_is_ready(void); + +/*! \brief Waits actively until the FLASHC is ready to run a new command. + * + * This is the default function assigned to \ref flashc_wait_until_ready. + */ +extern void flashc_default_wait_until_ready(void); + +//! Pointer to the function used by the driver when it needs to wait until the +//! FLASHC is ready to run a new command. +//! The default function is \ref flashc_default_wait_until_ready. +//! The user may change this pointer to use another implementation. +extern void (*volatile flashc_wait_until_ready)(void); + +/*! \brief Tells whether a Lock Error has occurred during the last function + * called that issued one or more FLASHC commands. + * + * \return Whether a Lock Error has occurred during the last function called + * that issued one or more FLASHC commands. + */ +extern Bool flashc_is_lock_error(void); + +/*! \brief Tells whether a Programming Error has occurred during the last + * function called that issued one or more FLASHC commands. + * + * \return Whether a Programming Error has occurred during the last function + * called that issued one or more FLASHC commands. + */ +extern Bool flashc_is_programming_error(void); + +//! @} + + +/*! \name FLASHC Command Control + */ +//! @{ + +/*! \brief Gets the last issued FLASHC command. + * + * \return The last issued FLASHC command. + */ +extern unsigned int flashc_get_command(void); + +/*! \brief Gets the current FLASHC page number. + * + * \return The current FLASHC page number. + */ +extern unsigned int flashc_get_page_number(void); + +/*! \brief Issues a FLASHC command. + * + * \param command The command: \c AVR32_FLASHC_FCMD_CMD_x. + * \param page_number The page number to apply the command to: + * \arg \c 0 to (flashc_get_page_count() - 1): a page number within + * the flash array; + * \arg < 0: use this to apply the command to the current page number + * or if the command does not apply to any page number; + * \arg this argument may have other meanings according to the command. See + * the FLASHC chapter of the MCU datasheet. + * + * \warning A Lock Error is issued if the command violates the protection + * mechanism. + * + * \warning A Programming Error is issued if the command is invalid. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +extern void flashc_issue_command(unsigned int command, int page_number); + +//! @} + + +/*! \name FLASHC Global Commands + */ +//! @{ + +/*! \brief Issues a No Operation command to the FLASHC. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +extern void flashc_no_operation(void); + +/*! \brief Issues an Erase All command to the FLASHC. + * + * This command erases all bits in the flash array, the general-purpose fuse + * bits and the Security bit. The User page is not erased. + * + * This command also ensures that all volatile memories, such as register file + * and RAMs, are erased before the Security bit is erased, i.e. deactivated. + * + * \warning A Lock Error is issued if at least one region is locked or the + * bootloader protection is active. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note An erase operation can only set bits. + */ +extern void flashc_erase_all(void); + +//! @} + + +/*! \name FLASHC Protection Mechanisms + */ +//! @{ + +/*! \brief Tells whether the Security bit is active. + * + * \return Whether the Security bit is active. + */ +extern Bool flashc_is_security_bit_active(void); + +/*! \brief Activates the Security bit. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +extern void flashc_activate_security_bit(void); + +/*! \brief Gets the bootloader protected size. + * + * \return The bootloader protected size in bytes. + */ +extern unsigned int flashc_get_bootloader_protected_size(void); + +/*! \brief Sets the bootloader protected size. + * + * \param bootprot_size The wanted bootloader protected size in bytes. If this + * size is not supported, the actual size will be the + * nearest greater available size or the maximal possible + * size if the requested size is too large. + * + * \return The actual bootloader protected size in bytes. + * + * \warning A Lock Error is issued if the Security bit is active. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +extern unsigned int flashc_set_bootloader_protected_size(unsigned int bootprot_size); + +/*! \brief Tells whether external privileged fetch is locked. + * + * \return Whether external privileged fetch is locked. + */ +extern Bool flashc_is_external_privileged_fetch_locked(void); + +/*! \brief Locks or unlocks external privileged fetch. + * + * \param lock Whether to lock external privileged fetch: \c TRUE or \c FALSE. + * + * \warning A Lock Error is issued if the Security bit is active. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +extern void flashc_lock_external_privileged_fetch(Bool lock); + +/*! \brief Tells whether the region of a page is locked. + * + * \param page_number The page number: + * \arg \c 0 to (flashc_get_page_count() - 1): a page number within + * the flash array; + * \arg < 0: the current page number. + * + * \return Whether the region of the specified page is locked. + */ +extern Bool flashc_is_page_region_locked(int page_number); + +/*! \brief Tells whether a region is locked. + * + * \param region The region number: \c 0 to (AVR32_FLASHC_REGIONS - 1). + * + * \return Whether the specified region is locked. + */ +extern Bool flashc_is_region_locked(unsigned int region); + +/*! \brief Locks or unlocks the region of a page. + * + * \param page_number The page number: + * \arg \c 0 to (flashc_get_page_count() - 1): a page number within + * the flash array; + * \arg < 0: the current page number. + * \param lock Whether to lock the region of the specified page: \c TRUE or + * \c FALSE. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +extern void flashc_lock_page_region(int page_number, Bool lock); + +/*! \brief Locks or unlocks a region. + * + * \param region The region number: \c 0 to (AVR32_FLASHC_REGIONS - 1). + * \param lock Whether to lock the specified region: \c TRUE or \c FALSE. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +extern void flashc_lock_region(unsigned int region, Bool lock); + +/*! \brief Locks or unlocks all regions. + * + * \param lock Whether to lock the regions: \c TRUE or \c FALSE. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +extern void flashc_lock_all_regions(Bool lock); + +//! @} + + +/*! \name Access to General-Purpose Fuses + */ +//! @{ + +/*! \brief Reads a general-purpose fuse bit. + * + * \param gp_fuse_bit The general-purpose fuse bit: \c 0 to \c 63. + * + * \return The value of the specified general-purpose fuse bit. + * + * \note The actual number of general-purpose fuse bits implemented by hardware + * is given by \c AVR32_FLASHC_GPF_NUM. The other bits among the 64 are + * fixed at 1 by hardware. + */ +extern Bool flashc_read_gp_fuse_bit(unsigned int gp_fuse_bit); + +/*! \brief Reads a general-purpose fuse bit-field. + * + * \param pos The bit-position of the general-purpose fuse bit-field: \c 0 to + * \c 63. + * \param width The bit-width of the general-purpose fuse bit-field: \c 0 to + * \c 64. + * + * \return The value of the specified general-purpose fuse bit-field. + * + * \note The actual number of general-purpose fuse bits implemented by hardware + * is given by \c AVR32_FLASHC_GPF_NUM. The other bits among the 64 are + * fixed at 1 by hardware. + */ +extern U64 flashc_read_gp_fuse_bitfield(unsigned int pos, unsigned int width); + +/*! \brief Reads a general-purpose fuse byte. + * + * \param gp_fuse_byte The general-purpose fuse byte: \c 0 to \c 7. + * + * \return The value of the specified general-purpose fuse byte. + * + * \note The actual number of general-purpose fuse bits implemented by hardware + * is given by \c AVR32_FLASHC_GPF_NUM. The other bits among the 64 are + * fixed at 1 by hardware. + */ +extern U8 flashc_read_gp_fuse_byte(unsigned int gp_fuse_byte); + +/*! \brief Reads all general-purpose fuses. + * + * \return The value of all general-purpose fuses as a word. + * + * \note The actual number of general-purpose fuse bits implemented by hardware + * is given by \c AVR32_FLASHC_GPF_NUM. The other bits among the 64 are + * fixed at 1 by hardware. + */ +extern U64 flashc_read_all_gp_fuses(void); + +/*! \brief Erases a general-purpose fuse bit. + * + * \param gp_fuse_bit The general-purpose fuse bit: \c 0 to \c 63. + * \param check Whether to check erase: \c TRUE or \c FALSE. + * + * \return Whether the erase succeeded or always \c TRUE if erase check was not + * requested. + * + * \warning A Lock Error is issued if the Security bit is active and the command + * is applied to BOOTPROT or EPFL fuses. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note An erase operation can only set bits. + * + * \note The actual number of general-purpose fuse bits implemented by hardware + * is given by \c AVR32_FLASHC_GPF_NUM. The other bits among the 64 are + * fixed at 1 by hardware. + */ +extern Bool flashc_erase_gp_fuse_bit(unsigned int gp_fuse_bit, Bool check); + +/*! \brief Erases a general-purpose fuse bit-field. + * + * \param pos The bit-position of the general-purpose fuse bit-field: \c 0 to + * \c 63. + * \param width The bit-width of the general-purpose fuse bit-field: \c 0 to + * \c 64. + * \param check Whether to check erase: \c TRUE or \c FALSE. + * + * \return Whether the erase succeeded or always \c TRUE if erase check was not + * requested. + * + * \warning A Lock Error is issued if the Security bit is active and the command + * is applied to BOOTPROT or EPFL fuses. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note An erase operation can only set bits. + * + * \note The actual number of general-purpose fuse bits implemented by hardware + * is given by \c AVR32_FLASHC_GPF_NUM. The other bits among the 64 are + * fixed at 1 by hardware. + */ +extern Bool flashc_erase_gp_fuse_bitfield(unsigned int pos, unsigned int width, Bool check); + +/*! \brief Erases a general-purpose fuse byte. + * + * \param gp_fuse_byte The general-purpose fuse byte: \c 0 to \c 7. + * \param check Whether to check erase: \c TRUE or \c FALSE. + * + * \return Whether the erase succeeded or always \c TRUE if erase check was not + * requested. + * + * \warning A Lock Error is issued if the Security bit is active. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note An erase operation can only set bits. + * + * \note The actual number of general-purpose fuse bits implemented by hardware + * is given by \c AVR32_FLASHC_GPF_NUM. The other bits among the 64 are + * fixed at 1 by hardware. + */ +extern Bool flashc_erase_gp_fuse_byte(unsigned int gp_fuse_byte, Bool check); + +/*! \brief Erases all general-purpose fuses. + * + * \param check Whether to check erase: \c TRUE or \c FALSE. + * + * \return Whether the erase succeeded or always \c TRUE if erase check was not + * requested. + * + * \warning A Lock Error is issued if the Security bit is active. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note An erase operation can only set bits. + * + * \note The actual number of general-purpose fuse bits implemented by hardware + * is given by \c AVR32_FLASHC_GPF_NUM. The other bits among the 64 are + * fixed at 1 by hardware. + */ +extern Bool flashc_erase_all_gp_fuses(Bool check); + +/*! \brief Writes a general-purpose fuse bit. + * + * \param gp_fuse_bit The general-purpose fuse bit: \c 0 to \c 63. + * \param value The value of the specified general-purpose fuse bit. + * + * \warning A Lock Error is issued if the Security bit is active and the command + * is applied to BOOTPROT or EPFL fuses. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note A write operation can only clear bits. + * + * \note The actual number of general-purpose fuse bits implemented by hardware + * is given by \c AVR32_FLASHC_GPF_NUM. The other bits among the 64 are + * fixed at 1 by hardware. + */ +extern void flashc_write_gp_fuse_bit(unsigned int gp_fuse_bit, Bool value); + +/*! \brief Writes a general-purpose fuse bit-field. + * + * \param pos The bit-position of the general-purpose fuse bit-field: \c 0 to + * \c 63. + * \param width The bit-width of the general-purpose fuse bit-field: \c 0 to + * \c 64. + * \param value The value of the specified general-purpose fuse bit-field. + * + * \warning A Lock Error is issued if the Security bit is active and the command + * is applied to BOOTPROT or EPFL fuses. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note A write operation can only clear bits. + * + * \note The actual number of general-purpose fuse bits implemented by hardware + * is given by \c AVR32_FLASHC_GPF_NUM. The other bits among the 64 are + * fixed at 1 by hardware. + */ +extern void flashc_write_gp_fuse_bitfield(unsigned int pos, unsigned int width, U64 value); + +/*! \brief Writes a general-purpose fuse byte. + * + * \param gp_fuse_byte The general-purpose fuse byte: \c 0 to \c 7. + * \param value The value of the specified general-purpose fuse byte. + * + * \warning A Lock Error is issued if the Security bit is active. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note A write operation can only clear bits. + * + * \note The actual number of general-purpose fuse bits implemented by hardware + * is given by \c AVR32_FLASHC_GPF_NUM. The other bits among the 64 are + * fixed at 1 by hardware. + */ +extern void flashc_write_gp_fuse_byte(unsigned int gp_fuse_byte, U8 value); + +/*! \brief Writes all general-purpose fuses. + * + * \param value The value of all general-purpose fuses as a word. + * + * \warning A Lock Error is issued if the Security bit is active. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note A write operation can only clear bits. + * + * \note The actual number of general-purpose fuse bits implemented by hardware + * is given by \c AVR32_FLASHC_GPF_NUM. The other bits among the 64 are + * fixed at 1 by hardware. + */ +extern void flashc_write_all_gp_fuses(U64 value); + +/*! \brief Sets a general-purpose fuse bit with the appropriate erase and write + * operations. + * + * \param gp_fuse_bit The general-purpose fuse bit: \c 0 to \c 63. + * \param value The value of the specified general-purpose fuse bit. + * + * \warning A Lock Error is issued if the Security bit is active and the command + * is applied to BOOTPROT or EPFL fuses. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note The actual number of general-purpose fuse bits implemented by hardware + * is given by \c AVR32_FLASHC_GPF_NUM. The other bits among the 64 are + * fixed at 1 by hardware. + */ +extern void flashc_set_gp_fuse_bit(unsigned int gp_fuse_bit, Bool value); + +/*! \brief Sets a general-purpose fuse bit-field with the appropriate erase and + * write operations. + * + * \param pos The bit-position of the general-purpose fuse bit-field: \c 0 to + * \c 63. + * \param width The bit-width of the general-purpose fuse bit-field: \c 0 to + * \c 64. + * \param value The value of the specified general-purpose fuse bit-field. + * + * \warning A Lock Error is issued if the Security bit is active and the command + * is applied to BOOTPROT or EPFL fuses. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note The actual number of general-purpose fuse bits implemented by hardware + * is given by \c AVR32_FLASHC_GPF_NUM. The other bits among the 64 are + * fixed at 1 by hardware. + */ +extern void flashc_set_gp_fuse_bitfield(unsigned int pos, unsigned int width, U64 value); + +/*! \brief Sets a general-purpose fuse byte with the appropriate erase and write + * operations. + * + * \param gp_fuse_byte The general-purpose fuse byte: \c 0 to \c 7. + * \param value The value of the specified general-purpose fuse byte. + * + * \warning A Lock Error is issued if the Security bit is active. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note The actual number of general-purpose fuse bits implemented by hardware + * is given by \c AVR32_FLASHC_GPF_NUM. The other bits among the 64 are + * fixed at 1 by hardware. + */ +extern void flashc_set_gp_fuse_byte(unsigned int gp_fuse_byte, U8 value); + +/*! \brief Sets all general-purpose fuses with the appropriate erase and write + * operations. + * + * \param value The value of all general-purpose fuses as a word. + * + * \warning A Lock Error is issued if the Security bit is active. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note The actual number of general-purpose fuse bits implemented by hardware + * is given by \c AVR32_FLASHC_GPF_NUM. The other bits among the 64 are + * fixed at 1 by hardware. + */ +extern void flashc_set_all_gp_fuses(U64 value); + +//! @} + + +/*! \name Access to Flash Pages + */ +//! @{ + +/*! \brief Clears the page buffer. + * + * This command resets all bits in the page buffer to one. Write accesses to the + * page buffer can only change page buffer bits from one to zero. + * + * \warning The page buffer is not automatically reset after a page write. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +extern void flashc_clear_page_buffer(void); + +/*! \brief Tells whether the page to which the last Quick Page Read or Quick + * Page Read User Page command was applied was erased. + * + * \return Whether the page to which the last Quick Page Read or Quick Page Read + * User Page command was applied was erased. + */ +extern Bool flashc_is_page_erased(void); + +/*! \brief Applies the Quick Page Read command to a page. + * + * \param page_number The page number: + * \arg \c 0 to (flashc_get_page_count() - 1): a page number within + * the flash array; + * \arg < 0: the current page number. + * + * \return Whether the specified page is erased. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +extern Bool flashc_quick_page_read(int page_number); + +/*! \brief Erases a page. + * + * \param page_number The page number: + * \arg \c 0 to (flashc_get_page_count() - 1): a page number within + * the flash array; + * \arg < 0: the current page number. + * \param check Whether to check erase: \c TRUE or \c FALSE. + * + * \return Whether the erase succeeded or always \c TRUE if erase check was not + * requested. + * + * \warning A Lock Error is issued if the command is applied to a page belonging + * to a locked region or to the bootloader protected area. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note An erase operation can only set bits. + */ +extern Bool flashc_erase_page(int page_number, Bool check); + +/*! \brief Erases all pages within the flash array. + * + * \param check Whether to check erase: \c TRUE or \c FALSE. + * + * \return Whether the erase succeeded or always \c TRUE if erase check was not + * requested. + * + * \warning A Lock Error is issued if at least one region is locked or the + * bootloader protection is active. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note An erase operation can only set bits. + */ +extern Bool flashc_erase_all_pages(Bool check); + +/*! \brief Writes a page from the page buffer. + * + * \param page_number The page number: + * \arg \c 0 to (flashc_get_page_count() - 1): a page number within + * the flash array; + * \arg < 0: the current page number. + * + * \warning A Lock Error is issued if the command is applied to a page belonging + * to a locked region or to the bootloader protected area. + * + * \warning The page buffer is not automatically reset after a page write. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note A write operation can only clear bits. + */ +extern void flashc_write_page(int page_number); + +/*! \brief Issues a Quick Page Read User Page command to the FLASHC. + * + * \return Whether the User page is erased. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +extern Bool flashc_quick_user_page_read(void); + +/*! \brief Erases the User page. + * + * \param check Whether to check erase: \c TRUE or \c FALSE. + * + * \return Whether the erase succeeded or always \c TRUE if erase check was not + * requested. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note An erase operation can only set bits. + */ +extern Bool flashc_erase_user_page(Bool check); + +/*! \brief Writes the User page from the page buffer. + * + * \warning The page buffer is not automatically reset after a page write. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note A write operation can only clear bits. + */ +extern void flashc_write_user_page(void); + +/*! \brief Copies \a nbytes bytes to the flash destination pointed to by \a dst + * from the repeated \a src source byte. + * + * The destination areas that are not within the flash array or the User page + * are ignored. + * + * All pointer and size alignments are supported. + * + * \param dst Pointer to flash destination. + * \param src Source byte. + * \param nbytes Number of bytes to set. + * \param erase Whether to erase before writing: \c TRUE or \c FALSE. + * + * \return The value of \a dst. + * + * \warning This function may be called with \a erase set to \c FALSE only if + * the destination consists only of erased words, i.e. this function + * can not be used to write only one bit of a previously written word. + * E.g., if \c 0x00000001 then \c 0xFFFFFFFE are written to a word, the + * resulting value in flash may be different from \c 0x00000000. + * + * \warning A Lock Error is issued if the command is applied to pages belonging + * to a locked region or to the bootloader protected area. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +extern volatile void *flashc_memset8(volatile void *dst, U8 src, size_t nbytes, Bool erase); + +/*! \brief Copies \a nbytes bytes to the flash destination pointed to by \a dst + * from the repeated \a src big-endian source half-word. + * + * The destination areas that are not within the flash array or the User page + * are ignored. + * + * All pointer and size alignments are supported. + * + * \param dst Pointer to flash destination. + * \param src Source half-word. + * \param nbytes Number of bytes to set. + * \param erase Whether to erase before writing: \c TRUE or \c FALSE. + * + * \return The value of \a dst. + * + * \warning This function may be called with \a erase set to \c FALSE only if + * the destination consists only of erased words, i.e. this function + * can not be used to write only one bit of a previously written word. + * E.g., if \c 0x00000001 then \c 0xFFFFFFFE are written to a word, the + * resulting value in flash may be different from \c 0x00000000. + * + * \warning A Lock Error is issued if the command is applied to pages belonging + * to a locked region or to the bootloader protected area. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +extern volatile void *flashc_memset16(volatile void *dst, U16 src, size_t nbytes, Bool erase); + +/*! \brief Copies \a nbytes bytes to the flash destination pointed to by \a dst + * from the repeated \a src big-endian source word. + * + * The destination areas that are not within the flash array or the User page + * are ignored. + * + * All pointer and size alignments are supported. + * + * \param dst Pointer to flash destination. + * \param src Source word. + * \param nbytes Number of bytes to set. + * \param erase Whether to erase before writing: \c TRUE or \c FALSE. + * + * \return The value of \a dst. + * + * \warning This function may be called with \a erase set to \c FALSE only if + * the destination consists only of erased words, i.e. this function + * can not be used to write only one bit of a previously written word. + * E.g., if \c 0x00000001 then \c 0xFFFFFFFE are written to a word, the + * resulting value in flash may be different from \c 0x00000000. + * + * \warning A Lock Error is issued if the command is applied to pages belonging + * to a locked region or to the bootloader protected area. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +extern volatile void *flashc_memset32(volatile void *dst, U32 src, size_t nbytes, Bool erase); + +/*! \brief Copies \a nbytes bytes to the flash destination pointed to by \a dst + * from the repeated \a src big-endian source double-word. + * + * The destination areas that are not within the flash array or the User page + * are ignored. + * + * All pointer and size alignments are supported. + * + * \param dst Pointer to flash destination. + * \param src Source double-word. + * \param nbytes Number of bytes to set. + * \param erase Whether to erase before writing: \c TRUE or \c FALSE. + * + * \return The value of \a dst. + * + * \warning This function may be called with \a erase set to \c FALSE only if + * the destination consists only of erased words, i.e. this function + * can not be used to write only one bit of a previously written word. + * E.g., if \c 0x00000001 then \c 0xFFFFFFFE are written to a word, the + * resulting value in flash may be different from \c 0x00000000. + * + * \warning A Lock Error is issued if the command is applied to pages belonging + * to a locked region or to the bootloader protected area. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +extern volatile void *flashc_memset64(volatile void *dst, U64 src, size_t nbytes, Bool erase); + +/*! \brief Copies \a nbytes bytes to the flash destination pointed to by \a dst + * from the repeated \a src big-endian source pattern. + * + * The destination areas that are not within the flash array or the User page + * are ignored. + * + * All pointer and size alignments are supported. + * + * \param dst Pointer to flash destination. + * \param src Source double-word. + * \param src_width \a src width in bits: 8, 16, 32 or 64. + * \param nbytes Number of bytes to set. + * \param erase Whether to erase before writing: \c TRUE or \c FALSE. + * + * \return The value of \a dst. + * + * \warning This function may be called with \a erase set to \c FALSE only if + * the destination consists only of erased words, i.e. this function + * can not be used to write only one bit of a previously written word. + * E.g., if \c 0x00000001 then \c 0xFFFFFFFE are written to a word, the + * resulting value in flash may be different from \c 0x00000000. + * + * \warning A Lock Error is issued if the command is applied to pages belonging + * to a locked region or to the bootloader protected area. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +#define flashc_memset(dst, src, src_width, nbytes, erase) \ + TPASTE2(flashc_memset, src_width)((dst), (src), (nbytes), (erase)) + +/*! \brief Copies \a nbytes bytes to the flash destination pointed to by \a dst + * from the source pointed to by \a src. + * + * The destination areas that are not within the flash array or the User page + * are ignored. + * + * All pointer and size alignments are supported. + * + * \param dst Pointer to flash destination. + * \param src Pointer to source data. + * \param nbytes Number of bytes to copy. + * \param erase Whether to erase before writing: \c TRUE or \c FALSE. + * + * \return The value of \a dst. + * + * \warning If copying takes place between areas that overlap, the behavior is + * undefined. + * + * \warning This function may be called with \a erase set to \c FALSE only if + * the destination consists only of erased words, i.e. this function + * can not be used to write only one bit of a previously written word. + * E.g., if \c 0x00000001 then \c 0xFFFFFFFE are written to a word, the + * resulting value in flash may be different from \c 0x00000000. + * + * \warning A Lock Error is issued if the command is applied to pages belonging + * to a locked region or to the bootloader protected area. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +extern volatile void *flashc_memcpy(volatile void *dst, const void *src, size_t nbytes, Bool erase); + +#if UC3C + +/*! \brief Depednding to the CPU frequency, set the wait states of flash read + * accesses and enable or disable the High speed read mode. + * + * \param cpu_f_hz The CPU frequency + */ +void flashc_set_flash_waitstate_and_readmode(unsigned long cpu_f_hz); +#endif // UC3C device-specific implementation + +//! @} + + +#endif // _FLASHC_H_ diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO/gpio.c b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO/gpio.c new file mode 100644 index 000000000..b6b83c73f --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO/gpio.c @@ -0,0 +1,458 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file has been prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief GPIO driver for AVR32 UC3. + * + * This file defines a useful set of functions for the GPIO. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with a GPIO module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + *****************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#include "gpio.h" + +//! GPIO module instance. +#define GPIO AVR32_GPIO + + +/*! \name Peripheral Bus Interface + */ +//! @{ + + +int gpio_enable_module(const gpio_map_t gpiomap, unsigned int size) +{ + int status = GPIO_SUCCESS; + unsigned int i; + + for (i = 0; i < size; i++) + { + status |= gpio_enable_module_pin(gpiomap->pin, gpiomap->function); + gpiomap++; + } + + return status; +} + + +int gpio_enable_module_pin(unsigned int pin, unsigned int function) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + + // Enable the correct function. + switch (function) + { + case 0: // A function. + gpio_port->pmr0c = 1 << (pin & 0x1F); + gpio_port->pmr1c = 1 << (pin & 0x1F); +#if defined(AVR32_GPIO_210_H_INCLUDED) || defined(AVR32_GPIO_211_H_INCLUDED) + gpio_port->pmr2c = 1 << (pin & 0x1F); +#endif + break; + + case 1: // B function. + gpio_port->pmr0s = 1 << (pin & 0x1F); + gpio_port->pmr1c = 1 << (pin & 0x1F); +#if defined(AVR32_GPIO_210_H_INCLUDED) || defined(AVR32_GPIO_211_H_INCLUDED) + gpio_port->pmr2c = 1 << (pin & 0x1F); +#endif + break; + + case 2: // C function. + gpio_port->pmr0c = 1 << (pin & 0x1F); + gpio_port->pmr1s = 1 << (pin & 0x1F); +#if defined(AVR32_GPIO_210_H_INCLUDED) || defined(AVR32_GPIO_211_H_INCLUDED) + gpio_port->pmr2c = 1 << (pin & 0x1F); +#endif + break; + + case 3: // D function. + gpio_port->pmr0s = 1 << (pin & 0x1F); + gpio_port->pmr1s = 1 << (pin & 0x1F); +#if defined(AVR32_GPIO_210_H_INCLUDED) || defined(AVR32_GPIO_211_H_INCLUDED) + gpio_port->pmr2c = 1 << (pin & 0x1F); +#endif + break; + +#if defined(AVR32_GPIO_210_H_INCLUDED) || defined(AVR32_GPIO_211_H_INCLUDED) + case 4: // E function. + gpio_port->pmr0c = 1 << (pin & 0x1F); + gpio_port->pmr1c = 1 << (pin & 0x1F); + gpio_port->pmr2s = 1 << (pin & 0x1F); + break; + + case 5: // F function. + gpio_port->pmr0s = 1 << (pin & 0x1F); + gpio_port->pmr1c = 1 << (pin & 0x1F); + gpio_port->pmr2s = 1 << (pin & 0x1F); + break; + + case 6: // G function. + gpio_port->pmr0c = 1 << (pin & 0x1F); + gpio_port->pmr1s = 1 << (pin & 0x1F); + gpio_port->pmr2s = 1 << (pin & 0x1F); + break; + + case 7: // H function. + gpio_port->pmr0s = 1 << (pin & 0x1F); + gpio_port->pmr1s = 1 << (pin & 0x1F); + gpio_port->pmr2s = 1 << (pin & 0x1F); + break; +#endif + + default: + return GPIO_INVALID_ARGUMENT; + } + + // Disable GPIO control. + gpio_port->gperc = 1 << (pin & 0x1F); + + return GPIO_SUCCESS; +} + + +void gpio_enable_gpio(const gpio_map_t gpiomap, unsigned int size) +{ + unsigned int i; + + for (i = 0; i < size; i++) + { + gpio_enable_gpio_pin(gpiomap->pin); + gpiomap++; + } +} + + +void gpio_enable_gpio_pin(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + gpio_port->oderc = 1 << (pin & 0x1F); + gpio_port->gpers = 1 << (pin & 0x1F); +} + + +// The open-drain mode is not synthesized on the current AVR32 products. +// If one day some AVR32 products have this feature, the corresponding part +// numbers should be listed in the #if below. +// Note that other functions are available in this driver to use pins with open +// drain in GPIO mode. The advantage of the open-drain mode functions over these +// other functions is that they can be used not only in GPIO mode but also in +// module mode. +#if 0 + + +void gpio_enable_pin_open_drain(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + gpio_port->odmers = 1 << (pin & 0x1F); +} + + +void gpio_disable_pin_open_drain(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + gpio_port->odmerc = 1 << (pin & 0x1F); +} + + +#endif + + +void gpio_enable_pin_pull_up(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + gpio_port->puers = 1 << (pin & 0x1F); +#if defined(AVR32_GPIO_200_H_INCLUDED) || defined(AVR32_GPIO_210_H_INCLUDED) || defined(AVR32_GPIO_211_H_INCLUDED) + gpio_port->pderc = 1 << (pin & 0x1F); +#endif +} + + +void gpio_disable_pin_pull_up(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + gpio_port->puerc = 1 << (pin & 0x1F); +} + +#if defined(AVR32_GPIO_200_H_INCLUDED) || defined(AVR32_GPIO_210_H_INCLUDED) || defined(AVR32_GPIO_211_H_INCLUDED) +// Added support of Pull-up Resistor, Pull-down Resistor and Buskeeper Control. + +/*! \brief Enables the pull-down resistor of a pin. + * + * \param pin The pin number. + */ +void gpio_enable_pin_pull_down(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + gpio_port->puerc = 1 << (pin & 0x1F); + gpio_port->pders = 1 << (pin & 0x1F); +} + +/*! \brief Disables the pull-down resistor of a pin. + * + * \param pin The pin number. + */ +void gpio_disable_pin_pull_down(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + gpio_port->pderc = 1 << (pin & 0x1F); +} + +/*! \brief Enables the buskeeper functionality on a pin. + * + * \param pin The pin number. + */ +void gpio_enable_pin_buskeeper(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + gpio_port->puers = 1 << (pin & 0x1F); + gpio_port->pders = 1 << (pin & 0x1F); +} + +/*! \brief Disables the buskeeper functionality on a pin. + * + * \param pin The pin number. + */ +void gpio_disable_pin_buskeeper(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + gpio_port->puerc = 1 << (pin & 0x1F); + gpio_port->pderc = 1 << (pin & 0x1F); +} + +#endif + +int gpio_get_pin_value(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + return (gpio_port->pvr >> (pin & 0x1F)) & 1; +} + + +int gpio_get_gpio_pin_output_value(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + return (gpio_port->ovr >> (pin & 0x1F)) & 1; +} + + +int gpio_get_gpio_open_drain_pin_output_value(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + return ((gpio_port->oder >> (pin & 0x1F)) & 1) ^ 1; +} + + +void gpio_set_gpio_pin(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + + gpio_port->ovrs = 1 << (pin & 0x1F); // Value to be driven on the I/O line: 1. + gpio_port->oders = 1 << (pin & 0x1F); // The GPIO output driver is enabled for that pin. + gpio_port->gpers = 1 << (pin & 0x1F); // The GPIO module controls that pin. +} + + +void gpio_clr_gpio_pin(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + + gpio_port->ovrc = 1 << (pin & 0x1F); // Value to be driven on the I/O line: 0. + gpio_port->oders = 1 << (pin & 0x1F); // The GPIO output driver is enabled for that pin. + gpio_port->gpers = 1 << (pin & 0x1F); // The GPIO module controls that pin. +} + + +void gpio_tgl_gpio_pin(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + + gpio_port->ovrt = 1 << (pin & 0x1F); // Toggle the I/O line. + gpio_port->oders = 1 << (pin & 0x1F); // The GPIO output driver is enabled for that pin. + gpio_port->gpers = 1 << (pin & 0x1F); // The GPIO module controls that pin. +} + + +void gpio_set_gpio_open_drain_pin(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + + gpio_port->oderc = 1 << (pin & 0x1F); // The GPIO output driver is disabled for that pin. + gpio_port->gpers = 1 << (pin & 0x1F); // The GPIO module controls that pin. +} + + +void gpio_clr_gpio_open_drain_pin(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + + gpio_port->ovrc = 1 << (pin & 0x1F); // Value to be driven on the I/O line: 0. + gpio_port->oders = 1 << (pin & 0x1F); // The GPIO output driver is enabled for that pin. + gpio_port->gpers = 1 << (pin & 0x1F); // The GPIO module controls that pin. +} + + +void gpio_tgl_gpio_open_drain_pin(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + + gpio_port->ovrc = 1 << (pin & 0x1F); // Value to be driven on the I/O line if the GPIO output driver is enabled: 0. + gpio_port->odert = 1 << (pin & 0x1F); // The GPIO output driver is toggled for that pin. + gpio_port->gpers = 1 << (pin & 0x1F); // The GPIO module controls that pin. +} + + +void gpio_enable_pin_glitch_filter(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + gpio_port->gfers = 1 << (pin & 0x1F); +} + + +void gpio_disable_pin_glitch_filter(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + gpio_port->gferc = 1 << (pin & 0x1F); +} + +/*! \brief Configure the edge detector of an input pin + * + * \param pin The pin number. + * \param mode The edge detection mode (\ref GPIO_PIN_CHANGE, \ref GPIO_RISING_EDGE + * or \ref GPIO_FALLING_EDGE). + * + * \return \ref GPIO_SUCCESS or \ref GPIO_INVALID_ARGUMENT. + */ +static int gpio_configure_edge_detector(unsigned int pin, unsigned int mode) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + + // Configure the edge detector. + switch (mode) + { + case GPIO_PIN_CHANGE: + gpio_port->imr0c = 1 << (pin & 0x1F); + gpio_port->imr1c = 1 << (pin & 0x1F); + break; + + case GPIO_RISING_EDGE: + gpio_port->imr0s = 1 << (pin & 0x1F); + gpio_port->imr1c = 1 << (pin & 0x1F); + break; + + case GPIO_FALLING_EDGE: + gpio_port->imr0c = 1 << (pin & 0x1F); + gpio_port->imr1s = 1 << (pin & 0x1F); + break; + + default: + return GPIO_INVALID_ARGUMENT; + } + + return GPIO_SUCCESS; +} + + +int gpio_enable_pin_interrupt(unsigned int pin, unsigned int mode) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + + // Enable the glitch filter. + gpio_port->gfers = 1 << (pin & 0x1F); + + // Configure the edge detector. + if(GPIO_INVALID_ARGUMENT == gpio_configure_edge_detector(pin, mode)) + return(GPIO_INVALID_ARGUMENT); + + // Enable interrupt. + gpio_port->iers = 1 << (pin & 0x1F); + + return GPIO_SUCCESS; +} + + +void gpio_disable_pin_interrupt(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + gpio_port->ierc = 1 << (pin & 0x1F); +} + + +int gpio_get_pin_interrupt_flag(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + return (gpio_port->ifr >> (pin & 0x1F)) & 1; +} + + +void gpio_clear_pin_interrupt_flag(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + gpio_port->ifrc = 1 << (pin & 0x1F); +} + + +//# +//# Peripheral Event System Support. +//# +#if UC3L +int gpio_configure_pin_periph_event_mode(unsigned int pin, unsigned int mode, unsigned int use_igf) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + + if(TRUE == use_igf) + { + // Enable the glitch filter. + gpio_port->gfers = 1 << (pin & 0x1F); + } + else + { + // Disable the glitch filter. + gpio_port->gferc = 1 << (pin & 0x1F); + } + + // Configure the edge detector. + return(gpio_configure_edge_detector(pin, mode)); +} + +#endif + +//! @} diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO/gpio.h b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO/gpio.h new file mode 100644 index 000000000..f0b5fd884 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO/gpio.h @@ -0,0 +1,583 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file has been prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief GPIO header for AVR32 UC3. + * + * This file contains basic GPIO driver functions. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with a GPIO module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + *****************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _GPIO_H_ +#define _GPIO_H_ + +#include +#include "compiler.h" + +/*! \name Return Values of the GPIO API + */ +//! @{ +#define GPIO_SUCCESS 0 //!< Function successfully completed. +#define GPIO_INVALID_ARGUMENT 1 //!< Input parameters are out of range. +//! @} + + +/*! \name Interrupt Trigger Modes + */ +//! @{ +#define GPIO_PIN_CHANGE 0 //!< Interrupt triggered upon pin change. +#define GPIO_RISING_EDGE 1 //!< Interrupt triggered upon rising edge. +#define GPIO_FALLING_EDGE 2 //!< Interrupt triggered upon falling edge. +//! @} + + +//! A type definition of pins and modules connectivity. +typedef struct +{ + unsigned char pin; //!< Module pin. + unsigned char function; //!< Module function. +} gpio_map_t[]; + + +/*! \name Peripheral Bus Interface + * + * Low-speed interface with a non-deterministic number of clock cycles per + * access. + * + * This interface operates with lower clock frequencies (fPB <= fCPU), and its + * timing is not deterministic since it needs to access a shared bus which may + * be heavily loaded. + * + * \note This interface is immediately available without initialization. + */ +//! @{ + +/*! \brief Enables specific module modes for a set of pins. + * + * \param gpiomap The pin map. + * \param size The number of pins in \a gpiomap. + * + * \return \ref GPIO_SUCCESS or \ref GPIO_INVALID_ARGUMENT. + */ +extern int gpio_enable_module(const gpio_map_t gpiomap, unsigned int size); + +/*! \brief Enables a specific module mode for a pin. + * + * \param pin The pin number.\n + * Refer to the product header file `uc3x.h' (where x is the part + * number; e.g. x = a0512) for module pins. E.g., to enable a PWM + * channel output, the pin number can be AVR32_PWM_3_PIN for PWM + * channel 3. + * \param function The pin function.\n + * Refer to the product header file `uc3x.h' (where x is the + * part number; e.g. x = a0512) for module pin functions. E.g., + * to enable a PWM channel output, the pin function can be + * AVR32_PWM_3_FUNCTION for PWM channel 3. + * + * \return \ref GPIO_SUCCESS or \ref GPIO_INVALID_ARGUMENT. + */ +extern int gpio_enable_module_pin(unsigned int pin, unsigned int function); + +/*! \brief Enables the GPIO mode of a set of pins. + * + * \param gpiomap The pin map. + * \param size The number of pins in \a gpiomap. + */ +extern void gpio_enable_gpio(const gpio_map_t gpiomap, unsigned int size); + +/*! \brief Enables the GPIO mode of a pin. + * + * \param pin The pin number.\n + * Refer to the product header file `uc3x.h' (where x is the part + * number; e.g. x = a0512) for pin definitions. E.g., to enable the + * GPIO mode of PX21, AVR32_PIN_PX21 can be used. Module pins such as + * AVR32_PWM_3_PIN for PWM channel 3 can also be used to release + * module pins for GPIO. + */ +extern void gpio_enable_gpio_pin(unsigned int pin); + +// The open-drain mode is not synthesized on the current AVR32 products. +// If one day some AVR32 products have this feature, the corresponding part +// numbers should be listed in the #if below. +// Note that other functions are available in this driver to use pins with open +// drain in GPIO mode. The advantage of the open-drain mode functions over these +// other functions is that they can be used not only in GPIO mode but also in +// module mode. +#if 0 + +/*! \brief Enables the open-drain mode of a pin. + * + * \param pin The pin number. + */ +extern void gpio_enable_pin_open_drain(unsigned int pin); + +/*! \brief Disables the open-drain mode of a pin. + * + * \param pin The pin number. + */ +extern void gpio_disable_pin_open_drain(unsigned int pin); + +#endif + +/*! \brief Enables the pull-up resistor of a pin. + * + * \param pin The pin number. + */ +extern void gpio_enable_pin_pull_up(unsigned int pin); + +/*! \brief Disables the pull-up resistor of a pin. + * + * \param pin The pin number. + */ +extern void gpio_disable_pin_pull_up(unsigned int pin); + +#if defined(AVR32_GPIO_200_H_INCLUDED) || defined(AVR32_GPIO_210_H_INCLUDED) || defined(AVR32_GPIO_211_H_INCLUDED) +// Added support of Pull-up Resistor, Pull-down Resistor and Buskeeper Control. + +/*! \brief Enables the pull-down resistor of a pin. + * + * \param pin The pin number. + */ +extern void gpio_enable_pin_pull_down(unsigned int pin); + +/*! \brief Disables the pull-down resistor of a pin. + * + * \param pin The pin number. + */ +extern void gpio_disable_pin_pull_down(unsigned int pin); + +/*! \brief Enables the buskeeper functionality on a pin. + * + * \param pin The pin number. + */ +extern void gpio_enable_pin_buskeeper(unsigned int pin); + +/*! \brief Disables the buskeeper functionality on a pin. + * + * \param pin The pin number. + */ +extern void gpio_disable_pin_buskeeper(unsigned int pin); + +#endif + +/*! \brief Returns the value of a pin. + * + * \param pin The pin number. + * + * \return The pin value. + */ +extern int gpio_get_pin_value(unsigned int pin); + +/*! \brief Returns the output value set for a GPIO pin. + * + * \param pin The pin number. + * + * \return The pin output value. + * + * \note This function must be used in conjunction with \ref gpio_set_gpio_pin, + * \ref gpio_clr_gpio_pin and \ref gpio_tgl_gpio_pin. + */ +extern int gpio_get_gpio_pin_output_value(unsigned int pin); + +/*! \brief Returns the output value set for a GPIO pin using open drain. + * + * \param pin The pin number. + * + * \return The pin output value. + * + * \note This function must be used in conjunction with + * \ref gpio_set_gpio_open_drain_pin, \ref gpio_clr_gpio_open_drain_pin + * and \ref gpio_tgl_gpio_open_drain_pin. + */ +extern int gpio_get_gpio_open_drain_pin_output_value(unsigned int pin); + +/*! \brief Drives a GPIO pin to 1. + * + * \param pin The pin number. + */ +extern void gpio_set_gpio_pin(unsigned int pin); + +/*! \brief Drives a GPIO pin to 0. + * + * \param pin The pin number. + */ +extern void gpio_clr_gpio_pin(unsigned int pin); + +/*! \brief Toggles a GPIO pin. + * + * \param pin The pin number. + */ +extern void gpio_tgl_gpio_pin(unsigned int pin); + +/*! \brief Drives a GPIO pin to 1 using open drain. + * + * \param pin The pin number. + */ +extern void gpio_set_gpio_open_drain_pin(unsigned int pin); + +/*! \brief Drives a GPIO pin to 0 using open drain. + * + * \param pin The pin number. + */ +extern void gpio_clr_gpio_open_drain_pin(unsigned int pin); + +/*! \brief Toggles a GPIO pin using open drain. + * + * \param pin The pin number. + */ +extern void gpio_tgl_gpio_open_drain_pin(unsigned int pin); + +/*! \brief Enables the glitch filter of a pin. + * + * When the glitch filter is enabled, a glitch with duration of less than 1 + * clock cycle is automatically rejected, while a pulse with duration of 2 clock + * cycles or more is accepted. For pulse durations between 1 clock cycle and 2 + * clock cycles, the pulse may or may not be taken into account, depending on + * the precise timing of its occurrence. Thus for a pulse to be guaranteed + * visible it must exceed 2 clock cycles, whereas for a glitch to be reliably + * filtered out, its duration must not exceed 1 clock cycle. The filter + * introduces 2 clock cycles latency. + * + * \param pin The pin number. + */ +extern void gpio_enable_pin_glitch_filter(unsigned int pin); + +/*! \brief Disables the glitch filter of a pin. + * + * \param pin The pin number. + */ +extern void gpio_disable_pin_glitch_filter(unsigned int pin); + +/*! \brief Enables the interrupt of a pin with the specified settings. + * + * \param pin The pin number. + * \param mode The trigger mode (\ref GPIO_PIN_CHANGE, \ref GPIO_RISING_EDGE or + * \ref GPIO_FALLING_EDGE). + * + * \return \ref GPIO_SUCCESS or \ref GPIO_INVALID_ARGUMENT. + */ +extern int gpio_enable_pin_interrupt(unsigned int pin, unsigned int mode); + +/*! \brief Disables the interrupt of a pin. + * + * \param pin The pin number. + */ +extern void gpio_disable_pin_interrupt(unsigned int pin); + +/*! \brief Gets the interrupt flag of a pin. + * + * \param pin The pin number. + * + * \return The pin interrupt flag. + */ +extern int gpio_get_pin_interrupt_flag(unsigned int pin); + +/*! \brief Clears the interrupt flag of a pin. + * + * \param pin The pin number. + */ +extern void gpio_clear_pin_interrupt_flag(unsigned int pin); + +//! @} + + +#if (defined AVR32_GPIO_LOCAL_ADDRESS) +/*! \name Local Bus Interface + * + * High-speed interface with only one clock cycle per access. + * + * This interface operates with high clock frequency (fCPU), and its timing is + * deterministic since it does not need to access a shared bus which may be + * heavily loaded. + * + * \warning To use this interface, the clock frequency of the peripheral bus on + * which the GPIO peripheral is connected must be set to the CPU clock + * frequency (fPB = fCPU). + * + * \note This interface has to be initialized in order to be available. + */ +//! @{ + +/*! \brief Enables the local bus interface for GPIO. + * + * \note This function must have been called at least once before using other + * functions in this interface. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void gpio_local_init(void) +{ + Set_system_register(AVR32_CPUCR, + Get_system_register(AVR32_CPUCR) | AVR32_CPUCR_LOCEN_MASK); +} + +/*! \brief Enables the output driver of a pin. + * + * \param pin The pin number. + * + * \note \ref gpio_local_init must have been called beforehand. + * + * \note This function does not enable the GPIO mode of the pin. + * \ref gpio_enable_gpio_pin can be called for this purpose. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void gpio_local_enable_pin_output_driver(unsigned int pin) +{ + AVR32_GPIO_LOCAL.port[pin >> 5].oders = 1 << (pin & 0x1F); +} + +/*! \brief Disables the output driver of a pin. + * + * \param pin The pin number. + * + * \note \ref gpio_local_init must have been called beforehand. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void gpio_local_disable_pin_output_driver(unsigned int pin) +{ + AVR32_GPIO_LOCAL.port[pin >> 5].oderc = 1 << (pin & 0x1F); +} + +/*! \brief Returns the value of a pin. + * + * \param pin The pin number. + * + * \return The pin value. + * + * \note \ref gpio_local_init must have been called beforehand. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ int gpio_local_get_pin_value(unsigned int pin) +{ + return (AVR32_GPIO_LOCAL.port[pin >> 5].pvr >> (pin & 0x1F)) & 1; +} + +/*! \brief Drives a GPIO pin to 1. + * + * \param pin The pin number. + * + * \note \ref gpio_local_init must have been called beforehand. + * + * \note This function does not enable the GPIO mode of the pin nor its output + * driver. \ref gpio_enable_gpio_pin and + * \ref gpio_local_enable_pin_output_driver can be called for this + * purpose. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void gpio_local_set_gpio_pin(unsigned int pin) +{ + AVR32_GPIO_LOCAL.port[pin >> 5].ovrs = 1 << (pin & 0x1F); +} + +/*! \brief Drives a GPIO pin to 0. + * + * \param pin The pin number. + * + * \note \ref gpio_local_init must have been called beforehand. + * + * \note This function does not enable the GPIO mode of the pin nor its output + * driver. \ref gpio_enable_gpio_pin and + * \ref gpio_local_enable_pin_output_driver can be called for this + * purpose. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void gpio_local_clr_gpio_pin(unsigned int pin) +{ + AVR32_GPIO_LOCAL.port[pin >> 5].ovrc = 1 << (pin & 0x1F); +} + +/*! \brief Toggles a GPIO pin. + * + * \param pin The pin number. + * + * \note \ref gpio_local_init must have been called beforehand. + * + * \note This function does not enable the GPIO mode of the pin nor its output + * driver. \ref gpio_enable_gpio_pin and + * \ref gpio_local_enable_pin_output_driver can be called for this + * purpose. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void gpio_local_tgl_gpio_pin(unsigned int pin) +{ + AVR32_GPIO_LOCAL.port[pin >> 5].ovrt = 1 << (pin & 0x1F); +} + +/*! \brief Initializes the configuration of a GPIO pin so that it can be used + * with GPIO open-drain functions. + * + * \note This function must have been called at least once before using + * \ref gpio_local_set_gpio_open_drain_pin, + * \ref gpio_local_clr_gpio_open_drain_pin or + * \ref gpio_local_tgl_gpio_open_drain_pin. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void gpio_local_init_gpio_open_drain_pin(unsigned int pin) +{ + AVR32_GPIO_LOCAL.port[pin >> 5].ovrc = 1 << (pin & 0x1F); +} + +/*! \brief Drives a GPIO pin to 1 using open drain. + * + * \param pin The pin number. + * + * \note \ref gpio_local_init and \ref gpio_local_init_gpio_open_drain_pin must + * have been called beforehand. + * + * \note This function does not enable the GPIO mode of the pin. + * \ref gpio_enable_gpio_pin can be called for this purpose. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void gpio_local_set_gpio_open_drain_pin(unsigned int pin) +{ + AVR32_GPIO_LOCAL.port[pin >> 5].oderc = 1 << (pin & 0x1F); +} + +/*! \brief Drives a GPIO pin to 0 using open drain. + * + * \param pin The pin number. + * + * \note \ref gpio_local_init and \ref gpio_local_init_gpio_open_drain_pin must + * have been called beforehand. + * + * \note This function does not enable the GPIO mode of the pin. + * \ref gpio_enable_gpio_pin can be called for this purpose. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void gpio_local_clr_gpio_open_drain_pin(unsigned int pin) +{ + AVR32_GPIO_LOCAL.port[pin >> 5].oders = 1 << (pin & 0x1F); +} + +/*! \brief Toggles a GPIO pin using open drain. + * + * \param pin The pin number. + * + * \note \ref gpio_local_init and \ref gpio_local_init_gpio_open_drain_pin must + * have been called beforehand. + * + * \note This function does not enable the GPIO mode of the pin. + * \ref gpio_enable_gpio_pin can be called for this purpose. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void gpio_local_tgl_gpio_open_drain_pin(unsigned int pin) +{ + AVR32_GPIO_LOCAL.port[pin >> 5].odert = 1 << (pin & 0x1F); +} + +//! @} +#endif // AVR32_GPIO_LOCAL_ADDRESS + +#if UC3L +//! @{ +/*! \name Peripheral Event System support + * + * The GPIO can be programmed to output peripheral events whenever an interrupt + * condition is detected, such as pin value change, or only when a rising or + * falling edge is detected. + * + */ + +/*! \brief Enables the peripheral event generation of a pin. + * + * \param pin The pin number. + * + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void gpio_enable_pin_periph_event(unsigned int pin) +{ + AVR32_GPIO.port[pin >> 5].oderc = 1 << (pin & 0x1F); // The GPIO output driver is disabled for that pin. + AVR32_GPIO.port[pin >> 5].evers = 1 << (pin & 0x1F); +} + +/*! \brief Disables the peripheral event generation of a pin. + * + * \param pin The pin number. + * + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void gpio_disable_pin_periph_event(unsigned int pin) +{ + AVR32_GPIO.port[pin >> 5].everc = 1 << (pin & 0x1F); +} + +/*! \brief Configure the peripheral event trigger mode of a pin + * + * \param pin The pin number. + * \param mode The trigger mode (\ref GPIO_PIN_CHANGE, \ref GPIO_RISING_EDGE or + * \ref GPIO_FALLING_EDGE). + * \param use_igf use the Input Glitch Filter (TRUE) or not (FALSE). + * + * \return \ref GPIO_SUCCESS or \ref GPIO_INVALID_ARGUMENT. + */ +extern int gpio_configure_pin_periph_event_mode(unsigned int pin, unsigned int mode, unsigned int use_igf); + +//! @} +#endif + + +#endif // _GPIO_H_ diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/INTC/exception.x b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/INTC/exception.x new file mode 100644 index 000000000..ec4109d46 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/INTC/exception.x @@ -0,0 +1,239 @@ +/* This file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Exception and interrupt vectors. + * + * This file maps all events supported by an AVR32. + * + * - Compiler: GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with an INTC module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#if !__AVR32_UC__ && !__AVR32_AP__ + #error Implementation of the AVR32 architecture not supported by the INTC driver. +#endif + + +#include + + +//! @{ +//! \verbatim + + + .section .exception, "ax", @progbits + + +// Start of Exception Vector Table. + + // EVBA must be aligned with a power of two strictly greater than the EVBA- + // relative offset of the last vector. + .balign 0x200 + + // Export symbol. + .global _evba + .type _evba, @function +_evba: + + .org 0x000 + // Unrecoverable Exception. +_handle_Unrecoverable_Exception: + rjmp $ + + .org 0x004 + // TLB Multiple Hit. +_handle_TLB_Multiple_Hit: + rjmp $ + + .org 0x008 + // Bus Error Data Fetch. +_handle_Bus_Error_Data_Fetch: + rjmp $ + + .org 0x00C + // Bus Error Instruction Fetch. +_handle_Bus_Error_Instruction_Fetch: + rjmp $ + + .org 0x010 + // NMI. +_handle_NMI: + rjmp $ + + .org 0x014 + // Instruction Address. +_handle_Instruction_Address: + rjmp $ + + .org 0x018 + // ITLB Protection. +_handle_ITLB_Protection: + rjmp $ + + .org 0x01C + // Breakpoint. +_handle_Breakpoint: + rjmp $ + + .org 0x020 + // Illegal Opcode. +_handle_Illegal_Opcode: + rjmp $ + + .org 0x024 + // Unimplemented Instruction. +_handle_Unimplemented_Instruction: + rjmp $ + + .org 0x028 + // Privilege Violation. +_handle_Privilege_Violation: + rjmp $ + + .org 0x02C + // Floating-Point: UNUSED IN AVR32UC and AVR32AP. +_handle_Floating_Point: + rjmp $ + + .org 0x030 + // Coprocessor Absent: UNUSED IN AVR32UC. +_handle_Coprocessor_Absent: + rjmp $ + + .org 0x034 + // Data Address (Read). +_handle_Data_Address_Read: + rjmp $ + + .org 0x038 + // Data Address (Write). +_handle_Data_Address_Write: + rjmp $ + + .org 0x03C + // DTLB Protection (Read). +_handle_DTLB_Protection_Read: + rjmp $ + + .org 0x040 + // DTLB Protection (Write). +_handle_DTLB_Protection_Write: + rjmp $ + + .org 0x044 + // DTLB Modified: UNUSED IN AVR32UC. +_handle_DTLB_Modified: + rjmp $ + + .org 0x050 + // ITLB Miss. +_handle_ITLB_Miss: + rjmp $ + + .org 0x060 + // DTLB Miss (Read). +_handle_DTLB_Miss_Read: + rjmp $ + + .org 0x070 + // DTLB Miss (Write). +_handle_DTLB_Miss_Write: + rjmp $ + + .org 0x100 + // Supervisor Call. +_handle_Supervisor_Call: + rjmp $ + + +// Interrupt support. +// The interrupt controller must provide the offset address relative to EVBA. +// Important note: +// All interrupts call a C function named _get_interrupt_handler. +// This function will read group and interrupt line number to then return in +// R12 a pointer to a user-provided interrupt handler. + + .balign 4 + + .irp priority, 0, 1, 2, 3 +_int\priority: +#if __AVR32_UC__ + // R8-R12, LR, PC and SR are automatically pushed onto the system stack by the + // CPU upon interrupt entry. No other register is saved by hardware. +#elif __AVR32_AP__ + // PC and SR are automatically saved in respectively RAR_INTx and RSR_INTx by + // the CPU upon interrupt entry. No other register is saved by hardware. + pushm r8-r12, lr +#endif + mov r12, \priority // Pass the int_level parameter to the _get_interrupt_handler function. + call _get_interrupt_handler + cp.w r12, 0 // Get the pointer to the interrupt handler returned by the function. +#if __AVR32_UC__ + movne pc, r12 // If this was not a spurious interrupt (R12 != NULL), jump to the handler. +#elif __AVR32_AP__ + breq spint\priority // If this was a spurious interrupt (R12 == NULL), branch. + st.w --sp, r12 // Push the pointer to the interrupt handler onto the system stack since no register may be altered. + popm r8-r12, lr, pc // Restore registers and jump to the handler. +spint\priority: + popm r8-r12, lr +#endif + rete // If this was a spurious interrupt (R12 == NULL), return from event handler. + .endr + + +// Constant data area. + + .balign 4 + + // Values to store in the interrupt priority registers for the various interrupt priority levels. + // The interrupt priority registers contain the interrupt priority level and + // the EVBA-relative interrupt vector offset. + .global ipr_val + .type ipr_val, @object +ipr_val: + .word (AVR32_INTC_INT0 << AVR32_INTC_IPR_INTLEVEL_OFFSET) | (_int0 - _evba),\ + (AVR32_INTC_INT1 << AVR32_INTC_IPR_INTLEVEL_OFFSET) | (_int1 - _evba),\ + (AVR32_INTC_INT2 << AVR32_INTC_IPR_INTLEVEL_OFFSET) | (_int2 - _evba),\ + (AVR32_INTC_INT3 << AVR32_INTC_IPR_INTLEVEL_OFFSET) | (_int3 - _evba) + + +//! \endverbatim +//! @} diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/INTC/intc.c b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/INTC/intc.c new file mode 100644 index 000000000..84d498d1a --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/INTC/intc.c @@ -0,0 +1,214 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief INTC driver for AVR32 UC3. + * + * AVR32 Interrupt Controller driver module. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with an INTC module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#include +#include "compiler.h" +#include "preprocessor.h" +#include "intc.h" + +// define _evba from exception.S +extern void _evba; + +//! Values to store in the interrupt priority registers for the various interrupt priority levels. +extern const unsigned int ipr_val[AVR32_INTC_NUM_INT_LEVELS]; + +//! Creates a table of interrupt line handlers per interrupt group in order to optimize RAM space. +//! Each line handler table contains a set of pointers to interrupt handlers. +#if (defined __GNUC__) +#define DECL_INT_LINE_HANDLER_TABLE(GRP, unused) \ +static volatile __int_handler _int_line_handler_table_##GRP[Max(AVR32_INTC_NUM_IRQS_PER_GRP##GRP, 1)]; +#elif (defined __ICCAVR32__) +#define DECL_INT_LINE_HANDLER_TABLE(GRP, unused) \ +static volatile __no_init __int_handler _int_line_handler_table_##GRP[Max(AVR32_INTC_NUM_IRQS_PER_GRP##GRP, 1)]; +#endif +MREPEAT(AVR32_INTC_NUM_INT_GRPS, DECL_INT_LINE_HANDLER_TABLE, ~); +#undef DECL_INT_LINE_HANDLER_TABLE + +//! Table containing for each interrupt group the number of interrupt request +//! lines and a pointer to the table of interrupt line handlers. +static const struct +{ + unsigned int num_irqs; + volatile __int_handler *_int_line_handler_table; +} _int_handler_table[AVR32_INTC_NUM_INT_GRPS] = +{ +#define INSERT_INT_LINE_HANDLER_TABLE(GRP, unused) \ + {AVR32_INTC_NUM_IRQS_PER_GRP##GRP, _int_line_handler_table_##GRP}, + MREPEAT(AVR32_INTC_NUM_INT_GRPS, INSERT_INT_LINE_HANDLER_TABLE, ~) +#undef INSERT_INT_LINE_HANDLER_TABLE +}; + + +/*! \brief Default interrupt handler. + * + * \note Taken and adapted from Newlib. + */ +#if (defined __GNUC__) +__attribute__((__interrupt__)) +#elif (defined __ICCAVR32__) +__interrupt +#endif +static void _unhandled_interrupt(void) +{ + // Catch unregistered interrupts. + while (TRUE); +} + + +/*! \brief Gets the interrupt handler of the current event at the \a int_level + * interrupt priority level (called from exception.S). + * + * \param int_level Interrupt priority level to handle. + * + * \return Interrupt handler to execute. + * + * \note Taken and adapted from Newlib. + */ +__int_handler _get_interrupt_handler(unsigned int int_level) +{ + // ICR3 is mapped first, ICR0 last. + // Code in exception.S puts int_level in R12 which is used by AVR32-GCC to + // pass a single argument to a function. + unsigned int int_grp = AVR32_INTC.icr[AVR32_INTC_INT3 - int_level]; + unsigned int int_req = AVR32_INTC.irr[int_grp]; + + // As an interrupt may disappear while it is being fetched by the CPU + // (spurious interrupt caused by a delayed response from an MCU peripheral to + // an interrupt flag clear or interrupt disable instruction), check if there + // are remaining interrupt lines to process. + // If a spurious interrupt occurs, the status register (SR) contains an + // execution mode and interrupt level masks corresponding to a level 0 + // interrupt, whatever the interrupt priority level causing the spurious + // event. This behavior has been chosen because a spurious interrupt has not + // to be a priority one and because it may not cause any trouble to other + // interrupts. + // However, these spurious interrupts place the hardware in an unstable state + // and could give problems in other/future versions of the CPU, so the + // software has to be written so that they never occur. The only safe way of + // achieving this is to always clear or disable peripheral interrupts with the + // following sequence: + // 1: Mask the interrupt in the CPU by setting GM (or IxM) in SR. + // 2: Perform the bus access to the peripheral register that clears or + // disables the interrupt. + // 3: Wait until the interrupt has actually been cleared or disabled by the + // peripheral. This is usually performed by reading from a register in the + // same peripheral (it DOES NOT have to be the same register that was + // accessed in step 2, but it MUST be in the same peripheral), what takes + // bus system latencies into account, but peripheral internal latencies + // (generally 0 cycle) also have to be considered. + // 4: Unmask the interrupt in the CPU by clearing GM (or IxM) in SR. + // Note that steps 1 and 4 are useless inside interrupt handlers as the + // corresponding interrupt level is automatically masked by IxM (unless IxM is + // explicitly cleared by the software). + // + // Get the right IRQ handler. + // + // If several interrupt lines are active in the group, the interrupt line with + // the highest number is selected. This is to be coherent with the + // prioritization of interrupt groups performed by the hardware interrupt + // controller. + // + // If no handler has been registered for the pending interrupt, + // _unhandled_interrupt will be selected thanks to the initialization of + // _int_line_handler_table_x by INTC_init_interrupts. + // + // exception.S will provide the interrupt handler with a clean interrupt stack + // frame, with nothing more pushed onto the stack. The interrupt handler must + // manage the `rete' instruction, what can be done thanks to pure assembly, + // inline assembly or the `__attribute__((__interrupt__))' C function + // attribute. + return (int_req) ? _int_handler_table[int_grp]._int_line_handler_table[32 - clz(int_req) - 1] : NULL; +} + +//! Init EVBA address. This sequence might also be done in the UTILS/STARTUP/GCC/crt0.S +static __inline__ void INTC_init_evba(void) +{ + Set_system_register(AVR32_EVBA, (int)&_evba ); +} + +void INTC_init_interrupts(void) +{ + unsigned int int_grp, int_req; + + INTC_init_evba(); + + // For all interrupt groups, + for (int_grp = 0; int_grp < AVR32_INTC_NUM_INT_GRPS; int_grp++) + { + // For all interrupt request lines of each group, + for (int_req = 0; int_req < _int_handler_table[int_grp].num_irqs; int_req++) + { + // Assign _unhandled_interrupt as default interrupt handler. + _int_handler_table[int_grp]._int_line_handler_table[int_req] = &_unhandled_interrupt; + } + + // Set the interrupt group priority register to its default value. + // By default, all interrupt groups are linked to the interrupt priority + // level 0 and to the interrupt vector _int0. + AVR32_INTC.ipr[int_grp] = ipr_val[AVR32_INTC_INT0]; + } +} + + +void INTC_register_interrupt(__int_handler handler, unsigned int irq, unsigned int int_level) +{ + // Determine the group of the IRQ. + unsigned int int_grp = irq / AVR32_INTC_MAX_NUM_IRQS_PER_GRP; + + // Store in _int_line_handler_table_x the pointer to the interrupt handler, so + // that _get_interrupt_handler can retrieve it when the interrupt is vectored. + _int_handler_table[int_grp]._int_line_handler_table[irq % AVR32_INTC_MAX_NUM_IRQS_PER_GRP] = handler; + + // Program the corresponding IPRX register to set the interrupt priority level + // and the interrupt vector offset that will be fetched by the core interrupt + // system. + // NOTE: The _intx functions are intermediate assembly functions between the + // core interrupt system and the user interrupt handler. + AVR32_INTC.ipr[int_grp] = ipr_val[int_level & (AVR32_INTC_IPR_INTLEVEL_MASK >> AVR32_INTC_IPR_INTLEVEL_OFFSET)]; +} diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/INTC/intc.h b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/INTC/intc.h new file mode 100644 index 000000000..31a4fc16b --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/INTC/intc.h @@ -0,0 +1,100 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief INTC driver for AVR32 UC3. + * + * AVR32 Interrupt Controller driver module. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with an INTC module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _INTC_H_ +#define _INTC_H_ + +#include "compiler.h" + + +//! Maximal number of interrupt request lines per group. +#define AVR32_INTC_MAX_NUM_IRQS_PER_GRP 32 + +//! Number of interrupt priority levels. +#define AVR32_INTC_NUM_INT_LEVELS (1 << AVR32_INTC_IPR_INTLEVEL_SIZE) + + +#ifdef __AVR32_ABI_COMPILER__ // Automatically defined when compiling for AVR32, not when assembling. + +//! Pointer to interrupt handler. +#if (defined __GNUC__) +typedef void (*__int_handler)(void); +#elif (defined __ICCAVR32__) +typedef void (__interrupt *__int_handler)(void); +#endif + + +/*! \brief Initializes the hardware interrupt controller driver. + * + * \note Taken and adapted from Newlib. + */ +extern void INTC_init_interrupts(void); + +/*! \brief Registers an interrupt handler. + * + * \param handler Interrupt handler to register. + * \param irq IRQ of the interrupt handler to register. + * \param int_level Interrupt priority level to assign to the group of this IRQ. + * + * \warning The interrupt handler must manage the `rete' instruction, what can + * be done thanks to pure assembly, inline assembly or the + * `__attribute__((__interrupt__))' C function attribute. + * + * \warning If several interrupt handlers of a same group are registered with + * different priority levels, only the latest priority level set will + * be effective. + * + * \note Taken and adapted from Newlib. + */ +extern void INTC_register_interrupt(__int_handler handler, unsigned int irq, unsigned int int_level); + +#endif // __AVR32_ABI_COMPILER__ + + +#endif // _INTC_H_ diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/pm.c b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/pm.c new file mode 100644 index 000000000..76d9268b4 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/pm.c @@ -0,0 +1,546 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file has been prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Power Manager driver. + * + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + *****************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#include "compiler.h" +#include "pm.h" + + +/*! \name PM Writable Bit-Field Registers + */ +//! @{ + +typedef union +{ + unsigned long mcctrl; + avr32_pm_mcctrl_t MCCTRL; +} u_avr32_pm_mcctrl_t; + +typedef union +{ + unsigned long cksel; + avr32_pm_cksel_t CKSEL; +} u_avr32_pm_cksel_t; + +typedef union +{ + unsigned long pll; + avr32_pm_pll_t PLL; +} u_avr32_pm_pll_t; + +typedef union +{ + unsigned long oscctrl0; + avr32_pm_oscctrl0_t OSCCTRL0; +} u_avr32_pm_oscctrl0_t; + +typedef union +{ + unsigned long oscctrl1; + avr32_pm_oscctrl1_t OSCCTRL1; +} u_avr32_pm_oscctrl1_t; + +typedef union +{ + unsigned long oscctrl32; + avr32_pm_oscctrl32_t OSCCTRL32; +} u_avr32_pm_oscctrl32_t; + +typedef union +{ + unsigned long ier; + avr32_pm_ier_t IER; +} u_avr32_pm_ier_t; + +typedef union +{ + unsigned long idr; + avr32_pm_idr_t IDR; +} u_avr32_pm_idr_t; + +typedef union +{ + unsigned long icr; + avr32_pm_icr_t ICR; +} u_avr32_pm_icr_t; + +typedef union +{ + unsigned long gcctrl; + avr32_pm_gcctrl_t GCCTRL; +} u_avr32_pm_gcctrl_t; + +typedef union +{ + unsigned long rccr; + avr32_pm_rccr_t RCCR; +} u_avr32_pm_rccr_t; + +typedef union +{ + unsigned long bgcr; + avr32_pm_bgcr_t BGCR; +} u_avr32_pm_bgcr_t; + +typedef union +{ + unsigned long vregcr; + avr32_pm_vregcr_t VREGCR; +} u_avr32_pm_vregcr_t; + +typedef union +{ + unsigned long bod; + avr32_pm_bod_t BOD; +} u_avr32_pm_bod_t; + +//! @} + + +/*! \brief Sets the mode of the oscillator 0. + * + * \param pm Base address of the Power Manager (i.e. &AVR32_PM). + * \param mode Oscillator 0 mode (i.e. AVR32_PM_OSCCTRL0_MODE_x). + */ +static void pm_set_osc0_mode(volatile avr32_pm_t *pm, unsigned int mode) +{ + // Read + u_avr32_pm_oscctrl0_t u_avr32_pm_oscctrl0 = {pm->oscctrl0}; + // Modify + u_avr32_pm_oscctrl0.OSCCTRL0.mode = mode; + // Write + pm->oscctrl0 = u_avr32_pm_oscctrl0.oscctrl0; +} + + +void pm_enable_osc0_ext_clock(volatile avr32_pm_t *pm) +{ + pm_set_osc0_mode(pm, AVR32_PM_OSCCTRL0_MODE_EXT_CLOCK); +} + + +void pm_enable_osc0_crystal(volatile avr32_pm_t *pm, unsigned int fosc0) +{ + pm_set_osc0_mode(pm, (fosc0 < 900000) ? AVR32_PM_OSCCTRL0_MODE_CRYSTAL_G0 : + (fosc0 < 3000000) ? AVR32_PM_OSCCTRL0_MODE_CRYSTAL_G1 : + (fosc0 < 8000000) ? AVR32_PM_OSCCTRL0_MODE_CRYSTAL_G2 : + AVR32_PM_OSCCTRL0_MODE_CRYSTAL_G3); +} + + +void pm_enable_clk0(volatile avr32_pm_t *pm, unsigned int startup) +{ + pm_enable_clk0_no_wait(pm, startup); + pm_wait_for_clk0_ready(pm); +} + + +void pm_disable_clk0(volatile avr32_pm_t *pm) +{ + pm->mcctrl &= ~AVR32_PM_MCCTRL_OSC0EN_MASK; +} + + +void pm_enable_clk0_no_wait(volatile avr32_pm_t *pm, unsigned int startup) +{ + // Read register + u_avr32_pm_oscctrl0_t u_avr32_pm_oscctrl0 = {pm->oscctrl0}; + // Modify + u_avr32_pm_oscctrl0.OSCCTRL0.startup = startup; + // Write back + pm->oscctrl0 = u_avr32_pm_oscctrl0.oscctrl0; + + pm->mcctrl |= AVR32_PM_MCCTRL_OSC0EN_MASK; +} + + +void pm_wait_for_clk0_ready(volatile avr32_pm_t *pm) +{ + while (!(pm->poscsr & AVR32_PM_POSCSR_OSC0RDY_MASK)); +} + + +/*! \brief Sets the mode of the oscillator 1. + * + * \param pm Base address of the Power Manager (i.e. &AVR32_PM). + * \param mode Oscillator 1 mode (i.e. AVR32_PM_OSCCTRL1_MODE_x). + */ +static void pm_set_osc1_mode(volatile avr32_pm_t *pm, unsigned int mode) +{ + // Read + u_avr32_pm_oscctrl1_t u_avr32_pm_oscctrl1 = {pm->oscctrl1}; + // Modify + u_avr32_pm_oscctrl1.OSCCTRL1.mode = mode; + // Write + pm->oscctrl1 = u_avr32_pm_oscctrl1.oscctrl1; +} + + +void pm_enable_osc1_ext_clock(volatile avr32_pm_t *pm) +{ + pm_set_osc1_mode(pm, AVR32_PM_OSCCTRL1_MODE_EXT_CLOCK); +} + + +void pm_enable_osc1_crystal(volatile avr32_pm_t *pm, unsigned int fosc1) +{ + pm_set_osc1_mode(pm, (fosc1 < 900000) ? AVR32_PM_OSCCTRL1_MODE_CRYSTAL_G0 : + (fosc1 < 3000000) ? AVR32_PM_OSCCTRL1_MODE_CRYSTAL_G1 : + (fosc1 < 8000000) ? AVR32_PM_OSCCTRL1_MODE_CRYSTAL_G2 : + AVR32_PM_OSCCTRL1_MODE_CRYSTAL_G3); +} + + +void pm_enable_clk1(volatile avr32_pm_t *pm, unsigned int startup) +{ + pm_enable_clk1_no_wait(pm, startup); + pm_wait_for_clk1_ready(pm); +} + + +void pm_disable_clk1(volatile avr32_pm_t *pm) +{ + pm->mcctrl &= ~AVR32_PM_MCCTRL_OSC1EN_MASK; +} + + +void pm_enable_clk1_no_wait(volatile avr32_pm_t *pm, unsigned int startup) +{ + // Read register + u_avr32_pm_oscctrl1_t u_avr32_pm_oscctrl1 = {pm->oscctrl1}; + // Modify + u_avr32_pm_oscctrl1.OSCCTRL1.startup = startup; + // Write back + pm->oscctrl1 = u_avr32_pm_oscctrl1.oscctrl1; + + pm->mcctrl |= AVR32_PM_MCCTRL_OSC1EN_MASK; +} + + +void pm_wait_for_clk1_ready(volatile avr32_pm_t *pm) +{ + while (!(pm->poscsr & AVR32_PM_POSCSR_OSC1RDY_MASK)); +} + + +/*! \brief Sets the mode of the 32-kHz oscillator. + * + * \param pm Base address of the Power Manager (i.e. &AVR32_PM). + * \param mode 32-kHz oscillator mode (i.e. AVR32_PM_OSCCTRL32_MODE_x). + */ +static void pm_set_osc32_mode(volatile avr32_pm_t *pm, unsigned int mode) +{ + // Read + u_avr32_pm_oscctrl32_t u_avr32_pm_oscctrl32 = {pm->oscctrl32}; + // Modify + u_avr32_pm_oscctrl32.OSCCTRL32.mode = mode; + // Write + pm->oscctrl32 = u_avr32_pm_oscctrl32.oscctrl32; +} + + +void pm_enable_osc32_ext_clock(volatile avr32_pm_t *pm) +{ + pm_set_osc32_mode(pm, AVR32_PM_OSCCTRL32_MODE_EXT_CLOCK); +} + + +void pm_enable_osc32_crystal(volatile avr32_pm_t *pm) +{ + pm_set_osc32_mode(pm, AVR32_PM_OSCCTRL32_MODE_CRYSTAL); +} + + +void pm_enable_clk32(volatile avr32_pm_t *pm, unsigned int startup) +{ + pm_enable_clk32_no_wait(pm, startup); + pm_wait_for_clk32_ready(pm); +} + + +void pm_disable_clk32(volatile avr32_pm_t *pm) +{ + pm->oscctrl32 &= ~AVR32_PM_OSCCTRL32_OSC32EN_MASK; +} + + +void pm_enable_clk32_no_wait(volatile avr32_pm_t *pm, unsigned int startup) +{ + // Read register + u_avr32_pm_oscctrl32_t u_avr32_pm_oscctrl32 = {pm->oscctrl32}; + // Modify + u_avr32_pm_oscctrl32.OSCCTRL32.osc32en = 1; + u_avr32_pm_oscctrl32.OSCCTRL32.startup = startup; + // Write back + pm->oscctrl32 = u_avr32_pm_oscctrl32.oscctrl32; +} + + +void pm_wait_for_clk32_ready(volatile avr32_pm_t *pm) +{ + while (!(pm->poscsr & AVR32_PM_POSCSR_OSC32RDY_MASK)); +} + + +void pm_cksel(volatile avr32_pm_t *pm, + unsigned int pbadiv, + unsigned int pbasel, + unsigned int pbbdiv, + unsigned int pbbsel, + unsigned int hsbdiv, + unsigned int hsbsel) +{ + u_avr32_pm_cksel_t u_avr32_pm_cksel = {0}; + + u_avr32_pm_cksel.CKSEL.cpusel = hsbsel; + u_avr32_pm_cksel.CKSEL.cpudiv = hsbdiv; + u_avr32_pm_cksel.CKSEL.hsbsel = hsbsel; + u_avr32_pm_cksel.CKSEL.hsbdiv = hsbdiv; + u_avr32_pm_cksel.CKSEL.pbasel = pbasel; + u_avr32_pm_cksel.CKSEL.pbadiv = pbadiv; + u_avr32_pm_cksel.CKSEL.pbbsel = pbbsel; + u_avr32_pm_cksel.CKSEL.pbbdiv = pbbdiv; + + pm->cksel = u_avr32_pm_cksel.cksel; + + // Wait for ckrdy bit and then clear it + while (!(pm->poscsr & AVR32_PM_POSCSR_CKRDY_MASK)); +} + + +void pm_gc_setup(volatile avr32_pm_t *pm, + unsigned int gc, + unsigned int osc_or_pll, // Use Osc (=0) or PLL (=1) + unsigned int pll_osc, // Sel Osc0/PLL0 or Osc1/PLL1 + unsigned int diven, + unsigned int div) +{ + u_avr32_pm_gcctrl_t u_avr32_pm_gcctrl = {0}; + + u_avr32_pm_gcctrl.GCCTRL.oscsel = pll_osc; + u_avr32_pm_gcctrl.GCCTRL.pllsel = osc_or_pll; + u_avr32_pm_gcctrl.GCCTRL.diven = diven; + u_avr32_pm_gcctrl.GCCTRL.div = div; + + pm->gcctrl[gc] = u_avr32_pm_gcctrl.gcctrl; +} + + +void pm_gc_enable(volatile avr32_pm_t *pm, + unsigned int gc) +{ + pm->gcctrl[gc] |= AVR32_PM_GCCTRL_CEN_MASK; +} + + +void pm_gc_disable(volatile avr32_pm_t *pm, + unsigned int gc) +{ + pm->gcctrl[gc] &= ~AVR32_PM_GCCTRL_CEN_MASK; +} + + +void pm_pll_setup(volatile avr32_pm_t *pm, + unsigned int pll, + unsigned int mul, + unsigned int div, + unsigned int osc, + unsigned int lockcount) +{ + u_avr32_pm_pll_t u_avr32_pm_pll = {0}; + + u_avr32_pm_pll.PLL.pllosc = osc; + u_avr32_pm_pll.PLL.plldiv = div; + u_avr32_pm_pll.PLL.pllmul = mul; + u_avr32_pm_pll.PLL.pllcount = lockcount; + + pm->pll[pll] = u_avr32_pm_pll.pll; +} + + +void pm_pll_set_option(volatile avr32_pm_t *pm, + unsigned int pll, + unsigned int pll_freq, + unsigned int pll_div2, + unsigned int pll_wbwdisable) +{ + u_avr32_pm_pll_t u_avr32_pm_pll = {pm->pll[pll]}; + u_avr32_pm_pll.PLL.pllopt = pll_freq | (pll_div2 << 1) | (pll_wbwdisable << 2); + pm->pll[pll] = u_avr32_pm_pll.pll; +} + + +unsigned int pm_pll_get_option(volatile avr32_pm_t *pm, + unsigned int pll) +{ + return (pm->pll[pll] & AVR32_PM_PLLOPT_MASK) >> AVR32_PM_PLLOPT_OFFSET; +} + + +void pm_pll_enable(volatile avr32_pm_t *pm, + unsigned int pll) +{ + pm->pll[pll] |= AVR32_PM_PLLEN_MASK; +} + + +void pm_pll_disable(volatile avr32_pm_t *pm, + unsigned int pll) +{ + pm->pll[pll] &= ~AVR32_PM_PLLEN_MASK; +} + + +void pm_wait_for_pll0_locked(volatile avr32_pm_t *pm) +{ + while (!(pm->poscsr & AVR32_PM_POSCSR_LOCK0_MASK)); +} + + +void pm_wait_for_pll1_locked(volatile avr32_pm_t *pm) +{ + while (!(pm->poscsr & AVR32_PM_POSCSR_LOCK1_MASK)); +} + + +void pm_switch_to_clock(volatile avr32_pm_t *pm, unsigned long clock) +{ + // Read + u_avr32_pm_mcctrl_t u_avr32_pm_mcctrl = {pm->mcctrl}; + // Modify + u_avr32_pm_mcctrl.MCCTRL.mcsel = clock; + // Write back + pm->mcctrl = u_avr32_pm_mcctrl.mcctrl; +} + + +void pm_switch_to_osc0(volatile avr32_pm_t *pm, unsigned int fosc0, unsigned int startup) +{ + pm_enable_osc0_crystal(pm, fosc0); // Enable the Osc0 in crystal mode + pm_enable_clk0(pm, startup); // Crystal startup time - This parameter is critical and depends on the characteristics of the crystal + pm_switch_to_clock(pm, AVR32_PM_MCSEL_OSC0); // Then switch main clock to Osc0 +} + + +void pm_bod_enable_irq(volatile avr32_pm_t *pm) +{ + pm->ier = AVR32_PM_IER_BODDET_MASK; +} + + +void pm_bod_disable_irq(volatile avr32_pm_t *pm) +{ + Bool global_interrupt_enabled = Is_global_interrupt_enabled(); + + if (global_interrupt_enabled) Disable_global_interrupt(); + pm->idr = AVR32_PM_IDR_BODDET_MASK; + pm->isr; + if (global_interrupt_enabled) Enable_global_interrupt(); +} + + +void pm_bod_clear_irq(volatile avr32_pm_t *pm) +{ + pm->icr = AVR32_PM_ICR_BODDET_MASK; +} + + +unsigned long pm_bod_get_irq_status(volatile avr32_pm_t *pm) +{ + return ((pm->isr & AVR32_PM_ISR_BODDET_MASK) != 0); +} + + +unsigned long pm_bod_get_irq_enable_bit(volatile avr32_pm_t *pm) +{ + return ((pm->imr & AVR32_PM_IMR_BODDET_MASK) != 0); +} + + +unsigned long pm_bod_get_level(volatile avr32_pm_t *pm) +{ + return (pm->bod & AVR32_PM_BOD_LEVEL_MASK) >> AVR32_PM_BOD_LEVEL_OFFSET; +} + + +unsigned long pm_read_gplp(volatile avr32_pm_t *pm, unsigned long gplp) +{ + return pm->gplp[gplp]; +} + + +void pm_write_gplp(volatile avr32_pm_t *pm, unsigned long gplp, unsigned long value) +{ + pm->gplp[gplp] = value; +} + + +long pm_enable_module(volatile avr32_pm_t *pm, unsigned long module) +{ + unsigned long domain = module>>5; + unsigned long *regptr = (unsigned long*)(&(pm->cpumask) + domain); + + // Implementation-specific shortcut: the ckMASK registers are contiguous and + // memory-mapped in that order: CPUMASK, HSBMASK, PBAMASK, PBBMASK. + + *regptr |= (1<<(module%32)); + + return PASS; +} + +long pm_disable_module(volatile avr32_pm_t *pm, unsigned long module) +{ + unsigned long domain = module>>5; + unsigned long *regptr = (unsigned long*)(&(pm->cpumask) + domain); + + // Implementation-specific shortcut: the ckMASK registers are contiguous and + // memory-mapped in that order: CPUMASK, HSBMASK, PBAMASK, PBBMASK. + + *regptr &= ~(1<<(module%32)); + + return PASS; +} diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/pm.h b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/pm.h new file mode 100644 index 000000000..ca679f734 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/pm.h @@ -0,0 +1,493 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file has been prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Power Manager driver. + * + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + *****************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _PM_H_ +#define _PM_H_ + +#include +#include "compiler.h" +#include "preprocessor.h" + + +/*! \brief Sets the MCU in the specified sleep mode. + * + * \param mode Sleep mode: + * \arg \c AVR32_PM_SMODE_IDLE: Idle; + * \arg \c AVR32_PM_SMODE_FROZEN: Frozen; + * \arg \c AVR32_PM_SMODE_STANDBY: Standby; + * \arg \c AVR32_PM_SMODE_STOP: Stop; + * \arg \c AVR32_PM_SMODE_DEEP_STOP: DeepStop; + * \arg \c AVR32_PM_SMODE_STATIC: Static. + */ +#define SLEEP(mode) {__asm__ __volatile__ ("sleep "STRINGZ(mode));} + + +//! Input and output parameters when initializing PM clocks using pm_configure_clocks(). +typedef struct +{ + //! CPU frequency (input/output argument). + unsigned long cpu_f; + + //! PBA frequency (input/output argument). + unsigned long pba_f; + + //! Oscillator 0's external crystal(or external clock) frequency (board dependant) (input argument). + unsigned long osc0_f; + + //! Oscillator 0's external crystal(or external clock) startup time: AVR32_PM_OSCCTRL0_STARTUP_x_RCOSC (input argument). + unsigned long osc0_startup; +} pm_freq_param_t; + +#define PM_FREQ_STATUS_FAIL (-1) +#define PM_FREQ_STATUS_OK (0) + + +/*! \brief Gets the MCU reset cause. + * + * \param pm Base address of the Power Manager instance (i.e. &AVR32_PM). + * + * \return The MCU reset cause which can be masked with the + * \c AVR32_PM_RCAUSE_x_MASK bit-masks to isolate specific causes. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ unsigned int pm_get_reset_cause(volatile avr32_pm_t *pm) +{ + return pm->rcause; +} + + +/*! + * \brief This function will enable the external clock mode of the oscillator 0. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + */ +extern void pm_enable_osc0_ext_clock(volatile avr32_pm_t *pm); + + +/*! + * \brief This function will enable the crystal mode of the oscillator 0. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param fosc0 Oscillator 0 crystal frequency (Hz) + */ +extern void pm_enable_osc0_crystal(volatile avr32_pm_t *pm, unsigned int fosc0); + + +/*! + * \brief This function will enable the oscillator 0 to be used with a startup time. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param startup Clock 0 startup time. AVR32_PM_OSCCTRL0_STARTUP_x_RCOSC. + */ +extern void pm_enable_clk0(volatile avr32_pm_t *pm, unsigned int startup); + + +/*! + * \brief This function will disable the oscillator 0. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + */ +extern void pm_disable_clk0(volatile avr32_pm_t *pm); + + +/*! + * \brief This function will enable the oscillator 0 to be used with no startup time. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param startup Clock 0 startup time, for which the function does not wait. AVR32_PM_OSCCTRL0_STARTUP_x_RCOSC. + */ +extern void pm_enable_clk0_no_wait(volatile avr32_pm_t *pm, unsigned int startup); + + +/*! + * \brief This function will wait until the Osc0 clock is ready. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + */ +extern void pm_wait_for_clk0_ready(volatile avr32_pm_t *pm); + + +/*! + * \brief This function will enable the external clock mode of the oscillator 1. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + */ +extern void pm_enable_osc1_ext_clock(volatile avr32_pm_t *pm); + + +/*! + * \brief This function will enable the crystal mode of the oscillator 1. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param fosc1 Oscillator 1 crystal frequency (Hz) + */ +extern void pm_enable_osc1_crystal(volatile avr32_pm_t *pm, unsigned int fosc1); + + +/*! + * \brief This function will enable the oscillator 1 to be used with a startup time. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param startup Clock 1 startup time. AVR32_PM_OSCCTRL1_STARTUP_x_RCOSC. + */ +extern void pm_enable_clk1(volatile avr32_pm_t *pm, unsigned int startup); + + +/*! + * \brief This function will disable the oscillator 1. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + */ +extern void pm_disable_clk1(volatile avr32_pm_t *pm); + + +/*! + * \brief This function will enable the oscillator 1 to be used with no startup time. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param startup Clock 1 startup time, for which the function does not wait. AVR32_PM_OSCCTRL1_STARTUP_x_RCOSC. + */ +extern void pm_enable_clk1_no_wait(volatile avr32_pm_t *pm, unsigned int startup); + + +/*! + * \brief This function will wait until the Osc1 clock is ready. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + */ +extern void pm_wait_for_clk1_ready(volatile avr32_pm_t *pm); + + +/*! + * \brief This function will enable the external clock mode of the 32-kHz oscillator. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + */ +extern void pm_enable_osc32_ext_clock(volatile avr32_pm_t *pm); + + +/*! + * \brief This function will enable the crystal mode of the 32-kHz oscillator. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + */ +extern void pm_enable_osc32_crystal(volatile avr32_pm_t *pm); + + +/*! + * \brief This function will enable the oscillator 32 to be used with a startup time. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param startup Clock 32 kHz startup time. AVR32_PM_OSCCTRL32_STARTUP_x_RCOSC. + */ +extern void pm_enable_clk32(volatile avr32_pm_t *pm, unsigned int startup); + + +/*! + * \brief This function will disable the oscillator 32. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + */ +extern void pm_disable_clk32(volatile avr32_pm_t *pm); + + +/*! + * \brief This function will enable the oscillator 32 to be used with no startup time. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param startup Clock 32 kHz startup time, for which the function does not wait. AVR32_PM_OSCCTRL32_STARTUP_x_RCOSC. + */ +extern void pm_enable_clk32_no_wait(volatile avr32_pm_t *pm, unsigned int startup); + + +/*! + * \brief This function will wait until the osc32 clock is ready. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + */ +extern void pm_wait_for_clk32_ready(volatile avr32_pm_t *pm); + + +/*! + * \brief This function will select all the power manager clocks. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param pbadiv Peripheral Bus A clock divisor enable + * \param pbasel Peripheral Bus A select + * \param pbbdiv Peripheral Bus B clock divisor enable + * \param pbbsel Peripheral Bus B select + * \param hsbdiv High Speed Bus clock divisor enable (CPU clock = HSB clock) + * \param hsbsel High Speed Bus select (CPU clock = HSB clock ) + */ +extern void pm_cksel(volatile avr32_pm_t *pm, unsigned int pbadiv, unsigned int pbasel, unsigned int pbbdiv, unsigned int pbbsel, unsigned int hsbdiv, unsigned int hsbsel); + + +/*! + * \brief This function will setup a generic clock. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param gc generic clock number (0 for gc0...) + * \param osc_or_pll Use OSC (=0) or PLL (=1) + * \param pll_osc Select Osc0/PLL0 or Osc1/PLL1 + * \param diven Generic clock divisor enable + * \param div Generic clock divisor + */ +extern void pm_gc_setup(volatile avr32_pm_t *pm, unsigned int gc, unsigned int osc_or_pll, unsigned int pll_osc, unsigned int diven, unsigned int div); + + +/*! + * \brief This function will enable a generic clock. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param gc generic clock number (0 for gc0...) + */ +extern void pm_gc_enable(volatile avr32_pm_t *pm, unsigned int gc); + + +/*! + * \brief This function will disable a generic clock. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param gc generic clock number (0 for gc0...) + */ +extern void pm_gc_disable(volatile avr32_pm_t *pm, unsigned int gc); + + +/*! + * \brief This function will setup a PLL. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param pll PLL number(0 for PLL0, 1 for PLL1) + * \param mul PLL MUL in the PLL formula + * \param div PLL DIV in the PLL formula + * \param osc OSC number (0 for osc0, 1 for osc1) + * \param lockcount PLL lockount + */ +extern void pm_pll_setup(volatile avr32_pm_t *pm, unsigned int pll, unsigned int mul, unsigned int div, unsigned int osc, unsigned int lockcount); + + +/*! + * \brief This function will set a PLL option. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param pll PLL number(0 for PLL0, 1 for PLL1) + * \param pll_freq Set to 1 for VCO frequency range 80-180MHz, set to 0 for VCO frequency range 160-240Mhz. + * \param pll_div2 Divide the PLL output frequency by 2 (this settings does not change the FVCO value) + * \param pll_wbwdisable 1 Disable the Wide-Bandith Mode (Wide-Bandwith mode allow a faster startup time and out-of-lock time). 0 to enable the Wide-Bandith Mode. + */ +extern void pm_pll_set_option(volatile avr32_pm_t *pm, unsigned int pll, unsigned int pll_freq, unsigned int pll_div2, unsigned int pll_wbwdisable); + + +/*! + * \brief This function will get a PLL option. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param pll PLL number(0 for PLL0, 1 for PLL1) + * \return Option + */ +extern unsigned int pm_pll_get_option(volatile avr32_pm_t *pm, unsigned int pll); + + +/*! + * \brief This function will enable a PLL. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param pll PLL number(0 for PLL0, 1 for PLL1) + */ +extern void pm_pll_enable(volatile avr32_pm_t *pm, unsigned int pll); + + +/*! + * \brief This function will disable a PLL. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param pll PLL number(0 for PLL0, 1 for PLL1) + */ +extern void pm_pll_disable(volatile avr32_pm_t *pm, unsigned int pll); + + +/*! + * \brief This function will wait for PLL0 locked + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + */ +extern void pm_wait_for_pll0_locked(volatile avr32_pm_t *pm); + + +/*! + * \brief This function will wait for PLL1 locked + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + */ +extern void pm_wait_for_pll1_locked(volatile avr32_pm_t *pm); + + +/*! + * \brief This function will switch the power manager main clock. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param clock Clock to be switched on. AVR32_PM_MCSEL_SLOW for RCOsc, AVR32_PM_MCSEL_OSC0 for Osc0, AVR32_PM_MCSEL_PLL0 for PLL0. + */ +extern void pm_switch_to_clock(volatile avr32_pm_t *pm, unsigned long clock); + + +/*! + * \brief Switch main clock to clock Osc0 (crystal mode) + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param fosc0 Oscillator 0 crystal frequency (Hz) + * \param startup Crystal 0 startup time. AVR32_PM_OSCCTRL0_STARTUP_x_RCOSC. + */ +extern void pm_switch_to_osc0(volatile avr32_pm_t *pm, unsigned int fosc0, unsigned int startup); + + +/*! \brief Enables the Brown-Out Detector interrupt. + * + * \param pm Base address of the Power Manager (i.e. &AVR32_PM). + */ +extern void pm_bod_enable_irq(volatile avr32_pm_t *pm); + + +/*! \brief Disables the Brown-Out Detector interrupt. + * + * \param pm Base address of the Power Manager (i.e. &AVR32_PM). + */ +extern void pm_bod_disable_irq(volatile avr32_pm_t *pm); + + +/*! \brief Clears the Brown-Out Detector interrupt flag. + * + * \param pm Base address of the Power Manager (i.e. &AVR32_PM). + */ +extern void pm_bod_clear_irq(volatile avr32_pm_t *pm); + + +/*! \brief Gets the Brown-Out Detector interrupt flag. + * + * \param pm Base address of the Power Manager (i.e. &AVR32_PM). + * + * \retval 0 No BOD interrupt. + * \retval 1 BOD interrupt pending. + */ +extern unsigned long pm_bod_get_irq_status(volatile avr32_pm_t *pm); + + +/*! \brief Gets the Brown-Out Detector interrupt enable status. + * + * \param pm Base address of the Power Manager (i.e. &AVR32_PM). + * + * \retval 0 BOD interrupt disabled. + * \retval 1 BOD interrupt enabled. + */ +extern unsigned long pm_bod_get_irq_enable_bit(volatile avr32_pm_t *pm); + + +/*! \brief Gets the triggering threshold of the Brown-Out Detector. + * + * \param pm Base address of the Power Manager (i.e. &AVR32_PM). + * + * \return Triggering threshold of the BOD. See the electrical characteristics + * in the part datasheet for actual voltage levels. + */ +extern unsigned long pm_bod_get_level(volatile avr32_pm_t *pm); + + +/*! + * \brief Read the content of the PM GPLP registers + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param gplp GPLP register index (0,1,... depending on the number of GPLP registers for a given part) + * + * \return The content of the chosen GPLP register. + */ +extern unsigned long pm_read_gplp(volatile avr32_pm_t *pm, unsigned long gplp); + + +/*! + * \brief Write into the PM GPLP registers + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param gplp GPLP register index (0,1,... depending on the number of GPLP registers for a given part) + * \param value Value to write + */ +extern void pm_write_gplp(volatile avr32_pm_t *pm, unsigned long gplp, unsigned long value); + + +/*! \brief Enable the clock of a module. + * + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param module The module to clock (use one of the defines in the part-specific + * header file under "toolchain folder"/avr32/inc(lude)/avr32/; depending on the + * clock domain, look for the sections "CPU clocks", "HSB clocks", "PBx clocks") + * + * \return Status. + * \retval 0 Success. + * \retval <0 An error occured. + */ +extern long pm_enable_module(volatile avr32_pm_t *pm, unsigned long module); + +/*! \brief Disable the clock of a module. + * + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param module The module to shut down (use one of the defines in the part-specific + * header file under "toolchain folder"/avr32/inc(lude)/avr32/; depending on the + * clock domain, look for the sections "CPU clocks", "HSB clocks", "PBx clocks") + * + * \return Status. + * \retval 0 Success. + * \retval <0 An error occured. + */ +extern long pm_disable_module(volatile avr32_pm_t *pm, unsigned long module); + + + +/*! \brief Automatically configure the CPU, PBA, PBB, and HSB clocks + * according to the user wishes. + * + * This function needs some parameters stored in a pm_freq_param_t structure: + * - cpu_f and pba_f are the wanted frequencies, + * - osc0_f is the oscillator 0 on-board frequency (e.g. FOSC0), + * - osc0_startup is the oscillator 0 startup time (e.g. OSC0_STARTUP). + * + * The function will then configure the clocks using the following rules: + * - It first try to find a valid PLL frequency (the highest possible value to avoid jitter) in order + * to satisfy the CPU frequency, + * - It optimizes the configuration depending the various divide stages, + * - Then, the PBA frequency is configured from the CPU freq. + * - Note that HSB and PBB are configured with the same frequency as CPU. + * - Note also that the number of wait states of the flash read accesses is automatically set-up depending + * the CPU frequency. As a consequence, the application needs the FLASHC driver to compile. + * + * The CPU, HSB and PBA frequencies programmed after configuration are stored back into cpu_f and pba_f. + * + * \param param pointer on the configuration structure. + * + * \retval PM_FREQ_STATUS_OK Mode successfully initialized. + * \retval PM_FREQ_STATUS_FAIL The configuration can not be done. + */ +extern int pm_configure_clocks(pm_freq_param_t *param); + + +/*! \brief Automatically configure the USB clock. + * + * USB clock is configured to 48MHz, using the PLL1 from the Oscillator0, assuming + * a 12 MHz crystal is connected to it. + */ +extern void pm_configure_usb_clock(void); + + +#endif // _PM_H_ diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/pm_conf_clocks.c b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/pm_conf_clocks.c new file mode 100644 index 000000000..8beb83b20 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/pm_conf_clocks.c @@ -0,0 +1,268 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file has been prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Power Manager clocks configuration helper. + * + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + *****************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#include +#include "compiler.h" +#include "pm.h" + +extern void flashc_set_wait_state(unsigned int wait_state); +#if (defined AVR32_FLASHC_210_H_INCLUDED) +extern void flashc_issue_command(unsigned int command, int page_number); +#endif + + +#define PM_MAX_MUL ((1 << AVR32_PM_PLL0_PLLMUL_SIZE) - 1) + + +int pm_configure_clocks(pm_freq_param_t *param) +{ + // Supported frequencies: + // Fosc0 mul div PLL div2_en cpu_f pba_f Comment + // 12 15 1 192 1 12 12 + // 12 9 3 40 1 20 20 PLL out of spec + // 12 15 1 192 1 24 12 + // 12 9 1 120 1 30 15 + // 12 9 3 40 0 40 20 PLL out of spec + // 12 15 1 192 1 48 12 + // 12 15 1 192 1 48 24 + // 12 8 1 108 1 54 27 + // 12 9 1 120 1 60 15 + // 12 9 1 120 1 60 30 + // 12 10 1 132 1 66 16.5 + // + unsigned long in_cpu_f = param->cpu_f; + unsigned long in_osc0_f = param->osc0_f; + unsigned long mul, div, div2_en = 0, div2_cpu = 0, div2_pba = 0; + unsigned long pll_freq, rest; + Bool b_div2_pba, b_div2_cpu; + + // Switch to external Oscillator 0 + pm_switch_to_osc0(&AVR32_PM, in_osc0_f, param->osc0_startup); + + // Start with CPU freq config + if (in_cpu_f == in_osc0_f) + { + param->cpu_f = in_osc0_f; + param->pba_f = in_osc0_f; + return PM_FREQ_STATUS_OK; + } + else if (in_cpu_f < in_osc0_f) + { + // TBD + } + + rest = in_cpu_f % in_osc0_f; + + for (div = 1; div < 32; div++) + { + if ((div * rest) % in_osc0_f == 0) + break; + } + if (div == 32) + return PM_FREQ_STATUS_FAIL; + + mul = (in_cpu_f * div) / in_osc0_f; + + if (mul > PM_MAX_MUL) + return PM_FREQ_STATUS_FAIL; + + // export 2power from PLL div to div2_cpu + while (!(div % 2)) + { + div /= 2; + div2_cpu++; + } + + // Here we know the mul and div parameter of the PLL config. + // . Check out if the PLL has a valid in_cpu_f. + // . Try to have for the PLL frequency (VCO output) the highest possible value + // to reduce jitter. + while (in_osc0_f * 2 * mul / div < AVR32_PM_PLL_VCO_RANGE0_MAX_FREQ) + { + if (2 * mul > PM_MAX_MUL) + break; + mul *= 2; + div2_cpu++; + } + + if (div2_cpu != 0) + { + div2_cpu--; + div2_en = 1; + } + + pll_freq = in_osc0_f * mul / (div * (1 << div2_en)); + + // Update real CPU Frequency + param->cpu_f = pll_freq / (1 << div2_cpu); + mul--; + + pm_pll_setup(&AVR32_PM + , 0 // pll + , mul // mul + , div // div + , 0 // osc + , 16 // lockcount + ); + + pm_pll_set_option(&AVR32_PM + , 0 // pll + // PLL clock is lower than 160MHz: need to set pllopt. + , (pll_freq < AVR32_PM_PLL_VCO_RANGE0_MIN_FREQ) ? 1 : 0 // pll_freq + , div2_en // pll_div2 + , 0 // pll_wbwdisable + ); + + rest = pll_freq; + while (rest > AVR32_PM_PBA_MAX_FREQ || + rest != param->pba_f) + { + div2_pba++; + rest = pll_freq / (1 << div2_pba); + if (rest < param->pba_f) + break; + } + + // Update real PBA Frequency + param->pba_f = pll_freq / (1 << div2_pba); + + // Enable PLL0 + pm_pll_enable(&AVR32_PM, 0); + + // Wait for PLL0 locked + pm_wait_for_pll0_locked(&AVR32_PM); + + if (div2_cpu) + { + b_div2_cpu = TRUE; + div2_cpu--; + } + else + b_div2_cpu = FALSE; + + if (div2_pba) + { + b_div2_pba = TRUE; + div2_pba--; + } + else + b_div2_pba = FALSE; + + pm_cksel(&AVR32_PM + , b_div2_pba, div2_pba // PBA + , b_div2_cpu, div2_cpu // PBB + , b_div2_cpu, div2_cpu // HSB + ); + + if (param->cpu_f > AVR32_FLASHC_FWS_0_MAX_FREQ) + { + flashc_set_wait_state(1); +#if (defined AVR32_FLASHC_210_H_INCLUDED) + if (param->cpu_f > AVR32_FLASHC_HSEN_FWS_1_MAX_FREQ) + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_HSEN, -1); + else + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_HSDIS, -1); +#endif + } + else + { + flashc_set_wait_state(0); +#if (defined AVR32_FLASHC_210_H_INCLUDED) + if (param->cpu_f > AVR32_FLASHC_HSEN_FWS_0_MAX_FREQ) + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_HSEN, -1); + else + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_HSDIS, -1); +#endif + } + + pm_switch_to_clock(&AVR32_PM, AVR32_PM_MCCTRL_MCSEL_PLL0); + + return PM_FREQ_STATUS_OK; +} + + +void pm_configure_usb_clock(void) +{ +#if UC3A3 + + // Setup USB GCLK. + pm_gc_setup(&AVR32_PM, AVR32_PM_GCLK_USBB, // gc + 0, // osc_or_pll: use Osc (if 0) or PLL (if 1) + 0, // pll_osc: select Osc0/PLL0 or Osc1/PLL1 + 0, // diven + 0); // div + + // Enable USB GCLK. + pm_gc_enable(&AVR32_PM, AVR32_PM_GCLK_USBB); +#else + // Use 12MHz from OSC0 and generate 96 MHz + pm_pll_setup(&AVR32_PM, 1, // pll. + 7, // mul. + 1, // div. + 0, // osc. + 16); // lockcount. + + pm_pll_set_option(&AVR32_PM, 1, // pll. + 1, // pll_freq: choose the range 80-180MHz. + 1, // pll_div2. + 0); // pll_wbwdisable. + + // start PLL1 and wait forl lock + pm_pll_enable(&AVR32_PM, 1); + + // Wait for PLL1 locked. + pm_wait_for_pll1_locked(&AVR32_PM); + + pm_gc_setup(&AVR32_PM, AVR32_PM_GCLK_USBB, // gc. + 1, // osc_or_pll: use Osc (if 0) or PLL (if 1). + 1, // pll_osc: select Osc0/PLL0 or Osc1/PLL1. + 0, // diven. + 0); // div. + pm_gc_enable(&AVR32_PM, AVR32_PM_GCLK_USBB); +#endif +} diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/power_clocks_lib.c b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/power_clocks_lib.c new file mode 100644 index 000000000..f5fc1553d --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/power_clocks_lib.c @@ -0,0 +1,566 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file has been prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief High-level library abstracting features such as oscillators/pll/dfll + * configuration, clock configuration, System-sensible parameters + * configuration, buses clocks configuration, sleep mode, reset. + * + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + *****************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ +#include "power_clocks_lib.h" + + +//! Device-specific data +#if UC3L +static long int pcl_configure_clocks_uc3l(pcl_freq_param_t *param); // FORWARD declaration +#endif + +#if UC3C +static long int pcl_configure_clocks_uc3c(pcl_freq_param_t *param); // FORWARD declaration +#endif + +long int pcl_configure_clocks(pcl_freq_param_t *param) +{ +#ifndef AVR32_PM_VERSION_RESETVALUE + // Implementation for UC3A, UC3A3, UC3B parts. + return(pm_configure_clocks(param)); +#else + #ifdef AVR32_PM_410_H_INCLUDED + // Implementation for UC3C parts. + return(pcl_configure_clocks_uc3c(param)); + #else + // Implementation for UC3L parts. + return(pcl_configure_clocks_uc3l(param)); + #endif +#endif +} + + +//! Device-specific implementation +#if UC3L +// FORWARD declaration +static long int pcl_configure_synchronous_clocks( pm_clk_src_t main_clk_src, + unsigned long main_clock_freq_hz, + pcl_freq_param_t *param); + +long int pcl_configure_clocks_rcsys(pcl_freq_param_t *param) +{ + // Supported main clock sources: PCL_MC_RCSYS + + // Supported synchronous clocks frequencies if RCSYS is the main clock source: + // 115200Hz, 57600Hz, 28800Hz, 14400Hz, 7200Hz, 3600Hz, 1800Hz, 900Hz, 450Hz. + + // NOTE: by default, this implementation doesn't perform thorough checks on the + // input parameters. To enable the checks, define AVR32SFW_INPUT_CHECK. + +#ifdef AVR32SFW_INPUT_CHECK + // Verify that fCPU >= fPBx + if((param->cpu_f < param->pba_f) || (param->cpu_f < param->pbb_f)) + return(-1); +#endif + +#ifdef AVR32SFW_INPUT_CHECK + // Verify that the target frequencies are reachable. + if((param->cpu_f > SCIF_SLOWCLOCK_FREQ_HZ) || (param->pba_f > SCIF_SLOWCLOCK_FREQ_HZ) + || (param->pbb_f > SCIF_SLOWCLOCK_FREQ_HZ)) + return(-1); +#endif + + return(pcl_configure_synchronous_clocks(PM_CLK_SRC_SLOW, SCIF_SLOWCLOCK_FREQ_HZ, param)); +} + + +long int pcl_configure_clocks_rc120m(pcl_freq_param_t *param) +{ + // Supported main clock sources: PCL_MC_RC120M + + // Supported synchronous clocks frequencies if RC120M is the main clock source: + // 30MHz, 15MHz, 7.5MHz, 3.75MHz, 1.875MHz, 937.5kHz, 468.75kHz. + + // NOTE: by default, this implementation doesn't perform thorough checks on the + // input parameters. To enable the checks, define AVR32SFW_INPUT_CHECK. + +#ifdef AVR32SFW_INPUT_CHECK + // Verify that fCPU >= fPBx + if((param->cpu_f < param->pba_f) || (param->cpu_f < param->pbb_f)) + return(-1); +#endif + +#ifdef AVR32SFW_INPUT_CHECK + // Verify that the target frequencies are reachable. + if((param->cpu_f > SCIF_RC120M_FREQ_HZ) || (param->pba_f > SCIF_RC120M_FREQ_HZ) + || (param->pbb_f > SCIF_RC120M_FREQ_HZ)) + return(-1); +#endif + + // Start the 120MHz internal RCosc (RC120M) clock + scif_start_rc120M(); + + return(pcl_configure_synchronous_clocks(PM_CLK_SRC_RC120M, SCIF_RC120M_FREQ_HZ, param)); +} + + +long int pcl_configure_clocks_osc0(pcl_freq_param_t *param) +{ + // Supported main clock sources: PCL_MC_OSC0 + + // Supported synchronous clocks frequencies if OSC0 is the main clock source: + // (these obviously depend on the OSC0 frequency; we'll take 16MHz as an example) + // 16MHz, 8MHz, 4MHz, 2MHz, 1MHz, 500kHz, 250kHz, 125kHz, 62.5kHz. + + // NOTE: by default, this implementation doesn't perform thorough checks on the + // input parameters. To enable the checks, define AVR32SFW_INPUT_CHECK. + + unsigned long main_clock_freq; + + +#ifdef AVR32SFW_INPUT_CHECK + // Verify that fCPU >= fPBx + if((param->cpu_f < param->pba_f) || (param->cpu_f < param->pbb_f)) + return(-1); +#endif + + main_clock_freq = param->osc0_f; +#ifdef AVR32SFW_INPUT_CHECK + // Verify that the target frequencies are reachable. + if((param->cpu_f > main_clock_freq) || (param->pba_f > main_clock_freq) + || (param->pbb_f > main_clock_freq)) + return(-1); +#endif + // Configure OSC0 in crystal mode, external crystal with a fcrystal Hz frequency. + scif_configure_osc_crystalmode(SCIF_OSC0, main_clock_freq); + // Enable the OSC0 + scif_enable_osc(SCIF_OSC0, param->osc0_startup, true); + + return(pcl_configure_synchronous_clocks(PM_CLK_SRC_OSC0, main_clock_freq, param)); +} + + +long int pcl_configure_clocks_dfll0(pcl_freq_param_t *param) +{ + // Supported main clock sources: PCL_MC_DFLL + + // Supported synchronous clocks frequencies if DFLL is the main clock source: + // (these obviously depend on the DFLL target frequency; we'll take 100MHz as an example) + // 50MHz, 25MHz, 12.5MHz, 6.25MHz, 3.125MHz, 1562.5kHz, 781.25kHz, 390.625kHz. + + // NOTE: by default, this implementation doesn't perform thorough checks on the + // input parameters. To enable the checks, define AVR32SFW_INPUT_CHECK. + + unsigned long main_clock_freq; + scif_gclk_opt_t *pgc_dfllif_ref_opt; + + +#ifdef AVR32SFW_INPUT_CHECK + // Verify that fCPU >= fPBx + if((param->cpu_f < param->pba_f) || (param->cpu_f < param->pbb_f)) + return(-1); +#endif + + main_clock_freq = param->dfll_f; +#ifdef AVR32SFW_INPUT_CHECK + // Verify that the target DFLL output frequency is in the correct range. + if((main_clock_freq > SCIF_DFLL_MAXFREQ_HZ) || (main_clock_freq < SCIF_DFLL_MINFREQ_HZ)) + return(-1); + // Verify that the target frequencies are reachable. + if((param->cpu_f > main_clock_freq) || (param->pba_f > main_clock_freq) + || (param->pbb_f > main_clock_freq)) + return(-1); +#endif + pgc_dfllif_ref_opt = (scif_gclk_opt_t *)param->pextra_params; + // Implementation note: this implementation configures the DFLL in closed-loop + // mode (because it gives the best accuracy) which enables the generic clock CLK_DFLLIF_REF + // as a reference (RCSYS being used as the generic clock source, undivided). + scif_dfll0_closedloop_configure_and_start(pgc_dfllif_ref_opt, main_clock_freq, TRUE); + + return(pcl_configure_synchronous_clocks(PM_CLK_SRC_DFLL0, main_clock_freq, param)); +} + + +static long int pcl_configure_clocks_uc3l(pcl_freq_param_t *param) +{ + // Supported main clock sources: PCL_MC_RCSYS, PCL_MC_OSC0, PCL_MC_DFLL0, PCL_MC_RC120M + + // Supported synchronous clocks frequencies if RCSYS is the main clock source: + // 115200Hz, 57600Hz, 28800Hz, 14400Hz, 7200Hz, 3600Hz, 1800Hz, 900Hz, 450Hz. + + // Supported synchronous clocks frequencies if RC120M is the main clock source: + // 30MHz, 15MHz, 7.5MHz, 3.75MHz, 1.875MHz, 937.5kHz, 468.75kHz. + + // Supported synchronous clocks frequencies if OSC0 is the main clock source: + // (these obviously depend on the OSC0 frequency; we'll take 16MHz as an example) + // 16MHz, 8MHz, 4MHz, 2MHz, 1MHz, 500kHz, 250kHz, 125kHz, 62.5kHz. + + // Supported synchronous clocks frequencies if DFLL is the main clock source: + // (these obviously depend on the DFLL target frequency; we'll take 100MHz as an example) + // 50MHz, 25MHz, 12.5MHz, 6.25MHz, 3.125MHz, 1562.5kHz, 781.25kHz, 390.625kHz. + + // NOTE: by default, this implementation doesn't perform thorough checks on the + // input parameters. To enable the checks, define AVR32SFW_INPUT_CHECK. + + +#ifdef AVR32SFW_INPUT_CHECK + // Verify that fCPU >= fPBx + if((param->cpu_f < param->pba_f) || (param->cpu_f < param->pbb_f)) + return(-1); +#endif + + if(PCL_MC_RCSYS == param->main_clk_src) + { + return(pcl_configure_clocks_rcsys(param)); + } + else if(PCL_MC_RC120M == param->main_clk_src) + { + return(pcl_configure_clocks_rc120m(param)); + } + else if(PCL_MC_OSC0 == param->main_clk_src) + { + return(pcl_configure_clocks_osc0(param)); + } + else // PCL_MC_DFLL0 == param->main_clk_src + { + return(pcl_configure_clocks_dfll0(param)); + } +} + +static long int pcl_configure_synchronous_clocks(pm_clk_src_t main_clk_src, unsigned long main_clock_freq_hz, pcl_freq_param_t *param) +{ + //# + //# Set the Synchronous clock division ratio for each clock domain + //# + pm_set_all_cksel(main_clock_freq_hz, param->cpu_f, param->pba_f, param->pbb_f); + + //# + //# Set the Flash wait state and the speed read mode (depending on the target CPU frequency). + //# +#if UC3L + flashcdw_set_flash_waitstate_and_readmode(param->cpu_f); +#elif UC3C + flashc_set_flash_waitstate_and_readmode(param->cpu_f); +#endif + + + //# + //# Switch the main clock source to the selected clock. + //# + pm_set_mclk_source(main_clk_src); + + return PASS; +} + +#endif // UC3L device-specific implementation + +//! UC3C Device-specific implementation +#if UC3C +static long int pcl_configure_clocks_uc3c(pcl_freq_param_t *param) +{ + #define PM_MAX_MUL ((1 << AVR32_SCIF_PLLMUL_SIZE) - 1) + #define AVR32_PM_PBA_MAX_FREQ 66000000 + #define AVR32_PM_PLL_VCO_RANGE0_MAX_FREQ 240000000 + #define AVR32_PM_PLL_VCO_RANGE0_MIN_FREQ 160000000 + + // Implementation for UC3C parts. + // Supported frequencies: + // Fosc0 mul div PLL div2_en cpu_f pba_f Comment + // 12 15 1 192 1 12 12 + // 12 9 3 40 1 20 20 PLL out of spec + // 12 15 1 192 1 24 12 + // 12 9 1 120 1 30 15 + // 12 9 3 40 0 40 20 PLL out of spec + // 12 15 1 192 1 48 12 + // 12 15 1 192 1 48 24 + // 12 8 1 108 1 54 27 + // 12 9 1 120 1 60 15 + // 12 9 1 120 1 60 30 + // 12 10 1 132 1 66 16.5 + // + unsigned long in_cpu_f = param->cpu_f; + unsigned long in_osc0_f = param->osc0_f; + unsigned long mul, div, div2_en = 0, div2_cpu = 0, div2_pba = 0; + unsigned long pll_freq, rest; + Bool b_div2_pba, b_div2_cpu; + + // Configure OSC0 in crystal mode, external crystal with a FOSC0 Hz frequency. + scif_configure_osc_crystalmode(SCIF_OSC0, in_osc0_f); + // Enable the OSC0 + scif_enable_osc(SCIF_OSC0, param->osc0_startup, true); + // Set the main clock source as being OSC0. + pm_set_mclk_source(PM_CLK_SRC_OSC0); + + // Start with CPU freq config + if (in_cpu_f == in_osc0_f) + { + param->cpu_f = in_osc0_f; + param->pba_f = in_osc0_f; + return PASS; + } + else if (in_cpu_f < in_osc0_f) + { + // TBD + } + + rest = in_cpu_f % in_osc0_f; + + for (div = 1; div < 32; div++) + { + if ((div * rest) % in_osc0_f == 0) + break; + } + if (div == 32) + return FAIL; + + mul = (in_cpu_f * div) / in_osc0_f; + + if (mul > PM_MAX_MUL) + return FAIL; + + // export 2power from PLL div to div2_cpu + while (!(div % 2)) + { + div /= 2; + div2_cpu++; + } + + // Here we know the mul and div parameter of the PLL config. + // . Check out if the PLL has a valid in_cpu_f. + // . Try to have for the PLL frequency (VCO output) the highest possible value + // to reduce jitter. + while (in_osc0_f * 2 * mul / div < AVR32_PM_PLL_VCO_RANGE0_MAX_FREQ) + { + if (2 * mul > PM_MAX_MUL) + break; + mul *= 2; + div2_cpu++; + } + + if (div2_cpu != 0) + { + div2_cpu--; + div2_en = 1; + } + + pll_freq = in_osc0_f * mul / (div * (1 << div2_en)); + + // Update real CPU Frequency + param->cpu_f = pll_freq / (1 << div2_cpu); + mul--; + + scif_pll_opt_t opt; + + opt.osc = SCIF_OSC0, // Sel Osc0 or Osc1 + opt.lockcount = 16, // lockcount in main clock for the PLL wait lock + opt.div = div, // DIV=1 in the formula + opt.mul = mul, // MUL=7 in the formula + opt.pll_div2 = div2_en, // pll_div2 Divide the PLL output frequency by 2 (this settings does not change the FVCO value) + opt.pll_wbwdisable = 0, //pll_wbwdisable 1 Disable the Wide-Bandith Mode (Wide-Bandwith mode allow a faster startup time and out-of-lock time). 0 to enable the Wide-Bandith Mode. + opt.pll_freq = (pll_freq < AVR32_PM_PLL_VCO_RANGE0_MIN_FREQ) ? 1 : 0, // Set to 1 for VCO frequency range 80-180MHz, set to 0 for VCO frequency range 160-240Mhz. + + + scif_pll_setup(SCIF_PLL0, opt); // lockcount in main clock for the PLL wait lock + + /* Enable PLL0 */ + scif_pll_enable(SCIF_PLL0); + + /* Wait for PLL0 locked */ + scif_wait_for_pll_locked(SCIF_PLL0) ; + + rest = pll_freq; + while (rest > AVR32_PM_PBA_MAX_FREQ || + rest != param->pba_f) + { + div2_pba++; + rest = pll_freq / (1 << div2_pba); + if (rest < param->pba_f) + break; + } + + // Update real PBA Frequency + param->pba_f = pll_freq / (1 << div2_pba); + + + if (div2_cpu) + { + b_div2_cpu = TRUE; + div2_cpu--; + } + else + b_div2_cpu = FALSE; + + if (div2_pba) + { + b_div2_pba = TRUE; + div2_pba--; + } + else + b_div2_pba = FALSE; + + if (b_div2_cpu == TRUE ) + { + pm_set_clk_domain_div(PM_CLK_DOMAIN_0, (pm_divratio_t) div2_cpu); // CPU + pm_set_clk_domain_div(PM_CLK_DOMAIN_1, (pm_divratio_t) div2_cpu); // HSB + pm_set_clk_domain_div(PM_CLK_DOMAIN_3, (pm_divratio_t) div2_cpu); // PBB + } + if (b_div2_pba == TRUE ) + { + pm_set_clk_domain_div(PM_CLK_DOMAIN_2, (pm_divratio_t) div2_pba); // PBA + pm_set_clk_domain_div(PM_CLK_DOMAIN_4, (pm_divratio_t) div2_pba); // PBC + } + + // Set Flashc Wait State + flashc_set_flash_waitstate_and_readmode(param->cpu_f); + + // Set the main clock source as being PLL0. + pm_set_mclk_source(PM_CLK_SRC_PLL0); + + return PASS; +} +#endif // UC3C device-specific implementation + +long int pcl_switch_to_osc(pcl_osc_t osc, unsigned int fcrystal, unsigned int startup) +{ +#ifndef AVR32_PM_VERSION_RESETVALUE +// Implementation for UC3A, UC3A3, UC3B parts. + if(PCL_OSC0 == osc) + { + // Configure OSC0 in crystal mode, external crystal with a FOSC0 Hz frequency, + // enable the OSC0, set the main clock source as being OSC0. + pm_switch_to_osc0(&AVR32_PM, fcrystal, startup); + } + else + { + return PCL_NOT_SUPPORTED; + } +#else +// Implementation for UC3C, UC3L parts. + #if AVR32_PM_VERSION_RESETVALUE < 0x400 + return PCL_NOT_SUPPORTED; + #else + if(PCL_OSC0 == osc) + { + // Configure OSC0 in crystal mode, external crystal with a fcrystal Hz frequency. + scif_configure_osc_crystalmode(SCIF_OSC0, fcrystal); + // Enable the OSC0 + scif_enable_osc(SCIF_OSC0, startup, true); + // Set the Flash wait state and the speed read mode (depending on the target CPU frequency). +#if UC3L + flashcdw_set_flash_waitstate_and_readmode(fcrystal); +#elif UC3C + flashc_set_flash_waitstate_and_readmode(fcrystal); +#endif + // Set the main clock source as being OSC0. + pm_set_mclk_source(PM_CLK_SRC_OSC0); + } + else + { + return PCL_NOT_SUPPORTED; + } + #endif +#endif + return PASS; +} + +long int pcl_configure_usb_clock(void) +{ +#ifndef AVR32_PM_VERSION_RESETVALUE +// Implementation for UC3A, UC3A3, UC3B parts. + pm_configure_usb_clock(); + return PASS; +#else + #ifdef AVR32_PM_410_H_INCLUDED + const scif_pll_opt_t opt = { + .osc = SCIF_OSC0, // Sel Osc0 or Osc1 + .lockcount = 16, // lockcount in main clock for the PLL wait lock + .div = 1, // DIV=1 in the formula + .mul = 5, // MUL=7 in the formula + .pll_div2 = 1, // pll_div2 Divide the PLL output frequency by 2 (this settings does not change the FVCO value) + .pll_wbwdisable = 0, //pll_wbwdisable 1 Disable the Wide-Bandith Mode (Wide-Bandwith mode allow a faster startup time and out-of-lock time). 0 to enable the Wide-Bandith Mode. + .pll_freq = 1, // Set to 1 for VCO frequency range 80-180MHz, set to 0 for VCO frequency range 160-240Mhz. + }; + + /* Setup PLL1 on Osc0, mul=7 ,no divisor, lockcount=16, ie. 16Mhzx6 = 96MHz output */ + scif_pll_setup(SCIF_PLL1, opt); // lockcount in main clock for the PLL wait lock + + /* Enable PLL1 */ + scif_pll_enable(SCIF_PLL1); + + /* Wait for PLL1 locked */ + scif_wait_for_pll_locked(SCIF_PLL1) ; + + // Implementation for UC3C parts. + // Setup the generic clock for USB + scif_gc_setup(AVR32_SCIF_GCLK_USB, + SCIF_GCCTRL_PLL1, + AVR32_SCIF_GC_NO_DIV_CLOCK, + 0); + // Now enable the generic clock + scif_gc_enable(AVR32_SCIF_GCLK_USB); + return PASS; + #else + return PCL_NOT_SUPPORTED; + #endif +#endif +} + + +#if UC3L +#else +void pcl_write_gplp(unsigned long gplp, unsigned long value) +{ +#ifndef AVR32_PM_VERSION_RESETVALUE +// Implementation for UC3A, UC3A3, UC3B parts. + pm_write_gplp(&AVR32_PM,gplp,value); +#else + scif_write_gplp(gplp,value); +#endif +} + +unsigned long pcl_read_gplp(unsigned long gplp) +{ +#ifndef AVR32_PM_VERSION_RESETVALUE +// Implementation for UC3A, UC3A3, UC3B parts. + return pm_read_gplp(&AVR32_PM,gplp); +#else + return scif_read_gplp(gplp); +#endif +} +#endif diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/power_clocks_lib.h b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/power_clocks_lib.h new file mode 100644 index 000000000..28c5888da --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/power_clocks_lib.h @@ -0,0 +1,379 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file has been prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief High-level library abstracting features such as oscillators/pll/dfll + * configuration, clock configuration, System-sensible parameters + * configuration, buses clocks configuration, sleep mode, reset. + * + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + *****************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _POWER_CLOCKS_LIB_H_ +#define _POWER_CLOCKS_LIB_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include "compiler.h" + +#ifndef AVR32_PM_VERSION_RESETVALUE +// Support for UC3A, UC3A3, UC3B parts. + #include "pm.h" +#else +//! Device-specific data +#if UC3L + #include "pm_uc3l.h" + #include "scif_uc3l.h" + #include "flashcdw.h" +#elif UC3C + #include "pm_uc3c.h" + #include "scif_uc3c.h" + #include "flashc.h" +#endif +#endif + +/*! \name Clocks Management + */ +//! @{ + +//! The different oscillators +typedef enum +{ + PCL_OSC0 = 0, + PCL_OSC1 = 1 +} pcl_osc_t; + +//! The different DFLLs +typedef enum +{ + PCL_DFLL0 = 0, + PCL_DFLL1 = 1 +} pcl_dfll_t; + +//! Possible Main Clock Sources +typedef enum +{ + PCL_MC_RCSYS, // Default main clock source, supported by all (aka Slow Clock) + PCL_MC_OSC0, // Supported by all + PCL_MC_OSC1, // Supported by UC3C only + PCL_MC_OSC0_PLL0, // Supported by UC3A, UC3B, UC3A3, UC3C (the main clock source is PLL0 with OSC0 as reference) + PCL_MC_OSC1_PLL0, // Supported by UC3A, UC3B, UC3A3, UC3C (the main clock source is PLL0 with OSC1 as reference) + PCL_MC_OSC0_PLL1, // Supported by UC3C (the main clock source is PLL1 with OSC0 as reference) + PCL_MC_OSC1_PLL1, // Supported by UC3C (the main clock source is PLL1 with OSC1 as reference) + PCL_MC_DFLL0, // Supported by UC3L + PCL_MC_DFLL1, // Not supported yet + PCL_MC_RC120M, // Supported by UC3L, UC3C + PCL_MC_RC8M, // Supported by UC3C + PCL_MC_CRIPOSC // Supported by UC3C +} pcl_mainclk_t; + +//! Input and output parameters to configure clocks with pcl_configure_clocks(). +// NOTE: regarding the frequency settings, always abide by the datasheet rules and min & max supported frequencies. +#ifndef AVR32_PM_VERSION_RESETVALUE +// Support for UC3A, UC3A3, UC3B parts. +#define pcl_freq_param_t pm_freq_param_t // See pm.h +#else +// Support for UC3C, UC3L parts. +typedef struct +{ + //! Main clock source selection (input argument). + pcl_mainclk_t main_clk_src; + + //! Target CPU frequency (input/output argument). + unsigned long cpu_f; + + //! Target PBA frequency (input/output argument). + unsigned long pba_f; + + //! Target PBB frequency (input/output argument). + unsigned long pbb_f; + + //! Target PBC frequency (input/output argument). + unsigned long pbc_f; + + //! Oscillator 0's external crystal(or external clock) frequency (board dependant) (input argument). + unsigned long osc0_f; + + //! Oscillator 0's external crystal(or external clock) startup time: AVR32_PM_OSCCTRL0_STARTUP_x_RCOSC (input argument). + unsigned long osc0_startup; + + //! DFLL target frequency (input/output argument) (NOTE: the bigger, the most stable the frequency) + unsigned long dfll_f; + + //! Other parameters that might be necessary depending on the device (implementation-dependent). + // For the UC3L DFLL setup, this parameter should be pointing to a structure of + // type (scif_gclk_opt_t *). + void *pextra_params; +} pcl_freq_param_t; +#endif + +//! Define "not supported" for the lib. +#define PCL_NOT_SUPPORTED (-10000) + +/*! \brief Automatically configure the CPU, PBA, PBB, and HSB clocks + * + * This function needs some parameters stored in a pcl_freq_param_t structure: + * - main_clk_src is the id of the main clock source to use, + * - cpu_f and pba_f and pbb_f are the wanted frequencies, + * - osc0_f is the oscillator 0's external crystal (or external clock) on-board frequency (e.g. FOSC0), + * - osc0_startup is the oscillator 0's external crystal (or external clock) startup time (e.g. OSC0_STARTUP). + * - dfll_f is the target DFLL frequency to set-up if main_clk_src is the dfll. + * + * The CPU, HSB and PBA frequencies programmed after configuration are stored back into cpu_f and pba_f. + * + * \note: since it is dynamically computing the appropriate field values of the + * configuration registers from the parameters structure, this function is not + * optimal in terms of code size. For a code size optimal solution, it is better + * to create a new function from pcl_configure_clocks() and modify it to use + * preprocessor computation from pre-defined target frequencies. + * + * \param param pointer on the configuration structure. + * + * \retval 0 Success. + * \retval <0 The configuration cannot be performed. + */ +extern long int pcl_configure_clocks(pcl_freq_param_t *param); + +/*! \brief Automatically configure the CPU, PBA, PBB, and HSB clocks using the RCSYS osc as main source clock. + * + * This function needs some parameters stored in a pcl_freq_param_t structure: + * - cpu_f and pba_f and pbb_f are the wanted frequencies + * + * Supported main clock sources: PCL_MC_RCSYS + * + * Supported synchronous clocks frequencies: + * 115200Hz, 57600Hz, 28800Hz, 14400Hz, 7200Hz, 3600Hz, 1800Hz, 900Hz, 450Hz. + * + * \note: by default, this implementation doesn't perform thorough checks on the + * input parameters. To enable the checks, define AVR32SFW_INPUT_CHECK. + * + * \note: since it is dynamically computing the appropriate field values of the + * configuration registers from the parameters structure, this function is not + * optimal in terms of code size. For a code size optimal solution, it is better + * to create a new function from pcl_configure_clocks_rcsys() and modify it to use + * preprocessor computation from pre-defined target frequencies. + * + * \param param pointer on the configuration structure. + * + * \retval 0 Success. + * \retval <0 The configuration cannot be performed. + */ +extern long int pcl_configure_clocks_rcsys(pcl_freq_param_t *param); + +/*! \brief Automatically configure the CPU, PBA, PBB, and HSB clocks using the RC120M osc as main source clock. + * + * This function needs some parameters stored in a pcl_freq_param_t structure: + * - cpu_f and pba_f and pbb_f are the wanted frequencies + * + * Supported main clock sources: PCL_MC_RC120M + * + * Supported synchronous clocks frequencies: + * 30MHz, 15MHz, 7.5MHz, 3.75MHz, 1.875MHz, 937.5kHz, 468.75kHz. + * + * \note: by default, this implementation doesn't perform thorough checks on the + * input parameters. To enable the checks, define AVR32SFW_INPUT_CHECK. + * + * \note: since it is dynamically computing the appropriate field values of the + * configuration registers from the parameters structure, this function is not + * optimal in terms of code size. For a code size optimal solution, it is better + * to create a new function from pcl_configure_clocks_rc120m() and modify it to + * use preprocessor computation from pre-defined target frequencies. + * + * \param param pointer on the configuration structure. + * + * \retval 0 Success. + * \retval <0 The configuration cannot be performed. + */ +extern long int pcl_configure_clocks_rc120m(pcl_freq_param_t *param); + +/*! \brief Automatically configure the CPU, PBA, PBB, and HSB clocks using the OSC0 osc as main source clock + * + * This function needs some parameters stored in a pcl_freq_param_t structure: + * - cpu_f and pba_f and pbb_f are the wanted frequencies, + * - osc0_f is the oscillator 0's external crystal (or external clock) on-board frequency (e.g. FOSC0), + * - osc0_startup is the oscillator 0's external crystal (or external clock) startup time (e.g. OSC0_STARTUP). + * + * Supported main clock sources: PCL_MC_OSC0 + * + * Supported synchronous clocks frequencies: + * (these obviously depend on the OSC0 frequency; we'll take 16MHz as an example) + * 16MHz, 8MHz, 4MHz, 2MHz, 1MHz, 500kHz, 250kHz, 125kHz, 62.5kHz. + * + * \note: by default, this implementation doesn't perform thorough checks on the + * input parameters. To enable the checks, define AVR32SFW_INPUT_CHECK. + * + * \note: since it is dynamically computing the appropriate field values of the + * configuration registers from the parameters structure, this function is not + * optimal in terms of code size. For a code size optimal solution, it is better + * to create a new function from pcl_configure_clocks_osc0() and modify it to use + * preprocessor computation from pre-defined target frequencies. + * + * \param param pointer on the configuration structure. + * + * \retval 0 Success. + * \retval <0 The configuration cannot be performed. + */ +extern long int pcl_configure_clocks_osc0(pcl_freq_param_t *param); + +/*! \brief Automatically configure the CPU, PBA, PBB, and HSB clocks using the DFLL0 as main source clock + * + * This function needs some parameters stored in a pcl_freq_param_t structure: + * - cpu_f and pba_f and pbb_f are the wanted frequencies, + * - dfll_f is the target DFLL frequency to set-up + * + * \note: when the DFLL0 is to be used as main source clock for the synchronous clocks, + * the target frequency of the DFLL should be chosen to be as high as possible + * within the specification range (for stability reasons); the target cpu and pbx + * frequencies will then be reached by appropriate division ratio. + * + * Supported main clock sources: PCL_MC_DFLL0 + * + * Supported synchronous clocks frequencies: + * (these obviously depend on the DFLL target frequency; we'll take 100MHz as an example) + * 50MHz, 25MHz, 12.5MHz, 6.25MHz, 3.125MHz, 1562.5kHz, 781.25kHz, 390.625kHz. + * + * \note: by default, this implementation doesn't perform thorough checks on the + * input parameters. To enable the checks, define AVR32SFW_INPUT_CHECK. + * + * \note: since it is dynamically computing the appropriate field values of the + * configuration registers from the parameters structure, this function is not + * optimal in terms of code size. For a code size optimal solution, it is better + * to create a new function from pcl_configure_clocks_dfll0() and modify it to + * use preprocessor computation from pre-defined target frequencies. + * + * \param param pointer on the configuration structure. + * + * \retval 0 Success. + * \retval <0 The configuration cannot be performed. + */ +extern long int pcl_configure_clocks_dfll0(pcl_freq_param_t *param); + +/*! \brief Switch the main clock source to Osc0 configured in crystal mode + * + * \param osc The oscillator to enable and switch to. + * \param fcrystal Oscillator external crystal frequency (Hz) + * \param startup Oscillator startup time. + * + * \return Status. + * \retval 0 Success. + * \retval <0 An error occured. + */ +extern long int pcl_switch_to_osc(pcl_osc_t osc, unsigned int fcrystal, unsigned int startup); + +/*! \brief Enable the clock of a module. + * + * \param module The module to clock (use one of the defines in the part-specific + * header file under "toolchain folder"/avr32/inc(lude)/avr32/; depending on the + * clock domain, look for the sections "CPU clocks", "HSB clocks", "PBx clocks" + * or look in the module section). + * + * \return Status. + * \retval 0 Success. + * \retval <0 An error occured. + */ +#ifndef AVR32_PM_VERSION_RESETVALUE +// Implementation for UC3A, UC3A3, UC3B parts. +#define pcl_enable_module(module) pm_enable_module(&AVR32_PM, module) +#else +// Implementation for UC3C, UC3L parts. +#define pcl_enable_module(module) pm_enable_module(module) +#endif + +/*! \brief Disable the clock of a module. + * + * \param module The module to shut down (use one of the defines in the part-specific + * header file under "toolchain folder"/avr32/inc(lude)/avr32/; depending on the + * clock domain, look for the sections "CPU clocks", "HSB clocks", "PBx clocks" + * or look in the module section). + * + * \return Status. + * \retval 0 Success. + * \retval <0 An error occured. + */ +#ifndef AVR32_PM_VERSION_RESETVALUE +// Implementation for UC3A, UC3A3, UC3B parts. +#define pcl_disable_module(module) pm_disable_module(&AVR32_PM, module) +#else +// Implementation for UC3C, UC3L parts. +#define pcl_disable_module(module) pm_disable_module(module) +#endif + +/*! \brief Configure the USB Clock + * + * + * \return Status. + * \retval 0 Success. + * \retval <0 An error occured. + */ +extern long int pcl_configure_usb_clock(void); + +//! @} + +/*! \name Power Management + */ +//! @{ +/*! + * \brief Read the content of the GPLP registers + * \param gplp GPLP register index (0,1,... depending on the number of GPLP registers for a given part) + * + * \return The content of the chosen GPLP register. + */ +extern unsigned long pcl_read_gplp(unsigned long gplp); + + +/*! + * \brief Write into the GPLP registers + * \param gplp GPLP register index (0,1,... depending on the number of GPLP registers for a given part) + * \param value Value to write + */ +extern void pcl_write_gplp(unsigned long gplp, unsigned long value); + +//! @} + +#ifdef __cplusplus +} +#endif + +#endif // _POWER_CLOCKS_LIB_H_ diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/SPI/spi.c b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/SPI/spi.c new file mode 100644 index 000000000..cadb8b15e --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/SPI/spi.c @@ -0,0 +1,443 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief SPI driver for AVR32 UC3. + * + * This file defines a useful set of functions for the SPI interface on AVR32 + * devices. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with an SPI module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#include "spi.h" + +#ifdef FREERTOS_USED + +#include "FreeRTOS.h" +#include "semphr.h" + +#endif + + +/*! \name SPI Writable Bit-Field Registers + */ +//! @{ + +typedef union +{ + unsigned long cr; + avr32_spi_cr_t CR; +} u_avr32_spi_cr_t; + +typedef union +{ + unsigned long mr; + avr32_spi_mr_t MR; +} u_avr32_spi_mr_t; + +typedef union +{ + unsigned long tdr; + avr32_spi_tdr_t TDR; +} u_avr32_spi_tdr_t; + +typedef union +{ + unsigned long ier; + avr32_spi_ier_t IER; +} u_avr32_spi_ier_t; + +typedef union +{ + unsigned long idr; + avr32_spi_idr_t IDR; +} u_avr32_spi_idr_t; + +typedef union +{ + unsigned long csr; + avr32_spi_csr0_t CSR; +} u_avr32_spi_csr_t; + +//! @} + + +#ifdef FREERTOS_USED + +//! The SPI mutex. +static xSemaphoreHandle xSPIMutex; + +#endif + + +/*! \brief Calculates the baudrate divider. + * + * \param options Pointer to a structure containing initialization options for + * an SPI channel. + * \param pba_hz SPI module input clock frequency (PBA clock, Hz). + * + * \return Divider or error code. + * \retval >=0 Success. + * \retval <0 Error. + */ +static int getBaudDiv(const spi_options_t *options, unsigned int pba_hz) +{ + int baudDiv = (pba_hz + options->baudrate / 2) / options->baudrate; + + if (baudDiv <= 0 || baudDiv > 255) { + return -1; + } + + return baudDiv; +} + + +void spi_reset(volatile avr32_spi_t *spi) +{ + spi->cr = AVR32_SPI_CR_SWRST_MASK; +} + + +spi_status_t spi_initSlave(volatile avr32_spi_t *spi, + unsigned char bits, + unsigned char spi_mode) +{ + if (spi_mode > 3 || + bits < 8 || bits > 16) { + return SPI_ERROR_ARGUMENT; + } + + // Reset. + spi->cr = AVR32_SPI_CR_SWRST_MASK; + + // Will use CSR0 offsets; these are the same for CSR0 to CSR3. + spi->csr0 = ((spi_mode >> 1) << AVR32_SPI_CSR0_CPOL_OFFSET) | + (((spi_mode & 0x1) ^ 0x1) << AVR32_SPI_CSR0_NCPHA_OFFSET) | + ((bits - 8) << AVR32_SPI_CSR0_BITS_OFFSET); + + return SPI_OK; +} + + +spi_status_t spi_initTest(volatile avr32_spi_t *spi) +{ + // Reset. + spi->cr = AVR32_SPI_CR_SWRST_MASK; + spi->mr |= AVR32_SPI_MR_MSTR_MASK | // Master Mode. + AVR32_SPI_MR_LLB_MASK; // Local Loopback. + + return SPI_OK; +} + + +spi_status_t spi_initMaster(volatile avr32_spi_t *spi, const spi_options_t *options) +{ + u_avr32_spi_mr_t u_avr32_spi_mr; + + if (options->modfdis > 1) { + return SPI_ERROR_ARGUMENT; + } + + // Reset. + spi->cr = AVR32_SPI_CR_SWRST_MASK; + + // Master Mode. + u_avr32_spi_mr.mr = spi->mr; + u_avr32_spi_mr.MR.mstr = 1; + u_avr32_spi_mr.MR.modfdis = options->modfdis; + u_avr32_spi_mr.MR.llb = 0; + u_avr32_spi_mr.MR.pcs = (1 << AVR32_SPI_MR_PCS_SIZE) - 1; + spi->mr = u_avr32_spi_mr.mr; + + return SPI_OK; +} + + +spi_status_t spi_selectionMode(volatile avr32_spi_t *spi, + unsigned char variable_ps, + unsigned char pcs_decode, + unsigned char delay) +{ + u_avr32_spi_mr_t u_avr32_spi_mr; + + if (variable_ps > 1 || + pcs_decode > 1) { + return SPI_ERROR_ARGUMENT; + } + + u_avr32_spi_mr.mr = spi->mr; + u_avr32_spi_mr.MR.ps = variable_ps; + u_avr32_spi_mr.MR.pcsdec = pcs_decode; + u_avr32_spi_mr.MR.dlybcs = delay; + spi->mr = u_avr32_spi_mr.mr; + + return SPI_OK; +} + + +spi_status_t spi_selectChip(volatile avr32_spi_t *spi, unsigned char chip) +{ +#ifdef FREERTOS_USED + while (pdFALSE == xSemaphoreTake(xSPIMutex, 20)); +#endif + + // Assert all lines; no peripheral is selected. + spi->mr |= AVR32_SPI_MR_PCS_MASK; + + if (spi->mr & AVR32_SPI_MR_PCSDEC_MASK) { + // The signal is decoded; allow up to 15 chips. + if (chip > 14) { + return SPI_ERROR_ARGUMENT; + } + + spi->mr &= ~AVR32_SPI_MR_PCS_MASK | (chip << AVR32_SPI_MR_PCS_OFFSET); + } else { + if (chip > 3) { + return SPI_ERROR_ARGUMENT; + } + + spi->mr &= ~(1 << (AVR32_SPI_MR_PCS_OFFSET + chip)); + } + + return SPI_OK; +} + + +spi_status_t spi_unselectChip(volatile avr32_spi_t *spi, unsigned char chip) +{ + unsigned int timeout = SPI_TIMEOUT; + + while (!(spi->sr & AVR32_SPI_SR_TXEMPTY_MASK)) { + if (!timeout--) { + return SPI_ERROR_TIMEOUT; + } + } + + // Assert all lines; no peripheral is selected. + spi->mr |= AVR32_SPI_MR_PCS_MASK; + + // Last transfer, so deassert the current NPCS if CSAAT is set. + spi->cr = AVR32_SPI_CR_LASTXFER_MASK; + +#ifdef FREERTOS_USED + xSemaphoreGive(xSPIMutex); +#endif + + return SPI_OK; +} + + +spi_status_t spi_setupChipReg(volatile avr32_spi_t *spi, + const spi_options_t *options, + unsigned int pba_hz) +{ + u_avr32_spi_csr_t u_avr32_spi_csr; + + if (options->spi_mode > 3 || + options->stay_act > 1 || + options->bits < 8 || options->bits > 16) { + return SPI_ERROR_ARGUMENT; + } + + int baudDiv = getBaudDiv(options, pba_hz); + + if (baudDiv < 0) { + return SPI_ERROR_ARGUMENT; + } + + // Will use CSR0 offsets; these are the same for CSR0 to CSR3. + u_avr32_spi_csr.csr = 0; + u_avr32_spi_csr.CSR.cpol = options->spi_mode >> 1; + u_avr32_spi_csr.CSR.ncpha = (options->spi_mode & 0x1) ^ 0x1; + u_avr32_spi_csr.CSR.csaat = options->stay_act; + u_avr32_spi_csr.CSR.bits = options->bits - 8; + u_avr32_spi_csr.CSR.scbr = baudDiv; + u_avr32_spi_csr.CSR.dlybs = options->spck_delay; + u_avr32_spi_csr.CSR.dlybct = options->trans_delay; + + switch(options->reg) { + case 0: + spi->csr0 = u_avr32_spi_csr.csr; + break; + case 1: + spi->csr1 = u_avr32_spi_csr.csr; + break; + case 2: + spi->csr2 = u_avr32_spi_csr.csr; + break; + case 3: + spi->csr3 = u_avr32_spi_csr.csr; + break; + default: + return SPI_ERROR_ARGUMENT; + } + +#ifdef FREERTOS_USED + if (!xSPIMutex) + { + // Create the SPI mutex. + vSemaphoreCreateBinary(xSPIMutex); + if (!xSPIMutex) + { + while(1); + } + } +#endif + + return SPI_OK; +} + + +void spi_enable(volatile avr32_spi_t *spi) +{ + spi->cr = AVR32_SPI_CR_SPIEN_MASK; +} + + +void spi_disable(volatile avr32_spi_t *spi) +{ + spi->cr = AVR32_SPI_CR_SPIDIS_MASK; +} + + +int spi_is_enabled(volatile avr32_spi_t *spi) +{ + return (spi->sr & AVR32_SPI_SR_SPIENS_MASK) != 0; +} + + +unsigned char spi_writeRegisterEmptyCheck(volatile avr32_spi_t *spi) +{ + return ((spi->sr & AVR32_SPI_SR_TDRE_MASK) != 0); +} + + +spi_status_t spi_write(volatile avr32_spi_t *spi, unsigned short data) +{ + unsigned int timeout = SPI_TIMEOUT; + + while (!(spi->sr & AVR32_SPI_SR_TDRE_MASK)) { + if (!timeout--) { + return SPI_ERROR_TIMEOUT; + } + } + + spi->tdr = data << AVR32_SPI_TDR_TD_OFFSET; + + return SPI_OK; +} + + +spi_status_t spi_variableSlaveWrite(volatile avr32_spi_t *spi, unsigned short data, + unsigned char pcs, unsigned char lastxfer) +{ + unsigned int timeout = SPI_TIMEOUT; + + if (pcs > 14 || lastxfer > 1) { + return SPI_ERROR_ARGUMENT; + } + + while (!(spi->sr & AVR32_SPI_SR_TDRE_MASK)) { + if (!timeout--) { + return SPI_ERROR_TIMEOUT; + } + } + + spi->tdr = (data << AVR32_SPI_TDR_TD_OFFSET) | + (pcs << AVR32_SPI_TDR_PCS_OFFSET) | + (lastxfer << AVR32_SPI_TDR_LASTXFER_OFFSET); + + return SPI_OK; +} + + +unsigned char spi_writeEndCheck(volatile avr32_spi_t *spi) +{ + return ((spi->sr & AVR32_SPI_SR_TXEMPTY_MASK) != 0); +} + + +unsigned char spi_readRegisterFullCheck(volatile avr32_spi_t *spi) +{ + return ((spi->sr & AVR32_SPI_SR_RDRF_MASK) != 0); +} + + +spi_status_t spi_read(volatile avr32_spi_t *spi, unsigned short *data) +{ + unsigned int timeout = SPI_TIMEOUT; + + while ((spi->sr & (AVR32_SPI_SR_RDRF_MASK | AVR32_SPI_SR_TXEMPTY_MASK)) != + (AVR32_SPI_SR_RDRF_MASK | AVR32_SPI_SR_TXEMPTY_MASK)) { + if (!timeout--) { + return SPI_ERROR_TIMEOUT; + } + } + + *data = spi->rdr >> AVR32_SPI_RDR_RD_OFFSET; + + return SPI_OK; +} + + +unsigned char spi_getStatus(volatile avr32_spi_t *spi) +{ + spi_status_t ret = SPI_OK; + unsigned long sr = spi->sr; + + if (sr & AVR32_SPI_SR_OVRES_MASK) { + ret = SPI_ERROR_OVERRUN; + } + + if (sr & AVR32_SPI_SR_MODF_MASK) { + ret += SPI_ERROR_MODE_FAULT; + } + + if (ret == (SPI_ERROR_OVERRUN + SPI_ERROR_MODE_FAULT)) { + return SPI_ERROR_OVERRUN_AND_MODE_FAULT; + } + else if (ret > 0) { + return ret; + } else { + return SPI_OK; + } +} diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/SPI/spi.h b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/SPI/spi.h new file mode 100644 index 000000000..6dcc92848 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/SPI/spi.h @@ -0,0 +1,342 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief SPI driver for AVR32 UC3. + * + * This file defines a useful set of functions for the SPI interface on AVR32 + * devices. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with an SPI module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _SPI_H_ +#define _SPI_H_ + +#include + + +//! Time-out value (number of attempts). +#define SPI_TIMEOUT 10000 + + +//! Status codes used by the SPI driver. +typedef enum +{ + SPI_ERROR = -1, + SPI_OK = 0, + SPI_ERROR_TIMEOUT = 1, + SPI_ERROR_ARGUMENT, + SPI_ERROR_OVERRUN, + SPI_ERROR_MODE_FAULT, + SPI_ERROR_OVERRUN_AND_MODE_FAULT +} spi_status_t; + +//! Option structure for SPI channels. +typedef struct +{ + //! The SPI channel to set up. + unsigned char reg; + + //! Preferred baudrate for the SPI. + unsigned int baudrate; + + //! Number of bits in each character (8 to 16). + unsigned char bits; + + //! Delay before first clock pulse after selecting slave (in PBA clock periods). + unsigned char spck_delay; + + //! Delay between each transfer/character (in PBA clock periods). + unsigned char trans_delay; + + //! Sets this chip to stay active after last transfer to it. + unsigned char stay_act; + + //! Which SPI mode to use when transmitting. + unsigned char spi_mode; + + //! Disables the mode fault detection. + //! With this bit cleared, the SPI master mode will disable itself if another + //! master tries to address it. + unsigned char modfdis; +} spi_options_t; + + +/*! \brief Resets the SPI controller. + * + * \param spi Base address of the SPI instance. + */ +extern void spi_reset(volatile avr32_spi_t *spi); + +/*! \brief Initializes the SPI in slave mode. + * + * \param spi Base address of the SPI instance. + * \param bits Number of bits in each transmitted character (8 to 16). + * \param spi_mode Clock polarity and phase. + * + * \return Status. + * \retval SPI_OK Success. + * \retval SPI_ERROR_ARGUMENT Invalid argument(s) passed. + */ +extern spi_status_t spi_initSlave(volatile avr32_spi_t *spi, + unsigned char bits, + unsigned char spi_mode); + +/*! \brief Sets up the SPI in a test mode where the transmitter is connected to + * the receiver (local loopback). + * + * \param spi Base address of the SPI instance. + * + * \return Status. + * \retval SPI_OK Success. + */ +extern spi_status_t spi_initTest(volatile avr32_spi_t *spi); + +/*! \brief Initializes the SPI in master mode. + * + * \param spi Base address of the SPI instance. + * \param options Pointer to a structure containing initialization options. + * + * \return Status. + * \retval SPI_OK Success. + * \retval SPI_ERROR_ARGUMENT Invalid argument(s) passed. + */ +extern spi_status_t spi_initMaster(volatile avr32_spi_t *spi, const spi_options_t *options); + +/*! \brief Sets up how and when the slave chips are selected (master mode only). + * + * \param spi Base address of the SPI instance. + * \param variable_ps Target slave is selected in transfer register for every + * character to transmit. + * \param pcs_decode The four chip select lines are decoded externally. Values + * 0 to 14 can be given to \ref spi_selectChip. + * \param delay Delay in PBA periods between chip selects. + * + * \return Status. + * \retval SPI_OK Success. + * \retval SPI_ERROR_ARGUMENT Invalid argument(s) passed. + */ +extern spi_status_t spi_selectionMode(volatile avr32_spi_t *spi, + unsigned char variable_ps, + unsigned char pcs_decode, + unsigned char delay); + +/*! \brief Selects slave chip. + * + * \param spi Base address of the SPI instance. + * \param chip Slave chip number (normal: 0 to 3, extarnally decoded signal: 0 + * to 14). + * + * \return Status. + * \retval SPI_OK Success. + * \retval SPI_ERROR_ARGUMENT Invalid argument(s) passed. + */ +extern spi_status_t spi_selectChip(volatile avr32_spi_t *spi, unsigned char chip); + +/*! \brief Unselects slave chip. + * + * \param spi Base address of the SPI instance. + * \param chip Slave chip number (normal: 0 to 3, extarnally decoded signal: 0 + * to 14). + * + * \return Status. + * \retval SPI_OK Success. + * \retval SPI_ERROR_TIMEOUT Time-out. + * + * \note Will block program execution until time-out occurs if last transmission + * is not complete. Invoke \ref spi_writeEndCheck beforehand if needed. + */ +extern spi_status_t spi_unselectChip(volatile avr32_spi_t *spi, unsigned char chip); + +/*! \brief Sets options for a specific slave chip. + * + * The baudrate field has to be written before transfer in master mode. Four + * similar registers exist, one for each slave. When using encoded slave + * addressing, reg=0 sets options for slaves 0 to 3, reg=1 for slaves 4 to 7 and + * so on. + * + * \param spi Base address of the SPI instance. + * \param options Pointer to a structure containing initialization options for + * an SPI channel. + * \param pba_hz SPI module input clock frequency (PBA clock, Hz). + * + * \return Status. + * \retval SPI_OK Success. + * \retval SPI_ERROR_ARGUMENT Invalid argument(s) passed. + */ +extern spi_status_t spi_setupChipReg(volatile avr32_spi_t *spi, + const spi_options_t *options, + unsigned int pba_hz); + +/*! \brief Enables the SPI. + * + * \param spi Base address of the SPI instance. + */ +extern void spi_enable(volatile avr32_spi_t *spi); + +/*! \brief Disables the SPI. + * + * Ensures that nothing is transferred while setting up buffers. + * + * \param spi Base address of the SPI instance. + * + * \warning This may cause data loss if used on a slave SPI. + */ +extern void spi_disable(volatile avr32_spi_t *spi); + +/*! \brief Tests if the SPI is enabled. + * + * \param spi Base address of the SPI instance. + * + * \return \c 1 if the SPI is enabled, otherwise \c 0. + */ +extern int spi_is_enabled(volatile avr32_spi_t *spi); + +/*! \brief Checks if there is no data in the transmit register. + * + * \param spi Base address of the SPI instance. + * + * \return Status. + * \retval 1 No data in TDR. + * \retval 0 Some data in TDR. + */ +extern unsigned char spi_writeRegisterEmptyCheck(volatile avr32_spi_t *spi); + +/*! \brief Writes one data word in master fixed peripheral select mode or in + * slave mode. + * + * \param spi Base address of the SPI instance. + * \param data The data word to write. + * + * \return Status. + * \retval SPI_OK Success. + * \retval SPI_ERROR_TIMEOUT Time-out. + * + * \note Will block program execution until time-out occurs if transmitter is + * busy and transmit buffer is full. Invoke + * \ref spi_writeRegisterEmptyCheck beforehand if needed. + * + * \note Once the data has been written to the transmit buffer, the end of + * transmission is not waited for. Invoke \ref spi_writeEndCheck if + * needed. + */ +extern spi_status_t spi_write(volatile avr32_spi_t *spi, unsigned short data); + +/*! \brief Selects a slave in master variable peripheral select mode and writes + * one data word to it. + * + * \param spi Base address of the SPI instance. + * \param data The data word to write. + * \param pcs Slave selector (bit 0 -> nCS line 0, bit 1 -> nCS line 1, + * etc.). + * \param lastxfer Boolean indicating whether this is the last data word + * transfer. + * + * \return Status. + * \retval SPI_OK Success. + * \retval SPI_ERROR_TIMEOUT Time-out. + * \retval SPI_ERROR_ARGUMENT Invalid argument(s) passed. + * + * \note Will block program execution until time-out occurs if transmitter is + * busy and transmit buffer is full. Invoke + * \ref spi_writeRegisterEmptyCheck beforehand if needed. + * + * \note Once the data has been written to the transmit buffer, the end of + * transmission is not waited for. Invoke \ref spi_writeEndCheck if + * needed. + */ +extern spi_status_t spi_variableSlaveWrite(volatile avr32_spi_t *spi, + unsigned short data, + unsigned char pcs, + unsigned char lastxfer); + +/*! \brief Checks if all transmissions are complete. + * + * \param spi Base address of the SPI instance. + * + * \return Status. + * \retval 1 All transmissions complete. + * \retval 0 Transmissions not complete. + */ +extern unsigned char spi_writeEndCheck(volatile avr32_spi_t *spi); + +/*! \brief Checks if there is data in the receive register. + * + * \param spi Base address of the SPI instance. + * + * \return Status. + * \retval 1 Some data in RDR. + * \retval 0 No data in RDR. + */ +extern unsigned char spi_readRegisterFullCheck(volatile avr32_spi_t *spi); + +/*! \brief Reads one data word in master mode or in slave mode. + * + * \param spi Base address of the SPI instance. + * \param data Pointer to the location where to store the received data word. + * + * \return Status. + * \retval SPI_OK Success. + * \retval SPI_ERROR_TIMEOUT Time-out. + * + * \note Will block program execution until time-out occurs if no data is + * received or last transmission is not complete. Invoke + * \ref spi_writeEndCheck or \ref spi_readRegisterFullCheck beforehand if + * needed. + */ +extern spi_status_t spi_read(volatile avr32_spi_t *spi, unsigned short *data); + +/*! \brief Gets status information from the SPI. + * + * \param spi Base address of the SPI instance. + * + * \return Status. + * \retval SPI_OK Success. + * \retval SPI_ERROR_OVERRUN Overrun error. + * \retval SPI_ERROR_MODE_FAULT Mode fault (SPI addressed as slave + * while in master mode). + * \retval SPI_ERROR_OVERRUN_AND_MODE_FAULT Overrun error and mode fault. + */ +extern unsigned char spi_getStatus(volatile avr32_spi_t *spi); + + +#endif // _SPI_H_ diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/USART/usart.c b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/USART/usart.c new file mode 100644 index 000000000..b95882a75 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/USART/usart.c @@ -0,0 +1,914 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief USART driver for AVR32 UC3. + * + * This file contains basic functions for the AVR32 USART, with support for all + * modes, settings and clock speeds. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with a USART module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#include "compiler.h" +#include "usart.h" + + +//------------------------------------------------------------------------------ +/*! \name Private Functions + */ +//! @{ + + +/*! \brief Checks if the USART is in multidrop mode. + * + * \param usart Base address of the USART instance. + * + * \return \c 1 if the USART is in multidrop mode, otherwise \c 0. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +static __inline__ int usart_mode_is_multidrop(volatile avr32_usart_t *usart) +{ + return ((usart->mr >> AVR32_USART_MR_PAR_OFFSET) & AVR32_USART_MR_PAR_MULTI) == AVR32_USART_MR_PAR_MULTI; +} + + +/*! \brief Calculates a clock divider (\e CD) and a fractional part (\e FP) for + * the USART asynchronous modes to generate a baud rate as close as + * possible to the baud rate set point. + * + * Baud rate calculation: + * \f$ Baudrate = \frac{SelectedClock}{Over \times (CD + \frac{FP}{8})} \f$, \e Over being 16 or 8. + * The maximal oversampling is selected if it allows to generate a baud rate close to the set point. + * + * \param usart Base address of the USART instance. + * \param baudrate Baud rate set point. + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * + * \retval USART_SUCCESS Baud rate successfully initialized. + * \retval USART_INVALID_INPUT Baud rate set point is out of range for the given input clock frequency. + */ +static int usart_set_async_baudrate(volatile avr32_usart_t *usart, unsigned int baudrate, unsigned long pba_hz) +{ + unsigned int over = (pba_hz >= 16 * baudrate) ? 16 : 8; + unsigned int cd_fp = ((1 << AVR32_USART_BRGR_FP_SIZE) * pba_hz + (over * baudrate) / 2) / (over * baudrate); + unsigned int cd = cd_fp >> AVR32_USART_BRGR_FP_SIZE; + unsigned int fp = cd_fp & ((1 << AVR32_USART_BRGR_FP_SIZE) - 1); + + if (cd < 1 || cd > (1 << AVR32_USART_BRGR_CD_SIZE) - 1) + return USART_INVALID_INPUT; + + usart->mr = (usart->mr & ~(AVR32_USART_MR_USCLKS_MASK | + AVR32_USART_MR_SYNC_MASK | + AVR32_USART_MR_OVER_MASK)) | + AVR32_USART_MR_USCLKS_MCK << AVR32_USART_MR_USCLKS_OFFSET | + ((over == 16) ? AVR32_USART_MR_OVER_X16 : AVR32_USART_MR_OVER_X8) << AVR32_USART_MR_OVER_OFFSET; + + usart->brgr = cd << AVR32_USART_BRGR_CD_OFFSET | + fp << AVR32_USART_BRGR_FP_OFFSET; + + return USART_SUCCESS; +} + + +/*! \brief Calculates a clock divider (\e CD) for the USART synchronous master + * modes to generate a baud rate as close as possible to the baud rate + * set point. + * + * Baud rate calculation: + * \f$ Baudrate = \frac{SelectedClock}{CD} \f$. + * + * \param usart Base address of the USART instance. + * \param baudrate Baud rate set point. + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * + * \retval USART_SUCCESS Baud rate successfully initialized. + * \retval USART_INVALID_INPUT Baud rate set point is out of range for the given input clock frequency. + */ +static int usart_set_sync_master_baudrate(volatile avr32_usart_t *usart, unsigned int baudrate, unsigned long pba_hz) +{ + unsigned int cd = (pba_hz + baudrate / 2) / baudrate; + + if (cd < 1 || cd > (1 << AVR32_USART_BRGR_CD_SIZE) - 1) + return USART_INVALID_INPUT; + + usart->mr = (usart->mr & ~AVR32_USART_MR_USCLKS_MASK) | + AVR32_USART_MR_USCLKS_MCK << AVR32_USART_MR_USCLKS_OFFSET | + AVR32_USART_MR_SYNC_MASK; + + usart->brgr = cd << AVR32_USART_BRGR_CD_OFFSET; + + return USART_SUCCESS; +} + + +/*! \brief Selects the SCK pin as the source of baud rate for the USART + * synchronous slave modes. + * + * \param usart Base address of the USART instance. + * + * \retval USART_SUCCESS Baud rate successfully initialized. + */ +static int usart_set_sync_slave_baudrate(volatile avr32_usart_t *usart) +{ + usart->mr = (usart->mr & ~AVR32_USART_MR_USCLKS_MASK) | + AVR32_USART_MR_USCLKS_SCK << AVR32_USART_MR_USCLKS_OFFSET | + AVR32_USART_MR_SYNC_MASK; + + return USART_SUCCESS; +} + + +/*! \brief Calculates a clock divider (\e CD) for the USART ISO7816 mode to + * generate an ISO7816 clock as close as possible to the clock set point. + * + * ISO7816 clock calculation: + * \f$ Clock = \frac{SelectedClock}{CD} \f$. + * + * \param usart Base address of the USART instance. + * \param clock ISO7816 clock set point. + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * + * \retval USART_SUCCESS ISO7816 clock successfully initialized. + * \retval USART_INVALID_INPUT ISO7816 clock set point is out of range for the given input clock frequency. + */ +static int usart_set_iso7816_clock(volatile avr32_usart_t *usart, unsigned int clock, unsigned long pba_hz) +{ + unsigned int cd = (pba_hz + clock / 2) / clock; + + if (cd < 1 || cd > (1 << AVR32_USART_BRGR_CD_SIZE) - 1) + return USART_INVALID_INPUT; + + usart->mr = (usart->mr & ~(AVR32_USART_MR_USCLKS_MASK | + AVR32_USART_MR_SYNC_MASK | + AVR32_USART_MR_OVER_MASK)) | + AVR32_USART_MR_USCLKS_MCK << AVR32_USART_MR_USCLKS_OFFSET | + AVR32_USART_MR_OVER_X16 << AVR32_USART_MR_OVER_OFFSET; + + usart->brgr = cd << AVR32_USART_BRGR_CD_OFFSET; + + return USART_SUCCESS; +} + + +#if defined(AVR32_USART_400_H_INCLUDED) || \ + defined(AVR32_USART_410_H_INCLUDED) || \ + defined(AVR32_USART_420_H_INCLUDED) || \ + defined(AVR32_USART_440_H_INCLUDED) || \ + defined(AVR32_USART_602_H_INCLUDED) + + +/*! \brief Calculates a clock divider (\e CD) for the USART SPI master mode to + * generate a baud rate as close as possible to the baud rate set point. + * + * Baud rate calculation: + * \f$ Baudrate = \frac{SelectedClock}{CD} \f$. + * + * \param usart Base address of the USART instance. + * \param baudrate Baud rate set point. + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * + * \retval USART_SUCCESS Baud rate successfully initialized. + * \retval USART_INVALID_INPUT Baud rate set point is out of range for the given input clock frequency. + */ +static int usart_set_spi_master_baudrate(volatile avr32_usart_t *usart, unsigned int baudrate, unsigned long pba_hz) +{ + unsigned int cd = (pba_hz + baudrate / 2) / baudrate; + + if (cd < 4 || cd > (1 << AVR32_USART_BRGR_CD_SIZE) - 1) + return USART_INVALID_INPUT; + + usart->mr = (usart->mr & ~AVR32_USART_MR_USCLKS_MASK) | + AVR32_USART_MR_USCLKS_MCK << AVR32_USART_MR_USCLKS_OFFSET; + + usart->brgr = cd << AVR32_USART_BRGR_CD_OFFSET; + + return USART_SUCCESS; +} + + +/*! \brief Selects the SCK pin as the source of baud rate for the USART SPI + * slave mode. + * + * \param usart Base address of the USART instance. + * + * \retval USART_SUCCESS Baud rate successfully initialized. + */ +static int usart_set_spi_slave_baudrate(volatile avr32_usart_t *usart) +{ + usart->mr = (usart->mr & ~AVR32_USART_MR_USCLKS_MASK) | + AVR32_USART_MR_USCLKS_SCK << AVR32_USART_MR_USCLKS_OFFSET; + + return USART_SUCCESS; +} + + +#endif // USART rev. >= 4.0.0 + + +//! @} + + +//------------------------------------------------------------------------------ +/*! \name Initialization Functions + */ +//! @{ + + +void usart_reset(volatile avr32_usart_t *usart) +{ + Bool global_interrupt_enabled = Is_global_interrupt_enabled(); + + // Disable all USART interrupts. + // Interrupts needed should be set explicitly on every reset. + if (global_interrupt_enabled) Disable_global_interrupt(); + usart->idr = 0xFFFFFFFF; + usart->csr; + if (global_interrupt_enabled) Enable_global_interrupt(); + + // Reset mode and other registers that could cause unpredictable behavior after reset. + usart->mr = 0; + usart->rtor = 0; + usart->ttgr = 0; + + // Shutdown TX and RX (will be re-enabled when setup has successfully completed), + // reset status bits and turn off DTR and RTS. + usart->cr = AVR32_USART_CR_RSTRX_MASK | + AVR32_USART_CR_RSTTX_MASK | + AVR32_USART_CR_RSTSTA_MASK | + AVR32_USART_CR_RSTIT_MASK | + AVR32_USART_CR_RSTNACK_MASK | +#ifndef AVR32_USART_440_H_INCLUDED +// Note: Modem Signal Management DTR-DSR-DCD-RI are not included in USART rev.440. + AVR32_USART_CR_DTRDIS_MASK | +#endif + AVR32_USART_CR_RTSDIS_MASK; +} + + +int usart_init_rs232(volatile avr32_usart_t *usart, const usart_options_t *opt, long pba_hz) +{ + // Reset the USART and shutdown TX and RX. + usart_reset(usart); + + // Check input values. + if (!opt || // Null pointer. + opt->charlength < 5 || opt->charlength > 9 || + opt->paritytype > 7 || + opt->stopbits > 2 + 255 || + opt->channelmode > 3 || + usart_set_async_baudrate(usart, opt->baudrate, pba_hz) == USART_INVALID_INPUT) + return USART_INVALID_INPUT; + + if (opt->charlength == 9) + { + // Character length set to 9 bits. MODE9 dominates CHRL. + usart->mr |= AVR32_USART_MR_MODE9_MASK; + } + else + { + // CHRL gives the character length (- 5) when MODE9 = 0. + usart->mr |= (opt->charlength - 5) << AVR32_USART_MR_CHRL_OFFSET; + } + + usart->mr |= opt->paritytype << AVR32_USART_MR_PAR_OFFSET | + opt->channelmode << AVR32_USART_MR_CHMODE_OFFSET; + + if (opt->stopbits > USART_2_STOPBITS) + { + // Set two stop bits + usart->mr |= AVR32_USART_MR_NBSTOP_2 << AVR32_USART_MR_NBSTOP_OFFSET; + // and a timeguard period gives the rest. + usart->ttgr = opt->stopbits - USART_2_STOPBITS; + } + else + // Insert 1, 1.5 or 2 stop bits. + usart->mr |= opt->stopbits << AVR32_USART_MR_NBSTOP_OFFSET; + + // Set normal mode. + usart->mr = (usart->mr & ~AVR32_USART_MR_MODE_MASK) | + AVR32_USART_MR_MODE_NORMAL << AVR32_USART_MR_MODE_OFFSET; + + // Setup complete; enable communication. + // Enable input and output. + usart->cr = AVR32_USART_CR_RXEN_MASK | + AVR32_USART_CR_TXEN_MASK; + + return USART_SUCCESS; +} + + +int usart_init_rs232_tx_only(volatile avr32_usart_t *usart, const usart_options_t *opt, long pba_hz) +{ + // Reset the USART and shutdown TX and RX. + usart_reset(usart); + + // Check input values. + if (!opt || // Null pointer. + opt->charlength < 5 || opt->charlength > 9 || + opt->paritytype > 7 || + opt->stopbits == 1 || opt->stopbits > 2 + 255 || + opt->channelmode > 3 || + usart_set_sync_master_baudrate(usart, opt->baudrate, pba_hz) == USART_INVALID_INPUT) + return USART_INVALID_INPUT; + + if (opt->charlength == 9) + { + // Character length set to 9 bits. MODE9 dominates CHRL. + usart->mr |= AVR32_USART_MR_MODE9_MASK; + } + else + { + // CHRL gives the character length (- 5) when MODE9 = 0. + usart->mr |= (opt->charlength - 5) << AVR32_USART_MR_CHRL_OFFSET; + } + + usart->mr |= opt->paritytype << AVR32_USART_MR_PAR_OFFSET | + opt->channelmode << AVR32_USART_MR_CHMODE_OFFSET; + + if (opt->stopbits > USART_2_STOPBITS) + { + // Set two stop bits + usart->mr |= AVR32_USART_MR_NBSTOP_2 << AVR32_USART_MR_NBSTOP_OFFSET; + // and a timeguard period gives the rest. + usart->ttgr = opt->stopbits - USART_2_STOPBITS; + } + else + // Insert 1 or 2 stop bits. + usart->mr |= opt->stopbits << AVR32_USART_MR_NBSTOP_OFFSET; + + // Set normal mode. + usart->mr = (usart->mr & ~AVR32_USART_MR_MODE_MASK) | + AVR32_USART_MR_MODE_NORMAL << AVR32_USART_MR_MODE_OFFSET; + + // Setup complete; enable communication. + // Enable only output as input is not possible in synchronous mode without + // transferring clock. + usart->cr = AVR32_USART_CR_TXEN_MASK; + + return USART_SUCCESS; +} + + +int usart_init_hw_handshaking(volatile avr32_usart_t *usart, const usart_options_t *opt, long pba_hz) +{ + // First: Setup standard RS232. + if (usart_init_rs232(usart, opt, pba_hz) == USART_INVALID_INPUT) + return USART_INVALID_INPUT; + + // Set hardware handshaking mode. + usart->mr = (usart->mr & ~AVR32_USART_MR_MODE_MASK) | + AVR32_USART_MR_MODE_HARDWARE << AVR32_USART_MR_MODE_OFFSET; + + return USART_SUCCESS; +} + + +int usart_init_modem(volatile avr32_usart_t *usart, const usart_options_t *opt, long pba_hz) +{ + // First: Setup standard RS232. + if (usart_init_rs232(usart, opt, pba_hz) == USART_INVALID_INPUT) + return USART_INVALID_INPUT; + + // Set modem mode. + usart->mr = (usart->mr & ~AVR32_USART_MR_MODE_MASK) | + AVR32_USART_MR_MODE_MODEM << AVR32_USART_MR_MODE_OFFSET; + + return USART_SUCCESS; +} + + +int usart_init_sync_master(volatile avr32_usart_t *usart, const usart_options_t *opt, long pba_hz) +{ + // Reset the USART and shutdown TX and RX. + usart_reset(usart); + + // Check input values. + if (!opt || // Null pointer. + opt->charlength < 5 || opt->charlength > 9 || + opt->paritytype > 7 || + opt->stopbits == 1 || opt->stopbits > 2 + 255 || + opt->channelmode > 3 || + usart_set_sync_master_baudrate(usart, opt->baudrate, pba_hz) == USART_INVALID_INPUT) + return USART_INVALID_INPUT; + + if (opt->charlength == 9) + { + // Character length set to 9 bits. MODE9 dominates CHRL. + usart->mr |= AVR32_USART_MR_MODE9_MASK; + } + else + { + // CHRL gives the character length (- 5) when MODE9 = 0. + usart->mr |= (opt->charlength - 5) << AVR32_USART_MR_CHRL_OFFSET; + } + + usart->mr |= opt->paritytype << AVR32_USART_MR_PAR_OFFSET | + opt->channelmode << AVR32_USART_MR_CHMODE_OFFSET; + + if (opt->stopbits > USART_2_STOPBITS) + { + // Set two stop bits + usart->mr |= AVR32_USART_MR_NBSTOP_2 << AVR32_USART_MR_NBSTOP_OFFSET; + // and a timeguard period gives the rest. + usart->ttgr = opt->stopbits - USART_2_STOPBITS; + } + else + // Insert 1 or 2 stop bits. + usart->mr |= opt->stopbits << AVR32_USART_MR_NBSTOP_OFFSET; + + // Set normal mode. + usart->mr = (usart->mr & ~AVR32_USART_MR_MODE_MASK) | + AVR32_USART_MR_MODE_NORMAL << AVR32_USART_MR_MODE_OFFSET | + AVR32_USART_MR_CLKO_MASK; + + // Setup complete; enable communication. + // Enable input and output. + usart->cr = AVR32_USART_CR_RXEN_MASK | + AVR32_USART_CR_TXEN_MASK; + + return USART_SUCCESS; +} + + +int usart_init_sync_slave(volatile avr32_usart_t *usart, const usart_options_t *opt, long pba_hz) +{ + // Reset the USART and shutdown TX and RX. + usart_reset(usart); + + // Check input values. + if (!opt || // Null pointer. + opt->charlength < 5 || opt->charlength > 9 || + opt->paritytype > 7 || + opt->stopbits == 1 || opt->stopbits > 2 + 255 || + opt->channelmode > 3 || + usart_set_sync_slave_baudrate(usart) == USART_INVALID_INPUT) + return USART_INVALID_INPUT; + + if (opt->charlength == 9) + { + // Character length set to 9 bits. MODE9 dominates CHRL. + usart->mr |= AVR32_USART_MR_MODE9_MASK; + } + else + { + // CHRL gives the character length (- 5) when MODE9 = 0. + usart->mr |= (opt->charlength - 5) << AVR32_USART_MR_CHRL_OFFSET; + } + + usart->mr |= opt->paritytype << AVR32_USART_MR_PAR_OFFSET | + opt->channelmode << AVR32_USART_MR_CHMODE_OFFSET; + + if (opt->stopbits > USART_2_STOPBITS) + { + // Set two stop bits + usart->mr |= AVR32_USART_MR_NBSTOP_2 << AVR32_USART_MR_NBSTOP_OFFSET; + // and a timeguard period gives the rest. + usart->ttgr = opt->stopbits - USART_2_STOPBITS; + } + else + // Insert 1 or 2 stop bits. + usart->mr |= opt->stopbits << AVR32_USART_MR_NBSTOP_OFFSET; + + // Set normal mode. + usart->mr = (usart->mr & ~AVR32_USART_MR_MODE_MASK) | + AVR32_USART_MR_MODE_NORMAL << AVR32_USART_MR_MODE_OFFSET; + + // Setup complete; enable communication. + // Enable input and output. + usart->cr = AVR32_USART_CR_RXEN_MASK | + AVR32_USART_CR_TXEN_MASK; + + return USART_SUCCESS; +} + + +int usart_init_rs485(volatile avr32_usart_t *usart, const usart_options_t *opt, long pba_hz) +{ + // First: Setup standard RS232. + if (usart_init_rs232(usart, opt, pba_hz) == USART_INVALID_INPUT) + return USART_INVALID_INPUT; + + // Set RS485 mode. + usart->mr = (usart->mr & ~AVR32_USART_MR_MODE_MASK) | + AVR32_USART_MR_MODE_RS485 << AVR32_USART_MR_MODE_OFFSET; + + return USART_SUCCESS; +} + + +int usart_init_IrDA(volatile avr32_usart_t *usart, const usart_options_t *opt, + long pba_hz, unsigned char irda_filter) +{ + // First: Setup standard RS232. + if (usart_init_rs232(usart, opt, pba_hz) == USART_INVALID_INPUT) + return USART_INVALID_INPUT; + + // Set IrDA filter. + usart->ifr = irda_filter; + + // Set IrDA mode and activate filtering of input. + usart->mr = (usart->mr & ~AVR32_USART_MR_MODE_MASK) | + AVR32_USART_MODE_IRDA << AVR32_USART_MR_MODE_OFFSET | + AVR32_USART_MR_FILTER_MASK; + + return USART_SUCCESS; +} + + +int usart_init_iso7816(volatile avr32_usart_t *usart, const usart_iso7816_options_t *opt, int t, long pba_hz) +{ + // Reset the USART and shutdown TX and RX. + usart_reset(usart); + + // Check input values. + if (!opt || // Null pointer. + opt->paritytype > 1) + return USART_INVALID_INPUT; + + if (t == 0) + { + // Set USART mode to ISO7816, T=0. + // The T=0 protocol always uses 2 stop bits. + usart->mr = AVR32_USART_MR_MODE_ISO7816_T0 << AVR32_USART_MR_MODE_OFFSET | + AVR32_USART_MR_NBSTOP_2 << AVR32_USART_MR_NBSTOP_OFFSET | + opt->bit_order << AVR32_USART_MR_MSBF_OFFSET; // Allow MSBF in T=0. + } + else if (t == 1) + { + // Only LSB first in the T=1 protocol. + // max_iterations field is only used in T=0 mode. + if (opt->bit_order != 0 || + opt->max_iterations != 0) + return USART_INVALID_INPUT; + + // Set USART mode to ISO7816, T=1. + // The T=1 protocol always uses 1 stop bit. + usart->mr = AVR32_USART_MR_MODE_ISO7816_T1 << AVR32_USART_MR_MODE_OFFSET | + AVR32_USART_MR_NBSTOP_1 << AVR32_USART_MR_NBSTOP_OFFSET; + } + else + return USART_INVALID_INPUT; + + if (usart_set_iso7816_clock(usart, opt->iso7816_hz, pba_hz) == USART_INVALID_INPUT) + return USART_INVALID_INPUT; + + // Set FIDI register: bit rate = selected clock/FI_DI_ratio/16. + usart->fidi = opt->fidi_ratio; + + // Set ISO7816 spesific options in the MODE register. + usart->mr |= opt->paritytype << AVR32_USART_MR_PAR_OFFSET | + AVR32_USART_MR_CLKO_MASK | // Enable clock output. + opt->inhibit_nack << AVR32_USART_MR_INACK_OFFSET | + opt->dis_suc_nack << AVR32_USART_MR_DSNACK_OFFSET | + opt->max_iterations << AVR32_USART_MR_MAX_ITERATION_OFFSET; + + // Setup complete; enable the receiver by default. + usart_iso7816_enable_receiver(usart); + + return USART_SUCCESS; +} + + +#if defined(AVR32_USART_400_H_INCLUDED) || \ + defined(AVR32_USART_410_H_INCLUDED) || \ + defined(AVR32_USART_420_H_INCLUDED) || \ + defined(AVR32_USART_440_H_INCLUDED) || \ + defined(AVR32_USART_602_H_INCLUDED) + + +int usart_init_lin_master(volatile avr32_usart_t *usart, unsigned long baudrate, long pba_hz) +{ + // Reset the USART and shutdown TX and RX. + usart_reset(usart); + + // Check input values. + if (usart_set_async_baudrate(usart, baudrate, pba_hz) == USART_INVALID_INPUT) + return USART_INVALID_INPUT; + + usart->mr |= AVR32_USART_MR_MODE_LIN_MASTER << AVR32_USART_MR_MODE_OFFSET; // LIN master mode. + + // Setup complete; enable communication. + // Enable input and output. + usart->cr = AVR32_USART_CR_RXEN_MASK | + AVR32_USART_CR_TXEN_MASK; + + return USART_SUCCESS; +} + + +int usart_init_lin_slave(volatile avr32_usart_t *usart, unsigned long baudrate, long pba_hz) +{ + // Reset the USART and shutdown TX and RX. + usart_reset(usart); + + // Check input values. + if (usart_set_async_baudrate(usart, baudrate, pba_hz) == USART_INVALID_INPUT) + return USART_INVALID_INPUT; + + usart->mr |= AVR32_USART_MR_MODE_LIN_SLAVE << AVR32_USART_MR_MODE_OFFSET; // LIN slave mode. + + // Setup complete; enable communication. + // Enable input and output. + usart->cr = AVR32_USART_CR_RXEN_MASK | + AVR32_USART_CR_TXEN_MASK; + + return USART_SUCCESS; +} + + +int usart_init_spi_master(volatile avr32_usart_t *usart, const usart_spi_options_t *opt, long pba_hz) +{ + // Reset the USART and shutdown TX and RX. + usart_reset(usart); + + // Check input values. + if (!opt || // Null pointer. + opt->charlength < 5 || opt->charlength > 9 || + opt->spimode > 3 || + opt->channelmode > 3 || + usart_set_spi_master_baudrate(usart, opt->baudrate, pba_hz) == USART_INVALID_INPUT) + return USART_INVALID_INPUT; + + if (opt->charlength == 9) + { + // Character length set to 9 bits. MODE9 dominates CHRL. + usart->mr |= AVR32_USART_MR_MODE9_MASK; + } + else + { + // CHRL gives the character length (- 5) when MODE9 = 0. + usart->mr |= (opt->charlength - 5) << AVR32_USART_MR_CHRL_OFFSET; + } + + usart->mr |= AVR32_USART_MR_MODE_SPI_MASTER << AVR32_USART_MR_MODE_OFFSET | // SPI master mode. + ((opt->spimode & 0x1) ^ 0x1) << AVR32_USART_MR_SYNC_OFFSET | // SPI clock phase. + opt->channelmode << AVR32_USART_MR_CHMODE_OFFSET | // Channel mode. + (opt->spimode >> 1) << AVR32_USART_MR_MSBF_OFFSET | // SPI clock polarity. + AVR32_USART_MR_CLKO_MASK; // Drive SCK pin. + + // Setup complete; enable communication. + // Enable input and output. + usart->cr = AVR32_USART_CR_RXEN_MASK | + AVR32_USART_CR_TXEN_MASK; + + return USART_SUCCESS; +} + + +int usart_init_spi_slave(volatile avr32_usart_t *usart, const usart_spi_options_t *opt, long pba_hz) +{ + // Reset the USART and shutdown TX and RX. + usart_reset(usart); + + // Check input values. + if (!opt || // Null pointer. + opt->charlength < 5 || opt->charlength > 9 || + opt->spimode > 3 || + opt->channelmode > 3 || + usart_set_spi_slave_baudrate(usart) == USART_INVALID_INPUT) + return USART_INVALID_INPUT; + + if (opt->charlength == 9) + { + // Character length set to 9 bits. MODE9 dominates CHRL. + usart->mr |= AVR32_USART_MR_MODE9_MASK; + } + else + { + // CHRL gives the character length (- 5) when MODE9 = 0. + usart->mr |= (opt->charlength - 5) << AVR32_USART_MR_CHRL_OFFSET; + } + + usart->mr |= AVR32_USART_MR_MODE_SPI_SLAVE << AVR32_USART_MR_MODE_OFFSET | // SPI slave mode. + ((opt->spimode & 0x1) ^ 0x1) << AVR32_USART_MR_SYNC_OFFSET | // SPI clock phase. + opt->channelmode << AVR32_USART_MR_CHMODE_OFFSET | // Channel mode. + (opt->spimode >> 1) << AVR32_USART_MR_MSBF_OFFSET; // SPI clock polarity. + + // Setup complete; enable communication. + // Enable input and output. + usart->cr = AVR32_USART_CR_RXEN_MASK | + AVR32_USART_CR_TXEN_MASK; + + return USART_SUCCESS; +} + + +#endif // USART rev. >= 4.0.0 + + +//! @} + + +//------------------------------------------------------------------------------ +#if defined(AVR32_USART_400_H_INCLUDED) || \ + defined(AVR32_USART_410_H_INCLUDED) || \ + defined(AVR32_USART_420_H_INCLUDED) || \ + defined(AVR32_USART_440_H_INCLUDED) || \ + defined(AVR32_USART_602_H_INCLUDED) + + +/*! \name SPI Control Functions + */ +//! @{ + + +int usart_spi_selectChip(volatile avr32_usart_t *usart) +{ + // Force the SPI chip select. + usart->cr = AVR32_USART_CR_RTSEN_MASK; + + return USART_SUCCESS; +} + + +int usart_spi_unselectChip(volatile avr32_usart_t *usart) +{ + int timeout = USART_DEFAULT_TIMEOUT; + + do + { + if (!timeout--) return USART_FAILURE; + } while (!usart_tx_empty(usart)); + + // Release the SPI chip select. + usart->cr = AVR32_USART_CR_RTSDIS_MASK; + + return USART_SUCCESS; +} + + +//! @} + + +#endif // USART rev. >= 4.0.0 + + +//------------------------------------------------------------------------------ +/*! \name Transmit/Receive Functions + */ +//! @{ + + +int usart_send_address(volatile avr32_usart_t *usart, int address) +{ + // Check if USART is in multidrop / RS485 mode. + if (!usart_mode_is_multidrop(usart)) return USART_MODE_FAULT; + + // Prepare to send an address. + usart->cr = AVR32_USART_CR_SENDA_MASK; + + // Write the address to TX. + usart_bw_write_char(usart, address); + + return USART_SUCCESS; +} + + +int usart_write_char(volatile avr32_usart_t *usart, int c) +{ + if (usart_tx_ready(usart)) + { + usart->thr = (c << AVR32_USART_THR_TXCHR_OFFSET) & AVR32_USART_THR_TXCHR_MASK; + return USART_SUCCESS; + } + else + return USART_TX_BUSY; +} + + +int usart_putchar(volatile avr32_usart_t *usart, int c) +{ + int timeout = USART_DEFAULT_TIMEOUT; + + if (c == '\n') + { + do + { + if (!timeout--) return USART_FAILURE; + } while (usart_write_char(usart, '\r') != USART_SUCCESS); + + timeout = USART_DEFAULT_TIMEOUT; + } + + do + { + if (!timeout--) return USART_FAILURE; + } while (usart_write_char(usart, c) != USART_SUCCESS); + + return USART_SUCCESS; +} + + +int usart_read_char(volatile avr32_usart_t *usart, int *c) +{ + // Check for errors: frame, parity and overrun. In RS485 mode, a parity error + // would mean that an address char has been received. + if (usart->csr & (AVR32_USART_CSR_OVRE_MASK | + AVR32_USART_CSR_FRAME_MASK | + AVR32_USART_CSR_PARE_MASK)) + return USART_RX_ERROR; + + // No error; if we really did receive a char, read it and return SUCCESS. + if (usart_test_hit(usart)) + { + *c = (usart->rhr & AVR32_USART_RHR_RXCHR_MASK) >> AVR32_USART_RHR_RXCHR_OFFSET; + return USART_SUCCESS; + } + else + return USART_RX_EMPTY; +} + + +int usart_getchar(volatile avr32_usart_t *usart) +{ + int c, ret; + + while ((ret = usart_read_char(usart, &c)) == USART_RX_EMPTY); + + if (ret == USART_RX_ERROR) + return USART_FAILURE; + + return c; +} + + +void usart_write_line(volatile avr32_usart_t *usart, const char *string) +{ + while (*string != '\0') + usart_putchar(usart, *string++); +} + + +int usart_get_echo_line(volatile avr32_usart_t *usart) +{ + int rx_char; + int retval = USART_SUCCESS; + + while (1) + { + rx_char = usart_getchar(usart); + if (rx_char == USART_FAILURE) + { + usart_write_line(usart, "Error!!!\n"); + retval = USART_FAILURE; + break; + } + if (rx_char == '\x03') + { + retval = USART_FAILURE; + break; + } + usart_putchar(usart, rx_char); + if (rx_char == '\r') + { + usart_putchar(usart, '\n'); + break; + } + } + + return retval; +} + + +//! @} diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/USART/usart.h b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/USART/usart.h new file mode 100644 index 000000000..bc1c100f8 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/USART/usart.h @@ -0,0 +1,889 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief USART driver for AVR32 UC3. + * + * This file contains basic functions for the AVR32 USART, with support for all + * modes, settings and clock speeds. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with a USART module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _USART_H_ +#define _USART_H_ + +#include +#include "compiler.h" + + +/*! \name Return Values + */ +//! @{ +#define USART_SUCCESS 0 //!< Successful completion. +#define USART_FAILURE -1 //!< Failure because of some unspecified reason. +#define USART_INVALID_INPUT 1 //!< Input value out of range. +#define USART_INVALID_ARGUMENT -1 //!< Argument value out of range. +#define USART_TX_BUSY 2 //!< Transmitter was busy. +#define USART_RX_EMPTY 3 //!< Nothing was received. +#define USART_RX_ERROR 4 //!< Transmission error occurred. +#define USART_MODE_FAULT 5 //!< USART not in the appropriate mode. +//! @} + +//! Default time-out value (number of attempts). +#define USART_DEFAULT_TIMEOUT 10000 + +/*! \name Parity Settings + */ +//! @{ +#define USART_EVEN_PARITY AVR32_USART_MR_PAR_EVEN //!< Use even parity on character transmission. +#define USART_ODD_PARITY AVR32_USART_MR_PAR_ODD //!< Use odd parity on character transmission. +#define USART_SPACE_PARITY AVR32_USART_MR_PAR_SPACE //!< Use a space as parity bit. +#define USART_MARK_PARITY AVR32_USART_MR_PAR_MARK //!< Use a mark as parity bit. +#define USART_NO_PARITY AVR32_USART_MR_PAR_NONE //!< Don't use a parity bit. +#define USART_MULTIDROP_PARITY AVR32_USART_MR_PAR_MULTI //!< Parity bit is used to flag address characters. +//! @} + +/*! \name Stop Bits Settings + */ +//! @{ +#define USART_1_STOPBIT AVR32_USART_MR_NBSTOP_1 //!< Use 1 stop bit. +#define USART_1_5_STOPBITS AVR32_USART_MR_NBSTOP_1_5 //!< Use 1.5 stop bits. +#define USART_2_STOPBITS AVR32_USART_MR_NBSTOP_2 //!< Use 2 stop bits (for more, just give the number of bits). +//! @} + +/*! \name Channel Modes + */ +//! @{ +#define USART_NORMAL_CHMODE AVR32_USART_MR_CHMODE_NORMAL //!< Normal communication. +#define USART_AUTO_ECHO AVR32_USART_MR_CHMODE_ECHO //!< Echo data. +#define USART_LOCAL_LOOPBACK AVR32_USART_MR_CHMODE_LOCAL_LOOP //!< Local loopback. +#define USART_REMOTE_LOOPBACK AVR32_USART_MR_CHMODE_REMOTE_LOOP //!< Remote loopback. +//! @} + +#if defined(AVR32_USART_400_H_INCLUDED) || \ + defined(AVR32_USART_410_H_INCLUDED) || \ + defined(AVR32_USART_420_H_INCLUDED) || \ + defined(AVR32_USART_440_H_INCLUDED) || \ + defined(AVR32_USART_602_H_INCLUDED) + +/*! \name LIN Node Actions + */ +//! @{ +#define USART_LIN_PUBLISH_ACTION AVR32_USART_LINMR_NACT_PUBLISH //!< The USART transmits the response. +#define USART_LIN_SUBSCRIBE_ACTION AVR32_USART_LINMR_NACT_SUBSCRIBE //!< The USART receives the response. +#define USART_LIN_IGNORE_ACTION AVR32_USART_LINMR_NACT_IGNORE //!< The USART does not transmit and does not receive the reponse. +//! @} + +/*! \name LIN Checksum Types + */ +//! @{ +#define USART_LIN_ENHANCED_CHECKSUM 0 //!< LIN 2.0 "enhanced" checksum. +#define USART_LIN_CLASSIC_CHECKSUM 1 //!< LIN 1.3 "classic" checksum. +//! @} + +#endif // USART rev. >= 4.0.0 + + +//! Input parameters when initializing RS232 and similar modes. +typedef struct +{ + //! Set baud rate of the USART (unused in slave modes). + unsigned long baudrate; + + //! Number of bits to transmit as a character (5 to 9). + unsigned char charlength; + + //! How to calculate the parity bit: \ref USART_EVEN_PARITY, \ref USART_ODD_PARITY, + //! \ref USART_SPACE_PARITY, \ref USART_MARK_PARITY, \ref USART_NO_PARITY or + //! \ref USART_MULTIDROP_PARITY. + unsigned char paritytype; + + //! Number of stop bits between two characters: \ref USART_1_STOPBIT, + //! \ref USART_1_5_STOPBITS, \ref USART_2_STOPBITS or any number from 3 to 257 + //! which will result in a time guard period of that length between characters. + //! \note \ref USART_1_5_STOPBITS is supported in asynchronous modes only. + unsigned short stopbits; + + //! Run the channel in testmode: \ref USART_NORMAL_CHMODE, \ref USART_AUTO_ECHO, + //! \ref USART_LOCAL_LOOPBACK or \ref USART_REMOTE_LOOPBACK. + unsigned char channelmode; +} usart_options_t; + +//! Input parameters when initializing ISO7816 mode. +typedef struct +{ + //! Set the frequency of the ISO7816 clock. + unsigned long iso7816_hz; + + //! The number of ISO7816 clock ticks in every bit period (1 to 2047, 0 = disable clock). + //! Bit rate = \ref iso7816_hz / \ref fidi_ratio. + unsigned short fidi_ratio; + + //! How to calculate the parity bit: \ref USART_EVEN_PARITY for normal mode or + //! \ref USART_ODD_PARITY for inverse mode. + unsigned char paritytype; + + //! Inhibit Non Acknowledge:\n + //! - 0: the NACK is generated;\n + //! - 1: the NACK is not generated. + //! + //! \note This bit will be used only in ISO7816 mode, protocol T = 0 receiver. + int inhibit_nack; + + //! Disable successive NACKs. + //! Successive parity errors are counted up to the value in the \ref max_iterations field. + //! These parity errors generate a NACK on the ISO line. As soon as this value is reached, + //! no addititional NACK is sent on the ISO line. The ITERATION flag is asserted. + int dis_suc_nack; + + //! Max number of repetitions (0 to 7). + unsigned char max_iterations; + + //! Bit order in transmitted characters:\n + //! - 0: LSB first;\n + //! - 1: MSB first. + int bit_order; +} usart_iso7816_options_t; + +#if defined(AVR32_USART_400_H_INCLUDED) || \ + defined(AVR32_USART_410_H_INCLUDED) || \ + defined(AVR32_USART_420_H_INCLUDED) || \ + defined(AVR32_USART_440_H_INCLUDED) || \ + defined(AVR32_USART_602_H_INCLUDED) + +//! Input parameters when initializing SPI mode. +typedef struct +{ + //! Set the frequency of the SPI clock (unused in slave mode). + unsigned long baudrate; + + //! Number of bits to transmit as a character (5 to 9). + unsigned char charlength; + + //! Which SPI mode to use. + unsigned char spimode; + + //! Run the channel in testmode: \ref USART_NORMAL_CHMODE, \ref USART_AUTO_ECHO, + //! \ref USART_LOCAL_LOOPBACK or \ref USART_REMOTE_LOOPBACK. + unsigned char channelmode; +} usart_spi_options_t; + +#endif // USART rev. >= 4.0.0 + + +//------------------------------------------------------------------------------ +/*! \name Initialization Functions + */ +//! @{ + +/*! \brief Resets the USART and disables TX and RX. + * + * \param usart Base address of the USART instance. + */ +extern void usart_reset(volatile avr32_usart_t *usart); + +/*! \brief Sets up the USART to use the standard RS232 protocol. + * + * \param usart Base address of the USART instance. + * \param opt Options needed to set up RS232 communication (see \ref usart_options_t). + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * + * \retval USART_SUCCESS Mode successfully initialized. + * \retval USART_INVALID_INPUT One or more of the arguments is out of valid range. + */ +extern int usart_init_rs232(volatile avr32_usart_t *usart, const usart_options_t *opt, long pba_hz); + +/*! \brief Sets up the USART to use the standard RS232 protocol in TX-only mode. + * + * Compared to \ref usart_init_rs232, this function allows very high baud rates + * (up to \a pba_hz instead of \a pba_hz / \c 8) at the expense of full duplex. + * + * \param usart Base address of the USART instance. + * \param opt Options needed to set up RS232 communication (see \ref usart_options_t). + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * + * \retval USART_SUCCESS Mode successfully initialized. + * \retval USART_INVALID_INPUT One or more of the arguments is out of valid range. + * + * \note The \c 1.5 stop bit is not supported in this mode. + */ +extern int usart_init_rs232_tx_only(volatile avr32_usart_t *usart, const usart_options_t *opt, long pba_hz); + +/*! \brief Sets up the USART to use hardware handshaking. + * + * \param usart Base address of the USART instance. + * \param opt Options needed to set up RS232 communication (see \ref usart_options_t). + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * + * \retval USART_SUCCESS Mode successfully initialized. + * \retval USART_INVALID_INPUT One or more of the arguments is out of valid range. + * + * \note \ref usart_init_rs232 does not need to be invoked before this function. + */ +extern int usart_init_hw_handshaking(volatile avr32_usart_t *usart, const usart_options_t *opt, long pba_hz); + +/*! \brief Sets up the USART to use the modem protocol, activating dedicated inputs/outputs. + * + * \param usart Base address of the USART instance. + * \param opt Options needed to set up RS232 communication (see \ref usart_options_t). + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * + * \retval USART_SUCCESS Mode successfully initialized. + * \retval USART_INVALID_INPUT One or more of the arguments is out of valid range. + */ +extern int usart_init_modem(volatile avr32_usart_t *usart, const usart_options_t *opt, long pba_hz); + +/*! \brief Sets up the USART to use a synchronous RS232-like protocol in master mode. + * + * \param usart Base address of the USART instance. + * \param opt Options needed to set up RS232 communication (see \ref usart_options_t). + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * + * \retval USART_SUCCESS Mode successfully initialized. + * \retval USART_INVALID_INPUT One or more of the arguments is out of valid range. + */ +extern int usart_init_sync_master(volatile avr32_usart_t *usart, const usart_options_t *opt, long pba_hz); + +/*! \brief Sets up the USART to use a synchronous RS232-like protocol in slave mode. + * + * \param usart Base address of the USART instance. + * \param opt Options needed to set up RS232 communication (see \ref usart_options_t). + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * + * \retval USART_SUCCESS Mode successfully initialized. + * \retval USART_INVALID_INPUT One or more of the arguments is out of valid range. + */ +extern int usart_init_sync_slave(volatile avr32_usart_t *usart, const usart_options_t *opt, long pba_hz); + +/*! \brief Sets up the USART to use the RS485 protocol. + * + * \param usart Base address of the USART instance. + * \param opt Options needed to set up RS232 communication (see \ref usart_options_t). + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * + * \retval USART_SUCCESS Mode successfully initialized. + * \retval USART_INVALID_INPUT One or more of the arguments is out of valid range. + */ +extern int usart_init_rs485(volatile avr32_usart_t *usart, const usart_options_t *opt, long pba_hz); + +/*! \brief Sets up the USART to use the IrDA protocol. + * + * \param usart Base address of the USART instance. + * \param opt Options needed to set up RS232 communication (see \ref usart_options_t). + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * \param irda_filter Counter used to distinguish received ones from zeros. + * + * \retval USART_SUCCESS Mode successfully initialized. + * \retval USART_INVALID_INPUT One or more of the arguments is out of valid range. + */ +extern int usart_init_IrDA(volatile avr32_usart_t *usart, const usart_options_t *opt, + long pba_hz, unsigned char irda_filter); + +/*! \brief Sets up the USART to use the ISO7816 T=0 or T=1 smartcard protocols. + * + * The receiver is enabled by default. \ref usart_iso7816_enable_receiver and + * \ref usart_iso7816_enable_transmitter can be called to change the half-duplex + * communication direction. + * + * \param usart Base address of the USART instance. + * \param opt Options needed to set up ISO7816 communication (see \ref usart_iso7816_options_t). + * \param t ISO7816 mode to use (T=0 or T=1). + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * + * \retval USART_SUCCESS Mode successfully initialized. + * \retval USART_INVALID_INPUT One or more of the arguments is out of valid range. + */ +extern int usart_init_iso7816(volatile avr32_usart_t *usart, const usart_iso7816_options_t *opt, int t, long pba_hz); + +#if defined(AVR32_USART_400_H_INCLUDED) || \ + defined(AVR32_USART_410_H_INCLUDED) || \ + defined(AVR32_USART_420_H_INCLUDED) || \ + defined(AVR32_USART_440_H_INCLUDED) || \ + defined(AVR32_USART_602_H_INCLUDED) + +/*! \brief Sets up the USART to use the LIN master mode. + * + * \param usart Base address of the USART instance. + * \param baudrate Baud rate. + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * + */ +extern int usart_init_lin_master(volatile avr32_usart_t *usart, unsigned long baudrate, long pba_hz); + +/*! \brief Sets up the USART to use the LIN slave mode. + * + * \param usart Base address of the USART instance. + * \param baudrate Baud rate. + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * + */ +extern int usart_init_lin_slave(volatile avr32_usart_t *usart, unsigned long baudrate, long pba_hz); + +/*! \brief Sets up the USART to use the SPI master mode. + * + * \ref usart_spi_selectChip and \ref usart_spi_unselectChip can be called to + * select or unselect the SPI slave chip. + * + * \param usart Base address of the USART instance. + * \param opt Options needed to set up SPI mode (see \ref usart_spi_options_t). + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * + * \retval USART_SUCCESS Mode successfully initialized. + * \retval USART_INVALID_INPUT One or more of the arguments is out of valid range. + */ +extern int usart_init_spi_master(volatile avr32_usart_t *usart, const usart_spi_options_t *opt, long pba_hz); + +/*! \brief Sets up the USART to use the SPI slave mode. + * + * \param usart Base address of the USART instance. + * \param opt Options needed to set up SPI mode (see \ref usart_spi_options_t). + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * + * \retval USART_SUCCESS Mode successfully initialized. + * \retval USART_INVALID_INPUT One or more of the arguments is out of valid range. + */ +extern int usart_init_spi_slave(volatile avr32_usart_t *usart, const usart_spi_options_t *opt, long pba_hz); + +#endif // USART rev. >= 4.0.0 + +//! @} + + +//------------------------------------------------------------------------------ +/*! \name Read and Reset Error Status Bits + */ +//! @{ + +/*! \brief Resets the error status. + * + * This function resets the status bits indicating that a parity error, + * framing error or overrun has occurred. The RXBRK bit, indicating + * a start/end of break condition on the RX line, is also reset. + * + * \param usart Base address of the USART instance. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void usart_reset_status(volatile avr32_usart_t *usart) +{ + usart->cr = AVR32_USART_CR_RSTSTA_MASK; +} + +/*! \brief Checks if a parity error has occurred since last status reset. + * + * \param usart Base address of the USART instance. + * + * \return \c 1 if a parity error has been detected, otherwise \c 0. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ int usart_parity_error(volatile avr32_usart_t *usart) +{ + return (usart->csr & AVR32_USART_CSR_PARE_MASK) != 0; +} + +/*! \brief Checks if a framing error has occurred since last status reset. + * + * \param usart Base address of the USART instance. + * + * \return \c 1 if a framing error has been detected, otherwise \c 0. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ int usart_framing_error(volatile avr32_usart_t *usart) +{ + return (usart->csr & AVR32_USART_CSR_FRAME_MASK) != 0; +} + +/*! \brief Checks if an overrun error has occurred since last status reset. + * + * \param usart Base address of the USART instance. + * + * \return \c 1 if a overrun error has been detected, otherwise \c 0. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ int usart_overrun_error(volatile avr32_usart_t *usart) +{ + return (usart->csr & AVR32_USART_CSR_OVRE_MASK) != 0; +} + +#if defined(AVR32_USART_400_H_INCLUDED) || \ + defined(AVR32_USART_410_H_INCLUDED) || \ + defined(AVR32_USART_420_H_INCLUDED) || \ + defined(AVR32_USART_440_H_INCLUDED) || \ + defined(AVR32_USART_602_H_INCLUDED) + +/*! \brief Get LIN Error Status + * + * \param usart Base address of the USART instance. + * + * \retval The binary value of the error field. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ int usart_lin_get_error(volatile avr32_usart_t *usart) +{ + return (usart->csr & (AVR32_USART_CSR_LINSNRE_MASK | + AVR32_USART_CSR_LINCE_MASK | + AVR32_USART_CSR_LINIPE_MASK | + AVR32_USART_CSR_LINISFE_MASK | + AVR32_USART_CSR_LINBE_MASK)) >> AVR32_USART_CSR_LINBE_OFFSET; +} + +#endif // USART rev. >= 4.0.0 + +//! @} + + +//------------------------------------------------------------------------------ +/*! \name ISO7816 Control Functions + */ +//! @{ + +/*! \brief Enables the ISO7816 receiver. + * + * The ISO7816 transmitter is disabled. + * + * \param usart Base address of the USART instance. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void usart_iso7816_enable_receiver(volatile avr32_usart_t *usart) +{ + usart->cr = AVR32_USART_CR_TXDIS_MASK | AVR32_USART_CR_RXEN_MASK; +} + +/*! \brief Enables the ISO7816 transmitter. + * + * The ISO7816 receiver is disabled. + * + * \param usart Base address of the USART instance. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void usart_iso7816_enable_transmitter(volatile avr32_usart_t *usart) +{ + usart->cr = AVR32_USART_CR_RXDIS_MASK | AVR32_USART_CR_TXEN_MASK; +} + +//! @} + + +//------------------------------------------------------------------------------ +#if defined(AVR32_USART_400_H_INCLUDED) || \ + defined(AVR32_USART_410_H_INCLUDED) || \ + defined(AVR32_USART_420_H_INCLUDED) || \ + defined(AVR32_USART_440_H_INCLUDED) || \ + defined(AVR32_USART_602_H_INCLUDED) + +/*! \name LIN Control Functions + */ +//! @{ + +/*! \brief Sets the node action. + * + * \param usart Base address of the USART instance. + * \param action The node action: \ref USART_LIN_PUBLISH_ACTION, + * \ref USART_LIN_SUBSCRIBE_ACTION or + * \ref USART_LIN_IGNORE_ACTION. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void usart_lin_set_node_action(volatile avr32_usart_t *usart, unsigned char action) +{ + usart->linmr = (usart->linmr & ~AVR32_USART_LINMR_NACT_MASK) | + action << AVR32_USART_LINMR_NACT_OFFSET; +} + +/*! \brief Enables or disables the Identifier parity. + * + * \param usart Base address of the USART instance. + * \param parity Whether to enable the Identifier parity: \c TRUE or \c FALSE. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void usart_lin_enable_parity(volatile avr32_usart_t *usart, unsigned char parity) +{ + usart->linmr = (usart->linmr & ~AVR32_USART_LINMR_PARDIS_MASK) | + !parity << AVR32_USART_LINMR_PARDIS_OFFSET; +} + +/*! \brief Enables or disables the checksum. + * + * \param usart Base address of the USART instance. + * \param parity Whether to enable the checksum: \c TRUE or \c FALSE. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void usart_lin_enable_checksum(volatile avr32_usart_t *usart, unsigned char checksum) +{ + usart->linmr = (usart->linmr & ~AVR32_USART_LINMR_CHKDIS_MASK) | + !checksum << AVR32_USART_LINMR_CHKDIS_OFFSET; +} + +/*! \brief Sets the checksum type. + * + * \param usart Base address of the USART instance. + * \param chktyp The checksum type: \ref USART_LIN_ENHANCED_CHEKSUM or + * \ref USART_LIN_CLASSIC_CHECKSUM. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void usart_lin_set_checksum(volatile avr32_usart_t *usart, unsigned char chktyp) +{ + usart->linmr = (usart->linmr & ~AVR32_USART_LINMR_CHKTYP_MASK) | + chktyp << AVR32_USART_LINMR_CHKTYP_OFFSET; +} + +/*! \brief Gets the response data length. + * + * \param usart Base address of the USART instance. + * + * \return The response data length. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ unsigned char usart_lin_get_data_length(volatile avr32_usart_t *usart) +{ + if (usart->linmr & AVR32_USART_LINMR_DLM_MASK) + { + unsigned char data_length = 1 << ((usart->linir >> (AVR32_USART_LINIR_IDCHR_OFFSET + 4)) & 0x03); + if (data_length == 1) + data_length = 2; + return data_length; + } + else + return ((usart->linmr & AVR32_USART_LINMR_DLC_MASK) >> AVR32_USART_LINMR_DLC_OFFSET) + 1; +} + +/*! \brief Sets the response data length for LIN 1.x. + * + * \param usart Base address of the USART instance. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void usart_lin_set_data_length_lin1x(volatile avr32_usart_t *usart) +{ + usart->linmr |= AVR32_USART_LINMR_DLM_MASK; +} + +/*! \brief Sets the response data length for LIN 2.x. + * + * \param usart Base address of the USART instance. + * \param data_length The response data length. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void usart_lin_set_data_length_lin2x(volatile avr32_usart_t *usart, unsigned char data_length) +{ + usart->linmr = (usart->linmr & ~(AVR32_USART_LINMR_DLC_MASK | + AVR32_USART_LINMR_DLM_MASK)) | + (data_length - 1) << AVR32_USART_LINMR_DLC_OFFSET; +} + +/*! \brief Enables or disables the frame slot mode. + * + * \param usart Base address of the USART instance. + * \param frameslot Whether to enable the frame slot mode: \c TRUE or + * \c FALSE. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void usart_lin_enable_frameslot(volatile avr32_usart_t *usart, unsigned char frameslot) +{ + usart->linmr = (usart->linmr & ~AVR32_USART_LINMR_FSDIS_MASK) | + !frameslot << AVR32_USART_LINMR_FSDIS_OFFSET; +} + +/*! \brief Gets the Identifier character. + * + * \param usart Base address of the USART instance. + * + * \return The Identifier character. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ unsigned char usart_lin_get_id_char(volatile avr32_usart_t *usart) +{ + return (usart->linir & AVR32_USART_LINIR_IDCHR_MASK) >> AVR32_USART_LINIR_IDCHR_OFFSET; +} + +/*! \brief Sets the Identifier character. + * + * \param usart Base address of the USART instance. + * \param id_char The Identifier character. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void usart_lin_set_id_char(volatile avr32_usart_t *usart, unsigned char id_char) +{ + usart->linir = (usart->linir & ~AVR32_USART_LINIR_IDCHR_MASK) | + id_char << AVR32_USART_LINIR_IDCHR_OFFSET; +} + +//! @} + +#endif // USART rev. >= 4.0.0 + + +//------------------------------------------------------------------------------ +#if defined(AVR32_USART_400_H_INCLUDED) || \ + defined(AVR32_USART_410_H_INCLUDED) || \ + defined(AVR32_USART_420_H_INCLUDED) || \ + defined(AVR32_USART_440_H_INCLUDED) || \ + defined(AVR32_USART_602_H_INCLUDED) + +/*! \name SPI Control Functions + */ +//! @{ + +/*! \brief Selects SPI slave chip. + * + * \param usart Base address of the USART instance. + * + * \retval USART_SUCCESS Success. + */ +extern int usart_spi_selectChip(volatile avr32_usart_t *usart); + +/*! \brief Unselects SPI slave chip. + * + * \param usart Base address of the USART instance. + * + * \retval USART_SUCCESS Success. + * \retval USART_FAILURE Time-out. + */ +extern int usart_spi_unselectChip(volatile avr32_usart_t *usart); + +//! @} + +#endif // USART rev. >= 4.0.0 + + +//------------------------------------------------------------------------------ +/*! \name Transmit/Receive Functions + */ +//! @{ + +/*! \brief Addresses a receiver. + * + * While in RS485 mode, receivers only accept data addressed to them. + * A packet/char with the address tag set has to precede any data. + * This function is used to address a receiver. This receiver should read + * all the following data, until an address packet addresses another receiver. + * + * \param usart Base address of the USART instance. + * \param address Address of the target device. + * + * \retval USART_SUCCESS Address successfully sent (if current mode is RS485). + * \retval USART_MODE_FAULT Wrong operating mode. + */ +extern int usart_send_address(volatile avr32_usart_t *usart, int address); + +/*! \brief Tests if the USART is ready to transmit a character. + * + * \param usart Base address of the USART instance. + * + * \return \c 1 if the USART Transmit Holding Register is free, otherwise \c 0. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ int usart_tx_ready(volatile avr32_usart_t *usart) +{ + return (usart->csr & AVR32_USART_CSR_TXRDY_MASK) != 0; +} + +/*! \brief Writes the given character to the TX buffer if the transmitter is ready. + * + * \param usart Base address of the USART instance. + * \param c The character (up to 9 bits) to transmit. + * + * \retval USART_SUCCESS The transmitter was ready. + * \retval USART_TX_BUSY The transmitter was busy. + */ +extern int usart_write_char(volatile avr32_usart_t *usart, int c); + +/*! \brief An active wait writing a character to the USART. + * + * \param usart Base address of the USART instance. + * \param c The character (up to 9 bits) to transmit. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void usart_bw_write_char(volatile avr32_usart_t *usart, int c) +{ + while (usart_write_char(usart, c) != USART_SUCCESS); +} + +/*! \brief Sends a character with the USART. + * + * \param usart Base address of the USART instance. + * \param c Character to write. + * + * \retval USART_SUCCESS The character was written. + * \retval USART_FAILURE The function timed out before the USART transmitter became ready to send. + */ +extern int usart_putchar(volatile avr32_usart_t *usart, int c); + +/*! \brief Tests if all requested USART transmissions are over. + * + * \param usart Base address of the USART instance. + * + * \return \c 1 if the USART Transmit Shift Register and the USART Transmit + * Holding Register are free, otherwise \c 0. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ int usart_tx_empty(volatile avr32_usart_t *usart) +{ + return (usart->csr & AVR32_USART_CSR_TXEMPTY_MASK) != 0; +} + +/*! \brief Tests if the USART contains a received character. + * + * \param usart Base address of the USART instance. + * + * \return \c 1 if the USART Receive Holding Register is full, otherwise \c 0. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ int usart_test_hit(volatile avr32_usart_t *usart) +{ + return (usart->csr & AVR32_USART_CSR_RXRDY_MASK) != 0; +} + +/*! \brief Checks the RX buffer for a received character, and stores it at the + * given memory location. + * + * \param usart Base address of the USART instance. + * \param c Pointer to the where the read character should be stored + * (must be at least short in order to accept 9-bit characters). + * + * \retval USART_SUCCESS The character was read successfully. + * \retval USART_RX_EMPTY The RX buffer was empty. + * \retval USART_RX_ERROR An error was deteceted. + */ +extern int usart_read_char(volatile avr32_usart_t *usart, int *c); + +/*! \brief Waits until a character is received, and returns it. + * + * \param usart Base address of the USART instance. + * + * \return The received character, or \ref USART_FAILURE upon error. + */ +extern int usart_getchar(volatile avr32_usart_t *usart); + +/*! \brief Writes one character string to the USART. + * + * \param usart Base address of the USART instance. + * \param string String to be written. + */ +extern void usart_write_line(volatile avr32_usart_t *usart, const char *string); + +/*! \brief Gets and echoes characters until end of line. + * + * \param usart Base address of the USART instance. + * + * \retval USART_SUCCESS Success. + * \retval USART_FAILURE Low-level error detected or ETX character received. + */ +extern int usart_get_echo_line(volatile avr32_usart_t *usart); + +#if defined(AVR32_USART_400_H_INCLUDED) || \ + defined(AVR32_USART_410_H_INCLUDED) || \ + defined(AVR32_USART_420_H_INCLUDED) || \ + defined(AVR32_USART_440_H_INCLUDED) || \ + defined(AVR32_USART_602_H_INCLUDED) + +/*! \brief Abort LIN transmission. + * + * \param usart Base address of the USART instance. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void usart_lin_abort(volatile avr32_usart_t *usart) +{ + usart->cr = AVR32_USART_LINABT_MASK; +} + +/*! \brief Tests if a LIN transfer has been completed. + * + * \param usart Base address of the USART instance. + * + * \return \c 1 if a LIN transfer has been completed, otherwise \c 0. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ int usart_lin_transfer_completed(volatile avr32_usart_t *usart) +{ + return (usart->csr & AVR32_USART_CSR_LINTC_MASK) != 0; +} + +#endif // USART rev. >= 4.0.0 + +//! @} + + +#endif // _USART_H_ diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS/ctrl_access.c b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS/ctrl_access.c new file mode 100644 index 000000000..09790c259 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS/ctrl_access.c @@ -0,0 +1,571 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Abstraction layer for memory interfaces. + * + * This module contains the interfaces: + * - MEM <-> USB; + * - MEM <-> RAM; + * - MEM <-> MEM. + * + * This module may be configured and expanded to support the following features: + * - write-protected globals; + * - password-protected data; + * - specific features; + * - etc. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +//_____ I N C L U D E S ____________________________________________________ + +#include "compiler.h" +#include "preprocessor.h" +#ifdef FREERTOS_USED +#include "FreeRTOS.h" +#include "semphr.h" +#endif +#include "ctrl_access.h" + + +//_____ D E F I N I T I O N S ______________________________________________ + +#ifdef FREERTOS_USED + +/*! \name LUN Access Protection Macros + */ +//! @{ + +/*! \brief Locks accesses to LUNs. + * + * \return \c TRUE if the access was successfully locked, else \c FALSE. + */ +#define Ctrl_access_lock() ctrl_access_lock() + +/*! \brief Unlocks accesses to LUNs. + */ +#define Ctrl_access_unlock() xSemaphoreGive(ctrl_access_semphr) + +//! @} + +//! Handle to the semaphore protecting accesses to LUNs. +static xSemaphoreHandle ctrl_access_semphr = NULL; + +#else + +/*! \name LUN Access Protection Macros + */ +//! @{ + +/*! \brief Locks accesses to LUNs. + * + * \return \c TRUE if the access was successfully locked, else \c FALSE. + */ +#define Ctrl_access_lock() TRUE + +/*! \brief Unlocks accesses to LUNs. + */ +#define Ctrl_access_unlock() + +//! @} + +#endif // FREERTOS_USED + + +#if MAX_LUN + +/*! \brief Initializes an entry of the LUN descriptor table. + * + * \param lun Logical Unit Number. + * + * \return LUN descriptor table entry initializer. + */ +#if ACCESS_USB == ENABLED && ACCESS_MEM_TO_RAM == ENABLED +#define Lun_desc_entry(lun) \ + {\ + TPASTE3(Lun_, lun, _test_unit_ready),\ + TPASTE3(Lun_, lun, _read_capacity),\ + TPASTE3(Lun_, lun, _wr_protect),\ + TPASTE3(Lun_, lun, _removal),\ + TPASTE3(Lun_, lun, _usb_read_10),\ + TPASTE3(Lun_, lun, _usb_write_10),\ + TPASTE3(Lun_, lun, _mem_2_ram),\ + TPASTE3(Lun_, lun, _ram_2_mem),\ + TPASTE3(LUN_, lun, _NAME)\ + } +#elif ACCESS_USB == ENABLED +#define Lun_desc_entry(lun) \ + {\ + TPASTE3(Lun_, lun, _test_unit_ready),\ + TPASTE3(Lun_, lun, _read_capacity),\ + TPASTE3(Lun_, lun, _wr_protect),\ + TPASTE3(Lun_, lun, _removal),\ + TPASTE3(Lun_, lun, _usb_read_10),\ + TPASTE3(Lun_, lun, _usb_write_10),\ + TPASTE3(LUN_, lun, _NAME)\ + } +#elif ACCESS_MEM_TO_RAM == ENABLED +#define Lun_desc_entry(lun) \ + {\ + TPASTE3(Lun_, lun, _test_unit_ready),\ + TPASTE3(Lun_, lun, _read_capacity),\ + TPASTE3(Lun_, lun, _wr_protect),\ + TPASTE3(Lun_, lun, _removal),\ + TPASTE3(Lun_, lun, _mem_2_ram),\ + TPASTE3(Lun_, lun, _ram_2_mem),\ + TPASTE3(LUN_, lun, _NAME)\ + } +#else +#define Lun_desc_entry(lun) \ + {\ + TPASTE3(Lun_, lun, _test_unit_ready),\ + TPASTE3(Lun_, lun, _read_capacity),\ + TPASTE3(Lun_, lun, _wr_protect),\ + TPASTE3(Lun_, lun, _removal),\ + TPASTE3(LUN_, lun, _NAME)\ + } +#endif + +//! LUN descriptor table. +static const struct +{ + Ctrl_status (*test_unit_ready)(void); + Ctrl_status (*read_capacity)(U32 *); + Bool (*wr_protect)(void); + Bool (*removal)(void); +#if ACCESS_USB == ENABLED + Ctrl_status (*usb_read_10)(U32, U16); + Ctrl_status (*usb_write_10)(U32, U16); +#endif +#if ACCESS_MEM_TO_RAM == ENABLED + Ctrl_status (*mem_2_ram)(U32, void *); + Ctrl_status (*ram_2_mem)(U32, const void *); +#endif + const char *name; +} lun_desc[MAX_LUN] = +{ +#if LUN_0 == ENABLE + Lun_desc_entry(0), +#endif +#if LUN_1 == ENABLE + Lun_desc_entry(1), +#endif +#if LUN_2 == ENABLE + Lun_desc_entry(2), +#endif +#if LUN_3 == ENABLE + Lun_desc_entry(3), +#endif +#if LUN_4 == ENABLE + Lun_desc_entry(4), +#endif +#if LUN_5 == ENABLE + Lun_desc_entry(5), +#endif +#if LUN_6 == ENABLE + Lun_desc_entry(6), +#endif +#if LUN_7 == ENABLE + Lun_desc_entry(7) +#endif +}; + +#endif + + +#if GLOBAL_WR_PROTECT == ENABLED +Bool g_wr_protect; +#endif + + +/*! \name Control Interface + */ +//! @{ + + +#ifdef FREERTOS_USED + +Bool ctrl_access_init(void) +{ + // If the handle to the protecting semaphore is not valid, + if (!ctrl_access_semphr) + { + // try to create the semaphore. + vSemaphoreCreateBinary(ctrl_access_semphr); + + // If the semaphore could not be created, there is no backup solution. + if (!ctrl_access_semphr) return FALSE; + } + + return TRUE; +} + + +/*! \brief Locks accesses to LUNs. + * + * \return \c TRUE if the access was successfully locked, else \c FALSE. + */ +static Bool ctrl_access_lock(void) +{ + // If the semaphore could not be created, there is no backup solution. + if (!ctrl_access_semphr) return FALSE; + + // Wait for the semaphore. + while (!xSemaphoreTake(ctrl_access_semphr, portMAX_DELAY)); + + return TRUE; +} + +#endif // FREERTOS_USED + + +U8 get_nb_lun(void) +{ +#if MEM_USB == ENABLE + U8 nb_lun; + + if (!Ctrl_access_lock()) return MAX_LUN; + + nb_lun = MAX_LUN + host_get_lun(); + + Ctrl_access_unlock(); + + return nb_lun; +#else + return MAX_LUN; +#endif +} + + +U8 get_cur_lun(void) +{ + return LUN_ID_0; +} + + +Ctrl_status mem_test_unit_ready(U8 lun) +{ + Ctrl_status status; + + if (!Ctrl_access_lock()) return CTRL_FAIL; + + status = +#if MAX_LUN + (lun < MAX_LUN) ? lun_desc[lun].test_unit_ready() : +#endif +#if LUN_USB == ENABLE + Lun_usb_test_unit_ready(lun - LUN_ID_USB); +#else + CTRL_FAIL; +#endif + + Ctrl_access_unlock(); + + return status; +} + + +Ctrl_status mem_read_capacity(U8 lun, U32 *u32_nb_sector) +{ + Ctrl_status status; + + if (!Ctrl_access_lock()) return CTRL_FAIL; + + status = +#if MAX_LUN + (lun < MAX_LUN) ? lun_desc[lun].read_capacity(u32_nb_sector) : +#endif +#if LUN_USB == ENABLE + Lun_usb_read_capacity(lun - LUN_ID_USB, u32_nb_sector); +#else + CTRL_FAIL; +#endif + + Ctrl_access_unlock(); + + return status; +} + + +U8 mem_sector_size(U8 lun) +{ + U8 sector_size; + + if (!Ctrl_access_lock()) return 0; + + sector_size = +#if MAX_LUN + (lun < MAX_LUN) ? 1 : +#endif +#if LUN_USB == ENABLE + Lun_usb_read_sector_size(lun - LUN_ID_USB); +#else + 0; +#endif + + Ctrl_access_unlock(); + + return sector_size; +} + + +Bool mem_wr_protect(U8 lun) +{ + Bool wr_protect; + + if (!Ctrl_access_lock()) return TRUE; + + wr_protect = +#if MAX_LUN + (lun < MAX_LUN) ? lun_desc[lun].wr_protect() : +#endif +#if LUN_USB == ENABLE + Lun_usb_wr_protect(lun - LUN_ID_USB); +#else + TRUE; +#endif + + Ctrl_access_unlock(); + + return wr_protect; +} + + +Bool mem_removal(U8 lun) +{ + Bool removal; + + if (!Ctrl_access_lock()) return TRUE; + + removal = +#if MAX_LUN + (lun < MAX_LUN) ? lun_desc[lun].removal() : +#endif +#if LUN_USB == ENABLE + Lun_usb_removal(); +#else + TRUE; +#endif + + Ctrl_access_unlock(); + + return removal; +} + + +const char *mem_name(U8 lun) +{ + return +#if MAX_LUN + (lun < MAX_LUN) ? lun_desc[lun].name : +#endif +#if LUN_USB == ENABLE + LUN_USB_NAME; +#else + NULL; +#endif +} + + +//! @} + + +#if ACCESS_USB == ENABLED + +/*! \name MEM <-> USB Interface + */ +//! @{ + + +Ctrl_status memory_2_usb(U8 lun, U32 addr, U16 nb_sector) +{ + Ctrl_status status; + + if (!Ctrl_access_lock()) return CTRL_FAIL; + + memory_start_read_action(nb_sector); + status = +#if MAX_LUN + (lun < MAX_LUN) ? lun_desc[lun].usb_read_10(addr, nb_sector) : +#endif + CTRL_FAIL; + memory_stop_read_action(); + + Ctrl_access_unlock(); + + return status; +} + + +Ctrl_status usb_2_memory(U8 lun, U32 addr, U16 nb_sector) +{ + Ctrl_status status; + + if (!Ctrl_access_lock()) return CTRL_FAIL; + + memory_start_write_action(nb_sector); + status = +#if MAX_LUN + (lun < MAX_LUN) ? lun_desc[lun].usb_write_10(addr, nb_sector) : +#endif + CTRL_FAIL; + memory_stop_write_action(); + + Ctrl_access_unlock(); + + return status; +} + + +//! @} + +#endif // ACCESS_USB == ENABLED + + +#if ACCESS_MEM_TO_RAM == ENABLED + +/*! \name MEM <-> RAM Interface + */ +//! @{ + + +Ctrl_status memory_2_ram(U8 lun, U32 addr, void *ram) +{ + Ctrl_status status; + + if (!Ctrl_access_lock()) return CTRL_FAIL; + + memory_start_read_action(1); + status = +#if MAX_LUN + (lun < MAX_LUN) ? lun_desc[lun].mem_2_ram(addr, ram) : +#endif +#if LUN_USB == ENABLE + Lun_usb_mem_2_ram(addr, ram); +#else + CTRL_FAIL; +#endif + memory_stop_read_action(); + + Ctrl_access_unlock(); + + return status; +} + + +Ctrl_status ram_2_memory(U8 lun, U32 addr, const void *ram) +{ + Ctrl_status status; + + if (!Ctrl_access_lock()) return CTRL_FAIL; + + memory_start_write_action(1); + status = +#if MAX_LUN + (lun < MAX_LUN) ? lun_desc[lun].ram_2_mem(addr, ram) : +#endif +#if LUN_USB == ENABLE + Lun_usb_ram_2_mem(addr, ram); +#else + CTRL_FAIL; +#endif + memory_stop_write_action(); + + Ctrl_access_unlock(); + + return status; +} + + +//! @} + +#endif // ACCESS_MEM_TO_RAM == ENABLED + + +#if ACCESS_STREAM == ENABLED + +/*! \name Streaming MEM <-> MEM Interface + */ +//! @{ + + + #if ACCESS_MEM_TO_MEM == ENABLED + +#include "fat.h" + +Ctrl_status stream_mem_to_mem(U8 src_lun, U32 src_addr, U8 dest_lun, U32 dest_addr, U16 nb_sector) +{ +#if (defined __GNUC__) && (defined __AVR32__) + __attribute__((__aligned__(4))) +#elif (defined __ICCAVR32__) + #pragma data_alignment = 4 +#endif + static U8 sector_buf[FS_512B]; + Ctrl_status status = CTRL_GOOD; + + while (nb_sector--) + { + if ((status = memory_2_ram(src_lun, src_addr++, sector_buf)) != CTRL_GOOD) break; + if ((status = ram_2_memory(dest_lun, dest_addr++, sector_buf)) != CTRL_GOOD) break; + } + + return status; +} + + #endif // ACCESS_MEM_TO_MEM == ENABLED + + +Ctrl_status stream_state(U8 id) +{ + return CTRL_GOOD; +} + + +U16 stream_stop(U8 id) +{ + return 0; +} + + +//! @} + +#endif // ACCESS_STREAM == ENABLED diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS/ctrl_access.h b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS/ctrl_access.h new file mode 100644 index 000000000..358bf6589 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS/ctrl_access.h @@ -0,0 +1,369 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Abstraction layer for memory interfaces. + * + * This module contains the interfaces: + * - MEM <-> USB; + * - MEM <-> RAM; + * - MEM <-> MEM. + * + * This module may be configured and expanded to support the following features: + * - write-protected globals; + * - password-protected data; + * - specific features; + * - etc. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _CTRL_ACCESS_H_ +#define _CTRL_ACCESS_H_ + +#include "compiler.h" +#include "conf_access.h" + + +//! Status returned by CTRL_ACCESS interfaces. +typedef enum +{ + CTRL_GOOD = PASS, //!< Success, memory ready. + CTRL_FAIL = FAIL, //!< An error occurred. + CTRL_NO_PRESENT = FAIL + 1, //!< Memory unplugged. + CTRL_BUSY = FAIL + 2 //!< Memory not initialized or changed. +} Ctrl_status; + + +// FYI: Each Logical Unit Number (LUN) corresponds to a memory. + +// Check LUN defines. +#ifndef LUN_0 + #error LUN_0 must be defined as ENABLE or DISABLE in conf_access.h +#endif +#ifndef LUN_1 + #error LUN_1 must be defined as ENABLE or DISABLE in conf_access.h +#endif +#ifndef LUN_2 + #error LUN_2 must be defined as ENABLE or DISABLE in conf_access.h +#endif +#ifndef LUN_3 + #error LUN_3 must be defined as ENABLE or DISABLE in conf_access.h +#endif +#ifndef LUN_4 + #error LUN_4 must be defined as ENABLE or DISABLE in conf_access.h +#endif +#ifndef LUN_5 + #error LUN_5 must be defined as ENABLE or DISABLE in conf_access.h +#endif +#ifndef LUN_6 + #error LUN_6 must be defined as ENABLE or DISABLE in conf_access.h +#endif +#ifndef LUN_7 + #error LUN_7 must be defined as ENABLE or DISABLE in conf_access.h +#endif +#ifndef LUN_USB + #error LUN_USB must be defined as ENABLE or DISABLE in conf_access.h +#endif + +/*! \name LUN IDs + */ +//! @{ +#define LUN_ID_0 (0) //!< First static LUN. +#define LUN_ID_1 (LUN_ID_0 + LUN_0) +#define LUN_ID_2 (LUN_ID_1 + LUN_1) +#define LUN_ID_3 (LUN_ID_2 + LUN_2) +#define LUN_ID_4 (LUN_ID_3 + LUN_3) +#define LUN_ID_5 (LUN_ID_4 + LUN_4) +#define LUN_ID_6 (LUN_ID_5 + LUN_5) +#define LUN_ID_7 (LUN_ID_6 + LUN_6) +#define MAX_LUN (LUN_ID_7 + LUN_7) //!< Number of static LUNs. +#define LUN_ID_USB (MAX_LUN) //!< First dynamic LUN (USB host mass storage). +//! @} + + +// Include LUN header files. +#if LUN_0 == ENABLE + #include LUN_0_INCLUDE +#endif +#if LUN_1 == ENABLE + #include LUN_1_INCLUDE +#endif +#if LUN_2 == ENABLE + #include LUN_2_INCLUDE +#endif +#if LUN_3 == ENABLE + #include LUN_3_INCLUDE +#endif +#if LUN_4 == ENABLE + #include LUN_4_INCLUDE +#endif +#if LUN_5 == ENABLE + #include LUN_5_INCLUDE +#endif +#if LUN_6 == ENABLE + #include LUN_6_INCLUDE +#endif +#if LUN_7 == ENABLE + #include LUN_7_INCLUDE +#endif +#if LUN_USB == ENABLE + #include LUN_USB_INCLUDE +#endif + + +// Check the configuration of write protection in conf_access.h. +#ifndef GLOBAL_WR_PROTECT + #error GLOBAL_WR_PROTECT must be defined as ENABLED or DISABLED in conf_access.h +#endif + + +#if GLOBAL_WR_PROTECT == ENABLED + +//! Write protect. +extern Bool g_wr_protect; + +#endif + + +/*! \name Control Interface + */ +//! @{ + +#ifdef FREERTOS_USED + +/*! \brief Initializes the LUN access locker. + * + * \return \c TRUE if the locker was successfully initialized, else \c FALSE. + */ +extern Bool ctrl_access_init(void); + +#endif // FREERTOS_USED + +/*! \brief Returns the number of LUNs. + * + * \return Number of LUNs in the system. + */ +extern U8 get_nb_lun(void); + +/*! \brief Returns the current LUN. + * + * \return Current LUN. + * + * \todo Implement. + */ +extern U8 get_cur_lun(void); + +/*! \brief Tests the memory state and initializes the memory if required. + * + * The TEST UNIT READY SCSI primary command allows an application client to poll + * a LUN until it is ready without having to allocate memory for returned data. + * + * This command may be used to check the media status of LUNs with removable + * media. + * + * \param lun Logical Unit Number. + * + * \return Status. + */ +extern Ctrl_status mem_test_unit_ready(U8 lun); + +/*! \brief Returns the address of the last valid sector (512 bytes) in the + * memory. + * + * \param lun Logical Unit Number. + * \param u32_nb_sector Pointer to the address of the last valid sector. + * + * \return Status. + */ +extern Ctrl_status mem_read_capacity(U8 lun, U32 *u32_nb_sector); + +/*! \brief Returns the size of the physical sector. + * + * \param lun Logical Unit Number. + * + * \return Sector size (unit: 512 bytes). + */ +extern U8 mem_sector_size(U8 lun); + +/*! \brief Returns the write-protection state of the memory. + * + * \param lun Logical Unit Number. + * + * \return \c TRUE if the memory is write-protected, else \c FALSE. + * + * \note Only used by removable memories with hardware-specific write + * protection. + */ +extern Bool mem_wr_protect(U8 lun); + +/*! \brief Tells whether the memory is removable. + * + * \param lun Logical Unit Number. + * + * \return \c TRUE if the memory is removable, else \c FALSE. + */ +extern Bool mem_removal(U8 lun); + +/*! \brief Returns a pointer to the LUN name. + * + * \param lun Logical Unit Number. + * + * \return Pointer to the LUN name string. + */ +extern const char *mem_name(U8 lun); + +//! @} + + +#if ACCESS_USB == ENABLED + +/*! \name MEM <-> USB Interface + */ +//! @{ + +/*! \brief Tranfers data from the memory to USB. + * + * \param lun Logical Unit Number. + * \param addr Address of first memory sector to read. + * \param nb_sector Number of sectors to transfer. + * + * \return Status. + */ +extern Ctrl_status memory_2_usb(U8 lun, U32 addr, U16 nb_sector); + +/*! \brief Tranfers data from USB to the memory. + * + * \param lun Logical Unit Number. + * \param addr Address of first memory sector to write. + * \param nb_sector Number of sectors to transfer. + * + * \return Status. + */ +extern Ctrl_status usb_2_memory(U8 lun, U32 addr, U16 nb_sector); + +//! @} + +#endif // ACCESS_USB == ENABLED + + +#if ACCESS_MEM_TO_RAM == ENABLED + +/*! \name MEM <-> RAM Interface + */ +//! @{ + +/*! \brief Copies 1 data sector from the memory to RAM. + * + * \param lun Logical Unit Number. + * \param addr Address of first memory sector to read. + * \param ram Pointer to RAM buffer to write. + * + * \return Status. + */ +extern Ctrl_status memory_2_ram(U8 lun, U32 addr, void *ram); + +/*! \brief Copies 1 data sector from RAM to the memory. + * + * \param lun Logical Unit Number. + * \param addr Address of first memory sector to write. + * \param ram Pointer to RAM buffer to read. + * + * \return Status. + */ +extern Ctrl_status ram_2_memory(U8 lun, U32 addr, const void *ram); + +//! @} + +#endif // ACCESS_MEM_TO_RAM == ENABLED + + +#if ACCESS_STREAM == ENABLED + +/*! \name Streaming MEM <-> MEM Interface + */ +//! @{ + +//! Erroneous streaming data transfer ID. +#define ID_STREAM_ERR 0xFF + + #if ACCESS_MEM_TO_MEM == ENABLED + +/*! \brief Copies data from one memory to another. + * + * \param src_lun Source Logical Unit Number. + * \param src_addr Source address of first memory sector to read. + * \param dest_lun Destination Logical Unit Number. + * \param dest_addr Destination address of first memory sector to write. + * \param nb_sector Number of sectors to copy. + * + * \return Status. + */ +extern Ctrl_status stream_mem_to_mem(U8 src_lun, U32 src_addr, U8 dest_lun, U32 dest_addr, U16 nb_sector); + + #endif // ACCESS_MEM_TO_MEM == ENABLED + +/*! \brief Returns the state of a streaming data transfer. + * + * \param id Transfer ID. + * + * \return Status. + * + * \todo Implement. + */ +extern Ctrl_status stream_state(U8 id); + +/*! \brief Stops a streaming data transfer. + * + * \param id Transfer ID. + * + * \return Number of remaining sectors. + * + * \todo Implement. + */ +extern U16 stream_stop(U8 id); + +//! @} + +#endif // ACCESS_STREAM == ENABLED + + +#endif // _CTRL_ACCESS_H_ diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/DEBUG/debug.c b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/DEBUG/debug.c new file mode 100644 index 000000000..c7c0a03e5 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/DEBUG/debug.c @@ -0,0 +1,119 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Macros and functions dedicated to debug purposes. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with a USART module can be used. + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#include "compiler.h" +#include "debug.h" + + +#if (defined __GNUC__) +# include "malloc.h" + +U32 get_heap_curr_used_size( void ) +{ + struct mallinfo my_info=mallinfo(); + return my_info.uordblks; +} + +U32 get_heap_total_used_size( void ) +{ + struct mallinfo my_info=mallinfo(); + return my_info.arena; +} +#endif + +U32 get_heap_free_size( void ) +{ + U32 high_mark= AVR32_SRAM_SIZE; + U32 low_mark = 0; + U32 size ; + void* p_mem; + + size = (high_mark + low_mark)/2; + + do + { + p_mem = malloc(size); + if( p_mem != NULL) + { // Can allocate memory + free(p_mem); + low_mark = size; + } + else + { // Can not allocate memory + high_mark = size; + } + + size = (high_mark + low_mark)/2; + } + while( (high_mark-low_mark) >1 ); + + return size; +} + +static void* round_trace_pbuf; +static U32 round_trace_size; + +void uc3_round_trace_init(void* buf, U32 size) +{ + round_trace_pbuf = buf; + (*(U32*)round_trace_pbuf)=(U32)buf+4; + round_trace_size = size; +} + +void uc3_round_trace(U32 val) +{ + //Disable_global_interrupt(); + + U32* p_wr = (U32*)(*(U32*)round_trace_pbuf); + *p_wr = val; + p_wr++; + if( ((U32)p_wr % round_trace_size) ==0 ) + p_wr= (U32*)round_trace_pbuf+1; + *p_wr = 0xdeadbeef; + *(U32*)round_trace_pbuf = (U32)p_wr; + + //Enable_global_interrupt(); +} diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/DEBUG/debug.h b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/DEBUG/debug.h new file mode 100644 index 000000000..a832d7c9c --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/DEBUG/debug.h @@ -0,0 +1,116 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Macros and functions dedicated to debug purposes. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with a USART module can be used. + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _DEBUG_H_ +#define _DEBUG_H_ + +#include "stringz.h" + +/*! \brief These macros are used to add traces memory. + * + * First, initialise the trace with Uc3_trace_init(pointer), giving the start address + * of the memory location where will be stored the trace. + * Use Uc3_trace(something) to store "something" into the memory. The end of the trace + * is signaled by the "0xdeadbeef" pattern. + */ +#define Uc3_trace_init(debug_addr) \ + *(U32*)(debug_addr)=debug_addr+4 + +#define Uc3_trace(debug_addr, x) \ + *(U32*)(*(U32*)(debug_addr) ) = (U32)(x) ;\ + *(U32*)(*(U32*)(debug_addr)+4) = 0xdeadbeef ;\ + *(U32*)(debug_addr ) = *(U32*)(debug_addr)+4 + +/*! \brief This macro is used to insert labels into assembly output. + * + */ +#define Insert_label(name) \ + __asm__ __volatile__ (STRINGZ(name)":"); + +#if (defined __GNUC__) +/*! \brief Returns the number of total of used bytes allocated from the HEAP. + * + * \retval total number of used bytes. + */ +U32 get_heap_total_used_size( void ); + +/*! \brief Returns the number of bytes currently used from the HEAP. + * + * \retval total number of used bytes. + */ +U32 get_heap_curr_used_size( void ); +#endif + +/*! \brief Returns the number of free bytes in the HEAP. + * + * This funtion tries to allocate the maximum number of bytes by dichotomical method. + * + * \retval number of free bytes. + */ +extern U32 get_heap_free_size( void ); + +/*! \name Traces function using a round buffer + */ +//! @{ + +/*! \brief Initialize the trace using a round buffer. + * + * \param buf Base address of the buffer used for the trace. + * \param size Size of the round buffer. Must be a power of 2. + */ +void uc3_round_trace_init(void* buf, U32 size); + +/*! \brief Trace a data in the round buffer. + * + * The end of the trace is signaled by the "0xdeadbeef" pattern. + * \param val Data to trace; + */ +void uc3_round_trace(U32 val); + +//! @} + + +#endif // _DEBUG_H_ diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/DEBUG/print_funcs.c b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/DEBUG/print_funcs.c new file mode 100644 index 000000000..99e927466 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/DEBUG/print_funcs.c @@ -0,0 +1,215 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Strings and integers print module for debug purposes. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with a USART module can be used. + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#include "compiler.h" +#include "gpio.h" +#include "usart.h" +#include "print_funcs.h" + + +//! ASCII representation of hexadecimal digits. +static const char HEX_DIGITS[16] = "0123456789ABCDEF"; + + +void init_dbg_rs232(long pba_hz) +{ + init_dbg_rs232_ex(DBG_USART_BAUDRATE, pba_hz); +} + + +void init_dbg_rs232_ex(unsigned long baudrate, long pba_hz) +{ + static const gpio_map_t DBG_USART_GPIO_MAP = + { + {DBG_USART_RX_PIN, DBG_USART_RX_FUNCTION}, + {DBG_USART_TX_PIN, DBG_USART_TX_FUNCTION} + }; + + // Options for debug USART. + usart_options_t dbg_usart_options = + { + .baudrate = baudrate, + .charlength = 8, + .paritytype = USART_NO_PARITY, + .stopbits = USART_1_STOPBIT, + .channelmode = USART_NORMAL_CHMODE + }; + + // Setup GPIO for debug USART. + gpio_enable_module(DBG_USART_GPIO_MAP, + sizeof(DBG_USART_GPIO_MAP) / sizeof(DBG_USART_GPIO_MAP[0])); + + // Initialize it in RS232 mode. + usart_init_rs232(DBG_USART, &dbg_usart_options, pba_hz); +} + + +void print_dbg(const char *str) +{ + // Redirection to the debug USART. + print(DBG_USART, str); +} + + +void print_dbg_char(int c) +{ + // Redirection to the debug USART. + print_char(DBG_USART, c); +} + + +void print_dbg_ulong(unsigned long n) +{ + // Redirection to the debug USART. + print_ulong(DBG_USART, n); +} + + +void print_dbg_char_hex(unsigned char n) +{ + // Redirection to the debug USART. + print_char_hex(DBG_USART, n); +} + + +void print_dbg_short_hex(unsigned short n) +{ + // Redirection to the debug USART. + print_short_hex(DBG_USART, n); +} + + +void print_dbg_hex(unsigned long n) +{ + // Redirection to the debug USART. + print_hex(DBG_USART, n); +} + + +void print(volatile avr32_usart_t *usart, const char *str) +{ + // Invoke the USART driver to transmit the input string with the given USART. + usart_write_line(usart, str); +} + + +void print_char(volatile avr32_usart_t *usart, int c) +{ + // Invoke the USART driver to transmit the input character with the given USART. + usart_putchar(usart, c); +} + + +void print_ulong(volatile avr32_usart_t *usart, unsigned long n) +{ + char tmp[11]; + int i = sizeof(tmp) - 1; + + // Convert the given number to an ASCII decimal representation. + tmp[i] = '\0'; + do + { + tmp[--i] = '0' + n % 10; + n /= 10; + } while (n); + + // Transmit the resulting string with the given USART. + print(usart, tmp + i); +} + + +void print_char_hex(volatile avr32_usart_t *usart, unsigned char n) +{ + char tmp[3]; + int i; + + // Convert the given number to an ASCII hexadecimal representation. + tmp[2] = '\0'; + for (i = 1; i >= 0; i--) + { + tmp[i] = HEX_DIGITS[n & 0xF]; + n >>= 4; + } + + // Transmit the resulting string with the given USART. + print(usart, tmp); +} + + +void print_short_hex(volatile avr32_usart_t *usart, unsigned short n) +{ + char tmp[5]; + int i; + + // Convert the given number to an ASCII hexadecimal representation. + tmp[4] = '\0'; + for (i = 3; i >= 0; i--) + { + tmp[i] = HEX_DIGITS[n & 0xF]; + n >>= 4; + } + + // Transmit the resulting string with the given USART. + print(usart, tmp); +} + + +void print_hex(volatile avr32_usart_t *usart, unsigned long n) +{ + char tmp[9]; + int i; + + // Convert the given number to an ASCII hexadecimal representation. + tmp[8] = '\0'; + for (i = 7; i >= 0; i--) + { + tmp[i] = HEX_DIGITS[n & 0xF]; + n >>= 4; + } + + // Transmit the resulting string with the given USART. + print(usart, tmp); +} diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/DEBUG/print_funcs.h b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/DEBUG/print_funcs.h new file mode 100644 index 000000000..38f931dc2 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/DEBUG/print_funcs.h @@ -0,0 +1,294 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Strings and integers print module for debug purposes. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with a USART module can be used. + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _PRINT_FUNCS_H_ +#define _PRINT_FUNCS_H_ + +#include +#include "board.h" + + +/*! \name USART Settings for the Debug Module + */ +//! @{ +#if BOARD == EVK1100 +# define DBG_USART (&AVR32_USART1) +# define DBG_USART_RX_PIN AVR32_USART1_RXD_0_0_PIN +# define DBG_USART_RX_FUNCTION AVR32_USART1_RXD_0_0_FUNCTION +# define DBG_USART_TX_PIN AVR32_USART1_TXD_0_0_PIN +# define DBG_USART_TX_FUNCTION AVR32_USART1_TXD_0_0_FUNCTION +# define DBG_USART_BAUDRATE 57600 +#elif BOARD == EVK1101 +# define DBG_USART (&AVR32_USART1) +# define DBG_USART_RX_PIN AVR32_USART1_RXD_0_0_PIN +# define DBG_USART_RX_FUNCTION AVR32_USART1_RXD_0_0_FUNCTION +# define DBG_USART_TX_PIN AVR32_USART1_TXD_0_0_PIN +# define DBG_USART_TX_FUNCTION AVR32_USART1_TXD_0_0_FUNCTION +# define DBG_USART_BAUDRATE 57600 +#elif BOARD == UC3C_EK +# define DBG_USART (&AVR32_USART2) +# define DBG_USART_RX_PIN AVR32_USART2_RXD_0_1_PIN +# define DBG_USART_RX_FUNCTION AVR32_USART2_RXD_0_1_FUNCTION +# define DBG_USART_TX_PIN AVR32_USART2_TXD_0_1_PIN +# define DBG_USART_TX_FUNCTION AVR32_USART2_TXD_0_1_FUNCTION +# define DBG_USART_BAUDRATE 57600 +#elif BOARD == EVK1104 +# define DBG_USART (&AVR32_USART1) +# define DBG_USART_RX_PIN AVR32_USART1_RXD_0_0_PIN +# define DBG_USART_RX_FUNCTION AVR32_USART1_RXD_0_0_FUNCTION +# define DBG_USART_TX_PIN AVR32_USART1_TXD_0_0_PIN +# define DBG_USART_TX_FUNCTION AVR32_USART1_TXD_0_0_FUNCTION +# define DBG_USART_BAUDRATE 57600 +#elif BOARD == EVK1105 +# define DBG_USART (&AVR32_USART0) +# define DBG_USART_RX_PIN AVR32_USART0_RXD_0_0_PIN +# define DBG_USART_RX_FUNCTION AVR32_USART0_RXD_0_0_FUNCTION +# define DBG_USART_TX_PIN AVR32_USART0_TXD_0_0_PIN +# define DBG_USART_TX_FUNCTION AVR32_USART0_TXD_0_0_FUNCTION +# define DBG_USART_BAUDRATE 57600 +#elif BOARD == STK1000 +# define DBG_USART (&AVR32_USART1) +# define DBG_USART_RX_PIN AVR32_USART1_RXD_0_PIN +# define DBG_USART_RX_FUNCTION AVR32_USART1_RXD_0_FUNCTION +# define DBG_USART_TX_PIN AVR32_USART1_TXD_0_PIN +# define DBG_USART_TX_FUNCTION AVR32_USART1_TXD_0_FUNCTION +# define DBG_USART_BAUDRATE 115200 +#elif BOARD == NGW100 +# define DBG_USART (&AVR32_USART1) +# define DBG_USART_RX_PIN AVR32_USART1_RXD_0_PIN +# define DBG_USART_RX_FUNCTION AVR32_USART1_RXD_0_FUNCTION +# define DBG_USART_TX_PIN AVR32_USART1_TXD_0_PIN +# define DBG_USART_TX_FUNCTION AVR32_USART1_TXD_0_FUNCTION +# define DBG_USART_BAUDRATE 115200 +#elif BOARD == STK600_RCUC3L0 +# define DBG_USART (&AVR32_USART1) +# define DBG_USART_RX_PIN AVR32_USART1_RXD_0_1_PIN +# define DBG_USART_RX_FUNCTION AVR32_USART1_RXD_0_1_FUNCTION +// For the RX pin, connect STK600.PORTE.PE3 to STK600.RS232 SPARE.RXD +# define DBG_USART_TX_PIN AVR32_USART1_TXD_0_1_PIN +# define DBG_USART_TX_FUNCTION AVR32_USART1_TXD_0_1_FUNCTION +// For the TX pin, connect STK600.PORTE.PE2 to STK600.RS232 SPARE.TXD +# define DBG_USART_BAUDRATE 57600 +# define DBG_USART_CLOCK_MASK AVR32_USART1_CLK_PBA +#elif BOARD == UC3L_EK +# define DBG_USART (&AVR32_USART3) +# define DBG_USART_RX_PIN AVR32_USART3_RXD_0_0_PIN +# define DBG_USART_RX_FUNCTION AVR32_USART3_RXD_0_0_FUNCTION +# define DBG_USART_TX_PIN AVR32_USART3_TXD_0_0_PIN +# define DBG_USART_TX_FUNCTION AVR32_USART3_TXD_0_0_FUNCTION +# define DBG_USART_BAUDRATE 57600 +# define DBG_USART_CLOCK_MASK AVR32_USART3_CLK_PBA +#elif BOARD == ARDUINO +# define DBG_USART (&AVR32_USART1) +# define DBG_USART_RX_PIN AVR32_USART1_RXD_0_0_PIN +# define DBG_USART_RX_FUNCTION AVR32_USART1_RXD_0_0_FUNCTION +# define DBG_USART_TX_PIN AVR32_USART1_TXD_0_0_PIN +# define DBG_USART_TX_FUNCTION AVR32_USART1_TXD_0_0_FUNCTION +# define DBG_USART_BAUDRATE 57600 +# define DBG_USART_CLOCK_MASK AVR32_USART1_CLK_PBA +#endif + +#if !defined(DBG_USART) || \ + !defined(DBG_USART_RX_PIN) || \ + !defined(DBG_USART_RX_FUNCTION) || \ + !defined(DBG_USART_TX_PIN) || \ + !defined(DBG_USART_TX_FUNCTION) || \ + !defined(DBG_USART_BAUDRATE) +# error The USART configuration to use for debug on your board is missing +#endif +//! @} + +/*! \name VT100 Common Commands + */ +//! @{ +#define CLEARSCR "\x1B[2J\x1B[;H" //!< Clear screen. +#define CLEAREOL "\x1B[K" //!< Clear end of line. +#define CLEAREOS "\x1B[J" //!< Clear end of screen. +#define CLEARLCR "\x1B[0K" //!< Clear line cursor right. +#define CLEARLCL "\x1B[1K" //!< Clear line cursor left. +#define CLEARELN "\x1B[2K" //!< Clear entire line. +#define CLEARCDW "\x1B[0J" //!< Clear cursor down. +#define CLEARCUP "\x1B[1J" //!< Clear cursor up. +#define GOTOYX "\x1B[%.2d;%.2dH" //!< Set cursor to (y, x). +#define INSERTMOD "\x1B[4h" //!< Insert mode. +#define OVERWRITEMOD "\x1B[4l" //!< Overwrite mode. +#define DELAFCURSOR "\x1B[K" //!< Erase from cursor to end of line. +#define CRLF "\r\n" //!< Carriage Return + Line Feed. +//! @} + +/*! \name VT100 Cursor Commands + */ +//! @{ +#define CURSON "\x1B[?25h" //!< Show cursor. +#define CURSOFF "\x1B[?25l" //!< Hide cursor. +//! @} + +/*! \name VT100 Character Commands + */ +//! @{ +#define NORMAL "\x1B[0m" //!< Normal. +#define BOLD "\x1B[1m" //!< Bold. +#define UNDERLINE "\x1B[4m" //!< Underline. +#define BLINKING "\x1B[5m" //!< Blink. +#define INVVIDEO "\x1B[7m" //!< Inverse video. +//! @} + +/*! \name VT100 Color Commands + */ +//! @{ +#define CL_BLACK "\033[22;30m" //!< Black. +#define CL_RED "\033[22;31m" //!< Red. +#define CL_GREEN "\033[22;32m" //!< Green. +#define CL_BROWN "\033[22;33m" //!< Brown. +#define CL_BLUE "\033[22;34m" //!< Blue. +#define CL_MAGENTA "\033[22;35m" //!< Magenta. +#define CL_CYAN "\033[22;36m" //!< Cyan. +#define CL_GRAY "\033[22;37m" //!< Gray. +#define CL_DARKGRAY "\033[01;30m" //!< Dark gray. +#define CL_LIGHTRED "\033[01;31m" //!< Light red. +#define CL_LIGHTGREEN "\033[01;32m" //!< Light green. +#define CL_YELLOW "\033[01;33m" //!< Yellow. +#define CL_LIGHTBLUE "\033[01;34m" //!< Light blue. +#define CL_LIGHTMAGENTA "\033[01;35m" //!< Light magenta. +#define CL_LIGHTCYAN "\033[01;36m" //!< Light cyan. +#define CL_WHITE "\033[01;37m" //!< White. +//! @} + + +/*! \brief Sets up DBG_USART with 8N1 at DBG_USART_BAUDRATE. + * + * \param pba_hz PBA clock frequency (Hz). + */ +extern void init_dbg_rs232(long pba_hz); + +/*! \brief Sets up DBG_USART with 8N1 at a given baud rate. + * + * \param baudrate Baud rate to set DBG_USART to. + * \param pba_hz PBA clock frequency (Hz). + */ +extern void init_dbg_rs232_ex(unsigned long baudrate, long pba_hz); + +/*! \brief Prints a string of characters to DBG_USART. + * + * \param str The string of characters to print. + */ +extern void print_dbg(const char *str); + +/*! \brief Prints a character to DBG_USART. + * + * \param c The character to print. + */ +extern void print_dbg_char(int c); + +/*! \brief Prints an integer to DBG_USART in a decimal representation. + * + * \param n The integer to print. + */ +extern void print_dbg_ulong(unsigned long n); + +/*! \brief Prints a char to DBG_USART in an hexadecimal representation. + * + * \param n The char to print. + */ +extern void print_dbg_char_hex(unsigned char n); + +/*! \brief Prints a short integer to DBG_USART in an hexadecimal representation. + * + * \param n The short integer to print. + */ +extern void print_dbg_short_hex(unsigned short n); + +/*! \brief Prints an integer to DBG_USART in an hexadecimal representation. + * + * \param n The integer to print. + */ +extern void print_dbg_hex(unsigned long n); + +/*! \brief Prints a string of characters to a given USART. + * + * \param usart Base address of the USART instance to print to. + * \param str The string of characters to print. + */ +extern void print(volatile avr32_usart_t *usart, const char *str); + +/*! \brief Prints a character to a given USART. + * + * \param usart Base address of the USART instance to print to. + * \param c The character to print. + */ +extern void print_char(volatile avr32_usart_t *usart, int c); + +/*! \brief Prints an integer to a given USART in a decimal representation. + * + * \param usart Base address of the USART instance to print to. + * \param n The integer to print. + */ +extern void print_ulong(volatile avr32_usart_t *usart, unsigned long n); + +/*! \brief Prints a char to a given USART in an hexadecimal representation. + * + * \param usart Base address of the USART instance to print to. + * \param n The char to print. + */ +extern void print_char_hex(volatile avr32_usart_t *usart, unsigned char n); + +/*! \brief Prints a short integer to a given USART in an hexadecimal + * representation. + * + * \param usart Base address of the USART instance to print to. + * \param n The short integer to print. + */ +extern void print_short_hex(volatile avr32_usart_t *usart, unsigned short n); + +/*! \brief Prints an integer to a given USART in an hexadecimal representation. + * + * \param usart Base address of the USART instance to print to. + * \param n The integer to print. + */ +extern void print_hex(volatile avr32_usart_t *usart, unsigned long n); + + +#endif // _PRINT_FUNCS_H_ diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_cpu.h b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_cpu.h new file mode 100644 index 000000000..e3ebea7a1 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_cpu.h @@ -0,0 +1,63 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief NEWLIB_ADDONS CPU include file for AVR32. + * + * - Compiler: GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef __AVR32_NEWLIB_ADDONS_CPU_H__ +#define __AVR32_NEWLIB_ADDONS_CPU_H__ + +#include <_ansi.h> + +_BEGIN_STD_C + +#define CPU_HZ get_cpu_hz() + +void udelay(unsigned long usec); +void set_cpu_hz(unsigned int clk_hz); +unsigned int get_cpu_hz(); + +_END_STD_C + +#endif diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_exceptions.h b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_exceptions.h new file mode 100644 index 000000000..31caf1304 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_exceptions.h @@ -0,0 +1,120 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief NEWLIB_ADDONS exceptions include file for AVR32. + * + * - Compiler: GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef __AVR32_NEWLIB_ADDONS_EXCEPTIONS_H__ +#define __AVR32_NEWLIB_ADDONS_EXCEPTIONS_H__ + +#include <_ansi.h> + +_BEGIN_STD_C + +/* + Exception vector offsets +*/ +#define EVBA_UNRECOVERABLE 0x000 +#define EVBA_TLB_MULTIPLE 0x004 +#define EVBA_BUS_ERROR_DATA 0x008 +#define EVBA_BUS_ERROR_INSTR 0x00C +#define EVBA_NMI 0x010 +#define EVBA_INSTR_ADDR 0x014 +#define EVBA_ITLB_MISS 0x050 +#define EVBA_ITLB_PROT 0x018 +#define EVBA_BREAKPOINT 0x01C +#define EVBA_ILLEGAL_OPCODE 0x020 +#define EVBA_UNIMPLEMENTED 0x024 +#define EVBA_PRIVILEGE_VIOL 0x028 +#define EVBA_FLOATING_POINT 0x02C +#define EVBA_COP_ABSENT 0x030 +#define EVBA_SCALL 0x100 +#define EVBA_DATA_ADDR_R 0x034 +#define EVBA_DATA_ADDR_W 0x038 +#define EVBA_DTLB_MISS_R 0x060 +#define EVBA_DTLB_MISS_W 0x070 +#define EVBA_DTLB_PROT_R 0x03C +#define EVBA_DTLB_PROT_W 0x040 +#define EVBA_DTLB_MODIFIED 0x044 + + +/* + Define the form of the function used when registering exceptions. + The function should return the address which the exception should + return to after the exception processing. +*/ + +typedef unsigned int (*__exception_handler)(int /*evba_offset*/, int /*return address*/); + +/* + Define the form of the function used when registering a scall handler. +*/ + +typedef void (*__scall_handler)(int /*code*/, int /*p1*/, int /*p2*/ + , int /*p3*/, int /*p4*/); + +/* + Function for registering an exception handler for the exception with + offset given by evba_offset. +*/ +void _register_exception_handler(__exception_handler handler, int evba_offset); + +/* + Function for registering a scall handler which can be a arbirary + function which uses r8-r12 for parameters. +*/ +void _register_scall_handler(__scall_handler handler); + +/* + Initialize exceptions. Must be called before registering exception handlers + and needed to enable exceptions. 'evba' is the pointer to the exception + vector. 'handler_table' is a pointer to an array where the pointers to + the exception handlers are stored. This array must be at least 0x104 bytes + and word aligned. +*/ +void init_exceptions(void *evba, void *handler_table); + +_END_STD_C + +#endif diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_interrupts.h b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_interrupts.h new file mode 100644 index 000000000..76d81f737 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_interrupts.h @@ -0,0 +1,82 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief NEWLIB_ADDONS interrupts include file for AVR32. + * + * - Compiler: GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef __AVR32_NEWLIB_ADDONS_INTERRUPTS_H__ +#define __AVR32_NEWLIB_ADDONS_INTERRUPTS_H__ + +#include <_ansi.h> + +_BEGIN_STD_C + +#define INT_GRPS 64 +#define INT_LINES 32 +#define INTPR_BASE (__intc_base__ + 0x0000) +#define INTREQ_BASE (__intc_base__ + 64*4) +#define INTCAUSE_BASE (__intc_base__ + 2*64*4) + +//Register offsets +#define INTLEVEL 30 +#define AUTOVECTOR 0 +#define AUTOVECTOR_BITS 14 + +//Priorities +#define INT0 0 +#define INT1 1 +#define INT2 2 +#define INT3 3 + + +typedef void (*__newlib_int_handler)(int /* int_grp*/, void */*user_handle*/); + +__newlib_int_handler register_interrupt(__newlib_int_handler handler, int int_grp, int line, int priority, + .../* void *user_handle*/); +void init_interrupts(); +void set_interrupts_base(void *base); + +_END_STD_C + +#endif diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_io.h b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_io.h new file mode 100644 index 000000000..a725769fa --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_io.h @@ -0,0 +1,174 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief NEWLIB_ADDONS miscellaneous macros include file for AVR32. + * + * - Compiler: GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef __AVR32_NEWLIB_ADDONS_IO_H__ +#define __AVR32_NEWLIB_ADDONS_IO_H__ + +#include <_ansi.h> + +_BEGIN_STD_C + +typedef char u8; +typedef unsigned int u32; + +#define __raw_writeb(v,a) (*(volatile unsigned char *)(a) = (v)) +#define __raw_writew(v,a) (*(volatile unsigned short *)(a) = (v)) +#define __raw_writel(v,a) (*(volatile unsigned int *)(a) = (v)) + +#define __raw_readb(a) (*(volatile unsigned char *)(a)) +#define __raw_readw(a) (*(volatile unsigned short *)(a)) +#define __raw_readl(a) (*(volatile unsigned int *)(a)) + +/* As long as I/O is only performed in P4 (or possibly P3), we're safe */ +#define writeb(v,a) __raw_writeb(v,a) +#define writew(v,a) __raw_writew(v,a) +#define writel(v,a) __raw_writel(v,a) + +#define readb(a) __raw_readb(a) +#define readw(a) __raw_readw(a) +#define readl(a) __raw_readl(a) + +/* Memory segments when segmentation is enabled */ +#define P0SEG 0x00000000 +#define P1SEG 0x80000000 +#define P2SEG 0xa0000000 +#define P3SEG 0xc0000000 +#define P4SEG 0xe0000000 + +/* Returns the privileged segment base of a given address */ +#define PXSEG(a) (((unsigned long)(a)) & 0xe0000000) + +/* Returns the physical address of a PnSEG (n=1,2) address */ +#define PHYSADDR(a) (((unsigned long)(a)) & 0x1fffffff) + +/* + * Map an address to a certain privileged segment + */ +#define P1SEGADDR(a) ((__typeof__(a))(((unsigned long)(a) & 0x1fffffff) | P1SEG)) +#define P2SEGADDR(a) ((__typeof__(a))(((unsigned long)(a) & 0x1fffffff) | P2SEG)) +#define P3SEGADDR(a) ((__typeof__(a))(((unsigned long)(a) & 0x1fffffff) | P3SEG)) +#define P4SEGADDR(a) ((__typeof__(a))(((unsigned long)(a) & 0x1fffffff) | P4SEG)) + + +#define cached(addr) P1SEGADDR(addr) +#define uncached(addr) P2SEGADDR(addr) +#define physaddr(addr) PHYSADDR(addr) + +#define BF(field, value) \ + ({ union { \ + struct { \ + unsigned : 32 - field ## _OFFSET - field ## _SIZE ; \ + unsigned long __val: field ## _SIZE ; \ + }; \ + unsigned long __ul; \ + } __tmp; \ + __tmp.__ul = 0; \ + __tmp.__val = value; \ + __tmp.__ul;}) + +#define BF_D(field, value) \ + ({ union { \ + struct { \ + unsigned long long : 64 - field ## _OFFSET - field ## _SIZE ; \ + unsigned long long __val: field ## _SIZE ; \ + }; \ + unsigned long long __ul; \ + } __tmp; \ + __tmp.__ul = 0; \ + __tmp.__val = value; \ + __tmp.__ul;}) + +#define BFINS(var, field, value) \ + { union {\ + struct { \ + unsigned : 32 - field ## _OFFSET - field ## _SIZE ; \ + unsigned long __val: field ## _SIZE ; \ + }; \ + unsigned long __ul; \ + } __tmp; \ + __tmp.__ul = var; \ + __tmp.__val = value; \ + var = __tmp.__ul;} + +#define BFEXT(var, field) \ + ({ union {\ + struct { \ + unsigned : 32 - field ## _OFFSET - field ## _SIZE ; \ + unsigned long __val: field ## _SIZE ; \ + }; \ + unsigned long __ul; \ + } __tmp; \ + __tmp.__ul = var; \ + __tmp.__val; }) + +#define BFINS_D(var, field, value) \ + { union {\ + struct { \ + unsigned long long : 64 - field ## _OFFSET - field ## _SIZE ; \ + unsigned long long __val: field ## _SIZE ; \ + }; \ + unsigned long long __ul; \ + } __tmp; \ + __tmp.__ul = var; \ + __tmp.__val = value; \ + var = __tmp.__ul;} + +#define BFEXT_D(var, field) \ + ({ union {\ + struct { \ + unsigned long long : 64 - field ## _OFFSET - field ## _SIZE ; \ + unsigned long long __val: field ## _SIZE ; \ + }; \ + unsigned long long __ul; \ + } __tmp; \ + __tmp.__ul = var; \ + __tmp.__val; }) + + +_END_STD_C + +#endif diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_usart.h b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_usart.h new file mode 100644 index 000000000..6c4697d78 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_usart.h @@ -0,0 +1,208 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief NEWLIB_ADDONS USART include file for AVR32. + * + * - Compiler: GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef __AVR32_NEWLIB_ADDONS_USART_H__ +#define __AVR32_NEWLIB_ADDONS_USART_H__ + +#include <_ansi.h> + +#include "nlao_io.h" + +_BEGIN_STD_C + +struct usart3 { + volatile u32 us_cr; + volatile u32 us_mr; + volatile u32 us_ier; + volatile u32 us_idr; + volatile u32 us_imr; + volatile u32 us_csr; + volatile u32 us_rhr; + volatile u32 us_thr; + volatile u32 us_brgr; + volatile u32 us_rtor; + volatile u32 us_ttgr; + volatile u32 us_reserved[5]; + volatile u32 us_fidi; + volatile u32 us_ner; + volatile u32 us_xxr; + volatile u32 us_if; +}; + +/* Register offsets */ +#define US_CR 0x0000 +#define US_MR 0x0004 +#define US_IER 0x0008 +#define US_IDR 0x000c +#define US_IMR 0x0010 +#define US_CSR 0x0014 +#define US_RHR 0x0018 +#define US_THR 0x001c +#define US_BRGR 0x0020 +#define US_RTOR 0x0024 +#define US_TTGR 0x0028 + +#define US_FIDI 0x0040 +#define US_NER 0x0044 +#define US_XXR 0x0048 +#define US_IF 0x004c + +#define US_RPR 0x0100 +#define US_RCR 0x0104 +#define US_TPR 0x0108 +#define US_TCR 0x010c +#define US_RNPR 0x0110 +#define US_RNCR 0x0114 +#define US_TNPR 0x0118 +#define US_TNCR 0x011c +#define US_PTCR 0x0120 +#define US_PTSR 0x0124 + + + + +/* USART3 Control Register */ +#define US_CR_RSTRX (1 << 2) +#define US_CR_RSTTX (1 << 3) +#define US_CR_RXEN (1 << 4) +#define US_CR_RXDIS (1 << 5) +#define US_CR_TXEN (1 << 6) +#define US_CR_TXDIS (1 << 7) +#define US_CR_RSTSTA (1 << 8) +#define US_CR_STTBRK (1 << 9) +#define US_CR_STPBRK (1 << 10) + +#define US_CR_DTREN (1 << 16) +#define US_CR_DTRDIS (1 << 17) +#define US_CR_RTSEN (1 << 18) +#define US_CR_RTSDIS (1 << 19) + +/* USART3 Mode Register */ +#define US_MR_MODE (15 << 0) +#define US_MR_MODE_NORMAL ( 0 << 0) +#define US_MR_MODE_HWFLOW ( 2 << 0) +#define US_MR_CLKS ( 3 << 4) +#define US_MR_CLKS_CLOCK ( 0 << 4) +#define US_MR_CLKS_FDIV1 ( 1 << 4) +#define US_MR_CLKS_SLOW ( 2 << 4) +#define US_MR_CLKS_EXT ( 3 << 4) +#define US_MR_CHRL_5BITS ( 0 << 6) +#define US_MR_CHRL_6BITS ( 1 << 6) +#define US_MR_CHRL_7BITS ( 2 << 6) +#define US_MR_CHRL_8BITS ( 3 << 6) +#define US_MR_SYNC ( 1 << 8) +#define US_MR_PAR_EVEN ( 0 << 9) +#define US_MR_PAR_ODD ( 1 << 9) +#define US_MR_PAR_SPACE ( 2 << 9) +#define US_MR_PAR_MARK ( 3 << 9) +#define US_MR_PAR_NONE ( 4 << 9) +#define US_MR_PAR_MDROP ( 6 << 9) +#define US_MR_NBSTOP_1BIT ( 0 << 12) +#define US_MR_NBSTOP_1_5BIT ( 1 << 12) +#define US_MR_NBSTOP_2BITS ( 2 << 12) +#define US_MR_OVER ( 1 << 19) +#define US_MR_OVER_X16 ( 0 << 19) +#define US_MR_OVER_X8 ( 1 << 19) + +/* USART3 Channel Status Register */ +#define US_CSR_RXRDY (1 << 0) +#define US_CSR_TXRDY (1 << 1) +#define US_CSR_RXBRK (1 << 2) +#define US_CSR_ENDRX (1 << 3) +#define US_CSR_ENDTX (1 << 4) + + +#define US_CSR_OVRE (1 << 5) +#define US_CSR_FRAME (1 << 6) +#define US_CSR_PARE (1 << 7) + +#define US_CSR_TXEMPTY (1 << 9) + +#define US_CSR_TXBUFE (1 << 11) +#define US_CSR_RXBUFF (1 << 12) +#define US_CSR_RIIC (1 << 16) +#define US_CSR_DSRIC (1 << 17) +#define US_CSR_DCDIC (1 << 18) +#define US_CSR_CTSIC (1 << 19) +#define US_CSR_RI (1 << 20) +#define US_CSR_DSR (1 << 21) +#define US_CSR_DCD (1 << 22) +#define US_CSR_CTS (1 << 23) + +/* USART3 Baud Rate Generator Register */ +#define US_BRGR_CD_OFFSET 0 +#define US_BRGR_FP_OFFSET 16 + +#define US_BRGR_CD_SIZE 16 +#define US_BRGR_FP_SIZE 3 + +#define US_BRGR_CD (0xFFFF << 0) +#define US_BRGR_FP ( 7 << 16) + +/*USART3 PDC Transfer Control Register */ +#define US_PTCR_RXTEN (1 << 0) +#define US_PTCR_RXTDIS (1 << 1) +#define US_PTCR_TXTEN (1 << 8) +#define US_PTCR_TXTDIS (1 << 9) + +/*USART3 PDC Transfer Status Register */ +#define US_PTSR_RXTEN (1 << 0) +#define US_PTSR_TXTEN (1 << 8) + + +int usart_init(int baudrate); +void usart_putc(char c); +void usart_puts(const char *s); +int usart_getc(void); +int usart_tstc(void); +void usart_setbrg(int baudrate, int cpu_clock); +void set_usart_base(void *usart_base); + + +_END_STD_C + +#endif /* MERLIN_USART3_H */ diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/libnewlib_addons-at32ucr2-speed_opt.a b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/libnewlib_addons-at32ucr2-speed_opt.a new file mode 100644 index 000000000..aa673eccd Binary files /dev/null and b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/libnewlib_addons-at32ucr2-speed_opt.a differ diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/LINKER_SCRIPTS/AT32UC3A/0512/GCC/link_uc3a0512.lds b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/LINKER_SCRIPTS/AT32UC3A/0512/GCC/link_uc3a0512.lds new file mode 100644 index 000000000..59152ac0b --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/LINKER_SCRIPTS/AT32UC3A/0512/GCC/link_uc3a0512.lds @@ -0,0 +1,266 @@ +/****************************************************************************** + * AVR32 AT32UC3A0512 GNU LD script file. + * + * - Compiler: GNU GCC for AVR32 + * - Supported devices: AVR32 AT32UC3A0512 + * + * - author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +OUTPUT_FORMAT("elf32-avr32", "elf32-avr32", "elf32-avr32") + +OUTPUT_ARCH(avr32:uc) + +ENTRY(_start) + +MEMORY +{ + FLASH (rxai!w) : ORIGIN = 0x80000000, LENGTH = 0x00080000 + INTRAM (wxa!ri) : ORIGIN = 0x00000004, LENGTH = 0x0000FFFC + USERPAGE : ORIGIN = 0x80800000, LENGTH = 0x00000200 +} + +PHDRS +{ + FLASH PT_LOAD; + INTRAM_ALIGN PT_NULL; + INTRAM_AT_FLASH PT_LOAD; + INTRAM PT_NULL; + USERPAGE PT_LOAD; +} + +SECTIONS +{ + /* If this heap size is selected, all the INTRAM space from the end of the + data area to the beginning of the stack will be allocated for the heap. */ + __max_heap_size__ = -1; + + /* Use a default heap size if heap size was not defined. */ + __heap_size__ = DEFINED(__heap_size__) ? __heap_size__ : __max_heap_size__; + + /* Use a default stack size if stack size was not defined. */ + __stack_size__ = DEFINED(__stack_size__) ? __stack_size__ : 4K; + + /* Read-only sections, merged into text segment: */ + PROVIDE (__executable_start = 0x80000000); . = 0x80000000; + .interp : { *(.interp) } >FLASH AT>FLASH :FLASH + .reset : { *(.reset) } >FLASH AT>FLASH :FLASH + .hash : { *(.hash) } >FLASH AT>FLASH :FLASH + .dynsym : { *(.dynsym) } >FLASH AT>FLASH :FLASH + .dynstr : { *(.dynstr) } >FLASH AT>FLASH :FLASH + .gnu.version : { *(.gnu.version) } >FLASH AT>FLASH :FLASH + .gnu.version_d : { *(.gnu.version_d) } >FLASH AT>FLASH :FLASH + .gnu.version_r : { *(.gnu.version_r) } >FLASH AT>FLASH :FLASH + .rel.init : { *(.rel.init) } >FLASH AT>FLASH :FLASH + .rela.init : { *(.rela.init) } >FLASH AT>FLASH :FLASH + .rel.text : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) } >FLASH AT>FLASH :FLASH + .rela.text : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) } >FLASH AT>FLASH :FLASH + .rel.fini : { *(.rel.fini) } >FLASH AT>FLASH :FLASH + .rela.fini : { *(.rela.fini) } >FLASH AT>FLASH :FLASH + .rel.rodata : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) } >FLASH AT>FLASH :FLASH + .rela.rodata : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) } >FLASH AT>FLASH :FLASH + .rel.data.rel.ro : { *(.rel.data.rel.ro*) } >FLASH AT>FLASH :FLASH + .rela.data.rel.ro : { *(.rel.data.rel.ro*) } >FLASH AT>FLASH :FLASH + .rel.data : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) } >FLASH AT>FLASH :FLASH + .rela.data : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) } >FLASH AT>FLASH :FLASH + .rel.tdata : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) } >FLASH AT>FLASH :FLASH + .rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) } >FLASH AT>FLASH :FLASH + .rel.tbss : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) } >FLASH AT>FLASH :FLASH + .rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) } >FLASH AT>FLASH :FLASH + .rel.ctors : { *(.rel.ctors) } >FLASH AT>FLASH :FLASH + .rela.ctors : { *(.rela.ctors) } >FLASH AT>FLASH :FLASH + .rel.dtors : { *(.rel.dtors) } >FLASH AT>FLASH :FLASH + .rela.dtors : { *(.rela.dtors) } >FLASH AT>FLASH :FLASH + .rel.got : { *(.rel.got) } >FLASH AT>FLASH :FLASH + .rela.got : { *(.rela.got) } >FLASH AT>FLASH :FLASH + .rel.bss : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) } >FLASH AT>FLASH :FLASH + .rela.bss : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) } >FLASH AT>FLASH :FLASH + .rel.plt : { *(.rel.plt) } >FLASH AT>FLASH :FLASH + .rela.plt : { *(.rela.plt) } >FLASH AT>FLASH :FLASH + .init : + { + KEEP (*(.init)) + } >FLASH AT>FLASH :FLASH =0xd703d703 + .plt : { *(.plt) } >FLASH AT>FLASH :FLASH + .text : + { + *(.text .stub .text.* .gnu.linkonce.t.*) + KEEP (*(.text.*personality*)) + /* .gnu.warning sections are handled specially by elf32.em. */ + *(.gnu.warning) + } >FLASH AT>FLASH :FLASH =0xd703d703 + .fini : + { + KEEP (*(.fini)) + } >FLASH AT>FLASH :FLASH =0xd703d703 + PROVIDE (__etext = .); + PROVIDE (_etext = .); + PROVIDE (etext = .); + .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } >FLASH AT>FLASH :FLASH + .rodata1 : { *(.rodata1) } >FLASH AT>FLASH :FLASH + .eh_frame_hdr : { *(.eh_frame_hdr) } >FLASH AT>FLASH :FLASH + .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) } >FLASH AT>FLASH :FLASH + .gcc_except_table : ONLY_IF_RO { KEEP (*(.gcc_except_table)) *(.gcc_except_table.*) } >FLASH AT>FLASH :FLASH + .lalign : { . = ALIGN(8); PROVIDE(_data_lma = .); } >FLASH AT>FLASH :FLASH + . = ORIGIN(INTRAM); + .dalign : { . = ALIGN(8); PROVIDE(_data = .); } >INTRAM AT>INTRAM :INTRAM_ALIGN + /* Exception handling */ + .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .gcc_except_table : ONLY_IF_RW { KEEP (*(.gcc_except_table)) *(.gcc_except_table.*) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + /* Thread Local Storage sections */ + .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + /* Ensure the __preinit_array_start label is properly aligned. We + could instead move the label definition inside the section, but + the linker would then create the section even if it turns out to + be empty, which isn't pretty. */ + PROVIDE (__preinit_array_start = ALIGN(32 / 8)); + .preinit_array : { KEEP (*(.preinit_array)) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + PROVIDE (__preinit_array_end = .); + PROVIDE (__init_array_start = .); + .init_array : { KEEP (*(.init_array)) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + PROVIDE (__init_array_end = .); + PROVIDE (__fini_array_start = .); + .fini_array : { KEEP (*(.fini_array)) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + PROVIDE (__fini_array_end = .); + .ctors : + { + /* gcc uses crtbegin.o to find the start of + the constructors, so we make sure it is + first. Because this is a wildcard, it + doesn't matter if the user does not + actually link against crtbegin.o; the + linker won't look for a file to match a + wildcard. The wildcard also means that it + doesn't matter which directory crtbegin.o + is in. */ + KEEP (*crtbegin*.o(.ctors)) + /* We don't want to include the .ctor section from + from the crtend.o file until after the sorted ctors. + The .ctor section from the crtend file contains the + end of ctors marker and it must be last */ + KEEP (*(EXCLUDE_FILE (*crtend*.o ) .ctors)) + KEEP (*(SORT(.ctors.*))) + KEEP (*(.ctors)) + } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .dtors : + { + KEEP (*crtbegin*.o(.dtors)) + KEEP (*(EXCLUDE_FILE (*crtend*.o ) .dtors)) + KEEP (*(SORT(.dtors.*))) + KEEP (*(.dtors)) + } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .jcr : { KEEP (*(.jcr)) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .data.rel.ro : { *(.data.rel.ro.local) *(.data.rel.ro*) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .dynamic : { *(.dynamic) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .got : { *(.got.plt) *(.got) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .ramtext : { *(.ramtext .ramtext.*) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .ddalign : { . = ALIGN(8); } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .data : + { + *(.data .data.* .gnu.linkonce.d.*) + KEEP (*(.gnu.linkonce.d.*personality*)) + SORT(CONSTRUCTORS) + } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .data1 : { *(.data1) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .balign : { . = ALIGN(8); PROVIDE(_edata = .); } >INTRAM AT>FLASH :INTRAM_AT_FLASH + PROVIDE (edata = .); + __bss_start = .; + .bss : + { + *(.dynbss) + *(.bss .bss.* .gnu.linkonce.b.*) + *(COMMON) + /* Align here to ensure that the .bss section occupies space up to + _end. Align after .bss to ensure correct alignment even if the + .bss section disappears because there are no input sections. */ + . = ALIGN(8); + } >INTRAM AT>INTRAM :INTRAM + . = ALIGN(8); + _end = .; + PROVIDE (end = .); + __heap_start__ = ALIGN(8); + .heap : + { + *(.heap) + . = (__heap_size__ == __max_heap_size__) ? + ORIGIN(INTRAM) + LENGTH(INTRAM) - __stack_size__ - ABSOLUTE(.) : + __heap_size__; + } >INTRAM AT>INTRAM :INTRAM + __heap_end__ = .; + /* Stabs debugging sections. */ + .stab 0 : { *(.stab) } + .stabstr 0 : { *(.stabstr) } + .stab.excl 0 : { *(.stab.excl) } + .stab.exclstr 0 : { *(.stab.exclstr) } + .stab.index 0 : { *(.stab.index) } + .stab.indexstr 0 : { *(.stab.indexstr) } + .comment 0 : { *(.comment) } + /* DWARF debug sections. + Symbols in the DWARF debugging sections are relative to the beginning + of the section so we begin them at 0. */ + /* DWARF 1 */ + .debug 0 : { *(.debug) } + .line 0 : { *(.line) } + /* GNU DWARF 1 extensions */ + .debug_srcinfo 0 : { *(.debug_srcinfo) } + .debug_sfnames 0 : { *(.debug_sfnames) } + /* DWARF 1.1 and DWARF 2 */ + .debug_aranges 0 : { *(.debug_aranges) } + .debug_pubnames 0 : { *(.debug_pubnames) } + /* DWARF 2 */ + .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } + .debug_abbrev 0 : { *(.debug_abbrev) } + .debug_line 0 : { *(.debug_line) } + .debug_frame 0 : { *(.debug_frame) } + .debug_str 0 : { *(.debug_str) } + .debug_loc 0 : { *(.debug_loc) } + .debug_macinfo 0 : { *(.debug_macinfo) } + /* SGI/MIPS DWARF 2 extensions */ + .debug_weaknames 0 : { *(.debug_weaknames) } + .debug_funcnames 0 : { *(.debug_funcnames) } + .debug_typenames 0 : { *(.debug_typenames) } + .debug_varnames 0 : { *(.debug_varnames) } + .stack ORIGIN(INTRAM) + LENGTH(INTRAM) - __stack_size__ : + { + _stack = .; + *(.stack) + . = __stack_size__; + _estack = .; + } >INTRAM AT>INTRAM :INTRAM + .userpage : { *(.userpage .userpage.*) } >USERPAGE AT>USERPAGE :USERPAGE + /DISCARD/ : { *(.note.GNU-stack) } +} diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/LINKER_SCRIPTS/AT32UC3A/1256/GCC/link_uc3a1256.lds b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/LINKER_SCRIPTS/AT32UC3A/1256/GCC/link_uc3a1256.lds new file mode 100644 index 000000000..a5926d8be --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/LINKER_SCRIPTS/AT32UC3A/1256/GCC/link_uc3a1256.lds @@ -0,0 +1,266 @@ +/****************************************************************************** + * AVR32 AT32UC3A1256 GNU LD script file. + * + * - Compiler: GNU GCC for AVR32 + * - Supported devices: AVR32 AT32UC3A1256 + * + * - author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +OUTPUT_FORMAT("elf32-avr32", "elf32-avr32", "elf32-avr32") + +OUTPUT_ARCH(avr32:uc) + +ENTRY(_start) + +MEMORY +{ + FLASH (rxai!w) : ORIGIN = 0x80000000, LENGTH = 0x00040000 + INTRAM (wxa!ri) : ORIGIN = 0x00000004, LENGTH = 0x0000FFFC + USERPAGE : ORIGIN = 0x80800000, LENGTH = 0x00000200 +} + +PHDRS +{ + FLASH PT_LOAD; + INTRAM_ALIGN PT_NULL; + INTRAM_AT_FLASH PT_LOAD; + INTRAM PT_NULL; + USERPAGE PT_LOAD; +} + +SECTIONS +{ + /* If this heap size is selected, all the INTRAM space from the end of the + data area to the beginning of the stack will be allocated for the heap. */ + __max_heap_size__ = -1; + + /* Use a default heap size if heap size was not defined. */ + __heap_size__ = DEFINED(__heap_size__) ? __heap_size__ : __max_heap_size__; + + /* Use a default stack size if stack size was not defined. */ + __stack_size__ = DEFINED(__stack_size__) ? __stack_size__ : 4K; + + /* Read-only sections, merged into text segment: */ + PROVIDE (__executable_start = 0x80000000); . = 0x80000000; + .interp : { *(.interp) } >FLASH AT>FLASH :FLASH + .reset : { *(.reset) } >FLASH AT>FLASH :FLASH + .hash : { *(.hash) } >FLASH AT>FLASH :FLASH + .dynsym : { *(.dynsym) } >FLASH AT>FLASH :FLASH + .dynstr : { *(.dynstr) } >FLASH AT>FLASH :FLASH + .gnu.version : { *(.gnu.version) } >FLASH AT>FLASH :FLASH + .gnu.version_d : { *(.gnu.version_d) } >FLASH AT>FLASH :FLASH + .gnu.version_r : { *(.gnu.version_r) } >FLASH AT>FLASH :FLASH + .rel.init : { *(.rel.init) } >FLASH AT>FLASH :FLASH + .rela.init : { *(.rela.init) } >FLASH AT>FLASH :FLASH + .rel.text : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) } >FLASH AT>FLASH :FLASH + .rela.text : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) } >FLASH AT>FLASH :FLASH + .rel.fini : { *(.rel.fini) } >FLASH AT>FLASH :FLASH + .rela.fini : { *(.rela.fini) } >FLASH AT>FLASH :FLASH + .rel.rodata : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) } >FLASH AT>FLASH :FLASH + .rela.rodata : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) } >FLASH AT>FLASH :FLASH + .rel.data.rel.ro : { *(.rel.data.rel.ro*) } >FLASH AT>FLASH :FLASH + .rela.data.rel.ro : { *(.rel.data.rel.ro*) } >FLASH AT>FLASH :FLASH + .rel.data : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) } >FLASH AT>FLASH :FLASH + .rela.data : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) } >FLASH AT>FLASH :FLASH + .rel.tdata : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) } >FLASH AT>FLASH :FLASH + .rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) } >FLASH AT>FLASH :FLASH + .rel.tbss : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) } >FLASH AT>FLASH :FLASH + .rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) } >FLASH AT>FLASH :FLASH + .rel.ctors : { *(.rel.ctors) } >FLASH AT>FLASH :FLASH + .rela.ctors : { *(.rela.ctors) } >FLASH AT>FLASH :FLASH + .rel.dtors : { *(.rel.dtors) } >FLASH AT>FLASH :FLASH + .rela.dtors : { *(.rela.dtors) } >FLASH AT>FLASH :FLASH + .rel.got : { *(.rel.got) } >FLASH AT>FLASH :FLASH + .rela.got : { *(.rela.got) } >FLASH AT>FLASH :FLASH + .rel.bss : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) } >FLASH AT>FLASH :FLASH + .rela.bss : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) } >FLASH AT>FLASH :FLASH + .rel.plt : { *(.rel.plt) } >FLASH AT>FLASH :FLASH + .rela.plt : { *(.rela.plt) } >FLASH AT>FLASH :FLASH + .init : + { + KEEP (*(.init)) + } >FLASH AT>FLASH :FLASH =0xd703d703 + .plt : { *(.plt) } >FLASH AT>FLASH :FLASH + .text : + { + *(.text .stub .text.* .gnu.linkonce.t.*) + KEEP (*(.text.*personality*)) + /* .gnu.warning sections are handled specially by elf32.em. */ + *(.gnu.warning) + } >FLASH AT>FLASH :FLASH =0xd703d703 + .fini : + { + KEEP (*(.fini)) + } >FLASH AT>FLASH :FLASH =0xd703d703 + PROVIDE (__etext = .); + PROVIDE (_etext = .); + PROVIDE (etext = .); + .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } >FLASH AT>FLASH :FLASH + .rodata1 : { *(.rodata1) } >FLASH AT>FLASH :FLASH + .eh_frame_hdr : { *(.eh_frame_hdr) } >FLASH AT>FLASH :FLASH + .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) } >FLASH AT>FLASH :FLASH + .gcc_except_table : ONLY_IF_RO { KEEP (*(.gcc_except_table)) *(.gcc_except_table.*) } >FLASH AT>FLASH :FLASH + .lalign : { . = ALIGN(8); PROVIDE(_data_lma = .); } >FLASH AT>FLASH :FLASH + . = ORIGIN(INTRAM); + .dalign : { . = ALIGN(8); PROVIDE(_data = .); } >INTRAM AT>INTRAM :INTRAM_ALIGN + /* Exception handling */ + .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .gcc_except_table : ONLY_IF_RW { KEEP (*(.gcc_except_table)) *(.gcc_except_table.*) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + /* Thread Local Storage sections */ + .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + /* Ensure the __preinit_array_start label is properly aligned. We + could instead move the label definition inside the section, but + the linker would then create the section even if it turns out to + be empty, which isn't pretty. */ + PROVIDE (__preinit_array_start = ALIGN(32 / 8)); + .preinit_array : { KEEP (*(.preinit_array)) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + PROVIDE (__preinit_array_end = .); + PROVIDE (__init_array_start = .); + .init_array : { KEEP (*(.init_array)) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + PROVIDE (__init_array_end = .); + PROVIDE (__fini_array_start = .); + .fini_array : { KEEP (*(.fini_array)) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + PROVIDE (__fini_array_end = .); + .ctors : + { + /* gcc uses crtbegin.o to find the start of + the constructors, so we make sure it is + first. Because this is a wildcard, it + doesn't matter if the user does not + actually link against crtbegin.o; the + linker won't look for a file to match a + wildcard. The wildcard also means that it + doesn't matter which directory crtbegin.o + is in. */ + KEEP (*crtbegin*.o(.ctors)) + /* We don't want to include the .ctor section from + from the crtend.o file until after the sorted ctors. + The .ctor section from the crtend file contains the + end of ctors marker and it must be last */ + KEEP (*(EXCLUDE_FILE (*crtend*.o ) .ctors)) + KEEP (*(SORT(.ctors.*))) + KEEP (*(.ctors)) + } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .dtors : + { + KEEP (*crtbegin*.o(.dtors)) + KEEP (*(EXCLUDE_FILE (*crtend*.o ) .dtors)) + KEEP (*(SORT(.dtors.*))) + KEEP (*(.dtors)) + } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .jcr : { KEEP (*(.jcr)) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .data.rel.ro : { *(.data.rel.ro.local) *(.data.rel.ro*) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .dynamic : { *(.dynamic) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .got : { *(.got.plt) *(.got) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .ramtext : { *(.ramtext .ramtext.*) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .ddalign : { . = ALIGN(8); } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .data : + { + *(.data .data.* .gnu.linkonce.d.*) + KEEP (*(.gnu.linkonce.d.*personality*)) + SORT(CONSTRUCTORS) + } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .data1 : { *(.data1) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .balign : { . = ALIGN(8); PROVIDE(_edata = .); } >INTRAM AT>FLASH :INTRAM_AT_FLASH + PROVIDE (edata = .); + __bss_start = .; + .bss : + { + *(.dynbss) + *(.bss .bss.* .gnu.linkonce.b.*) + *(COMMON) + /* Align here to ensure that the .bss section occupies space up to + _end. Align after .bss to ensure correct alignment even if the + .bss section disappears because there are no input sections. */ + . = ALIGN(8); + } >INTRAM AT>INTRAM :INTRAM + . = ALIGN(8); + _end = .; + PROVIDE (end = .); + __heap_start__ = ALIGN(8); + .heap : + { + *(.heap) + . = (__heap_size__ == __max_heap_size__) ? + ORIGIN(INTRAM) + LENGTH(INTRAM) - __stack_size__ - ABSOLUTE(.) : + __heap_size__; + } >INTRAM AT>INTRAM :INTRAM + __heap_end__ = .; + /* Stabs debugging sections. */ + .stab 0 : { *(.stab) } + .stabstr 0 : { *(.stabstr) } + .stab.excl 0 : { *(.stab.excl) } + .stab.exclstr 0 : { *(.stab.exclstr) } + .stab.index 0 : { *(.stab.index) } + .stab.indexstr 0 : { *(.stab.indexstr) } + .comment 0 : { *(.comment) } + /* DWARF debug sections. + Symbols in the DWARF debugging sections are relative to the beginning + of the section so we begin them at 0. */ + /* DWARF 1 */ + .debug 0 : { *(.debug) } + .line 0 : { *(.line) } + /* GNU DWARF 1 extensions */ + .debug_srcinfo 0 : { *(.debug_srcinfo) } + .debug_sfnames 0 : { *(.debug_sfnames) } + /* DWARF 1.1 and DWARF 2 */ + .debug_aranges 0 : { *(.debug_aranges) } + .debug_pubnames 0 : { *(.debug_pubnames) } + /* DWARF 2 */ + .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } + .debug_abbrev 0 : { *(.debug_abbrev) } + .debug_line 0 : { *(.debug_line) } + .debug_frame 0 : { *(.debug_frame) } + .debug_str 0 : { *(.debug_str) } + .debug_loc 0 : { *(.debug_loc) } + .debug_macinfo 0 : { *(.debug_macinfo) } + /* SGI/MIPS DWARF 2 extensions */ + .debug_weaknames 0 : { *(.debug_weaknames) } + .debug_funcnames 0 : { *(.debug_funcnames) } + .debug_typenames 0 : { *(.debug_typenames) } + .debug_varnames 0 : { *(.debug_varnames) } + .stack ORIGIN(INTRAM) + LENGTH(INTRAM) - __stack_size__ : + { + _stack = .; + *(.stack) + . = __stack_size__; + _estack = .; + } >INTRAM AT>INTRAM :INTRAM + .userpage : { *(.userpage .userpage.*) } >USERPAGE AT>USERPAGE :USERPAGE + /DISCARD/ : { *(.note.GNU-stack) } +} diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR/mrepeat.h b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR/mrepeat.h new file mode 100644 index 000000000..41163b6d9 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR/mrepeat.h @@ -0,0 +1,328 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Preprocessor macro repeating utils. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _MREPEAT_H_ +#define _MREPEAT_H_ + +#include "preprocessor.h" + + +//! Maximal number of repetitions supported by MREPEAT. +#define MREPEAT_LIMIT 256 + +/*! \brief Macro repeat. + * + * This macro represents a horizontal repetition construct. + * + * \param count The number of repetitious calls to macro. Valid values range from 0 to MREPEAT_LIMIT. + * \param macro A binary operation of the form macro(n, data). This macro is expanded by MREPEAT with + * the current repetition number and the auxiliary data argument. + * \param data Auxiliary data passed to macro. + * + * \return macro(0, data) macro(1, data) ... macro(count - 1, data) + */ +#define MREPEAT(count, macro, data) TPASTE2(MREPEAT, count)(macro, data) + +#define MREPEAT0( macro, data) +#define MREPEAT1( macro, data) MREPEAT0( macro, data) macro( 0, data) +#define MREPEAT2( macro, data) MREPEAT1( macro, data) macro( 1, data) +#define MREPEAT3( macro, data) MREPEAT2( macro, data) macro( 2, data) +#define MREPEAT4( macro, data) MREPEAT3( macro, data) macro( 3, data) +#define MREPEAT5( macro, data) MREPEAT4( macro, data) macro( 4, data) +#define MREPEAT6( macro, data) MREPEAT5( macro, data) macro( 5, data) +#define MREPEAT7( macro, data) MREPEAT6( macro, data) macro( 6, data) +#define MREPEAT8( macro, data) MREPEAT7( macro, data) macro( 7, data) +#define MREPEAT9( macro, data) MREPEAT8( macro, data) macro( 8, data) +#define MREPEAT10( macro, data) MREPEAT9( macro, data) macro( 9, data) +#define MREPEAT11( macro, data) MREPEAT10( macro, data) macro( 10, data) +#define MREPEAT12( macro, data) MREPEAT11( macro, data) macro( 11, data) +#define MREPEAT13( macro, data) MREPEAT12( macro, data) macro( 12, data) +#define MREPEAT14( macro, data) MREPEAT13( macro, data) macro( 13, data) +#define MREPEAT15( macro, data) MREPEAT14( macro, data) macro( 14, data) +#define MREPEAT16( macro, data) MREPEAT15( macro, data) macro( 15, data) +#define MREPEAT17( macro, data) MREPEAT16( macro, data) macro( 16, data) +#define MREPEAT18( macro, data) MREPEAT17( macro, data) macro( 17, data) +#define MREPEAT19( macro, data) MREPEAT18( macro, data) macro( 18, data) +#define MREPEAT20( macro, data) MREPEAT19( macro, data) macro( 19, data) +#define MREPEAT21( macro, data) MREPEAT20( macro, data) macro( 20, data) +#define MREPEAT22( macro, data) MREPEAT21( macro, data) macro( 21, data) +#define MREPEAT23( macro, data) MREPEAT22( macro, data) macro( 22, data) +#define MREPEAT24( macro, data) MREPEAT23( macro, data) macro( 23, data) +#define MREPEAT25( macro, data) MREPEAT24( macro, data) macro( 24, data) +#define MREPEAT26( macro, data) MREPEAT25( macro, data) macro( 25, data) +#define MREPEAT27( macro, data) MREPEAT26( macro, data) macro( 26, data) +#define MREPEAT28( macro, data) MREPEAT27( macro, data) macro( 27, data) +#define MREPEAT29( macro, data) MREPEAT28( macro, data) macro( 28, data) +#define MREPEAT30( macro, data) MREPEAT29( macro, data) macro( 29, data) +#define MREPEAT31( macro, data) MREPEAT30( macro, data) macro( 30, data) +#define MREPEAT32( macro, data) MREPEAT31( macro, data) macro( 31, data) +#define MREPEAT33( macro, data) MREPEAT32( macro, data) macro( 32, data) +#define MREPEAT34( macro, data) MREPEAT33( macro, data) macro( 33, data) +#define MREPEAT35( macro, data) MREPEAT34( macro, data) macro( 34, data) +#define MREPEAT36( macro, data) MREPEAT35( macro, data) macro( 35, data) +#define MREPEAT37( macro, data) MREPEAT36( macro, data) macro( 36, data) +#define MREPEAT38( macro, data) MREPEAT37( macro, data) macro( 37, data) +#define MREPEAT39( macro, data) MREPEAT38( macro, data) macro( 38, data) +#define MREPEAT40( macro, data) MREPEAT39( macro, data) macro( 39, data) +#define MREPEAT41( macro, data) MREPEAT40( macro, data) macro( 40, data) +#define MREPEAT42( macro, data) MREPEAT41( macro, data) macro( 41, data) +#define MREPEAT43( macro, data) MREPEAT42( macro, data) macro( 42, data) +#define MREPEAT44( macro, data) MREPEAT43( macro, data) macro( 43, data) +#define MREPEAT45( macro, data) MREPEAT44( macro, data) macro( 44, data) +#define MREPEAT46( macro, data) MREPEAT45( macro, data) macro( 45, data) +#define MREPEAT47( macro, data) MREPEAT46( macro, data) macro( 46, data) +#define MREPEAT48( macro, data) MREPEAT47( macro, data) macro( 47, data) +#define MREPEAT49( macro, data) MREPEAT48( macro, data) macro( 48, data) +#define MREPEAT50( macro, data) MREPEAT49( macro, data) macro( 49, data) +#define MREPEAT51( macro, data) MREPEAT50( macro, data) macro( 50, data) +#define MREPEAT52( macro, data) MREPEAT51( macro, data) macro( 51, data) +#define MREPEAT53( macro, data) MREPEAT52( macro, data) macro( 52, data) +#define MREPEAT54( macro, data) MREPEAT53( macro, data) macro( 53, data) +#define MREPEAT55( macro, data) MREPEAT54( macro, data) macro( 54, data) +#define MREPEAT56( macro, data) MREPEAT55( macro, data) macro( 55, data) +#define MREPEAT57( macro, data) MREPEAT56( macro, data) macro( 56, data) +#define MREPEAT58( macro, data) MREPEAT57( macro, data) macro( 57, data) +#define MREPEAT59( macro, data) MREPEAT58( macro, data) macro( 58, data) +#define MREPEAT60( macro, data) MREPEAT59( macro, data) macro( 59, data) +#define MREPEAT61( macro, data) MREPEAT60( macro, data) macro( 60, data) +#define MREPEAT62( macro, data) MREPEAT61( macro, data) macro( 61, data) +#define MREPEAT63( macro, data) MREPEAT62( macro, data) macro( 62, data) +#define MREPEAT64( macro, data) MREPEAT63( macro, data) macro( 63, data) +#define MREPEAT65( macro, data) MREPEAT64( macro, data) macro( 64, data) +#define MREPEAT66( macro, data) MREPEAT65( macro, data) macro( 65, data) +#define MREPEAT67( macro, data) MREPEAT66( macro, data) macro( 66, data) +#define MREPEAT68( macro, data) MREPEAT67( macro, data) macro( 67, data) +#define MREPEAT69( macro, data) MREPEAT68( macro, data) macro( 68, data) +#define MREPEAT70( macro, data) MREPEAT69( macro, data) macro( 69, data) +#define MREPEAT71( macro, data) MREPEAT70( macro, data) macro( 70, data) +#define MREPEAT72( macro, data) MREPEAT71( macro, data) macro( 71, data) +#define MREPEAT73( macro, data) MREPEAT72( macro, data) macro( 72, data) +#define MREPEAT74( macro, data) MREPEAT73( macro, data) macro( 73, data) +#define MREPEAT75( macro, data) MREPEAT74( macro, data) macro( 74, data) +#define MREPEAT76( macro, data) MREPEAT75( macro, data) macro( 75, data) +#define MREPEAT77( macro, data) MREPEAT76( macro, data) macro( 76, data) +#define MREPEAT78( macro, data) MREPEAT77( macro, data) macro( 77, data) +#define MREPEAT79( macro, data) MREPEAT78( macro, data) macro( 78, data) +#define MREPEAT80( macro, data) MREPEAT79( macro, data) macro( 79, data) +#define MREPEAT81( macro, data) MREPEAT80( macro, data) macro( 80, data) +#define MREPEAT82( macro, data) MREPEAT81( macro, data) macro( 81, data) +#define MREPEAT83( macro, data) MREPEAT82( macro, data) macro( 82, data) +#define MREPEAT84( macro, data) MREPEAT83( macro, data) macro( 83, data) +#define MREPEAT85( macro, data) MREPEAT84( macro, data) macro( 84, data) +#define MREPEAT86( macro, data) MREPEAT85( macro, data) macro( 85, data) +#define MREPEAT87( macro, data) MREPEAT86( macro, data) macro( 86, data) +#define MREPEAT88( macro, data) MREPEAT87( macro, data) macro( 87, data) +#define MREPEAT89( macro, data) MREPEAT88( macro, data) macro( 88, data) +#define MREPEAT90( macro, data) MREPEAT89( macro, data) macro( 89, data) +#define MREPEAT91( macro, data) MREPEAT90( macro, data) macro( 90, data) +#define MREPEAT92( macro, data) MREPEAT91( macro, data) macro( 91, data) +#define MREPEAT93( macro, data) MREPEAT92( macro, data) macro( 92, data) +#define MREPEAT94( macro, data) MREPEAT93( macro, data) macro( 93, data) +#define MREPEAT95( macro, data) MREPEAT94( macro, data) macro( 94, data) +#define MREPEAT96( macro, data) MREPEAT95( macro, data) macro( 95, data) +#define MREPEAT97( macro, data) MREPEAT96( macro, data) macro( 96, data) +#define MREPEAT98( macro, data) MREPEAT97( macro, data) macro( 97, data) +#define MREPEAT99( macro, data) MREPEAT98( macro, data) macro( 98, data) +#define MREPEAT100(macro, data) MREPEAT99( macro, data) macro( 99, data) +#define MREPEAT101(macro, data) MREPEAT100(macro, data) macro(100, data) +#define MREPEAT102(macro, data) MREPEAT101(macro, data) macro(101, data) +#define MREPEAT103(macro, data) MREPEAT102(macro, data) macro(102, data) +#define MREPEAT104(macro, data) MREPEAT103(macro, data) macro(103, data) +#define MREPEAT105(macro, data) MREPEAT104(macro, data) macro(104, data) +#define MREPEAT106(macro, data) MREPEAT105(macro, data) macro(105, data) +#define MREPEAT107(macro, data) MREPEAT106(macro, data) macro(106, data) +#define MREPEAT108(macro, data) MREPEAT107(macro, data) macro(107, data) +#define MREPEAT109(macro, data) MREPEAT108(macro, data) macro(108, data) +#define MREPEAT110(macro, data) MREPEAT109(macro, data) macro(109, data) +#define MREPEAT111(macro, data) MREPEAT110(macro, data) macro(110, data) +#define MREPEAT112(macro, data) MREPEAT111(macro, data) macro(111, data) +#define MREPEAT113(macro, data) MREPEAT112(macro, data) macro(112, data) +#define MREPEAT114(macro, data) MREPEAT113(macro, data) macro(113, data) +#define MREPEAT115(macro, data) MREPEAT114(macro, data) macro(114, data) +#define MREPEAT116(macro, data) MREPEAT115(macro, data) macro(115, data) +#define MREPEAT117(macro, data) MREPEAT116(macro, data) macro(116, data) +#define MREPEAT118(macro, data) MREPEAT117(macro, data) macro(117, data) +#define MREPEAT119(macro, data) MREPEAT118(macro, data) macro(118, data) +#define MREPEAT120(macro, data) MREPEAT119(macro, data) macro(119, data) +#define MREPEAT121(macro, data) MREPEAT120(macro, data) macro(120, data) +#define MREPEAT122(macro, data) MREPEAT121(macro, data) macro(121, data) +#define MREPEAT123(macro, data) MREPEAT122(macro, data) macro(122, data) +#define MREPEAT124(macro, data) MREPEAT123(macro, data) macro(123, data) +#define MREPEAT125(macro, data) MREPEAT124(macro, data) macro(124, data) +#define MREPEAT126(macro, data) MREPEAT125(macro, data) macro(125, data) +#define MREPEAT127(macro, data) MREPEAT126(macro, data) macro(126, data) +#define MREPEAT128(macro, data) MREPEAT127(macro, data) macro(127, data) +#define MREPEAT129(macro, data) MREPEAT128(macro, data) macro(128, data) +#define MREPEAT130(macro, data) MREPEAT129(macro, data) macro(129, data) +#define MREPEAT131(macro, data) MREPEAT130(macro, data) macro(130, data) +#define MREPEAT132(macro, data) MREPEAT131(macro, data) macro(131, data) +#define MREPEAT133(macro, data) MREPEAT132(macro, data) macro(132, data) +#define MREPEAT134(macro, data) MREPEAT133(macro, data) macro(133, data) +#define MREPEAT135(macro, data) MREPEAT134(macro, data) macro(134, data) +#define MREPEAT136(macro, data) MREPEAT135(macro, data) macro(135, data) +#define MREPEAT137(macro, data) MREPEAT136(macro, data) macro(136, data) +#define MREPEAT138(macro, data) MREPEAT137(macro, data) macro(137, data) +#define MREPEAT139(macro, data) MREPEAT138(macro, data) macro(138, data) +#define MREPEAT140(macro, data) MREPEAT139(macro, data) macro(139, data) +#define MREPEAT141(macro, data) MREPEAT140(macro, data) macro(140, data) +#define MREPEAT142(macro, data) MREPEAT141(macro, data) macro(141, data) +#define MREPEAT143(macro, data) MREPEAT142(macro, data) macro(142, data) +#define MREPEAT144(macro, data) MREPEAT143(macro, data) macro(143, data) +#define MREPEAT145(macro, data) MREPEAT144(macro, data) macro(144, data) +#define MREPEAT146(macro, data) MREPEAT145(macro, data) macro(145, data) +#define MREPEAT147(macro, data) MREPEAT146(macro, data) macro(146, data) +#define MREPEAT148(macro, data) MREPEAT147(macro, data) macro(147, data) +#define MREPEAT149(macro, data) MREPEAT148(macro, data) macro(148, data) +#define MREPEAT150(macro, data) MREPEAT149(macro, data) macro(149, data) +#define MREPEAT151(macro, data) MREPEAT150(macro, data) macro(150, data) +#define MREPEAT152(macro, data) MREPEAT151(macro, data) macro(151, data) +#define MREPEAT153(macro, data) MREPEAT152(macro, data) macro(152, data) +#define MREPEAT154(macro, data) MREPEAT153(macro, data) macro(153, data) +#define MREPEAT155(macro, data) MREPEAT154(macro, data) macro(154, data) +#define MREPEAT156(macro, data) MREPEAT155(macro, data) macro(155, data) +#define MREPEAT157(macro, data) MREPEAT156(macro, data) macro(156, data) +#define MREPEAT158(macro, data) MREPEAT157(macro, data) macro(157, data) +#define MREPEAT159(macro, data) MREPEAT158(macro, data) macro(158, data) +#define MREPEAT160(macro, data) MREPEAT159(macro, data) macro(159, data) +#define MREPEAT161(macro, data) MREPEAT160(macro, data) macro(160, data) +#define MREPEAT162(macro, data) MREPEAT161(macro, data) macro(161, data) +#define MREPEAT163(macro, data) MREPEAT162(macro, data) macro(162, data) +#define MREPEAT164(macro, data) MREPEAT163(macro, data) macro(163, data) +#define MREPEAT165(macro, data) MREPEAT164(macro, data) macro(164, data) +#define MREPEAT166(macro, data) MREPEAT165(macro, data) macro(165, data) +#define MREPEAT167(macro, data) MREPEAT166(macro, data) macro(166, data) +#define MREPEAT168(macro, data) MREPEAT167(macro, data) macro(167, data) +#define MREPEAT169(macro, data) MREPEAT168(macro, data) macro(168, data) +#define MREPEAT170(macro, data) MREPEAT169(macro, data) macro(169, data) +#define MREPEAT171(macro, data) MREPEAT170(macro, data) macro(170, data) +#define MREPEAT172(macro, data) MREPEAT171(macro, data) macro(171, data) +#define MREPEAT173(macro, data) MREPEAT172(macro, data) macro(172, data) +#define MREPEAT174(macro, data) MREPEAT173(macro, data) macro(173, data) +#define MREPEAT175(macro, data) MREPEAT174(macro, data) macro(174, data) +#define MREPEAT176(macro, data) MREPEAT175(macro, data) macro(175, data) +#define MREPEAT177(macro, data) MREPEAT176(macro, data) macro(176, data) +#define MREPEAT178(macro, data) MREPEAT177(macro, data) macro(177, data) +#define MREPEAT179(macro, data) MREPEAT178(macro, data) macro(178, data) +#define MREPEAT180(macro, data) MREPEAT179(macro, data) macro(179, data) +#define MREPEAT181(macro, data) MREPEAT180(macro, data) macro(180, data) +#define MREPEAT182(macro, data) MREPEAT181(macro, data) macro(181, data) +#define MREPEAT183(macro, data) MREPEAT182(macro, data) macro(182, data) +#define MREPEAT184(macro, data) MREPEAT183(macro, data) macro(183, data) +#define MREPEAT185(macro, data) MREPEAT184(macro, data) macro(184, data) +#define MREPEAT186(macro, data) MREPEAT185(macro, data) macro(185, data) +#define MREPEAT187(macro, data) MREPEAT186(macro, data) macro(186, data) +#define MREPEAT188(macro, data) MREPEAT187(macro, data) macro(187, data) +#define MREPEAT189(macro, data) MREPEAT188(macro, data) macro(188, data) +#define MREPEAT190(macro, data) MREPEAT189(macro, data) macro(189, data) +#define MREPEAT191(macro, data) MREPEAT190(macro, data) macro(190, data) +#define MREPEAT192(macro, data) MREPEAT191(macro, data) macro(191, data) +#define MREPEAT193(macro, data) MREPEAT192(macro, data) macro(192, data) +#define MREPEAT194(macro, data) MREPEAT193(macro, data) macro(193, data) +#define MREPEAT195(macro, data) MREPEAT194(macro, data) macro(194, data) +#define MREPEAT196(macro, data) MREPEAT195(macro, data) macro(195, data) +#define MREPEAT197(macro, data) MREPEAT196(macro, data) macro(196, data) +#define MREPEAT198(macro, data) MREPEAT197(macro, data) macro(197, data) +#define MREPEAT199(macro, data) MREPEAT198(macro, data) macro(198, data) +#define MREPEAT200(macro, data) MREPEAT199(macro, data) macro(199, data) +#define MREPEAT201(macro, data) MREPEAT200(macro, data) macro(200, data) +#define MREPEAT202(macro, data) MREPEAT201(macro, data) macro(201, data) +#define MREPEAT203(macro, data) MREPEAT202(macro, data) macro(202, data) +#define MREPEAT204(macro, data) MREPEAT203(macro, data) macro(203, data) +#define MREPEAT205(macro, data) MREPEAT204(macro, data) macro(204, data) +#define MREPEAT206(macro, data) MREPEAT205(macro, data) macro(205, data) +#define MREPEAT207(macro, data) MREPEAT206(macro, data) macro(206, data) +#define MREPEAT208(macro, data) MREPEAT207(macro, data) macro(207, data) +#define MREPEAT209(macro, data) MREPEAT208(macro, data) macro(208, data) +#define MREPEAT210(macro, data) MREPEAT209(macro, data) macro(209, data) +#define MREPEAT211(macro, data) MREPEAT210(macro, data) macro(210, data) +#define MREPEAT212(macro, data) MREPEAT211(macro, data) macro(211, data) +#define MREPEAT213(macro, data) MREPEAT212(macro, data) macro(212, data) +#define MREPEAT214(macro, data) MREPEAT213(macro, data) macro(213, data) +#define MREPEAT215(macro, data) MREPEAT214(macro, data) macro(214, data) +#define MREPEAT216(macro, data) MREPEAT215(macro, data) macro(215, data) +#define MREPEAT217(macro, data) MREPEAT216(macro, data) macro(216, data) +#define MREPEAT218(macro, data) MREPEAT217(macro, data) macro(217, data) +#define MREPEAT219(macro, data) MREPEAT218(macro, data) macro(218, data) +#define MREPEAT220(macro, data) MREPEAT219(macro, data) macro(219, data) +#define MREPEAT221(macro, data) MREPEAT220(macro, data) macro(220, data) +#define MREPEAT222(macro, data) MREPEAT221(macro, data) macro(221, data) +#define MREPEAT223(macro, data) MREPEAT222(macro, data) macro(222, data) +#define MREPEAT224(macro, data) MREPEAT223(macro, data) macro(223, data) +#define MREPEAT225(macro, data) MREPEAT224(macro, data) macro(224, data) +#define MREPEAT226(macro, data) MREPEAT225(macro, data) macro(225, data) +#define MREPEAT227(macro, data) MREPEAT226(macro, data) macro(226, data) +#define MREPEAT228(macro, data) MREPEAT227(macro, data) macro(227, data) +#define MREPEAT229(macro, data) MREPEAT228(macro, data) macro(228, data) +#define MREPEAT230(macro, data) MREPEAT229(macro, data) macro(229, data) +#define MREPEAT231(macro, data) MREPEAT230(macro, data) macro(230, data) +#define MREPEAT232(macro, data) MREPEAT231(macro, data) macro(231, data) +#define MREPEAT233(macro, data) MREPEAT232(macro, data) macro(232, data) +#define MREPEAT234(macro, data) MREPEAT233(macro, data) macro(233, data) +#define MREPEAT235(macro, data) MREPEAT234(macro, data) macro(234, data) +#define MREPEAT236(macro, data) MREPEAT235(macro, data) macro(235, data) +#define MREPEAT237(macro, data) MREPEAT236(macro, data) macro(236, data) +#define MREPEAT238(macro, data) MREPEAT237(macro, data) macro(237, data) +#define MREPEAT239(macro, data) MREPEAT238(macro, data) macro(238, data) +#define MREPEAT240(macro, data) MREPEAT239(macro, data) macro(239, data) +#define MREPEAT241(macro, data) MREPEAT240(macro, data) macro(240, data) +#define MREPEAT242(macro, data) MREPEAT241(macro, data) macro(241, data) +#define MREPEAT243(macro, data) MREPEAT242(macro, data) macro(242, data) +#define MREPEAT244(macro, data) MREPEAT243(macro, data) macro(243, data) +#define MREPEAT245(macro, data) MREPEAT244(macro, data) macro(244, data) +#define MREPEAT246(macro, data) MREPEAT245(macro, data) macro(245, data) +#define MREPEAT247(macro, data) MREPEAT246(macro, data) macro(246, data) +#define MREPEAT248(macro, data) MREPEAT247(macro, data) macro(247, data) +#define MREPEAT249(macro, data) MREPEAT248(macro, data) macro(248, data) +#define MREPEAT250(macro, data) MREPEAT249(macro, data) macro(249, data) +#define MREPEAT251(macro, data) MREPEAT250(macro, data) macro(250, data) +#define MREPEAT252(macro, data) MREPEAT251(macro, data) macro(251, data) +#define MREPEAT253(macro, data) MREPEAT252(macro, data) macro(252, data) +#define MREPEAT254(macro, data) MREPEAT253(macro, data) macro(253, data) +#define MREPEAT255(macro, data) MREPEAT254(macro, data) macro(254, data) +#define MREPEAT256(macro, data) MREPEAT255(macro, data) macro(255, data) + + +#endif // _MREPEAT_H_ diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR/preprocessor.h b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR/preprocessor.h new file mode 100644 index 000000000..5b996ba11 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR/preprocessor.h @@ -0,0 +1,55 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Preprocessor utils. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _PREPROCESSOR_H_ +#define _PREPROCESSOR_H_ + +#include "tpaste.h" +#include "stringz.h" +#include "mrepeat.h" + + +#endif // _PREPROCESSOR_H_ diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR/stringz.h b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR/stringz.h new file mode 100644 index 000000000..3528ea0da --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR/stringz.h @@ -0,0 +1,75 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Preprocessor stringizing utils. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _STRINGZ_H_ +#define _STRINGZ_H_ + + +/*! \brief Stringize. + * + * Stringize a preprocessing token, this token being allowed to be \#defined. + * + * May be used only within macros with the token passed as an argument if the token is \#defined. + * + * For example, writing STRINGZ(PIN) within a macro \#defined by PIN_NAME(PIN) + * and invoked as PIN_NAME(PIN0) with PIN0 \#defined as A0 is equivalent to + * writing "A0". + */ +#define STRINGZ(x) #x + +/*! \brief Absolute stringize. + * + * Stringize a preprocessing token, this token being allowed to be \#defined. + * + * No restriction of use if the token is \#defined. + * + * For example, writing ASTRINGZ(PIN0) anywhere with PIN0 \#defined as A0 is + * equivalent to writing "A0". + */ +#define ASTRINGZ(x) STRINGZ(x) + + +#endif // _STRINGZ_H_ diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR/tpaste.h b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR/tpaste.h new file mode 100644 index 000000000..a5d7beeaa --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR/tpaste.h @@ -0,0 +1,95 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Preprocessor token pasting utils. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _TPASTE_H_ +#define _TPASTE_H_ + + +/*! \name Token Paste + * + * Paste N preprocessing tokens together, these tokens being allowed to be \#defined. + * + * May be used only within macros with the tokens passed as arguments if the tokens are \#defined. + * + * For example, writing TPASTE2(U, WIDTH) within a macro \#defined by + * UTYPE(WIDTH) and invoked as UTYPE(UL_WIDTH) with UL_WIDTH \#defined as 32 is + * equivalent to writing U32. + */ +//! @{ +#define TPASTE2( a, b) a##b +#define TPASTE3( a, b, c) a##b##c +#define TPASTE4( a, b, c, d) a##b##c##d +#define TPASTE5( a, b, c, d, e) a##b##c##d##e +#define TPASTE6( a, b, c, d, e, f) a##b##c##d##e##f +#define TPASTE7( a, b, c, d, e, f, g) a##b##c##d##e##f##g +#define TPASTE8( a, b, c, d, e, f, g, h) a##b##c##d##e##f##g##h +#define TPASTE9( a, b, c, d, e, f, g, h, i) a##b##c##d##e##f##g##h##i +#define TPASTE10(a, b, c, d, e, f, g, h, i, j) a##b##c##d##e##f##g##h##i##j +//! @} + +/*! \name Absolute Token Paste + * + * Paste N preprocessing tokens together, these tokens being allowed to be \#defined. + * + * No restriction of use if the tokens are \#defined. + * + * For example, writing ATPASTE2(U, UL_WIDTH) anywhere with UL_WIDTH \#defined + * as 32 is equivalent to writing U32. + */ +//! @{ +#define ATPASTE2( a, b) TPASTE2( a, b) +#define ATPASTE3( a, b, c) TPASTE3( a, b, c) +#define ATPASTE4( a, b, c, d) TPASTE4( a, b, c, d) +#define ATPASTE5( a, b, c, d, e) TPASTE5( a, b, c, d, e) +#define ATPASTE6( a, b, c, d, e, f) TPASTE6( a, b, c, d, e, f) +#define ATPASTE7( a, b, c, d, e, f, g) TPASTE7( a, b, c, d, e, f, g) +#define ATPASTE8( a, b, c, d, e, f, g, h) TPASTE8( a, b, c, d, e, f, g, h) +#define ATPASTE9( a, b, c, d, e, f, g, h, i) TPASTE9( a, b, c, d, e, f, g, h, i) +#define ATPASTE10(a, b, c, d, e, f, g, h, i, j) TPASTE10(a, b, c, d, e, f, g, h, i, j) +//! @} + + +#endif // _TPASTE_H_ diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/STARTUP_FILES/GCC/crt0.x b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/STARTUP_FILES/GCC/crt0.x new file mode 100644 index 000000000..23b658b98 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/STARTUP_FILES/GCC/crt0.x @@ -0,0 +1,121 @@ +/* This file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief AVR32UC C runtime startup file. + * + * This file has been built from the Newlib crt0.S. + * + * - Compiler: GNU GCC for AVR32 + * - Supported devices: All AVR32UC devices can be used. + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#include + + +//! @{ +//! \verbatim + + + // This must be linked @ 0x80000000 if it is to be run upon reset. + .section .reset, "ax", @progbits + + + .global _start + .type _start, @function +_start: + // Jump to the C runtime startup routine. + lda.w pc, _stext + + + // _stext is placed outside the .reset section so that the program entry point + // can be changed without affecting the C runtime startup. + .section .text._stext, "ax", @progbits + + + .global _stext + .type _stext, @function +_stext: + // Set initial stack pointer. + lda.w sp, _estack + + // Set up EVBA so interrupts can be enabled. + lda.w r0, _evba + mtsr AVR32_EVBA, r0 + + // Enable the exception processing. + csrf AVR32_SR_EM_OFFSET + + // Load initialized data having a global lifetime from the data LMA. + lda.w r0, _data + lda.w r1, _edata + cp r0, r1 + brhs idata_load_loop_end + lda.w r2, _data_lma +idata_load_loop: + ld.d r4, r2++ + st.d r0++, r4 + cp r0, r1 + brlo idata_load_loop +idata_load_loop_end: + + // Clear uninitialized data having a global lifetime in the blank static storage section. + lda.w r0, __bss_start + lda.w r1, _end + cp r0, r1 + brhs udata_clear_loop_end + mov r2, 0 + mov r3, 0 +udata_clear_loop: + st.d r0++, r2 + cp r0, r1 + brlo udata_clear_loop +udata_clear_loop_end: + +#ifdef CONFIG_FRAME_POINTER + // Safety: Set the default "return" @ to the exit routine address. + lda.w lr, exit +#endif + + // Start the show. + lda.w pc, main + + +//! \endverbatim +//! @} diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/compiler.h b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/compiler.h new file mode 100644 index 000000000..885be7fb9 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/compiler.h @@ -0,0 +1,1145 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Compiler file for AVR32. + * + * This file defines commonly used types and macros. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _COMPILER_H_ +#define _COMPILER_H_ + +#if ((defined __GNUC__) && (defined __AVR32__)) || (defined __ICCAVR32__ || defined __AAVR32__) +# include +#endif +#if (defined __ICCAVR32__) +# include +#endif +#include "preprocessor.h" + +#include "parts.h" + + +//_____ D E C L A R A T I O N S ____________________________________________ + +#ifdef __AVR32_ABI_COMPILER__ // Automatically defined when compiling for AVR32, not when assembling. + +#include +#include + + +#if (defined __ICCAVR32__) + +/*! \name Compiler Keywords + * + * Port of some keywords from GNU GCC for AVR32 to IAR Embedded Workbench for Atmel AVR32. + */ +//! @{ +#define __asm__ asm +#define __inline__ inline +#define __volatile__ +//! @} + +#endif + + +/*! \name Usual Types + */ +//! @{ +typedef unsigned char Bool; //!< Boolean. +#ifndef __cplusplus +#if !defined(__bool_true_false_are_defined) +typedef unsigned char bool; //!< Boolean. +#endif +#endif +typedef signed char S8 ; //!< 8-bit signed integer. +typedef unsigned char U8 ; //!< 8-bit unsigned integer. +typedef signed short int S16; //!< 16-bit signed integer. +typedef unsigned short int U16; //!< 16-bit unsigned integer. +typedef signed long int S32; //!< 32-bit signed integer. +typedef unsigned long int U32; //!< 32-bit unsigned integer. +typedef signed long long int S64; //!< 64-bit signed integer. +typedef unsigned long long int U64; //!< 64-bit unsigned integer. +typedef float F32; //!< 32-bit floating-point number. +typedef double F64; //!< 64-bit floating-point number. +//! @} + + +/*! \name Status Types + */ +//! @{ +typedef Bool Status_bool_t; //!< Boolean status. +typedef U8 Status_t; //!< 8-bit-coded status. +//! @} + + +/*! \name Aliasing Aggregate Types + */ +//! @{ + +//! 16-bit union. +typedef union +{ + S16 s16 ; + U16 u16 ; + S8 s8 [2]; + U8 u8 [2]; +} Union16; + +//! 32-bit union. +typedef union +{ + S32 s32 ; + U32 u32 ; + S16 s16[2]; + U16 u16[2]; + S8 s8 [4]; + U8 u8 [4]; +} Union32; + +//! 64-bit union. +typedef union +{ + S64 s64 ; + U64 u64 ; + S32 s32[2]; + U32 u32[2]; + S16 s16[4]; + U16 u16[4]; + S8 s8 [8]; + U8 u8 [8]; +} Union64; + +//! Union of pointers to 64-, 32-, 16- and 8-bit unsigned integers. +typedef union +{ + S64 *s64ptr; + U64 *u64ptr; + S32 *s32ptr; + U32 *u32ptr; + S16 *s16ptr; + U16 *u16ptr; + S8 *s8ptr ; + U8 *u8ptr ; +} UnionPtr; + +//! Union of pointers to volatile 64-, 32-, 16- and 8-bit unsigned integers. +typedef union +{ + volatile S64 *s64ptr; + volatile U64 *u64ptr; + volatile S32 *s32ptr; + volatile U32 *u32ptr; + volatile S16 *s16ptr; + volatile U16 *u16ptr; + volatile S8 *s8ptr ; + volatile U8 *u8ptr ; +} UnionVPtr; + +//! Union of pointers to constant 64-, 32-, 16- and 8-bit unsigned integers. +typedef union +{ + const S64 *s64ptr; + const U64 *u64ptr; + const S32 *s32ptr; + const U32 *u32ptr; + const S16 *s16ptr; + const U16 *u16ptr; + const S8 *s8ptr ; + const U8 *u8ptr ; +} UnionCPtr; + +//! Union of pointers to constant volatile 64-, 32-, 16- and 8-bit unsigned integers. +typedef union +{ + const volatile S64 *s64ptr; + const volatile U64 *u64ptr; + const volatile S32 *s32ptr; + const volatile U32 *u32ptr; + const volatile S16 *s16ptr; + const volatile U16 *u16ptr; + const volatile S8 *s8ptr ; + const volatile U8 *u8ptr ; +} UnionCVPtr; + +//! Structure of pointers to 64-, 32-, 16- and 8-bit unsigned integers. +typedef struct +{ + S64 *s64ptr; + U64 *u64ptr; + S32 *s32ptr; + U32 *u32ptr; + S16 *s16ptr; + U16 *u16ptr; + S8 *s8ptr ; + U8 *u8ptr ; +} StructPtr; + +//! Structure of pointers to volatile 64-, 32-, 16- and 8-bit unsigned integers. +typedef struct +{ + volatile S64 *s64ptr; + volatile U64 *u64ptr; + volatile S32 *s32ptr; + volatile U32 *u32ptr; + volatile S16 *s16ptr; + volatile U16 *u16ptr; + volatile S8 *s8ptr ; + volatile U8 *u8ptr ; +} StructVPtr; + +//! Structure of pointers to constant 64-, 32-, 16- and 8-bit unsigned integers. +typedef struct +{ + const S64 *s64ptr; + const U64 *u64ptr; + const S32 *s32ptr; + const U32 *u32ptr; + const S16 *s16ptr; + const U16 *u16ptr; + const S8 *s8ptr ; + const U8 *u8ptr ; +} StructCPtr; + +//! Structure of pointers to constant volatile 64-, 32-, 16- and 8-bit unsigned integers. +typedef struct +{ + const volatile S64 *s64ptr; + const volatile U64 *u64ptr; + const volatile S32 *s32ptr; + const volatile U32 *u32ptr; + const volatile S16 *s16ptr; + const volatile U16 *u16ptr; + const volatile S8 *s8ptr ; + const volatile U8 *u8ptr ; +} StructCVPtr; + +//! @} + +#endif // __AVR32_ABI_COMPILER__ + + +//_____ M A C R O S ________________________________________________________ + +/*! \name Usual Constants + */ +//! @{ +#define DISABLE 0 +#define ENABLE 1 +#define DISABLED 0 +#define ENABLED 1 +#define OFF 0 +#define ON 1 +#define FALSE 0 +#define TRUE 1 +#ifndef __cplusplus +#if !defined(__bool_true_false_are_defined) +#define false FALSE +#define true TRUE +#endif +#endif +#define KO 0 +#define OK 1 +#define PASS 0 +#define FAIL 1 +#define LOW 0 +#define HIGH 1 +#define CLR 0 +#define SET 1 +//! @} + + +#ifdef __AVR32_ABI_COMPILER__ // Automatically defined when compiling for AVR32, not when assembling. + +/*! \name Bit-Field Handling + */ +//! @{ + +/*! \brief Reads the bits of a value specified by a given bit-mask. + * + * \param value Value to read bits from. + * \param mask Bit-mask indicating bits to read. + * + * \return Read bits. + */ +#define Rd_bits( value, mask) ((value) & (mask)) + +/*! \brief Writes the bits of a C lvalue specified by a given bit-mask. + * + * \param lvalue C lvalue to write bits to. + * \param mask Bit-mask indicating bits to write. + * \param bits Bits to write. + * + * \return Resulting value with written bits. + */ +#define Wr_bits(lvalue, mask, bits) ((lvalue) = ((lvalue) & ~(mask)) |\ + ((bits ) & (mask))) + +/*! \brief Tests the bits of a value specified by a given bit-mask. + * + * \param value Value of which to test bits. + * \param mask Bit-mask indicating bits to test. + * + * \return \c 1 if at least one of the tested bits is set, else \c 0. + */ +#define Tst_bits( value, mask) (Rd_bits(value, mask) != 0) + +/*! \brief Clears the bits of a C lvalue specified by a given bit-mask. + * + * \param lvalue C lvalue of which to clear bits. + * \param mask Bit-mask indicating bits to clear. + * + * \return Resulting value with cleared bits. + */ +#define Clr_bits(lvalue, mask) ((lvalue) &= ~(mask)) + +/*! \brief Sets the bits of a C lvalue specified by a given bit-mask. + * + * \param lvalue C lvalue of which to set bits. + * \param mask Bit-mask indicating bits to set. + * + * \return Resulting value with set bits. + */ +#define Set_bits(lvalue, mask) ((lvalue) |= (mask)) + +/*! \brief Toggles the bits of a C lvalue specified by a given bit-mask. + * + * \param lvalue C lvalue of which to toggle bits. + * \param mask Bit-mask indicating bits to toggle. + * + * \return Resulting value with toggled bits. + */ +#define Tgl_bits(lvalue, mask) ((lvalue) ^= (mask)) + +/*! \brief Reads the bit-field of a value specified by a given bit-mask. + * + * \param value Value to read a bit-field from. + * \param mask Bit-mask indicating the bit-field to read. + * + * \return Read bit-field. + */ +#define Rd_bitfield( value, mask) (Rd_bits( value, mask) >> ctz(mask)) + +/*! \brief Writes the bit-field of a C lvalue specified by a given bit-mask. + * + * \param lvalue C lvalue to write a bit-field to. + * \param mask Bit-mask indicating the bit-field to write. + * \param bitfield Bit-field to write. + * + * \return Resulting value with written bit-field. + */ +#define Wr_bitfield(lvalue, mask, bitfield) (Wr_bits(lvalue, mask, (U32)(bitfield) << ctz(mask))) + +//! @} + + +/*! \brief This macro is used to test fatal errors. + * + * The macro tests if the expression is FALSE. If it is, a fatal error is + * detected and the application hangs up. + * + * \param expr Expression to evaluate and supposed to be nonzero. + */ +#ifdef _ASSERT_ENABLE_ + #define Assert(expr) \ + {\ + if (!(expr)) while (TRUE);\ + } +#else + #define Assert(expr) +#endif + + +/*! \name Zero-Bit Counting + * + * Under AVR32-GCC, __builtin_clz and __builtin_ctz behave like macros when + * applied to constant expressions (values known at compile time), so they are + * more optimized than the use of the corresponding assembly instructions and + * they can be used as constant expressions e.g. to initialize objects having + * static storage duration, and like the corresponding assembly instructions + * when applied to non-constant expressions (values unknown at compile time), so + * they are more optimized than an assembly periphrasis. Hence, clz and ctz + * ensure a possible and optimized behavior for both constant and non-constant + * expressions. + */ +//! @{ + +/*! \brief Counts the leading zero bits of the given value considered as a 32-bit integer. + * + * \param u Value of which to count the leading zero bits. + * + * \return The count of leading zero bits in \a u. + */ +#if (defined __GNUC__) + #define clz(u) __builtin_clz(u) +#elif (defined __ICCAVR32__) + #define clz(u) __count_leading_zeros(u) +#endif + +/*! \brief Counts the trailing zero bits of the given value considered as a 32-bit integer. + * + * \param u Value of which to count the trailing zero bits. + * + * \return The count of trailing zero bits in \a u. + */ +#if (defined __GNUC__) + #define ctz(u) __builtin_ctz(u) +#elif (defined __ICCAVR32__) + #define ctz(u) __count_trailing_zeros(u) +#endif + +//! @} + + +/*! \name Bit Reversing + */ +//! @{ + +/*! \brief Reverses the bits of \a u8. + * + * \param u8 U8 of which to reverse the bits. + * + * \return Value resulting from \a u8 with reversed bits. + */ +#define bit_reverse8(u8) ((U8)(bit_reverse32((U8)(u8)) >> 24)) + +/*! \brief Reverses the bits of \a u16. + * + * \param u16 U16 of which to reverse the bits. + * + * \return Value resulting from \a u16 with reversed bits. + */ +#define bit_reverse16(u16) ((U16)(bit_reverse32((U16)(u16)) >> 16)) + +/*! \brief Reverses the bits of \a u32. + * + * \param u32 U32 of which to reverse the bits. + * + * \return Value resulting from \a u32 with reversed bits. + */ +#if (defined __GNUC__) + #define bit_reverse32(u32) \ + (\ + {\ + unsigned int __value = (U32)(u32);\ + __asm__ ("brev\t%0" : "+r" (__value) : : "cc");\ + (U32)__value;\ + }\ + ) +#elif (defined __ICCAVR32__) + #define bit_reverse32(u32) ((U32)__bit_reverse((U32)(u32))) +#endif + +/*! \brief Reverses the bits of \a u64. + * + * \param u64 U64 of which to reverse the bits. + * + * \return Value resulting from \a u64 with reversed bits. + */ +#define bit_reverse64(u64) ((U64)(((U64)bit_reverse32((U64)(u64) >> 32)) |\ + ((U64)bit_reverse32((U64)(u64)) << 32))) + +//! @} + + +/*! \name Alignment + */ +//! @{ + +/*! \brief Tests alignment of the number \a val with the \a n boundary. + * + * \param val Input value. + * \param n Boundary. + * + * \return \c 1 if the number \a val is aligned with the \a n boundary, else \c 0. + */ +#define Test_align(val, n ) (!Tst_bits( val, (n) - 1 ) ) + +/*! \brief Gets alignment of the number \a val with respect to the \a n boundary. + * + * \param val Input value. + * \param n Boundary. + * + * \return Alignment of the number \a val with respect to the \a n boundary. + */ +#define Get_align( val, n ) ( Rd_bits( val, (n) - 1 ) ) + +/*! \brief Sets alignment of the lvalue number \a lval to \a alg with respect to the \a n boundary. + * + * \param lval Input/output lvalue. + * \param n Boundary. + * \param alg Alignment. + * + * \return New value of \a lval resulting from its alignment set to \a alg with respect to the \a n boundary. + */ +#define Set_align(lval, n, alg) ( Wr_bits(lval, (n) - 1, alg) ) + +/*! \brief Aligns the number \a val with the upper \a n boundary. + * + * \param val Input value. + * \param n Boundary. + * + * \return Value resulting from the number \a val aligned with the upper \a n boundary. + */ +#define Align_up( val, n ) (((val) + ((n) - 1)) & ~((n) - 1)) + +/*! \brief Aligns the number \a val with the lower \a n boundary. + * + * \param val Input value. + * \param n Boundary. + * + * \return Value resulting from the number \a val aligned with the lower \a n boundary. + */ +#define Align_down(val, n ) ( (val) & ~((n) - 1)) + +//! @} + + +/*! \name Mathematics + * + * The same considerations as for clz and ctz apply here but AVR32-GCC does not + * provide built-in functions to access the assembly instructions abs, min and + * max and it does not produce them by itself in most cases, so two sets of + * macros are defined here: + * - Abs, Min and Max to apply to constant expressions (values known at + * compile time); + * - abs, min and max to apply to non-constant expressions (values unknown at + * compile time). + */ +//! @{ + +/*! \brief Takes the absolute value of \a a. + * + * \param a Input value. + * + * \return Absolute value of \a a. + * + * \note More optimized if only used with values known at compile time. + */ +#define Abs(a) (((a) < 0 ) ? -(a) : (a)) + +/*! \brief Takes the minimal value of \a a and \a b. + * + * \param a Input value. + * \param b Input value. + * + * \return Minimal value of \a a and \a b. + * + * \note More optimized if only used with values known at compile time. + */ +#define Min(a, b) (((a) < (b)) ? (a) : (b)) + +/*! \brief Takes the maximal value of \a a and \a b. + * + * \param a Input value. + * \param b Input value. + * + * \return Maximal value of \a a and \a b. + * + * \note More optimized if only used with values known at compile time. + */ +#define Max(a, b) (((a) > (b)) ? (a) : (b)) + +/*! \brief Takes the absolute value of \a a. + * + * \param a Input value. + * + * \return Absolute value of \a a. + * + * \note More optimized if only used with values unknown at compile time. + */ +#if (defined __GNUC__) + #define abs(a) \ + (\ + {\ + int __value = (a);\ + __asm__ ("abs\t%0" : "+r" (__value) : : "cc");\ + __value;\ + }\ + ) +#elif (defined __ICCAVR32__) + #define abs(a) Abs(a) +#endif + +/*! \brief Takes the minimal value of \a a and \a b. + * + * \param a Input value. + * \param b Input value. + * + * \return Minimal value of \a a and \a b. + * + * \note More optimized if only used with values unknown at compile time. + */ +#if (defined __GNUC__) + #define min(a, b) \ + (\ + {\ + int __value, __arg_a = (a), __arg_b = (b);\ + __asm__ ("min\t%0, %1, %2" : "=r" (__value) : "r" (__arg_a), "r" (__arg_b));\ + __value;\ + }\ + ) +#elif (defined __ICCAVR32__) + #define min(a, b) __min(a, b) +#endif + +/*! \brief Takes the maximal value of \a a and \a b. + * + * \param a Input value. + * \param b Input value. + * + * \return Maximal value of \a a and \a b. + * + * \note More optimized if only used with values unknown at compile time. + */ +#if (defined __GNUC__) + #define max(a, b) \ + (\ + {\ + int __value, __arg_a = (a), __arg_b = (b);\ + __asm__ ("max\t%0, %1, %2" : "=r" (__value) : "r" (__arg_a), "r" (__arg_b));\ + __value;\ + }\ + ) +#elif (defined __ICCAVR32__) + #define max(a, b) __max(a, b) +#endif + +//! @} + + +/*! \brief Calls the routine at address \a addr. + * + * It generates a long call opcode. + * + * For example, `Long_call(0x80000000)' generates a software reset on a UC3 if + * it is invoked from the CPU supervisor mode. + * + * \param addr Address of the routine to call. + * + * \note It may be used as a long jump opcode in some special cases. + */ +#define Long_call(addr) ((*(void (*)(void))(addr))()) + +/*! \brief Resets the CPU by software. + * + * \warning It shall not be called from the CPU application mode. + */ +#if (defined __GNUC__) + #define Reset_CPU() \ + (\ + {\ + __asm__ __volatile__ (\ + "lddpc r9, 3f\n\t"\ + "mfsr r8, %[SR]\n\t"\ + "bfextu r8, r8, %[SR_M_OFFSET], %[SR_M_SIZE]\n\t"\ + "cp.w r8, 0b001\n\t"\ + "breq 0f\n\t"\ + "sub r8, pc, $ - 1f\n\t"\ + "pushm r8-r9\n\t"\ + "rete\n"\ + "0:\n\t"\ + "mtsr %[SR], r9\n"\ + "1:\n\t"\ + "mov r0, 0\n\t"\ + "mov r1, 0\n\t"\ + "mov r2, 0\n\t"\ + "mov r3, 0\n\t"\ + "mov r4, 0\n\t"\ + "mov r5, 0\n\t"\ + "mov r6, 0\n\t"\ + "mov r7, 0\n\t"\ + "mov r8, 0\n\t"\ + "mov r9, 0\n\t"\ + "mov r10, 0\n\t"\ + "mov r11, 0\n\t"\ + "mov r12, 0\n\t"\ + "mov sp, 0\n\t"\ + "stdsp sp[0], sp\n\t"\ + "ldmts sp, sp\n\t"\ + "mov lr, 0\n\t"\ + "lddpc pc, 2f\n\t"\ + ".balign 4\n"\ + "2:\n\t"\ + ".word _start\n"\ + "3:\n\t"\ + ".word %[RESET_SR]"\ + :\ + : [SR] "i" (AVR32_SR),\ + [SR_M_OFFSET] "i" (AVR32_SR_M_OFFSET),\ + [SR_M_SIZE] "i" (AVR32_SR_M_SIZE),\ + [RESET_SR] "i" (AVR32_SR_GM_MASK | AVR32_SR_EM_MASK | (AVR32_SR_M_SUP << AVR32_SR_M_OFFSET))\ + );\ + }\ + ) +#elif (defined __ICCAVR32__) + #define Reset_CPU() \ + {\ + extern void *volatile __program_start;\ + __asm__ __volatile__ (\ + "mov r7, LWRD(__program_start)\n\t"\ + "orh r7, HWRD(__program_start)\n\t"\ + "mov r9, LWRD("ASTRINGZ(AVR32_SR_GM_MASK | AVR32_SR_EM_MASK | (AVR32_SR_M_SUP << AVR32_SR_M_OFFSET))")\n\t"\ + "orh r9, HWRD("ASTRINGZ(AVR32_SR_GM_MASK | AVR32_SR_EM_MASK | (AVR32_SR_M_SUP << AVR32_SR_M_OFFSET))")\n\t"\ + "mfsr r8, "ASTRINGZ(AVR32_SR)"\n\t"\ + "bfextu r8, r8, "ASTRINGZ(AVR32_SR_M_OFFSET)", "ASTRINGZ(AVR32_SR_M_SIZE)"\n\t"\ + "cp.w r8, 001b\n\t"\ + "breq $ + 10\n\t"\ + "sub r8, pc, -12\n\t"\ + "pushm r8-r9\n\t"\ + "rete\n\t"\ + "mtsr "ASTRINGZ(AVR32_SR)", r9\n\t"\ + "mov r0, 0\n\t"\ + "mov r1, 0\n\t"\ + "mov r2, 0\n\t"\ + "mov r3, 0\n\t"\ + "mov r4, 0\n\t"\ + "mov r5, 0\n\t"\ + "mov r6, 0\n\t"\ + "st.w r0[4], r7\n\t"\ + "mov r7, 0\n\t"\ + "mov r8, 0\n\t"\ + "mov r9, 0\n\t"\ + "mov r10, 0\n\t"\ + "mov r11, 0\n\t"\ + "mov r12, 0\n\t"\ + "mov sp, 0\n\t"\ + "stdsp sp[0], sp\n\t"\ + "ldmts sp, sp\n\t"\ + "mov lr, 0\n\t"\ + "ld.w pc, lr[4]"\ + );\ + __program_start;\ + } +#endif + + +/*! \name System Register Access + */ +//! @{ + +/*! \brief Gets the value of the \a sysreg system register. + * + * \param sysreg Address of the system register of which to get the value. + * + * \return Value of the \a sysreg system register. + */ +#if (defined __GNUC__) + #define Get_system_register(sysreg) __builtin_mfsr(sysreg) +#elif (defined __ICCAVR32__) + #define Get_system_register(sysreg) __get_system_register(sysreg) +#endif + +/*! \brief Sets the value of the \a sysreg system register to \a value. + * + * \param sysreg Address of the system register of which to set the value. + * \param value Value to set the \a sysreg system register to. + */ +#if (defined __GNUC__) + #define Set_system_register(sysreg, value) __builtin_mtsr(sysreg, value) +#elif (defined __ICCAVR32__) + #define Set_system_register(sysreg, value) __set_system_register(sysreg, value) +#endif + +//! @} + + +/*! \name CPU Status Register Access + */ +//! @{ + +/*! \brief Tells whether exceptions are globally enabled. + * + * \return \c 1 if exceptions are globally enabled, else \c 0. + */ +#define Is_global_exception_enabled() (!Tst_bits(Get_system_register(AVR32_SR), AVR32_SR_EM_MASK)) + +/*! \brief Disables exceptions globally. + */ +#if (defined __GNUC__) + #define Disable_global_exception() ({__asm__ __volatile__ ("ssrf\t%0" : : "i" (AVR32_SR_EM_OFFSET));}) +#elif (defined __ICCAVR32__) + #define Disable_global_exception() (__set_status_flag(AVR32_SR_EM_OFFSET)) +#endif + +/*! \brief Enables exceptions globally. + */ +#if (defined __GNUC__) + #define Enable_global_exception() ({__asm__ __volatile__ ("csrf\t%0" : : "i" (AVR32_SR_EM_OFFSET));}) +#elif (defined __ICCAVR32__) + #define Enable_global_exception() (__clear_status_flag(AVR32_SR_EM_OFFSET)) +#endif + +/*! \brief Tells whether interrupts are globally enabled. + * + * \return \c 1 if interrupts are globally enabled, else \c 0. + */ +#define Is_global_interrupt_enabled() (!Tst_bits(Get_system_register(AVR32_SR), AVR32_SR_GM_MASK)) + +/*! \brief Disables interrupts globally. + */ +#if (defined __GNUC__) + #define Disable_global_interrupt() ({__asm__ __volatile__ ("ssrf\t%0" : : "i" (AVR32_SR_GM_OFFSET));}) +#elif (defined __ICCAVR32__) + #define Disable_global_interrupt() (__disable_interrupt()) +#endif + +/*! \brief Enables interrupts globally. + */ +#if (defined __GNUC__) + #define Enable_global_interrupt() ({__asm__ __volatile__ ("csrf\t%0" : : "i" (AVR32_SR_GM_OFFSET));}) +#elif (defined __ICCAVR32__) + #define Enable_global_interrupt() (__enable_interrupt()) +#endif + +/*! \brief Tells whether interrupt level \a int_level is enabled. + * + * \param int_level Interrupt level (0 to 3). + * + * \return \c 1 if interrupt level \a int_level is enabled, else \c 0. + */ +#define Is_interrupt_level_enabled(int_level) (!Tst_bits(Get_system_register(AVR32_SR), TPASTE3(AVR32_SR_I, int_level, M_MASK))) + +/*! \brief Disables interrupt level \a int_level. + * + * \param int_level Interrupt level to disable (0 to 3). + */ +#if (defined __GNUC__) + #define Disable_interrupt_level(int_level) ({__asm__ __volatile__ ("ssrf\t%0" : : "i" (TPASTE3(AVR32_SR_I, int_level, M_OFFSET)));}) +#elif (defined __ICCAVR32__) + #define Disable_interrupt_level(int_level) (__set_status_flag(TPASTE3(AVR32_SR_I, int_level, M_OFFSET))) +#endif + +/*! \brief Enables interrupt level \a int_level. + * + * \param int_level Interrupt level to enable (0 to 3). + */ +#if (defined __GNUC__) + #define Enable_interrupt_level(int_level) ({__asm__ __volatile__ ("csrf\t%0" : : "i" (TPASTE3(AVR32_SR_I, int_level, M_OFFSET)));}) +#elif (defined __ICCAVR32__) + #define Enable_interrupt_level(int_level) (__clear_status_flag(TPASTE3(AVR32_SR_I, int_level, M_OFFSET))) +#endif + +/*! \brief Protects subsequent code from interrupts. + */ +#define AVR32_ENTER_CRITICAL_REGION( ) \ + { \ + Bool global_interrupt_enabled = Is_global_interrupt_enabled(); \ + Disable_global_interrupt(); // Disable the appropriate interrupts. + +/*! \brief This macro must always be used in conjunction with AVR32_ENTER_CRITICAL_REGION + * so that interrupts are enabled again. + */ +#define AVR32_LEAVE_CRITICAL_REGION( ) \ + if (global_interrupt_enabled) Enable_global_interrupt(); \ + } + +//! @} + + +/*! \name Debug Register Access + */ +//! @{ + +/*! \brief Gets the value of the \a dbgreg debug register. + * + * \param dbgreg Address of the debug register of which to get the value. + * + * \return Value of the \a dbgreg debug register. + */ +#if (defined __GNUC__) + #define Get_debug_register(dbgreg) __builtin_mfdr(dbgreg) +#elif (defined __ICCAVR32__) + #define Get_debug_register(dbgreg) __get_debug_register(dbgreg) +#endif + +/*! \brief Sets the value of the \a dbgreg debug register to \a value. + * + * \param dbgreg Address of the debug register of which to set the value. + * \param value Value to set the \a dbgreg debug register to. + */ +#if (defined __GNUC__) + #define Set_debug_register(dbgreg, value) __builtin_mtdr(dbgreg, value) +#elif (defined __ICCAVR32__) + #define Set_debug_register(dbgreg, value) __set_debug_register(dbgreg, value) +#endif + +//! @} + +#endif // __AVR32_ABI_COMPILER__ + + +//! Boolean evaluating MCU little endianism. +#if ((defined __GNUC__) && (defined __AVR32__)) || ((defined __ICCAVR32__) || (defined __AAVR32__)) + #define LITTLE_ENDIAN_MCU FALSE +#else + #error If you are here, you should check what is exactly the processor you are using... + #define LITTLE_ENDIAN_MCU FALSE +#endif + +// Check that MCU endianism is correctly defined. +#ifndef LITTLE_ENDIAN_MCU + #error YOU MUST define the MCU endianism with LITTLE_ENDIAN_MCU: either FALSE or TRUE +#endif + +//! Boolean evaluating MCU big endianism. +#define BIG_ENDIAN_MCU (!LITTLE_ENDIAN_MCU) + + +#ifdef __AVR32_ABI_COMPILER__ // Automatically defined when compiling for AVR32, not when assembling. + +/*! \name MCU Endianism Handling + */ +//! @{ + +#if (LITTLE_ENDIAN_MCU==TRUE) + #define LSB(u16) (((U8 *)&(u16))[0]) //!< Least significant byte of \a u16. + #define MSB(u16) (((U8 *)&(u16))[1]) //!< Most significant byte of \a u16. + + #define LSH(u32) (((U16 *)&(u32))[0]) //!< Least significant half-word of \a u32. + #define MSH(u32) (((U16 *)&(u32))[1]) //!< Most significant half-word of \a u32. + #define LSB0W(u32) (((U8 *)&(u32))[0]) //!< Least significant byte of 1st rank of \a u32. + #define LSB1W(u32) (((U8 *)&(u32))[1]) //!< Least significant byte of 2nd rank of \a u32. + #define LSB2W(u32) (((U8 *)&(u32))[2]) //!< Least significant byte of 3rd rank of \a u32. + #define LSB3W(u32) (((U8 *)&(u32))[3]) //!< Least significant byte of 4th rank of \a u32. + #define MSB3W(u32) LSB0W(u32) //!< Most significant byte of 4th rank of \a u32. + #define MSB2W(u32) LSB1W(u32) //!< Most significant byte of 3rd rank of \a u32. + #define MSB1W(u32) LSB2W(u32) //!< Most significant byte of 2nd rank of \a u32. + #define MSB0W(u32) LSB3W(u32) //!< Most significant byte of 1st rank of \a u32. + + #define LSW(u64) (((U32 *)&(u64))[0]) //!< Least significant word of \a u64. + #define MSW(u64) (((U32 *)&(u64))[1]) //!< Most significant word of \a u64. + #define LSH0(u64) (((U16 *)&(u64))[0]) //!< Least significant half-word of 1st rank of \a u64. + #define LSH1(u64) (((U16 *)&(u64))[1]) //!< Least significant half-word of 2nd rank of \a u64. + #define LSH2(u64) (((U16 *)&(u64))[2]) //!< Least significant half-word of 3rd rank of \a u64. + #define LSH3(u64) (((U16 *)&(u64))[3]) //!< Least significant half-word of 4th rank of \a u64. + #define MSH3(u64) LSH0(u64) //!< Most significant half-word of 4th rank of \a u64. + #define MSH2(u64) LSH1(u64) //!< Most significant half-word of 3rd rank of \a u64. + #define MSH1(u64) LSH2(u64) //!< Most significant half-word of 2nd rank of \a u64. + #define MSH0(u64) LSH3(u64) //!< Most significant half-word of 1st rank of \a u64. + #define LSB0D(u64) (((U8 *)&(u64))[0]) //!< Least significant byte of 1st rank of \a u64. + #define LSB1D(u64) (((U8 *)&(u64))[1]) //!< Least significant byte of 2nd rank of \a u64. + #define LSB2D(u64) (((U8 *)&(u64))[2]) //!< Least significant byte of 3rd rank of \a u64. + #define LSB3D(u64) (((U8 *)&(u64))[3]) //!< Least significant byte of 4th rank of \a u64. + #define LSB4D(u64) (((U8 *)&(u64))[4]) //!< Least significant byte of 5th rank of \a u64. + #define LSB5D(u64) (((U8 *)&(u64))[5]) //!< Least significant byte of 6th rank of \a u64. + #define LSB6D(u64) (((U8 *)&(u64))[6]) //!< Least significant byte of 7th rank of \a u64. + #define LSB7D(u64) (((U8 *)&(u64))[7]) //!< Least significant byte of 8th rank of \a u64. + #define MSB7D(u64) LSB0D(u64) //!< Most significant byte of 8th rank of \a u64. + #define MSB6D(u64) LSB1D(u64) //!< Most significant byte of 7th rank of \a u64. + #define MSB5D(u64) LSB2D(u64) //!< Most significant byte of 6th rank of \a u64. + #define MSB4D(u64) LSB3D(u64) //!< Most significant byte of 5th rank of \a u64. + #define MSB3D(u64) LSB4D(u64) //!< Most significant byte of 4th rank of \a u64. + #define MSB2D(u64) LSB5D(u64) //!< Most significant byte of 3rd rank of \a u64. + #define MSB1D(u64) LSB6D(u64) //!< Most significant byte of 2nd rank of \a u64. + #define MSB0D(u64) LSB7D(u64) //!< Most significant byte of 1st rank of \a u64. + +#elif (BIG_ENDIAN_MCU==TRUE) + #define MSB(u16) (((U8 *)&(u16))[0]) //!< Most significant byte of \a u16. + #define LSB(u16) (((U8 *)&(u16))[1]) //!< Least significant byte of \a u16. + + #define MSH(u32) (((U16 *)&(u32))[0]) //!< Most significant half-word of \a u32. + #define LSH(u32) (((U16 *)&(u32))[1]) //!< Least significant half-word of \a u32. + #define MSB0W(u32) (((U8 *)&(u32))[0]) //!< Most significant byte of 1st rank of \a u32. + #define MSB1W(u32) (((U8 *)&(u32))[1]) //!< Most significant byte of 2nd rank of \a u32. + #define MSB2W(u32) (((U8 *)&(u32))[2]) //!< Most significant byte of 3rd rank of \a u32. + #define MSB3W(u32) (((U8 *)&(u32))[3]) //!< Most significant byte of 4th rank of \a u32. + #define LSB3W(u32) MSB0W(u32) //!< Least significant byte of 4th rank of \a u32. + #define LSB2W(u32) MSB1W(u32) //!< Least significant byte of 3rd rank of \a u32. + #define LSB1W(u32) MSB2W(u32) //!< Least significant byte of 2nd rank of \a u32. + #define LSB0W(u32) MSB3W(u32) //!< Least significant byte of 1st rank of \a u32. + + #define MSW(u64) (((U32 *)&(u64))[0]) //!< Most significant word of \a u64. + #define LSW(u64) (((U32 *)&(u64))[1]) //!< Least significant word of \a u64. + #define MSH0(u64) (((U16 *)&(u64))[0]) //!< Most significant half-word of 1st rank of \a u64. + #define MSH1(u64) (((U16 *)&(u64))[1]) //!< Most significant half-word of 2nd rank of \a u64. + #define MSH2(u64) (((U16 *)&(u64))[2]) //!< Most significant half-word of 3rd rank of \a u64. + #define MSH3(u64) (((U16 *)&(u64))[3]) //!< Most significant half-word of 4th rank of \a u64. + #define LSH3(u64) MSH0(u64) //!< Least significant half-word of 4th rank of \a u64. + #define LSH2(u64) MSH1(u64) //!< Least significant half-word of 3rd rank of \a u64. + #define LSH1(u64) MSH2(u64) //!< Least significant half-word of 2nd rank of \a u64. + #define LSH0(u64) MSH3(u64) //!< Least significant half-word of 1st rank of \a u64. + #define MSB0D(u64) (((U8 *)&(u64))[0]) //!< Most significant byte of 1st rank of \a u64. + #define MSB1D(u64) (((U8 *)&(u64))[1]) //!< Most significant byte of 2nd rank of \a u64. + #define MSB2D(u64) (((U8 *)&(u64))[2]) //!< Most significant byte of 3rd rank of \a u64. + #define MSB3D(u64) (((U8 *)&(u64))[3]) //!< Most significant byte of 4th rank of \a u64. + #define MSB4D(u64) (((U8 *)&(u64))[4]) //!< Most significant byte of 5th rank of \a u64. + #define MSB5D(u64) (((U8 *)&(u64))[5]) //!< Most significant byte of 6th rank of \a u64. + #define MSB6D(u64) (((U8 *)&(u64))[6]) //!< Most significant byte of 7th rank of \a u64. + #define MSB7D(u64) (((U8 *)&(u64))[7]) //!< Most significant byte of 8th rank of \a u64. + #define LSB7D(u64) MSB0D(u64) //!< Least significant byte of 8th rank of \a u64. + #define LSB6D(u64) MSB1D(u64) //!< Least significant byte of 7th rank of \a u64. + #define LSB5D(u64) MSB2D(u64) //!< Least significant byte of 6th rank of \a u64. + #define LSB4D(u64) MSB3D(u64) //!< Least significant byte of 5th rank of \a u64. + #define LSB3D(u64) MSB4D(u64) //!< Least significant byte of 4th rank of \a u64. + #define LSB2D(u64) MSB5D(u64) //!< Least significant byte of 3rd rank of \a u64. + #define LSB1D(u64) MSB6D(u64) //!< Least significant byte of 2nd rank of \a u64. + #define LSB0D(u64) MSB7D(u64) //!< Least significant byte of 1st rank of \a u64. + +#else + #error Unknown endianism. +#endif + +//! @} + + +/*! \name Endianism Conversion + * + * The same considerations as for clz and ctz apply here but AVR32-GCC's + * __builtin_bswap_16 and __builtin_bswap_32 do not behave like macros when + * applied to constant expressions, so two sets of macros are defined here: + * - Swap16, Swap32 and Swap64 to apply to constant expressions (values known + * at compile time); + * - swap16, swap32 and swap64 to apply to non-constant expressions (values + * unknown at compile time). + */ +//! @{ + +/*! \brief Toggles the endianism of \a u16 (by swapping its bytes). + * + * \param u16 U16 of which to toggle the endianism. + * + * \return Value resulting from \a u16 with toggled endianism. + * + * \note More optimized if only used with values known at compile time. + */ +#define Swap16(u16) ((U16)(((U16)(u16) >> 8) |\ + ((U16)(u16) << 8))) + +/*! \brief Toggles the endianism of \a u32 (by swapping its bytes). + * + * \param u32 U32 of which to toggle the endianism. + * + * \return Value resulting from \a u32 with toggled endianism. + * + * \note More optimized if only used with values known at compile time. + */ +#define Swap32(u32) ((U32)(((U32)Swap16((U32)(u32) >> 16)) |\ + ((U32)Swap16((U32)(u32)) << 16))) + +/*! \brief Toggles the endianism of \a u64 (by swapping its bytes). + * + * \param u64 U64 of which to toggle the endianism. + * + * \return Value resulting from \a u64 with toggled endianism. + * + * \note More optimized if only used with values known at compile time. + */ +#define Swap64(u64) ((U64)(((U64)Swap32((U64)(u64) >> 32)) |\ + ((U64)Swap32((U64)(u64)) << 32))) + +/*! \brief Toggles the endianism of \a u16 (by swapping its bytes). + * + * \param u16 U16 of which to toggle the endianism. + * + * \return Value resulting from \a u16 with toggled endianism. + * + * \note More optimized if only used with values unknown at compile time. + */ +#if (defined __GNUC__) + #define swap16(u16) ((U16)__builtin_bswap_16((U16)(u16))) +#elif (defined __ICCAVR32__) + #define swap16(u16) ((U16)__swap_bytes_in_halfwords((U16)(u16))) +#endif + +/*! \brief Toggles the endianism of \a u32 (by swapping its bytes). + * + * \param u32 U32 of which to toggle the endianism. + * + * \return Value resulting from \a u32 with toggled endianism. + * + * \note More optimized if only used with values unknown at compile time. + */ +#if (defined __GNUC__) + #define swap32(u32) ((U32)__builtin_bswap_32((U32)(u32))) +#elif (defined __ICCAVR32__) + #define swap32(u32) ((U32)__swap_bytes((U32)(u32))) +#endif + +/*! \brief Toggles the endianism of \a u64 (by swapping its bytes). + * + * \param u64 U64 of which to toggle the endianism. + * + * \return Value resulting from \a u64 with toggled endianism. + * + * \note More optimized if only used with values unknown at compile time. + */ +#define swap64(u64) ((U64)(((U64)swap32((U64)(u64) >> 32)) |\ + ((U64)swap32((U64)(u64)) << 32))) + +//! @} + + +/*! \name Target Abstraction + */ +//! @{ + +#define _GLOBEXT_ extern //!< extern storage-class specifier. +#define _CONST_TYPE_ const //!< const type qualifier. +#define _MEM_TYPE_SLOW_ //!< Slow memory type. +#define _MEM_TYPE_MEDFAST_ //!< Fairly fast memory type. +#define _MEM_TYPE_FAST_ //!< Fast memory type. + +typedef U8 Byte; //!< 8-bit unsigned integer. + +#define memcmp_ram2ram memcmp //!< Target-specific memcmp of RAM to RAM. +#define memcmp_code2ram memcmp //!< Target-specific memcmp of RAM to NVRAM. +#define memcpy_ram2ram memcpy //!< Target-specific memcpy from RAM to RAM. +#define memcpy_code2ram memcpy //!< Target-specific memcpy from NVRAM to RAM. + +#define LSB0(u32) LSB0W(u32) //!< Least significant byte of 1st rank of \a u32. +#define LSB1(u32) LSB1W(u32) //!< Least significant byte of 2nd rank of \a u32. +#define LSB2(u32) LSB2W(u32) //!< Least significant byte of 3rd rank of \a u32. +#define LSB3(u32) LSB3W(u32) //!< Least significant byte of 4th rank of \a u32. +#define MSB3(u32) MSB3W(u32) //!< Most significant byte of 4th rank of \a u32. +#define MSB2(u32) MSB2W(u32) //!< Most significant byte of 3rd rank of \a u32. +#define MSB1(u32) MSB1W(u32) //!< Most significant byte of 2nd rank of \a u32. +#define MSB0(u32) MSB0W(u32) //!< Most significant byte of 1st rank of \a u32. + +//! @} + +#endif // __AVR32_ABI_COMPILER__ + + +#endif // _COMPILER_H_ diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/conf_isp.h b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/conf_isp.h new file mode 100644 index 000000000..ca516ee00 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/conf_isp.h @@ -0,0 +1,136 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ****************************************************************** + * + * \brief ISP configuration file. + * + * This file contains the possible external configuration of the ISP. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with a USB module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ***************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _CONF_ISP_H_ +#define _CONF_ISP_H_ + +#include +#include "compiler.h" + + +//_____ D E F I N I T I O N S ______________________________________________ + +#define PRODUCT_MANUFACTURER_ID 0x58 +#define PRODUCT_FAMILY_ID 0x20 + +#define ISP_VERSION 0x10 +#define ISP_ID0 0x00 +#define ISP_ID1 0x00 + +#define ISP_CFG1 (*(volatile U32 *)ISP_CFG1_ADDRESS) +#define ISP_CFG1_ADDRESS (AVR32_FLASHC_USER_PAGE_ADDRESS + ISP_CFG1_OFFSET) +#define ISP_CFG1_OFFSET 0x000001FC +#define ISP_CFG1_SIZE 4 + +#define ISP_CFG1_BOOT_KEY1 16 +#define ISP_CFG1_BOOT_KEY1_MASK 0xFFFF0000 +#define ISP_CFG1_BOOT_KEY1_OFFSET 16 +#define ISP_CFG1_BOOT_KEY1_SIZE 16 +#define ISP_CFG1_BOOT_KEY1_VALUE 0xE11E + +#define ISP_CFG1_FORCE 9 +#define ISP_CFG1_FORCE_MASK 0x00000200 +#define ISP_CFG1_FORCE_OFFSET 9 +#define ISP_CFG1_FORCE_SIZE 1 + +#define ISP_CFG1_IO_COND_EN 8 +#define ISP_CFG1_IO_COND_EN_MASK 0x00000100 +#define ISP_CFG1_IO_COND_EN_OFFSET 8 +#define ISP_CFG1_IO_COND_EN_SIZE 1 + +#define ISP_CFG1_CRC8 0 +#define ISP_CFG1_CRC8_MASK 0x000000FF +#define ISP_CFG1_CRC8_OFFSET 0 +#define ISP_CFG1_CRC8_SIZE 8 +#define ISP_CFG1_CRC8_POLYNOMIAL 0x107 + +#define ISP_CFG2 (*(volatile U32 *)ISP_CFG2_ADDRESS) +#define ISP_CFG2_ADDRESS (AVR32_FLASHC_USER_PAGE_ADDRESS + ISP_CFG2_OFFSET) +#define ISP_CFG2_OFFSET 0x000001F8 +#define ISP_CFG2_SIZE 4 + +#define ISP_CFG2_BOOT_KEY 17 +#define ISP_CFG2_BOOT_KEY_MASK 0xFFFE0000 +#define ISP_CFG2_BOOT_KEY_OFFSET 17 +#define ISP_CFG2_BOOT_KEY_SIZE 15 +#define ISP_CFG2_BOOT_KEY_VALUE 0x494F + +#define ISP_CFG2_IO_COND_LEVEL 16 +#define ISP_CFG2_IO_COND_LEVEL_MASK 0x00010000 +#define ISP_CFG2_IO_COND_LEVEL_OFFSET 16 +#define ISP_CFG2_IO_COND_LEVEL_SIZE 1 + +#define ISP_CFG2_IO_COND_PIN 8 +#define ISP_CFG2_IO_COND_PIN_MASK 0x0000FF00 +#define ISP_CFG2_IO_COND_PIN_OFFSET 8 +#define ISP_CFG2_IO_COND_PIN_SIZE 8 + +#define ISP_CFG2_CRC8 0 +#define ISP_CFG2_CRC8_MASK 0x000000FF +#define ISP_CFG2_CRC8_OFFSET 0 +#define ISP_CFG2_CRC8_SIZE 8 +#define ISP_CFG2_CRC8_POLYNOMIAL 0x107 + +#define ISP_KEY (*(volatile U32 *)ISP_KEY_ADDRESS) +#define ISP_KEY_ADDRESS (AVR32_SRAM_ADDRESS + ISP_KEY_OFFSET) +#define ISP_KEY_OFFSET 0x00000000 +#define ISP_KEY_SIZE 4 +#define ISP_KEY_VALUE ('I' << 24 | 'S' << 16 | 'P' << 8 | 'K') + +#ifndef ISP_OSC + #define ISP_OSC 0 +#endif + +#define DFU_FRAME_LENGTH 2048 + +#define PROGRAM_START_ADDRESS (AVR32_FLASH_ADDRESS + PROGRAM_START_OFFSET) +#define PROGRAM_START_OFFSET 0x00002000 + + +#endif // _CONF_ISP_H_ diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/parts.h b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/parts.h new file mode 100644 index 000000000..6637b2f76 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/parts.h @@ -0,0 +1,203 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Arch file for AVR32. + * + * This file defines common AVR32 UC3 series. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _ARCH_H_ +#define _ARCH_H_ + +// UC3 A Series +#define UC3A0 ( defined (__GNUC__) && \ + ( defined (__AVR32_UC3A0128__) || \ + defined (__AVR32_UC3A0256__) || \ + defined (__AVR32_UC3A0512__) || \ + defined (__AVR32_UC3A0512ES__))) \ + ||((defined(__ICCAVR32__) || defined(__AAVR32__)) && \ + ( defined (__AT32UC3A0128__) || \ + defined (__AT32UC3A0256__) || \ + defined (__AT32UC3A0512__) || \ + defined (__AT32UC3A0512ES__))) + +#define UC3A1 ( defined (__GNUC__) && \ + ( defined (__AVR32_UC3A1128__) || \ + defined (__AVR32_UC3A1256__) || \ + defined (__AVR32_UC3A1512__) || \ + defined (__AVR32_UC3A1512ES__))) \ + ||((defined(__ICCAVR32__) || defined(__AAVR32__)) && \ + ( defined (__AT32UC3A1128__) || \ + defined (__AT32UC3A1256__) || \ + defined (__AT32UC3A1512__) || \ + defined (__AT32UC3A1512ES__))) + +#define UC3A3 ( defined (__GNUC__) && \ + ( defined (__AVR32_UC3A364__) || \ + defined (__AVR32_UC3A364S__) || \ + defined (__AVR32_UC3A3128__) || \ + defined (__AVR32_UC3A3128S__) || \ + defined (__AVR32_UC3A3256__) || \ + defined (__AVR32_UC3A3256S__))) \ + ||((defined(__ICCAVR32__) || defined(__AAVR32__)) && \ + ( defined (__AT32UC3A364__) || \ + defined (__AT32UC3A364S__) || \ + defined (__AT32UC3A3128__) || \ + defined (__AT32UC3A3128S__) || \ + defined (__AT32UC3A3256__) || \ + defined (__AT32UC3A3256S__))) + +#define UC3A (UC3A0 || UC3A1 || UC3A3) + +// UC3 B Series +#define UC3B0 ( defined (__GNUC__) && \ + ( defined (__AVR32_UC3B064__) || \ + defined (__AVR32_UC3B0128__) || \ + defined (__AVR32_UC3B0256__) || \ + defined (__AVR32_UC3B0256ES__) || \ + defined (__AVR32_UC3B0512__) || \ + defined (__AVR32_UC3B0512REVC_))) \ + ||((defined(__ICCAVR32__) || defined(__AAVR32__)) && \ + ( defined (__AT32UC3B064__) || \ + defined (__AT32UC3B0128__) || \ + defined (__AT32UC3B0256__) || \ + defined (__AT32UC3B0256ES__) || \ + defined (__AT32UC3B0512__) || \ + defined (__AT32UC3B0512REVC__))) + +#define UC3B1 ( defined (__GNUC__) && \ + ( defined (__AVR32_UC3B164__) || \ + defined (__AVR32_UC3B1128__) || \ + defined (__AVR32_UC3B1256__) || \ + defined (__AVR32_UC3B1256ES__) || \ + defined (__AVR32_UC3B1512__) || \ + defined (__AVR32_UC3B1512ES__))) \ + ||((defined(__ICCAVR32__) || defined(__AAVR32__)) && \ + ( defined (__AT32UC3B164__) || \ + defined (__AT32UC3B1128__) || \ + defined (__AT32UC3B1256__) || \ + defined (__AT32UC3B1256ES__) || \ + defined (__AT32UC3B1512__) || \ + defined (__AT32UC3B1512REVC__))) + +#define UC3B (UC3B0 || UC3B1 ) + +// UC3 C Series +#define UC3C0 ( defined (__GNUC__) && \ + ( defined (__AVR32_UC3C064C__) || \ + defined (__AVR32_UC3C0128C__) || \ + defined (__AVR32_UC3C0256C__) || \ + defined (__AVR32_UC3C0512CREVC__))) \ + ||((defined(__ICCAVR32__) || defined(__AAVR32__)) && \ + ( defined (__AT32UC3C064C__) || \ + defined (__AT32UC3C0128C__) || \ + defined (__AT32UC3C0256C__) || \ + defined (__AT32UC3C0512C__))) + +#define UC3C1 ( defined (__GNUC__) && \ + ( defined (__AVR32_UC3C164C__) || \ + defined (__AVR32_UC3C1128C__) || \ + defined (__AVR32_UC3C1256C__) || \ + defined (__AVR32_UC3C1512CREVC__))) \ + ||((defined(__ICCAVR32__) || defined(__AAVR32__)) && \ + ( defined (__AT32UC3C164C__) || \ + defined (__AT32UC3C1128C__) || \ + defined (__AT32UC3C1256C__) || \ + defined (__AT32UC3C1512C__))) + +#define UC3C2 ( defined (__GNUC__) && \ + ( defined (__AVR32_UC3C264C__) || \ + defined (__AVR32_UC3C2128C__) || \ + defined (__AVR32_UC3C2256C__) || \ + defined (__AVR32_UC3C2512CREVC__))) \ + ||((defined(__ICCAVR32__) || defined(__AAVR32__)) && \ + ( defined (__AT32UC3C264C__) || \ + defined (__AT32UC3C2128C__) || \ + defined (__AT32UC3C2256C__) || \ + defined (__AT32UC3C2512C__))) + +#define UC3C (UC3C0 || UC3C1 || UC3C2) + +// UC3 L Device series +#define UC3L0 ( defined (__GNUC__) && \ + ( defined (__AVR32_UC3L016__) || \ + defined (__AVR32_UC3L032__) || \ + defined (__AVR32_UC3L064__) || \ + defined (__AVR32_UC3L064REVB__))) \ + ||((defined(__ICCAVR32__) || defined(__AAVR32__)) && \ + ( defined (__AT32UC3L016__) || \ + defined (__AT32UC3L032__) || \ + defined (__AT32UC3L064__) || \ + defined (__AT32UC3L064REVB__))) + +#define UC3L1 ( defined (__GNUC__) && \ + ( defined (__AVR32_UC3L116__) || \ + defined (__AVR32_UC3L132__) || \ + defined (__AVR32_UC3L164__))) \ + ||((defined(__ICCAVR32__) || defined(__AAVR32__)) && \ + ( defined (__AT32UC3L116__) || \ + defined (__AT32UC3L132__) || \ + defined (__AT32UC3L164__))) + +#define UC3L2 ( defined (__GNUC__) && \ + ( defined (__AVR32_UC3L216__) || \ + defined (__AVR32_UC3L232__) || \ + defined (__AVR32_UC3L264__))) \ + ||((defined(__ICCAVR32__) || defined(__AAVR32__)) && \ + ( defined (__AT32UC3L216__) || \ + defined (__AT32UC3L232__) || \ + defined (__AT32UC3L264__))) + +#define UC3L3 ( defined (__GNUC__) && \ + ( defined (__AVR32_UC3L316__) || \ + defined (__AVR32_UC3L332__) || \ + defined (__AVR32_UC3L364__))) \ + ||((defined(__ICCAVR32__) || defined(__AAVR32__)) && \ + ( defined (__AT32UC3L316__) || \ + defined (__AT32UC3L332__) || \ + defined (__AT32UC3L364__))) + +#define UC3L (UC3L0 || UC3L1 || UC3L2 || UC3L3) + +#endif // _ARCH_H_ diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/clocks.c b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/clocks.c new file mode 100644 index 000000000..cdd07fabe --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/clocks.c @@ -0,0 +1,101 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*! \page License + * Copyright (C) 2009, H&D Wireless AB All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of H&D Wireless AB may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY H&D WIRELESS AB ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND + * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + +#include +#include "board.h" +#include "clocks.h" +#include "pm.h" +#include "flashc.h" +#include "gpio.h" + +/** + * Initializes the MCU system clocks. + */ +void +init_sys_clocks(void) +{ + /* switch to OSC0 to speed up the booting */ + pm_switch_to_osc0(&AVR32_PM, FOSC0, OSC0_STARTUP); + +#ifndef USE_PLL + return; +#endif + + /* For audio, ee have to use OSC1 on to generate the correct clockrate + * for the SSC + */ +#if OSC == 1 + /* start oscillator1 */ + pm_enable_osc1_crystal(&AVR32_PM, FOSC1); + pm_enable_clk1(&AVR32_PM, OSC1_STARTUP); +#endif + + /* configure pll multipliers */ + pm_pll_setup(&AVR32_PM, + 0, /* pll */ + PLL_MUL, /* mul */ + 1, /* div */ + OSC, /* osc */ + 16); /* lockcount */ + + /* set PLL operating range and divider (fpll = fvco/2) + * this gives PLL output = 66 MHz (62.0928 MHz for EVK1105/OSC1) + */ + pm_pll_set_option(&AVR32_PM, + 0, /* pll */ + 1, /* pll_freq */ + 1, /* pll_div2 */ + 0); /* pll_wbwdisable. */ + + + /* start PLL0 and wait for the lock */ + pm_pll_enable(&AVR32_PM, 0); + pm_wait_for_pll0_locked(&AVR32_PM); + + /* Set all peripheral clocks torun at master clock rate */ + pm_cksel(&AVR32_PM, + 0, /* pbadiv */ + 0, /* pbasel */ + 0, /* pbbdiv */ + 0, /* pbbsel */ + 0, /* hsbdiv */ + 0); /* hsbsel */ + + /* Set one waitstate for the flash */ + flashc_set_wait_state(1); + + /* Switch to PLL0 as the master clock */ + pm_switch_to_clock(&AVR32_PM, AVR32_PM_MCCTRL_MCSEL_PLL0); + +#if OSC == 1 + pm_configure_usb_clock(); +#endif +} diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/clocks.h b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/clocks.h new file mode 100644 index 000000000..cceda2903 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/clocks.h @@ -0,0 +1,78 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*! \page License + * Copyright (C) 2009, H&D Wireless AB All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of H&D Wireless AB may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY H&D WIRELESS AB ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND + * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef CLOCKS_H +#define CLOCKS_H + +#include "board.h" + + +#if BOARD == EVK1100 +# define USE_PLL +# define OSC 0 +# define PLL_MUL 10 +#elif BOARD == EVK1101 +# define USE_PLL +# define OSC 0 +# define PLL_MUL 9 +#elif BOARD == EVK1104 +# define USE_PLL +# define OSC 0 +# define PLL_MUL 9 /* for some reason we cant use 66 MHz */ +#elif BOARD == EVK1105 +# define USE_PLL +# define OSC 1 +# define PLL_MUL 10 +#elif BOARD == ARDUINO +# define USE_PLL +# define OSC 0 +# define PLL_MUL 8 +#endif + +#if OSC == 0 +# define FOSC FOSC0 /* 12 MHz */ +#else +# define FOSC FOSC1 /* 11.2896 MHz */ +#endif + +#ifdef USE_PLL +# define FMCK_HZ ((FOSC * (PLL_MUL + 1)) / 2) +#else +# define FMCK_HZ FOSC +#endif + +#define FCPU_HZ FMCK_HZ +#define FHSB_HZ FCPU_HZ +#define FPBB_HZ FMCK_HZ +#define FPBA_HZ FMCK_HZ + +void init_sys_clocks(void); + +#endif diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/flash_fw.c b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/flash_fw.c new file mode 100644 index 000000000..75d35f6bf --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/flash_fw.c @@ -0,0 +1,125 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*! \page License + * Copyright (C) 2009, H&D Wireless AB All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of H&D Wireless AB may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY H&D WIRELESS AB ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND + * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#include + +#include "printf-stdarg.h" +#include "wl_fw.h" +#include "startup.h" +#include "nor_flash.h" +#include "gpio.h" + +#define GREEN_OFF() gpio_set_gpio_pin(LED0_GPIO) +#define GREEN_ON() gpio_clr_gpio_pin(LED0_GPIO) +#define GREEN_BLINK() gpio_tgl_gpio_pin(LED0_GPIO) +#define RED_OFF() gpio_set_gpio_pin(LED1_GPIO) +#define RED_ON() gpio_clr_gpio_pin(LED1_GPIO) +#define RED_BLINK() gpio_tgl_gpio_pin(LED1_GPIO) +#define BLUE_OFF() gpio_set_gpio_pin(LED2_GPIO) +#define BLUE_ON() gpio_clr_gpio_pin(LED2_GPIO) +#define BLUE_BLINK() gpio_tgl_gpio_pin(LED2_GPIO) + + +/** + * + */ +void +led_init(void) +{ + gpio_enable_gpio_pin(LED0_GPIO); + gpio_enable_gpio_pin(LED1_GPIO); + gpio_enable_gpio_pin(LED2_GPIO); + GREEN_OFF(); + RED_OFF(); + BLUE_OFF(); +} + + +int main(void) +{ + U32 pos, len; + + startup_init(); + printk("*** HD chip firmware upgrade ver 2.7 ***\n"); + led_init(); + flash_init(); + GREEN_ON(); + if (at45dbx_mem_check() == OK) + { + printk("Memory check... [ OK ]\n"); + } + else + { + RED_ON(); + GREEN_OFF(); + printk("Memory check... [FAIL]\n"); + return 0; + } + printk("Writing firmware data to flash\n"); + pos = 0; + while (pos < fw_len) { + if (fw_len - pos > SECTOR_SIZE) + len = SECTOR_SIZE; + else + len = fw_len - pos; + + flash_write(pos, fw_buf + pos, len); + pos += len; + } + + printk("Verifying firmware data\n"); + pos = 0; + while (pos < fw_len) { + static U8 page_buf[SECTOR_SIZE]; + U32 i; + + if (fw_len - pos > SECTOR_SIZE) + len = SECTOR_SIZE; + else + len = fw_len - pos; + + flash_read(pos, page_buf, len); + + for (i = 0; i < len; i++) + if (*(page_buf + i) != *(fw_buf + pos + i)) { + RED_ON(); + GREEN_OFF(); + printk("Verify failed at byte %d, 0x%02x != 0x%02x\n", + pos + i, *(page_buf + i), *(fw_buf + pos + i)); + return 0; + } + + + pos += len; + } + GREEN_OFF(); + BLUE_ON(); + printk("Firmware successfully stored in flash!\n"); + return 0; +} diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/license.txt b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/license.txt new file mode 100644 index 000000000..e57439f37 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/license.txt @@ -0,0 +1,42 @@ + Copyright (C) 2009, H&D Wireless AB All rights reserved. + + The license to use this software in whole and in part and to + redistribute it in any form follows with the WiFi HW module from H&D + Wireless and is granted under the following restrictions: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + 3. The name of H&D Wireless AB may not be used to endorse or promote + products derived from this software without specific prior written + permission. + + 4. The software may only be used together with hardware from H&D + Wireless all other use is prohibited. + + 5. The license to use and redistribute the software is granted + together with the purchase of a hardware platform on a one to one + basis + + 6. The binary code may not be reversed engineered or by other means + copied to circumvent this license. + + THIS SOFTWARE IS PROVIDED BY H&D WIRELESS AB ``AS IS'' AND ANY + EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT + SHALL HD WIRELESS AB BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + OF THE POSSIBILITY OF SUCH DAMAGE. + + For more information regarding this software license Contact H&D + Wireless AB (support@hd-wireless.se). diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/nor_flash.c b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/nor_flash.c new file mode 100644 index 000000000..011594923 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/nor_flash.c @@ -0,0 +1,99 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*! \page License + * Copyright (C) 2009, H&D Wireless AB All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of H&D Wireless AB may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY H&D WIRELESS AB ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND + * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#include +#include "compiler.h" +#include "preprocessor.h" +#include "board.h" +#include "power_clocks_lib.h" +#include "gpio.h" +#include "spi.h" +#include "conf_at45dbx.h" +#include "at45dbx.h" +#include "clocks.h" + + +void flash_init(void) +{ + static const gpio_map_t AT45DBX_SPI_GPIO_MAP = { + { AT45DBX_SPI_SCK_PIN, AT45DBX_SPI_SCK_FUNCTION }, + { AT45DBX_SPI_MISO_PIN, AT45DBX_SPI_MISO_FUNCTION }, + { AT45DBX_SPI_MOSI_PIN, AT45DBX_SPI_MOSI_FUNCTION }, + { AT45DBX_SPI_NPCS2_PIN, AT45DBX_SPI_NPCS2_FUNCTION }, + }; + + spi_options_t spiOptions = { + .reg = AT45DBX_SPI_FIRST_NPCS, + .baudrate = AT45DBX_SPI_MASTER_SPEED, + .bits = AT45DBX_SPI_BITS, + .spck_delay = 0, + .trans_delay = 0, + .stay_act = 1, + .spi_mode = 0, + .modfdis = 1 + }; + + gpio_enable_module(AT45DBX_SPI_GPIO_MAP, + sizeof(AT45DBX_SPI_GPIO_MAP) / + sizeof(AT45DBX_SPI_GPIO_MAP[0])); + + spi_initMaster(AT45DBX_SPI, &spiOptions); + + spi_selectionMode(AT45DBX_SPI, 0, 0, 0); + spi_enable(AT45DBX_SPI); + + /* put up flash reset pin */ + gpio_set_gpio_pin(AT45DBX_CHIP_RESET); + + at45dbx_init(spiOptions, FPBA_HZ); +} + +void flash_write(U32 addr, const U8* buf, U32 len) +{ + U32 sector = addr / AT45DBX_SECTOR_SIZE; + U32 i; + Assert(addr % AT45DBX_SECTOR_SIZE == 0); + + at45dbx_write_open(sector); + for (i = 0; i < len; i++) + at45dbx_write_byte(buf[i]); + at45dbx_write_close(); +} + +void flash_read(U32 addr, U8* buf, U32 len) +{ + U32 sector = addr / AT45DBX_SECTOR_SIZE; + U32 i; + Assert(addr % AT45DBX_SECTOR_SIZE == 0); + + at45dbx_read_open(sector); + for (i = 0; i < len; i++) + buf[i] = at45dbx_read_byte(); + at45dbx_read_close(); +} diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/nor_flash.h b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/nor_flash.h new file mode 100644 index 000000000..52a4a200a --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/nor_flash.h @@ -0,0 +1,41 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*! \page License + * Copyright (C) 2009, H&D Wireless AB All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of H&D Wireless AB may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY H&D WIRELESS AB ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND + * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef NOR_FLASH_H +#define NOR_FLASH_H + +#include "at45dbx.h" + +#define SECTOR_SIZE AT45DBX_SECTOR_SIZE + +void flash_init(void); +void flash_write(U32 addr, const U8* buf, U32 len); +void flash_read(U32 addr, U8* buf, U32 len); + +#endif diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/printf-stdarg.c b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/printf-stdarg.c new file mode 100644 index 000000000..86ab88e09 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/printf-stdarg.c @@ -0,0 +1,323 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* This source file is part of the ATMEL AVR32-SoftwareFramework-AT32UC3A-1.4.0 Release */ + +/*This file has been prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief sprintf functions to replace newlib for AVR32 UC3. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + *****************************************************************************/ + +/* Copyright (C) 2006-2008, Atmel Corporation All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of ATMEL may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND + * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + Copyright 2001, 2002 Georges Menie (www.menie.org) + stdarg version contributed by Christian Ettinger + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +/* + putchar is the only external dependency for this file, + if you have a working putchar, leave it commented out. + If not, uncomment the define below and + replace outbyte(c) by your own function call. + +*/ + + +#include +#include + +#define putchar(c) print_dbg_char(c) + +static void printchar(char **str, int c) +{ + extern int putchar(int c); + + if (str) { + **str = c; + ++(*str); + } + else (void)putchar(c); +} + +#define PAD_RIGHT 1 +#define PAD_ZERO 2 + +static int prints(char **out, const char *string, int width, int pad) +{ + register int pc = 0, padchar = ' '; + + if (width > 0) { + register int len = 0; + register const char *ptr; + for (ptr = string; *ptr; ++ptr) ++len; + if (len >= width) width = 0; + else width -= len; + if (pad & PAD_ZERO) padchar = '0'; + } + if (!(pad & PAD_RIGHT)) { + for ( ; width > 0; --width) { + printchar (out, padchar); + ++pc; + } + } + for ( ; *string ; ++string) { + printchar (out, *string); + ++pc; + } + for ( ; width > 0; --width) { + printchar (out, padchar); + ++pc; + } + + return pc; +} + +/* the following should be enough for 32 bit int */ +#define PRINT_BUF_LEN 12 + +static int printi(char **out, int i, int b, int sg, int width, int pad, int letbase) +{ + char print_buf[PRINT_BUF_LEN]; + register char *s; + register int t, neg = 0, pc = 0; + register unsigned int u = i; + + if (i == 0) { + print_buf[0] = '0'; + print_buf[1] = '\0'; + return prints (out, print_buf, width, pad); + } + + if (sg && b == 10 && i < 0) { + neg = 1; + u = -i; + } + + s = print_buf + PRINT_BUF_LEN-1; + *s = '\0'; + + while (u) { + t = u % b; + if( t >= 10 ) + t += letbase - '0' - 10; + *--s = t + '0'; + u /= b; + } + + if (neg) { + if( width && (pad & PAD_ZERO) ) { + printchar (out, '-'); + ++pc; + --width; + } + else { + *--s = '-'; + } + } + + return pc + prints (out, s, width, pad); +} + +int fprintf(__FILE *stream, const char *format, ...) +{ +return 0; +} +int printk_va(char **out, const char *format, va_list args ) +{ + register int width, pad; + register int pc = 0; + char scr[2]; + + for (; *format != 0; ++format) { + if (*format == '%') { + ++format; + width = pad = 0; + if (*format == '\0') break; + if (*format == '%') goto out; + if (*format == '-') { + ++format; + pad = PAD_RIGHT; + } + while (*format == '0') { + ++format; + pad |= PAD_ZERO; + } + for ( ; *format >= '0' && *format <= '9'; ++format) { + width *= 10; + width += *format - '0'; + } + if( *format == 's' ) { + register char *s = (char *)va_arg( args, int ); + pc += prints (out, s?s:"(null)", width, pad); + continue; + } + if( *format == 'd' ) { + pc += printi (out, va_arg( args, int ), 10, 1, width, pad, 'a'); + continue; + } + if( *format == 'p' ) { + pad = 8; + pc += printi (out, va_arg( args, int ), 16, 0, width, pad, 'a'); + continue; + } + if( *format == 'x' ) { + pc += printi (out, va_arg( args, int ), 16, 0, width, pad, 'a'); + continue; + } + if( *format == 'X' ) { + pc += printi (out, va_arg( args, int ), 16, 0, width, pad, 'A'); + continue; + } + if( *format == 'u' ) { + pc += printi (out, va_arg( args, int ), 10, 0, width, pad, 'a'); + continue; + } + if( *format == 'c' ) { + /* char are converted to int then pushed on the stack */ + scr[0] = (char)va_arg( args, int ); + scr[1] = '\0'; + pc += prints (out, scr, width, pad); + continue; + } + } + else { + out: + printchar (out, *format); + ++pc; + } + } + if (out) **out = '\0'; + va_end( args ); + return pc; +} + +int printk(const char *format, ...) +{ + va_list args; + + va_start( args, format ); + return printk_va( 0, format, args ); +} + +int sprintf(char *out, const char *format, ...) +{ + va_list args; + + va_start( args, format ); + return printk_va( &out, format, args ); +} + +#ifdef TEST_PRINTF +int main(void) +{ + char *ptr = "Hello world!"; + char *np = 0; + int i = 5; + unsigned int bs = sizeof(int)*8; + int mi; + char buf[80]; + + mi = (1 << (bs-1)) + 1; + printf("%s\n", ptr); + printf("printf test\n"); + printf("%s is null pointer\n", np); + printf("%d = 5\n", i); + printf("%d = - max int\n", mi); + printf("char %c = 'a'\n", 'a'); + printf("hex %x = ff\n", 0xff); + printf("hex %02x = 00\n", 0); + printf("signed %d = unsigned %u = hex %x\n", -3, -3, -3); + printf("%d %s(s)%", 0, "message"); + printf("\n"); + printf("%d %s(s) with %%\n", 0, "message"); + sprintf(buf, "justif: \"%-10s\"\n", "left"); printf("%s", buf); + sprintf(buf, "justif: \"%10s\"\n", "right"); printf("%s", buf); + sprintf(buf, " 3: %04d zero padded\n", 3); printf("%s", buf); + sprintf(buf, " 3: %-4d left justif.\n", 3); printf("%s", buf); + sprintf(buf, " 3: %4d right justif.\n", 3); printf("%s", buf); + sprintf(buf, "-3: %04d zero padded\n", -3); printf("%s", buf); + sprintf(buf, "-3: %-4d left justif.\n", -3); printf("%s", buf); + sprintf(buf, "-3: %4d right justif.\n", -3); printf("%s", buf); + + return 0; +} + +/* + * if you compile this file with + * gcc -Wall $(YOUR_C_OPTIONS) -DTEST_PRINTF -c printf.c + * you will get a normal warning: + * printf.c:214: warning: spurious trailing `%' in format + * this line is testing an invalid % at the end of the format string. + * + * this should display (on 32bit int machine) : + * + * Hello world! + * printf test + * (null) is null pointer + * 5 = 5 + * -2147483647 = - max int + * char a = 'a' + * hex ff = ff + * hex 00 = 00 + * signed -3 = unsigned 4294967293 = hex fffffffd + * 0 message(s) + * 0 message(s) with % + * justif: "left " + * justif: " right" + * 3: 0003 zero padded + * 3: 3 left justif. + * 3: 3 right justif. + * -3: -003 zero padded + * -3: -3 left justif. + * -3: -3 right justif. + */ + +#endif diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/printf-stdarg.h b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/printf-stdarg.h new file mode 100644 index 000000000..f6bd66476 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/printf-stdarg.h @@ -0,0 +1,36 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*! \page License + * Copyright (C) 2009, H&D Wireless AB All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of H&D Wireless AB may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY H&D WIRELESS AB ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND + * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef PRINTF_STDARG_H +#define PRINTF_STDARG_H +#include + +int printk(const char *format, ...); +int printk_va(char **out, const char *format, va_list args ); +#endif diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/startup.c b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/startup.c new file mode 100644 index 000000000..fa2a8c01e --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/startup.c @@ -0,0 +1,75 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*! \page License + * Copyright (C) 2009, H&D Wireless AB All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of H&D Wireless AB may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY H&D WIRELESS AB ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND + * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#include "startup.h" +#include "pm.h" +#include "intc.h" +#include "board.h" +#include "print_funcs.h" +#include "clocks.h" + + +static void init_exceptions(void) +{ + extern void _evba; + Set_system_register(AVR32_EVBA, (int)&_evba); + Enable_global_exception(); +} + +static void init_hmatrix(void) +{ + union { + unsigned long scfg; + avr32_hmatrix_scfg_t SCFG; + } u_avr32_hmatrix_scfg = { + AVR32_HMATRIX.scfg[AVR32_HMATRIX_SLAVE_FLASH] + }; + u_avr32_hmatrix_scfg.SCFG.defmstr_type = + AVR32_HMATRIX_DEFMSTR_TYPE_LAST_DEFAULT; + AVR32_HMATRIX.scfg[AVR32_HMATRIX_SLAVE_FLASH] = + u_avr32_hmatrix_scfg.scfg; +} + +static void init_interrupts(void) +{ + INTC_init_interrupts(); + + //initExtInt(); + + Enable_global_interrupt(); +} + +void startup_init(void) +{ + init_exceptions(); + init_hmatrix(); + init_sys_clocks(); + init_interrupts(); + init_dbg_rs232(FPBA_HZ); +} diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/startup.h b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/startup.h new file mode 100644 index 000000000..a9adc60ba --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/startup.h @@ -0,0 +1,35 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*! \page License + * Copyright (C) 2009, H&D Wireless AB All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of H&D Wireless AB may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY H&D WIRELESS AB ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND + * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef STARTUP_H +#define STARTUP_H + +void startup_init(void); + +#endif diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/wl_fw.h b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/wl_fw.h new file mode 100644 index 000000000..5be5f3762 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifi_dnld/src/wl_fw.h @@ -0,0 +1,19287 @@ +/* + * Programming interface for wl_api. + * Copyright (C) 2010 HD Wireless AB + * + * You should have received a copy of the license along with this library. + */ + +#ifndef WITHOUT_STDINT +#include +#endif +const uint8_t fw_buf[154188] = { + 0x10, 0x61, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x10, 0x61, 0x04, 0x00, + 0x38, 0x61, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x20, 0x61, 0x04, 0x00, + 0x30, 0x61, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x30, 0x61, 0x04, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x61, 0x04, 0x00, + 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0xee, 0xee, + 0xee, 0xee, 0x18, 0xf0, 0x9f, 0xe5, 0x18, 0xf0, + 0x9f, 0xe5, 0x18, 0xf0, 0x9f, 0xe5, 0x18, 0xf0, + 0x9f, 0xe5, 0x00, 0x00, 0xa0, 0xe1, 0x18, 0xf0, + 0x9f, 0xe5, 0x18, 0xf0, 0x9f, 0xe5, 0x44, 0x00, + 0x00, 0x00, 0xb4, 0x08, 0x00, 0x00, 0xb4, 0x08, + 0x00, 0x00, 0xb4, 0x08, 0x00, 0x00, 0xb4, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe4, 0x08, + 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x00, 0x00, + 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x0f, 0xe1, 0x1f, 0x00, 0xc0, 0xe3, + 0x13, 0x00, 0x80, 0xe3, 0xc0, 0x00, 0x80, 0xe3, + 0x00, 0xf0, 0x2f, 0xe1, 0x1c, 0xf0, 0x9f, 0xe5, + 0x3d, 0x02, 0x00, 0xeb, 0x5a, 0x02, 0x00, 0xeb, + 0x8d, 0x02, 0x00, 0xeb, 0x01, 0x00, 0x8f, 0xe2, + 0x10, 0xff, 0x2f, 0xe1, 0x41, 0xf0, 0xde, 0xfb, + 0x01, 0xf0, 0xdc, 0xfd, 0x3c, 0x00, 0x78, 0x00, + 0x00, 0x00, 0xfe, 0xe7, 0x00, 0x00, 0x5c, 0x00, + 0x00, 0x00, 0x78, 0x47, 0xc0, 0x46, 0x01, 0x00, + 0x00, 0xea, 0x78, 0x47, 0xc0, 0x46, 0x17, 0x00, + 0x00, 0xea, 0x8c, 0x11, 0x9f, 0xe5, 0x00, 0x20, + 0x91, 0xe5, 0x00, 0x30, 0x0f, 0xe1, 0x84, 0x11, + 0x9f, 0xe5, 0xfd, 0x20, 0xa1, 0xe8, 0x80, 0x01, + 0x9f, 0xe5, 0x80, 0x21, 0x9f, 0xe5, 0x01, 0x20, + 0x42, 0xe0, 0x0d, 0x00, 0x40, 0xe0, 0x3c, 0x00, + 0xb4, 0x00, 0x00, 0x00, 0x02, 0x00, 0x50, 0xe1, + 0x28, 0x00, 0x00, 0xaa, 0x68, 0x01, 0x9f, 0xe5, + 0x0d, 0x00, 0x50, 0xe1, 0x02, 0x00, 0x00, 0xba, + 0x04, 0x20, 0x10, 0xe4, 0x04, 0x20, 0x81, 0xe4, + 0xfa, 0xff, 0xff, 0xea, 0x58, 0x11, 0x9f, 0xe5, + 0x58, 0x01, 0x9f, 0xe5, 0x00, 0x00, 0x81, 0xe5, + 0x3c, 0x11, 0x9f, 0xe5, 0x50, 0x01, 0x9f, 0xe5, + 0x00, 0x00, 0x81, 0xe5, 0x1e, 0xff, 0x2f, 0xe1, + 0x3c, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x48, 0x11, + 0x9f, 0xe5, 0x00, 0x00, 0x91, 0xe5, 0x24, 0x11, + 0x9f, 0xe5, 0x00, 0x00, 0x81, 0xe5, 0x2c, 0x11, + 0x9f, 0xe5, 0x38, 0x01, 0x9f, 0xe5, 0x00, 0x00, + 0x81, 0xe5, 0x1e, 0xff, 0x2f, 0xe1, 0x74, 0x02, + 0x00, 0xeb, 0x10, 0x01, 0x9f, 0xe5, 0x28, 0x11, + 0x9f, 0xe5, 0x04, 0x20, 0x91, 0xe4, 0x04, 0x20, + 0x00, 0xe4, 0x04, 0x21, 0x9f, 0xe5, 0x02, 0x00, + 0x51, 0xe1, 0x3c, 0x00, 0x2c, 0x01, 0x00, 0x00, + 0xfa, 0xff, 0xff, 0x1a, 0xf0, 0x10, 0x9f, 0xe5, + 0xfd, 0x20, 0xb1, 0xe8, 0x03, 0xf0, 0x2f, 0xe1, + 0xe0, 0x10, 0x9f, 0xe5, 0x00, 0x20, 0x81, 0xe5, + 0xe8, 0x10, 0x9f, 0xe5, 0xf4, 0x20, 0x9f, 0xe5, + 0x00, 0x20, 0x81, 0xe5, 0x02, 0x10, 0x80, 0xe2, + 0x00, 0x00, 0x20, 0xe0, 0x01, 0x00, 0x40, 0xe2, + 0x11, 0xff, 0x2f, 0xe1, 0x01, 0x00, 0x8f, 0xe2, + 0x10, 0xff, 0x2f, 0xe1, 0x3c, 0x00, 0x68, 0x01, + 0x00, 0x00, 0x01, 0xf0, 0x9c, 0xf8, 0x78, 0x47, + 0x00, 0x00, 0x01, 0x00, 0x8f, 0xe2, 0x10, 0xff, + 0x2f, 0xe1, 0x01, 0xf0, 0x94, 0xf8, 0x78, 0x47, + 0x00, 0x00, 0x03, 0x00, 0x2d, 0xe9, 0x00, 0x10, + 0x0f, 0xe1, 0x00, 0x10, 0x80, 0xe5, 0xb8, 0x10, + 0x9f, 0xe5, 0x04, 0x10, 0x80, 0xe5, 0x00, 0x10, + 0xa0, 0xe1, 0x10, 0x00, 0x80, 0xe2, 0xfc, 0x1f, + 0xa0, 0xe8, 0x00, 0x20, 0xa0, 0xe1, 0x3c, 0x00, + 0xa4, 0x01, 0x00, 0x00, 0x01, 0x30, 0xa0, 0xe1, + 0x03, 0x00, 0xbd, 0xe8, 0x08, 0x00, 0x83, 0xe5, + 0x0c, 0x10, 0x83, 0xe5, 0xd3, 0x00, 0xa0, 0xe3, + 0x00, 0xf0, 0x21, 0xe1, 0x00, 0x60, 0xa2, 0xe8, + 0x00, 0x10, 0x4f, 0xe1, 0x04, 0x10, 0x82, 0xe4, + 0xd2, 0x00, 0xa0, 0xe3, 0x00, 0xf0, 0x21, 0xe1, + 0x00, 0x60, 0xa2, 0xe8, 0x00, 0x10, 0x4f, 0xe1, + 0x04, 0x10, 0x82, 0xe4, 0xd1, 0x00, 0xa0, 0xe3, + 0x3c, 0x00, 0xe0, 0x01, 0x00, 0x00, 0x00, 0xf0, + 0x21, 0xe1, 0x00, 0x7f, 0xa2, 0xe8, 0x00, 0x10, + 0x4f, 0xe1, 0x04, 0x10, 0x82, 0xe4, 0xd7, 0x00, + 0xa0, 0xe3, 0x00, 0xf0, 0x21, 0xe1, 0x00, 0x60, + 0xa2, 0xe8, 0x00, 0x10, 0x4f, 0xe1, 0x04, 0x10, + 0x82, 0xe4, 0xdb, 0x00, 0xa0, 0xe3, 0x00, 0xf0, + 0x21, 0xe1, 0x00, 0x60, 0xa2, 0xe8, 0x00, 0x10, + 0x4f, 0xe1, 0x00, 0x10, 0x82, 0xe5, 0x00, 0x00, + 0x93, 0xe5, 0x3c, 0x00, 0x1c, 0x02, 0x00, 0x00, + 0x00, 0xf0, 0x2f, 0xe1, 0x1e, 0xff, 0x2f, 0xe1, + 0x20, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x00, + 0x20, 0xee, 0x01, 0x00, 0xd8, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0xf0, 0x9f, 0xe5, + 0x10, 0x01, 0x00, 0x00, 0x08, 0x03, 0x00, 0x00, + 0xee, 0xee, 0xee, 0xee, 0x24, 0x03, 0x00, 0x00, + 0x20, 0x02, 0x00, 0x00, 0xb0, 0xb5, 0x04, 0x1c, + 0x63, 0x1c, 0x0b, 0x4d, 0x3c, 0x00, 0x58, 0x02, + 0x00, 0x00, 0x01, 0xd1, 0x6c, 0x69, 0x10, 0xe0, + 0x00, 0xf0, 0x6c, 0xfb, 0x09, 0x48, 0xff, 0xf7, + 0x0c, 0xff, 0xec, 0x60, 0x08, 0x4a, 0x51, 0x68, + 0x50, 0x68, 0x88, 0x42, 0xfc, 0xd0, 0x02, 0x20, + 0x28, 0x70, 0x01, 0x21, 0x8a, 0x20, 0x01, 0xf0, + 0x12, 0xf8, 0x20, 0x1c, 0xb0, 0xbd, 0x30, 0x00, + 0x07, 0x00, 0x51, 0x02, 0x00, 0x00, 0x00, 0x03, + 0x07, 0x00, 0xb0, 0xb5, 0x05, 0x1c, 0x3c, 0x00, + 0x94, 0x02, 0x00, 0x00, 0x00, 0x24, 0x00, 0xf0, + 0x50, 0xfb, 0x14, 0x48, 0xff, 0xf7, 0xf0, 0xfe, + 0x13, 0x49, 0x14, 0x48, 0xc1, 0x60, 0x01, 0x21, + 0x13, 0x4a, 0x49, 0x03, 0x91, 0x60, 0x13, 0x49, + 0xca, 0x78, 0x08, 0x23, 0x9a, 0x43, 0xca, 0x70, + 0xca, 0x78, 0x04, 0x23, 0x1a, 0x43, 0xca, 0x70, + 0x6b, 0x1c, 0x0d, 0xd0, 0x0e, 0x4b, 0x5a, 0x68, + 0x59, 0x68, 0x91, 0x42, 0xfc, 0xd0, 0xbe, 0x21, + 0x3c, 0x00, 0xd0, 0x02, 0x00, 0x00, 0x19, 0x73, + 0x19, 0x7a, 0x11, 0x22, 0x91, 0x43, 0x19, 0x72, + 0x19, 0x7a, 0xc9, 0x07, 0xfc, 0xd4, 0x02, 0x21, + 0x01, 0x70, 0xff, 0xf7, 0xd0, 0xfe, 0x20, 0x1c, + 0xb0, 0xbd, 0x91, 0x02, 0x00, 0x00, 0xff, 0xff, + 0xff, 0x00, 0x30, 0x00, 0x07, 0x00, 0x00, 0x10, + 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x03, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x0c, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x48, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x84, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, + 0x08, 0x47, 0x10, 0x47, 0x18, 0x47, 0x20, 0x47, + 0x28, 0x47, 0x30, 0x47, 0x38, 0x47, 0x10, 0xb5, + 0x04, 0x1c, 0x10, 0x1c, 0x00, 0xf0, 0x23, 0xf9, + 0x03, 0xc4, 0x10, 0xbc, 0x08, 0xbc, 0x18, 0x47, + 0x00, 0x00, 0x3c, 0x00, 0xfc, 0x03, 0x00, 0x00, + 0x10, 0xb4, 0x04, 0x2a, 0x0e, 0xd3, 0x03, 0x1c, + 0x0b, 0x43, 0x9b, 0x07, 0x0a, 0xd1, 0x08, 0xc8, + 0x10, 0xc9, 0xa3, 0x42, 0x02, 0xd1, 0x04, 0x3a, + 0x04, 0x2a, 0xf8, 0xd2, 0xa3, 0x42, 0x01, 0xd0, + 0x04, 0x38, 0x04, 0x39, 0x00, 0x2a, 0x02, 0xd1, + 0x00, 0x20, 0x10, 0xbc, 0x70, 0x47, 0xd3, 0x07, + 0x01, 0xd5, 0x01, 0x32, 0x05, 0xe0, 0x03, 0x78, + 0x0c, 0x78, 0x01, 0x31, 0x3c, 0x00, 0x38, 0x04, + 0x00, 0x00, 0x01, 0x30, 0xa3, 0x42, 0x07, 0xd1, + 0x03, 0x78, 0x0c, 0x78, 0x01, 0x31, 0x01, 0x30, + 0xa3, 0x42, 0x01, 0xd1, 0x02, 0x3a, 0xf1, 0xd1, + 0x18, 0x1b, 0xe9, 0xe7, 0x00, 0x00, 0x78, 0x47, + 0x00, 0x00, 0x00, 0x20, 0xa0, 0xe3, 0x04, 0x00, + 0x51, 0xe3, 0x08, 0x00, 0x00, 0x3a, 0x03, 0xc0, + 0x10, 0xe2, 0x0d, 0x00, 0x00, 0x0a, 0x04, 0xc0, + 0x6c, 0xe2, 0x02, 0x00, 0x5c, 0xe3, 0x3c, 0x00, + 0x74, 0x04, 0x00, 0x00, 0x01, 0x20, 0xc0, 0xe4, + 0x01, 0x20, 0xc0, 0xa4, 0x01, 0x20, 0xc0, 0xc4, + 0x0c, 0x10, 0x41, 0xe0, 0x06, 0x00, 0x00, 0xea, + 0x81, 0xcf, 0xb0, 0xe1, 0x01, 0x20, 0xc0, 0x24, + 0x01, 0x20, 0xc0, 0x24, 0x01, 0x20, 0xc0, 0x44, + 0x1e, 0xff, 0x2f, 0xe1, 0x78, 0x47, 0x00, 0x00, + 0x00, 0x20, 0xa0, 0xe3, 0x00, 0x40, 0x2d, 0xe9, + 0x02, 0x30, 0xa0, 0xe1, 0x02, 0xc0, 0xa0, 0xe1, + 0x3c, 0x00, 0xb0, 0x04, 0x00, 0x00, 0x02, 0xe0, + 0xa0, 0xe1, 0x20, 0x10, 0x51, 0xe2, 0x0c, 0x50, + 0xa0, 0x28, 0x0c, 0x50, 0xa0, 0x28, 0x20, 0x10, + 0x51, 0x22, 0xfb, 0xff, 0xff, 0x2a, 0x01, 0x1e, + 0xb0, 0xe1, 0x0c, 0x50, 0xa0, 0x28, 0x0c, 0x00, + 0xa0, 0x48, 0x00, 0x40, 0xbd, 0xe8, 0x01, 0x11, + 0xb0, 0xe1, 0x04, 0x20, 0x80, 0x24, 0x1e, 0xff, + 0x2f, 0x01, 0x01, 0x20, 0xc0, 0x44, 0x01, 0x20, + 0xc0, 0x44, 0x3c, 0x00, 0xec, 0x04, 0x00, 0x00, + 0x40, 0x04, 0x11, 0xe3, 0x01, 0x20, 0xc0, 0x14, + 0x1e, 0xff, 0x2f, 0xe1, 0x78, 0x47, 0x00, 0x00, + 0x03, 0x00, 0x52, 0xe3, 0x3e, 0x00, 0x00, 0x9a, + 0x03, 0xc0, 0x10, 0xe2, 0x08, 0x00, 0x00, 0x0a, + 0x01, 0x30, 0xd1, 0xe4, 0x02, 0x00, 0x5c, 0xe3, + 0x0c, 0x20, 0x82, 0xe0, 0x01, 0xc0, 0xd1, 0x94, + 0x01, 0x30, 0xc0, 0xe4, 0x01, 0x30, 0xd1, 0x34, + 0x04, 0x20, 0x42, 0xe2, 0x3c, 0x00, 0x28, 0x05, + 0x00, 0x00, 0x01, 0xc0, 0xc0, 0x94, 0x01, 0x30, + 0xc0, 0x34, 0x03, 0x30, 0x11, 0xe2, 0x1e, 0x00, + 0x00, 0x0a, 0x04, 0x20, 0x52, 0xe2, 0x2f, 0x00, + 0x00, 0x3a, 0x03, 0xc0, 0x31, 0xe7, 0x02, 0x00, + 0x53, 0xe3, 0x08, 0x00, 0x00, 0x0a, 0x0f, 0x00, + 0x00, 0x8a, 0x2c, 0x34, 0xa0, 0xe1, 0x04, 0xc0, + 0xb1, 0xe5, 0x04, 0x20, 0x52, 0xe2, 0x0c, 0x3c, + 0x83, 0xe1, 0x04, 0x30, 0x80, 0xe4, 0x3c, 0x00, + 0x64, 0x05, 0x00, 0x00, 0xf9, 0xff, 0xff, 0x2a, + 0x01, 0x10, 0x81, 0xe2, 0x23, 0x00, 0x00, 0xea, + 0x2c, 0x38, 0xa0, 0xe1, 0x04, 0xc0, 0xb1, 0xe5, + 0x04, 0x20, 0x52, 0xe2, 0x0c, 0x38, 0x83, 0xe1, + 0x04, 0x30, 0x80, 0xe4, 0xf9, 0xff, 0xff, 0x2a, + 0x02, 0x10, 0x81, 0xe2, 0x1b, 0x00, 0x00, 0xea, + 0x2c, 0x3c, 0xa0, 0xe1, 0x04, 0xc0, 0xb1, 0xe5, + 0x04, 0x20, 0x52, 0xe2, 0x0c, 0x34, 0x83, 0xe1, + 0x3c, 0x00, 0xa0, 0x05, 0x00, 0x00, 0x04, 0x30, + 0x80, 0xe4, 0xf9, 0xff, 0xff, 0x2a, 0x03, 0x10, + 0x81, 0xe2, 0x13, 0x00, 0x00, 0xea, 0x78, 0x47, + 0x00, 0x00, 0x10, 0x40, 0x2d, 0xe9, 0x20, 0x20, + 0x52, 0xe2, 0x05, 0x00, 0x00, 0x3a, 0x18, 0x50, + 0xb1, 0x28, 0x18, 0x50, 0xa0, 0x28, 0x18, 0x50, + 0xb1, 0x28, 0x18, 0x50, 0xa0, 0x28, 0x20, 0x20, + 0x52, 0x22, 0xf9, 0xff, 0xff, 0x2a, 0x02, 0xce, + 0xb0, 0xe1, 0x3c, 0x00, 0xdc, 0x05, 0x00, 0x00, + 0x18, 0x50, 0xb1, 0x28, 0x18, 0x50, 0xa0, 0x28, + 0x18, 0x00, 0xb1, 0x48, 0x18, 0x00, 0xa0, 0x48, + 0x10, 0x40, 0xbd, 0xe8, 0x02, 0xcf, 0xb0, 0xe1, + 0x04, 0x30, 0x91, 0x24, 0x04, 0x30, 0x80, 0x24, + 0x1e, 0xff, 0x2f, 0x01, 0x82, 0x2f, 0xb0, 0xe1, + 0x01, 0x20, 0xd1, 0x44, 0x01, 0x30, 0xd1, 0x24, + 0x01, 0xc0, 0xd1, 0x24, 0x01, 0x20, 0xc0, 0x44, + 0x01, 0x30, 0xc0, 0x24, 0x3c, 0x00, 0x18, 0x06, + 0x00, 0x00, 0x01, 0xc0, 0xc0, 0x24, 0x1e, 0xff, + 0x2f, 0xe1, 0x78, 0x47, 0x00, 0x00, 0xff, 0x30, + 0x01, 0xe2, 0x02, 0x10, 0xa0, 0xe1, 0x03, 0x24, + 0x83, 0xe1, 0x02, 0x28, 0x82, 0xe1, 0x88, 0xff, + 0xff, 0xea, 0x78, 0x47, 0x00, 0x00, 0x80, 0x24, + 0x10, 0xe2, 0x00, 0x00, 0x60, 0x42, 0x41, 0x30, + 0x32, 0xe0, 0x00, 0x10, 0x61, 0x22, 0xa1, 0xc1, + 0x70, 0xe0, 0x20, 0x00, 0x00, 0x3a, 0x3c, 0x00, + 0x54, 0x06, 0x00, 0x00, 0x21, 0xc4, 0x70, 0xe0, + 0x0f, 0x00, 0x00, 0x3a, 0x00, 0x04, 0xa0, 0xe1, + 0xff, 0x24, 0x82, 0xe3, 0x21, 0xc2, 0x70, 0xe0, + 0x17, 0x00, 0x00, 0x3a, 0x21, 0xc4, 0x70, 0xe0, + 0x09, 0x00, 0x00, 0x3a, 0x00, 0x04, 0xa0, 0xe1, + 0xff, 0x28, 0x82, 0xe3, 0x21, 0xc4, 0x70, 0xe0, + 0x00, 0x04, 0xa0, 0x21, 0xff, 0x2c, 0x82, 0x23, + 0x21, 0xc2, 0x70, 0xe0, 0x0e, 0x00, 0x00, 0x3a, + 0x3c, 0x00, 0x90, 0x06, 0x00, 0x00, 0x00, 0xc0, + 0x70, 0xe2, 0x83, 0x00, 0x00, 0x2a, 0x20, 0x04, + 0xa0, 0x21, 0xa1, 0xc3, 0x70, 0xe0, 0x80, 0x13, + 0x41, 0x20, 0x02, 0x20, 0xa2, 0xe0, 0x21, 0xc3, + 0x70, 0xe0, 0x00, 0x13, 0x41, 0x20, 0x02, 0x20, + 0xa2, 0xe0, 0xa1, 0xc2, 0x70, 0xe0, 0x80, 0x12, + 0x41, 0x20, 0x02, 0x20, 0xa2, 0xe0, 0x21, 0xc2, + 0x70, 0xe0, 0x00, 0x12, 0x41, 0x20, 0x02, 0x20, + 0xa2, 0xe0, 0x3c, 0x00, 0xcc, 0x06, 0x00, 0x00, + 0xa1, 0xc1, 0x70, 0xe0, 0x80, 0x11, 0x41, 0x20, + 0x02, 0x20, 0xa2, 0xe0, 0x21, 0xc1, 0x70, 0xe0, + 0x00, 0x11, 0x41, 0x20, 0x02, 0x20, 0xa2, 0xe0, + 0xa1, 0xc0, 0x70, 0xe0, 0x80, 0x10, 0x41, 0x20, + 0x02, 0x20, 0xa2, 0xe0, 0x01, 0xc0, 0x70, 0xe0, + 0x00, 0x10, 0x41, 0x20, 0x02, 0x20, 0xb2, 0xe0, + 0xe5, 0xff, 0xff, 0x2a, 0xc3, 0x0f, 0x32, 0xe0, + 0xa3, 0x0f, 0x80, 0xe0, 0x3c, 0x00, 0x08, 0x07, + 0x00, 0x00, 0x00, 0x10, 0x61, 0x22, 0x1e, 0xff, + 0x2f, 0xe1, 0x78, 0x47, 0x00, 0x00, 0x00, 0x20, + 0xa0, 0xe3, 0xa1, 0xc1, 0x70, 0xe0, 0x20, 0x00, + 0x00, 0x3a, 0x21, 0xc4, 0x70, 0xe0, 0x0f, 0x00, + 0x00, 0x3a, 0x00, 0x04, 0xa0, 0xe1, 0xff, 0x24, + 0x82, 0xe3, 0x21, 0xc2, 0x70, 0xe0, 0x17, 0x00, + 0x00, 0x3a, 0x21, 0xc4, 0x70, 0xe0, 0x09, 0x00, + 0x00, 0x3a, 0x00, 0x04, 0xa0, 0xe1, 0x3c, 0x00, + 0x44, 0x07, 0x00, 0x00, 0xff, 0x28, 0x82, 0xe3, + 0x21, 0xc4, 0x70, 0xe0, 0x00, 0x04, 0xa0, 0x21, + 0xff, 0x2c, 0x82, 0x23, 0x21, 0xc2, 0x70, 0xe0, + 0x0e, 0x00, 0x00, 0x3a, 0x00, 0xc0, 0x70, 0xe2, + 0x50, 0x00, 0x00, 0x2a, 0x20, 0x04, 0xa0, 0x21, + 0xa1, 0xc3, 0x70, 0xe0, 0x80, 0x13, 0x41, 0x20, + 0x02, 0x20, 0xa2, 0xe0, 0x21, 0xc3, 0x70, 0xe0, + 0x00, 0x13, 0x41, 0x20, 0x02, 0x20, 0xa2, 0xe0, + 0x3c, 0x00, 0x80, 0x07, 0x00, 0x00, 0xa1, 0xc2, + 0x70, 0xe0, 0x80, 0x12, 0x41, 0x20, 0x02, 0x20, + 0xa2, 0xe0, 0x21, 0xc2, 0x70, 0xe0, 0x00, 0x12, + 0x41, 0x20, 0x02, 0x20, 0xa2, 0xe0, 0xa1, 0xc1, + 0x70, 0xe0, 0x80, 0x11, 0x41, 0x20, 0x02, 0x20, + 0xa2, 0xe0, 0x21, 0xc1, 0x70, 0xe0, 0x00, 0x11, + 0x41, 0x20, 0x02, 0x20, 0xa2, 0xe0, 0xa1, 0xc0, + 0x70, 0xe0, 0x80, 0x10, 0x41, 0x20, 0x02, 0x20, + 0xa2, 0xe0, 0x3c, 0x00, 0xbc, 0x07, 0x00, 0x00, + 0x01, 0xc0, 0x70, 0xe0, 0x00, 0x10, 0x41, 0x20, + 0x02, 0x20, 0xb2, 0xe0, 0xe5, 0xff, 0xff, 0x2a, + 0x02, 0x00, 0xa0, 0xe1, 0x1e, 0xff, 0x2f, 0xe1, + 0x78, 0x47, 0x00, 0x00, 0x0a, 0x10, 0x40, 0xe2, + 0x20, 0x01, 0x40, 0xe0, 0x20, 0x02, 0x80, 0xe0, + 0x20, 0x04, 0x80, 0xe0, 0x20, 0x08, 0x80, 0xe0, + 0xa0, 0x01, 0xa0, 0xe1, 0x00, 0x21, 0x80, 0xe0, + 0x82, 0x10, 0x51, 0xe0, 0x3c, 0x00, 0xf8, 0x07, + 0x00, 0x00, 0x01, 0x00, 0x80, 0x52, 0x0a, 0x10, + 0x81, 0x42, 0x1e, 0xff, 0x2f, 0xe1, 0x30, 0xb4, + 0x44, 0x1c, 0x81, 0x07, 0x08, 0xd0, 0x01, 0x78, + 0x01, 0x30, 0x00, 0x29, 0x02, 0xd1, 0x00, 0x1b, + 0x30, 0xbc, 0x70, 0x47, 0x81, 0x07, 0xf6, 0xd1, + 0x0b, 0x4a, 0xd5, 0x01, 0x02, 0xc8, 0x8b, 0x1a, + 0x8b, 0x43, 0x2b, 0x40, 0xfa, 0xd0, 0x00, 0x1b, + 0x0a, 0x06, 0x01, 0xd1, 0x03, 0x38, 0x3c, 0x00, + 0x34, 0x08, 0x00, 0x00, 0xef, 0xe7, 0x0a, 0x04, + 0x12, 0x0e, 0x01, 0xd1, 0x02, 0x38, 0xea, 0xe7, + 0x09, 0x02, 0x09, 0x0e, 0xe7, 0xd1, 0x01, 0x38, + 0xe5, 0xe7, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, + 0xf0, 0xb4, 0x03, 0x1c, 0x04, 0x1c, 0x0c, 0x43, + 0xa4, 0x07, 0x0c, 0xd1, 0x10, 0x4d, 0xef, 0x01, + 0x02, 0xe0, 0x04, 0x31, 0x04, 0x3a, 0x10, 0xc3, + 0x04, 0x2a, 0x04, 0xd3, 0x0c, 0x68, 0x66, 0x1b, + 0x3c, 0x00, 0x70, 0x08, 0x00, 0x00, 0xa6, 0x43, + 0x3e, 0x40, 0xf5, 0xd0, 0x00, 0x2a, 0x07, 0xd0, + 0x0c, 0x78, 0x01, 0x31, 0x1c, 0x70, 0x01, 0x33, + 0x00, 0x2c, 0x03, 0xd0, 0x01, 0x3a, 0xf7, 0xd1, + 0xf0, 0xbc, 0x70, 0x47, 0x01, 0x2a, 0xfb, 0xd9, + 0x51, 0x1e, 0x00, 0x22, 0x1a, 0x70, 0x01, 0x33, + 0x01, 0x39, 0xfb, 0xd1, 0xf4, 0xe7, 0x01, 0x01, + 0x01, 0x01, 0x78, 0x47, 0x00, 0x00, 0x02, 0x00, + 0xa0, 0xe3, 0x3c, 0x00, 0xac, 0x08, 0x00, 0x00, + 0x02, 0x10, 0xa0, 0xe3, 0x2e, 0xfe, 0xff, 0xea, + 0x1f, 0x40, 0x2d, 0xe9, 0x00, 0x00, 0x0f, 0xe1, + 0xc0, 0x00, 0x80, 0xe3, 0x00, 0xf0, 0x2f, 0xe1, + 0x81, 0x00, 0xa0, 0xe3, 0x02, 0x10, 0xa0, 0xe3, + 0x01, 0x20, 0x8f, 0xe2, 0x12, 0xff, 0x2f, 0xe1, + 0x00, 0xf0, 0xe6, 0xfc, 0x78, 0x47, 0x00, 0x00, + 0x1f, 0x40, 0xbd, 0xe8, 0xfe, 0xff, 0xff, 0xea, + 0x1f, 0x50, 0x2d, 0xe9, 0x3c, 0x00, 0xe8, 0x08, + 0x00, 0x00, 0x01, 0x00, 0x8f, 0xe2, 0x10, 0xff, + 0x2f, 0xe1, 0x00, 0xf0, 0x40, 0xfb, 0x78, 0x47, + 0x00, 0x00, 0x1f, 0x50, 0xbd, 0xe8, 0x04, 0xf0, + 0x5e, 0xe2, 0x1f, 0x50, 0x2d, 0xe9, 0x01, 0x00, + 0x8f, 0xe2, 0x10, 0xff, 0x2f, 0xe1, 0x00, 0xf0, + 0x18, 0xfb, 0x78, 0x47, 0x00, 0x00, 0x1f, 0x50, + 0xbd, 0xe8, 0x04, 0xf0, 0x5e, 0xe2, 0x00, 0xbd, + 0x01, 0xb5, 0x00, 0xa0, 0x00, 0x47, 0x3c, 0x00, + 0x24, 0x09, 0x00, 0x00, 0x00, 0x30, 0x0f, 0xe1, + 0xc0, 0x30, 0xc3, 0xe3, 0x03, 0xf0, 0x21, 0xe1, + 0x01, 0x00, 0x8f, 0xe2, 0x10, 0xff, 0x2f, 0xe1, + 0x01, 0xbd, 0x01, 0xb5, 0x00, 0xa0, 0x00, 0x47, + 0x00, 0x30, 0x0f, 0xe1, 0xc0, 0x30, 0x83, 0xe3, + 0x03, 0xf0, 0x21, 0xe1, 0x01, 0x00, 0x8f, 0xe2, + 0x10, 0xff, 0x2f, 0xe1, 0x01, 0xbd, 0x00, 0x00, + 0x18, 0x00, 0x9f, 0xe5, 0x04, 0x10, 0x90, 0xe4, + 0x3c, 0x00, 0x60, 0x09, 0x00, 0x00, 0x00, 0x00, + 0x51, 0xe3, 0x02, 0x00, 0x00, 0x0a, 0x04, 0x20, + 0x90, 0xe4, 0x00, 0x20, 0x81, 0xe5, 0xf9, 0xff, + 0xff, 0xea, 0x0e, 0xf0, 0xa0, 0xe1, 0x7c, 0x09, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, + 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0xd8, 0x03, + 0x00, 0x00, 0xd8, 0x03, 0x00, 0x00, 0xd8, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x9c, 0x09, 0x00, 0x00, + 0x44, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, + 0x44, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, + 0x00, 0x80, 0x01, 0x00, 0x10, 0x8e, 0x01, 0x00, + 0x10, 0x8e, 0x01, 0x00, 0x88, 0xf8, 0x01, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x10, 0x04, 0x00, + 0xc4, 0x33, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0e, 0x50, 0xa0, 0xe1, + 0x58, 0x40, 0x9f, 0xe5, 0x3c, 0x00, 0xd8, 0x09, + 0x00, 0x00, 0x04, 0x00, 0x94, 0xe4, 0x01, 0x00, + 0x50, 0xe3, 0x05, 0xf0, 0xa0, 0x01, 0x04, 0x10, + 0x94, 0xe4, 0x04, 0x20, 0x94, 0xe4, 0x03, 0x00, + 0x00, 0xeb, 0x04, 0x00, 0x94, 0xe4, 0x04, 0x10, + 0x94, 0xe4, 0x07, 0x00, 0x00, 0xeb, 0xf5, 0xff, + 0xff, 0xea, 0x01, 0x00, 0x50, 0xe1, 0x0e, 0xf0, + 0xa0, 0x01, 0x02, 0x00, 0x51, 0xe1, 0x04, 0x30, + 0x90, 0x14, 0x04, 0x30, 0x81, 0x14, 0x3c, 0x00, + 0x14, 0x0a, 0x00, 0x00, 0xfb, 0xff, 0xff, 0x1a, + 0x0e, 0xf0, 0xa0, 0xe1, 0x14, 0x20, 0x9f, 0xe5, + 0x00, 0x20, 0x92, 0xe5, 0x01, 0x00, 0x50, 0xe1, + 0x04, 0x20, 0x80, 0x14, 0xfc, 0xff, 0xff, 0x1a, + 0x0e, 0xf0, 0xa0, 0xe1, 0x80, 0x09, 0x00, 0x00, + 0xcc, 0x09, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, + 0x20, 0xe6, 0x01, 0x00, 0x13, 0x00, 0x00, 0x00, + 0x53, 0x56, 0x43, 0x5f, 0x00, 0x04, 0x00, 0x00, + 0x3c, 0x00, 0x50, 0x0a, 0x00, 0x00, 0x20, 0xee, + 0x01, 0x00, 0x12, 0x00, 0x00, 0x00, 0x49, 0x52, + 0x51, 0x5f, 0x00, 0x02, 0x00, 0x00, 0x20, 0xf2, + 0x01, 0x00, 0x11, 0x00, 0x00, 0x00, 0x46, 0x49, + 0x51, 0x5f, 0x80, 0x00, 0x00, 0x00, 0x20, 0xf4, + 0x01, 0x00, 0x17, 0x00, 0x00, 0x00, 0x41, 0x42, + 0x54, 0x5f, 0x00, 0x00, 0x00, 0x00, 0xa0, 0xf4, + 0x01, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x55, 0x4e, + 0x44, 0x5f, 0x3c, 0x00, 0x8c, 0x0a, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xa0, 0xf4, 0x01, 0x00, + 0x1f, 0x00, 0x00, 0x00, 0x55, 0x53, 0x52, 0x5f, + 0x01, 0x00, 0x00, 0x00, 0x0e, 0x50, 0xa0, 0xe1, + 0x00, 0x60, 0x0f, 0xe1, 0x8c, 0x40, 0x9f, 0xe5, + 0x04, 0x10, 0x94, 0xe4, 0x01, 0x00, 0x51, 0xe3, + 0x09, 0x00, 0x00, 0x0a, 0x04, 0x00, 0x94, 0xe4, + 0x01, 0x10, 0x80, 0xe0, 0x03, 0x10, 0xc1, 0xe3, + 0x04, 0x20, 0x94, 0xe4, 0x3c, 0x00, 0xc8, 0x0a, + 0x00, 0x00, 0xc0, 0x20, 0x82, 0xe3, 0x02, 0xf0, + 0x2f, 0xe1, 0x04, 0xd0, 0x41, 0xe2, 0x04, 0x20, + 0x94, 0xe4, 0x13, 0x00, 0x00, 0xeb, 0xf2, 0xff, + 0xff, 0xea, 0x06, 0xf0, 0x2f, 0xe1, 0x05, 0xf0, + 0xa0, 0xe1, 0x0e, 0x50, 0xa0, 0xe1, 0x00, 0x60, + 0x0f, 0xe1, 0x44, 0x40, 0x9f, 0xe5, 0x04, 0x10, + 0x94, 0xe4, 0x01, 0x00, 0x51, 0xe3, 0x08, 0x00, + 0x00, 0x0a, 0x04, 0x00, 0x94, 0xe4, 0x3c, 0x00, + 0x04, 0x0b, 0x00, 0x00, 0x01, 0x10, 0x80, 0xe0, + 0x03, 0x10, 0xc1, 0xe3, 0x04, 0x20, 0x94, 0xe4, + 0xc0, 0x20, 0x82, 0xe3, 0x02, 0xf0, 0x2f, 0xe1, + 0x04, 0xd0, 0x41, 0xe2, 0x04, 0x20, 0x94, 0xe4, + 0xf3, 0xff, 0xff, 0xea, 0x06, 0xf0, 0x2f, 0xe1, + 0x05, 0xf0, 0xa0, 0xe1, 0x01, 0x00, 0x50, 0xe1, + 0x04, 0x20, 0x80, 0x14, 0xfc, 0xff, 0xff, 0x1a, + 0x0e, 0xf0, 0xa0, 0xe1, 0x3c, 0x0a, 0x00, 0x00, + 0x3c, 0x00, 0x40, 0x0b, 0x00, 0x00, 0x01, 0x60, + 0xc0, 0x46, 0xc0, 0x46, 0xc0, 0x46, 0x70, 0x47, + 0x00, 0x00, 0x10, 0x1e, 0x10, 0xee, 0x02, 0x00, + 0x11, 0xe3, 0xfc, 0xff, 0xff, 0x1a, 0x10, 0x0e, + 0x01, 0xee, 0x10, 0x1e, 0x10, 0xee, 0x02, 0x00, + 0x11, 0xe3, 0xfc, 0xff, 0xff, 0x1a, 0x1e, 0xff, + 0x2f, 0xe1, 0x10, 0x1e, 0x10, 0xee, 0x01, 0x00, + 0x11, 0xe3, 0x03, 0x00, 0x00, 0x0a, 0x10, 0x1e, + 0x11, 0xee, 0x3c, 0x00, 0x7c, 0x0b, 0x00, 0x00, + 0x00, 0x10, 0x80, 0xe5, 0x01, 0x00, 0xa0, 0xe3, + 0x1e, 0xff, 0x2f, 0xe1, 0x00, 0x00, 0x20, 0xe0, + 0x1e, 0xff, 0x2f, 0xe1, 0x8d, 0x46, 0x97, 0x46, + 0x78, 0x47, 0xc0, 0x46, 0x78, 0xfd, 0xff, 0xea, + 0x10, 0xb5, 0x04, 0x1c, 0x03, 0x28, 0x01, 0xd9, + 0x00, 0xf0, 0xac, 0xfb, 0x0c, 0x48, 0x40, 0x68, + 0x00, 0x28, 0x00, 0xd0, 0x03, 0x24, 0x0b, 0x48, + 0x01, 0x68, 0x09, 0x48, 0x3c, 0x00, 0xb8, 0x0b, + 0x00, 0x00, 0x12, 0x30, 0x00, 0x29, 0x05, 0xd0, + 0x06, 0x21, 0x61, 0x43, 0x40, 0x5c, 0xc3, 0x00, + 0x18, 0x18, 0x04, 0xe0, 0x06, 0x21, 0x61, 0x43, + 0x40, 0x5c, 0x14, 0x23, 0x58, 0x43, 0x0a, 0x30, + 0x00, 0x06, 0x00, 0x0e, 0x10, 0xbd, 0xd4, 0x7a, + 0x01, 0x00, 0xa8, 0x69, 0x01, 0x00, 0x80, 0xb5, + 0x09, 0x4a, 0x09, 0x49, 0x03, 0x20, 0x00, 0xf0, + 0xf2, 0xf9, 0x08, 0x49, 0x08, 0x20, 0x3c, 0x00, + 0xf4, 0x0b, 0x00, 0x00, 0x08, 0x60, 0x48, 0x60, + 0x07, 0x49, 0x1d, 0x20, 0x01, 0xf0, 0xb2, 0xfc, + 0x06, 0x49, 0x1e, 0x20, 0x01, 0xf0, 0xae, 0xfc, + 0x80, 0xbd, 0x00, 0x00, 0x00, 0x6c, 0x01, 0x00, + 0x31, 0x27, 0x00, 0x00, 0x00, 0x10, 0x07, 0x00, + 0x29, 0x25, 0x00, 0x00, 0x31, 0x25, 0x00, 0x00, + 0x05, 0x49, 0x80, 0xb5, 0x08, 0x20, 0x88, 0x60, + 0x1d, 0x20, 0x01, 0xf0, 0xbf, 0xfc, 0x1e, 0x20, + 0x3c, 0x00, 0x30, 0x0c, 0x00, 0x00, 0x01, 0xf0, + 0xbc, 0xfc, 0x80, 0xbd, 0x00, 0x00, 0x00, 0x10, + 0x07, 0x00, 0x02, 0x1c, 0x08, 0x1c, 0xd1, 0x2a, + 0x80, 0xb5, 0x01, 0xd1, 0x05, 0xf0, 0x19, 0xfc, + 0x80, 0xbd, 0x03, 0x49, 0x80, 0xb5, 0x00, 0x20, + 0x08, 0x80, 0x05, 0x20, 0x05, 0xf0, 0xd5, 0xfb, + 0x80, 0xbd, 0xb0, 0x74, 0x01, 0x00, 0x80, 0xb5, + 0x54, 0x28, 0x01, 0xd1, 0x06, 0xf0, 0xcd, 0xf8, + 0x80, 0xbd, 0x3c, 0x00, 0x6c, 0x0c, 0x00, 0x00, + 0xb0, 0xb5, 0x10, 0x4d, 0x02, 0x1c, 0x01, 0x24, + 0x01, 0x2a, 0x0d, 0x48, 0x29, 0x68, 0x06, 0xd0, + 0xc4, 0x2a, 0x03, 0xd1, 0x6a, 0x68, 0x00, 0x2a, + 0x05, 0xd0, 0xac, 0x60, 0xb0, 0xbd, 0x0e, 0xf0, + 0x89, 0xfb, 0x6c, 0x60, 0x08, 0xe0, 0x00, 0x22, + 0xaa, 0x60, 0x6c, 0x60, 0x0e, 0xf0, 0x82, 0xfb, + 0x00, 0x21, 0x04, 0x20, 0x12, 0xf0, 0xc8, 0xfc, + 0x06, 0xf0, 0xd8, 0xf8, 0x3c, 0x00, 0xa8, 0x0c, + 0x00, 0x00, 0xb0, 0xbd, 0x00, 0x00, 0xc4, 0x60, + 0x01, 0x00, 0xbc, 0x74, 0x01, 0x00, 0x05, 0x4a, + 0x51, 0x69, 0x08, 0x1a, 0x11, 0x69, 0x09, 0x68, + 0x10, 0x31, 0x81, 0x42, 0x01, 0xd8, 0x50, 0x61, + 0x70, 0x47, 0x00, 0x20, 0x70, 0x47, 0x8c, 0x6e, + 0x01, 0x00, 0x01, 0x49, 0x49, 0x68, 0x40, 0x1a, + 0x70, 0x47, 0x8c, 0x6e, 0x01, 0x00, 0x01, 0x48, + 0x40, 0x69, 0x70, 0x47, 0x00, 0x00, 0x3c, 0x00, + 0xe4, 0x0c, 0x00, 0x00, 0x8c, 0x6e, 0x01, 0x00, + 0x02, 0x4a, 0x51, 0x69, 0x08, 0x18, 0x50, 0x61, + 0x70, 0x47, 0x00, 0x00, 0x8c, 0x6e, 0x01, 0x00, + 0x0e, 0x49, 0x0f, 0x48, 0x10, 0xb5, 0x19, 0x22, + 0x92, 0x01, 0x41, 0x60, 0x89, 0x18, 0xc1, 0x60, + 0x0b, 0x49, 0x00, 0x22, 0x0c, 0x31, 0x01, 0x60, + 0x0a, 0x49, 0x82, 0x60, 0x09, 0x68, 0x01, 0x23, + 0xdb, 0x03, 0xc9, 0x18, 0x08, 0x4c, 0x41, 0x61, + 0x3c, 0x00, 0x20, 0x0d, 0x00, 0x00, 0x21, 0x68, + 0x00, 0x29, 0x02, 0xd0, 0x07, 0x49, 0x01, 0x61, + 0x01, 0xe0, 0x00, 0xf0, 0x0c, 0xf8, 0x22, 0x60, + 0x10, 0xbd, 0x44, 0xdc, 0x01, 0x00, 0x8c, 0x6e, + 0x01, 0x00, 0xc8, 0x09, 0x00, 0x00, 0x34, 0x58, + 0x01, 0x00, 0xc4, 0x09, 0x00, 0x00, 0x01, 0x48, + 0x02, 0x49, 0x08, 0x61, 0x70, 0x47, 0xc8, 0x09, + 0x00, 0x00, 0x8c, 0x6e, 0x01, 0x00, 0x08, 0x28, + 0x05, 0xd2, 0x3c, 0x00, 0x5c, 0x0d, 0x00, 0x00, + 0x03, 0x4b, 0x80, 0x00, 0x19, 0x50, 0x02, 0x49, + 0x20, 0x31, 0x0a, 0x50, 0x70, 0x47, 0x00, 0x00, + 0x64, 0x6d, 0x01, 0x00, 0x70, 0xb5, 0x06, 0x1c, + 0x0d, 0x48, 0x0d, 0x1c, 0x00, 0x68, 0x14, 0x1c, + 0x00, 0x28, 0x03, 0xd1, 0x20, 0x1c, 0x00, 0xf0, + 0x09, 0xfc, 0x70, 0xbd, 0x28, 0x06, 0x01, 0xd5, + 0x00, 0xf0, 0x22, 0xfe, 0x22, 0x1c, 0x29, 0x1c, + 0x30, 0x1c, 0x08, 0xf0, 0x3c, 0x00, 0x98, 0x0d, + 0x00, 0x00, 0xdd, 0xfd, 0x01, 0x1c, 0x03, 0x48, + 0x54, 0x30, 0x43, 0x69, 0x32, 0x1c, 0xff, 0xf7, + 0x1b, 0xfb, 0x70, 0xbd, 0x00, 0x00, 0x50, 0x6d, + 0x01, 0x00, 0xf8, 0xb5, 0x06, 0x1c, 0x0d, 0x48, + 0x1f, 0x1c, 0x00, 0x68, 0x15, 0x1c, 0x0c, 0x1c, + 0x00, 0x28, 0x02, 0xd1, 0x28, 0x1c, 0x00, 0xf0, + 0xe8, 0xfb, 0x20, 0x06, 0x01, 0xd5, 0x00, 0xf0, + 0x02, 0xfe, 0x2a, 0x1c, 0x21, 0x1c, 0x3c, 0x00, + 0xd4, 0x0d, 0x00, 0x00, 0x30, 0x1c, 0x08, 0xf0, + 0xbd, 0xfd, 0x01, 0x1c, 0x03, 0x48, 0x54, 0x30, + 0x43, 0x69, 0x3a, 0x1c, 0xff, 0xf7, 0xfb, 0xfa, + 0xf8, 0xbd, 0x00, 0x00, 0x50, 0x6d, 0x01, 0x00, + 0xf8, 0xb5, 0xf1, 0x28, 0x4e, 0xd1, 0x2a, 0x48, + 0x69, 0x46, 0x82, 0x69, 0xff, 0xf7, 0xee, 0xfa, + 0x27, 0x49, 0x00, 0x26, 0x54, 0x39, 0xc8, 0x68, + 0x8b, 0x68, 0xc2, 0x00, 0x01, 0x30, 0xd5, 0x18, + 0x3c, 0x00, 0x10, 0x0e, 0x00, 0x00, 0x07, 0x28, + 0xc8, 0x60, 0x00, 0xd1, 0xce, 0x60, 0x22, 0x48, + 0x6c, 0x68, 0x00, 0x68, 0x00, 0x28, 0x03, 0xd0, + 0x00, 0x21, 0x20, 0x1c, 0x08, 0xf0, 0x3b, 0xfb, + 0x6e, 0x60, 0x25, 0x68, 0x20, 0x89, 0xa9, 0x78, + 0x02, 0x39, 0x40, 0x1a, 0xe9, 0x78, 0x40, 0x1a, + 0x20, 0x81, 0xa8, 0x78, 0x28, 0x18, 0x02, 0x38, + 0x20, 0x60, 0x6e, 0x78, 0x28, 0x78, 0x08, 0x28, + 0x17, 0xd2, 0x3c, 0x00, 0x4c, 0x0e, 0x00, 0x00, + 0x30, 0x06, 0x07, 0xd5, 0x27, 0x1c, 0x20, 0x1c, + 0x00, 0xf0, 0x7a, 0xfc, 0x04, 0x1c, 0x38, 0x1c, + 0x00, 0xf0, 0x9c, 0xfb, 0x28, 0x78, 0x0f, 0x49, + 0x40, 0x39, 0x80, 0x00, 0x0a, 0x58, 0x00, 0x2a, + 0x04, 0xd0, 0x31, 0x1c, 0x20, 0x1c, 0xff, 0xf7, + 0xb3, 0xfa, 0x08, 0xe0, 0x05, 0x21, 0x00, 0xe0, + 0x04, 0x21, 0x06, 0x20, 0x00, 0xf0, 0x10, 0xfa, + 0x20, 0x1c, 0x00, 0xf0, 0x3c, 0x00, 0x88, 0x0e, + 0x00, 0x00, 0x87, 0xfb, 0x30, 0x06, 0x01, 0xd5, + 0x00, 0xf0, 0xa1, 0xfd, 0xf8, 0xbd, 0x01, 0x21, + 0x06, 0x20, 0x00, 0xf0, 0x04, 0xfa, 0xf9, 0xe7, + 0x00, 0x00, 0xa4, 0x6d, 0x01, 0x00, 0xcc, 0x5c, + 0x01, 0x00, 0xf8, 0xb5, 0x1a, 0x4d, 0x19, 0x4f, + 0x01, 0x24, 0x54, 0x35, 0x29, 0x1c, 0x03, 0x20, + 0x7c, 0x60, 0x17, 0x4b, 0x18, 0x4a, 0x05, 0xf0, + 0xf4, 0xfb, 0x00, 0x28, 0x02, 0xd0, 0x3c, 0x00, + 0xc4, 0x0e, 0x00, 0x00, 0x00, 0x20, 0x38, 0x60, + 0x1f, 0xe0, 0x3c, 0x60, 0x07, 0x21, 0x28, 0x1c, + 0xea, 0x69, 0xff, 0xf7, 0x83, 0xfa, 0x38, 0x20, + 0x00, 0xf0, 0x80, 0xfc, 0x00, 0x24, 0xb8, 0x60, + 0xb8, 0x68, 0xe6, 0x00, 0x35, 0x18, 0x68, 0x46, + 0x02, 0x21, 0x00, 0xf0, 0x75, 0xfb, 0x28, 0x60, + 0x28, 0x1c, 0x00, 0xf0, 0xa5, 0xfd, 0xb8, 0x68, + 0x81, 0x59, 0x06, 0x48, 0x54, 0x30, 0x02, 0x6a, + 0x3c, 0x00, 0x00, 0x0f, 0x00, 0x00, 0xff, 0xf7, + 0x6c, 0xfa, 0x01, 0x34, 0x07, 0x2c, 0xea, 0xdb, + 0x00, 0x20, 0xf8, 0x60, 0x38, 0x61, 0xf8, 0xbd, + 0x00, 0x00, 0x50, 0x6d, 0x01, 0x00, 0x81, 0x9a, + 0x00, 0x00, 0x61, 0x9a, 0x00, 0x00, 0x05, 0x48, + 0x80, 0xb5, 0x00, 0x68, 0x00, 0x28, 0x05, 0xd0, + 0x03, 0x48, 0x54, 0x30, 0x42, 0x6a, 0x00, 0x21, + 0xff, 0xf7, 0x53, 0xfa, 0x80, 0xbd, 0x50, 0x6d, + 0x01, 0x00, 0x3c, 0x00, 0x3c, 0x0f, 0x00, 0x00, + 0x70, 0x47, 0x00, 0x00, 0x70, 0xb5, 0x0a, 0x4e, + 0x09, 0x4d, 0x08, 0x4c, 0x08, 0x3e, 0xa1, 0x69, + 0x00, 0x29, 0x07, 0xd0, 0x30, 0x68, 0x41, 0x60, + 0x00, 0x7b, 0x81, 0x00, 0x69, 0x58, 0xff, 0xf7, + 0x3e, 0xfa, 0xf4, 0xe7, 0x03, 0x49, 0x02, 0x20, + 0x08, 0x70, 0x70, 0xbd, 0x00, 0x10, 0x07, 0x00, + 0xe0, 0x7e, 0x01, 0x00, 0x00, 0x02, 0x07, 0x00, + 0x70, 0xb5, 0x0a, 0x4e, 0x3c, 0x00, 0x78, 0x0f, + 0x00, 0x00, 0x09, 0x4d, 0x08, 0x4c, 0x08, 0x3e, + 0xe1, 0x69, 0x00, 0x29, 0x07, 0xd0, 0x70, 0x68, + 0x41, 0x60, 0x00, 0x7b, 0x81, 0x00, 0x69, 0x58, + 0xff, 0xf7, 0x24, 0xfa, 0xf4, 0xe7, 0x03, 0x49, + 0x02, 0x20, 0x08, 0x70, 0x70, 0xbd, 0x00, 0x10, + 0x07, 0x00, 0xe0, 0x7e, 0x01, 0x00, 0x00, 0x02, + 0x07, 0x00, 0xb0, 0xb5, 0x09, 0x4d, 0x04, 0x1c, + 0x28, 0x1c, 0x20, 0x22, 0x40, 0x30, 0x3c, 0x00, + 0xb4, 0x0f, 0x00, 0x00, 0x05, 0x49, 0xff, 0xf7, + 0x9f, 0xfa, 0xe0, 0x68, 0xe8, 0x60, 0x20, 0x69, + 0x28, 0x61, 0xa0, 0x6a, 0xa8, 0x62, 0x60, 0x68, + 0x68, 0x60, 0xb0, 0xbd, 0x70, 0x52, 0x01, 0x00, + 0x00, 0x10, 0x07, 0x00, 0xf8, 0xb5, 0x00, 0x24, + 0x00, 0x23, 0x20, 0x28, 0x01, 0xdb, 0x01, 0x24, + 0x07, 0xe0, 0x08, 0x4e, 0x80, 0x00, 0x35, 0x58, + 0x07, 0x4f, 0xbd, 0x42, 0x00, 0xd0, 0x2b, 0x1c, + 0x3c, 0x00, 0xf0, 0x0f, 0x00, 0x00, 0x31, 0x50, + 0x13, 0x60, 0x00, 0x2c, 0x03, 0xd0, 0x21, 0x1c, + 0x82, 0x20, 0x00, 0xf0, 0x52, 0xf9, 0x20, 0x1c, + 0xf8, 0xbd, 0xe0, 0x7e, 0x01, 0x00, 0x75, 0x75, + 0x00, 0x00, 0xb0, 0xb5, 0x0b, 0x4d, 0x04, 0x1c, + 0x28, 0x68, 0x00, 0x28, 0x0f, 0xd0, 0x20, 0x1c, + 0x12, 0xf0, 0xb7, 0xfd, 0x00, 0x28, 0x0a, 0xd0, + 0x21, 0x7a, 0x28, 0x7a, 0x0a, 0x07, 0x00, 0x07, + 0x00, 0x0f, 0x3c, 0x00, 0x2c, 0x10, 0x00, 0x00, + 0x12, 0x0f, 0x90, 0x42, 0x29, 0x72, 0x01, 0xd0, + 0x01, 0x20, 0xb0, 0xbd, 0x00, 0x20, 0xb0, 0xbd, + 0x70, 0x78, 0x01, 0x00, 0xf0, 0xb5, 0x42, 0x4e, + 0x05, 0x1c, 0x30, 0x68, 0x85, 0xb0, 0x00, 0x28, + 0x63, 0xd0, 0x00, 0x24, 0x00, 0x20, 0x00, 0x2d, + 0x06, 0xd0, 0x69, 0x78, 0x18, 0x29, 0x03, 0xd1, + 0xe9, 0x79, 0x01, 0x29, 0x00, 0xd1, 0x01, 0x20, + 0x00, 0x28, 0x45, 0xd0, 0x3c, 0x00, 0x68, 0x10, + 0x00, 0x00, 0x00, 0x20, 0xb0, 0x72, 0x81, 0x00, + 0x4a, 0x19, 0x93, 0x7a, 0x59, 0x06, 0x89, 0x0f, + 0xdb, 0x06, 0x04, 0xd5, 0xb3, 0x7a, 0x01, 0x27, + 0x8f, 0x40, 0x3b, 0x43, 0xb3, 0x72, 0xd2, 0x7a, + 0x13, 0x09, 0x12, 0x07, 0x12, 0x0f, 0x93, 0x42, + 0x05, 0xd3, 0x01, 0x22, 0x8a, 0x40, 0x14, 0x43, + 0x01, 0xaa, 0x89, 0x00, 0x50, 0x50, 0x01, 0x30, + 0x04, 0x28, 0xe4, 0xdb, 0xb0, 0x7a, 0x3c, 0x00, + 0xa4, 0x10, 0x00, 0x00, 0x20, 0x40, 0x01, 0x07, + 0x0d, 0xd5, 0x41, 0x07, 0x09, 0xd5, 0xc1, 0x07, + 0x05, 0xd5, 0x81, 0x07, 0x01, 0xd5, 0x00, 0x24, + 0x05, 0xe0, 0x02, 0x99, 0x02, 0xe0, 0x01, 0x99, + 0x00, 0xe0, 0x03, 0x99, 0x04, 0x91, 0x41, 0x07, + 0x09, 0xd5, 0xc1, 0x07, 0x05, 0xd5, 0x81, 0x07, + 0x01, 0xd5, 0x00, 0x24, 0x03, 0xe0, 0x02, 0x99, + 0x00, 0xe0, 0x01, 0x99, 0x03, 0x91, 0xc1, 0x07, + 0x3c, 0x00, 0xe0, 0x10, 0x00, 0x00, 0x05, 0xd5, + 0x81, 0x07, 0x01, 0xd5, 0x00, 0x24, 0x01, 0xe0, + 0x02, 0x99, 0x01, 0x91, 0x80, 0x07, 0x01, 0xd5, + 0x00, 0x24, 0x22, 0xe0, 0x0f, 0x2c, 0x20, 0xd1, + 0x70, 0x68, 0x00, 0x28, 0x0b, 0xd0, 0x04, 0x9a, + 0x02, 0xab, 0x00, 0x92, 0x0a, 0xcb, 0x01, 0x9a, + 0x28, 0x1c, 0x0b, 0xf0, 0x8a, 0xfb, 0x00, 0x20, + 0x70, 0x60, 0x10, 0xe0, 0x17, 0xe0, 0x30, 0x7a, + 0x29, 0x7a, 0x3c, 0x00, 0x1c, 0x11, 0x00, 0x00, + 0x00, 0x07, 0x09, 0x07, 0x09, 0x0f, 0x00, 0x0f, + 0x88, 0x42, 0x07, 0xd0, 0x04, 0x9a, 0x02, 0xab, + 0x00, 0x92, 0x0a, 0xcb, 0x01, 0x9a, 0x28, 0x1c, + 0x0b, 0xf0, 0x76, 0xfb, 0x28, 0x7a, 0x30, 0x72, + 0x01, 0x20, 0x0f, 0x2c, 0x00, 0xd0, 0x00, 0x20, + 0x05, 0xb0, 0xf0, 0xbd, 0x01, 0x20, 0xfb, 0xe7, + 0x70, 0x78, 0x01, 0x00, 0x0d, 0x4a, 0x70, 0xb5, + 0x11, 0x68, 0x00, 0x20, 0x3c, 0x00, 0x58, 0x11, + 0x00, 0x00, 0x00, 0x29, 0x0e, 0xd0, 0x11, 0x7a, + 0x09, 0x06, 0x0b, 0xd5, 0x53, 0x7a, 0x94, 0x7a, + 0x03, 0x21, 0x01, 0x25, 0x2a, 0x1c, 0x8a, 0x40, + 0x1e, 0x1c, 0x16, 0x40, 0x03, 0xd0, 0x22, 0x40, + 0x01, 0xd1, 0x01, 0x20, 0x70, 0xbd, 0xff, 0x31, + 0x09, 0x06, 0x09, 0x16, 0xf2, 0xd5, 0x70, 0xbd, + 0x00, 0x00, 0x70, 0x78, 0x01, 0x00, 0x10, 0xb5, + 0x08, 0x4c, 0x20, 0x68, 0x00, 0x28, 0x3c, 0x00, + 0x94, 0x11, 0x00, 0x00, 0x04, 0xd0, 0x60, 0x68, + 0x00, 0x28, 0x01, 0xd1, 0x0b, 0xf0, 0xc0, 0xfb, + 0x00, 0x20, 0x00, 0x21, 0x00, 0x22, 0x07, 0xc4, + 0x0c, 0x3c, 0x01, 0x20, 0x60, 0x60, 0x10, 0xbd, + 0x70, 0x78, 0x01, 0x00, 0x01, 0x49, 0x01, 0x20, + 0x08, 0x60, 0x70, 0x47, 0x70, 0x78, 0x01, 0x00, + 0xf8, 0xb5, 0x0e, 0x4d, 0x04, 0x1c, 0x00, 0x20, + 0x68, 0x72, 0x20, 0x1c, 0x12, 0xf0, 0xde, 0xfc, + 0x3c, 0x00, 0xd0, 0x11, 0x00, 0x00, 0x00, 0x28, + 0x12, 0xd0, 0x00, 0x20, 0x03, 0x21, 0x01, 0x22, + 0x0f, 0x1a, 0x16, 0x1c, 0x23, 0x7a, 0xbe, 0x40, + 0x33, 0x40, 0x04, 0xd0, 0x6b, 0x7a, 0x16, 0x1c, + 0x86, 0x40, 0x33, 0x43, 0x6b, 0x72, 0x01, 0x30, + 0x00, 0x06, 0x00, 0x0e, 0x03, 0x28, 0xef, 0xd9, + 0xf8, 0xbd, 0x70, 0x78, 0x01, 0x00, 0x92, 0x00, + 0x51, 0x18, 0x8a, 0x7a, 0x12, 0x07, 0x12, 0x0f, + 0x02, 0x70, 0x3c, 0x00, 0x0c, 0x12, 0x00, 0x00, + 0xca, 0x7a, 0x12, 0x07, 0x12, 0x0f, 0x42, 0x70, + 0xca, 0x7a, 0x12, 0x09, 0x82, 0x70, 0x09, 0x7b, + 0x81, 0x80, 0x70, 0x47, 0x03, 0x4a, 0x0f, 0x21, + 0x52, 0x7a, 0x01, 0x20, 0x91, 0x43, 0x00, 0xd0, + 0x00, 0x20, 0x70, 0x47, 0x70, 0x78, 0x01, 0x00, + 0x40, 0x07, 0x05, 0x49, 0x40, 0x0f, 0x05, 0x4a, + 0x09, 0x56, 0x52, 0x7a, 0x01, 0x20, 0x0a, 0x40, + 0x00, 0xd1, 0x00, 0x20, 0x3c, 0x00, 0x48, 0x12, + 0x00, 0x00, 0x70, 0x47, 0x00, 0x00, 0x5e, 0x46, + 0x01, 0x00, 0x70, 0x78, 0x01, 0x00, 0x12, 0x4a, + 0x70, 0xb5, 0x53, 0x7a, 0x94, 0x7a, 0xff, 0x20, + 0x03, 0x21, 0x01, 0x25, 0x2a, 0x1c, 0x8a, 0x40, + 0x1e, 0x1c, 0x16, 0x40, 0x14, 0xd0, 0x22, 0x40, + 0x12, 0xd1, 0x08, 0x06, 0x00, 0x0e, 0x07, 0xd0, + 0x01, 0x28, 0x07, 0xd0, 0x02, 0x28, 0x07, 0xd0, + 0x03, 0x28, 0x07, 0xd1, 0x07, 0x20, 0x3c, 0x00, + 0x84, 0x12, 0x00, 0x00, 0x70, 0xbd, 0x03, 0x20, + 0x70, 0xbd, 0x01, 0x20, 0x70, 0xbd, 0x05, 0x20, + 0x70, 0xbd, 0xff, 0x20, 0x70, 0xbd, 0xff, 0x31, + 0x09, 0x06, 0x09, 0x16, 0xe1, 0xd5, 0x70, 0xbd, + 0x70, 0x78, 0x01, 0x00, 0xf8, 0xb5, 0x04, 0x1c, + 0x13, 0x48, 0x0d, 0x1c, 0x81, 0x68, 0x00, 0x29, + 0x05, 0xd0, 0x01, 0x7b, 0x00, 0x29, 0x01, 0xd1, + 0x04, 0x73, 0x45, 0x73, 0xf8, 0xbd, 0x0f, 0x4e, + 0x3c, 0x00, 0xc0, 0x12, 0x00, 0x00, 0x31, 0x1c, + 0x20, 0x31, 0x8a, 0x79, 0x00, 0xab, 0x1a, 0x70, + 0xc9, 0x79, 0x59, 0x70, 0x42, 0x68, 0x00, 0x2a, + 0x07, 0xd0, 0x20, 0x02, 0x28, 0x43, 0x01, 0x1c, + 0x00, 0x20, 0xff, 0xf7, 0x7e, 0xf8, 0x00, 0x28, + 0x04, 0xd1, 0x2a, 0x1c, 0x21, 0x1c, 0x00, 0x20, + 0x11, 0xf0, 0x0f, 0xf8, 0x00, 0xab, 0x18, 0x88, + 0xf0, 0x84, 0xe2, 0xe7, 0x00, 0x00, 0x88, 0x5a, + 0x01, 0x00, 0x3c, 0x00, 0xfc, 0x12, 0x00, 0x00, + 0x00, 0x10, 0x07, 0x00, 0x80, 0xb5, 0x01, 0x21, + 0x81, 0x20, 0xff, 0xf7, 0xcd, 0xff, 0x80, 0xbd, + 0x01, 0x49, 0x01, 0x20, 0x88, 0x60, 0x70, 0x47, + 0x88, 0x5a, 0x01, 0x00, 0x05, 0x49, 0x80, 0xb5, + 0x00, 0x20, 0x88, 0x60, 0x08, 0x7b, 0x00, 0x28, + 0x02, 0xd0, 0x49, 0x7b, 0xff, 0xf7, 0xbc, 0xff, + 0x80, 0xbd, 0x00, 0x00, 0x88, 0x5a, 0x01, 0x00, + 0x02, 0x4a, 0x01, 0x1c, 0x3c, 0x00, 0x38, 0x13, + 0x00, 0x00, 0x50, 0x68, 0x51, 0x60, 0x70, 0x47, + 0x00, 0x00, 0x88, 0x5a, 0x01, 0x00, 0x10, 0xb5, + 0x0c, 0x1c, 0x07, 0xf0, 0x64, 0xfa, 0x04, 0x61, + 0x00, 0x20, 0x10, 0xbd, 0x00, 0x00, 0xff, 0xb5, + 0x0e, 0x1c, 0x1f, 0x1c, 0x38, 0x20, 0x81, 0xb0, + 0x00, 0xf0, 0x3d, 0xfa, 0x1d, 0x49, 0x04, 0x1c, + 0x48, 0x69, 0x00, 0x28, 0x01, 0xd1, 0x4c, 0x61, + 0x00, 0xe0, 0x04, 0x60, 0x30, 0x01, 0x3c, 0x00, + 0x74, 0x13, 0x00, 0x00, 0x00, 0x90, 0x00, 0x04, + 0x00, 0x0c, 0x00, 0xf0, 0x15, 0xfa, 0x05, 0x1c, + 0x00, 0x99, 0xff, 0xf7, 0x8b, 0xf8, 0x00, 0x20, + 0x73, 0x1e, 0x04, 0xe0, 0x01, 0x01, 0x4a, 0x19, + 0x10, 0x32, 0x6a, 0x50, 0x01, 0x30, 0x98, 0x42, + 0xf8, 0xd3, 0x00, 0x01, 0x2d, 0x50, 0x38, 0x21, + 0x20, 0x1c, 0xff, 0xf7, 0x7b, 0xf8, 0xa5, 0x60, + 0x65, 0x60, 0xe6, 0x85, 0x0c, 0x20, 0x60, 0x86, + 0x3c, 0x00, 0xb0, 0x13, 0x00, 0x00, 0xaf, 0x20, + 0x80, 0x01, 0xe0, 0x61, 0x0e, 0x20, 0xe0, 0x86, + 0x00, 0x20, 0x20, 0x60, 0x01, 0x98, 0xe0, 0x60, + 0x38, 0x68, 0x60, 0x61, 0x03, 0x99, 0x04, 0x48, + 0x08, 0x60, 0x04, 0x48, 0x38, 0x60, 0x05, 0xb0, + 0x00, 0x20, 0xf0, 0xbd, 0x00, 0x00, 0xfc, 0x5a, + 0x01, 0x00, 0xdd, 0x15, 0x01, 0x00, 0xfd, 0x16, + 0x01, 0x00, 0x02, 0x1c, 0x08, 0x1c, 0xf0, 0x2a, + 0x80, 0xb5, 0x3c, 0x00, 0xec, 0x13, 0x00, 0x00, + 0x04, 0xd0, 0xf1, 0x2a, 0x07, 0xd1, 0x06, 0xf0, + 0x09, 0xfb, 0x80, 0xbd, 0x07, 0xf0, 0x0c, 0xfa, + 0x0d, 0xf0, 0xa8, 0xfa, 0x80, 0xbd, 0x01, 0x21, + 0x02, 0x20, 0xff, 0xf7, 0x4d, 0xff, 0x80, 0xbd, + 0x01, 0x49, 0x00, 0x20, 0x48, 0x61, 0x70, 0x47, + 0xfc, 0x5a, 0x01, 0x00, 0x00, 0x28, 0x02, 0xd0, + 0x00, 0x29, 0x00, 0xd0, 0xc1, 0x60, 0x70, 0x47, + 0xf8, 0xb5, 0x17, 0x1c, 0x3c, 0x00, 0x28, 0x14, + 0x00, 0x00, 0x0e, 0x1c, 0x05, 0x1c, 0x1c, 0x1c, + 0x1c, 0x30, 0x07, 0xf0, 0xc8, 0xf8, 0x01, 0x69, + 0x42, 0x69, 0x80, 0x68, 0x89, 0x19, 0x89, 0x1a, + 0x81, 0x42, 0x06, 0xd2, 0x23, 0x1c, 0x3a, 0x1c, + 0x31, 0x1c, 0x28, 0x1c, 0x00, 0xf0, 0x05, 0xf8, + 0xf8, 0xbd, 0x00, 0x20, 0x38, 0x60, 0x20, 0x60, + 0xfa, 0xe7, 0xff, 0xb5, 0x85, 0xb0, 0x05, 0x98, + 0x01, 0x27, 0x0e, 0x1c, 0x1c, 0x30, 0x3c, 0x00, + 0x64, 0x14, 0x00, 0x00, 0x07, 0xf0, 0xae, 0xf8, + 0x04, 0x1c, 0x80, 0x88, 0x04, 0x30, 0x03, 0x90, + 0x2c, 0x48, 0x04, 0x90, 0x80, 0x79, 0x02, 0x90, + 0xa0, 0x69, 0xb0, 0x42, 0x17, 0xd2, 0x35, 0x1a, + 0x11, 0xe0, 0x03, 0x98, 0xff, 0xf7, 0x16, 0xfc, + 0x00, 0x28, 0x06, 0xd1, 0x01, 0x21, 0x8e, 0x20, + 0xff, 0xf7, 0x08, 0xff, 0x00, 0x25, 0x00, 0x27, + 0x05, 0xe0, 0x21, 0x68, 0x01, 0x60, 0x20, 0x60, + 0x3c, 0x00, 0xa0, 0x14, 0x00, 0x00, 0xa0, 0x69, + 0x01, 0x30, 0xa0, 0x61, 0x01, 0x3d, 0xeb, 0xd2, + 0x00, 0x2f, 0x35, 0xd0, 0xa0, 0x69, 0x80, 0x1b, + 0xa0, 0x61, 0x20, 0x69, 0x80, 0x19, 0x20, 0x61, + 0x61, 0x69, 0x40, 0x1a, 0xe1, 0x68, 0x88, 0x42, + 0x03, 0xd9, 0x07, 0x21, 0x8e, 0x20, 0xff, 0xf7, + 0xec, 0xfe, 0x25, 0x68, 0x2f, 0x1c, 0x70, 0x1e, + 0x01, 0x95, 0x00, 0xe0, 0x3f, 0x68, 0x01, 0x38, + 0xfc, 0xd2, 0x3c, 0x00, 0xdc, 0x14, 0x00, 0x00, + 0x38, 0x68, 0x20, 0x60, 0x02, 0x98, 0x04, 0x99, + 0x88, 0x71, 0x2e, 0x68, 0x2c, 0x60, 0x32, 0x1d, + 0x00, 0x92, 0x29, 0x1c, 0x20, 0x31, 0x01, 0x22, + 0x28, 0x1d, 0x05, 0x9b, 0x08, 0xf0, 0x7a, 0xfc, + 0xbd, 0x42, 0x01, 0xd0, 0x35, 0x1c, 0xf0, 0xe7, + 0x00, 0x20, 0x38, 0x61, 0x01, 0x98, 0x07, 0x99, + 0x04, 0x30, 0x08, 0x60, 0x08, 0x98, 0x04, 0x37, + 0x07, 0x60, 0x09, 0xb0, 0x3c, 0x00, 0x18, 0x15, + 0x00, 0x00, 0xf0, 0xbd, 0x02, 0x98, 0x04, 0x99, + 0x88, 0x71, 0xf9, 0xe7, 0x00, 0x00, 0x20, 0x10, + 0x07, 0x00, 0x38, 0xb5, 0x04, 0x1c, 0x15, 0x1c, + 0x00, 0x20, 0x0c, 0x60, 0x09, 0xe0, 0xe2, 0x68, + 0x20, 0x1c, 0x00, 0x92, 0xa3, 0x8a, 0x21, 0x68, + 0xa2, 0x69, 0x08, 0xf0, 0x56, 0xfc, 0x20, 0x1c, + 0xe4, 0x68, 0x00, 0x2c, 0xf3, 0xd1, 0x28, 0x60, + 0x38, 0xbd, 0x80, 0xb5, 0x0c, 0xe0, 0x3c, 0x00, + 0x54, 0x15, 0x00, 0x00, 0xc2, 0x68, 0x8a, 0x42, + 0x08, 0xd1, 0x00, 0x21, 0xc1, 0x60, 0x00, 0x28, + 0x03, 0xd1, 0x06, 0x21, 0x8e, 0x20, 0xff, 0xf7, + 0x9d, 0xfe, 0x80, 0xbd, 0x10, 0x1c, 0x00, 0x28, + 0xf7, 0xd0, 0xef, 0xe7, 0x10, 0xb5, 0x04, 0x1c, + 0x0c, 0xd0, 0xa0, 0x69, 0x00, 0x28, 0x06, 0xd1, + 0x20, 0x69, 0x00, 0x28, 0x03, 0xd0, 0x06, 0xf0, + 0xf7, 0xfd, 0x00, 0x20, 0x20, 0x61, 0x20, 0x1c, + 0x3c, 0x00, 0x90, 0x15, 0x00, 0x00, 0x06, 0xf0, + 0xf2, 0xfd, 0x10, 0xbd, 0x00, 0x00, 0x10, 0xb5, + 0x00, 0x28, 0x09, 0xd0, 0xc4, 0x68, 0x03, 0xe0, + 0xff, 0xf7, 0xe7, 0xff, 0x20, 0x1c, 0xf9, 0xe7, + 0x00, 0x2c, 0xf9, 0xd1, 0xff, 0xf7, 0xe1, 0xff, + 0x10, 0xbd, 0x01, 0x1c, 0x00, 0x20, 0x04, 0xe0, + 0x0a, 0x89, 0xc9, 0x68, 0x10, 0x18, 0x00, 0x04, + 0x00, 0x0c, 0x00, 0x29, 0xf8, 0xd1, 0x70, 0x47, + 0x00, 0x00, 0x3c, 0x00, 0xcc, 0x15, 0x00, 0x00, + 0x00, 0xe0, 0x08, 0x1c, 0xc1, 0x68, 0x00, 0x29, + 0xfb, 0xd1, 0x70, 0x47, 0xf8, 0xb5, 0x06, 0x1c, + 0x0c, 0x1c, 0x1c, 0x20, 0x00, 0xf0, 0x68, 0xfa, + 0x05, 0x1c, 0x00, 0x2e, 0x01, 0xd1, 0x00, 0x2c, + 0x02, 0xd1, 0x30, 0x1c, 0x01, 0x21, 0x03, 0xe0, + 0x20, 0x1c, 0x00, 0xf0, 0x5d, 0xfa, 0x00, 0x21, + 0x00, 0x22, 0x00, 0x92, 0x0a, 0x1c, 0x01, 0x1c, + 0x23, 0x1c, 0x28, 0x1c, 0x3c, 0x00, 0x08, 0x16, + 0x00, 0x00, 0x08, 0xf0, 0xf2, 0xfb, 0x28, 0x1c, + 0xf8, 0xbd, 0xb0, 0xb5, 0x03, 0x32, 0x92, 0x08, + 0x92, 0x00, 0x14, 0x04, 0x24, 0x0c, 0x09, 0x19, + 0x1d, 0x1c, 0xc9, 0x18, 0x09, 0x04, 0x09, 0x0c, + 0xff, 0xf7, 0xd7, 0xff, 0x01, 0x89, 0x02, 0x68, + 0x12, 0x19, 0x09, 0x1b, 0x49, 0x1b, 0x02, 0x60, + 0x01, 0x81, 0xb0, 0xbd, 0x00, 0x00, 0xf8, 0xb5, + 0x0a, 0x4c, 0xa0, 0x21, 0x20, 0x1c, 0x3c, 0x00, + 0x44, 0x16, 0x00, 0x00, 0xfe, 0xf7, 0x2a, 0xff, + 0x00, 0x20, 0x26, 0x1c, 0xa0, 0x36, 0x07, 0x4d, + 0x07, 0xe0, 0x0c, 0x21, 0x41, 0x43, 0x49, 0x19, + 0x0e, 0xc9, 0x27, 0x1d, 0x0e, 0xc7, 0x20, 0x34, + 0x01, 0x30, 0xa6, 0x42, 0xf5, 0xd1, 0xf8, 0xbd, + 0xd0, 0x5c, 0x01, 0x00, 0xc8, 0x3f, 0x01, 0x00, + 0xf7, 0xb5, 0xc4, 0x68, 0x06, 0x1c, 0x00, 0x25, + 0x00, 0x2c, 0x82, 0xb0, 0x23, 0xd0, 0x20, 0x89, + 0x3c, 0x00, 0x80, 0x16, 0x00, 0x00, 0x90, 0x42, + 0x20, 0xd3, 0xe1, 0x68, 0x87, 0x1a, 0x01, 0x91, + 0x00, 0x21, 0xe1, 0x60, 0x03, 0x99, 0x00, 0x20, + 0xff, 0xf7, 0xa1, 0xff, 0x05, 0x1c, 0x20, 0x89, + 0xc0, 0x1b, 0x20, 0x81, 0x2a, 0x68, 0x03, 0x99, + 0x30, 0x1c, 0x00, 0xf0, 0x16, 0xf8, 0x20, 0x89, + 0xc0, 0x19, 0x20, 0x81, 0x01, 0x99, 0x20, 0x1c, + 0xff, 0xf7, 0xb1, 0xfe, 0x21, 0x1c, 0x28, 0x1c, + 0xff, 0xf7, 0x3c, 0x00, 0xbc, 0x16, 0x00, 0x00, + 0xad, 0xfe, 0x29, 0x1c, 0x30, 0x1c, 0xff, 0xf7, + 0xa9, 0xfe, 0x01, 0x20, 0x00, 0x2d, 0x00, 0xd1, + 0x00, 0x20, 0x05, 0xb0, 0xf0, 0xbd, 0x00, 0x00, + 0xf7, 0xb5, 0x04, 0x1c, 0x0e, 0x1c, 0x00, 0x20, + 0x01, 0xe0, 0x20, 0x1c, 0x0c, 0x1c, 0xe1, 0x68, + 0x00, 0x29, 0xfa, 0xd1, 0x27, 0x89, 0xb7, 0x42, + 0x0a, 0xd3, 0xb8, 0x1b, 0x00, 0x04, 0x00, 0x0c, + 0x20, 0x81, 0x21, 0x68, 0x3c, 0x00, 0xf8, 0x16, + 0x00, 0x00, 0x09, 0x18, 0x02, 0x98, 0x32, 0x1c, + 0xfe, 0xf7, 0xfb, 0xfe, 0xfe, 0xbd, 0xf1, 0x1b, + 0x0d, 0x04, 0x2d, 0x0c, 0x00, 0x28, 0x19, 0xd0, + 0x01, 0x89, 0xa9, 0x42, 0x16, 0xd3, 0x49, 0x1b, + 0x09, 0x04, 0x09, 0x0c, 0x01, 0x81, 0x00, 0x68, + 0x41, 0x18, 0x02, 0x98, 0x2a, 0x1c, 0xfe, 0xf7, + 0xe8, 0xfe, 0x21, 0x68, 0x02, 0x98, 0x72, 0x1b, + 0x40, 0x19, 0xfe, 0xf7, 0xe2, 0xfe, 0x3c, 0x00, + 0x34, 0x17, 0x00, 0x00, 0x20, 0x89, 0xc0, 0x1b, + 0x20, 0x81, 0x20, 0x68, 0xc0, 0x19, 0x20, 0x60, + 0xdf, 0xe7, 0x03, 0x21, 0x8e, 0x20, 0xff, 0xf7, + 0xad, 0xfd, 0xda, 0xe7, 0xf8, 0xb5, 0x04, 0x1c, + 0x00, 0x26, 0x13, 0xe0, 0x21, 0x89, 0x00, 0x20, + 0xff, 0xf7, 0x3e, 0xff, 0x05, 0x1c, 0x22, 0x89, + 0x21, 0x68, 0x00, 0x68, 0xfe, 0xf7, 0xc8, 0xfe, + 0x00, 0x2e, 0x01, 0xd1, 0x2e, 0x1c, 0x03, 0xe0, + 0x3c, 0x00, 0x70, 0x17, 0x00, 0x00, 0x29, 0x1c, + 0x38, 0x1c, 0xff, 0xf7, 0x50, 0xfe, 0xe4, 0x68, + 0x2f, 0x1c, 0x00, 0x2c, 0xe9, 0xd1, 0x30, 0x1c, + 0xf8, 0xbd, 0xb0, 0xb5, 0x04, 0x1c, 0x00, 0x89, + 0x40, 0x1a, 0x05, 0x04, 0x20, 0x68, 0x2d, 0x0c, + 0x40, 0x18, 0x29, 0x1c, 0xff, 0xf7, 0x1f, 0xff, + 0x21, 0x89, 0x49, 0x1b, 0x21, 0x81, 0xe1, 0x68, + 0xc1, 0x60, 0xe0, 0x60, 0xb0, 0xbd, 0x10, 0xb5, + 0x03, 0x30, 0x3c, 0x00, 0xac, 0x17, 0x00, 0x00, + 0x09, 0x4a, 0x81, 0x08, 0x10, 0x68, 0x3d, 0x24, + 0x08, 0x4b, 0x64, 0x01, 0x89, 0x00, 0x09, 0x18, + 0x1b, 0x19, 0x99, 0x42, 0x01, 0xd8, 0x11, 0x60, + 0x10, 0xbd, 0x0f, 0x21, 0x80, 0x20, 0xff, 0xf7, + 0x6b, 0xfd, 0x00, 0x20, 0x10, 0xbd, 0x00, 0x00, + 0xb4, 0xcf, 0x01, 0x00, 0x14, 0xc8, 0x01, 0x00, + 0x10, 0xb5, 0x11, 0xf0, 0x61, 0xff, 0x04, 0x1c, + 0x03, 0xd1, 0x0d, 0x21, 0x3c, 0x00, 0xe8, 0x17, + 0x00, 0x00, 0x80, 0x20, 0xff, 0xf7, 0x5b, 0xfd, + 0x20, 0x1c, 0x10, 0xbd, 0x00, 0x00, 0xb0, 0xb5, + 0x01, 0x1f, 0x0b, 0x68, 0x0d, 0x48, 0x00, 0x22, + 0x83, 0x42, 0x04, 0xd0, 0x01, 0x32, 0x10, 0x30, + 0x03, 0x2a, 0xf9, 0xd3, 0x01, 0xe0, 0x03, 0x2a, + 0x06, 0xd3, 0x09, 0x24, 0x21, 0x1c, 0x80, 0x20, + 0xff, 0xf7, 0x45, 0xfd, 0x20, 0x1c, 0xb0, 0xbd, + 0x05, 0x4b, 0x00, 0x24, 0x9a, 0x79, 0x3c, 0x00, + 0x24, 0x18, 0x00, 0x00, 0x85, 0x68, 0x0d, 0x60, + 0x81, 0x60, 0x9a, 0x71, 0xf5, 0xe7, 0x00, 0x00, + 0x20, 0x57, 0x01, 0x00, 0x20, 0x10, 0x07, 0x00, + 0xb0, 0xb5, 0x00, 0x21, 0x10, 0x4a, 0x00, 0x23, + 0xd4, 0x68, 0x84, 0x42, 0x04, 0xd2, 0x01, 0x33, + 0x10, 0x32, 0x03, 0x2b, 0xf8, 0xd3, 0x01, 0xe0, + 0x03, 0x2b, 0x01, 0xd3, 0x04, 0x21, 0x0e, 0xe0, + 0x0a, 0x4c, 0xa3, 0x79, 0x90, 0x68, 0x00, 0x28, + 0x3c, 0x00, 0x60, 0x18, 0x00, 0x00, 0x02, 0xd1, + 0xa3, 0x71, 0x03, 0x21, 0x06, 0xe0, 0x05, 0x68, + 0x95, 0x60, 0xa3, 0x71, 0x00, 0x29, 0x01, 0xd1, + 0x04, 0xc0, 0xb0, 0xbd, 0x80, 0x20, 0xff, 0xf7, + 0x14, 0xfd, 0x00, 0x20, 0xb0, 0xbd, 0x20, 0x57, + 0x01, 0x00, 0x20, 0x10, 0x07, 0x00, 0xa0, 0x30, + 0x00, 0x8a, 0x40, 0x07, 0x40, 0x0f, 0x08, 0x28, + 0x0f, 0xd2, 0x01, 0xa3, 0x1b, 0x5c, 0x5b, 0x00, + 0x9f, 0x44, 0x3c, 0x00, 0x9c, 0x18, 0x00, 0x00, + 0x05, 0x03, 0x03, 0x05, 0x07, 0x07, 0x09, 0x09, + 0x01, 0x20, 0x70, 0x47, 0x00, 0x20, 0x70, 0x47, + 0x02, 0x20, 0x70, 0x47, 0x03, 0x20, 0x70, 0x47, + 0x04, 0x20, 0x70, 0x47, 0xb0, 0xb5, 0x10, 0x4d, + 0x68, 0x69, 0x00, 0x28, 0x07, 0xd0, 0x0e, 0x49, + 0x00, 0x22, 0x2c, 0x31, 0x03, 0xc9, 0x01, 0x43, + 0x03, 0x20, 0x06, 0xf0, 0xcf, 0xff, 0x0b, 0x4c, + 0x00, 0x22, 0x03, 0xcc, 0x3c, 0x00, 0xd8, 0x18, + 0x00, 0x00, 0x08, 0x3c, 0x01, 0x43, 0x03, 0x20, + 0x06, 0xf0, 0xaf, 0xff, 0x03, 0xcc, 0x08, 0x43, + 0x07, 0x49, 0x4a, 0x68, 0x02, 0x43, 0x4a, 0x60, + 0x8a, 0x68, 0x10, 0x43, 0x88, 0x60, 0x01, 0x20, + 0x68, 0x61, 0xb0, 0xbd, 0x00, 0x00, 0x64, 0x73, + 0x01, 0x00, 0xb0, 0x58, 0x01, 0x00, 0x10, 0x00, + 0x07, 0x00, 0xb0, 0xb5, 0x0c, 0x1c, 0x0f, 0xf0, + 0xa8, 0xfa, 0x05, 0x4d, 0xe8, 0x6a, 0x3c, 0x00, + 0x14, 0x19, 0x00, 0x00, 0x00, 0x28, 0x06, 0xd1, + 0x00, 0x2c, 0x04, 0xd0, 0x20, 0x1c, 0x0f, 0xf0, + 0xb7, 0xfd, 0x01, 0x20, 0x28, 0x70, 0xb0, 0xbd, + 0xf4, 0x6e, 0x01, 0x00, 0x05, 0x49, 0x80, 0xb5, + 0x88, 0x6a, 0x00, 0x28, 0x04, 0xda, 0x00, 0x20, + 0x88, 0x62, 0x01, 0x21, 0x0d, 0xf0, 0x42, 0xfd, + 0x80, 0xbd, 0x00, 0x00, 0xac, 0x7e, 0x01, 0x00, + 0xf8, 0xb5, 0x1e, 0x4d, 0x04, 0x1c, 0x00, 0x20, + 0x3c, 0x00, 0x50, 0x19, 0x00, 0x00, 0x68, 0x62, + 0xa8, 0x70, 0x1c, 0x48, 0x00, 0x78, 0xc0, 0x07, + 0x22, 0xd5, 0xb8, 0x20, 0x03, 0x59, 0x1a, 0x48, + 0x00, 0x78, 0x0e, 0x28, 0x09, 0xd1, 0x0a, 0x1c, + 0x80, 0x32, 0x06, 0xd0, 0x18, 0x4e, 0x0d, 0x20, + 0x32, 0x5c, 0x8a, 0x42, 0x01, 0xdd, 0x01, 0x38, + 0xfa, 0xd1, 0x59, 0x1e, 0x0b, 0x06, 0x1b, 0x0e, + 0xab, 0x70, 0xab, 0x62, 0x0e, 0x28, 0x0b, 0xd2, + 0x08, 0xe0, 0x3c, 0x00, 0x8c, 0x19, 0x00, 0x00, + 0x62, 0x18, 0xb0, 0x32, 0x12, 0x7b, 0x82, 0x42, + 0x02, 0xd8, 0x58, 0x1a, 0xa8, 0x62, 0x02, 0xe0, + 0x01, 0x39, 0x00, 0x29, 0xf4, 0xda, 0x0e, 0xf0, + 0x35, 0xf9, 0x00, 0x90, 0x00, 0xab, 0x18, 0x78, + 0x59, 0x78, 0x81, 0x42, 0x00, 0xd9, 0x58, 0x78, + 0xed, 0x30, 0xe8, 0x70, 0x01, 0x21, 0x20, 0x1c, + 0x0d, 0xf0, 0x02, 0xfd, 0xf8, 0xbd, 0x00, 0x00, + 0xac, 0x7e, 0x01, 0x00, 0x3c, 0x00, 0xc8, 0x19, + 0x00, 0x00, 0x1d, 0x75, 0x01, 0x00, 0x11, 0x67, + 0x01, 0x00, 0xc7, 0x52, 0x01, 0x00, 0x0e, 0x49, + 0x10, 0xb5, 0x08, 0x69, 0x8b, 0x68, 0xc2, 0x00, + 0xd4, 0x18, 0x62, 0x68, 0x00, 0x2a, 0x0f, 0xd1, + 0x01, 0x30, 0x08, 0x61, 0x07, 0x28, 0x01, 0xd1, + 0x00, 0x20, 0x08, 0x61, 0x20, 0x1c, 0x00, 0xf0, + 0x24, 0xf8, 0x05, 0x48, 0x21, 0x68, 0x54, 0x30, + 0x02, 0x6a, 0xfe, 0xf7, 0xec, 0xfc, 0x3c, 0x00, + 0x04, 0x1a, 0x00, 0x00, 0x10, 0xbd, 0x06, 0x21, + 0x06, 0x20, 0xff, 0xf7, 0x4b, 0xfc, 0x10, 0xbd, + 0x50, 0x6d, 0x01, 0x00, 0x08, 0x49, 0x09, 0x79, + 0xc9, 0x07, 0x08, 0x4a, 0x08, 0xd4, 0x00, 0xe0, + 0x08, 0x1c, 0xc1, 0x68, 0x00, 0x29, 0xfb, 0xd1, + 0x01, 0x89, 0x04, 0x31, 0x01, 0x81, 0x00, 0xe0, + 0x00, 0x20, 0xd0, 0x62, 0x70, 0x47, 0x00, 0x00, + 0x60, 0x80, 0x07, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x3c, 0x00, 0x40, 0x1a, 0x00, 0x00, 0x10, 0xb5, + 0x04, 0x1c, 0x19, 0x21, 0x89, 0x01, 0x00, 0x20, + 0xff, 0xf7, 0xc5, 0xfd, 0x01, 0x1c, 0x60, 0x60, + 0x20, 0x68, 0xff, 0xf7, 0xe0, 0xfc, 0x60, 0x68, + 0x21, 0x68, 0x08, 0x30, 0x08, 0x60, 0x10, 0xbd, + 0x00, 0x00, 0x0a, 0x28, 0x01, 0xda, 0x04, 0x20, + 0x04, 0xe0, 0x50, 0x28, 0x01, 0xda, 0x05, 0x20, + 0x00, 0xe0, 0x07, 0x20, 0x04, 0x4a, 0x11, 0x78, + 0x38, 0x23, 0x3c, 0x00, 0x7c, 0x1a, 0x00, 0x00, + 0xc0, 0x00, 0x18, 0x40, 0x99, 0x43, 0x08, 0x43, + 0x10, 0x70, 0x70, 0x47, 0x88, 0x00, 0x07, 0x00, + 0xb0, 0xb5, 0x05, 0x1c, 0x07, 0x48, 0x40, 0x68, + 0x08, 0xe0, 0x01, 0x69, 0xa9, 0x42, 0x04, 0xd1, + 0x44, 0x68, 0x05, 0xf0, 0xc7, 0xfd, 0x20, 0x1c, + 0x00, 0xe0, 0x40, 0x68, 0x00, 0x28, 0xf4, 0xd1, + 0xb0, 0xbd, 0x00, 0x00, 0x58, 0x75, 0x01, 0x00, + 0xf8, 0xb5, 0x00, 0x25, 0x3c, 0x00, 0xb8, 0x1a, + 0x00, 0x00, 0x06, 0xf0, 0x84, 0xfd, 0x11, 0x4f, + 0x04, 0x1c, 0xbe, 0x79, 0x20, 0x68, 0x00, 0x28, + 0x07, 0xd1, 0xa0, 0x88, 0x04, 0x30, 0xff, 0xf7, + 0xf2, 0xf8, 0x00, 0x28, 0x06, 0xd1, 0x01, 0x21, + 0x0f, 0xe0, 0x01, 0x68, 0x21, 0x60, 0xa1, 0x69, + 0x01, 0x39, 0xa1, 0x61, 0x10, 0xc0, 0x05, 0x1c, + 0x20, 0x69, 0x01, 0x30, 0x20, 0x61, 0x61, 0x69, + 0x40, 0x1a, 0xe1, 0x68, 0x88, 0x42, 0x3c, 0x00, + 0xf4, 0x1a, 0x00, 0x00, 0x03, 0xd9, 0x07, 0x21, + 0x8e, 0x20, 0xff, 0xf7, 0xd3, 0xfb, 0xbe, 0x71, + 0x28, 0x1c, 0xf8, 0xbd, 0x20, 0x10, 0x07, 0x00, + 0xb0, 0xb5, 0x09, 0xf0, 0xbb, 0xff, 0x2f, 0x4c, + 0x00, 0x28, 0x20, 0x74, 0x03, 0xd0, 0x01, 0x21, + 0x01, 0x20, 0x0a, 0xf0, 0x71, 0xfc, 0x2b, 0x4d, + 0x14, 0x35, 0x28, 0x68, 0x00, 0x28, 0x4d, 0xd0, + 0x01, 0x21, 0x0f, 0x20, 0x11, 0xf0, 0x82, 0xfd, + 0x3c, 0x00, 0x30, 0x1b, 0x00, 0x00, 0x28, 0x89, + 0x08, 0xf0, 0xfb, 0xff, 0x01, 0x1c, 0x01, 0x22, + 0x0f, 0x20, 0x11, 0xf0, 0x40, 0xfd, 0xe0, 0x78, + 0x01, 0x25, 0x02, 0x28, 0x36, 0xd1, 0x0a, 0xf0, + 0xc6, 0xf8, 0x00, 0x28, 0x0a, 0xd0, 0x0b, 0xf0, + 0x92, 0xfb, 0x1e, 0x49, 0x09, 0x68, 0x40, 0x18, + 0x11, 0xf0, 0x5f, 0xf8, 0x00, 0x28, 0x01, 0xd1, + 0x02, 0x20, 0x2f, 0xe0, 0xe0, 0x78, 0x02, 0x28, + 0x24, 0xd1, 0x3c, 0x00, 0x6c, 0x1b, 0x00, 0x00, + 0x60, 0x70, 0x25, 0x70, 0x60, 0x68, 0x01, 0x28, + 0x1c, 0xd0, 0x15, 0x48, 0x10, 0x38, 0x81, 0x7b, + 0x00, 0x29, 0x04, 0xd1, 0x85, 0x73, 0x0f, 0x20, + 0x13, 0x49, 0x10, 0xf0, 0x01, 0xfc, 0x08, 0xf0, + 0x4f, 0xfe, 0x00, 0x28, 0x07, 0xd0, 0x0e, 0x48, + 0x01, 0x21, 0x98, 0x38, 0x00, 0x69, 0x01, 0xf0, + 0xb7, 0xfd, 0x00, 0x28, 0x05, 0xd0, 0x01, 0x20, + 0x0e, 0xf0, 0x0c, 0xfd, 0x3c, 0x00, 0xa8, 0x1b, + 0x00, 0x00, 0x01, 0x20, 0x0e, 0xf0, 0x1d, 0xfc, + 0xb0, 0xbd, 0x05, 0xf0, 0xdc, 0xfe, 0xb0, 0xbd, + 0xe0, 0x78, 0x00, 0x28, 0x01, 0xd1, 0x25, 0x70, + 0xf7, 0xe7, 0x03, 0x20, 0x00, 0xe0, 0x04, 0x20, + 0x0d, 0xf0, 0x8d, 0xfa, 0xb0, 0xbd, 0x84, 0x66, + 0x01, 0x00, 0x6c, 0x57, 0x01, 0x00, 0xe9, 0x03, + 0x01, 0x00, 0x70, 0xb5, 0x04, 0x1c, 0x00, 0x21, + 0x00, 0x20, 0x0a, 0x4d, 0x00, 0xe0, 0x3c, 0x00, + 0xe4, 0x1b, 0x00, 0x00, 0x01, 0x31, 0xcb, 0x00, + 0x5a, 0x19, 0x16, 0x79, 0x01, 0x2e, 0x02, 0xd0, + 0x52, 0x79, 0xa2, 0x42, 0x02, 0xd0, 0x0b, 0x29, + 0xf4, 0xd3, 0x70, 0xbd, 0x0b, 0x29, 0xfc, 0xd2, + 0xc8, 0x00, 0x01, 0x21, 0x5a, 0x19, 0x28, 0x58, + 0x11, 0x71, 0x70, 0xbd, 0x38, 0x58, 0x01, 0x00, + 0x05, 0x48, 0x80, 0xb5, 0x00, 0x7f, 0x24, 0x23, + 0x04, 0x49, 0x58, 0x43, 0x40, 0x18, 0x00, 0x6a, + 0x3c, 0x00, 0x20, 0x1c, 0x00, 0x00, 0xfe, 0xf7, + 0xda, 0xfb, 0x80, 0xbd, 0x00, 0x00, 0xd4, 0x79, + 0x01, 0x00, 0x94, 0x46, 0x01, 0x00, 0x80, 0xb5, + 0x04, 0xf0, 0x37, 0xff, 0x00, 0x20, 0x11, 0xf0, + 0x84, 0xfc, 0x00, 0x20, 0x80, 0xbd, 0xb0, 0xb5, + 0x05, 0x4c, 0x05, 0x1c, 0x20, 0x6b, 0xe1, 0x6a, + 0x02, 0xf0, 0xe3, 0xfd, 0x29, 0x1c, 0xa0, 0x6a, + 0x02, 0xf0, 0x11, 0xfb, 0xb0, 0xbd, 0xa4, 0x6c, + 0x01, 0x00, 0x3c, 0x00, 0x5c, 0x1c, 0x00, 0x00, + 0xb0, 0xb5, 0x03, 0x1c, 0x08, 0x1c, 0x14, 0x1c, + 0x00, 0x2b, 0x0c, 0x4d, 0x09, 0xd0, 0x69, 0x69, + 0x89, 0x00, 0x01, 0x31, 0x0a, 0x04, 0x12, 0x0c, + 0x22, 0x80, 0x29, 0x1c, 0xfe, 0xf7, 0x3e, 0xfc, + 0x0a, 0xe0, 0x01, 0x1c, 0x28, 0x1c, 0x22, 0x88, + 0xfe, 0xf7, 0x38, 0xfc, 0x20, 0x88, 0x01, 0x28, + 0x02, 0xd9, 0x80, 0x08, 0x01, 0x38, 0x68, 0x61, + 0x01, 0x20, 0xb0, 0xbd, 0x3c, 0x00, 0x98, 0x1c, + 0x00, 0x00, 0x20, 0x6e, 0x01, 0x00, 0xf1, 0xb5, + 0x00, 0x98, 0x00, 0x26, 0xc1, 0x68, 0x08, 0x68, + 0x09, 0x89, 0x1c, 0x29, 0x34, 0xd3, 0xc1, 0x88, + 0xff, 0x23, 0x01, 0x33, 0x99, 0x42, 0x2f, 0xd1, + 0x01, 0x88, 0xc9, 0x1a, 0x2c, 0xd1, 0x41, 0x88, + 0x08, 0x29, 0x29, 0xd1, 0x01, 0x79, 0x06, 0x29, + 0x26, 0xd1, 0x41, 0x79, 0x04, 0x29, 0x23, 0xd1, + 0x00, 0x25, 0x00, 0x24, 0x07, 0x1c, 0x3c, 0x00, + 0xd4, 0x1c, 0x00, 0x00, 0x18, 0x37, 0x0b, 0xe0, + 0xa0, 0x00, 0x41, 0x18, 0x04, 0x31, 0x04, 0x22, + 0x38, 0x1c, 0xfe, 0xf7, 0x8b, 0xfb, 0x00, 0x28, + 0x01, 0xd1, 0x01, 0x25, 0x04, 0xe0, 0x01, 0x34, + 0x0a, 0x49, 0x48, 0x69, 0xa0, 0x42, 0xef, 0xd8, + 0x08, 0x49, 0x08, 0x78, 0x00, 0x28, 0x0a, 0xd0, + 0x01, 0x28, 0x01, 0xd0, 0x02, 0x28, 0x06, 0xd1, + 0x00, 0x2d, 0x04, 0xd1, 0x00, 0x98, 0xc0, 0x68, + 0x3c, 0x00, 0x10, 0x1d, 0x00, 0x00, 0xff, 0xf7, + 0x42, 0xfc, 0x01, 0x26, 0x30, 0x1c, 0xf8, 0xbd, + 0x00, 0x00, 0x20, 0x6e, 0x01, 0x00, 0x01, 0x48, + 0x40, 0x68, 0x70, 0x47, 0x00, 0x00, 0x20, 0x6e, + 0x01, 0x00, 0x02, 0x49, 0x48, 0x60, 0x01, 0x20, + 0x48, 0x61, 0x70, 0x47, 0x00, 0x00, 0x20, 0x6e, + 0x01, 0x00, 0x70, 0xb5, 0x04, 0x1c, 0x01, 0x26, + 0x03, 0xf0, 0xef, 0xfa, 0x25, 0x1c, 0x10, 0x35, + 0x00, 0x28, 0x3c, 0x00, 0x4c, 0x1d, 0x00, 0x00, + 0x04, 0xd0, 0x00, 0x20, 0x20, 0x77, 0x03, 0xf0, + 0xf1, 0xfb, 0x07, 0xe0, 0x03, 0xf0, 0x38, 0xfd, + 0x00, 0x28, 0x09, 0xd0, 0x01, 0x20, 0x20, 0x77, + 0x03, 0xf0, 0xce, 0xfc, 0x01, 0x1c, 0x06, 0x22, + 0x28, 0x1c, 0xfe, 0xf7, 0xc3, 0xfb, 0x02, 0xe0, + 0x02, 0x20, 0x20, 0x77, 0x00, 0x26, 0x30, 0x1c, + 0x70, 0xbd, 0x00, 0x00, 0x03, 0x48, 0x80, 0x7a, + 0xc0, 0x07, 0x03, 0x49, 0x3c, 0x00, 0x88, 0x1d, + 0x00, 0x00, 0xc0, 0x0f, 0x88, 0x62, 0x70, 0x47, + 0x00, 0x00, 0x40, 0x90, 0x07, 0x00, 0xa4, 0x6c, + 0x01, 0x00, 0x01, 0x49, 0x01, 0x20, 0x88, 0x62, + 0x70, 0x47, 0xa4, 0x6c, 0x01, 0x00, 0x06, 0x48, + 0x80, 0x7a, 0xc1, 0x07, 0x06, 0x4a, 0xc9, 0x0f, + 0x91, 0x62, 0x20, 0x21, 0x80, 0x07, 0x00, 0xd4, + 0x00, 0x21, 0xa0, 0x32, 0x11, 0x70, 0x70, 0x47, + 0x00, 0x00, 0x40, 0x90, 0x07, 0x00, 0x3c, 0x00, + 0xc4, 0x1d, 0x00, 0x00, 0xa4, 0x6c, 0x01, 0x00, + 0x07, 0x4a, 0x12, 0x68, 0x07, 0x4b, 0x9b, 0x69, + 0x1a, 0x40, 0x01, 0xd0, 0x01, 0x22, 0x00, 0xe0, + 0x00, 0x22, 0x0a, 0x60, 0x01, 0x21, 0x00, 0x2a, + 0x00, 0xd0, 0x00, 0x21, 0x01, 0x60, 0x70, 0x47, + 0x10, 0x00, 0x07, 0x00, 0xa4, 0x6c, 0x01, 0x00, + 0x01, 0x22, 0x02, 0x60, 0x0a, 0x60, 0x70, 0x47, + 0xb0, 0xb5, 0x0d, 0x1c, 0x01, 0x1c, 0x58, 0x31, + 0x3c, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x04, 0x1c, + 0x06, 0x22, 0x28, 0x1d, 0xfe, 0xf7, 0x77, 0xfb, + 0x21, 0x1c, 0x5e, 0x31, 0x06, 0x22, 0x28, 0x1c, + 0x0a, 0x30, 0xfe, 0xf7, 0x70, 0xfb, 0x21, 0x1c, + 0x64, 0x31, 0x06, 0x22, 0x28, 0x1c, 0x10, 0x30, + 0xfe, 0xf7, 0x69, 0xfb, 0xb0, 0xbd, 0xfe, 0xb5, + 0x00, 0x25, 0x1d, 0x72, 0x17, 0x1c, 0x0e, 0x1c, + 0xb2, 0x6d, 0x00, 0x21, 0x92, 0x19, 0x50, 0x32, + 0xd2, 0x7a, 0x3c, 0x00, 0x3c, 0x1e, 0x00, 0x00, + 0x1c, 0x1c, 0x5a, 0x72, 0x00, 0x78, 0x32, 0x1c, + 0x80, 0x32, 0xc0, 0x07, 0xc0, 0x17, 0x01, 0x30, + 0x01, 0x90, 0x08, 0x98, 0x02, 0x92, 0x00, 0x28, + 0x01, 0xd1, 0x30, 0x7f, 0x2b, 0xe0, 0x37, 0x48, + 0x00, 0x68, 0x00, 0x28, 0x00, 0xdd, 0x01, 0x1c, + 0x01, 0x98, 0x00, 0x28, 0x02, 0xd0, 0x08, 0x98, + 0x01, 0x28, 0x10, 0xd1, 0x02, 0x9a, 0x90, 0x6b, + 0x00, 0x28, 0x06, 0xd0, 0x3c, 0x00, 0x78, 0x1e, + 0x00, 0x00, 0x88, 0x42, 0x01, 0xd9, 0x45, 0x1a, + 0x01, 0x3d, 0x70, 0x19, 0xb0, 0x30, 0x03, 0xe0, + 0xb5, 0x6d, 0x01, 0x3d, 0x70, 0x19, 0x50, 0x30, + 0x00, 0x7b, 0x0f, 0xe0, 0x02, 0x9a, 0x10, 0x6a, + 0x00, 0x28, 0x07, 0xd0, 0x88, 0x42, 0x01, 0xd9, + 0x45, 0x1a, 0x01, 0x3d, 0x70, 0x19, 0xa0, 0x30, + 0x00, 0x79, 0x03, 0xe0, 0xbd, 0x69, 0x01, 0x3d, + 0x78, 0x19, 0x00, 0x7f, 0xa0, 0x72, 0x3c, 0x00, + 0xb4, 0x1e, 0x00, 0x00, 0x0e, 0xf0, 0x0c, 0xf8, + 0x0e, 0x28, 0x11, 0xd1, 0xa0, 0x7a, 0x08, 0xf0, + 0x67, 0xff, 0x00, 0x28, 0x0c, 0xd0, 0x78, 0x68, + 0x00, 0x28, 0x05, 0xd1, 0x1b, 0x48, 0x00, 0x25, + 0x00, 0x78, 0x08, 0xf0, 0x4b, 0xff, 0x02, 0xe0, + 0x45, 0x1e, 0x78, 0x19, 0x00, 0x7a, 0xa0, 0x72, + 0x02, 0x9a, 0x50, 0x69, 0x00, 0x28, 0x17, 0xd0, + 0x08, 0x98, 0x01, 0x28, 0x14, 0xd0, 0xa0, 0x7a, + 0x3c, 0x00, 0xf0, 0x1e, 0x00, 0x00, 0x08, 0xf0, + 0x4e, 0xff, 0x00, 0x28, 0x0f, 0xd0, 0x01, 0x98, + 0x00, 0x28, 0x07, 0xd0, 0x02, 0x20, 0x20, 0x72, + 0x70, 0x6c, 0x80, 0x19, 0x40, 0x30, 0xc0, 0x79, + 0x60, 0x72, 0x04, 0xe0, 0x7d, 0x68, 0x01, 0x3d, + 0x78, 0x19, 0x00, 0x7a, 0xa0, 0x72, 0x02, 0x9a, + 0xa0, 0x7a, 0x91, 0x69, 0x08, 0xf0, 0x51, 0xff, + 0x20, 0x60, 0x02, 0x9a, 0x60, 0x7a, 0x91, 0x69, + 0x08, 0xf0, 0x3c, 0x00, 0x2c, 0x1f, 0x00, 0x00, + 0x4b, 0xff, 0x60, 0x60, 0xa0, 0x7a, 0xe0, 0x72, + 0x25, 0x73, 0xfe, 0xbd, 0xd4, 0x7e, 0x01, 0x00, + 0x90, 0x57, 0x01, 0x00, 0x00, 0x06, 0x00, 0x0e, + 0x00, 0x2a, 0x8c, 0xb5, 0x01, 0xd0, 0x8a, 0x22, + 0x00, 0xe0, 0x88, 0x22, 0x00, 0xab, 0x1a, 0x80, + 0x0c, 0xf0, 0xc2, 0xf8, 0x01, 0x90, 0x68, 0x46, + 0x0b, 0xf0, 0xbc, 0xfa, 0x8c, 0xbd, 0x00, 0x00, + 0x01, 0x1c, 0x08, 0x48, 0x3c, 0x00, 0x68, 0x1f, + 0x00, 0x00, 0x80, 0xb5, 0x00, 0x68, 0x00, 0x28, + 0x09, 0xd0, 0x49, 0x68, 0x02, 0x20, 0x00, 0x29, + 0x00, 0xd1, 0x01, 0x20, 0x01, 0x06, 0x09, 0x0e, + 0x00, 0x20, 0x06, 0xf0, 0xd8, 0xff, 0x80, 0xbd, + 0x00, 0x00, 0x20, 0x67, 0x01, 0x00, 0x1c, 0xb5, + 0x01, 0x90, 0x04, 0x1c, 0x44, 0x30, 0x01, 0xaa, + 0x69, 0x46, 0x11, 0xf0, 0xb8, 0xfd, 0x00, 0x28, + 0x0b, 0xd0, 0xa0, 0x69, 0x00, 0x21, 0x3c, 0x00, + 0xa4, 0x1f, 0x00, 0x00, 0xc2, 0x07, 0xd2, 0x0f, + 0x02, 0x20, 0xff, 0xf7, 0xc9, 0xff, 0x00, 0x21, + 0x20, 0x1c, 0x0f, 0xf0, 0xd9, 0xfe, 0x1c, 0xbd, + 0x04, 0x21, 0x98, 0x20, 0xff, 0xf7, 0x72, 0xf9, + 0xf9, 0xe7, 0x00, 0x00, 0x8c, 0xb5, 0x00, 0xab, + 0x84, 0x21, 0x19, 0x80, 0x05, 0x4b, 0x02, 0x1c, + 0x18, 0x1c, 0x99, 0x8a, 0x0c, 0xf0, 0x8e, 0xf8, + 0x01, 0x90, 0x68, 0x46, 0x0b, 0xf0, 0x7c, 0xfa, + 0x3c, 0x00, 0xe0, 0x1f, 0x00, 0x00, 0x8c, 0xbd, + 0x00, 0x00, 0x70, 0x7c, 0x01, 0x00, 0x70, 0x47, + 0x00, 0x00, 0x06, 0x49, 0x80, 0xb5, 0xc9, 0x68, + 0x14, 0x23, 0x40, 0x31, 0x89, 0x7a, 0x04, 0x4a, + 0x59, 0x43, 0x89, 0x18, 0x80, 0x00, 0x08, 0x58, + 0xfe, 0xf7, 0xe9, 0xf9, 0x80, 0xbd, 0x70, 0x7c, + 0x01, 0x00, 0x54, 0x47, 0x01, 0x00, 0x80, 0xb5, + 0x00, 0x20, 0xff, 0xf7, 0xd6, 0xff, 0x80, 0xbd, + 0x00, 0x00, 0x3c, 0x00, 0x1c, 0x20, 0x00, 0x00, + 0x80, 0xb5, 0x12, 0x48, 0x11, 0x49, 0x80, 0x8a, + 0x0a, 0x8b, 0x00, 0x21, 0x00, 0x28, 0xc2, 0xb0, + 0x0c, 0xd1, 0x01, 0x2a, 0x05, 0xd0, 0x02, 0x2a, + 0x15, 0xd0, 0x00, 0xab, 0x5a, 0x80, 0x0e, 0x22, + 0x07, 0xe0, 0x02, 0x22, 0x00, 0xab, 0x5a, 0x80, + 0x99, 0x80, 0x04, 0xe0, 0x00, 0xab, 0x5a, 0x80, + 0x0d, 0x22, 0x00, 0xab, 0x9a, 0x80, 0x00, 0xab, + 0x18, 0x80, 0xff, 0x20, 0x3c, 0x00, 0x58, 0x20, + 0x00, 0x00, 0x98, 0x71, 0xd9, 0x71, 0x68, 0x46, + 0x00, 0xf0, 0xd1, 0xf9, 0x42, 0xb0, 0x80, 0xbd, + 0x00, 0x00, 0x70, 0x7c, 0x01, 0x00, 0x10, 0xb5, + 0x09, 0xf0, 0x5f, 0xfc, 0x00, 0x20, 0x05, 0xf0, + 0x2a, 0xf9, 0x03, 0x4c, 0xe0, 0x8a, 0x05, 0xf0, + 0x36, 0xf9, 0x20, 0x1c, 0x0f, 0xf0, 0xb3, 0xfe, + 0x10, 0xbd, 0x70, 0x7c, 0x01, 0x00, 0x1c, 0xb5, + 0x09, 0xf0, 0x4f, 0xfc, 0x07, 0x20, 0x3c, 0x00, + 0x94, 0x20, 0x00, 0x00, 0x00, 0xab, 0x07, 0x4c, + 0x18, 0x80, 0xe1, 0x8a, 0x20, 0x1c, 0x0c, 0xf0, + 0x0b, 0xf8, 0x01, 0x90, 0x68, 0x46, 0x0b, 0xf0, + 0x17, 0xfa, 0x20, 0x1c, 0x0f, 0xf0, 0x9e, 0xfe, + 0x1c, 0xbd, 0x00, 0x00, 0x70, 0x7c, 0x01, 0x00, + 0x80, 0xb5, 0x02, 0x21, 0x98, 0x20, 0xff, 0xf7, + 0xf1, 0xf8, 0x80, 0xbd, 0x10, 0xb5, 0x15, 0x4c, + 0xc2, 0xb0, 0xa0, 0x8a, 0x00, 0x28, 0x03, 0xd0, + 0x3c, 0x00, 0xd0, 0x20, 0x00, 0x00, 0x01, 0x28, + 0x1e, 0xd1, 0x02, 0x20, 0x00, 0xe0, 0x01, 0x20, + 0xe1, 0x68, 0x40, 0x31, 0x88, 0x72, 0x20, 0x69, + 0x08, 0xf0, 0x23, 0xfd, 0x02, 0x1c, 0x0c, 0x48, + 0x18, 0x38, 0x80, 0x88, 0xe1, 0x68, 0x0f, 0xf0, + 0xa4, 0xfe, 0xa0, 0x8a, 0x00, 0xab, 0x18, 0x80, + 0x01, 0x20, 0x58, 0x80, 0x00, 0x20, 0x98, 0x80, + 0xff, 0x21, 0x99, 0x71, 0xd8, 0x71, 0x68, 0x46, + 0x00, 0xf0, 0x3c, 0x00, 0x0c, 0x21, 0x00, 0x00, + 0x7b, 0xf9, 0x42, 0xb0, 0x10, 0xbd, 0x03, 0x21, + 0x98, 0x20, 0xff, 0xf7, 0xc5, 0xf8, 0xf8, 0xe7, + 0x70, 0x7c, 0x01, 0x00, 0x70, 0x47, 0x00, 0x00, + 0x80, 0xb5, 0x03, 0x48, 0x0f, 0xf0, 0x60, 0xfe, + 0x00, 0x20, 0x05, 0xf0, 0xcd, 0xf8, 0x80, 0xbd, + 0x70, 0x7c, 0x01, 0x00, 0x80, 0xb5, 0x02, 0x48, + 0x0f, 0xf0, 0x56, 0xfe, 0x80, 0xbd, 0x00, 0x00, + 0x70, 0x7c, 0x01, 0x00, 0x3c, 0x00, 0x48, 0x21, + 0x00, 0x00, 0x80, 0xb5, 0x02, 0x21, 0x98, 0x20, + 0xff, 0xf7, 0xa9, 0xf8, 0x80, 0xbd, 0x80, 0xb5, + 0x03, 0x20, 0xff, 0xf7, 0x34, 0xff, 0x80, 0xbd, + 0x00, 0x00, 0xf0, 0xb5, 0x21, 0x4e, 0x00, 0x27, + 0xb1, 0x8a, 0x30, 0x1c, 0x00, 0x25, 0x04, 0x24, + 0x00, 0x29, 0x00, 0x8b, 0xc3, 0xb0, 0x1e, 0xd1, + 0x01, 0x28, 0x07, 0xd0, 0x31, 0x1c, 0x49, 0x8b, + 0x02, 0x28, 0x12, 0xd1, 0x00, 0x29, 0x3c, 0x00, + 0x84, 0x21, 0x00, 0x00, 0x07, 0xd1, 0x00, 0x24, + 0x05, 0xe0, 0x00, 0x24, 0x01, 0x25, 0x02, 0x20, + 0x00, 0xab, 0xd8, 0x80, 0x1f, 0x81, 0x0f, 0xf0, + 0x7f, 0xff, 0x00, 0x2c, 0x10, 0xd1, 0xf1, 0x68, + 0x05, 0x20, 0x40, 0x31, 0x88, 0x72, 0x0e, 0xe0, + 0x00, 0x29, 0x1a, 0xd1, 0x00, 0xab, 0xd8, 0x80, + 0x0e, 0x20, 0x02, 0xe0, 0x00, 0xab, 0xd8, 0x80, + 0x0d, 0x20, 0x00, 0xab, 0x18, 0x81, 0x07, 0xe0, + 0x3c, 0x00, 0xc0, 0x21, 0x00, 0x00, 0x30, 0x1c, + 0x0f, 0xf0, 0x13, 0xfe, 0x20, 0x1c, 0xff, 0xf7, + 0xfc, 0xfe, 0x00, 0x2d, 0x08, 0xd0, 0xb0, 0x8a, + 0x00, 0xab, 0x98, 0x80, 0xff, 0x20, 0x98, 0x72, + 0xdf, 0x72, 0x01, 0xa8, 0x00, 0xf0, 0x11, 0xf9, + 0x43, 0xb0, 0xf0, 0xbd, 0x00, 0x00, 0x70, 0x7c, + 0x01, 0x00, 0x10, 0xb5, 0x00, 0x20, 0x05, 0xf0, + 0x6c, 0xf8, 0x04, 0x4c, 0xe0, 0x8a, 0x05, 0xf0, + 0x78, 0xf8, 0x3c, 0x00, 0xfc, 0x21, 0x00, 0x00, + 0x0f, 0xf0, 0x4c, 0xff, 0x20, 0x1c, 0x0f, 0xf0, + 0xf3, 0xfd, 0x10, 0xbd, 0x70, 0x7c, 0x01, 0x00, + 0x80, 0xb5, 0x04, 0x20, 0xff, 0xf7, 0xd8, 0xfe, + 0x01, 0x48, 0x0f, 0xf0, 0xe9, 0xfd, 0x80, 0xbd, + 0x70, 0x7c, 0x01, 0x00, 0x80, 0xb5, 0x02, 0x20, + 0xff, 0xf7, 0xce, 0xfe, 0x01, 0x20, 0x05, 0xf0, + 0x5f, 0xf8, 0x02, 0x48, 0x0f, 0xf0, 0xdc, 0xfd, + 0x80, 0xbd, 0x00, 0x00, 0x3c, 0x00, 0x38, 0x22, + 0x00, 0x00, 0x70, 0x7c, 0x01, 0x00, 0x80, 0xb5, + 0x03, 0x20, 0xff, 0xf7, 0xc0, 0xfe, 0x80, 0xbd, + 0x00, 0x00, 0xb0, 0xb5, 0x1d, 0x4d, 0xc2, 0xb0, + 0x28, 0x8b, 0x00, 0xab, 0xff, 0x21, 0x58, 0x80, + 0x99, 0x71, 0x00, 0x21, 0xd9, 0x71, 0xaa, 0x8a, + 0x00, 0x24, 0x01, 0x2a, 0x18, 0xd1, 0x2a, 0x1c, + 0x52, 0x8b, 0x02, 0x28, 0x0f, 0xd1, 0x00, 0x2a, + 0x16, 0xd1, 0x03, 0x20, 0x58, 0x80, 0x3c, 0x00, + 0x74, 0x22, 0x00, 0x00, 0x99, 0x80, 0x2c, 0x1c, + 0xff, 0x22, 0x98, 0x1d, 0xe9, 0x69, 0xfe, 0xf7, + 0x3b, 0xf9, 0xe1, 0x68, 0x04, 0x20, 0x40, 0x31, + 0x88, 0x72, 0x10, 0xe0, 0x00, 0x2a, 0x06, 0xd1, + 0x01, 0x24, 0x0e, 0x20, 0x01, 0xe0, 0x01, 0x24, + 0x0d, 0x20, 0x00, 0xab, 0x98, 0x80, 0x28, 0x1c, + 0x0f, 0xf0, 0xa4, 0xfd, 0x04, 0x20, 0xff, 0xf7, + 0x8d, 0xfe, 0x00, 0x2c, 0x05, 0xd0, 0xa8, 0x8a, + 0x3c, 0x00, 0xb0, 0x22, 0x00, 0x00, 0x00, 0xab, + 0x18, 0x80, 0x68, 0x46, 0x00, 0xf0, 0xa5, 0xf8, + 0x42, 0xb0, 0xb0, 0xbd, 0x00, 0x00, 0x70, 0x7c, + 0x01, 0x00, 0x10, 0xb5, 0x00, 0x20, 0x05, 0xf0, + 0x00, 0xf8, 0x03, 0x4c, 0xe0, 0x8a, 0x05, 0xf0, + 0x0c, 0xf8, 0x20, 0x1c, 0x0f, 0xf0, 0x89, 0xfd, + 0x10, 0xbd, 0x70, 0x7c, 0x01, 0x00, 0x80, 0xb5, + 0x04, 0x20, 0xff, 0xf7, 0x6e, 0xfe, 0x01, 0x48, + 0x0f, 0xf0, 0x3c, 0x00, 0xec, 0x22, 0x00, 0x00, + 0x7f, 0xfd, 0x80, 0xbd, 0x70, 0x7c, 0x01, 0x00, + 0x80, 0xb5, 0x02, 0x20, 0xff, 0xf7, 0x64, 0xfe, + 0x01, 0x20, 0x04, 0xf0, 0xf5, 0xff, 0x02, 0x48, + 0x0f, 0xf0, 0x72, 0xfd, 0x80, 0xbd, 0x00, 0x00, + 0x70, 0x7c, 0x01, 0x00, 0x80, 0xb5, 0x03, 0x20, + 0xff, 0xf7, 0x56, 0xfe, 0x80, 0xbd, 0x00, 0x00, + 0xb0, 0xb5, 0x19, 0x4d, 0x04, 0x24, 0xa9, 0x8a, + 0x28, 0x1c, 0x02, 0x8b, 0x3c, 0x00, 0x28, 0x23, + 0x00, 0x00, 0xc2, 0xb0, 0x01, 0x29, 0x14, 0xd1, + 0x40, 0x8b, 0x04, 0x2a, 0x0b, 0xd1, 0x00, 0x28, + 0x00, 0xd1, 0x00, 0x24, 0x0f, 0xf0, 0xad, 0xfe, + 0x00, 0x2c, 0x19, 0xd1, 0xe9, 0x68, 0x05, 0x20, + 0x40, 0x31, 0x88, 0x72, 0x17, 0xe0, 0x00, 0x28, + 0x10, 0xd1, 0x00, 0xab, 0x5a, 0x80, 0x0e, 0x20, + 0x02, 0xe0, 0x00, 0xab, 0x5a, 0x80, 0x0d, 0x20, + 0x00, 0xab, 0x98, 0x80, 0x19, 0x80, 0x3c, 0x00, + 0x64, 0x23, 0x00, 0x00, 0xff, 0x20, 0x98, 0x71, + 0x00, 0x20, 0xd8, 0x71, 0x68, 0x46, 0x00, 0xf0, + 0x49, 0xf8, 0x42, 0xb0, 0xb0, 0xbd, 0x28, 0x1c, + 0x0f, 0xf0, 0x38, 0xfd, 0x20, 0x1c, 0xff, 0xf7, + 0x21, 0xfe, 0xf6, 0xe7, 0x70, 0x7c, 0x01, 0x00, + 0x10, 0xb5, 0x00, 0x20, 0x04, 0xf0, 0x9e, 0xff, + 0x03, 0x4c, 0xe0, 0x8a, 0x04, 0xf0, 0xaa, 0xff, + 0x20, 0x1c, 0x0f, 0xf0, 0x27, 0xfd, 0x10, 0xbd, + 0x3c, 0x00, 0xa0, 0x23, 0x00, 0x00, 0x70, 0x7c, + 0x01, 0x00, 0x80, 0xb5, 0x04, 0x20, 0xff, 0xf7, + 0x0c, 0xfe, 0x01, 0x48, 0x0f, 0xf0, 0x1d, 0xfd, + 0x80, 0xbd, 0x70, 0x7c, 0x01, 0x00, 0x80, 0xb5, + 0x02, 0x20, 0xff, 0xf7, 0x02, 0xfe, 0x01, 0x20, + 0x04, 0xf0, 0x93, 0xff, 0x02, 0x48, 0x0f, 0xf0, + 0x10, 0xfd, 0x80, 0xbd, 0x00, 0x00, 0x70, 0x7c, + 0x01, 0x00, 0xb0, 0xb5, 0x0a, 0x4d, 0x01, 0x1c, + 0x44, 0x31, 0x3c, 0x00, 0xdc, 0x23, 0x00, 0x00, + 0x04, 0x1c, 0x06, 0x22, 0x28, 0x1c, 0xfe, 0xf7, + 0x89, 0xf8, 0xec, 0x60, 0x20, 0x69, 0x03, 0xf0, + 0x97, 0xf8, 0x01, 0x1c, 0x06, 0x22, 0xa8, 0x18, + 0xfe, 0xf7, 0x80, 0xf8, 0x04, 0x20, 0xff, 0xf7, + 0xf7, 0xfd, 0xb0, 0xbd, 0x70, 0x7c, 0x01, 0x00, + 0x90, 0xb5, 0x04, 0x1c, 0x80, 0x88, 0x93, 0xb0, + 0x00, 0x28, 0x06, 0xd0, 0x15, 0x49, 0x06, 0x22, + 0x48, 0x80, 0x18, 0x31, 0x3c, 0x00, 0x18, 0x24, + 0x00, 0x00, 0x88, 0x1f, 0xfe, 0xf7, 0x6d, 0xf8, + 0x68, 0x46, 0x0c, 0xf0, 0x14, 0xf8, 0x20, 0x88, + 0x01, 0x28, 0x08, 0xd1, 0x60, 0x88, 0x03, 0x28, + 0x05, 0xd1, 0xa0, 0x88, 0x00, 0x28, 0x02, 0xd1, + 0x06, 0x20, 0x0c, 0xa9, 0x08, 0x70, 0xa0, 0x79, + 0x06, 0x21, 0xff, 0x28, 0x04, 0xd0, 0xe0, 0x79, + 0x00, 0x28, 0x01, 0xd0, 0x01, 0x1c, 0x08, 0x31, + 0x0b, 0x20, 0x08, 0xaa, 0x50, 0x72, 0x3c, 0x00, + 0x54, 0x24, 0x00, 0x00, 0x20, 0x1c, 0x08, 0xf0, + 0x3b, 0xff, 0x03, 0x90, 0x68, 0x46, 0x0b, 0xf0, + 0x31, 0xf8, 0x13, 0xb0, 0x90, 0xbd, 0x00, 0x00, + 0x58, 0x7c, 0x01, 0x00, 0x07, 0x4b, 0x1a, 0x78, + 0x82, 0x42, 0x01, 0xd0, 0x00, 0x29, 0x07, 0xd0, + 0xff, 0x20, 0x18, 0x70, 0x04, 0x48, 0x01, 0x88, + 0x01, 0x22, 0x52, 0x03, 0x91, 0x43, 0x01, 0x80, + 0x70, 0x47, 0x00, 0x00, 0x4c, 0x7b, 0x01, 0x00, + 0x3c, 0x00, 0x90, 0x24, 0x00, 0x00, 0x32, 0x80, + 0x07, 0x00, 0x10, 0xb5, 0x04, 0x1c, 0x0c, 0x23, + 0x07, 0x49, 0x58, 0x43, 0x40, 0x18, 0x00, 0x79, + 0x0a, 0xf0, 0x4f, 0xf9, 0x01, 0x20, 0x03, 0x49, + 0xa0, 0x40, 0x08, 0x39, 0x0a, 0x78, 0x10, 0x43, + 0x08, 0x70, 0x10, 0xbd, 0x00, 0x00, 0x74, 0x7a, + 0x01, 0x00, 0x03, 0x4a, 0x00, 0x21, 0x11, 0x54, + 0x80, 0x00, 0x30, 0x32, 0x10, 0x58, 0x01, 0x70, + 0x70, 0x47, 0x3c, 0x00, 0xcc, 0x24, 0x00, 0x00, + 0xe0, 0x7a, 0x01, 0x00, 0x10, 0xb5, 0x04, 0x1c, + 0x05, 0x28, 0x01, 0xd3, 0xfe, 0xf7, 0x12, 0xff, + 0x20, 0x1c, 0xff, 0xf7, 0xed, 0xff, 0x00, 0x21, + 0x20, 0x1c, 0x0e, 0xf0, 0x89, 0xfb, 0x10, 0xbd, + 0x05, 0x49, 0x80, 0xb5, 0x88, 0x60, 0x08, 0x7f, + 0x24, 0x23, 0x04, 0x49, 0x58, 0x43, 0x08, 0x58, + 0xfd, 0xf7, 0x6c, 0xff, 0x80, 0xbd, 0x00, 0x00, + 0xd4, 0x79, 0x01, 0x00, 0x3c, 0x00, 0x08, 0x25, + 0x00, 0x00, 0x94, 0x46, 0x01, 0x00, 0x80, 0xb5, + 0x01, 0x21, 0x91, 0x20, 0xfe, 0xf7, 0xc7, 0xfe, + 0x80, 0xbd, 0x02, 0x4a, 0x11, 0x68, 0x81, 0x43, + 0x11, 0x60, 0x70, 0x47, 0x00, 0x00, 0x78, 0x6e, + 0x01, 0x00, 0x80, 0xb5, 0xfe, 0xf7, 0xe9, 0xfe, + 0x80, 0xbd, 0x80, 0xb5, 0xfe, 0xf7, 0xe5, 0xfe, + 0x80, 0xbd, 0x80, 0xb5, 0x00, 0xf0, 0x31, 0xfa, + 0x80, 0xbd, 0x03, 0x49, 0x80, 0xb5, 0x3c, 0x00, + 0x44, 0x25, 0x00, 0x00, 0x04, 0x20, 0x88, 0x60, + 0x00, 0xf0, 0xd0, 0xf9, 0x80, 0xbd, 0x00, 0x00, + 0x00, 0x30, 0x07, 0x00, 0x80, 0xb5, 0x00, 0xf0, + 0x99, 0xfa, 0x80, 0xbd, 0x80, 0xb5, 0x00, 0xf0, + 0x99, 0xfb, 0x80, 0xbd, 0x38, 0xb5, 0x20, 0x28, + 0x15, 0xd2, 0x0d, 0x4c, 0x22, 0x1c, 0x20, 0x32, + 0x95, 0x79, 0x00, 0xab, 0x1d, 0x70, 0xd2, 0x79, + 0x5a, 0x70, 0x0a, 0x4b, 0x82, 0x00, 0x99, 0x50, + 0x3c, 0x00, 0x80, 0x25, 0x00, 0x00, 0x01, 0x21, + 0x81, 0x40, 0x08, 0x48, 0x01, 0x60, 0x42, 0x68, + 0x11, 0x43, 0x41, 0x60, 0x00, 0xab, 0x18, 0x88, + 0xe0, 0x84, 0x38, 0xbd, 0x01, 0x21, 0xff, 0x20, + 0xfe, 0xf7, 0x83, 0xfe, 0xf9, 0xe7, 0x00, 0x10, + 0x07, 0x00, 0x30, 0x74, 0x01, 0x00, 0x00, 0x40, + 0x07, 0x00, 0x20, 0x28, 0x09, 0xd2, 0x05, 0x49, + 0x06, 0x4b, 0x82, 0x00, 0x99, 0x50, 0x05, 0x4a, + 0x51, 0x68, 0x3c, 0x00, 0xbc, 0x25, 0x00, 0x00, + 0x01, 0x23, 0x83, 0x40, 0x99, 0x43, 0x51, 0x60, + 0x70, 0x47, 0x00, 0x00, 0xa9, 0x75, 0x00, 0x00, + 0x30, 0x74, 0x01, 0x00, 0x00, 0x40, 0x07, 0x00, + 0x02, 0x4a, 0x11, 0x68, 0x08, 0x43, 0x10, 0x60, + 0x70, 0x47, 0x00, 0x00, 0x78, 0x6e, 0x01, 0x00, + 0x0b, 0x48, 0x01, 0x68, 0x03, 0x22, 0x12, 0x04, + 0x11, 0x43, 0x01, 0x60, 0x01, 0x68, 0x07, 0x22, + 0x12, 0x06, 0x91, 0x43, 0x3c, 0x00, 0xf8, 0x25, + 0x00, 0x00, 0x01, 0x22, 0x52, 0x06, 0x89, 0x18, + 0x01, 0x60, 0x01, 0x68, 0x12, 0x0c, 0x11, 0x43, + 0x01, 0x60, 0x01, 0x68, 0x52, 0x08, 0x11, 0x43, + 0x01, 0x60, 0x70, 0x47, 0x00, 0x00, 0x80, 0x00, + 0x07, 0x00, 0xfe, 0xb5, 0x1c, 0x4e, 0x05, 0x1c, + 0xb0, 0x8a, 0xf2, 0x68, 0x12, 0xd0, 0x01, 0x24, + 0x00, 0x29, 0x09, 0xd1, 0x11, 0x6d, 0x02, 0xaa, + 0x01, 0xab, 0xfe, 0xf7, 0xf8, 0xfe, 0x3c, 0x00, + 0x34, 0x26, 0x00, 0x00, 0x02, 0x98, 0x00, 0x28, + 0x01, 0xd0, 0x00, 0x24, 0x0b, 0xe0, 0x01, 0xaa, + 0x02, 0xa9, 0x28, 0x1c, 0xfe, 0xf7, 0x70, 0xff, + 0x05, 0xe0, 0x11, 0x6d, 0x02, 0xaa, 0x00, 0x24, + 0x01, 0xab, 0xfe, 0xf7, 0x01, 0xff, 0x0e, 0x49, + 0x08, 0x1c, 0x20, 0x30, 0x82, 0x79, 0x00, 0xab, + 0x1a, 0x70, 0xc0, 0x79, 0x58, 0x70, 0x30, 0x68, + 0x00, 0x28, 0x02, 0xd1, 0x02, 0x98, 0x30, 0x60, + 0x3c, 0x00, 0x70, 0x26, 0x00, 0x00, 0x02, 0xe0, + 0x02, 0x98, 0x72, 0x68, 0xd0, 0x60, 0x01, 0x98, + 0x00, 0xab, 0x70, 0x60, 0x18, 0x88, 0xc8, 0x84, + 0xf0, 0x68, 0xc0, 0x6c, 0xf0, 0x60, 0x20, 0x1c, + 0xfe, 0xbd, 0x24, 0x7e, 0x01, 0x00, 0x00, 0x10, + 0x07, 0x00, 0xf8, 0xb5, 0x04, 0x1c, 0x54, 0x27, + 0x1d, 0x4e, 0x00, 0x20, 0x30, 0x60, 0x70, 0x60, + 0x67, 0x43, 0x38, 0x04, 0x15, 0x1c, 0x00, 0x0c, + 0xb1, 0x82, 0x3c, 0x00, 0xac, 0x26, 0x00, 0x00, + 0xff, 0xf7, 0x96, 0xf8, 0x08, 0x21, 0x30, 0x61, + 0x00, 0x26, 0x17, 0x4a, 0x14, 0xe0, 0x03, 0x1c, + 0x24, 0x33, 0x42, 0x61, 0x03, 0x61, 0xc6, 0x61, + 0x01, 0x83, 0x08, 0x33, 0x03, 0x60, 0xb1, 0x23, + 0x43, 0x60, 0x03, 0x1c, 0x64, 0x33, 0xc3, 0x60, + 0x0c, 0x23, 0x03, 0x81, 0x03, 0x1c, 0x54, 0x33, + 0x4c, 0x30, 0x28, 0xc0, 0x01, 0x3c, 0x18, 0x1c, + 0x00, 0x2c, 0xe8, 0xd1, 0x3c, 0x00, 0xe8, 0x26, + 0x00, 0x00, 0x09, 0x4e, 0x07, 0x22, 0x30, 0x69, + 0xd2, 0x43, 0xc1, 0x19, 0x50, 0x50, 0x02, 0x1c, + 0x10, 0x32, 0x80, 0x39, 0x8a, 0x63, 0xf0, 0x60, + 0xb0, 0x60, 0x00, 0x21, 0x00, 0x20, 0xff, 0xf7, + 0x88, 0xff, 0x30, 0x69, 0xf0, 0x60, 0xb0, 0x60, + 0xf8, 0xbd, 0x24, 0x7e, 0x01, 0x00, 0x91, 0x00, + 0x05, 0x00, 0x01, 0x48, 0x40, 0x6a, 0x70, 0x47, + 0x00, 0x00, 0xe8, 0x7d, 0x01, 0x00, 0x3c, 0x00, + 0x24, 0x27, 0x00, 0x00, 0x01, 0x48, 0x00, 0x88, + 0x70, 0x47, 0x00, 0x00, 0xfc, 0x6b, 0x01, 0x00, + 0x06, 0x49, 0x80, 0xb5, 0x08, 0x88, 0x01, 0x30, + 0x08, 0x80, 0x05, 0x49, 0x08, 0x20, 0x08, 0x60, + 0x04, 0x49, 0x88, 0x69, 0x88, 0x61, 0x00, 0xf0, + 0x21, 0xf8, 0x80, 0xbd, 0xfc, 0x6b, 0x01, 0x00, + 0x00, 0x10, 0x07, 0x00, 0x00, 0x30, 0x07, 0x00, + 0x03, 0x4a, 0x01, 0x20, 0x12, 0x1d, 0x06, 0xca, + 0x3c, 0x00, 0x60, 0x27, 0x00, 0x00, 0x91, 0x42, + 0x00, 0xd1, 0x00, 0x20, 0x70, 0x47, 0xe8, 0x7d, + 0x01, 0x00, 0x06, 0x48, 0x00, 0xb5, 0xc0, 0x7c, + 0x00, 0x28, 0x03, 0xd1, 0xff, 0xf7, 0xef, 0xff, + 0x00, 0x28, 0x01, 0xd0, 0x01, 0x20, 0x00, 0xbd, + 0x00, 0x20, 0x00, 0xbd, 0x00, 0x00, 0xa0, 0x80, + 0x07, 0x00, 0x10, 0xb5, 0x04, 0x1c, 0x80, 0x07, + 0x02, 0xd5, 0x06, 0xf0, 0x3e, 0xfd, 0x03, 0xe0, + 0xe0, 0x07, 0x3c, 0x00, 0x9c, 0x27, 0x00, 0x00, + 0x01, 0xd5, 0x06, 0xf0, 0xe3, 0xfd, 0x60, 0x07, + 0x01, 0xd5, 0xfe, 0xf7, 0xab, 0xfd, 0x10, 0xbd, + 0x02, 0x4a, 0x01, 0x1c, 0x10, 0x68, 0x11, 0x60, + 0x70, 0x47, 0x00, 0x00, 0xe8, 0x7d, 0x01, 0x00, + 0x38, 0xb5, 0x20, 0x4d, 0x2c, 0x1c, 0x20, 0x34, + 0xa0, 0x79, 0x00, 0xab, 0x18, 0x70, 0xe0, 0x79, + 0x58, 0x70, 0xfe, 0xf7, 0x27, 0xfa, 0x00, 0xab, + 0x18, 0x88, 0xe8, 0x84, 0x3c, 0x00, 0xd8, 0x27, + 0x00, 0x00, 0x1a, 0x48, 0x81, 0x78, 0x08, 0x22, + 0x91, 0x43, 0x81, 0x70, 0x81, 0x78, 0x11, 0x43, + 0x81, 0x70, 0x17, 0x48, 0x41, 0x68, 0x80, 0x22, + 0x91, 0x43, 0x41, 0x60, 0x01, 0x68, 0x11, 0x43, + 0x01, 0x60, 0x00, 0x20, 0x01, 0x30, 0x64, 0x28, + 0xfc, 0xd3, 0xa0, 0x79, 0x0f, 0x4d, 0x00, 0xab, + 0x18, 0x70, 0xe0, 0x79, 0x10, 0x4c, 0x58, 0x70, + 0x20, 0x1c, 0x10, 0x30, 0x00, 0xf0, 0x3c, 0x00, + 0x14, 0x28, 0x00, 0x00, 0xdf, 0xfb, 0x00, 0x20, + 0xc0, 0x43, 0xa0, 0x61, 0xff, 0xf7, 0x9c, 0xff, + 0x00, 0x28, 0x09, 0xd0, 0x0a, 0x49, 0x08, 0x69, + 0x01, 0x30, 0x08, 0x61, 0x00, 0x20, 0x3c, 0x31, + 0x89, 0x68, 0x48, 0x63, 0x06, 0xf0, 0xee, 0xfc, + 0x00, 0xab, 0x18, 0x88, 0xe8, 0x84, 0x38, 0xbd, + 0x00, 0x10, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, + 0xf4, 0x00, 0x07, 0x00, 0x00, 0x30, 0x07, 0x00, + 0x3c, 0x00, 0x50, 0x28, 0x00, 0x00, 0xe8, 0x7d, + 0x01, 0x00, 0x0a, 0x48, 0x80, 0xb5, 0x00, 0x6a, + 0x00, 0x28, 0x01, 0xd0, 0xfe, 0xf7, 0xc1, 0xf9, + 0x07, 0x48, 0x07, 0x49, 0x3c, 0x30, 0x80, 0x68, + 0x10, 0x30, 0x48, 0x61, 0x01, 0x20, 0x08, 0x61, + 0x05, 0x49, 0x08, 0x68, 0x80, 0x22, 0x90, 0x43, + 0x08, 0x60, 0x80, 0xbd, 0x00, 0x00, 0xe8, 0x7d, + 0x01, 0x00, 0x00, 0x30, 0x07, 0x00, 0xf4, 0x00, + 0x07, 0x00, 0x3c, 0x00, 0x8c, 0x28, 0x00, 0x00, + 0x80, 0xb5, 0x0c, 0xf0, 0xcb, 0xfe, 0x06, 0xf0, + 0xbf, 0xfc, 0x80, 0xbd, 0x01, 0x49, 0xc8, 0x62, + 0x70, 0x47, 0x00, 0x00, 0xe8, 0x7d, 0x01, 0x00, + 0x02, 0x4a, 0x91, 0x6a, 0x08, 0x43, 0x90, 0x62, + 0x70, 0x47, 0x00, 0x00, 0xe8, 0x7d, 0x01, 0x00, + 0x18, 0x23, 0x06, 0x49, 0x58, 0x43, 0x40, 0x18, + 0x00, 0x21, 0x02, 0x79, 0x03, 0x68, 0x1a, 0x70, + 0x01, 0x31, 0x08, 0x30, 0x3c, 0x00, 0xc8, 0x28, + 0x00, 0x00, 0x03, 0x29, 0xf8, 0xd3, 0x70, 0x47, + 0x00, 0x00, 0x28, 0x52, 0x01, 0x00, 0x03, 0x49, + 0x00, 0x28, 0x00, 0xd0, 0x01, 0x1c, 0x02, 0x48, + 0x81, 0x62, 0x70, 0x47, 0x00, 0x00, 0x85, 0x75, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0xf8, 0xb5, + 0xff, 0xf7, 0x33, 0xff, 0x28, 0x4f, 0x00, 0x28, + 0x04, 0xd0, 0xff, 0xf7, 0xc8, 0xff, 0x38, 0x6a, + 0x01, 0x30, 0x38, 0x62, 0xf8, 0x6a, 0x3c, 0x00, + 0x04, 0x29, 0x00, 0x00, 0x00, 0x28, 0x02, 0xd0, + 0x01, 0x89, 0x04, 0x39, 0x01, 0x81, 0x38, 0x6b, + 0x00, 0x25, 0x00, 0x28, 0x08, 0xd0, 0x0b, 0x20, + 0x3d, 0x63, 0x10, 0xf0, 0xe5, 0xfa, 0x1e, 0x49, + 0x08, 0x68, 0x21, 0x22, 0x90, 0x43, 0x08, 0x60, + 0x38, 0x78, 0x3c, 0x21, 0x1b, 0x4a, 0x41, 0x43, + 0x8c, 0x18, 0xff, 0x22, 0x79, 0x6a, 0x3a, 0x70, + 0x00, 0x29, 0x0c, 0xd0, 0xb9, 0x69, 0x01, 0x31, + 0x3c, 0x00, 0x40, 0x29, 0x00, 0x00, 0xb9, 0x61, + 0x7d, 0x62, 0xbd, 0x68, 0x00, 0x2d, 0x04, 0xd0, + 0x63, 0x6b, 0x7a, 0x6b, 0x00, 0x21, 0xfd, 0xf7, + 0x47, 0xfd, 0xf8, 0xbd, 0x04, 0x28, 0x03, 0xd3, + 0x01, 0x21, 0x84, 0x20, 0xfe, 0xf7, 0xa1, 0xfc, + 0x38, 0x69, 0x26, 0x1c, 0x01, 0x30, 0x38, 0x61, + 0x20, 0x36, 0x30, 0x78, 0x02, 0x28, 0x03, 0xd0, + 0x0c, 0x21, 0x84, 0x20, 0xfe, 0xf7, 0x95, 0xfc, + 0x35, 0x70, 0x3c, 0x00, 0x7c, 0x29, 0x00, 0x00, + 0xa1, 0x69, 0x00, 0x29, 0xe8, 0xd0, 0x63, 0x6b, + 0x30, 0x34, 0x20, 0x78, 0x0c, 0x1c, 0x00, 0x21, + 0x7a, 0x6b, 0xfd, 0xf7, 0x27, 0xfd, 0xdf, 0xe7, + 0x04, 0x6c, 0x01, 0x00, 0xf4, 0x00, 0x07, 0x00, + 0x18, 0xdb, 0x01, 0x00, 0x10, 0xb5, 0x0b, 0x4c, + 0x60, 0x6a, 0x00, 0x28, 0x0e, 0xd0, 0x0a, 0x48, + 0x00, 0xf0, 0x12, 0xfb, 0x00, 0x20, 0x60, 0x62, + 0xa4, 0x68, 0x00, 0x2c, 0x3c, 0x00, 0xb8, 0x29, + 0x00, 0x00, 0x05, 0xd0, 0x7e, 0x23, 0xdb, 0x43, + 0x00, 0x22, 0x01, 0x21, 0xfd, 0xf7, 0x0d, 0xfd, + 0x10, 0xbd, 0xe0, 0x69, 0x01, 0x30, 0xe0, 0x61, + 0x10, 0xbd, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x30, + 0x07, 0x00, 0x09, 0x48, 0x41, 0x68, 0x3f, 0x22, + 0x12, 0x04, 0x91, 0x43, 0x0d, 0x22, 0x12, 0x04, + 0x89, 0x18, 0x41, 0x60, 0x41, 0x68, 0x01, 0x22, + 0x52, 0x02, 0x91, 0x43, 0x41, 0x60, 0x3c, 0x00, + 0xf4, 0x29, 0x00, 0x00, 0x03, 0x48, 0x81, 0x78, + 0x81, 0x70, 0x81, 0x78, 0x81, 0x70, 0x70, 0x47, + 0x80, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, + 0xf0, 0xb5, 0x01, 0x25, 0x08, 0x24, 0x00, 0x20, + 0x0e, 0x4a, 0x0f, 0x49, 0x00, 0x26, 0x3c, 0x23, + 0x43, 0x43, 0xd1, 0x52, 0x9b, 0x18, 0x5d, 0x71, + 0x9b, 0x60, 0x5e, 0x61, 0x1c, 0x82, 0xc0, 0x27, + 0xdf, 0x60, 0x20, 0x27, 0xfe, 0x54, 0x9e, 0x61, + 0x3c, 0x00, 0x30, 0x2a, 0x00, 0x00, 0x30, 0x27, + 0xfe, 0x54, 0x07, 0x4f, 0x3f, 0x18, 0x20, 0x37, + 0x01, 0x30, 0x05, 0x28, 0x9f, 0x63, 0xe9, 0xd3, + 0x05, 0x48, 0xff, 0x32, 0x01, 0x32, 0x90, 0x62, + 0xf0, 0xbd, 0x18, 0xdb, 0x01, 0x00, 0xbe, 0xba, + 0x00, 0x00, 0x30, 0x80, 0x07, 0x00, 0x06, 0x6c, + 0x01, 0x00, 0x01, 0x49, 0x48, 0x60, 0x70, 0x47, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x05, 0x49, + 0x08, 0x5c, 0x3c, 0x00, 0x6c, 0x2a, 0x00, 0x00, + 0x05, 0x49, 0x49, 0x68, 0x40, 0x18, 0xc0, 0x06, + 0xc0, 0x0e, 0x04, 0x49, 0x20, 0x30, 0x48, 0x72, + 0x70, 0x47, 0x00, 0x00, 0xa0, 0x57, 0x01, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x80, 0x07, 0x00, + 0x80, 0xb5, 0x15, 0x21, 0x84, 0x20, 0xfe, 0xf7, + 0x07, 0xfc, 0x80, 0xbd, 0xf8, 0xb5, 0x43, 0x48, + 0x84, 0x68, 0x03, 0x34, 0x42, 0x4d, 0x04, 0xe0, + 0x20, 0x1c, 0x10, 0xf0, 0x3c, 0x00, 0xa8, 0x2a, + 0x00, 0x00, 0xb9, 0xf8, 0x00, 0x28, 0x71, 0xd1, + 0x28, 0x69, 0xc0, 0x07, 0xf7, 0xd5, 0x3e, 0x48, + 0x28, 0x60, 0x3e, 0x4a, 0x14, 0x1c, 0x20, 0x34, + 0x20, 0x79, 0x00, 0x90, 0x3c, 0x23, 0x3c, 0x49, + 0x58, 0x43, 0x45, 0x18, 0x28, 0x79, 0xff, 0xf7, + 0xcc, 0xff, 0x28, 0x1c, 0x3a, 0x49, 0x08, 0x30, + 0x48, 0x60, 0x01, 0x26, 0x08, 0x1c, 0x06, 0x60, + 0x68, 0x6a, 0x00, 0x28, 0x0d, 0xd0, 0x3c, 0x00, + 0xe4, 0x2a, 0x00, 0x00, 0xa9, 0x6a, 0x92, 0x6a, + 0x35, 0x4b, 0x9f, 0x68, 0xd7, 0x1b, 0x1a, 0x68, + 0x51, 0x18, 0x79, 0x18, 0x8a, 0x42, 0x5a, 0x68, + 0x00, 0xd8, 0x00, 0xe0, 0x01, 0x32, 0x06, 0xc0, + 0xe8, 0x6a, 0xfe, 0xf7, 0x87, 0xff, 0x2d, 0x49, + 0xe8, 0x6a, 0x48, 0x60, 0x30, 0x1c, 0x0e, 0x60, + 0x66, 0x79, 0x1f, 0xe0, 0x2b, 0x48, 0x46, 0x61, + 0x04, 0x7f, 0x29, 0x49, 0x20, 0x1c, 0x50, 0x39, + 0x3c, 0x00, 0x20, 0x2b, 0x00, 0x00, 0x89, 0x6a, + 0xfd, 0xf7, 0x5a, 0xfc, 0x00, 0x98, 0x84, 0x42, + 0x10, 0xd0, 0x3c, 0x20, 0x22, 0x49, 0x60, 0x43, + 0x40, 0x18, 0x87, 0x69, 0x00, 0x2f, 0x09, 0xd0, + 0x00, 0x21, 0x20, 0x30, 0x01, 0x70, 0x7e, 0x23, + 0xdb, 0x43, 0x02, 0x21, 0x00, 0x22, 0x20, 0x1c, + 0xfd, 0xf7, 0x4c, 0xfc, 0x01, 0x20, 0xa0, 0x40, + 0x86, 0x43, 0x00, 0x2e, 0xdd, 0xd1, 0xe9, 0x69, + 0x00, 0x29, 0x3c, 0x00, 0x5c, 0x2b, 0x00, 0x00, + 0x03, 0xd0, 0x30, 0x20, 0x40, 0x5d, 0xfd, 0xf7, + 0x3a, 0xfc, 0x16, 0x4c, 0x50, 0x3c, 0x60, 0x6a, + 0x00, 0x28, 0x03, 0xd0, 0x0a, 0x21, 0x84, 0x20, + 0xfe, 0xf7, 0x96, 0xfb, 0x20, 0x35, 0x28, 0x78, + 0x01, 0x28, 0x03, 0xd0, 0x0b, 0x21, 0x84, 0x20, + 0xfe, 0xf7, 0x8e, 0xfb, 0x02, 0x20, 0x28, 0x70, + 0xe0, 0x68, 0x01, 0x30, 0x00, 0xe0, 0x07, 0xe0, + 0xe0, 0x60, 0x00, 0x98, 0x3c, 0x00, 0x98, 0x2b, + 0x00, 0x00, 0x20, 0x70, 0x00, 0x98, 0x60, 0x70, + 0x0a, 0x48, 0x00, 0x68, 0x60, 0x63, 0xf8, 0xbd, + 0x00, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x40, + 0x07, 0x00, 0x01, 0x00, 0x00, 0x01, 0x30, 0x80, + 0x07, 0x00, 0x18, 0xdb, 0x01, 0x00, 0x00, 0x30, + 0x07, 0x00, 0x54, 0x6c, 0x01, 0x00, 0x00, 0xa0, + 0x07, 0x00, 0x78, 0x6e, 0x01, 0x00, 0x3c, 0x22, + 0x3c, 0x23, 0x4a, 0x43, 0x09, 0x49, 0x3c, 0x00, + 0xd4, 0x2b, 0x00, 0x00, 0xb0, 0xb5, 0x54, 0x18, + 0x58, 0x43, 0x45, 0x18, 0x21, 0x1c, 0x38, 0x22, + 0x28, 0x1c, 0xfd, 0xf7, 0xe5, 0xfc, 0xa0, 0x6b, + 0x00, 0x78, 0xa9, 0x6b, 0x08, 0x70, 0x00, 0x20, + 0x20, 0x34, 0x20, 0x70, 0xb0, 0xbd, 0x00, 0x00, + 0x18, 0xdb, 0x01, 0x00, 0x3c, 0x23, 0x07, 0x49, + 0x58, 0x43, 0x10, 0xb5, 0x44, 0x18, 0x20, 0x34, + 0x20, 0x78, 0x02, 0x28, 0x03, 0xd1, 0x0d, 0x21, + 0x3c, 0x00, 0x10, 0x2c, 0x00, 0x00, 0x84, 0x20, + 0xfe, 0xf7, 0x47, 0xfb, 0x00, 0x20, 0x20, 0x70, + 0x10, 0xbd, 0x18, 0xdb, 0x01, 0x00, 0xff, 0xb5, + 0x3c, 0x20, 0x48, 0x43, 0x1a, 0x49, 0x81, 0xb0, + 0x44, 0x18, 0x26, 0x1c, 0x20, 0x36, 0x30, 0x78, + 0x15, 0x1c, 0x0f, 0x9f, 0x02, 0x28, 0x03, 0xd1, + 0x04, 0x21, 0x84, 0x20, 0xfe, 0xf7, 0x31, 0xfb, + 0x01, 0x20, 0x30, 0x70, 0x25, 0x71, 0x0b, 0x99, + 0x30, 0x22, 0x3c, 0x00, 0x4c, 0x2c, 0x00, 0x00, + 0x61, 0x80, 0x0a, 0x99, 0xe1, 0x62, 0x0d, 0x99, + 0xa1, 0x61, 0x0c, 0x99, 0xe1, 0x61, 0x0e, 0x99, + 0x61, 0x62, 0xa7, 0x62, 0x01, 0x99, 0x11, 0x55, + 0x7e, 0x21, 0xc9, 0x43, 0x61, 0x63, 0x04, 0x99, + 0x00, 0x29, 0x00, 0xd1, 0x00, 0x20, 0x06, 0x1c, + 0x28, 0x1c, 0x08, 0xf0, 0x8b, 0xf8, 0x00, 0x28, + 0x01, 0xd0, 0x02, 0x20, 0x00, 0xe0, 0x00, 0x20, + 0xa1, 0x6b, 0x30, 0x43, 0x3c, 0x00, 0x88, 0x2c, + 0x00, 0x00, 0x08, 0x70, 0x05, 0xb0, 0xf0, 0xbd, + 0x00, 0x00, 0x18, 0xdb, 0x01, 0x00, 0x80, 0xb5, + 0x14, 0x21, 0x84, 0x20, 0xfe, 0xf7, 0x03, 0xfb, + 0x80, 0xbd, 0x01, 0x48, 0x40, 0x78, 0x70, 0x47, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x02, 0x48, + 0x00, 0x69, 0xc0, 0x07, 0xc0, 0x0f, 0x70, 0x47, + 0x00, 0x00, 0x00, 0x40, 0x07, 0x00, 0x01, 0x1c, + 0x3c, 0x23, 0x04, 0x4a, 0x59, 0x43, 0x3c, 0x00, + 0xc4, 0x2c, 0x00, 0x00, 0x89, 0x18, 0x20, 0x31, + 0x09, 0x78, 0x01, 0x20, 0x00, 0x29, 0x00, 0xd0, + 0x00, 0x20, 0x70, 0x47, 0x18, 0xdb, 0x01, 0x00, + 0x08, 0x48, 0x40, 0x6a, 0x00, 0x28, 0x0a, 0xd1, + 0x07, 0x4a, 0x00, 0x21, 0x20, 0x23, 0x9b, 0x5c, + 0x02, 0x2b, 0x04, 0xd0, 0x01, 0x31, 0x3c, 0x32, + 0x05, 0x29, 0xf7, 0xd3, 0x70, 0x47, 0x01, 0x20, + 0x70, 0x47, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x3c, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x18, 0xdb, + 0x01, 0x00, 0xf8, 0xb5, 0x0e, 0x1c, 0x04, 0x1c, + 0x17, 0x1c, 0xfe, 0xf7, 0x82, 0xfe, 0x20, 0x1c, + 0x11, 0x4c, 0x60, 0x60, 0x01, 0x20, 0x20, 0x60, + 0x10, 0x4d, 0x68, 0x69, 0x01, 0x30, 0x68, 0x61, + 0x68, 0x6a, 0x00, 0x28, 0x03, 0xd0, 0x07, 0x21, + 0x84, 0x20, 0xfe, 0xf7, 0xba, 0xfa, 0xa0, 0x68, + 0x40, 0x07, 0x03, 0xd5, 0x06, 0x21, 0x84, 0x20, + 0xfe, 0xf7, 0x3c, 0x00, 0x3c, 0x2d, 0x00, 0x00, + 0xb3, 0xfa, 0x08, 0x48, 0x00, 0x69, 0x00, 0x28, + 0x03, 0xda, 0xaa, 0x21, 0x84, 0x20, 0xfe, 0xf7, + 0xab, 0xfa, 0x02, 0x20, 0x68, 0x62, 0xae, 0x60, + 0x2f, 0x70, 0xf8, 0xbd, 0x00, 0x30, 0x07, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x40, 0x07, 0x00, + 0x04, 0x4a, 0x51, 0x80, 0x10, 0x71, 0x03, 0x48, + 0x03, 0x49, 0x08, 0x30, 0x48, 0x60, 0x01, 0x20, + 0x08, 0x60, 0x70, 0x47, 0x3c, 0x00, 0x78, 0x2d, + 0x00, 0x00, 0x3c, 0x6c, 0x01, 0x00, 0x00, 0x30, + 0x07, 0x00, 0x00, 0x21, 0x00, 0x23, 0x05, 0xe0, + 0x02, 0x89, 0x43, 0x60, 0xc0, 0x68, 0x51, 0x18, + 0x09, 0x04, 0x09, 0x0c, 0x00, 0x28, 0xf7, 0xd1, + 0x04, 0x31, 0x08, 0x04, 0x00, 0x0c, 0x70, 0x47, + 0x00, 0x00, 0x02, 0x4a, 0x51, 0x6b, 0x08, 0x43, + 0x50, 0x63, 0x70, 0x47, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x38, 0xb5, 0x0a, 0x4c, 0x3c, 0x00, + 0xb4, 0x2d, 0x00, 0x00, 0x22, 0x1c, 0x20, 0x32, + 0x95, 0x79, 0x00, 0xab, 0x1d, 0x70, 0xd2, 0x79, + 0x5a, 0x70, 0x03, 0x68, 0x40, 0x68, 0x06, 0x4a, + 0x50, 0x65, 0x05, 0x48, 0x13, 0x65, 0x50, 0x30, + 0x81, 0x60, 0x00, 0xab, 0x18, 0x88, 0xe0, 0x84, + 0x38, 0xbd, 0x00, 0x00, 0x00, 0x10, 0x07, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x98, 0xb5, 0x0d, 0x4c, + 0x20, 0x1c, 0x20, 0x30, 0x81, 0x79, 0x00, 0xab, + 0x3c, 0x00, 0xf0, 0x2d, 0x00, 0x00, 0x19, 0x70, + 0xc0, 0x79, 0x58, 0x70, 0x0a, 0x48, 0x00, 0xf0, + 0xec, 0xf8, 0x09, 0x49, 0x00, 0x20, 0x48, 0x62, + 0xff, 0xf7, 0x69, 0xff, 0x00, 0x28, 0x03, 0xd0, + 0x12, 0x21, 0x84, 0x20, 0xfe, 0xf7, 0x49, 0xfa, + 0x00, 0xab, 0x18, 0x88, 0xe0, 0x84, 0x98, 0xbd, + 0x00, 0x00, 0x00, 0x10, 0x07, 0x00, 0x00, 0x30, + 0x07, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x03, 0x48, + 0x01, 0x7a, 0x3c, 0x00, 0x2c, 0x2e, 0x00, 0x00, + 0xfe, 0x22, 0x91, 0x43, 0x0a, 0x31, 0x01, 0x72, + 0x70, 0x47, 0x00, 0x00, 0x00, 0x80, 0x07, 0x00, + 0x90, 0xb5, 0x0e, 0x4c, 0x85, 0xb0, 0xa0, 0x78, + 0x02, 0x28, 0x14, 0xd1, 0x03, 0x20, 0xa0, 0x70, + 0x0b, 0x49, 0x00, 0x20, 0x00, 0x22, 0x04, 0x92, + 0x02, 0x90, 0x03, 0x91, 0xe1, 0x88, 0x01, 0x22, + 0x01, 0x92, 0x00, 0x91, 0x61, 0x78, 0x20, 0x78, + 0x22, 0x69, 0xe3, 0x68, 0x3c, 0x00, 0x68, 0x2e, + 0x00, 0x00, 0x08, 0xf0, 0x94, 0xfd, 0x04, 0x48, + 0x09, 0xf0, 0x7f, 0xf9, 0x05, 0xb0, 0x90, 0xbd, + 0x00, 0x00, 0xb4, 0x79, 0x01, 0x00, 0xad, 0xb6, + 0x00, 0x00, 0x71, 0xb6, 0x00, 0x00, 0xb0, 0xb5, + 0x0c, 0x4d, 0xac, 0x79, 0x0c, 0x49, 0x09, 0x78, + 0x00, 0x29, 0x03, 0xd0, 0x01, 0x29, 0x0e, 0xd0, + 0x02, 0x29, 0x08, 0xd1, 0xc2, 0x88, 0x00, 0x2a, + 0x09, 0xd0, 0x01, 0x23, 0x81, 0x68, 0x3c, 0x00, + 0xa4, 0x2e, 0x00, 0x00, 0x02, 0x20, 0x0f, 0xf0, + 0xc1, 0xf8, 0x03, 0xe0, 0x02, 0x21, 0x86, 0x20, + 0xfe, 0xf7, 0xf8, 0xf9, 0xac, 0x71, 0xb0, 0xbd, + 0x20, 0x10, 0x07, 0x00, 0xa0, 0x79, 0x01, 0x00, + 0x80, 0xb5, 0x02, 0x68, 0x07, 0x49, 0x4a, 0x60, + 0x03, 0x79, 0xca, 0x78, 0xcb, 0x70, 0x00, 0x79, + 0x90, 0x42, 0x06, 0xd0, 0x03, 0x48, 0x14, 0x30, + 0x00, 0x89, 0x07, 0xf0, 0x27, 0xfe, 0x06, 0xf0, + 0x3c, 0x00, 0xe0, 0x2e, 0x00, 0x00, 0xab, 0xfa, + 0x80, 0xbd, 0x84, 0x66, 0x01, 0x00, 0x70, 0xb5, + 0x16, 0x4c, 0x15, 0x4d, 0xa0, 0x78, 0x00, 0x26, + 0x98, 0x3d, 0x01, 0x28, 0x03, 0xd1, 0x28, 0x69, + 0x08, 0xf0, 0xfb, 0xfc, 0xa6, 0x70, 0x60, 0x68, + 0x01, 0x28, 0x03, 0xd0, 0x00, 0x21, 0x28, 0x69, + 0x00, 0xf0, 0xff, 0xfb, 0x0e, 0x48, 0x29, 0x69, + 0x0c, 0xf0, 0x31, 0xfa, 0x01, 0x20, 0x0c, 0xf0, + 0xe4, 0xf8, 0x3c, 0x00, 0x1c, 0x2f, 0x00, 0x00, + 0xe0, 0x78, 0x01, 0x28, 0x02, 0xd0, 0x01, 0x20, + 0x60, 0x70, 0x00, 0xe0, 0x66, 0x70, 0x06, 0x48, + 0x14, 0x30, 0x41, 0x68, 0x01, 0x29, 0x06, 0xd1, + 0x06, 0x60, 0x41, 0x6f, 0x00, 0x29, 0x02, 0xd0, + 0x00, 0x20, 0xfd, 0xf7, 0x4c, 0xfa, 0x70, 0xbd, + 0x84, 0x66, 0x01, 0x00, 0x34, 0x63, 0x01, 0x00, + 0x30, 0xb5, 0x00, 0x22, 0x00, 0x23, 0x01, 0x25, + 0x2c, 0x1c, 0x94, 0x40, 0x3c, 0x00, 0x58, 0x2f, + 0x00, 0x00, 0x04, 0x40, 0x01, 0xd0, 0xca, 0x54, + 0x01, 0x33, 0x01, 0x32, 0x0e, 0x2a, 0xf6, 0xdb, + 0x18, 0x1c, 0x30, 0xbd, 0x00, 0x00, 0xff, 0xb5, + 0x01, 0x27, 0x00, 0x26, 0x05, 0x1c, 0x02, 0x20, + 0x81, 0xb0, 0x00, 0x90, 0x00, 0x2d, 0x18, 0xd0, + 0x28, 0x78, 0xff, 0x28, 0x15, 0xd0, 0x00, 0x24, + 0x10, 0xe0, 0x28, 0x19, 0x80, 0x78, 0x0a, 0x99, + 0x00, 0x29, 0x01, 0xd0, 0x01, 0x06, 0x3c, 0x00, + 0x94, 0x2f, 0x00, 0x00, 0x08, 0xd5, 0x07, 0xf0, + 0xe9, 0xfe, 0x0e, 0x28, 0x03, 0xd0, 0x01, 0x21, + 0x81, 0x40, 0x0e, 0x43, 0x00, 0xe0, 0x00, 0x27, + 0x01, 0x34, 0x68, 0x78, 0xa0, 0x42, 0xeb, 0xdc, + 0x00, 0x98, 0x02, 0x9d, 0x01, 0x38, 0x00, 0x90, + 0xdf, 0xd1, 0x03, 0x98, 0x31, 0x1c, 0x81, 0x43, + 0x02, 0xd0, 0x03, 0x98, 0x06, 0x40, 0x00, 0x27, + 0x04, 0x98, 0x06, 0x60, 0x05, 0xb0, 0x38, 0x1c, + 0x3c, 0x00, 0xd0, 0x2f, 0x00, 0x00, 0xf0, 0xbd, + 0x00, 0x00, 0x02, 0x21, 0x01, 0x60, 0x64, 0x21, + 0x01, 0xe0, 0x01, 0x39, 0x02, 0xd0, 0x02, 0x68, + 0x92, 0x07, 0xfa, 0xd4, 0x01, 0x20, 0x00, 0x29, + 0x00, 0xd1, 0x00, 0x20, 0x70, 0x47, 0x10, 0xb5, + 0x00, 0x20, 0xc4, 0x43, 0x05, 0x4b, 0x02, 0x22, + 0x01, 0x01, 0x5a, 0x50, 0xc9, 0x18, 0x8c, 0x60, + 0x01, 0x30, 0x08, 0x28, 0xf8, 0xdb, 0x10, 0xbd, + 0x00, 0x00, 0x3c, 0x00, 0x0c, 0x30, 0x00, 0x00, + 0x00, 0x30, 0x07, 0x00, 0xf0, 0xb5, 0x05, 0x1c, + 0x60, 0x35, 0xc7, 0x6a, 0x04, 0x1c, 0x28, 0x7b, + 0x00, 0x2f, 0x8b, 0xb0, 0x15, 0xd0, 0x08, 0x28, + 0x15, 0xd2, 0x02, 0xa3, 0x1b, 0x5c, 0x5b, 0x00, + 0x9f, 0x44, 0x00, 0x00, 0x07, 0x04, 0x04, 0x07, + 0x09, 0x09, 0x0c, 0x0c, 0x01, 0x26, 0x00, 0x21, + 0x09, 0xe0, 0x00, 0x26, 0x06, 0xe0, 0x02, 0x26, + 0x02, 0x21, 0x04, 0xe0, 0x3c, 0x00, 0x48, 0x30, + 0x00, 0x00, 0x03, 0x26, 0x03, 0x21, 0x01, 0xe0, + 0x04, 0x26, 0x01, 0x21, 0x8c, 0x22, 0x12, 0x59, + 0x07, 0x91, 0x26, 0x49, 0x06, 0x90, 0x04, 0x91, + 0x00, 0x20, 0x03, 0x90, 0x05, 0x97, 0x08, 0x92, + 0xe0, 0x69, 0x22, 0x69, 0x21, 0x1c, 0x70, 0x31, + 0x01, 0x91, 0x21, 0x49, 0x00, 0x90, 0x70, 0x00, + 0x40, 0x18, 0x60, 0x30, 0x02, 0x92, 0x03, 0x88, + 0x59, 0x1c, 0x01, 0x80, 0x1e, 0x48, 0x3c, 0x00, + 0x84, 0x30, 0x00, 0x00, 0x02, 0x88, 0xa1, 0x68, + 0x0a, 0xa8, 0x09, 0xf0, 0xe1, 0xff, 0x60, 0x60, + 0xe8, 0x7a, 0xa1, 0x6a, 0xc9, 0x07, 0x00, 0x07, + 0x00, 0x0e, 0xc9, 0x0d, 0x08, 0x43, 0x61, 0x6a, + 0x22, 0x69, 0xc9, 0x07, 0x89, 0x0d, 0x01, 0x43, + 0x01, 0x20, 0x00, 0x2a, 0x00, 0xd1, 0x00, 0x20, + 0x80, 0x03, 0x08, 0x43, 0x21, 0x6a, 0xc9, 0x03, + 0x08, 0x43, 0x08, 0x21, 0x08, 0x43, 0x0a, 0x99, + 0x3c, 0x00, 0xc0, 0x30, 0x00, 0x00, 0x08, 0x80, + 0x20, 0x1c, 0xfe, 0xf7, 0x98, 0xfe, 0x20, 0x69, + 0x00, 0x28, 0x04, 0xd1, 0x20, 0x1c, 0x0a, 0xf0, + 0x82, 0xf9, 0x0b, 0xb0, 0xf0, 0xbd, 0x80, 0x79, + 0x06, 0x28, 0x01, 0xd9, 0xfe, 0xf7, 0x0f, 0xf9, + 0x20, 0x69, 0x06, 0x49, 0x80, 0x79, 0x80, 0x00, + 0x09, 0x58, 0x20, 0x1c, 0xfd, 0xf7, 0x74, 0xf9, + 0xef, 0xe7, 0x79, 0x2f, 0x01, 0x00, 0xc4, 0x69, + 0x01, 0x00, 0x3c, 0x00, 0xfc, 0x30, 0x00, 0x00, + 0x08, 0x61, 0x01, 0x00, 0x74, 0x57, 0x01, 0x00, + 0x10, 0xb5, 0x04, 0x1c, 0x58, 0x30, 0x8a, 0xb0, + 0x0e, 0xf0, 0x7c, 0xfe, 0x22, 0x1c, 0x80, 0x32, + 0x51, 0x68, 0x00, 0x29, 0x01, 0xd0, 0x11, 0x7a, + 0x07, 0xe0, 0x00, 0x28, 0x04, 0xd0, 0x80, 0x69, + 0x80, 0x07, 0x01, 0xd5, 0x03, 0x21, 0x00, 0xe0, + 0x01, 0x21, 0xd2, 0x68, 0x07, 0x91, 0x22, 0x49, + 0x00, 0x20, 0x08, 0x92, 0x3c, 0x00, 0x38, 0x31, + 0x00, 0x00, 0x04, 0x91, 0x00, 0x22, 0x05, 0x92, + 0x06, 0x90, 0x03, 0x90, 0xe0, 0x69, 0x22, 0x69, + 0x00, 0x90, 0x21, 0x1c, 0x70, 0x31, 0x1c, 0x48, + 0x01, 0x91, 0x02, 0x92, 0x03, 0x89, 0x59, 0x1c, + 0x01, 0x81, 0x1a, 0x48, 0x02, 0x88, 0xa1, 0x68, + 0x09, 0xa8, 0x09, 0xf0, 0x76, 0xff, 0x60, 0x60, + 0x6b, 0x20, 0x00, 0x5d, 0xa1, 0x6a, 0x22, 0x69, + 0xc9, 0x07, 0x00, 0x07, 0x00, 0x0e, 0x3c, 0x00, + 0x74, 0x31, 0x00, 0x00, 0xc9, 0x0d, 0x01, 0x43, + 0x01, 0x20, 0x00, 0x2a, 0x00, 0xd1, 0x00, 0x20, + 0x80, 0x03, 0x08, 0x43, 0x09, 0x99, 0x08, 0x80, + 0x20, 0x1c, 0xfe, 0xf7, 0x35, 0xfe, 0x20, 0x69, + 0x00, 0x28, 0x04, 0xd1, 0x20, 0x1c, 0x0a, 0xf0, + 0x1f, 0xf9, 0x0a, 0xb0, 0x10, 0xbd, 0x80, 0x79, + 0x06, 0x28, 0x01, 0xd9, 0xfe, 0xf7, 0xac, 0xf8, + 0x20, 0x69, 0x07, 0x49, 0x80, 0x79, 0x80, 0x00, + 0x3c, 0x00, 0xb0, 0x31, 0x00, 0x00, 0x09, 0x58, + 0x20, 0x1c, 0xfd, 0xf7, 0x11, 0xf9, 0xef, 0xe7, + 0x00, 0x00, 0xbd, 0x2f, 0x01, 0x00, 0x24, 0x6a, + 0x01, 0x00, 0x08, 0x61, 0x01, 0x00, 0x74, 0x57, + 0x01, 0x00, 0x3e, 0xb5, 0x05, 0x1c, 0x00, 0x69, + 0x04, 0x21, 0x07, 0xf0, 0xd2, 0xfa, 0x00, 0x28, + 0x09, 0xd0, 0x42, 0x78, 0x02, 0x32, 0x01, 0x1c, + 0x68, 0x46, 0xfd, 0xf7, 0x88, 0xf9, 0xe8, 0x6a, + 0x6c, 0x46, 0x3c, 0x00, 0xec, 0x31, 0x00, 0x00, + 0x02, 0x90, 0x00, 0xe0, 0x00, 0x24, 0x28, 0x1c, + 0x14, 0x30, 0x02, 0xf0, 0x03, 0xfb, 0x00, 0x28, + 0x04, 0xd0, 0x21, 0x1c, 0x28, 0x1c, 0x05, 0xf0, + 0xa5, 0xfe, 0x3e, 0xbd, 0x00, 0x2c, 0xfc, 0xd0, + 0x02, 0x49, 0x20, 0x1c, 0x49, 0x69, 0xfd, 0xf7, + 0xe2, 0xf8, 0xf6, 0xe7, 0x44, 0x7d, 0x01, 0x00, + 0x70, 0xb5, 0x1e, 0x1c, 0x18, 0x23, 0x58, 0x43, + 0x06, 0x4b, 0x04, 0x9d, 0x3c, 0x00, 0x28, 0x32, + 0x00, 0x00, 0x19, 0x50, 0xc4, 0x18, 0x00, 0x20, + 0x60, 0x61, 0x62, 0x60, 0xa6, 0x60, 0xe5, 0x60, + 0x0f, 0xf0, 0xb9, 0xfd, 0x20, 0x61, 0x70, 0xbd, + 0x00, 0x00, 0xb8, 0x7d, 0x01, 0x00, 0x02, 0x4a, + 0x01, 0x1c, 0x90, 0x69, 0x91, 0x61, 0x70, 0x47, + 0x00, 0x00, 0x44, 0x7d, 0x01, 0x00, 0x01, 0x48, + 0x40, 0x6b, 0x70, 0x47, 0x00, 0x00, 0x44, 0x7d, + 0x01, 0x00, 0x04, 0x49, 0x04, 0x4b, 0x3c, 0x00, + 0x64, 0x32, 0x00, 0x00, 0xca, 0x68, 0x09, 0x69, + 0x5c, 0x3b, 0x5b, 0x68, 0xc9, 0x1a, 0x41, 0x43, + 0x50, 0x18, 0x70, 0x47, 0xa0, 0x7d, 0x01, 0x00, + 0x01, 0x48, 0x00, 0x78, 0x70, 0x47, 0x00, 0x00, + 0x78, 0x69, 0x01, 0x00, 0x80, 0xb5, 0x06, 0x22, + 0x01, 0x49, 0xfd, 0xf7, 0x35, 0xf9, 0x80, 0xbd, + 0xfe, 0x67, 0x01, 0x00, 0xf0, 0xb5, 0x89, 0xb0, + 0x00, 0x93, 0x16, 0x4f, 0x13, 0x1c, 0x0e, 0x1c, + 0x3c, 0x00, 0xa0, 0x32, 0x00, 0x00, 0x04, 0x1c, + 0x3a, 0x1c, 0x01, 0xf0, 0x62, 0xff, 0x01, 0xa9, + 0x06, 0xa8, 0xa2, 0x68, 0x02, 0xf0, 0x0b, 0xf9, + 0x01, 0xaa, 0x06, 0xa9, 0x38, 0x1c, 0x63, 0x6a, + 0x02, 0xf0, 0x81, 0xfc, 0x05, 0x1c, 0x01, 0x28, + 0x14, 0xd1, 0x0c, 0x48, 0xfc, 0x21, 0xc8, 0x51, + 0x38, 0x1c, 0x02, 0xf0, 0x0c, 0xf8, 0x03, 0x21, + 0x30, 0x1c, 0x07, 0xf0, 0x52, 0xfa, 0x00, 0x28, + 0x07, 0xd0, 0x3c, 0x00, 0xdc, 0x32, 0x00, 0x00, + 0x80, 0x78, 0x00, 0xf0, 0x33, 0xfc, 0x20, 0x1c, + 0x10, 0x30, 0x0e, 0xf0, 0x47, 0xfd, 0x00, 0xe0, + 0x00, 0x25, 0x28, 0x1c, 0x09, 0xb0, 0xf0, 0xbd, + 0xf4, 0x67, 0x01, 0x00, 0xc1, 0x38, 0x00, 0x00, + 0x10, 0xb5, 0x07, 0x4c, 0x06, 0x48, 0x06, 0x22, + 0x21, 0x1d, 0x08, 0x38, 0xfd, 0xf7, 0xf6, 0xf8, + 0x01, 0xf0, 0xfc, 0xff, 0x00, 0xf0, 0x42, 0xfc, + 0x20, 0x1c, 0x02, 0xf0, 0x3c, 0x00, 0x18, 0x33, + 0x00, 0x00, 0x27, 0xfc, 0x10, 0xbd, 0xf4, 0x67, + 0x01, 0x00, 0x08, 0x49, 0xc9, 0x68, 0x00, 0x29, + 0x0a, 0xd0, 0x06, 0x4a, 0x01, 0x32, 0x51, 0x78, + 0x12, 0x78, 0x48, 0x43, 0x00, 0x2a, 0x01, 0xd1, + 0x08, 0x18, 0x70, 0x47, 0x10, 0x18, 0x70, 0x47, + 0x01, 0x30, 0x70, 0x47, 0x00, 0x00, 0x44, 0x7d, + 0x01, 0x00, 0x04, 0x4b, 0x05, 0x49, 0x00, 0x28, + 0x5a, 0x69, 0x00, 0xd0, 0x01, 0x1c, 0x3c, 0x00, + 0x54, 0x33, 0x00, 0x00, 0x10, 0x1c, 0x59, 0x61, + 0x70, 0x47, 0x00, 0x00, 0x44, 0x7d, 0x01, 0x00, + 0xb9, 0x75, 0x00, 0x00, 0x07, 0x49, 0x00, 0x20, + 0x0a, 0x78, 0x02, 0x2a, 0x09, 0xd1, 0x0a, 0x7c, + 0x00, 0x2a, 0x05, 0xd1, 0xca, 0x68, 0x00, 0x2a, + 0x03, 0xd0, 0x49, 0x69, 0x00, 0x29, 0x00, 0xd0, + 0x01, 0x20, 0x70, 0x47, 0x78, 0x69, 0x01, 0x00, + 0x0c, 0x4a, 0x80, 0xb5, 0x01, 0x21, 0x51, 0x60, + 0x3c, 0x00, 0x90, 0x33, 0x00, 0x00, 0x09, 0xf0, + 0x6a, 0xf8, 0x09, 0x48, 0x1c, 0x30, 0x81, 0x69, + 0x00, 0x29, 0x07, 0xd0, 0x00, 0x23, 0x83, 0x61, + 0x00, 0x22, 0x00, 0x21, 0x00, 0x20, 0x00, 0xf0, + 0xd2, 0xf8, 0x80, 0xbd, 0x00, 0x22, 0x00, 0x21, + 0x03, 0x48, 0x00, 0xf0, 0x5c, 0xf9, 0x80, 0xbd, + 0x00, 0x00, 0x5c, 0x69, 0x01, 0x00, 0x51, 0x35, + 0x00, 0x00, 0xb0, 0xb5, 0x0c, 0x1c, 0x01, 0x28, + 0x16, 0xd1, 0x3c, 0x00, 0xcc, 0x33, 0x00, 0x00, + 0x0e, 0x4d, 0x02, 0x2c, 0x09, 0xd1, 0x00, 0xf0, + 0x2b, 0xfa, 0x00, 0x28, 0x0e, 0xd0, 0x68, 0x69, + 0x00, 0x28, 0x0b, 0xd1, 0x21, 0x1c, 0x13, 0x20, + 0x0c, 0xe0, 0x03, 0x2c, 0xfa, 0xd1, 0x00, 0xf0, + 0xf9, 0xf9, 0x00, 0x28, 0x02, 0xd0, 0x28, 0x7c, + 0x00, 0x28, 0xf3, 0xd0, 0xb0, 0xbd, 0x21, 0x1c, + 0x00, 0x06, 0x00, 0x0e, 0x04, 0xf0, 0x62, 0xfc, + 0xb0, 0xbd, 0x00, 0x00, 0x3c, 0x00, 0x08, 0x34, + 0x00, 0x00, 0x78, 0x69, 0x01, 0x00, 0xb0, 0xb5, + 0x0c, 0x4c, 0x00, 0x25, 0x25, 0x74, 0x65, 0x61, + 0xe5, 0x60, 0x00, 0xf0, 0x3c, 0xfa, 0x00, 0xf0, + 0x34, 0xfa, 0x07, 0x48, 0x1c, 0x38, 0x05, 0x61, + 0x09, 0xf0, 0x33, 0xff, 0x20, 0x78, 0x00, 0x28, + 0x02, 0xd1, 0x04, 0xf0, 0x6e, 0xfa, 0xb0, 0xbd, + 0x02, 0x28, 0xfc, 0xd1, 0x04, 0xf0, 0xa5, 0xfb, + 0xb0, 0xbd, 0x78, 0x69, 0x01, 0x00, 0x3c, 0x00, + 0x44, 0x34, 0x00, 0x00, 0x0c, 0x48, 0x80, 0xb5, + 0x01, 0x78, 0x00, 0x29, 0x12, 0xd0, 0xc0, 0x68, + 0x00, 0x28, 0x0f, 0xd1, 0x08, 0x48, 0x1c, 0x38, + 0x40, 0x69, 0x00, 0x28, 0x0a, 0xd1, 0x07, 0x48, + 0x00, 0x68, 0x00, 0x28, 0x06, 0xd0, 0x00, 0x22, + 0x07, 0x21, 0x10, 0x20, 0x10, 0xf0, 0xa0, 0xf9, + 0x02, 0xf0, 0x2c, 0xfc, 0x80, 0xbd, 0x00, 0x00, + 0x78, 0x69, 0x01, 0x00, 0xd4, 0x67, 0x01, 0x00, + 0x3c, 0x00, 0x80, 0x34, 0x00, 0x00, 0xf8, 0xb5, + 0x1d, 0x4e, 0x1c, 0x4d, 0x04, 0x1c, 0xf0, 0x68, + 0x02, 0x27, 0x1c, 0x3d, 0x00, 0x28, 0x07, 0xd0, + 0xe8, 0x68, 0x00, 0x28, 0x04, 0xd0, 0xfd, 0xf7, + 0xc2, 0xfe, 0x00, 0x28, 0x00, 0xd0, 0xbc, 0x43, + 0x00, 0x2c, 0x14, 0xd0, 0x37, 0x70, 0xf0, 0x68, + 0x14, 0x4f, 0x00, 0x28, 0x10, 0xd0, 0xe0, 0x07, + 0x17, 0xd4, 0xfd, 0xf7, 0xb4, 0xfe, 0x00, 0x28, + 0x13, 0xd0, 0x3c, 0x00, 0xbc, 0x34, 0x00, 0x00, + 0x70, 0x69, 0x00, 0x28, 0x06, 0xd1, 0xe8, 0x68, + 0x00, 0x28, 0x01, 0xd0, 0xfd, 0xf7, 0x1a, 0xff, + 0x0d, 0xf0, 0x0a, 0xfa, 0xf8, 0xbd, 0x68, 0x69, + 0x00, 0x28, 0x05, 0xd1, 0x09, 0x48, 0x00, 0x68, + 0x00, 0x28, 0x01, 0xd0, 0x01, 0x2c, 0x04, 0xd1, + 0x39, 0x1c, 0x20, 0x1c, 0x0e, 0xf0, 0x52, 0xfd, + 0xf0, 0xe7, 0x04, 0xf0, 0x1d, 0xfb, 0x02, 0xf0, + 0xeb, 0xfb, 0xeb, 0xe7, 0x3c, 0x00, 0xf8, 0x34, + 0x00, 0x00, 0x78, 0x69, 0x01, 0x00, 0x50, 0xc3, + 0x00, 0x00, 0xd4, 0x67, 0x01, 0x00, 0x05, 0x48, + 0x41, 0x69, 0x00, 0x29, 0x04, 0xd0, 0x40, 0x6a, + 0x00, 0x28, 0x01, 0xd0, 0x01, 0x20, 0x70, 0x47, + 0x00, 0x20, 0x70, 0x47, 0x00, 0x00, 0x78, 0x69, + 0x01, 0x00, 0x10, 0xb5, 0x04, 0x1c, 0x06, 0x49, + 0x00, 0x20, 0x48, 0x60, 0x08, 0x60, 0x88, 0x60, + 0x08, 0xf0, 0x9b, 0xff, 0x07, 0x21, 0x3c, 0x00, + 0x34, 0x35, 0x00, 0x00, 0x12, 0x20, 0x22, 0x79, + 0x10, 0xf0, 0x3a, 0xf9, 0x10, 0xbd, 0x00, 0x00, + 0x5c, 0x69, 0x01, 0x00, 0x01, 0x49, 0x01, 0x20, + 0x08, 0x60, 0x70, 0x47, 0xe8, 0x67, 0x01, 0x00, + 0xf8, 0xb5, 0x07, 0x1c, 0x0e, 0x1c, 0x08, 0xf0, + 0xa3, 0xfa, 0x13, 0x4d, 0x04, 0x1c, 0x68, 0x68, + 0x00, 0x28, 0x17, 0xd0, 0x00, 0x2f, 0x02, 0xd0, + 0xa8, 0x68, 0x03, 0x28, 0x13, 0xd3, 0x00, 0x20, + 0x3c, 0x00, 0x70, 0x35, 0x00, 0x00, 0xa8, 0x60, + 0x68, 0x60, 0x21, 0x1c, 0x0f, 0x20, 0x0e, 0xf0, + 0xf0, 0xfe, 0x28, 0x68, 0x00, 0x28, 0x03, 0xd0, + 0x00, 0x2c, 0x06, 0xd1, 0x01, 0x20, 0x02, 0xe0, + 0x01, 0x2c, 0x02, 0xd1, 0x00, 0x20, 0xff, 0xf7, + 0xfa, 0xfe, 0xf8, 0xbd, 0x72, 0x1c, 0x00, 0x21, + 0x04, 0x48, 0x00, 0xf0, 0x68, 0xf8, 0xa8, 0x68, + 0x01, 0x30, 0xa8, 0x60, 0xf5, 0xe7, 0x5c, 0x69, + 0x01, 0x00, 0x3c, 0x00, 0xac, 0x35, 0x00, 0x00, + 0x51, 0x35, 0x00, 0x00, 0x0a, 0x49, 0x80, 0xb5, + 0xca, 0x68, 0x00, 0x2a, 0x0b, 0xd0, 0x42, 0x68, + 0x00, 0x2a, 0x09, 0xd0, 0x00, 0x22, 0x4a, 0x62, + 0x02, 0x68, 0x0a, 0x62, 0x02, 0x68, 0x07, 0x21, + 0x17, 0x20, 0x10, 0xf0, 0xef, 0xf8, 0x80, 0xbd, + 0x01, 0x20, 0x48, 0x62, 0x80, 0xbd, 0x00, 0x00, + 0x78, 0x69, 0x01, 0x00, 0x70, 0xb5, 0x14, 0x4d, + 0x84, 0x6c, 0xe9, 0x68, 0x3c, 0x00, 0xe8, 0x35, + 0x00, 0x00, 0x00, 0x29, 0x17, 0xd0, 0x40, 0x30, + 0xec, 0x61, 0x40, 0x78, 0x00, 0x28, 0x01, 0xd1, + 0x01, 0x20, 0x68, 0x62, 0x28, 0x6a, 0x0e, 0x4e, + 0x00, 0x1b, 0xb0, 0x42, 0x0c, 0xd2, 0x08, 0xf0, + 0x3a, 0xfe, 0x29, 0x6a, 0x40, 0x1a, 0xb0, 0x42, + 0x03, 0xd2, 0x02, 0x22, 0x07, 0x21, 0x13, 0x20, + 0x09, 0xe0, 0x04, 0xf0, 0xb6, 0xfa, 0x70, 0xbd, + 0x07, 0x48, 0xa9, 0x68, 0x0b, 0xf0, 0x3c, 0x00, + 0x24, 0x36, 0x00, 0x00, 0xbd, 0xfe, 0x22, 0x1c, + 0x07, 0x21, 0x16, 0x20, 0x10, 0xf0, 0xc0, 0xf8, + 0x70, 0xbd, 0x00, 0x00, 0x78, 0x69, 0x01, 0x00, + 0xa0, 0x86, 0x01, 0x00, 0x34, 0x63, 0x01, 0x00, + 0x0a, 0x49, 0x80, 0xb5, 0x00, 0x20, 0x88, 0x61, + 0x08, 0x69, 0x00, 0x28, 0x0c, 0xd0, 0x07, 0x48, + 0x1c, 0x30, 0x00, 0x78, 0x00, 0x28, 0x07, 0xd0, + 0x01, 0xf0, 0xd2, 0xff, 0x02, 0x28, 0x03, 0xd1, + 0x3c, 0x00, 0x60, 0x36, 0x00, 0x00, 0x00, 0xf0, + 0x12, 0xf9, 0x00, 0xf0, 0xbc, 0xf8, 0x80, 0xbd, + 0x00, 0x00, 0x5c, 0x69, 0x01, 0x00, 0xf0, 0xb5, + 0x06, 0x1c, 0x0c, 0x1c, 0x15, 0x1c, 0x91, 0xb0, + 0x01, 0xa8, 0x40, 0x21, 0xfc, 0xf7, 0x0d, 0xff, + 0x00, 0x21, 0x68, 0x46, 0xfd, 0xf7, 0xa7, 0xff, + 0x04, 0x90, 0x01, 0xa8, 0x06, 0x22, 0x08, 0x49, + 0xfc, 0xf7, 0x31, 0xff, 0x06, 0x22, 0x02, 0xa8, + 0x02, 0x30, 0x3c, 0x00, 0x9c, 0x36, 0x00, 0x00, + 0x06, 0x49, 0xfc, 0xf7, 0x2b, 0xff, 0x00, 0xab, + 0xdc, 0x76, 0x0c, 0x95, 0x31, 0x1c, 0x01, 0xa8, + 0x07, 0xf0, 0x4e, 0xf8, 0x11, 0xb0, 0xf0, 0xbd, + 0x12, 0x61, 0x01, 0x00, 0xf8, 0x67, 0x01, 0x00, + 0x03, 0x1c, 0x08, 0x1c, 0x19, 0x1c, 0x11, 0x4b, + 0x80, 0xb5, 0x06, 0xd0, 0x04, 0x21, 0x11, 0x80, + 0x04, 0x22, 0x19, 0x1c, 0xfc, 0xf7, 0x12, 0xff, + 0x16, 0xe0, 0x04, 0x22, 0x3c, 0x00, 0xd8, 0x36, + 0x00, 0x00, 0x01, 0x1c, 0x18, 0x1c, 0xfc, 0xf7, + 0x0c, 0xff, 0x09, 0x48, 0x10, 0x38, 0x00, 0x69, + 0x00, 0x28, 0x0c, 0xd0, 0x07, 0x48, 0x0c, 0x30, + 0x00, 0x78, 0x00, 0x28, 0x07, 0xd0, 0x01, 0xf0, + 0x84, 0xff, 0x02, 0x28, 0x03, 0xd1, 0x00, 0xf0, + 0xc4, 0xf8, 0x00, 0xf0, 0x6e, 0xf8, 0x01, 0x20, + 0x80, 0xbd, 0x6c, 0x69, 0x01, 0x00, 0xf8, 0xb5, + 0x04, 0x1c, 0x0f, 0x1c, 0x00, 0x25, 0x3c, 0x00, + 0x14, 0x37, 0x00, 0x00, 0x00, 0x26, 0x01, 0xf0, + 0x73, 0xff, 0x02, 0x28, 0x2f, 0xd1, 0x19, 0x49, + 0x01, 0x2f, 0x08, 0x68, 0x07, 0xd1, 0x02, 0x1c, + 0x22, 0x40, 0x0a, 0xd1, 0x20, 0x43, 0x08, 0x60, + 0xa0, 0x42, 0x06, 0xd1, 0x04, 0xe0, 0x00, 0x28, + 0x03, 0xd0, 0xa0, 0x43, 0x08, 0x60, 0x00, 0xd1, + 0x01, 0x25, 0x48, 0x68, 0x00, 0x28, 0x1a, 0xd1, + 0x00, 0x2d, 0x17, 0xd0, 0x01, 0x20, 0x48, 0x60, + 0x3c, 0x00, 0x50, 0x37, 0x00, 0x00, 0x38, 0x1c, + 0x08, 0xf0, 0x89, 0xfe, 0x0b, 0x48, 0x1c, 0x30, + 0x81, 0x69, 0x00, 0x29, 0x07, 0xd0, 0x00, 0x23, + 0x83, 0x61, 0x00, 0x22, 0x00, 0x21, 0x00, 0x20, + 0xff, 0xf7, 0xf1, 0xfe, 0x06, 0xe0, 0x00, 0x22, + 0x00, 0x21, 0x04, 0x48, 0xff, 0xf7, 0x7b, 0xff, + 0x00, 0xe0, 0x01, 0x26, 0x30, 0x1c, 0xf8, 0xbd, + 0x00, 0x00, 0x5c, 0x69, 0x01, 0x00, 0x51, 0x35, + 0x00, 0x00, 0x3c, 0x00, 0x8c, 0x37, 0x00, 0x00, + 0x03, 0x1c, 0x08, 0x1c, 0x19, 0x1c, 0x12, 0x4b, + 0x80, 0xb5, 0x06, 0xd0, 0x04, 0x21, 0x11, 0x80, + 0x04, 0x22, 0x19, 0x1c, 0xfc, 0xf7, 0xaa, 0xfe, + 0x18, 0xe0, 0x04, 0x22, 0x01, 0x1c, 0x18, 0x1c, + 0xfc, 0xf7, 0xa4, 0xfe, 0x0a, 0x48, 0x10, 0x30, + 0xc1, 0x68, 0x00, 0x29, 0x0e, 0xd0, 0x00, 0x78, + 0x00, 0x28, 0x0b, 0xd0, 0x01, 0xf0, 0x1e, 0xff, + 0x02, 0x28, 0x07, 0xd1, 0x3c, 0x00, 0xc8, 0x37, + 0x00, 0x00, 0x00, 0xf0, 0x64, 0xf8, 0x00, 0xf0, + 0x2e, 0xf8, 0x00, 0x28, 0x01, 0xd1, 0x09, 0xf0, + 0x7a, 0xfd, 0x01, 0x20, 0x80, 0xbd, 0x68, 0x69, + 0x01, 0x00, 0x10, 0xb5, 0x0a, 0x4c, 0x20, 0x69, + 0x00, 0x28, 0x09, 0xd0, 0xa1, 0x69, 0x00, 0x29, + 0x06, 0xd1, 0x7d, 0x21, 0xc9, 0x00, 0x41, 0x43, + 0x03, 0x22, 0x07, 0x20, 0x0f, 0xf0, 0xe1, 0xfe, + 0x21, 0x69, 0x01, 0x20, 0x00, 0x29, 0x3c, 0x00, + 0x04, 0x38, 0x00, 0x00, 0x00, 0xd1, 0x00, 0x20, + 0x10, 0xbd, 0x00, 0x00, 0x5c, 0x69, 0x01, 0x00, + 0x10, 0xb5, 0x05, 0x4c, 0x00, 0x28, 0x03, 0xd0, + 0xfd, 0xf7, 0x9a, 0xfc, 0xe0, 0x60, 0x10, 0xbd, + 0x01, 0x20, 0x00, 0x21, 0xe1, 0x60, 0x10, 0xbd, + 0x78, 0x69, 0x01, 0x00, 0x0a, 0x48, 0x0a, 0x49, + 0x10, 0xb5, 0xc0, 0x68, 0x1c, 0x39, 0xc9, 0x68, + 0x00, 0x28, 0x03, 0xd0, 0x00, 0x29, 0x01, 0xd0, + 0x3c, 0x00, 0x40, 0x38, 0x00, 0x00, 0x01, 0x24, + 0x00, 0xe0, 0x00, 0x24, 0x00, 0x2c, 0x03, 0xd0, + 0x02, 0x22, 0x07, 0x20, 0x0f, 0xf0, 0xb7, 0xfe, + 0x20, 0x1c, 0x10, 0xbd, 0x00, 0x00, 0x78, 0x69, + 0x01, 0x00, 0x10, 0xb5, 0x09, 0x4c, 0x00, 0x20, + 0x21, 0x69, 0x00, 0x29, 0x0c, 0xd0, 0x06, 0x49, + 0x1c, 0x31, 0x09, 0x78, 0x00, 0x29, 0x07, 0xd0, + 0x00, 0xf0, 0x09, 0xf8, 0x01, 0x20, 0xa0, 0x61, + 0x20, 0x69, 0x3c, 0x00, 0x7c, 0x38, 0x00, 0x00, + 0x7d, 0x23, 0xdb, 0x00, 0x58, 0x43, 0x10, 0xbd, + 0x5c, 0x69, 0x01, 0x00, 0x80, 0xb5, 0x03, 0x21, + 0x07, 0x20, 0x0f, 0xf0, 0xd1, 0xfe, 0x80, 0xbd, + 0x80, 0xb5, 0x02, 0x21, 0x07, 0x20, 0x0f, 0xf0, + 0xcb, 0xfe, 0x80, 0xbd, 0x06, 0x48, 0x80, 0xb5, + 0x00, 0x78, 0x00, 0x28, 0x01, 0xd0, 0xfd, 0xf7, + 0x29, 0xfd, 0x00, 0x22, 0x07, 0x21, 0x11, 0x20, + 0x0f, 0xf0, 0x7c, 0xff, 0x3c, 0x00, 0xb8, 0x38, + 0x00, 0x00, 0x80, 0xbd, 0x00, 0x00, 0x78, 0x69, + 0x01, 0x00, 0x10, 0xb5, 0x04, 0x1c, 0x10, 0x1c, + 0x06, 0x4a, 0x51, 0x61, 0x00, 0xf0, 0xa3, 0xf8, + 0x10, 0x20, 0x00, 0x2c, 0x00, 0xd1, 0x11, 0x20, + 0x00, 0x22, 0x07, 0x21, 0x0f, 0xf0, 0x69, 0xff, + 0x10, 0xbd, 0x5c, 0x69, 0x01, 0x00, 0x01, 0x49, + 0x48, 0x62, 0x70, 0x47, 0x00, 0x00, 0x44, 0x7d, + 0x01, 0x00, 0x10, 0xb5, 0x09, 0x4c, 0x3c, 0x00, + 0xf4, 0x38, 0x00, 0x00, 0xe0, 0x69, 0x00, 0x28, + 0x0c, 0xd1, 0xe0, 0x62, 0x01, 0x20, 0xe0, 0x61, + 0x0b, 0xf0, 0x08, 0xfd, 0x0b, 0xf0, 0x74, 0xfe, + 0x01, 0x20, 0x00, 0xf0, 0xb5, 0xf8, 0x0f, 0xf0, + 0x4d, 0xfa, 0x60, 0x63, 0x10, 0xbd, 0x00, 0x00, + 0x44, 0x7d, 0x01, 0x00, 0x05, 0x49, 0x80, 0xb5, + 0x00, 0x20, 0xc8, 0x61, 0x88, 0x63, 0x00, 0xf0, + 0x89, 0xf8, 0x00, 0xf0, 0x01, 0xf9, 0x02, 0xf0, + 0x3c, 0x00, 0x30, 0x39, 0x00, 0x00, 0x91, 0xfb, + 0x80, 0xbd, 0x44, 0x7d, 0x01, 0x00, 0x10, 0xb5, + 0x01, 0x28, 0x38, 0xd1, 0x08, 0x06, 0x00, 0x0e, + 0x05, 0x28, 0x32, 0xd1, 0x1d, 0x4c, 0x20, 0x78, + 0x01, 0x28, 0x09, 0xd0, 0x02, 0x28, 0x1b, 0xd0, + 0x03, 0x28, 0x2a, 0xd1, 0x02, 0xf0, 0x7d, 0xfb, + 0x00, 0xf0, 0x6f, 0xf8, 0x01, 0x20, 0x10, 0xe0, + 0x17, 0x48, 0x21, 0x6b, 0x0b, 0xf0, 0x1b, 0xfd, + 0x0b, 0xf0, 0x3c, 0x00, 0x6c, 0x39, 0x00, 0x00, + 0x41, 0xfe, 0x15, 0x48, 0x00, 0x69, 0x03, 0x28, + 0x01, 0xd3, 0xc0, 0x07, 0x03, 0xd5, 0x01, 0x21, + 0x20, 0x6b, 0x07, 0xf0, 0x19, 0xff, 0x02, 0x20, + 0x00, 0xf0, 0x78, 0xf8, 0x10, 0xbd, 0x0f, 0x48, + 0x00, 0x68, 0x20, 0x64, 0x0a, 0x48, 0x5c, 0x30, + 0xc1, 0x68, 0x02, 0x69, 0x89, 0x18, 0xc1, 0x60, + 0x03, 0xf0, 0xcc, 0xfc, 0x03, 0x20, 0x00, 0xf0, + 0x69, 0xf8, 0x01, 0x20, 0x3c, 0x00, 0xa8, 0x39, + 0x00, 0x00, 0xe0, 0x62, 0x10, 0xbd, 0x09, 0x21, + 0x00, 0xe0, 0x08, 0x21, 0x09, 0x20, 0xfd, 0xf7, + 0x76, 0xfc, 0x10, 0xbd, 0x00, 0x00, 0x44, 0x7d, + 0x01, 0x00, 0x34, 0x63, 0x01, 0x00, 0xf4, 0x68, + 0x01, 0x00, 0x78, 0x6e, 0x01, 0x00, 0xb0, 0xb5, + 0x0f, 0x4c, 0x20, 0x78, 0x65, 0x1e, 0x01, 0x28, + 0x0f, 0xd1, 0x00, 0x20, 0xff, 0xf7, 0xa1, 0xfc, + 0x0c, 0x49, 0x09, 0x88, 0x49, 0x08, 0x3c, 0x00, + 0xe4, 0x39, 0x00, 0x00, 0x40, 0x1a, 0x0f, 0xf0, + 0x19, 0xf9, 0x00, 0x28, 0x04, 0xd0, 0x28, 0x78, + 0x01, 0x28, 0x07, 0xd0, 0x02, 0x28, 0x05, 0xd0, + 0x20, 0x78, 0x00, 0x28, 0x04, 0xd1, 0x28, 0x78, + 0x03, 0x28, 0x01, 0xd1, 0x01, 0x20, 0xb0, 0xbd, + 0x00, 0x20, 0xb0, 0xbd, 0x45, 0x7d, 0x01, 0x00, + 0xf4, 0x67, 0x01, 0x00, 0x01, 0x49, 0xc8, 0x64, + 0x70, 0x47, 0x00, 0x00, 0x44, 0x7d, 0x01, 0x00, + 0x3c, 0x00, 0x20, 0x3a, 0x00, 0x00, 0x04, 0x49, + 0x05, 0x4a, 0x89, 0x68, 0x12, 0x6d, 0x01, 0x20, + 0x91, 0x42, 0x00, 0xd3, 0x00, 0x20, 0x70, 0x47, + 0x00, 0x00, 0xf4, 0x68, 0x01, 0x00, 0x44, 0x7d, + 0x01, 0x00, 0x10, 0xb5, 0x06, 0x4c, 0x20, 0x6b, + 0x07, 0xf0, 0xf9, 0xfe, 0xa0, 0x6b, 0x00, 0x28, + 0x03, 0xd1, 0x03, 0x48, 0x21, 0x6b, 0x0b, 0xf0, + 0x92, 0xfc, 0x10, 0xbd, 0x00, 0x00, 0x44, 0x7d, + 0x01, 0x00, 0x3c, 0x00, 0x5c, 0x3a, 0x00, 0x00, + 0x34, 0x63, 0x01, 0x00, 0x04, 0x48, 0x00, 0x78, + 0x02, 0x28, 0x01, 0xd0, 0x03, 0x28, 0x01, 0xd1, + 0x01, 0x20, 0x70, 0x47, 0x00, 0x20, 0x70, 0x47, + 0x44, 0x7d, 0x01, 0x00, 0xf8, 0xb5, 0x07, 0x1c, + 0xff, 0xf7, 0xd0, 0xff, 0x06, 0x1c, 0x01, 0x2f, + 0x26, 0x4d, 0x1f, 0xd0, 0x02, 0x2f, 0x45, 0xd0, + 0x03, 0x2f, 0x12, 0xd1, 0x24, 0x48, 0x25, 0x4b, + 0x00, 0x69, 0x6a, 0x69, 0x3c, 0x00, 0x98, 0x3a, + 0x00, 0x00, 0x41, 0x08, 0x5a, 0x43, 0x23, 0x4b, + 0xd4, 0x18, 0x8c, 0x42, 0x00, 0xd9, 0x0c, 0x1c, + 0x00, 0x2e, 0x05, 0xd0, 0x1e, 0x49, 0x5b, 0x39, + 0x09, 0x78, 0x00, 0x29, 0x00, 0xd1, 0x04, 0x1c, + 0x05, 0x22, 0x21, 0x1c, 0x09, 0x20, 0x0f, 0xf0, + 0x80, 0xfd, 0x18, 0x4a, 0x5c, 0x3a, 0x17, 0x70, + 0xf8, 0xbd, 0xff, 0xf7, 0xd6, 0xfb, 0x00, 0x28, + 0x02, 0xd0, 0x28, 0x69, 0x00, 0x28, 0x3c, 0x00, + 0xd4, 0x3a, 0x00, 0x00, 0x0e, 0xd0, 0x04, 0xf0, + 0xcf, 0xfb, 0x13, 0x4b, 0x69, 0x69, 0x11, 0x4a, + 0x59, 0x43, 0x5c, 0x3a, 0xd2, 0x6b, 0x89, 0x18, + 0x88, 0x42, 0x01, 0xd9, 0x44, 0x1a, 0x04, 0xe0, + 0x00, 0x24, 0x02, 0xe0, 0x04, 0xf0, 0xae, 0xfd, + 0x04, 0x1c, 0x00, 0x2e, 0xdb, 0xd0, 0x09, 0x48, + 0x5b, 0x38, 0x00, 0x78, 0x01, 0x28, 0xd6, 0xd1, + 0x08, 0x4b, 0x9c, 0x42, 0x02, 0xd9, 0x58, 0x42, + 0x3c, 0x00, 0x10, 0x3b, 0x00, 0x00, 0x24, 0x18, + 0xd0, 0xe7, 0x00, 0x24, 0xce, 0xe7, 0x04, 0xf0, + 0xae, 0xfb, 0xca, 0xe7, 0x00, 0x00, 0xf4, 0x68, + 0x01, 0x00, 0xa0, 0x7d, 0x01, 0x00, 0x98, 0x3a, + 0x00, 0x00, 0x88, 0x13, 0x00, 0x00, 0x80, 0xb5, + 0x05, 0x21, 0x09, 0x20, 0x0f, 0xf0, 0x7d, 0xfd, + 0x02, 0x49, 0x00, 0x20, 0x08, 0x70, 0x80, 0xbd, + 0x00, 0x00, 0x44, 0x7d, 0x01, 0x00, 0x70, 0xb5, + 0x06, 0x1c, 0x3c, 0x00, 0x4c, 0x3b, 0x00, 0x00, + 0x0d, 0xf0, 0xbc, 0xfa, 0xff, 0xf7, 0xce, 0xfe, + 0x09, 0x4c, 0x0a, 0x48, 0x21, 0x6b, 0x0b, 0xf0, + 0x21, 0xfc, 0x01, 0x25, 0x01, 0x21, 0x30, 0x06, + 0x00, 0x0e, 0xa5, 0x63, 0x07, 0xf0, 0x3a, 0xfe, + 0x05, 0x48, 0x29, 0x02, 0x09, 0x58, 0x00, 0x29, + 0x00, 0xd1, 0x05, 0x61, 0x70, 0xbd, 0x00, 0x00, + 0x44, 0x7d, 0x01, 0x00, 0x34, 0x63, 0x01, 0x00, + 0xf4, 0x67, 0x01, 0x00, 0x3c, 0x00, 0x88, 0x3b, + 0x00, 0x00, 0x02, 0x4a, 0x11, 0x6c, 0x08, 0x43, + 0x10, 0x64, 0x70, 0x47, 0x00, 0x00, 0x44, 0x7d, + 0x01, 0x00, 0x80, 0xb5, 0xff, 0xf7, 0xbf, 0xfe, + 0x0b, 0xf0, 0xa1, 0xfb, 0x80, 0xbd, 0x02, 0x4a, + 0x01, 0x1c, 0x10, 0x69, 0x11, 0x61, 0x70, 0x47, + 0x00, 0x00, 0x44, 0x7d, 0x01, 0x00, 0xf3, 0xb5, + 0x06, 0x1c, 0x00, 0x20, 0x89, 0xb0, 0xf8, 0x4c, + 0x08, 0x90, 0xe2, 0x69, 0x08, 0x25, 0x3c, 0x00, + 0xc4, 0x3b, 0x00, 0x00, 0x00, 0x2a, 0x03, 0xd0, + 0x06, 0xa9, 0x07, 0xa8, 0xfc, 0xf7, 0x06, 0xfc, + 0x30, 0x1c, 0xf3, 0x4e, 0x00, 0x27, 0x20, 0x36, + 0x82, 0x28, 0x6f, 0xd0, 0x15, 0xdc, 0x01, 0x28, + 0x18, 0xd0, 0x80, 0x28, 0x6b, 0xd1, 0xee, 0x4d, + 0x80, 0x3d, 0xa8, 0x68, 0x01, 0x28, 0x67, 0xd1, + 0x68, 0x68, 0x0f, 0xf0, 0x1b, 0xf8, 0x00, 0x28, + 0x63, 0xd1, 0x01, 0x21, 0x01, 0x20, 0x0d, 0xf0, + 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x9d, 0xf8, + 0x08, 0xf0, 0xdb, 0xfd, 0x0b, 0xb0, 0xf0, 0xbd, + 0x83, 0x28, 0x6d, 0xd0, 0x84, 0x28, 0x55, 0xd1, + 0xe7, 0xe0, 0x0a, 0x98, 0x0a, 0x28, 0x04, 0xd2, + 0x03, 0xa3, 0x1b, 0x18, 0x1b, 0x5a, 0x5b, 0x00, + 0x9f, 0x44, 0xf6, 0xe0, 0x00, 0x00, 0xee, 0x00, + 0x0b, 0x00, 0xf7, 0x00, 0xf7, 0x00, 0xf7, 0x00, + 0xf7, 0x00, 0x2f, 0x00, 0x88, 0x00, 0x8b, 0x00, + 0xad, 0x00, 0x3c, 0x00, 0x3c, 0x3c, 0x00, 0x00, + 0x00, 0xf0, 0x56, 0xfe, 0x00, 0x28, 0x17, 0xd0, + 0xd6, 0x4a, 0x80, 0x3a, 0xd1, 0x6a, 0x06, 0x98, + 0x81, 0x42, 0x16, 0xd0, 0x06, 0x21, 0x00, 0x28, + 0x00, 0xd1, 0x07, 0x21, 0x0d, 0x06, 0x2d, 0x0e, + 0x00, 0x28, 0x0e, 0xd0, 0xcf, 0x4a, 0x01, 0x20, + 0x80, 0x3a, 0x50, 0x65, 0x0f, 0xf0, 0xa0, 0xf8, + 0xcc, 0x4a, 0x80, 0x3a, 0x50, 0x66, 0x04, 0xe0, + 0x00, 0x21, 0x16, 0x20, 0x3c, 0x00, 0x78, 0x3c, + 0x00, 0x00, 0x0f, 0xf0, 0xdc, 0xfc, 0x01, 0x25, + 0x02, 0x20, 0x05, 0x90, 0x2e, 0xe2, 0xc6, 0x48, + 0x80, 0x38, 0x40, 0x6d, 0x00, 0x28, 0x2e, 0xd0, + 0xc6, 0x49, 0x20, 0x69, 0xc4, 0x4d, 0x40, 0x18, + 0x0e, 0xf0, 0xc1, 0xff, 0x00, 0x28, 0x12, 0xd0, + 0x0f, 0xf0, 0x85, 0xf8, 0xc1, 0x49, 0x49, 0x42, + 0x40, 0x18, 0xbd, 0x49, 0x20, 0x61, 0x80, 0x39, + 0x48, 0x6e, 0x40, 0x19, 0x0e, 0xf0, 0x3c, 0x00, + 0xb4, 0x3c, 0x00, 0x00, 0xbb, 0xff, 0x00, 0x28, + 0x11, 0xd0, 0x0a, 0xe0, 0xf7, 0xe0, 0x17, 0xe2, + 0xb2, 0xe0, 0xb0, 0xe0, 0xb6, 0x49, 0x20, 0x69, + 0x80, 0x39, 0x49, 0x6e, 0x40, 0x1a, 0xa8, 0x42, + 0x05, 0xdb, 0xb3, 0x49, 0xb5, 0x4d, 0x80, 0x39, + 0x4f, 0x65, 0x03, 0xf0, 0x27, 0xfb, 0x06, 0x22, + 0x29, 0x1c, 0x16, 0x20, 0x0f, 0xf0, 0x72, 0xfc, + 0x47, 0xe0, 0x95, 0xe0, 0x00, 0xf0, 0xfe, 0xfd, + 0x3c, 0x00, 0xf0, 0x3c, 0x00, 0x00, 0x00, 0x28, + 0x42, 0xd1, 0xaa, 0x4d, 0xc4, 0x3d, 0xef, 0x60, + 0x08, 0xf0, 0x19, 0xfd, 0x03, 0xf0, 0x15, 0xfb, + 0xa8, 0x6a, 0x00, 0x28, 0x02, 0xd0, 0xff, 0xf7, + 0x4c, 0xff, 0xaf, 0x62, 0xa4, 0x48, 0x80, 0x38, + 0x00, 0x68, 0x00, 0x21, 0xff, 0xf7, 0xf9, 0xfc, + 0x08, 0xf0, 0x3f, 0xf9, 0x09, 0x21, 0x16, 0x20, + 0x0f, 0xf0, 0x87, 0xfc, 0x00, 0x22, 0x16, 0x21, + 0x83, 0x20, 0x3c, 0x00, 0x2c, 0x3d, 0x00, 0x00, + 0x0f, 0xf0, 0x40, 0xfd, 0xff, 0xf7, 0x86, 0xfc, + 0x21, 0xe0, 0x00, 0xf0, 0x1b, 0xfe, 0x1e, 0xe0, + 0x06, 0xf0, 0x54, 0xfa, 0x97, 0x4d, 0x80, 0x3d, + 0xa9, 0x6f, 0x40, 0x1a, 0x04, 0x90, 0x06, 0x98, + 0x00, 0x28, 0x01, 0xd0, 0xaf, 0x65, 0x02, 0xe0, + 0xa8, 0x6d, 0x00, 0x28, 0x08, 0xd1, 0x91, 0x48, + 0xc4, 0x38, 0x00, 0x78, 0x80, 0x07, 0x03, 0xd5, + 0x92, 0x48, 0x47, 0x60, 0x3c, 0x00, 0x68, 0x3d, + 0x00, 0x00, 0x00, 0xf0, 0x02, 0xfe, 0x04, 0x98, + 0xff, 0x38, 0x23, 0x38, 0x14, 0x28, 0x02, 0xd2, + 0x01, 0x20, 0xe8, 0x63, 0x53, 0xe0, 0xef, 0x63, + 0x51, 0xe0, 0x87, 0x4a, 0xb5, 0x7a, 0x80, 0x3a, + 0x00, 0x2d, 0x4c, 0xd0, 0x0d, 0xf0, 0x71, 0xff, + 0x00, 0xf0, 0xad, 0xfd, 0x07, 0x1c, 0x82, 0x48, + 0x80, 0x38, 0x40, 0x6f, 0xff, 0x30, 0x5f, 0x30, + 0x0e, 0xf0, 0x3d, 0xff, 0x02, 0x1c, 0x3c, 0x00, + 0xa4, 0x3d, 0x00, 0x00, 0x7e, 0x48, 0x80, 0x38, + 0x40, 0x6d, 0x00, 0x28, 0x1a, 0xd1, 0x00, 0xf0, + 0xf1, 0xfd, 0x00, 0x28, 0x16, 0xd1, 0x04, 0x2d, + 0x02, 0xd1, 0x00, 0x2f, 0x12, 0xd1, 0x1b, 0xe0, + 0x00, 0x2f, 0x06, 0xd0, 0x02, 0x2d, 0x14, 0xd0, + 0x79, 0x48, 0x40, 0x68, 0x00, 0x28, 0x09, 0xd0, + 0x12, 0xe0, 0x00, 0x2a, 0x10, 0xd1, 0x4b, 0x21, + 0xc9, 0x00, 0x01, 0x23, 0x09, 0x22, 0x16, 0x20, + 0x3c, 0x00, 0xe0, 0x3d, 0x00, 0x00, 0x0f, 0xf0, + 0xd6, 0xfc, 0x6e, 0x4a, 0x73, 0x48, 0x80, 0x3a, + 0x11, 0x68, 0x0b, 0xf0, 0xd8, 0xfa, 0x18, 0xe0, + 0x01, 0x21, 0x00, 0x20, 0x01, 0xe0, 0x01, 0x21, + 0x01, 0x20, 0x00, 0xf0, 0x2a, 0xfe, 0x10, 0xe0, + 0x67, 0x4a, 0x6c, 0x49, 0x80, 0x3a, 0x90, 0x6e, + 0x40, 0x18, 0x90, 0x66, 0x01, 0x25, 0x08, 0x95, + 0x8b, 0xe1, 0x04, 0x21, 0x6c, 0xe1, 0x61, 0x4a, + 0x66, 0x48, 0x3c, 0x00, 0x1c, 0x3e, 0x00, 0x00, + 0x80, 0x3a, 0x11, 0x68, 0x0b, 0xf0, 0xaa, 0xfa, + 0x88, 0xe1, 0xaf, 0x60, 0xa8, 0x6f, 0xe8, 0x67, + 0x63, 0x48, 0x01, 0x6d, 0xa9, 0x67, 0x07, 0x9a, + 0x14, 0x20, 0x00, 0x2a, 0x00, 0xd1, 0x00, 0x20, + 0x08, 0x18, 0x12, 0x30, 0xa8, 0x66, 0x70, 0x78, + 0xb0, 0x70, 0x30, 0x78, 0x70, 0x70, 0x02, 0x20, + 0x30, 0x70, 0xa0, 0x69, 0xfc, 0xf7, 0xc2, 0xfa, + 0xef, 0x64, 0xa8, 0x6f, 0x3c, 0x00, 0x58, 0x3e, + 0x00, 0x00, 0xe9, 0x6f, 0x59, 0x4b, 0x40, 0x1a, + 0x98, 0x42, 0x12, 0xd2, 0x68, 0x6d, 0x06, 0x99, + 0x88, 0x42, 0x0e, 0xd0, 0x30, 0x78, 0x02, 0x28, + 0x0b, 0xd8, 0x0e, 0xf0, 0x9c, 0xff, 0xa9, 0x6f, + 0x08, 0x22, 0x40, 0x1a, 0x52, 0x49, 0x09, 0x1a, + 0x3b, 0x1c, 0x16, 0x20, 0x0f, 0xf0, 0x85, 0xfc, + 0x00, 0xe0, 0xaf, 0x65, 0x01, 0x20, 0x05, 0x90, + 0x08, 0x90, 0x43, 0x48, 0x02, 0x25, 0x3c, 0x00, + 0x94, 0x3e, 0x00, 0x00, 0xc4, 0x38, 0xc1, 0x68, + 0x00, 0x29, 0x72, 0xd1, 0x01, 0x21, 0xc1, 0x60, + 0x49, 0x48, 0x00, 0x6b, 0x00, 0x28, 0x6c, 0xd0, + 0x08, 0xf0, 0x66, 0xfc, 0x69, 0xe0, 0x3c, 0x48, + 0x00, 0x22, 0x01, 0x92, 0x80, 0x38, 0x80, 0x68, + 0x01, 0x28, 0x04, 0xd1, 0x38, 0x48, 0x80, 0x38, + 0x87, 0x60, 0x01, 0x20, 0x48, 0xe1, 0x3a, 0x48, + 0x01, 0x23, 0x43, 0x60, 0x34, 0x48, 0xc4, 0x38, + 0x3c, 0x00, 0xd0, 0x3e, 0x00, 0x00, 0x00, 0x78, + 0x00, 0x28, 0x0a, 0xd1, 0x00, 0xf0, 0x25, 0xfe, + 0x00, 0x28, 0x06, 0xd0, 0xff, 0x21, 0x91, 0x31, + 0x01, 0x23, 0x09, 0x22, 0x16, 0x20, 0x0f, 0xf0, + 0x52, 0xfc, 0x2c, 0x49, 0x80, 0x39, 0x48, 0x6f, + 0x89, 0x6f, 0x42, 0x1a, 0x03, 0x92, 0x06, 0xf0, + 0x76, 0xf9, 0x28, 0x49, 0x80, 0x39, 0x89, 0x6f, + 0x03, 0x9a, 0x40, 0x1a, 0x02, 0x90, 0x37, 0x20, + 0x00, 0x01, 0x3c, 0x00, 0x0c, 0x3f, 0x00, 0x00, + 0x10, 0x1a, 0x50, 0x28, 0x0d, 0xd2, 0x23, 0x48, + 0x80, 0x38, 0x40, 0x6d, 0x00, 0x28, 0x04, 0xd1, + 0x02, 0x98, 0xff, 0x38, 0x55, 0x38, 0x14, 0x28, + 0x01, 0xd2, 0x01, 0x22, 0x00, 0xe0, 0x00, 0x22, + 0x01, 0x92, 0x03, 0x9a, 0x01, 0x20, 0xff, 0x3a, + 0x0b, 0x3a, 0x50, 0x2a, 0x00, 0xd3, 0x00, 0x20, + 0x04, 0x90, 0x00, 0x28, 0x0a, 0xd0, 0x17, 0x48, + 0x80, 0x38, 0xc0, 0x6f, 0x3c, 0x00, 0x48, 0x3f, + 0x00, 0x00, 0x08, 0x1a, 0x9b, 0x21, 0xc9, 0x00, + 0x40, 0x1a, 0x14, 0x28, 0x01, 0xd2, 0x01, 0x22, + 0x00, 0xe0, 0x00, 0x22, 0x00, 0x92, 0x00, 0x2a, + 0x11, 0xd0, 0x0f, 0x4d, 0x01, 0x20, 0x80, 0x3d, + 0x68, 0x65, 0x0e, 0xf0, 0x20, 0xff, 0x68, 0x66, + 0x01, 0x25, 0x01, 0x21, 0x16, 0x20, 0x0f, 0xf0, + 0x5e, 0xfb, 0x00, 0x21, 0x16, 0x20, 0x0f, 0xf0, + 0x5a, 0xfb, 0x00, 0xe0, 0xba, 0xe0, 0x3c, 0x00, + 0x84, 0x3f, 0x00, 0x00, 0xf0, 0x79, 0x02, 0x28, + 0x3c, 0xd8, 0x05, 0x4a, 0x80, 0x3a, 0x51, 0x6c, + 0x00, 0x29, 0x37, 0xd1, 0x13, 0x6c, 0x11, 0x1c, + 0x00, 0x2b, 0x33, 0xd1, 0x16, 0xe0, 0x00, 0x00, + 0x24, 0x6d, 0x01, 0x00, 0x50, 0xc3, 0x00, 0x00, + 0xc0, 0x5c, 0x15, 0x00, 0x70, 0x99, 0x14, 0x00, + 0xb0, 0x57, 0x01, 0x00, 0x34, 0x63, 0x01, 0x00, + 0xe2, 0x04, 0x00, 0x00, 0x00, 0x90, 0x07, 0x00, + 0x3c, 0x00, 0xc0, 0x3f, 0x00, 0x00, 0x53, 0x07, + 0x00, 0x00, 0x1e, 0x02, 0x00, 0x00, 0xc8, 0x57, + 0x01, 0x00, 0x4a, 0x6d, 0x00, 0x2a, 0x02, 0xd0, + 0xb2, 0x7a, 0x02, 0x2a, 0x15, 0xd1, 0x00, 0x9a, + 0x00, 0x2a, 0x03, 0xd0, 0xca, 0x6d, 0x01, 0x32, + 0xca, 0x65, 0x00, 0xe0, 0xcf, 0x65, 0x01, 0x9a, + 0x00, 0x2a, 0x0b, 0xd0, 0x8a, 0x6f, 0xcb, 0x6f, + 0xd2, 0x1a, 0x5a, 0x4b, 0x9a, 0x42, 0x02, 0xd2, + 0x8a, 0x6d, 0x3c, 0x00, 0xfc, 0x3f, 0x00, 0x00, + 0x01, 0x32, 0x00, 0xe0, 0x01, 0x22, 0x8a, 0x65, + 0x00, 0xe0, 0x8f, 0x65, 0x04, 0x99, 0x00, 0x29, + 0x01, 0xd1, 0x02, 0x28, 0x0b, 0xd9, 0x54, 0x4a, + 0x02, 0x28, 0x1e, 0xd9, 0xd0, 0x6f, 0x61, 0x68, + 0x88, 0x42, 0x1a, 0xd1, 0x91, 0x6f, 0x08, 0x1a, + 0x50, 0x49, 0x88, 0x42, 0x15, 0xdd, 0x4e, 0x4b, + 0x98, 0x6f, 0xe1, 0x68, 0x40, 0x1a, 0x7d, 0x21, + 0xc9, 0x00, 0x88, 0x42, 0x3c, 0x00, 0x38, 0x40, + 0x00, 0x00, 0x0b, 0xdd, 0x61, 0x69, 0x40, 0x1a, + 0x00, 0x28, 0x04, 0xdd, 0x02, 0x11, 0x40, 0x11, + 0x10, 0x18, 0x40, 0x18, 0x01, 0xe0, 0x80, 0x10, + 0x08, 0x18, 0x60, 0x61, 0x58, 0x6f, 0xe0, 0x60, + 0x03, 0x98, 0xff, 0x38, 0x23, 0x38, 0x14, 0x28, + 0x09, 0xd2, 0x02, 0x98, 0xff, 0x38, 0x23, 0x38, + 0x14, 0x28, 0x04, 0xd2, 0x3e, 0x4a, 0x90, 0x6f, + 0x50, 0x64, 0x90, 0x6a, 0x90, 0x64, 0x3c, 0x00, + 0x74, 0x40, 0x00, 0x00, 0x0e, 0xf0, 0x9a, 0xfe, + 0x3a, 0x49, 0x49, 0x6c, 0x40, 0x1a, 0x3b, 0x49, + 0x88, 0x42, 0x01, 0xd9, 0x37, 0x49, 0x4f, 0x64, + 0x39, 0x49, 0x03, 0x98, 0x40, 0x18, 0x14, 0x28, + 0x07, 0xd2, 0x34, 0x49, 0xc8, 0x6b, 0x00, 0x28, + 0x03, 0xd0, 0x88, 0x6f, 0x08, 0x64, 0x88, 0x6a, + 0x88, 0x64, 0x0e, 0xf0, 0x83, 0xfe, 0x2f, 0x49, + 0x09, 0x6c, 0x40, 0x1a, 0x31, 0x49, 0x88, 0x42, + 0x3c, 0x00, 0xb0, 0x40, 0x00, 0x00, 0x01, 0xd9, + 0x2c, 0x48, 0x07, 0x64, 0x04, 0x20, 0x05, 0x90, + 0x08, 0x21, 0x16, 0x20, 0x0f, 0xf0, 0xb9, 0xfa, + 0x28, 0x48, 0x40, 0x6d, 0x00, 0x28, 0x02, 0xd0, + 0x04, 0x99, 0x00, 0x29, 0x08, 0xd0, 0x29, 0x49, + 0x00, 0x28, 0x00, 0xd1, 0x29, 0x49, 0x3b, 0x1c, + 0x06, 0x22, 0x16, 0x20, 0x0f, 0xf0, 0x57, 0xfb, + 0x02, 0x2d, 0x09, 0xd0, 0x06, 0x2d, 0x0a, 0xd0, + 0x07, 0x2d, 0x3c, 0x00, 0xec, 0x40, 0x00, 0x00, + 0x13, 0xd1, 0x07, 0xe0, 0x01, 0x21, 0x16, 0x20, + 0xfd, 0xf7, 0xd6, 0xf8, 0x1e, 0xe0, 0x1a, 0x4a, + 0x57, 0x63, 0x97, 0x63, 0x18, 0x4a, 0x06, 0x98, + 0xd0, 0x62, 0x07, 0x99, 0x11, 0x63, 0x53, 0x6b, + 0x18, 0x43, 0x50, 0x63, 0x90, 0x6b, 0x08, 0x43, + 0x90, 0x63, 0x05, 0x98, 0x00, 0x28, 0x05, 0xd0, + 0x05, 0x98, 0x0c, 0xf0, 0x5f, 0xfa, 0x05, 0x98, + 0x0c, 0xf0, 0xd2, 0xf9, 0x3c, 0x00, 0x28, 0x41, + 0x00, 0x00, 0x08, 0x2d, 0x05, 0xd0, 0x0d, 0x48, + 0x44, 0x38, 0x85, 0x70, 0x28, 0x1c, 0x03, 0xf0, + 0xdc, 0xfd, 0x11, 0x49, 0xe0, 0x69, 0x88, 0x42, + 0x00, 0xd1, 0x61, 0xe5, 0x08, 0x98, 0x00, 0x28, + 0xfb, 0xd0, 0xb0, 0x7a, 0x02, 0x28, 0xf8, 0xd1, + 0x01, 0x21, 0x16, 0x20, 0x0f, 0xf0, 0x6f, 0xfa, + 0x02, 0x20, 0x0d, 0xf0, 0xe8, 0xfe, 0x53, 0xe5, + 0x00, 0x00, 0x53, 0x07, 0x00, 0x00, 0x3c, 0x00, + 0x64, 0x41, 0x00, 0x00, 0xa4, 0x6c, 0x01, 0x00, + 0x20, 0xa1, 0x07, 0x00, 0x20, 0x4e, 0x00, 0x00, + 0x3f, 0xfb, 0xff, 0xff, 0xa0, 0x86, 0x01, 0x00, + 0x50, 0xc3, 0x00, 0x00, 0xc0, 0x5c, 0x15, 0x00, + 0xf1, 0x1d, 0x00, 0x00, 0x70, 0x47, 0x00, 0x00, + 0x70, 0x47, 0x00, 0x00, 0xf8, 0xb5, 0x21, 0x48, + 0x00, 0x68, 0x21, 0x4d, 0x69, 0x69, 0x08, 0x40, + 0x01, 0xd1, 0x01, 0x27, 0x00, 0xe0, 0x00, 0x27, + 0x3c, 0x00, 0xa0, 0x41, 0x00, 0x00, 0x1d, 0x4d, + 0x01, 0x26, 0x69, 0x6a, 0x00, 0x29, 0x00, 0xd0, + 0x00, 0x26, 0x1b, 0x4d, 0x1a, 0x48, 0x2c, 0x1c, + 0xa0, 0x30, 0x02, 0x7a, 0x28, 0x1c, 0x40, 0x30, + 0x80, 0x34, 0x10, 0x23, 0xb7, 0x42, 0x10, 0xd1, + 0x01, 0x25, 0xc5, 0x80, 0x00, 0x29, 0x00, 0xd0, + 0x00, 0x23, 0x1a, 0x43, 0x11, 0x1c, 0x01, 0x73, + 0x01, 0x20, 0x0e, 0xf0, 0x88, 0xfe, 0x08, 0x20, + 0x20, 0x70, 0x3c, 0x00, 0xdc, 0x41, 0x00, 0x00, + 0x00, 0x22, 0x16, 0x21, 0x80, 0x20, 0x13, 0xe0, + 0x11, 0x27, 0xc7, 0x80, 0x2e, 0x1c, 0x0b, 0x4d, + 0x00, 0x29, 0x00, 0xd1, 0x00, 0x23, 0x1a, 0x43, + 0x11, 0x1c, 0x01, 0x73, 0x01, 0x20, 0x0e, 0xf0, + 0x75, 0xfe, 0x08, 0x20, 0x20, 0x70, 0x30, 0x6d, + 0x00, 0x22, 0x16, 0x21, 0x68, 0x67, 0x82, 0x20, + 0x0f, 0xf0, 0xd0, 0xfa, 0xf8, 0xbd, 0x00, 0x00, + 0x10, 0x00, 0x07, 0x00, 0x3c, 0x00, 0x18, 0x42, + 0x00, 0x00, 0xa4, 0x6c, 0x01, 0x00, 0x00, 0x90, + 0x07, 0x00, 0xb0, 0xb5, 0x0f, 0x4d, 0x04, 0x1c, + 0xaa, 0x7a, 0x01, 0x21, 0x08, 0x1c, 0x00, 0x2a, + 0x00, 0xd0, 0x00, 0x20, 0x00, 0x2c, 0x00, 0xd0, + 0x00, 0x21, 0x88, 0x42, 0x0a, 0xd0, 0x00, 0x2c, + 0x04, 0xd1, 0x00, 0xf0, 0x42, 0xfb, 0x00, 0xf0, + 0xd6, 0xfa, 0x03, 0xe0, 0x00, 0xf0, 0xd9, 0xfa, + 0x00, 0xf0, 0x09, 0xf8, 0xa8, 0x7a, 0x3c, 0x00, + 0x54, 0x42, 0x00, 0x00, 0x02, 0x49, 0xe4, 0x39, + 0x48, 0x71, 0xac, 0x72, 0xb0, 0xbd, 0x00, 0x00, + 0x44, 0x6d, 0x01, 0x00, 0x80, 0xb5, 0x3e, 0xf0, + 0x55, 0xf8, 0x02, 0x49, 0x01, 0x20, 0x08, 0x70, + 0x80, 0xbd, 0x00, 0x00, 0x68, 0x7e, 0x01, 0x00, + 0xf3, 0xb5, 0x01, 0x20, 0x8d, 0xb0, 0x0f, 0x1c, + 0x01, 0x24, 0x08, 0x90, 0x0e, 0xf0, 0x92, 0xfd, + 0x06, 0x1c, 0x00, 0xf0, 0xb5, 0xfa, 0x09, 0x90, + 0x3c, 0x00, 0x90, 0x42, 0x00, 0x00, 0x00, 0xf0, + 0x80, 0xfb, 0x07, 0x90, 0xfe, 0xf7, 0x3f, 0xfa, + 0x05, 0x1c, 0x00, 0x21, 0x0c, 0x91, 0x08, 0xf0, + 0xf0, 0xfb, 0x00, 0x28, 0x01, 0xd1, 0x01, 0x20, + 0x00, 0xe0, 0x00, 0x20, 0x0a, 0x90, 0xfe, 0xf7, + 0x12, 0xfd, 0x05, 0xf0, 0xe0, 0xfe, 0x0b, 0x90, + 0x00, 0x2d, 0x23, 0xd0, 0x28, 0x88, 0x41, 0x07, + 0x20, 0xd4, 0x29, 0x1d, 0x04, 0x91, 0x0a, 0x35, + 0x00, 0x06, 0x3c, 0x00, 0xcc, 0x42, 0x00, 0x00, + 0x80, 0x0e, 0x01, 0x21, 0x20, 0x28, 0x03, 0x95, + 0x00, 0xd0, 0x00, 0x21, 0x0d, 0x1c, 0x04, 0x98, + 0x06, 0xf0, 0x38, 0xfd, 0x0c, 0x90, 0x04, 0x98, + 0x06, 0xf0, 0x10, 0xfd, 0x00, 0x28, 0x08, 0xd0, + 0x03, 0x98, 0x01, 0xf0, 0x87, 0xfa, 0x00, 0x28, + 0x03, 0xd0, 0x00, 0x2d, 0x01, 0xd1, 0x01, 0x20, + 0x00, 0xe0, 0x00, 0x20, 0x0c, 0x99, 0x01, 0x43, + 0x0c, 0x91, 0xfc, 0xf7, 0x3c, 0x00, 0x08, 0x43, + 0x00, 0x00, 0x23, 0xff, 0x00, 0x28, 0x2f, 0xd0, + 0x07, 0xf0, 0x99, 0xff, 0x05, 0x1c, 0x07, 0xf0, + 0xb2, 0xff, 0x04, 0x90, 0xff, 0xf7, 0xf3, 0xf8, + 0x0c, 0x99, 0x01, 0x43, 0x00, 0x2d, 0x06, 0xd0, + 0x04, 0x98, 0xf0, 0x4a, 0x30, 0x1a, 0x90, 0x42, + 0x01, 0xd2, 0x01, 0x20, 0x00, 0xe0, 0x00, 0x20, + 0x08, 0x43, 0x0c, 0x90, 0x0b, 0x98, 0x0a, 0x9b, + 0x18, 0x43, 0x01, 0x1c, 0x0b, 0x91, 0x3c, 0x00, + 0x44, 0x43, 0x00, 0x00, 0x05, 0xf0, 0xce, 0xfe, + 0x00, 0x28, 0x1a, 0xd1, 0x00, 0x2d, 0x06, 0xd0, + 0x04, 0x98, 0xe7, 0x49, 0x30, 0x1a, 0x88, 0x42, + 0x01, 0xd2, 0x01, 0x20, 0x00, 0xe0, 0x00, 0x20, + 0x0c, 0x99, 0x08, 0x43, 0x05, 0x1c, 0x00, 0xf0, + 0x1f, 0xfb, 0x28, 0x43, 0x03, 0xe0, 0x00, 0xf0, + 0x1b, 0xfb, 0x0c, 0x99, 0x08, 0x43, 0x0c, 0x90, + 0x00, 0xf0, 0xd4, 0xfb, 0x0b, 0x99, 0x01, 0x43, + 0x3c, 0x00, 0x80, 0x43, 0x00, 0x00, 0x0b, 0x91, + 0xdc, 0x49, 0xc8, 0x68, 0x00, 0x28, 0x01, 0xd0, + 0x01, 0x38, 0xc8, 0x60, 0x08, 0xf0, 0xe7, 0xfb, + 0x06, 0x90, 0x08, 0xf0, 0x90, 0xfd, 0x31, 0x1a, + 0x05, 0x91, 0x06, 0x99, 0xd6, 0x48, 0x81, 0x42, + 0x08, 0xd8, 0x00, 0x2f, 0x08, 0xd1, 0x05, 0x99, + 0x40, 0x08, 0x81, 0x42, 0x04, 0xd9, 0x06, 0x99, + 0x81, 0x42, 0x01, 0xd9, 0x00, 0x24, 0x8b, 0xe0, + 0xd0, 0x48, 0x3c, 0x00, 0xbc, 0x43, 0x00, 0x00, + 0x05, 0x99, 0xd0, 0x4d, 0x81, 0x42, 0x26, 0xd2, + 0xe8, 0x79, 0x10, 0x28, 0x06, 0xd2, 0x00, 0x2f, + 0x21, 0xd1, 0xcc, 0x48, 0xa0, 0x38, 0x80, 0x6a, + 0x00, 0x28, 0x1c, 0xd1, 0x09, 0xf0, 0x62, 0xff, + 0x04, 0x90, 0x00, 0x28, 0x02, 0xd1, 0x00, 0x20, + 0xc3, 0x49, 0x13, 0xe0, 0x09, 0xf0, 0x10, 0xfe, + 0x00, 0x28, 0x03, 0xd0, 0xc4, 0x48, 0xc0, 0x69, + 0x00, 0x28, 0xf4, 0xd0, 0x3c, 0x00, 0xf8, 0x43, + 0x00, 0x00, 0x04, 0x98, 0x05, 0x28, 0x03, 0xd0, + 0xc1, 0x48, 0x00, 0x6a, 0x00, 0x28, 0x65, 0xd1, + 0xbb, 0x49, 0x48, 0x6a, 0x00, 0x28, 0x23, 0xd0, + 0x01, 0x38, 0x48, 0x62, 0x00, 0xf0, 0x87, 0xff, + 0x00, 0x28, 0x11, 0xd0, 0xbb, 0x48, 0x05, 0x99, + 0x81, 0x42, 0x0d, 0xd2, 0x01, 0xf0, 0x9b, 0xf8, + 0x04, 0x30, 0x0d, 0xf0, 0xee, 0xfc, 0x40, 0x30, + 0xc1, 0x7a, 0x01, 0x29, 0x4e, 0xd0, 0x3c, 0x00, + 0x34, 0x44, 0x00, 0x00, 0x80, 0x7a, 0x00, 0x28, + 0x01, 0xd0, 0x05, 0x28, 0x49, 0xd3, 0x01, 0xf0, + 0xdf, 0xf8, 0x02, 0x28, 0x10, 0xd0, 0x00, 0x2f, + 0x02, 0xd1, 0x06, 0x98, 0x00, 0x28, 0x40, 0xd1, + 0x00, 0x20, 0x08, 0x90, 0x82, 0xe1, 0xaa, 0x48, + 0xa0, 0x38, 0xc0, 0x68, 0x00, 0x28, 0x38, 0xd0, + 0xa8, 0x48, 0x80, 0x69, 0x48, 0x62, 0x34, 0xe0, + 0x0a, 0xa9, 0x03, 0xc9, 0x08, 0x43, 0x45, 0xd0, + 0x3c, 0x00, 0x70, 0x44, 0x00, 0x00, 0xa3, 0x48, + 0x29, 0x78, 0xa0, 0x38, 0x02, 0x29, 0x40, 0xd8, + 0x40, 0x6d, 0x00, 0x28, 0x0a, 0xd0, 0x9f, 0x48, + 0xa2, 0x49, 0x20, 0x38, 0xc0, 0x68, 0x40, 0x18, + 0x0e, 0xf0, 0xc7, 0xfb, 0x00, 0x28, 0x01, 0xd0, + 0x01, 0x21, 0x00, 0xe0, 0x00, 0x21, 0x96, 0x4a, + 0x90, 0x6a, 0x00, 0x28, 0x02, 0xda, 0x64, 0x08, + 0x64, 0x00, 0x2a, 0xe0, 0x00, 0x29, 0x09, 0xd1, + 0x95, 0x4b, 0x3c, 0x00, 0xac, 0x44, 0x00, 0x00, + 0xa0, 0x3b, 0x5b, 0x6d, 0x00, 0x2b, 0x02, 0xd0, + 0x05, 0x28, 0x0d, 0xdb, 0x01, 0xe0, 0x07, 0x28, + 0x0a, 0xdb, 0x01, 0x20, 0xc0, 0x43, 0x90, 0x62, + 0x64, 0x08, 0x8e, 0x49, 0x64, 0x00, 0x00, 0x20, + 0xa0, 0x39, 0x88, 0x65, 0x14, 0xe0, 0xd1, 0xe0, + 0x39, 0x43, 0x11, 0xd1, 0x89, 0x49, 0xa0, 0x39, + 0xcb, 0x6d, 0x00, 0x2b, 0x02, 0xd1, 0x89, 0x6d, + 0x01, 0x29, 0x09, 0xd9, 0x3c, 0x00, 0xe8, 0x44, + 0x00, 0x00, 0x07, 0x9b, 0x00, 0x2b, 0x01, 0xd1, + 0x07, 0x28, 0x01, 0xdb, 0x64, 0x08, 0x64, 0x00, + 0x01, 0x30, 0x90, 0x62, 0xbd, 0xe0, 0x7d, 0x49, + 0x88, 0x69, 0x04, 0x90, 0x00, 0x20, 0x88, 0x61, + 0x0c, 0x98, 0x00, 0x28, 0x2c, 0xd0, 0x07, 0xf0, + 0x66, 0xfc, 0x00, 0x28, 0x02, 0xd0, 0x02, 0x20, + 0x04, 0x43, 0x25, 0xe0, 0x7a, 0x48, 0xc0, 0x6a, + 0x00, 0x28, 0x04, 0xd1, 0x77, 0x48, 0x3c, 0x00, + 0x24, 0x45, 0x00, 0x00, 0xa0, 0x38, 0xc0, 0x68, + 0x00, 0x28, 0x1c, 0xd1, 0x04, 0x98, 0x00, 0x28, + 0x0d, 0xd1, 0x28, 0x78, 0x10, 0x28, 0x02, 0xd3, + 0xe8, 0x78, 0x02, 0x28, 0x02, 0xd9, 0x28, 0x79, + 0x10, 0x28, 0x04, 0xd3, 0x04, 0x24, 0x6b, 0x49, + 0x01, 0x22, 0x8a, 0x61, 0x94, 0xe0, 0x6c, 0x48, + 0xa0, 0x38, 0x40, 0x6d, 0x00, 0x28, 0x71, 0xd0, + 0x05, 0xf0, 0xa2, 0xfd, 0x00, 0x28, 0x6d, 0xd0, + 0x3c, 0x00, 0x60, 0x45, 0x00, 0x00, 0x64, 0x08, + 0x64, 0x00, 0x88, 0xe0, 0xff, 0xf7, 0x5b, 0xfa, + 0x00, 0x28, 0x1a, 0xd0, 0x68, 0x48, 0x00, 0x78, + 0x02, 0x28, 0x01, 0xd1, 0x00, 0x2f, 0x14, 0xd1, + 0x00, 0x20, 0xfe, 0xf7, 0x70, 0xfe, 0x30, 0x1a, + 0x04, 0x90, 0xff, 0xf7, 0x6c, 0xfa, 0x00, 0x28, + 0x07, 0xd0, 0xff, 0xf7, 0x1e, 0xfa, 0x00, 0x28, + 0x03, 0xd0, 0x5d, 0x49, 0x04, 0x98, 0x88, 0x42, + 0x4f, 0xd3, 0x3c, 0x00, 0x9c, 0x45, 0x00, 0x00, + 0x05, 0xf0, 0x6c, 0xfd, 0x00, 0x28, 0x4b, 0xd1, + 0x53, 0x49, 0x08, 0x78, 0x03, 0x28, 0x08, 0xd1, + 0x88, 0x68, 0x01, 0x22, 0xd2, 0x07, 0x30, 0x1a, + 0x90, 0x42, 0x41, 0xd2, 0x01, 0x22, 0x0a, 0x70, + 0x57, 0xe0, 0x54, 0x48, 0x00, 0x78, 0x02, 0x28, + 0x01, 0xd1, 0x00, 0x2f, 0x51, 0xd1, 0x4a, 0x49, + 0x88, 0x68, 0x51, 0x49, 0x80, 0x1b, 0x88, 0x42, + 0x07, 0xd9, 0x01, 0x20, 0x3c, 0x00, 0xd8, 0x45, + 0x00, 0x00, 0xfe, 0xf7, 0x42, 0xfe, 0x7d, 0x21, + 0x09, 0x01, 0x40, 0x18, 0x44, 0x49, 0x88, 0x60, + 0x4a, 0x48, 0x00, 0x78, 0x02, 0x28, 0x04, 0xd1, + 0x07, 0x9b, 0x00, 0x2b, 0x01, 0xd1, 0x01, 0x20, + 0x00, 0xe0, 0x00, 0x20, 0x47, 0x4b, 0x47, 0x49, + 0x58, 0x43, 0x40, 0x18, 0x3c, 0x49, 0x89, 0x68, + 0x89, 0x1b, 0x88, 0x42, 0x30, 0xd9, 0x07, 0x9b, + 0x00, 0x20, 0x03, 0x93, 0x00, 0xf0, 0x3c, 0x00, + 0x14, 0x46, 0x00, 0x00, 0x79, 0xff, 0x02, 0x90, + 0xff, 0xf7, 0xd8, 0xf9, 0x04, 0x90, 0x01, 0xf0, + 0x57, 0xf8, 0x04, 0x99, 0x02, 0x9a, 0x51, 0x43, + 0x48, 0x43, 0x01, 0x90, 0x00, 0xf0, 0xdc, 0xff, + 0x41, 0x1c, 0x01, 0x98, 0x01, 0x22, 0x48, 0x43, + 0x11, 0x1c, 0x00, 0xe0, 0x1b, 0xe0, 0x31, 0x4b, + 0x5b, 0x6a, 0x83, 0x42, 0x00, 0xd3, 0x00, 0x21, + 0x03, 0x9b, 0x01, 0x22, 0x00, 0x2b, 0x00, 0xd0, + 0x3c, 0x00, 0x50, 0x46, 0x00, 0x00, 0x00, 0x22, + 0x2c, 0x4b, 0x51, 0x43, 0x9b, 0x6a, 0x01, 0x22, + 0x83, 0x42, 0x00, 0xd3, 0x00, 0x22, 0x50, 0x00, + 0x08, 0x18, 0x03, 0xd0, 0x23, 0x49, 0x03, 0x20, + 0x08, 0x70, 0x03, 0xe0, 0x09, 0x98, 0xc0, 0x68, + 0x06, 0x28, 0x08, 0xd9, 0x02, 0x24, 0x08, 0x98, + 0x00, 0x28, 0x6e, 0xd0, 0x1d, 0x49, 0x00, 0x20, + 0xc8, 0x61, 0x48, 0x61, 0xa5, 0xe0, 0x1a, 0x49, + 0x48, 0x69, 0x3c, 0x00, 0x8c, 0x46, 0x00, 0x00, + 0x00, 0x28, 0x0a, 0xd1, 0x00, 0x2f, 0x05, 0xd0, + 0x01, 0x22, 0x4a, 0x61, 0xc8, 0x69, 0x80, 0x18, + 0xc8, 0x61, 0x0a, 0xe0, 0x00, 0x20, 0xc8, 0x61, + 0x03, 0xe0, 0x00, 0x2f, 0x05, 0xd1, 0x00, 0x20, + 0x48, 0x61, 0x0d, 0x98, 0x00, 0x28, 0x00, 0xd1, + 0xc8, 0x68, 0x00, 0x20, 0x08, 0x90, 0x08, 0x78, + 0x01, 0x28, 0x2f, 0xd0, 0x02, 0x28, 0x4b, 0xd1, + 0x00, 0x2f, 0x08, 0xd1, 0x3c, 0x00, 0xc8, 0x46, + 0x00, 0x00, 0xe8, 0x78, 0x00, 0x28, 0x02, 0xd1, + 0x28, 0x78, 0x10, 0x28, 0x43, 0xd2, 0x28, 0x79, + 0x10, 0x28, 0x40, 0xd2, 0x48, 0x68, 0x0a, 0x69, + 0x30, 0x1a, 0x90, 0x42, 0x67, 0xd3, 0x01, 0x22, + 0x0a, 0x70, 0x38, 0xe0, 0x00, 0x00, 0xe2, 0x04, + 0x00, 0x00, 0x10, 0x27, 0x00, 0x00, 0x68, 0x7e, + 0x01, 0x00, 0xa0, 0x86, 0x01, 0x00, 0x88, 0x13, + 0x00, 0x00, 0x44, 0x6d, 0x01, 0x00, 0x3c, 0x00, + 0x04, 0x47, 0x00, 0x00, 0xc8, 0x57, 0x01, 0x00, + 0x50, 0xc3, 0x00, 0x00, 0x98, 0x3a, 0x00, 0x00, + 0xc0, 0x57, 0x01, 0x00, 0x40, 0x0d, 0x03, 0x00, + 0xc4, 0x09, 0x00, 0x00, 0xb2, 0x0c, 0x00, 0x00, + 0x00, 0x20, 0x0b, 0x9a, 0x0a, 0x9b, 0xc0, 0x43, + 0x1a, 0x43, 0x37, 0xd0, 0x00, 0x2f, 0x35, 0xd1, + 0x07, 0x9b, 0x00, 0x2b, 0x08, 0xd0, 0x6a, 0x78, + 0x02, 0x2a, 0x2f, 0xd9, 0x2a, 0x78, 0x10, 0x2a, + 0x3c, 0x00, 0x40, 0x47, 0x00, 0x00, 0x2c, 0xd2, + 0x2a, 0x79, 0x10, 0x2a, 0x29, 0xd2, 0x25, 0x4b, + 0x1a, 0x6c, 0x00, 0x2a, 0x06, 0xd0, 0x9a, 0x6a, + 0x9f, 0x6c, 0xba, 0x42, 0x02, 0xd1, 0x1f, 0x20, + 0x1f, 0xe0, 0x2e, 0xe0, 0x20, 0x4b, 0x5a, 0x6c, + 0x00, 0x2a, 0x03, 0xd0, 0x1f, 0x4f, 0xb3, 0x1a, + 0xbb, 0x42, 0x16, 0xd3, 0x1c, 0x4b, 0x00, 0x2a, + 0x05, 0xd0, 0x9a, 0x6a, 0x9f, 0x6c, 0xba, 0x42, + 0x01, 0xd1, 0x3c, 0x00, 0x7c, 0x47, 0x00, 0x00, + 0x0f, 0x20, 0x0d, 0xe0, 0x07, 0x9a, 0x00, 0x2a, + 0x04, 0xd0, 0xea, 0x79, 0x20, 0x2a, 0x01, 0xd1, + 0x00, 0x20, 0x05, 0xe0, 0xea, 0x79, 0x10, 0x2a, + 0x01, 0xd3, 0x03, 0x20, 0x00, 0xe0, 0x9a, 0x6a, + 0x12, 0x4a, 0x12, 0x68, 0x02, 0x40, 0x0b, 0xd1, + 0x01, 0x20, 0x08, 0x90, 0x02, 0x20, 0x08, 0x70, + 0x0f, 0x48, 0x08, 0x61, 0x4e, 0x60, 0x64, 0xe7, + 0xff, 0xe7, 0x01, 0x20, 0x3c, 0x00, 0xb8, 0x47, + 0x00, 0x00, 0x08, 0x90, 0x60, 0xe7, 0x0c, 0x49, + 0x88, 0x6a, 0x00, 0x28, 0x01, 0xda, 0x01, 0x30, + 0x02, 0xe0, 0x00, 0x28, 0x01, 0xdd, 0x00, 0x20, + 0x88, 0x62, 0x00, 0x20, 0x08, 0x62, 0x08, 0x99, + 0x20, 0x04, 0x08, 0x43, 0x0f, 0xb0, 0xf0, 0xbd, + 0x00, 0x00, 0xa4, 0x6c, 0x01, 0x00, 0x71, 0x02, + 0x00, 0x00, 0x08, 0x20, 0x07, 0x00, 0x53, 0x07, + 0x00, 0x00, 0x68, 0x7e, 0x01, 0x00, 0x3c, 0x00, + 0xf4, 0x47, 0x00, 0x00, 0x70, 0x47, 0x00, 0x00, + 0x00, 0x48, 0x70, 0x47, 0x50, 0x7e, 0x01, 0x00, + 0x80, 0xb5, 0x3d, 0xf0, 0x7f, 0xfd, 0x02, 0x49, + 0x01, 0x20, 0x08, 0x70, 0x80, 0xbd, 0x00, 0x00, + 0x3c, 0x7e, 0x01, 0x00, 0xf8, 0xb5, 0x0d, 0x1c, + 0x0e, 0xf0, 0xc8, 0xfa, 0x26, 0x49, 0x04, 0x1c, + 0x88, 0x6a, 0x26, 0x4e, 0x00, 0x28, 0x01, 0xd0, + 0x04, 0x20, 0x03, 0xe0, 0x70, 0x6a, 0x00, 0x28, + 0x3c, 0x00, 0x30, 0x48, 0x00, 0x00, 0x01, 0xd0, + 0x01, 0x38, 0x70, 0x62, 0x00, 0x27, 0x00, 0x2d, + 0x02, 0xd0, 0xb7, 0x61, 0xf7, 0x61, 0x0a, 0xe0, + 0xb0, 0x69, 0x1c, 0x49, 0x01, 0x30, 0xb0, 0x61, + 0x49, 0x6d, 0x00, 0x29, 0x03, 0xd0, 0x03, 0x28, + 0x01, 0xd9, 0x01, 0x20, 0xf0, 0x61, 0xb4, 0x60, + 0xf1, 0x68, 0x00, 0x91, 0x08, 0xf0, 0xf7, 0xfc, + 0xf0, 0x60, 0x00, 0x99, 0x88, 0x42, 0x02, 0xd0, + 0x30, 0x62, 0x3c, 0x00, 0x6c, 0x48, 0x00, 0x00, + 0x34, 0x61, 0x0b, 0xe0, 0x00, 0xf0, 0x90, 0xf8, + 0x00, 0x28, 0x01, 0xd0, 0x11, 0x48, 0x00, 0xe0, + 0x11, 0x48, 0x31, 0x69, 0x61, 0x1a, 0x81, 0x42, + 0x00, 0xd9, 0x37, 0x62, 0x0b, 0x4a, 0x0c, 0x48, + 0xd1, 0x6c, 0x20, 0x30, 0x00, 0x29, 0x01, 0xd0, + 0x0a, 0x21, 0x03, 0xe0, 0x01, 0x7a, 0x00, 0x29, + 0x01, 0xd0, 0xff, 0x31, 0x01, 0x72, 0x00, 0x2d, + 0x03, 0xd1, 0x01, 0x7a, 0x3c, 0x00, 0xa8, 0x48, + 0x00, 0x00, 0x00, 0x29, 0x00, 0xd0, 0x91, 0x6a, + 0x00, 0x7a, 0x00, 0x28, 0x00, 0xd1, 0x17, 0x65, + 0xf8, 0xbd, 0xa4, 0x6c, 0x01, 0x00, 0x3c, 0x7e, + 0x01, 0x00, 0xa6, 0x0e, 0x00, 0x00, 0xa8, 0x61, + 0x00, 0x00, 0x70, 0x47, 0x00, 0x00, 0x06, 0x49, + 0x80, 0xb5, 0x89, 0x68, 0x00, 0x29, 0x07, 0xd0, + 0x05, 0x21, 0x00, 0x28, 0x00, 0xd1, 0x04, 0x21, + 0x08, 0x06, 0x00, 0x0e, 0x03, 0xf0, 0x3c, 0x00, + 0xe4, 0x48, 0x00, 0x00, 0x05, 0xfa, 0x80, 0xbd, + 0x60, 0x6c, 0x01, 0x00, 0x07, 0x48, 0x00, 0x68, + 0x07, 0x49, 0x4a, 0x69, 0x10, 0x40, 0x01, 0xd0, + 0x01, 0x20, 0x00, 0xe0, 0x00, 0x20, 0x49, 0x6a, + 0x88, 0x42, 0x01, 0xd1, 0x01, 0x20, 0x70, 0x47, + 0x00, 0x20, 0x70, 0x47, 0x10, 0x00, 0x07, 0x00, + 0xa4, 0x6c, 0x01, 0x00, 0x70, 0xb5, 0x0e, 0xf0, + 0x49, 0xfa, 0x02, 0x1c, 0x00, 0xf0, 0x3a, 0xf8, + 0x3c, 0x00, 0x20, 0x49, 0x00, 0x00, 0x10, 0x49, + 0x00, 0x28, 0x0e, 0xd0, 0x08, 0x1c, 0xa0, 0x31, + 0x0e, 0x78, 0x0e, 0x4b, 0x10, 0x2e, 0x01, 0xd3, + 0x80, 0x6f, 0x03, 0xe0, 0x49, 0x78, 0x10, 0x29, + 0x0e, 0xd3, 0xc0, 0x6f, 0xc0, 0x18, 0x84, 0x1a, + 0x0a, 0xe0, 0x08, 0x1c, 0x80, 0x30, 0x45, 0x69, + 0x08, 0x49, 0x8d, 0x42, 0x01, 0xd9, 0x0c, 0x1c, + 0x05, 0xe0, 0xc0, 0x68, 0x10, 0x1a, 0x2c, 0x1a, + 0x00, 0x2c, 0x3c, 0x00, 0x5c, 0x49, 0x00, 0x00, + 0x00, 0xda, 0x64, 0x19, 0x20, 0x1c, 0x70, 0xbd, + 0xa4, 0x6c, 0x01, 0x00, 0xa6, 0x0e, 0x00, 0x00, + 0x50, 0xc3, 0x00, 0x00, 0x80, 0xb5, 0x05, 0xf0, + 0xb7, 0xfb, 0x00, 0x28, 0x02, 0xd0, 0x07, 0xf0, + 0x1f, 0xff, 0x80, 0xbd, 0x03, 0x48, 0x00, 0x78, + 0x00, 0x28, 0xfa, 0xd0, 0x07, 0xf0, 0x70, 0xfb, + 0x80, 0xbd, 0x00, 0x00, 0x60, 0x6c, 0x01, 0x00, + 0x03, 0x49, 0x01, 0x20, 0x3c, 0x00, 0x98, 0x49, + 0x00, 0x00, 0x49, 0x69, 0x03, 0x29, 0x00, 0xd8, + 0x00, 0x20, 0x70, 0x47, 0x00, 0x00, 0x60, 0x6c, + 0x01, 0x00, 0xb0, 0xb5, 0x0a, 0x4d, 0x00, 0x24, + 0x28, 0x78, 0x01, 0x28, 0x03, 0xd0, 0x05, 0xf0, + 0x6a, 0xfb, 0x04, 0x06, 0x24, 0x0e, 0xfe, 0xf7, + 0xd2, 0xfc, 0x00, 0x02, 0x20, 0x43, 0x02, 0xd1, + 0x68, 0x6a, 0x00, 0x28, 0x01, 0xd1, 0x01, 0x20, + 0xb0, 0xbd, 0x00, 0x20, 0xb0, 0xbd, 0x3c, 0x00, + 0xd4, 0x49, 0x00, 0x00, 0x60, 0x6c, 0x01, 0x00, + 0x01, 0x21, 0x01, 0x28, 0x00, 0xd0, 0x00, 0x21, + 0x01, 0x48, 0x41, 0x62, 0x70, 0x47, 0x00, 0x00, + 0x60, 0x6c, 0x01, 0x00, 0x15, 0x48, 0x10, 0xb5, + 0x04, 0x68, 0x15, 0x48, 0x00, 0x6a, 0x00, 0x28, + 0x14, 0xd0, 0xff, 0xf7, 0xcb, 0xff, 0x00, 0x28, + 0x0e, 0xd1, 0x11, 0x48, 0x11, 0x49, 0xc4, 0x30, + 0x40, 0x69, 0x88, 0x42, 0x08, 0xd2, 0xcc, 0x08, + 0x3c, 0x00, 0x10, 0x4a, 0x00, 0x00, 0xa0, 0x42, + 0x05, 0xd3, 0xff, 0xf7, 0x7e, 0xff, 0xa0, 0x42, + 0x01, 0xda, 0x0c, 0x4c, 0x01, 0xe0, 0xff, 0x24, + 0x91, 0x34, 0x7d, 0x20, 0x00, 0x01, 0x84, 0x42, + 0x04, 0xd9, 0x00, 0x22, 0x16, 0x21, 0x83, 0x20, + 0x0e, 0xf0, 0xbd, 0xfe, 0x01, 0x23, 0x09, 0x22, + 0x21, 0x1c, 0x16, 0x20, 0x0e, 0xf0, 0xa7, 0xfe, + 0x10, 0xbd, 0xb0, 0x57, 0x01, 0x00, 0x60, 0x6c, + 0x01, 0x00, 0x3c, 0x00, 0x4c, 0x4a, 0x00, 0x00, + 0xc0, 0x5d, 0x00, 0x00, 0x10, 0x27, 0x00, 0x00, + 0x70, 0xb5, 0x05, 0x1c, 0x0e, 0x1c, 0x00, 0xf0, + 0x43, 0xf8, 0x00, 0x28, 0x0f, 0xd0, 0x08, 0x4c, + 0x20, 0x78, 0xc0, 0x07, 0x03, 0xd4, 0x05, 0xf0, + 0xab, 0xf9, 0x09, 0xf0, 0x31, 0xfe, 0x00, 0x2d, + 0x05, 0xd0, 0x20, 0x78, 0x80, 0x07, 0x02, 0xd4, + 0x30, 0x1c, 0x02, 0xf0, 0xfd, 0xfe, 0x70, 0xbd, + 0x60, 0x6c, 0x01, 0x00, 0x3c, 0x00, 0x88, 0x4a, + 0x00, 0x00, 0xb0, 0xb5, 0x00, 0x28, 0x18, 0xd0, + 0x11, 0x48, 0x81, 0x42, 0x15, 0xd2, 0x10, 0x48, + 0x0c, 0x1c, 0x0d, 0x18, 0x07, 0xf0, 0xdf, 0xfa, + 0x81, 0x00, 0x09, 0x18, 0xa1, 0x42, 0x01, 0xd2, + 0x40, 0x00, 0x03, 0xe0, 0x41, 0x00, 0x09, 0x18, + 0xa1, 0x42, 0x01, 0xd2, 0x24, 0x1a, 0x06, 0xe0, + 0x41, 0x00, 0xa1, 0x42, 0x03, 0xd2, 0x40, 0x08, + 0xf8, 0xe7, 0x06, 0x4d, 0x07, 0x4c, 0x3c, 0x00, + 0xc4, 0x4a, 0x00, 0x00, 0x0e, 0xf0, 0x72, 0xf9, + 0x00, 0x19, 0x29, 0x1c, 0x07, 0xf0, 0xdc, 0xfa, + 0xb0, 0xbd, 0x00, 0x00, 0x80, 0xb9, 0x2a, 0x00, + 0x53, 0x07, 0x00, 0x00, 0x4c, 0x1d, 0x00, 0x00, + 0x88, 0x13, 0x00, 0x00, 0xb0, 0xb5, 0x05, 0xf0, + 0xfd, 0xfa, 0x00, 0x28, 0x13, 0xd1, 0xfe, 0xf7, + 0xb5, 0xfe, 0x0a, 0x4c, 0x0a, 0x4d, 0x00, 0x28, + 0x60, 0x63, 0x00, 0xd0, 0x28, 0x60, 0x0e, 0xf0, + 0x3c, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x55, 0xf9, + 0x21, 0x6a, 0x00, 0x29, 0x04, 0xd1, 0xe1, 0x69, + 0x40, 0x1a, 0x29, 0x68, 0x88, 0x42, 0x01, 0xd9, + 0x01, 0x20, 0xb0, 0xbd, 0x00, 0x20, 0xb0, 0xbd, + 0x00, 0x00, 0x60, 0x6c, 0x01, 0x00, 0xb0, 0x57, + 0x01, 0x00, 0x80, 0xb5, 0xff, 0xf7, 0xdd, 0xff, + 0x00, 0x28, 0x05, 0xd0, 0x05, 0xf0, 0xb7, 0xfa, + 0x00, 0x28, 0x01, 0xd1, 0x01, 0x20, 0x80, 0xbd, + 0x00, 0x20, 0x3c, 0x00, 0x3c, 0x4b, 0x00, 0x00, + 0x80, 0xbd, 0x00, 0x00, 0x10, 0xb5, 0x0a, 0x4c, + 0x00, 0x21, 0xa2, 0x68, 0x00, 0x2a, 0x03, 0xd0, + 0xa1, 0x60, 0x02, 0xf0, 0x83, 0xf9, 0x10, 0xbd, + 0x61, 0x60, 0x01, 0x1c, 0x00, 0x22, 0x04, 0x20, + 0x0e, 0xf0, 0x36, 0xfd, 0x03, 0x48, 0x21, 0x68, + 0x0a, 0xf0, 0x08, 0xfc, 0x10, 0xbd, 0x00, 0x00, + 0xbc, 0x74, 0x01, 0x00, 0xc4, 0x60, 0x01, 0x00, + 0x70, 0xb5, 0x05, 0x1c, 0x3c, 0x00, 0x78, 0x4b, + 0x00, 0x00, 0x01, 0xd1, 0xfc, 0xf7, 0xc1, 0xfb, + 0x20, 0x4c, 0xe0, 0x6a, 0x00, 0x28, 0x15, 0xd0, + 0x1f, 0x4b, 0xa0, 0x69, 0x58, 0x43, 0xc6, 0x0b, + 0x20, 0x88, 0x46, 0x43, 0xf0, 0x00, 0x80, 0x19, + 0xe6, 0x60, 0xfb, 0xf7, 0x1c, 0xfe, 0xa8, 0x42, + 0x05, 0xd8, 0x30, 0x1c, 0xfb, 0xf7, 0x17, 0xfe, + 0x80, 0x19, 0xa8, 0x42, 0x02, 0xd2, 0x00, 0x20, + 0xe0, 0x60, 0x20, 0xe0, 0xe5, 0x60, 0x3c, 0x00, + 0xb4, 0x4b, 0x00, 0x00, 0x00, 0x2d, 0x1d, 0xd0, + 0x26, 0x88, 0xa0, 0x69, 0x70, 0x43, 0xc1, 0x03, + 0x28, 0x1c, 0xfb, 0xf7, 0xa5, 0xfd, 0x60, 0x61, + 0x0d, 0x48, 0x32, 0x1c, 0x29, 0x1c, 0x30, 0x30, + 0xfb, 0xf7, 0x0a, 0xfc, 0x0c, 0x4b, 0x60, 0x69, + 0x58, 0x43, 0xc0, 0x0b, 0x60, 0x62, 0x01, 0xf0, + 0xb7, 0xfd, 0xa0, 0x62, 0xe0, 0x68, 0x00, 0x28, + 0x04, 0xd0, 0x20, 0x69, 0xa1, 0x68, 0xfb, 0xf7, + 0x3c, 0x00, 0xf0, 0x4b, 0x00, 0x00, 0xf4, 0xfb, + 0x70, 0xbd, 0x05, 0x48, 0xa1, 0x68, 0xfb, 0xf7, + 0xef, 0xfb, 0x70, 0xbd, 0x00, 0x00, 0xc8, 0x74, + 0x01, 0x00, 0x40, 0x42, 0x0f, 0x00, 0xc0, 0xc6, + 0x2d, 0x00, 0x88, 0x13, 0x00, 0x00, 0xf1, 0xb5, + 0x3e, 0x48, 0x00, 0xab, 0x81, 0x78, 0xc0, 0x78, + 0x3e, 0x4f, 0x0a, 0x07, 0x04, 0x07, 0x58, 0x78, + 0x3b, 0x49, 0x12, 0x0f, 0x08, 0x5c, 0x14, 0x39, + 0x24, 0x0f, 0x3c, 0x00, 0x2c, 0x4c, 0x00, 0x00, + 0x80, 0x18, 0x78, 0x60, 0x01, 0x30, 0xb8, 0x60, + 0x18, 0x78, 0x35, 0x4d, 0x08, 0x5c, 0x00, 0x19, + 0xb8, 0x61, 0x01, 0x30, 0xf8, 0x61, 0xeb, 0x78, + 0x33, 0x48, 0x1e, 0x09, 0x33, 0x4b, 0x18, 0x38, + 0x81, 0x78, 0x5e, 0x43, 0xab, 0x78, 0x1d, 0x09, + 0xc8, 0x23, 0x6b, 0x43, 0x00, 0x29, 0x08, 0xd1, + 0x2b, 0x4d, 0x2d, 0x78, 0x3d, 0x60, 0xc5, 0x60, + 0x7d, 0x25, 0xed, 0x00, 0x3c, 0x00, 0x68, 0x4c, + 0x00, 0x00, 0x5d, 0x1b, 0x2c, 0x4b, 0x07, 0xe0, + 0x27, 0x4d, 0x6d, 0x78, 0x3d, 0x60, 0xc5, 0x60, + 0x4b, 0x25, 0x2d, 0x01, 0x5d, 0x1b, 0x28, 0x4b, + 0xf6, 0x18, 0x02, 0x20, 0x00, 0xf0, 0x57, 0xf8, + 0x28, 0x1a, 0xf8, 0x60, 0x22, 0x48, 0x22, 0x1c, + 0x18, 0x38, 0x81, 0x78, 0x03, 0x20, 0x00, 0xf0, + 0x4e, 0xf8, 0x30, 0x1a, 0x38, 0x62, 0x39, 0x68, + 0x00, 0xab, 0x79, 0x61, 0x5a, 0x78, 0x3c, 0x00, + 0xa4, 0x4c, 0x00, 0x00, 0x56, 0x23, 0xf9, 0x68, + 0x5a, 0x43, 0x89, 0x1a, 0xf9, 0x60, 0xc8, 0x31, + 0x39, 0x61, 0x18, 0x49, 0x18, 0x39, 0x89, 0x78, + 0x00, 0x29, 0xb9, 0x69, 0x11, 0xd1, 0x00, 0xab, + 0x1a, 0x78, 0x13, 0x4b, 0x14, 0x3b, 0x9a, 0x5c, + 0x53, 0x1c, 0x59, 0x43, 0x0a, 0x23, 0x59, 0x43, + 0x14, 0x4b, 0x59, 0x1a, 0x51, 0x43, 0x0a, 0x23, + 0x59, 0x43, 0x40, 0x1a, 0x38, 0x62, 0x12, 0x49, + 0x3c, 0x00, 0xe0, 0x4c, 0x00, 0x00, 0x10, 0xe0, + 0x00, 0xab, 0x1a, 0x78, 0x0a, 0x4b, 0x14, 0x3b, + 0x9a, 0x5c, 0x53, 0x1c, 0x59, 0x43, 0x0a, 0x23, + 0x59, 0x43, 0x0d, 0x4b, 0x59, 0x1a, 0x51, 0x43, + 0x0a, 0x23, 0x59, 0x43, 0x40, 0x1a, 0x0b, 0x49, + 0x38, 0x62, 0x40, 0x18, 0x78, 0x62, 0xf8, 0xbd, + 0x00, 0x00, 0x0c, 0x5a, 0x01, 0x00, 0x66, 0x5a, + 0x01, 0x00, 0x94, 0x78, 0x01, 0x00, 0xa0, 0x86, + 0x01, 0x00, 0x3c, 0x00, 0x1c, 0x4d, 0x00, 0x00, + 0x00, 0x48, 0x71, 0x00, 0xb0, 0xd6, 0x8c, 0x00, + 0x88, 0x10, 0x00, 0x00, 0x80, 0x38, 0x01, 0x00, + 0x58, 0x12, 0x00, 0x00, 0x70, 0x11, 0x01, 0x00, + 0x30, 0xb5, 0x19, 0x4b, 0x02, 0x28, 0xdd, 0x68, + 0x06, 0xd1, 0x00, 0x29, 0x04, 0xd1, 0x2b, 0x1c, + 0x0c, 0x33, 0x9c, 0x1a, 0x64, 0x23, 0x5c, 0x43, + 0x02, 0x28, 0x09, 0xd1, 0x01, 0x29, 0x07, 0xd1, + 0x64, 0x23, 0x7d, 0x24, 0x3c, 0x00, 0x58, 0x4d, + 0x00, 0x00, 0xe4, 0x00, 0x6b, 0x43, 0x1c, 0x19, + 0xa0, 0x23, 0x53, 0x43, 0xe4, 0x1a, 0x0a, 0x23, + 0x5a, 0x43, 0x03, 0x28, 0x09, 0xd1, 0x00, 0x29, + 0x07, 0xd1, 0x13, 0x23, 0xff, 0x24, 0xe4, 0x00, + 0x6b, 0x43, 0x1b, 0x19, 0x9b, 0x1a, 0x1c, 0x1c, + 0x5c, 0x43, 0x03, 0x28, 0x08, 0xd1, 0x01, 0x29, + 0x06, 0xd1, 0x0e, 0x20, 0x05, 0x49, 0x68, 0x43, + 0x40, 0x18, 0x80, 0x1a, 0x04, 0x1c, 0x3c, 0x00, + 0x94, 0x4d, 0x00, 0x00, 0x44, 0x43, 0x20, 0x1c, + 0x30, 0xbd, 0x00, 0x00, 0x7c, 0x78, 0x01, 0x00, + 0x84, 0x08, 0x00, 0x00, 0x10, 0xb5, 0x07, 0x4c, + 0x0c, 0x23, 0x60, 0x78, 0x05, 0x49, 0x14, 0x31, + 0x58, 0x43, 0x40, 0x18, 0x40, 0x68, 0x01, 0xf0, + 0x4f, 0xfc, 0x00, 0x21, 0x60, 0x78, 0x02, 0xf0, + 0x4b, 0xff, 0x10, 0xbd, 0x4c, 0x7b, 0x01, 0x00, + 0x0c, 0x48, 0xf8, 0xb5, 0x40, 0x78, 0x0c, 0x23, + 0x3c, 0x00, 0xd0, 0x4d, 0x00, 0x00, 0x0a, 0x49, + 0x58, 0x43, 0x14, 0x31, 0x44, 0x18, 0x26, 0x1d, + 0x60, 0xce, 0x30, 0x1c, 0x0b, 0xf0, 0x0b, 0xfd, + 0x00, 0x27, 0x41, 0x20, 0x47, 0x55, 0x05, 0x48, + 0x29, 0x1c, 0x02, 0xf0, 0xf0, 0xfe, 0x28, 0x1c, + 0x01, 0xf0, 0x31, 0xfc, 0x04, 0x34, 0xc0, 0xc4, + 0xf8, 0xbd, 0x4c, 0x7b, 0x01, 0x00, 0x55, 0x80, + 0x00, 0x00, 0xb0, 0xb5, 0x0a, 0x4d, 0x4c, 0x21, + 0x28, 0x78, 0x3c, 0x00, 0x0c, 0x4e, 0x00, 0x00, + 0x09, 0x4a, 0x41, 0x43, 0x8c, 0x18, 0x22, 0x68, + 0x01, 0x21, 0xfb, 0xf7, 0xe1, 0xfa, 0x28, 0x78, + 0x01, 0xf0, 0xfa, 0xfb, 0x3c, 0x23, 0xe0, 0x56, + 0x41, 0x1e, 0x01, 0x20, 0x07, 0xf0, 0x34, 0xfb, + 0xb0, 0xbd, 0x00, 0x00, 0x3c, 0x7c, 0x01, 0x00, + 0x58, 0xe3, 0x01, 0x00, 0x0c, 0x23, 0x07, 0x49, + 0x58, 0x43, 0x40, 0x18, 0x80, 0xb5, 0x40, 0x68, + 0x41, 0x6b, 0x00, 0x29, 0x3c, 0x00, 0x48, 0x4e, + 0x00, 0x00, 0x02, 0xd0, 0x0b, 0xf0, 0xfb, 0xfd, + 0x80, 0xbd, 0x0b, 0xf0, 0x2c, 0xfd, 0x80, 0xbd, + 0x00, 0x00, 0x60, 0x7b, 0x01, 0x00, 0x38, 0x22, + 0x0a, 0x4b, 0x42, 0x43, 0xd2, 0x18, 0x00, 0x29, + 0x80, 0xb5, 0x04, 0xd0, 0x02, 0x29, 0x07, 0xd1, + 0x0b, 0xf0, 0xfb, 0xfc, 0x80, 0xbd, 0xd2, 0x6a, + 0x01, 0x21, 0xfb, 0xf7, 0xb0, 0xfa, 0x80, 0xbd, + 0x03, 0x21, 0x86, 0x20, 0xfc, 0xf7, 0x3c, 0x00, + 0x84, 0x4e, 0x00, 0x00, 0x0f, 0xfa, 0x80, 0xbd, + 0xd4, 0xe4, 0x01, 0x00, 0xb0, 0xb5, 0x04, 0x06, + 0x24, 0x0e, 0x0c, 0x20, 0x0e, 0x49, 0x60, 0x43, + 0x40, 0x18, 0x45, 0x68, 0xa8, 0x6b, 0x00, 0x28, + 0x03, 0xd1, 0x00, 0x21, 0x20, 0x1c, 0xfd, 0xf7, + 0xe1, 0xfa, 0x20, 0x1c, 0x07, 0xf0, 0xf2, 0xff, + 0x00, 0x28, 0x08, 0xd0, 0x28, 0x1c, 0x60, 0x30, + 0xc1, 0x79, 0x01, 0x29, 0x03, 0xd9, 0xff, 0x31, + 0x3c, 0x00, 0xc0, 0x4e, 0x00, 0x00, 0xc1, 0x71, + 0xff, 0x31, 0x81, 0x71, 0x01, 0x21, 0x20, 0x1c, + 0x02, 0xf0, 0xc5, 0xfe, 0xb0, 0xbd, 0x60, 0x7b, + 0x01, 0x00, 0x70, 0xb5, 0x00, 0x06, 0x00, 0x0e, + 0x05, 0x1c, 0x4c, 0x23, 0x0a, 0x49, 0x58, 0x43, + 0x44, 0x18, 0x3c, 0x20, 0x00, 0x5d, 0xff, 0x30, + 0x06, 0x06, 0x36, 0x16, 0x28, 0x1c, 0x01, 0xf0, + 0x90, 0xfb, 0x00, 0x21, 0x28, 0x1c, 0x22, 0x68, + 0xfb, 0xf7, 0x3c, 0x00, 0xfc, 0x4e, 0x00, 0x00, + 0x6f, 0xfa, 0x31, 0x1c, 0x00, 0x20, 0x07, 0xf0, + 0xc7, 0xfa, 0x70, 0xbd, 0x58, 0xe3, 0x01, 0x00, + 0x0c, 0x22, 0x0f, 0x4b, 0x42, 0x43, 0xd2, 0x18, + 0x10, 0xb5, 0x54, 0x68, 0x00, 0x29, 0x0d, 0xd0, + 0x02, 0x29, 0x0f, 0xd1, 0x2c, 0x20, 0x00, 0x5d, + 0x00, 0x28, 0x03, 0xd0, 0x07, 0x21, 0x0c, 0x20, + 0xfc, 0xf7, 0xba, 0xf9, 0x20, 0x1c, 0x0b, 0xf0, + 0xbb, 0xfc, 0x10, 0xbd, 0x3c, 0x00, 0x38, 0x4f, + 0x00, 0x00, 0x00, 0x21, 0x02, 0xf0, 0x8d, 0xfe, + 0x10, 0xbd, 0x04, 0x21, 0x0c, 0x20, 0xfc, 0xf7, + 0xae, 0xf9, 0x10, 0xbd, 0x00, 0x00, 0x60, 0x7b, + 0x01, 0x00, 0x80, 0xb5, 0x00, 0x29, 0x07, 0xd0, + 0x0c, 0x23, 0x05, 0x49, 0x58, 0x43, 0x40, 0x18, + 0x40, 0x68, 0x0b, 0xf0, 0x4a, 0xfc, 0x80, 0xbd, + 0x01, 0x21, 0x02, 0xf0, 0x76, 0xfe, 0x80, 0xbd, + 0x00, 0x00, 0x60, 0x7b, 0x01, 0x00, 0x3c, 0x00, + 0x74, 0x4f, 0x00, 0x00, 0x10, 0xb5, 0x04, 0x1c, + 0x00, 0x29, 0x05, 0xd0, 0x02, 0x29, 0x1a, 0xd1, + 0x20, 0x1c, 0x0b, 0xf0, 0xeb, 0xfc, 0x10, 0xbd, + 0x0d, 0x48, 0x04, 0x70, 0x0d, 0x48, 0x07, 0xf0, + 0x07, 0xf9, 0x0d, 0x48, 0x01, 0x88, 0x01, 0x22, + 0x12, 0x03, 0x11, 0x43, 0x01, 0x80, 0x4c, 0x20, + 0x0a, 0x49, 0x60, 0x43, 0x40, 0x18, 0x40, 0x30, + 0x00, 0x78, 0xfd, 0xf7, 0x5d, 0xfd, 0x20, 0x1c, + 0x3c, 0x00, 0xb0, 0x4f, 0x00, 0x00, 0x0a, 0xf0, + 0xd4, 0xf8, 0x10, 0xbd, 0x03, 0x21, 0x86, 0x20, + 0xfc, 0xf7, 0x73, 0xf9, 0x10, 0xbd, 0x3c, 0x7c, + 0x01, 0x00, 0x05, 0x4e, 0x00, 0x00, 0x32, 0x80, + 0x07, 0x00, 0x58, 0xe3, 0x01, 0x00, 0xff, 0xb5, + 0x05, 0x1c, 0x01, 0x20, 0x83, 0xb0, 0x01, 0x90, + 0x0c, 0x20, 0x5d, 0x4a, 0x68, 0x43, 0x86, 0x18, + 0x01, 0x27, 0x00, 0x29, 0x74, 0x68, 0x0e, 0xd0, + 0x02, 0x29, 0x3c, 0x00, 0xec, 0x4f, 0x00, 0x00, + 0x6a, 0xd1, 0x2c, 0x20, 0x00, 0x5d, 0x00, 0x28, + 0x03, 0xd0, 0x06, 0x21, 0x0c, 0x20, 0xfc, 0xf7, + 0x53, 0xf9, 0x20, 0x1c, 0x0b, 0xf0, 0x20, 0xfd, + 0x07, 0xb0, 0xf0, 0xbd, 0x52, 0x48, 0x14, 0x38, + 0x45, 0x70, 0xa0, 0x6b, 0x00, 0x28, 0x07, 0xd0, + 0x50, 0x48, 0x07, 0xf0, 0x7f, 0xf8, 0x01, 0x21, + 0x28, 0x1c, 0xfd, 0xf7, 0x25, 0xfa, 0x1c, 0xe0, + 0x4d, 0x48, 0x07, 0xf0, 0x3c, 0x00, 0x28, 0x50, + 0x00, 0x00, 0x77, 0xf8, 0x4a, 0x48, 0x14, 0x38, + 0x05, 0x70, 0x4b, 0x48, 0x01, 0x88, 0x01, 0x22, + 0x52, 0x03, 0x11, 0x43, 0x01, 0x80, 0x40, 0x20, + 0x00, 0x5d, 0xfd, 0xf7, 0x12, 0xfd, 0xb0, 0x68, + 0x00, 0x28, 0x09, 0xd1, 0x28, 0x1c, 0x07, 0xf0, + 0x64, 0xff, 0xb0, 0x60, 0x00, 0x28, 0x03, 0xd1, + 0x09, 0x21, 0x0c, 0x20, 0xfc, 0xf7, 0x23, 0xf9, + 0x05, 0x98, 0x00, 0x28, 0x03, 0xd0, 0x3c, 0x00, + 0x64, 0x50, 0x00, 0x00, 0xe0, 0x6c, 0x01, 0x30, + 0xe0, 0x64, 0x0e, 0xe0, 0x67, 0x20, 0x00, 0x5d, + 0x00, 0x28, 0x07, 0xd1, 0xe0, 0x6c, 0x00, 0x28, + 0x04, 0xd1, 0x39, 0x48, 0x02, 0x38, 0xc0, 0x6a, + 0xa0, 0x64, 0x09, 0xe0, 0x20, 0x6d, 0x00, 0x28, + 0x01, 0xd0, 0x00, 0x27, 0x04, 0xe0, 0x28, 0x1c, + 0x07, 0xf0, 0x00, 0xff, 0x00, 0x28, 0xe5, 0xd1, + 0x05, 0x98, 0x20, 0x65, 0x20, 0x1c, 0x20, 0x30, + 0x3c, 0x00, 0xa0, 0x50, 0x00, 0x00, 0x62, 0x6a, + 0x02, 0x90, 0x81, 0x7b, 0x28, 0x1c, 0x07, 0xf0, + 0x78, 0xff, 0x00, 0x2f, 0x19, 0xd0, 0x20, 0x1c, + 0x60, 0x30, 0xc1, 0x79, 0x4a, 0x1c, 0xc2, 0x71, + 0x80, 0x79, 0x81, 0x42, 0x02, 0xd2, 0x01, 0x20, + 0x01, 0xe0, 0x40, 0xe0, 0x00, 0x20, 0x01, 0x90, + 0x00, 0x28, 0x0a, 0xd0, 0x25, 0x48, 0x00, 0x78, + 0x80, 0x07, 0x06, 0xd5, 0x00, 0xf0, 0x0d, 0xfb, + 0x01, 0x1c, 0x3c, 0x00, 0xdc, 0x50, 0x00, 0x00, + 0x20, 0x1c, 0x0b, 0xf0, 0x15, 0xfd, 0x01, 0x90, + 0x01, 0x98, 0x00, 0x28, 0x0f, 0xd0, 0x02, 0x98, + 0x00, 0x7b, 0x02, 0x28, 0x03, 0xd1, 0x20, 0x1c, + 0x04, 0xf0, 0xd0, 0xfe, 0x84, 0xe7, 0x01, 0x28, + 0x00, 0xd0, 0x7e, 0xe7, 0x21, 0x1c, 0x30, 0x1c, + 0x04, 0xf0, 0xe2, 0xfe, 0x7c, 0xe7, 0x25, 0x1c, + 0x60, 0x35, 0xe8, 0x79, 0xff, 0x30, 0xa8, 0x71, + 0x68, 0x7a, 0x06, 0xf0, 0x3c, 0x00, 0x18, 0x51, + 0x00, 0x00, 0x9d, 0xfc, 0x0d, 0xf0, 0x47, 0xfe, + 0x07, 0x1c, 0x05, 0xf0, 0x12, 0xff, 0x3f, 0x18, + 0x02, 0x98, 0x81, 0x7b, 0x20, 0x69, 0x04, 0x30, + 0x00, 0xf0, 0x35, 0xfa, 0x61, 0x6a, 0x05, 0xf0, + 0xea, 0xfe, 0x39, 0x18, 0x6b, 0x7a, 0x30, 0x88, + 0x80, 0x31, 0x09, 0x4a, 0x0d, 0xf0, 0x91, 0xfe, + 0x5d, 0xe7, 0x03, 0x21, 0x0c, 0x20, 0xfc, 0xf7, + 0xaa, 0xf8, 0x58, 0xe7, 0x00, 0x00, 0x3c, 0x00, + 0x54, 0x51, 0x00, 0x00, 0x60, 0x7b, 0x01, 0x00, + 0xa5, 0x4d, 0x00, 0x00, 0xc9, 0x4d, 0x00, 0x00, + 0x32, 0x80, 0x07, 0x00, 0x1d, 0x75, 0x01, 0x00, + 0x8d, 0x4e, 0x00, 0x00, 0xff, 0xb5, 0x81, 0xb0, + 0x1f, 0x1c, 0x05, 0x1c, 0x14, 0x1c, 0x10, 0x1c, + 0x0a, 0x9e, 0x00, 0xf0, 0xf5, 0xfc, 0x29, 0x1c, + 0x10, 0x31, 0x20, 0x1d, 0x06, 0x22, 0xfb, 0xf7, + 0xb7, 0xf9, 0xa8, 0x8e, 0x20, 0x80, 0xe8, 0x8e, + 0x3c, 0x00, 0x90, 0x51, 0x00, 0x00, 0x60, 0x80, + 0x02, 0x99, 0x20, 0x1c, 0x00, 0xf0, 0x07, 0xf9, + 0xff, 0x34, 0x01, 0x34, 0x66, 0x60, 0x27, 0x60, + 0x05, 0xb0, 0xf0, 0xbd, 0x00, 0x00, 0xf8, 0xb5, + 0x0f, 0x1c, 0x1e, 0x1c, 0x05, 0x1c, 0x14, 0x1c, + 0x10, 0x1c, 0x00, 0xf0, 0xd8, 0xfc, 0xa8, 0x88, + 0x39, 0x1c, 0x20, 0x80, 0x28, 0x89, 0x60, 0x80, + 0x20, 0x1c, 0x00, 0xf0, 0xf0, 0xf8, 0xff, 0x34, + 0x01, 0x34, 0x3c, 0x00, 0xcc, 0x51, 0x00, 0x00, + 0x66, 0x60, 0xf8, 0xbd, 0x70, 0xb5, 0x04, 0x1c, + 0xc0, 0x68, 0x05, 0x68, 0x20, 0x1c, 0x14, 0x30, + 0x06, 0x1c, 0x00, 0xf0, 0x0f, 0xfb, 0x00, 0x28, + 0x16, 0xd0, 0x01, 0x22, 0x02, 0x21, 0x20, 0x69, + 0x05, 0xf0, 0xf8, 0xfa, 0x00, 0x28, 0x01, 0xd0, + 0xfb, 0xf7, 0x24, 0xff, 0x00, 0x22, 0x02, 0x21, + 0x20, 0x69, 0x05, 0xf0, 0xef, 0xfa, 0x00, 0x28, + 0x06, 0xd0, 0xfb, 0xf7, 0x3c, 0x00, 0x08, 0x52, + 0x00, 0x00, 0x01, 0xff, 0x00, 0x28, 0x02, 0xd0, + 0x30, 0x1c, 0x0b, 0xf0, 0x7c, 0xfb, 0x68, 0x89, + 0x80, 0x07, 0xc0, 0x0f, 0x03, 0xf0, 0xa7, 0xf8, + 0x18, 0x23, 0x04, 0x49, 0x58, 0x43, 0x40, 0x18, + 0xc1, 0x68, 0x00, 0x29, 0x02, 0xd0, 0x20, 0x1c, + 0xfb, 0xf7, 0xd4, 0xf8, 0x70, 0xbd, 0x94, 0x67, + 0x01, 0x00, 0xf8, 0xb5, 0x04, 0x1c, 0x10, 0x1c, + 0x0d, 0x1c, 0x19, 0x1c, 0xff, 0x22, 0x3c, 0x00, + 0x44, 0x52, 0x00, 0x00, 0x00, 0x27, 0xff, 0x2d, + 0x25, 0xd0, 0x00, 0x29, 0x05, 0xd0, 0x4b, 0x88, + 0x00, 0x2b, 0x02, 0xd0, 0x00, 0xf0, 0x50, 0xfc, + 0x15, 0xe0, 0x00, 0x21, 0x10, 0x4e, 0x4b, 0x00, + 0x9e, 0x19, 0x02, 0x23, 0xf6, 0x5e, 0x86, 0x42, + 0x01, 0xdd, 0x0a, 0x1c, 0x04, 0xe0, 0x01, 0x31, + 0x09, 0x06, 0x09, 0x0e, 0x26, 0x29, 0xf1, 0xd3, + 0x09, 0x4e, 0x50, 0x00, 0x80, 0x19, 0x4e, 0x23, + 0x3c, 0x00, 0x80, 0x52, 0x00, 0x00, 0xc0, 0x5e, + 0x27, 0x2a, 0x07, 0xd2, 0x06, 0x49, 0x20, 0x39, + 0x49, 0x57, 0x47, 0x31, 0x40, 0x1a, 0x20, 0x60, + 0x01, 0x27, 0x02, 0xe0, 0x7e, 0x20, 0xc0, 0x43, + 0x20, 0x60, 0x38, 0x1c, 0xf8, 0xbd, 0xfa, 0x47, + 0x01, 0x00, 0xb0, 0xb5, 0x0c, 0x1c, 0x7e, 0x21, + 0x05, 0x1c, 0x00, 0x20, 0xc9, 0x43, 0x00, 0x2c, + 0x0f, 0xd0, 0x10, 0x1c, 0x05, 0xf0, 0x6b, 0xfd, + 0x00, 0x28, 0x3c, 0x00, 0xbc, 0x52, 0x00, 0x00, + 0x02, 0xd0, 0x21, 0x1c, 0xc9, 0x39, 0x01, 0xe0, + 0x21, 0x1c, 0x86, 0x39, 0x02, 0x20, 0xc0, 0x43, + 0xfb, 0xf7, 0xb4, 0xf9, 0x01, 0x1c, 0x01, 0x20, + 0x29, 0x60, 0xb0, 0xbd, 0x98, 0xb5, 0x14, 0x1c, + 0x00, 0x22, 0x00, 0x92, 0x22, 0x1c, 0xfd, 0xf7, + 0x43, 0xfe, 0x98, 0xbd, 0x05, 0x49, 0x80, 0xb5, + 0x08, 0x60, 0x05, 0x49, 0x01, 0x20, 0xc8, 0x61, + 0x01, 0x21, 0x00, 0x20, 0x3c, 0x00, 0xf8, 0x52, + 0x00, 0x00, 0x03, 0xf0, 0x1c, 0xfe, 0x80, 0xbd, + 0x00, 0x00, 0x20, 0x67, 0x01, 0x00, 0xac, 0x7c, + 0x01, 0x00, 0x80, 0xb5, 0x00, 0x21, 0x00, 0x20, + 0x03, 0xf0, 0x11, 0xfe, 0x06, 0xf0, 0x0d, 0xfb, + 0x02, 0x49, 0x00, 0x20, 0x08, 0x60, 0x80, 0xbd, + 0x00, 0x00, 0x20, 0x67, 0x01, 0x00, 0x03, 0x49, + 0x01, 0x20, 0x09, 0x69, 0x00, 0x29, 0x00, 0xd1, + 0x00, 0x20, 0x70, 0x47, 0x00, 0x00, 0x3c, 0x00, + 0x34, 0x53, 0x00, 0x00, 0x10, 0x67, 0x01, 0x00, + 0x03, 0x48, 0x00, 0x69, 0x00, 0x28, 0x01, 0xd0, + 0x40, 0x69, 0x70, 0x47, 0x00, 0x20, 0x70, 0x47, + 0x10, 0x67, 0x01, 0x00, 0x70, 0xb5, 0x16, 0x1c, + 0x0d, 0x1c, 0x04, 0x1c, 0x00, 0x28, 0x01, 0xd0, + 0x01, 0x2c, 0x07, 0xd1, 0x00, 0xf0, 0x36, 0xfa, + 0x00, 0x28, 0x05, 0xd0, 0x13, 0xf0, 0xca, 0xf9, + 0x00, 0x28, 0x01, 0xd1, 0x01, 0x20, 0x70, 0xbd, + 0x3c, 0x00, 0x70, 0x53, 0x00, 0x00, 0x01, 0x20, + 0x00, 0x2c, 0x00, 0xd0, 0x00, 0x20, 0x0a, 0x4c, + 0x04, 0x34, 0x61, 0xc4, 0x10, 0x3c, 0x00, 0xf0, + 0x24, 0xfa, 0x00, 0x28, 0x02, 0xd0, 0x00, 0xf0, + 0xc6, 0xf9, 0x01, 0xe0, 0x00, 0xf0, 0xe5, 0xf8, + 0xc0, 0x30, 0xc3, 0x6b, 0x22, 0x1d, 0x07, 0xca, + 0xfb, 0xf7, 0x20, 0xf8, 0x00, 0x20, 0x70, 0xbd, + 0x00, 0x00, 0xd4, 0x67, 0x01, 0x00, 0xf8, 0xb5, + 0x0d, 0x1c, 0x3c, 0x00, 0xac, 0x53, 0x00, 0x00, + 0x00, 0x21, 0x04, 0x1c, 0x28, 0x1c, 0x05, 0xf0, + 0xe3, 0xf9, 0x23, 0x1c, 0xff, 0x33, 0x21, 0x33, + 0xff, 0x27, 0x00, 0x28, 0x05, 0xd0, 0x22, 0x22, + 0x01, 0x1c, 0x18, 0x1c, 0xfb, 0xf7, 0x96, 0xf8, + 0x00, 0xe0, 0x1f, 0x70, 0x03, 0x21, 0x28, 0x1c, + 0x05, 0xf0, 0xd2, 0xf9, 0x26, 0x1c, 0xff, 0x36, + 0x41, 0x36, 0x00, 0x28, 0x05, 0xd0, 0x03, 0x22, + 0x01, 0x1c, 0xb0, 0x1c, 0x3c, 0x00, 0xe8, 0x53, + 0x00, 0x00, 0xfb, 0xf7, 0x86, 0xf8, 0x00, 0xe0, + 0xb7, 0x70, 0x01, 0x21, 0x28, 0x1c, 0x05, 0xf0, + 0xc2, 0xf9, 0x00, 0x28, 0x07, 0xd0, 0x01, 0x1c, + 0x20, 0x1c, 0xff, 0x30, 0x0a, 0x22, 0x46, 0x30, + 0xfb, 0xf7, 0x77, 0xf8, 0x00, 0xe0, 0x77, 0x71, + 0x32, 0x21, 0x28, 0x1c, 0x05, 0xf0, 0xb3, 0xf9, + 0x00, 0x28, 0x07, 0xd0, 0x01, 0x1c, 0x20, 0x1c, + 0xff, 0x30, 0x12, 0x22, 0x50, 0x30, 0x3c, 0x00, + 0x24, 0x54, 0x00, 0x00, 0xfb, 0xf7, 0x68, 0xf8, + 0x00, 0xe0, 0xf7, 0x73, 0x06, 0x21, 0x28, 0x1c, + 0x05, 0xf0, 0xa4, 0xf9, 0x00, 0x28, 0x07, 0xd0, + 0x01, 0x1c, 0x20, 0x1c, 0xff, 0x30, 0x04, 0x22, + 0x63, 0x30, 0xfb, 0xf7, 0x59, 0xf8, 0xf8, 0xbd, + 0xff, 0x34, 0x61, 0x34, 0xa7, 0x70, 0xfa, 0xe7, + 0x08, 0x49, 0x80, 0xb5, 0x09, 0x68, 0x00, 0x28, + 0x01, 0xd1, 0x07, 0x48, 0x01, 0x68, 0x08, 0x1c, + 0x3c, 0x00, 0x60, 0x54, 0x00, 0x00, 0x05, 0xd1, + 0x03, 0x21, 0x90, 0x20, 0xfb, 0xf7, 0x1d, 0xff, + 0x00, 0x20, 0x80, 0xbd, 0x01, 0xf0, 0xd7, 0xfb, + 0x80, 0xbd, 0x1c, 0x67, 0x01, 0x00, 0x20, 0x67, + 0x01, 0x00, 0x80, 0xb5, 0xff, 0xf7, 0xe7, 0xff, + 0x80, 0xbd, 0xf0, 0xb5, 0x00, 0x24, 0x84, 0x46, + 0x00, 0x20, 0x0b, 0xe0, 0x87, 0x40, 0x17, 0x40, + 0x07, 0xd0, 0x14, 0x23, 0x0b, 0x4d, 0x43, 0x43, + 0x5b, 0x19, 0x3c, 0x00, 0x9c, 0x54, 0x00, 0x00, + 0x1b, 0x7c, 0x65, 0x46, 0x2b, 0x55, 0x01, 0x34, + 0x01, 0x30, 0x01, 0x27, 0x3b, 0x1c, 0x0e, 0x28, + 0x00, 0xd3, 0x00, 0x23, 0x0e, 0x88, 0x3d, 0x1c, + 0xa6, 0x42, 0x00, 0xdc, 0x00, 0x25, 0x2b, 0x40, + 0xe7, 0xd1, 0x0c, 0x80, 0xf0, 0xbd, 0x00, 0x00, + 0x74, 0x40, 0x01, 0x00, 0x78, 0xb5, 0x04, 0x1c, + 0x01, 0x20, 0x20, 0x70, 0x08, 0x20, 0x00, 0xab, + 0x0d, 0x1c, 0x18, 0x80, 0x3c, 0x00, 0xd8, 0x54, + 0x00, 0x00, 0x16, 0x1c, 0xa0, 0x1c, 0x69, 0x46, + 0xff, 0xf7, 0xd1, 0xff, 0x00, 0xab, 0x00, 0x22, + 0xd2, 0x43, 0x19, 0x88, 0x82, 0x40, 0x61, 0x70, + 0x32, 0x20, 0x28, 0x70, 0x10, 0x20, 0x18, 0x80, + 0x32, 0x40, 0xa8, 0x1c, 0x69, 0x46, 0xff, 0xf7, + 0xc2, 0xff, 0x00, 0xab, 0x18, 0x88, 0x68, 0x70, + 0x78, 0xbd, 0x80, 0xb5, 0x02, 0xf0, 0x35, 0xff, + 0x00, 0x21, 0x00, 0x28, 0x00, 0xd0, 0x3c, 0x00, + 0x14, 0x55, 0x00, 0x00, 0x01, 0x69, 0x08, 0x1c, + 0x80, 0xbd, 0x00, 0x00, 0x05, 0x49, 0x00, 0x28, + 0x01, 0xd0, 0xc8, 0x68, 0x00, 0xe0, 0x08, 0x69, + 0x00, 0x28, 0x01, 0xd0, 0x04, 0x30, 0x70, 0x47, + 0x00, 0x20, 0x70, 0x47, 0x10, 0x67, 0x01, 0x00, + 0x03, 0x48, 0x00, 0x69, 0x00, 0x28, 0x01, 0xd0, + 0x04, 0x30, 0x70, 0x47, 0x00, 0x20, 0x70, 0x47, + 0x10, 0x67, 0x01, 0x00, 0x02, 0x48, 0x00, 0x69, + 0x3c, 0x00, 0x50, 0x55, 0x00, 0x00, 0x00, 0x28, + 0xff, 0xd1, 0x70, 0x47, 0x00, 0x00, 0x10, 0x67, + 0x01, 0x00, 0x10, 0xb5, 0x05, 0x4c, 0x20, 0x69, + 0x00, 0x28, 0x03, 0xd1, 0x04, 0x21, 0x90, 0x20, + 0xfb, 0xf7, 0x9b, 0xfe, 0x20, 0x69, 0x10, 0xbd, + 0x00, 0x00, 0x10, 0x67, 0x01, 0x00, 0x10, 0xb5, + 0x04, 0x1c, 0x00, 0xf0, 0x40, 0xf9, 0x00, 0x28, + 0x01, 0xd0, 0x00, 0x20, 0x10, 0xbd, 0x20, 0x1c, + 0x00, 0xf0, 0x3c, 0x00, 0x8c, 0x55, 0x00, 0x00, + 0x57, 0xf9, 0x00, 0x28, 0x01, 0xd0, 0x01, 0x20, + 0x10, 0xbd, 0x02, 0x20, 0x10, 0xbd, 0x00, 0x00, + 0x70, 0xb5, 0x0f, 0x4e, 0x04, 0x1c, 0x30, 0x68, + 0x0d, 0x1c, 0x00, 0x28, 0x07, 0xd0, 0x21, 0x1c, + 0x04, 0x30, 0x05, 0xf0, 0xc1, 0xfb, 0x00, 0x28, + 0x01, 0xd0, 0x30, 0x68, 0x0b, 0xe0, 0x09, 0x4a, + 0x10, 0x68, 0x00, 0x28, 0x09, 0xd0, 0x21, 0x1c, + 0x14, 0x1c, 0x04, 0x30, 0x3c, 0x00, 0xc8, 0x55, + 0x00, 0x00, 0x05, 0xf0, 0xb4, 0xfb, 0x00, 0x28, + 0x02, 0xd0, 0x20, 0x68, 0x9c, 0x30, 0x00, 0xe0, + 0x03, 0x48, 0x40, 0x5d, 0x70, 0xbd, 0x20, 0x67, + 0x01, 0x00, 0x1c, 0x67, 0x01, 0x00, 0xcc, 0x47, + 0x01, 0x00, 0x04, 0x49, 0x00, 0x20, 0x09, 0x69, + 0x00, 0x29, 0x02, 0xd0, 0xff, 0x31, 0x01, 0x31, + 0x88, 0x69, 0x70, 0x47, 0x00, 0x00, 0x10, 0x67, + 0x01, 0x00, 0x01, 0x48, 0x00, 0x7a, 0x3c, 0x00, + 0x04, 0x56, 0x00, 0x00, 0x70, 0x47, 0x00, 0x00, + 0xac, 0x7c, 0x01, 0x00, 0xfe, 0xb5, 0x06, 0x1c, + 0x00, 0x20, 0x1f, 0x1c, 0x14, 0x1c, 0x00, 0x29, + 0x02, 0x90, 0x19, 0xd0, 0x01, 0x29, 0x26, 0xd0, + 0x02, 0x29, 0x47, 0xd1, 0x26, 0x48, 0x00, 0x78, + 0x05, 0xf0, 0xa0, 0xfb, 0xa0, 0x72, 0x0a, 0xf0, + 0x4f, 0xfc, 0x0e, 0x28, 0x09, 0xd1, 0xa0, 0x7a, + 0x05, 0xf0, 0xaa, 0xfb, 0x00, 0x28, 0x04, 0xd0, + 0x3c, 0x00, 0x40, 0x56, 0x00, 0x00, 0x20, 0x48, + 0x00, 0x78, 0x05, 0xf0, 0x92, 0xfb, 0xa0, 0x72, + 0x00, 0x20, 0x20, 0x72, 0x2f, 0xe0, 0x1d, 0x4d, + 0x28, 0x68, 0x00, 0x28, 0x01, 0xd1, 0xfb, 0xf7, + 0x52, 0xfe, 0x00, 0x97, 0x2a, 0x68, 0x23, 0x1c, + 0x18, 0x32, 0x11, 0x1c, 0x30, 0x1c, 0xfc, 0xf7, + 0xde, 0xfb, 0x26, 0xe0, 0x30, 0x1c, 0x0c, 0xf0, + 0xca, 0xfb, 0x05, 0x1c, 0x02, 0xd0, 0xa8, 0x68, + 0x00, 0x28, 0x3c, 0x00, 0x7c, 0x56, 0x00, 0x00, + 0x08, 0xd1, 0x13, 0x48, 0x00, 0x68, 0x00, 0x28, + 0x01, 0xd1, 0xfb, 0xf7, 0x3b, 0xfe, 0x10, 0x48, + 0x00, 0x68, 0x18, 0x30, 0x02, 0x1c, 0x0e, 0x48, + 0x00, 0x97, 0x01, 0x68, 0x23, 0x1c, 0x18, 0x31, + 0x30, 0x1c, 0xfc, 0xf7, 0xc3, 0xfb, 0x00, 0x2d, + 0x0a, 0xd0, 0x40, 0x35, 0x28, 0x88, 0x80, 0x06, + 0x06, 0xd4, 0x00, 0x20, 0x20, 0x60, 0x03, 0xe0, + 0x01, 0x21, 0x90, 0x20, 0x3c, 0x00, 0xb8, 0x56, + 0x00, 0x00, 0xfb, 0xf7, 0xf4, 0xfd, 0x02, 0x98, + 0xfe, 0xbd, 0xb0, 0x69, 0x01, 0x00, 0x90, 0x57, + 0x01, 0x00, 0x20, 0x67, 0x01, 0x00, 0x1c, 0x67, + 0x01, 0x00, 0x80, 0xb5, 0x00, 0x20, 0x02, 0xf0, + 0x4a, 0xfe, 0x18, 0x23, 0x05, 0x4a, 0x58, 0x43, + 0x80, 0x18, 0x40, 0x69, 0x01, 0x21, 0x00, 0x28, + 0x00, 0xd0, 0x41, 0x78, 0x08, 0x1c, 0x80, 0xbd, + 0x00, 0x00, 0x94, 0x67, 0x01, 0x00, 0x3c, 0x00, + 0xf4, 0x56, 0x00, 0x00, 0x02, 0x49, 0x08, 0x69, + 0x00, 0x28, 0x00, 0xd1, 0xc8, 0x68, 0x70, 0x47, + 0x10, 0x67, 0x01, 0x00, 0x03, 0x48, 0xc0, 0x68, + 0x00, 0x28, 0x01, 0xd0, 0x04, 0x30, 0x70, 0x47, + 0x00, 0x20, 0x70, 0x47, 0x10, 0x67, 0x01, 0x00, + 0x10, 0xb5, 0x05, 0x4c, 0xe0, 0x68, 0x00, 0x28, + 0x03, 0xd1, 0x05, 0x21, 0x90, 0x20, 0xfb, 0xf7, + 0xbd, 0xfd, 0xe0, 0x68, 0x10, 0xbd, 0x00, 0x00, + 0x3c, 0x00, 0x30, 0x57, 0x00, 0x00, 0x10, 0x67, + 0x01, 0x00, 0xf8, 0xb5, 0x0d, 0x1c, 0x00, 0x2a, + 0x03, 0xd0, 0x11, 0x49, 0x12, 0x4f, 0x0e, 0x78, + 0x01, 0xe0, 0x11, 0x4f, 0x0c, 0x26, 0x08, 0x2e, + 0x01, 0xd2, 0x34, 0x1c, 0x00, 0xe0, 0x08, 0x24, + 0x01, 0x21, 0x01, 0x70, 0x44, 0x70, 0x39, 0x1c, + 0x22, 0x1c, 0x02, 0x30, 0xfa, 0xf7, 0xcb, 0xfe, + 0x32, 0x1b, 0x00, 0x2a, 0x07, 0xdd, 0x32, 0x20, + 0x28, 0x70, 0x3c, 0x00, 0x6c, 0x57, 0x00, 0x00, + 0x39, 0x19, 0xa8, 0x1c, 0x6a, 0x70, 0xfa, 0xf7, + 0xc1, 0xfe, 0xf8, 0xbd, 0xff, 0x20, 0x28, 0x70, + 0x00, 0x20, 0x68, 0x70, 0xf9, 0xe7, 0x00, 0x00, + 0xa4, 0x69, 0x01, 0x00, 0xb0, 0x69, 0x01, 0x00, + 0x90, 0x57, 0x01, 0x00, 0x01, 0x49, 0x48, 0x62, + 0x70, 0x47, 0x00, 0x00, 0x94, 0x67, 0x01, 0x00, + 0x03, 0x49, 0x80, 0xb5, 0x08, 0x60, 0x01, 0x21, + 0x01, 0x20, 0x03, 0xf0, 0x3c, 0x00, 0xa8, 0x57, + 0x00, 0x00, 0xc5, 0xfb, 0x80, 0xbd, 0x1c, 0x67, + 0x01, 0x00, 0x80, 0xb5, 0x00, 0x21, 0x01, 0x20, + 0x03, 0xf0, 0xbd, 0xfb, 0x06, 0xf0, 0xb9, 0xf8, + 0x02, 0x49, 0x00, 0x20, 0x08, 0x60, 0x80, 0xbd, + 0x00, 0x00, 0x1c, 0x67, 0x01, 0x00, 0x03, 0x49, + 0x01, 0x20, 0xc9, 0x68, 0x00, 0x29, 0x00, 0xd1, + 0x00, 0x20, 0x70, 0x47, 0x00, 0x00, 0x10, 0x67, + 0x01, 0x00, 0x03, 0x48, 0xc0, 0x68, 0x3c, 0x00, + 0xe4, 0x57, 0x00, 0x00, 0x00, 0x28, 0x01, 0xd0, + 0x40, 0x69, 0x70, 0x47, 0x00, 0x20, 0x70, 0x47, + 0x10, 0x67, 0x01, 0x00, 0x80, 0xb5, 0x02, 0x21, + 0x01, 0x20, 0x03, 0xf0, 0x9b, 0xfb, 0x80, 0xbd, + 0x05, 0x4a, 0x80, 0xb5, 0x12, 0x69, 0x00, 0x21, + 0x00, 0x2a, 0x03, 0xd0, 0x11, 0x1d, 0x05, 0xf0, + 0x91, 0xfa, 0x01, 0x1c, 0x08, 0x1c, 0x80, 0xbd, + 0x10, 0x67, 0x01, 0x00, 0x06, 0x4a, 0x80, 0xb5, + 0x3c, 0x00, 0x20, 0x58, 0x00, 0x00, 0x12, 0x69, + 0x00, 0x21, 0x00, 0x2a, 0x05, 0xd0, 0x11, 0x1c, + 0xff, 0x31, 0x21, 0x31, 0x05, 0xf0, 0x8b, 0xfa, + 0x01, 0x1c, 0x08, 0x1c, 0x80, 0xbd, 0x10, 0x67, + 0x01, 0x00, 0x05, 0x4a, 0x80, 0xb5, 0xd2, 0x68, + 0x00, 0x21, 0x00, 0x2a, 0x03, 0xd0, 0x11, 0x1d, + 0x05, 0xf0, 0x73, 0xfa, 0x01, 0x1c, 0x08, 0x1c, + 0x80, 0xbd, 0x10, 0x67, 0x01, 0x00, 0x06, 0x4a, + 0x80, 0xb5, 0x3c, 0x00, 0x5c, 0x58, 0x00, 0x00, + 0xd2, 0x68, 0x00, 0x21, 0x00, 0x2a, 0x05, 0xd0, + 0x11, 0x1c, 0xff, 0x31, 0x21, 0x31, 0x05, 0xf0, + 0x6d, 0xfa, 0x01, 0x1c, 0x08, 0x1c, 0x80, 0xbd, + 0x10, 0x67, 0x01, 0x00, 0xff, 0xb5, 0x0d, 0x1c, + 0x1f, 0x1c, 0x87, 0xb0, 0x10, 0x9e, 0x00, 0x24, + 0x02, 0xf0, 0x72, 0xfd, 0x18, 0x23, 0x13, 0x49, + 0x58, 0x43, 0x08, 0x58, 0x00, 0x28, 0x19, 0xd0, + 0x04, 0x1c, 0x33, 0x1c, 0x3c, 0x00, 0x98, 0x58, + 0x00, 0x00, 0x3a, 0x1c, 0x28, 0x1c, 0x09, 0x99, + 0xfa, 0xf7, 0x9f, 0xfd, 0x04, 0x1c, 0x14, 0xd0, + 0x18, 0x20, 0x00, 0xab, 0x18, 0x80, 0xaa, 0x68, + 0x01, 0xa8, 0x69, 0x46, 0xff, 0xf7, 0xe7, 0xfd, + 0x6a, 0x46, 0x01, 0xa9, 0x00, 0x20, 0x07, 0xf0, + 0x44, 0xfe, 0x00, 0x28, 0x05, 0xd1, 0x0a, 0x21, + 0x00, 0xe0, 0x0f, 0x21, 0x90, 0x20, 0xfb, 0xf7, + 0xea, 0xfc, 0x20, 0x1c, 0x0b, 0xb0, 0x3c, 0x00, + 0xd4, 0x58, 0x00, 0x00, 0xf0, 0xbd, 0x00, 0x00, + 0x94, 0x67, 0x01, 0x00, 0x10, 0xb5, 0x00, 0x24, + 0x02, 0xf0, 0x44, 0xfd, 0x18, 0x23, 0x05, 0x49, + 0x58, 0x43, 0x40, 0x18, 0x80, 0x68, 0x00, 0x28, + 0x02, 0xd0, 0xfa, 0xf7, 0x71, 0xfd, 0x01, 0x24, + 0x20, 0x1c, 0x10, 0xbd, 0x94, 0x67, 0x01, 0x00, + 0x80, 0xb5, 0x02, 0x4b, 0x00, 0xf0, 0x4e, 0xf8, + 0x80, 0xbd, 0x00, 0x00, 0x10, 0x67, 0x01, 0x00, + 0x3c, 0x00, 0x10, 0x59, 0x00, 0x00, 0x80, 0xb5, + 0x02, 0x4b, 0x00, 0xf0, 0x46, 0xf8, 0x80, 0xbd, + 0x00, 0x00, 0x11, 0x67, 0x01, 0x00, 0xf8, 0xb5, + 0x0e, 0x1c, 0x15, 0x1c, 0x00, 0x28, 0x1c, 0x49, + 0x10, 0xd0, 0x48, 0x68, 0x1c, 0x4a, 0x28, 0x80, + 0x00, 0x20, 0x07, 0xe0, 0x0b, 0x18, 0x1c, 0x7a, + 0x14, 0x23, 0x63, 0x43, 0x9b, 0x18, 0x1b, 0x7c, + 0x33, 0x54, 0x01, 0x30, 0x2b, 0x88, 0x83, 0x42, + 0xf4, 0xdc, 0x3c, 0x00, 0x4c, 0x59, 0x00, 0x00, + 0x24, 0xe0, 0x00, 0x20, 0x0f, 0x1c, 0x00, 0x24, + 0x08, 0x60, 0x0f, 0xe0, 0x30, 0x5d, 0x05, 0xf0, + 0x07, 0xfa, 0x0e, 0x28, 0x01, 0xd1, 0x00, 0x20, + 0xf8, 0xbd, 0x39, 0x19, 0x08, 0x72, 0x01, 0x22, + 0x39, 0x68, 0x82, 0x40, 0x11, 0x43, 0x08, 0x1c, + 0x38, 0x60, 0x01, 0x34, 0x28, 0x88, 0xa0, 0x42, + 0xec, 0xdc, 0x28, 0x88, 0x78, 0x60, 0xff, 0xf7, + 0xb7, 0xfe, 0x00, 0x28, 0x3c, 0x00, 0x88, 0x59, + 0x00, 0x00, 0x06, 0xd0, 0x01, 0x69, 0x00, 0x29, + 0x03, 0xd0, 0x7f, 0x21, 0xc9, 0x43, 0x0b, 0xf0, + 0x52, 0xfb, 0x01, 0x20, 0xe3, 0xe7, 0x2c, 0x7d, + 0x01, 0x00, 0x74, 0x40, 0x01, 0x00, 0x10, 0xb5, + 0x1c, 0x1c, 0x00, 0x28, 0x0b, 0xd0, 0x20, 0x78, + 0x0e, 0x28, 0x05, 0xd2, 0x14, 0x23, 0x0c, 0x4a, + 0x58, 0x43, 0x80, 0x18, 0x00, 0x7c, 0x00, 0xe0, + 0x00, 0x20, 0x08, 0x70, 0x0e, 0xe0, 0x3c, 0x00, + 0xc4, 0x59, 0x00, 0x00, 0x08, 0x78, 0x05, 0xf0, + 0xd1, 0xf9, 0x20, 0x70, 0xff, 0xf7, 0x92, 0xfe, + 0x00, 0x28, 0x06, 0xd0, 0x01, 0x69, 0x00, 0x29, + 0x03, 0xd0, 0x7f, 0x21, 0xc9, 0x43, 0x0b, 0xf0, + 0x2d, 0xfb, 0x01, 0x20, 0x10, 0xbd, 0x00, 0x00, + 0x74, 0x40, 0x01, 0x00, 0x80, 0xb5, 0x27, 0x20, + 0xc0, 0x43, 0x09, 0xf0, 0x31, 0xfc, 0x80, 0xbd, + 0x80, 0xb5, 0x27, 0x20, 0xc0, 0x43, 0x09, 0xf0, + 0x3c, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x39, 0xfc, + 0x80, 0xbd, 0x80, 0xb5, 0x28, 0x20, 0x09, 0xf0, + 0x42, 0xfc, 0x80, 0xbd, 0x00, 0x00, 0x80, 0xb5, + 0x28, 0x20, 0x09, 0xf0, 0x4a, 0xfc, 0x80, 0xbd, + 0x00, 0x00, 0xb0, 0xb5, 0x01, 0x28, 0x28, 0xd1, + 0x01, 0x29, 0x01, 0xd0, 0xfb, 0xf7, 0x6b, 0xfc, + 0xff, 0xf7, 0xe9, 0xfd, 0x02, 0x28, 0x1a, 0xd1, + 0x07, 0xf0, 0x13, 0xfc, 0x12, 0x4c, 0x21, 0x69, + 0x88, 0x42, 0x3c, 0x00, 0x3c, 0x5a, 0x00, 0x00, + 0x15, 0xd0, 0x07, 0xf0, 0x0d, 0xfc, 0x20, 0x61, + 0x20, 0x68, 0x7d, 0x24, 0xe4, 0x00, 0x44, 0x43, + 0x0d, 0xf0, 0xae, 0xf9, 0x05, 0x1c, 0x07, 0xf0, + 0x0b, 0xfc, 0x28, 0x1a, 0x84, 0x42, 0x00, 0xd9, + 0x24, 0x1a, 0x01, 0x22, 0x21, 0x1c, 0x0a, 0x20, + 0x0d, 0xf0, 0xb2, 0xfd, 0xb0, 0xbd, 0x00, 0x21, + 0x09, 0x20, 0x0c, 0xf0, 0x75, 0xfc, 0xb0, 0xbd, + 0x07, 0x21, 0x0a, 0x20, 0x3c, 0x00, 0x78, 0x5a, + 0x00, 0x00, 0xfb, 0xf7, 0x14, 0xfc, 0xb0, 0xbd, + 0x00, 0x00, 0xd4, 0x67, 0x01, 0x00, 0x7d, 0x20, + 0x02, 0x49, 0x00, 0x01, 0x08, 0x60, 0x70, 0x47, + 0x00, 0x00, 0xd4, 0x67, 0x01, 0x00, 0x10, 0xb5, + 0x81, 0x6d, 0x04, 0x1c, 0xff, 0x30, 0x46, 0x30, + 0x0c, 0xf0, 0xd1, 0xfc, 0x20, 0x1c, 0xff, 0x30, + 0x50, 0x30, 0xa1, 0x6d, 0x0c, 0xf0, 0xcb, 0xfc, + 0x10, 0xbd, 0xb0, 0xb5, 0x04, 0x1c, 0x3c, 0x00, + 0xb4, 0x5a, 0x00, 0x00, 0x0d, 0x1c, 0x02, 0xf0, + 0x59, 0xfc, 0x20, 0x1c, 0x02, 0xf0, 0x56, 0xfc, + 0x18, 0x23, 0x04, 0x49, 0x58, 0x43, 0x40, 0x18, + 0x18, 0x22, 0x29, 0x1c, 0xfa, 0xf7, 0x70, 0xfd, + 0xb0, 0xbd, 0x00, 0x00, 0x94, 0x67, 0x01, 0x00, + 0x10, 0xb5, 0x04, 0x1c, 0x09, 0xf0, 0xbc, 0xfb, + 0x20, 0x1c, 0x09, 0xf0, 0xc7, 0xfb, 0x10, 0xbd, + 0x10, 0xb5, 0x04, 0x1c, 0x09, 0xf0, 0xd0, 0xfb, + 0x3c, 0x00, 0xf0, 0x5a, 0x00, 0x00, 0x20, 0x1c, + 0x09, 0xf0, 0xdb, 0xfb, 0x10, 0xbd, 0x70, 0xb5, + 0x0c, 0x78, 0x06, 0x1c, 0x48, 0x88, 0x4d, 0x78, + 0xe2, 0x00, 0x80, 0x1a, 0xe9, 0x00, 0x40, 0x1a, + 0x01, 0x1c, 0x41, 0x43, 0x12, 0x31, 0x24, 0x20, + 0xfa, 0xf7, 0x91, 0xfd, 0x21, 0x1c, 0x61, 0x43, + 0xc9, 0x00, 0x40, 0x18, 0x29, 0x1c, 0x69, 0x43, + 0xc9, 0x00, 0x42, 0x18, 0x0c, 0x49, 0x88, 0x79, + 0x0c, 0x4b, 0x3c, 0x00, 0x2c, 0x5b, 0x00, 0x00, + 0x53, 0x43, 0x0c, 0x4a, 0x13, 0x60, 0x53, 0x7b, + 0x34, 0x02, 0x14, 0x60, 0x52, 0x7b, 0x88, 0x71, + 0x01, 0x33, 0x58, 0x10, 0x08, 0x4b, 0x80, 0x1a, + 0x01, 0x21, 0x49, 0x02, 0x58, 0x43, 0x00, 0x28, + 0x00, 0xda, 0x49, 0x42, 0x08, 0x18, 0x80, 0x12, + 0x21, 0x38, 0x70, 0xbd, 0x20, 0x10, 0x07, 0x00, + 0xec, 0x04, 0x00, 0x00, 0x00, 0xa0, 0x07, 0x00, + 0x03, 0x03, 0x00, 0x00, 0x3c, 0x00, 0x68, 0x5b, + 0x00, 0x00, 0x10, 0xb5, 0x04, 0x1c, 0x06, 0x21, + 0x04, 0x30, 0xfa, 0xf7, 0x70, 0xfc, 0xff, 0x20, + 0x21, 0x30, 0xff, 0x21, 0x01, 0x55, 0x20, 0x1c, + 0xff, 0x30, 0x41, 0x30, 0x81, 0x70, 0x41, 0x71, + 0xc1, 0x73, 0xff, 0x20, 0x63, 0x30, 0x01, 0x55, + 0x00, 0x20, 0x20, 0x61, 0x60, 0x61, 0xff, 0x34, + 0x01, 0x34, 0xa0, 0x60, 0xe0, 0x60, 0x10, 0xbd, + 0x00, 0x00, 0x70, 0xb5, 0x06, 0x1c, 0x3c, 0x00, + 0xa4, 0x5b, 0x00, 0x00, 0x08, 0x1c, 0x58, 0x60, + 0x9a, 0x60, 0x1c, 0x1c, 0x1e, 0x60, 0x15, 0x1c, + 0x9b, 0x8a, 0xe2, 0x8a, 0x31, 0x1c, 0x02, 0xf0, + 0xa1, 0xfc, 0x28, 0x1a, 0xe0, 0x60, 0x70, 0xbd, + 0x70, 0xb5, 0x04, 0x1c, 0x08, 0x1c, 0x11, 0x1c, + 0x1e, 0x1c, 0x00, 0x25, 0xeb, 0x43, 0x22, 0x1c, + 0x18, 0x32, 0x0b, 0xf0, 0xf7, 0xfb, 0x22, 0x1c, + 0xff, 0x32, 0x50, 0x32, 0x11, 0x1c, 0x0a, 0x39, + 0x3c, 0x00, 0xe0, 0x5b, 0x00, 0x00, 0x01, 0x23, + 0x20, 0x1c, 0x00, 0xf0, 0xc6, 0xf8, 0x0c, 0x28, + 0x10, 0xd0, 0x01, 0x25, 0x20, 0x1c, 0x0b, 0xf0, + 0xac, 0xfa, 0x20, 0x1c, 0x00, 0xf0, 0x19, 0xf8, + 0x20, 0x1c, 0x00, 0xf0, 0x0a, 0xf8, 0x20, 0x1c, + 0x00, 0xf0, 0x29, 0xf8, 0x31, 0x1c, 0x20, 0x1c, + 0x0b, 0xf0, 0x17, 0xfa, 0x28, 0x1c, 0x70, 0xbd, + 0x00, 0x00, 0xff, 0x21, 0x1d, 0x31, 0x09, 0x58, + 0x80, 0x30, 0x3c, 0x00, 0x1c, 0x5c, 0x00, 0x00, + 0x89, 0x07, 0x00, 0x29, 0x01, 0xda, 0x01, 0x21, + 0x00, 0xe0, 0x00, 0x21, 0xc1, 0x62, 0x70, 0x47, + 0x01, 0x1c, 0x80, 0x31, 0x00, 0x22, 0x0a, 0x63, + 0x07, 0x4a, 0x12, 0x68, 0x00, 0x2a, 0x09, 0xd0, + 0x42, 0x88, 0x92, 0x06, 0x06, 0xd5, 0xff, 0x30, + 0x01, 0x30, 0xc0, 0x69, 0x40, 0x07, 0x01, 0xd4, + 0x01, 0x20, 0x08, 0x63, 0x70, 0x47, 0x00, 0x00, + 0xac, 0x69, 0x01, 0x00, 0x3c, 0x00, 0x58, 0x5c, + 0x00, 0x00, 0x80, 0xb5, 0x01, 0x1c, 0x4a, 0x88, + 0x00, 0x20, 0x52, 0x05, 0x05, 0xd5, 0xff, 0x31, + 0x01, 0x31, 0xc9, 0x69, 0x49, 0x07, 0x00, 0xd4, + 0x01, 0x20, 0x06, 0xf0, 0xec, 0xfb, 0x80, 0xbd, + 0x00, 0x00, 0xf8, 0xb5, 0x05, 0x1c, 0x98, 0x68, + 0x17, 0x1c, 0x0e, 0x1c, 0x1c, 0x1c, 0x00, 0x28, + 0x02, 0xd1, 0x20, 0x1c, 0x0c, 0xf0, 0x31, 0xf8, + 0xab, 0x69, 0x39, 0x1c, 0x30, 0x1c, 0x3c, 0x00, + 0x94, 0x5c, 0x00, 0x00, 0xa2, 0x68, 0x0b, 0xf0, + 0x95, 0xfb, 0xf8, 0xbd, 0xf8, 0xb5, 0x16, 0x1c, + 0x0d, 0x1c, 0x1f, 0x1c, 0x00, 0x24, 0x02, 0xf0, + 0x61, 0xfb, 0x18, 0x23, 0x06, 0x49, 0x58, 0x43, + 0x40, 0x18, 0x43, 0x68, 0x00, 0x2b, 0x05, 0xd0, + 0x3a, 0x1c, 0x31, 0x1c, 0x28, 0x1c, 0xfa, 0xf7, + 0x8e, 0xfb, 0x01, 0x24, 0x20, 0x1c, 0xf8, 0xbd, + 0x94, 0x67, 0x01, 0x00, 0x80, 0xb5, 0x07, 0xf0, + 0x3c, 0x00, 0xd0, 0x5c, 0x00, 0x00, 0xc5, 0xfa, + 0x09, 0x49, 0x08, 0x61, 0x08, 0x68, 0x00, 0x28, + 0x02, 0xd1, 0x7d, 0x20, 0x00, 0x01, 0x08, 0x60, + 0x08, 0x68, 0x7d, 0x21, 0xc9, 0x00, 0x41, 0x43, + 0x00, 0x23, 0x01, 0x22, 0x0a, 0x20, 0x0d, 0xf0, + 0x4e, 0xfd, 0x80, 0xbd, 0x00, 0x00, 0xd4, 0x67, + 0x01, 0x00, 0x80, 0xb5, 0x01, 0x21, 0x0a, 0x20, + 0x0d, 0xf0, 0x97, 0xfc, 0x80, 0xbd, 0xf8, 0xb5, + 0x0e, 0x1c, 0x3c, 0x00, 0x0c, 0x5d, 0x00, 0x00, + 0x51, 0x68, 0x14, 0x1c, 0x12, 0x68, 0xa5, 0x68, + 0x0b, 0x1c, 0x75, 0x1b, 0x57, 0x19, 0x97, 0x42, + 0x00, 0xd2, 0x01, 0x31, 0x42, 0x68, 0x00, 0x25, + 0x8a, 0x42, 0x02, 0xdd, 0x01, 0x25, 0x62, 0x60, + 0x05, 0xe0, 0x9a, 0x42, 0x03, 0xd1, 0x01, 0x68, + 0xb9, 0x42, 0x00, 0xd9, 0x01, 0x25, 0x00, 0x2d, + 0x09, 0xd0, 0x01, 0x68, 0x21, 0x60, 0xa6, 0x60, + 0xa3, 0x8a, 0xe2, 0x8a, 0x3c, 0x00, 0x48, 0x5d, + 0x00, 0x00, 0x60, 0x68, 0x02, 0xf0, 0xd7, 0xfb, + 0x30, 0x1a, 0xe0, 0x60, 0x28, 0x1c, 0xf8, 0xbd, + 0x00, 0x00, 0x80, 0xb5, 0x02, 0xf0, 0x07, 0xfb, + 0x18, 0x23, 0x03, 0x49, 0x58, 0x43, 0x40, 0x18, + 0x18, 0x21, 0xfa, 0xf7, 0x98, 0xfb, 0x80, 0xbd, + 0x00, 0x00, 0x94, 0x67, 0x01, 0x00, 0xfe, 0xb5, + 0x04, 0x1c, 0x08, 0x1c, 0x11, 0x1c, 0x1e, 0x1c, + 0x0c, 0x25, 0x01, 0x22, 0x00, 0x92, 0x3c, 0x00, + 0x84, 0x5d, 0x00, 0x00, 0xa2, 0x69, 0x02, 0xab, + 0xfd, 0xf7, 0xf0, 0xf8, 0x00, 0x28, 0x45, 0xd0, + 0x02, 0x98, 0x27, 0x21, 0x02, 0x1c, 0x0a, 0x40, + 0x01, 0xd1, 0x08, 0x43, 0x02, 0x90, 0x21, 0x49, + 0xa0, 0x69, 0x08, 0x40, 0x06, 0xd0, 0x02, 0x98, + 0x01, 0x40, 0x03, 0xd1, 0x49, 0x21, 0xc9, 0x00, + 0x08, 0x43, 0x02, 0x90, 0xa0, 0x6d, 0x02, 0x99, + 0x88, 0x42, 0x30, 0xd0, 0x00, 0x2e, 0x2d, 0xd0, + 0x3c, 0x00, 0xc0, 0x5d, 0x00, 0x00, 0x40, 0x21, + 0x20, 0x1c, 0x58, 0x30, 0xfa, 0xf7, 0x69, 0xfb, + 0x02, 0x98, 0x00, 0x25, 0x00, 0x26, 0x37, 0x1c, + 0xa0, 0x65, 0x19, 0xe0, 0xc0, 0x07, 0x11, 0xd5, + 0xf0, 0x19, 0x00, 0x19, 0x70, 0x30, 0x05, 0x71, + 0x28, 0x1c, 0x04, 0xf0, 0xd4, 0xff, 0x00, 0x28, + 0x04, 0xd0, 0xa0, 0x19, 0x80, 0x30, 0x05, 0x72, + 0x01, 0x36, 0x03, 0xe0, 0xe0, 0x19, 0x60, 0x30, + 0x05, 0x70, 0x3c, 0x00, 0xfc, 0x5d, 0x00, 0x00, + 0x01, 0x37, 0x01, 0x35, 0x2d, 0x06, 0x02, 0x98, + 0x2d, 0x0e, 0x40, 0x08, 0x02, 0x90, 0x02, 0x98, + 0x00, 0x28, 0xe2, 0xd1, 0x84, 0x20, 0x06, 0x51, + 0xf0, 0x19, 0x20, 0x67, 0xe7, 0x65, 0x00, 0x25, + 0x00, 0xe0, 0x0b, 0x25, 0x28, 0x1c, 0xfe, 0xbd, + 0xd8, 0x3a, 0x00, 0x00, 0x38, 0xb5, 0x05, 0x1c, + 0x08, 0x1c, 0x11, 0x1c, 0x00, 0x24, 0xe2, 0x43, + 0x6b, 0x46, 0xff, 0xf7, 0x3c, 0x00, 0x38, 0x5e, + 0x00, 0x00, 0x4f, 0xfa, 0x00, 0x28, 0x05, 0xd0, + 0xa8, 0x69, 0x00, 0x99, 0x01, 0x40, 0x81, 0x42, + 0x00, 0xd1, 0x01, 0x24, 0x20, 0x1c, 0x38, 0xbd, + 0x00, 0x00, 0x7c, 0xb5, 0x05, 0x6a, 0x86, 0x69, + 0x04, 0x1c, 0xc0, 0x68, 0xfb, 0xf7, 0xb7, 0xfb, + 0xe1, 0x69, 0xfb, 0xf7, 0xda, 0xfa, 0x20, 0x1c, + 0xe2, 0x69, 0x40, 0x30, 0xc1, 0x8b, 0x12, 0x89, + 0x89, 0x18, 0xc1, 0x83, 0x06, 0x49, 0x3c, 0x00, + 0x74, 0x5e, 0x00, 0x00, 0x01, 0x94, 0x00, 0x91, + 0x28, 0x69, 0x33, 0x1c, 0x82, 0x88, 0x01, 0x68, + 0xe0, 0x68, 0xc0, 0x68, 0x00, 0xf0, 0xf2, 0xf9, + 0x7c, 0xbd, 0x00, 0x00, 0x91, 0x5e, 0x00, 0x00, + 0xb0, 0xb5, 0xd1, 0x68, 0x55, 0x69, 0xc8, 0x68, + 0x14, 0x1c, 0x14, 0x4b, 0x0c, 0xe0, 0x02, 0x68, + 0x9a, 0x42, 0x07, 0xd1, 0xc2, 0x68, 0xca, 0x60, + 0x00, 0x21, 0xc1, 0x60, 0x01, 0x60, 0xfb, 0xf7, + 0x3c, 0x00, 0xb0, 0x5e, 0x00, 0x00, 0x73, 0xfb, + 0x03, 0xe0, 0x01, 0x1c, 0xc0, 0x68, 0x00, 0x28, + 0xf0, 0xd1, 0xe0, 0x68, 0xc0, 0x68, 0xe8, 0x60, + 0xe0, 0x68, 0xc5, 0x60, 0x20, 0x1c, 0x40, 0x30, + 0xc1, 0x8b, 0x2a, 0x89, 0x89, 0x18, 0xc1, 0x83, + 0x20, 0x68, 0x00, 0x28, 0x02, 0xd0, 0xff, 0xf7, + 0xba, 0xff, 0xb0, 0xbd, 0x04, 0x48, 0x04, 0xf0, + 0x4e, 0xf9, 0x00, 0x6a, 0x07, 0xf0, 0x77, 0xfa, + 0xb0, 0xbd, 0x3c, 0x00, 0xec, 0x5e, 0x00, 0x00, + 0xa0, 0x7e, 0x01, 0x00, 0xa0, 0x6a, 0x01, 0x00, + 0xf1, 0xb5, 0x82, 0xb0, 0x02, 0x98, 0x06, 0x69, + 0x01, 0x1c, 0x08, 0x36, 0x60, 0x31, 0x45, 0x68, + 0x01, 0x91, 0x82, 0xe0, 0x10, 0x21, 0x00, 0x20, + 0x2f, 0x69, 0xfb, 0xf7, 0x63, 0xfb, 0x68, 0x61, + 0x01, 0x89, 0x08, 0x39, 0x09, 0x04, 0x09, 0x0c, + 0x01, 0x81, 0x68, 0x69, 0x00, 0x68, 0x40, 0x18, + 0x08, 0x21, 0xfb, 0xf7, 0x3c, 0x00, 0x28, 0x5f, + 0x00, 0x00, 0x57, 0xfb, 0xe8, 0x61, 0x68, 0x69, + 0x71, 0x88, 0x00, 0x68, 0x20, 0x22, 0x01, 0x80, + 0x71, 0x68, 0x41, 0x60, 0x01, 0x99, 0x49, 0x7b, + 0x89, 0x01, 0x11, 0x43, 0xc1, 0x70, 0x00, 0x21, + 0x81, 0x70, 0x28, 0x20, 0xfb, 0xf7, 0x75, 0xfc, + 0x39, 0x88, 0x04, 0x1c, 0xc1, 0x81, 0xa8, 0x6b, + 0x00, 0x28, 0x03, 0xd1, 0x01, 0x20, 0x80, 0x02, + 0x08, 0x43, 0xe0, 0x81, 0x06, 0x22, 0x3c, 0x00, + 0x64, 0x5f, 0x00, 0x00, 0x39, 0x1d, 0x20, 0x1c, + 0x10, 0x30, 0xfa, 0xf7, 0xc5, 0xfa, 0x39, 0x1c, + 0x0a, 0x31, 0x06, 0x22, 0x20, 0x1c, 0x16, 0x30, + 0x00, 0x90, 0xfa, 0xf7, 0xbd, 0xfa, 0x39, 0x1c, + 0x10, 0x31, 0x06, 0x22, 0x20, 0x1c, 0x1c, 0x30, + 0xfa, 0xf7, 0xb6, 0xfa, 0xe1, 0x89, 0x25, 0x4a, + 0x5c, 0x20, 0x11, 0x40, 0x01, 0x22, 0x92, 0x03, + 0x11, 0x43, 0x40, 0x5b, 0xe1, 0x81, 0x0f, 0x21, + 0x3c, 0x00, 0xa0, 0x5f, 0x00, 0x00, 0x08, 0x40, + 0x60, 0x84, 0x20, 0x1c, 0x20, 0x30, 0x16, 0x21, + 0x81, 0x71, 0x00, 0x21, 0x21, 0x70, 0xe9, 0x6b, + 0x00, 0x29, 0x07, 0xd0, 0x29, 0x69, 0x09, 0x8b, + 0x09, 0x07, 0x09, 0x0f, 0x21, 0x70, 0xa1, 0x84, + 0x18, 0x21, 0x81, 0x71, 0x06, 0x22, 0x60, 0x1c, + 0x00, 0x99, 0xfa, 0xf7, 0x94, 0xfa, 0x70, 0x68, + 0x00, 0x0e, 0xe0, 0x71, 0x70, 0x68, 0x00, 0x02, + 0x00, 0x0e, 0x3c, 0x00, 0xdc, 0x5f, 0x00, 0x00, + 0x20, 0x72, 0x70, 0x68, 0x00, 0x04, 0x00, 0x0e, + 0x60, 0x72, 0x70, 0x68, 0xa0, 0x72, 0x70, 0x88, + 0x00, 0x0a, 0xe0, 0x72, 0x70, 0x88, 0x20, 0x73, + 0x70, 0x88, 0x01, 0x30, 0x00, 0x04, 0x00, 0x0c, + 0x70, 0x80, 0x02, 0xd1, 0x70, 0x68, 0x01, 0x30, + 0x70, 0x60, 0xac, 0x61, 0x02, 0x98, 0x28, 0x62, + 0x2d, 0x68, 0x00, 0x2d, 0x00, 0xd0, 0x79, 0xe7, + 0x02, 0x98, 0x04, 0x49, 0x3c, 0x00, 0x18, 0x60, + 0x00, 0x00, 0x42, 0x68, 0x04, 0x48, 0x04, 0xf0, + 0x74, 0xf8, 0xfe, 0xbd, 0x00, 0x00, 0x8f, 0xc7, + 0xff, 0xff, 0x3d, 0xda, 0x00, 0x00, 0xa0, 0x6a, + 0x01, 0x00, 0xb0, 0xb5, 0x07, 0x4d, 0x28, 0x78, + 0x03, 0x28, 0x08, 0xd0, 0x00, 0x24, 0x2c, 0x70, + 0x69, 0x68, 0x00, 0x29, 0x03, 0xd0, 0x01, 0x20, + 0xfa, 0xf7, 0xc8, 0xf9, 0x6c, 0x60, 0xb0, 0xbd, + 0x00, 0x00, 0x9c, 0x73, 0x01, 0x00, 0x3c, 0x00, + 0x54, 0x60, 0x00, 0x00, 0xf8, 0xb5, 0x2b, 0x4b, + 0xd8, 0x6a, 0x00, 0x28, 0x50, 0xd0, 0x2a, 0x48, + 0x01, 0x1c, 0xff, 0x31, 0x01, 0x31, 0xca, 0x68, + 0x01, 0x32, 0xca, 0x60, 0x1a, 0x6c, 0x00, 0x2a, + 0x02, 0xd1, 0x4a, 0x69, 0x01, 0x32, 0x4a, 0x61, + 0x0a, 0x69, 0x01, 0x32, 0x0a, 0x61, 0xda, 0x68, + 0x00, 0x2a, 0x04, 0xd0, 0x1f, 0x4a, 0x01, 0x32, + 0x12, 0x78, 0x00, 0x2a, 0x02, 0xd1, 0x8a, 0x69, + 0x3c, 0x00, 0x90, 0x60, 0x00, 0x00, 0x01, 0x32, + 0x8a, 0x61, 0x00, 0x25, 0x07, 0x1d, 0x18, 0x26, + 0x1a, 0x4a, 0x6e, 0x43, 0x74, 0x32, 0x90, 0x59, + 0x00, 0x28, 0x29, 0xd0, 0xb4, 0x18, 0x60, 0x69, + 0x00, 0x28, 0x25, 0xd1, 0x60, 0x68, 0x00, 0x28, + 0x02, 0xd0, 0x01, 0x68, 0x00, 0x29, 0x05, 0xd1, + 0xa1, 0x68, 0x00, 0x29, 0x1c, 0xd0, 0x09, 0x68, + 0x00, 0x29, 0x19, 0xd0, 0x00, 0x28, 0x05, 0xd0, + 0xe1, 0x68, 0x3c, 0x00, 0xcc, 0x60, 0x00, 0x00, + 0x01, 0x31, 0xe1, 0x60, 0x00, 0x68, 0x81, 0x42, + 0x11, 0xd3, 0xa0, 0x68, 0x00, 0x28, 0x06, 0xd0, + 0x21, 0x69, 0x00, 0x68, 0x08, 0x18, 0x0c, 0xf0, + 0xa3, 0xfd, 0x00, 0x28, 0x07, 0xd0, 0x06, 0x4a, + 0x01, 0x20, 0x60, 0x61, 0x74, 0x32, 0x91, 0x59, + 0x38, 0x1c, 0xfa, 0xf7, 0x70, 0xf9, 0x01, 0x35, + 0x02, 0x2d, 0xcb, 0xdb, 0xf8, 0xbd, 0x00, 0x00, + 0x44, 0x7d, 0x01, 0x00, 0x3c, 0x00, 0x08, 0x61, + 0x00, 0x00, 0xf4, 0x67, 0x01, 0x00, 0xf8, 0xb5, + 0x0f, 0x1c, 0x00, 0x25, 0x04, 0x1c, 0x00, 0x28, + 0x25, 0xd0, 0x20, 0x1c, 0x04, 0xf0, 0x03, 0xfe, + 0x00, 0x28, 0x06, 0xd0, 0xff, 0xf7, 0xff, 0xf8, + 0x04, 0x1c, 0xff, 0xf7, 0x50, 0xfb, 0x06, 0x1c, + 0x07, 0xe0, 0x20, 0x1c, 0xff, 0xf7, 0x91, 0xfb, + 0x06, 0x1c, 0x20, 0x1c, 0xff, 0xf7, 0x6f, 0xfb, + 0x04, 0x1c, 0x00, 0x2e, 0x06, 0xd0, 0x3c, 0x00, + 0x44, 0x61, 0x00, 0x00, 0xff, 0xf7, 0x4c, 0xfb, + 0x00, 0x28, 0x02, 0xd0, 0x01, 0x25, 0x01, 0x20, + 0x07, 0xe0, 0x00, 0x2c, 0x06, 0xd0, 0xff, 0xf7, + 0xef, 0xf8, 0x00, 0x28, 0x02, 0xd0, 0x01, 0x25, + 0x00, 0x20, 0x38, 0x60, 0x28, 0x1c, 0xf8, 0xbd, + 0xb0, 0xb5, 0xc5, 0x68, 0x04, 0x1c, 0x0d, 0xf0, + 0x8f, 0xfc, 0x20, 0x7e, 0xc1, 0x07, 0x08, 0xd5, + 0xe1, 0x68, 0xa9, 0x42, 0x05, 0xd9, 0x22, 0x69, + 0x3c, 0x00, 0x80, 0x61, 0x00, 0x00, 0x91, 0x42, + 0x02, 0xd3, 0xe1, 0x8a, 0x01, 0x31, 0xe1, 0x82, + 0x81, 0x07, 0x08, 0xd5, 0xe1, 0x68, 0xa9, 0x42, + 0x05, 0xd2, 0x22, 0x69, 0x91, 0x42, 0x02, 0xd8, + 0xe1, 0x8a, 0x01, 0x31, 0xe1, 0x82, 0x40, 0x07, + 0x06, 0xd5, 0xe0, 0x68, 0x21, 0x69, 0x88, 0x42, + 0x02, 0xd1, 0xe0, 0x8a, 0x01, 0x30, 0xe0, 0x82, + 0xe0, 0x8a, 0xa1, 0x8a, 0x88, 0x42, 0x0d, 0xd3, + 0x60, 0x7e, 0x3c, 0x00, 0xbc, 0x61, 0x00, 0x00, + 0x02, 0x28, 0x0b, 0xd0, 0x20, 0x68, 0xe1, 0x68, + 0x04, 0x22, 0x07, 0xf0, 0x65, 0xfb, 0x60, 0x7e, + 0x00, 0x28, 0x03, 0xd1, 0x20, 0x68, 0x08, 0xf0, + 0xab, 0xff, 0xb0, 0xbd, 0x00, 0x20, 0xe0, 0x82, + 0xb0, 0xbd, 0x00, 0x00, 0x70, 0xb5, 0x06, 0x1c, + 0x0c, 0x23, 0x20, 0x49, 0x58, 0x43, 0x45, 0x18, + 0x00, 0x20, 0xa8, 0x60, 0x30, 0x1c, 0x06, 0xf0, + 0x91, 0xfe, 0x04, 0x1c, 0x3c, 0x00, 0xf8, 0x61, + 0x00, 0x00, 0x68, 0x60, 0x33, 0xd0, 0x01, 0x20, + 0xa8, 0x70, 0x2c, 0x20, 0x00, 0x5d, 0x02, 0x28, + 0x03, 0xd1, 0x20, 0x1c, 0x03, 0xf0, 0x45, 0xfe, + 0x10, 0xe0, 0x61, 0x6b, 0x00, 0x29, 0x0a, 0xd0, + 0x01, 0x28, 0x04, 0xd1, 0x21, 0x1c, 0x28, 0x1c, + 0x03, 0xf0, 0x55, 0xfe, 0x06, 0xe0, 0x20, 0x1c, + 0x0a, 0xf0, 0x0d, 0xfc, 0x02, 0xe0, 0x20, 0x1c, + 0x0a, 0xf0, 0x3d, 0xfb, 0x0d, 0x48, 0x3c, 0x00, + 0x34, 0x62, 0x00, 0x00, 0x14, 0x38, 0x41, 0x68, + 0x00, 0x29, 0x10, 0xd0, 0x20, 0x1c, 0x40, 0x30, + 0x02, 0x8b, 0x12, 0x07, 0x92, 0x0f, 0x01, 0x2a, + 0x09, 0xd0, 0x80, 0x8b, 0x32, 0x02, 0x00, 0x09, + 0x00, 0x04, 0x10, 0x43, 0x81, 0x22, 0x02, 0x43, + 0x0c, 0x20, 0x0d, 0xf0, 0xb7, 0xf9, 0x0c, 0xf0, + 0xa5, 0xfd, 0x60, 0x64, 0x70, 0xbd, 0x00, 0x00, + 0x60, 0x7b, 0x01, 0x00, 0xff, 0xb5, 0x08, 0x1c, + 0x3c, 0x00, 0x70, 0x62, 0x00, 0x00, 0x11, 0x1c, + 0x0c, 0x32, 0x20, 0x24, 0x14, 0x43, 0x0c, 0x4a, + 0x83, 0xb0, 0x0c, 0xae, 0x52, 0x68, 0x60, 0xce, + 0x94, 0x70, 0x00, 0x24, 0xd4, 0x70, 0x93, 0x63, + 0x0d, 0x23, 0x40, 0x27, 0xbb, 0x52, 0x94, 0x61, + 0x14, 0x84, 0x01, 0x22, 0x02, 0x92, 0x32, 0x1c, + 0x00, 0x90, 0x01, 0x91, 0x23, 0x1c, 0x29, 0x1c, + 0x03, 0x98, 0x00, 0xf0, 0x66, 0xf9, 0x07, 0xb0, + 0xf0, 0xbd, 0x3c, 0x00, 0xac, 0x62, 0x00, 0x00, + 0xa0, 0x7e, 0x01, 0x00, 0xf8, 0xb5, 0x04, 0x1c, + 0x00, 0x27, 0x11, 0x4e, 0x1d, 0xe0, 0xe0, 0x68, + 0x00, 0x28, 0x70, 0x68, 0x0c, 0xd1, 0x80, 0x88, + 0x00, 0x07, 0x0d, 0xd1, 0x01, 0x21, 0x0c, 0x48, + 0xfb, 0xf7, 0x84, 0xf9, 0xc4, 0x60, 0xe8, 0x60, + 0x70, 0x68, 0x81, 0x88, 0x01, 0x31, 0x02, 0xe0, + 0x81, 0x88, 0x22, 0x89, 0x89, 0x18, 0x81, 0x80, + 0xe0, 0x68, 0x39, 0x1c, 0x3c, 0x00, 0xe8, 0x62, + 0x00, 0x00, 0x00, 0x28, 0x01, 0xd1, 0x71, 0x68, + 0xc9, 0x6d, 0x25, 0x1c, 0x61, 0x60, 0x04, 0x1c, + 0x00, 0x2c, 0xdf, 0xd1, 0xf8, 0xbd, 0xa0, 0x7e, + 0x01, 0x00, 0x06, 0x49, 0x10, 0xb5, 0x49, 0x68, + 0x00, 0x23, 0x05, 0xe0, 0x8a, 0x88, 0x04, 0x89, + 0x12, 0x19, 0x8a, 0x80, 0x43, 0x60, 0xc0, 0x68, + 0x00, 0x28, 0xf7, 0xd1, 0x10, 0xbd, 0xa0, 0x7e, + 0x01, 0x00, 0x10, 0xb5, 0x09, 0x49, 0x3c, 0x00, + 0x24, 0x63, 0x00, 0x00, 0x00, 0x24, 0x49, 0x68, + 0x0a, 0xe0, 0x8a, 0x88, 0x03, 0x89, 0xd2, 0x18, + 0x8a, 0x80, 0xc3, 0x68, 0x22, 0x1c, 0x00, 0x2b, + 0x00, 0xd1, 0xca, 0x6d, 0x42, 0x60, 0x18, 0x1c, + 0x00, 0x28, 0xf2, 0xd1, 0x10, 0xbd, 0x00, 0x00, + 0xa0, 0x7e, 0x01, 0x00, 0x01, 0x1c, 0x13, 0x48, + 0x10, 0xb5, 0x40, 0x68, 0x00, 0x23, 0x09, 0xe0, + 0x82, 0x88, 0x0c, 0x89, 0x12, 0x19, 0x82, 0x80, + 0x3c, 0x00, 0x60, 0x63, 0x00, 0x00, 0x4b, 0x60, + 0xca, 0x68, 0x00, 0x2a, 0x00, 0xd1, 0x41, 0x66, + 0xc9, 0x68, 0x00, 0x29, 0xf3, 0xd1, 0x01, 0x1c, + 0x68, 0x31, 0x81, 0x64, 0xc3, 0x64, 0x43, 0x65, + 0x82, 0x88, 0x08, 0x23, 0x11, 0x1c, 0x08, 0x31, + 0x89, 0x07, 0x89, 0x0f, 0x59, 0x1a, 0x50, 0x23, + 0x19, 0x52, 0x51, 0x18, 0x81, 0x80, 0x01, 0x1c, + 0x40, 0x6e, 0x48, 0x31, 0xc1, 0x60, 0x10, 0xbd, + 0x00, 0x00, 0x3c, 0x00, 0x9c, 0x63, 0x00, 0x00, + 0xa0, 0x7e, 0x01, 0x00, 0x10, 0xb5, 0x07, 0x49, + 0x00, 0x24, 0x4b, 0x68, 0x06, 0xe0, 0xc2, 0x68, + 0x21, 0x1c, 0x00, 0x2a, 0x00, 0xd1, 0xd9, 0x6d, + 0x41, 0x60, 0x10, 0x1c, 0x00, 0x28, 0xf6, 0xd1, + 0x10, 0xbd, 0x00, 0x00, 0xa0, 0x7e, 0x01, 0x00, + 0x70, 0x47, 0x00, 0x00, 0xfe, 0xb5, 0x06, 0x1c, + 0x0c, 0x48, 0x0c, 0x1c, 0x40, 0x68, 0x80, 0x21, + 0x81, 0x70, 0x00, 0x21, 0x3c, 0x00, 0xd8, 0x63, + 0x00, 0x00, 0xc1, 0x70, 0x15, 0x1c, 0x40, 0x22, + 0x81, 0x63, 0x11, 0x52, 0x81, 0x61, 0x01, 0x84, + 0x00, 0x20, 0x04, 0x22, 0x02, 0x92, 0x00, 0x90, + 0x01, 0x91, 0x29, 0x1c, 0x20, 0x1c, 0x1a, 0x1c, + 0x33, 0x1c, 0x00, 0xf0, 0xbc, 0xf8, 0xfe, 0xbd, + 0x00, 0x00, 0xa0, 0x7e, 0x01, 0x00, 0x70, 0xb5, + 0x06, 0x1c, 0x17, 0x48, 0x80, 0x78, 0x02, 0x21, + 0x16, 0x4a, 0x88, 0x43, 0x90, 0x70, 0x3c, 0x00, + 0x14, 0x64, 0x00, 0x00, 0x10, 0x1c, 0x80, 0x78, + 0x08, 0x43, 0x11, 0x1c, 0x88, 0x70, 0x13, 0x48, + 0x00, 0x24, 0xc4, 0x70, 0x70, 0x20, 0xfb, 0xf7, + 0xd9, 0xf9, 0x11, 0x4d, 0x70, 0x21, 0x68, 0x60, + 0xfa, 0xf7, 0x34, 0xf8, 0x30, 0x07, 0x00, 0x0f, + 0x69, 0x68, 0x90, 0x30, 0xc8, 0x65, 0x0d, 0x48, + 0x68, 0x22, 0x08, 0x80, 0x08, 0x1c, 0x28, 0x30, + 0x89, 0x60, 0x48, 0x61, 0x08, 0x20, 0x08, 0x82, + 0x3c, 0x00, 0x50, 0x64, 0x00, 0x00, 0x08, 0x1c, + 0x38, 0x30, 0x48, 0x63, 0x20, 0x38, 0x48, 0x64, + 0x5a, 0x20, 0x50, 0x54, 0x06, 0x48, 0x08, 0x31, + 0x41, 0x64, 0x44, 0x65, 0x70, 0xbd, 0x00, 0x00, + 0x07, 0x00, 0x58, 0x00, 0x07, 0x00, 0xa0, 0x7e, + 0x01, 0x00, 0xde, 0xc0, 0x00, 0x00, 0x00, 0x30, + 0x07, 0x00, 0x0a, 0x4b, 0x10, 0xb5, 0x58, 0x6d, + 0x0a, 0x49, 0x00, 0x22, 0x49, 0x68, 0x00, 0x24, + 0x4a, 0x62, 0x3c, 0x00, 0x8c, 0x64, 0x00, 0x00, + 0x5c, 0x65, 0x4b, 0x6e, 0x00, 0x2b, 0x01, 0xd0, + 0xda, 0x60, 0x4a, 0x66, 0x8b, 0x6d, 0x00, 0x2b, + 0x03, 0xd0, 0x0a, 0x6e, 0x00, 0x21, 0xf9, 0xf7, + 0x9c, 0xff, 0x10, 0xbd, 0x00, 0x30, 0x07, 0x00, + 0xa0, 0x7e, 0x01, 0x00, 0x09, 0x49, 0x10, 0xb5, + 0x08, 0x88, 0x01, 0x30, 0x08, 0x80, 0x01, 0x20, + 0x07, 0x49, 0x80, 0x02, 0x08, 0x60, 0x07, 0x4c, + 0xa2, 0x6d, 0x00, 0x2a, 0x3c, 0x00, 0xc8, 0x64, + 0x00, 0x00, 0x05, 0xd0, 0x05, 0x21, 0xd1, 0x20, + 0x0d, 0xf0, 0x6f, 0xf9, 0x01, 0x20, 0xa0, 0x65, + 0x10, 0xbd, 0xb0, 0x74, 0x01, 0x00, 0x00, 0x10, + 0x07, 0x00, 0x00, 0x30, 0x07, 0x00, 0xff, 0xb5, + 0x83, 0xb0, 0x0c, 0xae, 0x86, 0x46, 0x8c, 0x46, + 0x0e, 0x4a, 0x43, 0xce, 0x0f, 0xad, 0x0f, 0x1c, + 0x52, 0x68, 0x0c, 0x37, 0x30, 0xcd, 0x97, 0x70, + 0xd3, 0x70, 0x96, 0x63, 0x0d, 0x26, 0x3c, 0x00, + 0x04, 0x65, 0x00, 0x00, 0x40, 0x27, 0xbe, 0x52, + 0x05, 0x9e, 0x96, 0x61, 0x13, 0x84, 0x00, 0x22, + 0x02, 0x92, 0x2a, 0x1c, 0x00, 0x90, 0x01, 0x91, + 0x21, 0x1c, 0x60, 0x46, 0x73, 0x46, 0x00, 0xf0, + 0x29, 0xf8, 0x07, 0xb0, 0xf0, 0xbd, 0x00, 0x00, + 0xa0, 0x7e, 0x01, 0x00, 0xff, 0xb5, 0x10, 0x1c, + 0x1a, 0x1c, 0x0c, 0x1c, 0x19, 0x1c, 0x60, 0x23, + 0xff, 0x32, 0x13, 0x43, 0x0c, 0x4a, 0x83, 0xb0, + 0x3c, 0x00, 0x40, 0x65, 0x00, 0x00, 0x0c, 0xae, + 0x52, 0x68, 0x60, 0xce, 0x93, 0x70, 0x00, 0x23, + 0xd3, 0x70, 0x93, 0x63, 0x40, 0x27, 0xbb, 0x52, + 0x93, 0x61, 0x13, 0x84, 0x03, 0x22, 0x02, 0x92, + 0x01, 0x91, 0x29, 0x1c, 0x32, 0x1c, 0x00, 0x90, + 0x20, 0x1c, 0x03, 0x9b, 0x00, 0xf0, 0x05, 0xf8, + 0x07, 0xb0, 0xf0, 0xbd, 0x00, 0x00, 0xa0, 0x7e, + 0x01, 0x00, 0xf8, 0xb5, 0x05, 0x1c, 0x11, 0x48, + 0x1c, 0x1c, 0x3c, 0x00, 0x7c, 0x65, 0x00, 0x00, + 0x08, 0x9b, 0x07, 0x9f, 0x40, 0x68, 0xde, 0x00, + 0x81, 0x65, 0x02, 0x66, 0x00, 0x21, 0x81, 0x80, + 0x0d, 0x48, 0x81, 0x59, 0x20, 0x1c, 0xf9, 0xf7, + 0x22, 0xff, 0x0b, 0x48, 0x30, 0x18, 0x41, 0x68, + 0x28, 0x1c, 0xf9, 0xf7, 0x1c, 0xff, 0x07, 0x49, + 0x06, 0x98, 0x49, 0x68, 0x00, 0x2c, 0x88, 0x62, + 0x0f, 0x86, 0x00, 0xd1, 0x2c, 0x1c, 0x05, 0x48, + 0x4c, 0x62, 0x45, 0x65, 0x3c, 0x00, 0xb8, 0x65, + 0x00, 0x00, 0x01, 0x21, 0x01, 0x65, 0x01, 0x64, + 0xf8, 0xbd, 0xa0, 0x7e, 0x01, 0x00, 0x90, 0x52, + 0x01, 0x00, 0x00, 0x30, 0x07, 0x00, 0xff, 0xb5, + 0x83, 0xb0, 0x0d, 0xae, 0x60, 0xce, 0x0c, 0x9f, + 0x08, 0x1c, 0x11, 0x1c, 0xd2, 0x19, 0xff, 0x32, + 0x40, 0x24, 0x14, 0x43, 0x0b, 0x4a, 0x52, 0x68, + 0x94, 0x70, 0x00, 0x24, 0xd4, 0x70, 0x93, 0x63, + 0x40, 0x23, 0x9f, 0x52, 0x94, 0x61, 0x3c, 0x00, + 0xf4, 0x65, 0x00, 0x00, 0x14, 0x84, 0x02, 0x22, + 0x02, 0x92, 0x32, 0x1c, 0x00, 0x90, 0x01, 0x91, + 0x23, 0x1c, 0x29, 0x1c, 0x03, 0x98, 0xff, 0xf7, + 0xb5, 0xff, 0x07, 0xb0, 0xf0, 0xbd, 0x00, 0x00, + 0xa0, 0x7e, 0x01, 0x00, 0x4c, 0x21, 0x0d, 0x4a, + 0x41, 0x43, 0x10, 0xb5, 0x8c, 0x18, 0x0c, 0x49, + 0x09, 0x78, 0x88, 0x42, 0x07, 0xd1, 0x05, 0xf0, + 0xc7, 0xfd, 0x0a, 0x48, 0x01, 0x88, 0x01, 0x22, + 0x3c, 0x00, 0x30, 0x66, 0x00, 0x00, 0x12, 0x03, + 0x91, 0x43, 0x01, 0x80, 0x20, 0x1c, 0x30, 0x30, + 0x0c, 0x23, 0xc1, 0x56, 0x40, 0x7b, 0x81, 0x42, + 0x02, 0xdd, 0x20, 0x8d, 0x0c, 0xf0, 0xe5, 0xfb, + 0x10, 0xbd, 0x58, 0xe3, 0x01, 0x00, 0x3c, 0x7c, + 0x01, 0x00, 0x32, 0x80, 0x07, 0x00, 0x01, 0x1c, + 0x60, 0x31, 0x80, 0xb5, 0xca, 0x79, 0x8b, 0x79, + 0x9a, 0x42, 0x07, 0xd9, 0x48, 0x7a, 0x0c, 0x23, + 0x07, 0x49, 0x3c, 0x00, 0x6c, 0x66, 0x00, 0x00, + 0x58, 0x43, 0x08, 0x5a, 0x0c, 0xf0, 0xd0, 0xfb, + 0x80, 0xbd, 0x20, 0x30, 0x00, 0x7b, 0x01, 0x28, + 0xfa, 0xd1, 0x48, 0x7a, 0x05, 0xf0, 0x40, 0xfd, + 0x80, 0xbd, 0x00, 0x00, 0x60, 0x7b, 0x01, 0x00, + 0x10, 0xb5, 0x04, 0x1c, 0x1c, 0x21, 0xf9, 0xf7, + 0x03, 0xff, 0x03, 0x48, 0xa0, 0x80, 0xe0, 0x80, + 0x20, 0x81, 0x60, 0x81, 0xa0, 0x81, 0x10, 0xbd, + 0xff, 0xff, 0x00, 0x00, 0x3c, 0x00, 0xa8, 0x66, + 0x00, 0x00, 0xff, 0xb5, 0x04, 0x1c, 0x00, 0x20, + 0x83, 0xb0, 0x0d, 0x1c, 0x06, 0x2c, 0x02, 0x90, + 0x38, 0xd2, 0x1f, 0x4a, 0xff, 0x26, 0xc1, 0x00, + 0x89, 0x18, 0x89, 0x78, 0xa1, 0x42, 0x03, 0xd1, + 0xc0, 0x00, 0x80, 0x18, 0x46, 0x78, 0x04, 0xe0, + 0x01, 0x30, 0x00, 0x06, 0x00, 0x16, 0x06, 0x28, + 0xf1, 0xdb, 0xff, 0x2e, 0x24, 0xd0, 0x01, 0x93, + 0x20, 0x1c, 0x0d, 0xf0, 0xe8, 0xf9, 0x3c, 0x00, + 0xe4, 0x66, 0x00, 0x00, 0x00, 0x28, 0x05, 0xd0, + 0x24, 0x21, 0x28, 0x1c, 0x01, 0xab, 0x02, 0xaa, + 0xfa, 0xf7, 0x30, 0xfe, 0x10, 0x49, 0xf0, 0x00, + 0x30, 0x39, 0x0f, 0x58, 0x31, 0x06, 0x09, 0x16, + 0x28, 0x1c, 0x05, 0x9a, 0x01, 0x9b, 0xf9, 0xf7, + 0x6e, 0xfe, 0x06, 0x1c, 0x10, 0xd1, 0x20, 0x1c, + 0x0d, 0xf0, 0xd0, 0xf9, 0x00, 0x28, 0x0b, 0xd0, + 0x28, 0x1c, 0x69, 0x69, 0xfa, 0xf7, 0x12, 0xfe, + 0x3c, 0x00, 0x20, 0x67, 0x00, 0x00, 0x02, 0x98, + 0x68, 0x61, 0x04, 0xe0, 0x06, 0x2c, 0x01, 0xd3, + 0x07, 0x26, 0x00, 0xe0, 0x08, 0x26, 0x30, 0x1c, + 0x07, 0xb0, 0xf0, 0xbd, 0x00, 0x00, 0xcc, 0x5a, + 0x01, 0x00, 0x10, 0xb5, 0x0c, 0x1c, 0x09, 0xf0, + 0x86, 0xf8, 0x00, 0x28, 0x02, 0xd0, 0x20, 0x1c, + 0x09, 0xf0, 0xb5, 0xf8, 0x10, 0xbd, 0xfe, 0xb5, + 0x13, 0x4d, 0x04, 0x1c, 0xae, 0x69, 0x00, 0x2e, + 0x1c, 0xd0, 0x3c, 0x00, 0x5c, 0x67, 0x00, 0x00, + 0x10, 0x4f, 0x30, 0x37, 0x78, 0x68, 0x60, 0x43, + 0x01, 0x1c, 0x28, 0x88, 0xf9, 0xf7, 0xd2, 0xff, + 0x39, 0x68, 0x61, 0x43, 0x41, 0x18, 0x01, 0xa8, + 0x32, 0x1c, 0xf9, 0xf7, 0x37, 0xfe, 0x02, 0x98, + 0x29, 0x6a, 0x40, 0x18, 0x28, 0x62, 0x0b, 0xd4, + 0xe9, 0x69, 0x88, 0x42, 0x08, 0xd9, 0xa9, 0x69, + 0x40, 0x1a, 0x28, 0x62, 0x01, 0x98, 0x01, 0x30, + 0x01, 0xe0, 0x00, 0x20, 0x3c, 0x00, 0x98, 0x67, + 0x00, 0x00, 0x02, 0x90, 0x01, 0x90, 0x01, 0x98, + 0xfe, 0xbd, 0xc8, 0x74, 0x01, 0x00, 0xf8, 0xb5, + 0x00, 0x28, 0x28, 0xd0, 0x00, 0x24, 0x14, 0x4d, + 0x00, 0xe0, 0x01, 0x34, 0x61, 0x00, 0x09, 0x19, + 0x49, 0x19, 0x49, 0x78, 0x00, 0x29, 0xf8, 0xd1, + 0x63, 0x00, 0x1b, 0x19, 0x03, 0x33, 0x07, 0x22, + 0x69, 0x46, 0x03, 0xf0, 0xd4, 0xfb, 0x00, 0x2c, + 0x0f, 0xd0, 0x00, 0x20, 0x00, 0x99, 0x3c, 0x00, + 0xd4, 0x67, 0x00, 0x00, 0x0a, 0xe0, 0x42, 0x00, + 0x12, 0x18, 0xae, 0x5c, 0x53, 0x18, 0x52, 0x19, + 0x5e, 0x71, 0x56, 0x78, 0x01, 0x30, 0x9e, 0x71, + 0x92, 0x78, 0xda, 0x71, 0xa0, 0x42, 0xf2, 0xdb, + 0x00, 0x98, 0x03, 0x22, 0x02, 0x30, 0x03, 0x49, + 0xf9, 0xf7, 0x7e, 0xfe, 0xf8, 0xbd, 0x00, 0x00, + 0xeb, 0x62, 0x01, 0x00, 0xe8, 0x62, 0x01, 0x00, + 0xb0, 0xb5, 0x05, 0x1c, 0x08, 0x1c, 0xfa, 0xf7, + 0x3c, 0x00, 0x10, 0x68, 0x00, 0x00, 0x9d, 0xff, + 0x04, 0x1c, 0x28, 0x1c, 0xfa, 0xf7, 0xd9, 0xfe, + 0x21, 0x1c, 0xfa, 0xf7, 0xfc, 0xfd, 0x20, 0x1c, + 0xb0, 0xbd, 0xf3, 0xb5, 0x44, 0x48, 0x0c, 0x1c, + 0x00, 0x78, 0x81, 0xb0, 0x01, 0x28, 0x72, 0xd1, + 0xfa, 0xf7, 0x82, 0xf8, 0x41, 0x4d, 0xe8, 0x6a, + 0x41, 0x49, 0x08, 0x60, 0xe8, 0x6b, 0x48, 0x60, + 0x40, 0x48, 0xfa, 0xf7, 0xa6, 0xf9, 0xe8, 0x6a, + 0x00, 0x28, 0x3c, 0x00, 0x4c, 0x68, 0x00, 0x00, + 0xfc, 0xda, 0x22, 0x1c, 0x0f, 0x20, 0x01, 0x99, + 0x0a, 0xf0, 0xa4, 0xf8, 0x38, 0x4d, 0x02, 0x27, + 0x2f, 0x63, 0x38, 0x4a, 0x64, 0x26, 0x00, 0x20, + 0xaa, 0x21, 0x08, 0x32, 0x13, 0x18, 0x01, 0x30, + 0x00, 0x04, 0x00, 0x0c, 0x64, 0x28, 0x19, 0x74, + 0xf8, 0xd3, 0x16, 0x81, 0x00, 0x20, 0x50, 0x60, + 0x10, 0x1c, 0x10, 0x30, 0x10, 0x60, 0x00, 0x25, + 0x17, 0x1c, 0xd2, 0x60, 0x3c, 0x00, 0x88, 0x68, + 0x00, 0x00, 0x08, 0xe0, 0x28, 0x1c, 0xf9, 0xf7, + 0xa2, 0xff, 0x41, 0x31, 0x78, 0x19, 0x01, 0x35, + 0x2d, 0x04, 0x2d, 0x0c, 0x01, 0x74, 0xb5, 0x42, + 0xf4, 0xd3, 0x26, 0x4d, 0x6f, 0x63, 0x01, 0x20, + 0x28, 0x63, 0x24, 0x4d, 0xe8, 0x6a, 0x00, 0x28, + 0xfb, 0xda, 0x0b, 0x22, 0x3b, 0x1c, 0x24, 0x4e, + 0x03, 0xe0, 0x01, 0x32, 0x64, 0x2a, 0x00, 0xd1, + 0x00, 0x22, 0x10, 0x1c, 0x0c, 0x21, 0x3c, 0x00, + 0xc4, 0x68, 0x00, 0x00, 0x01, 0x39, 0x75, 0x5c, + 0x1f, 0x18, 0x3f, 0x7c, 0xbd, 0x42, 0xf3, 0xd1, + 0x01, 0x38, 0x00, 0xd5, 0x63, 0x20, 0x00, 0x29, + 0xf4, 0xd1, 0x18, 0x4e, 0x50, 0x1c, 0xf1, 0x6b, + 0x1a, 0x4a, 0x10, 0x1c, 0x01, 0x38, 0xfd, 0xd1, + 0xf0, 0x6b, 0x88, 0x42, 0x01, 0xd0, 0x01, 0x1c, + 0xf7, 0xe7, 0x02, 0x27, 0x37, 0x63, 0x16, 0x4d, + 0x90, 0x21, 0x28, 0x1c, 0xf9, 0xf7, 0xce, 0xfd, + 0x3c, 0x00, 0x00, 0x69, 0x00, 0x00, 0x28, 0x1c, + 0x28, 0x30, 0x28, 0x60, 0x28, 0x1c, 0x10, 0x30, + 0x2f, 0x81, 0xe8, 0x60, 0x28, 0x1c, 0x20, 0x30, + 0x28, 0x61, 0x04, 0x21, 0x00, 0xe0, 0x0c, 0xe0, + 0x29, 0x83, 0xe8, 0x61, 0xed, 0x62, 0x75, 0x63, + 0x01, 0x20, 0x30, 0x63, 0x22, 0x1c, 0x89, 0x20, + 0x01, 0x99, 0x0a, 0xf0, 0x38, 0xf8, 0x00, 0x20, + 0x28, 0x63, 0xfe, 0xbd, 0x00, 0x00, 0x08, 0x57, + 0x01, 0x00, 0x3c, 0x00, 0x3c, 0x69, 0x00, 0x00, + 0x00, 0x30, 0x07, 0x00, 0x10, 0x8e, 0x01, 0x00, + 0x74, 0xff, 0x01, 0x00, 0x09, 0x57, 0x01, 0x00, + 0x20, 0x4e, 0x00, 0x00, 0xe4, 0xfe, 0x01, 0x00, + 0x80, 0xb5, 0x13, 0x28, 0x1e, 0xd0, 0xf0, 0x28, + 0x16, 0xd1, 0x09, 0xf0, 0xb5, 0xf9, 0x00, 0x28, + 0x13, 0xd1, 0x0d, 0xf0, 0xbf, 0xfa, 0x11, 0xf0, + 0x0d, 0xfc, 0x00, 0x22, 0x04, 0x21, 0xc4, 0x20, + 0x0c, 0xf0, 0x1c, 0xff, 0x3c, 0x00, 0x78, 0x69, + 0x00, 0x00, 0x09, 0x48, 0x00, 0x21, 0x00, 0x78, + 0x05, 0xf0, 0x3f, 0xfd, 0x05, 0xf0, 0x93, 0xf8, + 0x07, 0x49, 0x01, 0x20, 0x08, 0x60, 0x80, 0xbd, + 0x01, 0x1c, 0x01, 0x20, 0xfa, 0xf7, 0x87, 0xfc, + 0x80, 0xbd, 0x00, 0xf0, 0x32, 0xf8, 0x80, 0xbd, + 0x00, 0x00, 0x6a, 0x57, 0x01, 0x00, 0x3c, 0xd9, + 0x01, 0x00, 0xb0, 0xb5, 0x0c, 0xf0, 0xff, 0xf9, + 0x0b, 0x49, 0x02, 0x24, 0x48, 0x60, 0x3c, 0x00, + 0xb4, 0x69, 0x00, 0x00, 0x0a, 0x48, 0x04, 0x61, + 0x01, 0x20, 0x77, 0x21, 0x09, 0x03, 0x08, 0x61, + 0x08, 0x4d, 0x68, 0x68, 0x80, 0x07, 0x02, 0xd4, + 0x68, 0x68, 0x20, 0x43, 0x68, 0x60, 0x09, 0xf0, + 0xc7, 0xf9, 0x68, 0x68, 0xa0, 0x43, 0x68, 0x60, + 0x00, 0x20, 0xb0, 0xbd, 0xe0, 0x60, 0x01, 0x00, + 0x00, 0x30, 0x07, 0x00, 0x00, 0x01, 0x07, 0x00, + 0x80, 0xb5, 0x01, 0x23, 0x03, 0x22, 0x00, 0x21, + 0x3c, 0x00, 0xf0, 0x69, 0x00, 0x00, 0x02, 0x20, + 0x3c, 0xf0, 0xf1, 0xfa, 0x00, 0x28, 0x01, 0xd0, + 0xfa, 0xf7, 0x81, 0xfc, 0x80, 0xbd, 0x1c, 0xb5, + 0xfc, 0xf7, 0xf5, 0xfa, 0xfa, 0xf7, 0x19, 0xfe, + 0x01, 0xf0, 0x03, 0xf9, 0x00, 0x24, 0x21, 0x1c, + 0x68, 0x46, 0x01, 0xf0, 0xe2, 0xfb, 0x00, 0xab, + 0x18, 0x78, 0x01, 0x28, 0x03, 0xd0, 0x02, 0x28, + 0x01, 0xd0, 0x03, 0x28, 0x01, 0xd1, 0x0c, 0xf0, + 0xb2, 0xfc, 0x3c, 0x00, 0x2c, 0x6a, 0x00, 0x00, + 0x01, 0x34, 0x24, 0x06, 0x24, 0x16, 0x06, 0x2c, + 0xec, 0xdb, 0xfa, 0xf7, 0x09, 0xf9, 0xfa, 0xf7, + 0xe7, 0xfc, 0xfa, 0xf7, 0x33, 0xfa, 0xfa, 0xf7, + 0x6d, 0xfa, 0xfb, 0xf7, 0xdf, 0xff, 0x05, 0xf0, + 0x4d, 0xfb, 0x06, 0xf0, 0x81, 0xfc, 0x0b, 0xf0, + 0x7d, 0xf9, 0x07, 0xf0, 0x29, 0xfc, 0x11, 0x48, + 0x10, 0x21, 0x01, 0x60, 0x09, 0x01, 0x01, 0x60, + 0xc9, 0x02, 0x01, 0x60, 0x3c, 0x00, 0x68, 0x6a, + 0x00, 0x00, 0x89, 0x00, 0x01, 0x60, 0x20, 0x21, + 0x01, 0x60, 0x04, 0x21, 0x01, 0x60, 0x08, 0x21, + 0x01, 0x60, 0x40, 0x21, 0x01, 0x60, 0x80, 0x21, + 0x01, 0x60, 0x89, 0x00, 0x01, 0x60, 0x49, 0x00, + 0x01, 0x60, 0x49, 0x00, 0x01, 0x60, 0x49, 0x00, + 0x01, 0x60, 0xc9, 0x03, 0x01, 0x60, 0x89, 0x0b, + 0x01, 0x60, 0xf9, 0xf7, 0x41, 0xff, 0x1c, 0xbd, + 0x00, 0x00, 0x00, 0x10, 0x07, 0x00, 0x3c, 0x00, + 0xa4, 0x6a, 0x00, 0x00, 0x80, 0xb5, 0x3b, 0xf0, + 0x4f, 0xf8, 0x3b, 0xf0, 0x7d, 0xf9, 0xfa, 0xf7, + 0x4b, 0xf9, 0x80, 0xbd, 0xf8, 0xb5, 0x00, 0x25, + 0x00, 0x24, 0x00, 0x22, 0x00, 0x28, 0x71, 0xd0, + 0x43, 0x4f, 0xb9, 0x68, 0x0b, 0x1a, 0xbb, 0x60, + 0xf8, 0x68, 0x39, 0x1c, 0x01, 0x30, 0xf8, 0x60, + 0x89, 0x6a, 0x00, 0x2b, 0x1e, 0xdc, 0x02, 0x24, + 0x00, 0x29, 0x06, 0xda, 0xfb, 0x69, 0x98, 0x42, + 0x3c, 0x00, 0xe0, 0x6a, 0x00, 0x00, 0x06, 0xdd, + 0x3b, 0x69, 0x98, 0x42, 0x09, 0xdd, 0x07, 0xe0, + 0xbb, 0x69, 0x98, 0x42, 0x01, 0xdc, 0x01, 0x24, + 0x03, 0xe0, 0x7b, 0x69, 0x98, 0x42, 0x00, 0xdd, + 0x03, 0x24, 0x78, 0x6a, 0x00, 0x28, 0x08, 0xd0, + 0x00, 0x20, 0x78, 0x62, 0x03, 0x2c, 0x01, 0xd1, + 0x02, 0x24, 0x02, 0xe0, 0x02, 0x2c, 0x00, 0xd1, + 0x01, 0x24, 0x2e, 0x48, 0x01, 0x2c, 0x00, 0x79, + 0x18, 0xd1, 0x3c, 0x00, 0x1c, 0x6b, 0x00, 0x00, + 0xbb, 0x78, 0x99, 0x42, 0x15, 0xda, 0x3b, 0x78, + 0x7b, 0x70, 0x39, 0x70, 0x01, 0x31, 0xb9, 0x62, + 0x01, 0xd5, 0x01, 0x31, 0xb9, 0x62, 0xb9, 0x6a, + 0x01, 0x25, 0x99, 0x42, 0x03, 0xd1, 0x04, 0x28, + 0x04, 0xd2, 0x01, 0x30, 0x00, 0xe0, 0x00, 0x20, + 0x38, 0x71, 0x01, 0x22, 0x00, 0x29, 0x33, 0xda, + 0x27, 0xe0, 0x03, 0x2c, 0x35, 0xd1, 0x00, 0x26, + 0x00, 0x28, 0x07, 0xd0, 0x3c, 0x00, 0x58, 0x6b, + 0x00, 0x00, 0x1e, 0x49, 0x81, 0x40, 0x38, 0x6a, + 0x08, 0x18, 0x0c, 0xf0, 0x5c, 0xf8, 0x00, 0x28, + 0x2c, 0xd0, 0x1b, 0x48, 0x00, 0x78, 0x40, 0x07, + 0x05, 0xd5, 0xf8, 0x68, 0x39, 0x69, 0x88, 0x42, + 0x01, 0xdb, 0x03, 0x23, 0xfe, 0x56, 0xb8, 0x6a, + 0xb0, 0x42, 0x12, 0xdd, 0x01, 0x21, 0x79, 0x62, + 0x39, 0x78, 0x01, 0x25, 0x79, 0x70, 0x38, 0x70, + 0x01, 0x38, 0xb8, 0x62, 0x88, 0x42, 0x3c, 0x00, + 0x94, 0x6b, 0x00, 0x00, 0x01, 0xd0, 0x00, 0x21, + 0x39, 0x71, 0x00, 0x28, 0x0c, 0xda, 0x07, 0x20, + 0x38, 0x71, 0x00, 0xe0, 0x12, 0xe0, 0x07, 0xe0, + 0x38, 0x79, 0x00, 0x28, 0x09, 0xd0, 0xff, 0x30, + 0x38, 0x71, 0x06, 0xe0, 0x00, 0x2a, 0x02, 0xd0, + 0x0c, 0xf0, 0xf8, 0xf8, 0x38, 0x62, 0x00, 0x2c, + 0x04, 0xd0, 0xfe, 0xf7, 0x97, 0xfd, 0x29, 0x1c, + 0x08, 0xf0, 0xfc, 0xfb, 0xf8, 0xbd, 0x00, 0x00, + 0x3c, 0x00, 0xd0, 0x6b, 0x00, 0x00, 0xac, 0x7e, + 0x01, 0x00, 0x50, 0xc3, 0x00, 0x00, 0x1d, 0x75, + 0x01, 0x00, 0x80, 0xb5, 0x10, 0x68, 0x00, 0x28, + 0x02, 0xd0, 0x00, 0xf0, 0x0a, 0xf8, 0x80, 0xbd, + 0x03, 0x48, 0xc0, 0x69, 0x80, 0x68, 0x08, 0xf0, + 0xb2, 0xf9, 0x80, 0xbd, 0x00, 0x00, 0x84, 0x6a, + 0x01, 0x00, 0x10, 0xb5, 0x04, 0x1c, 0xc0, 0x68, + 0xc0, 0x68, 0x00, 0x28, 0x01, 0xd1, 0xfa, 0xf7, + 0x7a, 0xfb, 0x3c, 0x00, 0x0c, 0x6c, 0x00, 0x00, + 0xe0, 0x68, 0xe1, 0x69, 0xc0, 0x68, 0x23, 0x1c, + 0x01, 0x4a, 0xff, 0xf7, 0xd7, 0xfb, 0x10, 0xbd, + 0xdd, 0x6b, 0x00, 0x00, 0xb0, 0xb5, 0x05, 0x1c, + 0x0c, 0x21, 0x00, 0x20, 0xfa, 0xf7, 0xd6, 0xfc, + 0x04, 0x1c, 0x00, 0x68, 0x00, 0x21, 0x41, 0x60, + 0x01, 0x60, 0x29, 0x88, 0x01, 0x81, 0x69, 0x88, + 0x41, 0x81, 0x29, 0x1c, 0xff, 0x31, 0x21, 0x31, + 0x20, 0x1c, 0x03, 0xf0, 0x3c, 0x00, 0x48, 0x6c, + 0x00, 0x00, 0x77, 0xf9, 0x29, 0x1c, 0xff, 0x31, + 0x46, 0x31, 0x20, 0x1c, 0x03, 0xf0, 0x71, 0xf9, + 0x29, 0x1c, 0xff, 0x31, 0x50, 0x31, 0x20, 0x1c, + 0x03, 0xf0, 0x6b, 0xf9, 0x29, 0x1c, 0xff, 0x31, + 0x43, 0x31, 0x20, 0x1c, 0x03, 0xf0, 0x65, 0xf9, + 0x29, 0x1c, 0xff, 0x31, 0x63, 0x31, 0x20, 0x1c, + 0x03, 0xf0, 0x5f, 0xf9, 0x04, 0x48, 0x00, 0x68, + 0x00, 0x28, 0x02, 0xd0, 0x20, 0x1c, 0x3c, 0x00, + 0x84, 0x6c, 0x00, 0x00, 0xff, 0xf7, 0x8e, 0xfd, + 0x20, 0x1c, 0xb0, 0xbd, 0xe4, 0x62, 0x01, 0x00, + 0xf8, 0xb5, 0x05, 0x1c, 0x0c, 0x1c, 0x04, 0xd1, + 0x05, 0x21, 0x18, 0x20, 0xfa, 0xf7, 0x02, 0xfb, + 0x4d, 0xe0, 0x29, 0x1c, 0x12, 0x31, 0x06, 0x22, + 0x60, 0x1c, 0xf9, 0xf7, 0x25, 0xfc, 0x22, 0x1c, + 0x30, 0x32, 0x00, 0x26, 0x00, 0x21, 0x00, 0x20, + 0x16, 0x70, 0x34, 0x4b, 0x1b, 0x5c, 0x2f, 0x8a, + 0x3c, 0x00, 0xc0, 0x6c, 0x00, 0x00, 0xdf, 0x40, + 0xff, 0x07, 0x07, 0xd5, 0x17, 0x78, 0x01, 0x33, + 0x01, 0x37, 0x17, 0x70, 0x67, 0x18, 0x30, 0x37, + 0x7b, 0x70, 0x01, 0x31, 0x01, 0x30, 0x0e, 0x28, + 0xee, 0xdb, 0xa8, 0x7b, 0x60, 0x72, 0x10, 0x78, + 0x00, 0x28, 0x2b, 0xd0, 0x2a, 0x48, 0x1e, 0x21, + 0x09, 0x5c, 0x27, 0x1c, 0x10, 0x37, 0x21, 0x72, + 0x01, 0x68, 0x61, 0x81, 0xc1, 0x89, 0x21, 0x77, + 0x81, 0x89, 0x3c, 0x00, 0xfc, 0x6c, 0x00, 0x00, + 0x79, 0x73, 0xc1, 0x8a, 0xa1, 0x81, 0x01, 0x8b, + 0xe1, 0x81, 0x42, 0x8a, 0x21, 0x1c, 0x60, 0x31, + 0x4a, 0x80, 0x82, 0x8a, 0x8a, 0x80, 0x1f, 0x49, + 0x2c, 0x31, 0x09, 0x7a, 0x00, 0x29, 0x09, 0xd0, + 0x02, 0x29, 0x0a, 0xd1, 0x01, 0x22, 0x62, 0x62, + 0x62, 0x72, 0x42, 0x8b, 0xa2, 0x81, 0x80, 0x8b, + 0xe0, 0x81, 0x03, 0xe0, 0x01, 0x21, 0x66, 0x62, + 0x00, 0xe0, 0x00, 0x21, 0x3c, 0x00, 0x38, 0x6d, + 0x00, 0x00, 0xe8, 0x7b, 0x08, 0x40, 0x01, 0xd1, + 0x00, 0x20, 0xf8, 0xbd, 0xa8, 0x68, 0x43, 0x1c, + 0x09, 0xd0, 0x22, 0x1c, 0x12, 0x32, 0x00, 0x92, + 0x93, 0x1d, 0x02, 0x32, 0x21, 0x1c, 0x01, 0xf0, + 0x9c, 0xfa, 0xa0, 0x62, 0x00, 0xe0, 0xa6, 0x62, + 0x68, 0x7b, 0x29, 0x1c, 0x1d, 0x31, 0x20, 0x74, + 0x0b, 0x48, 0x20, 0x22, 0x20, 0x62, 0x20, 0x1c, + 0x42, 0x30, 0xbe, 0x73, 0xf9, 0xf7, 0x3c, 0x00, + 0x74, 0x6d, 0x00, 0x00, 0xc1, 0xfb, 0x40, 0x34, + 0x26, 0x70, 0x68, 0x7e, 0x04, 0x49, 0x60, 0x70, + 0x68, 0x68, 0x2c, 0x31, 0x48, 0x60, 0x01, 0x20, + 0xda, 0xe7, 0x00, 0x00, 0x90, 0x58, 0x01, 0x00, + 0xc8, 0x6e, 0x01, 0x00, 0x91, 0x02, 0x01, 0x00, + 0x70, 0xb5, 0x16, 0x1c, 0x0d, 0x1c, 0x04, 0x1c, + 0x00, 0x28, 0x06, 0xd0, 0x0c, 0x20, 0xfa, 0xf7, + 0x47, 0xfd, 0x30, 0xc0, 0x08, 0x38, 0x06, 0x72, + 0x3c, 0x00, 0xb0, 0x6d, 0x00, 0x00, 0x70, 0xbd, + 0x00, 0x20, 0x70, 0xbd, 0x00, 0x00, 0x01, 0x1c, + 0x05, 0x48, 0x80, 0xb5, 0x00, 0x68, 0x01, 0xd0, + 0x01, 0x21, 0x00, 0xe0, 0x00, 0x21, 0xfc, 0xf7, + 0xa0, 0xfc, 0x80, 0xbd, 0x00, 0x00, 0x0c, 0x79, + 0x01, 0x00, 0x70, 0xb5, 0x0e, 0x1c, 0x04, 0x1c, + 0x00, 0x28, 0x01, 0xd1, 0xfa, 0xf7, 0x8f, 0xfa, + 0x06, 0x4d, 0x28, 0x68, 0x00, 0x28, 0x01, 0xd0, + 0xfa, 0xf7, 0x3c, 0x00, 0xec, 0x6d, 0x00, 0x00, + 0x89, 0xfa, 0x04, 0x48, 0x2e, 0x60, 0xc4, 0x60, + 0x01, 0x21, 0x01, 0x70, 0x70, 0xbd, 0x00, 0x00, + 0xa8, 0x7e, 0x01, 0x00, 0x30, 0x00, 0x07, 0x00, + 0x10, 0xb5, 0x07, 0x4c, 0x20, 0x68, 0x00, 0x28, + 0x01, 0xd1, 0xfa, 0xf7, 0x77, 0xfa, 0x05, 0x48, + 0x00, 0x69, 0x21, 0x68, 0xf9, 0xf7, 0xdf, 0xfa, + 0x00, 0x20, 0x20, 0x60, 0x10, 0xbd, 0x00, 0x00, + 0xa8, 0x7e, 0x01, 0x00, 0x3c, 0x00, 0x28, 0x6e, + 0x00, 0x00, 0x30, 0x00, 0x07, 0x00, 0x01, 0x20, + 0x05, 0x49, 0xc0, 0x06, 0x80, 0xb5, 0x08, 0x60, + 0x00, 0x22, 0x03, 0x21, 0x54, 0x20, 0x0c, 0xf0, + 0xb8, 0xfc, 0x80, 0xbd, 0x00, 0x00, 0x00, 0x10, + 0x07, 0x00, 0x80, 0xb5, 0x00, 0x22, 0x04, 0x21, + 0xc4, 0x20, 0x0c, 0xf0, 0xae, 0xfc, 0x80, 0xbd, + 0x00, 0x00, 0x04, 0x48, 0x80, 0xb5, 0x00, 0x88, + 0x02, 0x49, 0xff, 0xf7, 0xb8, 0xff, 0x3c, 0x00, + 0x64, 0x6e, 0x00, 0x00, 0x80, 0xbd, 0x00, 0x00, + 0x75, 0x4b, 0x00, 0x00, 0xc8, 0x74, 0x01, 0x00, + 0xf8, 0xb5, 0x06, 0x1c, 0x31, 0x48, 0x00, 0x25, + 0xc0, 0x68, 0x0c, 0x1c, 0x00, 0x28, 0x30, 0xd0, + 0x2e, 0x48, 0x2f, 0x4f, 0x04, 0x30, 0x00, 0x78, + 0x38, 0x76, 0x2c, 0x48, 0x04, 0x30, 0x40, 0x78, + 0x38, 0x81, 0x00, 0x2a, 0x0b, 0xd0, 0xf9, 0xf7, + 0xa5, 0xfa, 0x1f, 0x20, 0xb8, 0x76, 0x20, 0x1c, + 0x3c, 0x00, 0xa0, 0x6e, 0x00, 0x00, 0xf9, 0xf7, + 0xf6, 0xf9, 0x25, 0x48, 0x04, 0x30, 0x80, 0x78, + 0xb8, 0x76, 0x43, 0xe0, 0x25, 0x48, 0x22, 0x49, + 0x84, 0x42, 0x4d, 0x69, 0x02, 0xd2, 0x6c, 0x43, + 0xe4, 0x0b, 0x0f, 0xe0, 0x1f, 0x48, 0x21, 0x1c, + 0x80, 0x6a, 0x00, 0x90, 0xf9, 0xf7, 0x23, 0xfc, + 0x00, 0x99, 0x02, 0x1c, 0x4a, 0x43, 0xa1, 0x1a, + 0x1a, 0x4a, 0x69, 0x43, 0x52, 0x6a, 0xc9, 0x0b, + 0x50, 0x43, 0x3c, 0x00, 0xdc, 0x6e, 0x00, 0x00, + 0x44, 0x18, 0x02, 0x2c, 0x01, 0xd8, 0x00, 0x20, + 0xf8, 0xbd, 0xf9, 0xf7, 0x7d, 0xfa, 0x1f, 0x20, + 0xb8, 0x76, 0x20, 0x1c, 0xf9, 0xf7, 0xae, 0xf9, + 0x04, 0x1c, 0x11, 0x48, 0x04, 0x30, 0x80, 0x78, + 0xb8, 0x76, 0x0f, 0x4f, 0x7d, 0x6a, 0xac, 0x42, + 0x04, 0xd2, 0x20, 0x1c, 0xff, 0xf7, 0x22, 0xfc, + 0x05, 0x1c, 0x12, 0xe0, 0x21, 0x1c, 0x28, 0x1c, + 0xf9, 0xf7, 0xfc, 0xfb, 0x3c, 0x00, 0x18, 0x6f, + 0x00, 0x00, 0x06, 0x1c, 0x68, 0x43, 0x20, 0x1a, + 0xff, 0xf7, 0x17, 0xfc, 0x05, 0x1c, 0x00, 0x24, + 0x04, 0xe0, 0x78, 0x6a, 0xff, 0xf7, 0x11, 0xfc, + 0x45, 0x19, 0x01, 0x34, 0xb4, 0x42, 0xf8, 0xd3, + 0x28, 0x1c, 0xd4, 0xe7, 0x00, 0x00, 0xc8, 0x74, + 0x01, 0x00, 0x30, 0x00, 0x07, 0x00, 0xc0, 0xc6, + 0x2d, 0x00, 0x01, 0x1c, 0x7d, 0x20, 0x80, 0xb5, + 0xc0, 0x00, 0xf9, 0xf7, 0x72, 0xfb, 0x3c, 0x00, + 0x54, 0x6f, 0x00, 0x00, 0x02, 0x49, 0x88, 0x61, + 0x40, 0x08, 0xc8, 0x61, 0x80, 0xbd, 0x00, 0x00, + 0xc8, 0x74, 0x01, 0x00, 0x10, 0xb5, 0x06, 0x4c, + 0x21, 0x1c, 0x00, 0x20, 0x0b, 0xf0, 0x42, 0xfa, + 0x21, 0x1c, 0x00, 0x20, 0x0b, 0xf0, 0x0a, 0xfa, + 0x00, 0xf0, 0x68, 0xfe, 0x10, 0xbd, 0x00, 0x00, + 0x85, 0x6f, 0x00, 0x00, 0x30, 0xb5, 0x0f, 0x4d, + 0x2a, 0x78, 0x04, 0x2a, 0x19, 0xd8, 0x00, 0x2a, + 0x3c, 0x00, 0x90, 0x6f, 0x00, 0x00, 0x17, 0xd0, + 0x00, 0x21, 0x07, 0xe0, 0x4b, 0x00, 0x5b, 0x18, + 0x5c, 0x19, 0x01, 0x23, 0xe4, 0x56, 0x84, 0x42, + 0x02, 0xda, 0x01, 0x31, 0x8a, 0x42, 0xf5, 0xdc, + 0x8a, 0x42, 0x00, 0xd1, 0x01, 0x39, 0x48, 0x00, + 0x40, 0x18, 0x40, 0x19, 0x81, 0x78, 0x02, 0x4a, + 0x34, 0x3a, 0x11, 0x70, 0xc0, 0x78, 0x50, 0x70, + 0x30, 0xbd, 0x00, 0x75, 0x01, 0x00, 0x30, 0xb5, + 0x11, 0x1c, 0x3c, 0x00, 0xcc, 0x6f, 0x00, 0x00, + 0x38, 0x31, 0x85, 0xb0, 0x91, 0x62, 0x08, 0x21, + 0x11, 0x86, 0x00, 0x23, 0x14, 0x1c, 0x01, 0x1c, + 0x53, 0x63, 0xc0, 0x68, 0x15, 0x4d, 0x0b, 0xe0, + 0x02, 0x68, 0xaa, 0x42, 0x06, 0xd1, 0xc2, 0x68, + 0xca, 0x60, 0xc3, 0x60, 0x03, 0x60, 0xfa, 0xf7, + 0xd1, 0xfa, 0x03, 0xe0, 0x01, 0x1c, 0xc0, 0x68, + 0x00, 0x28, 0xf1, 0xd1, 0x22, 0x1c, 0x40, 0x32, + 0x08, 0x21, 0x20, 0x68, 0x3c, 0x00, 0x08, 0x70, + 0x00, 0x00, 0xfa, 0xf7, 0x64, 0xfb, 0x0b, 0x49, + 0x20, 0x1c, 0x48, 0x30, 0x02, 0x90, 0x04, 0x94, + 0x03, 0x91, 0xe0, 0x69, 0x82, 0x88, 0x01, 0x68, + 0x6e, 0x20, 0x01, 0x92, 0x00, 0x91, 0x22, 0x1c, + 0x56, 0x32, 0x03, 0x5d, 0x21, 0x1c, 0x28, 0x31, + 0x20, 0x68, 0xff, 0xf7, 0x58, 0xfa, 0x05, 0xb0, + 0x30, 0xbd, 0xa0, 0x7e, 0x01, 0x00, 0xd5, 0x70, + 0x00, 0x00, 0x1c, 0xb5, 0x07, 0x49, 0x3c, 0x00, + 0x44, 0x70, 0x00, 0x00, 0x02, 0x1c, 0x01, 0x90, + 0x00, 0x91, 0xc0, 0x69, 0x13, 0x1c, 0x84, 0x88, + 0x01, 0x68, 0x10, 0x68, 0x48, 0x33, 0x22, 0x1c, + 0xff, 0xf7, 0x08, 0xf9, 0x1c, 0xbd, 0x00, 0x00, + 0xc9, 0x6f, 0x00, 0x00, 0x10, 0xb5, 0x14, 0x1c, + 0x18, 0x48, 0x03, 0xf0, 0x89, 0xf8, 0xa0, 0x42, + 0x01, 0xd0, 0xfa, 0xf7, 0x45, 0xf9, 0x04, 0x22, + 0x20, 0x1c, 0x40, 0x30, 0xa1, 0x6a, 0xf9, 0xf7, + 0x3c, 0x00, 0x80, 0x70, 0x00, 0x00, 0xbd, 0xf9, + 0x00, 0x28, 0x02, 0xd1, 0x01, 0x20, 0x20, 0x62, + 0x05, 0xe0, 0x00, 0x20, 0x20, 0x62, 0x84, 0x20, + 0x00, 0x5d, 0x00, 0x28, 0x03, 0xd1, 0x20, 0x1c, + 0x09, 0xf0, 0x23, 0xfb, 0x05, 0xe0, 0x20, 0x68, + 0xfa, 0xf7, 0x79, 0xfa, 0x20, 0x1c, 0xfa, 0xf7, + 0xa4, 0xfb, 0xe0, 0x69, 0x80, 0x79, 0x06, 0x28, + 0x06, 0xd1, 0x20, 0x6a, 0x06, 0x49, 0x00, 0x28, + 0x03, 0xd0, 0x3c, 0x00, 0xbc, 0x70, 0x00, 0x00, + 0x08, 0x69, 0x01, 0x30, 0x08, 0x61, 0x10, 0xbd, + 0x48, 0x69, 0x01, 0x30, 0x48, 0x61, 0x10, 0xbd, + 0xa0, 0x6a, 0x01, 0x00, 0x28, 0x61, 0x01, 0x00, + 0x1c, 0xb5, 0x14, 0x1c, 0x15, 0x48, 0x03, 0xf0, + 0x51, 0xf8, 0xa0, 0x42, 0x01, 0xd0, 0xfa, 0xf7, + 0x0d, 0xf9, 0x20, 0x1c, 0x4f, 0x30, 0x02, 0x79, + 0x41, 0x79, 0x00, 0xab, 0x12, 0x02, 0x11, 0x43, + 0xc2, 0x78, 0x12, 0x04, 0x3c, 0x00, 0xf8, 0x70, + 0x00, 0x00, 0x11, 0x43, 0x82, 0x78, 0x12, 0x06, + 0x11, 0x43, 0x00, 0x91, 0x01, 0x78, 0x40, 0x78, + 0x09, 0x02, 0x08, 0x43, 0x98, 0x80, 0x20, 0x1c, + 0x69, 0x46, 0x06, 0xf0, 0x3c, 0xf9, 0x00, 0x28, + 0x03, 0xd1, 0x20, 0x1c, 0x09, 0xf0, 0xe3, 0xfa, + 0x1c, 0xbd, 0x20, 0x68, 0xfa, 0xf7, 0x39, 0xfa, + 0x20, 0x1c, 0xfa, 0xf7, 0x64, 0xfb, 0xf7, 0xe7, + 0x00, 0x00, 0xa0, 0x6a, 0x01, 0x00, 0x3c, 0x00, + 0x34, 0x71, 0x00, 0x00, 0xbc, 0xb5, 0x1f, 0x4d, + 0x14, 0x1c, 0x28, 0x1c, 0xdc, 0x30, 0x03, 0xf0, + 0x1f, 0xf8, 0xa0, 0x42, 0x01, 0xd0, 0xfa, 0xf7, + 0xdb, 0xf8, 0xa0, 0x6c, 0x00, 0xab, 0x02, 0x78, + 0x81, 0x78, 0x12, 0x02, 0x11, 0x43, 0x02, 0x79, + 0x12, 0x04, 0x11, 0x43, 0x42, 0x79, 0x12, 0x06, + 0x11, 0x43, 0x00, 0x91, 0x81, 0x79, 0xc0, 0x79, + 0x00, 0x02, 0x08, 0x43, 0x98, 0x80, 0x20, 0x1c, + 0x3c, 0x00, 0x70, 0x71, 0x00, 0x00, 0x69, 0x46, + 0x06, 0xf0, 0x0b, 0xf9, 0x00, 0x28, 0x17, 0xd0, + 0x01, 0x28, 0x0e, 0xd1, 0xed, 0x6c, 0x00, 0x2d, + 0x0b, 0xd0, 0x80, 0x20, 0x02, 0x5d, 0xe0, 0x6c, + 0x01, 0x21, 0x00, 0x28, 0x00, 0xd1, 0x00, 0x21, + 0x60, 0x68, 0x6b, 0x46, 0x0a, 0x30, 0xf9, 0xf7, + 0x23, 0xf9, 0x20, 0x68, 0xfa, 0xf7, 0xfb, 0xf9, + 0x20, 0x1c, 0xfa, 0xf7, 0x26, 0xfb, 0xbc, 0xbd, + 0x20, 0x1c, 0x3c, 0x00, 0xac, 0x71, 0x00, 0x00, + 0x00, 0xf0, 0x8e, 0xfe, 0xfa, 0xe7, 0x00, 0x00, + 0xc4, 0x69, 0x01, 0x00, 0xbc, 0xb5, 0x04, 0x1c, + 0x40, 0x6a, 0x00, 0x25, 0x00, 0x28, 0x03, 0xd0, + 0x60, 0x68, 0x00, 0x8b, 0x05, 0x07, 0x2d, 0x0f, + 0x22, 0x1c, 0x40, 0x32, 0x08, 0x21, 0x20, 0x68, + 0xfa, 0xf7, 0x7e, 0xfa, 0xa1, 0x68, 0x01, 0x95, + 0x00, 0x91, 0x21, 0x1c, 0x22, 0x1c, 0x60, 0x32, + 0x20, 0x68, 0x50, 0x31, 0x3c, 0x00, 0xe8, 0x71, + 0x00, 0x00, 0x0d, 0x1c, 0xe3, 0x68, 0x09, 0xf0, + 0xe2, 0xff, 0xe0, 0x69, 0x80, 0x6b, 0x00, 0x28, + 0x03, 0xd1, 0xfe, 0xf7, 0xe8, 0xfa, 0x00, 0x28, + 0x01, 0xd0, 0x18, 0x20, 0x00, 0xe0, 0x10, 0x20, + 0x06, 0x49, 0x01, 0x94, 0x00, 0x91, 0xe1, 0x69, + 0x08, 0x23, 0x09, 0x68, 0x0a, 0x18, 0x21, 0x1c, + 0x28, 0x31, 0x28, 0x1c, 0xff, 0xf7, 0x87, 0xf9, + 0xbc, 0xbd, 0x35, 0x71, 0x00, 0x00, 0x3c, 0x00, + 0x24, 0x72, 0x00, 0x00, 0x10, 0xb5, 0x10, 0x1c, + 0x38, 0x30, 0x90, 0x62, 0x04, 0x20, 0x10, 0x86, + 0x00, 0x20, 0x50, 0x63, 0x10, 0x68, 0x14, 0x1c, + 0x40, 0x32, 0x04, 0x21, 0xfa, 0xf7, 0x4a, 0xfa, + 0x23, 0x1c, 0x21, 0x1c, 0x28, 0x31, 0x02, 0x4a, + 0x20, 0x68, 0xff, 0xf7, 0xbd, 0xf8, 0x10, 0xbd, + 0x65, 0x70, 0x00, 0x00, 0x0e, 0xb5, 0xc3, 0x69, + 0x02, 0x1c, 0x98, 0x88, 0x05, 0x49, 0x02, 0x92, + 0x3c, 0x00, 0x60, 0x72, 0x00, 0x00, 0x01, 0x91, + 0x00, 0x90, 0x1b, 0x68, 0x10, 0x68, 0x91, 0x69, + 0x03, 0x22, 0xff, 0xf7, 0xae, 0xf9, 0x0e, 0xbd, + 0x00, 0x00, 0x25, 0x72, 0x00, 0x00, 0x0e, 0xb5, + 0x02, 0x1c, 0x06, 0x49, 0x10, 0x20, 0x00, 0x90, + 0x02, 0x92, 0x13, 0x1c, 0x01, 0x91, 0x10, 0x68, + 0x00, 0x22, 0x70, 0x33, 0x00, 0x21, 0xff, 0xf7, + 0x9c, 0xf9, 0x0e, 0xbd, 0x00, 0x00, 0x25, 0x72, + 0x00, 0x00, 0x3c, 0x00, 0x9c, 0x72, 0x00, 0x00, + 0x10, 0xb5, 0x03, 0x1c, 0x00, 0x21, 0x00, 0x20, + 0x08, 0x4c, 0x00, 0xe0, 0x01, 0x31, 0xca, 0x00, + 0xa2, 0x58, 0x9a, 0x42, 0x02, 0xd0, 0x0b, 0x29, + 0xf8, 0xd3, 0x10, 0xbd, 0x0b, 0x29, 0xfc, 0xd2, + 0xc9, 0x00, 0x09, 0x19, 0x00, 0x20, 0x08, 0x71, + 0x01, 0x20, 0x10, 0xbd, 0x38, 0x58, 0x01, 0x00, + 0x8c, 0xb5, 0x00, 0xab, 0x86, 0x21, 0x19, 0x80, + 0x01, 0x1c, 0x04, 0x48, 0x3c, 0x00, 0xd8, 0x72, + 0x00, 0x00, 0x06, 0xf0, 0xee, 0xfe, 0x01, 0x90, + 0x68, 0x46, 0x06, 0xf0, 0xfa, 0xf8, 0x8c, 0xbd, + 0x00, 0x00, 0x70, 0x7c, 0x01, 0x00, 0x10, 0xb5, + 0x04, 0x1c, 0x0d, 0x48, 0x0d, 0x49, 0x94, 0xb0, + 0x04, 0x80, 0x06, 0x22, 0x18, 0x31, 0x0c, 0x30, + 0xf9, 0xf7, 0xfb, 0xf8, 0x01, 0xa8, 0x07, 0xf0, + 0xa2, 0xf8, 0x0c, 0x20, 0x09, 0xa9, 0x48, 0x72, + 0x00, 0xab, 0x1c, 0x80, 0x02, 0x21, 0x3c, 0x00, + 0x14, 0x73, 0x00, 0x00, 0x68, 0x46, 0x03, 0xf0, + 0xdb, 0xff, 0x04, 0x90, 0x01, 0xa8, 0x06, 0xf0, + 0xd1, 0xf8, 0x14, 0xb0, 0x10, 0xbd, 0x00, 0x00, + 0x58, 0x7c, 0x01, 0x00, 0x80, 0xb5, 0x04, 0xf0, + 0x45, 0xfe, 0x05, 0xf0, 0x53, 0xfa, 0x80, 0xbd, + 0x10, 0xb5, 0x19, 0x4c, 0xe0, 0x68, 0x00, 0x28, + 0x06, 0xd0, 0x61, 0x1c, 0x08, 0x78, 0x00, 0x28, + 0x03, 0xd1, 0x48, 0x78, 0xff, 0x30, 0x08, 0x70, + 0x3c, 0x00, 0x50, 0x73, 0x00, 0x00, 0x10, 0xbd, + 0xff, 0x30, 0x00, 0x06, 0x00, 0x0e, 0x08, 0x70, + 0xa1, 0x68, 0x00, 0x29, 0xf7, 0xd0, 0x00, 0x28, + 0xf5, 0xd1, 0x0e, 0x48, 0x54, 0x30, 0x81, 0x78, + 0x00, 0x29, 0x03, 0xd1, 0xc1, 0x78, 0xff, 0x31, + 0x81, 0x70, 0x10, 0xbd, 0xff, 0x31, 0x09, 0x06, + 0x09, 0x0e, 0x81, 0x70, 0xf9, 0xd1, 0xa1, 0x69, + 0x00, 0x29, 0xf6, 0xd0, 0x80, 0x88, 0x03, 0xf0, + 0xd0, 0xfb, 0x3c, 0x00, 0x8c, 0x73, 0x00, 0x00, + 0x04, 0x4a, 0x01, 0x1c, 0x5c, 0x32, 0x0c, 0x32, + 0x05, 0xca, 0x80, 0x1a, 0xa2, 0x69, 0xf9, 0xf7, + 0x1f, 0xf8, 0x10, 0xbd, 0x44, 0x7d, 0x01, 0x00, + 0xf0, 0xb5, 0x04, 0x1c, 0x40, 0x68, 0x00, 0x25, + 0x01, 0x79, 0x00, 0x22, 0x85, 0xb0, 0xc9, 0x07, + 0xcb, 0x17, 0x69, 0x49, 0x01, 0x33, 0x89, 0x6a, + 0x10, 0x29, 0x05, 0xd3, 0x66, 0x49, 0xc0, 0x39, + 0x08, 0x6b, 0x01, 0x30, 0x3c, 0x00, 0xc8, 0x73, + 0x00, 0x00, 0x08, 0x63, 0x8e, 0xe0, 0x21, 0x68, + 0x0e, 0x68, 0xf6, 0x78, 0xb7, 0x06, 0xff, 0x0f, + 0xb6, 0x09, 0x00, 0x2b, 0x04, 0x97, 0x06, 0xd0, + 0x63, 0x69, 0x1f, 0x1c, 0x1b, 0x6a, 0x50, 0x37, + 0x9f, 0x42, 0x00, 0xd1, 0x01, 0x25, 0x00, 0x2d, + 0x02, 0xd0, 0x63, 0x69, 0x1b, 0x6a, 0x04, 0xe0, + 0x3c, 0x23, 0x59, 0x4f, 0x73, 0x43, 0xdb, 0x19, + 0x04, 0x33, 0xe3, 0x61, 0x9f, 0x88, 0x3c, 0x00, + 0x04, 0x74, 0x00, 0x00, 0x00, 0x2f, 0x70, 0xd0, + 0x9b, 0x79, 0x02, 0x2b, 0x6e, 0xd0, 0x04, 0x2b, + 0x17, 0xd0, 0x06, 0x2b, 0x69, 0xd1, 0x08, 0x68, + 0xa0, 0x61, 0x08, 0x89, 0x04, 0x38, 0x08, 0x81, + 0x20, 0x68, 0x01, 0x68, 0x04, 0x31, 0x01, 0x60, + 0x4e, 0x49, 0x00, 0x29, 0x5d, 0xd0, 0x04, 0x9f, + 0xba, 0x42, 0x5a, 0xd1, 0x49, 0x48, 0x22, 0x1c, + 0x1c, 0x30, 0x02, 0xf0, 0x65, 0xfe, 0x05, 0xb0, + 0x3c, 0x00, 0x40, 0x74, 0x00, 0x00, 0xf0, 0xbd, + 0x09, 0x68, 0x25, 0x1c, 0xca, 0x79, 0x40, 0x35, + 0x26, 0x1c, 0xea, 0x73, 0x8b, 0x79, 0x22, 0x1c, + 0x50, 0x32, 0x13, 0x70, 0x4b, 0x79, 0x60, 0x36, + 0x53, 0x70, 0x0b, 0x79, 0x93, 0x70, 0x4b, 0x78, + 0xd3, 0x70, 0x09, 0x78, 0x11, 0x71, 0x00, 0x21, + 0x29, 0x72, 0x16, 0x21, 0xb1, 0x73, 0x61, 0x6a, + 0x00, 0x29, 0x06, 0xd0, 0x01, 0x8b, 0x09, 0x07, + 0x09, 0x0f, 0x3c, 0x00, 0x7c, 0x74, 0x00, 0x00, + 0x29, 0x72, 0xb1, 0x81, 0x18, 0x21, 0xb1, 0x73, + 0x01, 0x1c, 0x0a, 0x31, 0x20, 0x1c, 0x06, 0x22, + 0x49, 0x30, 0xf9, 0xf7, 0x33, 0xf8, 0x60, 0x68, + 0x14, 0x22, 0x01, 0x88, 0xe9, 0x82, 0x01, 0x1d, + 0x20, 0x1c, 0x58, 0x30, 0xf9, 0xf7, 0x2a, 0xf8, + 0xe8, 0x8a, 0x30, 0x49, 0x08, 0x40, 0x01, 0x21, + 0x89, 0x03, 0x08, 0x43, 0xe8, 0x82, 0x70, 0x89, + 0x0f, 0x21, 0x08, 0x40, 0x3c, 0x00, 0xb8, 0x74, + 0x00, 0x00, 0x70, 0x81, 0x20, 0x68, 0x01, 0x89, + 0x08, 0x39, 0x01, 0x81, 0x20, 0x68, 0x01, 0x68, + 0x08, 0x31, 0x01, 0x60, 0x08, 0x21, 0x00, 0x20, + 0xfa, 0xf7, 0x83, 0xf8, 0x05, 0x1c, 0x02, 0x68, + 0x20, 0x68, 0x08, 0x21, 0xfa, 0xf7, 0xfb, 0xf8, + 0x20, 0x68, 0xfa, 0xf7, 0x74, 0xf8, 0x21, 0x49, + 0xc5, 0x60, 0x2f, 0xe0, 0x30, 0xe0, 0xff, 0xe7, + 0x21, 0x68, 0x60, 0x68, 0x0a, 0x68, 0x3c, 0x00, + 0xf4, 0x74, 0x00, 0x00, 0x80, 0x23, 0xa2, 0x64, + 0x1e, 0x55, 0xe5, 0x64, 0x55, 0x79, 0x13, 0x79, + 0x2d, 0x02, 0x5b, 0x19, 0x95, 0x79, 0x2d, 0x04, + 0x5b, 0x19, 0xd5, 0x79, 0x2d, 0x06, 0x5b, 0x19, + 0x95, 0x78, 0x12, 0x78, 0x12, 0x02, 0xaa, 0x18, + 0x15, 0x04, 0x0a, 0x89, 0x2d, 0x0c, 0x08, 0x3a, + 0x0a, 0x81, 0x21, 0x68, 0x0a, 0x68, 0x08, 0x32, + 0x0a, 0x60, 0xe1, 0x69, 0x02, 0x1c, 0x0a, 0x32, + 0x3c, 0x00, 0x30, 0x75, 0x00, 0x00, 0x01, 0xa8, + 0x09, 0x68, 0x0b, 0xf0, 0x3e, 0xf9, 0xe0, 0x69, + 0x2b, 0x1c, 0x01, 0x68, 0x20, 0x1c, 0x70, 0x30, + 0x01, 0xaa, 0x0b, 0xf0, 0x86, 0xf9, 0x09, 0x49, + 0x01, 0x22, 0x6d, 0xe7, 0x20, 0x68, 0xfa, 0xf7, + 0x22, 0xf8, 0x20, 0x1c, 0xfa, 0xf7, 0x4d, 0xf9, + 0x70, 0xe7, 0x84, 0x6a, 0x01, 0x00, 0x68, 0x61, + 0x01, 0x00, 0x55, 0x72, 0x00, 0x00, 0x8f, 0xc7, + 0xff, 0xff, 0x3c, 0x00, 0x6c, 0x75, 0x00, 0x00, + 0x41, 0x70, 0x00, 0x00, 0x79, 0x72, 0x00, 0x00, + 0x80, 0xb5, 0x02, 0x21, 0x82, 0x20, 0xf9, 0xf7, + 0x93, 0xfe, 0x80, 0xbd, 0x70, 0x47, 0x00, 0x00, + 0x70, 0x47, 0x00, 0x00, 0x70, 0x47, 0x00, 0x00, + 0x70, 0x47, 0x00, 0x00, 0x70, 0x47, 0x00, 0x00, + 0x70, 0x47, 0x00, 0x00, 0x70, 0x47, 0x00, 0x00, + 0x80, 0xb5, 0xc0, 0x68, 0xf9, 0xf7, 0xfa, 0xff, + 0x01, 0x20, 0x80, 0xbd, 0x3c, 0x00, 0xa8, 0x75, + 0x00, 0x00, 0x80, 0xb5, 0x00, 0x21, 0xff, 0x20, + 0xf9, 0xf7, 0x79, 0xfe, 0x80, 0xbd, 0x70, 0x47, + 0x00, 0x00, 0x70, 0x47, 0x00, 0x00, 0x01, 0x20, + 0x70, 0x47, 0x70, 0x47, 0x00, 0x00, 0x70, 0x47, + 0x00, 0x00, 0x70, 0x47, 0x00, 0x00, 0x70, 0x47, + 0x00, 0x00, 0x80, 0xb5, 0x06, 0x21, 0x99, 0x20, + 0xf9, 0xf7, 0x65, 0xfe, 0x80, 0xbd, 0xb0, 0xb5, + 0x00, 0x25, 0x01, 0x29, 0x12, 0x4c, 0x3c, 0x00, + 0xe4, 0x75, 0x00, 0x00, 0x0f, 0xd1, 0x0a, 0xf0, + 0x0f, 0xfc, 0x00, 0x28, 0x1d, 0xd0, 0x61, 0x78, + 0x3c, 0x23, 0x59, 0x43, 0x09, 0x19, 0x04, 0x31, + 0x01, 0x62, 0x61, 0x1c, 0x41, 0x62, 0x84, 0x62, + 0x04, 0x1c, 0x50, 0x34, 0x06, 0xe0, 0x00, 0x29, + 0x0f, 0xd1, 0x3c, 0x20, 0x50, 0x43, 0x25, 0x70, + 0x04, 0x19, 0x04, 0x34, 0x00, 0x2c, 0x08, 0xd0, + 0x20, 0x68, 0x00, 0x28, 0x02, 0xd0, 0x20, 0x21, + 0x3c, 0x00, 0x20, 0x76, 0x00, 0x00, 0xf8, 0xf7, + 0x18, 0xff, 0xa5, 0x80, 0x07, 0x20, 0xa0, 0x71, + 0xb0, 0xbd, 0x68, 0x61, 0x01, 0x00, 0x70, 0xb5, + 0x04, 0x1c, 0x00, 0x21, 0x01, 0xf0, 0x41, 0xfc, + 0x60, 0x68, 0x00, 0x28, 0x01, 0xd0, 0x21, 0x68, + 0x01, 0x60, 0x20, 0x68, 0x00, 0x28, 0x01, 0xd0, + 0x61, 0x68, 0x41, 0x60, 0x12, 0x4e, 0x70, 0x68, + 0xa0, 0x42, 0x01, 0xd1, 0x60, 0x68, 0x70, 0x60, + 0xe0, 0x68, 0x3c, 0x00, 0x5c, 0x76, 0x00, 0x00, + 0x00, 0x28, 0x0b, 0xd0, 0x00, 0x25, 0x06, 0xe0, + 0xe0, 0x68, 0xe9, 0x00, 0x41, 0x18, 0x14, 0x20, + 0x0b, 0xf0, 0xe2, 0xff, 0x01, 0x35, 0x30, 0x88, + 0x85, 0x42, 0xf5, 0xdb, 0x06, 0x21, 0x20, 0x1c, + 0x44, 0x30, 0xf8, 0xf7, 0xe9, 0xfe, 0x20, 0x6b, + 0x00, 0x28, 0x01, 0xd0, 0xf9, 0xf7, 0x86, 0xff, + 0xe0, 0x69, 0x00, 0x28, 0x01, 0xd0, 0xfa, 0xf7, + 0xaf, 0xf8, 0x70, 0xbd, 0x3c, 0x00, 0x98, 0x76, + 0x00, 0x00, 0x58, 0x75, 0x01, 0x00, 0xf0, 0xb5, + 0x1d, 0x4f, 0x05, 0x9d, 0x3f, 0x68, 0x01, 0x26, + 0x1c, 0x1c, 0x33, 0x1c, 0x00, 0x2f, 0x00, 0xd0, + 0x2b, 0x1c, 0x1d, 0x06, 0x2d, 0x0e, 0x00, 0x29, + 0x06, 0xd0, 0x11, 0x78, 0x0e, 0x23, 0x16, 0x4f, + 0x09, 0x18, 0x09, 0x7a, 0x6b, 0x43, 0x10, 0xe0, + 0x21, 0x78, 0x00, 0x29, 0x13, 0xd0, 0xff, 0x31, + 0x0d, 0xe0, 0x01, 0x29, 0x01, 0xd9, 0x3c, 0x00, + 0xd4, 0x76, 0x00, 0x00, 0x01, 0x31, 0x11, 0x70, + 0x11, 0x78, 0x0e, 0x23, 0x0f, 0x4f, 0x49, 0x08, + 0x11, 0x70, 0x09, 0x18, 0x09, 0x7a, 0x6b, 0x43, + 0xdb, 0x19, 0x59, 0x5c, 0x21, 0x70, 0x21, 0x78, + 0x00, 0x29, 0x02, 0xd1, 0x11, 0x78, 0x00, 0x29, + 0xea, 0xd1, 0x09, 0x48, 0xc0, 0x68, 0x00, 0x28, + 0x05, 0xd0, 0x21, 0x78, 0x30, 0x1c, 0x00, 0x29, + 0x00, 0xd1, 0x00, 0x20, 0xf0, 0xbd, 0x01, 0x20, + 0x3c, 0x00, 0x10, 0x77, 0x00, 0x00, 0xf0, 0xbd, + 0x00, 0x00, 0x18, 0x67, 0x01, 0x00, 0x24, 0x67, + 0x01, 0x00, 0x5c, 0x67, 0x01, 0x00, 0xac, 0x7c, + 0x01, 0x00, 0x84, 0x46, 0x00, 0x20, 0xf0, 0xb5, + 0x00, 0x29, 0x09, 0xd0, 0x11, 0x78, 0x1a, 0x4e, + 0xb1, 0x70, 0x19, 0x4e, 0xb1, 0x78, 0x71, 0x70, + 0x31, 0x70, 0x01, 0x21, 0x31, 0x61, 0x27, 0xe0, + 0x16, 0x4e, 0x01, 0x23, 0xf1, 0x56, 0x63, 0x46, + 0x5f, 0x68, 0x3c, 0x00, 0x4c, 0x77, 0x00, 0x00, + 0x00, 0x23, 0xf6, 0x56, 0x01, 0x25, 0xcc, 0x0f, + 0xb7, 0x42, 0x00, 0xd9, 0x00, 0x25, 0x00, 0x2c, + 0x01, 0xd0, 0x00, 0x2d, 0xe8, 0xd1, 0x0e, 0x4f, + 0x3b, 0x69, 0x00, 0x2b, 0x03, 0xd0, 0x00, 0x2d, + 0x01, 0xd1, 0x16, 0x70, 0x02, 0xe0, 0x1c, 0x43, + 0x01, 0xd1, 0x11, 0x70, 0x01, 0x20, 0x01, 0x24, + 0x00, 0x2b, 0x00, 0xd0, 0x00, 0x24, 0x3c, 0x61, + 0x00, 0x2c, 0x02, 0xd0, 0x3c, 0x00, 0x88, 0x77, + 0x00, 0x00, 0x71, 0x1c, 0x39, 0x70, 0x01, 0xe0, + 0xff, 0x31, 0x79, 0x70, 0x00, 0x28, 0xd5, 0xd0, + 0x01, 0x20, 0xf0, 0xbd, 0x00, 0x00, 0xac, 0x7c, + 0x01, 0x00, 0x90, 0xb5, 0x0a, 0x4c, 0x00, 0x20, + 0x93, 0xb0, 0x20, 0x61, 0x03, 0x90, 0x68, 0x46, + 0x00, 0x21, 0x08, 0xf0, 0x84, 0xfd, 0x20, 0x7a, + 0x02, 0x28, 0x01, 0xd1, 0xe0, 0x6b, 0x00, 0xe0, + 0x20, 0x6c, 0xe0, 0x61, 0x01, 0x20, 0x3c, 0x00, + 0xc4, 0x77, 0x00, 0x00, 0x08, 0xf0, 0x8a, 0xfd, + 0x13, 0xb0, 0x90, 0xbd, 0xf4, 0x6e, 0x01, 0x00, + 0xf7, 0xb5, 0x05, 0x1c, 0x88, 0x88, 0x0c, 0x1c, + 0x82, 0xb0, 0x1f, 0x4f, 0x00, 0x28, 0x00, 0xd1, + 0x00, 0x27, 0x04, 0x98, 0x00, 0x28, 0x01, 0xd1, + 0xf9, 0xf7, 0x8a, 0xfd, 0x1b, 0x48, 0x3b, 0x1c, + 0x00, 0x68, 0x21, 0x1c, 0x02, 0x68, 0x28, 0x1c, + 0x00, 0x92, 0x04, 0x9a, 0xfe, 0xf7, 0x3c, 0xf8, + 0x3c, 0x00, 0x00, 0x78, 0x00, 0x00, 0x06, 0x1c, + 0x22, 0xd0, 0x03, 0x21, 0x04, 0x98, 0x02, 0xf0, + 0xb8, 0xff, 0x00, 0x28, 0x1b, 0xd0, 0x80, 0x78, + 0x01, 0x21, 0x03, 0xf0, 0xe4, 0xff, 0xa0, 0x88, + 0xa1, 0x8e, 0x48, 0x43, 0x00, 0x04, 0x0f, 0x49, + 0x00, 0x0c, 0x08, 0x80, 0x03, 0xf0, 0x81, 0xf9, + 0x01, 0x22, 0x00, 0x2d, 0x00, 0xd1, 0x00, 0x22, + 0x01, 0x1c, 0x0e, 0x20, 0x0b, 0xf0, 0xc9, 0xfe, + 0x00, 0x2f, 0x3c, 0x00, 0x3c, 0x78, 0x00, 0x00, + 0x08, 0xd1, 0x00, 0x21, 0x28, 0x1c, 0x02, 0xf0, + 0xbd, 0xfc, 0x03, 0xe0, 0x00, 0x26, 0x28, 0x1c, + 0x00, 0xf0, 0x0a, 0xf8, 0x30, 0x1c, 0x05, 0xb0, + 0xf0, 0xbd, 0x00, 0x00, 0xc1, 0xa1, 0x00, 0x00, + 0xe4, 0x65, 0x01, 0x00, 0xa8, 0x7c, 0x01, 0x00, + 0x10, 0xb5, 0x04, 0x1c, 0xfe, 0xf7, 0x38, 0xf8, + 0x01, 0x21, 0x00, 0x2c, 0x00, 0xd1, 0x00, 0x21, + 0x0e, 0x20, 0x0b, 0xf0, 0x3c, 0x00, 0x78, 0x78, + 0x00, 0x00, 0xdd, 0xfe, 0x10, 0xbd, 0xf8, 0xb5, + 0x07, 0x1c, 0x0b, 0xf0, 0x94, 0xfa, 0xfd, 0xf7, + 0xbc, 0xfe, 0x00, 0x26, 0x02, 0x28, 0x1e, 0x4d, + 0x01, 0xd0, 0x2e, 0x70, 0xf8, 0xbd, 0xfd, 0xf7, + 0x3e, 0xf8, 0x04, 0x1c, 0xf9, 0xf7, 0x59, 0xfc, + 0x00, 0x28, 0x14, 0xd0, 0xfd, 0xf7, 0x77, 0xf8, + 0x00, 0x28, 0x10, 0xd0, 0x02, 0xf0, 0xf9, 0xfb, + 0x00, 0x28, 0x01, 0xd0, 0x00, 0x24, 0x3c, 0x00, + 0xb4, 0x78, 0x00, 0x00, 0x00, 0xe0, 0x15, 0x4c, + 0x33, 0x1c, 0x21, 0x1c, 0x07, 0x22, 0x16, 0x20, + 0x0b, 0xf0, 0x66, 0xff, 0x68, 0x78, 0x80, 0x21, + 0x08, 0x43, 0x68, 0x70, 0x02, 0xf0, 0x0a, 0xfc, + 0x00, 0x28, 0xde, 0xd1, 0x28, 0x78, 0x80, 0x07, + 0xdb, 0xd4, 0xfd, 0xf7, 0x23, 0xf9, 0x00, 0x28, + 0x05, 0xd1, 0x28, 0x78, 0xc0, 0x07, 0x02, 0xd5, + 0xfd, 0xf7, 0x42, 0xf8, 0xd1, 0xe7, 0x02, 0xf0, + 0x3c, 0x00, 0xf0, 0x78, 0x00, 0x00, 0xcd, 0xfb, + 0x00, 0x28, 0xcd, 0xd0, 0x28, 0x78, 0x02, 0x21, + 0x08, 0x43, 0x28, 0x70, 0x21, 0x1c, 0x38, 0x1c, + 0xfd, 0xf7, 0xc1, 0xf8, 0xc4, 0xe7, 0x60, 0x6c, + 0x01, 0x00, 0x71, 0x02, 0x00, 0x00, 0x10, 0xb5, + 0x12, 0x4c, 0x01, 0x20, 0x20, 0x70, 0xfe, 0xf7, + 0xf0, 0xf9, 0x01, 0x21, 0xa0, 0x68, 0xfb, 0xf7, + 0xf4, 0xfe, 0xa0, 0x68, 0x03, 0xf0, 0x87, 0xff, + 0x0d, 0x48, 0x3c, 0x00, 0x2c, 0x79, 0x00, 0x00, + 0xa1, 0x68, 0x07, 0xf0, 0x23, 0xfd, 0xfb, 0xf7, + 0x55, 0xff, 0xe0, 0x68, 0x00, 0x28, 0x0d, 0xd0, + 0x09, 0x49, 0x06, 0x20, 0x0a, 0xf0, 0x24, 0xfd, + 0x08, 0x49, 0x05, 0x20, 0x0a, 0xf0, 0x20, 0xfd, + 0xfb, 0xf7, 0x6e, 0xff, 0x00, 0x28, 0x01, 0xd0, + 0x05, 0xf0, 0xf8, 0xfc, 0x10, 0xbd, 0x00, 0x00, + 0x78, 0x69, 0x01, 0x00, 0x34, 0x63, 0x01, 0x00, + 0xe1, 0x35, 0x00, 0x00, 0x3c, 0x00, 0x68, 0x79, + 0x00, 0x00, 0xb1, 0x35, 0x00, 0x00, 0xf0, 0xb5, + 0x24, 0x4d, 0x23, 0x4c, 0x68, 0x7c, 0x20, 0x3c, + 0x9b, 0xb0, 0x00, 0x28, 0x08, 0xd0, 0x02, 0x28, + 0x03, 0xd8, 0x20, 0x89, 0x01, 0x38, 0x20, 0x81, + 0x37, 0xe0, 0x00, 0x27, 0x6f, 0x74, 0x34, 0xe0, + 0x1c, 0x4e, 0x68, 0x22, 0x14, 0x36, 0x31, 0x1c, + 0x0c, 0x31, 0x01, 0xa8, 0xf8, 0xf7, 0x09, 0xfe, + 0x18, 0x48, 0x33, 0x89, 0x01, 0x21, 0x3c, 0x00, + 0xa4, 0x79, 0x00, 0x00, 0x44, 0x30, 0x0a, 0x1c, + 0x00, 0x2b, 0x00, 0x7b, 0x00, 0xd1, 0x02, 0x1c, + 0x12, 0x06, 0x12, 0x0e, 0x0d, 0xaf, 0x3a, 0x70, + 0x94, 0x46, 0xaa, 0x7b, 0x93, 0x19, 0x30, 0x33, + 0x5b, 0x7b, 0x7b, 0x70, 0xea, 0x73, 0x01, 0x32, + 0x12, 0x06, 0x12, 0x0e, 0x00, 0x27, 0x82, 0x42, + 0xaa, 0x73, 0x01, 0xd3, 0xaf, 0x73, 0x04, 0xe0, + 0x62, 0x46, 0x01, 0x2a, 0x01, 0xd1, 0x77, 0x60, + 0x3c, 0x00, 0xe0, 0x79, 0x00, 0x00, 0x00, 0xe0, + 0x71, 0x60, 0x06, 0x48, 0x07, 0x4a, 0x80, 0x38, + 0x81, 0x67, 0x42, 0x67, 0x68, 0x22, 0x01, 0xa9, + 0xf8, 0xf7, 0xdd, 0xfd, 0x27, 0x81, 0x08, 0xf0, + 0x12, 0xfd, 0x1b, 0xb0, 0xf0, 0xbd, 0x84, 0x66, + 0x01, 0x00, 0xe9, 0x2e, 0x00, 0x00, 0xf1, 0xb5, + 0x86, 0xb0, 0x06, 0x99, 0x00, 0x20, 0x88, 0x61, + 0x06, 0x98, 0x84, 0x68, 0x80, 0x8d, 0x65, 0x68, + 0x01, 0x28, 0x3c, 0x00, 0x1c, 0x7a, 0x00, 0x00, + 0x4c, 0xd9, 0x35, 0x49, 0x49, 0x68, 0x05, 0x91, + 0x00, 0x29, 0x47, 0xd0, 0x00, 0x22, 0x00, 0x21, + 0x00, 0x23, 0x03, 0x90, 0x28, 0x1c, 0x96, 0x46, + 0x94, 0x46, 0x06, 0x68, 0x04, 0x96, 0xf2, 0x78, + 0x80, 0x26, 0xb2, 0x43, 0x3f, 0x2a, 0x2e, 0xd8, + 0xd7, 0x06, 0xff, 0x0e, 0x01, 0x26, 0xbe, 0x40, + 0x37, 0x1c, 0x04, 0x9e, 0x52, 0x09, 0xb6, 0x78, + 0x76, 0x00, 0xb2, 0x18, 0x3c, 0x00, 0x58, 0x7a, + 0x00, 0x00, 0x26, 0x4e, 0x92, 0x00, 0x1c, 0x36, + 0xb2, 0x58, 0x3a, 0x40, 0x1e, 0xd0, 0x03, 0xe0, + 0x02, 0x90, 0x02, 0x89, 0xc0, 0x68, 0x51, 0x18, + 0x00, 0x28, 0xf9, 0xd1, 0x05, 0x98, 0x81, 0x42, + 0x14, 0xd8, 0x70, 0x46, 0x01, 0x30, 0x86, 0x46, + 0x00, 0x2b, 0x04, 0xd0, 0x60, 0x46, 0xd8, 0x60, + 0x01, 0x98, 0x62, 0x46, 0xd0, 0x60, 0x03, 0x98, + 0x01, 0x38, 0x03, 0x90, 0x06, 0xd0, 0x3c, 0x00, + 0x94, 0x7a, 0x00, 0x00, 0x23, 0x1c, 0x24, 0x68, + 0x60, 0x68, 0x02, 0x9a, 0x01, 0x90, 0x94, 0x46, + 0xc9, 0xe7, 0x70, 0x46, 0x01, 0x28, 0x07, 0xd9, + 0x2a, 0x1c, 0x00, 0x21, 0x3f, 0x20, 0x01, 0xf0, + 0x51, 0xff, 0x05, 0x1c, 0x06, 0x98, 0x85, 0x61, + 0x28, 0x1c, 0x01, 0xf0, 0xb3, 0xff, 0x0e, 0x48, + 0x00, 0x68, 0x00, 0x28, 0x07, 0xd0, 0x28, 0x68, + 0x01, 0x88, 0x40, 0x79, 0x02, 0x31, 0x09, 0x1a, + 0x3c, 0x00, 0xd0, 0x7a, 0x00, 0x00, 0x28, 0x1c, + 0x01, 0xf0, 0xe5, 0xfc, 0xa2, 0x68, 0x06, 0x98, + 0xc0, 0x68, 0x06, 0x99, 0x0b, 0x69, 0x29, 0x1c, + 0xf8, 0xf7, 0x7c, 0xfc, 0x03, 0x49, 0x08, 0x69, + 0x01, 0x30, 0x08, 0x61, 0x07, 0xb0, 0xf0, 0xbd, + 0x00, 0x00, 0xfc, 0x5a, 0x01, 0x00, 0xcc, 0x5c, + 0x01, 0x00, 0x10, 0xb5, 0x09, 0x4a, 0x80, 0x00, + 0x12, 0x58, 0xd0, 0x06, 0xc0, 0x0e, 0x01, 0x30, + 0x07, 0x4b, 0x3c, 0x00, 0x0c, 0x7b, 0x00, 0x00, + 0x1c, 0x68, 0x00, 0x2c, 0xfc, 0xdb, 0x5a, 0x60, + 0x20, 0x22, 0x12, 0x1a, 0x91, 0x40, 0x19, 0x60, + 0x19, 0x68, 0x00, 0x29, 0xfc, 0xdb, 0x10, 0xbd, + 0xe8, 0x60, 0x01, 0x00, 0x30, 0x20, 0x07, 0x00, + 0xb0, 0xb5, 0x12, 0x4c, 0x00, 0x25, 0x25, 0x70, + 0xa1, 0x68, 0x11, 0x48, 0x07, 0xf0, 0x32, 0xfc, + 0x65, 0x61, 0xfb, 0xf7, 0xa3, 0xfe, 0xe0, 0x68, + 0x00, 0x28, 0x0d, 0xd0, 0x3c, 0x00, 0x48, 0x7b, + 0x00, 0x00, 0xfb, 0xf7, 0xa4, 0xfe, 0x01, 0x21, + 0x07, 0x20, 0x0b, 0xf0, 0x70, 0xfd, 0x0a, 0x49, + 0x06, 0x20, 0x0a, 0xf0, 0x4c, 0xfc, 0x09, 0x49, + 0x05, 0x20, 0x0a, 0xf0, 0x48, 0xfc, 0xa0, 0x68, + 0x03, 0xf0, 0x67, 0xfe, 0x00, 0x21, 0xa0, 0x68, + 0xfb, 0xf7, 0xcd, 0xfd, 0x05, 0xf0, 0xab, 0xfb, + 0xb0, 0xbd, 0x78, 0x69, 0x01, 0x00, 0x34, 0x63, + 0x01, 0x00, 0xe1, 0x35, 0x00, 0x00, 0x3c, 0x00, + 0x84, 0x7b, 0x00, 0x00, 0xb1, 0x35, 0x00, 0x00, + 0x10, 0xb5, 0x0f, 0x4c, 0x20, 0x7c, 0x00, 0x28, + 0x19, 0xd1, 0x60, 0x69, 0x00, 0x28, 0x16, 0xd1, + 0xe0, 0x68, 0x00, 0x28, 0x06, 0xd0, 0x0a, 0x48, + 0x1c, 0x38, 0xc0, 0x68, 0x00, 0x28, 0x01, 0xd0, + 0x05, 0xf0, 0xce, 0xfb, 0x01, 0x21, 0x07, 0x20, + 0x0b, 0xf0, 0x40, 0xfd, 0xa0, 0x68, 0x03, 0xf0, + 0x3f, 0xfe, 0x04, 0x48, 0xa1, 0x68, 0x07, 0xf0, + 0x3c, 0x00, 0xc0, 0x7b, 0x00, 0x00, 0xdb, 0xfb, + 0x01, 0x20, 0x20, 0x70, 0x10, 0xbd, 0x78, 0x69, + 0x01, 0x00, 0x34, 0x63, 0x01, 0x00, 0x70, 0xb5, + 0x0e, 0x4c, 0x01, 0x22, 0xa3, 0x68, 0xe5, 0x68, + 0x26, 0x8a, 0x5d, 0x1b, 0xb5, 0x42, 0x01, 0xd1, + 0x00, 0x22, 0x06, 0xe0, 0x25, 0x68, 0x01, 0x33, + 0x2e, 0x68, 0xa3, 0x60, 0x26, 0x60, 0x04, 0x35, + 0x03, 0xc5, 0x00, 0x2a, 0x04, 0xd1, 0x01, 0x21, + 0x9d, 0x20, 0x3c, 0x00, 0xfc, 0x7b, 0x00, 0x00, + 0xf9, 0xf7, 0x52, 0xfb, 0x70, 0xbd, 0x03, 0x49, + 0x02, 0x20, 0x08, 0x60, 0x70, 0xbd, 0x00, 0x00, + 0x44, 0xe3, 0x01, 0x00, 0x40, 0x20, 0x07, 0x00, + 0x80, 0xb5, 0x02, 0xf0, 0xb9, 0xf8, 0x80, 0xbd, + 0x80, 0xb5, 0x02, 0x21, 0x2d, 0x20, 0xf9, 0xf7, + 0x3f, 0xfb, 0x00, 0x20, 0x80, 0xbd, 0x00, 0x00, + 0x80, 0xb5, 0x02, 0x21, 0x2a, 0x20, 0xf9, 0xf7, + 0x37, 0xfb, 0x00, 0x20, 0x3c, 0x00, 0x38, 0x7c, + 0x00, 0x00, 0x80, 0xbd, 0x00, 0x00, 0x80, 0xb5, + 0x01, 0x21, 0x2b, 0x20, 0xf9, 0xf7, 0x2f, 0xfb, + 0x02, 0x20, 0x80, 0xbd, 0x00, 0x00, 0x01, 0x49, + 0x01, 0x20, 0x08, 0x61, 0x70, 0x47, 0x7c, 0x78, + 0x01, 0x00, 0xf8, 0xb5, 0x06, 0x1c, 0x0c, 0x23, + 0x0f, 0x1c, 0x17, 0x49, 0x58, 0x43, 0x45, 0x18, + 0x6c, 0x68, 0x30, 0x1c, 0x0b, 0xf0, 0x3f, 0xfe, + 0x00, 0x2f, 0x09, 0xd1, 0x30, 0x1c, 0x3c, 0x00, + 0x74, 0x7c, 0x00, 0x00, 0x03, 0xf0, 0xee, 0xfe, + 0x41, 0x20, 0x07, 0x55, 0x11, 0x48, 0x21, 0x1c, + 0xff, 0xf7, 0xa6, 0xff, 0xf8, 0xbd, 0x41, 0x20, + 0x07, 0x55, 0xa0, 0x6b, 0x00, 0x28, 0x03, 0xd0, + 0x20, 0x1c, 0x00, 0xf0, 0xdf, 0xf9, 0xf5, 0xe7, + 0x20, 0x1c, 0x00, 0xf0, 0xdb, 0xf9, 0xac, 0x68, + 0x00, 0x2c, 0x02, 0xd0, 0x00, 0x20, 0xa8, 0x60, + 0xed, 0xe7, 0x30, 0x1c, 0x05, 0xf0, 0x34, 0xf9, + 0x3c, 0x00, 0xb0, 0x7c, 0x00, 0x00, 0x04, 0x1c, + 0xe8, 0xd1, 0x08, 0x21, 0x0c, 0x20, 0xf9, 0xf7, + 0xf4, 0xfa, 0xe3, 0xe7, 0x00, 0x00, 0x60, 0x7b, + 0x01, 0x00, 0x55, 0x80, 0x00, 0x00, 0x07, 0x4a, + 0x80, 0xb5, 0x50, 0x70, 0x51, 0x60, 0x12, 0x78, + 0x06, 0x4b, 0x80, 0x00, 0x52, 0x01, 0xd2, 0x18, + 0x10, 0x18, 0x40, 0x38, 0x02, 0x68, 0x08, 0x1c, + 0xf8, 0xf7, 0x7b, 0xfb, 0x80, 0xbd, 0x78, 0x69, + 0x01, 0x00, 0x3c, 0x00, 0xec, 0x7c, 0x00, 0x00, + 0xfc, 0x42, 0x01, 0x00, 0xb0, 0xb5, 0x0a, 0x49, + 0x04, 0x1c, 0xc8, 0x70, 0x08, 0x4d, 0xe4, 0x35, + 0xa8, 0x7a, 0x08, 0x71, 0x08, 0x2c, 0x01, 0xd3, + 0xf9, 0xf7, 0xfc, 0xfa, 0xa8, 0x7a, 0x05, 0x49, + 0x40, 0x01, 0x40, 0x18, 0xa1, 0x00, 0x40, 0x58, + 0xf8, 0xf7, 0x60, 0xfb, 0xb0, 0xbd, 0x00, 0x00, + 0x60, 0x6c, 0x01, 0x00, 0x80, 0x43, 0x01, 0x00, + 0x80, 0xb5, 0x00, 0x28, 0x3c, 0x00, 0x28, 0x7d, + 0x00, 0x00, 0x01, 0xd0, 0x09, 0xf0, 0x1d, 0xf9, + 0x80, 0xbd, 0xb0, 0xb5, 0x05, 0x1c, 0x0c, 0x1c, + 0x00, 0x20, 0x08, 0x60, 0x68, 0x68, 0x09, 0xf0, + 0x36, 0xfb, 0x6c, 0x60, 0xb0, 0xbd, 0x10, 0xb5, + 0x04, 0x1c, 0x09, 0xf0, 0x34, 0xfb, 0x21, 0x68, + 0x00, 0x29, 0x00, 0xd1, 0x64, 0x60, 0x10, 0xbd, + 0x00, 0x00, 0x00, 0x21, 0x01, 0x60, 0x40, 0x60, + 0x70, 0x47, 0xf8, 0xb5, 0x46, 0x68, 0x3c, 0x00, + 0x64, 0x7d, 0x00, 0x00, 0x04, 0x1c, 0x40, 0x6a, + 0x35, 0x1c, 0x0a, 0x35, 0x00, 0x28, 0x04, 0xd0, + 0x20, 0x1c, 0xf9, 0xf7, 0x89, 0xfd, 0x07, 0x1c, + 0x00, 0xe0, 0x04, 0x27, 0x29, 0x1c, 0x60, 0x69, + 0x00, 0xf0, 0xf6, 0xfc, 0x79, 0x00, 0x0f, 0x18, + 0xba, 0x88, 0xf1, 0x8a, 0x05, 0x1c, 0x8a, 0x42, + 0x05, 0xd1, 0x30, 0x88, 0x00, 0x05, 0x02, 0xd5, + 0x04, 0xf0, 0xbe, 0xfb, 0x3c, 0xe0, 0x28, 0x68, + 0x3c, 0x00, 0xa0, 0x7d, 0x00, 0x00, 0x00, 0x28, + 0x0f, 0xd0, 0x01, 0x32, 0x8a, 0x42, 0x04, 0xd1, + 0xf9, 0xf7, 0x0f, 0xfc, 0x21, 0x68, 0xc1, 0x60, + 0x0b, 0xe0, 0xf9, 0xf7, 0xf0, 0xfb, 0xf0, 0x8a, + 0x00, 0x07, 0x04, 0xd0, 0x00, 0x21, 0x29, 0x60, + 0x29, 0xe0, 0x08, 0x07, 0x27, 0xd1, 0x20, 0x68, + 0x28, 0x60, 0xf0, 0x8a, 0xb8, 0x80, 0x13, 0x48, + 0x01, 0x68, 0x01, 0x31, 0x01, 0x60, 0x31, 0x88, + 0x49, 0x05, 0x3c, 0x00, 0xdc, 0x7d, 0x00, 0x00, + 0x18, 0xd4, 0x29, 0x68, 0x21, 0x60, 0x00, 0x21, + 0x29, 0x60, 0xe1, 0x69, 0x00, 0x29, 0x0d, 0xd0, + 0x89, 0x79, 0x02, 0x29, 0x0a, 0xd1, 0x08, 0x21, + 0x21, 0x86, 0x21, 0x1c, 0x38, 0x31, 0xa1, 0x62, + 0x22, 0x1c, 0xdc, 0x30, 0x08, 0x49, 0x02, 0xf0, + 0x81, 0xf9, 0xf8, 0xbd, 0x20, 0x1c, 0x00, 0xf0, + 0x5f, 0xf8, 0xfa, 0xe7, 0x20, 0x1c, 0xf9, 0xf7, + 0xef, 0xfc, 0xf6, 0xe7, 0x3c, 0x00, 0x18, 0x7e, + 0x00, 0x00, 0x20, 0x68, 0xf9, 0xf7, 0xbd, 0xfb, + 0xf7, 0xe7, 0xc4, 0x69, 0x01, 0x00, 0xb9, 0x71, + 0x00, 0x00, 0xf8, 0xb5, 0x0f, 0x1c, 0x09, 0x78, + 0x01, 0x24, 0xc9, 0x07, 0x21, 0xd5, 0x02, 0xf0, + 0x8c, 0xff, 0x00, 0x28, 0x01, 0xd0, 0x00, 0x24, + 0x1b, 0xe0, 0x0e, 0x4e, 0x75, 0x6e, 0x00, 0x2d, + 0x17, 0xd0, 0x34, 0x6e, 0x06, 0x22, 0x31, 0x1c, + 0x38, 0x1c, 0xf8, 0xf7, 0xd4, 0xfa, 0x3c, 0x00, + 0x54, 0x7e, 0x00, 0x00, 0x00, 0x28, 0x05, 0xd1, + 0x01, 0x20, 0x00, 0x2c, 0x00, 0xd0, 0x00, 0x20, + 0x04, 0x1c, 0x03, 0xe0, 0x01, 0x3d, 0x06, 0x36, + 0x00, 0x2d, 0xee, 0xd1, 0x00, 0x2c, 0x03, 0xd1, + 0x02, 0x4e, 0xb0, 0x6e, 0x01, 0x30, 0xb0, 0x66, + 0x20, 0x1c, 0xf8, 0xbd, 0x10, 0x79, 0x01, 0x00, + 0x30, 0xb5, 0x05, 0x1c, 0x00, 0x20, 0x06, 0x49, + 0x00, 0x22, 0x1c, 0x23, 0xcc, 0x56, 0xac, 0x42, + 0x3c, 0x00, 0x90, 0x7e, 0x00, 0x00, 0x01, 0xd1, + 0x08, 0x1c, 0x30, 0xbd, 0x01, 0x32, 0x48, 0x31, + 0x01, 0x2a, 0xf5, 0xd3, 0x30, 0xbd, 0xcc, 0x6d, + 0x01, 0x00, 0x10, 0xb5, 0x08, 0x4c, 0x00, 0x22, + 0x1c, 0x23, 0x53, 0x43, 0xe3, 0x58, 0x83, 0x42, + 0x04, 0xd1, 0x1c, 0x20, 0x50, 0x43, 0x00, 0x19, + 0x0a, 0x60, 0x10, 0xbd, 0x01, 0x32, 0x0e, 0x2a, + 0xf2, 0xd3, 0x00, 0x20, 0x10, 0xbd, 0xdc, 0x71, + 0x01, 0x00, 0x3c, 0x00, 0xcc, 0x7e, 0x00, 0x00, + 0xf0, 0xb5, 0x41, 0x68, 0x95, 0xb0, 0x07, 0x1c, + 0x90, 0x37, 0x13, 0x91, 0x04, 0x1c, 0xf8, 0x78, + 0x25, 0x1c, 0x80, 0x35, 0xc6, 0x07, 0x28, 0x79, + 0xf6, 0x0f, 0x4a, 0x49, 0x02, 0x28, 0x4d, 0xd1, + 0x0a, 0x6d, 0x00, 0x2a, 0x4a, 0xd0, 0x48, 0x68, + 0x01, 0x30, 0x48, 0x60, 0x0a, 0xf0, 0x58, 0xff, + 0x44, 0x49, 0x08, 0x61, 0x48, 0x61, 0x13, 0x99, + 0x09, 0x79, 0xc9, 0x07, 0x3c, 0x00, 0x08, 0x7f, + 0x00, 0x00, 0x01, 0xd4, 0x41, 0x49, 0x88, 0x61, + 0x20, 0x68, 0x06, 0x22, 0x06, 0x90, 0xa1, 0x68, + 0x03, 0xa8, 0xf8, 0xf7, 0xee, 0xfa, 0x06, 0x22, + 0x04, 0xa8, 0x02, 0x30, 0xe1, 0x68, 0xf8, 0xf7, + 0xe8, 0xfa, 0x07, 0xa8, 0x06, 0x22, 0x21, 0x69, + 0xf8, 0xf7, 0xe3, 0xfa, 0xb8, 0x78, 0x08, 0xab, + 0x00, 0x21, 0x98, 0x70, 0x0c, 0x96, 0x63, 0x6a, + 0x20, 0x1c, 0xa0, 0x30, 0x0a, 0x1c, 0x3c, 0x00, + 0x44, 0x7f, 0x00, 0x00, 0x00, 0x2b, 0x02, 0xd0, + 0x02, 0x8a, 0x52, 0x07, 0x52, 0x0f, 0x08, 0xab, + 0xda, 0x70, 0x00, 0xab, 0x99, 0x84, 0x13, 0x99, + 0x09, 0x88, 0xc9, 0x0b, 0xd9, 0x84, 0x69, 0x6b, + 0x10, 0xab, 0x10, 0x91, 0xa9, 0x6b, 0x11, 0x91, + 0x80, 0x8b, 0x29, 0x49, 0x18, 0x81, 0x09, 0x6d, + 0x03, 0xa8, 0xf8, 0xf7, 0x32, 0xfa, 0x29, 0x79, + 0x68, 0x6b, 0x0b, 0xf0, 0x4d, 0xfd, 0x29, 0x79, + 0x3c, 0x00, 0x80, 0x7f, 0x00, 0x00, 0xa8, 0x6b, + 0x0b, 0xf0, 0x67, 0xfd, 0x3d, 0xe0, 0x00, 0x28, + 0x38, 0xd1, 0x48, 0x6d, 0x14, 0x90, 0x00, 0x28, + 0x34, 0xd0, 0x20, 0x68, 0x06, 0x22, 0x03, 0x90, + 0xa1, 0x68, 0x68, 0x46, 0xf8, 0xf7, 0xab, 0xfa, + 0x06, 0x22, 0x68, 0x46, 0x80, 0x18, 0xe1, 0x68, + 0xf8, 0xf7, 0xa5, 0xfa, 0x05, 0xa8, 0x06, 0x22, + 0x21, 0x69, 0xf8, 0xf7, 0xa0, 0xfa, 0x00, 0x21, + 0x04, 0x91, 0x3c, 0x00, 0xbc, 0x7f, 0x00, 0x00, + 0xb9, 0x78, 0x08, 0xa8, 0x10, 0xab, 0x01, 0x72, + 0x08, 0x96, 0xe9, 0x68, 0x0b, 0x91, 0x69, 0x79, + 0x41, 0x72, 0x68, 0x6b, 0x0e, 0x90, 0xa8, 0x6b, + 0x10, 0x90, 0x28, 0x8d, 0xd8, 0x80, 0x68, 0x8d, + 0x18, 0x81, 0xe1, 0x69, 0x0c, 0xa8, 0x00, 0x29, + 0x04, 0xd0, 0x89, 0x79, 0x01, 0x70, 0x20, 0x6a, + 0x0d, 0x90, 0x01, 0xe0, 0x07, 0x21, 0x01, 0x70, + 0x68, 0x46, 0x14, 0x99, 0x3c, 0x00, 0xf8, 0x7f, + 0x00, 0x00, 0xf8, 0xf7, 0xef, 0xf9, 0x02, 0xe0, + 0x20, 0x68, 0xf9, 0xf7, 0xca, 0xfa, 0x20, 0x1c, + 0xf9, 0xf7, 0xf5, 0xfb, 0x15, 0xb0, 0xf0, 0xbd, + 0x00, 0x00, 0xc4, 0x69, 0x01, 0x00, 0xb0, 0xb5, + 0x04, 0x1c, 0xc0, 0x68, 0x06, 0x22, 0x01, 0x89, + 0x0c, 0x31, 0x01, 0x81, 0x05, 0x68, 0x21, 0x1c, + 0x0c, 0x3d, 0x05, 0x60, 0xa8, 0x18, 0xf8, 0xf7, + 0x64, 0xfa, 0x06, 0x22, 0xa1, 0x18, 0x3c, 0x00, + 0x34, 0x80, 0x00, 0x00, 0x28, 0x1c, 0xf8, 0xf7, + 0x5f, 0xfa, 0xa0, 0x8f, 0x00, 0x09, 0xe0, 0x62, + 0x20, 0x63, 0x03, 0x48, 0x01, 0x69, 0x20, 0x1c, + 0xf8, 0xf7, 0xc7, 0xf9, 0xb0, 0xbd, 0x00, 0x00, + 0x7c, 0x79, 0x01, 0x00, 0xf8, 0xb5, 0x06, 0x1c, + 0x60, 0x36, 0x05, 0x1c, 0x70, 0x7a, 0x0c, 0x23, + 0x25, 0x49, 0x58, 0x43, 0x44, 0x18, 0xa8, 0x6b, + 0x00, 0x27, 0x00, 0x28, 0x06, 0xd0, 0xa0, 0x78, + 0x3c, 0x00, 0x70, 0x80, 0x00, 0x00, 0x01, 0x28, + 0x03, 0xd1, 0xa7, 0x70, 0x70, 0x7a, 0x0a, 0xf0, + 0xb6, 0xfd, 0x2a, 0x1c, 0x0c, 0x21, 0x80, 0x20, + 0x0b, 0xf0, 0x95, 0xfb, 0xa8, 0x6b, 0x00, 0x28, + 0x33, 0xd0, 0xa0, 0x78, 0x02, 0x28, 0x0b, 0xd0, + 0x04, 0x28, 0x22, 0xd1, 0xa7, 0x70, 0x2f, 0x1c, + 0x40, 0x37, 0x78, 0x78, 0x02, 0x28, 0x0c, 0xd1, + 0x70, 0x7a, 0x0a, 0xf0, 0xa0, 0xfd, 0x18, 0xe0, + 0x03, 0x20, 0x3c, 0x00, 0xac, 0x80, 0x00, 0x00, + 0xa0, 0x70, 0x12, 0x49, 0x00, 0x20, 0x14, 0x39, + 0x09, 0x69, 0xf8, 0xf7, 0x90, 0xf9, 0x0f, 0xe0, + 0x2c, 0x1c, 0x07, 0xe0, 0x78, 0x78, 0x41, 0x21, + 0x22, 0x1c, 0x08, 0x55, 0x0c, 0x21, 0x80, 0x20, + 0x0b, 0xf0, 0x70, 0xfb, 0x60, 0x34, 0x60, 0x7a, + 0x04, 0xf0, 0x20, 0xff, 0x04, 0x1c, 0xf1, 0xd1, + 0x70, 0x7a, 0x40, 0x35, 0xa9, 0x8b, 0x00, 0x02, + 0x09, 0x09, 0x09, 0x04, 0x3c, 0x00, 0xe8, 0x80, + 0x00, 0x00, 0x08, 0x43, 0x81, 0x21, 0x01, 0x43, + 0x0c, 0x20, 0x0b, 0xf0, 0xa0, 0xfa, 0xf8, 0xbd, + 0x00, 0x00, 0x60, 0x7b, 0x01, 0x00, 0xf8, 0xb5, + 0x1c, 0x49, 0x05, 0x1c, 0x88, 0x6a, 0x01, 0x30, + 0x88, 0x62, 0x28, 0x1c, 0x0b, 0xf0, 0x7d, 0xfd, + 0x04, 0x1c, 0x11, 0xd0, 0x2b, 0x1c, 0x20, 0x33, + 0x1e, 0x1c, 0x5a, 0x79, 0x20, 0x1c, 0xb4, 0x30, + 0x19, 0x79, 0x14, 0x4f, 0xfd, 0xf7, 0x3c, 0x00, + 0x24, 0x81, 0x00, 0x00, 0x89, 0xf8, 0xaa, 0x7a, + 0x20, 0x1c, 0xb8, 0x30, 0xb1, 0x79, 0xfd, 0xf7, + 0xb9, 0xf8, 0x00, 0x2f, 0x04, 0xd1, 0x01, 0x21, + 0x28, 0x68, 0xfa, 0xf7, 0x6d, 0xfa, 0xf8, 0xbd, + 0x60, 0x68, 0xbc, 0x21, 0xc0, 0x8a, 0x08, 0x53, + 0x28, 0x68, 0x00, 0x21, 0xfa, 0xf7, 0x64, 0xfa, + 0x00, 0x28, 0x09, 0xd0, 0x06, 0x49, 0xc8, 0x6a, + 0x01, 0x30, 0xc8, 0x62, 0x00, 0x2c, 0xee, 0xd0, + 0x3c, 0x00, 0x60, 0x81, 0x00, 0x00, 0x20, 0x1c, + 0xf9, 0xf7, 0x47, 0xfb, 0xea, 0xe7, 0x20, 0x1c, + 0xf8, 0xf7, 0x3c, 0xf9, 0xe6, 0xe7, 0xc4, 0x69, + 0x01, 0x00, 0xa1, 0xff, 0x00, 0x00, 0xf8, 0xb5, + 0x16, 0x4c, 0x05, 0x1f, 0x00, 0x22, 0x21, 0x1c, + 0xa0, 0x31, 0x03, 0xe0, 0x28, 0x68, 0xa0, 0x42, + 0x09, 0xd0, 0x20, 0x34, 0xa1, 0x42, 0xf9, 0xd1, + 0x00, 0x2a, 0x04, 0xd1, 0x02, 0x21, 0x8e, 0x20, + 0xf9, 0xf7, 0x3c, 0x00, 0x9c, 0x81, 0x00, 0x00, + 0x83, 0xf8, 0xf8, 0xbd, 0x0d, 0x4f, 0xbe, 0x79, + 0x60, 0x69, 0x01, 0x30, 0x60, 0x61, 0xf8, 0xf7, + 0x97, 0xfd, 0xa8, 0x42, 0x07, 0xd1, 0xa0, 0x88, + 0x04, 0x30, 0xf8, 0xf7, 0x97, 0xfd, 0xe0, 0x69, + 0x01, 0x30, 0xe0, 0x61, 0x05, 0xe0, 0x20, 0x68, + 0x28, 0x60, 0x25, 0x60, 0xa0, 0x69, 0x01, 0x30, + 0xa0, 0x61, 0xbe, 0x71, 0xe5, 0xe7, 0x00, 0x00, + 0xd0, 0x5c, 0x01, 0x00, 0x3c, 0x00, 0xd8, 0x81, + 0x00, 0x00, 0x20, 0x10, 0x07, 0x00, 0x00, 0x29, + 0x01, 0xdb, 0x06, 0x29, 0x01, 0xdb, 0x02, 0x20, + 0x70, 0x47, 0x06, 0x4b, 0xc9, 0x00, 0x5a, 0x5c, + 0xc9, 0x18, 0x02, 0x70, 0x4a, 0x78, 0x42, 0x70, + 0x8a, 0x78, 0x82, 0x70, 0x49, 0x68, 0x41, 0x60, + 0x00, 0x20, 0x70, 0x47, 0x00, 0x00, 0xcc, 0x5a, + 0x01, 0x00, 0xb0, 0xb5, 0x0d, 0x1c, 0x04, 0x1c, + 0x05, 0x28, 0x01, 0xd3, 0xf9, 0xf7, 0x3c, 0x00, + 0x14, 0x82, 0x00, 0x00, 0x75, 0xf8, 0x10, 0x48, + 0x40, 0x68, 0x00, 0x28, 0x00, 0xd0, 0x03, 0x24, + 0x10, 0x2d, 0x00, 0xd3, 0x0f, 0x25, 0x06, 0x20, + 0x0b, 0x49, 0x60, 0x43, 0x12, 0x31, 0x40, 0x18, + 0x41, 0x78, 0x80, 0x78, 0x49, 0x19, 0x09, 0x06, + 0x09, 0x0e, 0x88, 0x42, 0x00, 0xd2, 0x01, 0x1c, + 0x01, 0x20, 0x88, 0x40, 0x05, 0x49, 0x01, 0x38, + 0x09, 0x68, 0x08, 0x40, 0x00, 0x04, 0x00, 0x0c, + 0x3c, 0x00, 0x50, 0x82, 0x00, 0x00, 0x02, 0xf0, + 0x44, 0xfe, 0xb0, 0xbd, 0x00, 0x00, 0xd4, 0x7a, + 0x01, 0x00, 0x08, 0x20, 0x07, 0x00, 0xb0, 0xb5, + 0x04, 0x1c, 0x0d, 0x1c, 0x09, 0xf0, 0xcf, 0xfd, + 0x00, 0x28, 0x03, 0xd1, 0x20, 0x1c, 0x09, 0xf0, + 0x82, 0xfd, 0x05, 0x61, 0xb0, 0xbd, 0x80, 0xb5, + 0x0a, 0xf0, 0x97, 0xfd, 0x03, 0x4a, 0x0c, 0x32, + 0x06, 0xca, 0x89, 0x18, 0x08, 0x1a, 0x80, 0xbd, + 0x00, 0x00, 0x3c, 0x00, 0x8c, 0x82, 0x00, 0x00, + 0xa0, 0x7d, 0x01, 0x00, 0x70, 0xb5, 0x0b, 0x4c, + 0x04, 0x9e, 0x64, 0x68, 0x0d, 0xe0, 0x65, 0x68, + 0x85, 0x42, 0x09, 0xd1, 0x20, 0x7a, 0x08, 0x70, + 0xe0, 0x68, 0x10, 0x60, 0x20, 0x69, 0x18, 0x60, + 0x20, 0x7d, 0x30, 0x80, 0x01, 0x20, 0x70, 0xbd, + 0x24, 0x68, 0x00, 0x2c, 0xef, 0xd1, 0x00, 0x20, + 0x70, 0xbd, 0x00, 0x00, 0xa4, 0x6e, 0x01, 0x00, + 0x10, 0xb5, 0x04, 0x1c, 0x3c, 0x00, 0xc8, 0x82, + 0x00, 0x00, 0x20, 0x30, 0x81, 0x7b, 0x20, 0x69, + 0x04, 0x30, 0xfd, 0xf7, 0x64, 0xf9, 0x01, 0x1c, + 0x62, 0x20, 0x02, 0x5b, 0x63, 0x6a, 0x40, 0x34, + 0x20, 0x78, 0x02, 0xf0, 0xce, 0xfd, 0x10, 0xbd, + 0x00, 0x00, 0x0b, 0x49, 0x10, 0xb5, 0x08, 0x88, + 0x8a, 0x69, 0x0a, 0x23, 0x50, 0x43, 0x58, 0x43, + 0x0e, 0xd0, 0x08, 0x4a, 0x53, 0x89, 0x94, 0x88, + 0xd2, 0x88, 0x1b, 0x19, 0x52, 0x04, 0x3c, 0x00, + 0x04, 0x83, 0x00, 0x00, 0x52, 0x0c, 0x9a, 0x18, + 0xc9, 0x68, 0x06, 0x32, 0x4a, 0x43, 0x0a, 0x21, + 0x51, 0x43, 0xf8, 0xf7, 0xfd, 0xf9, 0x10, 0xbd, + 0xc8, 0x74, 0x01, 0x00, 0x30, 0x00, 0x07, 0x00, + 0x10, 0xb5, 0x43, 0x1c, 0x01, 0xd1, 0x10, 0x48, + 0x10, 0xbd, 0x0f, 0x4a, 0x0e, 0x4b, 0x94, 0x3a, + 0x12, 0x68, 0x44, 0x3b, 0x1b, 0x7a, 0x10, 0xe0, + 0x54, 0x68, 0x84, 0x42, 0x0c, 0xd1, 0x00, 0x29, + 0x3c, 0x00, 0x40, 0x83, 0x00, 0x00, 0x0f, 0xd1, + 0x02, 0x2b, 0x03, 0xd1, 0xd4, 0x7b, 0x02, 0x2c, + 0x0a, 0xd2, 0x04, 0xe0, 0x00, 0x2b, 0x05, 0xd1, + 0xd4, 0x7b, 0xe4, 0x07, 0x04, 0xd4, 0x12, 0x68, + 0x00, 0x2a, 0xec, 0xd1, 0x00, 0x20, 0x10, 0xbd, + 0x10, 0x1c, 0x10, 0xbd, 0x00, 0x00, 0x38, 0x6f, + 0x01, 0x00, 0x01, 0x1c, 0x01, 0x20, 0x01, 0x29, + 0x00, 0xd0, 0x00, 0x20, 0x70, 0x47, 0x00, 0xb5, + 0x02, 0x1c, 0x3c, 0x00, 0x7c, 0x83, 0x00, 0x00, + 0xfd, 0xf7, 0xce, 0xf8, 0x00, 0x28, 0x08, 0xd0, + 0x10, 0x1c, 0xff, 0xf7, 0xf1, 0xff, 0x18, 0x23, + 0x03, 0x49, 0x58, 0x43, 0x40, 0x18, 0x00, 0x69, + 0x00, 0xbd, 0x00, 0x20, 0x00, 0xbd, 0x00, 0x00, + 0x94, 0x67, 0x01, 0x00, 0x80, 0xb5, 0x00, 0x28, + 0x00, 0xd1, 0x08, 0x48, 0x07, 0x49, 0x00, 0x68, + 0x50, 0x31, 0x09, 0x7a, 0x00, 0x29, 0x02, 0xd0, + 0x02, 0x29, 0x04, 0xd1, 0x3c, 0x00, 0xb8, 0x83, + 0x00, 0x00, 0x00, 0xe0, 0x01, 0x21, 0x00, 0xf0, + 0x06, 0xf8, 0x80, 0xbd, 0x00, 0x20, 0x80, 0xbd, + 0x00, 0x00, 0xa4, 0x6e, 0x01, 0x00, 0x12, 0x4a, + 0x12, 0x4b, 0x12, 0x7a, 0x2c, 0x3b, 0x00, 0x2a, + 0x03, 0xd1, 0x5a, 0x68, 0x00, 0x2a, 0x18, 0xd1, + 0x04, 0xe0, 0x02, 0x2a, 0x02, 0xd1, 0x9a, 0x68, + 0x00, 0x2a, 0x12, 0xd1, 0x00, 0x20, 0x70, 0x47, + 0xc2, 0x7b, 0x8a, 0x42, 0x01, 0xd0, 0x3c, 0x00, + 0xf4, 0x83, 0x00, 0x00, 0x03, 0x2a, 0x0a, 0xd1, + 0x82, 0x7e, 0x01, 0x2a, 0x07, 0xd1, 0x02, 0x7f, + 0x01, 0x32, 0x12, 0x06, 0x12, 0x0e, 0x02, 0x77, + 0xc3, 0x7e, 0x9a, 0x42, 0xee, 0xd2, 0x00, 0x68, + 0x00, 0x28, 0xec, 0xd1, 0x70, 0x47, 0x00, 0x00, + 0xf4, 0x6e, 0x01, 0x00, 0xf7, 0xb5, 0x84, 0x46, + 0x00, 0x20, 0x01, 0x27, 0x00, 0x24, 0x00, 0x25, + 0x88, 0xb0, 0x07, 0xe0, 0x62, 0x46, 0x52, 0x5d, + 0x3c, 0x00, 0x30, 0x84, 0x00, 0x00, 0x00, 0x2a, + 0x05, 0xd0, 0xab, 0x00, 0x6e, 0x46, 0xf2, 0x50, + 0x01, 0x35, 0x8d, 0x42, 0xf5, 0xd3, 0x00, 0x2d, + 0x00, 0xd0, 0x01, 0x20, 0x00, 0x28, 0x28, 0xd0, + 0x00, 0x27, 0x16, 0x4c, 0x6e, 0x46, 0x22, 0xe0, + 0x20, 0x1c, 0x00, 0xf0, 0x30, 0xf8, 0x01, 0x28, + 0x01, 0xd0, 0x07, 0x28, 0x06, 0xd1, 0x00, 0x21, + 0x20, 0x1c, 0x00, 0xf0, 0x34, 0xf8, 0x31, 0x68, + 0x88, 0x42, 0x3c, 0x00, 0x6c, 0x84, 0x00, 0x00, + 0x01, 0xd2, 0x02, 0x27, 0x14, 0xe0, 0x20, 0x68, + 0xc9, 0x00, 0x0c, 0x18, 0x08, 0x3c, 0x20, 0x1c, + 0x00, 0xf0, 0x1c, 0xf8, 0x07, 0x28, 0x07, 0xd1, + 0x01, 0x20, 0x01, 0x2d, 0x00, 0xd0, 0x00, 0x20, + 0x24, 0x68, 0x00, 0x28, 0x00, 0xd1, 0x08, 0x34, + 0x01, 0x3d, 0x04, 0x36, 0x00, 0x2d, 0xda, 0xd1, + 0x0a, 0x98, 0x04, 0x60, 0x0b, 0xb0, 0x38, 0x1c, + 0xf0, 0xbd, 0x00, 0x00, 0x3c, 0x00, 0xa8, 0x84, + 0x00, 0x00, 0x20, 0x52, 0x01, 0x00, 0x00, 0x68, + 0x00, 0x29, 0x01, 0xd0, 0x80, 0x02, 0x80, 0x0a, + 0x70, 0x47, 0x10, 0xb5, 0x40, 0x68, 0x80, 0x00, + 0x44, 0x0f, 0x08, 0x2c, 0x03, 0xd3, 0x02, 0x21, + 0x87, 0x20, 0xf8, 0xf7, 0xec, 0xfe, 0x20, 0x1c, + 0x10, 0xbd, 0x00, 0x29, 0x02, 0xd0, 0x00, 0x68, + 0x80, 0x0d, 0x70, 0x47, 0x40, 0x68, 0x80, 0x05, + 0x80, 0x0d, 0x70, 0x47, 0x00, 0x00, 0x3c, 0x00, + 0xe4, 0x84, 0x00, 0x00, 0x10, 0xb5, 0x40, 0x68, + 0x40, 0x01, 0x44, 0x0f, 0x05, 0x2c, 0x03, 0xd3, + 0x05, 0x21, 0x87, 0x20, 0xf8, 0xf7, 0xd6, 0xfe, + 0x20, 0x1c, 0x10, 0xbd, 0xf8, 0xb5, 0x05, 0x1c, + 0x88, 0x0a, 0x00, 0x90, 0x1c, 0x48, 0x8e, 0x05, + 0xc0, 0x69, 0xb6, 0x0d, 0x17, 0x1c, 0x1c, 0x1c, + 0x00, 0x28, 0x05, 0xd1, 0x18, 0x48, 0x81, 0x69, + 0x8d, 0x42, 0x1d, 0xd0, 0x85, 0x61, 0x11, 0xe0, + 0x3c, 0x00, 0x20, 0x85, 0x00, 0x00, 0xfd, 0xf7, + 0xe8, 0xf8, 0x15, 0x49, 0x09, 0x78, 0x0e, 0x29, + 0x07, 0xd1, 0x00, 0x28, 0x05, 0xd0, 0x11, 0x49, + 0x50, 0x31, 0x06, 0x23, 0xc9, 0x56, 0xf9, 0xf7, + 0x06, 0xfa, 0x0e, 0x49, 0x00, 0x20, 0xc8, 0x61, + 0x8d, 0x61, 0x29, 0x1c, 0x20, 0x1c, 0xf8, 0xf7, + 0xe2, 0xf8, 0x79, 0x43, 0x20, 0x1c, 0xf8, 0xf7, + 0xde, 0xf8, 0x08, 0x48, 0x41, 0x61, 0x20, 0x1c, + 0x00, 0x99, 0x3c, 0x00, 0x5c, 0x85, 0x00, 0x00, + 0xf8, 0xf7, 0xd8, 0xf8, 0x05, 0x48, 0x40, 0x69, + 0x0a, 0x18, 0xa2, 0x42, 0x01, 0xd2, 0x40, 0x18, + 0x01, 0xe0, 0x40, 0x18, 0x00, 0x1b, 0x80, 0x02, + 0x80, 0x19, 0xf8, 0xbd, 0xac, 0x7c, 0x01, 0x00, + 0x11, 0x67, 0x01, 0x00, 0xf8, 0xb5, 0x0f, 0x1c, + 0x06, 0x1c, 0x14, 0x1c, 0x1d, 0x1c, 0x07, 0xf0, + 0xa1, 0xfc, 0x0e, 0x28, 0x09, 0xd1, 0x20, 0x1c, + 0x02, 0xf0, 0xfc, 0xfb, 0x3c, 0x00, 0x98, 0x85, + 0x00, 0x00, 0x00, 0x28, 0x04, 0xd0, 0x08, 0x48, + 0x00, 0x78, 0x02, 0xf0, 0xe4, 0xfb, 0x04, 0x1c, + 0x01, 0x21, 0x00, 0x2e, 0xac, 0x72, 0x00, 0xd0, + 0x39, 0x1c, 0x20, 0x1c, 0x02, 0xf0, 0x07, 0xfc, + 0x28, 0x60, 0x00, 0x20, 0x28, 0x72, 0x6c, 0x72, + 0xf8, 0xbd, 0x90, 0x57, 0x01, 0x00, 0x03, 0x1c, + 0x0a, 0x48, 0x10, 0xb5, 0x00, 0x24, 0x02, 0x1c, + 0xa0, 0x32, 0x03, 0xe0, 0x81, 0x88, 0x3c, 0x00, + 0xd4, 0x85, 0x00, 0x00, 0x99, 0x42, 0x09, 0xd2, + 0x20, 0x30, 0x82, 0x42, 0xf9, 0xd1, 0x00, 0x2c, + 0x04, 0xd1, 0x02, 0x21, 0x8e, 0x20, 0xf8, 0xf7, + 0x5d, 0xfe, 0x00, 0x20, 0x10, 0xbd, 0x00, 0x00, + 0xd0, 0x5c, 0x01, 0x00, 0xff, 0xb5, 0x06, 0x1c, + 0x00, 0x20, 0x81, 0xb0, 0x10, 0x60, 0x1f, 0x1c, + 0x01, 0x25, 0x14, 0x1c, 0x30, 0x1c, 0xff, 0xf7, + 0x6d, 0xff, 0x05, 0x28, 0x12, 0xd2, 0x02, 0xa3, + 0x3c, 0x00, 0x10, 0x86, 0x00, 0x00, 0x1b, 0x5c, + 0x5b, 0x00, 0x9f, 0x44, 0x00, 0x00, 0x03, 0x03, + 0x03, 0x03, 0x08, 0x00, 0x39, 0x1c, 0x30, 0x1c, + 0xff, 0xf7, 0x55, 0xff, 0x03, 0xe0, 0x02, 0x98, + 0xf8, 0xf7, 0xeb, 0xf8, 0x01, 0x30, 0x20, 0x60, + 0x04, 0xe0, 0x05, 0x21, 0x87, 0x20, 0xf8, 0xf7, + 0x34, 0xfe, 0x00, 0x25, 0x20, 0x68, 0x80, 0x28, + 0x04, 0xd9, 0x06, 0x21, 0x87, 0x20, 0xf8, 0xf7, + 0x2c, 0xfe, 0x3c, 0x00, 0x4c, 0x86, 0x00, 0x00, + 0x00, 0x25, 0x28, 0x1c, 0x05, 0xb0, 0xf0, 0xbd, + 0x70, 0xb5, 0x17, 0x4c, 0x60, 0x6c, 0x00, 0x28, + 0x01, 0xd0, 0x01, 0x20, 0x1d, 0xe0, 0x16, 0x4e, + 0x14, 0x4d, 0x31, 0x88, 0xa0, 0x6c, 0x00, 0x28, + 0x08, 0xd0, 0x28, 0x78, 0x81, 0x42, 0x05, 0xd9, + 0xf8, 0xf7, 0x4c, 0xf8, 0x01, 0x38, 0xfa, 0xf7, + 0x51, 0xfe, 0x0e, 0xe0, 0xe0, 0x6c, 0x00, 0x28, + 0x0a, 0xd0, 0x00, 0x20, 0x3c, 0x00, 0x88, 0x86, + 0x00, 0x00, 0xfa, 0xf7, 0x4a, 0xfe, 0x29, 0x78, + 0x32, 0x88, 0x91, 0x42, 0x04, 0xd9, 0x90, 0x42, + 0x02, 0xd9, 0x10, 0x1c, 0x00, 0xe0, 0x08, 0x1c, + 0xfa, 0xf7, 0xdf, 0xfd, 0xe1, 0x6b, 0x44, 0x1a, + 0x0a, 0xf0, 0x81, 0xfb, 0x20, 0x1a, 0x00, 0xd5, + 0x00, 0x20, 0x70, 0xbd, 0x00, 0x00, 0x44, 0x7d, + 0x01, 0x00, 0xf8, 0x60, 0x01, 0x00, 0xfc, 0x60, + 0x01, 0x00, 0xff, 0xb5, 0x27, 0x4e, 0x3c, 0x00, + 0xc4, 0x86, 0x00, 0x00, 0x04, 0x1c, 0xb0, 0x79, + 0x0f, 0x1c, 0x15, 0x1c, 0x81, 0xb0, 0x00, 0x90, + 0x0a, 0xf0, 0x6c, 0xfb, 0xc1, 0x19, 0x23, 0x48, + 0x07, 0x68, 0x00, 0x2f, 0x05, 0xd1, 0x0a, 0x21, + 0x80, 0x20, 0xf8, 0xf7, 0xdf, 0xfd, 0x05, 0xb0, + 0xf0, 0xbd, 0x1e, 0x48, 0x40, 0x68, 0x84, 0x46, + 0x00, 0x28, 0x01, 0xd1, 0x00, 0x22, 0x0e, 0xe0, + 0x82, 0x68, 0x03, 0x68, 0xab, 0x42, 0x07, 0xd1, + 0x3c, 0x00, 0x00, 0x87, 0x00, 0x00, 0x03, 0x79, + 0xa3, 0x42, 0x04, 0xd1, 0x0b, 0x21, 0x80, 0x20, + 0xf8, 0xf7, 0xcb, 0xfd, 0x23, 0xe0, 0xc0, 0x68, + 0x00, 0x28, 0xf1, 0xd1, 0x13, 0x4b, 0xf8, 0x68, + 0x18, 0x60, 0x3d, 0x60, 0x3c, 0x71, 0xb9, 0x60, + 0x04, 0x98, 0x8d, 0x1a, 0x38, 0x61, 0x60, 0x46, + 0x00, 0x23, 0x05, 0xe0, 0x84, 0x68, 0xa4, 0x1a, + 0xac, 0x42, 0x03, 0xda, 0x03, 0x1c, 0xc0, 0x68, + 0x00, 0x28, 0x3c, 0x00, 0x3c, 0x87, 0x00, 0x00, + 0xf7, 0xd1, 0xf8, 0x60, 0x00, 0x2b, 0x08, 0xd1, + 0x07, 0x48, 0x3b, 0x1c, 0x47, 0x60, 0x08, 0x48, + 0x06, 0x4a, 0x00, 0x88, 0x0a, 0xf0, 0x8a, 0xfb, + 0x00, 0xe0, 0xdf, 0x60, 0x00, 0x98, 0xb0, 0x71, + 0xc3, 0xe7, 0x00, 0x00, 0x20, 0x10, 0x07, 0x00, + 0x7c, 0x5d, 0x01, 0x00, 0x21, 0x38, 0x01, 0x00, + 0x2c, 0x74, 0x01, 0x00, 0xf3, 0xb5, 0x83, 0xb0, + 0x04, 0x1c, 0x09, 0xd0, 0x3c, 0x00, 0x78, 0x87, + 0x00, 0x00, 0x20, 0x1c, 0x04, 0x99, 0x09, 0xf0, + 0x8e, 0xfb, 0x00, 0x28, 0x03, 0xd0, 0x20, 0x1c, + 0x30, 0x30, 0x05, 0xb0, 0xf0, 0xbd, 0x0a, 0xf0, + 0x0e, 0xfb, 0x1e, 0x4a, 0x00, 0x26, 0x04, 0x9f, + 0x01, 0x96, 0x00, 0x90, 0x02, 0x92, 0x02, 0x9c, + 0x00, 0x25, 0x39, 0x1c, 0x20, 0x1c, 0x14, 0x30, + 0x02, 0xf0, 0xc5, 0xfa, 0x00, 0x28, 0x01, 0xd0, + 0x26, 0x1c, 0x03, 0xe0, 0x01, 0x35, 0x3c, 0x00, + 0xb4, 0x87, 0x00, 0x00, 0x1c, 0x34, 0x04, 0x2d, + 0xf2, 0xd3, 0x00, 0x2e, 0x22, 0xd1, 0x01, 0x98, + 0x13, 0x4f, 0x01, 0x30, 0x01, 0x90, 0x02, 0x28, + 0xe8, 0xd3, 0x01, 0x21, 0xc9, 0x06, 0x02, 0x9a, + 0x00, 0x20, 0x13, 0x69, 0x00, 0x9c, 0xe3, 0x1a, + 0x8b, 0x42, 0x01, 0xdd, 0x19, 0x1c, 0x16, 0x1c, + 0x01, 0x30, 0x1c, 0x32, 0x04, 0x28, 0xf4, 0xd3, + 0x30, 0x68, 0x00, 0x28, 0x01, 0xd0, 0xf8, 0xf7, + 0x3c, 0x00, 0xf0, 0x87, 0x00, 0x00, 0xd3, 0xfe, + 0x30, 0x1c, 0xfd, 0xf7, 0x4a, 0xff, 0x30, 0x1c, + 0x14, 0x30, 0x06, 0x22, 0x04, 0x99, 0xf7, 0xf7, + 0x7a, 0xfe, 0x00, 0x9c, 0x30, 0x1c, 0x34, 0x61, + 0xbd, 0xe7, 0x30, 0x6a, 0x01, 0x00, 0x34, 0x42, + 0x01, 0x00, 0x09, 0x49, 0x10, 0xb5, 0x4c, 0x69, + 0x03, 0xe0, 0xe1, 0x68, 0x81, 0x42, 0x03, 0xd0, + 0x24, 0x68, 0x00, 0x2c, 0xf9, 0xd1, 0x01, 0xe0, + 0x00, 0x2c, 0x3c, 0x00, 0x2c, 0x88, 0x00, 0x00, + 0x03, 0xd1, 0x02, 0x21, 0x02, 0x20, 0xf8, 0xf7, + 0x37, 0xfd, 0x20, 0x1c, 0x10, 0xbd, 0x00, 0x00, + 0xfc, 0x5a, 0x01, 0x00, 0x10, 0xb5, 0xc3, 0x07, + 0x06, 0xd5, 0x08, 0x4b, 0x5c, 0x69, 0x0c, 0x43, + 0x5c, 0x61, 0x1c, 0x7e, 0x14, 0x43, 0x1c, 0x76, + 0x80, 0x07, 0x06, 0xd5, 0x04, 0x48, 0x43, 0x69, + 0x19, 0x43, 0x41, 0x61, 0x01, 0x7e, 0x11, 0x43, + 0x01, 0x76, 0x10, 0xbd, 0x3c, 0x00, 0x68, 0x88, + 0x00, 0x00, 0xfc, 0x57, 0x01, 0x00, 0x18, 0x58, + 0x01, 0x00, 0x70, 0xb5, 0x0d, 0x1c, 0x04, 0x1c, + 0x16, 0x1c, 0x00, 0xf0, 0x08, 0xf8, 0xa0, 0x07, + 0xc0, 0x17, 0x01, 0x30, 0x32, 0x1c, 0x29, 0x1c, + 0x00, 0xf0, 0x21, 0xf8, 0x70, 0xbd, 0x10, 0xb5, + 0xc3, 0x07, 0x06, 0xd5, 0x08, 0x4b, 0x5c, 0x69, + 0x8c, 0x43, 0x5c, 0x61, 0x1c, 0x7e, 0x94, 0x43, + 0x1c, 0x76, 0x80, 0x07, 0x06, 0xd5, 0x3c, 0x00, + 0xa4, 0x88, 0x00, 0x00, 0x04, 0x48, 0x43, 0x69, + 0x8b, 0x43, 0x43, 0x61, 0x01, 0x7e, 0x91, 0x43, + 0x01, 0x76, 0x10, 0xbd, 0xfc, 0x57, 0x01, 0x00, + 0x18, 0x58, 0x01, 0x00, 0x03, 0x22, 0x11, 0x1f, + 0x80, 0xb5, 0x01, 0x20, 0x00, 0xf0, 0x02, 0xf8, + 0x80, 0xbd, 0x00, 0x00, 0x30, 0xb5, 0x15, 0x1c, + 0x0c, 0x1c, 0x00, 0x28, 0x87, 0xb0, 0x02, 0xd0, + 0x1c, 0x22, 0x22, 0x49, 0x01, 0xe0, 0x22, 0x49, + 0x3c, 0x00, 0xe0, 0x88, 0x00, 0x00, 0x1c, 0x22, + 0x68, 0x46, 0xf7, 0xf7, 0x64, 0xfe, 0x05, 0x99, + 0x00, 0xab, 0x1a, 0x7e, 0x8c, 0x43, 0x20, 0x1c, + 0x95, 0x43, 0x02, 0x9a, 0x29, 0x1c, 0x02, 0x40, + 0x02, 0x92, 0x01, 0x9a, 0x02, 0x40, 0x01, 0x92, + 0x00, 0x9a, 0x02, 0x40, 0x00, 0x92, 0x03, 0x9a, + 0x02, 0x40, 0x03, 0x92, 0x98, 0x7c, 0x08, 0x40, + 0x98, 0x74, 0x58, 0x7c, 0x08, 0x40, 0x58, 0x74, + 0x18, 0x7c, 0x3c, 0x00, 0x1c, 0x89, 0x00, 0x00, + 0x08, 0x40, 0x18, 0x74, 0xd8, 0x7c, 0x08, 0x40, + 0xd8, 0x74, 0x02, 0x99, 0x10, 0x48, 0x41, 0x61, + 0x01, 0xaa, 0x06, 0xca, 0x91, 0x43, 0x81, 0x61, + 0x81, 0x68, 0x01, 0x9a, 0x11, 0x43, 0x81, 0x60, + 0x81, 0x68, 0x00, 0x9a, 0x91, 0x43, 0x81, 0x60, + 0x00, 0xaa, 0x06, 0xca, 0x11, 0x43, 0x42, 0x68, + 0x11, 0x43, 0x41, 0x60, 0x41, 0x68, 0x03, 0x9a, + 0x91, 0x43, 0x41, 0x60, 0x3c, 0x00, 0x58, 0x89, + 0x00, 0x00, 0x04, 0xa8, 0x0b, 0xf0, 0x01, 0xf8, + 0x07, 0xb0, 0x30, 0xbd, 0x00, 0x00, 0xfc, 0x57, + 0x01, 0x00, 0x18, 0x58, 0x01, 0x00, 0x10, 0x00, + 0x07, 0x00, 0x10, 0xb5, 0x04, 0x1c, 0x01, 0x1c, + 0x01, 0x20, 0x08, 0xf0, 0xe0, 0xf9, 0x00, 0x2c, + 0x02, 0xd0, 0x03, 0xf0, 0x1c, 0xff, 0x10, 0xbd, + 0xfe, 0xf7, 0xd1, 0xfc, 0x10, 0xbd, 0xf0, 0xb5, + 0x0c, 0x1c, 0x01, 0x0e, 0x01, 0x23, 0x3c, 0x00, + 0x94, 0x89, 0x00, 0x00, 0x1b, 0x06, 0x09, 0x06, + 0x99, 0x42, 0x9f, 0xb0, 0x28, 0xd1, 0x17, 0x49, + 0x08, 0x40, 0x00, 0x21, 0x1a, 0x28, 0x00, 0xd3, + 0x02, 0x21, 0x00, 0x29, 0x19, 0xd1, 0xc5, 0x00, + 0x13, 0x4f, 0x10, 0xa8, 0xee, 0x19, 0xb2, 0x88, + 0x21, 0x68, 0xf7, 0xf7, 0x9d, 0xfd, 0x20, 0x1c, + 0xf8, 0xf7, 0xea, 0xfd, 0x7a, 0x59, 0x01, 0xa9, + 0x10, 0xa8, 0xf7, 0xf7, 0x07, 0xfd, 0x00, 0x28, + 0x3c, 0x00, 0xd0, 0x89, 0x00, 0x00, 0x05, 0xd0, + 0x10, 0x98, 0x01, 0xa9, 0x01, 0x90, 0xb0, 0x79, + 0x00, 0xf0, 0x9d, 0xf8, 0x1f, 0xb0, 0xf0, 0xbd, + 0x2a, 0x20, 0xf8, 0xf7, 0x5e, 0xfc, 0x20, 0x1c, + 0xf8, 0xf7, 0xd5, 0xfd, 0xf6, 0xe7, 0x03, 0x21, + 0x2a, 0x20, 0xf8, 0xf7, 0x56, 0xfc, 0xf1, 0xe7, + 0x00, 0x00, 0x7f, 0xff, 0xff, 0x00, 0x24, 0x45, + 0x01, 0x00, 0x10, 0xb5, 0x0c, 0x1c, 0x80, 0x28, + 0x02, 0xd0, 0x3c, 0x00, 0x0c, 0x8a, 0x00, 0x00, + 0x81, 0x28, 0x08, 0xd1, 0x03, 0xe0, 0x20, 0x1c, + 0x00, 0xf0, 0x06, 0xf9, 0x10, 0xbd, 0x20, 0x1c, + 0xf8, 0xf7, 0xbc, 0xfd, 0x10, 0xbd, 0x03, 0x21, + 0x2c, 0x20, 0xf8, 0xf7, 0x3d, 0xfc, 0xf6, 0xe7, + 0xf0, 0xb5, 0x0c, 0x1c, 0x00, 0x21, 0x8b, 0xb0, + 0x0a, 0x91, 0x01, 0x0e, 0x01, 0x23, 0x1b, 0x06, + 0x09, 0x06, 0x99, 0x42, 0x2a, 0xd1, 0x18, 0x49, + 0x08, 0x40, 0x06, 0x1c, 0x3c, 0x00, 0x48, 0x8a, + 0x00, 0x00, 0x06, 0x2e, 0x01, 0xd3, 0x07, 0x21, + 0x24, 0xe0, 0x20, 0x89, 0xf8, 0xf7, 0xf1, 0xfe, + 0x22, 0x89, 0x21, 0x68, 0x05, 0x1c, 0xf7, 0xf7, + 0x4c, 0xfd, 0x20, 0x1c, 0xf8, 0xf7, 0x99, 0xfd, + 0xf4, 0x00, 0x0f, 0x4e, 0x28, 0x1c, 0x0a, 0xaa, + 0x69, 0x46, 0x33, 0x59, 0xf7, 0xf7, 0xb4, 0xfc, + 0x00, 0x28, 0x01, 0xd0, 0x01, 0x28, 0x07, 0xd1, + 0x28, 0x68, 0x69, 0x46, 0x00, 0x90, 0x3c, 0x00, + 0x84, 0x8a, 0x00, 0x00, 0xa0, 0x19, 0x00, 0x79, + 0x0a, 0x9a, 0x00, 0xf0, 0x09, 0xf9, 0x28, 0x1c, + 0xf8, 0xf7, 0xb0, 0xfe, 0x0b, 0xb0, 0xf0, 0xbd, + 0x01, 0x21, 0x2b, 0x20, 0xf8, 0xf7, 0x02, 0xfc, + 0xf8, 0xe7, 0x00, 0x00, 0x7f, 0xff, 0xff, 0x00, + 0x28, 0x46, 0x01, 0x00, 0x0a, 0x1c, 0x01, 0x0e, + 0x01, 0x23, 0x1b, 0x06, 0x09, 0x06, 0x99, 0x42, + 0x80, 0xb5, 0x08, 0xd0, 0x5b, 0x00, 0x99, 0x42, + 0x3c, 0x00, 0xc0, 0x8a, 0x00, 0x00, 0x0b, 0xd1, + 0x00, 0x06, 0x00, 0x0e, 0x11, 0x1c, 0x00, 0xf0, + 0x0e, 0xf9, 0x80, 0xbd, 0x05, 0x49, 0x01, 0x40, + 0x10, 0x1c, 0x05, 0xf0, 0xa2, 0xf9, 0x80, 0xbd, + 0x01, 0x21, 0x2d, 0x20, 0xf8, 0xf7, 0xe1, 0xfb, + 0x80, 0xbd, 0x7f, 0xff, 0xff, 0x00, 0x80, 0xb5, + 0x01, 0x1c, 0x0f, 0x20, 0x00, 0xf0, 0x13, 0xf8, + 0x80, 0xbd, 0x80, 0xb5, 0x01, 0x1c, 0x04, 0x20, + 0x00, 0xf0, 0x3c, 0x00, 0xfc, 0x8a, 0x00, 0x00, + 0x0d, 0xf8, 0x80, 0xbd, 0x80, 0xb5, 0x01, 0x1c, + 0x17, 0x20, 0x00, 0xf0, 0x07, 0xf8, 0x80, 0xbd, + 0x80, 0xb5, 0x01, 0x1c, 0x01, 0x20, 0x00, 0xf0, + 0x01, 0xf8, 0x80, 0xbd, 0xf8, 0xb5, 0x04, 0x1c, + 0x06, 0x1c, 0x80, 0x20, 0x84, 0x43, 0x0f, 0x1c, + 0x19, 0x2c, 0x01, 0xd3, 0xf8, 0xf7, 0xea, 0xfb, + 0x08, 0x48, 0x04, 0x5d, 0x21, 0x1c, 0x00, 0x20, + 0xf8, 0xf7, 0x50, 0xfd, 0x3c, 0x00, 0x38, 0x8b, + 0x00, 0x00, 0x05, 0x1c, 0x22, 0x1c, 0x39, 0x1c, + 0x00, 0x68, 0xf7, 0xf7, 0xda, 0xfc, 0x2a, 0x1c, + 0x31, 0x1c, 0x07, 0x20, 0xf8, 0xf7, 0x11, 0xf9, + 0xf8, 0xbd, 0xf4, 0x45, 0x01, 0x00, 0xf8, 0xb5, + 0x0d, 0x1c, 0x16, 0x1c, 0x04, 0x1c, 0x1f, 0x1c, + 0x08, 0x21, 0x00, 0x20, 0xf8, 0xf7, 0x39, 0xfd, + 0x14, 0x22, 0x01, 0x68, 0x0e, 0x4b, 0x72, 0x43, + 0xd2, 0x18, 0x0c, 0x71, 0x12, 0x7c, 0x3c, 0x00, + 0x74, 0x8b, 0x00, 0x00, 0x4a, 0x71, 0x0d, 0x60, + 0x0b, 0x4a, 0x8f, 0x71, 0x12, 0x68, 0x7f, 0x2a, + 0x03, 0xd9, 0x52, 0x05, 0x52, 0x0e, 0x80, 0x23, + 0x1a, 0x43, 0xca, 0x71, 0x07, 0x4a, 0x00, 0x23, + 0x51, 0x68, 0x01, 0x31, 0x51, 0x60, 0x02, 0x1c, + 0x81, 0x21, 0x00, 0x20, 0xf8, 0xf7, 0x08, 0xf9, + 0xf8, 0xbd, 0x00, 0x00, 0x74, 0x40, 0x01, 0x00, + 0xfc, 0x5a, 0x01, 0x00, 0x80, 0x6e, 0x01, 0x00, + 0x3c, 0x00, 0xb0, 0x8b, 0x00, 0x00, 0xb0, 0xb5, + 0x04, 0x1c, 0x08, 0x21, 0x00, 0x20, 0xf8, 0xf7, + 0x0e, 0xfd, 0x21, 0x8b, 0xe2, 0x7d, 0x05, 0x1c, + 0x09, 0x05, 0x52, 0x07, 0x52, 0x0f, 0x49, 0x0c, + 0x00, 0x68, 0x11, 0x43, 0x81, 0x80, 0xa1, 0x7d, + 0x14, 0x23, 0x0e, 0x4a, 0x59, 0x43, 0x89, 0x18, + 0x09, 0x7c, 0xc1, 0x71, 0xe1, 0x6a, 0x01, 0x60, + 0xe1, 0x68, 0x28, 0x1c, 0xf8, 0xf7, 0x17, 0xfc, + 0x0a, 0x48, 0x3c, 0x00, 0xec, 0x8b, 0x00, 0x00, + 0x00, 0x68, 0x00, 0x28, 0x01, 0xd0, 0xf7, 0xf7, + 0xf1, 0xfb, 0x07, 0x49, 0x04, 0x31, 0x88, 0x68, + 0x01, 0x30, 0x88, 0x60, 0x00, 0x21, 0x2a, 0x1c, + 0x00, 0x20, 0x23, 0x6b, 0xf8, 0xf7, 0xd2, 0xf8, + 0x01, 0x20, 0xb0, 0xbd, 0x74, 0x40, 0x01, 0x00, + 0x7c, 0x6e, 0x01, 0x00, 0x01, 0x48, 0x80, 0x68, + 0x70, 0x47, 0x00, 0x00, 0x80, 0x6e, 0x01, 0x00, + 0x10, 0xb5, 0x04, 0x1c, 0x3c, 0x00, 0x28, 0x8c, + 0x00, 0x00, 0x92, 0xb0, 0x01, 0x68, 0x68, 0x46, + 0x08, 0x22, 0xf7, 0xf7, 0x62, 0xfc, 0x00, 0xab, + 0x98, 0x88, 0x40, 0x07, 0x40, 0x0f, 0xd8, 0x77, + 0x98, 0x88, 0x40, 0x04, 0x00, 0x0d, 0x18, 0x84, + 0xd8, 0x88, 0x58, 0x84, 0x00, 0x98, 0x0d, 0x90, + 0x05, 0x94, 0x20, 0x89, 0x08, 0x38, 0x20, 0x81, + 0x05, 0x98, 0x01, 0x68, 0x08, 0x31, 0x01, 0x60, + 0x00, 0x20, 0x0a, 0x90, 0x0c, 0x90, 0x3c, 0x00, + 0x64, 0x8c, 0x00, 0x00, 0x00, 0x21, 0x11, 0x20, + 0x09, 0xf0, 0x78, 0xfb, 0x05, 0x49, 0x06, 0x4a, + 0x08, 0x68, 0x01, 0x30, 0x08, 0x60, 0x02, 0x21, + 0x02, 0xa8, 0x01, 0xf0, 0xcd, 0xfc, 0x12, 0xb0, + 0x10, 0xbd, 0x00, 0x00, 0x80, 0x6e, 0x01, 0x00, + 0x55, 0x8b, 0x00, 0x00, 0x02, 0x1c, 0x01, 0x20, + 0x00, 0x06, 0x08, 0x43, 0x80, 0xb5, 0x2b, 0x21, + 0x0a, 0xf0, 0x8a, 0xfd, 0x80, 0xbd, 0x00, 0x00, + 0x3c, 0x00, 0xa0, 0x8c, 0x00, 0x00, 0xf7, 0xb5, + 0x04, 0x1c, 0x06, 0x1c, 0x80, 0x20, 0x84, 0x43, + 0x17, 0x1c, 0x06, 0x2c, 0x01, 0xd3, 0xf8, 0xf7, + 0x26, 0xfb, 0x0b, 0x48, 0x05, 0x5d, 0x29, 0x1c, + 0x00, 0x20, 0xf8, 0xf7, 0x8c, 0xfc, 0x04, 0x1c, + 0x00, 0x68, 0x01, 0x99, 0x2a, 0x1c, 0xf7, 0xf7, + 0x16, 0xfc, 0x39, 0x1c, 0x20, 0x1c, 0xf8, 0xf7, + 0xa2, 0xfb, 0x22, 0x1c, 0x31, 0x1c, 0x00, 0x23, + 0x02, 0x20, 0x3c, 0x00, 0xdc, 0x8c, 0x00, 0x00, + 0xf8, 0xf7, 0x68, 0xf8, 0xfe, 0xbd, 0x00, 0x00, + 0x20, 0x46, 0x01, 0x00, 0x0a, 0x1c, 0x01, 0x1c, + 0x80, 0xb5, 0x00, 0x23, 0x01, 0x20, 0xf8, 0xf7, + 0x5d, 0xf8, 0x80, 0xbd, 0xff, 0xb5, 0x9f, 0xb0, + 0x1f, 0x1c, 0x05, 0x1c, 0x0a, 0x30, 0x1e, 0x90, + 0x1c, 0xaa, 0x1d, 0xa9, 0x0a, 0xf0, 0x00, 0xff, + 0x00, 0x28, 0x71, 0xd0, 0x00, 0x2f, 0x09, 0xd0, + 0x0a, 0x21, 0x00, 0x20, 0x3c, 0x00, 0x18, 0x8d, + 0x00, 0x00, 0xf8, 0xf7, 0x5e, 0xfc, 0x06, 0x68, + 0x04, 0x1c, 0x30, 0x1d, 0xfa, 0xf7, 0xaf, 0xfa, + 0x05, 0xe0, 0x04, 0x21, 0x00, 0x20, 0xf8, 0xf7, + 0x54, 0xfc, 0x06, 0x68, 0x04, 0x1c, 0x28, 0x89, + 0x36, 0x49, 0x01, 0x22, 0x08, 0x80, 0x70, 0x80, + 0xe8, 0x88, 0x14, 0xa9, 0x30, 0x80, 0x19, 0xa8, + 0xfc, 0xf7, 0xf5, 0xfc, 0xfc, 0xf7, 0xff, 0xfb, + 0x01, 0x1c, 0xff, 0x31, 0x21, 0x31, 0x3c, 0x00, + 0x54, 0x8d, 0x00, 0x00, 0x20, 0x1c, 0x01, 0xf0, + 0xef, 0xf8, 0x19, 0xa9, 0x20, 0x1c, 0x01, 0xf0, + 0xeb, 0xf8, 0x14, 0xa9, 0x20, 0x1c, 0x01, 0xf0, + 0xe7, 0xf8, 0x20, 0x1c, 0x20, 0x99, 0xfd, 0xf7, + 0x4b, 0xfd, 0x00, 0x22, 0x02, 0x21, 0x01, 0xf0, + 0x33, 0xfd, 0x06, 0x1c, 0x1c, 0x99, 0x00, 0x20, + 0x88, 0x61, 0x30, 0x1c, 0xf8, 0xf7, 0x1c, 0xfa, + 0x00, 0x2e, 0x0b, 0xd0, 0x30, 0x7a, 0x00, 0x28, + 0x3c, 0x00, 0x90, 0x8d, 0x00, 0x00, 0x02, 0xd0, + 0x40, 0x21, 0x08, 0x43, 0x30, 0x72, 0x1c, 0x98, + 0x02, 0x22, 0x81, 0x69, 0x11, 0x43, 0x81, 0x61, + 0x04, 0xe0, 0x1c, 0x99, 0x02, 0x22, 0x88, 0x69, + 0x90, 0x43, 0x88, 0x61, 0x1d, 0xaa, 0x06, 0xca, + 0x01, 0xa8, 0x05, 0xf0, 0x58, 0xfb, 0x09, 0xa8, + 0x00, 0x2f, 0x02, 0xd0, 0x02, 0x22, 0x42, 0x72, + 0x01, 0xe0, 0x00, 0x21, 0x41, 0x72, 0x04, 0x94, + 0x01, 0xa8, 0x3c, 0x00, 0xcc, 0x8d, 0x00, 0x00, + 0x04, 0xf0, 0x7a, 0xfb, 0x01, 0x21, 0x1c, 0x98, + 0x08, 0xf0, 0xc8, 0xff, 0x00, 0x2f, 0x04, 0xd0, + 0x1c, 0x98, 0x01, 0x22, 0x81, 0x69, 0x11, 0x43, + 0x81, 0x61, 0xa8, 0x88, 0x1c, 0x9c, 0x01, 0xf0, + 0x9f, 0xfe, 0x02, 0x1c, 0x21, 0x1c, 0x00, 0xe0, + 0x04, 0xe0, 0x07, 0x48, 0x40, 0x88, 0x09, 0xf0, + 0x1f, 0xf8, 0x04, 0xe0, 0x3a, 0x1c, 0x00, 0x21, + 0x05, 0x20, 0xf9, 0xf7, 0x3c, 0x00, 0x08, 0x8e, + 0x00, 0x00, 0x9b, 0xf8, 0x00, 0x20, 0x23, 0xb0, + 0xf0, 0xbd, 0xfc, 0x60, 0x01, 0x00, 0x98, 0x7c, + 0x01, 0x00, 0xf8, 0xb5, 0x04, 0x1c, 0xc0, 0x68, + 0x05, 0x68, 0xa0, 0x1d, 0x01, 0xf0, 0x95, 0xff, + 0x00, 0x28, 0x45, 0xd0, 0x21, 0x1c, 0x14, 0x31, + 0x20, 0x1c, 0x6a, 0x46, 0x0a, 0xf0, 0x55, 0xfe, + 0x00, 0x28, 0x3d, 0xd0, 0xfc, 0xf7, 0x7d, 0xfa, + 0x00, 0x28, 0x39, 0xd1, 0x00, 0x98, 0x3c, 0x00, + 0x44, 0x8e, 0x00, 0x00, 0x4b, 0x21, 0x09, 0x5c, + 0x01, 0x29, 0x34, 0xd1, 0x04, 0x26, 0x09, 0xf0, + 0x19, 0xf9, 0x68, 0x88, 0x00, 0x28, 0x1b, 0xd1, + 0xa8, 0x88, 0x03, 0x21, 0x89, 0x03, 0x88, 0x43, + 0x15, 0x49, 0x00, 0x26, 0x08, 0x80, 0x01, 0x22, + 0x02, 0x21, 0x20, 0x69, 0x01, 0xf0, 0xb8, 0xfc, + 0x04, 0x1c, 0x14, 0xd0, 0x00, 0x98, 0x80, 0x69, + 0x80, 0x07, 0x10, 0xd5, 0xf8, 0xf7, 0x9a, 0xf9, + 0x3c, 0x00, 0x80, 0x8e, 0x00, 0x00, 0x20, 0x1c, + 0xf8, 0xf7, 0xdd, 0xf8, 0x00, 0x28, 0x09, 0xd1, + 0xf8, 0xf7, 0x7f, 0xf9, 0x01, 0x26, 0x00, 0x98, + 0x02, 0x22, 0x81, 0x69, 0x91, 0x43, 0x81, 0x61, + 0x00, 0x21, 0x01, 0xe0, 0x00, 0x98, 0x02, 0x21, + 0x08, 0xf0, 0x61, 0xff, 0x00, 0x98, 0x80, 0x69, + 0xa9, 0x88, 0xc2, 0x07, 0xd2, 0x0f, 0x30, 0x1c, + 0xf9, 0xf7, 0x45, 0xf8, 0xf8, 0xbd, 0xfa, 0x60, + 0x01, 0x00, 0x3c, 0x00, 0xbc, 0x8e, 0x00, 0x00, + 0x1c, 0xb5, 0x04, 0x69, 0x00, 0x23, 0x00, 0x22, + 0x00, 0x2c, 0x13, 0xd1, 0x4b, 0x24, 0x24, 0x5c, + 0x02, 0x2c, 0x03, 0xd1, 0x02, 0x29, 0x05, 0xd0, + 0x01, 0x22, 0x03, 0xe0, 0x02, 0x29, 0x01, 0xd1, + 0x01, 0x22, 0x01, 0x23, 0x00, 0x2a, 0x05, 0xd0, + 0x00, 0x90, 0x04, 0x20, 0x01, 0x93, 0x69, 0x46, + 0x09, 0xf0, 0x36, 0xfa, 0x1c, 0xbd, 0x00, 0x00, + 0xb0, 0xb5, 0x04, 0x1c, 0x3c, 0x00, 0xf8, 0x8e, + 0x00, 0x00, 0xf2, 0x21, 0x0f, 0x20, 0x0c, 0x4d, + 0x0a, 0xf0, 0x99, 0xfb, 0x28, 0x78, 0x08, 0x28, + 0x0b, 0xd2, 0x01, 0xa3, 0x1b, 0x5c, 0x5b, 0x00, + 0x9f, 0x44, 0x07, 0x03, 0x03, 0x08, 0x08, 0x08, + 0x08, 0x08, 0x00, 0x2c, 0x01, 0xd1, 0x05, 0xf0, + 0xbc, 0xfb, 0xb0, 0xbd, 0x01, 0x2c, 0xfc, 0xd1, + 0xff, 0x20, 0x07, 0xf0, 0x38, 0xfa, 0xb0, 0xbd, + 0x00, 0x00, 0x74, 0x66, 0x01, 0x00, 0x3c, 0x00, + 0x34, 0x8f, 0x00, 0x00, 0x8c, 0xb5, 0x05, 0x4a, + 0x00, 0xab, 0x11, 0x72, 0x00, 0x90, 0x19, 0x71, + 0x69, 0x46, 0x08, 0x20, 0x09, 0xf0, 0x0a, 0xfa, + 0x8c, 0xbd, 0x00, 0x00, 0xac, 0x7c, 0x01, 0x00, + 0xf3, 0xb5, 0x04, 0x1c, 0xc0, 0x68, 0x06, 0x27, + 0x85, 0xb0, 0x06, 0x68, 0x09, 0xf0, 0x26, 0xff, + 0x98, 0x49, 0x48, 0x63, 0x20, 0x69, 0x03, 0x21, + 0x01, 0xf0, 0x08, 0xfc, 0x96, 0x4d, 0x00, 0x28, + 0x3c, 0x00, 0x70, 0x8f, 0x00, 0x00, 0x4d, 0xd0, + 0x95, 0x49, 0x40, 0x31, 0x09, 0x79, 0x80, 0x78, + 0x81, 0x42, 0x47, 0xd1, 0x01, 0x21, 0x20, 0x69, + 0x01, 0xf0, 0xfb, 0xfb, 0x02, 0x90, 0x20, 0x69, + 0x32, 0x21, 0x01, 0xf0, 0xf6, 0xfb, 0x01, 0x90, + 0x02, 0x1c, 0x8d, 0x48, 0x02, 0x99, 0xfc, 0xf7, + 0x46, 0xff, 0x00, 0x28, 0x36, 0xd0, 0x00, 0x23, + 0x8a, 0x48, 0x02, 0x99, 0x01, 0x9a, 0xfc, 0xf7, + 0xe4, 0xfe, 0x3c, 0x00, 0xac, 0x8f, 0x00, 0x00, + 0x0b, 0x28, 0x2e, 0xd1, 0x86, 0x4a, 0x51, 0x88, + 0x70, 0x89, 0x41, 0x40, 0x03, 0x91, 0x0b, 0x1c, + 0x84, 0x49, 0x0b, 0x40, 0x25, 0xd1, 0x50, 0x80, + 0x03, 0x99, 0x17, 0x1c, 0x00, 0x29, 0x0b, 0xd0, + 0x03, 0x99, 0x48, 0x05, 0x02, 0xd5, 0x38, 0x1c, + 0xfc, 0xf7, 0x40, 0xfe, 0x03, 0x99, 0x88, 0x06, + 0x02, 0xd5, 0x38, 0x1c, 0xfc, 0xf7, 0x24, 0xfe, + 0x2a, 0x21, 0x20, 0x69, 0x3c, 0x00, 0xe8, 0x8f, + 0x00, 0x00, 0x01, 0xf0, 0xc8, 0xfb, 0x00, 0x28, + 0x0d, 0xd0, 0x80, 0x78, 0xe9, 0x69, 0x81, 0x42, + 0x09, 0xd0, 0xe8, 0x61, 0x38, 0x1c, 0xfc, 0xf7, + 0x16, 0xfe, 0x38, 0x1c, 0xfc, 0xf7, 0x07, 0xfe, + 0x38, 0x1c, 0xfc, 0xf7, 0x26, 0xfe, 0x00, 0x27, + 0x20, 0x1c, 0x20, 0x30, 0x04, 0x90, 0x40, 0x7a, + 0x08, 0x28, 0x71, 0xd1, 0x0a, 0xf0, 0xd1, 0xfc, + 0x00, 0x20, 0x68, 0x61, 0x00, 0x23, 0x3c, 0x00, + 0x24, 0x90, 0x00, 0x00, 0x2b, 0x61, 0xa8, 0x68, + 0x66, 0x49, 0x01, 0x30, 0xa8, 0x60, 0x30, 0x89, + 0x5c, 0x31, 0x88, 0x82, 0x01, 0xf0, 0x7a, 0xfd, + 0x62, 0x49, 0x5c, 0x31, 0x08, 0x61, 0x22, 0x6a, + 0x04, 0x98, 0x18, 0x21, 0x00, 0x7a, 0x01, 0xf0, + 0x33, 0xfe, 0xe1, 0x6a, 0x40, 0x18, 0x03, 0x90, + 0x5c, 0x48, 0x00, 0x6a, 0x00, 0x28, 0x0d, 0xd0, + 0x00, 0x2f, 0x0b, 0xd1, 0x59, 0x48, 0x01, 0x23, + 0x3c, 0x00, 0x60, 0x90, 0x00, 0x00, 0x5c, 0x30, + 0x01, 0x68, 0x1b, 0x07, 0x00, 0x22, 0x30, 0x68, + 0x09, 0xf0, 0x49, 0xff, 0x00, 0x28, 0x00, 0xd1, + 0x05, 0x27, 0x00, 0x21, 0xa0, 0x6b, 0x0a, 0xf0, + 0xce, 0xfc, 0x00, 0x21, 0x20, 0x6c, 0x0a, 0xf0, + 0xe8, 0xfc, 0x4f, 0x4b, 0x03, 0xce, 0x03, 0x9a, + 0x5c, 0x33, 0xfc, 0xf7, 0x88, 0xfd, 0x00, 0x20, + 0x4c, 0x4e, 0x05, 0x21, 0xb0, 0x63, 0x20, 0x69, + 0x01, 0xf0, 0x3c, 0x00, 0x9c, 0x90, 0x00, 0x00, + 0x6f, 0xfb, 0x01, 0x1c, 0x01, 0xd1, 0xf0, 0x60, + 0x1c, 0xe0, 0x01, 0x20, 0xf0, 0x60, 0x88, 0x78, + 0x45, 0x4a, 0x01, 0x32, 0x10, 0x70, 0xc8, 0x78, + 0x50, 0x70, 0x47, 0x4a, 0x10, 0x70, 0x30, 0x69, + 0x00, 0x28, 0x0a, 0xd0, 0x4a, 0x78, 0x08, 0x79, + 0x05, 0x31, 0x09, 0xf0, 0xdd, 0xfa, 0x31, 0x69, + 0xf7, 0xf7, 0x85, 0xf9, 0xf0, 0x68, 0x00, 0x28, + 0x04, 0xd0, 0x3b, 0x4a, 0x3c, 0x00, 0xd8, 0x90, + 0x00, 0x00, 0x01, 0x32, 0x10, 0x78, 0x00, 0x28, + 0x08, 0xd1, 0x00, 0x20, 0xa8, 0x61, 0x71, 0x6a, + 0x00, 0x29, 0x03, 0xd0, 0x20, 0x1c, 0x14, 0x30, + 0xf7, 0xf7, 0x74, 0xf9, 0x34, 0x4a, 0x5c, 0x32, + 0x10, 0x69, 0x31, 0x6a, 0x41, 0x18, 0x00, 0xe0, + 0x20, 0xe0, 0x0a, 0x23, 0xd0, 0x68, 0x0a, 0x22, + 0x09, 0xf0, 0xfb, 0xfe, 0x00, 0x28, 0x07, 0xd0, + 0x2d, 0x4a, 0x31, 0x6a, 0x5c, 0x32, 0x3c, 0x00, + 0x14, 0x91, 0x00, 0x00, 0xd0, 0x68, 0x40, 0x1a, + 0x11, 0x69, 0x40, 0x1a, 0x70, 0x60, 0x29, 0x4a, + 0x5c, 0x32, 0xd0, 0x68, 0x30, 0x62, 0xf0, 0x69, + 0x00, 0x28, 0x04, 0xd0, 0xfa, 0xf7, 0x00, 0xfd, + 0x01, 0x20, 0xfa, 0xf7, 0xa1, 0xfc, 0xfa, 0xf7, + 0x81, 0xfc, 0x27, 0x48, 0x00, 0x68, 0x03, 0xf0, + 0x07, 0xf9, 0x06, 0x98, 0x00, 0x28, 0x03, 0xd1, + 0x1e, 0x4e, 0x00, 0x23, 0xb3, 0x60, 0x16, 0xe0, + 0x3c, 0x00, 0x50, 0x91, 0x00, 0x00, 0x1c, 0x4e, + 0x01, 0x20, 0xb0, 0x60, 0x06, 0x98, 0x01, 0x68, + 0x40, 0x68, 0xb0, 0x65, 0x19, 0x48, 0x71, 0x65, + 0x54, 0x30, 0xc0, 0x88, 0x00, 0x28, 0x09, 0xd0, + 0xb1, 0x69, 0x00, 0x29, 0x06, 0xd0, 0x01, 0xf0, + 0xdc, 0xfc, 0x01, 0x1c, 0xe0, 0x6a, 0xb2, 0x69, + 0xf7, 0xf7, 0x2f, 0xf9, 0x00, 0x2f, 0x15, 0xd1, + 0x12, 0x48, 0x01, 0x69, 0x00, 0x29, 0x08, 0xd1, + 0x01, 0x21, 0x3c, 0x00, 0x8c, 0x91, 0x00, 0x00, + 0x01, 0x61, 0x2a, 0x68, 0x00, 0x2a, 0x03, 0xd0, + 0x00, 0x21, 0x00, 0x20, 0xf7, 0xf7, 0x20, 0xf9, + 0x09, 0x49, 0x00, 0x23, 0xcb, 0x62, 0x2b, 0x61, + 0x6b, 0x61, 0x06, 0xf0, 0xb5, 0xf8, 0x07, 0xb0, + 0xf0, 0xbd, 0x6b, 0x68, 0x06, 0x48, 0x00, 0x2b, + 0xf9, 0xd0, 0x02, 0x1d, 0x11, 0x1c, 0x38, 0x1c, + 0xf7, 0xf7, 0x0f, 0xf9, 0xf3, 0xe7, 0x00, 0x00, + 0x44, 0x7d, 0x01, 0x00, 0x3c, 0x00, 0xc8, 0x91, + 0x00, 0x00, 0xf4, 0x68, 0x01, 0x00, 0xf4, 0x67, + 0x01, 0x00, 0x03, 0x08, 0x00, 0x00, 0xf8, 0x60, + 0x01, 0x00, 0xc4, 0x67, 0x01, 0x00, 0x08, 0xb5, + 0xf8, 0xf7, 0x2f, 0xfd, 0x00, 0x90, 0x00, 0xab, + 0x18, 0x88, 0x00, 0x28, 0x0c, 0xd0, 0x05, 0xf0, + 0x50, 0xff, 0x00, 0xab, 0x59, 0x88, 0x18, 0x88, + 0x05, 0xf0, 0x6d, 0xf9, 0xfe, 0xf7, 0x97, 0xf8, + 0x03, 0x20, 0xfb, 0xf7, 0x0e, 0xf8, 0x3c, 0x00, + 0x04, 0x92, 0x00, 0x00, 0x08, 0xbd, 0x01, 0x20, + 0xff, 0xf7, 0xb2, 0xfb, 0x00, 0x20, 0x08, 0xf0, + 0x8d, 0xfe, 0xf7, 0xe7, 0xf8, 0xb5, 0x4f, 0x49, + 0x8c, 0x68, 0x20, 0x6a, 0x00, 0x68, 0x05, 0x78, + 0xfc, 0xf7, 0x68, 0xfa, 0x00, 0x28, 0x12, 0xd0, + 0x2a, 0x07, 0x92, 0x0f, 0x01, 0x21, 0x01, 0x2a, + 0x00, 0xd0, 0x00, 0x21, 0x00, 0x29, 0x03, 0xd0, + 0x29, 0x06, 0x09, 0x0f, 0x0b, 0x29, 0x06, 0xd1, + 0x3c, 0x00, 0x40, 0x92, 0x00, 0x00, 0x2a, 0x21, + 0x09, 0x5d, 0x08, 0x18, 0x90, 0x30, 0x00, 0x7b, + 0xf9, 0xf7, 0x0d, 0xfc, 0x41, 0x4f, 0x3c, 0x3f, + 0xb8, 0x6b, 0x79, 0x6b, 0xf7, 0xf7, 0xc0, 0xf8, + 0xa0, 0x6c, 0x00, 0x26, 0xc6, 0x60, 0x60, 0x6b, + 0x80, 0x08, 0x04, 0xd0, 0xb8, 0x69, 0x01, 0x30, + 0xb8, 0x61, 0x06, 0xf0, 0xdc, 0xf9, 0x39, 0x4d, + 0x28, 0x69, 0x80, 0x05, 0x80, 0x0f, 0x08, 0xd1, + 0x78, 0x69, 0x3c, 0x00, 0x7c, 0x92, 0x00, 0x00, + 0x04, 0x21, 0x01, 0x30, 0x78, 0x61, 0x60, 0x6b, + 0x40, 0x08, 0x40, 0x00, 0x08, 0x43, 0x60, 0x63, + 0xb8, 0x6a, 0x00, 0x28, 0x03, 0xd0, 0x60, 0x6b, + 0x08, 0x21, 0x08, 0x43, 0x60, 0x63, 0x20, 0x1c, + 0x20, 0x30, 0x00, 0x90, 0x39, 0x68, 0xf7, 0xf7, + 0x9a, 0xf8, 0x03, 0x20, 0x00, 0x02, 0x28, 0x60, + 0x2b, 0x49, 0x88, 0x68, 0xa0, 0x63, 0xc8, 0x68, + 0xe0, 0x63, 0x08, 0x79, 0x3c, 0x00, 0xb8, 0x92, + 0x00, 0x00, 0xc0, 0x06, 0xc0, 0x0e, 0x25, 0x1c, + 0x40, 0x35, 0x28, 0x71, 0x48, 0x79, 0x68, 0x71, + 0x23, 0x48, 0x3c, 0x38, 0x46, 0x62, 0x00, 0x98, + 0x80, 0x7a, 0x01, 0xf0, 0x5e, 0xfd, 0x00, 0x21, + 0x00, 0x28, 0x21, 0x4a, 0x01, 0xd0, 0x11, 0x78, + 0x03, 0xe0, 0x93, 0x78, 0xdb, 0x07, 0x00, 0xd5, + 0x51, 0x78, 0xa9, 0x71, 0x00, 0x28, 0x04, 0xd0, + 0x1b, 0x49, 0x14, 0x31, 0x08, 0x68, 0x3c, 0x00, + 0xf4, 0x92, 0x00, 0x00, 0x20, 0x64, 0x00, 0xe0, + 0x6e, 0x80, 0xb8, 0x6a, 0xc0, 0x07, 0x02, 0xd5, + 0xff, 0x20, 0x28, 0x71, 0xae, 0x71, 0xe6, 0x61, + 0xb8, 0x68, 0x01, 0x30, 0xb8, 0x60, 0x79, 0x68, + 0x88, 0x42, 0x03, 0xd0, 0x0b, 0x21, 0x85, 0x20, + 0xf7, 0xf7, 0xc4, 0xff, 0x0d, 0x49, 0x88, 0x68, + 0xc0, 0x6c, 0x88, 0x60, 0xfb, 0x6a, 0x00, 0x2b, + 0x0c, 0xd0, 0x0e, 0x4a, 0xd4, 0x7b, 0x00, 0x2b, + 0x3c, 0x00, 0x30, 0x93, 0x00, 0x00, 0x02, 0xdd, + 0x7f, 0x2c, 0x05, 0xd2, 0x01, 0xe0, 0x00, 0x2c, + 0x02, 0xd0, 0xd4, 0x7b, 0xe3, 0x18, 0xd3, 0x73, + 0xfe, 0x62, 0xc9, 0x68, 0x88, 0x42, 0x03, 0xd1, + 0x05, 0x21, 0x85, 0x20, 0xf7, 0xf7, 0xa9, 0xff, + 0xf8, 0xbd, 0x24, 0x7e, 0x01, 0x00, 0x00, 0x40, + 0x07, 0x00, 0xa0, 0x80, 0x07, 0x00, 0xe8, 0x80, + 0x07, 0x00, 0x40, 0x00, 0x07, 0x00, 0xfe, 0xb5, + 0x30, 0x4c, 0x3c, 0x00, 0x6c, 0x93, 0x00, 0x00, + 0xa0, 0x6b, 0x21, 0x6b, 0xf7, 0xf7, 0x33, 0xf8, + 0x2d, 0x49, 0x3c, 0x31, 0x8e, 0x68, 0x70, 0x8b, + 0x06, 0x28, 0x04, 0xd2, 0xe0, 0x69, 0x01, 0x30, + 0xe0, 0x61, 0x0e, 0x20, 0x30, 0x85, 0x28, 0x49, + 0x3c, 0x31, 0x0d, 0x68, 0x00, 0x2d, 0x03, 0xd1, + 0x03, 0x21, 0x85, 0x20, 0xf7, 0xf7, 0x84, 0xff, + 0x24, 0x48, 0x45, 0x61, 0x35, 0x62, 0x31, 0x8d, + 0xef, 0x68, 0x04, 0x39, 0x3c, 0x00, 0xa8, 0x93, + 0x00, 0x00, 0x0c, 0x04, 0x01, 0x21, 0x02, 0x91, + 0x24, 0x0c, 0x00, 0x21, 0x01, 0x91, 0x1d, 0x48, + 0x3c, 0x30, 0x80, 0x8a, 0xa0, 0x42, 0x03, 0xd3, + 0x2c, 0x81, 0xee, 0x60, 0x00, 0x24, 0x0b, 0xe0, + 0x00, 0x2f, 0x04, 0xd1, 0x03, 0x21, 0x85, 0x20, + 0xf7, 0xf7, 0x69, 0xff, 0x04, 0xe0, 0x3d, 0x1c, + 0x20, 0x1a, 0x04, 0x04, 0xff, 0x68, 0x24, 0x0c, + 0x02, 0x98, 0x00, 0x28, 0x04, 0xd0, 0x3c, 0x00, + 0xe4, 0x93, 0x00, 0x00, 0x12, 0x49, 0x01, 0x20, + 0x08, 0x61, 0x00, 0x20, 0x02, 0x90, 0x01, 0x98, + 0x01, 0x30, 0x01, 0x90, 0x00, 0x2c, 0xdd, 0xd1, + 0x0c, 0x48, 0x0c, 0x4c, 0x3c, 0x30, 0x07, 0x60, + 0x01, 0x98, 0x30, 0x65, 0xb5, 0x64, 0x30, 0x6a, + 0x00, 0x68, 0x60, 0x62, 0x60, 0x68, 0x01, 0x30, + 0x60, 0x60, 0xa1, 0x68, 0x01, 0x31, 0x88, 0x42, + 0x03, 0xd0, 0x0a, 0x21, 0x85, 0x20, 0xf7, 0xf7, + 0x3c, 0x00, 0x20, 0x94, 0x00, 0x00, 0x41, 0xff, + 0x04, 0x48, 0x00, 0x68, 0xa0, 0x62, 0xfe, 0xbd, + 0x00, 0x00, 0xe8, 0x7d, 0x01, 0x00, 0x00, 0x30, + 0x07, 0x00, 0x78, 0x6e, 0x01, 0x00, 0xb0, 0xb5, + 0x05, 0x1c, 0x01, 0x21, 0x0f, 0x20, 0x0a, 0xf0, + 0xf8, 0xf8, 0xf2, 0x21, 0x0f, 0x20, 0x0a, 0xf0, + 0xf4, 0xf8, 0x0c, 0x48, 0x0c, 0x4c, 0x00, 0x68, + 0x14, 0x3c, 0x00, 0x28, 0x0c, 0xd0, 0xe0, 0x78, + 0x01, 0x28, 0x3c, 0x00, 0x5c, 0x94, 0x00, 0x00, + 0x09, 0xd0, 0x01, 0x22, 0x29, 0x1c, 0x0f, 0x20, + 0x0a, 0xf0, 0xac, 0xf8, 0x60, 0x78, 0x02, 0x28, + 0x06, 0xd0, 0x01, 0x20, 0x03, 0xe0, 0x60, 0x78, + 0x02, 0x28, 0x01, 0xd0, 0x00, 0x20, 0x60, 0x70, + 0xb0, 0xbd, 0x00, 0x00, 0x98, 0x66, 0x01, 0x00, + 0x02, 0x22, 0x00, 0x28, 0x80, 0xb5, 0x00, 0xd1, + 0x03, 0x22, 0x03, 0x49, 0x0e, 0x20, 0x0a, 0xf0, + 0x9b, 0xf8, 0x00, 0x20, 0x3c, 0x00, 0x98, 0x94, + 0x00, 0x00, 0x80, 0xbd, 0x00, 0x00, 0x50, 0xc3, + 0x00, 0x00, 0xf8, 0xb5, 0x00, 0x23, 0x00, 0x22, + 0x00, 0x28, 0x2e, 0xd0, 0x06, 0x89, 0x04, 0x68, + 0x75, 0x1e, 0x2d, 0x04, 0xb6, 0x1a, 0xf6, 0x07, + 0x2d, 0x0c, 0xf6, 0x0f, 0xb4, 0x46, 0x0e, 0xe0, + 0xa7, 0x5c, 0xa6, 0x18, 0x02, 0x33, 0x00, 0x97, + 0x77, 0x78, 0xa7, 0x54, 0x02, 0x32, 0x12, 0x04, + 0x00, 0x9f, 0x12, 0x0c, 0x00, 0x29, 0x3c, 0x00, + 0xd4, 0x94, 0x00, 0x00, 0x77, 0x70, 0x01, 0xdd, + 0x8b, 0x42, 0x15, 0xda, 0xaa, 0x42, 0xee, 0xd3, + 0xc0, 0x68, 0x00, 0x28, 0x10, 0xd0, 0x02, 0x89, + 0x00, 0x2a, 0xf9, 0xd0, 0x62, 0x46, 0x00, 0x2a, + 0x0b, 0xd0, 0x02, 0x68, 0x66, 0x5d, 0x17, 0x78, + 0x02, 0x33, 0x67, 0x55, 0x16, 0x70, 0x01, 0x22, + 0x00, 0x29, 0xd2, 0xdd, 0x8b, 0x42, 0xd0, 0xdb, + 0xf8, 0xbd, 0x00, 0x22, 0xcd, 0xe7, 0x00, 0x00, + 0x3c, 0x00, 0x10, 0x95, 0x00, 0x00, 0xb0, 0xb5, + 0x04, 0x1c, 0x0d, 0x1c, 0x01, 0x20, 0xf8, 0xf7, + 0x5e, 0xfb, 0x0d, 0x49, 0x00, 0x28, 0xc8, 0x61, + 0x14, 0xd0, 0x62, 0x68, 0x42, 0x60, 0xa2, 0x7c, + 0x02, 0x72, 0xa2, 0x68, 0xc2, 0x60, 0xe2, 0x68, + 0x02, 0x61, 0x22, 0x8a, 0x02, 0x75, 0x0a, 0x1d, + 0x0a, 0x62, 0x12, 0x68, 0x00, 0x2a, 0xff, 0xd1, + 0x02, 0x60, 0x48, 0x60, 0x00, 0x20, 0xa8, 0x60, + 0x01, 0x20, 0x3c, 0x00, 0x4c, 0x95, 0x00, 0x00, + 0xb0, 0xbd, 0x01, 0x20, 0xfa, 0xe7, 0x00, 0x00, + 0xa4, 0x6e, 0x01, 0x00, 0xb0, 0xb5, 0x04, 0x1c, + 0x40, 0x68, 0x0d, 0x1c, 0x43, 0x1c, 0x02, 0xd1, + 0x21, 0x1c, 0x09, 0x48, 0x08, 0xe0, 0x00, 0x20, + 0xf8, 0xf7, 0x34, 0xfb, 0x06, 0x49, 0x94, 0x39, + 0x08, 0x61, 0x00, 0x28, 0x03, 0xd0, 0x21, 0x1c, + 0x00, 0xf0, 0x48, 0xfe, 0x00, 0xe0, 0x01, 0x20, + 0xa8, 0x60, 0x01, 0x20, 0x3c, 0x00, 0x88, 0x95, + 0x00, 0x00, 0xb0, 0xbd, 0x00, 0x00, 0x38, 0x6f, + 0x01, 0x00, 0x80, 0xb5, 0x01, 0x21, 0x97, 0x20, + 0xf7, 0xf7, 0x85, 0xfe, 0x00, 0x20, 0x80, 0xbd, + 0x00, 0x00, 0x38, 0xb5, 0x0a, 0x1c, 0x14, 0x32, + 0x00, 0x92, 0x13, 0x1f, 0x05, 0x1c, 0x08, 0x3a, + 0x0c, 0x1c, 0x16, 0x31, 0x40, 0x68, 0xfe, 0xf7, + 0x6c, 0xfe, 0x00, 0x28, 0x01, 0xd0, 0x00, 0x20, + 0x00, 0xe0, 0x01, 0x20, 0x69, 0x68, 0x3c, 0x00, + 0xc4, 0x95, 0x00, 0x00, 0xa0, 0x60, 0x61, 0x60, + 0x01, 0x20, 0x38, 0xbd, 0x10, 0xb5, 0x0c, 0x1c, + 0x01, 0x7a, 0x00, 0x29, 0x0f, 0xd0, 0x01, 0x29, + 0x09, 0xd0, 0x02, 0x29, 0x03, 0xd1, 0x00, 0x21, + 0x00, 0x20, 0x0a, 0xf0, 0x73, 0xfc, 0x00, 0x20, + 0x20, 0x71, 0x01, 0x20, 0x10, 0xbd, 0x41, 0x68, + 0x01, 0x20, 0x0a, 0xf0, 0x6b, 0xfc, 0x00, 0xf0, + 0x0d, 0xf9, 0xf4, 0xe7, 0x80, 0xb5, 0x04, 0x49, + 0x3c, 0x00, 0x00, 0x96, 0x00, 0x00, 0x48, 0x68, + 0x01, 0x38, 0x48, 0x60, 0x01, 0xd1, 0x07, 0xf0, + 0x6e, 0xfb, 0x00, 0x20, 0x80, 0xbd, 0xac, 0x79, + 0x01, 0x00, 0xb0, 0xb5, 0x05, 0x1c, 0x0c, 0x1c, + 0x00, 0xf0, 0x4f, 0xfe, 0xa0, 0x60, 0x68, 0x68, + 0x60, 0x60, 0x01, 0x20, 0xb0, 0xbd, 0xb0, 0xb5, + 0x05, 0x1c, 0x0c, 0x1c, 0x00, 0xf0, 0x6f, 0xfe, + 0xa0, 0x60, 0x68, 0x68, 0x60, 0x60, 0x01, 0x20, + 0xb0, 0xbd, 0x3c, 0x00, 0x3c, 0x96, 0x00, 0x00, + 0x08, 0x1c, 0x00, 0x21, 0x00, 0x22, 0x00, 0x23, + 0x0e, 0xc0, 0x08, 0xc0, 0x01, 0x20, 0x70, 0x47, + 0xf8, 0xb5, 0x0f, 0x1c, 0x04, 0x1c, 0x20, 0x79, + 0x20, 0x28, 0x01, 0xd2, 0x20, 0x20, 0x20, 0x71, + 0x66, 0x79, 0x00, 0x2e, 0x02, 0xd1, 0x25, 0x79, + 0x00, 0x22, 0x0d, 0xe0, 0x25, 0x79, 0x29, 0x1c, + 0x30, 0x1c, 0xf7, 0xf7, 0x4f, 0xf8, 0x00, 0x29, + 0x01, 0xd1, 0x32, 0x1c, 0x3c, 0x00, 0x78, 0x96, + 0x00, 0x00, 0x04, 0xe0, 0x70, 0x43, 0x80, 0x19, + 0x05, 0x06, 0x2d, 0x0e, 0x32, 0x1c, 0xe0, 0x79, + 0x29, 0x1c, 0x00, 0xf0, 0xf2, 0xf9, 0x20, 0x7a, + 0x2f, 0x49, 0xc0, 0x07, 0xc0, 0x0f, 0x08, 0x60, + 0x2e, 0x48, 0x00, 0x78, 0xc0, 0x07, 0x43, 0xd5, + 0xa1, 0x79, 0x2c, 0x4a, 0xc8, 0x07, 0x48, 0xd4, + 0x2c, 0x4e, 0x16, 0x60, 0x8b, 0x07, 0x2b, 0x48, + 0x08, 0xd5, 0xcc, 0x08, 0x01, 0x23, 0x3c, 0x00, + 0xb4, 0x96, 0x00, 0x00, 0xa3, 0x40, 0x03, 0x60, + 0x49, 0x07, 0x04, 0xd5, 0x28, 0x49, 0x11, 0x60, + 0x01, 0xe0, 0x40, 0x21, 0x01, 0x60, 0x13, 0x68, + 0x26, 0x4a, 0xb3, 0x42, 0x10, 0xd1, 0x54, 0x68, + 0x01, 0x68, 0x0c, 0x43, 0x54, 0x60, 0x14, 0x68, + 0x0c, 0x40, 0x01, 0xd0, 0x51, 0x61, 0x00, 0xe0, + 0x91, 0x61, 0x54, 0x68, 0x0c, 0x43, 0x54, 0x60, + 0x94, 0x68, 0x21, 0x43, 0x91, 0x60, 0x13, 0xe0, + 0x3c, 0x00, 0xf0, 0x96, 0x00, 0x00, 0x54, 0x7c, + 0x01, 0x68, 0x0c, 0x43, 0x54, 0x74, 0x14, 0x7c, + 0x0c, 0x40, 0x03, 0xd0, 0x14, 0x7c, 0x0c, 0x43, + 0x14, 0x74, 0x02, 0xe0, 0x14, 0x7c, 0x8c, 0x43, + 0x14, 0x74, 0x54, 0x7c, 0x0c, 0x43, 0x54, 0x74, + 0x94, 0x7c, 0x21, 0x43, 0x91, 0x74, 0xb3, 0x42, + 0x05, 0xd1, 0x00, 0x22, 0x01, 0x68, 0x03, 0x20, + 0xff, 0xf7, 0x8d, 0xf8, 0x09, 0xe0, 0x00, 0x68, + 0x00, 0x21, 0x3c, 0x00, 0x2c, 0x97, 0x00, 0x00, + 0x02, 0x06, 0x12, 0x0e, 0x03, 0x20, 0xff, 0xf7, + 0x85, 0xf8, 0x01, 0xe0, 0x0b, 0x48, 0x10, 0x60, + 0x00, 0x20, 0x38, 0x71, 0x7d, 0x71, 0xf7, 0xf7, + 0xe9, 0xfd, 0x01, 0x20, 0xf8, 0xbd, 0x00, 0x00, + 0xcc, 0x5c, 0x01, 0x00, 0x04, 0x00, 0x07, 0x00, + 0x5c, 0x5b, 0x01, 0x00, 0xb9, 0x9b, 0x00, 0x00, + 0x58, 0x5b, 0x01, 0x00, 0x95, 0x9b, 0x00, 0x00, + 0x10, 0x00, 0x07, 0x00, 0x3c, 0x00, 0x68, 0x97, + 0x00, 0x00, 0x55, 0x9b, 0x00, 0x00, 0xb0, 0xb5, + 0x0d, 0x1c, 0x04, 0x30, 0x00, 0x24, 0xfe, 0xf7, + 0xd6, 0xfa, 0x01, 0x20, 0x6c, 0x60, 0xb0, 0xbd, + 0x00, 0x00, 0xf0, 0xb5, 0x07, 0x7a, 0x43, 0x68, + 0x04, 0x1c, 0x0e, 0x48, 0x0e, 0x1c, 0x00, 0x68, + 0x01, 0x25, 0x01, 0x1c, 0x9b, 0xb0, 0x06, 0xe0, + 0x4a, 0x68, 0x9a, 0x42, 0x02, 0xd1, 0x8f, 0x76, + 0x00, 0x25, 0x02, 0xe0, 0x09, 0x68, 0x3c, 0x00, + 0xa4, 0x97, 0x00, 0x00, 0x00, 0x29, 0xf6, 0xd1, + 0x00, 0x2d, 0x05, 0xd1, 0x21, 0x7a, 0x01, 0x29, + 0x02, 0xd1, 0x01, 0xa9, 0xf8, 0xf7, 0xa8, 0xf8, + 0x60, 0x68, 0x04, 0x36, 0x21, 0xc6, 0x1b, 0xb0, + 0x01, 0x20, 0xf0, 0xbd, 0xa4, 0x6e, 0x01, 0x00, + 0x10, 0xb5, 0x0c, 0x1c, 0x08, 0xf0, 0xae, 0xfc, + 0x60, 0x60, 0x01, 0x20, 0x10, 0xbd, 0x00, 0x00, + 0x10, 0xb5, 0x0c, 0x1c, 0x07, 0xf0, 0x84, 0xfa, + 0x3c, 0x00, 0xe0, 0x97, 0x00, 0x00, 0x04, 0xf0, + 0x54, 0xff, 0x00, 0x20, 0x60, 0x60, 0x01, 0x20, + 0x10, 0xbd, 0x00, 0x20, 0xc0, 0x43, 0x48, 0x60, + 0x01, 0x20, 0x70, 0x47, 0x00, 0x00, 0x10, 0xb5, + 0x0c, 0x1c, 0x00, 0x79, 0xfa, 0xf7, 0x07, 0xf8, + 0x00, 0x28, 0x01, 0xd0, 0x00, 0x20, 0x00, 0xe0, + 0x02, 0x20, 0x60, 0x60, 0x01, 0x20, 0x10, 0xbd, + 0x00, 0x00, 0x1c, 0xb5, 0x06, 0x4c, 0x20, 0x68, + 0x00, 0x28, 0x3c, 0x00, 0x1c, 0x98, 0x00, 0x00, + 0x07, 0xd0, 0x09, 0xf0, 0xc5, 0xfa, 0x01, 0x90, + 0x20, 0x68, 0x41, 0x68, 0x68, 0x46, 0xf6, 0xf7, + 0xd6, 0xfd, 0x1c, 0xbd, 0xac, 0x79, 0x01, 0x00, + 0x01, 0x49, 0x08, 0x60, 0x70, 0x47, 0x00, 0x00, + 0xac, 0x79, 0x01, 0x00, 0x0e, 0xb5, 0x06, 0x4b, + 0x1b, 0x68, 0x00, 0x2b, 0x06, 0xd0, 0x02, 0x90, + 0x00, 0x91, 0x01, 0x92, 0x68, 0x46, 0xd9, 0x68, + 0xf6, 0xf7, 0xc1, 0xfd, 0x3c, 0x00, 0x58, 0x98, + 0x00, 0x00, 0x0e, 0xbd, 0x00, 0x00, 0xac, 0x79, + 0x01, 0x00, 0x1c, 0xb5, 0x04, 0x1c, 0x07, 0xf0, + 0x4c, 0xfa, 0x06, 0x48, 0x41, 0x68, 0x01, 0x31, + 0x41, 0x60, 0x00, 0x94, 0x00, 0x21, 0x01, 0x91, + 0x00, 0x68, 0x01, 0x68, 0x68, 0x46, 0xf6, 0xf7, + 0xad, 0xfd, 0x1c, 0xbd, 0x00, 0x00, 0xac, 0x79, + 0x01, 0x00, 0x80, 0xb5, 0xf8, 0xf7, 0xa3, 0xf8, + 0x80, 0xbd, 0x80, 0xb5, 0x02, 0x1c, 0x3c, 0x00, + 0x94, 0x98, 0x00, 0x00, 0x80, 0x21, 0x03, 0x20, + 0x00, 0xf0, 0x5c, 0xf8, 0x01, 0x1c, 0x03, 0x48, + 0x00, 0x22, 0x43, 0x69, 0xf6, 0xf7, 0x9b, 0xfd, + 0x80, 0xbd, 0x00, 0x00, 0xa4, 0x6d, 0x01, 0x00, + 0xf8, 0xb5, 0x0c, 0x1c, 0x13, 0x49, 0x05, 0x1c, + 0x08, 0x68, 0x16, 0x1c, 0x01, 0x30, 0x08, 0x60, + 0x00, 0x20, 0x20, 0x61, 0x22, 0x1c, 0x10, 0x32, + 0x28, 0x1d, 0x00, 0x21, 0x07, 0x1c, 0x00, 0x92, + 0x3c, 0x00, 0xd0, 0x98, 0x00, 0x00, 0x03, 0xf0, + 0xde, 0xfe, 0x20, 0x71, 0x20, 0x69, 0x00, 0x28, + 0x10, 0xd0, 0x01, 0x04, 0x09, 0x0c, 0x00, 0x20, + 0xf7, 0xf7, 0x79, 0xfe, 0x30, 0x60, 0x29, 0x1d, + 0x03, 0xc9, 0xa0, 0x60, 0xe1, 0x60, 0x30, 0x68, + 0x01, 0x68, 0x00, 0x9a, 0x38, 0x1c, 0x03, 0xf0, + 0xca, 0xfe, 0x20, 0x71, 0x01, 0x20, 0xf8, 0xbd, + 0x00, 0x00, 0x10, 0x75, 0x01, 0x00, 0x80, 0xb5, + 0x02, 0x1c, 0x3c, 0x00, 0x0c, 0x99, 0x00, 0x00, + 0x08, 0x21, 0x04, 0x20, 0x09, 0xf0, 0x4e, 0xff, + 0x03, 0x20, 0x80, 0xbd, 0x10, 0xb5, 0x07, 0x4a, + 0x0c, 0x1c, 0x51, 0x68, 0x01, 0x31, 0x51, 0x60, + 0x01, 0x1c, 0x10, 0x31, 0xc2, 0x68, 0x04, 0x30, + 0x03, 0xf0, 0xf0, 0xfe, 0x20, 0x71, 0x00, 0x20, + 0x10, 0xbd, 0x00, 0x00, 0x10, 0x75, 0x01, 0x00, + 0x04, 0x49, 0x80, 0xb5, 0x81, 0x61, 0x08, 0x21, + 0x02, 0x1c, 0x03, 0x20, 0x3c, 0x00, 0x48, 0x99, + 0x00, 0x00, 0x09, 0xf0, 0x32, 0xff, 0x03, 0x20, + 0x80, 0xbd, 0x95, 0xd8, 0x00, 0x00, 0xf7, 0xb5, + 0x07, 0x1c, 0x16, 0x1c, 0x06, 0x21, 0x00, 0x20, + 0x82, 0xb0, 0xf7, 0xf7, 0x3a, 0xfe, 0x05, 0x1c, + 0x20, 0x48, 0x00, 0x78, 0x06, 0x28, 0x00, 0xd9, + 0x28, 0x81, 0x2c, 0x68, 0x00, 0x20, 0xa7, 0x70, + 0x03, 0x99, 0xe1, 0x70, 0x31, 0x1c, 0x03, 0xe0, + 0x0a, 0x89, 0x10, 0x18, 0x0f, 0x1c, 0x3c, 0x00, + 0x84, 0x99, 0x00, 0x00, 0xc9, 0x68, 0x00, 0x29, + 0xf9, 0xd1, 0x6b, 0x46, 0x01, 0xaa, 0x21, 0x1d, + 0x00, 0xf0, 0x34, 0xf8, 0x00, 0xab, 0x18, 0x78, + 0x60, 0x71, 0x18, 0x78, 0x00, 0x28, 0x17, 0xd0, + 0x11, 0x48, 0x40, 0x68, 0x00, 0x28, 0x08, 0xd0, + 0x19, 0x78, 0x00, 0x20, 0xf7, 0xf7, 0x14, 0xfe, + 0x01, 0x1c, 0x38, 0x1c, 0xf7, 0xf7, 0x30, 0xfd, + 0x0a, 0xe0, 0x38, 0x68, 0x00, 0x28, 0x02, 0xd1, + 0x3c, 0x00, 0xc0, 0x99, 0x00, 0x00, 0x3f, 0x60, + 0x01, 0x20, 0xb8, 0x61, 0x00, 0xab, 0x19, 0x78, + 0x38, 0x89, 0x40, 0x18, 0x38, 0x81, 0x00, 0xab, + 0x98, 0x88, 0x31, 0x1c, 0x02, 0x38, 0x20, 0x80, + 0x28, 0x1c, 0xf7, 0xf7, 0x1c, 0xfd, 0x28, 0x1c, + 0x05, 0xb0, 0xf0, 0xbd, 0x00, 0x00, 0xc8, 0x5c, + 0x01, 0x00, 0x01, 0x79, 0x42, 0x79, 0x00, 0x88, + 0x89, 0x18, 0x02, 0x39, 0x40, 0x1a, 0x70, 0x47, + 0x00, 0x00, 0x3c, 0x00, 0xfc, 0x99, 0x00, 0x00, + 0x70, 0xb5, 0x08, 0x4d, 0x2c, 0x78, 0xad, 0x78, + 0x20, 0x18, 0x06, 0x1c, 0x00, 0x2d, 0x03, 0xd0, + 0x70, 0x19, 0x01, 0x38, 0x01, 0x3d, 0xa8, 0x43, + 0x10, 0x80, 0x80, 0x1b, 0x18, 0x70, 0x0c, 0x70, + 0x70, 0xbd, 0x00, 0x00, 0xc8, 0x5c, 0x01, 0x00, + 0xb0, 0xb5, 0x04, 0x68, 0x0c, 0x4a, 0x21, 0x88, + 0x52, 0x78, 0x02, 0x31, 0x91, 0x42, 0x11, 0xd2, + 0x55, 0x1a, 0xf7, 0xf7, 0x3c, 0x00, 0x38, 0x9a, + 0x00, 0x00, 0xc9, 0xfd, 0x01, 0x68, 0x00, 0x29, + 0x02, 0xd1, 0x00, 0x60, 0x01, 0x21, 0x81, 0x61, + 0x01, 0x89, 0x49, 0x19, 0x01, 0x81, 0x20, 0x88, + 0x40, 0x19, 0x20, 0x80, 0x60, 0x79, 0x40, 0x19, + 0x60, 0x71, 0xb0, 0xbd, 0x00, 0x00, 0xc8, 0x5c, + 0x01, 0x00, 0x80, 0xb5, 0x00, 0x22, 0x06, 0x21, + 0xf1, 0x20, 0x09, 0xf0, 0xa2, 0xfe, 0x80, 0xbd, + 0x00, 0x00, 0x03, 0x1c, 0x02, 0x48, 0x3c, 0x00, + 0x74, 0x9a, 0x00, 0x00, 0x03, 0x70, 0x41, 0x70, + 0x82, 0x70, 0x70, 0x47, 0xc8, 0x5c, 0x01, 0x00, + 0xb0, 0xb5, 0x08, 0x1c, 0x09, 0x68, 0x15, 0x1c, + 0x8c, 0x78, 0xf7, 0xf7, 0x85, 0xfd, 0x04, 0x49, + 0xa0, 0x00, 0x09, 0x58, 0x00, 0x29, 0x02, 0xd0, + 0x28, 0x1c, 0xf6, 0xf7, 0x9e, 0xfc, 0xb0, 0xbd, + 0x84, 0x6d, 0x01, 0x00, 0xfe, 0xb5, 0x04, 0x1c, + 0xc0, 0x7a, 0xa1, 0x7a, 0xc6, 0x07, 0xf6, 0x0f, + 0x3c, 0x00, 0xb0, 0x9a, 0x00, 0x00, 0x32, 0x1c, + 0x20, 0x1d, 0x01, 0xf0, 0x3c, 0xf8, 0x60, 0x69, + 0x25, 0x4f, 0xc1, 0x07, 0x37, 0xd5, 0xb8, 0x69, + 0x00, 0x28, 0x01, 0xd0, 0xf6, 0xf7, 0x87, 0xfc, + 0x20, 0x68, 0x05, 0x68, 0x28, 0x88, 0x80, 0x07, + 0x34, 0xd1, 0x01, 0xaa, 0x02, 0xa9, 0x28, 0x1c, + 0x01, 0xf0, 0x0b, 0xfc, 0x28, 0x1c, 0x01, 0xf0, + 0x12, 0xfc, 0x00, 0x78, 0xc0, 0x07, 0x0a, 0xd4, + 0x60, 0x69, 0x3c, 0x00, 0xec, 0x9a, 0x00, 0x00, + 0x80, 0x07, 0x26, 0xd4, 0x33, 0x1c, 0x29, 0x1c, + 0xa2, 0x7a, 0x20, 0x69, 0x7d, 0x69, 0xf6, 0xf7, + 0x72, 0xfc, 0x1e, 0xe0, 0x00, 0xab, 0x18, 0x7a, + 0x00, 0x28, 0x03, 0xd0, 0x01, 0x28, 0x06, 0xd0, + 0x02, 0x28, 0x16, 0xd1, 0x28, 0x1c, 0x79, 0x6a, + 0xf6, 0xf7, 0x61, 0xfc, 0x11, 0xe0, 0x00, 0xab, + 0x18, 0x79, 0x0e, 0x28, 0x01, 0xd0, 0x0f, 0x28, + 0x0b, 0xd1, 0x28, 0x1c, 0x3c, 0x00, 0x28, 0x9b, + 0x00, 0x00, 0x39, 0x6a, 0xf6, 0xf7, 0x56, 0xfc, + 0x06, 0xe0, 0x00, 0x07, 0x80, 0x0f, 0x03, 0xd1, + 0x20, 0x69, 0xf9, 0x69, 0xf6, 0xf7, 0x4e, 0xfc, + 0x78, 0x6b, 0x21, 0x21, 0x01, 0x30, 0x78, 0x63, + 0x22, 0x1c, 0x80, 0x20, 0x09, 0xf0, 0x31, 0xfe, + 0xfe, 0xbd, 0x28, 0x7a, 0x01, 0x00, 0x0b, 0x49, + 0x18, 0xb5, 0x08, 0x78, 0xc0, 0x07, 0x11, 0xd5, + 0x0a, 0x4a, 0x10, 0x1c, 0x20, 0x30, 0x3c, 0x00, + 0x64, 0x9b, 0x00, 0x00, 0x84, 0x79, 0x00, 0xab, + 0x1c, 0x70, 0xc0, 0x79, 0x58, 0x70, 0x08, 0x78, + 0x40, 0x23, 0x18, 0x43, 0x08, 0x70, 0x05, 0x48, + 0x00, 0x78, 0x08, 0x70, 0x00, 0xab, 0x18, 0x88, + 0xd0, 0x84, 0x18, 0xbd, 0x04, 0x00, 0x07, 0x00, + 0x00, 0x10, 0x07, 0x00, 0xe0, 0x60, 0x01, 0x00, + 0x70, 0x47, 0x00, 0x00, 0x05, 0x49, 0x10, 0xb5, + 0x88, 0x79, 0x05, 0x4b, 0x1a, 0x7c, 0x05, 0x4c, + 0x3c, 0x00, 0xa0, 0x9b, 0x00, 0x00, 0x24, 0x68, + 0x62, 0x40, 0x1a, 0x74, 0x88, 0x71, 0x10, 0xbd, + 0x00, 0x00, 0x20, 0x10, 0x07, 0x00, 0x10, 0x00, + 0x07, 0x00, 0x58, 0x5b, 0x01, 0x00, 0x04, 0x49, + 0x0a, 0x68, 0x04, 0x48, 0x00, 0x68, 0x02, 0x40, + 0x01, 0xd0, 0x88, 0x61, 0x70, 0x47, 0x48, 0x61, + 0x70, 0x47, 0x10, 0x00, 0x07, 0x00, 0x58, 0x5b, + 0x01, 0x00, 0x02, 0x1c, 0x01, 0x20, 0x00, 0x06, + 0x08, 0x43, 0x3c, 0x00, 0xdc, 0x9b, 0x00, 0x00, + 0x80, 0xb5, 0x2a, 0x21, 0x09, 0xf0, 0xe6, 0xfd, + 0x80, 0xbd, 0x00, 0x00, 0x10, 0xb5, 0x04, 0x1c, + 0x00, 0x29, 0x03, 0xd0, 0x81, 0x29, 0x07, 0xd1, + 0x81, 0x20, 0x00, 0xe0, 0x80, 0x20, 0x22, 0x1c, + 0x2c, 0x21, 0x09, 0xf0, 0xd7, 0xfd, 0x10, 0xbd, + 0x02, 0x21, 0x2c, 0x20, 0xf7, 0xf7, 0x4c, 0xfb, + 0x20, 0x1c, 0xf7, 0xf7, 0xc3, 0xfc, 0x10, 0xbd, + 0x80, 0xb5, 0xb4, 0xb0, 0x3c, 0x00, 0x18, 0x9c, + 0x00, 0x00, 0x01, 0x28, 0x06, 0xd0, 0x82, 0x28, + 0x1c, 0xd1, 0x1a, 0xa8, 0x07, 0xf0, 0x35, 0xfc, + 0x34, 0xb0, 0x80, 0xbd, 0x81, 0x29, 0x13, 0xd1, + 0x0d, 0x48, 0x0c, 0x4a, 0x81, 0x69, 0x00, 0x68, + 0x50, 0x32, 0x81, 0x42, 0x02, 0xd0, 0xd1, 0x6a, + 0x01, 0x29, 0x02, 0xd0, 0x11, 0x78, 0x02, 0x29, + 0x02, 0xd1, 0x07, 0xf0, 0x0a, 0xf9, 0xeb, 0xe7, + 0x69, 0x46, 0xf7, 0xf7, 0x5a, 0xfe, 0x3c, 0x00, + 0x54, 0x9c, 0x00, 0x00, 0xe7, 0xe7, 0x01, 0x21, + 0x00, 0xe0, 0x02, 0x21, 0x18, 0x20, 0xf7, 0xf7, + 0x21, 0xfb, 0xe0, 0xe7, 0xa4, 0x6e, 0x01, 0x00, + 0xb0, 0xb5, 0x04, 0x1c, 0x00, 0x68, 0x17, 0x4d, + 0x9a, 0xb0, 0x68, 0x63, 0x08, 0xf0, 0x3e, 0xfa, + 0x20, 0x79, 0x14, 0x49, 0x13, 0x4a, 0x50, 0x39, + 0x2c, 0x3a, 0x02, 0x28, 0x0a, 0xd1, 0x90, 0x68, + 0x80, 0x02, 0xa8, 0x61, 0xc8, 0x68, 0xe8, 0x61, + 0x3c, 0x00, 0x90, 0x9c, 0x00, 0x00, 0x02, 0x20, + 0x28, 0x72, 0x07, 0xf0, 0xe4, 0xf8, 0x1a, 0xb0, + 0xb0, 0xbd, 0x03, 0x1c, 0x00, 0x20, 0x00, 0x2b, + 0x0b, 0xd1, 0x52, 0x68, 0x92, 0x02, 0xaa, 0x61, + 0x0a, 0x1c, 0x89, 0x68, 0xe9, 0x61, 0x28, 0x72, + 0x10, 0x68, 0x69, 0x46, 0xf7, 0xf7, 0x27, 0xfe, + 0xed, 0xe7, 0xa8, 0x61, 0x01, 0x20, 0x28, 0x72, + 0x28, 0x70, 0x00, 0x20, 0x06, 0xf0, 0x7d, 0xfa, + 0xe5, 0xe7, 0x3c, 0x00, 0xcc, 0x9c, 0x00, 0x00, + 0xf4, 0x6e, 0x01, 0x00, 0x70, 0x47, 0x00, 0x00, + 0x70, 0x47, 0x00, 0x00, 0x80, 0xb5, 0x01, 0x21, + 0x07, 0x20, 0xf7, 0xf7, 0xe1, 0xfa, 0x80, 0xbd, + 0x70, 0x47, 0x00, 0x00, 0xf8, 0xb5, 0x00, 0x24, + 0x19, 0x4a, 0x00, 0x26, 0xd5, 0x68, 0x11, 0x68, + 0x04, 0x35, 0x08, 0x1c, 0x91, 0x60, 0x02, 0xe0, + 0x01, 0x1c, 0x40, 0x19, 0x08, 0x60, 0x53, 0x68, + 0x83, 0x42, 0xf9, 0xd8, 0x3c, 0x00, 0x08, 0x9d, + 0x00, 0x00, 0x01, 0x34, 0x10, 0x32, 0x03, 0x2c, + 0x0e, 0x60, 0xee, 0xd3, 0xf6, 0xf7, 0xf1, 0xff, + 0x10, 0x48, 0x10, 0x49, 0x12, 0x4c, 0x08, 0x60, + 0x10, 0x49, 0x00, 0x20, 0x01, 0x22, 0x19, 0x23, + 0x5b, 0x01, 0x0c, 0x25, 0x43, 0x43, 0x1b, 0x19, + 0x45, 0x43, 0x4a, 0x51, 0x1f, 0x1c, 0x6d, 0x18, + 0xab, 0x60, 0x6b, 0x60, 0x00, 0x25, 0x1e, 0x1c, + 0x14, 0x36, 0x9e, 0x60, 0x33, 0x1c, 0x3c, 0x00, + 0x44, 0x9d, 0x00, 0x00, 0x01, 0x35, 0x27, 0x2d, + 0xf8, 0xdb, 0x01, 0x30, 0x03, 0x28, 0x9f, 0x60, + 0xe8, 0xdb, 0xf8, 0xbd, 0x20, 0x57, 0x01, 0x00, + 0x14, 0xc8, 0x01, 0x00, 0xb4, 0xcf, 0x01, 0x00, + 0x18, 0xd9, 0x01, 0x00, 0xb8, 0xcf, 0x01, 0x00, + 0xb0, 0xb5, 0x07, 0x4c, 0x25, 0x1c, 0xc0, 0x35, + 0x28, 0x6b, 0x1e, 0x21, 0x00, 0xf0, 0xf2, 0xf9, + 0xa2, 0x6b, 0x20, 0x1c, 0xdc, 0x30, 0x29, 0x6b, + 0x3c, 0x00, 0x80, 0x9d, 0x00, 0x00, 0x00, 0xf0, + 0xb6, 0xf9, 0xb0, 0xbd, 0x00, 0x00, 0xc4, 0x69, + 0x01, 0x00, 0x00, 0x20, 0x10, 0x22, 0x10, 0xb5, + 0x0a, 0x49, 0x05, 0xe0, 0x0c, 0x23, 0x43, 0x43, + 0x5c, 0x18, 0x0c, 0x34, 0xcc, 0x50, 0x01, 0x30, + 0x0f, 0x28, 0xf7, 0xd3, 0x0c, 0x23, 0x58, 0x43, + 0x09, 0x50, 0x04, 0x48, 0x41, 0x60, 0x01, 0x60, + 0x02, 0x82, 0x00, 0x21, 0x81, 0x60, 0xc1, 0x60, + 0x10, 0xbd, 0x3c, 0x00, 0xbc, 0x9d, 0x00, 0x00, + 0x84, 0xe2, 0x01, 0x00, 0x44, 0xe3, 0x01, 0x00, + 0x10, 0xb5, 0x08, 0x4c, 0xa0, 0x6a, 0x00, 0x28, + 0x03, 0xd1, 0x07, 0x48, 0xf9, 0xf7, 0xe8, 0xfe, + 0xa0, 0x62, 0x04, 0x48, 0x44, 0x30, 0x00, 0x68, + 0x01, 0x21, 0xf9, 0xf7, 0x95, 0xfc, 0x60, 0x62, + 0x10, 0xbd, 0x00, 0x00, 0x60, 0x6c, 0x01, 0x00, + 0xcd, 0x26, 0x01, 0x00, 0xff, 0xb5, 0x0d, 0x1c, + 0x04, 0x1c, 0x1e, 0x1c, 0x3c, 0x00, 0xf8, 0x9d, + 0x00, 0x00, 0x81, 0xb0, 0x0a, 0x9f, 0x1c, 0x21, + 0xf6, 0xf7, 0x4d, 0xfb, 0x03, 0x98, 0xa0, 0x61, + 0x25, 0x60, 0x25, 0x61, 0x26, 0x81, 0xa6, 0x82, + 0xe7, 0x60, 0x05, 0xb0, 0xf0, 0xbd, 0x70, 0xb5, + 0x0d, 0x1c, 0xa4, 0x21, 0x04, 0x1c, 0x08, 0x30, + 0xf6, 0xf7, 0x3d, 0xfb, 0x20, 0x1c, 0x44, 0x30, + 0x06, 0x22, 0x29, 0x1c, 0xf6, 0xf7, 0x65, 0xfb, + 0x18, 0x48, 0x3c, 0x23, 0x41, 0x1c, 0x3c, 0x00, + 0x34, 0x9e, 0x00, 0x00, 0x61, 0x62, 0x41, 0x78, + 0x59, 0x43, 0x09, 0x18, 0x89, 0x7a, 0x06, 0x29, + 0x01, 0xd1, 0xa0, 0x62, 0x02, 0xe0, 0x21, 0x1c, + 0x4d, 0x31, 0xa1, 0x62, 0x41, 0x78, 0x3c, 0x23, + 0x59, 0x43, 0x08, 0x18, 0x04, 0x30, 0x0f, 0x49, + 0x20, 0x62, 0x0b, 0x88, 0x00, 0x2b, 0x15, 0xd0, + 0xac, 0x20, 0x00, 0x5d, 0x0b, 0x4a, 0x18, 0x32, + 0x00, 0x02, 0x80, 0x18, 0xb0, 0x30, 0xe0, 0x60, + 0x3c, 0x00, 0x70, 0x9e, 0x00, 0x00, 0x8d, 0x68, + 0x00, 0x20, 0x08, 0xe0, 0xe2, 0x68, 0xc1, 0x00, + 0x54, 0x50, 0xe6, 0x68, 0x82, 0x00, 0x52, 0x19, + 0x71, 0x18, 0x4a, 0x60, 0x01, 0x30, 0x98, 0x42, + 0xf4, 0xdb, 0x70, 0xbd, 0x00, 0x00, 0x68, 0x61, + 0x01, 0x00, 0x58, 0x75, 0x01, 0x00, 0x1f, 0xb5, + 0x04, 0x1c, 0x60, 0x34, 0x61, 0x7a, 0x03, 0x1c, + 0x80, 0x6a, 0x08, 0x4a, 0x02, 0x91, 0x01, 0x90, + 0x03, 0x92, 0x3c, 0x00, 0xac, 0x9e, 0x00, 0x00, + 0xe2, 0x79, 0x18, 0x1c, 0x20, 0x30, 0x00, 0x92, + 0x44, 0x7b, 0x82, 0x7b, 0x5e, 0x20, 0xc1, 0x5a, + 0x18, 0x69, 0x04, 0x30, 0x23, 0x1c, 0x02, 0xf0, + 0x7f, 0xfe, 0x1f, 0xbd, 0x39, 0x4e, 0x00, 0x00, + 0xb0, 0xb5, 0x0b, 0x1c, 0x01, 0x88, 0x69, 0x20, + 0xc0, 0x5c, 0x86, 0xb0, 0x0e, 0x4a, 0x04, 0x91, + 0x03, 0x90, 0x05, 0x92, 0x0d, 0x4d, 0x59, 0x6a, + 0x9a, 0x6a, 0x2d, 0x68, 0x3c, 0x00, 0xe8, 0x9e, + 0x00, 0x00, 0x01, 0x24, 0x00, 0x2d, 0x00, 0xd0, + 0x04, 0x1c, 0x0a, 0x48, 0x00, 0x5d, 0x01, 0x91, + 0x02, 0x92, 0x00, 0x90, 0x18, 0x1c, 0x20, 0x30, + 0x44, 0x7b, 0x82, 0x7b, 0x5e, 0x20, 0xc1, 0x5a, + 0x18, 0x69, 0x04, 0x30, 0x23, 0x1c, 0x02, 0xf0, + 0xa4, 0xfe, 0x06, 0xb0, 0xb0, 0xbd, 0x51, 0x4f, + 0x00, 0x00, 0x18, 0x67, 0x01, 0x00, 0x0a, 0x61, + 0x01, 0x00, 0x01, 0x89, 0x8a, 0x1c, 0x3c, 0x00, + 0x24, 0x9f, 0x00, 0x00, 0x02, 0x81, 0x02, 0x68, + 0x02, 0x3a, 0x02, 0x60, 0x08, 0x0a, 0x09, 0x02, + 0x08, 0x43, 0x10, 0x80, 0x70, 0x47, 0x00, 0x00, + 0x70, 0xb5, 0x05, 0x1c, 0x08, 0x78, 0x0e, 0x1c, + 0xff, 0x28, 0x14, 0xd0, 0x71, 0x78, 0x02, 0x31, + 0x00, 0x20, 0xf7, 0xf7, 0x45, 0xfb, 0x04, 0x1c, + 0x02, 0x89, 0x00, 0x68, 0x31, 0x1c, 0xf6, 0xf7, + 0xcf, 0xfa, 0x00, 0x2d, 0x06, 0xd0, 0x28, 0x1c, + 0x3c, 0x00, 0x60, 0x9f, 0x00, 0x00, 0xf7, 0xf7, + 0x34, 0xfb, 0x21, 0x1c, 0xf7, 0xf7, 0x57, 0xfa, + 0x00, 0xe0, 0x25, 0x1c, 0x28, 0x1c, 0x70, 0xbd, + 0x00, 0x00, 0xff, 0xb5, 0x0f, 0x1c, 0x1e, 0x1c, + 0x04, 0x1c, 0x98, 0x1c, 0x01, 0x04, 0x09, 0x0c, + 0x00, 0x20, 0x81, 0xb0, 0xf7, 0xf7, 0x27, 0xfb, + 0x05, 0x1c, 0x00, 0x68, 0x00, 0x2c, 0x38, 0x60, + 0x03, 0x99, 0x01, 0x70, 0x38, 0x68, 0x46, 0x70, + 0x06, 0xd0, 0x3c, 0x00, 0x9c, 0x9f, 0x00, 0x00, + 0x20, 0x1c, 0xf7, 0xf7, 0x15, 0xfb, 0x29, 0x1c, + 0xf7, 0xf7, 0x38, 0xfa, 0x00, 0xe0, 0x2c, 0x1c, + 0x20, 0x1c, 0x05, 0xb0, 0xf0, 0xbd, 0x00, 0x00, + 0x70, 0xb5, 0x10, 0x48, 0x04, 0x68, 0x04, 0x60, + 0x0f, 0x49, 0x20, 0x20, 0x08, 0x60, 0xa0, 0x05, + 0x0e, 0x4e, 0x02, 0xd5, 0x70, 0x6a, 0xf6, 0xf7, + 0x05, 0xfa, 0xe0, 0x01, 0x02, 0xd5, 0x30, 0x6e, + 0xf6, 0xf7, 0x00, 0xfa, 0x3c, 0x00, 0xd8, 0x9f, + 0x00, 0x00, 0x0a, 0x48, 0x04, 0x40, 0x00, 0x25, + 0x07, 0xe0, 0xe0, 0x07, 0x03, 0xd5, 0xa8, 0x00, + 0x30, 0x58, 0xf6, 0xf7, 0xf6, 0xf9, 0x01, 0x35, + 0x64, 0x08, 0x00, 0x2c, 0xf5, 0xd1, 0x70, 0xbd, + 0x00, 0x00, 0x00, 0x40, 0x07, 0x00, 0x00, 0x10, + 0x07, 0x00, 0x30, 0x74, 0x01, 0x00, 0xff, 0xfd, + 0xff, 0xfe, 0x80, 0xb5, 0x07, 0x21, 0x80, 0x20, + 0xf7, 0xf7, 0x49, 0xf9, 0x80, 0xbd, 0x3c, 0x00, + 0x14, 0xa0, 0x00, 0x00, 0xf8, 0xb5, 0x14, 0x4b, + 0x82, 0x00, 0x9c, 0x58, 0xca, 0x06, 0x01, 0x27, + 0x39, 0x1c, 0xd2, 0x0e, 0x91, 0x40, 0x11, 0x4a, + 0x11, 0x60, 0x11, 0x4e, 0x40, 0x00, 0x85, 0x19, + 0x15, 0xe0, 0x60, 0x60, 0x20, 0x7b, 0xc1, 0x00, + 0x89, 0x19, 0x10, 0x31, 0x0a, 0x78, 0x0d, 0x23, + 0x9a, 0x43, 0x0a, 0x70, 0x39, 0x1c, 0x81, 0x40, + 0x31, 0x73, 0x07, 0x49, 0x00, 0x01, 0x08, 0x31, + 0x3c, 0x00, 0x50, 0xa0, 0x00, 0x00, 0x40, 0x18, + 0x08, 0x4a, 0x41, 0x68, 0x42, 0x60, 0x80, 0x68, + 0xf6, 0xf7, 0xbe, 0xf9, 0x28, 0x7b, 0x00, 0x28, + 0xe6, 0xd1, 0xf8, 0xbd, 0x00, 0x00, 0xa4, 0x73, + 0x01, 0x00, 0x00, 0x10, 0x07, 0x00, 0x00, 0x60, + 0x07, 0x00, 0xd1, 0x75, 0x00, 0x00, 0x03, 0x49, + 0x01, 0x20, 0x09, 0x7a, 0x00, 0x29, 0x00, 0xd1, + 0x00, 0x20, 0x70, 0x47, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x3c, 0x00, 0x8c, 0xa0, 0x00, 0x00, + 0x03, 0x49, 0x01, 0x20, 0x89, 0x7a, 0x00, 0x29, + 0x00, 0xd1, 0x00, 0x20, 0x70, 0x47, 0x00, 0x00, + 0x14, 0x7a, 0x01, 0x00, 0xb0, 0xb5, 0x00, 0x24, + 0xfa, 0xf7, 0x76, 0xfc, 0x00, 0x28, 0x14, 0xd0, + 0x01, 0x24, 0x08, 0xf0, 0x7d, 0xfe, 0x0a, 0x4d, + 0x0a, 0x4b, 0x00, 0x21, 0x5a, 0x18, 0xa0, 0x32, + 0x12, 0x78, 0x10, 0x2a, 0x06, 0xd3, 0x8a, 0x00, + 0xd2, 0x18, 0x92, 0x6f, 0x3c, 0x00, 0xc8, 0xa0, + 0x00, 0x00, 0x82, 0x1a, 0xaa, 0x42, 0x00, 0xd2, + 0x00, 0x24, 0x01, 0x31, 0x03, 0x29, 0xf0, 0xd3, + 0x20, 0x1c, 0xb0, 0xbd, 0x00, 0x00, 0x8b, 0x08, + 0x00, 0x00, 0xa4, 0x6c, 0x01, 0x00, 0x01, 0x48, + 0xc0, 0x68, 0x70, 0x47, 0x00, 0x00, 0x78, 0x69, + 0x01, 0x00, 0x70, 0xb5, 0x0d, 0x1c, 0x04, 0x1c, + 0x16, 0x1c, 0xfd, 0xf7, 0x2e, 0xfe, 0x00, 0x20, + 0xe0, 0x60, 0x26, 0x61, 0xa5, 0x60, 0x3c, 0x00, + 0x04, 0xa1, 0x00, 0x00, 0x70, 0xbd, 0x00, 0x00, + 0xf8, 0xb5, 0x17, 0x1c, 0x0e, 0x1c, 0x04, 0x1c, + 0x00, 0x28, 0x01, 0xd0, 0x00, 0x2e, 0x01, 0xd1, + 0xf7, 0xf7, 0xf2, 0xf8, 0xa0, 0x68, 0x07, 0xf0, + 0x49, 0xf9, 0x05, 0x1c, 0x01, 0xd1, 0xf7, 0xf7, + 0xeb, 0xf8, 0x29, 0x1c, 0x6e, 0x60, 0xaf, 0x60, + 0x20, 0x1c, 0xfd, 0xf7, 0xfd, 0xfd, 0xe0, 0x68, + 0x41, 0x1c, 0xe1, 0x60, 0x00, 0x28, 0x03, 0xd1, + 0x3c, 0x00, 0x40, 0xa1, 0x00, 0x00, 0x05, 0x48, + 0x21, 0x69, 0x05, 0xf0, 0x2c, 0xf9, 0x20, 0x68, + 0xa8, 0x42, 0x02, 0xd1, 0x38, 0x1c, 0xf6, 0xf7, + 0x48, 0xf9, 0xf8, 0xbd, 0x00, 0x00, 0xc4, 0x60, + 0x01, 0x00, 0x00, 0x22, 0x01, 0x39, 0x10, 0xb5, + 0x05, 0xe0, 0x0c, 0x23, 0x53, 0x43, 0x1c, 0x18, + 0x0c, 0x34, 0xc4, 0x50, 0x01, 0x32, 0x8a, 0x42, + 0xf7, 0xd3, 0x00, 0x21, 0x0c, 0x23, 0x5a, 0x43, + 0x81, 0x50, 0x3c, 0x00, 0x7c, 0xa1, 0x00, 0x00, + 0x10, 0xbd, 0x00, 0x00, 0xb0, 0xb5, 0x04, 0x1c, + 0x01, 0xd1, 0xf7, 0xf7, 0xbb, 0xf8, 0x20, 0x1c, + 0xfd, 0xf7, 0xda, 0xfd, 0x01, 0x1c, 0x85, 0x68, + 0xa0, 0x68, 0x07, 0xf0, 0x09, 0xf9, 0xe0, 0x68, + 0x01, 0x38, 0xe0, 0x60, 0x03, 0xd1, 0x06, 0x48, + 0x21, 0x69, 0x05, 0xf0, 0xe7, 0xf8, 0x21, 0x68, + 0x00, 0x29, 0x03, 0xd0, 0x88, 0x68, 0x49, 0x68, + 0xf6, 0xf7, 0x11, 0xf9, 0x3c, 0x00, 0xb8, 0xa1, + 0x00, 0x00, 0x28, 0x1c, 0xb0, 0xbd, 0xc4, 0x60, + 0x01, 0x00, 0x01, 0x21, 0x00, 0x28, 0x8c, 0xb5, + 0x00, 0xd1, 0x00, 0x21, 0x0e, 0x20, 0x09, 0xf0, + 0x32, 0xfa, 0x83, 0x20, 0x00, 0xab, 0x18, 0x80, + 0x00, 0x20, 0x04, 0xf0, 0x0c, 0xf8, 0x01, 0x90, + 0x68, 0x46, 0x03, 0xf0, 0x7a, 0xf9, 0x8c, 0xbd, + 0x00, 0x00, 0x80, 0xb5, 0x08, 0xf0, 0xdf, 0xfd, + 0x06, 0x49, 0x0a, 0x89, 0x06, 0x49, 0x3c, 0x00, + 0xf4, 0xa1, 0x00, 0x00, 0x09, 0x6e, 0x41, 0x1a, + 0x0b, 0x0c, 0x59, 0x18, 0x89, 0x1a, 0x09, 0x04, + 0x09, 0x0c, 0x40, 0x1a, 0x80, 0xbd, 0x00, 0x00, + 0x00, 0x90, 0x07, 0x00, 0xa4, 0x6c, 0x01, 0x00, + 0x70, 0xb5, 0x04, 0x1c, 0x88, 0x7e, 0x0d, 0x1c, + 0x20, 0x28, 0x03, 0xd9, 0x03, 0x21, 0x18, 0x20, + 0xf7, 0xf7, 0x40, 0xf8, 0x00, 0x26, 0x26, 0x76, + 0xa8, 0x7e, 0x29, 0x1c, 0x1b, 0x31, 0x60, 0x76, + 0x3c, 0x00, 0x30, 0xa2, 0x00, 0x00, 0x20, 0x1c, + 0x1d, 0x30, 0xaa, 0x7e, 0xf6, 0xf7, 0x5f, 0xf9, + 0x68, 0x68, 0x29, 0x1c, 0x60, 0x60, 0xa8, 0x68, + 0x13, 0x31, 0xa0, 0x60, 0xa8, 0x7b, 0x06, 0x22, + 0x20, 0x73, 0xe8, 0x7b, 0x60, 0x73, 0x28, 0x7c, + 0xa0, 0x73, 0x68, 0x7c, 0xe0, 0x73, 0xa8, 0x89, + 0x20, 0x82, 0xa8, 0x7c, 0xe0, 0x76, 0x26, 0x77, + 0x20, 0x1c, 0x12, 0x30, 0xa6, 0x76, 0xf6, 0xf7, + 0x46, 0xf9, 0x3c, 0x00, 0x6c, 0xa2, 0x00, 0x00, + 0x60, 0x68, 0x43, 0x1c, 0x1d, 0xd0, 0x11, 0x4d, + 0x6d, 0x61, 0x28, 0x68, 0x00, 0x28, 0x1a, 0xd0, + 0x22, 0x7b, 0x01, 0x1c, 0x0b, 0x7b, 0x9a, 0x42, + 0x01, 0xd3, 0x20, 0x60, 0x14, 0xe0, 0x0b, 0x1c, + 0x09, 0x68, 0x00, 0x29, 0x0b, 0xd0, 0x0e, 0x7b, + 0xb2, 0x42, 0x08, 0xd2, 0x0b, 0x68, 0x00, 0x2b, + 0xf0, 0xd0, 0x1e, 0x7b, 0xb2, 0x42, 0xed, 0xd3, + 0x23, 0x60, 0x0c, 0x60, 0x3c, 0x00, 0xa8, 0xa2, + 0x00, 0x00, 0x01, 0xe0, 0x21, 0x60, 0x1c, 0x60, + 0x00, 0x20, 0x70, 0xbd, 0x26, 0x60, 0x2c, 0x60, + 0xfa, 0xe7, 0xa4, 0x6e, 0x01, 0x00, 0x13, 0x4a, + 0xb0, 0xb5, 0x51, 0x68, 0x01, 0x24, 0x00, 0x29, + 0x1e, 0xd0, 0x13, 0x1d, 0xd1, 0x61, 0x13, 0x62, + 0x43, 0x68, 0x04, 0xe0, 0x10, 0x62, 0x00, 0x68, + 0xd0, 0x61, 0x00, 0x28, 0x14, 0xd0, 0xd0, 0x69, + 0x45, 0x68, 0x9d, 0x42, 0xf6, 0xd1, 0x3c, 0x00, + 0xe4, 0xa2, 0x00, 0x00, 0x10, 0x6a, 0x81, 0x42, + 0x04, 0xd1, 0x51, 0x60, 0xd0, 0x69, 0x00, 0x68, + 0x08, 0x60, 0x02, 0xe0, 0xd1, 0x69, 0x09, 0x68, + 0x01, 0x60, 0xd0, 0x69, 0xfc, 0xf7, 0xce, 0xff, + 0x00, 0x28, 0x00, 0xd0, 0x00, 0x24, 0x20, 0x1c, + 0xb0, 0xbd, 0x00, 0x00, 0xa4, 0x6e, 0x01, 0x00, + 0xb0, 0xb5, 0x17, 0x4d, 0x01, 0x24, 0x29, 0x68, + 0x00, 0x29, 0x27, 0xd0, 0x6d, 0x61, 0x29, 0x61, + 0x3c, 0x00, 0x20, 0xa3, 0x00, 0x00, 0x43, 0x68, + 0x04, 0xe0, 0x68, 0x61, 0x00, 0x68, 0x28, 0x61, + 0x00, 0x28, 0x1d, 0xd0, 0x28, 0x69, 0x42, 0x68, + 0x9a, 0x42, 0xf6, 0xd1, 0xaa, 0x69, 0x2b, 0x69, + 0x9a, 0x42, 0x00, 0xd1, 0xa9, 0x61, 0x6a, 0x69, + 0x91, 0x42, 0x03, 0xd1, 0x29, 0x60, 0x00, 0x68, + 0x08, 0x60, 0x06, 0xe0, 0x00, 0x68, 0x10, 0x60, + 0x28, 0x68, 0x00, 0x28, 0x01, 0xd1, 0x07, 0xf0, + 0xcc, 0xfe, 0x3c, 0x00, 0x5c, 0xa3, 0x00, 0x00, + 0x28, 0x69, 0xfc, 0xf7, 0x9d, 0xff, 0x00, 0x28, + 0x02, 0xd0, 0x00, 0x24, 0x00, 0xe0, 0x01, 0x24, + 0x20, 0x1c, 0xb0, 0xbd, 0xa4, 0x6e, 0x01, 0x00, + 0xb0, 0xb5, 0x05, 0x1c, 0x07, 0x48, 0x44, 0x68, + 0x07, 0xe0, 0x21, 0x1c, 0x44, 0x31, 0x28, 0x1c, + 0x00, 0xf0, 0xd6, 0xfc, 0x00, 0x28, 0x02, 0xd1, + 0x64, 0x68, 0x00, 0x2c, 0xf5, 0xd1, 0x20, 0x1c, + 0xb0, 0xbd, 0x00, 0x00, 0x3c, 0x00, 0x98, 0xa3, + 0x00, 0x00, 0x58, 0x75, 0x01, 0x00, 0x70, 0xb5, + 0x0d, 0x1c, 0x14, 0x1c, 0x00, 0x28, 0x0b, 0x4e, + 0x08, 0xd0, 0x70, 0x6e, 0x06, 0x23, 0x58, 0x43, + 0x02, 0x04, 0x12, 0x0c, 0x31, 0x1c, 0x28, 0x1c, + 0x22, 0x80, 0x07, 0xe0, 0x21, 0x88, 0x06, 0x20, + 0xf6, 0xf7, 0xa7, 0xf9, 0x70, 0x66, 0x22, 0x88, + 0x29, 0x1c, 0x30, 0x1c, 0xf6, 0xf7, 0x95, 0xf8, + 0x01, 0x20, 0x70, 0xbd, 0x00, 0x00, 0x3c, 0x00, + 0xd4, 0xa3, 0x00, 0x00, 0x10, 0x79, 0x01, 0x00, + 0x80, 0xb5, 0x03, 0x28, 0x03, 0xd8, 0x04, 0x4a, + 0xc0, 0x00, 0x11, 0x50, 0x80, 0xbd, 0x01, 0x21, + 0x26, 0x20, 0xf6, 0xf7, 0x5b, 0xff, 0x80, 0xbd, + 0x7c, 0x79, 0x01, 0x00, 0xb0, 0xb5, 0x05, 0x1c, + 0xc0, 0x68, 0x01, 0x89, 0x39, 0x29, 0x39, 0xd3, + 0x04, 0x68, 0xa0, 0x79, 0x88, 0x28, 0x35, 0xd1, + 0xe0, 0x79, 0x8e, 0x28, 0x32, 0xd1, 0x20, 0x7a, + 0x3c, 0x00, 0x10, 0xa4, 0x00, 0x00, 0x01, 0x28, + 0x2f, 0xd1, 0x60, 0x7a, 0x03, 0x28, 0x2c, 0xd1, + 0x20, 0x7b, 0x02, 0x28, 0x01, 0xd0, 0xfe, 0x28, + 0x27, 0xd1, 0x60, 0x7b, 0x1d, 0x21, 0x08, 0x40, + 0x01, 0x28, 0x22, 0xd1, 0xa0, 0x7b, 0xc8, 0x21, + 0x08, 0x40, 0x08, 0x28, 0x1d, 0xd1, 0xa8, 0x1d, + 0xfb, 0xf7, 0xe1, 0xf9, 0x00, 0x28, 0x18, 0xd0, + 0x19, 0x20, 0x21, 0x5c, 0x00, 0x29, 0x14, 0xd1, + 0x01, 0x30, 0x3c, 0x00, 0x4c, 0xa4, 0x00, 0x00, + 0x39, 0x28, 0xf9, 0xdb, 0x68, 0x8b, 0x04, 0x21, + 0x08, 0x43, 0x68, 0x83, 0x03, 0xf0, 0xd6, 0xfe, + 0x00, 0x28, 0x09, 0xd1, 0x00, 0x23, 0x00, 0x22, + 0x26, 0x20, 0x04, 0x49, 0x09, 0xf0, 0x92, 0xf9, + 0x03, 0x48, 0x00, 0x68, 0x01, 0xf0, 0x84, 0xf9, + 0xb0, 0xbd, 0x00, 0x00, 0x50, 0xc3, 0x00, 0x00, + 0x0c, 0x79, 0x01, 0x00, 0xb0, 0xb5, 0x08, 0x4c, + 0xa3, 0x68, 0x01, 0x33, 0x3c, 0x00, 0x88, 0xa4, + 0x00, 0x00, 0xa3, 0x60, 0x0c, 0x1c, 0x09, 0xd0, + 0x25, 0x68, 0x00, 0x2d, 0x03, 0xd0, 0x23, 0x7a, + 0x61, 0x68, 0xf5, 0xf7, 0xa3, 0xff, 0x20, 0x1c, + 0xf7, 0xf7, 0xa9, 0xf9, 0xb0, 0xbd, 0x94, 0x79, + 0x01, 0x00, 0x70, 0xb5, 0x04, 0x1c, 0xc0, 0x68, + 0x01, 0x89, 0x05, 0x68, 0x08, 0x29, 0x53, 0xd3, + 0x06, 0x22, 0x28, 0x1c, 0x55, 0x49, 0xf5, 0xf7, + 0x9e, 0xff, 0x00, 0x28, 0x37, 0xd1, 0x3c, 0x00, + 0xc4, 0xa4, 0x00, 0x00, 0xe9, 0x88, 0x52, 0x4e, + 0x04, 0x3e, 0x81, 0x29, 0x24, 0xd1, 0xe5, 0x68, + 0x29, 0x68, 0x08, 0x7a, 0x4a, 0x7a, 0x00, 0x02, + 0x80, 0x18, 0x00, 0x04, 0x00, 0x0c, 0x42, 0x0b, + 0x00, 0x05, 0x00, 0x0d, 0xe2, 0x75, 0x20, 0x83, + 0x4b, 0x89, 0x00, 0x20, 0x42, 0x00, 0xb2, 0x5a, + 0x9a, 0x42, 0x06, 0xd1, 0x28, 0x89, 0x0c, 0x38, + 0x02, 0x0a, 0x00, 0x02, 0x10, 0x43, 0x48, 0x81, + 0x3c, 0x00, 0x00, 0xa5, 0x00, 0x00, 0x02, 0xe0, + 0x01, 0x30, 0x02, 0x28, 0xf1, 0xd3, 0xe0, 0x68, + 0x01, 0x89, 0x0a, 0x39, 0x01, 0x81, 0xe0, 0x68, + 0x01, 0x68, 0x0a, 0x31, 0x1c, 0xe0, 0x00, 0x22, + 0x00, 0x20, 0x43, 0x00, 0xf3, 0x5a, 0x8b, 0x42, + 0x01, 0xd1, 0x01, 0x22, 0x02, 0xe0, 0x01, 0x30, + 0x02, 0x28, 0xf6, 0xd3, 0x00, 0x2a, 0x11, 0xd1, + 0x07, 0xe0, 0x36, 0x49, 0x06, 0x22, 0x06, 0x31, + 0x28, 0x1c, 0x3c, 0x00, 0x3c, 0xa5, 0x00, 0x00, + 0xf5, 0xf7, 0x5e, 0xff, 0x00, 0x28, 0x08, 0xd1, + 0xe0, 0x68, 0x01, 0x89, 0x06, 0x39, 0x01, 0x81, + 0xe0, 0x68, 0x01, 0x68, 0x06, 0x31, 0x01, 0x60, + 0x10, 0xe0, 0xe0, 0x68, 0xff, 0xf7, 0xe2, 0xfc, + 0x0c, 0xe0, 0x02, 0x31, 0x01, 0x81, 0xe0, 0x68, + 0x01, 0x68, 0x02, 0x39, 0x01, 0x60, 0xe0, 0x68, + 0x00, 0x89, 0x02, 0x38, 0x02, 0x0a, 0x00, 0x02, + 0x10, 0x43, 0x08, 0x80, 0x3c, 0x00, 0x78, 0xa5, + 0x00, 0x00, 0xe0, 0x68, 0x03, 0x25, 0x02, 0x89, + 0x01, 0x68, 0x24, 0x4e, 0x02, 0x2a, 0x10, 0xd9, + 0x09, 0x88, 0x08, 0x29, 0x05, 0xd0, 0xc1, 0x23, + 0xdb, 0x00, 0x99, 0x42, 0x03, 0xd1, 0x01, 0x25, + 0x02, 0xe0, 0x00, 0x25, 0x00, 0xe0, 0x02, 0x25, + 0xe9, 0x00, 0x71, 0x58, 0x00, 0x29, 0x00, 0xd1, + 0x02, 0x25, 0xf7, 0xf7, 0x04, 0xf8, 0xe9, 0x00, + 0x89, 0x19, 0x89, 0x88, 0x88, 0x42, 0x3c, 0x00, + 0xb4, 0xa5, 0x00, 0x00, 0x00, 0xd9, 0x03, 0x25, + 0xa1, 0x1d, 0x20, 0x1c, 0xfd, 0xf7, 0x34, 0xfc, + 0x00, 0x28, 0x00, 0xd1, 0x03, 0x25, 0x02, 0x2d, + 0x05, 0xd0, 0x03, 0x2d, 0x07, 0xd1, 0xe0, 0x68, + 0xf6, 0xf7, 0xe2, 0xff, 0x70, 0xbd, 0x20, 0x1c, + 0xfd, 0xf7, 0x1c, 0xfd, 0x70, 0xbd, 0xe0, 0x68, + 0x01, 0x89, 0x02, 0x39, 0x01, 0x81, 0xe0, 0x68, + 0x01, 0x68, 0x02, 0x31, 0x01, 0x60, 0xe8, 0x00, + 0x3c, 0x00, 0xf0, 0xa5, 0x00, 0x00, 0x31, 0x58, + 0x20, 0x1c, 0xf5, 0xf7, 0xf1, 0xfe, 0x00, 0x28, + 0xef, 0xd1, 0xe0, 0x68, 0x01, 0x89, 0x02, 0x31, + 0x01, 0x81, 0xe0, 0x68, 0x01, 0x68, 0x02, 0x39, + 0x01, 0x60, 0xe3, 0xe7, 0x00, 0x00, 0x6a, 0x46, + 0x01, 0x00, 0x7c, 0x79, 0x01, 0x00, 0x70, 0xb5, + 0x0e, 0x1c, 0x04, 0x1c, 0x15, 0x1c, 0xf7, 0xf7, + 0x8c, 0xfb, 0x00, 0x28, 0x2a, 0xd0, 0x1b, 0x49, + 0x08, 0x68, 0x3c, 0x00, 0x2c, 0xa6, 0x00, 0x00, + 0x01, 0x30, 0x08, 0x60, 0x00, 0x2e, 0x0a, 0xd0, + 0x01, 0x2e, 0x0b, 0xd0, 0x02, 0x2e, 0x0f, 0xd1, + 0x20, 0x1c, 0x04, 0xf0, 0xcd, 0xf8, 0x20, 0x1c, + 0xff, 0xf7, 0xd6, 0xfe, 0x0c, 0xe0, 0x08, 0x21, + 0xe0, 0x68, 0x02, 0xe0, 0xc1, 0x21, 0xe0, 0x68, + 0xc9, 0x00, 0x04, 0xf0, 0x35, 0xf9, 0x03, 0xe0, + 0x02, 0x21, 0x26, 0x20, 0xf6, 0xf7, 0x20, 0xfe, + 0xe2, 0x7d, 0xe1, 0x6a, 0x3c, 0x00, 0x68, 0xa6, + 0x00, 0x00, 0x28, 0x1c, 0xfc, 0xf7, 0x95, 0xfb, + 0x20, 0x63, 0x00, 0x20, 0x20, 0x62, 0xa0, 0x62, + 0x20, 0x1c, 0x00, 0xf0, 0x6c, 0xfe, 0x70, 0xbd, + 0xe0, 0x68, 0xf6, 0xf7, 0x8a, 0xff, 0x00, 0x2d, + 0xf9, 0xd0, 0xe3, 0x7d, 0x00, 0x22, 0x01, 0x20, + 0xe1, 0x6a, 0xf5, 0xf7, 0xa7, 0xfe, 0x70, 0xbd, + 0x00, 0x00, 0x94, 0x79, 0x01, 0x00, 0x80, 0xb5, + 0x01, 0x28, 0x04, 0xd1, 0x05, 0x48, 0x3c, 0x00, + 0xa4, 0xa6, 0x00, 0x00, 0x00, 0x68, 0x01, 0xf0, + 0x09, 0xf9, 0x80, 0xbd, 0x03, 0x21, 0x26, 0x20, + 0xf6, 0xf7, 0xf8, 0xfd, 0x80, 0xbd, 0x00, 0x00, + 0x0c, 0x79, 0x01, 0x00, 0xf8, 0xb5, 0x06, 0x1c, + 0x80, 0x79, 0x00, 0x24, 0xc0, 0x07, 0x2d, 0xd5, + 0xf0, 0x68, 0x00, 0x68, 0x41, 0x7a, 0x11, 0x29, + 0x28, 0xd1, 0xc1, 0x88, 0x0a, 0x0a, 0x09, 0x02, + 0x11, 0x43, 0xc9, 0x04, 0x22, 0xd1, 0x01, 0x78, + 0x3c, 0x00, 0xe0, 0xa6, 0x00, 0x00, 0x11, 0x4f, + 0x09, 0x07, 0x89, 0x0e, 0x08, 0x18, 0x41, 0x88, + 0x0a, 0x0a, 0x09, 0x02, 0x11, 0x43, 0x0d, 0x04, + 0x2d, 0x0c, 0x43, 0x2d, 0x39, 0x68, 0x01, 0xd1, + 0xca, 0x07, 0x0e, 0xd4, 0x44, 0x2d, 0x06, 0xd1, + 0xc9, 0x07, 0x04, 0xd5, 0x24, 0x30, 0x00, 0xf0, + 0x22, 0xfb, 0x00, 0x28, 0x05, 0xd0, 0x06, 0x48, + 0x85, 0x42, 0x06, 0xd1, 0x38, 0x68, 0x80, 0x07, + 0x03, 0xd5, 0x3c, 0x00, 0x1c, 0xa7, 0x00, 0x00, + 0x01, 0x24, 0xf0, 0x68, 0xf6, 0xf7, 0x3a, 0xff, + 0x20, 0x1c, 0xf8, 0xbd, 0x7c, 0x5a, 0x01, 0x00, + 0x6c, 0x07, 0x00, 0x00, 0x80, 0xb5, 0x00, 0x28, + 0x07, 0xd0, 0x00, 0x21, 0x26, 0x20, 0x08, 0xf0, + 0x7b, 0xff, 0x02, 0x48, 0x00, 0x68, 0x01, 0xf0, + 0xbb, 0xf8, 0x80, 0xbd, 0x0c, 0x79, 0x01, 0x00, + 0x10, 0xb5, 0x04, 0x1c, 0x09, 0x4a, 0x08, 0x1c, + 0x51, 0x68, 0x01, 0x31, 0x3c, 0x00, 0x58, 0xa7, + 0x00, 0x00, 0x51, 0x60, 0x00, 0x21, 0x21, 0x62, + 0xa1, 0x62, 0xe2, 0x7d, 0xe1, 0x6a, 0xfc, 0xf7, + 0x18, 0xfb, 0x20, 0x63, 0x20, 0x1c, 0xf7, 0xf7, + 0xe6, 0xfa, 0x20, 0x1c, 0x00, 0xf0, 0xef, 0xfd, + 0x10, 0xbd, 0x94, 0x79, 0x01, 0x00, 0x0c, 0xb5, + 0x02, 0x1c, 0x08, 0x1c, 0x00, 0x21, 0x01, 0x91, + 0x00, 0x92, 0x6a, 0x46, 0x01, 0xa9, 0x00, 0xf0, + 0x02, 0xf8, 0x0c, 0xbd, 0x00, 0x00, 0x3c, 0x00, + 0x94, 0xa7, 0x00, 0x00, 0x70, 0xb5, 0x13, 0x68, + 0x00, 0x2b, 0x1e, 0xd0, 0x00, 0x26, 0x0b, 0x68, + 0x00, 0x2b, 0x02, 0xd1, 0x13, 0x68, 0x1b, 0x68, + 0x0b, 0x60, 0x13, 0x68, 0x1c, 0x68, 0x1b, 0x89, + 0xe5, 0x18, 0x08, 0xe0, 0x5c, 0x78, 0x1c, 0x19, + 0x02, 0x34, 0x0c, 0x60, 0x1c, 0x78, 0x84, 0x42, + 0x01, 0xd1, 0x18, 0x1c, 0x70, 0xbd, 0x0b, 0x68, + 0xab, 0x42, 0xf3, 0xd3, 0x13, 0x68, 0xdb, 0x68, + 0x3c, 0x00, 0xd0, 0xa7, 0x00, 0x00, 0x13, 0x60, + 0x0e, 0x60, 0x13, 0x68, 0x00, 0x2b, 0xe1, 0xd1, + 0x00, 0x20, 0x70, 0xbd, 0x00, 0x00, 0x70, 0xb5, + 0x03, 0x1c, 0x20, 0xd0, 0x18, 0x68, 0x1e, 0x89, + 0x05, 0x1c, 0x16, 0xe0, 0x04, 0x78, 0xdd, 0x2c, + 0x10, 0xd1, 0x84, 0x78, 0x00, 0x2c, 0x0d, 0xd1, + 0xc4, 0x78, 0x50, 0x2c, 0x0a, 0xd1, 0x04, 0x79, + 0xf2, 0x2c, 0x07, 0xd1, 0x44, 0x79, 0x8c, 0x42, + 0x04, 0xd1, 0x3c, 0x00, 0x0c, 0xa8, 0x00, 0x00, + 0x02, 0x29, 0x0c, 0xd1, 0x84, 0x79, 0x94, 0x42, + 0x09, 0xd0, 0x44, 0x78, 0x20, 0x18, 0x02, 0x30, + 0x44, 0x1b, 0xb4, 0x42, 0xe5, 0xdb, 0xdb, 0x68, + 0x00, 0x2b, 0xde, 0xd1, 0x00, 0x20, 0x70, 0xbd, + 0x04, 0x49, 0x80, 0xb5, 0x0a, 0x78, 0x0a, 0x20, + 0x00, 0x2a, 0x00, 0xd0, 0x48, 0x6a, 0x00, 0xf0, + 0xd1, 0xf8, 0x80, 0xbd, 0x1c, 0x75, 0x01, 0x00, + 0xb0, 0xb5, 0x17, 0x4c, 0x3c, 0x00, 0x48, 0xa8, + 0x00, 0x00, 0x20, 0x68, 0x00, 0x28, 0x29, 0xd0, + 0x16, 0x4d, 0xe8, 0x69, 0x00, 0x28, 0x25, 0xd1, + 0x01, 0xf0, 0x3f, 0xfa, 0x00, 0x28, 0x21, 0xd1, + 0xff, 0xf7, 0x41, 0xfc, 0x00, 0x28, 0x1d, 0xd1, + 0x20, 0x68, 0xa9, 0x69, 0x40, 0x18, 0x08, 0xf0, + 0xd6, 0xf9, 0x00, 0x28, 0x16, 0xd0, 0x02, 0xf0, + 0x06, 0xfd, 0x21, 0x68, 0x40, 0x18, 0x08, 0xf0, + 0xce, 0xf9, 0x00, 0x28, 0x0e, 0xd0, 0x3c, 0x00, + 0x84, 0xa8, 0x00, 0x00, 0x01, 0x20, 0xe8, 0x61, + 0x00, 0x22, 0x25, 0x21, 0x80, 0x20, 0x08, 0xf0, + 0x8f, 0xff, 0x06, 0x48, 0x29, 0x6a, 0x04, 0xf0, + 0x83, 0xfd, 0x01, 0x21, 0x28, 0x6a, 0x00, 0xf0, + 0x89, 0xff, 0xb0, 0xbd, 0xe8, 0x59, 0x01, 0x00, + 0x1c, 0x75, 0x01, 0x00, 0x34, 0x63, 0x01, 0x00, + 0x70, 0xb5, 0x05, 0x1c, 0x00, 0x24, 0xfa, 0xf7, + 0x0b, 0xff, 0x18, 0x4e, 0x71, 0x6a, 0x40, 0x18, + 0x3c, 0x00, 0xc0, 0xa8, 0x00, 0x00, 0x00, 0xf0, + 0x8e, 0xf8, 0x00, 0x28, 0x0b, 0xd1, 0x04, 0xf0, + 0xfe, 0xfb, 0x00, 0x21, 0x25, 0x20, 0x08, 0xf0, + 0xb0, 0xfe, 0x03, 0x22, 0x29, 0x1c, 0x28, 0x1c, + 0x00, 0xf0, 0xaf, 0xf8, 0x18, 0xe0, 0x70, 0x6a, + 0x44, 0x1e, 0x00, 0xf0, 0x7c, 0xf8, 0x00, 0x28, + 0x12, 0xd1, 0x0c, 0x48, 0x31, 0x6a, 0x04, 0xf0, + 0x56, 0xfd, 0x01, 0x21, 0x30, 0x6a, 0x00, 0xf0, + 0x5c, 0xff, 0x3c, 0x00, 0xfc, 0xa8, 0x00, 0x00, + 0x00, 0x20, 0xfa, 0xf7, 0x0d, 0xfe, 0x06, 0xf0, + 0x03, 0xf8, 0x00, 0x23, 0x00, 0x22, 0x25, 0x20, + 0x05, 0x49, 0x08, 0xf0, 0x3f, 0xff, 0x20, 0x1c, + 0x07, 0xf0, 0xfc, 0xfa, 0x70, 0xbd, 0x00, 0x00, + 0x1c, 0x75, 0x01, 0x00, 0x34, 0x63, 0x01, 0x00, + 0x10, 0x27, 0x00, 0x00, 0x80, 0xb5, 0x01, 0x28, + 0x07, 0xd0, 0x80, 0x28, 0x0d, 0xd1, 0x00, 0x22, + 0x00, 0x21, 0x08, 0x48, 0x3c, 0x00, 0x38, 0xa9, + 0x00, 0x00, 0xf8, 0xf7, 0x9a, 0xfe, 0x80, 0xbd, + 0x01, 0x29, 0x02, 0xd1, 0x06, 0x49, 0x00, 0x20, + 0xc8, 0x61, 0x04, 0xf0, 0xbe, 0xfb, 0x80, 0xbd, + 0x05, 0x21, 0x25, 0x20, 0xf6, 0xf7, 0xa7, 0xfc, + 0x80, 0xbd, 0x61, 0xa9, 0x00, 0x00, 0x1c, 0x75, + 0x01, 0x00, 0x00, 0x21, 0x00, 0x28, 0x80, 0xb5, + 0x01, 0xd1, 0x03, 0x48, 0x41, 0x68, 0x01, 0x22, + 0x25, 0x20, 0x08, 0xf0, 0x2c, 0xfe, 0x3c, 0x00, + 0x74, 0xa9, 0x00, 0x00, 0x80, 0xbd, 0x00, 0x00, + 0xe8, 0x59, 0x01, 0x00, 0x02, 0x49, 0xc8, 0x68, + 0x01, 0x38, 0x48, 0x62, 0x70, 0x47, 0x00, 0x00, + 0x1c, 0x75, 0x01, 0x00, 0x38, 0xb5, 0x03, 0x1c, + 0x08, 0x1c, 0x19, 0x1c, 0x11, 0x4b, 0x06, 0xd0, + 0x01, 0x21, 0x11, 0x80, 0x0a, 0x1c, 0x19, 0x1c, + 0xf5, 0xf7, 0xaa, 0xfd, 0x17, 0xe0, 0x0d, 0x4d, + 0x01, 0x1c, 0x2c, 0x78, 0x12, 0x88, 0x18, 0x1c, + 0x3c, 0x00, 0xb0, 0xa9, 0x00, 0x00, 0xf5, 0xf7, + 0xa2, 0xfd, 0x28, 0x78, 0x84, 0x42, 0x0d, 0xd0, + 0x00, 0x23, 0x6b, 0x61, 0x00, 0x28, 0x03, 0xd0, + 0x00, 0x20, 0x07, 0xf0, 0xa4, 0xfa, 0x05, 0xe0, + 0x00, 0x22, 0x00, 0x21, 0x00, 0x20, 0x00, 0x92, + 0xf8, 0xf7, 0x23, 0xfc, 0x01, 0x20, 0x38, 0xbd, + 0x00, 0x00, 0x1c, 0x75, 0x01, 0x00, 0x70, 0xb5, + 0x04, 0x1c, 0x01, 0x26, 0x08, 0xf0, 0xe1, 0xf9, + 0x05, 0x1c, 0x3c, 0x00, 0xec, 0xa9, 0x00, 0x00, + 0x00, 0x20, 0xfa, 0xf7, 0x8b, 0xfd, 0x44, 0x43, + 0x02, 0xf0, 0x40, 0xfc, 0x02, 0xf0, 0x3e, 0xfc, + 0x01, 0x1c, 0x23, 0x1c, 0x00, 0x22, 0x28, 0x1c, + 0x08, 0xf0, 0x7c, 0xfa, 0x00, 0x28, 0x13, 0xd1, + 0x0a, 0x48, 0x23, 0x1c, 0x00, 0x22, 0x81, 0x69, + 0x28, 0x1c, 0x08, 0xf0, 0x73, 0xfa, 0x00, 0x28, + 0x0a, 0xd1, 0xf8, 0xf7, 0x19, 0xfc, 0x01, 0x1c, + 0x23, 0x1c, 0x00, 0x22, 0x3c, 0x00, 0x28, 0xaa, + 0x00, 0x00, 0x28, 0x1c, 0x08, 0xf0, 0x69, 0xfa, + 0x00, 0x28, 0x00, 0xd1, 0x00, 0x26, 0x30, 0x1c, + 0x70, 0xbd, 0x1c, 0x75, 0x01, 0x00, 0x70, 0xb5, + 0x0d, 0x1c, 0x04, 0x1c, 0x16, 0x1c, 0x07, 0xf0, + 0x76, 0xf9, 0x00, 0x28, 0x0d, 0xd0, 0xfa, 0xf7, + 0x52, 0xfe, 0x00, 0x28, 0x09, 0xd0, 0xff, 0x30, + 0x01, 0x30, 0x43, 0x68, 0x00, 0x2b, 0x04, 0xd0, + 0x22, 0x1c, 0x29, 0x1c, 0x30, 0x1c, 0x3c, 0x00, + 0x64, 0xaa, 0x00, 0x00, 0xf5, 0xf7, 0xbb, 0xfc, + 0x70, 0xbd, 0x00, 0x00, 0x80, 0xb5, 0x01, 0x21, + 0x1d, 0x20, 0x08, 0xf0, 0xdf, 0xfd, 0x07, 0x4a, + 0x07, 0x48, 0x11, 0x69, 0x01, 0x60, 0x51, 0x69, + 0x41, 0x60, 0x06, 0x49, 0x49, 0x68, 0x81, 0x60, + 0x00, 0x21, 0xc1, 0x60, 0x03, 0xf0, 0x74, 0xfc, + 0x80, 0xbd, 0x00, 0x00, 0x28, 0x61, 0x01, 0x00, + 0x48, 0x75, 0x01, 0x00, 0x90, 0x5c, 0x01, 0x00, + 0x3c, 0x00, 0xa0, 0xaa, 0x00, 0x00, 0x70, 0xb5, + 0x04, 0x1c, 0x40, 0x6b, 0x00, 0x28, 0x35, 0xd0, + 0x1d, 0x4d, 0x00, 0x26, 0x28, 0x78, 0x00, 0x28, + 0x24, 0xd0, 0x41, 0x20, 0x00, 0x5d, 0x00, 0x28, + 0x03, 0xd1, 0x08, 0xf0, 0x76, 0xf9, 0xa8, 0x61, + 0x1b, 0xe0, 0x69, 0x69, 0x01, 0x31, 0x69, 0x61, + 0xa8, 0x68, 0x00, 0x28, 0x08, 0xd0, 0x81, 0x42, + 0x06, 0xd1, 0x20, 0x69, 0x01, 0x1c, 0x10, 0x31, + 0x04, 0x30, 0x3c, 0x00, 0xdc, 0xaa, 0x00, 0x00, + 0x82, 0x22, 0xff, 0xf7, 0xad, 0xff, 0x68, 0x68, + 0x00, 0x28, 0x0a, 0xd0, 0x69, 0x69, 0x81, 0x42, + 0x07, 0xd1, 0x20, 0x69, 0x01, 0x1c, 0x10, 0x31, + 0x04, 0x30, 0x02, 0x22, 0xff, 0xf7, 0xa0, 0xff, + 0x6e, 0x61, 0x68, 0x78, 0x05, 0x21, 0x08, 0x40, + 0x08, 0xd0, 0x07, 0x48, 0x00, 0x78, 0x0e, 0x28, + 0x03, 0xd3, 0x60, 0x34, 0xe0, 0x79, 0xfb, 0xf7, + 0xcf, 0xff, 0x70, 0xbd, 0x3c, 0x00, 0x18, 0xab, + 0x00, 0x00, 0x03, 0x48, 0x06, 0x60, 0x70, 0xbd, + 0x00, 0x00, 0x1c, 0x75, 0x01, 0x00, 0x10, 0x67, + 0x01, 0x00, 0xd4, 0x7e, 0x01, 0x00, 0x80, 0x02, + 0x70, 0x47, 0x14, 0x23, 0x30, 0xb5, 0x09, 0x4d, + 0x4b, 0x43, 0x5b, 0x19, 0x5b, 0x68, 0x08, 0x24, + 0x00, 0x2b, 0x00, 0xd1, 0x02, 0x24, 0x38, 0x23, + 0x5a, 0x43, 0x05, 0x4b, 0x89, 0x00, 0xd2, 0x18, + 0x51, 0x5a, 0x02, 0x68, 0x09, 0x19, 0x3c, 0x00, + 0x54, 0xab, 0x00, 0x00, 0x51, 0x1a, 0x01, 0x60, + 0x30, 0xbd, 0x00, 0x00, 0x74, 0x40, 0x01, 0x00, + 0x8c, 0x41, 0x01, 0x00, 0xf8, 0xb5, 0x07, 0x1c, + 0x2c, 0x48, 0x14, 0x1c, 0x2c, 0x4a, 0x48, 0x43, + 0x86, 0x46, 0x80, 0x18, 0x80, 0x0d, 0x84, 0x46, + 0x2b, 0x48, 0x2a, 0x4a, 0x06, 0x26, 0x1d, 0x1c, + 0x48, 0x43, 0x4a, 0x43, 0x0e, 0x2f, 0x40, 0xd2, + 0x01, 0xa3, 0xdb, 0x5d, 0x5b, 0x00, 0x9f, 0x44, + 0x3c, 0x00, 0x90, 0xab, 0x00, 0x00, 0x06, 0x08, + 0x0a, 0x0f, 0x14, 0x18, 0x1d, 0x20, 0x27, 0x24, + 0x27, 0x2b, 0x2f, 0x31, 0xc8, 0x00, 0x1f, 0xe0, + 0x88, 0x00, 0x1d, 0xe0, 0x21, 0x49, 0x70, 0x46, + 0x40, 0x18, 0x00, 0x0d, 0x18, 0xe0, 0x1f, 0x4a, + 0x80, 0x18, 0x80, 0x0d, 0x40, 0x18, 0x21, 0xe0, + 0x1e, 0x48, 0x10, 0x18, 0x00, 0x0d, 0x1d, 0xe0, + 0x1d, 0x49, 0x70, 0x46, 0x40, 0x18, 0x40, 0x0d, + 0x0a, 0xe0, 0x3c, 0x00, 0xcc, 0xab, 0x00, 0x00, + 0x1b, 0x49, 0x40, 0x18, 0x01, 0xe0, 0x1b, 0x48, + 0x10, 0x18, 0x40, 0x0d, 0x11, 0xe0, 0x1a, 0x49, + 0x40, 0x18, 0x05, 0xe0, 0x60, 0x46, 0x20, 0x80, + 0x00, 0x20, 0x16, 0xe0, 0x17, 0x48, 0x10, 0x18, + 0x80, 0x0d, 0x06, 0xe0, 0x16, 0x49, 0x02, 0xe0, + 0x16, 0x48, 0x48, 0x43, 0x16, 0x49, 0x40, 0x18, + 0xc0, 0x0d, 0x03, 0x30, 0x80, 0x08, 0x80, 0x00, + 0x20, 0x80, 0x2e, 0x80, 0x3c, 0x00, 0x08, 0xac, + 0x00, 0x00, 0xf8, 0xbd, 0xff, 0x21, 0xff, 0x20, + 0xf6, 0xf7, 0x49, 0xfb, 0x00, 0x20, 0x20, 0x80, + 0x28, 0x80, 0xf6, 0xe7, 0x00, 0x00, 0xd1, 0x45, + 0x17, 0x00, 0xff, 0xff, 0x3f, 0x00, 0xe3, 0x38, + 0x0e, 0x00, 0x55, 0x55, 0x15, 0x00, 0xff, 0xff, + 0x0f, 0x00, 0xa9, 0xaa, 0x2a, 0x01, 0x70, 0x1c, + 0x37, 0x00, 0xff, 0xff, 0x1f, 0x00, 0xcb, 0xcc, + 0x4c, 0x00, 0x70, 0x1c, 0x47, 0x00, 0x3c, 0x00, + 0x44, 0xac, 0x00, 0x00, 0xa9, 0xaa, 0x7a, 0x00, + 0x70, 0x1c, 0x67, 0x00, 0xa9, 0xaa, 0xba, 0x00, + 0x84, 0xf6, 0x12, 0x00, 0xec, 0x25, 0xb4, 0x00, + 0x04, 0x49, 0x00, 0x28, 0x01, 0xd0, 0x09, 0x22, + 0x00, 0xe0, 0x14, 0x22, 0x4a, 0x80, 0x48, 0x60, + 0x70, 0x47, 0x00, 0x00, 0xa4, 0x69, 0x01, 0x00, + 0x80, 0xb5, 0x06, 0x22, 0xf5, 0xf7, 0x40, 0xfc, + 0x80, 0xbd, 0x00, 0x00, 0xbc, 0xb5, 0x15, 0x1c, + 0x3c, 0x00, 0x80, 0xac, 0x00, 0x00, 0x04, 0x1c, + 0x04, 0x31, 0x09, 0x04, 0x09, 0x0c, 0x01, 0xaa, + 0x6b, 0x46, 0xff, 0xf7, 0x6a, 0xff, 0x38, 0x20, + 0x06, 0x49, 0x68, 0x43, 0x40, 0x18, 0xa1, 0x00, + 0x40, 0x5a, 0x00, 0xab, 0x99, 0x88, 0x40, 0x18, + 0x19, 0x88, 0x40, 0x18, 0x00, 0x04, 0x00, 0x0c, + 0xbc, 0xbd, 0x8c, 0x41, 0x01, 0x00, 0xbc, 0xb5, + 0x04, 0x1c, 0x15, 0x1c, 0x01, 0xaa, 0x6b, 0x46, + 0xff, 0xf7, 0x3c, 0x00, 0xbc, 0xac, 0x00, 0x00, + 0x53, 0xff, 0x38, 0x20, 0x05, 0x49, 0x68, 0x43, + 0x40, 0x18, 0xa1, 0x00, 0x40, 0x5a, 0x00, 0xab, + 0x99, 0x88, 0x40, 0x18, 0x00, 0x04, 0x00, 0x0c, + 0xbc, 0xbd, 0x00, 0x00, 0x8c, 0x41, 0x01, 0x00, + 0x80, 0xb5, 0x00, 0x28, 0x0f, 0xd0, 0x00, 0x29, + 0x0d, 0xd0, 0x02, 0x78, 0x0b, 0x78, 0x9a, 0x42, + 0x09, 0xd1, 0xff, 0x2a, 0x05, 0xd0, 0x42, 0x78, + 0x02, 0x32, 0xf5, 0xf7, 0x3c, 0x00, 0xf8, 0xac, + 0x00, 0x00, 0x81, 0xfb, 0x00, 0x28, 0x01, 0xd1, + 0x01, 0x20, 0x80, 0xbd, 0x00, 0x20, 0x80, 0xbd, + 0x00, 0x00, 0x80, 0xb5, 0x06, 0x22, 0x04, 0x49, + 0xf5, 0xf7, 0x75, 0xfb, 0x00, 0x28, 0x01, 0xd1, + 0x01, 0x20, 0x80, 0xbd, 0x00, 0x20, 0x80, 0xbd, + 0x00, 0x00, 0x5e, 0x40, 0x01, 0x00, 0x01, 0x1c, + 0x49, 0x78, 0x01, 0x20, 0x00, 0x29, 0x00, 0xd0, + 0x00, 0x20, 0x70, 0x47, 0x00, 0x00, 0x3c, 0x00, + 0x34, 0xad, 0x00, 0x00, 0x80, 0xb5, 0x06, 0x22, + 0xf5, 0xf7, 0x60, 0xfb, 0x00, 0x28, 0x01, 0xd1, + 0x01, 0x20, 0x80, 0xbd, 0x00, 0x20, 0x80, 0xbd, + 0x80, 0xb5, 0xff, 0xf7, 0xc7, 0xff, 0x80, 0xbd, + 0x80, 0xb5, 0x06, 0x22, 0x04, 0x49, 0xf5, 0xf7, + 0x51, 0xfb, 0x00, 0x28, 0x01, 0xd1, 0x01, 0x20, + 0x80, 0xbd, 0x00, 0x20, 0x80, 0xbd, 0x00, 0x00, + 0x12, 0x61, 0x01, 0x00, 0x01, 0x1c, 0x80, 0x20, + 0x3c, 0x00, 0x70, 0xad, 0x00, 0x00, 0x81, 0x43, + 0x8a, 0x08, 0x0e, 0x20, 0x1c, 0x2a, 0x10, 0xb5, + 0x06, 0xd2, 0x03, 0x4c, 0x52, 0x00, 0xa3, 0x5c, + 0x8b, 0x42, 0x01, 0xd1, 0x10, 0x19, 0x40, 0x78, + 0x10, 0xbd, 0xfc, 0x41, 0x01, 0x00, 0x14, 0x23, + 0x02, 0x49, 0x58, 0x43, 0x40, 0x18, 0x40, 0x68, + 0x70, 0x47, 0x74, 0x40, 0x01, 0x00, 0x20, 0x22, + 0x01, 0x1c, 0x80, 0xb5, 0x02, 0x48, 0xf5, 0xf7, + 0x52, 0xfd, 0x3c, 0x00, 0xac, 0xad, 0x00, 0x00, + 0x80, 0xbd, 0x00, 0x00, 0x48, 0x61, 0x01, 0x00, + 0x08, 0x06, 0x00, 0x0e, 0x02, 0x28, 0x01, 0xd1, + 0x00, 0x20, 0x70, 0x47, 0x01, 0x20, 0x70, 0x47, + 0x00, 0x29, 0x0c, 0xd0, 0x07, 0x49, 0x09, 0x68, + 0x00, 0x29, 0x08, 0xd0, 0x14, 0x23, 0x06, 0x49, + 0x58, 0x43, 0x40, 0x18, 0xc0, 0x68, 0x00, 0x28, + 0x01, 0xd0, 0x01, 0x20, 0x70, 0x47, 0x00, 0x20, + 0x70, 0x47, 0x00, 0x00, 0x3c, 0x00, 0xe8, 0xad, + 0x00, 0x00, 0xac, 0x69, 0x01, 0x00, 0x74, 0x40, + 0x01, 0x00, 0x10, 0xb5, 0x04, 0x1c, 0x06, 0x22, + 0x01, 0x1c, 0x04, 0x48, 0xf5, 0xf7, 0x7d, 0xfb, + 0x06, 0x22, 0x21, 0x1c, 0x03, 0x48, 0xf5, 0xf7, + 0x78, 0xfb, 0x10, 0xbd, 0x00, 0x00, 0x12, 0x61, + 0x01, 0x00, 0x40, 0x80, 0x07, 0x00, 0x00, 0x29, + 0x01, 0xd1, 0x00, 0x20, 0x70, 0x47, 0x38, 0x23, + 0x5a, 0x43, 0x07, 0x4b, 0xd2, 0x18, 0x3c, 0x00, + 0x24, 0xae, 0x00, 0x00, 0x83, 0x00, 0xd2, 0x5a, + 0x14, 0x23, 0x58, 0x43, 0x05, 0x4b, 0xc0, 0x18, + 0x40, 0x88, 0x10, 0x18, 0x08, 0x1a, 0x0a, 0x38, + 0x00, 0x04, 0x00, 0x0c, 0x70, 0x47, 0x00, 0x00, + 0x8c, 0x41, 0x01, 0x00, 0x74, 0x40, 0x01, 0x00, + 0xf8, 0xb5, 0x07, 0x1c, 0x08, 0x1c, 0x16, 0x1c, + 0x1c, 0x1c, 0x19, 0x1c, 0x00, 0xf0, 0x5a, 0xf8, + 0x05, 0x1c, 0x14, 0x35, 0x22, 0x1c, 0x31, 0x1c, + 0x3c, 0x00, 0x60, 0xae, 0x00, 0x00, 0x38, 0x1c, + 0xff, 0xf7, 0x0b, 0xff, 0x28, 0x18, 0x00, 0x04, + 0x00, 0x0c, 0xf8, 0xbd, 0x00, 0x00, 0x00, 0xb5, + 0x00, 0xf0, 0x4b, 0xf8, 0x0a, 0x30, 0x00, 0x04, + 0x00, 0x0c, 0x00, 0xbd, 0x00, 0x00, 0xf8, 0xb5, + 0x07, 0x1c, 0x08, 0x1c, 0x16, 0x1c, 0x1c, 0x1c, + 0x19, 0x1c, 0x00, 0xf0, 0x3e, 0xf8, 0x45, 0x00, + 0x1e, 0x35, 0x22, 0x1c, 0x31, 0x1c, 0x38, 0x1c, + 0xff, 0xf7, 0x3c, 0x00, 0x9c, 0xae, 0x00, 0x00, + 0xef, 0xfe, 0x28, 0x18, 0x00, 0x04, 0x00, 0x0c, + 0xf8, 0xbd, 0x00, 0x00, 0xff, 0xb5, 0x0f, 0x1c, + 0x81, 0xb0, 0x0a, 0xa9, 0x14, 0x1c, 0x1e, 0x1c, + 0x03, 0xc9, 0x00, 0xf0, 0x29, 0xf8, 0x05, 0x1c, + 0x1e, 0x35, 0x21, 0x1c, 0x30, 0x1c, 0x00, 0xf0, + 0x23, 0xf8, 0x2d, 0x18, 0x22, 0x1c, 0x39, 0x1c, + 0x01, 0x98, 0xff, 0xf7, 0xd5, 0xfe, 0x28, 0x18, + 0x00, 0x04, 0x00, 0x0c, 0x3c, 0x00, 0xd8, 0xae, + 0x00, 0x00, 0x05, 0xb0, 0xf0, 0xbd, 0x0a, 0x49, + 0x80, 0xb5, 0x09, 0x88, 0x09, 0x29, 0x04, 0xd0, + 0x14, 0x29, 0x07, 0xd1, 0x01, 0x01, 0x80, 0x00, + 0x00, 0xe0, 0xc1, 0x00, 0x08, 0x18, 0x00, 0x04, + 0x00, 0x0c, 0x80, 0xbd, 0xff, 0x21, 0xff, 0x20, + 0xf6, 0xf7, 0xd1, 0xf9, 0x00, 0x20, 0x80, 0xbd, + 0x00, 0x00, 0xa6, 0x69, 0x01, 0x00, 0x38, 0x23, + 0x59, 0x43, 0x06, 0x4a, 0x14, 0x23, 0x3c, 0x00, + 0x14, 0xaf, 0x00, 0x00, 0x89, 0x18, 0x82, 0x00, + 0x89, 0x5a, 0x05, 0x4a, 0x58, 0x43, 0x80, 0x18, + 0x40, 0x88, 0x08, 0x18, 0x00, 0x04, 0x00, 0x0c, + 0x70, 0x47, 0x00, 0x00, 0x8c, 0x41, 0x01, 0x00, + 0x74, 0x40, 0x01, 0x00, 0x02, 0x48, 0x03, 0x49, + 0x00, 0x68, 0x40, 0x00, 0x08, 0x5a, 0x70, 0x47, + 0xa8, 0x69, 0x01, 0x00, 0x54, 0x40, 0x01, 0x00, + 0x0a, 0x20, 0x70, 0x47, 0x10, 0xb5, 0x04, 0x1c, + 0x3c, 0x00, 0x50, 0xaf, 0x00, 0x00, 0xfd, 0xf7, + 0x62, 0xff, 0x20, 0x1c, 0x10, 0xbd, 0xb0, 0xb5, + 0x04, 0x1c, 0xc0, 0x68, 0x05, 0x68, 0xa0, 0x1d, + 0xff, 0xf7, 0xf5, 0xfe, 0x00, 0x28, 0x18, 0xd0, + 0x21, 0x1c, 0x14, 0x31, 0x20, 0x1c, 0x08, 0xf0, + 0xe2, 0xfd, 0x00, 0x28, 0x11, 0xd0, 0x29, 0x88, + 0x09, 0x48, 0x20, 0x22, 0x81, 0x82, 0x69, 0x88, + 0x01, 0x83, 0xa9, 0x88, 0x06, 0x35, 0x41, 0x83, + 0xc5, 0x61, 0x3c, 0x00, 0x8c, 0xaf, 0x00, 0x00, + 0x30, 0x21, 0x09, 0x5d, 0x11, 0x54, 0x61, 0x6b, + 0x41, 0x62, 0x01, 0x20, 0xf7, 0xf7, 0x28, 0xf8, + 0x20, 0x1c, 0xb0, 0xbd, 0x70, 0x7c, 0x01, 0x00, + 0x70, 0xb5, 0x04, 0x1c, 0xc0, 0x68, 0x21, 0x1c, + 0x14, 0x31, 0x05, 0x68, 0x20, 0x1c, 0x08, 0xf0, + 0xc1, 0xfd, 0x00, 0x28, 0x08, 0xd0, 0x05, 0x4e, + 0xf0, 0x68, 0x02, 0xf0, 0xcf, 0xfd, 0x28, 0x88, + 0xf0, 0x82, 0x03, 0x20, 0x3c, 0x00, 0xc8, 0xaf, + 0x00, 0x00, 0xf7, 0xf7, 0x10, 0xf8, 0x20, 0x1c, + 0x70, 0xbd, 0x70, 0x7c, 0x01, 0x00, 0x3e, 0xb5, + 0x04, 0x1c, 0xc0, 0x68, 0x05, 0x68, 0xa0, 0x1d, + 0xff, 0xf7, 0xb7, 0xfe, 0x00, 0x28, 0x21, 0xd0, + 0x21, 0x1c, 0x14, 0x31, 0x20, 0x1c, 0x02, 0xaa, + 0x08, 0xf0, 0x77, 0xfd, 0x00, 0x28, 0x19, 0xd0, + 0x02, 0x98, 0x4b, 0x21, 0x09, 0x5c, 0x00, 0x29, + 0x10, 0xd0, 0x01, 0x29, 0x14, 0xd0, 0x3c, 0x00, + 0x04, 0xb0, 0x00, 0x00, 0x02, 0x29, 0x0c, 0xd1, + 0x29, 0x88, 0x0d, 0x20, 0x00, 0xab, 0x18, 0x80, + 0x20, 0x1c, 0x03, 0xf0, 0x51, 0xf8, 0x01, 0x90, + 0x68, 0x46, 0x02, 0xf0, 0x5d, 0xfa, 0xf6, 0xf7, + 0xb5, 0xf8, 0x00, 0x21, 0x02, 0x98, 0x06, 0xf0, + 0x9f, 0xfe, 0x20, 0x1c, 0x3e, 0xbd, 0x07, 0xf0, + 0x29, 0xf8, 0x02, 0x98, 0x00, 0x21, 0x80, 0x69, + 0xc2, 0x07, 0xd2, 0x0f, 0x04, 0x20, 0xf6, 0xf7, + 0x3c, 0x00, 0x40, 0xb0, 0x00, 0x00, 0x7f, 0xff, + 0xee, 0xe7, 0x10, 0xb5, 0x04, 0x1c, 0xfd, 0xf7, + 0xe6, 0xfe, 0x20, 0x1c, 0x10, 0xbd, 0x3e, 0xb5, + 0x05, 0x1c, 0x00, 0xf0, 0x40, 0xfe, 0x00, 0x28, + 0x15, 0xd1, 0x28, 0x1c, 0x14, 0x30, 0xfa, 0xf7, + 0xce, 0xfb, 0x00, 0x28, 0x0f, 0xd0, 0x05, 0x21, + 0x28, 0x69, 0xff, 0xf7, 0x86, 0xfb, 0x04, 0x1c, + 0x09, 0xd0, 0x05, 0x22, 0x21, 0x1c, 0x68, 0x46, + 0xf5, 0xf7, 0x3c, 0x00, 0x7c, 0xb0, 0x00, 0x00, + 0x3d, 0xfa, 0x05, 0x34, 0x02, 0x94, 0x68, 0x46, + 0x03, 0xf0, 0x1a, 0xfb, 0x2a, 0x1c, 0x0d, 0x21, + 0x8f, 0x20, 0x08, 0xf0, 0x8f, 0xfb, 0x00, 0x20, + 0x3e, 0xbd, 0x00, 0x00, 0x10, 0xb5, 0x04, 0x1c, + 0xfa, 0xf7, 0x98, 0xf8, 0x20, 0x1c, 0x05, 0xf0, + 0xe5, 0xf8, 0x20, 0x1c, 0x10, 0xbd, 0x00, 0x00, + 0xb0, 0xb5, 0x04, 0x1c, 0x00, 0x69, 0x00, 0x21, + 0x94, 0xb0, 0xff, 0xf7, 0x3c, 0x00, 0xb8, 0xb0, + 0x00, 0x00, 0x61, 0xfb, 0x69, 0x46, 0xfb, 0xf7, + 0x26, 0xf8, 0x00, 0x28, 0x1e, 0xd0, 0x00, 0x98, + 0xfa, 0xf7, 0x29, 0xfa, 0x01, 0x1c, 0x01, 0xa8, + 0x02, 0xf0, 0xd7, 0xf9, 0x00, 0x98, 0xfa, 0xf7, + 0xd2, 0xf9, 0x04, 0x90, 0x05, 0x20, 0x09, 0xad, + 0x68, 0x72, 0x02, 0xa8, 0x21, 0x1c, 0x06, 0x22, + 0x02, 0x30, 0xf5, 0xf7, 0x06, 0xfa, 0x01, 0x20, + 0x08, 0x90, 0x21, 0x6a, 0x0a, 0x90, 0x3c, 0x00, + 0xf4, 0xb0, 0x00, 0x00, 0x28, 0x20, 0x09, 0x91, + 0x00, 0x5d, 0x28, 0x72, 0x01, 0xa8, 0x00, 0xf0, + 0x69, 0xf8, 0x20, 0x1c, 0x14, 0xb0, 0xb0, 0xbd, + 0xff, 0xb5, 0x16, 0x1c, 0x1f, 0x1c, 0x81, 0xb0, + 0x0a, 0x9d, 0x4c, 0x20, 0xf6, 0xf7, 0x90, 0xfb, + 0x04, 0x1c, 0x14, 0x30, 0x06, 0x22, 0x02, 0x99, + 0xf5, 0xf7, 0xea, 0xf9, 0x20, 0x1c, 0x06, 0x22, + 0x01, 0x99, 0xf5, 0xf7, 0xe5, 0xf9, 0x28, 0x20, + 0x3c, 0x00, 0x30, 0xb1, 0x00, 0x00, 0x00, 0x21, + 0x06, 0x55, 0xe1, 0x60, 0x27, 0x62, 0x00, 0x2d, + 0x01, 0xd0, 0x8e, 0x20, 0x00, 0xe0, 0x8d, 0x20, + 0x22, 0x1c, 0x0d, 0x21, 0x08, 0xf0, 0x33, 0xfb, + 0x05, 0xb0, 0xf0, 0xbd, 0x00, 0x00, 0xb0, 0xb5, + 0x05, 0x1c, 0x4c, 0x20, 0xf6, 0xf7, 0x6f, 0xfb, + 0x04, 0x1c, 0x4c, 0x22, 0x29, 0x1c, 0xf5, 0xf7, + 0x26, 0xfa, 0x29, 0x20, 0x40, 0x5d, 0x0d, 0x28, + 0x2c, 0xd2, 0x3c, 0x00, 0x6c, 0xb1, 0x00, 0x00, + 0x01, 0xa3, 0x1b, 0x5c, 0x5b, 0x00, 0x9f, 0x44, + 0x28, 0x1a, 0x28, 0x1e, 0x06, 0x0a, 0x28, 0x28, + 0x0e, 0x28, 0x22, 0x12, 0x16, 0x00, 0x22, 0x1c, + 0x0d, 0x21, 0x8c, 0x20, 0x1a, 0xe0, 0x22, 0x1c, + 0x0d, 0x21, 0x83, 0x20, 0x16, 0xe0, 0x22, 0x1c, + 0x0d, 0x21, 0x84, 0x20, 0x12, 0xe0, 0x22, 0x1c, + 0x0d, 0x21, 0x85, 0x20, 0x0e, 0xe0, 0x22, 0x1c, + 0x0d, 0x21, 0x86, 0x20, 0x3c, 0x00, 0xa8, 0xb1, + 0x00, 0x00, 0x0a, 0xe0, 0x22, 0x1c, 0x0d, 0x21, + 0x87, 0x20, 0x06, 0xe0, 0x22, 0x1c, 0x0d, 0x21, + 0x89, 0x20, 0x02, 0xe0, 0x22, 0x1c, 0x0d, 0x21, + 0x8b, 0x20, 0x08, 0xf0, 0xf6, 0xfa, 0xb0, 0xbd, + 0xe8, 0x68, 0xf6, 0xf7, 0xe6, 0xf9, 0x20, 0x1c, + 0xf6, 0xf7, 0x11, 0xfb, 0xb0, 0xbd, 0xfe, 0xb5, + 0x05, 0x1c, 0x90, 0x20, 0xf6, 0xf7, 0x2d, 0xfb, + 0x04, 0x1c, 0x90, 0x21, 0xf5, 0xf7, 0x3c, 0x00, + 0xe4, 0xb1, 0x00, 0x00, 0x5b, 0xf9, 0x37, 0x4e, + 0x01, 0x27, 0xf0, 0x69, 0x04, 0x28, 0x03, 0xd9, + 0x70, 0x6b, 0x01, 0x30, 0x70, 0x63, 0x4d, 0xe0, + 0x33, 0x48, 0xb1, 0x6b, 0x04, 0xf0, 0xd0, 0xf8, + 0x01, 0x20, 0x20, 0x62, 0xa8, 0x7e, 0x21, 0x1c, + 0x80, 0x31, 0x02, 0x91, 0x08, 0x70, 0x22, 0x1c, + 0x60, 0x32, 0x01, 0x92, 0x00, 0x20, 0x2f, 0x1c, + 0x20, 0x37, 0x90, 0x72, 0x78, 0x7a, 0x2b, 0x1c, + 0x3c, 0x00, 0x20, 0xb2, 0x00, 0x00, 0x14, 0x33, + 0xd0, 0x72, 0xe8, 0x68, 0xaa, 0x1d, 0xa0, 0x60, + 0xe8, 0x6b, 0x48, 0x60, 0x44, 0x20, 0x40, 0x5d, + 0x08, 0x72, 0x29, 0x1c, 0x20, 0x1c, 0x05, 0xf0, + 0xaa, 0xfc, 0x68, 0x6a, 0x00, 0x28, 0x0a, 0xd1, + 0x01, 0x9a, 0x20, 0x1c, 0x93, 0x7a, 0x02, 0x99, + 0x22, 0x1c, 0x70, 0x32, 0x58, 0x30, 0x09, 0x78, + 0xfa, 0xf7, 0xdb, 0xf9, 0x06, 0xe0, 0x3a, 0x7a, + 0x23, 0x1c, 0x3c, 0x00, 0x5c, 0xb2, 0x00, 0x00, + 0xe8, 0x69, 0x29, 0x6a, 0x70, 0x33, 0xfd, 0xf7, + 0x8d, 0xf9, 0x30, 0x20, 0x40, 0x5d, 0x18, 0x49, + 0x07, 0x28, 0x0b, 0xd1, 0x58, 0x20, 0x00, 0x5d, + 0xc0, 0x07, 0xc0, 0x17, 0x01, 0x30, 0xe0, 0x61, + 0x00, 0x20, 0x20, 0x61, 0x20, 0x1c, 0xf7, 0xf7, + 0x3f, 0xff, 0x18, 0xe0, 0x01, 0x22, 0x20, 0x1c, + 0x05, 0xf0, 0xac, 0xff, 0x07, 0x1c, 0x12, 0xd0, + 0x03, 0xf0, 0x06, 0xff, 0x3c, 0x00, 0x98, 0xb2, + 0x00, 0x00, 0xf3, 0x6d, 0x00, 0x2b, 0x06, 0xd0, + 0x60, 0x68, 0x20, 0x30, 0x82, 0x7b, 0x61, 0x6b, + 0x38, 0x1c, 0xf5, 0xf7, 0x99, 0xf8, 0xe8, 0x68, + 0xf6, 0xf7, 0x73, 0xf9, 0x20, 0x1c, 0xf6, 0xf7, + 0x9e, 0xfa, 0xfe, 0xbd, 0xf0, 0x69, 0x01, 0x30, + 0xf0, 0x61, 0xfa, 0xe7, 0x00, 0x00, 0xc4, 0x69, + 0x01, 0x00, 0x34, 0x63, 0x01, 0x00, 0x05, 0x31, + 0x00, 0x00, 0x70, 0xb5, 0x06, 0x1c, 0x3c, 0x00, + 0xd4, 0xb2, 0x00, 0x00, 0x0d, 0x1c, 0x09, 0x04, + 0x09, 0x0c, 0x00, 0x20, 0xf6, 0xf7, 0x7c, 0xf9, + 0x04, 0x1c, 0x2a, 0x1c, 0x31, 0x1c, 0x00, 0x68, + 0xf5, 0xf7, 0x06, 0xf9, 0x20, 0x1c, 0x70, 0xbd, + 0x40, 0x88, 0x70, 0x47, 0x03, 0x78, 0x1b, 0x07, + 0x9b, 0x0f, 0x0b, 0x70, 0x00, 0x78, 0x00, 0x09, + 0x10, 0x70, 0x70, 0x47, 0x04, 0x30, 0x70, 0x47, + 0x04, 0x30, 0x70, 0x47, 0xd4, 0x21, 0x01, 0x70, + 0x3c, 0x00, 0x10, 0xb3, 0x00, 0x00, 0x00, 0x21, + 0x41, 0x70, 0x70, 0x47, 0x00, 0x00, 0xc4, 0x21, + 0x01, 0x70, 0x00, 0x21, 0x41, 0x70, 0x70, 0x47, + 0x00, 0x00, 0xb4, 0x21, 0x01, 0x70, 0x00, 0x21, + 0x41, 0x70, 0x70, 0x47, 0x00, 0x00, 0x01, 0x49, + 0x48, 0x65, 0x70, 0x47, 0x00, 0x00, 0xc4, 0x69, + 0x01, 0x00, 0x01, 0x49, 0x08, 0x65, 0x70, 0x47, + 0x00, 0x00, 0xc4, 0x69, 0x01, 0x00, 0x01, 0x49, + 0x88, 0x65, 0x3c, 0x00, 0x4c, 0xb3, 0x00, 0x00, + 0x70, 0x47, 0x00, 0x00, 0xc4, 0x69, 0x01, 0x00, + 0xf8, 0xb5, 0x5f, 0x4f, 0x05, 0x1c, 0xb8, 0x68, + 0x01, 0x30, 0xb8, 0x60, 0x07, 0xf0, 0x24, 0xfd, + 0x38, 0x61, 0x90, 0x20, 0xf6, 0xf7, 0x66, 0xfa, + 0x04, 0x1c, 0x90, 0x21, 0xf5, 0xf7, 0x94, 0xf8, + 0x28, 0x6b, 0x27, 0x1c, 0x60, 0x63, 0x68, 0x8b, + 0x80, 0x37, 0x26, 0x1c, 0xc0, 0x07, 0xc0, 0x0f, + 0x20, 0x62, 0x68, 0x8b, 0x3c, 0x00, 0x88, 0xb3, + 0x00, 0x00, 0x60, 0x36, 0x02, 0x21, 0x40, 0x07, + 0xc0, 0x0f, 0x20, 0x63, 0x68, 0x8b, 0x80, 0x07, + 0xc0, 0x0f, 0xf8, 0x60, 0x28, 0x7f, 0x38, 0x70, + 0xb1, 0x72, 0x00, 0x28, 0x08, 0xd1, 0xf9, 0xf7, + 0xc8, 0xff, 0x00, 0x28, 0x02, 0xd0, 0x01, 0x20, + 0x60, 0x62, 0x01, 0xe0, 0x01, 0x20, 0xa0, 0x62, + 0xf8, 0x68, 0x00, 0x28, 0x03, 0xd0, 0x00, 0x21, + 0x02, 0x20, 0x06, 0xf0, 0xcc, 0xff, 0x3c, 0x00, + 0xc4, 0xb3, 0x00, 0x00, 0x2b, 0x1c, 0x10, 0x33, + 0xaa, 0x1d, 0x29, 0x1c, 0x20, 0x1c, 0x05, 0xf0, + 0xdf, 0xfb, 0xa8, 0x6a, 0x00, 0x28, 0x0c, 0xd1, + 0x39, 0x78, 0x02, 0x29, 0x07, 0xd0, 0x22, 0x1c, + 0x70, 0x32, 0x20, 0x1c, 0x58, 0x30, 0xb3, 0x7a, + 0xfa, 0xf7, 0x10, 0xf9, 0x08, 0xe0, 0x01, 0x26, + 0x5e, 0xe0, 0xaa, 0x7d, 0x23, 0x1c, 0x28, 0x6a, + 0x69, 0x6a, 0x70, 0x33, 0xfd, 0xf7, 0xc0, 0xf8, + 0x3c, 0x00, 0x00, 0xb4, 0x00, 0x00, 0xe9, 0x68, + 0x00, 0x20, 0x09, 0x89, 0x00, 0x29, 0x00, 0xd1, + 0x04, 0x20, 0xf0, 0x72, 0x38, 0x78, 0x01, 0x28, + 0x14, 0xd1, 0x00, 0x27, 0x00, 0x90, 0x00, 0x20, + 0x06, 0xe0, 0x29, 0x69, 0x01, 0x29, 0x03, 0xd1, + 0xa9, 0x69, 0x01, 0x27, 0x89, 0x07, 0x1a, 0xd5, + 0x06, 0xf0, 0x79, 0xfc, 0x00, 0x28, 0xf4, 0xd1, + 0x01, 0x2f, 0x14, 0xd1, 0x00, 0x98, 0x01, 0x28, + 0x11, 0xd1, 0x3c, 0x00, 0x3c, 0xb4, 0x00, 0x00, + 0x08, 0xe0, 0x20, 0x1c, 0x58, 0x30, 0x06, 0xf0, + 0xe1, 0xfc, 0x00, 0x28, 0x0a, 0xd0, 0x80, 0x69, + 0x80, 0x07, 0x07, 0xd5, 0xf0, 0x7a, 0x08, 0x21, + 0x08, 0x43, 0xf0, 0x72, 0x01, 0x20, 0xe0, 0x62, + 0xe8, 0x7d, 0x30, 0x73, 0xe8, 0x68, 0xa0, 0x60, + 0xe0, 0x6a, 0x00, 0x28, 0x12, 0xd0, 0x1a, 0x4f, + 0xf8, 0x6b, 0x00, 0x28, 0x0e, 0xd0, 0x30, 0x7b, + 0xf5, 0xf7, 0xde, 0xfe, 0x3c, 0x00, 0x78, 0xb4, + 0x00, 0x00, 0x00, 0x28, 0x09, 0xd0, 0x21, 0x1c, + 0x38, 0x1c, 0x40, 0x30, 0xfc, 0xf7, 0x55, 0xfc, + 0x14, 0x48, 0xb9, 0x6b, 0x03, 0xf0, 0x89, 0xff, + 0xf8, 0xbd, 0x10, 0x4f, 0x12, 0x48, 0xb9, 0x6b, + 0x03, 0xf0, 0x83, 0xff, 0x00, 0x22, 0x20, 0x1c, + 0x10, 0x49, 0x05, 0xf0, 0xa2, 0xfe, 0x06, 0x1c, + 0x03, 0xd1, 0x38, 0x6a, 0x01, 0x30, 0x38, 0x62, + 0xee, 0xe7, 0x20, 0x1c, 0xf6, 0xf7, 0x3c, 0x00, + 0xb4, 0xb4, 0x00, 0x00, 0x9f, 0xf9, 0xe8, 0x68, + 0xf6, 0xf7, 0x6e, 0xf8, 0x03, 0xf0, 0xf2, 0xfd, + 0x04, 0x48, 0x83, 0x6d, 0x00, 0x2b, 0xe2, 0xd0, + 0x00, 0x22, 0x30, 0x1c, 0x29, 0x6b, 0xf4, 0xf7, + 0x86, 0xff, 0xdc, 0xe7, 0xc4, 0x69, 0x01, 0x00, + 0xc4, 0x60, 0x01, 0x00, 0x34, 0x63, 0x01, 0x00, + 0x11, 0x30, 0x00, 0x00, 0x10, 0xb5, 0x0a, 0x20, + 0x07, 0xf0, 0xfe, 0xfc, 0x07, 0xf0, 0x5e, 0xfc, + 0x3c, 0x00, 0xf0, 0xb4, 0x00, 0x00, 0x0b, 0x49, + 0x44, 0x18, 0x0c, 0xe0, 0x20, 0x1c, 0x07, 0xf0, + 0x90, 0xfb, 0x00, 0x28, 0x07, 0xd0, 0xf7, 0xf7, + 0x34, 0xf9, 0x00, 0x28, 0x03, 0xd0, 0x12, 0x21, + 0x86, 0x20, 0xf5, 0xf7, 0xca, 0xfe, 0xf7, 0xf7, + 0x2c, 0xf9, 0x00, 0x28, 0xee, 0xd1, 0x01, 0xf0, + 0x80, 0xfd, 0x10, 0xbd, 0x00, 0x00, 0x40, 0x9c, + 0x00, 0x00, 0x10, 0xb5, 0x0c, 0x1c, 0x01, 0x1c, + 0x17, 0x4a, 0x3c, 0x00, 0x2c, 0xb5, 0x00, 0x00, + 0x01, 0x29, 0x50, 0x69, 0x04, 0xd0, 0x80, 0x29, + 0x1d, 0xd0, 0x81, 0x29, 0x21, 0xd1, 0x1c, 0xe0, + 0x91, 0x78, 0x01, 0x29, 0x15, 0xd1, 0x02, 0x21, + 0x91, 0x70, 0x14, 0x1c, 0x01, 0x1c, 0x10, 0x48, + 0x03, 0xf0, 0x28, 0xff, 0x01, 0x21, 0x60, 0x69, + 0x00, 0xf0, 0x2e, 0xf9, 0x60, 0x69, 0x01, 0xf0, + 0x5f, 0xfc, 0x20, 0x70, 0xa0, 0x88, 0xa1, 0x69, + 0x00, 0x23, 0x0a, 0x4a, 0x3c, 0x00, 0x68, 0xb5, + 0x00, 0x00, 0x07, 0xf0, 0x7e, 0xfc, 0x10, 0xbd, + 0x22, 0x21, 0x06, 0xe0, 0x01, 0xf0, 0x1d, 0xfc, + 0x20, 0x1c, 0x00, 0xf0, 0x4a, 0xf8, 0x10, 0xbd, + 0x1c, 0x21, 0x20, 0x20, 0xf5, 0xf7, 0x8f, 0xfe, + 0x10, 0xbd, 0xb4, 0x79, 0x01, 0x00, 0x34, 0x63, + 0x01, 0x00, 0x3d, 0x2e, 0x00, 0x00, 0x70, 0xb5, + 0x1c, 0x4c, 0xa0, 0x78, 0x00, 0x28, 0x32, 0xd0, + 0x05, 0x28, 0x30, 0xd0, 0x60, 0x69, 0x3c, 0x00, + 0xa4, 0xb5, 0x00, 0x00, 0x00, 0xf0, 0xea, 0xf8, + 0x18, 0x4e, 0xb5, 0x79, 0xa0, 0x78, 0x01, 0x28, + 0x0b, 0xd0, 0x02, 0x28, 0x0e, 0xd0, 0x03, 0x28, + 0x10, 0xd0, 0x04, 0x28, 0x17, 0xd1, 0x42, 0x1f, + 0x80, 0x21, 0x20, 0x20, 0x08, 0xf0, 0x08, 0xf8, + 0x0e, 0xe0, 0x00, 0x21, 0x20, 0x20, 0x08, 0xf0, + 0x31, 0xf8, 0x0c, 0xe0, 0xa0, 0x88, 0x07, 0xf0, + 0x1d, 0xfc, 0x05, 0xe0, 0x20, 0x78, 0x00, 0xf0, + 0x3c, 0x00, 0xe0, 0xb5, 0x00, 0x00, 0x39, 0xfa, + 0x00, 0x20, 0x00, 0xf0, 0xc4, 0xfd, 0x60, 0x69, + 0x01, 0xf0, 0xe1, 0xfb, 0x05, 0x20, 0xa0, 0x70, + 0xb5, 0x71, 0x60, 0x69, 0x00, 0xf0, 0x61, 0xf9, + 0x00, 0x22, 0x20, 0x21, 0x81, 0x20, 0x08, 0xf0, + 0xd6, 0xf8, 0x70, 0xbd, 0x00, 0x00, 0xb4, 0x79, + 0x01, 0x00, 0x20, 0x10, 0x07, 0x00, 0xb0, 0xb5, + 0x0d, 0x4d, 0x04, 0x1c, 0xa8, 0x78, 0x00, 0x28, + 0x14, 0xd0, 0x3c, 0x00, 0x1c, 0xb6, 0x00, 0x00, + 0x68, 0x69, 0x00, 0xf0, 0x0b, 0xf9, 0x0a, 0x48, + 0x69, 0x69, 0x03, 0xf0, 0xa7, 0xfe, 0xa8, 0x88, + 0x07, 0xf0, 0x9e, 0xfb, 0x00, 0x2c, 0x02, 0xd0, + 0x68, 0x78, 0x00, 0xf0, 0x79, 0xff, 0x00, 0x20, + 0xa8, 0x70, 0xa9, 0x68, 0x20, 0x1c, 0xf4, 0xf7, + 0xca, 0xfe, 0xb0, 0xbd, 0xb4, 0x79, 0x01, 0x00, + 0x34, 0x63, 0x01, 0x00, 0x06, 0x4b, 0x80, 0xb5, + 0x99, 0x78, 0x03, 0x29, 0x3c, 0x00, 0x58, 0xb6, + 0x00, 0x00, 0x06, 0xd1, 0x04, 0x21, 0x99, 0x70, + 0x20, 0x21, 0x02, 0x1c, 0x80, 0x20, 0x08, 0xf0, + 0xa4, 0xf8, 0x80, 0xbd, 0x00, 0x00, 0xb4, 0x79, + 0x01, 0x00, 0x10, 0xb5, 0x0c, 0x4c, 0xa1, 0x78, + 0x03, 0x29, 0x0f, 0xd1, 0x10, 0x30, 0xfa, 0xf7, + 0xde, 0xf8, 0x00, 0x28, 0x09, 0xd0, 0x20, 0x78, + 0x00, 0xf0, 0xe5, 0xf9, 0x00, 0x20, 0x00, 0xf0, + 0x70, 0xfd, 0x00, 0x21, 0x05, 0x48, 0x3c, 0x00, + 0x94, 0xb6, 0x00, 0x00, 0xfc, 0xf7, 0x9c, 0xfa, + 0x10, 0xbd, 0x1b, 0x21, 0x20, 0x20, 0xf5, 0xf7, + 0x01, 0xfe, 0x10, 0xbd, 0xb4, 0x79, 0x01, 0x00, + 0x51, 0xb6, 0x00, 0x00, 0x09, 0x49, 0x80, 0xb5, + 0x89, 0x78, 0x03, 0x29, 0x09, 0xd1, 0x00, 0xf0, + 0xcd, 0xf9, 0x00, 0x20, 0x00, 0xf0, 0x58, 0xfd, + 0x01, 0x21, 0x05, 0x48, 0xfc, 0xf7, 0x84, 0xfa, + 0x80, 0xbd, 0x17, 0x21, 0x20, 0x20, 0xf5, 0xf7, + 0x3c, 0x00, 0xd0, 0xb6, 0x00, 0x00, 0xe9, 0xfd, + 0x80, 0xbd, 0xb4, 0x79, 0x01, 0x00, 0x51, 0xb6, + 0x00, 0x00, 0x70, 0xb5, 0x10, 0x4c, 0x1d, 0x1c, + 0xa3, 0x78, 0x06, 0x1c, 0x04, 0x98, 0x00, 0x2b, + 0x18, 0xd1, 0x01, 0x23, 0xa3, 0x70, 0x22, 0x61, + 0xe6, 0x60, 0x61, 0x70, 0xa0, 0x60, 0xa5, 0x61, + 0x00, 0x20, 0x07, 0xf0, 0xac, 0xfa, 0xa0, 0x80, + 0x30, 0x1c, 0xf7, 0xf7, 0x3c, 0xfb, 0xe0, 0x80, + 0x07, 0xf0, 0x3c, 0x00, 0x0c, 0xb7, 0x00, 0x00, + 0x4f, 0xfb, 0xc7, 0x21, 0xc9, 0x00, 0x28, 0x1a, + 0x41, 0x1a, 0x00, 0x22, 0x20, 0x20, 0x07, 0xf0, + 0x57, 0xff, 0x70, 0xbd, 0xb4, 0x79, 0x01, 0x00, + 0xb0, 0xb5, 0x04, 0x1c, 0x0d, 0x1c, 0x00, 0xf0, + 0x09, 0xf8, 0x20, 0x1c, 0x00, 0xf0, 0x24, 0xf8, + 0x00, 0x2d, 0x01, 0xd0, 0xff, 0xf7, 0xd4, 0xfe, + 0xb0, 0xbd, 0x00, 0x00, 0xb0, 0xb5, 0x0c, 0x4c, + 0x05, 0x1c, 0xa0, 0x68, 0x3c, 0x00, 0x48, 0xb7, + 0x00, 0x00, 0x00, 0x28, 0x0f, 0xd1, 0x0a, 0x48, + 0x01, 0x7e, 0x02, 0x22, 0x11, 0x40, 0x61, 0x60, + 0x01, 0x7e, 0x11, 0x43, 0x01, 0x76, 0x07, 0x20, + 0x03, 0xf0, 0x49, 0xfc, 0x20, 0x60, 0x03, 0xf0, + 0x98, 0xff, 0x03, 0xf0, 0xee, 0xff, 0xa0, 0x68, + 0x28, 0x43, 0xa0, 0x60, 0xb0, 0xbd, 0x40, 0x7c, + 0x01, 0x00, 0x0c, 0x80, 0x07, 0x00, 0x0a, 0x49, + 0x38, 0xb5, 0x0a, 0x1c, 0x20, 0x32, 0x3c, 0x00, + 0x84, 0xb7, 0x00, 0x00, 0x94, 0x79, 0x00, 0xab, + 0x1c, 0x70, 0xd2, 0x79, 0x07, 0x4c, 0x5a, 0x70, + 0xe2, 0x68, 0x00, 0x2a, 0x02, 0xd1, 0x06, 0x4d, + 0x01, 0x23, 0x6b, 0x70, 0x10, 0x43, 0xe0, 0x60, + 0x00, 0xab, 0x18, 0x88, 0xc8, 0x84, 0x38, 0xbd, + 0x00, 0x10, 0x07, 0x00, 0x40, 0x7c, 0x01, 0x00, + 0x00, 0x50, 0x07, 0x00, 0xb0, 0xb5, 0x05, 0x1c, + 0x00, 0x29, 0x01, 0xd0, 0x00, 0xf0, 0x28, 0xf8, + 0x3c, 0x00, 0xc0, 0xb7, 0x00, 0x00, 0x06, 0x4c, + 0x60, 0x78, 0x21, 0x69, 0x08, 0x43, 0x03, 0xd1, + 0x01, 0x21, 0x0e, 0x20, 0x06, 0xf0, 0xc5, 0xfd, + 0x20, 0x69, 0x28, 0x43, 0x20, 0x61, 0xb0, 0xbd, + 0x00, 0x00, 0x18, 0x63, 0x01, 0x00, 0xb0, 0xb5, + 0x0a, 0x4c, 0x05, 0x1c, 0x22, 0x69, 0x00, 0x20, + 0x00, 0x2a, 0x0c, 0xd1, 0x00, 0x29, 0x00, 0xd0, + 0x04, 0xe0, 0x60, 0x78, 0x00, 0x28, 0x02, 0xd1, + 0x04, 0xf0, 0x3c, 0x00, 0xfc, 0xb7, 0x00, 0x00, + 0x69, 0xfb, 0x60, 0x70, 0x28, 0x1c, 0x06, 0xf0, + 0xef, 0xfc, 0x01, 0x20, 0xb0, 0xbd, 0x00, 0x00, + 0x18, 0x63, 0x01, 0x00, 0x10, 0xb5, 0x08, 0x4c, + 0x60, 0x78, 0x00, 0x28, 0x0a, 0xd0, 0x06, 0xf0, + 0xe3, 0xfc, 0x00, 0x20, 0x60, 0x70, 0x20, 0x69, + 0x00, 0x28, 0x03, 0xd0, 0x01, 0x21, 0x0e, 0x20, + 0x06, 0xf0, 0x96, 0xfd, 0x10, 0xbd, 0x00, 0x00, + 0x18, 0x63, 0x01, 0x00, 0x3c, 0x00, 0x38, 0xb8, + 0x00, 0x00, 0x09, 0x49, 0x80, 0xb5, 0x0b, 0x69, + 0x83, 0x42, 0x04, 0xd1, 0x4a, 0x78, 0x00, 0x2a, + 0x01, 0xd1, 0x01, 0x22, 0x00, 0xe0, 0x00, 0x22, + 0x83, 0x43, 0x0b, 0x61, 0x00, 0x2a, 0x03, 0xd0, + 0x00, 0x21, 0x0e, 0x20, 0x06, 0xf0, 0x7f, 0xfd, + 0x80, 0xbd, 0x18, 0x63, 0x01, 0x00, 0x80, 0xb5, + 0x01, 0x20, 0xf6, 0xf7, 0x56, 0xfe, 0x80, 0xbd, + 0x00, 0x00, 0x10, 0xb5, 0x04, 0x1c, 0x3c, 0x00, + 0x74, 0xb8, 0x00, 0x00, 0x00, 0xf0, 0x04, 0xf8, + 0x20, 0x1c, 0x00, 0xf0, 0x1f, 0xf8, 0x10, 0xbd, + 0xb0, 0xb5, 0x0c, 0x4d, 0x04, 0x1c, 0xa8, 0x68, + 0xa0, 0x42, 0x0f, 0xd1, 0x07, 0x20, 0x29, 0x68, + 0x08, 0xf0, 0x8c, 0xfb, 0x68, 0x68, 0x02, 0x22, + 0x07, 0x49, 0x00, 0x28, 0x08, 0x7e, 0x01, 0xd0, + 0x10, 0x43, 0x00, 0xe0, 0x90, 0x43, 0x08, 0x76, + 0x04, 0xf0, 0xc4, 0xf8, 0xa8, 0x68, 0xa0, 0x43, + 0x3c, 0x00, 0xb0, 0xb8, 0x00, 0x00, 0xa8, 0x60, + 0xb0, 0xbd, 0x40, 0x7c, 0x01, 0x00, 0x0c, 0x80, + 0x07, 0x00, 0x0a, 0x49, 0x38, 0xb5, 0x0a, 0x1c, + 0x20, 0x32, 0x94, 0x79, 0x00, 0xab, 0x1c, 0x70, + 0xd2, 0x79, 0x07, 0x4c, 0x5a, 0x70, 0xe2, 0x68, + 0x82, 0x42, 0x02, 0xd1, 0x06, 0x4d, 0x00, 0x23, + 0x6b, 0x70, 0x82, 0x43, 0xe2, 0x60, 0x00, 0xab, + 0x18, 0x88, 0xc8, 0x84, 0x38, 0xbd, 0x00, 0x10, + 0x07, 0x00, 0x3c, 0x00, 0xec, 0xb8, 0x00, 0x00, + 0x40, 0x7c, 0x01, 0x00, 0x00, 0x50, 0x07, 0x00, + 0xb0, 0xb5, 0x05, 0x1c, 0x0a, 0x4c, 0x00, 0x21, + 0x60, 0x69, 0xff, 0xf7, 0x11, 0xff, 0x04, 0x20, + 0x01, 0xf0, 0x46, 0xf9, 0x01, 0xf0, 0x88, 0xfb, + 0x00, 0x22, 0x04, 0x21, 0x04, 0x20, 0x01, 0xf0, + 0x8b, 0xf8, 0x28, 0x1c, 0x01, 0xf0, 0x4a, 0xfa, + 0x60, 0x69, 0xff, 0xf7, 0xa7, 0xff, 0xb0, 0xbd, + 0x40, 0x7c, 0x01, 0x00, 0x3c, 0x00, 0x28, 0xb9, + 0x00, 0x00, 0x80, 0xb5, 0x01, 0xf0, 0x77, 0xfa, + 0x80, 0xbd, 0xb0, 0xb5, 0x0d, 0x4d, 0x01, 0x21, + 0x28, 0x69, 0xff, 0xf7, 0xf4, 0xfe, 0xff, 0xf7, + 0x2a, 0xfe, 0x00, 0xf0, 0x2c, 0xfb, 0x00, 0xf0, + 0x84, 0xfa, 0x00, 0x24, 0x00, 0x22, 0x04, 0x21, + 0x20, 0x1c, 0x01, 0xf0, 0x6c, 0xf8, 0x01, 0x34, + 0x24, 0x06, 0x24, 0x0e, 0x04, 0x2c, 0xf5, 0xd3, + 0x28, 0x69, 0xff, 0xf7, 0x86, 0xff, 0x3c, 0x00, + 0x64, 0xb9, 0x00, 0x00, 0xb0, 0xbd, 0x00, 0x00, + 0x40, 0x7c, 0x01, 0x00, 0xf8, 0xb5, 0x05, 0x1c, + 0x0e, 0x1c, 0x07, 0x4c, 0x17, 0x1c, 0x01, 0x21, + 0x20, 0x69, 0xff, 0xf7, 0xd3, 0xfe, 0x3a, 0x1c, + 0x31, 0x1c, 0x28, 0x1c, 0x01, 0xf0, 0x52, 0xf8, + 0x20, 0x69, 0xff, 0xf7, 0x71, 0xff, 0xf8, 0xbd, + 0x40, 0x7c, 0x01, 0x00, 0xff, 0xb5, 0x89, 0xb0, + 0x06, 0x1c, 0x16, 0x98, 0x1d, 0x1c, 0x00, 0x28, + 0x3c, 0x00, 0xa0, 0xb9, 0x00, 0x00, 0x01, 0xd0, + 0x29, 0x48, 0x14, 0x90, 0x28, 0x68, 0x00, 0x88, + 0x00, 0x06, 0x80, 0x0e, 0x20, 0x28, 0x01, 0xd0, + 0x14, 0x28, 0x17, 0xd1, 0x0a, 0xaa, 0x18, 0x24, + 0x18, 0x21, 0x05, 0xca, 0xff, 0xf7, 0x77, 0xf9, + 0x07, 0x1c, 0x28, 0x1c, 0x01, 0x89, 0xa1, 0x42, + 0x02, 0xdd, 0x00, 0x68, 0x01, 0x19, 0x0b, 0xe0, + 0xc0, 0x68, 0x64, 0x1a, 0x00, 0x28, 0xf5, 0xd1, + 0x0f, 0x21, 0x3c, 0x00, 0xdc, 0xb9, 0x00, 0x00, + 0x86, 0x20, 0xf5, 0xf7, 0x61, 0xfc, 0x00, 0x21, + 0x01, 0xe0, 0x00, 0x21, 0x00, 0x27, 0x18, 0x48, + 0x08, 0x90, 0x80, 0x79, 0x07, 0x90, 0x0c, 0x20, + 0x16, 0x4a, 0x70, 0x43, 0x80, 0x18, 0x04, 0x79, + 0x04, 0x91, 0x12, 0x99, 0x15, 0x98, 0x14, 0x9a, + 0x01, 0x91, 0x03, 0x90, 0x05, 0x97, 0x00, 0x95, + 0x0a, 0xab, 0x02, 0x92, 0x21, 0x1c, 0x30, 0x1c, + 0x0c, 0xcb, 0xf7, 0xf7, 0x3c, 0x00, 0x18, 0xba, + 0x00, 0x00, 0x03, 0xf9, 0x01, 0x25, 0xb5, 0x40, + 0x0c, 0x4e, 0x08, 0x3e, 0x30, 0x78, 0x28, 0x40, + 0x06, 0xd0, 0x20, 0x1c, 0x00, 0xf0, 0xc9, 0xfd, + 0x30, 0x78, 0xa8, 0x43, 0x30, 0x70, 0x03, 0xe0, + 0x20, 0x1c, 0x13, 0x99, 0x00, 0xf0, 0x43, 0xff, + 0x07, 0xa9, 0x03, 0xc9, 0x88, 0x71, 0x0d, 0xb0, + 0xf0, 0xbd, 0x95, 0x24, 0x00, 0x00, 0x20, 0x10, + 0x07, 0x00, 0x74, 0x7a, 0x01, 0x00, 0x3c, 0x00, + 0x54, 0xba, 0x00, 0x00, 0xb0, 0xb5, 0x04, 0x1c, + 0x0c, 0x23, 0x09, 0x49, 0x58, 0x43, 0x40, 0x18, + 0x00, 0x79, 0x05, 0x1c, 0x00, 0xf0, 0x92, 0xfe, + 0x28, 0x1c, 0xf7, 0xf7, 0xc7, 0xf8, 0x01, 0x20, + 0x03, 0x4a, 0xa0, 0x40, 0x08, 0x3a, 0x11, 0x78, + 0x81, 0x43, 0x11, 0x70, 0xb0, 0xbd, 0x00, 0x00, + 0x74, 0x7a, 0x01, 0x00, 0x10, 0xb5, 0x05, 0x4c, + 0x20, 0x78, 0x00, 0x28, 0x03, 0xd1, 0x1a, 0x21, + 0x3c, 0x00, 0x90, 0xba, 0x00, 0x00, 0x86, 0x20, + 0xf5, 0xf7, 0x07, 0xfc, 0x20, 0x78, 0x10, 0xbd, + 0x00, 0x00, 0x18, 0x63, 0x01, 0x00, 0x01, 0x48, + 0x40, 0x78, 0x70, 0x47, 0x00, 0x00, 0x2c, 0x63, + 0x01, 0x00, 0x80, 0xb5, 0xf6, 0xf7, 0xd1, 0xfe, + 0x00, 0xf0, 0x1b, 0xf9, 0x80, 0xbd, 0xfe, 0xb5, + 0x01, 0x68, 0x05, 0x1c, 0x0c, 0x68, 0x0e, 0x1c, + 0x21, 0x78, 0x88, 0x07, 0x71, 0xd1, 0x68, 0x69, + 0xc2, 0x07, 0x3c, 0x00, 0xcc, 0xba, 0x00, 0x00, + 0x6e, 0xd5, 0x80, 0x07, 0x6d, 0xd5, 0xe8, 0x7a, + 0xc2, 0x07, 0x08, 0x07, 0x09, 0x09, 0x02, 0x91, + 0x45, 0x49, 0x80, 0x0f, 0xd2, 0x0f, 0x00, 0x28, + 0x4f, 0x68, 0x05, 0xd0, 0x01, 0x28, 0x09, 0xd0, + 0x02, 0x28, 0x21, 0xd0, 0x03, 0x28, 0x5b, 0xd1, + 0xff, 0x23, 0x20, 0x1c, 0xa9, 0x7a, 0xf4, 0xf7, + 0x74, 0xfc, 0x55, 0xe0, 0x02, 0x98, 0x0b, 0x28, + 0x0a, 0xd0, 0x0c, 0x28, 0x3c, 0x00, 0x08, 0xbb, + 0x00, 0x00, 0x0f, 0xd0, 0x0d, 0x28, 0x4e, 0xd1, + 0x39, 0x4f, 0xf8, 0x68, 0xf4, 0xf7, 0x61, 0xfc, + 0x00, 0x20, 0xc0, 0x43, 0x5a, 0xe0, 0x35, 0x4f, + 0xa9, 0x7a, 0xbb, 0x68, 0x20, 0x1c, 0xf4, 0xf7, + 0x5b, 0xfc, 0x40, 0xe0, 0x32, 0x4f, 0x38, 0x69, + 0xf4, 0xf7, 0x53, 0xfc, 0x3b, 0xe0, 0x00, 0x21, + 0x01, 0x91, 0x02, 0x99, 0x00, 0x20, 0xff, 0x23, + 0x09, 0x07, 0x01, 0xd4, 0x01, 0x20, 0x3c, 0x00, + 0x44, 0xbb, 0x00, 0x00, 0x13, 0xe0, 0x31, 0x89, + 0x19, 0x29, 0x01, 0xd3, 0x26, 0x7e, 0x07, 0xe0, + 0x15, 0x29, 0x04, 0xd3, 0x18, 0x26, 0x71, 0x1a, + 0x49, 0x19, 0x0e, 0x7b, 0x00, 0xe0, 0x00, 0x26, + 0xb1, 0x06, 0x02, 0xd4, 0x01, 0x20, 0x73, 0x07, + 0x5b, 0x0f, 0x01, 0x21, 0x01, 0x91, 0x00, 0x28, + 0x03, 0xd0, 0xa9, 0x7a, 0x20, 0x1c, 0xf4, 0xf7, + 0x36, 0xfc, 0x01, 0x99, 0x01, 0x29, 0x15, 0xd1, + 0x3c, 0x00, 0x80, 0xbb, 0x00, 0x00, 0xf0, 0x06, + 0xc6, 0x0f, 0x20, 0x88, 0x1b, 0x4f, 0xe4, 0x8a, + 0xf9, 0x6b, 0x00, 0x05, 0xc0, 0x0f, 0x00, 0x29, + 0x1a, 0xd0, 0x4b, 0x1c, 0x18, 0xd0, 0x00, 0x2e, + 0x0a, 0xd0, 0x00, 0x28, 0x08, 0xd0, 0x38, 0x88, + 0x84, 0x42, 0x13, 0xd0, 0x02, 0x98, 0x0c, 0x28, + 0x01, 0xe0, 0x1d, 0xe0, 0x12, 0xe0, 0x0d, 0xd0, + 0x08, 0x1c, 0x01, 0xf0, 0x76, 0xf9, 0x00, 0x28, + 0x03, 0xd1, 0x3c, 0x00, 0xbc, 0xbb, 0x00, 0x00, + 0x00, 0xf0, 0xa6, 0xfa, 0xf4, 0xf7, 0x0a, 0xfc, + 0x00, 0x20, 0xc0, 0x43, 0xf8, 0x63, 0x00, 0x2e, + 0x0d, 0xd0, 0x3c, 0x80, 0x00, 0x20, 0xf8, 0x63, + 0x09, 0xe0, 0x20, 0x88, 0x00, 0x06, 0x80, 0x0e, + 0x20, 0x28, 0x04, 0xd1, 0x04, 0x4f, 0x20, 0x1c, + 0xb9, 0x6a, 0xf4, 0xf7, 0xf8, 0xfb, 0x29, 0x1c, + 0x02, 0x48, 0xfb, 0xf7, 0xef, 0xff, 0xfe, 0xbd, + 0x28, 0x7a, 0x01, 0x00, 0x3c, 0x00, 0xf8, 0xbb, + 0x00, 0x00, 0xa5, 0x9a, 0x00, 0x00, 0x03, 0x48, + 0x80, 0xb5, 0x00, 0x78, 0x00, 0x21, 0x00, 0xf0, + 0xfc, 0xfb, 0x80, 0xbd, 0x00, 0x00, 0x18, 0x63, + 0x01, 0x00, 0x04, 0x4b, 0x05, 0x49, 0x00, 0x28, + 0x1a, 0x68, 0x00, 0xd0, 0x01, 0x1c, 0x10, 0x1c, + 0x19, 0x60, 0x70, 0x47, 0x00, 0x00, 0xd4, 0x79, + 0x01, 0x00, 0x95, 0x75, 0x00, 0x00, 0x05, 0x48, + 0x80, 0xb5, 0x00, 0x7f, 0x24, 0x23, 0x3c, 0x00, + 0x34, 0xbc, 0x00, 0x00, 0x04, 0x49, 0x58, 0x43, + 0x40, 0x18, 0xc0, 0x69, 0xf4, 0xf7, 0xcc, 0xfb, + 0x80, 0xbd, 0x00, 0x00, 0xd4, 0x79, 0x01, 0x00, + 0x94, 0x46, 0x01, 0x00, 0x02, 0x1c, 0x06, 0x48, + 0x80, 0xb5, 0x81, 0x62, 0x82, 0x60, 0x00, 0x7f, + 0x24, 0x23, 0x04, 0x49, 0x58, 0x43, 0x40, 0x18, + 0x80, 0x69, 0xf4, 0xf7, 0xb9, 0xfb, 0x80, 0xbd, + 0xd4, 0x79, 0x01, 0x00, 0x94, 0x46, 0x01, 0x00, + 0x3c, 0x00, 0x70, 0xbc, 0x00, 0x00, 0x80, 0xb5, + 0x00, 0x20, 0x00, 0xf0, 0x3c, 0xfb, 0x00, 0x20, + 0x00, 0xf0, 0x6d, 0xfa, 0x00, 0xf0, 0x65, 0xfa, + 0x04, 0x49, 0xc8, 0x6a, 0x01, 0x30, 0xc8, 0x62, + 0x08, 0x1f, 0x00, 0x88, 0x07, 0xf0, 0xc1, 0xf8, + 0x80, 0xbd, 0xd4, 0x79, 0x01, 0x00, 0x06, 0x48, + 0x80, 0xb5, 0x00, 0x21, 0x01, 0x77, 0xc1, 0x6a, + 0x01, 0x31, 0xc1, 0x62, 0x04, 0x38, 0x00, 0x88, + 0x07, 0xf0, 0x3c, 0x00, 0xac, 0xbc, 0x00, 0x00, + 0xb3, 0xf8, 0x03, 0xf0, 0xd1, 0xf9, 0x80, 0xbd, + 0xd4, 0x79, 0x01, 0x00, 0x80, 0xb5, 0x05, 0xf0, + 0xe9, 0xfa, 0x80, 0xbd, 0x80, 0xb5, 0x00, 0x28, + 0x03, 0xd1, 0x01, 0x20, 0x04, 0xf0, 0x22, 0xfa, + 0x80, 0xbd, 0x01, 0x20, 0x03, 0xf0, 0xe6, 0xfb, + 0x80, 0xbd, 0x00, 0x00, 0x03, 0x49, 0x01, 0x20, + 0x49, 0x78, 0x00, 0x29, 0x00, 0xd0, 0x00, 0x20, + 0x70, 0x47, 0x00, 0x00, 0x3c, 0x00, 0xe8, 0xbc, + 0x00, 0x00, 0x2c, 0x63, 0x01, 0x00, 0x70, 0xb5, + 0x13, 0x4d, 0x28, 0x78, 0x00, 0x28, 0x20, 0xd1, + 0x01, 0x21, 0x2e, 0x1c, 0x70, 0x68, 0xff, 0xf7, + 0x12, 0xfd, 0x00, 0x21, 0x07, 0x20, 0x06, 0xf0, + 0x2a, 0xfb, 0x0d, 0x48, 0x00, 0x24, 0x04, 0x71, + 0x04, 0xf0, 0xed, 0xf8, 0x06, 0xf0, 0xd5, 0xf9, + 0x01, 0x20, 0x28, 0x70, 0x0a, 0x48, 0x04, 0x60, + 0x44, 0x60, 0xf6, 0xf7, 0x4c, 0xfd, 0x3c, 0x00, + 0x24, 0xbd, 0x00, 0x00, 0xf7, 0xf7, 0x5e, 0xf8, + 0xff, 0xf7, 0xa2, 0xff, 0x00, 0xf0, 0xa8, 0xfd, + 0x05, 0x48, 0x71, 0x68, 0x03, 0xf0, 0x20, 0xfb, + 0x01, 0x20, 0x70, 0xbd, 0x2c, 0x63, 0x01, 0x00, + 0x50, 0x00, 0x07, 0x00, 0x80, 0x00, 0x07, 0x00, + 0xc4, 0x60, 0x01, 0x00, 0xb0, 0xb5, 0x1e, 0x4c, + 0x20, 0x78, 0x01, 0x28, 0x35, 0xd1, 0x25, 0x1c, + 0x69, 0x68, 0x1c, 0x48, 0x03, 0xf0, 0x20, 0xfb, + 0x3c, 0x00, 0x60, 0xbd, 0x00, 0x00, 0x04, 0xf0, + 0xf0, 0xf8, 0x1a, 0x48, 0x01, 0x68, 0x49, 0x08, + 0x49, 0x00, 0x01, 0x60, 0x01, 0x68, 0x01, 0x22, + 0x11, 0x43, 0x01, 0x60, 0x00, 0xf0, 0x2b, 0xfe, + 0x00, 0xf0, 0x1b, 0xfc, 0x06, 0xf0, 0x99, 0xf8, + 0xf6, 0xf7, 0x29, 0xfe, 0xf6, 0xf7, 0x2d, 0xfc, + 0x00, 0x20, 0x20, 0x70, 0xff, 0xf7, 0x83, 0xff, + 0x00, 0xf0, 0x8b, 0xfd, 0x0f, 0x48, 0x81, 0x78, + 0x08, 0x22, 0x3c, 0x00, 0x9c, 0xbd, 0x00, 0x00, + 0x91, 0x43, 0x81, 0x70, 0x81, 0x78, 0x11, 0x43, + 0x81, 0x70, 0x0c, 0x49, 0x10, 0x20, 0x08, 0x71, + 0x68, 0x68, 0xff, 0xf7, 0x5f, 0xfd, 0xf7, 0xf7, + 0x39, 0xf8, 0xf6, 0xf7, 0x4d, 0xfd, 0x01, 0x21, + 0x07, 0x20, 0x06, 0xf0, 0xcd, 0xfa, 0x01, 0x20, + 0xb0, 0xbd, 0x00, 0x00, 0x2c, 0x63, 0x01, 0x00, + 0xc4, 0x60, 0x01, 0x00, 0xf0, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x3c, 0x00, 0xd8, 0xbd, + 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x03, 0x49, + 0x01, 0x20, 0x89, 0x7a, 0x01, 0x29, 0x00, 0xd0, + 0x00, 0x20, 0x70, 0x47, 0x00, 0x00, 0x14, 0x7a, + 0x01, 0x00, 0xb0, 0xb5, 0x15, 0x4d, 0x04, 0x1c, + 0x28, 0x7a, 0x00, 0x28, 0x20, 0xd1, 0xf9, 0xf7, + 0x00, 0xfc, 0x02, 0x28, 0x1c, 0xd1, 0x01, 0x20, + 0x28, 0x72, 0xe8, 0x68, 0x00, 0x28, 0x10, 0xd0, + 0x20, 0x68, 0x29, 0x68, 0x08, 0x60, 0x3c, 0x00, + 0x14, 0xbe, 0x00, 0x00, 0x69, 0x68, 0x0d, 0x48, + 0x03, 0xf0, 0xc2, 0xfa, 0x01, 0x21, 0x68, 0x68, + 0xff, 0xf7, 0xc8, 0xfc, 0x00, 0x22, 0x24, 0x20, + 0x61, 0x68, 0x07, 0xf0, 0xcf, 0xfb, 0xb0, 0xbd, + 0x00, 0x20, 0x28, 0x72, 0x21, 0x68, 0x01, 0x20, + 0xf4, 0xf7, 0xcf, 0xfa, 0xb0, 0xbd, 0x00, 0x20, + 0x21, 0x68, 0xf4, 0xf7, 0xca, 0xfa, 0xb0, 0xbd, + 0x04, 0x7a, 0x01, 0x00, 0x34, 0x63, 0x01, 0x00, + 0x3c, 0x00, 0x50, 0xbe, 0x00, 0x00, 0x04, 0x48, + 0x80, 0xb5, 0x00, 0x7a, 0x01, 0x28, 0x02, 0xd1, + 0x00, 0x20, 0x02, 0xf0, 0xf0, 0xfe, 0x80, 0xbd, + 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x80, 0xb5, + 0x01, 0x28, 0x07, 0xd0, 0x80, 0x28, 0x09, 0xd1, + 0x07, 0x48, 0x00, 0x7a, 0x00, 0x28, 0x04, 0xd0, + 0x01, 0x20, 0x00, 0xe0, 0x00, 0x20, 0x02, 0xf0, + 0xde, 0xfe, 0x80, 0xbd, 0x0e, 0x21, 0x24, 0x20, + 0xf5, 0xf7, 0x3c, 0x00, 0x8c, 0xbe, 0x00, 0x00, + 0x0b, 0xfa, 0x80, 0xbd, 0x04, 0x7a, 0x01, 0x00, + 0xf8, 0xb5, 0x3a, 0x4e, 0x05, 0x1c, 0xb0, 0x7a, + 0x00, 0x28, 0x69, 0xd1, 0xf9, 0xf7, 0xae, 0xfb, + 0x02, 0x28, 0x65, 0xd1, 0x36, 0x48, 0x00, 0x68, + 0x00, 0x28, 0x61, 0xd0, 0x35, 0x48, 0x71, 0x68, + 0x03, 0xf0, 0x74, 0xfa, 0x01, 0x21, 0x70, 0x68, + 0xff, 0xf7, 0x7a, 0xfc, 0x6c, 0x20, 0xf5, 0xf7, + 0xb9, 0xfc, 0x04, 0x1c, 0x3c, 0x00, 0xc8, 0xbe, + 0x00, 0x00, 0x6c, 0x21, 0xf4, 0xf7, 0xe7, 0xfa, + 0x30, 0x68, 0x2c, 0x22, 0x04, 0x60, 0x29, 0x68, + 0x81, 0x60, 0x69, 0x68, 0xc1, 0x60, 0x00, 0x21, + 0x11, 0x54, 0x81, 0x62, 0xa9, 0x68, 0x00, 0x29, + 0x02, 0xd0, 0xe9, 0x68, 0x01, 0x61, 0x05, 0xe0, + 0x06, 0xf0, 0x5d, 0xff, 0x69, 0x68, 0x40, 0x18, + 0x31, 0x68, 0x08, 0x61, 0x70, 0x68, 0xff, 0xf7, + 0x14, 0xfd, 0x69, 0x21, 0x08, 0x55, 0x3c, 0x00, + 0x04, 0xbf, 0x00, 0x00, 0x00, 0x20, 0xf9, 0xf7, + 0x09, 0xfb, 0x01, 0x27, 0x3b, 0x1c, 0x06, 0x1c, + 0x22, 0x1c, 0x24, 0x32, 0x00, 0x21, 0xf9, 0xf7, + 0x79, 0xfb, 0x1c, 0x48, 0x03, 0x21, 0x00, 0x88, + 0x89, 0x03, 0x08, 0x43, 0x21, 0x1c, 0x40, 0x31, + 0x00, 0x91, 0x48, 0x83, 0x18, 0x48, 0x10, 0x21, + 0x60, 0x60, 0x18, 0x48, 0xa0, 0x60, 0xa7, 0x63, + 0x67, 0x63, 0x00, 0x20, 0xf5, 0xf7, 0x4c, 0xfb, + 0x3c, 0x00, 0x40, 0xbf, 0x00, 0x00, 0xe0, 0x60, + 0x02, 0x89, 0x00, 0x99, 0xca, 0x83, 0x07, 0x68, + 0x31, 0x1c, 0x38, 0x1d, 0x27, 0x61, 0xfe, 0xf7, + 0x8e, 0xfe, 0x38, 0x1c, 0x0a, 0x30, 0x0f, 0x49, + 0xfe, 0xf7, 0x89, 0xfe, 0xa4, 0x20, 0x38, 0x80, + 0x00, 0x20, 0x04, 0xf0, 0xde, 0xfb, 0x00, 0x22, + 0x1f, 0x20, 0x69, 0x68, 0x07, 0xf0, 0x2d, 0xfb, + 0xf8, 0xbd, 0xff, 0xe7, 0x00, 0x20, 0x29, 0x68, + 0xf4, 0xf7, 0x3c, 0x00, 0x7c, 0xbf, 0x00, 0x00, + 0x2e, 0xfa, 0xf8, 0xe7, 0x14, 0x7a, 0x01, 0x00, + 0x80, 0x5a, 0x01, 0x00, 0x34, 0x63, 0x01, 0x00, + 0xfa, 0x60, 0x01, 0x00, 0x99, 0xec, 0x00, 0x00, + 0x15, 0xed, 0x00, 0x00, 0x12, 0x61, 0x01, 0x00, + 0x06, 0x48, 0x80, 0xb5, 0x81, 0x7a, 0x00, 0x29, + 0x07, 0xd0, 0x00, 0x68, 0x04, 0x22, 0x20, 0x30, + 0x01, 0x7b, 0x11, 0x43, 0x01, 0x73, 0x02, 0xf0, + 0x6b, 0xfd, 0x80, 0xbd, 0x3c, 0x00, 0xb8, 0xbf, + 0x00, 0x00, 0x14, 0x7a, 0x01, 0x00, 0x10, 0xb5, + 0x04, 0x4c, 0xa0, 0x7a, 0x01, 0x28, 0x03, 0xd1, + 0x06, 0xf0, 0xf1, 0xfe, 0x21, 0x68, 0x88, 0x61, + 0x10, 0xbd, 0x14, 0x7a, 0x01, 0x00, 0x03, 0x1c, + 0x08, 0x1c, 0x1f, 0x49, 0x70, 0xb5, 0x0a, 0x68, + 0x01, 0x2b, 0x1c, 0xd0, 0x80, 0x2b, 0x05, 0xd0, + 0x83, 0x2b, 0x30, 0xd1, 0x88, 0x7a, 0x00, 0x28, + 0x14, 0xd0, 0x29, 0xe0, 0x53, 0x69, 0x3c, 0x00, + 0xf4, 0xbf, 0x00, 0x00, 0x00, 0x2b, 0x0e, 0xd0, + 0x94, 0x69, 0xd5, 0x69, 0x2e, 0x1b, 0x0c, 0x69, + 0x5d, 0x1b, 0x36, 0x1b, 0xb6, 0x10, 0xa4, 0x19, + 0x0c, 0x61, 0xcc, 0x68, 0x2d, 0x1b, 0xad, 0x10, + 0x64, 0x19, 0xcc, 0x60, 0x93, 0x61, 0x02, 0xf0, + 0x81, 0xfd, 0x70, 0xbd, 0x02, 0x28, 0x12, 0xd1, + 0x90, 0x6a, 0x0c, 0x1c, 0x00, 0x28, 0xf8, 0xd0, + 0x07, 0xf0, 0x0e, 0xfa, 0xa0, 0x7a, 0x01, 0x28, + 0x3c, 0x00, 0x30, 0xc0, 0x00, 0x00, 0xf3, 0xd1, + 0x20, 0x68, 0x81, 0x6a, 0x00, 0x29, 0xef, 0xd1, + 0x20, 0x30, 0x01, 0x7b, 0x08, 0x22, 0x11, 0x43, + 0x01, 0x73, 0x70, 0xbd, 0x02, 0xf0, 0x21, 0xfd, + 0x70, 0xbd, 0x0e, 0x21, 0x1f, 0x20, 0xf5, 0xf7, + 0x28, 0xf9, 0x70, 0xbd, 0x00, 0x00, 0x14, 0x7a, + 0x01, 0x00, 0x02, 0x49, 0x0c, 0x31, 0x03, 0xc9, + 0x40, 0x18, 0x70, 0x47, 0x00, 0x00, 0x14, 0x7a, + 0x01, 0x00, 0x3c, 0x00, 0x6c, 0xc0, 0x00, 0x00, + 0x05, 0x48, 0x80, 0xb5, 0x00, 0x68, 0x04, 0x22, + 0x20, 0x30, 0x01, 0x7b, 0x11, 0x43, 0x01, 0x73, + 0x07, 0xf0, 0xe4, 0xf9, 0x80, 0xbd, 0x00, 0x00, + 0x14, 0x7a, 0x01, 0x00, 0x70, 0xb5, 0x16, 0x4c, + 0x0e, 0x1c, 0xa1, 0x7a, 0x00, 0x29, 0x1c, 0xd0, + 0x21, 0x68, 0x08, 0x61, 0x07, 0xf0, 0x32, 0xfa, + 0x00, 0x28, 0x17, 0xd0, 0x20, 0x68, 0x00, 0x25, + 0x05, 0x62, 0x00, 0x22, 0x3c, 0x00, 0xa8, 0xc0, + 0x00, 0x00, 0x83, 0x21, 0x1f, 0x20, 0x07, 0xf0, + 0x94, 0xfa, 0x60, 0x68, 0xff, 0xf7, 0x03, 0xfc, + 0x21, 0x68, 0x04, 0x22, 0x20, 0x31, 0x08, 0x7b, + 0x2b, 0x1c, 0x90, 0x43, 0x08, 0x73, 0x31, 0x1c, + 0x00, 0x22, 0x1f, 0x20, 0x07, 0xf0, 0x61, 0xfb, + 0x70, 0xbd, 0x20, 0x68, 0x08, 0x22, 0x20, 0x30, + 0x01, 0x7b, 0x11, 0x43, 0x01, 0x73, 0x02, 0xf0, + 0xd6, 0xfc, 0x70, 0xbd, 0x00, 0x00, 0x3c, 0x00, + 0xe4, 0xc0, 0x00, 0x00, 0x14, 0x7a, 0x01, 0x00, + 0x80, 0xb5, 0x00, 0xf0, 0x77, 0xfc, 0x00, 0xf0, + 0x6f, 0xfc, 0x00, 0xf0, 0x29, 0xff, 0x00, 0xf0, + 0x5d, 0xfa, 0x00, 0xf0, 0xc5, 0xf8, 0x00, 0xf0, + 0x85, 0xff, 0x80, 0xbd, 0x80, 0xb5, 0xfa, 0xf7, + 0x85, 0xfa, 0x80, 0xbd, 0x01, 0x48, 0xc0, 0x68, + 0x70, 0x47, 0x00, 0x00, 0x28, 0x7a, 0x01, 0x00, + 0x03, 0x49, 0x00, 0x28, 0x00, 0xd0, 0x01, 0x1c, + 0x3c, 0x00, 0x20, 0xc1, 0x00, 0x00, 0x02, 0x48, + 0xc1, 0x60, 0x70, 0x47, 0x00, 0x00, 0x81, 0x75, + 0x00, 0x00, 0x28, 0x7a, 0x01, 0x00, 0x01, 0x48, + 0x02, 0x49, 0xc8, 0x60, 0x70, 0x47, 0x81, 0x75, + 0x00, 0x00, 0x28, 0x7a, 0x01, 0x00, 0x01, 0x49, + 0x88, 0x61, 0x70, 0x47, 0x00, 0x00, 0x28, 0x7a, + 0x01, 0x00, 0x01, 0x49, 0x00, 0x20, 0x88, 0x61, + 0x70, 0x47, 0x28, 0x7a, 0x01, 0x00, 0x03, 0x49, + 0x00, 0x28, 0x3c, 0x00, 0x5c, 0xc1, 0x00, 0x00, + 0x00, 0xd0, 0x01, 0x1c, 0x02, 0x48, 0xc1, 0x61, + 0x70, 0x47, 0x00, 0x00, 0x89, 0x75, 0x00, 0x00, + 0x28, 0x7a, 0x01, 0x00, 0x03, 0x49, 0x00, 0x28, + 0x00, 0xd0, 0x01, 0x1c, 0x02, 0x48, 0x81, 0x62, + 0x70, 0x47, 0x00, 0x00, 0x8d, 0x75, 0x00, 0x00, + 0x28, 0x7a, 0x01, 0x00, 0x03, 0x49, 0x00, 0x28, + 0x00, 0xd0, 0x01, 0x1c, 0x02, 0x48, 0x01, 0x62, + 0x70, 0x47, 0x00, 0x00, 0x3c, 0x00, 0x98, 0xc1, + 0x00, 0x00, 0x91, 0x75, 0x00, 0x00, 0x28, 0x7a, + 0x01, 0x00, 0x03, 0x49, 0x00, 0x28, 0x00, 0xd0, + 0x01, 0x1c, 0x02, 0x48, 0x01, 0x61, 0x70, 0x47, + 0x00, 0x00, 0x99, 0x75, 0x00, 0x00, 0x28, 0x7a, + 0x01, 0x00, 0x01, 0x48, 0x02, 0x49, 0x08, 0x61, + 0x70, 0x47, 0x81, 0x75, 0x00, 0x00, 0x28, 0x7a, + 0x01, 0x00, 0x02, 0x1c, 0x08, 0x1c, 0x80, 0x2a, + 0x80, 0xb5, 0x02, 0xd1, 0x00, 0xf0, 0x3c, 0x00, + 0xd4, 0xc1, 0x00, 0x00, 0x07, 0xf8, 0x80, 0xbd, + 0x1e, 0x21, 0x21, 0x20, 0xf5, 0xf7, 0x62, 0xf8, + 0x80, 0xbd, 0x00, 0x00, 0xb0, 0xb5, 0x10, 0x4d, + 0x04, 0x1c, 0xa8, 0x6b, 0x01, 0x30, 0xa8, 0x63, + 0x69, 0x6b, 0x09, 0x1a, 0x28, 0x1c, 0x00, 0x6b, + 0x0c, 0x29, 0x03, 0xd9, 0x00, 0x21, 0xff, 0xf7, + 0x91, 0xfa, 0x03, 0xe0, 0x08, 0x29, 0x01, 0xd1, + 0xff, 0xf7, 0x32, 0xfb, 0x20, 0x1c, 0x00, 0xf0, + 0x3c, 0x00, 0x10, 0xc2, 0x00, 0x00, 0x4d, 0xf9, + 0x60, 0x69, 0x40, 0x07, 0x01, 0xd5, 0x03, 0xf0, + 0x0c, 0xfc, 0x20, 0x1c, 0xe9, 0x6a, 0xf4, 0xf7, + 0xdb, 0xf8, 0xb0, 0xbd, 0x00, 0x00, 0x28, 0x7a, + 0x01, 0x00, 0x03, 0x49, 0x00, 0x28, 0x00, 0xd0, + 0x01, 0x1c, 0x02, 0x48, 0x41, 0x62, 0x70, 0x47, + 0x00, 0x00, 0xb5, 0x75, 0x00, 0x00, 0x28, 0x7a, + 0x01, 0x00, 0x03, 0x49, 0x01, 0x20, 0x09, 0x6c, + 0x00, 0x29, 0x3c, 0x00, 0x4c, 0xc2, 0x00, 0x00, + 0x00, 0xd1, 0x00, 0x20, 0x70, 0x47, 0x00, 0x00, + 0x28, 0x7a, 0x01, 0x00, 0x10, 0xb5, 0x07, 0x4c, + 0xe1, 0x6b, 0x00, 0x29, 0x01, 0xd1, 0xe0, 0x63, + 0x04, 0xe0, 0x81, 0x42, 0x02, 0xd0, 0x00, 0x20, + 0xc0, 0x43, 0xf8, 0xe7, 0x06, 0xf0, 0x9c, 0xfd, + 0x20, 0x64, 0x10, 0xbd, 0x28, 0x7a, 0x01, 0x00, + 0x01, 0x48, 0x00, 0x6c, 0x70, 0x47, 0x00, 0x00, + 0x28, 0x7a, 0x01, 0x00, 0x3c, 0x00, 0x88, 0xc2, + 0x00, 0x00, 0x05, 0x49, 0x80, 0xb5, 0x00, 0x20, + 0x48, 0x63, 0x88, 0x63, 0xff, 0x21, 0x09, 0x31, + 0x15, 0x22, 0x10, 0x20, 0xf6, 0xf7, 0xfb, 0xf9, + 0x80, 0xbd, 0x28, 0x7a, 0x01, 0x00, 0x03, 0x49, + 0x00, 0x28, 0x00, 0xd0, 0x01, 0x1c, 0x02, 0x48, + 0x81, 0x60, 0x70, 0x47, 0x00, 0x00, 0xc1, 0x75, + 0x00, 0x00, 0x28, 0x7a, 0x01, 0x00, 0x03, 0x49, + 0x00, 0x28, 0x00, 0xd0, 0x01, 0x1c, 0x3c, 0x00, + 0xc4, 0xc2, 0x00, 0x00, 0x02, 0x48, 0xc1, 0x62, + 0x70, 0x47, 0x00, 0x00, 0xc5, 0x75, 0x00, 0x00, + 0x28, 0x7a, 0x01, 0x00, 0x04, 0x4b, 0x05, 0x49, + 0x00, 0x28, 0x5a, 0x68, 0x00, 0xd0, 0x01, 0x1c, + 0x10, 0x1c, 0x59, 0x60, 0x70, 0x47, 0x00, 0x00, + 0x28, 0x7a, 0x01, 0x00, 0xc9, 0x75, 0x00, 0x00, + 0x03, 0x49, 0x00, 0x28, 0x00, 0xd0, 0x01, 0x1c, + 0x02, 0x48, 0x41, 0x61, 0x70, 0x47, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0xc3, 0x00, 0x00, 0xcd, 0x75, + 0x00, 0x00, 0x28, 0x7a, 0x01, 0x00, 0x0f, 0x4b, + 0x10, 0xb5, 0xd9, 0x68, 0x00, 0x29, 0x19, 0xd0, + 0x0e, 0x4c, 0x00, 0x21, 0xca, 0x00, 0x12, 0x19, + 0x40, 0x3a, 0xd2, 0x6b, 0x82, 0x42, 0x02, 0xda, + 0x01, 0x31, 0x03, 0x29, 0xf6, 0xd3, 0x48, 0x1c, + 0x1a, 0x78, 0x00, 0x06, 0x00, 0x0e, 0x90, 0x42, + 0x08, 0xd0, 0x18, 0x70, 0x08, 0x06, 0x00, 0x0e, + 0x04, 0x1c, 0x3c, 0x00, 0x3c, 0xc3, 0x00, 0x00, + 0xf6, 0xf7, 0xba, 0xfa, 0x20, 0x1c, 0x03, 0xf0, + 0x1b, 0xfd, 0x10, 0xbd, 0x18, 0x63, 0x01, 0x00, + 0x3c, 0x42, 0x01, 0x00, 0x10, 0xb5, 0x14, 0x4c, + 0xe1, 0x68, 0x00, 0x29, 0x22, 0xd0, 0x21, 0x78, + 0x12, 0x4b, 0xca, 0x00, 0xd2, 0x18, 0x40, 0x3a, + 0xd3, 0x6b, 0x83, 0x42, 0x02, 0xda, 0x48, 0x1c, + 0x20, 0x70, 0x0b, 0xe0, 0x92, 0x6b, 0x82, 0x42, + 0x14, 0xdd, 0xff, 0x31, 0x3c, 0x00, 0x78, 0xc3, + 0x00, 0x00, 0x08, 0x06, 0x00, 0x0e, 0x20, 0x70, + 0x03, 0xd1, 0x19, 0x21, 0x86, 0x20, 0xf4, 0xf7, + 0x8e, 0xff, 0x20, 0x78, 0xff, 0x30, 0x00, 0x06, + 0x00, 0x0e, 0xf6, 0xf7, 0x90, 0xfa, 0x20, 0x78, + 0xff, 0x30, 0x00, 0x06, 0x00, 0x0e, 0x03, 0xf0, + 0xee, 0xfc, 0x10, 0xbd, 0x00, 0x00, 0x18, 0x63, + 0x01, 0x00, 0x3c, 0x42, 0x01, 0x00, 0x09, 0x48, + 0x00, 0x21, 0x01, 0x81, 0x41, 0x81, 0x3c, 0x00, + 0xb4, 0xc3, 0x00, 0x00, 0x81, 0x81, 0xc1, 0x81, + 0x07, 0x4a, 0x02, 0x80, 0x01, 0x23, 0xdb, 0x02, + 0x43, 0x80, 0x82, 0x80, 0xc2, 0x80, 0x41, 0x76, + 0x31, 0x21, 0x81, 0x76, 0x01, 0x21, 0x01, 0x76, + 0x70, 0x47, 0x00, 0x00, 0x30, 0x80, 0x07, 0x00, + 0xff, 0xff, 0x00, 0x00, 0x80, 0xb5, 0x01, 0x20, + 0xf6, 0xf7, 0xf8, 0xf8, 0x01, 0x20, 0xf6, 0xf7, + 0xdb, 0xfc, 0x01, 0x20, 0xf6, 0xf7, 0x5a, 0xfa, + 0x3c, 0x00, 0xf0, 0xc3, 0x00, 0x00, 0x01, 0x20, + 0x00, 0xf0, 0xf1, 0xfd, 0x01, 0x20, 0xf7, 0xf7, + 0xc6, 0xfb, 0x80, 0xbd, 0x00, 0x00, 0x10, 0xb5, + 0x11, 0x4c, 0x00, 0x29, 0x07, 0xd1, 0x00, 0x28, + 0x02, 0xd1, 0x01, 0x20, 0xe0, 0x60, 0x06, 0xe0, + 0x00, 0x21, 0xe1, 0x60, 0x03, 0xe0, 0x01, 0x29, + 0x07, 0xd1, 0x00, 0x28, 0x01, 0xd0, 0x20, 0x70, + 0x03, 0xe0, 0x18, 0x21, 0x86, 0x20, 0xf4, 0xf7, + 0x3c, 0xff, 0x3c, 0x00, 0x2c, 0xc4, 0x00, 0x00, + 0x20, 0x78, 0xff, 0x30, 0x00, 0x06, 0x00, 0x0e, + 0xf6, 0xf7, 0x3e, 0xfa, 0x20, 0x78, 0xff, 0x30, + 0x00, 0x06, 0x00, 0x0e, 0x03, 0xf0, 0x9c, 0xfc, + 0x10, 0xbd, 0x00, 0x00, 0x18, 0x63, 0x01, 0x00, + 0x05, 0x49, 0x80, 0xb5, 0x09, 0x68, 0x88, 0x42, + 0x05, 0xd0, 0xfe, 0xf7, 0xff, 0xfb, 0x00, 0xf0, + 0x87, 0xfa, 0xff, 0xf7, 0x2b, 0xfc, 0x80, 0xbd, + 0xa8, 0x69, 0x01, 0x00, 0x3c, 0x00, 0x68, 0xc4, + 0x00, 0x00, 0x01, 0x49, 0x48, 0x70, 0x70, 0x47, + 0x00, 0x00, 0x2c, 0x63, 0x01, 0x00, 0x01, 0x49, + 0xc8, 0x60, 0x70, 0x47, 0x00, 0x00, 0x4c, 0x7b, + 0x01, 0x00, 0x03, 0x49, 0x01, 0x20, 0x09, 0x78, + 0x00, 0x29, 0x00, 0xd0, 0x00, 0x20, 0x70, 0x47, + 0x00, 0x00, 0x2c, 0x63, 0x01, 0x00, 0x04, 0x4a, + 0x00, 0x28, 0x02, 0xd0, 0x90, 0x69, 0x01, 0x30, + 0x90, 0x61, 0xd0, 0x69, 0x40, 0x18, 0x3c, 0x00, + 0xa4, 0xc4, 0x00, 0x00, 0xd0, 0x61, 0x70, 0x47, + 0x90, 0x5c, 0x01, 0x00, 0xfe, 0xb5, 0x04, 0x1c, + 0x00, 0x68, 0x05, 0x68, 0x28, 0x1c, 0xfe, 0xf7, + 0x27, 0xff, 0x07, 0x1c, 0x60, 0x69, 0x15, 0x4e, + 0xc0, 0x07, 0xc0, 0x0f, 0x21, 0xd0, 0x01, 0xaa, + 0x02, 0xa9, 0x28, 0x1c, 0xfe, 0xf7, 0x12, 0xff, + 0x38, 0x78, 0xc0, 0x07, 0x0c, 0xd4, 0x60, 0x69, + 0x80, 0x07, 0x08, 0xd5, 0x00, 0xab, 0x18, 0x7a, + 0x3c, 0x00, 0xe0, 0xc4, 0x00, 0x00, 0x00, 0x28, + 0x01, 0xd0, 0x02, 0x28, 0x02, 0xd1, 0x70, 0x6a, + 0x01, 0x30, 0x70, 0x62, 0xfe, 0xbd, 0x00, 0xab, + 0x18, 0x7a, 0x00, 0x28, 0x01, 0xd0, 0x02, 0x28, + 0xf8, 0xd1, 0x70, 0x6a, 0x01, 0x30, 0x70, 0x62, + 0xb0, 0x6a, 0x01, 0x30, 0xb0, 0x62, 0xf1, 0xe7, + 0xf0, 0x6a, 0x01, 0x30, 0xf0, 0x62, 0xed, 0xe7, + 0x00, 0x00, 0x90, 0x5c, 0x01, 0x00, 0x02, 0x49, + 0x48, 0x69, 0x3c, 0x00, 0x1c, 0xc5, 0x00, 0x00, + 0x01, 0x30, 0x48, 0x61, 0x70, 0x47, 0x00, 0x00, + 0x90, 0x5c, 0x01, 0x00, 0x70, 0x47, 0x00, 0x00, + 0x70, 0x47, 0x00, 0x00, 0x01, 0x1c, 0x40, 0x31, + 0x10, 0xb5, 0x0a, 0x8b, 0x12, 0x07, 0x92, 0x0f, + 0x01, 0x2a, 0x33, 0xd0, 0x4a, 0x78, 0x1a, 0x49, + 0x04, 0x1c, 0x60, 0x34, 0x00, 0x2a, 0x0b, 0x6a, + 0x22, 0xd1, 0xe2, 0x79, 0x01, 0x2a, 0x02, 0xd9, + 0xcc, 0x68, 0x01, 0x34, 0x3c, 0x00, 0x58, 0xc5, + 0x00, 0x00, 0xcc, 0x60, 0x02, 0x2a, 0x02, 0xd9, + 0x0c, 0x69, 0x01, 0x34, 0x0c, 0x61, 0x0c, 0x68, + 0x01, 0x34, 0x0c, 0x60, 0x44, 0x6b, 0x00, 0x2c, + 0x03, 0xd0, 0x04, 0x69, 0x24, 0x7c, 0xe4, 0x07, + 0x02, 0xd5, 0x4c, 0x68, 0x01, 0x34, 0x4c, 0x60, + 0x80, 0x6b, 0x00, 0x28, 0x02, 0xd0, 0x08, 0x6b, + 0x01, 0x30, 0x08, 0x63, 0x00, 0x2a, 0x0c, 0xd0, + 0x98, 0x18, 0x01, 0x38, 0x08, 0xe0, 0x3c, 0x00, + 0x94, 0xc5, 0x00, 0x00, 0x01, 0x2a, 0x01, 0xd0, + 0x02, 0x2a, 0x02, 0xd1, 0x88, 0x68, 0x01, 0x30, + 0x88, 0x60, 0xe0, 0x79, 0x18, 0x18, 0x08, 0x62, + 0x10, 0xbd, 0x00, 0x00, 0x90, 0x5c, 0x01, 0x00, + 0x70, 0x47, 0x00, 0x00, 0x01, 0x49, 0x0a, 0x20, + 0x08, 0x81, 0x70, 0x47, 0xc4, 0x7a, 0x01, 0x00, + 0xf0, 0xb5, 0x32, 0x4f, 0x04, 0x1c, 0x78, 0x78, + 0x85, 0xb0, 0xc0, 0x07, 0xc0, 0x0f, 0x03, 0x90, + 0x3c, 0x00, 0xd0, 0xc5, 0x00, 0x00, 0xb8, 0x78, + 0x02, 0x90, 0x01, 0x20, 0xa0, 0x40, 0x04, 0x90, + 0x39, 0x1c, 0x88, 0x70, 0x2c, 0x48, 0x00, 0x88, + 0x06, 0xf0, 0x0b, 0xfc, 0x01, 0x90, 0xfe, 0xf7, + 0xae, 0xfc, 0x04, 0x30, 0x29, 0x4e, 0xa5, 0x00, + 0x71, 0x59, 0x09, 0x79, 0x88, 0x42, 0x06, 0xd0, + 0xfe, 0xf7, 0xa5, 0xfc, 0x71, 0x59, 0x04, 0x30, + 0x08, 0x71, 0x01, 0x20, 0x78, 0x70, 0x00, 0x20, + 0x78, 0x70, 0x3c, 0x00, 0x0c, 0xc6, 0x00, 0x00, + 0x21, 0x48, 0x01, 0x21, 0x20, 0x4e, 0x30, 0x38, + 0x01, 0x55, 0x71, 0x59, 0x03, 0x20, 0x08, 0x70, + 0x06, 0xf0, 0xc6, 0xfb, 0x06, 0x1c, 0xfe, 0xf7, + 0x91, 0xfc, 0x36, 0x18, 0x0e, 0x36, 0x09, 0xe0, + 0x30, 0x1c, 0x06, 0xf0, 0xf5, 0xfa, 0x00, 0x28, + 0x04, 0xd0, 0x23, 0x21, 0x86, 0x20, 0xf4, 0xf7, + 0x33, 0xfe, 0x03, 0xe0, 0xf6, 0xf7, 0x34, 0xfb, + 0x00, 0x28, 0xf1, 0xd0, 0x3c, 0x00, 0x48, 0xc6, + 0x00, 0x00, 0x12, 0x48, 0x13, 0x49, 0x3c, 0x38, + 0x00, 0x78, 0x08, 0x72, 0x20, 0x1c, 0xf4, 0xf7, + 0xa2, 0xfa, 0x0e, 0x4e, 0x71, 0x59, 0x08, 0x71, + 0x03, 0x98, 0x00, 0x28, 0x01, 0xd0, 0x01, 0x21, + 0x79, 0x70, 0x09, 0x48, 0x00, 0x88, 0x01, 0x99, + 0x06, 0xf0, 0xbd, 0xfb, 0x02, 0x98, 0xb8, 0x70, + 0x09, 0x49, 0x49, 0x79, 0x04, 0x98, 0x88, 0x42, + 0x03, 0xd0, 0x24, 0x21, 0x86, 0x20, 0x3c, 0x00, + 0x84, 0xc6, 0x00, 0x00, 0xf4, 0xf7, 0x0e, 0xfe, + 0x05, 0xb0, 0xf0, 0xbd, 0x00, 0x50, 0x07, 0x00, + 0xd0, 0x79, 0x01, 0x00, 0x10, 0x7b, 0x01, 0x00, + 0x80, 0x80, 0x07, 0x00, 0x50, 0x80, 0x07, 0x00, + 0xb0, 0xb5, 0x0d, 0x1c, 0x04, 0x1c, 0x05, 0x28, + 0x01, 0xd3, 0xf4, 0xf7, 0x29, 0xfe, 0x05, 0x2d, + 0x01, 0xd3, 0xf4, 0xf7, 0x25, 0xfe, 0x0b, 0x4a, + 0xa8, 0x00, 0x11, 0x58, 0xa0, 0x00, 0x10, 0x58, + 0x3c, 0x00, 0xc0, 0xc6, 0x00, 0x00, 0x0e, 0xc9, + 0x0e, 0xc0, 0x06, 0x21, 0x06, 0x22, 0x06, 0x48, + 0x69, 0x43, 0x2a, 0x38, 0x09, 0x18, 0x62, 0x43, + 0x10, 0x18, 0x06, 0x22, 0xf3, 0xf7, 0x0f, 0xff, + 0x02, 0x48, 0x30, 0x38, 0x41, 0x5d, 0x01, 0x55, + 0xb0, 0xbd, 0x10, 0x7b, 0x01, 0x00, 0xb0, 0xb5, + 0x04, 0x1c, 0x0e, 0x48, 0x0d, 0x1c, 0x80, 0x78, + 0x01, 0x21, 0xa1, 0x40, 0x08, 0x40, 0x03, 0xd0, + 0x01, 0x21, 0x3c, 0x00, 0xfc, 0xc6, 0x00, 0x00, + 0x86, 0x20, 0xf4, 0xf7, 0xd1, 0xfd, 0x06, 0x21, + 0x06, 0x22, 0x09, 0x48, 0x69, 0x43, 0x09, 0x18, + 0x62, 0x43, 0x10, 0x18, 0x06, 0x22, 0xf3, 0xf7, + 0xf1, 0xfe, 0x20, 0x1c, 0xf4, 0xf7, 0x40, 0xfa, + 0x03, 0x4a, 0xa1, 0x00, 0x2a, 0x32, 0x51, 0x58, + 0x08, 0x71, 0xb0, 0xbd, 0x00, 0x50, 0x07, 0x00, + 0xe6, 0x7a, 0x01, 0x00, 0x03, 0x49, 0x80, 0xb5, + 0x00, 0x20, 0x48, 0x60, 0x3c, 0x00, 0x38, 0xc7, + 0x00, 0x00, 0x07, 0xf0, 0x32, 0xf9, 0x80, 0xbd, + 0x00, 0x00, 0xd4, 0x7a, 0x01, 0x00, 0x10, 0xb5, + 0x04, 0x1c, 0x05, 0x28, 0x01, 0xd3, 0xf4, 0xf7, + 0xd8, 0xfd, 0x07, 0x49, 0x08, 0x7a, 0x07, 0x4a, + 0x10, 0x70, 0x01, 0x20, 0x08, 0x72, 0xfe, 0xf7, + 0xf4, 0xfb, 0x04, 0x4a, 0x04, 0x30, 0xa1, 0x00, + 0x3c, 0x32, 0x51, 0x58, 0x08, 0x71, 0x10, 0xbd, + 0x00, 0x00, 0x80, 0x80, 0x07, 0x00, 0x3c, 0x00, + 0x74, 0xc7, 0x00, 0x00, 0xd4, 0x7a, 0x01, 0x00, + 0x03, 0x49, 0x80, 0xb5, 0x01, 0x20, 0x48, 0x60, + 0x07, 0xf0, 0x0e, 0xf9, 0x80, 0xbd, 0x00, 0x00, + 0xd4, 0x7a, 0x01, 0x00, 0x10, 0xb5, 0x04, 0x1c, + 0x05, 0x28, 0x01, 0xd3, 0xf4, 0xf7, 0xb4, 0xfd, + 0x20, 0x1c, 0xf5, 0xf7, 0x8f, 0xfe, 0x00, 0x21, + 0x20, 0x1c, 0xfb, 0xf7, 0x31, 0xfd, 0x01, 0x21, + 0x00, 0x28, 0x00, 0xd0, 0x01, 0x1c, 0x09, 0x04, + 0x3c, 0x00, 0xb0, 0xc7, 0x00, 0x00, 0x09, 0x0c, + 0x20, 0x1c, 0x04, 0xf0, 0x22, 0xfa, 0x10, 0xbd, + 0x00, 0x00, 0x06, 0x49, 0x01, 0x20, 0x05, 0x4b, + 0x88, 0x60, 0x00, 0x20, 0x3c, 0x33, 0x00, 0x21, + 0x82, 0x00, 0x9a, 0x58, 0x11, 0x70, 0x01, 0x30, + 0x05, 0x28, 0xf9, 0xdb, 0x70, 0x47, 0xd4, 0x7a, + 0x01, 0x00, 0x0f, 0x49, 0x38, 0xb5, 0x00, 0x20, + 0x88, 0x60, 0x0e, 0x48, 0x01, 0x1c, 0x20, 0x31, + 0x8a, 0x79, 0x3c, 0x00, 0xec, 0xc7, 0x00, 0x00, + 0x00, 0xab, 0x1a, 0x70, 0xc9, 0x79, 0x0a, 0x4c, + 0x09, 0x4d, 0x59, 0x70, 0x0c, 0x34, 0x3c, 0x35, + 0x00, 0x21, 0x03, 0x22, 0x63, 0x5c, 0x00, 0x2b, + 0x02, 0xd0, 0x8b, 0x00, 0xeb, 0x58, 0x1a, 0x70, + 0x01, 0x31, 0x05, 0x29, 0xf6, 0xdb, 0x00, 0xab, + 0x19, 0x88, 0xc1, 0x84, 0x38, 0xbd, 0x00, 0x00, + 0xd4, 0x7a, 0x01, 0x00, 0x00, 0x10, 0x07, 0x00, + 0xff, 0xb5, 0x14, 0x4f, 0x3c, 0x00, 0x28, 0xc8, + 0x00, 0x00, 0x04, 0x1c, 0xbe, 0x79, 0x0d, 0x1c, + 0x81, 0xb0, 0x0f, 0x20, 0x00, 0xf0, 0xb9, 0xf8, + 0x2a, 0x1c, 0x10, 0x4d, 0x00, 0x90, 0x21, 0x1c, + 0x28, 0x1c, 0xf4, 0xf7, 0xde, 0xfc, 0x21, 0x1c, + 0xa8, 0x1d, 0x03, 0x9a, 0xf4, 0xf7, 0xd9, 0xfc, + 0x21, 0x1c, 0x28, 0x1c, 0x0c, 0x30, 0x04, 0x9a, + 0xf4, 0xf7, 0xd3, 0xfc, 0x21, 0x1c, 0x28, 0x1c, + 0x12, 0x30, 0x0a, 0x9a, 0xf4, 0xf7, 0x3c, 0x00, + 0x64, 0xc8, 0x00, 0x00, 0xcd, 0xfc, 0x07, 0xf0, + 0x9b, 0xf8, 0x00, 0x98, 0x00, 0xf0, 0x76, 0xf8, + 0xbe, 0x71, 0x05, 0xb0, 0xf0, 0xbd, 0x00, 0x00, + 0x20, 0x10, 0x07, 0x00, 0xe6, 0x7a, 0x01, 0x00, + 0x10, 0xb5, 0x00, 0x20, 0xf6, 0xf7, 0x26, 0xf8, + 0x07, 0x49, 0x88, 0x78, 0x00, 0x09, 0x00, 0x01, + 0x88, 0x70, 0x00, 0x24, 0x20, 0x1c, 0xf5, 0xf7, + 0x11, 0xfe, 0x01, 0x34, 0x24, 0x06, 0x24, 0x0e, + 0x3c, 0x00, 0xa0, 0xc8, 0x00, 0x00, 0x04, 0x2c, + 0xf7, 0xd3, 0x10, 0xbd, 0x00, 0x00, 0x00, 0x50, + 0x07, 0x00, 0x80, 0xb5, 0x02, 0xf0, 0xe3, 0xfb, + 0x03, 0x48, 0x81, 0x78, 0x0f, 0x22, 0x11, 0x43, + 0x81, 0x70, 0x80, 0xbd, 0x00, 0x00, 0x00, 0x50, + 0x07, 0x00, 0xf8, 0xb5, 0x0d, 0x1c, 0x04, 0x1c, + 0x05, 0x28, 0x01, 0xd3, 0xf4, 0xf7, 0x17, 0xfd, + 0xa6, 0x00, 0x00, 0x2d, 0x11, 0x4f, 0x07, 0xd1, + 0xb8, 0x59, 0x3c, 0x00, 0xdc, 0xc8, 0x00, 0x00, + 0x81, 0x68, 0x00, 0x29, 0x0e, 0xd1, 0x40, 0x78, + 0x00, 0x28, 0x0b, 0xd0, 0x02, 0xe0, 0xff, 0x35, + 0x2d, 0x06, 0x2d, 0x0e, 0x29, 0x1c, 0x20, 0x1c, + 0xfb, 0xf7, 0x88, 0xfc, 0x01, 0x1c, 0x20, 0x1c, + 0x04, 0xf0, 0x7e, 0xf9, 0x06, 0x49, 0x01, 0x20, + 0x30, 0x39, 0x08, 0x55, 0x04, 0x48, 0x3c, 0x38, + 0x80, 0x68, 0x00, 0x28, 0x02, 0xd1, 0xb9, 0x59, + 0x03, 0x20, 0x08, 0x70, 0x3c, 0x00, 0x18, 0xc9, + 0x00, 0x00, 0xf8, 0xbd, 0x00, 0x00, 0x10, 0x7b, + 0x01, 0x00, 0x80, 0xb5, 0x04, 0xf0, 0xcd, 0xf9, + 0x80, 0xbd, 0x10, 0xb5, 0x04, 0x1c, 0x05, 0x28, + 0x01, 0xd3, 0xf4, 0xf7, 0xe6, 0xfc, 0x20, 0x1c, + 0xf5, 0xf7, 0xc1, 0xfd, 0x00, 0x20, 0x05, 0x4a, + 0xa1, 0x00, 0x51, 0x58, 0x88, 0x60, 0x04, 0x49, + 0x88, 0x78, 0x01, 0x22, 0xa2, 0x40, 0x10, 0x43, + 0x88, 0x70, 0x10, 0xbd, 0x00, 0x00, 0x3c, 0x00, + 0x54, 0xc9, 0x00, 0x00, 0x10, 0x7b, 0x01, 0x00, + 0x00, 0x50, 0x07, 0x00, 0x02, 0x4a, 0x91, 0x78, + 0x08, 0x43, 0x90, 0x70, 0x70, 0x47, 0x00, 0x00, + 0x00, 0x50, 0x07, 0x00, 0xf8, 0xb5, 0x0c, 0x4f, + 0xbe, 0x79, 0x0f, 0x20, 0x00, 0xf0, 0x18, 0xf8, + 0x05, 0x1c, 0x00, 0x24, 0x20, 0x1c, 0xf4, 0xf7, + 0x0d, 0xf9, 0x08, 0x4a, 0xa1, 0x00, 0x51, 0x58, + 0x08, 0x71, 0x01, 0x34, 0x24, 0x06, 0x24, 0x0e, + 0x3c, 0x00, 0x90, 0xc9, 0x00, 0x00, 0x04, 0x2c, + 0xf3, 0xd3, 0x28, 0x1c, 0xff, 0xf7, 0xe1, 0xff, + 0xbe, 0x71, 0xf8, 0xbd, 0x00, 0x00, 0x20, 0x10, + 0x07, 0x00, 0x10, 0x7b, 0x01, 0x00, 0xb0, 0xb5, + 0x08, 0x49, 0x8d, 0x78, 0x8a, 0x78, 0x05, 0x40, + 0x82, 0x43, 0x8a, 0x70, 0x06, 0xf0, 0xf9, 0xf9, + 0x04, 0x1c, 0x0a, 0x34, 0x20, 0x1c, 0x06, 0xf0, + 0x34, 0xf9, 0x00, 0x28, 0xfa, 0xd0, 0x28, 0x1c, + 0xb0, 0xbd, 0x3c, 0x00, 0xcc, 0xc9, 0x00, 0x00, + 0x00, 0x50, 0x07, 0x00, 0x01, 0x49, 0x0a, 0x20, + 0x08, 0x81, 0x70, 0x47, 0x38, 0x7b, 0x01, 0x00, + 0xf8, 0xb5, 0x10, 0x48, 0x04, 0x26, 0x04, 0x1c, + 0xe0, 0x34, 0x05, 0x1c, 0x38, 0x3d, 0x00, 0x27, + 0x20, 0x1c, 0x1c, 0x30, 0xe4, 0x60, 0xa0, 0x61, + 0x27, 0x61, 0x0b, 0x48, 0xa6, 0x82, 0xe0, 0x61, + 0x27, 0x62, 0xa7, 0x62, 0x06, 0x20, 0xa0, 0x84, + 0x20, 0x1c, 0xfe, 0xf7, 0x3c, 0x00, 0x08, 0xca, + 0x00, 0x00, 0x87, 0xfc, 0x20, 0x1c, 0x0c, 0x30, + 0xf6, 0xf7, 0xb7, 0xf9, 0x05, 0x49, 0x38, 0x3c, + 0xac, 0x42, 0x08, 0x80, 0xe7, 0xd1, 0xf8, 0xbd, + 0x00, 0x00, 0xd4, 0xe4, 0x01, 0x00, 0x12, 0x61, + 0x01, 0x00, 0x48, 0x7b, 0x01, 0x00, 0xf7, 0xb5, + 0x05, 0x1c, 0x0c, 0x23, 0x0f, 0x1c, 0x12, 0x49, + 0x58, 0x43, 0x44, 0x18, 0x20, 0x88, 0x06, 0xf0, + 0xea, 0xf9, 0xa0, 0x78, 0x01, 0x28, 0x3c, 0x00, + 0x44, 0xca, 0x00, 0x00, 0x1a, 0xd1, 0x66, 0x68, + 0x02, 0x2f, 0x05, 0xd1, 0x5c, 0x20, 0x80, 0x5b, + 0x02, 0x99, 0x00, 0x09, 0x88, 0x42, 0x11, 0xd1, + 0x28, 0x1c, 0xfe, 0xf7, 0xfb, 0xff, 0x30, 0x1c, + 0xf9, 0xf7, 0xfa, 0xfd, 0x04, 0x20, 0xa0, 0x70, + 0x39, 0x1c, 0x28, 0x1c, 0xfb, 0xf7, 0xf4, 0xf8, + 0x03, 0x4a, 0xe8, 0x00, 0x3c, 0x32, 0x11, 0x58, + 0x01, 0x31, 0x11, 0x50, 0xfe, 0xbd, 0x00, 0x00, + 0x3c, 0x00, 0x80, 0xca, 0x00, 0x00, 0x60, 0x7b, + 0x01, 0x00, 0x01, 0x20, 0x06, 0x4a, 0x00, 0x21, + 0x0c, 0x23, 0x4b, 0x43, 0x9b, 0x18, 0x9b, 0x78, + 0x00, 0x2b, 0x00, 0xd0, 0x00, 0x20, 0x01, 0x31, + 0x04, 0x29, 0xf5, 0xdb, 0x70, 0x47, 0x60, 0x7b, + 0x01, 0x00, 0x70, 0xb5, 0x04, 0x1c, 0xff, 0xf7, + 0xea, 0xfc, 0x00, 0x28, 0x03, 0xd1, 0x20, 0x21, + 0x0c, 0x20, 0xf4, 0xf7, 0xf6, 0xfb, 0x26, 0x1c, + 0x60, 0x36, 0x3c, 0x00, 0xbc, 0xca, 0x00, 0x00, + 0x00, 0x21, 0xf1, 0x71, 0xe1, 0x64, 0x60, 0x6b, + 0x25, 0x1c, 0x40, 0x35, 0x00, 0x28, 0x31, 0xd0, + 0xff, 0xf7, 0x04, 0xf9, 0x01, 0x22, 0x12, 0x03, + 0x00, 0x28, 0x20, 0x69, 0x01, 0x88, 0x01, 0xd0, + 0x91, 0x43, 0x00, 0xe0, 0x11, 0x43, 0x01, 0x80, + 0x20, 0x69, 0x01, 0x22, 0x00, 0x88, 0xd2, 0x02, + 0x28, 0x83, 0x20, 0x1c, 0x58, 0x30, 0x01, 0x88, + 0x91, 0x43, 0x01, 0x80, 0x3c, 0x00, 0xf8, 0xca, + 0x00, 0x00, 0xa3, 0x6b, 0x52, 0x08, 0x00, 0x2b, + 0x10, 0xd0, 0x91, 0x43, 0x01, 0x80, 0x28, 0x8b, + 0x00, 0x07, 0x80, 0x0f, 0x01, 0x28, 0x15, 0xd0, + 0x2e, 0x20, 0x01, 0x5d, 0x20, 0x69, 0x04, 0x30, + 0xf8, 0xf7, 0x41, 0xfd, 0x61, 0x6a, 0xfe, 0xf7, + 0xa8, 0xf9, 0x04, 0xe0, 0x11, 0x43, 0x01, 0x80, + 0x20, 0x1c, 0xfb, 0xf7, 0xcc, 0xfb, 0x68, 0x83, + 0x04, 0xe0, 0x20, 0x69, 0x41, 0x80, 0x3c, 0x00, + 0x34, 0xcb, 0x00, 0x00, 0xa8, 0x8b, 0x21, 0x69, + 0xc8, 0x82, 0xe0, 0x68, 0xf6, 0xf7, 0x20, 0xf9, + 0x30, 0x80, 0x60, 0x6d, 0x00, 0x28, 0x04, 0xd0, + 0x00, 0x22, 0x03, 0x21, 0x70, 0x7a, 0xfe, 0xf7, + 0x0d, 0xff, 0x20, 0x1c, 0x00, 0xf0, 0xb6, 0xf9, + 0x70, 0x7a, 0x06, 0xf0, 0x45, 0xf8, 0x70, 0xbd, + 0xb0, 0xb5, 0x00, 0x24, 0x06, 0xf0, 0x22, 0xf9, + 0x09, 0x4a, 0x00, 0x21, 0x0c, 0x23, 0x4b, 0x43, + 0x3c, 0x00, 0x70, 0xcb, 0x00, 0x00, 0x9d, 0x18, + 0x6b, 0x68, 0x5b, 0x6c, 0xad, 0x78, 0xc3, 0x1a, + 0x01, 0x2d, 0x02, 0xd1, 0xa3, 0x42, 0x00, 0xdd, + 0x1c, 0x1c, 0x01, 0x31, 0x05, 0x29, 0xf0, 0xd3, + 0x20, 0x1c, 0xb0, 0xbd, 0x00, 0x00, 0x60, 0x7b, + 0x01, 0x00, 0xb0, 0xb5, 0x04, 0x1c, 0x06, 0xf0, + 0xa8, 0xfe, 0x0c, 0x20, 0x08, 0x49, 0x60, 0x43, + 0x45, 0x18, 0x28, 0x88, 0x06, 0xf0, 0x35, 0xf9, + 0x68, 0x68, 0x3c, 0x00, 0xac, 0xcb, 0x00, 0x00, + 0x00, 0x28, 0x06, 0xd0, 0x20, 0x30, 0x00, 0x7b, + 0x01, 0x28, 0x02, 0xd1, 0x20, 0x1c, 0xff, 0xf7, + 0xa3, 0xfa, 0xb0, 0xbd, 0x60, 0x7b, 0x01, 0x00, + 0xff, 0xb5, 0x85, 0xb0, 0x0f, 0xae, 0x60, 0xce, + 0x38, 0x20, 0x1e, 0x49, 0x70, 0x43, 0x17, 0x1c, + 0x44, 0x18, 0xff, 0xf7, 0x7f, 0xf8, 0x01, 0x22, + 0x12, 0x03, 0x00, 0x28, 0x03, 0xd0, 0x20, 0x88, + 0x90, 0x43, 0x20, 0x80, 0x3c, 0x00, 0xe8, 0xcb, + 0x00, 0x00, 0x02, 0xe0, 0x21, 0x88, 0x11, 0x43, + 0x21, 0x80, 0x11, 0x98, 0x39, 0x1c, 0xe0, 0x62, + 0x05, 0x98, 0xf8, 0xf7, 0xd0, 0xfc, 0x01, 0x1c, + 0x2b, 0x1c, 0x38, 0x1c, 0x06, 0x9a, 0xfe, 0xf7, + 0x20, 0xf9, 0x60, 0x80, 0x06, 0x22, 0x20, 0x1d, + 0x0f, 0x49, 0xf3, 0xf7, 0x72, 0xfc, 0x23, 0x1c, + 0x08, 0x98, 0x30, 0x33, 0x18, 0x70, 0x0e, 0x98, + 0x0c, 0x49, 0x58, 0x70, 0x65, 0x63, 0x3c, 0x00, + 0x24, 0xcc, 0x00, 0x00, 0x00, 0x20, 0x02, 0x90, + 0x01, 0x22, 0x04, 0x92, 0x09, 0x48, 0x03, 0x91, + 0x5a, 0x78, 0x01, 0x88, 0x01, 0x92, 0x00, 0x91, + 0x19, 0x78, 0x24, 0x3b, 0x30, 0x1c, 0x62, 0x6b, + 0xfe, 0xf7, 0xa8, 0xfe, 0x09, 0xb0, 0xf0, 0xbd, + 0xd4, 0xe4, 0x01, 0x00, 0x12, 0x61, 0x01, 0x00, + 0x5d, 0x4e, 0x00, 0x00, 0x48, 0x7b, 0x01, 0x00, + 0xff, 0xb5, 0x87, 0xb0, 0x10, 0x98, 0x12, 0xaf, + 0x3c, 0x00, 0x60, 0xcc, 0x00, 0x00, 0x8c, 0x46, + 0xa2, 0xcf, 0x4c, 0x23, 0x30, 0x4c, 0x6b, 0x43, + 0x1c, 0x19, 0x16, 0x1c, 0x15, 0x9a, 0x27, 0x85, + 0x27, 0x1c, 0x30, 0x37, 0x06, 0x97, 0x05, 0x97, + 0x00, 0x23, 0x3b, 0x73, 0x05, 0x9f, 0x78, 0x73, + 0x11, 0x98, 0x27, 0x1c, 0x60, 0x64, 0x61, 0x60, + 0x22, 0x60, 0x40, 0x37, 0x3e, 0x70, 0x61, 0x46, + 0x61, 0x87, 0x07, 0x98, 0x31, 0x1c, 0xf8, 0xf7, + 0x80, 0xfc, 0x3c, 0x00, 0x9c, 0xcc, 0x00, 0x00, + 0x05, 0x99, 0xc8, 0x73, 0x0a, 0x98, 0x78, 0x70, + 0x30, 0x1c, 0xfe, 0xf7, 0x73, 0xf8, 0x00, 0x28, + 0x01, 0xd0, 0x01, 0x20, 0x00, 0xe0, 0x00, 0x20, + 0x41, 0x00, 0x02, 0x20, 0x01, 0x40, 0x11, 0x9a, + 0x01, 0x20, 0x00, 0x2a, 0x00, 0xd1, 0x00, 0x20, + 0x08, 0x43, 0x38, 0x72, 0x20, 0x1c, 0x2e, 0x30, + 0x07, 0x99, 0xfd, 0xf7, 0xcf, 0xff, 0x28, 0x1c, + 0x04, 0xf0, 0xae, 0xf8, 0x3c, 0x00, 0xd8, 0xcc, + 0x00, 0x00, 0xfe, 0xf7, 0xfe, 0xff, 0x4c, 0x22, + 0x12, 0x4b, 0x6a, 0x43, 0xd2, 0x18, 0x01, 0x21, + 0x09, 0x03, 0x2a, 0x32, 0x00, 0x28, 0x04, 0xd0, + 0x10, 0x1c, 0x12, 0x88, 0x8a, 0x43, 0x02, 0x80, + 0x02, 0xe0, 0x10, 0x88, 0x08, 0x43, 0x10, 0x80, + 0x0b, 0x49, 0x00, 0x20, 0x03, 0x91, 0x06, 0x99, + 0x02, 0x90, 0x00, 0x22, 0x04, 0x92, 0x08, 0x48, + 0x0a, 0x7b, 0x41, 0x88, 0x23, 0x1c, 0x3c, 0x00, + 0x14, 0xcd, 0x00, 0x00, 0x01, 0x92, 0x00, 0x91, + 0x79, 0x78, 0x08, 0x33, 0x28, 0x1c, 0x62, 0x68, + 0xfe, 0xf7, 0x38, 0xfe, 0x0b, 0xb0, 0xf0, 0xbd, + 0x58, 0xe3, 0x01, 0x00, 0x75, 0x4f, 0x00, 0x00, + 0x3c, 0x7c, 0x01, 0x00, 0xb0, 0xb5, 0x0c, 0x1c, + 0x01, 0x28, 0x27, 0xd0, 0x80, 0x28, 0x30, 0xd1, + 0xe0, 0x6c, 0x00, 0x28, 0x08, 0xd0, 0x69, 0x20, + 0x00, 0x5d, 0x18, 0x49, 0xc0, 0x00, 0x40, 0x18, + 0x3c, 0x00, 0x50, 0xcd, 0x00, 0x00, 0x04, 0x30, + 0x01, 0x68, 0x01, 0x31, 0x01, 0x60, 0x20, 0x1c, + 0xff, 0xf7, 0xe9, 0xfb, 0x13, 0x4d, 0x50, 0x3d, + 0xe8, 0x68, 0x00, 0x28, 0x05, 0xd0, 0x2e, 0x20, + 0x00, 0x5d, 0xfe, 0xf7, 0x10, 0xf8, 0x02, 0xf0, + 0x42, 0xfe, 0x20, 0x1c, 0x61, 0x68, 0xf3, 0xf7, + 0x2f, 0xfb, 0x40, 0x34, 0x60, 0x78, 0x00, 0x28, + 0x02, 0xd1, 0x06, 0xf0, 0x12, 0xf8, 0xa8, 0x60, + 0xb0, 0xbd, 0x3c, 0x00, 0x8c, 0xcd, 0x00, 0x00, + 0x20, 0x06, 0x00, 0x0e, 0x81, 0x28, 0xfa, 0xd1, + 0x22, 0x0c, 0x20, 0x04, 0x00, 0x0e, 0x02, 0x21, + 0xfe, 0xf7, 0xe6, 0xfd, 0xb0, 0xbd, 0x0a, 0x21, + 0x0c, 0x20, 0xf4, 0xf7, 0x7d, 0xfa, 0xb0, 0xbd, + 0x9c, 0x7b, 0x01, 0x00, 0xf8, 0xb5, 0x18, 0x4e, + 0x18, 0x4f, 0x05, 0x1c, 0x34, 0x79, 0xb8, 0x79, + 0x00, 0x90, 0x20, 0x1c, 0xf5, 0xf7, 0x7c, 0xff, + 0x00, 0x28, 0x06, 0xd0, 0x3c, 0x00, 0xc8, 0xcd, + 0x00, 0x00, 0x12, 0x48, 0x38, 0x38, 0x40, 0x68, + 0x85, 0x42, 0x01, 0xd1, 0x00, 0x2d, 0x03, 0xd1, + 0x10, 0x21, 0x86, 0x20, 0xf4, 0xf7, 0x63, 0xfa, + 0x0d, 0x49, 0x00, 0x20, 0x38, 0x39, 0x48, 0x60, + 0x04, 0x21, 0x20, 0x1c, 0xff, 0xf7, 0x59, 0xfc, + 0x04, 0x21, 0x20, 0x1c, 0xf5, 0xf7, 0xeb, 0xfe, + 0x0c, 0x21, 0x06, 0x4a, 0x61, 0x43, 0x30, 0x3a, + 0x89, 0x18, 0x0c, 0x71, 0x04, 0x20, 0x3c, 0x00, + 0x04, 0xce, 0x00, 0x00, 0x30, 0x71, 0x00, 0x98, + 0xb8, 0x71, 0x0f, 0x20, 0xff, 0xf7, 0xa6, 0xfd, + 0xf8, 0xbd, 0x00, 0x00, 0xa4, 0x7a, 0x01, 0x00, + 0x20, 0x10, 0x07, 0x00, 0xf8, 0xb5, 0x04, 0x1c, + 0x0f, 0x20, 0xff, 0xf7, 0xc1, 0xfd, 0xf5, 0xf7, + 0x3b, 0xff, 0x01, 0x25, 0x00, 0x28, 0x00, 0xd0, + 0x00, 0x25, 0x16, 0x4e, 0xb0, 0x79, 0x16, 0x4f, + 0x00, 0x90, 0x38, 0x79, 0x04, 0x28, 0x01, 0xd1, + 0x3c, 0x00, 0x40, 0xce, 0x00, 0x00, 0x00, 0x2c, + 0x03, 0xd1, 0x11, 0x21, 0x86, 0x20, 0xf4, 0xf7, + 0x2c, 0xfa, 0x10, 0x48, 0x29, 0x06, 0x38, 0x38, + 0x44, 0x60, 0x09, 0x0e, 0x0c, 0x1c, 0x04, 0x20, + 0xff, 0xf7, 0x21, 0xfc, 0x03, 0x21, 0x20, 0x1c, + 0xff, 0xf7, 0x41, 0xfc, 0x21, 0x1c, 0x04, 0x20, + 0xf5, 0xf7, 0xaf, 0xfe, 0x0c, 0x21, 0x07, 0x4a, + 0x69, 0x43, 0x04, 0x20, 0x30, 0x3a, 0x89, 0x18, + 0x08, 0x71, 0x3c, 0x00, 0x7c, 0xce, 0x00, 0x00, + 0x3c, 0x71, 0x00, 0x98, 0xb0, 0x71, 0x20, 0x1c, + 0xff, 0xf7, 0x50, 0xfd, 0x04, 0x20, 0xf8, 0xbd, + 0x20, 0x10, 0x07, 0x00, 0xa4, 0x7a, 0x01, 0x00, + 0x0c, 0x23, 0x02, 0x49, 0x58, 0x43, 0x40, 0x18, + 0x80, 0x68, 0x70, 0x47, 0x74, 0x7a, 0x01, 0x00, + 0x60, 0x30, 0xc1, 0x79, 0x80, 0x79, 0x81, 0x42, + 0x01, 0xd9, 0x01, 0x20, 0x70, 0x47, 0x00, 0x20, + 0x70, 0x47, 0x00, 0x00, 0x3c, 0x00, 0xb8, 0xce, + 0x00, 0x00, 0x01, 0x48, 0x80, 0x68, 0x70, 0x47, + 0x00, 0x00, 0x4c, 0x7b, 0x01, 0x00, 0x38, 0xb5, + 0x69, 0x21, 0x09, 0x5c, 0x18, 0x23, 0x10, 0x4a, + 0x59, 0x43, 0x89, 0x18, 0x8a, 0x68, 0x01, 0x32, + 0x8a, 0x60, 0x4b, 0x69, 0xd2, 0x1a, 0xcb, 0x68, + 0x93, 0x42, 0x00, 0xd2, 0xca, 0x60, 0x00, 0x22, + 0x0b, 0x4c, 0x02, 0x60, 0x22, 0x1c, 0x20, 0x32, + 0x95, 0x79, 0x00, 0xab, 0x1d, 0x70, 0x3c, 0x00, + 0xf4, 0xce, 0x00, 0x00, 0xd2, 0x79, 0x5a, 0x70, + 0x0a, 0x68, 0x00, 0x2a, 0x01, 0xd1, 0x48, 0x60, + 0x00, 0xe0, 0x10, 0x60, 0x00, 0xab, 0x08, 0x60, + 0x18, 0x88, 0xe0, 0x84, 0x38, 0xbd, 0x00, 0x00, + 0xc4, 0x7b, 0x01, 0x00, 0x00, 0x10, 0x07, 0x00, + 0x18, 0x23, 0x0a, 0x49, 0x58, 0x43, 0x41, 0x18, + 0x08, 0x69, 0x01, 0x30, 0x08, 0x61, 0x48, 0x68, + 0x00, 0x28, 0x09, 0xd0, 0x48, 0x69, 0x01, 0x30, + 0x3c, 0x00, 0x30, 0xcf, 0x00, 0x00, 0x48, 0x61, + 0x48, 0x68, 0x02, 0x68, 0x4a, 0x60, 0x00, 0x2a, + 0x00, 0xd1, 0x0a, 0x60, 0x70, 0x47, 0x00, 0x20, + 0x70, 0x47, 0xc4, 0x7b, 0x01, 0x00, 0xf8, 0xb5, + 0x12, 0x4e, 0x10, 0x4d, 0x0f, 0x4c, 0x0a, 0x27, + 0x21, 0x1c, 0x00, 0x20, 0xe0, 0x60, 0x2a, 0x31, + 0x22, 0x1c, 0x18, 0x32, 0xa1, 0x60, 0x62, 0x61, + 0x27, 0x82, 0x0c, 0x4a, 0xe0, 0x61, 0xa2, 0x61, + 0x60, 0x62, 0x3c, 0x00, 0x6c, 0xcf, 0x00, 0x00, + 0x06, 0x20, 0x20, 0x84, 0x08, 0x1c, 0xfe, 0xf7, + 0xd7, 0xf9, 0x20, 0x1c, 0x08, 0x30, 0xf5, 0xf7, + 0x01, 0xff, 0x4c, 0x3c, 0xac, 0x42, 0x70, 0x80, + 0xe5, 0xd1, 0xff, 0x20, 0x30, 0x70, 0xf8, 0xbd, + 0x88, 0xe4, 0x01, 0x00, 0x0c, 0xe3, 0x01, 0x00, + 0x3c, 0x7c, 0x01, 0x00, 0x12, 0x61, 0x01, 0x00, + 0xf8, 0xb5, 0x04, 0x1c, 0x0b, 0x48, 0x0e, 0x1c, + 0x17, 0x1c, 0x44, 0x70, 0x3c, 0x00, 0xa8, 0xcf, + 0x00, 0x00, 0x05, 0xf0, 0x00, 0xff, 0x05, 0x1c, + 0x39, 0x1c, 0x30, 0x1c, 0xfd, 0xf7, 0xab, 0xff, + 0x0c, 0x21, 0x05, 0x4a, 0x28, 0x18, 0x0a, 0x30, + 0x61, 0x43, 0x08, 0x32, 0x50, 0x50, 0x03, 0x48, + 0x89, 0x18, 0x00, 0x68, 0x88, 0x60, 0xf8, 0xbd, + 0x00, 0x00, 0x6c, 0x7a, 0x01, 0x00, 0x78, 0x6e, + 0x01, 0x00, 0x70, 0xb5, 0x0b, 0x4e, 0x05, 0x1c, + 0x70, 0x78, 0xff, 0x28, 0x0f, 0xd0, 0x3c, 0x00, + 0xe4, 0xcf, 0x00, 0x00, 0x0c, 0x23, 0x08, 0x4c, + 0x58, 0x43, 0x08, 0x34, 0x20, 0x58, 0x05, 0xf0, + 0x1d, 0xfe, 0x00, 0x28, 0x06, 0xd1, 0x70, 0x78, + 0x0c, 0x23, 0x58, 0x43, 0x00, 0x19, 0x81, 0x68, + 0x29, 0x43, 0x81, 0x60, 0x70, 0xbd, 0x00, 0x00, + 0x6c, 0x7a, 0x01, 0x00, 0x80, 0xb5, 0x30, 0x21, + 0x01, 0x48, 0xf3, 0xf7, 0x43, 0xfa, 0x80, 0xbd, + 0xec, 0xe5, 0x01, 0x00, 0x10, 0xb5, 0x05, 0xf0, + 0x3c, 0x00, 0x20, 0xd0, 0x00, 0x00, 0xc5, 0xfe, + 0x0a, 0x49, 0x44, 0x18, 0x0c, 0xe0, 0x20, 0x1c, + 0x05, 0xf0, 0xf7, 0xfd, 0x00, 0x28, 0x07, 0xd0, + 0xf5, 0xf7, 0x51, 0xfe, 0x00, 0x28, 0x03, 0xd0, + 0x13, 0x21, 0x86, 0x20, 0xf4, 0xf7, 0x31, 0xf9, + 0xf5, 0xf7, 0x49, 0xfe, 0x00, 0x28, 0xee, 0xd1, + 0x10, 0xbd, 0xb0, 0x36, 0x00, 0x00, 0xff, 0xb5, + 0x8b, 0xb0, 0x19, 0x9b, 0x0d, 0x1c, 0x04, 0x1c, + 0x1a, 0x20, 0x3c, 0x00, 0x5c, 0xd0, 0x00, 0x00, + 0x00, 0x2b, 0x16, 0x99, 0x00, 0xd1, 0x18, 0x20, + 0x01, 0x90, 0x14, 0x98, 0x00, 0x28, 0x27, 0xd0, + 0xff, 0x20, 0x19, 0x9b, 0x01, 0x30, 0x00, 0x2b, + 0x01, 0xd1, 0x18, 0x23, 0x00, 0xe0, 0x1a, 0x23, + 0x04, 0x33, 0x82, 0x42, 0x04, 0xd3, 0xd0, 0x1a, + 0x40, 0x08, 0x40, 0x00, 0x00, 0x04, 0x00, 0x0c, + 0x0d, 0x90, 0x6a, 0x48, 0x00, 0x88, 0xc2, 0x1a, + 0x12, 0x04, 0x12, 0x0c, 0x3c, 0x00, 0x98, 0xd0, + 0x00, 0x00, 0x04, 0x92, 0x00, 0x29, 0x08, 0xd0, + 0x89, 0x79, 0x66, 0x4a, 0x49, 0x00, 0x51, 0x5a, + 0x04, 0x9a, 0x51, 0x1a, 0x0a, 0x04, 0x12, 0x0c, + 0x04, 0x92, 0x04, 0x9a, 0x82, 0x42, 0x05, 0xd9, + 0x00, 0x20, 0x04, 0x90, 0x02, 0xe0, 0x60, 0x48, + 0x04, 0x90, 0x0d, 0x90, 0x01, 0x98, 0x01, 0x04, + 0x09, 0x0c, 0x0a, 0x91, 0x00, 0x20, 0xf4, 0xf7, + 0x84, 0xfa, 0x00, 0x90, 0x00, 0x68, 0x3c, 0x00, + 0xd4, 0xd0, 0x00, 0x00, 0x00, 0x26, 0x06, 0x90, + 0x20, 0x60, 0x00, 0x20, 0x05, 0x90, 0x0e, 0x98, + 0x00, 0x24, 0x00, 0x05, 0x00, 0x0c, 0x09, 0x90, + 0x1a, 0x98, 0x0d, 0x9f, 0x40, 0x07, 0x40, 0x0f, + 0x08, 0x90, 0x07, 0x94, 0x03, 0x95, 0x00, 0x2d, + 0x0d, 0xd0, 0x28, 0x89, 0xb8, 0x42, 0x04, 0xd8, + 0x36, 0x18, 0x3f, 0x1a, 0x07, 0xd0, 0xed, 0x68, + 0xf5, 0xe7, 0x39, 0x04, 0x09, 0x0c, 0x28, 0x1c, + 0x3c, 0x00, 0x10, 0xd1, 0x00, 0x00, 0xf4, 0xf7, + 0x38, 0xfb, 0xef, 0xe7, 0x00, 0x2e, 0x02, 0xd1, + 0x07, 0x99, 0x00, 0x29, 0x71, 0xd1, 0x27, 0x1c, + 0x6c, 0x20, 0xf4, 0xf7, 0x88, 0xfb, 0x07, 0x99, + 0x04, 0x1c, 0x00, 0x29, 0x20, 0xd1, 0x07, 0x94, + 0x00, 0x20, 0xa0, 0x61, 0x18, 0x98, 0x27, 0x1c, + 0x60, 0x60, 0x17, 0x98, 0x24, 0x37, 0xa0, 0x60, + 0x06, 0x98, 0x20, 0x61, 0x15, 0x98, 0x0f, 0xc8, + 0x0f, 0xc7, 0x3c, 0x00, 0x4c, 0xd1, 0x00, 0x00, + 0x14, 0x98, 0x5c, 0x21, 0x60, 0x63, 0x09, 0x98, + 0x08, 0x53, 0x19, 0x98, 0x69, 0x21, 0xe0, 0x63, + 0x1b, 0x98, 0x08, 0x55, 0x1c, 0x98, 0x60, 0x65, + 0x19, 0x98, 0x00, 0x28, 0x23, 0xd0, 0x08, 0x98, + 0x06, 0x99, 0x08, 0x83, 0x1f, 0xe0, 0x6c, 0x22, + 0x20, 0x1c, 0x07, 0x99, 0xf3, 0xf7, 0x1a, 0xfa, + 0x3c, 0x60, 0x01, 0x98, 0x62, 0x21, 0x30, 0x18, + 0xc8, 0x53, 0x15, 0x98, 0x3c, 0x00, 0x88, 0xd1, + 0x00, 0x00, 0x40, 0x21, 0x80, 0x7a, 0xc8, 0x55, + 0x00, 0x20, 0xb8, 0x63, 0x06, 0x98, 0x0a, 0x99, + 0xf4, 0xf7, 0x1f, 0xfa, 0xf8, 0x60, 0x02, 0x99, + 0xf4, 0xf7, 0x3b, 0xf9, 0x20, 0x1c, 0x40, 0x30, + 0x81, 0x8b, 0x05, 0x9a, 0x12, 0x07, 0x12, 0x0f, + 0x11, 0x43, 0x81, 0x83, 0x03, 0x98, 0x5e, 0x21, + 0x02, 0x90, 0x01, 0x98, 0x22, 0x4a, 0x30, 0x18, + 0x08, 0x53, 0x12, 0x68, 0x01, 0x21, 0x3c, 0x00, + 0xc4, 0xd1, 0x00, 0x00, 0x08, 0x1c, 0x00, 0x2a, + 0x00, 0xd0, 0x1b, 0x98, 0x00, 0x06, 0x04, 0x9a, + 0x00, 0x0e, 0x96, 0x42, 0x03, 0xd9, 0x2c, 0x22, + 0x11, 0x55, 0x1b, 0x49, 0x04, 0xe0, 0x15, 0x99, + 0x2c, 0x22, 0x09, 0x7a, 0x11, 0x55, 0x19, 0x49, + 0x08, 0x5c, 0x66, 0x21, 0x08, 0x55, 0x1c, 0x98, + 0x00, 0x28, 0x01, 0xd0, 0x1f, 0x20, 0x08, 0x55, + 0x00, 0x2d, 0x03, 0xd0, 0xe8, 0x68, 0x03, 0x90, + 0x3c, 0x00, 0x00, 0xd2, 0x00, 0x00, 0x00, 0x20, + 0x00, 0xe0, 0x09, 0xe0, 0xe8, 0x60, 0x05, 0x98, + 0x00, 0x26, 0x01, 0x30, 0x00, 0x04, 0x00, 0x0c, + 0x0d, 0x9f, 0x05, 0x90, 0x03, 0x9d, 0x6d, 0xe7, + 0x00, 0x98, 0xe0, 0x60, 0x02, 0x99, 0xf4, 0xf7, + 0xfa, 0xf8, 0x00, 0x20, 0x20, 0x60, 0x01, 0x21, + 0xa1, 0x63, 0x60, 0x34, 0x60, 0x80, 0x07, 0x98, + 0x0f, 0xb0, 0xf0, 0xbd, 0x00, 0x00, 0x06, 0x61, + 0x01, 0x00, 0x3c, 0x00, 0x3c, 0xd2, 0x00, 0x00, + 0x5c, 0x43, 0x01, 0x00, 0x38, 0x09, 0x00, 0x00, + 0x18, 0x67, 0x01, 0x00, 0x0e, 0x61, 0x01, 0x00, + 0x0a, 0x61, 0x01, 0x00, 0x01, 0x48, 0x00, 0x68, + 0x70, 0x47, 0x00, 0x00, 0xc4, 0x6a, 0x01, 0x00, + 0x02, 0x49, 0x09, 0x1d, 0x03, 0xc9, 0x40, 0x18, + 0x70, 0x47, 0x00, 0x00, 0xc4, 0x69, 0x01, 0x00, + 0x01, 0x48, 0x00, 0x69, 0x70, 0x47, 0x00, 0x00, + 0xc4, 0x69, 0x01, 0x00, 0x3c, 0x00, 0x78, 0xd2, + 0x00, 0x00, 0x01, 0x48, 0x40, 0x69, 0x70, 0x47, + 0x00, 0x00, 0xc4, 0x69, 0x01, 0x00, 0x01, 0x48, + 0x80, 0x69, 0x70, 0x47, 0x00, 0x00, 0xc4, 0x69, + 0x01, 0x00, 0x70, 0xb5, 0x0d, 0x4e, 0x00, 0x20, + 0x35, 0x1c, 0x40, 0x35, 0xf0, 0x63, 0x0d, 0xe0, + 0xa0, 0x68, 0xf4, 0xf7, 0x7a, 0xf9, 0xb3, 0x6d, + 0x00, 0x2b, 0x04, 0xd0, 0x00, 0x22, 0x01, 0x20, + 0x61, 0x6b, 0xf3, 0xf7, 0x95, 0xf8, 0x3c, 0x00, + 0xb4, 0xd2, 0x00, 0x00, 0x20, 0x1c, 0xf4, 0xf7, + 0x9d, 0xfa, 0x28, 0x1c, 0xfa, 0xf7, 0x42, 0xfd, + 0x04, 0x1c, 0xec, 0xd1, 0x70, 0xbd, 0x00, 0x00, + 0xc4, 0x69, 0x01, 0x00, 0xf8, 0xb5, 0x1a, 0x4f, + 0x00, 0x26, 0xf8, 0x6b, 0x00, 0x28, 0x2c, 0xd0, + 0x38, 0x1c, 0x40, 0x30, 0x00, 0x90, 0x1d, 0xe0, + 0x16, 0x48, 0xb9, 0x6b, 0x02, 0xf0, 0x5c, 0xf8, + 0x00, 0x22, 0x20, 0x1c, 0x14, 0x49, 0x03, 0xf0, + 0x3c, 0x00, 0xf0, 0xd2, 0x00, 0x00, 0x7b, 0xff, + 0x05, 0x1c, 0x04, 0xd1, 0x38, 0x6a, 0x01, 0x30, + 0x38, 0x62, 0x01, 0x36, 0x0d, 0xe0, 0xa0, 0x68, + 0xf4, 0xf7, 0x49, 0xf9, 0xbb, 0x6d, 0x00, 0x2b, + 0x04, 0xd0, 0x00, 0x22, 0x28, 0x1c, 0x61, 0x6b, + 0xf3, 0xf7, 0x64, 0xf8, 0x20, 0x1c, 0xf4, 0xf7, + 0x6c, 0xfa, 0x00, 0x98, 0xfa, 0xf7, 0x11, 0xfd, + 0x04, 0x1c, 0xdc, 0xd1, 0x07, 0x48, 0xb9, 0x6b, + 0x02, 0xf0, 0x3c, 0x00, 0x2c, 0xd3, 0x00, 0x00, + 0x25, 0xf8, 0x00, 0x20, 0xf8, 0x63, 0x30, 0x1c, + 0xf8, 0xbd, 0x00, 0x00, 0xc4, 0x69, 0x01, 0x00, + 0x34, 0x63, 0x01, 0x00, 0x11, 0x30, 0x00, 0x00, + 0xc4, 0x60, 0x01, 0x00, 0x01, 0x49, 0x01, 0x20, + 0xc8, 0x63, 0x70, 0x47, 0xc4, 0x69, 0x01, 0x00, + 0x80, 0xb5, 0x00, 0x20, 0x05, 0x4a, 0x00, 0x21, + 0x1c, 0x23, 0x43, 0x43, 0x9b, 0x18, 0x01, 0x30, + 0x04, 0x28, 0xd9, 0x66, 0x3c, 0x00, 0x68, 0xd3, + 0x00, 0x00, 0xf8, 0xdb, 0xfc, 0xf7, 0xfd, 0xfc, + 0x80, 0xbd, 0xc4, 0x69, 0x01, 0x00, 0x01, 0x49, + 0xc8, 0x64, 0x70, 0x47, 0x00, 0x00, 0xc4, 0x69, + 0x01, 0x00, 0x01, 0x49, 0x88, 0x64, 0x70, 0x47, + 0x00, 0x00, 0xc4, 0x69, 0x01, 0x00, 0xb0, 0xb5, + 0x04, 0x1c, 0x0d, 0x1c, 0x21, 0x1c, 0x02, 0x8e, + 0x80, 0x6a, 0x40, 0x31, 0xf3, 0xf7, 0x2f, 0xf8, + 0x00, 0x28, 0x16, 0xd1, 0x02, 0x21, 0x3c, 0x00, + 0xa4, 0xd3, 0x00, 0x00, 0x20, 0x1c, 0xf4, 0xf7, + 0x6f, 0xfa, 0xe2, 0x69, 0xc0, 0x00, 0x10, 0x18, + 0x82, 0x8b, 0xab, 0x88, 0x9a, 0x42, 0x04, 0xd1, + 0x82, 0x69, 0x2b, 0x68, 0x9a, 0x42, 0x08, 0xd2, + 0x01, 0xe0, 0x9a, 0x42, 0x05, 0xd2, 0x00, 0x21, + 0x18, 0x30, 0x0c, 0xcd, 0x0c, 0xc0, 0x00, 0xe0, + 0x01, 0x21, 0x08, 0x1c, 0xb0, 0xbd, 0x00, 0x00, + 0xf8, 0xb5, 0x06, 0x1c, 0x00, 0x27, 0x44, 0x68, + 0x3c, 0x00, 0xe0, 0xd3, 0x00, 0x00, 0x0f, 0xe0, + 0x09, 0x49, 0x48, 0x6a, 0x01, 0x30, 0x48, 0x62, + 0xa0, 0x69, 0x00, 0x28, 0x02, 0xd0, 0xf4, 0xf7, + 0x00, 0xfa, 0xa7, 0x61, 0x26, 0x62, 0x25, 0x68, + 0x20, 0x1c, 0xff, 0xf7, 0x52, 0xfb, 0x2c, 0x1c, + 0x00, 0x2c, 0xed, 0xd1, 0xf8, 0xbd, 0xc4, 0x69, + 0x01, 0x00, 0x03, 0x30, 0x07, 0x4a, 0x81, 0x08, + 0x13, 0x68, 0x50, 0x68, 0x1b, 0x68, 0x89, 0x00, + 0x09, 0x18, 0x3c, 0x00, 0x1c, 0xd4, 0x00, 0x00, + 0x8b, 0x42, 0x01, 0xd3, 0x51, 0x60, 0x00, 0xe0, + 0x00, 0x20, 0x90, 0x60, 0x70, 0x47, 0x00, 0x00, + 0x8c, 0x6e, 0x01, 0x00, 0x70, 0xb5, 0x12, 0x4e, + 0x80, 0x38, 0xc5, 0x00, 0x70, 0x59, 0x0c, 0x1c, + 0x00, 0x28, 0x04, 0xd1, 0x01, 0x21, 0x0d, 0x20, + 0xf3, 0xf7, 0x2e, 0xff, 0x0d, 0xe0, 0x20, 0x69, + 0x00, 0x28, 0x05, 0xd1, 0xa8, 0x19, 0x81, 0x88, + 0xe0, 0x68, 0x01, 0xf0, 0x3c, 0x00, 0x58, 0xd4, + 0x00, 0x00, 0x47, 0xfa, 0x20, 0x61, 0x71, 0x59, + 0x20, 0x1c, 0xf2, 0xf7, 0xbb, 0xff, 0x04, 0x1c, + 0x00, 0x2c, 0x07, 0xd0, 0xe0, 0x68, 0x00, 0x28, + 0x01, 0xd0, 0xf4, 0xf7, 0x92, 0xf8, 0x20, 0x1c, + 0xf4, 0xf7, 0xbd, 0xf9, 0x70, 0xbd, 0x54, 0x42, + 0x01, 0x00, 0x70, 0xb5, 0x04, 0x1c, 0x0d, 0x1c, + 0x0e, 0x49, 0x06, 0x22, 0xf3, 0xf7, 0x35, 0xf8, + 0x00, 0x26, 0xe6, 0x61, 0x66, 0x62, 0x3c, 0x00, + 0x94, 0xd4, 0x00, 0x00, 0x07, 0x20, 0x30, 0x21, + 0x08, 0x55, 0xe6, 0x63, 0x28, 0x1c, 0xf8, 0xf7, + 0x6b, 0xf8, 0xa0, 0x76, 0x20, 0x1c, 0x14, 0x30, + 0x06, 0x22, 0x29, 0x1c, 0xf3, 0xf7, 0x24, 0xf8, + 0x06, 0x22, 0x29, 0x1c, 0xa0, 0x18, 0xf3, 0xf7, + 0x1f, 0xf8, 0x26, 0x61, 0x70, 0xbd, 0x00, 0x00, + 0x12, 0x61, 0x01, 0x00, 0x80, 0xb5, 0xfd, 0xf7, + 0x85, 0xfe, 0x80, 0xbd, 0x01, 0x49, 0x48, 0x60, + 0x3c, 0x00, 0xd0, 0xd4, 0x00, 0x00, 0x70, 0x47, + 0x00, 0x00, 0xe4, 0x65, 0x01, 0x00, 0x02, 0x49, + 0x80, 0xb5, 0x49, 0x68, 0xf2, 0xf7, 0x7c, 0xff, + 0x80, 0xbd, 0xe4, 0x65, 0x01, 0x00, 0x80, 0xb5, + 0xf4, 0xf7, 0xe5, 0xf9, 0x07, 0x49, 0x07, 0x48, + 0x0e, 0xc9, 0x0e, 0xc0, 0x18, 0x38, 0x00, 0x68, + 0x00, 0x28, 0x02, 0xd0, 0x02, 0xf0, 0xb7, 0xfa, + 0x80, 0xbd, 0x02, 0xf0, 0x9e, 0xfa, 0x80, 0xbd, + 0x00, 0x00, 0x3c, 0x00, 0x0c, 0xd5, 0x00, 0x00, + 0xb0, 0x58, 0x01, 0x00, 0x90, 0x73, 0x01, 0x00, + 0x05, 0x49, 0x80, 0xb5, 0x89, 0x68, 0x00, 0x20, + 0x00, 0x29, 0x00, 0xd1, 0x03, 0x20, 0x00, 0x06, + 0x00, 0x0e, 0xfa, 0xf7, 0xe3, 0xfb, 0x80, 0xbd, + 0x60, 0x6c, 0x01, 0x00, 0x80, 0xb5, 0x03, 0x48, + 0x06, 0x22, 0x03, 0x49, 0xf2, 0xf7, 0xde, 0xff, + 0x80, 0xbd, 0x00, 0x00, 0x40, 0x80, 0x07, 0x00, + 0x12, 0x61, 0x01, 0x00, 0x3c, 0x00, 0x48, 0xd5, + 0x00, 0x00, 0xb0, 0xb5, 0x04, 0x1c, 0x0c, 0x4d, + 0x0b, 0x1c, 0x21, 0x1c, 0x00, 0x20, 0x0c, 0x3d, + 0x00, 0x29, 0x09, 0x4c, 0x05, 0xd0, 0x28, 0x78, + 0x21, 0x1c, 0x10, 0x80, 0x02, 0x1c, 0x18, 0x1c, + 0x07, 0xe0, 0x11, 0x88, 0x0e, 0x29, 0x07, 0xd8, + 0x0a, 0x06, 0x12, 0x0e, 0x19, 0x1c, 0x20, 0x1c, + 0x2a, 0x70, 0xf2, 0xf7, 0xbe, 0xff, 0x01, 0x20, + 0xb0, 0xbd, 0xb0, 0x69, 0x01, 0x00, 0x3c, 0x00, + 0x84, 0xd5, 0x00, 0x00, 0x10, 0xb5, 0x00, 0x20, + 0x0a, 0x4a, 0x01, 0x21, 0x11, 0x60, 0x0a, 0x4c, + 0x0a, 0xe0, 0x02, 0x1c, 0x01, 0x6a, 0x50, 0x32, + 0x91, 0x42, 0x05, 0xd0, 0x61, 0x78, 0x3c, 0x23, + 0x59, 0x43, 0x09, 0x19, 0x04, 0x31, 0x01, 0x62, + 0x04, 0xf0, 0xba, 0xfb, 0x00, 0x28, 0xf0, 0xd1, + 0x10, 0xbd, 0x00, 0x00, 0xdc, 0x62, 0x01, 0x00, + 0x68, 0x61, 0x01, 0x00, 0x04, 0x48, 0x80, 0xb5, + 0x3c, 0x00, 0xc0, 0xd5, 0x00, 0x00, 0x00, 0x68, + 0x00, 0x28, 0x03, 0xd0, 0x01, 0x1c, 0x10, 0x20, + 0x04, 0xf0, 0xc7, 0xfe, 0x80, 0xbd, 0x28, 0x61, + 0x01, 0x00, 0x03, 0x22, 0x11, 0x1f, 0x80, 0xb5, + 0x00, 0x20, 0xfb, 0xf7, 0x76, 0xf9, 0x80, 0xbd, + 0x00, 0x00, 0x80, 0xb5, 0x0b, 0xf0, 0xb9, 0xfa, + 0x80, 0xbd, 0xff, 0xb5, 0x83, 0xb0, 0x16, 0x1c, + 0x00, 0x21, 0x01, 0x91, 0x1f, 0x1c, 0x08, 0x21, + 0x02, 0xaa, 0x3c, 0x00, 0xfc, 0xd5, 0x00, 0x00, + 0xfa, 0xf7, 0x0e, 0xff, 0x04, 0x1c, 0x2a, 0xd1, + 0x02, 0x98, 0x41, 0x68, 0x49, 0x00, 0x01, 0xd4, + 0x09, 0x24, 0x24, 0xe0, 0xfa, 0xf7, 0x52, 0xff, + 0x38, 0x60, 0x02, 0x98, 0x41, 0x68, 0x49, 0x02, + 0xcd, 0x0f, 0x29, 0x1c, 0xfa, 0xf7, 0x44, 0xff, + 0x01, 0x1c, 0x30, 0x60, 0x38, 0x68, 0x00, 0x06, + 0x00, 0x0e, 0x00, 0xf0, 0x1b, 0xf8, 0x00, 0x28, + 0x01, 0xd1, 0x0a, 0x24, 0x3c, 0x00, 0x38, 0xd6, + 0x00, 0x00, 0x0f, 0xe0, 0x31, 0x68, 0x02, 0x98, + 0x2b, 0x1c, 0x01, 0xaa, 0xfa, 0xf7, 0xd7, 0xff, + 0x00, 0x28, 0x06, 0xd0, 0x01, 0x98, 0x00, 0x28, + 0x04, 0xd0, 0x04, 0x99, 0x09, 0x68, 0x81, 0x42, + 0x00, 0xd2, 0x03, 0x24, 0x01, 0x98, 0x04, 0x99, + 0x08, 0x60, 0x07, 0xb0, 0x20, 0x1c, 0xf0, 0xbd, + 0x00, 0x00, 0x70, 0xb5, 0x05, 0x1c, 0x0e, 0x1c, + 0x01, 0x24, 0x00, 0xf0, 0x84, 0xff, 0x3c, 0x00, + 0x74, 0xd6, 0x00, 0x00, 0x00, 0x28, 0x08, 0xd0, + 0x03, 0x2d, 0x01, 0xd0, 0x04, 0x2d, 0x04, 0xd1, + 0x03, 0x20, 0xc0, 0x03, 0x86, 0x42, 0x00, 0xd3, + 0x00, 0x24, 0x20, 0x1c, 0x70, 0xbd, 0x00, 0x00, + 0x7c, 0xb5, 0x15, 0x1c, 0x06, 0x1c, 0x0c, 0x1c, + 0x29, 0x1c, 0x6a, 0x46, 0x01, 0xab, 0xff, 0xf7, + 0xa5, 0xff, 0x00, 0x28, 0x02, 0xd1, 0x00, 0x2c, + 0x01, 0xd1, 0x03, 0x20, 0x7c, 0xbd, 0x17, 0x48, + 0x3c, 0x00, 0xb0, 0xd6, 0x00, 0x00, 0x00, 0xab, + 0x06, 0x60, 0x18, 0x79, 0x07, 0x28, 0x21, 0xd2, + 0x02, 0xa3, 0x1b, 0x5c, 0x5b, 0x00, 0x9f, 0x44, + 0x00, 0x00, 0x1d, 0x04, 0x04, 0x06, 0x10, 0x17, + 0x13, 0x00, 0x04, 0x20, 0xed, 0xe7, 0x2a, 0x1c, + 0x21, 0x1c, 0x01, 0x20, 0x00, 0x9b, 0xf2, 0xf7, + 0x81, 0xfe, 0x00, 0x28, 0x12, 0xd1, 0x06, 0x20, + 0xe3, 0xe7, 0x2a, 0x68, 0x00, 0x99, 0x05, 0xe0, + 0x00, 0x98, 0x3c, 0x00, 0xec, 0xd6, 0x00, 0x00, + 0x42, 0x78, 0x81, 0x1c, 0x01, 0xe0, 0x2a, 0x68, + 0x69, 0x46, 0x20, 0x1c, 0xf2, 0xf7, 0xfe, 0xfe, + 0x03, 0xe0, 0x04, 0x21, 0x87, 0x20, 0xf3, 0xf7, + 0xcf, 0xfd, 0x00, 0x20, 0xd0, 0xe7, 0x00, 0x00, + 0xf8, 0x6b, 0x01, 0x00, 0xf7, 0xb5, 0x86, 0xb0, + 0x0e, 0x1c, 0x08, 0x21, 0x05, 0xaa, 0x06, 0x98, + 0xfa, 0xf7, 0x7e, 0xfe, 0x04, 0x1c, 0x45, 0xd1, + 0x05, 0x98, 0x41, 0x68, 0x3c, 0x00, 0x28, 0xd7, + 0x00, 0x00, 0x02, 0x90, 0x49, 0x02, 0xc9, 0x0f, + 0x00, 0x25, 0x04, 0x95, 0x03, 0x91, 0x08, 0x9f, + 0xfa, 0xf7, 0xd5, 0xfe, 0x01, 0x90, 0x02, 0xa9, + 0x03, 0xc9, 0xfa, 0xf7, 0xc6, 0xfe, 0x01, 0x99, + 0x05, 0x29, 0x14, 0xd2, 0x02, 0xa3, 0x5b, 0x5c, + 0x5b, 0x00, 0x9f, 0x44, 0x00, 0x00, 0x0e, 0x03, + 0x06, 0x0c, 0x03, 0x00, 0x87, 0x42, 0x0e, 0xd8, + 0x07, 0xe0, 0x87, 0x42, 0x0b, 0xd8, 0x3c, 0x00, + 0x64, 0xd7, 0x00, 0x00, 0x01, 0x25, 0xc0, 0x1b, + 0x04, 0x90, 0x07, 0xe0, 0x87, 0x42, 0x05, 0xd1, + 0x01, 0x25, 0x03, 0xe0, 0x05, 0x21, 0x87, 0x20, + 0xf3, 0xf7, 0x94, 0xfd, 0x00, 0x2d, 0x01, 0xd1, + 0x03, 0x24, 0x15, 0xe0, 0x05, 0x98, 0x41, 0x68, + 0x00, 0x29, 0x69, 0xda, 0x3a, 0x4a, 0x06, 0x99, + 0x11, 0x60, 0xfa, 0xf7, 0x91, 0xfe, 0x07, 0x1c, + 0x05, 0x98, 0x03, 0x99, 0xfa, 0xf7, 0x86, 0xfe, + 0x3c, 0x00, 0xa0, 0xd7, 0x00, 0x00, 0x05, 0x1c, + 0x01, 0x1c, 0x38, 0x1c, 0xff, 0xf7, 0x5f, 0xff, + 0x00, 0x28, 0x01, 0xd1, 0x0a, 0x24, 0x5e, 0xe0, + 0x07, 0x2f, 0x57, 0xd2, 0x02, 0xa3, 0xdb, 0x5d, + 0x5b, 0x00, 0x9f, 0x44, 0x00, 0x00, 0x53, 0x04, + 0x04, 0x06, 0x2e, 0x50, 0x48, 0x00, 0x04, 0x24, + 0x51, 0xe0, 0x04, 0x98, 0x00, 0x28, 0x01, 0xd1, + 0x00, 0x27, 0x14, 0xe0, 0x08, 0x99, 0x08, 0x18, + 0x00, 0x04, 0x3c, 0x00, 0xdc, 0xd7, 0x00, 0x00, + 0x00, 0x0c, 0xf4, 0xf7, 0x2b, 0xf8, 0x07, 0x1c, + 0x31, 0x1c, 0x08, 0x9a, 0xf2, 0xf7, 0x86, 0xfe, + 0x08, 0x98, 0x04, 0x99, 0x38, 0x18, 0xf2, 0xf7, + 0x2f, 0xfe, 0x08, 0x98, 0x04, 0x99, 0x3e, 0x1c, + 0x40, 0x18, 0x08, 0x90, 0x31, 0x1c, 0x00, 0x20, + 0x08, 0xaa, 0xf2, 0xf7, 0xec, 0xfd, 0x00, 0x28, + 0x00, 0xd1, 0x05, 0x24, 0x00, 0x2f, 0x2d, 0xd0, + 0x38, 0x1c, 0xf3, 0xf7, 0x3c, 0x00, 0x18, 0xd8, + 0x00, 0x00, 0xed, 0xff, 0x29, 0xe0, 0x03, 0x99, + 0x00, 0x29, 0x04, 0xd0, 0x05, 0x98, 0x40, 0x68, + 0x87, 0x02, 0xbf, 0x0a, 0x00, 0xe0, 0x00, 0x27, + 0x31, 0x1c, 0x28, 0x1c, 0x08, 0x9a, 0xf2, 0xf7, + 0x60, 0xfe, 0x04, 0x99, 0x00, 0x29, 0x03, 0xd0, + 0x08, 0x98, 0x28, 0x18, 0xf2, 0xf7, 0x07, 0xfe, + 0x00, 0x2f, 0x12, 0xd0, 0xf2, 0xf7, 0xcc, 0xfd, + 0x0f, 0xe0, 0x31, 0x1c, 0xa8, 0x1c, 0x3c, 0x00, + 0x54, 0xd8, 0x00, 0x00, 0x08, 0x9a, 0xf2, 0xf7, + 0x4f, 0xfe, 0x08, 0x98, 0x68, 0x70, 0x07, 0xe0, + 0xff, 0xe7, 0x07, 0x24, 0x04, 0xe0, 0x08, 0x24, + 0x03, 0x21, 0x87, 0x20, 0xf3, 0xf7, 0x1a, 0xfd, + 0x20, 0x1c, 0x09, 0xb0, 0xf0, 0xbd, 0x00, 0x00, + 0xf8, 0x6b, 0x01, 0x00, 0x9e, 0xb5, 0x1c, 0x1c, + 0x00, 0xab, 0x19, 0x72, 0x00, 0x92, 0x00, 0x22, + 0x01, 0x94, 0x69, 0x46, 0xfb, 0xf7, 0x08, 0xfa, + 0x3c, 0x00, 0x90, 0xd8, 0x00, 0x00, 0x9e, 0xbd, + 0x00, 0x00, 0x8f, 0xb5, 0x02, 0x92, 0x00, 0x22, + 0x00, 0x90, 0x01, 0x90, 0x03, 0x91, 0x69, 0x46, + 0x04, 0x20, 0xfb, 0xf7, 0xfc, 0xf9, 0x8f, 0xbd, + 0x00, 0x00, 0xb0, 0xb5, 0x0c, 0x1c, 0x01, 0x28, + 0x0a, 0xd0, 0x03, 0x28, 0x19, 0xd0, 0x04, 0x28, + 0x2c, 0xd1, 0x60, 0x68, 0x01, 0xf0, 0x35, 0xfc, + 0x01, 0x1c, 0x83, 0x20, 0x0c, 0xcc, 0x22, 0xe0, + 0x1c, 0x20, 0x3c, 0x00, 0xcc, 0xd8, 0x00, 0x00, + 0x14, 0x49, 0x60, 0x43, 0x40, 0x18, 0x14, 0x49, + 0x45, 0x18, 0x28, 0x1c, 0xf8, 0xf7, 0x46, 0xfc, + 0xa9, 0x68, 0x00, 0x29, 0x03, 0xd0, 0x22, 0x1c, + 0x08, 0x20, 0x05, 0xf0, 0x71, 0xfe, 0xb0, 0xbd, + 0x20, 0x8c, 0xc8, 0x28, 0x01, 0xd3, 0x04, 0x20, + 0x04, 0xe0, 0x65, 0x28, 0x01, 0xd3, 0x02, 0x20, + 0x00, 0xe0, 0x01, 0x20, 0x20, 0x84, 0x20, 0x1c, + 0x03, 0xf0, 0xdc, 0xfa, 0x3c, 0x00, 0x08, 0xd9, + 0x00, 0x00, 0x22, 0x68, 0xe3, 0x68, 0x01, 0x1c, + 0x82, 0x20, 0xff, 0xf7, 0xb4, 0xff, 0xb0, 0xbd, + 0xa0, 0x21, 0x08, 0x20, 0xf3, 0xf7, 0xc3, 0xfc, + 0xb0, 0xbd, 0xdc, 0x71, 0x01, 0x00, 0x64, 0xee, + 0xff, 0xff, 0x03, 0x48, 0x04, 0x4a, 0x81, 0x68, + 0x51, 0x61, 0xc0, 0x68, 0x90, 0x61, 0x70, 0x47, + 0x00, 0x00, 0xf4, 0x68, 0x01, 0x00, 0xc0, 0x71, + 0x01, 0x00, 0x03, 0x49, 0x04, 0x4a, 0x3c, 0x00, + 0x44, 0xd9, 0x00, 0x00, 0x08, 0x6b, 0x90, 0x60, + 0x88, 0x68, 0xd0, 0x60, 0x70, 0x47, 0x00, 0x00, + 0x90, 0x5c, 0x01, 0x00, 0xc0, 0x71, 0x01, 0x00, + 0x00, 0xb5, 0xff, 0xf7, 0xf1, 0xff, 0xff, 0xf7, + 0xe3, 0xff, 0x00, 0xbd, 0xb0, 0xb5, 0x0d, 0x1c, + 0x00, 0x28, 0x14, 0xd0, 0x0b, 0x49, 0x0c, 0x4c, + 0x88, 0x68, 0x62, 0x69, 0xc9, 0x68, 0x80, 0x1a, + 0xa2, 0x69, 0x89, 0x1a, 0x40, 0x18, 0x04, 0xd0, + 0x3c, 0x00, 0x80, 0xd9, 0x00, 0x00, 0x64, 0x23, + 0x59, 0x43, 0xf2, 0xf7, 0xc4, 0xfe, 0x20, 0x61, + 0xff, 0xf7, 0xcd, 0xff, 0x20, 0x69, 0x28, 0x60, + 0x01, 0x20, 0xb0, 0xbd, 0x00, 0x20, 0xb0, 0xbd, + 0x00, 0x00, 0xf4, 0x68, 0x01, 0x00, 0xc0, 0x71, + 0x01, 0x00, 0xb0, 0xb5, 0x0d, 0x1c, 0x00, 0x28, + 0x17, 0xd0, 0x0c, 0x49, 0x0d, 0x4c, 0x08, 0x6b, + 0xa2, 0x68, 0x89, 0x68, 0x80, 0x1a, 0xe2, 0x68, + 0x89, 0x1a, 0x3c, 0x00, 0xbc, 0xd9, 0x00, 0x00, + 0x40, 0x18, 0x07, 0xd0, 0x22, 0x88, 0x90, 0x42, + 0x04, 0xd9, 0x64, 0x23, 0x59, 0x43, 0xf2, 0xf7, + 0xa1, 0xfe, 0x60, 0x60, 0xff, 0xf7, 0xb6, 0xff, + 0x60, 0x68, 0x28, 0x60, 0x01, 0x20, 0xb0, 0xbd, + 0x00, 0x20, 0xb0, 0xbd, 0x90, 0x5c, 0x01, 0x00, + 0xc0, 0x71, 0x01, 0x00, 0x7c, 0xb5, 0x10, 0x68, + 0x00, 0x28, 0x02, 0xd0, 0x00, 0xf0, 0x24, 0xf8, + 0x7c, 0xbd, 0x0f, 0x48, 0x3c, 0x00, 0xf8, 0xd9, + 0x00, 0x00, 0xc0, 0x69, 0x84, 0x68, 0xe0, 0x68, + 0x25, 0x6a, 0xa6, 0x69, 0xf3, 0xf7, 0xe3, 0xfd, + 0xe1, 0x69, 0xf3, 0xf7, 0x06, 0xfd, 0x20, 0x1c, + 0xe2, 0x69, 0x40, 0x30, 0xc1, 0x8b, 0x12, 0x89, + 0x89, 0x18, 0xc1, 0x83, 0x07, 0x49, 0x01, 0x94, + 0x00, 0x91, 0x28, 0x69, 0x33, 0x1c, 0x82, 0x88, + 0x01, 0x68, 0xe0, 0x68, 0xc0, 0x68, 0xf8, 0xf7, + 0x1e, 0xfc, 0xe0, 0xe7, 0x00, 0x00, 0x3c, 0x00, + 0x34, 0xda, 0x00, 0x00, 0x84, 0x6a, 0x01, 0x00, + 0x91, 0x5e, 0x00, 0x00, 0xf0, 0xb5, 0x85, 0x69, + 0x06, 0x6a, 0x04, 0x1c, 0xc0, 0x68, 0x85, 0xb0, + 0xc0, 0x68, 0x00, 0x28, 0x01, 0xd1, 0xf3, 0xf7, + 0x57, 0xfc, 0x0a, 0x49, 0x02, 0x95, 0x04, 0x94, + 0x03, 0x91, 0x30, 0x69, 0x82, 0x88, 0x01, 0x68, + 0x26, 0x20, 0x01, 0x92, 0x00, 0x91, 0x43, 0x5d, + 0xe0, 0x68, 0xe1, 0x69, 0x2a, 0x1c, 0x0e, 0x32, + 0x3c, 0x00, 0x70, 0xda, 0x00, 0x00, 0xc0, 0x68, + 0xf8, 0xf7, 0x37, 0xfd, 0x05, 0xb0, 0xf0, 0xbd, + 0x00, 0x00, 0xe9, 0xd9, 0x00, 0x00, 0x10, 0xb5, + 0x14, 0x1c, 0x05, 0x48, 0xfc, 0xf7, 0x7b, 0xfb, + 0xa0, 0x68, 0xf3, 0xf7, 0x9e, 0xfd, 0xe1, 0x68, + 0xc1, 0x60, 0x20, 0x1c, 0xf5, 0xf7, 0xbb, 0xfa, + 0x10, 0xbd, 0xa0, 0x6a, 0x01, 0x00, 0x7c, 0xb5, + 0x04, 0x1c, 0x60, 0x30, 0x02, 0x7b, 0xa1, 0x69, + 0x00, 0x91, 0x3c, 0x00, 0xac, 0xda, 0x00, 0x00, + 0x01, 0x92, 0x22, 0x1c, 0x21, 0x1c, 0x38, 0x31, + 0xa0, 0x68, 0x48, 0x32, 0x0d, 0x1c, 0x63, 0x69, + 0x03, 0xf0, 0x7a, 0xfb, 0x08, 0x21, 0x00, 0x20, + 0xf3, 0xf7, 0x88, 0xfd, 0xe0, 0x60, 0x26, 0x69, + 0xb1, 0x6b, 0x00, 0x29, 0x01, 0xd0, 0x10, 0x23, + 0x00, 0xe0, 0x18, 0x23, 0x05, 0x49, 0x01, 0x94, + 0x00, 0x91, 0x31, 0x68, 0xca, 0x18, 0x08, 0x23, + 0x01, 0x1c, 0x28, 0x1c, 0x3c, 0x00, 0xe8, 0xda, + 0x00, 0x00, 0xf8, 0xf7, 0x20, 0xfd, 0x7c, 0xbd, + 0x00, 0x00, 0x81, 0xda, 0x00, 0x00, 0xf0, 0xb5, + 0x46, 0x68, 0x17, 0x1c, 0x04, 0x1c, 0x01, 0x21, + 0x30, 0x1c, 0x9b, 0xb0, 0xfa, 0xf7, 0x0d, 0xfc, + 0x00, 0x25, 0x00, 0x28, 0x03, 0xd0, 0x13, 0x49, + 0x0a, 0x7a, 0x01, 0x2a, 0x01, 0xd1, 0x01, 0x25, + 0x1c, 0xe0, 0x88, 0x62, 0x4e, 0x61, 0x20, 0x89, + 0xc8, 0x61, 0x60, 0x89, 0x00, 0x28, 0x3c, 0x00, + 0x24, 0xdb, 0x00, 0x00, 0x03, 0xd0, 0x00, 0x20, + 0x08, 0x84, 0x48, 0x84, 0x04, 0xe0, 0xe0, 0x68, + 0x08, 0x84, 0x20, 0x8a, 0x48, 0x84, 0x60, 0x8a, + 0x88, 0x84, 0x08, 0x6b, 0x00, 0x28, 0x03, 0xd1, + 0x01, 0xa8, 0x03, 0xf0, 0x77, 0xfc, 0x04, 0xe0, + 0x01, 0x20, 0x08, 0x61, 0x00, 0x20, 0x02, 0xf0, + 0x39, 0xfb, 0x3d, 0x71, 0x1b, 0xb0, 0x01, 0x20, + 0xf0, 0xbd, 0x00, 0x00, 0xf4, 0x6e, 0x01, 0x00, + 0x3c, 0x00, 0x60, 0xdb, 0x00, 0x00, 0x10, 0xb5, + 0x04, 0x1c, 0xf7, 0xf7, 0xe8, 0xfb, 0x00, 0x28, + 0x11, 0xd1, 0x4b, 0x20, 0x00, 0x5d, 0x01, 0x28, + 0x0d, 0xd1, 0x20, 0x1c, 0x04, 0xf0, 0x85, 0xfa, + 0x00, 0x21, 0x20, 0x1c, 0x04, 0xf0, 0xf3, 0xf8, + 0xa0, 0x69, 0x00, 0x21, 0xc2, 0x07, 0xd2, 0x0f, + 0x04, 0x20, 0xf4, 0xf7, 0xd8, 0xf9, 0x10, 0xbd, + 0x00, 0x00, 0x38, 0xb5, 0x04, 0x1c, 0x04, 0xf0, + 0x36, 0xf9, 0x3c, 0x00, 0x9c, 0xdb, 0x00, 0x00, + 0x00, 0x28, 0x03, 0xd0, 0x40, 0x30, 0x80, 0x7a, + 0x00, 0x28, 0x25, 0xd1, 0x0c, 0x20, 0x29, 0x21, + 0x08, 0x55, 0x21, 0x1c, 0x06, 0x22, 0xa0, 0x18, + 0xf2, 0xf7, 0xa0, 0xfc, 0x20, 0x1c, 0x06, 0x22, + 0x0e, 0x49, 0xf2, 0xf7, 0x9b, 0xfc, 0x01, 0x20, + 0xe0, 0x61, 0x60, 0x62, 0x07, 0x20, 0x30, 0x21, + 0x08, 0x55, 0x00, 0x25, 0xe5, 0x63, 0x06, 0x20, + 0x00, 0xab, 0x18, 0x80, 0x3c, 0x00, 0xd8, 0xdb, + 0x00, 0x00, 0xe0, 0x68, 0x00, 0x28, 0x01, 0xd0, + 0xf3, 0xf7, 0xdb, 0xfc, 0x02, 0x21, 0x68, 0x46, + 0xfd, 0xf7, 0x73, 0xfb, 0xe0, 0x60, 0x20, 0x1c, + 0xff, 0xf7, 0x69, 0xfc, 0xe5, 0x60, 0x20, 0x1c, + 0x38, 0xbd, 0x12, 0x61, 0x01, 0x00, 0xfe, 0xb5, + 0x05, 0x1c, 0x0e, 0x1c, 0x15, 0x20, 0x00, 0xab, + 0x98, 0x80, 0x14, 0x21, 0x17, 0x1c, 0x00, 0x20, + 0xf3, 0xf7, 0xe3, 0xfc, 0x02, 0x90, 0x3c, 0x00, + 0x14, 0xdc, 0x00, 0x00, 0x04, 0x68, 0x06, 0x22, + 0x31, 0x1c, 0x60, 0x1d, 0x25, 0x71, 0xf2, 0xf7, + 0x6b, 0xfc, 0x06, 0x22, 0x39, 0x1c, 0x20, 0x1c, + 0x0b, 0x30, 0xf2, 0xf7, 0x65, 0xfc, 0x01, 0xa8, + 0xff, 0xf7, 0x52, 0xfc, 0xfe, 0xbd, 0x00, 0x00, + 0x80, 0xb5, 0x00, 0x23, 0xfb, 0xf7, 0x5c, 0xf8, + 0x80, 0xbd, 0x00, 0x00, 0x70, 0xb5, 0x05, 0x1c, + 0x08, 0x35, 0x0f, 0x4e, 0x29, 0x1c, 0x04, 0x1c, + 0x3c, 0x00, 0x50, 0xdc, 0x00, 0x00, 0x06, 0x22, + 0x30, 0x1c, 0xf2, 0xf7, 0x50, 0xfc, 0xa0, 0x88, + 0xb0, 0x82, 0x28, 0x1c, 0x05, 0xf0, 0xa1, 0xff, + 0x00, 0x28, 0x0b, 0xd0, 0xe0, 0x88, 0x30, 0x61, + 0x28, 0x1c, 0x04, 0xf0, 0xcc, 0xf8, 0xa1, 0x88, + 0x40, 0x30, 0x41, 0x80, 0x00, 0x20, 0xf4, 0xf7, + 0xb8, 0xf9, 0x02, 0xe0, 0x04, 0x20, 0xf4, 0xf7, + 0xa0, 0xf9, 0x00, 0x20, 0x70, 0xbd, 0x70, 0x7c, + 0x01, 0x00, 0x3c, 0x00, 0x8c, 0xdc, 0x00, 0x00, + 0x80, 0xb5, 0x00, 0x20, 0xfb, 0xf7, 0xf8, 0xfb, + 0x80, 0xbd, 0x00, 0x00, 0x70, 0xb5, 0x04, 0x1c, + 0x04, 0x30, 0x05, 0x1c, 0xfd, 0xf7, 0x32, 0xf8, + 0x00, 0x28, 0x09, 0xd0, 0x00, 0x20, 0xf7, 0xf7, + 0x37, 0xfc, 0x00, 0x28, 0x04, 0xd0, 0x06, 0x22, + 0x01, 0x1c, 0x28, 0x1c, 0xf2, 0xf7, 0x1e, 0xfc, + 0x0a, 0x4e, 0x06, 0x22, 0x29, 0x1c, 0x30, 0x1c, + 0xf2, 0xf7, 0x18, 0xfc, 0x3c, 0x00, 0xc8, 0xdc, + 0x00, 0x00, 0x60, 0x89, 0xf0, 0x82, 0x28, 0x1c, + 0x05, 0xf0, 0x69, 0xff, 0x00, 0x28, 0x03, 0xd0, + 0x02, 0x20, 0xf4, 0xf7, 0x88, 0xf9, 0x02, 0xe0, + 0x05, 0x20, 0xf9, 0xf7, 0xf4, 0xfa, 0x00, 0x20, + 0x70, 0xbd, 0x70, 0x7c, 0x01, 0x00, 0x10, 0xb5, + 0x04, 0x1c, 0x00, 0x79, 0x04, 0x28, 0x1c, 0xd2, + 0x60, 0x79, 0x01, 0x28, 0x01, 0xd0, 0x03, 0x28, + 0x04, 0xd1, 0x00, 0x22, 0x01, 0x21, 0x3c, 0x00, + 0x04, 0xdd, 0x00, 0x00, 0xa0, 0x1d, 0xf9, 0xf7, + 0x69, 0xfc, 0x60, 0x79, 0x00, 0x28, 0x04, 0xd1, + 0x22, 0x79, 0x00, 0x21, 0xf9, 0xf7, 0x62, 0xfc, + 0x0a, 0xe0, 0x03, 0x28, 0x08, 0xd1, 0x00, 0x24, + 0x22, 0x1c, 0x00, 0x21, 0x00, 0x20, 0xf9, 0xf7, + 0x59, 0xfc, 0x01, 0x34, 0x04, 0x2c, 0xf7, 0xdb, + 0x01, 0x20, 0x10, 0xbd, 0xf0, 0xb5, 0x97, 0xb0, + 0x17, 0x1c, 0x05, 0x1c, 0x04, 0x30, 0x04, 0x1c, + 0x3c, 0x00, 0x40, 0xdd, 0x00, 0x00, 0x15, 0xaa, + 0x16, 0xa9, 0x05, 0xf0, 0xe2, 0xfe, 0x00, 0x28, + 0x2e, 0xd0, 0x15, 0x98, 0x4b, 0x21, 0x09, 0x5c, + 0x00, 0x29, 0x23, 0xd0, 0x01, 0x29, 0x02, 0xd0, + 0x02, 0x29, 0x1f, 0xd1, 0x01, 0xe0, 0x04, 0xf0, + 0x90, 0xf9, 0xad, 0x7a, 0x13, 0x48, 0x16, 0x9e, + 0x05, 0x80, 0x06, 0x22, 0x21, 0x1c, 0x08, 0x30, + 0xf2, 0xf7, 0xc1, 0xfb, 0x22, 0x1c, 0x31, 0x1c, + 0x02, 0xa8, 0x3c, 0x00, 0x7c, 0xdd, 0x00, 0x00, + 0x00, 0xf0, 0x74, 0xfb, 0x0a, 0x20, 0x0a, 0xa9, + 0x48, 0x72, 0x00, 0xab, 0x9d, 0x80, 0x02, 0x21, + 0x01, 0xa8, 0xfd, 0xf7, 0x9f, 0xfa, 0x05, 0x90, + 0x02, 0xa8, 0xff, 0xf7, 0x95, 0xfb, 0xf3, 0xf7, + 0xf7, 0xf9, 0x00, 0x21, 0x15, 0x98, 0x03, 0xf0, + 0xe1, 0xff, 0x00, 0x20, 0x00, 0xe0, 0x01, 0x20, + 0x38, 0x71, 0x17, 0xb0, 0x01, 0x20, 0xf0, 0xbd, + 0x98, 0x7c, 0x01, 0x00, 0x3c, 0x00, 0xb8, 0xdd, + 0x00, 0x00, 0x80, 0xb5, 0x01, 0x20, 0xfb, 0xf7, + 0x62, 0xfb, 0x80, 0xbd, 0x00, 0x00, 0xb0, 0xb5, + 0x04, 0x1c, 0x80, 0x7d, 0x15, 0x1c, 0x0a, 0x1c, + 0xc0, 0x07, 0xc0, 0x17, 0x01, 0x30, 0x21, 0x1c, + 0xf9, 0xf7, 0xfb, 0xfc, 0x00, 0x28, 0x03, 0xd1, + 0x04, 0x20, 0x28, 0x71, 0x01, 0x20, 0xb0, 0xbd, + 0x20, 0x6a, 0xf7, 0xf7, 0x76, 0xfe, 0x60, 0x6a, + 0xf7, 0xf7, 0x7b, 0xfe, 0x20, 0x6a, 0x3c, 0x00, + 0xf4, 0xdd, 0x00, 0x00, 0xfe, 0xf7, 0x88, 0xfa, + 0x00, 0x20, 0xb0, 0xbd, 0x10, 0xb5, 0x14, 0x1c, + 0xc2, 0x79, 0x81, 0x79, 0x80, 0x88, 0xf7, 0xf7, + 0xa1, 0xfa, 0x20, 0x71, 0x01, 0x20, 0x10, 0xbd, + 0x80, 0xb5, 0x01, 0x23, 0xfa, 0xf7, 0x70, 0xff, + 0x80, 0xbd, 0x00, 0x00, 0xf0, 0xb5, 0x04, 0x1c, + 0x08, 0x1c, 0x00, 0x21, 0x0f, 0x28, 0x91, 0xb0, + 0x00, 0xd3, 0x02, 0x21, 0x00, 0x29, 0x41, 0xd1, + 0x3c, 0x00, 0x30, 0xde, 0x00, 0x00, 0xc0, 0x00, + 0x24, 0x4f, 0x10, 0x90, 0xc6, 0x19, 0xb2, 0x88, + 0x21, 0x68, 0x02, 0xa8, 0xf2, 0xf7, 0x5b, 0xfb, + 0x21, 0x89, 0xb0, 0x88, 0x09, 0x1a, 0x00, 0x29, + 0x07, 0xdd, 0x09, 0x04, 0x22, 0x68, 0x09, 0x0c, + 0x10, 0x18, 0xf3, 0xf7, 0xc0, 0xfb, 0x05, 0x1c, + 0x00, 0xe0, 0x00, 0x25, 0xb0, 0x79, 0x80, 0x21, + 0x88, 0x43, 0x17, 0x49, 0x78, 0x31, 0x09, 0x5c, + 0x00, 0x20, 0x3c, 0x00, 0x6c, 0xde, 0x00, 0x00, + 0xf3, 0xf7, 0xb4, 0xfb, 0x07, 0x1c, 0x00, 0x68, + 0x13, 0x49, 0x01, 0x90, 0x10, 0x98, 0x0b, 0x58, + 0x01, 0x9a, 0x29, 0x1c, 0x02, 0xa8, 0xf2, 0xf7, + 0xac, 0xfa, 0x00, 0x90, 0x28, 0x1c, 0xf3, 0xf7, + 0x73, 0xfb, 0x20, 0x1c, 0xf3, 0xf7, 0x82, 0xfb, + 0x00, 0x98, 0x00, 0x28, 0x08, 0xd0, 0x02, 0x98, + 0x01, 0x99, 0x08, 0x60, 0xb0, 0x79, 0x39, 0x1c, + 0xfa, 0xf7, 0x20, 0xff, 0x3c, 0x00, 0xa8, 0xde, + 0x00, 0x00, 0x11, 0xb0, 0xf0, 0xbd, 0x38, 0x1c, + 0xf3, 0xf7, 0x61, 0xfb, 0xf9, 0xe7, 0x2d, 0x20, + 0xf3, 0xf7, 0xf5, 0xf9, 0x20, 0x1c, 0xf3, 0xf7, + 0x6c, 0xfb, 0xf2, 0xe7, 0x00, 0x00, 0x24, 0x44, + 0x01, 0x00, 0x70, 0xb5, 0x05, 0x1c, 0x20, 0x35, + 0x06, 0x1c, 0xa8, 0x79, 0x04, 0x28, 0x48, 0xd2, + 0xe9, 0x79, 0x01, 0x29, 0x13, 0xd1, 0x30, 0x1c, + 0x28, 0x30, 0x03, 0xf0, 0x92, 0xff, 0x3c, 0x00, + 0xe4, 0xde, 0x00, 0x00, 0x00, 0x28, 0x3f, 0xd0, + 0x01, 0x1c, 0x8c, 0x31, 0x01, 0x65, 0xa9, 0x79, + 0x4c, 0x22, 0x04, 0x1c, 0x11, 0x54, 0x81, 0x18, + 0x41, 0x62, 0x50, 0x34, 0x04, 0x62, 0xe1, 0x1e, + 0x81, 0x62, 0x0b, 0xe0, 0x00, 0x29, 0x2f, 0xd1, + 0x3c, 0x22, 0x18, 0x49, 0x42, 0x43, 0x54, 0x18, + 0x17, 0x4a, 0x04, 0x34, 0x12, 0x68, 0x00, 0x2a, + 0x00, 0xd1, 0x48, 0x70, 0x00, 0x2c, 0x23, 0xd0, + 0x3c, 0x00, 0x20, 0xdf, 0x00, 0x00, 0x35, 0x1c, + 0x30, 0x35, 0xe8, 0x79, 0x01, 0x28, 0x01, 0xd0, + 0x05, 0x28, 0x01, 0xd1, 0x06, 0x20, 0xe8, 0x71, + 0x20, 0x22, 0x31, 0x1d, 0x20, 0x68, 0xf2, 0xf7, + 0xde, 0xfa, 0xb0, 0x8c, 0xa0, 0x80, 0xe8, 0x79, + 0xa0, 0x71, 0xa8, 0x79, 0x00, 0x25, 0xa0, 0x63, + 0x01, 0x20, 0x60, 0x81, 0x00, 0x20, 0xe0, 0x60, + 0x2e, 0x36, 0xe8, 0x00, 0x00, 0x19, 0x18, 0x30, + 0x08, 0x22, 0x3c, 0x00, 0x5c, 0xdf, 0x00, 0x00, + 0x31, 0x1c, 0xf2, 0xf7, 0xcb, 0xfa, 0x01, 0x35, + 0x04, 0x2d, 0xf5, 0xd3, 0x01, 0x20, 0x70, 0xbd, + 0x68, 0x61, 0x01, 0x00, 0xdc, 0x62, 0x01, 0x00, + 0x10, 0xb5, 0x04, 0x1c, 0xc0, 0x7a, 0x01, 0x28, + 0x01, 0xd0, 0x03, 0x28, 0x07, 0xd1, 0x20, 0x1d, + 0x03, 0xf0, 0x40, 0xff, 0x00, 0x28, 0x02, 0xd0, + 0xa1, 0x7a, 0x40, 0x30, 0x41, 0x73, 0xe0, 0x7a, + 0x00, 0x28, 0x01, 0xd0, 0x3c, 0x00, 0x98, 0xdf, + 0x00, 0x00, 0x03, 0x28, 0x02, 0xd1, 0xa0, 0x7a, + 0x02, 0x49, 0x08, 0x70, 0x01, 0x20, 0x10, 0xbd, + 0x00, 0x00, 0x68, 0x61, 0x01, 0x00, 0x70, 0xb5, + 0x0e, 0x1c, 0x03, 0x21, 0x04, 0x1c, 0x30, 0x1c, + 0xfc, 0xf7, 0xe1, 0xfb, 0x00, 0x28, 0x01, 0xd0, + 0x85, 0x78, 0x00, 0xe0, 0x00, 0x25, 0x0b, 0x48, + 0x32, 0x1c, 0x00, 0x68, 0x03, 0x68, 0x20, 0x7c, + 0x80, 0x07, 0xc0, 0x0f, 0x21, 0x1c, 0x3c, 0x00, + 0xd4, 0xdf, 0x00, 0x00, 0xf7, 0xf7, 0x62, 0xfe, + 0x00, 0x28, 0x05, 0xd0, 0x01, 0x21, 0x28, 0x1c, + 0xfd, 0xf7, 0xfe, 0xfb, 0x00, 0x20, 0x00, 0xe0, + 0x08, 0x20, 0x03, 0xf0, 0xc5, 0xff, 0x00, 0x20, + 0x70, 0xbd, 0x00, 0x00, 0xe4, 0x65, 0x01, 0x00, + 0x80, 0xb5, 0x42, 0x68, 0x00, 0x88, 0x01, 0x21, + 0x49, 0x06, 0x08, 0x43, 0x2d, 0x21, 0x05, 0xf0, + 0xd3, 0xfb, 0x80, 0xbd, 0x03, 0x49, 0x01, 0x20, + 0x3c, 0x00, 0x10, 0xe0, 0x00, 0x00, 0x49, 0x78, + 0x02, 0x29, 0x00, 0xd0, 0x00, 0x20, 0x70, 0x47, + 0x00, 0x00, 0x84, 0x66, 0x01, 0x00, 0x8c, 0xb5, + 0x01, 0x28, 0x1f, 0xd1, 0x00, 0x29, 0x0d, 0xd0, + 0x01, 0x29, 0x0b, 0xd0, 0x02, 0x29, 0x01, 0xd0, + 0x03, 0x29, 0x16, 0xd1, 0x00, 0x20, 0xf9, 0xf7, + 0x14, 0xfc, 0x93, 0x20, 0x00, 0xab, 0x18, 0x80, + 0x00, 0x20, 0x08, 0xe0, 0x01, 0x29, 0x00, 0xd0, + 0x00, 0x20, 0x3c, 0x00, 0x4c, 0xe0, 0x00, 0x00, + 0xf9, 0xf7, 0x0a, 0xfc, 0x83, 0x20, 0x00, 0xab, + 0x18, 0x80, 0x02, 0x20, 0x00, 0xf0, 0xcc, 0xf8, + 0x01, 0x90, 0x68, 0x46, 0xff, 0xf7, 0x3a, 0xfa, + 0x8c, 0xbd, 0x01, 0x21, 0x0e, 0x20, 0xf3, 0xf7, + 0x1b, 0xf9, 0xf9, 0xe7, 0xff, 0xb5, 0x17, 0x1c, + 0x1e, 0x1c, 0x14, 0x21, 0x00, 0x20, 0x83, 0xb0, + 0xf3, 0xf7, 0xac, 0xfa, 0x05, 0x1c, 0x04, 0x68, + 0x12, 0x20, 0x00, 0xab, 0x3c, 0x00, 0x88, 0xe0, + 0x00, 0x00, 0x98, 0x80, 0x06, 0x22, 0x60, 0x1d, + 0x03, 0x99, 0xf2, 0xf7, 0x32, 0xfa, 0x00, 0x20, + 0x20, 0x71, 0x27, 0x73, 0x04, 0x99, 0x20, 0x1c, + 0xe1, 0x72, 0x31, 0x1c, 0x06, 0x22, 0x0d, 0x30, + 0xf2, 0xf7, 0x27, 0xfa, 0x02, 0x95, 0x01, 0xa8, + 0xff, 0xf7, 0x13, 0xfa, 0x07, 0xb0, 0xf0, 0xbd, + 0x00, 0x00, 0xf8, 0xb5, 0x06, 0x1c, 0x0f, 0x1c, + 0x0c, 0x21, 0x00, 0x20, 0xf3, 0xf7, 0x3c, 0x00, + 0xc4, 0xe0, 0x00, 0x00, 0x89, 0xfa, 0x05, 0x68, + 0x04, 0x1c, 0x28, 0x1d, 0x06, 0x22, 0x31, 0x1c, + 0xf2, 0xf7, 0x12, 0xfa, 0x6f, 0x81, 0x20, 0x1c, + 0xf8, 0xbd, 0x00, 0x00, 0xb0, 0xb5, 0x04, 0x1c, + 0x0d, 0x1c, 0x08, 0x21, 0x00, 0x20, 0xf3, 0xf7, + 0x77, 0xfa, 0x01, 0x68, 0x8c, 0x71, 0x8d, 0x80, + 0xb0, 0xbd, 0x00, 0x00, 0xf7, 0xb5, 0x0e, 0x1c, + 0x10, 0x21, 0x17, 0x1c, 0x00, 0x20, 0xf3, 0xf7, + 0x3c, 0x00, 0x00, 0xe1, 0x00, 0x00, 0x6b, 0xfa, + 0x04, 0x68, 0x05, 0x1c, 0x20, 0x1d, 0x06, 0x22, + 0x00, 0x99, 0xf2, 0xf7, 0xf4, 0xf9, 0x66, 0x81, + 0xa7, 0x81, 0x28, 0x1c, 0xfe, 0xbd, 0xf3, 0xb5, + 0x0c, 0x1c, 0x08, 0x21, 0x00, 0x20, 0x85, 0xb0, + 0xf3, 0xf7, 0x59, 0xfa, 0x06, 0x1c, 0x07, 0x68, + 0xe0, 0x68, 0x00, 0x28, 0x02, 0xd0, 0x05, 0x99, + 0x01, 0x29, 0x04, 0xd1, 0x05, 0x98, 0x38, 0x71, + 0x00, 0x20, 0x3c, 0x00, 0x3c, 0xe1, 0x00, 0x00, + 0x78, 0x71, 0x56, 0xe0, 0x03, 0x68, 0x01, 0x21, + 0x03, 0x93, 0x20, 0x69, 0x02, 0x90, 0xfc, 0xf7, + 0x17, 0xfb, 0x05, 0x1c, 0x02, 0x98, 0x32, 0x21, + 0xfc, 0xf7, 0x12, 0xfb, 0x00, 0x22, 0xd2, 0x43, + 0x01, 0x1c, 0x28, 0x1c, 0x04, 0xab, 0xf7, 0xf7, + 0xb9, 0xf8, 0x00, 0x28, 0x04, 0xd1, 0x30, 0x1c, + 0xf3, 0xf7, 0x02, 0xfa, 0x00, 0x26, 0x3c, 0xe0, + 0x00, 0x2d, 0x05, 0xd0, 0x3c, 0x00, 0x78, 0xe1, + 0x00, 0x00, 0x68, 0x78, 0x09, 0x38, 0x07, 0x28, + 0x01, 0xd8, 0x32, 0x20, 0x28, 0x70, 0x1c, 0x21, + 0x00, 0x20, 0xf3, 0xf7, 0x26, 0xfa, 0x01, 0x90, + 0x05, 0x68, 0x01, 0x1c, 0x30, 0x1c, 0xf3, 0xf7, + 0x40, 0xf9, 0xe0, 0x68, 0xf3, 0xf7, 0x0b, 0xfa, + 0xa8, 0x61, 0xe1, 0x68, 0x01, 0x98, 0xf3, 0xf7, + 0x38, 0xf9, 0x00, 0x20, 0xe0, 0x60, 0x05, 0x98, + 0x80, 0x21, 0x08, 0x43, 0x38, 0x71, 0x3c, 0x00, + 0xb4, 0xe1, 0x00, 0x00, 0x01, 0x20, 0x21, 0x1c, + 0x14, 0x31, 0x78, 0x71, 0x28, 0x1c, 0x06, 0x22, + 0xf2, 0xf7, 0x9a, 0xf9, 0x02, 0x9a, 0x29, 0x20, + 0x00, 0x92, 0x00, 0x5d, 0x01, 0x21, 0xe2, 0x6a, + 0x08, 0x28, 0x00, 0xd0, 0x00, 0x21, 0x28, 0x1c, + 0x03, 0x9b, 0x02, 0xf0, 0x9d, 0xff, 0xa0, 0x6b, + 0x28, 0x61, 0x20, 0x6c, 0x68, 0x61, 0x7f, 0x30, + 0x01, 0xd1, 0x0f, 0x20, 0x68, 0x61, 0x30, 0x1c, + 0x3c, 0x00, 0xf0, 0xe1, 0x00, 0x00, 0x07, 0xb0, + 0xf0, 0xbd, 0x10, 0xb5, 0x04, 0x1c, 0x08, 0x21, + 0x00, 0x20, 0xf3, 0xf7, 0xec, 0xf9, 0x01, 0x68, + 0x0c, 0x71, 0x10, 0xbd, 0x00, 0x00, 0x01, 0x48, + 0x00, 0x68, 0x70, 0x47, 0x00, 0x00, 0x28, 0x61, + 0x01, 0x00, 0x01, 0x49, 0x08, 0x60, 0x70, 0x47, + 0x00, 0x00, 0xe4, 0x65, 0x01, 0x00, 0x02, 0x1c, + 0x01, 0x20, 0x00, 0x06, 0x08, 0x43, 0x80, 0xb5, + 0x2d, 0x21, 0x3c, 0x00, 0x2c, 0xe2, 0x00, 0x00, + 0x05, 0xf0, 0xc0, 0xfa, 0x80, 0xbd, 0x00, 0x00, + 0x80, 0xb5, 0x01, 0x28, 0x07, 0xd0, 0xf1, 0x28, + 0x25, 0xd0, 0xf3, 0x28, 0x27, 0xd1, 0x02, 0x20, + 0x02, 0xf0, 0xbc, 0xf9, 0x80, 0xbd, 0x00, 0x29, + 0x1a, 0xd0, 0x01, 0x29, 0x03, 0xd0, 0xf2, 0x29, + 0xf8, 0xd1, 0x88, 0x21, 0x1c, 0xe0, 0x10, 0x48, + 0x01, 0x78, 0x00, 0x29, 0x05, 0xd1, 0x40, 0x78, + 0x01, 0x28, 0xef, 0xd1, 0x3c, 0x00, 0x68, 0xe2, + 0x00, 0x00, 0x00, 0xf0, 0x16, 0xfa, 0x80, 0xbd, + 0x0b, 0x48, 0x14, 0x30, 0x00, 0x89, 0xfc, 0xf7, + 0x5a, 0xfc, 0x01, 0x1c, 0x01, 0x22, 0x0f, 0x20, + 0x05, 0xf0, 0x9f, 0xf9, 0x80, 0xbd, 0x04, 0xf0, + 0x52, 0xfa, 0x80, 0xbd, 0x00, 0x20, 0xfa, 0xf7, + 0x32, 0xfe, 0x80, 0xbd, 0x02, 0x21, 0x0f, 0x20, + 0xf3, 0xf7, 0x05, 0xf8, 0x80, 0xbd, 0x84, 0x66, + 0x01, 0x00, 0x01, 0x48, 0x00, 0x78, 0x3c, 0x00, + 0xa4, 0xe2, 0x00, 0x00, 0x70, 0x47, 0x00, 0x00, + 0x74, 0x66, 0x01, 0x00, 0x01, 0x49, 0x00, 0x20, + 0x48, 0x60, 0x70, 0x47, 0xec, 0x65, 0x01, 0x00, + 0xf8, 0xb5, 0x0e, 0x1c, 0x13, 0x4d, 0x01, 0x1c, + 0x14, 0x1c, 0x68, 0x22, 0x28, 0x1c, 0x1f, 0x1c, + 0x0c, 0x30, 0xf2, 0xf7, 0x71, 0xf9, 0x0f, 0x49, + 0x00, 0x20, 0xac, 0x39, 0x48, 0x60, 0x01, 0x21, + 0x29, 0x60, 0x19, 0x21, 0x19, 0x2c, 0x6e, 0x67, + 0x3c, 0x00, 0xe0, 0xe2, 0x00, 0x00, 0x00, 0xd3, + 0x21, 0x1c, 0x29, 0x81, 0x09, 0x49, 0x14, 0x39, + 0x88, 0x73, 0x8f, 0x74, 0xc8, 0x78, 0x01, 0x28, + 0x08, 0xd0, 0x01, 0x21, 0x0f, 0x20, 0x05, 0xf0, + 0x9c, 0xf9, 0x19, 0x20, 0xfc, 0xf7, 0x15, 0xfc, + 0xfb, 0xf7, 0x99, 0xf8, 0x01, 0x20, 0xf8, 0xbd, + 0x00, 0x00, 0x98, 0x66, 0x01, 0x00, 0x80, 0xb5, + 0x01, 0x28, 0x02, 0xd1, 0x00, 0xf0, 0x2f, 0xf8, + 0x80, 0xbd, 0x3c, 0x00, 0x1c, 0xe3, 0x00, 0x00, + 0x01, 0x21, 0x1d, 0x20, 0xf2, 0xf7, 0xc0, 0xff, + 0x80, 0xbd, 0x00, 0x00, 0x70, 0x47, 0x00, 0x00, + 0x01, 0x20, 0x07, 0x49, 0x00, 0x05, 0x80, 0xb5, + 0x88, 0x60, 0x00, 0x22, 0x80, 0x21, 0x16, 0x20, + 0x05, 0xf0, 0x4c, 0xf9, 0x04, 0xf0, 0x34, 0xfd, + 0x02, 0x49, 0x08, 0x61, 0x80, 0xbd, 0x00, 0x00, + 0x00, 0x10, 0x07, 0x00, 0x24, 0x6d, 0x01, 0x00, + 0x06, 0x4a, 0x80, 0xb5, 0x3c, 0x00, 0x58, 0xe3, + 0x00, 0x00, 0xd1, 0x6a, 0x81, 0x42, 0x07, 0xd1, + 0x10, 0x7f, 0x24, 0x23, 0x04, 0x49, 0x58, 0x43, + 0x40, 0x18, 0xc0, 0x68, 0xf2, 0xf7, 0x35, 0xf8, + 0x80, 0xbd, 0xd4, 0x79, 0x01, 0x00, 0x94, 0x46, + 0x01, 0x00, 0x1d, 0x48, 0x1c, 0xb5, 0x00, 0x78, + 0x00, 0x28, 0x2d, 0xd0, 0x1c, 0x48, 0x00, 0x68, + 0x00, 0x28, 0x29, 0xd0, 0x1a, 0x4a, 0x1a, 0x4b, + 0x04, 0x32, 0x11, 0x68, 0x1c, 0x69, 0x3c, 0x00, + 0x94, 0xe3, 0x00, 0x00, 0xa1, 0x42, 0x22, 0xd1, + 0x51, 0x68, 0x5b, 0x69, 0x99, 0x42, 0x1f, 0xd1, + 0x16, 0x49, 0x49, 0x68, 0x93, 0x68, 0xc9, 0x1a, + 0x81, 0x42, 0x19, 0xd2, 0xd0, 0x68, 0x14, 0x49, + 0x01, 0x30, 0xd0, 0x60, 0x09, 0x68, 0x88, 0x42, + 0x0c, 0xd9, 0x06, 0x22, 0xff, 0x21, 0x68, 0x46, + 0xf2, 0xf7, 0x2e, 0xf9, 0xf3, 0xf7, 0xac, 0xfc, + 0x01, 0x1c, 0x00, 0x23, 0x00, 0x22, 0x68, 0x46, + 0x3c, 0x00, 0xd0, 0xe3, 0x00, 0x00, 0x02, 0xf0, + 0xce, 0xf9, 0x01, 0x22, 0x1d, 0x20, 0x0a, 0x49, + 0x05, 0xf0, 0xf7, 0xf8, 0x1c, 0xbd, 0xf7, 0xf7, + 0x88, 0xf9, 0x04, 0x22, 0x81, 0x18, 0x08, 0x1c, + 0xfc, 0xf7, 0x27, 0xfb, 0xf6, 0xe7, 0x1c, 0x75, + 0x01, 0x00, 0x44, 0x75, 0x01, 0x00, 0x28, 0x61, + 0x01, 0x00, 0x90, 0x5c, 0x01, 0x00, 0xf0, 0x59, + 0x01, 0x00, 0xa0, 0x86, 0x01, 0x00, 0x80, 0xb5, + 0x01, 0x68, 0x3c, 0x00, 0x0c, 0xe4, 0x00, 0x00, + 0x00, 0x29, 0x15, 0xd1, 0x00, 0x79, 0x02, 0x28, + 0x12, 0xd1, 0x08, 0x1c, 0xf7, 0xf7, 0x80, 0xf8, + 0x00, 0x28, 0x0d, 0xd0, 0x03, 0xf0, 0xf2, 0xfc, + 0x08, 0x30, 0x41, 0x8f, 0x00, 0x29, 0x07, 0xd1, + 0x80, 0x69, 0x00, 0x28, 0x04, 0xd0, 0x80, 0x79, + 0x06, 0x28, 0x01, 0xd1, 0xfc, 0xf7, 0x18, 0xfb, + 0x80, 0xbd, 0x00, 0x00, 0x01, 0x49, 0x00, 0x20, + 0x88, 0x62, 0x70, 0x47, 0x3c, 0x00, 0x48, 0xe4, + 0x00, 0x00, 0x78, 0x69, 0x01, 0x00, 0xb0, 0xb5, + 0x05, 0x4d, 0x04, 0x1c, 0xa9, 0x1d, 0xff, 0xf7, + 0x14, 0xf8, 0x06, 0x22, 0x29, 0x1c, 0xa0, 0x18, + 0xf2, 0xf7, 0x4b, 0xf8, 0xb0, 0xbd, 0x70, 0x7c, + 0x01, 0x00, 0xb0, 0xb5, 0x04, 0x1c, 0x15, 0x1c, + 0xff, 0xf7, 0x07, 0xf8, 0x06, 0x22, 0x29, 0x1c, + 0xa0, 0x18, 0xf2, 0xf7, 0x3e, 0xf8, 0xb0, 0xbd, + 0x00, 0x00, 0x80, 0xb5, 0x0a, 0x30, 0x3c, 0x00, + 0x84, 0xe4, 0x00, 0x00, 0xf7, 0xf7, 0xbc, 0xf9, + 0x01, 0x23, 0x00, 0x28, 0x03, 0xd0, 0x05, 0x48, + 0x00, 0x78, 0x01, 0x28, 0x04, 0xd1, 0x00, 0x22, + 0x00, 0x21, 0x00, 0x20, 0x03, 0xf0, 0xc6, 0xfd, + 0x80, 0xbd, 0x00, 0x00, 0xa0, 0x79, 0x01, 0x00, + 0x80, 0xb5, 0x00, 0x23, 0x00, 0x22, 0x00, 0x21, + 0x00, 0x20, 0x03, 0xf0, 0xbb, 0xfd, 0x80, 0xbd, + 0xb0, 0xb5, 0x05, 0x4d, 0xac, 0x79, 0x0a, 0x1c, + 0x3c, 0x00, 0xc0, 0xe4, 0x00, 0x00, 0x01, 0x1c, + 0x01, 0x23, 0x01, 0x20, 0x03, 0xf0, 0xb1, 0xfd, + 0xac, 0x71, 0xb0, 0xbd, 0x00, 0x00, 0x20, 0x10, + 0x07, 0x00, 0xf8, 0xb5, 0x06, 0x1c, 0x0c, 0x1c, + 0x88, 0x07, 0x02, 0xd5, 0xf6, 0xf7, 0x47, 0xfa, + 0x10, 0xe0, 0x60, 0x07, 0x0e, 0xd5, 0x17, 0x4f, + 0xa3, 0x20, 0xc0, 0x5d, 0x15, 0x4d, 0x10, 0x28, + 0x00, 0xd3, 0x15, 0x4d, 0x04, 0xf0, 0x59, 0xfc, + 0xb9, 0x6f, 0x3c, 0x00, 0xfc, 0xe4, 0x00, 0x00, + 0x40, 0x1a, 0x29, 0x1a, 0x01, 0x20, 0xf6, 0xf7, + 0xc1, 0xfa, 0xe0, 0x07, 0x11, 0x49, 0xc0, 0x0f, + 0x48, 0x60, 0x0c, 0xd0, 0x0d, 0x4c, 0x44, 0x3c, + 0x20, 0x78, 0x03, 0x28, 0x0f, 0xd1, 0x00, 0x2e, + 0x06, 0xd0, 0xf6, 0xf7, 0xf9, 0xf9, 0x01, 0x1c, + 0x01, 0x20, 0xf6, 0xf7, 0xaf, 0xfa, 0xf8, 0xbd, + 0x09, 0x49, 0x01, 0x20, 0xf6, 0xf7, 0xaa, 0xfa, + 0x01, 0x20, 0x20, 0x70, 0x3c, 0x00, 0x38, 0xe5, + 0x00, 0x00, 0xf7, 0xe7, 0x01, 0x21, 0x30, 0x1c, + 0xf6, 0xf7, 0x89, 0xfa, 0xf2, 0xe7, 0xa6, 0x0e, + 0x00, 0x00, 0xa4, 0x6c, 0x01, 0x00, 0xc4, 0x09, + 0x00, 0x00, 0xb0, 0x57, 0x01, 0x00, 0x40, 0x42, + 0x0f, 0x00, 0x80, 0xb5, 0x06, 0x28, 0x04, 0xdb, + 0x05, 0x21, 0xff, 0x20, 0xf2, 0xf7, 0x9f, 0xfe, + 0x80, 0xbd, 0x03, 0x4a, 0xc0, 0x00, 0x11, 0x50, + 0x01, 0x21, 0x80, 0x18, 0x01, 0x71, 0x3c, 0x00, + 0x74, 0xe5, 0x00, 0x00, 0x80, 0xbd, 0x00, 0x00, + 0x9c, 0x5a, 0x01, 0x00, 0x01, 0x48, 0x80, 0x68, + 0x70, 0x47, 0x00, 0x00, 0xd0, 0x60, 0x01, 0x00, + 0xb0, 0xb5, 0x08, 0x4c, 0x25, 0x1d, 0x28, 0x1c, + 0x21, 0x68, 0x00, 0xf0, 0xf1, 0xfe, 0x00, 0x28, + 0x03, 0xd1, 0x01, 0x21, 0x04, 0x48, 0xf2, 0xf7, + 0xcf, 0xfa, 0x28, 0x1c, 0x21, 0x68, 0x00, 0xf0, + 0xfb, 0xfe, 0xb0, 0xbd, 0xc0, 0x60, 0x01, 0x00, + 0x3c, 0x00, 0xb0, 0xe5, 0x00, 0x00, 0x2c, 0x10, + 0x07, 0x00, 0xb0, 0xb5, 0x10, 0x4d, 0x0c, 0x1c, + 0xa8, 0x68, 0x00, 0x28, 0x02, 0xd1, 0x04, 0xf0, + 0xf4, 0xfb, 0x28, 0x60, 0x20, 0x1c, 0x04, 0xf0, + 0x38, 0xfb, 0x01, 0x21, 0x03, 0x20, 0x03, 0xf0, + 0xc4, 0xfe, 0x04, 0xf0, 0xf0, 0xfb, 0xa8, 0x68, + 0x00, 0x28, 0x0b, 0xd1, 0x04, 0xf0, 0xe5, 0xfb, + 0x29, 0x68, 0x00, 0x1b, 0x40, 0x1a, 0x69, 0x68, + 0x40, 0x18, 0x3c, 0x00, 0xec, 0xe5, 0x00, 0x00, + 0x41, 0x08, 0x40, 0x18, 0x28, 0x60, 0x01, 0x20, + 0xa8, 0x60, 0xb0, 0xbd, 0xd0, 0x60, 0x01, 0x00, + 0xf8, 0xb5, 0x1f, 0x4e, 0x00, 0x24, 0xb0, 0x68, + 0x00, 0x28, 0x02, 0xd1, 0x04, 0xf0, 0xd0, 0xfb, + 0x70, 0x60, 0x05, 0xf0, 0x61, 0xf8, 0x04, 0xf0, + 0x8f, 0xfb, 0x05, 0x1c, 0xf9, 0xf7, 0x66, 0xfe, + 0x31, 0x68, 0x18, 0x4a, 0x41, 0x18, 0x12, 0x68, + 0xe8, 0x0b, 0x00, 0x2a, 0x3c, 0x00, 0x28, 0xe6, + 0x00, 0x00, 0x00, 0xd1, 0xa8, 0x0a, 0x40, 0x18, + 0x85, 0x42, 0x1f, 0xd9, 0x14, 0x4f, 0x2d, 0x1a, + 0x38, 0x1c, 0x20, 0x30, 0x81, 0x79, 0x00, 0xab, + 0x19, 0x70, 0xc0, 0x79, 0x58, 0x70, 0x05, 0xf0, + 0x6e, 0xf8, 0x00, 0x28, 0x03, 0xd1, 0x02, 0x21, + 0x8f, 0x20, 0xf2, 0xf7, 0x28, 0xfe, 0x29, 0x1c, + 0x0c, 0x48, 0xf2, 0x68, 0xf8, 0xf7, 0x09, 0xfc, + 0x00, 0x28, 0x04, 0xd0, 0x01, 0x1c, 0x3c, 0x00, + 0x64, 0xe6, 0x00, 0x00, 0x28, 0x1c, 0xff, 0xf7, + 0xa5, 0xff, 0x01, 0x24, 0x00, 0xab, 0x18, 0x88, + 0xf8, 0x84, 0x05, 0xf0, 0x47, 0xf8, 0x20, 0x1c, + 0xf8, 0xbd, 0x00, 0x00, 0xd0, 0x60, 0x01, 0x00, + 0xf4, 0x74, 0x01, 0x00, 0x00, 0x10, 0x07, 0x00, + 0x89, 0x13, 0x01, 0x00, 0x01, 0x49, 0x01, 0x20, + 0xc8, 0x60, 0x70, 0x47, 0xd0, 0x60, 0x01, 0x00, + 0x06, 0x48, 0x80, 0xb5, 0x00, 0x68, 0x01, 0x28, + 0x3c, 0x00, 0xa0, 0xe6, 0x00, 0x00, 0x07, 0xd1, + 0x04, 0x48, 0xac, 0x38, 0x01, 0x69, 0x03, 0x48, + 0x00, 0xf0, 0x79, 0xfe, 0xf3, 0xf7, 0x2b, 0xfa, + 0x80, 0xbd, 0x98, 0x66, 0x01, 0x00, 0x34, 0x63, + 0x01, 0x00, 0x80, 0xb5, 0x42, 0x78, 0x81, 0x68, + 0x00, 0x79, 0x03, 0xf0, 0xde, 0xff, 0x00, 0x28, + 0x01, 0xd1, 0xf5, 0xf7, 0xb6, 0xf9, 0x80, 0xbd, + 0x00, 0x00, 0x1f, 0xb5, 0x04, 0xf0, 0x69, 0xfb, + 0xf6, 0xf7, 0x3c, 0x00, 0xdc, 0xe6, 0x00, 0x00, + 0x91, 0xff, 0x16, 0x4c, 0x02, 0x28, 0x03, 0xd1, + 0xff, 0xf7, 0xdc, 0xfd, 0x04, 0x28, 0x02, 0xd3, + 0x00, 0x20, 0x20, 0x70, 0x1f, 0xbd, 0xfb, 0xf7, + 0xf7, 0xfc, 0x00, 0x28, 0xfa, 0xd1, 0x60, 0x6a, + 0x00, 0x28, 0xf7, 0xd0, 0x20, 0x78, 0x80, 0x07, + 0xf4, 0xd4, 0x09, 0x21, 0x16, 0x20, 0x04, 0xf0, + 0x93, 0xff, 0x01, 0x20, 0x20, 0x70, 0x0b, 0x4c, + 0x09, 0x49, 0x02, 0x90, 0x3c, 0x00, 0x18, 0xe7, + 0x00, 0x00, 0x01, 0x94, 0x00, 0x91, 0x04, 0xf0, + 0x46, 0xfb, 0x00, 0x19, 0x03, 0x90, 0x68, 0x46, + 0xfd, 0xf7, 0xb5, 0xfb, 0x00, 0x22, 0x16, 0x21, + 0x84, 0x20, 0x05, 0xf0, 0x3e, 0xf8, 0xdc, 0xe7, + 0x00, 0x00, 0x60, 0x6c, 0x01, 0x00, 0x61, 0xed, + 0x00, 0x00, 0x40, 0x42, 0x0f, 0x00, 0x23, 0x48, + 0x70, 0xb5, 0x80, 0x78, 0x9c, 0xb0, 0x01, 0x28, + 0x3e, 0xd1, 0x20, 0x4c, 0x09, 0xa8, 0x3c, 0x00, + 0x54, 0xe7, 0x00, 0x00, 0x80, 0x3c, 0x61, 0x1c, + 0xfe, 0xf7, 0x92, 0xfe, 0x04, 0x20, 0x11, 0xad, + 0x68, 0x72, 0xa0, 0x6f, 0x19, 0xa9, 0x18, 0x90, + 0x7c, 0x20, 0x00, 0x5d, 0x01, 0x26, 0x08, 0x71, + 0x1d, 0x20, 0x00, 0x5d, 0x00, 0x28, 0x06, 0xd0, + 0x10, 0x96, 0x12, 0x96, 0xfc, 0xf7, 0xf6, 0xfa, + 0x28, 0x72, 0x20, 0x7a, 0x11, 0x90, 0xf3, 0xf7, + 0xcd, 0xff, 0x6a, 0x21, 0x08, 0x53, 0x40, 0x34, + 0x3c, 0x00, 0x90, 0xe7, 0x00, 0x00, 0x00, 0x22, + 0x01, 0xa9, 0x06, 0xa8, 0xf6, 0xf7, 0xcd, 0xff, + 0x21, 0x1c, 0x00, 0x20, 0xfb, 0xf7, 0xcb, 0xfb, + 0x06, 0xa9, 0xfb, 0xf7, 0xc8, 0xfb, 0x01, 0xa9, + 0xfb, 0xf7, 0xc5, 0xfb, 0x0a, 0x49, 0x09, 0x68, + 0x00, 0x29, 0x07, 0xd0, 0x33, 0x1c, 0x0a, 0x22, + 0x69, 0x46, 0xfb, 0xf7, 0xda, 0xfb, 0x00, 0x9a, + 0x07, 0x21, 0x91, 0x70, 0x0c, 0x90, 0x09, 0xa8, + 0xfe, 0xf7, 0x3c, 0x00, 0xcc, 0xe7, 0x00, 0x00, + 0x7b, 0xfe, 0x1c, 0xb0, 0x70, 0xbd, 0x00, 0x00, + 0x84, 0x66, 0x01, 0x00, 0xe4, 0x62, 0x01, 0x00, + 0xf8, 0xb5, 0x04, 0x1c, 0xc0, 0x68, 0xff, 0x22, + 0x01, 0x68, 0x12, 0x02, 0x0e, 0x1c, 0x08, 0x7b, + 0x49, 0x7b, 0x09, 0x02, 0x11, 0x40, 0x08, 0x43, + 0x05, 0x1c, 0x31, 0x1c, 0x06, 0x22, 0xa0, 0x18, + 0xf1, 0xf7, 0x7c, 0xfe, 0x06, 0x22, 0xb1, 0x18, + 0x20, 0x1c, 0xf1, 0xf7, 0x3c, 0x00, 0x08, 0xe8, + 0x00, 0x00, 0x77, 0xfe, 0x28, 0x0a, 0x29, 0x02, + 0x08, 0x43, 0x00, 0x04, 0x03, 0x21, 0x49, 0x02, + 0x00, 0x0c, 0x88, 0x42, 0x08, 0xd2, 0xe0, 0x68, + 0x01, 0x89, 0x0e, 0x39, 0x01, 0x81, 0xe0, 0x68, + 0x01, 0x68, 0x0e, 0x31, 0x01, 0x60, 0xf8, 0xbd, + 0x00, 0x26, 0x20, 0x1c, 0x10, 0x30, 0x03, 0xf0, + 0xe8, 0xfa, 0x21, 0x8b, 0x00, 0x29, 0x05, 0xd1, + 0xe1, 0x7d, 0x00, 0x29, 0x0b, 0xd0, 0x3c, 0x00, + 0x44, 0xe8, 0x00, 0x00, 0x80, 0x69, 0x80, 0x07, + 0x08, 0xd4, 0xe0, 0x68, 0x01, 0x26, 0x01, 0x89, + 0x02, 0x39, 0x01, 0x81, 0xe0, 0x68, 0x01, 0x68, + 0x02, 0x31, 0x06, 0xe0, 0xe0, 0x68, 0x01, 0x89, + 0x06, 0x39, 0x01, 0x81, 0xe0, 0x68, 0x01, 0x68, + 0x06, 0x31, 0x01, 0x60, 0x14, 0x49, 0x00, 0x20, + 0x0b, 0x1f, 0x42, 0x00, 0x9a, 0x5a, 0xaa, 0x42, + 0x02, 0xd1, 0x11, 0x49, 0x06, 0x31, 0x02, 0xe0, + 0x3c, 0x00, 0x80, 0xe8, 0x00, 0x00, 0x01, 0x30, + 0x02, 0x28, 0xf5, 0xd3, 0xe0, 0x68, 0x06, 0x22, + 0x00, 0x68, 0xf1, 0xf7, 0x34, 0xfe, 0x01, 0x2e, + 0xcb, 0xd1, 0x81, 0x20, 0x00, 0xab, 0x18, 0x80, + 0xe1, 0x7d, 0x20, 0x8b, 0x49, 0x03, 0x08, 0x43, + 0x31, 0x03, 0x08, 0x43, 0x00, 0x04, 0x00, 0x0c, + 0x01, 0x0a, 0x00, 0x02, 0x08, 0x43, 0x58, 0x80, + 0xe0, 0x68, 0x19, 0x88, 0x00, 0x68, 0xc1, 0x80, + 0x59, 0x88, 0x3c, 0x00, 0xbc, 0xe8, 0x00, 0x00, + 0x01, 0x81, 0xb5, 0xe7, 0x6a, 0x46, 0x01, 0x00, + 0xb0, 0xb5, 0x0d, 0x1c, 0x01, 0x89, 0x06, 0x22, + 0x08, 0x31, 0x01, 0x81, 0x04, 0x68, 0x04, 0x49, + 0x08, 0x3c, 0x04, 0x60, 0x20, 0x1c, 0xf1, 0xf7, + 0x0d, 0xfe, 0xe5, 0x80, 0xb0, 0xbd, 0x00, 0x00, + 0x6a, 0x46, 0x01, 0x00, 0xf8, 0xb5, 0x00, 0x29, + 0x01, 0xd0, 0x00, 0x28, 0x01, 0xd1, 0x00, 0x20, + 0xf8, 0xbd, 0x09, 0x04, 0x3c, 0x00, 0xf8, 0xe8, + 0x00, 0x00, 0x09, 0x0c, 0xf2, 0xf7, 0x43, 0xff, + 0x06, 0x1c, 0x05, 0x1c, 0x00, 0x27, 0x20, 0xe0, + 0x2c, 0x89, 0x29, 0x68, 0x02, 0x2c, 0x01, 0xd2, + 0x02, 0x20, 0x01, 0xe0, 0x48, 0x78, 0x02, 0x30, + 0x84, 0x42, 0x02, 0xdd, 0x24, 0x1a, 0x09, 0x18, + 0xf4, 0xe7, 0x84, 0x42, 0x10, 0xd0, 0x01, 0x1b, + 0x0a, 0x04, 0x01, 0x04, 0x09, 0x0c, 0x12, 0x0c, + 0x28, 0x1c, 0xf2, 0xf7, 0x9e, 0xfe, 0x3c, 0x00, + 0x34, 0xe9, 0x00, 0x00, 0x00, 0x28, 0x06, 0xd1, + 0xe8, 0x68, 0xf2, 0xf7, 0x2d, 0xfe, 0xef, 0x60, + 0x28, 0x89, 0x00, 0x1b, 0x28, 0x81, 0xed, 0x68, + 0x00, 0x2d, 0xdc, 0xd1, 0x30, 0x1c, 0xd1, 0xe7, + 0xf8, 0xb5, 0x85, 0x68, 0x04, 0x1c, 0x80, 0x69, + 0x2e, 0x1c, 0x00, 0x28, 0x0d, 0xd0, 0x71, 0x68, + 0xf2, 0xf7, 0xf6, 0xfd, 0xa0, 0x69, 0xf2, 0xf7, + 0x17, 0xfe, 0x06, 0xe0, 0x00, 0x21, 0xc1, 0x60, + 0x3c, 0x00, 0x70, 0xe9, 0x00, 0x00, 0xf1, 0x60, + 0xa0, 0x8d, 0x36, 0x68, 0x01, 0x38, 0xa0, 0x85, + 0xf0, 0x68, 0x00, 0x28, 0xf5, 0xd1, 0x30, 0x68, + 0xa0, 0x60, 0xa0, 0x8d, 0x01, 0x38, 0x00, 0x04, + 0x00, 0x0c, 0xa0, 0x85, 0x02, 0xd0, 0x20, 0x1c, + 0xf9, 0xf7, 0x39, 0xf8, 0x2a, 0x4f, 0x2a, 0x48, + 0x00, 0x68, 0x00, 0x28, 0x03, 0xd0, 0x06, 0x21, + 0x68, 0x68, 0xfa, 0xf7, 0x7c, 0xfd, 0x68, 0x68, + 0x00, 0x68, 0x3c, 0x00, 0xac, 0xe9, 0x00, 0x00, + 0x81, 0x78, 0x00, 0x29, 0x2b, 0xd1, 0xc1, 0x78, + 0x00, 0x29, 0x30, 0xd1, 0x21, 0x8e, 0x01, 0x39, + 0x21, 0x86, 0xfb, 0xf7, 0x15, 0xf8, 0xa1, 0x6a, + 0x08, 0x1a, 0xa0, 0x62, 0xe1, 0x69, 0x88, 0x42, + 0x03, 0xd9, 0x04, 0x21, 0x02, 0x20, 0xf2, 0xf7, + 0x67, 0xfc, 0xb8, 0x68, 0x00, 0x28, 0x1e, 0xd0, + 0x1a, 0x49, 0x20, 0x8e, 0x49, 0x68, 0x0c, 0x22, + 0x52, 0x1a, 0x90, 0x42, 0x3c, 0x00, 0xe8, 0xe9, + 0x00, 0x00, 0x08, 0xd3, 0x19, 0x23, 0x9b, 0x01, + 0xaf, 0x22, 0x92, 0x01, 0x59, 0x43, 0xa0, 0x6a, + 0x51, 0x1a, 0x88, 0x42, 0x0e, 0xd2, 0x00, 0x21, + 0x0c, 0x20, 0x03, 0xf0, 0xac, 0xfc, 0x00, 0x20, + 0xb8, 0x60, 0x07, 0xe0, 0x01, 0x29, 0x05, 0xd1, + 0xc0, 0x78, 0x17, 0x28, 0x02, 0xd1, 0xa0, 0x8e, + 0x01, 0x38, 0xa0, 0x86, 0x2a, 0x1d, 0x06, 0xca, + 0xe0, 0x68, 0x63, 0x69, 0xf1, 0xf7, 0x3c, 0x00, + 0x24, 0xea, 0x00, 0x00, 0xdc, 0xfc, 0xb5, 0x42, + 0x01, 0xd0, 0x2d, 0x68, 0xb4, 0xe7, 0xa0, 0x8d, + 0x00, 0x28, 0x03, 0xd1, 0x05, 0x48, 0xb9, 0x69, + 0x00, 0xf0, 0x9e, 0xfc, 0xf8, 0xbd, 0x00, 0x00, + 0xfc, 0x5a, 0x01, 0x00, 0xcc, 0x5c, 0x01, 0x00, + 0x18, 0x57, 0x01, 0x00, 0xc4, 0x60, 0x01, 0x00, + 0x89, 0x07, 0x07, 0x4b, 0xca, 0x0f, 0x80, 0xb5, + 0x19, 0x7c, 0x00, 0x29, 0x06, 0xd0, 0x81, 0x43, + 0x3c, 0x00, 0x60, 0xea, 0x00, 0x00, 0x19, 0x74, + 0x03, 0xd1, 0x07, 0x21, 0x15, 0x20, 0x04, 0xf0, + 0xa2, 0xfe, 0x80, 0xbd, 0x00, 0x00, 0x78, 0x69, + 0x01, 0x00, 0x80, 0xb5, 0x01, 0x1c, 0x01, 0x20, + 0xff, 0xf7, 0xe9, 0xff, 0x80, 0xbd, 0x80, 0xb5, + 0x01, 0x1c, 0x02, 0x20, 0xff, 0xf7, 0xe3, 0xff, + 0x80, 0xbd, 0xb0, 0xb5, 0x1b, 0x4c, 0x60, 0x68, + 0xfc, 0xf7, 0x2f, 0xff, 0x20, 0x68, 0x00, 0x25, + 0x40, 0x68, 0x3c, 0x00, 0x9c, 0xea, 0x00, 0x00, + 0x00, 0x28, 0x03, 0xd0, 0xfd, 0xf7, 0x18, 0xfc, + 0x20, 0x68, 0x45, 0x60, 0x60, 0x68, 0xfc, 0xf7, + 0xc5, 0xfe, 0x14, 0x48, 0x61, 0x68, 0x00, 0xf0, + 0x61, 0xfc, 0xa0, 0x7a, 0x01, 0x28, 0x05, 0xd0, + 0x02, 0x28, 0x03, 0xd0, 0x20, 0x68, 0x00, 0x68, + 0x00, 0xf0, 0xde, 0xf8, 0x01, 0x21, 0x1f, 0x20, + 0x04, 0xf0, 0xb2, 0xfd, 0x00, 0x21, 0x1f, 0x20, + 0x04, 0xf0, 0xae, 0xfd, 0x3c, 0x00, 0xd8, 0xea, + 0x00, 0x00, 0x02, 0x21, 0x1f, 0x20, 0x04, 0xf0, + 0xaa, 0xfd, 0xa5, 0x72, 0x21, 0x68, 0x2c, 0x20, + 0x40, 0x5c, 0x89, 0x68, 0xf1, 0xf7, 0x76, 0xfc, + 0x60, 0x68, 0xfc, 0xf7, 0xe4, 0xfe, 0x20, 0x68, + 0x05, 0x62, 0xb0, 0xbd, 0x00, 0x00, 0x14, 0x7a, + 0x01, 0x00, 0x34, 0x63, 0x01, 0x00, 0x04, 0x49, + 0x0a, 0x68, 0xc8, 0x68, 0x92, 0x6a, 0x00, 0x2a, + 0x01, 0xd0, 0x09, 0x69, 0x08, 0x18, 0x3c, 0x00, + 0x14, 0xeb, 0x00, 0x00, 0x70, 0x47, 0x00, 0x00, + 0x14, 0x7a, 0x01, 0x00, 0xb0, 0xb5, 0x13, 0x4c, + 0x05, 0x1c, 0xa0, 0x7a, 0x01, 0x38, 0x02, 0x28, + 0x19, 0xd8, 0x01, 0x21, 0x1f, 0x20, 0x04, 0xf0, + 0x81, 0xfd, 0x20, 0x68, 0xfc, 0x23, 0x01, 0x1c, + 0x20, 0x30, 0x02, 0x7b, 0x1a, 0x40, 0x02, 0x73, + 0x00, 0x2d, 0x0f, 0xd0, 0x01, 0x23, 0x1a, 0x43, + 0x02, 0x73, 0xa0, 0x7a, 0x03, 0x28, 0x07, 0xd1, + 0x3c, 0x00, 0x50, 0xeb, 0x00, 0x00, 0x01, 0x20, + 0x01, 0xf0, 0xe7, 0xfd, 0x00, 0x28, 0x01, 0xd1, + 0xff, 0xf7, 0x97, 0xff, 0xb0, 0xbd, 0x4b, 0x62, + 0xb0, 0xbd, 0x02, 0x21, 0x11, 0x43, 0x01, 0x73, + 0xf6, 0xe7, 0x14, 0x7a, 0x01, 0x00, 0x10, 0xb5, + 0x04, 0x1c, 0x0a, 0x30, 0xf6, 0xf7, 0x43, 0xfe, + 0x00, 0x28, 0x0c, 0xd0, 0x22, 0x88, 0x0a, 0x49, + 0x0b, 0x7a, 0x90, 0x04, 0xc0, 0x0f, 0x00, 0x2b, + 0x06, 0xd1, 0x3c, 0x00, 0x8c, 0xeb, 0x00, 0x00, + 0x12, 0x06, 0x92, 0x0e, 0x20, 0x2a, 0x00, 0xd1, + 0x01, 0x20, 0xc8, 0x60, 0x10, 0xbd, 0x00, 0x28, + 0xfc, 0xd1, 0x00, 0x22, 0x24, 0x21, 0x80, 0x20, + 0x04, 0xf0, 0x04, 0xfe, 0x10, 0xbd, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x80, 0xb5, 0x02, 0x1c, + 0x1f, 0x21, 0x80, 0x20, 0x04, 0xf0, 0xfa, 0xfd, + 0x80, 0xbd, 0x00, 0x00, 0xf8, 0xb5, 0x1d, 0x4e, + 0x04, 0x1c, 0x30, 0x68, 0x3c, 0x00, 0xc8, 0xeb, + 0x00, 0x00, 0x1d, 0x1c, 0x47, 0x68, 0x20, 0x1c, + 0xf1, 0xf7, 0x0a, 0xfc, 0xfb, 0xf7, 0x87, 0xfa, + 0x00, 0x28, 0x04, 0xd0, 0x28, 0x1c, 0xf2, 0xf7, + 0x2a, 0xfb, 0x00, 0x28, 0x28, 0xd1, 0x20, 0x88, + 0x40, 0x05, 0x25, 0xd4, 0x30, 0x68, 0x00, 0x68, + 0xfe, 0xf7, 0x59, 0xf9, 0x00, 0x28, 0x03, 0xd1, + 0xfd, 0xf7, 0x89, 0xfa, 0xf1, 0xf7, 0xed, 0xfb, + 0x30, 0x68, 0x00, 0x25, 0x40, 0x68, 0x3c, 0x00, + 0x04, 0xec, 0x00, 0x00, 0x00, 0x28, 0x03, 0xd0, + 0xfd, 0xf7, 0x64, 0xfb, 0x30, 0x68, 0x45, 0x60, + 0x20, 0x88, 0x00, 0x09, 0x00, 0x07, 0x03, 0xd1, + 0x04, 0xf0, 0xc8, 0xf8, 0x61, 0x88, 0x45, 0x18, + 0x30, 0x68, 0x45, 0x61, 0x81, 0x6a, 0x01, 0x31, + 0x81, 0x62, 0x20, 0x88, 0x80, 0x04, 0xc1, 0x0f, + 0x02, 0x48, 0xf8, 0xf7, 0xcd, 0xff, 0xf8, 0xbd, + 0x14, 0x7a, 0x01, 0x00, 0xb1, 0xeb, 0x00, 0x00, + 0x3c, 0x00, 0x40, 0xec, 0x00, 0x00, 0xb0, 0xb5, + 0x0e, 0x4c, 0x05, 0x1c, 0x60, 0x68, 0xfc, 0xf7, + 0xf6, 0xfd, 0x0c, 0x48, 0x61, 0x68, 0x00, 0xf0, + 0x92, 0xfb, 0x00, 0x21, 0x24, 0x20, 0x04, 0xf0, + 0xec, 0xfc, 0x00, 0x22, 0xd2, 0x43, 0x80, 0x21, + 0x24, 0x20, 0x04, 0xf0, 0xb8, 0xfc, 0x00, 0x20, + 0xe0, 0x60, 0x20, 0x72, 0x20, 0x68, 0x01, 0x68, + 0x28, 0x06, 0x00, 0x0e, 0xf1, 0xf7, 0xb0, 0xfb, + 0xb0, 0xbd, 0x3c, 0x00, 0x7c, 0xec, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x34, 0x63, 0x01, 0x00, + 0x10, 0xb5, 0x04, 0x1c, 0xc0, 0x68, 0xf2, 0xf7, + 0x85, 0xfc, 0x20, 0x1c, 0xf2, 0xf7, 0xb0, 0xfd, + 0x10, 0xbd, 0x00, 0x00, 0x70, 0xb5, 0x1c, 0x4e, + 0x05, 0x1c, 0xb0, 0x7a, 0x2c, 0x1c, 0x40, 0x34, + 0x02, 0x28, 0x26, 0xd1, 0xa0, 0x8b, 0x31, 0x89, + 0x88, 0x42, 0x22, 0xd1, 0x30, 0x68, 0x41, 0x6a, + 0x00, 0x29, 0x08, 0xd0, 0x3c, 0x00, 0xb8, 0xec, + 0x00, 0x00, 0x20, 0x30, 0x00, 0x7b, 0xc0, 0x07, + 0x04, 0xd5, 0x01, 0x20, 0x01, 0xf0, 0x2f, 0xfd, + 0x00, 0x28, 0x18, 0xd1, 0x60, 0x78, 0x00, 0x28, + 0x09, 0xd1, 0x30, 0x68, 0x02, 0x23, 0x20, 0x30, + 0x02, 0x7b, 0x0d, 0x49, 0x52, 0x08, 0x52, 0x00, + 0x1a, 0x43, 0x02, 0x73, 0x01, 0xe0, 0xff, 0x21, + 0xf5, 0x31, 0x01, 0x22, 0x1f, 0x20, 0x04, 0xf0, + 0x6e, 0xfc, 0x03, 0x20, 0xb0, 0x72, 0x3c, 0x00, + 0xf4, 0xec, 0x00, 0x00, 0x02, 0xe0, 0x28, 0x1c, + 0xff, 0xf7, 0xc4, 0xff, 0x60, 0x78, 0x00, 0x28, + 0x03, 0xd1, 0x29, 0x1c, 0x01, 0x20, 0x03, 0xf0, + 0x29, 0xfb, 0x70, 0xbd, 0x14, 0x7a, 0x01, 0x00, + 0x50, 0xc3, 0x00, 0x00, 0xb0, 0xb5, 0x04, 0x1c, + 0x60, 0x34, 0xe0, 0x79, 0x0e, 0x4d, 0x00, 0x28, + 0x0a, 0xd1, 0x02, 0x20, 0xa8, 0x72, 0x28, 0x68, + 0x40, 0x68, 0x00, 0x28, 0x04, 0xd1, 0x0b, 0x48, + 0x3c, 0x00, 0x30, 0xed, 0x00, 0x00, 0xfd, 0xf7, + 0xd0, 0xfa, 0x29, 0x68, 0x48, 0x60, 0x04, 0xf0, + 0x38, 0xf8, 0x29, 0x68, 0xc8, 0x61, 0xff, 0xf7, + 0xe0, 0xfe, 0x29, 0x68, 0x09, 0x69, 0x08, 0x1a, + 0x03, 0xf0, 0x6f, 0xff, 0x00, 0x28, 0x01, 0xd0, + 0xe0, 0x79, 0xa0, 0x71, 0xb0, 0xbd, 0x14, 0x7a, + 0x01, 0x00, 0xc1, 0xeb, 0x00, 0x00, 0xf8, 0xb5, + 0x04, 0x1c, 0x00, 0x26, 0x04, 0xf0, 0x21, 0xf8, + 0x05, 0x1c, 0x3c, 0x00, 0x6c, 0xed, 0x00, 0x00, + 0x22, 0x48, 0x00, 0x27, 0x07, 0x70, 0xa1, 0x07, + 0x04, 0xd0, 0xe1, 0x07, 0xc9, 0x0f, 0x01, 0x62, + 0xc5, 0x61, 0x01, 0x26, 0x41, 0x6b, 0x00, 0x29, + 0x34, 0xd1, 0x00, 0x2e, 0x32, 0xd0, 0x06, 0x1c, + 0xf9, 0xf7, 0x44, 0xff, 0x31, 0x6b, 0x1a, 0x4b, + 0x41, 0x1a, 0xa2, 0x07, 0x12, 0xd5, 0xda, 0x68, + 0x00, 0x2a, 0x08, 0xdd, 0x91, 0x42, 0x1a, 0x68, + 0x02, 0xda, 0x14, 0x09, 0x3c, 0x00, 0xa8, 0xed, + 0x00, 0x00, 0xa2, 0x18, 0x06, 0xe0, 0x14, 0x09, + 0x12, 0x1b, 0x03, 0xe0, 0x0a, 0x43, 0x02, 0xd1, + 0x1a, 0x68, 0x52, 0x00, 0x1a, 0x60, 0xb7, 0x63, + 0x0a, 0xe0, 0xb2, 0x6b, 0x01, 0x32, 0xb2, 0x63, + 0x02, 0x2a, 0x1a, 0x68, 0x01, 0xdd, 0x94, 0x08, + 0x00, 0xe0, 0x14, 0x09, 0x12, 0x1b, 0x1a, 0x60, + 0xd9, 0x60, 0x30, 0x63, 0xf5, 0x62, 0x18, 0x68, + 0x08, 0x49, 0x88, 0x42, 0x01, 0xd9, 0x3c, 0x00, + 0xe4, 0xed, 0x00, 0x00, 0x19, 0x60, 0x03, 0xe0, + 0x64, 0x28, 0x01, 0xd2, 0x64, 0x20, 0x18, 0x60, + 0xf5, 0xf7, 0xfc, 0xfd, 0xf8, 0xbd, 0x00, 0x00, + 0x60, 0x6c, 0x01, 0x00, 0xb0, 0x57, 0x01, 0x00, + 0x20, 0xa1, 0x07, 0x00, 0xfe, 0xb5, 0x04, 0x1c, + 0x00, 0x20, 0x50, 0x4d, 0x00, 0x21, 0x68, 0x61, + 0x20, 0x69, 0xfb, 0xf7, 0xb3, 0xfc, 0x07, 0x1c, + 0x20, 0x69, 0x03, 0x21, 0xfb, 0xf7, 0xae, 0xfc, + 0x3c, 0x00, 0x20, 0xee, 0x00, 0x00, 0x00, 0x28, + 0x03, 0xd0, 0x80, 0x78, 0x29, 0x78, 0x88, 0x42, + 0x63, 0xd1, 0x47, 0x4d, 0x20, 0x1c, 0x14, 0x30, + 0x39, 0x1c, 0x06, 0x1c, 0x2a, 0x78, 0x02, 0xf0, + 0x5a, 0xfa, 0x00, 0x28, 0x59, 0xd1, 0xe0, 0x68, + 0x05, 0x68, 0x41, 0x48, 0x01, 0x95, 0x58, 0x30, + 0x02, 0x90, 0xfb, 0xf7, 0x6a, 0xff, 0x3e, 0x4d, + 0x19, 0x35, 0x00, 0x28, 0x0b, 0xd0, 0x28, 0x1c, + 0xfb, 0xf7, 0x3c, 0x00, 0x5c, 0xee, 0x00, 0x00, + 0x55, 0xff, 0x00, 0x28, 0x1e, 0xd1, 0x31, 0x1c, + 0x28, 0x1c, 0xfb, 0xf7, 0x65, 0xff, 0x00, 0x28, + 0x42, 0xd0, 0x17, 0xe0, 0x28, 0x1c, 0xfb, 0xf7, + 0x49, 0xff, 0x00, 0x28, 0x06, 0xd0, 0x39, 0x1c, + 0x02, 0x98, 0xfb, 0xf7, 0x63, 0xff, 0x00, 0x28, + 0x36, 0xd0, 0x0b, 0xe0, 0x39, 0x1c, 0x02, 0x98, + 0xfb, 0xf7, 0x5c, 0xff, 0x00, 0x28, 0x2f, 0xd0, + 0x31, 0x1c, 0x28, 0x1c, 0x3c, 0x00, 0x98, 0xee, + 0x00, 0x00, 0xfb, 0xf7, 0x4c, 0xff, 0x00, 0x28, + 0x29, 0xd0, 0x30, 0x1c, 0xf6, 0xf7, 0xad, 0xfc, + 0x29, 0x4a, 0x18, 0x32, 0x11, 0x7c, 0x00, 0x29, + 0x04, 0xd0, 0x51, 0x6a, 0x00, 0x29, 0x01, 0xd0, + 0x00, 0x28, 0x1c, 0xd1, 0x90, 0x6a, 0x00, 0x28, + 0x3b, 0xd0, 0x13, 0x78, 0x01, 0x9d, 0x01, 0x21, + 0x6d, 0x89, 0x01, 0x20, 0x2b, 0x40, 0x9b, 0x07, + 0x11, 0xd0, 0xa3, 0x6b, 0x1e, 0x4e, 0x3c, 0x00, + 0xd4, 0xee, 0x00, 0x00, 0x1d, 0x1c, 0x7f, 0x35, + 0x98, 0x36, 0x00, 0x2d, 0x14, 0xd0, 0x55, 0x8a, + 0x00, 0x2d, 0x08, 0xd1, 0x55, 0x69, 0xab, 0x42, + 0x0f, 0xda, 0x00, 0x20, 0x17, 0x4d, 0x01, 0x23, + 0x6b, 0x61, 0x0a, 0xe0, 0x29, 0xe0, 0xf5, 0x78, + 0x02, 0x2d, 0x06, 0xd1, 0x14, 0x4f, 0x55, 0x69, + 0x3f, 0x68, 0xed, 0x19, 0xab, 0x42, 0x00, 0xda, + 0x00, 0x20, 0x23, 0x6c, 0x1d, 0x1c, 0x7f, 0x35, + 0x3c, 0x00, 0x10, 0xef, 0x00, 0x00, 0x10, 0xd0, + 0x55, 0x8a, 0x00, 0x2d, 0x03, 0xd1, 0x95, 0x69, + 0xab, 0x42, 0x0a, 0xd2, 0x08, 0xe0, 0xf5, 0x78, + 0x02, 0x2d, 0x06, 0xd1, 0x0b, 0x4e, 0x95, 0x69, + 0x36, 0x68, 0xad, 0x19, 0xab, 0x42, 0x00, 0xd2, + 0x00, 0x21, 0x08, 0x43, 0x08, 0xd0, 0x10, 0x6a, + 0x00, 0x28, 0x01, 0xd0, 0xf1, 0xf7, 0x4b, 0xfa, + 0x00, 0x21, 0x20, 0x1c, 0x01, 0xf0, 0xb9, 0xf9, + 0xfe, 0xbd, 0x3c, 0x00, 0x4c, 0xef, 0x00, 0x00, + 0xec, 0x65, 0x01, 0x00, 0xc4, 0x67, 0x01, 0x00, + 0xcc, 0x67, 0x01, 0x00, 0x3e, 0xb5, 0x05, 0x6a, + 0x04, 0x1c, 0xc0, 0x68, 0xf2, 0xf7, 0x34, 0xfb, + 0xe1, 0x69, 0xf2, 0xf7, 0x57, 0xfa, 0x20, 0x1c, + 0x40, 0x30, 0xc1, 0x8b, 0x04, 0x31, 0xc1, 0x83, + 0x2b, 0x69, 0x10, 0x49, 0x98, 0x79, 0x06, 0x28, + 0x0a, 0xd1, 0x98, 0x88, 0x01, 0x91, 0x02, 0x94, + 0x00, 0x90, 0x60, 0x69, 0x3c, 0x00, 0x88, 0xef, + 0x00, 0x00, 0x1b, 0x68, 0x01, 0x68, 0xe0, 0x68, + 0x03, 0x22, 0xc0, 0x68, 0x0a, 0xe0, 0x02, 0x28, + 0x0b, 0xd1, 0x10, 0x20, 0x00, 0x90, 0x01, 0x91, + 0x02, 0x94, 0xe0, 0x68, 0xa3, 0x69, 0xc0, 0x68, + 0x00, 0x22, 0x00, 0x21, 0xf7, 0xf7, 0x0f, 0xfb, + 0x3e, 0xbd, 0xf2, 0xf7, 0xa6, 0xf9, 0xfb, 0xe7, + 0x00, 0x00, 0xbd, 0xef, 0x00, 0x00, 0x80, 0xb5, + 0xd1, 0x68, 0x50, 0x69, 0xc9, 0x68, 0x3c, 0x00, + 0xc4, 0xef, 0x00, 0x00, 0xc1, 0x60, 0xd1, 0x68, + 0xc8, 0x60, 0x11, 0x1c, 0x40, 0x31, 0xcb, 0x8b, + 0x00, 0x89, 0x18, 0x18, 0xc8, 0x83, 0x10, 0x68, + 0x00, 0x28, 0x02, 0xd0, 0xff, 0xf7, 0xbc, 0xff, + 0x80, 0xbd, 0x03, 0x48, 0xfb, 0xf7, 0xcc, 0xf8, + 0x00, 0x6a, 0xfe, 0xf7, 0xf5, 0xf9, 0x80, 0xbd, + 0xa0, 0x6a, 0x01, 0x00, 0xf8, 0xb5, 0x06, 0x1c, + 0x0a, 0x24, 0x30, 0x07, 0x01, 0x09, 0xa0, 0x07, + 0x3c, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x01, 0x43, + 0x0f, 0x1c, 0x0a, 0x4d, 0x2f, 0x60, 0x04, 0xf0, + 0xfa, 0xfe, 0xad, 0x68, 0x28, 0x01, 0x00, 0x0f, + 0xb0, 0x42, 0x05, 0xd0, 0x01, 0x3c, 0xf4, 0xd2, + 0x01, 0x21, 0x9b, 0x20, 0xf2, 0xf7, 0x41, 0xf9, + 0x28, 0x02, 0x00, 0x0a, 0x08, 0x2e, 0x01, 0xd1, + 0x31, 0x05, 0x08, 0x43, 0xf8, 0xbd, 0x60, 0x00, + 0x07, 0x00, 0x01, 0x22, 0xd2, 0x05, 0x80, 0xb5, + 0x00, 0x21, 0x3c, 0x00, 0x3c, 0xf0, 0x00, 0x00, + 0x04, 0x20, 0x04, 0xf0, 0xdd, 0xfc, 0x0f, 0x20, + 0xff, 0xf7, 0xd6, 0xff, 0x0f, 0x21, 0x09, 0x04, + 0x08, 0x40, 0x00, 0x0c, 0x80, 0xbd, 0x00, 0x00, + 0x80, 0xb5, 0x05, 0x48, 0xfd, 0xf7, 0x4a, 0xf9, + 0x04, 0x48, 0xfd, 0xf7, 0x7b, 0xf8, 0x04, 0x48, + 0xfd, 0xf7, 0x6c, 0xf8, 0x80, 0xbd, 0x00, 0x00, + 0x89, 0x34, 0x01, 0x00, 0xed, 0x24, 0x00, 0x00, + 0x11, 0x1c, 0x00, 0x00, 0x3c, 0x00, 0x78, 0xf0, + 0x00, 0x00, 0x80, 0xb5, 0x02, 0x48, 0xf3, 0xf7, + 0x2a, 0xfc, 0x80, 0xbd, 0x00, 0x00, 0xd1, 0x24, + 0x00, 0x00, 0x80, 0xb5, 0xf2, 0xf7, 0x53, 0xf9, + 0x80, 0xbd, 0x80, 0xb5, 0x00, 0x21, 0x00, 0x20, + 0x01, 0xf0, 0x51, 0xfe, 0x03, 0x20, 0x02, 0xf0, + 0x46, 0xff, 0x80, 0xbd, 0x00, 0x00, 0x06, 0x48, + 0x80, 0xb5, 0xc1, 0x69, 0x00, 0x29, 0x06, 0xd1, + 0x01, 0x6a, 0x00, 0x29, 0x03, 0xd1, 0x3c, 0x00, + 0xb4, 0xf0, 0x00, 0x00, 0x81, 0x6b, 0x03, 0x48, + 0x00, 0xf0, 0x5e, 0xf9, 0x80, 0xbd, 0x00, 0x00, + 0xc4, 0x69, 0x01, 0x00, 0x34, 0x63, 0x01, 0x00, + 0x10, 0xb5, 0x04, 0x4c, 0x20, 0x6a, 0xfc, 0xf7, + 0xb3, 0xfb, 0x03, 0x48, 0x21, 0x6a, 0x00, 0xf0, + 0x4f, 0xf9, 0x10, 0xbd, 0x1c, 0x75, 0x01, 0x00, + 0x34, 0x63, 0x01, 0x00, 0xb0, 0xb5, 0x0d, 0x4c, + 0x20, 0x7c, 0x00, 0x28, 0x02, 0xd0, 0x01, 0x21, + 0x3c, 0x00, 0xf0, 0xf0, 0x00, 0x00, 0xfd, 0xf7, + 0x86, 0xf9, 0x00, 0x25, 0x25, 0x70, 0xa0, 0x68, + 0x01, 0x28, 0x03, 0xd1, 0x00, 0x20, 0xa5, 0x60, + 0x01, 0xf0, 0x8f, 0xf8, 0xa0, 0x78, 0x01, 0x28, + 0x05, 0xd1, 0x03, 0x48, 0x98, 0x38, 0x00, 0x69, + 0xfc, 0xf7, 0xef, 0xfb, 0xa5, 0x70, 0xb0, 0xbd, + 0x00, 0x00, 0x84, 0x66, 0x01, 0x00, 0x80, 0xb5, + 0x00, 0x21, 0x01, 0x20, 0x01, 0xf0, 0x09, 0xfe, + 0x80, 0xbd, 0x3c, 0x00, 0x2c, 0xf1, 0x00, 0x00, + 0x38, 0xb5, 0x69, 0x46, 0x00, 0x25, 0xf8, 0xf7, + 0xb7, 0xfe, 0x04, 0x1c, 0x01, 0xd1, 0x01, 0x20, + 0x38, 0xbd, 0xa0, 0x68, 0x00, 0x28, 0x04, 0xd0, + 0x00, 0x99, 0xa1, 0x31, 0x08, 0x20, 0x04, 0xf0, + 0x73, 0xfa, 0x1c, 0x21, 0x20, 0x1c, 0xf1, 0xf7, + 0xa3, 0xf9, 0x28, 0x1c, 0xf0, 0xe7, 0x00, 0x00, + 0xfe, 0xb5, 0x07, 0x1c, 0x4c, 0x23, 0x39, 0x49, + 0x58, 0x43, 0x44, 0x18, 0x3c, 0x00, 0x68, 0xf1, + 0x00, 0x00, 0x25, 0x1c, 0x40, 0x35, 0x28, 0x7a, + 0x37, 0x49, 0x48, 0x76, 0x21, 0x1c, 0x30, 0x31, + 0x02, 0x91, 0x0c, 0x23, 0xc8, 0x56, 0x42, 0x1c, + 0x0a, 0x73, 0x49, 0x7b, 0x88, 0x42, 0x46, 0xda, + 0x32, 0x48, 0x00, 0x78, 0x80, 0x07, 0x3e, 0xd5, + 0x00, 0x20, 0x01, 0x90, 0xf6, 0xf7, 0xaf, 0xfa, + 0x00, 0x28, 0x2e, 0xd0, 0xac, 0x21, 0x09, 0x58, + 0x00, 0x29, 0x01, 0xd0, 0xe4, 0x30, 0x3c, 0x00, + 0xa4, 0xf1, 0x00, 0x00, 0x00, 0xe0, 0xcc, 0x30, + 0x06, 0x1c, 0x40, 0x68, 0x00, 0x28, 0x25, 0xd0, + 0x02, 0x99, 0x08, 0x7b, 0x01, 0x28, 0x11, 0xd1, + 0x20, 0x1c, 0x2e, 0x30, 0x29, 0x78, 0xf6, 0xf7, + 0xed, 0xf9, 0x71, 0x68, 0x03, 0xe0, 0x72, 0x18, + 0x12, 0x7a, 0x82, 0x42, 0x03, 0xd9, 0xff, 0x31, + 0x09, 0x06, 0x09, 0x0e, 0xf7, 0xd1, 0xa9, 0x70, + 0x01, 0x20, 0x01, 0x90, 0x23, 0x1c, 0x3e, 0x33, + 0x3c, 0x00, 0xe0, 0xf1, 0x00, 0x00, 0x1a, 0x1d, + 0x30, 0x1c, 0x00, 0x97, 0x01, 0x99, 0xf8, 0xf7, + 0x58, 0xfa, 0x00, 0x28, 0x11, 0xd0, 0xa8, 0x78, + 0x80, 0x19, 0x00, 0x7a, 0x00, 0xe0, 0x00, 0x20, + 0x68, 0x70, 0x68, 0x78, 0x01, 0x21, 0xfb, 0xf7, + 0xe0, 0xfd, 0x60, 0x60, 0x38, 0x1c, 0x01, 0xf0, + 0x14, 0xfe, 0x38, 0x1c, 0x01, 0xf0, 0xa5, 0xfb, + 0xfe, 0xbd, 0x02, 0x99, 0x08, 0x7b, 0xff, 0x30, + 0x48, 0x73, 0x3c, 0x00, 0x1c, 0xf2, 0x00, 0x00, + 0x38, 0x1c, 0xfc, 0xf7, 0x19, 0xfc, 0x03, 0xf0, + 0xc3, 0xfd, 0x06, 0x1c, 0xfb, 0xf7, 0x8e, 0xfe, + 0x41, 0x00, 0x76, 0x18, 0x68, 0x78, 0x61, 0x68, + 0xfb, 0xf7, 0x6a, 0xfe, 0x31, 0x18, 0x20, 0x8d, + 0x3b, 0x1c, 0x05, 0x4a, 0x03, 0xf0, 0x12, 0xfe, + 0xe5, 0xe7, 0x00, 0x00, 0x58, 0xe3, 0x01, 0x00, + 0x30, 0x80, 0x07, 0x00, 0x1d, 0x75, 0x01, 0x00, + 0xd5, 0x4e, 0x00, 0x00, 0x3c, 0x00, 0x58, 0xf2, + 0x00, 0x00, 0x03, 0x1c, 0x04, 0x48, 0x80, 0xb5, + 0x02, 0x79, 0x20, 0x30, 0x03, 0x49, 0x00, 0xf0, + 0x30, 0xf8, 0x80, 0xbd, 0x00, 0x00, 0xac, 0x7c, + 0x01, 0x00, 0xc4, 0x67, 0x01, 0x00, 0x03, 0x1c, + 0x04, 0x48, 0x80, 0xb5, 0xc2, 0x78, 0x38, 0x30, + 0x03, 0x49, 0x00, 0xf0, 0x22, 0xf8, 0x80, 0xbd, + 0x00, 0x00, 0xac, 0x7c, 0x01, 0x00, 0xc8, 0x67, + 0x01, 0x00, 0x03, 0x1c, 0x04, 0x48, 0x3c, 0x00, + 0x94, 0xf2, 0x00, 0x00, 0x80, 0xb5, 0x82, 0x79, + 0x50, 0x30, 0x03, 0x49, 0x00, 0xf0, 0x14, 0xf8, + 0x80, 0xbd, 0x00, 0x00, 0xac, 0x7c, 0x01, 0x00, + 0xcc, 0x67, 0x01, 0x00, 0x03, 0x1c, 0x04, 0x48, + 0x80, 0xb5, 0x42, 0x79, 0x68, 0x30, 0x03, 0x49, + 0x00, 0xf0, 0x06, 0xf8, 0x80, 0xbd, 0x00, 0x00, + 0xac, 0x7c, 0x01, 0x00, 0xd0, 0x67, 0x01, 0x00, + 0x10, 0xb5, 0x00, 0x24, 0x84, 0x80, 0x0b, 0x60, + 0x3c, 0x00, 0xd0, 0xf2, 0x00, 0x00, 0x19, 0x1c, + 0x51, 0x43, 0x01, 0x60, 0x19, 0x06, 0x09, 0x16, + 0x10, 0x22, 0x06, 0x30, 0xf1, 0xf7, 0x9f, 0xf9, + 0x10, 0xbd, 0xb0, 0xb5, 0x06, 0x4d, 0x00, 0x24, + 0xac, 0x60, 0xec, 0x60, 0xec, 0x61, 0x2c, 0x62, + 0x02, 0xf0, 0xf1, 0xfc, 0x00, 0xf0, 0x0d, 0xf8, + 0xec, 0x62, 0x2c, 0x70, 0xb0, 0xbd, 0x44, 0x7d, + 0x01, 0x00, 0x80, 0xb5, 0x80, 0x21, 0x01, 0x48, + 0xf1, 0xf7, 0x3c, 0x00, 0x0c, 0xf3, 0x00, 0x00, + 0xc7, 0xf8, 0x80, 0xbd, 0x04, 0x66, 0x01, 0x00, + 0xf8, 0xb5, 0x07, 0x4f, 0x00, 0x24, 0x00, 0x26, + 0x18, 0x20, 0x60, 0x43, 0xc5, 0x19, 0xee, 0x60, + 0x03, 0xf0, 0x42, 0xfd, 0x10, 0x35, 0x01, 0x34, + 0x02, 0x2c, 0x41, 0xc5, 0xf4, 0xdb, 0xf8, 0xbd, + 0xb8, 0x7d, 0x01, 0x00, 0x00, 0x23, 0x03, 0x60, + 0x04, 0x4b, 0x00, 0x29, 0x00, 0xd1, 0x19, 0x1c, + 0x41, 0x60, 0x00, 0x2a, 0x3c, 0x00, 0x48, 0xf3, + 0x00, 0x00, 0x00, 0xd1, 0x1a, 0x1c, 0x82, 0x60, + 0x70, 0x47, 0xbd, 0x75, 0x00, 0x00, 0x10, 0xb5, + 0x07, 0x4c, 0x20, 0x68, 0x01, 0x30, 0x20, 0x60, + 0x20, 0x28, 0x03, 0xd9, 0x58, 0x21, 0x58, 0x20, + 0xf1, 0xf7, 0x9d, 0xff, 0x21, 0x68, 0x01, 0x20, + 0x01, 0x39, 0x88, 0x40, 0x10, 0xbd, 0x60, 0x5b, + 0x01, 0x00, 0xb0, 0xb5, 0x0d, 0x1c, 0x04, 0x1c, + 0x21, 0x68, 0x00, 0x20, 0x00, 0x29, 0x3c, 0x00, + 0x84, 0xf3, 0x00, 0x00, 0x0a, 0xd0, 0xa9, 0x43, + 0x21, 0x60, 0x07, 0xd1, 0xa0, 0x68, 0xf1, 0xf7, + 0x23, 0xf8, 0x00, 0x28, 0x02, 0xd1, 0x21, 0x68, + 0x29, 0x43, 0x21, 0x60, 0xb0, 0xbd, 0x00, 0x00, + 0xb0, 0xb5, 0x0d, 0x1c, 0x04, 0x1c, 0x21, 0x68, + 0x00, 0x20, 0x29, 0x43, 0x21, 0x60, 0xa9, 0x42, + 0x07, 0xd1, 0x60, 0x68, 0xf1, 0xf7, 0x10, 0xf8, + 0x00, 0x28, 0x02, 0xd1, 0x21, 0x68, 0xa9, 0x43, + 0x3c, 0x00, 0xc0, 0xf3, 0x00, 0x00, 0x21, 0x60, + 0xb0, 0xbd, 0x1a, 0x4b, 0xb0, 0xb5, 0x9a, 0x6a, + 0x00, 0x28, 0x0b, 0xd0, 0x00, 0x2a, 0x07, 0xdb, + 0xb8, 0x24, 0x24, 0x58, 0x01, 0x3c, 0xa4, 0x1a, + 0x00, 0x19, 0xb0, 0x30, 0x00, 0x7b, 0x02, 0xe0, + 0x0e, 0x20, 0x00, 0xe0, 0x0d, 0x20, 0x5d, 0x6a, + 0x12, 0x4c, 0x00, 0x2d, 0x01, 0xd0, 0x20, 0x78, + 0x00, 0xe0, 0x20, 0x5c, 0xff, 0x24, 0xa8, 0x34, + 0xc4, 0x40, 0x3c, 0x00, 0xfc, 0xf3, 0x00, 0x00, + 0x9c, 0x60, 0xf5, 0x24, 0xc4, 0x40, 0x9c, 0x61, + 0xfd, 0x24, 0xc4, 0x40, 0xdc, 0x61, 0xff, 0x24, + 0x29, 0x34, 0xc4, 0x40, 0x5c, 0x61, 0xff, 0x24, + 0x53, 0x34, 0xc4, 0x40, 0x00, 0x20, 0x0c, 0x33, + 0x11, 0xc3, 0x00, 0x29, 0x05, 0xd0, 0x00, 0x2a, + 0x03, 0xdc, 0x02, 0x21, 0x50, 0x42, 0x00, 0xf0, + 0x65, 0xfb, 0xb0, 0xbd, 0xac, 0x7e, 0x01, 0x00, + 0xb8, 0x52, 0x01, 0x00, 0x3c, 0x00, 0x38, 0xf4, + 0x00, 0x00, 0x10, 0xb5, 0x13, 0x4c, 0x13, 0x48, + 0x21, 0x1c, 0xff, 0x31, 0x69, 0x31, 0x0e, 0xc9, + 0x0e, 0xc0, 0x21, 0x1c, 0xff, 0x31, 0x24, 0x22, + 0x75, 0x31, 0x0f, 0x48, 0xf1, 0xf7, 0x51, 0xf8, + 0x21, 0x1c, 0xff, 0x31, 0x3c, 0x22, 0x99, 0x31, + 0x0d, 0x48, 0xf1, 0xf7, 0xa6, 0xf8, 0xfc, 0xf7, + 0xa2, 0xff, 0x21, 0x1c, 0xff, 0x31, 0x10, 0x22, + 0xd5, 0x31, 0x09, 0x48, 0xf1, 0xf7, 0x3c, 0x00, + 0x74, 0xf4, 0x00, 0x00, 0x41, 0xf8, 0x21, 0x1c, + 0xff, 0x31, 0x28, 0x22, 0xe5, 0x31, 0x07, 0x48, + 0xf1, 0xf7, 0x96, 0xf8, 0x10, 0xbd, 0x00, 0x00, + 0x40, 0x63, 0x01, 0x00, 0x00, 0x80, 0x07, 0x00, + 0x0c, 0x80, 0x07, 0x00, 0x30, 0x80, 0x07, 0x00, + 0x80, 0x80, 0x07, 0x00, 0xa0, 0x80, 0x07, 0x00, + 0xf8, 0xb5, 0x00, 0x28, 0x59, 0xd0, 0x04, 0xf0, + 0x4b, 0xf9, 0xf8, 0xf7, 0xb3, 0xfb, 0x00, 0x22, + 0x3c, 0x00, 0xb0, 0xf4, 0x00, 0x00, 0x01, 0x21, + 0x13, 0x20, 0x04, 0xf0, 0x7c, 0xf9, 0x2a, 0x49, + 0x29, 0x48, 0x49, 0x6c, 0x01, 0x60, 0x00, 0x21, + 0x29, 0x48, 0xc9, 0x43, 0x41, 0x60, 0x26, 0x4c, + 0x14, 0x34, 0x61, 0x6c, 0x81, 0x60, 0xa1, 0x6c, + 0xc1, 0x60, 0x00, 0x20, 0x25, 0x4d, 0x02, 0x26, + 0x01, 0x01, 0x6e, 0x50, 0x0a, 0x19, 0x4f, 0x19, + 0x50, 0x32, 0x04, 0x37, 0x0e, 0xca, 0x01, 0x30, + 0x08, 0x28, 0x3c, 0x00, 0xec, 0xf4, 0x00, 0x00, + 0x0e, 0xc7, 0xf4, 0xdb, 0x14, 0x22, 0x21, 0x1c, + 0xcc, 0x31, 0x1e, 0x48, 0xf1, 0xf7, 0x5a, 0xf8, + 0x1d, 0x48, 0x81, 0x78, 0x09, 0x09, 0x09, 0x01, + 0x81, 0x70, 0x00, 0x21, 0xc1, 0x70, 0x41, 0x70, + 0x21, 0x1c, 0xe0, 0x31, 0x0a, 0x78, 0x02, 0x70, + 0x49, 0x78, 0x41, 0x70, 0x21, 0x1c, 0xe8, 0x31, + 0x30, 0x22, 0x08, 0x30, 0xf1, 0xf7, 0x46, 0xf8, + 0x21, 0x1c, 0xff, 0x31, 0x3c, 0x00, 0x28, 0xf5, + 0x00, 0x00, 0x50, 0x22, 0x19, 0x31, 0x12, 0x48, + 0xf1, 0xf7, 0x3f, 0xf8, 0x83, 0x20, 0x80, 0x00, + 0x14, 0x22, 0x21, 0x18, 0x10, 0x48, 0xf1, 0xf7, + 0x38, 0xf8, 0x11, 0x20, 0x40, 0x01, 0x84, 0x22, + 0x21, 0x18, 0x0d, 0x48, 0xf1, 0xf7, 0x31, 0xf8, + 0xff, 0xf7, 0x73, 0xff, 0x20, 0x1c, 0xf1, 0xf7, + 0x28, 0xfd, 0xf8, 0xbd, 0xff, 0xf7, 0x6d, 0xff, + 0xfb, 0xe7, 0x08, 0x20, 0x07, 0x00, 0x3c, 0x00, + 0x64, 0xf5, 0x00, 0x00, 0x2c, 0x63, 0x01, 0x00, + 0x40, 0x20, 0x07, 0x00, 0x00, 0x30, 0x07, 0x00, + 0x00, 0x40, 0x07, 0x00, 0x00, 0x50, 0x07, 0x00, + 0x00, 0x60, 0x07, 0x00, 0x10, 0x00, 0x07, 0x00, + 0x00, 0x90, 0x07, 0x00, 0xf8, 0xb5, 0x05, 0x1c, + 0x18, 0x48, 0xc0, 0x68, 0x00, 0x28, 0x25, 0xd0, + 0x16, 0x4e, 0x01, 0x36, 0x74, 0x78, 0x30, 0x78, + 0x27, 0x1a, 0x79, 0x19, 0x20, 0x1c, 0xf1, 0xf7, + 0x3c, 0x00, 0xa0, 0xf5, 0x00, 0x00, 0x4b, 0xf8, + 0x00, 0x90, 0x29, 0x1c, 0x20, 0x1c, 0xf1, 0xf7, + 0xb2, 0xf8, 0xc1, 0x19, 0x20, 0x1c, 0xf1, 0xf7, + 0x42, 0xf8, 0x60, 0x1a, 0x30, 0x70, 0x70, 0x1e, + 0x80, 0x68, 0x00, 0x28, 0x0d, 0xd0, 0x53, 0x36, + 0xf4, 0x78, 0x00, 0x99, 0x20, 0x1c, 0xf1, 0xf7, + 0xa2, 0xf8, 0xb1, 0x78, 0x61, 0x1a, 0x41, 0x18, + 0x20, 0x1c, 0xf1, 0xf7, 0x9c, 0xf8, 0x60, 0x1a, + 0xb0, 0x70, 0x3c, 0x00, 0xdc, 0xf5, 0x00, 0x00, + 0x03, 0x48, 0x5c, 0x30, 0x01, 0x69, 0xc2, 0x68, + 0x69, 0x43, 0x51, 0x18, 0xc1, 0x60, 0xf8, 0xbd, + 0x44, 0x7d, 0x01, 0x00, 0xb0, 0xb5, 0x0c, 0x4d, + 0xe8, 0x68, 0x29, 0x69, 0x40, 0x18, 0x7d, 0x21, + 0x09, 0x01, 0x44, 0x18, 0x20, 0x1c, 0x03, 0xf0, + 0x0b, 0xfb, 0x00, 0x28, 0x0a, 0xd0, 0x03, 0xf0, + 0xcf, 0xfb, 0x01, 0x1b, 0x28, 0x69, 0xf1, 0xf7, + 0x7d, 0xf8, 0x01, 0x30, 0x3c, 0x00, 0x18, 0xf6, + 0x00, 0x00, 0x00, 0x04, 0x00, 0x0c, 0xff, 0xf7, + 0xb2, 0xff, 0xb0, 0xbd, 0x00, 0x00, 0xa0, 0x7d, + 0x01, 0x00, 0x70, 0xb5, 0x10, 0x4c, 0x60, 0x68, + 0x80, 0x25, 0xa8, 0x43, 0x60, 0x60, 0x20, 0x68, + 0x28, 0x43, 0x20, 0x60, 0x0d, 0x4e, 0x30, 0x1c, + 0x10, 0x30, 0xf3, 0xf7, 0xc8, 0xfc, 0x00, 0x28, + 0x03, 0xd1, 0x07, 0x21, 0x85, 0x20, 0xf1, 0xf7, + 0x2a, 0xfe, 0x08, 0x48, 0x00, 0x21, 0x3c, 0x00, + 0x54, 0xf6, 0x00, 0x00, 0x80, 0x68, 0x41, 0x63, + 0xc0, 0x6c, 0x10, 0x30, 0x70, 0x61, 0x01, 0x20, + 0x30, 0x61, 0x20, 0x68, 0xa8, 0x43, 0x20, 0x60, + 0x70, 0xbd, 0x00, 0x00, 0xf4, 0x00, 0x07, 0x00, + 0x00, 0x30, 0x07, 0x00, 0x24, 0x7e, 0x01, 0x00, + 0x01, 0x1c, 0x00, 0x20, 0x05, 0x29, 0x80, 0xb5, + 0x09, 0xd2, 0x02, 0xa3, 0x5b, 0x5c, 0x5b, 0x00, + 0x9f, 0x44, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, + 0x3c, 0x00, 0x90, 0xf6, 0x00, 0x00, 0x03, 0x00, + 0xff, 0xf7, 0xcf, 0xfc, 0x80, 0xbd, 0x01, 0x22, + 0x92, 0x02, 0x80, 0xb5, 0x00, 0x21, 0x07, 0x20, + 0x04, 0xf0, 0xab, 0xf9, 0x80, 0xbd, 0x80, 0xb5, + 0x40, 0x22, 0x00, 0x21, 0x00, 0x20, 0x04, 0xf0, + 0xa4, 0xf9, 0x03, 0x22, 0x00, 0x21, 0x00, 0x20, + 0x04, 0xf0, 0x9f, 0xf9, 0x80, 0xbd, 0x70, 0xb5, + 0x0e, 0x1c, 0x05, 0x1c, 0x14, 0x1c, 0x08, 0x28, + 0x0e, 0xd1, 0x3c, 0x00, 0xcc, 0xf6, 0x00, 0x00, + 0x00, 0xf0, 0x00, 0xfc, 0x0e, 0x28, 0x01, 0xd1, + 0x14, 0x20, 0x00, 0xe0, 0x10, 0x20, 0xe1, 0x03, + 0x00, 0xd5, 0x01, 0x38, 0xc0, 0x06, 0x0a, 0x49, + 0xc0, 0x0e, 0x88, 0x71, 0x08, 0xe0, 0x09, 0x2d, + 0x06, 0xd1, 0xa0, 0x04, 0x01, 0xd5, 0x00, 0x20, + 0x00, 0xe0, 0x01, 0x20, 0xf3, 0xf7, 0xb0, 0xf9, + 0x34, 0x40, 0x21, 0x1c, 0x32, 0x1c, 0x28, 0x1c, + 0x04, 0xf0, 0x7a, 0xf9, 0x3c, 0x00, 0x08, 0xf7, + 0x00, 0x00, 0x70, 0xbd, 0x00, 0x00, 0x00, 0x80, + 0x07, 0x00, 0x70, 0xb5, 0x00, 0x24, 0x13, 0x29, + 0x11, 0xd8, 0x00, 0x28, 0x01, 0xd1, 0x08, 0x4e, + 0x08, 0x25, 0x01, 0x28, 0x01, 0xd1, 0x07, 0x4e, + 0x09, 0x25, 0x00, 0xf0, 0x78, 0xfa, 0x00, 0x28, + 0x05, 0xd0, 0x02, 0x1c, 0x31, 0x1c, 0x28, 0x1c, + 0xff, 0xf7, 0xc3, 0xff, 0x01, 0x24, 0x20, 0x1c, + 0x70, 0xbd, 0xf8, 0xff, 0x07, 0x00, 0x3c, 0x00, + 0x44, 0xf7, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, + 0x01, 0x22, 0xd2, 0x02, 0x80, 0xb5, 0x00, 0x21, + 0x07, 0x20, 0x04, 0xf0, 0x53, 0xf9, 0x80, 0xbd, + 0x0f, 0x22, 0x12, 0x04, 0x07, 0x21, 0x49, 0x04, + 0x80, 0xb5, 0x09, 0x20, 0x04, 0xf0, 0x4a, 0xf9, + 0x80, 0xbd, 0x00, 0x00, 0x80, 0xb5, 0x00, 0x21, + 0x04, 0x20, 0x04, 0xf0, 0x1b, 0xfc, 0x40, 0x21, + 0x00, 0x20, 0x04, 0xf0, 0x17, 0xfc, 0x04, 0x49, + 0x3c, 0x00, 0x80, 0xf7, 0x00, 0x00, 0x00, 0x20, + 0x88, 0x60, 0x02, 0x48, 0x09, 0x69, 0x20, 0x30, + 0xff, 0xf7, 0x09, 0xfe, 0x80, 0xbd, 0x64, 0x73, + 0x01, 0x00, 0xb0, 0xb5, 0x60, 0x21, 0x00, 0x20, + 0x04, 0xf0, 0x07, 0xfc, 0x11, 0x4d, 0x00, 0x24, + 0x00, 0x22, 0x04, 0x20, 0x29, 0x5d, 0x04, 0xf0, + 0x28, 0xf9, 0x0c, 0x20, 0x03, 0xf0, 0x9b, 0xfb, + 0x01, 0x34, 0x24, 0x06, 0x24, 0x0e, 0x05, 0x2c, + 0xf2, 0xd3, 0x3c, 0x00, 0xbc, 0xf7, 0x00, 0x00, + 0x0f, 0x22, 0x00, 0x21, 0x0a, 0x20, 0x04, 0xf0, + 0x1b, 0xf9, 0x61, 0x21, 0x00, 0x20, 0x04, 0xf0, + 0xef, 0xfb, 0x06, 0x49, 0x01, 0x20, 0x88, 0x60, + 0x04, 0x48, 0x09, 0x69, 0x20, 0x30, 0xff, 0xf7, + 0xcd, 0xfd, 0xff, 0x20, 0x2d, 0x30, 0xb0, 0xbd, + 0xa8, 0x58, 0x01, 0x00, 0x64, 0x73, 0x01, 0x00, + 0xf8, 0xb5, 0x06, 0x1c, 0x12, 0x48, 0xc6, 0x70, + 0x01, 0x20, 0xff, 0xf7, 0x3c, 0x00, 0xf8, 0xf7, + 0x00, 0x00, 0xfd, 0xfb, 0x01, 0x27, 0xbf, 0x02, + 0x04, 0x1c, 0xb8, 0x43, 0x01, 0x1c, 0x01, 0x20, + 0x04, 0xf0, 0xd1, 0xfb, 0x03, 0x20, 0xff, 0xf7, + 0xf2, 0xfb, 0x05, 0x1c, 0xb8, 0x43, 0x01, 0x1c, + 0x03, 0x20, 0x04, 0xf0, 0xc8, 0xfb, 0x30, 0x1c, + 0x00, 0xf0, 0x9f, 0xf9, 0x00, 0xf0, 0x57, 0xf8, + 0x21, 0x1c, 0x01, 0x20, 0x04, 0xf0, 0xbf, 0xfb, + 0x29, 0x1c, 0x03, 0x20, 0x04, 0xf0, 0x3c, 0x00, + 0x34, 0xf8, 0x00, 0x00, 0xbb, 0xfb, 0x00, 0x20, + 0xf8, 0xbd, 0x00, 0x00, 0x64, 0x73, 0x01, 0x00, + 0x80, 0xb5, 0x00, 0x22, 0x40, 0x21, 0x00, 0x20, + 0x04, 0xf0, 0xd8, 0xf8, 0x80, 0xbd, 0x00, 0x00, + 0x70, 0xb5, 0x05, 0x1c, 0x01, 0x24, 0x09, 0x20, + 0xff, 0xf7, 0xcc, 0xfb, 0x0f, 0x21, 0x09, 0x04, + 0x88, 0x43, 0x03, 0x21, 0x89, 0x04, 0xe2, 0x04, + 0x05, 0x2d, 0x12, 0x4e, 0x20, 0xd2, 0x02, 0xa3, + 0x3c, 0x00, 0x70, 0xf8, 0x00, 0x00, 0x5b, 0x5d, + 0x5b, 0x00, 0x9f, 0x44, 0x00, 0x00, 0x06, 0x09, + 0x0c, 0x10, 0x03, 0x00, 0x03, 0x21, 0x09, 0x04, + 0x0c, 0xe0, 0x01, 0x21, 0x09, 0x04, 0x09, 0xe0, + 0x01, 0x21, 0x49, 0x04, 0x06, 0xe0, 0xf3, 0x68, + 0x04, 0x2b, 0x05, 0xd9, 0x02, 0xe0, 0xf3, 0x68, + 0x04, 0x2b, 0x01, 0xd8, 0x01, 0x43, 0x01, 0xe0, + 0x10, 0x43, 0x01, 0x1c, 0x09, 0x20, 0x04, 0xf0, + 0x80, 0xfb, 0x3c, 0x00, 0xac, 0xf8, 0x00, 0x00, + 0x20, 0x1c, 0x70, 0xbd, 0x00, 0x24, 0xfb, 0xe7, + 0x64, 0x73, 0x01, 0x00, 0x01, 0x21, 0xc9, 0x05, + 0x00, 0x28, 0x80, 0xb5, 0x02, 0xd0, 0x0a, 0x1c, + 0x00, 0x21, 0x00, 0xe0, 0x00, 0x22, 0x04, 0x20, + 0x04, 0xf0, 0x96, 0xf8, 0x80, 0xbd, 0x00, 0x00, + 0xf0, 0xb5, 0x91, 0xb0, 0x00, 0x26, 0x40, 0x21, + 0x01, 0xa8, 0xf0, 0xf7, 0xdd, 0xfd, 0x2a, 0x4f, + 0xb8, 0x79, 0x01, 0x22, 0x3c, 0x00, 0xe8, 0xf8, + 0x00, 0x00, 0x52, 0x03, 0x00, 0x90, 0x00, 0x21, + 0x06, 0x20, 0x04, 0xf0, 0x84, 0xf8, 0x60, 0x21, + 0x00, 0x20, 0x04, 0xf0, 0x58, 0xfb, 0x61, 0x21, + 0x00, 0x20, 0x04, 0xf0, 0x54, 0xfb, 0x08, 0x20, + 0x03, 0xf0, 0xef, 0xfa, 0x00, 0x24, 0x0f, 0x20, + 0xff, 0xf7, 0x71, 0xfb, 0x40, 0x05, 0x05, 0x0f, + 0xa8, 0x00, 0x01, 0xa9, 0x09, 0x58, 0x01, 0xaa, + 0x01, 0x31, 0x01, 0x34, 0x0c, 0x2c, 0x3c, 0x00, + 0x24, 0xf9, 0x00, 0x00, 0x11, 0x50, 0xf1, 0xd3, + 0x00, 0x20, 0x81, 0x00, 0x01, 0xaa, 0x51, 0x58, + 0xb1, 0x42, 0x01, 0xd9, 0x0e, 0x1c, 0x05, 0x1c, + 0x01, 0x30, 0x10, 0x28, 0xf5, 0xd3, 0x06, 0x20, + 0xff, 0xf7, 0x58, 0xfb, 0x0f, 0x21, 0x49, 0x02, + 0x88, 0x43, 0x69, 0x02, 0x08, 0x43, 0x01, 0x21, + 0x49, 0x03, 0x01, 0x43, 0x06, 0x20, 0x04, 0xf0, + 0x29, 0xfb, 0x0d, 0x48, 0x84, 0x68, 0x64, 0x34, + 0x3c, 0x00, 0x60, 0xf9, 0x00, 0x00, 0x08, 0xe0, + 0x20, 0x1c, 0x03, 0xf0, 0x5a, 0xf9, 0x00, 0x28, + 0x03, 0xd0, 0x01, 0x21, 0x95, 0x20, 0xf1, 0xf7, + 0x98, 0xfc, 0x0f, 0x20, 0xff, 0xf7, 0x3d, 0xfb, + 0x00, 0x04, 0xf1, 0xd5, 0x87, 0x20, 0x03, 0xf0, + 0xb2, 0xfa, 0x00, 0x98, 0xb8, 0x71, 0x11, 0xb0, + 0xf0, 0xbd, 0x20, 0x10, 0x07, 0x00, 0x00, 0x01, + 0x07, 0x00, 0x10, 0xb5, 0x17, 0x4c, 0x61, 0x69, + 0x00, 0x29, 0x3c, 0x00, 0x9c, 0xf9, 0x00, 0x00, + 0x04, 0xd0, 0x0a, 0x21, 0x13, 0x20, 0x03, 0xf0, + 0x47, 0xfe, 0x10, 0xbd, 0x01, 0x1c, 0x12, 0x48, + 0x01, 0x29, 0x00, 0x78, 0x0c, 0xd0, 0x11, 0x29, + 0xf7, 0xd1, 0x05, 0x28, 0x03, 0xd1, 0x01, 0x21, + 0x13, 0x20, 0xf1, 0xf7, 0x71, 0xfc, 0x20, 0x78, + 0x07, 0x28, 0xee, 0xd1, 0x02, 0x21, 0x0a, 0xe0, + 0x05, 0x28, 0x07, 0xd0, 0x06, 0x28, 0x0a, 0xd0, + 0x07, 0x28, 0xf7, 0xd0, 0x3c, 0x00, 0xd8, 0xf9, + 0x00, 0x00, 0x08, 0x28, 0xe4, 0xd1, 0x00, 0x20, + 0x05, 0xe0, 0x01, 0x21, 0x13, 0x20, 0xf1, 0xf7, + 0x5e, 0xfc, 0x10, 0xbd, 0x01, 0x20, 0x02, 0xf0, + 0x6c, 0xfd, 0x10, 0xbd, 0x00, 0x00, 0x7c, 0x78, + 0x01, 0x00, 0x0d, 0x49, 0x80, 0xb5, 0x09, 0x78, + 0x03, 0x29, 0x01, 0xd1, 0x00, 0x28, 0x0b, 0xd0, + 0x07, 0x29, 0x01, 0xd1, 0x00, 0x28, 0x07, 0xd0, + 0x02, 0x29, 0x01, 0xd1, 0x00, 0x28, 0x3c, 0x00, + 0x14, 0xfa, 0x00, 0x00, 0x03, 0xd1, 0x05, 0x29, + 0x09, 0xd1, 0x00, 0x28, 0x07, 0xd0, 0x00, 0x20, + 0xfc, 0xf7, 0x28, 0xfd, 0x00, 0x22, 0x13, 0x21, + 0x11, 0x20, 0x03, 0xf0, 0xc1, 0xfe, 0x80, 0xbd, + 0x7c, 0x78, 0x01, 0x00, 0x80, 0xb5, 0x06, 0x22, + 0x08, 0x21, 0x00, 0x20, 0x03, 0xf0, 0xde, 0xff, + 0x80, 0xbd, 0x00, 0x00, 0x07, 0x48, 0x80, 0xb5, + 0x40, 0x69, 0x00, 0x28, 0x01, 0xd1, 0xf1, 0xf7, + 0x3c, 0x00, 0x50, 0xfa, 0x00, 0x00, 0x33, 0xff, + 0x05, 0x49, 0x05, 0x4a, 0x08, 0x68, 0x50, 0x61, + 0x48, 0x68, 0x90, 0x61, 0x01, 0x20, 0x80, 0xbd, + 0x00, 0x00, 0x64, 0x73, 0x01, 0x00, 0xb0, 0x58, + 0x01, 0x00, 0x10, 0x00, 0x07, 0x00, 0x07, 0x48, + 0x80, 0xb5, 0x40, 0x69, 0x00, 0x28, 0x01, 0xd1, + 0xf1, 0xf7, 0x1d, 0xff, 0x05, 0x49, 0x05, 0x4a, + 0x08, 0x68, 0x90, 0x61, 0x48, 0x68, 0x50, 0x61, + 0x01, 0x20, 0x3c, 0x00, 0x8c, 0xfa, 0x00, 0x00, + 0x80, 0xbd, 0x00, 0x00, 0x64, 0x73, 0x01, 0x00, + 0xb0, 0x58, 0x01, 0x00, 0x10, 0x00, 0x07, 0x00, + 0x11, 0xb5, 0x00, 0xab, 0x59, 0x78, 0x14, 0x48, + 0x01, 0x23, 0xc0, 0x56, 0x00, 0x22, 0x09, 0x18, + 0x0b, 0x06, 0x1b, 0x16, 0x13, 0x21, 0x13, 0x2b, + 0x02, 0xdd, 0x00, 0xab, 0x59, 0x70, 0x07, 0xe0, + 0x00, 0x2b, 0x02, 0xda, 0x00, 0xab, 0x5a, 0x70, + 0x02, 0xe0, 0x1c, 0x1c, 0x3c, 0x00, 0xc8, 0xfa, + 0x00, 0x00, 0x00, 0xab, 0x5c, 0x70, 0x00, 0xab, + 0x1b, 0x78, 0x18, 0x18, 0x00, 0x06, 0x00, 0x16, + 0x13, 0x28, 0x02, 0xdd, 0x00, 0xab, 0x19, 0x70, + 0x06, 0xe0, 0x00, 0x28, 0x02, 0xda, 0x00, 0xab, + 0x1a, 0x70, 0x01, 0xe0, 0x00, 0xab, 0x18, 0x70, + 0x00, 0x98, 0x18, 0xbd, 0x00, 0x00, 0x64, 0x73, + 0x01, 0x00, 0x38, 0xb5, 0x0c, 0x1c, 0x15, 0x49, + 0x00, 0xab, 0x49, 0x68, 0x13, 0x25, 0x3c, 0x00, + 0x04, 0xfb, 0x00, 0x00, 0x00, 0x91, 0x59, 0x78, + 0x09, 0x18, 0x59, 0x70, 0x19, 0x78, 0x08, 0x18, + 0x18, 0x70, 0x19, 0x88, 0x10, 0x48, 0x02, 0x2c, + 0xc1, 0x80, 0x01, 0xd0, 0x00, 0x2c, 0x0b, 0xd1, + 0x00, 0xab, 0x18, 0x78, 0x13, 0x28, 0x00, 0xd9, + 0x1d, 0x70, 0x00, 0xab, 0x19, 0x78, 0x00, 0x20, + 0xff, 0xf7, 0xee, 0xfd, 0x02, 0x2c, 0x01, 0xd0, + 0x01, 0x2c, 0x09, 0xd1, 0x00, 0xab, 0x58, 0x78, + 0x3c, 0x00, 0x40, 0xfb, 0x00, 0x00, 0x13, 0x28, + 0x00, 0xd9, 0x5d, 0x70, 0x00, 0xab, 0x59, 0x78, + 0x01, 0x20, 0xff, 0xf7, 0xe0, 0xfd, 0x38, 0xbd, + 0x00, 0x00, 0x64, 0x73, 0x01, 0x00, 0xa0, 0x58, + 0x01, 0x00, 0x70, 0x47, 0x00, 0x00, 0xb0, 0xb5, + 0x04, 0x1c, 0x0e, 0x28, 0x13, 0x4d, 0x04, 0xd0, + 0x12, 0x49, 0xa0, 0x00, 0x00, 0x19, 0x4d, 0x39, + 0x45, 0x18, 0x06, 0x20, 0xff, 0xf7, 0x3d, 0xfa, + 0x0f, 0x49, 0x3c, 0x00, 0x7c, 0xfb, 0x00, 0x00, + 0xe0, 0x22, 0x09, 0x19, 0x10, 0x39, 0xc9, 0x7b, + 0x90, 0x43, 0x49, 0x01, 0x11, 0x40, 0x01, 0x43, + 0x06, 0x20, 0x04, 0xf0, 0x0d, 0xfa, 0x29, 0x1c, + 0x05, 0x20, 0x09, 0x4a, 0x03, 0xf0, 0x30, 0xff, + 0x08, 0x48, 0x1f, 0x22, 0x00, 0x19, 0x10, 0x38, + 0xc0, 0x7b, 0xc1, 0x04, 0xd2, 0x04, 0x08, 0x20, + 0x03, 0xf0, 0x26, 0xff, 0xb0, 0xbd, 0x00, 0x00, + 0xb4, 0x09, 0x00, 0x00, 0x3c, 0x00, 0xb8, 0xfb, + 0x00, 0x00, 0x14, 0x45, 0x01, 0x00, 0xff, 0x0f, + 0x00, 0x00, 0xc0, 0x58, 0x01, 0x00, 0x70, 0x47, + 0x00, 0x00, 0x80, 0xb5, 0x06, 0x49, 0x00, 0x28, + 0x01, 0xd1, 0x08, 0x68, 0x80, 0xbd, 0x01, 0x28, + 0x01, 0xd1, 0x48, 0x68, 0x80, 0xbd, 0xf1, 0xf7, + 0x90, 0xfb, 0x00, 0x20, 0x80, 0xbd, 0x7c, 0x73, + 0x01, 0x00, 0x01, 0x48, 0x40, 0x68, 0x70, 0x47, + 0x00, 0x00, 0xa0, 0x58, 0x01, 0x00, 0x3c, 0x00, + 0xf4, 0xfb, 0x00, 0x00, 0x04, 0x48, 0x01, 0x23, + 0x04, 0x49, 0xc0, 0x56, 0xc9, 0x56, 0x40, 0x18, + 0x00, 0x04, 0x00, 0x0c, 0x70, 0x47, 0x00, 0x00, + 0xa0, 0x58, 0x01, 0x00, 0xa2, 0x58, 0x01, 0x00, + 0x01, 0x48, 0x40, 0x68, 0x70, 0x47, 0x00, 0x00, + 0x64, 0x73, 0x01, 0x00, 0xf8, 0xb5, 0x05, 0x1c, + 0x0e, 0x1c, 0x00, 0xf0, 0x55, 0xf9, 0x04, 0x1c, + 0x00, 0xf0, 0x58, 0xf9, 0x00, 0x28, 0x2c, 0xd0, + 0x3c, 0x00, 0x30, 0xfc, 0x00, 0x00, 0xb3, 0x00, + 0x60, 0x1e, 0x00, 0x2d, 0x1c, 0x4e, 0x19, 0x49, + 0x1a, 0x4a, 0x06, 0xd1, 0x0b, 0x25, 0x0e, 0x2c, + 0x00, 0xd1, 0x19, 0x4a, 0xd2, 0x58, 0x08, 0x56, + 0x08, 0xe0, 0x01, 0x2d, 0x1c, 0xd1, 0x9a, 0x18, + 0x04, 0x36, 0x08, 0x18, 0x08, 0x25, 0x0e, 0x23, + 0x12, 0x6d, 0xc0, 0x56, 0x07, 0x1c, 0x47, 0x43, + 0xfb, 0x00, 0xdf, 0x19, 0x12, 0x4b, 0x3f, 0x21, + 0x58, 0x43, 0x3c, 0x00, 0x6c, 0xfc, 0x00, 0x00, + 0x11, 0x4b, 0xa9, 0x40, 0x0c, 0x1c, 0x38, 0x18, + 0xc0, 0x18, 0x14, 0x40, 0xec, 0x40, 0xc0, 0x11, + 0x60, 0x43, 0x1b, 0x0a, 0xc0, 0x18, 0x80, 0x12, + 0x03, 0xd1, 0x01, 0x20, 0x04, 0xe0, 0x00, 0x20, + 0xf8, 0xbd, 0x3f, 0x28, 0x00, 0xdd, 0x3f, 0x20, + 0x30, 0x60, 0xa8, 0x40, 0x08, 0x40, 0x8a, 0x43, + 0x10, 0x43, 0xf5, 0xe7, 0xcc, 0x59, 0x01, 0x00, + 0xdc, 0x58, 0x01, 0x00, 0x3c, 0x00, 0xa8, 0xfc, + 0x00, 0x00, 0x7c, 0x73, 0x01, 0x00, 0x7c, 0x59, + 0x01, 0x00, 0x06, 0x06, 0x00, 0x00, 0x26, 0x00, + 0x02, 0x00, 0x03, 0x48, 0x08, 0xb5, 0xc0, 0x88, + 0x00, 0xab, 0x18, 0x80, 0x00, 0x98, 0x08, 0xbd, + 0x00, 0x00, 0xa0, 0x58, 0x01, 0x00, 0xb0, 0xb5, + 0x0b, 0x4d, 0x09, 0x4c, 0x0e, 0x20, 0x6c, 0x60, + 0xff, 0xf7, 0x8d, 0xf9, 0x09, 0x49, 0x02, 0x1c, + 0xc8, 0x60, 0x01, 0x06, 0x09, 0x0e, 0x3c, 0x00, + 0xe4, 0xfc, 0x00, 0x00, 0x13, 0x3a, 0x02, 0x2a, + 0x02, 0xd9, 0x17, 0x38, 0x04, 0x28, 0x00, 0xd8, + 0x00, 0x21, 0x08, 0x1c, 0x6c, 0x60, 0xb0, 0xbd, + 0x04, 0x18, 0x02, 0x00, 0x60, 0x00, 0x07, 0x00, + 0x64, 0x73, 0x01, 0x00, 0x0a, 0x48, 0x98, 0xb5, + 0x02, 0x78, 0x13, 0x21, 0x14, 0x2a, 0x00, 0xd3, + 0x01, 0x70, 0x42, 0x78, 0x14, 0x2a, 0x00, 0xd3, + 0x41, 0x70, 0x06, 0x4c, 0x60, 0x68, 0xff, 0xf7, + 0x3c, 0x00, 0x20, 0xfd, 0x00, 0x00, 0xbd, 0xfe, + 0x00, 0x90, 0x00, 0xab, 0x18, 0x88, 0xe0, 0x80, + 0x00, 0xf0, 0x75, 0xff, 0x98, 0xbd, 0xa4, 0x58, + 0x01, 0x00, 0xa0, 0x58, 0x01, 0x00, 0x03, 0x48, + 0x80, 0xb5, 0x41, 0x78, 0x01, 0x20, 0xff, 0xf7, + 0xe6, 0xfc, 0x80, 0xbd, 0x00, 0x00, 0xa6, 0x58, + 0x01, 0x00, 0x03, 0x48, 0x80, 0xb5, 0x01, 0x78, + 0x00, 0x20, 0xff, 0xf7, 0xdc, 0xfc, 0x80, 0xbd, + 0x00, 0x00, 0x3c, 0x00, 0x5c, 0xfd, 0x00, 0x00, + 0xa6, 0x58, 0x01, 0x00, 0xb0, 0xb5, 0x05, 0x4d, + 0x00, 0x24, 0x20, 0x1c, 0xff, 0xf7, 0x44, 0xf9, + 0x01, 0x34, 0x10, 0x2c, 0x01, 0xc5, 0xf8, 0xd3, + 0xb0, 0xbd, 0x00, 0x00, 0xd4, 0x44, 0x01, 0x00, + 0x04, 0x49, 0x80, 0xb5, 0x88, 0x70, 0x04, 0x49, + 0x80, 0x00, 0x09, 0x58, 0x07, 0x20, 0x04, 0xf0, + 0x0f, 0xf9, 0x80, 0xbd, 0x64, 0x73, 0x01, 0x00, + 0xd0, 0x58, 0x01, 0x00, 0x3c, 0x00, 0x98, 0xfd, + 0x00, 0x00, 0xb0, 0xb5, 0x3f, 0x24, 0x02, 0x1c, + 0x00, 0x2a, 0x01, 0xd1, 0x08, 0x20, 0x0b, 0x23, + 0x01, 0x2a, 0x01, 0xd1, 0x09, 0x20, 0x08, 0x23, + 0x25, 0x1c, 0x9d, 0x40, 0x00, 0x29, 0x00, 0xd1, + 0x01, 0x21, 0x3f, 0x29, 0x00, 0xd9, 0x21, 0x1c, + 0x99, 0x40, 0x0a, 0x1c, 0x29, 0x1c, 0xff, 0xf7, + 0x7c, 0xfc, 0xb0, 0xbd, 0x00, 0x00, 0x91, 0xb5, + 0x12, 0x49, 0x00, 0xab, 0x1a, 0x78, 0x3c, 0x00, + 0xd4, 0xfd, 0x00, 0x00, 0x08, 0x78, 0x11, 0x4c, + 0x80, 0x18, 0x00, 0x06, 0x00, 0x0e, 0x20, 0x70, + 0x49, 0x78, 0x5a, 0x78, 0x89, 0x18, 0x09, 0x06, + 0x09, 0x0e, 0x13, 0x22, 0x13, 0x28, 0x61, 0x70, + 0x00, 0xd9, 0x22, 0x70, 0x13, 0x29, 0x00, 0xd9, + 0x62, 0x70, 0x08, 0x49, 0x08, 0x48, 0x06, 0x39, + 0xc9, 0x88, 0x81, 0x80, 0x21, 0x78, 0x00, 0x20, + 0xff, 0xf7, 0x82, 0xfc, 0x61, 0x78, 0x01, 0x20, + 0x3c, 0x00, 0x10, 0xfe, 0x00, 0x00, 0xff, 0xf7, + 0x7e, 0xfc, 0x98, 0xbd, 0x00, 0x00, 0xa4, 0x58, + 0x01, 0x00, 0xa6, 0x58, 0x01, 0x00, 0x64, 0x73, + 0x01, 0x00, 0x70, 0xb5, 0x1d, 0x4d, 0x04, 0x1c, + 0x28, 0x78, 0x0e, 0x1c, 0x03, 0x28, 0x03, 0xd1, + 0x02, 0x21, 0x11, 0x20, 0xf1, 0xf7, 0x35, 0xfa, + 0x20, 0x1c, 0x00, 0xf0, 0x4e, 0xf8, 0x00, 0x28, + 0x25, 0xd0, 0x28, 0x78, 0x01, 0x28, 0x0a, 0xd1, + 0x68, 0x68, 0x3c, 0x00, 0x4c, 0xfe, 0x00, 0x00, + 0x00, 0x28, 0x07, 0xd0, 0x01, 0x21, 0x11, 0x20, + 0x03, 0xf0, 0xee, 0xfb, 0x01, 0x20, 0x69, 0x68, + 0xf0, 0xf7, 0xbd, 0xfa, 0x6c, 0x70, 0x6e, 0x60, + 0x20, 0x1c, 0xff, 0xf7, 0xc1, 0xfc, 0x04, 0x1c, + 0x00, 0xf0, 0xd4, 0xfe, 0x00, 0x2c, 0x02, 0xd0, + 0x68, 0x68, 0x00, 0x28, 0x02, 0xd1, 0xf6, 0xf7, + 0xd9, 0xf8, 0x70, 0xbd, 0x01, 0x20, 0x28, 0x70, + 0x01, 0x22, 0x21, 0x1c, 0x3c, 0x00, 0x88, 0xfe, + 0x00, 0x00, 0x11, 0x20, 0x03, 0xf0, 0x9f, 0xfb, + 0x70, 0xbd, 0x02, 0x21, 0x11, 0x20, 0xf1, 0xf7, + 0x06, 0xfa, 0x70, 0xbd, 0x00, 0x00, 0x9c, 0x73, + 0x01, 0x00, 0x80, 0xb5, 0x01, 0x28, 0x05, 0xd1, + 0x00, 0x29, 0x04, 0xd0, 0x01, 0x29, 0x01, 0xd1, + 0xf6, 0xf7, 0xbf, 0xf8, 0x80, 0xbd, 0x05, 0x49, + 0x08, 0x78, 0x03, 0x28, 0x02, 0xd0, 0x00, 0x20, + 0x08, 0x70, 0x80, 0xbd, 0x03, 0x21, 0x3c, 0x00, + 0xc4, 0xfe, 0x00, 0x00, 0x11, 0x20, 0xf1, 0xf7, + 0xed, 0xf9, 0x80, 0xbd, 0x9c, 0x73, 0x01, 0x00, + 0x01, 0x48, 0x40, 0x78, 0x70, 0x47, 0x00, 0x00, + 0x9c, 0x73, 0x01, 0x00, 0x01, 0x1c, 0x01, 0x39, + 0x01, 0x20, 0x0e, 0x29, 0x00, 0xd3, 0x00, 0x20, + 0x70, 0x47, 0x00, 0x00, 0x10, 0xb5, 0x13, 0x4c, + 0x20, 0x78, 0x01, 0x28, 0x0e, 0xd1, 0x60, 0x68, + 0x00, 0x28, 0x0d, 0xd0, 0x01, 0x21, 0x11, 0x20, + 0x3c, 0x00, 0x00, 0xff, 0x00, 0x00, 0x03, 0xf0, + 0x98, 0xfb, 0x01, 0x20, 0x61, 0x68, 0xf0, 0xf7, + 0x67, 0xfa, 0x00, 0x20, 0x60, 0x60, 0x20, 0x70, + 0x01, 0xe0, 0x03, 0x28, 0x0e, 0xd0, 0x00, 0x21, + 0x11, 0x20, 0x03, 0xf0, 0x8a, 0xfb, 0xff, 0xf7, + 0x24, 0xfc, 0xff, 0xf7, 0xc0, 0xfb, 0x05, 0x49, + 0x08, 0x7b, 0x40, 0x08, 0x40, 0x00, 0x08, 0x73, + 0x03, 0x20, 0x20, 0x70, 0x01, 0x20, 0x10, 0xbd, + 0x00, 0x00, 0x3c, 0x00, 0x3c, 0xff, 0x00, 0x00, + 0x9c, 0x73, 0x01, 0x00, 0x88, 0x00, 0x07, 0x00, + 0x10, 0xb5, 0x0d, 0x4c, 0x20, 0x78, 0x03, 0x28, + 0x13, 0xd1, 0x00, 0x20, 0x20, 0x70, 0x0b, 0x48, + 0x01, 0x7b, 0x01, 0x22, 0x11, 0x43, 0x01, 0x73, + 0xff, 0xf7, 0x70, 0xfc, 0xff, 0xf7, 0x18, 0xfc, + 0x00, 0x28, 0x06, 0xd0, 0x02, 0x21, 0x21, 0x70, + 0x01, 0x1c, 0x00, 0x22, 0x11, 0x20, 0x03, 0xf0, + 0x2b, 0xfb, 0x01, 0x20, 0x3c, 0x00, 0x78, 0xff, + 0x00, 0x00, 0x10, 0xbd, 0x00, 0x00, 0x9c, 0x73, + 0x01, 0x00, 0x88, 0x00, 0x07, 0x00, 0x80, 0xb5, + 0x05, 0x49, 0x00, 0x28, 0x04, 0xd0, 0x00, 0x20, + 0x08, 0x60, 0x03, 0xf0, 0x5a, 0xfa, 0x80, 0xbd, + 0x01, 0x20, 0x08, 0x60, 0x80, 0xbd, 0x80, 0x5a, + 0x01, 0x00, 0xfe, 0xb5, 0x05, 0x1c, 0x80, 0x35, + 0x04, 0x1c, 0xa8, 0x68, 0x29, 0x79, 0x06, 0x68, + 0x20, 0x1c, 0xa0, 0x30, 0x02, 0x29, 0x3c, 0x00, + 0xb4, 0xff, 0x00, 0x00, 0x1c, 0xd1, 0x69, 0x79, + 0x08, 0x29, 0x01, 0xd0, 0x0c, 0x29, 0x17, 0xd1, + 0x01, 0x21, 0x61, 0x62, 0xa9, 0x68, 0x09, 0x68, + 0x09, 0x8b, 0x01, 0x82, 0xa9, 0x69, 0x01, 0x91, + 0x00, 0x8a, 0xc0, 0x06, 0x05, 0xd5, 0x60, 0x68, + 0x00, 0x88, 0x40, 0x05, 0x01, 0xd4, 0x01, 0x20, + 0x00, 0xe0, 0x00, 0x20, 0x02, 0x90, 0x05, 0x20, + 0x01, 0xa9, 0x02, 0xf0, 0xb7, 0xf9, 0x02, 0xe0, + 0x3c, 0x00, 0xf0, 0xff, 0x00, 0x00, 0x00, 0x21, + 0x61, 0x62, 0x01, 0x82, 0xa9, 0x68, 0x1a, 0x23, + 0x0a, 0x89, 0x67, 0x6a, 0x18, 0x1c, 0x00, 0x2f, + 0x00, 0xd1, 0x18, 0x20, 0x10, 0x1a, 0x08, 0x81, + 0xa8, 0x68, 0x01, 0x68, 0x62, 0x6a, 0x00, 0x2a, + 0x00, 0xd1, 0x18, 0x23, 0xc9, 0x18, 0x01, 0x60, + 0xa8, 0x68, 0x41, 0xc4, 0x30, 0x88, 0x08, 0x3c, + 0x40, 0x04, 0x03, 0xd5, 0x20, 0x1c, 0xf7, 0xf7, + 0xbc, 0xf9, 0x3c, 0x00, 0x2c, 0x00, 0x01, 0x00, + 0xfe, 0xbd, 0x00, 0x21, 0xe1, 0x61, 0x30, 0x79, + 0xc0, 0x07, 0x03, 0xd4, 0x20, 0x1c, 0xf7, 0xf7, + 0x91, 0xfe, 0xf5, 0xe7, 0x20, 0x1c, 0xf7, 0xf7, + 0x43, 0xff, 0xf1, 0xe7, 0xf7, 0xb5, 0x05, 0x1c, + 0x0a, 0x30, 0x06, 0x1c, 0xf5, 0xf7, 0xa4, 0xfa, + 0x14, 0x4f, 0x04, 0x1c, 0x39, 0x88, 0xf2, 0xf7, + 0x83, 0xfe, 0x32, 0x88, 0x78, 0x68, 0x02, 0x80, + 0x72, 0x88, 0x02, 0x30, 0x3c, 0x00, 0x68, 0x00, + 0x01, 0x00, 0x02, 0x80, 0xb1, 0x88, 0x41, 0x80, + 0x69, 0x88, 0x02, 0x9a, 0x20, 0x1c, 0xfa, 0xf7, + 0xce, 0xfe, 0x0b, 0x4d, 0x08, 0x35, 0x68, 0x80, + 0xfb, 0xf7, 0x2b, 0xfe, 0x01, 0x21, 0x09, 0x03, + 0x00, 0x28, 0x28, 0x88, 0x01, 0xd0, 0x88, 0x43, + 0x00, 0xe0, 0x08, 0x43, 0x28, 0x80, 0x04, 0x48, + 0x00, 0x22, 0x00, 0x21, 0x14, 0x30, 0xf2, 0xf7, + 0x32, 0xfe, 0x20, 0x1c, 0xfc, 0xf7, 0x3c, 0x00, + 0xa4, 0x00, 0x01, 0x00, 0x85, 0xfa, 0xfe, 0xbd, + 0x24, 0x7b, 0x01, 0x00, 0x10, 0xb5, 0x13, 0x4c, + 0x11, 0x49, 0x20, 0x1c, 0xff, 0x30, 0x69, 0x30, + 0x0e, 0xc9, 0x0e, 0xc0, 0x20, 0x1c, 0xff, 0x30, + 0x24, 0x22, 0x75, 0x30, 0x0e, 0x49, 0xf0, 0xf7, + 0x17, 0xfa, 0x20, 0x1c, 0xff, 0x30, 0x3c, 0x22, + 0x99, 0x30, 0x0c, 0x49, 0xf0, 0xf7, 0x6c, 0xfa, + 0x20, 0x1c, 0xff, 0x30, 0x10, 0x22, 0xd5, 0x30, + 0x3c, 0x00, 0xe0, 0x00, 0x01, 0x00, 0x09, 0x49, + 0xf0, 0xf7, 0x09, 0xfa, 0x20, 0x1c, 0xff, 0x30, + 0x28, 0x22, 0xe5, 0x30, 0x07, 0x49, 0xf0, 0xf7, + 0x5e, 0xfa, 0x10, 0xbd, 0x00, 0x00, 0x00, 0x80, + 0x07, 0x00, 0x40, 0x63, 0x01, 0x00, 0x0c, 0x80, + 0x07, 0x00, 0x30, 0x80, 0x07, 0x00, 0x80, 0x80, + 0x07, 0x00, 0xa0, 0x80, 0x07, 0x00, 0xb0, 0xb5, + 0x00, 0x28, 0x3f, 0xd0, 0x21, 0x48, 0x41, 0x68, + 0x21, 0x4c, 0x3c, 0x00, 0x1c, 0x01, 0x01, 0x00, + 0x61, 0x60, 0xc1, 0x68, 0xe1, 0x60, 0x01, 0x69, + 0x21, 0x61, 0x80, 0x6a, 0xa0, 0x62, 0x1e, 0x49, + 0x1c, 0x48, 0x09, 0x68, 0x14, 0x38, 0x41, 0x64, + 0x1c, 0x48, 0x25, 0x1c, 0x3c, 0x35, 0x0f, 0xc8, + 0x0f, 0xc5, 0x20, 0x1c, 0x80, 0x22, 0x4c, 0x30, + 0x19, 0x49, 0xf0, 0xf7, 0x33, 0xfa, 0x14, 0x22, + 0x20, 0x1c, 0xcc, 0x30, 0x17, 0x49, 0xf0, 0xf7, + 0x2d, 0xfa, 0x38, 0x22, 0x3c, 0x00, 0x58, 0x01, + 0x01, 0x00, 0x20, 0x1c, 0xe0, 0x30, 0x15, 0x49, + 0xf0, 0xf7, 0x27, 0xfa, 0x20, 0x1c, 0xff, 0x30, + 0x50, 0x22, 0x19, 0x30, 0x13, 0x49, 0xf0, 0xf7, + 0x20, 0xfa, 0x83, 0x20, 0x80, 0x00, 0x14, 0x22, + 0x20, 0x18, 0x10, 0x49, 0xf0, 0xf7, 0x19, 0xfa, + 0x11, 0x20, 0x40, 0x01, 0x84, 0x22, 0x20, 0x18, + 0x0e, 0x49, 0xf0, 0xf7, 0x12, 0xfa, 0xff, 0xf7, + 0x8e, 0xff, 0xf8, 0xf7, 0x94, 0xfb, 0x3c, 0x00, + 0x94, 0x01, 0x01, 0x00, 0xb0, 0xbd, 0xff, 0xf7, + 0x89, 0xff, 0xb0, 0xbd, 0x00, 0x10, 0x07, 0x00, + 0x40, 0x63, 0x01, 0x00, 0x08, 0x20, 0x07, 0x00, + 0x40, 0x20, 0x07, 0x00, 0x00, 0x30, 0x07, 0x00, + 0x00, 0x40, 0x07, 0x00, 0x00, 0x50, 0x07, 0x00, + 0x00, 0x60, 0x07, 0x00, 0x10, 0x00, 0x07, 0x00, + 0x00, 0x90, 0x07, 0x00, 0x0c, 0x49, 0x80, 0xb5, + 0x01, 0x20, 0x48, 0x60, 0x0a, 0x48, 0x14, 0x38, + 0x3c, 0x00, 0xd0, 0x01, 0x01, 0x00, 0x00, 0x78, + 0x01, 0x28, 0x04, 0xd0, 0x08, 0x48, 0x94, 0x38, + 0x40, 0x6f, 0x00, 0x28, 0x03, 0xd0, 0x00, 0x20, + 0x00, 0xf0, 0x1f, 0xf8, 0x80, 0xbd, 0x08, 0x68, + 0x00, 0x28, 0xfb, 0xd0, 0x03, 0x48, 0xf2, 0xf7, + 0x7a, 0xfe, 0x80, 0xbd, 0x00, 0x00, 0x98, 0x66, + 0x01, 0x00, 0xff, 0xff, 0x00, 0x00, 0x80, 0xb5, + 0x00, 0x28, 0x09, 0xd1, 0xf2, 0x21, 0x0f, 0x20, + 0x03, 0xf0, 0x3c, 0x00, 0x0c, 0x02, 0x01, 0x00, + 0x13, 0xfa, 0x00, 0x22, 0x0f, 0x21, 0xf1, 0x20, + 0x03, 0xf0, 0xcc, 0xfa, 0x80, 0xbd, 0x01, 0x20, + 0xf8, 0xf7, 0x6a, 0xfe, 0x80, 0xbd, 0x00, 0x00, + 0x10, 0xb5, 0x04, 0x1c, 0x03, 0x20, 0x00, 0xf0, + 0xc9, 0xf9, 0x00, 0x21, 0x0f, 0x20, 0x03, 0xf0, + 0xff, 0xf9, 0xff, 0xf7, 0x65, 0xf8, 0x0b, 0x49, + 0x00, 0x20, 0x48, 0x74, 0xfb, 0xf7, 0xe6, 0xfa, + 0x09, 0x48, 0x00, 0x68, 0x3c, 0x00, 0x48, 0x02, + 0x01, 0x00, 0x00, 0x28, 0x03, 0xdc, 0x02, 0x21, + 0x40, 0x42, 0xff, 0xf7, 0x52, 0xfc, 0x04, 0x48, + 0x14, 0x30, 0x00, 0x68, 0x00, 0x28, 0x02, 0xd0, + 0x20, 0x1c, 0xf2, 0xf7, 0x42, 0xfe, 0x10, 0xbd, + 0x00, 0x00, 0x84, 0x66, 0x01, 0x00, 0xd4, 0x7e, + 0x01, 0x00, 0x06, 0x49, 0x80, 0xb5, 0x09, 0x78, + 0x04, 0x29, 0x05, 0xd0, 0x05, 0x29, 0x03, 0xd0, + 0x06, 0x29, 0x01, 0xd0, 0x07, 0x29, 0x3c, 0x00, + 0x84, 0x02, 0x01, 0x00, 0x01, 0xd1, 0xfe, 0xf7, + 0xbd, 0xfd, 0x80, 0xbd, 0x74, 0x66, 0x01, 0x00, + 0x10, 0xb5, 0x09, 0x4c, 0xe0, 0x68, 0x00, 0x28, + 0x0b, 0xd1, 0x07, 0x48, 0x2c, 0x38, 0x00, 0x8a, + 0xc0, 0x07, 0x04, 0xd5, 0x00, 0x21, 0x01, 0x20, + 0x62, 0x68, 0xf9, 0xf7, 0xc9, 0xfa, 0x01, 0x20, + 0xe0, 0x60, 0x01, 0x20, 0x10, 0xbd, 0x00, 0x00, + 0xf4, 0x6e, 0x01, 0x00, 0x8c, 0xb5, 0x02, 0x1c, + 0x3c, 0x00, 0xc0, 0x02, 0x01, 0x00, 0x08, 0x1c, + 0x11, 0x1c, 0xfd, 0xf7, 0x28, 0xff, 0x01, 0x90, + 0x00, 0x28, 0x05, 0xd0, 0x17, 0x20, 0x00, 0xab, + 0x18, 0x80, 0x68, 0x46, 0xfd, 0xf7, 0xff, 0xf8, + 0x8c, 0xbd, 0xf1, 0xb5, 0x2e, 0x4c, 0xae, 0xb0, + 0x00, 0x25, 0x25, 0x63, 0x20, 0x69, 0x01, 0x28, + 0x03, 0xd1, 0x01, 0xa8, 0x01, 0xf0, 0xa1, 0xf8, + 0x4e, 0xe0, 0x01, 0x26, 0x28, 0x4f, 0x26, 0x70, + 0x50, 0x3f, 0x3c, 0x00, 0xfc, 0x02, 0x01, 0x00, + 0xb8, 0x69, 0xf8, 0xf7, 0x4f, 0xf8, 0x25, 0x49, + 0x2c, 0x39, 0x00, 0x28, 0x1d, 0xd0, 0xe0, 0x6a, + 0x01, 0x28, 0x1a, 0xd1, 0x08, 0x8a, 0x0f, 0x1c, + 0x80, 0x07, 0x04, 0xd5, 0x00, 0x21, 0x02, 0x20, + 0x62, 0x68, 0xf9, 0xf7, 0x8f, 0xfa, 0x38, 0x8a, + 0x00, 0x07, 0x07, 0xd5, 0xe0, 0x68, 0x01, 0x28, + 0x04, 0xd1, 0x00, 0x21, 0x08, 0x20, 0x62, 0x68, + 0xf9, 0xf7, 0x84, 0xfa, 0x3c, 0x00, 0x38, 0x03, + 0x01, 0x00, 0x00, 0x22, 0x18, 0x21, 0x82, 0x20, + 0x26, 0x63, 0x03, 0xf0, 0x36, 0xfa, 0x25, 0xe0, + 0x08, 0x8a, 0x0e, 0x1c, 0x80, 0x07, 0x04, 0xd5, + 0x00, 0x21, 0x02, 0x20, 0x62, 0x68, 0xf9, 0xf7, + 0x74, 0xfa, 0x30, 0x8a, 0x00, 0x07, 0x07, 0xd5, + 0xe0, 0x68, 0x01, 0x28, 0x04, 0xd1, 0x00, 0x21, + 0x08, 0x20, 0x62, 0x68, 0xf9, 0xf7, 0x69, 0xfa, + 0x30, 0x8a, 0x40, 0x07, 0x04, 0xd5, 0x3c, 0x00, + 0x74, 0x03, 0x01, 0x00, 0x00, 0x22, 0x00, 0x21, + 0x04, 0x20, 0xf9, 0xf7, 0x61, 0xfa, 0x2e, 0x98, + 0x01, 0x28, 0x04, 0xd0, 0x1e, 0x95, 0x09, 0x21, + 0x1b, 0xa8, 0xff, 0xf7, 0x97, 0xff, 0xe5, 0x62, + 0xbd, 0x61, 0xe5, 0x60, 0x2f, 0xb0, 0xf0, 0xbd, + 0xf4, 0x6e, 0x01, 0x00, 0x80, 0xb5, 0x07, 0x20, + 0xfe, 0xf7, 0xa0, 0xfe, 0x00, 0x21, 0x0f, 0x20, + 0x03, 0xf0, 0x44, 0xf9, 0x0c, 0x48, 0x01, 0x78, + 0x3c, 0x00, 0xb0, 0x03, 0x01, 0x00, 0x00, 0x29, + 0x0f, 0xd0, 0x02, 0x21, 0x01, 0x70, 0x88, 0x38, + 0x00, 0x78, 0x00, 0x28, 0x04, 0xd0, 0x07, 0x49, + 0x10, 0x31, 0x48, 0x7c, 0x01, 0x30, 0x48, 0x74, + 0xf2, 0x22, 0x0f, 0x20, 0x05, 0x49, 0x03, 0xf0, + 0xfc, 0xf8, 0x00, 0x22, 0x0f, 0x21, 0xf3, 0x20, + 0x03, 0xf0, 0xe9, 0xf9, 0x80, 0xbd, 0x74, 0x66, + 0x01, 0x00, 0x80, 0x84, 0x1e, 0x00, 0x10, 0xb5, + 0x04, 0x1c, 0x3c, 0x00, 0xec, 0x03, 0x01, 0x00, + 0xf2, 0x21, 0x0f, 0x20, 0x03, 0xf0, 0x20, 0xf9, + 0x01, 0x2c, 0x0a, 0xd1, 0x08, 0x48, 0x08, 0x49, + 0x00, 0x68, 0x14, 0x39, 0x00, 0x28, 0x05, 0xd0, + 0xc8, 0x78, 0x02, 0x28, 0x02, 0xd1, 0xf7, 0xf7, + 0xaf, 0xfa, 0x10, 0xbd, 0x00, 0x20, 0x48, 0x70, + 0x05, 0x20, 0xfe, 0xf7, 0x65, 0xfe, 0x10, 0xbd, + 0x98, 0x66, 0x01, 0x00, 0xf8, 0xb5, 0x28, 0x4e, + 0x30, 0x21, 0x35, 0x1c, 0x3c, 0x00, 0x28, 0x04, + 0x01, 0x00, 0x60, 0x35, 0x28, 0x89, 0x89, 0x5d, + 0x88, 0x42, 0x03, 0xd1, 0x00, 0x20, 0xff, 0xf7, + 0xf6, 0xfe, 0xf8, 0xbd, 0x34, 0x1c, 0x70, 0x34, + 0x01, 0x21, 0x21, 0x70, 0x41, 0x18, 0x80, 0x19, + 0x30, 0x30, 0x29, 0x81, 0x40, 0x78, 0x1d, 0x4f, + 0x18, 0x3f, 0x38, 0x70, 0x00, 0x28, 0x08, 0xd0, + 0x00, 0x21, 0xfb, 0xf7, 0xc2, 0xf9, 0x00, 0x28, + 0x07, 0xd1, 0x20, 0x78, 0xff, 0xf7, 0x3c, 0x00, + 0x64, 0x04, 0x01, 0x00, 0x9b, 0xff, 0xe7, 0xe7, + 0x01, 0x21, 0x0f, 0x20, 0xf0, 0xf7, 0x1a, 0xff, + 0x14, 0x48, 0x01, 0x21, 0x80, 0x30, 0x81, 0x70, + 0x38, 0x69, 0xfb, 0xf7, 0x55, 0xfa, 0x20, 0x73, + 0x00, 0x21, 0x0f, 0x20, 0x03, 0xf0, 0xd6, 0xf8, + 0x70, 0x7a, 0x01, 0x28, 0x0e, 0xd1, 0x0e, 0x48, + 0x00, 0x68, 0x00, 0x28, 0x04, 0xd0, 0x38, 0x78, + 0x02, 0xf0, 0xda, 0xfa, 0x00, 0x28, 0x05, 0xd0, + 0x3c, 0x00, 0xa0, 0x04, 0x01, 0x00, 0x30, 0x7f, + 0x60, 0x73, 0x03, 0x20, 0x20, 0x70, 0x71, 0x89, + 0x05, 0xe0, 0x05, 0x20, 0x20, 0x70, 0xa8, 0x88, + 0xfa, 0xf7, 0x3b, 0xfb, 0x01, 0x1c, 0x00, 0x22, + 0x0f, 0x20, 0x03, 0xf0, 0x86, 0xf8, 0xba, 0xe7, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0xe4, 0x62, + 0x01, 0x00, 0x70, 0xb5, 0x04, 0x1c, 0x02, 0xf0, + 0x6c, 0xfc, 0x36, 0x4b, 0x19, 0x1c, 0xa0, 0x31, + 0x0a, 0x78, 0x3c, 0x00, 0xdc, 0x04, 0x01, 0x00, + 0x10, 0x2a, 0x02, 0xd2, 0x0a, 0x79, 0x10, 0x2a, + 0x01, 0xd3, 0x01, 0x25, 0x00, 0xe0, 0x00, 0x25, + 0x30, 0x4e, 0xca, 0x79, 0x80, 0x36, 0x01, 0x2c, + 0x12, 0xd0, 0x00, 0x25, 0x02, 0x2c, 0x2e, 0xd0, + 0x04, 0x2c, 0x3c, 0xd1, 0x5c, 0x6b, 0x00, 0x2c, + 0x39, 0xd1, 0x9c, 0x6f, 0x00, 0x1b, 0x2a, 0x4c, + 0xa0, 0x42, 0x34, 0xd9, 0xb2, 0x68, 0x98, 0x6a, + 0x82, 0x42, 0x31, 0xd0, 0x3c, 0x00, 0x18, 0x05, + 0x01, 0x00, 0x4d, 0x72, 0x34, 0xe0, 0xb0, 0x68, + 0x9c, 0x6a, 0x02, 0x22, 0xa0, 0x42, 0x21, 0xd1, + 0x58, 0x6b, 0x00, 0x28, 0x1e, 0xd1, 0x00, 0x2d, + 0x1c, 0xd1, 0x48, 0x7a, 0x19, 0x28, 0x20, 0xd0, + 0x34, 0x68, 0x98, 0x6f, 0x64, 0x00, 0x00, 0x1b, + 0x74, 0x68, 0x00, 0x19, 0xff, 0x30, 0x1c, 0x4c, + 0x39, 0x30, 0xa0, 0x42, 0x16, 0xd2, 0x48, 0x79, + 0x8c, 0x79, 0x00, 0x19, 0x30, 0x28, 0x3c, 0x00, + 0x54, 0x05, 0x01, 0x00, 0x11, 0xd3, 0x10, 0x22, + 0x0f, 0xe0, 0x5c, 0x6b, 0x01, 0x2c, 0x06, 0xd1, + 0xb0, 0x68, 0x9a, 0x6a, 0x90, 0x42, 0x00, 0xd1, + 0x4d, 0x72, 0x00, 0x22, 0x05, 0xe0, 0x9c, 0x6f, + 0x00, 0x1b, 0x12, 0x4c, 0xa0, 0x42, 0x00, 0xd3, + 0x20, 0x22, 0x06, 0xe0, 0x4a, 0x7a, 0x19, 0x2a, + 0x01, 0xd2, 0x01, 0x32, 0x4a, 0x72, 0x20, 0x22, + 0xb0, 0x60, 0x30, 0x68, 0x9b, 0x6f, 0x98, 0x42, + 0x3c, 0x00, 0x90, 0x05, 0x01, 0x00, 0x04, 0xd1, + 0x00, 0x2a, 0x00, 0xd1, 0x48, 0x79, 0x4a, 0x71, + 0x06, 0xe0, 0x10, 0x2a, 0x04, 0xd3, 0x70, 0x60, + 0x33, 0x60, 0x48, 0x79, 0x88, 0x71, 0xf6, 0xe7, + 0xca, 0x71, 0x70, 0xbd, 0x00, 0x00, 0xa4, 0x6c, + 0x01, 0x00, 0xa3, 0x04, 0x00, 0x00, 0x71, 0x02, + 0x00, 0x00, 0x35, 0x0c, 0x00, 0x00, 0x05, 0x48, + 0x80, 0xb5, 0x81, 0x7b, 0x00, 0x29, 0x05, 0xd0, + 0x00, 0x21, 0x3c, 0x00, 0xcc, 0x05, 0x01, 0x00, + 0x81, 0x73, 0x03, 0x49, 0x0f, 0x20, 0x01, 0xf0, + 0x0f, 0xff, 0x80, 0xbd, 0x74, 0x66, 0x01, 0x00, + 0xe9, 0x03, 0x01, 0x00, 0xf8, 0xb5, 0x04, 0x1c, + 0x02, 0xf0, 0xe2, 0xfb, 0x05, 0x1c, 0x38, 0x4e, + 0x20, 0x1c, 0x37, 0x49, 0x34, 0x1c, 0xa0, 0x34, + 0x10, 0x22, 0x44, 0x39, 0x01, 0x28, 0x2c, 0xd0, + 0x04, 0x28, 0x4e, 0xd1, 0x37, 0x1c, 0x74, 0x36, + 0x09, 0xce, 0x26, 0x78, 0x3c, 0x00, 0x08, 0x06, + 0x01, 0x00, 0xc0, 0x1a, 0x20, 0x2e, 0x04, 0xd1, + 0x30, 0x4e, 0xb0, 0x42, 0x01, 0xd9, 0x00, 0x26, + 0x4e, 0x61, 0x3e, 0x1c, 0x3f, 0x6c, 0x00, 0x2f, + 0x48, 0xd1, 0x77, 0x6c, 0x00, 0x2f, 0x45, 0xd1, + 0xb7, 0x6a, 0x00, 0x2f, 0x3d, 0xd0, 0x77, 0x6b, + 0x00, 0x2f, 0x3a, 0xd0, 0x27, 0x4f, 0xb8, 0x42, + 0x37, 0xd2, 0x60, 0x78, 0x10, 0x28, 0x06, 0xd3, + 0xf0, 0x6f, 0x18, 0x1a, 0x24, 0x4b, 0x3c, 0x00, + 0x44, 0x06, 0x01, 0x00, 0x98, 0x42, 0x01, 0xd2, + 0xe2, 0x70, 0xf5, 0x66, 0x48, 0x69, 0x06, 0x28, + 0x2f, 0xd2, 0x01, 0x30, 0x2c, 0xe0, 0x20, 0x78, + 0x20, 0x28, 0x01, 0xd1, 0x06, 0x23, 0x4b, 0x61, + 0x02, 0x23, 0x23, 0x71, 0xb3, 0x6a, 0x00, 0x2b, + 0x19, 0xd0, 0x49, 0x69, 0x03, 0x29, 0x16, 0xd9, + 0x71, 0x6b, 0x73, 0x6d, 0x59, 0x40, 0x12, 0xd0, + 0xe1, 0x78, 0x10, 0x29, 0x10, 0xd3, 0x61, 0x78, + 0x3c, 0x00, 0x80, 0x06, 0x01, 0x00, 0x33, 0x1c, + 0x10, 0x29, 0x0c, 0xd3, 0xd9, 0x6f, 0x69, 0x1a, + 0x13, 0x4d, 0xa9, 0x42, 0x07, 0xd2, 0x58, 0x6c, + 0x00, 0x28, 0x02, 0xd0, 0x98, 0x6c, 0x00, 0x28, + 0x00, 0xd1, 0x22, 0x71, 0xf8, 0xbd, 0x02, 0x28, + 0xfc, 0xd1, 0x22, 0x70, 0xfa, 0xe7, 0x48, 0x69, + 0x00, 0x28, 0x01, 0xd0, 0x01, 0x38, 0x48, 0x61, + 0x0a, 0x49, 0xf0, 0x6e, 0x40, 0x18, 0x02, 0xf0, + 0xb0, 0xfa, 0x3c, 0x00, 0xbc, 0x06, 0x01, 0x00, + 0x00, 0x28, 0xee, 0xd0, 0x01, 0x20, 0xe0, 0x70, + 0x06, 0x48, 0x28, 0x18, 0xf0, 0x66, 0xe8, 0xe7, + 0xa4, 0x6c, 0x01, 0x00, 0xe2, 0x04, 0x00, 0x00, + 0x1a, 0x06, 0x00, 0x00, 0x53, 0x07, 0x00, 0x00, + 0x00, 0x2d, 0x31, 0x01, 0x00, 0x5a, 0x62, 0x02, + 0x80, 0xb5, 0x41, 0x68, 0x09, 0x79, 0xc9, 0x07, + 0x13, 0xd5, 0xc1, 0x69, 0x00, 0x29, 0x0d, 0xd0, + 0x89, 0x79, 0x02, 0x29, 0x3c, 0x00, 0xf8, 0x06, + 0x01, 0x00, 0x0a, 0xd1, 0x08, 0x21, 0x01, 0x86, + 0x01, 0x1c, 0x38, 0x31, 0x81, 0x62, 0x02, 0x1c, + 0x06, 0x48, 0x04, 0x49, 0xf9, 0xf7, 0xfd, 0xfc, + 0x80, 0xbd, 0xf7, 0xf7, 0xdc, 0xfb, 0x80, 0xbd, + 0xf7, 0xf7, 0x23, 0xfb, 0x80, 0xbd, 0xb9, 0x71, + 0x00, 0x00, 0xa0, 0x6a, 0x01, 0x00, 0x10, 0xb5, + 0x00, 0x24, 0x00, 0x28, 0x03, 0xd0, 0x02, 0xf0, + 0xe8, 0xfe, 0x00, 0x28, 0x17, 0xd0, 0x3c, 0x00, + 0x34, 0x07, 0x01, 0x00, 0x0c, 0x4c, 0x01, 0x20, + 0xa0, 0x72, 0x20, 0x68, 0x00, 0x21, 0x41, 0x62, + 0x0a, 0x49, 0x02, 0x68, 0xc9, 0x78, 0x60, 0x32, + 0x91, 0x71, 0x21, 0x89, 0x01, 0x31, 0x21, 0x81, + 0x00, 0x68, 0x40, 0x30, 0x81, 0x83, 0xfb, 0xf7, + 0x31, 0xfc, 0x20, 0x68, 0x00, 0x68, 0xfc, 0xf7, + 0xa1, 0xf9, 0x01, 0x24, 0x20, 0x1c, 0x10, 0xbd, + 0x14, 0x7a, 0x01, 0x00, 0x0e, 0x61, 0x01, 0x00, + 0x3c, 0x00, 0x70, 0x07, 0x01, 0x00, 0x7f, 0xb5, + 0x06, 0x1c, 0x1e, 0x48, 0x1d, 0x1c, 0x43, 0x88, + 0x02, 0x88, 0x1c, 0x21, 0x00, 0x20, 0x90, 0xb0, + 0xf0, 0xf7, 0x45, 0xff, 0x03, 0x90, 0x04, 0x68, + 0xff, 0x21, 0x01, 0x31, 0x21, 0x80, 0x08, 0x20, + 0x60, 0x80, 0x06, 0x20, 0x20, 0x71, 0x04, 0x20, + 0x60, 0x71, 0xc0, 0x01, 0x00, 0x2d, 0x00, 0xd1, + 0x08, 0x1c, 0xe0, 0x80, 0x01, 0xa8, 0x02, 0x30, + 0x31, 0x1c, 0x3c, 0x00, 0xac, 0x07, 0x01, 0x00, + 0x05, 0x1c, 0xfa, 0xf7, 0x5f, 0xfa, 0x10, 0x49, + 0x68, 0x46, 0xfa, 0xf7, 0x5b, 0xfa, 0x20, 0x1c, + 0x08, 0x30, 0x69, 0x46, 0xfa, 0xf7, 0x56, 0xfa, + 0x29, 0x1c, 0x20, 0x1c, 0x12, 0x30, 0xfa, 0xf7, + 0x51, 0xfa, 0x10, 0xab, 0x98, 0x88, 0x00, 0x22, + 0x01, 0x21, 0x20, 0x83, 0xd8, 0x88, 0x60, 0x83, + 0x18, 0x89, 0xe0, 0x81, 0x58, 0x89, 0x20, 0x82, + 0x68, 0x46, 0xf9, 0xf7, 0x3c, 0x00, 0xe8, 0x07, + 0x01, 0x00, 0x17, 0xff, 0x14, 0xb0, 0x70, 0xbd, + 0x00, 0x00, 0x14, 0x6e, 0x01, 0x00, 0x12, 0x61, + 0x01, 0x00, 0xb0, 0xb5, 0x04, 0x1c, 0x18, 0x48, + 0x25, 0x1c, 0x00, 0x78, 0x60, 0x35, 0x80, 0x07, + 0x00, 0x28, 0x08, 0xda, 0xe8, 0x79, 0x00, 0x28, + 0x05, 0xd0, 0xf4, 0xf7, 0x70, 0xff, 0x01, 0x1c, + 0x20, 0x1c, 0x00, 0xf0, 0x78, 0xf9, 0x29, 0x88, + 0x2e, 0x20, 0x00, 0x5d, 0xf2, 0xf7, 0x3c, 0x00, + 0x24, 0x08, 0x01, 0x00, 0x9f, 0xfa, 0xe8, 0x79, + 0x00, 0x28, 0x0b, 0xd1, 0x20, 0x1c, 0x40, 0x30, + 0x01, 0x8b, 0x22, 0x69, 0x11, 0x80, 0x41, 0x8b, + 0x22, 0x69, 0x51, 0x80, 0x80, 0x8b, 0x21, 0x69, + 0xc8, 0x82, 0x07, 0xe0, 0x01, 0x28, 0x05, 0xd1, + 0x20, 0x69, 0x01, 0x22, 0x01, 0x88, 0xd2, 0x02, + 0x11, 0x43, 0x01, 0x80, 0x6a, 0x7a, 0xe0, 0x68, + 0x02, 0x49, 0xf2, 0xf7, 0x53, 0xfa, 0xb0, 0xbd, + 0x3c, 0x00, 0x60, 0x08, 0x01, 0x00, 0x1d, 0x75, + 0x01, 0x00, 0xd1, 0x4f, 0x00, 0x00, 0x90, 0xb5, + 0x04, 0x1c, 0x38, 0x23, 0x0c, 0x49, 0x58, 0x43, + 0x43, 0x18, 0x85, 0xb0, 0x00, 0x20, 0x0a, 0x49, + 0x02, 0x90, 0x18, 0x1c, 0x01, 0x22, 0x03, 0x91, + 0x09, 0x49, 0x04, 0x92, 0x30, 0x30, 0x42, 0x78, + 0x09, 0x88, 0x01, 0x92, 0x00, 0x91, 0x01, 0x78, + 0x5a, 0x6b, 0x0c, 0x33, 0x20, 0x1c, 0xfb, 0xf7, + 0x7c, 0xf8, 0x3c, 0x00, 0x9c, 0x08, 0x01, 0x00, + 0x05, 0xb0, 0x90, 0xbd, 0xd4, 0xe4, 0x01, 0x00, + 0x5d, 0x4e, 0x00, 0x00, 0x48, 0x7b, 0x01, 0x00, + 0x90, 0xb5, 0x85, 0xb0, 0x03, 0x1c, 0x00, 0x20, + 0x02, 0x90, 0x0a, 0x49, 0x18, 0x1c, 0x00, 0x22, + 0x04, 0x92, 0x60, 0x30, 0x03, 0x91, 0xc2, 0x79, + 0x01, 0x88, 0x01, 0x92, 0x00, 0x91, 0x5a, 0x6a, + 0xdc, 0x68, 0x20, 0x33, 0x99, 0x7b, 0x40, 0x7a, + 0x23, 0x1c, 0xfb, 0xf7, 0x3c, 0x00, 0xd8, 0x08, + 0x01, 0x00, 0x5d, 0xf8, 0x05, 0xb0, 0x90, 0xbd, + 0x00, 0x00, 0x0d, 0x4f, 0x00, 0x00, 0x07, 0x49, + 0x80, 0xb5, 0x88, 0x6a, 0x00, 0x28, 0x08, 0xd1, + 0x01, 0x20, 0x88, 0x62, 0xf0, 0xf7, 0xaf, 0xfc, + 0x01, 0x1c, 0x03, 0x48, 0x00, 0x22, 0xf2, 0xf7, + 0xb8, 0xfe, 0x80, 0xbd, 0x00, 0x00, 0x78, 0x69, + 0x01, 0x00, 0x41, 0xe4, 0x00, 0x00, 0xf0, 0xb5, + 0x9b, 0xb0, 0x00, 0x28, 0x20, 0xd0, 0x3c, 0x00, + 0x14, 0x09, 0x01, 0x00, 0x01, 0x1c, 0x08, 0xa8, + 0xfc, 0xf7, 0xb2, 0xfd, 0x01, 0x20, 0x11, 0x90, + 0x03, 0x20, 0x10, 0xad, 0x28, 0x72, 0x04, 0x20, + 0x68, 0x72, 0x05, 0xa8, 0x00, 0x22, 0x69, 0x46, + 0xf4, 0xf7, 0x00, 0xff, 0x00, 0x24, 0x00, 0x26, + 0x05, 0xa9, 0x00, 0x20, 0xf9, 0xf7, 0xfc, 0xfa, + 0x69, 0x46, 0xf9, 0xf7, 0xf9, 0xfa, 0x0b, 0x90, + 0x08, 0xa8, 0xfc, 0xf7, 0xbb, 0xfd, 0x01, 0x34, + 0x3c, 0x00, 0x50, 0x09, 0x01, 0x00, 0x02, 0x2c, + 0x2e, 0x72, 0xf0, 0xdb, 0x1b, 0xb0, 0xf0, 0xbd, + 0x00, 0x00, 0x90, 0xb5, 0x04, 0x1c, 0x4c, 0x23, + 0x0c, 0x49, 0x58, 0x43, 0x43, 0x18, 0x85, 0xb0, + 0x00, 0x20, 0x0a, 0x49, 0x02, 0x90, 0x00, 0x22, + 0x04, 0x92, 0x3c, 0x20, 0x03, 0x91, 0xc2, 0x5c, + 0x08, 0x48, 0x41, 0x88, 0x01, 0x92, 0x41, 0x20, + 0x00, 0x91, 0xc1, 0x5c, 0x5a, 0x68, 0x08, 0x33, + 0x20, 0x1c, 0x3c, 0x00, 0x8c, 0x09, 0x01, 0x00, + 0xfb, 0xf7, 0x02, 0xf8, 0x05, 0xb0, 0x90, 0xbd, + 0x58, 0xe3, 0x01, 0x00, 0x75, 0x4f, 0x00, 0x00, + 0x3c, 0x7c, 0x01, 0x00, 0xf8, 0xb5, 0x0e, 0x1c, + 0x22, 0x4c, 0x38, 0x21, 0x17, 0x1c, 0x05, 0x1c, + 0x20, 0x1c, 0xef, 0xf7, 0x75, 0xfd, 0x23, 0x1c, + 0x25, 0x33, 0x21, 0x1c, 0x24, 0x31, 0x10, 0x20, + 0x6a, 0x46, 0xf9, 0xf7, 0x1d, 0xf8, 0x00, 0xab, + 0x18, 0x88, 0x07, 0x21, 0x3c, 0x00, 0xc8, 0x09, + 0x01, 0x00, 0x1a, 0x4a, 0x02, 0x38, 0x20, 0x84, + 0x20, 0x1c, 0x20, 0x30, 0x81, 0x70, 0xc5, 0x70, + 0x11, 0x1c, 0x06, 0x73, 0x47, 0x73, 0x34, 0x31, + 0x21, 0x63, 0x30, 0x32, 0x62, 0x63, 0x01, 0x79, + 0x25, 0x1c, 0x10, 0x35, 0x21, 0x81, 0x20, 0x60, + 0xe5, 0x60, 0x18, 0x88, 0x40, 0x1a, 0x20, 0x83, + 0x20, 0x1c, 0x28, 0x30, 0x20, 0x61, 0x20, 0x1c, + 0xf9, 0xf7, 0x11, 0xf8, 0x0d, 0x48, 0x3c, 0x00, + 0x04, 0x0a, 0x01, 0x00, 0x00, 0x68, 0x00, 0x28, + 0x07, 0xd0, 0x06, 0x21, 0x20, 0x1c, 0xf8, 0xf7, + 0x47, 0xfd, 0x10, 0x21, 0x28, 0x1c, 0xf8, 0xf7, + 0x43, 0xfd, 0x08, 0x48, 0x02, 0x21, 0x01, 0x62, + 0x44, 0x62, 0x01, 0x21, 0x01, 0x62, 0x06, 0x48, + 0x00, 0x68, 0xef, 0xf7, 0xd5, 0xfc, 0xf8, 0xbd, + 0x8c, 0x8e, 0x01, 0x00, 0xe4, 0xfe, 0x01, 0x00, + 0xcc, 0x5c, 0x01, 0x00, 0x00, 0x30, 0x07, 0x00, + 0x3c, 0x00, 0x40, 0x0a, 0x01, 0x00, 0x5c, 0x5b, + 0x01, 0x00, 0xf0, 0xb5, 0x06, 0x1c, 0x40, 0x36, + 0x31, 0x8b, 0x04, 0x1c, 0x25, 0x1c, 0x08, 0x07, + 0x80, 0x0f, 0x60, 0x35, 0x01, 0x28, 0x85, 0xb0, + 0x3b, 0xd0, 0xe8, 0x79, 0x00, 0x28, 0x05, 0xd1, + 0x20, 0x69, 0x01, 0x80, 0xb0, 0x8b, 0x21, 0x69, + 0xc8, 0x82, 0x07, 0xe0, 0x01, 0x28, 0x05, 0xd1, + 0x20, 0x69, 0x01, 0x22, 0x01, 0x88, 0xd2, 0x02, + 0x11, 0x43, 0x3c, 0x00, 0x7c, 0x0a, 0x01, 0x00, + 0x01, 0x80, 0x20, 0x48, 0x00, 0x78, 0x80, 0x07, + 0x26, 0xd5, 0xe8, 0x79, 0x00, 0x28, 0x23, 0xd0, + 0xa0, 0x6b, 0x00, 0x28, 0x1c, 0xd0, 0xf4, 0xf7, + 0x2f, 0xfe, 0x00, 0x28, 0x09, 0xd0, 0xb8, 0x21, + 0x09, 0x58, 0x00, 0x29, 0x05, 0xd0, 0x30, 0x21, + 0x09, 0x5d, 0xb4, 0x30, 0x08, 0x18, 0x07, 0x7a, + 0x00, 0xe0, 0x00, 0x27, 0x01, 0x21, 0x38, 0x1c, + 0xfa, 0xf7, 0x86, 0xf9, 0x3c, 0x00, 0xb8, 0x0a, + 0x01, 0x00, 0x04, 0x90, 0x20, 0x69, 0x04, 0x30, + 0x39, 0x1c, 0xf4, 0xf7, 0x6c, 0xfd, 0x04, 0x99, + 0xfa, 0xf7, 0xd3, 0xf9, 0x02, 0xe0, 0x20, 0x1c, + 0xf7, 0xf7, 0xf9, 0xfb, 0x70, 0x83, 0x70, 0x8b, + 0x21, 0x69, 0x00, 0x22, 0x48, 0x80, 0x09, 0x49, + 0x0a, 0x48, 0x04, 0x92, 0x03, 0x91, 0x02, 0x90, + 0xea, 0x79, 0x29, 0x88, 0x01, 0x92, 0x00, 0x91, + 0x62, 0x6a, 0xe3, 0x68, 0x20, 0x34, 0x3c, 0x00, + 0xf4, 0x0a, 0x01, 0x00, 0xa1, 0x7b, 0x68, 0x7a, + 0xfa, 0xf7, 0x4c, 0xff, 0x05, 0xb0, 0xf0, 0xbd, + 0x1d, 0x75, 0x01, 0x00, 0xd1, 0x4f, 0x00, 0x00, + 0xdd, 0x2f, 0x01, 0x00, 0xfe, 0xb5, 0x04, 0x1c, + 0x26, 0x1c, 0x01, 0x20, 0x20, 0x36, 0x00, 0x29, + 0x02, 0x90, 0x2e, 0xd0, 0x58, 0x20, 0x00, 0x5b, + 0x00, 0x07, 0x80, 0x0f, 0x01, 0x28, 0x01, 0xd1, + 0xcc, 0x31, 0x00, 0xe0, 0xb4, 0x31, 0x48, 0x68, + 0x3c, 0x00, 0x30, 0x0b, 0x01, 0x00, 0x0d, 0x1c, + 0x00, 0x28, 0x24, 0xd0, 0x20, 0x1c, 0x60, 0x30, + 0xc2, 0x79, 0x01, 0x21, 0x01, 0x2a, 0x00, 0xd0, + 0x00, 0x21, 0x27, 0x1c, 0x62, 0x6d, 0x30, 0x37, + 0x00, 0x2a, 0x04, 0xd0, 0x3a, 0x1c, 0x28, 0x1c, + 0xf6, 0xf7, 0xe7, 0xfd, 0x07, 0xe0, 0x42, 0x7a, + 0x23, 0x1c, 0x68, 0x33, 0x00, 0x92, 0x3a, 0x1c, + 0x28, 0x1c, 0xf6, 0xf7, 0x9a, 0xfd, 0x02, 0x90, + 0x38, 0x78, 0x3c, 0x00, 0x6c, 0x0b, 0x01, 0x00, + 0x40, 0x19, 0x00, 0x7a, 0x01, 0x21, 0xb0, 0x73, + 0xfa, 0xf7, 0x26, 0xf9, 0x01, 0xe0, 0x00, 0x20, + 0xb0, 0x73, 0x60, 0x62, 0xb0, 0x7b, 0x0d, 0x28, + 0x01, 0xd9, 0xf0, 0xf7, 0xbb, 0xfb, 0x02, 0x98, + 0xfe, 0xbd, 0x00, 0x00, 0xff, 0xb5, 0x04, 0x1c, + 0x80, 0x30, 0x25, 0x1c, 0x5e, 0x35, 0x00, 0x78, + 0xae, 0x1d, 0xaf, 0x1f, 0x00, 0x28, 0x83, 0xb0, + 0x12, 0xd1, 0xf4, 0xf7, 0x3c, 0x00, 0xa8, 0x0b, + 0x01, 0x00, 0xc7, 0xfb, 0x00, 0x28, 0x07, 0xd0, + 0x06, 0x98, 0x05, 0x99, 0x02, 0x90, 0x04, 0x98, + 0x01, 0x90, 0xa6, 0x61, 0x67, 0x61, 0x0d, 0xe0, + 0x04, 0x98, 0x06, 0x99, 0x02, 0x90, 0x05, 0x98, + 0x01, 0x90, 0x66, 0x61, 0x05, 0xe0, 0x04, 0xa9, + 0x03, 0xc9, 0x02, 0x90, 0x06, 0x98, 0x01, 0x90, + 0x67, 0x61, 0xa5, 0x61, 0x06, 0x22, 0x38, 0x1c, + 0xef, 0xf7, 0x8b, 0xfc, 0x06, 0x22, 0x3c, 0x00, + 0xe4, 0x0b, 0x01, 0x00, 0x28, 0x1c, 0x02, 0x99, + 0xef, 0xf7, 0x86, 0xfc, 0x06, 0x22, 0x30, 0x1c, + 0x01, 0x99, 0xef, 0xf7, 0x81, 0xfc, 0x07, 0xb0, + 0xf0, 0xbd, 0x00, 0x00, 0xb0, 0xb5, 0x0d, 0x1c, + 0x04, 0x1c, 0x05, 0x28, 0x01, 0xd3, 0xf0, 0xf7, + 0x7b, 0xfb, 0x02, 0x49, 0xa0, 0x00, 0x08, 0x58, + 0x85, 0x60, 0xb0, 0xbd, 0x10, 0x7b, 0x01, 0x00, + 0xf8, 0xb5, 0xff, 0xf7, 0x59, 0xf9, 0x05, 0x1c, + 0x3c, 0x00, 0x20, 0x0c, 0x01, 0x00, 0xfe, 0xf7, + 0xe8, 0xff, 0x04, 0x1c, 0x28, 0x1c, 0xff, 0xf7, + 0x58, 0xf9, 0x00, 0x28, 0x42, 0xd0, 0x69, 0x1e, + 0x21, 0x4d, 0x4a, 0x00, 0x20, 0x4b, 0x1c, 0x3d, + 0xae, 0x5c, 0x98, 0x5c, 0x30, 0x40, 0xd6, 0x18, + 0x01, 0x23, 0xf6, 0x56, 0x52, 0x19, 0xd2, 0x56, + 0x96, 0x42, 0x01, 0xdd, 0x15, 0x1c, 0x00, 0xe0, + 0x35, 0x1c, 0x18, 0x4b, 0x2a, 0x3b, 0x59, 0x56, + 0x51, 0x18, 0x3c, 0x00, 0x5c, 0x0c, 0x01, 0x00, + 0xb1, 0x42, 0x00, 0xdb, 0x31, 0x1c, 0x0e, 0x1c, + 0x00, 0x28, 0x26, 0xd0, 0xfe, 0xf7, 0xbe, 0xff, + 0x00, 0x90, 0x00, 0xab, 0x18, 0x78, 0x12, 0x49, + 0x00, 0x23, 0xc9, 0x56, 0x00, 0xab, 0x15, 0x22, + 0x10, 0x1a, 0x5b, 0x78, 0x00, 0x1b, 0x40, 0x18, + 0xd2, 0x1a, 0x12, 0x1b, 0x51, 0x18, 0x00, 0x22, + 0x85, 0x42, 0x02, 0xdb, 0x00, 0xab, 0x1a, 0x70, + 0x02, 0xe0, 0x40, 0x1b, 0x3c, 0x00, 0x98, 0x0c, + 0x01, 0x00, 0x00, 0xab, 0x18, 0x70, 0x8e, 0x42, + 0x02, 0xdb, 0x00, 0xab, 0x5a, 0x70, 0x02, 0xe0, + 0x88, 0x1b, 0x00, 0xab, 0x58, 0x70, 0x00, 0x98, + 0xff, 0xf7, 0x8d, 0xf8, 0x01, 0xf0, 0xff, 0xf8, + 0xf8, 0xbd, 0xe6, 0x78, 0x01, 0x00, 0x65, 0x73, + 0x01, 0x00, 0x70, 0xb5, 0x08, 0x4e, 0x06, 0x4d, + 0x00, 0x24, 0x06, 0x20, 0x60, 0x43, 0x80, 0x19, + 0x06, 0x22, 0x29, 0x1c, 0xef, 0xf7, 0x3c, 0x00, + 0xd4, 0x0c, 0x01, 0x00, 0x11, 0xfc, 0x01, 0x34, + 0x05, 0x2c, 0xf5, 0xdb, 0x70, 0xbd, 0x00, 0x00, + 0x4e, 0x47, 0x01, 0x00, 0xe6, 0x7a, 0x01, 0x00, + 0x03, 0x48, 0x80, 0xb5, 0x01, 0x68, 0x03, 0x48, + 0xfe, 0xf7, 0x42, 0xfb, 0x80, 0xbd, 0x00, 0x00, + 0xa8, 0x79, 0x01, 0x00, 0xc4, 0x60, 0x01, 0x00, + 0x03, 0x48, 0x80, 0xb5, 0x01, 0x68, 0x03, 0x48, + 0xfe, 0xf7, 0x4a, 0xfb, 0x80, 0xbd, 0x00, 0x00, + 0x3c, 0x00, 0x10, 0x0d, 0x01, 0x00, 0xa8, 0x79, + 0x01, 0x00, 0xc4, 0x60, 0x01, 0x00, 0x10, 0xb5, + 0x00, 0x28, 0x0a, 0xd0, 0x06, 0x4c, 0xa1, 0x69, + 0x00, 0x29, 0x01, 0xd1, 0x00, 0x20, 0x00, 0xe0, + 0x09, 0x68, 0xf7, 0xf7, 0x38, 0xfb, 0xa0, 0x61, + 0x10, 0xbd, 0x00, 0x20, 0x10, 0xbd, 0xa4, 0x6e, + 0x01, 0x00, 0xf3, 0xb5, 0x37, 0x48, 0x83, 0xb0, + 0x02, 0x90, 0x80, 0x79, 0x0e, 0x1c, 0x00, 0x27, + 0x01, 0x90, 0x3c, 0x00, 0x4c, 0x0d, 0x01, 0x00, + 0x34, 0x48, 0x35, 0x4a, 0x01, 0x6a, 0x03, 0x9c, + 0x03, 0x1c, 0x1b, 0x69, 0xa1, 0x42, 0x01, 0xd0, + 0x93, 0x61, 0x00, 0xe0, 0x53, 0x61, 0x31, 0x49, + 0x8a, 0x68, 0x96, 0x42, 0x3f, 0xd0, 0x2d, 0x48, + 0x8e, 0x60, 0xc1, 0x68, 0x00, 0x24, 0x25, 0x1c, + 0x00, 0x29, 0x2d, 0x48, 0x09, 0xd0, 0x00, 0x2e, + 0x0b, 0xd0, 0x28, 0x48, 0x01, 0x24, 0xc0, 0x6a, + 0x24, 0x03, 0x00, 0x28, 0x3c, 0x00, 0x88, 0x0d, + 0x01, 0x00, 0x06, 0xd0, 0x01, 0x27, 0x04, 0xe0, + 0x00, 0x2e, 0x01, 0xd0, 0x05, 0x1c, 0xf9, 0xe7, + 0x04, 0x1c, 0x00, 0x2f, 0x06, 0xd0, 0xfb, 0xf7, + 0x1e, 0xfb, 0x1f, 0x48, 0x01, 0x68, 0x22, 0x48, + 0xfe, 0xf7, 0xfb, 0xfa, 0x20, 0x1c, 0x28, 0x43, + 0x0e, 0xd0, 0x2a, 0x1c, 0x21, 0x1c, 0x01, 0x20, + 0x02, 0xf0, 0x21, 0xfe, 0x2a, 0x1c, 0x21, 0x1c, + 0x02, 0x20, 0x02, 0xf0, 0x1c, 0xfe, 0x3c, 0x00, + 0xc4, 0x0d, 0x01, 0x00, 0x2a, 0x1c, 0x21, 0x1c, + 0x03, 0x20, 0x02, 0xf0, 0x17, 0xfe, 0x00, 0x2f, + 0x06, 0xd1, 0x13, 0x48, 0x01, 0x68, 0x16, 0x48, + 0xfe, 0xf7, 0xce, 0xfa, 0xfa, 0xf7, 0x42, 0xfd, + 0x03, 0x9c, 0x00, 0x2c, 0x01, 0xd1, 0x01, 0xf0, + 0xe1, 0xff, 0x01, 0xa9, 0x03, 0xc9, 0x88, 0x71, + 0x01, 0xf0, 0xdc, 0xff, 0x0a, 0x4c, 0x0a, 0x4b, + 0x44, 0x3c, 0xa1, 0x69, 0x22, 0x69, 0x08, 0x3b, + 0x3c, 0x00, 0x00, 0x0e, 0x01, 0x00, 0x41, 0x1a, + 0x00, 0x2a, 0x03, 0xd0, 0x1a, 0x68, 0x51, 0x18, + 0x19, 0x60, 0x02, 0xe0, 0x5a, 0x68, 0x51, 0x18, + 0x59, 0x60, 0xa0, 0x61, 0x26, 0x61, 0x05, 0xb0, + 0xf0, 0xbd, 0x20, 0x10, 0x07, 0x00, 0xa4, 0x6c, + 0x01, 0x00, 0x10, 0x00, 0x07, 0x00, 0xb0, 0x57, + 0x01, 0x00, 0x00, 0x10, 0x60, 0x00, 0x84, 0x73, + 0x01, 0x00, 0x1c, 0xb5, 0x4c, 0x23, 0x08, 0x49, + 0x58, 0x43, 0x3c, 0x00, 0x3c, 0x0e, 0x01, 0x00, + 0x44, 0x18, 0x20, 0x1c, 0x40, 0x30, 0x41, 0x78, + 0x62, 0x68, 0x00, 0x91, 0x01, 0x92, 0x3f, 0x21, + 0x0b, 0x5d, 0x61, 0x8f, 0x00, 0x78, 0x62, 0x6c, + 0xfa, 0xf7, 0x28, 0xf8, 0xa0, 0x85, 0x1c, 0xbd, + 0x58, 0xe3, 0x01, 0x00, 0xb0, 0xb5, 0x16, 0x4d, + 0xa9, 0x69, 0x00, 0x29, 0x25, 0xd0, 0x2c, 0x1c, + 0x30, 0x34, 0x20, 0x7a, 0x00, 0x28, 0x20, 0xd0, + 0x00, 0x23, 0x81, 0x22, 0x3c, 0x00, 0x78, 0x0e, + 0x01, 0x00, 0x18, 0x20, 0x02, 0xf0, 0x89, 0xfc, + 0x20, 0x7a, 0xff, 0x30, 0x00, 0x06, 0x00, 0x0e, + 0x20, 0x72, 0x12, 0xd1, 0x0c, 0x48, 0x28, 0x21, + 0x2c, 0x38, 0x09, 0x5c, 0x21, 0x72, 0x29, 0x7a, + 0x00, 0x29, 0x01, 0xd1, 0x00, 0x6a, 0x00, 0xe0, + 0x40, 0x6a, 0xa9, 0x69, 0x80, 0x02, 0x81, 0x42, + 0x03, 0xd2, 0x49, 0x00, 0x81, 0x42, 0x01, 0xd2, + 0xa9, 0x61, 0xb0, 0xbd, 0xa8, 0x61, 0x3c, 0x00, + 0xb4, 0x0e, 0x01, 0x00, 0xb0, 0xbd, 0x01, 0xf0, + 0x1d, 0xf9, 0xb0, 0xbd, 0xf4, 0x6e, 0x01, 0x00, + 0x7f, 0xb5, 0x05, 0x1c, 0x04, 0x20, 0x6b, 0x46, + 0x1b, 0x18, 0x02, 0x90, 0x00, 0x26, 0x28, 0x18, + 0x6a, 0x46, 0x02, 0xa9, 0xfc, 0xf7, 0x8a, 0xfb, + 0x00, 0x28, 0x06, 0xd1, 0x00, 0xab, 0x18, 0x79, + 0x04, 0x28, 0x08, 0xd0, 0x18, 0x79, 0x03, 0x28, + 0x05, 0xd0, 0x00, 0xab, 0x18, 0x79, 0x10, 0x21, + 0x3c, 0x00, 0xf0, 0x0e, 0x01, 0x00, 0x08, 0x43, + 0x04, 0xb0, 0x70, 0xbd, 0x03, 0xa9, 0xe8, 0x68, + 0xf6, 0xf7, 0xd3, 0xff, 0x00, 0x28, 0x05, 0xd0, + 0x03, 0x98, 0x20, 0x21, 0x08, 0x43, 0x00, 0x06, + 0x00, 0x0e, 0xf1, 0xe7, 0x03, 0xa9, 0x00, 0x20, + 0xf6, 0xf7, 0xc7, 0xff, 0x04, 0x1c, 0x01, 0xd1, + 0x02, 0x20, 0xe9, 0xe7, 0xe8, 0x68, 0x00, 0xab, + 0x20, 0x60, 0x00, 0x98, 0x60, 0x60, 0x18, 0x79, + 0xa0, 0x76, 0x3c, 0x00, 0x2c, 0x0f, 0x01, 0x00, + 0xa8, 0x8c, 0x60, 0x76, 0xe8, 0x69, 0x20, 0x61, + 0x68, 0x8c, 0xa0, 0x82, 0x28, 0x8c, 0x20, 0x76, + 0x69, 0x69, 0x09, 0x48, 0x81, 0x42, 0x00, 0xd9, + 0x08, 0x1c, 0xa0, 0x60, 0x20, 0x1c, 0x02, 0xf0, + 0xa1, 0xfd, 0xa1, 0x68, 0x00, 0x29, 0x04, 0xd0, + 0x03, 0x9a, 0xa1, 0x32, 0x08, 0x20, 0x02, 0xf0, + 0x37, 0xfb, 0x30, 0x1c, 0xc7, 0xe7, 0x00, 0x00, + 0xa0, 0x86, 0x01, 0x00, 0x3c, 0x00, 0x68, 0x0f, + 0x01, 0x00, 0xfe, 0xb5, 0x06, 0x1c, 0x40, 0x78, + 0x01, 0x24, 0x06, 0x28, 0x50, 0xd3, 0xc1, 0x1e, + 0x03, 0x20, 0xef, 0xf7, 0x5e, 0xfb, 0x00, 0x90, + 0x0e, 0x28, 0x49, 0xd8, 0x00, 0x20, 0x0a, 0xe0, + 0x41, 0x00, 0x09, 0x18, 0x89, 0x19, 0x4a, 0x79, + 0x89, 0x79, 0x51, 0x18, 0x01, 0x39, 0x0e, 0x29, + 0x00, 0xd9, 0x00, 0x24, 0x01, 0x30, 0x00, 0x99, + 0x88, 0x42, 0xf1, 0xdb, 0x00, 0x2c, 0x3c, 0x00, + 0xa4, 0x0f, 0x01, 0x00, 0x37, 0xd0, 0x03, 0x22, + 0xb1, 0x1c, 0x1b, 0x48, 0xef, 0xf7, 0xa4, 0xfa, + 0x1a, 0x4c, 0x1c, 0x21, 0x20, 0x1c, 0xef, 0xf7, + 0x4d, 0xfa, 0x00, 0x25, 0x28, 0xe0, 0x69, 0x00, + 0x49, 0x19, 0x02, 0x91, 0x8a, 0x19, 0x53, 0x79, + 0x15, 0x48, 0x43, 0x54, 0x93, 0x79, 0x0f, 0x18, + 0x7b, 0x70, 0xd3, 0x79, 0xbb, 0x70, 0x07, 0x23, + 0xd2, 0x56, 0x01, 0x92, 0x44, 0x5c, 0x0f, 0xe0, + 0x3c, 0x00, 0xe0, 0x0f, 0x01, 0x00, 0x20, 0x1c, + 0xfe, 0xf7, 0x7b, 0xff, 0x00, 0x28, 0x07, 0xd0, + 0x0c, 0x4a, 0x60, 0x00, 0x80, 0x18, 0x01, 0x21, + 0x10, 0x38, 0x81, 0x73, 0x01, 0x99, 0xc1, 0x73, + 0x01, 0x34, 0x24, 0x06, 0x24, 0x0e, 0x07, 0x48, + 0x02, 0x99, 0x40, 0x5c, 0x79, 0x78, 0x40, 0x18, + 0xa0, 0x42, 0xe8, 0xd8, 0x01, 0x35, 0x00, 0x98, + 0x85, 0x42, 0xd3, 0xdb, 0xfe, 0xbd, 0xe8, 0x62, + 0x01, 0x00, 0x3c, 0x00, 0x1c, 0x10, 0x01, 0x00, + 0xe6, 0x78, 0x01, 0x00, 0xeb, 0x62, 0x01, 0x00, + 0x01, 0x68, 0x0f, 0x29, 0x01, 0xdd, 0x0f, 0x21, + 0x01, 0x60, 0x01, 0x68, 0x00, 0x29, 0x01, 0xda, + 0x00, 0x21, 0x01, 0x60, 0x70, 0x47, 0x00, 0x00, + 0xf8, 0xb5, 0x04, 0x1c, 0x1e, 0x48, 0x22, 0x1d, + 0x05, 0x68, 0x00, 0x92, 0x16, 0x1c, 0x23, 0x1c, + 0x0f, 0x1c, 0xcc, 0x33, 0x2a, 0x1c, 0x20, 0x1c, + 0x70, 0x30, 0xa1, 0x6d, 0x3c, 0x00, 0x58, 0x10, + 0x01, 0x00, 0x00, 0xf0, 0x3e, 0xf9, 0x00, 0x96, + 0xa1, 0x6d, 0x27, 0x20, 0x01, 0x40, 0x23, 0x1c, + 0xe4, 0x33, 0x20, 0x1c, 0x2a, 0x1c, 0x5c, 0x30, + 0x00, 0xf0, 0x33, 0xf9, 0x13, 0x48, 0x00, 0x78, + 0x0e, 0x28, 0x01, 0xd2, 0x01, 0x25, 0x85, 0x40, + 0x11, 0x48, 0xa1, 0x69, 0x00, 0x78, 0x29, 0x40, + 0x00, 0x07, 0x0b, 0xd4, 0x48, 0x07, 0x03, 0xd5, + 0x08, 0x07, 0x01, 0xd5, 0x04, 0x20, 0x3c, 0x00, + 0x94, 0x10, 0x01, 0x00, 0x81, 0x43, 0x88, 0x06, + 0x03, 0xd5, 0x48, 0x06, 0x01, 0xd5, 0x20, 0x20, + 0x81, 0x43, 0x23, 0x1c, 0xb4, 0x33, 0x2a, 0x1c, + 0x20, 0x1c, 0x30, 0x30, 0x00, 0x96, 0x00, 0xf0, + 0x13, 0xf9, 0x39, 0x1c, 0x20, 0x1c, 0xf0, 0xf7, + 0x47, 0xfc, 0xf8, 0xbd, 0x2c, 0x7d, 0x01, 0x00, + 0x10, 0x67, 0x01, 0x00, 0x1d, 0x75, 0x01, 0x00, + 0xb0, 0xb5, 0xf2, 0xf7, 0x27, 0xfc, 0xfe, 0xf7, + 0x3c, 0x00, 0xd0, 0x10, 0x01, 0x00, 0x09, 0xf9, + 0x0f, 0x48, 0x00, 0x25, 0x45, 0x70, 0x0e, 0x48, + 0x0d, 0x4c, 0x00, 0x88, 0x5b, 0x34, 0xa0, 0x82, + 0xf9, 0xf7, 0x23, 0xfd, 0x20, 0x61, 0xa0, 0x8a, + 0x00, 0x28, 0x04, 0xd0, 0x01, 0x21, 0x89, 0x05, + 0xef, 0xf7, 0x0d, 0xfb, 0xe1, 0x82, 0x05, 0x48, + 0x01, 0x38, 0x45, 0x60, 0x01, 0xf0, 0x55, 0xfe, + 0x02, 0x1c, 0x23, 0x1c, 0x00, 0x21, 0x00, 0x20, + 0xf4, 0xf7, 0x3c, 0x00, 0x0c, 0x11, 0x01, 0x00, + 0x49, 0xfd, 0xb0, 0xbd, 0x45, 0x7d, 0x01, 0x00, + 0xf4, 0x67, 0x01, 0x00, 0x70, 0xb5, 0x16, 0x1c, + 0x5a, 0x89, 0x04, 0x1c, 0x04, 0x98, 0x92, 0x07, + 0x92, 0x0f, 0x00, 0x25, 0x00, 0x29, 0xa2, 0x71, + 0x09, 0xd0, 0x05, 0x21, 0xf9, 0xf7, 0x24, 0xfb, + 0x00, 0x28, 0x01, 0xd0, 0xc0, 0x78, 0x00, 0xe0, + 0x01, 0x20, 0xe0, 0x71, 0x00, 0xe0, 0xe5, 0x71, + 0xe5, 0x60, 0xa6, 0x60, 0x3c, 0x00, 0x48, 0x11, + 0x01, 0x00, 0x70, 0xbd, 0x00, 0x00, 0xfe, 0xb5, + 0x05, 0x1c, 0x0e, 0x22, 0x9c, 0x30, 0x16, 0x49, + 0xef, 0xf7, 0xcf, 0xf9, 0x29, 0x1c, 0x28, 0x1c, + 0x80, 0x30, 0x88, 0x31, 0x00, 0x24, 0x2f, 0x1c, + 0x60, 0x37, 0x02, 0x91, 0x01, 0x90, 0x20, 0x06, + 0x00, 0x0e, 0x06, 0x1c, 0xf9, 0xf7, 0x0d, 0xfe, + 0x00, 0x28, 0x03, 0xd0, 0x01, 0x98, 0x42, 0x68, + 0x02, 0x99, 0x01, 0xe0, 0xea, 0x6d, 0x3c, 0x00, + 0x84, 0x11, 0x01, 0x00, 0x39, 0x1c, 0x00, 0x2a, + 0x0d, 0xd0, 0x00, 0x20, 0x03, 0xe0, 0x0b, 0x5c, + 0xb3, 0x42, 0x02, 0xd8, 0x01, 0x30, 0x90, 0x42, + 0xf9, 0xdb, 0x08, 0x18, 0x10, 0x38, 0xc0, 0x7b, + 0x29, 0x19, 0x90, 0x31, 0x08, 0x73, 0x01, 0x34, + 0x0e, 0x2c, 0xdf, 0xd3, 0xfe, 0xbd, 0x00, 0x00, + 0xcc, 0x47, 0x01, 0x00, 0xff, 0xb5, 0x81, 0xb0, + 0x14, 0x1c, 0x10, 0x1c, 0x06, 0x22, 0x0d, 0x1c, + 0x3c, 0x00, 0xc0, 0x11, 0x01, 0x00, 0x19, 0x1c, + 0x0b, 0x9e, 0x0a, 0x9f, 0xef, 0xf7, 0x97, 0xf9, + 0x06, 0x22, 0x39, 0x1c, 0xa0, 0x18, 0xef, 0xf7, + 0x92, 0xf9, 0xe6, 0x60, 0x2c, 0x60, 0x10, 0x20, + 0x28, 0x81, 0x6e, 0x60, 0x01, 0x98, 0xe8, 0x60, + 0x05, 0xb0, 0xf0, 0xbd, 0x00, 0x00, 0x70, 0xb5, + 0x04, 0x1c, 0x00, 0x20, 0x20, 0x61, 0x58, 0x20, + 0x00, 0x5d, 0x0e, 0x1c, 0x15, 0x1c, 0xc0, 0x07, + 0xc0, 0x17, 0x3c, 0x00, 0xfc, 0x11, 0x01, 0x00, + 0x01, 0x30, 0xe0, 0x61, 0x21, 0x6b, 0x00, 0x29, + 0x36, 0xd1, 0x1e, 0x49, 0x09, 0x68, 0x29, 0x43, + 0x32, 0xd0, 0xa1, 0x68, 0x89, 0x8a, 0x00, 0x29, + 0x2e, 0xd0, 0x00, 0x28, 0x0b, 0xd0, 0x20, 0x1c, + 0x58, 0x30, 0x00, 0xf0, 0xf3, 0xfd, 0x00, 0x28, + 0x1b, 0xd0, 0x81, 0x6a, 0x02, 0x6a, 0x40, 0x6a, + 0x09, 0x78, 0x00, 0x78, 0x06, 0xe0, 0x14, 0x4a, + 0x3c, 0x23, 0x11, 0x78, 0x3c, 0x00, 0x38, 0x12, + 0x01, 0x00, 0x50, 0x78, 0x43, 0x43, 0x9a, 0x18, + 0x04, 0x32, 0x00, 0x2d, 0x03, 0xd1, 0x02, 0x29, + 0x01, 0xd0, 0x03, 0x29, 0x02, 0xd1, 0x6d, 0x21, + 0x22, 0x61, 0x08, 0x55, 0x20, 0x69, 0x00, 0x28, + 0x0d, 0xd0, 0x81, 0x88, 0x00, 0x29, 0x01, 0xd1, + 0x01, 0x20, 0x70, 0xbd, 0x80, 0x79, 0x02, 0x28, + 0x05, 0xd1, 0x22, 0x1c, 0x07, 0x49, 0x07, 0x48, + 0xf8, 0xf7, 0x4b, 0xff, 0x02, 0xe0, 0x3c, 0x00, + 0x74, 0x12, 0x01, 0x00, 0x20, 0x1c, 0xef, 0xf7, + 0xb5, 0xf8, 0x00, 0x20, 0x70, 0xbd, 0x00, 0x00, + 0x28, 0x61, 0x01, 0x00, 0x68, 0x61, 0x01, 0x00, + 0xa1, 0xda, 0x00, 0x00, 0xa0, 0x6a, 0x01, 0x00, + 0x10, 0xb5, 0x00, 0x21, 0x00, 0x20, 0xf9, 0xf7, + 0x39, 0xfe, 0xc4, 0x00, 0xf9, 0xf7, 0x54, 0xfe, + 0x24, 0x18, 0xf9, 0xf7, 0x47, 0xfe, 0x08, 0x49, + 0x20, 0x18, 0x09, 0x88, 0x08, 0x4c, 0x40, 0x18, + 0x3c, 0x00, 0xb0, 0x12, 0x01, 0x00, 0x06, 0x49, + 0x09, 0x88, 0x40, 0x18, 0x60, 0x61, 0xf9, 0xf7, + 0x46, 0xfe, 0x05, 0x49, 0x09, 0x88, 0x40, 0x18, + 0x40, 0x00, 0xa0, 0x61, 0x10, 0xbd, 0x02, 0x61, + 0x01, 0x00, 0x04, 0x61, 0x01, 0x00, 0xd4, 0x79, + 0x01, 0x00, 0xa6, 0x69, 0x01, 0x00, 0x11, 0x40, + 0x08, 0x1c, 0x10, 0xb5, 0x1c, 0x1c, 0x19, 0x1c, + 0x08, 0x31, 0x18, 0x60, 0xf1, 0xf7, 0x31, 0xfe, + 0x60, 0x60, 0x3c, 0x00, 0xec, 0x12, 0x01, 0x00, + 0x10, 0xbd, 0x00, 0x00, 0xf8, 0xb5, 0x06, 0x1c, + 0x22, 0x48, 0x0f, 0x1c, 0x41, 0x68, 0x91, 0x42, + 0x03, 0xd0, 0x00, 0x21, 0x81, 0x60, 0xc1, 0x60, + 0x42, 0x60, 0xc4, 0x68, 0x15, 0xe0, 0x28, 0x20, + 0x1d, 0x49, 0x60, 0x43, 0x40, 0x18, 0x05, 0x1c, + 0x06, 0x22, 0x31, 0x1c, 0xef, 0xf7, 0x70, 0xf8, + 0x00, 0x28, 0x07, 0xd1, 0xa8, 0x1d, 0x39, 0x1c, + 0xf9, 0xf7, 0x10, 0xfd, 0x3c, 0x00, 0x28, 0x13, + 0x01, 0x00, 0x00, 0x28, 0x01, 0xd0, 0x01, 0x20, + 0xf8, 0xbd, 0x01, 0x34, 0x24, 0x07, 0x24, 0x0f, + 0x12, 0x48, 0x80, 0x68, 0x84, 0x42, 0xe5, 0xd1, + 0x10, 0x4c, 0x28, 0x23, 0xa0, 0x68, 0x0f, 0x4d, + 0x58, 0x43, 0x40, 0x19, 0x06, 0x22, 0x31, 0x1c, + 0xef, 0xf7, 0xd3, 0xf8, 0xa0, 0x68, 0x28, 0x23, + 0x58, 0x43, 0x40, 0x19, 0x06, 0x30, 0x22, 0x22, + 0x39, 0x1c, 0xef, 0xf7, 0xca, 0xf8, 0x3c, 0x00, + 0x64, 0x13, 0x01, 0x00, 0xa0, 0x68, 0x01, 0x30, + 0x00, 0x07, 0x00, 0x0f, 0xa0, 0x60, 0xe1, 0x68, + 0x81, 0x42, 0x03, 0xd1, 0x01, 0x31, 0x08, 0x07, + 0x00, 0x0f, 0xe0, 0x60, 0x00, 0x20, 0xd6, 0xe7, + 0xec, 0x65, 0x01, 0x00, 0xa0, 0xf4, 0x01, 0x00, + 0x10, 0xb5, 0x00, 0x21, 0x03, 0x20, 0x00, 0xf0, + 0xe5, 0xff, 0x05, 0x4c, 0xa0, 0x68, 0x00, 0x28, + 0x04, 0xd1, 0x01, 0xf0, 0x07, 0xfd, 0x61, 0x68, + 0x3c, 0x00, 0xa0, 0x13, 0x01, 0x00, 0x40, 0x1a, + 0x60, 0x60, 0x10, 0xbd, 0x00, 0x00, 0xd0, 0x60, + 0x01, 0x00, 0x02, 0x68, 0x0a, 0x60, 0x01, 0x60, + 0x70, 0x47, 0x01, 0x1c, 0x00, 0x68, 0x00, 0x28, + 0x01, 0xd0, 0x02, 0x68, 0x0a, 0x60, 0x70, 0x47, + 0x00, 0x00, 0xfe, 0xb5, 0x14, 0x1c, 0x1d, 0x1c, + 0x00, 0x22, 0xd2, 0x43, 0x01, 0xab, 0xf3, 0xf7, + 0x82, 0xff, 0x01, 0x98, 0x00, 0x26, 0x28, 0x40, + 0x01, 0x90, 0x3c, 0x00, 0xdc, 0x13, 0x01, 0x00, + 0x00, 0x25, 0x00, 0x27, 0x20, 0x60, 0x1e, 0xe0, + 0x01, 0x21, 0xb9, 0x40, 0x0a, 0x1c, 0x02, 0x40, + 0x18, 0xd0, 0x88, 0x43, 0x01, 0x90, 0x39, 0x06, + 0x09, 0x0e, 0x70, 0x19, 0x00, 0x19, 0x02, 0x91, + 0x01, 0x77, 0x08, 0x1c, 0xf9, 0xf7, 0xc6, 0xfc, + 0x00, 0x28, 0x06, 0xd0, 0x30, 0x1c, 0x00, 0x19, + 0x01, 0x36, 0x02, 0x99, 0x30, 0x30, 0x01, 0x70, + 0x04, 0xe0, 0x28, 0x1c, 0x3c, 0x00, 0x18, 0x14, + 0x01, 0x00, 0x01, 0x35, 0x02, 0x99, 0x00, 0x19, + 0x01, 0x72, 0x01, 0x37, 0x01, 0x98, 0x00, 0x28, + 0xdd, 0xd1, 0x70, 0x19, 0xa0, 0x61, 0x65, 0x60, + 0xe6, 0x62, 0xfe, 0xbd, 0x00, 0x00, 0xb0, 0xb5, + 0x14, 0x4d, 0x04, 0x1c, 0x28, 0x7a, 0x01, 0x28, + 0x02, 0xd1, 0x04, 0x20, 0xf6, 0xf7, 0xad, 0xf9, + 0x21, 0x1c, 0xa8, 0x6a, 0xf5, 0xf7, 0x21, 0xfc, + 0x00, 0x28, 0x03, 0xd1, 0x04, 0x20, 0x3c, 0x00, + 0x54, 0x14, 0x01, 0x00, 0xf6, 0xf7, 0xa4, 0xf9, + 0xb0, 0xbd, 0x02, 0x20, 0x28, 0x70, 0x28, 0x8c, + 0x00, 0x28, 0x00, 0xd0, 0x60, 0x81, 0x68, 0x8c, + 0x00, 0x28, 0x00, 0xd0, 0xa0, 0x81, 0xa8, 0x8c, + 0x00, 0x28, 0x00, 0xd0, 0xe0, 0x81, 0xe8, 0x69, + 0x01, 0x23, 0x02, 0x04, 0x12, 0x0c, 0x20, 0x1c, + 0x02, 0x49, 0xfc, 0xf7, 0x19, 0xff, 0xb0, 0xbd, + 0xf4, 0x6e, 0x01, 0x00, 0xa1, 0x77, 0x00, 0x00, + 0x3c, 0x00, 0x90, 0x14, 0x01, 0x00, 0xf8, 0xb5, + 0x19, 0x4e, 0x05, 0x1c, 0xb0, 0x69, 0x00, 0x28, + 0x00, 0xd1, 0x30, 0x68, 0xff, 0xf7, 0x3b, 0xfc, + 0x15, 0x4f, 0x04, 0x1c, 0x50, 0x37, 0x00, 0x28, + 0x0b, 0xd0, 0x60, 0x68, 0x29, 0x1c, 0x78, 0x60, + 0x01, 0x20, 0x38, 0x63, 0x20, 0x1c, 0xf5, 0xf7, + 0xea, 0xfb, 0x00, 0x28, 0x04, 0xd1, 0x00, 0x20, + 0xf8, 0xbd, 0x00, 0x23, 0xfb, 0x62, 0xfa, 0xe7, + 0x00, 0x23, 0x3c, 0x00, 0xcc, 0x14, 0x01, 0x00, + 0x23, 0x77, 0xf8, 0x6a, 0x00, 0x28, 0x01, 0xd1, + 0x01, 0x20, 0xf8, 0x62, 0x38, 0x7a, 0x01, 0x28, + 0x07, 0xd0, 0xf8, 0x69, 0x06, 0x49, 0x02, 0x04, + 0x12, 0x0c, 0x28, 0x1c, 0xfc, 0xf7, 0xe6, 0xfe, + 0x01, 0xe0, 0xfb, 0x62, 0xb3, 0x61, 0x01, 0x20, + 0xe5, 0xe7, 0x00, 0x00, 0xa4, 0x6e, 0x01, 0x00, + 0xdd, 0x02, 0x01, 0x00, 0x70, 0xb5, 0x0d, 0x1c, + 0x04, 0x1c, 0x16, 0x1c, 0x3c, 0x00, 0x08, 0x15, + 0x01, 0x00, 0x04, 0x2c, 0x1b, 0xd2, 0x10, 0x48, + 0x83, 0x42, 0x07, 0xd2, 0x58, 0x00, 0x0f, 0x49, + 0xef, 0xf7, 0xfb, 0xf8, 0xff, 0x30, 0x00, 0x0a, + 0x01, 0x38, 0x00, 0xe0, 0x00, 0x20, 0x1f, 0x35, + 0xea, 0x06, 0x61, 0x07, 0x09, 0x0e, 0xd2, 0x0e, + 0x11, 0x43, 0x72, 0x07, 0x52, 0x0d, 0x11, 0x43, + 0x00, 0x06, 0x00, 0x0a, 0x08, 0x43, 0x06, 0x4a, + 0xa1, 0x00, 0x50, 0x50, 0x70, 0xbd, 0x3c, 0x00, + 0x44, 0x15, 0x01, 0x00, 0x01, 0x21, 0x8d, 0x20, + 0xef, 0xf7, 0xac, 0xfe, 0x70, 0xbd, 0x00, 0x00, + 0x40, 0x9c, 0x00, 0x00, 0x00, 0x80, 0x38, 0x01, + 0xe8, 0x60, 0x01, 0x00, 0x09, 0x4a, 0x80, 0x00, + 0x10, 0x58, 0x40, 0x09, 0x40, 0x01, 0x07, 0x22, + 0x02, 0x43, 0x07, 0x48, 0x03, 0x68, 0x00, 0x2b, + 0xfc, 0xdb, 0x42, 0x60, 0x09, 0x06, 0x01, 0x60, + 0x01, 0x68, 0x00, 0x29, 0xfc, 0xdb, 0x08, 0x20, + 0x3c, 0x00, 0x80, 0x15, 0x01, 0x00, 0x70, 0x47, + 0x00, 0x00, 0xe8, 0x60, 0x01, 0x00, 0x30, 0x20, + 0x07, 0x00, 0xb0, 0xb5, 0x04, 0x1c, 0x0d, 0x1c, + 0x07, 0x49, 0xa0, 0x00, 0x08, 0x58, 0x00, 0x28, + 0x03, 0xd1, 0x02, 0x21, 0x8d, 0x20, 0xef, 0xf7, + 0x80, 0xfe, 0x29, 0x1c, 0x20, 0x1c, 0xf6, 0xf7, + 0xa8, 0xfa, 0xb0, 0xbd, 0x00, 0x00, 0xe8, 0x60, + 0x01, 0x00, 0xb0, 0xb5, 0x04, 0x1c, 0x0d, 0x1c, + 0x07, 0x49, 0x3c, 0x00, 0xbc, 0x15, 0x01, 0x00, + 0xa0, 0x00, 0x08, 0x58, 0x00, 0x28, 0x03, 0xd1, + 0x02, 0x21, 0x8d, 0x20, 0xef, 0xf7, 0x6c, 0xfe, + 0x29, 0x1c, 0x20, 0x1c, 0xff, 0xf7, 0xc4, 0xff, + 0xb0, 0xbd, 0x00, 0x00, 0xe8, 0x60, 0x01, 0x00, + 0xf8, 0xb5, 0x0d, 0x1c, 0x16, 0x1c, 0xf7, 0xf7, + 0x17, 0xf9, 0x04, 0x1c, 0x28, 0x68, 0x40, 0x4f, + 0x81, 0x78, 0x00, 0x29, 0x3b, 0xd1, 0xc1, 0x78, + 0x00, 0x29, 0x58, 0xd1, 0x3c, 0x00, 0xf8, 0x15, + 0x01, 0x00, 0xf8, 0xf7, 0xf8, 0xf9, 0x22, 0x8e, + 0x61, 0x8e, 0x8a, 0x42, 0x04, 0xd0, 0xa1, 0x6a, + 0x09, 0x18, 0xe0, 0x69, 0x81, 0x42, 0x10, 0xd9, + 0x38, 0x49, 0x32, 0x1c, 0x48, 0x6b, 0x01, 0x30, + 0x48, 0x63, 0x20, 0x6a, 0x01, 0x30, 0x20, 0x62, + 0x38, 0x68, 0x01, 0x30, 0x38, 0x60, 0xe0, 0x68, + 0x63, 0x69, 0x29, 0x1c, 0xee, 0xf7, 0xd8, 0xfe, + 0xf8, 0xbd, 0x01, 0x32, 0x12, 0x04, 0x3c, 0x00, + 0x34, 0x16, 0x01, 0x00, 0x12, 0x0c, 0x22, 0x86, + 0xa1, 0x62, 0xb8, 0x68, 0x00, 0x28, 0x34, 0xd1, + 0x2c, 0x48, 0x0c, 0x23, 0x00, 0x68, 0x1b, 0x1a, + 0x9a, 0x42, 0x07, 0xd2, 0x19, 0x23, 0x9b, 0x01, + 0xaf, 0x22, 0x92, 0x01, 0x58, 0x43, 0x10, 0x1a, + 0x81, 0x42, 0x26, 0xd3, 0x01, 0x20, 0xb8, 0x60, + 0x01, 0x21, 0x0c, 0x20, 0x00, 0xf0, 0x7a, 0xfe, + 0x1f, 0xe0, 0x01, 0x29, 0x1d, 0xd1, 0xc0, 0x78, + 0x3c, 0x00, 0x70, 0x16, 0x01, 0x00, 0x17, 0x28, + 0x1a, 0xd1, 0xa0, 0x8e, 0xe1, 0x8e, 0x88, 0x42, + 0x14, 0xd3, 0xe9, 0x68, 0x09, 0x68, 0x09, 0x79, + 0x09, 0x06, 0x0f, 0xd5, 0x60, 0x6a, 0x32, 0x1c, + 0x01, 0x30, 0x60, 0x62, 0xe0, 0x68, 0x63, 0x69, + 0x29, 0x1c, 0xee, 0xf7, 0xa3, 0xfe, 0xe8, 0x68, + 0x01, 0x68, 0x08, 0x31, 0x0b, 0x20, 0x00, 0xf0, + 0x5c, 0xfe, 0xc3, 0xe7, 0x01, 0x30, 0xa0, 0x86, + 0xa0, 0x8d, 0x3c, 0x00, 0xac, 0x16, 0x01, 0x00, + 0xe1, 0x8d, 0x88, 0x42, 0x04, 0xd1, 0x03, 0x21, + 0x02, 0x20, 0xef, 0xf7, 0xf5, 0xfd, 0xb8, 0xe7, + 0x60, 0x68, 0x45, 0x60, 0x86, 0x60, 0x00, 0x68, + 0x60, 0x60, 0xf8, 0x68, 0x01, 0x30, 0xf8, 0x60, + 0xa0, 0x8d, 0x41, 0x1c, 0xa1, 0x85, 0x00, 0x28, + 0xab, 0xd1, 0x08, 0x48, 0xb9, 0x69, 0xfd, 0xf7, + 0x61, 0xfe, 0x22, 0x1c, 0x02, 0x21, 0xf1, 0x20, + 0x02, 0xf0, 0x64, 0xf8, 0x3c, 0x00, 0xe8, 0x16, + 0x01, 0x00, 0xa1, 0xe7, 0x00, 0x00, 0xfc, 0x5a, + 0x01, 0x00, 0x90, 0x5c, 0x01, 0x00, 0x18, 0x57, + 0x01, 0x00, 0xc4, 0x60, 0x01, 0x00, 0x80, 0xb5, + 0x02, 0x1c, 0x02, 0x21, 0xf0, 0x20, 0x02, 0xf0, + 0x54, 0xf8, 0x80, 0xbd, 0x00, 0x00, 0x00, 0x28, + 0x03, 0xd1, 0x02, 0x48, 0x41, 0x78, 0xc9, 0x07, + 0xfc, 0xd5, 0x70, 0x47, 0x00, 0x00, 0x04, 0x00, + 0x07, 0x00, 0x80, 0xb5, 0x00, 0x06, 0x3c, 0x00, + 0x24, 0x17, 0x01, 0x00, 0x01, 0xd1, 0xf1, 0xf7, + 0x71, 0xfe, 0x80, 0xbd, 0x80, 0xb5, 0xf4, 0xf7, + 0xe5, 0xfa, 0x80, 0xbd, 0x80, 0xb5, 0xf6, 0xf7, + 0xeb, 0xf8, 0x80, 0xbd, 0x01, 0x49, 0x00, 0x20, + 0x08, 0x74, 0x70, 0x47, 0x78, 0x69, 0x01, 0x00, + 0x80, 0xb5, 0xc0, 0x07, 0x03, 0xd5, 0x02, 0x49, + 0x01, 0x20, 0x00, 0xf0, 0x1d, 0xfc, 0x80, 0xbd, + 0x50, 0xc3, 0x00, 0x00, 0x00, 0x06, 0x00, 0x0e, + 0x3c, 0x00, 0x60, 0x17, 0x01, 0x00, 0x01, 0x28, + 0x80, 0xb5, 0x02, 0xd1, 0xf6, 0xf7, 0xe1, 0xf9, + 0x80, 0xbd, 0x00, 0x28, 0xfc, 0xd1, 0xf1, 0xf7, + 0x4c, 0xfe, 0x80, 0xbd, 0x00, 0x00, 0x80, 0xb5, + 0xf6, 0xf7, 0xd7, 0xf9, 0x80, 0xbd, 0x03, 0x49, + 0x80, 0xb5, 0x00, 0x20, 0x08, 0x74, 0xf6, 0xf7, + 0xfe, 0xf9, 0x80, 0xbd, 0x00, 0x00, 0x78, 0x69, + 0x01, 0x00, 0x80, 0xb5, 0x00, 0x06, 0x00, 0x0e, + 0xf1, 0xf7, 0x3c, 0x00, 0x9c, 0x17, 0x01, 0x00, + 0x71, 0xfe, 0x80, 0xbd, 0x10, 0xb5, 0x01, 0x28, + 0x08, 0xd0, 0x02, 0x28, 0x03, 0xd0, 0x03, 0x28, + 0x01, 0xd0, 0xef, 0xf7, 0xa7, 0xfd, 0xf6, 0xf7, + 0xe9, 0xf9, 0x10, 0xbd, 0x01, 0xf0, 0xf8, 0xfa, + 0x04, 0x1c, 0xfa, 0xf7, 0x5d, 0xfd, 0x24, 0x1a, + 0xfa, 0xf7, 0x3e, 0xfd, 0x08, 0x49, 0x00, 0x28, + 0x0b, 0xd0, 0x48, 0x6a, 0x00, 0x28, 0x08, 0xd0, + 0x06, 0x48, 0x84, 0x42, 0x3c, 0x00, 0xd8, 0x17, + 0x01, 0x00, 0x05, 0xd2, 0x01, 0x1b, 0x01, 0x22, + 0x07, 0x20, 0x01, 0xf0, 0xf4, 0xfe, 0xe5, 0xe7, + 0x00, 0x20, 0x48, 0x61, 0xe2, 0xe7, 0x78, 0x69, + 0x01, 0x00, 0x50, 0xc3, 0x00, 0x00, 0x09, 0x49, + 0x80, 0xb5, 0x48, 0x69, 0x00, 0x28, 0x0c, 0xd0, + 0x08, 0x6a, 0xca, 0x69, 0x80, 0x1a, 0x00, 0x28, + 0x07, 0xdd, 0x00, 0x20, 0x48, 0x61, 0x01, 0x21, + 0x07, 0x20, 0x01, 0xf0, 0x10, 0xff, 0x3c, 0x00, + 0x14, 0x18, 0x01, 0x00, 0xf6, 0xf7, 0xb8, 0xf9, + 0x80, 0xbd, 0x00, 0x00, 0x78, 0x69, 0x01, 0x00, + 0x80, 0xb5, 0x00, 0xf0, 0xe7, 0xfb, 0x80, 0xbd, + 0x80, 0xb5, 0x00, 0xf0, 0x3f, 0xfc, 0x00, 0x20, + 0xf7, 0xf7, 0xd4, 0xfc, 0x80, 0xbd, 0x00, 0x00, + 0x80, 0xb5, 0x00, 0xf0, 0x37, 0xfc, 0xfd, 0xf7, + 0x6f, 0xfc, 0xf5, 0xf7, 0x73, 0xfd, 0x30, 0xf0, + 0x47, 0xfb, 0x80, 0xbd, 0x04, 0x48, 0x80, 0xb5, + 0x3c, 0x00, 0x50, 0x18, 0x01, 0x00, 0xc1, 0x6a, + 0x00, 0x6b, 0xf2, 0xf7, 0xde, 0xff, 0x01, 0x20, + 0xf7, 0xf7, 0x89, 0xf8, 0x80, 0xbd, 0xa4, 0x6c, + 0x01, 0x00, 0x10, 0xb5, 0xf3, 0xf7, 0x41, 0xf8, + 0x0d, 0x4c, 0x00, 0x28, 0x04, 0xd0, 0x01, 0x20, + 0xe0, 0x64, 0xf7, 0xf7, 0xb2, 0xfc, 0x10, 0xbd, + 0x01, 0x21, 0x01, 0x20, 0xf3, 0xf7, 0xe9, 0xf8, + 0xfd, 0xf7, 0x4d, 0xfc, 0x60, 0x6d, 0x00, 0x28, + 0x03, 0xd0, 0x3c, 0x00, 0x8c, 0x18, 0x01, 0x00, + 0xf3, 0xf7, 0x82, 0xf8, 0x00, 0x28, 0x01, 0xd0, + 0xf5, 0xf7, 0x4a, 0xfd, 0x01, 0x20, 0xf2, 0xf7, + 0xc1, 0xfc, 0x10, 0xbd, 0xa4, 0x6c, 0x01, 0x00, + 0x04, 0x48, 0x80, 0xb5, 0xc1, 0x6a, 0x00, 0x6b, + 0xf2, 0xf7, 0xb2, 0xff, 0x01, 0x20, 0xf7, 0xf7, + 0x5d, 0xf8, 0x80, 0xbd, 0xa4, 0x6c, 0x01, 0x00, + 0x80, 0xb5, 0x00, 0xf0, 0xf5, 0xfb, 0xf5, 0xf7, + 0x33, 0xfd, 0xfc, 0xf7, 0x3c, 0x00, 0xc8, 0x18, + 0x01, 0x00, 0x31, 0xfd, 0xf9, 0xf7, 0xcb, 0xff, + 0x04, 0x20, 0xf2, 0xf7, 0xa6, 0xfc, 0x80, 0xbd, + 0x00, 0x00, 0x03, 0x48, 0x80, 0xb5, 0xc1, 0x6a, + 0x00, 0x6b, 0xf2, 0xf7, 0x98, 0xff, 0x80, 0xbd, + 0x00, 0x00, 0xa4, 0x6c, 0x01, 0x00, 0x80, 0xb5, + 0x00, 0xf0, 0xdd, 0xfb, 0x00, 0x20, 0xf7, 0xf7, + 0x3c, 0xf8, 0x30, 0xf0, 0xee, 0xfa, 0x80, 0xbd, + 0x00, 0x00, 0x80, 0xb5, 0x00, 0x21, 0x3c, 0x00, + 0x04, 0x19, 0x01, 0x00, 0x01, 0x20, 0xff, 0xf7, + 0x19, 0xfa, 0x01, 0x20, 0xf2, 0xf7, 0x88, 0xfc, + 0x80, 0xbd, 0x00, 0x00, 0x80, 0xb5, 0x00, 0xf0, + 0xc9, 0xfb, 0xfc, 0xf7, 0x07, 0xfd, 0x01, 0x21, + 0x01, 0x20, 0xff, 0xf7, 0x0b, 0xfa, 0x04, 0x20, + 0xf2, 0xf7, 0x7a, 0xfc, 0x80, 0xbd, 0x00, 0x00, + 0x80, 0xb5, 0x00, 0x22, 0x00, 0x21, 0x00, 0x20, + 0x00, 0xf0, 0x8a, 0xfb, 0x80, 0xbd, 0x00, 0x00, + 0x3c, 0x00, 0x40, 0x19, 0x01, 0x00, 0x03, 0x48, + 0x80, 0xb5, 0x82, 0x6a, 0x01, 0x21, 0x04, 0x20, + 0x00, 0xf0, 0x81, 0xfb, 0x80, 0xbd, 0xd4, 0x79, + 0x01, 0x00, 0x80, 0xb5, 0x00, 0x22, 0x00, 0x21, + 0x03, 0x20, 0x00, 0xf0, 0x78, 0xfb, 0x80, 0xbd, + 0x00, 0x00, 0x03, 0x48, 0x80, 0xb5, 0x82, 0x6a, + 0x01, 0x21, 0x04, 0x20, 0x00, 0xf0, 0x6f, 0xfb, + 0x80, 0xbd, 0xd4, 0x79, 0x01, 0x00, 0x80, 0xb5, + 0x00, 0x22, 0x3c, 0x00, 0x7c, 0x19, 0x01, 0x00, + 0x00, 0x21, 0x03, 0x20, 0x00, 0xf0, 0x66, 0xfb, + 0x80, 0xbd, 0x00, 0x00, 0x06, 0x48, 0x80, 0xb5, + 0x81, 0x68, 0x42, 0x69, 0x00, 0x69, 0x51, 0x18, + 0x81, 0x42, 0x03, 0xd9, 0x01, 0x21, 0x01, 0x20, + 0x00, 0xf0, 0x58, 0xfb, 0x80, 0xbd, 0x00, 0x00, + 0xd4, 0x79, 0x01, 0x00, 0x06, 0x48, 0x80, 0xb5, + 0x82, 0x88, 0x81, 0x68, 0x00, 0x69, 0x51, 0x18, + 0x81, 0x42, 0x03, 0xd9, 0x3c, 0x00, 0xb8, 0x19, + 0x01, 0x00, 0x01, 0x21, 0x02, 0x20, 0x00, 0xf0, + 0x48, 0xfb, 0x80, 0xbd, 0x00, 0x00, 0xd4, 0x79, + 0x01, 0x00, 0x10, 0xb5, 0x08, 0x4c, 0x20, 0x7b, + 0x21, 0x6a, 0xf9, 0xf7, 0x9c, 0xfa, 0xa1, 0x69, + 0x42, 0x18, 0xa0, 0x68, 0x21, 0x69, 0x80, 0x18, + 0x88, 0x42, 0x03, 0xd9, 0x01, 0x21, 0x02, 0x20, + 0x00, 0xf0, 0x33, 0xfb, 0x10, 0xbd, 0xd4, 0x79, + 0x01, 0x00, 0x80, 0xb5, 0x00, 0x22, 0x3c, 0x00, + 0xf4, 0x19, 0x01, 0x00, 0x00, 0x21, 0x00, 0x20, + 0x00, 0xf0, 0x2a, 0xfb, 0x80, 0xbd, 0x00, 0x00, + 0x00, 0x06, 0x00, 0x0e, 0x01, 0x28, 0x80, 0xb5, + 0x02, 0xd1, 0xf6, 0xf7, 0x8f, 0xf8, 0x80, 0xbd, + 0x00, 0x28, 0xfc, 0xd1, 0xf1, 0xf7, 0xfa, 0xfc, + 0x80, 0xbd, 0x00, 0x00, 0x80, 0xb5, 0xf6, 0xf7, + 0x85, 0xf8, 0x80, 0xbd, 0x80, 0xb5, 0x00, 0x06, + 0x00, 0x0e, 0xf1, 0xf7, 0x29, 0xfd, 0x80, 0xbd, + 0x3c, 0x00, 0x30, 0x1a, 0x01, 0x00, 0xb0, 0xb5, + 0x02, 0x25, 0x02, 0x28, 0x10, 0x4c, 0x0b, 0xd1, + 0xfb, 0xf7, 0x47, 0xfc, 0x00, 0x28, 0x01, 0xd1, + 0xfe, 0xf7, 0x4f, 0xff, 0x25, 0x70, 0xa1, 0x68, + 0x0c, 0x48, 0xfd, 0xf7, 0xa8, 0xfc, 0xb0, 0xbd, + 0x03, 0x28, 0x0d, 0xd1, 0x08, 0x48, 0x7d, 0x23, + 0x1c, 0x38, 0x00, 0x69, 0xdb, 0x00, 0x58, 0x43, + 0x19, 0x1c, 0x40, 0x18, 0x41, 0x08, 0x02, 0x20, + 0x00, 0xf0, 0x3c, 0x00, 0x6c, 0x1a, 0x01, 0x00, + 0x91, 0xfa, 0x25, 0x70, 0xb0, 0xbd, 0xf8, 0xf7, + 0x31, 0xf9, 0xb0, 0xbd, 0x78, 0x69, 0x01, 0x00, + 0x34, 0x63, 0x01, 0x00, 0x10, 0xb5, 0x05, 0x4c, + 0xe0, 0x68, 0x00, 0x28, 0x01, 0xd1, 0xef, 0xf7, + 0x39, 0xfc, 0x02, 0x20, 0x20, 0x70, 0x00, 0xf0, + 0xaf, 0xfa, 0x10, 0xbd, 0x78, 0x69, 0x01, 0x00, + 0x03, 0x48, 0x80, 0xb5, 0x82, 0x6a, 0x01, 0x21, + 0x04, 0x20, 0x00, 0xf0, 0x3c, 0x00, 0xa8, 0x1a, + 0x01, 0x00, 0xd3, 0xfa, 0x80, 0xbd, 0xd4, 0x79, + 0x01, 0x00, 0x80, 0xb5, 0x00, 0x22, 0x00, 0x21, + 0x03, 0x20, 0x00, 0xf0, 0xca, 0xfa, 0x80, 0xbd, + 0x00, 0x00, 0x80, 0xb5, 0x00, 0x22, 0x00, 0x21, + 0x00, 0x20, 0x00, 0xf0, 0xc2, 0xfa, 0x80, 0xbd, + 0x00, 0x00, 0x03, 0x48, 0x80, 0xb5, 0x42, 0x69, + 0x01, 0x21, 0x01, 0x20, 0x00, 0xf0, 0xb9, 0xfa, + 0x80, 0xbd, 0xd4, 0x79, 0x01, 0x00, 0x3c, 0x00, + 0xe4, 0x1a, 0x01, 0x00, 0x06, 0x48, 0x80, 0xb5, + 0x82, 0x88, 0x00, 0x2a, 0x02, 0xd0, 0x01, 0x21, + 0x02, 0x20, 0x02, 0xe0, 0x00, 0x22, 0x00, 0x21, + 0x00, 0x20, 0x00, 0xf0, 0xa9, 0xfa, 0x80, 0xbd, + 0xd4, 0x79, 0x01, 0x00, 0x10, 0xb5, 0x06, 0x4c, + 0x20, 0x7b, 0x21, 0x6a, 0xf9, 0xf7, 0xfe, 0xf9, + 0xa1, 0x69, 0x42, 0x18, 0x01, 0x21, 0x02, 0x20, + 0x00, 0xf0, 0x9a, 0xfa, 0x10, 0xbd, 0x00, 0x00, + 0x3c, 0x00, 0x20, 0x1b, 0x01, 0x00, 0xd4, 0x79, + 0x01, 0x00, 0x80, 0xb5, 0x00, 0x22, 0x00, 0x21, + 0x00, 0x20, 0x00, 0xf0, 0x90, 0xfa, 0x80, 0xbd, + 0x00, 0x00, 0x38, 0xb5, 0xfa, 0xf7, 0x41, 0xfe, + 0x00, 0x20, 0xf0, 0xf7, 0x80, 0xf8, 0x00, 0x90, + 0x00, 0xab, 0x1c, 0x88, 0x5d, 0x88, 0xf8, 0xf7, + 0x3c, 0xf9, 0x00, 0x2c, 0x02, 0xd0, 0xfd, 0xf7, + 0x9e, 0xfa, 0x02, 0xe0, 0x01, 0x20, 0xf6, 0xf7, + 0x0a, 0xff, 0x3c, 0x00, 0x5c, 0x1b, 0x01, 0x00, + 0x29, 0x1c, 0x20, 0x1c, 0xfc, 0xf7, 0xb8, 0xfc, + 0x00, 0x2c, 0x02, 0xd0, 0xf5, 0xf7, 0xe0, 0xfb, + 0x02, 0xe0, 0x00, 0x20, 0x00, 0xf0, 0xdc, 0xf9, + 0x03, 0x20, 0x00, 0x2c, 0x00, 0xd1, 0x02, 0x20, + 0x00, 0x06, 0x00, 0x0e, 0xf2, 0xf7, 0x4e, 0xfb, + 0x38, 0xbd, 0x00, 0x00, 0x03, 0x48, 0x80, 0xb5, + 0x82, 0x6a, 0x01, 0x21, 0x04, 0x20, 0x00, 0xf0, + 0x5d, 0xfa, 0x80, 0xbd, 0x3c, 0x00, 0x98, 0x1b, + 0x01, 0x00, 0xd4, 0x79, 0x01, 0x00, 0x80, 0xb5, + 0x30, 0xf0, 0x9b, 0xf9, 0x80, 0xbd, 0x80, 0xb5, + 0x00, 0x22, 0x00, 0x21, 0x03, 0x20, 0x00, 0xf0, + 0x50, 0xfa, 0x80, 0xbd, 0x00, 0x00, 0x03, 0x48, + 0x80, 0xb5, 0x42, 0x69, 0x01, 0x21, 0x01, 0x20, + 0x00, 0xf0, 0x47, 0xfa, 0x80, 0xbd, 0xd4, 0x79, + 0x01, 0x00, 0x04, 0x48, 0x80, 0xb5, 0x82, 0x88, + 0x00, 0x2a, 0x03, 0xd0, 0x01, 0x21, 0x3c, 0x00, + 0xd4, 0x1b, 0x01, 0x00, 0x02, 0x20, 0x00, 0xf0, + 0x3b, 0xfa, 0x80, 0xbd, 0xd4, 0x79, 0x01, 0x00, + 0x10, 0xb5, 0x06, 0x4c, 0x20, 0x7b, 0x21, 0x6a, + 0xf9, 0xf7, 0x90, 0xf9, 0xa1, 0x69, 0x42, 0x18, + 0x01, 0x21, 0x02, 0x20, 0x00, 0xf0, 0x2c, 0xfa, + 0x10, 0xbd, 0x00, 0x00, 0xd4, 0x79, 0x01, 0x00, + 0x80, 0xb5, 0xfc, 0xf7, 0x93, 0xfb, 0x01, 0x21, + 0x01, 0x20, 0xff, 0xf7, 0x97, 0xf8, 0x04, 0x20, + 0x3c, 0x00, 0x10, 0x1c, 0x01, 0x00, 0xf2, 0xf7, + 0x06, 0xfb, 0x80, 0xbd, 0x00, 0x00, 0x80, 0xb5, + 0x2f, 0xf0, 0x6b, 0xfb, 0x00, 0x28, 0x0a, 0xd0, + 0x01, 0x20, 0xf2, 0xf7, 0xfc, 0xfa, 0xfa, 0xf7, + 0x2a, 0xfc, 0x00, 0x28, 0x02, 0xd1, 0x04, 0x20, + 0xf6, 0xf7, 0x5d, 0xf8, 0x80, 0xbd, 0x03, 0x21, + 0x16, 0x20, 0xef, 0xf7, 0x32, 0xfb, 0x80, 0xbd, + 0x00, 0x00, 0x02, 0x48, 0x80, 0xb5, 0x00, 0x68, + 0xee, 0xf7, 0x3c, 0x00, 0x4c, 0x1c, 0x01, 0x00, + 0xc5, 0xfb, 0x80, 0xbd, 0xd4, 0x79, 0x01, 0x00, + 0x03, 0x48, 0x80, 0xb5, 0x42, 0x69, 0x01, 0x21, + 0x01, 0x20, 0x00, 0xf0, 0xf7, 0xf9, 0x80, 0xbd, + 0xd4, 0x79, 0x01, 0x00, 0x80, 0xb5, 0x30, 0xf0, + 0x35, 0xf9, 0x80, 0xbd, 0xb0, 0xb5, 0x18, 0x4c, + 0xaa, 0x20, 0x00, 0x5d, 0x04, 0x28, 0x19, 0xd1, + 0x01, 0x25, 0xe5, 0x62, 0x25, 0x63, 0x01, 0xf0, + 0x93, 0xf8, 0xa0, 0x66, 0x3c, 0x00, 0x88, 0x1c, + 0x01, 0x00, 0x01, 0xf0, 0xfc, 0xfd, 0xf2, 0xf7, + 0x2e, 0xfe, 0x00, 0x28, 0x0e, 0xd0, 0x02, 0x20, + 0xf2, 0xf7, 0xc3, 0xfa, 0xa5, 0x60, 0x01, 0xf0, + 0x86, 0xf8, 0x64, 0x30, 0x60, 0x60, 0xfa, 0xf7, + 0x8a, 0xfd, 0x01, 0x21, 0x01, 0x20, 0xff, 0xf7, + 0x46, 0xf8, 0xb0, 0xbd, 0x01, 0x20, 0xf2, 0xf7, + 0xb4, 0xfa, 0x00, 0x20, 0xa0, 0x60, 0x00, 0x21, + 0x01, 0x20, 0xff, 0xf7, 0x3c, 0xf8, 0x3c, 0x00, + 0xc4, 0x1c, 0x01, 0x00, 0xf2, 0xf7, 0x66, 0xfe, + 0x00, 0x28, 0xf1, 0xd0, 0xfa, 0xf7, 0x76, 0xfd, + 0xb0, 0xbd, 0x00, 0x00, 0xa4, 0x6c, 0x01, 0x00, + 0x80, 0xb5, 0x00, 0x20, 0xef, 0xf7, 0xd6, 0xfe, + 0x80, 0xbd, 0x00, 0x00, 0x80, 0xb5, 0x01, 0x20, + 0xef, 0xf7, 0xd0, 0xfe, 0x80, 0xbd, 0x00, 0x00, + 0xac, 0x21, 0x09, 0x5c, 0x02, 0x4a, 0x09, 0x02, + 0x89, 0x18, 0xc0, 0x31, 0x81, 0x60, 0x70, 0x47, + 0x3c, 0x00, 0x00, 0x1d, 0x01, 0x00, 0x70, 0x75, + 0x01, 0x00, 0x80, 0xb5, 0x01, 0x28, 0x04, 0xd1, + 0x03, 0xc9, 0x09, 0x68, 0xee, 0xf7, 0x64, 0xfb, + 0x80, 0xbd, 0x01, 0x21, 0x14, 0x20, 0xef, 0xf7, + 0xc4, 0xfa, 0x80, 0xbd, 0x00, 0x00, 0x00, 0x28, + 0x02, 0xd1, 0x02, 0x48, 0x40, 0x68, 0x70, 0x47, + 0x40, 0x68, 0x70, 0x47, 0x00, 0x00, 0x58, 0x75, + 0x01, 0x00, 0x10, 0xb5, 0x00, 0x24, 0xf8, 0xf7, + 0x1c, 0xfb, 0x3c, 0x00, 0x3c, 0x1d, 0x01, 0x00, + 0x00, 0x28, 0x04, 0xd0, 0x40, 0x30, 0x80, 0x7a, + 0x05, 0x28, 0x00, 0xd1, 0x01, 0x24, 0x20, 0x1c, + 0x10, 0xbd, 0x00, 0x00, 0x04, 0x48, 0x00, 0x21, + 0x40, 0x68, 0x01, 0xe0, 0x01, 0x63, 0x40, 0x68, + 0x00, 0x28, 0xfb, 0xd1, 0x70, 0x47, 0x00, 0x00, + 0x58, 0x75, 0x01, 0x00, 0xb0, 0xb5, 0x04, 0x1c, + 0x0d, 0x1c, 0xf7, 0xf7, 0xa5, 0xf8, 0x40, 0x34, + 0xe5, 0x72, 0xb0, 0xbd, 0x3c, 0x00, 0x78, 0x1d, + 0x01, 0x00, 0xf8, 0xb5, 0x07, 0x1c, 0xf8, 0xf7, + 0xfa, 0xfa, 0x04, 0x1c, 0x04, 0xd0, 0x05, 0x21, + 0x14, 0x20, 0xef, 0xf7, 0x8c, 0xfa, 0x28, 0xe0, + 0x00, 0x25, 0x14, 0x49, 0x28, 0x02, 0x46, 0x18, + 0x30, 0x1c, 0x44, 0x30, 0x06, 0x22, 0x12, 0x49, + 0xee, 0xf7, 0x2d, 0xfb, 0x00, 0x28, 0x02, 0xd1, + 0xac, 0x20, 0x85, 0x55, 0x34, 0x1c, 0x01, 0x35, + 0x03, 0x2d, 0xee, 0xd3, 0x00, 0x2c, 0x3c, 0x00, + 0xb4, 0x1d, 0x01, 0x00, 0x14, 0xd0, 0x39, 0x1c, + 0x20, 0x1c, 0xf8, 0xf7, 0x2b, 0xf8, 0x09, 0x49, + 0x00, 0x20, 0x20, 0x60, 0x18, 0x39, 0x48, 0x68, + 0x60, 0x60, 0x00, 0x28, 0x00, 0xd0, 0x04, 0x60, + 0x4c, 0x60, 0xca, 0x68, 0x00, 0x2a, 0x03, 0xd0, + 0x01, 0x21, 0x20, 0x1c, 0xee, 0xf7, 0xfe, 0xfa, + 0x20, 0x1c, 0xf8, 0xbd, 0x70, 0x75, 0x01, 0x00, + 0x58, 0x46, 0x01, 0x00, 0x80, 0xb5, 0xf8, 0xf7, + 0x3c, 0x00, 0xf0, 0x1d, 0x01, 0x00, 0xc1, 0xfa, + 0x00, 0x28, 0x04, 0xd1, 0x06, 0x21, 0x14, 0x20, + 0xef, 0xf7, 0x53, 0xfa, 0x80, 0xbd, 0xf5, 0xf7, + 0x16, 0xfc, 0x80, 0xbd, 0x00, 0x00, 0x80, 0xb5, + 0xf8, 0xf7, 0xb3, 0xfa, 0x80, 0xbd, 0x10, 0xb5, + 0x09, 0x4c, 0x21, 0x88, 0x02, 0x29, 0x03, 0xd1, + 0x14, 0x20, 0xef, 0xf7, 0x42, 0xfa, 0x04, 0xe0, + 0xa3, 0x68, 0x8a, 0x00, 0x98, 0x50, 0x48, 0x1c, + 0x20, 0x80, 0x3c, 0x00, 0x2c, 0x1e, 0x01, 0x00, + 0x20, 0x88, 0x01, 0x38, 0x00, 0x04, 0x00, 0x0c, + 0x10, 0xbd, 0x00, 0x00, 0x58, 0x75, 0x01, 0x00, + 0x0b, 0x1c, 0x11, 0x1c, 0x08, 0x4a, 0x80, 0xb5, + 0x12, 0x88, 0x90, 0x42, 0x06, 0xd2, 0xda, 0x68, + 0xc0, 0x00, 0x12, 0x18, 0x14, 0x20, 0x01, 0xf0, + 0xbb, 0xfb, 0x80, 0xbd, 0x03, 0x21, 0x14, 0x20, + 0xef, 0xf7, 0x22, 0xfa, 0x80, 0xbd, 0x00, 0x00, + 0x58, 0x75, 0x01, 0x00, 0x3c, 0x00, 0x68, 0x1e, + 0x01, 0x00, 0x08, 0x4a, 0x80, 0xb5, 0x12, 0x88, + 0x90, 0x42, 0x06, 0xd2, 0xc9, 0x68, 0xc0, 0x00, + 0x09, 0x18, 0x14, 0x20, 0x01, 0xf0, 0xdb, 0xfb, + 0x80, 0xbd, 0x04, 0x21, 0x14, 0x20, 0xef, 0xf7, + 0x0e, 0xfa, 0x80, 0xbd, 0x00, 0x00, 0x58, 0x75, + 0x01, 0x00, 0x01, 0x49, 0xc8, 0x60, 0x70, 0x47, + 0x00, 0x00, 0x58, 0x75, 0x01, 0x00, 0x80, 0xb5, + 0x06, 0x22, 0x44, 0x30, 0xee, 0xf7, 0x3c, 0x00, + 0xa4, 0x1e, 0x01, 0x00, 0xab, 0xfa, 0x00, 0x28, + 0x01, 0xd1, 0x01, 0x20, 0x80, 0xbd, 0x00, 0x20, + 0x80, 0xbd, 0x00, 0x00, 0x1c, 0xb5, 0x14, 0x4c, + 0x20, 0x69, 0x00, 0x28, 0x23, 0xd0, 0x20, 0x78, + 0x0a, 0x28, 0x01, 0xd0, 0x00, 0xf0, 0xfc, 0xf8, + 0x00, 0x20, 0x60, 0x61, 0x0f, 0x48, 0x40, 0x79, + 0xa0, 0x70, 0x00, 0x28, 0x01, 0xd0, 0x01, 0x28, + 0x15, 0xd1, 0xfd, 0xf7, 0xed, 0xfe, 0x01, 0x90, + 0x3c, 0x00, 0xe0, 0x1e, 0x01, 0x00, 0xfd, 0xf7, + 0x82, 0xfe, 0x00, 0x90, 0x00, 0xab, 0x18, 0x79, + 0x19, 0x78, 0x40, 0x1a, 0x18, 0x71, 0x58, 0x79, + 0x59, 0x78, 0x40, 0x1a, 0x58, 0x71, 0x01, 0x98, + 0xf2, 0xf7, 0x89, 0xfe, 0x05, 0x20, 0x20, 0x70, + 0x00, 0xf0, 0xbf, 0xf9, 0x1c, 0xbd, 0x7c, 0x78, + 0x01, 0x00, 0x0c, 0x5a, 0x01, 0x00, 0x08, 0xb5, + 0x04, 0x4a, 0x00, 0x90, 0x14, 0x32, 0x00, 0x20, + 0x02, 0x4b, 0x3c, 0x00, 0x1c, 0x1f, 0x01, 0x00, + 0x02, 0x49, 0xf1, 0xf7, 0x7d, 0xf9, 0x08, 0xbd, + 0x2c, 0x75, 0x01, 0x00, 0xb1, 0xa8, 0x00, 0x00, + 0xb0, 0xb5, 0x00, 0x28, 0x06, 0xd0, 0x01, 0x28, + 0x06, 0xd0, 0x02, 0x28, 0x07, 0xd1, 0x0c, 0x4c, + 0x01, 0x25, 0x07, 0xe0, 0x0b, 0x4c, 0x04, 0xe0, + 0x0a, 0x4c, 0x2a, 0x3c, 0x01, 0xe0, 0x08, 0x4c, + 0xb6, 0x34, 0x00, 0x25, 0x00, 0xf0, 0x2c, 0xff, + 0x07, 0x49, 0x89, 0x6e, 0x3c, 0x00, 0x58, 0x1f, + 0x01, 0x00, 0x09, 0x19, 0x09, 0x1a, 0xa1, 0x42, + 0x00, 0xd9, 0x00, 0x21, 0x2a, 0x1c, 0x16, 0x20, + 0x01, 0xf0, 0x31, 0xfb, 0xb0, 0xbd, 0x71, 0x02, + 0x00, 0x00, 0x0c, 0x05, 0x00, 0x00, 0xa4, 0x6c, + 0x01, 0x00, 0x8c, 0xb5, 0x00, 0xab, 0x8e, 0x21, + 0x19, 0x80, 0xfc, 0xf7, 0x38, 0xf9, 0x01, 0x90, + 0x68, 0x46, 0xfb, 0xf7, 0xa6, 0xfa, 0x8c, 0xbd, + 0x00, 0x00, 0xbf, 0xb5, 0x13, 0x4a, 0x3c, 0x00, + 0x94, 0x1f, 0x01, 0x00, 0x01, 0x91, 0x0d, 0x1c, + 0x11, 0x7c, 0x88, 0x43, 0x04, 0x1c, 0x21, 0x43, + 0x08, 0x1c, 0x10, 0x74, 0xa0, 0x07, 0x0b, 0xd5, + 0x0e, 0x48, 0x00, 0x90, 0x01, 0x20, 0x02, 0x90, + 0x00, 0xf0, 0xfc, 0xfe, 0x0c, 0x49, 0x40, 0x18, + 0x03, 0x90, 0x68, 0x46, 0xf9, 0xf7, 0x6a, 0xff, + 0xe0, 0x07, 0x0c, 0xd5, 0xf1, 0xf7, 0x2c, 0xfd, + 0x00, 0x28, 0x03, 0xd0, 0x07, 0x48, 0x85, 0x42, + 0x3c, 0x00, 0xd0, 0x1f, 0x01, 0x00, 0x00, 0xd2, + 0x01, 0x90, 0x06, 0x48, 0x00, 0x90, 0x68, 0x46, + 0xf9, 0xf7, 0x09, 0xff, 0xbf, 0xbd, 0x78, 0x69, + 0x01, 0x00, 0x81, 0xea, 0x00, 0x00, 0x10, 0x27, + 0x00, 0x00, 0xa0, 0x86, 0x01, 0x00, 0x75, 0xea, + 0x00, 0x00, 0x10, 0xb5, 0x0a, 0x4c, 0x60, 0x69, + 0x00, 0x28, 0x0e, 0xd1, 0x01, 0x20, 0x60, 0x61, + 0xa1, 0x68, 0x07, 0x48, 0xfd, 0xf7, 0xcb, 0xf9, + 0x00, 0x21, 0x3c, 0x00, 0x0c, 0x20, 0x01, 0x00, + 0xa0, 0x68, 0xf9, 0xf7, 0xd1, 0xfb, 0x01, 0x22, + 0x07, 0x20, 0x04, 0x49, 0x01, 0xf0, 0xd8, 0xfa, + 0x10, 0xbd, 0x00, 0x00, 0x78, 0x69, 0x01, 0x00, + 0x34, 0x63, 0x01, 0x00, 0x98, 0x3a, 0x00, 0x00, + 0x10, 0xb5, 0x0c, 0x1c, 0x11, 0x1c, 0x06, 0x4a, + 0x00, 0x2b, 0x10, 0x70, 0x03, 0xd0, 0x00, 0x28, + 0x02, 0xd1, 0xf9, 0xf7, 0xf5, 0xfd, 0x10, 0xbd, + 0x20, 0x1c, 0xf9, 0xf7, 0x3c, 0x00, 0x48, 0x20, + 0x01, 0x00, 0x01, 0xfe, 0x10, 0xbd, 0xa0, 0x79, + 0x01, 0x00, 0xb0, 0xb5, 0x0a, 0x4c, 0x05, 0x1c, + 0xe3, 0x6a, 0x20, 0x1f, 0x01, 0x33, 0xe3, 0x62, + 0x00, 0x88, 0x00, 0x29, 0x06, 0xd0, 0xa1, 0x68, + 0x89, 0x18, 0x21, 0x61, 0x05, 0x4a, 0x00, 0xf0, + 0xfc, 0xfe, 0x01, 0xe0, 0x00, 0xf0, 0xcf, 0xfe, + 0x25, 0x77, 0xb0, 0xbd, 0x00, 0x00, 0xd4, 0x79, + 0x01, 0x00, 0x55, 0xe3, 0x00, 0x00, 0x3c, 0x00, + 0x84, 0x20, 0x01, 0x00, 0x01, 0x1c, 0x03, 0x48, + 0x80, 0xb5, 0x40, 0x88, 0xff, 0xf7, 0xec, 0xfe, + 0x80, 0xbd, 0x00, 0x00, 0x98, 0x7c, 0x01, 0x00, + 0x03, 0x48, 0x80, 0xb5, 0xc1, 0x68, 0x18, 0x38, + 0x80, 0x88, 0xff, 0xf7, 0xe1, 0xfe, 0x80, 0xbd, + 0x70, 0x7c, 0x01, 0x00, 0x80, 0xb5, 0x00, 0x21, + 0x16, 0x20, 0x01, 0xf0, 0xbf, 0xfa, 0x01, 0x21, + 0x16, 0x20, 0x01, 0xf0, 0xbb, 0xfa, 0x80, 0xbd, + 0x3c, 0x00, 0xc0, 0x20, 0x01, 0x00, 0x10, 0xb5, + 0x0b, 0x4c, 0x20, 0x78, 0x0a, 0x28, 0x10, 0xd0, + 0x01, 0x20, 0x60, 0x61, 0x0a, 0x21, 0x13, 0x20, + 0x01, 0xf0, 0xaf, 0xfa, 0x0a, 0x20, 0x60, 0x70, + 0x20, 0x70, 0xfd, 0xf7, 0x3c, 0xfb, 0x01, 0x20, + 0xfd, 0xf7, 0xe9, 0xfb, 0x00, 0x20, 0xfa, 0xf7, + 0xc4, 0xf9, 0x10, 0xbd, 0x00, 0x00, 0x7c, 0x78, + 0x01, 0x00, 0x10, 0xb5, 0x0c, 0x4c, 0x00, 0x20, + 0x0b, 0x49, 0x3c, 0x00, 0xfc, 0x20, 0x01, 0x00, + 0x20, 0x63, 0xe0, 0x62, 0x50, 0x39, 0x88, 0x61, + 0x20, 0x70, 0x08, 0x48, 0x38, 0x21, 0x0c, 0x38, + 0x00, 0x7a, 0x08, 0x55, 0x81, 0x21, 0x18, 0x20, + 0x01, 0xf0, 0x8e, 0xfa, 0x20, 0x69, 0x01, 0x28, + 0x02, 0xd1, 0x00, 0x20, 0xf5, 0xf7, 0x3e, 0xfb, + 0x10, 0xbd, 0x00, 0x00, 0xf4, 0x6e, 0x01, 0x00, + 0xb0, 0xb5, 0x1c, 0x4c, 0x00, 0x25, 0x2c, 0x22, + 0x01, 0x1d, 0x20, 0x1c, 0x3c, 0x00, 0x38, 0x21, + 0x01, 0x00, 0x9a, 0xb0, 0xee, 0xf7, 0x39, 0xfa, + 0x18, 0x49, 0x2c, 0x31, 0x08, 0x1c, 0x00, 0x7a, + 0x8a, 0x69, 0x00, 0x2a, 0x13, 0xd1, 0x02, 0x28, + 0x03, 0xd1, 0xa0, 0x68, 0x00, 0x28, 0x20, 0xd0, + 0x04, 0xe0, 0x00, 0x28, 0x1d, 0xd1, 0x60, 0x68, + 0x00, 0x28, 0x1a, 0xd0, 0x80, 0x02, 0x88, 0x61, + 0x0e, 0x48, 0x69, 0x46, 0x24, 0x38, 0x00, 0x68, + 0xef, 0xf7, 0xcb, 0xfb, 0x11, 0xe0, 0x3c, 0x00, + 0x74, 0x21, 0x01, 0x00, 0x00, 0x22, 0x02, 0x28, + 0x03, 0xd1, 0xa0, 0x68, 0x00, 0x28, 0x09, 0xd1, + 0x04, 0xe0, 0x00, 0x28, 0x08, 0xd1, 0x60, 0x68, + 0x00, 0x28, 0x03, 0xd1, 0x8a, 0x61, 0xff, 0xf7, + 0xb1, 0xff, 0x01, 0xe0, 0x80, 0x02, 0x88, 0x61, + 0x28, 0x1c, 0x1a, 0xb0, 0xb0, 0xbd, 0x00, 0x00, + 0xc8, 0x6e, 0x01, 0x00, 0xf8, 0xb5, 0x0c, 0x49, + 0x02, 0x20, 0x48, 0x60, 0x0b, 0x49, 0x00, 0x05, + 0x3c, 0x00, 0xb0, 0x21, 0x01, 0x00, 0x08, 0x60, + 0x0b, 0x4f, 0xb8, 0x68, 0xf9, 0x68, 0x7c, 0x68, + 0x45, 0x1a, 0x2e, 0x1c, 0x04, 0xe0, 0xa0, 0x68, + 0x61, 0x68, 0xee, 0xf7, 0x09, 0xf9, 0x24, 0x68, + 0x01, 0x3d, 0xf8, 0xd2, 0x7c, 0x60, 0xf8, 0x68, + 0x80, 0x19, 0xf8, 0x60, 0xf8, 0xbd, 0x40, 0x20, + 0x07, 0x00, 0x00, 0x10, 0x07, 0x00, 0x44, 0xe3, + 0x01, 0x00, 0xf8, 0xb5, 0x1f, 0x4e, 0x04, 0x1c, + 0x30, 0x69, 0x3c, 0x00, 0xec, 0x21, 0x01, 0x00, + 0x01, 0x21, 0xf9, 0xf7, 0x99, 0xfa, 0x1d, 0x49, + 0x60, 0x00, 0x40, 0x18, 0x10, 0x38, 0x81, 0x7b, + 0x1b, 0x4a, 0x51, 0x72, 0xc0, 0x7b, 0x10, 0x74, + 0x1a, 0x4f, 0x1b, 0x4d, 0x0e, 0x2c, 0x0a, 0xd1, + 0x01, 0x22, 0x02, 0x21, 0x08, 0x20, 0x01, 0xf0, + 0xf3, 0xfb, 0x03, 0x20, 0xff, 0x21, 0x41, 0x31, + 0x39, 0x86, 0x14, 0x21, 0x08, 0xe0, 0x02, 0x22, + 0x01, 0x21, 0x08, 0x20, 0x3c, 0x00, 0x28, 0x22, + 0x01, 0x00, 0x01, 0xf0, 0xe8, 0xfb, 0x12, 0x49, + 0x02, 0x20, 0x39, 0x86, 0x10, 0x21, 0xa9, 0x71, + 0xe8, 0x71, 0x10, 0x48, 0x11, 0x4a, 0x00, 0x19, + 0x10, 0x38, 0xc0, 0x7b, 0x00, 0x28, 0x03, 0xd0, + 0x01, 0x21, 0x51, 0x73, 0x10, 0x73, 0x01, 0xe0, + 0x00, 0x20, 0x50, 0x73, 0x00, 0x21, 0x20, 0x1c, + 0xfd, 0xf7, 0xe5, 0xfd, 0x30, 0x69, 0xf9, 0xf7, + 0x08, 0xfb, 0xf8, 0xbd, 0x00, 0x00, 0x3c, 0x00, + 0x64, 0x22, 0x01, 0x00, 0x40, 0x7c, 0x01, 0x00, + 0x76, 0x46, 0x01, 0x00, 0x0c, 0x80, 0x07, 0x00, + 0x30, 0x80, 0x07, 0x00, 0x00, 0x80, 0x07, 0x00, + 0xff, 0x01, 0x00, 0x00, 0x5c, 0x57, 0x01, 0x00, + 0xd0, 0x80, 0x07, 0x00, 0x10, 0xb5, 0x15, 0x4c, + 0x14, 0x4a, 0x21, 0x78, 0x00, 0x20, 0x18, 0x32, + 0x05, 0x29, 0x1d, 0xd0, 0x06, 0x29, 0x1b, 0xd0, + 0x07, 0x29, 0x01, 0xd0, 0x08, 0x29, 0x06, 0xd1, + 0x3c, 0x00, 0xa0, 0x22, 0x01, 0x00, 0x91, 0x68, + 0x05, 0x20, 0x10, 0x29, 0x00, 0xdb, 0x06, 0x20, + 0x20, 0x70, 0x01, 0x20, 0xa1, 0x78, 0x00, 0x28, + 0x61, 0x70, 0x0b, 0xd0, 0x00, 0x20, 0xfa, 0xf7, + 0xdc, 0xf8, 0x00, 0x21, 0x60, 0x78, 0xf4, 0xf7, + 0x3c, 0xfa, 0x0a, 0x22, 0x1e, 0x21, 0x13, 0x20, + 0x01, 0xf0, 0x7f, 0xf9, 0x10, 0xbd, 0xd1, 0x69, + 0x07, 0x20, 0x10, 0x29, 0xe8, 0xdb, 0x08, 0x20, + 0xe6, 0xe7, 0x3c, 0x00, 0xdc, 0x22, 0x01, 0x00, + 0x7c, 0x78, 0x01, 0x00, 0xb0, 0xb5, 0x0d, 0x1c, + 0x01, 0x1c, 0x04, 0x1c, 0x44, 0x31, 0x00, 0x20, + 0xf6, 0xf7, 0x40, 0xfa, 0x30, 0x34, 0x00, 0x2d, + 0x07, 0xd0, 0x0e, 0xc8, 0x0e, 0xc4, 0x08, 0xc8, + 0x10, 0x38, 0x08, 0xc4, 0xf4, 0xf7, 0xc4, 0xf9, + 0xb0, 0xbd, 0x1e, 0xcc, 0x1e, 0xc0, 0xb0, 0xbd, + 0xf8, 0xb5, 0x08, 0x1c, 0x11, 0x1c, 0xf4, 0xf7, + 0x87, 0xfa, 0x08, 0x4c, 0x3c, 0x00, 0x18, 0x23, + 0x01, 0x00, 0x00, 0x25, 0x08, 0x4e, 0x08, 0x4f, + 0x06, 0xe0, 0x30, 0x6b, 0x00, 0x28, 0x03, 0xd0, + 0x35, 0x63, 0x20, 0x68, 0xee, 0xf7, 0x55, 0xf8, + 0x38, 0x68, 0x00, 0x28, 0xf5, 0xd0, 0xf8, 0xbd, + 0x00, 0x00, 0x5c, 0x5b, 0x01, 0x00, 0xe4, 0xfe, + 0x01, 0x00, 0x84, 0x5a, 0x01, 0x00, 0x80, 0xb5, + 0x00, 0x06, 0x00, 0x0e, 0x00, 0xf0, 0x07, 0xf8, + 0x80, 0xbd, 0x80, 0xb5, 0x0a, 0x1c, 0x3c, 0x00, + 0x54, 0x23, 0x01, 0x00, 0x23, 0x21, 0x01, 0xf0, + 0x2b, 0xfa, 0x80, 0xbd, 0xb0, 0xb5, 0x0d, 0x1c, + 0x04, 0x1c, 0x12, 0x28, 0x03, 0xd3, 0x01, 0x21, + 0x23, 0x20, 0xee, 0xf7, 0x9b, 0xff, 0x06, 0x49, + 0xa0, 0x00, 0x08, 0x58, 0x04, 0xe0, 0x12, 0xc8, + 0x28, 0x1c, 0xee, 0xf7, 0x2e, 0xf8, 0x20, 0x1c, + 0x00, 0x28, 0xf8, 0xd1, 0xb0, 0xbd, 0x00, 0x00, + 0x68, 0x5b, 0x01, 0x00, 0xf8, 0xb5, 0x0e, 0x1c, + 0x3c, 0x00, 0x90, 0x23, 0x01, 0x00, 0x00, 0x25, + 0x04, 0x1c, 0x12, 0x28, 0x03, 0xd3, 0x01, 0x21, + 0x23, 0x20, 0xee, 0xf7, 0x82, 0xff, 0x13, 0x48, + 0xa7, 0x00, 0xc4, 0x59, 0x08, 0xe0, 0x20, 0x68, + 0xb0, 0x42, 0x03, 0xd1, 0x03, 0x21, 0x23, 0x20, + 0xee, 0xf7, 0x77, 0xff, 0x25, 0x1c, 0x64, 0x68, + 0x00, 0x2c, 0xf4, 0xd1, 0x0c, 0x4a, 0x04, 0x3a, + 0x10, 0x68, 0x00, 0x28, 0x01, 0xd0, 0x41, 0x68, + 0x11, 0x60, 0x3c, 0x00, 0xcc, 0x23, 0x01, 0x00, + 0x00, 0x28, 0x04, 0xd1, 0x02, 0x21, 0x23, 0x20, + 0xee, 0xf7, 0x66, 0xff, 0xf8, 0xbd, 0x00, 0x21, + 0x41, 0x60, 0x06, 0x60, 0x00, 0x2d, 0x01, 0xd0, + 0x68, 0x60, 0xf7, 0xe7, 0x01, 0x49, 0xc8, 0x51, + 0xf4, 0xe7, 0x00, 0x00, 0x68, 0x5b, 0x01, 0x00, + 0x70, 0xb5, 0x0e, 0x1c, 0x05, 0x1c, 0x00, 0x24, + 0x12, 0x28, 0x03, 0xd3, 0x01, 0x21, 0x23, 0x20, + 0xee, 0xf7, 0x4e, 0xff, 0x3c, 0x00, 0x08, 0x24, + 0x01, 0x00, 0x0d, 0x4b, 0xaa, 0x00, 0x98, 0x58, + 0x04, 0xe0, 0x01, 0x68, 0xb1, 0x42, 0x04, 0xd0, + 0x04, 0x1c, 0x40, 0x68, 0x00, 0x28, 0xf8, 0xd1, + 0x70, 0xbd, 0x00, 0x28, 0xfc, 0xd0, 0x00, 0x2c, + 0x41, 0x68, 0x01, 0xd1, 0x99, 0x50, 0x00, 0xe0, + 0x61, 0x60, 0x00, 0x21, 0x03, 0x4a, 0x01, 0x60, + 0x04, 0x3a, 0x11, 0x68, 0x41, 0x60, 0x10, 0x60, + 0x70, 0xbd, 0x68, 0x5b, 0x01, 0x00, 0x3c, 0x00, + 0x44, 0x24, 0x01, 0x00, 0xf3, 0xb5, 0x81, 0xb0, + 0x00, 0x28, 0x17, 0xd0, 0x01, 0x78, 0xff, 0x29, + 0x14, 0xd0, 0x45, 0x78, 0x44, 0x19, 0x02, 0x34, + 0x80, 0x27, 0x01, 0x3c, 0x26, 0x78, 0x01, 0x3d, + 0xbe, 0x43, 0x30, 0x1c, 0xf8, 0xf7, 0x82, 0xfc, + 0x01, 0x21, 0x81, 0x40, 0x02, 0x98, 0x01, 0x40, + 0x02, 0xd0, 0x3e, 0x43, 0x30, 0x1c, 0x20, 0x70, + 0x00, 0x2d, 0xee, 0xd1, 0xfe, 0xbd, 0x00, 0x00, + 0x3c, 0x00, 0x80, 0x24, 0x01, 0x00, 0x10, 0x4b, + 0x10, 0xb5, 0x59, 0x68, 0x41, 0x1a, 0x0f, 0x29, + 0x0d, 0xdc, 0x0e, 0x22, 0xd2, 0x43, 0x91, 0x42, + 0x09, 0xdb, 0x1a, 0x1c, 0x92, 0x68, 0x00, 0x29, + 0x01, 0xdd, 0x00, 0x2a, 0x03, 0xda, 0x00, 0x29, + 0x0d, 0xda, 0x00, 0x2a, 0x0b, 0xdc, 0x04, 0x33, + 0x03, 0xc3, 0xfd, 0xf7, 0x10, 0xfd, 0x04, 0x1c, + 0xfd, 0xf7, 0x13, 0xfd, 0x00, 0x28, 0x02, 0xd0, + 0x20, 0x1c, 0x3c, 0x00, 0xbc, 0x24, 0x01, 0x00, + 0xff, 0xf7, 0x92, 0xfe, 0x10, 0xbd, 0x00, 0x00, + 0x18, 0x63, 0x01, 0x00, 0xf8, 0xb5, 0x64, 0x4c, + 0x07, 0x1c, 0x60, 0x78, 0xa1, 0x78, 0x88, 0x42, + 0x0f, 0xd1, 0x08, 0x1c, 0xfd, 0xf7, 0xce, 0xf8, + 0xe0, 0x60, 0x04, 0x20, 0x60, 0x70, 0x0a, 0x22, + 0x1e, 0x21, 0x13, 0x20, 0x01, 0xf0, 0x70, 0xf8, + 0x00, 0x21, 0x60, 0x78, 0xf4, 0xf7, 0x24, 0xf9, + 0xf8, 0xbd, 0x04, 0x28, 0x3c, 0x00, 0xf8, 0x24, + 0x01, 0x00, 0x6e, 0xd1, 0x58, 0x4e, 0xfd, 0xf7, + 0xbc, 0xf8, 0x00, 0x90, 0x71, 0x78, 0x04, 0x1c, + 0x00, 0x20, 0x05, 0x29, 0x21, 0xd2, 0x01, 0xa3, + 0x5b, 0x5c, 0x5b, 0x00, 0x9f, 0x44, 0x0b, 0x0f, + 0x14, 0x1a, 0x02, 0x00, 0x51, 0x48, 0x51, 0x49, + 0x60, 0x43, 0x41, 0x18, 0x7d, 0x20, 0xc0, 0x00, + 0xee, 0xf7, 0x87, 0xf8, 0x11, 0xe0, 0x87, 0x20, + 0x60, 0x43, 0x4d, 0x49, 0x02, 0xe0, 0x3c, 0x00, + 0x34, 0x25, 0x01, 0x00, 0x45, 0x20, 0x4d, 0x49, + 0x60, 0x43, 0x40, 0x18, 0x08, 0xe0, 0x4c, 0x48, + 0xcd, 0x21, 0x09, 0x01, 0x60, 0x43, 0x40, 0x1a, + 0x02, 0xe0, 0x46, 0x20, 0x60, 0x43, 0x82, 0x38, + 0x06, 0x06, 0x48, 0x48, 0x07, 0x21, 0x00, 0x79, + 0x36, 0x16, 0x08, 0x1a, 0x00, 0x19, 0x00, 0x90, + 0x68, 0x46, 0xfe, 0xf7, 0x5f, 0xfd, 0x38, 0x1c, + 0xfd, 0xf7, 0x2e, 0xfb, 0x00, 0x99, 0x42, 0x4a, + 0x3c, 0x00, 0x70, 0x25, 0x01, 0x00, 0x49, 0x00, + 0x51, 0x5a, 0x48, 0x43, 0x39, 0x49, 0x04, 0x1c, + 0x88, 0x78, 0x00, 0x28, 0x01, 0xd0, 0x01, 0x28, + 0x1e, 0xd1, 0x35, 0x49, 0x00, 0x28, 0x03, 0xd1, + 0x3a, 0x48, 0x05, 0x78, 0x04, 0x20, 0x02, 0xe0, + 0x38, 0x48, 0x45, 0x78, 0x0c, 0x20, 0x30, 0x49, + 0xc9, 0x68, 0x49, 0x1b, 0x08, 0x18, 0x00, 0x90, + 0x68, 0x46, 0xfe, 0xf7, 0x3e, 0xfd, 0x00, 0x98, + 0x33, 0x49, 0x3c, 0x00, 0xac, 0x25, 0x01, 0x00, + 0x40, 0x00, 0x20, 0x31, 0x08, 0x5a, 0x2a, 0x49, + 0x44, 0x43, 0xc8, 0x68, 0xa8, 0x42, 0x01, 0xd9, + 0x01, 0x25, 0x00, 0xe0, 0x00, 0x25, 0x2e, 0x48, + 0x21, 0x18, 0x40, 0x00, 0xee, 0xf7, 0xa2, 0xf8, + 0x04, 0x1c, 0x00, 0x2d, 0x03, 0xd0, 0xfd, 0xf7, + 0xc3, 0xfa, 0x02, 0xe0, 0x3d, 0xe0, 0xfd, 0xf7, + 0xf3, 0xfa, 0x00, 0x2f, 0x02, 0xd1, 0x25, 0x48, + 0x0e, 0x38, 0x01, 0xe0, 0x3c, 0x00, 0xe8, 0x25, + 0x01, 0x00, 0x23, 0x48, 0x0a, 0x38, 0x01, 0x68, + 0x61, 0x1a, 0xcb, 0x1c, 0x01, 0xdb, 0x03, 0x29, + 0x00, 0xdd, 0x04, 0x60, 0x01, 0x68, 0xa1, 0x42, + 0x01, 0xd2, 0x01, 0x31, 0x04, 0xe0, 0xa1, 0x42, + 0x03, 0xd9, 0x00, 0x29, 0x01, 0xd0, 0x01, 0x39, + 0x01, 0x60, 0x01, 0x68, 0x38, 0x1c, 0xfd, 0xf7, + 0xc0, 0xfb, 0x10, 0x4c, 0x0a, 0x20, 0x60, 0x70, + 0x0a, 0x22, 0x13, 0x20, 0xa1, 0x68, 0x3c, 0x00, + 0x24, 0x26, 0x01, 0x00, 0x00, 0xf0, 0xd2, 0xff, + 0x60, 0x68, 0x00, 0xf0, 0xf7, 0xfa, 0x00, 0x28, + 0x00, 0xd1, 0x5f, 0xe7, 0x00, 0xf0, 0xba, 0xfb, + 0x11, 0x49, 0x00, 0x23, 0x40, 0x18, 0x0e, 0x49, + 0x60, 0x60, 0x1e, 0x39, 0xc8, 0x56, 0xb0, 0x42, + 0xf3, 0xd0, 0x0e, 0x70, 0x31, 0x1c, 0x00, 0x20, + 0xff, 0xf7, 0x84, 0xfe, 0x4e, 0xe7, 0xff, 0xf7, + 0x15, 0xfe, 0x4b, 0xe7, 0x7c, 0x78, 0x01, 0x00, + 0x3c, 0x00, 0x60, 0x26, 0x01, 0x00, 0x60, 0xd7, + 0xff, 0xff, 0x60, 0x8f, 0x01, 0x00, 0x54, 0x0b, + 0x00, 0x00, 0xc9, 0x09, 0x00, 0x00, 0x8e, 0xfe, + 0xff, 0xff, 0x0c, 0x5a, 0x01, 0x00, 0x12, 0x5a, + 0x01, 0x00, 0x20, 0xa1, 0x07, 0x00, 0x40, 0x42, + 0x0f, 0x00, 0x30, 0xb5, 0x0c, 0x4b, 0xfe, 0x24, + 0x1b, 0x88, 0x04, 0x40, 0xc0, 0x07, 0x5d, 0x07, + 0x6d, 0x0f, 0xdb, 0x08, 0xc0, 0x0f, 0x9c, 0x42, + 0x0b, 0xd8, 0x3c, 0x00, 0x9c, 0x26, 0x01, 0x00, + 0xa2, 0x18, 0x04, 0x3a, 0x9a, 0x42, 0x07, 0xd3, + 0x1a, 0x1b, 0x89, 0x5c, 0x01, 0x22, 0xaa, 0x40, + 0x11, 0x40, 0x01, 0xd0, 0x02, 0x21, 0x08, 0x43, + 0x30, 0xbd, 0x00, 0x00, 0xfa, 0x60, 0x01, 0x00, + 0x80, 0xb5, 0x00, 0x28, 0x03, 0xd0, 0x01, 0x1c, + 0x14, 0x20, 0xf5, 0xf7, 0xff, 0xfa, 0x80, 0xbd, + 0xb0, 0xb5, 0x04, 0x1c, 0xf7, 0xf7, 0x08, 0xfd, + 0x13, 0x4d, 0x00, 0x28, 0x3c, 0x00, 0xd8, 0x26, + 0x01, 0x00, 0x1d, 0xd1, 0xa0, 0x07, 0x16, 0xd5, + 0x02, 0x20, 0x84, 0x43, 0x11, 0x48, 0x01, 0x22, + 0x2a, 0x62, 0x40, 0x68, 0x00, 0x28, 0x13, 0xd0, + 0xf2, 0xf7, 0x51, 0xf9, 0x00, 0x28, 0x0f, 0xd1, + 0x0b, 0x48, 0xe4, 0x30, 0x80, 0x7a, 0x01, 0x28, + 0x00, 0xd0, 0x00, 0x22, 0x11, 0x1c, 0x01, 0x20, + 0xf2, 0xf7, 0xa5, 0xf9, 0x04, 0xe0, 0x00, 0xf0, + 0x4e, 0xfb, 0xe8, 0x61, 0xf2, 0xf7, 0x3c, 0x00, + 0x14, 0x27, 0x01, 0x00, 0x6b, 0xf9, 0xa9, 0x6a, + 0x00, 0x29, 0x02, 0xd0, 0x20, 0x1c, 0xed, 0xf7, + 0x5c, 0xfe, 0xb0, 0xbd, 0x60, 0x6c, 0x01, 0x00, + 0xb0, 0x57, 0x01, 0x00, 0x20, 0x48, 0xb0, 0xb5, + 0x81, 0x68, 0x01, 0x29, 0x04, 0xd1, 0x00, 0x78, + 0x00, 0x28, 0x01, 0xd1, 0xfd, 0xf7, 0x72, 0xfd, + 0x1b, 0x4d, 0x80, 0x3d, 0x2c, 0x1c, 0x70, 0x34, + 0x20, 0x78, 0x03, 0x38, 0x05, 0x28, 0x18, 0xd2, + 0x3c, 0x00, 0x50, 0x27, 0x01, 0x00, 0x01, 0xa3, + 0x1b, 0x5c, 0x5b, 0x00, 0x9f, 0x44, 0x04, 0x15, + 0x27, 0x27, 0x27, 0x00, 0xfb, 0xf7, 0xf1, 0xff, + 0x60, 0x7b, 0x01, 0x1c, 0xff, 0x31, 0x61, 0x73, + 0x00, 0x28, 0xf7, 0xd1, 0x04, 0x20, 0x20, 0x70, + 0xa8, 0x89, 0xf8, 0xf7, 0xda, 0xf9, 0x01, 0x1c, + 0x00, 0x22, 0x0f, 0x20, 0x00, 0xf0, 0x25, 0xff, + 0xb0, 0xbd, 0xef, 0xf7, 0xce, 0xff, 0x6a, 0x21, + 0x49, 0x5b, 0x3c, 0x00, 0x8c, 0x27, 0x01, 0x00, + 0x88, 0x42, 0x0b, 0xd0, 0xe8, 0x89, 0xf8, 0xf7, + 0xcb, 0xf9, 0x01, 0x1c, 0x00, 0x23, 0x00, 0x22, + 0x0f, 0x20, 0x00, 0xf0, 0xf7, 0xff, 0x07, 0x20, + 0x20, 0x70, 0xb0, 0xbd, 0xfd, 0xf7, 0x3a, 0xfe, + 0xb0, 0xbd, 0x00, 0x00, 0x84, 0x66, 0x01, 0x00, + 0xf0, 0xb5, 0x85, 0xb0, 0x04, 0x1c, 0x03, 0x80, + 0x18, 0x0c, 0x60, 0x80, 0x0d, 0x1c, 0x51, 0x78, + 0x10, 0x78, 0x09, 0x02, 0x3c, 0x00, 0xc8, 0x27, + 0x01, 0x00, 0x48, 0x40, 0xa0, 0x80, 0xd1, 0x78, + 0x90, 0x78, 0x09, 0x02, 0x48, 0x40, 0xe0, 0x80, + 0x51, 0x79, 0x10, 0x79, 0x09, 0x02, 0x48, 0x40, + 0x20, 0x81, 0x68, 0x46, 0x1a, 0x49, 0x14, 0x22, + 0xed, 0xf7, 0xe3, 0xfe, 0x00, 0x23, 0x00, 0x20, + 0xd9, 0x07, 0xc9, 0x0f, 0x8c, 0x46, 0x42, 0x00, + 0x56, 0x07, 0x76, 0x0f, 0x61, 0x46, 0x89, 0x19, + 0x49, 0x00, 0x6e, 0x5c, 0x49, 0x19, 0x3c, 0x00, + 0x04, 0x28, 0x01, 0x00, 0x49, 0x78, 0x6f, 0x46, + 0x09, 0x02, 0x4e, 0x40, 0x81, 0x00, 0x79, 0x58, + 0x0f, 0x4f, 0x49, 0x00, 0x61, 0x5a, 0x01, 0x30, + 0x4e, 0x40, 0x31, 0x06, 0x36, 0x0a, 0x76, 0x00, + 0xc9, 0x0d, 0x79, 0x5a, 0xf6, 0x19, 0x01, 0x27, + 0x7f, 0x02, 0xf6, 0x19, 0x36, 0x88, 0x71, 0x40, + 0xa6, 0x5a, 0x89, 0x19, 0xa1, 0x52, 0x05, 0x28, + 0xdc, 0xdb, 0x20, 0x89, 0xc0, 0x18, 0x01, 0x33, + 0x3c, 0x00, 0x40, 0x28, 0x01, 0x00, 0x08, 0x2b, + 0x20, 0x81, 0xd2, 0xdb, 0x05, 0xb0, 0xf0, 0xbd, + 0x00, 0x00, 0xd8, 0x56, 0x01, 0x00, 0xd8, 0x52, + 0x01, 0x00, 0xf0, 0xb5, 0x05, 0x1c, 0x0c, 0x1c, + 0x1e, 0x1c, 0x00, 0x20, 0x89, 0xb0, 0x41, 0x00, + 0x53, 0x5a, 0x01, 0x30, 0x06, 0xaf, 0x7b, 0x52, + 0x05, 0x28, 0xf8, 0xdb, 0x10, 0x89, 0x00, 0xab, + 0x3a, 0x49, 0x80, 0x19, 0x58, 0x84, 0x68, 0x46, + 0x18, 0x22, 0x3c, 0x00, 0x7c, 0x28, 0x01, 0x00, + 0xed, 0xf7, 0x98, 0xfe, 0x00, 0x20, 0x41, 0x00, + 0x0a, 0x19, 0x52, 0x78, 0x63, 0x5c, 0x6f, 0x46, + 0x12, 0x02, 0x53, 0x40, 0x82, 0x00, 0xba, 0x58, + 0x06, 0xaf, 0x52, 0x00, 0xba, 0x5a, 0x31, 0x4f, + 0x01, 0x30, 0x53, 0x40, 0x1a, 0x06, 0x1b, 0x0a, + 0x5b, 0x00, 0xd2, 0x0d, 0xba, 0x5a, 0xdb, 0x19, + 0x01, 0x27, 0x7f, 0x02, 0xdb, 0x19, 0x1b, 0x88, + 0x5a, 0x40, 0x06, 0xab, 0x3c, 0x00, 0xb8, 0x28, + 0x01, 0x00, 0x5b, 0x5a, 0xd2, 0x18, 0x06, 0xab, + 0x5a, 0x52, 0x06, 0x28, 0xde, 0xdb, 0x61, 0x7b, + 0x20, 0x7b, 0x00, 0xab, 0x09, 0x02, 0x48, 0x40, + 0x59, 0x8c, 0x48, 0x40, 0x41, 0x08, 0xc0, 0x03, + 0x48, 0x40, 0x19, 0x8b, 0x40, 0x18, 0x18, 0x83, + 0xe1, 0x7b, 0xa0, 0x7b, 0x09, 0x02, 0x48, 0x40, + 0x19, 0x8b, 0x48, 0x40, 0x41, 0x08, 0xc0, 0x03, + 0x48, 0x40, 0x59, 0x8b, 0x40, 0x18, 0x3c, 0x00, + 0xf4, 0x28, 0x01, 0x00, 0x58, 0x83, 0x02, 0x20, + 0x41, 0x00, 0x06, 0xaa, 0x8a, 0x18, 0x20, 0x3a, + 0xd2, 0x8b, 0x01, 0x30, 0x53, 0x08, 0xd2, 0x03, + 0x5a, 0x40, 0x06, 0xab, 0x5b, 0x5a, 0xd2, 0x18, + 0x06, 0xab, 0x5a, 0x52, 0x06, 0x28, 0xef, 0xdb, + 0x30, 0x0a, 0x28, 0x70, 0x70, 0x04, 0x40, 0x0e, + 0x20, 0x21, 0x08, 0x43, 0x68, 0x70, 0xae, 0x70, + 0x61, 0x78, 0x20, 0x78, 0x00, 0xab, 0x09, 0x02, + 0x3c, 0x00, 0x30, 0x29, 0x01, 0x00, 0x48, 0x40, + 0x59, 0x8c, 0x48, 0x40, 0xc0, 0x05, 0x00, 0x0e, + 0xe8, 0x70, 0x00, 0x20, 0x41, 0x00, 0x06, 0xaa, + 0x53, 0x5a, 0x4a, 0x19, 0x01, 0x30, 0x13, 0x71, + 0x06, 0xab, 0x59, 0x5a, 0x09, 0x0a, 0x51, 0x71, + 0x06, 0x28, 0xf3, 0xdb, 0x09, 0xb0, 0xf0, 0xbd, + 0x00, 0x00, 0xec, 0x56, 0x01, 0x00, 0xd8, 0x52, + 0x01, 0x00, 0xf0, 0xb5, 0x46, 0x68, 0x05, 0x1c, + 0x60, 0x30, 0x3c, 0x00, 0x6c, 0x29, 0x01, 0x00, + 0x85, 0xb0, 0x04, 0x90, 0x60, 0xe0, 0x68, 0x68, + 0x0c, 0x21, 0x07, 0x69, 0x00, 0x20, 0xee, 0xf7, + 0x2d, 0xfe, 0x70, 0x61, 0x01, 0x89, 0x04, 0x39, + 0x09, 0x04, 0x09, 0x0c, 0x01, 0x81, 0x70, 0x69, + 0x00, 0x68, 0x40, 0x18, 0x04, 0x21, 0xee, 0xf7, + 0x21, 0xfe, 0xf0, 0x61, 0x70, 0x69, 0x20, 0x21, + 0x04, 0x68, 0x04, 0x98, 0x04, 0x22, 0x40, 0x7b, + 0x80, 0x01, 0x08, 0x43, 0x3c, 0x00, 0xa8, 0x29, + 0x01, 0x00, 0xe0, 0x70, 0x28, 0x69, 0x40, 0x89, + 0xa0, 0x70, 0x28, 0x69, 0x40, 0x89, 0x00, 0x0a, + 0x20, 0x70, 0x29, 0x69, 0x0c, 0x31, 0xa0, 0x18, + 0xed, 0xf7, 0x9b, 0xfd, 0x20, 0x78, 0x20, 0x21, + 0x40, 0x06, 0x40, 0x0e, 0x08, 0x43, 0x60, 0x70, + 0x28, 0x69, 0x0a, 0x30, 0x01, 0x88, 0x01, 0x31, + 0x09, 0x04, 0x09, 0x0c, 0x01, 0x80, 0x04, 0xd1, + 0x28, 0x69, 0x0c, 0x30, 0x01, 0x68, 0x3c, 0x00, + 0xe4, 0x29, 0x01, 0x00, 0x01, 0x31, 0x01, 0x60, + 0x35, 0x62, 0x61, 0x79, 0x20, 0x79, 0x09, 0x02, + 0x40, 0x18, 0xa1, 0x79, 0x09, 0x04, 0x40, 0x18, + 0xe1, 0x79, 0x09, 0x06, 0x43, 0x18, 0x00, 0x93, + 0xa0, 0x78, 0x21, 0x78, 0x09, 0x02, 0x40, 0x18, + 0x04, 0x04, 0x24, 0x0c, 0x10, 0x20, 0xee, 0xf7, + 0x13, 0xff, 0xb0, 0x61, 0x28, 0x69, 0x3a, 0x1c, + 0x01, 0x68, 0x00, 0x9b, 0x01, 0xa8, 0x0a, 0x32, + 0x3c, 0x00, 0x20, 0x2a, 0x01, 0x00, 0xff, 0xf7, + 0xc8, 0xfe, 0x28, 0x69, 0x23, 0x1c, 0x01, 0x68, + 0xb0, 0x69, 0x01, 0xaa, 0xff, 0xf7, 0x11, 0xff, + 0x36, 0x68, 0x00, 0x2e, 0x9c, 0xd1, 0x03, 0x49, + 0x04, 0x48, 0x6a, 0x68, 0xf7, 0xf7, 0x63, 0xfb, + 0x05, 0xb0, 0xf0, 0xbd, 0x00, 0x00, 0xfd, 0x6b, + 0x00, 0x00, 0xa0, 0x6a, 0x01, 0x00, 0x01, 0x38, + 0x07, 0x49, 0x40, 0x00, 0x09, 0x5c, 0x00, 0x29, + 0x06, 0xd0, 0x3c, 0x00, 0x5c, 0x2a, 0x01, 0x00, + 0x04, 0x49, 0x1c, 0x39, 0x08, 0x5c, 0x00, 0x28, + 0x01, 0xd0, 0x01, 0x20, 0x70, 0x47, 0x00, 0x20, + 0x70, 0x47, 0x00, 0x00, 0xe6, 0x78, 0x01, 0x00, + 0xfe, 0xb5, 0x05, 0x1c, 0x00, 0x20, 0x02, 0x90, + 0x13, 0x48, 0x17, 0x1c, 0x00, 0x68, 0x0c, 0x1c, + 0x86, 0x78, 0x30, 0x1c, 0xfd, 0xf7, 0x28, 0xfa, + 0x00, 0x28, 0x01, 0xd1, 0x02, 0x98, 0xfe, 0xbd, + 0x00, 0x2d, 0x08, 0xd1, 0x3c, 0x00, 0x98, 0x2a, + 0x01, 0x00, 0x20, 0x68, 0x00, 0xab, 0x18, 0x71, + 0x60, 0x68, 0x58, 0x71, 0xa0, 0x68, 0x98, 0x71, + 0x03, 0x20, 0x38, 0x80, 0x29, 0x1c, 0x30, 0x1c, + 0x01, 0xaa, 0x00, 0xf0, 0x0e, 0xf8, 0x00, 0x2d, + 0xec, 0xd0, 0x00, 0xab, 0x19, 0x79, 0x21, 0x60, + 0x59, 0x79, 0x61, 0x60, 0x99, 0x79, 0xa1, 0x60, + 0x0c, 0x21, 0x39, 0x80, 0xe2, 0xe7, 0xf8, 0x6b, + 0x01, 0x00, 0xf8, 0xb5, 0x15, 0x1c, 0x3c, 0x00, + 0xd4, 0x2a, 0x01, 0x00, 0x42, 0x1e, 0x01, 0x38, + 0x47, 0x00, 0x3f, 0x18, 0x1f, 0x48, 0x3e, 0x18, + 0x00, 0x29, 0x06, 0xd0, 0x01, 0x24, 0x03, 0x22, + 0x31, 0x1c, 0x28, 0x1c, 0xed, 0xf7, 0x04, 0xfd, + 0x32, 0xe0, 0x68, 0x78, 0x01, 0x24, 0x00, 0x28, + 0x05, 0xd0, 0x29, 0x78, 0x08, 0x18, 0x01, 0x38, + 0x0e, 0x28, 0x00, 0xd9, 0x00, 0x24, 0x00, 0x2c, + 0x26, 0xd0, 0x00, 0x2a, 0x07, 0xd1, 0x2a, 0x21, + 0x3c, 0x00, 0x10, 0x2b, 0x01, 0x00, 0x12, 0x48, + 0xed, 0xf7, 0x9f, 0xfc, 0x1c, 0x21, 0x11, 0x48, + 0xed, 0xf7, 0x9b, 0xfc, 0x0f, 0x48, 0x03, 0x22, + 0x29, 0x1c, 0x30, 0x1c, 0xed, 0xf7, 0xe7, 0xfc, + 0x0c, 0x48, 0x71, 0x78, 0xc0, 0x5d, 0xb2, 0x78, + 0x00, 0x29, 0x0e, 0xd0, 0x00, 0x2a, 0x0c, 0xd0, + 0x01, 0x22, 0x43, 0x18, 0x08, 0x4d, 0x06, 0xe0, + 0x41, 0x00, 0x49, 0x19, 0x10, 0x39, 0x8a, 0x73, + 0xb7, 0x78, 0x3c, 0x00, 0x4c, 0x2b, 0x01, 0x00, + 0x01, 0x30, 0xcf, 0x73, 0x83, 0x42, 0xf6, 0xd8, + 0xfe, 0xf7, 0x60, 0xf8, 0x20, 0x1c, 0xf8, 0xbd, + 0xeb, 0x62, 0x01, 0x00, 0xca, 0x78, 0x01, 0x00, + 0x70, 0xb5, 0x05, 0x1c, 0x1c, 0x48, 0x00, 0x23, + 0xc0, 0x56, 0x43, 0x1c, 0x32, 0xd1, 0xa8, 0x7a, + 0xf8, 0xf7, 0x0c, 0xf9, 0x00, 0x26, 0x00, 0x28, + 0x18, 0x4c, 0x08, 0xd0, 0xe8, 0x69, 0xe1, 0x6b, + 0x00, 0x29, 0x0b, 0xd1, 0x3c, 0x00, 0x88, 0x2b, + 0x01, 0x00, 0x66, 0x63, 0x01, 0x21, 0xe1, 0x63, + 0xa6, 0x63, 0x06, 0xe0, 0xa8, 0x69, 0xe1, 0x6b, + 0x00, 0x29, 0x02, 0xd0, 0x66, 0x63, 0xa6, 0x63, + 0xe6, 0x63, 0xa1, 0x6b, 0x01, 0x31, 0xa1, 0x63, + 0x82, 0x03, 0x01, 0xd5, 0x0e, 0x4a, 0x10, 0x43, + 0xe2, 0x6b, 0x00, 0x2a, 0x00, 0xd0, 0x40, 0x42, + 0x62, 0x6b, 0x10, 0x18, 0x60, 0x63, 0x08, 0x29, + 0x0b, 0xd1, 0x00, 0x28, 0x01, 0xdd, 0x3c, 0x00, + 0xc4, 0x2b, 0x01, 0x00, 0x01, 0x20, 0x03, 0xe0, + 0x00, 0x28, 0x03, 0xda, 0x00, 0x20, 0xc0, 0x43, + 0xef, 0xf7, 0x62, 0xfe, 0x66, 0x63, 0xa6, 0x63, + 0x70, 0xbd, 0x00, 0x00, 0xf4, 0x6b, 0x01, 0x00, + 0x84, 0x6a, 0x01, 0x00, 0x00, 0x00, 0xfe, 0xff, + 0x0c, 0x21, 0x05, 0x4a, 0x41, 0x43, 0x89, 0x18, + 0x80, 0xb5, 0x89, 0x78, 0x00, 0x29, 0x01, 0xd1, + 0xf3, 0xf7, 0xf2, 0xfa, 0x80, 0xbd, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0x2c, 0x01, 0x00, 0x60, 0x7b, + 0x01, 0x00, 0x80, 0xb5, 0x01, 0x1c, 0x00, 0x20, + 0xf7, 0xf7, 0x03, 0xfa, 0x80, 0xbd, 0x80, 0xb5, + 0x01, 0x1c, 0x01, 0x20, 0xf7, 0xf7, 0xfd, 0xf9, + 0x80, 0xbd, 0x02, 0x49, 0x89, 0x68, 0x40, 0x1a, + 0xc0, 0x0f, 0x70, 0x47, 0x00, 0x00, 0x00, 0x01, + 0x07, 0x00, 0x02, 0x49, 0x89, 0x68, 0x08, 0x1a, + 0xc0, 0x17, 0x01, 0x30, 0x70, 0x47, 0x00, 0x01, + 0x07, 0x00, 0x3c, 0x00, 0x3c, 0x2c, 0x01, 0x00, + 0x05, 0x49, 0x4a, 0x68, 0x01, 0x23, 0x1a, 0x43, + 0x4a, 0x60, 0x8a, 0x68, 0x10, 0x18, 0x88, 0x60, + 0x48, 0x68, 0x98, 0x43, 0x48, 0x60, 0x70, 0x47, + 0x00, 0x01, 0x07, 0x00, 0x10, 0xb5, 0x15, 0x4b, + 0x00, 0x21, 0x0a, 0x01, 0x9a, 0x58, 0x00, 0x2a, + 0x17, 0xd1, 0x01, 0x24, 0x0a, 0x01, 0x9c, 0x50, + 0xd2, 0x18, 0x10, 0x73, 0x00, 0x23, 0x53, 0x73, + 0x02, 0x23, 0x01, 0x28, 0x3c, 0x00, 0x78, 0x2c, + 0x01, 0x00, 0x0e, 0x4a, 0x05, 0xd1, 0xc8, 0x00, + 0x80, 0x18, 0x10, 0x30, 0x02, 0x78, 0x9a, 0x43, + 0x04, 0xe0, 0xc8, 0x00, 0x80, 0x18, 0x10, 0x30, + 0x02, 0x78, 0x1a, 0x43, 0x02, 0x70, 0x02, 0xe0, + 0x01, 0x31, 0x08, 0x29, 0xe0, 0xdb, 0x08, 0x29, + 0x04, 0xd1, 0x01, 0x21, 0x99, 0x20, 0xee, 0xf7, + 0xfe, 0xfa, 0x03, 0x49, 0x08, 0x04, 0x00, 0x0c, + 0x10, 0xbd, 0xac, 0x73, 0x01, 0x00, 0x3c, 0x00, + 0xb4, 0x2c, 0x01, 0x00, 0x00, 0x60, 0x07, 0x00, + 0xff, 0xff, 0x00, 0x00, 0xf7, 0xb5, 0x19, 0x4f, + 0x19, 0x4e, 0x0c, 0x1c, 0xc1, 0x00, 0xc9, 0x19, + 0xb2, 0x68, 0x10, 0x31, 0x81, 0xb0, 0x01, 0x3a, + 0x4a, 0x60, 0x0b, 0x78, 0x1d, 0x1c, 0x0d, 0x22, + 0x93, 0x43, 0x0b, 0x70, 0x01, 0x22, 0x82, 0x40, + 0x3a, 0x73, 0x12, 0x4b, 0x00, 0x01, 0x03, 0x9a, + 0xc0, 0x18, 0x82, 0x60, 0x10, 0x4a, 0x10, 0x1c, + 0x3c, 0x00, 0xf0, 0x2c, 0x01, 0x00, 0x20, 0x30, + 0x87, 0x79, 0x00, 0xab, 0x1f, 0x70, 0xc0, 0x79, + 0x58, 0x70, 0xb0, 0x68, 0x03, 0x30, 0x00, 0x23, + 0x26, 0x1a, 0x01, 0xd5, 0x04, 0x1c, 0x01, 0x23, + 0x4c, 0x60, 0x0d, 0x70, 0x00, 0x2b, 0x04, 0xd0, + 0x20, 0x1c, 0xff, 0xf7, 0x8a, 0xff, 0x00, 0x28, + 0xfa, 0xd0, 0x00, 0xab, 0x18, 0x88, 0xd0, 0x84, + 0xff, 0xbd, 0x00, 0x60, 0x07, 0x00, 0x00, 0x01, + 0x07, 0x00, 0x3c, 0x00, 0x2c, 0x2d, 0x01, 0x00, + 0xac, 0x73, 0x01, 0x00, 0x00, 0x10, 0x07, 0x00, + 0x30, 0xb5, 0x00, 0x20, 0xc0, 0x43, 0x0b, 0x4c, + 0x09, 0x4b, 0x00, 0x22, 0xd1, 0x00, 0x09, 0x19, + 0x0d, 0x7c, 0xed, 0x07, 0x07, 0xd5, 0x49, 0x69, + 0x9d, 0x68, 0x49, 0x1b, 0x00, 0xd5, 0x00, 0x21, + 0x81, 0x42, 0x00, 0xd2, 0x08, 0x1c, 0x01, 0x32, + 0x08, 0x2a, 0xef, 0xdb, 0x30, 0xbd, 0x00, 0x00, + 0x00, 0x01, 0x07, 0x00, 0x3c, 0x00, 0x68, 0x2d, + 0x01, 0x00, 0x00, 0x60, 0x07, 0x00, 0xb0, 0xb5, + 0x08, 0x28, 0x0b, 0xd2, 0x08, 0x4d, 0x04, 0x01, + 0x29, 0x59, 0x00, 0x29, 0x04, 0xd0, 0x00, 0xf0, + 0x4a, 0xf8, 0x00, 0x20, 0x28, 0x51, 0xb0, 0xbd, + 0x02, 0x21, 0x00, 0xe0, 0x03, 0x21, 0x99, 0x20, + 0xee, 0xf7, 0x89, 0xfa, 0xb0, 0xbd, 0xac, 0x73, + 0x01, 0x00, 0x03, 0x49, 0x00, 0x01, 0x40, 0x18, + 0x41, 0x7b, 0x08, 0x22, 0x11, 0x43, 0x3c, 0x00, + 0xa4, 0x2d, 0x01, 0x00, 0x41, 0x73, 0x70, 0x47, + 0xac, 0x73, 0x01, 0x00, 0x01, 0x48, 0x80, 0x68, + 0x70, 0x47, 0x00, 0x00, 0x00, 0x01, 0x07, 0x00, + 0x70, 0xb5, 0x0b, 0x4e, 0x09, 0x4d, 0x00, 0x22, + 0xd0, 0x00, 0x84, 0x19, 0x20, 0x7c, 0xc0, 0x07, + 0x07, 0xd5, 0x60, 0x69, 0xff, 0xf7, 0x26, 0xff, + 0x00, 0x28, 0x02, 0xd0, 0xa8, 0x68, 0x32, 0x30, + 0x60, 0x61, 0x01, 0x32, 0x08, 0x2a, 0xef, 0xdb, + 0x3c, 0x00, 0xe0, 0x2d, 0x01, 0x00, 0x70, 0xbd, + 0x00, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x60, + 0x07, 0x00, 0x02, 0x4a, 0xc0, 0x00, 0x80, 0x18, + 0x01, 0x74, 0x70, 0x47, 0x00, 0x00, 0x00, 0x60, + 0x07, 0x00, 0x04, 0x49, 0xc0, 0x00, 0x41, 0x18, + 0x08, 0x7c, 0x08, 0x23, 0x02, 0x1c, 0x9a, 0x43, + 0x0a, 0x74, 0x70, 0x47, 0x00, 0x00, 0x00, 0x60, + 0x07, 0x00, 0x70, 0xb5, 0x08, 0x28, 0x17, 0xd2, + 0x0e, 0x49, 0x3c, 0x00, 0x1c, 0x2e, 0x01, 0x00, + 0x8a, 0x68, 0x0e, 0x4d, 0x01, 0x3a, 0xc1, 0x00, + 0x49, 0x19, 0x4a, 0x61, 0x0c, 0x4b, 0x9a, 0x79, + 0x10, 0x31, 0x0c, 0x78, 0x0d, 0x26, 0xb4, 0x43, + 0x0c, 0x70, 0x01, 0x21, 0x81, 0x40, 0x29, 0x73, + 0x9a, 0x71, 0x09, 0x4a, 0x07, 0x49, 0x00, 0x01, + 0x80, 0x18, 0x41, 0x60, 0x70, 0xbd, 0x05, 0x21, + 0x99, 0x20, 0xee, 0xf7, 0x29, 0xfa, 0x70, 0xbd, + 0x00, 0x01, 0x07, 0x00, 0x3c, 0x00, 0x58, 0x2e, + 0x01, 0x00, 0x00, 0x60, 0x07, 0x00, 0x20, 0x10, + 0x07, 0x00, 0xd1, 0x75, 0x00, 0x00, 0xac, 0x73, + 0x01, 0x00, 0xf8, 0xb5, 0x9e, 0x46, 0x1a, 0x4b, + 0x94, 0x46, 0x9b, 0x68, 0x1a, 0x4c, 0xc2, 0x00, + 0x12, 0x19, 0x01, 0x3b, 0x53, 0x61, 0x15, 0x1c, + 0x18, 0x4c, 0xa6, 0x79, 0x2a, 0x1c, 0x10, 0x32, + 0x13, 0x78, 0x0d, 0x27, 0xbb, 0x43, 0x13, 0x70, + 0x01, 0x27, 0x12, 0x4b, 0x87, 0x40, 0x3c, 0x00, + 0x94, 0x2e, 0x01, 0x00, 0x1f, 0x73, 0xa6, 0x71, + 0x12, 0x4e, 0x00, 0x01, 0x80, 0x19, 0x63, 0x46, + 0x43, 0x60, 0x73, 0x46, 0x83, 0x60, 0x13, 0x78, + 0x40, 0x7b, 0xa6, 0x79, 0x01, 0x27, 0x18, 0x43, + 0x38, 0x43, 0x14, 0x35, 0x00, 0xab, 0x1e, 0x70, + 0xe4, 0x79, 0x5c, 0x70, 0x06, 0x4b, 0x9b, 0x68, + 0x03, 0x33, 0xcc, 0x1a, 0x00, 0xd5, 0x19, 0x1c, + 0x29, 0x60, 0x10, 0x70, 0x00, 0xab, 0x18, 0x88, + 0x3c, 0x00, 0xd0, 0x2e, 0x01, 0x00, 0x03, 0x4c, + 0x20, 0x3c, 0xe0, 0x84, 0xf8, 0xbd, 0x00, 0x01, + 0x07, 0x00, 0x00, 0x60, 0x07, 0x00, 0x20, 0x10, + 0x07, 0x00, 0xac, 0x73, 0x01, 0x00, 0x00, 0xb5, + 0x01, 0x1c, 0xff, 0xf7, 0x5e, 0xff, 0x42, 0x18, + 0x10, 0x1c, 0xff, 0xf7, 0x92, 0xfe, 0x00, 0x28, + 0xfa, 0xd0, 0x00, 0xbd, 0x00, 0x00, 0x89, 0x1a, + 0x40, 0x1a, 0x99, 0x18, 0x88, 0x42, 0x01, 0xd8, + 0x01, 0x20, 0x3c, 0x00, 0x0c, 0x2f, 0x01, 0x00, + 0x70, 0x47, 0x00, 0x20, 0x70, 0x47, 0x00, 0x00, + 0xf8, 0xb5, 0x0f, 0x1c, 0x04, 0x1c, 0x00, 0x28, + 0x01, 0xd1, 0xee, 0xf7, 0xef, 0xf9, 0x21, 0x1c, + 0x01, 0x20, 0xff, 0xf7, 0x19, 0xfa, 0x41, 0x20, + 0x00, 0x5d, 0x00, 0x28, 0x01, 0xd1, 0x00, 0x25, + 0x04, 0xe0, 0x02, 0x28, 0x01, 0xd1, 0x05, 0x25, + 0x00, 0xe0, 0x01, 0x25, 0xe0, 0x68, 0xee, 0xf7, + 0x29, 0xfb, 0xa6, 0x6b, 0x3c, 0x00, 0x48, 0x2f, + 0x01, 0x00, 0x00, 0x2e, 0x10, 0xd0, 0x00, 0x2f, + 0x06, 0xd0, 0x2f, 0x20, 0x02, 0x5d, 0x20, 0x6a, + 0x41, 0x6b, 0x28, 0x1c, 0xed, 0xf7, 0x44, 0xfa, + 0xa0, 0x69, 0x00, 0x28, 0x01, 0xd0, 0xee, 0xf7, + 0x46, 0xfc, 0x20, 0x6a, 0xee, 0xf7, 0x43, 0xfc, + 0x20, 0x1c, 0xee, 0xf7, 0x40, 0xfc, 0x30, 0x1c, + 0xf8, 0xbd, 0xb0, 0xb5, 0x04, 0x1c, 0xc0, 0x6b, + 0x00, 0x28, 0x09, 0xd0, 0x20, 0x69, 0x3c, 0x00, + 0x84, 0x2f, 0x01, 0x00, 0x00, 0x8b, 0xee, 0xf7, + 0x55, 0xf9, 0x00, 0x28, 0x03, 0xd0, 0x21, 0x1c, + 0x06, 0x20, 0xff, 0xf7, 0xe3, 0xf9, 0x08, 0x4d, + 0x20, 0x1c, 0xa9, 0x6d, 0xff, 0xf7, 0xba, 0xff, + 0x00, 0x28, 0x07, 0xd0, 0xe8, 0x68, 0x01, 0x30, + 0xe8, 0x60, 0x28, 0x6a, 0x01, 0x38, 0x28, 0x62, + 0xfc, 0xf7, 0x78, 0xf8, 0xb0, 0xbd, 0x00, 0x00, + 0xc4, 0x69, 0x01, 0x00, 0x10, 0xb5, 0x06, 0x4c, + 0x3c, 0x00, 0xc0, 0x2f, 0x01, 0x00, 0xe1, 0x6d, + 0xff, 0xf7, 0xa7, 0xff, 0x00, 0x28, 0x04, 0xd0, + 0xe0, 0x69, 0x01, 0x38, 0xe0, 0x61, 0xfc, 0xf7, + 0x68, 0xf8, 0x10, 0xbd, 0x00, 0x00, 0xc4, 0x69, + 0x01, 0x00, 0x0c, 0x23, 0x0c, 0x49, 0x58, 0x43, + 0x40, 0x18, 0x10, 0xb5, 0x44, 0x68, 0xa1, 0x68, + 0x00, 0x29, 0x02, 0xd0, 0x20, 0x1c, 0xed, 0xf7, + 0xf3, 0xf9, 0xe0, 0x6b, 0x00, 0x28, 0x08, 0xd0, + 0x20, 0x69, 0x3c, 0x00, 0xfc, 0x2f, 0x01, 0x00, + 0x00, 0x8b, 0xee, 0xf7, 0x19, 0xf9, 0x00, 0x28, + 0x02, 0xd0, 0x20, 0x1c, 0xf9, 0xf7, 0x26, 0xf9, + 0x10, 0xbd, 0x00, 0x00, 0x60, 0x7b, 0x01, 0x00, + 0xf8, 0xb5, 0x22, 0x49, 0x48, 0x68, 0x80, 0x00, + 0x06, 0xd4, 0x01, 0x20, 0x40, 0x07, 0x08, 0x60, + 0x4a, 0x69, 0x92, 0x00, 0x00, 0xd4, 0x48, 0x60, + 0x1d, 0x4f, 0x78, 0x7e, 0xc3, 0x06, 0x01, 0x20, + 0x02, 0x1c, 0xdb, 0x0e, 0x3c, 0x00, 0x38, 0x30, + 0x01, 0x00, 0x9a, 0x40, 0x0a, 0x60, 0x79, 0x69, + 0x8c, 0x68, 0x8c, 0x60, 0x21, 0x07, 0x89, 0x0f, + 0x09, 0xd0, 0x21, 0x07, 0x04, 0xd5, 0x0b, 0x21, + 0x9e, 0x20, 0xee, 0xf7, 0x28, 0xf9, 0x00, 0xe0, + 0x78, 0x64, 0x0c, 0x20, 0x84, 0x43, 0x12, 0x48, + 0x3d, 0x68, 0x06, 0x5d, 0x6c, 0x68, 0x2c, 0x34, + 0x06, 0xe0, 0xa0, 0x68, 0x00, 0x68, 0xa0, 0x60, + 0xe9, 0x68, 0x28, 0x1c, 0xed, 0xf7, 0x3c, 0x00, + 0x74, 0x30, 0x01, 0x00, 0xb2, 0xf9, 0x01, 0x3e, + 0xf6, 0xd2, 0xa0, 0x68, 0x80, 0x68, 0x00, 0x28, + 0x0d, 0xd0, 0x40, 0x89, 0x00, 0x28, 0x0a, 0xd0, + 0x78, 0x6c, 0x00, 0x28, 0x07, 0xd1, 0x78, 0x69, + 0x80, 0x68, 0x80, 0x07, 0x03, 0xd1, 0x0c, 0x21, + 0x9e, 0x20, 0xee, 0xf7, 0x03, 0xf9, 0xf8, 0xbd, + 0x00, 0x10, 0x07, 0x00, 0xcc, 0x6d, 0x01, 0x00, + 0xb4, 0x44, 0x01, 0x00, 0x09, 0x49, 0x80, 0xb5, + 0x3c, 0x00, 0xb0, 0x30, 0x01, 0x00, 0x08, 0x7e, + 0xc2, 0x06, 0xd2, 0x0e, 0x01, 0x20, 0x90, 0x40, + 0x07, 0x4a, 0x10, 0x60, 0x00, 0x20, 0x0a, 0x69, + 0xc0, 0x43, 0x90, 0x60, 0x08, 0x68, 0x24, 0x31, + 0x06, 0xc9, 0x03, 0x69, 0xed, 0xf7, 0x86, 0xf9, + 0x80, 0xbd, 0xcc, 0x6d, 0x01, 0x00, 0x00, 0x10, + 0x07, 0x00, 0xf8, 0xb5, 0x44, 0x68, 0x06, 0x1c, + 0x2c, 0x34, 0x20, 0x68, 0x0d, 0x1c, 0x80, 0x68, + 0x00, 0x90, 0x3c, 0x00, 0xec, 0x30, 0x01, 0x00, + 0x00, 0x28, 0x00, 0xd0, 0xc5, 0x60, 0x20, 0x68, + 0x00, 0x68, 0x20, 0x60, 0x40, 0x68, 0x00, 0x28, + 0x03, 0xd0, 0x0a, 0x21, 0x9e, 0x20, 0xee, 0xf7, + 0xcf, 0xf8, 0x20, 0x68, 0x45, 0x60, 0x28, 0x1c, + 0x02, 0xe0, 0x00, 0x22, 0x42, 0x60, 0x08, 0x1c, + 0xc1, 0x68, 0x00, 0x29, 0xf9, 0xd1, 0x71, 0x68, + 0x60, 0x27, 0x0b, 0x1c, 0x40, 0x33, 0x9c, 0x46, + 0x9b, 0x78, 0xca, 0x7e, 0x3c, 0x00, 0x28, 0x31, + 0x01, 0x00, 0x5b, 0x01, 0x12, 0x07, 0x12, 0x0f, + 0x3b, 0x40, 0x1a, 0x43, 0x8b, 0x8f, 0xff, 0x27, + 0x3f, 0x04, 0x1b, 0x04, 0x3b, 0x40, 0x1a, 0x43, + 0x90, 0x23, 0x1a, 0x43, 0x42, 0x60, 0x63, 0x46, + 0x9a, 0x78, 0x01, 0x32, 0xd2, 0x07, 0xd2, 0x0f, + 0x9a, 0x70, 0x89, 0x6b, 0xc1, 0x60, 0x21, 0x68, + 0x88, 0x60, 0x00, 0x98, 0x00, 0x28, 0x01, 0xd0, + 0x00, 0x98, 0xc5, 0x60, 0x0a, 0x4f, 0x3c, 0x00, + 0x64, 0x31, 0x01, 0x00, 0xbd, 0x79, 0xa0, 0x69, + 0x00, 0x28, 0x0c, 0xd0, 0x00, 0x22, 0xa2, 0x61, + 0x74, 0x68, 0x60, 0x69, 0xef, 0xf7, 0x2e, 0xff, + 0xe0, 0x6a, 0x61, 0x69, 0x40, 0x68, 0x48, 0x60, + 0x61, 0x69, 0x01, 0x20, 0x08, 0x60, 0xbd, 0x71, + 0xf8, 0xbd, 0x00, 0x00, 0x20, 0x10, 0x07, 0x00, + 0xfe, 0xb5, 0x44, 0x68, 0x0f, 0x1c, 0x01, 0x94, + 0x2c, 0x34, 0x20, 0x1c, 0x12, 0x30, 0x02, 0x90, + 0x3c, 0x00, 0xa0, 0x31, 0x01, 0x00, 0x2c, 0xe0, + 0x0c, 0x20, 0xee, 0xf7, 0x00, 0xfb, 0x05, 0x1c, + 0x60, 0x68, 0x00, 0x28, 0x1d, 0xd1, 0x02, 0x98, + 0x00, 0x21, 0x00, 0x90, 0x00, 0x20, 0xee, 0xf7, + 0x0e, 0xfa, 0x06, 0x1c, 0x00, 0x98, 0x04, 0x21, + 0xee, 0xf7, 0x09, 0xfa, 0x01, 0x1c, 0x01, 0x98, + 0xc0, 0x7e, 0x00, 0x07, 0x00, 0x0f, 0xd0, 0x30, + 0x70, 0x60, 0x01, 0x98, 0xc0, 0x7e, 0x00, 0x07, + 0x00, 0x0f, 0x3c, 0x00, 0xdc, 0x31, 0x01, 0x00, + 0xf0, 0x30, 0x48, 0x60, 0x30, 0x1c, 0xee, 0xf7, + 0x19, 0xf9, 0x65, 0x60, 0xe6, 0x60, 0x01, 0xe0, + 0x20, 0x68, 0x05, 0x60, 0x60, 0x68, 0x28, 0x60, + 0x25, 0x60, 0x00, 0x20, 0x68, 0x60, 0xa8, 0x60, + 0x38, 0x1c, 0xff, 0x30, 0x00, 0x06, 0x00, 0x0e, + 0x39, 0x1c, 0x07, 0x1c, 0x00, 0x29, 0xca, 0xd1, + 0x60, 0x68, 0xa0, 0x60, 0xfe, 0xbd, 0x00, 0x00, + 0xff, 0xb5, 0x05, 0x1c, 0x3c, 0x00, 0x18, 0x32, + 0x01, 0x00, 0x08, 0x1c, 0x00, 0x26, 0x81, 0xb0, + 0xf4, 0xf7, 0x2f, 0xfe, 0x04, 0x1c, 0x02, 0xd0, + 0x60, 0x68, 0xff, 0x28, 0x01, 0xd1, 0x06, 0x26, + 0x28, 0xe0, 0x21, 0x1c, 0x20, 0x31, 0x0a, 0x78, + 0x01, 0x2a, 0x01, 0xd1, 0x03, 0x26, 0x21, 0xe0, + 0x01, 0x27, 0x25, 0x60, 0x0f, 0x70, 0x11, 0xc5, + 0x1d, 0x48, 0x08, 0x3d, 0x68, 0x61, 0x03, 0x98, + 0x6a, 0x46, 0xe8, 0x60, 0x04, 0x98, 0x3c, 0x00, + 0x54, 0x32, 0x01, 0x00, 0x28, 0x61, 0x1a, 0x48, + 0xa8, 0x61, 0x1a, 0x48, 0xe8, 0x61, 0x1a, 0x48, + 0x28, 0x62, 0x1a, 0x48, 0x68, 0x62, 0x20, 0x7e, + 0xa1, 0x68, 0xed, 0xf7, 0xb3, 0xfe, 0x00, 0x28, + 0x06, 0xd1, 0x60, 0x7e, 0xe1, 0x68, 0x6a, 0x46, + 0xed, 0xf7, 0xac, 0xfe, 0x00, 0x28, 0x07, 0xd0, + 0x04, 0x26, 0x31, 0x1c, 0x9e, 0x20, 0xee, 0xf7, + 0x0d, 0xf8, 0x30, 0x1c, 0x05, 0xb0, 0xf0, 0xbd, + 0x3c, 0x00, 0x90, 0x32, 0x01, 0x00, 0x6a, 0x46, + 0x0f, 0x49, 0x1d, 0x20, 0xed, 0xf7, 0x9d, 0xfe, + 0x01, 0x21, 0x0d, 0x48, 0x49, 0x07, 0x01, 0x60, + 0x22, 0x7e, 0x3b, 0x1c, 0xd2, 0x06, 0xd2, 0x0e, + 0x93, 0x40, 0x43, 0x60, 0x62, 0x7e, 0xd2, 0x06, + 0xd2, 0x0e, 0x97, 0x40, 0x47, 0x60, 0x41, 0x60, + 0xe6, 0xe7, 0x31, 0x33, 0x01, 0x00, 0xd9, 0x32, + 0x01, 0x00, 0x91, 0x31, 0x01, 0x00, 0xdd, 0x30, + 0x01, 0x00, 0x3c, 0x00, 0xcc, 0x32, 0x01, 0x00, + 0xfd, 0x32, 0x01, 0x00, 0x71, 0x33, 0x01, 0x00, + 0x00, 0x10, 0x07, 0x00, 0x42, 0x68, 0x2c, 0x32, + 0x50, 0x68, 0x43, 0x68, 0x0b, 0x60, 0x81, 0x68, + 0x4b, 0x89, 0x0b, 0x81, 0x83, 0x68, 0x00, 0x21, + 0xd9, 0x60, 0x41, 0x60, 0x81, 0x60, 0x00, 0x68, + 0x50, 0x60, 0x00, 0x20, 0x70, 0x47, 0x00, 0x00, + 0x70, 0xb5, 0x42, 0x68, 0xff, 0x26, 0x91, 0x87, + 0x10, 0x6b, 0x0c, 0x04, 0x3c, 0x00, 0x08, 0x33, + 0x01, 0x00, 0x05, 0x1c, 0x36, 0x04, 0x34, 0x40, + 0x43, 0x68, 0x59, 0x68, 0xb1, 0x43, 0x21, 0x43, + 0x59, 0x60, 0x00, 0x68, 0xa8, 0x42, 0xf7, 0xd1, + 0x10, 0x6b, 0x51, 0x69, 0x40, 0x68, 0x48, 0x60, + 0x51, 0x69, 0x01, 0x20, 0x08, 0x60, 0x70, 0xbd, + 0x00, 0x00, 0xb0, 0xb5, 0x43, 0x68, 0x08, 0x1c, + 0x59, 0x62, 0x9a, 0x62, 0x00, 0x25, 0x0a, 0xe0, + 0x45, 0x81, 0xc4, 0x68, 0x2a, 0x1c, 0x3c, 0x00, + 0x44, 0x33, 0x01, 0x00, 0x00, 0x2c, 0x03, 0xd1, + 0x9a, 0x7e, 0x12, 0x07, 0x12, 0x0f, 0x10, 0x32, + 0x42, 0x60, 0x20, 0x1c, 0x00, 0x28, 0xf2, 0xd1, + 0x18, 0x69, 0x41, 0x60, 0x19, 0x69, 0x01, 0x20, + 0x08, 0x60, 0x02, 0x48, 0x00, 0x68, 0xed, 0xf7, + 0x37, 0xf8, 0xb0, 0xbd, 0x5c, 0x5b, 0x01, 0x00, + 0x01, 0x20, 0x05, 0x49, 0x40, 0x07, 0x80, 0xb5, + 0x88, 0x60, 0x04, 0x48, 0x01, 0x68, 0x0d, 0x20, + 0x3c, 0x00, 0x80, 0x33, 0x01, 0x00, 0xfe, 0xf7, + 0xe6, 0xff, 0x80, 0xbd, 0x00, 0x00, 0x00, 0x10, + 0x07, 0x00, 0xc4, 0x60, 0x01, 0x00, 0xf8, 0xb5, + 0x0e, 0x4f, 0x0c, 0x4e, 0x00, 0x24, 0x48, 0x20, + 0x60, 0x43, 0xc5, 0x19, 0x48, 0x21, 0x28, 0x1c, + 0xed, 0xf7, 0x7b, 0xf8, 0x1c, 0x20, 0x60, 0x43, + 0x81, 0x19, 0x28, 0x1d, 0x1c, 0x22, 0xed, 0xf7, + 0xfe, 0xf8, 0x1c, 0x23, 0xe8, 0x56, 0x05, 0x49, + 0xfb, 0xf7, 0x3c, 0x00, 0xbc, 0x33, 0x01, 0x00, + 0xcd, 0xf8, 0x01, 0x34, 0x01, 0x2c, 0xe9, 0xd3, + 0xf8, 0xbd, 0x00, 0x00, 0xb8, 0x44, 0x01, 0x00, + 0xcc, 0x6d, 0x01, 0x00, 0x15, 0x32, 0x01, 0x00, + 0xff, 0xb5, 0x05, 0x1c, 0x0a, 0x30, 0x06, 0x1c, + 0x81, 0xb0, 0xf2, 0xf7, 0xdd, 0xf8, 0x18, 0x4f, + 0x04, 0x1c, 0x39, 0x88, 0xef, 0xf7, 0xbc, 0xfc, + 0x32, 0x88, 0x78, 0x68, 0x02, 0x80, 0x72, 0x88, + 0x02, 0x30, 0x02, 0x80, 0x3c, 0x00, 0xf8, 0x33, + 0x01, 0x00, 0xb1, 0x88, 0x12, 0x4e, 0x41, 0x80, + 0x28, 0x88, 0x08, 0x36, 0x40, 0x05, 0x00, 0x28, + 0x05, 0xda, 0x69, 0x88, 0x03, 0x9a, 0x20, 0x1c, + 0xf7, 0xf7, 0x01, 0xfd, 0x00, 0xe0, 0x00, 0x20, + 0x70, 0x80, 0xf8, 0xf7, 0x5e, 0xfc, 0x01, 0x21, + 0x09, 0x03, 0x00, 0x28, 0x30, 0x88, 0x01, 0xd0, + 0x88, 0x43, 0x00, 0xe0, 0x08, 0x43, 0x30, 0x80, + 0x05, 0x48, 0x00, 0x22, 0x00, 0x21, 0x3c, 0x00, + 0x34, 0x34, 0x01, 0x00, 0x14, 0x30, 0xef, 0xf7, + 0x65, 0xfc, 0x20, 0x1c, 0xf9, 0xf7, 0x74, 0xf8, + 0x05, 0xb0, 0xf0, 0xbd, 0xb0, 0x7a, 0x01, 0x00, + 0x10, 0xb5, 0x0e, 0x4c, 0x60, 0x68, 0xf8, 0xf7, + 0x95, 0xf9, 0x20, 0x68, 0x00, 0x6a, 0x00, 0x28, + 0x13, 0xd1, 0xf8, 0xf7, 0xbf, 0xfc, 0x00, 0x28, + 0x08, 0xd0, 0x21, 0x68, 0x01, 0x20, 0x08, 0x62, + 0x1f, 0x21, 0x00, 0x22, 0x83, 0x20, 0x00, 0xf0, + 0x3c, 0x00, 0x70, 0x34, 0x01, 0x00, 0x9f, 0xf9, + 0x02, 0xe0, 0x60, 0x68, 0xf8, 0xf7, 0x21, 0xfa, + 0xff, 0xf7, 0x97, 0xfc, 0x21, 0x68, 0x08, 0x61, + 0x10, 0xbd, 0x14, 0x7a, 0x01, 0x00, 0xfe, 0xb5, + 0x1b, 0x4e, 0x0f, 0x1c, 0x1d, 0x1c, 0x14, 0x1c, + 0xb0, 0x60, 0x08, 0x1c, 0xf7, 0xf7, 0x2b, 0xff, + 0xb0, 0x80, 0x34, 0x73, 0x35, 0x62, 0x38, 0x1c, + 0x01, 0xaa, 0x02, 0xa9, 0xf7, 0xf7, 0x25, 0xff, + 0x00, 0xab, 0x3c, 0x00, 0xac, 0x34, 0x01, 0x00, + 0x18, 0x7a, 0x01, 0x28, 0x18, 0xd1, 0x18, 0x79, + 0x0b, 0x28, 0x08, 0xd1, 0x30, 0x7f, 0x24, 0x23, + 0x0f, 0x49, 0x58, 0x43, 0x40, 0x18, 0x80, 0x68, + 0xec, 0xf7, 0x88, 0xff, 0xfe, 0xbd, 0x00, 0xab, + 0x18, 0x79, 0x0a, 0x28, 0x08, 0xd1, 0xf7, 0xf7, + 0x39, 0xfd, 0x07, 0x1c, 0x29, 0x1c, 0x20, 0x1c, + 0xf7, 0xf7, 0x16, 0xfd, 0x38, 0x18, 0xb0, 0x80, + 0x30, 0x7f, 0x24, 0x23, 0x3c, 0x00, 0xe8, 0x34, + 0x01, 0x00, 0x04, 0x49, 0x58, 0x43, 0x40, 0x18, + 0x40, 0x68, 0xec, 0xf7, 0x72, 0xff, 0xe8, 0xe7, + 0x00, 0x00, 0xd4, 0x79, 0x01, 0x00, 0x94, 0x46, + 0x01, 0x00, 0xb0, 0xb5, 0xff, 0xf7, 0x53, 0xfc, + 0x04, 0x1c, 0xfb, 0xf7, 0xfc, 0xfa, 0x0c, 0x4d, + 0x29, 0x68, 0x09, 0x69, 0x09, 0x1b, 0x0c, 0x1a, + 0x02, 0x21, 0x1f, 0x20, 0x00, 0xf0, 0x8b, 0xf8, + 0x14, 0x2c, 0x06, 0xdd, 0x02, 0x22, 0x3c, 0x00, + 0x24, 0x35, 0x01, 0x00, 0x21, 0x1c, 0x1f, 0x20, + 0x00, 0xf0, 0x50, 0xf8, 0x01, 0x20, 0xb0, 0xbd, + 0x29, 0x68, 0x01, 0x20, 0x89, 0x6a, 0x00, 0x29, + 0xf9, 0xd0, 0x00, 0x20, 0xb0, 0xbd, 0x00, 0x00, + 0x14, 0x7a, 0x01, 0x00, 0xf8, 0xb5, 0x1a, 0x4d, + 0x07, 0x1c, 0xae, 0x79, 0x01, 0x21, 0x19, 0x4c, + 0x00, 0x20, 0x22, 0x68, 0x00, 0x2a, 0x14, 0xd1, + 0xae, 0x71, 0xa2, 0x68, 0xd0, 0x68, 0x06, 0xca, + 0x3c, 0x00, 0x60, 0x35, 0x01, 0x00, 0xec, 0xf7, + 0x3c, 0xff, 0xae, 0x79, 0x00, 0x21, 0x13, 0x4a, + 0x50, 0x69, 0x01, 0x30, 0x50, 0x61, 0xa0, 0x68, + 0x80, 0x68, 0xa0, 0x60, 0x62, 0x68, 0x90, 0x42, + 0x06, 0xd1, 0x01, 0x20, 0x20, 0x60, 0x03, 0xe0, + 0x01, 0x30, 0x0c, 0x34, 0x03, 0x28, 0xe3, 0xdb, + 0x00, 0x2f, 0x08, 0xd1, 0x00, 0x29, 0x0a, 0xd0, + 0x0a, 0x48, 0x40, 0x68, 0x00, 0x28, 0x06, 0xd0, + 0xfa, 0xf7, 0x3c, 0x00, 0x9c, 0x35, 0x01, 0x00, + 0xf5, 0xff, 0x03, 0xe0, 0x01, 0x2f, 0x03, 0xd0, + 0x00, 0x29, 0x01, 0xd1, 0xae, 0x71, 0xce, 0xe7, + 0xae, 0x71, 0xf8, 0xbd, 0x20, 0x10, 0x07, 0x00, + 0x18, 0xd9, 0x01, 0x00, 0xa8, 0x60, 0x01, 0x00, + 0x70, 0x5d, 0x01, 0x00, 0x80, 0xb5, 0x01, 0x23, + 0xf5, 0xf7, 0x7c, 0xf8, 0x80, 0xbd, 0x00, 0x00, + 0x80, 0xb5, 0x00, 0x23, 0xf5, 0xf7, 0x76, 0xf8, + 0x80, 0xbd, 0x00, 0x00, 0x3c, 0x00, 0xd8, 0x35, + 0x01, 0x00, 0xf8, 0xb5, 0x13, 0x4b, 0x00, 0x24, + 0x1b, 0x88, 0x98, 0x42, 0x1b, 0xd2, 0x11, 0x4b, + 0xc0, 0x00, 0xc0, 0x18, 0x45, 0x68, 0x06, 0x68, + 0x28, 0x68, 0x00, 0x28, 0x17, 0xd1, 0x0e, 0x4f, + 0xa8, 0x68, 0x43, 0x68, 0xb3, 0x42, 0x09, 0xd1, + 0xc3, 0x68, 0x8b, 0x42, 0x06, 0xd1, 0x03, 0x68, + 0x93, 0x42, 0x01, 0xd0, 0x53, 0x1c, 0x01, 0xd1, + 0x01, 0x24, 0x47, 0x60, 0x80, 0x68, 0x3c, 0x00, + 0x14, 0x36, 0x01, 0x00, 0x6b, 0x68, 0x83, 0x42, + 0xee, 0xd1, 0x03, 0xe0, 0x01, 0x21, 0x80, 0x20, + 0xed, 0xf7, 0x40, 0xfe, 0x20, 0x1c, 0xf8, 0xbd, + 0x56, 0x57, 0x01, 0x00, 0x84, 0x5d, 0x01, 0x00, + 0x29, 0xe3, 0x00, 0x00, 0xf8, 0xb5, 0x17, 0x4f, + 0x0a, 0x1c, 0xbe, 0x79, 0x16, 0x4d, 0x00, 0x23, + 0x6c, 0x68, 0x07, 0xe0, 0x21, 0x68, 0x91, 0x42, + 0x02, 0xd1, 0x21, 0x79, 0x81, 0x42, 0x04, 0xd0, + 0x3c, 0x00, 0x50, 0x36, 0x01, 0x00, 0x23, 0x1c, + 0xe4, 0x68, 0x00, 0x2c, 0xf5, 0xd1, 0x17, 0xe0, + 0x00, 0x2c, 0x15, 0xd0, 0x00, 0x2b, 0x0d, 0xd1, + 0xe3, 0x68, 0x0d, 0x48, 0x6b, 0x60, 0x00, 0x88, + 0x00, 0x2b, 0x02, 0xd1, 0xff, 0xf7, 0xd1, 0xfb, + 0x06, 0xe0, 0x0a, 0x4a, 0x99, 0x68, 0xff, 0xf7, + 0xf6, 0xfb, 0x01, 0xe0, 0xe0, 0x68, 0xd8, 0x60, + 0x28, 0x68, 0xe0, 0x60, 0x2c, 0x60, 0x02, 0xe0, + 0x01, 0x21, 0x3c, 0x00, 0x8c, 0x36, 0x01, 0x00, + 0xff, 0xf7, 0xa4, 0xff, 0xbe, 0x71, 0xf8, 0xbd, + 0x20, 0x10, 0x07, 0x00, 0x7c, 0x5d, 0x01, 0x00, + 0x2c, 0x74, 0x01, 0x00, 0x21, 0x38, 0x01, 0x00, + 0x70, 0xb5, 0x09, 0x4e, 0xb5, 0x79, 0xf9, 0xf7, + 0xaf, 0xfe, 0x04, 0x1c, 0x09, 0xd0, 0x20, 0x1c, + 0xed, 0xf7, 0x0c, 0xfb, 0x05, 0x49, 0x8a, 0x68, + 0x80, 0x18, 0x88, 0x60, 0x08, 0x68, 0x01, 0x30, + 0x08, 0x60, 0xb5, 0x71, 0x3c, 0x00, 0xc8, 0x36, + 0x01, 0x00, 0x20, 0x1c, 0x70, 0xbd, 0x20, 0x10, + 0x07, 0x00, 0xa8, 0x60, 0x01, 0x00, 0x09, 0x48, + 0x80, 0xb5, 0x40, 0x68, 0x02, 0x1c, 0x0b, 0xe0, + 0x01, 0x69, 0x00, 0x29, 0x07, 0xd0, 0x82, 0x42, + 0x04, 0xd0, 0x81, 0x68, 0x05, 0x48, 0x00, 0x88, + 0xff, 0xf7, 0xe5, 0xfa, 0x80, 0xbd, 0xc0, 0x68, + 0x00, 0x28, 0xf1, 0xd1, 0x80, 0xbd, 0x7c, 0x5d, + 0x01, 0x00, 0x2c, 0x74, 0x01, 0x00, 0x3c, 0x00, + 0x04, 0x37, 0x01, 0x00, 0x05, 0x48, 0x80, 0xb5, + 0x42, 0x68, 0x00, 0x2a, 0x04, 0xd0, 0x04, 0x48, + 0x00, 0x88, 0x91, 0x68, 0xff, 0xf7, 0xd2, 0xfa, + 0x80, 0xbd, 0x00, 0x00, 0x7c, 0x5d, 0x01, 0x00, + 0x2c, 0x74, 0x01, 0x00, 0x05, 0x48, 0x01, 0x68, + 0x00, 0x29, 0x04, 0xd0, 0xc0, 0x68, 0x00, 0x28, + 0x01, 0xd0, 0x01, 0x20, 0x70, 0x47, 0x00, 0x20, + 0x70, 0x47, 0x00, 0x00, 0x18, 0xd9, 0x01, 0x00, + 0x3c, 0x00, 0x40, 0x37, 0x01, 0x00, 0x80, 0xb5, + 0xf6, 0xf7, 0xd1, 0xfa, 0x80, 0xbd, 0x13, 0x1c, + 0x0d, 0x4a, 0xb0, 0xb5, 0x12, 0x88, 0x90, 0x42, + 0x0f, 0xd2, 0x03, 0x29, 0x0d, 0xd2, 0x0a, 0x4a, + 0xc0, 0x00, 0x14, 0x58, 0x0a, 0x4d, 0xac, 0x42, + 0x07, 0xd1, 0x13, 0x50, 0x0c, 0x23, 0x59, 0x43, + 0x08, 0x4b, 0xc9, 0x18, 0x80, 0x18, 0x41, 0x60, + 0xb0, 0xbd, 0x02, 0x21, 0x80, 0x20, 0xed, 0xf7, + 0x94, 0xfd, 0x3c, 0x00, 0x7c, 0x37, 0x01, 0x00, + 0xb0, 0xbd, 0x00, 0x00, 0x56, 0x57, 0x01, 0x00, + 0x84, 0x5d, 0x01, 0x00, 0x09, 0xa0, 0x00, 0x00, + 0x18, 0xd9, 0x01, 0x00, 0xf8, 0xb5, 0x0f, 0x1c, + 0x1e, 0x1c, 0x15, 0x1c, 0x04, 0x1c, 0x11, 0x1c, + 0xff, 0xf7, 0x4a, 0xff, 0x33, 0x1c, 0x2a, 0x1c, + 0x39, 0x1c, 0x20, 0x1c, 0xf4, 0xf7, 0x8a, 0xff, + 0xf8, 0xbd, 0x00, 0x00, 0xf7, 0xb5, 0x94, 0x46, + 0xff, 0x29, 0x21, 0xd0, 0x3c, 0x00, 0xb8, 0x37, + 0x01, 0x00, 0x15, 0x48, 0x00, 0x88, 0x81, 0x42, + 0x21, 0xd2, 0x14, 0x4a, 0x15, 0x4e, 0xc8, 0x00, + 0x85, 0x18, 0xb4, 0x79, 0x68, 0x68, 0x02, 0x68, + 0x00, 0x2a, 0x03, 0xd1, 0x03, 0x1d, 0x0c, 0xcb, + 0x9a, 0x42, 0x11, 0xd0, 0x43, 0x68, 0x9a, 0x68, + 0x42, 0x60, 0x0e, 0x4a, 0x17, 0x69, 0x01, 0x37, + 0x17, 0x61, 0xb4, 0x71, 0x00, 0x22, 0x02, 0x60, + 0x00, 0x98, 0xd8, 0x60, 0x60, 0x46, 0x3c, 0x00, + 0xf4, 0x37, 0x01, 0x00, 0x18, 0x60, 0x19, 0x74, + 0x28, 0x68, 0x58, 0x60, 0xfe, 0xbd, 0xb4, 0x71, + 0x06, 0x21, 0x00, 0xe0, 0x07, 0x21, 0x80, 0x20, + 0xed, 0xf7, 0x4c, 0xfd, 0xf6, 0xe7, 0x00, 0x00, + 0x56, 0x57, 0x01, 0x00, 0x84, 0x5d, 0x01, 0x00, + 0x20, 0x10, 0x07, 0x00, 0xa8, 0x60, 0x01, 0x00, + 0xb0, 0xb5, 0x14, 0x4d, 0x6c, 0x68, 0x00, 0x2c, + 0x01, 0xd0, 0x84, 0x42, 0x04, 0xd0, 0x0c, 0x21, + 0x3c, 0x00, 0x30, 0x38, 0x01, 0x00, 0x80, 0x20, + 0xed, 0xf7, 0x37, 0xfd, 0xb0, 0xbd, 0xff, 0xf7, + 0xb8, 0xfa, 0xa1, 0x68, 0x40, 0x1a, 0x0d, 0x49, + 0x88, 0x42, 0x03, 0xda, 0x10, 0x21, 0x80, 0x20, + 0xed, 0xf7, 0x2b, 0xfd, 0x21, 0x79, 0x22, 0x68, + 0x01, 0x20, 0xff, 0xf7, 0xac, 0xff, 0xe3, 0x68, + 0x6b, 0x60, 0x00, 0x2b, 0x05, 0xd0, 0x07, 0x48, + 0x06, 0x4a, 0x00, 0x88, 0x99, 0x68, 0xff, 0xf7, + 0xfe, 0xfa, 0x3c, 0x00, 0x6c, 0x38, 0x01, 0x00, + 0x28, 0x68, 0xe0, 0x60, 0x2c, 0x60, 0xb0, 0xbd, + 0x7c, 0x5d, 0x01, 0x00, 0x18, 0xfc, 0xff, 0xff, + 0x21, 0x38, 0x01, 0x00, 0x2c, 0x74, 0x01, 0x00, + 0xb0, 0xb5, 0x15, 0x4c, 0x08, 0x20, 0x21, 0x1c, + 0x80, 0x31, 0x08, 0x70, 0x13, 0x4a, 0x41, 0x04, + 0x11, 0x60, 0x13, 0x48, 0x00, 0x68, 0x13, 0x4d, + 0x6b, 0x69, 0x18, 0x40, 0x01, 0xd1, 0x10, 0x20, + 0x00, 0xe0, 0x00, 0x20, 0x3c, 0x00, 0xa8, 0x38, + 0x01, 0x00, 0xa8, 0x23, 0x5b, 0x5d, 0x18, 0x43, + 0x23, 0x1c, 0x40, 0x33, 0x18, 0x73, 0x51, 0x60, + 0x20, 0x78, 0x80, 0x08, 0x80, 0x00, 0x20, 0x70, + 0x00, 0x20, 0xff, 0xf7, 0x12, 0xfb, 0xff, 0xf7, + 0x72, 0xfa, 0x64, 0x30, 0x28, 0x66, 0x01, 0x38, + 0xa0, 0x61, 0x20, 0x78, 0x03, 0x21, 0x08, 0x43, + 0x20, 0x70, 0xb0, 0xbd, 0x00, 0x00, 0x00, 0x90, + 0x07, 0x00, 0x00, 0x10, 0x07, 0x00, 0x3c, 0x00, + 0xe4, 0x38, 0x01, 0x00, 0x10, 0x00, 0x07, 0x00, + 0xa4, 0x6c, 0x01, 0x00, 0x38, 0xb5, 0x0a, 0x4c, + 0x21, 0x1c, 0x20, 0x31, 0x8a, 0x79, 0x00, 0xab, + 0x1a, 0x70, 0xc9, 0x79, 0x07, 0x4d, 0x59, 0x70, + 0x69, 0x78, 0x88, 0x42, 0x03, 0xd1, 0xf8, 0xf7, + 0x13, 0xfc, 0xff, 0x20, 0x68, 0x70, 0x00, 0xab, + 0x18, 0x88, 0xe0, 0x84, 0x38, 0xbd, 0x00, 0x00, + 0x00, 0x10, 0x07, 0x00, 0x4c, 0x7b, 0x01, 0x00, + 0x3c, 0x00, 0x20, 0x39, 0x01, 0x00, 0xf8, 0xb5, + 0x0b, 0x1c, 0x06, 0x1c, 0x04, 0x1d, 0x7f, 0x33, + 0x14, 0xd0, 0x33, 0x68, 0x5d, 0x18, 0x35, 0x60, + 0x23, 0x88, 0x1f, 0x18, 0x06, 0x23, 0xff, 0x56, + 0xeb, 0x1b, 0x33, 0x60, 0x23, 0x88, 0x18, 0x18, + 0x81, 0x71, 0x20, 0x88, 0x01, 0x30, 0x00, 0x04, + 0x00, 0x0c, 0x20, 0x80, 0x90, 0x42, 0x01, 0xd3, + 0x00, 0x20, 0x20, 0x80, 0x10, 0x1c, 0x31, 0x68, + 0xec, 0xf7, 0x3c, 0x00, 0x5c, 0x39, 0x01, 0x00, + 0x6d, 0xfe, 0xf8, 0xbd, 0x0e, 0x49, 0x0a, 0x7c, + 0x83, 0x78, 0x1a, 0x43, 0x0a, 0x74, 0x42, 0x78, + 0x83, 0x78, 0x9a, 0x43, 0x0b, 0x7c, 0x93, 0x43, + 0x0b, 0x74, 0x8a, 0x7c, 0x43, 0x78, 0x1a, 0x43, + 0x8a, 0x74, 0x8a, 0x7c, 0x03, 0x78, 0x9a, 0x43, + 0x8a, 0x74, 0x02, 0x78, 0x43, 0x78, 0x1a, 0x43, + 0x4b, 0x7c, 0x1a, 0x43, 0x4a, 0x74, 0x4a, 0x7c, + 0xc0, 0x78, 0x82, 0x43, 0x3c, 0x00, 0x98, 0x39, + 0x01, 0x00, 0x4a, 0x74, 0x70, 0x47, 0x10, 0x00, + 0x07, 0x00, 0xb0, 0xb5, 0x06, 0x4d, 0x00, 0x24, + 0x20, 0x06, 0x00, 0x0e, 0xed, 0xf7, 0xf7, 0xf8, + 0xa1, 0x00, 0x69, 0x58, 0x08, 0x71, 0x01, 0x34, + 0x04, 0x2c, 0xf5, 0xdb, 0xb0, 0xbd, 0x10, 0x7b, + 0x01, 0x00, 0x0b, 0x48, 0x0c, 0x49, 0x7d, 0x23, + 0x42, 0x69, 0xdb, 0x00, 0x00, 0x2a, 0xc8, 0x6b, + 0x07, 0xd0, 0xc0, 0x18, 0x1a, 0x01, 0x3c, 0x00, + 0xd4, 0x39, 0x01, 0x00, 0x90, 0x42, 0xc8, 0x63, + 0x01, 0xd9, 0x07, 0x48, 0xc8, 0x63, 0x70, 0x47, + 0xff, 0x38, 0xf5, 0x38, 0xc8, 0x63, 0x98, 0x42, + 0xf9, 0xd2, 0xcb, 0x63, 0x70, 0x47, 0x00, 0x00, + 0xf4, 0x68, 0x01, 0x00, 0x44, 0x7d, 0x01, 0x00, + 0x70, 0x17, 0x00, 0x00, 0x70, 0xb5, 0x0d, 0x1c, + 0x04, 0x1c, 0x16, 0x1c, 0xfb, 0xf7, 0xf6, 0xfa, + 0xb0, 0x43, 0x28, 0x43, 0x01, 0x1c, 0x20, 0x1c, + 0x3c, 0x00, 0x10, 0x3a, 0x01, 0x00, 0x00, 0xf0, + 0xcc, 0xfa, 0x70, 0xbd, 0x00, 0x00, 0x80, 0xb5, + 0x0b, 0x4a, 0x00, 0x29, 0x09, 0xd0, 0x02, 0x29, + 0x0f, 0xd1, 0x01, 0x1c, 0x08, 0x48, 0xd2, 0x78, + 0x38, 0x30, 0xff, 0xf7, 0x78, 0xff, 0x06, 0x49, + 0x06, 0xe0, 0x01, 0x1c, 0x04, 0x48, 0x12, 0x79, + 0x20, 0x30, 0xff, 0xf7, 0x70, 0xff, 0x03, 0x49, + 0x08, 0x60, 0x80, 0xbd, 0x00, 0x00, 0xac, 0x7c, + 0x01, 0x00, 0x3c, 0x00, 0x4c, 0x3a, 0x01, 0x00, + 0xc8, 0x67, 0x01, 0x00, 0xc4, 0x67, 0x01, 0x00, + 0x80, 0xb5, 0x0b, 0x4a, 0x00, 0x29, 0x09, 0xd0, + 0x02, 0x29, 0x0f, 0xd1, 0x01, 0x1c, 0x08, 0x48, + 0x52, 0x79, 0x68, 0x30, 0xff, 0xf7, 0x5a, 0xff, + 0x06, 0x49, 0x06, 0xe0, 0x01, 0x1c, 0x04, 0x48, + 0x92, 0x79, 0x50, 0x30, 0xff, 0xf7, 0x52, 0xff, + 0x03, 0x49, 0x08, 0x60, 0x80, 0xbd, 0x00, 0x00, + 0xac, 0x7c, 0x01, 0x00, 0x3c, 0x00, 0x88, 0x3a, + 0x01, 0x00, 0xd0, 0x67, 0x01, 0x00, 0xcc, 0x67, + 0x01, 0x00, 0x08, 0xb5, 0x04, 0x21, 0x00, 0x91, + 0x81, 0x7e, 0x43, 0x68, 0x03, 0x29, 0x06, 0xd1, + 0x01, 0x1c, 0x0c, 0x31, 0x01, 0x20, 0x6a, 0x46, + 0xec, 0xf7, 0x9a, 0xfc, 0x08, 0xbd, 0x19, 0x68, + 0xc1, 0x60, 0xfb, 0xe7, 0x00, 0x00, 0x10, 0xb5, + 0x03, 0x1c, 0x00, 0x20, 0x08, 0x4c, 0x00, 0x21, + 0xca, 0x00, 0x12, 0x19, 0x92, 0x78, 0x3c, 0x00, + 0xc4, 0x3a, 0x01, 0x00, 0x9a, 0x42, 0x03, 0xd1, + 0xc8, 0x00, 0x00, 0x19, 0x40, 0x68, 0x10, 0xbd, + 0x01, 0x31, 0x09, 0x06, 0x09, 0x16, 0x06, 0x29, + 0xf1, 0xdb, 0x10, 0xbd, 0xcc, 0x5a, 0x01, 0x00, + 0xf8, 0xb5, 0x0f, 0x1c, 0x16, 0x1c, 0x00, 0x25, + 0xfe, 0xf7, 0x8e, 0xf9, 0x04, 0x1c, 0x0a, 0xd0, + 0x4a, 0x20, 0x00, 0x5d, 0x05, 0x28, 0x06, 0xd1, + 0x38, 0x1c, 0xf1, 0xf7, 0x81, 0xfe, 0x00, 0x28, + 0x3c, 0x00, 0x00, 0x3b, 0x01, 0x00, 0x01, 0xd0, + 0x01, 0x25, 0x34, 0x60, 0x28, 0x1c, 0xf8, 0xbd, + 0x00, 0x00, 0x70, 0xb5, 0x0d, 0x1c, 0x16, 0x1c, + 0x00, 0x24, 0xfe, 0xf7, 0x78, 0xf9, 0x00, 0x28, + 0x0b, 0xd0, 0x4a, 0x21, 0x09, 0x5c, 0x05, 0x29, + 0x07, 0xd1, 0x01, 0x69, 0x00, 0x29, 0x04, 0xd1, + 0x30, 0x60, 0xf1, 0xf7, 0x04, 0xfd, 0x01, 0x24, + 0x28, 0x60, 0x20, 0x1c, 0x70, 0xbd, 0xf8, 0xb5, + 0x06, 0x1c, 0x3c, 0x00, 0x3c, 0x3b, 0x01, 0x00, + 0x00, 0x25, 0x0c, 0x1c, 0x08, 0x1c, 0xf1, 0xf7, + 0x5d, 0xfe, 0x00, 0x28, 0x01, 0xd0, 0x00, 0x21, + 0x05, 0xe0, 0x20, 0x1c, 0xf1, 0xf7, 0x74, 0xfe, + 0x00, 0x28, 0x14, 0xd0, 0x01, 0x21, 0x30, 0x1c, + 0xf4, 0xf7, 0x80, 0xfb, 0x00, 0x90, 0x00, 0x28, + 0x0d, 0xd0, 0x08, 0x4f, 0x01, 0x25, 0x06, 0x22, + 0x31, 0x1c, 0x38, 0x1c, 0xec, 0xf7, 0xc2, 0xfc, + 0x06, 0x22, 0x21, 0x1c, 0x3c, 0x00, 0x78, 0x3b, + 0x01, 0x00, 0xb8, 0x18, 0xec, 0xf7, 0xbd, 0xfc, + 0x00, 0x98, 0xf8, 0x60, 0x28, 0x1c, 0xf8, 0xbd, + 0x00, 0x00, 0x70, 0x7c, 0x01, 0x00, 0x00, 0x21, + 0x00, 0x28, 0x06, 0xd0, 0x42, 0x78, 0x07, 0x2a, + 0x03, 0xd1, 0xc0, 0x79, 0x01, 0x28, 0x00, 0xd1, + 0x01, 0x21, 0x08, 0x1c, 0x70, 0x47, 0xf8, 0xb5, + 0x05, 0x1c, 0x00, 0x27, 0x16, 0x4e, 0xf1, 0xf7, + 0x28, 0xfe, 0x00, 0x28, 0x07, 0xd0, 0x3c, 0x00, + 0xb4, 0x3b, 0x01, 0x00, 0xf1, 0xf7, 0xc0, 0xfb, + 0x00, 0x28, 0x10, 0xd1, 0x00, 0x24, 0xf1, 0xf7, + 0xbb, 0xfc, 0x06, 0xe0, 0xf1, 0xf7, 0x02, 0xfe, + 0x00, 0x28, 0x08, 0xd0, 0x01, 0x24, 0xf1, 0xf7, + 0x99, 0xfd, 0x01, 0x1c, 0x06, 0x22, 0x30, 0x1c, + 0xec, 0xf7, 0x8e, 0xfc, 0x01, 0x27, 0x00, 0x2f, + 0x0d, 0xd0, 0x21, 0x1c, 0x28, 0x1c, 0xf4, 0xf7, + 0x3b, 0xfb, 0x01, 0x1c, 0x05, 0x48, 0x06, 0x22, + 0x3c, 0x00, 0xf0, 0x3b, 0x01, 0x00, 0x06, 0x38, + 0xc1, 0x60, 0x29, 0x1c, 0xec, 0xf7, 0x7f, 0xfc, + 0x01, 0x20, 0xf8, 0xbd, 0x00, 0x20, 0xfc, 0xe7, + 0x00, 0x00, 0x76, 0x7c, 0x01, 0x00, 0xf0, 0xb5, + 0x07, 0x1c, 0x00, 0x68, 0x02, 0x21, 0x04, 0x68, + 0x78, 0x69, 0x87, 0xb0, 0x01, 0x40, 0x00, 0x25, + 0x00, 0x29, 0x05, 0x91, 0x74, 0x4e, 0x12, 0xd0, + 0x22, 0x88, 0x01, 0x21, 0x13, 0x05, 0x02, 0xd4, + 0xc0, 0x07, 0x3c, 0x00, 0x2c, 0x3c, 0x01, 0x00, + 0xc1, 0x17, 0x01, 0x31, 0x6f, 0x48, 0x00, 0x29, + 0x00, 0x68, 0x01, 0xd0, 0x01, 0x30, 0x04, 0xe0, + 0x11, 0x06, 0x89, 0x0e, 0x2d, 0x29, 0x01, 0xd1, + 0x03, 0x30, 0x30, 0x60, 0x20, 0x88, 0x80, 0x07, + 0x67, 0xd1, 0x78, 0x69, 0xc0, 0x07, 0x64, 0xd5, + 0x03, 0xaa, 0x04, 0xa9, 0x20, 0x1c, 0xf7, 0xf7, + 0x4b, 0xfb, 0x00, 0xab, 0x18, 0x7c, 0x00, 0x28, + 0x07, 0xd0, 0x18, 0x7c, 0x3c, 0x00, 0x68, 0x3c, + 0x01, 0x00, 0x02, 0x28, 0x58, 0xd1, 0x18, 0x7b, + 0x40, 0x07, 0x40, 0x0f, 0x04, 0x28, 0x53, 0xd8, + 0x20, 0x79, 0x05, 0x99, 0xc0, 0x07, 0xc0, 0x17, + 0x01, 0x30, 0x02, 0x90, 0x00, 0x29, 0x02, 0xd1, + 0x02, 0x98, 0x00, 0x28, 0x48, 0xd1, 0x05, 0x99, + 0x00, 0x29, 0x04, 0xd0, 0x20, 0x88, 0x00, 0x05, + 0x01, 0xd4, 0x00, 0x20, 0x30, 0x60, 0xc0, 0x20, + 0xed, 0xf7, 0xcb, 0xfd, 0x05, 0x1c, 0x3c, 0x00, + 0xa4, 0x3c, 0x01, 0x00, 0x20, 0x1c, 0x0a, 0x30, + 0x06, 0x90, 0xfe, 0xf7, 0xad, 0xf8, 0x06, 0x1c, + 0x28, 0x1c, 0x08, 0x30, 0x23, 0x88, 0x02, 0x1d, + 0x11, 0x1d, 0xdb, 0x05, 0x06, 0xd5, 0x06, 0x9b, + 0x03, 0x60, 0x20, 0x1c, 0x10, 0x30, 0x10, 0x60, + 0x20, 0x1d, 0x0e, 0xe0, 0x23, 0x1d, 0x13, 0x60, + 0x22, 0x88, 0x92, 0x05, 0x05, 0xd5, 0x22, 0x1c, + 0x10, 0x32, 0x02, 0x60, 0x06, 0x9b, 0x0b, 0x60, + 0x3c, 0x00, 0xe0, 0x3c, 0x01, 0x00, 0x04, 0xe0, + 0x06, 0x9b, 0x03, 0x60, 0x20, 0x1c, 0x10, 0x30, + 0x08, 0x60, 0x28, 0x69, 0xf1, 0xf7, 0x43, 0xfc, + 0x00, 0x28, 0x08, 0xd0, 0x01, 0x28, 0x12, 0xd0, + 0x02, 0x28, 0x58, 0xd1, 0x00, 0xab, 0x18, 0x7c, + 0x00, 0x28, 0x54, 0xd1, 0x12, 0xe0, 0x00, 0xab, + 0x18, 0x7c, 0x02, 0x28, 0x0b, 0xd1, 0x00, 0x2e, + 0x4d, 0xd0, 0x4b, 0x20, 0x80, 0x5d, 0x02, 0x28, + 0x49, 0xd1, 0x3c, 0x00, 0x1c, 0x3d, 0x01, 0x00, + 0x07, 0xe0, 0x63, 0xe0, 0x00, 0xab, 0x18, 0x7c, + 0x00, 0x28, 0x02, 0xd1, 0x38, 0x1c, 0xfe, 0xf7, + 0x1b, 0xff, 0x20, 0x88, 0x41, 0x04, 0x30, 0x48, + 0x11, 0xd5, 0x00, 0x2e, 0x52, 0xd0, 0x00, 0xab, + 0x19, 0x7c, 0x00, 0x29, 0x26, 0xd0, 0x02, 0x99, + 0x00, 0x29, 0x02, 0xd0, 0xb0, 0x6a, 0x00, 0x78, + 0x00, 0xe0, 0x00, 0x78, 0x01, 0x28, 0x1d, 0xd0, + 0x03, 0x28, 0x43, 0xd1, 0x3c, 0x00, 0x58, 0x3d, + 0x01, 0x00, 0x1a, 0xe0, 0x00, 0xab, 0x19, 0x7c, + 0x02, 0x29, 0x16, 0xd1, 0x19, 0x7b, 0x04, 0x29, + 0x13, 0xd0, 0x19, 0x7b, 0x0c, 0x29, 0x10, 0xd0, + 0x22, 0x49, 0x09, 0x68, 0x00, 0x29, 0x0c, 0xd0, + 0x00, 0x2e, 0x0a, 0xd0, 0x02, 0x99, 0x00, 0x29, + 0x02, 0xd0, 0xb0, 0x6a, 0x00, 0x78, 0x00, 0xe0, + 0x00, 0x78, 0x01, 0x28, 0x29, 0xd0, 0x03, 0x28, + 0x27, 0xd0, 0x28, 0x22, 0x39, 0x1c, 0x3c, 0x00, + 0x94, 0x3d, 0x01, 0x00, 0x28, 0x1c, 0x88, 0x30, + 0xec, 0xf7, 0x0a, 0xfc, 0x00, 0xab, 0x19, 0x7c, + 0x28, 0x1c, 0x80, 0x30, 0x01, 0x71, 0x19, 0x7b, + 0x41, 0x71, 0x6c, 0x60, 0x6e, 0x61, 0x1b, 0xe0, + 0x05, 0x99, 0x00, 0x29, 0x14, 0xd0, 0x11, 0x48, + 0x84, 0x6c, 0x00, 0x2c, 0x10, 0xd0, 0x00, 0x22, + 0x00, 0x2e, 0x04, 0xd0, 0x40, 0x36, 0xb0, 0x7a, + 0x05, 0x28, 0x00, 0xd1, 0x01, 0x22, 0x00, 0x92, + 0x3c, 0x00, 0xd0, 0x3d, 0x01, 0x00, 0xf8, 0x7a, + 0xba, 0x7a, 0x29, 0x69, 0xc3, 0x07, 0xdb, 0x0f, + 0x06, 0x98, 0xec, 0xf7, 0x00, 0xfb, 0x28, 0x1c, + 0xed, 0xf7, 0x07, 0xfd, 0x00, 0x25, 0x28, 0x1c, + 0x07, 0xb0, 0xf0, 0xbd, 0x00, 0x00, 0xc4, 0x6a, + 0x01, 0x00, 0x68, 0x61, 0x01, 0x00, 0x28, 0x61, + 0x01, 0x00, 0xc4, 0x69, 0x01, 0x00, 0x80, 0xb5, + 0x02, 0x20, 0xff, 0xf7, 0x70, 0xf8, 0x80, 0xbd, + 0x00, 0x00, 0x3c, 0x00, 0x0c, 0x3e, 0x01, 0x00, + 0xb0, 0xb5, 0x1d, 0x4d, 0x01, 0x28, 0x17, 0xd0, + 0xa2, 0x28, 0x06, 0xd0, 0xa3, 0x28, 0x03, 0xd1, + 0x01, 0x21, 0x15, 0x20, 0xff, 0xf7, 0x08, 0xfc, + 0xb0, 0xbd, 0x00, 0x29, 0x01, 0xd1, 0x17, 0x48, + 0x02, 0xe0, 0x7d, 0x20, 0xc0, 0x00, 0x48, 0x43, + 0x00, 0x23, 0x01, 0x22, 0x01, 0x1c, 0x28, 0x60, + 0x15, 0x20, 0xff, 0xf7, 0xa7, 0xfc, 0xb0, 0xbd, + 0x01, 0x29, 0x04, 0xd0, 0x3c, 0x00, 0x48, 0x3e, + 0x01, 0x00, 0x02, 0x29, 0xfa, 0xd1, 0x00, 0xf0, + 0x2a, 0xf8, 0xb0, 0xbd, 0x6c, 0x68, 0xf5, 0xf7, + 0xde, 0xfc, 0xfe, 0xf7, 0xa8, 0xff, 0x68, 0x60, + 0x00, 0x2c, 0x09, 0xd0, 0x29, 0x68, 0x0a, 0x23, + 0x59, 0x43, 0x00, 0x1b, 0x88, 0x42, 0x03, 0xd9, + 0x01, 0x21, 0x15, 0x20, 0xed, 0xf7, 0x17, 0xfa, + 0x01, 0x22, 0x15, 0x20, 0x29, 0x68, 0xff, 0xf7, + 0xa6, 0xfb, 0xb0, 0xbd, 0x00, 0x00, 0x3c, 0x00, + 0x84, 0x3e, 0x01, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x87, 0x93, 0x03, 0x01, 0x20, 0x04, 0x49, + 0x40, 0x03, 0x80, 0xb5, 0x08, 0x60, 0x03, 0x21, + 0x15, 0x20, 0xed, 0xf7, 0x03, 0xfa, 0x80, 0xbd, + 0x00, 0x10, 0x07, 0x00, 0x07, 0x48, 0x80, 0xb5, + 0xbe, 0x21, 0x01, 0x73, 0x01, 0x7a, 0x10, 0x22, + 0x11, 0x43, 0x01, 0x72, 0x00, 0x23, 0x02, 0x22, + 0x15, 0x20, 0x03, 0x49, 0xff, 0xf7, 0x68, 0xfc, + 0x3c, 0x00, 0xc0, 0x3e, 0x01, 0x00, 0x80, 0xbd, + 0x00, 0x00, 0x00, 0x03, 0x07, 0x00, 0x80, 0x9f, + 0xd5, 0x00, 0x80, 0xb5, 0x00, 0x28, 0x03, 0xd0, + 0x0a, 0x1c, 0x15, 0x21, 0xa2, 0x20, 0x02, 0xe0, + 0x00, 0x22, 0x15, 0x21, 0xa3, 0x20, 0xff, 0xf7, + 0x66, 0xfc, 0x80, 0xbd, 0x00, 0x00, 0x10, 0xb5, + 0x00, 0xf0, 0x19, 0xf8, 0x0a, 0x48, 0xbe, 0x21, + 0x01, 0x73, 0x03, 0x7a, 0x10, 0x22, 0x93, 0x43, + 0x01, 0x24, 0x3c, 0x00, 0xfc, 0x3e, 0x01, 0x00, + 0x23, 0x43, 0x03, 0x72, 0x01, 0x73, 0x01, 0x7a, + 0x91, 0x43, 0x20, 0x22, 0x11, 0x43, 0x01, 0x72, + 0x02, 0x22, 0x15, 0x20, 0x02, 0x49, 0xff, 0xf7, + 0x5b, 0xfb, 0x10, 0xbd, 0x00, 0x03, 0x07, 0x00, + 0x80, 0x9f, 0xd5, 0x00, 0x80, 0xb5, 0x02, 0x21, + 0x15, 0x20, 0xff, 0xf7, 0x85, 0xfb, 0x04, 0x48, + 0xbe, 0x21, 0x01, 0x73, 0x01, 0x7a, 0x11, 0x22, + 0x91, 0x43, 0x01, 0x72, 0x3c, 0x00, 0x38, 0x3f, + 0x01, 0x00, 0x80, 0xbd, 0x00, 0x00, 0x00, 0x03, + 0x07, 0x00, 0xf8, 0xb5, 0x06, 0x1c, 0x05, 0x1c, + 0x60, 0x36, 0x00, 0x27, 0x44, 0x68, 0x22, 0xe0, + 0x08, 0x21, 0x00, 0x20, 0xed, 0xf7, 0x41, 0xfb, + 0x60, 0x61, 0x01, 0x89, 0x04, 0x39, 0x09, 0x04, + 0x09, 0x0c, 0x01, 0x81, 0x60, 0x69, 0x00, 0x68, + 0x40, 0x18, 0x04, 0x21, 0xed, 0xf7, 0x35, 0xfb, + 0xe0, 0x61, 0x60, 0x69, 0x71, 0x7b, 0x3c, 0x00, + 0x74, 0x3f, 0x01, 0x00, 0x00, 0x68, 0x89, 0x01, + 0xc1, 0x70, 0x29, 0x69, 0x0c, 0x31, 0x03, 0x22, + 0xec, 0xf7, 0xba, 0xfa, 0x28, 0x69, 0x0c, 0x30, + 0x01, 0x68, 0x01, 0x31, 0x01, 0x60, 0x25, 0x62, + 0xa7, 0x61, 0x24, 0x68, 0x00, 0x2c, 0xda, 0xd1, + 0x02, 0x49, 0x03, 0x48, 0x6a, 0x68, 0xf6, 0xf7, + 0xb3, 0xf8, 0xf8, 0xbd, 0xfd, 0x6b, 0x00, 0x00, + 0xa0, 0x6a, 0x01, 0x00, 0x80, 0xb5, 0x00, 0x07, + 0x3c, 0x00, 0xb0, 0x3f, 0x01, 0x00, 0x00, 0x09, + 0x09, 0x02, 0x09, 0x0a, 0x08, 0x43, 0x02, 0x49, + 0x08, 0x60, 0xff, 0xf7, 0x20, 0xff, 0x80, 0xbd, + 0x00, 0x00, 0x60, 0x00, 0x07, 0x00, 0x08, 0x00, + 0x14, 0x00, 0xc8, 0x00, 0x00, 0x00, 0xe8, 0x03, + 0x00, 0x00, 0x10, 0x00, 0x14, 0x00, 0xc8, 0x00, + 0x00, 0x00, 0xe8, 0x03, 0x00, 0x00, 0x1c, 0x00, + 0x14, 0x00, 0xc8, 0x00, 0x00, 0x00, 0xe8, 0x03, + 0x00, 0x00, 0x3c, 0x00, 0xec, 0x3f, 0x01, 0x00, + 0x24, 0x01, 0x07, 0x00, 0x32, 0x00, 0x00, 0x00, + 0xe8, 0x03, 0x00, 0x00, 0x40, 0x06, 0x01, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x41, 0x6e, 0x62, 0x69, 0x7e, 0x64, 0x61, 0x6f, + 0x6f, 0x00, 0x00, 0x00, 0x52, 0x65, 0x6c, 0x65, + 0x61, 0x73, 0x65, 0x20, 0x36, 0x5f, 0x37, 0x5f, + 0x31, 0x35, 0x20, 0x42, 0x75, 0x69, 0x6c, 0x64, + 0x20, 0x32, 0x3a, 0x35, 0x3c, 0x00, 0x28, 0x40, + 0x01, 0x00, 0x32, 0x39, 0x38, 0x20, 0x53, 0x65, + 0x70, 0x20, 0x30, 0x34, 0x20, 0x32, 0x30, 0x30, + 0x39, 0x20, 0x31, 0x37, 0x3a, 0x31, 0x33, 0x3a, + 0x32, 0x30, 0x20, 0x28, 0x48, 0x57, 0x3d, 0x34, + 0x3a, 0x33, 0x2c, 0x42, 0x54, 0x43, 0x4f, 0x45, + 0x58, 0x29, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, + 0x1c, 0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3c, 0x00, + 0x64, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xe8, 0x03, 0x70, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0xd0, 0x07, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x7c, 0x15, 0x15, 0x00, + 0x3c, 0x00, 0xa0, 0x40, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x70, 0x17, + 0x1e, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, + 0x00, 0x00, 0x28, 0x23, 0x16, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0xf8, 0x2a, + 0x0b, 0x00, 0x3c, 0x00, 0xdc, 0x40, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, + 0xe0, 0x2e, 0x12, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x18, 0x00, 0x00, 0x00, 0x50, 0x46, 0x0e, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, + 0xf0, 0x55, 0x08, 0x00, 0x3c, 0x00, 0x18, 0x41, + 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2c, 0x00, + 0x00, 0x00, 0xc0, 0x5d, 0x0e, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0xe8, 0x80, + 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x42, 0x00, + 0x00, 0x00, 0xa0, 0x8c, 0x0a, 0x00, 0x3c, 0x00, + 0x54, 0x41, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x48, 0x00, 0x00, 0x00, 0x80, 0xbb, 0x0a, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0xf0, 0xd2, 0x0a, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x6c, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x90, 0x00, + 0x3c, 0x00, 0x90, 0x41, 0x01, 0x00, 0xc0, 0x00, + 0x90, 0x00, 0xc0, 0x00, 0x90, 0x00, 0x14, 0x00, + 0x10, 0x00, 0x14, 0x00, 0x10, 0x00, 0xc0, 0x00, + 0x90, 0x00, 0x14, 0x00, 0x10, 0x00, 0x14, 0x00, + 0x10, 0x00, 0xc0, 0x00, 0x90, 0x00, 0x14, 0x00, + 0x10, 0x00, 0xc0, 0x00, 0x90, 0x00, 0x14, 0x00, + 0x10, 0x00, 0x14, 0x00, 0x10, 0x00, 0x14, 0x00, + 0x10, 0x00, 0xc0, 0x00, 0x90, 0x00, 0x60, 0x00, + 0x48, 0x00, 0x3c, 0x00, 0xcc, 0x41, 0x01, 0x00, + 0x60, 0x00, 0x48, 0x00, 0x14, 0x00, 0x10, 0x00, + 0x14, 0x00, 0x10, 0x00, 0x60, 0x00, 0x48, 0x00, + 0x14, 0x00, 0x10, 0x00, 0x14, 0x00, 0x10, 0x00, + 0x60, 0x00, 0x48, 0x00, 0x14, 0x00, 0x10, 0x00, + 0x60, 0x00, 0x48, 0x00, 0x14, 0x00, 0x10, 0x00, + 0x14, 0x00, 0x10, 0x00, 0x14, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x04, 0x01, 0x0b, 0x02, 0x0c, 0x03, + 0x12, 0x04, 0x16, 0x05, 0x3c, 0x00, 0x08, 0x42, + 0x01, 0x00, 0x18, 0x06, 0x00, 0x0e, 0x00, 0x0e, + 0x24, 0x07, 0x00, 0x0e, 0x2c, 0x08, 0x30, 0x09, + 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x42, 0x0a, + 0x00, 0x0e, 0x48, 0x0b, 0x00, 0x0e, 0x00, 0x0e, + 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x60, 0x0c, + 0x00, 0x0e, 0x00, 0x0e, 0x6c, 0x0d, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0xc0, 0xff, 0xff, 0xff, 0x3c, 0x00, + 0x44, 0x42, 0x01, 0x00, 0xb6, 0xff, 0xff, 0xff, + 0xd3, 0xff, 0xff, 0xff, 0xc9, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x51, 0xb0, 0x00, 0x00, + 0x0c, 0x00, 0x00, 0x00, 0x51, 0xb0, 0x00, 0x00, + 0x0c, 0x00, 0x00, 0x00, 0x59, 0xaf, 0x00, 0x00, + 0x3c, 0x00, 0x80, 0x42, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xa5, 0xaf, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x45, 0xb0, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xd5, 0xaf, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xad, 0xb0, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xbc, 0x42, 0x01, 0x00, + 0x95, 0xdb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x95, 0xdb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x99, 0xb0, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xf8, 0x42, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0x17, + 0x01, 0x00, 0x35, 0x17, 0x01, 0x00, 0x21, 0x17, + 0x01, 0x00, 0xd9, 0x9c, 0x00, 0x00, 0x49, 0x17, + 0x01, 0x00, 0x3d, 0x17, 0x01, 0x00, 0xd1, 0x9c, + 0x00, 0x00, 0xd1, 0x9c, 0x00, 0x00, 0x1d, 0x1a, + 0x01, 0x00, 0xd1, 0x9c, 0x00, 0x00, 0x01, 0x1a, + 0x01, 0x00, 0x31, 0x1a, 0x01, 0x00, 0x25, 0x1a, + 0x01, 0x00, 0x3d, 0x17, 0x01, 0x00, 0x3c, 0x00, + 0x34, 0x43, 0x01, 0x00, 0x81, 0x1a, 0x01, 0x00, + 0xd1, 0x9c, 0x00, 0x00, 0x79, 0x17, 0x01, 0x00, + 0xd9, 0x9c, 0x00, 0x00, 0x5d, 0x17, 0x01, 0x00, + 0xa1, 0x17, 0x01, 0x00, 0x95, 0x17, 0x01, 0x00, + 0x81, 0x17, 0x01, 0x00, 0x21, 0x18, 0x01, 0x00, + 0xf5, 0x17, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, + 0x0c, 0x00, 0x00, 0x00, 0x10, 0x00, 0x08, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x70, 0x43, 0x01, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, + 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x19, 0x1c, + 0x01, 0x00, 0x89, 0x41, 0x00, 0x00, 0x89, 0x41, + 0x00, 0x00, 0x85, 0x41, 0x00, 0x00, 0x85, 0x41, + 0x00, 0x00, 0x85, 0x41, 0x00, 0x00, 0x85, 0x41, + 0x00, 0x00, 0x89, 0x41, 0x00, 0x00, 0x85, 0x41, + 0x00, 0x00, 0x85, 0x41, 0x00, 0x00, 0x35, 0x1b, + 0x01, 0x00, 0x3c, 0x00, 0xac, 0x43, 0x01, 0x00, + 0x9d, 0x1b, 0x01, 0x00, 0x01, 0x1c, 0x01, 0x00, + 0x89, 0x41, 0x00, 0x00, 0x89, 0x41, 0x00, 0x00, + 0x89, 0x41, 0x00, 0x00, 0x85, 0x41, 0x00, 0x00, + 0x65, 0x18, 0x01, 0x00, 0x29, 0x18, 0x01, 0x00, + 0x39, 0x18, 0x01, 0x00, 0xbd, 0x18, 0x01, 0x00, + 0x89, 0x41, 0x00, 0x00, 0x4d, 0x18, 0x01, 0x00, + 0xa5, 0x18, 0x01, 0x00, 0x85, 0x41, 0x00, 0x00, + 0x01, 0x19, 0x01, 0x00, 0x3c, 0x00, 0xe8, 0x43, + 0x01, 0x00, 0xd9, 0x18, 0x01, 0x00, 0xed, 0x18, + 0x01, 0x00, 0x15, 0x19, 0x01, 0x00, 0x89, 0x41, + 0x00, 0x00, 0x89, 0x41, 0x00, 0x00, 0x89, 0x41, + 0x00, 0x00, 0x85, 0x41, 0x00, 0x00, 0x89, 0x41, + 0x00, 0x00, 0x89, 0x41, 0x00, 0x00, 0x69, 0x1c, + 0x01, 0x00, 0x89, 0x41, 0x00, 0x00, 0x71, 0x1c, + 0x01, 0x00, 0x89, 0x41, 0x00, 0x00, 0x89, 0x41, + 0x00, 0x00, 0xfd, 0xdb, 0x00, 0x00, 0x3c, 0x00, + 0x24, 0x44, 0x01, 0x00, 0x1d, 0x7c, 0x00, 0x00, + 0x00, 0x00, 0x80, 0x00, 0xf5, 0xda, 0x00, 0x00, + 0x14, 0x00, 0x81, 0x00, 0xfd, 0xdd, 0x00, 0x00, + 0x08, 0x00, 0x82, 0x00, 0xc5, 0xdd, 0x00, 0x00, + 0x38, 0x00, 0x83, 0x00, 0x45, 0xdc, 0x00, 0x00, + 0x10, 0x00, 0x84, 0x00, 0x99, 0xdc, 0x00, 0x00, + 0x0c, 0x00, 0x86, 0x00, 0x39, 0xdc, 0x00, 0x00, + 0x10, 0x00, 0x88, 0x00, 0x11, 0xde, 0x00, 0x00, + 0x3c, 0x00, 0x60, 0x44, 0x01, 0x00, 0x10, 0x00, + 0x8a, 0x00, 0x35, 0xdd, 0x00, 0x00, 0x0c, 0x00, + 0x8c, 0x00, 0xad, 0xdf, 0x00, 0x00, 0x1c, 0x00, + 0x8e, 0x00, 0xc9, 0xde, 0x00, 0x00, 0x38, 0x00, + 0x8f, 0x00, 0xed, 0xdc, 0x00, 0x00, 0x38, 0x00, + 0x90, 0x00, 0x75, 0xdf, 0x00, 0x00, 0x0c, 0x00, + 0x91, 0x00, 0x8d, 0xdc, 0x00, 0x00, 0x0c, 0x00, + 0x93, 0x00, 0xb9, 0xdd, 0x00, 0x00, 0x0c, 0x00, + 0x94, 0x00, 0x3c, 0x00, 0x9c, 0x44, 0x01, 0x00, + 0x00, 0x08, 0x08, 0x08, 0x10, 0x0c, 0x0c, 0x0c, + 0x08, 0x0c, 0x08, 0x0c, 0x08, 0x0c, 0x08, 0x08, + 0x08, 0x08, 0x14, 0x08, 0x08, 0x14, 0x00, 0x30, + 0x00, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, + 0xad, 0x30, 0x01, 0x00, 0x15, 0x30, 0x01, 0x00, + 0x20, 0x30, 0x07, 0x00, 0x30, 0x30, 0x07, 0x00, + 0x06, 0x07, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xd8, 0x44, + 0x01, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0xc9, 0x02, 0x00, 0x94, 0x3f, + 0x03, 0x00, 0xe0, 0x8b, 0x5a, 0x00, 0x05, 0x3a, + 0x85, 0x00, 0xc8, 0xf2, 0x06, 0x00, 0xf8, 0x4c, + 0x56, 0x00, 0x20, 0xa7, 0x3d, 0x00, 0xb7, 0x4a, + 0x00, 0x00, 0xb7, 0x4a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x14, 0x45, 0x01, 0x00, 0x01, 0x01, 0x01, 0x02, + 0x02, 0x02, 0x03, 0x03, 0x03, 0x04, 0x04, 0x04, + 0x05, 0x06, 0x00, 0x00, 0x2d, 0x7c, 0x00, 0x00, + 0x00, 0x00, 0xff, 0x00, 0xfd, 0x95, 0x00, 0x00, + 0x08, 0x00, 0xff, 0x00, 0xed, 0x97, 0x00, 0x00, + 0x08, 0x00, 0x82, 0x00, 0xcd, 0x95, 0x00, 0x00, + 0x0c, 0x00, 0x83, 0x00, 0x4d, 0x96, 0x00, 0x00, + 0x0c, 0x00, 0x85, 0x00, 0x2d, 0x7c, 0x00, 0x00, + 0x3c, 0x00, 0x50, 0x45, 0x01, 0x00, 0x00, 0x00, + 0xff, 0x00, 0x2d, 0x7c, 0x00, 0x00, 0x00, 0x00, + 0xff, 0x00, 0x2d, 0x7c, 0x00, 0x00, 0x00, 0x00, + 0xff, 0x00, 0x3d, 0x96, 0x00, 0x00, 0x0c, 0x00, + 0x89, 0x00, 0xd9, 0x97, 0x00, 0x00, 0x08, 0x00, + 0x8a, 0x00, 0x91, 0x95, 0x00, 0x00, 0x08, 0x00, + 0xff, 0x00, 0x2d, 0x7c, 0x00, 0x00, 0x00, 0x00, + 0xff, 0x00, 0x2d, 0x7c, 0x00, 0x00, 0x00, 0x00, + 0xff, 0x00, 0x3c, 0x00, 0x8c, 0x45, 0x01, 0x00, + 0xf9, 0x97, 0x00, 0x00, 0x08, 0x00, 0x8d, 0x00, + 0x2d, 0x7c, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, + 0x2d, 0x7c, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, + 0xc9, 0x97, 0x00, 0x00, 0x30, 0x00, 0x90, 0x00, + 0x11, 0x95, 0x00, 0x00, 0x18, 0x00, 0x91, 0x00, + 0x15, 0x96, 0x00, 0x00, 0x08, 0x00, 0x92, 0x00, + 0x59, 0x95, 0x00, 0x00, 0x3c, 0x00, 0x93, 0x00, + 0x29, 0x96, 0x00, 0x00, 0x3c, 0x00, 0xc8, 0x45, + 0x01, 0x00, 0x08, 0x00, 0x94, 0x00, 0xa1, 0x95, + 0x00, 0x00, 0x08, 0x00, 0x95, 0x00, 0x81, 0x97, + 0x00, 0x00, 0x0c, 0x00, 0x96, 0x00, 0x6d, 0x97, + 0x00, 0x00, 0x10, 0x00, 0x98, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x10, + 0x08, 0x00, 0x00, 0x08, 0x00, 0x10, 0x3c, 0x00, + 0x04, 0x46, 0x01, 0x00, 0x08, 0x0c, 0x0c, 0x0c, + 0x0c, 0x1c, 0x0c, 0x0c, 0x08, 0x00, 0x00, 0x00, + 0x0d, 0x8b, 0x00, 0x00, 0xf5, 0x8a, 0x00, 0x00, + 0xe9, 0x8a, 0x00, 0x00, 0x01, 0x8b, 0x00, 0x00, + 0x14, 0x08, 0x0c, 0x0c, 0x10, 0x0c, 0x00, 0x00, + 0xb1, 0x98, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, + 0x19, 0x99, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00, + 0x3d, 0x7c, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x40, 0x46, 0x01, 0x00, 0x3d, 0x99, + 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x09, 0x99, + 0x00, 0x00, 0x83, 0x00, 0x00, 0x00, 0x3d, 0x7c, + 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x02, 0x01, + 0x04, 0x04, 0x08, 0x08, 0x81, 0x37, 0x80, 0xf3, + 0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00, 0xaa, 0xaa, + 0x03, 0x00, 0x00, 0xf8, 0x6d, 0xa9, 0x6d, 0xa9, + 0x6e, 0xa9, 0x3c, 0x00, 0x7c, 0x46, 0x01, 0x00, + 0x6e, 0xa8, 0x6e, 0xa8, 0x6e, 0xa8, 0x6f, 0xa7, + 0x6f, 0xa7, 0x6f, 0xa7, 0x6f, 0xa6, 0x6f, 0xa6, + 0x70, 0xa6, 0x70, 0xa5, 0x70, 0xa4, 0x00, 0x00, + 0xb5, 0x1b, 0x01, 0x00, 0xc9, 0x1b, 0x01, 0x00, + 0xe1, 0x1b, 0x01, 0x00, 0xe5, 0x9c, 0x00, 0x00, + 0xa5, 0x1b, 0x01, 0x00, 0xe5, 0x9c, 0x00, 0x00, + 0x89, 0x1b, 0x01, 0x00, 0xd5, 0x9c, 0x00, 0x00, + 0xd5, 0x9c, 0x00, 0x00, 0x3c, 0x00, 0xb8, 0x46, + 0x01, 0x00, 0xd1, 0x1a, 0x01, 0x00, 0xe5, 0x1a, + 0x01, 0x00, 0x05, 0x1b, 0x01, 0x00, 0x25, 0x1b, + 0x01, 0x00, 0xb1, 0x1a, 0x01, 0x00, 0xe5, 0x9c, + 0x00, 0x00, 0x9d, 0x1a, 0x01, 0x00, 0xd5, 0x9c, + 0x00, 0x00, 0xc1, 0x1a, 0x01, 0x00, 0x89, 0x19, + 0x01, 0x00, 0xa9, 0x19, 0x01, 0x00, 0xc9, 0x19, + 0x01, 0x00, 0xf1, 0x19, 0x01, 0x00, 0x79, 0x19, + 0x01, 0x00, 0xe5, 0x9c, 0x00, 0x00, 0x3c, 0x00, + 0xf4, 0x46, 0x01, 0x00, 0x65, 0x19, 0x01, 0x00, + 0xd5, 0x9c, 0x00, 0x00, 0xd5, 0x9c, 0x00, 0x00, + 0xd5, 0x9c, 0x00, 0x00, 0xd5, 0x9c, 0x00, 0x00, + 0xd5, 0x9c, 0x00, 0x00, 0xd5, 0x9c, 0x00, 0x00, + 0xd5, 0x9c, 0x00, 0x00, 0x55, 0x1c, 0x01, 0x00, + 0x45, 0x1c, 0x01, 0x00, 0x45, 0x1c, 0x01, 0x00, + 0xd5, 0x9c, 0x00, 0x00, 0xd5, 0x9c, 0x00, 0x00, + 0xd5, 0x9c, 0x00, 0x00, 0xd5, 0x9c, 0x00, 0x00, + 0x3c, 0x00, 0x30, 0x47, 0x01, 0x00, 0xd5, 0x9c, + 0x00, 0x00, 0x55, 0x19, 0x01, 0x00, 0xe5, 0x9c, + 0x00, 0x00, 0x41, 0x19, 0x01, 0x00, 0x31, 0x19, + 0x01, 0x00, 0xd5, 0x9c, 0x00, 0x00, 0x02, 0x05, + 0x0a, 0x00, 0x00, 0x00, 0x02, 0x04, 0x0a, 0x00, + 0x00, 0x00, 0xc5, 0x20, 0x00, 0x00, 0x21, 0x21, + 0x00, 0x00, 0x25, 0x21, 0x00, 0x00, 0x39, 0x21, + 0x00, 0x00, 0x49, 0x21, 0x00, 0x00, 0x55, 0x21, + 0x00, 0x00, 0x3c, 0x00, 0x6c, 0x47, 0x01, 0x00, + 0x61, 0x21, 0x00, 0x00, 0xed, 0x21, 0x00, 0x00, + 0x0d, 0x22, 0x00, 0x00, 0x21, 0x22, 0x00, 0x00, + 0x3d, 0x22, 0x00, 0x00, 0x49, 0x22, 0x00, 0x00, + 0xc5, 0x22, 0x00, 0x00, 0xe1, 0x22, 0x00, 0x00, + 0xf5, 0x22, 0x00, 0x00, 0xe9, 0x1f, 0x00, 0x00, + 0xe9, 0x1f, 0x00, 0x00, 0xe9, 0x1f, 0x00, 0x00, + 0xe9, 0x1f, 0x00, 0x00, 0xe9, 0x1f, 0x00, 0x00, + 0x11, 0x23, 0x00, 0x00, 0x3c, 0x00, 0xa8, 0x47, + 0x01, 0x00, 0x1d, 0x23, 0x00, 0x00, 0x89, 0x23, + 0x00, 0x00, 0xa5, 0x23, 0x00, 0x00, 0xb9, 0x23, + 0x00, 0x00, 0x11, 0x20, 0x00, 0x00, 0x1d, 0x20, + 0x00, 0x00, 0x6d, 0x20, 0x00, 0x00, 0x8d, 0x20, + 0x00, 0x00, 0xb9, 0x20, 0x00, 0x00, 0x00, 0x01, + 0x02, 0x03, 0x03, 0x05, 0x06, 0x06, 0x08, 0x09, + 0x08, 0x09, 0x09, 0x09, 0xc4, 0x80, 0xca, 0x80, + 0x80, 0x80, 0x80, 0x80, 0xd0, 0x80, 0x3c, 0x00, + 0xe4, 0x47, 0x01, 0x00, 0xd6, 0xd9, 0xdc, 0xdf, + 0xe2, 0x80, 0x80, 0x80, 0xe5, 0xe8, 0x80, 0x80, + 0x80, 0x80, 0xeb, 0xee, 0xf1, 0xf4, 0xf7, 0xfa, + 0xfd, 0x00, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00, + 0x04, 0x00, 0x05, 0x00, 0x06, 0x00, 0x07, 0x00, + 0x08, 0x00, 0x09, 0x00, 0x0a, 0x00, 0x0b, 0x00, + 0x0c, 0x00, 0x0e, 0x00, 0x10, 0x00, 0x11, 0x00, + 0x13, 0x00, 0x16, 0x00, 0x18, 0x00, 0x1b, 0x00, + 0x3c, 0x00, 0x20, 0x48, 0x01, 0x00, 0x1e, 0x00, + 0x22, 0x00, 0x26, 0x00, 0x2b, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x3c, 0x00, 0x44, 0x00, 0x4c, 0x00, + 0x55, 0x00, 0x5f, 0x00, 0x6b, 0x00, 0x78, 0x00, + 0x86, 0x00, 0x97, 0x00, 0xa9, 0x00, 0xbe, 0x00, + 0xd5, 0x00, 0xef, 0x00, 0xff, 0x7f, 0x0c, 0x00, + 0x06, 0x00, 0x02, 0x00, 0x00, 0x00, 0xfe, 0xff, + 0xfc, 0xff, 0xfb, 0xff, 0xfa, 0xff, 0xf9, 0xff, + 0xf8, 0xff, 0x3c, 0x00, 0x5c, 0x48, 0x01, 0x00, + 0xf7, 0xff, 0xf6, 0xff, 0xf5, 0xff, 0xf4, 0xff, + 0xf3, 0xff, 0xf2, 0xff, 0xf1, 0xff, 0xf0, 0xff, + 0xef, 0xff, 0xee, 0xff, 0xed, 0xff, 0xec, 0xff, + 0xeb, 0xff, 0xea, 0xff, 0xe9, 0xff, 0xe8, 0xff, + 0xe7, 0xff, 0xe6, 0xff, 0xe5, 0xff, 0xe4, 0xff, + 0xe3, 0xff, 0xe2, 0xff, 0xe1, 0xff, 0xe0, 0xff, + 0xdf, 0xff, 0xde, 0xff, 0xdd, 0xff, 0xdc, 0xff, + 0xdc, 0xff, 0x00, 0x00, 0x3c, 0x00, 0x98, 0x48, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xb1, 0x7c, 0x41, 0x00, 0x11, 0x5a, + 0x40, 0xe2, 0xb2, 0x7c, 0x41, 0x00, 0x05, 0x5a, + 0x40, 0xe2, 0xaf, 0x7c, 0x41, 0x00, 0xf9, 0x59, + 0x40, 0xe2, 0xb0, 0x7c, 0x41, 0x00, 0xed, 0x59, + 0x40, 0xe2, 0x24, 0x67, 0x01, 0x00, 0x0e, 0x00, + 0x00, 0xe3, 0x5c, 0x67, 0x01, 0x00, 0x0e, 0x00, + 0x00, 0xe3, 0x0a, 0x61, 0x01, 0x00, 0x3c, 0x00, + 0xd4, 0x48, 0x01, 0x00, 0x01, 0x00, 0x00, 0xe3, + 0x0e, 0x61, 0x01, 0x00, 0x01, 0x00, 0x00, 0xe3, + 0x32, 0x67, 0x01, 0x00, 0x0e, 0x00, 0x00, 0xe3, + 0x6a, 0x67, 0x01, 0x00, 0x0e, 0x00, 0x00, 0xe3, + 0x0b, 0x61, 0x01, 0x00, 0x01, 0x00, 0x00, 0xe3, + 0x0f, 0x61, 0x01, 0x00, 0x01, 0x00, 0x00, 0xe3, + 0x40, 0x67, 0x01, 0x00, 0x0e, 0x00, 0x00, 0xe3, + 0x78, 0x67, 0x01, 0x00, 0x0e, 0x00, 0x00, 0xe3, + 0x3c, 0x00, 0x10, 0x49, 0x01, 0x00, 0x0c, 0x61, + 0x01, 0x00, 0x01, 0x00, 0x00, 0xe3, 0x10, 0x61, + 0x01, 0x00, 0x01, 0x00, 0x00, 0xe3, 0x4e, 0x67, + 0x01, 0x00, 0x0e, 0x00, 0x00, 0xe3, 0x86, 0x67, + 0x01, 0x00, 0x0e, 0x00, 0x00, 0xe3, 0x0d, 0x61, + 0x01, 0x00, 0x01, 0x00, 0x00, 0xe3, 0x11, 0x61, + 0x01, 0x00, 0x01, 0x00, 0x00, 0xe3, 0xc0, 0x48, + 0x01, 0x00, 0x04, 0x00, 0x00, 0x0a, 0xe0, 0x48, + 0x01, 0x00, 0x3c, 0x00, 0x4c, 0x49, 0x01, 0x00, + 0x04, 0x00, 0x00, 0x0a, 0x00, 0x49, 0x01, 0x00, + 0x04, 0x00, 0x00, 0x0a, 0x20, 0x49, 0x01, 0x00, + 0x04, 0x00, 0x00, 0x0a, 0x18, 0x67, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x28, 0x75, 0x01, 0x01, + 0x7d, 0xa9, 0x40, 0xe2, 0x2c, 0x75, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x20, 0x75, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x44, 0x75, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x3c, 0x00, 0x88, 0x49, + 0x01, 0x00, 0xf0, 0x59, 0x01, 0x00, 0x04, 0x00, + 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x24, 0x75, 0x01, 0x00, 0x04, 0x00, + 0x00, 0xe2, 0xb8, 0x7c, 0x01, 0x00, 0x04, 0x00, + 0x00, 0xe2, 0x8d, 0xa9, 0x00, 0x00, 0x01, 0x00, + 0x00, 0xda, 0x1d, 0x75, 0x01, 0x00, 0x01, 0x00, + 0x00, 0xe2, 0xc4, 0x67, 0x01, 0x00, 0x3c, 0x00, + 0xc4, 0x49, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x21, 0x59, 0x00, 0x00, 0x0e, 0x00, 0x00, 0xd9, + 0xc8, 0x67, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0xcc, 0x67, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0xd0, 0x67, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0x65, 0xd9, 0x00, 0x00, 0x04, 0x00, 0x00, 0xda, + 0xa5, 0xd9, 0x00, 0x00, 0x04, 0x00, 0x00, 0xda, + 0x3c, 0x00, 0x00, 0x4a, 0x01, 0x00, 0x01, 0x59, + 0x00, 0x00, 0x01, 0x00, 0x00, 0xda, 0x32, 0x67, + 0x01, 0x00, 0x0e, 0x00, 0x00, 0xe3, 0x6a, 0x67, + 0x01, 0x00, 0x0e, 0x00, 0x00, 0xe3, 0x11, 0x59, + 0x00, 0x00, 0x01, 0x00, 0x00, 0xda, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x48, + 0x01, 0x00, 0x02, 0x00, 0x00, 0x0a, 0xa0, 0x48, + 0x01, 0x00, 0x02, 0x00, 0x00, 0x0a, 0x40, 0x49, + 0x01, 0x00, 0x3c, 0x00, 0x3c, 0x4a, 0x01, 0x00, + 0x05, 0x00, 0x00, 0x0a, 0x68, 0x49, 0x01, 0x00, + 0x09, 0x00, 0x00, 0x0a, 0x6c, 0x57, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x38, 0x61, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xac, 0x6e, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0xb0, 0x6e, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x70, 0x57, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x3c, 0x00, 0x78, 0x4a, + 0x01, 0x00, 0xe8, 0x59, 0x01, 0x00, 0x08, 0x00, + 0x00, 0xe3, 0xdc, 0x58, 0x01, 0x14, 0x4d, 0xfd, + 0x40, 0xe3, 0x2c, 0x59, 0x01, 0x14, 0x39, 0xfd, + 0x40, 0xe3, 0xc0, 0x58, 0x01, 0x00, 0x0e, 0x00, + 0x00, 0xe3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x64, 0x73, 0x41, 0x00, 0x3d, 0x2e, + 0x44, 0xe2, 0x7c, 0x59, 0x01, 0x14, 0x3c, 0x00, + 0xb4, 0x4a, 0x01, 0x00, 0x9d, 0x2f, 0x44, 0xe3, + 0x5c, 0x57, 0x01, 0x00, 0x0e, 0x00, 0x00, 0xe2, + 0x79, 0x2e, 0x04, 0x00, 0x01, 0x00, 0x00, 0xdb, + 0xa0, 0x58, 0x01, 0x00, 0x02, 0x00, 0x00, 0xe3, + 0xa2, 0x58, 0x01, 0x00, 0x02, 0x00, 0x00, 0xe3, + 0xa0, 0x57, 0x01, 0x00, 0x0e, 0x00, 0x00, 0xe3, + 0xd1, 0x88, 0x01, 0x00, 0x01, 0x00, 0x00, 0xda, + 0x1d, 0x89, 0x01, 0x00, 0x04, 0x00, 0x00, 0xda, + 0x3c, 0x00, 0xf0, 0x4a, 0x01, 0x00, 0x95, 0x88, + 0x01, 0x00, 0x04, 0x00, 0x00, 0xdb, 0x31, 0x2f, + 0x04, 0x00, 0x0e, 0x00, 0x00, 0xd9, 0xc5, 0x2e, + 0x04, 0x00, 0x0e, 0x00, 0x00, 0xd9, 0x68, 0x6c, + 0x01, 0x01, 0x15, 0xd5, 0x40, 0xe2, 0xc0, 0x57, + 0x01, 0x00, 0x08, 0x00, 0x00, 0xe3, 0xc8, 0x57, + 0x01, 0x00, 0x34, 0x00, 0x00, 0xe3, 0x9c, 0x6c, + 0x01, 0x00, 0x08, 0x00, 0x00, 0xe3, 0xb0, 0x58, + 0x01, 0x03, 0x3c, 0x00, 0x2c, 0x4b, 0x01, 0x00, + 0xe9, 0xd4, 0x40, 0xe2, 0xbc, 0x58, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x9d, 0xa3, 0x00, 0x00, + 0x60, 0x00, 0x00, 0xd9, 0x70, 0x79, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x78, 0x79, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x7c, 0x5a, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x5d, 0x1c, 0x00, 0x00, + 0x11, 0x00, 0x00, 0xd9, 0x24, 0x6e, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x3c, 0x00, 0x68, 0x4b, + 0x01, 0x00, 0x18, 0x58, 0x01, 0x05, 0xd5, 0xd5, + 0x40, 0xe3, 0xfc, 0x57, 0x01, 0x00, 0x14, 0x00, + 0x00, 0xe3, 0x04, 0x8e, 0x01, 0x03, 0xe5, 0xd5, + 0x40, 0xe3, 0x00, 0x5b, 0x01, 0x00, 0x04, 0x00, + 0x00, 0xe2, 0x18, 0x5b, 0x01, 0x00, 0x40, 0x00, + 0x00, 0xe2, 0xd4, 0x67, 0x01, 0x00, 0x04, 0x00, + 0x00, 0xe2, 0x8d, 0x37, 0x00, 0x00, 0x04, 0x00, + 0x00, 0xdb, 0xbd, 0x36, 0x00, 0x00, 0x3c, 0x00, + 0xa4, 0x4b, 0x01, 0x00, 0x04, 0x00, 0x00, 0xdb, + 0xfc, 0x60, 0x01, 0x00, 0x02, 0x00, 0x00, 0xe2, + 0x90, 0x7d, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0x70, 0x69, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb0, 0x49, 0x01, 0x00, 0x1a, 0x00, 0x00, 0x0a, + 0x90, 0x4b, 0x01, 0x00, 0x06, 0x00, 0x00, 0x0a, + 0xa4, 0x58, 0x81, 0x00, 0x05, 0xfd, 0x40, 0xe3, + 0x3c, 0x00, 0xe0, 0x4b, 0x01, 0x00, 0x80, 0x4a, + 0x01, 0x00, 0x0c, 0x00, 0x00, 0x0a, 0x0c, 0x5a, + 0x81, 0x01, 0x25, 0x2d, 0x44, 0xe3, 0xe0, 0x4a, + 0x01, 0x00, 0x03, 0x00, 0x00, 0x0a, 0x18, 0x63, + 0x41, 0x00, 0xfd, 0xbb, 0x40, 0xe2, 0x08, 0x57, + 0x01, 0x00, 0x01, 0x00, 0x00, 0xe2, 0x9c, 0x48, + 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x4a, + 0x01, 0x00, 0x3c, 0x00, 0x1c, 0x4c, 0x01, 0x00, + 0x02, 0x00, 0x00, 0x0a, 0xcc, 0x74, 0x01, 0x00, + 0x03, 0x00, 0x00, 0xe3, 0x65, 0x73, 0x41, 0x00, + 0xa9, 0x2e, 0x44, 0xe2, 0xf6, 0x59, 0x01, 0x01, + 0xd1, 0x2c, 0x44, 0xe3, 0x08, 0x4b, 0x01, 0x00, + 0x04, 0x00, 0x00, 0x0a, 0x07, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x6a, 0x28, 0x4b, 0x01, 0x00, + 0x02, 0x00, 0x00, 0x0a, 0x88, 0x7d, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x3c, 0x00, 0x58, 0x4c, + 0x01, 0x00, 0x00, 0x75, 0x01, 0x04, 0x65, 0x6f, + 0x40, 0xe3, 0xbc, 0x78, 0x01, 0x00, 0x0e, 0x00, + 0x00, 0xe3, 0x38, 0x4b, 0x01, 0x00, 0x04, 0x00, + 0x00, 0x0a, 0x04, 0x57, 0x01, 0x00, 0x04, 0x00, + 0x00, 0x62, 0x58, 0x4b, 0x01, 0x00, 0x02, 0x00, + 0x00, 0x0a, 0x80, 0x4b, 0x01, 0x00, 0x02, 0x00, + 0x00, 0x0a, 0x68, 0x4b, 0x01, 0x00, 0x03, 0x00, + 0x00, 0x0a, 0x8c, 0x7d, 0x01, 0x00, 0x3c, 0x00, + 0x94, 0x4c, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0x39, 0x2d, 0x04, 0x00, 0x04, 0x00, 0x00, 0xdb, + 0x94, 0x7d, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x10, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x64, + 0xa8, 0x4c, 0x01, 0x00, 0x04, 0x00, 0x00, 0x0a, + 0x3c, 0x00, 0xd0, 0x4c, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x4c, + 0x01, 0x00, 0x01, 0x00, 0x00, 0x0a, 0xd0, 0x4c, + 0x01, 0x00, 0x02, 0x00, 0x00, 0x0a, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe7, 0x7a, + 0x01, 0x00, 0x01, 0x00, 0x00, 0xe2, 0xe8, 0x7a, + 0x01, 0x00, 0x01, 0x00, 0x00, 0xe2, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xed, 0x7a, + 0x01, 0x00, 0x3c, 0x00, 0x0c, 0x4d, 0x01, 0x00, + 0x01, 0x00, 0x00, 0xe2, 0xee, 0x7a, 0x01, 0x00, + 0x01, 0x00, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xf3, 0x7a, 0x01, 0x00, + 0x01, 0x00, 0x00, 0xe2, 0xf4, 0x7a, 0x01, 0x00, + 0x01, 0x00, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xf9, 0x7a, 0x01, 0x00, + 0x01, 0x00, 0x00, 0xe2, 0xfa, 0x7a, 0x01, 0x00, + 0x01, 0x00, 0x00, 0xe2, 0x3c, 0x00, 0x48, 0x4d, + 0x01, 0x00, 0xe8, 0x4c, 0x01, 0x00, 0x03, 0x00, + 0x00, 0x0a, 0x00, 0x4d, 0x01, 0x00, 0x03, 0x00, + 0x00, 0x0a, 0x18, 0x4d, 0x01, 0x00, 0x03, 0x00, + 0x00, 0x0a, 0x30, 0x4d, 0x01, 0x00, 0x03, 0x00, + 0x00, 0x0a, 0x90, 0x5c, 0x01, 0x00, 0x04, 0x00, + 0x00, 0xe2, 0x94, 0x5c, 0x01, 0x00, 0x04, 0x00, + 0x00, 0xe2, 0x98, 0x5c, 0x01, 0x00, 0x04, 0x00, + 0x00, 0xe2, 0x9c, 0x5c, 0x01, 0x00, 0x3c, 0x00, + 0x84, 0x4d, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0xa0, 0x5c, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0xa4, 0x5c, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0xa8, 0x5c, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0xac, 0x5c, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0xb0, 0x5c, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0xb4, 0x5c, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0xb8, 0x5c, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0x3c, 0x00, 0xc0, 0x4d, 0x01, 0x00, 0xbc, 0x5c, + 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, 0xc0, 0x5c, + 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, 0xc4, 0x5c, + 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, 0x90, 0x5c, + 0x01, 0x00, 0x38, 0x00, 0x00, 0xe3, 0x68, 0x4d, + 0x01, 0x00, 0x0e, 0x00, 0x00, 0x0a, 0xd8, 0x4d, + 0x01, 0x00, 0x02, 0x00, 0x00, 0xfa, 0x12, 0x61, + 0x81, 0x01, 0x31, 0xd5, 0x40, 0xe3, 0x06, 0x61, + 0x01, 0x00, 0x3c, 0x00, 0xfc, 0x4d, 0x01, 0x00, + 0x02, 0x00, 0x00, 0xe2, 0x0b, 0x61, 0x01, 0x00, + 0x01, 0x00, 0x00, 0xe3, 0x0f, 0x61, 0x01, 0x00, + 0x01, 0x00, 0x00, 0xe3, 0x08, 0x61, 0x01, 0x00, + 0x02, 0x00, 0x00, 0xe2, 0x50, 0x7b, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0x01, 0x00, + 0x0e, 0x00, 0x00, 0x64, 0x9c, 0x57, 0x01, 0x01, + 0x91, 0x88, 0x41, 0xe3, 0x3c, 0x00, 0x38, 0x4e, + 0x01, 0x00, 0x6e, 0x41, 0x67, 0x6f, 0xe2, 0x65, + 0x60, 0x69, 0x6f, 0x20, 0x41, 0x42, 0x00, 0x00, + 0x00, 0x00, 0xf0, 0x4d, 0x01, 0x00, 0x09, 0x00, + 0x00, 0x0a, 0x48, 0x4e, 0x01, 0x00, 0x01, 0x00, + 0x00, 0x0a, 0xe8, 0x4d, 0x01, 0x00, 0x01, 0x00, + 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x48, 0x4d, 0x01, 0x00, 0x04, 0x00, + 0x00, 0x0a, 0x28, 0x61, 0x01, 0x01, 0x3c, 0x00, + 0x74, 0x4e, 0x01, 0x00, 0xbd, 0xd5, 0x40, 0xe2, + 0x69, 0x61, 0x41, 0x00, 0x85, 0xd5, 0x40, 0xe2, + 0x30, 0x61, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0x34, 0x61, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0x3c, 0x61, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0x34, 0x61, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0x44, 0x61, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x6a, + 0x3c, 0x00, 0xb0, 0x4e, 0x01, 0x00, 0x70, 0x4e, + 0x01, 0x00, 0x08, 0x00, 0x00, 0x0a, 0x18, 0x61, + 0x01, 0x00, 0x02, 0x00, 0x00, 0xe2, 0x1c, 0x61, + 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, 0x20, 0x61, + 0x01, 0x00, 0x02, 0x00, 0x00, 0xe2, 0x24, 0x61, + 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, 0xb8, 0x4e, + 0x01, 0x00, 0x02, 0x00, 0x00, 0x0a, 0xc8, 0x4e, + 0x01, 0x00, 0x02, 0x00, 0x00, 0x0a, 0xd8, 0x4e, + 0x01, 0x00, 0x3c, 0x00, 0xec, 0x4e, 0x01, 0x00, + 0x02, 0x00, 0x00, 0x0a, 0x96, 0x48, 0x01, 0x00, + 0x06, 0x00, 0x00, 0xe3, 0xe0, 0x62, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x6a, 0x9b, 0x7d, 0x01, 0x00, + 0x01, 0x00, 0x00, 0x62, 0x9c, 0x7d, 0x01, 0x00, + 0x02, 0x00, 0x00, 0x62, 0x60, 0x7c, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x01, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x6a, 0x3c, 0x00, 0x28, 0x4f, + 0x01, 0x00, 0x2d, 0x63, 0x01, 0x00, 0x01, 0x00, + 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x49, 0xd5, 0x00, 0x00, 0x0e, 0x00, + 0x00, 0xd9, 0xf4, 0x67, 0x01, 0x00, 0x02, 0x00, + 0x00, 0x62, 0x46, 0x7d, 0x01, 0x00, 0x01, 0x00, + 0x00, 0x62, 0x9c, 0x7c, 0x01, 0x00, 0x04, 0x00, + 0x00, 0xe2, 0x98, 0x7c, 0x01, 0x00, 0x3c, 0x00, + 0x64, 0x4f, 0x01, 0x00, 0x02, 0x00, 0x00, 0x62, + 0xa0, 0x7c, 0x01, 0x00, 0x06, 0x00, 0x00, 0x62, + 0x58, 0x7c, 0x01, 0x00, 0x02, 0x00, 0x00, 0x62, + 0x64, 0x7c, 0x01, 0x00, 0x06, 0x00, 0x00, 0x62, + 0x5a, 0x7c, 0x01, 0x00, 0x02, 0x00, 0x00, 0x62, + 0x6a, 0x7c, 0x01, 0x00, 0x06, 0x00, 0x00, 0x62, + 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x6a, + 0xe4, 0x62, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0x3c, 0x00, 0xa0, 0x4f, 0x01, 0x00, 0xe8, 0x62, + 0x01, 0x00, 0x03, 0x00, 0x00, 0xe2, 0x00, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x6a, 0x00, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x6a, 0x01, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x6a, 0x00, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x6a, 0x00, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x6a, 0x00, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x6a, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xdc, 0x4f, 0x01, 0x00, + 0x04, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x6a, 0x3c, 0x00, 0x18, 0x50, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x6a, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x6a, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x6a, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x6a, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x6a, 0xf0, 0x4e, 0x01, 0x00, 0x2a, 0x00, + 0x00, 0x0a, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x6a, 0x75, 0x2a, 0x01, 0x00, 0x3c, 0x00, + 0x54, 0x50, 0x01, 0x00, 0x0c, 0x00, 0x00, 0xdb, + 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x6a, + 0x75, 0x2a, 0x01, 0x00, 0x0c, 0x00, 0x00, 0xdb, + 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x6a, + 0x75, 0x2a, 0x01, 0x00, 0x0c, 0x00, 0x00, 0xdb, + 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x6a, + 0x75, 0x2a, 0x01, 0x00, 0x0c, 0x00, 0x00, 0xdb, + 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x6a, + 0x3c, 0x00, 0x90, 0x50, 0x01, 0x00, 0x75, 0x2a, + 0x01, 0x00, 0x0c, 0x00, 0x00, 0xdb, 0x06, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x6a, 0x75, 0x2a, + 0x01, 0x00, 0x0c, 0x00, 0x00, 0xdb, 0x07, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x6a, 0x75, 0x2a, + 0x01, 0x00, 0x0c, 0x00, 0x00, 0xdb, 0x08, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x6a, 0x75, 0x2a, + 0x01, 0x00, 0x0c, 0x00, 0x00, 0xdb, 0x09, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xcc, 0x50, 0x01, 0x00, + 0x04, 0x00, 0x00, 0x6a, 0x75, 0x2a, 0x01, 0x00, + 0x0c, 0x00, 0x00, 0xdb, 0x0a, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x6a, 0x75, 0x2a, 0x01, 0x00, + 0x0c, 0x00, 0x00, 0xdb, 0x0b, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x6a, 0x75, 0x2a, 0x01, 0x00, + 0x0c, 0x00, 0x00, 0xdb, 0x0c, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x6a, 0x75, 0x2a, 0x01, 0x00, + 0x0c, 0x00, 0x00, 0xdb, 0x3c, 0x00, 0x08, 0x51, + 0x01, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x6a, 0x75, 0x2a, 0x01, 0x00, 0x0c, 0x00, + 0x00, 0xdb, 0x0e, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x6a, 0x75, 0x2a, 0x01, 0x00, 0x0c, 0x00, + 0x00, 0xdb, 0x48, 0x50, 0x01, 0x00, 0x02, 0x00, + 0x00, 0x0a, 0x58, 0x50, 0x01, 0x00, 0x02, 0x00, + 0x00, 0x0a, 0x68, 0x50, 0x01, 0x00, 0x02, 0x00, + 0x00, 0x0a, 0x78, 0x50, 0x01, 0x00, 0x3c, 0x00, + 0x44, 0x51, 0x01, 0x00, 0x02, 0x00, 0x00, 0x0a, + 0x88, 0x50, 0x01, 0x00, 0x02, 0x00, 0x00, 0x0a, + 0x98, 0x50, 0x01, 0x00, 0x02, 0x00, 0x00, 0x0a, + 0xa8, 0x50, 0x01, 0x00, 0x02, 0x00, 0x00, 0x0a, + 0xb8, 0x50, 0x01, 0x00, 0x02, 0x00, 0x00, 0x0a, + 0xc8, 0x50, 0x01, 0x00, 0x02, 0x00, 0x00, 0x0a, + 0xd8, 0x50, 0x01, 0x00, 0x02, 0x00, 0x00, 0x0a, + 0xe8, 0x50, 0x01, 0x00, 0x02, 0x00, 0x00, 0x0a, + 0x3c, 0x00, 0x80, 0x51, 0x01, 0x00, 0xf8, 0x50, + 0x01, 0x00, 0x02, 0x00, 0x00, 0x0a, 0x08, 0x51, + 0x01, 0x00, 0x02, 0x00, 0x00, 0x0a, 0x18, 0x51, + 0x01, 0x00, 0x02, 0x00, 0x00, 0x0a, 0x40, 0x50, + 0x01, 0x00, 0x01, 0x00, 0x00, 0x0a, 0xe8, 0x4e, + 0x01, 0x00, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x4e, + 0x01, 0x00, 0x3c, 0x00, 0xbc, 0x51, 0x01, 0x00, + 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x28, 0x51, 0x01, 0x00, + 0x0e, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xf8, 0x51, + 0x01, 0x00, 0x98, 0x51, 0x01, 0x00, 0x0c, 0x00, + 0x00, 0x0a, 0x50, 0x4e, 0x01, 0x00, 0x04, 0x00, + 0x00, 0x0a, 0xe0, 0x4c, 0x01, 0x00, 0x01, 0x00, + 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xc0, 0x4b, 0x01, 0x00, 0x1d, 0x00, + 0x00, 0x0a, 0xf8, 0x51, 0x01, 0x00, 0x05, 0x00, + 0x00, 0x0a, 0x24, 0x80, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x1d, 0x80, 0x07, 0x00, 0x3c, 0x00, + 0x34, 0x52, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x2a, 0x80, 0x07, 0x00, 0x5c, 0x00, 0x00, 0x00, + 0x24, 0x80, 0x07, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x1d, 0x80, 0x07, 0x00, 0x20, 0x00, 0x00, 0x00, + 0x2a, 0x80, 0x07, 0x00, 0x6a, 0x00, 0x00, 0x00, + 0x24, 0x80, 0x07, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x1d, 0x80, 0x07, 0x00, 0x20, 0x00, 0x00, 0x00, + 0x2a, 0x80, 0x07, 0x00, 0x6a, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x70, 0x52, 0x01, 0x00, 0x00, 0x01, + 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, + 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, + 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, + 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x01, 0x63, + 0x00, 0x00, 0xa1, 0x63, 0x00, 0x00, 0xc5, 0x63, + 0x00, 0x00, 0xb1, 0x62, 0x00, 0x00, 0xc5, 0x63, + 0x00, 0x00, 0x21, 0x63, 0x00, 0x00, 0x4d, 0x63, + 0x00, 0x00, 0x3c, 0x00, 0xac, 0x52, 0x01, 0x00, + 0xa1, 0x63, 0x00, 0x00, 0x01, 0x63, 0x00, 0x00, + 0xa1, 0x63, 0x00, 0x00, 0x06, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x03, 0x05, 0x06, 0x07, 0x08, 0x09, + 0x0a, 0x0a, 0x0c, 0x0d, 0x0e, 0x0f, 0x0f, 0x10, + 0x11, 0x00, 0x00, 0x00, 0xa5, 0xc6, 0x84, 0xf8, + 0x99, 0xee, 0x8d, 0xf6, 0x0d, 0xff, 0xbd, 0xd6, + 0xb1, 0xde, 0x54, 0x91, 0x3c, 0x00, 0xe8, 0x52, + 0x01, 0x00, 0x50, 0x60, 0x03, 0x02, 0xa9, 0xce, + 0x7d, 0x56, 0x19, 0xe7, 0x62, 0xb5, 0xe6, 0x4d, + 0x9a, 0xec, 0x45, 0x8f, 0x9d, 0x1f, 0x40, 0x89, + 0x87, 0xfa, 0x15, 0xef, 0xeb, 0xb2, 0xc9, 0x8e, + 0x0b, 0xfb, 0xec, 0x41, 0x67, 0xb3, 0xfd, 0x5f, + 0xea, 0x45, 0xbf, 0x23, 0xf7, 0x53, 0x96, 0xe4, + 0x5b, 0x9b, 0xc2, 0x75, 0x1c, 0xe1, 0xae, 0x3d, + 0x6a, 0x4c, 0x5a, 0x6c, 0x41, 0x7e, 0x3c, 0x00, + 0x24, 0x53, 0x01, 0x00, 0x02, 0xf5, 0x4f, 0x83, + 0x5c, 0x68, 0xf4, 0x51, 0x34, 0xd1, 0x08, 0xf9, + 0x93, 0xe2, 0x73, 0xab, 0x53, 0x62, 0x3f, 0x2a, + 0x0c, 0x08, 0x52, 0x95, 0x65, 0x46, 0x5e, 0x9d, + 0x28, 0x30, 0xa1, 0x37, 0x0f, 0x0a, 0xb5, 0x2f, + 0x09, 0x0e, 0x36, 0x24, 0x9b, 0x1b, 0x3d, 0xdf, + 0x26, 0xcd, 0x69, 0x4e, 0xcd, 0x7f, 0x9f, 0xea, + 0x1b, 0x12, 0x9e, 0x1d, 0x74, 0x58, 0x2e, 0x34, + 0x3c, 0x00, 0x60, 0x53, 0x01, 0x00, 0x2d, 0x36, + 0xb2, 0xdc, 0xee, 0xb4, 0xfb, 0x5b, 0xf6, 0xa4, + 0x4d, 0x76, 0x61, 0xb7, 0xce, 0x7d, 0x7b, 0x52, + 0x3e, 0xdd, 0x71, 0x5e, 0x97, 0x13, 0xf5, 0xa6, + 0x68, 0xb9, 0x00, 0x00, 0x2c, 0xc1, 0x60, 0x40, + 0x1f, 0xe3, 0xc8, 0x79, 0xed, 0xb6, 0xbe, 0xd4, + 0x46, 0x8d, 0xd9, 0x67, 0x4b, 0x72, 0xde, 0x94, + 0xd4, 0x98, 0xe8, 0xb0, 0x4a, 0x85, 0x6b, 0xbb, + 0x2a, 0xc5, 0x3c, 0x00, 0x9c, 0x53, 0x01, 0x00, + 0xe5, 0x4f, 0x16, 0xed, 0xc5, 0x86, 0xd7, 0x9a, + 0x55, 0x66, 0x94, 0x11, 0xcf, 0x8a, 0x10, 0xe9, + 0x06, 0x04, 0x81, 0xfe, 0xf0, 0xa0, 0x44, 0x78, + 0xba, 0x25, 0xe3, 0x4b, 0xf3, 0xa2, 0xfe, 0x5d, + 0xc0, 0x80, 0x8a, 0x05, 0xad, 0x3f, 0xbc, 0x21, + 0x48, 0x70, 0x04, 0xf1, 0xdf, 0x63, 0xc1, 0x77, + 0x75, 0xaf, 0x63, 0x42, 0x30, 0x20, 0x1a, 0xe5, + 0x0e, 0xfd, 0x6d, 0xbf, 0x3c, 0x00, 0xd8, 0x53, + 0x01, 0x00, 0x4c, 0x81, 0x14, 0x18, 0x35, 0x26, + 0x2f, 0xc3, 0xe1, 0xbe, 0xa2, 0x35, 0xcc, 0x88, + 0x39, 0x2e, 0x57, 0x93, 0xf2, 0x55, 0x82, 0xfc, + 0x47, 0x7a, 0xac, 0xc8, 0xe7, 0xba, 0x2b, 0x32, + 0x95, 0xe6, 0xa0, 0xc0, 0x98, 0x19, 0xd1, 0x9e, + 0x7f, 0xa3, 0x66, 0x44, 0x7e, 0x54, 0xab, 0x3b, + 0x83, 0x0b, 0xca, 0x8c, 0x29, 0xc7, 0xd3, 0x6b, + 0x3c, 0x28, 0x79, 0xa7, 0xe2, 0xbc, 0x3c, 0x00, + 0x14, 0x54, 0x01, 0x00, 0x1d, 0x16, 0x76, 0xad, + 0x3b, 0xdb, 0x56, 0x64, 0x4e, 0x74, 0x1e, 0x14, + 0xdb, 0x92, 0x0a, 0x0c, 0x6c, 0x48, 0xe4, 0xb8, + 0x5d, 0x9f, 0x6e, 0xbd, 0xef, 0x43, 0xa6, 0xc4, + 0xa8, 0x39, 0xa4, 0x31, 0x37, 0xd3, 0x8b, 0xf2, + 0x32, 0xd5, 0x43, 0x8b, 0x59, 0x6e, 0xb7, 0xda, + 0x8c, 0x01, 0x64, 0xb1, 0xd2, 0x9c, 0xe0, 0x49, + 0xb4, 0xd8, 0xfa, 0xac, 0x07, 0xf3, 0x25, 0xcf, + 0x3c, 0x00, 0x50, 0x54, 0x01, 0x00, 0xaf, 0xca, + 0x8e, 0xf4, 0xe9, 0x47, 0x18, 0x10, 0xd5, 0x6f, + 0x88, 0xf0, 0x6f, 0x4a, 0x72, 0x5c, 0x24, 0x38, + 0xf1, 0x57, 0xc7, 0x73, 0x51, 0x97, 0x23, 0xcb, + 0x7c, 0xa1, 0x9c, 0xe8, 0x21, 0x3e, 0xdd, 0x96, + 0xdc, 0x61, 0x86, 0x0d, 0x85, 0x0f, 0x90, 0xe0, + 0x42, 0x7c, 0xc4, 0x71, 0xaa, 0xcc, 0xd8, 0x90, + 0x05, 0x06, 0x01, 0xf7, 0x12, 0x1c, 0xa3, 0xc2, + 0x5f, 0x6a, 0x3c, 0x00, 0x8c, 0x54, 0x01, 0x00, + 0xf9, 0xae, 0xd0, 0x69, 0x91, 0x17, 0x58, 0x99, + 0x27, 0x3a, 0xb9, 0x27, 0x38, 0xd9, 0x13, 0xeb, + 0xb3, 0x2b, 0x33, 0x22, 0xbb, 0xd2, 0x70, 0xa9, + 0x89, 0x07, 0xa7, 0x33, 0xb6, 0x2d, 0x22, 0x3c, + 0x92, 0x15, 0x20, 0xc9, 0x49, 0x87, 0xff, 0xaa, + 0x78, 0x50, 0x7a, 0xa5, 0x8f, 0x03, 0xf8, 0x59, + 0x80, 0x09, 0x17, 0x1a, 0xda, 0x65, 0x31, 0xd7, + 0xc6, 0x84, 0xb8, 0xd0, 0x3c, 0x00, 0xc8, 0x54, + 0x01, 0x00, 0xc3, 0x82, 0xb0, 0x29, 0x77, 0x5a, + 0x11, 0x1e, 0xcb, 0x7b, 0xfc, 0xa8, 0xd6, 0x6d, + 0x3a, 0x2c, 0xc6, 0xa5, 0xf8, 0x84, 0xee, 0x99, + 0xf6, 0x8d, 0xff, 0x0d, 0xd6, 0xbd, 0xde, 0xb1, + 0x91, 0x54, 0x60, 0x50, 0x02, 0x03, 0xce, 0xa9, + 0x56, 0x7d, 0xe7, 0x19, 0xb5, 0x62, 0x4d, 0xe6, + 0xec, 0x9a, 0x8f, 0x45, 0x1f, 0x9d, 0x89, 0x40, + 0xfa, 0x87, 0xef, 0x15, 0xb2, 0xeb, 0x3c, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x8e, 0xc9, 0xfb, 0x0b, + 0x41, 0xec, 0xb3, 0x67, 0x5f, 0xfd, 0x45, 0xea, + 0x23, 0xbf, 0x53, 0xf7, 0xe4, 0x96, 0x9b, 0x5b, + 0x75, 0xc2, 0xe1, 0x1c, 0x3d, 0xae, 0x4c, 0x6a, + 0x6c, 0x5a, 0x7e, 0x41, 0xf5, 0x02, 0x83, 0x4f, + 0x68, 0x5c, 0x51, 0xf4, 0xd1, 0x34, 0xf9, 0x08, + 0xe2, 0x93, 0xab, 0x73, 0x62, 0x53, 0x2a, 0x3f, + 0x08, 0x0c, 0x95, 0x52, 0x46, 0x65, 0x9d, 0x5e, + 0x3c, 0x00, 0x40, 0x55, 0x01, 0x00, 0x30, 0x28, + 0x37, 0xa1, 0x0a, 0x0f, 0x2f, 0xb5, 0x0e, 0x09, + 0x24, 0x36, 0x1b, 0x9b, 0xdf, 0x3d, 0xcd, 0x26, + 0x4e, 0x69, 0x7f, 0xcd, 0xea, 0x9f, 0x12, 0x1b, + 0x1d, 0x9e, 0x58, 0x74, 0x34, 0x2e, 0x36, 0x2d, + 0xdc, 0xb2, 0xb4, 0xee, 0x5b, 0xfb, 0xa4, 0xf6, + 0x76, 0x4d, 0xb7, 0x61, 0x7d, 0xce, 0x52, 0x7b, + 0xdd, 0x3e, 0x5e, 0x71, 0x13, 0x97, 0xa6, 0xf5, + 0xb9, 0x68, 0x3c, 0x00, 0x7c, 0x55, 0x01, 0x00, + 0x00, 0x00, 0xc1, 0x2c, 0x40, 0x60, 0xe3, 0x1f, + 0x79, 0xc8, 0xb6, 0xed, 0xd4, 0xbe, 0x8d, 0x46, + 0x67, 0xd9, 0x72, 0x4b, 0x94, 0xde, 0x98, 0xd4, + 0xb0, 0xe8, 0x85, 0x4a, 0xbb, 0x6b, 0xc5, 0x2a, + 0x4f, 0xe5, 0xed, 0x16, 0x86, 0xc5, 0x9a, 0xd7, + 0x66, 0x55, 0x11, 0x94, 0x8a, 0xcf, 0xe9, 0x10, + 0x04, 0x06, 0xfe, 0x81, 0xa0, 0xf0, 0x78, 0x44, + 0x25, 0xba, 0x4b, 0xe3, 0x3c, 0x00, 0xb8, 0x55, + 0x01, 0x00, 0xa2, 0xf3, 0x5d, 0xfe, 0x80, 0xc0, + 0x05, 0x8a, 0x3f, 0xad, 0x21, 0xbc, 0x70, 0x48, + 0xf1, 0x04, 0x63, 0xdf, 0x77, 0xc1, 0xaf, 0x75, + 0x42, 0x63, 0x20, 0x30, 0xe5, 0x1a, 0xfd, 0x0e, + 0xbf, 0x6d, 0x81, 0x4c, 0x18, 0x14, 0x26, 0x35, + 0xc3, 0x2f, 0xbe, 0xe1, 0x35, 0xa2, 0x88, 0xcc, + 0x2e, 0x39, 0x93, 0x57, 0x55, 0xf2, 0xfc, 0x82, + 0x7a, 0x47, 0xc8, 0xac, 0xba, 0xe7, 0x3c, 0x00, + 0xf4, 0x55, 0x01, 0x00, 0x32, 0x2b, 0xe6, 0x95, + 0xc0, 0xa0, 0x19, 0x98, 0x9e, 0xd1, 0xa3, 0x7f, + 0x44, 0x66, 0x54, 0x7e, 0x3b, 0xab, 0x0b, 0x83, + 0x8c, 0xca, 0xc7, 0x29, 0x6b, 0xd3, 0x28, 0x3c, + 0xa7, 0x79, 0xbc, 0xe2, 0x16, 0x1d, 0xad, 0x76, + 0xdb, 0x3b, 0x64, 0x56, 0x74, 0x4e, 0x14, 0x1e, + 0x92, 0xdb, 0x0c, 0x0a, 0x48, 0x6c, 0xb8, 0xe4, + 0x9f, 0x5d, 0xbd, 0x6e, 0x43, 0xef, 0xc4, 0xa6, + 0x3c, 0x00, 0x30, 0x56, 0x01, 0x00, 0x39, 0xa8, + 0x31, 0xa4, 0xd3, 0x37, 0xf2, 0x8b, 0xd5, 0x32, + 0x8b, 0x43, 0x6e, 0x59, 0xda, 0xb7, 0x01, 0x8c, + 0xb1, 0x64, 0x9c, 0xd2, 0x49, 0xe0, 0xd8, 0xb4, + 0xac, 0xfa, 0xf3, 0x07, 0xcf, 0x25, 0xca, 0xaf, + 0xf4, 0x8e, 0x47, 0xe9, 0x10, 0x18, 0x6f, 0xd5, + 0xf0, 0x88, 0x4a, 0x6f, 0x5c, 0x72, 0x38, 0x24, + 0x57, 0xf1, 0x73, 0xc7, 0x97, 0x51, 0xcb, 0x23, + 0xa1, 0x7c, 0x3c, 0x00, 0x6c, 0x56, 0x01, 0x00, + 0xe8, 0x9c, 0x3e, 0x21, 0x96, 0xdd, 0x61, 0xdc, + 0x0d, 0x86, 0x0f, 0x85, 0xe0, 0x90, 0x7c, 0x42, + 0x71, 0xc4, 0xcc, 0xaa, 0x90, 0xd8, 0x06, 0x05, + 0xf7, 0x01, 0x1c, 0x12, 0xc2, 0xa3, 0x6a, 0x5f, + 0xae, 0xf9, 0x69, 0xd0, 0x17, 0x91, 0x99, 0x58, + 0x3a, 0x27, 0x27, 0xb9, 0xd9, 0x38, 0xeb, 0x13, + 0x2b, 0xb3, 0x22, 0x33, 0xd2, 0xbb, 0xa9, 0x70, + 0x07, 0x89, 0x33, 0xa7, 0x3c, 0x00, 0xa8, 0x56, + 0x01, 0x00, 0x2d, 0xb6, 0x3c, 0x22, 0x15, 0x92, + 0xc9, 0x20, 0x87, 0x49, 0xaa, 0xff, 0x50, 0x78, + 0xa5, 0x7a, 0x03, 0x8f, 0x59, 0xf8, 0x09, 0x80, + 0x1a, 0x17, 0x65, 0xda, 0xd7, 0x31, 0x84, 0xc6, + 0xd0, 0xb8, 0x82, 0xc3, 0x29, 0xb0, 0x5a, 0x77, + 0x1e, 0x11, 0x7b, 0xcb, 0xa8, 0xfc, 0x6d, 0xd6, + 0x2c, 0x3a, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xe4, 0x56, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x72, 0x65, 0x71, 0x45, 0x72, 0x72, 0x52, + 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x20, 0x57, 0x01, 0x00, 0xc4, 0x8e, + 0x01, 0x00, 0x24, 0x9a, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x24, 0x9a, + 0x01, 0x00, 0xa4, 0xb2, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0xa4, 0xb2, + 0x01, 0x00, 0x14, 0xc8, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x10, 0x20, + 0x30, 0x40, 0x50, 0xbb, 0x30, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x5c, 0x57, 0x01, 0x00, + 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e, 0x20, 0x22, + 0x24, 0x26, 0x28, 0x2a, 0x2b, 0x2c, 0x01, 0x00, + 0x70, 0x17, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0d, 0x25, 0x00, 0x00, 0x41, 0x3f, 0x01, 0x00, + 0x65, 0x29, 0x01, 0x00, 0x0d, 0x25, 0x00, 0x00, + 0xf5, 0x5e, 0x00, 0x00, 0x41, 0x3f, 0x01, 0x00, + 0x41, 0x3f, 0x01, 0x00, 0x02, 0x04, 0x0b, 0x0c, + 0x12, 0x16, 0x18, 0x24, 0x3c, 0x00, 0x98, 0x57, + 0x01, 0x00, 0x30, 0x48, 0x60, 0x6c, 0x01, 0x00, + 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x02, 0x10, 0x12, 0x11, 0x00, + 0x00, 0x01, 0x18, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xd4, 0x57, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xe0, 0x93, 0x04, 0x00, + 0x40, 0x42, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0xdf, 0x40, 0xcf, 0xfd, 0x00, 0x40, 0x83, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, + 0x3c, 0x00, 0x10, 0x58, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x40, 0x00, 0x80, 0x81, 0x00, 0x00, + 0x80, 0x00, 0xbf, 0xff, 0x7f, 0x7e, 0x01, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x78, 0x6f, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, 0x6f, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x6f, + 0x01, 0x00, 0x3c, 0x00, 0x4c, 0x58, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x70, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x78, 0x70, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xb8, 0x70, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xf8, 0x70, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x71, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x78, 0x71, 0x01, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x90, 0x71, 0x01, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x3c, 0x00, 0x88, 0x58, + 0x01, 0x00, 0xa8, 0x71, 0x01, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x05, 0x0a, 0x01, 0x06, 0x0b, + 0x02, 0x07, 0x0c, 0x03, 0x08, 0x0d, 0x04, 0x09, + 0x00, 0x00, 0x03, 0x03, 0x01, 0x01, 0x00, 0x04, + 0x00, 0x04, 0x04, 0x06, 0x16, 0x1e, 0x1f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, + 0xff, 0xff, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, + 0xc4, 0x58, 0x01, 0x00, 0x18, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, + 0x61, 0x8b, 0x4a, 0x00, 0x61, 0x8f, 0x4a, 0x00, + 0x61, 0x8b, 0x4a, 0x00, 0x05, 0xe3, 0xc0, 0x00, + 0x05, 0xcb, 0xc0, 0x00, 0x05, 0xbb, 0xc0, 0x00, + 0x85, 0xba, 0xc0, 0x00, 0x85, 0xa2, 0xc0, 0x00, + 0x85, 0x92, 0xc0, 0x00, 0x85, 0x8a, 0xc0, 0x00, + 0x85, 0x7a, 0xc0, 0x00, 0x45, 0x89, 0xc0, 0x00, + 0x3c, 0x00, 0x00, 0x59, 0x01, 0x00, 0x45, 0x71, + 0xc0, 0x00, 0x45, 0x69, 0xc0, 0x00, 0x45, 0x61, + 0xc0, 0x00, 0x45, 0x59, 0xc0, 0x00, 0x45, 0x51, + 0xc0, 0x00, 0x45, 0x49, 0xc0, 0x00, 0x45, 0x41, + 0xc0, 0x00, 0x45, 0x39, 0xc0, 0x00, 0x45, 0x31, + 0xc0, 0x00, 0x45, 0x29, 0xc0, 0x00, 0x45, 0x21, + 0xc0, 0x00, 0x60, 0x2d, 0x06, 0x00, 0x60, 0x2d, + 0x06, 0x00, 0x60, 0x2d, 0x06, 0x00, 0x60, 0x2d, + 0x06, 0x00, 0x3c, 0x00, 0x3c, 0x59, 0x01, 0x00, + 0x60, 0x2d, 0x06, 0x00, 0x60, 0x28, 0x06, 0x00, + 0x50, 0x26, 0x06, 0x00, 0x50, 0x21, 0x06, 0x00, + 0x50, 0x1f, 0x06, 0x00, 0x50, 0x1c, 0x06, 0x00, + 0x50, 0x1a, 0x06, 0x00, 0x50, 0x18, 0x06, 0x00, + 0x50, 0x16, 0x06, 0x00, 0x50, 0x14, 0x06, 0x00, + 0x50, 0x12, 0x06, 0x00, 0x50, 0x10, 0x06, 0x00, + 0x50, 0x0e, 0x06, 0x00, 0x50, 0x0c, 0x06, 0x00, + 0x50, 0x0a, 0x06, 0x00, 0x3c, 0x00, 0x78, 0x59, + 0x01, 0x00, 0x2b, 0x0b, 0x06, 0x00, 0x1d, 0x75, + 0xc0, 0x00, 0x1d, 0x75, 0xc0, 0x00, 0x1d, 0x75, + 0xc0, 0x00, 0x1d, 0x75, 0xc0, 0x00, 0x1d, 0x75, + 0xc0, 0x00, 0x1d, 0x75, 0xc0, 0x00, 0x1d, 0x6d, + 0xc0, 0x00, 0xdd, 0x5b, 0xc0, 0x00, 0xdd, 0x4b, + 0xc0, 0x00, 0xdd, 0x43, 0xc0, 0x00, 0xdd, 0x3b, + 0xc0, 0x00, 0xdd, 0x33, 0xc0, 0x00, 0xdd, 0x2b, + 0xc0, 0x00, 0xdd, 0x23, 0xc0, 0x00, 0x3c, 0x00, + 0xb4, 0x59, 0x01, 0x00, 0xdd, 0x1b, 0xc0, 0x00, + 0xdd, 0x13, 0xc0, 0x00, 0xdd, 0x13, 0xc0, 0x00, + 0xdd, 0x13, 0xc0, 0x00, 0xdd, 0x13, 0xc0, 0x00, + 0xdd, 0x13, 0xc0, 0x00, 0x05, 0x05, 0x05, 0x04, + 0x04, 0x03, 0x03, 0x02, 0x02, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x05, 0x05, 0x05, 0x04, 0x04, 0x03, + 0x03, 0x02, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x88, 0x13, 0x00, 0x00, + 0x3c, 0x00, 0xf0, 0x59, 0x01, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x80, 0x00, 0x5b, 0x00, 0x40, 0x02, + 0xe0, 0xfd, 0xf2, 0x00, 0xb8, 0xfc, 0xa4, 0x01, + 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0f, 0x00, + 0x00, 0x00, 0x03, 0x0b, 0x9f, 0x5f, 0x07, 0x01, + 0x2a, 0x04, 0x21, 0x04, 0x17, 0x04, 0x0e, 0x04, + 0x04, 0x04, 0xfb, 0x03, 0xf1, 0x03, 0xe8, 0x03, + 0xc9, 0x03, 0xaa, 0x03, 0x8a, 0x03, 0x6b, 0x03, + 0x4c, 0x03, 0x3c, 0x00, 0x2c, 0x5a, 0x01, 0x00, + 0x2d, 0x03, 0x0e, 0x03, 0xee, 0x02, 0xec, 0x02, + 0x01, 0x03, 0x16, 0x03, 0x2b, 0x03, 0x40, 0x03, + 0x55, 0x03, 0x6a, 0x03, 0x7f, 0x03, 0x94, 0x03, + 0xa9, 0x03, 0xbe, 0x03, 0xd3, 0x03, 0xe8, 0x03, + 0xbe, 0x03, 0x94, 0x03, 0x6a, 0x03, 0x00, 0x02, + 0x04, 0x06, 0x07, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x00, 0x03, 0x3c, 0x00, 0x68, 0x5a, + 0x01, 0x00, 0x05, 0x08, 0x0b, 0x0e, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xa4, 0x5a, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xe0, 0x5a, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x1c, 0x5b, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x58, 0x5b, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x94, 0x5b, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xd0, 0x5b, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x0c, 0x5c, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x48, 0x5c, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x84, 0x5c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xc0, 0x5c, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xfc, 0x5c, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x38, 0x5d, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x74, 0x5d, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xb0, 0x5d, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xec, 0x5d, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x28, 0x5e, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x64, 0x5e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xa0, 0x5e, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xdc, 0x5e, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x18, 0x5f, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x54, 0x5f, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x90, 0x5f, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xcc, 0x5f, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x08, 0x60, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x44, 0x60, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x80, 0x60, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xbc, 0x60, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xf8, 0x60, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x34, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x70, 0x61, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xac, 0x61, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xe8, 0x61, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x24, 0x62, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x60, 0x62, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x9c, 0x62, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xd8, 0x62, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x14, 0x63, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x50, 0x63, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x8c, 0x63, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xc8, 0x63, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x40, 0x64, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x7c, 0x64, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xb8, 0x64, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xf4, 0x64, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x30, 0x65, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x6c, 0x65, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xa8, 0x65, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xe4, 0x65, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x20, 0x66, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x5c, 0x66, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x98, 0x66, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xd4, 0x66, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x10, 0x67, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x4c, 0x67, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x88, 0x67, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xc4, 0x67, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0x68, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x68, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x78, 0x68, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xb4, 0x68, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xf0, 0x68, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x2c, 0x69, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x68, 0x69, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xa4, 0x69, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xe0, 0x69, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x1c, 0x6a, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x58, 0x6a, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x94, 0x6a, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xd0, 0x6a, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x0c, 0x6b, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x48, 0x6b, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x84, 0x6b, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xc0, 0x6b, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xfc, 0x6b, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x38, 0x6c, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x74, 0x6c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xb0, 0x6c, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xec, 0x6c, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x28, 0x6d, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x64, 0x6d, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xa0, 0x6d, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xdc, 0x6d, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x18, 0x6e, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x54, 0x6e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x90, 0x6e, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xcc, 0x6e, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x08, 0x6f, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x44, 0x6f, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x80, 0x6f, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xbc, 0x6f, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xf8, 0x6f, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x34, 0x70, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x70, 0x70, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xac, 0x70, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xe8, 0x70, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x24, 0x71, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x60, 0x71, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x9c, 0x71, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xd8, 0x71, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x14, 0x72, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x50, 0x72, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x8c, 0x72, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xc8, 0x72, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x40, 0x73, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x7c, 0x73, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xb8, 0x73, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xf4, 0x73, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x30, 0x74, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x6c, 0x74, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xa8, 0x74, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xe4, 0x74, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x20, 0x75, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x5c, 0x75, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x98, 0x75, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xd4, 0x75, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x10, 0x76, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x4c, 0x76, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x88, 0x76, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xc4, 0x76, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0x77, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x77, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x78, 0x77, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xb4, 0x77, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xf0, 0x77, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x2c, 0x78, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x68, 0x78, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xa4, 0x78, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xe0, 0x78, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x1c, 0x79, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x58, 0x79, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x94, 0x79, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xd0, 0x79, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x0c, 0x7a, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x48, 0x7a, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x84, 0x7a, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xc0, 0x7a, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xfc, 0x7a, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x38, 0x7b, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x74, 0x7b, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xb0, 0x7b, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xec, 0x7b, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x28, 0x7c, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x64, 0x7c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xa0, 0x7c, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xdc, 0x7c, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x18, 0x7d, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x54, 0x7d, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x90, 0x7d, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xcc, 0x7d, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x08, 0x7e, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x44, 0x7e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x80, 0x7e, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xbc, 0x7e, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xf8, 0x7e, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x34, 0x7f, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x70, 0x7f, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xac, 0x7f, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xe8, 0x7f, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x70, 0xb5, 0x01, 0x25, 0x07, 0x4e, + 0xad, 0x03, 0x75, 0x61, 0x0a, 0x20, 0xfa, 0xf7, + 0x6c, 0xff, 0x30, 0x68, 0x80, 0x03, 0xc4, 0x0f, + 0xb5, 0x61, 0x0a, 0x20, 0xfa, 0xf7, 0x65, 0xff, + 0x20, 0x1c, 0x70, 0xbd, 0x00, 0x00, 0x3c, 0x00, + 0x24, 0x80, 0x01, 0x00, 0x10, 0x00, 0x07, 0x00, + 0x70, 0xb5, 0x01, 0x25, 0x6d, 0x04, 0x00, 0x28, + 0x10, 0x4c, 0x01, 0xd0, 0x65, 0x61, 0x00, 0xe0, + 0xa5, 0x61, 0x60, 0x68, 0x28, 0x43, 0x60, 0x60, + 0xa0, 0x68, 0x28, 0x43, 0xa0, 0x60, 0x0a, 0x20, + 0xfa, 0xf7, 0x4e, 0xff, 0x01, 0x26, 0xb6, 0x03, + 0x66, 0x61, 0x0a, 0x20, 0xfa, 0xf7, 0x48, 0xff, + 0xa6, 0x61, 0x01, 0x20, 0xfa, 0xf7, 0x44, 0xff, + 0x3c, 0x00, 0x60, 0x80, 0x01, 0x00, 0xa0, 0x68, + 0xa8, 0x43, 0xa0, 0x60, 0x60, 0x68, 0x28, 0x43, + 0x60, 0x60, 0x0a, 0x20, 0xfa, 0xf7, 0x3b, 0xff, + 0x70, 0xbd, 0x10, 0x00, 0x07, 0x00, 0x70, 0xb5, + 0x01, 0x25, 0x10, 0x4c, 0x6d, 0x04, 0x65, 0x61, + 0x60, 0x68, 0x28, 0x43, 0x60, 0x60, 0xa0, 0x68, + 0x28, 0x43, 0xa0, 0x60, 0xee, 0x08, 0xa6, 0x61, + 0x0a, 0x20, 0xfa, 0xf7, 0x28, 0xff, 0x66, 0x61, + 0x0a, 0x20, 0x3c, 0x00, 0x9c, 0x80, 0x01, 0x00, + 0xfa, 0xf7, 0x24, 0xff, 0xa5, 0x61, 0x0a, 0x20, + 0xfa, 0xf7, 0x20, 0xff, 0xa6, 0x61, 0x0a, 0x20, + 0xfa, 0xf7, 0x1c, 0xff, 0xa0, 0x68, 0xa8, 0x43, + 0xa0, 0x60, 0x60, 0x68, 0x28, 0x43, 0x60, 0x60, + 0x70, 0xbd, 0x00, 0x00, 0x10, 0x00, 0x07, 0x00, + 0x70, 0xb5, 0x01, 0x25, 0x0e, 0x4c, 0x6d, 0x04, + 0xa5, 0x61, 0x60, 0x68, 0x28, 0x43, 0x60, 0x60, + 0xa0, 0x68, 0x28, 0x43, 0x3c, 0x00, 0xd8, 0x80, + 0x01, 0x00, 0xa0, 0x60, 0xee, 0x08, 0x66, 0x61, + 0x0a, 0x20, 0xfa, 0xf7, 0x02, 0xff, 0x65, 0x61, + 0x0a, 0x20, 0xfa, 0xf7, 0xfe, 0xfe, 0xa6, 0x61, + 0x0a, 0x20, 0xfa, 0xf7, 0xfa, 0xfe, 0xa0, 0x68, + 0xa8, 0x43, 0xa0, 0x60, 0x60, 0x68, 0x28, 0x43, + 0x60, 0x60, 0x70, 0xbd, 0x00, 0x00, 0x10, 0x00, + 0x07, 0x00, 0x70, 0xb5, 0x05, 0x1c, 0x00, 0x24, + 0x80, 0x26, 0x28, 0x1c, 0x30, 0x40, 0x3c, 0x00, + 0x14, 0x81, 0x01, 0x00, 0xff, 0xf7, 0x88, 0xff, + 0x68, 0x06, 0x05, 0x0e, 0x01, 0x34, 0x08, 0x2c, + 0xf6, 0xdb, 0xff, 0xf7, 0x6d, 0xff, 0x70, 0xbd, + 0x80, 0xb5, 0x02, 0x1c, 0x0b, 0x21, 0x80, 0x20, + 0xfb, 0xf7, 0x3e, 0xfb, 0x80, 0xbd, 0x00, 0x00, + 0xf8, 0xb5, 0x12, 0x48, 0x00, 0x25, 0x07, 0x1c, + 0xff, 0x37, 0x06, 0x1d, 0x01, 0x37, 0x28, 0x1c, + 0xf9, 0xf7, 0xea, 0xfd, 0x04, 0x1c, 0x17, 0xd0, + 0x3c, 0x00, 0x50, 0x81, 0x01, 0x00, 0x20, 0x69, + 0x00, 0x28, 0x04, 0xd0, 0xe0, 0x6a, 0x00, 0x28, + 0x03, 0xd0, 0x00, 0x20, 0xe0, 0x62, 0x25, 0x1c, + 0xf0, 0xe7, 0x7b, 0x68, 0x00, 0x2b, 0x05, 0xd0, + 0x32, 0x1c, 0x21, 0x1c, 0x44, 0x31, 0x01, 0x20, + 0xe8, 0xf7, 0x34, 0xf9, 0x20, 0x1c, 0x44, 0x30, + 0xf9, 0xf7, 0x37, 0xfe, 0xe2, 0xe7, 0xf8, 0xbd, + 0x00, 0x00, 0x20, 0xf7, 0x01, 0x00, 0x11, 0x48, + 0x70, 0xb5, 0x3c, 0x00, 0x8c, 0x81, 0x01, 0x00, + 0x00, 0x68, 0xff, 0x28, 0x1d, 0xd1, 0xff, 0x20, + 0x32, 0x30, 0xfa, 0xf7, 0xa7, 0xfe, 0x0e, 0x4d, + 0x6c, 0x68, 0x0e, 0x48, 0xfa, 0xf7, 0xa2, 0xfe, + 0x68, 0x68, 0x24, 0x1a, 0x01, 0x20, 0x00, 0xf0, + 0x95, 0xfd, 0x6e, 0x68, 0x09, 0x48, 0xfa, 0xf7, + 0x99, 0xfe, 0x68, 0x68, 0x21, 0x1c, 0x0a, 0x39, + 0x30, 0x1a, 0x88, 0x42, 0x02, 0xd3, 0x0a, 0x34, + 0xa0, 0x42, 0x02, 0xd9, 0x3c, 0x00, 0xc8, 0x81, + 0x01, 0x00, 0x00, 0x20, 0x00, 0xf0, 0x85, 0xfd, + 0x70, 0xbd, 0xf4, 0x74, 0x01, 0x00, 0x00, 0x03, + 0x07, 0x00, 0x93, 0x03, 0x00, 0x00, 0x70, 0xb5, + 0x00, 0xf0, 0x4d, 0xf8, 0x01, 0x20, 0xed, 0xf7, + 0x34, 0xf9, 0x11, 0x4d, 0x18, 0x21, 0x68, 0x60, + 0x00, 0x20, 0xe9, 0xf7, 0xf2, 0xf9, 0x28, 0x60, + 0x04, 0x68, 0x80, 0x20, 0x20, 0x80, 0x00, 0x26, + 0x06, 0x22, 0xff, 0x21, 0x20, 0x1d, 0x3c, 0x00, + 0x04, 0x82, 0x01, 0x00, 0x66, 0x80, 0xe8, 0xf7, + 0x0b, 0xfa, 0x20, 0x1c, 0x0a, 0x30, 0x09, 0x49, + 0xf2, 0xf7, 0x2e, 0xfd, 0x20, 0x1c, 0x10, 0x30, + 0x07, 0x49, 0xf2, 0xf7, 0x29, 0xfd, 0xe6, 0x82, + 0x03, 0xcd, 0xe9, 0xf7, 0xf9, 0xf8, 0x02, 0x49, + 0x01, 0x20, 0x14, 0x39, 0x88, 0x60, 0x70, 0xbd, + 0x90, 0xd9, 0x01, 0x00, 0x12, 0x61, 0x01, 0x00, + 0x24, 0xf7, 0x01, 0x00, 0x70, 0x47, 0x00, 0x00, + 0x3c, 0x00, 0x40, 0x82, 0x01, 0x00, 0x10, 0xb5, + 0x06, 0x4c, 0x00, 0x22, 0x02, 0x20, 0xe1, 0x68, + 0xf0, 0xf7, 0x11, 0xfb, 0x60, 0x78, 0x02, 0x28, + 0x01, 0xd1, 0x00, 0xf0, 0x1a, 0xf9, 0x10, 0xbd, + 0x00, 0x00, 0x40, 0xd9, 0x01, 0x00, 0x80, 0xb5, + 0xa1, 0x20, 0xff, 0xf7, 0x50, 0xff, 0x80, 0xbd, + 0x00, 0x00, 0x40, 0x00, 0x0e, 0x21, 0x08, 0x40, + 0x80, 0xb5, 0xa0, 0x30, 0xff, 0xf7, 0x47, 0xff, + 0x80, 0xbd, 0x3c, 0x00, 0x7c, 0x82, 0x01, 0x00, + 0x10, 0xb5, 0x05, 0x4c, 0x20, 0x68, 0x00, 0x28, + 0x04, 0xd0, 0xe9, 0xf7, 0x87, 0xf9, 0x00, 0x20, + 0x20, 0x60, 0x60, 0x60, 0x10, 0xbd, 0x00, 0x00, + 0x90, 0xd9, 0x01, 0x00, 0x10, 0xb5, 0x07, 0x4c, + 0x01, 0x21, 0x07, 0x4a, 0x21, 0x61, 0x02, 0x20, + 0x10, 0x70, 0x61, 0x61, 0x00, 0xf0, 0xd6, 0xfc, + 0x00, 0xf0, 0xc8, 0xfb, 0x20, 0x1c, 0xed, 0xf7, + 0x9f, 0xfa, 0x10, 0xbd, 0x3c, 0x00, 0xb8, 0x82, + 0x01, 0x00, 0x20, 0xf7, 0x01, 0x00, 0x7c, 0xd9, + 0x01, 0x00, 0x70, 0xb5, 0x02, 0x1c, 0x08, 0x1c, + 0x02, 0x25, 0x00, 0x2a, 0x13, 0x4e, 0x14, 0xd0, + 0x00, 0xf0, 0x11, 0xfc, 0x30, 0x78, 0x01, 0x21, + 0x08, 0x43, 0x30, 0x70, 0x30, 0x78, 0x28, 0x43, + 0x30, 0x70, 0x00, 0x20, 0x7d, 0x21, 0x49, 0x01, + 0xb2, 0x79, 0x92, 0x07, 0x00, 0xd5, 0x01, 0x34, + 0x01, 0x30, 0x88, 0x42, 0xf8, 0xdb, 0x3c, 0x00, + 0xf4, 0x82, 0x01, 0x00, 0x20, 0x1c, 0x70, 0xbd, + 0x30, 0x78, 0xa8, 0x43, 0x30, 0x70, 0x30, 0x78, + 0x40, 0x08, 0x40, 0x00, 0x30, 0x70, 0x05, 0x49, + 0x48, 0x68, 0x01, 0x22, 0x12, 0x04, 0x90, 0x43, + 0x48, 0x60, 0x01, 0x20, 0x70, 0xbd, 0x00, 0x00, + 0x88, 0x00, 0x07, 0x00, 0x6c, 0x00, 0x07, 0x00, + 0xff, 0xb5, 0x09, 0xae, 0x00, 0x20, 0x60, 0xce, + 0x28, 0x60, 0x00, 0x23, 0x9c, 0x46, 0x30, 0x60, + 0x3c, 0x00, 0x30, 0x83, 0x01, 0x00, 0x69, 0x46, + 0x01, 0xaa, 0x17, 0xe0, 0xdb, 0x07, 0x0e, 0xd5, + 0x12, 0x4b, 0x1c, 0x56, 0x63, 0x1c, 0x0a, 0xd0, + 0x01, 0x27, 0x2b, 0x68, 0xa7, 0x40, 0x3b, 0x43, + 0x2b, 0x60, 0x13, 0x68, 0xdb, 0x07, 0x02, 0xd5, + 0x33, 0x68, 0x3b, 0x43, 0x33, 0x60, 0x0b, 0x68, + 0x5b, 0x08, 0x0b, 0x60, 0x13, 0x68, 0x5b, 0x08, + 0x13, 0x60, 0x01, 0x30, 0x0b, 0x68, 0x00, 0x2b, + 0x01, 0xd0, 0x3c, 0x00, 0x6c, 0x83, 0x01, 0x00, + 0x22, 0x28, 0xe2, 0xd3, 0x63, 0x46, 0x01, 0x33, + 0x20, 0x20, 0x02, 0x2b, 0x9c, 0x46, 0x02, 0xa9, + 0x03, 0xaa, 0xf2, 0xdb, 0xff, 0xbd, 0x00, 0x00, + 0xb4, 0x8d, 0x01, 0x00, 0xb0, 0xb5, 0x04, 0x1c, + 0x0d, 0x1c, 0x1e, 0x21, 0x00, 0x22, 0x03, 0x20, + 0x05, 0x4b, 0xf9, 0xf7, 0xb3, 0xf8, 0x21, 0x1c, + 0x03, 0x20, 0xf9, 0xf7, 0xf5, 0xf8, 0x29, 0x1c, + 0x03, 0x20, 0xf9, 0xf7, 0x3c, 0x00, 0xa8, 0x83, + 0x01, 0x00, 0xf1, 0xf8, 0xb0, 0xbd, 0x80, 0x38, + 0x01, 0x00, 0xb0, 0xb5, 0x1c, 0x4c, 0x1c, 0x4d, + 0x21, 0x78, 0x02, 0x29, 0x09, 0xd0, 0x03, 0x29, + 0x19, 0xd0, 0x04, 0x29, 0x1f, 0xd0, 0x05, 0x29, + 0x23, 0xd1, 0x00, 0x20, 0x00, 0xf0, 0x17, 0xfb, + 0x23, 0xe0, 0x68, 0x61, 0x14, 0x48, 0x1c, 0x30, + 0xc1, 0x68, 0x02, 0x69, 0x89, 0x18, 0xc1, 0x60, + 0x00, 0xf0, 0x2f, 0xfb, 0xe0, 0x68, 0x3c, 0x00, + 0xe4, 0x83, 0x01, 0x00, 0x01, 0x38, 0xe0, 0x60, + 0x16, 0xd1, 0x32, 0x20, 0xe0, 0x60, 0xff, 0xf7, + 0xa3, 0xfe, 0x11, 0xe0, 0x00, 0x20, 0x00, 0xf0, + 0x01, 0xfb, 0x00, 0xf0, 0x2d, 0xfc, 0x01, 0x20, + 0x20, 0x70, 0x09, 0xe0, 0x00, 0x20, 0x00, 0xf0, + 0xf9, 0xfa, 0xff, 0xf7, 0x45, 0xff, 0x03, 0xe0, + 0x05, 0x21, 0x0b, 0x20, 0xe8, 0xf7, 0x46, 0xff, + 0x68, 0x69, 0x61, 0x68, 0xe7, 0xf7, 0xdd, 0xff, + 0x3c, 0x00, 0x20, 0x84, 0x01, 0x00, 0xb0, 0xbd, + 0x00, 0x00, 0x7c, 0xd9, 0x01, 0x00, 0x20, 0xf7, + 0x01, 0x00, 0xf7, 0xb5, 0x04, 0x1c, 0x17, 0x1c, + 0xff, 0xf7, 0x21, 0xfe, 0x20, 0x0a, 0xff, 0xf7, + 0x18, 0xff, 0x20, 0x06, 0x00, 0x0e, 0xff, 0xf7, + 0x62, 0xfe, 0xff, 0xf7, 0x18, 0xfe, 0xa1, 0x20, + 0xff, 0xf7, 0x5d, 0xfe, 0x00, 0x25, 0x16, 0xe0, + 0x00, 0x20, 0x00, 0x24, 0x40, 0x06, 0x06, 0x0e, + 0xff, 0xf7, 0x3c, 0x00, 0x5c, 0x84, 0x01, 0x00, + 0xd1, 0xfd, 0x00, 0x06, 0x00, 0x0e, 0x30, 0x43, + 0x01, 0x34, 0x08, 0x2c, 0xf5, 0xdb, 0x29, 0x1c, + 0x01, 0x9a, 0x01, 0x35, 0xbd, 0x42, 0x50, 0x54, + 0x01, 0xda, 0x00, 0x20, 0x00, 0xe0, 0x01, 0x20, + 0xff, 0xf7, 0xd4, 0xfd, 0xbd, 0x42, 0xe6, 0xdb, + 0xff, 0xf7, 0x1e, 0xfe, 0xfe, 0xbd, 0x00, 0x00, + 0x80, 0xb5, 0xff, 0xf7, 0x19, 0xfe, 0x09, 0x21, + 0x89, 0x03, 0x00, 0x22, 0x3c, 0x00, 0x98, 0x84, + 0x01, 0x00, 0x02, 0x20, 0xf0, 0xf7, 0xe9, 0xf9, + 0x80, 0xbd, 0x09, 0x21, 0x89, 0x03, 0x80, 0xb5, + 0x00, 0x22, 0x02, 0x20, 0xf0, 0xf7, 0xc9, 0xf9, + 0x01, 0x21, 0x09, 0x48, 0x89, 0x03, 0x81, 0x61, + 0x42, 0x68, 0x0a, 0x43, 0x42, 0x60, 0x82, 0x68, + 0x11, 0x43, 0x81, 0x60, 0x01, 0x21, 0x49, 0x04, + 0x81, 0x61, 0x82, 0x68, 0x8a, 0x43, 0x82, 0x60, + 0x42, 0x68, 0x11, 0x43, 0x41, 0x60, 0x3c, 0x00, + 0xd4, 0x84, 0x01, 0x00, 0x80, 0xbd, 0x00, 0x00, + 0x10, 0x00, 0x07, 0x00, 0xf0, 0xb5, 0x04, 0x1c, + 0xc0, 0x68, 0x7b, 0x4e, 0x05, 0x68, 0x30, 0x78, + 0x85, 0xb0, 0x01, 0x28, 0x01, 0xd0, 0x02, 0x28, + 0x72, 0xd1, 0x00, 0x21, 0x20, 0x69, 0xf2, 0xf7, + 0x41, 0xf9, 0x76, 0x49, 0xf2, 0xf7, 0x24, 0xfc, + 0x00, 0x28, 0x69, 0xd0, 0x20, 0x1c, 0x20, 0x30, + 0x41, 0x7a, 0x08, 0x29, 0x02, 0xd1, 0x72, 0x4a, + 0x3c, 0x00, 0x10, 0x85, 0x01, 0x00, 0x00, 0x21, + 0x51, 0x61, 0x00, 0x7a, 0x22, 0x6a, 0x18, 0x21, + 0xf2, 0xf7, 0xc9, 0xfb, 0xe1, 0x6a, 0x37, 0x1c, + 0x40, 0x18, 0x6c, 0x49, 0x02, 0x90, 0x30, 0x78, + 0x0e, 0x1c, 0xff, 0x36, 0x0a, 0x1d, 0x01, 0x36, + 0x01, 0x28, 0x04, 0x92, 0x07, 0xd0, 0x65, 0x4a, + 0x02, 0x99, 0x1c, 0x32, 0x28, 0x1c, 0xed, 0xf7, + 0xe2, 0xfb, 0x00, 0x28, 0x6b, 0xd0, 0x32, 0x21, + 0x20, 0x69, 0x3c, 0x00, 0x4c, 0x85, 0x01, 0x00, + 0xf2, 0xf7, 0x16, 0xf9, 0x01, 0x90, 0x20, 0x69, + 0x01, 0x21, 0xf2, 0xf7, 0x11, 0xf9, 0x01, 0x1c, + 0x5e, 0x48, 0x01, 0x23, 0x01, 0x9a, 0xed, 0xf7, + 0x07, 0xfc, 0x00, 0x28, 0x04, 0xd1, 0x5b, 0x48, + 0xed, 0xf7, 0x92, 0xfa, 0x00, 0x21, 0xb9, 0x60, + 0x56, 0x48, 0x1c, 0x30, 0x81, 0x68, 0xea, 0xf7, + 0x19, 0xfc, 0x20, 0x1c, 0x14, 0x30, 0x03, 0x90, + 0x04, 0x99, 0xf2, 0xf7, 0x3c, 0x00, 0x88, 0x85, + 0x01, 0x00, 0xd5, 0xfb, 0x00, 0x28, 0x05, 0xd1, + 0x00, 0x22, 0xba, 0x60, 0x04, 0x98, 0x03, 0x99, + 0xf2, 0xf7, 0x6b, 0xfb, 0x4f, 0x49, 0x28, 0x89, + 0x09, 0x88, 0x88, 0x42, 0x03, 0xd0, 0x00, 0x22, + 0x4c, 0x49, 0xba, 0x60, 0x08, 0x80, 0x03, 0x21, + 0x20, 0x69, 0xf2, 0xf7, 0xe4, 0xf8, 0x00, 0x28, + 0x10, 0xd0, 0x46, 0x49, 0x82, 0x78, 0x20, 0x31, + 0x0b, 0x79, 0x94, 0x46, 0x9a, 0x42, 0x3c, 0x00, + 0xc4, 0x85, 0x01, 0x00, 0x09, 0xd0, 0x00, 0x22, + 0xba, 0x60, 0x62, 0x46, 0x0a, 0x71, 0x80, 0x78, + 0x01, 0x21, 0xf3, 0xf7, 0x05, 0xf9, 0x00, 0xe0, + 0x77, 0xe0, 0x06, 0x21, 0x20, 0x69, 0xf2, 0xf7, + 0xcd, 0xf8, 0x00, 0x28, 0x08, 0xd0, 0x81, 0x78, + 0x3a, 0x48, 0x40, 0x30, 0x82, 0x88, 0x91, 0x42, + 0x02, 0xd0, 0x00, 0x22, 0xba, 0x60, 0x81, 0x80, + 0x2a, 0x21, 0x20, 0x69, 0xf2, 0xf7, 0xbe, 0xf8, + 0x3c, 0x00, 0x00, 0x86, 0x01, 0x00, 0x00, 0x28, + 0x0d, 0xd0, 0x80, 0x78, 0xf1, 0x69, 0x33, 0x4a, + 0x81, 0x42, 0x08, 0xd0, 0x00, 0x21, 0xb9, 0x60, + 0xf0, 0x61, 0x10, 0x1c, 0xed, 0xf7, 0x09, 0xfb, + 0x2f, 0x48, 0xed, 0xf7, 0xfa, 0xfa, 0x38, 0x78, + 0x3b, 0x1c, 0x01, 0x28, 0x17, 0xd1, 0x02, 0x20, + 0x18, 0x70, 0x2a, 0x4f, 0x01, 0x23, 0x3b, 0x61, + 0x27, 0x4b, 0x03, 0xcd, 0x1c, 0x33, 0x08, 0x3d, + 0x02, 0x9a, 0x3c, 0x00, 0x3c, 0x86, 0x01, 0x00, + 0xed, 0xf7, 0xb0, 0xfa, 0x38, 0x1c, 0xed, 0xf7, + 0xd7, 0xf8, 0x32, 0x68, 0x00, 0x2a, 0x03, 0xd0, + 0x00, 0x21, 0x01, 0x20, 0xe7, 0xf7, 0xc4, 0xfe, + 0x00, 0xf0, 0xf4, 0xf9, 0x20, 0x1c, 0xf9, 0xf7, + 0xd5, 0xfb, 0x07, 0x1c, 0x11, 0xd1, 0x20, 0x1c, + 0xf9, 0xf7, 0x88, 0xfb, 0x07, 0x1c, 0x2e, 0xd0, + 0x01, 0x23, 0x3b, 0x61, 0x68, 0x89, 0x40, 0x21, + 0xc8, 0x53, 0x73, 0x68, 0x3c, 0x00, 0x78, 0x86, + 0x01, 0x00, 0x00, 0x2b, 0x04, 0xd0, 0x21, 0x1c, + 0x00, 0x20, 0x04, 0x9a, 0xe7, 0xf7, 0xac, 0xfe, + 0x01, 0x23, 0xfb, 0x62, 0x20, 0x69, 0x32, 0x21, + 0xf2, 0xf7, 0x75, 0xf8, 0x05, 0x1c, 0x20, 0x69, + 0x01, 0x21, 0xf2, 0xf7, 0x70, 0xf8, 0x0e, 0x4e, + 0x01, 0x1c, 0x2a, 0x1c, 0x30, 0x1c, 0xed, 0xf7, + 0xc0, 0xfb, 0x00, 0x28, 0x0e, 0xd1, 0x32, 0x21, + 0x20, 0x69, 0xf2, 0xf7, 0x64, 0xf8, 0x3c, 0x00, + 0xb4, 0x86, 0x01, 0x00, 0x05, 0x1c, 0x20, 0x69, + 0x01, 0x21, 0xf2, 0xf7, 0x5f, 0xf8, 0x01, 0x1c, + 0x3b, 0x1c, 0x2a, 0x1c, 0x30, 0x1c, 0xed, 0xf7, + 0xd7, 0xfa, 0x05, 0xb0, 0xf0, 0xbd, 0x00, 0x00, + 0x7c, 0xd9, 0x01, 0x00, 0x40, 0xf8, 0x01, 0x00, + 0x20, 0xf7, 0x01, 0x00, 0x02, 0x1c, 0x08, 0x1c, + 0x80, 0x2a, 0x80, 0xb5, 0x06, 0xd0, 0x81, 0x2a, + 0x03, 0xd0, 0x04, 0x21, 0x0b, 0x20, 0xe8, 0xf7, + 0x3c, 0x00, 0xf0, 0x86, 0x01, 0x00, 0xd9, 0xfd, + 0x80, 0xbd, 0xff, 0xf7, 0x5c, 0xfe, 0x80, 0xbd, + 0x00, 0x00, 0x03, 0x48, 0x81, 0x78, 0xff, 0x29, + 0x01, 0xd0, 0x00, 0x79, 0x70, 0x47, 0x00, 0x20, + 0x70, 0x47, 0x80, 0xf8, 0x01, 0x00, 0x30, 0xb5, + 0x89, 0xb0, 0x00, 0x93, 0x0e, 0x4d, 0x13, 0x1c, + 0x04, 0x1c, 0x2a, 0x1c, 0xec, 0xf7, 0x25, 0xfd, + 0x01, 0xa9, 0x06, 0xa8, 0xa2, 0x68, 0xec, 0xf7, + 0xce, 0xfe, 0x3c, 0x00, 0x2c, 0x87, 0x01, 0x00, + 0x01, 0xaa, 0x06, 0xa9, 0x28, 0x1c, 0x63, 0x6a, + 0xed, 0xf7, 0x44, 0xfa, 0x04, 0x1c, 0x01, 0x28, + 0x04, 0xd1, 0x28, 0x1c, 0xed, 0xf7, 0x2c, 0xf8, + 0x00, 0xf0, 0x4a, 0xf8, 0x20, 0x1c, 0x09, 0xb0, + 0x30, 0xbd, 0x00, 0x00, 0x20, 0xf7, 0x01, 0x00, + 0x80, 0xb5, 0xed, 0xf7, 0x2b, 0xf8, 0x00, 0xf0, + 0x7d, 0xf8, 0x02, 0x48, 0xed, 0xf7, 0x02, 0xfa, + 0x80, 0xbd, 0x00, 0x00, 0x3c, 0x00, 0x68, 0x87, + 0x01, 0x00, 0x20, 0xf7, 0x01, 0x00, 0x80, 0xb5, + 0x00, 0x28, 0x0b, 0xd1, 0x06, 0x48, 0xed, 0xf7, + 0xf8, 0xf9, 0x00, 0xf0, 0x6e, 0xf8, 0x01, 0x20, + 0xed, 0xf7, 0xeb, 0xfa, 0x03, 0x49, 0x03, 0x20, + 0xf9, 0xf7, 0x35, 0xfe, 0x80, 0xbd, 0x20, 0xf7, + 0x01, 0x00, 0x6d, 0x87, 0x01, 0x00, 0xb0, 0xb5, + 0x10, 0x4d, 0x04, 0x1c, 0x13, 0x1c, 0x2a, 0x1c, + 0x88, 0xb0, 0xec, 0xf7, 0x02, 0xfd, 0x3c, 0x00, + 0xa4, 0x87, 0x01, 0x00, 0x21, 0x1c, 0x0a, 0x31, + 0x06, 0x22, 0x28, 0x1d, 0xe7, 0xf7, 0xa4, 0xfe, + 0x69, 0x46, 0x05, 0xa8, 0x62, 0x69, 0xec, 0xf7, + 0x87, 0xfe, 0x28, 0x1c, 0xec, 0xf7, 0xee, 0xff, + 0x7f, 0x23, 0xdb, 0x43, 0x28, 0x1c, 0x6a, 0x46, + 0x05, 0xa9, 0xed, 0xf7, 0xf9, 0xf9, 0x00, 0xf0, + 0x1d, 0xf8, 0x08, 0xb0, 0xb0, 0xbd, 0x00, 0x00, + 0x20, 0xf7, 0x01, 0x00, 0x0a, 0x48, 0x80, 0xb5, + 0x3c, 0x00, 0xe0, 0x87, 0x01, 0x00, 0x01, 0x78, + 0x00, 0x29, 0x06, 0xd0, 0x02, 0x29, 0x01, 0xd0, + 0x05, 0x29, 0x07, 0xd1, 0x03, 0x21, 0x01, 0x70, + 0x80, 0xbd, 0x01, 0x21, 0x01, 0x70, 0x00, 0xf0, + 0x2e, 0xfa, 0x80, 0xbd, 0x03, 0x21, 0x0b, 0x20, + 0xe8, 0xf7, 0x4f, 0xfd, 0x80, 0xbd, 0x7c, 0xd9, + 0x01, 0x00, 0x09, 0x49, 0x80, 0xb5, 0x08, 0x78, + 0x00, 0x28, 0x06, 0xd0, 0x02, 0x28, 0x01, 0xd0, + 0x05, 0x28, 0x3c, 0x00, 0x1c, 0x88, 0x01, 0x00, + 0x05, 0xd1, 0x04, 0x20, 0x08, 0x70, 0x80, 0xbd, + 0xff, 0xf7, 0x38, 0xfd, 0x80, 0xbd, 0x02, 0x21, + 0x0b, 0x20, 0xe8, 0xf7, 0x39, 0xfd, 0x80, 0xbd, + 0x7c, 0xd9, 0x01, 0x00, 0x80, 0xb5, 0x02, 0x21, + 0x0b, 0x20, 0x04, 0x4a, 0xfa, 0xf7, 0x82, 0xff, + 0xf6, 0xf7, 0x86, 0xfd, 0x02, 0x49, 0x08, 0x61, + 0x80, 0xbd, 0x00, 0x00, 0xdd, 0x86, 0x01, 0x00, + 0x7c, 0xd9, 0x01, 0x00, 0x3c, 0x00, 0x58, 0x88, + 0x01, 0x00, 0x0c, 0x48, 0x80, 0xb5, 0x01, 0x78, + 0x06, 0x29, 0x0e, 0xd2, 0x02, 0xa3, 0x5b, 0x5c, + 0x5b, 0x00, 0x9f, 0x44, 0x00, 0x00, 0x06, 0x03, + 0x07, 0x07, 0x07, 0x06, 0x00, 0x20, 0x00, 0xf0, + 0xc2, 0xf8, 0x80, 0xbd, 0x05, 0x21, 0x01, 0x70, + 0x80, 0xbd, 0x04, 0x21, 0x0b, 0x20, 0xe8, 0xf7, + 0x0e, 0xfd, 0x80, 0xbd, 0x00, 0x00, 0x7c, 0xd9, + 0x01, 0x00, 0x70, 0x47, 0x00, 0x00, 0x3c, 0x00, + 0x94, 0x88, 0x01, 0x00, 0x10, 0xb5, 0x0d, 0x4b, + 0x04, 0x1c, 0x18, 0x1c, 0x10, 0x30, 0x00, 0x2c, + 0x08, 0xd0, 0xdb, 0x88, 0x5b, 0x04, 0x5b, 0x0c, + 0x0b, 0x80, 0x80, 0x7b, 0x48, 0x80, 0x04, 0x20, + 0x10, 0x80, 0x08, 0xe0, 0xda, 0x88, 0x01, 0x24, + 0xe4, 0x03, 0x22, 0x40, 0x0c, 0x88, 0x22, 0x43, + 0xda, 0x80, 0x49, 0x88, 0x81, 0x73, 0x01, 0x20, + 0x10, 0xbd, 0x00, 0x00, 0x30, 0x00, 0x07, 0x00, + 0x3c, 0x00, 0xd0, 0x88, 0x01, 0x00, 0x70, 0xb5, + 0x10, 0x4e, 0x02, 0x1c, 0x00, 0x23, 0xf0, 0x56, + 0x00, 0x2a, 0x02, 0xd0, 0x08, 0x70, 0x01, 0x24, + 0x15, 0xe0, 0x00, 0x23, 0xcd, 0x56, 0x85, 0x42, + 0x01, 0xd1, 0x01, 0x20, 0x70, 0xbd, 0x28, 0x1c, + 0x00, 0xf0, 0x5f, 0xf9, 0x04, 0x1c, 0x0a, 0xd0, + 0x07, 0x48, 0x35, 0x70, 0x00, 0x68, 0x00, 0x28, + 0x03, 0xd0, 0x00, 0x21, 0x0a, 0x20, 0xf9, 0xf7, + 0x28, 0xfd, 0x3c, 0x00, 0x0c, 0x89, 0x01, 0x00, + 0x00, 0xf0, 0x16, 0xfa, 0x20, 0x1c, 0x70, 0xbd, + 0xf4, 0x6b, 0x01, 0x00, 0x3c, 0xd9, 0x01, 0x00, + 0x03, 0x1c, 0x08, 0x1c, 0x00, 0x2b, 0x80, 0xb5, + 0x06, 0xd0, 0x04, 0x21, 0x11, 0x80, 0x04, 0x22, + 0x04, 0x49, 0xe7, 0xf7, 0xe3, 0xfd, 0x02, 0xe0, + 0x00, 0x68, 0x00, 0xf0, 0xcf, 0xf9, 0x01, 0x20, + 0x80, 0xbd, 0x00, 0x00, 0xf4, 0x74, 0x01, 0x00, + 0x10, 0xb5, 0xff, 0xf7, 0x3c, 0x00, 0x48, 0x89, + 0x01, 0x00, 0x97, 0xfb, 0xff, 0xf7, 0x89, 0xfc, + 0x04, 0x1c, 0xff, 0xf7, 0xb8, 0xfb, 0xff, 0xf7, + 0x84, 0xfc, 0x00, 0x2c, 0x02, 0xd1, 0x01, 0x28, + 0x00, 0xd1, 0x10, 0xbd, 0x00, 0x20, 0x10, 0xbd, + 0x00, 0x00, 0xf8, 0xb5, 0x20, 0x4f, 0x04, 0x1c, + 0x78, 0x78, 0x0e, 0x1c, 0x02, 0x28, 0x2e, 0xd0, + 0x1e, 0x4a, 0xf9, 0x68, 0x91, 0x61, 0x14, 0x23, + 0x1d, 0x49, 0x58, 0x43, 0x40, 0x18, 0x3c, 0x00, + 0x84, 0x89, 0x01, 0x00, 0x41, 0x7b, 0xb8, 0x78, + 0xf8, 0xf7, 0x14, 0xfe, 0x00, 0xf0, 0x8a, 0xf9, + 0x00, 0x25, 0x04, 0xe0, 0x00, 0x21, 0xb8, 0x78, + 0xf8, 0xf7, 0x0c, 0xfe, 0x01, 0x35, 0x78, 0x78, + 0x14, 0x23, 0x14, 0x49, 0x58, 0x43, 0x40, 0x18, + 0x80, 0x7a, 0xa8, 0x42, 0xf2, 0xdc, 0x00, 0x25, + 0x08, 0xe0, 0x00, 0x21, 0xb8, 0x78, 0xf8, 0xf7, + 0xfd, 0xfd, 0x0f, 0x48, 0x00, 0x68, 0x20, 0x70, + 0x3c, 0x00, 0xc0, 0x89, 0x01, 0x00, 0x01, 0x34, + 0x01, 0x35, 0xb5, 0x42, 0xf4, 0xdb, 0x09, 0x4a, + 0xf8, 0x68, 0x50, 0x61, 0x78, 0x78, 0x02, 0x28, + 0x06, 0xd1, 0xb8, 0x68, 0x32, 0x1c, 0x21, 0x1c, + 0x00, 0x04, 0x00, 0x0c, 0xff, 0xf7, 0x25, 0xfd, + 0xb8, 0x68, 0x80, 0x19, 0xb8, 0x60, 0xf8, 0xbd, + 0x00, 0x00, 0x40, 0xd9, 0x01, 0x00, 0x10, 0x00, + 0x07, 0x00, 0x64, 0x8d, 0x01, 0x00, 0x30, 0x20, + 0x07, 0x00, 0x3c, 0x00, 0xfc, 0x89, 0x01, 0x00, + 0x70, 0xb5, 0x06, 0x1c, 0x0c, 0x4d, 0x00, 0x24, + 0x2c, 0x70, 0xff, 0xf7, 0x39, 0xfc, 0x0a, 0x48, + 0x18, 0x21, 0x1c, 0x30, 0xac, 0x60, 0xe7, 0xf7, + 0x43, 0xfd, 0x08, 0x48, 0x44, 0x61, 0xf9, 0xf7, + 0x63, 0xf9, 0x00, 0x2e, 0x06, 0xd1, 0x06, 0x48, + 0x29, 0x69, 0xf6, 0xf7, 0xa7, 0xfc, 0x00, 0x20, + 0xec, 0xf7, 0xb0, 0xfe, 0x70, 0xbd, 0x00, 0x00, + 0x7c, 0xd9, 0x01, 0x00, 0x3c, 0x00, 0x38, 0x8a, + 0x01, 0x00, 0x20, 0xf7, 0x01, 0x00, 0x34, 0x63, + 0x01, 0x00, 0x30, 0xb5, 0x12, 0x4c, 0x85, 0xb0, + 0x20, 0x68, 0x00, 0x28, 0x1c, 0xd0, 0x0f, 0x48, + 0x14, 0x38, 0x80, 0x68, 0x00, 0x28, 0x01, 0xd1, + 0xff, 0xf7, 0xc1, 0xfb, 0x20, 0x68, 0x00, 0x23, + 0x00, 0x68, 0x01, 0xaa, 0x04, 0x30, 0x01, 0x21, + 0xec, 0xf7, 0xd1, 0xfd, 0x08, 0x49, 0x08, 0x4a, + 0x08, 0x31, 0x0c, 0x31, 0x00, 0x92, 0x3c, 0x00, + 0x74, 0x8a, 0x01, 0x00, 0x03, 0xc9, 0x00, 0xab, + 0x45, 0x18, 0x99, 0x7b, 0x01, 0x9a, 0x20, 0x68, + 0x2b, 0x1c, 0xf2, 0xf7, 0x2b, 0xfe, 0x05, 0xb0, + 0x30, 0xbd, 0x00, 0x00, 0x90, 0xd9, 0x01, 0x00, + 0x29, 0x81, 0x01, 0x00, 0x10, 0xb5, 0x13, 0x4c, + 0x14, 0x23, 0x60, 0x70, 0x58, 0x43, 0x12, 0x4b, + 0xc1, 0x18, 0x8a, 0x88, 0xe2, 0x80, 0x18, 0x58, + 0xe0, 0x60, 0x08, 0x7a, 0xa0, 0x70, 0xff, 0x28, + 0x3c, 0x00, 0xb0, 0x8a, 0x01, 0x00, 0x12, 0xd0, + 0x00, 0x22, 0x08, 0x21, 0x0d, 0x4b, 0xf8, 0xf7, + 0x22, 0xfd, 0x00, 0x22, 0x02, 0x20, 0xe1, 0x68, + 0xef, 0xf7, 0xbd, 0xfe, 0x0a, 0x49, 0xe0, 0x68, + 0x48, 0x61, 0x4a, 0x68, 0x02, 0x43, 0x4a, 0x60, + 0x8a, 0x68, 0x10, 0x43, 0x88, 0x60, 0x60, 0x78, + 0x02, 0x28, 0x01, 0xd1, 0xff, 0xf7, 0xdf, 0xfc, + 0x10, 0xbd, 0x40, 0xd9, 0x01, 0x00, 0x64, 0x8d, + 0x01, 0x00, 0x3c, 0x00, 0xec, 0x8a, 0x01, 0x00, + 0xb8, 0x0b, 0x00, 0x00, 0x10, 0x00, 0x07, 0x00, + 0xfe, 0x30, 0x00, 0x06, 0x00, 0x0e, 0x06, 0x21, + 0x15, 0x4b, 0x41, 0x43, 0x58, 0x5c, 0x82, 0x06, + 0x14, 0x48, 0x92, 0x0e, 0x42, 0x71, 0xc9, 0x18, + 0x4a, 0x78, 0xd2, 0x06, 0xd2, 0x0e, 0x02, 0x71, + 0x42, 0x78, 0x0c, 0x23, 0x1a, 0x43, 0x42, 0x70, + 0x42, 0x78, 0x8b, 0x78, 0x92, 0x08, 0x92, 0x00, + 0x9b, 0x07, 0x9b, 0x0f, 0x3c, 0x00, 0x28, 0x8b, + 0x01, 0x00, 0x1a, 0x43, 0x42, 0x70, 0x02, 0x78, + 0xc0, 0x23, 0x9a, 0x43, 0x40, 0x32, 0x02, 0x70, + 0x02, 0x78, 0x38, 0x23, 0x1a, 0x43, 0x02, 0x70, + 0x02, 0x78, 0xc9, 0x78, 0x04, 0x23, 0x9a, 0x43, + 0x89, 0x00, 0x19, 0x40, 0x11, 0x43, 0x01, 0x70, + 0x01, 0x20, 0x70, 0x47, 0x00, 0x00, 0xd8, 0x8d, + 0x01, 0x00, 0x88, 0x00, 0x07, 0x00, 0x8f, 0xb5, + 0x00, 0x20, 0x02, 0x90, 0x03, 0x90, 0x3c, 0x00, + 0x64, 0x8b, 0x01, 0x00, 0x07, 0x48, 0x02, 0xaa, + 0x03, 0xa9, 0x00, 0x91, 0x01, 0x92, 0x43, 0x89, + 0x02, 0x89, 0x03, 0xc8, 0xff, 0xf7, 0xd4, 0xfb, + 0x03, 0x98, 0x02, 0x99, 0xff, 0xf7, 0x04, 0xfc, + 0x8f, 0xbd, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, + 0x08, 0x49, 0x4a, 0x78, 0x00, 0x2a, 0x03, 0xd1, + 0x88, 0x80, 0x00, 0x20, 0x88, 0x60, 0x70, 0x47, + 0x14, 0x23, 0x5a, 0x43, 0x04, 0x4b, 0xd2, 0x18, + 0x3c, 0x00, 0xa0, 0x8b, 0x01, 0x00, 0xd2, 0x88, + 0x42, 0x43, 0xc8, 0x88, 0x42, 0x43, 0x8a, 0x60, + 0x70, 0x47, 0x40, 0xd9, 0x01, 0x00, 0x64, 0x8d, + 0x01, 0x00, 0xf8, 0xb5, 0x25, 0x4e, 0x04, 0x1c, + 0x30, 0x7a, 0x40, 0x08, 0x40, 0x00, 0x30, 0x72, + 0xb0, 0x7a, 0x00, 0x20, 0xb0, 0x72, 0x01, 0x27, + 0x01, 0x2c, 0x20, 0x4d, 0x01, 0xd0, 0xfc, 0x42, + 0x13, 0xd1, 0x30, 0x7b, 0x38, 0x43, 0x30, 0x73, + 0x00, 0x22, 0x3c, 0x00, 0xdc, 0x8b, 0x01, 0x00, + 0x21, 0x1c, 0x00, 0x20, 0xff, 0xf7, 0x6e, 0xfb, + 0x63, 0x1c, 0x01, 0xd1, 0x3f, 0x21, 0xe9, 0x73, + 0xb1, 0x7a, 0xa0, 0x22, 0x11, 0x43, 0xb1, 0x72, + 0x31, 0x7a, 0x39, 0x43, 0x31, 0x72, 0xf8, 0xbd, + 0x30, 0x7b, 0x40, 0x08, 0x40, 0x00, 0x30, 0x73, + 0x01, 0x22, 0x21, 0x1c, 0x01, 0x20, 0xff, 0xf7, + 0x59, 0xfb, 0x01, 0x20, 0x00, 0x21, 0xe9, 0x73, + 0xb1, 0x7a, 0x02, 0x22, 0x3c, 0x00, 0x18, 0x8c, + 0x01, 0x00, 0x11, 0x43, 0xb1, 0x72, 0xb1, 0x7a, + 0x04, 0x22, 0x11, 0x43, 0xb1, 0x72, 0xb1, 0x7a, + 0x30, 0x22, 0x11, 0x43, 0xb1, 0x72, 0x31, 0x7a, + 0x39, 0x43, 0x31, 0x72, 0x08, 0x49, 0x4a, 0x68, + 0x80, 0x23, 0x9a, 0x43, 0x4a, 0x60, 0x0a, 0x68, + 0x1a, 0x43, 0x0a, 0x60, 0x31, 0x7b, 0x39, 0x43, + 0x31, 0x73, 0xd7, 0xe7, 0x00, 0x00, 0x88, 0x00, + 0x07, 0x00, 0x40, 0x00, 0x07, 0x00, 0x3c, 0x00, + 0x54, 0x8c, 0x01, 0x00, 0x6c, 0x00, 0x07, 0x00, + 0xb0, 0xb5, 0x0e, 0x4d, 0x0e, 0x48, 0x29, 0x69, + 0xf6, 0xf7, 0x9e, 0xfb, 0x0d, 0x48, 0xec, 0xf7, + 0x93, 0xfd, 0x0d, 0x48, 0x09, 0x4c, 0x00, 0x88, + 0x1c, 0x34, 0xa0, 0x82, 0xf1, 0xf7, 0x5a, 0xff, + 0x20, 0x61, 0xfa, 0xf7, 0x97, 0xf8, 0x02, 0x1c, + 0x23, 0x1c, 0x00, 0x21, 0x00, 0x20, 0xec, 0xf7, + 0x8b, 0xff, 0x32, 0x20, 0xe8, 0x60, 0xff, 0xf7, + 0x3c, 0x00, 0x90, 0x8c, 0x01, 0x00, 0xa5, 0xfa, + 0xb0, 0xbd, 0x7c, 0xd9, 0x01, 0x00, 0x34, 0x63, + 0x01, 0x00, 0xdd, 0x84, 0x01, 0x00, 0x20, 0xf7, + 0x01, 0x00, 0xb0, 0xb5, 0x0a, 0x4d, 0x68, 0x78, + 0x00, 0x28, 0x0e, 0xd0, 0x14, 0x23, 0x08, 0x49, + 0x58, 0x43, 0x40, 0x18, 0x44, 0x7a, 0x06, 0xe0, + 0xa8, 0x68, 0xe0, 0x40, 0x01, 0x06, 0x09, 0x0e, + 0xa8, 0x78, 0xf8, 0xf7, 0x76, 0xfc, 0x08, 0x3c, + 0xf6, 0xd5, 0x3c, 0x00, 0xcc, 0x8c, 0x01, 0x00, + 0xb0, 0xbd, 0x00, 0x00, 0x40, 0xd9, 0x01, 0x00, + 0x64, 0x8d, 0x01, 0x00, 0x01, 0x1c, 0x14, 0x48, + 0xb0, 0xb5, 0x01, 0x60, 0x13, 0x48, 0x02, 0x7f, + 0x02, 0x23, 0x9a, 0x43, 0x02, 0x77, 0x02, 0x7f, + 0x01, 0x24, 0x22, 0x43, 0x02, 0x77, 0x10, 0x4d, + 0x00, 0x29, 0x0c, 0xd0, 0x01, 0x22, 0x00, 0x21, + 0x03, 0x20, 0xef, 0xf7, 0x9f, 0xfd, 0x0d, 0x49, + 0x48, 0x7c, 0xa0, 0x43, 0x3c, 0x00, 0x08, 0x8d, + 0x01, 0x00, 0x48, 0x74, 0x68, 0x7a, 0x20, 0x43, + 0x68, 0x72, 0xb0, 0xbd, 0x01, 0x7f, 0x21, 0x43, + 0x01, 0x77, 0x68, 0x7a, 0x40, 0x08, 0x40, 0x00, + 0x68, 0x72, 0x01, 0x22, 0x00, 0x21, 0x03, 0x20, + 0xef, 0xf7, 0xb1, 0xfd, 0xb0, 0xbd, 0xf4, 0x74, + 0x01, 0x00, 0x30, 0x00, 0x07, 0x00, 0x88, 0x00, + 0x07, 0x00, 0x10, 0x00, 0x07, 0x00, 0x10, 0xb5, + 0x07, 0x4c, 0x21, 0x1c, 0x00, 0x20, 0x3c, 0x00, + 0x44, 0x8d, 0x01, 0x00, 0xf9, 0xf7, 0x56, 0xfb, + 0x05, 0x48, 0x00, 0x23, 0xc0, 0x56, 0x01, 0x28, + 0x03, 0xdd, 0x21, 0x1c, 0x00, 0x20, 0xf9, 0xf7, + 0x19, 0xfb, 0x10, 0xbd, 0x65, 0x1a, 0x00, 0x00, + 0xf4, 0x6b, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x08, 0x01, 0x01, 0x00, 0x02, 0x18, 0x04, 0xff, + 0x82, 0xe8, 0xd7, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, + 0x3c, 0x00, 0x80, 0x8d, 0x01, 0x00, 0x00, 0x18, + 0x00, 0x06, 0x02, 0x03, 0x05, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, + 0x01, 0x00, 0xff, 0x10, 0x00, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x20, 0x00, 0x01, 0x00, 0x02, 0x10, + 0x00, 0x06, 0x02, 0x03, 0x05, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x04, 0x05, 0x06, 0x07, 0x08, 0x0c, + 0x0d, 0x0e, 0x3c, 0x00, 0xbc, 0x8d, 0x01, 0x00, + 0xff, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1b, + 0x1c, 0x1d, 0xff, 0x1a, 0x11, 0x13, 0x12, 0x0f, + 0x10, 0xff, 0x02, 0x00, 0xff, 0x01, 0x03, 0x09, + 0x0a, 0x0b, 0x00, 0x00, 0x30, 0x0d, 0x02, 0x00, + 0x00, 0x00, 0x28, 0x0e, 0x03, 0x00, 0x00, 0x00, + 0x1e, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x30, 0x0d, + 0x02, 0x01, 0x00, 0x00, 0x1e, 0x0c, 0x00, 0x01, + 0x00, 0x00, 0x23, 0x0d, 0x3c, 0x00, 0xf8, 0x8d, + 0x01, 0x00, 0x02, 0x01, 0x00, 0x00, 0x1d, 0x0d, + 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0xff, 0xfe, + 0xfb, 0x6d, 0x00, 0x00, 0x80, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x34, 0x8e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x70, 0x8e, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xac, 0x8e, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xe8, 0x8e, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x24, 0x8f, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x60, 0x8f, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x9c, 0x8f, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xd8, 0x8f, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x14, 0x90, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x50, 0x90, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x8c, 0x90, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xc8, 0x90, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x04, 0x91, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x40, 0x91, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x7c, 0x91, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xb8, 0x91, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xf4, 0x91, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x30, 0x92, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x6c, 0x92, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xa8, 0x92, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xe4, 0x92, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x20, 0x93, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x5c, 0x93, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x98, 0x93, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xd4, 0x93, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x10, 0x94, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x4c, 0x94, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x88, 0x94, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xc4, 0x94, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x95, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x78, 0x95, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xb4, 0x95, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xf0, 0x95, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x2c, 0x96, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x68, 0x96, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xa4, 0x96, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xe0, 0x96, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x1c, 0x97, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x58, 0x97, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x94, 0x97, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xd0, 0x97, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x0c, 0x98, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x48, 0x98, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x84, 0x98, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xc0, 0x98, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xfc, 0x98, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x38, 0x99, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x74, 0x99, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xb0, 0x99, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xec, 0x99, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x28, 0x9a, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x64, 0x9a, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xa0, 0x9a, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xdc, 0x9a, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x18, 0x9b, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x54, 0x9b, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x90, 0x9b, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xcc, 0x9b, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x08, 0x9c, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x44, 0x9c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x80, 0x9c, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xbc, 0x9c, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xf8, 0x9c, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x34, 0x9d, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x70, 0x9d, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xac, 0x9d, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xe8, 0x9d, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x24, 0x9e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x60, 0x9e, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x9c, 0x9e, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xd8, 0x9e, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x14, 0x9f, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x50, 0x9f, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x8c, 0x9f, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xc8, 0x9f, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x04, 0xa0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x40, 0xa0, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x7c, 0xa0, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xb8, 0xa0, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xf4, 0xa0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x30, 0xa1, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x6c, 0xa1, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xa8, 0xa1, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xe4, 0xa1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x20, 0xa2, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x5c, 0xa2, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x98, 0xa2, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xd4, 0xa2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x10, 0xa3, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x4c, 0xa3, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x88, 0xa3, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xc4, 0xa3, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0xa4, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x3c, 0xa4, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x78, 0xa4, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xb4, 0xa4, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xf0, 0xa4, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x2c, 0xa5, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x68, 0xa5, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xa4, 0xa5, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xe0, 0xa5, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x1c, 0xa6, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x58, 0xa6, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x94, 0xa6, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xd0, 0xa6, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x0c, 0xa7, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x48, 0xa7, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x84, 0xa7, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xc0, 0xa7, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xfc, 0xa7, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x38, 0xa8, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x74, 0xa8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xb0, 0xa8, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xec, 0xa8, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x28, 0xa9, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x64, 0xa9, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xa0, 0xa9, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xdc, 0xa9, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x18, 0xaa, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x54, 0xaa, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x90, 0xaa, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xcc, 0xaa, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x08, 0xab, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x44, 0xab, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x80, 0xab, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xbc, 0xab, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xf8, 0xab, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x34, 0xac, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x70, 0xac, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xac, 0xac, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xe8, 0xac, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x24, 0xad, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x60, 0xad, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x9c, 0xad, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xd8, 0xad, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x14, 0xae, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x50, 0xae, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x8c, 0xae, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xc8, 0xae, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x04, 0xaf, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x40, 0xaf, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x7c, 0xaf, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xb8, 0xaf, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xf4, 0xaf, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x30, 0xb0, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x6c, 0xb0, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xa8, 0xb0, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xe4, 0xb0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x20, 0xb1, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x5c, 0xb1, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x98, 0xb1, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xd4, 0xb1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x10, 0xb2, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x4c, 0xb2, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x88, 0xb2, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xc4, 0xb2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0xb3, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x3c, 0xb3, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x78, 0xb3, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xb4, 0xb3, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xf0, 0xb3, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x2c, 0xb4, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x68, 0xb4, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xa4, 0xb4, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xe0, 0xb4, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x1c, 0xb5, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x58, 0xb5, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x94, 0xb5, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xd0, 0xb5, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x0c, 0xb6, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x48, 0xb6, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x84, 0xb6, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xc0, 0xb6, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xfc, 0xb6, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x38, 0xb7, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x74, 0xb7, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xb0, 0xb7, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xec, 0xb7, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x28, 0xb8, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x64, 0xb8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xa0, 0xb8, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xdc, 0xb8, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x18, 0xb9, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x54, 0xb9, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x90, 0xb9, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xcc, 0xb9, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x08, 0xba, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x44, 0xba, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x80, 0xba, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xbc, 0xba, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xf8, 0xba, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x34, 0xbb, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x70, 0xbb, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xac, 0xbb, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xe8, 0xbb, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x24, 0xbc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x60, 0xbc, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x9c, 0xbc, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xd8, 0xbc, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x14, 0xbd, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x50, 0xbd, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x8c, 0xbd, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xc8, 0xbd, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x04, 0xbe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x40, 0xbe, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x7c, 0xbe, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xb8, 0xbe, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xf4, 0xbe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x30, 0xbf, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x6c, 0xbf, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xa8, 0xbf, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xe4, 0xbf, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x20, 0xc0, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x5c, 0xc0, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x98, 0xc0, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xd4, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x10, 0xc1, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x4c, 0xc1, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x88, 0xc1, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xc4, 0xc1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0xc2, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x3c, 0xc2, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x78, 0xc2, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xb4, 0xc2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xf0, 0xc2, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x2c, 0xc3, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x68, 0xc3, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xa4, 0xc3, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xe0, 0xc3, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x1c, 0xc4, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x58, 0xc4, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x94, 0xc4, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xd0, 0xc4, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x0c, 0xc5, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x48, 0xc5, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x84, 0xc5, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xc0, 0xc5, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xfc, 0xc5, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x38, 0xc6, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x74, 0xc6, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xb0, 0xc6, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xec, 0xc6, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x28, 0xc7, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x64, 0xc7, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xa0, 0xc7, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xdc, 0xc7, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x18, 0xc8, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x54, 0xc8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x90, 0xc8, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xcc, 0xc8, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x08, 0xc9, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x44, 0xc9, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x80, 0xc9, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xbc, 0xc9, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xf8, 0xc9, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x34, 0xca, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x70, 0xca, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xac, 0xca, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xe8, 0xca, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x24, 0xcb, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x60, 0xcb, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x9c, 0xcb, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xd8, 0xcb, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x14, 0xcc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x50, 0xcc, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x8c, 0xcc, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xc8, 0xcc, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x04, 0xcd, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x40, 0xcd, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x7c, 0xcd, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xb8, 0xcd, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xf4, 0xcd, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x30, 0xce, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x6c, 0xce, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xa8, 0xce, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xe4, 0xce, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x20, 0xcf, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x5c, 0xcf, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x98, 0xcf, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xd4, 0xcf, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x10, 0xd0, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x4c, 0xd0, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x88, 0xd0, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xc4, 0xd0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0xd1, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x3c, 0xd1, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x78, 0xd1, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xb4, 0xd1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xf0, 0xd1, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x2c, 0xd2, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x68, 0xd2, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xa4, 0xd2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xe0, 0xd2, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x1c, 0xd3, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x58, 0xd3, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x94, 0xd3, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xd0, 0xd3, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x0c, 0xd4, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x48, 0xd4, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x84, 0xd4, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xc0, 0xd4, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xfc, 0xd4, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x38, 0xd5, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x74, 0xd5, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xb0, 0xd5, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xec, 0xd5, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x28, 0xd6, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x64, 0xd6, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xa0, 0xd6, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xdc, 0xd6, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x18, 0xd7, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x54, 0xd7, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x90, 0xd7, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xcc, 0xd7, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x08, 0xd8, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x44, 0xd8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x80, 0xd8, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xbc, 0xd8, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xf8, 0xd8, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x34, 0xd9, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x70, 0xd9, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xac, 0xd9, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xe8, 0xd9, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x24, 0xda, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x60, 0xda, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x9c, 0xda, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xd8, 0xda, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x14, 0xdb, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x50, 0xdb, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x8c, 0xdb, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xc8, 0xdb, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x04, 0xdc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x40, 0xdc, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x7c, 0xdc, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xb8, 0xdc, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xf4, 0xdc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x30, 0xdd, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x6c, 0xdd, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xa8, 0xdd, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xe4, 0xdd, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x20, 0xde, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x5c, 0xde, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x98, 0xde, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xd4, 0xde, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x10, 0xdf, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x4c, 0xdf, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x88, 0xdf, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xc4, 0xdf, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x3c, 0xe0, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x78, 0xe0, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xb4, 0xe0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xf0, 0xe0, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x2c, 0xe1, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x68, 0xe1, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xa4, 0xe1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xe0, 0xe1, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x1c, 0xe2, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x58, 0xe2, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x94, 0xe2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xd0, 0xe2, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x0c, 0xe3, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x48, 0xe3, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x84, 0xe3, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xc0, 0xe3, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xfc, 0xe3, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x38, 0xe4, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x74, 0xe4, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xb0, 0xe4, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xec, 0xe4, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x28, 0xe5, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x64, 0xe5, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xa0, 0xe5, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xdc, 0xe5, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x18, 0xe6, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x54, 0xe6, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x90, 0xe6, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xcc, 0xe6, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x08, 0xe7, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x44, 0xe7, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x80, 0xe7, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xbc, 0xe7, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xf8, 0xe7, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x34, 0xe8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x70, 0xe8, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xac, 0xe8, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xe8, 0xe8, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x24, 0xe9, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x60, 0xe9, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x9c, 0xe9, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xd8, 0xe9, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x14, 0xea, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x50, 0xea, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x8c, 0xea, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xc8, 0xea, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x04, 0xeb, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x40, 0xeb, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x7c, 0xeb, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xb8, 0xeb, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xf4, 0xeb, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x30, 0xec, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x6c, 0xec, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xa8, 0xec, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xe4, 0xec, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x20, 0xed, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x5c, 0xed, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x98, 0xed, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xd4, 0xed, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x10, 0xee, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x4c, 0xee, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x88, 0xee, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xc4, 0xee, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0xef, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x3c, 0xef, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x78, 0xef, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xb4, 0xef, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xf0, 0xef, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x2c, 0xf0, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x68, 0xf0, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xa4, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xe0, 0xf0, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x1c, 0xf1, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x58, 0xf1, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x94, 0xf1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xd0, 0xf1, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x0c, 0xf2, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x48, 0xf2, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x84, 0xf2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xc0, 0xf2, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xfc, 0xf2, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x38, 0xf3, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x74, 0xf3, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xb0, 0xf3, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xec, 0xf3, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x28, 0xf4, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x64, 0xf4, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xa0, 0xf4, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xdc, 0xf4, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x18, 0xf5, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x54, 0xf5, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x90, 0xf5, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xcc, 0xf5, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x08, 0xf6, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x44, 0xf6, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x80, 0xf6, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xbc, 0xf6, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xf8, 0xf6, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x34, 0xf7, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x70, 0xf7, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xac, 0xf7, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xe8, 0xf7, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x24, 0xf8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x60, 0xf8, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x9c, 0xf8, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xd8, 0xf8, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x14, 0xf9, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x50, 0xf9, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x8c, 0xf9, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xc8, 0xf9, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x04, 0xfa, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x40, 0xfa, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x7c, 0xfa, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xb8, 0xfa, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xf4, 0xfa, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x30, 0xfb, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x6c, 0xfb, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xa8, 0xfb, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xe4, 0xfb, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x20, 0xfc, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x5c, 0xfc, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x98, 0xfc, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xd4, 0xfc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x10, 0xfd, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x4c, 0xfd, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x88, 0xfd, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xc4, 0xfd, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x3c, 0xfe, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x78, 0xfe, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xb4, 0xfe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xf0, 0xfe, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x2c, 0xff, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x68, 0xff, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x00, 0x10, 0x04, 0x00, 0x70, 0xb5, 0x2b, 0x48, + 0x06, 0x21, 0x81, 0x75, 0xc1, 0x75, 0x01, 0x7e, + 0x49, 0x08, 0x49, 0x00, 0x01, 0x76, 0x01, 0x7e, + 0x02, 0x22, 0x91, 0x43, 0x01, 0x76, 0x26, 0x49, + 0x0b, 0x78, 0x5b, 0x08, 0x5b, 0x00, 0x0b, 0x70, + 0x04, 0x23, 0x8b, 0x70, 0x0c, 0x23, 0x43, 0x76, + 0x20, 0x23, 0x03, 0x75, 0x1a, 0x24, 0x44, 0x75, + 0x24, 0x24, 0x84, 0x76, 0x10, 0x24, 0xc4, 0x76, + 0x3c, 0x00, 0x3c, 0x10, 0x04, 0x00, 0x2a, 0x25, + 0x4d, 0x70, 0x05, 0x7a, 0x30, 0x26, 0xb5, 0x43, + 0x20, 0x35, 0x05, 0x72, 0x85, 0x7a, 0x6d, 0x08, + 0x6d, 0x00, 0x85, 0x72, 0x85, 0x7a, 0x95, 0x43, + 0x85, 0x72, 0x85, 0x7a, 0x04, 0x26, 0x35, 0x43, + 0x85, 0x72, 0x85, 0x7a, 0x08, 0x26, 0x35, 0x43, + 0x85, 0x72, 0x85, 0x7a, 0xa5, 0x43, 0x85, 0x72, + 0x05, 0x7b, 0x2c, 0x43, 0x04, 0x73, 0x04, 0x7b, + 0x1c, 0x43, 0x3c, 0x00, 0x78, 0x10, 0x04, 0x00, + 0x04, 0x73, 0x04, 0x7b, 0x40, 0x25, 0x2c, 0x43, + 0x04, 0x73, 0x84, 0x7a, 0x23, 0x43, 0x83, 0x72, + 0x83, 0x7a, 0xab, 0x43, 0x83, 0x72, 0x03, 0x7b, + 0x80, 0x24, 0x23, 0x43, 0x03, 0x73, 0x08, 0x78, + 0x90, 0x43, 0x08, 0x70, 0x08, 0x78, 0x01, 0x22, + 0x10, 0x43, 0x08, 0x70, 0x08, 0x78, 0x04, 0x22, + 0x90, 0x43, 0x08, 0x70, 0x70, 0xbd, 0x00, 0x00, + 0x0c, 0x80, 0x07, 0x00, 0x3c, 0x00, 0xb4, 0x10, + 0x04, 0x00, 0x80, 0x80, 0x07, 0x00, 0x01, 0x49, + 0x04, 0x20, 0x48, 0x73, 0x70, 0x47, 0x40, 0x80, + 0x07, 0x00, 0x03, 0x49, 0x80, 0xb5, 0x00, 0x20, + 0x08, 0x80, 0x00, 0xf0, 0x0a, 0xfb, 0x80, 0xbd, + 0x00, 0x00, 0xfc, 0x6b, 0x01, 0x00, 0x70, 0x47, + 0x00, 0x00, 0x80, 0xb5, 0x00, 0xf0, 0x67, 0xfb, + 0x80, 0xbd, 0x80, 0xb5, 0x0a, 0x49, 0x18, 0x20, + 0xc1, 0xf7, 0x3b, 0xfa, 0x09, 0x49, 0x3c, 0x00, + 0xf0, 0x10, 0x04, 0x00, 0x02, 0x20, 0xc1, 0xf7, + 0x37, 0xfa, 0x08, 0x49, 0x1f, 0x20, 0xc1, 0xf7, + 0x33, 0xfa, 0x07, 0x49, 0x1c, 0x20, 0xc1, 0xf7, + 0x2f, 0xfa, 0x06, 0x49, 0x03, 0x20, 0xc1, 0xf7, + 0x2b, 0xfa, 0x80, 0xbd, 0x99, 0x2a, 0x00, 0x00, + 0x41, 0x25, 0x00, 0x00, 0x55, 0x25, 0x00, 0x00, + 0x5d, 0x25, 0x00, 0x00, 0x39, 0x25, 0x00, 0x00, + 0x80, 0xb5, 0xbf, 0xf7, 0x91, 0xfd, 0x80, 0xbd, + 0x3c, 0x00, 0x2c, 0x11, 0x04, 0x00, 0x80, 0xb5, + 0x05, 0x4a, 0x05, 0x49, 0x0a, 0x20, 0xbf, 0xf7, + 0x4e, 0xff, 0x01, 0x20, 0x04, 0x49, 0x80, 0x02, + 0x08, 0x60, 0x48, 0x60, 0x80, 0xbd, 0xb4, 0x74, + 0x01, 0x00, 0xb1, 0x64, 0x00, 0x00, 0x00, 0x10, + 0x07, 0x00, 0x80, 0xb5, 0x00, 0xf0, 0x91, 0xfe, + 0x80, 0xbd, 0x80, 0xb5, 0x05, 0x4a, 0x05, 0x49, + 0x1b, 0x20, 0xbf, 0xf7, 0x38, 0xff, 0x01, 0x20, + 0x04, 0x49, 0x3c, 0x00, 0x68, 0x11, 0x04, 0x00, + 0xc0, 0x06, 0x08, 0x60, 0x48, 0x60, 0x80, 0xbd, + 0xb8, 0x74, 0x01, 0x00, 0x2d, 0x6e, 0x00, 0x00, + 0x00, 0x10, 0x07, 0x00, 0x80, 0xb5, 0x04, 0x48, + 0x00, 0xf0, 0x80, 0xfe, 0x03, 0x49, 0x00, 0x20, + 0x48, 0x60, 0x88, 0x60, 0x80, 0xbd, 0x00, 0x00, + 0x41, 0x4b, 0x00, 0x00, 0xbc, 0x74, 0x01, 0x00, + 0x80, 0xb5, 0xc5, 0xf7, 0xd5, 0xfe, 0xce, 0xf7, + 0xd9, 0xf8, 0x03, 0x49, 0x3c, 0x00, 0xa4, 0x11, + 0x04, 0x00, 0x08, 0x60, 0x03, 0x49, 0x0a, 0x20, + 0xd1, 0xf7, 0xef, 0xf8, 0x80, 0xbd, 0xbc, 0x74, + 0x01, 0x00, 0x49, 0x6e, 0x00, 0x00, 0x80, 0xb5, + 0x01, 0x22, 0x20, 0x21, 0x06, 0x20, 0xc8, 0xf7, + 0x56, 0xfc, 0xbf, 0xf7, 0x70, 0xfe, 0x03, 0x49, + 0x00, 0x20, 0x08, 0x60, 0x20, 0x21, 0x02, 0x48, + 0xbf, 0xf7, 0x63, 0xf9, 0x80, 0xbd, 0xcc, 0x5c, + 0x01, 0x00, 0x64, 0x6d, 0x01, 0x00, 0x3c, 0x00, + 0xe0, 0x11, 0x04, 0x00, 0x08, 0x48, 0x80, 0xb5, + 0x00, 0x68, 0x00, 0x28, 0x05, 0xd0, 0x06, 0x48, + 0x54, 0x30, 0x42, 0x6a, 0x00, 0x21, 0xbf, 0xf7, + 0xf3, 0xf8, 0x04, 0x4a, 0x04, 0x49, 0x03, 0x20, + 0xbf, 0xf7, 0xac, 0xfd, 0x80, 0xbd, 0x00, 0x00, + 0x50, 0x6d, 0x01, 0x00, 0x89, 0x98, 0x00, 0x00, + 0x91, 0x98, 0x00, 0x00, 0x80, 0xb5, 0x00, 0xf0, + 0x03, 0xf8, 0x00, 0xf0, 0x19, 0xf8, 0x80, 0xbd, + 0x3c, 0x00, 0x1c, 0x12, 0x04, 0x00, 0x10, 0xb5, + 0x09, 0x4c, 0x60, 0x21, 0x20, 0x1c, 0xbf, 0xf7, + 0x3a, 0xf9, 0x00, 0x20, 0xc0, 0x43, 0xa0, 0x60, + 0x20, 0x60, 0xff, 0x20, 0x02, 0x30, 0xe0, 0x84, + 0x20, 0x22, 0x20, 0x1c, 0x40, 0x30, 0x02, 0x49, + 0xbf, 0xf7, 0x5b, 0xf9, 0x10, 0xbd, 0x00, 0x10, + 0x07, 0x00, 0x70, 0x52, 0x01, 0x00, 0x00, 0x20, + 0x0a, 0x49, 0xc0, 0x43, 0x88, 0x60, 0x09, 0x4b, + 0x0a, 0x49, 0x3c, 0x00, 0x58, 0x12, 0x04, 0x00, + 0x00, 0x20, 0x82, 0x00, 0x01, 0x30, 0x00, 0x06, + 0x00, 0x0e, 0x20, 0x28, 0x99, 0x50, 0xf8, 0xd3, + 0x06, 0x49, 0x04, 0x4a, 0x08, 0x1c, 0x10, 0x30, + 0x08, 0x3a, 0x03, 0xc2, 0x70, 0x47, 0x00, 0x00, + 0x00, 0x10, 0x07, 0x00, 0xe0, 0x7e, 0x01, 0x00, + 0x75, 0x75, 0x00, 0x00, 0x00, 0xa0, 0x07, 0x00, + 0x04, 0x48, 0x00, 0x21, 0x00, 0x22, 0x00, 0x23, + 0x0e, 0xc0, 0x0c, 0x38, 0x3c, 0x00, 0x94, 0x12, + 0x04, 0x00, 0x01, 0x21, 0x41, 0x60, 0x70, 0x47, + 0x00, 0x00, 0x70, 0x78, 0x01, 0x00, 0x70, 0x47, + 0x00, 0x00, 0x03, 0x48, 0x00, 0x21, 0x00, 0x22, + 0x00, 0x23, 0x0e, 0xc0, 0x08, 0xc0, 0x70, 0x47, + 0x00, 0x00, 0x88, 0x5a, 0x01, 0x00, 0x04, 0x49, + 0x80, 0xb5, 0x00, 0x20, 0x48, 0x61, 0x02, 0x48, + 0x40, 0x21, 0x1c, 0x30, 0xbf, 0xf7, 0xe9, 0xf8, + 0x80, 0xbd, 0xfc, 0x5a, 0x01, 0x00, 0x3c, 0x00, + 0xd0, 0x12, 0x04, 0x00, 0x80, 0xb5, 0xce, 0xf7, + 0x3f, 0xf8, 0x03, 0x49, 0x88, 0x61, 0x03, 0x49, + 0x03, 0x20, 0xd1, 0xf7, 0x55, 0xf8, 0x80, 0xbd, + 0xfc, 0x5a, 0x01, 0x00, 0x0d, 0x17, 0x01, 0x00, + 0x80, 0xb5, 0xc0, 0xf7, 0xa5, 0xf9, 0x80, 0xbd, + 0xfe, 0xb5, 0x6c, 0x49, 0x00, 0x20, 0x00, 0x90, + 0xc8, 0x78, 0x6b, 0x4c, 0x6b, 0x4f, 0x43, 0x07, + 0xc0, 0x06, 0xc0, 0x17, 0xdb, 0x0e, 0xe3, 0x58, + 0x3c, 0x00, 0x0c, 0x13, 0x04, 0x00, 0x01, 0x30, + 0x38, 0x62, 0x3b, 0x61, 0x08, 0x1c, 0x80, 0x78, + 0x66, 0x4e, 0x03, 0x22, 0x41, 0x07, 0xa0, 0x36, + 0x02, 0x96, 0x49, 0x0f, 0x31, 0x72, 0x89, 0x00, + 0x61, 0x58, 0x3c, 0x1c, 0x61, 0x61, 0x01, 0x91, + 0xc0, 0x06, 0xc0, 0x0f, 0x78, 0x62, 0x20, 0x1c, + 0x00, 0x27, 0x87, 0x61, 0x00, 0x20, 0x21, 0x1c, + 0xc8, 0x61, 0x59, 0x48, 0x59, 0x49, 0x00, 0x78, + 0x09, 0x79, 0x3c, 0x00, 0x48, 0x13, 0x04, 0x00, + 0x5a, 0x4c, 0x4e, 0x07, 0x76, 0x0f, 0x71, 0x1c, + 0x8c, 0x46, 0xb1, 0x00, 0x8e, 0x46, 0x56, 0x49, + 0x80, 0x31, 0x00, 0x28, 0x24, 0xd0, 0x52, 0x4f, + 0x01, 0x28, 0x7f, 0x78, 0x1a, 0xd0, 0x02, 0x28, + 0x71, 0xd1, 0x4f, 0x48, 0x00, 0x2f, 0x0c, 0xd0, + 0x01, 0x2f, 0x6c, 0xd1, 0x40, 0x79, 0x4d, 0x4d, + 0x40, 0x07, 0x40, 0x0f, 0x82, 0x00, 0xaa, 0x58, + 0x4b, 0x4d, 0x01, 0x30, 0x3c, 0x00, 0x84, 0x13, + 0x04, 0x00, 0xea, 0x61, 0xa0, 0x73, 0x04, 0x22, + 0x4b, 0x48, 0x48, 0x4d, 0xc8, 0x61, 0x4a, 0x48, + 0x00, 0x2f, 0x00, 0xd0, 0x4a, 0x48, 0x2f, 0x1c, + 0x11, 0xe0, 0x42, 0x48, 0x00, 0x2f, 0x55, 0xd1, + 0x07, 0x70, 0x02, 0x27, 0x47, 0x70, 0x3f, 0x48, + 0x40, 0x78, 0x00, 0x28, 0x10, 0xd0, 0x01, 0x28, + 0x01, 0xd0, 0x02, 0x28, 0x4a, 0xd1, 0x3f, 0x48, + 0x3d, 0x4f, 0xc8, 0x61, 0x3f, 0x48, 0x3c, 0x00, + 0xc0, 0x13, 0x04, 0x00, 0x88, 0x61, 0x3a, 0x49, + 0x70, 0x46, 0x08, 0x58, 0x35, 0x1c, 0xb8, 0x61, + 0x60, 0x46, 0x60, 0x73, 0x04, 0xe0, 0x3c, 0x48, + 0x02, 0x22, 0x88, 0x61, 0x3b, 0x48, 0xc8, 0x61, + 0x00, 0x20, 0x32, 0x49, 0x06, 0xe0, 0x0e, 0x18, + 0xb6, 0x78, 0x76, 0x07, 0x76, 0x0f, 0x04, 0x2e, + 0x2f, 0xd8, 0x01, 0x30, 0x90, 0x42, 0xf6, 0xd3, + 0xc8, 0x79, 0x2e, 0x4f, 0xc0, 0x07, 0xc0, 0x0f, + 0x3c, 0x00, 0xfc, 0x13, 0x04, 0x00, 0xf8, 0x60, + 0x33, 0x48, 0x41, 0x68, 0x19, 0x43, 0x41, 0x60, + 0x81, 0x68, 0x19, 0x43, 0x81, 0x60, 0x01, 0x9a, + 0xb9, 0x69, 0x8c, 0x46, 0x11, 0x43, 0xfa, 0x69, + 0x86, 0x68, 0x11, 0x43, 0x8e, 0x43, 0x86, 0x60, + 0x46, 0x68, 0x31, 0x43, 0x41, 0x60, 0x01, 0x99, + 0x0b, 0x43, 0x18, 0x1c, 0x61, 0x46, 0x08, 0x43, + 0x10, 0x43, 0x01, 0x1c, 0x00, 0x22, 0x02, 0x20, + 0xc7, 0xf7, 0x3c, 0x00, 0x38, 0x14, 0x04, 0x00, + 0x03, 0xfa, 0x1e, 0x4e, 0x40, 0x3e, 0x70, 0x78, + 0xc0, 0x08, 0xc0, 0x00, 0x28, 0x43, 0x70, 0x70, + 0x70, 0x1c, 0x01, 0x78, 0x00, 0xe0, 0x29, 0xe0, + 0x08, 0x25, 0xa9, 0x43, 0x01, 0x70, 0x01, 0x20, + 0xc0, 0x43, 0xb0, 0x80, 0x00, 0x21, 0x01, 0x20, + 0xcf, 0xf7, 0x6c, 0xfc, 0x30, 0x1c, 0x80, 0x30, + 0x81, 0x78, 0x09, 0x09, 0x09, 0x01, 0x81, 0x70, + 0x0f, 0x21, 0x01, 0x70, 0x3c, 0x00, 0x74, 0x14, + 0x04, 0x00, 0x16, 0x4a, 0x69, 0x04, 0x11, 0x60, + 0x51, 0x60, 0x02, 0x9e, 0x10, 0x21, 0x32, 0x7a, + 0x7b, 0x6a, 0x00, 0x2b, 0x00, 0xd1, 0x00, 0x21, + 0x11, 0x43, 0x21, 0x73, 0x81, 0x78, 0x29, 0x43, + 0x81, 0x70, 0xe0, 0x78, 0x01, 0x21, 0x08, 0x43, + 0xe0, 0x70, 0xd2, 0xf7, 0xf2, 0xf9, 0x01, 0x20, + 0x00, 0x90, 0x00, 0x98, 0xfe, 0xbd, 0xc0, 0x57, + 0x01, 0x00, 0x6c, 0x43, 0x01, 0x00, 0x3c, 0x00, + 0xb0, 0x14, 0x04, 0x00, 0xa4, 0x6c, 0x01, 0x00, + 0x40, 0x90, 0x07, 0x00, 0xc9, 0x1d, 0x00, 0x00, + 0x81, 0x1d, 0x00, 0x00, 0xa5, 0x1d, 0x00, 0x00, + 0x99, 0x1d, 0x00, 0x00, 0xf1, 0x1d, 0x00, 0x00, + 0x10, 0x00, 0x07, 0x00, 0x00, 0x10, 0x07, 0x00, + 0x03, 0x49, 0x00, 0x20, 0x88, 0x62, 0x08, 0x70, + 0x48, 0x70, 0x08, 0x71, 0x08, 0x62, 0x70, 0x47, + 0xac, 0x7e, 0x01, 0x00, 0x80, 0xb5, 0x01, 0x21, + 0x3c, 0x00, 0xec, 0x14, 0x04, 0x00, 0x00, 0x20, + 0xcd, 0xf7, 0x69, 0xff, 0x80, 0xbd, 0xb0, 0xb5, + 0x0f, 0x48, 0xc0, 0xf7, 0x18, 0xfc, 0x0e, 0x4d, + 0x03, 0x20, 0x28, 0x70, 0x0d, 0x49, 0x0d, 0x48, + 0x0c, 0x39, 0x48, 0x60, 0x0d, 0x48, 0x0a, 0x4c, + 0x88, 0x60, 0x40, 0x21, 0x18, 0x34, 0x20, 0x1c, + 0xbe, 0xf7, 0xc1, 0xff, 0xff, 0x21, 0x68, 0x68, + 0x09, 0x06, 0x08, 0x43, 0x20, 0x60, 0xff, 0x21, + 0x06, 0x22, 0x3c, 0x00, 0x28, 0x15, 0x04, 0x00, + 0x20, 0x1d, 0xbf, 0xf7, 0x79, 0xf8, 0x01, 0x20, + 0xe0, 0x60, 0xb0, 0xbd, 0xc0, 0xa8, 0x13, 0x0a, + 0x20, 0x6e, 0x01, 0x00, 0xc0, 0xa8, 0x13, 0x01, + 0xff, 0xff, 0xff, 0x00, 0x80, 0xb5, 0x02, 0x49, + 0x01, 0x20, 0xc8, 0xf7, 0x45, 0xff, 0x80, 0xbd, + 0x9d, 0x1c, 0x00, 0x00, 0x98, 0xb5, 0x0c, 0x4c, + 0x00, 0x20, 0x60, 0x60, 0xe0, 0x60, 0x0b, 0x4b, + 0x0b, 0x49, 0x82, 0x00, 0x3c, 0x00, 0x64, 0x15, + 0x04, 0x00, 0x01, 0x30, 0x20, 0x28, 0x99, 0x50, + 0xfa, 0xdb, 0x6a, 0x46, 0x09, 0x49, 0x05, 0x20, + 0xbf, 0xf7, 0x2f, 0xfd, 0x00, 0x20, 0xc0, 0x43, + 0x20, 0x60, 0x06, 0x49, 0x20, 0x20, 0x08, 0x60, + 0x48, 0x60, 0x98, 0xbd, 0x00, 0x00, 0x00, 0x40, + 0x07, 0x00, 0x30, 0x74, 0x01, 0x00, 0xa9, 0x75, + 0x00, 0x00, 0xb5, 0x9f, 0x00, 0x00, 0x00, 0x10, + 0x07, 0x00, 0x05, 0x49, 0x00, 0x20, 0x3c, 0x00, + 0xa0, 0x15, 0x04, 0x00, 0x08, 0x60, 0x05, 0x48, + 0x81, 0x78, 0x28, 0x22, 0x91, 0x43, 0x81, 0x70, + 0x81, 0x78, 0x11, 0x43, 0x81, 0x70, 0x70, 0x47, + 0x78, 0x6e, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x70, 0x47, 0x00, 0x00, 0x41, 0x48, 0x10, 0xb5, + 0x00, 0x68, 0x02, 0x21, 0x88, 0x43, 0x3f, 0x49, + 0x08, 0x60, 0x08, 0x1c, 0x00, 0x68, 0x02, 0x21, + 0x08, 0x43, 0x3c, 0x49, 0x08, 0x60, 0x3c, 0x48, + 0x3c, 0x00, 0xdc, 0x15, 0x04, 0x00, 0x40, 0x68, + 0x80, 0x21, 0x88, 0x43, 0x3a, 0x49, 0x48, 0x60, + 0x08, 0x1c, 0x00, 0x68, 0x80, 0x21, 0x08, 0x43, + 0x37, 0x49, 0x08, 0x60, 0x37, 0x48, 0x01, 0x7a, + 0x01, 0x24, 0x21, 0x43, 0x01, 0x72, 0x01, 0x7a, + 0x02, 0x22, 0x11, 0x43, 0x01, 0x72, 0x01, 0x7a, + 0x04, 0x22, 0x91, 0x43, 0x01, 0x72, 0x01, 0x7a, + 0x08, 0x22, 0x11, 0x43, 0x01, 0x72, 0x01, 0x7b, + 0x21, 0x43, 0x3c, 0x00, 0x18, 0x16, 0x04, 0x00, + 0x01, 0x73, 0x01, 0x7b, 0x02, 0x22, 0x11, 0x43, + 0x01, 0x73, 0x01, 0x7b, 0x04, 0x22, 0x11, 0x43, + 0x01, 0x73, 0x01, 0x7b, 0x08, 0x22, 0x11, 0x43, + 0x01, 0x73, 0x2e, 0x21, 0x41, 0x73, 0x81, 0x7b, + 0x38, 0x22, 0x91, 0x43, 0x28, 0x31, 0x81, 0x73, + 0x20, 0x21, 0x41, 0x74, 0x81, 0x7b, 0xc9, 0x08, + 0xc9, 0x00, 0x03, 0x31, 0x81, 0x73, 0x22, 0x21, + 0xc1, 0x73, 0x20, 0x49, 0x3c, 0x00, 0x54, 0x16, + 0x04, 0x00, 0x09, 0x7a, 0x41, 0x72, 0x1e, 0x49, + 0x49, 0x7a, 0x01, 0x74, 0x3c, 0x22, 0x02, 0x77, + 0x01, 0x1c, 0x10, 0x31, 0x4a, 0x73, 0x50, 0x23, + 0x8b, 0x73, 0x5a, 0x23, 0xcb, 0x73, 0x0d, 0x23, + 0x01, 0x1c, 0x20, 0x31, 0x0b, 0x70, 0x17, 0x4b, + 0x43, 0x84, 0x0e, 0x23, 0x4b, 0x70, 0x00, 0x21, + 0x41, 0x82, 0x30, 0x21, 0x01, 0x70, 0x05, 0x21, + 0x41, 0x70, 0x04, 0x21, 0x41, 0x71, 0x3c, 0x00, + 0x90, 0x16, 0x04, 0x00, 0x84, 0x71, 0xc4, 0x71, + 0x0c, 0x21, 0x01, 0x71, 0xf8, 0x21, 0x41, 0x80, + 0x0f, 0x49, 0xca, 0x72, 0x8a, 0x72, 0x03, 0x22, + 0x0a, 0x72, 0x09, 0x22, 0x4a, 0x72, 0x08, 0x22, + 0x0a, 0x73, 0x02, 0x7a, 0x40, 0x23, 0x1a, 0x43, + 0x02, 0x72, 0x4c, 0x73, 0xff, 0xf7, 0xa2, 0xfc, + 0x08, 0x48, 0x01, 0x78, 0x21, 0x43, 0x01, 0x70, + 0x10, 0xbd, 0x00, 0x00, 0xf0, 0x00, 0x07, 0x00, + 0x3c, 0x00, 0xcc, 0x16, 0x04, 0x00, 0xf4, 0x00, + 0x07, 0x00, 0x0c, 0x80, 0x07, 0x00, 0x76, 0x46, + 0x01, 0x00, 0x24, 0x09, 0x00, 0x00, 0x80, 0x80, + 0x07, 0x00, 0xa0, 0x80, 0x07, 0x00, 0x80, 0xb5, + 0x18, 0x21, 0x09, 0x48, 0xbe, 0xf7, 0xd7, 0xfe, + 0x08, 0x48, 0x00, 0x21, 0x3c, 0x38, 0x41, 0x60, + 0x81, 0x60, 0xc1, 0x60, 0x01, 0x61, 0x41, 0x61, + 0x81, 0x61, 0x01, 0x21, 0x01, 0x62, 0xff, 0xf7, + 0x5c, 0xff, 0x3c, 0x00, 0x08, 0x17, 0x04, 0x00, + 0xc0, 0xf7, 0x6c, 0xff, 0x80, 0xbd, 0x00, 0x00, + 0x24, 0x7e, 0x01, 0x00, 0xb0, 0xb5, 0x21, 0x48, + 0x00, 0x68, 0x40, 0x08, 0x1f, 0x49, 0x40, 0x00, + 0x08, 0x60, 0x08, 0x1c, 0x00, 0x68, 0x01, 0x21, + 0x08, 0x43, 0x1c, 0x49, 0x08, 0x60, 0x1c, 0x4a, + 0x10, 0x79, 0x01, 0x21, 0x08, 0x43, 0x10, 0x71, + 0x10, 0x79, 0x02, 0x21, 0x88, 0x43, 0x10, 0x71, + 0x00, 0xf0, 0x6c, 0xf8, 0x3c, 0x00, 0x44, 0x17, + 0x04, 0x00, 0x10, 0x7a, 0x01, 0x21, 0x08, 0x43, + 0x10, 0x72, 0x10, 0x7a, 0xfe, 0x21, 0x88, 0x43, + 0x0a, 0x30, 0x10, 0x72, 0x28, 0x20, 0x90, 0x72, + 0x5a, 0x20, 0xd0, 0x72, 0x11, 0x4d, 0x14, 0x20, + 0x28, 0x77, 0x2c, 0x1c, 0x10, 0x34, 0xa0, 0x73, + 0x16, 0x20, 0xa8, 0x75, 0x18, 0x20, 0xe8, 0x75, + 0xff, 0xf7, 0xa1, 0xfc, 0x0c, 0x48, 0x68, 0x86, + 0xe0, 0x7b, 0x40, 0x06, 0x40, 0x0e, 0x3c, 0x00, + 0x80, 0x17, 0x04, 0x00, 0x0e, 0x21, 0x08, 0x43, + 0xe0, 0x73, 0xe0, 0x7b, 0x80, 0x21, 0x08, 0x43, + 0xe0, 0x73, 0x07, 0x48, 0x41, 0x79, 0x04, 0x22, + 0x11, 0x43, 0x41, 0x71, 0xb0, 0xbd, 0x00, 0x00, + 0xf0, 0x00, 0x07, 0x00, 0x00, 0x80, 0x07, 0x00, + 0x30, 0x80, 0x07, 0x00, 0xff, 0x01, 0x00, 0x00, + 0x50, 0x00, 0x07, 0x00, 0x80, 0xb5, 0xff, 0xf7, + 0xaf, 0xff, 0x00, 0x20, 0x14, 0x49, 0xc0, 0x43, + 0x3c, 0x00, 0xbc, 0x17, 0x04, 0x00, 0x88, 0x60, + 0xc1, 0xf7, 0x0b, 0xf9, 0x13, 0x49, 0x00, 0x20, + 0x48, 0x62, 0xc8, 0x60, 0x48, 0x61, 0x08, 0x61, + 0x88, 0x61, 0xc8, 0x61, 0x0f, 0x4b, 0x08, 0x62, + 0x0f, 0x4a, 0x08, 0x63, 0x38, 0x33, 0x1a, 0x80, + 0x01, 0x22, 0x5a, 0x71, 0x0b, 0x4a, 0x40, 0x32, + 0xd0, 0x60, 0x13, 0x60, 0x08, 0x23, 0x13, 0x81, + 0x50, 0x60, 0x09, 0x4a, 0x8a, 0x62, 0xff, 0x22, + 0x0a, 0x70, 0x3c, 0x00, 0xf8, 0x17, 0x04, 0x00, + 0x48, 0x70, 0x05, 0x48, 0x00, 0x21, 0x00, 0x22, + 0x50, 0x30, 0x00, 0x23, 0x0e, 0xc0, 0xc1, 0xf7, + 0xff, 0xf8, 0x80, 0xbd, 0x00, 0x30, 0x07, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0xbe, 0xba, 0x00, 0x00, + 0x85, 0x75, 0x00, 0x00, 0x03, 0x48, 0x10, 0x21, + 0x81, 0x71, 0x02, 0x21, 0xc1, 0x71, 0x30, 0x21, + 0x41, 0x72, 0x70, 0x47, 0x00, 0x80, 0x07, 0x00, + 0x70, 0x47, 0x00, 0x00, 0x3c, 0x00, 0x34, 0x18, + 0x04, 0x00, 0x00, 0xb5, 0xc1, 0xf7, 0xdb, 0xfb, + 0x00, 0xbd, 0x70, 0x47, 0x00, 0x00, 0x80, 0xb5, + 0xcd, 0xf7, 0x87, 0xfd, 0x01, 0x49, 0x88, 0x60, + 0x80, 0xbd, 0x50, 0xd9, 0x01, 0x00, 0x80, 0xb5, + 0x06, 0x21, 0x05, 0x48, 0xbe, 0xf7, 0xfd, 0xfd, + 0x04, 0x49, 0x00, 0x20, 0x04, 0x39, 0x08, 0x60, + 0x00, 0xf0, 0x67, 0xf8, 0x00, 0xf0, 0x03, 0xf8, + 0x80, 0xbd, 0xec, 0x67, 0x01, 0x00, 0x3c, 0x00, + 0x70, 0x18, 0x04, 0x00, 0x10, 0xb5, 0x07, 0x4c, + 0x2c, 0x21, 0x20, 0x1c, 0xbe, 0xf7, 0x10, 0xfe, + 0x01, 0x20, 0x20, 0x70, 0x03, 0x49, 0x00, 0x20, + 0x1c, 0x39, 0xc8, 0x60, 0x08, 0x61, 0x88, 0x61, + 0x10, 0xbd, 0x00, 0x00, 0x78, 0x69, 0x01, 0x00, + 0x80, 0xb5, 0xcd, 0xf7, 0x5d, 0xfd, 0x09, 0x49, + 0x88, 0x60, 0x09, 0x49, 0x08, 0x20, 0xd0, 0xf7, + 0x73, 0xfd, 0x08, 0x49, 0x09, 0x20, 0xd0, 0xf7, + 0x3c, 0x00, 0xac, 0x18, 0x04, 0x00, 0x6f, 0xfd, + 0x07, 0x49, 0x11, 0x20, 0xd0, 0xf7, 0x6b, 0xfd, + 0x06, 0x48, 0xc2, 0xf7, 0x74, 0xf9, 0x80, 0xbd, + 0x00, 0x00, 0x78, 0x69, 0x01, 0x00, 0x21, 0x35, + 0x00, 0x00, 0xa1, 0x38, 0x00, 0x00, 0x45, 0x34, + 0x00, 0x00, 0xbd, 0x26, 0x01, 0x00, 0x80, 0xb5, + 0x86, 0xb0, 0x0f, 0x48, 0xc4, 0xf7, 0x45, 0xf9, + 0x00, 0xf0, 0x45, 0xf8, 0xff, 0xf7, 0xd7, 0xff, + 0xff, 0xf7, 0x3c, 0x00, 0xe8, 0x18, 0x04, 0x00, + 0xab, 0xff, 0x0c, 0x49, 0x03, 0x20, 0xd0, 0xf7, + 0x4d, 0xfd, 0x0b, 0x48, 0x69, 0x46, 0x00, 0x90, + 0x00, 0x20, 0x01, 0x90, 0x09, 0x48, 0x04, 0x90, + 0x09, 0x48, 0x02, 0x90, 0x09, 0x48, 0x03, 0x90, + 0x09, 0x48, 0x05, 0x90, 0x00, 0x20, 0xc4, 0xf7, + 0xcf, 0xf8, 0x06, 0xb0, 0x80, 0xbd, 0x00, 0x00, + 0xf4, 0x67, 0x01, 0x00, 0x45, 0x35, 0x00, 0x00, + 0x95, 0x32, 0x00, 0x00, 0x3c, 0x00, 0x24, 0x19, + 0x04, 0x00, 0xa0, 0x7d, 0x01, 0x00, 0xfd, 0x32, + 0x00, 0x00, 0xcd, 0x31, 0x00, 0x00, 0x45, 0x7d, + 0x01, 0x00, 0x10, 0xb5, 0xcd, 0xf7, 0xd5, 0xfc, + 0x09, 0x48, 0x09, 0x4c, 0x30, 0x21, 0x60, 0x61, + 0x08, 0x48, 0x74, 0x30, 0xbe, 0xf7, 0xa9, 0xfd, + 0x00, 0x20, 0xa0, 0x62, 0x06, 0x49, 0x20, 0x61, + 0xe1, 0x63, 0x60, 0x64, 0xa0, 0x64, 0x14, 0x21, + 0x21, 0x65, 0x60, 0x62, 0x10, 0xbd, 0x3c, 0x00, + 0x60, 0x19, 0x04, 0x00, 0xb9, 0x75, 0x00, 0x00, + 0x44, 0x7d, 0x01, 0x00, 0x70, 0x17, 0x00, 0x00, + 0x80, 0xb5, 0x02, 0x21, 0x09, 0x20, 0x04, 0x4a, + 0xd1, 0xf7, 0xe8, 0xfe, 0xcd, 0xf7, 0xec, 0xfc, + 0x02, 0x49, 0x08, 0x63, 0x80, 0xbd, 0x00, 0x00, + 0x39, 0x39, 0x00, 0x00, 0x44, 0x7d, 0x01, 0x00, + 0x80, 0xb5, 0xac, 0x21, 0x03, 0x48, 0xbe, 0xf7, + 0x83, 0xfd, 0x00, 0xf0, 0x51, 0xf8, 0x00, 0xf0, + 0x3c, 0x00, 0x9c, 0x19, 0x04, 0x00, 0x49, 0xf8, + 0x80, 0xbd, 0xa4, 0x6c, 0x01, 0x00, 0x08, 0xb5, + 0x00, 0xf0, 0x4d, 0xf8, 0x00, 0xf0, 0x45, 0xf8, + 0x00, 0x21, 0x16, 0x20, 0x18, 0x4a, 0xd1, 0xf7, + 0xc8, 0xfe, 0x17, 0x4a, 0x04, 0x21, 0x10, 0x1c, + 0x40, 0x30, 0x01, 0x70, 0x00, 0x21, 0x81, 0x70, + 0x11, 0x21, 0xc1, 0x80, 0x14, 0x49, 0x01, 0x81, + 0x10, 0x1c, 0x80, 0x30, 0xc1, 0x78, 0x08, 0x22, + 0x91, 0x43, 0x3c, 0x00, 0xd8, 0x19, 0x04, 0x00, + 0xc1, 0x70, 0xc1, 0x78, 0x11, 0x43, 0xc1, 0x70, + 0x6a, 0x46, 0x0f, 0x49, 0x14, 0x20, 0xbf, 0xf7, + 0xf5, 0xfa, 0x0e, 0x49, 0x07, 0x20, 0xd0, 0xf7, + 0xcd, 0xfc, 0x0d, 0x49, 0x0f, 0x20, 0xd0, 0xf7, + 0xc9, 0xfc, 0xcd, 0xf7, 0xab, 0xfc, 0x0b, 0x49, + 0x08, 0x60, 0x0a, 0x48, 0x44, 0x38, 0x80, 0x68, + 0x00, 0x28, 0x02, 0xd0, 0x00, 0x20, 0xc6, 0xf7, + 0x6f, 0xf9, 0x08, 0xbd, 0x3c, 0x00, 0x14, 0x1a, + 0x04, 0x00, 0xb5, 0x3b, 0x00, 0x00, 0x00, 0x90, + 0x07, 0x00, 0xe7, 0xfd, 0x00, 0x00, 0x8d, 0x41, + 0x00, 0x00, 0xcd, 0x48, 0x00, 0x00, 0xd9, 0x49, + 0x00, 0x00, 0xa4, 0x6c, 0x01, 0x00, 0x80, 0xb5, + 0x00, 0xf0, 0x6f, 0xfc, 0x80, 0xbd, 0x70, 0x47, + 0x00, 0x00, 0x80, 0xb5, 0x00, 0xf0, 0x61, 0xfc, + 0x80, 0xbd, 0x70, 0x47, 0x00, 0x00, 0xb0, 0xb5, + 0x30, 0x21, 0x0c, 0x48, 0xbe, 0xf7, 0x3c, 0x00, + 0x50, 0x1a, 0x04, 0x00, 0x25, 0xfd, 0x0b, 0x4c, + 0x00, 0x25, 0x0a, 0x48, 0x84, 0x3c, 0x38, 0x22, + 0x03, 0x21, 0x70, 0x38, 0x65, 0x60, 0xbe, 0xf7, + 0xdd, 0xfd, 0x06, 0x48, 0x38, 0x22, 0x01, 0x21, + 0x38, 0x38, 0xbe, 0xf7, 0xd7, 0xfd, 0x0e, 0x20, + 0xa5, 0x60, 0x60, 0x70, 0x20, 0x70, 0x00, 0xf0, + 0x1d, 0xf8, 0xb0, 0xbd, 0x94, 0x67, 0x01, 0x00, + 0x04, 0x49, 0x00, 0xb5, 0x01, 0x20, 0x48, 0x60, + 0x3c, 0x00, 0x8c, 0x1a, 0x04, 0x00, 0x88, 0x60, + 0xc8, 0x60, 0xc3, 0xf7, 0xf8, 0xff, 0x00, 0xbd, + 0x00, 0x00, 0xd4, 0x67, 0x01, 0x00, 0x80, 0xb5, + 0x02, 0x21, 0x0a, 0x20, 0x02, 0x4a, 0xd1, 0xf7, + 0x50, 0xfe, 0x80, 0xbd, 0x00, 0x00, 0x1d, 0x5a, + 0x00, 0x00, 0x80, 0xb5, 0x00, 0xf0, 0x05, 0xf8, + 0x80, 0xbd, 0x80, 0xb5, 0x00, 0xf0, 0xfd, 0xfb, + 0x80, 0xbd, 0x80, 0xb5, 0x02, 0x49, 0x04, 0x20, + 0xd0, 0xf7, 0x3c, 0x00, 0xc8, 0x1a, 0x04, 0x00, + 0x61, 0xfc, 0x80, 0xbd, 0x65, 0x1f, 0x00, 0x00, + 0x00, 0x21, 0x17, 0x48, 0xc9, 0x43, 0x80, 0xb5, + 0x16, 0x4b, 0x01, 0x70, 0x18, 0x1c, 0x10, 0x22, + 0x20, 0x30, 0x02, 0x71, 0x00, 0x22, 0x10, 0x33, + 0x9a, 0x73, 0x42, 0x79, 0x04, 0x23, 0x1a, 0x43, + 0x42, 0x71, 0x42, 0x79, 0x18, 0x23, 0x9a, 0x43, + 0x08, 0x32, 0x42, 0x71, 0x08, 0x1c, 0xd7, 0xf7, + 0x59, 0xf8, 0x00, 0x28, 0x3c, 0x00, 0x04, 0x1b, + 0x04, 0x00, 0x03, 0xd1, 0x01, 0x21, 0x9a, 0x20, + 0xbf, 0xf7, 0xcb, 0xfb, 0x50, 0x20, 0x09, 0x49, + 0x50, 0x22, 0x0a, 0x60, 0xc8, 0x60, 0x88, 0x60, + 0x48, 0x60, 0x08, 0x61, 0x01, 0x20, 0x48, 0x61, + 0x00, 0x20, 0xd7, 0xf7, 0xd8, 0xf8, 0x04, 0x49, + 0xff, 0x20, 0x08, 0x60, 0x80, 0xbd, 0xf4, 0x6b, + 0x01, 0x00, 0x30, 0x00, 0x07, 0x00, 0x04, 0x02, + 0x07, 0x00, 0xf4, 0x74, 0x01, 0x00, 0x3c, 0x00, + 0x40, 0x1b, 0x04, 0x00, 0x80, 0xb5, 0xd7, 0xf7, + 0xfb, 0xf8, 0x80, 0xbd, 0x10, 0xb5, 0xff, 0xf7, + 0xab, 0xfb, 0xbf, 0xf7, 0xdd, 0xfb, 0x81, 0x48, + 0xcd, 0xf7, 0x98, 0xfa, 0x00, 0x24, 0x23, 0x1c, + 0x04, 0x22, 0x04, 0x21, 0x00, 0x20, 0x01, 0xf0, + 0x39, 0xfa, 0x00, 0x28, 0x01, 0xd0, 0xbf, 0xf7, + 0xc9, 0xfb, 0x23, 0x1c, 0x00, 0x22, 0xff, 0x21, + 0x00, 0x20, 0x01, 0xf0, 0x2f, 0xfa, 0x00, 0x28, + 0x3c, 0x00, 0x7c, 0x1b, 0x04, 0x00, 0x01, 0xd0, + 0xbf, 0xf7, 0xbf, 0xfb, 0x23, 0x1c, 0x00, 0x22, + 0xff, 0x21, 0x00, 0x20, 0x01, 0xf0, 0x25, 0xfa, + 0x00, 0x28, 0x01, 0xd0, 0xbf, 0xf7, 0xb5, 0xfb, + 0xc4, 0xf7, 0x27, 0xff, 0x70, 0x48, 0x84, 0x70, + 0x6f, 0x49, 0x7f, 0x20, 0x88, 0x70, 0x6e, 0x49, + 0x0c, 0x60, 0x03, 0x20, 0x08, 0x60, 0x6b, 0x48, + 0x44, 0x70, 0x6c, 0x48, 0x04, 0x80, 0x69, 0x48, + 0xc0, 0x78, 0x3c, 0x00, 0xb8, 0x1b, 0x04, 0x00, + 0x08, 0x21, 0x08, 0x43, 0x67, 0x49, 0xc8, 0x70, + 0x08, 0x1c, 0xc0, 0x78, 0x04, 0x21, 0x08, 0x43, + 0x64, 0x49, 0xc8, 0x70, 0x01, 0xf0, 0x7e, 0xfa, + 0xff, 0xf7, 0x7e, 0xff, 0xff, 0xf7, 0x2c, 0xfe, + 0x01, 0xf0, 0x46, 0xfb, 0xff, 0xf7, 0x18, 0xfb, + 0x01, 0xf0, 0x52, 0xfa, 0xff, 0xf7, 0x82, 0xfb, + 0x5f, 0x48, 0xc1, 0x68, 0x10, 0x22, 0x91, 0x43, + 0xc1, 0x60, 0x01, 0x69, 0x3c, 0x00, 0xf4, 0x1b, + 0x04, 0x00, 0x5d, 0x4a, 0x11, 0x43, 0x01, 0x61, + 0x01, 0x69, 0xd2, 0x0a, 0x91, 0x43, 0x01, 0x61, + 0xc1, 0x68, 0x5a, 0x4a, 0x11, 0x43, 0xc1, 0x60, + 0x81, 0x6a, 0x59, 0x4a, 0x11, 0x43, 0x81, 0x62, + 0x00, 0xf0, 0x77, 0xf9, 0x01, 0xf0, 0x1f, 0xf8, + 0x00, 0xf0, 0x93, 0xfa, 0x01, 0xf0, 0x99, 0xfb, + 0x00, 0xf0, 0xf1, 0xff, 0x00, 0xf0, 0x99, 0xfc, + 0x00, 0xf0, 0xdd, 0xfc, 0x00, 0xf0, 0x3c, 0x00, + 0x30, 0x1c, 0x04, 0x00, 0x83, 0xfc, 0xff, 0xf7, + 0xb3, 0xfc, 0x01, 0xf0, 0x31, 0xfa, 0x01, 0xf0, + 0x71, 0xfa, 0xff, 0xf7, 0x87, 0xfa, 0xff, 0xf7, + 0x9b, 0xfa, 0x01, 0x21, 0x01, 0x20, 0x4b, 0x4a, + 0xd1, 0xf7, 0x7c, 0xfd, 0x01, 0x21, 0x02, 0x20, + 0x49, 0x4a, 0xd1, 0xf7, 0x77, 0xfd, 0x02, 0x21, + 0x03, 0x20, 0x48, 0x4a, 0xd1, 0xf7, 0x72, 0xfd, + 0x02, 0x21, 0x04, 0x20, 0x46, 0x4a, 0xd1, 0xf7, + 0x3c, 0x00, 0x6c, 0x1c, 0x04, 0x00, 0x6d, 0xfd, + 0x02, 0x21, 0x05, 0x20, 0x45, 0x4a, 0xd1, 0xf7, + 0x68, 0xfd, 0x02, 0x21, 0x06, 0x20, 0x43, 0x4a, + 0xd1, 0xf7, 0x63, 0xfd, 0x01, 0x21, 0x07, 0x20, + 0x42, 0x4a, 0xd1, 0xf7, 0x5e, 0xfd, 0x02, 0x21, + 0x17, 0x20, 0x40, 0x4a, 0xd1, 0xf7, 0x59, 0xfd, + 0x02, 0x21, 0x08, 0x20, 0x3f, 0x4a, 0xd1, 0xf7, + 0x54, 0xfd, 0xff, 0xf7, 0xc8, 0xfd, 0x3d, 0x48, + 0x04, 0x60, 0x3c, 0x00, 0xa8, 0x1c, 0x04, 0x00, + 0x44, 0x60, 0xff, 0xf7, 0x17, 0xfa, 0xff, 0xf7, + 0x09, 0xfa, 0xff, 0xf7, 0x4f, 0xfc, 0x00, 0xf0, + 0x43, 0xf9, 0xff, 0xf7, 0x33, 0xfa, 0xff, 0xf7, + 0xfb, 0xfa, 0x01, 0xf0, 0x85, 0xf8, 0x01, 0xf0, + 0xeb, 0xf9, 0x01, 0xf0, 0x23, 0xfa, 0x01, 0xf0, + 0x71, 0xf9, 0x00, 0xf0, 0xe3, 0xff, 0xff, 0xf7, + 0x6f, 0xfa, 0x00, 0xf0, 0xaf, 0xf9, 0x00, 0xf0, + 0xbd, 0xf9, 0x00, 0xf0, 0x3c, 0x00, 0xe4, 0x1c, + 0x04, 0x00, 0xad, 0xfc, 0x00, 0xf0, 0x9b, 0xfe, + 0xff, 0xf7, 0xcd, 0xfa, 0xff, 0xf7, 0xab, 0xfe, + 0x00, 0xf0, 0xc3, 0xf9, 0xff, 0xf7, 0xab, 0xfd, + 0x00, 0xf0, 0x8d, 0xff, 0x00, 0xf0, 0x21, 0xff, + 0x00, 0xf0, 0x65, 0xf9, 0x00, 0xf0, 0x97, 0xf9, + 0x00, 0xf0, 0xfd, 0xfe, 0x00, 0xf0, 0xe5, 0xfe, + 0x00, 0xf0, 0x3f, 0xf9, 0x00, 0xf0, 0x73, 0xf9, + 0xff, 0xf7, 0x37, 0xfe, 0x00, 0xf0, 0x3c, 0x00, + 0x20, 0x1d, 0x04, 0x00, 0x21, 0xf9, 0x00, 0xf0, + 0x73, 0xfb, 0xff, 0xf7, 0xe5, 0xfb, 0x00, 0xf0, + 0xd3, 0xfb, 0xff, 0xf7, 0xa9, 0xfe, 0x00, 0xf0, + 0xbb, 0xfb, 0x00, 0xf0, 0x09, 0xff, 0x00, 0xf0, + 0xdb, 0xf9, 0x18, 0x48, 0xc9, 0xf7, 0x56, 0xf8, + 0x17, 0x48, 0xc9, 0xf7, 0x2b, 0xf8, 0x00, 0x22, + 0x01, 0x21, 0xf0, 0x20, 0xd1, 0xf7, 0x2e, 0xfd, + 0x00, 0x20, 0x10, 0xbd, 0xa9, 0x69, 0x00, 0x00, + 0x3c, 0x00, 0x5c, 0x1d, 0x04, 0x00, 0x00, 0x00, + 0x07, 0x00, 0xf0, 0x00, 0x07, 0x00, 0x2c, 0x00, + 0x07, 0x00, 0x00, 0x10, 0x07, 0x00, 0x3c, 0x00, + 0x08, 0x00, 0xc0, 0x3f, 0x74, 0x38, 0xfc, 0xdf, + 0x7f, 0x38, 0x55, 0x69, 0x00, 0x00, 0xe5, 0x13, + 0x00, 0x00, 0x61, 0x0c, 0x00, 0x00, 0x6d, 0x0c, + 0x00, 0x00, 0x3d, 0x0c, 0x00, 0x00, 0xf1, 0x0d, + 0x00, 0x00, 0xc5, 0x33, 0x00, 0x00, 0x3d, 0x0f, + 0x00, 0x00, 0x3c, 0x00, 0x98, 0x1d, 0x04, 0x00, + 0xad, 0xd8, 0x00, 0x00, 0x80, 0x00, 0x07, 0x00, + 0x50, 0x57, 0x01, 0x00, 0x04, 0x40, 0x01, 0x00, + 0x80, 0xb5, 0x01, 0xf0, 0xa9, 0xf9, 0x00, 0xf0, + 0xc9, 0xf8, 0xff, 0xf7, 0xc5, 0xfe, 0x01, 0xf0, + 0x03, 0xfb, 0x01, 0xf0, 0x93, 0xfa, 0xff, 0xf7, + 0xcb, 0xf9, 0x2c, 0x48, 0xff, 0xf7, 0xe8, 0xf9, + 0x00, 0xf0, 0xaa, 0xf8, 0x00, 0xf0, 0x58, 0xff, + 0xff, 0xf7, 0x34, 0xfd, 0x3c, 0x00, 0xd4, 0x1d, + 0x04, 0x00, 0xff, 0xf7, 0xf2, 0xfb, 0xff, 0xf7, + 0x7a, 0xfa, 0xff, 0xf7, 0x00, 0xfa, 0x00, 0xf0, + 0x34, 0xf9, 0x00, 0xf0, 0x3c, 0xf9, 0x01, 0xf0, + 0xe2, 0xf8, 0xff, 0xf7, 0x7a, 0xf9, 0xff, 0xf7, + 0x72, 0xf9, 0xff, 0xf7, 0x9a, 0xf9, 0x01, 0xf0, + 0x66, 0xf9, 0x01, 0xf0, 0x8e, 0xf9, 0x01, 0xf0, + 0xe0, 0xf8, 0x00, 0xf0, 0x06, 0xff, 0x00, 0xf0, + 0xf0, 0xfb, 0x00, 0xf0, 0x46, 0xfb, 0x3c, 0x00, + 0x10, 0x1e, 0x04, 0x00, 0x00, 0xf0, 0xbc, 0xff, + 0x00, 0xf0, 0xe4, 0xfc, 0x00, 0xf0, 0x20, 0xfe, + 0xff, 0xf7, 0x40, 0xfa, 0xff, 0xf7, 0x46, 0xfe, + 0xff, 0xf7, 0x56, 0xfd, 0x00, 0xf0, 0x2c, 0xf9, + 0x00, 0xf0, 0xfa, 0xfe, 0x00, 0xf0, 0x8a, 0xfe, + 0x00, 0xf0, 0xd4, 0xf8, 0x00, 0xf0, 0xb4, 0xf8, + 0x00, 0xf0, 0x78, 0xfe, 0x00, 0xf0, 0x4e, 0xfe, + 0x00, 0xf0, 0xde, 0xf8, 0xff, 0xf7, 0xac, 0xfd, + 0x3c, 0x00, 0x4c, 0x1e, 0x04, 0x00, 0x00, 0xf0, + 0x8c, 0xf8, 0x00, 0xf0, 0xf8, 0xfa, 0xff, 0xf7, + 0x76, 0xfb, 0xff, 0xf7, 0x20, 0xfe, 0x01, 0xf0, + 0xa6, 0xfa, 0x00, 0xf0, 0x48, 0xfb, 0x00, 0xf0, + 0x7c, 0xfe, 0x00, 0xf0, 0x5c, 0xf9, 0xbe, 0xf7, + 0x57, 0xfd, 0x00, 0x20, 0x80, 0xbd, 0x80, 0x38, + 0x01, 0x00, 0x01, 0x49, 0x00, 0x20, 0x08, 0x60, + 0x70, 0x47, 0xa8, 0x7e, 0x01, 0x00, 0x10, 0xb5, + 0x04, 0x1c, 0x3c, 0x00, 0x88, 0x1e, 0x04, 0x00, + 0x01, 0xd1, 0xbf, 0xf7, 0x39, 0xfa, 0x0f, 0x48, + 0x7d, 0x21, 0xc9, 0x00, 0x84, 0x60, 0x01, 0x80, + 0x0d, 0x49, 0x01, 0x61, 0x80, 0x21, 0x41, 0x80, + 0x00, 0x21, 0xc1, 0x60, 0x01, 0x62, 0x0b, 0x48, + 0x41, 0x80, 0x14, 0x21, 0x81, 0x80, 0x07, 0x21, + 0x41, 0x81, 0x06, 0x4a, 0x46, 0x23, 0x04, 0x32, + 0x05, 0x24, 0x13, 0x70, 0x54, 0x70, 0x0a, 0x21, + 0x91, 0x70, 0x81, 0x76, 0x3c, 0x00, 0xc4, 0x1e, + 0x04, 0x00, 0x03, 0x76, 0x04, 0x81, 0x10, 0xbd, + 0x00, 0x00, 0xc8, 0x74, 0x01, 0x00, 0x00, 0x87, + 0x93, 0x03, 0x30, 0x00, 0x07, 0x00, 0x09, 0x48, + 0x80, 0xb5, 0x01, 0x69, 0x42, 0x69, 0x11, 0x43, + 0x82, 0x69, 0xc0, 0x69, 0x11, 0x43, 0x01, 0x43, + 0x00, 0x22, 0x03, 0x20, 0xc6, 0xf7, 0xbf, 0xfc, + 0xcc, 0xf7, 0x1b, 0xfa, 0x00, 0x20, 0xc2, 0xf7, + 0x92, 0xf9, 0x80, 0xbd, 0x00, 0x00, 0x3c, 0x00, + 0x00, 0x1f, 0x04, 0x00, 0xa4, 0x6c, 0x01, 0x00, + 0x05, 0x48, 0x80, 0xb5, 0x00, 0x21, 0x81, 0x60, + 0x02, 0x21, 0xc1, 0x60, 0x03, 0x39, 0x41, 0x60, + 0xc7, 0xf7, 0x3a, 0xff, 0x80, 0xbd, 0x00, 0x00, + 0x40, 0x20, 0x07, 0x00, 0x08, 0xb5, 0x6a, 0x46, + 0x04, 0x49, 0x15, 0x20, 0xbf, 0xf7, 0x54, 0xf8, + 0x01, 0x20, 0x03, 0x49, 0x40, 0x05, 0x08, 0x60, + 0x48, 0x60, 0x08, 0xbd, 0xa5, 0x21, 0x01, 0x00, + 0x3c, 0x00, 0x3c, 0x1f, 0x04, 0x00, 0x00, 0x10, + 0x07, 0x00, 0x70, 0x47, 0x00, 0x00, 0x06, 0x48, + 0x80, 0xb5, 0x80, 0x68, 0xc0, 0x01, 0x80, 0x0f, + 0x05, 0xd1, 0x03, 0x22, 0xc1, 0x43, 0xc6, 0xf7, + 0xba, 0xfc, 0xd6, 0xf7, 0x00, 0xfe, 0x80, 0xbd, + 0x00, 0x00, 0x10, 0x00, 0x07, 0x00, 0x70, 0x47, + 0x00, 0x00, 0x80, 0xb5, 0x02, 0x21, 0x2a, 0x20, + 0x06, 0x4a, 0xd1, 0xf7, 0xea, 0xfb, 0x00, 0x22, + 0x07, 0x20, 0x3c, 0x00, 0x78, 0x1f, 0x04, 0x00, + 0x04, 0x49, 0xbe, 0xf7, 0xed, 0xfe, 0x04, 0x48, + 0xc7, 0xf7, 0x58, 0xfc, 0x80, 0xbd, 0x00, 0x00, + 0x8d, 0x89, 0x00, 0x00, 0xd5, 0x9b, 0x00, 0x00, + 0x10, 0x46, 0x01, 0x00, 0x02, 0x48, 0x00, 0x21, + 0x00, 0x22, 0x00, 0x23, 0x0e, 0xc0, 0x70, 0x47, + 0x80, 0x6e, 0x01, 0x00, 0x80, 0xb5, 0x02, 0x21, + 0x2c, 0x20, 0x06, 0x4a, 0xd1, 0xf7, 0xcc, 0xfb, + 0x00, 0x22, 0x00, 0x20, 0x3c, 0x00, 0xb4, 0x1f, + 0x04, 0x00, 0x04, 0x49, 0xbe, 0xf7, 0xcf, 0xfe, + 0x04, 0x49, 0x02, 0x20, 0xc8, 0xf7, 0x0b, 0xfa, + 0x80, 0xbd, 0x05, 0x8a, 0x00, 0x00, 0xe9, 0x9b, + 0x00, 0x00, 0xb1, 0x8b, 0x00, 0x00, 0x02, 0x48, + 0x00, 0x21, 0x00, 0x22, 0x00, 0x23, 0x0e, 0xc0, + 0x70, 0x47, 0x10, 0x75, 0x01, 0x00, 0x80, 0xb5, + 0x02, 0x21, 0x2b, 0x20, 0x04, 0x4a, 0xd1, 0xf7, + 0xae, 0xfb, 0x00, 0x22, 0x02, 0x20, 0x3c, 0x00, + 0xf0, 0x1f, 0x04, 0x00, 0x02, 0x49, 0xbe, 0xf7, + 0xb1, 0xfe, 0x80, 0xbd, 0x2d, 0x8a, 0x00, 0x00, + 0x8d, 0x8c, 0x00, 0x00, 0x70, 0x47, 0x00, 0x00, + 0x80, 0xb5, 0x02, 0x21, 0x2d, 0x20, 0x07, 0x4a, + 0xd1, 0xf7, 0x9c, 0xfb, 0x00, 0x22, 0x01, 0x20, + 0x05, 0x49, 0xbe, 0xf7, 0x9f, 0xfe, 0x05, 0x48, + 0xcb, 0xf7, 0x56, 0xfa, 0x04, 0x48, 0xcc, 0xf7, + 0xf7, 0xf8, 0x80, 0xbd, 0xad, 0x8a, 0x00, 0x00, + 0x3c, 0x00, 0x2c, 0x20, 0x04, 0x00, 0x21, 0xe2, + 0x00, 0x00, 0xf9, 0xdf, 0x00, 0x00, 0x20, 0x44, + 0x01, 0x00, 0x70, 0x47, 0x00, 0x00, 0x02, 0x49, + 0x00, 0x20, 0x08, 0x60, 0x01, 0x20, 0x48, 0x60, + 0x70, 0x47, 0xac, 0x79, 0x01, 0x00, 0x80, 0xb5, + 0x02, 0x49, 0x0d, 0x20, 0xd0, 0xf7, 0x9b, 0xf9, + 0x80, 0xbd, 0x61, 0x98, 0x00, 0x00, 0x70, 0x47, + 0x00, 0x00, 0x80, 0xb5, 0xcd, 0xf7, 0x77, 0xf9, + 0x03, 0x49, 0x3c, 0x00, 0x68, 0x20, 0x04, 0x00, + 0x08, 0x60, 0x01, 0x1c, 0x02, 0x48, 0xcd, 0xf7, + 0x97, 0xf9, 0x80, 0xbd, 0xa8, 0x79, 0x01, 0x00, + 0xc4, 0x60, 0x01, 0x00, 0x80, 0xb5, 0x00, 0xf0, + 0x29, 0xf8, 0x80, 0xbd, 0x80, 0xb5, 0x86, 0xb0, + 0x0c, 0x48, 0xc3, 0xf7, 0x6d, 0xfd, 0xd6, 0xf7, + 0xd3, 0xfb, 0x0b, 0x48, 0x0d, 0x49, 0x00, 0x90, + 0x0a, 0x48, 0x04, 0x91, 0x01, 0x90, 0x0a, 0x48, + 0x69, 0x46, 0x02, 0x90, 0x3c, 0x00, 0xa4, 0x20, + 0x04, 0x00, 0x00, 0x20, 0x03, 0x90, 0x05, 0x90, + 0x01, 0x20, 0xc3, 0xf7, 0x00, 0xfd, 0x07, 0x49, + 0x03, 0x20, 0xd0, 0xf7, 0x6a, 0xf9, 0x06, 0xb0, + 0x80, 0xbd, 0x20, 0xf7, 0x01, 0x00, 0x11, 0x87, + 0x01, 0x00, 0x95, 0x87, 0x01, 0x00, 0x55, 0x87, + 0x01, 0x00, 0x98, 0xd9, 0x01, 0x00, 0x6d, 0x87, + 0x01, 0x00, 0x80, 0xb5, 0x01, 0x20, 0xd6, 0xf7, + 0x90, 0xfc, 0x03, 0x49, 0x00, 0x20, 0x3c, 0x00, + 0xe0, 0x20, 0x04, 0x00, 0x08, 0x60, 0x48, 0x60, + 0x02, 0x48, 0x14, 0x39, 0x48, 0x60, 0x80, 0xbd, + 0x90, 0xd9, 0x01, 0x00, 0x3d, 0x82, 0x01, 0x00, + 0x70, 0xb5, 0x00, 0x26, 0x09, 0x4c, 0x09, 0x4d, + 0x26, 0x60, 0x66, 0x60, 0x44, 0x21, 0x50, 0x35, + 0x28, 0x1c, 0xa6, 0x61, 0xbe, 0xf7, 0xc8, 0xf9, + 0x14, 0x20, 0xe0, 0x60, 0xe8, 0x63, 0x28, 0x20, + 0xe8, 0x61, 0xa0, 0x60, 0x28, 0x64, 0x2e, 0x70, + 0x3c, 0x00, 0x1c, 0x21, 0x04, 0x00, 0x70, 0xbd, + 0x00, 0x00, 0xa4, 0x6e, 0x01, 0x00, 0x80, 0xb5, + 0x02, 0x21, 0x18, 0x20, 0x04, 0x4a, 0xd1, 0xf7, + 0x0c, 0xfb, 0x03, 0x49, 0x08, 0x20, 0xd0, 0xf7, + 0x2a, 0xf9, 0x80, 0xbd, 0x00, 0x00, 0x15, 0x9c, + 0x00, 0x00, 0x69, 0x9c, 0x00, 0x00, 0xfe, 0xb5, + 0x26, 0x4d, 0x28, 0x78, 0xc0, 0x07, 0x0c, 0xd4, + 0x25, 0x49, 0x00, 0x20, 0x08, 0x70, 0x28, 0x70, + 0x24, 0x48, 0x3c, 0x00, 0x58, 0x21, 0x04, 0x00, + 0x81, 0x78, 0x49, 0x08, 0x49, 0x00, 0x81, 0x70, + 0x81, 0x78, 0x01, 0x22, 0x11, 0x43, 0x81, 0x70, + 0x00, 0x24, 0xff, 0x26, 0x1f, 0x4f, 0x01, 0x36, + 0x21, 0x1c, 0x01, 0xa8, 0xc6, 0xf7, 0x32, 0xf8, + 0x00, 0xab, 0x18, 0x79, 0x01, 0x28, 0x1f, 0xd0, + 0x02, 0x28, 0x19, 0xd0, 0x03, 0x28, 0x1e, 0xd1, + 0xb8, 0x68, 0x00, 0x21, 0xb0, 0x43, 0xb8, 0x60, + 0x78, 0x68, 0x30, 0x43, 0x3c, 0x00, 0x94, 0x21, + 0x04, 0x00, 0x78, 0x60, 0x3a, 0x68, 0x32, 0x40, + 0xa0, 0x20, 0x05, 0xe0, 0x3b, 0x68, 0x33, 0x40, + 0x93, 0x42, 0x01, 0xd0, 0x01, 0x21, 0x01, 0xe0, + 0x01, 0x38, 0xf7, 0xd2, 0x78, 0x68, 0xb0, 0x43, + 0x78, 0x60, 0x00, 0x29, 0x03, 0xd0, 0x01, 0xa8, + 0x00, 0xf0, 0x27, 0xff, 0x02, 0xe0, 0x01, 0xa8, + 0x00, 0xf0, 0x45, 0xff, 0x01, 0x34, 0x24, 0x06, + 0x24, 0x16, 0x06, 0x2c, 0xcf, 0xdb, 0x3c, 0x00, + 0xd0, 0x21, 0x04, 0x00, 0x04, 0x49, 0x02, 0x22, + 0x08, 0x78, 0x10, 0x43, 0x08, 0x70, 0x28, 0x70, + 0xfe, 0xbd, 0x00, 0x00, 0x04, 0x00, 0x07, 0x00, + 0xe0, 0x60, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x10, 0x00, 0x07, 0x00, 0xb0, 0xb5, 0x00, 0x20, + 0x15, 0x23, 0x14, 0x49, 0x01, 0x25, 0x42, 0x00, + 0x8d, 0x54, 0x52, 0x18, 0x01, 0x30, 0x0e, 0x28, + 0x53, 0x70, 0xf8, 0xd3, 0x0f, 0x48, 0x1c, 0x22, + 0x3c, 0x00, 0x0c, 0x22, 0x04, 0x00, 0x1c, 0x38, + 0xbe, 0xf7, 0x73, 0xf9, 0x0d, 0x48, 0x0e, 0x21, + 0x2a, 0x38, 0xbe, 0xf7, 0x1c, 0xf9, 0x0b, 0x49, + 0x00, 0x20, 0x08, 0x60, 0x0b, 0x4c, 0x2a, 0x21, + 0x20, 0x1c, 0xbe, 0xf7, 0x14, 0xf9, 0x25, 0x70, + 0x0e, 0x20, 0x60, 0x70, 0x17, 0x20, 0xa0, 0x70, + 0x07, 0x48, 0x53, 0x21, 0x01, 0x70, 0x45, 0x21, + 0x41, 0x70, 0x20, 0x21, 0x81, 0x70, 0xb0, 0xbd, + 0x00, 0x00, 0x3c, 0x00, 0x48, 0x22, 0x04, 0x00, + 0xe6, 0x78, 0x01, 0x00, 0xe4, 0x62, 0x01, 0x00, + 0xeb, 0x62, 0x01, 0x00, 0xe8, 0x62, 0x01, 0x00, + 0x0c, 0x49, 0x0d, 0x48, 0x00, 0x22, 0x41, 0x60, + 0x0c, 0x49, 0x81, 0x60, 0x0c, 0x49, 0xc1, 0x60, + 0x0c, 0x49, 0x01, 0x61, 0x0c, 0x49, 0x41, 0x61, + 0x0c, 0x49, 0x82, 0x61, 0xc1, 0x61, 0x0c, 0x49, + 0x01, 0x62, 0x0c, 0x49, 0x41, 0x62, 0x0c, 0x49, + 0x81, 0x62, 0x0c, 0x49, 0x3c, 0x00, 0x84, 0x22, + 0x04, 0x00, 0xc1, 0x62, 0xc2, 0x63, 0x70, 0x47, + 0x00, 0x00, 0xc9, 0x75, 0x00, 0x00, 0x28, 0x7a, + 0x01, 0x00, 0xc1, 0x75, 0x00, 0x00, 0x81, 0x75, + 0x00, 0x00, 0x99, 0x75, 0x00, 0x00, 0xcd, 0x75, + 0x00, 0x00, 0x89, 0x75, 0x00, 0x00, 0x91, 0x75, + 0x00, 0x00, 0xb5, 0x75, 0x00, 0x00, 0x8d, 0x75, + 0x00, 0x00, 0xc5, 0x75, 0x00, 0x00, 0xb0, 0xb5, + 0x0e, 0x48, 0x0e, 0x49, 0x08, 0x60, 0x3c, 0x00, + 0xc0, 0x22, 0x04, 0x00, 0x08, 0x31, 0xc0, 0xf7, + 0x43, 0xfe, 0x0c, 0x49, 0x00, 0x25, 0x48, 0x60, + 0x0b, 0x48, 0x0a, 0x4c, 0x05, 0x60, 0x0b, 0x48, + 0x80, 0x3c, 0x05, 0x60, 0x10, 0x20, 0x20, 0x71, + 0xe0, 0x70, 0xa0, 0x71, 0x60, 0x71, 0x27, 0x20, + 0xc0, 0x43, 0xc3, 0xf7, 0xf7, 0xfb, 0x28, 0x20, + 0xc3, 0xf7, 0xfc, 0xfb, 0x25, 0x72, 0xb0, 0xbd, + 0xff, 0x3f, 0x00, 0x00, 0x2c, 0x7d, 0x01, 0x00, + 0x3c, 0x00, 0xfc, 0x22, 0x04, 0x00, 0x1c, 0x67, + 0x01, 0x00, 0x20, 0x67, 0x01, 0x00, 0x80, 0xb5, + 0x2c, 0x21, 0x01, 0x48, 0xbe, 0xf7, 0xc7, 0xf8, + 0x80, 0xbd, 0x3c, 0x7e, 0x01, 0x00, 0x80, 0xb5, + 0x38, 0x21, 0x01, 0x48, 0xbe, 0xf7, 0xbf, 0xf8, + 0x80, 0xbd, 0x68, 0x7e, 0x01, 0x00, 0x80, 0xb5, + 0x02, 0x21, 0x0e, 0x20, 0x02, 0x4a, 0xd1, 0xf7, + 0x0c, 0xfa, 0x80, 0xbd, 0x00, 0x00, 0x21, 0xe0, + 0x00, 0x00, 0x3c, 0x00, 0x38, 0x23, 0x04, 0x00, + 0x70, 0x47, 0x00, 0x00, 0xf0, 0xb5, 0x85, 0xb0, + 0x00, 0x27, 0x00, 0xab, 0x2f, 0x4e, 0x1f, 0x81, + 0x00, 0x25, 0x00, 0x24, 0x28, 0x1c, 0xd6, 0xf7, + 0xa1, 0xfb, 0x02, 0x2d, 0x03, 0xd1, 0xd6, 0xf7, + 0xf5, 0xfa, 0x00, 0x28, 0x0c, 0xd0, 0x01, 0x24, + 0x01, 0x2d, 0x03, 0xd1, 0x07, 0x20, 0x00, 0xab, + 0x18, 0x71, 0x01, 0xe0, 0x00, 0xab, 0x1f, 0x71, + 0x00, 0xab, 0x18, 0x79, 0x3c, 0x00, 0x74, 0x23, + 0x04, 0x00, 0xd6, 0xf7, 0x08, 0xfc, 0x00, 0x2c, + 0x39, 0xd0, 0x08, 0x21, 0x03, 0xa8, 0xd6, 0xf7, + 0xf2, 0xfa, 0x00, 0xab, 0x18, 0x7b, 0xfe, 0x28, + 0x31, 0xd1, 0x58, 0x7b, 0x01, 0x28, 0x2a, 0xd1, + 0x02, 0x21, 0x02, 0xa8, 0xd6, 0xf7, 0xe7, 0xfa, + 0x00, 0xab, 0x18, 0x89, 0x00, 0x28, 0x26, 0xd0, + 0x18, 0x89, 0x18, 0x49, 0x88, 0x42, 0x22, 0xd0, + 0x19, 0x89, 0x00, 0x20, 0xbf, 0xf7, 0x3c, 0x00, + 0xb0, 0x23, 0x04, 0x00, 0x13, 0xf9, 0x04, 0x1c, + 0x00, 0x69, 0x00, 0xab, 0x19, 0x89, 0xd6, 0xf7, + 0xd5, 0xfa, 0x20, 0x68, 0x00, 0xab, 0x1a, 0x89, + 0x01, 0x1c, 0x08, 0x31, 0x08, 0x3a, 0xcb, 0xf7, + 0xa1, 0xf9, 0x00, 0x28, 0x06, 0xd0, 0x02, 0x28, + 0x04, 0xd0, 0x02, 0x21, 0x94, 0x20, 0x37, 0x60, + 0xbe, 0xf7, 0x62, 0xff, 0x20, 0x1c, 0xbf, 0xf7, + 0xc7, 0xf8, 0xd4, 0xe7, 0x01, 0x21, 0x94, 0x20, + 0x3c, 0x00, 0xec, 0x23, 0x04, 0x00, 0xbe, 0xf7, + 0x5a, 0xff, 0xd5, 0xf7, 0x26, 0xff, 0x01, 0x35, + 0x2d, 0x06, 0x2d, 0x0e, 0x04, 0x2d, 0xa5, 0xd3, + 0x05, 0xb0, 0xf0, 0xbd, 0x00, 0x00, 0x58, 0x57, + 0x01, 0x00, 0xff, 0xff, 0x00, 0x00, 0x0a, 0x48, + 0x00, 0x21, 0x02, 0x1c, 0x18, 0x32, 0x80, 0xb5, + 0x09, 0x4b, 0x02, 0xe0, 0x01, 0x60, 0x83, 0x80, + 0x08, 0x30, 0x82, 0x42, 0xfa, 0xd1, 0x04, 0x48, + 0x6c, 0x21, 0x3c, 0x00, 0x28, 0x24, 0x04, 0x00, + 0x6c, 0x38, 0xbe, 0xf7, 0x37, 0xf8, 0x04, 0x49, + 0x02, 0x20, 0xc7, 0xf7, 0xd1, 0xff, 0x80, 0xbd, + 0x7c, 0x79, 0x01, 0x00, 0xfc, 0x05, 0x00, 0x00, + 0x9d, 0x75, 0x00, 0x00, 0x80, 0xb5, 0x02, 0x21, + 0x26, 0x20, 0x0d, 0x4a, 0xd1, 0xf7, 0x7c, 0xf9, + 0x0c, 0x48, 0xc8, 0xf7, 0x73, 0xff, 0x0c, 0x48, + 0xc8, 0xf7, 0x76, 0xff, 0x0b, 0x49, 0x10, 0x20, + 0xcf, 0xf7, 0x94, 0xff, 0x3c, 0x00, 0x64, 0x24, + 0x04, 0x00, 0x0a, 0x49, 0x0c, 0x20, 0xcf, 0xf7, + 0x90, 0xff, 0x09, 0x49, 0x00, 0x20, 0xc7, 0xf7, + 0xb2, 0xff, 0xcc, 0xf7, 0x6e, 0xff, 0x07, 0x49, + 0x08, 0x60, 0x80, 0xbd, 0x00, 0x00, 0x9d, 0xa6, + 0x00, 0x00, 0xa9, 0xa4, 0x00, 0x00, 0x81, 0xa4, + 0x00, 0x00, 0x31, 0xa7, 0x00, 0x00, 0xb9, 0x6d, + 0x00, 0x00, 0xbd, 0xa6, 0x00, 0x00, 0x0c, 0x79, + 0x01, 0x00, 0x02, 0x49, 0x08, 0x78, 0x3c, 0x00, + 0xa0, 0x24, 0x04, 0x00, 0x40, 0x08, 0x40, 0x00, + 0x08, 0x70, 0x70, 0x47, 0x58, 0x00, 0x07, 0x00, + 0x00, 0x21, 0x08, 0x48, 0x80, 0xb5, 0x41, 0x61, + 0x81, 0x61, 0x01, 0x70, 0x41, 0x70, 0x41, 0x60, + 0x81, 0x60, 0x14, 0x22, 0xc2, 0x60, 0x01, 0x61, + 0x42, 0x62, 0xc1, 0x61, 0xff, 0xf7, 0x04, 0xf8, + 0x80, 0xbd, 0x00, 0x00, 0x1c, 0x75, 0x01, 0x00, + 0x80, 0xb5, 0x02, 0x21, 0x1d, 0x20, 0x04, 0x4a, + 0x3c, 0x00, 0xdc, 0x24, 0x04, 0x00, 0xd1, 0xf7, + 0x34, 0xf9, 0x03, 0x49, 0x08, 0x20, 0xcf, 0xf7, + 0x52, 0xff, 0x80, 0xbd, 0x00, 0x00, 0x11, 0xe3, + 0x00, 0x00, 0x09, 0xe4, 0x00, 0x00, 0x80, 0xb5, + 0x01, 0x21, 0x25, 0x20, 0x0a, 0x4a, 0xd1, 0xf7, + 0x24, 0xf9, 0xcc, 0xf7, 0x28, 0xff, 0x08, 0x49, + 0x08, 0x62, 0x08, 0x49, 0x01, 0x20, 0xcf, 0xf7, + 0x3e, 0xff, 0x07, 0x49, 0x02, 0x20, 0xcf, 0xf7, + 0x3a, 0xff, 0x3c, 0x00, 0x18, 0x25, 0x04, 0x00, + 0xfe, 0xf7, 0xe6, 0xff, 0x05, 0x48, 0xc1, 0xf7, + 0xe1, 0xf9, 0x80, 0xbd, 0x29, 0xa9, 0x00, 0x00, + 0x1c, 0x75, 0x01, 0x00, 0xa1, 0xaa, 0x00, 0x00, + 0x2d, 0x19, 0x00, 0x00, 0x45, 0xa8, 0x00, 0x00, + 0x10, 0xb5, 0x06, 0x4c, 0x0c, 0x22, 0x22, 0x70, + 0xa0, 0x18, 0x05, 0x49, 0xbd, 0xf7, 0xd8, 0xff, + 0x00, 0x20, 0xc8, 0xf7, 0x85, 0xfb, 0x01, 0x20, + 0xa0, 0x60, 0x10, 0xbd, 0x3c, 0x00, 0x54, 0x25, + 0x04, 0x00, 0xa4, 0x69, 0x01, 0x00, 0x90, 0x57, + 0x01, 0x00, 0xb0, 0xb5, 0x1f, 0x4c, 0x00, 0x25, + 0x65, 0x80, 0x01, 0x20, 0x20, 0x70, 0x0a, 0x20, + 0xa0, 0x80, 0x90, 0x20, 0xe0, 0x80, 0x30, 0x20, + 0x20, 0x81, 0x90, 0x20, 0x60, 0x81, 0x30, 0x20, + 0xa0, 0x81, 0x17, 0x48, 0x04, 0x22, 0x07, 0x21, + 0x12, 0x30, 0xbe, 0xf7, 0x4c, 0xf8, 0x14, 0x48, + 0x04, 0x22, 0x05, 0x21, 0x16, 0x30, 0x3c, 0x00, + 0x90, 0x25, 0x04, 0x00, 0xbe, 0xf7, 0x46, 0xf8, + 0x12, 0x48, 0x11, 0x4a, 0xe0, 0x81, 0x20, 0x82, + 0x70, 0x32, 0x15, 0x70, 0x55, 0x70, 0x00, 0x20, + 0x3c, 0x23, 0x41, 0x01, 0x43, 0x43, 0x89, 0x18, + 0xf4, 0x31, 0x9b, 0x18, 0x01, 0x30, 0x04, 0x28, + 0x59, 0x60, 0xf5, 0xdb, 0x08, 0x48, 0x06, 0x22, + 0x1a, 0x30, 0x09, 0x49, 0xbd, 0xf7, 0x9a, 0xff, + 0x07, 0x48, 0x05, 0x4c, 0x0c, 0x30, 0x0f, 0xc8, + 0x3c, 0x00, 0xcc, 0x25, 0x04, 0x00, 0x20, 0x34, + 0x0f, 0xc4, 0x20, 0x21, 0x20, 0x1c, 0xbd, 0xf7, + 0x62, 0xff, 0xb0, 0xbd, 0x00, 0x00, 0xf8, 0x60, + 0x01, 0x00, 0x2c, 0x09, 0x00, 0x00, 0x58, 0x40, + 0x01, 0x00, 0x70, 0x47, 0x00, 0x00, 0x07, 0x48, + 0x10, 0xb5, 0x00, 0x68, 0x00, 0x28, 0x08, 0xd0, + 0x06, 0x48, 0xbe, 0xf7, 0x9c, 0xfe, 0x04, 0x1c, + 0xff, 0xf7, 0x9d, 0xfe, 0x20, 0x1c, 0xbe, 0xf7, + 0x96, 0xfe, 0x3c, 0x00, 0x08, 0x26, 0x04, 0x00, + 0x10, 0xbd, 0x00, 0x00, 0x58, 0x57, 0x01, 0x00, + 0xb5, 0xad, 0x00, 0x00, 0x04, 0x49, 0x80, 0xb5, + 0x00, 0x20, 0x88, 0x70, 0x02, 0x21, 0x20, 0x20, + 0x02, 0x4a, 0xd1, 0xf7, 0x91, 0xf8, 0x80, 0xbd, + 0xb4, 0x79, 0x01, 0x00, 0x25, 0xb5, 0x00, 0x00, + 0x80, 0xb5, 0xcc, 0xf7, 0x8f, 0xfe, 0x01, 0x49, + 0x48, 0x61, 0x80, 0xbd, 0xb4, 0x79, 0x01, 0x00, + 0x80, 0xb5, 0x18, 0x21, 0x3c, 0x00, 0x44, 0x26, + 0x04, 0x00, 0x14, 0x48, 0xbd, 0xf7, 0x29, 0xff, + 0x14, 0x48, 0x01, 0x21, 0x01, 0x70, 0x00, 0x21, + 0xc1, 0x60, 0x41, 0x70, 0x01, 0x61, 0x00, 0xf0, + 0x02, 0xf9, 0x00, 0xf0, 0xaa, 0xf8, 0x00, 0xf0, + 0x1e, 0xf8, 0x00, 0xf0, 0xba, 0xf9, 0x00, 0xf0, + 0xcc, 0xf9, 0x00, 0xf0, 0x20, 0xf9, 0x00, 0xf0, + 0x64, 0xf9, 0x00, 0xf0, 0xce, 0xf9, 0x00, 0xf0, + 0xfc, 0xf8, 0x00, 0xf0, 0x82, 0xf9, 0x3c, 0x00, + 0x80, 0x26, 0x04, 0x00, 0x00, 0xf0, 0x28, 0xf8, + 0x00, 0xf0, 0x6e, 0xf8, 0x00, 0xf0, 0x4a, 0xf8, + 0xff, 0xf7, 0xc2, 0xff, 0x00, 0xf0, 0x72, 0xf9, + 0x80, 0xbd, 0x00, 0x00, 0x40, 0x7c, 0x01, 0x00, + 0x18, 0x63, 0x01, 0x00, 0xb0, 0xb5, 0x08, 0x4c, + 0x00, 0x25, 0x08, 0x48, 0x25, 0x77, 0x20, 0x60, + 0xce, 0xf7, 0xf0, 0xfd, 0x00, 0x20, 0xe5, 0x62, + 0xd0, 0xf7, 0xd0, 0xfa, 0x21, 0x1f, 0x08, 0x80, + 0x3c, 0x00, 0xbc, 0x26, 0x04, 0x00, 0xd0, 0xf7, + 0x6c, 0xfb, 0xb0, 0xbd, 0x00, 0x00, 0xd4, 0x79, + 0x01, 0x00, 0x95, 0x75, 0x00, 0x00, 0x80, 0xb5, + 0xcc, 0xf7, 0xc1, 0xfc, 0x80, 0xbd, 0x05, 0x49, + 0x80, 0xb5, 0x00, 0x20, 0x08, 0x70, 0x48, 0x70, + 0x03, 0x48, 0x04, 0x49, 0x03, 0x4a, 0x08, 0x30, + 0xcc, 0xf7, 0x27, 0xfe, 0x80, 0xbd, 0x2c, 0x63, + 0x01, 0x00, 0xed, 0xbc, 0x00, 0x00, 0x4d, 0xbd, + 0x00, 0x00, 0x3c, 0x00, 0xf8, 0x26, 0x04, 0x00, + 0x80, 0xb5, 0xcc, 0xf7, 0x2b, 0xfe, 0x05, 0x49, + 0x48, 0x60, 0x01, 0x1c, 0x04, 0x48, 0xcc, 0xf7, + 0x4b, 0xfe, 0x04, 0x49, 0x03, 0x20, 0xcf, 0xf7, + 0x3d, 0xfe, 0x80, 0xbd, 0x2c, 0x63, 0x01, 0x00, + 0xc4, 0x60, 0x01, 0x00, 0xc1, 0xbc, 0x00, 0x00, + 0x04, 0x48, 0x00, 0x21, 0x00, 0x22, 0x00, 0x23, + 0x0e, 0xc0, 0x08, 0xc0, 0x02, 0x49, 0x10, 0x38, + 0x01, 0x60, 0x70, 0x47, 0x3c, 0x00, 0x34, 0x27, + 0x04, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x1c, 0xe6, + 0x01, 0x00, 0x80, 0xb5, 0xcc, 0xf7, 0x09, 0xfe, + 0x05, 0x49, 0x05, 0x4a, 0x48, 0x60, 0x02, 0x21, + 0x24, 0x20, 0xd0, 0xf7, 0xfc, 0xff, 0x03, 0x48, + 0xc9, 0xf7, 0x6b, 0xfd, 0x80, 0xbd, 0x04, 0x7a, + 0x01, 0x00, 0x69, 0xbe, 0x00, 0x00, 0x71, 0xeb, + 0x00, 0x00, 0x10, 0xb5, 0x04, 0x4c, 0x14, 0x21, + 0x20, 0x1c, 0xbd, 0xf7, 0x96, 0xfe, 0x3c, 0x00, + 0x70, 0x27, 0x04, 0x00, 0x02, 0x48, 0x20, 0x60, + 0x10, 0xbd, 0x00, 0x00, 0x14, 0x7a, 0x01, 0x00, + 0xec, 0xe5, 0x01, 0x00, 0x80, 0xb5, 0xcc, 0xf7, + 0xe7, 0xfd, 0x07, 0x49, 0x07, 0x4a, 0x48, 0x60, + 0x02, 0x21, 0x1f, 0x20, 0xd0, 0xf7, 0xda, 0xff, + 0x05, 0x49, 0x01, 0x20, 0x08, 0x60, 0x05, 0x49, + 0x0c, 0x20, 0xcf, 0xf7, 0xf5, 0xfd, 0x80, 0xbd, + 0x14, 0x7a, 0x01, 0x00, 0xd5, 0xbf, 0x00, 0x00, + 0x3c, 0x00, 0xac, 0x27, 0x04, 0x00, 0x80, 0x5a, + 0x01, 0x00, 0x85, 0xff, 0x00, 0x00, 0x80, 0xb5, + 0xff, 0xf7, 0x4f, 0xfd, 0x01, 0x21, 0x21, 0x20, + 0x02, 0x4a, 0xd0, 0xf7, 0xc2, 0xff, 0x80, 0xbd, + 0x00, 0x00, 0xc9, 0xc1, 0x00, 0x00, 0x80, 0xb5, + 0xcc, 0xf7, 0xc1, 0xfd, 0x02, 0x49, 0x08, 0x63, + 0xc9, 0xf7, 0x57, 0xfd, 0x80, 0xbd, 0x28, 0x7a, + 0x01, 0x00, 0x10, 0xb5, 0xcc, 0xf7, 0xb7, 0xfd, + 0x16, 0x4c, 0x3c, 0x00, 0xe8, 0x27, 0x04, 0x00, + 0x20, 0x61, 0xcc, 0xf7, 0xb3, 0xfd, 0x60, 0x61, + 0x14, 0x48, 0x15, 0x49, 0x08, 0x60, 0x16, 0x49, + 0x14, 0x48, 0x08, 0x60, 0xcc, 0xf7, 0xaa, 0xfd, + 0x14, 0x49, 0x08, 0x60, 0x00, 0xf0, 0x34, 0xf8, + 0xff, 0xf7, 0xe0, 0xff, 0xff, 0xf7, 0x5e, 0xff, + 0x00, 0xf0, 0x04, 0xf9, 0x00, 0xf0, 0x8e, 0xf8, + 0xff, 0xf7, 0x6e, 0xff, 0xff, 0xf7, 0xb0, 0xff, + 0xff, 0xf7, 0x8c, 0xff, 0x3c, 0x00, 0x24, 0x28, + 0x04, 0x00, 0xff, 0xf7, 0x04, 0xff, 0x00, 0xf0, + 0xaa, 0xf8, 0x0a, 0x48, 0xbf, 0xf7, 0xbd, 0xff, + 0xc9, 0xf7, 0xbb, 0xfd, 0x09, 0x49, 0x00, 0x20, + 0xcf, 0xf7, 0xa7, 0xfd, 0x10, 0xbd, 0x40, 0x7c, + 0x01, 0x00, 0x7d, 0xb7, 0x00, 0x00, 0x18, 0x7e, + 0x01, 0x00, 0xbd, 0xb8, 0x00, 0x00, 0x1c, 0x7e, + 0x01, 0x00, 0x20, 0x7e, 0x01, 0x00, 0xb9, 0xba, + 0x00, 0x00, 0x81, 0x24, 0x01, 0x00, 0x3c, 0x00, + 0x60, 0x28, 0x04, 0x00, 0x80, 0xb5, 0x38, 0x21, + 0x01, 0x48, 0xbd, 0xf7, 0x19, 0xfe, 0x80, 0xbd, + 0x90, 0x5c, 0x01, 0x00, 0x70, 0x47, 0x00, 0x00, + 0xb0, 0xb5, 0x0c, 0x4c, 0x0b, 0x4d, 0x00, 0x20, + 0x0c, 0x34, 0x60, 0x60, 0x25, 0x60, 0xe0, 0x60, + 0x0a, 0x20, 0x20, 0x81, 0x28, 0x1c, 0xc8, 0xf7, + 0x3f, 0xfd, 0x28, 0x1c, 0xc8, 0xf7, 0x3a, 0xfd, + 0x08, 0x3d, 0x68, 0x60, 0x04, 0x48, 0xc9, 0xf7, + 0x3c, 0x00, 0x9c, 0x28, 0x04, 0x00, 0x1b, 0xfd, + 0x20, 0x1c, 0xc0, 0xf7, 0x6e, 0xfa, 0x28, 0x80, + 0xb0, 0xbd, 0xb8, 0x7a, 0x01, 0x00, 0xd5, 0x33, + 0x01, 0x00, 0xf8, 0xb5, 0x1f, 0x4e, 0x1d, 0x4c, + 0x00, 0x20, 0x0c, 0x21, 0x41, 0x43, 0x82, 0x00, + 0x01, 0x30, 0x09, 0x19, 0x08, 0x31, 0x00, 0x06, + 0x00, 0x0e, 0x04, 0x28, 0xb1, 0x50, 0xf4, 0xd3, + 0x18, 0x48, 0x0c, 0x38, 0x30, 0x61, 0xce, 0xf7, + 0xf4, 0xf9, 0x3c, 0x00, 0xd8, 0x28, 0x04, 0x00, + 0x14, 0x4c, 0xa0, 0x78, 0x00, 0x09, 0x00, 0x01, + 0xa0, 0x70, 0x00, 0x27, 0xe7, 0x70, 0x67, 0x70, + 0x00, 0x24, 0xa5, 0x00, 0x70, 0x59, 0x07, 0x70, + 0x20, 0x1c, 0xbe, 0xf7, 0x53, 0xf9, 0x71, 0x59, + 0x08, 0x71, 0x00, 0x21, 0x20, 0x1c, 0xce, 0xf7, + 0x7d, 0xf9, 0x01, 0x34, 0x24, 0x06, 0x24, 0x0e, + 0x04, 0x2c, 0xee, 0xd3, 0x07, 0x4c, 0x20, 0x78, + 0x00, 0x09, 0x00, 0x01, 0x3c, 0x00, 0x14, 0x29, + 0x04, 0x00, 0x0a, 0x30, 0x20, 0x70, 0x20, 0x78, + 0xf0, 0x21, 0x88, 0x43, 0x30, 0x30, 0x20, 0x70, + 0xa0, 0x78, 0x0f, 0x21, 0x08, 0x43, 0xa0, 0x70, + 0xf8, 0xbd, 0x00, 0x50, 0x07, 0x00, 0x10, 0x7b, + 0x01, 0x00, 0x80, 0xb5, 0xcc, 0xf7, 0x9f, 0xfb, + 0x80, 0xbd, 0xb0, 0xb5, 0x0c, 0x4c, 0x0b, 0x4d, + 0x00, 0x20, 0x0c, 0x34, 0x60, 0x60, 0x25, 0x60, + 0xe0, 0x60, 0x0a, 0x20, 0x20, 0x81, 0x3c, 0x00, + 0x50, 0x29, 0x04, 0x00, 0x28, 0x1c, 0xc8, 0xf7, + 0xe1, 0xfc, 0x28, 0x1c, 0xc8, 0xf7, 0xd4, 0xfc, + 0x08, 0x3d, 0x68, 0x60, 0x20, 0x1c, 0xc0, 0xf7, + 0x0d, 0xfa, 0x28, 0x80, 0x02, 0x48, 0xc9, 0xf7, + 0x9b, 0xfc, 0xb0, 0xbd, 0x2c, 0x7b, 0x01, 0x00, + 0x49, 0x00, 0x01, 0x00, 0x80, 0xb5, 0xca, 0xf7, + 0x2f, 0xf8, 0x80, 0xbd, 0x70, 0x47, 0x00, 0x00, + 0xb0, 0xb5, 0x12, 0x4d, 0x3c, 0x21, 0x28, 0x1c, + 0x3c, 0x00, 0x8c, 0x29, 0x04, 0x00, 0xbd, 0xf7, + 0x86, 0xfd, 0x0f, 0x48, 0x28, 0x21, 0x3c, 0x30, + 0xbd, 0xf7, 0x81, 0xfd, 0x0d, 0x48, 0x00, 0x21, + 0x14, 0x38, 0x01, 0x61, 0xc1, 0x60, 0xff, 0x21, + 0x01, 0x70, 0x41, 0x70, 0x0a, 0x49, 0x0a, 0x4a, + 0x41, 0x60, 0x01, 0x21, 0x0c, 0x20, 0xd0, 0xf7, + 0xc8, 0xfe, 0x2c, 0x1c, 0x30, 0x34, 0x0c, 0x3d, + 0x00, 0x20, 0xd0, 0xf7, 0x4a, 0xf9, 0x20, 0x80, + 0x0c, 0x3c, 0x3c, 0x00, 0xc8, 0x29, 0x04, 0x00, + 0xac, 0x42, 0xf8, 0xd1, 0xb0, 0xbd, 0x00, 0x00, + 0x60, 0x7b, 0x01, 0x00, 0x20, 0xa1, 0x07, 0x00, + 0x35, 0xcd, 0x00, 0x00, 0x08, 0x49, 0x00, 0x20, + 0x0c, 0x22, 0x42, 0x43, 0x52, 0x18, 0x10, 0x71, + 0x01, 0x30, 0x05, 0x28, 0xf8, 0xdb, 0x04, 0x48, + 0x00, 0x21, 0x08, 0x38, 0x01, 0x70, 0x41, 0x60, + 0xff, 0x21, 0x41, 0x70, 0x70, 0x47, 0x00, 0x00, + 0x74, 0x7a, 0x01, 0x00, 0x3c, 0x00, 0x04, 0x2a, + 0x04, 0x00, 0x80, 0xb5, 0x78, 0x21, 0x01, 0x48, + 0xbd, 0xf7, 0x47, 0xfd, 0x80, 0xbd, 0xc4, 0x7b, + 0x01, 0x00, 0x80, 0xb5, 0xca, 0xf7, 0x97, 0xfa, + 0x80, 0xbd, 0x70, 0x47, 0x00, 0x00, 0x10, 0xb5, + 0x0b, 0x4c, 0xff, 0x21, 0x05, 0x31, 0x20, 0x1c, + 0xbd, 0xf7, 0x37, 0xfd, 0x09, 0x48, 0xf0, 0x21, + 0x08, 0x51, 0x20, 0x1c, 0x40, 0x30, 0xc5, 0xf7, + 0x8e, 0xf9, 0x6c, 0x21, 0x06, 0x48, 0x3c, 0x00, + 0x40, 0x2a, 0x04, 0x00, 0xbd, 0xf7, 0x2c, 0xfd, + 0x04, 0x48, 0xc0, 0x21, 0x6c, 0x30, 0xbd, 0xf7, + 0x27, 0xfd, 0x10, 0xbd, 0xc4, 0x69, 0x01, 0x00, + 0xb0, 0xd9, 0x01, 0x00, 0xc8, 0x6a, 0x01, 0x00, + 0xb0, 0xb5, 0x0b, 0x4d, 0x00, 0x24, 0x1c, 0x20, + 0x60, 0x43, 0x40, 0x19, 0x6c, 0x30, 0xc3, 0xf7, + 0x0f, 0xfe, 0x01, 0x34, 0x04, 0x2c, 0xf6, 0xdb, + 0xcc, 0xf7, 0x6e, 0xfc, 0xa8, 0x63, 0xc7, 0xf7, + 0x3c, 0x00, 0x7c, 0x2a, 0x04, 0x00, 0x75, 0xf9, + 0x04, 0x48, 0xc9, 0xf7, 0x1c, 0xfc, 0x03, 0x48, + 0xcf, 0xf7, 0x03, 0xfa, 0xb0, 0xbd, 0xc4, 0x69, + 0x01, 0x00, 0xfd, 0x80, 0x00, 0x00, 0xe1, 0x22, + 0x01, 0x00, 0x10, 0xb5, 0x05, 0x4c, 0x00, 0x20, + 0x20, 0x80, 0x03, 0x48, 0x06, 0x21, 0x08, 0x30, + 0xbd, 0xf7, 0xd5, 0xfc, 0x14, 0x20, 0x60, 0x60, + 0x10, 0xbd, 0x98, 0x7c, 0x01, 0x00, 0x10, 0xb5, + 0x08, 0x4c, 0x3c, 0x00, 0xb8, 0x2a, 0x04, 0x00, + 0x00, 0x20, 0x20, 0x80, 0x60, 0x80, 0x06, 0x48, + 0x06, 0x21, 0x0c, 0x30, 0xbd, 0xf7, 0xc6, 0xfc, + 0x03, 0x48, 0x06, 0x21, 0x12, 0x30, 0xbd, 0xf7, + 0xc1, 0xfc, 0x14, 0x20, 0xa0, 0x60, 0x10, 0xbd, + 0x58, 0x7c, 0x01, 0x00, 0x70, 0x47, 0x00, 0x00, + 0x80, 0xb5, 0x02, 0x21, 0x0d, 0x20, 0x05, 0x4a, + 0xd0, 0xf7, 0x2e, 0xfe, 0x04, 0x48, 0xc8, 0xf7, + 0x1f, 0xfc, 0x04, 0x48, 0x3c, 0x00, 0xf4, 0x2a, + 0x04, 0x00, 0xca, 0xf7, 0x44, 0xfc, 0x80, 0xbd, + 0x00, 0x00, 0x31, 0xd4, 0x00, 0x00, 0x51, 0xb1, + 0x00, 0x00, 0x09, 0xb1, 0x00, 0x00, 0x08, 0x49, + 0x80, 0xb5, 0x00, 0x20, 0x08, 0x60, 0xff, 0xf7, + 0xd0, 0xff, 0xff, 0xf7, 0xc0, 0xff, 0xff, 0xf7, + 0x04, 0xfc, 0x00, 0xf0, 0x4a, 0xf8, 0xff, 0xf7, + 0x0a, 0xfc, 0x00, 0xf0, 0x3c, 0xf8, 0x80, 0xbd, + 0x00, 0x00, 0xe4, 0x65, 0x01, 0x00, 0x3c, 0x00, + 0x30, 0x2b, 0x04, 0x00, 0x80, 0xb5, 0x00, 0xf0, + 0x29, 0xf8, 0x00, 0xf0, 0x1b, 0xf8, 0x00, 0xf0, + 0x51, 0xf8, 0x00, 0xf0, 0x31, 0xf8, 0x80, 0xbd, + 0x70, 0x47, 0x00, 0x00, 0x70, 0x47, 0x00, 0x00, + 0x80, 0xb5, 0xff, 0x21, 0x89, 0x31, 0x02, 0x48, + 0xbd, 0xf7, 0xa2, 0xfc, 0x80, 0xbd, 0x00, 0x00, + 0xdc, 0x71, 0x01, 0x00, 0x80, 0xb5, 0x02, 0x49, + 0x08, 0x20, 0xcf, 0xf7, 0x11, 0xfc, 0x80, 0xbd, + 0x3c, 0x00, 0x6c, 0x2b, 0x04, 0x00, 0x59, 0xd9, + 0x00, 0x00, 0x80, 0xb5, 0x03, 0x48, 0xcf, 0xf7, + 0x4c, 0xf9, 0x02, 0x49, 0x48, 0x80, 0x80, 0xbd, + 0x00, 0x00, 0x8d, 0x1f, 0x00, 0x00, 0x98, 0x7c, + 0x01, 0x00, 0x80, 0xb5, 0x03, 0x48, 0xcf, 0xf7, + 0x40, 0xf9, 0x02, 0x49, 0x88, 0x80, 0x80, 0xbd, + 0x00, 0x00, 0xd5, 0x23, 0x00, 0x00, 0x58, 0x7c, + 0x01, 0x00, 0x70, 0x47, 0x00, 0x00, 0x80, 0xb5, + 0x02, 0x48, 0x3c, 0x00, 0xa8, 0x2b, 0x04, 0x00, + 0xca, 0xf7, 0xe4, 0xfb, 0x80, 0xbd, 0x00, 0x00, + 0x71, 0xe0, 0x00, 0x00, 0x80, 0xb5, 0xcc, 0xf7, + 0xa5, 0xfb, 0x02, 0x21, 0x0f, 0x20, 0x06, 0x4a, + 0xd0, 0xf7, 0xc2, 0xfd, 0x14, 0x21, 0x05, 0x48, + 0xbd, 0xf7, 0x68, 0xfc, 0x03, 0x48, 0x78, 0x21, + 0x14, 0x30, 0xbd, 0xf7, 0x63, 0xfc, 0x80, 0xbd, + 0x35, 0xe2, 0x00, 0x00, 0x84, 0x66, 0x01, 0x00, + 0x80, 0xb5, 0xcc, 0xf7, 0x3c, 0x00, 0xe4, 0x2b, + 0x04, 0x00, 0xb7, 0xfb, 0x05, 0x49, 0x08, 0x61, + 0x05, 0x49, 0x0e, 0x20, 0xcf, 0xf7, 0xcd, 0xfb, + 0x04, 0x49, 0x08, 0x20, 0xcf, 0xf7, 0xc9, 0xfb, + 0x80, 0xbd, 0xec, 0x65, 0x01, 0x00, 0x01, 0x02, + 0x01, 0x00, 0xc1, 0x2e, 0x00, 0x00, 0x01, 0x49, + 0x00, 0x20, 0x08, 0x70, 0x70, 0x47, 0x40, 0xd9, + 0x01, 0x00, 0x70, 0x47, 0x00, 0x00, 0x01, 0x49, + 0x00, 0x20, 0x08, 0x70, 0x70, 0x47, 0x3c, 0x00, + 0x20, 0x2c, 0x04, 0x00, 0xa0, 0x79, 0x01, 0x00, + 0x80, 0xb5, 0x07, 0x48, 0xc8, 0xf7, 0xf2, 0xff, + 0x06, 0x49, 0x48, 0x60, 0x06, 0x48, 0xc0, 0xf7, + 0x07, 0xfb, 0x06, 0x48, 0xc0, 0xf7, 0x86, 0xfb, + 0x05, 0x48, 0xc9, 0xf7, 0xa3, 0xfa, 0x80, 0xbd, + 0xa9, 0xe4, 0x00, 0x00, 0xa0, 0x79, 0x01, 0x00, + 0xb9, 0xe4, 0x00, 0x00, 0x85, 0x2e, 0x00, 0x00, + 0x81, 0xe4, 0x00, 0x00, 0x07, 0x48, 0x80, 0xb5, + 0x3c, 0x00, 0x5c, 0x2c, 0x04, 0x00, 0x00, 0x21, + 0x00, 0x22, 0x00, 0x23, 0x0e, 0xc0, 0x08, 0xc0, + 0x10, 0x38, 0xc8, 0x21, 0x01, 0x60, 0x00, 0x21, + 0x0c, 0x38, 0x02, 0x4a, 0xcc, 0xf7, 0x61, 0xfb, + 0x80, 0xbd, 0xd0, 0x60, 0x01, 0x00, 0xfd, 0xe5, + 0x00, 0x00, 0x80, 0xb5, 0xcc, 0xf7, 0x67, 0xfb, + 0x04, 0x49, 0x08, 0x60, 0x01, 0x1c, 0x02, 0x48, + 0x04, 0x30, 0xcc, 0xf7, 0x86, 0xfb, 0x80, 0xbd, + 0x00, 0x00, 0x3c, 0x00, 0x98, 0x2c, 0x04, 0x00, + 0xc0, 0x60, 0x01, 0x00, 0x09, 0x48, 0x80, 0xb5, + 0x0a, 0x21, 0x01, 0x70, 0x41, 0x70, 0x08, 0x49, + 0x08, 0x4a, 0x81, 0x60, 0x00, 0x21, 0xc1, 0x60, + 0x52, 0x79, 0x82, 0x70, 0x01, 0x61, 0x41, 0x61, + 0x28, 0x21, 0x18, 0x30, 0xbd, 0xf7, 0xee, 0xfb, + 0x80, 0xbd, 0x00, 0x00, 0x7c, 0x78, 0x01, 0x00, + 0xa0, 0x86, 0x01, 0x00, 0x0c, 0x5a, 0x01, 0x00, + 0xf8, 0xb5, 0x0f, 0x49, 0x3c, 0x00, 0xd4, 0x2c, + 0x04, 0x00, 0x0f, 0x48, 0x0d, 0x88, 0x4f, 0x88, + 0x06, 0x79, 0x00, 0x24, 0x30, 0x1b, 0x68, 0x43, + 0x68, 0x23, 0x0c, 0x49, 0x58, 0x43, 0x41, 0x18, + 0x7d, 0x20, 0xc0, 0x00, 0xbd, 0xf7, 0x0f, 0xfd, + 0x61, 0x00, 0x09, 0x4a, 0xa6, 0x42, 0x50, 0x52, + 0x00, 0xd1, 0x3d, 0x1c, 0x01, 0x34, 0x24, 0x06, + 0x24, 0x0e, 0x10, 0x2c, 0xea, 0xd3, 0x05, 0x49, + 0x01, 0x20, 0x08, 0x61, 0xf8, 0xbd, 0x3c, 0x00, + 0x10, 0x2d, 0x04, 0x00, 0xf6, 0x59, 0x01, 0x00, + 0x0c, 0x5a, 0x01, 0x00, 0x34, 0x44, 0x0f, 0x00, + 0x12, 0x5a, 0x01, 0x00, 0x7c, 0x78, 0x01, 0x00, + 0x80, 0xb5, 0x00, 0xf0, 0xe7, 0xfa, 0x02, 0x49, + 0x01, 0x20, 0x08, 0x61, 0x80, 0xbd, 0x00, 0x00, + 0x7c, 0x78, 0x01, 0x00, 0x10, 0xb5, 0x04, 0x1c, + 0x08, 0x1c, 0x0f, 0x49, 0x49, 0x79, 0x00, 0x29, + 0x01, 0xd1, 0x0e, 0x4b, 0x00, 0xe0, 0x0e, 0x4b, + 0x3c, 0x00, 0x4c, 0x2d, 0x04, 0x00, 0x00, 0x2c, + 0x07, 0xd0, 0x04, 0x21, 0x11, 0x80, 0x0a, 0x1c, + 0x01, 0x24, 0x19, 0x1c, 0xbd, 0xf7, 0xcd, 0xfb, + 0x0a, 0xe0, 0x01, 0x24, 0x01, 0x1c, 0x18, 0x1c, + 0x12, 0x88, 0xbd, 0xf7, 0xc6, 0xfb, 0x00, 0xf0, + 0xc4, 0xfa, 0x05, 0x49, 0x01, 0x20, 0x08, 0x61, + 0x20, 0x1c, 0x10, 0xbd, 0x00, 0x00, 0x0c, 0x5a, + 0x01, 0x00, 0xfe, 0x59, 0x01, 0x00, 0xfa, 0x59, + 0x01, 0x00, 0x3c, 0x00, 0x88, 0x2d, 0x04, 0x00, + 0x7c, 0x78, 0x01, 0x00, 0x0d, 0x48, 0x8c, 0xb5, + 0xc1, 0x88, 0x00, 0xab, 0x0c, 0x4a, 0x99, 0x80, + 0x01, 0x89, 0x04, 0x20, 0xd9, 0x80, 0x18, 0x80, + 0x02, 0x21, 0x13, 0x20, 0xd0, 0xf7, 0xd0, 0xfc, + 0x00, 0xf0, 0xa6, 0xfa, 0x07, 0x49, 0x01, 0x20, + 0x08, 0x61, 0xff, 0xf7, 0x8d, 0xff, 0x6a, 0x46, + 0x01, 0xa9, 0x00, 0x20, 0xff, 0xf7, 0xbc, 0xff, + 0x8c, 0xbd, 0x00, 0x00, 0x3c, 0x00, 0xc4, 0x2d, + 0x04, 0x00, 0xf4, 0x59, 0x01, 0x00, 0x95, 0xf9, + 0x00, 0x00, 0x7c, 0x78, 0x01, 0x00, 0xf8, 0xb5, + 0x13, 0x4e, 0x01, 0x25, 0xb5, 0x70, 0x05, 0x20, + 0xf0, 0x70, 0x11, 0x49, 0x10, 0x48, 0x0e, 0xc9, + 0x2c, 0x30, 0x0e, 0xc0, 0x00, 0x20, 0x70, 0x61, + 0x0f, 0x48, 0x0f, 0x49, 0x10, 0x4f, 0x00, 0x24, + 0x48, 0x60, 0xa0, 0x00, 0x39, 0x58, 0x20, 0x1c, + 0xd1, 0xf7, 0xd7, 0xf8, 0x01, 0x34, 0x3c, 0x00, + 0x00, 0x2e, 0x04, 0x00, 0x10, 0x2c, 0xf7, 0xd3, + 0x06, 0x4c, 0x0b, 0x4a, 0x20, 0x34, 0x20, 0x1c, + 0x0a, 0x49, 0xb5, 0x60, 0xcc, 0xf7, 0x92, 0xfa, + 0xcc, 0xf7, 0x9e, 0xfa, 0x30, 0x61, 0x20, 0x60, + 0xf8, 0xbd, 0x00, 0x00, 0x64, 0x73, 0x01, 0x00, + 0xb0, 0x58, 0x01, 0x00, 0x04, 0x18, 0x02, 0x00, + 0x60, 0x00, 0x07, 0x00, 0xd4, 0x44, 0x01, 0x00, + 0x45, 0xfa, 0x00, 0x00, 0x71, 0xfa, 0x00, 0x00, + 0x3c, 0x00, 0x3c, 0x2e, 0x04, 0x00, 0x0c, 0x49, + 0x30, 0xb5, 0x00, 0x23, 0xcc, 0x56, 0x0b, 0x4b, + 0x00, 0x20, 0xf0, 0x25, 0x1a, 0x5c, 0x11, 0x07, + 0x09, 0x0f, 0x09, 0x19, 0x0f, 0x29, 0x01, 0xdd, + 0x0f, 0x21, 0x02, 0xe0, 0x00, 0x29, 0x00, 0xda, + 0x00, 0x21, 0x2a, 0x40, 0x51, 0x18, 0x19, 0x54, + 0x01, 0x30, 0x0e, 0x28, 0xee, 0xdb, 0x30, 0xbd, + 0x00, 0x00, 0x64, 0x73, 0x01, 0x00, 0xc0, 0x58, + 0x01, 0x00, 0x3c, 0x00, 0x78, 0x2e, 0x04, 0x00, + 0xb0, 0xb5, 0x0d, 0x1c, 0x00, 0x28, 0x08, 0xd0, + 0x01, 0x24, 0x14, 0x80, 0x05, 0x20, 0xcc, 0xf7, + 0xb5, 0xf8, 0x80, 0x03, 0xc0, 0x0f, 0x28, 0x70, + 0x07, 0xe0, 0x28, 0x78, 0x01, 0x22, 0x41, 0x04, + 0x52, 0x04, 0x05, 0x20, 0xd0, 0xf7, 0xae, 0xfd, + 0x01, 0x24, 0x20, 0x1c, 0xb0, 0xbd, 0x00, 0x00, + 0x98, 0xb5, 0x05, 0x4c, 0x60, 0x68, 0xcc, 0xf7, + 0xf5, 0xfd, 0x00, 0x90, 0x3c, 0x00, 0xb4, 0x2e, + 0x04, 0x00, 0x00, 0xab, 0x18, 0x88, 0xe0, 0x80, + 0xce, 0xf7, 0xfb, 0xff, 0x98, 0xbd, 0xa0, 0x58, + 0x01, 0x00, 0x38, 0xb5, 0x03, 0x1c, 0x08, 0x1c, + 0x00, 0x24, 0x00, 0x2b, 0x17, 0x4d, 0x07, 0xd0, + 0x0e, 0x21, 0x11, 0x80, 0x0a, 0x1c, 0x01, 0x24, + 0x29, 0x1c, 0xbd, 0xf7, 0x0c, 0xfb, 0x22, 0xe0, + 0x11, 0x88, 0x04, 0x29, 0x17, 0xd1, 0x01, 0x1c, + 0x68, 0x46, 0x12, 0x88, 0xbd, 0xf7, 0x3c, 0x00, + 0xf0, 0x2e, 0x04, 0x00, 0x03, 0xfb, 0x00, 0x98, + 0x00, 0x28, 0x01, 0xdb, 0x32, 0x30, 0x00, 0xe0, + 0x32, 0x38, 0x00, 0x90, 0x01, 0x1c, 0x64, 0x20, + 0xbd, 0xf7, 0x98, 0xfb, 0x01, 0x06, 0x09, 0x16, + 0x00, 0x90, 0x0e, 0x22, 0x28, 0x1c, 0xbd, 0xf7, + 0x85, 0xfb, 0x06, 0xe0, 0x0e, 0x29, 0x05, 0xd1, + 0x0a, 0x1c, 0x01, 0x1c, 0x28, 0x1c, 0xbd, 0xf7, + 0xe9, 0xfa, 0x01, 0x24, 0x20, 0x1c, 0x38, 0xbd, + 0x3c, 0x00, 0x2c, 0x2f, 0x04, 0x00, 0xda, 0x59, + 0x01, 0x00, 0x38, 0xb5, 0x03, 0x1c, 0x08, 0x1c, + 0x00, 0x24, 0x00, 0x2b, 0x17, 0x4d, 0x07, 0xd0, + 0x0e, 0x21, 0x11, 0x80, 0x0a, 0x1c, 0x01, 0x24, + 0x29, 0x1c, 0xbd, 0xf7, 0xd6, 0xfa, 0x22, 0xe0, + 0x11, 0x88, 0x04, 0x29, 0x17, 0xd1, 0x01, 0x1c, + 0x68, 0x46, 0x12, 0x88, 0xbd, 0xf7, 0xcd, 0xfa, + 0x00, 0x98, 0x00, 0x28, 0x01, 0xdb, 0x32, 0x30, + 0x00, 0xe0, 0x3c, 0x00, 0x68, 0x2f, 0x04, 0x00, + 0x32, 0x38, 0x00, 0x90, 0x01, 0x1c, 0x64, 0x20, + 0xbd, 0xf7, 0x62, 0xfb, 0x01, 0x06, 0x09, 0x16, + 0x00, 0x90, 0x0e, 0x22, 0x28, 0x1c, 0xbd, 0xf7, + 0x4f, 0xfb, 0x06, 0xe0, 0x0e, 0x29, 0x05, 0xd1, + 0x0a, 0x1c, 0x01, 0x1c, 0x28, 0x1c, 0xbd, 0xf7, + 0xb3, 0xfa, 0x01, 0x24, 0x20, 0x1c, 0x38, 0xbd, + 0xcc, 0x59, 0x01, 0x00, 0x03, 0x48, 0x80, 0xb5, + 0x01, 0x78, 0x00, 0x20, 0x3c, 0x00, 0xa4, 0x2f, + 0x04, 0x00, 0xcc, 0xf7, 0xb4, 0xfb, 0x80, 0xbd, + 0x00, 0x00, 0xa6, 0x58, 0x01, 0x00, 0x70, 0x47, + 0x00, 0x00, 0x02, 0x49, 0x03, 0x20, 0x08, 0x70, + 0x00, 0x20, 0x48, 0x70, 0x70, 0x47, 0x9c, 0x73, + 0x01, 0x00, 0x80, 0xb5, 0x02, 0x21, 0x11, 0x20, + 0x02, 0x4a, 0xd0, 0xf7, 0xbc, 0xfb, 0x80, 0xbd, + 0x00, 0x00, 0xa1, 0xfe, 0x00, 0x00, 0xf0, 0xb5, + 0x0b, 0x4f, 0x1c, 0x1c, 0x00, 0x23, 0x3c, 0x00, + 0xe0, 0x2f, 0x04, 0x00, 0xfd, 0x56, 0x2b, 0x1c, + 0x06, 0x2d, 0x01, 0xd1, 0x01, 0x20, 0xf0, 0xbd, + 0x06, 0x4e, 0x05, 0x1c, 0xd8, 0x00, 0x34, 0x36, + 0x35, 0x54, 0x80, 0x19, 0x41, 0x70, 0x82, 0x70, + 0x44, 0x60, 0x58, 0x1c, 0x38, 0x70, 0x00, 0x20, + 0xf0, 0xbd, 0x00, 0x00, 0x98, 0x5a, 0x01, 0x00, + 0x10, 0xb5, 0x04, 0x1c, 0x0c, 0x48, 0x00, 0xf0, + 0x21, 0xf9, 0x60, 0x78, 0xff, 0x28, 0x04, 0xd0, + 0x3c, 0x00, 0x1c, 0x30, 0x04, 0x00, 0x01, 0x23, + 0xe0, 0x56, 0x06, 0x21, 0x00, 0xf0, 0xcd, 0xf8, + 0x08, 0x4a, 0x01, 0x21, 0x10, 0x78, 0x08, 0x43, + 0x07, 0x49, 0x08, 0x70, 0x20, 0x23, 0x18, 0x43, + 0x08, 0x70, 0x80, 0x23, 0x18, 0x43, 0x10, 0x70, + 0x08, 0x70, 0x10, 0xbd, 0x00, 0x00, 0x91, 0x9b, + 0x00, 0x00, 0xe0, 0x60, 0x01, 0x00, 0x04, 0x00, + 0x07, 0x00, 0x10, 0xb5, 0x0a, 0x49, 0x04, 0x1c, + 0x08, 0x78, 0x3c, 0x00, 0x58, 0x30, 0x04, 0x00, + 0x40, 0x08, 0x40, 0x00, 0x08, 0x70, 0x08, 0x49, + 0x08, 0x70, 0x08, 0x48, 0x00, 0xf0, 0xf8, 0xf8, + 0x60, 0x78, 0xff, 0x28, 0x04, 0xd0, 0x01, 0x23, + 0xe0, 0x56, 0x05, 0x21, 0x00, 0xf0, 0xa4, 0xf8, + 0x10, 0xbd, 0x00, 0x00, 0xe0, 0x60, 0x01, 0x00, + 0x04, 0x00, 0x07, 0x00, 0x91, 0x9b, 0x00, 0x00, + 0x03, 0x48, 0x00, 0x21, 0x00, 0x22, 0x00, 0x23, + 0x0e, 0xc0, 0x08, 0xc0, 0x3c, 0x00, 0x94, 0x30, + 0x04, 0x00, 0x70, 0x47, 0x00, 0x00, 0xe8, 0x60, + 0x01, 0x00, 0x70, 0x47, 0x00, 0x00, 0x10, 0xb5, + 0x07, 0x4c, 0x00, 0x20, 0x60, 0x60, 0x20, 0x80, + 0xe0, 0x60, 0x02, 0x21, 0x14, 0x20, 0x04, 0x4a, + 0xd0, 0xf7, 0x49, 0xfb, 0x02, 0x48, 0x10, 0x30, + 0xa0, 0x60, 0x10, 0xbd, 0x00, 0x00, 0x58, 0x75, + 0x01, 0x00, 0x05, 0x1d, 0x01, 0x00, 0x70, 0x47, + 0x00, 0x00, 0x10, 0xb5, 0x48, 0x21, 0x3c, 0x00, + 0xd0, 0x30, 0x04, 0x00, 0x0a, 0x48, 0xbd, 0xf7, + 0xe3, 0xf9, 0x09, 0x4c, 0xe0, 0x21, 0x48, 0x34, + 0x20, 0x1c, 0xbd, 0xf7, 0xdd, 0xf9, 0x00, 0x20, + 0xc1, 0x00, 0x09, 0x19, 0x0a, 0x1c, 0x08, 0x32, + 0x01, 0x30, 0x1b, 0x28, 0x4a, 0x60, 0xf7, 0xd3, + 0x01, 0x48, 0x04, 0x38, 0x04, 0x60, 0x10, 0xbd, + 0x68, 0x5b, 0x01, 0x00, 0x80, 0xb5, 0x02, 0x21, + 0x23, 0x20, 0x02, 0x4a, 0xd0, 0xf7, 0x1e, 0xfb, + 0x3c, 0x00, 0x0c, 0x31, 0x04, 0x00, 0x80, 0xbd, + 0x00, 0x00, 0x45, 0x23, 0x01, 0x00, 0x80, 0xb5, + 0xff, 0xf7, 0x6b, 0xf8, 0x80, 0xbd, 0x70, 0x47, + 0x00, 0x00, 0xf8, 0xb5, 0x01, 0x20, 0x1d, 0x49, + 0xc0, 0x07, 0x48, 0x60, 0x1d, 0x49, 0xff, 0x20, + 0x08, 0x73, 0x1c, 0x4e, 0x10, 0x20, 0x30, 0x60, + 0x05, 0x01, 0x35, 0x60, 0x1b, 0x4c, 0x80, 0x21, + 0x20, 0x1c, 0xbd, 0xf7, 0xac, 0xf9, 0x00, 0x21, + 0x19, 0x4a, 0x3c, 0x00, 0x48, 0x31, 0x04, 0x00, + 0x15, 0x4f, 0x00, 0x20, 0x0b, 0x01, 0x1b, 0x19, + 0x5a, 0x60, 0xcb, 0x00, 0xdb, 0x19, 0x18, 0x74, + 0x01, 0x31, 0x08, 0x29, 0xf6, 0xdb, 0x0f, 0x4c, + 0xfa, 0x21, 0x21, 0x80, 0x12, 0x49, 0x61, 0x80, + 0xa0, 0x60, 0x6a, 0x46, 0x11, 0x49, 0x04, 0x20, + 0xbd, 0xf7, 0x30, 0xff, 0x6a, 0x46, 0x10, 0x49, + 0x08, 0x20, 0xbd, 0xf7, 0x2b, 0xff, 0x10, 0x20, + 0x70, 0x60, 0x75, 0x60, 0x3c, 0x00, 0x84, 0x31, + 0x04, 0x00, 0x60, 0x68, 0x02, 0x21, 0x08, 0x43, + 0x60, 0x60, 0x0b, 0x49, 0x06, 0x4a, 0x08, 0x1c, + 0x10, 0x30, 0x08, 0x3a, 0x03, 0xc2, 0xf8, 0xbd, + 0x00, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x60, + 0x07, 0x00, 0x00, 0x10, 0x07, 0x00, 0xac, 0x73, + 0x01, 0x00, 0xd1, 0x75, 0x00, 0x00, 0x20, 0x4e, + 0x00, 0x00, 0x05, 0x2c, 0x01, 0x00, 0x11, 0x2c, + 0x01, 0x00, 0x00, 0xa0, 0x07, 0x00, 0x3c, 0x00, + 0xc0, 0x31, 0x04, 0x00, 0x70, 0xb5, 0x0e, 0x1c, + 0x00, 0x24, 0xc4, 0xf7, 0x5b, 0xfe, 0x00, 0x28, + 0x3b, 0xd0, 0x45, 0x68, 0xff, 0x2d, 0x38, 0xd0, + 0x0c, 0x2e, 0x28, 0xd2, 0x01, 0xa3, 0x9b, 0x5d, + 0x5b, 0x00, 0x9f, 0x44, 0x05, 0x07, 0x09, 0x0b, + 0x0d, 0x10, 0x13, 0x16, 0x18, 0x1b, 0x1e, 0x21, + 0x18, 0x24, 0x20, 0xe0, 0x30, 0x24, 0x1e, 0xe0, + 0x60, 0x24, 0x1c, 0xe0, 0xc0, 0x24, 0x1a, 0xe0, + 0x3c, 0x00, 0xfc, 0x31, 0x04, 0x00, 0xff, 0x24, + 0x81, 0x34, 0x17, 0xe0, 0x09, 0x24, 0xa4, 0x01, + 0x14, 0xe0, 0x09, 0x24, 0xe4, 0x01, 0x11, 0xe0, + 0x0f, 0x4c, 0x0f, 0xe0, 0x09, 0x24, 0x24, 0x02, + 0x0c, 0xe0, 0x09, 0x24, 0x64, 0x02, 0x09, 0xe0, + 0x03, 0x24, 0xe4, 0x02, 0x06, 0xe0, 0x09, 0x24, + 0xa4, 0x02, 0x03, 0xe0, 0x09, 0x21, 0x9e, 0x20, + 0xbe, 0xf7, 0x39, 0xf8, 0x60, 0x00, 0x00, 0x19, + 0x40, 0x08, 0x3c, 0x00, 0x38, 0x32, 0x04, 0x00, + 0x05, 0x49, 0x80, 0x04, 0x40, 0x18, 0x05, 0x4a, + 0xa9, 0x00, 0x89, 0x18, 0x48, 0x60, 0x64, 0x20, + 0x60, 0x43, 0x70, 0xbd, 0xdc, 0x07, 0x00, 0x00, + 0x80, 0x38, 0x01, 0x00, 0x04, 0x00, 0x07, 0x00, + 0x02, 0x49, 0x80, 0xb5, 0x08, 0x60, 0xd0, 0xf7, + 0x97, 0xf8, 0x80, 0xbd, 0x5c, 0x5b, 0x01, 0x00, + 0xf8, 0xb5, 0x00, 0x26, 0x17, 0x4c, 0x17, 0x4b, + 0x19, 0x49, 0x26, 0x70, 0x3c, 0x00, 0x74, 0x32, + 0x04, 0x00, 0x00, 0x20, 0x14, 0x33, 0x0d, 0x88, + 0x15, 0x4e, 0x15, 0x4a, 0x04, 0xe0, 0xc1, 0x00, + 0xcf, 0x18, 0x7a, 0x60, 0x5e, 0x50, 0x01, 0x30, + 0xa8, 0x42, 0xf8, 0xdb, 0xc6, 0xf7, 0x2b, 0xfd, + 0xff, 0x21, 0x11, 0x4d, 0xa5, 0x31, 0x28, 0x1c, + 0xbd, 0xf7, 0xff, 0xf8, 0x00, 0x21, 0x28, 0x1c, + 0x02, 0x1c, 0x14, 0x32, 0xc2, 0x60, 0x10, 0x1c, + 0x01, 0x31, 0x14, 0x29, 0xf8, 0xdb, 0x3c, 0x00, + 0xb0, 0x32, 0x04, 0x00, 0x00, 0x26, 0xc6, 0x60, + 0x05, 0x48, 0x0c, 0x30, 0x60, 0xc0, 0x09, 0x48, + 0x18, 0x21, 0xbd, 0xf7, 0xed, 0xf8, 0x01, 0x20, + 0x04, 0x34, 0x41, 0xc4, 0x00, 0x20, 0xf8, 0xbd, + 0x70, 0x5d, 0x01, 0x00, 0x09, 0xa0, 0x00, 0x00, + 0x30, 0xd9, 0x01, 0x00, 0x56, 0x57, 0x01, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0xa8, 0x60, 0x01, 0x00, + 0x80, 0xb5, 0x00, 0x20, 0xcf, 0xf7, 0xb6, 0xfc, + 0x3c, 0x00, 0xec, 0x32, 0x04, 0x00, 0x01, 0x49, + 0x08, 0x80, 0x80, 0xbd, 0x00, 0x00, 0x2c, 0x74, + 0x01, 0x00, 0x11, 0x48, 0xf8, 0xb5, 0x41, 0x79, + 0x00, 0x29, 0x02, 0xd1, 0x05, 0x78, 0x0f, 0x4e, + 0x01, 0xe0, 0x45, 0x78, 0x0f, 0x4e, 0x02, 0x23, + 0xf7, 0x5e, 0x00, 0x24, 0x60, 0x1b, 0x78, 0x43, + 0x64, 0x23, 0x0c, 0x49, 0x58, 0x43, 0x41, 0x18, + 0x7d, 0x20, 0xc0, 0x00, 0xbd, 0xf7, 0xf5, 0xf9, + 0x61, 0x00, 0x3c, 0x00, 0x28, 0x33, 0x04, 0x00, + 0x09, 0x4a, 0xac, 0x42, 0x50, 0x52, 0x01, 0xd1, + 0x00, 0x23, 0xf7, 0x5e, 0x01, 0x34, 0x24, 0x06, + 0x24, 0x0e, 0x10, 0x2c, 0xe9, 0xd3, 0xf8, 0xbd, + 0x0c, 0x5a, 0x01, 0x00, 0xfe, 0x59, 0x01, 0x00, + 0xfa, 0x59, 0x01, 0x00, 0x34, 0x44, 0x0f, 0x00, + 0x32, 0x5a, 0x01, 0x00, 0x38, 0xb5, 0x10, 0x4c, + 0xbe, 0x25, 0x25, 0x73, 0x20, 0x7a, 0x18, 0x21, + 0x88, 0x43, 0x20, 0x72, 0x3c, 0x00, 0x64, 0x33, + 0x04, 0x00, 0x6a, 0x46, 0x0d, 0x49, 0x0d, 0x20, + 0xbd, 0xf7, 0x33, 0xfe, 0x01, 0x20, 0x0b, 0x49, + 0x40, 0x03, 0x08, 0x60, 0x48, 0x60, 0x25, 0x73, + 0x2d, 0x20, 0xc0, 0x03, 0x20, 0x60, 0x25, 0x73, + 0x20, 0x7a, 0x10, 0x21, 0x08, 0x43, 0x20, 0x72, + 0x06, 0x48, 0x06, 0x49, 0x08, 0x60, 0x00, 0x20, + 0x48, 0x60, 0x38, 0xbd, 0x00, 0x00, 0x00, 0x03, + 0x07, 0x00, 0x8d, 0x3e, 0x01, 0x00, 0x24, 0x00, + 0xa0, 0x33, 0x04, 0x00, 0x00, 0x10, 0x07, 0x00, + 0x00, 0x87, 0x93, 0x03, 0x04, 0x79, 0x01, 0x00, + 0x80, 0xb5, 0x02, 0x21, 0x15, 0x20, 0x02, 0x4a, + 0xd0, 0xf7, 0xc8, 0xf9, 0x80, 0xbd, 0x00, 0x00, + 0x0d, 0x3e, 0x01, 0x00, 0x70, 0x47, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x44, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x40, 0x20, 0x07, 0x00, + 0xff, 0xff, 0xff, 0xff, +}; +const uint32_t fw_len = sizeof(fw_buf) / sizeof(fw_buf[0]); diff --git a/external/arduino/avr/firmwares/wifishield/wifi_dnld/wifi_dnld.cproj b/external/arduino/avr/firmwares/wifishield/wifi_dnld/wifi_dnld.cproj new file mode 100644 index 000000000..790db3c67 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifi_dnld/wifi_dnld.cproj @@ -0,0 +1,495 @@ + + + + 2.0 + 6.0 + com.Atmel.AVRGCC32 + eb9606bc-de32-4edd-9cda-ae3bf36977a2 + wifi_dnld + AT32uc3a1256 + none + Importer + Executable + C + wifi_dnld + .elf + $(MSBuildProjectDirectory)\$(Configuration) + Native + + true + false + + 0 + 3.5.0 + + + + + True + True + True + True + false + false + + + BOARD=ARDUINO + + + + + ../src/SOFTWARE_FRAMEWORK/UTILS/DEBUG + ../src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS + ../src/CONFIG + ../src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX + ../src/SOFTWARE_FRAMEWORK/DRIVERS/USART + ../src/SOFTWARE_FRAMEWORK/DRIVERS/SPI + ../src/SOFTWARE_FRAMEWORK/DRIVERS/PM + ../src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO + ../src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC + ../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE + ../src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR + ../src/SOFTWARE_FRAMEWORK/UTILS + ../src/SOFTWARE_FRAMEWORK/DRIVERS/INTC + ../src/SOFTWARE_FRAMEWORK/BOARDS + ../src + + + -fdata-sections + true + false + false + false + false + true + false + false + false + false + + false + false + true + false + false + false + false + -c -fmessage-length=0 + false + true + false + false + false + false + + + newlib_addons-at32ucr2-speed_opt + + + + + ../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS + ../src/SOFTWARE_FRAMEWORK/BOARDS + + + true + false + false + false + false + true + true + + + ../src/SOFTWARE_FRAMEWORK/UTILS/DEBUG + ../src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS + ../src/CONFIG + ../src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX + ../src/SOFTWARE_FRAMEWORK/DRIVERS/USART + ../src/SOFTWARE_FRAMEWORK/DRIVERS/SPI + ../src/SOFTWARE_FRAMEWORK/DRIVERS/PM + ../src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO + ../src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC + ../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE + ../src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR + ../src/SOFTWARE_FRAMEWORK/UTILS + ../src/SOFTWARE_FRAMEWORK/DRIVERS/INTC + ../src/SOFTWARE_FRAMEWORK/BOARDS + + + false + -Wa,-g + + + ../src/SOFTWARE_FRAMEWORK/UTILS/DEBUG + ../src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS + ../src/CONFIG + ../src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX + ../src/SOFTWARE_FRAMEWORK/DRIVERS/USART + ../src/SOFTWARE_FRAMEWORK/DRIVERS/SPI + ../src/SOFTWARE_FRAMEWORK/DRIVERS/PM + ../src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO + ../src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC + ../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE + ../src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR + ../src/SOFTWARE_FRAMEWORK/UTILS + ../src/SOFTWARE_FRAMEWORK/DRIVERS/INTC + ../src/SOFTWARE_FRAMEWORK/BOARDS + + + false + false + + + + + + + True + True + True + True + false + false + + + BOARD=ARDUINO + + + + + ../src/SOFTWARE_FRAMEWORK/UTILS/DEBUG + ../src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS + ../src/CONFIG + ../src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX + ../src/SOFTWARE_FRAMEWORK/DRIVERS/USART + ../src/SOFTWARE_FRAMEWORK/DRIVERS/SPI + ../src/SOFTWARE_FRAMEWORK/DRIVERS/PM + ../src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO + ../src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC + ../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE + ../src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR + ../src/SOFTWARE_FRAMEWORK/UTILS + ../src/SOFTWARE_FRAMEWORK/DRIVERS/INTC + ../src/SOFTWARE_FRAMEWORK/BOARDS + ../src + + + -fdata-sections + true + false + false + false + false + true + false + false + false + false + Maximum (-g3) + + false + false + true + false + false + false + false + -c -fmessage-length=0 + false + true + false + false + false + false + + + newlib_addons-at32ucr2-speed_opt + + + + + ../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS + ../src/SOFTWARE_FRAMEWORK/BOARDS + + + true + false + false + false + false + true + true + + + ../src/SOFTWARE_FRAMEWORK/UTILS/DEBUG + ../src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS + ../src/CONFIG + ../src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX + ../src/SOFTWARE_FRAMEWORK/DRIVERS/USART + ../src/SOFTWARE_FRAMEWORK/DRIVERS/SPI + ../src/SOFTWARE_FRAMEWORK/DRIVERS/PM + ../src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO + ../src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC + ../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE + ../src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR + ../src/SOFTWARE_FRAMEWORK/UTILS + ../src/SOFTWARE_FRAMEWORK/DRIVERS/INTC + ../src/SOFTWARE_FRAMEWORK/BOARDS + + + false + Default (-g) + -Wa,-g + + + ../src/SOFTWARE_FRAMEWORK/UTILS/DEBUG + ../src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS + ../src/CONFIG + ../src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX + ../src/SOFTWARE_FRAMEWORK/DRIVERS/USART + ../src/SOFTWARE_FRAMEWORK/DRIVERS/SPI + ../src/SOFTWARE_FRAMEWORK/DRIVERS/PM + ../src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO + ../src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC + ../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE + ../src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR + ../src/SOFTWARE_FRAMEWORK/UTILS + ../src/SOFTWARE_FRAMEWORK/DRIVERS/INTC + ../src/SOFTWARE_FRAMEWORK/BOARDS + + + false + false + Default (-Wa,-g) + + + + + + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + + compile + + + compile + + + + compile + + + compile + + + + + compile + + + + compile + + + compile + + + + compile + + + compile + + + compile + + + + + + + compile + + + compile + + + compile + + + compile + + + + + compile + + + compile + + + + compile + + + compile + + + + compile + + + compile + + + compile + + + + compile + + + compile + + + compile + + + compile + + + compile + + + + compile + + + compile + + + + compile + + + compile + + + + + + compile + + + compile + + + + compile + + + compile + + + compile + + + + compile + + + compile + + + compile + + + compile + + + + + compile + + + + compile + + + compile + + + compile + + + compile + + + compile + + + + + + + compile + + + + + compile + + + + compile + + + compile + + + compile + + + compile + + + + + compile + + + \ No newline at end of file diff --git a/external/arduino/avr/firmwares/wifishield/wifishield.atsln b/external/arduino/avr/firmwares/wifishield/wifishield.atsln new file mode 100644 index 000000000..e9a149ba1 --- /dev/null +++ b/external/arduino/avr/firmwares/wifishield/wifishield.atsln @@ -0,0 +1,36 @@ + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Atmel Studio Solution File, Format Version 11.00 +Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "wifi_dnld", "wifi_dnld\wifi_dnld.cproj", "{EB9606BC-DE32-4EDD-9CDA-AE3BF36977A2}" +EndProject +Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "wifiHD", "wifiHD\wifiHD.cproj", "{417E15DB-488A-4B56-8D4E-FBE832B2B649}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug_512|AVR = Debug_512|AVR + Debug|AVR = Debug|AVR + Release_512|AVR = Release_512|AVR + Release|AVR = Release|AVR + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {EB9606BC-DE32-4EDD-9CDA-AE3BF36977A2}.Debug_512|AVR.ActiveCfg = Debug|AVR + {EB9606BC-DE32-4EDD-9CDA-AE3BF36977A2}.Debug_512|AVR.Build.0 = Debug|AVR + {EB9606BC-DE32-4EDD-9CDA-AE3BF36977A2}.Debug|AVR.ActiveCfg = Debug|AVR + {EB9606BC-DE32-4EDD-9CDA-AE3BF36977A2}.Debug|AVR.Build.0 = Debug|AVR + {EB9606BC-DE32-4EDD-9CDA-AE3BF36977A2}.Release_512|AVR.ActiveCfg = Release|AVR + {EB9606BC-DE32-4EDD-9CDA-AE3BF36977A2}.Release_512|AVR.Build.0 = Release|AVR + {EB9606BC-DE32-4EDD-9CDA-AE3BF36977A2}.Release|AVR.ActiveCfg = Release|AVR + {EB9606BC-DE32-4EDD-9CDA-AE3BF36977A2}.Release|AVR.Build.0 = Release|AVR + {417E15DB-488A-4B56-8D4E-FBE832B2B649}.Debug_512|AVR.ActiveCfg = Debug_512|AVR + {417E15DB-488A-4B56-8D4E-FBE832B2B649}.Debug_512|AVR.Build.0 = Debug_512|AVR + {417E15DB-488A-4B56-8D4E-FBE832B2B649}.Debug|AVR.ActiveCfg = Debug|AVR + {417E15DB-488A-4B56-8D4E-FBE832B2B649}.Debug|AVR.Build.0 = Debug|AVR + {417E15DB-488A-4B56-8D4E-FBE832B2B649}.Release_512|AVR.ActiveCfg = Release_512|AVR + {417E15DB-488A-4B56-8D4E-FBE832B2B649}.Release_512|AVR.Build.0 = Release_512|AVR + {417E15DB-488A-4B56-8D4E-FBE832B2B649}.Release|AVR.ActiveCfg = Release|AVR + {417E15DB-488A-4B56-8D4E-FBE832B2B649}.Release|AVR.Build.0 = Release|AVR + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/external/arduino/avr/libraries/EEPROM/README.md b/external/arduino/avr/libraries/EEPROM/README.md new file mode 100644 index 000000000..a62413613 --- /dev/null +++ b/external/arduino/avr/libraries/EEPROM/README.md @@ -0,0 +1,139 @@ +## **EEPROM Library V2.0** for Arduino + +**Written by:** _Christopher Andrews_. + +### **What is the EEPROM library.** + +Th EEPROM library provides an easy to use interface to interact with the internal non-volatile storage found in AVR based Arduino boards. This library will work on many AVR devices like ATtiny and ATmega chips. + +### **How to use it** +The EEPROM library is included in your IDE download. To add its functionality to your sketch you'll need to reference the library header file. You do this by adding an include directive to the top of your sketch. + +```Arduino +#include + +void setup(){ + +} + +void loop(){ + +} + +``` + +The library provides a global variable named `EEPROM`, you use this variable to access the library functions. The methods provided in the EEPROM class are listed below. + +You can view all the examples [here](examples/). + +### **Library functions** + +#### **`EEPROM.read( address )`** [[_example_]](examples/eeprom_read/eeprom_read.ino) + +This function allows you to read a single byte of data from the eeprom. +Its only parameter is an `int` which should be set to the address you wish to read. + +The function returns an `unsigned char` containing the value read. + +#### **`EEPROM.write( address, value )`** [[_example_]](examples/eeprom_write/eeprom_write.ino) + +The `write()` method allows you to write a single byte of data to the EEPROM. +Two parameters are needed. The first is an `int` containing the address that is to be written, and the second is a the data to be written (`unsigned char`). + +This function does not return any value. + +#### **`EEPROM.update( address, value )`** [[_example_]](examples/eeprom_update/eeprom_update.ino) + +This function is similar to `EEPROM.write()` however this method will only write data if the cell contents pointed to by `address` is different to `value`. This method can help prevent unnecessary wear on the EEPROM cells. + +This function does not return any value. + +#### **`EEPROM.get( address, object )`** [[_example_]](examples/eeprom_get/eeprom_get.ino) + +This function will retrieve any object from the EEPROM. +Two parameters are needed to call this function. The first is an `int` containing the address that is to be written, and the second is the object you would like to read. + +This function returns a reference to the `object` passed in. It does not need to be used and is only returned for conveience. + +#### **`EEPROM.put( address, object )`** [[_example_]](examples/eeprom_put/eeprom_put.ino) + +This function will write any object to the EEPROM. +Two parameters are needed to call this function. The first is an `int` containing the address that is to be written, and the second is the object you would like to write. + +This function uses the _update_ method to write its data, and therefore only rewrites changed cells. + +This function returns a reference to the `object` passed in. It does not need to be used and is only returned for conveience. + +#### **Subscript operator: `EEPROM[address]`** [[_example_]](examples/eeprom_crc/eeprom_crc.ino) + +This operator allows using the identifier `EEPROM` like an array. +EEPROM cells can be read _and_ **_written_** directly using this method. + +This operator returns a reference to the EEPROM cell. + +```c++ +unsigned char val; + +//Read first EEPROM cell. +val = EEPROM[ 0 ]; + +//Write first EEPROM cell. +EEPROM[ 0 ] = val; + +//Compare contents +if( val == EEPROM[ 0 ] ){ + //Do something... +} +``` + +#### **`EEPROM.length()`** + +This function returns an `unsigned int` containing the number of cells in the EEPROM. + +--- + +### **Advanced features** + +This library uses a component based approach to provide its functionality. This means you can also use these components to design a customized approach. Two background classes are available for use: `EERef` & `EEPtr`. + +#### **`EERef` class** + +This object references an EEPROM cell. +Its purpose is to mimic a typical byte of RAM, however its storage is the EEPROM. +This class has an overhead of two bytes, similar to storing a pointer to an EEPROM cell. + +```C++ +EERef ref = EEPROM[ 10 ]; //Create a reference to 11th cell. + +ref = 4; //write to EEPROM cell. + +unsigned char val = ref; //Read referenced cell. +``` + +#### **`EEPtr` class** + +This object is a bidirectional pointer to EEPROM cells represented by `EERef` objects. +Just like a normal pointer type, this type can be dereferenced and repositioned using +increment/decrement operators. + +```C++ +EEPtr ptr = 10; //Create a pointer to 11th cell. + +*ptr = 4; //dereference and write to EEPROM cell. + +unsigned char val = *ptr; //dereference and read. + +ptr++; //Move to next EEPROM cell. +``` + +#### **`EEPROM.begin()`** + +This function returns an `EEPtr` pointing to the first cell in the EEPROM. +This is useful for STL objects, custom iteration and C++11 style ranged for loops. + +#### **`EEPROM.end()`** + +This function returns an `EEPtr` pointing at the location after the last EEPROM cell. +Used with `begin()` to provide custom iteration. + +**Note:** The `EEPtr` returned is invalid as it is out of range. Infact the hardware causes wrapping of the address (overflow) and `EEPROM.end()` actually references the first EEPROM cell. diff --git a/external/arduino/avr/libraries/EEPROM/examples/eeprom_clear/eeprom_clear.ino b/external/arduino/avr/libraries/EEPROM/examples/eeprom_clear/eeprom_clear.ino new file mode 100644 index 000000000..8b5121c8c --- /dev/null +++ b/external/arduino/avr/libraries/EEPROM/examples/eeprom_clear/eeprom_clear.ino @@ -0,0 +1,39 @@ +/* + * EEPROM Clear + * + * Sets all of the bytes of the EEPROM to 0. + * Please see eeprom_iteration for a more in depth + * look at how to traverse the EEPROM. + * + * This example code is in the public domain. + */ + +#include + +void setup() { + // initialize the LED pin as an output. + pinMode(13, OUTPUT); + + /*** + Iterate through each byte of the EEPROM storage. + + Larger AVR processors have larger EEPROM sizes, E.g: + - Arduno Duemilanove: 512b EEPROM storage. + - Arduino Uno: 1kb EEPROM storage. + - Arduino Mega: 4kb EEPROM storage. + + Rather than hard-coding the length, you should use the pre-provided length function. + This will make your code portable to all AVR processors. + ***/ + + for (int i = 0 ; i < EEPROM.length() ; i++) { + EEPROM.write(i, 0); + } + + // turn the LED on when we're done + digitalWrite(13, HIGH); +} + +void loop() { + /** Empty loop. **/ +} diff --git a/external/arduino/avr/libraries/EEPROM/examples/eeprom_crc/eeprom_crc.ino b/external/arduino/avr/libraries/EEPROM/examples/eeprom_crc/eeprom_crc.ino new file mode 100644 index 000000000..c6db85c3b --- /dev/null +++ b/external/arduino/avr/libraries/EEPROM/examples/eeprom_crc/eeprom_crc.ino @@ -0,0 +1,52 @@ +/*** + Written by Christopher Andrews. + CRC algorithm generated by pycrc, MIT licence ( https://github.com/tpircher/pycrc ). + + A CRC is a simple way of checking whether data has changed or become corrupted. + This example calculates a CRC value directly on the EEPROM values. + The purpose of this example is to highlight how the EEPROM object can be used just like an array. +***/ + +#include +#include + +void setup() { + + //Start serial + Serial.begin(9600); + while (!Serial) { + ; // wait for serial port to connect. Needed for native USB port only + } + + //Print length of data to run CRC on. + Serial.print("EEPROM length: "); + Serial.println(EEPROM.length()); + + //Print the result of calling eeprom_crc() + Serial.print("CRC32 of EEPROM data: 0x"); + Serial.println(eeprom_crc(), HEX); + Serial.print("\n\nDone!"); +} + +void loop() { + /* Empty loop */ +} + +unsigned long eeprom_crc(void) { + + const unsigned long crc_table[16] = { + 0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac, + 0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c, + 0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c, + 0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c + }; + + unsigned long crc = ~0L; + + for (int index = 0 ; index < EEPROM.length() ; ++index) { + crc = crc_table[(crc ^ EEPROM[index]) & 0x0f] ^ (crc >> 4); + crc = crc_table[(crc ^ (EEPROM[index] >> 4)) & 0x0f] ^ (crc >> 4); + crc = ~crc; + } + return crc; +} diff --git a/external/arduino/avr/libraries/EEPROM/examples/eeprom_get/eeprom_get.ino b/external/arduino/avr/libraries/EEPROM/examples/eeprom_get/eeprom_get.ino new file mode 100644 index 000000000..a07cee7c7 --- /dev/null +++ b/external/arduino/avr/libraries/EEPROM/examples/eeprom_get/eeprom_get.ino @@ -0,0 +1,68 @@ +/*** + eeprom_get example. + + This shows how to use the EEPROM.get() method. + + To pre-set the EEPROM data, run the example sketch eeprom_put. + This sketch will run without it, however, the values shown + will be shown from what ever is already on the EEPROM. + + This may cause the serial object to print out a large string + of garbage if there is no null character inside one of the strings + loaded. + + Written by Christopher Andrews 2015 + Released under MIT licence. +***/ + +#include + +void setup() { + + float f = 0.00f; //Variable to store data read from EEPROM. + int eeAddress = 0; //EEPROM address to start reading from + + Serial.begin(9600); + while (!Serial) { + ; // wait for serial port to connect. Needed for native USB port only + } + Serial.print("Read float from EEPROM: "); + + //Get the float data from the EEPROM at position 'eeAddress' + EEPROM.get(eeAddress, f); + Serial.println(f, 3); //This may print 'ovf, nan' if the data inside the EEPROM is not a valid float. + + /*** + As get also returns a reference to 'f', you can use it inline. + E.g: Serial.print( EEPROM.get( eeAddress, f ) ); + ***/ + + /*** + Get can be used with custom structures too. + I have separated this into an extra function. + ***/ + + secondTest(); //Run the next test. +} + +struct MyObject { + float field1; + byte field2; + char name[10]; +}; + +void secondTest() { + int eeAddress = sizeof(float); //Move address to the next byte after float 'f'. + + MyObject customVar; //Variable to store custom object read from EEPROM. + EEPROM.get(eeAddress, customVar); + + Serial.println("Read custom object from EEPROM: "); + Serial.println(customVar.field1); + Serial.println(customVar.field2); + Serial.println(customVar.name); +} + +void loop() { + /* Empty loop */ +} diff --git a/external/arduino/avr/libraries/EEPROM/examples/eeprom_iteration/eeprom_iteration.ino b/external/arduino/avr/libraries/EEPROM/examples/eeprom_iteration/eeprom_iteration.ino new file mode 100644 index 000000000..3673b472f --- /dev/null +++ b/external/arduino/avr/libraries/EEPROM/examples/eeprom_iteration/eeprom_iteration.ino @@ -0,0 +1,57 @@ +/*** + eeprom_iteration example. + + A set of example snippets highlighting the + simplest methods for traversing the EEPROM. + + Running this sketch is not necessary, this is + simply highlighting certain programming methods. + + Written by Christopher Andrews 2015 + Released under MIT licence. +***/ + +#include + +void setup() { + + /*** + Iterate the EEPROM using a for loop. + ***/ + + for (int index = 0 ; index < EEPROM.length() ; index++) { + + //Add one to each cell in the EEPROM + EEPROM[ index ] += 1; + } + + /*** + Iterate the EEPROM using a while loop. + ***/ + + int index = 0; + + while (index < EEPROM.length()) { + + //Add one to each cell in the EEPROM + EEPROM[ index ] += 1; + index++; + } + + /*** + Iterate the EEPROM using a do-while loop. + ***/ + + int idx = 0; //Used 'idx' to avoid name conflict with 'index' above. + + do { + + //Add one to each cell in the EEPROM + EEPROM[ idx ] += 1; + idx++; + } while (idx < EEPROM.length()); + + +} //End of setup function. + +void loop() {} \ No newline at end of file diff --git a/external/arduino/avr/libraries/EEPROM/examples/eeprom_put/eeprom_put.ino b/external/arduino/avr/libraries/EEPROM/examples/eeprom_put/eeprom_put.ino new file mode 100644 index 000000000..c1ba0a57d --- /dev/null +++ b/external/arduino/avr/libraries/EEPROM/examples/eeprom_put/eeprom_put.ino @@ -0,0 +1,58 @@ +/*** + eeprom_put example. + + This shows how to use the EEPROM.put() method. + Also, this sketch will pre-set the EEPROM data for the + example sketch eeprom_get. + + Note, unlike the single byte version EEPROM.write(), + the put method will use update semantics. As in a byte + will only be written to the EEPROM if the data is actually + different. + + Written by Christopher Andrews 2015 + Released under MIT licence. +***/ + +#include + +struct MyObject { + float field1; + byte field2; + char name[10]; +}; + +void setup() { + + Serial.begin(9600); + while (!Serial) { + ; // wait for serial port to connect. Needed for native USB port only + } + + float f = 123.456f; //Variable to store in EEPROM. + int eeAddress = 0; //Location we want the data to be put. + + + //One simple call, with the address first and the object second. + EEPROM.put(eeAddress, f); + + Serial.println("Written float data type!"); + + /** Put is designed for use with custom structures also. **/ + + //Data to store. + MyObject customVar = { + 3.14f, + 65, + "Working!" + }; + + eeAddress += sizeof(float); //Move address to the next byte after float 'f'. + + EEPROM.put(eeAddress, customVar); + Serial.print("Written custom data type! \n\nView the example sketch eeprom_get to see how you can retrieve the values!"); +} + +void loop() { + /* Empty loop */ +} diff --git a/external/arduino/avr/libraries/EEPROM/examples/eeprom_read/eeprom_read.ino b/external/arduino/avr/libraries/EEPROM/examples/eeprom_read/eeprom_read.ino new file mode 100644 index 000000000..a8a3510d8 --- /dev/null +++ b/external/arduino/avr/libraries/EEPROM/examples/eeprom_read/eeprom_read.ino @@ -0,0 +1,56 @@ +/* + * EEPROM Read + * + * Reads the value of each byte of the EEPROM and prints it + * to the computer. + * This example code is in the public domain. + */ + +#include + +// start reading from the first byte (address 0) of the EEPROM +int address = 0; +byte value; + +void setup() { + // initialize serial and wait for port to open: + Serial.begin(9600); + while (!Serial) { + ; // wait for serial port to connect. Needed for native USB port only + } +} + +void loop() { + // read a byte from the current address of the EEPROM + value = EEPROM.read(address); + + Serial.print(address); + Serial.print("\t"); + Serial.print(value, DEC); + Serial.println(); + + /*** + Advance to the next address, when at the end restart at the beginning. + + Larger AVR processors have larger EEPROM sizes, E.g: + - Arduno Duemilanove: 512b EEPROM storage. + - Arduino Uno: 1kb EEPROM storage. + - Arduino Mega: 4kb EEPROM storage. + + Rather than hard-coding the length, you should use the pre-provided length function. + This will make your code portable to all AVR processors. + ***/ + address = address + 1; + if (address == EEPROM.length()) { + address = 0; + } + + /*** + As the EEPROM sizes are powers of two, wrapping (preventing overflow) of an + EEPROM address is also doable by a bitwise and of the length - 1. + + ++address &= EEPROM.length() - 1; + ***/ + + delay(500); +} diff --git a/external/arduino/avr/libraries/EEPROM/examples/eeprom_update/eeprom_update.ino b/external/arduino/avr/libraries/EEPROM/examples/eeprom_update/eeprom_update.ino new file mode 100644 index 000000000..5e3db5b4f --- /dev/null +++ b/external/arduino/avr/libraries/EEPROM/examples/eeprom_update/eeprom_update.ino @@ -0,0 +1,71 @@ +/*** + EEPROM Update method + + Stores values read from analog input 0 into the EEPROM. + These values will stay in the EEPROM when the board is + turned off and may be retrieved later by another sketch. + + If a value has not changed in the EEPROM, it is not overwritten + which would reduce the life span of the EEPROM unnecessarily. + + Released using MIT licence. + ***/ + +#include + +/** the current address in the EEPROM (i.e. which byte we're going to write to next) **/ +int address = 0; + +void setup() { + /** EMpty setup **/ +} + +void loop() { + /*** + need to divide by 4 because analog inputs range from + 0 to 1023 and each byte of the EEPROM can only hold a + value from 0 to 255. + ***/ + int val = analogRead(0) / 4; + + /*** + Update the particular EEPROM cell. + these values will remain there when the board is + turned off. + ***/ + EEPROM.update(address, val); + + /*** + The function EEPROM.update(address, val) is equivalent to the following: + + if( EEPROM.read(address) != val ){ + EEPROM.write(address, val); + } + ***/ + + + /*** + Advance to the next address, when at the end restart at the beginning. + + Larger AVR processors have larger EEPROM sizes, E.g: + - Arduno Duemilanove: 512b EEPROM storage. + - Arduino Uno: 1kb EEPROM storage. + - Arduino Mega: 4kb EEPROM storage. + + Rather than hard-coding the length, you should use the pre-provided length function. + This will make your code portable to all AVR processors. + ***/ + address = address + 1; + if (address == EEPROM.length()) { + address = 0; + } + + /*** + As the EEPROM sizes are powers of two, wrapping (preventing overflow) of an + EEPROM address is also doable by a bitwise and of the length - 1. + + ++address &= EEPROM.length() - 1; + ***/ + + delay(100); +} diff --git a/external/arduino/avr/libraries/EEPROM/examples/eeprom_write/eeprom_write.ino b/external/arduino/avr/libraries/EEPROM/examples/eeprom_write/eeprom_write.ino new file mode 100644 index 000000000..f9bea641f --- /dev/null +++ b/external/arduino/avr/libraries/EEPROM/examples/eeprom_write/eeprom_write.ino @@ -0,0 +1,60 @@ +/* + * EEPROM Write + * + * Stores values read from analog input 0 into the EEPROM. + * These values will stay in the EEPROM when the board is + * turned off and may be retrieved later by another sketch. + */ + +#include + +/** the current address in the EEPROM (i.e. which byte we're going to write to next) **/ +int addr = 0; + +void setup() { + /** Empty setup. **/ +} + +void loop() { + /*** + Need to divide by 4 because analog inputs range from + 0 to 1023 and each byte of the EEPROM can only hold a + value from 0 to 255. + ***/ + + int val = analogRead(0) / 4; + + /*** + Write the value to the appropriate byte of the EEPROM. + these values will remain there when the board is + turned off. + ***/ + + EEPROM.write(addr, val); + + /*** + Advance to the next address, when at the end restart at the beginning. + + Larger AVR processors have larger EEPROM sizes, E.g: + - Arduno Duemilanove: 512b EEPROM storage. + - Arduino Uno: 1kb EEPROM storage. + - Arduino Mega: 4kb EEPROM storage. + + Rather than hard-coding the length, you should use the pre-provided length function. + This will make your code portable to all AVR processors. + ***/ + addr = addr + 1; + if (addr == EEPROM.length()) { + addr = 0; + } + + /*** + As the EEPROM sizes are powers of two, wrapping (preventing overflow) of an + EEPROM address is also doable by a bitwise and of the length - 1. + + ++addr &= EEPROM.length() - 1; + ***/ + + + delay(100); +} diff --git a/external/arduino/avr/libraries/EEPROM/keywords.txt b/external/arduino/avr/libraries/EEPROM/keywords.txt new file mode 100644 index 000000000..2cabc0b06 --- /dev/null +++ b/external/arduino/avr/libraries/EEPROM/keywords.txt @@ -0,0 +1,22 @@ +####################################### +# Syntax Coloring Map For EEPROM +####################################### + +####################################### +# Datatypes (KEYWORD1) +####################################### + +EEPROM KEYWORD1 +EERef KEYWORD1 +EEPtr KEYWORD2 + +####################################### +# Methods and Functions (KEYWORD2) +####################################### + +update KEYWORD2 + +####################################### +# Constants (LITERAL1) +####################################### + diff --git a/external/arduino/avr/libraries/EEPROM/library.properties b/external/arduino/avr/libraries/EEPROM/library.properties new file mode 100644 index 000000000..3b2003267 --- /dev/null +++ b/external/arduino/avr/libraries/EEPROM/library.properties @@ -0,0 +1,10 @@ +name=EEPROM +version=2.0 +author=Arduino, Christopher Andrews +maintainer=Arduino +sentence=Enables reading and writing to the permanent board storage. +paragraph=This library allows to read and write data in a memory type, the EEPROM, that keeps its content also when the board is powered off. The amount of EEPROM available depends on the microcontroller type. +category=Data Storage +url=http://www.arduino.cc/en/Reference/EEPROM +architectures=avr + diff --git a/external/arduino/avr/libraries/EEPROM/src/EEPROM.h b/external/arduino/avr/libraries/EEPROM/src/EEPROM.h new file mode 100644 index 000000000..c8ec271be --- /dev/null +++ b/external/arduino/avr/libraries/EEPROM/src/EEPROM.h @@ -0,0 +1,146 @@ +/* + EEPROM.h - EEPROM library + Original Copyright (c) 2006 David A. Mellis. All right reserved. + New version by Christopher Andrews 2015. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef EEPROM_h +#define EEPROM_h + +#include +#include +#include + +/*** + EERef class. + + This object references an EEPROM cell. + Its purpose is to mimic a typical byte of RAM, however its storage is the EEPROM. + This class has an overhead of two bytes, similar to storing a pointer to an EEPROM cell. +***/ + +struct EERef{ + + EERef( const int index ) + : index( index ) {} + + //Access/read members. + uint8_t operator*() const { return eeprom_read_byte( (uint8_t*) index ); } + operator uint8_t() const { return **this; } + + //Assignment/write members. + EERef &operator=( const EERef &ref ) { return *this = *ref; } + EERef &operator=( uint8_t in ) { return eeprom_write_byte( (uint8_t*) index, in ), *this; } + EERef &operator +=( uint8_t in ) { return *this = **this + in; } + EERef &operator -=( uint8_t in ) { return *this = **this - in; } + EERef &operator *=( uint8_t in ) { return *this = **this * in; } + EERef &operator /=( uint8_t in ) { return *this = **this / in; } + EERef &operator ^=( uint8_t in ) { return *this = **this ^ in; } + EERef &operator %=( uint8_t in ) { return *this = **this % in; } + EERef &operator &=( uint8_t in ) { return *this = **this & in; } + EERef &operator |=( uint8_t in ) { return *this = **this | in; } + EERef &operator <<=( uint8_t in ) { return *this = **this << in; } + EERef &operator >>=( uint8_t in ) { return *this = **this >> in; } + + EERef &update( uint8_t in ) { return in != *this ? *this = in : *this; } + + /** Prefix increment/decrement **/ + EERef& operator++() { return *this += 1; } + EERef& operator--() { return *this -= 1; } + + /** Postfix increment/decrement **/ + uint8_t operator++ (int){ + uint8_t ret = **this; + return ++(*this), ret; + } + + uint8_t operator-- (int){ + uint8_t ret = **this; + return --(*this), ret; + } + + int index; //Index of current EEPROM cell. +}; + +/*** + EEPtr class. + + This object is a bidirectional pointer to EEPROM cells represented by EERef objects. + Just like a normal pointer type, this can be dereferenced and repositioned using + increment/decrement operators. +***/ + +struct EEPtr{ + + EEPtr( const int index ) + : index( index ) {} + + operator int() const { return index; } + EEPtr &operator=( int in ) { return index = in, *this; } + + //Iterator functionality. + bool operator!=( const EEPtr &ptr ) { return index != ptr.index; } + EERef operator*() { return index; } + + /** Prefix & Postfix increment/decrement **/ + EEPtr& operator++() { return ++index, *this; } + EEPtr& operator--() { return --index, *this; } + EEPtr operator++ (int) { return index++; } + EEPtr operator-- (int) { return index--; } + + int index; //Index of current EEPROM cell. +}; + +/*** + EEPROMClass class. + + This object represents the entire EEPROM space. + It wraps the functionality of EEPtr and EERef into a basic interface. + This class is also 100% backwards compatible with earlier Arduino core releases. +***/ + +struct EEPROMClass{ + + //Basic user access methods. + EERef operator[]( const int idx ) { return idx; } + uint8_t read( int idx ) { return EERef( idx ); } + void write( int idx, uint8_t val ) { (EERef( idx )) = val; } + void update( int idx, uint8_t val ) { EERef( idx ).update( val ); } + + //STL and C++11 iteration capability. + EEPtr begin() { return 0x00; } + EEPtr end() { return length(); } //Standards requires this to be the item after the last valid entry. The returned pointer is invalid. + uint16_t length() { return E2END + 1; } + + //Functionality to 'get' and 'put' objects to and from EEPROM. + template< typename T > T &get( int idx, T &t ){ + EEPtr e = idx; + uint8_t *ptr = (uint8_t*) &t; + for( int count = sizeof(T) ; count ; --count, ++e ) *ptr++ = *e; + return t; + } + + template< typename T > const T &put( int idx, const T &t ){ + EEPtr e = idx; + const uint8_t *ptr = (const uint8_t*) &t; + for( int count = sizeof(T) ; count ; --count, ++e ) (*e).update( *ptr++ ); + return t; + } +}; + +static EEPROMClass EEPROM; +#endif diff --git a/external/arduino/avr/libraries/HID/keywords.txt b/external/arduino/avr/libraries/HID/keywords.txt new file mode 100644 index 000000000..32a9ba5f2 --- /dev/null +++ b/external/arduino/avr/libraries/HID/keywords.txt @@ -0,0 +1,21 @@ +####################################### +# Syntax Coloring Map HID +####################################### + +####################################### +# Datatypes (KEYWORD1) +####################################### + +HID KEYWORD1 + +####################################### +# Methods and Functions (KEYWORD2) +####################################### +begin KEYWORD2 +SendReport KEYWORD2 +AppendDescriptor KEYWORD2 + +####################################### +# Constants (LITERAL1) +####################################### +HID_TX LITERAL1 \ No newline at end of file diff --git a/external/arduino/avr/libraries/HID/library.properties b/external/arduino/avr/libraries/HID/library.properties new file mode 100644 index 000000000..9075bd87a --- /dev/null +++ b/external/arduino/avr/libraries/HID/library.properties @@ -0,0 +1,9 @@ +name=HID +version=1.0 +author=Arduino +maintainer=Arduino +sentence=Module for PluggableUSB infrastructure. Exposes an API for devices like Keyboards, Mice and Gamepads. +paragraph= +category=Communication +url=http://www.arduino.cc/en/Reference/HID +architectures=avr diff --git a/external/arduino/avr/libraries/HID/src/HID.cpp b/external/arduino/avr/libraries/HID/src/HID.cpp new file mode 100644 index 000000000..21ede269e --- /dev/null +++ b/external/arduino/avr/libraries/HID/src/HID.cpp @@ -0,0 +1,162 @@ +/* + Copyright (c) 2015, Arduino LLC + Original code (pre-library): Copyright (c) 2011, Peter Barrett + + Permission to use, copy, modify, and/or distribute this software for + any purpose with or without fee is hereby granted, provided that the + above copyright notice and this permission notice appear in all copies. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL + WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR + BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES + OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, + ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS + SOFTWARE. + */ + +#include "HID.h" + +#if defined(USBCON) + +HID_& HID() +{ + static HID_ obj; + return obj; +} + +int HID_::getInterface(uint8_t* interfaceCount) +{ + *interfaceCount += 1; // uses 1 + HIDDescriptor hidInterface = { + D_INTERFACE(pluggedInterface, 1, USB_DEVICE_CLASS_HUMAN_INTERFACE, HID_SUBCLASS_NONE, HID_PROTOCOL_NONE), + D_HIDREPORT(descriptorSize), + D_ENDPOINT(USB_ENDPOINT_IN(pluggedEndpoint), USB_ENDPOINT_TYPE_INTERRUPT, USB_EP_SIZE, 0x01) + }; + return USB_SendControl(0, &hidInterface, sizeof(hidInterface)); +} + +int HID_::getDescriptor(USBSetup& setup) +{ + // Check if this is a HID Class Descriptor request + if (setup.bmRequestType != REQUEST_DEVICETOHOST_STANDARD_INTERFACE) { return 0; } + if (setup.wValueH != HID_REPORT_DESCRIPTOR_TYPE) { return 0; } + + // In a HID Class Descriptor wIndex cointains the interface number + if (setup.wIndex != pluggedInterface) { return 0; } + + int total = 0; + HIDSubDescriptor* node; + for (node = rootNode; node; node = node->next) { + int res = USB_SendControl(TRANSFER_PGM, node->data, node->length); + if (res == -1) + return -1; + total += res; + } + + // Reset the protocol on reenumeration. Normally the host should not assume the state of the protocol + // due to the USB specs, but Windows and Linux just assumes its in report mode. + protocol = HID_REPORT_PROTOCOL; + + return total; +} + +uint8_t HID_::getShortName(char *name) +{ + name[0] = 'H'; + name[1] = 'I'; + name[2] = 'D'; + name[3] = 'A' + (descriptorSize & 0x0F); + name[4] = 'A' + ((descriptorSize >> 4) & 0x0F); + return 5; +} + +void HID_::AppendDescriptor(HIDSubDescriptor *node) +{ + if (!rootNode) { + rootNode = node; + } else { + HIDSubDescriptor *current = rootNode; + while (current->next) { + current = current->next; + } + current->next = node; + } + descriptorSize += node->length; +} + +int HID_::SendReport(uint8_t id, const void* data, int len) +{ + auto ret = USB_Send(pluggedEndpoint, &id, 1); + if (ret < 0) return ret; + auto ret2 = USB_Send(pluggedEndpoint | TRANSFER_RELEASE, data, len); + if (ret2 < 0) return ret2; + return ret + ret2; +} + +bool HID_::setup(USBSetup& setup) +{ + if (pluggedInterface != setup.wIndex) { + return false; + } + + uint8_t request = setup.bRequest; + uint8_t requestType = setup.bmRequestType; + + if (requestType == REQUEST_DEVICETOHOST_CLASS_INTERFACE) + { + if (request == HID_GET_REPORT) { + // TODO: HID_GetReport(); + return true; + } + if (request == HID_GET_PROTOCOL) { + // TODO: Send8(protocol); + return true; + } + if (request == HID_GET_IDLE) { + // TODO: Send8(idle); + } + } + + if (requestType == REQUEST_HOSTTODEVICE_CLASS_INTERFACE) + { + if (request == HID_SET_PROTOCOL) { + // The USB Host tells us if we are in boot or report mode. + // This only works with a real boot compatible device. + protocol = setup.wValueL; + return true; + } + if (request == HID_SET_IDLE) { + idle = setup.wValueL; + return true; + } + if (request == HID_SET_REPORT) + { + //uint8_t reportID = setup.wValueL; + //uint16_t length = setup.wLength; + //uint8_t data[length]; + // Make sure to not read more data than USB_EP_SIZE. + // You can read multiple times through a loop. + // The first byte (may!) contain the reportID on a multreport. + //USB_RecvControl(data, length); + } + } + + return false; +} + +HID_::HID_(void) : PluggableUSBModule(1, 1, epType), + rootNode(NULL), descriptorSize(0), + protocol(HID_REPORT_PROTOCOL), idle(1) +{ + epType[0] = EP_TYPE_INTERRUPT_IN; + PluggableUSB().plug(this); +} + +int HID_::begin(void) +{ + return 0; +} + +#endif /* if defined(USBCON) */ diff --git a/external/arduino/avr/libraries/HID/src/HID.h b/external/arduino/avr/libraries/HID/src/HID.h new file mode 100644 index 000000000..93c4bd5b4 --- /dev/null +++ b/external/arduino/avr/libraries/HID/src/HID.h @@ -0,0 +1,125 @@ +/* + Copyright (c) 2015, Arduino LLC + Original code (pre-library): Copyright (c) 2011, Peter Barrett + + Permission to use, copy, modify, and/or distribute this software for + any purpose with or without fee is hereby granted, provided that the + above copyright notice and this permission notice appear in all copies. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL + WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR + BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES + OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, + ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS + SOFTWARE. + */ + +#ifndef HID_h +#define HID_h + +#include +#include +#include "PluggableUSB.h" + +#if defined(USBCON) + +#define _USING_HID + +// HID 'Driver' +// ------------ +#define HID_GET_REPORT 0x01 +#define HID_GET_IDLE 0x02 +#define HID_GET_PROTOCOL 0x03 +#define HID_SET_REPORT 0x09 +#define HID_SET_IDLE 0x0A +#define HID_SET_PROTOCOL 0x0B + +#define HID_HID_DESCRIPTOR_TYPE 0x21 +#define HID_REPORT_DESCRIPTOR_TYPE 0x22 +#define HID_PHYSICAL_DESCRIPTOR_TYPE 0x23 + +// HID subclass HID1.11 Page 8 4.2 Subclass +#define HID_SUBCLASS_NONE 0 +#define HID_SUBCLASS_BOOT_INTERFACE 1 + +// HID Keyboard/Mouse bios compatible protocols HID1.11 Page 9 4.3 Protocols +#define HID_PROTOCOL_NONE 0 +#define HID_PROTOCOL_KEYBOARD 1 +#define HID_PROTOCOL_MOUSE 2 + +// Normal or bios protocol (Keyboard/Mouse) HID1.11 Page 54 7.2.5 Get_Protocol Request +// "protocol" variable is used for this purpose. +#define HID_BOOT_PROTOCOL 0 +#define HID_REPORT_PROTOCOL 1 + +// HID Request Type HID1.11 Page 51 7.2.1 Get_Report Request +#define HID_REPORT_TYPE_INPUT 1 +#define HID_REPORT_TYPE_OUTPUT 2 +#define HID_REPORT_TYPE_FEATURE 3 + +typedef struct +{ + uint8_t len; // 9 + uint8_t dtype; // 0x21 + uint8_t addr; + uint8_t versionL; // 0x101 + uint8_t versionH; // 0x101 + uint8_t country; + uint8_t desctype; // 0x22 report + uint8_t descLenL; + uint8_t descLenH; +} HIDDescDescriptor; + +typedef struct +{ + InterfaceDescriptor hid; + HIDDescDescriptor desc; + EndpointDescriptor in; +} HIDDescriptor; + +class HIDSubDescriptor { +public: + HIDSubDescriptor *next = NULL; + HIDSubDescriptor(const void *d, const uint16_t l) : data(d), length(l) { } + + const void* data; + const uint16_t length; +}; + +class HID_ : public PluggableUSBModule +{ +public: + HID_(void); + int begin(void); + int SendReport(uint8_t id, const void* data, int len); + void AppendDescriptor(HIDSubDescriptor* node); + +protected: + // Implementation of the PluggableUSBModule + int getInterface(uint8_t* interfaceCount); + int getDescriptor(USBSetup& setup); + bool setup(USBSetup& setup); + uint8_t getShortName(char* name); + +private: + uint8_t epType[1]; + + HIDSubDescriptor* rootNode; + uint16_t descriptorSize; + + uint8_t protocol; + uint8_t idle; +}; + +// Replacement for global singleton. +// This function prevents static-initialization-order-fiasco +// https://isocpp.org/wiki/faq/ctors#static-init-order-on-first-use +HID_& HID(); + +#define D_HIDREPORT(length) { 9, 0x21, 0x01, 0x01, 0, 1, 0x22, lowByte(length), highByte(length) } + +#endif // USBCON + +#endif // HID_h diff --git a/external/arduino/avr/libraries/SPI/examples/BarometricPressureSensor/BarometricPressureSensor.ino b/external/arduino/avr/libraries/SPI/examples/BarometricPressureSensor/BarometricPressureSensor.ino new file mode 100644 index 000000000..df73adeb2 --- /dev/null +++ b/external/arduino/avr/libraries/SPI/examples/BarometricPressureSensor/BarometricPressureSensor.ino @@ -0,0 +1,143 @@ +/* + SCP1000 Barometric Pressure Sensor Display + + Shows the output of a Barometric Pressure Sensor on a + Uses the SPI library. For details on the sensor, see: + http://www.sparkfun.com/commerce/product_info.php?products_id=8161 + http://www.vti.fi/en/support/obsolete_products/pressure_sensors/ + + This sketch adapted from Nathan Seidle's SCP1000 example for PIC: + http://www.sparkfun.com/datasheets/Sensors/SCP1000-Testing.zip + + Circuit: + SCP1000 sensor attached to pins 6, 7, 10 - 13: + DRDY: pin 6 + CSB: pin 7 + MOSI: pin 11 + MISO: pin 12 + SCK: pin 13 + + created 31 July 2010 + modified 14 August 2010 + by Tom Igoe + */ + +// the sensor communicates using SPI, so include the library: +#include + +//Sensor's memory register addresses: +const int PRESSURE = 0x1F; //3 most significant bits of pressure +const int PRESSURE_LSB = 0x20; //16 least significant bits of pressure +const int TEMPERATURE = 0x21; //16 bit temperature reading +const byte READ = 0b11111100; // SCP1000's read command +const byte WRITE = 0b00000010; // SCP1000's write command + +// pins used for the connection with the sensor +// the other you need are controlled by the SPI library): +const int dataReadyPin = 6; +const int chipSelectPin = 7; + +void setup() { + Serial.begin(9600); + + // start the SPI library: + SPI.begin(); + + // initalize the data ready and chip select pins: + pinMode(dataReadyPin, INPUT); + pinMode(chipSelectPin, OUTPUT); + + //Configure SCP1000 for low noise configuration: + writeRegister(0x02, 0x2D); + writeRegister(0x01, 0x03); + writeRegister(0x03, 0x02); + // give the sensor time to set up: + delay(100); +} + +void loop() { + //Select High Resolution Mode + writeRegister(0x03, 0x0A); + + // don't do anything until the data ready pin is high: + if (digitalRead(dataReadyPin) == HIGH) { + //Read the temperature data + int tempData = readRegister(0x21, 2); + + // convert the temperature to celsius and display it: + float realTemp = (float)tempData / 20.0; + Serial.print("Temp[C]="); + Serial.print(realTemp); + + + //Read the pressure data highest 3 bits: + byte pressure_data_high = readRegister(0x1F, 1); + pressure_data_high &= 0b00000111; //you only needs bits 2 to 0 + + //Read the pressure data lower 16 bits: + unsigned int pressure_data_low = readRegister(0x20, 2); + //combine the two parts into one 19-bit number: + long pressure = ((pressure_data_high << 16) | pressure_data_low) / 4; + + // display the temperature: + Serial.println("\tPressure [Pa]=" + String(pressure)); + } +} + +//Read from or write to register from the SCP1000: +unsigned int readRegister(byte thisRegister, int bytesToRead) { + byte inByte = 0; // incoming byte from the SPI + unsigned int result = 0; // result to return + Serial.print(thisRegister, BIN); + Serial.print("\t"); + // SCP1000 expects the register name in the upper 6 bits + // of the byte. So shift the bits left by two bits: + thisRegister = thisRegister << 2; + // now combine the address and the command into one byte + byte dataToSend = thisRegister & READ; + Serial.println(thisRegister, BIN); + // take the chip select low to select the device: + digitalWrite(chipSelectPin, LOW); + // send the device the register you want to read: + SPI.transfer(dataToSend); + // send a value of 0 to read the first byte returned: + result = SPI.transfer(0x00); + // decrement the number of bytes left to read: + bytesToRead--; + // if you still have another byte to read: + if (bytesToRead > 0) { + // shift the first byte left, then get the second byte: + result = result << 8; + inByte = SPI.transfer(0x00); + // combine the byte you just got with the previous one: + result = result | inByte; + // decrement the number of bytes left to read: + bytesToRead--; + } + // take the chip select high to de-select: + digitalWrite(chipSelectPin, HIGH); + // return the result: + return (result); +} + + +//Sends a write command to SCP1000 + +void writeRegister(byte thisRegister, byte thisValue) { + + // SCP1000 expects the register address in the upper 6 bits + // of the byte. So shift the bits left by two bits: + thisRegister = thisRegister << 2; + // now combine the register address and the command into one byte: + byte dataToSend = thisRegister | WRITE; + + // take the chip select low to select the device: + digitalWrite(chipSelectPin, LOW); + + SPI.transfer(dataToSend); //Send register location + SPI.transfer(thisValue); //Send value to record into register + + // take the chip select high to de-select: + digitalWrite(chipSelectPin, HIGH); +} + diff --git a/external/arduino/avr/libraries/SPI/examples/DigitalPotControl/DigitalPotControl.ino b/external/arduino/avr/libraries/SPI/examples/DigitalPotControl/DigitalPotControl.ino new file mode 100644 index 000000000..8719058e7 --- /dev/null +++ b/external/arduino/avr/libraries/SPI/examples/DigitalPotControl/DigitalPotControl.ino @@ -0,0 +1,73 @@ +/* + Digital Pot Control + + This example controls an Analog Devices AD5206 digital potentiometer. + The AD5206 has 6 potentiometer channels. Each channel's pins are labeled + A - connect this to voltage + W - this is the pot's wiper, which changes when you set it + B - connect this to ground. + + The AD5206 is SPI-compatible,and to command it, you send two bytes, + one with the channel number (0 - 5) and one with the resistance value for the + channel (0 - 255). + + The circuit: + * All A pins of AD5206 connected to +5V + * All B pins of AD5206 connected to ground + * An LED and a 220-ohm resisor in series connected from each W pin to ground + * CS - to digital pin 10 (SS pin) + * SDI - to digital pin 11 (MOSI pin) + * CLK - to digital pin 13 (SCK pin) + + created 10 Aug 2010 + by Tom Igoe + + Thanks to Heather Dewey-Hagborg for the original tutorial, 2005 + +*/ + + +// inslude the SPI library: +#include + + +// set pin 10 as the slave select for the digital pot: +const int slaveSelectPin = 10; + +void setup() { + // set the slaveSelectPin as an output: + pinMode(slaveSelectPin, OUTPUT); + // initialize SPI: + SPI.begin(); +} + +void loop() { + // go through the six channels of the digital pot: + for (int channel = 0; channel < 6; channel++) { + // change the resistance on this channel from min to max: + for (int level = 0; level < 255; level++) { + digitalPotWrite(channel, level); + delay(10); + } + // wait a second at the top: + delay(100); + // change the resistance on this channel from max to min: + for (int level = 0; level < 255; level++) { + digitalPotWrite(channel, 255 - level); + delay(10); + } + } + +} + +void digitalPotWrite(int address, int value) { + // take the SS pin low to select the chip: + digitalWrite(slaveSelectPin, LOW); + delay(100); + // send in the address and value via SPI: + SPI.transfer(address); + SPI.transfer(value); + delay(100); + // take the SS pin high to de-select the chip: + digitalWrite(slaveSelectPin, HIGH); +} diff --git a/external/arduino/avr/libraries/SPI/keywords.txt b/external/arduino/avr/libraries/SPI/keywords.txt new file mode 100644 index 000000000..fa7616581 --- /dev/null +++ b/external/arduino/avr/libraries/SPI/keywords.txt @@ -0,0 +1,36 @@ +####################################### +# Syntax Coloring Map SPI +####################################### + +####################################### +# Datatypes (KEYWORD1) +####################################### + +SPI KEYWORD1 + +####################################### +# Methods and Functions (KEYWORD2) +####################################### +begin KEYWORD2 +end KEYWORD2 +transfer KEYWORD2 +setBitOrder KEYWORD2 +setDataMode KEYWORD2 +setClockDivider KEYWORD2 + + +####################################### +# Constants (LITERAL1) +####################################### +SPI_CLOCK_DIV4 LITERAL1 +SPI_CLOCK_DIV16 LITERAL1 +SPI_CLOCK_DIV64 LITERAL1 +SPI_CLOCK_DIV128 LITERAL1 +SPI_CLOCK_DIV2 LITERAL1 +SPI_CLOCK_DIV8 LITERAL1 +SPI_CLOCK_DIV32 LITERAL1 +SPI_CLOCK_DIV64 LITERAL1 +SPI_MODE0 LITERAL1 +SPI_MODE1 LITERAL1 +SPI_MODE2 LITERAL1 +SPI_MODE3 LITERAL1 \ No newline at end of file diff --git a/external/arduino/avr/libraries/SPI/library.properties b/external/arduino/avr/libraries/SPI/library.properties new file mode 100644 index 000000000..4ed8db90e --- /dev/null +++ b/external/arduino/avr/libraries/SPI/library.properties @@ -0,0 +1,10 @@ +name=SPI +version=1.0 +author=Arduino +maintainer=Arduino +sentence=Enables the communication with devices that use the Serial Peripheral Interface (SPI) Bus. +paragraph=SPI is a synchronous serial data protocol used by microcontrollers for communicating with one or more peripheral devices quickly over short distances. It uses three lines common to all devices (MISO, MOSI and SCK) and one specific for each device. +category=Communication +url=http://www.arduino.cc/en/Reference/SPI +architectures=avr + diff --git a/external/arduino/avr/libraries/SPI/src/SPI.cpp b/external/arduino/avr/libraries/SPI/src/SPI.cpp new file mode 100644 index 000000000..af14e07b1 --- /dev/null +++ b/external/arduino/avr/libraries/SPI/src/SPI.cpp @@ -0,0 +1,201 @@ +/* + * Copyright (c) 2010 by Cristian Maglie + * Copyright (c) 2014 by Paul Stoffregen (Transaction API) + * Copyright (c) 2014 by Matthijs Kooijman (SPISettings AVR) + * Copyright (c) 2014 by Andrew J. Kroll (atomicity fixes) + * SPI Master library for arduino. + * + * This file is free software; you can redistribute it and/or modify + * it under the terms of either the GNU General Public License version 2 + * or the GNU Lesser General Public License version 2.1, both as + * published by the Free Software Foundation. + */ + +#include "SPI.h" + +SPIClass SPI; + +uint8_t SPIClass::initialized = 0; +uint8_t SPIClass::interruptMode = 0; +uint8_t SPIClass::interruptMask = 0; +uint8_t SPIClass::interruptSave = 0; +#ifdef SPI_TRANSACTION_MISMATCH_LED +uint8_t SPIClass::inTransactionFlag = 0; +#endif + +void SPIClass::begin() +{ + uint8_t sreg = SREG; + noInterrupts(); // Protect from a scheduler and prevent transactionBegin + if (!initialized) { + // Set SS to high so a connected chip will be "deselected" by default + uint8_t port = digitalPinToPort(SS); + uint8_t bit = digitalPinToBitMask(SS); + volatile uint8_t *reg = portModeRegister(port); + + // if the SS pin is not already configured as an output + // then set it high (to enable the internal pull-up resistor) + if(!(*reg & bit)){ + digitalWrite(SS, HIGH); + } + + // When the SS pin is set as OUTPUT, it can be used as + // a general purpose output port (it doesn't influence + // SPI operations). + pinMode(SS, OUTPUT); + + // Warning: if the SS pin ever becomes a LOW INPUT then SPI + // automatically switches to Slave, so the data direction of + // the SS pin MUST be kept as OUTPUT. + SPCR |= _BV(MSTR); + SPCR |= _BV(SPE); + + // Set direction register for SCK and MOSI pin. + // MISO pin automatically overrides to INPUT. + // By doing this AFTER enabling SPI, we avoid accidentally + // clocking in a single bit since the lines go directly + // from "input" to SPI control. + // http://code.google.com/p/arduino/issues/detail?id=888 + pinMode(SCK, OUTPUT); + pinMode(MOSI, OUTPUT); + } + initialized++; // reference count + SREG = sreg; +} + +void SPIClass::end() { + uint8_t sreg = SREG; + noInterrupts(); // Protect from a scheduler and prevent transactionBegin + // Decrease the reference counter + if (initialized) + initialized--; + // If there are no more references disable SPI + if (!initialized) { + SPCR &= ~_BV(SPE); + interruptMode = 0; + #ifdef SPI_TRANSACTION_MISMATCH_LED + inTransactionFlag = 0; + #endif + } + SREG = sreg; +} + +// mapping of interrupt numbers to bits within SPI_AVR_EIMSK +#if defined(__AVR_ATmega32U4__) + #define SPI_INT0_MASK (1< + * Copyright (c) 2014 by Paul Stoffregen (Transaction API) + * Copyright (c) 2014 by Matthijs Kooijman (SPISettings AVR) + * Copyright (c) 2014 by Andrew J. Kroll (atomicity fixes) + * SPI Master library for arduino. + * + * This file is free software; you can redistribute it and/or modify + * it under the terms of either the GNU General Public License version 2 + * or the GNU Lesser General Public License version 2.1, both as + * published by the Free Software Foundation. + */ + +#ifndef _SPI_H_INCLUDED +#define _SPI_H_INCLUDED + +#include + +// SPI_HAS_TRANSACTION means SPI has beginTransaction(), endTransaction(), +// usingInterrupt(), and SPISetting(clock, bitOrder, dataMode) +#define SPI_HAS_TRANSACTION 1 + +// SPI_HAS_NOTUSINGINTERRUPT means that SPI has notUsingInterrupt() method +#define SPI_HAS_NOTUSINGINTERRUPT 1 + +// SPI_ATOMIC_VERSION means that SPI has atomicity fixes and what version. +// This way when there is a bug fix you can check this define to alert users +// of your code if it uses better version of this library. +// This also implies everything that SPI_HAS_TRANSACTION as documented above is +// available too. +#define SPI_ATOMIC_VERSION 1 + +// Uncomment this line to add detection of mismatched begin/end transactions. +// A mismatch occurs if other libraries fail to use SPI.endTransaction() for +// each SPI.beginTransaction(). Connect an LED to this pin. The LED will turn +// on if any mismatch is ever detected. +//#define SPI_TRANSACTION_MISMATCH_LED 5 + +#ifndef LSBFIRST +#define LSBFIRST 0 +#endif +#ifndef MSBFIRST +#define MSBFIRST 1 +#endif + +#define SPI_CLOCK_DIV4 0x00 +#define SPI_CLOCK_DIV16 0x01 +#define SPI_CLOCK_DIV64 0x02 +#define SPI_CLOCK_DIV128 0x03 +#define SPI_CLOCK_DIV2 0x04 +#define SPI_CLOCK_DIV8 0x05 +#define SPI_CLOCK_DIV32 0x06 + +#define SPI_MODE0 0x00 +#define SPI_MODE1 0x04 +#define SPI_MODE2 0x08 +#define SPI_MODE3 0x0C + +#define SPI_MODE_MASK 0x0C // CPOL = bit 3, CPHA = bit 2 on SPCR +#define SPI_CLOCK_MASK 0x03 // SPR1 = bit 1, SPR0 = bit 0 on SPCR +#define SPI_2XCLOCK_MASK 0x01 // SPI2X = bit 0 on SPSR + +// define SPI_AVR_EIMSK for AVR boards with external interrupt pins +#if defined(EIMSK) + #define SPI_AVR_EIMSK EIMSK +#elif defined(GICR) + #define SPI_AVR_EIMSK GICR +#elif defined(GIMSK) + #define SPI_AVR_EIMSK GIMSK +#endif + +class SPISettings { +public: + SPISettings(uint32_t clock, uint8_t bitOrder, uint8_t dataMode) { + if (__builtin_constant_p(clock)) { + init_AlwaysInline(clock, bitOrder, dataMode); + } else { + init_MightInline(clock, bitOrder, dataMode); + } + } + SPISettings() { + init_AlwaysInline(4000000, MSBFIRST, SPI_MODE0); + } +private: + void init_MightInline(uint32_t clock, uint8_t bitOrder, uint8_t dataMode) { + init_AlwaysInline(clock, bitOrder, dataMode); + } + void init_AlwaysInline(uint32_t clock, uint8_t bitOrder, uint8_t dataMode) + __attribute__((__always_inline__)) { + // Clock settings are defined as follows. Note that this shows SPI2X + // inverted, so the bits form increasing numbers. Also note that + // fosc/64 appears twice + // SPR1 SPR0 ~SPI2X Freq + // 0 0 0 fosc/2 + // 0 0 1 fosc/4 + // 0 1 0 fosc/8 + // 0 1 1 fosc/16 + // 1 0 0 fosc/32 + // 1 0 1 fosc/64 + // 1 1 0 fosc/64 + // 1 1 1 fosc/128 + + // We find the fastest clock that is less than or equal to the + // given clock rate. The clock divider that results in clock_setting + // is 2 ^^ (clock_div + 1). If nothing is slow enough, we'll use the + // slowest (128 == 2 ^^ 7, so clock_div = 6). + uint8_t clockDiv; + + // When the clock is known at compiletime, use this if-then-else + // cascade, which the compiler knows how to completely optimize + // away. When clock is not known, use a loop instead, which generates + // shorter code. + if (__builtin_constant_p(clock)) { + if (clock >= F_CPU / 2) { + clockDiv = 0; + } else if (clock >= F_CPU / 4) { + clockDiv = 1; + } else if (clock >= F_CPU / 8) { + clockDiv = 2; + } else if (clock >= F_CPU / 16) { + clockDiv = 3; + } else if (clock >= F_CPU / 32) { + clockDiv = 4; + } else if (clock >= F_CPU / 64) { + clockDiv = 5; + } else { + clockDiv = 6; + } + } else { + uint32_t clockSetting = F_CPU / 2; + clockDiv = 0; + while (clockDiv < 6 && clock < clockSetting) { + clockSetting /= 2; + clockDiv++; + } + } + + // Compensate for the duplicate fosc/64 + if (clockDiv == 6) + clockDiv = 7; + + // Invert the SPI2X bit + clockDiv ^= 0x1; + + // Pack into the SPISettings class + spcr = _BV(SPE) | _BV(MSTR) | ((bitOrder == LSBFIRST) ? _BV(DORD) : 0) | + (dataMode & SPI_MODE_MASK) | ((clockDiv >> 1) & SPI_CLOCK_MASK); + spsr = clockDiv & SPI_2XCLOCK_MASK; + } + uint8_t spcr; + uint8_t spsr; + friend class SPIClass; +}; + + +class SPIClass { +public: + // Initialize the SPI library + static void begin(); + + // If SPI is used from within an interrupt, this function registers + // that interrupt with the SPI library, so beginTransaction() can + // prevent conflicts. The input interruptNumber is the number used + // with attachInterrupt. If SPI is used from a different interrupt + // (eg, a timer), interruptNumber should be 255. + static void usingInterrupt(uint8_t interruptNumber); + // And this does the opposite. + static void notUsingInterrupt(uint8_t interruptNumber); + // Note: the usingInterrupt and notUsingInterrupt functions should + // not to be called from ISR context or inside a transaction. + // For details see: + // https://github.com/arduino/Arduino/pull/2381 + // https://github.com/arduino/Arduino/pull/2449 + + // Before using SPI.transfer() or asserting chip select pins, + // this function is used to gain exclusive access to the SPI bus + // and configure the correct settings. + inline static void beginTransaction(SPISettings settings) { + if (interruptMode > 0) { + uint8_t sreg = SREG; + noInterrupts(); + + #ifdef SPI_AVR_EIMSK + if (interruptMode == 1) { + interruptSave = SPI_AVR_EIMSK; + SPI_AVR_EIMSK &= ~interruptMask; + SREG = sreg; + } else + #endif + { + interruptSave = sreg; + } + } + + #ifdef SPI_TRANSACTION_MISMATCH_LED + if (inTransactionFlag) { + pinMode(SPI_TRANSACTION_MISMATCH_LED, OUTPUT); + digitalWrite(SPI_TRANSACTION_MISMATCH_LED, HIGH); + } + inTransactionFlag = 1; + #endif + + SPCR = settings.spcr; + SPSR = settings.spsr; + } + + // Write to the SPI bus (MOSI pin) and also receive (MISO pin) + inline static uint8_t transfer(uint8_t data) { + SPDR = data; + /* + * The following NOP introduces a small delay that can prevent the wait + * loop form iterating when running at the maximum speed. This gives + * about 10% more speed, even if it seems counter-intuitive. At lower + * speeds it is unnoticed. + */ + asm volatile("nop"); + while (!(SPSR & _BV(SPIF))) ; // wait + return SPDR; + } + inline static uint16_t transfer16(uint16_t data) { + union { uint16_t val; struct { uint8_t lsb; uint8_t msb; }; } in, out; + in.val = data; + if (!(SPCR & _BV(DORD))) { + SPDR = in.msb; + asm volatile("nop"); // See transfer(uint8_t) function + while (!(SPSR & _BV(SPIF))) ; + out.msb = SPDR; + SPDR = in.lsb; + asm volatile("nop"); + while (!(SPSR & _BV(SPIF))) ; + out.lsb = SPDR; + } else { + SPDR = in.lsb; + asm volatile("nop"); + while (!(SPSR & _BV(SPIF))) ; + out.lsb = SPDR; + SPDR = in.msb; + asm volatile("nop"); + while (!(SPSR & _BV(SPIF))) ; + out.msb = SPDR; + } + return out.val; + } + inline static void transfer(void *buf, size_t count) { + if (count == 0) return; + uint8_t *p = (uint8_t *)buf; + SPDR = *p; + while (--count > 0) { + uint8_t out = *(p + 1); + while (!(SPSR & _BV(SPIF))) ; + uint8_t in = SPDR; + SPDR = out; + *p++ = in; + } + while (!(SPSR & _BV(SPIF))) ; + *p = SPDR; + } + // After performing a group of transfers and releasing the chip select + // signal, this function allows others to access the SPI bus + inline static void endTransaction(void) { + #ifdef SPI_TRANSACTION_MISMATCH_LED + if (!inTransactionFlag) { + pinMode(SPI_TRANSACTION_MISMATCH_LED, OUTPUT); + digitalWrite(SPI_TRANSACTION_MISMATCH_LED, HIGH); + } + inTransactionFlag = 0; + #endif + + if (interruptMode > 0) { + #ifdef SPI_AVR_EIMSK + uint8_t sreg = SREG; + #endif + noInterrupts(); + #ifdef SPI_AVR_EIMSK + if (interruptMode == 1) { + SPI_AVR_EIMSK = interruptSave; + SREG = sreg; + } else + #endif + { + SREG = interruptSave; + } + } + } + + // Disable the SPI bus + static void end(); + + // This function is deprecated. New applications should use + // beginTransaction() to configure SPI settings. + inline static void setBitOrder(uint8_t bitOrder) { + if (bitOrder == LSBFIRST) SPCR |= _BV(DORD); + else SPCR &= ~(_BV(DORD)); + } + // This function is deprecated. New applications should use + // beginTransaction() to configure SPI settings. + inline static void setDataMode(uint8_t dataMode) { + SPCR = (SPCR & ~SPI_MODE_MASK) | dataMode; + } + // This function is deprecated. New applications should use + // beginTransaction() to configure SPI settings. + inline static void setClockDivider(uint8_t clockDiv) { + SPCR = (SPCR & ~SPI_CLOCK_MASK) | (clockDiv & SPI_CLOCK_MASK); + SPSR = (SPSR & ~SPI_2XCLOCK_MASK) | ((clockDiv >> 2) & SPI_2XCLOCK_MASK); + } + // These undocumented functions should not be used. SPI.transfer() + // polls the hardware flag which is automatically cleared as the + // AVR responds to SPI's interrupt + inline static void attachInterrupt() { SPCR |= _BV(SPIE); } + inline static void detachInterrupt() { SPCR &= ~_BV(SPIE); } + +private: + static uint8_t initialized; + static uint8_t interruptMode; // 0=none, 1=mask, 2=global + static uint8_t interruptMask; // which interrupts to mask + static uint8_t interruptSave; // temp storage, to restore state + #ifdef SPI_TRANSACTION_MISMATCH_LED + static uint8_t inTransactionFlag; + #endif +}; + +extern SPIClass SPI; + +#endif diff --git a/external/arduino/avr/libraries/SoftwareSerial/examples/SoftwareSerialExample/SoftwareSerialExample.ino b/external/arduino/avr/libraries/SoftwareSerial/examples/SoftwareSerialExample/SoftwareSerialExample.ino new file mode 100644 index 000000000..61ce88c62 --- /dev/null +++ b/external/arduino/avr/libraries/SoftwareSerial/examples/SoftwareSerialExample/SoftwareSerialExample.ino @@ -0,0 +1,55 @@ +/* + Software serial multple serial test + + Receives from the hardware serial, sends to software serial. + Receives from software serial, sends to hardware serial. + + The circuit: + * RX is digital pin 10 (connect to TX of other device) + * TX is digital pin 11 (connect to RX of other device) + + Note: + Not all pins on the Mega and Mega 2560 support change interrupts, + so only the following can be used for RX: + 10, 11, 12, 13, 50, 51, 52, 53, 62, 63, 64, 65, 66, 67, 68, 69 + + Not all pins on the Leonardo and Micro support change interrupts, + so only the following can be used for RX: + 8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI). + + created back in the mists of time + modified 25 May 2012 + by Tom Igoe + based on Mikal Hart's example + + This example code is in the public domain. + + */ +#include + +SoftwareSerial mySerial(10, 11); // RX, TX + +void setup() { + // Open serial communications and wait for port to open: + Serial.begin(57600); + while (!Serial) { + ; // wait for serial port to connect. Needed for native USB port only + } + + + Serial.println("Goodnight moon!"); + + // set the data rate for the SoftwareSerial port + mySerial.begin(4800); + mySerial.println("Hello, world?"); +} + +void loop() { // run over and over + if (mySerial.available()) { + Serial.write(mySerial.read()); + } + if (Serial.available()) { + mySerial.write(Serial.read()); + } +} + diff --git a/external/arduino/avr/libraries/SoftwareSerial/examples/TwoPortReceive/TwoPortReceive.ino b/external/arduino/avr/libraries/SoftwareSerial/examples/TwoPortReceive/TwoPortReceive.ino new file mode 100644 index 000000000..8d7f93e8f --- /dev/null +++ b/external/arduino/avr/libraries/SoftwareSerial/examples/TwoPortReceive/TwoPortReceive.ino @@ -0,0 +1,91 @@ +/* + Software serial multple serial test + + Receives from the two software serial ports, + sends to the hardware serial port. + + In order to listen on a software port, you call port.listen(). + When using two software serial ports, you have to switch ports + by listen()ing on each one in turn. Pick a logical time to switch + ports, like the end of an expected transmission, or when the + buffer is empty. This example switches ports when there is nothing + more to read from a port + + The circuit: + Two devices which communicate serially are needed. + * First serial device's TX attached to digital pin 10(RX), RX to pin 11(TX) + * Second serial device's TX attached to digital pin 8(RX), RX to pin 9(TX) + + Note: + Not all pins on the Mega and Mega 2560 support change interrupts, + so only the following can be used for RX: + 10, 11, 12, 13, 50, 51, 52, 53, 62, 63, 64, 65, 66, 67, 68, 69 + + Not all pins on the Leonardo support change interrupts, + so only the following can be used for RX: + 8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI). + + created 18 Apr. 2011 + modified 19 March 2016 + by Tom Igoe + based on Mikal Hart's twoPortRXExample + + This example code is in the public domain. + + */ + +#include +// software serial #1: RX = digital pin 10, TX = digital pin 11 +SoftwareSerial portOne(10, 11); + +// software serial #2: RX = digital pin 8, TX = digital pin 9 +// on the Mega, use other pins instead, since 8 and 9 don't work on the Mega +SoftwareSerial portTwo(8, 9); + +void setup() { + // Open serial communications and wait for port to open: + Serial.begin(9600); + while (!Serial) { + ; // wait for serial port to connect. Needed for native USB port only + } + + + // Start each software serial port + portOne.begin(9600); + portTwo.begin(9600); +} + +void loop() { + // By default, the last intialized port is listening. + // when you want to listen on a port, explicitly select it: + portOne.listen(); + Serial.println("Data from port one:"); + // while there is data coming in, read it + // and send to the hardware serial port: + while (portOne.available() > 0) { + char inByte = portOne.read(); + Serial.write(inByte); + } + + // blank line to separate data from the two ports: + Serial.println(); + + // Now listen on the second port + portTwo.listen(); + // while there is data coming in, read it + // and send to the hardware serial port: + Serial.println("Data from port two:"); + while (portTwo.available() > 0) { + char inByte = portTwo.read(); + Serial.write(inByte); + } + + // blank line to separate data from the two ports: + Serial.println(); +} + + + + + + diff --git a/external/arduino/avr/libraries/SoftwareSerial/keywords.txt b/external/arduino/avr/libraries/SoftwareSerial/keywords.txt new file mode 100644 index 000000000..aaea17c20 --- /dev/null +++ b/external/arduino/avr/libraries/SoftwareSerial/keywords.txt @@ -0,0 +1,30 @@ +####################################### +# Syntax Coloring Map for SoftwareSerial +# (formerly NewSoftSerial) +####################################### + +####################################### +# Datatypes (KEYWORD1) +####################################### + +SoftwareSerial KEYWORD1 + +####################################### +# Methods and Functions (KEYWORD2) +####################################### + +begin KEYWORD2 +end KEYWORD2 +read KEYWORD2 +write KEYWORD2 +available KEYWORD2 +isListening KEYWORD2 +overflow KEYWORD2 +flush KEYWORD2 +listen KEYWORD2 +peek KEYWORD2 + +####################################### +# Constants (LITERAL1) +####################################### + diff --git a/external/arduino/avr/libraries/SoftwareSerial/library.properties b/external/arduino/avr/libraries/SoftwareSerial/library.properties new file mode 100644 index 000000000..6d20a49cf --- /dev/null +++ b/external/arduino/avr/libraries/SoftwareSerial/library.properties @@ -0,0 +1,10 @@ +name=SoftwareSerial +version=1.0 +author=Arduino +maintainer=Arduino +sentence=Enables serial communication on any digital pin. +paragraph=The SoftwareSerial library has been developed to allow serial communication on any digital pin of the board, using software to replicate the functionality of the hardware UART. It is possible to have multiple software serial ports with speeds up to 115200 bps. +category=Communication +url=http://www.arduino.cc/en/Reference/SoftwareSerial +architectures=avr + diff --git a/external/arduino/avr/libraries/SoftwareSerial/src/SoftwareSerial.cpp b/external/arduino/avr/libraries/SoftwareSerial/src/SoftwareSerial.cpp new file mode 100644 index 000000000..53507056f --- /dev/null +++ b/external/arduino/avr/libraries/SoftwareSerial/src/SoftwareSerial.cpp @@ -0,0 +1,486 @@ +/* +SoftwareSerial.cpp (formerly NewSoftSerial.cpp) - +Multi-instance software serial library for Arduino/Wiring +-- Interrupt-driven receive and other improvements by ladyada + (http://ladyada.net) +-- Tuning, circular buffer, derivation from class Print/Stream, + multi-instance support, porting to 8MHz processors, + various optimizations, PROGMEM delay tables, inverse logic and + direct port writing by Mikal Hart (http://www.arduiniana.org) +-- Pin change interrupt macros by Paul Stoffregen (http://www.pjrc.com) +-- 20MHz processor support by Garrett Mace (http://www.macetech.com) +-- ATmega1280/2560 support by Brett Hagman (http://www.roguerobotics.com/) + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +The latest version of this library can always be found at +http://arduiniana.org. +*/ + +// When set, _DEBUG co-opts pins 11 and 13 for debugging with an +// oscilloscope or logic analyzer. Beware: it also slightly modifies +// the bit times, so don't rely on it too much at high baud rates +#define _DEBUG 0 +#define _DEBUG_PIN1 11 +#define _DEBUG_PIN2 13 +// +// Includes +// +#include +#include +#include +#include +#include + +// +// Statics +// +SoftwareSerial *SoftwareSerial::active_object = 0; +uint8_t SoftwareSerial::_receive_buffer[_SS_MAX_RX_BUFF]; +volatile uint8_t SoftwareSerial::_receive_buffer_tail = 0; +volatile uint8_t SoftwareSerial::_receive_buffer_head = 0; + +// +// Debugging +// +// This function generates a brief pulse +// for debugging or measuring on an oscilloscope. +#if _DEBUG +inline void DebugPulse(uint8_t pin, uint8_t count) +{ + volatile uint8_t *pport = portOutputRegister(digitalPinToPort(pin)); + + uint8_t val = *pport; + while (count--) + { + *pport = val | digitalPinToBitMask(pin); + *pport = val; + } +} +#else +inline void DebugPulse(uint8_t, uint8_t) {} +#endif + +// +// Private methods +// + +/* static */ +inline void SoftwareSerial::tunedDelay(uint16_t delay) { + _delay_loop_2(delay); +} + +// This function sets the current object as the "listening" +// one and returns true if it replaces another +bool SoftwareSerial::listen() +{ + if (!_rx_delay_stopbit) + return false; + + if (active_object != this) + { + if (active_object) + active_object->stopListening(); + + _buffer_overflow = false; + _receive_buffer_head = _receive_buffer_tail = 0; + active_object = this; + + setRxIntMsk(true); + return true; + } + + return false; +} + +// Stop listening. Returns true if we were actually listening. +bool SoftwareSerial::stopListening() +{ + if (active_object == this) + { + setRxIntMsk(false); + active_object = NULL; + return true; + } + return false; +} + +// +// The receive routine called by the interrupt handler +// +void SoftwareSerial::recv() +{ + +#if GCC_VERSION < 40302 +// Work-around for avr-gcc 4.3.0 OSX version bug +// Preserve the registers that the compiler misses +// (courtesy of Arduino forum user *etracer*) + asm volatile( + "push r18 \n\t" + "push r19 \n\t" + "push r20 \n\t" + "push r21 \n\t" + "push r22 \n\t" + "push r23 \n\t" + "push r26 \n\t" + "push r27 \n\t" + ::); +#endif + + uint8_t d = 0; + + // If RX line is high, then we don't see any start bit + // so interrupt is probably not for us + if (_inverse_logic ? rx_pin_read() : !rx_pin_read()) + { + // Disable further interrupts during reception, this prevents + // triggering another interrupt directly after we return, which can + // cause problems at higher baudrates. + setRxIntMsk(false); + + // Wait approximately 1/2 of a bit width to "center" the sample + tunedDelay(_rx_delay_centering); + DebugPulse(_DEBUG_PIN2, 1); + + // Read each of the 8 bits + for (uint8_t i=8; i > 0; --i) + { + tunedDelay(_rx_delay_intrabit); + d >>= 1; + DebugPulse(_DEBUG_PIN2, 1); + if (rx_pin_read()) + d |= 0x80; + } + + if (_inverse_logic) + d = ~d; + + // if buffer full, set the overflow flag and return + uint8_t next = (_receive_buffer_tail + 1) % _SS_MAX_RX_BUFF; + if (next != _receive_buffer_head) + { + // save new data in buffer: tail points to where byte goes + _receive_buffer[_receive_buffer_tail] = d; // save new byte + _receive_buffer_tail = next; + } + else + { + DebugPulse(_DEBUG_PIN1, 1); + _buffer_overflow = true; + } + + // skip the stop bit + tunedDelay(_rx_delay_stopbit); + DebugPulse(_DEBUG_PIN1, 1); + + // Re-enable interrupts when we're sure to be inside the stop bit + setRxIntMsk(true); + + } + +#if GCC_VERSION < 40302 +// Work-around for avr-gcc 4.3.0 OSX version bug +// Restore the registers that the compiler misses + asm volatile( + "pop r27 \n\t" + "pop r26 \n\t" + "pop r23 \n\t" + "pop r22 \n\t" + "pop r21 \n\t" + "pop r20 \n\t" + "pop r19 \n\t" + "pop r18 \n\t" + ::); +#endif +} + +uint8_t SoftwareSerial::rx_pin_read() +{ + return *_receivePortRegister & _receiveBitMask; +} + +// +// Interrupt handling +// + +/* static */ +inline void SoftwareSerial::handle_interrupt() +{ + if (active_object) + { + active_object->recv(); + } +} + +#if defined(PCINT0_vect) +ISR(PCINT0_vect) +{ + SoftwareSerial::handle_interrupt(); +} +#endif + +#if defined(PCINT1_vect) +ISR(PCINT1_vect, ISR_ALIASOF(PCINT0_vect)); +#endif + +#if defined(PCINT2_vect) +ISR(PCINT2_vect, ISR_ALIASOF(PCINT0_vect)); +#endif + +#if defined(PCINT3_vect) +ISR(PCINT3_vect, ISR_ALIASOF(PCINT0_vect)); +#endif + +// +// Constructor +// +SoftwareSerial::SoftwareSerial(uint8_t receivePin, uint8_t transmitPin, bool inverse_logic /* = false */) : + _rx_delay_centering(0), + _rx_delay_intrabit(0), + _rx_delay_stopbit(0), + _tx_delay(0), + _buffer_overflow(false), + _inverse_logic(inverse_logic) +{ + setTX(transmitPin); + setRX(receivePin); +} + +// +// Destructor +// +SoftwareSerial::~SoftwareSerial() +{ + end(); +} + +void SoftwareSerial::setTX(uint8_t tx) +{ + // First write, then set output. If we do this the other way around, + // the pin would be output low for a short while before switching to + // output high. Now, it is input with pullup for a short while, which + // is fine. With inverse logic, either order is fine. + digitalWrite(tx, _inverse_logic ? LOW : HIGH); + pinMode(tx, OUTPUT); + _transmitBitMask = digitalPinToBitMask(tx); + uint8_t port = digitalPinToPort(tx); + _transmitPortRegister = portOutputRegister(port); +} + +void SoftwareSerial::setRX(uint8_t rx) +{ + pinMode(rx, INPUT); + if (!_inverse_logic) + digitalWrite(rx, HIGH); // pullup for normal logic! + _receivePin = rx; + _receiveBitMask = digitalPinToBitMask(rx); + uint8_t port = digitalPinToPort(rx); + _receivePortRegister = portInputRegister(port); +} + +uint16_t SoftwareSerial::subtract_cap(uint16_t num, uint16_t sub) { + if (num > sub) + return num - sub; + else + return 1; +} + +// +// Public methods +// + +void SoftwareSerial::begin(long speed) +{ + _rx_delay_centering = _rx_delay_intrabit = _rx_delay_stopbit = _tx_delay = 0; + + // Precalculate the various delays, in number of 4-cycle delays + uint16_t bit_delay = (F_CPU / speed) / 4; + + // 12 (gcc 4.8.2) or 13 (gcc 4.3.2) cycles from start bit to first bit, + // 15 (gcc 4.8.2) or 16 (gcc 4.3.2) cycles between bits, + // 12 (gcc 4.8.2) or 14 (gcc 4.3.2) cycles from last bit to stop bit + // These are all close enough to just use 15 cycles, since the inter-bit + // timings are the most critical (deviations stack 8 times) + _tx_delay = subtract_cap(bit_delay, 15 / 4); + + // Only setup rx when we have a valid PCINT for this pin + if (digitalPinToPCICR((int8_t)_receivePin)) { + #if GCC_VERSION > 40800 + // Timings counted from gcc 4.8.2 output. This works up to 115200 on + // 16Mhz and 57600 on 8Mhz. + // + // When the start bit occurs, there are 3 or 4 cycles before the + // interrupt flag is set, 4 cycles before the PC is set to the right + // interrupt vector address and the old PC is pushed on the stack, + // and then 75 cycles of instructions (including the RJMP in the + // ISR vector table) until the first delay. After the delay, there + // are 17 more cycles until the pin value is read (excluding the + // delay in the loop). + // We want to have a total delay of 1.5 bit time. Inside the loop, + // we already wait for 1 bit time - 23 cycles, so here we wait for + // 0.5 bit time - (71 + 18 - 22) cycles. + _rx_delay_centering = subtract_cap(bit_delay / 2, (4 + 4 + 75 + 17 - 23) / 4); + + // There are 23 cycles in each loop iteration (excluding the delay) + _rx_delay_intrabit = subtract_cap(bit_delay, 23 / 4); + + // There are 37 cycles from the last bit read to the start of + // stopbit delay and 11 cycles from the delay until the interrupt + // mask is enabled again (which _must_ happen during the stopbit). + // This delay aims at 3/4 of a bit time, meaning the end of the + // delay will be at 1/4th of the stopbit. This allows some extra + // time for ISR cleanup, which makes 115200 baud at 16Mhz work more + // reliably + _rx_delay_stopbit = subtract_cap(bit_delay * 3 / 4, (37 + 11) / 4); + #else // Timings counted from gcc 4.3.2 output + // Note that this code is a _lot_ slower, mostly due to bad register + // allocation choices of gcc. This works up to 57600 on 16Mhz and + // 38400 on 8Mhz. + _rx_delay_centering = subtract_cap(bit_delay / 2, (4 + 4 + 97 + 29 - 11) / 4); + _rx_delay_intrabit = subtract_cap(bit_delay, 11 / 4); + _rx_delay_stopbit = subtract_cap(bit_delay * 3 / 4, (44 + 17) / 4); + #endif + + + // Enable the PCINT for the entire port here, but never disable it + // (others might also need it, so we disable the interrupt by using + // the per-pin PCMSK register). + *digitalPinToPCICR((int8_t)_receivePin) |= _BV(digitalPinToPCICRbit(_receivePin)); + // Precalculate the pcint mask register and value, so setRxIntMask + // can be used inside the ISR without costing too much time. + _pcint_maskreg = digitalPinToPCMSK(_receivePin); + _pcint_maskvalue = _BV(digitalPinToPCMSKbit(_receivePin)); + + tunedDelay(_tx_delay); // if we were low this establishes the end + } + +#if _DEBUG + pinMode(_DEBUG_PIN1, OUTPUT); + pinMode(_DEBUG_PIN2, OUTPUT); +#endif + + listen(); +} + +void SoftwareSerial::setRxIntMsk(bool enable) +{ + if (enable) + *_pcint_maskreg |= _pcint_maskvalue; + else + *_pcint_maskreg &= ~_pcint_maskvalue; +} + +void SoftwareSerial::end() +{ + stopListening(); +} + + +// Read data from buffer +int SoftwareSerial::read() +{ + if (!isListening()) + return -1; + + // Empty buffer? + if (_receive_buffer_head == _receive_buffer_tail) + return -1; + + // Read from "head" + uint8_t d = _receive_buffer[_receive_buffer_head]; // grab next byte + _receive_buffer_head = (_receive_buffer_head + 1) % _SS_MAX_RX_BUFF; + return d; +} + +int SoftwareSerial::available() +{ + if (!isListening()) + return 0; + + return (_receive_buffer_tail + _SS_MAX_RX_BUFF - _receive_buffer_head) % _SS_MAX_RX_BUFF; +} + +size_t SoftwareSerial::write(uint8_t b) +{ + if (_tx_delay == 0) { + setWriteError(); + return 0; + } + + // By declaring these as local variables, the compiler will put them + // in registers _before_ disabling interrupts and entering the + // critical timing sections below, which makes it a lot easier to + // verify the cycle timings + volatile uint8_t *reg = _transmitPortRegister; + uint8_t reg_mask = _transmitBitMask; + uint8_t inv_mask = ~_transmitBitMask; + uint8_t oldSREG = SREG; + bool inv = _inverse_logic; + uint16_t delay = _tx_delay; + + if (inv) + b = ~b; + + cli(); // turn off interrupts for a clean txmit + + // Write the start bit + if (inv) + *reg |= reg_mask; + else + *reg &= inv_mask; + + tunedDelay(delay); + + // Write each of the 8 bits + for (uint8_t i = 8; i > 0; --i) + { + if (b & 1) // choose bit + *reg |= reg_mask; // send 1 + else + *reg &= inv_mask; // send 0 + + tunedDelay(delay); + b >>= 1; + } + + // restore pin to natural state + if (inv) + *reg &= inv_mask; + else + *reg |= reg_mask; + + SREG = oldSREG; // turn interrupts back on + tunedDelay(_tx_delay); + + return 1; +} + +void SoftwareSerial::flush() +{ + // There is no tx buffering, simply return +} + +int SoftwareSerial::peek() +{ + if (!isListening()) + return -1; + + // Empty buffer? + if (_receive_buffer_head == _receive_buffer_tail) + return -1; + + // Read from "head" + return _receive_buffer[_receive_buffer_head]; +} diff --git a/external/arduino/avr/libraries/SoftwareSerial/src/SoftwareSerial.h b/external/arduino/avr/libraries/SoftwareSerial/src/SoftwareSerial.h new file mode 100644 index 000000000..397d7627a --- /dev/null +++ b/external/arduino/avr/libraries/SoftwareSerial/src/SoftwareSerial.h @@ -0,0 +1,114 @@ +/* +SoftwareSerial.h (formerly NewSoftSerial.h) - +Multi-instance software serial library for Arduino/Wiring +-- Interrupt-driven receive and other improvements by ladyada + (http://ladyada.net) +-- Tuning, circular buffer, derivation from class Print/Stream, + multi-instance support, porting to 8MHz processors, + various optimizations, PROGMEM delay tables, inverse logic and + direct port writing by Mikal Hart (http://www.arduiniana.org) +-- Pin change interrupt macros by Paul Stoffregen (http://www.pjrc.com) +-- 20MHz processor support by Garrett Mace (http://www.macetech.com) +-- ATmega1280/2560 support by Brett Hagman (http://www.roguerobotics.com/) + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +The latest version of this library can always be found at +http://arduiniana.org. +*/ + +#ifndef SoftwareSerial_h +#define SoftwareSerial_h + +#include +#include + +/****************************************************************************** +* Definitions +******************************************************************************/ + +#ifndef _SS_MAX_RX_BUFF +#define _SS_MAX_RX_BUFF 64 // RX buffer size +#endif + +#ifndef GCC_VERSION +#define GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) +#endif + +class SoftwareSerial : public Stream +{ +private: + // per object data + uint8_t _receivePin; + uint8_t _receiveBitMask; + volatile uint8_t *_receivePortRegister; + uint8_t _transmitBitMask; + volatile uint8_t *_transmitPortRegister; + volatile uint8_t *_pcint_maskreg; + uint8_t _pcint_maskvalue; + + // Expressed as 4-cycle delays (must never be 0!) + uint16_t _rx_delay_centering; + uint16_t _rx_delay_intrabit; + uint16_t _rx_delay_stopbit; + uint16_t _tx_delay; + + uint16_t _buffer_overflow:1; + uint16_t _inverse_logic:1; + + // static data + static uint8_t _receive_buffer[_SS_MAX_RX_BUFF]; + static volatile uint8_t _receive_buffer_tail; + static volatile uint8_t _receive_buffer_head; + static SoftwareSerial *active_object; + + // private methods + inline void recv() __attribute__((__always_inline__)); + uint8_t rx_pin_read(); + void setTX(uint8_t transmitPin); + void setRX(uint8_t receivePin); + inline void setRxIntMsk(bool enable) __attribute__((__always_inline__)); + + // Return num - sub, or 1 if the result would be < 1 + static uint16_t subtract_cap(uint16_t num, uint16_t sub); + + // private static method for timing + static inline void tunedDelay(uint16_t delay); + +public: + // public methods + SoftwareSerial(uint8_t receivePin, uint8_t transmitPin, bool inverse_logic = false); + ~SoftwareSerial(); + void begin(long speed); + bool listen(); + void end(); + bool isListening() { return this == active_object; } + bool stopListening(); + bool overflow() { bool ret = _buffer_overflow; if (ret) _buffer_overflow = false; return ret; } + int peek(); + + virtual size_t write(uint8_t byte); + virtual int read(); + virtual int available(); + virtual void flush(); + operator bool() { return true; } + + using Print::write; + + // public only for easy access by interrupt handlers + static inline void handle_interrupt() __attribute__((__always_inline__)); +}; + +#endif diff --git a/external/arduino/avr/libraries/Wire/examples/SFRRanger_reader/SFRRanger_reader.ino b/external/arduino/avr/libraries/Wire/examples/SFRRanger_reader/SFRRanger_reader.ino new file mode 100644 index 000000000..4d0a68f8d --- /dev/null +++ b/external/arduino/avr/libraries/Wire/examples/SFRRanger_reader/SFRRanger_reader.ino @@ -0,0 +1,84 @@ +// I2C SRF10 or SRF08 Devantech Ultrasonic Ranger Finder +// by Nicholas Zambetti +// and James Tichenor + +// Demonstrates use of the Wire library reading data from the +// Devantech Utrasonic Rangers SFR08 and SFR10 + +// Created 29 April 2006 + +// This example code is in the public domain. + + +#include + +void setup() { + Wire.begin(); // join i2c bus (address optional for master) + Serial.begin(9600); // start serial communication at 9600bps +} + +int reading = 0; + +void loop() { + // step 1: instruct sensor to read echoes + Wire.beginTransmission(112); // transmit to device #112 (0x70) + // the address specified in the datasheet is 224 (0xE0) + // but i2c adressing uses the high 7 bits so it's 112 + Wire.write(byte(0x00)); // sets register pointer to the command register (0x00) + Wire.write(byte(0x50)); // command sensor to measure in "inches" (0x50) + // use 0x51 for centimeters + // use 0x52 for ping microseconds + Wire.endTransmission(); // stop transmitting + + // step 2: wait for readings to happen + delay(70); // datasheet suggests at least 65 milliseconds + + // step 3: instruct sensor to return a particular echo reading + Wire.beginTransmission(112); // transmit to device #112 + Wire.write(byte(0x02)); // sets register pointer to echo #1 register (0x02) + Wire.endTransmission(); // stop transmitting + + // step 4: request reading from sensor + Wire.requestFrom(112, 2); // request 2 bytes from slave device #112 + + // step 5: receive reading from sensor + if (2 <= Wire.available()) { // if two bytes were received + reading = Wire.read(); // receive high byte (overwrites previous reading) + reading = reading << 8; // shift high byte to be high 8 bits + reading |= Wire.read(); // receive low byte as lower 8 bits + Serial.println(reading); // print the reading + } + + delay(250); // wait a bit since people have to read the output :) +} + + +/* + +// The following code changes the address of a Devantech Ultrasonic Range Finder (SRF10 or SRF08) +// usage: changeAddress(0x70, 0xE6); + +void changeAddress(byte oldAddress, byte newAddress) +{ + Wire.beginTransmission(oldAddress); + Wire.write(byte(0x00)); + Wire.write(byte(0xA0)); + Wire.endTransmission(); + + Wire.beginTransmission(oldAddress); + Wire.write(byte(0x00)); + Wire.write(byte(0xAA)); + Wire.endTransmission(); + + Wire.beginTransmission(oldAddress); + Wire.write(byte(0x00)); + Wire.write(byte(0xA5)); + Wire.endTransmission(); + + Wire.beginTransmission(oldAddress); + Wire.write(byte(0x00)); + Wire.write(newAddress); + Wire.endTransmission(); +} + +*/ diff --git a/external/arduino/avr/libraries/Wire/examples/digital_potentiometer/digital_potentiometer.ino b/external/arduino/avr/libraries/Wire/examples/digital_potentiometer/digital_potentiometer.ino new file mode 100644 index 000000000..dd40a2526 --- /dev/null +++ b/external/arduino/avr/libraries/Wire/examples/digital_potentiometer/digital_potentiometer.ino @@ -0,0 +1,34 @@ +// I2C Digital Potentiometer +// by Nicholas Zambetti +// and Shawn Bonkowski + +// Demonstrates use of the Wire library +// Controls AD5171 digital potentiometer via I2C/TWI + +// Created 31 March 2006 + +// This example code is in the public domain. + + +#include + +void setup() { + Wire.begin(); // join i2c bus (address optional for master) +} + +byte val = 0; + +void loop() { + Wire.beginTransmission(44); // transmit to device #44 (0x2c) + // device address is specified in datasheet + Wire.write(byte(0x00)); // sends instruction byte + Wire.write(val); // sends potentiometer value byte + Wire.endTransmission(); // stop transmitting + + val++; // increment value + if (val == 64) { // if reached 64th position (max) + val = 0; // start over from lowest value + } + delay(500); +} + diff --git a/external/arduino/avr/libraries/Wire/examples/i2c_scanner/i2c_scanner.ino b/external/arduino/avr/libraries/Wire/examples/i2c_scanner/i2c_scanner.ino new file mode 100644 index 000000000..3febbf441 --- /dev/null +++ b/external/arduino/avr/libraries/Wire/examples/i2c_scanner/i2c_scanner.ino @@ -0,0 +1,75 @@ +// -------------------------------------- +// i2c_scanner +// +// Version 1 +// This program (or code that looks like it) +// can be found in many places. +// For example on the Arduino.cc forum. +// The original author is not know. +// Version 2, Juni 2012, Using Arduino 1.0.1 +// Adapted to be as simple as possible by Arduino.cc user Krodal +// Version 3, Feb 26 2013 +// V3 by louarnold +// Version 4, March 3, 2013, Using Arduino 1.0.3 +// by Arduino.cc user Krodal. +// Changes by louarnold removed. +// Scanning addresses changed from 0...127 to 1...119, +// according to the i2c scanner by Nick Gammon +// https://www.gammon.com.au/forum/?id=10896 +// Version 5, March 28, 2013 +// As version 4, but address scans now to 127. +// A sensor seems to use address 120. +// Version 6, November 27, 2015. +// Added waiting for the Leonardo serial communication. +// +// +// This sketch tests the standard 7-bit addresses +// Devices with higher bit address might not be seen properly. +// + +#include + +void setup() { + Wire.begin(); + + Serial.begin(9600); + while (!Serial); // Leonardo: wait for serial monitor + Serial.println("\nI2C Scanner"); +} + +void loop() { + int nDevices = 0; + + Serial.println("Scanning..."); + + for (byte address = 1; address < 127; ++address) { + // The i2c_scanner uses the return value of + // the Write.endTransmisstion to see if + // a device did acknowledge to the address. + Wire.beginTransmission(address); + byte error = Wire.endTransmission(); + + if (error == 0) { + Serial.print("I2C device found at address 0x"); + if (address < 16) { + Serial.print("0"); + } + Serial.print(address, HEX); + Serial.println(" !"); + + ++nDevices; + } else if (error == 4) { + Serial.print("Unknown error at address 0x"); + if (address < 16) { + Serial.print("0"); + } + Serial.println(address, HEX); + } + } + if (nDevices == 0) { + Serial.println("No I2C devices found\n"); + } else { + Serial.println("done\n"); + } + delay(5000); // Wait 5 seconds for next scan +} diff --git a/external/arduino/avr/libraries/Wire/examples/master_reader/master_reader.ino b/external/arduino/avr/libraries/Wire/examples/master_reader/master_reader.ino new file mode 100644 index 000000000..ecab72ab9 --- /dev/null +++ b/external/arduino/avr/libraries/Wire/examples/master_reader/master_reader.ino @@ -0,0 +1,29 @@ +// Wire Master Reader +// by Nicholas Zambetti + +// Demonstrates use of the Wire library +// Reads data from an I2C/TWI slave device +// Refer to the "Wire Slave Sender" example for use with this + +// Created 29 March 2006 + +// This example code is in the public domain. + + +#include + +void setup() { + Wire.begin(); // join i2c bus (address optional for master) + Serial.begin(9600); // start serial for output +} + +void loop() { + Wire.requestFrom(8, 6); // request 6 bytes from slave device #8 + + while (Wire.available()) { // slave may send less than requested + char c = Wire.read(); // receive a byte as character + Serial.print(c); // print the character + } + + delay(500); +} diff --git a/external/arduino/avr/libraries/Wire/examples/master_writer/master_writer.ino b/external/arduino/avr/libraries/Wire/examples/master_writer/master_writer.ino new file mode 100644 index 000000000..5cbea1179 --- /dev/null +++ b/external/arduino/avr/libraries/Wire/examples/master_writer/master_writer.ino @@ -0,0 +1,29 @@ +// Wire Master Writer +// by Nicholas Zambetti + +// Demonstrates use of the Wire library +// Writes data to an I2C/TWI slave device +// Refer to the "Wire Slave Receiver" example for use with this + +// Created 29 March 2006 + +// This example code is in the public domain. + + +#include + +void setup() { + Wire.begin(); // join i2c bus (address optional for master) +} + +byte x = 0; + +void loop() { + Wire.beginTransmission(8); // transmit to device #8 + Wire.write("x is "); // sends five bytes + Wire.write(x); // sends one byte + Wire.endTransmission(); // stop transmitting + + x++; + delay(500); +} diff --git a/external/arduino/avr/libraries/Wire/examples/slave_receiver/slave_receiver.ino b/external/arduino/avr/libraries/Wire/examples/slave_receiver/slave_receiver.ino new file mode 100644 index 000000000..8051d53ac --- /dev/null +++ b/external/arduino/avr/libraries/Wire/examples/slave_receiver/slave_receiver.ino @@ -0,0 +1,34 @@ +// Wire Slave Receiver +// by Nicholas Zambetti + +// Demonstrates use of the Wire library +// Receives data as an I2C/TWI slave device +// Refer to the "Wire Master Writer" example for use with this + +// Created 29 March 2006 + +// This example code is in the public domain. + + +#include + +void setup() { + Wire.begin(8); // join i2c bus with address #8 + Wire.onReceive(receiveEvent); // register event + Serial.begin(9600); // start serial for output +} + +void loop() { + delay(100); +} + +// function that executes whenever data is received from master +// this function is registered as an event, see setup() +void receiveEvent(int howMany) { + while (1 < Wire.available()) { // loop through all but the last + char c = Wire.read(); // receive byte as a character + Serial.print(c); // print the character + } + int x = Wire.read(); // receive byte as an integer + Serial.println(x); // print the integer +} diff --git a/external/arduino/avr/libraries/Wire/examples/slave_sender/slave_sender.ino b/external/arduino/avr/libraries/Wire/examples/slave_sender/slave_sender.ino new file mode 100644 index 000000000..d2e72bbcf --- /dev/null +++ b/external/arduino/avr/libraries/Wire/examples/slave_sender/slave_sender.ino @@ -0,0 +1,29 @@ +// Wire Slave Sender +// by Nicholas Zambetti + +// Demonstrates use of the Wire library +// Sends data as an I2C/TWI slave device +// Refer to the "Wire Master Reader" example for use with this + +// Created 29 March 2006 + +// This example code is in the public domain. + + +#include + +void setup() { + Wire.begin(8); // join i2c bus with address #8 + Wire.onRequest(requestEvent); // register event +} + +void loop() { + delay(100); +} + +// function that executes whenever data is requested by master +// this function is registered as an event, see setup() +void requestEvent() { + Wire.write("hello "); // respond with message of 6 bytes + // as expected by master +} diff --git a/external/arduino/avr/libraries/Wire/keywords.txt b/external/arduino/avr/libraries/Wire/keywords.txt new file mode 100644 index 000000000..5e3d2b1ca --- /dev/null +++ b/external/arduino/avr/libraries/Wire/keywords.txt @@ -0,0 +1,30 @@ +####################################### +# Syntax Coloring Map For Wire +####################################### + +####################################### +# Datatypes (KEYWORD1) +####################################### + +####################################### +# Methods and Functions (KEYWORD2) +####################################### + +begin KEYWORD2 +setClock KEYWORD2 +beginTransmission KEYWORD2 +endTransmission KEYWORD2 +requestFrom KEYWORD2 +onReceive KEYWORD2 +onRequest KEYWORD2 + +####################################### +# Instances (KEYWORD2) +####################################### + +Wire KEYWORD2 + +####################################### +# Constants (LITERAL1) +####################################### + diff --git a/external/arduino/avr/libraries/Wire/library.properties b/external/arduino/avr/libraries/Wire/library.properties new file mode 100644 index 000000000..e19526e87 --- /dev/null +++ b/external/arduino/avr/libraries/Wire/library.properties @@ -0,0 +1,10 @@ +name=Wire +version=1.0 +author=Arduino +maintainer=Arduino +sentence=This library allows you to communicate with I2C and Two Wire Interface devices. +paragraph=It allows the communication with I2C devices like temperature sensors, realtime clocks and many others using SDA (Data Line) and SCL (Clock Line). +category=Communication +url=http://www.arduino.cc/en/Reference/Wire +architectures=avr + diff --git a/external/arduino/avr/libraries/Wire/src/Wire.cpp b/external/arduino/avr/libraries/Wire/src/Wire.cpp new file mode 100644 index 000000000..58916ce93 --- /dev/null +++ b/external/arduino/avr/libraries/Wire/src/Wire.cpp @@ -0,0 +1,331 @@ +/* + TwoWire.cpp - TWI/I2C library for Wiring & Arduino + Copyright (c) 2006 Nicholas Zambetti. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Modified 2012 by Todd Krein (todd@krein.org) to implement repeated starts + Modified 2017 by Chuck Todd (ctodd@cableone.net) to correct Unconfigured Slave Mode reboot +*/ + +extern "C" { + #include + #include + #include + #include "utility/twi.h" +} + +#include "Wire.h" + +// Initialize Class Variables ////////////////////////////////////////////////// + +uint8_t TwoWire::rxBuffer[BUFFER_LENGTH]; +uint8_t TwoWire::rxBufferIndex = 0; +uint8_t TwoWire::rxBufferLength = 0; + +uint8_t TwoWire::txAddress = 0; +uint8_t TwoWire::txBuffer[BUFFER_LENGTH]; +uint8_t TwoWire::txBufferIndex = 0; +uint8_t TwoWire::txBufferLength = 0; + +uint8_t TwoWire::transmitting = 0; +void (*TwoWire::user_onRequest)(void); +void (*TwoWire::user_onReceive)(int); + +// Constructors //////////////////////////////////////////////////////////////// + +TwoWire::TwoWire() +{ +} + +// Public Methods ////////////////////////////////////////////////////////////// + +void TwoWire::begin(void) +{ + rxBufferIndex = 0; + rxBufferLength = 0; + + txBufferIndex = 0; + txBufferLength = 0; + + twi_init(); + twi_attachSlaveTxEvent(onRequestService); // default callback must exist + twi_attachSlaveRxEvent(onReceiveService); // default callback must exist +} + +void TwoWire::begin(uint8_t address) +{ + begin(); + twi_setAddress(address); +} + +void TwoWire::begin(int address) +{ + begin((uint8_t)address); +} + +void TwoWire::end(void) +{ + twi_disable(); +} + +void TwoWire::setClock(uint32_t clock) +{ + twi_setFrequency(clock); +} + +uint8_t TwoWire::requestFrom(uint8_t address, uint8_t quantity, uint32_t iaddress, uint8_t isize, uint8_t sendStop) +{ + if (isize > 0) { + // send internal address; this mode allows sending a repeated start to access + // some devices' internal registers. This function is executed by the hardware + // TWI module on other processors (for example Due's TWI_IADR and TWI_MMR registers) + + beginTransmission(address); + + // the maximum size of internal address is 3 bytes + if (isize > 3){ + isize = 3; + } + + // write internal register address - most significant byte first + while (isize-- > 0) + write((uint8_t)(iaddress >> (isize*8))); + endTransmission(false); + } + + // clamp to buffer length + if(quantity > BUFFER_LENGTH){ + quantity = BUFFER_LENGTH; + } + // perform blocking read into buffer + uint8_t read = twi_readFrom(address, rxBuffer, quantity, sendStop); + // set rx buffer iterator vars + rxBufferIndex = 0; + rxBufferLength = read; + + return read; +} + +uint8_t TwoWire::requestFrom(uint8_t address, uint8_t quantity, uint8_t sendStop) { + return requestFrom((uint8_t)address, (uint8_t)quantity, (uint32_t)0, (uint8_t)0, (uint8_t)sendStop); +} + +uint8_t TwoWire::requestFrom(uint8_t address, uint8_t quantity) +{ + return requestFrom((uint8_t)address, (uint8_t)quantity, (uint8_t)true); +} + +uint8_t TwoWire::requestFrom(int address, int quantity) +{ + return requestFrom((uint8_t)address, (uint8_t)quantity, (uint8_t)true); +} + +uint8_t TwoWire::requestFrom(int address, int quantity, int sendStop) +{ + return requestFrom((uint8_t)address, (uint8_t)quantity, (uint8_t)sendStop); +} + +void TwoWire::beginTransmission(uint8_t address) +{ + // indicate that we are transmitting + transmitting = 1; + // set address of targeted slave + txAddress = address; + // reset tx buffer iterator vars + txBufferIndex = 0; + txBufferLength = 0; +} + +void TwoWire::beginTransmission(int address) +{ + beginTransmission((uint8_t)address); +} + +// +// Originally, 'endTransmission' was an f(void) function. +// It has been modified to take one parameter indicating +// whether or not a STOP should be performed on the bus. +// Calling endTransmission(false) allows a sketch to +// perform a repeated start. +// +// WARNING: Nothing in the library keeps track of whether +// the bus tenure has been properly ended with a STOP. It +// is very possible to leave the bus in a hung state if +// no call to endTransmission(true) is made. Some I2C +// devices will behave oddly if they do not see a STOP. +// +uint8_t TwoWire::endTransmission(uint8_t sendStop) +{ + // transmit buffer (blocking) + uint8_t ret = twi_writeTo(txAddress, txBuffer, txBufferLength, 1, sendStop); + // reset tx buffer iterator vars + txBufferIndex = 0; + txBufferLength = 0; + // indicate that we are done transmitting + transmitting = 0; + return ret; +} + +// This provides backwards compatibility with the original +// definition, and expected behaviour, of endTransmission +// +uint8_t TwoWire::endTransmission(void) +{ + return endTransmission(true); +} + +// must be called in: +// slave tx event callback +// or after beginTransmission(address) +size_t TwoWire::write(uint8_t data) +{ + if(transmitting){ + // in master transmitter mode + // don't bother if buffer is full + if(txBufferLength >= BUFFER_LENGTH){ + setWriteError(); + return 0; + } + // put byte in tx buffer + txBuffer[txBufferIndex] = data; + ++txBufferIndex; + // update amount in buffer + txBufferLength = txBufferIndex; + }else{ + // in slave send mode + // reply to master + twi_transmit(&data, 1); + } + return 1; +} + +// must be called in: +// slave tx event callback +// or after beginTransmission(address) +size_t TwoWire::write(const uint8_t *data, size_t quantity) +{ + if(transmitting){ + // in master transmitter mode + for(size_t i = 0; i < quantity; ++i){ + write(data[i]); + } + }else{ + // in slave send mode + // reply to master + twi_transmit(data, quantity); + } + return quantity; +} + +// must be called in: +// slave rx event callback +// or after requestFrom(address, numBytes) +int TwoWire::available(void) +{ + return rxBufferLength - rxBufferIndex; +} + +// must be called in: +// slave rx event callback +// or after requestFrom(address, numBytes) +int TwoWire::read(void) +{ + int value = -1; + + // get each successive byte on each call + if(rxBufferIndex < rxBufferLength){ + value = rxBuffer[rxBufferIndex]; + ++rxBufferIndex; + } + + return value; +} + +// must be called in: +// slave rx event callback +// or after requestFrom(address, numBytes) +int TwoWire::peek(void) +{ + int value = -1; + + if(rxBufferIndex < rxBufferLength){ + value = rxBuffer[rxBufferIndex]; + } + + return value; +} + +void TwoWire::flush(void) +{ + // XXX: to be implemented. +} + +// behind the scenes function that is called when data is received +void TwoWire::onReceiveService(uint8_t* inBytes, int numBytes) +{ + // don't bother if user hasn't registered a callback + if(!user_onReceive){ + return; + } + // don't bother if rx buffer is in use by a master requestFrom() op + // i know this drops data, but it allows for slight stupidity + // meaning, they may not have read all the master requestFrom() data yet + if(rxBufferIndex < rxBufferLength){ + return; + } + // copy twi rx buffer into local read buffer + // this enables new reads to happen in parallel + for(uint8_t i = 0; i < numBytes; ++i){ + rxBuffer[i] = inBytes[i]; + } + // set rx iterator vars + rxBufferIndex = 0; + rxBufferLength = numBytes; + // alert user program + user_onReceive(numBytes); +} + +// behind the scenes function that is called when data is requested +void TwoWire::onRequestService(void) +{ + // don't bother if user hasn't registered a callback + if(!user_onRequest){ + return; + } + // reset tx buffer iterator vars + // !!! this will kill any pending pre-master sendTo() activity + txBufferIndex = 0; + txBufferLength = 0; + // alert user program + user_onRequest(); +} + +// sets function called on slave write +void TwoWire::onReceive( void (*function)(int) ) +{ + user_onReceive = function; +} + +// sets function called on slave read +void TwoWire::onRequest( void (*function)(void) ) +{ + user_onRequest = function; +} + +// Preinstantiate Objects ////////////////////////////////////////////////////// + +TwoWire Wire = TwoWire(); + diff --git a/external/arduino/avr/libraries/Wire/src/Wire.h b/external/arduino/avr/libraries/Wire/src/Wire.h new file mode 100644 index 000000000..702f37d64 --- /dev/null +++ b/external/arduino/avr/libraries/Wire/src/Wire.h @@ -0,0 +1,85 @@ +/* + TwoWire.h - TWI/I2C library for Arduino & Wiring + Copyright (c) 2006 Nicholas Zambetti. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Modified 2012 by Todd Krein (todd@krein.org) to implement repeated starts +*/ + +#ifndef TwoWire_h +#define TwoWire_h + +#include +#include "Stream.h" + +#define BUFFER_LENGTH 32 + +// WIRE_HAS_END means Wire has end() +#define WIRE_HAS_END 1 + +class TwoWire : public Stream +{ + private: + static uint8_t rxBuffer[]; + static uint8_t rxBufferIndex; + static uint8_t rxBufferLength; + + static uint8_t txAddress; + static uint8_t txBuffer[]; + static uint8_t txBufferIndex; + static uint8_t txBufferLength; + + static uint8_t transmitting; + static void (*user_onRequest)(void); + static void (*user_onReceive)(int); + static void onRequestService(void); + static void onReceiveService(uint8_t*, int); + public: + TwoWire(); + void begin(); + void begin(uint8_t); + void begin(int); + void end(); + void setClock(uint32_t); + void beginTransmission(uint8_t); + void beginTransmission(int); + uint8_t endTransmission(void); + uint8_t endTransmission(uint8_t); + uint8_t requestFrom(uint8_t, uint8_t); + uint8_t requestFrom(uint8_t, uint8_t, uint8_t); + uint8_t requestFrom(uint8_t, uint8_t, uint32_t, uint8_t, uint8_t); + uint8_t requestFrom(int, int); + uint8_t requestFrom(int, int, int); + virtual size_t write(uint8_t); + virtual size_t write(const uint8_t *, size_t); + virtual int available(void); + virtual int read(void); + virtual int peek(void); + virtual void flush(void); + void onReceive( void (*)(int) ); + void onRequest( void (*)(void) ); + + inline size_t write(unsigned long n) { return write((uint8_t)n); } + inline size_t write(long n) { return write((uint8_t)n); } + inline size_t write(unsigned int n) { return write((uint8_t)n); } + inline size_t write(int n) { return write((uint8_t)n); } + using Print::write; +}; + +extern TwoWire Wire; + +#endif + diff --git a/external/arduino/avr/libraries/Wire/src/utility/twi.c b/external/arduino/avr/libraries/Wire/src/utility/twi.c new file mode 100644 index 000000000..1a3514630 --- /dev/null +++ b/external/arduino/avr/libraries/Wire/src/utility/twi.c @@ -0,0 +1,563 @@ +/* + twi.c - TWI/I2C library for Wiring & Arduino + Copyright (c) 2006 Nicholas Zambetti. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Modified 2012 by Todd Krein (todd@krein.org) to implement repeated starts +*/ + +#include +#include +#include +#include +#include +#include +#include "Arduino.h" // for digitalWrite + +#ifndef cbi +#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit)) +#endif + +#ifndef sbi +#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit)) +#endif + +#include "pins_arduino.h" +#include "twi.h" + +static volatile uint8_t twi_state; +static volatile uint8_t twi_slarw; +static volatile uint8_t twi_sendStop; // should the transaction end with a stop +static volatile uint8_t twi_inRepStart; // in the middle of a repeated start + +static void (*twi_onSlaveTransmit)(void); +static void (*twi_onSlaveReceive)(uint8_t*, int); + +static uint8_t twi_masterBuffer[TWI_BUFFER_LENGTH]; +static volatile uint8_t twi_masterBufferIndex; +static volatile uint8_t twi_masterBufferLength; + +static uint8_t twi_txBuffer[TWI_BUFFER_LENGTH]; +static volatile uint8_t twi_txBufferIndex; +static volatile uint8_t twi_txBufferLength; + +static uint8_t twi_rxBuffer[TWI_BUFFER_LENGTH]; +static volatile uint8_t twi_rxBufferIndex; + +static volatile uint8_t twi_error; + +/* + * Function twi_init + * Desc readys twi pins and sets twi bitrate + * Input none + * Output none + */ +void twi_init(void) +{ + // initialize state + twi_state = TWI_READY; + twi_sendStop = true; // default value + twi_inRepStart = false; + + // activate internal pullups for twi. + digitalWrite(SDA, 1); + digitalWrite(SCL, 1); + + // initialize twi prescaler and bit rate + cbi(TWSR, TWPS0); + cbi(TWSR, TWPS1); + TWBR = ((F_CPU / TWI_FREQ) - 16) / 2; + + /* twi bit rate formula from atmega128 manual pg 204 + SCL Frequency = CPU Clock Frequency / (16 + (2 * TWBR)) + note: TWBR should be 10 or higher for master mode + It is 72 for a 16mhz Wiring board with 100kHz TWI */ + + // enable twi module, acks, and twi interrupt + TWCR = _BV(TWEN) | _BV(TWIE) | _BV(TWEA); +} + +/* + * Function twi_disable + * Desc disables twi pins + * Input none + * Output none + */ +void twi_disable(void) +{ + // disable twi module, acks, and twi interrupt + TWCR &= ~(_BV(TWEN) | _BV(TWIE) | _BV(TWEA)); + + // deactivate internal pullups for twi. + digitalWrite(SDA, 0); + digitalWrite(SCL, 0); +} + +/* + * Function twi_slaveInit + * Desc sets slave address and enables interrupt + * Input none + * Output none + */ +void twi_setAddress(uint8_t address) +{ + // set twi slave address (skip over TWGCE bit) + TWAR = address << 1; +} + +/* + * Function twi_setClock + * Desc sets twi bit rate + * Input Clock Frequency + * Output none + */ +void twi_setFrequency(uint32_t frequency) +{ + TWBR = ((F_CPU / frequency) - 16) / 2; + + /* twi bit rate formula from atmega128 manual pg 204 + SCL Frequency = CPU Clock Frequency / (16 + (2 * TWBR)) + note: TWBR should be 10 or higher for master mode + It is 72 for a 16mhz Wiring board with 100kHz TWI */ +} + +/* + * Function twi_readFrom + * Desc attempts to become twi bus master and read a + * series of bytes from a device on the bus + * Input address: 7bit i2c device address + * data: pointer to byte array + * length: number of bytes to read into array + * sendStop: Boolean indicating whether to send a stop at the end + * Output number of bytes read + */ +uint8_t twi_readFrom(uint8_t address, uint8_t* data, uint8_t length, uint8_t sendStop) +{ + uint8_t i; + + // ensure data will fit into buffer + if(TWI_BUFFER_LENGTH < length){ + return 0; + } + + // wait until twi is ready, become master receiver + while(TWI_READY != twi_state){ + continue; + } + twi_state = TWI_MRX; + twi_sendStop = sendStop; + // reset error state (0xFF.. no error occured) + twi_error = 0xFF; + + // initialize buffer iteration vars + twi_masterBufferIndex = 0; + twi_masterBufferLength = length-1; // This is not intuitive, read on... + // On receive, the previously configured ACK/NACK setting is transmitted in + // response to the received byte before the interrupt is signalled. + // Therefor we must actually set NACK when the _next_ to last byte is + // received, causing that NACK to be sent in response to receiving the last + // expected byte of data. + + // build sla+w, slave device address + w bit + twi_slarw = TW_READ; + twi_slarw |= address << 1; + + if (true == twi_inRepStart) { + // if we're in the repeated start state, then we've already sent the start, + // (@@@ we hope), and the TWI statemachine is just waiting for the address byte. + // We need to remove ourselves from the repeated start state before we enable interrupts, + // since the ISR is ASYNC, and we could get confused if we hit the ISR before cleaning + // up. Also, don't enable the START interrupt. There may be one pending from the + // repeated start that we sent ourselves, and that would really confuse things. + twi_inRepStart = false; // remember, we're dealing with an ASYNC ISR + do { + TWDR = twi_slarw; + } while(TWCR & _BV(TWWC)); + TWCR = _BV(TWINT) | _BV(TWEA) | _BV(TWEN) | _BV(TWIE); // enable INTs, but not START + } + else + // send start condition + TWCR = _BV(TWEN) | _BV(TWIE) | _BV(TWEA) | _BV(TWINT) | _BV(TWSTA); + + // wait for read operation to complete + while(TWI_MRX == twi_state){ + continue; + } + + if (twi_masterBufferIndex < length) + length = twi_masterBufferIndex; + + // copy twi buffer to data + for(i = 0; i < length; ++i){ + data[i] = twi_masterBuffer[i]; + } + + return length; +} + +/* + * Function twi_writeTo + * Desc attempts to become twi bus master and write a + * series of bytes to a device on the bus + * Input address: 7bit i2c device address + * data: pointer to byte array + * length: number of bytes in array + * wait: boolean indicating to wait for write or not + * sendStop: boolean indicating whether or not to send a stop at the end + * Output 0 .. success + * 1 .. length to long for buffer + * 2 .. address send, NACK received + * 3 .. data send, NACK received + * 4 .. other twi error (lost bus arbitration, bus error, ..) + */ +uint8_t twi_writeTo(uint8_t address, uint8_t* data, uint8_t length, uint8_t wait, uint8_t sendStop) +{ + uint8_t i; + + // ensure data will fit into buffer + if(TWI_BUFFER_LENGTH < length){ + return 1; + } + + // wait until twi is ready, become master transmitter + while(TWI_READY != twi_state){ + continue; + } + twi_state = TWI_MTX; + twi_sendStop = sendStop; + // reset error state (0xFF.. no error occured) + twi_error = 0xFF; + + // initialize buffer iteration vars + twi_masterBufferIndex = 0; + twi_masterBufferLength = length; + + // copy data to twi buffer + for(i = 0; i < length; ++i){ + twi_masterBuffer[i] = data[i]; + } + + // build sla+w, slave device address + w bit + twi_slarw = TW_WRITE; + twi_slarw |= address << 1; + + // if we're in a repeated start, then we've already sent the START + // in the ISR. Don't do it again. + // + if (true == twi_inRepStart) { + // if we're in the repeated start state, then we've already sent the start, + // (@@@ we hope), and the TWI statemachine is just waiting for the address byte. + // We need to remove ourselves from the repeated start state before we enable interrupts, + // since the ISR is ASYNC, and we could get confused if we hit the ISR before cleaning + // up. Also, don't enable the START interrupt. There may be one pending from the + // repeated start that we sent outselves, and that would really confuse things. + twi_inRepStart = false; // remember, we're dealing with an ASYNC ISR + do { + TWDR = twi_slarw; + } while(TWCR & _BV(TWWC)); + TWCR = _BV(TWINT) | _BV(TWEA) | _BV(TWEN) | _BV(TWIE); // enable INTs, but not START + } + else + // send start condition + TWCR = _BV(TWINT) | _BV(TWEA) | _BV(TWEN) | _BV(TWIE) | _BV(TWSTA); // enable INTs + + // wait for write operation to complete + while(wait && (TWI_MTX == twi_state)){ + continue; + } + + if (twi_error == 0xFF) + return 0; // success + else if (twi_error == TW_MT_SLA_NACK) + return 2; // error: address send, nack received + else if (twi_error == TW_MT_DATA_NACK) + return 3; // error: data send, nack received + else + return 4; // other twi error +} + +/* + * Function twi_transmit + * Desc fills slave tx buffer with data + * must be called in slave tx event callback + * Input data: pointer to byte array + * length: number of bytes in array + * Output 1 length too long for buffer + * 2 not slave transmitter + * 0 ok + */ +uint8_t twi_transmit(const uint8_t* data, uint8_t length) +{ + uint8_t i; + + // ensure data will fit into buffer + if(TWI_BUFFER_LENGTH < (twi_txBufferLength+length)){ + return 1; + } + + // ensure we are currently a slave transmitter + if(TWI_STX != twi_state){ + return 2; + } + + // set length and copy data into tx buffer + for(i = 0; i < length; ++i){ + twi_txBuffer[twi_txBufferLength+i] = data[i]; + } + twi_txBufferLength += length; + + return 0; +} + +/* + * Function twi_attachSlaveRxEvent + * Desc sets function called before a slave read operation + * Input function: callback function to use + * Output none + */ +void twi_attachSlaveRxEvent( void (*function)(uint8_t*, int) ) +{ + twi_onSlaveReceive = function; +} + +/* + * Function twi_attachSlaveTxEvent + * Desc sets function called before a slave write operation + * Input function: callback function to use + * Output none + */ +void twi_attachSlaveTxEvent( void (*function)(void) ) +{ + twi_onSlaveTransmit = function; +} + +/* + * Function twi_reply + * Desc sends byte or readys receive line + * Input ack: byte indicating to ack or to nack + * Output none + */ +void twi_reply(uint8_t ack) +{ + // transmit master read ready signal, with or without ack + if(ack){ + TWCR = _BV(TWEN) | _BV(TWIE) | _BV(TWINT) | _BV(TWEA); + }else{ + TWCR = _BV(TWEN) | _BV(TWIE) | _BV(TWINT); + } +} + +/* + * Function twi_stop + * Desc relinquishes bus master status + * Input none + * Output none + */ +void twi_stop(void) +{ + // send stop condition + TWCR = _BV(TWEN) | _BV(TWIE) | _BV(TWEA) | _BV(TWINT) | _BV(TWSTO); + + // wait for stop condition to be exectued on bus + // TWINT is not set after a stop condition! + while(TWCR & _BV(TWSTO)){ + continue; + } + + // update twi state + twi_state = TWI_READY; +} + +/* + * Function twi_releaseBus + * Desc releases bus control + * Input none + * Output none + */ +void twi_releaseBus(void) +{ + // release bus + TWCR = _BV(TWEN) | _BV(TWIE) | _BV(TWEA) | _BV(TWINT); + + // update twi state + twi_state = TWI_READY; +} + +ISR(TWI_vect) +{ + switch(TW_STATUS){ + // All Master + case TW_START: // sent start condition + case TW_REP_START: // sent repeated start condition + // copy device address and r/w bit to output register and ack + TWDR = twi_slarw; + twi_reply(1); + break; + + // Master Transmitter + case TW_MT_SLA_ACK: // slave receiver acked address + case TW_MT_DATA_ACK: // slave receiver acked data + // if there is data to send, send it, otherwise stop + if(twi_masterBufferIndex < twi_masterBufferLength){ + // copy data to output register and ack + TWDR = twi_masterBuffer[twi_masterBufferIndex++]; + twi_reply(1); + }else{ + if (twi_sendStop) + twi_stop(); + else { + twi_inRepStart = true; // we're gonna send the START + // don't enable the interrupt. We'll generate the start, but we + // avoid handling the interrupt until we're in the next transaction, + // at the point where we would normally issue the start. + TWCR = _BV(TWINT) | _BV(TWSTA)| _BV(TWEN) ; + twi_state = TWI_READY; + } + } + break; + case TW_MT_SLA_NACK: // address sent, nack received + twi_error = TW_MT_SLA_NACK; + twi_stop(); + break; + case TW_MT_DATA_NACK: // data sent, nack received + twi_error = TW_MT_DATA_NACK; + twi_stop(); + break; + case TW_MT_ARB_LOST: // lost bus arbitration + twi_error = TW_MT_ARB_LOST; + twi_releaseBus(); + break; + + // Master Receiver + case TW_MR_DATA_ACK: // data received, ack sent + // put byte into buffer + twi_masterBuffer[twi_masterBufferIndex++] = TWDR; + __attribute__ ((fallthrough)); + case TW_MR_SLA_ACK: // address sent, ack received + // ack if more bytes are expected, otherwise nack + if(twi_masterBufferIndex < twi_masterBufferLength){ + twi_reply(1); + }else{ + twi_reply(0); + } + break; + case TW_MR_DATA_NACK: // data received, nack sent + // put final byte into buffer + twi_masterBuffer[twi_masterBufferIndex++] = TWDR; + if (twi_sendStop) + twi_stop(); + else { + twi_inRepStart = true; // we're gonna send the START + // don't enable the interrupt. We'll generate the start, but we + // avoid handling the interrupt until we're in the next transaction, + // at the point where we would normally issue the start. + TWCR = _BV(TWINT) | _BV(TWSTA)| _BV(TWEN) ; + twi_state = TWI_READY; + } + break; + case TW_MR_SLA_NACK: // address sent, nack received + twi_stop(); + break; + // TW_MR_ARB_LOST handled by TW_MT_ARB_LOST case + + // Slave Receiver + case TW_SR_SLA_ACK: // addressed, returned ack + case TW_SR_GCALL_ACK: // addressed generally, returned ack + case TW_SR_ARB_LOST_SLA_ACK: // lost arbitration, returned ack + case TW_SR_ARB_LOST_GCALL_ACK: // lost arbitration, returned ack + // enter slave receiver mode + twi_state = TWI_SRX; + // indicate that rx buffer can be overwritten and ack + twi_rxBufferIndex = 0; + twi_reply(1); + break; + case TW_SR_DATA_ACK: // data received, returned ack + case TW_SR_GCALL_DATA_ACK: // data received generally, returned ack + // if there is still room in the rx buffer + if(twi_rxBufferIndex < TWI_BUFFER_LENGTH){ + // put byte in buffer and ack + twi_rxBuffer[twi_rxBufferIndex++] = TWDR; + twi_reply(1); + }else{ + // otherwise nack + twi_reply(0); + } + break; + case TW_SR_STOP: // stop or repeated start condition received + // ack future responses and leave slave receiver state + twi_releaseBus(); + // put a null char after data if there's room + if(twi_rxBufferIndex < TWI_BUFFER_LENGTH){ + twi_rxBuffer[twi_rxBufferIndex] = '\0'; + } + // callback to user defined callback + twi_onSlaveReceive(twi_rxBuffer, twi_rxBufferIndex); + // since we submit rx buffer to "wire" library, we can reset it + twi_rxBufferIndex = 0; + break; + case TW_SR_DATA_NACK: // data received, returned nack + case TW_SR_GCALL_DATA_NACK: // data received generally, returned nack + // nack back at master + twi_reply(0); + break; + + // Slave Transmitter + case TW_ST_SLA_ACK: // addressed, returned ack + case TW_ST_ARB_LOST_SLA_ACK: // arbitration lost, returned ack + // enter slave transmitter mode + twi_state = TWI_STX; + // ready the tx buffer index for iteration + twi_txBufferIndex = 0; + // set tx buffer length to be zero, to verify if user changes it + twi_txBufferLength = 0; + // request for txBuffer to be filled and length to be set + // note: user must call twi_transmit(bytes, length) to do this + twi_onSlaveTransmit(); + // if they didn't change buffer & length, initialize it + if(0 == twi_txBufferLength){ + twi_txBufferLength = 1; + twi_txBuffer[0] = 0x00; + } + __attribute__ ((fallthrough)); + // transmit first byte from buffer, fall + case TW_ST_DATA_ACK: // byte sent, ack returned + // copy data to output register + TWDR = twi_txBuffer[twi_txBufferIndex++]; + // if there is more to send, ack, otherwise nack + if(twi_txBufferIndex < twi_txBufferLength){ + twi_reply(1); + }else{ + twi_reply(0); + } + break; + case TW_ST_DATA_NACK: // received nack, we are done + case TW_ST_LAST_DATA: // received ack, but we are done already! + // ack future responses + twi_reply(1); + // leave slave receiver state + twi_state = TWI_READY; + break; + + // All + case TW_NO_INFO: // no state information + break; + case TW_BUS_ERROR: // bus error, illegal stop/start + twi_error = TW_BUS_ERROR; + twi_stop(); + break; + } +} + diff --git a/external/arduino/avr/libraries/Wire/src/utility/twi.h b/external/arduino/avr/libraries/Wire/src/utility/twi.h new file mode 100644 index 000000000..d27325ea7 --- /dev/null +++ b/external/arduino/avr/libraries/Wire/src/utility/twi.h @@ -0,0 +1,55 @@ +/* + twi.h - TWI/I2C library for Wiring & Arduino + Copyright (c) 2006 Nicholas Zambetti. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef twi_h +#define twi_h + + #include + + //#define ATMEGA8 + + #ifndef TWI_FREQ + #define TWI_FREQ 100000L + #endif + + #ifndef TWI_BUFFER_LENGTH + #define TWI_BUFFER_LENGTH 32 + #endif + + #define TWI_READY 0 + #define TWI_MRX 1 + #define TWI_MTX 2 + #define TWI_SRX 3 + #define TWI_STX 4 + + void twi_init(void); + void twi_disable(void); + void twi_setAddress(uint8_t); + void twi_setFrequency(uint32_t); + uint8_t twi_readFrom(uint8_t, uint8_t*, uint8_t, uint8_t); + uint8_t twi_writeTo(uint8_t, uint8_t*, uint8_t, uint8_t, uint8_t); + uint8_t twi_transmit(const uint8_t*, uint8_t); + void twi_attachSlaveRxEvent( void (*)(uint8_t*, int) ); + void twi_attachSlaveTxEvent( void (*)(void) ); + void twi_reply(uint8_t); + void twi_stop(void); + void twi_releaseBus(void); + +#endif + diff --git a/external/arduino/avr/platform.txt b/external/arduino/avr/platform.txt new file mode 100644 index 000000000..608ad29de --- /dev/null +++ b/external/arduino/avr/platform.txt @@ -0,0 +1,130 @@ + +# Arduino AVR Core and platform. +# ------------------------------ +# +# For more info: +# https://github.com/arduino/Arduino/wiki/Arduino-IDE-1.5-3rd-party-Hardware-specification + +name=Arduino AVR Boards +version=1.8.2 + +# AVR compile variables +# --------------------- + +compiler.warning_flags=-w +compiler.warning_flags.none=-w +compiler.warning_flags.default= +compiler.warning_flags.more=-Wall +compiler.warning_flags.all=-Wall -Wextra + +# Default "compiler.path" is correct, change only if you want to override the initial value +compiler.path={runtime.tools.avr-gcc.path}/bin/ +compiler.c.cmd=avr-gcc +compiler.c.flags=-c -g -Os {compiler.warning_flags} -std=gnu11 -ffunction-sections -fdata-sections -MMD -flto -fno-fat-lto-objects +compiler.c.elf.flags={compiler.warning_flags} -Os -g -flto -fuse-linker-plugin -Wl,--gc-sections +compiler.c.elf.cmd=avr-gcc +compiler.S.flags=-c -g -x assembler-with-cpp -flto -MMD +compiler.cpp.cmd=avr-g++ +compiler.cpp.flags=-c -g -Os {compiler.warning_flags} -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto +compiler.ar.cmd=avr-gcc-ar +compiler.ar.flags=rcs +compiler.objcopy.cmd=avr-objcopy +compiler.objcopy.eep.flags=-O ihex -j .eeprom --set-section-flags=.eeprom=alloc,load --no-change-warnings --change-section-lma .eeprom=0 +compiler.elf2hex.flags=-O ihex -R .eeprom +compiler.elf2hex.cmd=avr-objcopy +compiler.ldflags= +compiler.size.cmd=avr-size + +# This can be overridden in boards.txt +build.extra_flags= + +# These can be overridden in platform.local.txt +compiler.c.extra_flags= +compiler.c.elf.extra_flags= +compiler.S.extra_flags= +compiler.cpp.extra_flags= +compiler.ar.extra_flags= +compiler.objcopy.eep.extra_flags= +compiler.elf2hex.extra_flags= + +# AVR compile patterns +# -------------------- + +## Compile c files +recipe.c.o.pattern="{compiler.path}{compiler.c.cmd}" {compiler.c.flags} -mmcu={build.mcu} -DF_CPU={build.f_cpu} -DARDUINO={runtime.ide.version} -DARDUINO_{build.board} -DARDUINO_ARCH_{build.arch} {compiler.c.extra_flags} {build.extra_flags} {includes} "{source_file}" -o "{object_file}" + +## Compile c++ files +recipe.cpp.o.pattern="{compiler.path}{compiler.cpp.cmd}" {compiler.cpp.flags} -mmcu={build.mcu} -DF_CPU={build.f_cpu} -DARDUINO={runtime.ide.version} -DARDUINO_{build.board} -DARDUINO_ARCH_{build.arch} {compiler.cpp.extra_flags} {build.extra_flags} {includes} "{source_file}" -o "{object_file}" + +## Compile S files +recipe.S.o.pattern="{compiler.path}{compiler.c.cmd}" {compiler.S.flags} -mmcu={build.mcu} -DF_CPU={build.f_cpu} -DARDUINO={runtime.ide.version} -DARDUINO_{build.board} -DARDUINO_ARCH_{build.arch} {compiler.S.extra_flags} {build.extra_flags} {includes} "{source_file}" -o "{object_file}" + +## Create archives +# archive_file_path is needed for backwards compatibility with IDE 1.6.5 or older, IDE 1.6.6 or newer overrides this value +archive_file_path={build.path}/{archive_file} +recipe.ar.pattern="{compiler.path}{compiler.ar.cmd}" {compiler.ar.flags} {compiler.ar.extra_flags} "{archive_file_path}" "{object_file}" + +## Combine gc-sections, archives, and objects +recipe.c.combine.pattern="{compiler.path}{compiler.c.elf.cmd}" {compiler.c.elf.flags} -mmcu={build.mcu} {compiler.c.elf.extra_flags} -o "{build.path}/{build.project_name}.elf" {object_files} "{build.path}/{archive_file}" "-L{build.path}" -lm + +## Create output files (.eep and .hex) +recipe.objcopy.eep.pattern="{compiler.path}{compiler.objcopy.cmd}" {compiler.objcopy.eep.flags} {compiler.objcopy.eep.extra_flags} "{build.path}/{build.project_name}.elf" "{build.path}/{build.project_name}.eep" +recipe.objcopy.hex.pattern="{compiler.path}{compiler.elf2hex.cmd}" {compiler.elf2hex.flags} {compiler.elf2hex.extra_flags} "{build.path}/{build.project_name}.elf" "{build.path}/{build.project_name}.hex" + +## Save hex +recipe.output.tmp_file={build.project_name}.hex +recipe.output.save_file={build.project_name}.{build.variant}.hex + +## Compute size +recipe.size.pattern="{compiler.path}{compiler.size.cmd}" -A "{build.path}/{build.project_name}.elf" +recipe.size.regex=^(?:\.text|\.data|\.bootloader)\s+([0-9]+).* +recipe.size.regex.data=^(?:\.data|\.bss|\.noinit)\s+([0-9]+).* +recipe.size.regex.eeprom=^(?:\.eeprom)\s+([0-9]+).* + +## Preprocessor +preproc.includes.flags=-w -x c++ -M -MG -MP +recipe.preproc.includes="{compiler.path}{compiler.cpp.cmd}" {compiler.cpp.flags} {preproc.includes.flags} -mmcu={build.mcu} -DF_CPU={build.f_cpu} -DARDUINO={runtime.ide.version} -DARDUINO_{build.board} -DARDUINO_ARCH_{build.arch} {compiler.cpp.extra_flags} {build.extra_flags} {includes} "{source_file}" + +preproc.macros.flags=-w -x c++ -E -CC +recipe.preproc.macros="{compiler.path}{compiler.cpp.cmd}" {compiler.cpp.flags} {preproc.macros.flags} -mmcu={build.mcu} -DF_CPU={build.f_cpu} -DARDUINO={runtime.ide.version} -DARDUINO_{build.board} -DARDUINO_ARCH_{build.arch} {compiler.cpp.extra_flags} {build.extra_flags} {includes} "{source_file}" -o "{preprocessed_file_path}" + +# AVR Uploader/Programmers tools +# ------------------------------ + +tools.avrdude.path={runtime.tools.avrdude.path} +tools.avrdude.cmd.path={path}/bin/avrdude +tools.avrdude.config.path={path}/etc/avrdude.conf + +tools.avrdude.network_cmd={runtime.tools.arduinoOTA.path}/bin/arduinoOTA + +tools.avrdude.upload.params.verbose=-v +tools.avrdude.upload.params.quiet=-q -q +# tools.avrdude.upload.verify is needed for backwards compatibility with IDE 1.6.8 or older, IDE 1.6.9 or newer overrides this value +tools.avrdude.upload.verify= +tools.avrdude.upload.params.noverify=-V +tools.avrdude.upload.pattern="{cmd.path}" "-C{config.path}" {upload.verbose} {upload.verify} -p{build.mcu} -c{upload.protocol} "-P{serial.port}" -b{upload.speed} -D "-Uflash:w:{build.path}/{build.project_name}.hex:i" + +tools.avrdude.program.params.verbose=-v +tools.avrdude.program.params.quiet=-q -q +# tools.avrdude.program.verify is needed for backwards compatibility with IDE 1.6.8 or older, IDE 1.6.9 or newer overrides this value +tools.avrdude.program.verify= +tools.avrdude.program.params.noverify=-V +tools.avrdude.program.pattern="{cmd.path}" "-C{config.path}" {program.verbose} {program.verify} -p{build.mcu} -c{protocol} {program.extra_params} "-Uflash:w:{build.path}/{build.project_name}.hex:i" + +tools.avrdude.erase.params.verbose=-v +tools.avrdude.erase.params.quiet=-q -q +tools.avrdude.erase.pattern="{cmd.path}" "-C{config.path}" {erase.verbose} -p{build.mcu} -c{protocol} {program.extra_params} -e -Ulock:w:{bootloader.unlock_bits}:m -Uefuse:w:{bootloader.extended_fuses}:m -Uhfuse:w:{bootloader.high_fuses}:m -Ulfuse:w:{bootloader.low_fuses}:m + +tools.avrdude.bootloader.params.verbose=-v +tools.avrdude.bootloader.params.quiet=-q -q +tools.avrdude.bootloader.pattern="{cmd.path}" "-C{config.path}" {bootloader.verbose} -p{build.mcu} -c{protocol} {program.extra_params} "-Uflash:w:{runtime.platform.path}/bootloaders/{bootloader.file}:i" -Ulock:w:{bootloader.lock_bits}:m + +tools.avrdude_remote.upload.pattern=/usr/bin/run-avrdude /tmp/sketch.hex {upload.verbose} -p{build.mcu} + +tools.avrdude.upload.network_pattern="{network_cmd}" -address {serial.port} -port {upload.network.port} -sketch "{build.path}/{build.project_name}.hex" -upload {upload.network.endpoint_upload} -sync {upload.network.endpoint_sync} -reset {upload.network.endpoint_reset} -sync_exp {upload.network.sync_return} + +# USB Default Flags +# Default blank usb manufacturer will be filled in at compile time +# - from numeric vendor ID, set to Unknown otherwise +build.usb_manufacturer="Unknown" +build.usb_flags=-DUSB_VID={build.vid} -DUSB_PID={build.pid} '-DUSB_MANUFACTURER={build.usb_manufacturer}' '-DUSB_PRODUCT={build.usb_product}' diff --git a/external/arduino/avr/programmers.txt b/external/arduino/avr/programmers.txt new file mode 100644 index 000000000..69ddf692c --- /dev/null +++ b/external/arduino/avr/programmers.txt @@ -0,0 +1,115 @@ +avrisp.name=AVR ISP +avrisp.communication=serial +avrisp.protocol=stk500v1 +avrisp.program.protocol=stk500v1 +avrisp.program.tool=avrdude +avrisp.program.extra_params=-P{serial.port} + +avrispmkii.name=AVRISP mkII +avrispmkii.communication=usb +avrispmkii.protocol=stk500v2 +avrispmkii.program.protocol=stk500v2 +avrispmkii.program.tool=avrdude +avrispmkii.program.extra_params=-Pusb + +usbtinyisp.name=USBtinyISP +usbtinyisp.protocol=usbtiny +usbtinyisp.program.tool=avrdude +usbtinyisp.program.extra_params= + +arduinoisp.name=ArduinoISP +arduinoisp.protocol=arduinoisp +arduinoisp.program.tool=avrdude +arduinoisp.program.extra_params= + +arduinoisporg.name=ArduinoISP.org +arduinoisporg.protocol=arduinoisporg +arduinoisporg.program.tool=avrdude +arduinoisporg.program.extra_params= + +usbasp.name=USBasp +usbasp.communication=usb +usbasp.protocol=usbasp +usbasp.program.protocol=usbasp +usbasp.program.tool=avrdude +usbasp.program.extra_params=-Pusb + +parallel.name=Parallel Programmer +parallel.protocol=dapa +parallel.force=true +# parallel.delay=200 +parallel.program.tool=avrdude +parallel.program.extra_params=-F + +arduinoasisp.name=Arduino as ISP +arduinoasisp.communication=serial +arduinoasisp.protocol=stk500v1 +arduinoasisp.speed=19200 +arduinoasisp.program.protocol=stk500v1 +arduinoasisp.program.speed=19200 +arduinoasisp.program.tool=avrdude +arduinoasisp.program.extra_params=-P{serial.port} -b{program.speed} + +arduinoasispatmega32u4.name=Arduino as ISP (ATmega32U4) +arduinoasispatmega32u4.communication=serial +arduinoasispatmega32u4.protocol=arduino +arduinoasispatmega32u4.speed=19200 +arduinoasispatmega32u4.program.protocol=arduino +arduinoasispatmega32u4.program.speed=19200 +arduinoasispatmega32u4.program.tool=avrdude +arduinoasispatmega32u4.program.extra_params=-P{serial.port} -b{program.speed} + +usbGemma.name=Arduino Gemma +usbGemma.protocol=arduinogemma +usbGemma.program.tool=avrdude +usbGemma.program.extra_params= +usbGemma.config.path={runtime.platform.path}/bootloaders/gemma/avrdude.conf + +## Notes about Dangerous Prototypes Bus Pirate as ISP +## Bus Pirate V3 need Firmware v5.10 or later +## Bus Pirate V4 need Firmware v6.3-r2151 or later +## Could happen that BP does not have enough current to power an Arduino board +## through the ICSP connector. In this case disconnect the +Vcc from ICSP connector +## and power Arduino board in the normal way. +buspirate.name=BusPirate as ISP +buspirate.communication=serial +buspirate.protocol=buspirate +buspirate.program.protocol=buspirate +buspirate.program.tool=avrdude +buspirate.program.extra_params=-P{serial.port} + +# STK500 firmware version v1 and v2 use different serial protocols. +# Using the 'stk500' protocol tells avrdude to try and autodetect the +# firmware version. If this leads to problems, we might need to add +# stk500v1 and stk500v2 entries to allow explicitely selecting the +# firmware version. +stk500.name=Atmel STK500 development board +stk500.communication=serial +stk500.protocol=stk500 +stk500.program.protocol=stk500 +stk500.program.tool=avrdude +stk500.program.extra_params=-P{serial.port} + +jtag3isp.name=Atmel JTAGICE3 (ISP mode) +jtag3isp.communication=usb +jtag3isp.protocol=jtag3isp +jtag3isp.program.protocol=jtag3isp +jtag3isp.program.tool=avrdude +jtag3isp.program.extra_params= + +jtag3.name=Atmel JTAGICE3 (JTAG mode) +jtag3.communication=usb +jtag3.protocol=jtag3 +jtag3.program.protocol=jtag3 +jtag3.program.tool=avrdude +# Set a bitclock of 0.1us (the fastest supported value). This should +# work regardless of the crystal used, since JTAG doesn't use the MCU +# clock but dictates its own clock. +jtag3.program.extra_params=-B0.1 + +atmel_ice.name=Atmel-ICE (AVR) +atmel_ice.communication=usb +atmel_ice.protocol=atmelice_isp +atmel_ice.program.protocol=atmelice_isp +atmel_ice.program.tool=avrdude +atmel_ice.program.extra_params=-Pusb diff --git a/external/arduino/avr/variants/circuitplay32u4/pins_arduino.h b/external/arduino/avr/variants/circuitplay32u4/pins_arduino.h new file mode 100644 index 000000000..1da15a9d3 --- /dev/null +++ b/external/arduino/avr/variants/circuitplay32u4/pins_arduino.h @@ -0,0 +1,387 @@ +/* + pins_arduino.h - Pin definition functions for Arduino + Part of Arduino - http://www.arduino.cc/ + + Copyright (c) 2007 David A. Mellis + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General + Public License along with this library; if not, write to the + Free Software Foundation, Inc., 59 Temple Place, Suite 330, + Boston, MA 02111-1307 USA + + $Id: wiring.h 249 2007-02-03 16:52:51Z mellis $ +*/ + +#ifndef Pins_Arduino_h +#define Pins_Arduino_h + +#include + +// Workaround for wrong definitions in "iom32u4.h". +// This should be fixed in the AVR toolchain. +#undef UHCON +#undef UHINT +#undef UHIEN +#undef UHADDR +#undef UHFNUM +#undef UHFNUML +#undef UHFNUMH +#undef UHFLEN +#undef UPINRQX +#undef UPINTX +#undef UPNUM +#undef UPRST +#undef UPCONX +#undef UPCFG0X +#undef UPCFG1X +#undef UPSTAX +#undef UPCFG2X +#undef UPIENX +#undef UPDATX +#undef TCCR2A +#undef WGM20 +#undef WGM21 +#undef COM2B0 +#undef COM2B1 +#undef COM2A0 +#undef COM2A1 +#undef TCCR2B +#undef CS20 +#undef CS21 +#undef CS22 +#undef WGM22 +#undef FOC2B +#undef FOC2A +#undef TCNT2 +#undef TCNT2_0 +#undef TCNT2_1 +#undef TCNT2_2 +#undef TCNT2_3 +#undef TCNT2_4 +#undef TCNT2_5 +#undef TCNT2_6 +#undef TCNT2_7 +#undef OCR2A +#undef OCR2_0 +#undef OCR2_1 +#undef OCR2_2 +#undef OCR2_3 +#undef OCR2_4 +#undef OCR2_5 +#undef OCR2_6 +#undef OCR2_7 +#undef OCR2B +#undef OCR2_0 +#undef OCR2_1 +#undef OCR2_2 +#undef OCR2_3 +#undef OCR2_4 +#undef OCR2_5 +#undef OCR2_6 +#undef OCR2_7 + +#define NUM_DIGITAL_PINS 31 +#define NUM_ANALOG_INPUTS 12 + +#define TXLED0 0 +#define TXLED1 0 +#define RXLED0 0 +#define RXLED1 0 +#define TX_RX_LED_INIT 0 + +static const uint8_t SDA = 2; +static const uint8_t SCL = 3; +#define LED_BUILTIN 13 + +// Map SPI port to 'new' pins D14..D17 +static const uint8_t SS = 17; +static const uint8_t MOSI = 16; +static const uint8_t MISO = 14; +static const uint8_t SCK = 15; + +// Mapping of analog pins as digital I/O +// A6-A11 share with digital pins +static const uint8_t A0 = 18; +static const uint8_t A1 = 19; +static const uint8_t A2 = 20; +static const uint8_t A3 = 21; +static const uint8_t A4 = 22; +static const uint8_t A5 = 23; +static const uint8_t A6 = 24; // D4 +static const uint8_t A7 = 25; // D6 +static const uint8_t A8 = 26; // D8 +static const uint8_t A9 = 27; // D9 +static const uint8_t A10 = 28; // D10 +static const uint8_t A11 = 29; // D12 + +#define digitalPinToPCICR(p) ((((p) >= 8 && (p) <= 11) || ((p) >= 14 && (p) <= 17) || ((p) >= A8 && (p) <= A10)) ? (&PCICR) : ((uint8_t *)0)) +#define digitalPinToPCICRbit(p) 0 +#define digitalPinToPCMSK(p) ((((p) >= 8 && (p) <= 11) || ((p) >= 14 && (p) <= 17) || ((p) >= A8 && (p) <= A10)) ? (&PCMSK0) : ((uint8_t *)0)) +#define digitalPinToPCMSKbit(p) ( ((p) >= 8 && (p) <= 11) ? (p) - 4 : ((p) == 14 ? 3 : ((p) == 15 ? 1 : ((p) == 16 ? 2 : ((p) == 17 ? 0 : (p - A8 + 4)))))) + +// __AVR_ATmega32U4__ has an unusual mapping of pins to channels +extern const uint8_t PROGMEM analog_pin_to_channel_PGM[]; +#define analogPinToChannel(P) ( pgm_read_byte( analog_pin_to_channel_PGM + (P) ) ) + +#define digitalPinHasPWM(p) ((p) == 3 || (p) == 5 || (p) == 6 || (p) == 9 || (p) == 10 || (p) == 11 || (p) == 13) + +#define digitalPinToInterrupt(p) ((p) == 0 ? 2 : ((p) == 1 ? 3 : ((p) == 2 ? 1 : ((p) == 3 ? 0 : ((p) == 7 ? 4 : NOT_AN_INTERRUPT))))) + +#ifdef ARDUINO_MAIN + +// On the Arduino board, digital pins are also used +// for the analog output (software PWM). Analog input +// pins are a separate set. + +// ATMEL ATMEGA32U4 / ARDUINO LEONARDO / Flora +// +// D0 PD2 RXD1/INT2 +// D1 PD3 TXD1/INT3 +// D2 PD1 SDA SDA/INT1 +// D3# PD0 PWM8/SCL OC0B/SCL/INT0 +// D4 A6 PD4 ADC8 +// D5# PC6 ??? OC3A/#OC4A +// D6# A7 PD7 FastPWM #OC4D/ADC10 +// D7 PE6 INT6/AIN0 +// +// D8 A8 PB4 ADC11/PCINT4 +// D9# A9 PB5 PWM16 OC1A/#OC4B/ADC12/PCINT5 +// D10# A10 PB6 PWM16 OC1B/0c4B/ADC13/PCINT6 +// D11# PB7 PWM8/16 0C0A/OC1C/#RTS/PCINT7 +// D12 A11 PD6 T1/#OC4D/ADC9 +// D13# PC7 PWM10 CLK0/OC4A +// +// A0 D18 PF7 ADC7 +// A1 D19 PF6 ADC6 +// A2 D20 PF5 ADC5 +// A3 D21 PF4 ADC4 +// A4 D22 PF1 ADC1 +// A5 D23 PF0 ADC0 +// +// New pins D14..D17 to map SPI port to digital pins +// +// MISO D14 PB3 MISO,PCINT3 +// SCK D15 PB1 SCK,PCINT1 +// MOSI D16 PB2 MOSI,PCINT2 +// SS D17 PB0 RXLED,SS/PCINT0 +// +// TXLED D30 PD5 +// RXLED PB0 +// HWB PE2 HWB + +// these arrays map port names (e.g. port B) to the +// appropriate addresses for various functions (e.g. reading +// and writing) +const uint16_t PROGMEM port_to_mode_PGM[] = { + NOT_A_PORT, + NOT_A_PORT, + (uint16_t) &DDRB, + (uint16_t) &DDRC, + (uint16_t) &DDRD, + (uint16_t) &DDRE, + (uint16_t) &DDRF, +}; + +const uint16_t PROGMEM port_to_output_PGM[] = { + NOT_A_PORT, + NOT_A_PORT, + (uint16_t) &PORTB, + (uint16_t) &PORTC, + (uint16_t) &PORTD, + (uint16_t) &PORTE, + (uint16_t) &PORTF, +}; + +const uint16_t PROGMEM port_to_input_PGM[] = { + NOT_A_PORT, + NOT_A_PORT, + (uint16_t) &PINB, + (uint16_t) &PINC, + (uint16_t) &PIND, + (uint16_t) &PINE, + (uint16_t) &PINF, +}; + +const uint8_t PROGMEM digital_pin_to_port_PGM[] = { + PD, // D0 - PD2 + PD, // D1 - PD3 + PD, // D2 - PD1 + PD, // D3 - PD0 + PD, // D4 - PD4 + PC, // D5 - PC6 + PD, // D6 - PD7 + PE, // D7 - PE6 + + PB, // D8 - PB4 + PB, // D9 - PB5 + PB, // D10 - PB6 + PB, // D11 - PB7 + PD, // D12 - PD6 + PC, // D13 - PC7 + + PB, // D14 - MISO - PB3 + PB, // D15 - SCK - PB1 + PB, // D16 - MOSI - PB2 + PB, // D17 - SS - PB0 + + PF, // D18 - A0 - PF7 + PF, // D19 - A1 - PF6 + PF, // D20 - A2 - PF5 + PF, // D21 - A3 - PF4 + PF, // D22 - A4 - PF1 + PF, // D23 - A5 - PF0 + + PD, // D24 / D4 - A6 - PD4 + PD, // D25 / D6 - A7 - PD7 + PB, // D26 / D8 - A8 - PB4 + PB, // D27 / D9 - A9 - PB5 + PB, // D28 / D10 - A10 - PB6 + PD, // D29 / D12 - A11 - PD6 + PD, // D30 - PD5 +}; + +const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[] = { + _BV(2), // D0 - PD2 + _BV(3), // D1 - PD3 + _BV(1), // D2 - PD1 + _BV(0), // D3 - PD0 + _BV(4), // D4 - PD4 + _BV(6), // D5 - PC6 + _BV(7), // D6 - PD7 + _BV(6), // D7 - PE6 + + _BV(4), // D8 - PB4 + _BV(5), // D9 - PB5 + _BV(6), // D10 - PB6 + _BV(7), // D11 - PB7 + _BV(6), // D12 - PD6 + _BV(7), // D13 - PC7 + + _BV(3), // D14 - MISO - PB3 + _BV(1), // D15 - SCK - PB1 + _BV(2), // D16 - MOSI - PB2 + _BV(0), // D17 - SS - PB0 + + _BV(7), // D18 - A0 - PF7 + _BV(6), // D19 - A1 - PF6 + _BV(5), // D20 - A2 - PF5 + _BV(4), // D21 - A3 - PF4 + _BV(1), // D22 - A4 - PF1 + _BV(0), // D23 - A5 - PF0 + + _BV(4), // D24 / D4 - A6 - PD4 + _BV(7), // D25 / D6 - A7 - PD7 + _BV(4), // D26 / D8 - A8 - PB4 + _BV(5), // D27 / D9 - A9 - PB5 + _BV(6), // D28 / D10 - A10 - PB6 + _BV(6), // D29 / D12 - A11 - PD6 + _BV(5), // D30 - PD5 +}; + +const uint8_t PROGMEM digital_pin_to_timer_PGM[] = { + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + TIMER0B, /* 3 */ + NOT_ON_TIMER, + TIMER3A, /* 5 */ + TIMER4D, /* 6 */ + NOT_ON_TIMER, + + NOT_ON_TIMER, + TIMER1A, /* 9 */ + TIMER1B, /* 10 */ + TIMER0A, /* 11 */ + + NOT_ON_TIMER, + TIMER4A, /* 13 */ + + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, +}; + +const uint8_t PROGMEM analog_pin_to_channel_PGM[] = { + 7, // A0 PF7 ADC7 + 6, // A1 PF6 ADC6 + 5, // A2 PF5 ADC5 + 4, // A3 PF4 ADC4 + 1, // A4 PF1 ADC1 + 0, // A5 PF0 ADC0 + 8, // A6 D4 PD4 ADC8 + 10, // A7 D6 PD7 ADC10 + 11, // A8 D8 PB4 ADC11 + 12, // A9 D9 PB5 ADC12 + 13, // A10 D10 PB6 ADC13 + 9 // A11 D12 PD6 ADC9 +}; + +#endif /* ARDUINO_MAIN */ + +// These serial port names are intended to allow libraries and architecture-neutral +// sketches to automatically default to the correct port name for a particular type +// of use. For example, a GPS module would normally connect to SERIAL_PORT_HARDWARE_OPEN, +// the first hardware serial port whose RX/TX pins are not dedicated to another use. +// +// SERIAL_PORT_MONITOR Port which normally prints to the Arduino Serial Monitor +// +// SERIAL_PORT_USBVIRTUAL Port which is USB virtual serial +// +// SERIAL_PORT_LINUXBRIDGE Port which connects to a Linux system via Bridge library +// +// SERIAL_PORT_HARDWARE Hardware serial port, physical RX & TX pins. +// +// SERIAL_PORT_HARDWARE_OPEN Hardware serial ports which are open for use. Their RX & TX +// pins are NOT connected to anything by default. +#define SERIAL_PORT_MONITOR Serial +#define SERIAL_PORT_USBVIRTUAL Serial +#define SERIAL_PORT_HARDWARE Serial1 +#define SERIAL_PORT_HARDWARE_OPEN Serial1 + +// Alias SerialUSB to Serial +#define SerialUSB SERIAL_PORT_USBVIRTUAL + +// Bootloader related fields +// Old Caterina bootloader places the MAGIC key into unsafe RAM locations (it can be rewritten +// by the running sketch before to actual reboot). +// Newer bootloaders, recognizable by the LUFA "signature" at the end of the flash, can handle both +// the usafe and the safe location. Check once (in USBCore.cpp) if the bootloader in new, then set the global +// _updatedLUFAbootloader variable to true/false and place the magic key consequently +#ifndef MAGIC_KEY +#define MAGIC_KEY 0x7777 +#endif + +#ifndef MAGIC_KEY_POS +#define MAGIC_KEY_POS 0x0800 +#endif + +#ifndef NEW_LUFA_SIGNATURE +#define NEW_LUFA_SIGNATURE 0xDCFB +#endif + +#endif /* Pins_Arduino_h */ diff --git a/external/arduino/avr/variants/eightanaloginputs/pins_arduino.h b/external/arduino/avr/variants/eightanaloginputs/pins_arduino.h new file mode 100644 index 000000000..4ccf8ba27 --- /dev/null +++ b/external/arduino/avr/variants/eightanaloginputs/pins_arduino.h @@ -0,0 +1,25 @@ +/* + pins_arduino.h - Pin definition functions for Arduino + Part of Arduino - http://www.arduino.cc/ + + Copyright (c) 2007 David A. Mellis + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General + Public License along with this library; if not, write to the + Free Software Foundation, Inc., 59 Temple Place, Suite 330, + Boston, MA 02111-1307 USA +*/ + +#include "../standard/pins_arduino.h" +#undef NUM_ANALOG_INPUTS +#define NUM_ANALOG_INPUTS 8 diff --git a/external/arduino/avr/variants/ethernet/pins_arduino.h b/external/arduino/avr/variants/ethernet/pins_arduino.h new file mode 100644 index 000000000..f12f3215b --- /dev/null +++ b/external/arduino/avr/variants/ethernet/pins_arduino.h @@ -0,0 +1,255 @@ +/* + pins_arduino.h - Pin definition functions for Arduino + Part of Arduino - http://www.arduino.cc/ + + Copyright (c) 2007 David A. Mellis + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General + Public License along with this library; if not, write to the + Free Software Foundation, Inc., 59 Temple Place, Suite 330, + Boston, MA 02111-1307 USA +*/ + +#ifndef Pins_Arduino_h +#define Pins_Arduino_h + +#include + +#define NUM_DIGITAL_PINS 20 +#define NUM_ANALOG_INPUTS 6 +#define analogInputToDigitalPin(p) ((p < 6) ? (p) + 14 : -1) + +#if defined(__AVR_ATmega8__) +#define digitalPinHasPWM(p) ((p) == 9 || (p) == 10 || (p) == 11) +#else +#define digitalPinHasPWM(p) ((p) == 3 || (p) == 5 || (p) == 6 || (p) == 9 || (p) == 10 || (p) == 11) +#endif + +#define PIN_SPI_SS (10) +#define PIN_SPI_MOSI (11) +#define PIN_SPI_MISO (12) +#define PIN_SPI_SCK (13) + +static const uint8_t SS = PIN_SPI_SS; +static const uint8_t MOSI = PIN_SPI_MOSI; +static const uint8_t MISO = PIN_SPI_MISO; +static const uint8_t SCK = PIN_SPI_SCK; + +#define PIN_WIRE_SDA (18) +#define PIN_WIRE_SCL (19) + +static const uint8_t SDA = PIN_WIRE_SDA; +static const uint8_t SCL = PIN_WIRE_SCL; + +#define LED_BUILTIN 9 + +#define PIN_A0 (14) +#define PIN_A1 (15) +#define PIN_A2 (16) +#define PIN_A3 (17) +#define PIN_A4 (18) +#define PIN_A5 (19) +#define PIN_A6 (20) +#define PIN_A7 (21) + +static const uint8_t A0 = PIN_A0; +static const uint8_t A1 = PIN_A1; +static const uint8_t A2 = PIN_A2; +static const uint8_t A3 = PIN_A3; +static const uint8_t A4 = PIN_A4; +static const uint8_t A5 = PIN_A5; +static const uint8_t A6 = PIN_A6; +static const uint8_t A7 = PIN_A7; + +#define digitalPinToPCICR(p) (((p) >= 0 && (p) <= 21) ? (&PCICR) : ((uint8_t *)0)) +#define digitalPinToPCICRbit(p) (((p) <= 7) ? 2 : (((p) <= 13) ? 0 : 1)) +#define digitalPinToPCMSK(p) (((p) <= 7) ? (&PCMSK2) : (((p) <= 13) ? (&PCMSK0) : (((p) <= 21) ? (&PCMSK1) : ((uint8_t *)0)))) +#define digitalPinToPCMSKbit(p) (((p) <= 7) ? (p) : (((p) <= 13) ? ((p) - 8) : ((p) - 14))) + +#define digitalPinToInterrupt(p) ((p) == 2 ? 0 : ((p) == 3 ? 1 : NOT_AN_INTERRUPT)) + +#ifdef ARDUINO_MAIN + +// On the Arduino board, digital pins are also used +// for the analog output (software PWM). Analog input +// pins are a separate set. + +// ATMEL ATMEGA8 & 168 / ARDUINO +// +// +-\/-+ +// PC6 1| |28 PC5 (AI 5) +// (D 0) PD0 2| |27 PC4 (AI 4) +// (D 1) PD1 3| |26 PC3 (AI 3) +// (D 2) PD2 4| |25 PC2 (AI 2) +// PWM+ (D 3) PD3 5| |24 PC1 (AI 1) +// (D 4) PD4 6| |23 PC0 (AI 0) +// VCC 7| |22 GND +// GND 8| |21 AREF +// PB6 9| |20 AVCC +// PB7 10| |19 PB5 (D 13) +// PWM+ (D 5) PD5 11| |18 PB4 (D 12) +// PWM+ (D 6) PD6 12| |17 PB3 (D 11) PWM +// (D 7) PD7 13| |16 PB2 (D 10) PWM +// (D 8) PB0 14| |15 PB1 (D 9) PWM +// +----+ +// +// (PWM+ indicates the additional PWM pins on the ATmega168.) + +// ATMEL ATMEGA1280 / ARDUINO +// +// 0-7 PE0-PE7 works +// 8-13 PB0-PB5 works +// 14-21 PA0-PA7 works +// 22-29 PH0-PH7 works +// 30-35 PG5-PG0 works +// 36-43 PC7-PC0 works +// 44-51 PJ7-PJ0 works +// 52-59 PL7-PL0 works +// 60-67 PD7-PD0 works +// A0-A7 PF0-PF7 +// A8-A15 PK0-PK7 + + +// these arrays map port names (e.g. port B) to the +// appropriate addresses for various functions (e.g. reading +// and writing) +const uint16_t PROGMEM port_to_mode_PGM[] = { + NOT_A_PORT, + NOT_A_PORT, + (uint16_t) &DDRB, + (uint16_t) &DDRC, + (uint16_t) &DDRD, +}; + +const uint16_t PROGMEM port_to_output_PGM[] = { + NOT_A_PORT, + NOT_A_PORT, + (uint16_t) &PORTB, + (uint16_t) &PORTC, + (uint16_t) &PORTD, +}; + +const uint16_t PROGMEM port_to_input_PGM[] = { + NOT_A_PORT, + NOT_A_PORT, + (uint16_t) &PINB, + (uint16_t) &PINC, + (uint16_t) &PIND, +}; + +const uint8_t PROGMEM digital_pin_to_port_PGM[] = { + PD, /* 0 */ + PD, + PD, + PD, + PD, + PD, + PD, + PD, + PB, /* 8 */ + PB, + PB, + PB, + PB, + PB, + PC, /* 14 */ + PC, + PC, + PC, + PC, + PC, +}; + +const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[] = { + _BV(0), /* 0, port D */ + _BV(1), + _BV(2), + _BV(3), + _BV(4), + _BV(5), + _BV(6), + _BV(7), + _BV(0), /* 8, port B */ + _BV(1), + _BV(2), + _BV(3), + _BV(4), + _BV(5), + _BV(0), /* 14, port C */ + _BV(1), + _BV(2), + _BV(3), + _BV(4), + _BV(5), +}; + +const uint8_t PROGMEM digital_pin_to_timer_PGM[] = { + NOT_ON_TIMER, /* 0 - port D */ + NOT_ON_TIMER, + NOT_ON_TIMER, + // on the ATmega168, digital pin 3 has hardware pwm +#if defined(__AVR_ATmega8__) + NOT_ON_TIMER, +#else + TIMER2B, +#endif + NOT_ON_TIMER, + // on the ATmega168, digital pins 5 and 6 have hardware pwm +#if defined(__AVR_ATmega8__) + NOT_ON_TIMER, + NOT_ON_TIMER, +#else + TIMER0B, + TIMER0A, +#endif + NOT_ON_TIMER, + NOT_ON_TIMER, /* 8 - port B */ + TIMER1A, + TIMER1B, +#if defined(__AVR_ATmega8__) + TIMER2, +#else + TIMER2A, +#endif + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, /* 14 - port C */ + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, +}; + +#endif + +// These serial port names are intended to allow libraries and architecture-neutral +// sketches to automatically default to the correct port name for a particular type +// of use. For example, a GPS module would normally connect to SERIAL_PORT_HARDWARE_OPEN, +// the first hardware serial port whose RX/TX pins are not dedicated to another use. +// +// SERIAL_PORT_MONITOR Port which normally prints to the Arduino Serial Monitor +// +// SERIAL_PORT_USBVIRTUAL Port which is USB virtual serial +// +// SERIAL_PORT_LINUXBRIDGE Port which connects to a Linux system via Bridge library +// +// SERIAL_PORT_HARDWARE Hardware serial port, physical RX & TX pins. +// +// SERIAL_PORT_HARDWARE_OPEN Hardware serial ports which are open for use. Their RX & TX +// pins are NOT connected to anything by default. +#define SERIAL_PORT_HARDWARE Serial +#define SERIAL_PORT_HARDWARE_OPEN Serial +#define SERIAL_PORT_MONITOR Serial + +#endif diff --git a/external/arduino/avr/variants/gemma/pins_arduino.h b/external/arduino/avr/variants/gemma/pins_arduino.h new file mode 100644 index 000000000..e0ec217ae --- /dev/null +++ b/external/arduino/avr/variants/gemma/pins_arduino.h @@ -0,0 +1,140 @@ +/* + pins_arduino.c - pin definitions for the Arduino board + Part of Arduino / Wiring Lite + + Copyright (c) 2005 David A. Mellis + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General + Public License along with this library; if not, write to the + Free Software Foundation, Inc., 59 Temple Place, Suite 330, + Boston, MA 02111-1307 USA + + Modified 28-08-2009 for attiny84 R.Wiersma + Modified 09-10-2009 for attiny45 A.Saporetti +*/ + +#ifndef Pins_Arduino_h +#define Pins_Arduino_h + +#include + +// Defines to make D4 support PWM +// See for more info: http://forums.adafruit.com/viewtopic.php?f=52&t=43951 +//#define TCCR1A GTCCR +//#define WGM10 PWM1B + +// ATMEL ATTINY45 / ARDUINO +// +// +-\/-+ +// Ain0 (D 5) PB5 1| |8 Vcc +// Ain3 (D 3) PB3 2| |7 PB2 (D 2) Ain1 +// Ain2 (D 4) PB4 3| |6 PB1 (D 1) pwm1 +// GND 4| |5 PB0 (D 0) pwm0 +// +----+ + +#define NUM_DIGITAL_PINS 3 +#define NUM_ANALOG_INPUTS 1 +#define LED_BUILTIN 1 + +#define PIN_A0 (6) +#define PIN_A1 (7) +#define PIN_A2 (8) +#define PIN_A3 (9) + +static const uint8_t A0 = PIN_A0; +static const uint8_t A1 = PIN_A1; +static const uint8_t A2 = PIN_A2; +static const uint8_t A3 = PIN_A3; + +#define digitalPinToPCICR(p) ( ((p) >= 0 && (p) <= 4) ? (&GIMSK) : ((uint8_t *)0) ) +#define digitalPinToPCICRbit(p) ( PCIE ) +#define digitalPinToPCMSK(p) ( ((p) <= 4) ? (&PCMSK) : ((uint8_t *)0) ) +#define digitalPinToPCMSKbit(p) ( (p) ) + +#define digitalPinToInterrupt(p) ((p) == 2 ? 0 : NOT_AN_INTERRUPT) + +#define analogPinToChannel(p) ( (p) < 6 ? (p) : (p) - 6 ) + +#define TCCR1A GTCCR + +#ifdef ARDUINO_MAIN + +void initVariant() +{ + GTCCR |= (1 << PWM1B); +} + +// these arrays map port names (e.g. port B) to the +// appropriate addresses for various functions (e.g. reading +// and writing) tiny45 only port B +const uint16_t PROGMEM port_to_mode_PGM[] = { + NOT_A_PORT, + NOT_A_PORT, + (uint16_t) &DDRB, +}; + +const uint16_t PROGMEM port_to_output_PGM[] = { + NOT_A_PORT, + NOT_A_PORT, + (uint16_t) &PORTB, +}; + +const uint16_t PROGMEM port_to_input_PGM[] = { + NOT_A_PIN, + NOT_A_PIN, + (uint16_t) &PINB, +}; + +const uint8_t PROGMEM digital_pin_to_port_PGM[] = { + PB, /* 0 */ + PB, + PB, + PB, + PB, + PB, // 5 + PB, // A0 + PB, + PB, + PB, // A4 + +}; + +const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[] = { + _BV(0), /* 0, port B */ + _BV(1), + _BV(2), + _BV(3), /* 3 port B */ + _BV(4), + _BV(5), + _BV(5), + _BV(2), + _BV(4), + _BV(3), +}; + +const uint8_t PROGMEM digital_pin_to_timer_PGM[] = { + TIMER0A, /* OC0A */ + TIMER0B, + NOT_ON_TIMER, + NOT_ON_TIMER, + TIMER1B, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, +}; + +#endif + +#endif diff --git a/external/arduino/avr/variants/leonardo/pins_arduino.h b/external/arduino/avr/variants/leonardo/pins_arduino.h new file mode 100644 index 000000000..8586dac0a --- /dev/null +++ b/external/arduino/avr/variants/leonardo/pins_arduino.h @@ -0,0 +1,391 @@ +/* + pins_arduino.h - Pin definition functions for Arduino + Part of Arduino - http://www.arduino.cc/ + + Copyright (c) 2007 David A. Mellis + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General + Public License along with this library; if not, write to the + Free Software Foundation, Inc., 59 Temple Place, Suite 330, + Boston, MA 02111-1307 USA +*/ + +#ifndef Pins_Arduino_h +#define Pins_Arduino_h + +#include + +// Workaround for wrong definitions in "iom32u4.h". +// This should be fixed in the AVR toolchain. +#undef UHCON +#undef UHINT +#undef UHIEN +#undef UHADDR +#undef UHFNUM +#undef UHFNUML +#undef UHFNUMH +#undef UHFLEN +#undef UPINRQX +#undef UPINTX +#undef UPNUM +#undef UPRST +#undef UPCONX +#undef UPCFG0X +#undef UPCFG1X +#undef UPSTAX +#undef UPCFG2X +#undef UPIENX +#undef UPDATX +#undef TCCR2A +#undef WGM20 +#undef WGM21 +#undef COM2B0 +#undef COM2B1 +#undef COM2A0 +#undef COM2A1 +#undef TCCR2B +#undef CS20 +#undef CS21 +#undef CS22 +#undef WGM22 +#undef FOC2B +#undef FOC2A +#undef TCNT2 +#undef TCNT2_0 +#undef TCNT2_1 +#undef TCNT2_2 +#undef TCNT2_3 +#undef TCNT2_4 +#undef TCNT2_5 +#undef TCNT2_6 +#undef TCNT2_7 +#undef OCR2A +#undef OCR2_0 +#undef OCR2_1 +#undef OCR2_2 +#undef OCR2_3 +#undef OCR2_4 +#undef OCR2_5 +#undef OCR2_6 +#undef OCR2_7 +#undef OCR2B +#undef OCR2_0 +#undef OCR2_1 +#undef OCR2_2 +#undef OCR2_3 +#undef OCR2_4 +#undef OCR2_5 +#undef OCR2_6 +#undef OCR2_7 + +#define NUM_DIGITAL_PINS 31 +#define NUM_ANALOG_INPUTS 12 + +#define TX_RX_LED_INIT DDRD |= (1<<5), DDRB |= (1<<0) +#define TXLED0 PORTD |= (1<<5) +#define TXLED1 PORTD &= ~(1<<5) +#define RXLED0 PORTB |= (1<<0) +#define RXLED1 PORTB &= ~(1<<0) + +#define PIN_WIRE_SDA (2) +#define PIN_WIRE_SCL (3) + +static const uint8_t SDA = PIN_WIRE_SDA; +static const uint8_t SCL = PIN_WIRE_SCL; + +#define LED_BUILTIN 13 +#define LED_BUILTIN_RX 17 +#define LED_BUILTIN_TX 30 + +// Map SPI port to 'new' pins D14..D17 +#define PIN_SPI_SS (17) +#define PIN_SPI_MOSI (16) +#define PIN_SPI_MISO (14) +#define PIN_SPI_SCK (15) + +static const uint8_t SS = PIN_SPI_SS; +static const uint8_t MOSI = PIN_SPI_MOSI; +static const uint8_t MISO = PIN_SPI_MISO; +static const uint8_t SCK = PIN_SPI_SCK; + +// Mapping of analog pins as digital I/O +// A6-A11 share with digital pins +#define PIN_A0 (18) +#define PIN_A1 (19) +#define PIN_A2 (20) +#define PIN_A3 (21) +#define PIN_A4 (22) +#define PIN_A5 (23) +#define PIN_A6 (24) +#define PIN_A7 (25) +#define PIN_A8 (26) +#define PIN_A9 (27) +#define PIN_A10 (28) +#define PIN_A11 (29) + +static const uint8_t A0 = PIN_A0; +static const uint8_t A1 = PIN_A1; +static const uint8_t A2 = PIN_A2; +static const uint8_t A3 = PIN_A3; +static const uint8_t A4 = PIN_A4; +static const uint8_t A5 = PIN_A5; +static const uint8_t A6 = PIN_A6; // D4 +static const uint8_t A7 = PIN_A7; // D6 +static const uint8_t A8 = PIN_A8; // D8 +static const uint8_t A9 = PIN_A9; // D9 +static const uint8_t A10 = PIN_A10; // D10 +static const uint8_t A11 = PIN_A11; // D12 + +#define digitalPinToPCICR(p) ((((p) >= 8 && (p) <= 11) || ((p) >= 14 && (p) <= 17) || ((p) >= A8 && (p) <= A10)) ? (&PCICR) : ((uint8_t *)0)) +#define digitalPinToPCICRbit(p) 0 +#define digitalPinToPCMSK(p) ((((p) >= 8 && (p) <= 11) || ((p) >= 14 && (p) <= 17) || ((p) >= A8 && (p) <= A10)) ? (&PCMSK0) : ((uint8_t *)0)) +#define digitalPinToPCMSKbit(p) ( ((p) >= 8 && (p) <= 11) ? (p) - 4 : ((p) == 14 ? 3 : ((p) == 15 ? 1 : ((p) == 16 ? 2 : ((p) == 17 ? 0 : (p - A8 + 4)))))) + +// __AVR_ATmega32U4__ has an unusual mapping of pins to channels +extern const uint8_t PROGMEM analog_pin_to_channel_PGM[]; +#define analogPinToChannel(P) ( pgm_read_byte( analog_pin_to_channel_PGM + (P) ) ) + +#define digitalPinHasPWM(p) ((p) == 3 || (p) == 5 || (p) == 6 || (p) == 9 || (p) == 10 || (p) == 11 || (p) == 13) + +#define digitalPinToInterrupt(p) ((p) == 0 ? 2 : ((p) == 1 ? 3 : ((p) == 2 ? 1 : ((p) == 3 ? 0 : ((p) == 7 ? 4 : NOT_AN_INTERRUPT))))) + +#ifdef ARDUINO_MAIN + +// On the Arduino board, digital pins are also used +// for the analog output (software PWM). Analog input +// pins are a separate set. + +// ATMEL ATMEGA32U4 / ARDUINO LEONARDO +// +// D0 PD2 RXD1/INT2 +// D1 PD3 TXD1/INT3 +// D2 PD1 SDA SDA/INT1 +// D3# PD0 PWM8/SCL OC0B/SCL/INT0 +// D4 A6 PD4 ADC8 +// D5# PC6 ??? OC3A/#OC4A +// D6# A7 PD7 FastPWM #OC4D/ADC10 +// D7 PE6 INT6/AIN0 +// +// D8 A8 PB4 ADC11/PCINT4 +// D9# A9 PB5 PWM16 OC1A/#OC4B/ADC12/PCINT5 +// D10# A10 PB6 PWM16 OC1B/0c4B/ADC13/PCINT6 +// D11# PB7 PWM8/16 0C0A/OC1C/#RTS/PCINT7 +// D12 A11 PD6 T1/#OC4D/ADC9 +// D13# PC7 PWM10 CLK0/OC4A +// +// A0 D18 PF7 ADC7 +// A1 D19 PF6 ADC6 +// A2 D20 PF5 ADC5 +// A3 D21 PF4 ADC4 +// A4 D22 PF1 ADC1 +// A5 D23 PF0 ADC0 +// +// New pins D14..D17 to map SPI port to digital pins +// +// MISO D14 PB3 MISO,PCINT3 +// SCK D15 PB1 SCK,PCINT1 +// MOSI D16 PB2 MOSI,PCINT2 +// SS D17 PB0 RXLED,SS/PCINT0 +// +// TXLED D30 PD5 XCK1 +// RXLED D17 PB0 +// HWB PE2 HWB + +// these arrays map port names (e.g. port B) to the +// appropriate addresses for various functions (e.g. reading +// and writing) +const uint16_t PROGMEM port_to_mode_PGM[] = { + NOT_A_PORT, + NOT_A_PORT, + (uint16_t) &DDRB, + (uint16_t) &DDRC, + (uint16_t) &DDRD, + (uint16_t) &DDRE, + (uint16_t) &DDRF, +}; + +const uint16_t PROGMEM port_to_output_PGM[] = { + NOT_A_PORT, + NOT_A_PORT, + (uint16_t) &PORTB, + (uint16_t) &PORTC, + (uint16_t) &PORTD, + (uint16_t) &PORTE, + (uint16_t) &PORTF, +}; + +const uint16_t PROGMEM port_to_input_PGM[] = { + NOT_A_PORT, + NOT_A_PORT, + (uint16_t) &PINB, + (uint16_t) &PINC, + (uint16_t) &PIND, + (uint16_t) &PINE, + (uint16_t) &PINF, +}; + +const uint8_t PROGMEM digital_pin_to_port_PGM[] = { + PD, // D0 - PD2 + PD, // D1 - PD3 + PD, // D2 - PD1 + PD, // D3 - PD0 + PD, // D4 - PD4 + PC, // D5 - PC6 + PD, // D6 - PD7 + PE, // D7 - PE6 + + PB, // D8 - PB4 + PB, // D9 - PB5 + PB, // D10 - PB6 + PB, // D11 - PB7 + PD, // D12 - PD6 + PC, // D13 - PC7 + + PB, // D14 - MISO - PB3 + PB, // D15 - SCK - PB1 + PB, // D16 - MOSI - PB2 + PB, // D17 - SS - PB0 + + PF, // D18 - A0 - PF7 + PF, // D19 - A1 - PF6 + PF, // D20 - A2 - PF5 + PF, // D21 - A3 - PF4 + PF, // D22 - A4 - PF1 + PF, // D23 - A5 - PF0 + + PD, // D24 / D4 - A6 - PD4 + PD, // D25 / D6 - A7 - PD7 + PB, // D26 / D8 - A8 - PB4 + PB, // D27 / D9 - A9 - PB5 + PB, // D28 / D10 - A10 - PB6 + PD, // D29 / D12 - A11 - PD6 + PD, // D30 / TX Led - PD5 +}; + +const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[] = { + _BV(2), // D0 - PD2 + _BV(3), // D1 - PD3 + _BV(1), // D2 - PD1 + _BV(0), // D3 - PD0 + _BV(4), // D4 - PD4 + _BV(6), // D5 - PC6 + _BV(7), // D6 - PD7 + _BV(6), // D7 - PE6 + + _BV(4), // D8 - PB4 + _BV(5), // D9 - PB5 + _BV(6), // D10 - PB6 + _BV(7), // D11 - PB7 + _BV(6), // D12 - PD6 + _BV(7), // D13 - PC7 + + _BV(3), // D14 - MISO - PB3 + _BV(1), // D15 - SCK - PB1 + _BV(2), // D16 - MOSI - PB2 + _BV(0), // D17 - SS - PB0 + + _BV(7), // D18 - A0 - PF7 + _BV(6), // D19 - A1 - PF6 + _BV(5), // D20 - A2 - PF5 + _BV(4), // D21 - A3 - PF4 + _BV(1), // D22 - A4 - PF1 + _BV(0), // D23 - A5 - PF0 + + _BV(4), // D24 / D4 - A6 - PD4 + _BV(7), // D25 / D6 - A7 - PD7 + _BV(4), // D26 / D8 - A8 - PB4 + _BV(5), // D27 / D9 - A9 - PB5 + _BV(6), // D28 / D10 - A10 - PB6 + _BV(6), // D29 / D12 - A11 - PD6 + _BV(5), // D30 / TX Led - PD5 +}; + +const uint8_t PROGMEM digital_pin_to_timer_PGM[] = { + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + TIMER0B, /* 3 */ + NOT_ON_TIMER, + TIMER3A, /* 5 */ + TIMER4D, /* 6 */ + NOT_ON_TIMER, + + NOT_ON_TIMER, + TIMER1A, /* 9 */ + TIMER1B, /* 10 */ + TIMER0A, /* 11 */ + + NOT_ON_TIMER, + TIMER4A, /* 13 */ + + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, +}; + +const uint8_t PROGMEM analog_pin_to_channel_PGM[] = { + 7, // A0 PF7 ADC7 + 6, // A1 PF6 ADC6 + 5, // A2 PF5 ADC5 + 4, // A3 PF4 ADC4 + 1, // A4 PF1 ADC1 + 0, // A5 PF0 ADC0 + 8, // A6 D4 PD4 ADC8 + 10, // A7 D6 PD7 ADC10 + 11, // A8 D8 PB4 ADC11 + 12, // A9 D9 PB5 ADC12 + 13, // A10 D10 PB6 ADC13 + 9 // A11 D12 PD6 ADC9 +}; + +#endif /* ARDUINO_MAIN */ + +// These serial port names are intended to allow libraries and architecture-neutral +// sketches to automatically default to the correct port name for a particular type +// of use. For example, a GPS module would normally connect to SERIAL_PORT_HARDWARE_OPEN, +// the first hardware serial port whose RX/TX pins are not dedicated to another use. +// +// SERIAL_PORT_MONITOR Port which normally prints to the Arduino Serial Monitor +// +// SERIAL_PORT_USBVIRTUAL Port which is USB virtual serial +// +// SERIAL_PORT_LINUXBRIDGE Port which connects to a Linux system via Bridge library +// +// SERIAL_PORT_HARDWARE Hardware serial port, physical RX & TX pins. +// +// SERIAL_PORT_HARDWARE_OPEN Hardware serial ports which are open for use. Their RX & TX +// pins are NOT connected to anything by default. +#define SERIAL_PORT_MONITOR Serial +#define SERIAL_PORT_USBVIRTUAL Serial +#define SERIAL_PORT_HARDWARE Serial1 +#define SERIAL_PORT_HARDWARE_OPEN Serial1 + +// Alias SerialUSB to Serial +#define SerialUSB SERIAL_PORT_USBVIRTUAL + +#endif /* Pins_Arduino_h */ diff --git a/external/arduino/avr/variants/mega/pins_arduino.h b/external/arduino/avr/variants/mega/pins_arduino.h new file mode 100644 index 000000000..5115c044a --- /dev/null +++ b/external/arduino/avr/variants/mega/pins_arduino.h @@ -0,0 +1,413 @@ +/* + pins_arduino.h - Pin definition functions for Arduino + Part of Arduino - http://www.arduino.cc/ + + Copyright (c) 2007 David A. Mellis + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General + Public License along with this library; if not, write to the + Free Software Foundation, Inc., 59 Temple Place, Suite 330, + Boston, MA 02111-1307 USA +*/ + +#ifndef Pins_Arduino_h +#define Pins_Arduino_h + +#include + +#define NUM_DIGITAL_PINS 70 +#define NUM_ANALOG_INPUTS 16 +#define analogInputToDigitalPin(p) ((p < 16) ? (p) + 54 : -1) +#define digitalPinHasPWM(p) (((p) >= 2 && (p) <= 13) || ((p) >= 44 && (p)<= 46)) + +#define PIN_SPI_SS (53) +#define PIN_SPI_MOSI (51) +#define PIN_SPI_MISO (50) +#define PIN_SPI_SCK (52) + +static const uint8_t SS = PIN_SPI_SS; +static const uint8_t MOSI = PIN_SPI_MOSI; +static const uint8_t MISO = PIN_SPI_MISO; +static const uint8_t SCK = PIN_SPI_SCK; + +#define PIN_WIRE_SDA (20) +#define PIN_WIRE_SCL (21) + +static const uint8_t SDA = PIN_WIRE_SDA; +static const uint8_t SCL = PIN_WIRE_SCL; + +#define LED_BUILTIN 13 + +#define PIN_A0 (54) +#define PIN_A1 (55) +#define PIN_A2 (56) +#define PIN_A3 (57) +#define PIN_A4 (58) +#define PIN_A5 (59) +#define PIN_A6 (60) +#define PIN_A7 (61) +#define PIN_A8 (62) +#define PIN_A9 (63) +#define PIN_A10 (64) +#define PIN_A11 (65) +#define PIN_A12 (66) +#define PIN_A13 (67) +#define PIN_A14 (68) +#define PIN_A15 (69) + +static const uint8_t A0 = PIN_A0; +static const uint8_t A1 = PIN_A1; +static const uint8_t A2 = PIN_A2; +static const uint8_t A3 = PIN_A3; +static const uint8_t A4 = PIN_A4; +static const uint8_t A5 = PIN_A5; +static const uint8_t A6 = PIN_A6; +static const uint8_t A7 = PIN_A7; +static const uint8_t A8 = PIN_A8; +static const uint8_t A9 = PIN_A9; +static const uint8_t A10 = PIN_A10; +static const uint8_t A11 = PIN_A11; +static const uint8_t A12 = PIN_A12; +static const uint8_t A13 = PIN_A13; +static const uint8_t A14 = PIN_A14; +static const uint8_t A15 = PIN_A15; + +// A majority of the pins are NOT PCINTs, SO BE WARNED (i.e. you cannot use them as receive pins) +// Only pins available for RECEIVE (TRANSMIT can be on any pin): +// (I've deliberately left out pin mapping to the Hardware USARTs - seems senseless to me) +// Pins: 10, 11, 12, 13, 50, 51, 52, 53, 62, 63, 64, 65, 66, 67, 68, 69 + +#define digitalPinToPCICR(p) ( (((p) >= 10) && ((p) <= 13)) || \ + (((p) >= 50) && ((p) <= 53)) || \ + (((p) >= 62) && ((p) <= 69)) ? (&PCICR) : ((uint8_t *)0) ) + +#define digitalPinToPCICRbit(p) ( (((p) >= 10) && ((p) <= 13)) || (((p) >= 50) && ((p) <= 53)) ? 0 : \ + ( (((p) >= 62) && ((p) <= 69)) ? 2 : \ + 0 ) ) + +#define digitalPinToPCMSK(p) ( (((p) >= 10) && ((p) <= 13)) || (((p) >= 50) && ((p) <= 53)) ? (&PCMSK0) : \ + ( (((p) >= 62) && ((p) <= 69)) ? (&PCMSK2) : \ + ((uint8_t *)0) ) ) + +#define digitalPinToPCMSKbit(p) ( (((p) >= 10) && ((p) <= 13)) ? ((p) - 6) : \ + ( ((p) == 50) ? 3 : \ + ( ((p) == 51) ? 2 : \ + ( ((p) == 52) ? 1 : \ + ( ((p) == 53) ? 0 : \ + ( (((p) >= 62) && ((p) <= 69)) ? ((p) - 62) : \ + 0 ) ) ) ) ) ) + +#define digitalPinToInterrupt(p) ((p) == 2 ? 0 : ((p) == 3 ? 1 : ((p) >= 18 && (p) <= 21 ? 23 - (p) : NOT_AN_INTERRUPT))) + +#ifdef ARDUINO_MAIN + +const uint16_t PROGMEM port_to_mode_PGM[] = { + NOT_A_PORT, + (uint16_t) &DDRA, + (uint16_t) &DDRB, + (uint16_t) &DDRC, + (uint16_t) &DDRD, + (uint16_t) &DDRE, + (uint16_t) &DDRF, + (uint16_t) &DDRG, + (uint16_t) &DDRH, + NOT_A_PORT, + (uint16_t) &DDRJ, + (uint16_t) &DDRK, + (uint16_t) &DDRL, +}; + +const uint16_t PROGMEM port_to_output_PGM[] = { + NOT_A_PORT, + (uint16_t) &PORTA, + (uint16_t) &PORTB, + (uint16_t) &PORTC, + (uint16_t) &PORTD, + (uint16_t) &PORTE, + (uint16_t) &PORTF, + (uint16_t) &PORTG, + (uint16_t) &PORTH, + NOT_A_PORT, + (uint16_t) &PORTJ, + (uint16_t) &PORTK, + (uint16_t) &PORTL, +}; + +const uint16_t PROGMEM port_to_input_PGM[] = { + NOT_A_PIN, + (uint16_t) &PINA, + (uint16_t) &PINB, + (uint16_t) &PINC, + (uint16_t) &PIND, + (uint16_t) &PINE, + (uint16_t) &PINF, + (uint16_t) &PING, + (uint16_t) &PINH, + NOT_A_PIN, + (uint16_t) &PINJ, + (uint16_t) &PINK, + (uint16_t) &PINL, +}; + +const uint8_t PROGMEM digital_pin_to_port_PGM[] = { + // PORTLIST + // ------------------------------------------- + PE , // PE 0 ** 0 ** USART0_RX + PE , // PE 1 ** 1 ** USART0_TX + PE , // PE 4 ** 2 ** PWM2 + PE , // PE 5 ** 3 ** PWM3 + PG , // PG 5 ** 4 ** PWM4 + PE , // PE 3 ** 5 ** PWM5 + PH , // PH 3 ** 6 ** PWM6 + PH , // PH 4 ** 7 ** PWM7 + PH , // PH 5 ** 8 ** PWM8 + PH , // PH 6 ** 9 ** PWM9 + PB , // PB 4 ** 10 ** PWM10 + PB , // PB 5 ** 11 ** PWM11 + PB , // PB 6 ** 12 ** PWM12 + PB , // PB 7 ** 13 ** PWM13 + PJ , // PJ 1 ** 14 ** USART3_TX + PJ , // PJ 0 ** 15 ** USART3_RX + PH , // PH 1 ** 16 ** USART2_TX + PH , // PH 0 ** 17 ** USART2_RX + PD , // PD 3 ** 18 ** USART1_TX + PD , // PD 2 ** 19 ** USART1_RX + PD , // PD 1 ** 20 ** I2C_SDA + PD , // PD 0 ** 21 ** I2C_SCL + PA , // PA 0 ** 22 ** D22 + PA , // PA 1 ** 23 ** D23 + PA , // PA 2 ** 24 ** D24 + PA , // PA 3 ** 25 ** D25 + PA , // PA 4 ** 26 ** D26 + PA , // PA 5 ** 27 ** D27 + PA , // PA 6 ** 28 ** D28 + PA , // PA 7 ** 29 ** D29 + PC , // PC 7 ** 30 ** D30 + PC , // PC 6 ** 31 ** D31 + PC , // PC 5 ** 32 ** D32 + PC , // PC 4 ** 33 ** D33 + PC , // PC 3 ** 34 ** D34 + PC , // PC 2 ** 35 ** D35 + PC , // PC 1 ** 36 ** D36 + PC , // PC 0 ** 37 ** D37 + PD , // PD 7 ** 38 ** D38 + PG , // PG 2 ** 39 ** D39 + PG , // PG 1 ** 40 ** D40 + PG , // PG 0 ** 41 ** D41 + PL , // PL 7 ** 42 ** D42 + PL , // PL 6 ** 43 ** D43 + PL , // PL 5 ** 44 ** D44 + PL , // PL 4 ** 45 ** D45 + PL , // PL 3 ** 46 ** D46 + PL , // PL 2 ** 47 ** D47 + PL , // PL 1 ** 48 ** D48 + PL , // PL 0 ** 49 ** D49 + PB , // PB 3 ** 50 ** SPI_MISO + PB , // PB 2 ** 51 ** SPI_MOSI + PB , // PB 1 ** 52 ** SPI_SCK + PB , // PB 0 ** 53 ** SPI_SS + PF , // PF 0 ** 54 ** A0 + PF , // PF 1 ** 55 ** A1 + PF , // PF 2 ** 56 ** A2 + PF , // PF 3 ** 57 ** A3 + PF , // PF 4 ** 58 ** A4 + PF , // PF 5 ** 59 ** A5 + PF , // PF 6 ** 60 ** A6 + PF , // PF 7 ** 61 ** A7 + PK , // PK 0 ** 62 ** A8 + PK , // PK 1 ** 63 ** A9 + PK , // PK 2 ** 64 ** A10 + PK , // PK 3 ** 65 ** A11 + PK , // PK 4 ** 66 ** A12 + PK , // PK 5 ** 67 ** A13 + PK , // PK 6 ** 68 ** A14 + PK , // PK 7 ** 69 ** A15 +}; + +const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[] = { + // PIN IN PORT + // ------------------------------------------- + _BV( 0 ) , // PE 0 ** 0 ** USART0_RX + _BV( 1 ) , // PE 1 ** 1 ** USART0_TX + _BV( 4 ) , // PE 4 ** 2 ** PWM2 + _BV( 5 ) , // PE 5 ** 3 ** PWM3 + _BV( 5 ) , // PG 5 ** 4 ** PWM4 + _BV( 3 ) , // PE 3 ** 5 ** PWM5 + _BV( 3 ) , // PH 3 ** 6 ** PWM6 + _BV( 4 ) , // PH 4 ** 7 ** PWM7 + _BV( 5 ) , // PH 5 ** 8 ** PWM8 + _BV( 6 ) , // PH 6 ** 9 ** PWM9 + _BV( 4 ) , // PB 4 ** 10 ** PWM10 + _BV( 5 ) , // PB 5 ** 11 ** PWM11 + _BV( 6 ) , // PB 6 ** 12 ** PWM12 + _BV( 7 ) , // PB 7 ** 13 ** PWM13 + _BV( 1 ) , // PJ 1 ** 14 ** USART3_TX + _BV( 0 ) , // PJ 0 ** 15 ** USART3_RX + _BV( 1 ) , // PH 1 ** 16 ** USART2_TX + _BV( 0 ) , // PH 0 ** 17 ** USART2_RX + _BV( 3 ) , // PD 3 ** 18 ** USART1_TX + _BV( 2 ) , // PD 2 ** 19 ** USART1_RX + _BV( 1 ) , // PD 1 ** 20 ** I2C_SDA + _BV( 0 ) , // PD 0 ** 21 ** I2C_SCL + _BV( 0 ) , // PA 0 ** 22 ** D22 + _BV( 1 ) , // PA 1 ** 23 ** D23 + _BV( 2 ) , // PA 2 ** 24 ** D24 + _BV( 3 ) , // PA 3 ** 25 ** D25 + _BV( 4 ) , // PA 4 ** 26 ** D26 + _BV( 5 ) , // PA 5 ** 27 ** D27 + _BV( 6 ) , // PA 6 ** 28 ** D28 + _BV( 7 ) , // PA 7 ** 29 ** D29 + _BV( 7 ) , // PC 7 ** 30 ** D30 + _BV( 6 ) , // PC 6 ** 31 ** D31 + _BV( 5 ) , // PC 5 ** 32 ** D32 + _BV( 4 ) , // PC 4 ** 33 ** D33 + _BV( 3 ) , // PC 3 ** 34 ** D34 + _BV( 2 ) , // PC 2 ** 35 ** D35 + _BV( 1 ) , // PC 1 ** 36 ** D36 + _BV( 0 ) , // PC 0 ** 37 ** D37 + _BV( 7 ) , // PD 7 ** 38 ** D38 + _BV( 2 ) , // PG 2 ** 39 ** D39 + _BV( 1 ) , // PG 1 ** 40 ** D40 + _BV( 0 ) , // PG 0 ** 41 ** D41 + _BV( 7 ) , // PL 7 ** 42 ** D42 + _BV( 6 ) , // PL 6 ** 43 ** D43 + _BV( 5 ) , // PL 5 ** 44 ** D44 + _BV( 4 ) , // PL 4 ** 45 ** D45 + _BV( 3 ) , // PL 3 ** 46 ** D46 + _BV( 2 ) , // PL 2 ** 47 ** D47 + _BV( 1 ) , // PL 1 ** 48 ** D48 + _BV( 0 ) , // PL 0 ** 49 ** D49 + _BV( 3 ) , // PB 3 ** 50 ** SPI_MISO + _BV( 2 ) , // PB 2 ** 51 ** SPI_MOSI + _BV( 1 ) , // PB 1 ** 52 ** SPI_SCK + _BV( 0 ) , // PB 0 ** 53 ** SPI_SS + _BV( 0 ) , // PF 0 ** 54 ** A0 + _BV( 1 ) , // PF 1 ** 55 ** A1 + _BV( 2 ) , // PF 2 ** 56 ** A2 + _BV( 3 ) , // PF 3 ** 57 ** A3 + _BV( 4 ) , // PF 4 ** 58 ** A4 + _BV( 5 ) , // PF 5 ** 59 ** A5 + _BV( 6 ) , // PF 6 ** 60 ** A6 + _BV( 7 ) , // PF 7 ** 61 ** A7 + _BV( 0 ) , // PK 0 ** 62 ** A8 + _BV( 1 ) , // PK 1 ** 63 ** A9 + _BV( 2 ) , // PK 2 ** 64 ** A10 + _BV( 3 ) , // PK 3 ** 65 ** A11 + _BV( 4 ) , // PK 4 ** 66 ** A12 + _BV( 5 ) , // PK 5 ** 67 ** A13 + _BV( 6 ) , // PK 6 ** 68 ** A14 + _BV( 7 ) , // PK 7 ** 69 ** A15 +}; + +const uint8_t PROGMEM digital_pin_to_timer_PGM[] = { + // TIMERS + // ------------------------------------------- + NOT_ON_TIMER , // PE 0 ** 0 ** USART0_RX + NOT_ON_TIMER , // PE 1 ** 1 ** USART0_TX + TIMER3B , // PE 4 ** 2 ** PWM2 + TIMER3C , // PE 5 ** 3 ** PWM3 + TIMER0B , // PG 5 ** 4 ** PWM4 + TIMER3A , // PE 3 ** 5 ** PWM5 + TIMER4A , // PH 3 ** 6 ** PWM6 + TIMER4B , // PH 4 ** 7 ** PWM7 + TIMER4C , // PH 5 ** 8 ** PWM8 + TIMER2B , // PH 6 ** 9 ** PWM9 + TIMER2A , // PB 4 ** 10 ** PWM10 + TIMER1A , // PB 5 ** 11 ** PWM11 + TIMER1B , // PB 6 ** 12 ** PWM12 + TIMER0A , // PB 7 ** 13 ** PWM13 + NOT_ON_TIMER , // PJ 1 ** 14 ** USART3_TX + NOT_ON_TIMER , // PJ 0 ** 15 ** USART3_RX + NOT_ON_TIMER , // PH 1 ** 16 ** USART2_TX + NOT_ON_TIMER , // PH 0 ** 17 ** USART2_RX + NOT_ON_TIMER , // PD 3 ** 18 ** USART1_TX + NOT_ON_TIMER , // PD 2 ** 19 ** USART1_RX + NOT_ON_TIMER , // PD 1 ** 20 ** I2C_SDA + NOT_ON_TIMER , // PD 0 ** 21 ** I2C_SCL + NOT_ON_TIMER , // PA 0 ** 22 ** D22 + NOT_ON_TIMER , // PA 1 ** 23 ** D23 + NOT_ON_TIMER , // PA 2 ** 24 ** D24 + NOT_ON_TIMER , // PA 3 ** 25 ** D25 + NOT_ON_TIMER , // PA 4 ** 26 ** D26 + NOT_ON_TIMER , // PA 5 ** 27 ** D27 + NOT_ON_TIMER , // PA 6 ** 28 ** D28 + NOT_ON_TIMER , // PA 7 ** 29 ** D29 + NOT_ON_TIMER , // PC 7 ** 30 ** D30 + NOT_ON_TIMER , // PC 6 ** 31 ** D31 + NOT_ON_TIMER , // PC 5 ** 32 ** D32 + NOT_ON_TIMER , // PC 4 ** 33 ** D33 + NOT_ON_TIMER , // PC 3 ** 34 ** D34 + NOT_ON_TIMER , // PC 2 ** 35 ** D35 + NOT_ON_TIMER , // PC 1 ** 36 ** D36 + NOT_ON_TIMER , // PC 0 ** 37 ** D37 + NOT_ON_TIMER , // PD 7 ** 38 ** D38 + NOT_ON_TIMER , // PG 2 ** 39 ** D39 + NOT_ON_TIMER , // PG 1 ** 40 ** D40 + NOT_ON_TIMER , // PG 0 ** 41 ** D41 + NOT_ON_TIMER , // PL 7 ** 42 ** D42 + NOT_ON_TIMER , // PL 6 ** 43 ** D43 + TIMER5C , // PL 5 ** 44 ** D44 + TIMER5B , // PL 4 ** 45 ** D45 + TIMER5A , // PL 3 ** 46 ** D46 + NOT_ON_TIMER , // PL 2 ** 47 ** D47 + NOT_ON_TIMER , // PL 1 ** 48 ** D48 + NOT_ON_TIMER , // PL 0 ** 49 ** D49 + NOT_ON_TIMER , // PB 3 ** 50 ** SPI_MISO + NOT_ON_TIMER , // PB 2 ** 51 ** SPI_MOSI + NOT_ON_TIMER , // PB 1 ** 52 ** SPI_SCK + NOT_ON_TIMER , // PB 0 ** 53 ** SPI_SS + NOT_ON_TIMER , // PF 0 ** 54 ** A0 + NOT_ON_TIMER , // PF 1 ** 55 ** A1 + NOT_ON_TIMER , // PF 2 ** 56 ** A2 + NOT_ON_TIMER , // PF 3 ** 57 ** A3 + NOT_ON_TIMER , // PF 4 ** 58 ** A4 + NOT_ON_TIMER , // PF 5 ** 59 ** A5 + NOT_ON_TIMER , // PF 6 ** 60 ** A6 + NOT_ON_TIMER , // PF 7 ** 61 ** A7 + NOT_ON_TIMER , // PK 0 ** 62 ** A8 + NOT_ON_TIMER , // PK 1 ** 63 ** A9 + NOT_ON_TIMER , // PK 2 ** 64 ** A10 + NOT_ON_TIMER , // PK 3 ** 65 ** A11 + NOT_ON_TIMER , // PK 4 ** 66 ** A12 + NOT_ON_TIMER , // PK 5 ** 67 ** A13 + NOT_ON_TIMER , // PK 6 ** 68 ** A14 + NOT_ON_TIMER , // PK 7 ** 69 ** A15 +}; + +#endif + +// These serial port names are intended to allow libraries and architecture-neutral +// sketches to automatically default to the correct port name for a particular type +// of use. For example, a GPS module would normally connect to SERIAL_PORT_HARDWARE_OPEN, +// the first hardware serial port whose RX/TX pins are not dedicated to another use. +// +// SERIAL_PORT_MONITOR Port which normally prints to the Arduino Serial Monitor +// +// SERIAL_PORT_USBVIRTUAL Port which is USB virtual serial +// +// SERIAL_PORT_LINUXBRIDGE Port which connects to a Linux system via Bridge library +// +// SERIAL_PORT_HARDWARE Hardware serial port, physical RX & TX pins. +// +// SERIAL_PORT_HARDWARE_OPEN Hardware serial ports which are open for use. Their RX & TX +// pins are NOT connected to anything by default. +#define SERIAL_PORT_MONITOR Serial +#define SERIAL_PORT_HARDWARE Serial +#define SERIAL_PORT_HARDWARE1 Serial1 +#define SERIAL_PORT_HARDWARE2 Serial2 +#define SERIAL_PORT_HARDWARE3 Serial3 +#define SERIAL_PORT_HARDWARE_OPEN Serial1 +#define SERIAL_PORT_HARDWARE_OPEN1 Serial2 +#define SERIAL_PORT_HARDWARE_OPEN2 Serial3 + +#endif diff --git a/external/arduino/avr/variants/micro/pins_arduino.h b/external/arduino/avr/variants/micro/pins_arduino.h new file mode 100644 index 000000000..f83ef1f85 --- /dev/null +++ b/external/arduino/avr/variants/micro/pins_arduino.h @@ -0,0 +1,35 @@ +/* + pins_arduino.h - Pin definition functions for Arduino + Part of Arduino - http://www.arduino.cc/ + + Copyright (c) 2007 David A. Mellis + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General + Public License along with this library; if not, write to the + Free Software Foundation, Inc., 59 Temple Place, Suite 330, + Boston, MA 02111-1307 USA +*/ + +#include "../leonardo/pins_arduino.h" + +#undef TXLED0 +#undef TXLED1 +#undef RXLED0 +#undef RXLED1 +#undef TX_RX_LED_INIT + +#define TXLED0 PORTD &= ~(1<<5) +#define TXLED1 PORTD |= (1<<5) +#define RXLED0 PORTB &= ~(1<<0) +#define RXLED1 PORTB |= (1<<0) +#define TX_RX_LED_INIT DDRD |= (1<<5), DDRB |= (1<<0), TXLED0, RXLED0 diff --git a/external/arduino/avr/variants/robot_control/pins_arduino.h b/external/arduino/avr/variants/robot_control/pins_arduino.h new file mode 100644 index 000000000..3e3610351 --- /dev/null +++ b/external/arduino/avr/variants/robot_control/pins_arduino.h @@ -0,0 +1,326 @@ +/* + pins_arduino.h - Pin definition functions for Arduino Robot Control Board + Part of Arduino - http://www.arduino.cc/ + + Copyright (c) 2913 D. Cuartielles, X. Yang (Arduino Verkstad) + Copyright (c) 2012 D. Cuartielles, N. de la Riva, I. Gallego, E. Gallego + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General + Public License along with this library; if not, write to the + Free Software Foundation, Inc., 59 Temple Place, Suite 330, + Boston, MA 02111-1307 USA +*/ + +#ifndef Pins_Arduino_h +#define Pins_Arduino_h + +#include + +#define ARDUINO_MODEL_USB_PID 0x0038 + +#define TX_RX_LED_INIT DDRD |= (1<<5), DDRB |= (1<<0) +#define TXLED0 PORTD |= (1<<5) +#define TXLED1 PORTD &= ~(1<<5) +#define RXLED0 PORTB |= (1<<0) +#define RXLED1 PORTB &= ~(1<<0) + +#define D0 TKD0 +#define D1 TKD1 +#define D2 TKD2 +#define D3 TKD3 +#define D4 TKD4 +#define D5 TKD5 + +#define PIN_SERIAL_RX (0) +#define PIN_SERIAL_TX (1) + +static const uint8_t RX = PIN_SERIAL_RX; +static const uint8_t TX = PIN_SERIAL_TX; + +#define PIN_WIRE_SDA (2) +#define PIN_WIRE_SCL (3) + +static const uint8_t SDA = PIN_WIRE_SDA; +static const uint8_t SCL = PIN_WIRE_SCL; + +// Map SPI port to 'new' pins D14..D17 +#define PIN_SPI_SS (17) +#define PIN_SPI_MOSI (16) +#define PIN_SPI_MISO (14) +#define PIN_SPI_SCK (15) + +static const uint8_t SS = PIN_SPI_SS; +static const uint8_t MOSI = PIN_SPI_MOSI; +static const uint8_t MISO = PIN_SPI_MISO; +static const uint8_t SCK = PIN_SPI_SCK; + +// Mapping of analog pins as digital I/O +// A6-A11 share with digital pins +#define PIN_A0 (18) +#define PIN_A1 (19) +#define PIN_A2 (20) +#define PIN_A3 (21) +#define PIN_A4 (22) +#define PIN_A5 (23) +#define PIN_A6 (24) +#define PIN_A7 (25) +#define PIN_A8 (26) +#define PIN_A9 (27) +#define PIN_A10 (28) +#define PIN_A11 (29) + +static const uint8_t A0 = PIN_A0; +static const uint8_t A1 = PIN_A1; +static const uint8_t A2 = PIN_A2; +static const uint8_t A3 = PIN_A3; +static const uint8_t A4 = PIN_A4; +static const uint8_t A5 = PIN_A5; +static const uint8_t A6 = PIN_A6; // D4 +static const uint8_t A7 = PIN_A7; // D6 +static const uint8_t A8 = PIN_A8; // D8 +static const uint8_t A9 = PIN_A9; // D9 +static const uint8_t A10 = PIN_A10; // D10 +static const uint8_t A11 = PIN_A11; // D12 + +// Specific Mapping for the Control Board +static const uint8_t KEY = 18; // AD0 +static const uint8_t MUX_IN = 24; // ADC8 - A6 +static const uint8_t MUXA = 6; // D5 - TKD4 +static const uint8_t MUXB = 11; // D11 +static const uint8_t MUXC = 12; // D12 - TKD5 +static const uint8_t MUXD = 13; // D13 +static const uint8_t BUZZ = 5; // D5 +static const uint8_t POT = 23; // AD5 +static const uint8_t DC_LCD = 10; // D10 +static const uint8_t LCD_CS = 9; // D9 +static const uint8_t RST_LCD = 7; // D6 +static const uint8_t CARD_CS = 8; // D8 +static const uint8_t TKD0 = 19; // ADC6 - A1 +static const uint8_t TKD1 = 20; // ADC5 - A2 +static const uint8_t TKD2 = 21; // ADC4 - A3 +static const uint8_t TKD3 = 22; // ADC1 - A4 +static const uint8_t TKD4 = 6; // D5 - MUXA +static const uint8_t TKD5 = 12; // D12 - MUXC +static const uint8_t LED1 = 17; // D17 - RX_Led + +// __AVR_ATmega32U4__ has an unusual mapping of pins to channels +extern const uint8_t PROGMEM analog_pin_to_channel_PGM[]; +#define analogPinToChannel(P) ( pgm_read_byte( analog_pin_to_channel_PGM + (P) ) ) + +#define digitalPinToInterrupt(p) ((p) == 0 ? 2 : ((p) == 1 ? 3 : ((p) == 2 ? 1 : ((p) == 3 ? 0 : ((p) == 7 ? 4 : NOT_AN_INTERRUPT))))) + +#ifdef ARDUINO_MAIN + +// On the Arduino board, digital pins are also used +// for the analog output (software PWM). Analog input +// pins are a separate set. + +// ARDUINO LEONARDO / ARDUINO ROBOT CONTROL / ATMEGA 32U4 / FUNCTION / REGISTER +// +// D0 RX PD2 RX RXD1/INT2 +// D1 TX PD3 TX TXD1/INT3 +// D2 SDA PD1 SDA SDA/INT1 +// D3# SCL PD0 PWM8/SCL OC0B/SCL/INT0 +// D4 MUX_IN A6 PD4 ADC8 +// D5# BUZZ PC6 ??? OC3A/#OC4A +// D6# MUXA/TKD4 A7 PD7 FastPWM #OC4D/ADC10 +// D7 RST_LCD PE6 INT6/AIN0 +// +// D8 CARD_CS A8 PB4 ADC11/PCINT4 +// D9# LCD_CS A9 PB5 PWM16 OC1A/#OC4B/ADC12/PCINT5 +// D10# DC_LCD A10 PB6 PWM16 OC1B/0c4B/ADC13/PCINT6 +// D11# MUXB PB7 PWM8/16 0C0A/OC1C/#RTS/PCINT7 +// D12 MUXC/TKD5 A11 PD6 T1/#OC4D/ADC9 +// D13# MUXD PC7 PWM10 CLK0/OC4A +// +// A0 KEY D18 PF7 ADC7 +// A1 TKD0 D19 PF6 ADC6 +// A2 TKD1 D20 PF5 ADC5 +// A3 TKD2 D21 PF4 ADC4 +// A4 TKD3 D22 PF1 ADC1 +// A5 POT D23 PF0 ADC0 +// +// MISO MISO D14 PB3 MISO,PCINT3 +// SCK SCK D15 PB1 SCK,PCINT1 +// MOSI MOSI D16 PB2 MOSI,PCINT2 +// SS RX_LED D17 PB0 RXLED,SS/PCINT0 +// +// TXLED TX_LED PD5 +// HWB PE2 HWB + +// these arrays map port names (e.g. port B) to the +// appropriate addresses for various functions (e.g. reading +// and writing) +const uint16_t PROGMEM port_to_mode_PGM[] = { + NOT_A_PORT, + NOT_A_PORT, + (uint16_t) &DDRB, + (uint16_t) &DDRC, + (uint16_t) &DDRD, + (uint16_t) &DDRE, + (uint16_t) &DDRF, +}; + +const uint16_t PROGMEM port_to_output_PGM[] = { + NOT_A_PORT, + NOT_A_PORT, + (uint16_t) &PORTB, + (uint16_t) &PORTC, + (uint16_t) &PORTD, + (uint16_t) &PORTE, + (uint16_t) &PORTF, +}; + +const uint16_t PROGMEM port_to_input_PGM[] = { + NOT_A_PORT, + NOT_A_PORT, + (uint16_t) &PINB, + (uint16_t) &PINC, + (uint16_t) &PIND, + (uint16_t) &PINE, + (uint16_t) &PINF, +}; + +const uint8_t PROGMEM digital_pin_to_port_PGM[30] = { + PD, // D0 - PD2 + PD, // D1 - PD3 + PD, // D2 - PD1 + PD, // D3 - PD0 + PD, // D4 - PD4 + PC, // D5 - PC6 + PD, // D6 - PD7 + PE, // D7 - PE6 + + PB, // D8 - PB4 + PB, // D9 - PB5 + PB, // D10 - PB6 + PB, // D11 - PB7 + PD, // D12 - PD6 + PC, // D13 - PC7 + + PB, // D14 - MISO - PB3 + PB, // D15 - SCK - PB1 + PB, // D16 - MOSI - PB2 + PB, // D17 - SS - PB0 + + PF, // D18 - A0 - PF7 + PF, // D19 - A1 - PF6 + PF, // D20 - A2 - PF5 + PF, // D21 - A3 - PF4 + PF, // D22 - A4 - PF1 + PF, // D23 - A5 - PF0 + + PD, // D24 / D4 - A6 - PD4 + PD, // D25 / D6 - A7 - PD7 + PB, // D26 / D8 - A8 - PB4 + PB, // D27 / D9 - A9 - PB5 + PB, // D28 / D10 - A10 - PB6 + PD, // D29 / D12 - A11 - PD6 +}; + +const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[30] = { + _BV(2), // D0 - PD2 + _BV(3), // D1 - PD3 + _BV(1), // D2 - PD1 + _BV(0), // D3 - PD0 + _BV(4), // D4 - PD4 + _BV(6), // D5 - PC6 + _BV(7), // D6 - PD7 + _BV(6), // D7 - PE6 + + _BV(4), // D8 - PB4 + _BV(5), // D9 - PB5 + _BV(6), // D10 - PB6 + _BV(7), // D11 - PB7 + _BV(6), // D12 - PD6 + _BV(7), // D13 - PC7 + + _BV(3), // D14 - MISO - PB3 + _BV(1), // D15 - SCK - PB1 + _BV(2), // D16 - MOSI - PB2 + _BV(0), // D17 - SS - PB0 + + _BV(7), // D18 - A0 - PF7 + _BV(6), // D19 - A1 - PF6 + _BV(5), // D20 - A2 - PF5 + _BV(4), // D21 - A3 - PF4 + _BV(1), // D22 - A4 - PF1 + _BV(0), // D23 - A5 - PF0 + + _BV(4), // D24 / D4 - A6 - PD4 + _BV(7), // D25 / D6 - A7 - PD7 + _BV(4), // D26 / D8 - A8 - PB4 + _BV(5), // D27 / D9 - A9 - PB5 + _BV(6), // D28 / D10 - A10 - PB6 + _BV(6), // D29 / D12 - A11 - PD6 +}; + +const uint8_t PROGMEM digital_pin_to_timer_PGM[18] = { + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + TIMER0B, /* 3 */ + NOT_ON_TIMER, + TIMER3A, /* 5 */ + TIMER4D, /* 6 */ + NOT_ON_TIMER, + + NOT_ON_TIMER, + TIMER1A, /* 9 */ + TIMER1B, /* 10 */ + TIMER0A, /* 11 */ + + NOT_ON_TIMER, + TIMER4A, /* 13 */ + + NOT_ON_TIMER, + NOT_ON_TIMER, +}; + +const uint8_t PROGMEM analog_pin_to_channel_PGM[12] = { + 7, // A0 PF7 ADC7 + 6, // A1 PF6 ADC6 + 5, // A2 PF5 ADC5 + 4, // A3 PF4 ADC4 + 1, // A4 PF1 ADC1 + 0, // A5 PF0 ADC0 + 8, // A6 D4 PD4 ADC8 + 10, // A7 D6 PD7 ADC10 + 11, // A8 D8 PB4 ADC11 + 12, // A9 D9 PB5 ADC12 + 13, // A10 D10 PB6 ADC13 + 9 // A11 D12 PD6 ADC9 +}; + +#endif /* ARDUINO_MAIN */ + +// These serial port names are intended to allow libraries and architecture-neutral +// sketches to automatically default to the correct port name for a particular type +// of use. For example, a GPS module would normally connect to SERIAL_PORT_HARDWARE_OPEN, +// the first hardware serial port whose RX/TX pins are not dedicated to another use. +// +// SERIAL_PORT_MONITOR Port which normally prints to the Arduino Serial Monitor +// +// SERIAL_PORT_USBVIRTUAL Port which is USB virtual serial +// +// SERIAL_PORT_LINUXBRIDGE Port which connects to a Linux system via Bridge library +// +// SERIAL_PORT_HARDWARE Hardware serial port, physical RX & TX pins. +// +// SERIAL_PORT_HARDWARE_OPEN Hardware serial ports which are open for use. Their RX & TX +// pins are NOT connected to anything by default. +#define SERIAL_PORT_MONITOR Serial +#define SERIAL_PORT_USBVIRTUAL Serial +#define SERIAL_PORT_HARDWARE Serial1 + +#endif /* Pins_Arduino_h */ diff --git a/external/arduino/avr/variants/robot_motor/pins_arduino.h b/external/arduino/avr/variants/robot_motor/pins_arduino.h new file mode 100644 index 000000000..2686b6955 --- /dev/null +++ b/external/arduino/avr/variants/robot_motor/pins_arduino.h @@ -0,0 +1,321 @@ +/* + pins_arduino.h - Pin definition functions for Arduino Robot Control Board + Part of Arduino - http://www.arduino.cc/ + + Copyright (c) 2913 D. Cuartielles, X. Yang (Arduino Verkstad) + Copyright (c) 2012 D. Cuartielles, N. de la Riva, I. Gallego, E. Gallego + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General + Public License along with this library; if not, write to the + Free Software Foundation, Inc., 59 Temple Place, Suite 330, + Boston, MA 02111-1307 USA +*/ + +#ifndef Pins_Arduino_h +#define Pins_Arduino_h + +#include + +#define ARDUINO_MODEL_USB_PID 0x0039 + +#define TX_RX_LED_INIT DDRD |= (1<<5), DDRB |= (1<<0) +#define TXLED0 PORTD |= (1<<5) +#define TXLED1 PORTD &= ~(1<<5) +#define RXLED0 PORTB |= (1<<0) +#define RXLED1 PORTB &= ~(1<<0) + +#define D10 TK1 +#define D9 TK2 +#define D8 TK4 +#define D7 TK3 + +#define PIN_SERIAL_RX (0) +#define PIN_SERIAL_TX (1) + +static const uint8_t RX = PIN_SERIAL_RX; +static const uint8_t TX = PIN_SERIAL_TX; + +#define PIN_WIRE_SDA (2) +#define PIN_WIRE_SCL (3) + +static const uint8_t SDA = PIN_WIRE_SDA; +static const uint8_t SCL = PIN_WIRE_SCL; + +// Map SPI port to 'new' pins D14..D17 +#define PIN_SPI_SS (17) +#define PIN_SPI_MOSI (16) +#define PIN_SPI_MISO (14) +#define PIN_SPI_SCK (15) + +static const uint8_t SS = PIN_SPI_SS; +static const uint8_t MOSI = PIN_SPI_MOSI; +static const uint8_t MISO = PIN_SPI_MISO; +static const uint8_t SCK = PIN_SPI_SCK; + +// Mapping of analog pins as digital I/O +// A6-A11 share with digital pins +#define PIN_A0 (18) +#define PIN_A1 (19) +#define PIN_A2 (20) +#define PIN_A3 (21) +#define PIN_A4 (22) +#define PIN_A5 (23) +#define PIN_A6 (24) +#define PIN_A7 (25) +#define PIN_A8 (26) +#define PIN_A9 (27) +#define PIN_A10 (28) +#define PIN_A11 (29) + +static const uint8_t A0 = PIN_A0; +static const uint8_t A1 = PIN_A1; +static const uint8_t A2 = PIN_A2; +static const uint8_t A3 = PIN_A3; +static const uint8_t A4 = PIN_A4; +static const uint8_t A5 = PIN_A5; +static const uint8_t A6 = PIN_A6; // D4 +static const uint8_t A7 = PIN_A7; // D6 +static const uint8_t A8 = PIN_A8; // D8 +static const uint8_t A9 = PIN_A9; // D9 +static const uint8_t A10 = PIN_A10; // D10 +static const uint8_t A11 = PIN_A11; // D12 + +// Specific Mapping for the Motor Board +static const uint8_t MUX_IN = 20; // A2 +static const uint8_t MUXA = 7; // D7 +static const uint8_t MUXB = 8; // D8 +static const uint8_t MUXC = 11; // D11 +static const uint8_t MUXI = 13; // D13 +static const uint8_t TRIM = 21; // A3 +static const uint8_t SENSE_A = 22; // A4 +static const uint8_t SENSE_B = 23; // A5 +static const uint8_t IN_A1 = 6; // D6 - A7 +static const uint8_t IN_A2 = 5; // D5 +static const uint8_t IN_B1 = 10; // D10 +static const uint8_t IN_B2 = 9; // D9 +static const uint8_t TK1 = 18; // A0 +static const uint8_t TK2 = 19; // A1 +static const uint8_t TK3 = 4; // A6 +static const uint8_t TK4 = 12; // A11 + +// __AVR_ATmega32U4__ has an unusual mapping of pins to channels +extern const uint8_t PROGMEM analog_pin_to_channel_PGM[]; +#define analogPinToChannel(P) ( pgm_read_byte( analog_pin_to_channel_PGM + (P) ) ) + +#define digitalPinToInterrupt(p) ((p) == 0 ? 2 : ((p) == 1 ? 3 : ((p) == 2 ? 1 : ((p) == 3 ? 0 : ((p) == 7 ? 4 : NOT_AN_INTERRUPT))))) + +#ifdef ARDUINO_MAIN + +// On the Arduino board, digital pins are also used +// for the analog output (software PWM). Analog input +// pins are a separate set. + +// ARDUINO LEONARDO / ARDUINO ROBOT CONTROL / ATMEGA 32U4 / FUNCTION / REGISTER +// +// D0 RX PD2 RX RXD1/INT2 +// D1 TX PD3 TX TXD1/INT3 +// D2 SDA PD1 SDA SDA/INT1 +// D3# SCL PD0 PWM8/SCL OC0B/SCL/INT0 +// D4 TK3 A6 PD4 ADC8 +// D5# INA2 PC6 ??? OC3A/#OC4A +// D6# INA1 A7 PD7 FastPWM #OC4D/ADC10 +// D7 MUXA PE6 INT6/AIN0 +// +// D8 MUXB A8 PB4 ADC11/PCINT4 +// D9# INB2 A9 PB5 PWM16 OC1A/#OC4B/ADC12/PCINT5 +// D10# INB1 A10 PB6 PWM16 OC1B/0c4B/ADC13/PCINT6 +// D11# MUXC PB7 PWM8/16 0C0A/OC1C/#RTS/PCINT7 +// D12 TK4 A11 PD6 T1/#OC4D/ADC9 +// D13# MUXI PC7 PWM10 CLK0/OC4A +// +// A0 TK1 D18 PF7 ADC7 +// A1 TK2 D19 PF6 ADC6 +// A2 MUX_IN D20 PF5 ADC5 +// A3 TRIM D21 PF4 ADC4 +// A4 SENSE_A D22 PF1 ADC1 +// A5 SENSE_B D23 PF0 ADC0 +// +// MISO MISO D14 PB3 MISO,PCINT3 +// SCK SCK D15 PB1 SCK,PCINT1 +// MOSI MOSI D16 PB2 MOSI,PCINT2 +// SS RX_LED D17 PB0 RXLED,SS/PCINT0 +// +// TXLED TX_LED PD5 +// HWB PE2 HWB + +// these arrays map port names (e.g. port B) to the +// appropriate addresses for various functions (e.g. reading +// and writing) +const uint16_t PROGMEM port_to_mode_PGM[] = { + NOT_A_PORT, + NOT_A_PORT, + (uint16_t) &DDRB, + (uint16_t) &DDRC, + (uint16_t) &DDRD, + (uint16_t) &DDRE, + (uint16_t) &DDRF, +}; + +const uint16_t PROGMEM port_to_output_PGM[] = { + NOT_A_PORT, + NOT_A_PORT, + (uint16_t) &PORTB, + (uint16_t) &PORTC, + (uint16_t) &PORTD, + (uint16_t) &PORTE, + (uint16_t) &PORTF, +}; + +const uint16_t PROGMEM port_to_input_PGM[] = { + NOT_A_PORT, + NOT_A_PORT, + (uint16_t) &PINB, + (uint16_t) &PINC, + (uint16_t) &PIND, + (uint16_t) &PINE, + (uint16_t) &PINF, +}; + +const uint8_t PROGMEM digital_pin_to_port_PGM[30] = { + PD, // D0 - PD2 + PD, // D1 - PD3 + PD, // D2 - PD1 + PD, // D3 - PD0 + PD, // D4 - PD4 + PC, // D5 - PC6 + PD, // D6 - PD7 + PE, // D7 - PE6 + + PB, // D8 - PB4 + PB, // D9 - PB5 + PB, // D10 - PB6 + PB, // D11 - PB7 + PD, // D12 - PD6 + PC, // D13 - PC7 + + PB, // D14 - MISO - PB3 + PB, // D15 - SCK - PB1 + PB, // D16 - MOSI - PB2 + PB, // D17 - SS - PB0 + + PF, // D18 - A0 - PF7 + PF, // D19 - A1 - PF6 + PF, // D20 - A2 - PF5 + PF, // D21 - A3 - PF4 + PF, // D22 - A4 - PF1 + PF, // D23 - A5 - PF0 + + PD, // D24 / D4 - A6 - PD4 + PD, // D25 / D6 - A7 - PD7 + PB, // D26 / D8 - A8 - PB4 + PB, // D27 / D9 - A9 - PB5 + PB, // D28 / D10 - A10 - PB6 + PD, // D29 / D12 - A11 - PD6 +}; + +const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[30] = { + _BV(2), // D0 - PD2 + _BV(3), // D1 - PD3 + _BV(1), // D2 - PD1 + _BV(0), // D3 - PD0 + _BV(4), // D4 - PD4 + _BV(6), // D5 - PC6 + _BV(7), // D6 - PD7 + _BV(6), // D7 - PE6 + + _BV(4), // D8 - PB4 + _BV(5), // D9 - PB5 + _BV(6), // D10 - PB6 + _BV(7), // D11 - PB7 + _BV(6), // D12 - PD6 + _BV(7), // D13 - PC7 + + _BV(3), // D14 - MISO - PB3 + _BV(1), // D15 - SCK - PB1 + _BV(2), // D16 - MOSI - PB2 + _BV(0), // D17 - SS - PB0 + + _BV(7), // D18 - A0 - PF7 + _BV(6), // D19 - A1 - PF6 + _BV(5), // D20 - A2 - PF5 + _BV(4), // D21 - A3 - PF4 + _BV(1), // D22 - A4 - PF1 + _BV(0), // D23 - A5 - PF0 + + _BV(4), // D24 / D4 - A6 - PD4 + _BV(7), // D25 / D6 - A7 - PD7 + _BV(4), // D26 / D8 - A8 - PB4 + _BV(5), // D27 / D9 - A9 - PB5 + _BV(6), // D28 / D10 - A10 - PB6 + _BV(6), // D29 / D12 - A11 - PD6 +}; + +const uint8_t PROGMEM digital_pin_to_timer_PGM[18] = { + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + TIMER0B, /* 3 */ + NOT_ON_TIMER, + TIMER3A, /* 5 */ + TIMER4D, /* 6 */ + NOT_ON_TIMER, + + NOT_ON_TIMER, + TIMER1A, /* 9 */ + TIMER1B, /* 10 */ + TIMER0A, /* 11 */ + + NOT_ON_TIMER, + TIMER4A, /* 13 */ + + NOT_ON_TIMER, + NOT_ON_TIMER, +}; + +const uint8_t PROGMEM analog_pin_to_channel_PGM[12] = { + 7, // A0 PF7 ADC7 + 6, // A1 PF6 ADC6 + 5, // A2 PF5 ADC5 + 4, // A3 PF4 ADC4 + 1, // A4 PF1 ADC1 + 0, // A5 PF0 ADC0 + 8, // A6 D4 PD4 ADC8 + 10, // A7 D6 PD7 ADC10 + 11, // A8 D8 PB4 ADC11 + 12, // A9 D9 PB5 ADC12 + 13, // A10 D10 PB6 ADC13 + 9 // A11 D12 PD6 ADC9 +}; + +#endif /* ARDUINO_MAIN */ + +// These serial port names are intended to allow libraries and architecture-neutral +// sketches to automatically default to the correct port name for a particular type +// of use. For example, a GPS module would normally connect to SERIAL_PORT_HARDWARE_OPEN, +// the first hardware serial port whose RX/TX pins are not dedicated to another use. +// +// SERIAL_PORT_MONITOR Port which normally prints to the Arduino Serial Monitor +// +// SERIAL_PORT_USBVIRTUAL Port which is USB virtual serial +// +// SERIAL_PORT_LINUXBRIDGE Port which connects to a Linux system via Bridge library +// +// SERIAL_PORT_HARDWARE Hardware serial port, physical RX & TX pins. +// +// SERIAL_PORT_HARDWARE_OPEN Hardware serial ports which are open for use. Their RX & TX +// pins are NOT connected to anything by default. +#define SERIAL_PORT_MONITOR Serial +#define SERIAL_PORT_USBVIRTUAL Serial +#define SERIAL_PORT_HARDWARE Serial1 + +#endif /* Pins_Arduino_h */ diff --git a/external/arduino/avr/variants/standard/pins_arduino.h b/external/arduino/avr/variants/standard/pins_arduino.h new file mode 100644 index 000000000..2ea019054 --- /dev/null +++ b/external/arduino/avr/variants/standard/pins_arduino.h @@ -0,0 +1,254 @@ +/* + pins_arduino.h - Pin definition functions for Arduino + Part of Arduino - http://www.arduino.cc/ + + Copyright (c) 2007 David A. Mellis + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General + Public License along with this library; if not, write to the + Free Software Foundation, Inc., 59 Temple Place, Suite 330, + Boston, MA 02111-1307 USA +*/ + +#ifndef Pins_Arduino_h +#define Pins_Arduino_h + +#include + +#define NUM_DIGITAL_PINS 20 +#define NUM_ANALOG_INPUTS 6 +#define analogInputToDigitalPin(p) ((p < 6) ? (p) + 14 : -1) + +#if defined(__AVR_ATmega8__) +#define digitalPinHasPWM(p) ((p) == 9 || (p) == 10 || (p) == 11) +#else +#define digitalPinHasPWM(p) ((p) == 3 || (p) == 5 || (p) == 6 || (p) == 9 || (p) == 10 || (p) == 11) +#endif + +#define PIN_SPI_SS (10) +#define PIN_SPI_MOSI (11) +#define PIN_SPI_MISO (12) +#define PIN_SPI_SCK (13) + +static const uint8_t SS = PIN_SPI_SS; +static const uint8_t MOSI = PIN_SPI_MOSI; +static const uint8_t MISO = PIN_SPI_MISO; +static const uint8_t SCK = PIN_SPI_SCK; + +#define PIN_WIRE_SDA (18) +#define PIN_WIRE_SCL (19) + +static const uint8_t SDA = PIN_WIRE_SDA; +static const uint8_t SCL = PIN_WIRE_SCL; + +#define LED_BUILTIN 13 + +#define PIN_A0 (14) +#define PIN_A1 (15) +#define PIN_A2 (16) +#define PIN_A3 (17) +#define PIN_A4 (18) +#define PIN_A5 (19) +#define PIN_A6 (20) +#define PIN_A7 (21) + +static const uint8_t A0 = PIN_A0; +static const uint8_t A1 = PIN_A1; +static const uint8_t A2 = PIN_A2; +static const uint8_t A3 = PIN_A3; +static const uint8_t A4 = PIN_A4; +static const uint8_t A5 = PIN_A5; +static const uint8_t A6 = PIN_A6; +static const uint8_t A7 = PIN_A7; + +#define digitalPinToPCICR(p) (((p) >= 0 && (p) <= 21) ? (&PCICR) : ((uint8_t *)0)) +#define digitalPinToPCICRbit(p) (((p) <= 7) ? 2 : (((p) <= 13) ? 0 : 1)) +#define digitalPinToPCMSK(p) (((p) <= 7) ? (&PCMSK2) : (((p) <= 13) ? (&PCMSK0) : (((p) <= 21) ? (&PCMSK1) : ((uint8_t *)0)))) +#define digitalPinToPCMSKbit(p) (((p) <= 7) ? (p) : (((p) <= 13) ? ((p) - 8) : ((p) - 14))) + +#define digitalPinToInterrupt(p) ((p) == 2 ? 0 : ((p) == 3 ? 1 : NOT_AN_INTERRUPT)) + +#ifdef ARDUINO_MAIN + +// On the Arduino board, digital pins are also used +// for the analog output (software PWM). Analog input +// pins are a separate set. + +// ATMEL ATMEGA8 & 168 / ARDUINO +// +// +-\/-+ +// PC6 1| |28 PC5 (AI 5) +// (D 0) PD0 2| |27 PC4 (AI 4) +// (D 1) PD1 3| |26 PC3 (AI 3) +// (D 2) PD2 4| |25 PC2 (AI 2) +// PWM+ (D 3) PD3 5| |24 PC1 (AI 1) +// (D 4) PD4 6| |23 PC0 (AI 0) +// VCC 7| |22 GND +// GND 8| |21 AREF +// PB6 9| |20 AVCC +// PB7 10| |19 PB5 (D 13) +// PWM+ (D 5) PD5 11| |18 PB4 (D 12) +// PWM+ (D 6) PD6 12| |17 PB3 (D 11) PWM +// (D 7) PD7 13| |16 PB2 (D 10) PWM +// (D 8) PB0 14| |15 PB1 (D 9) PWM +// +----+ +// +// (PWM+ indicates the additional PWM pins on the ATmega168.) + +// ATMEL ATMEGA1280 / ARDUINO +// +// 0-7 PE0-PE7 works +// 8-13 PB0-PB5 works +// 14-21 PA0-PA7 works +// 22-29 PH0-PH7 works +// 30-35 PG5-PG0 works +// 36-43 PC7-PC0 works +// 44-51 PJ7-PJ0 works +// 52-59 PL7-PL0 works +// 60-67 PD7-PD0 works +// A0-A7 PF0-PF7 +// A8-A15 PK0-PK7 + + +// these arrays map port names (e.g. port B) to the +// appropriate addresses for various functions (e.g. reading +// and writing) +const uint16_t PROGMEM port_to_mode_PGM[] = { + NOT_A_PORT, + NOT_A_PORT, + (uint16_t) &DDRB, + (uint16_t) &DDRC, + (uint16_t) &DDRD, +}; + +const uint16_t PROGMEM port_to_output_PGM[] = { + NOT_A_PORT, + NOT_A_PORT, + (uint16_t) &PORTB, + (uint16_t) &PORTC, + (uint16_t) &PORTD, +}; + +const uint16_t PROGMEM port_to_input_PGM[] = { + NOT_A_PORT, + NOT_A_PORT, + (uint16_t) &PINB, + (uint16_t) &PINC, + (uint16_t) &PIND, +}; + +const uint8_t PROGMEM digital_pin_to_port_PGM[] = { + PD, /* 0 */ + PD, + PD, + PD, + PD, + PD, + PD, + PD, + PB, /* 8 */ + PB, + PB, + PB, + PB, + PB, + PC, /* 14 */ + PC, + PC, + PC, + PC, + PC, +}; + +const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[] = { + _BV(0), /* 0, port D */ + _BV(1), + _BV(2), + _BV(3), + _BV(4), + _BV(5), + _BV(6), + _BV(7), + _BV(0), /* 8, port B */ + _BV(1), + _BV(2), + _BV(3), + _BV(4), + _BV(5), + _BV(0), /* 14, port C */ + _BV(1), + _BV(2), + _BV(3), + _BV(4), + _BV(5), +}; + +const uint8_t PROGMEM digital_pin_to_timer_PGM[] = { + NOT_ON_TIMER, /* 0 - port D */ + NOT_ON_TIMER, + NOT_ON_TIMER, + // on the ATmega168, digital pin 3 has hardware pwm +#if defined(__AVR_ATmega8__) + NOT_ON_TIMER, +#else + TIMER2B, +#endif + NOT_ON_TIMER, + // on the ATmega168, digital pins 5 and 6 have hardware pwm +#if defined(__AVR_ATmega8__) + NOT_ON_TIMER, + NOT_ON_TIMER, +#else + TIMER0B, + TIMER0A, +#endif + NOT_ON_TIMER, + NOT_ON_TIMER, /* 8 - port B */ + TIMER1A, + TIMER1B, +#if defined(__AVR_ATmega8__) + TIMER2, +#else + TIMER2A, +#endif + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, /* 14 - port C */ + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, +}; + +#endif + +// These serial port names are intended to allow libraries and architecture-neutral +// sketches to automatically default to the correct port name for a particular type +// of use. For example, a GPS module would normally connect to SERIAL_PORT_HARDWARE_OPEN, +// the first hardware serial port whose RX/TX pins are not dedicated to another use. +// +// SERIAL_PORT_MONITOR Port which normally prints to the Arduino Serial Monitor +// +// SERIAL_PORT_USBVIRTUAL Port which is USB virtual serial +// +// SERIAL_PORT_LINUXBRIDGE Port which connects to a Linux system via Bridge library +// +// SERIAL_PORT_HARDWARE Hardware serial port, physical RX & TX pins. +// +// SERIAL_PORT_HARDWARE_OPEN Hardware serial ports which are open for use. Their RX & TX +// pins are NOT connected to anything by default. +#define SERIAL_PORT_MONITOR Serial +#define SERIAL_PORT_HARDWARE Serial + +#endif diff --git a/external/arduino/avr/variants/yun/pins_arduino.h b/external/arduino/avr/variants/yun/pins_arduino.h new file mode 100644 index 000000000..7fabb7fac --- /dev/null +++ b/external/arduino/avr/variants/yun/pins_arduino.h @@ -0,0 +1,44 @@ +/* + pins_arduino.h - Pin definition functions for Arduino + Part of Arduino - http://www.arduino.cc/ + + Copyright (c) 2013 Arduino LLC + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General + Public License along with this library; if not, write to the + Free Software Foundation, Inc., 59 Temple Place, Suite 330, + Boston, MA 02111-1307 USA +*/ + +#include "../leonardo/pins_arduino.h" + +// These serial port names are intended to allow libraries and architecture-neutral +// sketches to automatically default to the correct port name for a particular type +// of use. For example, a GPS module would normally connect to SERIAL_PORT_HARDWARE_OPEN, +// the first hardware serial port whose RX/TX pins are not dedicated to another use. +// +// SERIAL_PORT_MONITOR Port which normally prints to the Arduino Serial Monitor +// +// SERIAL_PORT_USBVIRTUAL Port which is USB virtual serial +// +// SERIAL_PORT_LINUXBRIDGE Port which connects to a Linux system via Bridge library +// +// SERIAL_PORT_HARDWARE Hardware serial port, physical RX & TX pins. +// +// SERIAL_PORT_HARDWARE_OPEN Hardware serial ports which are open for use. Their RX & TX +// pins are NOT connected to anything by default. +#define SERIAL_PORT_LINUXBRIDGE Serial1 + +// defined in the Leonardo variant +#undef SERIAL_PORT_HARDWARE_OPEN + diff --git a/external/arduino/stlarduino/ArduinoSTL.cpp b/external/arduino/stlarduino/ArduinoSTL.cpp new file mode 100644 index 000000000..6d3210702 --- /dev/null +++ b/external/arduino/stlarduino/ArduinoSTL.cpp @@ -0,0 +1,80 @@ +#include +#include + +// +// Configuration Help +// +// If you're using a serial port that's statically declared somewhere in +// Arduino (e.g. Serial1 on Leonardo) +// 1. Set ARDUINOSTL_SERIAL_DEVICE to your device +// 2. Uncomment the ARDUINOSTL_DEFAULT_CIN_COUT flag. +// +// If you're using a sofware serial port: +// 1. Set ARDUINOSTL_DEFAULT_SERIAL to NULL +// 2. Comment out ARDUINOSTL_DEFAULT_CIN_COUT +// Your sketch must contain delarations of cin and cout, and a call to +// ArduinoSTL_serial.connect(). +// + +#define ARDUINOSTL_DEFAULT_SERIAL Serial +#define ARDUINOSTL_DEFAULT_CIN_COUT + +using namespace std; + +#ifdef ARDUINOSTL_DEFAULT_CIN_COUT +// Create cout and cin.. there doesn't seem to be a way +// to control what serial device at runtime. Grr. +namespace std +{ + ohserialstream cout(ARDUINOSTL_DEFAULT_SERIAL); + ihserialstream cin(ARDUINOSTL_DEFAULT_SERIAL); +} +#endif // ARDUINOSTL_DEFAULT_CIN_COUT + +/* + * Implementation of printf() is highly libc dependent. + * + * This implementation is tested on: + * + * ARDUINO_ARCH_AVR (Classic Arduinos) - Working + * TEENSYDUINO (ARM-based Teensy) - cin/cout work, printf doesn't + * ARDUINO_ARCH_* - ARMs are probably the same as above. + */ +#if defined(ARDUINO_ARCH_AVR) + +ArduinoSTL_STDIO ArduinoSTL_Serial(ARDUINOSTL_DEFAULT_SERIAL); + +// arduino_putchar(char, FILE*) +// Output a single character to the serial port. +// returns: 0 on success, 1 on error +// note: +// To maintain serial port compatibility this function +// automatically addes a \r when it sees a \n +// +static int arduino_putchar(char c, FILE* f) { + Stream *uart = ArduinoSTL_Serial.getUart(); + if (c == '\n') uart->write('\r'); + return uart->write(c) == 1? 0 : 1; +} + +// arduino_getchar(FILE*) +// Take a character from the serial port. This function +// must block until a character is ready. +// returns: The character or -1 on a read error +// +static int arduino_getchar(FILE *f) { + Stream *uart = ArduinoSTL_Serial.getUart(); + while (! uart->available()) { /* wait */ } + return uart->read(); +} + +void ArduinoSTL_STDIO::connect(Stream *u) { + if (file != NULL) + free (file); + uart = u; + file = fdevopen(arduino_putchar, arduino_getchar); +} + +#else +#warning "printf() will not be functional on this platform." +#endif diff --git a/external/arduino/stlarduino/ArduinoSTL.h b/external/arduino/stlarduino/ArduinoSTL.h new file mode 100644 index 000000000..3fb432f8c --- /dev/null +++ b/external/arduino/stlarduino/ArduinoSTL.h @@ -0,0 +1,55 @@ +/*--------------------- + * + * ArduinoSTL Core Library + * + * This header has some glue to make STL and Streams work from a sketch. + * + */ + +#ifndef ARDUINOSTL_M_H +#define ARDUINOSTL_M_H + +#include + +// Create cout and cin.. there doesn't seem to be a way +// to control what serial device at runtime. Grr. +namespace std +{ + extern ohserialstream cout; + extern ihserialstream cin; +} + +#if defined(ARDUINO_ARCH_AVR) + +class ArduinoSTL_STDIO { +public: + // Initialize STDIO using a pointer to whatever Serial is. + // Serial.begin() must be called at some point. + ArduinoSTL_STDIO(Stream *u) : file(NULL) { + connect(u); + } + + ArduinoSTL_STDIO(Stream &u) : file(NULL) { + connect(u); + } + + Stream *getUart() { + return uart; + } + + void connect(Stream *u); + + inline void connect(Stream &u) { + connect(static_cast(&u)); + } + +private: + Stream *uart; + FILE *file; +}; + +extern ArduinoSTL_STDIO ArduinoSTL_Serial; + +#endif // ARDUINO_ARCH_AVR + +#endif // ARDUINOSTL_M_H diff --git a/external/arduino/stlarduino/LICENSE b/external/arduino/stlarduino/LICENSE new file mode 100644 index 000000000..5f2dd7fca --- /dev/null +++ b/external/arduino/stlarduino/LICENSE @@ -0,0 +1,505 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +(This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.) + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + {description} + Copyright (C) {year} {fullname} + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 + USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random + Hacker. + + {signature of Ty Coon}, 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + diff --git a/external/arduino/stlarduino/abi/abi.cpp b/external/arduino/stlarduino/abi/abi.cpp new file mode 100644 index 000000000..ecc204822 --- /dev/null +++ b/external/arduino/stlarduino/abi/abi.cpp @@ -0,0 +1,45 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + + This file is part of the uClibc C++ Library. This library is free + software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this library; see the file COPYING. If not, write to the Free + Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, + USA. +*/ + +#include +#include +#include + +/* This file implements a number of the language support features + * needed to deal with the C++ abi, as originally documented in the + * Itanium C++ ABI, though now industry standard + */ + +extern "C" { + +#if defined(ARDUINO) + /* Arduino defines some of these. + * There can be link issues if they're redefined + */ +#else + /* This function is called in the event that a non-overidden + * pure virtual function is called. The compiler should never + * let that happen. We get to choose what to do - we will abort + */ + void __cxa_pure_virtual (){ + abort(); + } + +#endif +} diff --git a/external/arduino/stlarduino/abi/libgcc_eh/Makefile b/external/arduino/stlarduino/abi/libgcc_eh/Makefile new file mode 100644 index 000000000..dede0614d --- /dev/null +++ b/external/arduino/stlarduino/abi/libgcc_eh/Makefile @@ -0,0 +1,4 @@ +top_srcdir=../../../ +top_builddir=../../../ +include $(top_srcdir)Rules.mak +include Makefile.in diff --git a/external/arduino/stlarduino/abi/libgcc_eh/Makefile.in b/external/arduino/stlarduino/abi/libgcc_eh/Makefile.in new file mode 100644 index 000000000..46b0017f5 --- /dev/null +++ b/external/arduino/stlarduino/abi/libgcc_eh/Makefile.in @@ -0,0 +1,24 @@ +LIBGCC_EH_OUT := $(top_builddir)src/abi/libgcc_eh/ + +OBJS = $(call list-archive-members,$(LIBGCC_EH)) +libgcc_eh-$(IMPORT_LIBGCC_EH) := $(OBJS) + +LIBGCC_EH_VAR := $(call variablify,$(LIBGCC_EH)) +LIBGCC_EH_DEP := $(LIBGCC_EH_OUT).$(LIBGCC_EH_VAR).dep + +ifeq ($(filter $(noconfig_targets),$(MAKECMDGOALS)),) +-include $(LIBGCC_EH_DEP) +endif + + +ifneq ($(libgcc_eh-y),) +$(libgcc_eh-y): $(LIBGCC_EH) +endif +$(LIBGCC_EH_DEP): $(LIBGCC_EH) + $(Q)$(RM) $(LIBGCC_EH_OUT).*dep $(LIBGCC_EH_OUT)*.o + $(Q)$(if $(LIBGCC_EH),(cd $(LIBGCC_EH_OUT) && $(AR) x $(LIBGCC_EH))) + $(Q)echo "libgcc_eh-y := \$$(addprefix \$$(LIBGCC_EH_OUT),$(libgcc_eh-y))" > $@ + +CLEAN_src/abi/libgcc_eh: ; +DISTCLEAN_src/abi/libgcc_eh: + $(do_rm) $(addprefix $(LIBGCC_EH_OUT),.*dep *.o) diff --git a/external/arduino/stlarduino/abi/libsupc/Makefile b/external/arduino/stlarduino/abi/libsupc/Makefile new file mode 100644 index 000000000..dede0614d --- /dev/null +++ b/external/arduino/stlarduino/abi/libsupc/Makefile @@ -0,0 +1,4 @@ +top_srcdir=../../../ +top_builddir=../../../ +include $(top_srcdir)Rules.mak +include Makefile.in diff --git a/external/arduino/stlarduino/abi/libsupc/Makefile.in b/external/arduino/stlarduino/abi/libsupc/Makefile.in new file mode 100644 index 000000000..89e0e8a15 --- /dev/null +++ b/external/arduino/stlarduino/abi/libsupc/Makefile.in @@ -0,0 +1,24 @@ +LIBSUPC_OUT := $(top_builddir)src/abi/libsupc/ + +OBJS = $(call list-archive-members,$(LIBSUP)) +OBJS-OMIT = $(filter new_op%.o del_op%.o pure.o new_handler.o eh_alloc.o eh_globals.o,$(OBJS)) +libsupc-$(IMPORT_LIBSUP) := $(filter-out $(OBJS-OMIT),$(OBJS)) + +LIBSUP_VAR := $(call variablify,$(LIBSUP)) +LIBSUP_DEP :=$(LIBSUPC_OUT).$(LIBSUP_VAR).dep + +ifeq ($(filter $(noconfig_targets),$(MAKECMDGOALS)),) +-include $(LIBSUP_DEP) +endif + +ifneq ($(libsupc-y),) +$(libsupc-y): $(LIBSUP) +endif +$(LIBSUP_DEP): $(LIBSUP) $(LIBSUPC_OUT)Makefile.in + $(Q)$(RM) $(LIBSUPC_OUT).*dep $(LIBSUPC_OUT)*.o + $(Q)$(if $(LIBSUP),(cd $(LIBSUPC_OUT) && $(AR) x $(LIBSUP) && $(RM) $(OBJS-OMIT))) + $(Q)echo "libsupc-y := \$$(addprefix \$$(LIBSUPC_OUT),$(libsupc-y))" > $@ + +CLEAN_src/abi/libsupc: ; +DISTCLEAN_src/abi/libsupc: + $(do_rm) $(addprefix $(LIBSUPC_OUT), .*dep *.o) diff --git a/external/arduino/stlarduino/algorithm b/external/arduino/stlarduino/algorithm new file mode 100644 index 000000000..e7206c62a --- /dev/null +++ b/external/arduino/stlarduino/algorithm @@ -0,0 +1,1695 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + This file is part of the uClibc++ Library. + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include +#include +#include +#include + +#ifndef __STD_HEADER_ALGORITHM +#define __STD_HEADER_ALGORITHM 1 + +//Elliminate any previously defined macro +#undef min +#undef max + +#pragma GCC visibility push(default) + +namespace std{ + + // subclause _lib.alg.nonmodifying_, non-modifying sequence operations: + template _UCXXEXPORT + Function for_each(InputIterator first, InputIterator last, Function f) + { + while(first !=last){ + f(*first); + ++first; + } + return f; + } + + + template _UCXXEXPORT + InputIterator find(InputIterator first, InputIterator last, const T& value) + { + while(first !=last && *first != value){ + ++first; + } + return first; + } + + template _UCXXEXPORT + InputIterator find_if(InputIterator first, InputIterator last, Predicate pred) + { + while(first !=last && !pred(*first)){ + ++first; + } + return first; + } + + template _UCXXEXPORT ForwardIterator1 + find_end(ForwardIterator1 first1, ForwardIterator1 last1, + ForwardIterator2 first2, ForwardIterator2 last2) + { + ForwardIterator1 retval = last1; + while(first1 !=last1){ + ForwardIterator1 temp1(first1); + ForwardIterator2 temp2(first2); + while(temp2!=last2 && temp1!= last1){ + if(*temp1 != *temp2){ + break; //Exit while loop + } + ++temp1; + ++temp2; + if(temp2 == last2){ //Have successfully checked the whole sequence + retval = first1; + } + } + } + return retval; + } + + template _UCXXEXPORT + ForwardIterator1 + find_end(ForwardIterator1 first1, ForwardIterator1 last1, + ForwardIterator2 first2, ForwardIterator2 last2, + BinaryPredicate pred) + { + ForwardIterator1 retval = last1; + while(first1 !=last1){ + ForwardIterator1 temp1(first1); + ForwardIterator2 temp2(first2); + while(temp2!=last2 && temp1!= last1){ + if( ! pred(*temp1, *temp2)){ + break; //Exit while loop + } + ++temp1; + ++temp2; + if(temp2 == last2){ //Have successfully checked the whole sequence + retval = first1; + } + } + } + return retval; + } + + template _UCXXEXPORT + ForwardIterator1 + find_first_of(ForwardIterator1 first1, ForwardIterator1 last1, + ForwardIterator2 first2, ForwardIterator2 last2) + { + while(first1 != last1){ + ForwardIterator2 temp2(first2); + while(temp2 != last2 ){ + if(*temp2 == first1){ + return first1; + } + ++temp2; + } + + } + return last1; + } + + template _UCXXEXPORT + ForwardIterator1 + find_first_of(ForwardIterator1 first1, ForwardIterator1 last1, + ForwardIterator2 first2, ForwardIterator2 last2, + BinaryPredicate pred) + { + while(first1 != last1){ + ForwardIterator2 temp2(first2); + while(temp2 != last2 ){ + if(*temp2 == first1){ + return first1; + } + ++temp2; + } + + } + return last1; + } + + template _UCXXEXPORT ForwardIterator + adjacent_find(ForwardIterator first, ForwardIterator last) + { + ForwardIterator temp; + while(first != last){ + temp = first; + ++temp; + if(*temp == *first){ + return first; + } + ++first; + } + return first; + } + + template _UCXXEXPORT + ForwardIterator + adjacent_find(ForwardIterator first, ForwardIterator last, BinaryPredicate pred) + { + ForwardIterator temp; + while(first != last){ + temp = first; + ++temp; + if( pred(*temp, *first)){ + return first; + } + ++first; + } + return first; + } + + template _UCXXEXPORT + typename iterator_traits::difference_type + count(InputIterator first, InputIterator last, const T& value) + { + typename iterator_traits::difference_type i = 0; + while(first!=last){ + if(*first == value){ + ++i; + } + ++first; + } + return i; + } + + template _UCXXEXPORT + typename iterator_traits::difference_type + count_if(InputIterator first, InputIterator last, Predicate pred) + { + typename iterator_traits::difference_type i = 0; + while(first!=last){ + if( pred(*first) ){ + ++i; + } + ++first; + } + return i; + } + + template _UCXXEXPORT + pair + mismatch(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2) + { + while(first1 != last1){ + if(*first1 != *first2){ + break; + } + ++first1; + ++first2; + } + + pair retval; + retval.first = first1; + retval.second = first2; + return retval; + } + + template _UCXXEXPORT + pair + mismatch(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, BinaryPredicate pred) + { + while(first1 != last1){ + if( !pred(*first1, *first2) ){ + break; + } + ++first1; + ++first2; + } + + pair retval; + retval.first = first1; + retval.second = first2; + return retval; + } + + template _UCXXEXPORT + bool + equal(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2) + { + while(first1 !=last1){ + if(*first1 != *first2){ + return false; + } + ++first1; + ++first2; + } + return true; + } + + template _UCXXEXPORT + bool + equal(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, BinaryPredicate pred) + { + while(first1 !=last1){ + if( !pred(*first1, *first2) ){ + return false; + } + ++first1; + ++first2; + } + return true; + } + + template _UCXXEXPORT + ForwardIterator1 search(ForwardIterator1 first1, ForwardIterator1 last1, + ForwardIterator2 first2, ForwardIterator2 last2) + { + equal_to::value_type> c; + return search(first1, last1, first2, last2, c); + } + + + template _UCXXEXPORT + ForwardIterator1 + search(ForwardIterator1 first1, ForwardIterator1 last1, + ForwardIterator2 first2, ForwardIterator2 last2, + BinaryPredicate pred) + { + while(first1 != last1){ + ForwardIterator1 temp1(first1); + ForwardIterator2 temp2(first2); + while(temp2 != last2 && temp1 != last1){ + if( !pred(*temp2, *temp1) ){ + break; + } + ++temp1; + ++temp2; + if(temp2 == last2){ + return first1; + } + } + ++first1; + } + return last1; + } + + + template _UCXXEXPORT + ForwardIterator + search_n(ForwardIterator first, ForwardIterator last, Size count, const T& value) + { + while( first != last ){ + if(*first == value){ + ForwardIterator temp(first); + Size i = 1; + ++first; //Avoid doing the same comparison over again + while(i < count && *temp == value){ + ++first; + ++i; + } + if(i == count){ + return first; + } + } + ++first; + } + return first; + } + + + template _UCXXEXPORT + ForwardIterator + search_n(ForwardIterator first, ForwardIterator last, + Size count, const T& value, BinaryPredicate pred) + { + while( first != last ){ + if( pred(*first, value) ){ + ForwardIterator temp(first); + Size i = 1; + ++first; //Avoid doing the same comparison over again + while(i < count && pred(*temp, value) ){ + ++first; + ++i; + } + if(i == count){ + return first; + } + } + ++first; + } + return first; + + } + + // subclause _lib.alg.modifying.operations_, modifying sequence operations: + + template _UCXXEXPORT + OutputIterator + copy(InputIterator first, InputIterator last, OutputIterator result) + { + while(first != last){ + *result = *first; + ++first; + ++result; + } + return result; + } + + template _UCXXEXPORT + BidirectionalIterator2 + copy_backward(BidirectionalIterator1 first, BidirectionalIterator1 last, + BidirectionalIterator2 result) + { + while(first !=last ){ + --result; + --last; + *result = *last; + } + return result; + } + + template _UCXXEXPORT void swap(T& a, T& b){ + T temp(a); + a = b; + b = temp; + } + + template _UCXXEXPORT + void + iter_swap(ForwardIterator1 a, ForwardIterator2 b) + { + typename iterator_traits::value_type temp(*a); + *a = *b; + *b = temp; + } + + + template _UCXXEXPORT + ForwardIterator2 + swap_ranges(ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2) + { + while(first1 != last1){ + iter_swap(first1, first2); + ++first1; + ++first2; + } + return first2; + } + + + template _UCXXEXPORT + OutputIterator + transform(InputIterator first, InputIterator last, + OutputIterator result, UnaryOperation op) + { + while(first != last){ + *result = op(*first); + ++first; + ++result; + } + return result; + } + + + template _UCXXEXPORT + OutputIterator transform(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, OutputIterator result, + BinaryOperation binary_op) + { + while(first1 != last1){ + *result = binary_op(*first1, *first2); + ++first1; + ++first2; + ++result; + } + return result; + } + + + template _UCXXEXPORT + void + replace(ForwardIterator first, ForwardIterator last, + const T& old_value, const T& new_value) + { + while(first != last){ + if(*first == old_value){ + *first = new_value; + } + ++first; + } + } + + template _UCXXEXPORT + void + replace_if(ForwardIterator first, ForwardIterator last, + Predicate pred, const T& new_value) + { + while(first != last){ + if( pred(*first) ){ + *first = new_value; + } + ++first; + } + } + + + template _UCXXEXPORT + OutputIterator + replace_copy(InputIterator first, InputIterator last, + OutputIterator result, const T& old_value, const T& new_value) + { + while(first != last){ + if(*first == old_value){ + *result = new_value; + }else{ + *result = *first; + } + ++first; + ++result; + } + return result; + } + + template _UCXXEXPORT + OutputIterator + replace_copy_if(Iterator first, Iterator last, + OutputIterator result, Predicate pred, const T& new_value) + { + while(first != last){ + if( pred(*first) ){ + *result = new_value; + }else{ + *result = *first; + } + ++first; + ++result; + } + return result; + } + + template _UCXXEXPORT + void + fill(ForwardIterator first, ForwardIterator last, const T& value) + { + while(first != last){ + *first = value; + ++first; + } + } + + template _UCXXEXPORT + void + fill_n(OutputIterator first, Size n, const T& value) + { + while(n != 0){ + *first = value; + --n; + ++first; + } + } + + template _UCXXEXPORT + void + generate(ForwardIterator first, ForwardIterator last, Generator gen) + { + while(first != last){ + *first = gen(); + ++first; + } + } + + template _UCXXEXPORT + void + generate_n(OutputIterator first, Size n, Generator gen) + { + while(n !=0){ + *first = gen(); + --n; + ++first; + } + } + + template _UCXXEXPORT + ForwardIterator + remove(ForwardIterator first, ForwardIterator last, const T& value) + { + ForwardIterator temp(first); + while(temp !=last){ + if(*temp == value){ + + }else{ + *first = *temp; + ++first; + } + ++temp; + } + return first; + } + + template _UCXXEXPORT + ForwardIterator + remove_if(ForwardIterator first, ForwardIterator last, Predicate pred) + { + ForwardIterator temp(first); + while(temp !=last){ + if( pred(*temp) ){ + + }else{ + *first = *temp; + ++first; + } + ++temp; + } + return first; + } + + + template _UCXXEXPORT + OutputIterator + remove_copy(InputIterator first, InputIterator last, + OutputIterator result, const T& value) + { + while(first !=last){ + if(*first != value){ + *result = *first; + ++result; + } + ++first; + } + return result; + } + + template _UCXXEXPORT + OutputIterator + remove_copy_if(InputIterator first, InputIterator last, + OutputIterator result, Predicate pred) + { + while(first !=last){ + if( !pred(*first) ){ + *result = *first; + ++result; + } + ++first; + } + return result; + } + + template _UCXXEXPORT + ForwardIterator + unique(ForwardIterator first, ForwardIterator last) + { + ForwardIterator new_val(first); + ForwardIterator old_val(first); + + while(new_val !=last){ + if(*new_val == *old_val && new_val != old_val){ + + }else{ + *first = *new_val; + old_val = new_val; + ++first; + } + ++new_val; + } + return first; + } + + template _UCXXEXPORT + ForwardIterator + unique(ForwardIterator first, ForwardIterator last, BinaryPredicate pred) + { + ForwardIterator new_val(first); + ForwardIterator old_val(first); + + while(new_val !=last){ + if( pred(*new_val, *old_val) && new_val != old_val){ + + }else{ + *first = *new_val; + old_val = new_val; + ++first; + } + ++new_val; + } + return first; + } + + template _UCXXEXPORT + OutputIterator + unique_copy(InputIterator first, InputIterator last, OutputIterator result) + { + InputIterator temp(first); + while(first !=last ){ + if(*first == *temp && first != temp){ + + }else{ + *result = *first; + temp = first; + ++result; + } + ++first; + } + return result; + } + + template _UCXXEXPORT + OutputIterator + unique_copy(InputIterator first, InputIterator last, + OutputIterator result, BinaryPredicate pred) + { + InputIterator temp(first); + while(first !=last ){ + if( pred(*first, *temp) && first != temp){ + + }else{ + *result = *first; + temp = first; + ++result; + } + ++first; + } + return result; + } + + template _UCXXEXPORT + void + reverse(BidirectionalIterator first, BidirectionalIterator last) + { + --last; //Don't work with one past the end element + while(first < last){ + iter_swap(first, last); + ++first; + --last; + } + } + + template _UCXXEXPORT + OutputIterator + reverse_copy(BidirectionalIterator first, BidirectionalIterator last, + OutputIterator result) + { + while(last > first){ + --last; + *result = *last; + ++result; + } + return result; + } + + template _UCXXEXPORT + void + rotate(ForwardIterator first, ForwardIterator middle, ForwardIterator last) + { + if ((first == middle) || (last == middle)){ + return; + } + + ForwardIterator first2 = middle; + + do { + swap(*first, *first2); + first++; + first2++; + if(first == middle){ + middle = first2; + } + } while(first2 != last); + + first2 = middle; + + while (first2 != last) { + swap(*first, *first2); + first++; + first2++; + if (first == middle){ + middle = first2; + }else if (first2 == last){ + first2 = middle; + } + } + } + + template _UCXXEXPORT + OutputIterator + rotate_copy(ForwardIterator first, ForwardIterator middle, + ForwardIterator last, OutputIterator result) + { + ForwardIterator temp(middle); + while(temp !=last){ + *result = *temp; + ++temp; + ++result; + } + while(first != middle){ + *result = *first; + ++first; + ++result; + } + return result; + } + + + template _UCXXEXPORT + void + random_shuffle(RandomAccessIterator first, RandomAccessIterator last) + { + --last; + while(first != last){ + iter_swap(first, (first + (rand() % (last - first) ) ) ); + ++first; + } + } + + template _UCXXEXPORT + void + random_shuffle(RandomAccessIterator first, RandomAccessIterator last, + RandomNumberGenerator& rand) + { + --last; + while(first != last){ + iter_swap(first, (first + (rand(last - first) ) ) ); + ++first; + } + } + + // _lib.alg.partitions_, partitions: + template _UCXXEXPORT BidirectionalIterator + partition(BidirectionalIterator first, BidirectionalIterator last, Predicate pred) + { + return stable_partition(first, last, pred); + } + + template _UCXXEXPORT BidirectionalIterator + stable_partition(BidirectionalIterator first, BidirectionalIterator last, Predicate pred) + { + //first now points to the first non-desired element + while( first != last && pred(*first) ){ + ++first; + } + + BidirectionalIterator tempb; + BidirectionalIterator tempe = first; + + while( tempe != last ){ + //Find the next desired element + while( !pred(*tempe) ){ + ++tempe; + + //See if we should exit + if(tempe == last){ + return first; + } + } + + //Rotate the element back to the begining + tempb = tempe; + while(tempb != first){ + iter_swap(tempb, tempb-1 ); + --tempb; + } + //First now has a desired element + ++first; + } + + return first; + } + + template _UCXXEXPORT + void sort(RandomAccessIterator first, RandomAccessIterator last) + { + less::value_type> c; + sort(first, last, c ); + } + + template _UCXXEXPORT + void stable_sort(RandomAccessIterator first, RandomAccessIterator last) + { + less::value_type> c; + stable_sort(first, last, c); + } + + template _UCXXEXPORT + void stable_sort(RandomAccessIterator first, RandomAccessIterator last, Compare comp) + { + //FIXME - bubble sort + RandomAccessIterator temp; + --last; + while(last - first > 0){ + temp = last; + while(temp != first){ + if( comp( *temp, *(temp-1) ) ){ + iter_swap( temp-1, temp); + } + --temp; + } + ++first; + } + } + + template _UCXXEXPORT + void sort(RandomAccessIterator first, RandomAccessIterator last, Compare comp) + { + stable_sort(first, last, comp); + } + + template _UCXXEXPORT + void partial_sort(RandomAccessIterator first, RandomAccessIterator middle, RandomAccessIterator last) + { + less::value_type> c; + partial_sort(first, middle, last, c); + } + template _UCXXEXPORT + void partial_sort(RandomAccessIterator first, RandomAccessIterator middle, + RandomAccessIterator last, Compare comp) + { + //Fixme - partial bubble sort + RandomAccessIterator temp; + --last; + while(first < middle){ + temp = last; + while(temp != first){ + if( comp(*temp, *(temp -1 ) ) ) { + iter_swap( temp-1, temp); + } + --temp; + } + ++first; + } + } + template _UCXXEXPORT + RandomAccessIterator + partial_sort_copy(InputIterator first, InputIterator last, + RandomAccessIterator result_first, RandomAccessIterator result_last) + { + less::value_type> c; + return partial_sort_copy(first, last, result_first, result_last, c); + } + template _UCXXEXPORT + RandomAccessIterator + partial_sort_copy(InputIterator first, InputIterator last, + RandomAccessIterator result_first, RandomAccessIterator result_last, Compare comp) + { + size_t output_size = last-first; + size_t temp_size = result_last - result_first; + if(temp_size < output_size){ + output_size = temp_size; + } + + RandomAccessIterator middle = result_first + output_size; + RandomAccessIterator temp = result_first; + + while(temp != middle){ + *temp = *first; + ++temp; + ++first; + } + sort(result_first, middle, comp); + + while( first != last){ + if( comp( *first, *(middle-1) ) ){ + *(middle-1) = *first; + sort(result_first, middle, comp); + } + ++first; + } + + return middle; + } + template _UCXXEXPORT + void nth_element(RandomAccessIterator first, RandomAccessIterator nth, RandomAccessIterator last) + { + less::value_type> c; + nth_element(first, nth, last, c); + } + template _UCXXEXPORT + void nth_element(RandomAccessIterator first, RandomAccessIterator nth, + RandomAccessIterator last, Compare comp) + { + partial_sort(first, nth, last, comp); + } + + template _UCXXEXPORT + ForwardIterator lower_bound(ForwardIterator first, ForwardIterator last, + const T& value) + { + less::value_type> c; + return lower_bound(first, last, value, c); + } + + template _UCXXEXPORT + ForwardIterator lower_bound(ForwardIterator first, ForwardIterator last, + const T& value, Compare comp) + { + if(first == last){ + return last; + } + //If below or equal to the first element + if( comp(*first, value) == false){ + return first; + } + ForwardIterator middle; + + //If greater than the top element + middle = first; + advance(middle, distance(first, last) - 1); + if( comp(*middle, value) ){ + return last; + } + + //Now begin the actual search for the begining + while( distance(first, last) > 1 ){ + //Find middle + middle = first; + advance(middle, (distance(first, last)/2) ); + if( !comp(*middle, value) ){ + last = middle; + }else{ + first = middle; + } + } + + if( !comp(*first, value) ){ + return first; + } + return last; + } + + template _UCXXEXPORT + ForwardIterator upper_bound(ForwardIterator first, ForwardIterator last, + const T& value) + { + less::value_type> c; + return upper_bound(first, last, value, c); + } + + + template _UCXXEXPORT + ForwardIterator upper_bound(ForwardIterator first, ForwardIterator last, + const T& value, Compare comp) + { + if(first == last){ + return last; + } + //If below the first element + if( comp(value, *first) == true){ + return first; + } + + ForwardIterator middle; + + //If greater than the top element + middle = first; + advance(middle, distance(first, last) - 1); + if( comp(*middle, value) ){ + return last; + } + + //Now begin the actual search for the end + while( distance(first, last) > 1 ){ + //Find middle + middle = first; + advance(middle, (distance(first, last)/2) ); + if( comp(value, *middle) ){ + last = middle; + }else{ + first = middle; + } + } + + if( comp(value, *first) ){ + return first; + } + return last; + } + + + template _UCXXEXPORT + pair + equal_range(ForwardIterator first, ForwardIterator last, const T& value) + { + less::value_type> c; + return equal_range(first, last, value, c); + } + + template _UCXXEXPORT + pair + equal_range(ForwardIterator first, ForwardIterator last, const T& value, Compare comp) + { + pair retval; + retval.first = lower_bound(first, last, value, comp); + //Reuse retval.first in order to (possibly) save a few comparisons + retval.second = upper_bound(retval.first, last, value, comp); + return retval; + + } + + template _UCXXEXPORT + bool binary_search(ForwardIterator first, ForwardIterator last, + const T& value) + { + less::value_type> c; + return binary_search(first, last, value, c); + } + + template _UCXXEXPORT + bool binary_search(ForwardIterator first, ForwardIterator last, + const T& value, Compare comp) + { + if( distance(first, last) == 0){ + return false; + } + + ForwardIterator middle; + + while( distance(first, last) > 1 ){ + //Set middle between first and last + middle = first; + advance(middle, distance(first, last)/2 ); + + if( comp(*middle, value ) == true){ + first = middle; + }else{ + last = middle; + } + } + + if( !comp(*first, value) && !comp(value, *first) ){ + return true; + } + if( !comp(*last, value) && !comp(value, *last) ){ + return true; + } + + return false; + } + + // _lib.alg.merge_, merge: + template _UCXXEXPORT + OutputIterator + merge(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, OutputIterator result) + { + less::value_type> c; + return merge(first1, last1, first2, last2, result, c); + } + template _UCXXEXPORT + OutputIterator + merge(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp) + { + while( first1 != last1 && first2 != last2){ + //If in this order so first1 elements which are equal come first + if( comp(*first2, *first1) ){ + *result = *first2; + ++first2; + }else{ + *result = *first1; + ++first1; + } + ++result; + } + //Clean up remaining elements + while(first1 != last1){ + *result = *first1; + ++first1; + ++result; + } + while(first2 != last2){ + *result = *first2; + ++first2; + ++result; + } + return result; + } + template _UCXXEXPORT + void inplace_merge(BidirectionalIterator first, + BidirectionalIterator middle, BidirectionalIterator last) + { + less::value_type> c; + inplace_merge(first, middle, last, c); + } + template _UCXXEXPORT + void inplace_merge(BidirectionalIterator first, + BidirectionalIterator middle, BidirectionalIterator last, Compare comp) + { + //FIXME - using a bubble exchange method + while(first != middle && middle !=last){ + if( comp(*middle, *first) ){ + BidirectionalIterator temp(middle); + while( temp != first){ + iter_swap(temp, temp-1); + --temp; + } + ++middle; + } + ++first; + } + } + + // _lib.alg.set.operations_, set operations: + template _UCXXEXPORT + bool includes(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2) + { + less::value_type> c; + return includes(first1, last1, first2, last2, c ); + } + + template _UCXXEXPORT + bool includes(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, Compare comp) + { + while(first2 != last2){ + //Advance the large set until no longer smaller than the element we are looking for + while( comp(*first1, *first2) ){ + ++first1; + //If we are at the end of the list, we don't have the desired element + if(first1 == last1){ + return false; + } + } + //If we are past the element we want, it isn't here + if( comp(*first2, *first1) ){ + return false; + } + ++first2; //Move to next element + } + return true; + } + + template _UCXXEXPORT + OutputIterator set_union(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, OutputIterator result) + { + less::value_type> c; + return set_union(first1, last1, first2, last2, result, c); + } + + template _UCXXEXPORT + OutputIterator set_union(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp) + { + while( first1 != last1 && first2 != last2){ + if( comp(*first2, *first1) ){ + *result = *first2; + + //Elliminate duplicates + InputIterator2 temp = first2; + while( first1 != last1 && !comp( *temp, *first1) ){ + ++first1; + } + while( first2 != last2 && !comp( *temp, *first2) ){ + ++first2; + } + }else{ + *result = *first1; + //Elliminate duplicates + InputIterator1 temp = first1; + while( first1 != last1 && !comp( *temp, *first1) ){ + ++first1; + } + while( first2 != last2 && !comp( *temp, *first2) ){ + ++first2; + } + } + ++result; + } + + //Clean up remaining elements + while(first1 != last1){ + *result = *first1; + ++result; + InputIterator1 temp = first1; + while( first1 != last1 && !comp( *temp, *first1) ){ + ++first1; + } + } + + while(first2 != last2){ + *result = *first2; + ++result; + InputIterator2 temp = first2; + while( first2 != last2 && !comp( *temp, *first2) ){ + ++first2; + } + } + return result; + } + + template _UCXXEXPORT + OutputIterator set_intersection(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, OutputIterator result) + { + less::value_type> c; + return set_intersection(first1, last1, first2, last2, result, c); + } + template _UCXXEXPORT + OutputIterator set_intersection(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp) + { + while( first1 != last1 && first2 != last2){ + if( comp(*first2, *first1) ){ + ++first2; + }else if( comp(*first1, *first2) ) { + ++first1; + }else{ + *result = *first1; + ++result; + InputIterator1 temp = first1; + while( first1 != last1 && !comp( *temp, *first1) ){ + ++first1; + } + ++first2; + } + } + return result; + } + template _UCXXEXPORT + OutputIterator set_difference(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, OutputIterator result) + { + less::value_type> c; + return set_difference(first1, last1, first2, last2, result, c); + } + template _UCXXEXPORT + OutputIterator set_difference(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp) + { + while( first1 != last1 && first2 != last2){ + if( comp(*first1, *first2) ){ + *result = *first1; + ++result; + + //Elliminate duplicates + InputIterator1 temp = first1; + while( first1 != last1 && !comp( *temp, *first1) ){ + ++first1; + } + }else if( comp(*first2, *first1) ){ + + //Elliminate duplicates + InputIterator2 temp = first2; + while( first2 != last2 && !comp( *temp, *first2) ){ + ++first2; + } + + }else{ //They are identical - skip + //Elliminate duplicates + InputIterator1 temp = first1; + while( first1 != last1 && !comp( *temp, *first1) ){ + ++first1; + } + while( first2 != last2 && !comp( *temp, *first2) ){ + ++first2; + } + } + } + + //Clean up remaining elements + while(first1 != last1){ + *result = *first1; + ++result; + InputIterator1 temp = first1; + while( first1 != last1 && !comp( *temp, *first1) ){ + ++first1; + } + } + + return result; + } + template _UCXXEXPORT + OutputIterator set_symmetric_difference(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, OutputIterator result) + { + less::value_type> c; + return set_symmetric_difference(first1, last1, first2, last2, result, c); + } + template _UCXXEXPORT + OutputIterator set_symmetric_difference(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp) + { + while( first1 != last1 && first2 != last2){ + if( comp(*first1, *first2) ){ + *result = *first1; + ++result; + + //Elliminate duplicates + InputIterator1 temp = first1; + while( first1 != last1 && !comp( *temp, *first1) ){ + ++first1; + } + }else if( comp(*first2, *first1) ){ + *result = *first2; + ++result; + + //Elliminate duplicates + InputIterator2 temp = first2; + while( first2 != last2 && !comp( *temp, *first2) ){ + ++first2; + } + + }else{ //They are identical - skip + //Elliminate duplicates + InputIterator1 temp = first1; + while( first1 != last1 && !comp( *temp, *first1) ){ + ++first1; + } + while( first2 != last2 && !comp( *temp, *first2) ){ + ++first2; + } + } + } + + //Clean up remaining elements + while(first1 != last1){ + *result = *first1; + ++result; + InputIterator1 temp = first1; + while( first1 != last1 && !comp( *temp, *first1) ){ + ++first1; + } + } + + while(first2 != last2){ + *result = *first2; + ++result; + InputIterator2 temp = first2; + while( first2 != last2 && !comp( *temp, *first2) ){ + ++first2; + } + } + + return result; + } + + // _lib.alg.heap.operations_, heap operations: + + template _UCXXEXPORT + void push_heap(RandomAccessIterator first, RandomAccessIterator last) + { + less::value_type> c; + push_heap(first, last, c); + } + + template _UCXXEXPORT + void push_heap(RandomAccessIterator first, RandomAccessIterator last, Compare comp) + { + // *(last - 1) is the last element + RandomAccessIterator begin, middle, end; + begin = first; + end = last - 2; + if(last - first < 2){ //Empty heap + return; + } + if ( comp(*(last-1), *end) ){ //Belongs past the end - already in place + return; + } + while(end - begin > 1){ + middle = begin + ((end - begin)/2); + if( comp(*middle, *(last-1) ) ){ + end = middle; + }else{ + begin = middle; + } + } + + if( comp(*begin, *(last-1)) ){ + middle = begin; + }else{ + middle = end; + } + + //Now all we do is swap the elements up to the begining + --last; + + while(last > middle){ + iter_swap(last, last-1); + --last; + } + } + + template _UCXXEXPORT + void pop_heap(RandomAccessIterator first, RandomAccessIterator last) + { + less::value_type> c; + pop_heap(first, last, c); + } + template _UCXXEXPORT + void pop_heap(RandomAccessIterator first, RandomAccessIterator last, Compare) + { + --last; + while(first < last){ + iter_swap( first, first+1); + ++first; + } + } + + template _UCXXEXPORT + void make_heap(RandomAccessIterator first, RandomAccessIterator last) + { + less::value_type> c; + make_heap(first, last, c); + } + template _UCXXEXPORT + void make_heap(RandomAccessIterator first, RandomAccessIterator last, Compare comp) + { + sort( reverse_iterator(last), reverse_iterator(first), comp); + } + template _UCXXEXPORT + void sort_heap(RandomAccessIterator first, RandomAccessIterator last) + { + less::value_type> c; + sort_heap(first, last, c); + } + template _UCXXEXPORT + void sort_heap(RandomAccessIterator first, RandomAccessIterator last, Compare comp) + { + sort( first, last, comp); + } + + + // _lib.alg.min.max_, minimum and maximum: + template _UCXXEXPORT + const T& min(const T& a, const T& b) + { + if(b < a){ + return b; + } + return a; + } + + template _UCXXEXPORT + const T& min(const T& a, const T& b, Compare comp) + { + if( comp(b, a) == true){ + return b; + } + return a; + } + + template _UCXXEXPORT + const T& max(const T& a, const T& b) + { + if( a < b){ + return b; + } + return a; + } + + template _UCXXEXPORT + const T& max(const T& a, const T& b, Compare comp) + { + if( comp(a, b) ){ + return b; + } + return a; + } + + template _UCXXEXPORT + ForwardIterator min_element(ForwardIterator first, ForwardIterator last) + { + less::value_type> c; + return min_element(first, last, c); + } + + template _UCXXEXPORT + ForwardIterator min_element(ForwardIterator first, ForwardIterator last, Compare comp) + { + ForwardIterator retval = first; + ++first; + while(first != last){ + if( comp( *first, *retval) ){ + retval = first; + } + ++first; + } + return retval; + } + + template _UCXXEXPORT + ForwardIterator max_element(ForwardIterator first, ForwardIterator last) + { + less::value_type> c; + return max_element(first, last, c); + } + + template _UCXXEXPORT + ForwardIterator max_element(ForwardIterator first, ForwardIterator last, Compare comp) + { + ForwardIterator retval = first; + ++first; + while(first != last){ + if( comp( *retval, *first ) ){ + retval = first; + } + ++first; + } + return retval; + } + + template _UCXXEXPORT + bool lexicographical_compare(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2) + { + less::value_type> c; + return lexicographical_compare(first1, last1, first2, last2, c); + } + + template _UCXXEXPORT + bool lexicographical_compare(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, Compare comp) + { + while(first1 != last1 && first2 != last2){ + if( comp(*first1, *first2) ){ + return true; + } + if( comp(*first2, *first1) ){ + return false; + } + ++first1; + ++first2; + } + return first1==last1 && first2 != last2; + } + + // _lib.alg.permutation.generators_, permutations + template _UCXXEXPORT + bool next_permutation(BidirectionalIterator first, BidirectionalIterator last) + { + less::value_type> c; + return next_permutation(first, last, c); + } + + template _UCXXEXPORT + bool next_permutation(BidirectionalIterator first, BidirectionalIterator last, Compare comp) + { + if(first == last){ + return false; // No data + } + BidirectionalIterator i = last; + --i; + if(i == first){ + return false; //Only one element + } + BidirectionalIterator ii = i; + --ii; + //If the last two items are in order, swap them and call it done + if( comp(*ii, *i) ){ + iter_swap(ii, i); + return true; + } + + + //This part of the algorithm copied from G++ header files ver. 3.4.2 + i = last; + --i; + for(;;){ + ii = i; + --i; + if ( comp(*i, *ii) ){ + BidirectionalIterator j = last; + --j; + while ( !comp(*i, *j)){ + --j; + } + iter_swap(i, j); + reverse(ii, last); + return true; + } + if (i == first){ + reverse(first, last); + return false; + } + } + + + } + + template _UCXXEXPORT + bool prev_permutation(BidirectionalIterator first, BidirectionalIterator last) + { + less::value_type> c; + return prev_permutation(first, last, c); + } + + template _UCXXEXPORT + bool prev_permutation(BidirectionalIterator first, BidirectionalIterator last, Compare comp) + { + if(first == last){ + return false; // No data + } + BidirectionalIterator i = last; + --i; + if(i == first){ + return false; //Only one element + } + BidirectionalIterator ii = i; + --ii; + //If the last two items are in reverse order, swap them and call it done + if( comp(*i, *ii) ){ + iter_swap(ii, i); + return true; + } + + //Copied from GNU GCC header files version 3.4.2 + i = last; + --i; + + for(;;){ + ii = i; + --i; + if ( comp(*ii, *i)){ + BidirectionalIterator j = last; + --j; + while ( !comp(*j, *i)){ + --j; + } + iter_swap(i, j); + reverse(ii, last); + return true; + } + if (i == first){ + reverse(first, last); + return false; + } + } + + } + +} + +#pragma GCC visibility pop + +#endif + + + diff --git a/external/arduino/stlarduino/algorithm.cpp b/external/arduino/stlarduino/algorithm.cpp new file mode 100644 index 000000000..e21b14e3f --- /dev/null +++ b/external/arduino/stlarduino/algorithm.cpp @@ -0,0 +1,30 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*/ + + +#include + + +namespace std{ + + + +} + + diff --git a/external/arduino/stlarduino/associative_base b/external/arduino/stlarduino/associative_base new file mode 100644 index 000000000..27ae0ef9f --- /dev/null +++ b/external/arduino/stlarduino/associative_base @@ -0,0 +1,640 @@ +/* Copyright (C) 2007 Garrett A. Kajmowicz + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + + + +#include +#include +#include +#include +#include + + +#ifndef __STD_HEADER_ASSOCIATIVE_BASE +#define __STD_HEADER_ASSOCIATIVE_BASE + +#pragma GCC visibility push(default) + +namespace std{ + + +/* + * The basic premise here is that most of the code used by map, multimap, set and + * multiset is really common. There are a number of interface additions, and + * considerations about how to address multiple entries with the same key. + * The goal is that the tree/storage code should be here, and managing + * single or multiple counts will be left to subclasses. + * Yes, inheritence for the purpose of code sharing is usually a bad idea. + * However, since our goal is to reduce the total amount of code written + * and the overall binary size, this seems to be the best approach possible. + */ + +template, class Allocator = allocator > class __base_associative; +template class _associative_iter; +template class _associative_citer; + +template, class Allocator = allocator > class __single_associative; +template, class Allocator = allocator > class __multi_associative; + +template class _UCXXEXPORT __base_associative{ + +protected: + +public: + typedef Key key_type; + typedef ValueType value_type; + typedef Compare key_compare; + typedef Allocator allocator_type; + typedef typename Allocator::reference reference; + typedef typename Allocator::const_reference const_reference; + typedef typename Allocator::size_type size_type; + typedef typename Allocator::difference_type difference_type; + typedef typename Allocator::pointer pointer; + typedef typename Allocator::const_pointer const_pointer; + typedef __base_associative associative_type; + + typedef _associative_iter iterator; + typedef _associative_citer const_iterator; + typedef typename std::reverse_iterator reverse_iterator; + typedef typename std::reverse_iterator const_reverse_iterator; + + + explicit __base_associative(const Compare& comp, const Allocator& A, const key_type (*v_to_k)(const value_type)) + : c(comp), value_to_key(v_to_k) { } +protected: + __base_associative(const associative_type& x) + : c(x.c), backing(x.backing), value_to_key(x.value_to_key) { } + +public: + ~__base_associative(){ + } + + bool empty() const{ + return backing.empty(); + } + size_type size() const{ + return backing.size(); + } + size_type max_size() const{ + return backing.max_size(); + } + + iterator begin(){ + return iterator(backing.begin()); + } + + const_iterator begin() const{ + return const_iterator(backing.begin()); + } + + iterator end() { + return iterator(backing.end()); + } + + const_iterator end() const{ + return const_iterator(backing.end()); + } + + reverse_iterator rbegin(){ + return reverse_iterator(end()); + } + + const_reverse_iterator rbegin() const{ + return const_reverse_iterator(end()); + } + + reverse_iterator rend(){ + return reverse_iterator(begin()); + } + + const_reverse_iterator rend() const{ + return const_reverse_iterator(begin()); + } + + + iterator lower_bound(const key_type &x); + const_iterator lower_bound(const key_type &x) const; + iterator upper_bound(const key_type &x); + const_iterator upper_bound(const key_type &x) const; + + pair equal_range(const key_type& x){ + pair retval; + retval.first = lower_bound(x); + retval.second = retval.first; + while(retval.second != end() && !c(x, value_to_key(*retval.second))){ + ++retval.second; + } + return retval; + } + pair equal_range(const key_type& x) const{ + pair retval; + retval.first = lower_bound(x); + retval.second = retval.first; + while(retval.second != end() && !c(x, value_to_key(*retval.second))){ + ++retval.second; + } + return retval; + } + + iterator find(const key_type& x){ + iterator retval = lower_bound(x); + if(retval == end()){ + return retval; + } + if(c(x, value_to_key(*retval))){ + return end(); + } + return retval; + } + const_iterator find(const key_type& x) const{ + const_iterator retval = lower_bound(x); + if(retval == end()){ + return retval; + } + if(c(x, value_to_key(*retval))){ + return end(); + } + return retval; + } + size_type count(const key_type& x) const{ + size_type retval(0); + const_iterator first = lower_bound(x); + while(first != end() && !c(x, value_to_key(*first))){ + ++retval; + ++first; + } + return retval; + } + + void clear(){ + backing.clear(); + } + + void erase(iterator pos){ + backing.erase(pos.base_iterator()); + } + size_type erase(const key_type& x){ + size_type count(0); + iterator start = lower_bound(x); + iterator end = upper_bound(x); + while(start != end){ + start = backing.erase(start.base_iterator()); + ++count; + } + return count; + } + void erase(iterator first, iterator last){ + while(first != last){ + backing.erase(first.base_iterator()); + ++first; + } + } + + key_compare key_comp() const{ + return c; + } + + __base_associative &operator=(const __base_associative & x){ + c = x.c; + backing = x.backing; + value_to_key = x.value_to_key; + return *this; + } + bool operator==(const __base_associative & x){ + return x.backing == backing; + } + bool operator!=(const __base_associative & x){ + return !(x.backing == backing); + } + +protected: + void swap(__base_associative & x); + + Compare c; + std::list backing; + + const key_type (*value_to_key)(const value_type); + +}; + + +/* + * Tree iterators for the base associative class + */ + +template class _associative_citer + : public std::iterator< + bidirectional_iterator_tag, + ValueType, + typename Allocator::difference_type, + ValueType*, + ValueType& + > +{ +protected: + typedef std::list listtype; + + typename listtype::const_iterator base_iter; + friend class _associative_iter; +public: + _associative_citer() { } + _associative_citer(const _associative_citer & m) + : base_iter(m.base_iter) { } + _associative_citer(const typename listtype::const_iterator & m) + : base_iter(m) { } + ~_associative_citer() { } + ValueType operator*() const{ + return *base_iter; + } + const ValueType * operator->() const{ + return &(*base_iter); + } + _associative_citer & operator=(const _associative_citer & m){ + base_iter = m.base_iter; + return *this; + } + bool operator==(const _associative_citer & m) const{ + return m.base_iter == base_iter; + } + bool operator!=(const _associative_citer & m) const{ + return m.base_iter != base_iter; + } + _associative_citer & operator++(){ + ++base_iter; + return *this; + } + _associative_citer operator++(int){ + //The following approach ensures that we only need to + //provide code for ++ in one place (above) + _associative_citer temp(base_iter); + ++base_iter; + return temp; + } + _associative_citer & operator--(){ + --base_iter; + return *this; + } + _associative_citer operator--(int){ + //The following approach ensures that we only need to + //provide code for -- in one place (above) + _associative_citer temp(base_iter); + --base_iter; + return temp; + } + + //This is an implementation-defined function designed to make internals work correctly + typename listtype::const_iterator base_iterator(){ + return base_iter; + } +}; + + +template class _associative_iter + : public std::iterator< + bidirectional_iterator_tag, + ValueType, + typename Allocator::difference_type, + ValueType*, + ValueType& + > +{ +protected: + typedef std::list listtype; + + typename listtype::iterator base_iter; + typedef _associative_citer __associative_citer; + +public: + _associative_iter() { } + _associative_iter(const _associative_iter & m) + : base_iter(m.base_iter) { } + _associative_iter(const typename listtype::iterator & m) + : base_iter(m) { } + ~_associative_iter() { } + const ValueType & operator*() const{ + return *base_iter; + } + ValueType & operator*(){ + return *base_iter; + } + ValueType * operator->(){ + return &(*base_iter); + } + const ValueType * operator->() const{ + return &(*base_iter); + } + _associative_iter & operator=(const _associative_iter & m){ + base_iter = m.base_iter; + return *this; + } + bool operator==(const _associative_iter & m) const{ + return m.base_iter == base_iter; + } + bool operator==(const __associative_citer & m) const{ + return m.base_iter == base_iter; + } + bool operator!=(const _associative_iter & m) const{ + return m.base_iter != base_iter; + } + bool operator!=(const __associative_citer & m) const{ + return m.base_iter != base_iter; + } + _associative_iter & operator++(){ + ++base_iter; + return *this; + } + _associative_iter operator++(int){ + //The following approach ensures that we only need to + //provide code for ++ in one place (above) + _associative_iter temp(base_iter); + ++base_iter; + return temp; + } + _associative_iter & operator--(){ + --base_iter; + return *this; + } + _associative_iter operator--(int){ + //The following approach ensures that we only need to + //provide code for -- in one place (above) + _associative_iter temp(base_iter); + --base_iter; + return temp; + } + operator __associative_citer() const{ + return __associative_citer(base_iter); + } + typename listtype::iterator base_iterator(){ + return base_iter; + } + const typename listtype::iterator base_iterator() const{ + return base_iter; + } + +}; + + + // The lower_bound code is really crappy linear search. However, it is a dead + // simple implementation (easy to audit). It can also be easily replaced. + + + template + typename __base_associative::iterator + __base_associative::lower_bound(const key_type &x) + { + iterator retval = begin(); + while(retval != end() && c(value_to_key(*retval), x)){ + ++retval; + } + return retval; + } + + template + typename __base_associative::const_iterator + __base_associative::lower_bound(const key_type &x) const + { + const_iterator retval = begin(); + while(retval != end() && c(value_to_key(*retval), x)){ + ++retval; + } + return retval; + } + + // Upper bound search is linear from the point of lower_bound. This is likely the best solution + // in all but the most pathological of cases. + + template + typename __base_associative::iterator + __base_associative::upper_bound(const key_type &x) + { + iterator retval = lower_bound(x); + while(retval != end() && !c(x, value_to_key(*retval))){ + ++retval; + } + return retval; + } + + template + typename __base_associative::const_iterator + __base_associative::upper_bound(const key_type &x) const + { + const_iterator retval = begin(); + while(retval != end() && !c(x, value_to_key(*retval))){ + ++retval; + } + return retval; + } + + + template + void __base_associative::swap(__base_associative& m) + { + Compare n = c; + c = m.c; + m.c = n; + + m.backing.swap(backing); + } + + +template class _UCXXEXPORT __single_associative : + public __base_associative +{ +protected: + typedef __base_associative base; + using base::backing; + + using base::c; + +public: + typedef typename base::key_type key_type; + typedef typename base::value_type value_type; + typedef typename base::key_compare key_compare; + typedef typename base::allocator_type allocator_type; + typedef typename base::reference reference; + typedef typename base::const_reference const_reference; + typedef typename base::iterator iterator; + typedef typename base::const_iterator const_iterator; + typedef typename base::size_type size_type; + typedef typename base::difference_type difference_type; + typedef typename base::pointer pointer; + typedef typename base::const_pointer const_pointer; + typedef typename base::reverse_iterator reverse_iterator; + typedef typename base::const_reverse_iterator const_reverse_iterator; + + using base::begin; + using base::end; + using base::rbegin; + using base::rend; + + using base::empty; + using base::size; + using base::max_size; + + using base::find; + using base::count; + using base::lower_bound; + using base::upper_bound; + using base::equal_range; + + using base::operator=; + using base::operator==; + using base::operator!=; + + explicit __single_associative(const Compare& comp, const Allocator& A, const key_type (*v_to_k)(const value_type)) + : base(comp, A, v_to_k) { } + + template __single_associative( + InputIterator first, + InputIterator last, + const Compare& comp, + const Allocator& A, + const key_type (*v_to_k)(const value_type) + ) : base(comp, A, v_to_k) { + insert(first, last); + } + + pair insert(const value_type& x){ + pair retval; + iterator location = lower_bound(this->value_to_key(x)); + retval.second = true; + //Empty list or need to insert at end + if(end() == location){ + backing.push_back(x); + retval.first = --(end()); + return retval; + } + //Something in the list + if(c(this->value_to_key(x), this->value_to_key(*location))){ + location = backing.insert(location.base_iterator(), x); + retval.first = location; + }else{ + retval.second = false; + retval.first = location; + } + return retval; + } + + iterator insert(iterator position, const value_type& x){ + // FIXME - this is cheating and probably should be more efficient since we are + // now log(n) to find for inserts + return insert(x).first; + } + + template void insert(InputIterator first, InputIterator last){ + while(first != last){ + insert(*first); + ++first; + } + } + +}; + + +template class _UCXXEXPORT __multi_associative : + public __base_associative +{ +protected: + typedef __base_associative base; + using base::backing; + + using base::c; + +public: + typedef typename base::key_type key_type; + typedef typename base::value_type value_type; + typedef typename base::key_compare key_compare; + typedef typename base::allocator_type allocator_type; + typedef typename base::reference reference; + typedef typename base::const_reference const_reference; + typedef typename base::iterator iterator; + typedef typename base::const_iterator const_iterator; + typedef typename base::size_type size_type; + typedef typename base::difference_type difference_type; + typedef typename base::pointer pointer; + typedef typename base::const_pointer const_pointer; + typedef typename base::reverse_iterator reverse_iterator; + typedef typename base::const_reverse_iterator const_reverse_iterator; + + using base::begin; + using base::end; + using base::rbegin; + using base::rend; + + using base::empty; + using base::size; + using base::max_size; + + using base::find; + using base::count; + using base::lower_bound; + using base::upper_bound; + using base::equal_range; + + using base::operator=; + using base::operator==; + + + explicit __multi_associative(const Compare& comp, const Allocator& A, const key_type (*v_to_k)(const value_type)) + : base(comp, A, v_to_k) { } + + template __multi_associative( + InputIterator first, + InputIterator last, + const Compare& comp, + const Allocator& A, + const key_type (*v_to_k)(const value_type) + ) : base(comp, A, v_to_k) { + insert(first, last); + } + + iterator insert(const value_type& x){ + iterator location = lower_bound(this->value_to_key(x)); + + if(location == begin()){ + backing.push_front(x); + location = begin(); + }else{ + location = backing.insert(location.base_iterator(), x); + } + return location; + } + + iterator insert(iterator position, const value_type& x){ + // FIXME - this is cheating and probably should be more efficient since we are + // now log(n) to find for inserts + return insert(x); + } + + template void insert(InputIterator first, InputIterator last){ + while(first != last){ + insert(*first); + ++first; + } + } +}; + + + + +} + +#pragma GCC visibility pop + +#endif //__STD_HEADER_ASSOCIATIVE_BASE + diff --git a/external/arduino/stlarduino/associative_base.cpp b/external/arduino/stlarduino/associative_base.cpp new file mode 100644 index 000000000..cc2d20e54 --- /dev/null +++ b/external/arduino/stlarduino/associative_base.cpp @@ -0,0 +1,26 @@ +/* Copyright (C) 2007 Garrett A. Kajmowicz + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*/ + +#include + +namespace std{ + + + +} diff --git a/external/arduino/stlarduino/basic_definitions b/external/arduino/stlarduino/basic_definitions new file mode 100644 index 000000000..d4b6cd510 --- /dev/null +++ b/external/arduino/stlarduino/basic_definitions @@ -0,0 +1,64 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + This file is part of the uClibc++ Library. + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#ifndef __BASIC_DEFINITIONS +#define __BASIC_DEFINITIONS 1 + +#include + +#pragma GCC visibility push(default) + +//The following is used to support GCC symbol visibility patch + +#ifdef GCC_HASCLASSVISIBILITY + #define _UCXXEXPORT __attribute__ ((visibility("default"))) + #define _UCXXLOCAL __attribute__ ((visibility("hidden"))) +#else + #define _UCXXEXPORT + #define _UCXXLOCAL + +#endif + +#ifdef __GCC__ +#define __UCLIBCXX_NORETURN __attribute__ ((__noreturn__)) +#else +#define __UCLIBCXX_NORETURN +#endif + +#ifdef __UCLIBCXX_HAS_TLS__ + #define __UCLIBCXX_TLS __thread +#else + #define __UCLIBCXX_TLS +#endif + + + +//Testing purposes +#define __STRING_MAX_UNITS 65535 + +namespace std{ + typedef signed long int streamsize; +} + +#pragma GCC visibility pop + +# ifdef __DODEBUG__ + #define UCLIBCXX_DEBUG 1 +# else + #define UCLIBCXX_DEBUG 0 +# endif +#endif diff --git a/external/arduino/stlarduino/bitset b/external/arduino/stlarduino/bitset new file mode 100644 index 000000000..50d540469 --- /dev/null +++ b/external/arduino/stlarduino/bitset @@ -0,0 +1,423 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include +#include +#include +#include +#include +#include + +#ifndef __STD_BITSET_HEADER +#define __STD_BITSET_HEADER 1 + +#pragma GCC visibility push(default) + +namespace std{ + template class bitset; + + + template bitset operator&(const bitset&, const bitset&); + template bitset operator|(const bitset&, const bitset&); + template bitset operator^(const bitset&, const bitset&); + template basic_istream& + operator>>(basic_istream& is, bitset& x); + + template basic_ostream& + operator<<(basic_ostream& os, const bitset& x); + + //Actual Code + + + template class _UCXXEXPORT bitset { + private: + //Number of characters allocated to hold the bits + static const size_t WORD_SIZE = CHAR_BIT; //Use int maybe? + static const size_t num_bytes = (N + WORD_SIZE - 1) / WORD_SIZE; + + //From the bit number, figure out which byte we are working with + size_t byte_num(size_t bit_num) const{ + if(WORD_SIZE == 8){ + return (bit_num >> 3); + } + if(WORD_SIZE == 16){ + return (bit_num >> 4); + } + if(WORD_SIZE == 32){ + return (bit_num >> 5); + } + if(WORD_SIZE == 64){ + return (bit_num >> 6); + } + return bit_num / WORD_SIZE; + } + //From the bit number, figure out which bit inside the byte we need + size_t bit_num(const size_t bit_num) const{ + return bit_num % WORD_SIZE; + } + + + //Point to the actual data + char data[num_bytes]; + public: + + class _UCXXEXPORT reference { + friend class bitset; + reference() : bit_num(0), parent(0) { } + size_t bit_num; + bitset * parent; + public: + ~reference() { } + reference& operator=(bool x){ // for b[i] = x; + parent->set(bit_num, x); + return *this; + } + reference& operator=(const reference& x){ // for b[i] = b[j]; + parent->set(bit_num, x); + return *this; + } + bool operator~() const{ // flips the bit + return !parent->test(bit_num); + } + operator bool() const{ // for x = b[i]; + return parent->test(bit_num); + } + reference& flip(){ // for b[i].flip(); + parent->flip(bit_num); + return *this; + } + }; + + bitset(){ + reset(); + } + bitset(unsigned long val){ + reset(); + size_t count = sizeof(val) * CHAR_BIT; + if(count > N){ + count = N; + } + for(size_t i = 0; i < count; ++i){ + set(i, ((val >> i) & 1)); + } + } + + bitset(const bitset & val){ + for(size_t i = 0; i < num_bytes; ++i){ + data[i] = val.data[i]; + } + } + + template _UCXXEXPORT + explicit bitset( + const basic_string& str, + typename basic_string::size_type pos = 0, + typename basic_string::size_type n = + basic_string::npos + + ){ + reset(); + if(n > str.length()){ + n = str.length(); + } + size_t width = n; + if (width + pos > str.length()){ + width = str.length() - pos; + } + + for(size_t i = 0; i < width; ++i){ + switch(str[pos + width - i - 1]){ + case '0': + break; + case '1': + set(i); + break; + default: + __throw_invalid_argument(); + } + } + } + + bitset& operator&=(const bitset& rhs){ + for(size_t i =0; i < num_bytes; ++i){ + data[i] &= rhs.data[i]; + } + return *this; + } + + bitset& operator|=(const bitset& rhs){ + for(size_t i =0; i < num_bytes; ++i){ + data[i] |= rhs.data[i]; + } + return *this; + } + bitset& operator^=(const bitset& rhs){ + for(size_t i=0; i < num_bytes; ++i){ + data[i] ^= rhs.data[i]; + } + return *this; + } + + bitset& operator<<=(size_t pos){ + for(size_t i = N-1; i >=pos; --i){ + set(i, test(i - pos)); + } + for(size_t i = 0; i < pos; ++i){ + reset(i); + } + return *this; + } + + bitset& operator>>=(size_t pos){ + for(size_t i = 0; i < (N - pos); ++i){ + set(i, test(i + pos)); + } + for(size_t i = pos; i > 0; --i){ + reset(N - i); + } + return *this; + } + + bitset& set(){ + size_t i; + for(i = 0; i < N ; ++i){ + data[byte_num(i)] |= (1<& set(size_t pos, int val = true){ + if(val == true){ + data[byte_num(pos)] |= (1<& reset(){ + for(size_t i = 0; i < num_bytes; ++i){ + data[i] = 0; + } + return *this; + } + bitset& reset(size_t pos){ + data[byte_num(pos)] &= ~(1< operator~() const{ + bitset retval(*this); + retval.flip(); + return retval; + } + + bitset& flip(){ + for(size_t i = 0; i < num_bytes; ++i){ + data[i] = ~data[i]; + } + return *this; + } + bitset& flip(size_t pos){ + char temp = data[byte_num(pos)] & (1 << bit_num(pos)); + if(temp == 0){ //Bit was 0 + data[byte_num(pos)] |= (1 << bit_num(pos)); + }else{ //Bit was 1 + data[byte_num(pos)] &= ~(1< sizeof(unsigned long) * CHAR_BIT){ + __throw_overflow_error(); + } + unsigned long retval = 0; + size_t count = N; + for(size_t i = count; i > 0; --i){ + if(test(i)){ + retval +=1; + } + retval<<=1; + } + if(test(0)){ + retval +=1; + } + return retval; + } + + template + basic_string to_string() const + { + basic_string retval; + retval.reserve(N); + for(size_t i = N ; i > 0; --i){ + if(test(i-1) == true){ + retval.append("1"); + }else{ + retval.append("0"); + } + } + return retval; + } + + + size_t count() const{ + size_t retval = 0; + for(size_t i =0; i < N; ++i){ + if(test(i)){ + ++retval; + } + } + return retval; + } + size_t size() const{ + return N; + } + + bitset& operator=(const bitset & rhs){ + if(&rhs == this){ + return *this; + } + for(size_t i = 0; i <= byte_num(N); ++i){ + data[i] = rhs.data[i]; + } + return *this; + } + + + bool operator==(const bitset& rhs) const{ + for(size_t i =0; i< N; ++i){ + if(test(i) != rhs.test(i)){ + return false; + } + } + return true; + } + + bool operator!=(const bitset& rhs) const{ + for(size_t i =0; i< N; ++i){ + if(test(i) != rhs.test(i)){ + return true; + } + } + return false; + } + + bool test(size_t pos) const{ + return (data[byte_num(pos)] & (1< operator<<(size_t pos) const{ + bitset retval(*this); + retval<<=pos; + return retval; + } + bitset operator>>(size_t pos) const{ + bitset retval(*this); + retval>>=pos; + return retval; + } + }; + + //Non-member functions + + + template _UCXXEXPORT bitset operator&(const bitset& lhs, const bitset& rhs){ + bitset retval(lhs); + retval &= rhs; + return retval; + } + + template _UCXXEXPORT bitset operator|(const bitset& lhs, const bitset& rhs){ + bitset retval(lhs); + retval |= rhs; + return retval; + } + + template _UCXXEXPORT bitset operator^(const bitset& lhs, const bitset& rhs){ + bitset retval(lhs); + retval ^= rhs; + return retval; + } + + template _UCXXEXPORT basic_istream& + operator>>(basic_istream& is, bitset& x) + { + string s; + charT c; + for(size_t i = 0; i < N; ++i){ + is.get(c); + if(!is.good()){ + break; + } + if(c != '1' && c !='0'){ + is.putback(c); + break; + } + s+=c; + } + bitset temp(s); + x = temp; + + return is; + } + + template _UCXXEXPORT basic_ostream& + operator<<(basic_ostream& os, const bitset& x) + { + for(size_t i = N ; i > 0; --i){ + if(x.test(i-1) == true){ + os << "1"; + }else{ + os << "0"; + } + } + return os; + } + + + + +} + +#pragma GCC visibility pop + +#endif + diff --git a/external/arduino/stlarduino/bitset.cpp b/external/arduino/stlarduino/bitset.cpp new file mode 100644 index 000000000..f1ece31f9 --- /dev/null +++ b/external/arduino/stlarduino/bitset.cpp @@ -0,0 +1,26 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*/ + +#include + +namespace std{ + + + +} diff --git a/external/arduino/stlarduino/cassert b/external/arduino/stlarduino/cassert new file mode 100644 index 000000000..dc590dd1a --- /dev/null +++ b/external/arduino/stlarduino/cassert @@ -0,0 +1,19 @@ +/* Copyright (C) 2005 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include diff --git a/external/arduino/stlarduino/cctype b/external/arduino/stlarduino/cctype new file mode 100644 index 000000000..ef12b1f52 --- /dev/null +++ b/external/arduino/stlarduino/cctype @@ -0,0 +1,37 @@ +/* Copyright (C) 2006 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include + +namespace std{ + + using ::isalnum; + using ::isalpha; + using ::iscntrl; + using ::isdigit; + using ::isgraph; + using ::islower; + using ::isprint; + using ::ispunct; + using ::isspace; + using ::isupper; + using ::isxdigit; + using ::tolower; + using ::toupper; + +} diff --git a/external/arduino/stlarduino/cerrno b/external/arduino/stlarduino/cerrno new file mode 100644 index 000000000..b779c5cf0 --- /dev/null +++ b/external/arduino/stlarduino/cerrno @@ -0,0 +1,19 @@ +/* Copyright (C) 2005 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include diff --git a/external/arduino/stlarduino/cfloat b/external/arduino/stlarduino/cfloat new file mode 100644 index 000000000..d2ab703f5 --- /dev/null +++ b/external/arduino/stlarduino/cfloat @@ -0,0 +1,30 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include + +#ifndef __STD_HEADER_CFLOAT +#define __STD_HEADER_CFLOAT 1 + + +#include + + +#endif + diff --git a/external/arduino/stlarduino/char_traits b/external/arduino/stlarduino/char_traits new file mode 100644 index 000000000..36eae3615 --- /dev/null +++ b/external/arduino/stlarduino/char_traits @@ -0,0 +1,198 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include +#include +#include +#include + +#ifdef __UCLIBCXX_HAS_WCHAR__ +#include +#include +#endif + +#ifndef __HEADER_CHAR_TRAITS +#define __HEADER_CHAR_TRAITS 1 + +namespace std{ + /* Inlining all wrapped function calls to shrink the amount of code generated*/ + //Typedefs to use for stuff + typedef signed int char_traits_off_type; + + //Generic char_traits + template struct _UCXXEXPORT char_traits { }; + + //Specialize for char + template<> struct _UCXXEXPORT char_traits { + typedef char char_type; + typedef short int int_type; + typedef char_traits_off_type off_type; + typedef char_traits_off_type pos_type; + typedef char state_type; + + inline static void assign(char_type & c, const char_type & d) { c = d; } + + static bool eq(const char_type& c1, const char_type& c2); + + static char_type to_char_type(const int_type & i); + + inline static int_type to_int_type(const char_type & c){ + return (short int)(unsigned char)c; + } + + inline static bool eq_int_type(const int_type & a, const int_type & b){ + if(a==b){ + return true; + } + return false; + } + + + inline static bool lt(const char_type& c1, const char_type& c2){ + if(strncmp(&c1, &c2, 1) < 0){ + return true; + } + return false; + } + + inline static char_type* move(char_type* s1, const char_type* s2, size_t n){ + return (char*) memmove(s1, s2, n); + } + + inline static char_type* copy(char_type* s1, const char_type* s2, size_t n){ + for(unsigned long int i=0; i< n; ++i){ + assign(s1[i], s2[i]); + } + return s1 + n; + } + + inline static char_type* assign(char_type* s, size_t n, char_type a){ + return (char *)memset(s, a, n); + } + + inline static int compare(const char_type* s1, const char_type* s2, size_t n){ + return strncmp(s1, s2, n); + } + + inline static size_t length(const char_type* s){ + return strlen(s); + } + + static const char_type* find(const char_type* s, int n, const char_type& a); + + inline static char_type eos() { return 0; } + inline static int_type eof() { return -1; } + inline static int_type not_eof(const int_type & i) { + if(i == -1){ + return 0; + } else { + return i; + } + } + static state_type get_state(pos_type p){ + p = p; + state_type a; + return a; + } + }; + + +#ifdef __UCLIBCXX_HAS_WCHAR__ + template<> struct _UCXXEXPORT char_traits { + typedef wchar_t char_type; + typedef wint_t int_type; + typedef char_traits_off_type off_type; + typedef char_traits_off_type pos_type; + typedef mbstate_t state_type; + + static void assign(char_type & c, const char_type & d){ c=d; } + + static char_type to_char_type(const int_type & i){ + return i; + } + + static int_type to_int_type(const char_type & c){ + return c; + } + + inline static bool eq_int_type(const int_type & a, const int_type & b){ + if(a==b){ + return true; + } + return false; + } + + inline static bool eq(const char_type& c1, const char_type& c2){ + if(wcsncmp(&c1, &c2, 1) == 0){ + return true; + } + return false; + } + + inline static bool lt(const char_type& c1, const char_type& c2){ + if(wcsncmp(&c1, &c2, 1) < 0){ + return true; + } + return false; + } + + inline static char_type* move(char_type* s1, const char_type* s2, size_t n){ + return (char_type*) memmove(s1, s2, n * sizeof(char_type)); + } + + inline static char_type* copy(char_type* s1, const char_type* s2, size_t n){ + for(unsigned long int i=0; i< n; ++i){ + assign(s1[i], s2[i]); + } + return s1 + n; + } + + inline static char_type* assign(char_type* s, size_t n, char_type a){ + return (char_type *)memset(s, a, n); /*FIXME*/ + } + + inline static int compare(const char_type* s1, const char_type* s2, size_t n){ + return wcsncmp(s1, s2, n); + } + + inline static size_t length(const char_type* s){ + return wcslen(s); + } + + static const char_type* find(const char_type* s, int n, const char_type& a); + + inline static char_type eos() { return 0; } + inline static int_type eof() { return WEOF; } + inline static int_type not_eof(const int_type & i) { + if(i == WEOF){ + return (int_type)0; + } else { + return i; + } + } + static state_type get_state(pos_type){ + state_type a; + return a; + } + }; +#endif + +} + +#endif + diff --git a/external/arduino/stlarduino/char_traits.cpp b/external/arduino/stlarduino/char_traits.cpp new file mode 100644 index 000000000..2a91bd97f --- /dev/null +++ b/external/arduino/stlarduino/char_traits.cpp @@ -0,0 +1,69 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*/ + +#define __UCLIBCXX_COMPILE_CHAR_TRAITS__ 1 + + +#include +#include + +namespace std{ + +_UCXXEXPORT const char_traits::char_type* char_traits::find(const char_type* s, int n, const char_type& a){ + for(int i=0; i < n; i++){ + if(eq(s[i], a)){ + return (s+i); + } + } + return 0; +} + +_UCXXEXPORT bool char_traits::eq(const char_type& c1, const char_type& c2){ + if(strncmp(&c1, &c2, 1) == 0){ + return true; + } + return false; +} + +_UCXXEXPORT char_traits::char_type char_traits::to_char_type(const int_type & i){ + if(i > 0 && i <= 255){ + return (char)(unsigned char)i; + } + + //Out of range + return 0; +} + + + +#ifdef __UCLIBCXX_HAS_WCHAR__ + +_UCXXEXPORT const char_traits::char_type* char_traits::find(const char_type* s, int n, const char_type& a){ + for(int i=0; i < n; i++){ + if(eq(s[i], a)){ + return (s+i); + } + } + return 0; +} + +#endif + +} diff --git a/external/arduino/stlarduino/climits b/external/arduino/stlarduino/climits new file mode 100644 index 000000000..7d39780b5 --- /dev/null +++ b/external/arduino/stlarduino/climits @@ -0,0 +1,28 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#ifndef __STD_HEADER_CLIMITS +#define __STD_HEADER_CLIMITS 1 + + +#include + + +#endif + diff --git a/external/arduino/stlarduino/clocale b/external/arduino/stlarduino/clocale new file mode 100644 index 000000000..4f3cd6943 --- /dev/null +++ b/external/arduino/stlarduino/clocale @@ -0,0 +1,30 @@ +/* Copyright (C) 2005 Garrett A. Kajmowicz + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#ifndef __STD_HEADER_CLOCALE +#define __STD_HEADER_CLOCALE 1 + +#include + +namespace std { + using ::lconv; + using ::setlocale; + using ::localeconv; +} + +#endif // __STD_HEADER_CLOCALE diff --git a/external/arduino/stlarduino/cmath b/external/arduino/stlarduino/cmath new file mode 100644 index 000000000..5409e6472 --- /dev/null +++ b/external/arduino/stlarduino/cmath @@ -0,0 +1,234 @@ +/* Copyright (C) 2006 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include + +#ifndef __STD_HEADER_CMATH +#define __STD_HEADER_CMATH 1 + +#undef abs +#undef acos +#undef asin +#undef atan +#undef atan2 +#undef ceil +#undef cos +#undef cosh +#undef exp +#undef fabs +#undef floor +#undef fmod +#undef frexp +#undef ldexp +#undef log +#undef log10 +#undef modf +#undef pow +#undef sin +#undef sinh +#undef sqrt +#undef tan +#undef tanh + +namespace std { + + using ::acos; + using ::asin; + using ::atan; + using ::atan2; + using ::ceil; + using ::cos; + using ::cosh; + using ::exp; + using ::fabs; + using ::floor; + using ::fmod; + using ::frexp; + using ::ldexp; + using ::log; + using ::log10; + using ::modf; + using ::pow; + using ::sin; + using ::sinh; + using ::sqrt; + using ::tan; + using ::tanh; + +#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO + inline float abs (float x){ + return fabsf(x); + } + inline float acos (float x){ + return acosf(x); + } + inline float asin (float x){ + return asinf(x); + } + inline float atan (float x){ + return atanf(x); + } + inline float atan2(float y, float x){ + return atan2f(y, x); + } + inline float ceil (float x){ + return ceilf(x); + } + inline float cos (float x){ + return cosf(x); + } + inline float cosh (float x){ + return coshf(x); + } + inline float exp (float x){ + return expf(x); + } + inline float fabs (float x){ + return fabsf(x); + } + inline float floor(float x){ + return floorf(x); + } + inline float fmod (float x, float y){ + return fmodf(x, y); + } + inline float frexp(float x, int* exp){ + return frexpf(x, exp); + } + inline float ldexp(float x, int exp){ + return ldexpf(x, exp); + } + inline float log (float x){ + return logf(x); + } + inline float log10(float x){ + return log10f(x); + } + inline float modf (float x, float* inptr){ + return modff(x, inptr); + } + inline float pow (float x, float y){ + return powf(x, y); + } +#if 1 // DR 550 removed this + inline float pow (float x, int y){ + return pow((double)x, (double)y); + } +#endif + inline float sin (float x){ + return sinf(x); + } + inline float sinh (float x){ + return sinhf(x); + } + inline float sqrt (float x){ + return sqrtf(x); + } + inline float tan (float x){ + return tanf(x); + } + inline float tanh (float x){ + return tanhf(x); + } + inline double abs(double x){ + return fabs(x); + } + inline double pow(double x, int y){ + return pow((double)x, (double)y); + } + +# ifdef __UCLIBCXX_HAS_LONG_DOUBLE__ + inline long double abs (long double x){ + return fabsl(x); + } + inline long double acos (long double x){ + return acosl(x); + } + inline long double asin (long double x){ + return asinl(x); + } + inline long double atan (long double x){ + return atanl(x); + } + inline long double atan2(long double y, long double x){ + return atan2l(y, x); + } + inline long double ceil (long double x){ + return ceill(x); + } + inline long double cos (long double x){ + return cosl(x); + } + inline long double cosh (long double x){ + return coshl(x); + } + inline long double exp (long double x){ + return expl(x); + } + inline long double fabs (long double x){ + return fabsl(x); + } + inline long double floor(long double x){ + return floorl(x); + } + inline long double frexp(long double x, int* exp){ + return frexpl(x, exp); + } + inline long double fmod (long double x, long double y){ + return fmodl(x, y); + } + inline long double ldexp(long double x, int y){ + return ldexpl(x, y); + } + inline long double log (long double x){ + return logl(x); + } + inline long double log10(long double x){ + return log10l(x); + } + inline long double modf (long double x, long double* iptr){ + return modfl(x, iptr); + } + inline long double pow (long double x, long double y){ + return powl(x, y); + } + inline long double pow (long double x, int y){ + return powl(x, (long double)y ); + } + inline long double sin (long double x){ + return sinl(x); + } + inline long double sinh (long double x){ + return sinhl(x); + } + inline long double sqrt (long double x){ + return sqrtl(x); + } + inline long double tan (long double x){ + return tanl(x); + } + inline long double tanh (long double x){ + return tanhl(x); + } +# endif // __UCLIBCXX_HAS_LONG_DOUBLE__ +#endif // __CORRECT_ISO_CPP_MATH_H_PROTO +} + +#endif //__STD_HEADER_CMATH + diff --git a/external/arduino/stlarduino/complex b/external/arduino/stlarduino/complex new file mode 100644 index 000000000..61e489ede --- /dev/null +++ b/external/arduino/stlarduino/complex @@ -0,0 +1,327 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include +#include + +#ifndef __STD_HEADER_COMPLEX +#define __STD_HEADER_COMPLEX 1 + + +namespace std { +// class complex; +// class complex; +// class complex; + + template class _UCXXEXPORT complex{ + public: + typedef T value_type; + + complex(const T& re = T(), const T& im = T()) : r(re), i(im) { } + complex(const complex& c): r(c.r), i(c.i){ } + template complex(const complex& c): r(c.r), i(c.i){ } + + inline T real() const{ + return r; + } + inline T imag() const{ + return i; + } + + complex& operator= (const T& v){ + r = v; + i = 0; + return *this; + } + complex& operator+=(const T& v){ + r +=v; + return *this; + } + complex& operator-=(const T& v){ + r -=v; + return *this; + } + complex& operator*=(const T& v){ + r*=v; + i*=v; + return *this; + } + complex& operator/=(const T& v){ + r/=v; + i/=v; + return *this; + } + complex& operator=(const complex& v){ + if(&v != this){ + r = v.r; + i = v.i; + } + return *this; + } + template complex& operator= (const complex& v){ + r = v.r; + i = v.i; + return *this; + } + template complex& operator+=(const complex& v){ + r+=v.r; + i+=v.i; + return *this; + } + template complex& operator-=(const complex& v){ + r-=v.r; + i-=v.i; + return *this; + } + template complex& operator*=(const complex& v){ + T tempr = r*v.r - i*v.i; + T tempi = r*v.i + i*v.r; + r = tempr; + i = tempi; + return *this; + } + template complex& operator/=(const complex& v){ + T tempr = (r*v.r + i*v.i) / (v.r*v.r + v.i*v.i); + T tempi = (i*v.r - r*v.i) / (v.r*v.r + v.i*v.i); + r = tempr; + i = tempi; + return *this; + } + private: + T r; + T i; + }; + + template _UCXXEXPORT complex operator+(const complex& ls, const complex& rs){ + complex retval(ls); + retval += rs; + return retval; + } + template _UCXXEXPORT complex operator+(const complex& ls, const T& rs){ + complex retval(ls); + ls += rs; + return retval; + } + template _UCXXEXPORT inline complex operator+(const T& ls, const complex& rs){ + return rs + ls; + } + template _UCXXEXPORT complex operator-(const complex& ls, const complex& rs){ + complex retval(ls); + retval -= rs; + return retval; + } + template _UCXXEXPORT complex operator-(const complex& ls, const T& rs){ + complex retval(ls); + retval -= rs; + return retval; + } + template _UCXXEXPORT complex operator-(const T& ls, const complex& rs){ + complex retval(ls); + retval -= rs; + return retval; + } + template _UCXXEXPORT complex operator*(const complex& ls, const complex& rs){ + complex retval(ls); + retval *= rs; + return retval; + } + template _UCXXEXPORT complex operator*(const complex& ls, const T& rs){ + complex retval(ls); + retval *= rs; + return retval; + } + template _UCXXEXPORT complex operator*(const T& ls, const complex& rs){ + complex retval(ls); + retval *=rs; + return retval; + } + template _UCXXEXPORT complex operator/(const complex& ls, const complex& rs){ + complex retval(ls); + retval/=rs; + return retval; + } + template _UCXXEXPORT complex operator/(const complex& ls, const T& rs){ + complex retval(ls); + retval/=rs; + return retval; + } + template _UCXXEXPORT complex operator/(const T& ls, const complex& rs){ + complex retval(ls); + retval/=rs; + return retval; + } + template _UCXXEXPORT complex operator+(const complex& v){ + return v; + } + template _UCXXEXPORT complex operator-(const complex& v){ + return complex (-v.real(), -v.imag()); + } + template _UCXXEXPORT bool operator==(const complex& ls, const complex& rs){ + if( ls.real() == rs.real() && ls.imag() == rs.image()){ + return true; + } + return false; + } + template _UCXXEXPORT bool operator==(const complex& ls, const T& rs){ + if(ls.real() == rs && ls.imag() == T()){ + return true; + } + return false; + } + template _UCXXEXPORT bool operator==(const T& ls, const complex& rs){ + if(ls == rs.real() && rs.imag() == T()){ + return true; + } + return false; + } + template _UCXXEXPORT bool operator!=(const complex& ls, const complex& rs){ + if(ls == rs){ + return false; + } + return true; + } + template _UCXXEXPORT bool operator!=(const complex& ls, const T& rs){ + if(ls == rs){ + return false; + } + return true; + } + template _UCXXEXPORT bool operator!=(const T& ls, const complex& rs){ + if(ls == rs){ + return false; + } + return true; + } + template _UCXXEXPORT basic_istream& + operator>>(basic_istream& is, complex& v) + { + T tempr; + T tempi; + is >> tempr; + is.get(); + is >> tempi; + v = complex(tempr, tempi); + return is; + } + + template _UCXXEXPORT basic_ostream& + operator<<(basic_ostream& os, const complex&v) + { + os << v.real() << ", " << v.imag(); + return os; + } + + template _UCXXEXPORT T real(const complex& v){ + return v.real(); + } + + template _UCXXEXPORT T imag(const complex& v){ + return v.imag(); + } + + template _UCXXEXPORT T norm(const complex& v){ + return (v.real() * v.real() + v.imag() * v.imag()); + } + + template _UCXXEXPORT complex conj(const complex& v){ + return complex(v.real(), -v.imag()); + } + +#ifdef __UCLIBCXX_SUPPORT_MATH__ //Can we link with libm? + + template _UCXXEXPORT T abs(const complex& v){ + return sqrt(v.real() * v.real() + v.imag() * v.imag()); + } + + template _UCXXEXPORT T arg(const complex& v){ + return atan2(v.imag(), v.real()); + } + + template _UCXXEXPORT complex polar(const T& rho, const T& theta){ + return complex(rho * cos(theta), rho * sin(theta)); + } + + template _UCXXEXPORT complex cos (const complex& v){ + return complex(cos(v.real()) * cosh(v.imag()), -sin(v.real()) * sinh(v.imag())); + } + + template _UCXXEXPORT complex cosh (const complex& v){ + return complex(cosh(v.real()) * cos(v.imag()), sinh(v.real()) * sin(v.imag())); + } + + template _UCXXEXPORT complex exp (const complex& v){ + return polar(exp(v.real()), v.imag()); + } + + template _UCXXEXPORT complex log (const complex& v){ + return complex(log(abs(v)), arg(v)); + } + + template _UCXXEXPORT complex log10(const complex& v){ + return (log(v) / log(T(10.0))); + } + + template _UCXXEXPORT complex pow(const complex& v, int p){ + T rho = pow(abs(v), p); + T theta = arg(v); + return complex(rho * cos(p * theta), rho * sin(p * theta) ); + } + + template _UCXXEXPORT complex pow(const complex& v, const T& p){ + return polar( pow(abs(v),p), arg(v)*p ); + } + + template _UCXXEXPORT complex pow(const complex& v, const complex& p){ + if(v == T()){ + //We are using "0" as the value + return T(); + } + return exp(p * log(v)); + } + + template _UCXXEXPORT complex pow(const T& v, const complex& p){ + if(v == T()){ + return T(); + } + return polar(pow(v,p.real()), p.imag() * log(x) ); + } + + template _UCXXEXPORT complex sin (const complex& v){ + return complex(sin(v.real()) * cosh(v.imag()), cosh(v.real()) * sin(v.imag())); + } + + template _UCXXEXPORT complex sinh (const complex& v){ + return complex(sinh(v.real()) * cos(v.imag()), cosh(v.real()) * sin(v.imag()) ); + } + + template _UCXXEXPORT complex sqrt (const complex&); + template _UCXXEXPORT complex tan (const complex& v){ + return sin(v) / cos(v); + } + + template _UCXXEXPORT complex tanh (const complex& v){ + return sinh(v) / cosh(v); + } + +#endif + +} + +#endif + diff --git a/external/arduino/stlarduino/complex.cpp b/external/arduino/stlarduino/complex.cpp new file mode 100644 index 000000000..6b895a888 --- /dev/null +++ b/external/arduino/stlarduino/complex.cpp @@ -0,0 +1,28 @@ +/* Copyright (C) 2005 Garrett A. Kajmowicz + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include + + +namespace std{ + + + template class _UCXXEXPORT complex; + + +} diff --git a/external/arduino/stlarduino/csetjmp b/external/arduino/stlarduino/csetjmp new file mode 100644 index 000000000..a11f932e8 --- /dev/null +++ b/external/arduino/stlarduino/csetjmp @@ -0,0 +1,44 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include + +#ifndef __STD_HEADER_CSETJMP +#define __STD_HEADER_CSETJMP 1 + + +//From GCC Header files +#undef longjmp + +// Adhere to section 17.4.1.2 clause 5 of ISO 14882:1998 +#ifndef setjmp +#define setjmp(env) setjmp (env) +#endif + +//Mine again + + +namespace std{ + using ::longjmp; + using ::jmp_buf; +} + + +#endif + diff --git a/external/arduino/stlarduino/csignal b/external/arduino/stlarduino/csignal new file mode 100644 index 000000000..1017161d6 --- /dev/null +++ b/external/arduino/stlarduino/csignal @@ -0,0 +1,61 @@ +// -*- C++ -*- forwarding header. + +// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 +// Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 2, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING. If not, write to the Free +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, +// USA. + +// As a special exception, you may use this file as part of a free software +// library without restriction. Specifically, if other files instantiate +// templates or use macros or inline functions from this file, or you compile +// this file and link it with other files to produce an executable, this +// file does not by itself cause the resulting executable to be covered by +// the GNU General Public License. This exception does not however +// invalidate any other reasons why the executable file might be covered by +// the GNU General Public License. + +// +// ISO C++ 14882: 20.4.6 C library +// + +/** @file csignal + * This is a Standard C++ Library file. You should @c #include this file + * in your programs, rather than any of the "*.h" implementation files. + * + * This is the C++ version of the Standard C Library header @c signal.h, + * and its contents are (mostly) the same as that header, but are all + * contained in the namespace @c std. + */ + +#ifndef _CPP_CSIGNAL +#define _CPP_CSIGNAL 1 + +#pragma GCC system_header + +#include + +// Get rid of those macros defined in in lieu of real functions. +#undef raise + +namespace std +{ + using ::sig_atomic_t; + using ::signal; + using ::raise; +} + +#endif diff --git a/external/arduino/stlarduino/cstdarg b/external/arduino/stlarduino/cstdarg new file mode 100644 index 000000000..9383adee9 --- /dev/null +++ b/external/arduino/stlarduino/cstdarg @@ -0,0 +1,60 @@ +// -*- C++ -*- forwarding header. + +// Copyright (C) 1997, 1998, 1999, 2000, 2002 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 2, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING. If not, write to the Free +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, +// USA. + +// As a special exception, you may use this file as part of a free software +// library without restriction. Specifically, if other files instantiate +// templates or use macros or inline functions from this file, or you compile +// this file and link it with other files to produce an executable, this +// file does not by itself cause the resulting executable to be covered by +// the GNU General Public License. This exception does not however +// invalidate any other reasons why the executable file might be covered by +// the GNU General Public License. + +// +// ISO C++ 14882: 20.4.6 C library +// + +/** @file cstdarg + * This is a Standard C++ Library file. You should @c #include this file + * in your programs, rather than any of the "*.h" implementation files. + * + * This is the C++ version of the Standard C Library header @c stdarg.h, + * and its contents are (mostly) the same as that header, but are all + * contained in the namespace @c std. + */ + +#ifndef _CPP_CSTDARG +#define _CPP_CSTDARG 1 + +#pragma GCC system_header + +#include + +// Adhere to section 17.4.1.2 clause 5 of ISO 14882:1998 +#ifndef va_end +#define va_end(ap) va_end (ap) +#endif + +namespace std +{ + using ::va_list; +} + +#endif diff --git a/external/arduino/stlarduino/cstddef b/external/arduino/stlarduino/cstddef new file mode 100644 index 000000000..d44834b5f --- /dev/null +++ b/external/arduino/stlarduino/cstddef @@ -0,0 +1,58 @@ +// -*- C++ -*- forwarding header. + +// Copyright (C) 1997, 1998, 1999, 2000, 2002 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 2, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING. If not, write to the Free +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, +// USA. + +// As a special exception, you may use this file as part of a free software +// library without restriction. Specifically, if other files instantiate +// templates or use macros or inline functions from this file, or you compile +// this file and link it with other files to produce an executable, this +// file does not by itself cause the resulting executable to be covered by +// the GNU General Public License. This exception does not however +// invalidate any other reasons why the executable file might be covered by +// the GNU General Public License. + +// +// ISO C++ 14882: 18.1 Types +// + +/** @file cstddef + * This is a Standard C++ Library file. You should @c #include this file + * in your programs, rather than any of the "*.h" implementation files. + * + * This is the C++ version of the Standard C Library header @c stddef.h, + * and its contents are (mostly) the same as that header, but are all + * contained in the namespace @c std. + */ + +#ifndef _CPP_CSTDDEF +#define _CPP_CSTDDEF 1 + +#ifdef __GCC__ +#pragma GCC system_header +#endif + +#include + +namespace std +{ + using ::ptrdiff_t; + using ::size_t; +} + +#endif diff --git a/external/arduino/stlarduino/cstdio b/external/arduino/stlarduino/cstdio new file mode 100644 index 000000000..8f4df276c --- /dev/null +++ b/external/arduino/stlarduino/cstdio @@ -0,0 +1,77 @@ +/* Copyright (C) 2006 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation version 2.1 + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include +#include + +#ifndef __HEADER_CSTDIO +#define __HEADER_CSTDIO 1 + + +namespace std{ + using ::FILE; + using ::fpos_t; + + using ::clearerr; + using ::fclose; + using ::feof; + using ::ferror; + using ::fflush; + using ::fgetc; + using ::fgetpos; + using ::fgets; + using ::fopen; + using ::fprintf; + using ::fputc; + using ::fputs; + using ::fread; + using ::freopen; + using ::fscanf; + using ::fseek; + using ::fsetpos; + using ::ftell; + using ::fwrite; + using ::getc; + using ::getchar; +#if __cplusplus <= 201103L + using ::gets; +#endif + using ::perror; + using ::printf; + using ::putc; + using ::putchar; + using ::puts; + using ::remove; + using ::rename; + using ::rewind; + using ::scanf; + using ::setbuf; + using ::setvbuf; + using ::sprintf; + using ::sscanf; + using ::tmpfile; + using ::tmpnam; + using ::ungetc; + using ::vfprintf; + using ::vprintf; + using ::vsprintf; +} + + + +#endif + diff --git a/external/arduino/stlarduino/cstdlib b/external/arduino/stlarduino/cstdlib new file mode 100644 index 000000000..e45261aa7 --- /dev/null +++ b/external/arduino/stlarduino/cstdlib @@ -0,0 +1,72 @@ +/* Copyright (C) 2005 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include +#include + +#ifndef __HEADER_CSTDLIB +#define __HEADER_CSTDLIB 1 + + +namespace std{ + using ::abort; + using ::abs; + using ::atexit; + using ::atol; + using ::atof; + using ::atoi; + using ::bsearch; + using ::calloc; + using ::div; + using ::exit; + using ::free; + using ::getenv; + using ::labs; + using ::ldiv; + using ::malloc; + using ::qsort; + using ::rand; + using ::realloc; + using ::srand; + using ::strtod; + using ::strtol; + using ::strtoul; + using ::system; +#ifdef __UCLIBCXX_HAS_WCHAR__ + using ::mblen; + using ::mbstowcs; + using ::mbtowc; + using ::wctomb; + using ::wcstombs; +#endif + +/* Defined in Arduino + inline long abs(long i){ + return labs(i); + } +*/ + inline ldiv_t div(long i, long j){ + return ldiv(i, j); + } + +} + + + +#endif + diff --git a/external/arduino/stlarduino/cstring b/external/arduino/stlarduino/cstring new file mode 100644 index 000000000..de8589b3c --- /dev/null +++ b/external/arduino/stlarduino/cstring @@ -0,0 +1,77 @@ +/* Copyright (C) 2005 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include +#include + +#ifndef __HEADER_CSTRING +#define __HEADER_CSTRING 1 + + +namespace std{ + + using ::memchr; + using ::memcmp; + using ::memcpy; + using ::memmove; + using ::memset; + using ::strcat; + using ::strchr; + using ::strcmp; + using ::strcoll; + using ::strcpy; + using ::strcspn; + using ::strerror; + using ::strlen; + using ::strncat; + using ::strncmp; + using ::strncpy; + using ::strpbrk; + using ::strrchr; + using ::strspn; + using ::strstr; + using ::strtok; + using ::strxfrm; + +#ifndef __CORRECT_ISO_CPP_STRING_H_PROTO + //Extra definitions required in c++ spec + + inline void* memchr(void* s, int c, size_t n){ + return memchr(const_cast(s), c, n); + } + + inline char* strchr(char* s, int c){ + return strchr(const_cast(s), c); + } + + inline char* strpbrk(char* s1, const char* s2){ + return strpbrk(const_cast(s1), s2); + } + + inline char* strrchr(char* s, int c){ + return strrchr(const_cast(s), c); + } + + inline char* strstr(char* s1, const char* s2){ + return strstr(const_cast(s1), s2); + } +#endif +} + +#endif + diff --git a/external/arduino/stlarduino/ctime b/external/arduino/stlarduino/ctime new file mode 100644 index 000000000..1b4c09b77 --- /dev/null +++ b/external/arduino/stlarduino/ctime @@ -0,0 +1,81 @@ +// -*- C++ -*- forwarding header. + +// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 +// Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 2, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING. If not, write to the Free +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, +// USA. + +// As a special exception, you may use this file as part of a free software +// library without restriction. Specifically, if other files instantiate +// templates or use macros or inline functions from this file, or you compile +// this file and link it with other files to produce an executable, this +// file does not by itself cause the resulting executable to be covered by +// the GNU General Public License. This exception does not however +// invalidate any other reasons why the executable file might be covered by +// the GNU General Public License. + +// +// ISO C++ 14882: 20.5 Date and time +// + +/** @file ctime + * This is a Standard C++ Library file. You should @c #include this file + * in your programs, rather than any of the "*.h" implementation files. + * + * This is the C++ version of the Standard C Library header @c time.h, + * and its contents are (mostly) the same as that header, but are all + * contained in the namespace @c std. + */ + +#ifndef _CPP_CTIME +#define _CPP_CTIME 1 + +#pragma GCC system_header + +#include + +#include + +// Get rid of those macros defined in in lieu of real functions. +#undef clock +#undef difftime +#undef mktime +#undef time +#undef asctime +#undef ctime +#undef gmtime +#undef localtime +#undef strftime + +namespace std +{ + using ::clock_t; + using ::time_t; + using ::tm; + + using ::clock; + using ::difftime; + using ::mktime; + using ::time; + using ::asctime; + using ::ctime; + using ::gmtime; + using ::localtime; + using ::strftime; +} + +#endif diff --git a/external/arduino/stlarduino/cwchar b/external/arduino/stlarduino/cwchar new file mode 100644 index 000000000..03fae09d1 --- /dev/null +++ b/external/arduino/stlarduino/cwchar @@ -0,0 +1,86 @@ +/* Copyright (C) 2006 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation version 2.1 + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include +#include + +#ifndef __HEADER_CWCHAR +#define __HEADER_CWCHAR 1 + + +namespace std{ + using ::mbstate_t; + using ::wint_t; + + using ::btowc; + using ::fgetwc; + using ::fgetws; + using ::fputwc; + using ::fputws; + using ::fwide; + using ::fwprintf; + using ::fwscanf; + using ::getwc; + using ::getwchar; + using ::mbrlen; + using ::mbrtowc; + using ::mbsinit; + using ::mbsrtowcs; + using ::putwc; + using ::putwchar; + using ::swprintf; + using ::swscanf; + using ::ungetwc; + using ::vfwprintf; + using ::vswprintf; + using ::vwprintf; + using ::wcrtomb; + using ::wcscat; + using ::wcschr; + using ::wcscmp; + using ::wcscoll; + using ::wcscpy; + using ::wcscspn; + using ::wcsftime; + using ::wcslen; + using ::wcsncat; + using ::wcsncmp; + using ::wcsncpy; + using ::wcspbrk; + using ::wcsrchr; + using ::wcsrtombs; + using ::wcsspn; + using ::wcsstr; + using ::wcstod; + using ::wcstok; + using ::wcstol; + using ::wcstoul; + using ::wcsxfrm; + using ::wctob; + using ::wmemchr; + using ::wmemcmp; + using ::wmemcpy; + using ::wmemmove; + using ::wmemset; + using ::wprintf; + using ::wscanf; +} + + + +#endif + diff --git a/external/arduino/stlarduino/cwctype b/external/arduino/stlarduino/cwctype new file mode 100644 index 000000000..5e4b60538 --- /dev/null +++ b/external/arduino/stlarduino/cwctype @@ -0,0 +1,106 @@ +// -*- C++ -*- forwarding header. + +// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 +// Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 2, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING. If not, write to the Free +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, +// USA. + +// As a special exception, you may use this file as part of a free software +// library without restriction. Specifically, if other files instantiate +// templates or use macros or inline functions from this file, or you compile +// this file and link it with other files to produce an executable, this +// file does not by itself cause the resulting executable to be covered by +// the GNU General Public License. This exception does not however +// invalidate any other reasons why the executable file might be covered by +// the GNU General Public License. + +// +// ISO C++ 14882: +// + +/** @file cwctype + * This is a Standard C++ Library file. You should @c #include this file + * in your programs, rather than any of the "*.h" implementation files. + * + * This is the C++ version of the Standard C Library header @c wctype.h, + * and its contents are (mostly) the same as that header, but are all + * contained in the namespace @c std. + */ + +#ifndef _CPP_CWCTYPE +#define _CPP_CWCTYPE 1 + +#pragma GCC system_header + +//#include + +#ifdef __UCLIBCXX_HAS_WCHAR__ +#include +#endif + +// Get rid of those macros defined in in lieu of real functions. +#undef iswalnum +#undef iswalpha +#undef iswblank +#undef iswcntrl +#undef iswdigit +#undef iswgraph +#undef iswlower +#undef iswprint +#undef iswprint +#undef iswpunct +#undef iswspace +#undef iswupper +#undef iswxdigit +#undef iswctype +#undef towlower +#undef towupper +#undef towctrans +#undef wctrans +#undef wctype + +#if __UCLIBCXX_HAS_WCHAR__ +namespace std +{ + using ::wint_t; // cwchar + + using ::wctype_t; + using ::wctrans_t; + + using ::iswalnum; + using ::iswalpha; + using ::iswblank; + using ::iswcntrl; + using ::iswdigit; + using ::iswgraph; + using ::iswlower; + using ::iswprint; + using ::iswprint; + using ::iswpunct; + using ::iswspace; + using ::iswupper; + using ::iswxdigit; + using ::iswctype; + using ::towlower; + using ::towupper; + using ::towctrans; + using ::wctrans; + using ::wctype; +} +#endif //__ULIBCXX_HAS_WCHAR__ + +#endif diff --git a/external/arduino/stlarduino/del_op.cpp b/external/arduino/stlarduino/del_op.cpp new file mode 100644 index 000000000..e6b584fca --- /dev/null +++ b/external/arduino/stlarduino/del_op.cpp @@ -0,0 +1,31 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +// Arduino 1.0 contains an implementation for this. +#if ARDUINO < 100 + +#include +#include +#include + +_UCXXEXPORT void operator delete(void* ptr) throw(){ + free(ptr); +} + +#endif diff --git a/external/arduino/stlarduino/del_opnt.cpp b/external/arduino/stlarduino/del_opnt.cpp new file mode 100644 index 000000000..96cb03baa --- /dev/null +++ b/external/arduino/stlarduino/del_opnt.cpp @@ -0,0 +1,28 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include +#include +#include + +#ifndef NO_NOTHROW +_UCXXEXPORT void operator delete(void* ptr, const std::nothrow_t& ) throw() { + free(ptr); +} +#endif diff --git a/external/arduino/stlarduino/del_ops.cpp b/external/arduino/stlarduino/del_ops.cpp new file mode 100644 index 000000000..e292b0371 --- /dev/null +++ b/external/arduino/stlarduino/del_ops.cpp @@ -0,0 +1,27 @@ +/* Copyright (C) 2015 Bernhard Reutner-Fischer + + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ +/* C++14 sized deallocation */ + +#include +#include +#include + +_UCXXEXPORT void operator delete(void* ptr, std::size_t) throw(){ + ::operator delete (ptr); +} diff --git a/external/arduino/stlarduino/del_opv.cpp b/external/arduino/stlarduino/del_opv.cpp new file mode 100644 index 000000000..1690f88a6 --- /dev/null +++ b/external/arduino/stlarduino/del_opv.cpp @@ -0,0 +1,31 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +// Arduino 1.0 contains an implementation for this. +#if ARDUINO < 100 + +#include +#include +#include + +_UCXXEXPORT void operator delete[](void * ptr) throw(){ + free(ptr); +} + +#endif diff --git a/external/arduino/stlarduino/del_opvnt.cpp b/external/arduino/stlarduino/del_opvnt.cpp new file mode 100644 index 000000000..f2a2a361c --- /dev/null +++ b/external/arduino/stlarduino/del_opvnt.cpp @@ -0,0 +1,28 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include +#include +#include + +#ifndef NO_NOTHROW +_UCXXEXPORT void operator delete[](void* ptr, const std::nothrow_t& ) throw(){ + free(ptr); +} +#endif diff --git a/external/arduino/stlarduino/del_opvs.cpp b/external/arduino/stlarduino/del_opvs.cpp new file mode 100644 index 000000000..1c92d1f19 --- /dev/null +++ b/external/arduino/stlarduino/del_opvs.cpp @@ -0,0 +1,27 @@ +/* Copyright (C) 2015 Bernhard Reutner-Fischer + + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ +/* C++14 sized deallocation */ + +#include +#include +#include + +_UCXXEXPORT void operator delete[](void * ptr, std::size_t) throw(){ + ::operator delete[] (ptr); +} diff --git a/external/arduino/stlarduino/deque b/external/arduino/stlarduino/deque new file mode 100644 index 000000000..ff07ab51c --- /dev/null +++ b/external/arduino/stlarduino/deque @@ -0,0 +1,884 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + This file is part of the uClibc++ Library. + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*/ + + +#include +#include +#include + +#pragma GCC visibility push(default) + +#ifndef __STD_HEADER_DEQUE +#define __STD_HEADER_DEQUE + + +namespace std{ + template > class deque; + template bool operator==(const deque& x, const deque& y); + template bool operator< (const deque& x, const deque& y); + template bool operator!=(const deque& x, const deque& y); + template bool operator> (const deque& x, const deque& y); + template bool operator>=(const deque& x, const deque& y); + template bool operator<=(const deque& x, const deque& y); + template void swap(deque& x, deque& y); + + template class _UCXXEXPORT deque { + public: + friend bool operator==<>(const deque& x, const deque& y); + friend class deque_iter; + friend class deque_citer; + class deque_iter; + class deque_citer; + + typedef typename Allocator::reference reference; + typedef typename Allocator::const_reference const_reference; + typedef deque_iter iterator; + typedef deque_citer const_iterator; + typedef typename Allocator::size_type size_type; + typedef typename Allocator::difference_type difference_type; + typedef T value_type; + typedef Allocator allocator_type; + typedef typename Allocator::pointer pointer; + typedef typename Allocator::const_pointer const_pointer; + typedef std::reverse_iterator reverse_iterator; + typedef std::reverse_iterator const_reverse_iterator; + + explicit deque(const Allocator& al = Allocator()); + explicit deque(size_type n, const T& value = T(), const Allocator& al = Allocator()); + template deque(InputIterator first, InputIterator last, const Allocator& = Allocator()); + deque(const deque& x); + ~deque(); + + deque& operator=(const deque& x); + template void assign(InputIterator first, InputIterator last); + template void assign(Size n, const U& u = U()); + allocator_type get_allocator() const; + + iterator begin(); + const_iterator begin() const; + iterator end(); + const_iterator end() const; + reverse_iterator rbegin(); + const_reverse_iterator rbegin() const; + reverse_iterator rend(); + const_reverse_iterator rend() const; + + size_type size() const; + size_type max_size() const; + void resize(size_type sz, T c = T()); + bool empty() const; + + reference operator[](size_type n); + const_reference operator[](size_type n) const; + reference at(size_type n); + const_reference at(size_type n) const; + reference front(); + const_reference front() const; + reference back(); + const_reference back() const; + + void push_front(const T& x); + void push_back(const T& x); + iterator insert(iterator position, const T& x = T()); + void insert(iterator position, size_type n, const T& x); + template void insert (iterator position, InputIterator first, InputIterator last); + void pop_front(); + void pop_back(); + + iterator erase(iterator position); + iterator erase(iterator first, iterator last); + void swap(deque&); + void clear(); + + protected: + void reserve(size_type n); + inline size_type array_element(size_type deque_element) const{ + if(deque_element < (data_size - first_element)){ + return first_element + deque_element; + } + return deque_element - (data_size - first_element); + } + inline size_type first_subtract(size_type sub_size) const{ + if(sub_size > first_element){ + return (data_size - first_element) - sub_size; + } + return first_element - sub_size; + } + + T * data; + size_type data_size; //Physical size of array + size_type elements; //Elements in array + size_type first_element; //Element number of array 0..n + size_type last_element; //Element number of array 0..n + Allocator a; + + }; + + + template class _UCXXEXPORT deque::deque_iter + : public std::iterator< + random_access_iterator_tag, + T, + typename Allocator::difference_type, + typename Allocator::pointer, + typename Allocator::reference + > + { + friend class deque; + protected: + deque * container; + typename Allocator::size_type element; + + public: + deque_iter() : container(0), element(0) { } + deque_iter(const deque_iter & d) : container (d.container), element(d.element) { } + deque_iter(deque * c, typename Allocator::size_type e) + : container(c), element(e) + { + return; + } + ~deque_iter() { } + deque_iter & operator=(const deque_iter & d){ + container = d.container; + element = d.element; + return *this; + } + T & operator*(){ + return container->data[container->array_element(element)]; + } + T * operator->(){ + return container->data + container->array_element(element); + } + const T & operator*() const{ + return container->data[container->array_element(element)]; + } + const T * operator->() const{ + return container->data + container->array_element(element); + } + bool operator==(const deque_iter & d) const{ + if(container == d.container && element == d.element){ + return true; + } + return false; + } + bool operator==(const deque_citer & d) const{ + if(container == d.container && element == d.element){ + return true; + } + return false; + } + bool operator!=(const deque_iter & d) const{ + if(container != d.container || element != d.element){ + return true; + } + return false; + } + bool operator!=(const deque_citer & d) const{ + if(container != d.container || element != d.element){ + return true; + } + return false; + } + bool operator<(const deque_iter & d) const{ + if(element < d.element){ + return true; + } + return false; + } + bool operator<(const deque_citer & d) const{ + if(element < d.element){ + return true; + } + return false; + } + bool operator<=(const deque_iter & d) const{ + if(element <= d.element){ + return true; + } + return false; + } + bool operator<=(const deque_citer & d) const{ + if(element <= d.element){ + return true; + } + return false; + } + bool operator>(const deque_iter & d) const{ + if(element > d.element){ + return true; + } + return false; + } + bool operator>(const deque_citer & d) const{ + if(element > d.element){ + return true; + } + return false; + } + bool operator>=(const deque_iter & d) const{ + if(element >= d.element){ + return true; + } + return false; + } + bool operator>=(const deque_citer & d) const{ + if(element >= d.element){ + return true; + } + return false; + } + deque_iter & operator++(){ + ++element; + return *this; + } + deque_iter operator++(int){ + deque_iter temp(container, element); + ++element; + return temp; + } + deque_iter operator+(typename Allocator::size_type n){ + deque_iter temp(container, element + n); + return temp; + } + deque_iter & operator+=(typename Allocator::size_type n){ + element += n; + return *this; + } + deque_iter & operator--(){ + --element; + return *this; + } + deque_iter operator--(int){ + deque_iter temp(container, element); + --element; + return temp; + } + deque_iter operator-(typename Allocator::size_type n){ + deque_iter temp(container, element - n); + return temp; + } + deque_iter & operator-=(typename Allocator::size_type n){ + element -= n; + return *this; + } + typename Allocator::size_type operator-(const deque_iter & d){ + return element - d.element; + } + + }; + + template class _UCXXEXPORT deque::deque_citer + : public std::iterator< + random_access_iterator_tag, + T, + typename Allocator::difference_type, + typename Allocator::const_pointer, + typename Allocator::const_reference + > + { + friend class deque; + protected: + const deque * container; + typename Allocator::size_type element; + + public: + deque_citer() : container(0), element(0) { } + deque_citer(const deque_citer & d) : container (d.container), element(d.element) { } + deque_citer(const deque_iter & d) : container (d.container), element(d.element) { } + deque_citer(const deque * c, typename Allocator::size_type e) + : container(c), element(e) + { + return; + } + ~deque_citer() { } + deque_citer & operator=(const deque_iter & d){ + container = d.container; + element = d.element; + return *this; + } + const T & operator*() const{ + return container->data[container->array_element(element)]; + } + const T * operator->() const{ + return container->data + container->array_element(element); + } + bool operator==(const deque_citer & d) const{ + if(container == d.container && element == d.element){ + return true; + } + return false; + } + bool operator==(const deque_iter & d) const{ + if(container == d.container && element == d.element){ + return true; + } + return false; + } + bool operator!=(const deque_citer & d) const{ + if(container != d.container || element != d.element){ + return true; + } + return false; + } + bool operator!=(const deque_iter & d) const{ + if(container != d.container || element != d.element){ + return true; + } + return false; + } + bool operator<(const deque_citer & d) const{ + if(element < d.element){ + return true; + } + return false; + } + bool operator<(const deque_iter & d) const{ + if(element < d.element){ + return true; + } + return false; + } + bool operator<=(const deque_citer & d) const{ + if(element <= d.element){ + return true; + } + return false; + } + bool operator<=(const deque_iter & d) const{ + if(element <= d.element){ + return true; + } + return false; + } + bool operator>(const deque_citer & d) const{ + if(element > d.element){ + return true; + } + return false; + } + bool operator>(const deque_iter & d) const{ + if(element > d.element){ + return true; + } + return false; + } + bool operator>=(const deque_citer & d){ + if(element >= d.element){ + return true; + } + return false; + } + bool operator>=(const deque_iter & d){ + if(element >= d.element){ + return true; + } + return false; + } + deque_citer & operator++(){ + ++element; + return *this; + } + deque_citer operator++(int){ + deque_citer temp(container, element); + ++element; + return temp; + } + deque_citer operator+(typename Allocator::size_type n){ + deque_citer temp(container, element + n); + return temp; + } + deque_citer & operator+=(typename Allocator::size_type n){ + element += n; + return *this; + } + deque_citer & operator--(){ + --element; + return *this; + } + deque_citer operator--(int){ + deque_citer temp(container, element); + --element; + return temp; + } + deque_citer operator-(typename Allocator::size_type n){ + deque_citer temp(container, element - n); + return temp; + } + deque_citer & operator-=(typename Allocator::size_type n){ + element -= n; + return *this; + } + typename Allocator::size_type operator-(const deque_citer & d){ + return element - d.element; + } + + }; + + template deque::deque(const Allocator& al) + : data(0), + data_size(0), elements(0), first_element(0), last_element(0), a(al) + { + data_size = __UCLIBCXX_STL_BUFFER_SIZE__; + data = a.allocate(data_size); + first_element = data_size /2; + last_element = first_element; + } + + + template deque::deque( + size_type n, const T& value, const Allocator& al) + : data(0), + elements(n), first_element(0), last_element(0), a(al) + { + data_size = elements + __UCLIBCXX_STL_BUFFER_SIZE__; + data = a.allocate(data_size); + first_element = (data_size - elements) / 2; + last_element = first_element; + + for(n=first_element ; n < last_element; ++n ){ + a.construct(data+n, value); + } + } + + + template template + deque::deque(InputIterator first, InputIterator last, const Allocator& al) + : data(0), + data_size(0), elements(0), first_element(0), last_element(0), a(al) + { + data_size = __UCLIBCXX_STL_BUFFER_SIZE__; + data = a.allocate(data_size); + first_element = data_size / 4; //Note sure how big, but let's add a little space... + last_element = first_element; + while(first != last){ + push_back(*first); + ++first; + } + } + + + template deque::deque(const deque& x) + : data(0), + elements(0), first_element(0), last_element(0), a(x.a) + { + data_size = x.elements + __UCLIBCXX_STL_BUFFER_SIZE__; + data = a.allocate(data_size); + first_element = (data_size - x.elements) / 2; + last_element = first_element; + for(size_type i=0; i < x.elements; ++i){ + push_back(x[i]); + } + } + + + template deque::~deque(){ + clear(); + a.deallocate(data, data_size); + } + + template deque& deque:: + operator=(const deque& x) + { + if(&x == this){ + return *this; + } + resize(x.elements); + for(size_t i = 0; i < elements; ++i){ + data[array_element(i)] = x[i]; + } + return *this; + } + + + template template void + deque::assign(InputIterator first, InputIterator last) + { + clear(); + while(first !=last){ + push_back(*first); + ++first; + } + } + + + template template void + deque::assign(Size n, const U& u) + { + if(&u == this){ + return; + } + clear(); + for(size_type i = 0; i < n; ++i){ + push_back(u); + } + } + + + template typename deque::allocator_type + deque::get_allocator() const + { + return a; + } + + template typename + deque::iterator deque::begin() + { + return deque_iter(this, 0); + } + + + template typename deque::const_iterator + deque::begin() const + { + return deque_citer(this, 0); + } + + template typename + deque::iterator deque::end() + { + return deque_iter(this, elements); + } + + template typename + deque::const_iterator deque::end() const + { + return deque_citer(this, elements); + } + + template typename + deque::reverse_iterator deque::rbegin() + { + return reverse_iterator(end()); + } + + template typename + deque::const_reverse_iterator deque::rbegin() const + { + return const_reverse_iterator(end()); + } + + template typename + deque::reverse_iterator deque::rend() + { + return reverse_iterator(begin()); + } + + template typename + deque::const_reverse_iterator deque::rend() const + { + return const_reverse_iterator(begin()); + } + + template typename + deque::size_type deque::size() const + { + return elements; + } + + template typename + deque::size_type deque::max_size() const + { + return ((size_type)(-1)) / sizeof(T); + } + + template void deque::resize(size_type sz, T c){ + reserve(sz); + while(sz > size()){ + push_back(c); + } + while(sz < size()){ + pop_back(); + } + } + + template bool deque::empty() const{ + return (elements == 0); + } + + template typename + deque::reference deque::operator[](size_type n) + { + return data[array_element(n)]; + } + + template typename + deque::const_reference deque::operator[](size_type n) const + { + return data[array_element(n)]; + } + + template typename + deque::reference deque::at(size_type n) + { + if(n > elements){ + __throw_out_of_range("Out of deque range"); + } + return data[array_element(n)]; + } + + template typename + deque::const_reference deque::at(size_type n) const + { + if(n > elements){ + __throw_out_of_range("Out of deque range"); + } + return data[array_element(n)]; + } + + template typename + deque::reference deque::front() + { + return data[first_element]; + } + + template typename + deque::const_reference deque::front() const + { + return data[first_element]; + } + + template typename + deque::reference deque::back() + { + return data[array_element(elements-1)]; + } + + template typename + deque::const_reference deque::back() const + { + return data[array_element(elements-1)]; + } + + template void deque::push_front(const T& x){ + reserve(elements + 1); + first_element = first_subtract(1); + a.construct(data + first_element, x); + ++elements; + } + + template void deque::push_back(const T& x){ + reserve(elements + 1); + a.construct(data + last_element, x); + ++elements; + last_element = array_element(elements); + } + + template typename + deque::iterator deque::insert(iterator position, const T& x) + { + reserve(elements+1); + if(position.element > (elements/2)){ + //Push all elements back 1 + push_back(x); + for(size_type i = elements-1; i > position.element; --i){ + at(i) = at(i-1); + } + }else{ + //Push all elements forward 1 + push_front(x); + for(size_type i = 0; i < position.element; ++i){ + at(i) = at(i+1); + } + } + at(position.element) = x; + return deque_iter(this, position.element); + } + + template void deque:: + insert(typename deque::iterator position, size_type n, const T& x) + { + reserve(elements + n); + for(size_t i =0; i < n; ++i){ + position = insert(position, x); + } + } + + template template + void deque::insert (iterator position, InputIterator first, InputIterator last) + { + while(first != last){ + position = insert(position, *first); + ++first; + } + } + + template void deque::pop_front(){ + if(elements == 0){ + __throw_out_of_range("deque pop_front"); + } + a.destroy(data + first_element); + first_element = array_element(1); + --elements; + } + + template void deque::pop_back(){ + last_element = array_element(elements - 1); + a.destroy(data + last_element); + --elements; + } + + template typename + deque::iterator deque::erase(typename deque::iterator position) + { + if(position.element > (elements /2)){ + for(size_type i = position.element; i < elements - 1; ++i){ + at(i) = at(i+1); + } + pop_back(); + }else{ + for(size_type i = position.element; i > 0; --i){ + at(i) = at(i-1); + } + pop_front(); + } + return deque_iter(this, position.element); + } + + template typename deque::iterator + deque:: + erase(typename deque::iterator first, typename deque::iterator last) + { + //Shift backwards + size_type num_move = last.element - first.element; + if( first.element > (elements - last.element) ){ + for(size_type i = last.element; i < elements ; ++i){ + at(i-num_move) = at(i); + } + for(size_type i = 0; i < num_move ; ++i){ + pop_back(); + } + }else{ + for(size_type i = 0; i < first.element ; ++i){ + at(last.element - i - 1) = at(first.element - i - 1); + } + for(size_type i = 0; i < num_move ; ++i){ + pop_front(); + } + } + return deque_iter(this, first.element); + } + + template void deque::swap(deque& x) + { + T * temp_data; + typename deque::size_type temp_size; + + //Swap data pointers + temp_data = x.data; + x.data = data; + data = temp_data; + + //Swap array sizes + temp_size = x.data_size; + x.data_size = data_size; + data_size = temp_size; + + //Swap num array elements + temp_size = x.elements; + x.elements = elements; + elements = temp_size; + + //Swap first_pointer + temp_size = x.first_element; + x.first_element = first_element; + first_element = temp_size; + + //Swap last_pointer + temp_size = x.last_element; + x.last_element = last_element; + last_element = temp_size; + } + + template void deque::clear() + { + while(elements > 0 ){ + pop_back(); + } + } + + + template void deque::reserve(typename deque::size_type n) + { + if(data_size >= n){ + return; + } + + size_type size_temp; + size_type first_temp; + T * data_temp; + size_temp = n + __UCLIBCXX_STL_BUFFER_SIZE__; //Reserve extra 'cause we can + data_temp = a.allocate(size_temp); + + first_temp = (size_temp - elements) / 2; + for(size_type i = 0; i < elements; ++i){ + a.construct(data_temp + first_temp + i, data[array_element(i)]); + a.destroy(data + array_element(i)); + } + + //Now shuffle pointers + a.deallocate(data, data_size); + data = data_temp; + data_size = size_temp; + first_element = first_temp; + last_element = first_element + elements; + } + + + template _UCXXEXPORT + bool + operator==(const deque& x, const deque& y) + { + if(x.elements != y.elements){ + return false; + } + for(typename deque::size_type i = 0; i < x.elements; ++i){ + if(x[i] < y[i] || y[i] < x[i]){ + return false; + } + } + return true; + } + + template bool operator< (const deque& x, const deque& y); + template _UCXXEXPORT + bool + operator!=(const deque& x, const deque& y) + { + if(x == y){ + return false; + } + return true; + } + template bool operator> (const deque& x, const deque& y); + template bool operator>=(const deque& x, const deque& y); + template bool operator<=(const deque& x, const deque& y); + template _UCXXEXPORT void swap(deque& x, deque& y){ + x.swap(y); + } + + + +} + +#pragma GCC visibility pop + +#endif + + + + diff --git a/external/arduino/stlarduino/deque.cpp b/external/arduino/stlarduino/deque.cpp new file mode 100644 index 000000000..c5155808b --- /dev/null +++ b/external/arduino/stlarduino/deque.cpp @@ -0,0 +1,42 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*/ + +#include + + +namespace std{ + + + + + + + + + + + + + + +} + + + + diff --git a/external/arduino/stlarduino/eh_alloc.cpp b/external/arduino/stlarduino/eh_alloc.cpp new file mode 100644 index 000000000..cdf28e099 --- /dev/null +++ b/external/arduino/stlarduino/eh_alloc.cpp @@ -0,0 +1,65 @@ +/* Copyright (C) 2006 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation, version 2.1 + of the License. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include +#include +#include + +//This is a system-specific header which does all of the error-handling management +#include + +namespace __cxxabiv1 +{ + +extern "C" void * __cxa_allocate_exception(std::size_t thrown_size) throw(){ + void *e; + // The sizeof crap is required by Itanium ABI because we need to + // provide space for accounting information which is implementation + // (gcc) defined. + e = malloc (thrown_size + sizeof(__cxa_refcounted_exception)); + if (0 == e){ + std::terminate(); + } + memset (e, 0, sizeof(__cxa_refcounted_exception)); + return (void *)((unsigned char *)e + sizeof(__cxa_refcounted_exception)); +} + +extern "C" void __cxa_free_exception(void *vptr) throw(){ + free( (char *)(vptr) - sizeof(__cxa_refcounted_exception) ); +} + + +extern "C" __cxa_dependent_exception * __cxa_allocate_dependent_exception() throw(){ + __cxa_dependent_exception *retval; + // The sizeof crap is required by Itanium ABI because we need to + // provide space for accounting information which is implementation + // (gcc) defined. + retval = static_cast<__cxa_dependent_exception*>(malloc (sizeof(__cxa_dependent_exception))); + if (0 == retval){ + std::terminate(); + } + memset (retval, 0, sizeof(__cxa_dependent_exception)); + return retval; +} + +extern "C" void __cxa_free_dependent_exception(__cxa_dependent_exception *vptr) throw(){ + free( (char *)(vptr) ); +} + +} /* namespace __cxxabiv1 */ diff --git a/external/arduino/stlarduino/eh_globals.cpp b/external/arduino/stlarduino/eh_globals.cpp new file mode 100644 index 000000000..38d4583e6 --- /dev/null +++ b/external/arduino/stlarduino/eh_globals.cpp @@ -0,0 +1,42 @@ +/* Copyright (C) 2006 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation, version 2.1 + of the License. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include +#include +#include + +//This is a system-specific header which does all of the error-handling management +#include + +//The following functionality is derived from reading of the GNU libstdc++ code and making it...simple + + +namespace __cxxabiv1{ + +static __UCLIBCXX_TLS __cxa_eh_globals eh_globals; + +extern "C" __cxa_eh_globals* __cxa_get_globals() throw(){ + return &eh_globals; +} + +extern "C" __cxa_eh_globals* __cxa_get_globals_fast() throw(){ + return &eh_globals; +} + +} diff --git a/external/arduino/stlarduino/exception b/external/arduino/stlarduino/exception new file mode 100644 index 000000000..bdf393e6c --- /dev/null +++ b/external/arduino/stlarduino/exception @@ -0,0 +1,120 @@ +// Exception Handling support header for -*- C++ -*- + +// Copyright (C) 1995, 1996, 1997, 1998, 2000, 2001, 2002 +// Free Software Foundation +// +// This file is part of GNU CC. +// +// GNU CC is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2, or (at your option) +// any later version. +// +// GNU CC is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with GNU CC; see the file COPYING. If not, write to +// the Free Software Foundation, 59 Temple Place - Suite 330, +// Boston, MA 02111-1307, USA. + +// As a special exception, you may use this file as part of a free software +// library without restriction. Specifically, if other files instantiate +// templates or use macros or inline functions from this file, or you compile +// this file and link it with other files to produce an executable, this +// file does not by itself cause the resulting executable to be covered by +// the GNU General Public License. This exception does not however +// invalidate any other reasons why the executable file might be covered by +// the GNU General Public License. + +/** @file exception + * This header defines several types and functions relating to the + * handling of exceptions in a C++ program. + */ + +#ifndef __EXCEPTION__ +#define __EXCEPTION__ + +#include + +extern "C++" { + +namespace std +{ + /** + * @brief Base class for all library exceptions. + * + * This is the base class for all exceptions thrown by the standard + * library, and by certain language expressions. You are free to derive + * your own %exception classes, or use a different hierarchy, or to + * throw non-class data (e.g., fundamental types). + */ + class exception + { + public: + exception() throw() { } + virtual ~exception() throw(); + /** Returns a C-style character string describing the general cause + * of the current error. */ + virtual const char* what() const throw(); + }; + + /** If an %exception is thrown which is not listed in a function's + * %exception specification, one of these may be thrown. */ + class bad_exception : public exception + { + public: + bad_exception() throw() { } + // This declaration is not useless: + // http://gcc.gnu.org/onlinedocs/gcc-3.0.2/gcc_6.html#SEC118 + virtual ~bad_exception() throw(); + }; + + /// If you write a replacement %terminate handler, it must be of this type. + typedef void (*terminate_handler) (); + /// If you write a replacement %unexpected handler, it must be of this type. + typedef void (*unexpected_handler) (); + + /// Takes a new handler function as an argument, returns the old function. + terminate_handler set_terminate(terminate_handler) throw(); + /** The runtime will call this function if %exception handling must be + * abandoned for any reason. */ + void terminate() __UCLIBCXX_NORETURN; + + /// Takes a new handler function as an argument, returns the old function. + unexpected_handler set_unexpected(unexpected_handler) throw(); + /** The runtime will call this function if an %exception is thrown which + * violates the function's %exception specification. */ + void unexpected() __UCLIBCXX_NORETURN; + + /** [18.6.4]/1: "Returns true after completing evaluation of a + * throw-expression until either completing initialization of the + * exception-declaration in the matching handler or entering @c unexpected() + * due to the throw; or after entering @c terminate() for any reason + * other than an explicit call to @c terminate(). [Note: This includes + * stack unwinding [15.2]. end note]" + * + * 2: "When @c uncaught_exception() is true, throwing an %exception can + * result in a call of @c terminate() (15.5.1)." + */ + bool uncaught_exception() throw(); +} // namespace std + +namespace __gnu_cxx +{ + /** A replacement for the standard terminate_handler which prints more + information about the terminating exception (if any) on stderr. Call + @code + std::set_terminate (__gnu_cxx::__verbose_terminate_handler) + @endcode + to use. For more info, see + http://gcc.gnu.org/onlinedocs/libstdc++/19_diagnostics/howto.html#4 + */ + void __verbose_terminate_handler (); +} // namespace __gnu_cxx + +} // extern "C++" + +#endif diff --git a/external/arduino/stlarduino/exception.cpp b/external/arduino/stlarduino/exception.cpp new file mode 100644 index 000000000..82021ddb6 --- /dev/null +++ b/external/arduino/stlarduino/exception.cpp @@ -0,0 +1,52 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*/ + +#include + +//We can't do this yet because gcc is too stupid to be able to handle +//different implementations of exception class. + +#undef __UCLIBCXX_EXCEPTION_SUPPORT__ + +#ifdef __UCLIBCXX_EXCEPTION_SUPPORT__ + +namespace std{ + _UCXXEXPORT static char * __std_exception_what_value = "exception"; + + //We are providing our own versions to be sneaky + + + _UCXXEXPORT exception::~exception() throw(){ + //Empty function + } + + _UCXXEXPORT const char* exception::what() const throw(){ + return __std_exception_what_value; + } + + _UCXXEXPORT bad_exception::~bad_exception() throw(){ + + } + + +} + + +#endif diff --git a/external/arduino/stlarduino/func_exception b/external/arduino/stlarduino/func_exception new file mode 100644 index 000000000..1b7bdd8c5 --- /dev/null +++ b/external/arduino/stlarduino/func_exception @@ -0,0 +1,41 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include +#include + + +#ifndef HEADER_IMPLEMENTATION_FUNC_EXCEPTION +#define HEADER_IMPLEMENTATION_FUNC_EXCEPTION + +#pragma GCC visibility push(default) + +namespace std{ + + _UCXXEXPORT void __throw_bad_alloc(); + _UCXXEXPORT void __throw_out_of_range(const char * message = 0); + _UCXXEXPORT void __throw_overflow_error(const char * message = 0); + _UCXXEXPORT void __throw_length_error(const char * message = 0); + _UCXXEXPORT void __throw_invalid_argument(const char * message = 0); +} + +#pragma GCC visibility pop + +#endif + diff --git a/external/arduino/stlarduino/func_exception.cpp b/external/arduino/stlarduino/func_exception.cpp new file mode 100644 index 000000000..fab095f3d --- /dev/null +++ b/external/arduino/stlarduino/func_exception.cpp @@ -0,0 +1,87 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include +#include +#include +#include + +namespace std{ + +#ifdef __UCLIBCXX_EXCEPTION_SUPPORT__ + +_UCXXEXPORT void __throw_bad_alloc(){ + throw bad_alloc(); +} + +_UCXXEXPORT void __throw_out_of_range( const char * message){ + if(message == 0){ + throw out_of_range(); + } + throw out_of_range(message); +} + +_UCXXEXPORT void __throw_overflow_error( const char * message){ + if(message == 0){ + throw overflow_error(); + } + throw overflow_error(message); +} + +_UCXXEXPORT void __throw_length_error(const char * message){ + if(message == 0){ + throw length_error(); + } + throw length_error(message); +} + +_UCXXEXPORT void __throw_invalid_argument(const char * message){ + if(message == 0){ + throw invalid_argument(); + } + throw invalid_argument(message); +} + +#else + +_UCXXEXPORT void __throw_bad_alloc(){ + abort(); +} + +_UCXXEXPORT void __throw_out_of_range( const char * ){ + abort(); +} + +_UCXXEXPORT void __throw_overflow_error( const char * ){ + abort(); +} + +_UCXXEXPORT void __throw_length_error(const char * ){ + abort(); +} + +_UCXXEXPORT void __throw_invalid_argument(const char *){ + abort(); +} + +#endif + + + +} diff --git a/external/arduino/stlarduino/functional b/external/arduino/stlarduino/functional new file mode 100644 index 000000000..b7932e2cf --- /dev/null +++ b/external/arduino/stlarduino/functional @@ -0,0 +1,439 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + This file is part of the uClibc++ Library. + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + + +#ifndef __STD_HEADER_FUNCTIONAL +#define __STD_HEADER_FUNCTIONAL 1 + +#include + +#pragma GCC visibility push(default) + +namespace std{ + + template struct unary_function; + template struct binary_function; + + template struct plus; + template struct minus; + template struct multiplies; + template struct divides; + template struct modulus; + template struct negate; + + template struct equal_to; + template struct not_equal_to; + template struct greater; + template struct less; + template struct greater_equal; + template struct less_equal; + + template struct logical_and; + template struct logical_or; + template struct logical_not; + + template struct unary_negate; + template unary_negate not1(const Predicate&); + template struct binary_negate; + template binary_negate not2(const Predicate&); + + + template class binder1st; + template binder1st bind1st(const Operation&, const T&); + template class binder2nd; + template binder2nd bind2nd(const Operation&, const T&); + + template class pointer_to_unary_function; + template pointer_to_unary_function ptr_fun(Result (*)(Arg)); + template class pointer_to_binary_function; + template + pointer_to_binary_function ptr_fun(Result (*)(Arg1,Arg2)); + + template class mem_fun_t; + template class mem_fun1_t; + template class const_mem_fun_t; + template class const_mem_fun1_t; + template mem_fun_t mem_fun(S (T::*f)()); + template mem_fun1_t mem_fun(S (T::*f)(A)); + template class mem_fun_ref_t; + template class mem_fun1_ref_t; + template mem_fun_ref_t mem_fun_ref(S (T::*f)()); + template mem_fun1_ref_t mem_fun1_ref(S (T::*f)(A)); + + //Implementation + + template struct _UCXXEXPORT unary_function{ + typedef Arg argument_type; + typedef Result result_type; + }; + + + template struct _UCXXEXPORT binary_function{ + typedef Arg1 first_argument_type; + typedef Arg2 second_argument_type; + typedef Result result_type; + }; + + template struct _UCXXEXPORT plus : binary_function{ + T operator()(const T& x, const T& y) const{ + return x + y; + } + }; + + template struct _UCXXEXPORT minus : binary_function{ + T operator()(const T& x, const T& y) const{ + return x - y; + } + }; + + template struct _UCXXEXPORT multiplies : binary_function{ + T operator()(const T& x, const T& y) const{ + return x * y; + } + }; + + template struct _UCXXEXPORT divides : binary_function{ + T operator()(const T& x, const T& y) const{ + return x / y; + } + }; + + template struct _UCXXEXPORT modulus : binary_function{ + T operator()(const T& x, const T& y) const{ + return x % y; + } + }; + + template struct _UCXXEXPORT negate : unary_function{ + T operator()(const T& x) const{ + return -x; + } + }; + + template struct _UCXXEXPORT equal_to : binary_function{ + bool operator()(const T& x, const T& y) const{ + return (x == y); + } + }; + + template struct _UCXXEXPORT not_equal_to : binary_function{ + bool operator()(const T& x, const T& y) const{ + return (x != y); + } + }; + + template struct _UCXXEXPORT greater : binary_function{ + bool operator()(const T& x, const T& y) const{ + return (x > y); + } + }; + + template struct _UCXXEXPORT less : binary_function{ + bool operator()(const T& x, const T& y) const{ + return (x < y); + } + }; + + template struct _UCXXEXPORT greater_equal : binary_function{ + bool operator()(const T& x, const T& y) const{ + return (x >= y); + } + }; + + template struct _UCXXEXPORT less_equal : binary_function{ + bool operator()(const T& x, const T& y) const{ + return (x <= y); + } + }; + + template struct _UCXXEXPORT logical_and : binary_function { + bool operator()(const T& x, const T& y) const{ + return (x && y); + } + }; + + template struct _UCXXEXPORT logical_or : binary_function { + bool operator()(const T& x, const T& y) const{ + return (x || y); + } + }; + + template struct _UCXXEXPORT logical_not : unary_function { + bool operator()(const T& x) const{ + return !x; + } + }; + + template class _UCXXEXPORT unary_negate + : public unary_function + { + public: + explicit unary_negate(const Predicate& pred) : p(pred) { } + bool operator()(const typename Predicate::argument_type& x) const{ + return !p(x); + } + private: + Predicate p; + }; + + + template _UCXXEXPORT unary_negate not1(const Predicate& pred){ + return unary_negate(pred); + } + + + template class _UCXXEXPORT binary_negate : public + binary_function + { + public: + explicit binary_negate(const Predicate& pred) : p(pred) { } + bool operator()(const typename Predicate::first_argument_type& x, + const typename Predicate::second_argument_type& y) const + { + return !p(x, y); + } + private: + Predicate p; + }; + + + template _UCXXEXPORT binary_negate not2(const Predicate& pred){ + return binary_negate(pred); + } + + + template class _UCXXEXPORT binder1st + : public unary_function + { + protected: + Operation op; + typename Operation::first_argument_type value; + public: + binder1st(const Operation& x, const typename Operation::first_argument_type& y) : op(x), value(y){ } + typename Operation::result_type operator()(const typename Operation::second_argument_type& x) const{ + return op(value,x); + } + }; + + + template _UCXXEXPORT binder1st bind1st(const Operation& op, const T& x){ + return binder1st(op, typename Operation::first_argument_type(x)); + } + + + template class _UCXXEXPORT binder2nd + : public unary_function + { + protected: + Operation op; + typename Operation::second_argument_type value; + public: + binder2nd(const Operation& x, const typename Operation::second_argument_type& y) : op(x), value(y) { } + typename Operation::result_type operator()(const typename Operation::first_argument_type& x) const{ + return op(x,value); + } + }; + + + template _UCXXEXPORT + binder2nd bind2nd(const Operation& op, const T& x) + { + return binder2nd(op, typename Operation::second_argument_type(x)); + } + + + template class _UCXXEXPORT + pointer_to_unary_function : public unary_function + { + protected: + Result (*func)(Arg); + public: + explicit pointer_to_unary_function(Result (*f)(Arg)) : func(f) { } + Result operator()(Arg x) const{ + return func(x); + } + }; + + + template _UCXXEXPORT pointer_to_unary_function ptr_fun(Result (*f)(Arg)){ + return pointer_to_unary_function(f); + } + + + template class _UCXXEXPORT + pointer_to_binary_function : public binary_function + { + protected: + Result (*func)(Arg1, Arg2); + public: + explicit pointer_to_binary_function(Result (*f)(Arg1, Arg2)) : func(f) { } + Result operator()(Arg1 x, Arg2 y) const{ + return func(x, y); + } + }; + + template _UCXXEXPORT + pointer_to_binary_function ptr_fun(Result (*f)(Arg1, Arg2)) + { + return pointer_to_binary_function(f); + } + + + template class _UCXXEXPORT mem_fun_t + : public unary_function + { + public: + explicit mem_fun_t(S (T::*p)()) : m(p) { } + S operator()(T* p) const { return (p->*m)(); } + private: + S (T::*m)(); + }; + + + template class _UCXXEXPORT mem_fun1_t + : public binary_function + { + public: + explicit mem_fun1_t(S (T::*p)(A)) : m(p) { } + S operator()(T* p, A x) const { return (p->*m)(x); } + private: + S (T::*m)(A); + }; + + + template class _UCXXEXPORT const_mem_fun_t + : public unary_function + { + public: + explicit const_mem_fun_t(S (T::*p)() const) : m(p) { } + S operator()(const T* p) const { return (p->*m)(); } + private: + S (T::*m)() const; + }; + + + template class _UCXXEXPORT const_mem_fun1_t + : public binary_function + { + public: + explicit const_mem_fun1_t(S (T::*p)(A) const) : m(p) { } + S operator()(const T* p, A x) const { return (p->*m)(x); } + private: + S (T::*m)(A) const; + }; + + + template _UCXXEXPORT mem_fun_t mem_fun(S (T::*f)()){ + return mem_fun_t(f); + } + + template _UCXXEXPORT const_mem_fun_t mem_fun(S (T::*f)() const){ + return const_mem_fun_t(f); + } + + template _UCXXEXPORT mem_fun1_t mem_fun(S (T::*f)(A)){ + return mem_fun1_t(f); + } + + template _UCXXEXPORT const_mem_fun1_t mem_fun(S (T::*f)(A) const){ + return const_mem_fun1_t(f); + } + + template class _UCXXEXPORT mem_fun_ref_t + : public unary_function + { + public: + explicit mem_fun_ref_t(S (T::*p)()) : mf(p) { } + S operator()(T& p) { return (p.*mf)(); } + private: + S (T::*mf)(); + }; + + template class _UCXXEXPORT mem_fun1_ref_t + : public binary_function + { + public: + explicit mem_fun1_ref_t(S (T::*p)(A)) : mf(p) { } + S operator()(T& p, A x) { return (p.*mf)(x); } + private: + S (T::*mf)(A); + }; + + template _UCXXEXPORT mem_fun_ref_t mem_fun_ref(S (T::*f)()){ + return mem_fun_ref_t(f); + } + + template _UCXXEXPORT mem_fun1_ref_t mem_fun1_ref(S (T::*f)(A)){ + return mem_fun1_ref_t(f); + } + + +} + + +//These are SGI extensions which are checked for by some conformance checks. They +// are *NOT* part of the C++ standard, however + +template class _UCXXEXPORT unary_compose : + public std::unary_function +{ +protected: + Op1 mf1; + Op2 mf2; +public: + unary_compose(const Op1& x, const Op2& y) : mf1(x), mf2(y) { } + typename Op1::result_type operator()(const typename Op2::argument_type& x) const { + return mf1(mf2(x)); + } +}; + +template _UCXXEXPORT +inline unary_compose +compose1(const Op1& fn1, const Op2& fn2){ + return unary_compose(fn1, fn2); +} + +template class _UCXXEXPORT binary_compose : + public std::unary_function +{ +protected: + Op1 mf1; + Op2 mf2; + Op3 mf3; +public: + binary_compose(const Op1 & x, const Op2 & y, const Op3 & z) + : mf1(x), mf2(y), mf3(z){ } + typename Op1::result_type operator()(const typename Op2::argument_type & x) const { + return mf1(mf2(x), mf3(x)); + } +}; + +template inline _UCXXEXPORT binary_compose +compose2(const Op1 & fn1, const Op2 & fn2, const Op3 & fn3){ + return binary_compose(fn1, fn2, fn3); +} + +#pragma GCC visibility pop + +#endif + + + diff --git a/external/arduino/stlarduino/initializer_list b/external/arduino/stlarduino/initializer_list new file mode 100644 index 000000000..05a4e841c --- /dev/null +++ b/external/arduino/stlarduino/initializer_list @@ -0,0 +1,60 @@ +/* Copyright (C) 2016 Michael Matera + + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*/ + + +#ifndef __STD_HEADER_INITIALIZER_LIST +#define __STD_HEADER_INITIALIZER_LIST + +#pragma GCC visibility push(default) + +namespace std { + +template +class initializer_list { + +private: + const T* array; + size_t len; + + // Initialize from a { ... } construct + initializer_list(const T *a, size_t l): array(a), len(l) { } + +public: + + // default constructor + initializer_list() : array(NULL), len(0) {} + + size_t size() const { + return len; + } + + const T *begin() { + return array; + } + + const T *end() { + return array + len; + } + +}; + +} + +#endif diff --git a/external/arduino/stlarduino/iomanip b/external/arduino/stlarduino/iomanip new file mode 100644 index 000000000..14a82607c --- /dev/null +++ b/external/arduino/stlarduino/iomanip @@ -0,0 +1,170 @@ +/* Copyright (C) 2005 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include +#include + +#ifndef __STD_IOMANIP +#define __STD_IOMANIP 1 + +#pragma GCC visibility push(default) + +namespace std{ + +// These are the helper classes which we are going to be using to +// hold the required data + +class _UCXXEXPORT __resetiosflags{ +public: + ios_base::fmtflags m; + _UCXXEXPORT __resetiosflags(ios_base::fmtflags mask) : m(mask){ } +}; + +class _UCXXEXPORT __setiosflags{ +public: + ios_base::fmtflags m; + _UCXXEXPORT __setiosflags(ios_base::fmtflags mask) : m(mask){ } +}; + +class _UCXXEXPORT __setbase{ +public: + int base; + _UCXXEXPORT __setbase(int b) : base(b){ } +}; + +class _UCXXEXPORT __setfill{ +public: + int character; + _UCXXEXPORT __setfill(int c): character(c){ } +}; + +class _UCXXEXPORT __setprecision{ +public: + int digits; + _UCXXEXPORT __setprecision(int n): digits(n) { } +}; + +class _UCXXEXPORT __setw{ +public: + int width; + _UCXXEXPORT __setw(int n): width(n) { } +}; + + +//Actual manipulator functions + +inline __resetiosflags resetiosflags(ios_base::fmtflags mask){ + return __resetiosflags(mask); +} + +inline __setiosflags setiosflags(ios_base::fmtflags mask){ + return __setiosflags(mask); +} + +inline __setbase setbase(int b){ + return __setbase(b); +} + +inline __setfill setfill(int c){ + return __setfill(c); +} + +inline __setprecision setprecision(int n){ + return __setprecision(n); +} + +inline __setw setw(int n){ + return __setw(n); +} + + +//How to handle interaction with [i|o]stream classes + +template _UCXXEXPORT basic_ostream& + operator<<(basic_ostream& os, const __resetiosflags s) +{ + os.setf(ios_base::fmtflags(0),s.m); + return os; +} + +template _UCXXEXPORT basic_istream& + operator>>(basic_istream& is, const __resetiosflags s) +{ + is.setf(ios_base::fmtflags(0),s.m); + return is; +} + +template _UCXXEXPORT basic_ostream& + operator<<(basic_ostream& os, const __setiosflags s) +{ + os.setf(s.m); + return os; +} + +template _UCXXEXPORT basic_ostream& + operator<<(basic_ostream& os, const __setbase s) +{ + ios_base::fmtflags f(0); + switch(s.base){ + case 8: + f = ios_base::oct; + break; + case 10: + f = ios_base::dec; + break; + case 16: + f = ios_base::hex; + break; + default: + break; + + } + os.setf(f, ios_base::basefield); + return os; +} + +template _UCXXEXPORT basic_ostream& + operator<<(basic_ostream& os, const __setfill s) +{ + os.fill(s.character); + return os; +} + +template _UCXXEXPORT basic_ostream& + operator<<(basic_ostream& os, const __setprecision s) +{ + os.precision(s.digits); + return os; +} + +template _UCXXEXPORT basic_ostream& + operator<<(basic_ostream& os, const __setw s) +{ + os.width(s.width); + return os; +} + + + +} + +#pragma GCC visibility pop + +#endif + diff --git a/external/arduino/stlarduino/iomanip.cpp b/external/arduino/stlarduino/iomanip.cpp new file mode 100644 index 000000000..c5e60ccea --- /dev/null +++ b/external/arduino/stlarduino/iomanip.cpp @@ -0,0 +1,29 @@ +/* Copyright (C) 2005 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include + +namespace std{ + + + + +} + + diff --git a/external/arduino/stlarduino/ios b/external/arduino/stlarduino/ios new file mode 100644 index 000000000..63dc4edbc --- /dev/null +++ b/external/arduino/stlarduino/ios @@ -0,0 +1,500 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include +#include +#include +#include + +#ifndef __HEADER_STD_IOS +#define __HEADER_STD_IOS 1 + +#pragma GCC visibility push(default) + +namespace std{ + typedef signed long int streamoff; + + template class fpos; + + class _UCXXEXPORT ios_base { + public: + class failure; +#ifdef __UCLIBCXX_EXCEPTION_SUPPORT__ + class failure : public exception { + public: + explicit failure(const std::string&) { } + explicit failure() { } + virtual const char* what() const throw() { + return "std::ios_base failure exception"; + } + }; +#endif +#ifdef __UCLIBCXX_SUPPORT_CDIR__ + class _UCXXLOCAL Init{ + public: + _UCXXEXPORT Init(); + _UCXXEXPORT ~Init(); + private: + static int init_cnt; + }; +#endif + + public: + + typedef unsigned short int fmtflags; + + static const fmtflags skipws = 0x0001; + + static const fmtflags left = 0x0002; + static const fmtflags right = 0x0004; + static const fmtflags internal = 0x0008; + + static const fmtflags boolalpha = 0x0010; + + static const fmtflags dec = 0x0020; + static const fmtflags oct = 0x0040; + static const fmtflags hex = 0x0080; + + static const fmtflags scientific = 0x0100; + static const fmtflags fixed = 0x0200; + + static const fmtflags showbase = 0x0400; + static const fmtflags showpoint = 0x0800; + static const fmtflags showpos = 0x1000; + static const fmtflags uppercase = 0x2000; + + static const fmtflags adjustfield = left | right | internal; + static const fmtflags basefield = dec | oct | hex; + static const fmtflags floatfield = fixed | scientific; + + static const fmtflags unitbuf = 0x4000; + + typedef unsigned char iostate; + static const iostate goodbit = 0x00; + static const iostate badbit = 0x01; + static const iostate eofbit = 0x02; + static const iostate failbit = 0x04; + + typedef unsigned char openmode; + static const openmode app = 0x01; + static const openmode ate = 0x02; + static const openmode binary = 0x04; + static const openmode in = 0x08; + static const openmode out = 0x10; + static const openmode trunc = 0x20; + + typedef unsigned char seekdir; + static const seekdir beg = 0x01; + static const seekdir cur = 0x02; + static const seekdir end = 0x04; + + _UCXXEXPORT fmtflags flags() const{ + return mformat; + } + _UCXXEXPORT fmtflags flags(fmtflags fmtfl); + + fmtflags setf(fmtflags fmtfl); + fmtflags setf(fmtflags fmtfl, fmtflags mask ); + + _UCXXEXPORT void unsetf(fmtflags mask){ + mformat&= ~mask; + } + + _UCXXEXPORT streamsize precision() const{ + return mprecision; + } + + _UCXXEXPORT streamsize precision(streamsize prec); + + _UCXXEXPORT streamsize width() const{ + return mwidth; + } + + _UCXXEXPORT streamsize width(streamsize wide); + + _UCXXEXPORT locale imbue(const locale& loc); + + _UCXXEXPORT locale getloc() const{ + return mLocale; + } + +// FIXME - These need to be implemented +// static int xalloc(); +// long& iword(int index); +// void*& pword(int index); + + _UCXXEXPORT ~ios_base() { } + + enum event { erase_event, imbue_event, copyfmt_event }; + + typedef void (*event_callback)(event, ios_base&, int index); +// void register_callback(event_call_back fn, int index); + + //We are going to wrap stdio so we don't need implementation of the following: + inline static bool sync_with_stdio(bool = true) { return true; } + + protected: + _UCXXEXPORT ios_base() : mLocale(), mformat(dec | skipws ), mstate(goodbit), + mmode(), mdir(), mprecision(6), mwidth(0) +#ifdef __UCLIBCXX_SUPPORT_CDIR__ + ,mInit() +#endif + { + + } + locale mLocale; + fmtflags mformat; + iostate mstate; + openmode mmode; + seekdir mdir; + streamsize mprecision; + streamsize mwidth; +#ifdef __UCLIBCXX_SUPPORT_CDIR__ + Init mInit; +#endif + }; + + + //ios_base manipulators + + + inline ios_base& boolalpha (ios_base& str){ + str.setf(ios_base::boolalpha); + return str; + } + inline ios_base& noboolalpha(ios_base& str){ + str.unsetf(ios_base::boolalpha); + return str; + } + inline ios_base& showbase (ios_base& str){ + str.setf(ios_base::showbase); + return str; + } + inline ios_base& noshowbase (ios_base& str){ + str.unsetf(ios_base::showbase); + return str; + } + inline ios_base& showpoint (ios_base& str){ + str.setf(ios_base::showpoint); + return str; + } + inline ios_base& noshowpoint(ios_base& str){ + str.unsetf(ios_base::showpoint); + return str; + } + inline ios_base& showpos (ios_base& str){ + str.setf(ios_base::showpos); + return str; + } + inline ios_base& noshowpos (ios_base& str){ + str.unsetf(ios_base::showpos); + return str; + } + inline ios_base& skipws (ios_base& str){ + str.setf(ios_base::skipws); + return str; + } + inline ios_base& noskipws (ios_base& str){ + str.unsetf(ios_base::skipws); + return str; + } + inline ios_base& uppercase (ios_base& str){ + str.setf(ios_base::uppercase); + return str; + } + inline ios_base& nouppercase(ios_base& str){ + str.unsetf(ios_base::uppercase); + return str; + } + + inline ios_base& unitbuf (ios_base& str){ + str.setf(ios_base::unitbuf); + return str; + } + inline ios_base& nounitbuf (ios_base& str){ + str.unsetf(ios_base::unitbuf); + return str; + } + inline ios_base& internal (ios_base& str){ + str.setf(ios_base::internal, ios_base::adjustfield); + return str; + } + inline ios_base& left (ios_base& str){ + str.setf(ios_base::left, ios_base::adjustfield); + return str; + } + inline ios_base& right (ios_base& str){ + str.setf(ios_base::right, ios_base::adjustfield); + return str; + } + + inline ios_base& dec (ios_base& str){ + str.setf(ios_base::dec, ios_base::basefield); + return str; + } + inline ios_base& hex (ios_base& str){ + str.setf(ios_base::hex, ios_base::basefield); + return str; + } + inline ios_base& oct (ios_base& str){ + str.setf(ios_base::oct, ios_base::basefield); + return str; + } + + inline ios_base& fixed (ios_base& str){ + str.setf(ios_base::fixed, ios_base::floatfield); + return str; + } + inline ios_base& scientific (ios_base& str){ + str.setf(ios_base::scientific, ios_base::floatfield); + return str; + } + + + //basic_ios class definition + + + template class _UCXXEXPORT basic_ios + : public ios_base + { + public: + // Types: + typedef charT char_type; + typedef typename traits::int_type int_type; + typedef typename traits::pos_type pos_type; + typedef typename traits::off_type off_type; + typedef traits traits_type; + + _UCXXEXPORT operator void*() const{ + if(fail() ){ + return 0; + } + return (void *)(1); //Must return a non-NULL pointer (though it can be *any* pointer) + } + + _UCXXEXPORT bool operator!() const{ + return fail(); + } + _UCXXEXPORT iostate rdstate() const{ + return mstate; + } + _UCXXEXPORT void clear(iostate state = goodbit){ + if(rdbuf()!=0){ + mstate = state; + }else{ + mstate = state|ios_base::badbit; + } + } + _UCXXEXPORT void setstate(iostate state) { + clear(rdstate() | state); +#ifdef __UCLIBCXX_EXCEPTION_SUPPORT__ + if(rdstate() & throw_mask){ + throw failure(); + } +#endif + } + + _UCXXEXPORT bool good() const{ + return (rdstate() == 0); + } + _UCXXEXPORT bool eof() const{ + if(rdstate() & eofbit){ + return true; + } + return false; + } + _UCXXEXPORT bool fail() const{ + if( mstate & (failbit | badbit) ){ + return true; + } + return false; + } + + _UCXXEXPORT bool bad() const{ + if(mstate & badbit){ + return true; + } + return false; + } + + _UCXXEXPORT iostate exceptions() const{ + return throw_mask; + } + _UCXXEXPORT void exceptions(iostate except){ + throw_mask = except; + } + + explicit _UCXXEXPORT basic_ios(basic_streambuf* sb) : fill_char(' '), mtied(0), mstreambuf(0){ + init(sb); + } + + basic_ios() : mtied(0), mstreambuf(0){ } + + virtual _UCXXEXPORT ~basic_ios(){ + } + + _UCXXEXPORT basic_ostream* tie() const{ + return mtied; + } + _UCXXEXPORT basic_ostream* tie(basic_ostream* tiestr){ + basic_ostream* retval= mtied; + mtied = tiestr; + return retval; + } + _UCXXEXPORT basic_streambuf* rdbuf() const{ + return mstreambuf; + } + _UCXXEXPORT basic_streambuf* rdbuf(basic_streambuf* sb){ + basic_streambuf* retval = mstreambuf; + mstreambuf = sb; + return retval; + } + _UCXXEXPORT basic_ios& copyfmt(const basic_ios& rhs); + _UCXXEXPORT char_type fill() const{ + return fill_char; + } + _UCXXEXPORT char_type fill(char_type ch){ + char_type temp = fill_char; + fill_char = ch; + return temp; + } + + _UCXXEXPORT locale imbue(const locale& loc){ + return ios_base::imbue(loc); + } + _UCXXEXPORT char narrow(char_type c, char dfault) const; + _UCXXEXPORT char_type widen(char c) const; + + protected: + char_type fill_char; + basic_ostream* mtied; + basic_streambuf* mstreambuf; + iostate throw_mask; + _UCXXEXPORT basic_ios(const basic_ios &){ } + _UCXXEXPORT basic_ios & operator=(const basic_ios &){ return *this; } + _UCXXEXPORT void init(basic_streambuf* sb){ + ios_base::mformat = skipws|dec; + mstreambuf = sb; + mstate = goodbit; + throw_mask = goodbit; + } + }; + +#ifdef __UCLIBCXX_EXPAND_IOS_CHAR__ +#ifndef __UCLIBCXX_COMPILE_IOS__ + + template <> _UCXXEXPORT void basic_ios >::clear(iostate state); + template <> _UCXXEXPORT void basic_ios >::setstate(iostate state); + +#endif +#endif + + + template + inline char basic_ios::narrow(char_type c, char dfault) const + { + return dfault; + } + + template <> + inline char basic_ios >::narrow(char_type c, char) const + { + return c; + } + +#ifdef __UCLIBCXX_HAS_WCHAR__ + + template <> + inline char basic_ios >::narrow(char_type c, char dfault) const + { + char retval = wctob (c); + if(retval == EOF){ + retval = dfault; + } + return retval; + } + +#endif //__UCLIBCXX_HAS_WCHAR__ + + template + inline typename basic_ios::char_type + basic_ios::widen(char c) const + { + return c; + } + + template <> + inline basic_ios >::char_type + basic_ios >::widen(char c) const + { + return c; + } + +#ifdef __UCLIBCXX_HAS_WCHAR__ + + template <> + inline basic_ios >::char_type + basic_ios >::widen(char c) const + { + return btowc(c); + } + +#endif //__UCLIBCXX_HAS_WCHAR__ + + + template class _UCXXEXPORT fpos{ + public: + _UCXXEXPORT fpos(stateT s){ + st = s; + } + _UCXXEXPORT stateT state() const{ + return st; + } + _UCXXEXPORT void state(stateT s){ + st = s; + } + _UCXXEXPORT bool operator==(const fpos &rhs){ + return st == rhs.st; + } + _UCXXEXPORT bool operator!=(const fpos &rhs){ + return st != rhs.st; + } + _UCXXEXPORT fpos & operator+(const streamoff & o){ + st += o; + return *this; + } + _UCXXEXPORT fpos & operator-(const streamoff & o){ + st -= o; + return *this; + } + _UCXXEXPORT streamoff operator-(const fpos & rhs){ + return st - rhs.st; + } + + private: + stateT st; + }; + + +} + +#pragma GCC visibility pop + +#endif + diff --git a/external/arduino/stlarduino/ios.cpp b/external/arduino/stlarduino/ios.cpp new file mode 100644 index 000000000..6d83cefde --- /dev/null +++ b/external/arduino/stlarduino/ios.cpp @@ -0,0 +1,188 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#define __UCLIBCXX_COMPILE_IOS__ 1 + +#include +#include +#include +#include + +namespace std{ + + +#ifdef __UCLIBCXX_SUPPORT_CDIR__ + _UCXXLOCAL int ios_base::Init::init_cnt = 0; //Needed to ensure the static value is created + +//Create buffers first +#ifdef __UCLIBCXX_SUPPORT_COUT__ + _UCXXEXPORT filebuf _cout_filebuf; +#endif +#ifdef __UCLIBCXX_SUPPORT_CIN__ + _UCXXEXPORT filebuf _cin_filebuf; +#endif +#ifdef __UCLIBCXX_SUPPORT_CERR__ + _UCXXEXPORT filebuf _cerr_filebuf; +#endif +#ifdef __UCLIBCXX_SUPPORT_CLOG__ + _UCXXEXPORT filebuf _clog_filebuf; +#endif +#ifdef __UCLIBCXX_SUPPORT_WCOUT__ + _UCXXEXPORT wfilebuf _wcout_filebuf; +#endif +#ifdef __UCLIBCXX_SUPPORT_WCIN__ + _UCXXEXPORT wfilebuf _wcin_filebuf; +#endif +#ifdef __UCLIBCXX_SUPPORT_WCERR__ + _UCXXEXPORT wfilebuf _wcerr_filebuf; +#endif +#ifdef __UCLIBCXX_SUPPORT_WCLOG__ + _UCXXEXPORT wfilebuf _wclog_filebuf; +#endif + +//Then create streams +#ifdef __UCLIBCXX_SUPPORT_COUT__ + _UCXXEXPORT ostream cout(&_cout_filebuf); +#endif +#ifdef __UCLIBCXX_SUPPORT_CIN__ + _UCXXEXPORT istream cin(&_cin_filebuf); +#endif +#ifdef __UCLIBCXX_SUPPORT_CERR__ + _UCXXEXPORT ostream cerr(&_cerr_filebuf); +#endif +#ifdef __UCLIBCXX_SUPPORT_CLOG__ + _UCXXEXPORT ostream clog(&_clog_filebuf); +#endif +#ifdef __UCLIBCXX_SUPPORT_WCOUT__ + _UCXXEXPORT wostream wcout(&_wcout_filebuf); +#endif +#ifdef __UCLIBCXX_SUPPORT_WCIN__ + _UCXXEXPORT wistream wcin(&_wcin_filebuf); +#endif +#ifdef __UCLIBCXX_SUPPORT_WCERR__ + _UCXXEXPORT wostream wcerr(&_wcerr_filebuf); +#endif +#ifdef __UCLIBCXX_SUPPORT_WCLOG__ + _UCXXEXPORT wostream wclog(&_wclog_filebuf); +#endif + + + _UCXXEXPORT ios_base::Init::Init(){ + if(init_cnt == 0){ //Need to construct cout et al +#ifdef __UCLIBCXX_SUPPORT_COUT__ + _cout_filebuf.fp = stdout; + _cout_filebuf.openedFor = ios_base::out; +#endif +#ifdef __UCLIBCXX_SUPPORT_CERR__ + _cerr_filebuf.fp = stderr; + _cerr_filebuf.openedFor = ios_base::out; + cerr.mformat |= ios_base::unitbuf; +#endif +#ifdef __UCLIBCXX_SUPPORT_CLOG__ + _clog_filebuf.fp = stderr; + _clog_filebuf.openedFor = ios_base::out; +#endif +#ifdef __UCLIBCXX_SUPPORT_CIN__ + _cin_filebuf.fp = stdin; + _cin_filebuf.openedFor = ios_base::in; + +#ifdef __UCLIBCXX_SUPPORT_COUT__ + cin.tie(&cout); +#endif + +#endif +#ifdef __UCLIBCXX_SUPPORT_WCOUT__ + _wcout_filebuf.fp = stdout; + _wcout_filebuf.openedFor = ios_base::out; +#endif +#ifdef __UCLIBCXX_SUPPORT_WCERR__ + _wcerr_filebuf.fp = stderr; + _wcerr_filebuf.openedFor = ios_base::out; + wcerr.mformat |= ios_base::unitbuf; +#endif +#ifdef __UCLIBCXX_SUPPORT_WCLOG__ + _wclog_filebuf.fp = stderr; + _wclog_filebuf.openedFor = ios_base::out; +#endif +#ifdef __UCLIBCXX_SUPPORT_WCIN__ + _wcin_filebuf.fp = stdin; + _wcin_filebuf.openedFor = ios_base::in; + +#ifdef __UCLIBCXX_SUPPORT_WCOUT__ + wcin.tie(&wcout); +#endif + +#endif + } + init_cnt++; + } + + _UCXXEXPORT ios_base::Init::~Init(){ + --init_cnt; + if(init_cnt==0){ + + } + } +#endif + + +#ifdef __UCLIBCXX_EXPAND_IOS_CHAR__ + + template _UCXXEXPORT void basic_ios >::clear(iostate state); + template _UCXXEXPORT void basic_ios >::setstate(iostate state); + +#endif + + + _UCXXEXPORT ios_base::fmtflags ios_base::flags(fmtflags fmtfl){ + fmtflags temp = mformat; + mformat = fmtfl; + return temp; + } + + _UCXXEXPORT ios_base::fmtflags ios_base::setf(fmtflags fmtfl){ + return flags(flags() | fmtfl); + } + + _UCXXEXPORT ios_base::fmtflags ios_base::setf(fmtflags fmtfl, fmtflags mask ){ + return flags( (flags()& ~mask) | (fmtfl & mask)); + } + + _UCXXEXPORT streamsize ios_base::precision(streamsize prec){ + streamsize temp = mprecision; + mprecision = prec; + return temp; + } + + _UCXXEXPORT streamsize ios_base::width(streamsize wide){ + streamsize temp = mwidth; + mwidth = wide; + return temp; + } + + _UCXXEXPORT locale ios_base::imbue(const locale& loc){ + locale retval = mLocale; + mLocale = loc; + return retval; + } + +} + + + diff --git a/external/arduino/stlarduino/iosfwd b/external/arduino/stlarduino/iosfwd new file mode 100644 index 000000000..2c14725e3 --- /dev/null +++ b/external/arduino/stlarduino/iosfwd @@ -0,0 +1,114 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include +#include +#include + + +#ifndef __HEADER_STD_IOSFWD +#define __HEADER_STD_IOSFWD 1 + +#pragma GCC visibility push(default) + +namespace std { + class ios_base; + template<> class char_traits; + +#ifdef __UCLIBCXX_HAS_WCHAR__ + template<> class char_traits; +#endif + + template > class basic_ios; + + template > class basic_streambuf; + template > class basic_istream; + template > class basic_ostream; + template > class basic_iostream; + + template , + class Allocator = allocator > class basic_stringbuf; + + template , + class Allocator = allocator > class basic_istringstream; + + template , + class Allocator = allocator > class basic_ostringstream; + + template , + class Allocator = allocator > class basic_stringstream; + + template > class basic_filebuf; + + template > class basic_ifstream; + + template > class basic_ofstream; + + template > class basic_fstream; + + template > class basic_istreambuf_iterator; + + template > class basic_ostreambuf_iterator; + + typedef basic_ios ios; +#ifdef __UCLIBCXX_HAS_WCHAR__ + typedef basic_ios wios; +#endif + + typedef basic_streambuf streambuf; + typedef basic_istream istream; + typedef basic_ostream ostream; + typedef basic_iostream iostream; + + typedef basic_stringbuf stringbuf; + typedef basic_istringstream istringstream; + typedef basic_ostringstream ostringstream; + typedef basic_stringstream stringstream; + + typedef basic_filebuf filebuf; + typedef basic_ifstream ifstream; + typedef basic_ofstream ofstream; + typedef basic_fstream fstream; +#ifdef __UCLIBCXX_HAS_WCHAR__ + typedef basic_streambuf wstreambuf; + typedef basic_istream wistream; + typedef basic_ostream wostream; + typedef basic_iostream wiostream; + + typedef basic_stringbuf wstringbuf; + typedef basic_istringstream wistringstream; + typedef basic_ostringstream wostringstream; + typedef basic_stringstream wstringstream; + + typedef basic_filebuf wfilebuf; + typedef basic_ifstream wifstream; + typedef basic_ofstream wofstream; + typedef basic_fstream wfstream; +#endif + + template class fpos; + typedef fpos::state_type> streampos; +#ifdef __UCLIBCXX_HAS_WCHAR__ + typedef fpos::state_type> wstreampos; +#endif +} + +#pragma GCC visibility pop + +#endif diff --git a/external/arduino/stlarduino/iostream b/external/arduino/stlarduino/iostream new file mode 100644 index 000000000..64b5f06fc --- /dev/null +++ b/external/arduino/stlarduino/iostream @@ -0,0 +1,100 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include + +#ifndef __HEADER_STD_IOSTREAM +#define __HEADER_STD_IOSTREAM 1 + +#include +#include +#include +#include +#include + +#pragma GCC visibility push(default) + +namespace std{ +#ifdef __UCLIBCXX_SUPPORT_CIN__ + extern istream cin; +#endif +#ifdef __UCLIBCXX_SUPPORT_COUT__ + extern ostream cout; +#endif +#ifdef __UCLIBCXX_SUPPORT_CERR__ + extern ostream cerr; +#endif +#ifdef __UCLIBCXX_SUPPORT_CLOG__ + extern ostream clog; +#endif +#ifdef __UCLIBCXX_SUPPORT_WCIN__ + extern wistream wcin; +#endif +#ifdef __UCLIBCXX_SUPPORT_WCOUT__ + extern wostream wcout; +#endif +#ifdef __UCLIBCXX_SUPPORT_WCERR__ + extern wostream wcerr; +#endif +#ifdef __UCLIBCXX_SUPPORT_WCLOG__ + extern wostream wclog; +#endif + + + template class _UCXXEXPORT basic_iostream : + public basic_istream, public basic_ostream + { + public: + // constructor/destructor + explicit _UCXXEXPORT basic_iostream(basic_streambuf* sb); + virtual _UCXXEXPORT ~basic_iostream(); //Below + }; + + template _UCXXEXPORT + basic_iostream:: basic_iostream(basic_streambuf* sb) + : basic_ios(sb), basic_istream(sb), basic_ostream(sb) + { + return; + } + + + template _UCXXEXPORT basic_iostream::~basic_iostream(){ + return; + } + + +#ifdef __UCLIBCXX_EXPAND_OSTREAM_CHAR__ +#ifdef __UCLIBCXX_EXPAND_ISTREAM_CHAR__ +#ifndef __UCLIBCXX_COMPILE_IOSTREAM__ + + template <> _UCXXEXPORT basic_iostream >:: + basic_iostream(basic_streambuf >* sb); + template <> _UCXXEXPORT basic_iostream >::~basic_iostream(); + +#endif +#endif +#endif + + + +} + +#pragma GCC visibility pop + +#endif diff --git a/external/arduino/stlarduino/iostream.cpp b/external/arduino/stlarduino/iostream.cpp new file mode 100644 index 000000000..7a190a2bf --- /dev/null +++ b/external/arduino/stlarduino/iostream.cpp @@ -0,0 +1,38 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#define __UCLIBCXX_COMPILE_IOSTREAM__ 1 + +#include + +namespace std{ + +#ifdef __UCLIBCXX_EXPAND_OSTREAM_CHAR__ +#ifdef __UCLIBCXX_EXPAND_ISTREAM_CHAR__ + + template _UCXXEXPORT basic_iostream >:: + basic_iostream(basic_streambuf >* sb); + template _UCXXEXPORT basic_iostream >::~basic_iostream(); + +#endif +#endif + +} + + diff --git a/external/arduino/stlarduino/istream b/external/arduino/stlarduino/istream new file mode 100644 index 000000000..a6fe3dee5 --- /dev/null +++ b/external/arduino/stlarduino/istream @@ -0,0 +1,609 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + + This file is part of the uClibc C++ Library. This library is free + software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) + any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this library; see the file COPYING. If not, write to the Free + Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, + USA. +*/ + +#include +#include +#include +#include +#include + +#ifndef __STD_HEADER_ISTREAM +#define __STD_HEADER_ISTREAM 1 + +#pragma GCC visibility push(default) + +namespace std{ + + typedef basic_istream istream; + +#ifdef __UCLIBCXX_HAS_WCHAR__ + typedef basic_istream wistream; +#endif + + template basic_istream& ws(basic_istream& is); + + template class _UCXXEXPORT basic_istream : + virtual public basic_ios + { + public: + + typedef charT char_type; + typedef typename traits::int_type int_type; + typedef typename traits::pos_type pos_type; + typedef typename traits::off_type off_type; + typedef basic_streambuf streambuf_type; + typedef traits traits_type; + + explicit basic_istream(basic_streambuf* sb) + : basic_ios(sb), count_last_ufmt_input(0) + { + basic_ios::init(sb); + } + virtual ~basic_istream() { } + + class sentry; + + basic_istream& operator>>(basic_istream& (*pf)(basic_istream&)); + basic_istream& operator>>(basic_ios& (*pf)(basic_ios&)); + basic_istream& operator>>(ios_base& (*pf)(ios_base&)); + basic_istream& operator>>(bool& n); + basic_istream& operator>>(short& n); + basic_istream& operator>>(unsigned short& n); + basic_istream& operator>>(int& n); + basic_istream& operator>>(unsigned int& n); + basic_istream& operator>>(long& n); + basic_istream& operator>>(unsigned long& n); + basic_istream& operator>>(void*& p); + basic_istream& operator>>(basic_streambuf* sb); + +#ifdef __UCLIBCXX_HAS_FLOATS__ + basic_istream& operator>>(float& f); + basic_istream& operator>>(double& f); + basic_istream& operator>>(long double& f); +#endif + + _UCXXEXPORT streamsize gcount() const{ + return count_last_ufmt_input; + } + + _UCXXEXPORT int_type get(); //below + _UCXXEXPORT basic_istream& get(char_type& c); //Below + + _UCXXEXPORT basic_istream& get(char_type* s, streamsize n){ + return get(s, n, basic_ios::widen('\n')); + } + + _UCXXEXPORT basic_istream& get(char_type* s, streamsize n, char_type delim){ + sentry(*this, true); + streamsize i = 0; + int_type c; + for(i=0;i::mstreambuf->sgetc(); + basic_ios::mstreambuf->sbumpc(); + if(c == traits::eof() ){ + if(i==0){ + basic_ios::setstate(ios_base::failbit); + }else{ + basic_ios::setstate(ios_base::eofbit); + } + break; + } + if(c == delim){ + if(i==0){ + basic_ios::setstate(ios_base::failbit); + } + basic_ios::mstreambuf->sputbackc(c); + break; + } + s[i] = c; + } + s[i] = traits::eos(); + count_last_ufmt_input = i; + return *this; + } + + _UCXXEXPORT basic_istream& get(basic_streambuf& sb){ + return get(sb, basic_ios::widen('\n')); + } + + _UCXXEXPORT basic_istream& get(basic_streambuf& sb, char_type delim){ + sentry(*this, true); + streamsize i = 0; + int_type c; + while(1){ //We will exit internally based upon error conditions + c = basic_ios::mstreambuf->sgetc(); + if(c == traits::eof()){ + if(i==0){ + basic_ios::setstate(ios_base::failbit); + }else{ + basic_ios::setstate(ios_base::eofbit); + } + count_last_ufmt_input = i; + return *this; + } + if(c == delim){ + if(i==0){ + basic_ios::setstate(ios_base::failbit); + } + count_last_ufmt_input = i; + return *this; + } + if(sb.sputc(c) != c){ //Error doing output + count_last_ufmt_input = i; + return *this; + } + ++i; + basic_ios::mstreambuf->sbumpc(); + } + } + + _UCXXEXPORT basic_istream& getline(char_type* s, streamsize n){ + return getline(s, n, basic_ios::widen('\n')); + } + + _UCXXEXPORT basic_istream& getline(char_type* s, streamsize n, char_type delim){ + sentry(*this, true); + streamsize i = 0; + int_type c; + for(i=0;i::mstreambuf->sgetc(); + if(c == traits::eof() ){ + if( basic_ios::eof() ){ + basic_ios::setstate(ios_base::failbit); + }else{ + basic_ios::setstate(ios_base::eofbit); + } + count_last_ufmt_input = i; + s[i] = traits::eos(); + return *this; + } + if(basic_ios::mstreambuf->sbumpc()==traits::eof() ){ + basic_ios::setstate(ios_base::eofbit); + } + if(c == delim){ + count_last_ufmt_input = i+1; + s[i] = traits::eos(); + return *this; + } + s[i] = c; + } + s[n-1] = traits::eos(); + return *this; + } + + _UCXXEXPORT basic_istream& ignore (streamsize n = 1, int_type delim = traits::eof()){ + sentry(*this, true); + streamsize i; + int_type c; + for(i=0;i::mstreambuf->sgetc(); + if(c == traits::eof()){ + basic_ios::setstate(ios_base::eofbit); + return *this; + } + basic_ios::mstreambuf->sbumpc(); + if(c == delim){ + return *this; + } + } + return *this; + } + + _UCXXEXPORT int_type peek(){ + if(basic_ios::good() == false){ + return traits::eof(); + }else{ + int_type c = basic_ios::mstreambuf->sgetc(); + if(c == traits::eof()){ + basic_ios::setstate(ios_base::eofbit); + } + return basic_ios::mstreambuf->sgetc(); + } + } + + _UCXXEXPORT basic_istream& read (char_type* s, streamsize n){ + sentry(*this, true); + streamsize i; + int_type c; + for(i=0;i::mstreambuf->sgetc(); + + if(c == traits::eof()){ + basic_ios::setstate(ios_base::failbit); + basic_ios::setstate(ios_base::eofbit); + count_last_ufmt_input = i; + return *this; + } + basic_ios::mstreambuf->sbumpc(); + s[i] = c; + } + count_last_ufmt_input = n; + return *this; + } + + _UCXXEXPORT streamsize readsome(char_type* s, streamsize n){ + sentry(*this, true); + if(!basic_ios::good()){ + count_last_ufmt_input = 0; + basic_ios::setstate(ios_base::failbit); + return 0; + } + + if( basic_ios::mstreambuf->in_avail() == -1){ + count_last_ufmt_input=0; + basic_ios::setstate(ios_base::eofbit); + return 0; + } + + if(n > basic_ios::mstreambuf->in_avail() ){ + n = basic_ios::mstreambuf->in_avail(); + } + + streamsize i; + int_type c; + + for(i=0;i::mstreambuf->sgetc(); + basic_ios::mstreambuf->sbumpc(); + s[i] = c; + } + count_last_ufmt_input = n; + return n; + } + + _UCXXEXPORT basic_istream& putback(char_type c){ + sentry(*this, true); + if(!basic_ios::good()){ + basic_ios::setstate(ios_base::failbit); + return *this; + } + if(basic_ios::mstreambuf == 0){ + basic_ios::setstate(ios_base::badbit); + return *this; + } + if(basic_ios::mstreambuf->sputbackc(c) == traits::eof()){ + basic_ios::setstate(ios_base::badbit); + return *this; + } + return *this; + } + + _UCXXEXPORT basic_istream& unget(){ + sentry(*this, true); + if(!basic_ios::good()){ + basic_ios::setstate(ios_base::failbit); + return *this; + } + if(basic_ios::mstreambuf == 0){ + basic_ios::setstate(ios_base::failbit); + return *this; + } + if(basic_ios::mstreambuf->sungetc() == traits::eof()){ + basic_ios::setstate(ios_base::failbit); + } + return *this; + } + + _UCXXEXPORT int sync(){ + sentry(*this, true); + if(basic_ios::mstreambuf == 0){ + return -1; + } + if(basic_ios::mstreambuf->pubsync() == -1){ + basic_ios::setstate(ios_base::badbit); + return traits::eof(); + } + return 0; + } + + _UCXXEXPORT pos_type tellg(){ + if(basic_ios::fail() !=false){ + return pos_type(-1); + } + return basic_ios::mstreambuf->pubseekoff(0, ios_base::cur, ios_base::in); + } + + _UCXXEXPORT basic_istream& seekg(pos_type pos){ + if(basic_ios::fail() !=true){ + basic_ios::mstreambuf->pubseekpos(pos); + } + return *this; + } + + _UCXXEXPORT basic_istream& seekg(off_type off, ios_base::seekdir dir){ + if(basic_ios::fail() !=true){ + basic_ios::mstreambuf->pubseekoff(off, dir); + } + return *this; + } + + protected: + _UCXXEXPORT basic_istream(const basic_istream &): basic_ios() { } + _UCXXEXPORT basic_istream & operator=(const basic_istream &){ return *this; } + streamsize count_last_ufmt_input; + + }; + + template + class _UCXXEXPORT basic_istream::sentry + { + bool ok; + public: + explicit _UCXXEXPORT sentry(basic_istream& os, bool noskipws = false){ + if(os.good() !=0){ //Prepare for output + } + + //Flush any tied buffer + if(os.tie() != 0){ + os.tie()->flush(); + } + if(!noskipws){ + __skipws(os); + } + + ok = true; + } + _UCXXEXPORT ~sentry() { } + _UCXXEXPORT operator bool() { + return ok; + } + }; + + //Template implementations of basic_istream functions which may be partially specialized + //For code reduction + + template + _UCXXEXPORT typename basic_istream::int_type basic_istream::get(){ + sentry(*this, true); + int_type retval = basic_ios::mstreambuf->sgetc(); + if(retval == traits::eof()){ + count_last_ufmt_input = 0; + basic_ios::setstate(ios_base::eofbit); + }else{ + count_last_ufmt_input = 1; + basic_ios::mstreambuf->sbumpc(); + } + return retval; + } + + template + _UCXXEXPORT basic_istream& basic_istream::get(char_type& c){ + sentry(*this, true); + int_type retval = basic_ios::mstreambuf->sgetc(); + if(retval == traits::eof()){ + count_last_ufmt_input = 0; + basic_ios::setstate(ios_base::eofbit); + basic_ios::setstate(ios_base::failbit); + }else{ + count_last_ufmt_input = 1; + c = traits::to_char_type(retval); + basic_ios::mstreambuf->sbumpc(); + } + return *this; + } + + + template _UCXXEXPORT basic_istream& + basic_istream::operator>>(bool& n) + { + sentry(*this); + __istream_readin::readin(*this, n); + return *this; + } + + template _UCXXEXPORT basic_istream& + basic_istream::operator>>(short& n) + { + sentry(*this); + __istream_readin::readin(*this, n); + return *this; + } + + template _UCXXEXPORT basic_istream& + basic_istream::operator>>(unsigned short& n) + { + sentry(*this); + __istream_readin::readin(*this, n); + return *this; + } + + template _UCXXEXPORT basic_istream& basic_istream::operator>>(int& n){ + sentry(*this); + __istream_readin::readin(*this, n); + return *this; + } + + template _UCXXEXPORT basic_istream& basic_istream::operator>>(unsigned int& n){ + sentry(*this); + __istream_readin::readin(*this, n); + return *this; + } + + template _UCXXEXPORT basic_istream& basic_istream::operator>>(long int& n){ + sentry(*this); + __istream_readin::readin(*this, n); + return *this; + } + + template _UCXXEXPORT basic_istream& + basic_istream::operator>>(unsigned long int& n) + { + sentry(*this); + __istream_readin::readin(*this, n); + return *this; + } + +#ifdef __UCLIBCXX_HAS_FLOATS__ + template _UCXXEXPORT basic_istream& + basic_istream::operator>>(float& n) + { + sentry(*this); + __istream_readin::readin(*this, n); + return *this; + } + template _UCXXEXPORT basic_istream& + basic_istream::operator>>(double& n) + { + sentry(*this); + __istream_readin::readin(*this, n); + return *this; + } + template _UCXXEXPORT basic_istream& + basic_istream::operator>>(long double& n) + { + sentry(*this); + __istream_readin::readin(*this, n); + return *this; + } +#endif + template _UCXXEXPORT basic_istream& + basic_istream::operator>>(void *& n) + { + sentry(*this); + __istream_readin::readin(*this, n); + return *this; + } + + template _UCXXEXPORT basic_istream& + operator>>(basic_istream& is, charT& c) + { + typename basic_istream::sentry s(is); + is.get(c); + return is; + } + + template _UCXXEXPORT basic_istream& + operator>>(basic_istream& is, unsigned char& c) + { + typename basic_istream::sentry s(is); + char b; + is.get(b); + c = b; + return is; + } + template _UCXXEXPORT basic_istream& + operator>>(basic_istream& is, signed char& c) + { + typename basic_istream::sentry s(is); + is.get(c); + return is; + } + + template _UCXXEXPORT basic_istream& + operator>>(basic_istream& is, charT* c) + { + typename basic_istream::sentry s(is); + int n = is.width(); + if(n == 0){ + n = __STRING_MAX_UNITS; + } + is.get(c, n); + return is; + + } + template _UCXXEXPORT basic_istream& + operator>>(basic_istream& is, unsigned char* c) + { + typename basic_istream::sentry s(is); + int n = is.width(); + if(n == 0){ + n = __STRING_MAX_UNITS; + } + is.get(c, n); + return is; + } + template _UCXXEXPORT basic_istream& + operator>>(basic_istream& is, signed char* c) + { + typename basic_istream::sentry s(is); + int n = is.width(); + if(n == 0){ + n = __STRING_MAX_UNITS; + } + is.get(c, n); + return is; + } + + template _UCXXEXPORT basic_istream& + basic_istream::operator>>(basic_istream& (*pf)(basic_istream&)) + { + sentry(*this); + pf(*this); + return *this; + } + + template _UCXXEXPORT basic_istream& + basic_istream::operator>>(basic_ios& (*pf)(basic_ios&)) + { + sentry(*this); + pf(*this); + return *this; + } + + template _UCXXEXPORT basic_istream& + basic_istream::operator>>(ios_base& (*pf)(ios_base&)) + { + sentry(*this); + pf(*this); + return *this; + } + + template _UCXXEXPORT basic_istream& + ws(basic_istream& is) + { + __skipws(is); + return is; + } + + +#ifdef __UCLIBCXX_EXPAND_ISTREAM_CHAR__ +#ifndef __UCLIBCXX_COMPILE_ISTREAM__ + + + template <> _UCXXEXPORT istream & basic_istream >::get(char & c); + template <> _UCXXEXPORT istream::int_type basic_istream >::get(); + + template <> _UCXXEXPORT istream & istream::operator>>(bool &n); + template <> _UCXXEXPORT istream & istream::operator>>(short &n); + template <> _UCXXEXPORT istream & istream::operator>>(unsigned short &n); + template <> _UCXXEXPORT istream & istream::operator>>(int &n); + template <> _UCXXEXPORT istream & istream::operator>>(unsigned int &n); + template <> _UCXXEXPORT istream & istream::operator>>(long unsigned &n); + template <> _UCXXEXPORT istream & istream::operator>>(long int &n); + template <> _UCXXEXPORT istream & istream::operator>>(void *& p); + +#ifdef __UCLIBCXX_HAS_FLOATS__ + template <> _UCXXEXPORT istream & istream::operator>>(float &f); + template <> _UCXXEXPORT istream & istream::operator>>(double &f); + template <> _UCXXEXPORT istream & istream::operator>>(long double &f); +#endif + + template <> _UCXXEXPORT istream & operator>>(istream & is, char & c); + + template <> _UCXXEXPORT void __skipws(basic_istream >& is); + +#endif +#endif + +} + +#pragma GCC visibility pop + +#endif + diff --git a/external/arduino/stlarduino/istream.cpp b/external/arduino/stlarduino/istream.cpp new file mode 100644 index 000000000..9e9613973 --- /dev/null +++ b/external/arduino/stlarduino/istream.cpp @@ -0,0 +1,75 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*/ + +#define __UCLIBCXX_COMPILE_ISTREAM__ 1 + +#include + + +namespace std{ + +#ifdef __UCLIBCXX_EXPAND_ISTREAM_CHAR__ + + template <> _UCXXEXPORT string _readToken >(istream & stream) + { + string temp; + char_traits::int_type c; + while(true){ + c = stream.rdbuf()->sgetc(); + if(c != char_traits::eof() && isspace(c) == false){ + stream.rdbuf()->sbumpc(); + temp.append(1, char_traits::to_char_type(c)); + }else{ + break; + } + } + if (temp.size() == 0) + stream.setstate(ios_base::eofbit|ios_base::failbit); + + return temp; + } + + template _UCXXEXPORT istream::int_type istream::get(); + template _UCXXEXPORT istream & istream::get(char &c); + + template _UCXXEXPORT istream & istream::operator>>(bool &n); + template _UCXXEXPORT istream & istream::operator>>(short &n); + template _UCXXEXPORT istream & istream::operator>>(unsigned short &n); + template _UCXXEXPORT istream & istream::operator>>(int &n); + template _UCXXEXPORT istream & istream::operator>>(unsigned int &n); + template _UCXXEXPORT istream & istream::operator>>(long unsigned &n); + template _UCXXEXPORT istream & istream::operator>>(long int &n); + template _UCXXEXPORT istream & istream::operator>>(void *& p); + template _UCXXEXPORT istream & operator>>(istream & is, char & c); + + +#ifdef __UCLIBCXX_HAS_FLOATS__ + template _UCXXEXPORT istream & istream::operator>>(float &f); + template _UCXXEXPORT istream & istream::operator>>(double &f); + template _UCXXEXPORT istream & istream::operator>>(long double &f); +#endif + + template _UCXXEXPORT void __skipws(basic_istream >& is); + +#endif + + +} + diff --git a/external/arduino/stlarduino/istream_helpers b/external/arduino/stlarduino/istream_helpers new file mode 100644 index 000000000..baa8c2cea --- /dev/null +++ b/external/arduino/stlarduino/istream_helpers @@ -0,0 +1,410 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include +#include + +#include + +#ifndef __STD_HEADER_ISTREAM_HELPERS +#define __STD_HEADER_ISTREAM_HELPERS 1 + +#pragma GCC visibility push(default) + +namespace std{ + + + /* We are making the following template class for serveral reasons. Firstly, + * we want to keep the main istream code neat and tidy. Secondly, we want it + * to be easy to do partial specialization of the istream code so that it can + * be expanded and put into the library. This will allow us to make application + * code smaller at the expense of increased library size. This is a fair + * trade-off when there are multiple applications being compiled. Also, this + * feature will be used optionally via configuration options. It will also + * allow us to keep the code bases in sync, dramatically simplifying the + * maintenance required. We specialized for char because wchar and others + * require different scanf functions + */ + + template _UCXXEXPORT + basic_string _readToken(basic_istream& stream) + { + basic_string temp; + typename traits::int_type c; + while(true){ + c = stream.rdbuf()->sgetc(); + if(c != traits::eof() && isspace(c) == false){ + stream.rdbuf()->sbumpc(); + temp.append(1, traits::to_char_type(c)); + }else{ + break; + } + } + if (temp.size() == 0) + stream.setstate(ios_base::eofbit|ios_base::failbit); + + return temp; + } + + template _UCXXEXPORT + basic_string _readTokenDecimal(basic_istream& stream) + { + basic_string temp; + typename traits::int_type c; + while(true){ + c = stream.rdbuf()->sgetc(); + if(c != traits::eof() && isspace(c) == false && ( + isdigit(c) || + c == '.' || + c == ',' || + ((c == '-' || c == '+') && temp.size() == 0) ) + ){ + stream.rdbuf()->sbumpc(); + temp.append(1, traits::to_char_type(c)); + }else{ + break; + } + } + if (temp.size() == 0) + stream.setstate(ios_base::eofbit|ios_base::failbit); + + return temp; + } + +#ifdef __UCLIBCXX_EXPAND_ISTREAM_CHAR__ + + template <> _UCXXEXPORT string _readToken >(istream & stream); + +#endif + + + template class _UCXXEXPORT __istream_readin{ + public: + static void readin(basic_istream& stream, dataType & var); + }; + + template class _UCXXEXPORT __istream_readin{ + public: + inline static void readin(basic_istream& stream, bool & var) + { + /* 22.4.2.1.2.4 */ + basic_string temp; + temp = _readToken( stream); + if (stream.flags() & ios_base::boolalpha) { + if (temp == "true") // truename() + var = true; + else { + var = false; + if (temp != "false") // falsename() + stream.setstate(ios_base::failbit); + } + } else { + long int i = 0; + int ret; + if (stream.flags() & ios_base::dec) { + ret = sscanf(temp.c_str(), "%ld", &i ); + } else { + if (stream.flags() & ios_base::oct) { + ret = sscanf(temp.c_str(), "%lo", (unsigned long int *)(&i)); + } else if (stream.flags() & ios_base::hex) { + if (stream.flags() & ios_base::uppercase) { + ret = sscanf(temp.c_str(), "%lX", (unsigned long int *)(&i)); + } else { + ret = sscanf(temp.c_str(), "%lx", (unsigned long int *)(&i)); + } + } else { + ret = sscanf(temp.c_str(), "%li", &i); + } + } + if (ret != 1 || i >> 1) + stream.setstate(ios_base::failbit); + var = ret == 1 && bool(i); + } + } + }; + + + template class _UCXXEXPORT __istream_readin{ + public: + inline static void readin(basic_istream& stream, short & var) + { + basic_string temp; + + if(stream.flags() & ios_base::dec){ + temp = _readTokenDecimal( stream); + sscanf(temp.c_str(), "%hd", &var ); + }else{ + temp = _readToken( stream); + if( stream.flags() & ios_base::oct){ + sscanf(temp.c_str(), "%ho", (unsigned short int *)(&var) ); + }else if(stream.flags() & ios_base::hex){ + if(stream.flags() & ios_base::uppercase){ + sscanf(temp.c_str(), "%hX", (unsigned short int *)(&var) ); + }else{ + sscanf(temp.c_str(), "%hx", (unsigned short int *)(&var) ); + } + }else{ + sscanf(temp.c_str(), "%hi", &var); + } + } + } + }; + + template class _UCXXEXPORT __istream_readin{ + public: + inline static void readin(basic_istream& stream, unsigned short & var) + { + basic_string temp; + + if(stream.flags() & ios_base::dec){ + temp = _readTokenDecimal( stream); + sscanf(temp.c_str(), "%hu", &var ); + }else{ + temp = _readToken( stream); + if( stream.flags() & ios_base::oct){ + sscanf(temp.c_str(), "%ho", &var); + }else if(stream.flags() & ios_base::hex){ + if(stream.flags() & ios_base::uppercase){ + sscanf(temp.c_str(), "%hX", &var ); + }else{ + sscanf(temp.c_str(), "%hx", &var); + } + }else{ + sscanf(temp.c_str(), "%hi", (signed short int*)(&var) ); + } + } + } + }; + + template class _UCXXEXPORT __istream_readin{ + public: + inline static void readin(basic_istream& stream, int & var) + { + basic_string temp; + + if(stream.flags() & ios_base::dec){ + temp = _readTokenDecimal( stream); + sscanf(temp.c_str(), "%d", &var ); + }else{ + temp = _readToken( stream); + if( stream.flags() & ios_base::oct){ + sscanf(temp.c_str(), "%o", (unsigned int *)(&var) ); + }else if(stream.flags() & ios_base::hex){ + if(stream.flags() & ios_base::uppercase){ + sscanf(temp.c_str(), "%X", (unsigned int *)(&var) ); + }else{ + sscanf(temp.c_str(), "%x", (unsigned int *)(&var) ); + } + }else{ + sscanf(temp.c_str(), "%i", &var); + } + } + } + }; + + template class _UCXXEXPORT __istream_readin{ + public: + inline static void readin(basic_istream& stream, unsigned int & var) + { + basic_string temp; + + if(stream.flags() & ios_base::dec){ + temp = _readTokenDecimal( stream); + sscanf(temp.c_str(), "%u", &var ); + }else{ + temp = _readToken( stream); + if( stream.flags() & ios_base::oct){ + sscanf(temp.c_str(), "%o", (unsigned int *)(&var) ); + }else if(stream.flags() & ios_base::hex){ + if(stream.flags() & ios_base::uppercase){ + sscanf(temp.c_str(), "%X", (unsigned int *)(&var) ); + }else{ + sscanf(temp.c_str(), "%x", (unsigned int *)(&var) ); + } + }else{ + sscanf(temp.c_str(), "%i", (int *)(&var) ); + } + } + + } + }; + + + template class _UCXXEXPORT __istream_readin{ + public: + inline static void readin(basic_istream& stream, long int & var) + { + basic_string temp; + + if(stream.flags() & ios_base::dec){ + temp = _readTokenDecimal( stream); + sscanf(temp.c_str(), "%ld", &var ); + }else{ + temp = _readToken( stream); + if( stream.flags() & ios_base::oct){ + sscanf(temp.c_str(), "%lo", (unsigned long int *)(&var) ); + }else if(stream.flags() & ios_base::hex){ + if(stream.flags() & ios_base::uppercase){ + sscanf(temp.c_str(), "%lX", (unsigned long int *)(&var) ); + }else{ + sscanf(temp.c_str(), "%lx", (unsigned long int *)(&var) ); + } + }else{ + sscanf(temp.c_str(), "%li", (long int *)(&var) ); + } + } + + } + }; + + + template class _UCXXEXPORT __istream_readin{ + public: + inline static void readin(basic_istream& stream, unsigned long int & var) + { + basic_string temp; + + if(stream.flags() & ios_base::dec){ + temp = _readTokenDecimal( stream); + sscanf(temp.c_str(), "%lu", &var ); + }else{ + temp = _readToken( stream); + if( stream.flags() & ios_base::oct){ + sscanf(temp.c_str(), "%lo", &var ); + }else if(stream.flags() & ios_base::hex){ + if(stream.flags() & ios_base::uppercase){ + sscanf(temp.c_str(), "%lX", &var ); + }else{ + sscanf(temp.c_str(), "%lx", &var); + } + }else{ + sscanf(temp.c_str(), "%li", (long int *)(&var) ); + } + } + } + }; + + +#ifdef __UCLIBCXX_HAS_FLOATS__ + +// NB: The Arduino AVR compiler contains an implementation of printf() and scanf() +// that lacks support for floating point numbers. Also, the AVR C library doesn't +// support the double datatype. In AVR it's the same as float. + + + template class _UCXXEXPORT __istream_readin{ + public: + inline static void readin(basic_istream& stream, float & var) + { + basic_string temp; + temp = _readTokenDecimal(stream); + bool isneg=false; + if (temp[0] == '-') { + isneg=true; + temp.erase(0,1); + }else if (temp[0] == '+') { + isneg=false; + temp.erase(0,1); + } + unsigned int dec = temp.find('.', 0); + if (dec == string::npos) { + var = atol(temp.c_str()); + }else{ + var = atol(temp.substr(0,dec).c_str()); + var += ((double) atoi(temp.substr(dec+1).c_str())) / pow(10.0,temp.size()-dec-1); + } + if (isneg) + var = -var; + } + }; + + + template class _UCXXEXPORT __istream_readin{ + public: + inline static void readin(basic_istream& stream, double & var) + { + basic_string temp; + temp = _readTokenDecimal(stream); + bool isneg=false; + if (temp[0] == '-') { + isneg=true; + temp.erase(0,1); + }else if (temp[0] == '+') { + isneg=false; + temp.erase(0,1); + } + unsigned int dec = temp.find('.', 0); + if (dec == string::npos) { + var = atol(temp.c_str()); + }else{ + var = atol(temp.substr(0,dec).c_str()); + var += ((double) atoi(temp.substr(dec+1).c_str())) / pow(10.0,temp.size()-dec-1); + } + if (isneg) + var = -var; + } + }; + + template class _UCXXEXPORT __istream_readin{ + public: + inline static void readin(basic_istream& stream, long double & var) + { + basic_string temp; + temp = _readTokenDecimal( stream); + sscanf(temp.c_str(), "%Lg", &var); + } + }; + +#endif // ifdef __UCLIBCXX_HAS_FLOATS__ + + template class _UCXXEXPORT __istream_readin{ + public: + inline static void readin(basic_istream& stream, void* & var) + { + basic_string temp; + temp = _readToken( stream); + sscanf(temp.c_str(), "%p", &var); + } + }; + + + template void __skipws(basic_istream& is){ + const typename basic_istream::int_type eof = traits::eof(); + typename basic_istream::int_type c; + //While the next character normally read doesn't equal eof + //and that character is a space, advance to the next read position + //Thus itterating through all whitespace until we get to the meaty stuff + while ( + !traits::eq_int_type((c = is.rdbuf()->sgetc()), eof) + && isspace(c) + ) { + is.rdbuf()->sbumpc(); + } + if(traits::eq_int_type(c, eof)){ + is.setstate(ios_base::eofbit); + } + } +} + +#pragma GCC visibility pop + +#endif + + + diff --git a/external/arduino/stlarduino/iterator b/external/arduino/stlarduino/iterator new file mode 100644 index 000000000..b3d81b207 --- /dev/null +++ b/external/arduino/stlarduino/iterator @@ -0,0 +1,229 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include +#include +#include +#include +#include + + + +#ifndef __STD_HEADER_ITERATOR +#define __STD_HEADER_ITERATOR 1 + +#pragma GCC visibility push(default) + +namespace std{ + + // subclause _lib.stream.iterators_, stream iterators: + template , class Distance = ptrdiff_t> class istream_iterator; + template bool + operator==(const istream_iterator& x, const istream_iterator& y); + template bool + operator!=(const istream_iterator& x, const istream_iterator& y); + template > class ostream_iterator; + template > class istreambuf_iterator; + template bool + operator==(const istreambuf_iterator& a, const istreambuf_iterator& b); + template bool + operator!=(const istreambuf_iterator& a, const istreambuf_iterator& b); + template > class ostreambuf_iterator; + + + template < class T, class charT, class traits, class Distance > class _UCXXEXPORT istream_iterator + : public iterator + { + public: + typedef charT char_type; + typedef traits traits_type; + typedef basic_istream istream_type; + istream_iterator() : in_stream(0), value(0) {} + istream_iterator(istream_type& s) : in_stream(&s), value() { + *in_stream >> value; + } + istream_iterator(const istream_iterator& x) + : in_stream(x.in_stream), value(x.value) + { } + ~istream_iterator() { } + const T& operator*() const{ + return value; + } + const T* operator->() const{ + return &value; + } + istream_iterator& operator++() { + *in_stream >> value; + return *this; + } + istream_iterator operator++(int){ + istream_iterator tmp = *this; + *in_stream >> value; + return (tmp); + } + bool m_equal(const istream_iterator& x) const{ + return (in_stream == x.in_stream); + } + private: + basic_istream* in_stream; + T value; + }; + + template _UCXXEXPORT + bool operator==(const istream_iterator& x, + const istream_iterator& y) + { + return x.m_equal(y); + } + + template _UCXXEXPORT + bool operator!=(const istream_iterator& x, + const istream_iterator& y) + { + return !(x == y); + } + + template class _UCXXEXPORT ostream_iterator + : public iterator + { + public: + typedef charT char_type; + typedef traits traits_type; + typedef basic_ostream ostream_type; + + ostream_iterator(ostream_type& s) : out_stream(&s), delim(0) { } + ostream_iterator(ostream_type& s, const charT* delimiter) : out_stream(&s), delim(delimiter) { } + ostream_iterator(const ostream_iterator& x) : out_stream(x.out_stream), delim(x.delim) { } + ~ostream_iterator() { } + ostream_iterator& operator=(const T& value){ + *out_stream << value; + if(delim != 0){ + *out_stream << delim; + } + return (*this); + } + ostream_iterator& operator*(){ return *this; } + ostream_iterator& operator++() { return *this; } + ostream_iterator operator++(int) { return *this; } + private: + basic_ostream* out_stream; + const char* delim; + }; + + template class _UCXXEXPORT istreambuf_iterator : + public iterator + { + public: + typedef charT char_type; + typedef traits traits_type; + typedef typename traits::int_type int_type; + typedef basic_streambuf streambuf_type; + typedef basic_istream istream_type; + + class _UCXXEXPORT proxy{ + charT val; + basic_streambuf * buf; + + proxy(charT v, basic_streambuf * b) : val(v), buf(b) { } + public: + charT operator*() { return val; } + }; + + istreambuf_iterator() throw() : sbuf(0) { } + istreambuf_iterator(istream_type& s) throw() : sbuf(s.rdbuf()) { } + istreambuf_iterator(streambuf_type* s) throw() : sbuf(s) { } + istreambuf_iterator(const proxy& p) throw() : sbuf(&p.buf) { } + + charT operator*() const{ + return sbuf->sgetc(); + } + istreambuf_iterator& operator++(){ + sbuf->sbumpc(); + return *this; + } + proxy operator++(int){ + istreambuf_iterator tmp = *this; + sbuf->sbumpc(); + return(tmp); + } + + bool equal(const istreambuf_iterator& b) const{ + return sbuf == b.sbuf || is_eof() && b.is_eof(); + } + private: + streambuf_type* sbuf; + inline bool is_eof() const{ + return sbuf == 0 || sbuf->sgetc() == traits_type::eof(); + } + }; + + template _UCXXEXPORT bool + operator==(const istreambuf_iterator& a, + const istreambuf_iterator& b) + { + return a.equal(b); + } + + template bool _UCXXEXPORT + operator!=(const istreambuf_iterator& a, + const istreambuf_iterator& b) + { + return !a.equal(b); + } + + template class _UCXXEXPORT ostreambuf_iterator + : iterator + { + public: + typedef charT char_type; + typedef traits traits_type; + typedef basic_streambuf streambuf_type; + typedef basic_ostream ostream_type; + public: + ostreambuf_iterator(ostream_type& s) throw() : sbuf(s.rdbuf()), f(false) { } + ostreambuf_iterator(streambuf_type* s) throw() : sbuf(s), f(false) { } + ostreambuf_iterator& operator=(charT c){ + if(failed() == false){ + if(sbuf->sputc(c) == traits::eof()){ + f = true; + } + } + return *this; + } + ostreambuf_iterator& operator*(){ + return *this; + } + ostreambuf_iterator& operator++() { return *this; } + ostreambuf_iterator operator++(int) { return *this; } + bool failed() const throw(){ + return f; + } + + private: + streambuf_type* sbuf; + bool f; + }; + +} + +#pragma GCC visibility pop + +#endif + + diff --git a/external/arduino/stlarduino/iterator.cpp b/external/arduino/stlarduino/iterator.cpp new file mode 100644 index 000000000..2e21517a2 --- /dev/null +++ b/external/arduino/stlarduino/iterator.cpp @@ -0,0 +1,28 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include + +namespace std{ + + + +} + + diff --git a/external/arduino/stlarduino/iterator_base b/external/arduino/stlarduino/iterator_base new file mode 100644 index 000000000..1cae58966 --- /dev/null +++ b/external/arduino/stlarduino/iterator_base @@ -0,0 +1,305 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include + +#ifndef __STD_HEADER_ITERATOR_BASE +#define __STD_HEADER_ITERATOR_BASE 1 + +#pragma GCC visibility push(default) + +namespace std{ + template struct iterator_traits; + template struct iterator_traits; + + template struct iterator; + + struct _UCXXEXPORT input_iterator_tag {}; + struct _UCXXEXPORT output_iterator_tag {}; + struct _UCXXEXPORT forward_iterator_tag: public input_iterator_tag {}; + struct _UCXXEXPORT bidirectional_iterator_tag: public forward_iterator_tag {}; + struct _UCXXEXPORT random_access_iterator_tag: public bidirectional_iterator_tag {}; + + template _UCXXEXPORT void advance(InputIterator& i, Distance n){ + while(n > 0){ + --n; + ++i; + } + } + + template _UCXXEXPORT typename iterator_traits::difference_type + distance(InputIterator first, InputIterator last) + { + typename iterator_traits::difference_type d = 0; + while(first++ !=last){ + d++; + } + return d; + } + + // subclause _lib.predef.iterators_, predefined iterators: + template class reverse_iterator; + template bool operator==(const reverse_iterator& x, const reverse_iterator& y); + template bool operator<(const reverse_iterator& x, const reverse_iterator& y); + template bool operator!=(const reverse_iterator& x, const reverse_iterator& y); + template bool operator>(const reverse_iterator& x, const reverse_iterator& y); + template bool operator>=(const reverse_iterator& x, const reverse_iterator& y); + template bool operator<=(const reverse_iterator& x, const reverse_iterator& y); + template typename reverse_iterator::difference_type + operator-( const reverse_iterator& x, const reverse_iterator& y); + template reverse_iterator + operator+( typename reverse_iterator::difference_type n, const reverse_iterator& x); + template class back_insert_iterator; + template back_insert_iterator back_inserter(Container& x); + template class front_insert_iterator; + template front_insert_iterator front_inserter(Container& x); + template class insert_iterator; + template + insert_iterator inserter(Container& x, Iterator i); + + //Actual Template definitions + + template struct _UCXXEXPORT iterator_traits { + typedef typename Iterator::difference_type difference_type; + typedef typename Iterator::value_type value_type; + typedef typename Iterator::pointer pointer; + typedef typename Iterator::reference reference; + typedef typename Iterator::iterator_category iterator_category; + }; + + //Pointer specialization - required by standard + template struct _UCXXEXPORT iterator_traits { + typedef ptrdiff_t difference_type; + typedef T value_type; + typedef T* pointer; + typedef T& reference; + typedef random_access_iterator_tag iterator_category; + }; + + //Specialization recomended by standard +/* template struct _UCXXEXPORT iterator_traits { + typedef long difference_type; + typedef T value_type; + typedef T __far* pointer; + typedef T __far& reference; + typedef random_access_iterator_tag iterator_category; + };*/ + +/* template _UCXXEXPORT void + reverse(BidirectionalIterator first, BidirectionalIterator last) + { + typename iterator_traits::difference_type n = distance(first, last); + --n; + while(n > 0){ + typename iterator_traits::value_type tmp = *first; + *first++ = * --last; + *last = tmp; + n -= 2; + } + };*/ + + + template + struct _UCXXEXPORT iterator + { + typedef T value_type; + typedef Distance difference_type; + typedef Pointer pointer; + typedef Reference reference; + typedef Category iterator_category; + }; + + + template class _UCXXEXPORT reverse_iterator + : public iterator::iterator_category, + typename iterator_traits::value_type, typename iterator_traits::difference_type, + typename iterator_traits::pointer, typename iterator_traits::reference> + { + protected: + Iterator current; + friend bool operator== (const reverse_iterator& x, const reverse_iterator& y); + friend bool operator< (const reverse_iterator& x, const reverse_iterator& y); + + public: + typedef Iterator iterator_type; + + reverse_iterator() : current(){}; + explicit reverse_iterator(Iterator x) : current(x) { } + template reverse_iterator(const reverse_iterator &x) : current(x.base()){} + + Iterator base() const { return current; } // explicit + + typename iterator_traits::reference operator*() const { Iterator tmp = current; return *--tmp; } + typename iterator_traits::pointer operator->() const { return &(operator*()); } + typename iterator_traits::reference operator[](typename iterator_traits::difference_type n) const{ + return current[-n-1]; + } + + reverse_iterator& operator++(){ --current; return *this; } + reverse_iterator operator++(int) {reverse_iterator tmp = *this; --current; return tmp; } + reverse_iterator& operator--() { ++ current; return *this; } + reverse_iterator operator--(int) {reverse_iterator tmp = *this; ++current; return tmp; } + + reverse_iterator operator+ (typename iterator_traits::difference_type n) const{ + reverse_iterator retval( *this ); + retval+=n; + return retval; + } + reverse_iterator& operator+=(typename iterator_traits::difference_type n){ + current -= n; + return *this; + } + reverse_iterator operator- (typename iterator_traits::difference_type n) const{ + reverse_iterator retval( *this ); + retval-=n; + return retval; + } + reverse_iterator& operator-=(typename iterator_traits::difference_type n){ + current += n; + return *this; + } + }; + + + template _UCXXEXPORT bool + operator==(const reverse_iterator& x, const reverse_iterator& y) + { + return x.base() == y.base(); + } + template _UCXXEXPORT bool + operator<(const reverse_iterator& x, const reverse_iterator& y) + { + return x.base() < y.base(); + } + template _UCXXEXPORT bool + operator!=(const reverse_iterator& x, const reverse_iterator& y) + { + return x.base() != y.base(); + } + template _UCXXEXPORT bool + operator>(const reverse_iterator& x, const reverse_iterator& y) + { + return x.base() > y.base(); + } + template _UCXXEXPORT bool + operator>=(const reverse_iterator& x, const reverse_iterator& y) + { + return x.base() >= y.base(); + } + template _UCXXEXPORT bool + operator<=(const reverse_iterator& x, const reverse_iterator& y) + { + return x.base() <= y.base(); + } + template _UCXXEXPORT typename reverse_iterator::difference_type + operator-( const reverse_iterator& x, const reverse_iterator& y) + { + return y.base() - x.base(); + } + template _UCXXEXPORT reverse_iterator + operator+(typename reverse_iterator::difference_type n, const reverse_iterator& x) + { + return reverse_iterator (x.base() - n); + } + + template class _UCXXEXPORT back_insert_iterator : + public iterator + { + protected: + Container& container; + public: + typedef Container container_type; + explicit back_insert_iterator(Container& x):container(x) {}; + back_insert_iterator& operator=(const typename Container::value_type& value){ + container.push_back(value); + return *this; + } + back_insert_iterator& operator*(){ + return *this; + } + back_insert_iterator& operator++(){ + return *this; + } + back_insert_iterator operator++(int){ + return *this; + } + }; + + template _UCXXEXPORT back_insert_iterator + back_inserter(Container& x) + { + return back_insert_iterator(x); + } + + template class _UCXXEXPORT front_insert_iterator + : public iterator + { + protected: + Container& container; + public: + typedef Container container_type; + explicit front_insert_iterator(Container& x): container(x) {} + front_insert_iterator& operator=(const typename Container::value_type& value){ + container.push_front(value); + return *this; + } + + front_insert_iterator& operator*() { return *this; } + front_insert_iterator& operator++() { return *this; } + front_insert_iterator operator++(int) { return *this; } + }; + + template _UCXXEXPORT front_insert_iterator + front_inserter(Container& x) + { + return front_insert_iterator(x); + } + + template class _UCXXEXPORT insert_iterator + : public iterator + { + protected: + Container& container; + typename Container::iterator iter; + public: + typedef Container container_type; + insert_iterator(Container& x, typename Container::iterator i) : container(x), iter(i) {} + insert_iterator& operator=(const typename Container::value_type& value){ + iter = container.insert(iter, value); + ++iter; + return *this; + } + insert_iterator& operator*() { return *this; } + insert_iterator& operator++() { return *this; } + insert_iterator operator++(int) { return *this; } + }; + + template _UCXXEXPORT insert_iterator + inserter(Container& x, Iterator i) + { + return insert_iterator(x,typename Container::iterator(i)); + } + +} + +#pragma GCC visibility pop + +#endif + + diff --git a/external/arduino/stlarduino/limits b/external/arduino/stlarduino/limits new file mode 100644 index 000000000..e275eb5ec --- /dev/null +++ b/external/arduino/stlarduino/limits @@ -0,0 +1,663 @@ +/* Copyright (C) 2006 Garrett A. Kajmowicz + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include + +#ifndef __STD_HEADER_LIMITS +#define __STD_HEADER_LIMITS 1 + +#warning limits header is nowhere complete or accurate + +#pragma GCC visibility push(default) + +namespace std{ + +enum float_round_style{ + round_indeterminate =-1, + round_toward_zero = 0, + round_to_nearest = 1, + round_toward_infinity = 2, + round_toward_neg_infinity = 3 +}; + +template struct __bits_to_base_10{ + static const int size = -1; +}; +template <> struct __bits_to_base_10<7>{ + static const int size = 2; +}; +template <> struct __bits_to_base_10<8>{ + static const int size = 2; +}; +template <> struct __bits_to_base_10<9>{ + static const int size = 2; +}; +template <> struct __bits_to_base_10<10>{ + static const int size = 3; +}; +template <> struct __bits_to_base_10<15>{ + static const int size = 4; +}; +template <> struct __bits_to_base_10<16>{ + static const int size = 4; +}; +template <> struct __bits_to_base_10<17>{ + static const int size = 5; +}; +template <> struct __bits_to_base_10<18>{ + static const int size = 5; +}; +template <> struct __bits_to_base_10<31>{ + static const int size = 9; +}; +template <> struct __bits_to_base_10<32>{ + static const int size = 9; +}; +template <> struct __bits_to_base_10<35>{ + static const int size = 10; +}; +template <> struct __bits_to_base_10<36>{ + static const int size = 10; +}; +template <> struct __bits_to_base_10<63>{ + static const int size = 18; +}; +template <> struct __bits_to_base_10<64>{ + static const int size = 19; +}; +template <> struct __bits_to_base_10<71>{ + static const int size = 21; +}; +template <> struct __bits_to_base_10<72>{ + static const int size = 21; +}; +template <> struct __bits_to_base_10<79>{ + static const int size = 23; +}; +template <> struct __bits_to_base_10<80>{ + static const int size = 24; +}; +template <> struct __bits_to_base_10<127>{ + static const int size = 38; +}; +template <> struct __bits_to_base_10<128>{ + static const int size = 38; +}; + + + + + + +template class numeric_limits { +public: + // General -- meaningful for all specializations. + + static const bool is_specialized = false; + static T min(); + static T max(); + static const int radix; + static const int digits; + static const int digits10; + static const bool is_signed; + static const bool is_integer; + static const bool is_exact; + static const bool traps; + static const bool is_modulo; + static const bool is_bounded; + + // Floating point specific. + + static T epsilon(); + static T round_error(); + static const int min_exponent10; + static const int max_exponent10; + static const int min_exponent; + + static const int max_exponent; + static const bool has_infinity; + static const bool has_quiet_NaN; + static const bool has_signaling_NaN; + static const bool is_iec559; + static const bool has_denorm; + static const bool tinyness_before; + static const float_round_style round_style; + static T denorm_min(); + static T infinity(); + static T quiet_NaN(); + static T signaling_NaN(); +}; + +template <> class numeric_limits { +public: + typedef bool T; + // General -- meaningful for all specializations. + static const bool is_specialized = true; + static T min(){ + return false; + } + static T max(){ + return true; + } + static const int radix = 2; + static const int digits = 1; + static const int digits10 = 0; + static const bool is_signed = false; + static const bool is_integer = true; + static const bool is_exact = true; + static const bool traps = false; + static const bool is_modulo = false; + static const bool is_bounded = true; + + // Floating point specific. + + static T epsilon(){ + return 0; + } + static T round_error(){ + return 0; + } + static const int min_exponent10 = 0; + static const int max_exponent10 = 0; + static const int min_exponent = 0; + + static const int max_exponent = 0; + static const bool has_infinity = false; + static const bool has_quiet_NaN = false; + static const bool has_signaling_NaN = false; + static const bool is_iec559 = false; + static const bool has_denorm = false; + static const bool tinyness_before = false; + static const float_round_style round_style = round_indeterminate; + static T denorm_min(); + static T infinity(); + static T quiet_NaN(); + static T signaling_NaN(); +}; + +template <> class numeric_limits { +public: + typedef unsigned char T; + // General -- meaningful for all specializations. + static const bool is_specialized = true; + static T min(){ + return 0; + } + static T max(){ + return UCHAR_MAX; + } + static const int radix = 2; + static const int digits = CHAR_BIT; + static const int digits10 = __bits_to_base_10::size; + static const bool is_signed = false; + static const bool is_integer = true; + static const bool is_exact = true; + static const bool traps = false; + static const bool is_modulo = true; + static const bool is_bounded = true; + + // Floating point specific. + + static T epsilon(){ + return 0; + } + static T round_error(){ + return 0; + } + static const int min_exponent10 = 0; + static const int max_exponent10 = 0; + static const int min_exponent = 0; + + static const int max_exponent = 0; + static const bool has_infinity = false; + static const bool has_quiet_NaN = false; + static const bool has_signaling_NaN = false; + static const bool is_iec559 = false; + static const bool has_denorm = false; + static const bool tinyness_before = false; + static const float_round_style round_style = round_indeterminate; + static T denorm_min(); + static T infinity(); + static T quiet_NaN(); + static T signaling_NaN(); +}; + +template <> class numeric_limits { +public: + typedef signed char T; + // General -- meaningful for all specializations. + static const bool is_specialized = true; + static T min(){ + return SCHAR_MIN; + } + static T max(){ + return SCHAR_MAX; + } + static const int radix = 2; + static const int digits = CHAR_BIT - 1; + static const int digits10 = __bits_to_base_10::size; + static const bool is_signed = true; + static const bool is_integer = true; + static const bool is_exact = true; + static const bool traps = false; + static const bool is_modulo = true; + static const bool is_bounded = true; + + // Floating point specific. + + static T epsilon(){ + return 0; + } + static T round_error(){ + return 0; + } + static const int min_exponent10 = 0; + static const int max_exponent10 = 0; + static const int min_exponent = 0; + + static const int max_exponent = 0; + static const bool has_infinity = false; + static const bool has_quiet_NaN = false; + static const bool has_signaling_NaN = false; + static const bool is_iec559 = false; + static const bool has_denorm = false; + static const bool tinyness_before = false; + static const float_round_style round_style = round_indeterminate; + static T denorm_min(); + static T infinity(); + static T quiet_NaN(); + static T signaling_NaN(); +}; + +template <> class numeric_limits { +public: + typedef char T; + // General -- meaningful for all specializations. + static const bool is_specialized = true; + static T min(){ + return CHAR_MIN; + } + static T max(){ + return CHAR_MAX; + } + static const int radix = 2; + static const int digits = (CHAR_MIN != 0) ? CHAR_BIT - 1 : CHAR_BIT; + static const int digits10 = __bits_to_base_10::size; + static const bool is_signed = (CHAR_MIN != 0); + static const bool is_integer = true; + static const bool is_exact = true; + static const bool traps = false; + static const bool is_modulo = true; + static const bool is_bounded = true; + + // Floating point specific. + + static T epsilon(){ + return 0; + } + static T round_error(){ + return 0; + } + static const int min_exponent10 = 0; + static const int max_exponent10 = 0; + static const int min_exponent = 0; + + static const int max_exponent = 0; + static const bool has_infinity = false; + static const bool has_quiet_NaN = false; + static const bool has_signaling_NaN = false; + static const bool is_iec559 = false; + static const bool has_denorm = false; + static const bool tinyness_before = false; + static const float_round_style round_style = round_indeterminate; + static T denorm_min(); + static T infinity(); + static T quiet_NaN(); + static T signaling_NaN(); +}; + +template <> class numeric_limits { +public: + typedef unsigned short T; + // General -- meaningful for all specializations. + static const bool is_specialized = true; + static T min(){ + return 0; + } + static T max(){ + return USHRT_MAX; + } + static const int radix = 2; + static const int digits = CHAR_BIT * sizeof(T); + static const int digits10 = __bits_to_base_10::size; + static const bool is_signed = false; + static const bool is_integer = true; + static const bool is_exact = true; + static const bool traps = false; + static const bool is_modulo = true; + static const bool is_bounded = true; + + // Floating point specific. + + static T epsilon(){ + return 0; + } + static T round_error(){ + return 0; + } + static const int min_exponent10 = 0; + static const int max_exponent10 = 0; + static const int min_exponent = 0; + + static const int max_exponent = 0; + static const bool has_infinity = false; + static const bool has_quiet_NaN = false; + static const bool has_signaling_NaN = false; + static const bool is_iec559 = false; + static const bool has_denorm = false; + static const bool tinyness_before = false; + static const float_round_style round_style = round_indeterminate; + static T denorm_min(); + static T infinity(); + static T quiet_NaN(); + static T signaling_NaN(); +}; + +template <> class numeric_limits { +public: + typedef signed short T; + // General -- meaningful for all specializations. + static const bool is_specialized = true; + static T min(){ + return SHRT_MIN; + } + static T max(){ + return SHRT_MAX; + } + static const int radix = 2; + static const int digits = CHAR_BIT * sizeof(T); + static const int digits10 = __bits_to_base_10::size; + static const bool is_signed = true; + static const bool is_integer = true; + static const bool is_exact = true; + static const bool traps = false; + static const bool is_modulo = true; + static const bool is_bounded = true; + + // Floating point specific. + + static T epsilon(){ + return 0; + } + static T round_error(){ + return 0; + } + static const int min_exponent10 = 0; + static const int max_exponent10 = 0; + static const int min_exponent = 0; + + static const int max_exponent = 0; + static const bool has_infinity = false; + static const bool has_quiet_NaN = false; + static const bool has_signaling_NaN = false; + static const bool is_iec559 = false; + static const bool has_denorm = false; + static const bool tinyness_before = false; + static const float_round_style round_style = round_indeterminate; + static T denorm_min(); + static T infinity(); + static T quiet_NaN(); + static T signaling_NaN(); +}; + +template <> class numeric_limits { +public: + typedef unsigned int T; + // General -- meaningful for all specializations. + static const bool is_specialized = true; + static T min(){ + return 0; + } + static T max(){ + return UINT_MAX; + } + static const int radix = 2; + static const int digits = CHAR_BIT * sizeof(T); + static const int digits10 = __bits_to_base_10::size; + static const bool is_signed = false; + static const bool is_integer = true; + static const bool is_exact = true; + static const bool traps = false; + static const bool is_modulo = true; + static const bool is_bounded = true; + + // Floating point specific. + + static T epsilon(){ + return 0; + } + static T round_error(){ + return 0; + } + static const int min_exponent10 = 0; + static const int max_exponent10 = 0; + static const int min_exponent = 0; + + static const int max_exponent = 0; + static const bool has_infinity = false; + static const bool has_quiet_NaN = false; + static const bool has_signaling_NaN = false; + static const bool is_iec559 = false; + static const bool has_denorm = false; + static const bool tinyness_before = false; + static const float_round_style round_style = round_indeterminate; + static T denorm_min(); + static T infinity(); + static T quiet_NaN(); + static T signaling_NaN(); +}; + +template <> class numeric_limits { +public: + typedef signed int T; + // General -- meaningful for all specializations. + static const bool is_specialized = true; + static T min(){ + return INT_MIN; + } + static T max(){ + return INT_MAX; + } + static const int radix = 2; + static const int digits = CHAR_BIT * sizeof(T); + static const int digits10 = __bits_to_base_10::size; + static const bool is_signed = true; + static const bool is_integer = true; + static const bool is_exact = true; + static const bool traps = false; + static const bool is_modulo = true; + static const bool is_bounded = true; + + // Floating point specific. + + static T epsilon(){ + return 0; + } + static T round_error(){ + return 0; + } + static const int min_exponent10 = 0; + static const int max_exponent10 = 0; + static const int min_exponent = 0; + + static const int max_exponent = 0; + static const bool has_infinity = false; + static const bool has_quiet_NaN = false; + static const bool has_signaling_NaN = false; + static const bool is_iec559 = false; + static const bool has_denorm = false; + static const bool tinyness_before = false; + static const float_round_style round_style = round_indeterminate; + static T denorm_min(); + static T infinity(); + static T quiet_NaN(); + static T signaling_NaN(); +}; + +template <> class numeric_limits { +public: + typedef unsigned long int T; + // General -- meaningful for all specializations. + static const bool is_specialized = true; + static T min(){ + return 0; + } + static T max(){ + return ULONG_MAX; + } + static const int radix = 2; + static const int digits = CHAR_BIT * sizeof(T); + static const int digits10 = __bits_to_base_10::size; + static const bool is_signed = false; + static const bool is_integer = true; + static const bool is_exact = true; + static const bool traps = false; + static const bool is_modulo = true; + static const bool is_bounded = true; + + // Floating point specific. + + static T epsilon(){ + return 0; + } + static T round_error(){ + return 0; + } + static const int min_exponent10 = 0; + static const int max_exponent10 = 0; + static const int min_exponent = 0; + + static const int max_exponent = 0; + static const bool has_infinity = false; + static const bool has_quiet_NaN = false; + static const bool has_signaling_NaN = false; + static const bool is_iec559 = false; + static const bool has_denorm = false; + static const bool tinyness_before = false; + static const float_round_style round_style = round_indeterminate; + static T denorm_min(); + static T infinity(); + static T quiet_NaN(); + static T signaling_NaN(); +}; + +template <> class numeric_limits { +public: + typedef signed long int T; + // General -- meaningful for all specializations. + static const bool is_specialized = true; + static T min(){ + return LONG_MIN; + } + static T max(){ + return LONG_MAX; + } + static const int radix = 2; + static const int digits = CHAR_BIT * sizeof(T); + static const int digits10 = __bits_to_base_10::size; + static const bool is_signed = true; + static const bool is_integer = true; + static const bool is_exact = true; + static const bool traps = false; + static const bool is_modulo = true; + static const bool is_bounded = true; + + // Floating point specific. + + static T epsilon(){ + return 0; + } + static T round_error(){ + return 0; + } + static const int min_exponent10 = 0; + static const int max_exponent10 = 0; + static const int min_exponent = 0; + + static const int max_exponent = 0; + static const bool has_infinity = false; + static const bool has_quiet_NaN = false; + static const bool has_signaling_NaN = false; + static const bool is_iec559 = false; + static const bool has_denorm = false; + static const bool tinyness_before = false; + static const float_round_style round_style = round_indeterminate; + static T denorm_min(); + static T infinity(); + static T quiet_NaN(); + static T signaling_NaN(); +}; + +template <> class numeric_limits { +public: + typedef double numeric_type; + + static const bool is_specialized = true; + static numeric_type min () { return __DBL_MIN__; } + static numeric_type max () { return __DBL_MAX__; } + static const int radix = __FLT_RADIX__; + static const int digits = __DBL_MANT_DIG__; + static const int digits10 = __DBL_DIG__; + static const bool is_signed = true; + static const bool is_integer = false; + static const bool is_exact = false; + static const bool traps = false; // this is a guess + static const bool is_modulo = false; + static const bool is_bounded = true; + + // Floating point specific. + + static numeric_type epsilon () { return __DBL_EPSILON__; } + static numeric_type round_error () { return 0.5; } + static const int min_exponent10 = -1; //How do I properly get this? + static const int max_exponent10 = -1; //How do I properly get this? + static const int min_exponent = -1; //How do I properly get this? + static const int max_exponent = -1; //How do I properly get this? + static const bool has_infinity = false; //I don't know, so until I can find out, I'm saying no + static const bool has_quiet_NaN = false; //I don't know, so until I can find out, I'm saying no + static const bool has_signaling_NaN = false; //I don't know, so until I can find out, I'm saying no + static const bool has_denorm = false; //I don't know, so until I can find out, I'm saying no + + static const bool is_iec559 = false; //I don't know, so until I can find out, I'm saying no + static const bool tinyness_before = false; // more questions + static const float_round_style round_style = round_to_nearest; // more questions + static numeric_type denorm_min () { return -1; } //How do I properly get this? + static numeric_type infinity () { return -1; } //How do I properly get this? + static numeric_type quiet_NaN () { return -1; } //How do I properly get this? + static numeric_type signaling_NaN () { return -1; } //How do I properly get this? +}; + + + + + +} + +#pragma GCC visibility pop + +#endif diff --git a/external/arduino/stlarduino/limits.cpp b/external/arduino/stlarduino/limits.cpp new file mode 100644 index 000000000..0fd42d577 --- /dev/null +++ b/external/arduino/stlarduino/limits.cpp @@ -0,0 +1,25 @@ +/* Copyright (C) 2006 Garrett A. Kajmowicz + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*/ + +#include + +namespace std{ + + +} diff --git a/external/arduino/stlarduino/list b/external/arduino/stlarduino/list new file mode 100644 index 000000000..de8edadd6 --- /dev/null +++ b/external/arduino/stlarduino/list @@ -0,0 +1,926 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include +#include +#include + +#ifndef __STD_HEADER_LIST +#define __STD_HEADER_LIST 1 + +#pragma GCC visibility push(default) + +namespace std{ + + template > class _UCXXEXPORT list { + public: + typedef typename Allocator::reference reference; + typedef typename Allocator::const_reference const_reference; + typedef typename Allocator::size_type size_type; + typedef typename Allocator::difference_type difference_type; + typedef T value_type; + typedef Allocator allocator_type; + typedef typename Allocator::pointer pointer; + typedef typename Allocator::const_pointer const_pointer; + + protected: + class node; + class iter_list; + + node * list_start; + node * list_end; + size_type elements; + Allocator a; + + public: + + typedef iter_list iterator; + typedef iter_list const_iterator; + typedef std::reverse_iterator reverse_iterator; + typedef std::reverse_iterator const_reverse_iterator; + + explicit list(const Allocator& = Allocator()); + explicit list(size_type n, const T& value = T(), const Allocator& = Allocator()); + template list(InputIterator first, InputIterator last, + const Allocator& al= Allocator()); + list(const list& x); + ~list(); + + list& operator=(const list& x){ + if(&x == this){ + return *this; + } + clear(); + iterator i = x.begin(); + while(i != x.end()){ + push_back(*i); + ++i; + } + return *this; + } + + template void assign(InputIterator first, InputIterator last); + template void assign(Size n, const U& u = U()); + allocator_type get_allocator() const; + + iterator begin(); + const_iterator begin() const; + iterator end(); + const_iterator end() const; + reverse_iterator rbegin(); + const_reverse_iterator rbegin() const; + reverse_iterator rend(); + const_reverse_iterator rend() const; + + bool empty() const; + size_type size() const; + size_type max_size() const; + void resize(size_type sz, T c = T()); + + reference front(); + const_reference front() const; + reference back(); + const_reference back() const; + + void push_front(const T& x); + void pop_front(); + void push_back(const T& x); + void pop_back(); + iterator insert(iterator position, const T& x = T()); + void insert(iterator position, size_type n, const T& x); + template void insert(iterator position, InputIterator first, InputIterator last); + iterator erase(iterator position); + iterator erase(iterator position, iterator last); + void swap(list&); + void clear(); + + void splice(iterator position, list& x); + void splice(iterator position, list& x, iterator i); + void splice(iterator position, list& x, iterator first, iterator last); + void remove(const T& value); + template void remove_if(Predicate pred); + void unique(); + template void unique(BinaryPredicate binary_pred); + void merge(list& x); + template void merge(list& x, Compare comp); + void sort(); + template void sort(Compare comp); + void reverse(); + protected: + void swap_nodes(node * x, node * y); + }; + + + //Implementations of List + + //List node + template class _UCXXEXPORT list::node{ + public: + node * previous; + node * next; + T * val; + + node(): previous(0), next(0), val(0){ } + node(const T & t ): previous(0), next(0), val(0) { + val = new T(t); + //FIXME use allocator somehow but only call constructor once + } + node(const T & t, node * p, node * n): previous(p), next(n), val(0) { + val = new T(t); + } + ~node(){ } + }; + + //List iterator + template class _UCXXEXPORT list::iter_list + : public std::iterator< + bidirectional_iterator_tag, + T, + typename Allocator::difference_type, + typename Allocator::pointer, + typename Allocator::reference + > + { + private: + node * current; + public: + iter_list():current(0) { } + iter_list( typename list::node * n): current(n) { } + iter_list(const list::iter_list & l): current(l.current) { } + ~iter_list(){ } + + iter_list & operator=(const list::iter_list & right ){ + current = right.current; + return *this; + } + + T & operator*(){ + return *(current->val); + } + T * operator->(){ + return current->val; + } + const T & operator*() const{ + return *current->val; + } + const T * operator->() const{ + return current->val; + } + + bool operator==(const list::iter_list & right) const { + return (current == right.current); + } + + bool operator!=(const list::iter_list & right) const { + return (current != right.current); + } + + iter_list & operator++(){ + current = current->next; + return *this; + } + + iter_list operator++(int){ + iter_list temp(current); + current = current->next; + return temp; + } + iter_list & operator--(){ + current = current->previous; + return *this; + } + + iter_list operator--(int){ + iter_list temp(current); + current = current->previous; + return temp; + } + node * link_struct(){ + return current; + } + iter_list & operator+=(unsigned int n){ + for(unsigned int i = 0; i < n; ++i){ + current = current->next; + } + return *this; + } + iter_list & operator-=(unsigned int n){ + for(unsigned int i = 0; i < n; ++i){ + current = current->previous; + } + return *this; + } + }; + + + template list::list(const Allocator& al) + :list_start(0), list_end(0), elements(0), a(al) + { + //End node + list_start = new node(); + list_end = list_start; + return; + } + + template list::list + (typename Allocator::size_type n, const T& value, const Allocator& al) + :list_start(0), list_end(0), elements(0), a(al) + { + //End node + list_start = new node(); + list_end = list_start; + + for(typename Allocator::size_type i = 0; i < n ; ++i){ + push_back(value); + } + } + + template template + list::list + (InputIterator first, InputIterator last, const Allocator& al) + : list_start(0), list_end(0), elements(0), a(al) + { + list_start = new node(); + list_end = list_start; + while(first != last){ + push_back(*first); + ++first; + } + } + + template list::list(const list& x) + : list_start(0), list_end(0), elements(0), a(x.a) + { + list_start = new node(); + list_end = list_start; + + iterator i = x.begin(); + while(i != x.end()){ + push_back( *i); + ++i; + } + } + + template list::~list(){ + while(elements > 0){ + pop_front(); + } + delete list_start->val; +#if UCLIBCXX_DEBUG + list_start->val = 0; +#endif + delete list_start; +#if UCLIBCXX_DEBUG + list_start = 0; + list_end = 0; +#endif + } + + + template void list::swap_nodes(node * x, node * y){ + T * v = x->val; + x->val = y->val; + y->val = v; + } + + template typename list::iterator + list::begin() + { + return iterator(list_start); + } + + + template typename list::const_iterator + list::begin() const + { + return const_iterator(list_start); + } + + + template typename list::iterator + list::end() + { + return iterator(list_end); + } + + template typename list::const_iterator + list::end() const + { + return const_iterator(list_end); + } + + template typename list::reverse_iterator + list::rbegin() + { + return reverse_iterator(end()); + } + + template typename list::const_reverse_iterator + list::rbegin() const + { + return const_reverse_iterator(end()); + } + + template typename list::reverse_iterator + list::rend() + { + return reverse_iterator(begin()); + } + + template typename list::const_reverse_iterator + list::rend() const + { + return const_reverse_iterator(begin()); + } + + template bool list::empty() const{ + return (elements == 0); + } + template typename list::size_type list::size() const{ + return elements; + } + template typename list::size_type list::max_size() const{ + return ((size_type)(-1)) / (sizeof(T) + sizeof(node)); + } + template void list::resize(typename Allocator::size_type sz, T c){ +// if(sz > elements){ + for(typename Allocator::size_type i = elements; i < sz; ++i){ + push_back(c); + } +// } +// if(sz < elements){ + for(typename Allocator::size_type i = elements; i > sz; --i){ + pop_back(); + } +// } + } + + template typename list::reference list::front(){ + return *(list_start->val); + } + template typename list::const_reference list::front() const{ + return *(list_start->val); + } + template typename list::reference list::back(){ + return *(list_end->previous->val); + } + template typename list::const_reference list::back() const{ + return *(list_end->previous->val); + } + + + template void list::push_front(const T& x){ + node * temp = new node(x); + list_start->previous = temp; + temp->previous = 0; + temp->next = list_start; + list_start = temp; + ++elements; + } + + template void list::pop_front(){ + if(elements > 0){ + list_start = list_start->next; + delete list_start->previous->val; +#if UCLIBCXX_DEBUG + list_start->previous->val = 0; + list_start->previous->next = 0; + list_start->previous->previous = 0; +#endif + delete list_start->previous; + list_start->previous = 0; + --elements; + } + } + + template void list::push_back(const T& x){ + if(elements == 0){ + //The list is completely empty + list_start = new node(x); + list_end->previous = list_start; + list_start->previous = 0; + list_start->next = list_end; + elements = 1; + }else{ + node * temp = new node(x); + temp->previous = list_end->previous; + temp->next = list_end; + list_end->previous->next = temp; + list_end->previous = temp; + ++elements; + } + } + + template void list::pop_back(){ + if(elements > 0){ + node * temp = list_end->previous; + if(temp == list_start){ + list_end->previous = 0; + list_start = list_end; + }else{ + temp->previous->next = temp->next; + list_end->previous = temp->previous; + } + delete temp->val; +#if UCLIBCXX_DEBUG + temp->val = 0; + temp->next = 0; + temp->previous = 0; +#endif + delete temp; +#if UCLIBCXX_DEBUG + temp = 0; +#endif + --elements; + } + } + + + template typename list::iterator + list::insert(iterator position, const T& x) + { + node * temp = new node(x); + + temp->previous = position.link_struct()->previous; + temp->next = position.link_struct(); + + if(temp->previous == 0){ + list_start = temp; + }else{ + position.link_struct()->previous->next = temp; + } + + position.link_struct()->previous = temp; + + ++elements; + --position; + return position; + } + + template void list::insert(iterator position, size_type n, const T& x){ + for(typename list::size_type i = 0; i < n; ++i){ + position = insert(position, x); + } + } + + template template void + list::insert(iterator position, InputIterator first, InputIterator last) + { + while(first !=last){ + insert(position, *first); + ++first; + } + } + template typename list::iterator + list::erase(iterator position) + { + if(position != end() ){ + node * temp = position.link_struct(); + if(temp == list_start){ + ++position; + temp->next->previous = 0; + list_start = temp->next; + }else{ + --position; + temp->next->previous = temp->previous; + temp->previous->next = temp->next; + ++position; + } + delete temp->val; +#if UCLIBCXX_DEBUG + temp->next = 0; + temp->previous = 0; + temp->val = 0; +#endif + delete temp; +#if UCLIBCXX_DEBUG + temp = 0; +#endif + --elements; + } + return position; + } + template typename list::iterator + list::erase(iterator position, iterator last) + { + iterator temp = position; + while(position !=last){ + position = erase(position); + } + return position; + } + template void list::swap(list& l){ + node * temp; + size_type tempel; + + temp = list_start; + list_start = l.list_start; + l.list_start = temp; + + temp = list_end; + list_end = l.list_end; + l.list_end = temp; + + tempel = elements; + elements = l.elements; + l.elements = tempel; + } + template void list::clear(){ + while(elements > 0){ + pop_front(); + } + } + + template + void list::splice(iterator position, list& x) + { + + //Can't add non-existant elements + if(x.elements == 0){ + return; + } + + elements += x.elements; + x.elements = 0; + + + //Chaining to the begining + if(position == begin()){ + x.list_end->previous->next = list_start; + list_start->previous = x.list_end->previous; + + list_start = x.list_start; + + x.list_start = x.list_end; + x.list_end->previous = 0; + + return; + } + + //Link everything we need + x.list_start->previous = position.link_struct()->previous; + position.link_struct()->previous->next = x.list_start; + + position.link_struct()->previous = x.list_end->previous; + x.list_end->previous->next = position.link_struct(); + + //Clean up the other list + + x.list_start = x.list_end; + x.list_end->previous=0; + + } + + template + void list::splice(iterator position, list& x, iterator i) + { + //Invalid conditions + if( x.elements == 0 || i == position || position.link_struct() == i.link_struct()->next ){ + return; + } + + //Do we need to adjust the begining pointer? + if(i == x.begin()){ + x.list_start = x.list_start->next; + x.list_start->previous = 0; + } + + + //Insert at begining special case + if(position == begin()){ + + i.link_struct()->previous->next = i.link_struct()->next; + i.link_struct()->next->previous = i.link_struct()->previous; + + i.link_struct()->previous = 0; + i.link_struct()->next = position.link_struct(); + position.link_struct()->previous = i.link_struct(); + + list_start = i.link_struct(); + + --x.elements; + ++elements; + return; + } + + if( i.link_struct()->previous != 0){ + i.link_struct()->previous->next = i.link_struct()->next; + i.link_struct()->next->previous = i.link_struct()->previous; + }else{ + i.link_struct()->next->previous = 0; + x.list_start = i.link_struct()->next; + } + + i.link_struct()->previous = position.link_struct()->previous; + position.link_struct()->previous->next = i.link_struct(); + + i.link_struct()->next = position.link_struct(); + position.link_struct()->previous = i.link_struct(); + + --x.elements; + ++elements; + } + + template + void list::splice(iterator position, list& x, + iterator first, iterator last) + { + if(x.elements == 0){ + return; + } + + iterator temp; + while(first != last){ + temp = first; + ++first; + splice(position, x, temp); + } + } + + + template void list::remove(const T& value){ + iterator temp = begin(); + while( temp != end() ){ + if(*temp == value){ + temp = erase(temp); + }else{ + ++temp; + } + } + } + + + template template void list::remove_if(Predicate pred){ + iterator temp = begin(); + while( temp != end() ){ + if( pred(*temp) ){ + temp = erase(temp); + }else{ + ++temp; + } + } + } + + + template void list::unique(){ + equal_to::value_type> p; + unique(p); + } + + template template + void list::unique(BinaryPredicate binary_pred) + { + iterator temp1 = begin(); + iterator temp2; + ++temp1; + while( temp1 != end() ){ + temp2 = temp1; + --temp2; + if( binary_pred(*temp1, *temp2) ){ + erase(temp1); + temp1 = temp2; + } + ++temp1; + } + } + + template void list::merge(list& x){ + less::iterator>::value_type> c; + merge(x, c); + } + + template template + void list::merge(list& x, Compare comp) + { + iterator source = x.begin(); + iterator temp; + iterator dest = begin(); + + while(source != x.end()){ + while( dest != end() && comp (*dest, *source) ){ + ++dest; + } + ++elements; + --x.elements; + + temp = source; + ++temp; + + if(dest == begin()){ + dest.link_struct()->previous = source.link_struct(); + source.link_struct()->next = dest.link_struct(); + source.link_struct()->previous = 0; + list_start = source.link_struct(); + }else{ + source.link_struct()->previous = dest.link_struct()->previous; + dest.link_struct()->previous->next = source.link_struct(); + source.link_struct()->next = dest.link_struct(); + dest.link_struct()->previous = source.link_struct(); + } + source = temp; + } + + //Fix up x; + x.list_start = x.list_end; + x.list_start->previous = 0; + } + + template void list::sort(){ + less::iterator>::value_type> c; + sort(c); + } + + template template + void list::sort(Compare comp) + { + typename list::iterator i, j, k; + + //FIXME - bubble sort + + if(elements == 0){ + return; + } + + i = end(); + --i; + while(i != begin()){ + j = begin(); + k = j; + ++k; + while(j != i){ + if( comp(*k, *j) ){ + swap_nodes(k.link_struct(), j.link_struct()); + } + ++j; + ++k; + } + --i; + } + } + + + template void list::reverse(){ + if(elements == 0){ + return; + } + + node * current; + node * following; + node * temp; + + //Need to move the list_end element to the begining + + temp = list_end; + list_end = temp->previous; + list_end->next = 0; + + list_start->previous = temp; + temp->previous = 0; + temp->next = list_start; + list_start = temp; + + current = list_start; + + while( current != list_end ){ + following = current->next; + + //Swap the values pointed to/at with the current node + temp = current->next; + current->next = current->previous; + current->previous = temp; + + current = following; + } + + //Swap pointers on the end node + temp = list_end->next; + list_end->next = list_end->previous; + list_end->previous = temp; + + + //Swap the fixed pointers + temp = list_start; + list_start = list_end; + list_end = temp; + + } + + template + bool operator==(const list& x, const list& y){ + if(x.size() != y.size()){ + return false; + } + typename list::const_iterator i = x.begin(); + typename list::const_iterator j = y.begin(); + + while(i != x.end()){ + if( *i != *j){ + return false; + } + ++i; + ++j; + } + return true; + } + + template + bool operator< (const list& x, const list& y){ + typename list::const_iterator i = x.begin(); + typename list::const_iterator j = y.begin(); + while(i != x.end() && j != y.end()){ + if( *i < *j){ + return true; + } + if(*j < *i){ + return false; + } + ++i; + ++j; + } + return (i == x.end() && j != y.end()); + } + + template + bool operator!=(const list& x, const list& y){ + return !(x == y); + } + + template + bool operator> (const list& x, const list& y){ + typename list::const_iterator i = x.begin(); + typename list::const_iterator j = y.begin(); + while(i != x.end() && j != y.end()){ + if( *i > *j){ + return true; + } + if( *j > *i){ + return false; + } + ++i; + ++j; + } + return (i != x.end() && j == y.end()); + } + + template + bool operator>=(const list& x, const list& y){ + typename list::const_iterator i = x.begin(); + typename list::const_iterator j = y.begin(); + while(i != x.end() && j != y.end()){ + if( *i >= *j){ + return true; + } + if(*j >= *i){ + return false; + } + ++i; + ++j; + } + return (i != x.end() && j == y.end()); + } + + template + bool operator<=(const list& x, const list& y){ + typename list::const_iterator i = x.begin(); + typename list::const_iterator j = y.begin(); + while(i != x.end() && j != y.end()){ + if( *i <= *j){ + return true; + } + if(*j <= *i){ + return false; + } + ++i; + ++j; + } + return (i == x.end()); + } + + template + void swap(list& x, list& y){ + x.swap(y); + } + +} + +#pragma GCC visibility pop + +#endif + + diff --git a/external/arduino/stlarduino/list.cpp b/external/arduino/stlarduino/list.cpp new file mode 100644 index 000000000..cfc44e079 --- /dev/null +++ b/external/arduino/stlarduino/list.cpp @@ -0,0 +1,29 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include + +namespace std{ + + + + +} + + diff --git a/external/arduino/stlarduino/locale b/external/arduino/stlarduino/locale new file mode 100644 index 000000000..96e6bc948 --- /dev/null +++ b/external/arduino/stlarduino/locale @@ -0,0 +1,83 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include +#include +#include + +#ifndef __HEADER_STD_LOCALE +#define __HEADER_STD_LOCALE 1 + +#pragma GCC visibility push(default) + +namespace std{ + class _UCXXEXPORT locale { + public: + // types: + class facet; + class id; + typedef unsigned char category; + + static const category + none = 0, + collate = 0x01, ctype = 0x02, + monetary = 0x04, numeric = 0x08, + time = 0x10, messages = 0x20, + all = collate | ctype | monetary | numeric | time | messages; + + // construct/copy/destroy: + locale() throw(){ + return; + } + locale(const locale& other) throw(){ + (void)other; + return; + } + locale(const char *) throw(){ + return; + } + ~locale() throw(){ + return; + } + + const locale& operator=(const locale&) throw(){ + return *this; + } + std::string name() const { return "C"; } + }; + + class _UCXXEXPORT locale::facet { + friend class locale; + explicit facet(size_t = 0){ + return; + } + virtual ~facet(){ + return; + } + }; + + class _UCXXEXPORT locale::id { + id(){ } + }; + +} + +#pragma GCC visibility pop + +#endif diff --git a/external/arduino/stlarduino/locale.cpp b/external/arduino/stlarduino/locale.cpp new file mode 100644 index 000000000..bc41792df --- /dev/null +++ b/external/arduino/stlarduino/locale.cpp @@ -0,0 +1,29 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include +#include +#include +#include +#include + +namespace std{ + +} + diff --git a/external/arduino/stlarduino/map b/external/arduino/stlarduino/map new file mode 100644 index 000000000..44be71085 --- /dev/null +++ b/external/arduino/stlarduino/map @@ -0,0 +1,269 @@ +/* Copyright (C) 2004-2007 Garrett A. Kajmowicz + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + + + +#include +#include +#include +#include +#include + + +#ifndef __STD_HEADER_MAP +#define __STD_HEADER_MAP + +#pragma GCC visibility push(default) + +namespace std{ + + +template, class Allocator = allocator > class map; +template, class Allocator = allocator > class multimap; + + + //Compare the keys of the two items +/* template class _UCXXEXPORT + __base_map::value_compare : public binary_function< + typename map::value_type, + typename map::value_type, + bool> + { + friend class __base_map; + protected: + Compare comp; + value_compare(Compare c) : comp(c) { } + ~value_compare() { } + public: + bool operator()(const value_type& x, const value_type& y) const { + return comp(x.first, y.first); + } + }; +*/ + +// value_compare value_comp() const; + + + +/* This is the implementation for the map container. As noted above, it deviates + * from ISO spec by deriving from a base class in order to reduce code redundancy. + * More code could be reduced by convirting to virtual functions (thus allowing + * much of the erase and insert code to be duplicated), but that would deviate from + * the specifications too much to be worth the risk. + */ + + + +//Implementation of map + + +template class _UCXXEXPORT map + : public __single_associative, Compare, Allocator> +{ + //Default value of allocator does not meet C++ standard specs, but it works for this library + //Deal with it + +public: + + typedef __single_associative, Compare, Allocator> base; + typedef T mapped_type; + typedef typename base::key_type key_type; + typedef typename base::value_type value_type; + typedef typename base::key_compare key_compare; + typedef typename base::allocator_type allocator_type; + typedef typename base::reference reference; + typedef typename base::const_reference const_reference; + typedef typename base::iterator iterator; + typedef typename base::const_iterator const_iterator; + typedef typename base::size_type size_type; + typedef typename base::difference_type difference_type; + typedef typename base::pointer pointer; + typedef typename base::const_pointer const_pointer; + typedef typename base::reverse_iterator reverse_iterator; + typedef typename base::const_reverse_iterator const_reverse_iterator; + + static const key_type v_t_k(const value_type v){ + return v.first; + } + +// using base::value_compare; + + explicit map(const Compare& comp = Compare(), const Allocator& al = Allocator()) + : base(comp, al, v_t_k) { } + + template map(InputIterator first, InputIterator last, + const Compare& comp = Compare(), const Allocator& al = Allocator()) + : base(first, last, comp, al, v_t_k) { } + + map(initializer_list> in, const Compare& comp = Compare(), + const Allocator& al = Allocator()) + : base(in.begin(), in.end(), comp, al, v_t_k) { } + + map(const map& x) : base(x) { } + ~map() { } + + using base::operator=; + using base::operator==; + using base::operator!=; + + using base::insert; + using base::erase; + + using base::begin; + using base::end; + using base::rbegin; + using base::rend; + + using base::empty; + using base::size; + using base::max_size; + + using base::find; + using base::count; + using base::lower_bound; + using base::upper_bound; + using base::equal_range; + using base::swap; + + reference operator[](const key_type& k){ + iterator i = lower_bound(k); + if (i == end() || base::c(k, i->first)) { + i = insert(make_pair(k, T())).first; + } + return i->second; + } + +protected: + using base::backing; +}; + + +//Implementation of multimap + + +template class _UCXXEXPORT multimap + : public __multi_associative, Compare, Allocator> + +{ + //Default value of allocator does not meet C++ standard specs, but it works for this library + //Deal with it +public: + + typedef __multi_associative, Compare, Allocator> base; + typedef T mapped_type; + typedef typename base::key_type key_type; + typedef typename base::value_type value_type; + typedef typename base::key_compare key_compare; + typedef typename base::allocator_type allocator_type; + typedef typename base::reference reference; + typedef typename base::const_reference const_reference; + typedef typename base::iterator iterator; + typedef typename base::const_iterator const_iterator; + typedef typename base::size_type size_type; + typedef typename base::difference_type difference_type; + typedef typename base::pointer pointer; + typedef typename base::const_pointer const_pointer; + typedef typename base::reverse_iterator reverse_iterator; + typedef typename base::const_reverse_iterator const_reverse_iterator; + + static const key_type v_t_k(const value_type v){ + return v.first; + } + + explicit multimap(const Compare& comp = Compare(), const Allocator& al = Allocator()) + : base(comp, al, v_t_k) { } + + template multimap(InputIterator first, InputIterator last, + const Compare& comp = Compare(), const Allocator& al = Allocator()) + : base(first, last, comp, al, v_t_k) { } + + + multimap(const multimap& x) : base(x) { } + ~multimap() { } + + using base::operator=; + using base::operator==; + using base::operator!=; + + using base::insert; + using base::erase; + + using base::begin; + using base::end; + using base::rbegin; + using base::rend; + + using base::empty; + using base::size; + using base::max_size; + + using base::find; + using base::count; + using base::lower_bound; + using base::upper_bound; + using base::equal_range; + using base::swap; + +protected: + + using base::c; + +}; + + +/* Non-member functions. These are at the end because they are not associated with any + particular class. These will be implemented as I figure out exactly what all of + them are supposed to do, and I have time. + */ + + template _UCXXEXPORT bool operator< + (const map& x, const map& y); + template _UCXXEXPORT bool operator!= + (const map& x, const map& y); + template _UCXXEXPORT bool operator> + (const map& x, const map& y); + template _UCXXEXPORT bool operator>= + (const map& x, const map& y); + template _UCXXEXPORT bool operator<= + (const map& x, const map& y); + template _UCXXEXPORT void swap + (map& x, map& y); + + + template _UCXXEXPORT bool operator== + (const multimap& x, const multimap& y); + template _UCXXEXPORT bool operator< + (const multimap& x, const multimap& y); + template _UCXXEXPORT bool operator!= + (const multimap& x, const multimap& y); + template _UCXXEXPORT bool operator> + (const multimap& x, const multimap& y); + template _UCXXEXPORT bool operator>= + (const multimap& x, const multimap& y); + template _UCXXEXPORT bool operator<= + (const multimap& x, const multimap& y); + template _UCXXEXPORT void swap + (multimap& x, multimap& y); + +} + +#pragma GCC visibility pop + +#endif + + diff --git a/external/arduino/stlarduino/map.cpp b/external/arduino/stlarduino/map.cpp new file mode 100644 index 000000000..06e56a0bb --- /dev/null +++ b/external/arduino/stlarduino/map.cpp @@ -0,0 +1,33 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*/ + +#include + +namespace std{ + + + + + + + + + + +} diff --git a/external/arduino/stlarduino/memory b/external/arduino/stlarduino/memory new file mode 100644 index 000000000..2a7ce8c15 --- /dev/null +++ b/external/arduino/stlarduino/memory @@ -0,0 +1,196 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include +#include +#include +#include +#include +#include + +#ifndef HEADER_STD_MEMORY +#define HEADER_STD_MEMORY 1 + +#pragma GCC visibility push(default) + +namespace std{ + +template class allocator; + // Specialize for void: + +template <> class _UCXXEXPORT allocator { +public: + typedef void* pointer; + typedef const void* const_pointer; + typedef void value_type; + template struct rebind { typedef allocator other; }; +}; + +template class _UCXXEXPORT allocator{ +public: + typedef T value_type; + typedef size_t size_type; + typedef ptrdiff_t difference_type; + + typedef T* pointer; + typedef const T* const_pointer; + + typedef T& reference; + typedef const T& const_reference; + + pointer address(reference r) const { return &r; } + const_pointer address(const_reference r) const { return &r; } + + allocator() throw(){} + template allocator(const allocator& ) throw(); + ~allocator() throw(){} + + //Space for n Ts + pointer allocate(size_type n, typename allocator::const_pointer = 0){ + return (T*)(::operator new( n * sizeof(T) )); + } + void deallocate(pointer p, size_type){ + ::operator delete(p); + } + + //Use placement new to engage the constructor + void construct(pointer p, const T& val) { new((void*)p) T(val); } + void destroy(pointer p){ ((T*)p)->~T(); } //Call destructor + + size_type max_size() const throw(); + template struct rebind { typedef allocator other; }; + +}; + +template class _UCXXEXPORT raw_storage_iterator + : public iterator +{ + Out p; + +public: + explicit raw_storage_iterator(Out pp) : p (pp) { } + raw_storage_iterator & operator*() { return *this; } + raw_storage_iterator & operator=(const T& val) { + T* pp = &*p; + new(pp) T(val); + return *this; + } + + raw_storage_iterator & operator++() { ++p; return *this; } + raw_storage_iterator operator++(int) { + raw_storage_iterator t = *this; + ++p; + return t; + } +}; + +template _UCXXEXPORT pair get_temporary_buffer(ptrdiff_t n){ + pair retval; + retval.first = static_cast(malloc(n * sizeof(T))); + if(retval.first == 0){ + retval.second = 0; + }else{ + retval.second = n; + } + return retval; +} + +template _UCXXEXPORT void return_temporary_buffer(T* p){ + free(p); +} + + +template class _UCXXEXPORT auto_ptr{ + +private: + T * object; + template struct auto_ptr_ref{ + Y * p; + }; + +public: + + typedef T element_type; + + explicit auto_ptr(T* p =0) throw() : object(p){ } + auto_ptr(auto_ptr& p) throw() : object(p.release()){ } + auto_ptr(auto_ptr_ref r) throw() : object(r.p){ + r.p = 0; + } + template auto_ptr(auto_ptr& p) throw() : object(p.release()){ } + auto_ptr& operator=(auto_ptr& p) throw(){ + if(&p == this){ + return *this; + } + delete object; + object = p.release(); + return *this; + } + template auto_ptr& operator=(auto_ptr& p) throw(){ + if(&p == this){ + return *this; + } + delete object; + object = p.release(); + return *this; + } + ~auto_ptr(){ + delete object; + } + + T& operator*() const throw(){ + return *object; + } + T* operator->() const throw(){ + return object; + } + T* get() const throw(){ + return object; + } + T* release() throw(){ + T * temp(object); + object = 0; + return temp; + } + void reset(T * p=0) throw(){ + if(p != object){ + delete object; + object = p; + } + } + template operator auto_ptr_ref() throw(){ + auto_ptr_ref retval; + retval.p = object; + object = 0; + return retval; + } + template operator auto_ptr() throw(){ + auto_ptr retval(object); + object = 0; + return retval; + } + +}; + +} //namespace std + +#pragma GCC visibility pop + +#endif + diff --git a/external/arduino/stlarduino/new b/external/arduino/stlarduino/new new file mode 100644 index 000000000..75211232f --- /dev/null +++ b/external/arduino/stlarduino/new @@ -0,0 +1,70 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ +#define throw(...) +#include +#include +#include + +#ifndef __STD_NEW_OPERATOR +#define __STD_NEW_OPERATOR 1 + +#pragma GCC visibility push(default) + +namespace std{ + class _UCXXEXPORT bad_alloc : public exception {}; + + struct _UCXXEXPORT nothrow_t {}; + extern const nothrow_t nothrow; + + typedef void (*new_handler)(); + _UCXXEXPORT new_handler set_new_handler(new_handler new_p) throw(); +} + + +_UCXXEXPORT void* operator new(std::size_t numBytes) throw(std::bad_alloc); +_UCXXEXPORT void operator delete(void* ptr) throw(); +#if __cpp_sized_deallocation +_UCXXEXPORT void operator delete(void* ptr, std::size_t) throw(); +#endif + +_UCXXEXPORT void* operator new[](std::size_t numBytes) throw(std::bad_alloc); +_UCXXEXPORT void operator delete[](void * ptr) throw(); +#if __cpp_sized_deallocation +_UCXXEXPORT void operator delete[](void * ptr, std::size_t) throw(); +#endif + +#ifndef NO_NOTHROW +_UCXXEXPORT void* operator new(std::size_t numBytes, const std::nothrow_t& ) throw(); +_UCXXEXPORT void operator delete(void* ptr, const std::nothrow_t& ) throw(); + +_UCXXEXPORT void* operator new[](std::size_t numBytes, const std::nothrow_t& ) throw(); +_UCXXEXPORT void operator delete[](void* ptr, const std::nothrow_t& ) throw(); +#endif + + /* Placement operators */ +inline void* operator new(std::size_t, void* ptr) throw() {return ptr; } +inline void operator delete(void* , void *) throw() { } + +inline void* operator new[](std::size_t, void *p) throw() { return p; } +inline void operator delete[](void* , void *) throw() {} + +#pragma GCC visibility pop + +#endif + diff --git a/external/arduino/stlarduino/new_handler.cpp b/external/arduino/stlarduino/new_handler.cpp new file mode 100644 index 000000000..1d85ee3fa --- /dev/null +++ b/external/arduino/stlarduino/new_handler.cpp @@ -0,0 +1,31 @@ +/* Copyright (C) 2005 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include + +const std::nothrow_t std::nothrow = { }; + +//Name selected to be compatable with g++ code +std::new_handler __new_handler; + +_UCXXEXPORT std::new_handler std::set_new_handler(std::new_handler new_p) throw(){ + std::new_handler retval = __new_handler; + __new_handler = new_p; + return retval; +} diff --git a/external/arduino/stlarduino/new_op.cpp b/external/arduino/stlarduino/new_op.cpp new file mode 100644 index 000000000..355087e5c --- /dev/null +++ b/external/arduino/stlarduino/new_op.cpp @@ -0,0 +1,40 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +// Arduino 1.0 contains an implementation for this. +#if ARDUINO < 100 + +#include +#include +#include + +_UCXXEXPORT void* operator new(std::size_t numBytes) throw(std::bad_alloc){ + //C++ stardard 5.3.4.8 requires that a valid pointer be returned for + //a call to new(0). Thus: + if(numBytes == 0){ + numBytes = 1; + } + void * p = malloc(numBytes); + if(p == 0){ + std::__throw_bad_alloc(); + } + return p; +} + +#endif diff --git a/external/arduino/stlarduino/new_opnt.cpp b/external/arduino/stlarduino/new_opnt.cpp new file mode 100644 index 000000000..cffce610b --- /dev/null +++ b/external/arduino/stlarduino/new_opnt.cpp @@ -0,0 +1,28 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include +#include +#include + +#ifndef NO_NOTHROW +_UCXXEXPORT void* operator new(std::size_t numBytes, const std::nothrow_t& ) throw(){ + return malloc(numBytes); +} +#endif diff --git a/external/arduino/stlarduino/new_opv.cpp b/external/arduino/stlarduino/new_opv.cpp new file mode 100644 index 000000000..b53182554 --- /dev/null +++ b/external/arduino/stlarduino/new_opv.cpp @@ -0,0 +1,40 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +// Arduino 1.0 contains an implementation for this. +#if ARDUINO < 100 + +#include +#include +#include + +_UCXXEXPORT void* operator new[](std::size_t numBytes) throw(std::bad_alloc){ + //C++ stardard 5.3.4.8 requires that a valid pointer be returned for + //a call to new(0). Thus: + if(numBytes == 0){ + numBytes = 1; + } + void * p = malloc(numBytes); + if(p == 0){ + std::__throw_bad_alloc(); + } + return p; +} + +#endif diff --git a/external/arduino/stlarduino/new_opvnt.cpp b/external/arduino/stlarduino/new_opvnt.cpp new file mode 100644 index 000000000..3ea592afb --- /dev/null +++ b/external/arduino/stlarduino/new_opvnt.cpp @@ -0,0 +1,28 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include +#include +#include + +#ifndef NO_NOTHROW +_UCXXEXPORT void* operator new[](std::size_t numBytes, const std::nothrow_t& ) throw(){ + return malloc(numBytes); +} +#endif diff --git a/external/arduino/stlarduino/nonstd-function.h b/external/arduino/stlarduino/nonstd-function.h new file mode 100644 index 000000000..adb4fdfd9 --- /dev/null +++ b/external/arduino/stlarduino/nonstd-function.h @@ -0,0 +1,235 @@ +#pragma once +#ifdef __AVR__ +#include +//extern void * operator new(size_t size, void * ptr); +namespace std{ + + templatestruct tag{using type=T;}; + templateusing type_t=typename Tag::type; + + using size_t=decltype(sizeof(int)); + + //move + + template + T&& move(T&t){return static_cast(t);} + + //forward + + template + struct remove_reference:tag{}; + template + struct remove_reference:tag{}; + templateusing remove_reference_t=type_t>; + + template + T&& forward( remove_reference_t& t ) { + return static_cast(t); + } + template + T&& forward( remove_reference_t&& t ) { + return static_cast(t); + } + + //decay + + template + struct remove_const:tag{}; + template + struct remove_const:tag{}; + + template + struct remove_volatile:tag{}; + template + struct remove_volatile:tag{}; + + template + struct remove_cv:remove_const>>{}; + + + template + struct decay3:remove_cv{}; + template + struct decay3:tag{}; + template + struct decay2:decay3{}; + template + struct decay2:tag{}; + + template + struct decay:decay2>{}; + + template + using decay_t=type_t>; + + //is_convertible + + template + T declval(); // no implementation + + template + struct integral_constant{ + static constexpr T value=t; + constexpr integral_constant() {}; + constexpr operator T()const{ return value; } + constexpr T operator()()const{ return value; } + }; + template + using bool_t=integral_constant; + using true_type=bool_t; + using false_type=bool_t; + + templatestruct voider:tag{}; + templateusing void_t=type_t>; + + namespace details { + templateclass Z, class, class...Ts> + struct can_apply:false_type{}; + templateclass Z, class...Ts> + struct can_apply>, Ts...>:true_type{}; + } + templateclass Z, class...Ts> + using can_apply = details::can_apply; + + namespace details { + template + using try_convert = decltype( To{declval()} ); + } + template + struct is_convertible : can_apply< details::try_convert, From, To > {}; + template<> + struct is_convertible:true_type{}; + + //enable_if + + template + struct enable_if {}; + template + struct enable_if:tag{}; + template + using enable_if_t=type_t>; + + //res_of + + namespace details { + template + using invoke_t = decltype( declval()(declval()...) ); + + template + struct res_of {}; + template + struct res_of>>: + tag> + {}; + } + template + using res_of = details::res_of; + template + using res_of_t=type_t>; + + //aligned_storage + + template + struct alignas(align) aligned_storage_t { + char buff[size]; + }; + + //is_same + + template + struct is_same:false_type{}; + template + struct is_same:true_type{}; + + template + struct small_task; + + template + struct small_task{ + struct vtable_t { + void(*mover)(void* src, void* dest); + void(*destroyer)(void*); + R(*invoke)(void * t, Args&&...args); + template + static vtable_t * get() { + static vtable_t table = { + [](void* src, void*dest) { + new(dest) T(move(*static_cast(src))); + }, + [](void* t){ static_cast(t)->~T(); }, + [](void * t, Args&&...args)->R { + return (*static_cast(t))(forward(args)...); + } + }; + return &table; + } + }; + vtable_t * table = nullptr; + aligned_storage_t data; + template, + enable_if_t{}>* = nullptr, + enable_if_t, R >{}>* = nullptr + > + small_task( F&& f ): + table( vtable_t::template get() ) + { + static_assert( sizeof(dF) <= sz, "object too large" ); + static_assert( alignof(dF) <= algn, "object too aligned" ); + new(&data) dF(forward(f)); + } + ~small_task() { + if (table) + table->destroyer(&data); + } + small_task(const small_task& o): + table(o.table) + { + data = o.data; + } + small_task(small_task&& o): + table(o.table) + { + if (table) + table->mover(&o.data, &data); + } + small_task(){} + small_task& operator=(const small_task& o){ + this->~small_task(); + new(this) small_task( move(o) ); + return *this; + } + small_task& operator=(small_task&& o){ + this->~small_task(); + new(this) small_task( move(o) ); + return *this; + } + explicit operator bool(){return table;} + R operator()(Args...args){ + return table->invoke(&data, forward(args)...); + } + }; + + template + inline bool operator==(const small_task& __f, nullptr_t) + { return !static_cast(__f); } + + /// @overload + template + inline bool operator==(nullptr_t, const small_task& __f) + { return !static_cast(__f); } + + template + inline bool operator!=(const small_task& __f, nullptr_t) + { return static_cast(__f); } + + /// @overload + template + inline bool operator!=(nullptr_t, const small_task& __f) + { return static_cast(__f); } + + template + using function = small_task; +} + +#endif diff --git a/external/arduino/stlarduino/numeric b/external/arduino/stlarduino/numeric new file mode 100644 index 000000000..25d1b2746 --- /dev/null +++ b/external/arduino/stlarduino/numeric @@ -0,0 +1,161 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include +#include + +#ifndef __STD_NUMERIC_HEADER +#define __STD_NUMERIC_HEADER 1 + +#pragma GCC visibility push(default) + +namespace std{ + template _UCXXEXPORT + T accumulate(InputIterator first, InputIterator last, T init) + { + while(first != last){ + init = init + *first; + ++first; + } + return init; + } + + template _UCXXEXPORT + T accumulate(InputIterator first, InputIterator last, T init, BinaryOperation binary_op) + { + while(first != last){ + init = binary_op(init, *first); + ++first; + } + return init; + } + + + template _UCXXEXPORT + T inner_product(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, T init) + { + while(first1 != last1){ + init = init + *first1 * *first2; + ++first1; + ++first2; + } + return init; + } + + template _UCXXEXPORT + T inner_product(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, T init, + BinaryOperation1 binary_op1, + BinaryOperation2 binary_op2) + { + while(first1 != last1){ + init = binary_op1(init, binary_op2(*first1, *first2)); + ++first1; + ++first2; + } + return init; + } + + template _UCXXEXPORT + OutputIterator partial_sum(InputIterator first, InputIterator last, + OutputIterator result) + { + OutputIterator temp(result); + *result = *first; + ++first; + ++result; + + while(first != last){ + *result = *first + *temp; + temp = result; + ++first; + ++result; + } + return result; + } + + + template _UCXXEXPORT + OutputIterator partial_sum(InputIterator first, InputIterator last, + OutputIterator result, BinaryOperation binary_op) + { + OutputIterator temp(result); + *result = *first; + ++first; + ++result; + + while(first != last){ + *result = binary_op(*first, *temp); + temp = result; + ++first; + ++result; + } + return result; + } + + + template _UCXXEXPORT + OutputIterator + adjacent_difference(InputIterator first, InputIterator last, + OutputIterator result) + { + OutputIterator temp(first); + *result = *first; + ++first; + ++result; + + while(first != last){ + *result = *first - *temp; + temp = first; + ++first; + ++result; + } + + return result; + } + + + template _UCXXEXPORT + OutputIterator + adjacent_difference(InputIterator first, InputIterator last, + OutputIterator result, BinaryOperation binary_op) + { + OutputIterator temp(first); + *result = *first; + ++first; + ++result; + + while(first != last){ + *result = binary_op(*first, *temp); + temp = first; + ++first; + ++result; + } + + return result; + } + +} + +#pragma GCC visibility pop + +#endif + diff --git a/external/arduino/stlarduino/numeric.cpp b/external/arduino/stlarduino/numeric.cpp new file mode 100644 index 000000000..eb93f2eb7 --- /dev/null +++ b/external/arduino/stlarduino/numeric.cpp @@ -0,0 +1,27 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include + +namespace std{ + + +} + + diff --git a/external/arduino/stlarduino/ostream b/external/arduino/stlarduino/ostream new file mode 100644 index 000000000..b112e94a9 --- /dev/null +++ b/external/arduino/stlarduino/ostream @@ -0,0 +1,502 @@ +/* Copyright (C) 2004-2008 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include + +#ifndef STD_HEADER_OSTREAM +#define STD_HEADER_OSTREAM 1 + +#include +#include +#include +#include + +#pragma GCC visibility push(default) + +namespace std { + template class basic_ostream; + typedef basic_ostream ostream; + +#ifdef __UCLIBCXX_HAS_WCHAR__ + typedef basic_ostream wostream; +#endif + + template basic_ostream& endl(basic_ostream& os); + template basic_ostream& ends(basic_ostream& os); + template basic_ostream& flush(basic_ostream& os); + + template class _UCXXEXPORT basic_ostream + : virtual public basic_ios + { + public: + + typedef charT char_type; + typedef typename traits::int_type int_type; + typedef typename traits::pos_type pos_type; + typedef typename traits::off_type off_type; + typedef traits traits_type; + + + _UCXXEXPORT basic_ostream(basic_streambuf* sb) + : basic_ios(sb) + { + basic_ios::init(sb); + } + virtual _UCXXEXPORT ~basic_ostream(); + + class sentry; + + _UCXXEXPORT basic_ostream& operator<<(basic_ostream& (*pf)(basic_ostream&)){ + return pf(*this); + } + _UCXXEXPORT basic_ostream& operator<<(basic_ios& (*pf)(basic_ios&)){ + pf(*this); + return *this; + } + _UCXXEXPORT basic_ostream& operator<<(ios_base& (*pf)(ios_base&)){ + pf(*this); + return *this; + } + basic_ostream& operator<<(bool n); + basic_ostream& operator<<(short n); + basic_ostream& operator<<(unsigned short n); + basic_ostream& operator<<(int n); + basic_ostream& operator<<(unsigned int n); + basic_ostream& operator<<(long n); + basic_ostream& operator<<(unsigned long n); + basic_ostream& operator<<(float f); + basic_ostream& operator<<(double f); + basic_ostream& operator<<(long double f); + basic_ostream& operator<<(void* p); + basic_ostream& operator<<(basic_streambuf* sb); + + _UCXXEXPORT basic_ostream& put(char_type c){ + if(basic_ostream::traits_type::eq_int_type( + basic_ios::mstreambuf->sputc(c), + basic_ostream::traits_type::eof())) + { + basic_ios::setstate(ios_base::eofbit); + } + return *this; + } + _UCXXEXPORT basic_ostream& write(const char_type* s, streamsize n){ + if(basic_ostream::traits_type::eq_int_type( + basic_ios::mstreambuf->sputn(s, n), + basic_ostream::traits_type::eof()) + ){ + basic_ios::setstate(ios_base::eofbit); + } + return *this; + } + _UCXXEXPORT basic_ostream& flush(){ + if(basic_ios::mstreambuf->pubsync() == -1){ + basic_ios::setstate(ios_base::badbit); + } + return *this; + } + _UCXXEXPORT pos_type tellp(){ + if(basic_ios::fail() != false){ + return pos_type(-1); + } + return basic_ios::rdbuf()->pubseekoff(0, ios_base::cur, ios_base::out); + } + _UCXXEXPORT basic_ostream& seekp(pos_type pos){ + if( basic_ios::fail() != true ){ + basic_ios::rdbuf()->pubseekpos(pos); + } + return *this; + } + _UCXXEXPORT basic_ostream& seekp(off_type off, ios_base::seekdir dir){ + if( basic_ios::fail() != true){ + basic_ios::rdbuf()->pubseekoff(off, dir); + } + return *this; + } + + _UCXXEXPORT void printout(const char_type* s, streamsize n){ + streamsize extra = ios::width() - n; + if ((ios::flags()&ios::adjustfield) == ios::right){ + while (extra > 0) { + --extra; + put(ios::fill()); + } + } + write(s, n); + if ((ios::flags()&ios::adjustfield) == ios::left) { + while (extra > 0) { + --extra; + put(ios::fill()); + } + } + // Width value only applies for the next output operation. Reset to zero. + ios::width(0); + } + + protected: + basic_ostream(const basic_ostream &){ } + basic_ostream & operator=(const basic_ostream &){ return *this; } + }; + + //Implementations of template functions. To allow for partial specialization + + template _UCXXEXPORT basic_ostream::~basic_ostream(){ } + + template _UCXXEXPORT basic_ostream& basic_ostream::operator<<(bool n){ + sentry s(*this); + if( basic_ios::flags() & ios_base::boolalpha){ + if(n){ + printout("true", 4); + }else{ + printout("false", 5); + } + }else{ + if(n){ + printout("1", 1); + }else{ + printout("0", 1); + } + } + if(basic_ios::flags() & ios_base::unitbuf){ + flush(); + } + return *this; + } + + template _UCXXEXPORT basic_ostream& + basic_ostream::operator<<(unsigned short n){ + sentry s(*this); + __ostream_printout::printout(*this, n); + return *this; + } + + template _UCXXEXPORT basic_ostream& basic_ostream::operator<<(short n){ + sentry s(*this); + __ostream_printout::printout(*this, n); + return *this; + } + + template _UCXXEXPORT basic_ostream& basic_ostream::operator<<(int n){ + sentry s(*this); + __ostream_printout::printout(*this, n); + return *this; + } + + template _UCXXEXPORT basic_ostream& basic_ostream::operator<<(unsigned int n){ + sentry s(*this); + __ostream_printout::printout(*this, n); + return *this; + } + + template _UCXXEXPORT basic_ostream& basic_ostream::operator<<(long n){ + sentry s(*this); + __ostream_printout::printout(*this, n); + return *this; + } + + template _UCXXEXPORT basic_ostream& + basic_ostream::operator<<(unsigned long n) + { + sentry s(*this); + __ostream_printout::printout(*this, n); + return *this; + } + + template _UCXXEXPORT basic_ostream& basic_ostream::operator<<(float f){ + sentry s(*this); + __ostream_printout::printout(*this, f); + return *this; + } + + template _UCXXEXPORT basic_ostream& basic_ostream::operator<<(double f){ + sentry s(*this); + __ostream_printout::printout(*this, f); + return *this; + } + + template _UCXXEXPORT basic_ostream& basic_ostream::operator<<(long double f){ + sentry s(*this); + __ostream_printout::printout(*this, f); + return *this; + } + + template _UCXXEXPORT basic_ostream& basic_ostream::operator<<(void* p){ + sentry s(*this); + char buffer[20]; + printout(buffer, snprintf(buffer, 20, "%p", p) ); + if(basic_ios::flags() & ios_base::unitbuf){ + flush(); + } + return *this; + } + + template _UCXXEXPORT basic_ostream& + basic_ostream::operator<<(basic_streambuf* sb) + { + sentry s(*this); + if(sb == 0){ + basic_ios::setstate(ios_base::badbit); + return *this; + } + + typename traits::int_type c; + + while(basic_ios::good() && (c = sb->sbumpc()) != traits::eof() ){ + put(c); + } + + if(basic_ios::flags() & ios_base::unitbuf){ + flush(); + } + return *this; + } + + /*Template Specializations*/ + +#ifdef __UCLIBCXX_EXPAND_OSTREAM_CHAR__ +#ifndef __UCLIBCXX_COMPILE_OSTREAM__ + +#ifdef __UCLIBCXX_EXPAND_CONSTRUCTORS_DESTRUCTORS__ + + template <> _UCXXEXPORT ostream::~basic_ostream(); + +#endif // __UCLIBCXX_EXPAND_CONSTRUCTORS_DESTRUCTORS__ + + template <> _UCXXEXPORT ostream & ostream::flush(); + + template <> _UCXXEXPORT ostream & ostream::operator<<(bool n); + template <> _UCXXEXPORT ostream & ostream::operator<<(short int n); + template <> _UCXXEXPORT ostream & ostream::operator<<(unsigned short int n); + template <> _UCXXEXPORT ostream & ostream::operator<<(int n); + template <> _UCXXEXPORT ostream & ostream::operator<<(unsigned int n); + template <> _UCXXEXPORT ostream & ostream::operator<<(long n); + template <> _UCXXEXPORT ostream & ostream::operator<<(unsigned long n); + template <> _UCXXEXPORT ostream & ostream::operator<<(float f); + template <> _UCXXEXPORT ostream & ostream::operator<<(double f); + template <> _UCXXEXPORT ostream & ostream::operator<<(long double f); + template <> _UCXXEXPORT ostream & ostream::operator<<(void* p); + template <> _UCXXEXPORT ostream & ostream::operator<<(basic_streambuf >* sb); +#endif +#endif + + template + class _UCXXEXPORT basic_ostream::sentry + { + bool ok; + public: + explicit _UCXXEXPORT sentry(basic_ostream& os): ok(true){ + if(os.good() !=0){ //Prepare for output + } + + //Flush any tied buffer + if(os.tie() !=0 ){ + os.tie()->flush(); + } + } + _UCXXEXPORT ~sentry() { } + _UCXXEXPORT operator bool() { + return ok; + } + }; + + +#ifdef __UCLIBCXX_EXPAND_OSTREAM_CHAR__ +#ifndef __UCLIBCXX_COMPILE_OSTREAM__ +#ifdef __UCLIBCXX_EXPAND_CONSTRUCTORS_DESTRUCTORS__ + + template <> _UCXXEXPORT ostream::sentry::sentry(ostream & os); + template <> _UCXXEXPORT ostream::sentry::~sentry(); + +#endif //__UCLIBCXX_EXPAND_CONSTRUCTORS_DESTRUCTORS__ +#endif +#endif + + + //Non - class functions + + + template _UCXXEXPORT basic_ostream& + operator<<(basic_ostream& out, charT c) + { + typename basic_ostream::sentry s(out); + out.put(c); + return out; + } + + template _UCXXEXPORT basic_ostream& + operator<<(basic_ostream& out, char c) + { + typename basic_ostream::sentry s(out); + out.put(c); + return out; + } + + template _UCXXEXPORT basic_ostream& + operator<<(basic_ostream& out, char c) + { + typename basic_ostream::sentry s(out); + out.put(c); + return out; + } + + // signed and unsigned + template _UCXXEXPORT basic_ostream& + operator<<(basic_ostream& out, signed char c) + { + typename basic_ostream::sentry s(out); + out.put(c); + return out; + } + + template _UCXXEXPORT basic_ostream& + operator<<(basic_ostream& out, unsigned char c) + { + typename basic_ostream::sentry s(out); + out.put(c); + return out; + } + + template _UCXXEXPORT basic_ostream& + operator<<(basic_ostream& out, const charT* c) + { + typename basic_ostream::sentry s(out); + out.printout(c, traits::length(c) ); + return out; + } + + template _UCXXEXPORT basic_ostream& + operator<<(basic_ostream& out, const char* c) + { + typename basic_ostream::sentry s(out); + out.printout(c, char_traits::length(c) ); + return out; + } + + // partial specializations + template _UCXXEXPORT basic_ostream& + operator<<(basic_ostream& out, const char* c) + { + typename basic_ostream::sentry s(out); + out.printout(c, traits::length(c)); + return out; + } + +#ifdef __UCLIBCXX_HAS_WCHAR__ + template _UCXXEXPORT basic_ostream& + operator<<(basic_ostream& out, const char* c) + { + typename basic_ostream::sentry s(out); + size_t numChars = char_traits::length(c); + wchar_t * temp = new wchar_t[numChars]; + + for(size_t i=0; i < numChars; ++i){ + temp[i] = out.widen(c[i]); + } + + out.printout(temp, numChars); + return out; + } +#endif + + // signed and unsigned + template _UCXXEXPORT basic_ostream& + operator<<(basic_ostream& out, const signed char* c) + { + typename basic_ostream::sentry s(out); + out.printout(reinterpret_cast(c), traits::length( reinterpret_cast(c))); + return out; + } + + template _UCXXEXPORT basic_ostream& + operator<<(basic_ostream& out, const unsigned char* c) + { + typename basic_ostream::sentry s(out); + out.printout(reinterpret_cast(c), traits::length( reinterpret_cast(c))); + return out; + } + + template _UCXXEXPORT basic_ostream& + endl(basic_ostream& os) + { + typename basic_ostream::sentry s(os); + os.put('\n'); + os.flush(); + return os; + } + + template _UCXXEXPORT basic_ostream& + ends(basic_ostream& os) + { + typename basic_ostream::sentry s(os); + os.put(traits::eos()); + return os; + } + + template _UCXXEXPORT basic_ostream& flush(basic_ostream& os){ + typename basic_ostream::sentry s(os); + os.flush(); + return os; + } + + +#ifdef __UCLIBCXX_EXPAND_OSTREAM_CHAR__ +#ifndef __UCLIBCXX_COMPILE_OSTREAM__ + template <> _UCXXEXPORT ostream & endl(ostream & os); + template <> _UCXXEXPORT ostream & flush(ostream & os); + template <> _UCXXEXPORT ostream & operator<<(ostream & out, char c); + template <> _UCXXEXPORT ostream & operator<<(ostream & out, const char* c); + template <> _UCXXEXPORT ostream & operator<<(ostream & out, unsigned char c); + template <> _UCXXEXPORT ostream & operator<<(ostream & out, unsigned const char* c); + +#endif +#endif + + +#ifndef __STRICT_ANSI__ + +//Support for output of long long data types + +template _UCXXEXPORT basic_ostream& + operator<<(basic_ostream& os, signed long long int i) +{ + typename basic_ostream::sentry s(os); + __ostream_printout::printout(os, i); + return os; +} + + +template _UCXXEXPORT basic_ostream& + operator<<(basic_ostream& os, unsigned long long int i) +{ + typename basic_ostream::sentry s(os); + __ostream_printout::printout(os, i); + return os; +} + + +#endif //__STRICT_ANSI__ + + + + +} + +#pragma GCC visibility pop + +#endif + diff --git a/external/arduino/stlarduino/ostream.cpp b/external/arduino/stlarduino/ostream.cpp new file mode 100644 index 000000000..0973871b0 --- /dev/null +++ b/external/arduino/stlarduino/ostream.cpp @@ -0,0 +1,65 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#define __UCLIBCXX_COMPILE_OSTREAM__ 1 + +#include + +namespace std{ + + +#ifdef __UCLIBCXX_EXPAND_OSTREAM_CHAR__ + +#ifdef __UCLIBCXX_EXPAND_CONSTRUCTORS_DESTRUCTORS__ + template _UCXXEXPORT ostream::~basic_ostream(); +#endif //__UCLIBCXX_EXPAND_CONSTRUCTORS_DESTRUCTORS__ + + template _UCXXEXPORT ostream & ostream::flush(); + + template _UCXXEXPORT ostream & ostream::operator<<(bool n); + template _UCXXEXPORT ostream & ostream::operator<<(short int n); + template _UCXXEXPORT ostream & ostream::operator<<(unsigned short int n); + template _UCXXEXPORT ostream & ostream::operator<<(int n); + template _UCXXEXPORT ostream & ostream::operator<<(unsigned int n); + template _UCXXEXPORT ostream & ostream::operator<<(long n); + template _UCXXEXPORT ostream & ostream::operator<<(unsigned long n); + template _UCXXEXPORT ostream & ostream::operator<<(float f); + template _UCXXEXPORT ostream & ostream::operator<<(double f); + template _UCXXEXPORT ostream & ostream::operator<<(long double f); + template _UCXXEXPORT ostream & ostream::operator<<(void* p); + template _UCXXEXPORT ostream & ostream::operator<<(basic_streambuf >* sb); + +#ifdef __UCLIBCXX_EXPAND_CONSTRUCTORS_DESTRUCTORS__ + + template _UCXXEXPORT ostream::sentry::sentry(ostream & os); + template _UCXXEXPORT ostream::sentry::~sentry(); + +#endif //__UCLIBCXX_EXPAND_CONSTRUCTORS_DESTRUCTORS__ + + template _UCXXEXPORT ostream & endl(ostream & os); + template _UCXXEXPORT ostream & flush(ostream & os); + template _UCXXEXPORT ostream & operator<<(ostream & out, char c); + template _UCXXEXPORT ostream & operator<<(ostream & out, const char* c); + template _UCXXEXPORT ostream & operator<<(ostream & out, unsigned char c); + template _UCXXEXPORT ostream & operator<<(ostream & out, const unsigned char* c); + +#endif + + +} diff --git a/external/arduino/stlarduino/ostream_helpers b/external/arduino/stlarduino/ostream_helpers new file mode 100644 index 000000000..813f573bf --- /dev/null +++ b/external/arduino/stlarduino/ostream_helpers @@ -0,0 +1,503 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include +#include +#include +#include +#include +#include +#include // for floor() + +#ifndef __STD_HEADER_OSTREAM_HELPERS +#define __STD_HEADER_OSTREAM_HELPERS 1 + +#pragma GCC visibility push(default) + +namespace std{ + +int arduinoPrintFloat(double number, uint8_t digits, char *buffer, size_t buffer_size); + + /* We are making the following template class for serveral reasons. Firstly, + * we want to keep the main ostream code neat and tidy. Secondly, we want it + * to be easy to do partial specialization of the ostream code so that it can + * be expanded and put into the library. This will allow us to make application + * code smaller at the expense of increased library size. This is a fair + * trade-off when there are multiple applications being compiled. Also, this + * feature will be used optionally via configuration options. It will also + * allow us to keep the code bases in sync, dramatically simplifying the + * maintenance required. We specialized for char because wchar and others + * require different scanf functions + */ + + + + template class _UCXXEXPORT __ostream_printout{ + public: + static void printout(basic_ostream& stream, const dataType n); + }; + + template class _UCXXEXPORT __ostream_printout{ + public: + static void printout(basic_ostream& stream, const signed long int n) + { + char buffer[20]; + const char * c_ld = "%ld"; + const char * c_lo = "%lo"; + const char * c_lX = "%lX"; + const char * c_lx = "%lx"; + const char * c_hashlo = "%#lo"; + const char * c_hashlX = "%#lX"; + const char * c_hashlx = "%#lx"; + + const char * formatString=0; + + if( stream.flags() & ios_base::dec){ + formatString = c_ld; + }else if( stream.flags() & ios_base::oct){ + if( stream.flags() & ios_base::showbase){ + formatString = c_hashlo; + }else{ + formatString = c_lo; + } + }else if (stream.flags() & ios_base::hex){ + if(stream.flags() & ios_base::showbase){ + if(stream.flags() & ios_base::uppercase){ + formatString = c_hashlX; + }else{ + formatString = c_hashlx; + } + }else{ + if(stream.flags() & ios_base::uppercase){ + formatString = c_lX; + }else{ + formatString = c_lx; + } + } + } + + stream.printout(buffer, snprintf(buffer, 20, formatString, n) ); + + if(stream.flags() & ios_base::unitbuf){ + stream.flush(); + } + + } + }; + + template class _UCXXEXPORT __ostream_printout{ + public: + static void printout(basic_ostream& stream, const unsigned long int n) + { + char buffer[20]; + const char * c_lo = "%lo"; + const char * c_lu = "%lu"; + const char * c_lX = "%lX"; + const char * c_lx = "%lx"; + const char * c_hashlo = "%#lo"; + const char * c_hashlX = "%#lX"; + const char * c_hashlx = "%#lx"; + const char * formatString=0; + + if( stream.flags() & ios_base::dec){ + formatString = c_lu; + }else if( stream.flags() & ios_base::oct){ + if( stream.flags() & ios_base::showbase){ + formatString = c_hashlo; + }else{ + formatString = c_lo; + } + }else if (stream.flags() & ios_base::hex){ + if(stream.flags() & ios_base::showbase){ + if(stream.flags() & ios_base::uppercase){ + formatString = c_hashlX; + }else{ + formatString = c_hashlx; + } + }else{ + if(stream.flags() & ios_base::uppercase){ + formatString = c_lX; + }else{ + formatString = c_lx; + } + } + } + + stream.printout(buffer, snprintf(buffer, 20, formatString, n)); + if(stream.flags() & ios_base::unitbuf){ + stream.flush(); + } + } + }; + +#ifndef __STRICT_ANSI__ + + template class _UCXXEXPORT __ostream_printout{ + public: + static void printout(basic_ostream& stream, const signed long long int n) + { + char buffer[28]; + const char * lld = "%lld"; + const char * llo = "%llo"; + const char * llX = "%llX"; + const char * llx = "%llx"; + const char * hashllo = "%#llo"; + const char * hashllX = "%#llX"; + const char * hashllx = "%#llx"; + const char * formatString=0; + + if( stream.flags() & ios_base::dec){ + formatString = lld; + }else if( stream.flags() & ios_base::oct){ + if( stream.flags() & ios_base::showbase){ + formatString = hashllo; + }else{ + formatString = llo; + } + }else if (stream.flags() & ios_base::hex){ + if(stream.flags() & ios_base::showbase){ + if(stream.flags() & ios_base::uppercase){ + formatString = hashllX; + }else{ + formatString = hashllx; + } + }else{ + if(stream.flags() & ios_base::uppercase){ + formatString = llX; + }else{ + formatString = llx; + } + } + } + + stream.printout(buffer, snprintf(buffer, 27, formatString, n) ); + + if(stream.flags() & ios_base::unitbuf){ + stream.flush(); + } + } + }; + + template class _UCXXEXPORT __ostream_printout{ + public: + static void printout(basic_ostream& stream, const unsigned long long int n) + { + char buffer[28]; + const char * llo = "%llo"; + const char * llu = "%llu"; + const char * llX = "%llX"; + const char * llx = "%llx"; + const char * hashllo = "%#llo"; + const char * hashllX = "%#llX"; + const char * hashllx = "%#llx"; + const char * formatString=0; + + if( stream.flags() & ios_base::dec){ + formatString = llu; + }else if( stream.flags() & ios_base::oct){ + if( stream.flags() & ios_base::showbase){ + formatString = hashllo; + }else{ + formatString = llo; + } + }else if (stream.flags() & ios_base::hex){ + if(stream.flags() & ios_base::showbase){ + if(stream.flags() & ios_base::uppercase){ + formatString = hashllX; + }else{ + formatString = hashllx; + } + }else{ + if(stream.flags() & ios_base::uppercase){ + formatString = llX; + }else{ + formatString = llx; + } + } + } + + stream.printout(buffer, snprintf(buffer, 27, formatString, n) ); + + if(stream.flags() & ios_base::unitbuf){ + stream.flush(); + } + } + }; + + +#endif //__STRICT_ANSI__ + +// FIXME: Improve printing of doubles and floats. + + template class _UCXXEXPORT __ostream_printout{ + public: + static void printout(basic_ostream& stream, const double f) + { + char buffer[32]; + int length; + length = arduinoPrintFloat(f, 2, &buffer[0], 32); + +/* + if(stream.flags() & ios_base::scientific){ + if(stream.flags() & ios_base::uppercase){ + length = snprintf(buffer, 32, "%*.*E", static_cast(stream.width()),static_cast(stream.precision()), f); + }else{ + length = snprintf(buffer, 32, "%*.*e", static_cast(stream.width()),static_cast(stream.precision()), f); + } + } else if(stream.flags() & ios_base::fixed){ + length = snprintf(buffer, 32, "%*.*f",static_cast(stream.width()),static_cast(stream.precision()), f); + } else { + length = snprintf(buffer, 32, "%*.*g",static_cast(stream.width()),static_cast(stream.precision()), f); + } +*/ + stream.printout(buffer, length); + if(stream.flags() & ios_base::unitbuf){ + stream.flush(); + } + } + }; + + template class _UCXXEXPORT __ostream_printout{ + public: + static void printout(basic_ostream& stream, const float f) + { + char buffer[32]; + int length; + length = arduinoPrintFloat(f, 2, &buffer[0], 32); + +/* + if(stream.flags() & ios_base::scientific){ + if(stream.flags() & ios_base::uppercase){ + length = snprintf(buffer, 32, "%*.*LE", static_cast(stream.width()), static_cast(stream.precision()), f); + }else{ + length = snprintf(buffer, 32, "%*.*Le", static_cast(stream.width()), static_cast(stream.precision()), f); + } + } else if(stream.flags() & ios_base::fixed){ + length = snprintf(buffer, 32, "%*.*Lf", static_cast(stream.width()), static_cast(stream.precision()), f); + } else { + length = snprintf(buffer, 32, "%*.*Lg", static_cast(stream.width()), static_cast(stream.precision()), f); + } +*/ + stream.printout(buffer, length); + if(stream.flags() & ios_base::unitbuf){ + stream.flush(); + } + } + }; + +#ifdef __UCLIBCXX_HAS_WCHAR__ + template class _UCXXEXPORT __ostream_printout{ + public: + static void printout(basic_ostream& stream, const signed long int n) + { + wchar_t buffer[20]; + if( stream.flags() & ios_base::dec){ + stream.printout(buffer, swprintf(buffer, 20, L"%ld", n)); + }else if( stream.flags() & ios_base::oct){ + if( stream.flags() & ios_base::showbase){ + stream.printout(buffer, swprintf(buffer, 20, L"%#lo", n)); + }else{ + stream.printout(buffer, swprintf(buffer, 20, L"%lo", n) ); + } + }else if (stream.flags() & ios_base::hex){ + if(stream.flags() & ios_base::showbase){ + if(stream.flags() & ios_base::uppercase){ + stream.printout(buffer, swprintf(buffer, 20, L"%#lX", n) ); + }else{ + stream.printout(buffer, swprintf(buffer, 20, L"%#lx", n) ); + } + }else{ + if(stream.flags() & ios_base::uppercase){ + stream.printout(buffer, swprintf(buffer, 20, L"%lX", n) ); + }else{ + stream.printout(buffer, swprintf(buffer, 20, L"%lx", n) ); + } + } + } + if(stream.flags() & ios_base::unitbuf){ + stream.flush(); + } + } + }; + + template class _UCXXEXPORT __ostream_printout{ + public: + static void printout(basic_ostream& stream, const unsigned long int n) + { + wchar_t buffer[20]; + if( stream.flags() & ios_base::dec){ + stream.printout(buffer, swprintf(buffer, 20, L"%lu", n)); + }else if( stream.flags() & ios_base::oct){ + if( stream.flags() & ios_base::showbase){ + stream.printout(buffer, swprintf(buffer, 20, L"%#lo", n)); + }else{ + stream.printout(buffer, swprintf(buffer, 20, L"%lo", n) ); + } + }else if (stream.flags() & ios_base::hex){ + if(stream.flags() & ios_base::showbase){ + if(stream.flags() & ios_base::uppercase){ + stream.printout(buffer, swprintf(buffer, 20, L"%#lX", n) ); + }else{ + stream.printout(buffer, swprintf(buffer, 20, L"%#lx", n) ); + } + }else{ + if(stream.flags() & ios_base::uppercase){ + stream.printout(buffer, swprintf(buffer, 20, L"%lX", n) ); + }else{ + stream.printout(buffer, swprintf(buffer, 20, L"%lx", n) ); + } + } + } + if(stream.flags() & ios_base::unitbuf){ + stream.flush(); + } + } + }; + +#ifndef __STRICT_ANSI__ + + template class _UCXXEXPORT __ostream_printout{ + public: + static void printout(basic_ostream& stream, const signed long long int n) + { + wchar_t buffer[28]; + if( stream.flags() & ios_base::dec){ + stream.printout(buffer, swprintf(buffer, 27, L"%lld", n)); + }else if( stream.flags() & ios_base::oct){ + if( stream.flags() & ios_base::showbase){ + stream.printout(buffer, swprintf(buffer, 27, L"%#llo", n)); + }else{ + stream.printout(buffer, swprintf(buffer, 27, L"%llo", n) ); + } + }else if (stream.flags() & ios_base::hex){ + if(stream.flags() & ios_base::showbase){ + if(stream.flags() & ios_base::uppercase){ + stream.printout(buffer, swprintf(buffer, 27, L"%#llX", n) ); + }else{ + stream.printout(buffer, swprintf(buffer, 27, L"%#llx", n) ); + } + }else{ + if(stream.flags() & ios_base::uppercase){ + stream.printout(buffer, swprintf(buffer, 27, L"%llX", n) ); + }else{ + stream.printout(buffer, swprintf(buffer, 27, L"%llx", n) ); + } + } + } + if(stream.flags() & ios_base::unitbuf){ + stream.flush(); + } + } + }; + + template class _UCXXEXPORT __ostream_printout{ + public: + static void printout(basic_ostream& stream, const unsigned long long int n) + { + wchar_t buffer[28]; + if( stream.flags() & ios_base::dec){ + stream.printout(buffer, swprintf(buffer, 27, L"%llu", n)); + }else if( stream.flags() & ios_base::oct){ + if( stream.flags() & ios_base::showbase){ + stream.printout(buffer, swprintf(buffer, 27, L"%#llo", n)); + }else{ + stream.printout(buffer, swprintf(buffer, 27, L"%llo", n) ); + } + }else if (stream.flags() & ios_base::hex){ + if(stream.flags() & ios_base::showbase){ + if(stream.flags() & ios_base::uppercase){ + stream.printout(buffer, swprintf(buffer, 27, L"%#llX", n) ); + }else{ + stream.printout(buffer, swprintf(buffer, 27, L"%#llx", n) ); + } + }else{ + if(stream.flags() & ios_base::uppercase){ + stream.printout(buffer, swprintf(buffer, 27, L"%llX", n) ); + }else{ + stream.printout(buffer, swprintf(buffer, 27, L"%llx", n) ); + } + } + } + if(stream.flags() & ios_base::unitbuf){ + stream.flush(); + } + } + }; + + +#endif //__STRICT_ANSI__ + + template class _UCXXEXPORT __ostream_printout{ + public: + static void printout(basic_ostream& stream, const double f) + { + wchar_t buffer[32]; + wchar_t format_string[32]; + if(stream.flags() & ios_base::scientific){ + if(stream.flags() & ios_base::uppercase){ + swprintf(format_string, 32, L"%%%u.%uE", static_cast(stream.width()), static_cast(stream.precision())); + }else{ + swprintf(format_string, 32, L"%%%u.%ue", static_cast(stream.width()), static_cast(stream.precision())); + } + } else if(stream.flags() & ios_base::fixed){ + swprintf(format_string, 32, L"%%%u.%uf", static_cast(stream.width()), static_cast(stream.precision())); + } else { + swprintf(format_string, 32, L"%%%u.%ug", static_cast(stream.width()), static_cast(stream.precision())); + } + stream.printout(buffer, swprintf(buffer, 32, format_string, f) ); + if(stream.flags() & ios_base::unitbuf){ + stream.flush(); + } + } + }; + + template class _UCXXEXPORT __ostream_printout{ + public: + static void printout(basic_ostream& stream, const long double f) + { + wchar_t buffer[32]; + wchar_t format_string[32]; + if(stream.flags() & ios_base::scientific){ + if(stream.flags() & ios_base::uppercase){ + swprintf(format_string, 32, L"%%%u.%uLE", static_cast(stream.width()), static_cast(stream.precision())); + }else{ + swprintf(format_string, 32, L"%%%u.%uLe", static_cast(stream.width()), static_cast(stream.precision())); + } + } else if(stream.flags() & ios_base::fixed){ + swprintf(format_string, 32, L"%%%u.%uLf", static_cast(stream.width()), static_cast(stream.precision())); + } else { + swprintf(format_string, 32, L"%%%u.%uLg", static_cast(stream.width()), static_cast(stream.precision())); + } + stream.printout(buffer, swprintf(buffer, 32, format_string, f) ); + if(stream.flags() & ios_base::unitbuf){ + stream.flush(); + } + } + }; + +#endif //__UCLIBCXX_HAS_WCHAR__ + +} + +#pragma GCC visibility pop + +#endif + + + diff --git a/external/arduino/stlarduino/ostream_helpers.cpp b/external/arduino/stlarduino/ostream_helpers.cpp new file mode 100644 index 000000000..004ce6f13 --- /dev/null +++ b/external/arduino/stlarduino/ostream_helpers.cpp @@ -0,0 +1,67 @@ +/* + * This code is taken from the Arduino Print class. + * + * printf() doesn't handle floating point types on AVR. + * This code helps me hack that in. It's not here permanently. + * + */ + +#include +#include + +namespace std { + +int arduinoPrintFloat(double number, uint8_t digits, char *buffer, size_t buffer_size) +{ + size_t n = 0; + + if (buffer_size < 4) + return 0; + + if (isnan(number)) return snprintf(buffer, buffer_size, "nan"); + if (isinf(number)) return snprintf(buffer, buffer_size, "inf"); + if (number > 4294967040.0) return snprintf(buffer, buffer_size, "ovf"); // constant determined empirically + if (number <-4294967040.0) return snprintf(buffer, buffer_size, "ovf"); // constant determined empirically + + // Handle negative numbers + if (number < 0.0) { + n += snprintf(&buffer[n], buffer_size-n, "-"); + number = -number; + } + + // Round correctly so that print(1.999, 2) prints as "2.00" + double rounding = 0.5; + for (uint8_t i=0; i= buffer_size) + return n; + + // Print the decimal point, but only if there are digits beyond + if (digits > 0) { + n += snprintf(&buffer[n], buffer_size-n, "."); + if (n >= buffer_size) + return n; + } + + // Extract digits from the remainder one at a time + while (digits-- > 0) + { + remainder *= 10.0; + unsigned int toPrint = (unsigned int)(remainder); + n += snprintf(&buffer[n], buffer_size-n, "%u", toPrint); + if (n >= buffer_size) + return n; + remainder -= toPrint; + } + + return n; +} + +} diff --git a/external/arduino/stlarduino/queue b/external/arduino/stlarduino/queue new file mode 100644 index 000000000..b817b1dfe --- /dev/null +++ b/external/arduino/stlarduino/queue @@ -0,0 +1,126 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + This file is part of the uClibc++ Library. + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include +#include +#include +#include + +#ifndef __HEADER_STD_QUEUE +#define __HEADER_STD_QUEUE 1 + +#pragma GCC visibility push(default) + +namespace std{ + + template > class _UCXXEXPORT queue{ + protected: + Container c; + public: + typedef typename Container::value_type value_type; + typedef typename Container::size_type size_type; + typedef Container container_type; + + explicit queue(const Container& a = Container()) : c(a) { } + + bool empty() const { return c.empty(); } + size_type size() const { return c.size(); } + value_type& front() { return c.front(); } + const value_type& front() const { return c.front(); } + value_type& back() { return c.back(); } + const value_type& back() const { return c.back(); } + void push(const value_type& x) { c.push_back(x); } + void pop() { c.pop_front(); } + }; + + + template _UCXXEXPORT bool + operator==(const queue& x, const queue& y) + { + return (x.c == y.c); + } + template _UCXXEXPORT bool + operator< (const queue& x, const queue& y) + { + return (x.c < y.c); + } + template _UCXXEXPORT bool + operator!=(const queue& x, const queue& y) + { + return (x.c != y.c); + } + template _UCXXEXPORT bool + operator> (const queue& x, const queue& y) + { + return (x.c > y.c); + } + template _UCXXEXPORT bool + operator>=(const queue& x, const queue& y) + { + return (x.c >= y.c); + } + template _UCXXEXPORT bool + operator<=(const queue& x, const queue& y) + { + return (x.c <= y.c); + } + + + template , + class Compare = less + > class _UCXXEXPORT priority_queue { + protected: + Container c; + Compare comp; + public: + typedef typename Container::value_type value_type; + typedef typename Container::size_type size_type; + typedef Container container_type; + + explicit priority_queue(const Compare& x = Compare(), const Container& a = Container()) + : c(a), comp(x) { make_heap(c.begin(), c.end(), comp) ; } + template priority_queue(InputIterator first, + InputIterator last, + const Compare& x = Compare(), + const Container& y= Container()) + : c(y), comp(c) + { + c.insert(c.end(), first, last); + make_heap(c.begin(), c.end(), comp); + } + + bool empty() const { return c.empty(); } + size_type size() const { return c.size(); } + const value_type& top() const { return c.front(); } + void push(const value_type& x){ + c.push_back(x); + push_heap(c.begin(), c.end(), comp); + } + void pop(){ + pop_heap(c.begin(), c.end(), comp); + c.pop_back(); + } + }; + +} + +#pragma GCC visibility pop + +#endif + + diff --git a/external/arduino/stlarduino/queue.cpp b/external/arduino/stlarduino/queue.cpp new file mode 100644 index 000000000..356efeb13 --- /dev/null +++ b/external/arduino/stlarduino/queue.cpp @@ -0,0 +1,27 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include + + +namespace std{ + + + + +} diff --git a/external/arduino/stlarduino/serstream b/external/arduino/stlarduino/serstream new file mode 100644 index 000000000..54283fbb0 --- /dev/null +++ b/external/arduino/stlarduino/serstream @@ -0,0 +1,317 @@ +/* + * serstream + * Implementation of input/output streams for the Arduino serial classes + * + * Created on: 2 Jan 2011 + * Author: Andy Brown + * Modfied: Mike Matera + * + * http://andybrown.me.uk/ws/terms-and-conditions + */ + +#ifndef __810370EC_AD69_4ef7_91F5_B1AA16F14712 +#define __810370EC_AD69_4ef7_91F5_B1AA16F14712 + +#include + +#include +#include +#include +#include +#include +#include + +namespace std +{ + +/* + * basic_serialbuf implements an unbuffered basic_streambuf as a backing buffer + * for the IO classes + */ + + template + class basic_serialbuf : public basic_streambuf + { + public: + + /* + * Types used here + */ + + typedef charT char_type; + typedef typename traits::int_type int_type; + + /* + * constructor - wraps an existing Tserial class instance + */ + + explicit basic_serialbuf(Tserial& serial_,ios_base::openmode which_ = ios_base::in | ios_base::out) + : _serial(serial_) + { + basic_streambuf::openedFor = which_; + } + + /* + * Required to maintain the chain + */ + + virtual ~basic_serialbuf() { } + + /* + * Get a reference to the wrapped object + */ + + Tserial& serial() { return _serial; } + + protected: + + /* + * Get how many bytes available + */ + + virtual int showmanyc(){ + return _serial.available(); + } + + /* + * Read up to n chars + */ + + virtual streamsize xsgetn(char_type* c, streamsize n) { + + streamsize i = 0; + char_type data; + + while((data=_serial.read())!=-1 && i < n ) { + c[i] = data; + ++i; + } + return i; + } + + /* + * Write up to n chars + */ + + virtual streamsize xsputn(const char_type* s, streamsize n){ + + //_serial.print("[PUT "); + //_serial.print(n); + //_serial.print("] "); + for(streamsize i=0;i class basic_iserialstream + : public basic_istream + { + public: + + /* + * Types used here + */ + + typedef charT char_type; + + /* + * Constructor - default the serial object to #1 + * Mega users can explicity initialise with one of + * the others + */ + + explicit basic_iserialstream(Tserial& serial_) + : basic_ios(&sb), basic_istream(&sb), sb(serial_,ios_base::in) + { + } + + /* + * Required to maintain the chain + */ + + virtual ~basic_iserialstream() { } + + /* + * Initialise the baud rate + */ + + void begin(long speed_) { + sb.serial().begin(speed_); + sb.serial().println(__FUNCTION__); + } + + /* + * The wrapped object + */ + + private: + basic_serialbuf sb; + }; + + +/* + * Output stream + */ + + template class basic_oserialstream + : public basic_ostream + { + public: + + /* + * Types used here + */ + + typedef charT char_type; + + /* + * Constructor - default the serial object to #1 + * Mega users can explicity initialise with one of + * the others + */ + + explicit basic_oserialstream(Tserial& serial_) + : basic_ios(&sb), basic_ostream(&sb), sb(serial_,ios_base::out) + { + } + + /* + * Required to maintain the chain + */ + + virtual ~basic_oserialstream() { } + + /* + * Initialise the baud rate + */ + + void begin(long speed_) { + sb.serial().begin(speed_); + } + + /* + * The wrapped object + */ + + private: + basic_serialbuf sb; + }; + + +/* + * Input/output stream + */ + + template class basic_ioserialstream + : public basic_iostream + { + public: + + /* + * Types used here + */ + + typedef charT char_type; + + /* + * Constructor - default the serial object to #1 + * Mega users can explicity initialise with one of + * the others + */ + + explicit basic_ioserialstream(Tserial& serial_) + : basic_ios(&sb), basic_iostream(&sb), sb(serial_,ios_base::in | ios_base::out) + { + } + + /* + * Required to maintain the chain + */ + + virtual ~basic_ioserialstream(){ } + + /* + * Initialise the baud rate + */ + + void begin(long speed_) { + sb.serial().begin(speed_); + } + + /* + * The wrapped object + */ + + private: + basic_serialbuf sb; + }; + + +using ::Stream; + +template , class Tserial=Stream> class basic_serialbuf; +template , class Tserial=Stream> class basic_iserialstream; +template , class Tserial=Stream> class basic_oserialstream; + +typedef basic_iserialstream ihserialstream; +typedef basic_oserialstream ohserialstream; + +} + +#endif diff --git a/external/arduino/stlarduino/set b/external/arduino/stlarduino/set new file mode 100644 index 000000000..f376e4700 --- /dev/null +++ b/external/arduino/stlarduino/set @@ -0,0 +1,406 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + + + +#include +#include +#include +#include +#include +#include + +#ifndef __STD_HEADER_SET +#define __STD_HEADER_SET + +#pragma GCC visibility push(default) + +namespace std{ + + +template, class Allocator = allocator > class set; +template, class Allocator = allocator > class multiset; + + +/* This is the implementation for the set container. As noted above, it deviates + * from ISO spec by deriving from a base class in order to reduce code redundancy. + * More code could be reduced by convirting to virtual functions (thus allowing + * much of the erase and insert code to be duplicated), but that would deviate from + * the specifications too much to be worth the risk. + */ + + +//Implementation of set + + +template class _UCXXEXPORT set + : public __single_associative +{ + //Default value of allocator does not meet C++ standard specs, but it works for this library + //Deal with it +public: + + typedef __single_associative base; + typedef typename base::key_type key_type; + typedef typename base::value_type value_type; + typedef typename base::key_compare key_compare; + typedef typename base::allocator_type allocator_type; + typedef typename base::reference reference; + typedef typename base::const_reference const_reference; + typedef typename base::iterator iterator; + typedef typename base::const_iterator const_iterator; + typedef typename base::size_type size_type; + typedef typename base::difference_type difference_type; + typedef typename base::pointer pointer; + typedef typename base::const_pointer const_pointer; + typedef typename base::reverse_iterator reverse_iterator; + typedef typename base::const_reverse_iterator const_reverse_iterator; + +// using base::value_compare; + + static const key_type v_t_k(const value_type v){ + return v; + } + + explicit set(const Compare& comp = Compare(), const Allocator& al = Allocator()) + : base(comp, al, v_t_k) { } + + template set(InputIterator first, InputIterator last, + const Compare& comp = Compare(), const Allocator& al = Allocator()) + : base(first, last, comp, al, v_t_k) { } + + set(const set& x) : base(x) { } + ~set() { } + + using base::operator=; + using base::operator==; + using base::operator!=; + + using base::insert; + using base::erase; + + using base::begin; + using base::end; + using base::rbegin; + using base::rend; + + using base::empty; + using base::size; + using base::max_size; + + + using base::find; + using base::count; + using base::lower_bound; + using base::upper_bound; + using base::equal_range; + +protected: + +}; + + +//Implementation of multiset + + +template class _UCXXEXPORT multiset + : public __multi_associative +{ + //Default value of allocator does not meet C++ standard specs, but it works for this library + //Deal with it +public: + + typedef __multi_associative base; + typedef typename base::key_type key_type; + typedef typename base::value_type value_type; + typedef typename base::key_compare key_compare; + typedef typename base::allocator_type allocator_type; + typedef typename base::reference reference; + typedef typename base::const_reference const_reference; + typedef typename base::iterator iterator; + typedef typename base::const_iterator const_iterator; + typedef typename base::size_type size_type; + typedef typename base::difference_type difference_type; + typedef typename base::pointer pointer; + typedef typename base::const_pointer const_pointer; + typedef typename base::reverse_iterator reverse_iterator; + typedef typename base::const_reverse_iterator const_reverse_iterator; + + static const key_type v_t_k(const value_type v){ + return v; + } + + explicit multiset(const Compare& comp = Compare(), const Allocator& al = Allocator()) + : base(comp, al, v_t_k) { } + + template multiset(InputIterator first, InputIterator last, + const Compare& comp = Compare(), const Allocator& al = Allocator()) + : base(first, last, comp, al, v_t_k) { } + + + multiset(const multiset& x) : base(x) { } + ~multiset() { } + + using base::operator=; + using base::operator==; + using base::operator!=; + + using base::insert; + using base::erase; + + using base::begin; + using base::end; + using base::rbegin; + using base::rend; + + using base::empty; + using base::size; + using base::max_size; + + using base::find; + using base::count; + using base::lower_bound; + using base::upper_bound; + using base::equal_range; + + +protected: + +}; + + +/* Non-member functions. These are at the end because they are not associated with any + particular class. These will be implemented as I figure out exactly what all of + them are supposed to do, and I have time. + */ + + template _UCXXEXPORT bool operator< + (const set& x, const set& y) + { + typename set::const_iterator first1 = x.begin(); + typename set::const_iterator first2 = y.begin(); + typename set::const_iterator last1 = x.end(); + typename set::const_iterator last2 = y.end(); + + while(first1 != last1 && first2 != last2){ + if( *first1 < *first2 ){ + return true; + } + if( *first2 < *first1 ){ + return false; + } + ++first1; + ++first2; + } + return first1==last1 && first2 != last2; + } + + template _UCXXEXPORT bool operator> + (const set& x, const set& y) + { + typename set::const_iterator first1 = x.begin(); + typename set::const_iterator first2 = y.begin(); + typename set::const_iterator last1 = x.end(); + typename set::const_iterator last2 = y.end(); + + while(first1 != last1 && first2 != last2){ + if( *first1 > *first2 ){ + return true; + } + if( *first2 > *first1 ){ + return false; + } + ++first1; + ++first2; + } + return first1!=last1 && first2 == last2; + } + + template _UCXXEXPORT bool operator>= + (const set& x, const set& y) + { + typename set::const_iterator first1 = x.begin(); + typename set::const_iterator first2 = y.begin(); + typename set::const_iterator last1 = x.end(); + typename set::const_iterator last2 = y.end(); + + while(first1 != last1 && first2 != last2){ + if( *first1 > *first2 ){ + return true; + } + if( *first2 > *first1 ){ + return false; + } + ++first1; + ++first2; + } + return first1!=last1; + } + + template _UCXXEXPORT bool operator<= + (const set& x, const set& y) + { + typename set::const_iterator first1 = x.begin(); + typename set::const_iterator first2 = y.begin(); + typename set::const_iterator last1 = x.end(); + typename set::const_iterator last2 = y.end(); + + while(first1 != last1 && first2 != last2){ + if( *first1 < *first2 ){ + return true; + } + if( *first2 < *first1 ){ + return false; + } + ++first1; + ++first2; + } + return first2!=last2; + } + template _UCXXEXPORT void swap + (set& x, set& y) + { + x.swap(y); + } + + + template _UCXXEXPORT bool operator== + (const multiset& x, const multiset& y) + { + if(x.data == y.data){ + return true; + } + return false; + } + + template _UCXXEXPORT bool operator< + (const multiset& x, const multiset& y) + { + typename multiset::const_iterator first1 = x.begin(); + typename multiset::const_iterator first2 = y.begin(); + typename multiset::const_iterator last1 = x.end(); + typename multiset::const_iterator last2 = y.end(); + + while(first1 != last1 && first2 != last2){ + if( *first1 < *first2 ){ + return true; + } + if( *first2 < *first1 ){ + return false; + } + ++first1; + ++first2; + } + return first1==last1 && first2 != last2; + } + + template _UCXXEXPORT bool operator!= + (const multiset& x, const multiset& y) + { + typename multiset::const_iterator first1 = x.begin(); + typename multiset::const_iterator first2 = y.begin(); + typename multiset::const_iterator last1 = x.end(); + typename multiset::const_iterator last2 = y.end(); + + while(first1 != last1 && first2 != last2){ + if( *first1 != *first2 ){ + return true; + } + ++first1; + ++first2; + } + return first1!=last1 || first2 != last2; + } + + template _UCXXEXPORT bool operator> + (const multiset& x, const multiset& y) + { + typename multiset::const_iterator first1 = x.begin(); + typename multiset::const_iterator first2 = y.begin(); + typename multiset::const_iterator last1 = x.end(); + typename multiset::const_iterator last2 = y.end(); + + while(first1 != last1 && first2 != last2){ + if( *first1 > *first2 ){ + return true; + } + if( *first2 > *first1 ){ + return false; + } + ++first1; + ++first2; + } + return first1!=last1 && first2 == last2; + } + + template _UCXXEXPORT bool operator>= + (const multiset& x, const multiset& y) + { + typename multiset::const_iterator first1 = x.begin(); + typename multiset::const_iterator first2 = y.begin(); + typename multiset::const_iterator last1 = x.end(); + typename multiset::const_iterator last2 = y.end(); + + while(first1 != last1 && first2 != last2){ + if( *first1 > *first2 ){ + return true; + } + if( *first2 > *first1 ){ + return false; + } + ++first1; + ++first2; + } + return first1!=last1; + } + + template _UCXXEXPORT bool operator<= + (const multiset& x, const multiset& y) + { + typename multiset::const_iterator first1 = x.begin(); + typename multiset::const_iterator first2 = y.begin(); + typename multiset::const_iterator last1 = x.end(); + typename multiset::const_iterator last2 = y.end(); + + while(first1 != last1 && first2 != last2){ + if( *first1 < *first2 ){ + return true; + } + if( *first2 < *first1 ){ + return false; + } + ++first1; + ++first2; + } + return first2!=last2; + } + + template _UCXXEXPORT void swap + (multiset& x, multiset& y) + { + x.swap(y); + } + + + +} + +#pragma GCC visibility pop + +#endif + diff --git a/external/arduino/stlarduino/set.cpp b/external/arduino/stlarduino/set.cpp new file mode 100644 index 000000000..61ec56a71 --- /dev/null +++ b/external/arduino/stlarduino/set.cpp @@ -0,0 +1,33 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*/ + +#include + +namespace std{ + + + + + + + + + + +} diff --git a/external/arduino/stlarduino/sstream b/external/arduino/stlarduino/sstream new file mode 100644 index 000000000..296985374 --- /dev/null +++ b/external/arduino/stlarduino/sstream @@ -0,0 +1,384 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include + +#ifndef HEADER_STD_SSTREAM +#define HEADER_STD_SSTREAM 1 + +#include +#include +#include +#include +#include +#include + +#pragma GCC visibility push(default) + +namespace std{ + + template + class _UCXXEXPORT basic_stringbuf : public basic_streambuf + { + public: + typedef charT char_type; + typedef typename traits::int_type int_type; + typedef typename traits::pos_type pos_type; + typedef typename traits::off_type off_type; + typedef typename Allocator::size_type size_type; + + explicit _UCXXEXPORT basic_stringbuf(ios_base::openmode which = ios_base::in | ios_base::out) + : data(), ielement(0), oelement(0) + { + basic_streambuf::openedFor = which; + } + + explicit _UCXXEXPORT basic_stringbuf(const basic_string& str, + ios_base::openmode which = ios_base::in | ios_base::out) + : data(str), ielement(0), oelement(0) + { + if(which & ios_base::ate){ + oelement = data.length(); + } + basic_streambuf::openedFor = which; + } + + virtual _UCXXEXPORT ~basic_stringbuf() { } + + _UCXXEXPORT basic_string str() const{ + return data; + } + + _UCXXEXPORT void str(const basic_string& s){ + data = s; + ielement = 0; + if(basic_streambuf::openedFor & ios_base::ate){ + oelement = data.length(); + }else{ + oelement = 0; + } + } + + protected: + virtual _UCXXEXPORT int sync(){ + return 0; + } + virtual _UCXXEXPORT int_type underflow(){ + if(ielement >= data.length()){ + return traits::eof(); + } + return traits::to_int_type(data[ielement]); + } + + virtual _UCXXEXPORT int_type uflow(){ + int_type retval = underflow(); + if(retval != traits::eof()){ + ++ielement; + } + return retval; + } + + virtual _UCXXEXPORT int_type pbackfail(int_type c = traits::eof()){ + //Error possibilities + if(ielement == 0){ + return traits::eof(); + } + if(ielement > data.length()){ + ielement = data.length(); + return traits::eof(); + } + //eof passed in + if(traits::eq_int_type(c,traits::eof())==true){ + --ielement; + return traits::not_eof(c); + } + if(traits::eq(traits::to_char_type(c),data[ielement-1]) == true){ + --ielement; + return c; + } + if(basic_streambuf::openedFor & ios_base::out){ + --ielement; + data[ielement] = c; + return c; + } + return traits::eof(); + } + + virtual _UCXXEXPORT int showmanyc(){ + return data.length() - ielement; + } + virtual _UCXXEXPORT streamsize xsgetn(char_type* c, streamsize n){ + streamsize i = 0; + while(ielement < data.length() && i < n ){ + c[i] = data[ielement]; + ++i; + ++ielement; + } + return i; + } + + virtual _UCXXEXPORT int_type overflow (int_type c = traits::eof()){ + //Nothing to do + if(traits::eq_int_type(c,traits::eof())){ + return traits::not_eof(c); + } + + //Actually add character, if possible + if(basic_streambuf::openedFor & ios_base::out){ + if(oelement >= data.length()){ + data.push_back(c); + }else{ + data[oelement] = c; + } + ++oelement; + return c; + } + //Not possible + return traits::eof(); + } + + virtual _UCXXEXPORT basic_streambuf* setbuf(charT*, streamsize){ + //This function does nothing + return this; + } + + virtual _UCXXEXPORT streamsize xsputn(const char_type* s, streamsize n){ + data.replace(oelement, n, s, n); + oelement += n; + return n; + } + + virtual _UCXXEXPORT pos_type seekoff(off_type off, ios_base::seekdir way, + ios_base::openmode which = ios_base::in | ios_base::out) + { + //Test for invalid option + if( (which & ios_base::in) && (which & ios_base::out) && (way == ios_base::cur)){ + return -1; + } + + //Calculate new location + size_type newpos = 0; + + if(way == ios_base::beg){ + newpos = off; + }else if(way == ios_base::cur){ + if(which & ios_base::out){ + newpos = data.length() + off; + } + if(which & ios_base::in){ + newpos = ielement + off; + } + + }else{ + newpos = data.length() + off; + } + + //Test for error conditions + if(newpos > data.length()){ + return -1; + } + + //Shuffle pointers + + if(which & ios_base::in){ + ielement = newpos; + } + if(which & ios_base::out){ + data.resize(newpos); + if(ielement > data.length()){ + ielement = data.length(); + } + } + + return newpos; + } + + virtual _UCXXEXPORT pos_type seekpos(pos_type sp, + ios_base::openmode which = ios_base::in | ios_base::out) + { + return seekoff(sp, ios_base::beg, which); + } + + basic_string data; + size_type ielement; + size_type oelement; + }; + + + template class _UCXXEXPORT basic_istringstream + : public basic_istream + { + public: + typedef charT char_type; + typedef typename traits::int_type int_type; + typedef typename traits::pos_type pos_type; + typedef typename traits::off_type off_type; + + + explicit _UCXXEXPORT basic_istringstream(ios_base::openmode m = ios_base::in) + : basic_ios(&sb), basic_istream(&sb), sb(m) + { + } + explicit _UCXXEXPORT basic_istringstream( const basic_string& str, + ios_base::openmode which = ios_base::in) + : basic_ios(&sb), basic_istream(&sb), sb(str, which) + { + } + virtual _UCXXEXPORT ~basic_istringstream() { } + _UCXXEXPORT basic_stringbuf* rdbuf() const{ + return &sb; + } + _UCXXEXPORT basic_string str() const{ + return sb.str(); + } + _UCXXEXPORT void str(const basic_string& s){ + sb.str(s); + basic_istream::clear(); + } + private: + basic_stringbuf sb; + }; + + + template class _UCXXEXPORT basic_ostringstream + : public basic_ostream + { + public: + + typedef charT char_type; + typedef typename traits::int_type int_type; + typedef typename traits::pos_type pos_type; + typedef typename traits::off_type off_type; + + explicit _UCXXEXPORT basic_ostringstream(ios_base::openmode m = ios_base::out) + : basic_ios(&sb), basic_ostream(&sb), sb(m) + { + } + explicit _UCXXEXPORT basic_ostringstream(const basic_string& str, + ios_base::openmode which = ios_base::out) + : basic_ios(&sb), basic_ostream(&sb), sb(str, which) + { + } + virtual _UCXXEXPORT ~basic_ostringstream() { } + + _UCXXEXPORT basic_stringbuf* rdbuf() const{ + return &sb; + } + _UCXXEXPORT basic_string str() const{ + return sb.str(); + } + _UCXXEXPORT void str(const basic_string& s){ + sb.str(s); + basic_ostream::clear(); + } + private: + basic_stringbuf sb; + }; + + + template class _UCXXEXPORT basic_stringstream + : public basic_iostream + { + public: + + typedef charT char_type; + typedef typename traits::int_type int_type; + typedef typename traits::pos_type pos_type; + typedef typename traits::off_type off_type; + + explicit _UCXXEXPORT basic_stringstream(ios_base::openmode which = ios_base::out|ios_base::in) + : basic_ios(&sb), basic_iostream(&sb), sb(which) + { + } + + explicit _UCXXEXPORT basic_stringstream(const basic_string& str, + ios_base::openmode which = ios_base::out|ios_base::in) + : basic_ios(&sb), basic_iostream(&sb), sb(str, which) + { + } + virtual _UCXXEXPORT ~basic_stringstream(){ } + + _UCXXEXPORT basic_stringbuf* rdbuf(){ + return &sb; + } + _UCXXEXPORT basic_string str() const{ + return sb.str(); + } + _UCXXEXPORT void str(const basic_string& s){ + sb.str(s); + basic_iostream::clear(); + } + private: + basic_stringbuf sb; + }; + +#ifdef __UCLIBCXX_EXPAND_SSTREAM_CHAR__ +#ifndef __UCLIBCXX_COMPILE_SSTREAM__ + +#ifdef __UCLIBCXX_EXPAND_CONSTRUCTORS_DESTRUCTORS__ + + template <> _UCXXEXPORT basic_stringbuf, allocator >:: + basic_stringbuf(ios_base::openmode which); + template <> _UCXXEXPORT basic_stringbuf, allocator >::~basic_stringbuf(); + +#endif // __UCLIBCXX_EXPAND_CONSTRUCTORS_DESTRUCTORS__ + + template <> _UCXXEXPORT basic_string, allocator > + basic_stringbuf, allocator >::str() const; + + template <> _UCXXEXPORT basic_stringbuf, allocator >::int_type + basic_stringbuf, allocator >:: + pbackfail(basic_stringbuf, allocator >::int_type c); + + template <> _UCXXEXPORT basic_stringbuf, allocator >::pos_type + basic_stringbuf, allocator >:: + seekoff (basic_stringbuf, allocator >::off_type off, + ios_base::seekdir way, + ios_base::openmode which + ); + + template <> _UCXXEXPORT basic_stringbuf, allocator >::int_type + basic_stringbuf, allocator >:: + overflow (basic_stringbuf, allocator >::int_type c); + + template <> _UCXXEXPORT basic_stringbuf, allocator >::int_type + basic_stringbuf, allocator >::underflow (); + + template <> _UCXXEXPORT streamsize basic_stringbuf, allocator >:: + xsputn(const char* s, streamsize n); + +#ifdef __UCLIBCXX_EXPAND_CONSTRUCTORS_DESTRUCTORS__ + + template <> _UCXXEXPORT basic_stringstream, allocator >:: + basic_stringstream(ios_base::openmode which); + template <> _UCXXEXPORT basic_stringstream, allocator >::~basic_stringstream(); + template <> _UCXXEXPORT basic_istringstream, allocator >::~basic_istringstream(); + template <> _UCXXEXPORT basic_ostringstream, allocator >::~basic_ostringstream(); + +#endif //__UCLIBCXX_EXPAND_CONSTRUCTORS_DESTRUCTORS__ + +#endif +#endif + +#pragma GCC visibility pop + +} + + +#endif diff --git a/external/arduino/stlarduino/sstream.cpp b/external/arduino/stlarduino/sstream.cpp new file mode 100644 index 000000000..e712b6764 --- /dev/null +++ b/external/arduino/stlarduino/sstream.cpp @@ -0,0 +1,59 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#define __UCLIBCXX_COMPILE_SSTREAM__ 1 + +#include + +namespace std{ + +#ifdef __UCLIBCXX_EXPAND_SSTREAM_CHAR__ + + typedef char_traits tr_ch; + typedef basic_stringbuf > char_stringbuf; + +#ifdef __UCLIBCXX_EXPAND_CONSTRUCTORS_DESTRUCTORS__ + + template _UCXXEXPORT char_stringbuf::basic_stringbuf(ios_base::openmode which); + template _UCXXEXPORT char_stringbuf::~basic_stringbuf(); + +#endif //__UCLIBCXX_EXPAND_CONSTRUCTORS_DESTRUCTORS__ + + template _UCXXEXPORT basic_string, allocator > char_stringbuf::str() const; + template _UCXXEXPORT char_stringbuf::int_type char_stringbuf::pbackfail(char_stringbuf::int_type c); + template _UCXXEXPORT char_stringbuf::int_type char_stringbuf::overflow(char_stringbuf::int_type c); + template _UCXXEXPORT char_stringbuf::pos_type + char_stringbuf::seekoff(char_stringbuf::off_type, ios_base::seekdir, ios_base::openmode); + template _UCXXEXPORT char_stringbuf::int_type char_stringbuf::underflow (); + template _UCXXEXPORT streamsize char_stringbuf::xsputn(const char* s, streamsize n); + +#ifdef __UCLIBCXX_EXPAND_CONSTRUCTORS_DESTRUCTORS__ + + template _UCXXEXPORT basic_stringstream >::basic_stringstream(ios_base::openmode which); + template _UCXXEXPORT basic_istringstream >::~basic_istringstream(); + template _UCXXEXPORT basic_ostringstream >::~basic_ostringstream(); + template _UCXXEXPORT basic_stringstream >::~basic_stringstream(); + +#endif //__UCLIBCXX_EXPAND_CONSTRUCTORS_DESTRUCTORS__ + +#endif + +} + + diff --git a/external/arduino/stlarduino/stack b/external/arduino/stlarduino/stack new file mode 100644 index 000000000..d4861b3a4 --- /dev/null +++ b/external/arduino/stlarduino/stack @@ -0,0 +1,84 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + This file is part of the uClibc++ Library. + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include +#include + +#ifndef __HEADER_STD_STACK +#define __HEADER_STD_STACK 1 + +#pragma GCC visibility push(default) + +namespace std{ + + template > class _UCXXEXPORT stack{ + protected: + Container c; + + public: + typedef typename Container::value_type value_type; + typedef typename Container::size_type size_type; + typedef Container container_type; + + explicit stack(const Container& a = Container()) : c(a) { }; + bool empty() const { return c.empty(); } + size_type size() const { return c.size(); } + value_type& top() { return c.back(); } + const value_type& top() const { return c.back(); } + void push(const value_type& x) { c.push_back(x); } + void pop() { c.pop_back(); } + + bool operator==(const stack &x) const{ + return x.c == c; + } + + }; + + + template _UCXXEXPORT bool + operator< (const stack& x, const stack& y) + { + return (x.c < y.c); + } + template _UCXXEXPORT bool + operator!=(const stack& x, const stack& y) + { + return (x.c != y.c); + } + template _UCXXEXPORT bool + operator> (const stack& x, const stack& y) + { + return (x.c > y.c); + } + template _UCXXEXPORT bool + operator>=(const stack& x, const stack& y) + { + return (x.c >= y.c); + } + template _UCXXEXPORT bool + operator<=(const stack& x, const stack& y) + { + return (x.c <= y.c); + } + +} + +#pragma GCC visibility pop + +#endif + + diff --git a/external/arduino/stlarduino/stack.cpp b/external/arduino/stlarduino/stack.cpp new file mode 100644 index 000000000..53a21bba5 --- /dev/null +++ b/external/arduino/stlarduino/stack.cpp @@ -0,0 +1,27 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include + + +namespace std{ + + + + +} diff --git a/external/arduino/stlarduino/stdexcept b/external/arduino/stlarduino/stdexcept new file mode 100644 index 000000000..7557f24c4 --- /dev/null +++ b/external/arduino/stlarduino/stdexcept @@ -0,0 +1,117 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include +#include +#include + +#ifndef HEADER_STD_EXCEPTIONS +#define HEADER_STD_EXCEPTIONS 1 + +//Don't include support if not needed +#ifdef __UCLIBCXX_EXCEPTION_SUPPORT__ + +#pragma GCC visibility push(default) + +namespace std{ + +//typedef basic_string string; + +class _UCXXEXPORT logic_error : public exception { +protected: + string mstring; +public: + logic_error() throw(); + logic_error(const string& what_arg); + + virtual ~logic_error() throw() {} + virtual const char * what() const throw(); + +}; + +class _UCXXEXPORT domain_error : public logic_error { +public: + domain_error() : logic_error() {} + domain_error(const string& what_arg) : logic_error(what_arg) {} + virtual ~domain_error() throw() {} +}; + +class _UCXXEXPORT invalid_argument : public logic_error { +public: + invalid_argument() : logic_error(){} + invalid_argument(const string& what_arg) : logic_error(what_arg){} + virtual ~invalid_argument() throw() {} +}; + +class _UCXXEXPORT length_error : public logic_error { +public: + length_error() : logic_error(){} + length_error(const string& what_arg) : logic_error(what_arg){} + virtual ~length_error() throw() {} +}; + +class _UCXXEXPORT out_of_range : public logic_error{ +public: + out_of_range(); + out_of_range(const string & what_arg); + virtual ~out_of_range() throw() {} + +}; + +class _UCXXEXPORT runtime_error : public exception{ +protected: + string mstring; +public: + runtime_error(); + runtime_error(const string& what_arg); + + virtual ~runtime_error() throw() {} + virtual const char * what() const throw(); +}; + +class _UCXXEXPORT range_error : public runtime_error{ +public: + range_error() : runtime_error(){} + range_error(const string& what_arg) : runtime_error(what_arg) {} + virtual ~range_error() throw(){ } +}; + + +class _UCXXEXPORT overflow_error : public runtime_error{ +public: + overflow_error() : runtime_error(){} + overflow_error(const string& what_arg) : runtime_error(what_arg) {} + virtual ~overflow_error() throw(){} +}; + +class _UCXXEXPORT underflow_error : public runtime_error{ +public: + underflow_error() : runtime_error(){} + underflow_error(const string& what_arg) : runtime_error(what_arg) {} + virtual ~underflow_error() throw(){} +}; + + + +} + +#pragma GCC visibility pop + +#endif +#endif diff --git a/external/arduino/stlarduino/stdexcept.cpp b/external/arduino/stlarduino/stdexcept.cpp new file mode 100644 index 000000000..90dccc7a4 --- /dev/null +++ b/external/arduino/stlarduino/stdexcept.cpp @@ -0,0 +1,63 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include +#include + +#ifdef __UCLIBCXX_EXCEPTION_SUPPORT__ + +namespace std{ + + _UCXXEXPORT logic_error::logic_error() throw() : mstring(){ + + } + + _UCXXEXPORT logic_error::logic_error(const string& what_arg) : mstring(what_arg){ + + } + + _UCXXEXPORT const char * logic_error::what() const throw(){ + return mstring.c_str(); + } + + + _UCXXEXPORT out_of_range::out_of_range() : logic_error(){ + + } + + _UCXXEXPORT out_of_range::out_of_range(const string & what_arg) : logic_error(what_arg) { + + } + + _UCXXEXPORT runtime_error::runtime_error() : mstring(){ + + } + + _UCXXEXPORT runtime_error::runtime_error(const string& what_arg) : mstring(what_arg){ + + } + + _UCXXEXPORT const char * runtime_error::what() const throw(){ + return mstring.c_str(); + } + +} + +#endif + diff --git a/external/arduino/stlarduino/streambuf b/external/arduino/stlarduino/streambuf new file mode 100644 index 000000000..0daa388f0 --- /dev/null +++ b/external/arduino/stlarduino/streambuf @@ -0,0 +1,329 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include +#include +#include +#include + +#ifndef HEADER_STD_STREAMBUF +#define HEADER_STD_STREAMBUF 1 + +#include + +#pragma GCC visibility push(default) + +namespace std{ + + template class _UCXXEXPORT basic_streambuf{ + public: +#ifdef __UCLIBCXX_SUPPORT_CDIR__ + friend ios_base::Init::Init(); +#endif + // Types: + typedef charT char_type; + typedef typename traits::int_type int_type; + typedef typename traits::pos_type pos_type; + typedef typename traits::off_type off_type; + typedef traits traits_type; + + virtual ~basic_streambuf(); + + locale pubimbue(const locale &loc); + + locale getloc() const{ + return myLocale; + } + + basic_streambuf* pubsetbuf(char_type* s, streamsize n){ + return setbuf(s,n); + } + pos_type pubseekoff(off_type off, + typename ios_base::seekdir way, + ios_base::openmode which = ios_base::in | + ios_base::out + ) + { + return seekoff(off,way,which); + } + pos_type pubseekpos(pos_type sp, ios_base::openmode which = ios_base::in | ios_base::out){ + return seekpos(sp,which); + } + int pubsync(){ + return sync(); + } + + streamsize in_avail(); + + int_type snextc(); + + int_type sbumpc(); + + int_type sgetc(); + + streamsize sgetn(char_type* s, streamsize n){ + return xsgetn(s,n); + } + + int_type sputbackc(char_type c); + + int_type sungetc(); + + int_type sputc(char_type c); + + streamsize sputn(const char_type* s, streamsize n){ + if(openedFor & ios_base::app){ + seekoff(0, ios_base::end, ios_base::out); + } + return xsputn(s, n); + } + + protected: + locale myLocale; + //Pointers for the "get" buffers + charT * mgbeg; + charT * mgnext; + charT * mgend; + + //Pointers for the "put" buffers + charT * mpbeg; + charT * mpnext; + charT * mpend; + + //In the event of null buffers Lets us know what the buffer is opened for + ios_base::openmode openedFor; + + basic_streambuf(); + + basic_streambuf(const basic_streambuf > &) + : myLocale(), + mgbeg(0), mgnext(0), mgend(0), mpbeg(0), mpnext(0), mpend(0), + openedFor(0) + { } + basic_streambuf > & operator=(const basic_streambuf > &){ + return *this; + } + + char_type* eback() const{ + return mgbeg; + } + char_type* gptr() const{ + return mgnext; + } + char_type* egptr() const{ + return mgend; + } + void gbump(int n){ + mgnext+=n; + } + void setg(char_type* gbeg, char_type* gnext, char_type* gend){ + mgbeg = gbeg; + mgnext = gnext; + mgend = gend; + } + + char_type* pbase() const{ + return mpbeg; + } + char_type* pptr() const{ + return mpnext; + } + char_type* epptr() const{ + return mpend; + } + void pbump(int n){ + mpnext+=n; + } + void setp(char_type* pbeg, char_type* pend){ + mpbeg = pbeg; + mpnext = pbeg; + mpend = pend; + } + + virtual void imbue(const locale &loc){ + myLocale = loc; + } + + //Virtual functions which we will not implement + + virtual basic_streambuf* setbuf(char_type* , streamsize){ + return 0; + } + virtual pos_type seekoff(off_type , ios_base::seekdir, + ios_base::openmode = ios_base::in | ios_base::out) + { + return 0; + } + virtual pos_type seekpos(pos_type , ios_base::openmode = ios_base::in | ios_base::out){ + return 0; + } + virtual int sync(){ + return 0; + } + + virtual int showmanyc(){ + return 0; + } + virtual streamsize xsgetn(char_type* , streamsize ){ + return 0; + } + virtual int_type underflow(){ + return traits_type::eof(); + } + virtual int_type uflow(){ + int_type ret = underflow(); + if (!traits_type::eq_int_type(ret, traits_type::eof())) + gbump(1); + return ret; + } + + virtual int_type pbackfail(int_type c = traits::eof()){ + return c; + } + virtual streamsize xsputn(const char_type* c, streamsize n){ + //This function is designed to be replaced by subclasses + for(streamsize i = 0; i< n; ++i){ + if(sputc(c[i]) == traits::eof()){ + return i; + } + } + return n; + } + virtual int_type overflow (int_type c = traits::eof()){ + return c; + } + }; + + typedef basic_streambuf streambuf; +#ifdef __UCLIBCXX_HAS_WCHAR__ + typedef basic_streambuf wstreambuf; +#endif + + +//Definitions put below to allow for easy expansion of code + + template basic_streambuf::~basic_streambuf(){ } + + template locale basic_streambuf::pubimbue(const locale &loc){ + locale temp = myLocale; + myLocale = loc; + return temp; + } + + template streamsize basic_streambuf::in_avail(){ + if(mgend !=0 && mgnext !=0){ + return mgend - mgnext; + } + return showmanyc(); + } + + template typename basic_streambuf::int_type basic_streambuf::sbumpc(){ + if(mgbeg == 0 || mgnext == mgend){ + return uflow(); + } + int_type retval = T::to_int_type(*gptr()); + gbump(1); + return retval; + } + + template typename basic_streambuf::int_type basic_streambuf::snextc(){ + if(sbumpc() == T::eof() ){ + return T::eof() ; + } + return sgetc(); + } + + template typename basic_streambuf::int_type basic_streambuf::sgetc(){ + if(mgbeg == 0 || mgnext == mgend){ + return underflow(); + } + return T::to_int_type(*gptr()); + } + + template typename basic_streambuf::int_type basic_streambuf::sputbackc(char_type c){ + if(mgbeg == 0 || mgnext == mgbeg || !T::eq(c, gptr()[-1] )){ + return pbackfail(T::to_int_type(c)); + } + gbump(-1); + return T::to_int_type(*gptr()); + } + + template typename basic_streambuf::int_type basic_streambuf::sungetc(){ + if(mgbeg == 0 || mgnext == mgbeg){ + return ios_base::failbit; + } + gbump(-1); + return T::to_int_type(*gptr()); + } + + template typename basic_streambuf::int_type basic_streambuf::sputc(char_type c){ + if(openedFor & ios_base::app){ + seekoff(0, ios_base::end, ios_base::out); + } + if(mpnext < mpend){ + *mpnext = c; + ++mpnext; + }else{ + return overflow( T::to_int_type(c) ); + } + return T::to_int_type(c); + } + + template basic_streambuf::basic_streambuf() + : myLocale(), + mgbeg(0), mgnext(0), mgend(0), mpbeg(0), mpnext(0), mpend(0), + openedFor(0) + { } + + + + + + +#ifdef __UCLIBCXX_EXPAND_STREAMBUF_CHAR__ +#ifndef __UCLIBCXX_COMPILE_STREAMBUF__ + +#ifdef __UCLIBCXX_EXPAND_CONSTRUCTORS_DESTRUCTORS__ + + template <> _UCXXEXPORT streambuf::basic_streambuf(); + template <> _UCXXEXPORT streambuf::~basic_streambuf(); + +#endif //__UCLIBCXX_EXPAND_CONSTRUCTORS_DESTRUCTORS__ + + template <> _UCXXEXPORT locale streambuf::pubimbue(const locale &loc); + template <> _UCXXEXPORT streamsize streambuf::in_avail(); + template <> _UCXXEXPORT streambuf::int_type streambuf::sbumpc(); + template <> _UCXXEXPORT streambuf::int_type streambuf::snextc(); + template <> _UCXXEXPORT streambuf::int_type streambuf::sgetc(); + template <> _UCXXEXPORT streambuf::int_type streambuf::sputbackc(char_type c); + template <> _UCXXEXPORT streambuf::int_type streambuf::sungetc(); + template <> _UCXXEXPORT streambuf::int_type streambuf::sputc(char_type c); + +#endif +#endif + + + + + +} + +#pragma GCC visibility pop + +#endif diff --git a/external/arduino/stlarduino/streambuf.cpp b/external/arduino/stlarduino/streambuf.cpp new file mode 100644 index 000000000..541732459 --- /dev/null +++ b/external/arduino/stlarduino/streambuf.cpp @@ -0,0 +1,49 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#define __UCLIBCXX_COMPILE_STREAMBUF__ 1 + +#include + +namespace std{ + +#ifdef __UCLIBCXX_EXPAND_STREAMBUF_CHAR__ + +#ifdef __UCLIBCXX_EXPAND_CONSTRUCTORS_DESTRUCTORS__ + + template _UCXXEXPORT streambuf::basic_streambuf(); + template _UCXXEXPORT streambuf::~basic_streambuf(); + +#endif + + template _UCXXEXPORT locale streambuf::pubimbue(const locale &loc); + template _UCXXEXPORT streamsize streambuf::in_avail(); + template _UCXXEXPORT streambuf::int_type streambuf::sbumpc(); + template _UCXXEXPORT streambuf::int_type streambuf::snextc(); + template _UCXXEXPORT streambuf::int_type streambuf::sgetc(); + template _UCXXEXPORT streambuf::int_type streambuf::sputbackc(char_type c); + template _UCXXEXPORT streambuf::int_type streambuf::sungetc(); + template _UCXXEXPORT streambuf::int_type streambuf::sputc(char_type c); + +#endif + + +} + + diff --git a/external/arduino/stlarduino/string b/external/arduino/stlarduino/string new file mode 100644 index 000000000..a7907157e --- /dev/null +++ b/external/arduino/stlarduino/string @@ -0,0 +1,1043 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include +#include +#include +#include +#include +#include + + +#ifdef __UCLIBCXX_HAS_WCHAR__ +#include +#include +#endif + +#ifndef __HEADER_STD_STRING +#define __HEADER_STD_STRING 1 + +#pragma GCC visibility push(default) + +namespace std{ + + //Basic basic_string + + template, class A = allocator > class basic_string; + + typedef basic_string string; + #ifdef __UCLIBCXX_HAS_WCHAR__ + typedef basic_string wstring; + #endif + + + +//template, class A = allocator > class _UCXXEXPORT basic_string +template class basic_string + : public std::vector +{ +public: + typedef Tr traits_type; + typedef typename Tr::char_type value_type; + typedef A allocator_type; + typedef typename A::size_type size_type; + typedef typename A::difference_type difference_type; + + typedef typename A::reference reference; + typedef typename A::const_reference const_reference; + typedef typename A::pointer pointer; + typedef typename A::const_pointer const_pointer; + + typedef typename vector::iterator iterator; + typedef typename vector::const_iterator const_iterator; + + typedef typename vector::reverse_iterator reverse_iterator; + typedef typename vector::const_reverse_iterator const_reverse_iterator; + + static const size_type npos = (size_type)-1; + + explicit _UCXXEXPORT basic_string(const A& al = A()) : vector(al){ return; } + + _UCXXEXPORT basic_string(const basic_string& str, size_type pos = 0, size_type n = npos, const A& al = A()); //Below + + _UCXXEXPORT basic_string(const Ch* s, size_type n, const A& al = A()) + : vector(al) + { + if(n == npos){ + __throw_out_of_range(); + } + if (*s > 0){ + resize(n); + Tr::copy(vector::data, s, vector::elements); + } + } + + _UCXXEXPORT basic_string(const Ch* s, const A& al = A()); //Below + + _UCXXEXPORT basic_string(size_type n, Ch c, const A& al = A()) + : vector(n, c, al) + { + } + + template _UCXXEXPORT basic_string(InputIterator begin, InputIterator end, const A& a = A()) + :vector(begin, end) + { + + } + + _UCXXEXPORT ~basic_string() { + return; + } + + _UCXXEXPORT basic_string& operator=(const basic_string& str); //Below + + _UCXXEXPORT basic_string& operator=(const Ch* s){ + vector::clear(); + if(s!=0){ + size_type len = Tr::length(s); + resize(len); + Tr::copy( vector::data, s, len); + } + return *this; + } + + _UCXXEXPORT basic_string& operator=(Ch c){ + vector::clear(); + vector::push_back(c); + return *this; + } + + inline _UCXXEXPORT size_type length() const { return vector::size(); } + + void _UCXXEXPORT resize(size_type n, Ch c = Ch()){ + vector::resize(n, c); + } + + _UCXXEXPORT basic_string& operator+=(const basic_string& str){ + return append(str); + } + + _UCXXEXPORT basic_string& operator+=(const Ch * s){ + return append(s); + } + + _UCXXEXPORT basic_string& operator+=(Ch c){ + vector::push_back(c); + return *this; + } + + _UCXXEXPORT basic_string& append(const basic_string& str){ + size_t temp = vector::elements; + resize(vector::elements + str.elements); + Tr::copy( vector::data + temp, str.vector::data, str.elements); + + return *this; + } + + _UCXXEXPORT basic_string& append(const basic_string& str, size_type pos, size_type n){ + if(pos > str.size()){ + __throw_out_of_range(); + } + + size_type rlen = str.elements - pos; + if(rlen > n){ + rlen = n; + } + if(vector::elements > npos - rlen){ + __throw_length_error(); + } + size_t temp = vector::elements; + resize(vector::elements + rlen); + Tr::copy( vector::data + temp, str.vector::data + pos, rlen); + return *this; + } + + _UCXXEXPORT basic_string& append(const Ch* s, size_type n){ + size_t temp = vector::elements; + resize(vector::elements + n); + Tr::copy( vector::data + temp, s, n); + return *this; + } + + _UCXXEXPORT basic_string& append(const Ch* s){ + size_type strLen = Tr::length(s); + size_t temp = vector::elements; + resize(vector::elements + strLen); + Tr::copy( vector::data + temp, s, strLen); + return *this; + } + + _UCXXEXPORT basic_string& append(size_type n, Ch c){ + vector::resize(vector::elements + n, c); + return *this; + } + + _UCXXEXPORT basic_string& assign(const basic_string& str){ + operator=(str); + return *this; + } + + _UCXXEXPORT basic_string& assign(const basic_string& str, size_type pos, size_type n){ + if(pos > str.elements){ + __throw_out_of_range(); + } + size_type r = str.elements - pos; + if(r > n){ + r = n; + } + resize(r); + Tr::copy(vector::data, str.vector::data + pos, r); + return *this; + } + + _UCXXEXPORT basic_string& assign(const Ch* s, size_type n){ + resize(n); + Tr::copy(vector::data, s, n); + return *this; + } + + _UCXXEXPORT basic_string& assign(const Ch* s){ + size_type len = Tr::length(s); + return assign(s, len); + } + + _UCXXEXPORT basic_string& assign(size_type n, Ch c){ + vector::clear(); + vector::resize(n, c); + return *this; + } + + template _UCXXEXPORT basic_string& assign(InputIterator first, InputIterator last){ + vector::resize(0, Ch()); + while (first != last){ + const Ch x = *first; + append(&x); + ++first; + } + return *this; + } + + _UCXXEXPORT basic_string& insert(size_type pos1, const basic_string& str, size_type pos2=0, size_type n=npos){ + if(pos1 > vector::elements || pos2 > str.elements){ + __throw_out_of_range(); + } + size_type r = str.elements - pos2; + if( r > n){ + r = n; + } + if(vector::elements > npos - r){ + __throw_length_error(); + } + size_type temp = vector::elements; + resize(vector::elements + r); + Tr::move(vector::data + pos1 + r, vector::data + pos1, temp - pos1); + Tr::copy(vector::data + pos1, str.vector::data + pos2, r); + return *this; + } + + _UCXXEXPORT basic_string& insert(size_type pos, const Ch* s, size_type n){ + if(pos > vector::elements){ + __throw_out_of_range(); + } + if(vector::elements > npos - n){ + __throw_length_error(); + } + size_type temp = vector::elements; + resize(vector::elements + n); + Tr::move(vector::data + pos + n, vector::data + pos, temp - pos); + Tr::copy(vector::data + pos, s, n); + return *this; + } + + inline _UCXXEXPORT basic_string& insert(size_type pos, const Ch* s){ + size_type len = Tr::length(s); + return insert(pos, s, len); + } + + _UCXXEXPORT basic_string& insert(size_type pos, size_type n, Ch c){ + if(pos > vector::elements){ + __throw_out_of_range(); + } + if(vector::elements > npos - n){ + __throw_length_error(); + } + size_type temp = vector::elements; + resize(vector::elements + n); + Tr::move(vector::data + pos + n, vector::data + pos, temp - pos); + Tr::assign(vector::data + pos, n, c); + return *this; + } + + using vector::insert; +// void insert(iterator p, size_type n, charT c); +// template void insert(iterator p, InputIterator first, InputIterator last); + + _UCXXEXPORT basic_string& erase(size_type pos = 0, size_type n = npos){ + size_type xlen = vector::elements - pos; + + if(xlen > n){ + xlen = n; + } + size_type temp = vector::elements; + + Tr::move(vector::data + pos, vector::data + pos + xlen, temp - pos - xlen); + resize(temp - xlen); + return *this; + } + + _UCXXEXPORT iterator erase(iterator position){ + if(position == vector::end()){ + return position; + } + + ++position; + + iterator temp = position; + + while(position != vector::end()){ + *(position-1) = *position; + ++position; + } + vector::pop_back(); + return temp; + } + + _UCXXEXPORT iterator erase(iterator first, iterator last){ + size_t count = last - first; + + iterator temp = last; + + while(last != vector::end()){ + *(last - count) = *last; + ++last; + } + + resize( vector::elements-count); + + return temp; + } + + _UCXXEXPORT basic_string& + replace(size_type pos1, size_type n1, const basic_string& str, size_type pos2=0, size_type n2=npos) + { + if(pos1 > vector::elements){ + __throw_out_of_range(); + } + size_type xlen = vector::elements - pos1; + if(xlen > n1){ + xlen = n1; + } + size_type rlen = str.elements - pos2; + if(rlen > n2){ + rlen = n2; + } + if((vector::elements - xlen) >= (npos - rlen)){ + __throw_length_error(); + } + + size_t temp = vector::elements; + + if(rlen > xlen){ //Only if making larger + resize(temp - xlen + rlen); + } + + //Final length = vector::elements - xlen + rlen + //Initial block is of size pos1 + //Block 2 is of size len + + Tr::move(vector::data + pos1 + rlen, vector::data + pos1 + xlen, temp - pos1 - xlen); + Tr::copy(vector::data + pos1, str.vector::data + pos2, rlen); + resize(temp - xlen + rlen); + return *this; + } + + _UCXXEXPORT basic_string& replace(size_type pos, size_type n1, const Ch* s, size_type n2){ + return replace(pos,n1,basic_string(s,n2)); + + } + + inline _UCXXEXPORT basic_string& replace(size_type pos, size_type n1, const Ch* s){ + return replace(pos,n1,basic_string(s)); + } + + _UCXXEXPORT basic_string& replace(size_type pos, size_type n1, size_type n2, Ch c){ + return replace(pos,n1,basic_string(n2,c)); + } +// _UCXXEXPORT basic_string& replace(iterator i1, iterator i2, const basic_string& str); +// _UCXXEXPORT basic_string& replace(iterator i1, iterator i2, const Ch* s, size_type n); +// _UCXXEXPORT basic_string& replace(iterator i1, iterator i2, const Ch* s); +// _UCXXEXPORT basic_string& replace(iterator i1, iterator i2, size_type n, Ch c); +/* template _UCXXEXPORT basic_string& replace(iterator i1, iterator i2, + InputIterator j1, InputIterator j2);*/ + + size_type _UCXXEXPORT copy(Ch* s, size_type n, size_type pos = 0) const{ + if(pos > vector::elements){ + __throw_out_of_range(); + } + size_type r = vector::elements - pos; + if(r > n){ + r = n; + } + Tr::copy(s, vector::data + pos, r); + return r; + } + + _UCXXEXPORT void swap(basic_string& s){ + //Data pointers + + vector::swap(s); + } + + _UCXXEXPORT const Ch* c_str() const{ + const_cast *>(this)->reserve(vector::elements+1); + vector::data[vector::elements] = 0; //Add 0 at the end + return vector::data; + } + + _UCXXEXPORT const Ch* data() const{ + return vector::data; + } + _UCXXEXPORT allocator_type get_allocator() const{ + return vector::a; + } + + _UCXXEXPORT size_type find (const basic_string& str, size_type pos = 0) const; //Below + + _UCXXEXPORT size_type find (const Ch* s, size_type pos, size_type n) const{ + return find(basic_string(s,n), pos); + } + _UCXXEXPORT size_type find (const Ch* s, size_type pos = 0) const{ + return find(basic_string(s), pos); + } + _UCXXEXPORT size_type find (Ch c, size_type pos = 0) const{ + for(size_type i = pos; i < length(); ++i){ + if(this->operator[](i) == c){ + return i; + } + } + return npos; + } + _UCXXEXPORT size_type rfind(const basic_string& str, size_type pos = npos) const{ + if(pos >= length()){ + pos = length(); + } + for(size_type i = pos; i > 0; --i){ + if(str == substr(i-1, str.length())){ + return i-1; + } + } + return npos; + } + _UCXXEXPORT size_type rfind(const Ch* s, size_type pos, size_type n) const{ + return rfind(basic_string(s,n),pos); + } + _UCXXEXPORT size_type rfind(const Ch* s, size_type pos = npos) const{ + return rfind(basic_string(s),pos); + } + _UCXXEXPORT size_type rfind(Ch c, size_type pos = npos) const{ + return rfind(basic_string(1,c),pos); + } + + _UCXXEXPORT size_type find_first_of(const basic_string& str, size_type pos = 0) const{ + for(size_type i = pos; i < length(); ++i){ + for(size_type j = 0; j < str.length() ; ++j){ + if( Tr::eq(str[j], this->operator[](i)) ){ + return i; + } + } + } + return npos; + } + + _UCXXEXPORT size_type find_first_of(const Ch* s, size_type pos, size_type n) const{ + return find_first_of(basic_string(s,n),pos); + } + _UCXXEXPORT size_type find_first_of(const Ch* s, size_type pos = 0) const{ + return find_first_of(basic_string(s),pos); + } + _UCXXEXPORT size_type find_first_of(Ch c, size_type pos = 0) const{ + for(size_type i = pos; i< length(); ++i){ + if( Tr::eq(this->operator[](i), c) ){ + return i; + } + } + return npos; + } + + _UCXXEXPORT size_type find_last_of (const basic_string& str, size_type pos = npos) const{ + if(pos > length()){ + pos = length(); + } + for(size_type i = pos; i >0 ; --i){ + for(size_type j = 0 ; j < str.length(); ++j){ + if( Tr::eq(this->operator[](i-1), str[j]) ){ + return i-1; + } + } + } + return npos; + } + _UCXXEXPORT size_type find_last_of (const Ch* s, size_type pos, size_type n) const{ + return find_last_of(basic_string(s,n),pos); + } + _UCXXEXPORT size_type find_last_of (const Ch* s, size_type pos = npos) const{ + return find_last_of(basic_string(s),pos); + } + _UCXXEXPORT size_type find_last_of (Ch c, size_type pos = npos) const{ + if(pos > length()){ + pos = length(); + } + for(size_type i = pos; i >0 ; --i){ + if( Tr::eq(this->operator[](i-1), c) ){ + return i-1; + } + } + return npos; + } + + _UCXXEXPORT size_type find_first_not_of(const basic_string& str, size_type pos = 0) const{ + bool foundCharacter; + for(size_type i = pos; i < length(); ++i){ + foundCharacter = false; + for(size_type j = 0; j < str.length() ; ++j){ + if( Tr::eq(str[j], this->operator[](i)) ){ + foundCharacter = true; + } + } + if(foundCharacter == false){ + return i; + } + } + return npos; + } + + _UCXXEXPORT size_type find_first_not_of(const Ch* s, size_type pos, size_type n) const{ + return find_first_not_of(basic_string(s,n),pos); + } + _UCXXEXPORT size_type find_first_not_of(const Ch* s, size_type pos = 0) const{ + return find_first_not_of(basic_string(s),pos); + } + _UCXXEXPORT size_type find_first_not_of(Ch c, size_type pos = 0) const{ + for(size_type i = pos; i < length() ; ++i){ + if(this->operator[](i) != c){ + return i; + } + } + return npos; + } + _UCXXEXPORT size_type find_last_not_of (const basic_string& str, size_type pos = npos) const{ + size_type xpos(length() - 1); + if(xpos > pos){ + xpos = pos; + } + + while(xpos != npos && npos != str.find_first_of(this->at(xpos))){ + --xpos; + } + + return xpos; + } + + _UCXXEXPORT size_type find_last_not_of (const Ch* s, size_type pos, size_type n) const{ + return find_last_not_of(basic_string(s,n),pos); + } + _UCXXEXPORT size_type find_last_not_of (const Ch* s, size_type pos = npos) const{ + return find_last_not_of(basic_string(s),pos); + } + _UCXXEXPORT size_type find_last_not_of (Ch c, size_type pos = npos) const{ + size_type xpos(length() - 1); + if(xpos > pos){ + xpos = pos; + } + while(xpos != npos && Tr::eq(this->at(xpos), c)){ + --xpos; + } + return xpos; + + } + + _UCXXEXPORT basic_string substr(size_type pos = 0, size_type n = npos) const; + + _UCXXEXPORT int compare(const basic_string& str) const{ + size_type rlen = vector::elements; + if(rlen > str.elements){ + rlen = str.elements; + } + int retval = Tr::compare(vector::data, str.vector::data, rlen); + if(retval == 0){ + if(vector::elements < str.elements){ + retval = -1; + } + if(vector::elements > str.elements){ + retval = 1; + } + } + return retval; + } + + _UCXXEXPORT int compare(size_type pos1, size_type n1, const basic_string& str, + size_type pos2=0, size_type n2=npos) const{ + size_type len1 = vector::elements - pos1; + if(len1 > n1){ + len1 = n1; + } + size_type len2 = str.vector::elements - pos2; + if(len2 > n2){ + len2 = n2; + } + size_type rlen = len1; + if(rlen > len2){ + rlen = len2; + } + int retval = Tr::compare(vector::data + pos1, str.vector::data + pos2, rlen); + if(retval == 0){ + if(len1 < len2){ + retval = -1; + } + if(len1 > len2){ + retval = 1; + } + } + return retval; + } + + _UCXXEXPORT int compare(const Ch* s) const{ + size_type slen = Tr::length(s); + size_type rlen = slen; + if(rlen > vector::elements){ + rlen=vector::elements; + } + int retval = Tr::compare(vector::data, s, rlen); + if(retval==0){ + if(vector::elements < slen){ + retval = -1; + } + if(vector::elements > slen){ + retval = 1; + } + } + return retval; + } + + _UCXXEXPORT int compare(size_type pos1, size_type n1, const Ch* s, size_type n2 = npos) const{ + size_type len1 = vector::elements - pos1; + if(len1 > n1){ + len1 = n1; + } + size_type slen = Tr::length(s); + size_type len2 = slen; + if(len2 > n2){ + len2 = n2; + } + size_type rlen = len1; + if(rlen > len2){ + rlen = len2; + } + int retval = Tr::compare(vector::data + pos1, s, rlen); + if(retval == 0){ + if(len1 < len2){ + retval = -1; + } + if(len1 > len2){ + retval = 1; + } + } + return retval; + } + +}; + + +//Functions + +template _UCXXEXPORT basic_string::basic_string(const Ch* s, const A& al) + : vector(al) +{ + if(s!=0){ + size_type temp = Tr::length(s); + append(s, temp); + } +} + +template _UCXXEXPORT basic_string:: + basic_string(const basic_string& str, size_type pos, size_type n, const A& al) + : vector(al) +{ + if(pos>str.size()){ + __throw_out_of_range(); + } + size_type rlen = str.size() - pos; + if( rlen > n){ + rlen = n; + } + resize(rlen); + Tr::copy(vector::data, str.vector::data + pos, vector::elements); +} + +template _UCXXEXPORT basic_string& + basic_string::operator=(const basic_string & str) +{ + if(&str == this){ //Check if we are doing a=a + return *this; + } + vector::clear(); + resize(str.elements); + Tr::copy( vector::data, str.vector::data, str.elements); + return *this; +} + + +template _UCXXEXPORT typename basic_string::size_type + basic_string::find (const basic_string& str, size_type pos) const +{ + if(str.length() > length()){ + return npos; + } + size_type max_string_start = 1 + length() - str.length(); + for(size_type i = pos; i < max_string_start; ++i){ + if(str == substr(i, str.length())){ + return i; + } + } + return npos; +} + + +template + _UCXXEXPORT basic_string basic_string::substr(size_type pos, size_type n) const +{ + if(pos > vector::elements){ + __throw_out_of_range(); + } + size_type rlen = vector::elements - pos; + if(rlen > n){ + rlen = n; + } + return basic_string(vector::data + pos,rlen); +} + + + + +#ifdef __UCLIBCXX_EXPAND_STRING_CHAR__ +#ifndef __UCLIBCXX_COMPILE_STRING__ + +#ifdef __UCLIBCXX_EXPAND_CONSTRUCTORS_DESTRUCTORS__ + + template <> _UCXXEXPORT string::basic_string(const allocator &); + template <> _UCXXEXPORT string::basic_string(size_type n, char c, const allocator & ); + template <> _UCXXEXPORT string::basic_string(const char* s, const allocator& al); + template <> _UCXXEXPORT string::basic_string(const basic_string& str, size_type pos, size_type n, const allocator& al); + template <> _UCXXEXPORT string::~basic_string(); + +#endif + + template <> _UCXXEXPORT string & string::append(const char * s, size_type n); + + + template <> _UCXXEXPORT string::size_type string::find(const string & str, size_type pos) const; + template <> _UCXXEXPORT string::size_type string::find(const char* s, size_type pos) const; + template <> _UCXXEXPORT string::size_type string::find (char c, size_type pos) const; + + template <> _UCXXEXPORT string::size_type string::rfind(const string & str, size_type pos) const; + template <> _UCXXEXPORT string::size_type string::rfind(char c, size_type pos) const; + template <> _UCXXEXPORT string::size_type string::rfind(const char* s, size_type pos) const; + + template <> _UCXXEXPORT string::size_type string::find_first_of(const string &, size_type) const; + template <> _UCXXEXPORT string::size_type string::find_first_of(const char *, size_type pos, size_type n) const; + template <> _UCXXEXPORT string::size_type string::find_first_of(const char*, size_type pos) const; + template <> _UCXXEXPORT string::size_type string::find_first_of(char c, size_type pos) const; + + template <> _UCXXEXPORT string::size_type string::find_last_of (const string & , size_type pos) const; + template <> _UCXXEXPORT string::size_type string::find_last_of (const char* s, size_type pos, size_type n) const; + template <> _UCXXEXPORT string::size_type string::find_last_of (const char* s, size_type pos) const; + template <> _UCXXEXPORT string::size_type string::find_last_of (char c, size_type pos) const; + + template <> _UCXXEXPORT string::size_type string::find_first_not_of(const string &, size_type) const; + template <> _UCXXEXPORT string::size_type string::find_first_not_of(const char*, size_type, size_type) const; + template <> _UCXXEXPORT string::size_type string::find_first_not_of(const char*, size_type) const; + template <> _UCXXEXPORT string::size_type string::find_first_not_of(char c, size_type) const; + + template <> _UCXXEXPORT int string::compare(const string & str) const; + template <> _UCXXEXPORT int string::compare( + size_type pos1, size_type n1, const string & str, size_type pos2, size_type n2) const; + + template <> _UCXXEXPORT string string::substr(size_type pos, size_type n) const; + + template <> _UCXXEXPORT string & string::operator=(const string & str); + template <> _UCXXEXPORT string & string::operator=(const char * s); + +#endif +#endif + + + + +//typedef basic_string string; + +template _UCXXEXPORT basic_string + operator+(const basic_string& lhs, const basic_string& rhs) +{ + basic_string temp(lhs); + temp.append(rhs); + return temp; +} + +template _UCXXEXPORT basic_string + operator+(const charT* lhs, const basic_string& rhs) +{ + basic_string temp(lhs); + temp.append(rhs); + return temp; +} + + +template _UCXXEXPORT basic_string + operator+(charT lhs, const basic_string& rhs) +{ + basic_string temp(1, lhs); + temp.append(rhs); + return temp; +} + +template _UCXXEXPORT basic_string + operator+(const basic_string& lhs, const charT* rhs) +{ + basic_string temp(lhs); + temp.append(rhs); + return temp; +} + +template _UCXXEXPORT basic_string + operator+(const basic_string& lhs, charT rhs) +{ + basic_string temp(lhs); + temp+=rhs; + return temp; +} + +template _UCXXEXPORT bool + operator==(const basic_string& lhs, const basic_string& rhs) +{ + if(lhs.compare(rhs) == 0){ + return true; + } + return false; +} + +template _UCXXEXPORT bool + operator==(const charT* lhs, const basic_string& rhs) +{ + if(rhs.compare(lhs) == 0){ + return true; + } + return false; +} + +template _UCXXEXPORT bool + operator==(const basic_string& lhs, const charT* rhs) +{ + if(lhs.compare(rhs)==0){ + return true; + } + return false; +} + +template _UCXXEXPORT bool + operator!=(const basic_string& lhs, const basic_string& rhs) +{ + if(lhs.compare(rhs) !=0){ + return true; + } + return false; +} + +template _UCXXEXPORT bool + operator!=(const charT* lhs, const basic_string& rhs) +{ + basic_string temp(lhs); + return (temp != rhs); +} + +template _UCXXEXPORT bool + operator!=(const basic_string& lhs, const charT* rhs) +{ + basic_string temp(rhs); + return (lhs != temp); +} + +template _UCXXEXPORT bool + operator< (const basic_string& lhs, const basic_string& rhs) +{ + if(lhs.compare(rhs) < 0){ + return true; + } + return false; +} + +template _UCXXEXPORT bool + operator< (const basic_string& lhs, const charT* rhs) +{ + basic_string temp(rhs); + if(lhs.compare(rhs) < 0){ + return true; + } + return false; +} + +template _UCXXEXPORT bool + operator< (const charT* lhs, const basic_string& rhs) +{ + basic_string temp(lhs); + if(temp.compare(rhs) < 0){ + return true; + } + return false; +} + + +template _UCXXEXPORT bool + operator> (const basic_string& lhs, const basic_string& rhs) +{ + if(lhs.compare(rhs) > 0){ + return true; + } + return false; +} + +template _UCXXEXPORT bool + operator> (const basic_string& lhs, const charT* rhs) +{ + basic_string temp(rhs); + if(lhs.compare(rhs) > 0){ + return true; + } + return false; +} + +template _UCXXEXPORT bool + operator> (const charT* lhs, const basic_string& rhs) +{ + basic_string temp(lhs); + if(temp.compare(rhs) > 0){ + return true; + } + return false; +} + +template _UCXXEXPORT bool + operator<=(const basic_string& lhs, const basic_string& rhs) +{ + if(lhs.compare(rhs) <=0){ + return true; + } + return false; +} + +template _UCXXEXPORT bool + operator<=(const basic_string& lhs, const charT* rhs) +{ + basic_string temp(rhs); + if(lhs.compare(temp) <=0 ){ + return true; + } + return false; +} + +template _UCXXEXPORT bool + operator<=(const charT* lhs, const basic_string& rhs) +{ + basic_string temp(lhs); + if(temp.compare(rhs) <= 0){ + return true; + } + return false; +} + +template _UCXXEXPORT bool + operator>=(const basic_string& lhs, const basic_string& rhs) +{ + if(lhs.compare(rhs) >=0){ + return true; + } + return false; +} + +template _UCXXEXPORT bool + operator>=(const basic_string& lhs, const charT* rhs) +{ + basic_string temp(rhs); + if(lhs.compare(temp) >=0 ){ + return true; + } + return false; +} + +template _UCXXEXPORT bool + operator>=(const charT* lhs, const basic_string& rhs) +{ + basic_string temp(lhs); + if(temp.compare(rhs) >=0 ){ + return true; + } + return false; +} + +template _UCXXEXPORT void + swap(basic_string& lhs, basic_string& rhs) +{ + lhs.swap(rhs); +} + +/*template _UCXXEXPORT basic_ostream& + operator<<(basic_ostream& os, const basic_string& str) +{ + return os.write(str.data(), str.length()); +}*/ + +#ifdef __UCLIBCXX_EXPAND_STRING_CHAR__ +#ifndef __UCLIBCXX_COMPILE_STRING__ + +//Operators we can avoid duplication of + +template <> _UCXXEXPORT bool operator==(const string & lhs, const string & rhs); +template <> _UCXXEXPORT bool operator==(const char * lhs, const string & rhs); +template <> _UCXXEXPORT bool operator==(const string & lhs, const char * rhs); + +template <> _UCXXEXPORT bool operator!=(const string & lhs, const string & rhs); +template <> _UCXXEXPORT bool operator!=(const char * lhs, const string & rhs); +template <> _UCXXEXPORT bool operator!=(const string & lhs, const char * rhs); + +template <> _UCXXEXPORT string operator+(const string & lhs, const char* rhs); +template <> _UCXXEXPORT string operator+(const char* lhs, const string & rhs); +template <> _UCXXEXPORT string operator+(const string & lhs, const string & rhs); + +template <> _UCXXEXPORT bool operator> (const string & lhs, const string & rhs); +template <> _UCXXEXPORT bool operator< (const string & lhs, const string & rhs); + + +#endif +#endif + + +} + +#pragma GCC visibility pop + +#endif diff --git a/external/arduino/stlarduino/string.cpp b/external/arduino/stlarduino/string.cpp new file mode 100644 index 000000000..1edf69b5d --- /dev/null +++ b/external/arduino/stlarduino/string.cpp @@ -0,0 +1,112 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#define __UCLIBCXX_COMPILE_STRING__ 1 + +#include +#include +#include +#include +#include +#include + +namespace std{ + +#ifdef __UCLIBCXX_EXPAND_STRING_CHAR__ + +#ifdef __UCLIBCXX_EXPAND_CONSTRUCTORS_DESTRUCTORS__ + + template _UCXXEXPORT string::basic_string(const allocator &); + template _UCXXEXPORT string::basic_string(size_type n, char c, const allocator & ); + template _UCXXEXPORT string::basic_string(const char* s, const allocator& al); + template _UCXXEXPORT string::basic_string(const basic_string& str, size_type pos, size_type n, const allocator& al); + template _UCXXEXPORT string::~basic_string(); + +#endif // __UCLIBCXX_EXPAND_CONSTRUCTORS_DESTRUCTORS__ + + template _UCXXEXPORT string & string::append(const char * s, size_type n); + + template _UCXXEXPORT string::size_type string::find(const string & str, size_type pos) const; + template _UCXXEXPORT string::size_type string::find(const char* s, size_type pos) const; + template _UCXXEXPORT string::size_type string::find (char c, size_type pos) const; + template _UCXXEXPORT string::size_type string::rfind(const string & str, size_type pos) const; + template _UCXXEXPORT string::size_type string::rfind(char c, size_type pos) const; + template _UCXXEXPORT string::size_type string::rfind(const char* s, size_type pos) const; + + template _UCXXEXPORT string::size_type string::find_first_of(const string &, size_type) const; + template _UCXXEXPORT string::size_type string::find_first_of(const char *, size_type pos, size_type n) const; + template _UCXXEXPORT string::size_type string::find_first_of(const char*, size_type pos) const; + template _UCXXEXPORT string::size_type string::find_first_of(char c, size_type pos) const; + + template _UCXXEXPORT string::size_type string::find_last_of (const string & , size_type pos) const; + template _UCXXEXPORT string::size_type string::find_last_of (const char* s, size_type pos, size_type n) const; + template _UCXXEXPORT string::size_type string::find_last_of (const char* s, size_type pos) const; + template _UCXXEXPORT string::size_type string::find_last_of (char c, size_type pos) const; + + template _UCXXEXPORT string::size_type string::find_first_not_of(const string &, size_type) const; + template _UCXXEXPORT string::size_type string::find_first_not_of(const char*, size_type, size_type) const; + template _UCXXEXPORT string::size_type string::find_first_not_of(const char*, size_type) const; + template _UCXXEXPORT string::size_type string::find_first_not_of(char c, size_type) const; + + template _UCXXEXPORT int string::compare(const string & str) const; +// template _UCXXEXPORT int string::compare(size_type pos1, size_type n1, const string & str) const; + template _UCXXEXPORT int string::compare( + size_type pos1, size_type n1, const string & str, size_type pos2, size_type n2) const; + + template _UCXXEXPORT string string::substr(size_type pos, size_type n) const; + + template _UCXXEXPORT string & string::operator=(const string & str); + template _UCXXEXPORT string & string::operator=(const char * s); + + template _UCXXEXPORT bool operator==(const string & lhs, const string & rhs); + template _UCXXEXPORT bool operator==(const char * lhs, const string & rhs); + template _UCXXEXPORT bool operator==(const string & lhs, const char * rhs); + + template _UCXXEXPORT bool operator!=(const string & lhs, const string & rhs); + template _UCXXEXPORT bool operator!=(const char * lhs, const string & rhs); + template _UCXXEXPORT bool operator!=(const string & lhs, const char * rhs); + + template _UCXXEXPORT string operator+(const string & lhs, const char* rhs); + template _UCXXEXPORT string operator+(const char* lhs, const string & rhs); + template _UCXXEXPORT string operator+(const string & lhs, const string & rhs); + + template _UCXXEXPORT bool operator> (const string & lhs, const string & rhs); + template _UCXXEXPORT bool operator< (const string & lhs, const string & rhs); + + +//Functions dependent upon OSTREAM +#ifdef __UCLIBCXX_EXPAND_OSTREAM_CHAR__ + +template _UCXXEXPORT ostream & operator<<(ostream & os, const string & str); + +#endif + + +//Functions dependent upon ISTREAM +#ifdef __UCLIBCXX_EXPAND_ISTREAM_CHAR__ + +template _UCXXEXPORT istream & operator>>(istream & is, string & str); + + +#endif + + +#endif + +} diff --git a/external/arduino/stlarduino/string_iostream b/external/arduino/stlarduino/string_iostream new file mode 100644 index 000000000..355fd58a9 --- /dev/null +++ b/external/arduino/stlarduino/string_iostream @@ -0,0 +1,146 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include +#include +#include + +#ifdef __UCLIBCXX_HAS_WCHAR__ +#include +#include +#endif + +#ifndef __HEADER_STD_STRING_IOSTREAM +#define __HEADER_STD_STRING_IOSTREAM 1 + +#pragma GCC visibility push(default) + +namespace std{ + + + +template _UCXXEXPORT basic_ostream& + operator<<(basic_ostream& os, const basic_string& str) +{ + return os.write(str.data(), str.length()); +} + +template _UCXXEXPORT basic_istream& + operator>>(basic_istream& is, basic_string& str) +{ + + typename basic_istream::sentry s(is); + if(s == false){ + return is; + } + + str.clear(); + + typename basic_istream::int_type c; + typename Allocator::size_type n = is.width(); + bool exitnow = false; + if(n == 0){ + n = str.max_size(); + } + +// //Clear out preliminary spaces first +// c = is.get(); +// while(isspace(c)){ +// c = is.get(); +// } +// +// is.putback(c); + + do{ + c = is.get(); + if(c == traits::eof() || isspace(c) || n == 0){ + is.putback(c); + exitnow = true; + }else{ + str.append(1, traits::to_char_type(c) ); + --n; + } + }while(exitnow == false); + return is; +} + +template _UCXXEXPORT basic_istream& + getline(basic_istream& is, basic_string& str, charT delim) +{ + typename basic_istream::sentry s(is, true); + if(s == false){ + return is; + } + + str.erase(); + + streamsize i = 0; + typename basic_istream::int_type c_i; + charT c; + unsigned int n = str.max_size(); + for(i=0;i _UCXXEXPORT basic_istream& + getline(basic_istream& is, basic_string& str) +{ + return getline(is, str, '\n'); +} + + +#ifdef __UCLIBCXX_EXPAND_STRING_CHAR__ +#ifndef __UCLIBCXX_COMPILE_STRING__ + + +#ifdef __UCLIBCXX_EXPAND_ISTREAM_CHAR__ +template<> _UCXXEXPORT basic_istream >& operator>>( + basic_istream >& is, + basic_string, allocator >& str); +#endif + + +#ifdef __UCLIBCXX_EXPAND_OSTREAM_CHAR__ +template<> _UCXXEXPORT basic_ostream >& + operator<<(basic_ostream >& os, + const basic_string, std::allocator >& str); + +#endif + + +#endif +#endif + + +} + +#pragma GCC visibility pop + +#endif + diff --git a/external/arduino/stlarduino/string_view b/external/arduino/stlarduino/string_view new file mode 100644 index 000000000..e6807262c --- /dev/null +++ b/external/arduino/stlarduino/string_view @@ -0,0 +1,1423 @@ +/** + * \file string_view.hpp + * + * \brief This header contains the definition of the string_view type, as + * described by the C++17 standard. + * + * \author Matthew Rodusek (matthew.rodusek@gmail.com) + * \copyright Matthew Rodusek + */ + +/* + * The MIT License (MIT) + * + * Licensed under the MIT License . + * Copyright (c) 2016 Matthew Rodusek + * + * 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. + */ +#ifndef BPSTD_STRING_VIEW_HPP +#define BPSTD_STRING_VIEW_HPP + +#include // std:: +#include // std::char_traits +#include // std::basic_ostream +#include // std::size_t +#include // std::allocator +#include // std::out_of_range +#include // std::out_of_range +#include // std::reverse_iterator +namespace std { // back-port std + + //////////////////////////////////////////////////////////////////////////// + /// \brief A wrapper around non-owned strings. + /// + /// This is an implementation of the C++17 string_view proposal + /// + /// \ingroup core + //////////////////////////////////////////////////////////////////////////// + template< + typename CharT, + typename Traits = std::char_traits + > + class basic_string_view final + { + //------------------------------------------------------------------------ + // Public Member Types + //------------------------------------------------------------------------ + public: + + using char_type = CharT; + using traits_type = Traits; + using size_type = std::size_t; + + using value_type = CharT; + using reference = value_type&; + using const_reference = const value_type&; + using pointer = value_type*; + using const_pointer = const value_type*; + + using iterator = const CharT*; + using const_iterator = const CharT*; + using reverse_iterator = std::reverse_iterator; + using const_reverse_iterator = std::reverse_iterator; + + //------------------------------------------------------------------------ + // Public Members + //------------------------------------------------------------------------ + public: + + static constexpr size_type npos = size_type(-1); + + //------------------------------------------------------------------------ + // Constructors + //------------------------------------------------------------------------ + public: + + /// \brief Default constructs a basic_string_view without any content + constexpr basic_string_view() noexcept; + + /// \brief Constructs a basic_string_view by copying another one + /// + /// \param other the string view being copied + constexpr basic_string_view(const basic_string_view& other) noexcept = default; + + /// \brief Constructs a basic_string_view by moving anothe rone + /// + /// \param other the string view being moved + constexpr basic_string_view(basic_string_view&& other) noexcept = default; + + /// \brief Constructs a basic_string_view from a std::basic_string + /// + /// \param str the string to view + template + basic_string_view(const std::basic_string& str) noexcept; + + /// \brief Constructs a basic_string_view from an ansi-string + /// + /// \param str the string to view + constexpr basic_string_view(const char_type* str) noexcept; + + /// \brief Constructs a basic_string_view from an ansi string of a given size + /// + /// \param str the string to view + /// \param count the size of the string + constexpr basic_string_view(const char_type* str, size_type count) noexcept; + + //------------------------------------------------------------------------ + // Assignment + //------------------------------------------------------------------------ + public: + + /// \brief Assigns a basic_string_view from an ansi-string + /// + /// \param view the string to view + /// \return reference to \c (*this) + basic_string_view& operator=(const basic_string_view& view) = default; + + //------------------------------------------------------------------------ + // Capacity + //------------------------------------------------------------------------ + public: + + /// \brief Returns the length of the string, in terms of bytes + /// + /// \return the length of the string, in terms of bytes + constexpr size_type size() const noexcept; + + /// \copydoc basic_string_view::size + constexpr size_type length() const noexcept; + + /// \brief The largest possible number of char-like objects that can be + /// referred to by a basic_string_view. + /// \return Maximum number of characters + constexpr size_type max_size() const noexcept; + + /// \brief Returns whether the basic_string_view is empty + /// (i.e. whether its length is 0). + /// + /// \return whether the basic_string_view is empty + constexpr bool empty() const noexcept; + + //------------------------------------------------------------------------ + // Element Access + //------------------------------------------------------------------------ + public: + + /// \brief Gets the ansi-string of the current basic_string_view + /// + /// \return the ansi-string pointer + constexpr const char_type* c_str() const noexcept; + + /// \brief Gets the data of the current basic_string_view + /// + /// \note This is an alias of #c_str + /// + /// \return the data this basic_string_view contains + constexpr const char_type* data() const noexcept; + + /// \brief Accesses the element at index \p pos + /// + /// \param pos the index to access + /// \return const reference to the character + constexpr const_reference operator[](size_type pos) const noexcept; + + /// \brief Accesses the element at index \p pos + /// + /// \param pos the index to access + /// \return const reference to the character + constexpr const_reference at(size_type pos) const; + + /// \brief Access the first character of the string + /// + /// \note Undefined behavior if basic_string_view is empty + /// + /// \return reference to the first character of the string + constexpr const_reference front() const noexcept; + + /// \brief References the last character of the string + /// + /// \note Undefined behavior if basic_string_view is empty + /// + /// \return reference to the last character of the string + constexpr const_reference back() const noexcept; + + //------------------------------------------------------------------------ + // Modifiers + //------------------------------------------------------------------------ + public: + + /// \brief Moves the start of the view forward by n characters. + /// + /// The behavior is undefined if n > size(). + /// + /// \param n number of characters to remove from the start of the view + void remove_prefix(size_type n) noexcept; + + /// \brief Moves the end of the view back by n characters. + /// + /// The behavior is undefined if n > size(). + /// + /// \param n number of characters to remove from the end of the view + void remove_suffix(size_type n) noexcept; + + /// \brief Exchanges the view with that of v. + /// + /// \param v view to swap with + void swap(basic_string_view& v) noexcept; + + //------------------------------------------------------------------------ + // Conversions + //------------------------------------------------------------------------ + public: + + /// \brief Creates a basic_string with a copy of the content of the current view. + /// + /// \tparam Allocator type used to allocate internal storage + /// \param a Allocator instance to use for allocating the new string + /// + /// \return A basic_string containing a copy of the characters of the current view. + template> + constexpr std::basic_string + to_string(const Allocator& a = Allocator()) const; + + /// \copydoc basic_string_view::to_string + template + explicit constexpr operator std::basic_string() const; + + //------------------------------------------------------------------------ + // Operations + //------------------------------------------------------------------------ + public: + + /// \brief Copies the substring [pos, pos + rcount) to the character string pointed + /// to by dest, where rcount is the smaller of count and size() - pos. + /// + /// \param dest pointer to the destination character string + /// \param count requested substring length + /// \param pos position of the first character + size_type copy( char_type* dest, + size_type count = npos, + size_type pos = 0 ) const; + + /// \brief Returns a substring of this viewed string + /// + /// \param pos the position of the first character in the substring + /// \param len the length of the substring + /// \return the created substring + basic_string_view substr(size_t pos = 0, size_t len = npos) const; + + //------------------------------------------------------------------------ + + /// \brief Compares two character sequences + /// + /// \param v view to compare + /// \return negative value if this view is less than the other character + /// sequence, zero if the both character sequences are equal, positive + /// value if this view is greater than the other character sequence. + int compare(basic_string_view v) const noexcept; + + /// \brief Compares two character sequences + /// + /// \param pos position of the first character in this view to compare + /// \param count number of characters of this view to compare + /// \param v view to compare + /// \return negative value if this view is less than the other character + /// sequence, zero if the both character sequences are equal, positive + /// value if this view is greater than the other character sequence. + int compare(size_type pos, size_type count, basic_string_view v) const; + + /// \brief Compares two character sequences + /// + /// \param pos1 position of the first character in this view to compare + /// \param count1 number of characters of this view to compare + /// \param v view to compare + /// \param pos2 position of the second character in this view to compare + /// \param count2 number of characters of the given view to compare + /// \return negative value if this view is less than the other character + /// sequence, zero if the both character sequences are equal, positive + /// value if this view is greater than the other character sequence. + int compare( size_type pos1, size_type count1, basic_string_view v, + size_type pos2, size_type count2 ) const; + + /// \brief Compares two character sequences + /// + /// \param s pointer to the character string to compare to + /// \return negative value if this view is less than the other character + /// sequence, zero if the both character sequences are equal, positive + /// value if this view is greater than the other character sequence. + int compare(const char_type* s) const; + + /// \brief Compares two character sequences + /// + /// \param pos position of the first character in this view to compare + /// \param count number of characters of this view to compare + /// \param s pointer to the character string to compare to + /// \return negative value if this view is less than the other character + /// sequence, zero if the both character sequences are equal, positive + /// value if this view is greater than the other character sequence. + int compare(size_type pos, size_type count, const char_type* s) const; + + /// \brief Compares two character sequences + /// + /// \param pos position of the first character in this view to compare + /// \param count1 number of characters of this view to compare + /// \param s pointer to the character string to compare to + /// \param count2 number of characters of the given view to compare + /// \return negative value if this view is less than the other character + /// sequence, zero if the both character sequences are equal, positive + /// value if this view is greater than the other character sequence. + int compare( size_type pos, size_type count1, const char_type* s, + size_type count2 ) const; + + //------------------------------------------------------------------------ + + size_type find(basic_string_view v, size_type pos = 0) const; + + size_type find(char_type c, size_type pos = 0) const; + + size_type find(const char_type* s, size_type pos, size_type count) const; + + size_type find(const char_type* s, size_type pos = 0) const; + + //------------------------------------------------------------------------ + + size_type rfind(basic_string_view v, size_type pos = npos) const; + + size_type rfind(char_type c, size_type pos = npos) const; + + size_type rfind(const char_type* s, size_type pos, size_type count) const; + + size_type rfind(const char_type* s, size_type pos = npos) const; + + //------------------------------------------------------------------------ + + size_type find_first_of(basic_string_view v, size_type pos = 0) const; + + size_type find_first_of(char_type c, size_type pos = 0) const; + + size_type find_first_of(const char_type* s, size_type pos, size_type count) const; + + size_type find_first_of(const char_type* s, size_type pos = 0) const; + + //------------------------------------------------------------------------ + + size_type find_last_of(basic_string_view v, size_type pos = npos) const; + + size_type find_last_of(char_type c, size_type pos = npos) const; + + size_type find_last_of(const char_type* s, size_type pos, size_type count) const; + + size_type find_last_of(const char_type* s, size_type pos = npos) const; + + //------------------------------------------------------------------------ + + size_type find_first_not_of(basic_string_view v, size_type pos = 0) const; + + size_type find_first_not_of(char_type c, size_type pos = 0) const; + + size_type find_first_not_of(const char_type* s, size_type pos, size_type count) const; + + size_type find_first_not_of(const char_type* s, size_type pos = 0) const; + + //------------------------------------------------------------------------ + + size_type find_last_not_of(basic_string_view v, size_type pos = npos) const; + + size_type find_last_not_of(char_type c, size_type pos = npos) const; + + size_type find_last_not_of(const char_type* s, size_type pos, size_type count) const; + + size_type find_last_not_of(const char_type* s, size_type pos = npos) const; + + //------------------------------------------------------------------------ + // Iterators + //------------------------------------------------------------------------ + public: + + /// \{ + /// \brief Retrieves the begin iterator for this basic_string_view + /// + /// \return the begin iterator + const_iterator begin() const noexcept; + const_iterator cbegin() const noexcept; + /// \} + + /// \{ + /// \brief Retrieves the end iterator for this basic_string_view + /// + /// \return the end iterator + const_iterator end() const noexcept; + const_iterator cend() const noexcept; + /// \} + + /// \{ + /// \brief Retrieves the reverse begin iterator for this basic_string_view + /// + /// \return the reverse begin iterator + const_reverse_iterator rbegin() const noexcept; + const_reverse_iterator rend() const noexcept; + /// \} + + /// \{ + /// \brief Retrieves the reverse end iterator for this basic_string_view + /// + /// \return the reverse end iterator + const_reverse_iterator crbegin() const noexcept; + const_reverse_iterator crend() const noexcept; + /// \} + + //------------------------------------------------------------------------ + // Private Member + //------------------------------------------------------------------------ + private: + + const char_type* m_str; ///< The internal string type + size_type m_size; ///< The size of this string + + /// \brief Checks whether \p c is one of the characters in \p str + /// + /// \param c the character to check + /// \param str the characters to compare against + /// \return true if \p c is one of the characters in \p str + static bool is_one_of(CharT c, basic_string_view str); + }; + + template + const typename basic_string_view::size_type + basic_string_view::npos; + + //-------------------------------------------------------------------------- + // Public Functions + //-------------------------------------------------------------------------- + + /// \brief Overload for ostream output of basic_string_view + /// + /// \param o The output stream to print to + /// \param str the string to print + /// \return reference to the output stream + template + std::basic_ostream& operator<<(std::basic_ostream& o, + const basic_string_view& str); + + template + void swap(basic_string_view& lhs, + basic_string_view& rhs) noexcept; + + //-------------------------------------------------------------------------- + // Comparison Functions + //-------------------------------------------------------------------------- + + template + bool operator==(const basic_string_view& lhs, + const basic_string_view& rhs) noexcept; + template + bool operator!=(const basic_string_view& lhs, + const basic_string_view& rhs) noexcept; + template + bool operator<(const basic_string_view& lhs, + const basic_string_view& rhs) noexcept; + template + bool operator>(const basic_string_view& lhs, + const basic_string_view& rhs) noexcept; + template + bool operator<=(const basic_string_view& lhs, + const basic_string_view& rhs) noexcept; + template + bool operator>=(const basic_string_view& lhs, + const basic_string_view& rhs) noexcept; + + //-------------------------------------------------------------------------- + // Type Aliases + //-------------------------------------------------------------------------- + + using string_view = basic_string_view; + using wstring_view = basic_string_view; + using u16string_view = basic_string_view; + using u32string_view = basic_string_view; + +} // namespace std + +#ifndef BPSTD_DETAIL_STRING_VIEW_INL +#define BPSTD_DETAIL_STRING_VIEW_INL + +namespace std { + + //-------------------------------------------------------------------------- + // Constructor + //-------------------------------------------------------------------------- + + template + inline constexpr basic_string_view::basic_string_view() + noexcept + : m_str(nullptr), + m_size(0) + { + + } + + template + template + inline basic_string_view::basic_string_view(const std::basic_string& str) + noexcept + : m_str(str.c_str()), + m_size(str.size()) + { + + } + + template + inline constexpr basic_string_view::basic_string_view(const char_type* str) + noexcept + : m_str(str), + m_size(traits_type::length(str)) + { + + } + + template + inline constexpr basic_string_view::basic_string_view(const char_type* str, size_type count) + noexcept + : m_str(str), + m_size(count) + { + + } + + //-------------------------------------------------------------------------- + // Capacity + //-------------------------------------------------------------------------- + + template + inline constexpr typename basic_string_view::size_type + basic_string_view::size() + const noexcept + { + return m_size; + } + + template + inline constexpr typename basic_string_view::size_type + basic_string_view::length() + const noexcept + { + return size(); + } + + template + inline constexpr typename basic_string_view::size_type + basic_string_view::max_size() + const noexcept + { + return npos - 1; + } + + template + inline constexpr bool basic_string_view::empty() + const noexcept + { + return m_size == 0; + } + + //-------------------------------------------------------------------------- + // Element Access + //-------------------------------------------------------------------------- + + template + inline constexpr const typename basic_string_view::char_type* + basic_string_view::c_str() + const noexcept + { + return m_str; + } + + template + inline constexpr const typename basic_string_view::char_type* + basic_string_view::data() + const noexcept + { + return m_str; + } + + template + inline constexpr typename basic_string_view::const_reference + basic_string_view::operator[](size_type pos) + const noexcept + { + return m_str[pos]; + } + + template + inline constexpr typename basic_string_view::const_reference + basic_string_view::at(size_type pos) + const + { + return pos < m_size ? m_str[pos] : throw std::__throw_out_of_range("Input out of range in basic_string_view::at"), m_str[pos]; + } + + template + inline constexpr typename basic_string_view::const_reference + basic_string_view::front( ) + const noexcept + { + return *m_str; + } + + template + inline constexpr typename basic_string_view::const_reference + basic_string_view::back( ) + const noexcept + { + return m_str[m_size-1]; + } + + //-------------------------------------------------------------------------- + // Modifiers + //-------------------------------------------------------------------------- + + template + inline void + basic_string_view::remove_prefix(size_type n) + noexcept + { + m_str += n, m_size -= n; + } + + template + inline void + basic_string_view::remove_suffix(size_type n) + noexcept + { + m_size -= n; + } + + template + inline void + basic_string_view::swap(basic_string_view& v) + noexcept + { + using std::swap; + swap(m_size,v.m_size); + swap(m_str,v.m_str); + } + + //-------------------------------------------------------------------------- + // Conversions + //-------------------------------------------------------------------------- + + template + template + inline constexpr std::basic_string + basic_string_view::to_string(const Allocator& a) + const + { + return std::basic_string(m_str, m_size, a); + } + + template + template + inline constexpr basic_string_view::operator + std::basic_string() + const + { + return std::basic_string(m_str, m_size); + } + + //-------------------------------------------------------------------------- + // String Operations + //-------------------------------------------------------------------------- + + template + inline typename basic_string_view::size_type + basic_string_view::copy(char_type* dest, + size_type count, + size_type pos) + const + { + if(pos >= m_size) { + throw std::__throw_out_of_range("Index out of range in basic_string_view::copy"); + } + + const size_type rcount = min(m_size - pos,count+1); + std::copy( m_str + pos, m_str + pos + rcount, dest); + return rcount; + } + + template + inline basic_string_view + basic_string_view::substr(size_type pos, + size_type len) + const + { + const size_type max_length = pos > m_size ? 0 : m_size - pos; + + if (pos > size()) { + throw std::__throw_out_of_range("Index out of range in basic_string_view::substr"); + } + + return basic_string_view(m_str + pos, min(len, max_length) ); + } + + //-------------------------------------------------------------------------- + + template + inline int basic_string_view::compare(basic_string_view v) + const noexcept + { + const size_type rlen = min(m_size,v.m_size); + const int compare = Traits::compare(m_str,v.m_str,rlen); + + return (compare ? compare : (m_size < v.m_size ? -1 : (m_size > v.m_size ? 1 : 0))); + } + + template + inline int basic_string_view::compare(size_type pos, + size_type count, + basic_string_view v) + const + { + return substr(pos,count).compare(v); + } + + template + inline int basic_string_view::compare(size_type pos1, + size_type count1, + basic_string_view v, + size_type pos2, + size_type count2) + const + { + return substr(pos1,count1).compare(v.substr(pos2,count2)); + } + + template + inline int basic_string_view::compare(const char_type* s) + const + { + return compare(basic_string_view(s)); + } + + template + inline int basic_string_view::compare(size_type pos, + size_type count, + const char_type* s) + const + { + return substr(pos, count).compare(basic_string_view(s)); + } + + template + inline int basic_string_view::compare(size_type pos, + size_type count1, + const char_type* s, + size_type count2) + const + { + return substr(pos, count1).compare(basic_string_view(s, count2)); + } + + //-------------------------------------------------------------------------- + + template + inline typename basic_string_view::size_type + basic_string_view::find(basic_string_view v, + size_type pos) + const + { + // Can't find a substring if the substring is bigger than this + if (pos > size()) { + return npos; + } + if ((pos + v.size()) > size()) { + return npos; + } + + const auto offset = pos; + const auto increments = size() - v.size() - offset; + + for (auto i = 0u; i <= increments; ++i) { + const auto j = i + offset; + if (substr(j, v.size()) == v) { + return j; + } + } + return npos; + } + + template + inline typename basic_string_view::size_type + basic_string_view::find(char_type c, + size_type pos) + const + { + return find(basic_string_view(&c, 1), pos); + } + + template + inline typename basic_string_view::size_type + basic_string_view::find(const char_type* s, size_type pos, + size_type count) + const + { + return find(basic_string_view(s, count), pos); + } + + template + inline typename basic_string_view::size_type + basic_string_view::find(const char_type* s, + size_type pos) + const + { + return find(basic_string_view(s), pos); + } + + //-------------------------------------------------------------------------- + + template + inline typename basic_string_view::size_type + basic_string_view::rfind(basic_string_view v, + size_type pos) + const + { + if (empty()) { + return v.empty() ? 0u : npos; + } + if (v.empty()) { + return min(size() - 1, pos); + } + if (v.size() > size()) { + return npos; + } + + auto i = min(pos, (size() - v.size())); + while (i != npos) { + if (substr(i, v.size()) == v) { + return i; + } + --i; + } + + return npos; + } + + template + inline typename basic_string_view::size_type + basic_string_view::rfind(char_type c, + size_type pos) + const + { + return rfind(basic_string_view(&c, 1), pos); + } + + template + inline typename basic_string_view::size_type + basic_string_view::rfind(const char_type* s, size_type pos, + size_type count) + const + { + return rfind(basic_string_view(s, count), pos); + } + + template + inline typename basic_string_view::size_type + basic_string_view::rfind(const char_type* s, + size_type pos) + const + { + return rfind(basic_string_view(s), pos); + } + + //-------------------------------------------------------------------------- + + template + inline typename basic_string_view::size_type + basic_string_view::find_first_of(basic_string_view v, + size_type pos) + const + { + const auto max_index = size(); + for (auto i = pos; i < max_index; ++i) { + if (is_one_of(m_str[i],v)) { + return i; + } + } + + return npos; + } + + template + inline typename basic_string_view::size_type + basic_string_view::find_first_of(char_type c, + size_type pos) + const + { + return find_first_of(basic_string_view(&c, 1), pos); + } + + template + inline typename basic_string_view::size_type + basic_string_view::find_first_of(const char_type* s, size_type pos, + size_type count) + const + { + return find_first_of(basic_string_view(s, count), pos); + } + + template + inline typename basic_string_view::size_type + basic_string_view::find_first_of(const char_type* s, + size_type pos) + const + { + return find_first_of(basic_string_view(s), pos); + } + + //-------------------------------------------------------------------------- + + template + inline typename basic_string_view::size_type + basic_string_view::find_last_of(basic_string_view v, + size_type pos) + const + { + if (empty()) { + return npos; + } + const auto max_index = min(size() - 1, pos); + for (auto i = 0u; i <= max_index; ++i) { + const auto j = max_index - i; + + if (is_one_of(m_str[j],v)) { + return j; + } + } + + return npos; + } + + template + inline typename basic_string_view::size_type + basic_string_view::find_last_of(char_type c, + size_type pos) + const + { + return find_last_of(basic_string_view(&c, 1), pos); + } + + template + inline typename basic_string_view::size_type + basic_string_view::find_last_of(const char_type* s, size_type pos, + size_type count) + const + { + return find_last_of(basic_string_view(s, count), pos); + } + + template + inline typename basic_string_view::size_type + basic_string_view::find_last_of(const char_type* s, + size_type pos) + const + { + return find_last_of(basic_string_view(s), pos); + } + + //-------------------------------------------------------------------------- + + template + inline typename basic_string_view::size_type + basic_string_view::find_first_not_of(basic_string_view v, + size_type pos) + const + { + const auto max_index = size(); + for (auto i = pos; i < max_index; ++i) { + if (!is_one_of(m_str[i],v)) { + return i; + } + } + + return npos; + } + + template + inline typename basic_string_view::size_type + basic_string_view::find_first_not_of(char_type c, + size_type pos) + const + { + return find_first_not_of(basic_string_view(&c, 1), pos); + } + + template + inline typename basic_string_view::size_type + basic_string_view::find_first_not_of(const char_type* s, + size_type pos, + size_type count) + const + { + return find_first_not_of(basic_string_view(s, count), pos); + } + + template + inline typename basic_string_view::size_type + basic_string_view::find_first_not_of(const char_type* s, + size_type pos) + const + { + return find_first_not_of(basic_string_view(s), pos); + } + + //-------------------------------------------------------------------------- + + template + inline typename basic_string_view::size_type + basic_string_view::find_last_not_of(basic_string_view v, + size_type pos) + const + { + if (empty()) { + return npos; + } + const auto max_index = min(size() - 1, pos); + for (auto i = 0u; i <= max_index; ++i) { + const auto j = max_index - i; + + if (!is_one_of(m_str[j],v)) { + return j; + } + } + + return npos; + } + + template + inline typename basic_string_view::size_type + basic_string_view::find_last_not_of(char_type c, + size_type pos) + const + { + return find_last_not_of(basic_string_view(&c, 1), pos); + } + + template + inline typename basic_string_view::size_type + basic_string_view::find_last_not_of(const char_type* s, + size_type pos, + size_type count) + const + { + return find_last_not_of(basic_string_view(s, count), pos); + } + + template + inline typename basic_string_view::size_type + basic_string_view::find_last_not_of(const char_type* s, + size_type pos) + const + { + return find_last_not_of(basic_string_view(s), pos); + } + + //-------------------------------------------------------------------------- + // Iterator + //-------------------------------------------------------------------------- + + template + inline typename basic_string_view::const_iterator + basic_string_view::begin() + const noexcept + { + return m_str; + } + + template + inline typename basic_string_view::const_iterator + basic_string_view::cbegin() + const noexcept + { + return begin(); + } + + template + inline typename basic_string_view::const_iterator + basic_string_view::end() + const noexcept + { + return m_str + m_size; + } + + template + inline typename basic_string_view::const_iterator + basic_string_view::cend() + const noexcept + { + return cend(); + } + + template + inline typename basic_string_view::const_reverse_iterator + basic_string_view::rbegin() + const noexcept + { + return const_reverse_iterator{end()}; + } + + template + inline typename basic_string_view::const_reverse_iterator + basic_string_view::crbegin() + const noexcept + { + return rbegin(); + } + + template + inline typename basic_string_view::const_reverse_iterator + basic_string_view::rend() + const noexcept + { + return const_reverse_iterator{begin()}; + } + + template + inline typename basic_string_view::const_reverse_iterator + basic_string_view::crend() + const noexcept + { + return crend(); + } + + template + inline bool basic_string_view::is_one_of(CharT c, + basic_string_view str) + { + for (auto s : str) { + if (c == s) { + return true; + } + } + return false; + } + + //-------------------------------------------------------------------------- + // Public Functions + //-------------------------------------------------------------------------- + + template + std::basic_ostream& operator<<(std::basic_ostream& o, + const basic_string_view& str) + { + o.write(str.data(),str.size()); + return o; + } + + template + inline void swap(basic_string_view& lhs, + basic_string_view& rhs) + noexcept + { + lhs.swap(rhs); + } + + //-------------------------------------------------------------------------- + // Comparison Functions + //-------------------------------------------------------------------------- + + template + inline bool operator==(const basic_string_view& lhs, + const basic_string_view& rhs) + noexcept + { + return lhs.compare(rhs) == 0; + } + + template + inline bool operator==(basic_string_view lhs, + const CharT* rhs) + noexcept + { + return lhs == basic_string_view(rhs); + } + + template + inline bool operator==(const CharT* lhs, + const basic_string_view& rhs) + noexcept + { + return basic_string_view(lhs) == rhs; + } + + template + inline bool operator==(const std::basic_string& lhs, + const basic_string_view& rhs) + { + return basic_string_view(lhs) == rhs; + } + + template + inline bool operator==(const basic_string_view& lhs, + const std::basic_string& rhs) + { + return lhs == basic_string_view(rhs); + } + + //-------------------------------------------------------------------------- + + template + inline bool operator!=(const basic_string_view& lhs, + const basic_string_view& rhs) + noexcept + { + return lhs.compare(rhs) != 0; + } + + template + inline bool operator!=(const basic_string_view& lhs, + const CharT* rhs) + noexcept + { + return lhs != basic_string_view(rhs); + } + + template + inline bool operator!=(const CharT* lhs, + const basic_string_view& rhs) + noexcept + { + return basic_string_view(lhs) != rhs; + } + + template + inline bool operator!=(const std::basic_string& lhs, + const basic_string_view& rhs) + { + return basic_string_view(lhs) != rhs; + } + + template + inline bool operator!=(const basic_string_view& lhs, + const std::basic_string& rhs) + { + return lhs != basic_string_view(rhs); + } + //-------------------------------------------------------------------------- + + template + inline bool operator<(const basic_string_view& lhs, + const basic_string_view& rhs) + noexcept + { + return lhs.compare(rhs) < 0; + } + + template + inline bool operator<(const basic_string_view& lhs, + const CharT* rhs) + noexcept + { + return lhs < basic_string_view(rhs); + } + + template + inline bool operator<(const CharT* lhs, + const basic_string_view& rhs) + noexcept + { + return basic_string_view(lhs) < rhs; + } + + template + inline bool operator<(const std::basic_string& lhs, + const basic_string_view& rhs) + { + return basic_string_view(lhs) < rhs; + } + + template + inline bool operator<(const basic_string_view& lhs, + const std::basic_string& rhs) + { + return lhs < basic_string_view(rhs); + } + + //-------------------------------------------------------------------------- + + template + inline bool operator>(const basic_string_view& lhs, + const basic_string_view& rhs) + noexcept + { + return lhs.compare(rhs) > 0; + } + + template + inline bool operator>(const basic_string_view& lhs, + const CharT* rhs) + noexcept + { + return lhs > basic_string_view(rhs); + } + + template + inline bool operator>(const CharT* lhs, + const basic_string_view& rhs) + noexcept + { + return basic_string_view(lhs) > rhs; + } + + template + inline bool operator>(const std::basic_string& lhs, + const basic_string_view& rhs) + { + return basic_string_view(lhs) > rhs; + } + + template + inline bool operator>(const basic_string_view& lhs, + const std::basic_string& rhs) + { + return lhs > basic_string_view(rhs); + } + + //-------------------------------------------------------------------------- + + template + inline bool operator<=(const basic_string_view& lhs, + const basic_string_view& rhs) + noexcept + { + return lhs.compare(rhs) <= 0; + } + + template + inline bool operator<=(const basic_string_view& lhs, + const CharT* rhs) + noexcept + { + return lhs <= basic_string_view(rhs); + } + + template + inline bool operator<=(const CharT* lhs, + const basic_string_view& rhs) + noexcept + { + return basic_string_view(lhs) <= rhs; + } + + template + inline bool operator<=(const std::basic_string& lhs, + const basic_string_view& rhs) + { + return basic_string_view(lhs) <= rhs; + } + + template + inline bool operator<=(const basic_string_view& lhs, + const std::basic_string& rhs) + { + return lhs <= basic_string_view(rhs); + } + + //-------------------------------------------------------------------------- + + template + inline bool operator>=(const basic_string_view& lhs, + const basic_string_view& rhs) + noexcept + { + return lhs.compare(rhs) >= 0; + } + + template + inline bool operator>=(const basic_string_view& lhs, + const CharT* rhs) + noexcept + { + return lhs >= basic_string_view(rhs); + } + + template + inline bool operator>=(const CharT* lhs, + const basic_string_view& rhs) + noexcept + { + return basic_string_view(lhs) >= rhs; + } + + template + inline bool operator>=(const std::basic_string& lhs, + const basic_string_view& rhs) + { + return basic_string_view(lhs) >= rhs; + } + + template + inline bool operator>=(const basic_string_view& lhs, + const std::basic_string& rhs) + { + return lhs >= basic_string_view(rhs); + } + +} // namespace std + +#endif /* BPSTD_DETAIL_STRING_VIEW_INL */ + +#endif /* BPSTD_STRING_VIEW_HPP */ diff --git a/external/arduino/stlarduino/support b/external/arduino/stlarduino/support new file mode 100644 index 000000000..9279987ad --- /dev/null +++ b/external/arduino/stlarduino/support @@ -0,0 +1,165 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include +#include +#include + +#ifndef HEADER_ULC_SUPPORT +#define HEADER_ULC_SUPPORT 1 + +using namespace std; + +//From C++ ABI spec +typedef enum { + _URC_NO_REASON = 0, + _URC_FOREIGN_EXCEPTION_CAUGHT = 1, + _URC_FATAL_PHASE2_ERROR = 2, + _URC_FATAL_PHASE1_ERROR = 3, + _URC_NORMAL_STOP = 4, + _URC_END_OF_STACK = 5, + _URC_HANDLER_FOUND = 6, + _URC_INSTALL_CONTEXT = 7, + _URC_CONTINUE_UNWIND = 8 +} _Unwind_Reason_Code; + + +typedef void (*_Unwind_Exception_Cleanup_Fn) + (_Unwind_Reason_Code reason, struct _Unwind_Exception *exc); + +//The following definitions were grabbed from the gcc implementation +typedef unsigned _Unwind_Ptr __attribute__((__mode__(__pointer__))); +typedef unsigned _Unwind_Word __attribute__((__mode__(__word__))); +typedef signed _Unwind_Sword __attribute__((__mode__(__word__))); +typedef unsigned _Unwind_Exception_Class __attribute__((__mode__(__DI__))); +typedef void (*_Unwind_Exception_Cleanup_Fn) (_Unwind_Reason_Code, struct _Unwind_Exception *); + +typedef int _Unwind_Action; +static const _Unwind_Action _UA_SEARCH_PHASE = 1; +static const _Unwind_Action _UA_CLEANUP_PHASE = 2; +static const _Unwind_Action _UA_HANDLER_FRAME = 4; +static const _Unwind_Action _UA_FORCE_UNWIND = 8; + +const _Unwind_Exception_Class __uclibcxx_exception_class = (((((((( + _Unwind_Exception_Class) 'u' << 8 | (_Unwind_Exception_Class) 'l') << 8 + | (_Unwind_Exception_Class) 'i') << 8 | (_Unwind_Exception_Class) 'b') << 8 + | (_Unwind_Exception_Class) 'C')<< 8 | (_Unwind_Exception_Class) '+') << 8 + | (_Unwind_Exception_Class) '+') << 8 | (_Unwind_Exception_Class) '\0'); + + +#define _UA_SEARCH_PHASE 1 +#define _UA_CLEANUP_PHASE 2 +#define _UA_HANDLER_FRAME 4 +#define _UA_FORCE_UNWIND 8 +#define _UA_END_OF_STACK 16 + +struct _Unwind_Exception{ + _Unwind_Exception_Class exception_class; //Type of exception, eg ulibC++\0 + _Unwind_Exception_Cleanup_Fn exception_cleanup; //Destructor if from diff runtime + _Unwind_Word private_1; //Don't touch at all! + _Unwind_Word private_2; //Don't touch at all! +} __attribute__((__aligned__)); + + +//The following structure is system-dependent and defined by the compiler +//Thus it's definition was copied from the gcc 3.4.0 header files +struct _Unwind_Context; +//{ +// void *reg[DWARF_FRAME_REGISTERS+1]; +// void *cfa; +// void *ra; +// void *lsda; +// struct dwarf_eh_bases bases; +// _Unwind_Word args_size; +//}; + + + +_Unwind_Reason_Code _Unwind_RaiseException ( struct _Unwind_Exception *exception_object ); + +//_Unwind_ForcedUnwind + +typedef _Unwind_Reason_Code (*_Unwind_Stop_Fn) + (int version, _Unwind_Action actions, _Unwind_Exception_Class exceptionClass, + struct _Unwind_Exception *exceptionObject, + struct _Unwind_Context *context, void *stop_parameter ); + +_Unwind_Reason_Code _Unwind_ForcedUnwind ( + struct _Unwind_Exception *exception_object, _Unwind_Stop_Fn stop, + void *stop_parameter ); + +void _Unwind_Resume (struct _Unwind_Exception *exception_object); +void _Unwind_DeleteException (struct _Unwind_Exception *exception_object); + +_Unwind_Word _Unwind_GetGR (struct _Unwind_Context *context, int index); +void _Unwind_SetGR (struct _Unwind_Context *context, int index, _Unwind_Word); + +_Unwind_Ptr _Unwind_GetIP (struct _Unwind_Context *context); +void _Unwind_SetIP (struct _Unwind_Context *context, _Unwind_Ptr new_value); + +_Unwind_Ptr _Unwind_GetLanguageSpecificData (struct _Unwind_Context *context); +_Unwind_Ptr _Unwind_GetRegionStart (struct _Unwind_Context *context); + +_Unwind_Reason_Code (*__personality_routine) + (int version, //Should be 1 + _Unwind_Action actions, //Actions the routine will perform (bitmask) + _Unwind_Exception_Class exceptionClass, //Type of exception - vendor is high 4 bytes + struct _Unwind_Exception *exceptionObject, //Points to exception header + struct _Unwind_Context *context); //Unwinder state information + + +/*The following part is the Level II ABI which is required for compatability*/ +//This might be the only stuff that *I* need to implement + +struct __cxa_exception { + std::type_info *exceptionType; //Type of thrown exception + void (*exceptionDestructor) (void *); //Pointer to the destructor + unexpected_handler unexpectedHandler; //Unexpected handler to use + terminate_handler terminateHandler; //Terminate handle to use + __cxa_exception *nextException; //per thread linked list + + int handlerCount; //How many handlers have caught this + int handlerSwitchValue; + const char *actionRecord; + const char *languageSpecificData; + void *catchTemp; + void *adjustedPtr; + + _Unwind_Exception unwindHeader; +}; + +struct __cxa_eh_globals { + __cxa_exception *caughtExceptions; + unsigned int uncaughtExceptions; +}; + +extern "C" __cxa_eh_globals *__cxa_get_globals(void); //Return ptr to the eh_globals object for current thread +extern "C" __cxa_eh_globals *__cxa_get_globals_fast(void); //Same as above, assumes that above called at least once + +extern "C" void *__cxa_allocate_exception(size_t thrown_size); //Allocate space for exception plus header +extern "C" void __cxa_free_exception(void *thrown_exception); //Free space allocated from the above + +extern "C" void __cxa_throw (void *thrown_exception, //This is the actual throw call +// std::type_info *tinfo, //Type of object + void * tinfo, //Type of object + void (*dest) (void *) ); //Pointer to destructor destroy object + + +#endif + diff --git a/external/arduino/stlarduino/support.cpp b/external/arduino/stlarduino/support.cpp new file mode 100644 index 000000000..28c6580a2 --- /dev/null +++ b/external/arduino/stlarduino/support.cpp @@ -0,0 +1,53 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include + +/*extern "C" void *__cxa_allocate_exception(size_t thrown_size){ + void * retval; + + /*The amount of data needed is the size of the object *PLUS* + the size of the header. The header is of struct __cxa_exception + The address needs to be adjusted because the pointer we return + should not point to the start of the memory, but to the point + where the object being thrown actually starts + + retval = malloc(thrown_size + sizeof(__cxa_exception)); + +// Check to see that we actuall allocated memory + if(retval == 0){ + std::terminate(); + } + + //Need to do a typecast to char* otherwize we are doing math with + //a void* which makes the compiler cranky (Like me) + return ((char *)retval + sizeof(__cxa_exception)); +} + +extern "C" void __cxa_free_exception(void *thrown_exception){ + + + +} + +extern "C" void __cxa_throw (void *thrown_exception, std::type_info *tinfo,void (*dest) (void *) ){ + + +} +*/ diff --git a/external/arduino/stlarduino/system_configuration.h b/external/arduino/stlarduino/system_configuration.h new file mode 100644 index 000000000..ced9adce1 --- /dev/null +++ b/external/arduino/stlarduino/system_configuration.h @@ -0,0 +1,47 @@ +/* + * Configuration for Arduino's compiler. + * >>> This is a guess <<< + */ +/* + * Version Number + */ +#define __UCLIBCXX_MAJOR__ 0 +#define __UCLIBCXX_MINOR__ 2 +#define __UCLIBCXX_SUBLEVEL__ 4 + +/* + * Target Features and Options + */ +#define __UCLIBCXX_HAS_FLOATS__ +#undef __UCLIBCXX_HAS_TLS__ +#define __WARNINGS__ "-Wall" +#define __BUILD_EXTRA_LIBRARIES__ "" +#define __HAVE_DOT_CONFIG__ 1 + +/* + * String and I/O Stream Support + */ +#undef __UCLIBCXX_HAS_WCHAR__ +#define __UCLIBCXX_IOSTREAM_BUFSIZE__ 32 +#undef __UCLIBCXX_HAS_LFS__ +#undef __UCLIBCXX_SUPPORT_CDIR__ +#undef __UCLIBCXX_SUPPORT_COUT__ +#undef __UCLIBCXX_SUPPORT_CERR__ +/* + * STL and Code Expansion + */ +//#define __UCLIBCXX_STL_BUFFER_SIZE__ 32 +#define __UCLIBCXX_STL_BUFFER_SIZE__ 8 +#undef __UCLIBCXX_CODE_EXPANSION__ + +/* + * Library Installation Options + */ +#define __UCLIBCXX_RUNTIME_PREFIX__ "/usr/uClibc++" +#define __UCLIBCXX_RUNTIME_INCLUDE_SUBDIR__ "/include" +#define __UCLIBCXX_RUNTIME_LIB_SUBDIR__ "/lib" +#define __UCLIBCXX_RUNTIME_BIN_SUBDIR__ "/bin" +#undef __UCLIBCXX_EXCEPTION_SUPPORT__ +#define __BUILD_STATIC_LIB__ 1 +#define __BUILD_ONLY_STATIC_LIB__ 1 +#undef __DODEBUG__ diff --git a/external/arduino/stlarduino/tuple b/external/arduino/stlarduino/tuple new file mode 100644 index 000000000..88a5988c9 --- /dev/null +++ b/external/arduino/stlarduino/tuple @@ -0,0 +1,84 @@ +#ifndef ARDUINO_TUPLE_H +#define ARDUINO_TUPLE_H + +namespace std +{ +template +struct microTupleGetHelper; + +template +struct tuple +{ +}; + +template struct seq {}; + +template struct gens : gens { }; + +template struct gens<0, S...>{ typedef seq type; }; + + + +template +struct tuple +{ + tuple(){}; + tuple(const T& first, const Rest& ... rest) + : first(first) + , rest(rest...) + {} + + T first; + tuple rest; + + template + auto get() -> decltype(microTupleGetHelper>::get(*this)) + { + return microTupleGetHelper>::get(*this); + } +}; + + +template +struct microTupleGetHelper<0, tuple> +{ + static T get(tuple& data) + { + return data.first; + } +}; + +template +struct microTupleGetHelper> +{ + static auto get(tuple& data) -> decltype(microTupleGetHelper>::get(data.rest)) + { + return microTupleGetHelper>::get(data.rest); + } +}; + + + +template +class ParamsPack +{ +public: + tuple params; + operator bool() const { if (func) return true; return false; }; + void (*func)(Args...); +private: + template + auto callFunc(seq) -> decltype(this->func(this->params.template get() ...)) + { + return func(params.template get() ...); + } +public: + auto getPack() -> decltype(this->callFunc(typename gens::type())) + { + return this->callFunc(typename gens::type()); // Item #1 + } + +}; + +} +#endif \ No newline at end of file diff --git a/external/arduino/stlarduino/type_traits b/external/arduino/stlarduino/type_traits new file mode 100644 index 000000000..fa1de40ce --- /dev/null +++ b/external/arduino/stlarduino/type_traits @@ -0,0 +1,92 @@ +/* Copyright (C) 2005 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include +#include +#include +#include +#include + +#ifndef __HEADER_TYPE_TRAITS +#define __HEADER_TYPE_TRAITS 1 + +#pragma GCC visibility push(default) + +namespace std{ + + struct _UCXXEXPORT __true_type{}; + struct _UCXXEXPORT __false_type{}; + + template class _UCXXEXPORT __is_integer{ + public: + typedef __false_type value; + }; + + template <> class _UCXXEXPORT __is_integer { + public: + typedef __true_type value; + }; + + template <> class _UCXXEXPORT __is_integer { + public: + typedef __true_type value; + }; + + template <> class _UCXXEXPORT __is_integer { + public: + typedef __true_type value; + }; + + template <> class _UCXXEXPORT __is_integer { + public: + typedef __true_type value; + }; + + template <> class _UCXXEXPORT __is_integer { + public: + typedef __true_type value; + }; + + template <> class _UCXXEXPORT __is_integer { + public: + typedef __true_type value; + }; + + template <> class _UCXXEXPORT __is_integer { + public: + typedef __true_type value; + }; + + template <> class _UCXXEXPORT __is_integer { + public: + typedef __true_type value; + }; + + template <> class _UCXXEXPORT __is_integer { + public: + typedef __true_type value; + }; + + + +} + +#pragma GCC visibility pop + +#endif + diff --git a/external/arduino/stlarduino/typeinfo b/external/arduino/stlarduino/typeinfo new file mode 100644 index 000000000..88a2639b8 --- /dev/null +++ b/external/arduino/stlarduino/typeinfo @@ -0,0 +1,156 @@ +// RTTI support for -*- C++ -*- +// Copyright (C) 1994, 1995, 1996, 1997, 1998, 2000, 2001, 2002 +// Free Software Foundation +// +// This file is part of GNU CC. +// +// GNU CC is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2, or (at your option) +// any later version. +// +// GNU CC is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with GNU CC; see the file COPYING. If not, write to +// the Free Software Foundation, 59 Temple Place - Suite 330, +// Boston, MA 02111-1307, USA. + +// As a special exception, you may use this file as part of a free software +// library without restriction. Specifically, if other files instantiate +// templates or use macros or inline functions from this file, or you compile +// this file and link it with other files to produce an executable, this +// file does not by itself cause the resulting executable to be covered by +// the GNU General Public License. This exception does not however +// invalidate any other reasons why the executable file might be covered by +// the GNU General Public License. + +/** @file typeinfo + * This header provides RTTI support. + */ + +#ifndef __TYPEINFO__ +#define __TYPEINFO__ + +#include + +extern "C++" { + +namespace __cxxabiv1 +{ + class __class_type_info; +} // namespace __cxxabiv1 + +#if !__GXX_WEAK__ + // If weak symbols are not supported, typeinfo names are not merged. + #define __GXX_MERGED_TYPEINFO_NAMES 0 +#else + // On platforms that support weak symbols, typeinfo names are merged. + #define __GXX_MERGED_TYPEINFO_NAMES 1 +#endif + +namespace std +{ + /** + * @brief Part of RTTI. + * + * The @c type_info class describes type information generated by + * an implementation. + */ + class type_info + { + public: + /** Destructor. Being the first non-inline virtual function, this + * controls in which translation unit the vtable is emitted. The + * compiler makes use of that information to know where to emit + * the runtime-mandated type_info structures in the new-abi. */ + virtual ~type_info(); + + private: + /// Assigning type_info is not supported. Made private. + type_info& operator=(const type_info&); + type_info(const type_info&); + + protected: + const char *__name; + + protected: + explicit type_info(const char *__n): __name(__n) { } + + public: + // the public interface + /** Returns an @e implementation-defined byte string; this is not + * portable between compilers! */ + const char* name() const + { return __name; } + +#if !__GXX_MERGED_TYPEINFO_NAMES + bool before(const type_info& __arg) const; + // In old abi, or when weak symbols are not supported, there can + // be multiple instances of a type_info object for one + // type. Uniqueness must use the _name value, not object address. + bool operator==(const type_info& __arg) const; +#else + /** Returns true if @c *this precedes @c __arg in the implementation's + * collation order. */ + // In new abi we can rely on type_info's NTBS being unique, + // and therefore address comparisons are sufficient. + bool before(const type_info& __arg) const + { return __name < __arg.__name; } + bool operator==(const type_info& __arg) const + { return __name == __arg.__name; } +#endif + bool operator!=(const type_info& __arg) const + { return !operator==(__arg); } + + // the internal interface + public: + // return true if this is a pointer type of some kind + virtual bool __is_pointer_p() const; + // return true if this is a function type + virtual bool __is_function_p() const; + + // Try and catch a thrown type. Store an adjusted pointer to the + // caught type in THR_OBJ. If THR_TYPE is not a pointer type, then + // THR_OBJ points to the thrown object. If THR_TYPE is a pointer + // type, then THR_OBJ is the pointer itself. OUTER indicates the + // number of outer pointers, and whether they were const + // qualified. + virtual bool __do_catch(const type_info *__thr_type, void **__thr_obj, + unsigned __outer) const; + + // internally used during catch matching + virtual bool __do_upcast(const __cxxabiv1::__class_type_info *__target, + void **__obj_ptr) const; + }; + + /** + * @brief Thrown during incorrect typecasting. + * + * If you attempt an invalid @c dynamic_cast expression, an instance of + * this class (or something derived from this class) is thrown. */ + class bad_cast : public exception + { + public: + bad_cast() throw() { } + // This declaration is not useless: + // http://gcc.gnu.org/onlinedocs/gcc-3.0.2/gcc_6.html#SEC118 + virtual ~bad_cast() throw(); + }; + + /** If you use a NULL pointer in a @c typeid expression, this is thrown. */ + class bad_typeid : public exception + { + public: + bad_typeid () throw() { } + // This declaration is not useless: + // http://gcc.gnu.org/onlinedocs/gcc-3.0.2/gcc_6.html#SEC118 + virtual ~bad_typeid() throw(); + }; +} // namespace std + +} // extern "C++" +#endif diff --git a/external/arduino/stlarduino/typeinfo.cpp b/external/arduino/stlarduino/typeinfo.cpp new file mode 100644 index 000000000..b8ea30197 --- /dev/null +++ b/external/arduino/stlarduino/typeinfo.cpp @@ -0,0 +1,34 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include + +namespace std{ + + _UCXXEXPORT bad_cast::~bad_cast() throw(){ + + } + + _UCXXEXPORT bad_typeid::~bad_typeid() throw(){ + + } + +} + + diff --git a/external/arduino/stlarduino/unwind-cxx.h b/external/arduino/stlarduino/unwind-cxx.h new file mode 100644 index 000000000..5b3cdb8f5 --- /dev/null +++ b/external/arduino/stlarduino/unwind-cxx.h @@ -0,0 +1,247 @@ +// -*- C++ -*- Exception handling and frame unwind runtime interface routines. +// Copyright (C) 2001 Free Software Foundation, Inc. +// +// This file is part of GCC. +// +// GCC is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2, or (at your option) +// any later version. +// +// GCC is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with GCC; see the file COPYING. If not, write to +// the Free Software Foundation, 59 Temple Place - Suite 330, +// Boston, MA 02111-1307, USA. + +// As a special exception, you may use this file as part of a free software +// library without restriction. Specifically, if other files instantiate +// templates or use macros or inline functions from this file, or you compile +// this file and link it with other files to produce an executable, this +// file does not by itself cause the resulting executable to be covered by +// the GNU General Public License. This exception does not however +// invalidate any other reasons why the executable file might be covered by +// the GNU General Public License. + +// This is derived from the C++ ABI for IA-64. Where we diverge +// for cross-architecture compatibility are noted with "@@@". + +#ifndef _UNWIND_CXX_H +#define _UNWIND_CXX_H 1 + +// Level 2: C++ ABI + +#include +#include +#include +#include "unwind.h" + +#ifdef __aarch64__ +typedef long _Atomic_word; +#elif defined __cris__ +typedef int _Atomic_word __attribute__ ((__aligned__ (4))); +#else +typedef int _Atomic_word; +#endif + +#pragma GCC visibility push(default) + +namespace __cxxabiv1 +{ + +// A primary C++ exception object consists of a header, which is a wrapper +// around an unwind object header with additional C++ specific information, +// followed by the exception object itself. + +struct __cxa_exception +{ + // Manage the exception object itself. + std::type_info *exceptionType; + void (*exceptionDestructor)(void *); + + // The C++ standard has entertaining rules wrt calling set_terminate + // and set_unexpected in the middle of the exception cleanup process. + std::unexpected_handler unexpectedHandler; + std::terminate_handler terminateHandler; + + // The caught exception stack threads through here. + __cxa_exception *nextException; + + // How many nested handlers have caught this exception. A negated + // value is a signal that this object has been rethrown. + int handlerCount; + + // Cache parsed handler data from the personality routine Phase 1 + // for Phase 2 and __cxa_call_unexpected. + int handlerSwitchValue; + const unsigned char *actionRecord; + const unsigned char *languageSpecificData; + _Unwind_Ptr catchTemp; + void *adjustedPtr; + + // The generic exception header. Must be last. + _Unwind_Exception unwindHeader; +}; + +struct __cxa_refcounted_exception +{ + // Manage this header. + _Atomic_word referenceCount; + // __cxa_exception must be last, and no padding can be after it. + __cxa_exception exc; +}; + +// A dependent C++ exception object consists of a header, which is a wrapper +// around an unwind object header with additional C++ specific information, +// followed by the exception object itself. +struct __cxa_dependent_exception +{ + // The primary exception + void *primaryException; + + // The C++ standard has entertaining rules wrt calling set_terminate + // and set_unexpected in the middle of the exception cleanup process. + std::unexpected_handler unexpectedHandler; + std::terminate_handler terminateHandler; + + // The caught exception stack threads through here. + __cxa_exception *nextException; + + // How many nested handlers have caught this exception. A negated + // value is a signal that this object has been rethrown. + int handlerCount; + + // Cache parsed handler data from the personality routine Phase 1 + // for Phase 2 and __cxa_call_unexpected. + int handlerSwitchValue; + const unsigned char *actionRecord; + const unsigned char *languageSpecificData; + _Unwind_Ptr catchTemp; + void *adjustedPtr; + + // The generic exception header. Must be last. + _Unwind_Exception unwindHeader; +}; + + +// Each thread in a C++ program has access to a __cxa_eh_globals object. +struct __cxa_eh_globals +{ + __cxa_exception *caughtExceptions; + unsigned int uncaughtExceptions; +}; + + +// The __cxa_eh_globals for the current thread can be obtained by using +// either of the following functions. The "fast" version assumes at least +// one prior call of __cxa_get_globals has been made from the current +// thread, so no initialization is necessary. +extern "C" __cxa_eh_globals *__cxa_get_globals () throw(); +extern "C" __cxa_eh_globals *__cxa_get_globals_fast () throw(); + +// Allocate memory for the primary exception plus the thrown object. +extern "C" void *__cxa_allocate_exception(std::size_t thrown_size) throw(); +// Allocate memory for dependent exception. +extern "C" __cxa_dependent_exception *__cxa_allocate_dependent_exception() throw(); + +// Free the space allocated for the primary exception. +extern "C" void __cxa_free_exception(void *thrown_exception) throw(); +// Free the space allocated for the dependent exception. +extern "C" void __cxa_free_dependent_exception(__cxa_dependent_exception *dependent_exception) throw(); + +// Throw the exception. +extern "C" void __cxa_throw (void *thrown_exception, + std::type_info *tinfo, + void (*dest) (void *)) + __attribute__((noreturn)); + +// Used to implement exception handlers. +extern "C" void *__cxa_begin_catch (void *) throw(); +extern "C" void __cxa_end_catch (); +extern "C" void __cxa_rethrow () __attribute__((noreturn)); + +// These facilitate code generation for recurring situations. +extern "C" void __cxa_bad_cast (); +extern "C" void __cxa_bad_typeid (); + +// @@@ These are not directly specified by the IA-64 C++ ABI. + +// Handles re-checking the exception specification if unexpectedHandler +// throws, and if bad_exception needs to be thrown. Called from the +// compiler. +extern "C" void __cxa_call_unexpected (void *) __attribute__((noreturn)); + +// Invokes given handler, dying appropriately if the user handler was +// so inconsiderate as to return. +extern void __terminate(std::terminate_handler) throw () __attribute__((noreturn)); +extern void __unexpected(std::unexpected_handler) __attribute__((noreturn)); + +// The current installed user handlers. +extern std::terminate_handler __terminate_handler; +extern std::unexpected_handler __unexpected_handler; + +// These are explicitly GNU C++ specific. + +// This is the exception class we report -- "GNUCC++\0". +const _Unwind_Exception_Class __gxx_exception_class +#ifndef __ARM_EABI_UNWINDER__ += ((((((((_Unwind_Exception_Class) 'G' + << 8 | (_Unwind_Exception_Class) 'N') + << 8 | (_Unwind_Exception_Class) 'U') + << 8 | (_Unwind_Exception_Class) 'C') + << 8 | (_Unwind_Exception_Class) 'C') + << 8 | (_Unwind_Exception_Class) '+') + << 8 | (_Unwind_Exception_Class) '+') + << 8 | (_Unwind_Exception_Class) '\0'); +#else += "GNUCC++"; +#endif + +// GNU C++ personality routine, Version 0. +extern "C" _Unwind_Reason_Code __gxx_personality_v0 + (int, _Unwind_Action, _Unwind_Exception_Class, + struct _Unwind_Exception *, struct _Unwind_Context *); + +// GNU C++ sjlj personality routine, Version 0. +extern "C" _Unwind_Reason_Code __gxx_personality_sj0 + (int, _Unwind_Action, _Unwind_Exception_Class, + struct _Unwind_Exception *, struct _Unwind_Context *); + +// Acquire the C++ exception header from the C++ object. +static inline __cxa_exception * +__get_exception_header_from_obj (void *ptr) +{ + return reinterpret_cast<__cxa_exception *>(ptr) - 1; +} + +// Acquire the C++ exception header from the generic exception header. +static inline __cxa_exception * +__get_exception_header_from_ue (_Unwind_Exception *exc) +{ + return reinterpret_cast<__cxa_exception *>(exc + 1) - 1; +} + +// Acquire the C++ refcounted exception header from the C++ object. +static inline __cxa_refcounted_exception * +__get_refcounted_exception_header_from_obj (void *ptr) +{ + return reinterpret_cast<__cxa_refcounted_exception *>(ptr) - 1; +} + +// Acquire the C++ refcounted exception header from the generic exception +// header. +static inline __cxa_refcounted_exception * +__get_refcounted_exception_header_from_ue (_Unwind_Exception *exc) +{ + return reinterpret_cast<__cxa_refcounted_exception *>(exc + 1) - 1; +} + +} /* namespace __cxxabiv1 */ + +#pragma GCC visibility pop + +#endif // _UNWIND_CXX_H diff --git a/external/arduino/stlarduino/utility b/external/arduino/stlarduino/utility new file mode 100644 index 000000000..b65467924 --- /dev/null +++ b/external/arduino/stlarduino/utility @@ -0,0 +1,88 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*/ + + +#include + + +#ifndef __STD_HEADER_UTILITY +#define __STD_HEADER_UTILITY 1 + +#pragma GCC visibility push(default) + +namespace std{ + + namespace rel_ops { + template inline bool operator!=(const T& x, const T& y){ + return !(x == y); + } + + template inline bool operator> (const T& x, const T& y){ + return ( y < x); + } + + template inline bool operator<=(const T& x, const T& y){ + return !( y < x ); + } + + template inline bool operator>=(const T& x, const T& y){ + return !(x < y); + } + } + + template struct _UCXXEXPORT pair { + typedef T1 first_type; + typedef T2 second_type; + + T1 first; + T2 second; + pair() : first(), second() { } + pair(const T1& x, const T2& y) : first(x), second(y) { } + template pair(const pair &p) : first(p.first), second(p.second) { } + }; + + template bool operator==(const pair& x, const pair& y){ + using namespace rel_ops; + return (x.first == y.first && x.second==y.second); + } + template bool operator< (const pair& x, const pair& y){ + return x.first < y.first || (!(y.first < x.first) && x.second < y.second); + } + template bool operator!=(const pair& x, const pair& y){ + return !(x == y); + } + template bool operator> (const pair& x, const pair& y){ + return y < x; + } + template bool operator>=(const pair& x, const pair& y){ + return !(x < y); + } + template bool operator<=(const pair& x, const pair& y){ + return !(y < x); + } + template pair make_pair(const T1& x, const T2& y){ + return pair(x, y); + } + + +} + +#pragma GCC visibility pop + +#endif //__STD_HEADER_UTILITY diff --git a/external/arduino/stlarduino/utility.cpp b/external/arduino/stlarduino/utility.cpp new file mode 100644 index 000000000..b2f8995d7 --- /dev/null +++ b/external/arduino/stlarduino/utility.cpp @@ -0,0 +1,30 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*/ + + +#include + + +namespace std{ + + + +} + + diff --git a/external/arduino/stlarduino/valarray b/external/arduino/stlarduino/valarray new file mode 100644 index 000000000..09d929c49 --- /dev/null +++ b/external/arduino/stlarduino/valarray @@ -0,0 +1,1042 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include + +#ifndef __HEADER_STD_VALARRAY +#define __HEADER_STD_VALARRAY 1 + +#include +#include + +#pragma GCC visibility push(default) + +namespace std{ + + template class valarray; + class slice; + template class slice_array; + class gslice; + template class gslice_array; + template class mask_array; + template class indirect_array; + + //Actual class definitions + + + class _UCXXEXPORT slice { + protected: + size_t sta; + size_t siz; + size_t str; + + public: + slice() : sta(0), siz(0), str(0){ } + slice(size_t a, size_t b, size_t c) : sta(a), siz(b), str(c) { } + slice(const slice& s) : sta(s.sta), siz(s.siz), str(s.str) { } + ~slice() { } + size_t start() const{ + return sta; + } + size_t size() const{ + return siz; + } + size_t stride() const{ + return str; + } + }; + + + + template class _UCXXEXPORT valarray { + friend class slice_array; + protected: + T * data; + size_t length; + + public: + typedef T value_type; + + valarray() : data(0), length(0) { } + + explicit valarray(size_t t) : data(0), length(t){ + data = new T[length]; + } + + valarray(const T& v, size_t t) : data(0), length(t){ + data = new T[length]; + for(size_t i = 0; i < length; ++i){ + data[i] = v; + } + } + valarray(const T* p, size_t t) : data(0), length(t) { + data = new T[length]; + for(size_t i = 0; i < length; ++i){ + data[i] = p[i]; + } + } + valarray(const valarray& v) : data(0), length(v.length){ + data = new T[length]; + for(size_t i = 0; i < length; ++i){ + data[i] = v.data[i]; + } + } + valarray(const slice_array & sa) : data(0), length(sa.s.size()){ + data = new T[length]; + for(unsigned int i = 0; i < length; ++i){ + data[i] = sa.array->data[sa.s.start() + i * sa.s.stride()]; + } + } + valarray(const gslice_array&); + valarray(const mask_array&); + valarray(const indirect_array&); + ~valarray(){ + delete [] data; + data = 0; + length = 0; + } + + valarray& operator=(const valarray& v){ + if (length != v.length) { // DR 630 + delete [] data; + length = v.length; + data = new T[length]; + } + for (size_t i = 0; i < length; ++i) { + data[i] = v.data[i]; + } + return *this; + } + valarray& operator=(const T& t){ + for(size_t i = 0; i < length; ++i){ + data[i] = t; + } + return *this; + } + valarray& operator=(const slice_array& sa){ + for(size_t i =0; i < length; ++i){ + data[i] = sa.data[sa.s.start() + i * sa.s.stride()]; + } + return *this; + } + valarray& operator=(const gslice_array&); + valarray& operator=(const mask_array&); + valarray& operator=(const indirect_array&); + + const T& operator[](size_t t) const{ + return data[t]; + } + T& operator[](size_t t){ + return data[t]; + } + + valarray operator[](slice s) const{ + valarray retval(s.size()); + for(unsigned int i = 0; i< s.size(); ++i){ + retval.data[i] = data[s.start() + i * s.stride()]; + } + return retval; + } + + slice_array operator[](slice sl){ + slice_array retval; + retval.s = sl; + retval.array = this; + return retval; + } + + valarray operator[](const gslice&) const; + gslice_array operator[](const gslice&); + valarray operator[](const valarray&) const; + mask_array operator[](const valarray&); + valarray operator[](const valarray&) const; + indirect_array operator[](const valarray&); + + valarray operator+() const{ + valarray retval(length); + for(size_t i = 0; i< length ; ++i){ + retval.data[i] = +data[i]; + } + return retval; + } + valarray operator-() const{ + valarray retval(length); + for(size_t i = 0; i< length; ++i){ + retval.data[i] = -data[i]; + } + return retval; + } + valarray operator~() const{ + valarray retval(length); + for(size_t i = 0; i< length ; ++i){ + retval.data[i] = ~data[i]; + } + return retval; + } + valarray operator!() const{ + valarray retval(length); + for (size_t i = 0; i < length ; ++i){ + retval[i] = !data[i]; + } + return retval; + } + valarray& operator*= (const T& t){ + for(size_t i=0;i& operator/= (const T& t){ + for(size_t i=0;i& operator%= (const T& t){ + for(size_t i=0;i& operator+= (const T& t){ + for(size_t i=0;i& operator-= (const T& t){ + for(size_t i=0;i& operator^= (const T& t){ + for(size_t i=0;i& operator&= (const T& t){ + for(size_t i=0;i& operator|= (const T& t){ + for(size_t i=0;i& operator<<=(const T& t){ + for(size_t i=0;i& operator>>=(const T& t){ + for(size_t i=0;i>= t; + } + return *this; + } + valarray& operator*= (const valarray& a){ + for(size_t i=0;i& operator/= (const valarray& a){ + for(size_t i=0;i& operator%= (const valarray& a){ + for(size_t i=0;i& operator+= (const valarray& a){ + for(size_t i=0;i& operator-= (const valarray& a){ + for(size_t i=0;i& operator^= (const valarray& a){ + for(size_t i=0;i& operator|= (const valarray& a){ + for(size_t i=0;i& operator&= (const valarray& a){ + for(size_t i=0;i& operator<<=(const valarray& a){ + for(size_t i=0;i& operator>>=(const valarray& a){ + for(size_t i=0;i>= a.data[i]; + } + return *this; + } +#if 0 + void swap(valarray& other) noexcept { + std::swap(length, other.length); + std::swap(data, other.data); + } +#endif + size_t size() const{ + return length; + } + + T sum() const{ + T retval(data[0]); + for(size_t i = 1; i< length; ++i){ + retval += data[i]; + } + return retval; + } + + T min() const{ + T retval(data[0]); + for(size_t i = 1; i< length; ++i){ + if(data[i] < retval){ + retval = data[i]; + } + } + return retval; + } + + T max() const{ + T retval(data[0]); + for(size_t i = 1; i< length; ++i){ + if(retval < data[i]){ + retval = data[i]; + } + } + return retval; + } + + valarray shift (int n) const{ + valarray retval(length); + if (n < 0) { + if (-size_t(n) > length) + n = -int(length); + } else { + if (size_t(n) > length) + n = int(length); + } + for (size_t i = 0; i < length ; ++i) { + if ((n + i) < length) + retval.data[i] = data[n + i]; + } + return retval; + } + valarray cshift(int n) const{ + valarray retval(length); + if (length == 0) + return retval; + if (n < 0) { + if (-size_t(n) > length) + n = -int(-size_t(n) % length); + n = length + n; + } else { + if (size_t(n) > length) + n = int(size_t(n) % length); + } + for (size_t i = 0; i < length ; ++i){ + retval.data[i] = data[(n + i) % length]; + } + return retval; + } + valarray apply(T func(T) ) const{ + valarray retval(length); + for(size_t i = 0; i< length; ++i){ + retval.data[i] = func(data[i]); + } + return retval; + } + valarray apply(T func(const T&)) const{ + valarray retval(length); + for(size_t i = 0; i< length; ++i){ + retval.data[i] = func(data[i]); + } + return retval; + } + void resize(size_t sz, T c = T()){ + delete [] data; + data = 0; + if(sz > 0){ + data = new T[sz]; + for(size_t i = 0; i < sz; ++i){ + data[i] = c; + } + } + length = sz; + } + }; + + + + template class _UCXXEXPORT slice_array { + friend class valarray; + public: + typedef T value_type; + + void operator= (const valarray& v) const{ + for(unsigned int i = 0; i < s.size(); ++i){ + array->data[s.start() + i * s.stride()] = v[i]; + } + } + void operator= (const T & v){ + for(unsigned int i = 0; i < s.size(); ++i){ + array->data[s.start() + i * s.stride()] = v; + } + } + void fill(const T & v){ + for(unsigned int i = 0; i < s.size(); ++i){ + array->data[s.start() + i * s.stride()] = v; + } + } + void operator*= (const valarray& v) const{ + for(unsigned int i = 0; i < s.size(); ++i){ + array->data[s.start() + i * s.stride()] *= v[i]; + } + } + void operator/= (const valarray& v) const{ + for(unsigned int i = 0; i < s.size(); ++i){ + array->data[s.start() + i * s.stride()] /= v[i]; + } + } + void operator%= (const valarray& v) const{ + for(unsigned int i = 0; i < s.size(); ++i){ + array->data[s.start() + i * s.stride()] %= v[i]; + } + } + void operator+= (const valarray& v) const{ + for(unsigned int i = 0; i < s.size(); ++i){ + array->data[s.start() + i * s.stride()] += v[i]; + } + } + void operator-= (const valarray& v) const{ + for(unsigned int i = 0; i < s.size(); ++i){ + array->data[s.start() + i * s.stride()] -= v[i]; + } + } + void operator^= (const valarray& v) const{ + for(unsigned int i = 0; i < s.size(); ++i){ + array->data[s.start() + i * s.stride()] ^= v[i]; + } + } + void operator&= (const valarray& v) const{ + for(unsigned int i = 0; i < s.size(); ++i){ + array->data[s.start() + i * s.stride()] &= v[i]; + } + } + void operator|= (const valarray& v) const{ + for(unsigned int i = 0; i < s.size(); ++i){ + array->data[s.start() + i * s.stride()] |= v[i]; + } + } + void operator<<=(const valarray& v) const{ + for(unsigned int i = 0; i < s.size(); ++i){ + array->data[s.start() + i * s.stride()] <<= v[i]; + } + } + void operator>>=(const valarray& v) const{ + for(unsigned int i = 0; i < s.size(); ++i){ + array->data[s.start() + i * s.stride()] >>= v[i]; + } + } + ~slice_array(){ + array = 0; + } + + private: + slice_array() : array(0){ } + + public: + slice_array(const slice_array& sa) : array(sa.array), s(sa.s){ } + slice_array& operator=(const slice_array& sa){ + array = sa.array; + s = sa.s; + return *this; + } + + private: + valarray * array; + slice s; + }; + + + class _UCXXEXPORT gslice { + private: + size_t sta; + valarray siz; + valarray str; + + public: + gslice() : sta(0), siz(), str() { } // DR 543 + gslice(size_t s, const valarray& l, const valarray& d) + : sta(s), siz(l), str(d) { } + + size_t start() const{ + return sta; + } + valarray size() const{ + return siz; + } + valarray stride() const{ + return str; + } + }; + + template class gslice_array { + private: + friend class valarray; + + public: + ~gslice_array(); + + void operator=(const valarray& array) const; + void operator*=(const valarray& array) const; + void operator/=(const valarray& array) const; + void operator%=(const valarray& array) const; + void operator+=(const valarray& array) const; + void operator-=(const valarray& array) const; + void operator^=(const valarray& array) const; + void operator&=(const valarray& array) const; + void operator|=(const valarray& array) const; + void operator<<=(const valarray& array) const; + void operator>>=(const valarray& array) const; + + void operator=(const T&); + + private: + gslice_array(); + gslice_array(const gslice_array&); + gslice_array& operator= (const gslice_array& array); + }; + + + + template valarray operator* (const valarray& lhs, const valarray& rhs){ + valarray retval(lhs); + retval *= rhs; + return retval; + } + + template valarray operator* (const valarray& lhs, const T& rhs){ + valarray retval(lhs); + retval *= rhs; + return retval; + } + template valarray operator* (const T& lhs, const valarray& rhs){ + valarray retval(rhs); + retval *= lhs; + return retval; + } + template valarray operator/ (const valarray& lhs, const valarray& rhs){ + valarray retval(lhs); + retval /= rhs; + return retval; + } + template valarray operator/ (const valarray& lhs, const T& rhs){ + valarray retval(lhs); + retval /= rhs; + return retval; + } + template valarray operator/ (const T& lhs, const valarray& rhs){ + valarray retval(lhs, rhs.size()); + retval /= rhs; + return retval; + } + template valarray operator% (const valarray& lhs, const valarray& rhs){ + valarray retval(lhs); + retval %= rhs; + return retval; + } + template valarray operator% (const valarray& lhs, const T& rhs){ + valarray retval(lhs); + retval %= rhs; + return retval; + } + template valarray operator% (const T& lhs, const valarray& rhs){ + valarray retval(lhs, rhs.size()); + retval %= rhs; + return retval; + } + template valarray operator+ (const valarray& lhs, const valarray& rhs){ + valarray retval(lhs); + retval += rhs; + return retval; + } + template valarray operator+ (const valarray& lhs, const T& rhs){ + valarray retval(lhs); + retval += rhs; + return retval; + } + template valarray operator+ (const T& lhs, const valarray& rhs){ + valarray retval(lhs, rhs.size()); + retval += rhs; + return retval; + } + template valarray operator- (const valarray& lhs, const valarray& rhs){ + valarray retval(lhs); + retval -= rhs; + return retval; + } + template valarray operator- (const valarray& lhs, const T& rhs){ + valarray retval(lhs); + retval -= rhs; + return retval; + } + template valarray operator- (const T& lhs, const valarray& rhs){ + valarray retval(lhs, rhs.size()); + retval -= rhs; + return retval; + } + template valarray operator^ (const valarray& lhs, const valarray& rhs){ + valarray retval(lhs); + retval ^= rhs; + return retval; + } + template valarray operator^ (const valarray& lhs, const T& rhs){ + valarray retval(lhs); + retval ^= rhs; + return retval; + } + template valarray operator^ (const T& lhs, const valarray& rhs){ + valarray retval(lhs, rhs.size()); + retval ^= rhs; + return retval; + } + template valarray operator& (const valarray& lhs, const valarray& rhs){ + valarray retval(lhs); + retval &= rhs; + return retval; + } + template valarray operator& (const valarray& lhs, const T& rhs){ + valarray retval(lhs); + retval &= rhs; + return retval; + } + template valarray operator& (const T& lhs, const valarray& rhs){ + valarray retval(lhs, rhs.size()); + retval &= rhs; + return retval; + } + template valarray operator| (const valarray& lhs, const valarray& rhs){ + valarray retval(lhs); + retval |= rhs; + return retval; + } + template valarray operator| (const valarray& lhs, const T& rhs){ + valarray retval(lhs); + retval |= rhs; + return retval; + } + template valarray operator| (const T& lhs, const valarray& rhs){ + valarray retval(lhs, rhs.size()); + retval |= rhs; + return retval; + } + template valarray operator<<(const valarray& lhs, const valarray& rhs){ + valarray retval(lhs); + retval <<= rhs; + return retval; + } + template valarray operator<<(const valarray& lhs, const T& rhs){ + valarray retval(lhs); + retval <<= rhs; + return retval; + } + template valarray operator<<(const T& lhs, const valarray& rhs){ + valarray retval(lhs, rhs.size()); + retval <<= rhs; + return retval; + } + template valarray operator>>(const valarray& lhs, const valarray& rhs){ + valarray retval(lhs); + retval >>= rhs; + return retval; + } + template valarray operator>>(const valarray& lhs, const T& rhs){ + valarray retval(lhs); + retval >>= rhs; + return retval; + } + template valarray operator>>(const T& lhs, const valarray& rhs){ + valarray retval(lhs, rhs.size()); + retval >>= rhs; + return retval; + } + + template valarray operator&&(const valarray& lhs, const valarray& rhs){ + valarray retval(lhs.size()); + for(size_t i = 0; i < retval.size(); ++i){ + retval[i] = lhs[i] && rhs[i]; + } + return retval; + } + template valarray operator&&(const valarray& lhs, const T& rhs){ + valarray retval(lhs.size()); + for(size_t i = 0; i valarray operator&&(const T& lhs, const valarray& rhs){ + valarray retval(rhs.size()); + for(size_t i = 0; i valarray operator||(const valarray&lhs, const valarray& rhs){ + valarray retval(lhs.size()); + for(size_t i = 0; i valarray operator||(const valarray& lhs, const T& rhs){ + valarray retval(lhs.size()); + for(size_t i = 0; i valarray operator||(const T& lhs, const valarray& rhs){ + valarray retval(rhs.size()); + for(size_t i = 0; i < retval.size(); ++i){ + retval[i] = lhs || rhs[i]; + } + return retval; + } + + template valarray operator==(const valarray& lhs, const valarray& rhs){ + valarray retval(lhs.size()); + for(size_t i = 0; i valarray operator==(const valarray& lhs, const T& rhs){ + valarray retval(lhs.size()); + for(size_t i = 0; i < retval.size(); ++i){ + retval[i] = lhs[i] == rhs; + } + return retval; + } + template valarray operator==(const T& lhs, const valarray& rhs){ + valarray retval(rhs.size()); + for(size_t i = 0; i < retval.size(); ++i){ + retval[i] = lhs == rhs[i]; + } + return retval; + } + template valarray operator!=(const valarray& lhs, const valarray& rhs){ + valarray retval(lhs.size()); + for(size_t i = 0; i valarray operator!=(const valarray& lhs, const T& rhs){ + valarray retval(lhs.size()); + for(size_t i = 0; i valarray operator!=(const T& lhs, const valarray& rhs){ + valarray retval(rhs.size()); + for(size_t i = 0; i valarray operator< (const valarray& lhs, const valarray& rhs){ + valarray retval(lhs.size()); + for(size_t i = 0; i valarray operator< (const valarray& lhs, const T& rhs){ + valarray retval(lhs.size()); + for(size_t i = 0; i valarray operator< (const T& lhs, const valarray& rhs){ + valarray retval(rhs.size()); + for(size_t i = 0; i valarray operator> (const valarray& lhs, const valarray& rhs){ + valarray retval(lhs.size()); + for(size_t i = 0; i rhs[i]; + } + return retval; + } + template valarray operator> (const valarray& lhs, const T& rhs){ + valarray retval(lhs.size()); + for(size_t i = 0; i rhs; + } + return retval; + } + template valarray operator> (const T& lhs, const valarray& rhs){ + valarray retval(rhs.size()); + for(size_t i = 0; i rhs[i]; + } + return retval; + } + template valarray operator<=(const valarray& lhs, const valarray& rhs){ + valarray retval(lhs.size()); + for(size_t i = 0; i valarray operator<=(const valarray& lhs, const T& rhs){ + valarray retval(lhs.size()); + for(size_t i = 0; i valarray operator<=(const T& lhs, const valarray& rhs){ + valarray retval(rhs.size()); + for(size_t i = 0; i valarray operator>=(const valarray& lhs, const valarray& rhs){ + valarray retval(lhs.size()); + for(size_t i = 0; i = rhs[i]; + } + return retval; + } + template valarray operator>=(const valarray& lhs, const T& rhs){ + valarray retval(lhs.size()); + for(size_t i = 0; i = rhs; + } + return retval; + } + template valarray operator>=(const T& lhs, const valarray& rhs){ + valarray retval(rhs.size()); + for(size_t i = 0; i = rhs[i]; + } + return retval; + } + template T min(const valarray& x){ + T retval(x[0]); + for(size_t i = 1; i < x.size(); ++i){ + if(x[i] < retval){ + retval = x[i]; + } + } + } + template T max(const valarray& x){ + T retval(x[0]); + for(size_t i = 1; i < x.size(); ++i){ + if(x[i] > retval){ + retval = x[i]; + } + } + } + + template valarray abs (const valarray& x){ + valarray retval(x.size()); + for(size_t i = 0; i < retval.size(); ++i){ + retval[i] = abs(x[i]); + } + return retval; + } + template valarray acos (const valarray& x){ + valarray retval(x.size()); + for(size_t i = 0; i < retval.size(); ++i){ + retval[i] = acos(x[i]); + } + return retval; + } + template valarray asin (const valarray& x){ + valarray retval(x.size()); + for(size_t i = 0; i < retval.size(); ++i){ + retval[i] = asin(x[i]); + } + return retval; + } + template valarray atan (const valarray& x){ + valarray retval(x.size()); + for(size_t i = 0; i < retval.size(); ++i){ + retval[i] = atan(x[i]); + } + return retval; + } + template valarray atan2(const valarray& y, const valarray& x){ + valarray retval(y.size()); + for(size_t i = 0; i < retval.size(); ++i){ + retval[i] = atan2(y[i], x[i]); + } + return retval; + } + template valarray atan2(const valarray& y, const T& x){ + valarray retval(y.size()); + for(size_t i = 0; i < retval.size(); ++i){ + retval[i] = atan2(y[i], x); + } + return retval; + } + template valarray atan2(const T& y, const valarray& x){ + valarray retval(x.size()); + for(size_t i = 0; i < retval.size(); ++i){ + retval[i] = atan2(y, x[i]); + } + return retval; + } + template valarray cos (const valarray& x){ + valarray retval(x.size()); + for(size_t i = 0; i < retval.size(); ++i){ + retval[i] = cos(x[i]); + } + return retval; + } + template valarray cosh (const valarray& x){ + valarray retval(x.size()); + for(size_t i = 0; i < retval.size(); ++i){ + retval[i] = cosh(x[i]); + } + return retval; + } + template valarray exp (const valarray& x){ + valarray retval(x.size()); + for(size_t i = 0; i < retval.size(); ++i){ + retval[i] = exp(x[i]); + } + return retval; + } + template valarray log (const valarray& x){ + valarray retval(x.size()); + for(size_t i = 0; i < retval.size(); ++i){ + retval[i] = log(x[i]); + } + return retval; + } + template valarray log10(const valarray& x){ + valarray retval(x.size()); + for(size_t i = 0; i < retval.size(); ++i){ + retval[i] = log10(x[i]); + } + return retval; + } + template valarray pow (const valarray& x, const valarray& y){ + valarray retval(x.size()); + for(size_t i = 0; i < retval.size(); ++i){ + retval[i] = pow(x[i], y[i]); + } + return retval; + } + template valarray pow (const valarray& x, const T& y){ + valarray retval(x.size()); + for(size_t i = 0; i < retval.size(); ++i){ + retval[i] = pow(x[i], y); + } + return retval; + } + template valarray pow (const T& x, const valarray& y){ + valarray retval(y.size()); + for(size_t i = 0; i < retval.size(); ++i){ + retval[i] = pow(x, y[i]); + } + return retval; + } + template valarray sin (const valarray& x){ + valarray retval(x.size()); + for(size_t i = 0; i < retval.size(); ++i){ + retval[i] = sin(x[i]); + } + return retval; + } + template valarray sinh (const valarray& x){ + valarray retval(x.size()); + for(size_t i = 0; i < retval.size(); ++i){ + retval[i] = sinh(x[i]); + } + return retval; + } + template valarray sqrt (const valarray& x){ + valarray retval(x.size()); + for(size_t i = 0; i < retval.size(); ++i){ + retval[i] = sqrt(x[i]); + } + return retval; + } + template valarray tan (const valarray& x){ + valarray retval(x.size()); + for(size_t i = 0; i < retval.size(); ++i){ + retval[i] = tan(x[i]); + } + return retval; + } + template valarray tanh (const valarray& x){ + valarray retval(x.size()); + for(size_t i = 0; i < retval.size(); ++i){ + retval[i] = tanh(x[i]); + } + return retval; + } +} + +#pragma GCC visibility pop + +#endif diff --git a/external/arduino/stlarduino/valarray.cpp b/external/arduino/stlarduino/valarray.cpp new file mode 100644 index 000000000..e4bd504cf --- /dev/null +++ b/external/arduino/stlarduino/valarray.cpp @@ -0,0 +1,29 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include + +namespace std{ + + + + +} + + diff --git a/external/arduino/stlarduino/vector b/external/arduino/stlarduino/vector new file mode 100644 index 000000000..1c113e377 --- /dev/null +++ b/external/arduino/stlarduino/vector @@ -0,0 +1,532 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*/ + +#include +#include +#include +#include +#include +#include +#include + +#ifndef __STD_HEADER_VECTOR +#define __STD_HEADER_VECTOR + +#pragma GCC visibility push(default) + +namespace std{ + + template > class vector; + template bool operator==(const vector& x, const vector& y); + template bool operator< (const vector& x, const vector& y); + template bool operator!=(const vector& x, const vector& y); + template bool operator> (const vector& x, const vector& y); + template bool operator>=(const vector& x, const vector& y); + template bool operator<=(const vector& x, const vector& y); + template void swap(vector& x, vector& y); + + template class _UCXXEXPORT vector { + public: + + typedef typename Allocator::reference reference; + typedef typename Allocator::const_reference const_reference; + typedef typename Allocator::size_type size_type; + typedef typename Allocator::difference_type difference_type; + typedef typename Allocator::pointer pointer; + typedef typename Allocator::const_pointer const_pointer; + + typedef T* iterator; + typedef const T* const_iterator; + typedef T value_type; + typedef Allocator allocator_type; + typedef std::reverse_iterator reverse_iterator; + typedef std::reverse_iterator const_reverse_iterator; + + explicit _UCXXEXPORT vector(const Allocator& al= Allocator()): data(0), //defaultValue(T()), + data_size(__UCLIBCXX_STL_BUFFER_SIZE__), elements(0), a(al) + { + data = a.allocate(data_size); + } + + explicit _UCXXEXPORT vector(size_type n, const T& value = T(), const Allocator& al= Allocator()) : + data(0), data_size(0), elements(0), a(al) + { + data_size = n + __UCLIBCXX_STL_BUFFER_SIZE__; + data = a.allocate(data_size); + + resize(n, value); + } + + template _UCXXEXPORT + vector(InputIterator first, InputIterator last, const Allocator& al = Allocator()): + data(0), data_size(__UCLIBCXX_STL_BUFFER_SIZE__), elements(0), a(al) + { + data = a.allocate(data_size); + assign(first, last); + } + + _UCXXEXPORT vector(const vector& x){ + a = x.a; + + elements = x.elements; + data_size = elements + __UCLIBCXX_STL_BUFFER_SIZE__; + data = a.allocate(data_size); + + for(size_type i = 0; i < elements; i++){ + a.construct(data+i, x.data[i]); + } + } + + _UCXXEXPORT vector(initializer_list in, const Allocator & al=Allocator()) : + a(al) + { + data_size = in.size() + __UCLIBCXX_STL_BUFFER_SIZE__; + elements = in.size(); + data = a.allocate(data_size); + for(size_type i = 0; i < elements; i++) + a.construct(data+i, *(in.begin()+i)); + } + + _UCXXEXPORT ~vector(); //Below + + _UCXXEXPORT vector& operator=(const vector& x){ + if(&x == this){ + return *this; + } + + reserve(x.elements); //Make sure that we have enough actual memory + + + //Copy as many elements as possible + + size_t minElements = elements; + if(minElements > x.elements){ + minElements = x.elements; + } + for(size_t i = 0; i < minElements; ++i){ + data[i] = x.data[i]; + } + + //If we need to add new elements + if(elements < x.elements){ + for(size_t i = elements; i< x.elements; ++i){ + a.construct(data+i, x.data[i]); + ++elements; + } + } + + if(elements > x.elements){ + downsize(x.elements); + } + + return *this; + } + + template _UCXXEXPORT void assign(InputIterator first, InputIterator last){ + clear(); + insert(begin(), first, last); + } + + template _UCXXEXPORT void assign(Size n, const U& u = U()){ + clear(); + resize(n, u); + } + + _UCXXEXPORT void assign(initializer_list in){ + clear(); + insert(begin(), in.begin(), in.end()); + } + + inline allocator_type get_allocator() const{ + return a; + } + + inline iterator begin(){ + return data; + } + + inline const_iterator begin() const{ + return data; + } + + inline iterator end(){ + return (data + elements); + } + + inline const_iterator end() const{ + return (data + elements); + } + + inline reverse_iterator rbegin(){ + return reverse_iterator(end()); + } + + inline const_reverse_iterator rbegin() const{ + return const_reverse_iterator(end()); + } + + inline reverse_iterator rend(){ + return reverse_iterator(begin()); + } + + inline const_reverse_iterator rend() const{ + return const_reverse_iterator(begin()); + } + + inline size_type size() const{ + return elements; + } + + _UCXXEXPORT size_type max_size() const{ + return ((size_type)(-1)) / sizeof(T); + } + + void downsize(size_type sz); + void resize(size_type sz, const T & c = T()); + + inline size_type capacity() const{ + return data_size; + } + + inline bool empty() const{ + return (size() == 0); + } + + void reserve(size_type n); + + inline reference operator[](size_type n){ + return data[n]; + } + + inline const_reference operator[](size_type n) const{ + return data[n]; + } + + _UCXXEXPORT const_reference at(size_type n) const{ + if(n >= elements){ + __throw_out_of_range("Invalid subscript"); + } + return data[n]; + } + + _UCXXEXPORT reference at(size_type n){ + if(n >= elements){ + __throw_out_of_range("Invalid subscript"); + } + return data[n]; + } + + inline reference front(){ + return data[0]; + } + + inline const_reference front() const{ + return data[0]; + } + + inline reference back(){ + return data[ size() - 1]; + } + + inline const_reference back() const{ + return data[ size() - 1 ]; + } + + inline void push_back(const T& x){ + resize( size() + 1, x); + } + + inline void pop_back(){ + downsize(size() - 1); + } + + _UCXXEXPORT iterator insert(iterator position, const T& x = T()){ + size_type index = position - data; + resize(size() + 1, x); + for(size_type i = elements - 1; i > index; --i){ + data[i] = data[i-1]; + } + data[index] = x; + return (data + index); + } + + _UCXXEXPORT void _insert_fill(iterator position, size_type n, const T & x){ + size_type index = position - data; + resize(size() + n, x); + + for(size_type i = elements -1; (i > (index+n-1)); --i){ + data[i] = data[i-n]; + } + for(size_type i = 0; i < n; i++){ + data[i + index] = x; + } + } + + template _UCXXEXPORT + void _insert_from_iterator(iterator position, InputIterator first, InputIterator last) + { + T temp; + while(first !=last){ + temp = *first; + position = insert(position, temp); + ++position; + ++first; + } + } + + template + inline void _dispatch_insert(iterator position, InputIterator first, InputIterator last, __true_type) + { + _insert_fill(position, first, last); + } + + template + inline void _dispatch_insert(iterator position, InputIterator first, InputIterator last, __false_type) + { + _insert_from_iterator(position, first, last); + } + + inline void insert(iterator position, size_type n, const T& x ){ + _insert_fill(position, n, x); + } + + template inline void insert(iterator position, InputIterator first, InputIterator last){ + typedef typename __is_integer::value __some_type; + _dispatch_insert(position, first, last, __some_type()); + } + + _UCXXEXPORT iterator erase(iterator position){ + size_type index = position - data; + for(size_type i = index; i < (elements - 1); ++i){ + data[i] = data[i+1]; + } + downsize(size() - 1); + return (data + index); + } + + _UCXXEXPORT iterator erase(iterator first, iterator last){ + size_type index = first - data; + size_type width = last - first; + for(size_type i = index; i < (elements - width) ;++i){ + data[i] = data[i+width]; + } + downsize(size() - width); + return (data + index); + } + + _UCXXEXPORT void swap(vector& v){ + if(this == &v){ //Avoid dv.swap(v) + return; + } + T* ptr; + size_type temp; + + //Swap pointers first + ptr = data; + data = v.data; + v.data = ptr; + + //Swap element counts + temp = elements; + elements = v.elements; + v.elements = temp; + + //Swap data size + temp = data_size; + data_size = v.data_size; + v.data_size = temp; + } + + _UCXXEXPORT void clear(){ + downsize(0); + } + + protected: + T* data; + size_type data_size; + size_type elements; + Allocator a; + }; + + + + //Here go template instantiations + + template _UCXXEXPORT vector::~vector(){ + for(size_t i = 0; i < elements; ++i){ + a.destroy(data + i); + } + a.deallocate(data, data_size); + } + + + template _UCXXEXPORT void vector::reserve(size_type n){ + if(n > data_size){ //We never shrink... + T * temp_ptr = data; + size_type temp_size = data_size; + + data_size = n; + data = a.allocate(data_size); + + for(size_type i = 0; i _UCXXEXPORT void vector::resize(size_type sz, const T & c){ + if(sz > elements){ //Need to actually call constructor + if(sz > data_size){ + reserve(sz + __UCLIBCXX_STL_BUFFER_SIZE__); + } + + for(size_type i = elements; i _UCXXEXPORT void vector::downsize(size_type sz){ + if(sz < elements){ //Actually are downsizing + for(size_t i = sz; i< elements; ++i){ + a.destroy(data+i); + } + elements = sz; + } + } + + +#ifndef __UCLIBCXX_COMPILE_VECTOR__ +#ifdef __UCLIBCXX_EXPAND_VECTOR_BASIC__ + + +#ifdef __UCLIBCXX_EXPAND_CONSTRUCTORS_DESTRUCTORS__ + template<> _UCXXEXPORT vector >::vector(const allocator& al); + template<> _UCXXEXPORT vector >::vector(size_type n, const char & value, const allocator & al); + + template<> _UCXXEXPORT vector >::~vector(); + template<> _UCXXEXPORT vector >::~vector(); + +#endif //__UCLIBCXX_EXPAND_CONSTRUCTORS_DESTRUCTORS__ + + template<> _UCXXEXPORT void vector >::reserve(size_type n); + template<> _UCXXEXPORT void vector >::reserve(size_type n); + template<> _UCXXEXPORT void vector >::reserve(size_type n); + template<> _UCXXEXPORT void vector >::reserve(size_type n); + template<> _UCXXEXPORT void vector >::reserve(size_type n); + template<> _UCXXEXPORT void vector >::reserve(size_type n); + template<> _UCXXEXPORT void vector >::reserve(size_type n); + template<> _UCXXEXPORT void vector >::reserve(size_type n); + template<> _UCXXEXPORT void vector >::reserve(size_type n); + template<> _UCXXEXPORT void vector >::reserve(size_type n); + template<> _UCXXEXPORT void vector >::reserve(size_type n); + + template<> _UCXXEXPORT void vector >::resize(size_type sz, const char & c); + template<> _UCXXEXPORT void + vector >::resize(size_type sz, const unsigned char & c); + template<> _UCXXEXPORT void vector >::resize(size_type sz, const short & c); + template<> _UCXXEXPORT void + vector >::resize(size_type sz, const unsigned short int & c); + template<> _UCXXEXPORT void vector >::resize(size_type sz, const int & c); + template<> _UCXXEXPORT void vector >::resize(size_type sz, const unsigned int & c); + template<> _UCXXEXPORT void vector >::resize(size_type sz, const long int & c); + template<> _UCXXEXPORT void + vector >::resize(size_type sz, const unsigned long int & c); + template<> _UCXXEXPORT void vector >::resize(size_type sz, const float & c); + template<> _UCXXEXPORT void vector >::resize(size_type sz, const double & c); + template<> _UCXXEXPORT void vector >::resize(size_type sz, const bool & c); + +#elif defined __UCLIBCXX_EXPAND_STRING_CHAR__ + +#ifdef __UCLIBCXX_EXPAND_CONSTRUCTORS_DESTRUCTORS__ + + template<> _UCXXEXPORT vector >::vector(const allocator& al); + template<> _UCXXEXPORT vector >::vector(size_type n, const char & value, const allocator & al); + template<> _UCXXEXPORT vector >::~vector(); + +#endif + + template<> _UCXXEXPORT void vector >::reserve(size_type n); + template<> _UCXXEXPORT void vector >::resize(size_type sz, const char & c); + +#endif +#endif + + + + template _UCXXEXPORT bool + operator==(const vector& x, const vector& y) + { + if(x.size() !=y.size() ){ + return false; + } + for(size_t i = 0; i < x.size(); ++i){ + if(x[i] != y[i]){ + return false; + } + } + return true; + } + + template _UCXXEXPORT bool + operator< (const vector& x, const vector& y) + { + less::iterator >::value_type> c; + return lexicographical_compare(x.begin(), x.end(), y.begin(), y.end(), c); + } + template _UCXXEXPORT bool + operator!=(const vector& x, const vector& y) + { + return !(x == y); + } + template _UCXXEXPORT bool + operator> (const vector& x, const vector& y) + { + greater::iterator >::value_type> c; + return lexicographical_compare(x.begin(), x.end(), y.begin(), y.end(), c); + } + template _UCXXEXPORT bool + operator>=(const vector& x, const vector& y) + { + greater_equal::iterator >::value_type> c; + return lexicographical_compare(x.begin(), x.end(), y.begin(), y.end(), c); + } + template _UCXXEXPORT bool + operator<=(const vector& x, const vector& y) + { + less_equal::iterator >::value_type> c; + return lexicographical_compare(x.begin(), x.end(), y.begin(), y.end(), c); + } + + template _UCXXEXPORT void swap(vector& x, vector& y){ + x.swap(y); + } + +} + +#pragma GCC visibility pop + +#endif + diff --git a/external/arduino/stlarduino/vector.cpp b/external/arduino/stlarduino/vector.cpp new file mode 100644 index 000000000..5ee0de188 --- /dev/null +++ b/external/arduino/stlarduino/vector.cpp @@ -0,0 +1,83 @@ +/* Copyright (C) 2004 Garrett A. Kajmowicz + + This file is part of the uClibc++ Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#define __UCLIBCXX_COMPILE_VECTOR__ 1 + + +#include + +namespace std{ + + +#ifdef __UCLIBCXX_EXPAND_VECTOR_BASIC__ + +#ifdef __UCLIBCXX_EXPAND_CONSTRUCTORS_DESTRUCTORS__ + + template _UCXXEXPORT vector >::vector(const allocator& al); + template _UCXXEXPORT vector >::vector(size_type n, const char & value, const allocator & al); + + template _UCXXEXPORT vector >::~vector(); + template _UCXXEXPORT vector >::~vector(); + +#endif //__UCLIBCXX_EXPAND_CONSTRUCTORS_DESTRUCTORS__ + + template _UCXXEXPORT void vector >::reserve(size_type n); + template _UCXXEXPORT void vector >::reserve(size_type n); + template _UCXXEXPORT void vector >::reserve(size_type n); + template _UCXXEXPORT void vector >::reserve(size_type n); + template _UCXXEXPORT void vector >::reserve(size_type n); + template _UCXXEXPORT void vector >::reserve(size_type n); + template _UCXXEXPORT void vector >::reserve(size_type n); + template _UCXXEXPORT void vector >::reserve(size_type n); + template _UCXXEXPORT void vector >::reserve(size_type n); + template _UCXXEXPORT void vector >::reserve(size_type n); + template _UCXXEXPORT void vector >::reserve(size_type n); + + template _UCXXEXPORT void vector >::resize(size_type sz, const char & c); + template _UCXXEXPORT void vector >::resize(size_type sz, const unsigned char & c); + template _UCXXEXPORT void vector >::resize(size_type sz, const short & c); + template _UCXXEXPORT void vector > + ::resize(size_type sz, const unsigned short int & c); + template _UCXXEXPORT void vector >::resize(size_type sz, const int & c); + template _UCXXEXPORT void vector >::resize(size_type sz, const unsigned int & c); + template _UCXXEXPORT void vector >::resize(size_type sz, const long int & c); + template _UCXXEXPORT void vector >:: + resize(size_type sz, const unsigned long int & c); + template _UCXXEXPORT void vector >::resize(size_type sz, const float & c); + template _UCXXEXPORT void vector >::resize(size_type sz, const double & c); + template _UCXXEXPORT void vector >::resize(size_type sz, const bool & c); + +#elif defined __UCLIBCXX_EXPAND_STRING_CHAR__ + + +#ifdef __UCLIBCXX_EXPAND_CONSTRUCTORS_DESTRUCTORS__ + template _UCXXEXPORT vector >::vector(const allocator& al); + template _UCXXEXPORT vector >::vector(size_type n, const char & value, const allocator & al); + template _UCXXEXPORT vector >::~vector(); +#endif // __UCLIBCXX_EXPAND_CONSTRUCTORS_DESTRUCTORS__ + + template _UCXXEXPORT void vector >::reserve(size_type n); + template _UCXXEXPORT void vector >::resize(size_type sz, const char & c); + +#endif + + + + +} diff --git a/external/libuv/LICENSE b/external/libuv/LICENSE new file mode 100644 index 000000000..28f17339e --- /dev/null +++ b/external/libuv/LICENSE @@ -0,0 +1,70 @@ +libuv is licensed for use as follows: + +==== +Copyright (c) 2015-present libuv project contributors. + +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. +==== + +This license applies to parts of libuv originating from the +https://github.com/joyent/libuv repository: + +==== + +Copyright Joyent, Inc. and other Node 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. + +==== + +This license applies to all parts of libuv that are not externally +maintained libraries. + +The externally maintained libraries used by libuv are: + + - tree.h (from FreeBSD), copyright Niels Provos. Two clause BSD license. + + - inet_pton and inet_ntop implementations, contained in src/inet.c, are + copyright the Internet Systems Consortium, Inc., and licensed under the ISC + license. + + - stdint-msvc2008.h (from msinttypes), copyright Alexander Chemeris. Three + clause BSD license. + + - pthread-fixes.c, copyright Google Inc. and Sony Mobile Communications AB. + Three clause BSD license. + + - android-ifaddrs.h, android-ifaddrs.c, copyright Berkeley Software Design + Inc, Kenneth MacKay and Emergya (Cloud4all, FP7/2007-2013, grant agreement + n° 289016). Three clause BSD license. diff --git a/external/libuv/include/uv.h b/external/libuv/include/uv.h new file mode 100644 index 000000000..fec663136 --- /dev/null +++ b/external/libuv/include/uv.h @@ -0,0 +1,1812 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +/* See https://github.com/libuv/libuv#documentation for documentation. */ + +#ifndef UV_H +#define UV_H +#ifdef __cplusplus +extern "C" { +#endif + +#if defined(BUILDING_UV_SHARED) && defined(USING_UV_SHARED) +#error "Define either BUILDING_UV_SHARED or USING_UV_SHARED, not both." +#endif + +#ifdef _WIN32 + /* Windows - set up dll import/export decorators. */ +# if defined(BUILDING_UV_SHARED) + /* Building shared library. */ +# define UV_EXTERN __declspec(dllexport) +# elif defined(USING_UV_SHARED) + /* Using shared library. */ +# define UV_EXTERN __declspec(dllimport) +# else + /* Building static library. */ +# define UV_EXTERN /* nothing */ +# endif +#elif __GNUC__ >= 4 +# define UV_EXTERN __attribute__((visibility("default"))) +#else +# define UV_EXTERN /* nothing */ +#endif + +#include "uv/errno.h" +#include "uv/version.h" +#include +#include + +#if defined(_MSC_VER) && _MSC_VER < 1600 +# include "uv/stdint-msvc2008.h" +#else +# include +#endif + +#if defined(_WIN32) +# include "uv/win.h" +#else +# include "uv/unix.h" +#endif + +/* Expand this list if necessary. */ +#define UV_ERRNO_MAP(XX) \ + XX(E2BIG, "argument list too long") \ + XX(EACCES, "permission denied") \ + XX(EADDRINUSE, "address already in use") \ + XX(EADDRNOTAVAIL, "address not available") \ + XX(EAFNOSUPPORT, "address family not supported") \ + XX(EAGAIN, "resource temporarily unavailable") \ + XX(EAI_ADDRFAMILY, "address family not supported") \ + XX(EAI_AGAIN, "temporary failure") \ + XX(EAI_BADFLAGS, "bad ai_flags value") \ + XX(EAI_BADHINTS, "invalid value for hints") \ + XX(EAI_CANCELED, "request canceled") \ + XX(EAI_FAIL, "permanent failure") \ + XX(EAI_FAMILY, "ai_family not supported") \ + XX(EAI_MEMORY, "out of memory") \ + XX(EAI_NODATA, "no address") \ + XX(EAI_NONAME, "unknown node or service") \ + XX(EAI_OVERFLOW, "argument buffer overflow") \ + XX(EAI_PROTOCOL, "resolved protocol is unknown") \ + XX(EAI_SERVICE, "service not available for socket type") \ + XX(EAI_SOCKTYPE, "socket type not supported") \ + XX(EALREADY, "connection already in progress") \ + XX(EBADF, "bad file descriptor") \ + XX(EBUSY, "resource busy or locked") \ + XX(ECANCELED, "operation canceled") \ + XX(ECHARSET, "invalid Unicode character") \ + XX(ECONNABORTED, "software caused connection abort") \ + XX(ECONNREFUSED, "connection refused") \ + XX(ECONNRESET, "connection reset by peer") \ + XX(EDESTADDRREQ, "destination address required") \ + XX(EEXIST, "file already exists") \ + XX(EFAULT, "bad address in system call argument") \ + XX(EFBIG, "file too large") \ + XX(EHOSTUNREACH, "host is unreachable") \ + XX(EINTR, "interrupted system call") \ + XX(EINVAL, "invalid argument") \ + XX(EIO, "i/o error") \ + XX(EISCONN, "socket is already connected") \ + XX(EISDIR, "illegal operation on a directory") \ + XX(ELOOP, "too many symbolic links encountered") \ + XX(EMFILE, "too many open files") \ + XX(EMSGSIZE, "message too long") \ + XX(ENAMETOOLONG, "name too long") \ + XX(ENETDOWN, "network is down") \ + XX(ENETUNREACH, "network is unreachable") \ + XX(ENFILE, "file table overflow") \ + XX(ENOBUFS, "no buffer space available") \ + XX(ENODEV, "no such device") \ + XX(ENOENT, "no such file or directory") \ + XX(ENOMEM, "not enough memory") \ + XX(ENONET, "machine is not on the network") \ + XX(ENOPROTOOPT, "protocol not available") \ + XX(ENOSPC, "no space left on device") \ + XX(ENOSYS, "function not implemented") \ + XX(ENOTCONN, "socket is not connected") \ + XX(ENOTDIR, "not a directory") \ + XX(ENOTEMPTY, "directory not empty") \ + XX(ENOTSOCK, "socket operation on non-socket") \ + XX(ENOTSUP, "operation not supported on socket") \ + XX(EPERM, "operation not permitted") \ + XX(EPIPE, "broken pipe") \ + XX(EPROTO, "protocol error") \ + XX(EPROTONOSUPPORT, "protocol not supported") \ + XX(EPROTOTYPE, "protocol wrong type for socket") \ + XX(ERANGE, "result too large") \ + XX(EROFS, "read-only file system") \ + XX(ESHUTDOWN, "cannot send after transport endpoint shutdown") \ + XX(ESPIPE, "invalid seek") \ + XX(ESRCH, "no such process") \ + XX(ETIMEDOUT, "connection timed out") \ + XX(ETXTBSY, "text file is busy") \ + XX(EXDEV, "cross-device link not permitted") \ + XX(UNKNOWN, "unknown error") \ + XX(EOF, "end of file") \ + XX(ENXIO, "no such device or address") \ + XX(EMLINK, "too many links") \ + XX(EHOSTDOWN, "host is down") \ + XX(EREMOTEIO, "remote I/O error") \ + XX(ENOTTY, "inappropriate ioctl for device") \ + XX(EFTYPE, "inappropriate file type or format") \ + XX(EILSEQ, "illegal byte sequence") \ + +#define UV_HANDLE_TYPE_MAP(XX) \ + XX(ASYNC, async) \ + XX(CHECK, check) \ + XX(FS_EVENT, fs_event) \ + XX(FS_POLL, fs_poll) \ + XX(HANDLE, handle) \ + XX(IDLE, idle) \ + XX(NAMED_PIPE, pipe) \ + XX(POLL, poll) \ + XX(PREPARE, prepare) \ + XX(PROCESS, process) \ + XX(STREAM, stream) \ + XX(TCP, tcp) \ + XX(TIMER, timer) \ + XX(TTY, tty) \ + XX(UDP, udp) \ + XX(SIGNAL, signal) \ + +#define UV_REQ_TYPE_MAP(XX) \ + XX(REQ, req) \ + XX(CONNECT, connect) \ + XX(WRITE, write) \ + XX(SHUTDOWN, shutdown) \ + XX(UDP_SEND, udp_send) \ + XX(FS, fs) \ + XX(WORK, work) \ + XX(GETADDRINFO, getaddrinfo) \ + XX(GETNAMEINFO, getnameinfo) \ + XX(RANDOM, random) \ + +typedef enum { +#define XX(code, _) UV_ ## code = UV__ ## code, + UV_ERRNO_MAP(XX) +#undef XX + UV_ERRNO_MAX = UV__EOF - 1 +} uv_errno_t; + +typedef enum { + UV_UNKNOWN_HANDLE = 0, +#define XX(uc, lc) UV_##uc, + UV_HANDLE_TYPE_MAP(XX) +#undef XX + UV_FILE, + UV_HANDLE_TYPE_MAX +} uv_handle_type; + +typedef enum { + UV_UNKNOWN_REQ = 0, +#define XX(uc, lc) UV_##uc, + UV_REQ_TYPE_MAP(XX) +#undef XX + UV_REQ_TYPE_PRIVATE + UV_REQ_TYPE_MAX +} uv_req_type; + + +/* Handle types. */ +typedef struct uv_loop_s uv_loop_t; +typedef struct uv_handle_s uv_handle_t; +typedef struct uv_dir_s uv_dir_t; +typedef struct uv_stream_s uv_stream_t; +typedef struct uv_tcp_s uv_tcp_t; +typedef struct uv_udp_s uv_udp_t; +typedef struct uv_pipe_s uv_pipe_t; +typedef struct uv_tty_s uv_tty_t; +typedef struct uv_poll_s uv_poll_t; +typedef struct uv_timer_s uv_timer_t; +typedef struct uv_prepare_s uv_prepare_t; +typedef struct uv_check_s uv_check_t; +typedef struct uv_idle_s uv_idle_t; +typedef struct uv_async_s uv_async_t; +typedef struct uv_process_s uv_process_t; +typedef struct uv_fs_event_s uv_fs_event_t; +typedef struct uv_fs_poll_s uv_fs_poll_t; +typedef struct uv_signal_s uv_signal_t; + +/* Request types. */ +typedef struct uv_req_s uv_req_t; +typedef struct uv_getaddrinfo_s uv_getaddrinfo_t; +typedef struct uv_getnameinfo_s uv_getnameinfo_t; +typedef struct uv_shutdown_s uv_shutdown_t; +typedef struct uv_write_s uv_write_t; +typedef struct uv_connect_s uv_connect_t; +typedef struct uv_udp_send_s uv_udp_send_t; +typedef struct uv_fs_s uv_fs_t; +typedef struct uv_work_s uv_work_t; +typedef struct uv_random_s uv_random_t; + +/* None of the above. */ +typedef struct uv_env_item_s uv_env_item_t; +typedef struct uv_cpu_info_s uv_cpu_info_t; +typedef struct uv_interface_address_s uv_interface_address_t; +typedef struct uv_dirent_s uv_dirent_t; +typedef struct uv_passwd_s uv_passwd_t; +typedef struct uv_utsname_s uv_utsname_t; +typedef struct uv_statfs_s uv_statfs_t; + +typedef enum { + UV_LOOP_BLOCK_SIGNAL +} uv_loop_option; + +typedef enum { + UV_RUN_DEFAULT = 0, + UV_RUN_ONCE, + UV_RUN_NOWAIT +} uv_run_mode; + + +UV_EXTERN unsigned int uv_version(void); +UV_EXTERN const char* uv_version_string(void); + +typedef void* (*uv_malloc_func)(size_t size); +typedef void* (*uv_realloc_func)(void* ptr, size_t size); +typedef void* (*uv_calloc_func)(size_t count, size_t size); +typedef void (*uv_free_func)(void* ptr); + +UV_EXTERN void uv_library_shutdown(void); + +UV_EXTERN int uv_replace_allocator(uv_malloc_func malloc_func, + uv_realloc_func realloc_func, + uv_calloc_func calloc_func, + uv_free_func free_func); + +UV_EXTERN uv_loop_t* uv_default_loop(void); +UV_EXTERN int uv_loop_init(uv_loop_t* loop); +UV_EXTERN int uv_loop_close(uv_loop_t* loop); +/* + * NOTE: + * This function is DEPRECATED (to be removed after 0.12), users should + * allocate the loop manually and use uv_loop_init instead. + */ +UV_EXTERN uv_loop_t* uv_loop_new(void); +/* + * NOTE: + * This function is DEPRECATED (to be removed after 0.12). Users should use + * uv_loop_close and free the memory manually instead. + */ +UV_EXTERN void uv_loop_delete(uv_loop_t*); +UV_EXTERN size_t uv_loop_size(void); +UV_EXTERN int uv_loop_alive(const uv_loop_t* loop); +UV_EXTERN int uv_loop_configure(uv_loop_t* loop, uv_loop_option option, ...); +UV_EXTERN int uv_loop_fork(uv_loop_t* loop); + +UV_EXTERN int uv_run(uv_loop_t*, uv_run_mode mode); +UV_EXTERN void uv_stop(uv_loop_t*); + +UV_EXTERN void uv_ref(uv_handle_t*); +UV_EXTERN void uv_unref(uv_handle_t*); +UV_EXTERN int uv_has_ref(const uv_handle_t*); + +UV_EXTERN void uv_update_time(uv_loop_t*); +UV_EXTERN uint64_t uv_now(const uv_loop_t*); + +UV_EXTERN int uv_backend_fd(const uv_loop_t*); +UV_EXTERN int uv_backend_timeout(const uv_loop_t*); + +typedef void (*uv_alloc_cb)(uv_handle_t* handle, + size_t suggested_size, + uv_buf_t* buf); +typedef void (*uv_read_cb)(uv_stream_t* stream, + ssize_t nread, + const uv_buf_t* buf); +typedef void (*uv_write_cb)(uv_write_t* req, int status); +typedef void (*uv_connect_cb)(uv_connect_t* req, int status); +typedef void (*uv_shutdown_cb)(uv_shutdown_t* req, int status); +typedef void (*uv_connection_cb)(uv_stream_t* server, int status); +typedef void (*uv_close_cb)(uv_handle_t* handle); +typedef void (*uv_poll_cb)(uv_poll_t* handle, int status, int events); +typedef void (*uv_timer_cb)(uv_timer_t* handle); +typedef void (*uv_async_cb)(uv_async_t* handle); +typedef void (*uv_prepare_cb)(uv_prepare_t* handle); +typedef void (*uv_check_cb)(uv_check_t* handle); +typedef void (*uv_idle_cb)(uv_idle_t* handle); +typedef void (*uv_exit_cb)(uv_process_t*, int64_t exit_status, int term_signal); +typedef void (*uv_walk_cb)(uv_handle_t* handle, void* arg); +typedef void (*uv_fs_cb)(uv_fs_t* req); +typedef void (*uv_work_cb)(uv_work_t* req); +typedef void (*uv_after_work_cb)(uv_work_t* req, int status); +typedef void (*uv_getaddrinfo_cb)(uv_getaddrinfo_t* req, + int status, + struct addrinfo* res); +typedef void (*uv_getnameinfo_cb)(uv_getnameinfo_t* req, + int status, + const char* hostname, + const char* service); +typedef void (*uv_random_cb)(uv_random_t* req, + int status, + void* buf, + size_t buflen); + +typedef struct { + long tv_sec; + long tv_nsec; +} uv_timespec_t; + + +typedef struct { + uint64_t st_dev; + uint64_t st_mode; + uint64_t st_nlink; + uint64_t st_uid; + uint64_t st_gid; + uint64_t st_rdev; + uint64_t st_ino; + uint64_t st_size; + uint64_t st_blksize; + uint64_t st_blocks; + uint64_t st_flags; + uint64_t st_gen; + uv_timespec_t st_atim; + uv_timespec_t st_mtim; + uv_timespec_t st_ctim; + uv_timespec_t st_birthtim; +} uv_stat_t; + + +typedef void (*uv_fs_event_cb)(uv_fs_event_t* handle, + const char* filename, + int events, + int status); + +typedef void (*uv_fs_poll_cb)(uv_fs_poll_t* handle, + int status, + const uv_stat_t* prev, + const uv_stat_t* curr); + +typedef void (*uv_signal_cb)(uv_signal_t* handle, int signum); + + +typedef enum { + UV_LEAVE_GROUP = 0, + UV_JOIN_GROUP +} uv_membership; + + +UV_EXTERN int uv_translate_sys_error(int sys_errno); + +UV_EXTERN const char* uv_strerror(int err); +UV_EXTERN char* uv_strerror_r(int err, char* buf, size_t buflen); + +UV_EXTERN const char* uv_err_name(int err); +UV_EXTERN char* uv_err_name_r(int err, char* buf, size_t buflen); + + +#define UV_REQ_FIELDS \ + /* public */ \ + void* data; \ + /* read-only */ \ + uv_req_type type; \ + /* private */ \ + void* reserved[6]; \ + UV_REQ_PRIVATE_FIELDS \ + +/* Abstract base class of all requests. */ +struct uv_req_s { + UV_REQ_FIELDS +}; + + +/* Platform-specific request types. */ +UV_PRIVATE_REQ_TYPES + + +UV_EXTERN int uv_shutdown(uv_shutdown_t* req, + uv_stream_t* handle, + uv_shutdown_cb cb); + +struct uv_shutdown_s { + UV_REQ_FIELDS + uv_stream_t* handle; + uv_shutdown_cb cb; + UV_SHUTDOWN_PRIVATE_FIELDS +}; + + +#define UV_HANDLE_FIELDS \ + /* public */ \ + void* data; \ + /* read-only */ \ + uv_loop_t* loop; \ + uv_handle_type type; \ + /* private */ \ + uv_close_cb close_cb; \ + void* handle_queue[2]; \ + union { \ + int fd; \ + void* reserved[4]; \ + } u; \ + UV_HANDLE_PRIVATE_FIELDS \ + +/* The abstract base class of all handles. */ +struct uv_handle_s { + UV_HANDLE_FIELDS +}; + +UV_EXTERN size_t uv_handle_size(uv_handle_type type); +UV_EXTERN uv_handle_type uv_handle_get_type(const uv_handle_t* handle); +UV_EXTERN const char* uv_handle_type_name(uv_handle_type type); +UV_EXTERN void* uv_handle_get_data(const uv_handle_t* handle); +UV_EXTERN uv_loop_t* uv_handle_get_loop(const uv_handle_t* handle); +UV_EXTERN void uv_handle_set_data(uv_handle_t* handle, void* data); + +UV_EXTERN size_t uv_req_size(uv_req_type type); +UV_EXTERN void* uv_req_get_data(const uv_req_t* req); +UV_EXTERN void uv_req_set_data(uv_req_t* req, void* data); +UV_EXTERN uv_req_type uv_req_get_type(const uv_req_t* req); +UV_EXTERN const char* uv_req_type_name(uv_req_type type); + +UV_EXTERN int uv_is_active(const uv_handle_t* handle); + +UV_EXTERN void uv_walk(uv_loop_t* loop, uv_walk_cb walk_cb, void* arg); + +/* Helpers for ad hoc debugging, no API/ABI stability guaranteed. */ +UV_EXTERN void uv_print_all_handles(uv_loop_t* loop, FILE* stream); +UV_EXTERN void uv_print_active_handles(uv_loop_t* loop, FILE* stream); + +UV_EXTERN void uv_close(uv_handle_t* handle, uv_close_cb close_cb); + +UV_EXTERN int uv_send_buffer_size(uv_handle_t* handle, int* value); +UV_EXTERN int uv_recv_buffer_size(uv_handle_t* handle, int* value); + +UV_EXTERN int uv_fileno(const uv_handle_t* handle, uv_os_fd_t* fd); + +UV_EXTERN uv_buf_t uv_buf_init(char* base, unsigned int len); + + +#define UV_STREAM_FIELDS \ + /* number of bytes queued for writing */ \ + size_t write_queue_size; \ + uv_alloc_cb alloc_cb; \ + uv_read_cb read_cb; \ + /* private */ \ + UV_STREAM_PRIVATE_FIELDS + +/* + * uv_stream_t is a subclass of uv_handle_t. + * + * uv_stream is an abstract class. + * + * uv_stream_t is the parent class of uv_tcp_t, uv_pipe_t and uv_tty_t. + */ +struct uv_stream_s { + UV_HANDLE_FIELDS + UV_STREAM_FIELDS +}; + +UV_EXTERN size_t uv_stream_get_write_queue_size(const uv_stream_t* stream); + +UV_EXTERN int uv_listen(uv_stream_t* stream, int backlog, uv_connection_cb cb); +UV_EXTERN int uv_accept(uv_stream_t* server, uv_stream_t* client); + +UV_EXTERN int uv_read_start(uv_stream_t*, + uv_alloc_cb alloc_cb, + uv_read_cb read_cb); +UV_EXTERN int uv_read_stop(uv_stream_t*); + +UV_EXTERN int uv_write(uv_write_t* req, + uv_stream_t* handle, + const uv_buf_t bufs[], + unsigned int nbufs, + uv_write_cb cb); +UV_EXTERN int uv_write2(uv_write_t* req, + uv_stream_t* handle, + const uv_buf_t bufs[], + unsigned int nbufs, + uv_stream_t* send_handle, + uv_write_cb cb); +UV_EXTERN int uv_try_write(uv_stream_t* handle, + const uv_buf_t bufs[], + unsigned int nbufs); + +/* uv_write_t is a subclass of uv_req_t. */ +struct uv_write_s { + UV_REQ_FIELDS + uv_write_cb cb; + uv_stream_t* send_handle; /* TODO: make private and unix-only in v2.x. */ + uv_stream_t* handle; + UV_WRITE_PRIVATE_FIELDS +}; + + +UV_EXTERN int uv_is_readable(const uv_stream_t* handle); +UV_EXTERN int uv_is_writable(const uv_stream_t* handle); + +UV_EXTERN int uv_stream_set_blocking(uv_stream_t* handle, int blocking); + +UV_EXTERN int uv_is_closing(const uv_handle_t* handle); + + +/* + * uv_tcp_t is a subclass of uv_stream_t. + * + * Represents a TCP stream or TCP server. + */ +struct uv_tcp_s { + UV_HANDLE_FIELDS + UV_STREAM_FIELDS + UV_TCP_PRIVATE_FIELDS +}; + +UV_EXTERN int uv_tcp_init(uv_loop_t*, uv_tcp_t* handle); +UV_EXTERN int uv_tcp_init_ex(uv_loop_t*, uv_tcp_t* handle, unsigned int flags); +UV_EXTERN int uv_tcp_open(uv_tcp_t* handle, uv_os_sock_t sock); +UV_EXTERN int uv_tcp_nodelay(uv_tcp_t* handle, int enable); +UV_EXTERN int uv_tcp_keepalive(uv_tcp_t* handle, + int enable, + unsigned int delay); +UV_EXTERN int uv_tcp_simultaneous_accepts(uv_tcp_t* handle, int enable); + +enum uv_tcp_flags { + /* Used with uv_tcp_bind, when an IPv6 address is used. */ + UV_TCP_IPV6ONLY = 1 +}; + +UV_EXTERN int uv_tcp_bind(uv_tcp_t* handle, + const struct sockaddr* addr, + unsigned int flags); +UV_EXTERN int uv_tcp_getsockname(const uv_tcp_t* handle, + struct sockaddr* name, + int* namelen); +UV_EXTERN int uv_tcp_getpeername(const uv_tcp_t* handle, + struct sockaddr* name, + int* namelen); +UV_EXTERN int uv_tcp_close_reset(uv_tcp_t* handle, uv_close_cb close_cb); +UV_EXTERN int uv_tcp_connect(uv_connect_t* req, + uv_tcp_t* handle, + const struct sockaddr* addr, + uv_connect_cb cb); + +/* uv_connect_t is a subclass of uv_req_t. */ +struct uv_connect_s { + UV_REQ_FIELDS + uv_connect_cb cb; + uv_stream_t* handle; + UV_CONNECT_PRIVATE_FIELDS +}; + + +/* + * UDP support. + */ + +enum uv_udp_flags { + /* Disables dual stack mode. */ + UV_UDP_IPV6ONLY = 1, + /* + * Indicates message was truncated because read buffer was too small. The + * remainder was discarded by the OS. Used in uv_udp_recv_cb. + */ + UV_UDP_PARTIAL = 2, + /* + * Indicates if SO_REUSEADDR will be set when binding the handle. + * This sets the SO_REUSEPORT socket flag on the BSDs and OS X. On other + * Unix platforms, it sets the SO_REUSEADDR flag. What that means is that + * multiple threads or processes can bind to the same address without error + * (provided they all set the flag) but only the last one to bind will receive + * any traffic, in effect "stealing" the port from the previous listener. + */ + UV_UDP_REUSEADDR = 4, + /* + * Indicates that the message was received by recvmmsg, so the buffer provided + * must not be freed by the recv_cb callback. + */ + UV_UDP_MMSG_CHUNK = 8, + + /* + * Indicates that recvmmsg should be used, if available. + */ + UV_UDP_RECVMMSG = 256 +}; + +typedef void (*uv_udp_send_cb)(uv_udp_send_t* req, int status); +typedef void (*uv_udp_recv_cb)(uv_udp_t* handle, + ssize_t nread, + const uv_buf_t* buf, + const struct sockaddr* addr, + unsigned flags); + +/* uv_udp_t is a subclass of uv_handle_t. */ +struct uv_udp_s { + UV_HANDLE_FIELDS + /* read-only */ + /* + * Number of bytes queued for sending. This field strictly shows how much + * information is currently queued. + */ + size_t send_queue_size; + /* + * Number of send requests currently in the queue awaiting to be processed. + */ + size_t send_queue_count; + UV_UDP_PRIVATE_FIELDS +}; + +/* uv_udp_send_t is a subclass of uv_req_t. */ +struct uv_udp_send_s { + UV_REQ_FIELDS + uv_udp_t* handle; + uv_udp_send_cb cb; + UV_UDP_SEND_PRIVATE_FIELDS +}; + +UV_EXTERN int uv_udp_init(uv_loop_t*, uv_udp_t* handle); +UV_EXTERN int uv_udp_init_ex(uv_loop_t*, uv_udp_t* handle, unsigned int flags); +UV_EXTERN int uv_udp_open(uv_udp_t* handle, uv_os_sock_t sock); +UV_EXTERN int uv_udp_bind(uv_udp_t* handle, + const struct sockaddr* addr, + unsigned int flags); +UV_EXTERN int uv_udp_connect(uv_udp_t* handle, const struct sockaddr* addr); + +UV_EXTERN int uv_udp_getpeername(const uv_udp_t* handle, + struct sockaddr* name, + int* namelen); +UV_EXTERN int uv_udp_getsockname(const uv_udp_t* handle, + struct sockaddr* name, + int* namelen); +UV_EXTERN int uv_udp_set_membership(uv_udp_t* handle, + const char* multicast_addr, + const char* interface_addr, + uv_membership membership); +UV_EXTERN int uv_udp_set_source_membership(uv_udp_t* handle, + const char* multicast_addr, + const char* interface_addr, + const char* source_addr, + uv_membership membership); +UV_EXTERN int uv_udp_set_multicast_loop(uv_udp_t* handle, int on); +UV_EXTERN int uv_udp_set_multicast_ttl(uv_udp_t* handle, int ttl); +UV_EXTERN int uv_udp_set_multicast_interface(uv_udp_t* handle, + const char* interface_addr); +UV_EXTERN int uv_udp_set_broadcast(uv_udp_t* handle, int on); +UV_EXTERN int uv_udp_set_ttl(uv_udp_t* handle, int ttl); +UV_EXTERN int uv_udp_send(uv_udp_send_t* req, + uv_udp_t* handle, + const uv_buf_t bufs[], + unsigned int nbufs, + const struct sockaddr* addr, + uv_udp_send_cb send_cb); +UV_EXTERN int uv_udp_try_send(uv_udp_t* handle, + const uv_buf_t bufs[], + unsigned int nbufs, + const struct sockaddr* addr); +UV_EXTERN int uv_udp_recv_start(uv_udp_t* handle, + uv_alloc_cb alloc_cb, + uv_udp_recv_cb recv_cb); +UV_EXTERN int uv_udp_recv_stop(uv_udp_t* handle); +UV_EXTERN size_t uv_udp_get_send_queue_size(const uv_udp_t* handle); +UV_EXTERN size_t uv_udp_get_send_queue_count(const uv_udp_t* handle); + + +/* + * uv_tty_t is a subclass of uv_stream_t. + * + * Representing a stream for the console. + */ +struct uv_tty_s { + UV_HANDLE_FIELDS + UV_STREAM_FIELDS + UV_TTY_PRIVATE_FIELDS +}; + +typedef enum { + /* Initial/normal terminal mode */ + UV_TTY_MODE_NORMAL, + /* Raw input mode (On Windows, ENABLE_WINDOW_INPUT is also enabled) */ + UV_TTY_MODE_RAW, + /* Binary-safe I/O mode for IPC (Unix-only) */ + UV_TTY_MODE_IO +} uv_tty_mode_t; + +typedef enum { + /* + * The console supports handling of virtual terminal sequences + * (Windows10 new console, ConEmu) + */ + UV_TTY_SUPPORTED, + /* The console cannot process the virtual terminal sequence. (Legacy + * console) + */ + UV_TTY_UNSUPPORTED +} uv_tty_vtermstate_t; + + +UV_EXTERN int uv_tty_init(uv_loop_t*, uv_tty_t*, uv_file fd, int readable); +UV_EXTERN int uv_tty_set_mode(uv_tty_t*, uv_tty_mode_t mode); +UV_EXTERN int uv_tty_reset_mode(void); +UV_EXTERN int uv_tty_get_winsize(uv_tty_t*, int* width, int* height); +UV_EXTERN void uv_tty_set_vterm_state(uv_tty_vtermstate_t state); +UV_EXTERN int uv_tty_get_vterm_state(uv_tty_vtermstate_t* state); + +#ifdef __cplusplus +extern "C++" { + +inline int uv_tty_set_mode(uv_tty_t* handle, int mode) { + return uv_tty_set_mode(handle, static_cast(mode)); +} + +} +#endif + +UV_EXTERN uv_handle_type uv_guess_handle(uv_file file); + +/* + * uv_pipe_t is a subclass of uv_stream_t. + * + * Representing a pipe stream or pipe server. On Windows this is a Named + * Pipe. On Unix this is a Unix domain socket. + */ +struct uv_pipe_s { + UV_HANDLE_FIELDS + UV_STREAM_FIELDS + int ipc; /* non-zero if this pipe is used for passing handles */ + UV_PIPE_PRIVATE_FIELDS +}; + +UV_EXTERN int uv_pipe_init(uv_loop_t*, uv_pipe_t* handle, int ipc); +UV_EXTERN int uv_pipe_open(uv_pipe_t*, uv_file file); +UV_EXTERN int uv_pipe_bind(uv_pipe_t* handle, const char* name); +UV_EXTERN void uv_pipe_connect(uv_connect_t* req, + uv_pipe_t* handle, + const char* name, + uv_connect_cb cb); +UV_EXTERN int uv_pipe_getsockname(const uv_pipe_t* handle, + char* buffer, + size_t* size); +UV_EXTERN int uv_pipe_getpeername(const uv_pipe_t* handle, + char* buffer, + size_t* size); +UV_EXTERN void uv_pipe_pending_instances(uv_pipe_t* handle, int count); +UV_EXTERN int uv_pipe_pending_count(uv_pipe_t* handle); +UV_EXTERN uv_handle_type uv_pipe_pending_type(uv_pipe_t* handle); +UV_EXTERN int uv_pipe_chmod(uv_pipe_t* handle, int flags); + + +struct uv_poll_s { + UV_HANDLE_FIELDS + uv_poll_cb poll_cb; + UV_POLL_PRIVATE_FIELDS +}; + +enum uv_poll_event { + UV_READABLE = 1, + UV_WRITABLE = 2, + UV_DISCONNECT = 4, + UV_PRIORITIZED = 8 +}; + +UV_EXTERN int uv_poll_init(uv_loop_t* loop, uv_poll_t* handle, int fd); +UV_EXTERN int uv_poll_init_socket(uv_loop_t* loop, + uv_poll_t* handle, + uv_os_sock_t socket); +UV_EXTERN int uv_poll_start(uv_poll_t* handle, int events, uv_poll_cb cb); +UV_EXTERN int uv_poll_stop(uv_poll_t* handle); + + +struct uv_prepare_s { + UV_HANDLE_FIELDS + UV_PREPARE_PRIVATE_FIELDS +}; + +UV_EXTERN int uv_prepare_init(uv_loop_t*, uv_prepare_t* prepare); +UV_EXTERN int uv_prepare_start(uv_prepare_t* prepare, uv_prepare_cb cb); +UV_EXTERN int uv_prepare_stop(uv_prepare_t* prepare); + + +struct uv_check_s { + UV_HANDLE_FIELDS + UV_CHECK_PRIVATE_FIELDS +}; + +UV_EXTERN int uv_check_init(uv_loop_t*, uv_check_t* check); +UV_EXTERN int uv_check_start(uv_check_t* check, uv_check_cb cb); +UV_EXTERN int uv_check_stop(uv_check_t* check); + + +struct uv_idle_s { + UV_HANDLE_FIELDS + UV_IDLE_PRIVATE_FIELDS +}; + +UV_EXTERN int uv_idle_init(uv_loop_t*, uv_idle_t* idle); +UV_EXTERN int uv_idle_start(uv_idle_t* idle, uv_idle_cb cb); +UV_EXTERN int uv_idle_stop(uv_idle_t* idle); + + +struct uv_async_s { + UV_HANDLE_FIELDS + UV_ASYNC_PRIVATE_FIELDS +}; + +UV_EXTERN int uv_async_init(uv_loop_t*, + uv_async_t* async, + uv_async_cb async_cb); +UV_EXTERN int uv_async_send(uv_async_t* async); + + +/* + * uv_timer_t is a subclass of uv_handle_t. + * + * Used to get woken up at a specified time in the future. + */ +struct uv_timer_s { + UV_HANDLE_FIELDS + UV_TIMER_PRIVATE_FIELDS +}; + +UV_EXTERN int uv_timer_init(uv_loop_t*, uv_timer_t* handle); +UV_EXTERN int uv_timer_start(uv_timer_t* handle, + uv_timer_cb cb, + uint64_t timeout, + uint64_t repeat); +UV_EXTERN int uv_timer_stop(uv_timer_t* handle); +UV_EXTERN int uv_timer_again(uv_timer_t* handle); +UV_EXTERN void uv_timer_set_repeat(uv_timer_t* handle, uint64_t repeat); +UV_EXTERN uint64_t uv_timer_get_repeat(const uv_timer_t* handle); + + +/* + * uv_getaddrinfo_t is a subclass of uv_req_t. + * + * Request object for uv_getaddrinfo. + */ +struct uv_getaddrinfo_s { + UV_REQ_FIELDS + /* read-only */ + uv_loop_t* loop; + /* struct addrinfo* addrinfo is marked as private, but it really isn't. */ + UV_GETADDRINFO_PRIVATE_FIELDS +}; + + +UV_EXTERN int uv_getaddrinfo(uv_loop_t* loop, + uv_getaddrinfo_t* req, + uv_getaddrinfo_cb getaddrinfo_cb, + const char* node, + const char* service, + const struct addrinfo* hints); +UV_EXTERN void uv_freeaddrinfo(struct addrinfo* ai); + + +/* +* uv_getnameinfo_t is a subclass of uv_req_t. +* +* Request object for uv_getnameinfo. +*/ +struct uv_getnameinfo_s { + UV_REQ_FIELDS + /* read-only */ + uv_loop_t* loop; + /* host and service are marked as private, but they really aren't. */ + UV_GETNAMEINFO_PRIVATE_FIELDS +}; + +UV_EXTERN int uv_getnameinfo(uv_loop_t* loop, + uv_getnameinfo_t* req, + uv_getnameinfo_cb getnameinfo_cb, + const struct sockaddr* addr, + int flags); + + +/* uv_spawn() options. */ +typedef enum { + UV_IGNORE = 0x00, + UV_CREATE_PIPE = 0x01, + UV_INHERIT_FD = 0x02, + UV_INHERIT_STREAM = 0x04, + + /* + * When UV_CREATE_PIPE is specified, UV_READABLE_PIPE and UV_WRITABLE_PIPE + * determine the direction of flow, from the child process' perspective. Both + * flags may be specified to create a duplex data stream. + */ + UV_READABLE_PIPE = 0x10, + UV_WRITABLE_PIPE = 0x20, + + /* + * Open the child pipe handle in overlapped mode on Windows. + * On Unix it is silently ignored. + */ + UV_OVERLAPPED_PIPE = 0x40 +} uv_stdio_flags; + +typedef struct uv_stdio_container_s { + uv_stdio_flags flags; + + union { + uv_stream_t* stream; + int fd; + } data; +} uv_stdio_container_t; + +typedef struct uv_process_options_s { + uv_exit_cb exit_cb; /* Called after the process exits. */ + const char* file; /* Path to program to execute. */ + /* + * Command line arguments. args[0] should be the path to the program. On + * Windows this uses CreateProcess which concatenates the arguments into a + * string this can cause some strange errors. See the note at + * windows_verbatim_arguments. + */ + char** args; + /* + * This will be set as the environ variable in the subprocess. If this is + * NULL then the parents environ will be used. + */ + char** env; + /* + * If non-null this represents a directory the subprocess should execute + * in. Stands for current working directory. + */ + const char* cwd; + /* + * Various flags that control how uv_spawn() behaves. See the definition of + * `enum uv_process_flags` below. + */ + unsigned int flags; + /* + * The `stdio` field points to an array of uv_stdio_container_t structs that + * describe the file descriptors that will be made available to the child + * process. The convention is that stdio[0] points to stdin, fd 1 is used for + * stdout, and fd 2 is stderr. + * + * Note that on windows file descriptors greater than 2 are available to the + * child process only if the child processes uses the MSVCRT runtime. + */ + int stdio_count; + uv_stdio_container_t* stdio; + /* + * Libuv can change the child process' user/group id. This happens only when + * the appropriate bits are set in the flags fields. This is not supported on + * windows; uv_spawn() will fail and set the error to UV_ENOTSUP. + */ + uv_uid_t uid; + uv_gid_t gid; +} uv_process_options_t; + +/* + * These are the flags that can be used for the uv_process_options.flags field. + */ +enum uv_process_flags { + /* + * Set the child process' user id. The user id is supplied in the `uid` field + * of the options struct. This does not work on windows; setting this flag + * will cause uv_spawn() to fail. + */ + UV_PROCESS_SETUID = (1 << 0), + /* + * Set the child process' group id. The user id is supplied in the `gid` + * field of the options struct. This does not work on windows; setting this + * flag will cause uv_spawn() to fail. + */ + UV_PROCESS_SETGID = (1 << 1), + /* + * Do not wrap any arguments in quotes, or perform any other escaping, when + * converting the argument list into a command line string. This option is + * only meaningful on Windows systems. On Unix it is silently ignored. + */ + UV_PROCESS_WINDOWS_VERBATIM_ARGUMENTS = (1 << 2), + /* + * Spawn the child process in a detached state - this will make it a process + * group leader, and will effectively enable the child to keep running after + * the parent exits. Note that the child process will still keep the + * parent's event loop alive unless the parent process calls uv_unref() on + * the child's process handle. + */ + UV_PROCESS_DETACHED = (1 << 3), + /* + * Hide the subprocess window that would normally be created. This option is + * only meaningful on Windows systems. On Unix it is silently ignored. + */ + UV_PROCESS_WINDOWS_HIDE = (1 << 4), + /* + * Hide the subprocess console window that would normally be created. This + * option is only meaningful on Windows systems. On Unix it is silently + * ignored. + */ + UV_PROCESS_WINDOWS_HIDE_CONSOLE = (1 << 5), + /* + * Hide the subprocess GUI window that would normally be created. This + * option is only meaningful on Windows systems. On Unix it is silently + * ignored. + */ + UV_PROCESS_WINDOWS_HIDE_GUI = (1 << 6) +}; + +/* + * uv_process_t is a subclass of uv_handle_t. + */ +struct uv_process_s { + UV_HANDLE_FIELDS + uv_exit_cb exit_cb; + int pid; + UV_PROCESS_PRIVATE_FIELDS +}; + +UV_EXTERN int uv_spawn(uv_loop_t* loop, + uv_process_t* handle, + const uv_process_options_t* options); +UV_EXTERN int uv_process_kill(uv_process_t*, int signum); +UV_EXTERN int uv_kill(int pid, int signum); +UV_EXTERN uv_pid_t uv_process_get_pid(const uv_process_t*); + + +/* + * uv_work_t is a subclass of uv_req_t. + */ +struct uv_work_s { + UV_REQ_FIELDS + uv_loop_t* loop; + uv_work_cb work_cb; + uv_after_work_cb after_work_cb; + UV_WORK_PRIVATE_FIELDS +}; + +UV_EXTERN int uv_queue_work(uv_loop_t* loop, + uv_work_t* req, + uv_work_cb work_cb, + uv_after_work_cb after_work_cb); + +UV_EXTERN int uv_cancel(uv_req_t* req); + + +struct uv_cpu_times_s { + uint64_t user; /* milliseconds */ + uint64_t nice; /* milliseconds */ + uint64_t sys; /* milliseconds */ + uint64_t idle; /* milliseconds */ + uint64_t irq; /* milliseconds */ +}; + +struct uv_cpu_info_s { + char* model; + int speed; + struct uv_cpu_times_s cpu_times; +}; + +struct uv_interface_address_s { + char* name; + char phys_addr[6]; + int is_internal; + union { + struct sockaddr_in address4; + struct sockaddr_in6 address6; + } address; + union { + struct sockaddr_in netmask4; + struct sockaddr_in6 netmask6; + } netmask; +}; + +struct uv_passwd_s { + char* username; + long uid; + long gid; + char* shell; + char* homedir; +}; + +struct uv_utsname_s { + char sysname[256]; + char release[256]; + char version[256]; + char machine[256]; + /* This struct does not contain the nodename and domainname fields present in + the utsname type. domainname is a GNU extension. Both fields are referred + to as meaningless in the docs. */ +}; + +struct uv_statfs_s { + uint64_t f_type; + uint64_t f_bsize; + uint64_t f_blocks; + uint64_t f_bfree; + uint64_t f_bavail; + uint64_t f_files; + uint64_t f_ffree; + uint64_t f_spare[4]; +}; + +typedef enum { + UV_DIRENT_UNKNOWN, + UV_DIRENT_FILE, + UV_DIRENT_DIR, + UV_DIRENT_LINK, + UV_DIRENT_FIFO, + UV_DIRENT_SOCKET, + UV_DIRENT_CHAR, + UV_DIRENT_BLOCK +} uv_dirent_type_t; + +struct uv_dirent_s { + const char* name; + uv_dirent_type_t type; +}; + +UV_EXTERN char** uv_setup_args(int argc, char** argv); +UV_EXTERN int uv_get_process_title(char* buffer, size_t size); +UV_EXTERN int uv_set_process_title(const char* title); +UV_EXTERN int uv_resident_set_memory(size_t* rss); +UV_EXTERN int uv_uptime(double* uptime); +UV_EXTERN uv_os_fd_t uv_get_osfhandle(int fd); +UV_EXTERN int uv_open_osfhandle(uv_os_fd_t os_fd); + +typedef struct { + long tv_sec; + long tv_usec; +} uv_timeval_t; + +typedef struct { + int64_t tv_sec; + int32_t tv_usec; +} uv_timeval64_t; + +typedef struct { + uv_timeval_t ru_utime; /* user CPU time used */ + uv_timeval_t ru_stime; /* system CPU time used */ + uint64_t ru_maxrss; /* maximum resident set size */ + uint64_t ru_ixrss; /* integral shared memory size */ + uint64_t ru_idrss; /* integral unshared data size */ + uint64_t ru_isrss; /* integral unshared stack size */ + uint64_t ru_minflt; /* page reclaims (soft page faults) */ + uint64_t ru_majflt; /* page faults (hard page faults) */ + uint64_t ru_nswap; /* swaps */ + uint64_t ru_inblock; /* block input operations */ + uint64_t ru_oublock; /* block output operations */ + uint64_t ru_msgsnd; /* IPC messages sent */ + uint64_t ru_msgrcv; /* IPC messages received */ + uint64_t ru_nsignals; /* signals received */ + uint64_t ru_nvcsw; /* voluntary context switches */ + uint64_t ru_nivcsw; /* involuntary context switches */ +} uv_rusage_t; + +UV_EXTERN int uv_getrusage(uv_rusage_t* rusage); + +UV_EXTERN int uv_os_homedir(char* buffer, size_t* size); +UV_EXTERN int uv_os_tmpdir(char* buffer, size_t* size); +UV_EXTERN int uv_os_get_passwd(uv_passwd_t* pwd); +UV_EXTERN void uv_os_free_passwd(uv_passwd_t* pwd); +UV_EXTERN uv_pid_t uv_os_getpid(void); +UV_EXTERN uv_pid_t uv_os_getppid(void); + +#if defined(__PASE__) +/* On IBM i PASE, the highest process priority is -10 */ +# define UV_PRIORITY_LOW 39 // RUNPTY(99) +# define UV_PRIORITY_BELOW_NORMAL 15 // RUNPTY(50) +# define UV_PRIORITY_NORMAL 0 // RUNPTY(20) +# define UV_PRIORITY_ABOVE_NORMAL -4 // RUNTY(12) +# define UV_PRIORITY_HIGH -7 // RUNPTY(6) +# define UV_PRIORITY_HIGHEST -10 // RUNPTY(1) +#else +# define UV_PRIORITY_LOW 19 +# define UV_PRIORITY_BELOW_NORMAL 10 +# define UV_PRIORITY_NORMAL 0 +# define UV_PRIORITY_ABOVE_NORMAL -7 +# define UV_PRIORITY_HIGH -14 +# define UV_PRIORITY_HIGHEST -20 +#endif + +UV_EXTERN int uv_os_getpriority(uv_pid_t pid, int* priority); +UV_EXTERN int uv_os_setpriority(uv_pid_t pid, int priority); + +UV_EXTERN int uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count); +UV_EXTERN void uv_free_cpu_info(uv_cpu_info_t* cpu_infos, int count); + +UV_EXTERN int uv_interface_addresses(uv_interface_address_t** addresses, + int* count); +UV_EXTERN void uv_free_interface_addresses(uv_interface_address_t* addresses, + int count); + +struct uv_env_item_s { + char* name; + char* value; +}; + +UV_EXTERN int uv_os_environ(uv_env_item_t** envitems, int* count); +UV_EXTERN void uv_os_free_environ(uv_env_item_t* envitems, int count); +UV_EXTERN int uv_os_getenv(const char* name, char* buffer, size_t* size); +UV_EXTERN int uv_os_setenv(const char* name, const char* value); +UV_EXTERN int uv_os_unsetenv(const char* name); + +#ifdef MAXHOSTNAMELEN +# define UV_MAXHOSTNAMESIZE (MAXHOSTNAMELEN + 1) +#else + /* + Fallback for the maximum hostname size, including the null terminator. The + Windows gethostname() documentation states that 256 bytes will always be + large enough to hold the null-terminated hostname. + */ +# define UV_MAXHOSTNAMESIZE 256 +#endif + +UV_EXTERN int uv_os_gethostname(char* buffer, size_t* size); + +UV_EXTERN int uv_os_uname(uv_utsname_t* buffer); + + +typedef enum { + UV_FS_UNKNOWN = -1, + UV_FS_CUSTOM, + UV_FS_OPEN, + UV_FS_CLOSE, + UV_FS_READ, + UV_FS_WRITE, + UV_FS_SENDFILE, + UV_FS_STAT, + UV_FS_LSTAT, + UV_FS_FSTAT, + UV_FS_FTRUNCATE, + UV_FS_UTIME, + UV_FS_FUTIME, + UV_FS_ACCESS, + UV_FS_CHMOD, + UV_FS_FCHMOD, + UV_FS_FSYNC, + UV_FS_FDATASYNC, + UV_FS_UNLINK, + UV_FS_RMDIR, + UV_FS_MKDIR, + UV_FS_MKDTEMP, + UV_FS_RENAME, + UV_FS_SCANDIR, + UV_FS_LINK, + UV_FS_SYMLINK, + UV_FS_READLINK, + UV_FS_CHOWN, + UV_FS_FCHOWN, + UV_FS_REALPATH, + UV_FS_COPYFILE, + UV_FS_LCHOWN, + UV_FS_OPENDIR, + UV_FS_READDIR, + UV_FS_CLOSEDIR, + UV_FS_STATFS, + UV_FS_MKSTEMP, + UV_FS_LUTIME +} uv_fs_type; + +struct uv_dir_s { + uv_dirent_t* dirents; + size_t nentries; + void* reserved[4]; + UV_DIR_PRIVATE_FIELDS +}; + +/* uv_fs_t is a subclass of uv_req_t. */ +struct uv_fs_s { + UV_REQ_FIELDS + uv_fs_type fs_type; + uv_loop_t* loop; + uv_fs_cb cb; + ssize_t result; + void* ptr; + const char* path; + uv_stat_t statbuf; /* Stores the result of uv_fs_stat() and uv_fs_fstat(). */ + UV_FS_PRIVATE_FIELDS +}; + +UV_EXTERN uv_fs_type uv_fs_get_type(const uv_fs_t*); +UV_EXTERN ssize_t uv_fs_get_result(const uv_fs_t*); +UV_EXTERN int uv_fs_get_system_error(const uv_fs_t*); +UV_EXTERN void* uv_fs_get_ptr(const uv_fs_t*); +UV_EXTERN const char* uv_fs_get_path(const uv_fs_t*); +UV_EXTERN uv_stat_t* uv_fs_get_statbuf(uv_fs_t*); + +UV_EXTERN void uv_fs_req_cleanup(uv_fs_t* req); +UV_EXTERN int uv_fs_close(uv_loop_t* loop, + uv_fs_t* req, + uv_file file, + uv_fs_cb cb); +UV_EXTERN int uv_fs_open(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + int flags, + int mode, + uv_fs_cb cb); +UV_EXTERN int uv_fs_read(uv_loop_t* loop, + uv_fs_t* req, + uv_file file, + const uv_buf_t bufs[], + unsigned int nbufs, + int64_t offset, + uv_fs_cb cb); +UV_EXTERN int uv_fs_unlink(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + uv_fs_cb cb); +UV_EXTERN int uv_fs_write(uv_loop_t* loop, + uv_fs_t* req, + uv_file file, + const uv_buf_t bufs[], + unsigned int nbufs, + int64_t offset, + uv_fs_cb cb); +/* + * This flag can be used with uv_fs_copyfile() to return an error if the + * destination already exists. + */ +#define UV_FS_COPYFILE_EXCL 0x0001 + +/* + * This flag can be used with uv_fs_copyfile() to attempt to create a reflink. + * If copy-on-write is not supported, a fallback copy mechanism is used. + */ +#define UV_FS_COPYFILE_FICLONE 0x0002 + +/* + * This flag can be used with uv_fs_copyfile() to attempt to create a reflink. + * If copy-on-write is not supported, an error is returned. + */ +#define UV_FS_COPYFILE_FICLONE_FORCE 0x0004 + +UV_EXTERN int uv_fs_copyfile(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + const char* new_path, + int flags, + uv_fs_cb cb); +UV_EXTERN int uv_fs_mkdir(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + int mode, + uv_fs_cb cb); +UV_EXTERN int uv_fs_mkdtemp(uv_loop_t* loop, + uv_fs_t* req, + const char* tpl, + uv_fs_cb cb); +UV_EXTERN int uv_fs_mkstemp(uv_loop_t* loop, + uv_fs_t* req, + const char* tpl, + uv_fs_cb cb); +UV_EXTERN int uv_fs_rmdir(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + uv_fs_cb cb); +UV_EXTERN int uv_fs_scandir(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + int flags, + uv_fs_cb cb); +UV_EXTERN int uv_fs_scandir_next(uv_fs_t* req, + uv_dirent_t* ent); +UV_EXTERN int uv_fs_opendir(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + uv_fs_cb cb); +UV_EXTERN int uv_fs_readdir(uv_loop_t* loop, + uv_fs_t* req, + uv_dir_t* dir, + uv_fs_cb cb); +UV_EXTERN int uv_fs_closedir(uv_loop_t* loop, + uv_fs_t* req, + uv_dir_t* dir, + uv_fs_cb cb); +UV_EXTERN int uv_fs_stat(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + uv_fs_cb cb); +UV_EXTERN int uv_fs_fstat(uv_loop_t* loop, + uv_fs_t* req, + uv_file file, + uv_fs_cb cb); +UV_EXTERN int uv_fs_rename(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + const char* new_path, + uv_fs_cb cb); +UV_EXTERN int uv_fs_fsync(uv_loop_t* loop, + uv_fs_t* req, + uv_file file, + uv_fs_cb cb); +UV_EXTERN int uv_fs_fdatasync(uv_loop_t* loop, + uv_fs_t* req, + uv_file file, + uv_fs_cb cb); +UV_EXTERN int uv_fs_ftruncate(uv_loop_t* loop, + uv_fs_t* req, + uv_file file, + int64_t offset, + uv_fs_cb cb); +UV_EXTERN int uv_fs_sendfile(uv_loop_t* loop, + uv_fs_t* req, + uv_file out_fd, + uv_file in_fd, + int64_t in_offset, + size_t length, + uv_fs_cb cb); +UV_EXTERN int uv_fs_access(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + int mode, + uv_fs_cb cb); +UV_EXTERN int uv_fs_chmod(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + int mode, + uv_fs_cb cb); +UV_EXTERN int uv_fs_utime(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + double atime, + double mtime, + uv_fs_cb cb); +UV_EXTERN int uv_fs_futime(uv_loop_t* loop, + uv_fs_t* req, + uv_file file, + double atime, + double mtime, + uv_fs_cb cb); +UV_EXTERN int uv_fs_lutime(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + double atime, + double mtime, + uv_fs_cb cb); +UV_EXTERN int uv_fs_lstat(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + uv_fs_cb cb); +UV_EXTERN int uv_fs_link(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + const char* new_path, + uv_fs_cb cb); + +/* + * This flag can be used with uv_fs_symlink() on Windows to specify whether + * path argument points to a directory. + */ +#define UV_FS_SYMLINK_DIR 0x0001 + +/* + * This flag can be used with uv_fs_symlink() on Windows to specify whether + * the symlink is to be created using junction points. + */ +#define UV_FS_SYMLINK_JUNCTION 0x0002 + +UV_EXTERN int uv_fs_symlink(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + const char* new_path, + int flags, + uv_fs_cb cb); +UV_EXTERN int uv_fs_readlink(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + uv_fs_cb cb); +UV_EXTERN int uv_fs_realpath(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + uv_fs_cb cb); +UV_EXTERN int uv_fs_fchmod(uv_loop_t* loop, + uv_fs_t* req, + uv_file file, + int mode, + uv_fs_cb cb); +UV_EXTERN int uv_fs_chown(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + uv_uid_t uid, + uv_gid_t gid, + uv_fs_cb cb); +UV_EXTERN int uv_fs_fchown(uv_loop_t* loop, + uv_fs_t* req, + uv_file file, + uv_uid_t uid, + uv_gid_t gid, + uv_fs_cb cb); +UV_EXTERN int uv_fs_lchown(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + uv_uid_t uid, + uv_gid_t gid, + uv_fs_cb cb); +UV_EXTERN int uv_fs_statfs(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + uv_fs_cb cb); + + +enum uv_fs_event { + UV_RENAME = 1, + UV_CHANGE = 2 +}; + + +struct uv_fs_event_s { + UV_HANDLE_FIELDS + /* private */ + char* path; + UV_FS_EVENT_PRIVATE_FIELDS +}; + + +/* + * uv_fs_stat() based polling file watcher. + */ +struct uv_fs_poll_s { + UV_HANDLE_FIELDS + /* Private, don't touch. */ + void* poll_ctx; +}; + +UV_EXTERN int uv_fs_poll_init(uv_loop_t* loop, uv_fs_poll_t* handle); +UV_EXTERN int uv_fs_poll_start(uv_fs_poll_t* handle, + uv_fs_poll_cb poll_cb, + const char* path, + unsigned int interval); +UV_EXTERN int uv_fs_poll_stop(uv_fs_poll_t* handle); +UV_EXTERN int uv_fs_poll_getpath(uv_fs_poll_t* handle, + char* buffer, + size_t* size); + + +struct uv_signal_s { + UV_HANDLE_FIELDS + uv_signal_cb signal_cb; + int signum; + UV_SIGNAL_PRIVATE_FIELDS +}; + +UV_EXTERN int uv_signal_init(uv_loop_t* loop, uv_signal_t* handle); +UV_EXTERN int uv_signal_start(uv_signal_t* handle, + uv_signal_cb signal_cb, + int signum); +UV_EXTERN int uv_signal_start_oneshot(uv_signal_t* handle, + uv_signal_cb signal_cb, + int signum); +UV_EXTERN int uv_signal_stop(uv_signal_t* handle); + +UV_EXTERN void uv_loadavg(double avg[3]); + + +/* + * Flags to be passed to uv_fs_event_start(). + */ +enum uv_fs_event_flags { + /* + * By default, if the fs event watcher is given a directory name, we will + * watch for all events in that directory. This flags overrides this behavior + * and makes fs_event report only changes to the directory entry itself. This + * flag does not affect individual files watched. + * This flag is currently not implemented yet on any backend. + */ + UV_FS_EVENT_WATCH_ENTRY = 1, + + /* + * By default uv_fs_event will try to use a kernel interface such as inotify + * or kqueue to detect events. This may not work on remote filesystems such + * as NFS mounts. This flag makes fs_event fall back to calling stat() on a + * regular interval. + * This flag is currently not implemented yet on any backend. + */ + UV_FS_EVENT_STAT = 2, + + /* + * By default, event watcher, when watching directory, is not registering + * (is ignoring) changes in it's subdirectories. + * This flag will override this behaviour on platforms that support it. + */ + UV_FS_EVENT_RECURSIVE = 4 +}; + + +UV_EXTERN int uv_fs_event_init(uv_loop_t* loop, uv_fs_event_t* handle); +UV_EXTERN int uv_fs_event_start(uv_fs_event_t* handle, + uv_fs_event_cb cb, + const char* path, + unsigned int flags); +UV_EXTERN int uv_fs_event_stop(uv_fs_event_t* handle); +UV_EXTERN int uv_fs_event_getpath(uv_fs_event_t* handle, + char* buffer, + size_t* size); + +UV_EXTERN int uv_ip4_addr(const char* ip, int port, struct sockaddr_in* addr); +UV_EXTERN int uv_ip6_addr(const char* ip, int port, struct sockaddr_in6* addr); + +UV_EXTERN int uv_ip4_name(const struct sockaddr_in* src, char* dst, size_t size); +UV_EXTERN int uv_ip6_name(const struct sockaddr_in6* src, char* dst, size_t size); + +UV_EXTERN int uv_inet_ntop(int af, const void* src, char* dst, size_t size); +UV_EXTERN int uv_inet_pton(int af, const char* src, void* dst); + + +struct uv_random_s { + UV_REQ_FIELDS + /* read-only */ + uv_loop_t* loop; + /* private */ + int status; + void* buf; + size_t buflen; + uv_random_cb cb; + struct uv__work work_req; +}; + +UV_EXTERN int uv_random(uv_loop_t* loop, + uv_random_t* req, + void *buf, + size_t buflen, + unsigned flags, /* For future extension; must be 0. */ + uv_random_cb cb); + +#if defined(IF_NAMESIZE) +# define UV_IF_NAMESIZE (IF_NAMESIZE + 1) +#elif defined(IFNAMSIZ) +# define UV_IF_NAMESIZE (IFNAMSIZ + 1) +#else +# define UV_IF_NAMESIZE (16 + 1) +#endif + +UV_EXTERN int uv_if_indextoname(unsigned int ifindex, + char* buffer, + size_t* size); +UV_EXTERN int uv_if_indextoiid(unsigned int ifindex, + char* buffer, + size_t* size); + +UV_EXTERN int uv_exepath(char* buffer, size_t* size); + +UV_EXTERN int uv_cwd(char* buffer, size_t* size); + +UV_EXTERN int uv_chdir(const char* dir); + +UV_EXTERN uint64_t uv_get_free_memory(void); +UV_EXTERN uint64_t uv_get_total_memory(void); +UV_EXTERN uint64_t uv_get_constrained_memory(void); + +UV_EXTERN uint64_t uv_hrtime(void); +UV_EXTERN void uv_sleep(unsigned int msec); + +UV_EXTERN void uv_disable_stdio_inheritance(void); + +UV_EXTERN int uv_dlopen(const char* filename, uv_lib_t* lib); +UV_EXTERN void uv_dlclose(uv_lib_t* lib); +UV_EXTERN int uv_dlsym(uv_lib_t* lib, const char* name, void** ptr); +UV_EXTERN const char* uv_dlerror(const uv_lib_t* lib); + +UV_EXTERN int uv_mutex_init(uv_mutex_t* handle); +UV_EXTERN int uv_mutex_init_recursive(uv_mutex_t* handle); +UV_EXTERN void uv_mutex_destroy(uv_mutex_t* handle); +UV_EXTERN void uv_mutex_lock(uv_mutex_t* handle); +UV_EXTERN int uv_mutex_trylock(uv_mutex_t* handle); +UV_EXTERN void uv_mutex_unlock(uv_mutex_t* handle); + +UV_EXTERN int uv_rwlock_init(uv_rwlock_t* rwlock); +UV_EXTERN void uv_rwlock_destroy(uv_rwlock_t* rwlock); +UV_EXTERN void uv_rwlock_rdlock(uv_rwlock_t* rwlock); +UV_EXTERN int uv_rwlock_tryrdlock(uv_rwlock_t* rwlock); +UV_EXTERN void uv_rwlock_rdunlock(uv_rwlock_t* rwlock); +UV_EXTERN void uv_rwlock_wrlock(uv_rwlock_t* rwlock); +UV_EXTERN int uv_rwlock_trywrlock(uv_rwlock_t* rwlock); +UV_EXTERN void uv_rwlock_wrunlock(uv_rwlock_t* rwlock); + +UV_EXTERN int uv_sem_init(uv_sem_t* sem, unsigned int value); +UV_EXTERN void uv_sem_destroy(uv_sem_t* sem); +UV_EXTERN void uv_sem_post(uv_sem_t* sem); +UV_EXTERN void uv_sem_wait(uv_sem_t* sem); +UV_EXTERN int uv_sem_trywait(uv_sem_t* sem); + +UV_EXTERN int uv_cond_init(uv_cond_t* cond); +UV_EXTERN void uv_cond_destroy(uv_cond_t* cond); +UV_EXTERN void uv_cond_signal(uv_cond_t* cond); +UV_EXTERN void uv_cond_broadcast(uv_cond_t* cond); + +UV_EXTERN int uv_barrier_init(uv_barrier_t* barrier, unsigned int count); +UV_EXTERN void uv_barrier_destroy(uv_barrier_t* barrier); +UV_EXTERN int uv_barrier_wait(uv_barrier_t* barrier); + +UV_EXTERN void uv_cond_wait(uv_cond_t* cond, uv_mutex_t* mutex); +UV_EXTERN int uv_cond_timedwait(uv_cond_t* cond, + uv_mutex_t* mutex, + uint64_t timeout); + +UV_EXTERN void uv_once(uv_once_t* guard, void (*callback)(void)); + +UV_EXTERN int uv_key_create(uv_key_t* key); +UV_EXTERN void uv_key_delete(uv_key_t* key); +UV_EXTERN void* uv_key_get(uv_key_t* key); +UV_EXTERN void uv_key_set(uv_key_t* key, void* value); + +UV_EXTERN int uv_gettimeofday(uv_timeval64_t* tv); + +typedef void (*uv_thread_cb)(void* arg); + +UV_EXTERN int uv_thread_create(uv_thread_t* tid, uv_thread_cb entry, void* arg); + +typedef enum { + UV_THREAD_NO_FLAGS = 0x00, + UV_THREAD_HAS_STACK_SIZE = 0x01 +} uv_thread_create_flags; + +struct uv_thread_options_s { + unsigned int flags; + size_t stack_size; + /* More fields may be added at any time. */ +}; + +typedef struct uv_thread_options_s uv_thread_options_t; + +UV_EXTERN int uv_thread_create_ex(uv_thread_t* tid, + const uv_thread_options_t* params, + uv_thread_cb entry, + void* arg); +UV_EXTERN uv_thread_t uv_thread_self(void); +UV_EXTERN int uv_thread_join(uv_thread_t *tid); +UV_EXTERN int uv_thread_equal(const uv_thread_t* t1, const uv_thread_t* t2); + +/* The presence of these unions force similar struct layout. */ +#define XX(_, name) uv_ ## name ## _t name; +union uv_any_handle { + UV_HANDLE_TYPE_MAP(XX) +}; + +union uv_any_req { + UV_REQ_TYPE_MAP(XX) +}; +#undef XX + + +struct uv_loop_s { + /* User data - use this for whatever. */ + void* data; + /* Loop reference counting. */ + unsigned int active_handles; + void* handle_queue[2]; + union { + void* unused[2]; + unsigned int count; + } active_reqs; + /* Internal flag to signal loop stop. */ + unsigned int stop_flag; + UV_LOOP_PRIVATE_FIELDS +}; + +UV_EXTERN void* uv_loop_get_data(const uv_loop_t*); +UV_EXTERN void uv_loop_set_data(uv_loop_t*, void* data); + +/* Don't export the private CPP symbols. */ +#undef UV_HANDLE_TYPE_PRIVATE +#undef UV_REQ_TYPE_PRIVATE +#undef UV_REQ_PRIVATE_FIELDS +#undef UV_STREAM_PRIVATE_FIELDS +#undef UV_TCP_PRIVATE_FIELDS +#undef UV_PREPARE_PRIVATE_FIELDS +#undef UV_CHECK_PRIVATE_FIELDS +#undef UV_IDLE_PRIVATE_FIELDS +#undef UV_ASYNC_PRIVATE_FIELDS +#undef UV_TIMER_PRIVATE_FIELDS +#undef UV_GETADDRINFO_PRIVATE_FIELDS +#undef UV_GETNAMEINFO_PRIVATE_FIELDS +#undef UV_FS_REQ_PRIVATE_FIELDS +#undef UV_WORK_PRIVATE_FIELDS +#undef UV_FS_EVENT_PRIVATE_FIELDS +#undef UV_SIGNAL_PRIVATE_FIELDS +#undef UV_LOOP_PRIVATE_FIELDS +#undef UV_LOOP_PRIVATE_PLATFORM_FIELDS +#undef UV__ERR + +#ifdef __cplusplus +} +#endif +#endif /* UV_H */ diff --git a/external/libuv/include/uv/aix.h b/external/libuv/include/uv/aix.h new file mode 100644 index 000000000..7dc992fa6 --- /dev/null +++ b/external/libuv/include/uv/aix.h @@ -0,0 +1,32 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#ifndef UV_AIX_H +#define UV_AIX_H + +#define UV_PLATFORM_LOOP_FIELDS \ + int fs_fd; \ + +#define UV_PLATFORM_FS_EVENT_FIELDS \ + uv__io_t event_watcher; \ + char *dir_filename; \ + +#endif /* UV_AIX_H */ diff --git a/external/libuv/include/uv/android-ifaddrs.h b/external/libuv/include/uv/android-ifaddrs.h new file mode 100644 index 000000000..9cd19fec1 --- /dev/null +++ b/external/libuv/include/uv/android-ifaddrs.h @@ -0,0 +1,54 @@ +/* + * Copyright (c) 1995, 1999 + * Berkeley Software Design, Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * THIS SOFTWARE IS PROVIDED BY Berkeley Software Design, Inc. ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL Berkeley Software Design, Inc. BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * BSDI ifaddrs.h,v 2.5 2000/02/23 14:51:59 dab Exp + */ + +#ifndef _IFADDRS_H_ +#define _IFADDRS_H_ + +struct ifaddrs { + struct ifaddrs *ifa_next; + char *ifa_name; + unsigned int ifa_flags; + struct sockaddr *ifa_addr; + struct sockaddr *ifa_netmask; + struct sockaddr *ifa_dstaddr; + void *ifa_data; +}; + +/* + * This may have been defined in . Note that if is + * to be included it must be included before this header file. + */ +#ifndef ifa_broadaddr +#define ifa_broadaddr ifa_dstaddr /* broadcast address interface */ +#endif + +#include + +__BEGIN_DECLS +extern int getifaddrs(struct ifaddrs **ifap); +extern void freeifaddrs(struct ifaddrs *ifa); +__END_DECLS + +#endif diff --git a/external/libuv/include/uv/bsd.h b/external/libuv/include/uv/bsd.h new file mode 100644 index 000000000..2d72b3d77 --- /dev/null +++ b/external/libuv/include/uv/bsd.h @@ -0,0 +1,34 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#ifndef UV_BSD_H +#define UV_BSD_H + +#define UV_PLATFORM_FS_EVENT_FIELDS \ + uv__io_t event_watcher; \ + +#define UV_IO_PRIVATE_PLATFORM_FIELDS \ + int rcount; \ + int wcount; \ + +#define UV_HAVE_KQUEUE 1 + +#endif /* UV_BSD_H */ diff --git a/external/libuv/include/uv/darwin.h b/external/libuv/include/uv/darwin.h new file mode 100644 index 000000000..d22641582 --- /dev/null +++ b/external/libuv/include/uv/darwin.h @@ -0,0 +1,61 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#ifndef UV_DARWIN_H +#define UV_DARWIN_H + +#if defined(__APPLE__) && defined(__MACH__) +# include +# include +# include +# include +# define UV_PLATFORM_SEM_T semaphore_t +#endif + +#define UV_IO_PRIVATE_PLATFORM_FIELDS \ + int rcount; \ + int wcount; \ + +#define UV_PLATFORM_LOOP_FIELDS \ + uv_thread_t cf_thread; \ + void* _cf_reserved; \ + void* cf_state; \ + uv_mutex_t cf_mutex; \ + uv_sem_t cf_sem; \ + void* cf_signals[2]; \ + +#define UV_PLATFORM_FS_EVENT_FIELDS \ + uv__io_t event_watcher; \ + char* realpath; \ + int realpath_len; \ + int cf_flags; \ + uv_async_t* cf_cb; \ + void* cf_events[2]; \ + void* cf_member[2]; \ + int cf_error; \ + uv_mutex_t cf_mutex; \ + +#define UV_STREAM_PRIVATE_PLATFORM_FIELDS \ + void* select; \ + +#define UV_HAVE_KQUEUE 1 + +#endif /* UV_DARWIN_H */ diff --git a/external/libuv/include/uv/errno.h b/external/libuv/include/uv/errno.h new file mode 100644 index 000000000..165fd11c3 --- /dev/null +++ b/external/libuv/include/uv/errno.h @@ -0,0 +1,448 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#ifndef UV_ERRNO_H_ +#define UV_ERRNO_H_ + +#include +#if EDOM > 0 +# define UV__ERR(x) (-(x)) +#else +# define UV__ERR(x) (x) +#endif + +#define UV__EOF (-4095) +#define UV__UNKNOWN (-4094) + +#define UV__EAI_ADDRFAMILY (-3000) +#define UV__EAI_AGAIN (-3001) +#define UV__EAI_BADFLAGS (-3002) +#define UV__EAI_CANCELED (-3003) +#define UV__EAI_FAIL (-3004) +#define UV__EAI_FAMILY (-3005) +#define UV__EAI_MEMORY (-3006) +#define UV__EAI_NODATA (-3007) +#define UV__EAI_NONAME (-3008) +#define UV__EAI_OVERFLOW (-3009) +#define UV__EAI_SERVICE (-3010) +#define UV__EAI_SOCKTYPE (-3011) +#define UV__EAI_BADHINTS (-3013) +#define UV__EAI_PROTOCOL (-3014) + +/* Only map to the system errno on non-Windows platforms. It's apparently + * a fairly common practice for Windows programmers to redefine errno codes. + */ +#if defined(E2BIG) && !defined(_WIN32) +# define UV__E2BIG UV__ERR(E2BIG) +#else +# define UV__E2BIG (-4093) +#endif + +#if defined(EACCES) && !defined(_WIN32) +# define UV__EACCES UV__ERR(EACCES) +#else +# define UV__EACCES (-4092) +#endif + +#if defined(EADDRINUSE) && !defined(_WIN32) +# define UV__EADDRINUSE UV__ERR(EADDRINUSE) +#else +# define UV__EADDRINUSE (-4091) +#endif + +#if defined(EADDRNOTAVAIL) && !defined(_WIN32) +# define UV__EADDRNOTAVAIL UV__ERR(EADDRNOTAVAIL) +#else +# define UV__EADDRNOTAVAIL (-4090) +#endif + +#if defined(EAFNOSUPPORT) && !defined(_WIN32) +# define UV__EAFNOSUPPORT UV__ERR(EAFNOSUPPORT) +#else +# define UV__EAFNOSUPPORT (-4089) +#endif + +#if defined(EAGAIN) && !defined(_WIN32) +# define UV__EAGAIN UV__ERR(EAGAIN) +#else +# define UV__EAGAIN (-4088) +#endif + +#if defined(EALREADY) && !defined(_WIN32) +# define UV__EALREADY UV__ERR(EALREADY) +#else +# define UV__EALREADY (-4084) +#endif + +#if defined(EBADF) && !defined(_WIN32) +# define UV__EBADF UV__ERR(EBADF) +#else +# define UV__EBADF (-4083) +#endif + +#if defined(EBUSY) && !defined(_WIN32) +# define UV__EBUSY UV__ERR(EBUSY) +#else +# define UV__EBUSY (-4082) +#endif + +#if defined(ECANCELED) && !defined(_WIN32) +# define UV__ECANCELED UV__ERR(ECANCELED) +#else +# define UV__ECANCELED (-4081) +#endif + +#if defined(ECHARSET) && !defined(_WIN32) +# define UV__ECHARSET UV__ERR(ECHARSET) +#else +# define UV__ECHARSET (-4080) +#endif + +#if defined(ECONNABORTED) && !defined(_WIN32) +# define UV__ECONNABORTED UV__ERR(ECONNABORTED) +#else +# define UV__ECONNABORTED (-4079) +#endif + +#if defined(ECONNREFUSED) && !defined(_WIN32) +# define UV__ECONNREFUSED UV__ERR(ECONNREFUSED) +#else +# define UV__ECONNREFUSED (-4078) +#endif + +#if defined(ECONNRESET) && !defined(_WIN32) +# define UV__ECONNRESET UV__ERR(ECONNRESET) +#else +# define UV__ECONNRESET (-4077) +#endif + +#if defined(EDESTADDRREQ) && !defined(_WIN32) +# define UV__EDESTADDRREQ UV__ERR(EDESTADDRREQ) +#else +# define UV__EDESTADDRREQ (-4076) +#endif + +#if defined(EEXIST) && !defined(_WIN32) +# define UV__EEXIST UV__ERR(EEXIST) +#else +# define UV__EEXIST (-4075) +#endif + +#if defined(EFAULT) && !defined(_WIN32) +# define UV__EFAULT UV__ERR(EFAULT) +#else +# define UV__EFAULT (-4074) +#endif + +#if defined(EHOSTUNREACH) && !defined(_WIN32) +# define UV__EHOSTUNREACH UV__ERR(EHOSTUNREACH) +#else +# define UV__EHOSTUNREACH (-4073) +#endif + +#if defined(EINTR) && !defined(_WIN32) +# define UV__EINTR UV__ERR(EINTR) +#else +# define UV__EINTR (-4072) +#endif + +#if defined(EINVAL) && !defined(_WIN32) +# define UV__EINVAL UV__ERR(EINVAL) +#else +# define UV__EINVAL (-4071) +#endif + +#if defined(EIO) && !defined(_WIN32) +# define UV__EIO UV__ERR(EIO) +#else +# define UV__EIO (-4070) +#endif + +#if defined(EISCONN) && !defined(_WIN32) +# define UV__EISCONN UV__ERR(EISCONN) +#else +# define UV__EISCONN (-4069) +#endif + +#if defined(EISDIR) && !defined(_WIN32) +# define UV__EISDIR UV__ERR(EISDIR) +#else +# define UV__EISDIR (-4068) +#endif + +#if defined(ELOOP) && !defined(_WIN32) +# define UV__ELOOP UV__ERR(ELOOP) +#else +# define UV__ELOOP (-4067) +#endif + +#if defined(EMFILE) && !defined(_WIN32) +# define UV__EMFILE UV__ERR(EMFILE) +#else +# define UV__EMFILE (-4066) +#endif + +#if defined(EMSGSIZE) && !defined(_WIN32) +# define UV__EMSGSIZE UV__ERR(EMSGSIZE) +#else +# define UV__EMSGSIZE (-4065) +#endif + +#if defined(ENAMETOOLONG) && !defined(_WIN32) +# define UV__ENAMETOOLONG UV__ERR(ENAMETOOLONG) +#else +# define UV__ENAMETOOLONG (-4064) +#endif + +#if defined(ENETDOWN) && !defined(_WIN32) +# define UV__ENETDOWN UV__ERR(ENETDOWN) +#else +# define UV__ENETDOWN (-4063) +#endif + +#if defined(ENETUNREACH) && !defined(_WIN32) +# define UV__ENETUNREACH UV__ERR(ENETUNREACH) +#else +# define UV__ENETUNREACH (-4062) +#endif + +#if defined(ENFILE) && !defined(_WIN32) +# define UV__ENFILE UV__ERR(ENFILE) +#else +# define UV__ENFILE (-4061) +#endif + +#if defined(ENOBUFS) && !defined(_WIN32) +# define UV__ENOBUFS UV__ERR(ENOBUFS) +#else +# define UV__ENOBUFS (-4060) +#endif + +#if defined(ENODEV) && !defined(_WIN32) +# define UV__ENODEV UV__ERR(ENODEV) +#else +# define UV__ENODEV (-4059) +#endif + +#if defined(ENOENT) && !defined(_WIN32) +# define UV__ENOENT UV__ERR(ENOENT) +#else +# define UV__ENOENT (-4058) +#endif + +#if defined(ENOMEM) && !defined(_WIN32) +# define UV__ENOMEM UV__ERR(ENOMEM) +#else +# define UV__ENOMEM (-4057) +#endif + +#if defined(ENONET) && !defined(_WIN32) +# define UV__ENONET UV__ERR(ENONET) +#else +# define UV__ENONET (-4056) +#endif + +#if defined(ENOSPC) && !defined(_WIN32) +# define UV__ENOSPC UV__ERR(ENOSPC) +#else +# define UV__ENOSPC (-4055) +#endif + +#if defined(ENOSYS) && !defined(_WIN32) +# define UV__ENOSYS UV__ERR(ENOSYS) +#else +# define UV__ENOSYS (-4054) +#endif + +#if defined(ENOTCONN) && !defined(_WIN32) +# define UV__ENOTCONN UV__ERR(ENOTCONN) +#else +# define UV__ENOTCONN (-4053) +#endif + +#if defined(ENOTDIR) && !defined(_WIN32) +# define UV__ENOTDIR UV__ERR(ENOTDIR) +#else +# define UV__ENOTDIR (-4052) +#endif + +#if defined(ENOTEMPTY) && !defined(_WIN32) +# define UV__ENOTEMPTY UV__ERR(ENOTEMPTY) +#else +# define UV__ENOTEMPTY (-4051) +#endif + +#if defined(ENOTSOCK) && !defined(_WIN32) +# define UV__ENOTSOCK UV__ERR(ENOTSOCK) +#else +# define UV__ENOTSOCK (-4050) +#endif + +#if defined(ENOTSUP) && !defined(_WIN32) +# define UV__ENOTSUP UV__ERR(ENOTSUP) +#else +# define UV__ENOTSUP (-4049) +#endif + +#if defined(EPERM) && !defined(_WIN32) +# define UV__EPERM UV__ERR(EPERM) +#else +# define UV__EPERM (-4048) +#endif + +#if defined(EPIPE) && !defined(_WIN32) +# define UV__EPIPE UV__ERR(EPIPE) +#else +# define UV__EPIPE (-4047) +#endif + +#if defined(EPROTO) && !defined(_WIN32) +# define UV__EPROTO UV__ERR(EPROTO) +#else +# define UV__EPROTO UV__ERR(4046) +#endif + +#if defined(EPROTONOSUPPORT) && !defined(_WIN32) +# define UV__EPROTONOSUPPORT UV__ERR(EPROTONOSUPPORT) +#else +# define UV__EPROTONOSUPPORT (-4045) +#endif + +#if defined(EPROTOTYPE) && !defined(_WIN32) +# define UV__EPROTOTYPE UV__ERR(EPROTOTYPE) +#else +# define UV__EPROTOTYPE (-4044) +#endif + +#if defined(EROFS) && !defined(_WIN32) +# define UV__EROFS UV__ERR(EROFS) +#else +# define UV__EROFS (-4043) +#endif + +#if defined(ESHUTDOWN) && !defined(_WIN32) +# define UV__ESHUTDOWN UV__ERR(ESHUTDOWN) +#else +# define UV__ESHUTDOWN (-4042) +#endif + +#if defined(ESPIPE) && !defined(_WIN32) +# define UV__ESPIPE UV__ERR(ESPIPE) +#else +# define UV__ESPIPE (-4041) +#endif + +#if defined(ESRCH) && !defined(_WIN32) +# define UV__ESRCH UV__ERR(ESRCH) +#else +# define UV__ESRCH (-4040) +#endif + +#if defined(ETIMEDOUT) && !defined(_WIN32) +# define UV__ETIMEDOUT UV__ERR(ETIMEDOUT) +#else +# define UV__ETIMEDOUT (-4039) +#endif + +#if defined(ETXTBSY) && !defined(_WIN32) +# define UV__ETXTBSY UV__ERR(ETXTBSY) +#else +# define UV__ETXTBSY (-4038) +#endif + +#if defined(EXDEV) && !defined(_WIN32) +# define UV__EXDEV UV__ERR(EXDEV) +#else +# define UV__EXDEV (-4037) +#endif + +#if defined(EFBIG) && !defined(_WIN32) +# define UV__EFBIG UV__ERR(EFBIG) +#else +# define UV__EFBIG (-4036) +#endif + +#if defined(ENOPROTOOPT) && !defined(_WIN32) +# define UV__ENOPROTOOPT UV__ERR(ENOPROTOOPT) +#else +# define UV__ENOPROTOOPT (-4035) +#endif + +#if defined(ERANGE) && !defined(_WIN32) +# define UV__ERANGE UV__ERR(ERANGE) +#else +# define UV__ERANGE (-4034) +#endif + +#if defined(ENXIO) && !defined(_WIN32) +# define UV__ENXIO UV__ERR(ENXIO) +#else +# define UV__ENXIO (-4033) +#endif + +#if defined(EMLINK) && !defined(_WIN32) +# define UV__EMLINK UV__ERR(EMLINK) +#else +# define UV__EMLINK (-4032) +#endif + +/* EHOSTDOWN is not visible on BSD-like systems when _POSIX_C_SOURCE is + * defined. Fortunately, its value is always 64 so it's possible albeit + * icky to hard-code it. + */ +#if defined(EHOSTDOWN) && !defined(_WIN32) +# define UV__EHOSTDOWN UV__ERR(EHOSTDOWN) +#elif defined(__APPLE__) || \ + defined(__DragonFly__) || \ + defined(__FreeBSD__) || \ + defined(__FreeBSD_kernel__) || \ + defined(__NetBSD__) || \ + defined(__OpenBSD__) +# define UV__EHOSTDOWN (-64) +#else +# define UV__EHOSTDOWN (-4031) +#endif + +#if defined(EREMOTEIO) && !defined(_WIN32) +# define UV__EREMOTEIO UV__ERR(EREMOTEIO) +#else +# define UV__EREMOTEIO (-4030) +#endif + +#if defined(ENOTTY) && !defined(_WIN32) +# define UV__ENOTTY UV__ERR(ENOTTY) +#else +# define UV__ENOTTY (-4029) +#endif + +#if defined(EFTYPE) && !defined(_WIN32) +# define UV__EFTYPE UV__ERR(EFTYPE) +#else +# define UV__EFTYPE (-4028) +#endif + +#if defined(EILSEQ) && !defined(_WIN32) +# define UV__EILSEQ UV__ERR(EILSEQ) +#else +# define UV__EILSEQ (-4027) +#endif + +#endif /* UV_ERRNO_H_ */ diff --git a/external/libuv/include/uv/linux.h b/external/libuv/include/uv/linux.h new file mode 100644 index 000000000..9b38405a1 --- /dev/null +++ b/external/libuv/include/uv/linux.h @@ -0,0 +1,34 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#ifndef UV_LINUX_H +#define UV_LINUX_H + +#define UV_PLATFORM_LOOP_FIELDS \ + uv__io_t inotify_read_watcher; \ + void* inotify_watchers; \ + int inotify_fd; \ + +#define UV_PLATFORM_FS_EVENT_FIELDS \ + void* watchers[2]; \ + int wd; \ + +#endif /* UV_LINUX_H */ diff --git a/external/libuv/include/uv/os390.h b/external/libuv/include/uv/os390.h new file mode 100644 index 000000000..0267d74cb --- /dev/null +++ b/external/libuv/include/uv/os390.h @@ -0,0 +1,33 @@ +/* Copyright libuv 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 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. + */ + +#ifndef UV_MVS_H +#define UV_MVS_H + +#define UV_PLATFORM_SEM_T long + +#define UV_PLATFORM_LOOP_FIELDS \ + void* ep; \ + +#define UV_PLATFORM_FS_EVENT_FIELDS \ + char rfis_rftok[8]; \ + +#endif /* UV_MVS_H */ diff --git a/external/libuv/include/uv/posix.h b/external/libuv/include/uv/posix.h new file mode 100644 index 000000000..9a96634db --- /dev/null +++ b/external/libuv/include/uv/posix.h @@ -0,0 +1,31 @@ +/* Copyright libuv 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 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. + */ + +#ifndef UV_POSIX_H +#define UV_POSIX_H + +#define UV_PLATFORM_LOOP_FIELDS \ + struct pollfd* poll_fds; \ + size_t poll_fds_used; \ + size_t poll_fds_size; \ + unsigned char poll_fds_iterating; \ + +#endif /* UV_POSIX_H */ diff --git a/external/libuv/include/uv/stdint-msvc2008.h b/external/libuv/include/uv/stdint-msvc2008.h new file mode 100644 index 000000000..d02608a59 --- /dev/null +++ b/external/libuv/include/uv/stdint-msvc2008.h @@ -0,0 +1,247 @@ +// ISO C9x compliant stdint.h for Microsoft Visual Studio +// Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124 +// +// Copyright (c) 2006-2008 Alexander Chemeris +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. The name of the author may be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED +// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +// EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef _MSC_VER // [ +#error "Use this header only with Microsoft Visual C++ compilers!" +#endif // _MSC_VER ] + +#ifndef _MSC_STDINT_H_ // [ +#define _MSC_STDINT_H_ + +#if _MSC_VER > 1000 +#pragma once +#endif + +#include + +// For Visual Studio 6 in C++ mode and for many Visual Studio versions when +// compiling for ARM we should wrap include with 'extern "C++" {}' +// or compiler give many errors like this: +// error C2733: second C linkage of overloaded function 'wmemchr' not allowed +#ifdef __cplusplus +extern "C" { +#endif +# include +#ifdef __cplusplus +} +#endif + +// Define _W64 macros to mark types changing their size, like intptr_t. +#ifndef _W64 +# if !defined(__midl) && (defined(_X86_) || defined(_M_IX86)) && _MSC_VER >= 1300 +# define _W64 __w64 +# else +# define _W64 +# endif +#endif + + +// 7.18.1 Integer types + +// 7.18.1.1 Exact-width integer types + +// Visual Studio 6 and Embedded Visual C++ 4 doesn't +// realize that, e.g. char has the same size as __int8 +// so we give up on __intX for them. +#if (_MSC_VER < 1300) + typedef signed char int8_t; + typedef signed short int16_t; + typedef signed int int32_t; + typedef unsigned char uint8_t; + typedef unsigned short uint16_t; + typedef unsigned int uint32_t; +#else + typedef signed __int8 int8_t; + typedef signed __int16 int16_t; + typedef signed __int32 int32_t; + typedef unsigned __int8 uint8_t; + typedef unsigned __int16 uint16_t; + typedef unsigned __int32 uint32_t; +#endif +typedef signed __int64 int64_t; +typedef unsigned __int64 uint64_t; + + +// 7.18.1.2 Minimum-width integer types +typedef int8_t int_least8_t; +typedef int16_t int_least16_t; +typedef int32_t int_least32_t; +typedef int64_t int_least64_t; +typedef uint8_t uint_least8_t; +typedef uint16_t uint_least16_t; +typedef uint32_t uint_least32_t; +typedef uint64_t uint_least64_t; + +// 7.18.1.3 Fastest minimum-width integer types +typedef int8_t int_fast8_t; +typedef int16_t int_fast16_t; +typedef int32_t int_fast32_t; +typedef int64_t int_fast64_t; +typedef uint8_t uint_fast8_t; +typedef uint16_t uint_fast16_t; +typedef uint32_t uint_fast32_t; +typedef uint64_t uint_fast64_t; + +// 7.18.1.4 Integer types capable of holding object pointers +#ifdef _WIN64 // [ + typedef signed __int64 intptr_t; + typedef unsigned __int64 uintptr_t; +#else // _WIN64 ][ + typedef _W64 signed int intptr_t; + typedef _W64 unsigned int uintptr_t; +#endif // _WIN64 ] + +// 7.18.1.5 Greatest-width integer types +typedef int64_t intmax_t; +typedef uint64_t uintmax_t; + + +// 7.18.2 Limits of specified-width integer types + +#if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS) // [ See footnote 220 at page 257 and footnote 221 at page 259 + +// 7.18.2.1 Limits of exact-width integer types +#define INT8_MIN ((int8_t)_I8_MIN) +#define INT8_MAX _I8_MAX +#define INT16_MIN ((int16_t)_I16_MIN) +#define INT16_MAX _I16_MAX +#define INT32_MIN ((int32_t)_I32_MIN) +#define INT32_MAX _I32_MAX +#define INT64_MIN ((int64_t)_I64_MIN) +#define INT64_MAX _I64_MAX +#define UINT8_MAX _UI8_MAX +#define UINT16_MAX _UI16_MAX +#define UINT32_MAX _UI32_MAX +#define UINT64_MAX _UI64_MAX + +// 7.18.2.2 Limits of minimum-width integer types +#define INT_LEAST8_MIN INT8_MIN +#define INT_LEAST8_MAX INT8_MAX +#define INT_LEAST16_MIN INT16_MIN +#define INT_LEAST16_MAX INT16_MAX +#define INT_LEAST32_MIN INT32_MIN +#define INT_LEAST32_MAX INT32_MAX +#define INT_LEAST64_MIN INT64_MIN +#define INT_LEAST64_MAX INT64_MAX +#define UINT_LEAST8_MAX UINT8_MAX +#define UINT_LEAST16_MAX UINT16_MAX +#define UINT_LEAST32_MAX UINT32_MAX +#define UINT_LEAST64_MAX UINT64_MAX + +// 7.18.2.3 Limits of fastest minimum-width integer types +#define INT_FAST8_MIN INT8_MIN +#define INT_FAST8_MAX INT8_MAX +#define INT_FAST16_MIN INT16_MIN +#define INT_FAST16_MAX INT16_MAX +#define INT_FAST32_MIN INT32_MIN +#define INT_FAST32_MAX INT32_MAX +#define INT_FAST64_MIN INT64_MIN +#define INT_FAST64_MAX INT64_MAX +#define UINT_FAST8_MAX UINT8_MAX +#define UINT_FAST16_MAX UINT16_MAX +#define UINT_FAST32_MAX UINT32_MAX +#define UINT_FAST64_MAX UINT64_MAX + +// 7.18.2.4 Limits of integer types capable of holding object pointers +#ifdef _WIN64 // [ +# define INTPTR_MIN INT64_MIN +# define INTPTR_MAX INT64_MAX +# define UINTPTR_MAX UINT64_MAX +#else // _WIN64 ][ +# define INTPTR_MIN INT32_MIN +# define INTPTR_MAX INT32_MAX +# define UINTPTR_MAX UINT32_MAX +#endif // _WIN64 ] + +// 7.18.2.5 Limits of greatest-width integer types +#define INTMAX_MIN INT64_MIN +#define INTMAX_MAX INT64_MAX +#define UINTMAX_MAX UINT64_MAX + +// 7.18.3 Limits of other integer types + +#ifdef _WIN64 // [ +# define PTRDIFF_MIN _I64_MIN +# define PTRDIFF_MAX _I64_MAX +#else // _WIN64 ][ +# define PTRDIFF_MIN _I32_MIN +# define PTRDIFF_MAX _I32_MAX +#endif // _WIN64 ] + +#define SIG_ATOMIC_MIN INT_MIN +#define SIG_ATOMIC_MAX INT_MAX + +#ifndef SIZE_MAX // [ +# ifdef _WIN64 // [ +# define SIZE_MAX _UI64_MAX +# else // _WIN64 ][ +# define SIZE_MAX _UI32_MAX +# endif // _WIN64 ] +#endif // SIZE_MAX ] + +// WCHAR_MIN and WCHAR_MAX are also defined in +#ifndef WCHAR_MIN // [ +# define WCHAR_MIN 0 +#endif // WCHAR_MIN ] +#ifndef WCHAR_MAX // [ +# define WCHAR_MAX _UI16_MAX +#endif // WCHAR_MAX ] + +#define WINT_MIN 0 +#define WINT_MAX _UI16_MAX + +#endif // __STDC_LIMIT_MACROS ] + + +// 7.18.4 Limits of other integer types + +#if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS) // [ See footnote 224 at page 260 + +// 7.18.4.1 Macros for minimum-width integer constants + +#define INT8_C(val) val##i8 +#define INT16_C(val) val##i16 +#define INT32_C(val) val##i32 +#define INT64_C(val) val##i64 + +#define UINT8_C(val) val##ui8 +#define UINT16_C(val) val##ui16 +#define UINT32_C(val) val##ui32 +#define UINT64_C(val) val##ui64 + +// 7.18.4.2 Macros for greatest-width integer constants +#define INTMAX_C INT64_C +#define UINTMAX_C UINT64_C + +#endif // __STDC_CONSTANT_MACROS ] + + +#endif // _MSC_STDINT_H_ ] diff --git a/external/libuv/include/uv/sunos.h b/external/libuv/include/uv/sunos.h new file mode 100644 index 000000000..042166424 --- /dev/null +++ b/external/libuv/include/uv/sunos.h @@ -0,0 +1,44 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#ifndef UV_SUNOS_H +#define UV_SUNOS_H + +#include +#include + +/* For the sake of convenience and reduced #ifdef-ery in src/unix/sunos.c, + * add the fs_event fields even when this version of SunOS doesn't support + * file watching. + */ +#define UV_PLATFORM_LOOP_FIELDS \ + uv__io_t fs_event_watcher; \ + int fs_fd; \ + +#if defined(PORT_SOURCE_FILE) + +# define UV_PLATFORM_FS_EVENT_FIELDS \ + file_obj_t fo; \ + int fd; \ + +#endif /* defined(PORT_SOURCE_FILE) */ + +#endif /* UV_SUNOS_H */ diff --git a/external/libuv/include/uv/threadpool.h b/external/libuv/include/uv/threadpool.h new file mode 100644 index 000000000..9708ebdd5 --- /dev/null +++ b/external/libuv/include/uv/threadpool.h @@ -0,0 +1,37 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +/* + * This file is private to libuv. It provides common functionality to both + * Windows and Unix backends. + */ + +#ifndef UV_THREADPOOL_H_ +#define UV_THREADPOOL_H_ + +struct uv__work { + void (*work)(struct uv__work *w); + void (*done)(struct uv__work *w, int status); + struct uv_loop_s* loop; + void* wq[2]; +}; + +#endif /* UV_THREADPOOL_H_ */ diff --git a/external/libuv/include/uv/tree.h b/external/libuv/include/uv/tree.h new file mode 100644 index 000000000..f936416e3 --- /dev/null +++ b/external/libuv/include/uv/tree.h @@ -0,0 +1,768 @@ +/*- + * Copyright 2002 Niels Provos + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef UV_TREE_H_ +#define UV_TREE_H_ + +#ifndef UV__UNUSED +# if __GNUC__ +# define UV__UNUSED __attribute__((unused)) +# else +# define UV__UNUSED +# endif +#endif + +/* + * This file defines data structures for different types of trees: + * splay trees and red-black trees. + * + * A splay tree is a self-organizing data structure. Every operation + * on the tree causes a splay to happen. The splay moves the requested + * node to the root of the tree and partly rebalances it. + * + * This has the benefit that request locality causes faster lookups as + * the requested nodes move to the top of the tree. On the other hand, + * every lookup causes memory writes. + * + * The Balance Theorem bounds the total access time for m operations + * and n inserts on an initially empty tree as O((m + n)lg n). The + * amortized cost for a sequence of m accesses to a splay tree is O(lg n); + * + * A red-black tree is a binary search tree with the node color as an + * extra attribute. It fulfills a set of conditions: + * - every search path from the root to a leaf consists of the + * same number of black nodes, + * - each red node (except for the root) has a black parent, + * - each leaf node is black. + * + * Every operation on a red-black tree is bounded as O(lg n). + * The maximum height of a red-black tree is 2lg (n+1). + */ + +#define SPLAY_HEAD(name, type) \ +struct name { \ + struct type *sph_root; /* root of the tree */ \ +} + +#define SPLAY_INITIALIZER(root) \ + { NULL } + +#define SPLAY_INIT(root) do { \ + (root)->sph_root = NULL; \ +} while (/*CONSTCOND*/ 0) + +#define SPLAY_ENTRY(type) \ +struct { \ + struct type *spe_left; /* left element */ \ + struct type *spe_right; /* right element */ \ +} + +#define SPLAY_LEFT(elm, field) (elm)->field.spe_left +#define SPLAY_RIGHT(elm, field) (elm)->field.spe_right +#define SPLAY_ROOT(head) (head)->sph_root +#define SPLAY_EMPTY(head) (SPLAY_ROOT(head) == NULL) + +/* SPLAY_ROTATE_{LEFT,RIGHT} expect that tmp hold SPLAY_{RIGHT,LEFT} */ +#define SPLAY_ROTATE_RIGHT(head, tmp, field) do { \ + SPLAY_LEFT((head)->sph_root, field) = SPLAY_RIGHT(tmp, field); \ + SPLAY_RIGHT(tmp, field) = (head)->sph_root; \ + (head)->sph_root = tmp; \ +} while (/*CONSTCOND*/ 0) + +#define SPLAY_ROTATE_LEFT(head, tmp, field) do { \ + SPLAY_RIGHT((head)->sph_root, field) = SPLAY_LEFT(tmp, field); \ + SPLAY_LEFT(tmp, field) = (head)->sph_root; \ + (head)->sph_root = tmp; \ +} while (/*CONSTCOND*/ 0) + +#define SPLAY_LINKLEFT(head, tmp, field) do { \ + SPLAY_LEFT(tmp, field) = (head)->sph_root; \ + tmp = (head)->sph_root; \ + (head)->sph_root = SPLAY_LEFT((head)->sph_root, field); \ +} while (/*CONSTCOND*/ 0) + +#define SPLAY_LINKRIGHT(head, tmp, field) do { \ + SPLAY_RIGHT(tmp, field) = (head)->sph_root; \ + tmp = (head)->sph_root; \ + (head)->sph_root = SPLAY_RIGHT((head)->sph_root, field); \ +} while (/*CONSTCOND*/ 0) + +#define SPLAY_ASSEMBLE(head, node, left, right, field) do { \ + SPLAY_RIGHT(left, field) = SPLAY_LEFT((head)->sph_root, field); \ + SPLAY_LEFT(right, field) = SPLAY_RIGHT((head)->sph_root, field); \ + SPLAY_LEFT((head)->sph_root, field) = SPLAY_RIGHT(node, field); \ + SPLAY_RIGHT((head)->sph_root, field) = SPLAY_LEFT(node, field); \ +} while (/*CONSTCOND*/ 0) + +/* Generates prototypes and inline functions */ + +#define SPLAY_PROTOTYPE(name, type, field, cmp) \ +void name##_SPLAY(struct name *, struct type *); \ +void name##_SPLAY_MINMAX(struct name *, int); \ +struct type *name##_SPLAY_INSERT(struct name *, struct type *); \ +struct type *name##_SPLAY_REMOVE(struct name *, struct type *); \ + \ +/* Finds the node with the same key as elm */ \ +static __inline struct type * \ +name##_SPLAY_FIND(struct name *head, struct type *elm) \ +{ \ + if (SPLAY_EMPTY(head)) \ + return(NULL); \ + name##_SPLAY(head, elm); \ + if ((cmp)(elm, (head)->sph_root) == 0) \ + return (head->sph_root); \ + return (NULL); \ +} \ + \ +static __inline struct type * \ +name##_SPLAY_NEXT(struct name *head, struct type *elm) \ +{ \ + name##_SPLAY(head, elm); \ + if (SPLAY_RIGHT(elm, field) != NULL) { \ + elm = SPLAY_RIGHT(elm, field); \ + while (SPLAY_LEFT(elm, field) != NULL) { \ + elm = SPLAY_LEFT(elm, field); \ + } \ + } else \ + elm = NULL; \ + return (elm); \ +} \ + \ +static __inline struct type * \ +name##_SPLAY_MIN_MAX(struct name *head, int val) \ +{ \ + name##_SPLAY_MINMAX(head, val); \ + return (SPLAY_ROOT(head)); \ +} + +/* Main splay operation. + * Moves node close to the key of elm to top + */ +#define SPLAY_GENERATE(name, type, field, cmp) \ +struct type * \ +name##_SPLAY_INSERT(struct name *head, struct type *elm) \ +{ \ + if (SPLAY_EMPTY(head)) { \ + SPLAY_LEFT(elm, field) = SPLAY_RIGHT(elm, field) = NULL; \ + } else { \ + int __comp; \ + name##_SPLAY(head, elm); \ + __comp = (cmp)(elm, (head)->sph_root); \ + if(__comp < 0) { \ + SPLAY_LEFT(elm, field) = SPLAY_LEFT((head)->sph_root, field); \ + SPLAY_RIGHT(elm, field) = (head)->sph_root; \ + SPLAY_LEFT((head)->sph_root, field) = NULL; \ + } else if (__comp > 0) { \ + SPLAY_RIGHT(elm, field) = SPLAY_RIGHT((head)->sph_root, field); \ + SPLAY_LEFT(elm, field) = (head)->sph_root; \ + SPLAY_RIGHT((head)->sph_root, field) = NULL; \ + } else \ + return ((head)->sph_root); \ + } \ + (head)->sph_root = (elm); \ + return (NULL); \ +} \ + \ +struct type * \ +name##_SPLAY_REMOVE(struct name *head, struct type *elm) \ +{ \ + struct type *__tmp; \ + if (SPLAY_EMPTY(head)) \ + return (NULL); \ + name##_SPLAY(head, elm); \ + if ((cmp)(elm, (head)->sph_root) == 0) { \ + if (SPLAY_LEFT((head)->sph_root, field) == NULL) { \ + (head)->sph_root = SPLAY_RIGHT((head)->sph_root, field); \ + } else { \ + __tmp = SPLAY_RIGHT((head)->sph_root, field); \ + (head)->sph_root = SPLAY_LEFT((head)->sph_root, field); \ + name##_SPLAY(head, elm); \ + SPLAY_RIGHT((head)->sph_root, field) = __tmp; \ + } \ + return (elm); \ + } \ + return (NULL); \ +} \ + \ +void \ +name##_SPLAY(struct name *head, struct type *elm) \ +{ \ + struct type __node, *__left, *__right, *__tmp; \ + int __comp; \ + \ + SPLAY_LEFT(&__node, field) = SPLAY_RIGHT(&__node, field) = NULL; \ + __left = __right = &__node; \ + \ + while ((__comp = (cmp)(elm, (head)->sph_root)) != 0) { \ + if (__comp < 0) { \ + __tmp = SPLAY_LEFT((head)->sph_root, field); \ + if (__tmp == NULL) \ + break; \ + if ((cmp)(elm, __tmp) < 0){ \ + SPLAY_ROTATE_RIGHT(head, __tmp, field); \ + if (SPLAY_LEFT((head)->sph_root, field) == NULL) \ + break; \ + } \ + SPLAY_LINKLEFT(head, __right, field); \ + } else if (__comp > 0) { \ + __tmp = SPLAY_RIGHT((head)->sph_root, field); \ + if (__tmp == NULL) \ + break; \ + if ((cmp)(elm, __tmp) > 0){ \ + SPLAY_ROTATE_LEFT(head, __tmp, field); \ + if (SPLAY_RIGHT((head)->sph_root, field) == NULL) \ + break; \ + } \ + SPLAY_LINKRIGHT(head, __left, field); \ + } \ + } \ + SPLAY_ASSEMBLE(head, &__node, __left, __right, field); \ +} \ + \ +/* Splay with either the minimum or the maximum element \ + * Used to find minimum or maximum element in tree. \ + */ \ +void name##_SPLAY_MINMAX(struct name *head, int __comp) \ +{ \ + struct type __node, *__left, *__right, *__tmp; \ + \ + SPLAY_LEFT(&__node, field) = SPLAY_RIGHT(&__node, field) = NULL; \ + __left = __right = &__node; \ + \ + while (1) { \ + if (__comp < 0) { \ + __tmp = SPLAY_LEFT((head)->sph_root, field); \ + if (__tmp == NULL) \ + break; \ + if (__comp < 0){ \ + SPLAY_ROTATE_RIGHT(head, __tmp, field); \ + if (SPLAY_LEFT((head)->sph_root, field) == NULL) \ + break; \ + } \ + SPLAY_LINKLEFT(head, __right, field); \ + } else if (__comp > 0) { \ + __tmp = SPLAY_RIGHT((head)->sph_root, field); \ + if (__tmp == NULL) \ + break; \ + if (__comp > 0) { \ + SPLAY_ROTATE_LEFT(head, __tmp, field); \ + if (SPLAY_RIGHT((head)->sph_root, field) == NULL) \ + break; \ + } \ + SPLAY_LINKRIGHT(head, __left, field); \ + } \ + } \ + SPLAY_ASSEMBLE(head, &__node, __left, __right, field); \ +} + +#define SPLAY_NEGINF -1 +#define SPLAY_INF 1 + +#define SPLAY_INSERT(name, x, y) name##_SPLAY_INSERT(x, y) +#define SPLAY_REMOVE(name, x, y) name##_SPLAY_REMOVE(x, y) +#define SPLAY_FIND(name, x, y) name##_SPLAY_FIND(x, y) +#define SPLAY_NEXT(name, x, y) name##_SPLAY_NEXT(x, y) +#define SPLAY_MIN(name, x) (SPLAY_EMPTY(x) ? NULL \ + : name##_SPLAY_MIN_MAX(x, SPLAY_NEGINF)) +#define SPLAY_MAX(name, x) (SPLAY_EMPTY(x) ? NULL \ + : name##_SPLAY_MIN_MAX(x, SPLAY_INF)) + +#define SPLAY_FOREACH(x, name, head) \ + for ((x) = SPLAY_MIN(name, head); \ + (x) != NULL; \ + (x) = SPLAY_NEXT(name, head, x)) + +/* Macros that define a red-black tree */ +#define RB_HEAD(name, type) \ +struct name { \ + struct type *rbh_root; /* root of the tree */ \ +} + +#define RB_INITIALIZER(root) \ + { NULL } + +#define RB_INIT(root) do { \ + (root)->rbh_root = NULL; \ +} while (/*CONSTCOND*/ 0) + +#define RB_BLACK 0 +#define RB_RED 1 +#define RB_ENTRY(type) \ +struct { \ + struct type *rbe_left; /* left element */ \ + struct type *rbe_right; /* right element */ \ + struct type *rbe_parent; /* parent element */ \ + int rbe_color; /* node color */ \ +} + +#define RB_LEFT(elm, field) (elm)->field.rbe_left +#define RB_RIGHT(elm, field) (elm)->field.rbe_right +#define RB_PARENT(elm, field) (elm)->field.rbe_parent +#define RB_COLOR(elm, field) (elm)->field.rbe_color +#define RB_ROOT(head) (head)->rbh_root +#define RB_EMPTY(head) (RB_ROOT(head) == NULL) + +#define RB_SET(elm, parent, field) do { \ + RB_PARENT(elm, field) = parent; \ + RB_LEFT(elm, field) = RB_RIGHT(elm, field) = NULL; \ + RB_COLOR(elm, field) = RB_RED; \ +} while (/*CONSTCOND*/ 0) + +#define RB_SET_BLACKRED(black, red, field) do { \ + RB_COLOR(black, field) = RB_BLACK; \ + RB_COLOR(red, field) = RB_RED; \ +} while (/*CONSTCOND*/ 0) + +#ifndef RB_AUGMENT +#define RB_AUGMENT(x) do {} while (0) +#endif + +#define RB_ROTATE_LEFT(head, elm, tmp, field) do { \ + (tmp) = RB_RIGHT(elm, field); \ + if ((RB_RIGHT(elm, field) = RB_LEFT(tmp, field)) != NULL) { \ + RB_PARENT(RB_LEFT(tmp, field), field) = (elm); \ + } \ + RB_AUGMENT(elm); \ + if ((RB_PARENT(tmp, field) = RB_PARENT(elm, field)) != NULL) { \ + if ((elm) == RB_LEFT(RB_PARENT(elm, field), field)) \ + RB_LEFT(RB_PARENT(elm, field), field) = (tmp); \ + else \ + RB_RIGHT(RB_PARENT(elm, field), field) = (tmp); \ + } else \ + (head)->rbh_root = (tmp); \ + RB_LEFT(tmp, field) = (elm); \ + RB_PARENT(elm, field) = (tmp); \ + RB_AUGMENT(tmp); \ + if ((RB_PARENT(tmp, field))) \ + RB_AUGMENT(RB_PARENT(tmp, field)); \ +} while (/*CONSTCOND*/ 0) + +#define RB_ROTATE_RIGHT(head, elm, tmp, field) do { \ + (tmp) = RB_LEFT(elm, field); \ + if ((RB_LEFT(elm, field) = RB_RIGHT(tmp, field)) != NULL) { \ + RB_PARENT(RB_RIGHT(tmp, field), field) = (elm); \ + } \ + RB_AUGMENT(elm); \ + if ((RB_PARENT(tmp, field) = RB_PARENT(elm, field)) != NULL) { \ + if ((elm) == RB_LEFT(RB_PARENT(elm, field), field)) \ + RB_LEFT(RB_PARENT(elm, field), field) = (tmp); \ + else \ + RB_RIGHT(RB_PARENT(elm, field), field) = (tmp); \ + } else \ + (head)->rbh_root = (tmp); \ + RB_RIGHT(tmp, field) = (elm); \ + RB_PARENT(elm, field) = (tmp); \ + RB_AUGMENT(tmp); \ + if ((RB_PARENT(tmp, field))) \ + RB_AUGMENT(RB_PARENT(tmp, field)); \ +} while (/*CONSTCOND*/ 0) + +/* Generates prototypes and inline functions */ +#define RB_PROTOTYPE(name, type, field, cmp) \ + RB_PROTOTYPE_INTERNAL(name, type, field, cmp,) +#define RB_PROTOTYPE_STATIC(name, type, field, cmp) \ + RB_PROTOTYPE_INTERNAL(name, type, field, cmp, UV__UNUSED static) +#define RB_PROTOTYPE_INTERNAL(name, type, field, cmp, attr) \ +attr void name##_RB_INSERT_COLOR(struct name *, struct type *); \ +attr void name##_RB_REMOVE_COLOR(struct name *, struct type *, struct type *);\ +attr struct type *name##_RB_REMOVE(struct name *, struct type *); \ +attr struct type *name##_RB_INSERT(struct name *, struct type *); \ +attr struct type *name##_RB_FIND(struct name *, struct type *); \ +attr struct type *name##_RB_NFIND(struct name *, struct type *); \ +attr struct type *name##_RB_NEXT(struct type *); \ +attr struct type *name##_RB_PREV(struct type *); \ +attr struct type *name##_RB_MINMAX(struct name *, int); \ + \ + +/* Main rb operation. + * Moves node close to the key of elm to top + */ +#define RB_GENERATE(name, type, field, cmp) \ + RB_GENERATE_INTERNAL(name, type, field, cmp,) +#define RB_GENERATE_STATIC(name, type, field, cmp) \ + RB_GENERATE_INTERNAL(name, type, field, cmp, UV__UNUSED static) +#define RB_GENERATE_INTERNAL(name, type, field, cmp, attr) \ +attr void \ +name##_RB_INSERT_COLOR(struct name *head, struct type *elm) \ +{ \ + struct type *parent, *gparent, *tmp; \ + while ((parent = RB_PARENT(elm, field)) != NULL && \ + RB_COLOR(parent, field) == RB_RED) { \ + gparent = RB_PARENT(parent, field); \ + if (parent == RB_LEFT(gparent, field)) { \ + tmp = RB_RIGHT(gparent, field); \ + if (tmp && RB_COLOR(tmp, field) == RB_RED) { \ + RB_COLOR(tmp, field) = RB_BLACK; \ + RB_SET_BLACKRED(parent, gparent, field); \ + elm = gparent; \ + continue; \ + } \ + if (RB_RIGHT(parent, field) == elm) { \ + RB_ROTATE_LEFT(head, parent, tmp, field); \ + tmp = parent; \ + parent = elm; \ + elm = tmp; \ + } \ + RB_SET_BLACKRED(parent, gparent, field); \ + RB_ROTATE_RIGHT(head, gparent, tmp, field); \ + } else { \ + tmp = RB_LEFT(gparent, field); \ + if (tmp && RB_COLOR(tmp, field) == RB_RED) { \ + RB_COLOR(tmp, field) = RB_BLACK; \ + RB_SET_BLACKRED(parent, gparent, field); \ + elm = gparent; \ + continue; \ + } \ + if (RB_LEFT(parent, field) == elm) { \ + RB_ROTATE_RIGHT(head, parent, tmp, field); \ + tmp = parent; \ + parent = elm; \ + elm = tmp; \ + } \ + RB_SET_BLACKRED(parent, gparent, field); \ + RB_ROTATE_LEFT(head, gparent, tmp, field); \ + } \ + } \ + RB_COLOR(head->rbh_root, field) = RB_BLACK; \ +} \ + \ +attr void \ +name##_RB_REMOVE_COLOR(struct name *head, struct type *parent, \ + struct type *elm) \ +{ \ + struct type *tmp; \ + while ((elm == NULL || RB_COLOR(elm, field) == RB_BLACK) && \ + elm != RB_ROOT(head)) { \ + if (RB_LEFT(parent, field) == elm) { \ + tmp = RB_RIGHT(parent, field); \ + if (RB_COLOR(tmp, field) == RB_RED) { \ + RB_SET_BLACKRED(tmp, parent, field); \ + RB_ROTATE_LEFT(head, parent, tmp, field); \ + tmp = RB_RIGHT(parent, field); \ + } \ + if ((RB_LEFT(tmp, field) == NULL || \ + RB_COLOR(RB_LEFT(tmp, field), field) == RB_BLACK) && \ + (RB_RIGHT(tmp, field) == NULL || \ + RB_COLOR(RB_RIGHT(tmp, field), field) == RB_BLACK)) { \ + RB_COLOR(tmp, field) = RB_RED; \ + elm = parent; \ + parent = RB_PARENT(elm, field); \ + } else { \ + if (RB_RIGHT(tmp, field) == NULL || \ + RB_COLOR(RB_RIGHT(tmp, field), field) == RB_BLACK) { \ + struct type *oleft; \ + if ((oleft = RB_LEFT(tmp, field)) \ + != NULL) \ + RB_COLOR(oleft, field) = RB_BLACK; \ + RB_COLOR(tmp, field) = RB_RED; \ + RB_ROTATE_RIGHT(head, tmp, oleft, field); \ + tmp = RB_RIGHT(parent, field); \ + } \ + RB_COLOR(tmp, field) = RB_COLOR(parent, field); \ + RB_COLOR(parent, field) = RB_BLACK; \ + if (RB_RIGHT(tmp, field)) \ + RB_COLOR(RB_RIGHT(tmp, field), field) = RB_BLACK; \ + RB_ROTATE_LEFT(head, parent, tmp, field); \ + elm = RB_ROOT(head); \ + break; \ + } \ + } else { \ + tmp = RB_LEFT(parent, field); \ + if (RB_COLOR(tmp, field) == RB_RED) { \ + RB_SET_BLACKRED(tmp, parent, field); \ + RB_ROTATE_RIGHT(head, parent, tmp, field); \ + tmp = RB_LEFT(parent, field); \ + } \ + if ((RB_LEFT(tmp, field) == NULL || \ + RB_COLOR(RB_LEFT(tmp, field), field) == RB_BLACK) && \ + (RB_RIGHT(tmp, field) == NULL || \ + RB_COLOR(RB_RIGHT(tmp, field), field) == RB_BLACK)) { \ + RB_COLOR(tmp, field) = RB_RED; \ + elm = parent; \ + parent = RB_PARENT(elm, field); \ + } else { \ + if (RB_LEFT(tmp, field) == NULL || \ + RB_COLOR(RB_LEFT(tmp, field), field) == RB_BLACK) { \ + struct type *oright; \ + if ((oright = RB_RIGHT(tmp, field)) \ + != NULL) \ + RB_COLOR(oright, field) = RB_BLACK; \ + RB_COLOR(tmp, field) = RB_RED; \ + RB_ROTATE_LEFT(head, tmp, oright, field); \ + tmp = RB_LEFT(parent, field); \ + } \ + RB_COLOR(tmp, field) = RB_COLOR(parent, field); \ + RB_COLOR(parent, field) = RB_BLACK; \ + if (RB_LEFT(tmp, field)) \ + RB_COLOR(RB_LEFT(tmp, field), field) = RB_BLACK; \ + RB_ROTATE_RIGHT(head, parent, tmp, field); \ + elm = RB_ROOT(head); \ + break; \ + } \ + } \ + } \ + if (elm) \ + RB_COLOR(elm, field) = RB_BLACK; \ +} \ + \ +attr struct type * \ +name##_RB_REMOVE(struct name *head, struct type *elm) \ +{ \ + struct type *child, *parent, *old = elm; \ + int color; \ + if (RB_LEFT(elm, field) == NULL) \ + child = RB_RIGHT(elm, field); \ + else if (RB_RIGHT(elm, field) == NULL) \ + child = RB_LEFT(elm, field); \ + else { \ + struct type *left; \ + elm = RB_RIGHT(elm, field); \ + while ((left = RB_LEFT(elm, field)) != NULL) \ + elm = left; \ + child = RB_RIGHT(elm, field); \ + parent = RB_PARENT(elm, field); \ + color = RB_COLOR(elm, field); \ + if (child) \ + RB_PARENT(child, field) = parent; \ + if (parent) { \ + if (RB_LEFT(parent, field) == elm) \ + RB_LEFT(parent, field) = child; \ + else \ + RB_RIGHT(parent, field) = child; \ + RB_AUGMENT(parent); \ + } else \ + RB_ROOT(head) = child; \ + if (RB_PARENT(elm, field) == old) \ + parent = elm; \ + (elm)->field = (old)->field; \ + if (RB_PARENT(old, field)) { \ + if (RB_LEFT(RB_PARENT(old, field), field) == old) \ + RB_LEFT(RB_PARENT(old, field), field) = elm; \ + else \ + RB_RIGHT(RB_PARENT(old, field), field) = elm; \ + RB_AUGMENT(RB_PARENT(old, field)); \ + } else \ + RB_ROOT(head) = elm; \ + RB_PARENT(RB_LEFT(old, field), field) = elm; \ + if (RB_RIGHT(old, field)) \ + RB_PARENT(RB_RIGHT(old, field), field) = elm; \ + if (parent) { \ + left = parent; \ + do { \ + RB_AUGMENT(left); \ + } while ((left = RB_PARENT(left, field)) != NULL); \ + } \ + goto color; \ + } \ + parent = RB_PARENT(elm, field); \ + color = RB_COLOR(elm, field); \ + if (child) \ + RB_PARENT(child, field) = parent; \ + if (parent) { \ + if (RB_LEFT(parent, field) == elm) \ + RB_LEFT(parent, field) = child; \ + else \ + RB_RIGHT(parent, field) = child; \ + RB_AUGMENT(parent); \ + } else \ + RB_ROOT(head) = child; \ +color: \ + if (color == RB_BLACK) \ + name##_RB_REMOVE_COLOR(head, parent, child); \ + return (old); \ +} \ + \ +/* Inserts a node into the RB tree */ \ +attr struct type * \ +name##_RB_INSERT(struct name *head, struct type *elm) \ +{ \ + struct type *tmp; \ + struct type *parent = NULL; \ + int comp = 0; \ + tmp = RB_ROOT(head); \ + while (tmp) { \ + parent = tmp; \ + comp = (cmp)(elm, parent); \ + if (comp < 0) \ + tmp = RB_LEFT(tmp, field); \ + else if (comp > 0) \ + tmp = RB_RIGHT(tmp, field); \ + else \ + return (tmp); \ + } \ + RB_SET(elm, parent, field); \ + if (parent != NULL) { \ + if (comp < 0) \ + RB_LEFT(parent, field) = elm; \ + else \ + RB_RIGHT(parent, field) = elm; \ + RB_AUGMENT(parent); \ + } else \ + RB_ROOT(head) = elm; \ + name##_RB_INSERT_COLOR(head, elm); \ + return (NULL); \ +} \ + \ +/* Finds the node with the same key as elm */ \ +attr struct type * \ +name##_RB_FIND(struct name *head, struct type *elm) \ +{ \ + struct type *tmp = RB_ROOT(head); \ + int comp; \ + while (tmp) { \ + comp = cmp(elm, tmp); \ + if (comp < 0) \ + tmp = RB_LEFT(tmp, field); \ + else if (comp > 0) \ + tmp = RB_RIGHT(tmp, field); \ + else \ + return (tmp); \ + } \ + return (NULL); \ +} \ + \ +/* Finds the first node greater than or equal to the search key */ \ +attr struct type * \ +name##_RB_NFIND(struct name *head, struct type *elm) \ +{ \ + struct type *tmp = RB_ROOT(head); \ + struct type *res = NULL; \ + int comp; \ + while (tmp) { \ + comp = cmp(elm, tmp); \ + if (comp < 0) { \ + res = tmp; \ + tmp = RB_LEFT(tmp, field); \ + } \ + else if (comp > 0) \ + tmp = RB_RIGHT(tmp, field); \ + else \ + return (tmp); \ + } \ + return (res); \ +} \ + \ +/* ARGSUSED */ \ +attr struct type * \ +name##_RB_NEXT(struct type *elm) \ +{ \ + if (RB_RIGHT(elm, field)) { \ + elm = RB_RIGHT(elm, field); \ + while (RB_LEFT(elm, field)) \ + elm = RB_LEFT(elm, field); \ + } else { \ + if (RB_PARENT(elm, field) && \ + (elm == RB_LEFT(RB_PARENT(elm, field), field))) \ + elm = RB_PARENT(elm, field); \ + else { \ + while (RB_PARENT(elm, field) && \ + (elm == RB_RIGHT(RB_PARENT(elm, field), field))) \ + elm = RB_PARENT(elm, field); \ + elm = RB_PARENT(elm, field); \ + } \ + } \ + return (elm); \ +} \ + \ +/* ARGSUSED */ \ +attr struct type * \ +name##_RB_PREV(struct type *elm) \ +{ \ + if (RB_LEFT(elm, field)) { \ + elm = RB_LEFT(elm, field); \ + while (RB_RIGHT(elm, field)) \ + elm = RB_RIGHT(elm, field); \ + } else { \ + if (RB_PARENT(elm, field) && \ + (elm == RB_RIGHT(RB_PARENT(elm, field), field))) \ + elm = RB_PARENT(elm, field); \ + else { \ + while (RB_PARENT(elm, field) && \ + (elm == RB_LEFT(RB_PARENT(elm, field), field))) \ + elm = RB_PARENT(elm, field); \ + elm = RB_PARENT(elm, field); \ + } \ + } \ + return (elm); \ +} \ + \ +attr struct type * \ +name##_RB_MINMAX(struct name *head, int val) \ +{ \ + struct type *tmp = RB_ROOT(head); \ + struct type *parent = NULL; \ + while (tmp) { \ + parent = tmp; \ + if (val < 0) \ + tmp = RB_LEFT(tmp, field); \ + else \ + tmp = RB_RIGHT(tmp, field); \ + } \ + return (parent); \ +} + +#define RB_NEGINF -1 +#define RB_INF 1 + +#define RB_INSERT(name, x, y) name##_RB_INSERT(x, y) +#define RB_REMOVE(name, x, y) name##_RB_REMOVE(x, y) +#define RB_FIND(name, x, y) name##_RB_FIND(x, y) +#define RB_NFIND(name, x, y) name##_RB_NFIND(x, y) +#define RB_NEXT(name, x, y) name##_RB_NEXT(y) +#define RB_PREV(name, x, y) name##_RB_PREV(y) +#define RB_MIN(name, x) name##_RB_MINMAX(x, RB_NEGINF) +#define RB_MAX(name, x) name##_RB_MINMAX(x, RB_INF) + +#define RB_FOREACH(x, name, head) \ + for ((x) = RB_MIN(name, head); \ + (x) != NULL; \ + (x) = name##_RB_NEXT(x)) + +#define RB_FOREACH_FROM(x, name, y) \ + for ((x) = (y); \ + ((x) != NULL) && ((y) = name##_RB_NEXT(x), (x) != NULL); \ + (x) = (y)) + +#define RB_FOREACH_SAFE(x, name, head, y) \ + for ((x) = RB_MIN(name, head); \ + ((x) != NULL) && ((y) = name##_RB_NEXT(x), (x) != NULL); \ + (x) = (y)) + +#define RB_FOREACH_REVERSE(x, name, head) \ + for ((x) = RB_MAX(name, head); \ + (x) != NULL; \ + (x) = name##_RB_PREV(x)) + +#define RB_FOREACH_REVERSE_FROM(x, name, y) \ + for ((x) = (y); \ + ((x) != NULL) && ((y) = name##_RB_PREV(x), (x) != NULL); \ + (x) = (y)) + +#define RB_FOREACH_REVERSE_SAFE(x, name, head, y) \ + for ((x) = RB_MAX(name, head); \ + ((x) != NULL) && ((y) = name##_RB_PREV(x), (x) != NULL); \ + (x) = (y)) + +#endif /* UV_TREE_H_ */ diff --git a/external/libuv/include/uv/unix.h b/external/libuv/include/uv/unix.h new file mode 100644 index 000000000..3a131638f --- /dev/null +++ b/external/libuv/include/uv/unix.h @@ -0,0 +1,505 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#ifndef UV_UNIX_H +#define UV_UNIX_H + +#include +#include +#include +#include + +#include +#include +#include +#include +#include /* MAXHOSTNAMELEN on Solaris */ + +#include +#include + +#if !defined(__MVS__) +#include +#include /* MAXHOSTNAMELEN on Linux and the BSDs */ +#endif +#include +#include + +#include "uv/threadpool.h" + +#if defined(__linux__) +# include "uv/linux.h" +#elif defined (__MVS__) +# include "uv/os390.h" +#elif defined(__PASE__) /* __PASE__ and _AIX are both defined on IBM i */ +# include "uv/posix.h" /* IBM i needs uv/posix.h, not uv/aix.h */ +#elif defined(_AIX) +# include "uv/aix.h" +#elif defined(__sun) +# include "uv/sunos.h" +#elif defined(__APPLE__) +# include "uv/darwin.h" +#elif defined(__DragonFly__) || \ + defined(__FreeBSD__) || \ + defined(__FreeBSD_kernel__) || \ + defined(__OpenBSD__) || \ + defined(__NetBSD__) +# include "uv/bsd.h" +#elif defined(__CYGWIN__) || \ + defined(__MSYS__) || \ + defined(__GNU__) +# include "uv/posix.h" +#elif defined(__HAIKU__) +# include "uv/posix.h" +#endif + +#ifndef NI_MAXHOST +# define NI_MAXHOST 1025 +#endif + +#ifndef NI_MAXSERV +# define NI_MAXSERV 32 +#endif + +#ifndef UV_IO_PRIVATE_PLATFORM_FIELDS +# define UV_IO_PRIVATE_PLATFORM_FIELDS /* empty */ +#endif + +struct uv__io_s; +struct uv_loop_s; + +typedef void (*uv__io_cb)(struct uv_loop_s* loop, + struct uv__io_s* w, + unsigned int events); +typedef struct uv__io_s uv__io_t; + +struct uv__io_s { + uv__io_cb cb; + void* pending_queue[2]; + void* watcher_queue[2]; + unsigned int pevents; /* Pending event mask i.e. mask at next tick. */ + unsigned int events; /* Current event mask. */ + int fd; + UV_IO_PRIVATE_PLATFORM_FIELDS +}; + +#ifndef UV_PLATFORM_SEM_T +# define UV_PLATFORM_SEM_T sem_t +#endif + +#ifndef UV_PLATFORM_LOOP_FIELDS +# define UV_PLATFORM_LOOP_FIELDS /* empty */ +#endif + +#ifndef UV_PLATFORM_FS_EVENT_FIELDS +# define UV_PLATFORM_FS_EVENT_FIELDS /* empty */ +#endif + +#ifndef UV_STREAM_PRIVATE_PLATFORM_FIELDS +# define UV_STREAM_PRIVATE_PLATFORM_FIELDS /* empty */ +#endif + +/* Note: May be cast to struct iovec. See writev(2). */ +typedef struct uv_buf_t { + char* base; + size_t len; +} uv_buf_t; + +typedef int uv_file; +typedef int uv_os_sock_t; +typedef int uv_os_fd_t; +typedef pid_t uv_pid_t; + +#define UV_ONCE_INIT PTHREAD_ONCE_INIT + +typedef pthread_once_t uv_once_t; +typedef pthread_t uv_thread_t; +typedef pthread_mutex_t uv_mutex_t; +typedef pthread_rwlock_t uv_rwlock_t; +typedef UV_PLATFORM_SEM_T uv_sem_t; +typedef pthread_cond_t uv_cond_t; +typedef pthread_key_t uv_key_t; + +/* Note: guard clauses should match uv_barrier_init's in src/unix/thread.c. */ +#if defined(_AIX) || \ + defined(__OpenBSD__) || \ + !defined(PTHREAD_BARRIER_SERIAL_THREAD) +/* TODO(bnoordhuis) Merge into uv_barrier_t in v2. */ +struct _uv_barrier { + uv_mutex_t mutex; + uv_cond_t cond; + unsigned threshold; + unsigned in; + unsigned out; +}; + +typedef struct { + struct _uv_barrier* b; +# if defined(PTHREAD_BARRIER_SERIAL_THREAD) + /* TODO(bnoordhuis) Remove padding in v2. */ + char pad[sizeof(pthread_barrier_t) - sizeof(struct _uv_barrier*)]; +# endif +} uv_barrier_t; +#else +typedef pthread_barrier_t uv_barrier_t; +#endif + +/* Platform-specific definitions for uv_spawn support. */ +typedef gid_t uv_gid_t; +typedef uid_t uv_uid_t; + +typedef struct dirent uv__dirent_t; + +#define UV_DIR_PRIVATE_FIELDS \ + DIR* dir; + +#if defined(DT_UNKNOWN) +# define HAVE_DIRENT_TYPES +# if defined(DT_REG) +# define UV__DT_FILE DT_REG +# else +# define UV__DT_FILE -1 +# endif +# if defined(DT_DIR) +# define UV__DT_DIR DT_DIR +# else +# define UV__DT_DIR -2 +# endif +# if defined(DT_LNK) +# define UV__DT_LINK DT_LNK +# else +# define UV__DT_LINK -3 +# endif +# if defined(DT_FIFO) +# define UV__DT_FIFO DT_FIFO +# else +# define UV__DT_FIFO -4 +# endif +# if defined(DT_SOCK) +# define UV__DT_SOCKET DT_SOCK +# else +# define UV__DT_SOCKET -5 +# endif +# if defined(DT_CHR) +# define UV__DT_CHAR DT_CHR +# else +# define UV__DT_CHAR -6 +# endif +# if defined(DT_BLK) +# define UV__DT_BLOCK DT_BLK +# else +# define UV__DT_BLOCK -7 +# endif +#endif + +/* Platform-specific definitions for uv_dlopen support. */ +#define UV_DYNAMIC /* empty */ + +typedef struct { + void* handle; + char* errmsg; +} uv_lib_t; + +#define UV_LOOP_PRIVATE_FIELDS \ + unsigned long flags; \ + int backend_fd; \ + void* pending_queue[2]; \ + void* watcher_queue[2]; \ + uv__io_t** watchers; \ + unsigned int nwatchers; \ + unsigned int nfds; \ + void* wq[2]; \ + uv_mutex_t wq_mutex; \ + uv_async_t wq_async; \ + uv_rwlock_t cloexec_lock; \ + uv_handle_t* closing_handles; \ + void* process_handles[2]; \ + void* prepare_handles[2]; \ + void* check_handles[2]; \ + void* idle_handles[2]; \ + void* async_handles[2]; \ + void (*async_unused)(void); /* TODO(bnoordhuis) Remove in libuv v2. */ \ + uv__io_t async_io_watcher; \ + int async_wfd; \ + struct { \ + void* min; \ + unsigned int nelts; \ + } timer_heap; \ + uint64_t timer_counter; \ + uint64_t time; \ + int signal_pipefd[2]; \ + uv__io_t signal_io_watcher; \ + uv_signal_t child_watcher; \ + int emfile_fd; \ + UV_PLATFORM_LOOP_FIELDS \ + +#define UV_REQ_TYPE_PRIVATE /* empty */ + +#define UV_REQ_PRIVATE_FIELDS /* empty */ + +#define UV_PRIVATE_REQ_TYPES /* empty */ + +#define UV_WRITE_PRIVATE_FIELDS \ + void* queue[2]; \ + unsigned int write_index; \ + uv_buf_t* bufs; \ + unsigned int nbufs; \ + int error; \ + uv_buf_t bufsml[4]; \ + +#define UV_CONNECT_PRIVATE_FIELDS \ + void* queue[2]; \ + +#define UV_SHUTDOWN_PRIVATE_FIELDS /* empty */ + +#define UV_UDP_SEND_PRIVATE_FIELDS \ + void* queue[2]; \ + struct sockaddr_storage addr; \ + unsigned int nbufs; \ + uv_buf_t* bufs; \ + ssize_t status; \ + uv_udp_send_cb send_cb; \ + uv_buf_t bufsml[4]; \ + +#define UV_HANDLE_PRIVATE_FIELDS \ + uv_handle_t* next_closing; \ + unsigned int flags; \ + +#define UV_STREAM_PRIVATE_FIELDS \ + uv_connect_t *connect_req; \ + uv_shutdown_t *shutdown_req; \ + uv__io_t io_watcher; \ + void* write_queue[2]; \ + void* write_completed_queue[2]; \ + uv_connection_cb connection_cb; \ + int delayed_error; \ + int accepted_fd; \ + void* queued_fds; \ + UV_STREAM_PRIVATE_PLATFORM_FIELDS \ + +#define UV_TCP_PRIVATE_FIELDS /* empty */ + +#define UV_UDP_PRIVATE_FIELDS \ + uv_alloc_cb alloc_cb; \ + uv_udp_recv_cb recv_cb; \ + uv__io_t io_watcher; \ + void* write_queue[2]; \ + void* write_completed_queue[2]; \ + +#define UV_PIPE_PRIVATE_FIELDS \ + const char* pipe_fname; /* strdup'ed */ + +#define UV_POLL_PRIVATE_FIELDS \ + uv__io_t io_watcher; + +#define UV_PREPARE_PRIVATE_FIELDS \ + uv_prepare_cb prepare_cb; \ + void* queue[2]; \ + +#define UV_CHECK_PRIVATE_FIELDS \ + uv_check_cb check_cb; \ + void* queue[2]; \ + +#define UV_IDLE_PRIVATE_FIELDS \ + uv_idle_cb idle_cb; \ + void* queue[2]; \ + +#define UV_ASYNC_PRIVATE_FIELDS \ + uv_async_cb async_cb; \ + void* queue[2]; \ + int pending; \ + +#define UV_TIMER_PRIVATE_FIELDS \ + uv_timer_cb timer_cb; \ + void* heap_node[3]; \ + uint64_t timeout; \ + uint64_t repeat; \ + uint64_t start_id; + +#define UV_GETADDRINFO_PRIVATE_FIELDS \ + struct uv__work work_req; \ + uv_getaddrinfo_cb cb; \ + struct addrinfo* hints; \ + char* hostname; \ + char* service; \ + struct addrinfo* addrinfo; \ + int retcode; + +#define UV_GETNAMEINFO_PRIVATE_FIELDS \ + struct uv__work work_req; \ + uv_getnameinfo_cb getnameinfo_cb; \ + struct sockaddr_storage storage; \ + int flags; \ + char host[NI_MAXHOST]; \ + char service[NI_MAXSERV]; \ + int retcode; + +#define UV_PROCESS_PRIVATE_FIELDS \ + void* queue[2]; \ + int status; \ + +#define UV_FS_PRIVATE_FIELDS \ + const char *new_path; \ + uv_file file; \ + int flags; \ + mode_t mode; \ + unsigned int nbufs; \ + uv_buf_t* bufs; \ + off_t off; \ + uv_uid_t uid; \ + uv_gid_t gid; \ + double atime; \ + double mtime; \ + struct uv__work work_req; \ + uv_buf_t bufsml[4]; \ + +#define UV_WORK_PRIVATE_FIELDS \ + struct uv__work work_req; + +#define UV_TTY_PRIVATE_FIELDS \ + struct termios orig_termios; \ + int mode; + +#define UV_SIGNAL_PRIVATE_FIELDS \ + /* RB_ENTRY(uv_signal_s) tree_entry; */ \ + struct { \ + struct uv_signal_s* rbe_left; \ + struct uv_signal_s* rbe_right; \ + struct uv_signal_s* rbe_parent; \ + int rbe_color; \ + } tree_entry; \ + /* Use two counters here so we don have to fiddle with atomics. */ \ + unsigned int caught_signals; \ + unsigned int dispatched_signals; + +#define UV_FS_EVENT_PRIVATE_FIELDS \ + uv_fs_event_cb cb; \ + UV_PLATFORM_FS_EVENT_FIELDS \ + +/* fs open() flags supported on this platform: */ +#if defined(O_APPEND) +# define UV_FS_O_APPEND O_APPEND +#else +# define UV_FS_O_APPEND 0 +#endif +#if defined(O_CREAT) +# define UV_FS_O_CREAT O_CREAT +#else +# define UV_FS_O_CREAT 0 +#endif + +#if defined(__linux__) && defined(__arm__) +# define UV_FS_O_DIRECT 0x10000 +#elif defined(__linux__) && defined(__m68k__) +# define UV_FS_O_DIRECT 0x10000 +#elif defined(__linux__) && defined(__mips__) +# define UV_FS_O_DIRECT 0x08000 +#elif defined(__linux__) && defined(__powerpc__) +# define UV_FS_O_DIRECT 0x20000 +#elif defined(__linux__) && defined(__s390x__) +# define UV_FS_O_DIRECT 0x04000 +#elif defined(__linux__) && defined(__x86_64__) +# define UV_FS_O_DIRECT 0x04000 +#elif defined(O_DIRECT) +# define UV_FS_O_DIRECT O_DIRECT +#else +# define UV_FS_O_DIRECT 0 +#endif + +#if defined(O_DIRECTORY) +# define UV_FS_O_DIRECTORY O_DIRECTORY +#else +# define UV_FS_O_DIRECTORY 0 +#endif +#if defined(O_DSYNC) +# define UV_FS_O_DSYNC O_DSYNC +#else +# define UV_FS_O_DSYNC 0 +#endif +#if defined(O_EXCL) +# define UV_FS_O_EXCL O_EXCL +#else +# define UV_FS_O_EXCL 0 +#endif +#if defined(O_EXLOCK) +# define UV_FS_O_EXLOCK O_EXLOCK +#else +# define UV_FS_O_EXLOCK 0 +#endif +#if defined(O_NOATIME) +# define UV_FS_O_NOATIME O_NOATIME +#else +# define UV_FS_O_NOATIME 0 +#endif +#if defined(O_NOCTTY) +# define UV_FS_O_NOCTTY O_NOCTTY +#else +# define UV_FS_O_NOCTTY 0 +#endif +#if defined(O_NOFOLLOW) +# define UV_FS_O_NOFOLLOW O_NOFOLLOW +#else +# define UV_FS_O_NOFOLLOW 0 +#endif +#if defined(O_NONBLOCK) +# define UV_FS_O_NONBLOCK O_NONBLOCK +#else +# define UV_FS_O_NONBLOCK 0 +#endif +#if defined(O_RDONLY) +# define UV_FS_O_RDONLY O_RDONLY +#else +# define UV_FS_O_RDONLY 0 +#endif +#if defined(O_RDWR) +# define UV_FS_O_RDWR O_RDWR +#else +# define UV_FS_O_RDWR 0 +#endif +#if defined(O_SYMLINK) +# define UV_FS_O_SYMLINK O_SYMLINK +#else +# define UV_FS_O_SYMLINK 0 +#endif +#if defined(O_SYNC) +# define UV_FS_O_SYNC O_SYNC +#else +# define UV_FS_O_SYNC 0 +#endif +#if defined(O_TRUNC) +# define UV_FS_O_TRUNC O_TRUNC +#else +# define UV_FS_O_TRUNC 0 +#endif +#if defined(O_WRONLY) +# define UV_FS_O_WRONLY O_WRONLY +#else +# define UV_FS_O_WRONLY 0 +#endif + +/* fs open() flags supported on other platforms: */ +#define UV_FS_O_FILEMAP 0 +#define UV_FS_O_RANDOM 0 +#define UV_FS_O_SHORT_LIVED 0 +#define UV_FS_O_SEQUENTIAL 0 +#define UV_FS_O_TEMPORARY 0 + +#endif /* UV_UNIX_H */ diff --git a/external/libuv/include/uv/version.h b/external/libuv/include/uv/version.h new file mode 100644 index 000000000..486658c39 --- /dev/null +++ b/external/libuv/include/uv/version.h @@ -0,0 +1,43 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#ifndef UV_VERSION_H +#define UV_VERSION_H + + /* + * Versions with the same major number are ABI stable. API is allowed to + * evolve between minor releases, but only in a backwards compatible way. + * Make sure you update the -soname directives in configure.ac + * whenever you bump UV_VERSION_MAJOR or UV_VERSION_MINOR (but + * not UV_VERSION_PATCH.) + */ + +#define UV_VERSION_MAJOR 1 +#define UV_VERSION_MINOR 38 +#define UV_VERSION_PATCH 0 +#define UV_VERSION_IS_RELEASE 1 +#define UV_VERSION_SUFFIX "" + +#define UV_VERSION_HEX ((UV_VERSION_MAJOR << 16) | \ + (UV_VERSION_MINOR << 8) | \ + (UV_VERSION_PATCH)) + +#endif /* UV_VERSION_H */ diff --git a/external/libuv/include/uv/win.h b/external/libuv/include/uv/win.h new file mode 100644 index 000000000..f5f1d3a3c --- /dev/null +++ b/external/libuv/include/uv/win.h @@ -0,0 +1,691 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#ifndef _WIN32_WINNT +# define _WIN32_WINNT 0x0600 +#endif + +#if !defined(_SSIZE_T_) && !defined(_SSIZE_T_DEFINED) +typedef intptr_t ssize_t; +# define SSIZE_MAX INTPTR_MAX +# define _SSIZE_T_ +# define _SSIZE_T_DEFINED +#endif + +#include + +#if defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR) +typedef struct pollfd { + SOCKET fd; + short events; + short revents; +} WSAPOLLFD, *PWSAPOLLFD, *LPWSAPOLLFD; +#endif + +#ifndef LOCALE_INVARIANT +# define LOCALE_INVARIANT 0x007f +#endif + +#include +#include +#include + +#include +#include +#include +#include + +#if defined(_MSC_VER) && _MSC_VER < 1600 +# include "uv/stdint-msvc2008.h" +#else +# include +#endif + +#include "uv/tree.h" +#include "uv/threadpool.h" + +#define MAX_PIPENAME_LEN 256 + +#ifndef S_IFLNK +# define S_IFLNK 0xA000 +#endif + +/* Additional signals supported by uv_signal and or uv_kill. The CRT defines + * the following signals already: + * + * #define SIGINT 2 + * #define SIGILL 4 + * #define SIGABRT_COMPAT 6 + * #define SIGFPE 8 + * #define SIGSEGV 11 + * #define SIGTERM 15 + * #define SIGBREAK 21 + * #define SIGABRT 22 + * + * The additional signals have values that are common on other Unix + * variants (Linux and Darwin) + */ +#define SIGHUP 1 +#define SIGKILL 9 +#define SIGWINCH 28 + +/* Redefine NSIG to take SIGWINCH into consideration */ +#if defined(NSIG) && NSIG <= SIGWINCH +# undef NSIG +#endif +#ifndef NSIG +# define NSIG SIGWINCH + 1 +#endif + +/* The CRT defines SIGABRT_COMPAT as 6, which equals SIGABRT on many unix-like + * platforms. However MinGW doesn't define it, so we do. */ +#ifndef SIGABRT_COMPAT +# define SIGABRT_COMPAT 6 +#endif + +/* + * Guids and typedefs for winsock extension functions + * Mingw32 doesn't have these :-( + */ +#ifndef WSAID_ACCEPTEX +# define WSAID_ACCEPTEX \ + {0xb5367df1, 0xcbac, 0x11cf, \ + {0x95, 0xca, 0x00, 0x80, 0x5f, 0x48, 0xa1, 0x92}} + +# define WSAID_CONNECTEX \ + {0x25a207b9, 0xddf3, 0x4660, \ + {0x8e, 0xe9, 0x76, 0xe5, 0x8c, 0x74, 0x06, 0x3e}} + +# define WSAID_GETACCEPTEXSOCKADDRS \ + {0xb5367df2, 0xcbac, 0x11cf, \ + {0x95, 0xca, 0x00, 0x80, 0x5f, 0x48, 0xa1, 0x92}} + +# define WSAID_DISCONNECTEX \ + {0x7fda2e11, 0x8630, 0x436f, \ + {0xa0, 0x31, 0xf5, 0x36, 0xa6, 0xee, 0xc1, 0x57}} + +# define WSAID_TRANSMITFILE \ + {0xb5367df0, 0xcbac, 0x11cf, \ + {0x95, 0xca, 0x00, 0x80, 0x5f, 0x48, 0xa1, 0x92}} + + typedef BOOL (PASCAL *LPFN_ACCEPTEX) + (SOCKET sListenSocket, + SOCKET sAcceptSocket, + PVOID lpOutputBuffer, + DWORD dwReceiveDataLength, + DWORD dwLocalAddressLength, + DWORD dwRemoteAddressLength, + LPDWORD lpdwBytesReceived, + LPOVERLAPPED lpOverlapped); + + typedef BOOL (PASCAL *LPFN_CONNECTEX) + (SOCKET s, + const struct sockaddr* name, + int namelen, + PVOID lpSendBuffer, + DWORD dwSendDataLength, + LPDWORD lpdwBytesSent, + LPOVERLAPPED lpOverlapped); + + typedef void (PASCAL *LPFN_GETACCEPTEXSOCKADDRS) + (PVOID lpOutputBuffer, + DWORD dwReceiveDataLength, + DWORD dwLocalAddressLength, + DWORD dwRemoteAddressLength, + LPSOCKADDR* LocalSockaddr, + LPINT LocalSockaddrLength, + LPSOCKADDR* RemoteSockaddr, + LPINT RemoteSockaddrLength); + + typedef BOOL (PASCAL *LPFN_DISCONNECTEX) + (SOCKET hSocket, + LPOVERLAPPED lpOverlapped, + DWORD dwFlags, + DWORD reserved); + + typedef BOOL (PASCAL *LPFN_TRANSMITFILE) + (SOCKET hSocket, + HANDLE hFile, + DWORD nNumberOfBytesToWrite, + DWORD nNumberOfBytesPerSend, + LPOVERLAPPED lpOverlapped, + LPTRANSMIT_FILE_BUFFERS lpTransmitBuffers, + DWORD dwFlags); + + typedef PVOID RTL_SRWLOCK; + typedef RTL_SRWLOCK SRWLOCK, *PSRWLOCK; +#endif + +typedef int (WSAAPI* LPFN_WSARECV) + (SOCKET socket, + LPWSABUF buffers, + DWORD buffer_count, + LPDWORD bytes, + LPDWORD flags, + LPWSAOVERLAPPED overlapped, + LPWSAOVERLAPPED_COMPLETION_ROUTINE completion_routine); + +typedef int (WSAAPI* LPFN_WSARECVFROM) + (SOCKET socket, + LPWSABUF buffers, + DWORD buffer_count, + LPDWORD bytes, + LPDWORD flags, + struct sockaddr* addr, + LPINT addr_len, + LPWSAOVERLAPPED overlapped, + LPWSAOVERLAPPED_COMPLETION_ROUTINE completion_routine); + +#ifndef _NTDEF_ + typedef LONG NTSTATUS; + typedef NTSTATUS *PNTSTATUS; +#endif + +#ifndef RTL_CONDITION_VARIABLE_INIT + typedef PVOID CONDITION_VARIABLE, *PCONDITION_VARIABLE; +#endif + +typedef struct _AFD_POLL_HANDLE_INFO { + HANDLE Handle; + ULONG Events; + NTSTATUS Status; +} AFD_POLL_HANDLE_INFO, *PAFD_POLL_HANDLE_INFO; + +typedef struct _AFD_POLL_INFO { + LARGE_INTEGER Timeout; + ULONG NumberOfHandles; + ULONG Exclusive; + AFD_POLL_HANDLE_INFO Handles[1]; +} AFD_POLL_INFO, *PAFD_POLL_INFO; + +#define UV_MSAFD_PROVIDER_COUNT 3 + + +/** + * It should be possible to cast uv_buf_t[] to WSABUF[] + * see http://msdn.microsoft.com/en-us/library/ms741542(v=vs.85).aspx + */ +typedef struct uv_buf_t { + ULONG len; + char* base; +} uv_buf_t; + +typedef int uv_file; +typedef SOCKET uv_os_sock_t; +typedef HANDLE uv_os_fd_t; +typedef int uv_pid_t; + +typedef HANDLE uv_thread_t; + +typedef HANDLE uv_sem_t; + +typedef CRITICAL_SECTION uv_mutex_t; + +/* This condition variable implementation is based on the SetEvent solution + * (section 3.2) at http://www.cs.wustl.edu/~schmidt/win32-cv-1.html + * We could not use the SignalObjectAndWait solution (section 3.4) because + * it want the 2nd argument (type uv_mutex_t) of uv_cond_wait() and + * uv_cond_timedwait() to be HANDLEs, but we use CRITICAL_SECTIONs. + */ + +typedef union { + CONDITION_VARIABLE cond_var; + struct { + unsigned int waiters_count; + CRITICAL_SECTION waiters_count_lock; + HANDLE signal_event; + HANDLE broadcast_event; + } unused_; /* TODO: retained for ABI compatibility; remove me in v2.x. */ +} uv_cond_t; + +typedef union { + struct { + unsigned int num_readers_; + CRITICAL_SECTION num_readers_lock_; + HANDLE write_semaphore_; + } state_; + /* TODO: remove me in v2.x. */ + struct { + SRWLOCK unused_; + } unused1_; + /* TODO: remove me in v2.x. */ + struct { + uv_mutex_t unused1_; + uv_mutex_t unused2_; + } unused2_; +} uv_rwlock_t; + +typedef struct { + unsigned int n; + unsigned int count; + uv_mutex_t mutex; + uv_sem_t turnstile1; + uv_sem_t turnstile2; +} uv_barrier_t; + +typedef struct { + DWORD tls_index; +} uv_key_t; + +#define UV_ONCE_INIT { 0, NULL } + +typedef struct uv_once_s { + unsigned char ran; + HANDLE event; +} uv_once_t; + +/* Platform-specific definitions for uv_spawn support. */ +typedef unsigned char uv_uid_t; +typedef unsigned char uv_gid_t; + +typedef struct uv__dirent_s { + int d_type; + char d_name[1]; +} uv__dirent_t; + +#define UV_DIR_PRIVATE_FIELDS \ + HANDLE dir_handle; \ + WIN32_FIND_DATAW find_data; \ + BOOL need_find_call; + +#define HAVE_DIRENT_TYPES +#define UV__DT_DIR UV_DIRENT_DIR +#define UV__DT_FILE UV_DIRENT_FILE +#define UV__DT_LINK UV_DIRENT_LINK +#define UV__DT_FIFO UV_DIRENT_FIFO +#define UV__DT_SOCKET UV_DIRENT_SOCKET +#define UV__DT_CHAR UV_DIRENT_CHAR +#define UV__DT_BLOCK UV_DIRENT_BLOCK + +/* Platform-specific definitions for uv_dlopen support. */ +#define UV_DYNAMIC FAR WINAPI +typedef struct { + HMODULE handle; + char* errmsg; +} uv_lib_t; + +#define UV_LOOP_PRIVATE_FIELDS \ + /* The loop's I/O completion port */ \ + HANDLE iocp; \ + /* The current time according to the event loop. in msecs. */ \ + uint64_t time; \ + /* Tail of a single-linked circular queue of pending reqs. If the queue */ \ + /* is empty, tail_ is NULL. If there is only one item, */ \ + /* tail_->next_req == tail_ */ \ + uv_req_t* pending_reqs_tail; \ + /* Head of a single-linked list of closed handles */ \ + uv_handle_t* endgame_handles; \ + /* TODO(bnoordhuis) Stop heap-allocating |timer_heap| in libuv v2.x. */ \ + void* timer_heap; \ + /* Lists of active loop (prepare / check / idle) watchers */ \ + uv_prepare_t* prepare_handles; \ + uv_check_t* check_handles; \ + uv_idle_t* idle_handles; \ + /* This pointer will refer to the prepare/check/idle handle whose */ \ + /* callback is scheduled to be called next. This is needed to allow */ \ + /* safe removal from one of the lists above while that list being */ \ + /* iterated over. */ \ + uv_prepare_t* next_prepare_handle; \ + uv_check_t* next_check_handle; \ + uv_idle_t* next_idle_handle; \ + /* This handle holds the peer sockets for the fast variant of uv_poll_t */ \ + SOCKET poll_peer_sockets[UV_MSAFD_PROVIDER_COUNT]; \ + /* Counter to keep track of active tcp streams */ \ + unsigned int active_tcp_streams; \ + /* Counter to keep track of active udp streams */ \ + unsigned int active_udp_streams; \ + /* Counter to started timer */ \ + uint64_t timer_counter; \ + /* Threadpool */ \ + void* wq[2]; \ + uv_mutex_t wq_mutex; \ + uv_async_t wq_async; + +#define UV_REQ_TYPE_PRIVATE \ + /* TODO: remove the req suffix */ \ + UV_ACCEPT, \ + UV_FS_EVENT_REQ, \ + UV_POLL_REQ, \ + UV_PROCESS_EXIT, \ + UV_READ, \ + UV_UDP_RECV, \ + UV_WAKEUP, \ + UV_SIGNAL_REQ, + +#define UV_REQ_PRIVATE_FIELDS \ + union { \ + /* Used by I/O operations */ \ + struct { \ + OVERLAPPED overlapped; \ + size_t queued_bytes; \ + } io; \ + } u; \ + struct uv_req_s* next_req; + +#define UV_WRITE_PRIVATE_FIELDS \ + int coalesced; \ + uv_buf_t write_buffer; \ + HANDLE event_handle; \ + HANDLE wait_handle; + +#define UV_CONNECT_PRIVATE_FIELDS \ + /* empty */ + +#define UV_SHUTDOWN_PRIVATE_FIELDS \ + /* empty */ + +#define UV_UDP_SEND_PRIVATE_FIELDS \ + /* empty */ + +#define UV_PRIVATE_REQ_TYPES \ + typedef struct uv_pipe_accept_s { \ + UV_REQ_FIELDS \ + HANDLE pipeHandle; \ + struct uv_pipe_accept_s* next_pending; \ + } uv_pipe_accept_t; \ + \ + typedef struct uv_tcp_accept_s { \ + UV_REQ_FIELDS \ + SOCKET accept_socket; \ + char accept_buffer[sizeof(struct sockaddr_storage) * 2 + 32]; \ + HANDLE event_handle; \ + HANDLE wait_handle; \ + struct uv_tcp_accept_s* next_pending; \ + } uv_tcp_accept_t; \ + \ + typedef struct uv_read_s { \ + UV_REQ_FIELDS \ + HANDLE event_handle; \ + HANDLE wait_handle; \ + } uv_read_t; + +#define uv_stream_connection_fields \ + unsigned int write_reqs_pending; \ + uv_shutdown_t* shutdown_req; + +#define uv_stream_server_fields \ + uv_connection_cb connection_cb; + +#define UV_STREAM_PRIVATE_FIELDS \ + unsigned int reqs_pending; \ + int activecnt; \ + uv_read_t read_req; \ + union { \ + struct { uv_stream_connection_fields } conn; \ + struct { uv_stream_server_fields } serv; \ + } stream; + +#define uv_tcp_server_fields \ + uv_tcp_accept_t* accept_reqs; \ + unsigned int processed_accepts; \ + uv_tcp_accept_t* pending_accepts; \ + LPFN_ACCEPTEX func_acceptex; + +#define uv_tcp_connection_fields \ + uv_buf_t read_buffer; \ + LPFN_CONNECTEX func_connectex; + +#define UV_TCP_PRIVATE_FIELDS \ + SOCKET socket; \ + int delayed_error; \ + union { \ + struct { uv_tcp_server_fields } serv; \ + struct { uv_tcp_connection_fields } conn; \ + } tcp; + +#define UV_UDP_PRIVATE_FIELDS \ + SOCKET socket; \ + unsigned int reqs_pending; \ + int activecnt; \ + uv_req_t recv_req; \ + uv_buf_t recv_buffer; \ + struct sockaddr_storage recv_from; \ + int recv_from_len; \ + uv_udp_recv_cb recv_cb; \ + uv_alloc_cb alloc_cb; \ + LPFN_WSARECV func_wsarecv; \ + LPFN_WSARECVFROM func_wsarecvfrom; + +#define uv_pipe_server_fields \ + int pending_instances; \ + uv_pipe_accept_t* accept_reqs; \ + uv_pipe_accept_t* pending_accepts; + +#define uv_pipe_connection_fields \ + uv_timer_t* eof_timer; \ + uv_write_t dummy; /* TODO: retained for ABI compat; remove this in v2.x. */ \ + DWORD ipc_remote_pid; \ + union { \ + uint32_t payload_remaining; \ + uint64_t dummy; /* TODO: retained for ABI compat; remove this in v2.x. */ \ + } ipc_data_frame; \ + void* ipc_xfer_queue[2]; \ + int ipc_xfer_queue_length; \ + uv_write_t* non_overlapped_writes_tail; \ + CRITICAL_SECTION readfile_thread_lock; \ + volatile HANDLE readfile_thread_handle; + +#define UV_PIPE_PRIVATE_FIELDS \ + HANDLE handle; \ + WCHAR* name; \ + union { \ + struct { uv_pipe_server_fields } serv; \ + struct { uv_pipe_connection_fields } conn; \ + } pipe; + +/* TODO: put the parser states in an union - TTY handles are always half-duplex + * so read-state can safely overlap write-state. */ +#define UV_TTY_PRIVATE_FIELDS \ + HANDLE handle; \ + union { \ + struct { \ + /* Used for readable TTY handles */ \ + /* TODO: remove me in v2.x. */ \ + HANDLE unused_; \ + uv_buf_t read_line_buffer; \ + HANDLE read_raw_wait; \ + /* Fields used for translating win keystrokes into vt100 characters */ \ + char last_key[8]; \ + unsigned char last_key_offset; \ + unsigned char last_key_len; \ + WCHAR last_utf16_high_surrogate; \ + INPUT_RECORD last_input_record; \ + } rd; \ + struct { \ + /* Used for writable TTY handles */ \ + /* utf8-to-utf16 conversion state */ \ + unsigned int utf8_codepoint; \ + unsigned char utf8_bytes_left; \ + /* eol conversion state */ \ + unsigned char previous_eol; \ + /* ansi parser state */ \ + unsigned short ansi_parser_state; \ + unsigned char ansi_csi_argc; \ + unsigned short ansi_csi_argv[4]; \ + COORD saved_position; \ + WORD saved_attributes; \ + } wr; \ + } tty; + +#define UV_POLL_PRIVATE_FIELDS \ + SOCKET socket; \ + /* Used in fast mode */ \ + SOCKET peer_socket; \ + AFD_POLL_INFO afd_poll_info_1; \ + AFD_POLL_INFO afd_poll_info_2; \ + /* Used in fast and slow mode. */ \ + uv_req_t poll_req_1; \ + uv_req_t poll_req_2; \ + unsigned char submitted_events_1; \ + unsigned char submitted_events_2; \ + unsigned char mask_events_1; \ + unsigned char mask_events_2; \ + unsigned char events; + +#define UV_TIMER_PRIVATE_FIELDS \ + void* heap_node[3]; \ + int unused; \ + uint64_t timeout; \ + uint64_t repeat; \ + uint64_t start_id; \ + uv_timer_cb timer_cb; + +#define UV_ASYNC_PRIVATE_FIELDS \ + struct uv_req_s async_req; \ + uv_async_cb async_cb; \ + /* char to avoid alignment issues */ \ + char volatile async_sent; + +#define UV_PREPARE_PRIVATE_FIELDS \ + uv_prepare_t* prepare_prev; \ + uv_prepare_t* prepare_next; \ + uv_prepare_cb prepare_cb; + +#define UV_CHECK_PRIVATE_FIELDS \ + uv_check_t* check_prev; \ + uv_check_t* check_next; \ + uv_check_cb check_cb; + +#define UV_IDLE_PRIVATE_FIELDS \ + uv_idle_t* idle_prev; \ + uv_idle_t* idle_next; \ + uv_idle_cb idle_cb; + +#define UV_HANDLE_PRIVATE_FIELDS \ + uv_handle_t* endgame_next; \ + unsigned int flags; + +#define UV_GETADDRINFO_PRIVATE_FIELDS \ + struct uv__work work_req; \ + uv_getaddrinfo_cb getaddrinfo_cb; \ + void* alloc; \ + WCHAR* node; \ + WCHAR* service; \ + /* The addrinfoW field is used to store a pointer to the hints, and */ \ + /* later on to store the result of GetAddrInfoW. The final result will */ \ + /* be converted to struct addrinfo* and stored in the addrinfo field. */ \ + struct addrinfoW* addrinfow; \ + struct addrinfo* addrinfo; \ + int retcode; + +#define UV_GETNAMEINFO_PRIVATE_FIELDS \ + struct uv__work work_req; \ + uv_getnameinfo_cb getnameinfo_cb; \ + struct sockaddr_storage storage; \ + int flags; \ + char host[NI_MAXHOST]; \ + char service[NI_MAXSERV]; \ + int retcode; + +#define UV_PROCESS_PRIVATE_FIELDS \ + struct uv_process_exit_s { \ + UV_REQ_FIELDS \ + } exit_req; \ + BYTE* child_stdio_buffer; \ + int exit_signal; \ + HANDLE wait_handle; \ + HANDLE process_handle; \ + volatile char exit_cb_pending; + +#define UV_FS_PRIVATE_FIELDS \ + struct uv__work work_req; \ + int flags; \ + DWORD sys_errno_; \ + union { \ + /* TODO: remove me in 0.9. */ \ + WCHAR* pathw; \ + int fd; \ + } file; \ + union { \ + struct { \ + int mode; \ + WCHAR* new_pathw; \ + int file_flags; \ + int fd_out; \ + unsigned int nbufs; \ + uv_buf_t* bufs; \ + int64_t offset; \ + uv_buf_t bufsml[4]; \ + } info; \ + struct { \ + double atime; \ + double mtime; \ + } time; \ + } fs; + +#define UV_WORK_PRIVATE_FIELDS \ + struct uv__work work_req; + +#define UV_FS_EVENT_PRIVATE_FIELDS \ + struct uv_fs_event_req_s { \ + UV_REQ_FIELDS \ + } req; \ + HANDLE dir_handle; \ + int req_pending; \ + uv_fs_event_cb cb; \ + WCHAR* filew; \ + WCHAR* short_filew; \ + WCHAR* dirw; \ + char* buffer; + +#define UV_SIGNAL_PRIVATE_FIELDS \ + RB_ENTRY(uv_signal_s) tree_entry; \ + struct uv_req_s signal_req; \ + unsigned long pending_signum; + +#ifndef F_OK +#define F_OK 0 +#endif +#ifndef R_OK +#define R_OK 4 +#endif +#ifndef W_OK +#define W_OK 2 +#endif +#ifndef X_OK +#define X_OK 1 +#endif + +/* fs open() flags supported on this platform: */ +#define UV_FS_O_APPEND _O_APPEND +#define UV_FS_O_CREAT _O_CREAT +#define UV_FS_O_EXCL _O_EXCL +#define UV_FS_O_FILEMAP 0x20000000 +#define UV_FS_O_RANDOM _O_RANDOM +#define UV_FS_O_RDONLY _O_RDONLY +#define UV_FS_O_RDWR _O_RDWR +#define UV_FS_O_SEQUENTIAL _O_SEQUENTIAL +#define UV_FS_O_SHORT_LIVED _O_SHORT_LIVED +#define UV_FS_O_TEMPORARY _O_TEMPORARY +#define UV_FS_O_TRUNC _O_TRUNC +#define UV_FS_O_WRONLY _O_WRONLY + +/* fs open() flags supported on other platforms (or mapped on this platform): */ +#define UV_FS_O_DIRECT 0x02000000 /* FILE_FLAG_NO_BUFFERING */ +#define UV_FS_O_DIRECTORY 0 +#define UV_FS_O_DSYNC 0x04000000 /* FILE_FLAG_WRITE_THROUGH */ +#define UV_FS_O_EXLOCK 0x10000000 /* EXCLUSIVE SHARING MODE */ +#define UV_FS_O_NOATIME 0 +#define UV_FS_O_NOCTTY 0 +#define UV_FS_O_NOFOLLOW 0 +#define UV_FS_O_NONBLOCK 0 +#define UV_FS_O_SYMLINK 0 +#define UV_FS_O_SYNC 0x08000000 /* FILE_FLAG_WRITE_THROUGH */ diff --git a/external/libuv/src/fs-poll.c b/external/libuv/src/fs-poll.c new file mode 100644 index 000000000..6196eb1a3 --- /dev/null +++ b/external/libuv/src/fs-poll.c @@ -0,0 +1,287 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#include "uv.h" +#include "uv-common.h" + +#ifdef _WIN32 +#include "win/internal.h" +#include "win/handle-inl.h" +#define uv__make_close_pending(h) uv_want_endgame((h)->loop, (h)) +#else +#include "unix/internal.h" +#endif + +#include +#include +#include + +struct poll_ctx { + uv_fs_poll_t* parent_handle; + int busy_polling; + unsigned int interval; + uint64_t start_time; + uv_loop_t* loop; + uv_fs_poll_cb poll_cb; + uv_timer_t timer_handle; + uv_fs_t fs_req; /* TODO(bnoordhuis) mark fs_req internal */ + uv_stat_t statbuf; + struct poll_ctx* previous; /* context from previous start()..stop() period */ + char path[1]; /* variable length */ +}; + +static int statbuf_eq(const uv_stat_t* a, const uv_stat_t* b); +static void poll_cb(uv_fs_t* req); +static void timer_cb(uv_timer_t* timer); +static void timer_close_cb(uv_handle_t* handle); + +static uv_stat_t zero_statbuf; + + +int uv_fs_poll_init(uv_loop_t* loop, uv_fs_poll_t* handle) { + uv__handle_init(loop, (uv_handle_t*)handle, UV_FS_POLL); + handle->poll_ctx = NULL; + return 0; +} + + +int uv_fs_poll_start(uv_fs_poll_t* handle, + uv_fs_poll_cb cb, + const char* path, + unsigned int interval) { + struct poll_ctx* ctx; + uv_loop_t* loop; + size_t len; + int err; + + if (uv_is_active((uv_handle_t*)handle)) + return 0; + + loop = handle->loop; + len = strlen(path); + ctx = (struct poll_ctx *)uv__calloc(1, sizeof(*ctx) + len); + + if (ctx == NULL) + return UV_ENOMEM; + + ctx->loop = loop; + ctx->poll_cb = cb; + ctx->interval = interval ? interval : 1; + ctx->start_time = uv_now(loop); + ctx->parent_handle = handle; + memcpy(ctx->path, path, len + 1); + + err = uv_timer_init(loop, &ctx->timer_handle); + if (err < 0) + goto error; + + ctx->timer_handle.flags |= UV_HANDLE_INTERNAL; + uv__handle_unref(&ctx->timer_handle); + + err = uv_fs_stat(loop, &ctx->fs_req, ctx->path, poll_cb); + if (err < 0) + goto error; + + if (handle->poll_ctx != NULL) + ctx->previous = (struct poll_ctx *)handle->poll_ctx; + handle->poll_ctx = ctx; + uv__handle_start(handle); + + return 0; + +error: + uv__free(ctx); + return err; +} + + +int uv_fs_poll_stop(uv_fs_poll_t* handle) { + struct poll_ctx* ctx; + + if (!uv_is_active((uv_handle_t*)handle)) + return 0; + + ctx = (struct poll_ctx *)handle->poll_ctx; + assert(ctx != NULL); + assert(ctx->parent_handle == handle); + + /* Close the timer if it's active. If it's inactive, there's a stat request + * in progress and poll_cb will take care of the cleanup. + */ + if (uv_is_active((uv_handle_t*)&ctx->timer_handle)) + uv_close((uv_handle_t*)&ctx->timer_handle, timer_close_cb); + + uv__handle_stop(handle); + + return 0; +} + + +int uv_fs_poll_getpath(uv_fs_poll_t* handle, char* buffer, size_t* size) { + struct poll_ctx* ctx; + size_t required_len; + + if (!uv_is_active((uv_handle_t*)handle)) { + *size = 0; + return UV_EINVAL; + } + + ctx = (struct poll_ctx *)handle->poll_ctx; + assert(ctx != NULL); + + required_len = strlen(ctx->path); + if (required_len >= *size) { + *size = required_len + 1; + return UV_ENOBUFS; + } + + memcpy(buffer, ctx->path, required_len); + *size = required_len; + buffer[required_len] = '\0'; + + return 0; +} + + +void uv__fs_poll_close(uv_fs_poll_t* handle) { + uv_fs_poll_stop(handle); + + if (handle->poll_ctx == NULL) + uv__make_close_pending((uv_handle_t*)handle); +} + + +static void timer_cb(uv_timer_t* timer) { + struct poll_ctx* ctx; + + ctx = container_of(timer, struct poll_ctx, timer_handle); + assert(ctx->parent_handle != NULL); + assert(ctx->parent_handle->poll_ctx == ctx); + ctx->start_time = uv_now(ctx->loop); + + if (uv_fs_stat(ctx->loop, &ctx->fs_req, ctx->path, poll_cb)) + abort(); +} + + +static void poll_cb(uv_fs_t* req) { + uv_stat_t* statbuf; + struct poll_ctx* ctx; + uint64_t interval; + uv_fs_poll_t* handle; + + ctx = container_of(req, struct poll_ctx, fs_req); + handle = ctx->parent_handle; + + if (!uv_is_active((uv_handle_t*)handle) || uv__is_closing(handle)) + goto out; + + if (req->result != 0) { + if (ctx->busy_polling != req->result) { + ctx->poll_cb(ctx->parent_handle, + req->result, + &ctx->statbuf, + &zero_statbuf); + ctx->busy_polling = req->result; + } + goto out; + } + + statbuf = &req->statbuf; + + if (ctx->busy_polling != 0) + if (ctx->busy_polling < 0 || !statbuf_eq(&ctx->statbuf, statbuf)) + ctx->poll_cb(ctx->parent_handle, 0, &ctx->statbuf, statbuf); + + ctx->statbuf = *statbuf; + ctx->busy_polling = 1; + +out: + uv_fs_req_cleanup(req); + + if (!uv_is_active((uv_handle_t*)handle) || uv__is_closing(handle)) { + uv_close((uv_handle_t*)&ctx->timer_handle, timer_close_cb); + return; + } + + /* Reschedule timer, subtract the delay from doing the stat(). */ + interval = ctx->interval; + interval -= (uv_now(ctx->loop) - ctx->start_time) % interval; + + if (uv_timer_start(&ctx->timer_handle, timer_cb, interval, 0)) + abort(); +} + + +static void timer_close_cb(uv_handle_t* timer) { + struct poll_ctx* ctx; + struct poll_ctx* it; + struct poll_ctx* last; + uv_fs_poll_t* handle; + + ctx = container_of(timer, struct poll_ctx, timer_handle); + handle = ctx->parent_handle; + if (ctx == handle->poll_ctx) { + handle->poll_ctx = ctx->previous; + if (handle->poll_ctx == NULL && uv__is_closing(handle)) + uv__make_close_pending((uv_handle_t*)handle); + } else { + for (last = (struct poll_ctx *)handle->poll_ctx, it = last->previous; + it != ctx; + last = it, it = it->previous) { + assert(last->previous != NULL); + } + last->previous = ctx->previous; + } + uv__free(ctx); +} + + +static int statbuf_eq(const uv_stat_t* a, const uv_stat_t* b) { + return a->st_ctim.tv_nsec == b->st_ctim.tv_nsec + && a->st_mtim.tv_nsec == b->st_mtim.tv_nsec + && a->st_birthtim.tv_nsec == b->st_birthtim.tv_nsec + && a->st_ctim.tv_sec == b->st_ctim.tv_sec + && a->st_mtim.tv_sec == b->st_mtim.tv_sec + && a->st_birthtim.tv_sec == b->st_birthtim.tv_sec + && a->st_size == b->st_size + && a->st_mode == b->st_mode + && a->st_uid == b->st_uid + && a->st_gid == b->st_gid + && a->st_ino == b->st_ino + && a->st_dev == b->st_dev + && a->st_flags == b->st_flags + && a->st_gen == b->st_gen; +} + + +#if defined(_WIN32) + +#include "win/internal.h" +#include "win/handle-inl.h" + +void uv__fs_poll_endgame(uv_loop_t* loop, uv_fs_poll_t* handle) { + assert(handle->flags & UV_HANDLE_CLOSING); + assert(!(handle->flags & UV_HANDLE_CLOSED)); + uv__handle_close(handle); +} + +#endif /* _WIN32 */ diff --git a/external/libuv/src/heap-inl.h b/external/libuv/src/heap-inl.h new file mode 100644 index 000000000..1e2ed60e0 --- /dev/null +++ b/external/libuv/src/heap-inl.h @@ -0,0 +1,245 @@ +/* Copyright (c) 2013, Ben Noordhuis + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef UV_SRC_HEAP_H_ +#define UV_SRC_HEAP_H_ + +#include /* NULL */ + +#if defined(__GNUC__) +# define HEAP_EXPORT(declaration) __attribute__((unused)) static declaration +#else +# define HEAP_EXPORT(declaration) static declaration +#endif + +struct heap_node { + struct heap_node* left; + struct heap_node* right; + struct heap_node* parent; +}; + +/* A binary min heap. The usual properties hold: the root is the lowest + * element in the set, the height of the tree is at most log2(nodes) and + * it's always a complete binary tree. + * + * The heap function try hard to detect corrupted tree nodes at the cost + * of a minor reduction in performance. Compile with -DNDEBUG to disable. + */ +struct heap { + struct heap_node* min; + unsigned int nelts; +}; + +/* Return non-zero if a < b. */ +typedef int (*heap_compare_fn)(const struct heap_node* a, + const struct heap_node* b); + +/* Public functions. */ +HEAP_EXPORT(void heap_init(struct heap* heap)); +HEAP_EXPORT(struct heap_node* heap_min(const struct heap* heap)); +HEAP_EXPORT(void heap_insert(struct heap* heap, + struct heap_node* newnode, + heap_compare_fn less_than)); +HEAP_EXPORT(void heap_remove(struct heap* heap, + struct heap_node* node, + heap_compare_fn less_than)); +HEAP_EXPORT(void heap_dequeue(struct heap* heap, heap_compare_fn less_than)); + +/* Implementation follows. */ + +HEAP_EXPORT(void heap_init(struct heap* heap)) { + heap->min = NULL; + heap->nelts = 0; +} + +HEAP_EXPORT(struct heap_node* heap_min(const struct heap* heap)) { + return heap->min; +} + +/* Swap parent with child. Child moves closer to the root, parent moves away. */ +static void heap_node_swap(struct heap* heap, + struct heap_node* parent, + struct heap_node* child) { + struct heap_node* sibling; + struct heap_node t; + + t = *parent; + *parent = *child; + *child = t; + + parent->parent = child; + if (child->left == child) { + child->left = parent; + sibling = child->right; + } else { + child->right = parent; + sibling = child->left; + } + if (sibling != NULL) + sibling->parent = child; + + if (parent->left != NULL) + parent->left->parent = parent; + if (parent->right != NULL) + parent->right->parent = parent; + + if (child->parent == NULL) + heap->min = child; + else if (child->parent->left == parent) + child->parent->left = child; + else + child->parent->right = child; +} + +HEAP_EXPORT(void heap_insert(struct heap* heap, + struct heap_node* newnode, + heap_compare_fn less_than)) { + struct heap_node** parent; + struct heap_node** child; + unsigned int path; + unsigned int n; + unsigned int k; + + newnode->left = NULL; + newnode->right = NULL; + newnode->parent = NULL; + + /* Calculate the path from the root to the insertion point. This is a min + * heap so we always insert at the left-most free node of the bottom row. + */ + path = 0; + for (k = 0, n = 1 + heap->nelts; n >= 2; k += 1, n /= 2) + path = (path << 1) | (n & 1); + + /* Now traverse the heap using the path we calculated in the previous step. */ + parent = child = &heap->min; + while (k > 0) { + parent = child; + if (path & 1) + child = &(*child)->right; + else + child = &(*child)->left; + path >>= 1; + k -= 1; + } + + /* Insert the new node. */ + newnode->parent = *parent; + *child = newnode; + heap->nelts += 1; + + /* Walk up the tree and check at each node if the heap property holds. + * It's a min heap so parent < child must be true. + */ + while (newnode->parent != NULL && less_than(newnode, newnode->parent)) + heap_node_swap(heap, newnode->parent, newnode); +} + +HEAP_EXPORT(void heap_remove(struct heap* heap, + struct heap_node* node, + heap_compare_fn less_than)) { + struct heap_node* smallest; + struct heap_node** max; + struct heap_node* child; + unsigned int path; + unsigned int k; + unsigned int n; + + if (heap->nelts == 0) + return; + + /* Calculate the path from the min (the root) to the max, the left-most node + * of the bottom row. + */ + path = 0; + for (k = 0, n = heap->nelts; n >= 2; k += 1, n /= 2) + path = (path << 1) | (n & 1); + + /* Now traverse the heap using the path we calculated in the previous step. */ + max = &heap->min; + while (k > 0) { + if (path & 1) + max = &(*max)->right; + else + max = &(*max)->left; + path >>= 1; + k -= 1; + } + + heap->nelts -= 1; + + /* Unlink the max node. */ + child = *max; + *max = NULL; + + if (child == node) { + /* We're removing either the max or the last node in the tree. */ + if (child == heap->min) { + heap->min = NULL; + } + return; + } + + /* Replace the to be deleted node with the max node. */ + child->left = node->left; + child->right = node->right; + child->parent = node->parent; + + if (child->left != NULL) { + child->left->parent = child; + } + + if (child->right != NULL) { + child->right->parent = child; + } + + if (node->parent == NULL) { + heap->min = child; + } else if (node->parent->left == node) { + node->parent->left = child; + } else { + node->parent->right = child; + } + + /* Walk down the subtree and check at each node if the heap property holds. + * It's a min heap so parent < child must be true. If the parent is bigger, + * swap it with the smallest child. + */ + for (;;) { + smallest = child; + if (child->left != NULL && less_than(child->left, smallest)) + smallest = child->left; + if (child->right != NULL && less_than(child->right, smallest)) + smallest = child->right; + if (smallest == child) + break; + heap_node_swap(heap, child, smallest); + } + + /* Walk up the subtree and check that each parent is less than the node + * this is required, because `max` node is not guaranteed to be the + * actual maximum in tree + */ + while (child->parent != NULL && less_than(child, child->parent)) + heap_node_swap(heap, child->parent, child); +} + +HEAP_EXPORT(void heap_dequeue(struct heap* heap, heap_compare_fn less_than)) { + heap_remove(heap, heap->min, less_than); +} + +#undef HEAP_EXPORT + +#endif /* UV_SRC_HEAP_H_ */ diff --git a/external/libuv/src/idna.c b/external/libuv/src/idna.c new file mode 100644 index 000000000..13ffac6be --- /dev/null +++ b/external/libuv/src/idna.c @@ -0,0 +1,291 @@ +/* Copyright (c) 2011, 2018 Ben Noordhuis + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +/* Derived from https://github.com/bnoordhuis/punycode + * but updated to support IDNA 2008. + */ + +#include "uv.h" +#include "idna.h" +#include + +static unsigned uv__utf8_decode1_slow(const char** p, + const char* pe, + unsigned a) { + unsigned b; + unsigned c; + unsigned d; + unsigned min; + + if (a > 0xF7) + return -1; + + switch (*p - pe) { + default: + if (a > 0xEF) { + min = 0x10000; + a = a & 7; + b = (unsigned char) *(*p)++; + c = (unsigned char) *(*p)++; + d = (unsigned char) *(*p)++; + break; + } + /* Fall through. */ + case 2: + if (a > 0xDF) { + min = 0x800; + b = 0x80 | (a & 15); + c = (unsigned char) *(*p)++; + d = (unsigned char) *(*p)++; + a = 0; + break; + } + /* Fall through. */ + case 1: + if (a > 0xBF) { + min = 0x80; + b = 0x80; + c = 0x80 | (a & 31); + d = (unsigned char) *(*p)++; + a = 0; + break; + } + return -1; /* Invalid continuation byte. */ + } + + if (0x80 != (0xC0 & (b ^ c ^ d))) + return -1; /* Invalid sequence. */ + + b &= 63; + c &= 63; + d &= 63; + a = (a << 18) | (b << 12) | (c << 6) | d; + + if (a < min) + return -1; /* Overlong sequence. */ + + if (a > 0x10FFFF) + return -1; /* Four-byte sequence > U+10FFFF. */ + + if (a >= 0xD800 && a <= 0xDFFF) + return -1; /* Surrogate pair. */ + + return a; +} + +unsigned uv__utf8_decode1(const char** p, const char* pe) { + unsigned a; + + a = (unsigned char) *(*p)++; + + if (a < 128) + return a; /* ASCII, common case. */ + + return uv__utf8_decode1_slow(p, pe, a); +} + +#define foreach_codepoint(c, p, pe) \ + for (; (void) (*p <= pe && (c = uv__utf8_decode1(p, pe))), *p <= pe;) + +static int uv__idna_toascii_label(const char* s, const char* se, + char** d, char* de) { + static const char alphabet[] = "abcdefghijklmnopqrstuvwxyz0123456789"; + const char* ss; + unsigned c; + unsigned h; + unsigned k; + unsigned n; + unsigned m; + unsigned q; + unsigned t; + unsigned x; + unsigned y; + unsigned bias; + unsigned delta; + unsigned todo; + int first; + + h = 0; + ss = s; + todo = 0; + + foreach_codepoint(c, &s, se) { + if (c < 128) + h++; + else if (c == (unsigned) -1) + return UV_EINVAL; + else + todo++; + } + + if (todo > 0) { + if (*d < de) *(*d)++ = 'x'; + if (*d < de) *(*d)++ = 'n'; + if (*d < de) *(*d)++ = '-'; + if (*d < de) *(*d)++ = '-'; + } + + x = 0; + s = ss; + foreach_codepoint(c, &s, se) { + if (c > 127) + continue; + + if (*d < de) + *(*d)++ = c; + + if (++x == h) + break; /* Visited all ASCII characters. */ + } + + if (todo == 0) + return h; + + /* Only write separator when we've written ASCII characters first. */ + if (h > 0) + if (*d < de) + *(*d)++ = '-'; + + n = 128; + bias = 72; + delta = 0; + first = 1; + + while (todo > 0) { + m = -1; + s = ss; + foreach_codepoint(c, &s, se) + if (c >= n) + if (c < m) + m = c; + + x = m - n; + y = h + 1; + + if (x > ~delta / y) + return UV_E2BIG; /* Overflow. */ + + delta += x * y; + n = m; + + s = ss; + foreach_codepoint(c, &s, se) { + if (c < n) + if (++delta == 0) + return UV_E2BIG; /* Overflow. */ + + if (c != n) + continue; + + for (k = 36, q = delta; /* empty */; k += 36) { + t = 1; + + if (k > bias) + t = k - bias; + + if (t > 26) + t = 26; + + if (q < t) + break; + + /* TODO(bnoordhuis) Since 1 <= t <= 26 and therefore + * 10 <= y <= 35, we can optimize the long division + * into a table-based reciprocal multiplication. + */ + x = q - t; + y = 36 - t; /* 10 <= y <= 35 since 1 <= t <= 26. */ + q = x / y; + t = t + x % y; /* 1 <= t <= 35 because of y. */ + + if (*d < de) + *(*d)++ = alphabet[t]; + } + + if (*d < de) + *(*d)++ = alphabet[q]; + + delta /= 2; + + if (first) { + delta /= 350; + first = 0; + } + + /* No overflow check is needed because |delta| was just + * divided by 2 and |delta+delta >= delta + delta/h|. + */ + h++; + delta += delta / h; + + for (bias = 0; delta > 35 * 26 / 2; bias += 36) + delta /= 35; + + bias += 36 * delta / (delta + 38); + delta = 0; + todo--; + } + + delta++; + n++; + } + + return 0; +} + +#undef foreach_codepoint + +long uv__idna_toascii(const char* s, const char* se, char* d, char* de) { + const char* si; + const char* st; + unsigned c; + char* ds; + int rc; + + ds = d; + + for (si = s; si < se; /* empty */) { + st = si; + c = uv__utf8_decode1(&si, se); + + if (c != '.') + if (c != 0x3002) /* 。 */ + if (c != 0xFF0E) /* . */ + if (c != 0xFF61) /* 。 */ + continue; + + rc = uv__idna_toascii_label(s, st, &d, de); + + if (rc < 0) + return rc; + + if (d < de) + *d++ = '.'; + + s = si; + } + + if (s < se) { + rc = uv__idna_toascii_label(s, se, &d, de); + + if (rc < 0) + return rc; + } + + if (d < de) + *d++ = '\0'; + + return d - ds; /* Number of bytes written. */ +} diff --git a/external/libuv/src/idna.h b/external/libuv/src/idna.h new file mode 100644 index 000000000..8e0c592fe --- /dev/null +++ b/external/libuv/src/idna.h @@ -0,0 +1,31 @@ +/* Copyright (c) 2011, 2018 Ben Noordhuis + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef UV_SRC_IDNA_H_ +#define UV_SRC_IDNA_H_ + +/* Decode a single codepoint. Returns the codepoint or UINT32_MAX on error. + * |p| is updated on success _and_ error, i.e., bad multi-byte sequences are + * skipped in their entirety, not just the first bad byte. + */ +unsigned uv__utf8_decode1(const char** p, const char* pe); + +/* Convert a UTF-8 domain name to IDNA 2008 / Punycode. A return value >= 0 + * is the number of bytes written to |d|, including the trailing nul byte. + * A return value < 0 is a libuv error code. |s| and |d| can not overlap. + */ +long uv__idna_toascii(const char* s, const char* se, char* d, char* de); + +#endif /* UV_SRC_IDNA_H_ */ diff --git a/external/libuv/src/inet.c b/external/libuv/src/inet.c new file mode 100644 index 000000000..6fb806b78 --- /dev/null +++ b/external/libuv/src/inet.c @@ -0,0 +1,302 @@ +/* + * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC") + * Copyright (c) 1996-1999 by Internet Software Consortium. + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT + * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include +#include + +#if defined(_MSC_VER) && _MSC_VER < 1600 +# include "uv/stdint-msvc2008.h" +#else +# include +#endif + +#include "uv.h" +#include "uv-common.h" + +#define UV__INET_ADDRSTRLEN 16 +#define UV__INET6_ADDRSTRLEN 46 + + +static int inet_ntop4(const unsigned char *src, char *dst, size_t size); +static int inet_ntop6(const unsigned char *src, char *dst, size_t size); +static int inet_pton4(const char *src, unsigned char *dst); +static int inet_pton6(const char *src, unsigned char *dst); + + +int uv_inet_ntop(int af, const void* src, char* dst, size_t size) { + switch (af) { + case AF_INET: + return (inet_ntop4((const unsigned char *)src, dst, size)); + case AF_INET6: + return (inet_ntop6((const unsigned char *)src, dst, size)); + default: + return UV_EAFNOSUPPORT; + } + /* NOTREACHED */ +} + + +static int inet_ntop4(const unsigned char *src, char *dst, size_t size) { + static const char fmt[] = "%u.%u.%u.%u"; + char tmp[UV__INET_ADDRSTRLEN]; + int l; + + l = snprintf(tmp, sizeof(tmp), fmt, src[0], src[1], src[2], src[3]); + if (l <= 0 || (size_t) l >= size) { + return UV_ENOSPC; + } + uv__strscpy(dst, tmp, size); + return 0; +} + + +static int inet_ntop6(const unsigned char *src, char *dst, size_t size) { + /* + * Note that int32_t and int16_t need only be "at least" large enough + * to contain a value of the specified size. On some systems, like + * Crays, there is no such thing as an integer variable with 16 bits. + * Keep this in mind if you think this function should have been coded + * to use pointer overlays. All the world's not a VAX. + */ + char tmp[UV__INET6_ADDRSTRLEN], *tp; + struct { int base, len; } best, cur; + unsigned int words[sizeof(struct in6_addr) / sizeof(uint16_t)]; + int i; + + /* + * Preprocess: + * Copy the input (bytewise) array into a wordwise array. + * Find the longest run of 0x00's in src[] for :: shorthanding. + */ + memset(words, '\0', sizeof words); + for (i = 0; i < (int) sizeof(struct in6_addr); i++) + words[i / 2] |= (src[i] << ((1 - (i % 2)) << 3)); + best.base = -1; + best.len = 0; + cur.base = -1; + cur.len = 0; + for (i = 0; i < (int) ARRAY_SIZE(words); i++) { + if (words[i] == 0) { + if (cur.base == -1) + cur.base = i, cur.len = 1; + else + cur.len++; + } else { + if (cur.base != -1) { + if (best.base == -1 || cur.len > best.len) + best = cur; + cur.base = -1; + } + } + } + if (cur.base != -1) { + if (best.base == -1 || cur.len > best.len) + best = cur; + } + if (best.base != -1 && best.len < 2) + best.base = -1; + + /* + * Format the result. + */ + tp = tmp; + for (i = 0; i < (int) ARRAY_SIZE(words); i++) { + /* Are we inside the best run of 0x00's? */ + if (best.base != -1 && i >= best.base && + i < (best.base + best.len)) { + if (i == best.base) + *tp++ = ':'; + continue; + } + /* Are we following an initial run of 0x00s or any real hex? */ + if (i != 0) + *tp++ = ':'; + /* Is this address an encapsulated IPv4? */ + if (i == 6 && best.base == 0 && (best.len == 6 || + (best.len == 7 && words[7] != 0x0001) || + (best.len == 5 && words[5] == 0xffff))) { + int err = inet_ntop4(src+12, tp, sizeof tmp - (tp - tmp)); + if (err) + return err; + tp += strlen(tp); + break; + } + tp += sprintf(tp, "%x", words[i]); + } + /* Was it a trailing run of 0x00's? */ + if (best.base != -1 && (best.base + best.len) == ARRAY_SIZE(words)) + *tp++ = ':'; + *tp++ = '\0'; + if (UV_E2BIG == uv__strscpy(dst, tmp, size)) + return UV_ENOSPC; + return 0; +} + + +int uv_inet_pton(int af, const char* src, void* dst) { + if (src == NULL || dst == NULL) + return UV_EINVAL; + + switch (af) { + case AF_INET: + return (inet_pton4(src, (unsigned char *)dst)); + case AF_INET6: { + int len; + char tmp[UV__INET6_ADDRSTRLEN], *s, *p; + s = (char*) src; + p = strchr(src, '%'); + if (p != NULL) { + s = tmp; + len = p - src; + if (len > UV__INET6_ADDRSTRLEN-1) + return UV_EINVAL; + memcpy(s, src, len); + s[len] = '\0'; + } + return inet_pton6(s, (unsigned char *)dst); + } + default: + return UV_EAFNOSUPPORT; + } + /* NOTREACHED */ +} + + +static int inet_pton4(const char *src, unsigned char *dst) { + static const char digits[] = "0123456789"; + int saw_digit, octets, ch; + unsigned char tmp[sizeof(struct in_addr)], *tp; + + saw_digit = 0; + octets = 0; + *(tp = tmp) = 0; + while ((ch = *src++) != '\0') { + const char *pch; + + if ((pch = strchr(digits, ch)) != NULL) { + unsigned int nw = *tp * 10 + (pch - digits); + + if (saw_digit && *tp == 0) + return UV_EINVAL; + if (nw > 255) + return UV_EINVAL; + *tp = nw; + if (!saw_digit) { + if (++octets > 4) + return UV_EINVAL; + saw_digit = 1; + } + } else if (ch == '.' && saw_digit) { + if (octets == 4) + return UV_EINVAL; + *++tp = 0; + saw_digit = 0; + } else + return UV_EINVAL; + } + if (octets < 4) + return UV_EINVAL; + memcpy(dst, tmp, sizeof(struct in_addr)); + return 0; +} + + +static int inet_pton6(const char *src, unsigned char *dst) { + static const char xdigits_l[] = "0123456789abcdef", + xdigits_u[] = "0123456789ABCDEF"; + unsigned char tmp[sizeof(struct in6_addr)], *tp, *endp, *colonp; + const char *xdigits, *curtok; + int ch, seen_xdigits; + unsigned int val; + + memset((tp = tmp), '\0', sizeof tmp); + endp = tp + sizeof tmp; + colonp = NULL; + /* Leading :: requires some special handling. */ + if (*src == ':') + if (*++src != ':') + return UV_EINVAL; + curtok = src; + seen_xdigits = 0; + val = 0; + while ((ch = *src++) != '\0') { + const char *pch; + + if ((pch = strchr((xdigits = xdigits_l), ch)) == NULL) + pch = strchr((xdigits = xdigits_u), ch); + if (pch != NULL) { + val <<= 4; + val |= (pch - xdigits); + if (++seen_xdigits > 4) + return UV_EINVAL; + continue; + } + if (ch == ':') { + curtok = src; + if (!seen_xdigits) { + if (colonp) + return UV_EINVAL; + colonp = tp; + continue; + } else if (*src == '\0') { + return UV_EINVAL; + } + if (tp + sizeof(uint16_t) > endp) + return UV_EINVAL; + *tp++ = (unsigned char) (val >> 8) & 0xff; + *tp++ = (unsigned char) val & 0xff; + seen_xdigits = 0; + val = 0; + continue; + } + if (ch == '.' && ((tp + sizeof(struct in_addr)) <= endp)) { + int err = inet_pton4(curtok, tp); + if (err == 0) { + tp += sizeof(struct in_addr); + seen_xdigits = 0; + break; /*%< '\\0' was seen by inet_pton4(). */ + } + } + return UV_EINVAL; + } + if (seen_xdigits) { + if (tp + sizeof(uint16_t) > endp) + return UV_EINVAL; + *tp++ = (unsigned char) (val >> 8) & 0xff; + *tp++ = (unsigned char) val & 0xff; + } + if (colonp != NULL) { + /* + * Since some memmove()'s erroneously fail to handle + * overlapping regions, we'll do the shift by hand. + */ + const int n = tp - colonp; + int i; + + if (tp == endp) + return UV_EINVAL; + for (i = 1; i <= n; i++) { + endp[- i] = colonp[n - i]; + colonp[n - i] = 0; + } + tp = endp; + } + if (tp != endp) + return UV_EINVAL; + memcpy(dst, tmp, sizeof tmp); + return 0; +} diff --git a/external/libuv/src/queue.h b/external/libuv/src/queue.h new file mode 100644 index 000000000..ff3540a0a --- /dev/null +++ b/external/libuv/src/queue.h @@ -0,0 +1,108 @@ +/* Copyright (c) 2013, Ben Noordhuis + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef QUEUE_H_ +#define QUEUE_H_ + +#include + +typedef void *QUEUE[2]; + +/* Private macros. */ +#define QUEUE_NEXT(q) (*(QUEUE **) &((*(q))[0])) +#define QUEUE_PREV(q) (*(QUEUE **) &((*(q))[1])) +#define QUEUE_PREV_NEXT(q) (QUEUE_NEXT(QUEUE_PREV(q))) +#define QUEUE_NEXT_PREV(q) (QUEUE_PREV(QUEUE_NEXT(q))) + +/* Public macros. */ +#define QUEUE_DATA(ptr, type, field) \ + ((type *) ((char *) (ptr) - offsetof(type, field))) + +/* Important note: mutating the list while QUEUE_FOREACH is + * iterating over its elements results in undefined behavior. + */ +#define QUEUE_FOREACH(q, h) \ + for ((q) = QUEUE_NEXT(h); (q) != (h); (q) = QUEUE_NEXT(q)) + +#define QUEUE_EMPTY(q) \ + ((const QUEUE *) (q) == (const QUEUE *) QUEUE_NEXT(q)) + +#define QUEUE_HEAD(q) \ + (QUEUE_NEXT(q)) + +#define QUEUE_INIT(q) \ + do { \ + QUEUE_NEXT(q) = (q); \ + QUEUE_PREV(q) = (q); \ + } \ + while (0) + +#define QUEUE_ADD(h, n) \ + do { \ + QUEUE_PREV_NEXT(h) = QUEUE_NEXT(n); \ + QUEUE_NEXT_PREV(n) = QUEUE_PREV(h); \ + QUEUE_PREV(h) = QUEUE_PREV(n); \ + QUEUE_PREV_NEXT(h) = (h); \ + } \ + while (0) + +#define QUEUE_SPLIT(h, q, n) \ + do { \ + QUEUE_PREV(n) = QUEUE_PREV(h); \ + QUEUE_PREV_NEXT(n) = (n); \ + QUEUE_NEXT(n) = (q); \ + QUEUE_PREV(h) = QUEUE_PREV(q); \ + QUEUE_PREV_NEXT(h) = (h); \ + QUEUE_PREV(q) = (n); \ + } \ + while (0) + +#define QUEUE_MOVE(h, n) \ + do { \ + if (QUEUE_EMPTY(h)) \ + QUEUE_INIT(n); \ + else { \ + QUEUE* q = QUEUE_HEAD(h); \ + QUEUE_SPLIT(h, q, n); \ + } \ + } \ + while (0) + +#define QUEUE_INSERT_HEAD(h, q) \ + do { \ + QUEUE_NEXT(q) = QUEUE_NEXT(h); \ + QUEUE_PREV(q) = (h); \ + QUEUE_NEXT_PREV(q) = (q); \ + QUEUE_NEXT(h) = (q); \ + } \ + while (0) + +#define QUEUE_INSERT_TAIL(h, q) \ + do { \ + QUEUE_NEXT(q) = (h); \ + QUEUE_PREV(q) = QUEUE_PREV(h); \ + QUEUE_PREV_NEXT(q) = (q); \ + QUEUE_PREV(h) = (q); \ + } \ + while (0) + +#define QUEUE_REMOVE(q) \ + do { \ + QUEUE_PREV_NEXT(q) = QUEUE_NEXT(q); \ + QUEUE_NEXT_PREV(q) = QUEUE_PREV(q); \ + } \ + while (0) + +#endif /* QUEUE_H_ */ diff --git a/external/libuv/src/random.c b/external/libuv/src/random.c new file mode 100644 index 000000000..491bf7033 --- /dev/null +++ b/external/libuv/src/random.c @@ -0,0 +1,123 @@ +/* Copyright libuv 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. + */ + +#include "uv.h" +#include "uv-common.h" + +#ifdef _WIN32 +# include "win/internal.h" +#else +# include "unix/internal.h" +#endif + +static int uv__random(void* buf, size_t buflen) { + int rc; + +#if defined(__PASE__) + rc = uv__random_readpath("/dev/urandom", buf, buflen); +#elif defined(_AIX) + rc = uv__random_readpath("/dev/random", buf, buflen); +#elif defined(__APPLE__) || defined(__OpenBSD__) || \ + (defined(__ANDROID_API__) && __ANDROID_API__ >= 28) + rc = uv__random_getentropy(buf, buflen); + if (rc == UV_ENOSYS) + rc = uv__random_devurandom(buf, buflen); +#elif defined(__NetBSD__) + rc = uv__random_sysctl(buf, buflen); +#elif defined(__FreeBSD__) || defined(__linux__) + rc = uv__random_getrandom(buf, buflen); + if (rc == UV_ENOSYS) + rc = uv__random_devurandom(buf, buflen); +# if defined(__linux__) + switch (rc) { + case UV_EACCES: + case UV_EIO: + case UV_ELOOP: + case UV_EMFILE: + case UV_ENFILE: + case UV_ENOENT: + case UV_EPERM: + rc = uv__random_sysctl(buf, buflen); + break; + } +# endif +#elif defined(_WIN32) + uv__once_init(); + rc = uv__random_rtlgenrandom(buf, buflen); +#else + rc = uv__random_devurandom(buf, buflen); +#endif + + return rc; +} + + +static void uv__random_work(struct uv__work* w) { + uv_random_t* req; + + req = container_of(w, uv_random_t, work_req); + req->status = uv__random(req->buf, req->buflen); +} + + +static void uv__random_done(struct uv__work* w, int status) { + uv_random_t* req; + + req = container_of(w, uv_random_t, work_req); + uv__req_unregister(req->loop, req); + + if (status == 0) + status = req->status; + + req->cb(req, status, req->buf, req->buflen); +} + + +int uv_random(uv_loop_t* loop, + uv_random_t* req, + void *buf, + size_t buflen, + unsigned flags, + uv_random_cb cb) { + if (buflen > 0x7FFFFFFFu) + return UV_E2BIG; + + if (flags != 0) + return UV_EINVAL; + + if (cb == NULL) + return uv__random(buf, buflen); + + uv__req_init(loop, req, UV_RANDOM); + req->loop = loop; + req->status = 0; + req->cb = cb; + req->buf = buf; + req->buflen = buflen; + + uv__work_submit(loop, + &req->work_req, + UV__WORK_CPU, + uv__random_work, + uv__random_done); + + return 0; +} diff --git a/external/libuv/src/strscpy.c b/external/libuv/src/strscpy.c new file mode 100644 index 000000000..2a2bdce74 --- /dev/null +++ b/external/libuv/src/strscpy.c @@ -0,0 +1,17 @@ +#include "strscpy.h" +#include /* SSIZE_MAX */ + +ssize_t uv__strscpy(char* d, const char* s, size_t n) { + size_t i; + + for (i = 0; i < n; i++) + if ('\0' == (d[i] = s[i])) + return i > SSIZE_MAX ? UV_E2BIG : (ssize_t) i; + + if (i == 0) + return 0; + + d[--i] = '\0'; + + return UV_E2BIG; +} diff --git a/external/libuv/src/strscpy.h b/external/libuv/src/strscpy.h new file mode 100644 index 000000000..fbe0a393f --- /dev/null +++ b/external/libuv/src/strscpy.h @@ -0,0 +1,18 @@ +#ifndef UV_STRSCPY_H_ +#define UV_STRSCPY_H_ + +/* Include uv.h for its definitions of size_t and ssize_t. + * size_t can be obtained directly from but ssize_t requires + * some hoop jumping on Windows that I didn't want to duplicate here. + */ +#include "uv.h" + +/* Copies up to |n-1| bytes from |d| to |s| and always zero-terminates + * the result, except when |n==0|. Returns the number of bytes copied + * or UV_E2BIG if |d| is too small. + * + * See https://www.kernel.org/doc/htmldocs/kernel-api/API-strscpy.html + */ +ssize_t uv__strscpy(char* d, const char* s, size_t n); + +#endif /* UV_STRSCPY_H_ */ diff --git a/external/libuv/src/threadpool.c b/external/libuv/src/threadpool.c new file mode 100644 index 000000000..cbed47b75 --- /dev/null +++ b/external/libuv/src/threadpool.c @@ -0,0 +1,388 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#include "uv-common.h" + +#if !defined(_WIN32) +# include "unix/internal.h" +#endif + +#include + +#define MAX_THREADPOOL_SIZE 1024 + +static uv_once_t once = UV_ONCE_INIT; +static uv_cond_t cond; +static uv_mutex_t mutex; +static unsigned int idle_threads; +static unsigned int slow_io_work_running; +static unsigned int nthreads; +static uv_thread_t* threads; +static uv_thread_t default_threads[4]; +static QUEUE exit_message; +static QUEUE wq; +static QUEUE run_slow_work_message; +static QUEUE slow_io_pending_wq; + +static unsigned int slow_work_thread_threshold(void) { + return (nthreads + 1) / 2; +} + +static void uv__cancelled(struct uv__work* w) { + abort(); +} + + +/* To avoid deadlock with uv_cancel() it's crucial that the worker + * never holds the global mutex and the loop-local mutex at the same time. + */ +static void worker(void* arg) { + struct uv__work* w; + QUEUE* q; + int is_slow_work; + + uv_sem_post((uv_sem_t*) arg); + arg = NULL; + + uv_mutex_lock(&mutex); + for (;;) { + /* `mutex` should always be locked at this point. */ + + /* Keep waiting while either no work is present or only slow I/O + and we're at the threshold for that. */ + while (QUEUE_EMPTY(&wq) || + (QUEUE_HEAD(&wq) == &run_slow_work_message && + QUEUE_NEXT(&run_slow_work_message) == &wq && + slow_io_work_running >= slow_work_thread_threshold())) { + idle_threads += 1; + uv_cond_wait(&cond, &mutex); + idle_threads -= 1; + } + + q = QUEUE_HEAD(&wq); + if (q == &exit_message) { + uv_cond_signal(&cond); + uv_mutex_unlock(&mutex); + break; + } + + QUEUE_REMOVE(q); + QUEUE_INIT(q); /* Signal uv_cancel() that the work req is executing. */ + + is_slow_work = 0; + if (q == &run_slow_work_message) { + /* If we're at the slow I/O threshold, re-schedule until after all + other work in the queue is done. */ + if (slow_io_work_running >= slow_work_thread_threshold()) { + QUEUE_INSERT_TAIL(&wq, q); + continue; + } + + /* If we encountered a request to run slow I/O work but there is none + to run, that means it's cancelled => Start over. */ + if (QUEUE_EMPTY(&slow_io_pending_wq)) + continue; + + is_slow_work = 1; + slow_io_work_running++; + + q = QUEUE_HEAD(&slow_io_pending_wq); + QUEUE_REMOVE(q); + QUEUE_INIT(q); + + /* If there is more slow I/O work, schedule it to be run as well. */ + if (!QUEUE_EMPTY(&slow_io_pending_wq)) { + QUEUE_INSERT_TAIL(&wq, &run_slow_work_message); + if (idle_threads > 0) + uv_cond_signal(&cond); + } + } + + uv_mutex_unlock(&mutex); + + w = QUEUE_DATA(q, struct uv__work, wq); + w->work(w); + + uv_mutex_lock(&w->loop->wq_mutex); + w->work = NULL; /* Signal uv_cancel() that the work req is done + executing. */ + QUEUE_INSERT_TAIL(&w->loop->wq, &w->wq); + uv_async_send(&w->loop->wq_async); + uv_mutex_unlock(&w->loop->wq_mutex); + + /* Lock `mutex` since that is expected at the start of the next + * iteration. */ + uv_mutex_lock(&mutex); + if (is_slow_work) { + /* `slow_io_work_running` is protected by `mutex`. */ + slow_io_work_running--; + } + } +} + + +static void post(QUEUE* q, enum uv__work_kind kind) { + uv_mutex_lock(&mutex); + if (kind == UV__WORK_SLOW_IO) { + /* Insert into a separate queue. */ + QUEUE_INSERT_TAIL(&slow_io_pending_wq, q); + if (!QUEUE_EMPTY(&run_slow_work_message)) { + /* Running slow I/O tasks is already scheduled => Nothing to do here. + The worker that runs said other task will schedule this one as well. */ + uv_mutex_unlock(&mutex); + return; + } + q = &run_slow_work_message; + } + + QUEUE_INSERT_TAIL(&wq, q); + if (idle_threads > 0) + uv_cond_signal(&cond); + uv_mutex_unlock(&mutex); +} + + +void uv__threadpool_cleanup(void) { +#ifndef _WIN32 + unsigned int i; + + if (nthreads == 0) + return; + + post(&exit_message, UV__WORK_CPU); + + for (i = 0; i < nthreads; i++) + if (uv_thread_join(threads + i)) + abort(); + + if (threads != default_threads) + uv__free(threads); + + uv_mutex_destroy(&mutex); + uv_cond_destroy(&cond); + + threads = NULL; + nthreads = 0; +#endif +} + + +static void init_threads(void) { + unsigned int i; + const char* val; + uv_sem_t sem; + + nthreads = ARRAY_SIZE(default_threads); + val = getenv("UV_THREADPOOL_SIZE"); + if (val != NULL) + nthreads = atoi(val); + if (nthreads == 0) + nthreads = 1; + if (nthreads > MAX_THREADPOOL_SIZE) + nthreads = MAX_THREADPOOL_SIZE; + + threads = default_threads; + if (nthreads > ARRAY_SIZE(default_threads)) { + threads = (uv_thread_t *)uv__malloc(nthreads * sizeof(threads[0])); + if (threads == NULL) { + nthreads = ARRAY_SIZE(default_threads); + threads = default_threads; + } + } + + if (uv_cond_init(&cond)) + abort(); + + if (uv_mutex_init(&mutex)) + abort(); + + QUEUE_INIT(&wq); + QUEUE_INIT(&slow_io_pending_wq); + QUEUE_INIT(&run_slow_work_message); + + if (uv_sem_init(&sem, 0)) + abort(); + + for (i = 0; i < nthreads; i++) + if (uv_thread_create(threads + i, worker, &sem)) + abort(); + + for (i = 0; i < nthreads; i++) + uv_sem_wait(&sem); + + uv_sem_destroy(&sem); +} + + +#ifndef _WIN32 +static void reset_once(void) { + uv_once_t child_once = UV_ONCE_INIT; + memcpy(&once, &child_once, sizeof(child_once)); +} +#endif + + +static void init_once(void) { +#ifndef _WIN32 + /* Re-initialize the threadpool after fork. + * Note that this discards the global mutex and condition as well + * as the work queue. + */ + if (pthread_atfork(NULL, NULL, &reset_once)) + abort(); +#endif + init_threads(); +} + + +void uv__work_submit(uv_loop_t* loop, + struct uv__work* w, + enum uv__work_kind kind, + void (*work)(struct uv__work* w), + void (*done)(struct uv__work* w, int status)) { + uv_once(&once, init_once); + w->loop = loop; + w->work = work; + w->done = done; + post(&w->wq, kind); +} + + +static int uv__work_cancel(uv_loop_t* loop, uv_req_t* req, struct uv__work* w) { + int cancelled; + + uv_mutex_lock(&mutex); + uv_mutex_lock(&w->loop->wq_mutex); + + cancelled = !QUEUE_EMPTY(&w->wq) && w->work != NULL; + if (cancelled) + QUEUE_REMOVE(&w->wq); + + uv_mutex_unlock(&w->loop->wq_mutex); + uv_mutex_unlock(&mutex); + + if (!cancelled) + return UV_EBUSY; + + w->work = uv__cancelled; + uv_mutex_lock(&loop->wq_mutex); + QUEUE_INSERT_TAIL(&loop->wq, &w->wq); + uv_async_send(&loop->wq_async); + uv_mutex_unlock(&loop->wq_mutex); + + return 0; +} + + +void uv__work_done(uv_async_t* handle) { + struct uv__work* w; + uv_loop_t* loop; + QUEUE* q; + QUEUE wq; + int err; + + loop = container_of(handle, uv_loop_t, wq_async); + uv_mutex_lock(&loop->wq_mutex); + QUEUE_MOVE(&loop->wq, &wq); + uv_mutex_unlock(&loop->wq_mutex); + + while (!QUEUE_EMPTY(&wq)) { + q = QUEUE_HEAD(&wq); + QUEUE_REMOVE(q); + + w = container_of(q, struct uv__work, wq); + err = (w->work == uv__cancelled) ? UV_ECANCELED : 0; + w->done(w, err); + } +} + + +static void uv__queue_work(struct uv__work* w) { + uv_work_t* req = container_of(w, uv_work_t, work_req); + + req->work_cb(req); +} + + +static void uv__queue_done(struct uv__work* w, int err) { + uv_work_t* req; + + req = container_of(w, uv_work_t, work_req); + uv__req_unregister(req->loop, req); + + if (req->after_work_cb == NULL) + return; + + req->after_work_cb(req, err); +} + + +int uv_queue_work(uv_loop_t* loop, + uv_work_t* req, + uv_work_cb work_cb, + uv_after_work_cb after_work_cb) { + if (work_cb == NULL) + return UV_EINVAL; + + uv__req_init(loop, req, UV_WORK); + req->loop = loop; + req->work_cb = work_cb; + req->after_work_cb = after_work_cb; + uv__work_submit(loop, + &req->work_req, + UV__WORK_CPU, + uv__queue_work, + uv__queue_done); + return 0; +} + + +int uv_cancel(uv_req_t* req) { + struct uv__work* wreq; + uv_loop_t* loop; + + switch (req->type) { + case UV_FS: + loop = ((uv_fs_t*) req)->loop; + wreq = &((uv_fs_t*) req)->work_req; + break; + case UV_GETADDRINFO: + loop = ((uv_getaddrinfo_t*) req)->loop; + wreq = &((uv_getaddrinfo_t*) req)->work_req; + break; + case UV_GETNAMEINFO: + loop = ((uv_getnameinfo_t*) req)->loop; + wreq = &((uv_getnameinfo_t*) req)->work_req; + break; + case UV_RANDOM: + loop = ((uv_random_t*) req)->loop; + wreq = &((uv_random_t*) req)->work_req; + break; + case UV_WORK: + loop = ((uv_work_t*) req)->loop; + wreq = &((uv_work_t*) req)->work_req; + break; + default: + return UV_EINVAL; + } + + return uv__work_cancel(loop, req, wreq); +} diff --git a/external/libuv/src/timer.c b/external/libuv/src/timer.c new file mode 100644 index 000000000..4cf4ed426 --- /dev/null +++ b/external/libuv/src/timer.c @@ -0,0 +1,176 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#include "uv.h" +#include "uv-common.h" +#include "heap-inl.h" + +#include +#include + + +static struct heap *timer_heap(const uv_loop_t* loop) { +#ifdef _WIN32 + return (struct heap*) loop->timer_heap; +#else + return (struct heap*) &loop->timer_heap; +#endif +} + + +static int timer_less_than(const struct heap_node* ha, + const struct heap_node* hb) { + const uv_timer_t* a; + const uv_timer_t* b; + + a = container_of(ha, uv_timer_t, heap_node); + b = container_of(hb, uv_timer_t, heap_node); + + if (a->timeout < b->timeout) + return 1; + if (b->timeout < a->timeout) + return 0; + + /* Compare start_id when both have the same timeout. start_id is + * allocated with loop->timer_counter in uv_timer_start(). + */ + return a->start_id < b->start_id; +} + + +int uv_timer_init(uv_loop_t* loop, uv_timer_t* handle) { + uv__handle_init(loop, (uv_handle_t*)handle, UV_TIMER); + handle->timer_cb = NULL; + handle->repeat = 0; + return 0; +} + + +int uv_timer_start(uv_timer_t* handle, + uv_timer_cb cb, + uint64_t timeout, + uint64_t repeat) { + uint64_t clamped_timeout; + + if (uv__is_closing(handle) || cb == NULL) + return UV_EINVAL; + + if (uv__is_active(handle)) + uv_timer_stop(handle); + + clamped_timeout = handle->loop->time + timeout; + if (clamped_timeout < timeout) + clamped_timeout = (uint64_t) -1; + + handle->timer_cb = cb; + handle->timeout = clamped_timeout; + handle->repeat = repeat; + /* start_id is the second index to be compared in timer_less_than() */ + handle->start_id = handle->loop->timer_counter++; + + heap_insert(timer_heap(handle->loop), + (struct heap_node*) &handle->heap_node, + timer_less_than); + uv__handle_start(handle); + + return 0; +} + + +int uv_timer_stop(uv_timer_t* handle) { + if (!uv__is_active(handle)) + return 0; + + heap_remove(timer_heap(handle->loop), + (struct heap_node*) &handle->heap_node, + timer_less_than); + uv__handle_stop(handle); + + return 0; +} + + +int uv_timer_again(uv_timer_t* handle) { + if (handle->timer_cb == NULL) + return UV_EINVAL; + + if (handle->repeat) { + uv_timer_stop(handle); + uv_timer_start(handle, handle->timer_cb, handle->repeat, handle->repeat); + } + + return 0; +} + + +void uv_timer_set_repeat(uv_timer_t* handle, uint64_t repeat) { + handle->repeat = repeat; +} + + +uint64_t uv_timer_get_repeat(const uv_timer_t* handle) { + return handle->repeat; +} + + +int uv__next_timeout(const uv_loop_t* loop) { + const struct heap_node* heap_node; + const uv_timer_t* handle; + uint64_t diff; + + heap_node = heap_min(timer_heap(loop)); + if (heap_node == NULL) + return -1; /* block indefinitely */ + + handle = container_of(heap_node, uv_timer_t, heap_node); + if (handle->timeout <= loop->time) + return 0; + + diff = handle->timeout - loop->time; + if (diff > INT_MAX) + diff = INT_MAX; + + return (int) diff; +} + + +void uv__run_timers(uv_loop_t* loop) { + struct heap_node* heap_node; + uv_timer_t* handle; + + for (;;) { + heap_node = heap_min(timer_heap(loop)); + if (heap_node == NULL) + break; + + handle = container_of(heap_node, uv_timer_t, heap_node); + if (handle->timeout > loop->time) + break; + + uv_timer_stop(handle); + uv_timer_again(handle); + handle->timer_cb(handle); + } +} + + +void uv__timer_close(uv_timer_t* handle) { + uv_timer_stop(handle); +} diff --git a/external/libuv/src/unix/aix-common.c b/external/libuv/src/unix/aix-common.c new file mode 100644 index 000000000..c18a5298c --- /dev/null +++ b/external/libuv/src/unix/aix-common.c @@ -0,0 +1,157 @@ +/* Copyright libuv 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 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. + */ + +#include "uv.h" +#include "internal.h" + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include + +#include +#include + +#include +#include +#include +#include +#include + +uint64_t uv__hrtime(uv_clocktype_t type) { + uint64_t G = 1000000000; + timebasestruct_t t; + read_wall_time(&t, TIMEBASE_SZ); + time_base_to_time(&t, TIMEBASE_SZ); + return (uint64_t) t.tb_high * G + t.tb_low; +} + + +/* + * We could use a static buffer for the path manipulations that we need outside + * of the function, but this function could be called by multiple consumers and + * we don't want to potentially create a race condition in the use of snprintf. + * There is no direct way of getting the exe path in AIX - either through /procfs + * or through some libc APIs. The below approach is to parse the argv[0]'s pattern + * and use it in conjunction with PATH environment variable to craft one. + */ +int uv_exepath(char* buffer, size_t* size) { + int res; + char args[PATH_MAX]; + char abspath[PATH_MAX]; + size_t abspath_size; + struct procsinfo pi; + + if (buffer == NULL || size == NULL || *size == 0) + return UV_EINVAL; + + pi.pi_pid = getpid(); + res = getargs(&pi, sizeof(pi), args, sizeof(args)); + if (res < 0) + return UV_EINVAL; + + /* + * Possibilities for args: + * i) an absolute path such as: /home/user/myprojects/nodejs/node + * ii) a relative path such as: ./node or ../myprojects/nodejs/node + * iii) a bare filename such as "node", after exporting PATH variable + * to its location. + */ + + /* Case i) and ii) absolute or relative paths */ + if (strchr(args, '/') != NULL) { + if (realpath(args, abspath) != abspath) + return UV__ERR(errno); + + abspath_size = strlen(abspath); + + *size -= 1; + if (*size > abspath_size) + *size = abspath_size; + + memcpy(buffer, abspath, *size); + buffer[*size] = '\0'; + + return 0; + } else { + /* Case iii). Search PATH environment variable */ + char trypath[PATH_MAX]; + char *clonedpath = NULL; + char *token = NULL; + char *path = getenv("PATH"); + + if (path == NULL) + return UV_EINVAL; + + clonedpath = uv__strdup(path); + if (clonedpath == NULL) + return UV_ENOMEM; + + token = strtok(clonedpath, ":"); + while (token != NULL) { + snprintf(trypath, sizeof(trypath) - 1, "%s/%s", token, args); + if (realpath(trypath, abspath) == abspath) { + /* Check the match is executable */ + if (access(abspath, X_OK) == 0) { + abspath_size = strlen(abspath); + + *size -= 1; + if (*size > abspath_size) + *size = abspath_size; + + memcpy(buffer, abspath, *size); + buffer[*size] = '\0'; + + uv__free(clonedpath); + return 0; + } + } + token = strtok(NULL, ":"); + } + uv__free(clonedpath); + + /* Out of tokens (path entries), and no match found */ + return UV_EINVAL; + } +} diff --git a/external/libuv/src/unix/aix.c b/external/libuv/src/unix/aix.c new file mode 100644 index 000000000..6b4594b43 --- /dev/null +++ b/external/libuv/src/unix/aix.c @@ -0,0 +1,1246 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#include "uv.h" +#include "internal.h" + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include + +#include +#include +#ifdef HAVE_SYS_AHAFS_EVPRODS_H +#include +#endif + +#include +#include +#include +#include +#include + +#define RDWR_BUF_SIZE 4096 +#define EQ(a,b) (strcmp(a,b) == 0) + +static uv_mutex_t process_title_mutex; +static uv_once_t process_title_mutex_once = UV_ONCE_INIT; +static void* args_mem = NULL; +static char** process_argv = NULL; +static int process_argc = 0; +static char* process_title_ptr = NULL; + +static void init_process_title_mutex_once(void) { + uv_mutex_init(&process_title_mutex); +} + + +int uv__platform_loop_init(uv_loop_t* loop) { + loop->fs_fd = -1; + + /* Passing maxfd of -1 should mean the limit is determined + * by the user's ulimit or the global limit as per the doc */ + loop->backend_fd = pollset_create(-1); + + if (loop->backend_fd == -1) + return -1; + + return 0; +} + + +void uv__platform_loop_delete(uv_loop_t* loop) { + if (loop->fs_fd != -1) { + uv__close(loop->fs_fd); + loop->fs_fd = -1; + } + + if (loop->backend_fd != -1) { + pollset_destroy(loop->backend_fd); + loop->backend_fd = -1; + } +} + + +int uv__io_fork(uv_loop_t* loop) { + uv__platform_loop_delete(loop); + + return uv__platform_loop_init(loop); +} + + +int uv__io_check_fd(uv_loop_t* loop, int fd) { + struct poll_ctl pc; + + pc.events = POLLIN; + pc.cmd = PS_MOD; /* Equivalent to PS_ADD if the fd is not in the pollset. */ + pc.fd = fd; + + if (pollset_ctl(loop->backend_fd, &pc, 1)) + return UV__ERR(errno); + + pc.cmd = PS_DELETE; + if (pollset_ctl(loop->backend_fd, &pc, 1)) + abort(); + + return 0; +} + + +void uv__io_poll(uv_loop_t* loop, int timeout) { + struct pollfd events[1024]; + struct pollfd pqry; + struct pollfd* pe; + struct poll_ctl pc; + QUEUE* q; + uv__io_t* w; + uint64_t base; + uint64_t diff; + int have_signals; + int nevents; + int count; + int nfds; + int i; + int rc; + int add_failed; + + if (loop->nfds == 0) { + assert(QUEUE_EMPTY(&loop->watcher_queue)); + return; + } + + while (!QUEUE_EMPTY(&loop->watcher_queue)) { + q = QUEUE_HEAD(&loop->watcher_queue); + QUEUE_REMOVE(q); + QUEUE_INIT(q); + + w = QUEUE_DATA(q, uv__io_t, watcher_queue); + assert(w->pevents != 0); + assert(w->fd >= 0); + assert(w->fd < (int) loop->nwatchers); + + pc.events = w->pevents; + pc.fd = w->fd; + + add_failed = 0; + if (w->events == 0) { + pc.cmd = PS_ADD; + if (pollset_ctl(loop->backend_fd, &pc, 1)) { + if (errno != EINVAL) { + assert(0 && "Failed to add file descriptor (pc.fd) to pollset"); + abort(); + } + /* Check if the fd is already in the pollset */ + pqry.fd = pc.fd; + rc = pollset_query(loop->backend_fd, &pqry); + switch (rc) { + case -1: + assert(0 && "Failed to query pollset for file descriptor"); + abort(); + case 0: + assert(0 && "Pollset does not contain file descriptor"); + abort(); + } + /* If we got here then the pollset already contained the file descriptor even though + * we didn't think it should. This probably shouldn't happen, but we can continue. */ + add_failed = 1; + } + } + if (w->events != 0 || add_failed) { + /* Modify, potentially removing events -- need to delete then add. + * Could maybe mod if we knew for sure no events are removed, but + * content of w->events is handled above as not reliable (falls back) + * so may require a pollset_query() which would have to be pretty cheap + * compared to a PS_DELETE to be worth optimizing. Alternatively, could + * lazily remove events, squelching them in the mean time. */ + pc.cmd = PS_DELETE; + if (pollset_ctl(loop->backend_fd, &pc, 1)) { + assert(0 && "Failed to delete file descriptor (pc.fd) from pollset"); + abort(); + } + pc.cmd = PS_ADD; + if (pollset_ctl(loop->backend_fd, &pc, 1)) { + assert(0 && "Failed to add file descriptor (pc.fd) to pollset"); + abort(); + } + } + + w->events = w->pevents; + } + + assert(timeout >= -1); + base = loop->time; + count = 48; /* Benchmarks suggest this gives the best throughput. */ + + for (;;) { + nfds = pollset_poll(loop->backend_fd, + events, + ARRAY_SIZE(events), + timeout); + + /* Update loop->time unconditionally. It's tempting to skip the update when + * timeout == 0 (i.e. non-blocking poll) but there is no guarantee that the + * operating system didn't reschedule our process while in the syscall. + */ + SAVE_ERRNO(uv__update_time(loop)); + + if (nfds == 0) { + assert(timeout != -1); + return; + } + + if (nfds == -1) { + if (errno != EINTR) { + abort(); + } + + if (timeout == -1) + continue; + + if (timeout == 0) + return; + + /* Interrupted by a signal. Update timeout and poll again. */ + goto update_timeout; + } + + have_signals = 0; + nevents = 0; + + assert(loop->watchers != NULL); + loop->watchers[loop->nwatchers] = (void*) events; + loop->watchers[loop->nwatchers + 1] = (void*) (uintptr_t) nfds; + + for (i = 0; i < nfds; i++) { + pe = events + i; + pc.cmd = PS_DELETE; + pc.fd = pe->fd; + + /* Skip invalidated events, see uv__platform_invalidate_fd */ + if (pc.fd == -1) + continue; + + assert(pc.fd >= 0); + assert((unsigned) pc.fd < loop->nwatchers); + + w = loop->watchers[pc.fd]; + + if (w == NULL) { + /* File descriptor that we've stopped watching, disarm it. + * + * Ignore all errors because we may be racing with another thread + * when the file descriptor is closed. + */ + pollset_ctl(loop->backend_fd, &pc, 1); + continue; + } + + /* Run signal watchers last. This also affects child process watchers + * because those are implemented in terms of signal watchers. + */ + if (w == &loop->signal_io_watcher) + have_signals = 1; + else + w->cb(loop, w, pe->revents); + + nevents++; + } + + if (have_signals != 0) + loop->signal_io_watcher.cb(loop, &loop->signal_io_watcher, POLLIN); + + loop->watchers[loop->nwatchers] = NULL; + loop->watchers[loop->nwatchers + 1] = NULL; + + if (have_signals != 0) + return; /* Event loop should cycle now so don't poll again. */ + + if (nevents != 0) { + if (nfds == ARRAY_SIZE(events) && --count != 0) { + /* Poll for more events but don't block this time. */ + timeout = 0; + continue; + } + return; + } + + if (timeout == 0) + return; + + if (timeout == -1) + continue; + +update_timeout: + assert(timeout > 0); + + diff = loop->time - base; + if (diff >= (uint64_t) timeout) + return; + + timeout -= diff; + } +} + + +uint64_t uv_get_free_memory(void) { + perfstat_memory_total_t mem_total; + int result = perfstat_memory_total(NULL, &mem_total, sizeof(mem_total), 1); + if (result == -1) { + return 0; + } + return mem_total.real_free * 4096; +} + + +uint64_t uv_get_total_memory(void) { + perfstat_memory_total_t mem_total; + int result = perfstat_memory_total(NULL, &mem_total, sizeof(mem_total), 1); + if (result == -1) { + return 0; + } + return mem_total.real_total * 4096; +} + + +uint64_t uv_get_constrained_memory(void) { + return 0; /* Memory constraints are unknown. */ +} + + +void uv_loadavg(double avg[3]) { + perfstat_cpu_total_t ps_total; + int result = perfstat_cpu_total(NULL, &ps_total, sizeof(ps_total), 1); + if (result == -1) { + avg[0] = 0.; avg[1] = 0.; avg[2] = 0.; + return; + } + avg[0] = ps_total.loadavg[0] / (double)(1 << SBITS); + avg[1] = ps_total.loadavg[1] / (double)(1 << SBITS); + avg[2] = ps_total.loadavg[2] / (double)(1 << SBITS); +} + + +#ifdef HAVE_SYS_AHAFS_EVPRODS_H +static char* uv__rawname(const char* cp, char (*dst)[FILENAME_MAX+1]) { + char* dp; + + dp = rindex(cp, '/'); + if (dp == 0) + return 0; + + snprintf(*dst, sizeof(*dst), "%.*s/r%s", (int) (dp - cp), cp, dp + 1); + return *dst; +} + + +/* + * Determine whether given pathname is a directory + * Returns 0 if the path is a directory, -1 if not + * + * Note: Opportunity here for more detailed error information but + * that requires changing callers of this function as well + */ +static int uv__path_is_a_directory(char* filename) { + struct stat statbuf; + + if (stat(filename, &statbuf) < 0) + return -1; /* failed: not a directory, assume it is a file */ + + if (statbuf.st_type == VDIR) + return 0; + + return -1; +} + + +/* + * Check whether AHAFS is mounted. + * Returns 0 if AHAFS is mounted, or an error code < 0 on failure + */ +static int uv__is_ahafs_mounted(void){ + char rawbuf[FILENAME_MAX+1]; + int rv, i = 2; + struct vmount *p; + int size_multiplier = 10; + size_t siz = sizeof(struct vmount)*size_multiplier; + struct vmount *vmt; + const char *dev = "/aha"; + char *obj, *stub; + + p = uv__malloc(siz); + if (p == NULL) + return UV__ERR(errno); + + /* Retrieve all mounted filesystems */ + rv = mntctl(MCTL_QUERY, siz, (char*)p); + if (rv < 0) + return UV__ERR(errno); + if (rv == 0) { + /* buffer was not large enough, reallocate to correct size */ + siz = *(int*)p; + uv__free(p); + p = uv__malloc(siz); + if (p == NULL) + return UV__ERR(errno); + rv = mntctl(MCTL_QUERY, siz, (char*)p); + if (rv < 0) + return UV__ERR(errno); + } + + /* Look for dev in filesystems mount info */ + for(vmt = p, i = 0; i < rv; i++) { + obj = vmt2dataptr(vmt, VMT_OBJECT); /* device */ + stub = vmt2dataptr(vmt, VMT_STUB); /* mount point */ + + if (EQ(obj, dev) || EQ(uv__rawname(obj, &rawbuf), dev) || EQ(stub, dev)) { + uv__free(p); /* Found a match */ + return 0; + } + vmt = (struct vmount *) ((char *) vmt + vmt->vmt_length); + } + + /* /aha is required for monitoring filesystem changes */ + return -1; +} + +/* + * Recursive call to mkdir() to create intermediate folders, if any + * Returns code from mkdir call + */ +static int uv__makedir_p(const char *dir) { + char tmp[256]; + char *p = NULL; + size_t len; + int err; + + /* TODO(bnoordhuis) Check uv__strscpy() return value. */ + uv__strscpy(tmp, dir, sizeof(tmp)); + len = strlen(tmp); + if (tmp[len - 1] == '/') + tmp[len - 1] = 0; + for (p = tmp + 1; *p; p++) { + if (*p == '/') { + *p = 0; + err = mkdir(tmp, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); + if (err != 0 && errno != EEXIST) + return err; + *p = '/'; + } + } + return mkdir(tmp, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); +} + +/* + * Creates necessary subdirectories in the AIX Event Infrastructure + * file system for monitoring the object specified. + * Returns code from mkdir call + */ +static int uv__make_subdirs_p(const char *filename) { + char cmd[2048]; + char *p; + int rc = 0; + + /* Strip off the monitor file name */ + p = strrchr(filename, '/'); + + if (p == NULL) + return 0; + + if (uv__path_is_a_directory((char*)filename) == 0) { + sprintf(cmd, "/aha/fs/modDir.monFactory"); + } else { + sprintf(cmd, "/aha/fs/modFile.monFactory"); + } + + strncat(cmd, filename, (p - filename)); + rc = uv__makedir_p(cmd); + + if (rc == -1 && errno != EEXIST){ + return UV__ERR(errno); + } + + return rc; +} + + +/* + * Checks if /aha is mounted, then proceeds to set up the monitoring + * objects for the specified file. + * Returns 0 on success, or an error code < 0 on failure + */ +static int uv__setup_ahafs(const char* filename, int *fd) { + int rc = 0; + char mon_file_write_string[RDWR_BUF_SIZE]; + char mon_file[PATH_MAX]; + int file_is_directory = 0; /* -1 == NO, 0 == YES */ + + /* Create monitor file name for object */ + file_is_directory = uv__path_is_a_directory((char*)filename); + + if (file_is_directory == 0) + sprintf(mon_file, "/aha/fs/modDir.monFactory"); + else + sprintf(mon_file, "/aha/fs/modFile.monFactory"); + + if ((strlen(mon_file) + strlen(filename) + 5) > PATH_MAX) + return UV_ENAMETOOLONG; + + /* Make the necessary subdirectories for the monitor file */ + rc = uv__make_subdirs_p(filename); + if (rc == -1 && errno != EEXIST) + return rc; + + strcat(mon_file, filename); + strcat(mon_file, ".mon"); + + *fd = 0; errno = 0; + + /* Open the monitor file, creating it if necessary */ + *fd = open(mon_file, O_CREAT|O_RDWR); + if (*fd < 0) + return UV__ERR(errno); + + /* Write out the monitoring specifications. + * In this case, we are monitoring for a state change event type + * CHANGED=YES + * We will be waiting in select call, rather than a read: + * WAIT_TYPE=WAIT_IN_SELECT + * We only want minimal information for files: + * INFO_LVL=1 + * For directories, we want more information to track what file + * caused the change + * INFO_LVL=2 + */ + + if (file_is_directory == 0) + sprintf(mon_file_write_string, "CHANGED=YES;WAIT_TYPE=WAIT_IN_SELECT;INFO_LVL=2"); + else + sprintf(mon_file_write_string, "CHANGED=YES;WAIT_TYPE=WAIT_IN_SELECT;INFO_LVL=1"); + + rc = write(*fd, mon_file_write_string, strlen(mon_file_write_string)+1); + if (rc < 0 && errno != EBUSY) + return UV__ERR(errno); + + return 0; +} + +/* + * Skips a specified number of lines in the buffer passed in. + * Walks the buffer pointed to by p and attempts to skip n lines. + * Returns the total number of lines skipped + */ +static int uv__skip_lines(char **p, int n) { + int lines = 0; + + while(n > 0) { + *p = strchr(*p, '\n'); + if (!p) + return lines; + + (*p)++; + n--; + lines++; + } + return lines; +} + + +/* + * Parse the event occurrence data to figure out what event just occurred + * and take proper action. + * + * The buf is a pointer to the buffer containing the event occurrence data + * Returns 0 on success, -1 if unrecoverable error in parsing + * + */ +static int uv__parse_data(char *buf, int *events, uv_fs_event_t* handle) { + int evp_rc, i; + char *p; + char filename[PATH_MAX]; /* To be used when handling directories */ + + p = buf; + *events = 0; + + /* Clean the filename buffer*/ + for(i = 0; i < PATH_MAX; i++) { + filename[i] = 0; + } + i = 0; + + /* Check for BUF_WRAP */ + if (strncmp(buf, "BUF_WRAP", strlen("BUF_WRAP")) == 0) { + assert(0 && "Buffer wrap detected, Some event occurrences lost!"); + return 0; + } + + /* Since we are using the default buffer size (4K), and have specified + * INFO_LVL=1, we won't see any EVENT_OVERFLOW conditions. Applications + * should check for this keyword if they are using an INFO_LVL of 2 or + * higher, and have a buffer size of <= 4K + */ + + /* Skip to RC_FROM_EVPROD */ + if (uv__skip_lines(&p, 9) != 9) + return -1; + + if (sscanf(p, "RC_FROM_EVPROD=%d\nEND_EVENT_DATA", &evp_rc) == 1) { + if (uv__path_is_a_directory(handle->path) == 0) { /* Directory */ + if (evp_rc == AHAFS_MODDIR_UNMOUNT || evp_rc == AHAFS_MODDIR_REMOVE_SELF) { + /* The directory is no longer available for monitoring */ + *events = UV_RENAME; + handle->dir_filename = NULL; + } else { + /* A file was added/removed inside the directory */ + *events = UV_CHANGE; + + /* Get the EVPROD_INFO */ + if (uv__skip_lines(&p, 1) != 1) + return -1; + + /* Scan out the name of the file that triggered the event*/ + if (sscanf(p, "BEGIN_EVPROD_INFO\n%sEND_EVPROD_INFO", filename) == 1) { + handle->dir_filename = uv__strdup((const char*)&filename); + } else + return -1; + } + } else { /* Regular File */ + if (evp_rc == AHAFS_MODFILE_RENAME) + *events = UV_RENAME; + else + *events = UV_CHANGE; + } + } + else + return -1; + + return 0; +} + + +/* This is the internal callback */ +static void uv__ahafs_event(uv_loop_t* loop, uv__io_t* event_watch, unsigned int fflags) { + char result_data[RDWR_BUF_SIZE]; + int bytes, rc = 0; + uv_fs_event_t* handle; + int events = 0; + char fname[PATH_MAX]; + char *p; + + handle = container_of(event_watch, uv_fs_event_t, event_watcher); + + /* At this point, we assume that polling has been done on the + * file descriptor, so we can just read the AHAFS event occurrence + * data and parse its results without having to block anything + */ + bytes = pread(event_watch->fd, result_data, RDWR_BUF_SIZE, 0); + + assert((bytes >= 0) && "uv__ahafs_event - Error reading monitor file"); + + /* In file / directory move cases, AIX Event infrastructure + * produces a second event with no data. + * Ignore it and return gracefully. + */ + if(bytes == 0) + return; + + /* Parse the data */ + if(bytes > 0) + rc = uv__parse_data(result_data, &events, handle); + + /* Unrecoverable error */ + if (rc == -1) + return; + + /* For directory changes, the name of the files that triggered the change + * are never absolute pathnames + */ + if (uv__path_is_a_directory(handle->path) == 0) { + p = handle->dir_filename; + } else { + p = strrchr(handle->path, '/'); + if (p == NULL) + p = handle->path; + else + p++; + } + + /* TODO(bnoordhuis) Check uv__strscpy() return value. */ + uv__strscpy(fname, p, sizeof(fname)); + + handle->cb(handle, fname, events, 0); +} +#endif + + +int uv_fs_event_init(uv_loop_t* loop, uv_fs_event_t* handle) { +#ifdef HAVE_SYS_AHAFS_EVPRODS_H + uv__handle_init(loop, (uv_handle_t*)handle, UV_FS_EVENT); + return 0; +#else + return UV_ENOSYS; +#endif +} + + +int uv_fs_event_start(uv_fs_event_t* handle, + uv_fs_event_cb cb, + const char* filename, + unsigned int flags) { +#ifdef HAVE_SYS_AHAFS_EVPRODS_H + int fd, rc, str_offset = 0; + char cwd[PATH_MAX]; + char absolute_path[PATH_MAX]; + char readlink_cwd[PATH_MAX]; + struct timeval zt; + fd_set pollfd; + + + /* Figure out whether filename is absolute or not */ + if (filename[0] == '\0') { + /* Missing a pathname */ + return UV_ENOENT; + } + else if (filename[0] == '/') { + /* We have absolute pathname */ + /* TODO(bnoordhuis) Check uv__strscpy() return value. */ + uv__strscpy(absolute_path, filename, sizeof(absolute_path)); + } else { + /* We have a relative pathname, compose the absolute pathname */ + snprintf(cwd, sizeof(cwd), "/proc/%lu/cwd", (unsigned long) getpid()); + rc = readlink(cwd, readlink_cwd, sizeof(readlink_cwd) - 1); + if (rc < 0) + return rc; + /* readlink does not null terminate our string */ + readlink_cwd[rc] = '\0'; + + if (filename[0] == '.' && filename[1] == '/') + str_offset = 2; + + snprintf(absolute_path, sizeof(absolute_path), "%s%s", readlink_cwd, + filename + str_offset); + } + + if (uv__is_ahafs_mounted() < 0) /* /aha checks failed */ + return UV_ENOSYS; + + /* Setup ahafs */ + rc = uv__setup_ahafs((const char *)absolute_path, &fd); + if (rc != 0) + return rc; + + /* Setup/Initialize all the libuv routines */ + uv__handle_start(handle); + uv__io_init(&handle->event_watcher, uv__ahafs_event, fd); + handle->path = uv__strdup(filename); + handle->cb = cb; + handle->dir_filename = NULL; + + uv__io_start(handle->loop, &handle->event_watcher, POLLIN); + + /* AHAFS wants someone to poll for it to start mointoring. + * so kick-start it so that we don't miss an event in the + * eventuality of an event that occurs in the current loop. */ + do { + memset(&zt, 0, sizeof(zt)); + FD_ZERO(&pollfd); + FD_SET(fd, &pollfd); + rc = select(fd + 1, &pollfd, NULL, NULL, &zt); + } while (rc == -1 && errno == EINTR); + return 0; +#else + return UV_ENOSYS; +#endif +} + + +int uv_fs_event_stop(uv_fs_event_t* handle) { +#ifdef HAVE_SYS_AHAFS_EVPRODS_H + if (!uv__is_active(handle)) + return 0; + + uv__io_close(handle->loop, &handle->event_watcher); + uv__handle_stop(handle); + + if (uv__path_is_a_directory(handle->path) == 0) { + uv__free(handle->dir_filename); + handle->dir_filename = NULL; + } + + uv__free(handle->path); + handle->path = NULL; + uv__close(handle->event_watcher.fd); + handle->event_watcher.fd = -1; + + return 0; +#else + return UV_ENOSYS; +#endif +} + + +void uv__fs_event_close(uv_fs_event_t* handle) { +#ifdef HAVE_SYS_AHAFS_EVPRODS_H + uv_fs_event_stop(handle); +#else + UNREACHABLE(); +#endif +} + + +char** uv_setup_args(int argc, char** argv) { + char** new_argv; + size_t size; + char* s; + int i; + + if (argc <= 0) + return argv; + + /* Save the original pointer to argv. + * AIX uses argv to read the process name. + * (Not the memory pointed to by argv[0..n] as on Linux.) + */ + process_argv = argv; + process_argc = argc; + + /* Calculate how much memory we need for the argv strings. */ + size = 0; + for (i = 0; i < argc; i++) + size += strlen(argv[i]) + 1; + + /* Add space for the argv pointers. */ + size += (argc + 1) * sizeof(char*); + + new_argv = uv__malloc(size); + if (new_argv == NULL) + return argv; + args_mem = new_argv; + + /* Copy over the strings and set up the pointer table. */ + s = (char*) &new_argv[argc + 1]; + for (i = 0; i < argc; i++) { + size = strlen(argv[i]) + 1; + memcpy(s, argv[i], size); + new_argv[i] = s; + s += size; + } + new_argv[i] = NULL; + + return new_argv; +} + + +int uv_set_process_title(const char* title) { + char* new_title; + + /* We cannot free this pointer when libuv shuts down, + * the process may still be using it. + */ + new_title = uv__strdup(title); + if (new_title == NULL) + return UV_ENOMEM; + + uv_once(&process_title_mutex_once, init_process_title_mutex_once); + uv_mutex_lock(&process_title_mutex); + + /* If this is the first time this is set, + * don't free and set argv[1] to NULL. + */ + if (process_title_ptr != NULL) + uv__free(process_title_ptr); + + process_title_ptr = new_title; + + process_argv[0] = process_title_ptr; + if (process_argc > 1) + process_argv[1] = NULL; + + uv_mutex_unlock(&process_title_mutex); + + return 0; +} + + +int uv_get_process_title(char* buffer, size_t size) { + size_t len; + if (buffer == NULL || size == 0) + return UV_EINVAL; + + uv_once(&process_title_mutex_once, init_process_title_mutex_once); + uv_mutex_lock(&process_title_mutex); + + len = strlen(process_argv[0]); + if (size <= len) { + uv_mutex_unlock(&process_title_mutex); + return UV_ENOBUFS; + } + + memcpy(buffer, process_argv[0], len); + buffer[len] = '\0'; + + uv_mutex_unlock(&process_title_mutex); + + return 0; +} + + +void uv__process_title_cleanup(void) { + uv__free(args_mem); /* Keep valgrind happy. */ + args_mem = NULL; +} + + +int uv_resident_set_memory(size_t* rss) { + char pp[64]; + psinfo_t psinfo; + int err; + int fd; + + snprintf(pp, sizeof(pp), "/proc/%lu/psinfo", (unsigned long) getpid()); + + fd = open(pp, O_RDONLY); + if (fd == -1) + return UV__ERR(errno); + + /* FIXME(bnoordhuis) Handle EINTR. */ + err = UV_EINVAL; + if (read(fd, &psinfo, sizeof(psinfo)) == sizeof(psinfo)) { + *rss = (size_t)psinfo.pr_rssize * 1024; + err = 0; + } + uv__close(fd); + + return err; +} + + +int uv_uptime(double* uptime) { + struct utmp *utmp_buf; + size_t entries = 0; + time_t boot_time; + + boot_time = 0; + utmpname(UTMP_FILE); + + setutent(); + + while ((utmp_buf = getutent()) != NULL) { + if (utmp_buf->ut_user[0] && utmp_buf->ut_type == USER_PROCESS) + ++entries; + if (utmp_buf->ut_type == BOOT_TIME) + boot_time = utmp_buf->ut_time; + } + + endutent(); + + if (boot_time == 0) + return UV_ENOSYS; + + *uptime = time(NULL) - boot_time; + return 0; +} + + +int uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) { + uv_cpu_info_t* cpu_info; + perfstat_cpu_total_t ps_total; + perfstat_cpu_t* ps_cpus; + perfstat_id_t cpu_id; + int result, ncpus, idx = 0; + + result = perfstat_cpu_total(NULL, &ps_total, sizeof(ps_total), 1); + if (result == -1) { + return UV_ENOSYS; + } + + ncpus = result = perfstat_cpu(NULL, NULL, sizeof(perfstat_cpu_t), 0); + if (result == -1) { + return UV_ENOSYS; + } + + ps_cpus = (perfstat_cpu_t*) uv__malloc(ncpus * sizeof(perfstat_cpu_t)); + if (!ps_cpus) { + return UV_ENOMEM; + } + + /* TODO(bnoordhuis) Check uv__strscpy() return value. */ + uv__strscpy(cpu_id.name, FIRST_CPU, sizeof(cpu_id.name)); + result = perfstat_cpu(&cpu_id, ps_cpus, sizeof(perfstat_cpu_t), ncpus); + if (result == -1) { + uv__free(ps_cpus); + return UV_ENOSYS; + } + + *cpu_infos = (uv_cpu_info_t*) uv__malloc(ncpus * sizeof(uv_cpu_info_t)); + if (!*cpu_infos) { + uv__free(ps_cpus); + return UV_ENOMEM; + } + + *count = ncpus; + + cpu_info = *cpu_infos; + while (idx < ncpus) { + cpu_info->speed = (int)(ps_total.processorHZ / 1000000); + cpu_info->model = uv__strdup(ps_total.description); + cpu_info->cpu_times.user = ps_cpus[idx].user; + cpu_info->cpu_times.sys = ps_cpus[idx].sys; + cpu_info->cpu_times.idle = ps_cpus[idx].idle; + cpu_info->cpu_times.irq = ps_cpus[idx].wait; + cpu_info->cpu_times.nice = 0; + cpu_info++; + idx++; + } + + uv__free(ps_cpus); + return 0; +} + + +int uv_interface_addresses(uv_interface_address_t** addresses, int* count) { + uv_interface_address_t* address; + int sockfd, sock6fd, inet6, i, r, size = 1; + struct ifconf ifc; + struct ifreq *ifr, *p, flg; + struct in6_ifreq if6; + struct sockaddr_dl* sa_addr; + + ifc.ifc_req = NULL; + sock6fd = -1; + r = 0; + *count = 0; + *addresses = NULL; + + if (0 > (sockfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP))) { + r = UV__ERR(errno); + goto cleanup; + } + + if (0 > (sock6fd = socket(AF_INET6, SOCK_DGRAM, IPPROTO_IP))) { + r = UV__ERR(errno); + goto cleanup; + } + + if (ioctl(sockfd, SIOCGSIZIFCONF, &size) == -1) { + r = UV__ERR(errno); + goto cleanup; + } + + ifc.ifc_req = (struct ifreq*)uv__malloc(size); + if (ifc.ifc_req == NULL) { + r = UV_ENOMEM; + goto cleanup; + } + ifc.ifc_len = size; + if (ioctl(sockfd, SIOCGIFCONF, &ifc) == -1) { + r = UV__ERR(errno); + goto cleanup; + } + +#define ADDR_SIZE(p) MAX((p).sa_len, sizeof(p)) + + /* Count all up and running ipv4/ipv6 addresses */ + ifr = ifc.ifc_req; + while ((char*)ifr < (char*)ifc.ifc_req + ifc.ifc_len) { + p = ifr; + ifr = (struct ifreq*) + ((char*)ifr + sizeof(ifr->ifr_name) + ADDR_SIZE(ifr->ifr_addr)); + + if (!(p->ifr_addr.sa_family == AF_INET6 || + p->ifr_addr.sa_family == AF_INET)) + continue; + + memcpy(flg.ifr_name, p->ifr_name, sizeof(flg.ifr_name)); + if (ioctl(sockfd, SIOCGIFFLAGS, &flg) == -1) { + r = UV__ERR(errno); + goto cleanup; + } + + if (!(flg.ifr_flags & IFF_UP && flg.ifr_flags & IFF_RUNNING)) + continue; + + (*count)++; + } + + if (*count == 0) + goto cleanup; + + /* Alloc the return interface structs */ + *addresses = uv__calloc(*count, sizeof(**addresses)); + if (!(*addresses)) { + r = UV_ENOMEM; + goto cleanup; + } + address = *addresses; + + ifr = ifc.ifc_req; + while ((char*)ifr < (char*)ifc.ifc_req + ifc.ifc_len) { + p = ifr; + ifr = (struct ifreq*) + ((char*)ifr + sizeof(ifr->ifr_name) + ADDR_SIZE(ifr->ifr_addr)); + + if (!(p->ifr_addr.sa_family == AF_INET6 || + p->ifr_addr.sa_family == AF_INET)) + continue; + + inet6 = (p->ifr_addr.sa_family == AF_INET6); + + memcpy(flg.ifr_name, p->ifr_name, sizeof(flg.ifr_name)); + if (ioctl(sockfd, SIOCGIFFLAGS, &flg) == -1) + goto syserror; + + if (!(flg.ifr_flags & IFF_UP && flg.ifr_flags & IFF_RUNNING)) + continue; + + /* All conditions above must match count loop */ + + address->name = uv__strdup(p->ifr_name); + + if (inet6) + address->address.address6 = *((struct sockaddr_in6*) &p->ifr_addr); + else + address->address.address4 = *((struct sockaddr_in*) &p->ifr_addr); + + if (inet6) { + memset(&if6, 0, sizeof(if6)); + r = uv__strscpy(if6.ifr_name, p->ifr_name, sizeof(if6.ifr_name)); + if (r == UV_E2BIG) + goto cleanup; + r = 0; + memcpy(&if6.ifr_Addr, &p->ifr_addr, sizeof(if6.ifr_Addr)); + if (ioctl(sock6fd, SIOCGIFNETMASK6, &if6) == -1) + goto syserror; + address->netmask.netmask6 = *((struct sockaddr_in6*) &if6.ifr_Addr); + /* Explicitly set family as the ioctl call appears to return it as 0. */ + address->netmask.netmask6.sin6_family = AF_INET6; + } else { + if (ioctl(sockfd, SIOCGIFNETMASK, p) == -1) + goto syserror; + address->netmask.netmask4 = *((struct sockaddr_in*) &p->ifr_addr); + /* Explicitly set family as the ioctl call appears to return it as 0. */ + address->netmask.netmask4.sin_family = AF_INET; + } + + address->is_internal = flg.ifr_flags & IFF_LOOPBACK ? 1 : 0; + + address++; + } + + /* Fill in physical addresses. */ + ifr = ifc.ifc_req; + while ((char*)ifr < (char*)ifc.ifc_req + ifc.ifc_len) { + p = ifr; + ifr = (struct ifreq*) + ((char*)ifr + sizeof(ifr->ifr_name) + ADDR_SIZE(ifr->ifr_addr)); + + if (p->ifr_addr.sa_family != AF_LINK) + continue; + + address = *addresses; + for (i = 0; i < *count; i++) { + if (strcmp(address->name, p->ifr_name) == 0) { + sa_addr = (struct sockaddr_dl*) &p->ifr_addr; + memcpy(address->phys_addr, LLADDR(sa_addr), sizeof(address->phys_addr)); + } + address++; + } + } + +#undef ADDR_SIZE + goto cleanup; + +syserror: + uv_free_interface_addresses(*addresses, *count); + *addresses = NULL; + *count = 0; + r = UV_ENOSYS; + +cleanup: + if (sockfd != -1) + uv__close(sockfd); + if (sock6fd != -1) + uv__close(sock6fd); + uv__free(ifc.ifc_req); + return r; +} + + +void uv_free_interface_addresses(uv_interface_address_t* addresses, + int count) { + int i; + + for (i = 0; i < count; ++i) { + uv__free(addresses[i].name); + } + + uv__free(addresses); +} + + +void uv__platform_invalidate_fd(uv_loop_t* loop, int fd) { + struct pollfd* events; + uintptr_t i; + uintptr_t nfds; + struct poll_ctl pc; + + assert(loop->watchers != NULL); + assert(fd >= 0); + + events = (struct pollfd*) loop->watchers[loop->nwatchers]; + nfds = (uintptr_t) loop->watchers[loop->nwatchers + 1]; + + if (events != NULL) + /* Invalidate events with same file descriptor */ + for (i = 0; i < nfds; i++) + if ((int) events[i].fd == fd) + events[i].fd = -1; + + /* Remove the file descriptor from the poll set */ + pc.events = 0; + pc.cmd = PS_DELETE; + pc.fd = fd; + if(loop->backend_fd >= 0) + pollset_ctl(loop->backend_fd, &pc, 1); +} diff --git a/external/libuv/src/unix/android-ifaddrs.c b/external/libuv/src/unix/android-ifaddrs.c new file mode 100644 index 000000000..4765cc06b --- /dev/null +++ b/external/libuv/src/unix/android-ifaddrs.c @@ -0,0 +1,713 @@ +/* +Copyright (c) 2013, Kenneth MacKay +Copyright (c) 2014, Emergya (Cloud4all, FP7/2007-2013 grant agreement #289016) +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#include "uv/android-ifaddrs.h" +#include "uv-common.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +typedef struct NetlinkList +{ + struct NetlinkList *m_next; + struct nlmsghdr *m_data; + unsigned int m_size; +} NetlinkList; + +static int netlink_socket(pid_t *p_pid) +{ + struct sockaddr_nl l_addr; + socklen_t l_len; + + int l_socket = socket(PF_NETLINK, SOCK_RAW, NETLINK_ROUTE); + if(l_socket < 0) + { + return -1; + } + + memset(&l_addr, 0, sizeof(l_addr)); + l_addr.nl_family = AF_NETLINK; + if(bind(l_socket, (struct sockaddr *)&l_addr, sizeof(l_addr)) < 0) + { + close(l_socket); + return -1; + } + + l_len = sizeof(l_addr); + if(getsockname(l_socket, (struct sockaddr *)&l_addr, &l_len) < 0) + { + close(l_socket); + return -1; + } + *p_pid = l_addr.nl_pid; + + return l_socket; +} + +static int netlink_send(int p_socket, int p_request) +{ + char l_buffer[NLMSG_ALIGN(sizeof(struct nlmsghdr)) + NLMSG_ALIGN(sizeof(struct rtgenmsg))]; + + struct nlmsghdr *l_hdr; + struct rtgenmsg *l_msg; + struct sockaddr_nl l_addr; + + memset(l_buffer, 0, sizeof(l_buffer)); + + l_hdr = (struct nlmsghdr *)l_buffer; + l_msg = (struct rtgenmsg *)NLMSG_DATA(l_hdr); + + l_hdr->nlmsg_len = NLMSG_LENGTH(sizeof(*l_msg)); + l_hdr->nlmsg_type = p_request; + l_hdr->nlmsg_flags = NLM_F_ROOT | NLM_F_MATCH | NLM_F_REQUEST; + l_hdr->nlmsg_pid = 0; + l_hdr->nlmsg_seq = p_socket; + l_msg->rtgen_family = AF_UNSPEC; + + memset(&l_addr, 0, sizeof(l_addr)); + l_addr.nl_family = AF_NETLINK; + return (sendto(p_socket, l_hdr, l_hdr->nlmsg_len, 0, (struct sockaddr *)&l_addr, sizeof(l_addr))); +} + +static int netlink_recv(int p_socket, void *p_buffer, size_t p_len) +{ + struct sockaddr_nl l_addr; + struct msghdr l_msg; + + struct iovec l_iov; + l_iov.iov_base = p_buffer; + l_iov.iov_len = p_len; + + for(;;) + { + int l_result; + l_msg.msg_name = (void *)&l_addr; + l_msg.msg_namelen = sizeof(l_addr); + l_msg.msg_iov = &l_iov; + l_msg.msg_iovlen = 1; + l_msg.msg_control = NULL; + l_msg.msg_controllen = 0; + l_msg.msg_flags = 0; + l_result = recvmsg(p_socket, &l_msg, 0); + + if(l_result < 0) + { + if(errno == EINTR) + { + continue; + } + return -2; + } + + /* Buffer was too small */ + if(l_msg.msg_flags & MSG_TRUNC) + { + return -1; + } + return l_result; + } +} + +static struct nlmsghdr *getNetlinkResponse(int p_socket, pid_t p_pid, int *p_size, int *p_done) +{ + size_t l_size = 4096; + void *l_buffer = NULL; + + for(;;) + { + int l_read; + + uv__free(l_buffer); + l_buffer = uv__malloc(l_size); + if (l_buffer == NULL) + { + return NULL; + } + + l_read = netlink_recv(p_socket, l_buffer, l_size); + *p_size = l_read; + if(l_read == -2) + { + uv__free(l_buffer); + return NULL; + } + if(l_read >= 0) + { + struct nlmsghdr *l_hdr; + for(l_hdr = (struct nlmsghdr *)l_buffer; NLMSG_OK(l_hdr, (unsigned int)l_read); l_hdr = (struct nlmsghdr *)NLMSG_NEXT(l_hdr, l_read)) + { + if((pid_t)l_hdr->nlmsg_pid != p_pid || (int)l_hdr->nlmsg_seq != p_socket) + { + continue; + } + + if(l_hdr->nlmsg_type == NLMSG_DONE) + { + *p_done = 1; + break; + } + + if(l_hdr->nlmsg_type == NLMSG_ERROR) + { + uv__free(l_buffer); + return NULL; + } + } + return l_buffer; + } + + l_size *= 2; + } +} + +static NetlinkList *newListItem(struct nlmsghdr *p_data, unsigned int p_size) +{ + NetlinkList *l_item = uv__malloc(sizeof(NetlinkList)); + if (l_item == NULL) + { + return NULL; + } + + l_item->m_next = NULL; + l_item->m_data = p_data; + l_item->m_size = p_size; + return l_item; +} + +static void freeResultList(NetlinkList *p_list) +{ + NetlinkList *l_cur; + while(p_list) + { + l_cur = p_list; + p_list = p_list->m_next; + uv__free(l_cur->m_data); + uv__free(l_cur); + } +} + +static NetlinkList *getResultList(int p_socket, int p_request, pid_t p_pid) +{ + int l_size; + int l_done; + NetlinkList *l_list; + NetlinkList *l_end; + + if(netlink_send(p_socket, p_request) < 0) + { + return NULL; + } + + l_list = NULL; + l_end = NULL; + + l_done = 0; + while(!l_done) + { + NetlinkList *l_item; + + struct nlmsghdr *l_hdr = getNetlinkResponse(p_socket, p_pid, &l_size, &l_done); + /* Error */ + if(!l_hdr) + { + freeResultList(l_list); + return NULL; + } + + l_item = newListItem(l_hdr, l_size); + if (!l_item) + { + freeResultList(l_list); + return NULL; + } + if(!l_list) + { + l_list = l_item; + } + else + { + l_end->m_next = l_item; + } + l_end = l_item; + } + return l_list; +} + +static size_t maxSize(size_t a, size_t b) +{ + return (a > b ? a : b); +} + +static size_t calcAddrLen(sa_family_t p_family, int p_dataSize) +{ + switch(p_family) + { + case AF_INET: + return sizeof(struct sockaddr_in); + case AF_INET6: + return sizeof(struct sockaddr_in6); + case AF_PACKET: + return maxSize(sizeof(struct sockaddr_ll), offsetof(struct sockaddr_ll, sll_addr) + p_dataSize); + default: + return maxSize(sizeof(struct sockaddr), offsetof(struct sockaddr, sa_data) + p_dataSize); + } +} + +static void makeSockaddr(sa_family_t p_family, struct sockaddr *p_dest, void *p_data, size_t p_size) +{ + switch(p_family) + { + case AF_INET: + memcpy(&((struct sockaddr_in*)p_dest)->sin_addr, p_data, p_size); + break; + case AF_INET6: + memcpy(&((struct sockaddr_in6*)p_dest)->sin6_addr, p_data, p_size); + break; + case AF_PACKET: + memcpy(((struct sockaddr_ll*)p_dest)->sll_addr, p_data, p_size); + ((struct sockaddr_ll*)p_dest)->sll_halen = p_size; + break; + default: + memcpy(p_dest->sa_data, p_data, p_size); + break; + } + p_dest->sa_family = p_family; +} + +static void addToEnd(struct ifaddrs **p_resultList, struct ifaddrs *p_entry) +{ + if(!*p_resultList) + { + *p_resultList = p_entry; + } + else + { + struct ifaddrs *l_cur = *p_resultList; + while(l_cur->ifa_next) + { + l_cur = l_cur->ifa_next; + } + l_cur->ifa_next = p_entry; + } +} + +static int interpretLink(struct nlmsghdr *p_hdr, struct ifaddrs **p_resultList) +{ + struct ifaddrs *l_entry; + + char *l_index; + char *l_name; + char *l_addr; + char *l_data; + + struct ifinfomsg *l_info = (struct ifinfomsg *)NLMSG_DATA(p_hdr); + + size_t l_nameSize = 0; + size_t l_addrSize = 0; + size_t l_dataSize = 0; + + size_t l_rtaSize = NLMSG_PAYLOAD(p_hdr, sizeof(struct ifinfomsg)); + struct rtattr *l_rta; + for(l_rta = IFLA_RTA(l_info); RTA_OK(l_rta, l_rtaSize); l_rta = RTA_NEXT(l_rta, l_rtaSize)) + { + size_t l_rtaDataSize = RTA_PAYLOAD(l_rta); + switch(l_rta->rta_type) + { + case IFLA_ADDRESS: + case IFLA_BROADCAST: + l_addrSize += NLMSG_ALIGN(calcAddrLen(AF_PACKET, l_rtaDataSize)); + break; + case IFLA_IFNAME: + l_nameSize += NLMSG_ALIGN(l_rtaSize + 1); + break; + case IFLA_STATS: + l_dataSize += NLMSG_ALIGN(l_rtaSize); + break; + default: + break; + } + } + + l_entry = uv__malloc(sizeof(struct ifaddrs) + sizeof(int) + l_nameSize + l_addrSize + l_dataSize); + if (l_entry == NULL) + { + return -1; + } + memset(l_entry, 0, sizeof(struct ifaddrs)); + l_entry->ifa_name = ""; + + l_index = ((char *)l_entry) + sizeof(struct ifaddrs); + l_name = l_index + sizeof(int); + l_addr = l_name + l_nameSize; + l_data = l_addr + l_addrSize; + + /* Save the interface index so we can look it up when handling the + * addresses. + */ + memcpy(l_index, &l_info->ifi_index, sizeof(int)); + + l_entry->ifa_flags = l_info->ifi_flags; + + l_rtaSize = NLMSG_PAYLOAD(p_hdr, sizeof(struct ifinfomsg)); + for(l_rta = IFLA_RTA(l_info); RTA_OK(l_rta, l_rtaSize); l_rta = RTA_NEXT(l_rta, l_rtaSize)) + { + void *l_rtaData = RTA_DATA(l_rta); + size_t l_rtaDataSize = RTA_PAYLOAD(l_rta); + switch(l_rta->rta_type) + { + case IFLA_ADDRESS: + case IFLA_BROADCAST: + { + size_t l_addrLen = calcAddrLen(AF_PACKET, l_rtaDataSize); + makeSockaddr(AF_PACKET, (struct sockaddr *)l_addr, l_rtaData, l_rtaDataSize); + ((struct sockaddr_ll *)l_addr)->sll_ifindex = l_info->ifi_index; + ((struct sockaddr_ll *)l_addr)->sll_hatype = l_info->ifi_type; + if(l_rta->rta_type == IFLA_ADDRESS) + { + l_entry->ifa_addr = (struct sockaddr *)l_addr; + } + else + { + l_entry->ifa_broadaddr = (struct sockaddr *)l_addr; + } + l_addr += NLMSG_ALIGN(l_addrLen); + break; + } + case IFLA_IFNAME: + strncpy(l_name, l_rtaData, l_rtaDataSize); + l_name[l_rtaDataSize] = '\0'; + l_entry->ifa_name = l_name; + break; + case IFLA_STATS: + memcpy(l_data, l_rtaData, l_rtaDataSize); + l_entry->ifa_data = l_data; + break; + default: + break; + } + } + + addToEnd(p_resultList, l_entry); + return 0; +} + +static struct ifaddrs *findInterface(int p_index, struct ifaddrs **p_links, int p_numLinks) +{ + int l_num = 0; + struct ifaddrs *l_cur = *p_links; + while(l_cur && l_num < p_numLinks) + { + char *l_indexPtr = ((char *)l_cur) + sizeof(struct ifaddrs); + int l_index; + memcpy(&l_index, l_indexPtr, sizeof(int)); + if(l_index == p_index) + { + return l_cur; + } + + l_cur = l_cur->ifa_next; + ++l_num; + } + return NULL; +} + +static int interpretAddr(struct nlmsghdr *p_hdr, struct ifaddrs **p_resultList, int p_numLinks) +{ + struct ifaddrmsg *l_info = (struct ifaddrmsg *)NLMSG_DATA(p_hdr); + struct ifaddrs *l_interface = findInterface(l_info->ifa_index, p_resultList, p_numLinks); + + size_t l_nameSize = 0; + size_t l_addrSize = 0; + + int l_addedNetmask = 0; + + size_t l_rtaSize = NLMSG_PAYLOAD(p_hdr, sizeof(struct ifaddrmsg)); + struct rtattr *l_rta; + struct ifaddrs *l_entry; + + char *l_name; + char *l_addr; + + for(l_rta = IFA_RTA(l_info); RTA_OK(l_rta, l_rtaSize); l_rta = RTA_NEXT(l_rta, l_rtaSize)) + { + size_t l_rtaDataSize = RTA_PAYLOAD(l_rta); + if(l_info->ifa_family == AF_PACKET) + { + continue; + } + + switch(l_rta->rta_type) + { + case IFA_ADDRESS: + case IFA_LOCAL: + l_addrSize += NLMSG_ALIGN(calcAddrLen(l_info->ifa_family, l_rtaDataSize)); + if((l_info->ifa_family == AF_INET || l_info->ifa_family == AF_INET6) && !l_addedNetmask) + { + /* Make room for netmask */ + l_addrSize += NLMSG_ALIGN(calcAddrLen(l_info->ifa_family, l_rtaDataSize)); + l_addedNetmask = 1; + } + break; + case IFA_BROADCAST: + l_addrSize += NLMSG_ALIGN(calcAddrLen(l_info->ifa_family, l_rtaDataSize)); + break; + case IFA_LABEL: + l_nameSize += NLMSG_ALIGN(l_rtaDataSize + 1); + break; + default: + break; + } + } + + l_entry = uv__malloc(sizeof(struct ifaddrs) + l_nameSize + l_addrSize); + if (l_entry == NULL) + { + return -1; + } + memset(l_entry, 0, sizeof(struct ifaddrs)); + l_entry->ifa_name = (l_interface ? l_interface->ifa_name : ""); + + l_name = ((char *)l_entry) + sizeof(struct ifaddrs); + l_addr = l_name + l_nameSize; + + l_entry->ifa_flags = l_info->ifa_flags; + if(l_interface) + { + l_entry->ifa_flags |= l_interface->ifa_flags; + } + + l_rtaSize = NLMSG_PAYLOAD(p_hdr, sizeof(struct ifaddrmsg)); + for(l_rta = IFA_RTA(l_info); RTA_OK(l_rta, l_rtaSize); l_rta = RTA_NEXT(l_rta, l_rtaSize)) + { + void *l_rtaData = RTA_DATA(l_rta); + size_t l_rtaDataSize = RTA_PAYLOAD(l_rta); + switch(l_rta->rta_type) + { + case IFA_ADDRESS: + case IFA_BROADCAST: + case IFA_LOCAL: + { + size_t l_addrLen = calcAddrLen(l_info->ifa_family, l_rtaDataSize); + makeSockaddr(l_info->ifa_family, (struct sockaddr *)l_addr, l_rtaData, l_rtaDataSize); + if(l_info->ifa_family == AF_INET6) + { + if(IN6_IS_ADDR_LINKLOCAL((struct in6_addr *)l_rtaData) || IN6_IS_ADDR_MC_LINKLOCAL((struct in6_addr *)l_rtaData)) + { + ((struct sockaddr_in6 *)l_addr)->sin6_scope_id = l_info->ifa_index; + } + } + + /* Apparently in a point-to-point network IFA_ADDRESS contains + * the dest address and IFA_LOCAL contains the local address + */ + if(l_rta->rta_type == IFA_ADDRESS) + { + if(l_entry->ifa_addr) + { + l_entry->ifa_dstaddr = (struct sockaddr *)l_addr; + } + else + { + l_entry->ifa_addr = (struct sockaddr *)l_addr; + } + } + else if(l_rta->rta_type == IFA_LOCAL) + { + if(l_entry->ifa_addr) + { + l_entry->ifa_dstaddr = l_entry->ifa_addr; + } + l_entry->ifa_addr = (struct sockaddr *)l_addr; + } + else + { + l_entry->ifa_broadaddr = (struct sockaddr *)l_addr; + } + l_addr += NLMSG_ALIGN(l_addrLen); + break; + } + case IFA_LABEL: + strncpy(l_name, l_rtaData, l_rtaDataSize); + l_name[l_rtaDataSize] = '\0'; + l_entry->ifa_name = l_name; + break; + default: + break; + } + } + + if(l_entry->ifa_addr && (l_entry->ifa_addr->sa_family == AF_INET || l_entry->ifa_addr->sa_family == AF_INET6)) + { + unsigned l_maxPrefix = (l_entry->ifa_addr->sa_family == AF_INET ? 32 : 128); + unsigned l_prefix = (l_info->ifa_prefixlen > l_maxPrefix ? l_maxPrefix : l_info->ifa_prefixlen); + unsigned char l_mask[16] = {0}; + unsigned i; + for(i=0; i<(l_prefix/8); ++i) + { + l_mask[i] = 0xff; + } + if(l_prefix % 8) + { + l_mask[i] = 0xff << (8 - (l_prefix % 8)); + } + + makeSockaddr(l_entry->ifa_addr->sa_family, (struct sockaddr *)l_addr, l_mask, l_maxPrefix / 8); + l_entry->ifa_netmask = (struct sockaddr *)l_addr; + } + + addToEnd(p_resultList, l_entry); + return 0; +} + +static int interpretLinks(int p_socket, pid_t p_pid, NetlinkList *p_netlinkList, struct ifaddrs **p_resultList) +{ + + int l_numLinks = 0; + for(; p_netlinkList; p_netlinkList = p_netlinkList->m_next) + { + unsigned int l_nlsize = p_netlinkList->m_size; + struct nlmsghdr *l_hdr; + for(l_hdr = p_netlinkList->m_data; NLMSG_OK(l_hdr, l_nlsize); l_hdr = NLMSG_NEXT(l_hdr, l_nlsize)) + { + if((pid_t)l_hdr->nlmsg_pid != p_pid || (int)l_hdr->nlmsg_seq != p_socket) + { + continue; + } + + if(l_hdr->nlmsg_type == NLMSG_DONE) + { + break; + } + + if(l_hdr->nlmsg_type == RTM_NEWLINK) + { + if(interpretLink(l_hdr, p_resultList) == -1) + { + return -1; + } + ++l_numLinks; + } + } + } + return l_numLinks; +} + +static int interpretAddrs(int p_socket, pid_t p_pid, NetlinkList *p_netlinkList, struct ifaddrs **p_resultList, int p_numLinks) +{ + for(; p_netlinkList; p_netlinkList = p_netlinkList->m_next) + { + unsigned int l_nlsize = p_netlinkList->m_size; + struct nlmsghdr *l_hdr; + for(l_hdr = p_netlinkList->m_data; NLMSG_OK(l_hdr, l_nlsize); l_hdr = NLMSG_NEXT(l_hdr, l_nlsize)) + { + if((pid_t)l_hdr->nlmsg_pid != p_pid || (int)l_hdr->nlmsg_seq != p_socket) + { + continue; + } + + if(l_hdr->nlmsg_type == NLMSG_DONE) + { + break; + } + + if(l_hdr->nlmsg_type == RTM_NEWADDR) + { + if (interpretAddr(l_hdr, p_resultList, p_numLinks) == -1) + { + return -1; + } + } + } + } + return 0; +} + +int getifaddrs(struct ifaddrs **ifap) +{ + int l_socket; + int l_result; + int l_numLinks; + pid_t l_pid; + NetlinkList *l_linkResults; + NetlinkList *l_addrResults; + + if(!ifap) + { + return -1; + } + *ifap = NULL; + + l_socket = netlink_socket(&l_pid); + if(l_socket < 0) + { + return -1; + } + + l_linkResults = getResultList(l_socket, RTM_GETLINK, l_pid); + if(!l_linkResults) + { + close(l_socket); + return -1; + } + + l_addrResults = getResultList(l_socket, RTM_GETADDR, l_pid); + if(!l_addrResults) + { + close(l_socket); + freeResultList(l_linkResults); + return -1; + } + + l_result = 0; + l_numLinks = interpretLinks(l_socket, l_pid, l_linkResults, ifap); + if(l_numLinks == -1 || interpretAddrs(l_socket, l_pid, l_addrResults, ifap, l_numLinks) == -1) + { + l_result = -1; + } + + freeResultList(l_linkResults); + freeResultList(l_addrResults); + close(l_socket); + return l_result; +} + +void freeifaddrs(struct ifaddrs *ifa) +{ + struct ifaddrs *l_cur; + while(ifa) + { + l_cur = ifa; + ifa = ifa->ifa_next; + uv__free(l_cur); + } +} diff --git a/external/libuv/src/unix/async.c b/external/libuv/src/unix/async.c new file mode 100644 index 000000000..5f58fb88d --- /dev/null +++ b/external/libuv/src/unix/async.c @@ -0,0 +1,253 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +/* This file contains both the uv__async internal infrastructure and the + * user-facing uv_async_t functions. + */ + +#include "uv.h" +#include "internal.h" +#include "atomic-ops.h" + +#include +#include /* snprintf() */ +#include +#include +#include +#include +#include /* sched_yield() */ + +#ifdef __linux__ +#include +#endif + +static void uv__async_send(uv_loop_t* loop); +static int uv__async_start(uv_loop_t* loop); + + +int uv_async_init(uv_loop_t* loop, uv_async_t* handle, uv_async_cb async_cb) { + int err; + + err = uv__async_start(loop); + if (err) + return err; + + uv__handle_init(loop, (uv_handle_t*)handle, UV_ASYNC); + handle->async_cb = async_cb; + handle->pending = 0; + + QUEUE_INSERT_TAIL(&loop->async_handles, &handle->queue); + uv__handle_start(handle); + + return 0; +} + + +int uv_async_send(uv_async_t* handle) { + /* Do a cheap read first. */ + if (ACCESS_ONCE(int, handle->pending) != 0) + return 0; + + /* Tell the other thread we're busy with the handle. */ + if (cmpxchgi(&handle->pending, 0, 1) != 0) + return 0; + + /* Wake up the other thread's event loop. */ + uv__async_send(handle->loop); + + /* Tell the other thread we're done. */ + if (cmpxchgi(&handle->pending, 1, 2) != 1) + abort(); + + return 0; +} + + +/* Only call this from the event loop thread. */ +static int uv__async_spin(uv_async_t* handle) { + int i; + int rc; + + for (;;) { + /* 997 is not completely chosen at random. It's a prime number, acyclical + * by nature, and should therefore hopefully dampen sympathetic resonance. + */ + for (i = 0; i < 997; i++) { + /* rc=0 -- handle is not pending. + * rc=1 -- handle is pending, other thread is still working with it. + * rc=2 -- handle is pending, other thread is done. + */ + rc = cmpxchgi(&handle->pending, 2, 0); + + if (rc != 1) + return rc; + + /* Other thread is busy with this handle, spin until it's done. */ + cpu_relax(); + } + + /* Yield the CPU. We may have preempted the other thread while it's + * inside the critical section and if it's running on the same CPU + * as us, we'll just burn CPU cycles until the end of our time slice. + */ + sched_yield(); + } +} + + +void uv__async_close(uv_async_t* handle) { + uv__async_spin(handle); + QUEUE_REMOVE(&handle->queue); + uv__handle_stop(handle); +} + + +static void uv__async_io(uv_loop_t* loop, uv__io_t* w, unsigned int events) { + char buf[1024]; + ssize_t r; + QUEUE queue; + QUEUE* q; + uv_async_t* h; + + assert(w == &loop->async_io_watcher); + + for (;;) { + r = read(w->fd, buf, sizeof(buf)); + + if (r == sizeof(buf)) + continue; + + if (r != -1) + break; + + if (errno == EAGAIN || errno == EWOULDBLOCK) + break; + + if (errno == EINTR) + continue; + + abort(); + } + + QUEUE_MOVE(&loop->async_handles, &queue); + while (!QUEUE_EMPTY(&queue)) { + q = QUEUE_HEAD(&queue); + h = QUEUE_DATA(q, uv_async_t, queue); + + QUEUE_REMOVE(q); + QUEUE_INSERT_TAIL(&loop->async_handles, q); + + if (0 == uv__async_spin(h)) + continue; /* Not pending. */ + + if (h->async_cb == NULL) + continue; + + h->async_cb(h); + } +} + + +static void uv__async_send(uv_loop_t* loop) { + const void* buf; + ssize_t len; + int fd; + int r; + + buf = ""; + len = 1; + fd = loop->async_wfd; + +#if defined(__linux__) + if (fd == -1) { + static const uint64_t val = 1; + buf = &val; + len = sizeof(val); + fd = loop->async_io_watcher.fd; /* eventfd */ + } +#endif + + do + r = write(fd, buf, len); + while (r == -1 && errno == EINTR); + + if (r == len) + return; + + if (r == -1) + if (errno == EAGAIN || errno == EWOULDBLOCK) + return; + + abort(); +} + + +static int uv__async_start(uv_loop_t* loop) { + int pipefd[2]; + int err; + + if (loop->async_io_watcher.fd != -1) + return 0; + +#ifdef __linux__ + err = eventfd(0, EFD_CLOEXEC | EFD_NONBLOCK); + if (err < 0) + return UV__ERR(errno); + + pipefd[0] = err; + pipefd[1] = -1; +#else + err = uv__make_pipe(pipefd, UV__F_NONBLOCK); + if (err < 0) + return err; +#endif + + uv__io_init(&loop->async_io_watcher, uv__async_io, pipefd[0]); + uv__io_start(loop, &loop->async_io_watcher, POLLIN); + loop->async_wfd = pipefd[1]; + + return 0; +} + + +int uv__async_fork(uv_loop_t* loop) { + if (loop->async_io_watcher.fd == -1) /* never started */ + return 0; + + uv__async_stop(loop); + + return uv__async_start(loop); +} + + +void uv__async_stop(uv_loop_t* loop) { + if (loop->async_io_watcher.fd == -1) + return; + + if (loop->async_wfd != -1) { + if (loop->async_wfd != loop->async_io_watcher.fd) + uv__close(loop->async_wfd); + loop->async_wfd = -1; + } + + uv__io_stop(loop, &loop->async_io_watcher, POLLIN); + uv__close(loop->async_io_watcher.fd); + loop->async_io_watcher.fd = -1; +} diff --git a/external/libuv/src/unix/atomic-ops.h b/external/libuv/src/unix/atomic-ops.h new file mode 100644 index 000000000..347d19365 --- /dev/null +++ b/external/libuv/src/unix/atomic-ops.h @@ -0,0 +1,61 @@ +/* Copyright (c) 2013, Ben Noordhuis + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef UV_ATOMIC_OPS_H_ +#define UV_ATOMIC_OPS_H_ + +#include "internal.h" /* UV_UNUSED */ + +#if defined(__SUNPRO_C) || defined(__SUNPRO_CC) +#include +#endif + +UV_UNUSED(static int cmpxchgi(int* ptr, int oldval, int newval)); +UV_UNUSED(static void cpu_relax(void)); + +/* Prefer hand-rolled assembly over the gcc builtins because the latter also + * issue full memory barriers. + */ +UV_UNUSED(static int cmpxchgi(int* ptr, int oldval, int newval)) { +#if defined(__i386__) || defined(__x86_64__) + int out; + __asm__ __volatile__ ("lock; cmpxchg %2, %1;" + : "=a" (out), "+m" (*(volatile int*) ptr) + : "r" (newval), "0" (oldval) + : "memory"); + return out; +#elif defined(__MVS__) + unsigned int op4; + if (__plo_CSST(ptr, (unsigned int*) &oldval, newval, + (unsigned int*) ptr, *ptr, &op4)) + return oldval; + else + return op4; +#elif defined(__SUNPRO_C) || defined(__SUNPRO_CC) + return atomic_cas_uint((uint_t *)ptr, (uint_t)oldval, (uint_t)newval); +#else + return __sync_val_compare_and_swap(ptr, oldval, newval); +#endif +} + +UV_UNUSED(static void cpu_relax(void)) { +#if defined(__i386__) || defined(__x86_64__) + __asm__ __volatile__ ("rep; nop"); /* a.k.a. PAUSE */ +#elif (defined(__arm__) && __ARM_ARCH >= 7) || defined(__aarch64__) + __asm__ volatile("yield"); +#endif +} + +#endif /* UV_ATOMIC_OPS_H_ */ diff --git a/external/libuv/src/unix/bsd-ifaddrs.c b/external/libuv/src/unix/bsd-ifaddrs.c new file mode 100644 index 000000000..a3385af17 --- /dev/null +++ b/external/libuv/src/unix/bsd-ifaddrs.c @@ -0,0 +1,161 @@ +/* Copyright libuv 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 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. + */ + +#include "uv.h" +#include "internal.h" + +#include +#include + +#include +#include +#if !defined(__CYGWIN__) && !defined(__MSYS__) +#include +#endif + +#if defined(__HAIKU__) +#define IFF_RUNNING IFF_LINK +#endif + +static int uv__ifaddr_exclude(struct ifaddrs *ent, int exclude_type) { + if (!((ent->ifa_flags & IFF_UP) && (ent->ifa_flags & IFF_RUNNING))) + return 1; + if (ent->ifa_addr == NULL) + return 1; +#if !defined(__CYGWIN__) && !defined(__MSYS__) + /* + * If `exclude_type` is `UV__EXCLUDE_IFPHYS`, just see whether `sa_family` + * equals to `AF_LINK` or not. Otherwise, the result depends on the operation + * system with `AF_LINK` or `PF_INET`. + */ + if (exclude_type == UV__EXCLUDE_IFPHYS) + return (ent->ifa_addr->sa_family != AF_LINK); +#endif +#if defined(__APPLE__) || defined(__FreeBSD__) || defined(__DragonFly__) || \ + defined(__HAIKU__) + /* + * On BSD getifaddrs returns information related to the raw underlying + * devices. We're not interested in this information. + */ + if (ent->ifa_addr->sa_family == AF_LINK) + return 1; +#elif defined(__NetBSD__) || defined(__OpenBSD__) + if (ent->ifa_addr->sa_family != PF_INET && + ent->ifa_addr->sa_family != PF_INET6) + return 1; +#endif + return 0; +} + +int uv_interface_addresses(uv_interface_address_t** addresses, int* count) { + struct ifaddrs* addrs; + struct ifaddrs* ent; + uv_interface_address_t* address; +#if !(defined(__CYGWIN__) || defined(__MSYS__)) + int i; +#endif + + *count = 0; + *addresses = NULL; + + if (getifaddrs(&addrs) != 0) + return UV__ERR(errno); + + /* Count the number of interfaces */ + for (ent = addrs; ent != NULL; ent = ent->ifa_next) { + if (uv__ifaddr_exclude(ent, UV__EXCLUDE_IFADDR)) + continue; + (*count)++; + } + + if (*count == 0) { + freeifaddrs(addrs); + return 0; + } + + /* Make sure the memory is initiallized to zero using calloc() */ + *addresses = uv__calloc(*count, sizeof(**addresses)); + + if (*addresses == NULL) { + freeifaddrs(addrs); + return UV_ENOMEM; + } + + address = *addresses; + + for (ent = addrs; ent != NULL; ent = ent->ifa_next) { + if (uv__ifaddr_exclude(ent, UV__EXCLUDE_IFADDR)) + continue; + + address->name = uv__strdup(ent->ifa_name); + + if (ent->ifa_addr->sa_family == AF_INET6) { + address->address.address6 = *((struct sockaddr_in6*) ent->ifa_addr); + } else { + address->address.address4 = *((struct sockaddr_in*) ent->ifa_addr); + } + + if (ent->ifa_netmask->sa_family == AF_INET6) { + address->netmask.netmask6 = *((struct sockaddr_in6*) ent->ifa_netmask); + } else { + address->netmask.netmask4 = *((struct sockaddr_in*) ent->ifa_netmask); + } + + address->is_internal = !!(ent->ifa_flags & IFF_LOOPBACK); + + address++; + } + +#if !(defined(__CYGWIN__) || defined(__MSYS__)) + /* Fill in physical addresses for each interface */ + for (ent = addrs; ent != NULL; ent = ent->ifa_next) { + if (uv__ifaddr_exclude(ent, UV__EXCLUDE_IFPHYS)) + continue; + + address = *addresses; + + for (i = 0; i < *count; i++) { + if (strcmp(address->name, ent->ifa_name) == 0) { + struct sockaddr_dl* sa_addr; + sa_addr = (struct sockaddr_dl*)(ent->ifa_addr); + memcpy(address->phys_addr, LLADDR(sa_addr), sizeof(address->phys_addr)); + } + address++; + } + } +#endif + + freeifaddrs(addrs); + + return 0; +} + + +void uv_free_interface_addresses(uv_interface_address_t* addresses, + int count) { + int i; + + for (i = 0; i < count; i++) { + uv__free(addresses[i].name); + } + + uv__free(addresses); +} diff --git a/external/libuv/src/unix/bsd-proctitle.c b/external/libuv/src/unix/bsd-proctitle.c new file mode 100644 index 000000000..723b81c01 --- /dev/null +++ b/external/libuv/src/unix/bsd-proctitle.c @@ -0,0 +1,100 @@ +/* Copyright libuv 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 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. + */ + +#include "uv.h" +#include "internal.h" + +#include +#include + + +static uv_mutex_t process_title_mutex; +static uv_once_t process_title_mutex_once = UV_ONCE_INIT; +static char* process_title; + + +static void init_process_title_mutex_once(void) { + if (uv_mutex_init(&process_title_mutex)) + abort(); +} + + +void uv__process_title_cleanup(void) { + /* TODO(bnoordhuis) uv_mutex_destroy(&process_title_mutex) + * and reset process_title_mutex_once? + */ +} + + +char** uv_setup_args(int argc, char** argv) { + process_title = argc > 0 ? uv__strdup(argv[0]) : NULL; + return argv; +} + + +int uv_set_process_title(const char* title) { + char* new_title; + + new_title = uv__strdup(title); + if (new_title == NULL) + return UV_ENOMEM; + + uv_once(&process_title_mutex_once, init_process_title_mutex_once); + uv_mutex_lock(&process_title_mutex); + + uv__free(process_title); + process_title = new_title; + setproctitle("%s", title); + + uv_mutex_unlock(&process_title_mutex); + + return 0; +} + + +int uv_get_process_title(char* buffer, size_t size) { + size_t len; + + if (buffer == NULL || size == 0) + return UV_EINVAL; + + uv_once(&process_title_mutex_once, init_process_title_mutex_once); + uv_mutex_lock(&process_title_mutex); + + if (process_title != NULL) { + len = strlen(process_title) + 1; + + if (size < len) { + uv_mutex_unlock(&process_title_mutex); + return UV_ENOBUFS; + } + + memcpy(buffer, process_title, len); + } else { + len = 0; + } + + uv_mutex_unlock(&process_title_mutex); + + buffer[len] = '\0'; + + return 0; +} diff --git a/external/libuv/src/unix/core.c b/external/libuv/src/unix/core.c new file mode 100644 index 000000000..949eefae3 --- /dev/null +++ b/external/libuv/src/unix/core.c @@ -0,0 +1,1533 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#include "uv.h" +#include "internal.h" + +#include /* NULL */ +#include /* printf */ +#include +#include /* strerror */ +#include +#include +#include +#include +#include +#include /* O_CLOEXEC */ +#include +#include +#include +#include +#include +#include /* INT_MAX, PATH_MAX, IOV_MAX */ +#include /* writev */ +#include /* getrusage */ +#include +#include +#include + +#ifdef __sun +# include +# include +# include +#endif + +#if defined(__APPLE__) +# include +# endif /* defined(__APPLE__) */ + + +#if defined(__APPLE__) && !TARGET_OS_IPHONE +# include +# include /* _NSGetExecutablePath */ +# define environ (*_NSGetEnviron()) +#else /* defined(__APPLE__) && !TARGET_OS_IPHONE */ +extern char** environ; +#endif /* !(defined(__APPLE__) && !TARGET_OS_IPHONE) */ + + +#if defined(__DragonFly__) || \ + defined(__FreeBSD__) || \ + defined(__FreeBSD_kernel__) || \ + defined(__NetBSD__) || \ + defined(__OpenBSD__) +# include +# include +# include +# if defined(__FreeBSD__) +# define uv__accept4 accept4 +# endif +# if defined(__NetBSD__) +# define uv__accept4(a, b, c, d) paccept((a), (b), (c), NULL, (d)) +# endif +#endif + +#if defined(__ANDROID_API__) && __ANDROID_API__ < 21 +# include /* for dlsym */ +#endif + +#if defined(__MVS__) +#include +#endif + +#if defined(__linux__) +# include +# define uv__accept4 accept4 +#endif + +static int uv__run_pending(uv_loop_t* loop); + +/* Verify that uv_buf_t is ABI-compatible with struct iovec. */ +STATIC_ASSERT(sizeof(uv_buf_t) == sizeof(struct iovec)); +STATIC_ASSERT(sizeof(&((uv_buf_t*) 0)->base) == + sizeof(((struct iovec*) 0)->iov_base)); +STATIC_ASSERT(sizeof(&((uv_buf_t*) 0)->len) == + sizeof(((struct iovec*) 0)->iov_len)); +STATIC_ASSERT(offsetof(uv_buf_t, base) == offsetof(struct iovec, iov_base)); +STATIC_ASSERT(offsetof(uv_buf_t, len) == offsetof(struct iovec, iov_len)); + + +uint64_t uv_hrtime(void) { + return uv__hrtime(UV_CLOCK_PRECISE); +} + + +void uv_close(uv_handle_t* handle, uv_close_cb close_cb) { + assert(!uv__is_closing(handle)); + + handle->flags |= UV_HANDLE_CLOSING; + handle->close_cb = close_cb; + + switch (handle->type) { + case UV_NAMED_PIPE: + uv__pipe_close((uv_pipe_t*)handle); + break; + + case UV_TTY: + uv__stream_close((uv_stream_t*)handle); + break; + + case UV_TCP: + uv__tcp_close((uv_tcp_t*)handle); + break; + + case UV_UDP: + uv__udp_close((uv_udp_t*)handle); + break; + + case UV_PREPARE: + uv__prepare_close((uv_prepare_t*)handle); + break; + + case UV_CHECK: + uv__check_close((uv_check_t*)handle); + break; + + case UV_IDLE: + uv__idle_close((uv_idle_t*)handle); + break; + + case UV_ASYNC: + uv__async_close((uv_async_t*)handle); + break; + + case UV_TIMER: + uv__timer_close((uv_timer_t*)handle); + break; + + case UV_PROCESS: + uv__process_close((uv_process_t*)handle); + break; + + case UV_FS_EVENT: + uv__fs_event_close((uv_fs_event_t*)handle); + break; + + case UV_POLL: + uv__poll_close((uv_poll_t*)handle); + break; + + case UV_FS_POLL: + uv__fs_poll_close((uv_fs_poll_t*)handle); + /* Poll handles use file system requests, and one of them may still be + * running. The poll code will call uv__make_close_pending() for us. */ + return; + + case UV_SIGNAL: + uv__signal_close((uv_signal_t*) handle); + break; + + default: + assert(0); + } + + uv__make_close_pending(handle); +} + +int uv__socket_sockopt(uv_handle_t* handle, int optname, int* value) { + int r; + int fd; + socklen_t len; + + if (handle == NULL || value == NULL) + return UV_EINVAL; + + if (handle->type == UV_TCP || handle->type == UV_NAMED_PIPE) + fd = uv__stream_fd((uv_stream_t*) handle); + else if (handle->type == UV_UDP) + fd = ((uv_udp_t *) handle)->io_watcher.fd; + else + return UV_ENOTSUP; + + len = sizeof(*value); + + if (*value == 0) + r = getsockopt(fd, SOL_SOCKET, optname, value, &len); + else + r = setsockopt(fd, SOL_SOCKET, optname, (const void*) value, len); + + if (r < 0) + return UV__ERR(errno); + + return 0; +} + +void uv__make_close_pending(uv_handle_t* handle) { + assert(handle->flags & UV_HANDLE_CLOSING); + assert(!(handle->flags & UV_HANDLE_CLOSED)); + handle->next_closing = handle->loop->closing_handles; + handle->loop->closing_handles = handle; +} + +int uv__getiovmax(void) { +#if defined(IOV_MAX) + return IOV_MAX; +#elif defined(_SC_IOV_MAX) + static int iovmax = -1; + if (iovmax == -1) { + iovmax = sysconf(_SC_IOV_MAX); + /* On some embedded devices (arm-linux-uclibc based ip camera), + * sysconf(_SC_IOV_MAX) can not get the correct value. The return + * value is -1 and the errno is EINPROGRESS. Degrade the value to 1. + */ + if (iovmax == -1) iovmax = 1; + } + return iovmax; +#else + return 1024; +#endif +} + + +static void uv__finish_close(uv_handle_t* handle) { + uv_signal_t* sh; + + /* Note: while the handle is in the UV_HANDLE_CLOSING state now, it's still + * possible for it to be active in the sense that uv__is_active() returns + * true. + * + * A good example is when the user calls uv_shutdown(), immediately followed + * by uv_close(). The handle is considered active at this point because the + * completion of the shutdown req is still pending. + */ + assert(handle->flags & UV_HANDLE_CLOSING); + assert(!(handle->flags & UV_HANDLE_CLOSED)); + handle->flags |= UV_HANDLE_CLOSED; + + switch (handle->type) { + case UV_PREPARE: + case UV_CHECK: + case UV_IDLE: + case UV_ASYNC: + case UV_TIMER: + case UV_PROCESS: + case UV_FS_EVENT: + case UV_FS_POLL: + case UV_POLL: + break; + + case UV_SIGNAL: + /* If there are any caught signals "trapped" in the signal pipe, + * we can't call the close callback yet. Reinserting the handle + * into the closing queue makes the event loop spin but that's + * okay because we only need to deliver the pending events. + */ + sh = (uv_signal_t*) handle; + if (sh->caught_signals > sh->dispatched_signals) { + handle->flags ^= UV_HANDLE_CLOSED; + uv__make_close_pending(handle); /* Back into the queue. */ + return; + } + break; + + case UV_NAMED_PIPE: + case UV_TCP: + case UV_TTY: + uv__stream_destroy((uv_stream_t*)handle); + break; + + case UV_UDP: + uv__udp_finish_close((uv_udp_t*)handle); + break; + + default: + assert(0); + break; + } + + uv__handle_unref(handle); + QUEUE_REMOVE(&handle->handle_queue); + + if (handle->close_cb) { + handle->close_cb(handle); + } +} + + +static void uv__run_closing_handles(uv_loop_t* loop) { + uv_handle_t* p; + uv_handle_t* q; + + p = loop->closing_handles; + loop->closing_handles = NULL; + + while (p) { + q = p->next_closing; + uv__finish_close(p); + p = q; + } +} + + +int uv_is_closing(const uv_handle_t* handle) { + return uv__is_closing(handle); +} + + +int uv_backend_fd(const uv_loop_t* loop) { + return loop->backend_fd; +} + + +int uv_backend_timeout(const uv_loop_t* loop) { + if (loop->stop_flag != 0) + return 0; + + if (!uv__has_active_handles(loop) && !uv__has_active_reqs(loop)) + return 0; + + if (!QUEUE_EMPTY(&loop->idle_handles)) + return 0; + + if (!QUEUE_EMPTY(&loop->pending_queue)) + return 0; + + if (loop->closing_handles) + return 0; + + return uv__next_timeout(loop); +} + + +static int uv__loop_alive(const uv_loop_t* loop) { + return uv__has_active_handles(loop) || + uv__has_active_reqs(loop) || + loop->closing_handles != NULL; +} + + +int uv_loop_alive(const uv_loop_t* loop) { + return uv__loop_alive(loop); +} + + +int uv_run(uv_loop_t* loop, uv_run_mode mode) { + int timeout; + int r; + int ran_pending; + + r = uv__loop_alive(loop); + if (!r) + uv__update_time(loop); + + while (r != 0 && loop->stop_flag == 0) { + uv__update_time(loop); + uv__run_timers(loop); + ran_pending = uv__run_pending(loop); + uv__run_idle(loop); + uv__run_prepare(loop); + + timeout = 0; + if ((mode == UV_RUN_ONCE && !ran_pending) || mode == UV_RUN_DEFAULT) + timeout = uv_backend_timeout(loop); + + uv__io_poll(loop, timeout); + uv__run_check(loop); + uv__run_closing_handles(loop); + + if (mode == UV_RUN_ONCE) { + /* UV_RUN_ONCE implies forward progress: at least one callback must have + * been invoked when it returns. uv__io_poll() can return without doing + * I/O (meaning: no callbacks) when its timeout expires - which means we + * have pending timers that satisfy the forward progress constraint. + * + * UV_RUN_NOWAIT makes no guarantees about progress so it's omitted from + * the check. + */ + uv__update_time(loop); + uv__run_timers(loop); + } + + r = uv__loop_alive(loop); + if (mode == UV_RUN_ONCE || mode == UV_RUN_NOWAIT) + break; + } + + /* The if statement lets gcc compile it to a conditional store. Avoids + * dirtying a cache line. + */ + if (loop->stop_flag != 0) + loop->stop_flag = 0; + + return r; +} + + +void uv_update_time(uv_loop_t* loop) { + uv__update_time(loop); +} + + +int uv_is_active(const uv_handle_t* handle) { + return uv__is_active(handle); +} + + +/* Open a socket in non-blocking close-on-exec mode, atomically if possible. */ +int uv__socket(int domain, int type, int protocol) { + int sockfd; + int err; + +#if defined(SOCK_NONBLOCK) && defined(SOCK_CLOEXEC) + sockfd = socket(domain, type | SOCK_NONBLOCK | SOCK_CLOEXEC, protocol); + if (sockfd != -1) + return sockfd; + + if (errno != EINVAL) + return UV__ERR(errno); +#endif + + sockfd = socket(domain, type, protocol); + if (sockfd == -1) + return UV__ERR(errno); + + err = uv__nonblock(sockfd, 1); + if (err == 0) + err = uv__cloexec(sockfd, 1); + + if (err) { + uv__close(sockfd); + return err; + } + +#if defined(SO_NOSIGPIPE) + { + int on = 1; + setsockopt(sockfd, SOL_SOCKET, SO_NOSIGPIPE, &on, sizeof(on)); + } +#endif + + return sockfd; +} + +/* get a file pointer to a file in read-only and close-on-exec mode */ +FILE* uv__open_file(const char* path) { + int fd; + FILE* fp; + + fd = uv__open_cloexec(path, O_RDONLY); + if (fd < 0) + return NULL; + + fp = fdopen(fd, "r"); + if (fp == NULL) + uv__close(fd); + + return fp; +} + + +int uv__accept(int sockfd) { + int peerfd; + int err; + + (void) &err; + assert(sockfd >= 0); + + do +#ifdef uv__accept4 + peerfd = uv__accept4(sockfd, NULL, NULL, SOCK_NONBLOCK|SOCK_CLOEXEC); +#else + peerfd = accept(sockfd, NULL, NULL); +#endif + while (peerfd == -1 && errno == EINTR); + + if (peerfd == -1) + return UV__ERR(errno); + +#ifndef uv__accept4 + err = uv__cloexec(peerfd, 1); + if (err == 0) + err = uv__nonblock(peerfd, 1); + + if (err != 0) { + uv__close(peerfd); + return err; + } +#endif + + return peerfd; +} + + +/* close() on macos has the "interesting" quirk that it fails with EINTR + * without closing the file descriptor when a thread is in the cancel state. + * That's why libuv calls close$NOCANCEL() instead. + * + * glibc on linux has a similar issue: close() is a cancellation point and + * will unwind the thread when it's in the cancel state. Work around that + * by making the system call directly. Musl libc is unaffected. + */ +int uv__close_nocancel(int fd) { +#if defined(__APPLE__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdollar-in-identifier-extension" +#if defined(__LP64__) || TARGET_OS_IPHONE + extern int close$NOCANCEL(int); + return close$NOCANCEL(fd); +#else + extern int close$NOCANCEL$UNIX2003(int); + return close$NOCANCEL$UNIX2003(fd); +#endif +#pragma GCC diagnostic pop +#elif defined(__linux__) + return syscall(SYS_close, fd); +#else + return close(fd); +#endif +} + + +int uv__close_nocheckstdio(int fd) { + int saved_errno; + int rc; + + assert(fd > -1); /* Catch uninitialized io_watcher.fd bugs. */ + + saved_errno = errno; + rc = uv__close_nocancel(fd); + if (rc == -1) { + rc = UV__ERR(errno); + if (rc == UV_EINTR || rc == UV__ERR(EINPROGRESS)) + rc = 0; /* The close is in progress, not an error. */ + errno = saved_errno; + } + + return rc; +} + + +int uv__close(int fd) { + assert(fd > STDERR_FILENO); /* Catch stdio close bugs. */ +#if defined(__MVS__) + SAVE_ERRNO(epoll_file_close(fd)); +#endif + return uv__close_nocheckstdio(fd); +} + + +int uv__nonblock_ioctl(int fd, int set) { + int r; + + do + r = ioctl(fd, FIONBIO, &set); + while (r == -1 && errno == EINTR); + + if (r) + return UV__ERR(errno); + + return 0; +} + + +#if !defined(__CYGWIN__) && !defined(__MSYS__) && !defined(__HAIKU__) +int uv__cloexec_ioctl(int fd, int set) { + int r; + + do + r = ioctl(fd, set ? FIOCLEX : FIONCLEX); + while (r == -1 && errno == EINTR); + + if (r) + return UV__ERR(errno); + + return 0; +} +#endif + + +int uv__nonblock_fcntl(int fd, int set) { + int flags; + int r; + + do + r = fcntl(fd, F_GETFL); + while (r == -1 && errno == EINTR); + + if (r == -1) + return UV__ERR(errno); + + /* Bail out now if already set/clear. */ + if (!!(r & O_NONBLOCK) == !!set) + return 0; + + if (set) + flags = r | O_NONBLOCK; + else + flags = r & ~O_NONBLOCK; + + do + r = fcntl(fd, F_SETFL, flags); + while (r == -1 && errno == EINTR); + + if (r) + return UV__ERR(errno); + + return 0; +} + + +int uv__cloexec_fcntl(int fd, int set) { + int flags; + int r; + + do + r = fcntl(fd, F_GETFD); + while (r == -1 && errno == EINTR); + + if (r == -1) + return UV__ERR(errno); + + /* Bail out now if already set/clear. */ + if (!!(r & FD_CLOEXEC) == !!set) + return 0; + + if (set) + flags = r | FD_CLOEXEC; + else + flags = r & ~FD_CLOEXEC; + + do + r = fcntl(fd, F_SETFD, flags); + while (r == -1 && errno == EINTR); + + if (r) + return UV__ERR(errno); + + return 0; +} + + +ssize_t uv__recvmsg(int fd, struct msghdr* msg, int flags) { + struct cmsghdr* cmsg; + ssize_t rc; + int* pfd; + int* end; +#if defined(__linux__) + static int no_msg_cmsg_cloexec; + if (no_msg_cmsg_cloexec == 0) { + rc = recvmsg(fd, msg, flags | 0x40000000); /* MSG_CMSG_CLOEXEC */ + if (rc != -1) + return rc; + if (errno != EINVAL) + return UV__ERR(errno); + rc = recvmsg(fd, msg, flags); + if (rc == -1) + return UV__ERR(errno); + no_msg_cmsg_cloexec = 1; + } else { + rc = recvmsg(fd, msg, flags); + } +#else + rc = recvmsg(fd, msg, flags); +#endif + if (rc == -1) + return UV__ERR(errno); + if (msg->msg_controllen == 0) + return rc; + for (cmsg = CMSG_FIRSTHDR(msg); cmsg != NULL; cmsg = CMSG_NXTHDR(msg, cmsg)) + if (cmsg->cmsg_type == SCM_RIGHTS) + for (pfd = (int*) CMSG_DATA(cmsg), + end = (int*) ((char*) cmsg + cmsg->cmsg_len); + pfd < end; + pfd += 1) + uv__cloexec(*pfd, 1); + return rc; +} + + +int uv_cwd(char* buffer, size_t* size) { + char scratch[1 + UV__PATH_MAX]; + + if (buffer == NULL || size == NULL) + return UV_EINVAL; + + /* Try to read directly into the user's buffer first... */ + if (getcwd(buffer, *size) != NULL) + goto fixup; + + if (errno != ERANGE) + return UV__ERR(errno); + + /* ...or into scratch space if the user's buffer is too small + * so we can report how much space to provide on the next try. + */ + if (getcwd(scratch, sizeof(scratch)) == NULL) + return UV__ERR(errno); + + buffer = scratch; + +fixup: + + *size = strlen(buffer); + + if (*size > 1 && buffer[*size - 1] == '/') { + *size -= 1; + buffer[*size] = '\0'; + } + + if (buffer == scratch) { + *size += 1; + return UV_ENOBUFS; + } + + return 0; +} + + +int uv_chdir(const char* dir) { + if (chdir(dir)) + return UV__ERR(errno); + + return 0; +} + + +void uv_disable_stdio_inheritance(void) { + int fd; + + /* Set the CLOEXEC flag on all open descriptors. Unconditionally try the + * first 16 file descriptors. After that, bail out after the first error. + */ + for (fd = 0; ; fd++) + if (uv__cloexec(fd, 1) && fd > 15) + break; +} + + +int uv_fileno(const uv_handle_t* handle, uv_os_fd_t* fd) { + int fd_out; + + switch (handle->type) { + case UV_TCP: + case UV_NAMED_PIPE: + case UV_TTY: + fd_out = uv__stream_fd((uv_stream_t*) handle); + break; + + case UV_UDP: + fd_out = ((uv_udp_t *) handle)->io_watcher.fd; + break; + + case UV_POLL: + fd_out = ((uv_poll_t *) handle)->io_watcher.fd; + break; + + default: + return UV_EINVAL; + } + + if (uv__is_closing(handle) || fd_out == -1) + return UV_EBADF; + + *fd = fd_out; + return 0; +} + + +static int uv__run_pending(uv_loop_t* loop) { + QUEUE* q; + QUEUE pq; + uv__io_t* w; + + if (QUEUE_EMPTY(&loop->pending_queue)) + return 0; + + QUEUE_MOVE(&loop->pending_queue, &pq); + + while (!QUEUE_EMPTY(&pq)) { + q = QUEUE_HEAD(&pq); + QUEUE_REMOVE(q); + QUEUE_INIT(q); + w = QUEUE_DATA(q, uv__io_t, pending_queue); + w->cb(loop, w, POLLOUT); + } + + return 1; +} + + +static unsigned int next_power_of_two(unsigned int val) { + val -= 1; + val |= val >> 1; + val |= val >> 2; + val |= val >> 4; + val |= val >> 8; + val |= val >> 16; + val += 1; + return val; +} + +static void maybe_resize(uv_loop_t* loop, unsigned int len) { + uv__io_t** watchers; + void* fake_watcher_list; + void* fake_watcher_count; + unsigned int nwatchers; + unsigned int i; + + if (len <= loop->nwatchers) + return; + + /* Preserve fake watcher list and count at the end of the watchers */ + if (loop->watchers != NULL) { + fake_watcher_list = loop->watchers[loop->nwatchers]; + fake_watcher_count = loop->watchers[loop->nwatchers + 1]; + } else { + fake_watcher_list = NULL; + fake_watcher_count = NULL; + } + + nwatchers = next_power_of_two(len + 2) - 2; + watchers = uv__reallocf(loop->watchers, + (nwatchers + 2) * sizeof(loop->watchers[0])); + + if (watchers == NULL) + abort(); + for (i = loop->nwatchers; i < nwatchers; i++) + watchers[i] = NULL; + watchers[nwatchers] = fake_watcher_list; + watchers[nwatchers + 1] = fake_watcher_count; + + loop->watchers = watchers; + loop->nwatchers = nwatchers; +} + + +void uv__io_init(uv__io_t* w, uv__io_cb cb, int fd) { + assert(cb != NULL); + assert(fd >= -1); + QUEUE_INIT(&w->pending_queue); + QUEUE_INIT(&w->watcher_queue); + w->cb = cb; + w->fd = fd; + w->events = 0; + w->pevents = 0; + +#if defined(UV_HAVE_KQUEUE) + w->rcount = 0; + w->wcount = 0; +#endif /* defined(UV_HAVE_KQUEUE) */ +} + + +void uv__io_start(uv_loop_t* loop, uv__io_t* w, unsigned int events) { + assert(0 == (events & ~(POLLIN | POLLOUT | UV__POLLRDHUP | UV__POLLPRI))); + assert(0 != events); + assert(w->fd >= 0); + assert(w->fd < INT_MAX); + + w->pevents |= events; + maybe_resize(loop, w->fd + 1); + +#if !defined(__sun) + /* The event ports backend needs to rearm all file descriptors on each and + * every tick of the event loop but the other backends allow us to + * short-circuit here if the event mask is unchanged. + */ + if (w->events == w->pevents) + return; +#endif + + if (QUEUE_EMPTY(&w->watcher_queue)) + QUEUE_INSERT_TAIL(&loop->watcher_queue, &w->watcher_queue); + + if (loop->watchers[w->fd] == NULL) { + loop->watchers[w->fd] = w; + loop->nfds++; + } +} + + +void uv__io_stop(uv_loop_t* loop, uv__io_t* w, unsigned int events) { + assert(0 == (events & ~(POLLIN | POLLOUT | UV__POLLRDHUP | UV__POLLPRI))); + assert(0 != events); + + if (w->fd == -1) + return; + + assert(w->fd >= 0); + + /* Happens when uv__io_stop() is called on a handle that was never started. */ + if ((unsigned) w->fd >= loop->nwatchers) + return; + + w->pevents &= ~events; + + if (w->pevents == 0) { + QUEUE_REMOVE(&w->watcher_queue); + QUEUE_INIT(&w->watcher_queue); + + if (loop->watchers[w->fd] != NULL) { + assert(loop->watchers[w->fd] == w); + assert(loop->nfds > 0); + loop->watchers[w->fd] = NULL; + loop->nfds--; + w->events = 0; + } + } + else if (QUEUE_EMPTY(&w->watcher_queue)) + QUEUE_INSERT_TAIL(&loop->watcher_queue, &w->watcher_queue); +} + + +void uv__io_close(uv_loop_t* loop, uv__io_t* w) { + uv__io_stop(loop, w, POLLIN | POLLOUT | UV__POLLRDHUP | UV__POLLPRI); + QUEUE_REMOVE(&w->pending_queue); + + /* Remove stale events for this file descriptor */ + if (w->fd != -1) + uv__platform_invalidate_fd(loop, w->fd); +} + + +void uv__io_feed(uv_loop_t* loop, uv__io_t* w) { + if (QUEUE_EMPTY(&w->pending_queue)) + QUEUE_INSERT_TAIL(&loop->pending_queue, &w->pending_queue); +} + + +int uv__io_active(const uv__io_t* w, unsigned int events) { + assert(0 == (events & ~(POLLIN | POLLOUT | UV__POLLRDHUP | UV__POLLPRI))); + assert(0 != events); + return 0 != (w->pevents & events); +} + + +int uv__fd_exists(uv_loop_t* loop, int fd) { + return (unsigned) fd < loop->nwatchers && loop->watchers[fd] != NULL; +} + + +int uv_getrusage(uv_rusage_t* rusage) { + struct rusage usage; + + if (getrusage(RUSAGE_SELF, &usage)) + return UV__ERR(errno); + + rusage->ru_utime.tv_sec = usage.ru_utime.tv_sec; + rusage->ru_utime.tv_usec = usage.ru_utime.tv_usec; + + rusage->ru_stime.tv_sec = usage.ru_stime.tv_sec; + rusage->ru_stime.tv_usec = usage.ru_stime.tv_usec; + +#if !defined(__MVS__) && !defined(__HAIKU__) + rusage->ru_maxrss = usage.ru_maxrss; + rusage->ru_ixrss = usage.ru_ixrss; + rusage->ru_idrss = usage.ru_idrss; + rusage->ru_isrss = usage.ru_isrss; + rusage->ru_minflt = usage.ru_minflt; + rusage->ru_majflt = usage.ru_majflt; + rusage->ru_nswap = usage.ru_nswap; + rusage->ru_inblock = usage.ru_inblock; + rusage->ru_oublock = usage.ru_oublock; + rusage->ru_msgsnd = usage.ru_msgsnd; + rusage->ru_msgrcv = usage.ru_msgrcv; + rusage->ru_nsignals = usage.ru_nsignals; + rusage->ru_nvcsw = usage.ru_nvcsw; + rusage->ru_nivcsw = usage.ru_nivcsw; +#endif + + return 0; +} + + +int uv__open_cloexec(const char* path, int flags) { +#if defined(O_CLOEXEC) + int fd; + + fd = open(path, flags | O_CLOEXEC); + if (fd == -1) + return UV__ERR(errno); + + return fd; +#else /* O_CLOEXEC */ + int err; + int fd; + + fd = open(path, flags); + if (fd == -1) + return UV__ERR(errno); + + err = uv__cloexec(fd, 1); + if (err) { + uv__close(fd); + return err; + } + + return fd; +#endif /* O_CLOEXEC */ +} + + +int uv__dup2_cloexec(int oldfd, int newfd) { +#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__linux__) + int r; + + r = dup3(oldfd, newfd, O_CLOEXEC); + if (r == -1) + return UV__ERR(errno); + + return r; +#else + int err; + int r; + + r = dup2(oldfd, newfd); /* Never retry. */ + if (r == -1) + return UV__ERR(errno); + + err = uv__cloexec(newfd, 1); + if (err != 0) { + uv__close(newfd); + return err; + } + + return r; +#endif +} + + +int uv_os_homedir(char* buffer, size_t* size) { + uv_passwd_t pwd; + size_t len; + int r; + + /* Check if the HOME environment variable is set first. The task of + performing input validation on buffer and size is taken care of by + uv_os_getenv(). */ + r = uv_os_getenv("HOME", buffer, size); + + if (r != UV_ENOENT) + return r; + + /* HOME is not set, so call uv__getpwuid_r() */ + r = uv__getpwuid_r(&pwd); + + if (r != 0) { + return r; + } + + len = strlen(pwd.homedir); + + if (len >= *size) { + *size = len + 1; + uv_os_free_passwd(&pwd); + return UV_ENOBUFS; + } + + memcpy(buffer, pwd.homedir, len + 1); + *size = len; + uv_os_free_passwd(&pwd); + + return 0; +} + + +int uv_os_tmpdir(char* buffer, size_t* size) { + const char* buf; + size_t len; + + if (buffer == NULL || size == NULL || *size == 0) + return UV_EINVAL; + +#define CHECK_ENV_VAR(name) \ + do { \ + buf = getenv(name); \ + if (buf != NULL) \ + goto return_buffer; \ + } \ + while (0) + + /* Check the TMPDIR, TMP, TEMP, and TEMPDIR environment variables in order */ + CHECK_ENV_VAR("TMPDIR"); + CHECK_ENV_VAR("TMP"); + CHECK_ENV_VAR("TEMP"); + CHECK_ENV_VAR("TEMPDIR"); + +#undef CHECK_ENV_VAR + + /* No temp environment variables defined */ + #if defined(__ANDROID__) + buf = "/data/local/tmp"; + #else + buf = "/tmp"; + #endif + +return_buffer: + len = strlen(buf); + + if (len >= *size) { + *size = len + 1; + return UV_ENOBUFS; + } + + /* The returned directory should not have a trailing slash. */ + if (len > 1 && buf[len - 1] == '/') { + len--; + } + + memcpy(buffer, buf, len + 1); + buffer[len] = '\0'; + *size = len; + + return 0; +} + + +int uv__getpwuid_r(uv_passwd_t* pwd) { + struct passwd pw; + struct passwd* result; + char* buf; + uid_t uid; + size_t bufsize; + size_t name_size; + size_t homedir_size; + size_t shell_size; + long initsize; + int r; +#if defined(__ANDROID_API__) && __ANDROID_API__ < 21 + int (*getpwuid_r)(uid_t, struct passwd*, char*, size_t, struct passwd**); + + getpwuid_r = dlsym(RTLD_DEFAULT, "getpwuid_r"); + if (getpwuid_r == NULL) + return UV_ENOSYS; +#endif + + if (pwd == NULL) + return UV_EINVAL; + + initsize = sysconf(_SC_GETPW_R_SIZE_MAX); + + if (initsize <= 0) + bufsize = 4096; + else + bufsize = (size_t) initsize; + + uid = geteuid(); + buf = NULL; + + for (;;) { + uv__free(buf); + buf = uv__malloc(bufsize); + + if (buf == NULL) + return UV_ENOMEM; + + r = getpwuid_r(uid, &pw, buf, bufsize, &result); + + if (r != ERANGE) + break; + + bufsize *= 2; + } + + if (r != 0) { + uv__free(buf); + return -r; + } + + if (result == NULL) { + uv__free(buf); + return UV_ENOENT; + } + + /* Allocate memory for the username, shell, and home directory */ + name_size = strlen(pw.pw_name) + 1; + homedir_size = strlen(pw.pw_dir) + 1; + shell_size = strlen(pw.pw_shell) + 1; + pwd->username = uv__malloc(name_size + homedir_size + shell_size); + + if (pwd->username == NULL) { + uv__free(buf); + return UV_ENOMEM; + } + + /* Copy the username */ + memcpy(pwd->username, pw.pw_name, name_size); + + /* Copy the home directory */ + pwd->homedir = pwd->username + name_size; + memcpy(pwd->homedir, pw.pw_dir, homedir_size); + + /* Copy the shell */ + pwd->shell = pwd->homedir + homedir_size; + memcpy(pwd->shell, pw.pw_shell, shell_size); + + /* Copy the uid and gid */ + pwd->uid = pw.pw_uid; + pwd->gid = pw.pw_gid; + + uv__free(buf); + + return 0; +} + + +void uv_os_free_passwd(uv_passwd_t* pwd) { + if (pwd == NULL) + return; + + /* + The memory for name, shell, and homedir are allocated in a single + uv__malloc() call. The base of the pointer is stored in pwd->username, so + that is the field that needs to be freed. + */ + uv__free(pwd->username); + pwd->username = NULL; + pwd->shell = NULL; + pwd->homedir = NULL; +} + + +int uv_os_get_passwd(uv_passwd_t* pwd) { + return uv__getpwuid_r(pwd); +} + + +int uv_translate_sys_error(int sys_errno) { + /* If < 0 then it's already a libuv error. */ + return sys_errno <= 0 ? sys_errno : -sys_errno; +} + + +int uv_os_environ(uv_env_item_t** envitems, int* count) { + int i, j, cnt; + uv_env_item_t* envitem; + + *envitems = NULL; + *count = 0; + + for (i = 0; environ[i] != NULL; i++); + + *envitems = uv__calloc(i, sizeof(**envitems)); + + if (*envitems == NULL) + return UV_ENOMEM; + + for (j = 0, cnt = 0; j < i; j++) { + char* buf; + char* ptr; + + if (environ[j] == NULL) + break; + + buf = uv__strdup(environ[j]); + if (buf == NULL) + goto fail; + + ptr = strchr(buf, '='); + if (ptr == NULL) { + uv__free(buf); + continue; + } + + *ptr = '\0'; + + envitem = &(*envitems)[cnt]; + envitem->name = buf; + envitem->value = ptr + 1; + + cnt++; + } + + *count = cnt; + return 0; + +fail: + for (i = 0; i < cnt; i++) { + envitem = &(*envitems)[cnt]; + uv__free(envitem->name); + } + uv__free(*envitems); + + *envitems = NULL; + *count = 0; + return UV_ENOMEM; +} + + +int uv_os_getenv(const char* name, char* buffer, size_t* size) { + char* var; + size_t len; + + if (name == NULL || buffer == NULL || size == NULL || *size == 0) + return UV_EINVAL; + + var = getenv(name); + + if (var == NULL) + return UV_ENOENT; + + len = strlen(var); + + if (len >= *size) { + *size = len + 1; + return UV_ENOBUFS; + } + + memcpy(buffer, var, len + 1); + *size = len; + + return 0; +} + + +int uv_os_setenv(const char* name, const char* value) { + if (name == NULL || value == NULL) + return UV_EINVAL; + + if (setenv(name, value, 1) != 0) + return UV__ERR(errno); + + return 0; +} + + +int uv_os_unsetenv(const char* name) { + if (name == NULL) + return UV_EINVAL; + + if (unsetenv(name) != 0) + return UV__ERR(errno); + + return 0; +} + + +int uv_os_gethostname(char* buffer, size_t* size) { + /* + On some platforms, if the input buffer is not large enough, gethostname() + succeeds, but truncates the result. libuv can detect this and return ENOBUFS + instead by creating a large enough buffer and comparing the hostname length + to the size input. + */ + char buf[UV_MAXHOSTNAMESIZE]; + size_t len; + + if (buffer == NULL || size == NULL || *size == 0) + return UV_EINVAL; + + if (gethostname(buf, sizeof(buf)) != 0) + return UV__ERR(errno); + + buf[sizeof(buf) - 1] = '\0'; /* Null terminate, just to be safe. */ + len = strlen(buf); + + if (len >= *size) { + *size = len + 1; + return UV_ENOBUFS; + } + + memcpy(buffer, buf, len + 1); + *size = len; + return 0; +} + + +uv_os_fd_t uv_get_osfhandle(int fd) { + return fd; +} + +int uv_open_osfhandle(uv_os_fd_t os_fd) { + return os_fd; +} + +uv_pid_t uv_os_getpid(void) { + return getpid(); +} + + +uv_pid_t uv_os_getppid(void) { + return getppid(); +} + + +int uv_os_getpriority(uv_pid_t pid, int* priority) { + int r; + + if (priority == NULL) + return UV_EINVAL; + + errno = 0; + r = getpriority(PRIO_PROCESS, (int) pid); + + if (r == -1 && errno != 0) + return UV__ERR(errno); + + *priority = r; + return 0; +} + + +int uv_os_setpriority(uv_pid_t pid, int priority) { + if (priority < UV_PRIORITY_HIGHEST || priority > UV_PRIORITY_LOW) + return UV_EINVAL; + + if (setpriority(PRIO_PROCESS, (int) pid, priority) != 0) + return UV__ERR(errno); + + return 0; +} + + +int uv_os_uname(uv_utsname_t* buffer) { + struct utsname buf; + int r; + + if (buffer == NULL) + return UV_EINVAL; + + if (uname(&buf) == -1) { + r = UV__ERR(errno); + goto error; + } + + r = uv__strscpy(buffer->sysname, buf.sysname, sizeof(buffer->sysname)); + if (r == UV_E2BIG) + goto error; + +#ifdef _AIX + r = snprintf(buffer->release, + sizeof(buffer->release), + "%s.%s", + buf.version, + buf.release); + if (r >= sizeof(buffer->release)) { + r = UV_E2BIG; + goto error; + } +#else + r = uv__strscpy(buffer->release, buf.release, sizeof(buffer->release)); + if (r == UV_E2BIG) + goto error; +#endif + + r = uv__strscpy(buffer->version, buf.version, sizeof(buffer->version)); + if (r == UV_E2BIG) + goto error; + +#if defined(_AIX) || defined(__PASE__) + r = uv__strscpy(buffer->machine, "ppc64", sizeof(buffer->machine)); +#else + r = uv__strscpy(buffer->machine, buf.machine, sizeof(buffer->machine)); +#endif + + if (r == UV_E2BIG) + goto error; + + return 0; + +error: + buffer->sysname[0] = '\0'; + buffer->release[0] = '\0'; + buffer->version[0] = '\0'; + buffer->machine[0] = '\0'; + return r; +} + +int uv__getsockpeername(const uv_handle_t* handle, + uv__peersockfunc func, + struct sockaddr* name, + int* namelen) { + socklen_t socklen; + uv_os_fd_t fd; + int r; + + r = uv_fileno(handle, &fd); + if (r < 0) + return r; + + /* sizeof(socklen_t) != sizeof(int) on some systems. */ + socklen = (socklen_t) *namelen; + + if (func(fd, name, &socklen)) + return UV__ERR(errno); + + *namelen = (int) socklen; + return 0; +} + +int uv_gettimeofday(uv_timeval64_t* tv) { + struct timeval time; + + if (tv == NULL) + return UV_EINVAL; + + if (gettimeofday(&time, NULL) != 0) + return UV__ERR(errno); + + tv->tv_sec = (int64_t) time.tv_sec; + tv->tv_usec = (int32_t) time.tv_usec; + return 0; +} + +void uv_sleep(unsigned int msec) { + struct timespec timeout; + int rc; + + timeout.tv_sec = msec / 1000; + timeout.tv_nsec = (msec % 1000) * 1000 * 1000; + + do + rc = nanosleep(&timeout, &timeout); + while (rc == -1 && errno == EINTR); + + assert(rc == 0); +} diff --git a/external/libuv/src/unix/cygwin.c b/external/libuv/src/unix/cygwin.c new file mode 100644 index 000000000..169958d55 --- /dev/null +++ b/external/libuv/src/unix/cygwin.c @@ -0,0 +1,53 @@ +/* Copyright libuv 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 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. + */ + +#include "uv.h" +#include "internal.h" + +#include +#include + +int uv_uptime(double* uptime) { + struct sysinfo info; + + if (sysinfo(&info) < 0) + return UV__ERR(errno); + + *uptime = info.uptime; + return 0; +} + +int uv_resident_set_memory(size_t* rss) { + /* FIXME: read /proc/meminfo? */ + *rss = 0; + return 0; +} + +int uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) { + /* FIXME: read /proc/stat? */ + *cpu_infos = NULL; + *count = 0; + return UV_ENOSYS; +} + +uint64_t uv_get_constrained_memory(void) { + return 0; /* Memory constraints are unknown. */ +} diff --git a/external/libuv/src/unix/darwin-proctitle.c b/external/libuv/src/unix/darwin-proctitle.c new file mode 100644 index 000000000..5288083ef --- /dev/null +++ b/external/libuv/src/unix/darwin-proctitle.c @@ -0,0 +1,192 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#include "uv.h" +#include "internal.h" + +#include +#include +#include +#include +#include + +#include + +#if !TARGET_OS_IPHONE +#include "darwin-stub.h" +#endif + + +static int uv__pthread_setname_np(const char* name) { + char namebuf[64]; /* MAXTHREADNAMESIZE */ + int err; + + strncpy(namebuf, name, sizeof(namebuf) - 1); + namebuf[sizeof(namebuf) - 1] = '\0'; + + err = pthread_setname_np(namebuf); + if (err) + return UV__ERR(err); + + return 0; +} + + +int uv__set_process_title(const char* title) { +#if TARGET_OS_IPHONE + return uv__pthread_setname_np(title); +#else + CFStringRef (*pCFStringCreateWithCString)(CFAllocatorRef, + const char*, + CFStringEncoding); + CFBundleRef (*pCFBundleGetBundleWithIdentifier)(CFStringRef); + void *(*pCFBundleGetDataPointerForName)(CFBundleRef, CFStringRef); + void *(*pCFBundleGetFunctionPointerForName)(CFBundleRef, CFStringRef); + CFTypeRef (*pLSGetCurrentApplicationASN)(void); + OSStatus (*pLSSetApplicationInformationItem)(int, + CFTypeRef, + CFStringRef, + CFStringRef, + CFDictionaryRef*); + void* application_services_handle; + void* core_foundation_handle; + CFBundleRef launch_services_bundle; + CFStringRef* display_name_key; + CFDictionaryRef (*pCFBundleGetInfoDictionary)(CFBundleRef); + CFBundleRef (*pCFBundleGetMainBundle)(void); + CFDictionaryRef (*pLSApplicationCheckIn)(int, CFDictionaryRef); + void (*pLSSetApplicationLaunchServicesServerConnectionStatus)(uint64_t, + void*); + CFTypeRef asn; + int err; + + err = UV_ENOENT; + application_services_handle = dlopen("/System/Library/Frameworks/" + "ApplicationServices.framework/" + "Versions/A/ApplicationServices", + RTLD_LAZY | RTLD_LOCAL); + core_foundation_handle = dlopen("/System/Library/Frameworks/" + "CoreFoundation.framework/" + "Versions/A/CoreFoundation", + RTLD_LAZY | RTLD_LOCAL); + + if (application_services_handle == NULL || core_foundation_handle == NULL) + goto out; + + *(void **)(&pCFStringCreateWithCString) = + dlsym(core_foundation_handle, "CFStringCreateWithCString"); + *(void **)(&pCFBundleGetBundleWithIdentifier) = + dlsym(core_foundation_handle, "CFBundleGetBundleWithIdentifier"); + *(void **)(&pCFBundleGetDataPointerForName) = + dlsym(core_foundation_handle, "CFBundleGetDataPointerForName"); + *(void **)(&pCFBundleGetFunctionPointerForName) = + dlsym(core_foundation_handle, "CFBundleGetFunctionPointerForName"); + + if (pCFStringCreateWithCString == NULL || + pCFBundleGetBundleWithIdentifier == NULL || + pCFBundleGetDataPointerForName == NULL || + pCFBundleGetFunctionPointerForName == NULL) { + goto out; + } + +#define S(s) pCFStringCreateWithCString(NULL, (s), kCFStringEncodingUTF8) + + launch_services_bundle = + pCFBundleGetBundleWithIdentifier(S("com.apple.LaunchServices")); + + if (launch_services_bundle == NULL) + goto out; + + *(void **)(&pLSGetCurrentApplicationASN) = + pCFBundleGetFunctionPointerForName(launch_services_bundle, + S("_LSGetCurrentApplicationASN")); + + if (pLSGetCurrentApplicationASN == NULL) + goto out; + + *(void **)(&pLSSetApplicationInformationItem) = + pCFBundleGetFunctionPointerForName(launch_services_bundle, + S("_LSSetApplicationInformationItem")); + + if (pLSSetApplicationInformationItem == NULL) + goto out; + + display_name_key = pCFBundleGetDataPointerForName(launch_services_bundle, + S("_kLSDisplayNameKey")); + + if (display_name_key == NULL || *display_name_key == NULL) + goto out; + + *(void **)(&pCFBundleGetInfoDictionary) = dlsym(core_foundation_handle, + "CFBundleGetInfoDictionary"); + *(void **)(&pCFBundleGetMainBundle) = dlsym(core_foundation_handle, + "CFBundleGetMainBundle"); + if (pCFBundleGetInfoDictionary == NULL || pCFBundleGetMainBundle == NULL) + goto out; + + *(void **)(&pLSApplicationCheckIn) = pCFBundleGetFunctionPointerForName( + launch_services_bundle, + S("_LSApplicationCheckIn")); + + if (pLSApplicationCheckIn == NULL) + goto out; + + *(void **)(&pLSSetApplicationLaunchServicesServerConnectionStatus) = + pCFBundleGetFunctionPointerForName( + launch_services_bundle, + S("_LSSetApplicationLaunchServicesServerConnectionStatus")); + + if (pLSSetApplicationLaunchServicesServerConnectionStatus == NULL) + goto out; + + pLSSetApplicationLaunchServicesServerConnectionStatus(0, NULL); + + /* Check into process manager?! */ + pLSApplicationCheckIn(-2, + pCFBundleGetInfoDictionary(pCFBundleGetMainBundle())); + + asn = pLSGetCurrentApplicationASN(); + + err = UV_EBUSY; + if (asn == NULL) + goto out; + + err = UV_EINVAL; + if (pLSSetApplicationInformationItem(-2, /* Magic value. */ + asn, + *display_name_key, + S(title), + NULL) != noErr) { + goto out; + } + + uv__pthread_setname_np(title); /* Don't care if it fails. */ + err = 0; + +out: + if (core_foundation_handle != NULL) + dlclose(core_foundation_handle); + + if (application_services_handle != NULL) + dlclose(application_services_handle); + + return err; +#endif /* !TARGET_OS_IPHONE */ +} diff --git a/external/libuv/src/unix/darwin-stub.h b/external/libuv/src/unix/darwin-stub.h new file mode 100644 index 000000000..b93cf67c5 --- /dev/null +++ b/external/libuv/src/unix/darwin-stub.h @@ -0,0 +1,97 @@ +/* Copyright libuv 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 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. + */ + +#ifndef UV_DARWIN_STUB_H_ +#define UV_DARWIN_STUB_H_ + +#include + +struct CFArrayCallBacks; +struct CFRunLoopSourceContext; +struct FSEventStreamContext; + +typedef double CFAbsoluteTime; +typedef double CFTimeInterval; +typedef int FSEventStreamEventFlags; +typedef int OSStatus; +typedef long CFIndex; +typedef struct CFArrayCallBacks CFArrayCallBacks; +typedef struct CFRunLoopSourceContext CFRunLoopSourceContext; +typedef struct FSEventStreamContext FSEventStreamContext; +typedef uint32_t FSEventStreamCreateFlags; +typedef uint64_t FSEventStreamEventId; +typedef unsigned CFStringEncoding; +typedef void* CFAllocatorRef; +typedef void* CFArrayRef; +typedef void* CFBundleRef; +typedef void* CFDictionaryRef; +typedef void* CFRunLoopRef; +typedef void* CFRunLoopSourceRef; +typedef void* CFStringRef; +typedef void* CFTypeRef; +typedef void* FSEventStreamRef; + +typedef void (*FSEventStreamCallback)(const FSEventStreamRef, + void*, + size_t, + void*, + const FSEventStreamEventFlags*, + const FSEventStreamEventId*); + +struct CFRunLoopSourceContext { + CFIndex version; + void* info; + void* pad[7]; + void (*perform)(void*); +}; + +struct FSEventStreamContext { + CFIndex version; + void* info; + void* pad[3]; +}; + +static const CFStringEncoding kCFStringEncodingUTF8 = 0x8000100; +static const OSStatus noErr = 0; + +static const FSEventStreamEventId kFSEventStreamEventIdSinceNow = -1; + +static const int kFSEventStreamCreateFlagNoDefer = 2; +static const int kFSEventStreamCreateFlagFileEvents = 16; + +static const int kFSEventStreamEventFlagEventIdsWrapped = 8; +static const int kFSEventStreamEventFlagHistoryDone = 16; +static const int kFSEventStreamEventFlagItemChangeOwner = 0x4000; +static const int kFSEventStreamEventFlagItemCreated = 0x100; +static const int kFSEventStreamEventFlagItemFinderInfoMod = 0x2000; +static const int kFSEventStreamEventFlagItemInodeMetaMod = 0x400; +static const int kFSEventStreamEventFlagItemIsDir = 0x20000; +static const int kFSEventStreamEventFlagItemModified = 0x1000; +static const int kFSEventStreamEventFlagItemRemoved = 0x200; +static const int kFSEventStreamEventFlagItemRenamed = 0x800; +static const int kFSEventStreamEventFlagItemXattrMod = 0x8000; +static const int kFSEventStreamEventFlagKernelDropped = 4; +static const int kFSEventStreamEventFlagMount = 64; +static const int kFSEventStreamEventFlagRootChanged = 32; +static const int kFSEventStreamEventFlagUnmount = 128; +static const int kFSEventStreamEventFlagUserDropped = 2; + +#endif /* UV_DARWIN_STUB_H_ */ diff --git a/external/libuv/src/unix/darwin.c b/external/libuv/src/unix/darwin.c new file mode 100644 index 000000000..654aba26b --- /dev/null +++ b/external/libuv/src/unix/darwin.c @@ -0,0 +1,225 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#include "uv.h" +#include "internal.h" + +#include +#include +#include + +#include +#include +#include /* _NSGetExecutablePath */ +#include +#include +#include /* sysconf */ + + +int uv__platform_loop_init(uv_loop_t* loop) { + loop->cf_state = NULL; + + if (uv__kqueue_init(loop)) + return UV__ERR(errno); + + return 0; +} + + +void uv__platform_loop_delete(uv_loop_t* loop) { + uv__fsevents_loop_delete(loop); +} + + +uint64_t uv__hrtime(uv_clocktype_t type) { + static mach_timebase_info_data_t info; + + if ((ACCESS_ONCE(uint32_t, info.numer) == 0 || + ACCESS_ONCE(uint32_t, info.denom) == 0) && + mach_timebase_info(&info) != KERN_SUCCESS) + abort(); + + return mach_absolute_time() * info.numer / info.denom; +} + + +int uv_exepath(char* buffer, size_t* size) { + /* realpath(exepath) may be > PATH_MAX so double it to be on the safe side. */ + char abspath[PATH_MAX * 2 + 1]; + char exepath[PATH_MAX + 1]; + uint32_t exepath_size; + size_t abspath_size; + + if (buffer == NULL || size == NULL || *size == 0) + return UV_EINVAL; + + exepath_size = sizeof(exepath); + if (_NSGetExecutablePath(exepath, &exepath_size)) + return UV_EIO; + + if (realpath(exepath, abspath) != abspath) + return UV__ERR(errno); + + abspath_size = strlen(abspath); + if (abspath_size == 0) + return UV_EIO; + + *size -= 1; + if (*size > abspath_size) + *size = abspath_size; + + memcpy(buffer, abspath, *size); + buffer[*size] = '\0'; + + return 0; +} + + +uint64_t uv_get_free_memory(void) { + vm_statistics_data_t info; + mach_msg_type_number_t count = sizeof(info) / sizeof(integer_t); + + if (host_statistics(mach_host_self(), HOST_VM_INFO, + (host_info_t)&info, &count) != KERN_SUCCESS) { + return UV_EINVAL; /* FIXME(bnoordhuis) Translate error. */ + } + + return (uint64_t) info.free_count * sysconf(_SC_PAGESIZE); +} + + +uint64_t uv_get_total_memory(void) { + uint64_t info; + int which[] = {CTL_HW, HW_MEMSIZE}; + size_t size = sizeof(info); + + if (sysctl(which, ARRAY_SIZE(which), &info, &size, NULL, 0)) + return UV__ERR(errno); + + return (uint64_t) info; +} + + +uint64_t uv_get_constrained_memory(void) { + return 0; /* Memory constraints are unknown. */ +} + + +void uv_loadavg(double avg[3]) { + struct loadavg info; + size_t size = sizeof(info); + int which[] = {CTL_VM, VM_LOADAVG}; + + if (sysctl(which, ARRAY_SIZE(which), &info, &size, NULL, 0) < 0) return; + + avg[0] = (double) info.ldavg[0] / info.fscale; + avg[1] = (double) info.ldavg[1] / info.fscale; + avg[2] = (double) info.ldavg[2] / info.fscale; +} + + +int uv_resident_set_memory(size_t* rss) { + mach_msg_type_number_t count; + task_basic_info_data_t info; + kern_return_t err; + + count = TASK_BASIC_INFO_COUNT; + err = task_info(mach_task_self(), + TASK_BASIC_INFO, + (task_info_t) &info, + &count); + (void) &err; + /* task_info(TASK_BASIC_INFO) cannot really fail. Anything other than + * KERN_SUCCESS implies a libuv bug. + */ + assert(err == KERN_SUCCESS); + *rss = info.resident_size; + + return 0; +} + + +int uv_uptime(double* uptime) { + time_t now; + struct timeval info; + size_t size = sizeof(info); + static int which[] = {CTL_KERN, KERN_BOOTTIME}; + + if (sysctl(which, ARRAY_SIZE(which), &info, &size, NULL, 0)) + return UV__ERR(errno); + + now = time(NULL); + *uptime = now - info.tv_sec; + + return 0; +} + +int uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) { + unsigned int ticks = (unsigned int)sysconf(_SC_CLK_TCK), + multiplier = ((uint64_t)1000L / ticks); + char model[512]; + uint64_t cpuspeed; + size_t size; + unsigned int i; + natural_t numcpus; + mach_msg_type_number_t msg_type; + processor_cpu_load_info_data_t *info; + uv_cpu_info_t* cpu_info; + + size = sizeof(model); + if (sysctlbyname("machdep.cpu.brand_string", &model, &size, NULL, 0) && + sysctlbyname("hw.model", &model, &size, NULL, 0)) { + return UV__ERR(errno); + } + + size = sizeof(cpuspeed); + if (sysctlbyname("hw.cpufrequency", &cpuspeed, &size, NULL, 0)) + return UV__ERR(errno); + + if (host_processor_info(mach_host_self(), PROCESSOR_CPU_LOAD_INFO, &numcpus, + (processor_info_array_t*)&info, + &msg_type) != KERN_SUCCESS) { + return UV_EINVAL; /* FIXME(bnoordhuis) Translate error. */ + } + + *cpu_infos = uv__malloc(numcpus * sizeof(**cpu_infos)); + if (!(*cpu_infos)) { + vm_deallocate(mach_task_self(), (vm_address_t)info, msg_type); + return UV_ENOMEM; + } + + *count = numcpus; + + for (i = 0; i < numcpus; i++) { + cpu_info = &(*cpu_infos)[i]; + + cpu_info->cpu_times.user = (uint64_t)(info[i].cpu_ticks[0]) * multiplier; + cpu_info->cpu_times.nice = (uint64_t)(info[i].cpu_ticks[3]) * multiplier; + cpu_info->cpu_times.sys = (uint64_t)(info[i].cpu_ticks[1]) * multiplier; + cpu_info->cpu_times.idle = (uint64_t)(info[i].cpu_ticks[2]) * multiplier; + cpu_info->cpu_times.irq = 0; + + cpu_info->model = uv__strdup(model); + cpu_info->speed = cpuspeed/1000000; + } + vm_deallocate(mach_task_self(), (vm_address_t)info, msg_type); + + return 0; +} diff --git a/external/libuv/src/unix/dl.c b/external/libuv/src/unix/dl.c new file mode 100644 index 000000000..fc1c052bb --- /dev/null +++ b/external/libuv/src/unix/dl.c @@ -0,0 +1,80 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#include "uv.h" +#include "internal.h" + +#include +#include +#include +#include + +static int uv__dlerror(uv_lib_t* lib); + + +int uv_dlopen(const char* filename, uv_lib_t* lib) { + dlerror(); /* Reset error status. */ + lib->errmsg = NULL; + lib->handle = dlopen(filename, RTLD_LAZY); + return lib->handle ? 0 : uv__dlerror(lib); +} + + +void uv_dlclose(uv_lib_t* lib) { + uv__free(lib->errmsg); + lib->errmsg = NULL; + + if (lib->handle) { + /* Ignore errors. No good way to signal them without leaking memory. */ + dlclose(lib->handle); + lib->handle = NULL; + } +} + + +int uv_dlsym(uv_lib_t* lib, const char* name, void** ptr) { + dlerror(); /* Reset error status. */ + *ptr = dlsym(lib->handle, name); + return uv__dlerror(lib); +} + + +const char* uv_dlerror(const uv_lib_t* lib) { + return lib->errmsg ? lib->errmsg : "no error"; +} + + +static int uv__dlerror(uv_lib_t* lib) { + const char* errmsg; + + uv__free(lib->errmsg); + + errmsg = dlerror(); + + if (errmsg) { + lib->errmsg = uv__strdup(errmsg); + return -1; + } + else { + lib->errmsg = NULL; + return 0; + } +} diff --git a/external/libuv/src/unix/freebsd.c b/external/libuv/src/unix/freebsd.c new file mode 100644 index 000000000..ef77e127c --- /dev/null +++ b/external/libuv/src/unix/freebsd.c @@ -0,0 +1,315 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#include "uv.h" +#include "internal.h" + +#include +#include +#include + +#include +#include +#include +#include +#include +#include /* VM_LOADAVG */ +#include +#include +#include /* sysconf */ +#include + +#ifndef CPUSTATES +# define CPUSTATES 5U +#endif +#ifndef CP_USER +# define CP_USER 0 +# define CP_NICE 1 +# define CP_SYS 2 +# define CP_IDLE 3 +# define CP_INTR 4 +#endif + + +int uv__platform_loop_init(uv_loop_t* loop) { + return uv__kqueue_init(loop); +} + + +void uv__platform_loop_delete(uv_loop_t* loop) { +} + + +#ifdef __DragonFly__ +int uv_exepath(char* buffer, size_t* size) { + char abspath[PATH_MAX * 2 + 1]; + ssize_t abspath_size; + + if (buffer == NULL || size == NULL || *size == 0) + return UV_EINVAL; + + abspath_size = readlink("/proc/curproc/file", abspath, sizeof(abspath)); + if (abspath_size < 0) + return UV__ERR(errno); + + assert(abspath_size > 0); + *size -= 1; + + if (*size > abspath_size) + *size = abspath_size; + + memcpy(buffer, abspath, *size); + buffer[*size] = '\0'; + + return 0; +} +#else +int uv_exepath(char* buffer, size_t* size) { + char abspath[PATH_MAX * 2 + 1]; + int mib[4]; + size_t abspath_size; + + if (buffer == NULL || size == NULL || *size == 0) + return UV_EINVAL; + + mib[0] = CTL_KERN; + mib[1] = KERN_PROC; + mib[2] = KERN_PROC_PATHNAME; + mib[3] = -1; + + abspath_size = sizeof abspath; + if (sysctl(mib, ARRAY_SIZE(mib), abspath, &abspath_size, NULL, 0)) + return UV__ERR(errno); + + assert(abspath_size > 0); + abspath_size -= 1; + *size -= 1; + + if (*size > abspath_size) + *size = abspath_size; + + memcpy(buffer, abspath, *size); + buffer[*size] = '\0'; + + return 0; +} +#endif + +uint64_t uv_get_free_memory(void) { + int freecount; + size_t size = sizeof(freecount); + + if (sysctlbyname("vm.stats.vm.v_free_count", &freecount, &size, NULL, 0)) + return UV__ERR(errno); + + return (uint64_t) freecount * sysconf(_SC_PAGESIZE); + +} + + +uint64_t uv_get_total_memory(void) { + unsigned long info; + int which[] = {CTL_HW, HW_PHYSMEM}; + + size_t size = sizeof(info); + + if (sysctl(which, ARRAY_SIZE(which), &info, &size, NULL, 0)) + return UV__ERR(errno); + + return (uint64_t) info; +} + + +uint64_t uv_get_constrained_memory(void) { + return 0; /* Memory constraints are unknown. */ +} + + +void uv_loadavg(double avg[3]) { + struct loadavg info; + size_t size = sizeof(info); + int which[] = {CTL_VM, VM_LOADAVG}; + + if (sysctl(which, ARRAY_SIZE(which), &info, &size, NULL, 0) < 0) return; + + avg[0] = (double) info.ldavg[0] / info.fscale; + avg[1] = (double) info.ldavg[1] / info.fscale; + avg[2] = (double) info.ldavg[2] / info.fscale; +} + + +int uv_resident_set_memory(size_t* rss) { + struct kinfo_proc kinfo; + size_t page_size; + size_t kinfo_size; + int mib[4]; + + mib[0] = CTL_KERN; + mib[1] = KERN_PROC; + mib[2] = KERN_PROC_PID; + mib[3] = getpid(); + + kinfo_size = sizeof(kinfo); + + if (sysctl(mib, ARRAY_SIZE(mib), &kinfo, &kinfo_size, NULL, 0)) + return UV__ERR(errno); + + page_size = getpagesize(); + +#ifdef __DragonFly__ + *rss = kinfo.kp_vm_rssize * page_size; +#else + *rss = kinfo.ki_rssize * page_size; +#endif + + return 0; +} + + +int uv_uptime(double* uptime) { + int r; + struct timespec sp; + r = clock_gettime(CLOCK_MONOTONIC, &sp); + if (r) + return UV__ERR(errno); + + *uptime = sp.tv_sec; + return 0; +} + + +int uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) { + unsigned int ticks = (unsigned int)sysconf(_SC_CLK_TCK), + multiplier = ((uint64_t)1000L / ticks), cpuspeed, maxcpus, + cur = 0; + uv_cpu_info_t* cpu_info; + const char* maxcpus_key; + const char* cptimes_key; + const char* model_key; + char model[512]; + long* cp_times; + int numcpus; + size_t size; + int i; + +#if defined(__DragonFly__) + /* This is not quite correct but DragonFlyBSD doesn't seem to have anything + * comparable to kern.smp.maxcpus or kern.cp_times (kern.cp_time is a total, + * not per CPU). At least this stops uv_cpu_info() from failing completely. + */ + maxcpus_key = "hw.ncpu"; + cptimes_key = "kern.cp_time"; +#else + maxcpus_key = "kern.smp.maxcpus"; + cptimes_key = "kern.cp_times"; +#endif + +#if defined(__arm__) || defined(__aarch64__) + /* The key hw.model and hw.clockrate are not available on FreeBSD ARM. */ + model_key = "hw.machine"; + cpuspeed = 0; +#else + model_key = "hw.model"; + + size = sizeof(cpuspeed); + if (sysctlbyname("hw.clockrate", &cpuspeed, &size, NULL, 0)) + return -errno; +#endif + + size = sizeof(model); + if (sysctlbyname(model_key, &model, &size, NULL, 0)) + return UV__ERR(errno); + + size = sizeof(numcpus); + if (sysctlbyname("hw.ncpu", &numcpus, &size, NULL, 0)) + return UV__ERR(errno); + + *cpu_infos = uv__malloc(numcpus * sizeof(**cpu_infos)); + if (!(*cpu_infos)) + return UV_ENOMEM; + + *count = numcpus; + + /* kern.cp_times on FreeBSD i386 gives an array up to maxcpus instead of + * ncpu. + */ + size = sizeof(maxcpus); + if (sysctlbyname(maxcpus_key, &maxcpus, &size, NULL, 0)) { + uv__free(*cpu_infos); + return UV__ERR(errno); + } + + size = maxcpus * CPUSTATES * sizeof(long); + + cp_times = uv__malloc(size); + if (cp_times == NULL) { + uv__free(*cpu_infos); + return UV_ENOMEM; + } + + if (sysctlbyname(cptimes_key, cp_times, &size, NULL, 0)) { + uv__free(cp_times); + uv__free(*cpu_infos); + return UV__ERR(errno); + } + + for (i = 0; i < numcpus; i++) { + cpu_info = &(*cpu_infos)[i]; + + cpu_info->cpu_times.user = (uint64_t)(cp_times[CP_USER+cur]) * multiplier; + cpu_info->cpu_times.nice = (uint64_t)(cp_times[CP_NICE+cur]) * multiplier; + cpu_info->cpu_times.sys = (uint64_t)(cp_times[CP_SYS+cur]) * multiplier; + cpu_info->cpu_times.idle = (uint64_t)(cp_times[CP_IDLE+cur]) * multiplier; + cpu_info->cpu_times.irq = (uint64_t)(cp_times[CP_INTR+cur]) * multiplier; + + cpu_info->model = uv__strdup(model); + cpu_info->speed = cpuspeed; + + cur+=CPUSTATES; + } + + uv__free(cp_times); + return 0; +} + + +int uv__sendmmsg(int fd, + struct uv__mmsghdr* mmsg, + unsigned int vlen, + unsigned int flags) { +#if __FreeBSD__ >= 11 + return sendmmsg(fd, mmsg, vlen, flags); +#else + return errno = ENOSYS, -1; +#endif +} + + +int uv__recvmmsg(int fd, + struct uv__mmsghdr* mmsg, + unsigned int vlen, + unsigned int flags, + struct timespec* timeout) { +#if __FreeBSD__ >= 11 + return recvmmsg(fd, mmsg, vlen, flags, timeout); +#else + return errno = ENOSYS, -1; +#endif +} diff --git a/external/libuv/src/unix/fs.c b/external/libuv/src/unix/fs.c new file mode 100644 index 000000000..f5b2b9420 --- /dev/null +++ b/external/libuv/src/unix/fs.c @@ -0,0 +1,2092 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +/* Caveat emptor: this file deviates from the libuv convention of returning + * negated errno codes. Most uv_fs_*() functions map directly to the system + * call of the same name. For more complex wrappers, it's easier to just + * return -1 with errno set. The dispatcher in uv__fs_work() takes care of + * getting the errno to the right place (req->result or as the return value.) + */ + +#include "uv.h" +#include "internal.h" + +#include +#include +#include +#include +#include +#include /* PATH_MAX */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if defined(__DragonFly__) || \ + defined(__FreeBSD__) || \ + defined(__FreeBSD_kernel__) || \ + defined(__OpenBSD__) || \ + defined(__NetBSD__) +# define HAVE_PREADV 1 +#else +# define HAVE_PREADV 0 +#endif + +#if defined(__linux__) || defined(__sun) +# include +#endif + +#if defined(__APPLE__) +# include +#elif defined(__linux__) && !defined(FICLONE) +# include +# define FICLONE _IOW(0x94, 9, int) +#endif + +#if defined(_AIX) && !defined(_AIX71) +# include +#endif + +#if defined(__APPLE__) || \ + defined(__DragonFly__) || \ + defined(__FreeBSD__) || \ + defined(__FreeBSD_kernel__) || \ + defined(__OpenBSD__) || \ + defined(__NetBSD__) +# include +# include +#elif defined(__sun) || defined(__MVS__) || defined(__NetBSD__) || defined(__HAIKU__) +# include +#else +# include +#endif + +#if defined(_AIX) && _XOPEN_SOURCE <= 600 +extern char *mkdtemp(char *template); /* See issue #740 on AIX < 7 */ +#endif + +#define INIT(subtype) \ + do { \ + if (req == NULL) \ + return UV_EINVAL; \ + UV_REQ_INIT(req, UV_FS); \ + req->fs_type = UV_FS_ ## subtype; \ + req->result = 0; \ + req->ptr = NULL; \ + req->loop = loop; \ + req->path = NULL; \ + req->new_path = NULL; \ + req->bufs = NULL; \ + req->cb = cb; \ + } \ + while (0) + +#define PATH \ + do { \ + assert(path != NULL); \ + if (cb == NULL) { \ + req->path = path; \ + } else { \ + req->path = uv__strdup(path); \ + if (req->path == NULL) \ + return UV_ENOMEM; \ + } \ + } \ + while (0) + +#define PATH2 \ + do { \ + if (cb == NULL) { \ + req->path = path; \ + req->new_path = new_path; \ + } else { \ + size_t path_len; \ + size_t new_path_len; \ + path_len = strlen(path) + 1; \ + new_path_len = strlen(new_path) + 1; \ + req->path = uv__malloc(path_len + new_path_len); \ + if (req->path == NULL) \ + return UV_ENOMEM; \ + req->new_path = req->path + path_len; \ + memcpy((void*) req->path, path, path_len); \ + memcpy((void*) req->new_path, new_path, new_path_len); \ + } \ + } \ + while (0) + +#define POST \ + do { \ + if (cb != NULL) { \ + uv__req_register(loop, req); \ + uv__work_submit(loop, \ + &req->work_req, \ + UV__WORK_FAST_IO, \ + uv__fs_work, \ + uv__fs_done); \ + return 0; \ + } \ + else { \ + uv__fs_work(&req->work_req); \ + return req->result; \ + } \ + } \ + while (0) + + +static int uv__fs_close(int fd) { + int rc; + + rc = uv__close_nocancel(fd); + if (rc == -1) + if (errno == EINTR || errno == EINPROGRESS) + rc = 0; /* The close is in progress, not an error. */ + + return rc; +} + + +static ssize_t uv__fs_fsync(uv_fs_t* req) { +#if defined(__APPLE__) + /* Apple's fdatasync and fsync explicitly do NOT flush the drive write cache + * to the drive platters. This is in contrast to Linux's fdatasync and fsync + * which do, according to recent man pages. F_FULLFSYNC is Apple's equivalent + * for flushing buffered data to permanent storage. If F_FULLFSYNC is not + * supported by the file system we fall back to F_BARRIERFSYNC or fsync(). + * This is the same approach taken by sqlite, except sqlite does not issue + * an F_BARRIERFSYNC call. + */ + int r; + + r = fcntl(req->file, F_FULLFSYNC); + if (r != 0) + r = fcntl(req->file, 85 /* F_BARRIERFSYNC */); /* fsync + barrier */ + if (r != 0) + r = fsync(req->file); + return r; +#else + return fsync(req->file); +#endif +} + + +static ssize_t uv__fs_fdatasync(uv_fs_t* req) { +#if defined(__linux__) || defined(__sun) || defined(__NetBSD__) + return fdatasync(req->file); +#elif defined(__APPLE__) + /* See the comment in uv__fs_fsync. */ + return uv__fs_fsync(req); +#else + return fsync(req->file); +#endif +} + + +UV_UNUSED(static struct timespec uv__fs_to_timespec(double time)) { + struct timespec ts; + ts.tv_sec = time; + ts.tv_nsec = (uint64_t)(time * 1000000) % 1000000 * 1000; + return ts; +} + +UV_UNUSED(static struct timeval uv__fs_to_timeval(double time)) { + struct timeval tv; + tv.tv_sec = time; + tv.tv_usec = (uint64_t)(time * 1000000) % 1000000; + return tv; +} + +static ssize_t uv__fs_futime(uv_fs_t* req) { +#if defined(__linux__) \ + || defined(_AIX71) \ + || defined(__HAIKU__) + /* utimesat() has nanosecond resolution but we stick to microseconds + * for the sake of consistency with other platforms. + */ + struct timespec ts[2]; + ts[0] = uv__fs_to_timespec(req->atime); + ts[1] = uv__fs_to_timespec(req->mtime); +#if defined(__ANDROID_API__) && __ANDROID_API__ < 21 + return utimensat(req->file, NULL, ts, 0); +#else + return futimens(req->file, ts); +#endif +#elif defined(__APPLE__) \ + || defined(__DragonFly__) \ + || defined(__FreeBSD__) \ + || defined(__FreeBSD_kernel__) \ + || defined(__NetBSD__) \ + || defined(__OpenBSD__) \ + || defined(__sun) + struct timeval tv[2]; + tv[0] = uv__fs_to_timeval(req->atime); + tv[1] = uv__fs_to_timeval(req->mtime); +# if defined(__sun) + return futimesat(req->file, NULL, tv); +# else + return futimes(req->file, tv); +# endif +#elif defined(__MVS__) + attrib_t atr; + memset(&atr, 0, sizeof(atr)); + atr.att_mtimechg = 1; + atr.att_atimechg = 1; + atr.att_mtime = req->mtime; + atr.att_atime = req->atime; + return __fchattr(req->file, &atr, sizeof(atr)); +#else + errno = ENOSYS; + return -1; +#endif +} + + +static ssize_t uv__fs_mkdtemp(uv_fs_t* req) { + return mkdtemp((char*) req->path) ? 0 : -1; +} + + +static int (*uv__mkostemp)(char*, int); + + +static void uv__mkostemp_initonce(void) { + /* z/os doesn't have RTLD_DEFAULT but that's okay + * because it doesn't have mkostemp(O_CLOEXEC) either. + */ +#ifdef RTLD_DEFAULT + uv__mkostemp = (int (*)(char*, int)) dlsym(RTLD_DEFAULT, "mkostemp"); + + /* We don't care about errors, but we do want to clean them up. + * If there has been no error, then dlerror() will just return + * NULL. + */ + dlerror(); +#endif /* RTLD_DEFAULT */ +} + + +static int uv__fs_mkstemp(uv_fs_t* req) { + static uv_once_t once = UV_ONCE_INIT; + int r; +#ifdef O_CLOEXEC + static int no_cloexec_support; +#endif + static const char pattern[] = "XXXXXX"; + static const size_t pattern_size = sizeof(pattern) - 1; + char* path; + size_t path_length; + + path = (char*) req->path; + path_length = strlen(path); + + /* EINVAL can be returned for 2 reasons: + 1. The template's last 6 characters were not XXXXXX + 2. open() didn't support O_CLOEXEC + We want to avoid going to the fallback path in case + of 1, so it's manually checked before. */ + if (path_length < pattern_size || + strcmp(path + path_length - pattern_size, pattern)) { + errno = EINVAL; + return -1; + } + + uv_once(&once, uv__mkostemp_initonce); + +#ifdef O_CLOEXEC + if (no_cloexec_support == 0 && uv__mkostemp != NULL) { + r = uv__mkostemp(path, O_CLOEXEC); + + if (r >= 0) + return r; + + /* If mkostemp() returns EINVAL, it means the kernel doesn't + support O_CLOEXEC, so we just fallback to mkstemp() below. */ + if (errno != EINVAL) + return r; + + /* We set the static variable so that next calls don't even + try to use mkostemp. */ + no_cloexec_support = 1; + } +#endif /* O_CLOEXEC */ + + if (req->cb != NULL) + uv_rwlock_rdlock(&req->loop->cloexec_lock); + + r = mkstemp(path); + + /* In case of failure `uv__cloexec` will leave error in `errno`, + * so it is enough to just set `r` to `-1`. + */ + if (r >= 0 && uv__cloexec(r, 1) != 0) { + r = uv__close(r); + if (r != 0) + abort(); + r = -1; + } + + if (req->cb != NULL) + uv_rwlock_rdunlock(&req->loop->cloexec_lock); + + return r; +} + + +static ssize_t uv__fs_open(uv_fs_t* req) { +#ifdef O_CLOEXEC + return open(req->path, req->flags | O_CLOEXEC, req->mode); +#else /* O_CLOEXEC */ + int r; + + if (req->cb != NULL) + uv_rwlock_rdlock(&req->loop->cloexec_lock); + + r = open(req->path, req->flags, req->mode); + + /* In case of failure `uv__cloexec` will leave error in `errno`, + * so it is enough to just set `r` to `-1`. + */ + if (r >= 0 && uv__cloexec(r, 1) != 0) { + r = uv__close(r); + if (r != 0) + abort(); + r = -1; + } + + if (req->cb != NULL) + uv_rwlock_rdunlock(&req->loop->cloexec_lock); + + return r; +#endif /* O_CLOEXEC */ +} + + +#if !HAVE_PREADV +static ssize_t uv__fs_preadv(uv_file fd, + uv_buf_t* bufs, + unsigned int nbufs, + off_t off) { + uv_buf_t* buf; + uv_buf_t* end; + ssize_t result; + ssize_t rc; + size_t pos; + + assert(nbufs > 0); + + result = 0; + pos = 0; + buf = bufs + 0; + end = bufs + nbufs; + + for (;;) { + do + rc = pread(fd, buf->base + pos, buf->len - pos, off + result); + while (rc == -1 && errno == EINTR); + + if (rc == 0) + break; + + if (rc == -1 && result == 0) + return UV__ERR(errno); + + if (rc == -1) + break; /* We read some data so return that, ignore the error. */ + + pos += rc; + result += rc; + + if (pos < buf->len) + continue; + + pos = 0; + buf += 1; + + if (buf == end) + break; + } + + return result; +} +#endif + + +static ssize_t uv__fs_read(uv_fs_t* req) { +#if defined(__linux__) + static int no_preadv; +#endif + unsigned int iovmax; + ssize_t result; + + iovmax = uv__getiovmax(); + if (req->nbufs > iovmax) + req->nbufs = iovmax; + + if (req->off < 0) { + if (req->nbufs == 1) + result = read(req->file, req->bufs[0].base, req->bufs[0].len); + else + result = readv(req->file, (struct iovec*) req->bufs, req->nbufs); + } else { + if (req->nbufs == 1) { + result = pread(req->file, req->bufs[0].base, req->bufs[0].len, req->off); + goto done; + } + +#if HAVE_PREADV + result = preadv(req->file, (struct iovec*) req->bufs, req->nbufs, req->off); +#else +# if defined(__linux__) + if (no_preadv) retry: +# endif + { + result = uv__fs_preadv(req->file, req->bufs, req->nbufs, req->off); + } +# if defined(__linux__) + else { + result = uv__preadv(req->file, + (struct iovec*)req->bufs, + req->nbufs, + req->off); + if (result == -1 && errno == ENOSYS) { + no_preadv = 1; + goto retry; + } + } +# endif +#endif + } + +done: + /* Early cleanup of bufs allocation, since we're done with it. */ + if (req->bufs != req->bufsml) + uv__free(req->bufs); + + req->bufs = NULL; + req->nbufs = 0; + +#ifdef __PASE__ + /* PASE returns EOPNOTSUPP when reading a directory, convert to EISDIR */ + if (result == -1 && errno == EOPNOTSUPP) { + struct stat buf; + ssize_t rc; + rc = fstat(req->file, &buf); + if (rc == 0 && S_ISDIR(buf.st_mode)) { + errno = EISDIR; + } + } +#endif + + return result; +} + + +#if defined(__APPLE__) && !defined(MAC_OS_X_VERSION_10_8) +#define UV_CONST_DIRENT uv__dirent_t +#else +#define UV_CONST_DIRENT const uv__dirent_t +#endif + + +static int uv__fs_scandir_filter(UV_CONST_DIRENT* dent) { + return strcmp(dent->d_name, ".") != 0 && strcmp(dent->d_name, "..") != 0; +} + + +static int uv__fs_scandir_sort(UV_CONST_DIRENT** a, UV_CONST_DIRENT** b) { + return strcmp((*a)->d_name, (*b)->d_name); +} + + +static ssize_t uv__fs_scandir(uv_fs_t* req) { + uv__dirent_t** dents; + int n; + + dents = NULL; + n = scandir(req->path, &dents, uv__fs_scandir_filter, uv__fs_scandir_sort); + + /* NOTE: We will use nbufs as an index field */ + req->nbufs = 0; + + if (n == 0) { + /* OS X still needs to deallocate some memory. + * Memory was allocated using the system allocator, so use free() here. + */ + free(dents); + dents = NULL; + } else if (n == -1) { + return n; + } + + req->ptr = dents; + + return n; +} + +static int uv__fs_opendir(uv_fs_t* req) { + uv_dir_t* dir; + + dir = uv__malloc(sizeof(*dir)); + if (dir == NULL) + goto error; + + dir->dir = opendir(req->path); + if (dir->dir == NULL) + goto error; + + req->ptr = dir; + return 0; + +error: + uv__free(dir); + req->ptr = NULL; + return -1; +} + +static int uv__fs_readdir(uv_fs_t* req) { + uv_dir_t* dir; + uv_dirent_t* dirent; + struct dirent* res; + unsigned int dirent_idx; + unsigned int i; + + dir = req->ptr; + dirent_idx = 0; + + while (dirent_idx < dir->nentries) { + /* readdir() returns NULL on end of directory, as well as on error. errno + is used to differentiate between the two conditions. */ + errno = 0; + res = readdir(dir->dir); + + if (res == NULL) { + if (errno != 0) + goto error; + break; + } + + if (strcmp(res->d_name, ".") == 0 || strcmp(res->d_name, "..") == 0) + continue; + + dirent = &dir->dirents[dirent_idx]; + dirent->name = uv__strdup(res->d_name); + + if (dirent->name == NULL) + goto error; + + dirent->type = uv__fs_get_dirent_type(res); + ++dirent_idx; + } + + return dirent_idx; + +error: + for (i = 0; i < dirent_idx; ++i) { + uv__free((char*) dir->dirents[i].name); + dir->dirents[i].name = NULL; + } + + return -1; +} + +static int uv__fs_closedir(uv_fs_t* req) { + uv_dir_t* dir; + + dir = req->ptr; + + if (dir->dir != NULL) { + closedir(dir->dir); + dir->dir = NULL; + } + + uv__free(req->ptr); + req->ptr = NULL; + return 0; +} + +static int uv__fs_statfs(uv_fs_t* req) { + uv_statfs_t* stat_fs; +#if defined(__sun) || defined(__MVS__) || defined(__NetBSD__) || defined(__HAIKU__) + struct statvfs buf; + + if (0 != statvfs(req->path, &buf)) +#else + struct statfs buf; + + if (0 != statfs(req->path, &buf)) +#endif /* defined(__sun) */ + return -1; + + stat_fs = uv__malloc(sizeof(*stat_fs)); + if (stat_fs == NULL) { + errno = ENOMEM; + return -1; + } + +#if defined(__sun) || defined(__MVS__) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__HAIKU__) + stat_fs->f_type = 0; /* f_type is not supported. */ +#else + stat_fs->f_type = buf.f_type; +#endif + stat_fs->f_bsize = buf.f_bsize; + stat_fs->f_blocks = buf.f_blocks; + stat_fs->f_bfree = buf.f_bfree; + stat_fs->f_bavail = buf.f_bavail; + stat_fs->f_files = buf.f_files; + stat_fs->f_ffree = buf.f_ffree; + req->ptr = stat_fs; + return 0; +} + +static ssize_t uv__fs_pathmax_size(const char* path) { + ssize_t pathmax; + + pathmax = pathconf(path, _PC_PATH_MAX); + + if (pathmax == -1) + pathmax = UV__PATH_MAX; + + return pathmax; +} + +static ssize_t uv__fs_readlink(uv_fs_t* req) { + ssize_t maxlen; + ssize_t len; + char* buf; + +#if defined(_POSIX_PATH_MAX) || defined(PATH_MAX) + maxlen = uv__fs_pathmax_size(req->path); +#else + /* We may not have a real PATH_MAX. Read size of link. */ + struct stat st; + int ret; + ret = lstat(req->path, &st); + if (ret != 0) + return -1; + if (!S_ISLNK(st.st_mode)) { + errno = EINVAL; + return -1; + } + + maxlen = st.st_size; + + /* According to readlink(2) lstat can report st_size == 0 + for some symlinks, such as those in /proc or /sys. */ + if (maxlen == 0) + maxlen = uv__fs_pathmax_size(req->path); +#endif + + buf = uv__malloc(maxlen); + + if (buf == NULL) { + errno = ENOMEM; + return -1; + } + +#if defined(__MVS__) + len = os390_readlink(req->path, buf, maxlen); +#else + len = readlink(req->path, buf, maxlen); +#endif + + if (len == -1) { + uv__free(buf); + return -1; + } + + /* Uncommon case: resize to make room for the trailing nul byte. */ + if (len == maxlen) { + buf = uv__reallocf(buf, len + 1); + + if (buf == NULL) + return -1; + } + + buf[len] = '\0'; + req->ptr = buf; + + return 0; +} + +static ssize_t uv__fs_realpath(uv_fs_t* req) { + char* buf; + +#if defined(_POSIX_VERSION) && _POSIX_VERSION >= 200809L + buf = realpath(req->path, NULL); + if (buf == NULL) + return -1; +#else + ssize_t len; + + len = uv__fs_pathmax_size(req->path); + buf = uv__malloc(len + 1); + + if (buf == NULL) { + errno = ENOMEM; + return -1; + } + + if (realpath(req->path, buf) == NULL) { + uv__free(buf); + return -1; + } +#endif + + req->ptr = buf; + + return 0; +} + +static ssize_t uv__fs_sendfile_emul(uv_fs_t* req) { + struct pollfd pfd; + int use_pread; + off_t offset; + ssize_t nsent; + ssize_t nread; + ssize_t nwritten; + size_t buflen; + size_t len; + ssize_t n; + int in_fd; + int out_fd; + char buf[8192]; + + len = req->bufsml[0].len; + in_fd = req->flags; + out_fd = req->file; + offset = req->off; + use_pread = 1; + + /* Here are the rules regarding errors: + * + * 1. Read errors are reported only if nsent==0, otherwise we return nsent. + * The user needs to know that some data has already been sent, to stop + * them from sending it twice. + * + * 2. Write errors are always reported. Write errors are bad because they + * mean data loss: we've read data but now we can't write it out. + * + * We try to use pread() and fall back to regular read() if the source fd + * doesn't support positional reads, for example when it's a pipe fd. + * + * If we get EAGAIN when writing to the target fd, we poll() on it until + * it becomes writable again. + * + * FIXME: If we get a write error when use_pread==1, it should be safe to + * return the number of sent bytes instead of an error because pread() + * is, in theory, idempotent. However, special files in /dev or /proc + * may support pread() but not necessarily return the same data on + * successive reads. + * + * FIXME: There is no way now to signal that we managed to send *some* data + * before a write error. + */ + for (nsent = 0; (size_t) nsent < len; ) { + buflen = len - nsent; + + if (buflen > sizeof(buf)) + buflen = sizeof(buf); + + do + if (use_pread) + nread = pread(in_fd, buf, buflen, offset); + else + nread = read(in_fd, buf, buflen); + while (nread == -1 && errno == EINTR); + + if (nread == 0) + goto out; + + if (nread == -1) { + if (use_pread && nsent == 0 && (errno == EIO || errno == ESPIPE)) { + use_pread = 0; + continue; + } + + if (nsent == 0) + nsent = -1; + + goto out; + } + + for (nwritten = 0; nwritten < nread; ) { + do + n = write(out_fd, buf + nwritten, nread - nwritten); + while (n == -1 && errno == EINTR); + + if (n != -1) { + nwritten += n; + continue; + } + + if (errno != EAGAIN && errno != EWOULDBLOCK) { + nsent = -1; + goto out; + } + + pfd.fd = out_fd; + pfd.events = POLLOUT; + pfd.revents = 0; + + do + n = poll(&pfd, 1, -1); + while (n == -1 && errno == EINTR); + + if (n == -1 || (pfd.revents & ~POLLOUT) != 0) { + errno = EIO; + nsent = -1; + goto out; + } + } + + offset += nread; + nsent += nread; + } + +out: + if (nsent != -1) + req->off = offset; + + return nsent; +} + + +static ssize_t uv__fs_sendfile(uv_fs_t* req) { + int in_fd; + int out_fd; + + in_fd = req->flags; + out_fd = req->file; + +#if defined(__linux__) || defined(__sun) + { + off_t off; + ssize_t r; + + off = req->off; + r = sendfile(out_fd, in_fd, &off, req->bufsml[0].len); + + /* sendfile() on SunOS returns EINVAL if the target fd is not a socket but + * it still writes out data. Fortunately, we can detect it by checking if + * the offset has been updated. + */ + if (r != -1 || off > req->off) { + r = off - req->off; + req->off = off; + return r; + } + + if (errno == EINVAL || + errno == EIO || + errno == ENOTSOCK || + errno == EXDEV) { + errno = 0; + return uv__fs_sendfile_emul(req); + } + + return -1; + } +#elif defined(__APPLE__) || \ + defined(__DragonFly__) || \ + defined(__FreeBSD__) || \ + defined(__FreeBSD_kernel__) + { + off_t len; + ssize_t r; + + /* sendfile() on FreeBSD and Darwin returns EAGAIN if the target fd is in + * non-blocking mode and not all data could be written. If a non-zero + * number of bytes have been sent, we don't consider it an error. + */ + +#if defined(__FreeBSD__) || defined(__DragonFly__) + len = 0; + r = sendfile(in_fd, out_fd, req->off, req->bufsml[0].len, NULL, &len, 0); +#elif defined(__FreeBSD_kernel__) + len = 0; + r = bsd_sendfile(in_fd, + out_fd, + req->off, + req->bufsml[0].len, + NULL, + &len, + 0); +#else + /* The darwin sendfile takes len as an input for the length to send, + * so make sure to initialize it with the caller's value. */ + len = req->bufsml[0].len; + r = sendfile(in_fd, out_fd, req->off, &len, NULL, 0); +#endif + + /* + * The man page for sendfile(2) on DragonFly states that `len` contains + * a meaningful value ONLY in case of EAGAIN and EINTR. + * Nothing is said about it's value in case of other errors, so better + * not depend on the potential wrong assumption that is was not modified + * by the syscall. + */ + if (r == 0 || ((errno == EAGAIN || errno == EINTR) && len != 0)) { + req->off += len; + return (ssize_t) len; + } + + if (errno == EINVAL || + errno == EIO || + errno == ENOTSOCK || + errno == EXDEV) { + errno = 0; + return uv__fs_sendfile_emul(req); + } + + return -1; + } +#else + /* Squelch compiler warnings. */ + (void) &in_fd; + (void) &out_fd; + + return uv__fs_sendfile_emul(req); +#endif +} + + +static ssize_t uv__fs_utime(uv_fs_t* req) { +#if defined(__linux__) \ + || defined(_AIX71) \ + || defined(__sun) \ + || defined(__HAIKU__) + /* utimesat() has nanosecond resolution but we stick to microseconds + * for the sake of consistency with other platforms. + */ + struct timespec ts[2]; + ts[0] = uv__fs_to_timespec(req->atime); + ts[1] = uv__fs_to_timespec(req->mtime); + return utimensat(AT_FDCWD, req->path, ts, 0); +#elif defined(__APPLE__) \ + || defined(__DragonFly__) \ + || defined(__FreeBSD__) \ + || defined(__FreeBSD_kernel__) \ + || defined(__NetBSD__) \ + || defined(__OpenBSD__) + struct timeval tv[2]; + tv[0] = uv__fs_to_timeval(req->atime); + tv[1] = uv__fs_to_timeval(req->mtime); + return utimes(req->path, tv); +#elif defined(_AIX) \ + && !defined(_AIX71) + struct utimbuf buf; + buf.actime = req->atime; + buf.modtime = req->mtime; + return utime(req->path, &buf); +#elif defined(__MVS__) + attrib_t atr; + memset(&atr, 0, sizeof(atr)); + atr.att_mtimechg = 1; + atr.att_atimechg = 1; + atr.att_mtime = req->mtime; + atr.att_atime = req->atime; + return __lchattr((char*) req->path, &atr, sizeof(atr)); +#else + errno = ENOSYS; + return -1; +#endif +} + + +static ssize_t uv__fs_lutime(uv_fs_t* req) { +#if defined(__linux__) || \ + defined(_AIX71) || \ + defined(__sun) || \ + defined(__HAIKU__) + struct timespec ts[2]; + ts[0] = uv__fs_to_timespec(req->atime); + ts[1] = uv__fs_to_timespec(req->mtime); + return utimensat(AT_FDCWD, req->path, ts, AT_SYMLINK_NOFOLLOW); +#elif defined(__APPLE__) || \ + defined(__DragonFly__) || \ + defined(__FreeBSD__) || \ + defined(__FreeBSD_kernel__) || \ + defined(__NetBSD__) + struct timeval tv[2]; + tv[0] = uv__fs_to_timeval(req->atime); + tv[1] = uv__fs_to_timeval(req->mtime); + return lutimes(req->path, tv); +#else + errno = ENOSYS; + return -1; +#endif +} + + +static ssize_t uv__fs_write(uv_fs_t* req) { +#if defined(__linux__) + static int no_pwritev; +#endif + ssize_t r; + + /* Serialize writes on OS X, concurrent write() and pwrite() calls result in + * data loss. We can't use a per-file descriptor lock, the descriptor may be + * a dup(). + */ +#if defined(__APPLE__) + static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; + + if (pthread_mutex_lock(&lock)) + abort(); +#endif + + if (req->off < 0) { + if (req->nbufs == 1) + r = write(req->file, req->bufs[0].base, req->bufs[0].len); + else + r = writev(req->file, (struct iovec*) req->bufs, req->nbufs); + } else { + if (req->nbufs == 1) { + r = pwrite(req->file, req->bufs[0].base, req->bufs[0].len, req->off); + goto done; + } +#if HAVE_PREADV + r = pwritev(req->file, (struct iovec*) req->bufs, req->nbufs, req->off); +#else +# if defined(__linux__) + if (no_pwritev) retry: +# endif + { + r = pwrite(req->file, req->bufs[0].base, req->bufs[0].len, req->off); + } +# if defined(__linux__) + else { + r = uv__pwritev(req->file, + (struct iovec*) req->bufs, + req->nbufs, + req->off); + if (r == -1 && errno == ENOSYS) { + no_pwritev = 1; + goto retry; + } + } +# endif +#endif + } + +done: +#if defined(__APPLE__) + if (pthread_mutex_unlock(&lock)) + abort(); +#endif + + return r; +} + +static ssize_t uv__fs_copyfile(uv_fs_t* req) { + uv_fs_t fs_req; + uv_file srcfd; + uv_file dstfd; + struct stat src_statsbuf; + struct stat dst_statsbuf; + int dst_flags; + int result; + int err; + off_t bytes_to_send; + off_t in_offset; + off_t bytes_written; + size_t bytes_chunk; + + dstfd = -1; + err = 0; + + /* Open the source file. */ + srcfd = uv_fs_open(NULL, &fs_req, req->path, O_RDONLY, 0, NULL); + uv_fs_req_cleanup(&fs_req); + + if (srcfd < 0) + return srcfd; + + /* Get the source file's mode. */ + if (fstat(srcfd, &src_statsbuf)) { + err = UV__ERR(errno); + goto out; + } + + dst_flags = O_WRONLY | O_CREAT | O_TRUNC; + + if (req->flags & UV_FS_COPYFILE_EXCL) + dst_flags |= O_EXCL; + + /* Open the destination file. */ + dstfd = uv_fs_open(NULL, + &fs_req, + req->new_path, + dst_flags, + src_statsbuf.st_mode, + NULL); + uv_fs_req_cleanup(&fs_req); + + if (dstfd < 0) { + err = dstfd; + goto out; + } + + /* Get the destination file's mode. */ + if (fstat(dstfd, &dst_statsbuf)) { + err = UV__ERR(errno); + goto out; + } + + /* Check if srcfd and dstfd refer to the same file */ + if (src_statsbuf.st_dev == dst_statsbuf.st_dev && + src_statsbuf.st_ino == dst_statsbuf.st_ino) { + goto out; + } + + if (fchmod(dstfd, src_statsbuf.st_mode) == -1) { + err = UV__ERR(errno); +#ifdef __linux__ + if (err != UV_EPERM) + goto out; + + { + struct statfs s; + + /* fchmod() on CIFS shares always fails with EPERM unless the share is + * mounted with "noperm". As fchmod() is a meaningless operation on such + * shares anyway, detect that condition and squelch the error. + */ + if (fstatfs(dstfd, &s) == -1) + goto out; + + if (s.f_type != /* CIFS */ 0xFF534D42u) + goto out; + } + + err = 0; +#else /* !__linux__ */ + goto out; +#endif /* !__linux__ */ + } + +#ifdef FICLONE + if (req->flags & UV_FS_COPYFILE_FICLONE || + req->flags & UV_FS_COPYFILE_FICLONE_FORCE) { + if (ioctl(dstfd, FICLONE, srcfd) == 0) { + /* ioctl() with FICLONE succeeded. */ + goto out; + } + /* If an error occurred and force was set, return the error to the caller; + * fall back to sendfile() when force was not set. */ + if (req->flags & UV_FS_COPYFILE_FICLONE_FORCE) { + err = UV__ERR(errno); + goto out; + } + } +#else + if (req->flags & UV_FS_COPYFILE_FICLONE_FORCE) { + err = UV_ENOSYS; + goto out; + } +#endif + + bytes_to_send = src_statsbuf.st_size; + in_offset = 0; + while (bytes_to_send != 0) { + bytes_chunk = SSIZE_MAX; + if (bytes_to_send < (off_t) bytes_chunk) + bytes_chunk = bytes_to_send; + uv_fs_sendfile(NULL, &fs_req, dstfd, srcfd, in_offset, bytes_chunk, NULL); + bytes_written = fs_req.result; + uv_fs_req_cleanup(&fs_req); + + if (bytes_written < 0) { + err = bytes_written; + break; + } + + bytes_to_send -= bytes_written; + in_offset += bytes_written; + } + +out: + if (err < 0) + result = err; + else + result = 0; + + /* Close the source file. */ + err = uv__close_nocheckstdio(srcfd); + + /* Don't overwrite any existing errors. */ + if (err != 0 && result == 0) + result = err; + + /* Close the destination file if it is open. */ + if (dstfd >= 0) { + err = uv__close_nocheckstdio(dstfd); + + /* Don't overwrite any existing errors. */ + if (err != 0 && result == 0) + result = err; + + /* Remove the destination file if something went wrong. */ + if (result != 0) { + uv_fs_unlink(NULL, &fs_req, req->new_path, NULL); + /* Ignore the unlink return value, as an error already happened. */ + uv_fs_req_cleanup(&fs_req); + } + } + + if (result == 0) + return 0; + + errno = UV__ERR(result); + return -1; +} + +static void uv__to_stat(struct stat* src, uv_stat_t* dst) { + dst->st_dev = src->st_dev; + dst->st_mode = src->st_mode; + dst->st_nlink = src->st_nlink; + dst->st_uid = src->st_uid; + dst->st_gid = src->st_gid; + dst->st_rdev = src->st_rdev; + dst->st_ino = src->st_ino; + dst->st_size = src->st_size; + dst->st_blksize = src->st_blksize; + dst->st_blocks = src->st_blocks; + +#if defined(__APPLE__) + dst->st_atim.tv_sec = src->st_atimespec.tv_sec; + dst->st_atim.tv_nsec = src->st_atimespec.tv_nsec; + dst->st_mtim.tv_sec = src->st_mtimespec.tv_sec; + dst->st_mtim.tv_nsec = src->st_mtimespec.tv_nsec; + dst->st_ctim.tv_sec = src->st_ctimespec.tv_sec; + dst->st_ctim.tv_nsec = src->st_ctimespec.tv_nsec; + dst->st_birthtim.tv_sec = src->st_birthtimespec.tv_sec; + dst->st_birthtim.tv_nsec = src->st_birthtimespec.tv_nsec; + dst->st_flags = src->st_flags; + dst->st_gen = src->st_gen; +#elif defined(__ANDROID__) + dst->st_atim.tv_sec = src->st_atime; + dst->st_atim.tv_nsec = src->st_atimensec; + dst->st_mtim.tv_sec = src->st_mtime; + dst->st_mtim.tv_nsec = src->st_mtimensec; + dst->st_ctim.tv_sec = src->st_ctime; + dst->st_ctim.tv_nsec = src->st_ctimensec; + dst->st_birthtim.tv_sec = src->st_ctime; + dst->st_birthtim.tv_nsec = src->st_ctimensec; + dst->st_flags = 0; + dst->st_gen = 0; +#elif !defined(_AIX) && ( \ + defined(__DragonFly__) || \ + defined(__FreeBSD__) || \ + defined(__OpenBSD__) || \ + defined(__NetBSD__) || \ + defined(_GNU_SOURCE) || \ + defined(_BSD_SOURCE) || \ + defined(_SVID_SOURCE) || \ + defined(_XOPEN_SOURCE) || \ + defined(_DEFAULT_SOURCE)) + dst->st_atim.tv_sec = src->st_atim.tv_sec; + dst->st_atim.tv_nsec = src->st_atim.tv_nsec; + dst->st_mtim.tv_sec = src->st_mtim.tv_sec; + dst->st_mtim.tv_nsec = src->st_mtim.tv_nsec; + dst->st_ctim.tv_sec = src->st_ctim.tv_sec; + dst->st_ctim.tv_nsec = src->st_ctim.tv_nsec; +# if defined(__FreeBSD__) || \ + defined(__NetBSD__) + dst->st_birthtim.tv_sec = src->st_birthtim.tv_sec; + dst->st_birthtim.tv_nsec = src->st_birthtim.tv_nsec; + dst->st_flags = src->st_flags; + dst->st_gen = src->st_gen; +# else + dst->st_birthtim.tv_sec = src->st_ctim.tv_sec; + dst->st_birthtim.tv_nsec = src->st_ctim.tv_nsec; + dst->st_flags = 0; + dst->st_gen = 0; +# endif +#else + dst->st_atim.tv_sec = src->st_atime; + dst->st_atim.tv_nsec = 0; + dst->st_mtim.tv_sec = src->st_mtime; + dst->st_mtim.tv_nsec = 0; + dst->st_ctim.tv_sec = src->st_ctime; + dst->st_ctim.tv_nsec = 0; + dst->st_birthtim.tv_sec = src->st_ctime; + dst->st_birthtim.tv_nsec = 0; + dst->st_flags = 0; + dst->st_gen = 0; +#endif +} + + +static int uv__fs_statx(int fd, + const char* path, + int is_fstat, + int is_lstat, + uv_stat_t* buf) { + STATIC_ASSERT(UV_ENOSYS != -1); +#ifdef __linux__ + static int no_statx; + struct uv__statx statxbuf; + int dirfd; + int flags; + int mode; + int rc; + + if (no_statx) + return UV_ENOSYS; + + dirfd = AT_FDCWD; + flags = 0; /* AT_STATX_SYNC_AS_STAT */ + mode = 0xFFF; /* STATX_BASIC_STATS + STATX_BTIME */ + + if (is_fstat) { + dirfd = fd; + flags |= 0x1000; /* AT_EMPTY_PATH */ + } + + if (is_lstat) + flags |= AT_SYMLINK_NOFOLLOW; + + rc = uv__statx(dirfd, path, flags, mode, &statxbuf); + + switch (rc) { + case 0: + break; + case -1: + /* EPERM happens when a seccomp filter rejects the system call. + * Has been observed with libseccomp < 2.3.3 and docker < 18.04. + */ + if (errno != EINVAL && errno != EPERM && errno != ENOSYS) + return -1; + /* Fall through. */ + default: + /* Normally on success, zero is returned and On error, -1 is returned. + * Observed on S390 RHEL running in a docker container with statx not + * implemented, rc might return 1 with 0 set as the error code in which + * case we return ENOSYS. + */ + no_statx = 1; + return UV_ENOSYS; + } + + buf->st_dev = 256 * statxbuf.stx_dev_major + statxbuf.stx_dev_minor; + buf->st_mode = statxbuf.stx_mode; + buf->st_nlink = statxbuf.stx_nlink; + buf->st_uid = statxbuf.stx_uid; + buf->st_gid = statxbuf.stx_gid; + buf->st_rdev = statxbuf.stx_rdev_major; + buf->st_ino = statxbuf.stx_ino; + buf->st_size = statxbuf.stx_size; + buf->st_blksize = statxbuf.stx_blksize; + buf->st_blocks = statxbuf.stx_blocks; + buf->st_atim.tv_sec = statxbuf.stx_atime.tv_sec; + buf->st_atim.tv_nsec = statxbuf.stx_atime.tv_nsec; + buf->st_mtim.tv_sec = statxbuf.stx_mtime.tv_sec; + buf->st_mtim.tv_nsec = statxbuf.stx_mtime.tv_nsec; + buf->st_ctim.tv_sec = statxbuf.stx_ctime.tv_sec; + buf->st_ctim.tv_nsec = statxbuf.stx_ctime.tv_nsec; + buf->st_birthtim.tv_sec = statxbuf.stx_btime.tv_sec; + buf->st_birthtim.tv_nsec = statxbuf.stx_btime.tv_nsec; + buf->st_flags = 0; + buf->st_gen = 0; + + return 0; +#else + return UV_ENOSYS; +#endif /* __linux__ */ +} + + +static int uv__fs_stat(const char *path, uv_stat_t *buf) { + struct stat pbuf; + int ret; + + ret = uv__fs_statx(-1, path, /* is_fstat */ 0, /* is_lstat */ 0, buf); + if (ret != UV_ENOSYS) + return ret; + + ret = stat(path, &pbuf); + if (ret == 0) + uv__to_stat(&pbuf, buf); + + return ret; +} + + +static int uv__fs_lstat(const char *path, uv_stat_t *buf) { + struct stat pbuf; + int ret; + + ret = uv__fs_statx(-1, path, /* is_fstat */ 0, /* is_lstat */ 1, buf); + if (ret != UV_ENOSYS) + return ret; + + ret = lstat(path, &pbuf); + if (ret == 0) + uv__to_stat(&pbuf, buf); + + return ret; +} + + +static int uv__fs_fstat(int fd, uv_stat_t *buf) { + struct stat pbuf; + int ret; + + ret = uv__fs_statx(fd, "", /* is_fstat */ 1, /* is_lstat */ 0, buf); + if (ret != UV_ENOSYS) + return ret; + + ret = fstat(fd, &pbuf); + if (ret == 0) + uv__to_stat(&pbuf, buf); + + return ret; +} + +static size_t uv__fs_buf_offset(uv_buf_t* bufs, size_t size) { + size_t offset; + /* Figure out which bufs are done */ + for (offset = 0; size > 0 && bufs[offset].len <= size; ++offset) + size -= bufs[offset].len; + + /* Fix a partial read/write */ + if (size > 0) { + bufs[offset].base += size; + bufs[offset].len -= size; + } + return offset; +} + +static ssize_t uv__fs_write_all(uv_fs_t* req) { + unsigned int iovmax; + unsigned int nbufs; + uv_buf_t* bufs; + ssize_t total; + ssize_t result; + + iovmax = uv__getiovmax(); + nbufs = req->nbufs; + bufs = req->bufs; + total = 0; + + while (nbufs > 0) { + req->nbufs = nbufs; + if (req->nbufs > iovmax) + req->nbufs = iovmax; + + do + result = uv__fs_write(req); + while (result < 0 && errno == EINTR); + + if (result <= 0) { + if (total == 0) + total = result; + break; + } + + if (req->off >= 0) + req->off += result; + + req->nbufs = uv__fs_buf_offset(req->bufs, result); + req->bufs += req->nbufs; + nbufs -= req->nbufs; + total += result; + } + + if (bufs != req->bufsml) + uv__free(bufs); + + req->bufs = NULL; + req->nbufs = 0; + + return total; +} + + +static void uv__fs_work(struct uv__work* w) { + int retry_on_eintr; + uv_fs_t* req; + ssize_t r; + + req = container_of(w, uv_fs_t, work_req); + retry_on_eintr = !(req->fs_type == UV_FS_CLOSE || + req->fs_type == UV_FS_READ); + + do { + errno = 0; + +#define X(type, action) \ + case UV_FS_ ## type: \ + r = action; \ + break; + + switch (req->fs_type) { + X(ACCESS, access(req->path, req->flags)); + X(CHMOD, chmod(req->path, req->mode)); + X(CHOWN, chown(req->path, req->uid, req->gid)); + X(CLOSE, uv__fs_close(req->file)); + X(COPYFILE, uv__fs_copyfile(req)); + X(FCHMOD, fchmod(req->file, req->mode)); + X(FCHOWN, fchown(req->file, req->uid, req->gid)); + X(LCHOWN, lchown(req->path, req->uid, req->gid)); + X(FDATASYNC, uv__fs_fdatasync(req)); + X(FSTAT, uv__fs_fstat(req->file, &req->statbuf)); + X(FSYNC, uv__fs_fsync(req)); + X(FTRUNCATE, ftruncate(req->file, req->off)); + X(FUTIME, uv__fs_futime(req)); + X(LUTIME, uv__fs_lutime(req)); + X(LSTAT, uv__fs_lstat(req->path, &req->statbuf)); + X(LINK, link(req->path, req->new_path)); + X(MKDIR, mkdir(req->path, req->mode)); + X(MKDTEMP, uv__fs_mkdtemp(req)); + X(MKSTEMP, uv__fs_mkstemp(req)); + X(OPEN, uv__fs_open(req)); + X(READ, uv__fs_read(req)); + X(SCANDIR, uv__fs_scandir(req)); + X(OPENDIR, uv__fs_opendir(req)); + X(READDIR, uv__fs_readdir(req)); + X(CLOSEDIR, uv__fs_closedir(req)); + X(READLINK, uv__fs_readlink(req)); + X(REALPATH, uv__fs_realpath(req)); + X(RENAME, rename(req->path, req->new_path)); + X(RMDIR, rmdir(req->path)); + X(SENDFILE, uv__fs_sendfile(req)); + X(STAT, uv__fs_stat(req->path, &req->statbuf)); + X(STATFS, uv__fs_statfs(req)); + X(SYMLINK, symlink(req->path, req->new_path)); + X(UNLINK, unlink(req->path)); + X(UTIME, uv__fs_utime(req)); + X(WRITE, uv__fs_write_all(req)); + default: abort(); + } +#undef X + } while (r == -1 && errno == EINTR && retry_on_eintr); + + if (r == -1) + req->result = UV__ERR(errno); + else + req->result = r; + + if (r == 0 && (req->fs_type == UV_FS_STAT || + req->fs_type == UV_FS_FSTAT || + req->fs_type == UV_FS_LSTAT)) { + req->ptr = &req->statbuf; + } +} + + +static void uv__fs_done(struct uv__work* w, int status) { + uv_fs_t* req; + + req = container_of(w, uv_fs_t, work_req); + uv__req_unregister(req->loop, req); + + if (status == UV_ECANCELED) { + assert(req->result == 0); + req->result = UV_ECANCELED; + } + + req->cb(req); +} + + +int uv_fs_access(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + int flags, + uv_fs_cb cb) { + INIT(ACCESS); + PATH; + req->flags = flags; + POST; +} + + +int uv_fs_chmod(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + int mode, + uv_fs_cb cb) { + INIT(CHMOD); + PATH; + req->mode = mode; + POST; +} + + +int uv_fs_chown(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + uv_uid_t uid, + uv_gid_t gid, + uv_fs_cb cb) { + INIT(CHOWN); + PATH; + req->uid = uid; + req->gid = gid; + POST; +} + + +int uv_fs_close(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb) { + INIT(CLOSE); + req->file = file; + POST; +} + + +int uv_fs_fchmod(uv_loop_t* loop, + uv_fs_t* req, + uv_file file, + int mode, + uv_fs_cb cb) { + INIT(FCHMOD); + req->file = file; + req->mode = mode; + POST; +} + + +int uv_fs_fchown(uv_loop_t* loop, + uv_fs_t* req, + uv_file file, + uv_uid_t uid, + uv_gid_t gid, + uv_fs_cb cb) { + INIT(FCHOWN); + req->file = file; + req->uid = uid; + req->gid = gid; + POST; +} + + +int uv_fs_lchown(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + uv_uid_t uid, + uv_gid_t gid, + uv_fs_cb cb) { + INIT(LCHOWN); + PATH; + req->uid = uid; + req->gid = gid; + POST; +} + + +int uv_fs_fdatasync(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb) { + INIT(FDATASYNC); + req->file = file; + POST; +} + + +int uv_fs_fstat(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb) { + INIT(FSTAT); + req->file = file; + POST; +} + + +int uv_fs_fsync(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb) { + INIT(FSYNC); + req->file = file; + POST; +} + + +int uv_fs_ftruncate(uv_loop_t* loop, + uv_fs_t* req, + uv_file file, + int64_t off, + uv_fs_cb cb) { + INIT(FTRUNCATE); + req->file = file; + req->off = off; + POST; +} + + +int uv_fs_futime(uv_loop_t* loop, + uv_fs_t* req, + uv_file file, + double atime, + double mtime, + uv_fs_cb cb) { + INIT(FUTIME); + req->file = file; + req->atime = atime; + req->mtime = mtime; + POST; +} + +int uv_fs_lutime(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + double atime, + double mtime, + uv_fs_cb cb) { + INIT(LUTIME); + PATH; + req->atime = atime; + req->mtime = mtime; + POST; +} + + +int uv_fs_lstat(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb) { + INIT(LSTAT); + PATH; + POST; +} + + +int uv_fs_link(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + const char* new_path, + uv_fs_cb cb) { + INIT(LINK); + PATH2; + POST; +} + + +int uv_fs_mkdir(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + int mode, + uv_fs_cb cb) { + INIT(MKDIR); + PATH; + req->mode = mode; + POST; +} + + +int uv_fs_mkdtemp(uv_loop_t* loop, + uv_fs_t* req, + const char* tpl, + uv_fs_cb cb) { + INIT(MKDTEMP); + req->path = uv__strdup(tpl); + if (req->path == NULL) + return UV_ENOMEM; + POST; +} + + +int uv_fs_mkstemp(uv_loop_t* loop, + uv_fs_t* req, + const char* tpl, + uv_fs_cb cb) { + INIT(MKSTEMP); + req->path = uv__strdup(tpl); + if (req->path == NULL) + return UV_ENOMEM; + POST; +} + + +int uv_fs_open(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + int flags, + int mode, + uv_fs_cb cb) { + INIT(OPEN); + PATH; + req->flags = flags; + req->mode = mode; + POST; +} + + +int uv_fs_read(uv_loop_t* loop, uv_fs_t* req, + uv_file file, + const uv_buf_t bufs[], + unsigned int nbufs, + int64_t off, + uv_fs_cb cb) { + INIT(READ); + + if (bufs == NULL || nbufs == 0) + return UV_EINVAL; + + req->file = file; + + req->nbufs = nbufs; + req->bufs = req->bufsml; + if (nbufs > ARRAY_SIZE(req->bufsml)) + req->bufs = uv__malloc(nbufs * sizeof(*bufs)); + + if (req->bufs == NULL) + return UV_ENOMEM; + + memcpy(req->bufs, bufs, nbufs * sizeof(*bufs)); + + req->off = off; + POST; +} + + +int uv_fs_scandir(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + int flags, + uv_fs_cb cb) { + INIT(SCANDIR); + PATH; + req->flags = flags; + POST; +} + +int uv_fs_opendir(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + uv_fs_cb cb) { + INIT(OPENDIR); + PATH; + POST; +} + +int uv_fs_readdir(uv_loop_t* loop, + uv_fs_t* req, + uv_dir_t* dir, + uv_fs_cb cb) { + INIT(READDIR); + + if (dir == NULL || dir->dir == NULL || dir->dirents == NULL) + return UV_EINVAL; + + req->ptr = dir; + POST; +} + +int uv_fs_closedir(uv_loop_t* loop, + uv_fs_t* req, + uv_dir_t* dir, + uv_fs_cb cb) { + INIT(CLOSEDIR); + + if (dir == NULL) + return UV_EINVAL; + + req->ptr = dir; + POST; +} + +int uv_fs_readlink(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + uv_fs_cb cb) { + INIT(READLINK); + PATH; + POST; +} + + +int uv_fs_realpath(uv_loop_t* loop, + uv_fs_t* req, + const char * path, + uv_fs_cb cb) { + INIT(REALPATH); + PATH; + POST; +} + + +int uv_fs_rename(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + const char* new_path, + uv_fs_cb cb) { + INIT(RENAME); + PATH2; + POST; +} + + +int uv_fs_rmdir(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb) { + INIT(RMDIR); + PATH; + POST; +} + + +int uv_fs_sendfile(uv_loop_t* loop, + uv_fs_t* req, + uv_file out_fd, + uv_file in_fd, + int64_t off, + size_t len, + uv_fs_cb cb) { + INIT(SENDFILE); + req->flags = in_fd; /* hack */ + req->file = out_fd; + req->off = off; + req->bufsml[0].len = len; + POST; +} + + +int uv_fs_stat(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb) { + INIT(STAT); + PATH; + POST; +} + + +int uv_fs_symlink(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + const char* new_path, + int flags, + uv_fs_cb cb) { + INIT(SYMLINK); + PATH2; + req->flags = flags; + POST; +} + + +int uv_fs_unlink(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb) { + INIT(UNLINK); + PATH; + POST; +} + + +int uv_fs_utime(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + double atime, + double mtime, + uv_fs_cb cb) { + INIT(UTIME); + PATH; + req->atime = atime; + req->mtime = mtime; + POST; +} + + +int uv_fs_write(uv_loop_t* loop, + uv_fs_t* req, + uv_file file, + const uv_buf_t bufs[], + unsigned int nbufs, + int64_t off, + uv_fs_cb cb) { + INIT(WRITE); + + if (bufs == NULL || nbufs == 0) + return UV_EINVAL; + + req->file = file; + + req->nbufs = nbufs; + req->bufs = req->bufsml; + if (nbufs > ARRAY_SIZE(req->bufsml)) + req->bufs = uv__malloc(nbufs * sizeof(*bufs)); + + if (req->bufs == NULL) + return UV_ENOMEM; + + memcpy(req->bufs, bufs, nbufs * sizeof(*bufs)); + + req->off = off; + POST; +} + + +void uv_fs_req_cleanup(uv_fs_t* req) { + if (req == NULL) + return; + + /* Only necessary for asychronous requests, i.e., requests with a callback. + * Synchronous ones don't copy their arguments and have req->path and + * req->new_path pointing to user-owned memory. UV_FS_MKDTEMP and + * UV_FS_MKSTEMP are the exception to the rule, they always allocate memory. + */ + if (req->path != NULL && + (req->cb != NULL || + req->fs_type == UV_FS_MKDTEMP || req->fs_type == UV_FS_MKSTEMP)) + uv__free((void*) req->path); /* Memory is shared with req->new_path. */ + + req->path = NULL; + req->new_path = NULL; + + if (req->fs_type == UV_FS_READDIR && req->ptr != NULL) + uv__fs_readdir_cleanup(req); + + if (req->fs_type == UV_FS_SCANDIR && req->ptr != NULL) + uv__fs_scandir_cleanup(req); + + if (req->bufs != req->bufsml) + uv__free(req->bufs); + req->bufs = NULL; + + if (req->fs_type != UV_FS_OPENDIR && req->ptr != &req->statbuf) + uv__free(req->ptr); + req->ptr = NULL; +} + + +int uv_fs_copyfile(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + const char* new_path, + int flags, + uv_fs_cb cb) { + INIT(COPYFILE); + + if (flags & ~(UV_FS_COPYFILE_EXCL | + UV_FS_COPYFILE_FICLONE | + UV_FS_COPYFILE_FICLONE_FORCE)) { + return UV_EINVAL; + } + + PATH2; + req->flags = flags; + POST; +} + + +int uv_fs_statfs(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + uv_fs_cb cb) { + INIT(STATFS); + PATH; + POST; +} + +int uv_fs_get_system_error(const uv_fs_t* req) { + return -req->result; +} diff --git a/external/libuv/src/unix/fsevents.c b/external/libuv/src/unix/fsevents.c new file mode 100644 index 000000000..a51f29b3f --- /dev/null +++ b/external/libuv/src/unix/fsevents.c @@ -0,0 +1,923 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#include "uv.h" +#include "internal.h" + +#if TARGET_OS_IPHONE || MAC_OS_X_VERSION_MAX_ALLOWED < 1070 + +/* iOS (currently) doesn't provide the FSEvents-API (nor CoreServices) */ +/* macOS prior to 10.7 doesn't provide the full FSEvents API so use kqueue */ + +int uv__fsevents_init(uv_fs_event_t* handle) { + return 0; +} + + +int uv__fsevents_close(uv_fs_event_t* handle) { + return 0; +} + + +void uv__fsevents_loop_delete(uv_loop_t* loop) { +} + +#else /* TARGET_OS_IPHONE */ + +#include "darwin-stub.h" + +#include +#include +#include +#include + +static const int kFSEventsModified = + kFSEventStreamEventFlagItemChangeOwner | + kFSEventStreamEventFlagItemFinderInfoMod | + kFSEventStreamEventFlagItemInodeMetaMod | + kFSEventStreamEventFlagItemModified | + kFSEventStreamEventFlagItemXattrMod; + +static const int kFSEventsRenamed = + kFSEventStreamEventFlagItemCreated | + kFSEventStreamEventFlagItemRemoved | + kFSEventStreamEventFlagItemRenamed; + +static const int kFSEventsSystem = + kFSEventStreamEventFlagUserDropped | + kFSEventStreamEventFlagKernelDropped | + kFSEventStreamEventFlagEventIdsWrapped | + kFSEventStreamEventFlagHistoryDone | + kFSEventStreamEventFlagMount | + kFSEventStreamEventFlagUnmount | + kFSEventStreamEventFlagRootChanged; + +typedef struct uv__fsevents_event_s uv__fsevents_event_t; +typedef struct uv__cf_loop_signal_s uv__cf_loop_signal_t; +typedef struct uv__cf_loop_state_s uv__cf_loop_state_t; + +enum uv__cf_loop_signal_type_e { + kUVCFLoopSignalRegular, + kUVCFLoopSignalClosing +}; +typedef enum uv__cf_loop_signal_type_e uv__cf_loop_signal_type_t; + +struct uv__cf_loop_signal_s { + QUEUE member; + uv_fs_event_t* handle; + uv__cf_loop_signal_type_t type; +}; + +struct uv__fsevents_event_s { + QUEUE member; + int events; + char path[1]; +}; + +struct uv__cf_loop_state_s { + CFRunLoopRef loop; + CFRunLoopSourceRef signal_source; + int fsevent_need_reschedule; + FSEventStreamRef fsevent_stream; + uv_sem_t fsevent_sem; + uv_mutex_t fsevent_mutex; + void* fsevent_handles[2]; + unsigned int fsevent_handle_count; +}; + +/* Forward declarations */ +static void uv__cf_loop_cb(void* arg); +static void* uv__cf_loop_runner(void* arg); +static int uv__cf_loop_signal(uv_loop_t* loop, + uv_fs_event_t* handle, + uv__cf_loop_signal_type_t type); + +/* Lazy-loaded by uv__fsevents_global_init(). */ +static CFArrayRef (*pCFArrayCreate)(CFAllocatorRef, + const void**, + CFIndex, + const CFArrayCallBacks*); +static void (*pCFRelease)(CFTypeRef); +static void (*pCFRunLoopAddSource)(CFRunLoopRef, + CFRunLoopSourceRef, + CFStringRef); +static CFRunLoopRef (*pCFRunLoopGetCurrent)(void); +static void (*pCFRunLoopRemoveSource)(CFRunLoopRef, + CFRunLoopSourceRef, + CFStringRef); +static void (*pCFRunLoopRun)(void); +static CFRunLoopSourceRef (*pCFRunLoopSourceCreate)(CFAllocatorRef, + CFIndex, + CFRunLoopSourceContext*); +static void (*pCFRunLoopSourceSignal)(CFRunLoopSourceRef); +static void (*pCFRunLoopStop)(CFRunLoopRef); +static void (*pCFRunLoopWakeUp)(CFRunLoopRef); +static CFStringRef (*pCFStringCreateWithFileSystemRepresentation)( + CFAllocatorRef, + const char*); +static CFStringEncoding (*pCFStringGetSystemEncoding)(void); +static CFStringRef (*pkCFRunLoopDefaultMode); +static FSEventStreamRef (*pFSEventStreamCreate)(CFAllocatorRef, + FSEventStreamCallback, + FSEventStreamContext*, + CFArrayRef, + FSEventStreamEventId, + CFTimeInterval, + FSEventStreamCreateFlags); +static void (*pFSEventStreamFlushSync)(FSEventStreamRef); +static void (*pFSEventStreamInvalidate)(FSEventStreamRef); +static void (*pFSEventStreamRelease)(FSEventStreamRef); +static void (*pFSEventStreamScheduleWithRunLoop)(FSEventStreamRef, + CFRunLoopRef, + CFStringRef); +static int (*pFSEventStreamStart)(FSEventStreamRef); +static void (*pFSEventStreamStop)(FSEventStreamRef); + +#define UV__FSEVENTS_PROCESS(handle, block) \ + do { \ + QUEUE events; \ + QUEUE* q; \ + uv__fsevents_event_t* event; \ + int err; \ + uv_mutex_lock(&(handle)->cf_mutex); \ + /* Split-off all events and empty original queue */ \ + QUEUE_MOVE(&(handle)->cf_events, &events); \ + /* Get error (if any) and zero original one */ \ + err = (handle)->cf_error; \ + (handle)->cf_error = 0; \ + uv_mutex_unlock(&(handle)->cf_mutex); \ + /* Loop through events, deallocating each after processing */ \ + while (!QUEUE_EMPTY(&events)) { \ + q = QUEUE_HEAD(&events); \ + event = QUEUE_DATA(q, uv__fsevents_event_t, member); \ + QUEUE_REMOVE(q); \ + /* NOTE: Checking uv__is_active() is required here, because handle \ + * callback may close handle and invoking it after it will lead to \ + * incorrect behaviour */ \ + if (!uv__is_closing((handle)) && uv__is_active((handle))) \ + block \ + /* Free allocated data */ \ + uv__free(event); \ + } \ + if (err != 0 && !uv__is_closing((handle)) && uv__is_active((handle))) \ + (handle)->cb((handle), NULL, 0, err); \ + } while (0) + + +/* Runs in UV loop's thread, when there're events to report to handle */ +static void uv__fsevents_cb(uv_async_t* cb) { + uv_fs_event_t* handle; + + handle = cb->data; + + UV__FSEVENTS_PROCESS(handle, { + handle->cb(handle, event->path[0] ? event->path : NULL, event->events, 0); + }); +} + + +/* Runs in CF thread, pushed event into handle's event list */ +static void uv__fsevents_push_event(uv_fs_event_t* handle, + QUEUE* events, + int err) { + assert(events != NULL || err != 0); + uv_mutex_lock(&handle->cf_mutex); + + /* Concatenate two queues */ + if (events != NULL) + QUEUE_ADD(&handle->cf_events, events); + + /* Propagate error */ + if (err != 0) + handle->cf_error = err; + uv_mutex_unlock(&handle->cf_mutex); + + uv_async_send(handle->cf_cb); +} + + +/* Runs in CF thread, when there're events in FSEventStream */ +static void uv__fsevents_event_cb(const FSEventStreamRef streamRef, + void* info, + size_t numEvents, + void* eventPaths, + const FSEventStreamEventFlags eventFlags[], + const FSEventStreamEventId eventIds[]) { + size_t i; + int len; + char** paths; + char* path; + char* pos; + uv_fs_event_t* handle; + QUEUE* q; + uv_loop_t* loop; + uv__cf_loop_state_t* state; + uv__fsevents_event_t* event; + FSEventStreamEventFlags flags; + QUEUE head; + + loop = info; + state = loop->cf_state; + assert(state != NULL); + paths = eventPaths; + + /* For each handle */ + uv_mutex_lock(&state->fsevent_mutex); + QUEUE_FOREACH(q, &state->fsevent_handles) { + handle = QUEUE_DATA(q, uv_fs_event_t, cf_member); + QUEUE_INIT(&head); + + /* Process and filter out events */ + for (i = 0; i < numEvents; i++) { + flags = eventFlags[i]; + + /* Ignore system events */ + if (flags & kFSEventsSystem) + continue; + + path = paths[i]; + len = strlen(path); + + if (handle->realpath_len == 0) + continue; /* This should be unreachable */ + + /* Filter out paths that are outside handle's request */ + if (len < handle->realpath_len) + continue; + + /* Make sure that realpath actually named a directory, + * (unless watching root, which alone keeps a trailing slash on the realpath) + * or that we matched the whole string */ + if (handle->realpath_len != len && + handle->realpath_len > 1 && + path[handle->realpath_len] != '/') + continue; + + if (memcmp(path, handle->realpath, handle->realpath_len) != 0) + continue; + + if (!(handle->realpath_len == 1 && handle->realpath[0] == '/')) { + /* Remove common prefix, unless the watched folder is "/" */ + path += handle->realpath_len; + len -= handle->realpath_len; + + /* Ignore events with path equal to directory itself */ + if (len <= 1 && (flags & kFSEventStreamEventFlagItemIsDir)) + continue; + + if (len == 0) { + /* Since we're using fsevents to watch the file itself, + * realpath == path, and we now need to get the basename of the file back + * (for commonality with other codepaths and platforms). */ + while (len < handle->realpath_len && path[-1] != '/') { + path--; + len++; + } + /* Created and Removed seem to be always set, but don't make sense */ + flags &= ~kFSEventsRenamed; + } else { + /* Skip forward slash */ + path++; + len--; + } + } + + /* Do not emit events from subdirectories (without option set) */ + if ((handle->cf_flags & UV_FS_EVENT_RECURSIVE) == 0 && *path != '\0') { + pos = strchr(path + 1, '/'); + if (pos != NULL) + continue; + } + + event = uv__malloc(sizeof(*event) + len); + if (event == NULL) + break; + + memset(event, 0, sizeof(*event)); + memcpy(event->path, path, len + 1); + event->events = UV_RENAME; + + if (0 == (flags & kFSEventsRenamed)) { + if (0 != (flags & kFSEventsModified) || + 0 == (flags & kFSEventStreamEventFlagItemIsDir)) + event->events = UV_CHANGE; + } + + QUEUE_INSERT_TAIL(&head, &event->member); + } + + if (!QUEUE_EMPTY(&head)) + uv__fsevents_push_event(handle, &head, 0); + } + uv_mutex_unlock(&state->fsevent_mutex); +} + + +/* Runs in CF thread */ +static int uv__fsevents_create_stream(uv_loop_t* loop, CFArrayRef paths) { + uv__cf_loop_state_t* state; + FSEventStreamContext ctx; + FSEventStreamRef ref; + CFAbsoluteTime latency; + FSEventStreamCreateFlags flags; + + /* Initialize context */ + memset(&ctx, 0, sizeof(ctx)); + ctx.info = loop; + + latency = 0.05; + + /* Explanation of selected flags: + * 1. NoDefer - without this flag, events that are happening continuously + * (i.e. each event is happening after time interval less than `latency`, + * counted from previous event), will be deferred and passed to callback + * once they'll either fill whole OS buffer, or when this continuous stream + * will stop (i.e. there'll be delay between events, bigger than + * `latency`). + * Specifying this flag will invoke callback after `latency` time passed + * since event. + * 2. FileEvents - fire callback for file changes too (by default it is firing + * it only for directory changes). + */ + flags = kFSEventStreamCreateFlagNoDefer | kFSEventStreamCreateFlagFileEvents; + + /* + * NOTE: It might sound like a good idea to remember last seen StreamEventId, + * but in reality one dir might have last StreamEventId less than, the other, + * that is being watched now. Which will cause FSEventStream API to report + * changes to files from the past. + */ + ref = pFSEventStreamCreate(NULL, + &uv__fsevents_event_cb, + &ctx, + paths, + kFSEventStreamEventIdSinceNow, + latency, + flags); + assert(ref != NULL); + + state = loop->cf_state; + pFSEventStreamScheduleWithRunLoop(ref, + state->loop, + *pkCFRunLoopDefaultMode); + if (!pFSEventStreamStart(ref)) { + pFSEventStreamInvalidate(ref); + pFSEventStreamRelease(ref); + return UV_EMFILE; + } + + state->fsevent_stream = ref; + return 0; +} + + +/* Runs in CF thread */ +static void uv__fsevents_destroy_stream(uv_loop_t* loop) { + uv__cf_loop_state_t* state; + + state = loop->cf_state; + + if (state->fsevent_stream == NULL) + return; + + /* Stop emitting events */ + pFSEventStreamStop(state->fsevent_stream); + + /* Release stream */ + pFSEventStreamInvalidate(state->fsevent_stream); + pFSEventStreamRelease(state->fsevent_stream); + state->fsevent_stream = NULL; +} + + +/* Runs in CF thread, when there're new fsevent handles to add to stream */ +static void uv__fsevents_reschedule(uv_fs_event_t* handle, + uv__cf_loop_signal_type_t type) { + uv__cf_loop_state_t* state; + QUEUE* q; + uv_fs_event_t* curr; + CFArrayRef cf_paths; + CFStringRef* paths; + unsigned int i; + int err; + unsigned int path_count; + + state = handle->loop->cf_state; + paths = NULL; + cf_paths = NULL; + err = 0; + /* NOTE: `i` is used in deallocation loop below */ + i = 0; + + /* Optimization to prevent O(n^2) time spent when starting to watch + * many files simultaneously + */ + uv_mutex_lock(&state->fsevent_mutex); + if (state->fsevent_need_reschedule == 0) { + uv_mutex_unlock(&state->fsevent_mutex); + goto final; + } + state->fsevent_need_reschedule = 0; + uv_mutex_unlock(&state->fsevent_mutex); + + /* Destroy previous FSEventStream */ + uv__fsevents_destroy_stream(handle->loop); + + /* Any failure below will be a memory failure */ + err = UV_ENOMEM; + + /* Create list of all watched paths */ + uv_mutex_lock(&state->fsevent_mutex); + path_count = state->fsevent_handle_count; + if (path_count != 0) { + paths = uv__malloc(sizeof(*paths) * path_count); + if (paths == NULL) { + uv_mutex_unlock(&state->fsevent_mutex); + goto final; + } + + q = &state->fsevent_handles; + for (; i < path_count; i++) { + q = QUEUE_NEXT(q); + assert(q != &state->fsevent_handles); + curr = QUEUE_DATA(q, uv_fs_event_t, cf_member); + + assert(curr->realpath != NULL); + paths[i] = + pCFStringCreateWithFileSystemRepresentation(NULL, curr->realpath); + if (paths[i] == NULL) { + uv_mutex_unlock(&state->fsevent_mutex); + goto final; + } + } + } + uv_mutex_unlock(&state->fsevent_mutex); + err = 0; + + if (path_count != 0) { + /* Create new FSEventStream */ + cf_paths = pCFArrayCreate(NULL, (const void**) paths, path_count, NULL); + if (cf_paths == NULL) { + err = UV_ENOMEM; + goto final; + } + err = uv__fsevents_create_stream(handle->loop, cf_paths); + } + +final: + /* Deallocate all paths in case of failure */ + if (err != 0) { + if (cf_paths == NULL) { + while (i != 0) + pCFRelease(paths[--i]); + uv__free(paths); + } else { + /* CFArray takes ownership of both strings and original C-array */ + pCFRelease(cf_paths); + } + + /* Broadcast error to all handles */ + uv_mutex_lock(&state->fsevent_mutex); + QUEUE_FOREACH(q, &state->fsevent_handles) { + curr = QUEUE_DATA(q, uv_fs_event_t, cf_member); + uv__fsevents_push_event(curr, NULL, err); + } + uv_mutex_unlock(&state->fsevent_mutex); + } + + /* + * Main thread will block until the removal of handle from the list, + * we must tell it when we're ready. + * + * NOTE: This is coupled with `uv_sem_wait()` in `uv__fsevents_close` + */ + if (type == kUVCFLoopSignalClosing) + uv_sem_post(&state->fsevent_sem); +} + + +static int uv__fsevents_global_init(void) { + static pthread_mutex_t global_init_mutex = PTHREAD_MUTEX_INITIALIZER; + static void* core_foundation_handle; + static void* core_services_handle; + int err; + + err = 0; + pthread_mutex_lock(&global_init_mutex); + if (core_foundation_handle != NULL) + goto out; + + /* The libraries are never unloaded because we currently don't have a good + * mechanism for keeping a reference count. It's unlikely to be an issue + * but if it ever becomes one, we can turn the dynamic library handles into + * per-event loop properties and have the dynamic linker keep track for us. + */ + err = UV_ENOSYS; + core_foundation_handle = dlopen("/System/Library/Frameworks/" + "CoreFoundation.framework/" + "Versions/A/CoreFoundation", + RTLD_LAZY | RTLD_LOCAL); + if (core_foundation_handle == NULL) + goto out; + + core_services_handle = dlopen("/System/Library/Frameworks/" + "CoreServices.framework/" + "Versions/A/CoreServices", + RTLD_LAZY | RTLD_LOCAL); + if (core_services_handle == NULL) + goto out; + + err = UV_ENOENT; +#define V(handle, symbol) \ + do { \ + *(void **)(&p ## symbol) = dlsym((handle), #symbol); \ + if (p ## symbol == NULL) \ + goto out; \ + } \ + while (0) + V(core_foundation_handle, CFArrayCreate); + V(core_foundation_handle, CFRelease); + V(core_foundation_handle, CFRunLoopAddSource); + V(core_foundation_handle, CFRunLoopGetCurrent); + V(core_foundation_handle, CFRunLoopRemoveSource); + V(core_foundation_handle, CFRunLoopRun); + V(core_foundation_handle, CFRunLoopSourceCreate); + V(core_foundation_handle, CFRunLoopSourceSignal); + V(core_foundation_handle, CFRunLoopStop); + V(core_foundation_handle, CFRunLoopWakeUp); + V(core_foundation_handle, CFStringCreateWithFileSystemRepresentation); + V(core_foundation_handle, CFStringGetSystemEncoding); + V(core_foundation_handle, kCFRunLoopDefaultMode); + V(core_services_handle, FSEventStreamCreate); + V(core_services_handle, FSEventStreamFlushSync); + V(core_services_handle, FSEventStreamInvalidate); + V(core_services_handle, FSEventStreamRelease); + V(core_services_handle, FSEventStreamScheduleWithRunLoop); + V(core_services_handle, FSEventStreamStart); + V(core_services_handle, FSEventStreamStop); +#undef V + err = 0; + +out: + if (err && core_services_handle != NULL) { + dlclose(core_services_handle); + core_services_handle = NULL; + } + + if (err && core_foundation_handle != NULL) { + dlclose(core_foundation_handle); + core_foundation_handle = NULL; + } + + pthread_mutex_unlock(&global_init_mutex); + return err; +} + + +/* Runs in UV loop */ +static int uv__fsevents_loop_init(uv_loop_t* loop) { + CFRunLoopSourceContext ctx; + uv__cf_loop_state_t* state; + pthread_attr_t attr_storage; + pthread_attr_t* attr; + int err; + + if (loop->cf_state != NULL) + return 0; + + err = uv__fsevents_global_init(); + if (err) + return err; + + state = uv__calloc(1, sizeof(*state)); + if (state == NULL) + return UV_ENOMEM; + + err = uv_mutex_init(&loop->cf_mutex); + if (err) + goto fail_mutex_init; + + err = uv_sem_init(&loop->cf_sem, 0); + if (err) + goto fail_sem_init; + + QUEUE_INIT(&loop->cf_signals); + + err = uv_sem_init(&state->fsevent_sem, 0); + if (err) + goto fail_fsevent_sem_init; + + err = uv_mutex_init(&state->fsevent_mutex); + if (err) + goto fail_fsevent_mutex_init; + + QUEUE_INIT(&state->fsevent_handles); + state->fsevent_need_reschedule = 0; + state->fsevent_handle_count = 0; + + memset(&ctx, 0, sizeof(ctx)); + ctx.info = loop; + ctx.perform = uv__cf_loop_cb; + state->signal_source = pCFRunLoopSourceCreate(NULL, 0, &ctx); + if (state->signal_source == NULL) { + err = UV_ENOMEM; + goto fail_signal_source_create; + } + + /* In the unlikely event that pthread_attr_init() fails, create the thread + * with the default stack size. We'll use a little more address space but + * that in itself is not a fatal error. + */ + attr = &attr_storage; + if (pthread_attr_init(attr)) + attr = NULL; + + if (attr != NULL) + if (pthread_attr_setstacksize(attr, 4 * PTHREAD_STACK_MIN)) + abort(); + + loop->cf_state = state; + + /* uv_thread_t is an alias for pthread_t. */ + err = UV__ERR(pthread_create(&loop->cf_thread, attr, uv__cf_loop_runner, loop)); + + if (attr != NULL) + pthread_attr_destroy(attr); + + if (err) + goto fail_thread_create; + + /* Synchronize threads */ + uv_sem_wait(&loop->cf_sem); + return 0; + +fail_thread_create: + loop->cf_state = NULL; + +fail_signal_source_create: + uv_mutex_destroy(&state->fsevent_mutex); + +fail_fsevent_mutex_init: + uv_sem_destroy(&state->fsevent_sem); + +fail_fsevent_sem_init: + uv_sem_destroy(&loop->cf_sem); + +fail_sem_init: + uv_mutex_destroy(&loop->cf_mutex); + +fail_mutex_init: + uv__free(state); + return err; +} + + +/* Runs in UV loop */ +void uv__fsevents_loop_delete(uv_loop_t* loop) { + uv__cf_loop_signal_t* s; + uv__cf_loop_state_t* state; + QUEUE* q; + + if (loop->cf_state == NULL) + return; + + if (uv__cf_loop_signal(loop, NULL, kUVCFLoopSignalRegular) != 0) + abort(); + + uv_thread_join(&loop->cf_thread); + uv_sem_destroy(&loop->cf_sem); + uv_mutex_destroy(&loop->cf_mutex); + + /* Free any remaining data */ + while (!QUEUE_EMPTY(&loop->cf_signals)) { + q = QUEUE_HEAD(&loop->cf_signals); + s = QUEUE_DATA(q, uv__cf_loop_signal_t, member); + QUEUE_REMOVE(q); + uv__free(s); + } + + /* Destroy state */ + state = loop->cf_state; + uv_sem_destroy(&state->fsevent_sem); + uv_mutex_destroy(&state->fsevent_mutex); + pCFRelease(state->signal_source); + uv__free(state); + loop->cf_state = NULL; +} + + +/* Runs in CF thread. This is the CF loop's body */ +static void* uv__cf_loop_runner(void* arg) { + uv_loop_t* loop; + uv__cf_loop_state_t* state; + + loop = arg; + state = loop->cf_state; + state->loop = pCFRunLoopGetCurrent(); + + pCFRunLoopAddSource(state->loop, + state->signal_source, + *pkCFRunLoopDefaultMode); + + uv_sem_post(&loop->cf_sem); + + pCFRunLoopRun(); + pCFRunLoopRemoveSource(state->loop, + state->signal_source, + *pkCFRunLoopDefaultMode); + + state->loop = NULL; + + return NULL; +} + + +/* Runs in CF thread, executed after `uv__cf_loop_signal()` */ +static void uv__cf_loop_cb(void* arg) { + uv_loop_t* loop; + uv__cf_loop_state_t* state; + QUEUE* item; + QUEUE split_head; + uv__cf_loop_signal_t* s; + + loop = arg; + state = loop->cf_state; + + uv_mutex_lock(&loop->cf_mutex); + QUEUE_MOVE(&loop->cf_signals, &split_head); + uv_mutex_unlock(&loop->cf_mutex); + + while (!QUEUE_EMPTY(&split_head)) { + item = QUEUE_HEAD(&split_head); + QUEUE_REMOVE(item); + + s = QUEUE_DATA(item, uv__cf_loop_signal_t, member); + + /* This was a termination signal */ + if (s->handle == NULL) + pCFRunLoopStop(state->loop); + else + uv__fsevents_reschedule(s->handle, s->type); + + uv__free(s); + } +} + + +/* Runs in UV loop to notify CF thread */ +int uv__cf_loop_signal(uv_loop_t* loop, + uv_fs_event_t* handle, + uv__cf_loop_signal_type_t type) { + uv__cf_loop_signal_t* item; + uv__cf_loop_state_t* state; + + item = uv__malloc(sizeof(*item)); + if (item == NULL) + return UV_ENOMEM; + + item->handle = handle; + item->type = type; + + uv_mutex_lock(&loop->cf_mutex); + QUEUE_INSERT_TAIL(&loop->cf_signals, &item->member); + + state = loop->cf_state; + assert(state != NULL); + pCFRunLoopSourceSignal(state->signal_source); + pCFRunLoopWakeUp(state->loop); + + uv_mutex_unlock(&loop->cf_mutex); + + return 0; +} + + +/* Runs in UV loop to initialize handle */ +int uv__fsevents_init(uv_fs_event_t* handle) { + int err; + uv__cf_loop_state_t* state; + + err = uv__fsevents_loop_init(handle->loop); + if (err) + return err; + + /* Get absolute path to file */ + handle->realpath = realpath(handle->path, NULL); + if (handle->realpath == NULL) + return UV__ERR(errno); + handle->realpath_len = strlen(handle->realpath); + + /* Initialize event queue */ + QUEUE_INIT(&handle->cf_events); + handle->cf_error = 0; + + /* + * Events will occur in other thread. + * Initialize callback for getting them back into event loop's thread + */ + handle->cf_cb = uv__malloc(sizeof(*handle->cf_cb)); + if (handle->cf_cb == NULL) { + err = UV_ENOMEM; + goto fail_cf_cb_malloc; + } + + handle->cf_cb->data = handle; + uv_async_init(handle->loop, handle->cf_cb, uv__fsevents_cb); + handle->cf_cb->flags |= UV_HANDLE_INTERNAL; + uv_unref((uv_handle_t*) handle->cf_cb); + + err = uv_mutex_init(&handle->cf_mutex); + if (err) + goto fail_cf_mutex_init; + + /* Insert handle into the list */ + state = handle->loop->cf_state; + uv_mutex_lock(&state->fsevent_mutex); + QUEUE_INSERT_TAIL(&state->fsevent_handles, &handle->cf_member); + state->fsevent_handle_count++; + state->fsevent_need_reschedule = 1; + uv_mutex_unlock(&state->fsevent_mutex); + + /* Reschedule FSEventStream */ + assert(handle != NULL); + err = uv__cf_loop_signal(handle->loop, handle, kUVCFLoopSignalRegular); + if (err) + goto fail_loop_signal; + + return 0; + +fail_loop_signal: + uv_mutex_destroy(&handle->cf_mutex); + +fail_cf_mutex_init: + uv__free(handle->cf_cb); + handle->cf_cb = NULL; + +fail_cf_cb_malloc: + uv__free(handle->realpath); + handle->realpath = NULL; + handle->realpath_len = 0; + + return err; +} + + +/* Runs in UV loop to de-initialize handle */ +int uv__fsevents_close(uv_fs_event_t* handle) { + int err; + uv__cf_loop_state_t* state; + + if (handle->cf_cb == NULL) + return UV_EINVAL; + + /* Remove handle from the list */ + state = handle->loop->cf_state; + uv_mutex_lock(&state->fsevent_mutex); + QUEUE_REMOVE(&handle->cf_member); + state->fsevent_handle_count--; + state->fsevent_need_reschedule = 1; + uv_mutex_unlock(&state->fsevent_mutex); + + /* Reschedule FSEventStream */ + assert(handle != NULL); + err = uv__cf_loop_signal(handle->loop, handle, kUVCFLoopSignalClosing); + if (err) + return UV__ERR(err); + + /* Wait for deinitialization */ + uv_sem_wait(&state->fsevent_sem); + + uv_close((uv_handle_t*) handle->cf_cb, (uv_close_cb) uv__free); + handle->cf_cb = NULL; + + /* Free data in queue */ + UV__FSEVENTS_PROCESS(handle, { + /* NOP */ + }); + + uv_mutex_destroy(&handle->cf_mutex); + uv__free(handle->realpath); + handle->realpath = NULL; + handle->realpath_len = 0; + + return 0; +} + +#endif /* TARGET_OS_IPHONE */ diff --git a/external/libuv/src/unix/getaddrinfo.c b/external/libuv/src/unix/getaddrinfo.c new file mode 100644 index 000000000..d7ca7d1a4 --- /dev/null +++ b/external/libuv/src/unix/getaddrinfo.c @@ -0,0 +1,255 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +/* Expose glibc-specific EAI_* error codes. Needs to be defined before we + * include any headers. + */ +#ifndef _GNU_SOURCE +# define _GNU_SOURCE +#endif + +#include "uv.h" +#include "internal.h" +#include "idna.h" + +#include +#include /* NULL */ +#include +#include +#include /* if_indextoname() */ + +/* EAI_* constants. */ +#include + + +int uv__getaddrinfo_translate_error(int sys_err) { + switch (sys_err) { + case 0: return 0; +#if defined(EAI_ADDRFAMILY) + case EAI_ADDRFAMILY: return UV_EAI_ADDRFAMILY; +#endif +#if defined(EAI_AGAIN) + case EAI_AGAIN: return UV_EAI_AGAIN; +#endif +#if defined(EAI_BADFLAGS) + case EAI_BADFLAGS: return UV_EAI_BADFLAGS; +#endif +#if defined(EAI_BADHINTS) + case EAI_BADHINTS: return UV_EAI_BADHINTS; +#endif +#if defined(EAI_CANCELED) + case EAI_CANCELED: return UV_EAI_CANCELED; +#endif +#if defined(EAI_FAIL) + case EAI_FAIL: return UV_EAI_FAIL; +#endif +#if defined(EAI_FAMILY) + case EAI_FAMILY: return UV_EAI_FAMILY; +#endif +#if defined(EAI_MEMORY) + case EAI_MEMORY: return UV_EAI_MEMORY; +#endif +#if defined(EAI_NODATA) + case EAI_NODATA: return UV_EAI_NODATA; +#endif +#if defined(EAI_NONAME) +# if !defined(EAI_NODATA) || EAI_NODATA != EAI_NONAME + case EAI_NONAME: return UV_EAI_NONAME; +# endif +#endif +#if defined(EAI_OVERFLOW) + case EAI_OVERFLOW: return UV_EAI_OVERFLOW; +#endif +#if defined(EAI_PROTOCOL) + case EAI_PROTOCOL: return UV_EAI_PROTOCOL; +#endif +#if defined(EAI_SERVICE) + case EAI_SERVICE: return UV_EAI_SERVICE; +#endif +#if defined(EAI_SOCKTYPE) + case EAI_SOCKTYPE: return UV_EAI_SOCKTYPE; +#endif +#if defined(EAI_SYSTEM) + case EAI_SYSTEM: return UV__ERR(errno); +#endif + } + assert(!"unknown EAI_* error code"); + abort(); +#ifndef __SUNPRO_C + return 0; /* Pacify compiler. */ +#endif +} + + +static void uv__getaddrinfo_work(struct uv__work* w) { + uv_getaddrinfo_t* req; + int err; + + req = container_of(w, uv_getaddrinfo_t, work_req); + err = getaddrinfo(req->hostname, req->service, req->hints, &req->addrinfo); + req->retcode = uv__getaddrinfo_translate_error(err); +} + + +static void uv__getaddrinfo_done(struct uv__work* w, int status) { + uv_getaddrinfo_t* req; + + req = container_of(w, uv_getaddrinfo_t, work_req); + uv__req_unregister(req->loop, req); + + /* See initialization in uv_getaddrinfo(). */ + if (req->hints) + uv__free(req->hints); + else if (req->service) + uv__free(req->service); + else if (req->hostname) + uv__free(req->hostname); + else + assert(0); + + req->hints = NULL; + req->service = NULL; + req->hostname = NULL; + + if (status == UV_ECANCELED) { + assert(req->retcode == 0); + req->retcode = UV_EAI_CANCELED; + } + + if (req->cb) + req->cb(req, req->retcode, req->addrinfo); +} + + +int uv_getaddrinfo(uv_loop_t* loop, + uv_getaddrinfo_t* req, + uv_getaddrinfo_cb cb, + const char* hostname, + const char* service, + const struct addrinfo* hints) { + char hostname_ascii[256]; + size_t hostname_len; + size_t service_len; + size_t hints_len; + size_t len; + char* buf; + long rc; + + if (req == NULL || (hostname == NULL && service == NULL)) + return UV_EINVAL; + + /* FIXME(bnoordhuis) IDNA does not seem to work z/OS, + * probably because it uses EBCDIC rather than ASCII. + */ +#ifdef __MVS__ + (void) &hostname_ascii; +#else + if (hostname != NULL) { + rc = uv__idna_toascii(hostname, + hostname + strlen(hostname), + hostname_ascii, + hostname_ascii + sizeof(hostname_ascii)); + if (rc < 0) + return rc; + hostname = hostname_ascii; + } +#endif + + hostname_len = hostname ? strlen(hostname) + 1 : 0; + service_len = service ? strlen(service) + 1 : 0; + hints_len = hints ? sizeof(*hints) : 0; + buf = uv__malloc(hostname_len + service_len + hints_len); + + if (buf == NULL) + return UV_ENOMEM; + + uv__req_init(loop, req, UV_GETADDRINFO); + req->loop = loop; + req->cb = cb; + req->addrinfo = NULL; + req->hints = NULL; + req->service = NULL; + req->hostname = NULL; + req->retcode = 0; + + /* order matters, see uv_getaddrinfo_done() */ + len = 0; + + if (hints) { + req->hints = memcpy(buf + len, hints, sizeof(*hints)); + len += sizeof(*hints); + } + + if (service) { + req->service = memcpy(buf + len, service, service_len); + len += service_len; + } + + if (hostname) + req->hostname = memcpy(buf + len, hostname, hostname_len); + + if (cb) { + uv__work_submit(loop, + &req->work_req, + UV__WORK_SLOW_IO, + uv__getaddrinfo_work, + uv__getaddrinfo_done); + return 0; + } else { + uv__getaddrinfo_work(&req->work_req); + uv__getaddrinfo_done(&req->work_req, 0); + return req->retcode; + } +} + + +void uv_freeaddrinfo(struct addrinfo* ai) { + if (ai) + freeaddrinfo(ai); +} + + +int uv_if_indextoname(unsigned int ifindex, char* buffer, size_t* size) { + char ifname_buf[UV_IF_NAMESIZE]; + size_t len; + + if (buffer == NULL || size == NULL || *size == 0) + return UV_EINVAL; + + if (if_indextoname(ifindex, ifname_buf) == NULL) + return UV__ERR(errno); + + len = strnlen(ifname_buf, sizeof(ifname_buf)); + + if (*size <= len) { + *size = len + 1; + return UV_ENOBUFS; + } + + memcpy(buffer, ifname_buf, len); + buffer[len] = '\0'; + *size = len; + + return 0; +} + +int uv_if_indextoiid(unsigned int ifindex, char* buffer, size_t* size) { + return uv_if_indextoname(ifindex, buffer, size); +} diff --git a/external/libuv/src/unix/getnameinfo.c b/external/libuv/src/unix/getnameinfo.c new file mode 100644 index 000000000..991002a67 --- /dev/null +++ b/external/libuv/src/unix/getnameinfo.c @@ -0,0 +1,121 @@ +/* Copyright Joyent, Inc. and other Node 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. +*/ + +#include +#include +#include +#include + +#include "uv.h" +#include "internal.h" + + +static void uv__getnameinfo_work(struct uv__work* w) { + uv_getnameinfo_t* req; + int err; + socklen_t salen; + + req = container_of(w, uv_getnameinfo_t, work_req); + + if (req->storage.ss_family == AF_INET) + salen = sizeof(struct sockaddr_in); + else if (req->storage.ss_family == AF_INET6) + salen = sizeof(struct sockaddr_in6); + else + abort(); + + err = getnameinfo((struct sockaddr*) &req->storage, + salen, + req->host, + sizeof(req->host), + req->service, + sizeof(req->service), + req->flags); + req->retcode = uv__getaddrinfo_translate_error(err); +} + +static void uv__getnameinfo_done(struct uv__work* w, int status) { + uv_getnameinfo_t* req; + char* host; + char* service; + + req = container_of(w, uv_getnameinfo_t, work_req); + uv__req_unregister(req->loop, req); + host = service = NULL; + + if (status == UV_ECANCELED) { + assert(req->retcode == 0); + req->retcode = UV_EAI_CANCELED; + } else if (req->retcode == 0) { + host = req->host; + service = req->service; + } + + if (req->getnameinfo_cb) + req->getnameinfo_cb(req, req->retcode, host, service); +} + +/* +* Entry point for getnameinfo +* return 0 if a callback will be made +* return error code if validation fails +*/ +int uv_getnameinfo(uv_loop_t* loop, + uv_getnameinfo_t* req, + uv_getnameinfo_cb getnameinfo_cb, + const struct sockaddr* addr, + int flags) { + if (req == NULL || addr == NULL) + return UV_EINVAL; + + if (addr->sa_family == AF_INET) { + memcpy(&req->storage, + addr, + sizeof(struct sockaddr_in)); + } else if (addr->sa_family == AF_INET6) { + memcpy(&req->storage, + addr, + sizeof(struct sockaddr_in6)); + } else { + return UV_EINVAL; + } + + uv__req_init(loop, (uv_req_t*)req, UV_GETNAMEINFO); + + req->getnameinfo_cb = getnameinfo_cb; + req->flags = flags; + req->type = UV_GETNAMEINFO; + req->loop = loop; + req->retcode = 0; + + if (getnameinfo_cb) { + uv__work_submit(loop, + &req->work_req, + UV__WORK_SLOW_IO, + uv__getnameinfo_work, + uv__getnameinfo_done); + return 0; + } else { + uv__getnameinfo_work(&req->work_req); + uv__getnameinfo_done(&req->work_req, 0); + return req->retcode; + } +} diff --git a/external/libuv/src/unix/haiku.c b/external/libuv/src/unix/haiku.c new file mode 100644 index 000000000..cf17d836b --- /dev/null +++ b/external/libuv/src/unix/haiku.c @@ -0,0 +1,167 @@ +/* Copyright libuv 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 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. + */ + +#include "uv.h" +#include "internal.h" + +#include /* find_path() */ +#include + + +void uv_loadavg(double avg[3]) { + avg[0] = 0; + avg[1] = 0; + avg[2] = 0; +} + + +int uv_exepath(char* buffer, size_t* size) { + char abspath[B_PATH_NAME_LENGTH]; + status_t status; + ssize_t abspath_len; + + if (buffer == NULL || size == NULL || *size == 0) + return UV_EINVAL; + + status = find_path(B_APP_IMAGE_SYMBOL, B_FIND_PATH_IMAGE_PATH, NULL, abspath, + sizeof(abspath)); + if (status != B_OK) + return UV__ERR(status); + + abspath_len = uv__strscpy(buffer, abspath, *size); + *size -= 1; + if (abspath_len >= 0 && *size > (size_t)abspath_len) + *size = (size_t)abspath_len; + + return 0; +} + + +uint64_t uv_get_free_memory(void) { + status_t status; + system_info sinfo; + + status = get_system_info(&sinfo); + if (status != B_OK) + return 0; + + return (sinfo.max_pages - sinfo.used_pages) * B_PAGE_SIZE; +} + + +uint64_t uv_get_total_memory(void) { + status_t status; + system_info sinfo; + + status = get_system_info(&sinfo); + if (status != B_OK) + return 0; + + return sinfo.max_pages * B_PAGE_SIZE; +} + + +uint64_t uv_get_constrained_memory(void) { + return 0; /* Memory constraints are unknown. */ +} + + +int uv_resident_set_memory(size_t* rss) { + area_info area; + ssize_t cookie; + status_t status; + thread_info thread; + + status = get_thread_info(find_thread(NULL), &thread); + if (status != B_OK) + return UV__ERR(status); + + cookie = 0; + *rss = 0; + while (get_next_area_info(thread.team, &cookie, &area) == B_OK) + *rss += area.ram_size; + + return 0; +} + + +int uv_uptime(double* uptime) { + /* system_time() returns time since booting in microseconds */ + *uptime = (double)system_time() / 1000000; + return 0; +} + + +int uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) { + cpu_topology_node_info* topology_infos; + int i; + status_t status; + system_info system; + uint32_t topology_count; + uint64_t cpuspeed; + uv_cpu_info_t* cpu_info; + + if (cpu_infos == NULL || count == NULL) + return UV_EINVAL; + + status = get_cpu_topology_info(NULL, &topology_count); + if (status != B_OK) + return UV__ERR(status); + + topology_infos = uv__malloc(topology_count * sizeof(*topology_infos)); + if (topology_infos == NULL) + return UV_ENOMEM; + + status = get_cpu_topology_info(topology_infos, &topology_count); + if (status != B_OK) { + uv__free(topology_infos); + return UV__ERR(status); + } + + cpuspeed = 0; + for (i = 0; i < (int)topology_count; i++) { + if (topology_infos[i].type == B_TOPOLOGY_CORE) { + cpuspeed = topology_infos[i].data.core.default_frequency; + break; + } + } + + uv__free(topology_infos); + + status = get_system_info(&system); + if (status != B_OK) + return UV__ERR(status); + + *cpu_infos = uv__calloc(system.cpu_count, sizeof(**cpu_infos)); + if (*cpu_infos == NULL) + return UV_ENOMEM; + + /* CPU time and model are not exposed by Haiku. */ + cpu_info = *cpu_infos; + for (i = 0; i < (int)system.cpu_count; i++) { + cpu_info->model = uv__strdup("unknown"); + cpu_info->speed = (int)(cpuspeed / 1000000); + cpu_info++; + } + *count = system.cpu_count; + + return 0; +} diff --git a/external/libuv/src/unix/ibmi.c b/external/libuv/src/unix/ibmi.c new file mode 100644 index 000000000..ff300ea5f --- /dev/null +++ b/external/libuv/src/unix/ibmi.c @@ -0,0 +1,461 @@ +/* Copyright libuv 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 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. + */ + +#include "uv.h" +#include "internal.h" + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include + +#include +#include + + +typedef struct { + int bytes_available; + int bytes_returned; + char current_date_and_time[8]; + char system_name[8]; + char elapsed_time[6]; + char restricted_state_flag; + char reserved; + int percent_processing_unit_used; + int jobs_in_system; + int percent_permanent_addresses; + int percent_temporary_addresses; + int system_asp; + int percent_system_asp_used; + int total_auxiliary_storage; + int current_unprotected_storage_used; + int maximum_unprotected_storage_used; + int percent_db_capability; + int main_storage_size; + int number_of_partitions; + int partition_identifier; + int reserved1; + int current_processing_capacity; + char processor_sharing_attribute; + char reserved2[3]; + int number_of_processors; + int active_jobs_in_system; + int active_threads_in_system; + int maximum_jobs_in_system; + int percent_temporary_256mb_segments_used; + int percent_temporary_4gb_segments_used; + int percent_permanent_256mb_segments_used; + int percent_permanent_4gb_segments_used; + int percent_current_interactive_performance; + int percent_uncapped_cpu_capacity_used; + int percent_shared_processor_pool_used; + long main_storage_size_long; +} SSTS0200; + + +typedef struct { + char header[208]; + unsigned char loca_adapter_address[12]; +} LIND0500; + + +typedef struct { + int bytes_provided; + int bytes_available; + char msgid[7]; +} errcode_s; + + +static const unsigned char e2a[256] = { + 0, 1, 2, 3, 156, 9, 134, 127, 151, 141, 142, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 157, 133, 8, 135, 24, 25, 146, 143, 28, 29, 30, 31, + 128, 129, 130, 131, 132, 10, 23, 27, 136, 137, 138, 139, 140, 5, 6, 7, + 144, 145, 22, 147, 148, 149, 150, 4, 152, 153, 154, 155, 20, 21, 158, 26, + 32, 160, 161, 162, 163, 164, 165, 166, 167, 168, 91, 46, 60, 40, 43, 33, + 38, 169, 170, 171, 172, 173, 174, 175, 176, 177, 93, 36, 42, 41, 59, 94, + 45, 47, 178, 179, 180, 181, 182, 183, 184, 185, 124, 44, 37, 95, 62, 63, + 186, 187, 188, 189, 190, 191, 192, 193, 194, 96, 58, 35, 64, 39, 61, 34, + 195, 97, 98, 99, 100, 101, 102, 103, 104, 105, 196, 197, 198, 199, 200, 201, + 202, 106, 107, 108, 109, 110, 111, 112, 113, 114, 203, 204, 205, 206, 207, 208, + 209, 126, 115, 116, 117, 118, 119, 120, 121, 122, 210, 211, 212, 213, 214, 215, + 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 123, 65, 66, 67, 68, 69, 70, 71, 72, 73, 232, 233, 234, 235, 236, 237, + 125, 74, 75, 76, 77, 78, 79, 80, 81, 82, 238, 239, 240, 241, 242, 243, + 92, 159, 83, 84, 85, 86, 87, 88, 89, 90, 244, 245, 246, 247, 248, 249, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 250, 251, 252, 253, 254, 255}; + + +static const unsigned char a2e[256] = { + 0, 1, 2, 3, 55, 45, 46, 47, 22, 5, 37, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 60, 61, 50, 38, 24, 25, 63, 39, 28, 29, 30, 31, + 64, 79, 127, 123, 91, 108, 80, 125, 77, 93, 92, 78, 107, 96, 75, 97, + 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 122, 94, 76, 126, 110, 111, + 124, 193, 194, 195, 196, 197, 198, 199, 200, 201, 209, 210, 211, 212, 213, 214, + 215, 216, 217, 226, 227, 228, 229, 230, 231, 232, 233, 74, 224, 90, 95, 109, + 121, 129, 130, 131, 132, 133, 134, 135, 136, 137, 145, 146, 147, 148, 149, 150, + 151, 152, 153, 162, 163, 164, 165, 166, 167, 168, 169, 192, 106, 208, 161, 7, + 32, 33, 34, 35, 36, 21, 6, 23, 40, 41, 42, 43, 44, 9, 10, 27, + 48, 49, 26, 51, 52, 53, 54, 8, 56, 57, 58, 59, 4, 20, 62, 225, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 98, 99, 100, 101, 102, 103, 104, 105, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 128, 138, 139, 140, 141, 142, 143, 144, 154, 155, 156, 157, 158, + 159, 160, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 202, 203, 204, 205, 206, 207, 218, 219, + 220, 221, 222, 223, 234, 235, 236, 237, 238, 239, 250, 251, 252, 253, 254, 255}; + + +static void iconv_e2a(unsigned char src[], unsigned char dst[], size_t length) { + size_t i; + for (i = 0; i < length; i++) + dst[i] = e2a[src[i]]; +} + + +static void iconv_a2e(const char* src, unsigned char dst[], size_t length) { + size_t srclen; + size_t i; + + srclen = strlen(src); + if (srclen > length) + abort(); + for (i = 0; i < srclen; i++) + dst[i] = a2e[src[i]]; + /* padding the remaining part with spaces */ + for (; i < length; i++) + dst[i] = a2e[' ']; +} + + +static int get_ibmi_system_status(SSTS0200* rcvr) { + /* rcvrlen is input parameter 2 to QWCRSSTS */ + unsigned int rcvrlen = sizeof(*rcvr); + unsigned char format[8], reset_status[10]; + + /* format is input parameter 3 to QWCRSSTS */ + iconv_a2e("SSTS0200", format, sizeof(format)); + /* reset_status is input parameter 4 */ + iconv_a2e("*NO", reset_status, sizeof(reset_status)); + + /* errcode is input parameter 5 to QWCRSSTS */ + errcode_s errcode; + + /* qwcrssts_pointer is the 16-byte tagged system pointer to QWCRSSTS */ + ILEpointer __attribute__((aligned(16))) qwcrssts_pointer; + + /* qwcrssts_argv is the array of argument pointers to QWCRSSTS */ + void* qwcrssts_argv[6]; + + /* Set the IBM i pointer to the QSYS/QWCRSSTS *PGM object */ + int rc = _RSLOBJ2(&qwcrssts_pointer, RSLOBJ_TS_PGM, "QWCRSSTS", "QSYS"); + + if (rc != 0) + return rc; + + /* initialize the QWCRSSTS returned info structure */ + memset(rcvr, 0, sizeof(*rcvr)); + + /* initialize the QWCRSSTS error code structure */ + memset(&errcode, 0, sizeof(errcode)); + errcode.bytes_provided = sizeof(errcode); + + /* initialize the array of argument pointers for the QWCRSSTS API */ + qwcrssts_argv[0] = rcvr; + qwcrssts_argv[1] = &rcvrlen; + qwcrssts_argv[2] = &format; + qwcrssts_argv[3] = &reset_status; + qwcrssts_argv[4] = &errcode; + qwcrssts_argv[5] = NULL; + + /* Call the IBM i QWCRSSTS API from PASE */ + rc = _PGMCALL(&qwcrssts_pointer, qwcrssts_argv, 0); + + return rc; +} + + +uint64_t uv_get_free_memory(void) { + SSTS0200 rcvr; + + if (get_ibmi_system_status(&rcvr)) + return 0; + + return (uint64_t)rcvr.main_storage_size * 1024ULL; +} + + +uint64_t uv_get_total_memory(void) { + SSTS0200 rcvr; + + if (get_ibmi_system_status(&rcvr)) + return 0; + + return (uint64_t)rcvr.main_storage_size * 1024ULL; +} + + +uint64_t uv_get_constrained_memory(void) { + return 0; /* Memory constraints are unknown. */ +} + + +void uv_loadavg(double avg[3]) { + SSTS0200 rcvr; + + if (get_ibmi_system_status(&rcvr)) { + avg[0] = avg[1] = avg[2] = 0; + return; + } + + /* The average (in tenths) of the elapsed time during which the processing + * units were in use. For example, a value of 411 in binary would be 41.1%. + * This percentage could be greater than 100% for an uncapped partition. + */ + double processing_unit_used_percent = + rcvr.percent_processing_unit_used / 1000.0; + + avg[0] = avg[1] = avg[2] = processing_unit_used_percent; +} + + +int uv_resident_set_memory(size_t* rss) { + *rss = 0; + return 0; +} + + +int uv_uptime(double* uptime) { + return UV_ENOSYS; +} + + +int uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) { + unsigned int numcpus, idx = 0; + uv_cpu_info_t* cpu_info; + + *cpu_infos = NULL; + *count = 0; + + numcpus = sysconf(_SC_NPROCESSORS_ONLN); + + *cpu_infos = uv__malloc(numcpus * sizeof(uv_cpu_info_t)); + if (!*cpu_infos) { + return UV_ENOMEM; + } + + cpu_info = *cpu_infos; + for (idx = 0; idx < numcpus; idx++) { + cpu_info->speed = 0; + cpu_info->model = uv__strdup("unknown"); + cpu_info->cpu_times.user = 0; + cpu_info->cpu_times.sys = 0; + cpu_info->cpu_times.idle = 0; + cpu_info->cpu_times.irq = 0; + cpu_info->cpu_times.nice = 0; + cpu_info++; + } + *count = numcpus; + + return 0; +} + + +static int get_ibmi_physical_address(const char* line, char (*phys_addr)[6]) { + LIND0500 rcvr; + /* rcvrlen is input parameter 2 to QDCRLIND */ + unsigned int rcvrlen = sizeof(rcvr); + unsigned char format[8], line_name[10]; + unsigned char mac_addr[sizeof(rcvr.loca_adapter_address)]; + int c[6]; + + /* format is input parameter 3 to QDCRLIND */ + iconv_a2e("LIND0500", format, sizeof(format)); + + /* line_name is input parameter 4 to QDCRLIND */ + iconv_a2e(line, line_name, sizeof(line_name)); + + /* err is input parameter 5 to QDCRLIND */ + errcode_s err; + + /* qwcrssts_pointer is the 16-byte tagged system pointer to QDCRLIND */ + ILEpointer __attribute__((aligned(16))) qdcrlind_pointer; + + /* qwcrssts_argv is the array of argument pointers to QDCRLIND */ + void* qdcrlind_argv[6]; + + /* Set the IBM i pointer to the QSYS/QDCRLIND *PGM object */ + int rc = _RSLOBJ2(&qdcrlind_pointer, RSLOBJ_TS_PGM, "QDCRLIND", "QSYS"); + + if (rc != 0) + return rc; + + /* initialize the QDCRLIND returned info structure */ + memset(&rcvr, 0, sizeof(rcvr)); + + /* initialize the QDCRLIND error code structure */ + memset(&err, 0, sizeof(err)); + err.bytes_provided = sizeof(err); + + /* initialize the array of argument pointers for the QDCRLIND API */ + qdcrlind_argv[0] = &rcvr; + qdcrlind_argv[1] = &rcvrlen; + qdcrlind_argv[2] = &format; + qdcrlind_argv[3] = &line_name; + qdcrlind_argv[4] = &err; + qdcrlind_argv[5] = NULL; + + /* Call the IBM i QDCRLIND API from PASE */ + rc = _PGMCALL(&qdcrlind_pointer, qdcrlind_argv, 0); + if (rc != 0) + return rc; + + /* convert ebcdic loca_adapter_address to ascii first */ + iconv_e2a(rcvr.loca_adapter_address, mac_addr, + sizeof(rcvr.loca_adapter_address)); + + /* convert loca_adapter_address(char[12]) to phys_addr(char[6]) */ + int r = sscanf(mac_addr, "%02x%02x%02x%02x%02x%02x", + &c[0], &c[1], &c[2], &c[3], &c[4], &c[5]); + + if (r == ARRAY_SIZE(c)) { + (*phys_addr)[0] = c[0]; + (*phys_addr)[1] = c[1]; + (*phys_addr)[2] = c[2]; + (*phys_addr)[3] = c[3]; + (*phys_addr)[4] = c[4]; + (*phys_addr)[5] = c[5]; + } else { + memset(*phys_addr, 0, sizeof(*phys_addr)); + rc = -1; + } + return rc; +} + + +int uv_interface_addresses(uv_interface_address_t** addresses, int* count) { + uv_interface_address_t* address; + struct ifaddrs_pase *ifap = NULL, *cur; + int inet6, r = 0; + + *count = 0; + *addresses = NULL; + + if (Qp2getifaddrs(&ifap)) + return UV_ENOSYS; + + /* The first loop to get the size of the array to be allocated */ + for (cur = ifap; cur; cur = cur->ifa_next) { + if (!(cur->ifa_addr->sa_family == AF_INET6 || + cur->ifa_addr->sa_family == AF_INET)) + continue; + + if (!(cur->ifa_flags & IFF_UP && cur->ifa_flags & IFF_RUNNING)) + continue; + + (*count)++; + } + + if (*count == 0) { + Qp2freeifaddrs(ifap); + return 0; + } + + /* Alloc the return interface structs */ + *addresses = uv__calloc(*count, sizeof(**addresses)); + if (*addresses == NULL) { + Qp2freeifaddrs(ifap); + return UV_ENOMEM; + } + address = *addresses; + + /* The second loop to fill in the array */ + for (cur = ifap; cur; cur = cur->ifa_next) { + if (!(cur->ifa_addr->sa_family == AF_INET6 || + cur->ifa_addr->sa_family == AF_INET)) + continue; + + if (!(cur->ifa_flags & IFF_UP && cur->ifa_flags & IFF_RUNNING)) + continue; + + address->name = uv__strdup(cur->ifa_name); + + inet6 = (cur->ifa_addr->sa_family == AF_INET6); + + if (inet6) { + address->address.address6 = *((struct sockaddr_in6*)cur->ifa_addr); + address->netmask.netmask6 = *((struct sockaddr_in6*)cur->ifa_netmask); + address->netmask.netmask6.sin6_family = AF_INET6; + } else { + address->address.address4 = *((struct sockaddr_in*)cur->ifa_addr); + address->netmask.netmask4 = *((struct sockaddr_in*)cur->ifa_netmask); + address->netmask.netmask4.sin_family = AF_INET; + } + address->is_internal = cur->ifa_flags & IFF_LOOPBACK ? 1 : 0; + if (!address->is_internal) { + int rc = get_ibmi_physical_address(address->name, &address->phys_addr); + if (rc != 0) + r = rc; + } + + address++; + } + + Qp2freeifaddrs(ifap); + return r; +} + + +void uv_free_interface_addresses(uv_interface_address_t* addresses, int count) { + int i; + + for (i = 0; i < count; ++i) { + uv__free(addresses[i].name); + } + + uv__free(addresses); +} diff --git a/external/libuv/src/unix/internal.h b/external/libuv/src/unix/internal.h new file mode 100644 index 000000000..402ee877d --- /dev/null +++ b/external/libuv/src/unix/internal.h @@ -0,0 +1,352 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#ifndef UV_UNIX_INTERNAL_H_ +#define UV_UNIX_INTERNAL_H_ + +#include "uv-common.h" + +#include +#include /* _POSIX_PATH_MAX, PATH_MAX */ +#include /* abort */ +#include /* strrchr */ +#include /* O_CLOEXEC and O_NONBLOCK, if supported. */ +#include +#include +#include + +#if defined(__STRICT_ANSI__) +# define inline __inline +#endif + +#if defined(__linux__) +# include "linux-syscalls.h" +#endif /* __linux__ */ + +#if defined(__MVS__) +# include "os390-syscalls.h" +#endif /* __MVS__ */ + +#if defined(__sun) +# include +# include +#endif /* __sun */ + +#if defined(_AIX) +# define reqevents events +# define rtnevents revents +# include +#else +# include +#endif /* _AIX */ + +#if defined(__APPLE__) && !TARGET_OS_IPHONE +# include +#endif + +#if defined(_POSIX_PATH_MAX) +# define UV__PATH_MAX _POSIX_PATH_MAX +#elif defined(PATH_MAX) +# define UV__PATH_MAX PATH_MAX +#else +# define UV__PATH_MAX 8192 +#endif + +#if defined(__ANDROID__) +int uv__pthread_sigmask(int how, const sigset_t* set, sigset_t* oset); +# ifdef pthread_sigmask +# undef pthread_sigmask +# endif +# define pthread_sigmask(how, set, oldset) uv__pthread_sigmask(how, set, oldset) +#endif + +#define ACCESS_ONCE(type, var) \ + (*(volatile type*) &(var)) + +#define ROUND_UP(a, b) \ + ((a) % (b) ? ((a) + (b)) - ((a) % (b)) : (a)) + +#define UNREACHABLE() \ + do { \ + assert(0 && "unreachable code"); \ + abort(); \ + } \ + while (0) + +#define SAVE_ERRNO(block) \ + do { \ + int _saved_errno = errno; \ + do { block; } while (0); \ + errno = _saved_errno; \ + } \ + while (0) + +/* The __clang__ and __INTEL_COMPILER checks are superfluous because they + * define __GNUC__. They are here to convey to you, dear reader, that these + * macros are enabled when compiling with clang or icc. + */ +#if defined(__clang__) || \ + defined(__GNUC__) || \ + defined(__INTEL_COMPILER) +# define UV_UNUSED(declaration) __attribute__((unused)) declaration +#else +# define UV_UNUSED(declaration) declaration +#endif + +/* Leans on the fact that, on Linux, POLLRDHUP == EPOLLRDHUP. */ +#ifdef POLLRDHUP +# define UV__POLLRDHUP POLLRDHUP +#else +# define UV__POLLRDHUP 0x2000 +#endif + +#ifdef POLLPRI +# define UV__POLLPRI POLLPRI +#else +# define UV__POLLPRI 0 +#endif + +#if !defined(O_CLOEXEC) && defined(__FreeBSD__) +/* + * It may be that we are just missing `__POSIX_VISIBLE >= 200809`. + * Try using fixed value const and give up, if it doesn't work + */ +# define O_CLOEXEC 0x00100000 +#endif + +typedef struct uv__stream_queued_fds_s uv__stream_queued_fds_t; + +/* loop flags */ +enum { + UV_LOOP_BLOCK_SIGPROF = 1 +}; + +/* flags of excluding ifaddr */ +enum { + UV__EXCLUDE_IFPHYS, + UV__EXCLUDE_IFADDR +}; + +typedef enum { + UV_CLOCK_PRECISE = 0, /* Use the highest resolution clock available. */ + UV_CLOCK_FAST = 1 /* Use the fastest clock with <= 1ms granularity. */ +} uv_clocktype_t; + +struct uv__stream_queued_fds_s { + unsigned int size; + unsigned int offset; + int fds[1]; +}; + + +#if defined(_AIX) || \ + defined(__APPLE__) || \ + defined(__DragonFly__) || \ + defined(__FreeBSD__) || \ + defined(__FreeBSD_kernel__) || \ + defined(__linux__) || \ + defined(__OpenBSD__) || \ + defined(__NetBSD__) +#define uv__cloexec uv__cloexec_ioctl +#define uv__nonblock uv__nonblock_ioctl +#else +#define uv__cloexec uv__cloexec_fcntl +#define uv__nonblock uv__nonblock_fcntl +#endif + +/* On Linux, uv__nonblock_fcntl() and uv__nonblock_ioctl() do not commute + * when O_NDELAY is not equal to O_NONBLOCK. Case in point: linux/sparc32 + * and linux/sparc64, where O_NDELAY is O_NONBLOCK + another bit. + * + * Libuv uses uv__nonblock_fcntl() directly sometimes so ensure that it + * commutes with uv__nonblock(). + */ +#if defined(__linux__) && O_NDELAY != O_NONBLOCK +#undef uv__nonblock +#define uv__nonblock uv__nonblock_fcntl +#endif + +/* core */ +int uv__cloexec_ioctl(int fd, int set); +int uv__cloexec_fcntl(int fd, int set); +int uv__nonblock_ioctl(int fd, int set); +int uv__nonblock_fcntl(int fd, int set); +int uv__close(int fd); /* preserves errno */ +int uv__close_nocheckstdio(int fd); +int uv__close_nocancel(int fd); +int uv__socket(int domain, int type, int protocol); +ssize_t uv__recvmsg(int fd, struct msghdr *msg, int flags); +void uv__make_close_pending(uv_handle_t* handle); +int uv__getiovmax(void); + +void uv__io_init(uv__io_t* w, uv__io_cb cb, int fd); +void uv__io_start(uv_loop_t* loop, uv__io_t* w, unsigned int events); +void uv__io_stop(uv_loop_t* loop, uv__io_t* w, unsigned int events); +void uv__io_close(uv_loop_t* loop, uv__io_t* w); +void uv__io_feed(uv_loop_t* loop, uv__io_t* w); +int uv__io_active(const uv__io_t* w, unsigned int events); +int uv__io_check_fd(uv_loop_t* loop, int fd); +void uv__io_poll(uv_loop_t* loop, int timeout); /* in milliseconds or -1 */ +int uv__io_fork(uv_loop_t* loop); +int uv__fd_exists(uv_loop_t* loop, int fd); + +/* async */ +void uv__async_stop(uv_loop_t* loop); +int uv__async_fork(uv_loop_t* loop); + + +/* loop */ +void uv__run_idle(uv_loop_t* loop); +void uv__run_check(uv_loop_t* loop); +void uv__run_prepare(uv_loop_t* loop); + +/* stream */ +void uv__stream_init(uv_loop_t* loop, uv_stream_t* stream, + uv_handle_type type); +int uv__stream_open(uv_stream_t*, int fd, int flags); +void uv__stream_destroy(uv_stream_t* stream); +#if defined(__APPLE__) +int uv__stream_try_select(uv_stream_t* stream, int* fd); +#endif /* defined(__APPLE__) */ +void uv__server_io(uv_loop_t* loop, uv__io_t* w, unsigned int events); +int uv__accept(int sockfd); +int uv__dup2_cloexec(int oldfd, int newfd); +int uv__open_cloexec(const char* path, int flags); + +/* tcp */ +int uv_tcp_listen(uv_tcp_t* tcp, int backlog, uv_connection_cb cb); +int uv__tcp_nodelay(int fd, int on); +int uv__tcp_keepalive(int fd, int on, unsigned int delay); + +/* pipe */ +int uv_pipe_listen(uv_pipe_t* handle, int backlog, uv_connection_cb cb); + +/* signal */ +void uv__signal_close(uv_signal_t* handle); +void uv__signal_global_once_init(void); +void uv__signal_loop_cleanup(uv_loop_t* loop); +int uv__signal_loop_fork(uv_loop_t* loop); + +/* platform specific */ +uint64_t uv__hrtime(uv_clocktype_t type); +int uv__kqueue_init(uv_loop_t* loop); +int uv__platform_loop_init(uv_loop_t* loop); +void uv__platform_loop_delete(uv_loop_t* loop); +void uv__platform_invalidate_fd(uv_loop_t* loop, int fd); + +/* various */ +void uv__async_close(uv_async_t* handle); +void uv__check_close(uv_check_t* handle); +void uv__fs_event_close(uv_fs_event_t* handle); +void uv__idle_close(uv_idle_t* handle); +void uv__pipe_close(uv_pipe_t* handle); +void uv__poll_close(uv_poll_t* handle); +void uv__prepare_close(uv_prepare_t* handle); +void uv__process_close(uv_process_t* handle); +void uv__stream_close(uv_stream_t* handle); +void uv__tcp_close(uv_tcp_t* handle); +void uv__udp_close(uv_udp_t* handle); +void uv__udp_finish_close(uv_udp_t* handle); +uv_handle_type uv__handle_type(int fd); +FILE* uv__open_file(const char* path); +int uv__getpwuid_r(uv_passwd_t* pwd); + +/* random */ +int uv__random_devurandom(void* buf, size_t buflen); +int uv__random_getrandom(void* buf, size_t buflen); +int uv__random_getentropy(void* buf, size_t buflen); +int uv__random_readpath(const char* path, void* buf, size_t buflen); +int uv__random_sysctl(void* buf, size_t buflen); + +#if defined(__APPLE__) +int uv___stream_fd(const uv_stream_t* handle); +#define uv__stream_fd(handle) (uv___stream_fd((const uv_stream_t*) (handle))) +#else +#define uv__stream_fd(handle) ((handle)->io_watcher.fd) +#endif /* defined(__APPLE__) */ + +#ifdef O_NONBLOCK +# define UV__F_NONBLOCK O_NONBLOCK +#else +# define UV__F_NONBLOCK 1 +#endif + +int uv__make_pipe(int fds[2], int flags); + +#if defined(__APPLE__) + +int uv__fsevents_init(uv_fs_event_t* handle); +int uv__fsevents_close(uv_fs_event_t* handle); +void uv__fsevents_loop_delete(uv_loop_t* loop); + +#endif /* defined(__APPLE__) */ + +UV_UNUSED(static void uv__update_time(uv_loop_t* loop)) { + /* Use a fast time source if available. We only need millisecond precision. + */ + loop->time = uv__hrtime(UV_CLOCK_FAST) / 1000000; +} + +UV_UNUSED(static char* uv__basename_r(const char* path)) { + char* s; + + s = strrchr(path, '/'); + if (s == NULL) + return (char*) path; + + return s + 1; +} + +#if defined(__linux__) +int uv__inotify_fork(uv_loop_t* loop, void* old_watchers); +#endif + +typedef int (*uv__peersockfunc)(int, struct sockaddr*, socklen_t*); + +int uv__getsockpeername(const uv_handle_t* handle, + uv__peersockfunc func, + struct sockaddr* name, + int* namelen); + +#if defined(__linux__) || \ + defined(__FreeBSD__) || \ + defined(__FreeBSD_kernel__) +#define HAVE_MMSG 1 +struct uv__mmsghdr { + struct msghdr msg_hdr; + unsigned int msg_len; +}; + +int uv__recvmmsg(int fd, + struct uv__mmsghdr* mmsg, + unsigned int vlen, + unsigned int flags, + struct timespec* timeout); +int uv__sendmmsg(int fd, + struct uv__mmsghdr* mmsg, + unsigned int vlen, + unsigned int flags); +#else +#define HAVE_MMSG 0 +#endif + + +#endif /* UV_UNIX_INTERNAL_H_ */ diff --git a/external/libuv/src/unix/kqueue.c b/external/libuv/src/unix/kqueue.c new file mode 100644 index 000000000..ad09f4031 --- /dev/null +++ b/external/libuv/src/unix/kqueue.c @@ -0,0 +1,544 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#include "uv.h" +#include "internal.h" + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +/* + * Required on + * - Until at least FreeBSD 11.0 + * - Older versions of Mac OS X + * + * http://www.boost.org/doc/libs/1_61_0/boost/asio/detail/kqueue_reactor.hpp + */ +#ifndef EV_OOBAND +#define EV_OOBAND EV_FLAG1 +#endif + +static void uv__fs_event(uv_loop_t* loop, uv__io_t* w, unsigned int fflags); + + +int uv__kqueue_init(uv_loop_t* loop) { + loop->backend_fd = kqueue(); + if (loop->backend_fd == -1) + return UV__ERR(errno); + + uv__cloexec(loop->backend_fd, 1); + + return 0; +} + + +#if defined(__APPLE__) && MAC_OS_X_VERSION_MAX_ALLOWED >= 1070 +static int uv__has_forked_with_cfrunloop; +#endif + +int uv__io_fork(uv_loop_t* loop) { + int err; + loop->backend_fd = -1; + err = uv__kqueue_init(loop); + if (err) + return err; + +#if defined(__APPLE__) && MAC_OS_X_VERSION_MAX_ALLOWED >= 1070 + if (loop->cf_state != NULL) { + /* We cannot start another CFRunloop and/or thread in the child + process; CF aborts if you try or if you try to touch the thread + at all to kill it. So the best we can do is ignore it from now + on. This means we can't watch directories in the same way + anymore (like other BSDs). It also means we cannot properly + clean up the allocated resources; calling + uv__fsevents_loop_delete from uv_loop_close will crash the + process. So we sidestep the issue by pretending like we never + started it in the first place. + */ + uv__has_forked_with_cfrunloop = 1; + uv__free(loop->cf_state); + loop->cf_state = NULL; + } +#endif /* #if defined(__APPLE__) && MAC_OS_X_VERSION_MAX_ALLOWED >= 1070 */ + return err; +} + + +int uv__io_check_fd(uv_loop_t* loop, int fd) { + struct kevent ev; + int rc; + + rc = 0; + EV_SET(&ev, fd, EVFILT_READ, EV_ADD, 0, 0, 0); + if (kevent(loop->backend_fd, &ev, 1, NULL, 0, NULL)) + rc = UV__ERR(errno); + + EV_SET(&ev, fd, EVFILT_READ, EV_DELETE, 0, 0, 0); + if (rc == 0) + if (kevent(loop->backend_fd, &ev, 1, NULL, 0, NULL)) + abort(); + + return rc; +} + + +void uv__io_poll(uv_loop_t* loop, int timeout) { + struct kevent events[1024]; + struct kevent* ev; + struct timespec spec; + unsigned int nevents; + unsigned int revents; + QUEUE* q; + uv__io_t* w; + sigset_t* pset; + sigset_t set; + uint64_t base; + uint64_t diff; + int have_signals; + int filter; + int fflags; + int count; + int nfds; + int fd; + int op; + int i; + + if (loop->nfds == 0) { + assert(QUEUE_EMPTY(&loop->watcher_queue)); + return; + } + + nevents = 0; + + while (!QUEUE_EMPTY(&loop->watcher_queue)) { + q = QUEUE_HEAD(&loop->watcher_queue); + QUEUE_REMOVE(q); + QUEUE_INIT(q); + + w = QUEUE_DATA(q, uv__io_t, watcher_queue); + assert(w->pevents != 0); + assert(w->fd >= 0); + assert(w->fd < (int) loop->nwatchers); + + if ((w->events & POLLIN) == 0 && (w->pevents & POLLIN) != 0) { + filter = EVFILT_READ; + fflags = 0; + op = EV_ADD; + + if (w->cb == uv__fs_event) { + filter = EVFILT_VNODE; + fflags = NOTE_ATTRIB | NOTE_WRITE | NOTE_RENAME + | NOTE_DELETE | NOTE_EXTEND | NOTE_REVOKE; + op = EV_ADD | EV_ONESHOT; /* Stop the event from firing repeatedly. */ + } + + EV_SET(events + nevents, w->fd, filter, op, fflags, 0, 0); + + if (++nevents == ARRAY_SIZE(events)) { + if (kevent(loop->backend_fd, events, nevents, NULL, 0, NULL)) + abort(); + nevents = 0; + } + } + + if ((w->events & POLLOUT) == 0 && (w->pevents & POLLOUT) != 0) { + EV_SET(events + nevents, w->fd, EVFILT_WRITE, EV_ADD, 0, 0, 0); + + if (++nevents == ARRAY_SIZE(events)) { + if (kevent(loop->backend_fd, events, nevents, NULL, 0, NULL)) + abort(); + nevents = 0; + } + } + + if ((w->events & UV__POLLPRI) == 0 && (w->pevents & UV__POLLPRI) != 0) { + EV_SET(events + nevents, w->fd, EV_OOBAND, EV_ADD, 0, 0, 0); + + if (++nevents == ARRAY_SIZE(events)) { + if (kevent(loop->backend_fd, events, nevents, NULL, 0, NULL)) + abort(); + nevents = 0; + } + } + + w->events = w->pevents; + } + + pset = NULL; + if (loop->flags & UV_LOOP_BLOCK_SIGPROF) { + pset = &set; + sigemptyset(pset); + sigaddset(pset, SIGPROF); + } + + assert(timeout >= -1); + base = loop->time; + count = 48; /* Benchmarks suggest this gives the best throughput. */ + + for (;; nevents = 0) { + if (timeout != -1) { + spec.tv_sec = timeout / 1000; + spec.tv_nsec = (timeout % 1000) * 1000000; + } + + if (pset != NULL) + pthread_sigmask(SIG_BLOCK, pset, NULL); + + nfds = kevent(loop->backend_fd, + events, + nevents, + events, + ARRAY_SIZE(events), + timeout == -1 ? NULL : &spec); + + if (pset != NULL) + pthread_sigmask(SIG_UNBLOCK, pset, NULL); + + /* Update loop->time unconditionally. It's tempting to skip the update when + * timeout == 0 (i.e. non-blocking poll) but there is no guarantee that the + * operating system didn't reschedule our process while in the syscall. + */ + SAVE_ERRNO(uv__update_time(loop)); + + if (nfds == 0) { + assert(timeout != -1); + return; + } + + if (nfds == -1) { + if (errno != EINTR) + abort(); + + if (timeout == 0) + return; + + if (timeout == -1) + continue; + + /* Interrupted by a signal. Update timeout and poll again. */ + goto update_timeout; + } + + have_signals = 0; + nevents = 0; + + assert(loop->watchers != NULL); + loop->watchers[loop->nwatchers] = (void*) events; + loop->watchers[loop->nwatchers + 1] = (void*) (uintptr_t) nfds; + for (i = 0; i < nfds; i++) { + ev = events + i; + fd = ev->ident; + /* Skip invalidated events, see uv__platform_invalidate_fd */ + if (fd == -1) + continue; + w = loop->watchers[fd]; + + if (w == NULL) { + /* File descriptor that we've stopped watching, disarm it. + * TODO: batch up. */ + struct kevent events[1]; + + EV_SET(events + 0, fd, ev->filter, EV_DELETE, 0, 0, 0); + if (kevent(loop->backend_fd, events, 1, NULL, 0, NULL)) + if (errno != EBADF && errno != ENOENT) + abort(); + + continue; + } + + if (ev->filter == EVFILT_VNODE) { + assert(w->events == POLLIN); + assert(w->pevents == POLLIN); + w->cb(loop, w, ev->fflags); /* XXX always uv__fs_event() */ + nevents++; + continue; + } + + revents = 0; + + if (ev->filter == EVFILT_READ) { + if (w->pevents & POLLIN) { + revents |= POLLIN; + w->rcount = ev->data; + } else { + /* TODO batch up */ + struct kevent events[1]; + EV_SET(events + 0, fd, ev->filter, EV_DELETE, 0, 0, 0); + if (kevent(loop->backend_fd, events, 1, NULL, 0, NULL)) + if (errno != ENOENT) + abort(); + } + } + + if (ev->filter == EV_OOBAND) { + if (w->pevents & UV__POLLPRI) { + revents |= UV__POLLPRI; + w->rcount = ev->data; + } else { + /* TODO batch up */ + struct kevent events[1]; + EV_SET(events + 0, fd, ev->filter, EV_DELETE, 0, 0, 0); + if (kevent(loop->backend_fd, events, 1, NULL, 0, NULL)) + if (errno != ENOENT) + abort(); + } + } + + if (ev->filter == EVFILT_WRITE) { + if (w->pevents & POLLOUT) { + revents |= POLLOUT; + w->wcount = ev->data; + } else { + /* TODO batch up */ + struct kevent events[1]; + EV_SET(events + 0, fd, ev->filter, EV_DELETE, 0, 0, 0); + if (kevent(loop->backend_fd, events, 1, NULL, 0, NULL)) + if (errno != ENOENT) + abort(); + } + } + + if (ev->flags & EV_ERROR) + revents |= POLLERR; + + if ((ev->flags & EV_EOF) && (w->pevents & UV__POLLRDHUP)) + revents |= UV__POLLRDHUP; + + if (revents == 0) + continue; + + /* Run signal watchers last. This also affects child process watchers + * because those are implemented in terms of signal watchers. + */ + if (w == &loop->signal_io_watcher) + have_signals = 1; + else + w->cb(loop, w, revents); + + nevents++; + } + + if (have_signals != 0) + loop->signal_io_watcher.cb(loop, &loop->signal_io_watcher, POLLIN); + + loop->watchers[loop->nwatchers] = NULL; + loop->watchers[loop->nwatchers + 1] = NULL; + + if (have_signals != 0) + return; /* Event loop should cycle now so don't poll again. */ + + if (nevents != 0) { + if (nfds == ARRAY_SIZE(events) && --count != 0) { + /* Poll for more events but don't block this time. */ + timeout = 0; + continue; + } + return; + } + + if (timeout == 0) + return; + + if (timeout == -1) + continue; + +update_timeout: + assert(timeout > 0); + + diff = loop->time - base; + if (diff >= (uint64_t) timeout) + return; + + timeout -= diff; + } +} + + +void uv__platform_invalidate_fd(uv_loop_t* loop, int fd) { + struct kevent* events; + uintptr_t i; + uintptr_t nfds; + + assert(loop->watchers != NULL); + assert(fd >= 0); + + events = (struct kevent*) loop->watchers[loop->nwatchers]; + nfds = (uintptr_t) loop->watchers[loop->nwatchers + 1]; + if (events == NULL) + return; + + /* Invalidate events with same file descriptor */ + for (i = 0; i < nfds; i++) + if ((int) events[i].ident == fd) + events[i].ident = -1; +} + + +static void uv__fs_event(uv_loop_t* loop, uv__io_t* w, unsigned int fflags) { + uv_fs_event_t* handle; + struct kevent ev; + int events; + const char* path; +#if defined(F_GETPATH) + /* MAXPATHLEN == PATH_MAX but the former is what XNU calls it internally. */ + char pathbuf[MAXPATHLEN]; +#endif + + handle = container_of(w, uv_fs_event_t, event_watcher); + + if (fflags & (NOTE_ATTRIB | NOTE_EXTEND)) + events = UV_CHANGE; + else + events = UV_RENAME; + + path = NULL; +#if defined(F_GETPATH) + /* Also works when the file has been unlinked from the file system. Passing + * in the path when the file has been deleted is arguably a little strange + * but it's consistent with what the inotify backend does. + */ + if (fcntl(handle->event_watcher.fd, F_GETPATH, pathbuf) == 0) + path = uv__basename_r(pathbuf); +#endif + handle->cb(handle, path, events, 0); + + if (handle->event_watcher.fd == -1) + return; + + /* Watcher operates in one-shot mode, re-arm it. */ + fflags = NOTE_ATTRIB | NOTE_WRITE | NOTE_RENAME + | NOTE_DELETE | NOTE_EXTEND | NOTE_REVOKE; + + EV_SET(&ev, w->fd, EVFILT_VNODE, EV_ADD | EV_ONESHOT, fflags, 0, 0); + + if (kevent(loop->backend_fd, &ev, 1, NULL, 0, NULL)) + abort(); +} + + +int uv_fs_event_init(uv_loop_t* loop, uv_fs_event_t* handle) { + uv__handle_init(loop, (uv_handle_t*)handle, UV_FS_EVENT); + return 0; +} + + +int uv_fs_event_start(uv_fs_event_t* handle, + uv_fs_event_cb cb, + const char* path, + unsigned int flags) { + int fd; +#if defined(__APPLE__) && MAC_OS_X_VERSION_MAX_ALLOWED >= 1070 + struct stat statbuf; +#endif + + if (uv__is_active(handle)) + return UV_EINVAL; + + handle->cb = cb; + handle->path = uv__strdup(path); + if (handle->path == NULL) + return UV_ENOMEM; + + /* TODO open asynchronously - but how do we report back errors? */ + fd = open(handle->path, O_RDONLY); + if (fd == -1) { + uv__free(handle->path); + handle->path = NULL; + return UV__ERR(errno); + } + +#if defined(__APPLE__) && MAC_OS_X_VERSION_MAX_ALLOWED >= 1070 + /* Nullify field to perform checks later */ + handle->cf_cb = NULL; + handle->realpath = NULL; + handle->realpath_len = 0; + handle->cf_flags = flags; + + if (fstat(fd, &statbuf)) + goto fallback; + /* FSEvents works only with directories */ + if (!(statbuf.st_mode & S_IFDIR)) + goto fallback; + + if (!uv__has_forked_with_cfrunloop) { + int r; + /* The fallback fd is no longer needed */ + uv__close_nocheckstdio(fd); + handle->event_watcher.fd = -1; + r = uv__fsevents_init(handle); + if (r == 0) { + uv__handle_start(handle); + } else { + uv__free(handle->path); + handle->path = NULL; + } + return r; + } +fallback: +#endif /* #if defined(__APPLE__) && MAC_OS_X_VERSION_MAX_ALLOWED >= 1070 */ + + uv__handle_start(handle); + uv__io_init(&handle->event_watcher, uv__fs_event, fd); + uv__io_start(handle->loop, &handle->event_watcher, POLLIN); + + return 0; +} + + +int uv_fs_event_stop(uv_fs_event_t* handle) { + int r; + r = 0; + + if (!uv__is_active(handle)) + return 0; + + uv__handle_stop(handle); + +#if defined(__APPLE__) && MAC_OS_X_VERSION_MAX_ALLOWED >= 1070 + if (!uv__has_forked_with_cfrunloop && handle->cf_cb != NULL) + r = uv__fsevents_close(handle); +#endif + + if (handle->event_watcher.fd != -1) { + uv__io_close(handle->loop, &handle->event_watcher); + uv__close(handle->event_watcher.fd); + handle->event_watcher.fd = -1; + } + + uv__free(handle->path); + handle->path = NULL; + + return r; +} + + +void uv__fs_event_close(uv_fs_event_t* handle) { + uv_fs_event_stop(handle); +} diff --git a/external/libuv/src/unix/linux-core.c b/external/libuv/src/unix/linux-core.c new file mode 100644 index 000000000..99cbb1c8f --- /dev/null +++ b/external/libuv/src/unix/linux-core.c @@ -0,0 +1,1093 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +/* We lean on the fact that POLL{IN,OUT,ERR,HUP} correspond with their + * EPOLL* counterparts. We use the POLL* variants in this file because that + * is what libuv uses elsewhere. + */ + +#include "uv.h" +#include "internal.h" + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#define HAVE_IFADDRS_H 1 + +#ifdef __UCLIBC__ +# if __UCLIBC_MAJOR__ < 0 && __UCLIBC_MINOR__ < 9 && __UCLIBC_SUBLEVEL__ < 32 +# undef HAVE_IFADDRS_H +# endif +#endif + +#ifdef HAVE_IFADDRS_H +# if defined(__ANDROID__) +# include "uv/android-ifaddrs.h" +# else +# include +# endif +# include +# include +# include +#endif /* HAVE_IFADDRS_H */ + +/* Available from 2.6.32 onwards. */ +#ifndef CLOCK_MONOTONIC_COARSE +# define CLOCK_MONOTONIC_COARSE 6 +#endif + +/* This is rather annoying: CLOCK_BOOTTIME lives in but we can't + * include that file because it conflicts with . We'll just have to + * define it ourselves. + */ +#ifndef CLOCK_BOOTTIME +# define CLOCK_BOOTTIME 7 +#endif + +static int read_models(unsigned int numcpus, uv_cpu_info_t* ci); +static int read_times(FILE* statfile_fp, + unsigned int numcpus, + uv_cpu_info_t* ci); +static void read_speeds(unsigned int numcpus, uv_cpu_info_t* ci); +static uint64_t read_cpufreq(unsigned int cpunum); + + +int uv__platform_loop_init(uv_loop_t* loop) { + int fd; + + /* It was reported that EPOLL_CLOEXEC is not defined on Android API < 21, + * a.k.a. Lollipop. Since EPOLL_CLOEXEC is an alias for O_CLOEXEC on all + * architectures, we just use that instead. + */ +#if defined(__ANDROID_API__) && __ANDROID_API__ < 21 + fd = -1; + errno = ENOSYS; +#else + fd = epoll_create1(O_CLOEXEC); +#endif + + /* epoll_create1() can fail either because it's not implemented (old kernel) + * or because it doesn't understand the O_CLOEXEC flag. + */ + if (fd == -1 && (errno == ENOSYS || errno == EINVAL)) { + fd = epoll_create(256); + + if (fd != -1) + uv__cloexec(fd, 1); + } + + loop->backend_fd = fd; + loop->inotify_fd = -1; + loop->inotify_watchers = NULL; + + if (fd == -1) + return UV__ERR(errno); + + return 0; +} + + +int uv__io_fork(uv_loop_t* loop) { + int err; + void* old_watchers; + + old_watchers = loop->inotify_watchers; + + uv__close(loop->backend_fd); + loop->backend_fd = -1; + uv__platform_loop_delete(loop); + + err = uv__platform_loop_init(loop); + if (err) + return err; + + return uv__inotify_fork(loop, old_watchers); +} + + +void uv__platform_loop_delete(uv_loop_t* loop) { + if (loop->inotify_fd == -1) return; + uv__io_stop(loop, &loop->inotify_read_watcher, POLLIN); + uv__close(loop->inotify_fd); + loop->inotify_fd = -1; +} + + +void uv__platform_invalidate_fd(uv_loop_t* loop, int fd) { + struct epoll_event* events; + struct epoll_event dummy; + uintptr_t i; + uintptr_t nfds; + + assert(loop->watchers != NULL); + assert(fd >= 0); + + events = (struct epoll_event*) loop->watchers[loop->nwatchers]; + nfds = (uintptr_t) loop->watchers[loop->nwatchers + 1]; + if (events != NULL) + /* Invalidate events with same file descriptor */ + for (i = 0; i < nfds; i++) + if (events[i].data.fd == fd) + events[i].data.fd = -1; + + /* Remove the file descriptor from the epoll. + * This avoids a problem where the same file description remains open + * in another process, causing repeated junk epoll events. + * + * We pass in a dummy epoll_event, to work around a bug in old kernels. + */ + if (loop->backend_fd >= 0) { + /* Work around a bug in kernels 3.10 to 3.19 where passing a struct that + * has the EPOLLWAKEUP flag set generates spurious audit syslog warnings. + */ + memset(&dummy, 0, sizeof(dummy)); + epoll_ctl(loop->backend_fd, EPOLL_CTL_DEL, fd, &dummy); + } +} + + +int uv__io_check_fd(uv_loop_t* loop, int fd) { + struct epoll_event e; + int rc; + + memset(&e, 0, sizeof(e)); + e.events = POLLIN; + e.data.fd = -1; + + rc = 0; + if (epoll_ctl(loop->backend_fd, EPOLL_CTL_ADD, fd, &e)) + if (errno != EEXIST) + rc = UV__ERR(errno); + + if (rc == 0) + if (epoll_ctl(loop->backend_fd, EPOLL_CTL_DEL, fd, &e)) + abort(); + + return rc; +} + + +void uv__io_poll(uv_loop_t* loop, int timeout) { + /* A bug in kernels < 2.6.37 makes timeouts larger than ~30 minutes + * effectively infinite on 32 bits architectures. To avoid blocking + * indefinitely, we cap the timeout and poll again if necessary. + * + * Note that "30 minutes" is a simplification because it depends on + * the value of CONFIG_HZ. The magic constant assumes CONFIG_HZ=1200, + * that being the largest value I have seen in the wild (and only once.) + */ + static const int max_safe_timeout = 1789569; + static int no_epoll_pwait; + static int no_epoll_wait; + struct epoll_event events[1024]; + struct epoll_event* pe; + struct epoll_event e; + int real_timeout; + QUEUE* q; + uv__io_t* w; + sigset_t sigset; + uint64_t sigmask; + uint64_t base; + int have_signals; + int nevents; + int count; + int nfds; + int fd; + int op; + int i; + + if (loop->nfds == 0) { + assert(QUEUE_EMPTY(&loop->watcher_queue)); + return; + } + + memset(&e, 0, sizeof(e)); + + while (!QUEUE_EMPTY(&loop->watcher_queue)) { + q = QUEUE_HEAD(&loop->watcher_queue); + QUEUE_REMOVE(q); + QUEUE_INIT(q); + + w = QUEUE_DATA(q, uv__io_t, watcher_queue); + assert(w->pevents != 0); + assert(w->fd >= 0); + assert(w->fd < (int) loop->nwatchers); + + e.events = w->pevents; + e.data.fd = w->fd; + + if (w->events == 0) + op = EPOLL_CTL_ADD; + else + op = EPOLL_CTL_MOD; + + /* XXX Future optimization: do EPOLL_CTL_MOD lazily if we stop watching + * events, skip the syscall and squelch the events after epoll_wait(). + */ + if (epoll_ctl(loop->backend_fd, op, w->fd, &e)) { + if (errno != EEXIST) + abort(); + + assert(op == EPOLL_CTL_ADD); + + /* We've reactivated a file descriptor that's been watched before. */ + if (epoll_ctl(loop->backend_fd, EPOLL_CTL_MOD, w->fd, &e)) + abort(); + } + + w->events = w->pevents; + } + + sigmask = 0; + if (loop->flags & UV_LOOP_BLOCK_SIGPROF) { + sigemptyset(&sigset); + sigaddset(&sigset, SIGPROF); + sigmask |= 1 << (SIGPROF - 1); + } + + assert(timeout >= -1); + base = loop->time; + count = 48; /* Benchmarks suggest this gives the best throughput. */ + real_timeout = timeout; + + for (;;) { + /* See the comment for max_safe_timeout for an explanation of why + * this is necessary. Executive summary: kernel bug workaround. + */ + if (sizeof(int32_t) == sizeof(long) && timeout >= max_safe_timeout) + timeout = max_safe_timeout; + + if (sigmask != 0 && no_epoll_pwait != 0) + if (pthread_sigmask(SIG_BLOCK, &sigset, NULL)) + abort(); + + if (no_epoll_wait != 0 || (sigmask != 0 && no_epoll_pwait == 0)) { +#if defined(__ANDROID_API__) && __ANDROID_API__ < 21 + nfds = -1; + errno = ENOSYS; +#else + nfds = epoll_pwait(loop->backend_fd, + events, + ARRAY_SIZE(events), + timeout, + &sigset); +#endif + if (nfds == -1 && errno == ENOSYS) + no_epoll_pwait = 1; + } else { + nfds = epoll_wait(loop->backend_fd, + events, + ARRAY_SIZE(events), + timeout); + if (nfds == -1 && errno == ENOSYS) + no_epoll_wait = 1; + } + + if (sigmask != 0 && no_epoll_pwait != 0) + if (pthread_sigmask(SIG_UNBLOCK, &sigset, NULL)) + abort(); + + /* Update loop->time unconditionally. It's tempting to skip the update when + * timeout == 0 (i.e. non-blocking poll) but there is no guarantee that the + * operating system didn't reschedule our process while in the syscall. + */ + SAVE_ERRNO(uv__update_time(loop)); + + if (nfds == 0) { + assert(timeout != -1); + + if (timeout == 0) + return; + + /* We may have been inside the system call for longer than |timeout| + * milliseconds so we need to update the timestamp to avoid drift. + */ + goto update_timeout; + } + + if (nfds == -1) { + if (errno == ENOSYS) { + /* epoll_wait() or epoll_pwait() failed, try the other system call. */ + assert(no_epoll_wait == 0 || no_epoll_pwait == 0); + continue; + } + + if (errno != EINTR) + abort(); + + if (timeout == -1) + continue; + + if (timeout == 0) + return; + + /* Interrupted by a signal. Update timeout and poll again. */ + goto update_timeout; + } + + have_signals = 0; + nevents = 0; + + { + /* Squelch a -Waddress-of-packed-member warning with gcc >= 9. */ + union { + struct epoll_event* events; + uv__io_t* watchers; + } x; + + x.events = events; + assert(loop->watchers != NULL); + loop->watchers[loop->nwatchers] = x.watchers; + loop->watchers[loop->nwatchers + 1] = (void*) (uintptr_t) nfds; + } + + for (i = 0; i < nfds; i++) { + pe = events + i; + fd = pe->data.fd; + + /* Skip invalidated events, see uv__platform_invalidate_fd */ + if (fd == -1) + continue; + + assert(fd >= 0); + assert((unsigned) fd < loop->nwatchers); + + w = loop->watchers[fd]; + + if (w == NULL) { + /* File descriptor that we've stopped watching, disarm it. + * + * Ignore all errors because we may be racing with another thread + * when the file descriptor is closed. + */ + epoll_ctl(loop->backend_fd, EPOLL_CTL_DEL, fd, pe); + continue; + } + + /* Give users only events they're interested in. Prevents spurious + * callbacks when previous callback invocation in this loop has stopped + * the current watcher. Also, filters out events that users has not + * requested us to watch. + */ + pe->events &= w->pevents | POLLERR | POLLHUP; + + /* Work around an epoll quirk where it sometimes reports just the + * EPOLLERR or EPOLLHUP event. In order to force the event loop to + * move forward, we merge in the read/write events that the watcher + * is interested in; uv__read() and uv__write() will then deal with + * the error or hangup in the usual fashion. + * + * Note to self: happens when epoll reports EPOLLIN|EPOLLHUP, the user + * reads the available data, calls uv_read_stop(), then sometime later + * calls uv_read_start() again. By then, libuv has forgotten about the + * hangup and the kernel won't report EPOLLIN again because there's + * nothing left to read. If anything, libuv is to blame here. The + * current hack is just a quick bandaid; to properly fix it, libuv + * needs to remember the error/hangup event. We should get that for + * free when we switch over to edge-triggered I/O. + */ + if (pe->events == POLLERR || pe->events == POLLHUP) + pe->events |= + w->pevents & (POLLIN | POLLOUT | UV__POLLRDHUP | UV__POLLPRI); + + if (pe->events != 0) { + /* Run signal watchers last. This also affects child process watchers + * because those are implemented in terms of signal watchers. + */ + if (w == &loop->signal_io_watcher) + have_signals = 1; + else + w->cb(loop, w, pe->events); + + nevents++; + } + } + + if (have_signals != 0) + loop->signal_io_watcher.cb(loop, &loop->signal_io_watcher, POLLIN); + + loop->watchers[loop->nwatchers] = NULL; + loop->watchers[loop->nwatchers + 1] = NULL; + + if (have_signals != 0) + return; /* Event loop should cycle now so don't poll again. */ + + if (nevents != 0) { + if (nfds == ARRAY_SIZE(events) && --count != 0) { + /* Poll for more events but don't block this time. */ + timeout = 0; + continue; + } + return; + } + + if (timeout == 0) + return; + + if (timeout == -1) + continue; + +update_timeout: + assert(timeout > 0); + + real_timeout -= (loop->time - base); + if (real_timeout <= 0) + return; + + timeout = real_timeout; + } +} + + +uint64_t uv__hrtime(uv_clocktype_t type) { + static clock_t fast_clock_id = -1; + struct timespec t; + clock_t clock_id; + + /* Prefer CLOCK_MONOTONIC_COARSE if available but only when it has + * millisecond granularity or better. CLOCK_MONOTONIC_COARSE is + * serviced entirely from the vDSO, whereas CLOCK_MONOTONIC may + * decide to make a costly system call. + */ + /* TODO(bnoordhuis) Use CLOCK_MONOTONIC_COARSE for UV_CLOCK_PRECISE + * when it has microsecond granularity or better (unlikely). + */ + if (type == UV_CLOCK_FAST && fast_clock_id == -1) { + if (clock_getres(CLOCK_MONOTONIC_COARSE, &t) == 0 && + t.tv_nsec <= 1 * 1000 * 1000) { + fast_clock_id = CLOCK_MONOTONIC_COARSE; + } else { + fast_clock_id = CLOCK_MONOTONIC; + } + } + + clock_id = CLOCK_MONOTONIC; + if (type == UV_CLOCK_FAST) + clock_id = fast_clock_id; + + if (clock_gettime(clock_id, &t)) + return 0; /* Not really possible. */ + + return t.tv_sec * (uint64_t) 1e9 + t.tv_nsec; +} + + +int uv_resident_set_memory(size_t* rss) { + char buf[1024]; + const char* s; + ssize_t n; + long val; + int fd; + int i; + + do + fd = open("/proc/self/stat", O_RDONLY); + while (fd == -1 && errno == EINTR); + + if (fd == -1) + return UV__ERR(errno); + + do + n = read(fd, buf, sizeof(buf) - 1); + while (n == -1 && errno == EINTR); + + uv__close(fd); + if (n == -1) + return UV__ERR(errno); + buf[n] = '\0'; + + s = strchr(buf, ' '); + if (s == NULL) + goto err; + + s += 1; + if (*s != '(') + goto err; + + s = strchr(s, ')'); + if (s == NULL) + goto err; + + for (i = 1; i <= 22; i++) { + s = strchr(s + 1, ' '); + if (s == NULL) + goto err; + } + + errno = 0; + val = strtol(s, NULL, 10); + if (errno != 0) + goto err; + if (val < 0) + goto err; + + *rss = val * getpagesize(); + return 0; + +err: + return UV_EINVAL; +} + + +int uv_uptime(double* uptime) { + static volatile int no_clock_boottime; + struct timespec now; + int r; + + /* Try CLOCK_BOOTTIME first, fall back to CLOCK_MONOTONIC if not available + * (pre-2.6.39 kernels). CLOCK_MONOTONIC doesn't increase when the system + * is suspended. + */ + if (no_clock_boottime) { + retry: r = clock_gettime(CLOCK_MONOTONIC, &now); + } + else if ((r = clock_gettime(CLOCK_BOOTTIME, &now)) && errno == EINVAL) { + no_clock_boottime = 1; + goto retry; + } + + if (r) + return UV__ERR(errno); + + *uptime = now.tv_sec; + return 0; +} + + +static int uv__cpu_num(FILE* statfile_fp, unsigned int* numcpus) { + unsigned int num; + char buf[1024]; + + if (!fgets(buf, sizeof(buf), statfile_fp)) + return UV_EIO; + + num = 0; + while (fgets(buf, sizeof(buf), statfile_fp)) { + if (strncmp(buf, "cpu", 3)) + break; + num++; + } + + if (num == 0) + return UV_EIO; + + *numcpus = num; + return 0; +} + + +int uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) { + unsigned int numcpus; + uv_cpu_info_t* ci; + int err; + FILE* statfile_fp; + + *cpu_infos = NULL; + *count = 0; + + statfile_fp = uv__open_file("/proc/stat"); + if (statfile_fp == NULL) + return UV__ERR(errno); + + err = uv__cpu_num(statfile_fp, &numcpus); + if (err < 0) + goto out; + + err = UV_ENOMEM; + ci = uv__calloc(numcpus, sizeof(*ci)); + if (ci == NULL) + goto out; + + err = read_models(numcpus, ci); + if (err == 0) + err = read_times(statfile_fp, numcpus, ci); + + if (err) { + uv_free_cpu_info(ci, numcpus); + goto out; + } + + /* read_models() on x86 also reads the CPU speed from /proc/cpuinfo. + * We don't check for errors here. Worst case, the field is left zero. + */ + if (ci[0].speed == 0) + read_speeds(numcpus, ci); + + *cpu_infos = ci; + *count = numcpus; + err = 0; + +out: + + if (fclose(statfile_fp)) + if (errno != EINTR && errno != EINPROGRESS) + abort(); + + return err; +} + + +static void read_speeds(unsigned int numcpus, uv_cpu_info_t* ci) { + unsigned int num; + + for (num = 0; num < numcpus; num++) + ci[num].speed = read_cpufreq(num) / 1000; +} + + +/* Also reads the CPU frequency on x86. The other architectures only have + * a BogoMIPS field, which may not be very accurate. + * + * Note: Simply returns on error, uv_cpu_info() takes care of the cleanup. + */ +static int read_models(unsigned int numcpus, uv_cpu_info_t* ci) { + static const char model_marker[] = "model name\t: "; + static const char speed_marker[] = "cpu MHz\t\t: "; + const char* inferred_model; + unsigned int model_idx; + unsigned int speed_idx; + char buf[1024]; + char* model; + FILE* fp; + + /* Most are unused on non-ARM, non-MIPS and non-x86 architectures. */ + (void) &model_marker; + (void) &speed_marker; + (void) &speed_idx; + (void) &model; + (void) &buf; + (void) &fp; + + model_idx = 0; + speed_idx = 0; + +#if defined(__arm__) || \ + defined(__i386__) || \ + defined(__mips__) || \ + defined(__x86_64__) + fp = uv__open_file("/proc/cpuinfo"); + if (fp == NULL) + return UV__ERR(errno); + + while (fgets(buf, sizeof(buf), fp)) { + if (model_idx < numcpus) { + if (strncmp(buf, model_marker, sizeof(model_marker) - 1) == 0) { + model = buf + sizeof(model_marker) - 1; + model = uv__strndup(model, strlen(model) - 1); /* Strip newline. */ + if (model == NULL) { + fclose(fp); + return UV_ENOMEM; + } + ci[model_idx++].model = model; + continue; + } + } +#if defined(__arm__) || defined(__mips__) + if (model_idx < numcpus) { +#if defined(__arm__) + /* Fallback for pre-3.8 kernels. */ + static const char model_marker[] = "Processor\t: "; +#else /* defined(__mips__) */ + static const char model_marker[] = "cpu model\t\t: "; +#endif + if (strncmp(buf, model_marker, sizeof(model_marker) - 1) == 0) { + model = buf + sizeof(model_marker) - 1; + model = uv__strndup(model, strlen(model) - 1); /* Strip newline. */ + if (model == NULL) { + fclose(fp); + return UV_ENOMEM; + } + ci[model_idx++].model = model; + continue; + } + } +#else /* !__arm__ && !__mips__ */ + if (speed_idx < numcpus) { + if (strncmp(buf, speed_marker, sizeof(speed_marker) - 1) == 0) { + ci[speed_idx++].speed = atoi(buf + sizeof(speed_marker) - 1); + continue; + } + } +#endif /* __arm__ || __mips__ */ + } + + fclose(fp); +#endif /* __arm__ || __i386__ || __mips__ || __x86_64__ */ + + /* Now we want to make sure that all the models contain *something* because + * it's not safe to leave them as null. Copy the last entry unless there + * isn't one, in that case we simply put "unknown" into everything. + */ + inferred_model = "unknown"; + if (model_idx > 0) + inferred_model = ci[model_idx - 1].model; + + while (model_idx < numcpus) { + model = uv__strndup(inferred_model, strlen(inferred_model)); + if (model == NULL) + return UV_ENOMEM; + ci[model_idx++].model = model; + } + + return 0; +} + + +static int read_times(FILE* statfile_fp, + unsigned int numcpus, + uv_cpu_info_t* ci) { + struct uv_cpu_times_s ts; + unsigned int ticks; + unsigned int multiplier; + uint64_t user; + uint64_t nice; + uint64_t sys; + uint64_t idle; + uint64_t dummy; + uint64_t irq; + uint64_t num; + uint64_t len; + char buf[1024]; + + ticks = (unsigned int)sysconf(_SC_CLK_TCK); + multiplier = ((uint64_t)1000L / ticks); + assert(ticks != (unsigned int) -1); + assert(ticks != 0); + + rewind(statfile_fp); + + if (!fgets(buf, sizeof(buf), statfile_fp)) + abort(); + + num = 0; + + while (fgets(buf, sizeof(buf), statfile_fp)) { + if (num >= numcpus) + break; + + if (strncmp(buf, "cpu", 3)) + break; + + /* skip "cpu " marker */ + { + unsigned int n; + int r = sscanf(buf, "cpu%u ", &n); + assert(r == 1); + (void) r; /* silence build warning */ + for (len = sizeof("cpu0"); n /= 10; len++); + } + + /* Line contains user, nice, system, idle, iowait, irq, softirq, steal, + * guest, guest_nice but we're only interested in the first four + irq. + * + * Don't use %*s to skip fields or %ll to read straight into the uint64_t + * fields, they're not allowed in C89 mode. + */ + if (6 != sscanf(buf + len, + "%" PRIu64 " %" PRIu64 " %" PRIu64 + "%" PRIu64 " %" PRIu64 " %" PRIu64, + &user, + &nice, + &sys, + &idle, + &dummy, + &irq)) + abort(); + + ts.user = user * multiplier; + ts.nice = nice * multiplier; + ts.sys = sys * multiplier; + ts.idle = idle * multiplier; + ts.irq = irq * multiplier; + ci[num++].cpu_times = ts; + } + assert(num == numcpus); + + return 0; +} + + +static uint64_t read_cpufreq(unsigned int cpunum) { + uint64_t val; + char buf[1024]; + FILE* fp; + + snprintf(buf, + sizeof(buf), + "/sys/devices/system/cpu/cpu%u/cpufreq/scaling_cur_freq", + cpunum); + + fp = uv__open_file(buf); + if (fp == NULL) + return 0; + + if (fscanf(fp, "%" PRIu64, &val) != 1) + val = 0; + + fclose(fp); + + return val; +} + + +static int uv__ifaddr_exclude(struct ifaddrs *ent, int exclude_type) { + if (!((ent->ifa_flags & IFF_UP) && (ent->ifa_flags & IFF_RUNNING))) + return 1; + if (ent->ifa_addr == NULL) + return 1; + /* + * On Linux getifaddrs returns information related to the raw underlying + * devices. We're not interested in this information yet. + */ + if (ent->ifa_addr->sa_family == PF_PACKET) + return exclude_type; + return !exclude_type; +} + +int uv_interface_addresses(uv_interface_address_t** addresses, int* count) { +#ifndef HAVE_IFADDRS_H + *count = 0; + *addresses = NULL; + return UV_ENOSYS; +#else + struct ifaddrs *addrs, *ent; + uv_interface_address_t* address; + int i; + struct sockaddr_ll *sll; + + *count = 0; + *addresses = NULL; + + if (getifaddrs(&addrs)) + return UV__ERR(errno); + + /* Count the number of interfaces */ + for (ent = addrs; ent != NULL; ent = ent->ifa_next) { + if (uv__ifaddr_exclude(ent, UV__EXCLUDE_IFADDR)) + continue; + + (*count)++; + } + + if (*count == 0) { + freeifaddrs(addrs); + return 0; + } + + /* Make sure the memory is initiallized to zero using calloc() */ + *addresses = uv__calloc(*count, sizeof(**addresses)); + if (!(*addresses)) { + freeifaddrs(addrs); + return UV_ENOMEM; + } + + address = *addresses; + + for (ent = addrs; ent != NULL; ent = ent->ifa_next) { + if (uv__ifaddr_exclude(ent, UV__EXCLUDE_IFADDR)) + continue; + + address->name = uv__strdup(ent->ifa_name); + + if (ent->ifa_addr->sa_family == AF_INET6) { + address->address.address6 = *((struct sockaddr_in6*) ent->ifa_addr); + } else { + address->address.address4 = *((struct sockaddr_in*) ent->ifa_addr); + } + + if (ent->ifa_netmask->sa_family == AF_INET6) { + address->netmask.netmask6 = *((struct sockaddr_in6*) ent->ifa_netmask); + } else { + address->netmask.netmask4 = *((struct sockaddr_in*) ent->ifa_netmask); + } + + address->is_internal = !!(ent->ifa_flags & IFF_LOOPBACK); + + address++; + } + + /* Fill in physical addresses for each interface */ + for (ent = addrs; ent != NULL; ent = ent->ifa_next) { + if (uv__ifaddr_exclude(ent, UV__EXCLUDE_IFPHYS)) + continue; + + address = *addresses; + + for (i = 0; i < (*count); i++) { + size_t namelen = strlen(ent->ifa_name); + /* Alias interface share the same physical address */ + if (strncmp(address->name, ent->ifa_name, namelen) == 0 && + (address->name[namelen] == 0 || address->name[namelen] == ':')) { + sll = (struct sockaddr_ll*)ent->ifa_addr; + memcpy(address->phys_addr, sll->sll_addr, sizeof(address->phys_addr)); + } + address++; + } + } + + freeifaddrs(addrs); + + return 0; +#endif +} + + +void uv_free_interface_addresses(uv_interface_address_t* addresses, + int count) { + int i; + + for (i = 0; i < count; i++) { + uv__free(addresses[i].name); + } + + uv__free(addresses); +} + + +void uv__set_process_title(const char* title) { +#if defined(PR_SET_NAME) + prctl(PR_SET_NAME, title); /* Only copies first 16 characters. */ +#endif +} + + +static uint64_t uv__read_proc_meminfo(const char* what) { + uint64_t rc; + ssize_t n; + char* p; + int fd; + char buf[4096]; /* Large enough to hold all of /proc/meminfo. */ + + rc = 0; + fd = uv__open_cloexec("/proc/meminfo", O_RDONLY); + + if (fd < 0) + return 0; + + n = read(fd, buf, sizeof(buf) - 1); + + if (n <= 0) + goto out; + + buf[n] = '\0'; + p = strstr(buf, what); + + if (p == NULL) + goto out; + + p += strlen(what); + + if (1 != sscanf(p, "%" PRIu64 " kB", &rc)) + goto out; + + rc *= 1024; + +out: + + if (uv__close_nocheckstdio(fd)) + abort(); + + return rc; +} + + +uint64_t uv_get_free_memory(void) { + struct sysinfo info; + uint64_t rc; + + rc = uv__read_proc_meminfo("MemFree:"); + + if (rc != 0) + return rc; + + if (0 == sysinfo(&info)) + return (uint64_t) info.freeram * info.mem_unit; + + return 0; +} + + +uint64_t uv_get_total_memory(void) { + struct sysinfo info; + uint64_t rc; + + rc = uv__read_proc_meminfo("MemTotal:"); + + if (rc != 0) + return rc; + + if (0 == sysinfo(&info)) + return (uint64_t) info.totalram * info.mem_unit; + + return 0; +} + + +static uint64_t uv__read_cgroups_uint64(const char* cgroup, const char* param) { + char filename[256]; + uint64_t rc; + int fd; + ssize_t n; + char buf[32]; /* Large enough to hold an encoded uint64_t. */ + + snprintf(filename, 256, "/sys/fs/cgroup/%s/%s", cgroup, param); + + rc = 0; + fd = uv__open_cloexec(filename, O_RDONLY); + + if (fd < 0) + return 0; + + n = read(fd, buf, sizeof(buf) - 1); + + if (n > 0) { + buf[n] = '\0'; + sscanf(buf, "%" PRIu64, &rc); + } + + if (uv__close_nocheckstdio(fd)) + abort(); + + return rc; +} + + +uint64_t uv_get_constrained_memory(void) { + /* + * This might return 0 if there was a problem getting the memory limit from + * cgroups. This is OK because a return value of 0 signifies that the memory + * limit is unknown. + */ + return uv__read_cgroups_uint64("memory", "memory.limit_in_bytes"); +} diff --git a/external/libuv/src/unix/linux-inotify.c b/external/libuv/src/unix/linux-inotify.c new file mode 100644 index 000000000..42b601adb --- /dev/null +++ b/external/libuv/src/unix/linux-inotify.c @@ -0,0 +1,327 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#include "uv.h" +#include "uv/tree.h" +#include "internal.h" + +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +struct watcher_list { + RB_ENTRY(watcher_list) entry; + QUEUE watchers; + int iterating; + char* path; + int wd; +}; + +struct watcher_root { + struct watcher_list* rbh_root; +}; +#define CAST(p) ((struct watcher_root*)(p)) + + +static int compare_watchers(const struct watcher_list* a, + const struct watcher_list* b) { + if (a->wd < b->wd) return -1; + if (a->wd > b->wd) return 1; + return 0; +} + + +RB_GENERATE_STATIC(watcher_root, watcher_list, entry, compare_watchers) + + +static void uv__inotify_read(uv_loop_t* loop, + uv__io_t* w, + unsigned int revents); + +static void maybe_free_watcher_list(struct watcher_list* w, + uv_loop_t* loop); + +static int init_inotify(uv_loop_t* loop) { + int fd; + + if (loop->inotify_fd != -1) + return 0; + + fd = inotify_init1(IN_NONBLOCK | IN_CLOEXEC); + if (fd < 0) + return UV__ERR(errno); + + loop->inotify_fd = fd; + uv__io_init(&loop->inotify_read_watcher, uv__inotify_read, loop->inotify_fd); + uv__io_start(loop, &loop->inotify_read_watcher, POLLIN); + + return 0; +} + + +int uv__inotify_fork(uv_loop_t* loop, void* old_watchers) { + /* Open the inotify_fd, and re-arm all the inotify watchers. */ + int err; + struct watcher_list* tmp_watcher_list_iter; + struct watcher_list* watcher_list; + struct watcher_list tmp_watcher_list; + QUEUE queue; + QUEUE* q; + uv_fs_event_t* handle; + char* tmp_path; + + if (old_watchers != NULL) { + /* We must restore the old watcher list to be able to close items + * out of it. + */ + loop->inotify_watchers = old_watchers; + + QUEUE_INIT(&tmp_watcher_list.watchers); + /* Note that the queue we use is shared with the start and stop() + * functions, making QUEUE_FOREACH unsafe to use. So we use the + * QUEUE_MOVE trick to safely iterate. Also don't free the watcher + * list until we're done iterating. c.f. uv__inotify_read. + */ + RB_FOREACH_SAFE(watcher_list, watcher_root, + CAST(&old_watchers), tmp_watcher_list_iter) { + watcher_list->iterating = 1; + QUEUE_MOVE(&watcher_list->watchers, &queue); + while (!QUEUE_EMPTY(&queue)) { + q = QUEUE_HEAD(&queue); + handle = QUEUE_DATA(q, uv_fs_event_t, watchers); + /* It's critical to keep a copy of path here, because it + * will be set to NULL by stop() and then deallocated by + * maybe_free_watcher_list + */ + tmp_path = uv__strdup(handle->path); + assert(tmp_path != NULL); + QUEUE_REMOVE(q); + QUEUE_INSERT_TAIL(&watcher_list->watchers, q); + uv_fs_event_stop(handle); + + QUEUE_INSERT_TAIL(&tmp_watcher_list.watchers, &handle->watchers); + handle->path = tmp_path; + } + watcher_list->iterating = 0; + maybe_free_watcher_list(watcher_list, loop); + } + + QUEUE_MOVE(&tmp_watcher_list.watchers, &queue); + while (!QUEUE_EMPTY(&queue)) { + q = QUEUE_HEAD(&queue); + QUEUE_REMOVE(q); + handle = QUEUE_DATA(q, uv_fs_event_t, watchers); + tmp_path = handle->path; + handle->path = NULL; + err = uv_fs_event_start(handle, handle->cb, tmp_path, 0); + uv__free(tmp_path); + if (err) + return err; + } + } + + return 0; +} + + +static struct watcher_list* find_watcher(uv_loop_t* loop, int wd) { + struct watcher_list w; + w.wd = wd; + return RB_FIND(watcher_root, CAST(&loop->inotify_watchers), &w); +} + +static void maybe_free_watcher_list(struct watcher_list* w, uv_loop_t* loop) { + /* if the watcher_list->watchers is being iterated over, we can't free it. */ + if ((!w->iterating) && QUEUE_EMPTY(&w->watchers)) { + /* No watchers left for this path. Clean up. */ + RB_REMOVE(watcher_root, CAST(&loop->inotify_watchers), w); + inotify_rm_watch(loop->inotify_fd, w->wd); + uv__free(w); + } +} + +static void uv__inotify_read(uv_loop_t* loop, + uv__io_t* dummy, + unsigned int events) { + const struct inotify_event* e; + struct watcher_list* w; + uv_fs_event_t* h; + QUEUE queue; + QUEUE* q; + const char* path; + ssize_t size; + const char *p; + /* needs to be large enough for sizeof(inotify_event) + strlen(path) */ + char buf[4096]; + + while (1) { + do + size = read(loop->inotify_fd, buf, sizeof(buf)); + while (size == -1 && errno == EINTR); + + if (size == -1) { + assert(errno == EAGAIN || errno == EWOULDBLOCK); + break; + } + + assert(size > 0); /* pre-2.6.21 thing, size=0 == read buffer too small */ + + /* Now we have one or more inotify_event structs. */ + for (p = buf; p < buf + size; p += sizeof(*e) + e->len) { + e = (const struct inotify_event*) p; + + events = 0; + if (e->mask & (IN_ATTRIB|IN_MODIFY)) + events |= UV_CHANGE; + if (e->mask & ~(IN_ATTRIB|IN_MODIFY)) + events |= UV_RENAME; + + w = find_watcher(loop, e->wd); + if (w == NULL) + continue; /* Stale event, no watchers left. */ + + /* inotify does not return the filename when monitoring a single file + * for modifications. Repurpose the filename for API compatibility. + * I'm not convinced this is a good thing, maybe it should go. + */ + path = e->len ? (const char*) (e + 1) : uv__basename_r(w->path); + + /* We're about to iterate over the queue and call user's callbacks. + * What can go wrong? + * A callback could call uv_fs_event_stop() + * and the queue can change under our feet. + * So, we use QUEUE_MOVE() trick to safely iterate over the queue. + * And we don't free the watcher_list until we're done iterating. + * + * First, + * tell uv_fs_event_stop() (that could be called from a user's callback) + * not to free watcher_list. + */ + w->iterating = 1; + QUEUE_MOVE(&w->watchers, &queue); + while (!QUEUE_EMPTY(&queue)) { + q = QUEUE_HEAD(&queue); + h = QUEUE_DATA(q, uv_fs_event_t, watchers); + + QUEUE_REMOVE(q); + QUEUE_INSERT_TAIL(&w->watchers, q); + + h->cb(h, path, events, 0); + } + /* done iterating, time to (maybe) free empty watcher_list */ + w->iterating = 0; + maybe_free_watcher_list(w, loop); + } + } +} + + +int uv_fs_event_init(uv_loop_t* loop, uv_fs_event_t* handle) { + uv__handle_init(loop, (uv_handle_t*)handle, UV_FS_EVENT); + return 0; +} + + +int uv_fs_event_start(uv_fs_event_t* handle, + uv_fs_event_cb cb, + const char* path, + unsigned int flags) { + struct watcher_list* w; + size_t len; + int events; + int err; + int wd; + + if (uv__is_active(handle)) + return UV_EINVAL; + + err = init_inotify(handle->loop); + if (err) + return err; + + events = IN_ATTRIB + | IN_CREATE + | IN_MODIFY + | IN_DELETE + | IN_DELETE_SELF + | IN_MOVE_SELF + | IN_MOVED_FROM + | IN_MOVED_TO; + + wd = inotify_add_watch(handle->loop->inotify_fd, path, events); + if (wd == -1) + return UV__ERR(errno); + + w = find_watcher(handle->loop, wd); + if (w) + goto no_insert; + + len = strlen(path) + 1; + w = uv__malloc(sizeof(*w) + len); + if (w == NULL) + return UV_ENOMEM; + + w->wd = wd; + w->path = memcpy(w + 1, path, len); + QUEUE_INIT(&w->watchers); + w->iterating = 0; + RB_INSERT(watcher_root, CAST(&handle->loop->inotify_watchers), w); + +no_insert: + uv__handle_start(handle); + QUEUE_INSERT_TAIL(&w->watchers, &handle->watchers); + handle->path = w->path; + handle->cb = cb; + handle->wd = wd; + + return 0; +} + + +int uv_fs_event_stop(uv_fs_event_t* handle) { + struct watcher_list* w; + + if (!uv__is_active(handle)) + return 0; + + w = find_watcher(handle->loop, handle->wd); + assert(w != NULL); + + handle->wd = -1; + handle->path = NULL; + uv__handle_stop(handle); + QUEUE_REMOVE(&handle->watchers); + + maybe_free_watcher_list(w, handle->loop); + + return 0; +} + + +void uv__fs_event_close(uv_fs_event_t* handle) { + uv_fs_event_stop(handle); +} diff --git a/external/libuv/src/unix/linux-syscalls.c b/external/libuv/src/unix/linux-syscalls.c new file mode 100644 index 000000000..742f26ada --- /dev/null +++ b/external/libuv/src/unix/linux-syscalls.c @@ -0,0 +1,205 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#include "linux-syscalls.h" +#include +#include +#include +#include +#include + +#if defined(__arm__) +# if defined(__thumb__) || defined(__ARM_EABI__) +# define UV_SYSCALL_BASE 0 +# else +# define UV_SYSCALL_BASE 0x900000 +# endif +#endif /* __arm__ */ + +#ifndef __NR_recvmmsg +# if defined(__x86_64__) +# define __NR_recvmmsg 299 +# elif defined(__i386__) +# define __NR_recvmmsg 337 +# elif defined(__arm__) +# define __NR_recvmmsg (UV_SYSCALL_BASE + 365) +# endif +#endif /* __NR_recvmsg */ + +#ifndef __NR_sendmmsg +# if defined(__x86_64__) +# define __NR_sendmmsg 307 +# elif defined(__i386__) +# define __NR_sendmmsg 345 +# elif defined(__arm__) +# define __NR_sendmmsg (UV_SYSCALL_BASE + 374) +# endif +#endif /* __NR_sendmmsg */ + +#ifndef __NR_utimensat +# if defined(__x86_64__) +# define __NR_utimensat 280 +# elif defined(__i386__) +# define __NR_utimensat 320 +# elif defined(__arm__) +# define __NR_utimensat (UV_SYSCALL_BASE + 348) +# endif +#endif /* __NR_utimensat */ + +#ifndef __NR_preadv +# if defined(__x86_64__) +# define __NR_preadv 295 +# elif defined(__i386__) +# define __NR_preadv 333 +# elif defined(__arm__) +# define __NR_preadv (UV_SYSCALL_BASE + 361) +# endif +#endif /* __NR_preadv */ + +#ifndef __NR_pwritev +# if defined(__x86_64__) +# define __NR_pwritev 296 +# elif defined(__i386__) +# define __NR_pwritev 334 +# elif defined(__arm__) +# define __NR_pwritev (UV_SYSCALL_BASE + 362) +# endif +#endif /* __NR_pwritev */ + +#ifndef __NR_dup3 +# if defined(__x86_64__) +# define __NR_dup3 292 +# elif defined(__i386__) +# define __NR_dup3 330 +# elif defined(__arm__) +# define __NR_dup3 (UV_SYSCALL_BASE + 358) +# endif +#endif /* __NR_pwritev */ + +#ifndef __NR_statx +# if defined(__x86_64__) +# define __NR_statx 332 +# elif defined(__i386__) +# define __NR_statx 383 +# elif defined(__aarch64__) +# define __NR_statx 397 +# elif defined(__arm__) +# define __NR_statx (UV_SYSCALL_BASE + 397) +# elif defined(__ppc__) +# define __NR_statx 383 +# elif defined(__s390__) +# define __NR_statx 379 +# endif +#endif /* __NR_statx */ + +#ifndef __NR_getrandom +# if defined(__x86_64__) +# define __NR_getrandom 318 +# elif defined(__i386__) +# define __NR_getrandom 355 +# elif defined(__aarch64__) +# define __NR_getrandom 384 +# elif defined(__arm__) +# define __NR_getrandom (UV_SYSCALL_BASE + 384) +# elif defined(__ppc__) +# define __NR_getrandom 359 +# elif defined(__s390__) +# define __NR_getrandom 349 +# endif +#endif /* __NR_getrandom */ + +struct uv__mmsghdr; + +int uv__sendmmsg(int fd, + struct uv__mmsghdr* mmsg, + unsigned int vlen, + unsigned int flags) { +#if defined(__NR_sendmmsg) + return syscall(__NR_sendmmsg, fd, mmsg, vlen, flags); +#else + return errno = ENOSYS, -1; +#endif +} + + +int uv__recvmmsg(int fd, + struct uv__mmsghdr* mmsg, + unsigned int vlen, + unsigned int flags, + struct timespec* timeout) { +#if defined(__NR_recvmmsg) + return syscall(__NR_recvmmsg, fd, mmsg, vlen, flags, timeout); +#else + return errno = ENOSYS, -1; +#endif +} + + +ssize_t uv__preadv(int fd, const struct iovec *iov, int iovcnt, int64_t offset) { +#if defined(__NR_preadv) + return syscall(__NR_preadv, fd, iov, iovcnt, (long)offset, (long)(offset >> 32)); +#else + return errno = ENOSYS, -1; +#endif +} + + +ssize_t uv__pwritev(int fd, const struct iovec *iov, int iovcnt, int64_t offset) { +#if defined(__NR_pwritev) + return syscall(__NR_pwritev, fd, iov, iovcnt, (long)offset, (long)(offset >> 32)); +#else + return errno = ENOSYS, -1; +#endif +} + + +int uv__dup3(int oldfd, int newfd, int flags) { +#if defined(__NR_dup3) + return syscall(__NR_dup3, oldfd, newfd, flags); +#else + return errno = ENOSYS, -1; +#endif +} + + +int uv__statx(int dirfd, + const char* path, + int flags, + unsigned int mask, + struct uv__statx* statxbuf) { + /* __NR_statx make Android box killed by SIGSYS. + * That looks like a seccomp2 sandbox filter rejecting the system call. + */ +#if defined(__NR_statx) && !defined(__ANDROID__) + return syscall(__NR_statx, dirfd, path, flags, mask, statxbuf); +#else + return errno = ENOSYS, -1; +#endif +} + + +ssize_t uv__getrandom(void* buf, size_t buflen, unsigned flags) { +#if defined(__NR_getrandom) + return syscall(__NR_getrandom, buf, buflen, flags); +#else + return errno = ENOSYS, -1; +#endif +} diff --git a/external/libuv/src/unix/linux-syscalls.h b/external/libuv/src/unix/linux-syscalls.h new file mode 100644 index 000000000..2e8fa2a51 --- /dev/null +++ b/external/libuv/src/unix/linux-syscalls.h @@ -0,0 +1,74 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#ifndef UV_LINUX_SYSCALL_H_ +#define UV_LINUX_SYSCALL_H_ + +#undef _GNU_SOURCE +#define _GNU_SOURCE + +#include +#include +#include +#include +#include + +struct uv__statx_timestamp { + int64_t tv_sec; + uint32_t tv_nsec; + int32_t unused0; +}; + +struct uv__statx { + uint32_t stx_mask; + uint32_t stx_blksize; + uint64_t stx_attributes; + uint32_t stx_nlink; + uint32_t stx_uid; + uint32_t stx_gid; + uint16_t stx_mode; + uint16_t unused0; + uint64_t stx_ino; + uint64_t stx_size; + uint64_t stx_blocks; + uint64_t stx_attributes_mask; + struct uv__statx_timestamp stx_atime; + struct uv__statx_timestamp stx_btime; + struct uv__statx_timestamp stx_ctime; + struct uv__statx_timestamp stx_mtime; + uint32_t stx_rdev_major; + uint32_t stx_rdev_minor; + uint32_t stx_dev_major; + uint32_t stx_dev_minor; + uint64_t unused1[14]; +}; + +ssize_t uv__preadv(int fd, const struct iovec *iov, int iovcnt, int64_t offset); +ssize_t uv__pwritev(int fd, const struct iovec *iov, int iovcnt, int64_t offset); +int uv__dup3(int oldfd, int newfd, int flags); +int uv__statx(int dirfd, + const char* path, + int flags, + unsigned int mask, + struct uv__statx* statxbuf); +ssize_t uv__getrandom(void* buf, size_t buflen, unsigned flags); + +#endif /* UV_LINUX_SYSCALL_H_ */ diff --git a/external/libuv/src/unix/loop-watcher.c b/external/libuv/src/unix/loop-watcher.c new file mode 100644 index 000000000..b8c1c2a71 --- /dev/null +++ b/external/libuv/src/unix/loop-watcher.c @@ -0,0 +1,68 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#include "uv.h" +#include "internal.h" + +#define UV_LOOP_WATCHER_DEFINE(name, type) \ + int uv_##name##_init(uv_loop_t* loop, uv_##name##_t* handle) { \ + uv__handle_init(loop, (uv_handle_t*)handle, UV_##type); \ + handle->name##_cb = NULL; \ + return 0; \ + } \ + \ + int uv_##name##_start(uv_##name##_t* handle, uv_##name##_cb cb) { \ + if (uv__is_active(handle)) return 0; \ + if (cb == NULL) return UV_EINVAL; \ + QUEUE_INSERT_HEAD(&handle->loop->name##_handles, &handle->queue); \ + handle->name##_cb = cb; \ + uv__handle_start(handle); \ + return 0; \ + } \ + \ + int uv_##name##_stop(uv_##name##_t* handle) { \ + if (!uv__is_active(handle)) return 0; \ + QUEUE_REMOVE(&handle->queue); \ + uv__handle_stop(handle); \ + return 0; \ + } \ + \ + void uv__run_##name(uv_loop_t* loop) { \ + uv_##name##_t* h; \ + QUEUE queue; \ + QUEUE* q; \ + QUEUE_MOVE(&loop->name##_handles, &queue); \ + while (!QUEUE_EMPTY(&queue)) { \ + q = QUEUE_HEAD(&queue); \ + h = QUEUE_DATA(q, uv_##name##_t, queue); \ + QUEUE_REMOVE(q); \ + QUEUE_INSERT_TAIL(&loop->name##_handles, q); \ + h->name##_cb(h); \ + } \ + } \ + \ + void uv__##name##_close(uv_##name##_t* handle) { \ + uv_##name##_stop(handle); \ + } + +UV_LOOP_WATCHER_DEFINE(prepare, PREPARE) +UV_LOOP_WATCHER_DEFINE(check, CHECK) +UV_LOOP_WATCHER_DEFINE(idle, IDLE) diff --git a/external/libuv/src/unix/loop.c b/external/libuv/src/unix/loop.c new file mode 100644 index 000000000..e5b288956 --- /dev/null +++ b/external/libuv/src/unix/loop.c @@ -0,0 +1,196 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#include "uv.h" +#include "uv/tree.h" +#include "internal.h" +#include "heap-inl.h" +#include +#include +#include + +int uv_loop_init(uv_loop_t* loop) { + void* saved_data; + int err; + + + saved_data = loop->data; + memset(loop, 0, sizeof(*loop)); + loop->data = saved_data; + + heap_init((struct heap*) &loop->timer_heap); + QUEUE_INIT(&loop->wq); + QUEUE_INIT(&loop->idle_handles); + QUEUE_INIT(&loop->async_handles); + QUEUE_INIT(&loop->check_handles); + QUEUE_INIT(&loop->prepare_handles); + QUEUE_INIT(&loop->handle_queue); + + loop->active_handles = 0; + loop->active_reqs.count = 0; + loop->nfds = 0; + loop->watchers = NULL; + loop->nwatchers = 0; + QUEUE_INIT(&loop->pending_queue); + QUEUE_INIT(&loop->watcher_queue); + + loop->closing_handles = NULL; + uv__update_time(loop); + loop->async_io_watcher.fd = -1; + loop->async_wfd = -1; + loop->signal_pipefd[0] = -1; + loop->signal_pipefd[1] = -1; + loop->backend_fd = -1; + loop->emfile_fd = -1; + + loop->timer_counter = 0; + loop->stop_flag = 0; + + err = uv__platform_loop_init(loop); + if (err) + return err; + + uv__signal_global_once_init(); + err = uv_signal_init(loop, &loop->child_watcher); + if (err) + goto fail_signal_init; + + uv__handle_unref(&loop->child_watcher); + loop->child_watcher.flags |= UV_HANDLE_INTERNAL; + QUEUE_INIT(&loop->process_handles); + + err = uv_rwlock_init(&loop->cloexec_lock); + if (err) + goto fail_rwlock_init; + + err = uv_mutex_init(&loop->wq_mutex); + if (err) + goto fail_mutex_init; + + err = uv_async_init(loop, &loop->wq_async, uv__work_done); + if (err) + goto fail_async_init; + + uv__handle_unref(&loop->wq_async); + loop->wq_async.flags |= UV_HANDLE_INTERNAL; + + return 0; + +fail_async_init: + uv_mutex_destroy(&loop->wq_mutex); + +fail_mutex_init: + uv_rwlock_destroy(&loop->cloexec_lock); + +fail_rwlock_init: + uv__signal_loop_cleanup(loop); + +fail_signal_init: + uv__platform_loop_delete(loop); + + uv__free(loop->watchers); + loop->nwatchers = 0; + return err; +} + + +int uv_loop_fork(uv_loop_t* loop) { + int err; + unsigned int i; + uv__io_t* w; + + err = uv__io_fork(loop); + if (err) + return err; + + err = uv__async_fork(loop); + if (err) + return err; + + err = uv__signal_loop_fork(loop); + if (err) + return err; + + /* Rearm all the watchers that aren't re-queued by the above. */ + for (i = 0; i < loop->nwatchers; i++) { + w = loop->watchers[i]; + if (w == NULL) + continue; + + if (w->pevents != 0 && QUEUE_EMPTY(&w->watcher_queue)) { + w->events = 0; /* Force re-registration in uv__io_poll. */ + QUEUE_INSERT_TAIL(&loop->watcher_queue, &w->watcher_queue); + } + } + + return 0; +} + + +void uv__loop_close(uv_loop_t* loop) { + uv__signal_loop_cleanup(loop); + uv__platform_loop_delete(loop); + uv__async_stop(loop); + + if (loop->emfile_fd != -1) { + uv__close(loop->emfile_fd); + loop->emfile_fd = -1; + } + + if (loop->backend_fd != -1) { + uv__close(loop->backend_fd); + loop->backend_fd = -1; + } + + uv_mutex_lock(&loop->wq_mutex); + assert(QUEUE_EMPTY(&loop->wq) && "thread pool work queue not empty!"); + assert(!uv__has_active_reqs(loop)); + uv_mutex_unlock(&loop->wq_mutex); + uv_mutex_destroy(&loop->wq_mutex); + + /* + * Note that all thread pool stuff is finished at this point and + * it is safe to just destroy rw lock + */ + uv_rwlock_destroy(&loop->cloexec_lock); + +#if 0 + assert(QUEUE_EMPTY(&loop->pending_queue)); + assert(QUEUE_EMPTY(&loop->watcher_queue)); + assert(loop->nfds == 0); +#endif + + uv__free(loop->watchers); + loop->watchers = NULL; + loop->nwatchers = 0; +} + + +int uv__loop_configure(uv_loop_t* loop, uv_loop_option option, va_list ap) { + if (option != UV_LOOP_BLOCK_SIGNAL) + return UV_ENOSYS; + + if (va_arg(ap, int) != SIGPROF) + return UV_EINVAL; + + loop->flags |= UV_LOOP_BLOCK_SIGPROF; + return 0; +} diff --git a/external/libuv/src/unix/netbsd.c b/external/libuv/src/unix/netbsd.c new file mode 100644 index 000000000..c66333f52 --- /dev/null +++ b/external/libuv/src/unix/netbsd.c @@ -0,0 +1,259 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#include "uv.h" +#include "internal.h" + +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include + + +int uv__platform_loop_init(uv_loop_t* loop) { + return uv__kqueue_init(loop); +} + + +void uv__platform_loop_delete(uv_loop_t* loop) { +} + + +void uv_loadavg(double avg[3]) { + struct loadavg info; + size_t size = sizeof(info); + int which[] = {CTL_VM, VM_LOADAVG}; + + if (sysctl(which, ARRAY_SIZE(which), &info, &size, NULL, 0) == -1) return; + + avg[0] = (double) info.ldavg[0] / info.fscale; + avg[1] = (double) info.ldavg[1] / info.fscale; + avg[2] = (double) info.ldavg[2] / info.fscale; +} + + +int uv_exepath(char* buffer, size_t* size) { + /* Intermediate buffer, retrieving partial path name does not work + * As of NetBSD-8(beta), vnode->path translator does not handle files + * with longer names than 31 characters. + */ + char int_buf[PATH_MAX]; + size_t int_size; + int mib[4]; + + if (buffer == NULL || size == NULL || *size == 0) + return UV_EINVAL; + + mib[0] = CTL_KERN; + mib[1] = KERN_PROC_ARGS; + mib[2] = -1; + mib[3] = KERN_PROC_PATHNAME; + int_size = ARRAY_SIZE(int_buf); + + if (sysctl(mib, 4, int_buf, &int_size, NULL, 0)) + return UV__ERR(errno); + + /* Copy string from the intermediate buffer to outer one with appropriate + * length. + */ + /* TODO(bnoordhuis) Check uv__strscpy() return value. */ + uv__strscpy(buffer, int_buf, *size); + + /* Set new size. */ + *size = strlen(buffer); + + return 0; +} + + +uint64_t uv_get_free_memory(void) { + struct uvmexp info; + size_t size = sizeof(info); + int which[] = {CTL_VM, VM_UVMEXP}; + + if (sysctl(which, ARRAY_SIZE(which), &info, &size, NULL, 0)) + return UV__ERR(errno); + + return (uint64_t) info.free * sysconf(_SC_PAGESIZE); +} + + +uint64_t uv_get_total_memory(void) { +#if defined(HW_PHYSMEM64) + uint64_t info; + int which[] = {CTL_HW, HW_PHYSMEM64}; +#else + unsigned int info; + int which[] = {CTL_HW, HW_PHYSMEM}; +#endif + size_t size = sizeof(info); + + if (sysctl(which, ARRAY_SIZE(which), &info, &size, NULL, 0)) + return UV__ERR(errno); + + return (uint64_t) info; +} + + +uint64_t uv_get_constrained_memory(void) { + return 0; /* Memory constraints are unknown. */ +} + + +int uv_resident_set_memory(size_t* rss) { + kvm_t *kd = NULL; + struct kinfo_proc2 *kinfo = NULL; + pid_t pid; + int nprocs; + int max_size = sizeof(struct kinfo_proc2); + int page_size; + + page_size = getpagesize(); + pid = getpid(); + + kd = kvm_open(NULL, NULL, NULL, KVM_NO_FILES, "kvm_open"); + + if (kd == NULL) goto error; + + kinfo = kvm_getproc2(kd, KERN_PROC_PID, pid, max_size, &nprocs); + if (kinfo == NULL) goto error; + + *rss = kinfo->p_vm_rssize * page_size; + + kvm_close(kd); + + return 0; + +error: + if (kd) kvm_close(kd); + return UV_EPERM; +} + + +int uv_uptime(double* uptime) { + time_t now; + struct timeval info; + size_t size = sizeof(info); + static int which[] = {CTL_KERN, KERN_BOOTTIME}; + + if (sysctl(which, ARRAY_SIZE(which), &info, &size, NULL, 0)) + return UV__ERR(errno); + + now = time(NULL); + + *uptime = (double)(now - info.tv_sec); + return 0; +} + + +int uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) { + unsigned int ticks = (unsigned int)sysconf(_SC_CLK_TCK); + unsigned int multiplier = ((uint64_t)1000L / ticks); + unsigned int cur = 0; + uv_cpu_info_t* cpu_info; + u_int64_t* cp_times; + char model[512]; + u_int64_t cpuspeed; + int numcpus; + size_t size; + int i; + + size = sizeof(model); + if (sysctlbyname("machdep.cpu_brand", &model, &size, NULL, 0) && + sysctlbyname("hw.model", &model, &size, NULL, 0)) { + return UV__ERR(errno); + } + + size = sizeof(numcpus); + if (sysctlbyname("hw.ncpu", &numcpus, &size, NULL, 0)) + return UV__ERR(errno); + *count = numcpus; + + /* Only i386 and amd64 have machdep.tsc_freq */ + size = sizeof(cpuspeed); + if (sysctlbyname("machdep.tsc_freq", &cpuspeed, &size, NULL, 0)) + cpuspeed = 0; + + size = numcpus * CPUSTATES * sizeof(*cp_times); + cp_times = uv__malloc(size); + if (cp_times == NULL) + return UV_ENOMEM; + + if (sysctlbyname("kern.cp_time", cp_times, &size, NULL, 0)) + return UV__ERR(errno); + + *cpu_infos = uv__malloc(numcpus * sizeof(**cpu_infos)); + if (!(*cpu_infos)) { + uv__free(cp_times); + uv__free(*cpu_infos); + return UV_ENOMEM; + } + + for (i = 0; i < numcpus; i++) { + cpu_info = &(*cpu_infos)[i]; + cpu_info->cpu_times.user = (uint64_t)(cp_times[CP_USER+cur]) * multiplier; + cpu_info->cpu_times.nice = (uint64_t)(cp_times[CP_NICE+cur]) * multiplier; + cpu_info->cpu_times.sys = (uint64_t)(cp_times[CP_SYS+cur]) * multiplier; + cpu_info->cpu_times.idle = (uint64_t)(cp_times[CP_IDLE+cur]) * multiplier; + cpu_info->cpu_times.irq = (uint64_t)(cp_times[CP_INTR+cur]) * multiplier; + cpu_info->model = uv__strdup(model); + cpu_info->speed = (int)(cpuspeed/(uint64_t) 1e6); + cur += CPUSTATES; + } + uv__free(cp_times); + return 0; +} + +int uv__random_sysctl(void* buf, size_t len) { + static int name[] = {CTL_KERN, KERN_ARND}; + size_t count, req; + unsigned char* p; + + p = buf; + while (len) { + req = len < 32 ? len : 32; + count = req; + + if (sysctl(name, ARRAY_SIZE(name), p, &count, NULL, 0) == -1) + return UV__ERR(errno); + + if (count != req) + return UV_EIO; /* Can't happen. */ + + p += count; + len -= count; + } + + return 0; +} diff --git a/external/libuv/src/unix/no-fsevents.c b/external/libuv/src/unix/no-fsevents.c new file mode 100644 index 000000000..158643af1 --- /dev/null +++ b/external/libuv/src/unix/no-fsevents.c @@ -0,0 +1,42 @@ +/* Copyright libuv 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 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. + */ + +#include "uv.h" +#include "internal.h" + +#include + +int uv_fs_event_init(uv_loop_t* loop, uv_fs_event_t* handle) { + return UV_ENOSYS; +} + +int uv_fs_event_start(uv_fs_event_t* handle, uv_fs_event_cb cb, + const char* filename, unsigned int flags) { + return UV_ENOSYS; +} + +int uv_fs_event_stop(uv_fs_event_t* handle) { + return UV_ENOSYS; +} + +void uv__fs_event_close(uv_fs_event_t* handle) { + UNREACHABLE(); +} diff --git a/external/libuv/src/unix/no-proctitle.c b/external/libuv/src/unix/no-proctitle.c new file mode 100644 index 000000000..32aa0af1f --- /dev/null +++ b/external/libuv/src/unix/no-proctitle.c @@ -0,0 +1,45 @@ +/* Copyright libuv 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 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. + */ + +#include "uv.h" +#include "internal.h" + +#include +#include + +char** uv_setup_args(int argc, char** argv) { + return argv; +} + +void uv__process_title_cleanup(void) { +} + +int uv_set_process_title(const char* title) { + return 0; +} + +int uv_get_process_title(char* buffer, size_t size) { + if (buffer == NULL || size == 0) + return UV_EINVAL; + + buffer[0] = '\0'; + return 0; +} diff --git a/external/libuv/src/unix/openbsd.c b/external/libuv/src/unix/openbsd.c new file mode 100644 index 000000000..f32a94df3 --- /dev/null +++ b/external/libuv/src/unix/openbsd.c @@ -0,0 +1,240 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#include "uv.h" +#include "internal.h" + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + + +int uv__platform_loop_init(uv_loop_t* loop) { + return uv__kqueue_init(loop); +} + + +void uv__platform_loop_delete(uv_loop_t* loop) { +} + + +void uv_loadavg(double avg[3]) { + struct loadavg info; + size_t size = sizeof(info); + int which[] = {CTL_VM, VM_LOADAVG}; + + if (sysctl(which, ARRAY_SIZE(which), &info, &size, NULL, 0) < 0) return; + + avg[0] = (double) info.ldavg[0] / info.fscale; + avg[1] = (double) info.ldavg[1] / info.fscale; + avg[2] = (double) info.ldavg[2] / info.fscale; +} + + +int uv_exepath(char* buffer, size_t* size) { + int mib[4]; + char **argsbuf = NULL; + size_t argsbuf_size = 100U; + size_t exepath_size; + pid_t mypid; + int err; + + if (buffer == NULL || size == NULL || *size == 0) + return UV_EINVAL; + + mypid = getpid(); + for (;;) { + err = UV_ENOMEM; + argsbuf = uv__reallocf(argsbuf, argsbuf_size); + if (argsbuf == NULL) + goto out; + mib[0] = CTL_KERN; + mib[1] = KERN_PROC_ARGS; + mib[2] = mypid; + mib[3] = KERN_PROC_ARGV; + if (sysctl(mib, ARRAY_SIZE(mib), argsbuf, &argsbuf_size, NULL, 0) == 0) { + break; + } + if (errno != ENOMEM) { + err = UV__ERR(errno); + goto out; + } + argsbuf_size *= 2U; + } + + if (argsbuf[0] == NULL) { + err = UV_EINVAL; /* FIXME(bnoordhuis) More appropriate error. */ + goto out; + } + + *size -= 1; + exepath_size = strlen(argsbuf[0]); + if (*size > exepath_size) + *size = exepath_size; + + memcpy(buffer, argsbuf[0], *size); + buffer[*size] = '\0'; + err = 0; + +out: + uv__free(argsbuf); + + return err; +} + + +uint64_t uv_get_free_memory(void) { + struct uvmexp info; + size_t size = sizeof(info); + int which[] = {CTL_VM, VM_UVMEXP}; + + if (sysctl(which, ARRAY_SIZE(which), &info, &size, NULL, 0)) + return UV__ERR(errno); + + return (uint64_t) info.free * sysconf(_SC_PAGESIZE); +} + + +uint64_t uv_get_total_memory(void) { + uint64_t info; + int which[] = {CTL_HW, HW_PHYSMEM64}; + size_t size = sizeof(info); + + if (sysctl(which, ARRAY_SIZE(which), &info, &size, NULL, 0)) + return UV__ERR(errno); + + return (uint64_t) info; +} + + +uint64_t uv_get_constrained_memory(void) { + return 0; /* Memory constraints are unknown. */ +} + + +int uv_resident_set_memory(size_t* rss) { + struct kinfo_proc kinfo; + size_t page_size = getpagesize(); + size_t size = sizeof(struct kinfo_proc); + int mib[6]; + + mib[0] = CTL_KERN; + mib[1] = KERN_PROC; + mib[2] = KERN_PROC_PID; + mib[3] = getpid(); + mib[4] = sizeof(struct kinfo_proc); + mib[5] = 1; + + if (sysctl(mib, ARRAY_SIZE(mib), &kinfo, &size, NULL, 0) < 0) + return UV__ERR(errno); + + *rss = kinfo.p_vm_rssize * page_size; + return 0; +} + + +int uv_uptime(double* uptime) { + time_t now; + struct timeval info; + size_t size = sizeof(info); + static int which[] = {CTL_KERN, KERN_BOOTTIME}; + + if (sysctl(which, ARRAY_SIZE(which), &info, &size, NULL, 0)) + return UV__ERR(errno); + + now = time(NULL); + + *uptime = (double)(now - info.tv_sec); + return 0; +} + + +int uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) { + unsigned int ticks = (unsigned int)sysconf(_SC_CLK_TCK), + multiplier = ((uint64_t)1000L / ticks), cpuspeed; + uint64_t info[CPUSTATES]; + char model[512]; + int numcpus = 1; + int which[] = {CTL_HW,HW_MODEL}; + int percpu[] = {CTL_KERN,KERN_CPTIME2,0}; + size_t size; + int i, j; + uv_cpu_info_t* cpu_info; + + size = sizeof(model); + if (sysctl(which, ARRAY_SIZE(which), &model, &size, NULL, 0)) + return UV__ERR(errno); + + which[1] = HW_NCPUONLINE; + size = sizeof(numcpus); + if (sysctl(which, ARRAY_SIZE(which), &numcpus, &size, NULL, 0)) + return UV__ERR(errno); + + *cpu_infos = uv__malloc(numcpus * sizeof(**cpu_infos)); + if (!(*cpu_infos)) + return UV_ENOMEM; + + i = 0; + *count = numcpus; + + which[1] = HW_CPUSPEED; + size = sizeof(cpuspeed); + if (sysctl(which, ARRAY_SIZE(which), &cpuspeed, &size, NULL, 0)) + goto error; + + size = sizeof(info); + for (i = 0; i < numcpus; i++) { + percpu[2] = i; + if (sysctl(percpu, ARRAY_SIZE(percpu), &info, &size, NULL, 0)) + goto error; + + cpu_info = &(*cpu_infos)[i]; + + cpu_info->cpu_times.user = (uint64_t)(info[CP_USER]) * multiplier; + cpu_info->cpu_times.nice = (uint64_t)(info[CP_NICE]) * multiplier; + cpu_info->cpu_times.sys = (uint64_t)(info[CP_SYS]) * multiplier; + cpu_info->cpu_times.idle = (uint64_t)(info[CP_IDLE]) * multiplier; + cpu_info->cpu_times.irq = (uint64_t)(info[CP_INTR]) * multiplier; + + cpu_info->model = uv__strdup(model); + cpu_info->speed = cpuspeed; + } + + return 0; + +error: + *count = 0; + for (j = 0; j < i; j++) + uv__free((*cpu_infos)[j].model); + + uv__free(*cpu_infos); + *cpu_infos = NULL; + return UV__ERR(errno); +} diff --git a/external/libuv/src/unix/os390-syscalls.c b/external/libuv/src/unix/os390-syscalls.c new file mode 100644 index 000000000..424cc486a --- /dev/null +++ b/external/libuv/src/unix/os390-syscalls.c @@ -0,0 +1,585 @@ +/* Copyright libuv 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 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. + */ + + +#include "os390-syscalls.h" +#include +#include +#include +#include +#include + +#define CW_INTRPT 1 +#define CW_CONDVAR 32 + +#pragma linkage(BPX4CTW, OS) +#pragma linkage(BPX1CTW, OS) + +static int number_of_epolls; +static QUEUE global_epoll_queue; +static uv_mutex_t global_epoll_lock; +static uv_once_t once = UV_ONCE_INIT; + +int scandir(const char* maindir, struct dirent*** namelist, + int (*filter)(const struct dirent*), + int (*compar)(const struct dirent**, + const struct dirent **)) { + struct dirent** nl; + struct dirent** nl_copy; + struct dirent* dirent; + unsigned count; + size_t allocated; + DIR* mdir; + + nl = NULL; + count = 0; + allocated = 0; + mdir = opendir(maindir); + if (!mdir) + return -1; + + while (1) { + dirent = readdir(mdir); + if (!dirent) + break; + if (!filter || filter(dirent)) { + struct dirent* copy; + copy = uv__malloc(sizeof(*copy)); + if (!copy) + goto error; + memcpy(copy, dirent, sizeof(*copy)); + + nl_copy = uv__realloc(nl, sizeof(*copy) * (count + 1)); + if (nl_copy == NULL) { + uv__free(copy); + goto error; + } + + nl = nl_copy; + nl[count++] = copy; + } + } + + qsort(nl, count, sizeof(struct dirent *), + (int (*)(const void *, const void *)) compar); + + closedir(mdir); + + *namelist = nl; + return count; + +error: + while (count > 0) { + dirent = nl[--count]; + uv__free(dirent); + } + uv__free(nl); + closedir(mdir); + errno = ENOMEM; + return -1; +} + + +static unsigned int next_power_of_two(unsigned int val) { + val -= 1; + val |= val >> 1; + val |= val >> 2; + val |= val >> 4; + val |= val >> 8; + val |= val >> 16; + val += 1; + return val; +} + + +static void maybe_resize(uv__os390_epoll* lst, unsigned int len) { + unsigned int newsize; + unsigned int i; + struct pollfd* newlst; + struct pollfd event; + + if (len <= lst->size) + return; + + if (lst->size == 0) + event.fd = -1; + else { + /* Extract the message queue at the end. */ + event = lst->items[lst->size - 1]; + lst->items[lst->size - 1].fd = -1; + } + + newsize = next_power_of_two(len); + newlst = uv__reallocf(lst->items, newsize * sizeof(lst->items[0])); + + if (newlst == NULL) + abort(); + for (i = lst->size; i < newsize; ++i) + newlst[i].fd = -1; + + /* Restore the message queue at the end */ + newlst[newsize - 1] = event; + + lst->items = newlst; + lst->size = newsize; +} + + +static void init_message_queue(uv__os390_epoll* lst) { + struct { + long int header; + char body; + } msg; + + /* initialize message queue */ + lst->msg_queue = msgget(IPC_PRIVATE, 0600 | IPC_CREAT); + if (lst->msg_queue == -1) + abort(); + + /* + On z/OS, the message queue will be affiliated with the process only + when a send is performed on it. Once this is done, the system + can be queried for all message queues belonging to our process id. + */ + msg.header = 1; + if (msgsnd(lst->msg_queue, &msg, sizeof(msg.body), 0) != 0) + abort(); + + /* Clean up the dummy message sent above */ + if (msgrcv(lst->msg_queue, &msg, sizeof(msg.body), 0, 0) != sizeof(msg.body)) + abort(); +} + + +static void before_fork(void) { + uv_mutex_lock(&global_epoll_lock); +} + + +static void after_fork(void) { + uv_mutex_unlock(&global_epoll_lock); +} + + +static void child_fork(void) { + QUEUE* q; + uv_once_t child_once = UV_ONCE_INIT; + + /* reset once */ + memcpy(&once, &child_once, sizeof(child_once)); + + /* reset epoll list */ + while (!QUEUE_EMPTY(&global_epoll_queue)) { + uv__os390_epoll* lst; + q = QUEUE_HEAD(&global_epoll_queue); + QUEUE_REMOVE(q); + lst = QUEUE_DATA(q, uv__os390_epoll, member); + uv__free(lst->items); + lst->items = NULL; + lst->size = 0; + } + + uv_mutex_unlock(&global_epoll_lock); + uv_mutex_destroy(&global_epoll_lock); +} + + +static void epoll_init(void) { + QUEUE_INIT(&global_epoll_queue); + if (uv_mutex_init(&global_epoll_lock)) + abort(); + + if (pthread_atfork(&before_fork, &after_fork, &child_fork)) + abort(); +} + + +uv__os390_epoll* epoll_create1(int flags) { + uv__os390_epoll* lst; + + lst = uv__malloc(sizeof(*lst)); + if (lst != NULL) { + /* initialize list */ + lst->size = 0; + lst->items = NULL; + init_message_queue(lst); + maybe_resize(lst, 1); + lst->items[lst->size - 1].fd = lst->msg_queue; + lst->items[lst->size - 1].events = POLLIN; + lst->items[lst->size - 1].revents = 0; + uv_once(&once, epoll_init); + uv_mutex_lock(&global_epoll_lock); + QUEUE_INSERT_TAIL(&global_epoll_queue, &lst->member); + uv_mutex_unlock(&global_epoll_lock); + } + + return lst; +} + + +int epoll_ctl(uv__os390_epoll* lst, + int op, + int fd, + struct epoll_event *event) { + uv_mutex_lock(&global_epoll_lock); + + if (op == EPOLL_CTL_DEL) { + if (fd >= lst->size || lst->items[fd].fd == -1) { + uv_mutex_unlock(&global_epoll_lock); + errno = ENOENT; + return -1; + } + lst->items[fd].fd = -1; + } else if (op == EPOLL_CTL_ADD) { + + /* Resizing to 'fd + 1' would expand the list to contain at least + * 'fd'. But we need to guarantee that the last index on the list + * is reserved for the message queue. So specify 'fd + 2' instead. + */ + maybe_resize(lst, fd + 2); + if (lst->items[fd].fd != -1) { + uv_mutex_unlock(&global_epoll_lock); + errno = EEXIST; + return -1; + } + lst->items[fd].fd = fd; + lst->items[fd].events = event->events; + lst->items[fd].revents = 0; + } else if (op == EPOLL_CTL_MOD) { + if (fd >= lst->size - 1 || lst->items[fd].fd == -1) { + uv_mutex_unlock(&global_epoll_lock); + errno = ENOENT; + return -1; + } + lst->items[fd].events = event->events; + lst->items[fd].revents = 0; + } else + abort(); + + uv_mutex_unlock(&global_epoll_lock); + return 0; +} + +#define EP_MAX_PFDS (ULONG_MAX / sizeof(struct pollfd)) +#define EP_MAX_EVENTS (INT_MAX / sizeof(struct epoll_event)) + +int epoll_wait(uv__os390_epoll* lst, struct epoll_event* events, + int maxevents, int timeout) { + nmsgsfds_t size; + struct pollfd* pfds; + int pollret; + int reventcount; + int nevents; + struct pollfd msg_fd; + int i; + + if (!lst || !lst->items || !events) { + errno = EFAULT; + return -1; + } + + if (lst->size > EP_MAX_PFDS) { + errno = EINVAL; + return -1; + } + + if (maxevents <= 0 || maxevents > EP_MAX_EVENTS) { + errno = EINVAL; + return -1; + } + + if (lst->size > 0) + _SET_FDS_MSGS(size, 1, lst->size - 1); + else + _SET_FDS_MSGS(size, 0, 0); + pfds = lst->items; + pollret = poll(pfds, size, timeout); + if (pollret <= 0) + return pollret; + + assert(lst->size > 0); + + pollret = _NFDS(pollret) + _NMSGS(pollret); + + reventcount = 0; + nevents = 0; + msg_fd = pfds[lst->size - 1]; + for (i = 0; + i < lst->size && i < maxevents && reventcount < pollret; ++i) { + struct epoll_event ev; + struct pollfd* pfd; + + pfd = &pfds[i]; + if (pfd->fd == -1 || pfd->revents == 0) + continue; + + ev.fd = pfd->fd; + ev.events = pfd->revents; + ev.is_msg = 0; + if (pfd->revents & POLLIN && pfd->revents & POLLOUT) + reventcount += 2; + else if (pfd->revents & (POLLIN | POLLOUT)) + ++reventcount; + + pfd->revents = 0; + events[nevents++] = ev; + } + + if (msg_fd.revents != 0 && msg_fd.fd != -1) + if (i == lst->size) + events[nevents - 1].is_msg = 1; + + return nevents; +} + + +int epoll_file_close(int fd) { + QUEUE* q; + + uv_once(&once, epoll_init); + uv_mutex_lock(&global_epoll_lock); + QUEUE_FOREACH(q, &global_epoll_queue) { + uv__os390_epoll* lst; + + lst = QUEUE_DATA(q, uv__os390_epoll, member); + if (fd < lst->size && lst->items != NULL && lst->items[fd].fd != -1) + lst->items[fd].fd = -1; + } + + uv_mutex_unlock(&global_epoll_lock); + return 0; +} + +void epoll_queue_close(uv__os390_epoll* lst) { + /* Remove epoll instance from global queue */ + uv_mutex_lock(&global_epoll_lock); + QUEUE_REMOVE(&lst->member); + uv_mutex_unlock(&global_epoll_lock); + + /* Free resources */ + msgctl(lst->msg_queue, IPC_RMID, NULL); + lst->msg_queue = -1; + uv__free(lst->items); + lst->items = NULL; +} + + +int nanosleep(const struct timespec* req, struct timespec* rem) { + unsigned nano; + unsigned seconds; + unsigned events; + unsigned secrem; + unsigned nanorem; + int rv; + int err; + int rsn; + + nano = (int)req->tv_nsec; + seconds = req->tv_sec; + events = CW_CONDVAR | CW_INTRPT; + secrem = 0; + nanorem = 0; + +#if defined(_LP64) + BPX4CTW(&seconds, &nano, &events, &secrem, &nanorem, &rv, &err, &rsn); +#else + BPX1CTW(&seconds, &nano, &events, &secrem, &nanorem, &rv, &err, &rsn); +#endif + + /* Don't clobber errno unless BPX1CTW/BPX4CTW errored. + * Don't leak EAGAIN, that just means the timeout expired. + */ + if (rv == -1) + if (err == EAGAIN) + rv = 0; + else + errno = err; + + if (rem != NULL && (rv == 0 || err == EINTR)) { + rem->tv_nsec = nanorem; + rem->tv_sec = secrem; + } + + return rv; +} + + +char* mkdtemp(char* path) { + static const char* tempchars = + "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; + static const size_t num_chars = 62; + static const size_t num_x = 6; + char *ep, *cp; + unsigned int tries, i; + size_t len; + uint64_t v; + int fd; + int retval; + int saved_errno; + + len = strlen(path); + ep = path + len; + if (len < num_x || strncmp(ep - num_x, "XXXXXX", num_x)) { + errno = EINVAL; + return NULL; + } + + fd = open("/dev/urandom", O_RDONLY); + if (fd == -1) + return NULL; + + tries = TMP_MAX; + retval = -1; + do { + if (read(fd, &v, sizeof(v)) != sizeof(v)) + break; + + cp = ep - num_x; + for (i = 0; i < num_x; i++) { + *cp++ = tempchars[v % num_chars]; + v /= num_chars; + } + + if (mkdir(path, S_IRWXU) == 0) { + retval = 0; + break; + } + else if (errno != EEXIST) + break; + } while (--tries); + + saved_errno = errno; + uv__close(fd); + if (tries == 0) { + errno = EEXIST; + return NULL; + } + + if (retval == -1) { + errno = saved_errno; + return NULL; + } + + return path; +} + + +ssize_t os390_readlink(const char* path, char* buf, size_t len) { + ssize_t rlen; + ssize_t vlen; + ssize_t plen; + char* delimiter; + char old_delim; + char* tmpbuf; + char realpathstr[PATH_MAX + 1]; + + tmpbuf = uv__malloc(len + 1); + if (tmpbuf == NULL) { + errno = ENOMEM; + return -1; + } + + rlen = readlink(path, tmpbuf, len); + if (rlen < 0) { + uv__free(tmpbuf); + return rlen; + } + + if (rlen < 3 || strncmp("/$", tmpbuf, 2) != 0) { + /* Straightforward readlink. */ + memcpy(buf, tmpbuf, rlen); + uv__free(tmpbuf); + return rlen; + } + + /* + * There is a parmlib variable at the beginning + * which needs interpretation. + */ + tmpbuf[rlen] = '\0'; + delimiter = strchr(tmpbuf + 2, '/'); + if (delimiter == NULL) + /* No slash at the end */ + delimiter = strchr(tmpbuf + 2, '\0'); + + /* Read real path of the variable. */ + old_delim = *delimiter; + *delimiter = '\0'; + if (realpath(tmpbuf, realpathstr) == NULL) { + uv__free(tmpbuf); + return -1; + } + + /* realpathstr is not guaranteed to end with null byte.*/ + realpathstr[PATH_MAX] = '\0'; + + /* Reset the delimiter and fill up the buffer. */ + *delimiter = old_delim; + plen = strlen(delimiter); + vlen = strlen(realpathstr); + rlen = plen + vlen; + if (rlen > len) { + uv__free(tmpbuf); + errno = ENAMETOOLONG; + return -1; + } + memcpy(buf, realpathstr, vlen); + memcpy(buf + vlen, delimiter, plen); + + /* Done using temporary buffer. */ + uv__free(tmpbuf); + + return rlen; +} + + +size_t strnlen(const char* str, size_t maxlen) { + char* p = memchr(str, 0, maxlen); + if (p == NULL) + return maxlen; + else + return p - str; +} + + +int sem_init(UV_PLATFORM_SEM_T* semid, int pshared, unsigned int value) { + UNREACHABLE(); +} + + +int sem_destroy(UV_PLATFORM_SEM_T* semid) { + UNREACHABLE(); +} + + +int sem_post(UV_PLATFORM_SEM_T* semid) { + UNREACHABLE(); +} + + +int sem_trywait(UV_PLATFORM_SEM_T* semid) { + UNREACHABLE(); +} + + +int sem_wait(UV_PLATFORM_SEM_T* semid) { + UNREACHABLE(); +} diff --git a/external/libuv/src/unix/os390-syscalls.h b/external/libuv/src/unix/os390-syscalls.h new file mode 100644 index 000000000..86416bbc5 --- /dev/null +++ b/external/libuv/src/unix/os390-syscalls.h @@ -0,0 +1,74 @@ +/* Copyright libuv 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 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. + */ + + +#ifndef UV_OS390_SYSCALL_H_ +#define UV_OS390_SYSCALL_H_ + +#include "uv.h" +#include "internal.h" +#include +#include +#include + +#define EPOLL_CTL_ADD 1 +#define EPOLL_CTL_DEL 2 +#define EPOLL_CTL_MOD 3 +#define MAX_EPOLL_INSTANCES 256 +#define MAX_ITEMS_PER_EPOLL 1024 + +#define UV__O_CLOEXEC 0x80000 + +struct epoll_event { + int events; + int fd; + int is_msg; +}; + +typedef struct { + QUEUE member; + struct pollfd* items; + unsigned long size; + int msg_queue; +} uv__os390_epoll; + +/* epoll api */ +uv__os390_epoll* epoll_create1(int flags); +int epoll_ctl(uv__os390_epoll* ep, int op, int fd, struct epoll_event *event); +int epoll_wait(uv__os390_epoll* ep, struct epoll_event *events, int maxevents, int timeout); +int epoll_file_close(int fd); + +/* utility functions */ +int nanosleep(const struct timespec* req, struct timespec* rem); +int scandir(const char* maindir, struct dirent*** namelist, + int (*filter)(const struct dirent *), + int (*compar)(const struct dirent **, + const struct dirent **)); +char *mkdtemp(char* path); +ssize_t os390_readlink(const char* path, char* buf, size_t len); +size_t strnlen(const char* str, size_t maxlen); +int sem_init(UV_PLATFORM_SEM_T* semid, int pshared, unsigned int value); +int sem_destroy(UV_PLATFORM_SEM_T* semid); +int sem_post(UV_PLATFORM_SEM_T* semid); +int sem_trywait(UV_PLATFORM_SEM_T* semid); +int sem_wait(UV_PLATFORM_SEM_T* semid); + +#endif /* UV_OS390_SYSCALL_H_ */ diff --git a/external/libuv/src/unix/os390.c b/external/libuv/src/unix/os390.c new file mode 100644 index 000000000..dce169b9f --- /dev/null +++ b/external/libuv/src/unix/os390.c @@ -0,0 +1,1003 @@ +/* Copyright libuv 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 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. + */ + +#include "internal.h" +#include +#include +#include +#include +#include +#include +#include +#include +#if defined(__clang__) +#include "csrsic.h" +#else +#include "//'SYS1.SAMPLIB(CSRSIC)'" +#endif + +#define CVT_PTR 0x10 +#define PSA_PTR 0x00 +#define CSD_OFFSET 0x294 + +/* + Long-term average CPU service used by this logical partition, + in millions of service units per hour. If this value is above + the partition's defined capacity, the partition will be capped. + It is calculated using the physical CPU adjustment factor + (RCTPCPUA) so it may not match other measures of service which + are based on the logical CPU adjustment factor. It is available + if the hardware supports LPAR cluster. +*/ +#define RCTLACS_OFFSET 0xC4 + +/* 32-bit count of alive CPUs. This includes both CPs and IFAs */ +#define CSD_NUMBER_ONLINE_CPUS 0xD4 + +/* Address of system resources manager (SRM) control table */ +#define CVTOPCTP_OFFSET 0x25C + +/* Address of the RCT table */ +#define RMCTRCT_OFFSET 0xE4 + +/* Address of the rsm control and enumeration area. */ +#define CVTRCEP_OFFSET 0x490 + +/* + Number of frames currently available to system. + Excluded are frames backing perm storage, frames offline, and bad frames. +*/ +#define RCEPOOL_OFFSET 0x004 + +/* Total number of frames currently on all available frame queues. */ +#define RCEAFC_OFFSET 0x088 + +/* CPC model length from the CSRSI Service. */ +#define CPCMODEL_LENGTH 16 + +/* Pointer to the home (current) ASCB. */ +#define PSAAOLD 0x224 + +/* Pointer to rsm address space block extension. */ +#define ASCBRSME 0x16C + +/* + NUMBER OF FRAMES CURRENTLY IN USE BY THIS ADDRESS SPACE. + It does not include 2G frames. +*/ +#define RAXFMCT 0x2C + +/* Thread Entry constants */ +#define PGTH_CURRENT 1 +#define PGTH_LEN 26 +#define PGTHAPATH 0x20 +#pragma linkage(BPX4GTH, OS) +#pragma linkage(BPX1GTH, OS) + +/* TOD Clock resolution in nanoseconds */ +#define TOD_RES 4.096 + +typedef unsigned data_area_ptr_assign_type; + +typedef union { + struct { +#if defined(_LP64) + data_area_ptr_assign_type lower; +#endif + data_area_ptr_assign_type assign; + }; + char* deref; +} data_area_ptr; + + +void uv_loadavg(double avg[3]) { + /* TODO: implement the following */ + avg[0] = 0; + avg[1] = 0; + avg[2] = 0; +} + + +int uv__platform_loop_init(uv_loop_t* loop) { + uv__os390_epoll* ep; + + ep = epoll_create1(0); + loop->ep = ep; + if (ep == NULL) + return UV__ERR(errno); + + return 0; +} + + +void uv__platform_loop_delete(uv_loop_t* loop) { + if (loop->ep != NULL) { + epoll_queue_close(loop->ep); + loop->ep = NULL; + } +} + + +uint64_t uv__hrtime(uv_clocktype_t type) { + unsigned long long timestamp; + __stckf(×tamp); + /* Convert to nanoseconds */ + return timestamp / TOD_RES; +} + + +/* + Get the exe path using the thread entry information + in the address space. +*/ +static int getexe(const int pid, char* buf, size_t len) { + struct { + int pid; + int thid[2]; + char accesspid; + char accessthid; + char asid[2]; + char loginname[8]; + char flag; + char len; + } Input_data; + + union { + struct { + char gthb[4]; + int pid; + int thid[2]; + char accesspid; + char accessthid[3]; + int lenused; + int offsetProcess; + int offsetConTTY; + int offsetPath; + int offsetCommand; + int offsetFileData; + int offsetThread; + } Output_data; + char buf[2048]; + } Output_buf; + + struct Output_path_type { + char gthe[4]; + short int len; + char path[1024]; + }; + + int Input_length; + int Output_length; + void* Input_address; + void* Output_address; + struct Output_path_type* Output_path; + int rv; + int rc; + int rsn; + + Input_length = PGTH_LEN; + Output_length = sizeof(Output_buf); + Output_address = &Output_buf; + Input_address = &Input_data; + memset(&Input_data, 0, sizeof Input_data); + Input_data.flag |= PGTHAPATH; + Input_data.pid = pid; + Input_data.accesspid = PGTH_CURRENT; + +#ifdef _LP64 + BPX4GTH(&Input_length, + &Input_address, + &Output_length, + &Output_address, + &rv, + &rc, + &rsn); +#else + BPX1GTH(&Input_length, + &Input_address, + &Output_length, + &Output_address, + &rv, + &rc, + &rsn); +#endif + + if (rv == -1) { + errno = rc; + return -1; + } + + /* Check highest byte to ensure data availability */ + assert(((Output_buf.Output_data.offsetPath >>24) & 0xFF) == 'A'); + + /* Get the offset from the lowest 3 bytes */ + Output_path = (struct Output_path_type*) ((char*) (&Output_buf) + + (Output_buf.Output_data.offsetPath & 0x00FFFFFF)); + + if (Output_path->len >= len) { + errno = ENOBUFS; + return -1; + } + + uv__strscpy(buf, Output_path->path, len); + + return 0; +} + + +/* + * We could use a static buffer for the path manipulations that we need outside + * of the function, but this function could be called by multiple consumers and + * we don't want to potentially create a race condition in the use of snprintf. + * There is no direct way of getting the exe path in zOS - either through /procfs + * or through some libc APIs. The below approach is to parse the argv[0]'s pattern + * and use it in conjunction with PATH environment variable to craft one. + */ +int uv_exepath(char* buffer, size_t* size) { + int res; + char args[PATH_MAX]; + char abspath[PATH_MAX]; + size_t abspath_size; + int pid; + + if (buffer == NULL || size == NULL || *size == 0) + return UV_EINVAL; + + pid = getpid(); + res = getexe(pid, args, sizeof(args)); + if (res < 0) + return UV_EINVAL; + + /* + * Possibilities for args: + * i) an absolute path such as: /home/user/myprojects/nodejs/node + * ii) a relative path such as: ./node or ../myprojects/nodejs/node + * iii) a bare filename such as "node", after exporting PATH variable + * to its location. + */ + + /* Case i) and ii) absolute or relative paths */ + if (strchr(args, '/') != NULL) { + if (realpath(args, abspath) != abspath) + return UV__ERR(errno); + + abspath_size = strlen(abspath); + + *size -= 1; + if (*size > abspath_size) + *size = abspath_size; + + memcpy(buffer, abspath, *size); + buffer[*size] = '\0'; + + return 0; + } else { + /* Case iii). Search PATH environment variable */ + char trypath[PATH_MAX]; + char* clonedpath = NULL; + char* token = NULL; + char* path = getenv("PATH"); + + if (path == NULL) + return UV_EINVAL; + + clonedpath = uv__strdup(path); + if (clonedpath == NULL) + return UV_ENOMEM; + + token = strtok(clonedpath, ":"); + while (token != NULL) { + snprintf(trypath, sizeof(trypath) - 1, "%s/%s", token, args); + if (realpath(trypath, abspath) == abspath) { + /* Check the match is executable */ + if (access(abspath, X_OK) == 0) { + abspath_size = strlen(abspath); + + *size -= 1; + if (*size > abspath_size) + *size = abspath_size; + + memcpy(buffer, abspath, *size); + buffer[*size] = '\0'; + + uv__free(clonedpath); + return 0; + } + } + token = strtok(NULL, ":"); + } + uv__free(clonedpath); + + /* Out of tokens (path entries), and no match found */ + return UV_EINVAL; + } +} + + +uint64_t uv_get_free_memory(void) { + uint64_t freeram; + + data_area_ptr cvt = {0}; + data_area_ptr rcep = {0}; + cvt.assign = *(data_area_ptr_assign_type*)(CVT_PTR); + rcep.assign = *(data_area_ptr_assign_type*)(cvt.deref + CVTRCEP_OFFSET); + freeram = *((uint64_t*)(rcep.deref + RCEAFC_OFFSET)) * 4; + return freeram; +} + + +uint64_t uv_get_total_memory(void) { + uint64_t totalram; + + data_area_ptr cvt = {0}; + data_area_ptr rcep = {0}; + cvt.assign = *(data_area_ptr_assign_type*)(CVT_PTR); + rcep.assign = *(data_area_ptr_assign_type*)(cvt.deref + CVTRCEP_OFFSET); + totalram = *((uint64_t*)(rcep.deref + RCEPOOL_OFFSET)) * 4; + return totalram; +} + + +uint64_t uv_get_constrained_memory(void) { + return 0; /* Memory constraints are unknown. */ +} + + +int uv_resident_set_memory(size_t* rss) { + char* ascb; + char* rax; + size_t nframes; + + ascb = *(char* __ptr32 *)(PSA_PTR + PSAAOLD); + rax = *(char* __ptr32 *)(ascb + ASCBRSME); + nframes = *(unsigned int*)(rax + RAXFMCT); + + *rss = nframes * sysconf(_SC_PAGESIZE); + return 0; +} + + +int uv_uptime(double* uptime) { + struct utmpx u ; + struct utmpx *v; + time64_t t; + + u.ut_type = BOOT_TIME; + v = getutxid(&u); + if (v == NULL) + return -1; + *uptime = difftime64(time64(&t), v->ut_tv.tv_sec); + return 0; +} + + +int uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) { + uv_cpu_info_t* cpu_info; + int idx; + siv1v2 info; + data_area_ptr cvt = {0}; + data_area_ptr csd = {0}; + data_area_ptr rmctrct = {0}; + data_area_ptr cvtopctp = {0}; + int cpu_usage_avg; + + cvt.assign = *(data_area_ptr_assign_type*)(CVT_PTR); + + csd.assign = *((data_area_ptr_assign_type *) (cvt.deref + CSD_OFFSET)); + cvtopctp.assign = *((data_area_ptr_assign_type *) (cvt.deref + CVTOPCTP_OFFSET)); + rmctrct.assign = *((data_area_ptr_assign_type *) (cvtopctp.deref + RMCTRCT_OFFSET)); + + *count = *((int*) (csd.deref + CSD_NUMBER_ONLINE_CPUS)); + cpu_usage_avg = *((unsigned short int*) (rmctrct.deref + RCTLACS_OFFSET)); + + *cpu_infos = uv__malloc(*count * sizeof(uv_cpu_info_t)); + if (!*cpu_infos) + return UV_ENOMEM; + + cpu_info = *cpu_infos; + idx = 0; + while (idx < *count) { + cpu_info->speed = *(int*)(info.siv1v2si22v1.si22v1cpucapability); + cpu_info->model = uv__malloc(CPCMODEL_LENGTH + 1); + memset(cpu_info->model, '\0', CPCMODEL_LENGTH + 1); + memcpy(cpu_info->model, info.siv1v2si11v1.si11v1cpcmodel, CPCMODEL_LENGTH); + cpu_info->cpu_times.user = cpu_usage_avg; + /* TODO: implement the following */ + cpu_info->cpu_times.sys = 0; + cpu_info->cpu_times.idle = 0; + cpu_info->cpu_times.irq = 0; + cpu_info->cpu_times.nice = 0; + ++cpu_info; + ++idx; + } + + return 0; +} + + +static int uv__interface_addresses_v6(uv_interface_address_t** addresses, + int* count) { + uv_interface_address_t* address; + int sockfd; + int maxsize; + __net_ifconf6header_t ifc; + __net_ifconf6entry_t* ifr; + __net_ifconf6entry_t* p; + __net_ifconf6entry_t flg; + + *count = 0; + /* Assume maximum buffer size allowable */ + maxsize = 16384; + + if (0 > (sockfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP))) + return UV__ERR(errno); + + ifc.__nif6h_version = 1; + ifc.__nif6h_buflen = maxsize; + ifc.__nif6h_buffer = uv__calloc(1, maxsize);; + + if (ioctl(sockfd, SIOCGIFCONF6, &ifc) == -1) { + uv__close(sockfd); + return UV__ERR(errno); + } + + + *count = 0; + ifr = (__net_ifconf6entry_t*)(ifc.__nif6h_buffer); + while ((char*)ifr < (char*)ifc.__nif6h_buffer + ifc.__nif6h_buflen) { + p = ifr; + ifr = (__net_ifconf6entry_t*)((char*)ifr + ifc.__nif6h_entrylen); + + if (!(p->__nif6e_addr.sin6_family == AF_INET6 || + p->__nif6e_addr.sin6_family == AF_INET)) + continue; + + if (!(p->__nif6e_flags & _NIF6E_FLAGS_ON_LINK_ACTIVE)) + continue; + + ++(*count); + } + + /* Alloc the return interface structs */ + *addresses = uv__malloc(*count * sizeof(uv_interface_address_t)); + if (!(*addresses)) { + uv__close(sockfd); + return UV_ENOMEM; + } + address = *addresses; + + ifr = (__net_ifconf6entry_t*)(ifc.__nif6h_buffer); + while ((char*)ifr < (char*)ifc.__nif6h_buffer + ifc.__nif6h_buflen) { + p = ifr; + ifr = (__net_ifconf6entry_t*)((char*)ifr + ifc.__nif6h_entrylen); + + if (!(p->__nif6e_addr.sin6_family == AF_INET6 || + p->__nif6e_addr.sin6_family == AF_INET)) + continue; + + if (!(p->__nif6e_flags & _NIF6E_FLAGS_ON_LINK_ACTIVE)) + continue; + + /* All conditions above must match count loop */ + + address->name = uv__strdup(p->__nif6e_name); + + if (p->__nif6e_addr.sin6_family == AF_INET6) + address->address.address6 = *((struct sockaddr_in6*) &p->__nif6e_addr); + else + address->address.address4 = *((struct sockaddr_in*) &p->__nif6e_addr); + + /* TODO: Retrieve netmask using SIOCGIFNETMASK ioctl */ + + address->is_internal = flg.__nif6e_flags & _NIF6E_FLAGS_LOOPBACK ? 1 : 0; + memset(address->phys_addr, 0, sizeof(address->phys_addr)); + address++; + } + + uv__close(sockfd); + return 0; +} + + +int uv_interface_addresses(uv_interface_address_t** addresses, int* count) { + uv_interface_address_t* address; + int sockfd; + int maxsize; + struct ifconf ifc; + struct ifreq flg; + struct ifreq* ifr; + struct ifreq* p; + int count_v6; + + *count = 0; + *addresses = NULL; + + /* get the ipv6 addresses first */ + uv_interface_address_t* addresses_v6; + uv__interface_addresses_v6(&addresses_v6, &count_v6); + + /* now get the ipv4 addresses */ + + /* Assume maximum buffer size allowable */ + maxsize = 16384; + + sockfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP); + if (0 > sockfd) + return UV__ERR(errno); + + ifc.ifc_req = uv__calloc(1, maxsize); + ifc.ifc_len = maxsize; + if (ioctl(sockfd, SIOCGIFCONF, &ifc) == -1) { + uv__close(sockfd); + return UV__ERR(errno); + } + +#define MAX(a,b) (((a)>(b))?(a):(b)) +#define ADDR_SIZE(p) MAX((p).sa_len, sizeof(p)) + + /* Count all up and running ipv4/ipv6 addresses */ + ifr = ifc.ifc_req; + while ((char*)ifr < (char*)ifc.ifc_req + ifc.ifc_len) { + p = ifr; + ifr = (struct ifreq*) + ((char*)ifr + sizeof(ifr->ifr_name) + ADDR_SIZE(ifr->ifr_addr)); + + if (!(p->ifr_addr.sa_family == AF_INET6 || + p->ifr_addr.sa_family == AF_INET)) + continue; + + memcpy(flg.ifr_name, p->ifr_name, sizeof(flg.ifr_name)); + if (ioctl(sockfd, SIOCGIFFLAGS, &flg) == -1) { + uv__close(sockfd); + return UV__ERR(errno); + } + + if (!(flg.ifr_flags & IFF_UP && flg.ifr_flags & IFF_RUNNING)) + continue; + + (*count)++; + } + + if (*count == 0) { + uv__close(sockfd); + return 0; + } + + /* Alloc the return interface structs */ + *addresses = uv__malloc((*count + count_v6) * + sizeof(uv_interface_address_t)); + + if (!(*addresses)) { + uv__close(sockfd); + return UV_ENOMEM; + } + address = *addresses; + + /* copy over the ipv6 addresses */ + memcpy(address, addresses_v6, count_v6 * sizeof(uv_interface_address_t)); + address += count_v6; + *count += count_v6; + uv__free(addresses_v6); + + ifr = ifc.ifc_req; + while ((char*)ifr < (char*)ifc.ifc_req + ifc.ifc_len) { + p = ifr; + ifr = (struct ifreq*) + ((char*)ifr + sizeof(ifr->ifr_name) + ADDR_SIZE(ifr->ifr_addr)); + + if (!(p->ifr_addr.sa_family == AF_INET6 || + p->ifr_addr.sa_family == AF_INET)) + continue; + + memcpy(flg.ifr_name, p->ifr_name, sizeof(flg.ifr_name)); + if (ioctl(sockfd, SIOCGIFFLAGS, &flg) == -1) { + uv__close(sockfd); + return UV_ENOSYS; + } + + if (!(flg.ifr_flags & IFF_UP && flg.ifr_flags & IFF_RUNNING)) + continue; + + /* All conditions above must match count loop */ + + address->name = uv__strdup(p->ifr_name); + + if (p->ifr_addr.sa_family == AF_INET6) { + address->address.address6 = *((struct sockaddr_in6*) &p->ifr_addr); + } else { + address->address.address4 = *((struct sockaddr_in*) &p->ifr_addr); + } + + address->is_internal = flg.ifr_flags & IFF_LOOPBACK ? 1 : 0; + memset(address->phys_addr, 0, sizeof(address->phys_addr)); + address++; + } + +#undef ADDR_SIZE +#undef MAX + + uv__close(sockfd); + return 0; +} + + +void uv_free_interface_addresses(uv_interface_address_t* addresses, + int count) { + int i; + for (i = 0; i < count; ++i) + uv__free(addresses[i].name); + uv__free(addresses); +} + + +void uv__platform_invalidate_fd(uv_loop_t* loop, int fd) { + struct epoll_event* events; + struct epoll_event dummy; + uintptr_t i; + uintptr_t nfds; + + assert(loop->watchers != NULL); + assert(fd >= 0); + + events = (struct epoll_event*) loop->watchers[loop->nwatchers]; + nfds = (uintptr_t) loop->watchers[loop->nwatchers + 1]; + if (events != NULL) + /* Invalidate events with same file descriptor */ + for (i = 0; i < nfds; i++) + if ((int) events[i].fd == fd) + events[i].fd = -1; + + /* Remove the file descriptor from the epoll. */ + if (loop->ep != NULL) + epoll_ctl(loop->ep, EPOLL_CTL_DEL, fd, &dummy); +} + + +int uv__io_check_fd(uv_loop_t* loop, int fd) { + struct pollfd p[1]; + int rv; + + p[0].fd = fd; + p[0].events = POLLIN; + + do + rv = poll(p, 1, 0); + while (rv == -1 && errno == EINTR); + + if (rv == -1) + abort(); + + if (p[0].revents & POLLNVAL) + return -1; + + return 0; +} + + +void uv__fs_event_close(uv_fs_event_t* handle) { + uv_fs_event_stop(handle); +} + + +int uv_fs_event_init(uv_loop_t* loop, uv_fs_event_t* handle) { + uv__handle_init(loop, (uv_handle_t*)handle, UV_FS_EVENT); + return 0; +} + + +int uv_fs_event_start(uv_fs_event_t* handle, uv_fs_event_cb cb, + const char* filename, unsigned int flags) { + uv__os390_epoll* ep; + _RFIS reg_struct; + char* path; + int rc; + + if (uv__is_active(handle)) + return UV_EINVAL; + + ep = handle->loop->ep; + assert(ep->msg_queue != -1); + + reg_struct.__rfis_cmd = _RFIS_REG; + reg_struct.__rfis_qid = ep->msg_queue; + reg_struct.__rfis_type = 1; + memcpy(reg_struct.__rfis_utok, &handle, sizeof(handle)); + + path = uv__strdup(filename); + if (path == NULL) + return UV_ENOMEM; + + rc = __w_pioctl(path, _IOCC_REGFILEINT, sizeof(reg_struct), ®_struct); + if (rc != 0) + return UV__ERR(errno); + + uv__handle_start(handle); + handle->path = path; + handle->cb = cb; + memcpy(handle->rfis_rftok, reg_struct.__rfis_rftok, + sizeof(handle->rfis_rftok)); + + return 0; +} + + +int uv_fs_event_stop(uv_fs_event_t* handle) { + uv__os390_epoll* ep; + _RFIS reg_struct; + int rc; + + if (!uv__is_active(handle)) + return 0; + + ep = handle->loop->ep; + assert(ep->msg_queue != -1); + + reg_struct.__rfis_cmd = _RFIS_UNREG; + reg_struct.__rfis_qid = ep->msg_queue; + reg_struct.__rfis_type = 1; + memcpy(reg_struct.__rfis_rftok, handle->rfis_rftok, + sizeof(handle->rfis_rftok)); + + /* + * This call will take "/" as the path argument in case we + * don't care to supply the correct path. The system will simply + * ignore it. + */ + rc = __w_pioctl("/", _IOCC_REGFILEINT, sizeof(reg_struct), ®_struct); + if (rc != 0 && errno != EALREADY && errno != ENOENT) + abort(); + + uv__handle_stop(handle); + + return 0; +} + + +static int os390_message_queue_handler(uv__os390_epoll* ep) { + uv_fs_event_t* handle; + int msglen; + int events; + _RFIM msg; + + if (ep->msg_queue == -1) + return 0; + + msglen = msgrcv(ep->msg_queue, &msg, sizeof(msg), 0, IPC_NOWAIT); + + if (msglen == -1 && errno == ENOMSG) + return 0; + + if (msglen == -1) + abort(); + + events = 0; + if (msg.__rfim_event == _RFIM_ATTR || msg.__rfim_event == _RFIM_WRITE) + events = UV_CHANGE; + else if (msg.__rfim_event == _RFIM_RENAME) + events = UV_RENAME; + else + /* Some event that we are not interested in. */ + return 0; + + handle = *(uv_fs_event_t**)(msg.__rfim_utok); + handle->cb(handle, uv__basename_r(handle->path), events, 0); + return 1; +} + + +void uv__io_poll(uv_loop_t* loop, int timeout) { + static const int max_safe_timeout = 1789569; + struct epoll_event events[1024]; + struct epoll_event* pe; + struct epoll_event e; + uv__os390_epoll* ep; + int real_timeout; + QUEUE* q; + uv__io_t* w; + uint64_t base; + int count; + int nfds; + int fd; + int op; + int i; + + if (loop->nfds == 0) { + assert(QUEUE_EMPTY(&loop->watcher_queue)); + return; + } + + while (!QUEUE_EMPTY(&loop->watcher_queue)) { + uv_stream_t* stream; + + q = QUEUE_HEAD(&loop->watcher_queue); + QUEUE_REMOVE(q); + QUEUE_INIT(q); + w = QUEUE_DATA(q, uv__io_t, watcher_queue); + + assert(w->pevents != 0); + assert(w->fd >= 0); + + stream= container_of(w, uv_stream_t, io_watcher); + + assert(w->fd < (int) loop->nwatchers); + + e.events = w->pevents; + e.fd = w->fd; + + if (w->events == 0) + op = EPOLL_CTL_ADD; + else + op = EPOLL_CTL_MOD; + + /* XXX Future optimization: do EPOLL_CTL_MOD lazily if we stop watching + * events, skip the syscall and squelch the events after epoll_wait(). + */ + if (epoll_ctl(loop->ep, op, w->fd, &e)) { + if (errno != EEXIST) + abort(); + + assert(op == EPOLL_CTL_ADD); + + /* We've reactivated a file descriptor that's been watched before. */ + if (epoll_ctl(loop->ep, EPOLL_CTL_MOD, w->fd, &e)) + abort(); + } + + w->events = w->pevents; + } + + assert(timeout >= -1); + base = loop->time; + count = 48; /* Benchmarks suggest this gives the best throughput. */ + real_timeout = timeout; + int nevents = 0; + + nfds = 0; + for (;;) { + if (sizeof(int32_t) == sizeof(long) && timeout >= max_safe_timeout) + timeout = max_safe_timeout; + + nfds = epoll_wait(loop->ep, events, + ARRAY_SIZE(events), timeout); + + /* Update loop->time unconditionally. It's tempting to skip the update when + * timeout == 0 (i.e. non-blocking poll) but there is no guarantee that the + * operating system didn't reschedule our process while in the syscall. + */ + base = loop->time; + SAVE_ERRNO(uv__update_time(loop)); + if (nfds == 0) { + assert(timeout != -1); + + if (timeout > 0) { + timeout = real_timeout - timeout; + continue; + } + + return; + } + + if (nfds == -1) { + + if (errno != EINTR) + abort(); + + if (timeout == -1) + continue; + + if (timeout == 0) + return; + + /* Interrupted by a signal. Update timeout and poll again. */ + goto update_timeout; + } + + + assert(loop->watchers != NULL); + loop->watchers[loop->nwatchers] = (void*) events; + loop->watchers[loop->nwatchers + 1] = (void*) (uintptr_t) nfds; + for (i = 0; i < nfds; i++) { + pe = events + i; + fd = pe->fd; + + /* Skip invalidated events, see uv__platform_invalidate_fd */ + if (fd == -1) + continue; + + ep = loop->ep; + if (pe->is_msg) { + os390_message_queue_handler(ep); + continue; + } + + assert(fd >= 0); + assert((unsigned) fd < loop->nwatchers); + + w = loop->watchers[fd]; + + if (w == NULL) { + /* File descriptor that we've stopped watching, disarm it. + * + * Ignore all errors because we may be racing with another thread + * when the file descriptor is closed. + */ + epoll_ctl(loop->ep, EPOLL_CTL_DEL, fd, pe); + continue; + } + + /* Give users only events they're interested in. Prevents spurious + * callbacks when previous callback invocation in this loop has stopped + * the current watcher. Also, filters out events that users has not + * requested us to watch. + */ + pe->events &= w->pevents | POLLERR | POLLHUP; + + if (pe->events == POLLERR || pe->events == POLLHUP) + pe->events |= w->pevents & (POLLIN | POLLOUT); + + if (pe->events != 0) { + w->cb(loop, w, pe->events); + nevents++; + } + } + loop->watchers[loop->nwatchers] = NULL; + loop->watchers[loop->nwatchers + 1] = NULL; + + if (nevents != 0) { + if (nfds == ARRAY_SIZE(events) && --count != 0) { + /* Poll for more events but don't block this time. */ + timeout = 0; + continue; + } + return; + } + + if (timeout == 0) + return; + + if (timeout == -1) + continue; + +update_timeout: + assert(timeout > 0); + + real_timeout -= (loop->time - base); + if (real_timeout <= 0) + return; + + timeout = real_timeout; + } +} + +void uv__set_process_title(const char* title) { + /* do nothing */ +} + +int uv__io_fork(uv_loop_t* loop) { + /* + Nullify the msg queue but don't close it because + it is still being used by the parent. + */ + loop->ep = NULL; + + uv__platform_loop_delete(loop); + return uv__platform_loop_init(loop); +} diff --git a/external/libuv/src/unix/pipe.c b/external/libuv/src/unix/pipe.c new file mode 100644 index 000000000..040d57817 --- /dev/null +++ b/external/libuv/src/unix/pipe.c @@ -0,0 +1,381 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#include "uv.h" +#include "internal.h" + +#include +#include +#include +#include +#include +#include + + +int uv_pipe_init(uv_loop_t* loop, uv_pipe_t* handle, int ipc) { + uv__stream_init(loop, (uv_stream_t*)handle, UV_NAMED_PIPE); + handle->shutdown_req = NULL; + handle->connect_req = NULL; + handle->pipe_fname = NULL; + handle->ipc = ipc; + return 0; +} + + +int uv_pipe_bind(uv_pipe_t* handle, const char* name) { + struct sockaddr_un saddr; + const char* pipe_fname; + int sockfd; + int err; + + pipe_fname = NULL; + + /* Already bound? */ + if (uv__stream_fd(handle) >= 0) + return UV_EINVAL; + + /* Make a copy of the file name, it outlives this function's scope. */ + pipe_fname = uv__strdup(name); + if (pipe_fname == NULL) + return UV_ENOMEM; + + /* We've got a copy, don't touch the original any more. */ + name = NULL; + + err = uv__socket(AF_UNIX, SOCK_STREAM, 0); + if (err < 0) + goto err_socket; + sockfd = err; + + memset(&saddr, 0, sizeof saddr); + uv__strscpy(saddr.sun_path, pipe_fname, sizeof(saddr.sun_path)); + saddr.sun_family = AF_UNIX; + + if (bind(sockfd, (struct sockaddr*)&saddr, sizeof saddr)) { + err = UV__ERR(errno); + /* Convert ENOENT to EACCES for compatibility with Windows. */ + if (err == UV_ENOENT) + err = UV_EACCES; + + uv__close(sockfd); + goto err_socket; + } + + /* Success. */ + handle->flags |= UV_HANDLE_BOUND; + handle->pipe_fname = pipe_fname; /* Is a strdup'ed copy. */ + handle->io_watcher.fd = sockfd; + return 0; + +err_socket: + uv__free((void*)pipe_fname); + return err; +} + + +int uv_pipe_listen(uv_pipe_t* handle, int backlog, uv_connection_cb cb) { + if (uv__stream_fd(handle) == -1) + return UV_EINVAL; + + if (handle->ipc) + return UV_EINVAL; + +#if defined(__MVS__) || defined(__PASE__) + /* On zOS, backlog=0 has undefined behaviour */ + /* On IBMi PASE, backlog=0 leads to "Connection refused" error */ + if (backlog == 0) + backlog = 1; + else if (backlog < 0) + backlog = SOMAXCONN; +#endif + + if (listen(uv__stream_fd(handle), backlog)) + return UV__ERR(errno); + + handle->connection_cb = cb; + handle->io_watcher.cb = uv__server_io; + uv__io_start(handle->loop, &handle->io_watcher, POLLIN); + return 0; +} + + +void uv__pipe_close(uv_pipe_t* handle) { + if (handle->pipe_fname) { + /* + * Unlink the file system entity before closing the file descriptor. + * Doing it the other way around introduces a race where our process + * unlinks a socket with the same name that's just been created by + * another thread or process. + */ + unlink(handle->pipe_fname); + uv__free((void*)handle->pipe_fname); + handle->pipe_fname = NULL; + } + + uv__stream_close((uv_stream_t*)handle); +} + + +int uv_pipe_open(uv_pipe_t* handle, uv_file fd) { + int flags; + int mode; + int err; + flags = 0; + + if (uv__fd_exists(handle->loop, fd)) + return UV_EEXIST; + + do + mode = fcntl(fd, F_GETFL); + while (mode == -1 && errno == EINTR); + + if (mode == -1) + return UV__ERR(errno); /* according to docs, must be EBADF */ + + err = uv__nonblock(fd, 1); + if (err) + return err; + +#if defined(__APPLE__) + err = uv__stream_try_select((uv_stream_t*) handle, &fd); + if (err) + return err; +#endif /* defined(__APPLE__) */ + + mode &= O_ACCMODE; + if (mode != O_WRONLY) + flags |= UV_HANDLE_READABLE; + if (mode != O_RDONLY) + flags |= UV_HANDLE_WRITABLE; + + return uv__stream_open((uv_stream_t*)handle, fd, flags); +} + + +void uv_pipe_connect(uv_connect_t* req, + uv_pipe_t* handle, + const char* name, + uv_connect_cb cb) { + struct sockaddr_un saddr; + int new_sock; + int err; + int r; + + new_sock = (uv__stream_fd(handle) == -1); + + if (new_sock) { + err = uv__socket(AF_UNIX, SOCK_STREAM, 0); + if (err < 0) + goto out; + handle->io_watcher.fd = err; + } + + memset(&saddr, 0, sizeof saddr); + uv__strscpy(saddr.sun_path, name, sizeof(saddr.sun_path)); + saddr.sun_family = AF_UNIX; + + do { + r = connect(uv__stream_fd(handle), + (struct sockaddr*)&saddr, sizeof saddr); + } + while (r == -1 && errno == EINTR); + + if (r == -1 && errno != EINPROGRESS) { + err = UV__ERR(errno); +#if defined(__CYGWIN__) || defined(__MSYS__) + /* EBADF is supposed to mean that the socket fd is bad, but + Cygwin reports EBADF instead of ENOTSOCK when the file is + not a socket. We do not expect to see a bad fd here + (e.g. due to new_sock), so translate the error. */ + if (err == UV_EBADF) + err = UV_ENOTSOCK; +#endif + goto out; + } + + err = 0; + if (new_sock) { + err = uv__stream_open((uv_stream_t*)handle, + uv__stream_fd(handle), + UV_HANDLE_READABLE | UV_HANDLE_WRITABLE); + } + + if (err == 0) + uv__io_start(handle->loop, &handle->io_watcher, POLLOUT); + +out: + handle->delayed_error = err; + handle->connect_req = req; + + uv__req_init(handle->loop, req, UV_CONNECT); + req->handle = (uv_stream_t*)handle; + req->cb = cb; + QUEUE_INIT(&req->queue); + + /* Force callback to run on next tick in case of error. */ + if (err) + uv__io_feed(handle->loop, &handle->io_watcher); + +} + + +static int uv__pipe_getsockpeername(const uv_pipe_t* handle, + uv__peersockfunc func, + char* buffer, + size_t* size) { + struct sockaddr_un sa; + socklen_t addrlen; + int err; + + addrlen = sizeof(sa); + memset(&sa, 0, addrlen); + err = uv__getsockpeername((const uv_handle_t*) handle, + func, + (struct sockaddr*) &sa, + (int*) &addrlen); + if (err < 0) { + *size = 0; + return err; + } + +#if defined(__linux__) + if (sa.sun_path[0] == 0) + /* Linux abstract namespace */ + addrlen -= offsetof(struct sockaddr_un, sun_path); + else +#endif + addrlen = strlen(sa.sun_path); + + + if ((size_t)addrlen >= *size) { + *size = addrlen + 1; + return UV_ENOBUFS; + } + + memcpy(buffer, sa.sun_path, addrlen); + *size = addrlen; + + /* only null-terminate if it's not an abstract socket */ + if (buffer[0] != '\0') + buffer[addrlen] = '\0'; + + return 0; +} + + +int uv_pipe_getsockname(const uv_pipe_t* handle, char* buffer, size_t* size) { + return uv__pipe_getsockpeername(handle, getsockname, buffer, size); +} + + +int uv_pipe_getpeername(const uv_pipe_t* handle, char* buffer, size_t* size) { + return uv__pipe_getsockpeername(handle, getpeername, buffer, size); +} + + +void uv_pipe_pending_instances(uv_pipe_t* handle, int count) { +} + + +int uv_pipe_pending_count(uv_pipe_t* handle) { + uv__stream_queued_fds_t* queued_fds; + + if (!handle->ipc) + return 0; + + if (handle->accepted_fd == -1) + return 0; + + if (handle->queued_fds == NULL) + return 1; + + queued_fds = handle->queued_fds; + return queued_fds->offset + 1; +} + + +uv_handle_type uv_pipe_pending_type(uv_pipe_t* handle) { + if (!handle->ipc) + return UV_UNKNOWN_HANDLE; + + if (handle->accepted_fd == -1) + return UV_UNKNOWN_HANDLE; + else + return uv__handle_type(handle->accepted_fd); +} + + +int uv_pipe_chmod(uv_pipe_t* handle, int mode) { + unsigned desired_mode; + struct stat pipe_stat; + char* name_buffer; + size_t name_len; + int r; + + if (handle == NULL || uv__stream_fd(handle) == -1) + return UV_EBADF; + + if (mode != UV_READABLE && + mode != UV_WRITABLE && + mode != (UV_WRITABLE | UV_READABLE)) + return UV_EINVAL; + + /* Unfortunately fchmod does not work on all platforms, we will use chmod. */ + name_len = 0; + r = uv_pipe_getsockname(handle, NULL, &name_len); + if (r != UV_ENOBUFS) + return r; + + name_buffer = uv__malloc(name_len); + if (name_buffer == NULL) + return UV_ENOMEM; + + r = uv_pipe_getsockname(handle, name_buffer, &name_len); + if (r != 0) { + uv__free(name_buffer); + return r; + } + + /* stat must be used as fstat has a bug on Darwin */ + if (stat(name_buffer, &pipe_stat) == -1) { + uv__free(name_buffer); + return -errno; + } + + desired_mode = 0; + if (mode & UV_READABLE) + desired_mode |= S_IRUSR | S_IRGRP | S_IROTH; + if (mode & UV_WRITABLE) + desired_mode |= S_IWUSR | S_IWGRP | S_IWOTH; + + /* Exit early if pipe already has desired mode. */ + if ((pipe_stat.st_mode & desired_mode) == desired_mode) { + uv__free(name_buffer); + return 0; + } + + pipe_stat.st_mode |= desired_mode; + + r = chmod(name_buffer, pipe_stat.st_mode); + uv__free(name_buffer); + + return r != -1 ? 0 : UV__ERR(errno); +} diff --git a/external/libuv/src/unix/poll.c b/external/libuv/src/unix/poll.c new file mode 100644 index 000000000..3d5022b22 --- /dev/null +++ b/external/libuv/src/unix/poll.c @@ -0,0 +1,150 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#include "uv.h" +#include "internal.h" + +#include +#include +#include + + +static void uv__poll_io(uv_loop_t* loop, uv__io_t* w, unsigned int events) { + uv_poll_t* handle; + int pevents; + + handle = container_of(w, uv_poll_t, io_watcher); + + /* + * As documented in the kernel source fs/kernfs/file.c #780 + * poll will return POLLERR|POLLPRI in case of sysfs + * polling. This does not happen in case of out-of-band + * TCP messages. + * + * The above is the case on (at least) FreeBSD and Linux. + * + * So to properly determine a POLLPRI or a POLLERR we need + * to check for both. + */ + if ((events & POLLERR) && !(events & UV__POLLPRI)) { + uv__io_stop(loop, w, POLLIN | POLLOUT | UV__POLLRDHUP | UV__POLLPRI); + uv__handle_stop(handle); + handle->poll_cb(handle, UV_EBADF, 0); + return; + } + + pevents = 0; + if (events & POLLIN) + pevents |= UV_READABLE; + if (events & UV__POLLPRI) + pevents |= UV_PRIORITIZED; + if (events & POLLOUT) + pevents |= UV_WRITABLE; + if (events & UV__POLLRDHUP) + pevents |= UV_DISCONNECT; + + handle->poll_cb(handle, 0, pevents); +} + + +int uv_poll_init(uv_loop_t* loop, uv_poll_t* handle, int fd) { + int err; + + if (uv__fd_exists(loop, fd)) + return UV_EEXIST; + + err = uv__io_check_fd(loop, fd); + if (err) + return err; + + /* If ioctl(FIONBIO) reports ENOTTY, try fcntl(F_GETFL) + fcntl(F_SETFL). + * Workaround for e.g. kqueue fds not supporting ioctls. + */ + err = uv__nonblock(fd, 1); + if (err == UV_ENOTTY) + if (uv__nonblock == uv__nonblock_ioctl) + err = uv__nonblock_fcntl(fd, 1); + + if (err) + return err; + + uv__handle_init(loop, (uv_handle_t*) handle, UV_POLL); + uv__io_init(&handle->io_watcher, uv__poll_io, fd); + handle->poll_cb = NULL; + return 0; +} + + +int uv_poll_init_socket(uv_loop_t* loop, uv_poll_t* handle, + uv_os_sock_t socket) { + return uv_poll_init(loop, handle, socket); +} + + +static void uv__poll_stop(uv_poll_t* handle) { + uv__io_stop(handle->loop, + &handle->io_watcher, + POLLIN | POLLOUT | UV__POLLRDHUP | UV__POLLPRI); + uv__handle_stop(handle); + uv__platform_invalidate_fd(handle->loop, handle->io_watcher.fd); +} + + +int uv_poll_stop(uv_poll_t* handle) { + assert(!uv__is_closing(handle)); + uv__poll_stop(handle); + return 0; +} + + +int uv_poll_start(uv_poll_t* handle, int pevents, uv_poll_cb poll_cb) { + int events; + + assert((pevents & ~(UV_READABLE | UV_WRITABLE | UV_DISCONNECT | + UV_PRIORITIZED)) == 0); + assert(!uv__is_closing(handle)); + + uv__poll_stop(handle); + + if (pevents == 0) + return 0; + + events = 0; + if (pevents & UV_READABLE) + events |= POLLIN; + if (pevents & UV_PRIORITIZED) + events |= UV__POLLPRI; + if (pevents & UV_WRITABLE) + events |= POLLOUT; + if (pevents & UV_DISCONNECT) + events |= UV__POLLRDHUP; + + uv__io_start(handle->loop, &handle->io_watcher, events); + uv__handle_start(handle); + handle->poll_cb = poll_cb; + + return 0; +} + + +void uv__poll_close(uv_poll_t* handle) { + uv__poll_stop(handle); +} diff --git a/external/libuv/src/unix/posix-hrtime.c b/external/libuv/src/unix/posix-hrtime.c new file mode 100644 index 000000000..323dfc203 --- /dev/null +++ b/external/libuv/src/unix/posix-hrtime.c @@ -0,0 +1,35 @@ +/* Copyright libuv 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 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. + */ + +#include "uv.h" +#include "internal.h" + +#include +#include + +#undef NANOSEC +#define NANOSEC ((uint64_t) 1e9) + +uint64_t uv__hrtime(uv_clocktype_t type) { + struct timespec ts; + clock_gettime(CLOCK_MONOTONIC, &ts); + return (((uint64_t) ts.tv_sec) * NANOSEC + ts.tv_nsec); +} diff --git a/external/libuv/src/unix/posix-poll.c b/external/libuv/src/unix/posix-poll.c new file mode 100644 index 000000000..766e83205 --- /dev/null +++ b/external/libuv/src/unix/posix-poll.c @@ -0,0 +1,336 @@ +/* Copyright libuv 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 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. + */ + +#include "uv.h" +#include "internal.h" + +/* POSIX defines poll() as a portable way to wait on file descriptors. + * Here we maintain a dynamically sized array of file descriptors and + * events to pass as the first argument to poll(). + */ + +#include +#include +#include +#include +#include + +int uv__platform_loop_init(uv_loop_t* loop) { + loop->poll_fds = NULL; + loop->poll_fds_used = 0; + loop->poll_fds_size = 0; + loop->poll_fds_iterating = 0; + return 0; +} + +void uv__platform_loop_delete(uv_loop_t* loop) { + uv__free(loop->poll_fds); + loop->poll_fds = NULL; +} + +int uv__io_fork(uv_loop_t* loop) { + uv__platform_loop_delete(loop); + return uv__platform_loop_init(loop); +} + +/* Allocate or dynamically resize our poll fds array. */ +static void uv__pollfds_maybe_resize(uv_loop_t* loop) { + size_t i; + size_t n; + struct pollfd* p; + + if (loop->poll_fds_used < loop->poll_fds_size) + return; + + n = loop->poll_fds_size ? loop->poll_fds_size * 2 : 64; + p = uv__reallocf(loop->poll_fds, n * sizeof(*loop->poll_fds)); + if (p == NULL) + abort(); + + loop->poll_fds = p; + for (i = loop->poll_fds_size; i < n; i++) { + loop->poll_fds[i].fd = -1; + loop->poll_fds[i].events = 0; + loop->poll_fds[i].revents = 0; + } + loop->poll_fds_size = n; +} + +/* Primitive swap operation on poll fds array elements. */ +static void uv__pollfds_swap(uv_loop_t* loop, size_t l, size_t r) { + struct pollfd pfd; + pfd = loop->poll_fds[l]; + loop->poll_fds[l] = loop->poll_fds[r]; + loop->poll_fds[r] = pfd; +} + +/* Add a watcher's fd to our poll fds array with its pending events. */ +static void uv__pollfds_add(uv_loop_t* loop, uv__io_t* w) { + size_t i; + struct pollfd* pe; + + /* If the fd is already in the set just update its events. */ + assert(!loop->poll_fds_iterating); + for (i = 0; i < loop->poll_fds_used; ++i) { + if (loop->poll_fds[i].fd == w->fd) { + loop->poll_fds[i].events = w->pevents; + return; + } + } + + /* Otherwise, allocate a new slot in the set for the fd. */ + uv__pollfds_maybe_resize(loop); + pe = &loop->poll_fds[loop->poll_fds_used++]; + pe->fd = w->fd; + pe->events = w->pevents; +} + +/* Remove a watcher's fd from our poll fds array. */ +static void uv__pollfds_del(uv_loop_t* loop, int fd) { + size_t i; + assert(!loop->poll_fds_iterating); + for (i = 0; i < loop->poll_fds_used;) { + if (loop->poll_fds[i].fd == fd) { + /* swap to last position and remove */ + --loop->poll_fds_used; + uv__pollfds_swap(loop, i, loop->poll_fds_used); + loop->poll_fds[loop->poll_fds_used].fd = -1; + loop->poll_fds[loop->poll_fds_used].events = 0; + loop->poll_fds[loop->poll_fds_used].revents = 0; + /* This method is called with an fd of -1 to purge the invalidated fds, + * so we may possibly have multiples to remove. + */ + if (-1 != fd) + return; + } else { + /* We must only increment the loop counter when the fds do not match. + * Otherwise, when we are purging an invalidated fd, the value just + * swapped here from the previous end of the array will be skipped. + */ + ++i; + } + } +} + + +void uv__io_poll(uv_loop_t* loop, int timeout) { + sigset_t* pset; + sigset_t set; + uint64_t time_base; + uint64_t time_diff; + QUEUE* q; + uv__io_t* w; + size_t i; + unsigned int nevents; + int nfds; + int have_signals; + struct pollfd* pe; + int fd; + + if (loop->nfds == 0) { + assert(QUEUE_EMPTY(&loop->watcher_queue)); + return; + } + + /* Take queued watchers and add their fds to our poll fds array. */ + while (!QUEUE_EMPTY(&loop->watcher_queue)) { + q = QUEUE_HEAD(&loop->watcher_queue); + QUEUE_REMOVE(q); + QUEUE_INIT(q); + + w = QUEUE_DATA(q, uv__io_t, watcher_queue); + assert(w->pevents != 0); + assert(w->fd >= 0); + assert(w->fd < (int) loop->nwatchers); + + uv__pollfds_add(loop, w); + + w->events = w->pevents; + } + + /* Prepare a set of signals to block around poll(), if any. */ + pset = NULL; + if (loop->flags & UV_LOOP_BLOCK_SIGPROF) { + pset = &set; + sigemptyset(pset); + sigaddset(pset, SIGPROF); + } + + assert(timeout >= -1); + time_base = loop->time; + + /* Loop calls to poll() and processing of results. If we get some + * results from poll() but they turn out not to be interesting to + * our caller then we need to loop around and poll() again. + */ + for (;;) { + if (pset != NULL) + if (pthread_sigmask(SIG_BLOCK, pset, NULL)) + abort(); + nfds = poll(loop->poll_fds, (nfds_t)loop->poll_fds_used, timeout); + if (pset != NULL) + if (pthread_sigmask(SIG_UNBLOCK, pset, NULL)) + abort(); + + /* Update loop->time unconditionally. It's tempting to skip the update when + * timeout == 0 (i.e. non-blocking poll) but there is no guarantee that the + * operating system didn't reschedule our process while in the syscall. + */ + SAVE_ERRNO(uv__update_time(loop)); + + if (nfds == 0) { + assert(timeout != -1); + return; + } + + if (nfds == -1) { + if (errno != EINTR) + abort(); + + if (timeout == -1) + continue; + + if (timeout == 0) + return; + + /* Interrupted by a signal. Update timeout and poll again. */ + goto update_timeout; + } + + /* Tell uv__platform_invalidate_fd not to manipulate our array + * while we are iterating over it. + */ + loop->poll_fds_iterating = 1; + + /* Initialize a count of events that we care about. */ + nevents = 0; + have_signals = 0; + + /* Loop over the entire poll fds array looking for returned events. */ + for (i = 0; i < loop->poll_fds_used; i++) { + pe = loop->poll_fds + i; + fd = pe->fd; + + /* Skip invalidated events, see uv__platform_invalidate_fd. */ + if (fd == -1) + continue; + + assert(fd >= 0); + assert((unsigned) fd < loop->nwatchers); + + w = loop->watchers[fd]; + + if (w == NULL) { + /* File descriptor that we've stopped watching, ignore. */ + uv__platform_invalidate_fd(loop, fd); + continue; + } + + /* Filter out events that user has not requested us to watch + * (e.g. POLLNVAL). + */ + pe->revents &= w->pevents | POLLERR | POLLHUP; + + if (pe->revents != 0) { + /* Run signal watchers last. */ + if (w == &loop->signal_io_watcher) { + have_signals = 1; + } else { + w->cb(loop, w, pe->revents); + } + + nevents++; + } + } + + if (have_signals != 0) + loop->signal_io_watcher.cb(loop, &loop->signal_io_watcher, POLLIN); + + loop->poll_fds_iterating = 0; + + /* Purge invalidated fds from our poll fds array. */ + uv__pollfds_del(loop, -1); + + if (have_signals != 0) + return; /* Event loop should cycle now so don't poll again. */ + + if (nevents != 0) + return; + + if (timeout == 0) + return; + + if (timeout == -1) + continue; + +update_timeout: + assert(timeout > 0); + + time_diff = loop->time - time_base; + if (time_diff >= (uint64_t) timeout) + return; + + timeout -= time_diff; + } +} + +/* Remove the given fd from our poll fds array because no one + * is interested in its events anymore. + */ +void uv__platform_invalidate_fd(uv_loop_t* loop, int fd) { + size_t i; + + assert(fd >= 0); + + if (loop->poll_fds_iterating) { + /* uv__io_poll is currently iterating. Just invalidate fd. */ + for (i = 0; i < loop->poll_fds_used; i++) + if (loop->poll_fds[i].fd == fd) { + loop->poll_fds[i].fd = -1; + loop->poll_fds[i].events = 0; + loop->poll_fds[i].revents = 0; + } + } else { + /* uv__io_poll is not iterating. Delete fd from the set. */ + uv__pollfds_del(loop, fd); + } +} + +/* Check whether the given fd is supported by poll(). */ +int uv__io_check_fd(uv_loop_t* loop, int fd) { + struct pollfd p[1]; + int rv; + + p[0].fd = fd; + p[0].events = POLLIN; + + do + rv = poll(p, 1, 0); + while (rv == -1 && (errno == EINTR || errno == EAGAIN)); + + if (rv == -1) + return UV__ERR(errno); + + if (p[0].revents & POLLNVAL) + return UV_EINVAL; + + return 0; +} diff --git a/external/libuv/src/unix/process.c b/external/libuv/src/unix/process.c new file mode 100644 index 000000000..b021aaeba --- /dev/null +++ b/external/libuv/src/unix/process.c @@ -0,0 +1,595 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#include "uv.h" +#include "internal.h" + +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#if defined(__APPLE__) && !TARGET_OS_IPHONE +# include +# define environ (*_NSGetEnviron()) +#else +extern char **environ; +#endif + +#if defined(__linux__) || defined(__GLIBC__) +# include +#endif + + +static void uv__chld(uv_signal_t* handle, int signum) { + uv_process_t* process; + uv_loop_t* loop; + int exit_status; + int term_signal; + int status; + pid_t pid; + QUEUE pending; + QUEUE* q; + QUEUE* h; + + assert(signum == SIGCHLD); + + QUEUE_INIT(&pending); + loop = handle->loop; + + h = &loop->process_handles; + q = QUEUE_HEAD(h); + while (q != h) { + process = QUEUE_DATA(q, uv_process_t, queue); + q = QUEUE_NEXT(q); + + do + pid = waitpid(process->pid, &status, WNOHANG); + while (pid == -1 && errno == EINTR); + + if (pid == 0) + continue; + + if (pid == -1) { + if (errno != ECHILD) + abort(); + continue; + } + + process->status = status; + QUEUE_REMOVE(&process->queue); + QUEUE_INSERT_TAIL(&pending, &process->queue); + } + + h = &pending; + q = QUEUE_HEAD(h); + while (q != h) { + process = QUEUE_DATA(q, uv_process_t, queue); + q = QUEUE_NEXT(q); + + QUEUE_REMOVE(&process->queue); + QUEUE_INIT(&process->queue); + uv__handle_stop(process); + + if (process->exit_cb == NULL) + continue; + + exit_status = 0; + if (WIFEXITED(process->status)) + exit_status = WEXITSTATUS(process->status); + + term_signal = 0; + if (WIFSIGNALED(process->status)) + term_signal = WTERMSIG(process->status); + + process->exit_cb(process, exit_status, term_signal); + } + assert(QUEUE_EMPTY(&pending)); +} + + +static int uv__make_socketpair(int fds[2]) { +#if defined(__FreeBSD__) || defined(__linux__) + if (socketpair(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC, 0, fds)) + return UV__ERR(errno); + + return 0; +#else + int err; + + if (socketpair(AF_UNIX, SOCK_STREAM, 0, fds)) + return UV__ERR(errno); + + err = uv__cloexec(fds[0], 1); + if (err == 0) + err = uv__cloexec(fds[1], 1); + + if (err != 0) { + uv__close(fds[0]); + uv__close(fds[1]); + return UV__ERR(errno); + } + + return 0; +#endif +} + + +int uv__make_pipe(int fds[2], int flags) { +#if defined(__FreeBSD__) || defined(__linux__) + if (pipe2(fds, flags | O_CLOEXEC)) + return UV__ERR(errno); + + return 0; +#else + if (pipe(fds)) + return UV__ERR(errno); + + if (uv__cloexec(fds[0], 1)) + goto fail; + + if (uv__cloexec(fds[1], 1)) + goto fail; + + if (flags & UV__F_NONBLOCK) { + if (uv__nonblock(fds[0], 1)) + goto fail; + + if (uv__nonblock(fds[1], 1)) + goto fail; + } + + return 0; + +fail: + uv__close(fds[0]); + uv__close(fds[1]); + return UV__ERR(errno); +#endif +} + + +/* + * Used for initializing stdio streams like options.stdin_stream. Returns + * zero on success. See also the cleanup section in uv_spawn(). + */ +static int uv__process_init_stdio(uv_stdio_container_t* container, int fds[2]) { + int mask; + int fd; + + mask = UV_IGNORE | UV_CREATE_PIPE | UV_INHERIT_FD | UV_INHERIT_STREAM; + + switch (container->flags & mask) { + case UV_IGNORE: + return 0; + + case UV_CREATE_PIPE: + assert(container->data.stream != NULL); + if (container->data.stream->type != UV_NAMED_PIPE) + return UV_EINVAL; + else + return uv__make_socketpair(fds); + + case UV_INHERIT_FD: + case UV_INHERIT_STREAM: + if (container->flags & UV_INHERIT_FD) + fd = container->data.fd; + else + fd = uv__stream_fd(container->data.stream); + + if (fd == -1) + return UV_EINVAL; + + fds[1] = fd; + return 0; + + default: + assert(0 && "Unexpected flags"); + return UV_EINVAL; + } +} + + +static int uv__process_open_stream(uv_stdio_container_t* container, + int pipefds[2]) { + int flags; + int err; + + if (!(container->flags & UV_CREATE_PIPE) || pipefds[0] < 0) + return 0; + + err = uv__close(pipefds[1]); + if (err != 0) + abort(); + + pipefds[1] = -1; + uv__nonblock(pipefds[0], 1); + + flags = 0; + if (container->flags & UV_WRITABLE_PIPE) + flags |= UV_HANDLE_READABLE; + if (container->flags & UV_READABLE_PIPE) + flags |= UV_HANDLE_WRITABLE; + + return uv__stream_open(container->data.stream, pipefds[0], flags); +} + + +static void uv__process_close_stream(uv_stdio_container_t* container) { + if (!(container->flags & UV_CREATE_PIPE)) return; + uv__stream_close(container->data.stream); +} + + +static void uv__write_int(int fd, int val) { + ssize_t n; + + do + n = write(fd, &val, sizeof(val)); + while (n == -1 && errno == EINTR); + + if (n == -1 && errno == EPIPE) + return; /* parent process has quit */ + + assert(n == sizeof(val)); +} + + +#if !(defined(__APPLE__) && (TARGET_OS_TV || TARGET_OS_WATCH)) +/* execvp is marked __WATCHOS_PROHIBITED __TVOS_PROHIBITED, so must be + * avoided. Since this isn't called on those targets, the function + * doesn't even need to be defined for them. + */ +static void uv__process_child_init(const uv_process_options_t* options, + int stdio_count, + int (*pipes)[2], + int error_fd) { + sigset_t set; + int close_fd; + int use_fd; + int err; + int fd; + int n; + + if (options->flags & UV_PROCESS_DETACHED) + setsid(); + + /* First duplicate low numbered fds, since it's not safe to duplicate them, + * they could get replaced. Example: swapping stdout and stderr; without + * this fd 2 (stderr) would be duplicated into fd 1, thus making both + * stdout and stderr go to the same fd, which was not the intention. */ + for (fd = 0; fd < stdio_count; fd++) { + use_fd = pipes[fd][1]; + if (use_fd < 0 || use_fd >= fd) + continue; + pipes[fd][1] = fcntl(use_fd, F_DUPFD, stdio_count); + if (pipes[fd][1] == -1) { + uv__write_int(error_fd, UV__ERR(errno)); + _exit(127); + } + } + + for (fd = 0; fd < stdio_count; fd++) { + close_fd = pipes[fd][0]; + use_fd = pipes[fd][1]; + + if (use_fd < 0) { + if (fd >= 3) + continue; + else { + /* redirect stdin, stdout and stderr to /dev/null even if UV_IGNORE is + * set + */ + use_fd = open("/dev/null", fd == 0 ? O_RDONLY : O_RDWR); + close_fd = use_fd; + + if (use_fd < 0) { + uv__write_int(error_fd, UV__ERR(errno)); + _exit(127); + } + } + } + + if (fd == use_fd) + uv__cloexec_fcntl(use_fd, 0); + else + fd = dup2(use_fd, fd); + + if (fd == -1) { + uv__write_int(error_fd, UV__ERR(errno)); + _exit(127); + } + + if (fd <= 2) + uv__nonblock_fcntl(fd, 0); + + if (close_fd >= stdio_count) + uv__close(close_fd); + } + + for (fd = 0; fd < stdio_count; fd++) { + use_fd = pipes[fd][1]; + + if (use_fd >= stdio_count) + uv__close(use_fd); + } + + if (options->cwd != NULL && chdir(options->cwd)) { + uv__write_int(error_fd, UV__ERR(errno)); + _exit(127); + } + + if (options->flags & (UV_PROCESS_SETUID | UV_PROCESS_SETGID)) { + /* When dropping privileges from root, the `setgroups` call will + * remove any extraneous groups. If we don't call this, then + * even though our uid has dropped, we may still have groups + * that enable us to do super-user things. This will fail if we + * aren't root, so don't bother checking the return value, this + * is just done as an optimistic privilege dropping function. + */ + SAVE_ERRNO(setgroups(0, NULL)); + } + + if ((options->flags & UV_PROCESS_SETGID) && setgid(options->gid)) { + uv__write_int(error_fd, UV__ERR(errno)); + _exit(127); + } + + if ((options->flags & UV_PROCESS_SETUID) && setuid(options->uid)) { + uv__write_int(error_fd, UV__ERR(errno)); + _exit(127); + } + + if (options->env != NULL) { + environ = options->env; + } + + /* Reset signal disposition. Use a hard-coded limit because NSIG + * is not fixed on Linux: it's either 32, 34 or 64, depending on + * whether RT signals are enabled. We are not allowed to touch + * RT signal handlers, glibc uses them internally. + */ + for (n = 1; n < 32; n += 1) { + if (n == SIGKILL || n == SIGSTOP) + continue; /* Can't be changed. */ + +#if defined(__HAIKU__) + if (n == SIGKILLTHR) + continue; /* Can't be changed. */ +#endif + + if (SIG_ERR != signal(n, SIG_DFL)) + continue; + + uv__write_int(error_fd, UV__ERR(errno)); + _exit(127); + } + + /* Reset signal mask. */ + sigemptyset(&set); + err = pthread_sigmask(SIG_SETMASK, &set, NULL); + + if (err != 0) { + uv__write_int(error_fd, UV__ERR(err)); + _exit(127); + } + + execvp(options->file, options->args); + uv__write_int(error_fd, UV__ERR(errno)); + _exit(127); +} +#endif + + +int uv_spawn(uv_loop_t* loop, + uv_process_t* process, + const uv_process_options_t* options) { +#if defined(__APPLE__) && (TARGET_OS_TV || TARGET_OS_WATCH) + /* fork is marked __WATCHOS_PROHIBITED __TVOS_PROHIBITED. */ + return UV_ENOSYS; +#else + int signal_pipe[2] = { -1, -1 }; + int pipes_storage[8][2]; + int (*pipes)[2]; + int stdio_count; + ssize_t r; + pid_t pid; + int err; + int exec_errorno; + int i; + int status; + + assert(options->file != NULL); + assert(!(options->flags & ~(UV_PROCESS_DETACHED | + UV_PROCESS_SETGID | + UV_PROCESS_SETUID | + UV_PROCESS_WINDOWS_HIDE | + UV_PROCESS_WINDOWS_HIDE_CONSOLE | + UV_PROCESS_WINDOWS_HIDE_GUI | + UV_PROCESS_WINDOWS_VERBATIM_ARGUMENTS))); + + uv__handle_init(loop, (uv_handle_t*)process, UV_PROCESS); + QUEUE_INIT(&process->queue); + + stdio_count = options->stdio_count; + if (stdio_count < 3) + stdio_count = 3; + + err = UV_ENOMEM; + pipes = pipes_storage; + if (stdio_count > (int) ARRAY_SIZE(pipes_storage)) + pipes = uv__malloc(stdio_count * sizeof(*pipes)); + + if (pipes == NULL) + goto error; + + for (i = 0; i < stdio_count; i++) { + pipes[i][0] = -1; + pipes[i][1] = -1; + } + + for (i = 0; i < options->stdio_count; i++) { + err = uv__process_init_stdio(options->stdio + i, pipes[i]); + if (err) + goto error; + } + + /* This pipe is used by the parent to wait until + * the child has called `execve()`. We need this + * to avoid the following race condition: + * + * if ((pid = fork()) > 0) { + * kill(pid, SIGTERM); + * } + * else if (pid == 0) { + * execve("/bin/cat", argp, envp); + * } + * + * The parent sends a signal immediately after forking. + * Since the child may not have called `execve()` yet, + * there is no telling what process receives the signal, + * our fork or /bin/cat. + * + * To avoid ambiguity, we create a pipe with both ends + * marked close-on-exec. Then, after the call to `fork()`, + * the parent polls the read end until it EOFs or errors with EPIPE. + */ + err = uv__make_pipe(signal_pipe, 0); + if (err) + goto error; + + uv_signal_start(&loop->child_watcher, uv__chld, SIGCHLD); + + /* Acquire write lock to prevent opening new fds in worker threads */ + uv_rwlock_wrlock(&loop->cloexec_lock); + pid = fork(); + + if (pid == -1) { + err = UV__ERR(errno); + uv_rwlock_wrunlock(&loop->cloexec_lock); + uv__close(signal_pipe[0]); + uv__close(signal_pipe[1]); + goto error; + } + + if (pid == 0) { + uv__process_child_init(options, stdio_count, pipes, signal_pipe[1]); + abort(); + } + + /* Release lock in parent process */ + uv_rwlock_wrunlock(&loop->cloexec_lock); + uv__close(signal_pipe[1]); + + process->status = 0; + exec_errorno = 0; + do + r = read(signal_pipe[0], &exec_errorno, sizeof(exec_errorno)); + while (r == -1 && errno == EINTR); + + if (r == 0) + ; /* okay, EOF */ + else if (r == sizeof(exec_errorno)) { + do + err = waitpid(pid, &status, 0); /* okay, read errorno */ + while (err == -1 && errno == EINTR); + assert(err == pid); + } else if (r == -1 && errno == EPIPE) { + do + err = waitpid(pid, &status, 0); /* okay, got EPIPE */ + while (err == -1 && errno == EINTR); + assert(err == pid); + } else + abort(); + + uv__close_nocheckstdio(signal_pipe[0]); + + for (i = 0; i < options->stdio_count; i++) { + err = uv__process_open_stream(options->stdio + i, pipes[i]); + if (err == 0) + continue; + + while (i--) + uv__process_close_stream(options->stdio + i); + + goto error; + } + + /* Only activate this handle if exec() happened successfully */ + if (exec_errorno == 0) { + QUEUE_INSERT_TAIL(&loop->process_handles, &process->queue); + uv__handle_start(process); + } + + process->pid = pid; + process->exit_cb = options->exit_cb; + + if (pipes != pipes_storage) + uv__free(pipes); + + return exec_errorno; + +error: + if (pipes != NULL) { + for (i = 0; i < stdio_count; i++) { + if (i < options->stdio_count) + if (options->stdio[i].flags & (UV_INHERIT_FD | UV_INHERIT_STREAM)) + continue; + if (pipes[i][0] != -1) + uv__close_nocheckstdio(pipes[i][0]); + if (pipes[i][1] != -1) + uv__close_nocheckstdio(pipes[i][1]); + } + + if (pipes != pipes_storage) + uv__free(pipes); + } + + return err; +#endif +} + + +int uv_process_kill(uv_process_t* process, int signum) { + return uv_kill(process->pid, signum); +} + + +int uv_kill(int pid, int signum) { + if (kill(pid, signum)) + return UV__ERR(errno); + else + return 0; +} + + +void uv__process_close(uv_process_t* handle) { + QUEUE_REMOVE(&handle->queue); + uv__handle_stop(handle); + if (QUEUE_EMPTY(&handle->loop->process_handles)) + uv_signal_stop(&handle->loop->child_watcher); +} diff --git a/external/libuv/src/unix/procfs-exepath.c b/external/libuv/src/unix/procfs-exepath.c new file mode 100644 index 000000000..00dc021f2 --- /dev/null +++ b/external/libuv/src/unix/procfs-exepath.c @@ -0,0 +1,45 @@ +/* Copyright libuv 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 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. + */ + +#include "uv.h" +#include "internal.h" + +#include +#include + +int uv_exepath(char* buffer, size_t* size) { + ssize_t n; + + if (buffer == NULL || size == NULL || *size == 0) + return UV_EINVAL; + + n = *size - 1; + if (n > 0) + n = readlink("/proc/self/exe", buffer, n); + + if (n == -1) + return UV__ERR(errno); + + buffer[n] = '\0'; + *size = n; + + return 0; +} diff --git a/external/libuv/src/unix/proctitle.c b/external/libuv/src/unix/proctitle.c new file mode 100644 index 000000000..4ee991fcc --- /dev/null +++ b/external/libuv/src/unix/proctitle.c @@ -0,0 +1,151 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#include "uv.h" +#include "internal.h" + +#include +#include + +struct uv__process_title { + char* str; + size_t len; /* Length of the current process title. */ + size_t cap; /* Maximum capacity. Computed once in uv_setup_args(). */ +}; + +extern void uv__set_process_title(const char* title); + +static uv_mutex_t process_title_mutex; +static uv_once_t process_title_mutex_once = UV_ONCE_INIT; +static struct uv__process_title process_title; +static void* args_mem; + + +static void init_process_title_mutex_once(void) { + uv_mutex_init(&process_title_mutex); +} + + +char** uv_setup_args(int argc, char** argv) { + struct uv__process_title pt; + char** new_argv; + size_t size; + char* s; + int i; + + if (argc <= 0) + return argv; + + pt.str = argv[0]; + pt.len = strlen(argv[0]); + pt.cap = pt.len + 1; + + /* Calculate how much memory we need for the argv strings. */ + size = pt.cap; + for (i = 1; i < argc; i++) + size += strlen(argv[i]) + 1; + + /* Add space for the argv pointers. */ + size += (argc + 1) * sizeof(char*); + + new_argv = uv__malloc(size); + if (new_argv == NULL) + return argv; + + /* Copy over the strings and set up the pointer table. */ + i = 0; + s = (char*) &new_argv[argc + 1]; + size = pt.cap; + goto loop; + + for (/* empty */; i < argc; i++) { + size = strlen(argv[i]) + 1; + loop: + memcpy(s, argv[i], size); + new_argv[i] = s; + s += size; + } + new_argv[i] = NULL; + + /* argv is not adjacent on z/os, we use just argv[0] on that platform. */ +#ifndef __MVS__ + pt.cap = argv[i - 1] + size - argv[0]; +#endif + + args_mem = new_argv; + process_title = pt; + + return new_argv; +} + + +int uv_set_process_title(const char* title) { + struct uv__process_title* pt; + size_t len; + + pt = &process_title; + len = strlen(title); + + uv_once(&process_title_mutex_once, init_process_title_mutex_once); + uv_mutex_lock(&process_title_mutex); + + if (len >= pt->cap) { + len = 0; + if (pt->cap > 0) + len = pt->cap - 1; + } + + memcpy(pt->str, title, len); + memset(pt->str + len, '\0', pt->cap - len); + pt->len = len; + + uv_mutex_unlock(&process_title_mutex); + + return 0; +} + + +int uv_get_process_title(char* buffer, size_t size) { + if (buffer == NULL || size == 0) + return UV_EINVAL; + + uv_once(&process_title_mutex_once, init_process_title_mutex_once); + uv_mutex_lock(&process_title_mutex); + + if (size <= process_title.len) { + uv_mutex_unlock(&process_title_mutex); + return UV_ENOBUFS; + } + + if (process_title.len != 0) + memcpy(buffer, process_title.str, process_title.len + 1); + + buffer[process_title.len] = '\0'; + + uv_mutex_unlock(&process_title_mutex); + + return 0; +} + + +void uv__process_title_cleanup(void) { + uv__free(args_mem); /* Keep valgrind happy. */ + args_mem = NULL; +} diff --git a/external/libuv/src/unix/pthread-fixes.c b/external/libuv/src/unix/pthread-fixes.c new file mode 100644 index 000000000..fb1799584 --- /dev/null +++ b/external/libuv/src/unix/pthread-fixes.c @@ -0,0 +1,56 @@ +/* Copyright (c) 2013, Sony Mobile Communications AB + * Copyright (c) 2012, Google Inc. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following disclaimer + in the documentation and/or other materials provided with the + distribution. + * Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/* Android versions < 4.1 have a broken pthread_sigmask. */ +#include +#include +#include + +int uv__pthread_sigmask(int how, const sigset_t* set, sigset_t* oset) { + static int workaround; + int err; + + if (workaround) { + return sigprocmask(how, set, oset); + } else { + err = pthread_sigmask(how, set, oset); + if (err) { + if (err == EINVAL && sigprocmask(how, set, oset) == 0) { + workaround = 1; + return 0; + } else { + return -1; + } + } + } + + return 0; +} diff --git a/external/libuv/src/unix/random-devurandom.c b/external/libuv/src/unix/random-devurandom.c new file mode 100644 index 000000000..05e52a56a --- /dev/null +++ b/external/libuv/src/unix/random-devurandom.c @@ -0,0 +1,93 @@ +/* Copyright libuv 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. + */ + +#include "uv.h" +#include "internal.h" + +#include +#include + +static uv_once_t once = UV_ONCE_INIT; +static int status; + + +int uv__random_readpath(const char* path, void* buf, size_t buflen) { + struct stat s; + size_t pos; + ssize_t n; + int fd; + + fd = uv__open_cloexec(path, O_RDONLY); + + if (fd < 0) + return fd; + + if (fstat(fd, &s)) { + uv__close(fd); + return UV__ERR(errno); + } + + if (!S_ISCHR(s.st_mode)) { + uv__close(fd); + return UV_EIO; + } + + for (pos = 0; pos != buflen; pos += n) { + do + n = read(fd, (char*) buf + pos, buflen - pos); + while (n == -1 && errno == EINTR); + + if (n == -1) { + uv__close(fd); + return UV__ERR(errno); + } + + if (n == 0) { + uv__close(fd); + return UV_EIO; + } + } + + uv__close(fd); + return 0; +} + + +static void uv__random_devurandom_init(void) { + char c; + + /* Linux's random(4) man page suggests applications should read at least + * once from /dev/random before switching to /dev/urandom in order to seed + * the system RNG. Reads from /dev/random can of course block indefinitely + * until entropy is available but that's the point. + */ + status = uv__random_readpath("/dev/random", &c, 1); +} + + +int uv__random_devurandom(void* buf, size_t buflen) { + uv_once(&once, uv__random_devurandom_init); + + if (status != 0) + return status; + + return uv__random_readpath("/dev/urandom", buf, buflen); +} diff --git a/external/libuv/src/unix/random-getentropy.c b/external/libuv/src/unix/random-getentropy.c new file mode 100644 index 000000000..c45d9fd4a --- /dev/null +++ b/external/libuv/src/unix/random-getentropy.c @@ -0,0 +1,57 @@ +/* Copyright libuv 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. + */ + +#include "uv.h" +#include "internal.h" + +#include +#include + +typedef int (*uv__getentropy_cb)(void *, size_t); + +static uv__getentropy_cb uv__getentropy; +static uv_once_t once = UV_ONCE_INIT; + + +static void uv__random_getentropy_init(void) { + uv__getentropy = (uv__getentropy_cb) dlsym(RTLD_DEFAULT, "getentropy"); +} + + +int uv__random_getentropy(void* buf, size_t buflen) { + size_t pos; + size_t stride; + + uv_once(&once, uv__random_getentropy_init); + + if (uv__getentropy == NULL) + return UV_ENOSYS; + + /* getentropy() returns an error for requests > 256 bytes. */ + for (pos = 0, stride = 256; pos + stride < buflen; pos += stride) + if (uv__getentropy((char *) buf + pos, stride)) + return UV__ERR(errno); + + if (uv__getentropy((char *) buf + pos, buflen - pos)) + return UV__ERR(errno); + + return 0; +} diff --git a/external/libuv/src/unix/random-getrandom.c b/external/libuv/src/unix/random-getrandom.c new file mode 100644 index 000000000..bcc94089b --- /dev/null +++ b/external/libuv/src/unix/random-getrandom.c @@ -0,0 +1,88 @@ +/* Copyright libuv 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. + */ + +#include "uv.h" +#include "internal.h" + +#ifdef __linux__ + +#include "linux-syscalls.h" + +#define uv__random_getrandom_init() 0 + +#else /* !__linux__ */ + +#include +#include + +typedef ssize_t (*uv__getrandom_cb)(void *, size_t, unsigned); + +static uv__getrandom_cb uv__getrandom; +static uv_once_t once = UV_ONCE_INIT; + +static void uv__random_getrandom_init_once(void) { + uv__getrandom = (uv__getrandom_cb) dlsym(RTLD_DEFAULT, "getrandom"); +} + +static int uv__random_getrandom_init(void) { + uv_once(&once, uv__random_getrandom_init_once); + + if (uv__getrandom == NULL) + return UV_ENOSYS; + + return 0; +} + +#endif /* !__linux__ */ + +int uv__random_getrandom(void* buf, size_t buflen) { + ssize_t n; + size_t pos; + int rc; + + rc = uv__random_getrandom_init(); + if (rc != 0) + return rc; + + for (pos = 0; pos != buflen; pos += n) { + do { + n = buflen - pos; + + /* Most getrandom() implementations promise that reads <= 256 bytes + * will always succeed and won't be interrupted by signals. + * It's therefore useful to split it up in smaller reads because + * one big read may, in theory, continuously fail with EINTR. + */ + if (n > 256) + n = 256; + + n = uv__getrandom((char *) buf + pos, n, 0); + } while (n == -1 && errno == EINTR); + + if (n == -1) + return UV__ERR(errno); + + if (n == 0) + return UV_EIO; + } + + return 0; +} diff --git a/external/libuv/src/unix/random-sysctl-linux.c b/external/libuv/src/unix/random-sysctl-linux.c new file mode 100644 index 000000000..66ba8d74e --- /dev/null +++ b/external/libuv/src/unix/random-sysctl-linux.c @@ -0,0 +1,99 @@ +/* Copyright libuv 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. + */ + +#include "uv.h" +#include "internal.h" + +#include +#include + +#include +#include + + +struct uv__sysctl_args { + int* name; + int nlen; + void* oldval; + size_t* oldlenp; + void* newval; + size_t newlen; + unsigned long unused[4]; +}; + + +int uv__random_sysctl(void* buf, size_t buflen) { + static int name[] = {1 /*CTL_KERN*/, 40 /*KERN_RANDOM*/, 6 /*RANDOM_UUID*/}; + struct uv__sysctl_args args; + char uuid[16]; + char* p; + char* pe; + size_t n; + + p = buf; + pe = p + buflen; + + while (p < pe) { + memset(&args, 0, sizeof(args)); + + args.name = name; + args.nlen = ARRAY_SIZE(name); + args.oldval = uuid; + args.oldlenp = &n; + n = sizeof(uuid); + + /* Emits a deprecation warning with some kernels but that seems like + * an okay trade-off for the fallback of the fallback: this function is + * only called when neither getrandom(2) nor /dev/urandom are available. + * Fails with ENOSYS on kernels configured without CONFIG_SYSCTL_SYSCALL. + * At least arm64 never had a _sysctl system call and therefore doesn't + * have a SYS__sysctl define either. + */ +#ifdef SYS__sysctl + if (syscall(SYS__sysctl, &args) == -1) + return UV__ERR(errno); +#else + { + (void) &args; + return UV_ENOSYS; + } +#endif + + if (n != sizeof(uuid)) + return UV_EIO; /* Can't happen. */ + + /* uuid[] is now a type 4 UUID. Bytes 6 and 8 (counting from zero) contain + * 4 and 5 bits of entropy, respectively. For ease of use, we skip those + * and only use 14 of the 16 bytes. + */ + uuid[6] = uuid[14]; + uuid[8] = uuid[15]; + + n = pe - p; + if (n > 14) + n = 14; + + memcpy(p, uuid, n); + p += n; + } + + return 0; +} diff --git a/external/libuv/src/unix/signal.c b/external/libuv/src/unix/signal.c new file mode 100644 index 000000000..1c83e095b --- /dev/null +++ b/external/libuv/src/unix/signal.c @@ -0,0 +1,556 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#include "uv.h" +#include "internal.h" + +#include +#include +#include +#include +#include +#include + +#ifndef SA_RESTART +# define SA_RESTART 0 +#endif + +typedef struct { + uv_signal_t* handle; + int signum; +} uv__signal_msg_t; + +RB_HEAD(uv__signal_tree_s, uv_signal_s); + + +static int uv__signal_unlock(void); +static int uv__signal_start(uv_signal_t* handle, + uv_signal_cb signal_cb, + int signum, + int oneshot); +static void uv__signal_event(uv_loop_t* loop, uv__io_t* w, unsigned int events); +static int uv__signal_compare(uv_signal_t* w1, uv_signal_t* w2); +static void uv__signal_stop(uv_signal_t* handle); +static void uv__signal_unregister_handler(int signum); + + +static uv_once_t uv__signal_global_init_guard = UV_ONCE_INIT; +static struct uv__signal_tree_s uv__signal_tree = + RB_INITIALIZER(uv__signal_tree); +static int uv__signal_lock_pipefd[2] = { -1, -1 }; + +RB_GENERATE_STATIC(uv__signal_tree_s, + uv_signal_s, tree_entry, + uv__signal_compare) + +static void uv__signal_global_reinit(void); + +static void uv__signal_global_init(void) { + if (uv__signal_lock_pipefd[0] == -1) + /* pthread_atfork can register before and after handlers, one + * for each child. This only registers one for the child. That + * state is both persistent and cumulative, so if we keep doing + * it the handler functions will be called multiple times. Thus + * we only want to do it once. + */ + if (pthread_atfork(NULL, NULL, &uv__signal_global_reinit)) + abort(); + + uv__signal_global_reinit(); +} + + +void uv__signal_cleanup(void) { + /* We can only use signal-safe functions here. + * That includes read/write and close, fortunately. + * We do all of this directly here instead of resetting + * uv__signal_global_init_guard because + * uv__signal_global_once_init is only called from uv_loop_init + * and this needs to function in existing loops. + */ + if (uv__signal_lock_pipefd[0] != -1) { + uv__close(uv__signal_lock_pipefd[0]); + uv__signal_lock_pipefd[0] = -1; + } + + if (uv__signal_lock_pipefd[1] != -1) { + uv__close(uv__signal_lock_pipefd[1]); + uv__signal_lock_pipefd[1] = -1; + } +} + + +static void uv__signal_global_reinit(void) { + uv__signal_cleanup(); + + if (uv__make_pipe(uv__signal_lock_pipefd, 0)) + abort(); + + if (uv__signal_unlock()) + abort(); +} + + +void uv__signal_global_once_init(void) { + uv_once(&uv__signal_global_init_guard, uv__signal_global_init); +} + + +static int uv__signal_lock(void) { + int r; + char data; + + do { + r = read(uv__signal_lock_pipefd[0], &data, sizeof data); + } while (r < 0 && errno == EINTR); + + return (r < 0) ? -1 : 0; +} + + +static int uv__signal_unlock(void) { + int r; + char data = 42; + + do { + r = write(uv__signal_lock_pipefd[1], &data, sizeof data); + } while (r < 0 && errno == EINTR); + + return (r < 0) ? -1 : 0; +} + + +static void uv__signal_block_and_lock(sigset_t* saved_sigmask) { + sigset_t new_mask; + + if (sigfillset(&new_mask)) + abort(); + + if (pthread_sigmask(SIG_SETMASK, &new_mask, saved_sigmask)) + abort(); + + if (uv__signal_lock()) + abort(); +} + + +static void uv__signal_unlock_and_unblock(sigset_t* saved_sigmask) { + if (uv__signal_unlock()) + abort(); + + if (pthread_sigmask(SIG_SETMASK, saved_sigmask, NULL)) + abort(); +} + + +static uv_signal_t* uv__signal_first_handle(int signum) { + /* This function must be called with the signal lock held. */ + uv_signal_t lookup; + uv_signal_t* handle; + + lookup.signum = signum; + lookup.flags = 0; + lookup.loop = NULL; + + handle = RB_NFIND(uv__signal_tree_s, &uv__signal_tree, &lookup); + + if (handle != NULL && handle->signum == signum) + return handle; + + return NULL; +} + + +static void uv__signal_handler(int signum) { + uv__signal_msg_t msg; + uv_signal_t* handle; + int saved_errno; + + saved_errno = errno; + memset(&msg, 0, sizeof msg); + + if (uv__signal_lock()) { + errno = saved_errno; + return; + } + + for (handle = uv__signal_first_handle(signum); + handle != NULL && handle->signum == signum; + handle = RB_NEXT(uv__signal_tree_s, &uv__signal_tree, handle)) { + int r; + + msg.signum = signum; + msg.handle = handle; + + /* write() should be atomic for small data chunks, so the entire message + * should be written at once. In theory the pipe could become full, in + * which case the user is out of luck. + */ + do { + r = write(handle->loop->signal_pipefd[1], &msg, sizeof msg); + } while (r == -1 && errno == EINTR); + + assert(r == sizeof msg || + (r == -1 && (errno == EAGAIN || errno == EWOULDBLOCK))); + + if (r != -1) + handle->caught_signals++; + } + + uv__signal_unlock(); + errno = saved_errno; +} + + +static int uv__signal_register_handler(int signum, int oneshot) { + /* When this function is called, the signal lock must be held. */ + struct sigaction sa; + + /* XXX use a separate signal stack? */ + memset(&sa, 0, sizeof(sa)); + if (sigfillset(&sa.sa_mask)) + abort(); + sa.sa_handler = uv__signal_handler; + sa.sa_flags = SA_RESTART; + if (oneshot) + sa.sa_flags |= SA_RESETHAND; + + /* XXX save old action so we can restore it later on? */ + if (sigaction(signum, &sa, NULL)) + return UV__ERR(errno); + + return 0; +} + + +static void uv__signal_unregister_handler(int signum) { + /* When this function is called, the signal lock must be held. */ + struct sigaction sa; + + memset(&sa, 0, sizeof(sa)); + sa.sa_handler = SIG_DFL; + + /* sigaction can only fail with EINVAL or EFAULT; an attempt to deregister a + * signal implies that it was successfully registered earlier, so EINVAL + * should never happen. + */ + if (sigaction(signum, &sa, NULL)) + abort(); +} + + +static int uv__signal_loop_once_init(uv_loop_t* loop) { + int err; + + /* Return if already initialized. */ + if (loop->signal_pipefd[0] != -1) + return 0; + + err = uv__make_pipe(loop->signal_pipefd, UV__F_NONBLOCK); + if (err) + return err; + + uv__io_init(&loop->signal_io_watcher, + uv__signal_event, + loop->signal_pipefd[0]); + uv__io_start(loop, &loop->signal_io_watcher, POLLIN); + + return 0; +} + + +int uv__signal_loop_fork(uv_loop_t* loop) { + uv__io_stop(loop, &loop->signal_io_watcher, POLLIN); + uv__close(loop->signal_pipefd[0]); + uv__close(loop->signal_pipefd[1]); + loop->signal_pipefd[0] = -1; + loop->signal_pipefd[1] = -1; + return uv__signal_loop_once_init(loop); +} + + +void uv__signal_loop_cleanup(uv_loop_t* loop) { + QUEUE* q; + + /* Stop all the signal watchers that are still attached to this loop. This + * ensures that the (shared) signal tree doesn't contain any invalid entries + * entries, and that signal handlers are removed when appropriate. + * It's safe to use QUEUE_FOREACH here because the handles and the handle + * queue are not modified by uv__signal_stop(). + */ + QUEUE_FOREACH(q, &loop->handle_queue) { + uv_handle_t* handle = QUEUE_DATA(q, uv_handle_t, handle_queue); + + if (handle->type == UV_SIGNAL) + uv__signal_stop((uv_signal_t*) handle); + } + + if (loop->signal_pipefd[0] != -1) { + uv__close(loop->signal_pipefd[0]); + loop->signal_pipefd[0] = -1; + } + + if (loop->signal_pipefd[1] != -1) { + uv__close(loop->signal_pipefd[1]); + loop->signal_pipefd[1] = -1; + } +} + + +int uv_signal_init(uv_loop_t* loop, uv_signal_t* handle) { + int err; + + err = uv__signal_loop_once_init(loop); + if (err) + return err; + + uv__handle_init(loop, (uv_handle_t*) handle, UV_SIGNAL); + handle->signum = 0; + handle->caught_signals = 0; + handle->dispatched_signals = 0; + + return 0; +} + + +void uv__signal_close(uv_signal_t* handle) { + uv__signal_stop(handle); +} + + +int uv_signal_start(uv_signal_t* handle, uv_signal_cb signal_cb, int signum) { + return uv__signal_start(handle, signal_cb, signum, 0); +} + + +int uv_signal_start_oneshot(uv_signal_t* handle, + uv_signal_cb signal_cb, + int signum) { + return uv__signal_start(handle, signal_cb, signum, 1); +} + + +static int uv__signal_start(uv_signal_t* handle, + uv_signal_cb signal_cb, + int signum, + int oneshot) { + sigset_t saved_sigmask; + int err; + uv_signal_t* first_handle; + + assert(!uv__is_closing(handle)); + + /* If the user supplies signum == 0, then return an error already. If the + * signum is otherwise invalid then uv__signal_register will find out + * eventually. + */ + if (signum == 0) + return UV_EINVAL; + + /* Short circuit: if the signal watcher is already watching {signum} don't + * go through the process of deregistering and registering the handler. + * Additionally, this avoids pending signals getting lost in the small + * time frame that handle->signum == 0. + */ + if (signum == handle->signum) { + handle->signal_cb = signal_cb; + return 0; + } + + /* If the signal handler was already active, stop it first. */ + if (handle->signum != 0) { + uv__signal_stop(handle); + } + + uv__signal_block_and_lock(&saved_sigmask); + + /* If at this point there are no active signal watchers for this signum (in + * any of the loops), it's time to try and register a handler for it here. + * Also in case there's only one-shot handlers and a regular handler comes in. + */ + first_handle = uv__signal_first_handle(signum); + if (first_handle == NULL || + (!oneshot && (first_handle->flags & UV_SIGNAL_ONE_SHOT))) { + err = uv__signal_register_handler(signum, oneshot); + if (err) { + /* Registering the signal handler failed. Must be an invalid signal. */ + uv__signal_unlock_and_unblock(&saved_sigmask); + return err; + } + } + + handle->signum = signum; + if (oneshot) + handle->flags |= UV_SIGNAL_ONE_SHOT; + + RB_INSERT(uv__signal_tree_s, &uv__signal_tree, handle); + + uv__signal_unlock_and_unblock(&saved_sigmask); + + handle->signal_cb = signal_cb; + uv__handle_start(handle); + + return 0; +} + + +static void uv__signal_event(uv_loop_t* loop, + uv__io_t* w, + unsigned int events) { + uv__signal_msg_t* msg; + uv_signal_t* handle; + char buf[sizeof(uv__signal_msg_t) * 32]; + size_t bytes, end, i; + int r; + + bytes = 0; + end = 0; + + do { + r = read(loop->signal_pipefd[0], buf + bytes, sizeof(buf) - bytes); + + if (r == -1 && errno == EINTR) + continue; + + if (r == -1 && (errno == EAGAIN || errno == EWOULDBLOCK)) { + /* If there are bytes in the buffer already (which really is extremely + * unlikely if possible at all) we can't exit the function here. We'll + * spin until more bytes are read instead. + */ + if (bytes > 0) + continue; + + /* Otherwise, there was nothing there. */ + return; + } + + /* Other errors really should never happen. */ + if (r == -1) + abort(); + + bytes += r; + + /* `end` is rounded down to a multiple of sizeof(uv__signal_msg_t). */ + end = (bytes / sizeof(uv__signal_msg_t)) * sizeof(uv__signal_msg_t); + + for (i = 0; i < end; i += sizeof(uv__signal_msg_t)) { + msg = (uv__signal_msg_t*) (buf + i); + handle = msg->handle; + + if (msg->signum == handle->signum) { + assert(!(handle->flags & UV_HANDLE_CLOSING)); + handle->signal_cb(handle, handle->signum); + } + + handle->dispatched_signals++; + + if (handle->flags & UV_SIGNAL_ONE_SHOT) + uv__signal_stop(handle); + } + + bytes -= end; + + /* If there are any "partial" messages left, move them to the start of the + * the buffer, and spin. This should not happen. + */ + if (bytes) { + memmove(buf, buf + end, bytes); + continue; + } + } while (end == sizeof buf); +} + + +static int uv__signal_compare(uv_signal_t* w1, uv_signal_t* w2) { + int f1; + int f2; + /* Compare signums first so all watchers with the same signnum end up + * adjacent. + */ + if (w1->signum < w2->signum) return -1; + if (w1->signum > w2->signum) return 1; + + /* Handlers without UV_SIGNAL_ONE_SHOT set will come first, so if the first + * handler returned is a one-shot handler, the rest will be too. + */ + f1 = w1->flags & UV_SIGNAL_ONE_SHOT; + f2 = w2->flags & UV_SIGNAL_ONE_SHOT; + if (f1 < f2) return -1; + if (f1 > f2) return 1; + + /* Sort by loop pointer, so we can easily look up the first item after + * { .signum = x, .loop = NULL }. + */ + if (w1->loop < w2->loop) return -1; + if (w1->loop > w2->loop) return 1; + + if (w1 < w2) return -1; + if (w1 > w2) return 1; + + return 0; +} + + +int uv_signal_stop(uv_signal_t* handle) { + assert(!uv__is_closing(handle)); + uv__signal_stop(handle); + return 0; +} + + +static void uv__signal_stop(uv_signal_t* handle) { + uv_signal_t* removed_handle; + sigset_t saved_sigmask; + uv_signal_t* first_handle; + int rem_oneshot; + int first_oneshot; + int ret; + + /* If the watcher wasn't started, this is a no-op. */ + if (handle->signum == 0) + return; + + uv__signal_block_and_lock(&saved_sigmask); + + removed_handle = RB_REMOVE(uv__signal_tree_s, &uv__signal_tree, handle); + assert(removed_handle == handle); + (void) removed_handle; + + /* Check if there are other active signal watchers observing this signal. If + * not, unregister the signal handler. + */ + first_handle = uv__signal_first_handle(handle->signum); + if (first_handle == NULL) { + uv__signal_unregister_handler(handle->signum); + } else { + rem_oneshot = handle->flags & UV_SIGNAL_ONE_SHOT; + first_oneshot = first_handle->flags & UV_SIGNAL_ONE_SHOT; + if (first_oneshot && !rem_oneshot) { + ret = uv__signal_register_handler(handle->signum, 1); + assert(ret == 0); + (void)ret; + } + } + + uv__signal_unlock_and_unblock(&saved_sigmask); + + handle->signum = 0; + uv__handle_stop(handle); +} diff --git a/external/libuv/src/unix/spinlock.h b/external/libuv/src/unix/spinlock.h new file mode 100644 index 000000000..a20c83cc6 --- /dev/null +++ b/external/libuv/src/unix/spinlock.h @@ -0,0 +1,53 @@ +/* Copyright (c) 2013, Ben Noordhuis + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef UV_SPINLOCK_H_ +#define UV_SPINLOCK_H_ + +#include "internal.h" /* ACCESS_ONCE, UV_UNUSED */ +#include "atomic-ops.h" + +#define UV_SPINLOCK_INITIALIZER { 0 } + +typedef struct { + int lock; +} uv_spinlock_t; + +UV_UNUSED(static void uv_spinlock_init(uv_spinlock_t* spinlock)); +UV_UNUSED(static void uv_spinlock_lock(uv_spinlock_t* spinlock)); +UV_UNUSED(static void uv_spinlock_unlock(uv_spinlock_t* spinlock)); +UV_UNUSED(static int uv_spinlock_trylock(uv_spinlock_t* spinlock)); + +UV_UNUSED(static void uv_spinlock_init(uv_spinlock_t* spinlock)) { + ACCESS_ONCE(int, spinlock->lock) = 0; +} + +UV_UNUSED(static void uv_spinlock_lock(uv_spinlock_t* spinlock)) { + while (!uv_spinlock_trylock(spinlock)) cpu_relax(); +} + +UV_UNUSED(static void uv_spinlock_unlock(uv_spinlock_t* spinlock)) { + ACCESS_ONCE(int, spinlock->lock) = 0; +} + +UV_UNUSED(static int uv_spinlock_trylock(uv_spinlock_t* spinlock)) { + /* TODO(bnoordhuis) Maybe change to a ticket lock to guarantee fair queueing. + * Not really critical until we have locks that are (frequently) contended + * for by several threads. + */ + return 0 == cmpxchgi(&spinlock->lock, 0, 1); +} + +#endif /* UV_SPINLOCK_H_ */ diff --git a/external/libuv/src/unix/stream.c b/external/libuv/src/unix/stream.c new file mode 100644 index 000000000..8327f9ccf --- /dev/null +++ b/external/libuv/src/unix/stream.c @@ -0,0 +1,1693 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#include "uv.h" +#include "internal.h" + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include /* IOV_MAX */ + +#if defined(__APPLE__) +# include +# include +# include + +/* Forward declaration */ +typedef struct uv__stream_select_s uv__stream_select_t; + +struct uv__stream_select_s { + uv_stream_t* stream; + uv_thread_t thread; + uv_sem_t close_sem; + uv_sem_t async_sem; + uv_async_t async; + int events; + int fake_fd; + int int_fd; + int fd; + fd_set* sread; + size_t sread_sz; + fd_set* swrite; + size_t swrite_sz; +}; + +/* Due to a possible kernel bug at least in OS X 10.10 "Yosemite", + * EPROTOTYPE can be returned while trying to write to a socket that is + * shutting down. If we retry the write, we should get the expected EPIPE + * instead. + */ +# define RETRY_ON_WRITE_ERROR(errno) (errno == EINTR || errno == EPROTOTYPE) +# define IS_TRANSIENT_WRITE_ERROR(errno, send_handle) \ + (errno == EAGAIN || errno == EWOULDBLOCK || errno == ENOBUFS || \ + (errno == EMSGSIZE && send_handle != NULL)) +#else +# define RETRY_ON_WRITE_ERROR(errno) (errno == EINTR) +# define IS_TRANSIENT_WRITE_ERROR(errno, send_handle) \ + (errno == EAGAIN || errno == EWOULDBLOCK || errno == ENOBUFS) +#endif /* defined(__APPLE__) */ + +static void uv__stream_connect(uv_stream_t*); +static void uv__write(uv_stream_t* stream); +static void uv__read(uv_stream_t* stream); +static void uv__stream_io(uv_loop_t* loop, uv__io_t* w, unsigned int events); +static void uv__write_callbacks(uv_stream_t* stream); +static size_t uv__write_req_size(uv_write_t* req); + + +void uv__stream_init(uv_loop_t* loop, + uv_stream_t* stream, + uv_handle_type type) { + int err; + + uv__handle_init(loop, (uv_handle_t*)stream, type); + stream->read_cb = NULL; + stream->alloc_cb = NULL; + stream->close_cb = NULL; + stream->connection_cb = NULL; + stream->connect_req = NULL; + stream->shutdown_req = NULL; + stream->accepted_fd = -1; + stream->queued_fds = NULL; + stream->delayed_error = 0; + QUEUE_INIT(&stream->write_queue); + QUEUE_INIT(&stream->write_completed_queue); + stream->write_queue_size = 0; + + if (loop->emfile_fd == -1) { + err = uv__open_cloexec("/dev/null", O_RDONLY); + if (err < 0) + /* In the rare case that "/dev/null" isn't mounted open "/" + * instead. + */ + err = uv__open_cloexec("/", O_RDONLY); + if (err >= 0) + loop->emfile_fd = err; + } + +#if defined(__APPLE__) + stream->select = NULL; +#endif /* defined(__APPLE_) */ + + uv__io_init(&stream->io_watcher, uv__stream_io, -1); +} + + +static void uv__stream_osx_interrupt_select(uv_stream_t* stream) { +#if defined(__APPLE__) + /* Notify select() thread about state change */ + uv__stream_select_t* s; + int r; + + s = stream->select; + if (s == NULL) + return; + + /* Interrupt select() loop + * NOTE: fake_fd and int_fd are socketpair(), thus writing to one will + * emit read event on other side + */ + do + r = write(s->fake_fd, "x", 1); + while (r == -1 && errno == EINTR); + + assert(r == 1); +#else /* !defined(__APPLE__) */ + /* No-op on any other platform */ +#endif /* !defined(__APPLE__) */ +} + + +#if defined(__APPLE__) +static void uv__stream_osx_select(void* arg) { + uv_stream_t* stream; + uv__stream_select_t* s; + char buf[1024]; + int events; + int fd; + int r; + int max_fd; + + stream = arg; + s = stream->select; + fd = s->fd; + + if (fd > s->int_fd) + max_fd = fd; + else + max_fd = s->int_fd; + + while (1) { + /* Terminate on semaphore */ + if (uv_sem_trywait(&s->close_sem) == 0) + break; + + /* Watch fd using select(2) */ + memset(s->sread, 0, s->sread_sz); + memset(s->swrite, 0, s->swrite_sz); + + if (uv__io_active(&stream->io_watcher, POLLIN)) + FD_SET(fd, s->sread); + if (uv__io_active(&stream->io_watcher, POLLOUT)) + FD_SET(fd, s->swrite); + FD_SET(s->int_fd, s->sread); + + /* Wait indefinitely for fd events */ + r = select(max_fd + 1, s->sread, s->swrite, NULL, NULL); + if (r == -1) { + if (errno == EINTR) + continue; + + /* XXX: Possible?! */ + abort(); + } + + /* Ignore timeouts */ + if (r == 0) + continue; + + /* Empty socketpair's buffer in case of interruption */ + if (FD_ISSET(s->int_fd, s->sread)) + while (1) { + r = read(s->int_fd, buf, sizeof(buf)); + + if (r == sizeof(buf)) + continue; + + if (r != -1) + break; + + if (errno == EAGAIN || errno == EWOULDBLOCK) + break; + + if (errno == EINTR) + continue; + + abort(); + } + + /* Handle events */ + events = 0; + if (FD_ISSET(fd, s->sread)) + events |= POLLIN; + if (FD_ISSET(fd, s->swrite)) + events |= POLLOUT; + + assert(events != 0 || FD_ISSET(s->int_fd, s->sread)); + if (events != 0) { + ACCESS_ONCE(int, s->events) = events; + + uv_async_send(&s->async); + uv_sem_wait(&s->async_sem); + + /* Should be processed at this stage */ + assert((s->events == 0) || (stream->flags & UV_HANDLE_CLOSING)); + } + } +} + + +static void uv__stream_osx_select_cb(uv_async_t* handle) { + uv__stream_select_t* s; + uv_stream_t* stream; + int events; + + s = container_of(handle, uv__stream_select_t, async); + stream = s->stream; + + /* Get and reset stream's events */ + events = s->events; + ACCESS_ONCE(int, s->events) = 0; + + assert(events != 0); + assert(events == (events & (POLLIN | POLLOUT))); + + /* Invoke callback on event-loop */ + if ((events & POLLIN) && uv__io_active(&stream->io_watcher, POLLIN)) + uv__stream_io(stream->loop, &stream->io_watcher, POLLIN); + + if ((events & POLLOUT) && uv__io_active(&stream->io_watcher, POLLOUT)) + uv__stream_io(stream->loop, &stream->io_watcher, POLLOUT); + + if (stream->flags & UV_HANDLE_CLOSING) + return; + + /* NOTE: It is important to do it here, otherwise `select()` might be called + * before the actual `uv__read()`, leading to the blocking syscall + */ + uv_sem_post(&s->async_sem); +} + + +static void uv__stream_osx_cb_close(uv_handle_t* async) { + uv__stream_select_t* s; + + s = container_of(async, uv__stream_select_t, async); + uv__free(s); +} + + +int uv__stream_try_select(uv_stream_t* stream, int* fd) { + /* + * kqueue doesn't work with some files from /dev mount on osx. + * select(2) in separate thread for those fds + */ + + struct kevent filter[1]; + struct kevent events[1]; + struct timespec timeout; + uv__stream_select_t* s; + int fds[2]; + int err; + int ret; + int kq; + int old_fd; + int max_fd; + size_t sread_sz; + size_t swrite_sz; + + kq = kqueue(); + if (kq == -1) { + perror("(libuv) kqueue()"); + return UV__ERR(errno); + } + + EV_SET(&filter[0], *fd, EVFILT_READ, EV_ADD | EV_ENABLE, 0, 0, 0); + + /* Use small timeout, because we only want to capture EINVALs */ + timeout.tv_sec = 0; + timeout.tv_nsec = 1; + + do + ret = kevent(kq, filter, 1, events, 1, &timeout); + while (ret == -1 && errno == EINTR); + + uv__close(kq); + + if (ret == -1) + return UV__ERR(errno); + + if (ret == 0 || (events[0].flags & EV_ERROR) == 0 || events[0].data != EINVAL) + return 0; + + /* At this point we definitely know that this fd won't work with kqueue */ + + /* + * Create fds for io watcher and to interrupt the select() loop. + * NOTE: do it ahead of malloc below to allocate enough space for fd_sets + */ + if (socketpair(AF_UNIX, SOCK_STREAM, 0, fds)) + return UV__ERR(errno); + + max_fd = *fd; + if (fds[1] > max_fd) + max_fd = fds[1]; + + sread_sz = ROUND_UP(max_fd + 1, sizeof(uint32_t) * NBBY) / NBBY; + swrite_sz = sread_sz; + + s = uv__malloc(sizeof(*s) + sread_sz + swrite_sz); + if (s == NULL) { + err = UV_ENOMEM; + goto failed_malloc; + } + + s->events = 0; + s->fd = *fd; + s->sread = (fd_set*) ((char*) s + sizeof(*s)); + s->sread_sz = sread_sz; + s->swrite = (fd_set*) ((char*) s->sread + sread_sz); + s->swrite_sz = swrite_sz; + + err = uv_async_init(stream->loop, &s->async, uv__stream_osx_select_cb); + if (err) + goto failed_async_init; + + s->async.flags |= UV_HANDLE_INTERNAL; + uv__handle_unref(&s->async); + + err = uv_sem_init(&s->close_sem, 0); + if (err != 0) + goto failed_close_sem_init; + + err = uv_sem_init(&s->async_sem, 0); + if (err != 0) + goto failed_async_sem_init; + + s->fake_fd = fds[0]; + s->int_fd = fds[1]; + + old_fd = *fd; + s->stream = stream; + stream->select = s; + *fd = s->fake_fd; + + err = uv_thread_create(&s->thread, uv__stream_osx_select, stream); + if (err != 0) + goto failed_thread_create; + + return 0; + +failed_thread_create: + s->stream = NULL; + stream->select = NULL; + *fd = old_fd; + + uv_sem_destroy(&s->async_sem); + +failed_async_sem_init: + uv_sem_destroy(&s->close_sem); + +failed_close_sem_init: + uv__close(fds[0]); + uv__close(fds[1]); + uv_close((uv_handle_t*) &s->async, uv__stream_osx_cb_close); + return err; + +failed_async_init: + uv__free(s); + +failed_malloc: + uv__close(fds[0]); + uv__close(fds[1]); + + return err; +} +#endif /* defined(__APPLE__) */ + + +int uv__stream_open(uv_stream_t* stream, int fd, int flags) { +#if defined(__APPLE__) + int enable; +#endif + + if (!(stream->io_watcher.fd == -1 || stream->io_watcher.fd == fd)) + return UV_EBUSY; + + assert(fd >= 0); + stream->flags |= flags; + + if (stream->type == UV_TCP) { + if ((stream->flags & UV_HANDLE_TCP_NODELAY) && uv__tcp_nodelay(fd, 1)) + return UV__ERR(errno); + + /* TODO Use delay the user passed in. */ + if ((stream->flags & UV_HANDLE_TCP_KEEPALIVE) && + uv__tcp_keepalive(fd, 1, 60)) { + return UV__ERR(errno); + } + } + +#if defined(__APPLE__) + enable = 1; + if (setsockopt(fd, SOL_SOCKET, SO_OOBINLINE, &enable, sizeof(enable)) && + errno != ENOTSOCK && + errno != EINVAL) { + return UV__ERR(errno); + } +#endif + + stream->io_watcher.fd = fd; + + return 0; +} + + +void uv__stream_flush_write_queue(uv_stream_t* stream, int error) { + uv_write_t* req; + QUEUE* q; + while (!QUEUE_EMPTY(&stream->write_queue)) { + q = QUEUE_HEAD(&stream->write_queue); + QUEUE_REMOVE(q); + + req = QUEUE_DATA(q, uv_write_t, queue); + req->error = error; + + QUEUE_INSERT_TAIL(&stream->write_completed_queue, &req->queue); + } +} + + +void uv__stream_destroy(uv_stream_t* stream) { + assert(!uv__io_active(&stream->io_watcher, POLLIN | POLLOUT)); + assert(stream->flags & UV_HANDLE_CLOSED); + + if (stream->connect_req) { + uv__req_unregister(stream->loop, stream->connect_req); + stream->connect_req->cb(stream->connect_req, UV_ECANCELED); + stream->connect_req = NULL; + } + + uv__stream_flush_write_queue(stream, UV_ECANCELED); + uv__write_callbacks(stream); + + if (stream->shutdown_req) { + /* The ECANCELED error code is a lie, the shutdown(2) syscall is a + * fait accompli at this point. Maybe we should revisit this in v0.11. + * A possible reason for leaving it unchanged is that it informs the + * callee that the handle has been destroyed. + */ + uv__req_unregister(stream->loop, stream->shutdown_req); + stream->shutdown_req->cb(stream->shutdown_req, UV_ECANCELED); + stream->shutdown_req = NULL; + } + + assert(stream->write_queue_size == 0); +} + + +/* Implements a best effort approach to mitigating accept() EMFILE errors. + * We have a spare file descriptor stashed away that we close to get below + * the EMFILE limit. Next, we accept all pending connections and close them + * immediately to signal the clients that we're overloaded - and we are, but + * we still keep on trucking. + * + * There is one caveat: it's not reliable in a multi-threaded environment. + * The file descriptor limit is per process. Our party trick fails if another + * thread opens a file or creates a socket in the time window between us + * calling close() and accept(). + */ +static int uv__emfile_trick(uv_loop_t* loop, int accept_fd) { + int err; + int emfile_fd; + + if (loop->emfile_fd == -1) + return UV_EMFILE; + + uv__close(loop->emfile_fd); + loop->emfile_fd = -1; + + do { + err = uv__accept(accept_fd); + if (err >= 0) + uv__close(err); + } while (err >= 0 || err == UV_EINTR); + + emfile_fd = uv__open_cloexec("/", O_RDONLY); + if (emfile_fd >= 0) + loop->emfile_fd = emfile_fd; + + return err; +} + + +#if defined(UV_HAVE_KQUEUE) +# define UV_DEC_BACKLOG(w) w->rcount--; +#else +# define UV_DEC_BACKLOG(w) /* no-op */ +#endif /* defined(UV_HAVE_KQUEUE) */ + + +void uv__server_io(uv_loop_t* loop, uv__io_t* w, unsigned int events) { + uv_stream_t* stream; + int err; + + stream = container_of(w, uv_stream_t, io_watcher); + assert(events & POLLIN); + assert(stream->accepted_fd == -1); + assert(!(stream->flags & UV_HANDLE_CLOSING)); + + uv__io_start(stream->loop, &stream->io_watcher, POLLIN); + + /* connection_cb can close the server socket while we're + * in the loop so check it on each iteration. + */ + while (uv__stream_fd(stream) != -1) { + assert(stream->accepted_fd == -1); + +#if defined(UV_HAVE_KQUEUE) + if (w->rcount <= 0) + return; +#endif /* defined(UV_HAVE_KQUEUE) */ + + err = uv__accept(uv__stream_fd(stream)); + if (err < 0) { + if (err == UV_EAGAIN || err == UV__ERR(EWOULDBLOCK)) + return; /* Not an error. */ + + if (err == UV_ECONNABORTED) + continue; /* Ignore. Nothing we can do about that. */ + + if (err == UV_EMFILE || err == UV_ENFILE) { + err = uv__emfile_trick(loop, uv__stream_fd(stream)); + if (err == UV_EAGAIN || err == UV__ERR(EWOULDBLOCK)) + break; + } + + stream->connection_cb(stream, err); + continue; + } + + UV_DEC_BACKLOG(w) + stream->accepted_fd = err; + stream->connection_cb(stream, 0); + + if (stream->accepted_fd != -1) { + /* The user hasn't yet accepted called uv_accept() */ + uv__io_stop(loop, &stream->io_watcher, POLLIN); + return; + } + + if (stream->type == UV_TCP && + (stream->flags & UV_HANDLE_TCP_SINGLE_ACCEPT)) { + /* Give other processes a chance to accept connections. */ + struct timespec timeout = { 0, 1 }; + nanosleep(&timeout, NULL); + } + } +} + + +#undef UV_DEC_BACKLOG + + +int uv_accept(uv_stream_t* server, uv_stream_t* client) { + int err; + + assert(server->loop == client->loop); + + if (server->accepted_fd == -1) + return UV_EAGAIN; + + switch (client->type) { + case UV_NAMED_PIPE: + case UV_TCP: + err = uv__stream_open(client, + server->accepted_fd, + UV_HANDLE_READABLE | UV_HANDLE_WRITABLE); + if (err) { + /* TODO handle error */ + uv__close(server->accepted_fd); + goto done; + } + break; + + case UV_UDP: + err = uv_udp_open((uv_udp_t*) client, server->accepted_fd); + if (err) { + uv__close(server->accepted_fd); + goto done; + } + break; + + default: + return UV_EINVAL; + } + + client->flags |= UV_HANDLE_BOUND; + +done: + /* Process queued fds */ + if (server->queued_fds != NULL) { + uv__stream_queued_fds_t* queued_fds; + + queued_fds = server->queued_fds; + + /* Read first */ + server->accepted_fd = queued_fds->fds[0]; + + /* All read, free */ + assert(queued_fds->offset > 0); + if (--queued_fds->offset == 0) { + uv__free(queued_fds); + server->queued_fds = NULL; + } else { + /* Shift rest */ + memmove(queued_fds->fds, + queued_fds->fds + 1, + queued_fds->offset * sizeof(*queued_fds->fds)); + } + } else { + server->accepted_fd = -1; + if (err == 0) + uv__io_start(server->loop, &server->io_watcher, POLLIN); + } + return err; +} + + +int uv_listen(uv_stream_t* stream, int backlog, uv_connection_cb cb) { + int err; + + switch (stream->type) { + case UV_TCP: + err = uv_tcp_listen((uv_tcp_t*)stream, backlog, cb); + break; + + case UV_NAMED_PIPE: + err = uv_pipe_listen((uv_pipe_t*)stream, backlog, cb); + break; + + default: + err = UV_EINVAL; + } + + if (err == 0) + uv__handle_start(stream); + + return err; +} + + +static void uv__drain(uv_stream_t* stream) { + uv_shutdown_t* req; + int err; + + assert(QUEUE_EMPTY(&stream->write_queue)); + uv__io_stop(stream->loop, &stream->io_watcher, POLLOUT); + uv__stream_osx_interrupt_select(stream); + + /* Shutdown? */ + if ((stream->flags & UV_HANDLE_SHUTTING) && + !(stream->flags & UV_HANDLE_CLOSING) && + !(stream->flags & UV_HANDLE_SHUT)) { + assert(stream->shutdown_req); + + req = stream->shutdown_req; + stream->shutdown_req = NULL; + stream->flags &= ~UV_HANDLE_SHUTTING; + uv__req_unregister(stream->loop, req); + + err = 0; + if (shutdown(uv__stream_fd(stream), SHUT_WR)) + err = UV__ERR(errno); + + if (err == 0) + stream->flags |= UV_HANDLE_SHUT; + + if (req->cb != NULL) + req->cb(req, err); + } +} + + +static ssize_t uv__writev(int fd, struct iovec* vec, size_t n) { + if (n == 1) + return write(fd, vec->iov_base, vec->iov_len); + else + return writev(fd, vec, n); +} + + +static size_t uv__write_req_size(uv_write_t* req) { + size_t size; + + assert(req->bufs != NULL); + size = uv__count_bufs(req->bufs + req->write_index, + req->nbufs - req->write_index); + assert(req->handle->write_queue_size >= size); + + return size; +} + + +/* Returns 1 if all write request data has been written, or 0 if there is still + * more data to write. + * + * Note: the return value only says something about the *current* request. + * There may still be other write requests sitting in the queue. + */ +static int uv__write_req_update(uv_stream_t* stream, + uv_write_t* req, + size_t n) { + uv_buf_t* buf; + size_t len; + + assert(n <= stream->write_queue_size); + stream->write_queue_size -= n; + + buf = req->bufs + req->write_index; + + do { + len = n < buf->len ? n : buf->len; + buf->base += len; + buf->len -= len; + buf += (buf->len == 0); /* Advance to next buffer if this one is empty. */ + n -= len; + } while (n > 0); + + req->write_index = buf - req->bufs; + + return req->write_index == req->nbufs; +} + + +static void uv__write_req_finish(uv_write_t* req) { + uv_stream_t* stream = req->handle; + + /* Pop the req off tcp->write_queue. */ + QUEUE_REMOVE(&req->queue); + + /* Only free when there was no error. On error, we touch up write_queue_size + * right before making the callback. The reason we don't do that right away + * is that a write_queue_size > 0 is our only way to signal to the user that + * they should stop writing - which they should if we got an error. Something + * to revisit in future revisions of the libuv API. + */ + if (req->error == 0) { + if (req->bufs != req->bufsml) + uv__free(req->bufs); + req->bufs = NULL; + } + + /* Add it to the write_completed_queue where it will have its + * callback called in the near future. + */ + QUEUE_INSERT_TAIL(&stream->write_completed_queue, &req->queue); + uv__io_feed(stream->loop, &stream->io_watcher); +} + + +static int uv__handle_fd(uv_handle_t* handle) { + switch (handle->type) { + case UV_NAMED_PIPE: + case UV_TCP: + return ((uv_stream_t*) handle)->io_watcher.fd; + + case UV_UDP: + return ((uv_udp_t*) handle)->io_watcher.fd; + + default: + return -1; + } +} + +static void uv__write(uv_stream_t* stream) { + struct iovec* iov; + QUEUE* q; + uv_write_t* req; + int iovmax; + int iovcnt; + ssize_t n; + int err; + +start: + + assert(uv__stream_fd(stream) >= 0); + + if (QUEUE_EMPTY(&stream->write_queue)) + return; + + q = QUEUE_HEAD(&stream->write_queue); + req = QUEUE_DATA(q, uv_write_t, queue); + assert(req->handle == stream); + + /* + * Cast to iovec. We had to have our own uv_buf_t instead of iovec + * because Windows's WSABUF is not an iovec. + */ + assert(sizeof(uv_buf_t) == sizeof(struct iovec)); + iov = (struct iovec*) &(req->bufs[req->write_index]); + iovcnt = req->nbufs - req->write_index; + + iovmax = uv__getiovmax(); + + /* Limit iov count to avoid EINVALs from writev() */ + if (iovcnt > iovmax) + iovcnt = iovmax; + + /* + * Now do the actual writev. Note that we've been updating the pointers + * inside the iov each time we write. So there is no need to offset it. + */ + + if (req->send_handle) { + int fd_to_send; + struct msghdr msg; + struct cmsghdr *cmsg; + union { + char data[64]; + struct cmsghdr alias; + } scratch; + + if (uv__is_closing(req->send_handle)) { + err = UV_EBADF; + goto error; + } + + fd_to_send = uv__handle_fd((uv_handle_t*) req->send_handle); + + memset(&scratch, 0, sizeof(scratch)); + + assert(fd_to_send >= 0); + + msg.msg_name = NULL; + msg.msg_namelen = 0; + msg.msg_iov = iov; + msg.msg_iovlen = iovcnt; + msg.msg_flags = 0; + + msg.msg_control = &scratch.alias; + msg.msg_controllen = CMSG_SPACE(sizeof(fd_to_send)); + + cmsg = CMSG_FIRSTHDR(&msg); + cmsg->cmsg_level = SOL_SOCKET; + cmsg->cmsg_type = SCM_RIGHTS; + cmsg->cmsg_len = CMSG_LEN(sizeof(fd_to_send)); + + /* silence aliasing warning */ + { + void* pv = CMSG_DATA(cmsg); + int* pi = pv; + *pi = fd_to_send; + } + + do + n = sendmsg(uv__stream_fd(stream), &msg, 0); + while (n == -1 && RETRY_ON_WRITE_ERROR(errno)); + + /* Ensure the handle isn't sent again in case this is a partial write. */ + if (n >= 0) + req->send_handle = NULL; + } else { + do + n = uv__writev(uv__stream_fd(stream), iov, iovcnt); + while (n == -1 && RETRY_ON_WRITE_ERROR(errno)); + } + + if (n == -1 && !IS_TRANSIENT_WRITE_ERROR(errno, req->send_handle)) { + err = UV__ERR(errno); + goto error; + } + + if (n >= 0 && uv__write_req_update(stream, req, n)) { + uv__write_req_finish(req); + return; /* TODO(bnoordhuis) Start trying to write the next request. */ + } + + /* If this is a blocking stream, try again. */ + if (stream->flags & UV_HANDLE_BLOCKING_WRITES) + goto start; + + /* We're not done. */ + uv__io_start(stream->loop, &stream->io_watcher, POLLOUT); + + /* Notify select() thread about state change */ + uv__stream_osx_interrupt_select(stream); + + return; + +error: + req->error = err; + uv__write_req_finish(req); + uv__io_stop(stream->loop, &stream->io_watcher, POLLOUT); + if (!uv__io_active(&stream->io_watcher, POLLIN)) + uv__handle_stop(stream); + uv__stream_osx_interrupt_select(stream); +} + + +static void uv__write_callbacks(uv_stream_t* stream) { + uv_write_t* req; + QUEUE* q; + QUEUE pq; + + if (QUEUE_EMPTY(&stream->write_completed_queue)) + return; + + QUEUE_MOVE(&stream->write_completed_queue, &pq); + + while (!QUEUE_EMPTY(&pq)) { + /* Pop a req off write_completed_queue. */ + q = QUEUE_HEAD(&pq); + req = QUEUE_DATA(q, uv_write_t, queue); + QUEUE_REMOVE(q); + uv__req_unregister(stream->loop, req); + + if (req->bufs != NULL) { + stream->write_queue_size -= uv__write_req_size(req); + if (req->bufs != req->bufsml) + uv__free(req->bufs); + req->bufs = NULL; + } + + /* NOTE: call callback AFTER freeing the request data. */ + if (req->cb) + req->cb(req, req->error); + } +} + + +uv_handle_type uv__handle_type(int fd) { + struct sockaddr_storage ss; + socklen_t sslen; + socklen_t len; + int type; + + memset(&ss, 0, sizeof(ss)); + sslen = sizeof(ss); + + if (getsockname(fd, (struct sockaddr*)&ss, &sslen)) + return UV_UNKNOWN_HANDLE; + + len = sizeof type; + + if (getsockopt(fd, SOL_SOCKET, SO_TYPE, &type, &len)) + return UV_UNKNOWN_HANDLE; + + if (type == SOCK_STREAM) { +#if defined(_AIX) || defined(__DragonFly__) + /* on AIX/DragonFly the getsockname call returns an empty sa structure + * for sockets of type AF_UNIX. For all other types it will + * return a properly filled in structure. + */ + if (sslen == 0) + return UV_NAMED_PIPE; +#endif + switch (ss.ss_family) { + case AF_UNIX: + return UV_NAMED_PIPE; + case AF_INET: + case AF_INET6: + return UV_TCP; + } + } + + if (type == SOCK_DGRAM && + (ss.ss_family == AF_INET || ss.ss_family == AF_INET6)) + return UV_UDP; + + return UV_UNKNOWN_HANDLE; +} + + +static void uv__stream_eof(uv_stream_t* stream, const uv_buf_t* buf) { + stream->flags |= UV_HANDLE_READ_EOF; + stream->flags &= ~UV_HANDLE_READING; + uv__io_stop(stream->loop, &stream->io_watcher, POLLIN); + if (!uv__io_active(&stream->io_watcher, POLLOUT)) + uv__handle_stop(stream); + uv__stream_osx_interrupt_select(stream); + stream->read_cb(stream, UV_EOF, buf); +} + + +static int uv__stream_queue_fd(uv_stream_t* stream, int fd) { + uv__stream_queued_fds_t* queued_fds; + unsigned int queue_size; + + queued_fds = stream->queued_fds; + if (queued_fds == NULL) { + queue_size = 8; + queued_fds = uv__malloc((queue_size - 1) * sizeof(*queued_fds->fds) + + sizeof(*queued_fds)); + if (queued_fds == NULL) + return UV_ENOMEM; + queued_fds->size = queue_size; + queued_fds->offset = 0; + stream->queued_fds = queued_fds; + + /* Grow */ + } else if (queued_fds->size == queued_fds->offset) { + queue_size = queued_fds->size + 8; + queued_fds = uv__realloc(queued_fds, + (queue_size - 1) * sizeof(*queued_fds->fds) + + sizeof(*queued_fds)); + + /* + * Allocation failure, report back. + * NOTE: if it is fatal - sockets will be closed in uv__stream_close + */ + if (queued_fds == NULL) + return UV_ENOMEM; + queued_fds->size = queue_size; + stream->queued_fds = queued_fds; + } + + /* Put fd in a queue */ + queued_fds->fds[queued_fds->offset++] = fd; + + return 0; +} + + +#if defined(__PASE__) +/* on IBMi PASE the control message length can not exceed 256. */ +# define UV__CMSG_FD_COUNT 60 +#else +# define UV__CMSG_FD_COUNT 64 +#endif +#define UV__CMSG_FD_SIZE (UV__CMSG_FD_COUNT * sizeof(int)) + + +static int uv__stream_recv_cmsg(uv_stream_t* stream, struct msghdr* msg) { + struct cmsghdr* cmsg; + + for (cmsg = CMSG_FIRSTHDR(msg); cmsg != NULL; cmsg = CMSG_NXTHDR(msg, cmsg)) { + char* start; + char* end; + int err; + void* pv; + int* pi; + unsigned int i; + unsigned int count; + + if (cmsg->cmsg_type != SCM_RIGHTS) { + fprintf(stderr, "ignoring non-SCM_RIGHTS ancillary data: %d\n", + cmsg->cmsg_type); + continue; + } + + /* silence aliasing warning */ + pv = CMSG_DATA(cmsg); + pi = pv; + + /* Count available fds */ + start = (char*) cmsg; + end = (char*) cmsg + cmsg->cmsg_len; + count = 0; + while (start + CMSG_LEN(count * sizeof(*pi)) < end) + count++; + assert(start + CMSG_LEN(count * sizeof(*pi)) == end); + + for (i = 0; i < count; i++) { + /* Already has accepted fd, queue now */ + if (stream->accepted_fd != -1) { + err = uv__stream_queue_fd(stream, pi[i]); + if (err != 0) { + /* Close rest */ + for (; i < count; i++) + uv__close(pi[i]); + return err; + } + } else { + stream->accepted_fd = pi[i]; + } + } + } + + return 0; +} + + +#ifdef __clang__ +# pragma clang diagnostic push +# pragma clang diagnostic ignored "-Wgnu-folding-constant" +# pragma clang diagnostic ignored "-Wvla-extension" +#endif + +static void uv__read(uv_stream_t* stream) { + uv_buf_t buf; + ssize_t nread; + struct msghdr msg; + char cmsg_space[CMSG_SPACE(UV__CMSG_FD_SIZE)]; + int count; + int err; + int is_ipc; + + stream->flags &= ~UV_HANDLE_READ_PARTIAL; + + /* Prevent loop starvation when the data comes in as fast as (or faster than) + * we can read it. XXX Need to rearm fd if we switch to edge-triggered I/O. + */ + count = 32; + + is_ipc = stream->type == UV_NAMED_PIPE && ((uv_pipe_t*) stream)->ipc; + + /* XXX: Maybe instead of having UV_HANDLE_READING we just test if + * tcp->read_cb is NULL or not? + */ + while (stream->read_cb + && (stream->flags & UV_HANDLE_READING) + && (count-- > 0)) { + assert(stream->alloc_cb != NULL); + + buf = uv_buf_init(NULL, 0); + stream->alloc_cb((uv_handle_t*)stream, 64 * 1024, &buf); + if (buf.base == NULL || buf.len == 0) { + /* User indicates it can't or won't handle the read. */ + stream->read_cb(stream, UV_ENOBUFS, &buf); + return; + } + + assert(buf.base != NULL); + assert(uv__stream_fd(stream) >= 0); + + if (!is_ipc) { + do { + nread = read(uv__stream_fd(stream), buf.base, buf.len); + } + while (nread < 0 && errno == EINTR); + } else { + /* ipc uses recvmsg */ + msg.msg_flags = 0; + msg.msg_iov = (struct iovec*) &buf; + msg.msg_iovlen = 1; + msg.msg_name = NULL; + msg.msg_namelen = 0; + /* Set up to receive a descriptor even if one isn't in the message */ + msg.msg_controllen = sizeof(cmsg_space); + msg.msg_control = cmsg_space; + + do { + nread = uv__recvmsg(uv__stream_fd(stream), &msg, 0); + } + while (nread < 0 && errno == EINTR); + } + + if (nread < 0) { + /* Error */ + if (errno == EAGAIN || errno == EWOULDBLOCK) { + /* Wait for the next one. */ + if (stream->flags & UV_HANDLE_READING) { + uv__io_start(stream->loop, &stream->io_watcher, POLLIN); + uv__stream_osx_interrupt_select(stream); + } + stream->read_cb(stream, 0, &buf); +#if defined(__CYGWIN__) || defined(__MSYS__) + } else if (errno == ECONNRESET && stream->type == UV_NAMED_PIPE) { + uv__stream_eof(stream, &buf); + return; +#endif + } else { + /* Error. User should call uv_close(). */ + stream->read_cb(stream, UV__ERR(errno), &buf); + if (stream->flags & UV_HANDLE_READING) { + stream->flags &= ~UV_HANDLE_READING; + uv__io_stop(stream->loop, &stream->io_watcher, POLLIN); + if (!uv__io_active(&stream->io_watcher, POLLOUT)) + uv__handle_stop(stream); + uv__stream_osx_interrupt_select(stream); + } + } + return; + } else if (nread == 0) { + uv__stream_eof(stream, &buf); + return; + } else { + /* Successful read */ + ssize_t buflen = buf.len; + + if (is_ipc) { + err = uv__stream_recv_cmsg(stream, &msg); + if (err != 0) { + stream->read_cb(stream, err, &buf); + return; + } + } + +#if defined(__MVS__) + if (is_ipc && msg.msg_controllen > 0) { + uv_buf_t blankbuf; + int nread; + struct iovec *old; + + blankbuf.base = 0; + blankbuf.len = 0; + old = msg.msg_iov; + msg.msg_iov = (struct iovec*) &blankbuf; + nread = 0; + do { + nread = uv__recvmsg(uv__stream_fd(stream), &msg, 0); + err = uv__stream_recv_cmsg(stream, &msg); + if (err != 0) { + stream->read_cb(stream, err, &buf); + msg.msg_iov = old; + return; + } + } while (nread == 0 && msg.msg_controllen > 0); + msg.msg_iov = old; + } +#endif + stream->read_cb(stream, nread, &buf); + + /* Return if we didn't fill the buffer, there is no more data to read. */ + if (nread < buflen) { + stream->flags |= UV_HANDLE_READ_PARTIAL; + return; + } + } + } +} + + +#ifdef __clang__ +# pragma clang diagnostic pop +#endif + +#undef UV__CMSG_FD_COUNT +#undef UV__CMSG_FD_SIZE + + +int uv_shutdown(uv_shutdown_t* req, uv_stream_t* stream, uv_shutdown_cb cb) { + assert(stream->type == UV_TCP || + stream->type == UV_TTY || + stream->type == UV_NAMED_PIPE); + + if (!(stream->flags & UV_HANDLE_WRITABLE) || + stream->flags & UV_HANDLE_SHUT || + stream->flags & UV_HANDLE_SHUTTING || + uv__is_closing(stream)) { + return UV_ENOTCONN; + } + + assert(uv__stream_fd(stream) >= 0); + + /* Initialize request */ + uv__req_init(stream->loop, req, UV_SHUTDOWN); + req->handle = stream; + req->cb = cb; + stream->shutdown_req = req; + stream->flags |= UV_HANDLE_SHUTTING; + + uv__io_start(stream->loop, &stream->io_watcher, POLLOUT); + uv__stream_osx_interrupt_select(stream); + + return 0; +} + + +static void uv__stream_io(uv_loop_t* loop, uv__io_t* w, unsigned int events) { + uv_stream_t* stream; + + stream = container_of(w, uv_stream_t, io_watcher); + + assert(stream->type == UV_TCP || + stream->type == UV_NAMED_PIPE || + stream->type == UV_TTY); + assert(!(stream->flags & UV_HANDLE_CLOSING)); + + if (stream->connect_req) { + uv__stream_connect(stream); + return; + } + + assert(uv__stream_fd(stream) >= 0); + + /* Ignore POLLHUP here. Even if it's set, there may still be data to read. */ + if (events & (POLLIN | POLLERR | POLLHUP)) + uv__read(stream); + + if (uv__stream_fd(stream) == -1) + return; /* read_cb closed stream. */ + + /* Short-circuit iff POLLHUP is set, the user is still interested in read + * events and uv__read() reported a partial read but not EOF. If the EOF + * flag is set, uv__read() called read_cb with err=UV_EOF and we don't + * have to do anything. If the partial read flag is not set, we can't + * report the EOF yet because there is still data to read. + */ + if ((events & POLLHUP) && + (stream->flags & UV_HANDLE_READING) && + (stream->flags & UV_HANDLE_READ_PARTIAL) && + !(stream->flags & UV_HANDLE_READ_EOF)) { + uv_buf_t buf = { NULL, 0 }; + uv__stream_eof(stream, &buf); + } + + if (uv__stream_fd(stream) == -1) + return; /* read_cb closed stream. */ + + if (events & (POLLOUT | POLLERR | POLLHUP)) { + uv__write(stream); + uv__write_callbacks(stream); + + /* Write queue drained. */ + if (QUEUE_EMPTY(&stream->write_queue)) + uv__drain(stream); + } +} + + +/** + * We get called here from directly following a call to connect(2). + * In order to determine if we've errored out or succeeded must call + * getsockopt. + */ +static void uv__stream_connect(uv_stream_t* stream) { + int error; + uv_connect_t* req = stream->connect_req; + socklen_t errorsize = sizeof(int); + + assert(stream->type == UV_TCP || stream->type == UV_NAMED_PIPE); + assert(req); + + if (stream->delayed_error) { + /* To smooth over the differences between unixes errors that + * were reported synchronously on the first connect can be delayed + * until the next tick--which is now. + */ + error = stream->delayed_error; + stream->delayed_error = 0; + } else { + /* Normal situation: we need to get the socket error from the kernel. */ + assert(uv__stream_fd(stream) >= 0); + getsockopt(uv__stream_fd(stream), + SOL_SOCKET, + SO_ERROR, + &error, + &errorsize); + error = UV__ERR(error); + } + + if (error == UV__ERR(EINPROGRESS)) + return; + + stream->connect_req = NULL; + uv__req_unregister(stream->loop, req); + + if (error < 0 || QUEUE_EMPTY(&stream->write_queue)) { + uv__io_stop(stream->loop, &stream->io_watcher, POLLOUT); + } + + if (req->cb) + req->cb(req, error); + + if (uv__stream_fd(stream) == -1) + return; + + if (error < 0) { + uv__stream_flush_write_queue(stream, UV_ECANCELED); + uv__write_callbacks(stream); + } +} + + +int uv_write2(uv_write_t* req, + uv_stream_t* stream, + const uv_buf_t bufs[], + unsigned int nbufs, + uv_stream_t* send_handle, + uv_write_cb cb) { + int empty_queue; + + assert(nbufs > 0); + assert((stream->type == UV_TCP || + stream->type == UV_NAMED_PIPE || + stream->type == UV_TTY) && + "uv_write (unix) does not yet support other types of streams"); + + if (uv__stream_fd(stream) < 0) + return UV_EBADF; + + if (!(stream->flags & UV_HANDLE_WRITABLE)) + return UV_EPIPE; + + if (send_handle) { + if (stream->type != UV_NAMED_PIPE || !((uv_pipe_t*)stream)->ipc) + return UV_EINVAL; + + /* XXX We abuse uv_write2() to send over UDP handles to child processes. + * Don't call uv__stream_fd() on those handles, it's a macro that on OS X + * evaluates to a function that operates on a uv_stream_t with a couple of + * OS X specific fields. On other Unices it does (handle)->io_watcher.fd, + * which works but only by accident. + */ + if (uv__handle_fd((uv_handle_t*) send_handle) < 0) + return UV_EBADF; + +#if defined(__CYGWIN__) || defined(__MSYS__) + /* Cygwin recvmsg always sets msg_controllen to zero, so we cannot send it. + See https://github.com/mirror/newlib-cygwin/blob/86fc4bf0/winsup/cygwin/fhandler_socket.cc#L1736-L1743 */ + return UV_ENOSYS; +#endif + } + + /* It's legal for write_queue_size > 0 even when the write_queue is empty; + * it means there are error-state requests in the write_completed_queue that + * will touch up write_queue_size later, see also uv__write_req_finish(). + * We could check that write_queue is empty instead but that implies making + * a write() syscall when we know that the handle is in error mode. + */ + empty_queue = (stream->write_queue_size == 0); + + /* Initialize the req */ + uv__req_init(stream->loop, req, UV_WRITE); + req->cb = cb; + req->handle = stream; + req->error = 0; + req->send_handle = send_handle; + QUEUE_INIT(&req->queue); + + req->bufs = req->bufsml; + if (nbufs > ARRAY_SIZE(req->bufsml)) + req->bufs = uv__malloc(nbufs * sizeof(bufs[0])); + + if (req->bufs == NULL) + return UV_ENOMEM; + + memcpy(req->bufs, bufs, nbufs * sizeof(bufs[0])); + req->nbufs = nbufs; + req->write_index = 0; + stream->write_queue_size += uv__count_bufs(bufs, nbufs); + + /* Append the request to write_queue. */ + QUEUE_INSERT_TAIL(&stream->write_queue, &req->queue); + + /* If the queue was empty when this function began, we should attempt to + * do the write immediately. Otherwise start the write_watcher and wait + * for the fd to become writable. + */ + if (stream->connect_req) { + /* Still connecting, do nothing. */ + } + else if (empty_queue) { + uv__write(stream); + } + else { + /* + * blocking streams should never have anything in the queue. + * if this assert fires then somehow the blocking stream isn't being + * sufficiently flushed in uv__write. + */ + assert(!(stream->flags & UV_HANDLE_BLOCKING_WRITES)); + uv__io_start(stream->loop, &stream->io_watcher, POLLOUT); + uv__stream_osx_interrupt_select(stream); + } + + return 0; +} + + +/* The buffers to be written must remain valid until the callback is called. + * This is not required for the uv_buf_t array. + */ +int uv_write(uv_write_t* req, + uv_stream_t* handle, + const uv_buf_t bufs[], + unsigned int nbufs, + uv_write_cb cb) { + return uv_write2(req, handle, bufs, nbufs, NULL, cb); +} + + +void uv_try_write_cb(uv_write_t* req, int status) { + /* Should not be called */ + abort(); +} + + +int uv_try_write(uv_stream_t* stream, + const uv_buf_t bufs[], + unsigned int nbufs) { + int r; + int has_pollout; + size_t written; + size_t req_size; + uv_write_t req; + + /* Connecting or already writing some data */ + if (stream->connect_req != NULL || stream->write_queue_size != 0) + return UV_EAGAIN; + + has_pollout = uv__io_active(&stream->io_watcher, POLLOUT); + + r = uv_write(&req, stream, bufs, nbufs, uv_try_write_cb); + if (r != 0) + return r; + + /* Remove not written bytes from write queue size */ + written = uv__count_bufs(bufs, nbufs); + if (req.bufs != NULL) + req_size = uv__write_req_size(&req); + else + req_size = 0; + written -= req_size; + stream->write_queue_size -= req_size; + + /* Unqueue request, regardless of immediateness */ + QUEUE_REMOVE(&req.queue); + uv__req_unregister(stream->loop, &req); + if (req.bufs != req.bufsml) + uv__free(req.bufs); + req.bufs = NULL; + + /* Do not poll for writable, if we wasn't before calling this */ + if (!has_pollout) { + uv__io_stop(stream->loop, &stream->io_watcher, POLLOUT); + uv__stream_osx_interrupt_select(stream); + } + + if (written == 0 && req_size != 0) + return req.error < 0 ? req.error : UV_EAGAIN; + else + return written; +} + + +int uv_read_start(uv_stream_t* stream, + uv_alloc_cb alloc_cb, + uv_read_cb read_cb) { + assert(stream->type == UV_TCP || stream->type == UV_NAMED_PIPE || + stream->type == UV_TTY); + + if (stream->flags & UV_HANDLE_CLOSING) + return UV_EINVAL; + + if (!(stream->flags & UV_HANDLE_READABLE)) + return UV_ENOTCONN; + + /* The UV_HANDLE_READING flag is irrelevant of the state of the tcp - it just + * expresses the desired state of the user. + */ + stream->flags |= UV_HANDLE_READING; + + /* TODO: try to do the read inline? */ + /* TODO: keep track of tcp state. If we've gotten a EOF then we should + * not start the IO watcher. + */ + assert(uv__stream_fd(stream) >= 0); + assert(alloc_cb); + + stream->read_cb = read_cb; + stream->alloc_cb = alloc_cb; + + uv__io_start(stream->loop, &stream->io_watcher, POLLIN); + uv__handle_start(stream); + uv__stream_osx_interrupt_select(stream); + + return 0; +} + + +int uv_read_stop(uv_stream_t* stream) { + if (!(stream->flags & UV_HANDLE_READING)) + return 0; + + stream->flags &= ~UV_HANDLE_READING; + uv__io_stop(stream->loop, &stream->io_watcher, POLLIN); + if (!uv__io_active(&stream->io_watcher, POLLOUT)) + uv__handle_stop(stream); + uv__stream_osx_interrupt_select(stream); + + stream->read_cb = NULL; + stream->alloc_cb = NULL; + return 0; +} + + +int uv_is_readable(const uv_stream_t* stream) { + return !!(stream->flags & UV_HANDLE_READABLE); +} + + +int uv_is_writable(const uv_stream_t* stream) { + return !!(stream->flags & UV_HANDLE_WRITABLE); +} + + +#if defined(__APPLE__) +int uv___stream_fd(const uv_stream_t* handle) { + const uv__stream_select_t* s; + + assert(handle->type == UV_TCP || + handle->type == UV_TTY || + handle->type == UV_NAMED_PIPE); + + s = handle->select; + if (s != NULL) + return s->fd; + + return handle->io_watcher.fd; +} +#endif /* defined(__APPLE__) */ + + +void uv__stream_close(uv_stream_t* handle) { + unsigned int i; + uv__stream_queued_fds_t* queued_fds; + +#if defined(__APPLE__) + /* Terminate select loop first */ + if (handle->select != NULL) { + uv__stream_select_t* s; + + s = handle->select; + + uv_sem_post(&s->close_sem); + uv_sem_post(&s->async_sem); + uv__stream_osx_interrupt_select(handle); + uv_thread_join(&s->thread); + uv_sem_destroy(&s->close_sem); + uv_sem_destroy(&s->async_sem); + uv__close(s->fake_fd); + uv__close(s->int_fd); + uv_close((uv_handle_t*) &s->async, uv__stream_osx_cb_close); + + handle->select = NULL; + } +#endif /* defined(__APPLE__) */ + + uv__io_close(handle->loop, &handle->io_watcher); + uv_read_stop(handle); + uv__handle_stop(handle); + handle->flags &= ~(UV_HANDLE_READABLE | UV_HANDLE_WRITABLE); + + if (handle->io_watcher.fd != -1) { + /* Don't close stdio file descriptors. Nothing good comes from it. */ + if (handle->io_watcher.fd > STDERR_FILENO) + uv__close(handle->io_watcher.fd); + handle->io_watcher.fd = -1; + } + + if (handle->accepted_fd != -1) { + uv__close(handle->accepted_fd); + handle->accepted_fd = -1; + } + + /* Close all queued fds */ + if (handle->queued_fds != NULL) { + queued_fds = handle->queued_fds; + for (i = 0; i < queued_fds->offset; i++) + uv__close(queued_fds->fds[i]); + uv__free(handle->queued_fds); + handle->queued_fds = NULL; + } + + assert(!uv__io_active(&handle->io_watcher, POLLIN | POLLOUT)); +} + + +int uv_stream_set_blocking(uv_stream_t* handle, int blocking) { + /* Don't need to check the file descriptor, uv__nonblock() + * will fail with EBADF if it's not valid. + */ + return uv__nonblock(uv__stream_fd(handle), !blocking); +} diff --git a/external/libuv/src/unix/sunos.c b/external/libuv/src/unix/sunos.c new file mode 100644 index 000000000..180cc8465 --- /dev/null +++ b/external/libuv/src/unix/sunos.c @@ -0,0 +1,836 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#include "uv.h" +#include "internal.h" + +#include +#include +#include +#include +#include +#include + +#ifndef SUNOS_NO_IFADDRS +# include +#endif +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include +#include + +#define PORT_FIRED 0x69 +#define PORT_UNUSED 0x0 +#define PORT_LOADED 0x99 +#define PORT_DELETED -1 + +#if (!defined(_LP64)) && (_FILE_OFFSET_BITS - 0 == 64) +#define PROCFS_FILE_OFFSET_BITS_HACK 1 +#undef _FILE_OFFSET_BITS +#else +#define PROCFS_FILE_OFFSET_BITS_HACK 0 +#endif + +#include + +#if (PROCFS_FILE_OFFSET_BITS_HACK - 0 == 1) +#define _FILE_OFFSET_BITS 64 +#endif + + +int uv__platform_loop_init(uv_loop_t* loop) { + int err; + int fd; + + loop->fs_fd = -1; + loop->backend_fd = -1; + + fd = port_create(); + if (fd == -1) + return UV__ERR(errno); + + err = uv__cloexec(fd, 1); + if (err) { + uv__close(fd); + return err; + } + loop->backend_fd = fd; + + return 0; +} + + +void uv__platform_loop_delete(uv_loop_t* loop) { + if (loop->fs_fd != -1) { + uv__close(loop->fs_fd); + loop->fs_fd = -1; + } + + if (loop->backend_fd != -1) { + uv__close(loop->backend_fd); + loop->backend_fd = -1; + } +} + + +int uv__io_fork(uv_loop_t* loop) { +#if defined(PORT_SOURCE_FILE) + if (loop->fs_fd != -1) { + /* stop the watcher before we blow away its fileno */ + uv__io_stop(loop, &loop->fs_event_watcher, POLLIN); + } +#endif + uv__platform_loop_delete(loop); + return uv__platform_loop_init(loop); +} + + +void uv__platform_invalidate_fd(uv_loop_t* loop, int fd) { + struct port_event* events; + uintptr_t i; + uintptr_t nfds; + + assert(loop->watchers != NULL); + assert(fd >= 0); + + events = (struct port_event*) loop->watchers[loop->nwatchers]; + nfds = (uintptr_t) loop->watchers[loop->nwatchers + 1]; + if (events == NULL) + return; + + /* Invalidate events with same file descriptor */ + for (i = 0; i < nfds; i++) + if ((int) events[i].portev_object == fd) + events[i].portev_object = -1; +} + + +int uv__io_check_fd(uv_loop_t* loop, int fd) { + if (port_associate(loop->backend_fd, PORT_SOURCE_FD, fd, POLLIN, 0)) + return UV__ERR(errno); + + if (port_dissociate(loop->backend_fd, PORT_SOURCE_FD, fd)) { + perror("(libuv) port_dissociate()"); + abort(); + } + + return 0; +} + + +void uv__io_poll(uv_loop_t* loop, int timeout) { + struct port_event events[1024]; + struct port_event* pe; + struct timespec spec; + QUEUE* q; + uv__io_t* w; + sigset_t* pset; + sigset_t set; + uint64_t base; + uint64_t diff; + unsigned int nfds; + unsigned int i; + int saved_errno; + int have_signals; + int nevents; + int count; + int err; + int fd; + + if (loop->nfds == 0) { + assert(QUEUE_EMPTY(&loop->watcher_queue)); + return; + } + + while (!QUEUE_EMPTY(&loop->watcher_queue)) { + q = QUEUE_HEAD(&loop->watcher_queue); + QUEUE_REMOVE(q); + QUEUE_INIT(q); + + w = QUEUE_DATA(q, uv__io_t, watcher_queue); + assert(w->pevents != 0); + + if (port_associate(loop->backend_fd, + PORT_SOURCE_FD, + w->fd, + w->pevents, + 0)) { + perror("(libuv) port_associate()"); + abort(); + } + + w->events = w->pevents; + } + + pset = NULL; + if (loop->flags & UV_LOOP_BLOCK_SIGPROF) { + pset = &set; + sigemptyset(pset); + sigaddset(pset, SIGPROF); + } + + assert(timeout >= -1); + base = loop->time; + count = 48; /* Benchmarks suggest this gives the best throughput. */ + + for (;;) { + if (timeout != -1) { + spec.tv_sec = timeout / 1000; + spec.tv_nsec = (timeout % 1000) * 1000000; + } + + /* Work around a kernel bug where nfds is not updated. */ + events[0].portev_source = 0; + + nfds = 1; + saved_errno = 0; + + if (pset != NULL) + pthread_sigmask(SIG_BLOCK, pset, NULL); + + err = port_getn(loop->backend_fd, + events, + ARRAY_SIZE(events), + &nfds, + timeout == -1 ? NULL : &spec); + + if (pset != NULL) + pthread_sigmask(SIG_UNBLOCK, pset, NULL); + + if (err) { + /* Work around another kernel bug: port_getn() may return events even + * on error. + */ + if (errno == EINTR || errno == ETIME) { + saved_errno = errno; + } else { + perror("(libuv) port_getn()"); + abort(); + } + } + + /* Update loop->time unconditionally. It's tempting to skip the update when + * timeout == 0 (i.e. non-blocking poll) but there is no guarantee that the + * operating system didn't reschedule our process while in the syscall. + */ + SAVE_ERRNO(uv__update_time(loop)); + + if (events[0].portev_source == 0) { + if (timeout == 0) + return; + + if (timeout == -1) + continue; + + goto update_timeout; + } + + if (nfds == 0) { + assert(timeout != -1); + return; + } + + have_signals = 0; + nevents = 0; + + assert(loop->watchers != NULL); + loop->watchers[loop->nwatchers] = (void*) events; + loop->watchers[loop->nwatchers + 1] = (void*) (uintptr_t) nfds; + for (i = 0; i < nfds; i++) { + pe = events + i; + fd = pe->portev_object; + + /* Skip invalidated events, see uv__platform_invalidate_fd */ + if (fd == -1) + continue; + + assert(fd >= 0); + assert((unsigned) fd < loop->nwatchers); + + w = loop->watchers[fd]; + + /* File descriptor that we've stopped watching, ignore. */ + if (w == NULL) + continue; + + /* Run signal watchers last. This also affects child process watchers + * because those are implemented in terms of signal watchers. + */ + if (w == &loop->signal_io_watcher) + have_signals = 1; + else + w->cb(loop, w, pe->portev_events); + + nevents++; + + if (w != loop->watchers[fd]) + continue; /* Disabled by callback. */ + + /* Events Ports operates in oneshot mode, rearm timer on next run. */ + if (w->pevents != 0 && QUEUE_EMPTY(&w->watcher_queue)) + QUEUE_INSERT_TAIL(&loop->watcher_queue, &w->watcher_queue); + } + + if (have_signals != 0) + loop->signal_io_watcher.cb(loop, &loop->signal_io_watcher, POLLIN); + + loop->watchers[loop->nwatchers] = NULL; + loop->watchers[loop->nwatchers + 1] = NULL; + + if (have_signals != 0) + return; /* Event loop should cycle now so don't poll again. */ + + if (nevents != 0) { + if (nfds == ARRAY_SIZE(events) && --count != 0) { + /* Poll for more events but don't block this time. */ + timeout = 0; + continue; + } + return; + } + + if (saved_errno == ETIME) { + assert(timeout != -1); + return; + } + + if (timeout == 0) + return; + + if (timeout == -1) + continue; + +update_timeout: + assert(timeout > 0); + + diff = loop->time - base; + if (diff >= (uint64_t) timeout) + return; + + timeout -= diff; + } +} + + +uint64_t uv__hrtime(uv_clocktype_t type) { + return gethrtime(); +} + + +/* + * We could use a static buffer for the path manipulations that we need outside + * of the function, but this function could be called by multiple consumers and + * we don't want to potentially create a race condition in the use of snprintf. + */ +int uv_exepath(char* buffer, size_t* size) { + ssize_t res; + char buf[128]; + + if (buffer == NULL || size == NULL || *size == 0) + return UV_EINVAL; + + snprintf(buf, sizeof(buf), "/proc/%lu/path/a.out", (unsigned long) getpid()); + + res = *size - 1; + if (res > 0) + res = readlink(buf, buffer, res); + + if (res == -1) + return UV__ERR(errno); + + buffer[res] = '\0'; + *size = res; + return 0; +} + + +uint64_t uv_get_free_memory(void) { + return (uint64_t) sysconf(_SC_PAGESIZE) * sysconf(_SC_AVPHYS_PAGES); +} + + +uint64_t uv_get_total_memory(void) { + return (uint64_t) sysconf(_SC_PAGESIZE) * sysconf(_SC_PHYS_PAGES); +} + + +uint64_t uv_get_constrained_memory(void) { + return 0; /* Memory constraints are unknown. */ +} + + +void uv_loadavg(double avg[3]) { + (void) getloadavg(avg, 3); +} + + +#if defined(PORT_SOURCE_FILE) + +static int uv__fs_event_rearm(uv_fs_event_t *handle) { + if (handle->fd == -1) + return UV_EBADF; + + if (port_associate(handle->loop->fs_fd, + PORT_SOURCE_FILE, + (uintptr_t) &handle->fo, + FILE_ATTRIB | FILE_MODIFIED, + handle) == -1) { + return UV__ERR(errno); + } + handle->fd = PORT_LOADED; + + return 0; +} + + +static void uv__fs_event_read(uv_loop_t* loop, + uv__io_t* w, + unsigned int revents) { + uv_fs_event_t *handle = NULL; + timespec_t timeout; + port_event_t pe; + int events; + int r; + + (void) w; + (void) revents; + + do { + uint_t n = 1; + + /* + * Note that our use of port_getn() here (and not port_get()) is deliberate: + * there is a bug in event ports (Sun bug 6456558) whereby a zeroed timeout + * causes port_get() to return success instead of ETIME when there aren't + * actually any events (!); by using port_getn() in lieu of port_get(), + * we can at least workaround the bug by checking for zero returned events + * and treating it as we would ETIME. + */ + do { + memset(&timeout, 0, sizeof timeout); + r = port_getn(loop->fs_fd, &pe, 1, &n, &timeout); + } + while (r == -1 && errno == EINTR); + + if ((r == -1 && errno == ETIME) || n == 0) + break; + + handle = (uv_fs_event_t*) pe.portev_user; + assert((r == 0) && "unexpected port_get() error"); + + events = 0; + if (pe.portev_events & (FILE_ATTRIB | FILE_MODIFIED)) + events |= UV_CHANGE; + if (pe.portev_events & ~(FILE_ATTRIB | FILE_MODIFIED)) + events |= UV_RENAME; + assert(events != 0); + handle->fd = PORT_FIRED; + handle->cb(handle, NULL, events, 0); + + if (handle->fd != PORT_DELETED) { + r = uv__fs_event_rearm(handle); + if (r != 0) + handle->cb(handle, NULL, 0, r); + } + } + while (handle->fd != PORT_DELETED); +} + + +int uv_fs_event_init(uv_loop_t* loop, uv_fs_event_t* handle) { + uv__handle_init(loop, (uv_handle_t*)handle, UV_FS_EVENT); + return 0; +} + + +int uv_fs_event_start(uv_fs_event_t* handle, + uv_fs_event_cb cb, + const char* path, + unsigned int flags) { + int portfd; + int first_run; + int err; + + if (uv__is_active(handle)) + return UV_EINVAL; + + first_run = 0; + if (handle->loop->fs_fd == -1) { + portfd = port_create(); + if (portfd == -1) + return UV__ERR(errno); + handle->loop->fs_fd = portfd; + first_run = 1; + } + + uv__handle_start(handle); + handle->path = uv__strdup(path); + handle->fd = PORT_UNUSED; + handle->cb = cb; + + memset(&handle->fo, 0, sizeof handle->fo); + handle->fo.fo_name = handle->path; + err = uv__fs_event_rearm(handle); + if (err != 0) { + uv_fs_event_stop(handle); + return err; + } + + if (first_run) { + uv__io_init(&handle->loop->fs_event_watcher, uv__fs_event_read, portfd); + uv__io_start(handle->loop, &handle->loop->fs_event_watcher, POLLIN); + } + + return 0; +} + + +int uv_fs_event_stop(uv_fs_event_t* handle) { + if (!uv__is_active(handle)) + return 0; + + if (handle->fd == PORT_FIRED || handle->fd == PORT_LOADED) { + port_dissociate(handle->loop->fs_fd, + PORT_SOURCE_FILE, + (uintptr_t) &handle->fo); + } + + handle->fd = PORT_DELETED; + uv__free(handle->path); + handle->path = NULL; + handle->fo.fo_name = NULL; + uv__handle_stop(handle); + + return 0; +} + +void uv__fs_event_close(uv_fs_event_t* handle) { + uv_fs_event_stop(handle); +} + +#else /* !defined(PORT_SOURCE_FILE) */ + +int uv_fs_event_init(uv_loop_t* loop, uv_fs_event_t* handle) { + return UV_ENOSYS; +} + + +int uv_fs_event_start(uv_fs_event_t* handle, + uv_fs_event_cb cb, + const char* filename, + unsigned int flags) { + return UV_ENOSYS; +} + + +int uv_fs_event_stop(uv_fs_event_t* handle) { + return UV_ENOSYS; +} + + +void uv__fs_event_close(uv_fs_event_t* handle) { + UNREACHABLE(); +} + +#endif /* defined(PORT_SOURCE_FILE) */ + + +int uv_resident_set_memory(size_t* rss) { + psinfo_t psinfo; + int err; + int fd; + + fd = open("/proc/self/psinfo", O_RDONLY); + if (fd == -1) + return UV__ERR(errno); + + /* FIXME(bnoordhuis) Handle EINTR. */ + err = UV_EINVAL; + if (read(fd, &psinfo, sizeof(psinfo)) == sizeof(psinfo)) { + *rss = (size_t)psinfo.pr_rssize * 1024; + err = 0; + } + uv__close(fd); + + return err; +} + + +int uv_uptime(double* uptime) { + kstat_ctl_t *kc; + kstat_t *ksp; + kstat_named_t *knp; + + long hz = sysconf(_SC_CLK_TCK); + + kc = kstat_open(); + if (kc == NULL) + return UV_EPERM; + + ksp = kstat_lookup(kc, (char*) "unix", 0, (char*) "system_misc"); + if (kstat_read(kc, ksp, NULL) == -1) { + *uptime = -1; + } else { + knp = (kstat_named_t*) kstat_data_lookup(ksp, (char*) "clk_intr"); + *uptime = knp->value.ul / hz; + } + kstat_close(kc); + + return 0; +} + + +int uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) { + int lookup_instance; + kstat_ctl_t *kc; + kstat_t *ksp; + kstat_named_t *knp; + uv_cpu_info_t* cpu_info; + + kc = kstat_open(); + if (kc == NULL) + return UV_EPERM; + + /* Get count of cpus */ + lookup_instance = 0; + while ((ksp = kstat_lookup(kc, (char*) "cpu_info", lookup_instance, NULL))) { + lookup_instance++; + } + + *cpu_infos = uv__malloc(lookup_instance * sizeof(**cpu_infos)); + if (!(*cpu_infos)) { + kstat_close(kc); + return UV_ENOMEM; + } + + *count = lookup_instance; + + cpu_info = *cpu_infos; + lookup_instance = 0; + while ((ksp = kstat_lookup(kc, (char*) "cpu_info", lookup_instance, NULL))) { + if (kstat_read(kc, ksp, NULL) == -1) { + cpu_info->speed = 0; + cpu_info->model = NULL; + } else { + knp = kstat_data_lookup(ksp, (char*) "clock_MHz"); + assert(knp->data_type == KSTAT_DATA_INT32 || + knp->data_type == KSTAT_DATA_INT64); + cpu_info->speed = (knp->data_type == KSTAT_DATA_INT32) ? knp->value.i32 + : knp->value.i64; + + knp = kstat_data_lookup(ksp, (char*) "brand"); + assert(knp->data_type == KSTAT_DATA_STRING); + cpu_info->model = uv__strdup(KSTAT_NAMED_STR_PTR(knp)); + } + + lookup_instance++; + cpu_info++; + } + + cpu_info = *cpu_infos; + lookup_instance = 0; + for (;;) { + ksp = kstat_lookup(kc, (char*) "cpu", lookup_instance, (char*) "sys"); + + if (ksp == NULL) + break; + + if (kstat_read(kc, ksp, NULL) == -1) { + cpu_info->cpu_times.user = 0; + cpu_info->cpu_times.nice = 0; + cpu_info->cpu_times.sys = 0; + cpu_info->cpu_times.idle = 0; + cpu_info->cpu_times.irq = 0; + } else { + knp = kstat_data_lookup(ksp, (char*) "cpu_ticks_user"); + assert(knp->data_type == KSTAT_DATA_UINT64); + cpu_info->cpu_times.user = knp->value.ui64; + + knp = kstat_data_lookup(ksp, (char*) "cpu_ticks_kernel"); + assert(knp->data_type == KSTAT_DATA_UINT64); + cpu_info->cpu_times.sys = knp->value.ui64; + + knp = kstat_data_lookup(ksp, (char*) "cpu_ticks_idle"); + assert(knp->data_type == KSTAT_DATA_UINT64); + cpu_info->cpu_times.idle = knp->value.ui64; + + knp = kstat_data_lookup(ksp, (char*) "intr"); + assert(knp->data_type == KSTAT_DATA_UINT64); + cpu_info->cpu_times.irq = knp->value.ui64; + cpu_info->cpu_times.nice = 0; + } + + lookup_instance++; + cpu_info++; + } + + kstat_close(kc); + + return 0; +} + + +#ifdef SUNOS_NO_IFADDRS +int uv_interface_addresses(uv_interface_address_t** addresses, int* count) { + *count = 0; + *addresses = NULL; + return UV_ENOSYS; +} +#else /* SUNOS_NO_IFADDRS */ +/* + * Inspired By: + * https://blogs.oracle.com/paulie/entry/retrieving_mac_address_in_solaris + * http://www.pauliesworld.org/project/getmac.c + */ +static int uv__set_phys_addr(uv_interface_address_t* address, + struct ifaddrs* ent) { + + struct sockaddr_dl* sa_addr; + int sockfd; + size_t i; + struct arpreq arpreq; + + /* This appears to only work as root */ + sa_addr = (struct sockaddr_dl*)(ent->ifa_addr); + memcpy(address->phys_addr, LLADDR(sa_addr), sizeof(address->phys_addr)); + for (i = 0; i < sizeof(address->phys_addr); i++) { + /* Check that all bytes of phys_addr are zero. */ + if (address->phys_addr[i] != 0) + return 0; + } + memset(&arpreq, 0, sizeof(arpreq)); + if (address->address.address4.sin_family == AF_INET) { + struct sockaddr_in* sin = ((struct sockaddr_in*)&arpreq.arp_pa); + sin->sin_addr.s_addr = address->address.address4.sin_addr.s_addr; + } else if (address->address.address4.sin_family == AF_INET6) { + struct sockaddr_in6* sin = ((struct sockaddr_in6*)&arpreq.arp_pa); + memcpy(sin->sin6_addr.s6_addr, + address->address.address6.sin6_addr.s6_addr, + sizeof(address->address.address6.sin6_addr.s6_addr)); + } else { + return 0; + } + + sockfd = socket(AF_INET, SOCK_DGRAM, 0); + if (sockfd < 0) + return UV__ERR(errno); + + if (ioctl(sockfd, SIOCGARP, (char*)&arpreq) == -1) { + uv__close(sockfd); + return UV__ERR(errno); + } + memcpy(address->phys_addr, arpreq.arp_ha.sa_data, sizeof(address->phys_addr)); + uv__close(sockfd); + return 0; +} + + +static int uv__ifaddr_exclude(struct ifaddrs *ent) { + if (!((ent->ifa_flags & IFF_UP) && (ent->ifa_flags & IFF_RUNNING))) + return 1; + if (ent->ifa_addr == NULL) + return 1; + if (ent->ifa_addr->sa_family != AF_INET && + ent->ifa_addr->sa_family != AF_INET6) + return 1; + return 0; +} + +int uv_interface_addresses(uv_interface_address_t** addresses, int* count) { + uv_interface_address_t* address; + struct ifaddrs* addrs; + struct ifaddrs* ent; + + *count = 0; + *addresses = NULL; + + if (getifaddrs(&addrs)) + return UV__ERR(errno); + + /* Count the number of interfaces */ + for (ent = addrs; ent != NULL; ent = ent->ifa_next) { + if (uv__ifaddr_exclude(ent)) + continue; + (*count)++; + } + + if (*count == 0) { + freeifaddrs(addrs); + return 0; + } + + *addresses = uv__malloc(*count * sizeof(**addresses)); + if (!(*addresses)) { + freeifaddrs(addrs); + return UV_ENOMEM; + } + + address = *addresses; + + for (ent = addrs; ent != NULL; ent = ent->ifa_next) { + if (uv__ifaddr_exclude(ent)) + continue; + + address->name = uv__strdup(ent->ifa_name); + + if (ent->ifa_addr->sa_family == AF_INET6) { + address->address.address6 = *((struct sockaddr_in6*) ent->ifa_addr); + } else { + address->address.address4 = *((struct sockaddr_in*) ent->ifa_addr); + } + + if (ent->ifa_netmask->sa_family == AF_INET6) { + address->netmask.netmask6 = *((struct sockaddr_in6*) ent->ifa_netmask); + } else { + address->netmask.netmask4 = *((struct sockaddr_in*) ent->ifa_netmask); + } + + address->is_internal = !!((ent->ifa_flags & IFF_PRIVATE) || + (ent->ifa_flags & IFF_LOOPBACK)); + + uv__set_phys_addr(address, ent); + address++; + } + + freeifaddrs(addrs); + + return 0; +} +#endif /* SUNOS_NO_IFADDRS */ + +void uv_free_interface_addresses(uv_interface_address_t* addresses, + int count) { + int i; + + for (i = 0; i < count; i++) { + uv__free(addresses[i].name); + } + + uv__free(addresses); +} diff --git a/external/libuv/src/unix/sysinfo-loadavg.c b/external/libuv/src/unix/sysinfo-loadavg.c new file mode 100644 index 000000000..ebad0e89d --- /dev/null +++ b/external/libuv/src/unix/sysinfo-loadavg.c @@ -0,0 +1,36 @@ +/* Copyright libuv 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 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. + */ + +#include "uv.h" +#include "internal.h" + +#include +#include + +void uv_loadavg(double avg[3]) { + struct sysinfo info; + + if (sysinfo(&info) < 0) return; + + avg[0] = (double) info.loads[0] / 65536.0; + avg[1] = (double) info.loads[1] / 65536.0; + avg[2] = (double) info.loads[2] / 65536.0; +} diff --git a/external/libuv/src/unix/sysinfo-memory.c b/external/libuv/src/unix/sysinfo-memory.c new file mode 100644 index 000000000..23b4fc6e9 --- /dev/null +++ b/external/libuv/src/unix/sysinfo-memory.c @@ -0,0 +1,42 @@ +/* Copyright libuv 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 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. + */ + +#include "uv.h" +#include "internal.h" + +#include +#include + +uint64_t uv_get_free_memory(void) { + struct sysinfo info; + + if (sysinfo(&info) == 0) + return (uint64_t) info.freeram * info.mem_unit; + return 0; +} + +uint64_t uv_get_total_memory(void) { + struct sysinfo info; + + if (sysinfo(&info) == 0) + return (uint64_t) info.totalram * info.mem_unit; + return 0; +} diff --git a/external/libuv/src/unix/tcp.c b/external/libuv/src/unix/tcp.c new file mode 100644 index 000000000..d47e9433d --- /dev/null +++ b/external/libuv/src/unix/tcp.c @@ -0,0 +1,458 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#include "uv.h" +#include "internal.h" + +#include +#include +#include +#include + + +static int new_socket(uv_tcp_t* handle, int domain, unsigned long flags) { + struct sockaddr_storage saddr; + socklen_t slen; + int sockfd; + int err; + + err = uv__socket(domain, SOCK_STREAM, 0); + if (err < 0) + return err; + sockfd = err; + + err = uv__stream_open((uv_stream_t*) handle, sockfd, flags); + if (err) { + uv__close(sockfd); + return err; + } + + if (flags & UV_HANDLE_BOUND) { + /* Bind this new socket to an arbitrary port */ + slen = sizeof(saddr); + memset(&saddr, 0, sizeof(saddr)); + if (getsockname(uv__stream_fd(handle), (struct sockaddr*) &saddr, &slen)) { + uv__close(sockfd); + return UV__ERR(errno); + } + + if (bind(uv__stream_fd(handle), (struct sockaddr*) &saddr, slen)) { + uv__close(sockfd); + return UV__ERR(errno); + } + } + + return 0; +} + + +static int maybe_new_socket(uv_tcp_t* handle, int domain, unsigned long flags) { + struct sockaddr_storage saddr; + socklen_t slen; + + if (domain == AF_UNSPEC) { + handle->flags |= flags; + return 0; + } + + if (uv__stream_fd(handle) != -1) { + + if (flags & UV_HANDLE_BOUND) { + + if (handle->flags & UV_HANDLE_BOUND) { + /* It is already bound to a port. */ + handle->flags |= flags; + return 0; + } + + /* Query to see if tcp socket is bound. */ + slen = sizeof(saddr); + memset(&saddr, 0, sizeof(saddr)); + if (getsockname(uv__stream_fd(handle), (struct sockaddr*) &saddr, &slen)) + return UV__ERR(errno); + + if ((saddr.ss_family == AF_INET6 && + ((struct sockaddr_in6*) &saddr)->sin6_port != 0) || + (saddr.ss_family == AF_INET && + ((struct sockaddr_in*) &saddr)->sin_port != 0)) { + /* Handle is already bound to a port. */ + handle->flags |= flags; + return 0; + } + + /* Bind to arbitrary port */ + if (bind(uv__stream_fd(handle), (struct sockaddr*) &saddr, slen)) + return UV__ERR(errno); + } + + handle->flags |= flags; + return 0; + } + + return new_socket(handle, domain, flags); +} + + +int uv_tcp_init_ex(uv_loop_t* loop, uv_tcp_t* tcp, unsigned int flags) { + int domain; + + /* Use the lower 8 bits for the domain */ + domain = flags & 0xFF; + if (domain != AF_INET && domain != AF_INET6 && domain != AF_UNSPEC) + return UV_EINVAL; + + if (flags & ~0xFF) + return UV_EINVAL; + + uv__stream_init(loop, (uv_stream_t*)tcp, UV_TCP); + + /* If anything fails beyond this point we need to remove the handle from + * the handle queue, since it was added by uv__handle_init in uv_stream_init. + */ + + if (domain != AF_UNSPEC) { + int err = maybe_new_socket(tcp, domain, 0); + if (err) { + QUEUE_REMOVE(&tcp->handle_queue); + return err; + } + } + + return 0; +} + + +int uv_tcp_init(uv_loop_t* loop, uv_tcp_t* tcp) { + return uv_tcp_init_ex(loop, tcp, AF_UNSPEC); +} + + +int uv__tcp_bind(uv_tcp_t* tcp, + const struct sockaddr* addr, + unsigned int addrlen, + unsigned int flags) { + int err; + int on; + + /* Cannot set IPv6-only mode on non-IPv6 socket. */ + if ((flags & UV_TCP_IPV6ONLY) && addr->sa_family != AF_INET6) + return UV_EINVAL; + + err = maybe_new_socket(tcp, addr->sa_family, 0); + if (err) + return err; + + on = 1; + if (setsockopt(tcp->io_watcher.fd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on))) + return UV__ERR(errno); + +#ifndef __OpenBSD__ +#ifdef IPV6_V6ONLY + if (addr->sa_family == AF_INET6) { + on = (flags & UV_TCP_IPV6ONLY) != 0; + if (setsockopt(tcp->io_watcher.fd, + IPPROTO_IPV6, + IPV6_V6ONLY, + &on, + sizeof on) == -1) { +#if defined(__MVS__) + if (errno == EOPNOTSUPP) + return UV_EINVAL; +#endif + return UV__ERR(errno); + } + } +#endif +#endif + + errno = 0; + if (bind(tcp->io_watcher.fd, addr, addrlen) && errno != EADDRINUSE) { + if (errno == EAFNOSUPPORT) + /* OSX, other BSDs and SunoS fail with EAFNOSUPPORT when binding a + * socket created with AF_INET to an AF_INET6 address or vice versa. */ + return UV_EINVAL; + return UV__ERR(errno); + } + tcp->delayed_error = UV__ERR(errno); + + tcp->flags |= UV_HANDLE_BOUND; + if (addr->sa_family == AF_INET6) + tcp->flags |= UV_HANDLE_IPV6; + + return 0; +} + + +int uv__tcp_connect(uv_connect_t* req, + uv_tcp_t* handle, + const struct sockaddr* addr, + unsigned int addrlen, + uv_connect_cb cb) { + int err; + int r; + + assert(handle->type == UV_TCP); + + if (handle->connect_req != NULL) + return UV_EALREADY; /* FIXME(bnoordhuis) UV_EINVAL or maybe UV_EBUSY. */ + + err = maybe_new_socket(handle, + addr->sa_family, + UV_HANDLE_READABLE | UV_HANDLE_WRITABLE); + if (err) + return err; + + handle->delayed_error = 0; + + do { + errno = 0; + r = connect(uv__stream_fd(handle), addr, addrlen); + } while (r == -1 && errno == EINTR); + + /* We not only check the return value, but also check the errno != 0. + * Because in rare cases connect() will return -1 but the errno + * is 0 (for example, on Android 4.3, OnePlus phone A0001_12_150227) + * and actually the tcp three-way handshake is completed. + */ + if (r == -1 && errno != 0) { + if (errno == EINPROGRESS) + ; /* not an error */ + else if (errno == ECONNREFUSED +#if defined(__OpenBSD__) + || errno == EINVAL +#endif + ) + /* If we get ECONNREFUSED (Solaris) or EINVAL (OpenBSD) wait until the + * next tick to report the error. Solaris and OpenBSD wants to report + * immediately -- other unixes want to wait. + */ + handle->delayed_error = UV__ERR(ECONNREFUSED); + else + return UV__ERR(errno); + } + + uv__req_init(handle->loop, req, UV_CONNECT); + req->cb = cb; + req->handle = (uv_stream_t*) handle; + QUEUE_INIT(&req->queue); + handle->connect_req = req; + + uv__io_start(handle->loop, &handle->io_watcher, POLLOUT); + + if (handle->delayed_error) + uv__io_feed(handle->loop, &handle->io_watcher); + + return 0; +} + + +int uv_tcp_open(uv_tcp_t* handle, uv_os_sock_t sock) { + int err; + + if (uv__fd_exists(handle->loop, sock)) + return UV_EEXIST; + + err = uv__nonblock(sock, 1); + if (err) + return err; + + return uv__stream_open((uv_stream_t*)handle, + sock, + UV_HANDLE_READABLE | UV_HANDLE_WRITABLE); +} + + +int uv_tcp_getsockname(const uv_tcp_t* handle, + struct sockaddr* name, + int* namelen) { + + if (handle->delayed_error) + return handle->delayed_error; + + return uv__getsockpeername((const uv_handle_t*) handle, + getsockname, + name, + namelen); +} + + +int uv_tcp_getpeername(const uv_tcp_t* handle, + struct sockaddr* name, + int* namelen) { + + if (handle->delayed_error) + return handle->delayed_error; + + return uv__getsockpeername((const uv_handle_t*) handle, + getpeername, + name, + namelen); +} + + +int uv_tcp_close_reset(uv_tcp_t* handle, uv_close_cb close_cb) { + int fd; + struct linger l = { 1, 0 }; + + /* Disallow setting SO_LINGER to zero due to some platform inconsistencies */ + if (handle->flags & UV_HANDLE_SHUTTING) + return UV_EINVAL; + + fd = uv__stream_fd(handle); + if (0 != setsockopt(fd, SOL_SOCKET, SO_LINGER, &l, sizeof(l))) + return UV__ERR(errno); + + uv_close((uv_handle_t*) handle, close_cb); + return 0; +} + + +int uv_tcp_listen(uv_tcp_t* tcp, int backlog, uv_connection_cb cb) { + static int single_accept = -1; + unsigned long flags; + int err; + + if (tcp->delayed_error) + return tcp->delayed_error; + + if (single_accept == -1) { + const char* val = getenv("UV_TCP_SINGLE_ACCEPT"); + single_accept = (val != NULL && atoi(val) != 0); /* Off by default. */ + } + + if (single_accept) + tcp->flags |= UV_HANDLE_TCP_SINGLE_ACCEPT; + + flags = 0; +#if defined(__MVS__) + /* on zOS the listen call does not bind automatically + if the socket is unbound. Hence the manual binding to + an arbitrary port is required to be done manually + */ + flags |= UV_HANDLE_BOUND; +#endif + err = maybe_new_socket(tcp, AF_INET, flags); + if (err) + return err; + + if (listen(tcp->io_watcher.fd, backlog)) + return UV__ERR(errno); + + tcp->connection_cb = cb; + tcp->flags |= UV_HANDLE_BOUND; + + /* Start listening for connections. */ + tcp->io_watcher.cb = uv__server_io; + uv__io_start(tcp->loop, &tcp->io_watcher, POLLIN); + + return 0; +} + + +int uv__tcp_nodelay(int fd, int on) { + if (setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &on, sizeof(on))) + return UV__ERR(errno); + return 0; +} + + +int uv__tcp_keepalive(int fd, int on, unsigned int delay) { + if (setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, &on, sizeof(on))) + return UV__ERR(errno); + +#ifdef TCP_KEEPIDLE + if (on) { + int intvl = 1; /* 1 second; same as default on Win32 */ + int cnt = 10; /* 10 retries; same as hardcoded on Win32 */ + if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPIDLE, &delay, sizeof(delay))) + return UV__ERR(errno); + if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPINTVL, &intvl, sizeof(intvl))) + return UV__ERR(errno); + if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPCNT, &cnt, sizeof(cnt))) + return UV__ERR(errno); + } +#endif + + /* Solaris/SmartOS, if you don't support keep-alive, + * then don't advertise it in your system headers... + */ + /* FIXME(bnoordhuis) That's possibly because sizeof(delay) should be 1. */ +#if defined(TCP_KEEPALIVE) && !defined(__sun) + if (on && setsockopt(fd, IPPROTO_TCP, TCP_KEEPALIVE, &delay, sizeof(delay))) + return UV__ERR(errno); +#endif + + return 0; +} + + +int uv_tcp_nodelay(uv_tcp_t* handle, int on) { + int err; + + if (uv__stream_fd(handle) != -1) { + err = uv__tcp_nodelay(uv__stream_fd(handle), on); + if (err) + return err; + } + + if (on) + handle->flags |= UV_HANDLE_TCP_NODELAY; + else + handle->flags &= ~UV_HANDLE_TCP_NODELAY; + + return 0; +} + + +int uv_tcp_keepalive(uv_tcp_t* handle, int on, unsigned int delay) { + int err; + + if (uv__stream_fd(handle) != -1) { + err =uv__tcp_keepalive(uv__stream_fd(handle), on, delay); + if (err) + return err; + } + + if (on) + handle->flags |= UV_HANDLE_TCP_KEEPALIVE; + else + handle->flags &= ~UV_HANDLE_TCP_KEEPALIVE; + + /* TODO Store delay if uv__stream_fd(handle) == -1 but don't want to enlarge + * uv_tcp_t with an int that's almost never used... + */ + + return 0; +} + + +int uv_tcp_simultaneous_accepts(uv_tcp_t* handle, int enable) { + if (enable) + handle->flags &= ~UV_HANDLE_TCP_SINGLE_ACCEPT; + else + handle->flags |= UV_HANDLE_TCP_SINGLE_ACCEPT; + return 0; +} + + +void uv__tcp_close(uv_tcp_t* handle) { + uv__stream_close((uv_stream_t*)handle); +} diff --git a/external/libuv/src/unix/thread.c b/external/libuv/src/unix/thread.c new file mode 100644 index 000000000..c9a18d1e8 --- /dev/null +++ b/external/libuv/src/unix/thread.c @@ -0,0 +1,853 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#include "uv.h" +#include "internal.h" + +#include +#include +#include + +#include +#include /* getrlimit() */ +#include /* getpagesize() */ + +#include + +#ifdef __MVS__ +#include +#include +#endif + +#if defined(__GLIBC__) && !defined(__UCLIBC__) +#include /* gnu_get_libc_version() */ +#endif + +#undef NANOSEC +#define NANOSEC ((uint64_t) 1e9) + +#if defined(PTHREAD_BARRIER_SERIAL_THREAD) +STATIC_ASSERT(sizeof(uv_barrier_t) == sizeof(pthread_barrier_t)); +#endif + +/* Note: guard clauses should match uv_barrier_t's in include/uv/unix.h. */ +#if defined(_AIX) || \ + defined(__OpenBSD__) || \ + !defined(PTHREAD_BARRIER_SERIAL_THREAD) +int uv_barrier_init(uv_barrier_t* barrier, unsigned int count) { + struct _uv_barrier* b; + int rc; + + if (barrier == NULL || count == 0) + return UV_EINVAL; + + b = uv__malloc(sizeof(*b)); + if (b == NULL) + return UV_ENOMEM; + + b->in = 0; + b->out = 0; + b->threshold = count; + + rc = uv_mutex_init(&b->mutex); + if (rc != 0) + goto error2; + + rc = uv_cond_init(&b->cond); + if (rc != 0) + goto error; + + barrier->b = b; + return 0; + +error: + uv_mutex_destroy(&b->mutex); +error2: + uv__free(b); + return rc; +} + + +int uv_barrier_wait(uv_barrier_t* barrier) { + struct _uv_barrier* b; + int last; + + if (barrier == NULL || barrier->b == NULL) + return UV_EINVAL; + + b = barrier->b; + uv_mutex_lock(&b->mutex); + + if (++b->in == b->threshold) { + b->in = 0; + b->out = b->threshold; + uv_cond_signal(&b->cond); + } else { + do + uv_cond_wait(&b->cond, &b->mutex); + while (b->in != 0); + } + + last = (--b->out == 0); + if (!last) + uv_cond_signal(&b->cond); /* Not needed for last thread. */ + + uv_mutex_unlock(&b->mutex); + return last; +} + + +void uv_barrier_destroy(uv_barrier_t* barrier) { + struct _uv_barrier* b; + + b = barrier->b; + uv_mutex_lock(&b->mutex); + + assert(b->in == 0); + assert(b->out == 0); + + if (b->in != 0 || b->out != 0) + abort(); + + uv_mutex_unlock(&b->mutex); + uv_mutex_destroy(&b->mutex); + uv_cond_destroy(&b->cond); + + uv__free(barrier->b); + barrier->b = NULL; +} + +#else + +int uv_barrier_init(uv_barrier_t* barrier, unsigned int count) { + return UV__ERR(pthread_barrier_init(barrier, NULL, count)); +} + + +int uv_barrier_wait(uv_barrier_t* barrier) { + int rc; + + rc = pthread_barrier_wait(barrier); + if (rc != 0) + if (rc != PTHREAD_BARRIER_SERIAL_THREAD) + abort(); + + return rc == PTHREAD_BARRIER_SERIAL_THREAD; +} + + +void uv_barrier_destroy(uv_barrier_t* barrier) { + if (pthread_barrier_destroy(barrier)) + abort(); +} + +#endif + + +/* On MacOS, threads other than the main thread are created with a reduced + * stack size by default. Adjust to RLIMIT_STACK aligned to the page size. + * + * On Linux, threads created by musl have a much smaller stack than threads + * created by glibc (80 vs. 2048 or 4096 kB.) Follow glibc for consistency. + */ +static size_t thread_stack_size(void) { +#if defined(__APPLE__) || defined(__linux__) + struct rlimit lim; + + /* getrlimit() can fail on some aarch64 systems due to a glibc bug where + * the system call wrapper invokes the wrong system call. Don't treat + * that as fatal, just use the default stack size instead. + */ + if (0 == getrlimit(RLIMIT_STACK, &lim) && lim.rlim_cur != RLIM_INFINITY) { + /* pthread_attr_setstacksize() expects page-aligned values. */ + lim.rlim_cur -= lim.rlim_cur % (rlim_t) getpagesize(); + + /* Musl's PTHREAD_STACK_MIN is 2 KB on all architectures, which is + * too small to safely receive signals on. + * + * Musl's PTHREAD_STACK_MIN + MINSIGSTKSZ == 8192 on arm64 (which has + * the largest MINSIGSTKSZ of the architectures that musl supports) so + * let's use that as a lower bound. + * + * We use a hardcoded value because PTHREAD_STACK_MIN + MINSIGSTKSZ + * is between 28 and 133 KB when compiling against glibc, depending + * on the architecture. + */ + if (lim.rlim_cur >= 8192) + if (lim.rlim_cur >= PTHREAD_STACK_MIN) + return lim.rlim_cur; + } +#endif + +#if !defined(__linux__) + return 0; +#elif defined(__PPC__) || defined(__ppc__) || defined(__powerpc__) + return 4 << 20; /* glibc default. */ +#else + return 2 << 20; /* glibc default. */ +#endif +} + + +int uv_thread_create(uv_thread_t *tid, void (*entry)(void *arg), void *arg) { + uv_thread_options_t params; + params.flags = UV_THREAD_NO_FLAGS; + return uv_thread_create_ex(tid, ¶ms, entry, arg); +} + +int uv_thread_create_ex(uv_thread_t* tid, + const uv_thread_options_t* params, + void (*entry)(void *arg), + void *arg) { + int err; + pthread_attr_t* attr; + pthread_attr_t attr_storage; + size_t pagesize; + size_t stack_size; + + /* Used to squelch a -Wcast-function-type warning. */ + union { + void (*in)(void*); + void* (*out)(void*); + } f; + + stack_size = + params->flags & UV_THREAD_HAS_STACK_SIZE ? params->stack_size : 0; + + attr = NULL; + if (stack_size == 0) { + stack_size = thread_stack_size(); + } else { + pagesize = (size_t)getpagesize(); + /* Round up to the nearest page boundary. */ + stack_size = (stack_size + pagesize - 1) &~ (pagesize - 1); +#ifdef PTHREAD_STACK_MIN + if (stack_size < PTHREAD_STACK_MIN) + stack_size = PTHREAD_STACK_MIN; +#endif + } + + if (stack_size > 0) { + attr = &attr_storage; + + if (pthread_attr_init(attr)) + abort(); + + if (pthread_attr_setstacksize(attr, stack_size)) + abort(); + } + + f.in = entry; + err = pthread_create(tid, attr, f.out, arg); + + if (attr != NULL) + pthread_attr_destroy(attr); + + return UV__ERR(err); +} + + +uv_thread_t uv_thread_self(void) { + return pthread_self(); +} + +int uv_thread_join(uv_thread_t *tid) { + return UV__ERR(pthread_join(*tid, NULL)); +} + + +int uv_thread_equal(const uv_thread_t* t1, const uv_thread_t* t2) { + return pthread_equal(*t1, *t2); +} + + +int uv_mutex_init(uv_mutex_t* mutex) { +#if defined(NDEBUG) || !defined(PTHREAD_MUTEX_ERRORCHECK) + return UV__ERR(pthread_mutex_init(mutex, NULL)); +#else + pthread_mutexattr_t attr; + int err; + + if (pthread_mutexattr_init(&attr)) + abort(); + + if (pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_ERRORCHECK)) + abort(); + + err = pthread_mutex_init(mutex, &attr); + + if (pthread_mutexattr_destroy(&attr)) + abort(); + + return UV__ERR(err); +#endif +} + + +int uv_mutex_init_recursive(uv_mutex_t* mutex) { + pthread_mutexattr_t attr; + int err; + + if (pthread_mutexattr_init(&attr)) + abort(); + + if (pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE)) + abort(); + + err = pthread_mutex_init(mutex, &attr); + + if (pthread_mutexattr_destroy(&attr)) + abort(); + + return UV__ERR(err); +} + + +void uv_mutex_destroy(uv_mutex_t* mutex) { + if (pthread_mutex_destroy(mutex)) + abort(); +} + + +void uv_mutex_lock(uv_mutex_t* mutex) { + if (pthread_mutex_lock(mutex)) + abort(); +} + + +int uv_mutex_trylock(uv_mutex_t* mutex) { + int err; + + err = pthread_mutex_trylock(mutex); + if (err) { + if (err != EBUSY && err != EAGAIN) + abort(); + return UV_EBUSY; + } + + return 0; +} + + +void uv_mutex_unlock(uv_mutex_t* mutex) { + if (pthread_mutex_unlock(mutex)) + abort(); +} + + +int uv_rwlock_init(uv_rwlock_t* rwlock) { + return UV__ERR(pthread_rwlock_init(rwlock, NULL)); +} + + +void uv_rwlock_destroy(uv_rwlock_t* rwlock) { + if (pthread_rwlock_destroy(rwlock)) + abort(); +} + + +void uv_rwlock_rdlock(uv_rwlock_t* rwlock) { + if (pthread_rwlock_rdlock(rwlock)) + abort(); +} + + +int uv_rwlock_tryrdlock(uv_rwlock_t* rwlock) { + int err; + + err = pthread_rwlock_tryrdlock(rwlock); + if (err) { + if (err != EBUSY && err != EAGAIN) + abort(); + return UV_EBUSY; + } + + return 0; +} + + +void uv_rwlock_rdunlock(uv_rwlock_t* rwlock) { + if (pthread_rwlock_unlock(rwlock)) + abort(); +} + + +void uv_rwlock_wrlock(uv_rwlock_t* rwlock) { + if (pthread_rwlock_wrlock(rwlock)) + abort(); +} + + +int uv_rwlock_trywrlock(uv_rwlock_t* rwlock) { + int err; + + err = pthread_rwlock_trywrlock(rwlock); + if (err) { + if (err != EBUSY && err != EAGAIN) + abort(); + return UV_EBUSY; + } + + return 0; +} + + +void uv_rwlock_wrunlock(uv_rwlock_t* rwlock) { + if (pthread_rwlock_unlock(rwlock)) + abort(); +} + + +void uv_once(uv_once_t* guard, void (*callback)(void)) { + if (pthread_once(guard, callback)) + abort(); +} + +#if defined(__APPLE__) && defined(__MACH__) + +int uv_sem_init(uv_sem_t* sem, unsigned int value) { + kern_return_t err; + + err = semaphore_create(mach_task_self(), sem, SYNC_POLICY_FIFO, value); + if (err == KERN_SUCCESS) + return 0; + if (err == KERN_INVALID_ARGUMENT) + return UV_EINVAL; + if (err == KERN_RESOURCE_SHORTAGE) + return UV_ENOMEM; + + abort(); + return UV_EINVAL; /* Satisfy the compiler. */ +} + + +void uv_sem_destroy(uv_sem_t* sem) { + if (semaphore_destroy(mach_task_self(), *sem)) + abort(); +} + + +void uv_sem_post(uv_sem_t* sem) { + if (semaphore_signal(*sem)) + abort(); +} + + +void uv_sem_wait(uv_sem_t* sem) { + int r; + + do + r = semaphore_wait(*sem); + while (r == KERN_ABORTED); + + if (r != KERN_SUCCESS) + abort(); +} + + +int uv_sem_trywait(uv_sem_t* sem) { + mach_timespec_t interval; + kern_return_t err; + + interval.tv_sec = 0; + interval.tv_nsec = 0; + + err = semaphore_timedwait(*sem, interval); + if (err == KERN_SUCCESS) + return 0; + if (err == KERN_OPERATION_TIMED_OUT) + return UV_EAGAIN; + + abort(); + return UV_EINVAL; /* Satisfy the compiler. */ +} + +#else /* !(defined(__APPLE__) && defined(__MACH__)) */ + +#if defined(__GLIBC__) && !defined(__UCLIBC__) + +/* Hack around https://sourceware.org/bugzilla/show_bug.cgi?id=12674 + * by providing a custom implementation for glibc < 2.21 in terms of other + * concurrency primitives. + * Refs: https://github.com/nodejs/node/issues/19903 */ + +/* To preserve ABI compatibility, we treat the uv_sem_t as storage for + * a pointer to the actual struct we're using underneath. */ + +static uv_once_t glibc_version_check_once = UV_ONCE_INIT; +static int platform_needs_custom_semaphore = 0; + +static void glibc_version_check(void) { + const char* version = gnu_get_libc_version(); + platform_needs_custom_semaphore = + version[0] == '2' && version[1] == '.' && + atoi(version + 2) < 21; +} + +#elif defined(__MVS__) + +#define platform_needs_custom_semaphore 1 + +#else /* !defined(__GLIBC__) && !defined(__MVS__) */ + +#define platform_needs_custom_semaphore 0 + +#endif + +typedef struct uv_semaphore_s { + uv_mutex_t mutex; + uv_cond_t cond; + unsigned int value; +} uv_semaphore_t; + +#if (defined(__GLIBC__) && !defined(__UCLIBC__)) || \ + platform_needs_custom_semaphore +STATIC_ASSERT(sizeof(uv_sem_t) >= sizeof(uv_semaphore_t*)); +#endif + +static int uv__custom_sem_init(uv_sem_t* sem_, unsigned int value) { + int err; + uv_semaphore_t* sem; + + sem = uv__malloc(sizeof(*sem)); + if (sem == NULL) + return UV_ENOMEM; + + if ((err = uv_mutex_init(&sem->mutex)) != 0) { + uv__free(sem); + return err; + } + + if ((err = uv_cond_init(&sem->cond)) != 0) { + uv_mutex_destroy(&sem->mutex); + uv__free(sem); + return err; + } + + sem->value = value; + *(uv_semaphore_t**)sem_ = sem; + return 0; +} + + +static void uv__custom_sem_destroy(uv_sem_t* sem_) { + uv_semaphore_t* sem; + + sem = *(uv_semaphore_t**)sem_; + uv_cond_destroy(&sem->cond); + uv_mutex_destroy(&sem->mutex); + uv__free(sem); +} + + +static void uv__custom_sem_post(uv_sem_t* sem_) { + uv_semaphore_t* sem; + + sem = *(uv_semaphore_t**)sem_; + uv_mutex_lock(&sem->mutex); + sem->value++; + if (sem->value == 1) + uv_cond_signal(&sem->cond); + uv_mutex_unlock(&sem->mutex); +} + + +static void uv__custom_sem_wait(uv_sem_t* sem_) { + uv_semaphore_t* sem; + + sem = *(uv_semaphore_t**)sem_; + uv_mutex_lock(&sem->mutex); + while (sem->value == 0) + uv_cond_wait(&sem->cond, &sem->mutex); + sem->value--; + uv_mutex_unlock(&sem->mutex); +} + + +static int uv__custom_sem_trywait(uv_sem_t* sem_) { + uv_semaphore_t* sem; + + sem = *(uv_semaphore_t**)sem_; + if (uv_mutex_trylock(&sem->mutex) != 0) + return UV_EAGAIN; + + if (sem->value == 0) { + uv_mutex_unlock(&sem->mutex); + return UV_EAGAIN; + } + + sem->value--; + uv_mutex_unlock(&sem->mutex); + + return 0; +} + +static int uv__sem_init(uv_sem_t* sem, unsigned int value) { + if (sem_init(sem, 0, value)) + return UV__ERR(errno); + return 0; +} + + +static void uv__sem_destroy(uv_sem_t* sem) { + if (sem_destroy(sem)) + abort(); +} + + +static void uv__sem_post(uv_sem_t* sem) { + if (sem_post(sem)) + abort(); +} + + +static void uv__sem_wait(uv_sem_t* sem) { + int r; + + do + r = sem_wait(sem); + while (r == -1 && errno == EINTR); + + if (r) + abort(); +} + + +static int uv__sem_trywait(uv_sem_t* sem) { + int r; + + do + r = sem_trywait(sem); + while (r == -1 && errno == EINTR); + + if (r) { + if (errno == EAGAIN) + return UV_EAGAIN; + abort(); + } + + return 0; +} + +int uv_sem_init(uv_sem_t* sem, unsigned int value) { +#if defined(__GLIBC__) && !defined(__UCLIBC__) + uv_once(&glibc_version_check_once, glibc_version_check); +#endif + + if (platform_needs_custom_semaphore) + return uv__custom_sem_init(sem, value); + else + return uv__sem_init(sem, value); +} + + +void uv_sem_destroy(uv_sem_t* sem) { + if (platform_needs_custom_semaphore) + uv__custom_sem_destroy(sem); + else + uv__sem_destroy(sem); +} + + +void uv_sem_post(uv_sem_t* sem) { + if (platform_needs_custom_semaphore) + uv__custom_sem_post(sem); + else + uv__sem_post(sem); +} + + +void uv_sem_wait(uv_sem_t* sem) { + if (platform_needs_custom_semaphore) + uv__custom_sem_wait(sem); + else + uv__sem_wait(sem); +} + + +int uv_sem_trywait(uv_sem_t* sem) { + if (platform_needs_custom_semaphore) + return uv__custom_sem_trywait(sem); + else + return uv__sem_trywait(sem); +} + +#endif /* defined(__APPLE__) && defined(__MACH__) */ + + +#if defined(__APPLE__) && defined(__MACH__) || defined(__MVS__) + +int uv_cond_init(uv_cond_t* cond) { + return UV__ERR(pthread_cond_init(cond, NULL)); +} + +#else /* !(defined(__APPLE__) && defined(__MACH__)) */ + +int uv_cond_init(uv_cond_t* cond) { + pthread_condattr_t attr; + int err; + + err = pthread_condattr_init(&attr); + if (err) + return UV__ERR(err); + +#if !(defined(__ANDROID_API__) && __ANDROID_API__ < 21) + err = pthread_condattr_setclock(&attr, CLOCK_MONOTONIC); + if (err) + goto error2; +#endif + + err = pthread_cond_init(cond, &attr); + if (err) + goto error2; + + err = pthread_condattr_destroy(&attr); + if (err) + goto error; + + return 0; + +error: + pthread_cond_destroy(cond); +error2: + pthread_condattr_destroy(&attr); + return UV__ERR(err); +} + +#endif /* defined(__APPLE__) && defined(__MACH__) */ + +void uv_cond_destroy(uv_cond_t* cond) { +#if defined(__APPLE__) && defined(__MACH__) + /* It has been reported that destroying condition variables that have been + * signalled but not waited on can sometimes result in application crashes. + * See https://codereview.chromium.org/1323293005. + */ + pthread_mutex_t mutex; + struct timespec ts; + int err; + + if (pthread_mutex_init(&mutex, NULL)) + abort(); + + if (pthread_mutex_lock(&mutex)) + abort(); + + ts.tv_sec = 0; + ts.tv_nsec = 1; + + err = pthread_cond_timedwait_relative_np(cond, &mutex, &ts); + if (err != 0 && err != ETIMEDOUT) + abort(); + + if (pthread_mutex_unlock(&mutex)) + abort(); + + if (pthread_mutex_destroy(&mutex)) + abort(); +#endif /* defined(__APPLE__) && defined(__MACH__) */ + + if (pthread_cond_destroy(cond)) + abort(); +} + +void uv_cond_signal(uv_cond_t* cond) { + if (pthread_cond_signal(cond)) + abort(); +} + +void uv_cond_broadcast(uv_cond_t* cond) { + if (pthread_cond_broadcast(cond)) + abort(); +} + +void uv_cond_wait(uv_cond_t* cond, uv_mutex_t* mutex) { + if (pthread_cond_wait(cond, mutex)) + abort(); +} + + +int uv_cond_timedwait(uv_cond_t* cond, uv_mutex_t* mutex, uint64_t timeout) { + int r; + struct timespec ts; +#if defined(__MVS__) + struct timeval tv; +#endif + +#if defined(__APPLE__) && defined(__MACH__) + ts.tv_sec = timeout / NANOSEC; + ts.tv_nsec = timeout % NANOSEC; + r = pthread_cond_timedwait_relative_np(cond, mutex, &ts); +#else +#if defined(__MVS__) + if (gettimeofday(&tv, NULL)) + abort(); + timeout += tv.tv_sec * NANOSEC + tv.tv_usec * 1e3; +#else + timeout += uv__hrtime(UV_CLOCK_PRECISE); +#endif + ts.tv_sec = timeout / NANOSEC; + ts.tv_nsec = timeout % NANOSEC; +#if defined(__ANDROID_API__) && __ANDROID_API__ < 21 + + /* + * The bionic pthread implementation doesn't support CLOCK_MONOTONIC, + * but has this alternative function instead. + */ + r = pthread_cond_timedwait_monotonic_np(cond, mutex, &ts); +#else + r = pthread_cond_timedwait(cond, mutex, &ts); +#endif /* __ANDROID_API__ */ +#endif + + + if (r == 0) + return 0; + + if (r == ETIMEDOUT) + return UV_ETIMEDOUT; + + abort(); +#ifndef __SUNPRO_C + return UV_EINVAL; /* Satisfy the compiler. */ +#endif +} + + +int uv_key_create(uv_key_t* key) { + return UV__ERR(pthread_key_create(key, NULL)); +} + + +void uv_key_delete(uv_key_t* key) { + if (pthread_key_delete(*key)) + abort(); +} + + +void* uv_key_get(uv_key_t* key) { + return pthread_getspecific(*key); +} + + +void uv_key_set(uv_key_t* key, void* value) { + if (pthread_setspecific(*key, value)) + abort(); +} diff --git a/external/libuv/src/unix/tty.c b/external/libuv/src/unix/tty.c new file mode 100644 index 000000000..6f60abaad --- /dev/null +++ b/external/libuv/src/unix/tty.c @@ -0,0 +1,402 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#include "uv.h" +#include "internal.h" +#include "spinlock.h" + +#include +#include +#include +#include +#include +#include + +#if defined(__MVS__) && !defined(IMAXBEL) +#define IMAXBEL 0 +#endif + +#if defined(__PASE__) +/* On IBM i PASE, for better compatibility with running interactive programs in + * a 5250 environment, isatty() will return true for the stdin/stdout/stderr + * streams created by QSH/QP2TERM. + * + * For more, see docs on PASE_STDIO_ISATTY in + * https://www.ibm.com/support/knowledgecenter/ssw_ibm_i_74/apis/pase_environ.htm + * + * This behavior causes problems for Node as it expects that if isatty() returns + * true that TTY ioctls will be supported by that fd (which is not an + * unreasonable expectation) and when they don't it crashes with assertion + * errors. + * + * Here, we create our own version of isatty() that uses ioctl() to identify + * whether the fd is *really* a TTY or not. + */ +static int isreallyatty(int file) { + int rc; + + rc = !ioctl(file, TXISATTY + 0x81, NULL); + if (!rc && errno != EBADF) + errno = ENOTTY; + + return rc; +} +#define isatty(fd) isreallyatty(fd) +#endif + +static int orig_termios_fd = -1; +static struct termios orig_termios; +static uv_spinlock_t termios_spinlock = UV_SPINLOCK_INITIALIZER; + +static int uv__tty_is_slave(const int fd) { + int result; +#if defined(__linux__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) + int dummy; + + result = ioctl(fd, TIOCGPTN, &dummy) != 0; +#elif defined(__APPLE__) + char dummy[256]; + + result = ioctl(fd, TIOCPTYGNAME, &dummy) != 0; +#elif defined(__NetBSD__) + /* + * NetBSD as an extension returns with ptsname(3) and ptsname_r(3) the slave + * device name for both descriptors, the master one and slave one. + * + * Implement function to compare major device number with pts devices. + * + * The major numbers are machine-dependent, on NetBSD/amd64 they are + * respectively: + * - master tty: ptc - major 6 + * - slave tty: pts - major 5 + */ + + struct stat sb; + /* Lookup device's major for the pts driver and cache it. */ + static devmajor_t pts = NODEVMAJOR; + + if (pts == NODEVMAJOR) { + pts = getdevmajor("pts", S_IFCHR); + if (pts == NODEVMAJOR) + abort(); + } + + /* Lookup stat structure behind the file descriptor. */ + if (fstat(fd, &sb) != 0) + abort(); + + /* Assert character device. */ + if (!S_ISCHR(sb.st_mode)) + abort(); + + /* Assert valid major. */ + if (major(sb.st_rdev) == NODEVMAJOR) + abort(); + + result = (pts == major(sb.st_rdev)); +#else + /* Fallback to ptsname + */ + result = ptsname(fd) == NULL; +#endif + return result; +} + +int uv_tty_init(uv_loop_t* loop, uv_tty_t* tty, int fd, int unused) { + uv_handle_type type; + int flags; + int newfd; + int r; + int saved_flags; + int mode; + char path[256]; + (void)unused; /* deprecated parameter is no longer needed */ + + /* File descriptors that refer to files cannot be monitored with epoll. + * That restriction also applies to character devices like /dev/random + * (but obviously not /dev/tty.) + */ + type = uv_guess_handle(fd); + if (type == UV_FILE || type == UV_UNKNOWN_HANDLE) + return UV_EINVAL; + + flags = 0; + newfd = -1; + + /* Save the fd flags in case we need to restore them due to an error. */ + do + saved_flags = fcntl(fd, F_GETFL); + while (saved_flags == -1 && errno == EINTR); + + if (saved_flags == -1) + return UV__ERR(errno); + mode = saved_flags & O_ACCMODE; + + /* Reopen the file descriptor when it refers to a tty. This lets us put the + * tty in non-blocking mode without affecting other processes that share it + * with us. + * + * Example: `node | cat` - if we put our fd 0 in non-blocking mode, it also + * affects fd 1 of `cat` because both file descriptors refer to the same + * struct file in the kernel. When we reopen our fd 0, it points to a + * different struct file, hence changing its properties doesn't affect + * other processes. + */ + if (type == UV_TTY) { + /* Reopening a pty in master mode won't work either because the reopened + * pty will be in slave mode (*BSD) or reopening will allocate a new + * master/slave pair (Linux). Therefore check if the fd points to a + * slave device. + */ + if (uv__tty_is_slave(fd) && ttyname_r(fd, path, sizeof(path)) == 0) + r = uv__open_cloexec(path, mode | O_NOCTTY); + else + r = -1; + + if (r < 0) { + /* fallback to using blocking writes */ + if (mode != O_RDONLY) + flags |= UV_HANDLE_BLOCKING_WRITES; + goto skip; + } + + newfd = r; + + r = uv__dup2_cloexec(newfd, fd); + if (r < 0 && r != UV_EINVAL) { + /* EINVAL means newfd == fd which could conceivably happen if another + * thread called close(fd) between our calls to isatty() and open(). + * That's a rather unlikely event but let's handle it anyway. + */ + uv__close(newfd); + return r; + } + + fd = newfd; + } + +skip: + uv__stream_init(loop, (uv_stream_t*) tty, UV_TTY); + + /* If anything fails beyond this point we need to remove the handle from + * the handle queue, since it was added by uv__handle_init in uv_stream_init. + */ + + if (!(flags & UV_HANDLE_BLOCKING_WRITES)) + uv__nonblock(fd, 1); + +#if defined(__APPLE__) + r = uv__stream_try_select((uv_stream_t*) tty, &fd); + if (r) { + int rc = r; + if (newfd != -1) + uv__close(newfd); + QUEUE_REMOVE(&tty->handle_queue); + do + r = fcntl(fd, F_SETFL, saved_flags); + while (r == -1 && errno == EINTR); + return rc; + } +#endif + + if (mode != O_WRONLY) + flags |= UV_HANDLE_READABLE; + if (mode != O_RDONLY) + flags |= UV_HANDLE_WRITABLE; + + uv__stream_open((uv_stream_t*) tty, fd, flags); + tty->mode = UV_TTY_MODE_NORMAL; + + return 0; +} + +static void uv__tty_make_raw(struct termios* tio) { + assert(tio != NULL); + +#if defined __sun || defined __MVS__ + /* + * This implementation of cfmakeraw for Solaris and derivatives is taken from + * http://www.perkin.org.uk/posts/solaris-portability-cfmakeraw.html. + */ + tio->c_iflag &= ~(IMAXBEL | IGNBRK | BRKINT | PARMRK | ISTRIP | INLCR | + IGNCR | ICRNL | IXON); + tio->c_oflag &= ~OPOST; + tio->c_lflag &= ~(ECHO | ECHONL | ICANON | ISIG | IEXTEN); + tio->c_cflag &= ~(CSIZE | PARENB); + tio->c_cflag |= CS8; +#else + cfmakeraw(tio); +#endif /* #ifdef __sun */ +} + +int uv_tty_set_mode(uv_tty_t* tty, uv_tty_mode_t mode) { + struct termios tmp; + int fd; + + if (tty->mode == (int) mode) + return 0; + + fd = uv__stream_fd(tty); + if (tty->mode == UV_TTY_MODE_NORMAL && mode != UV_TTY_MODE_NORMAL) { + if (tcgetattr(fd, &tty->orig_termios)) + return UV__ERR(errno); + + /* This is used for uv_tty_reset_mode() */ + uv_spinlock_lock(&termios_spinlock); + if (orig_termios_fd == -1) { + orig_termios = tty->orig_termios; + orig_termios_fd = fd; + } + uv_spinlock_unlock(&termios_spinlock); + } + + tmp = tty->orig_termios; + switch (mode) { + case UV_TTY_MODE_NORMAL: + break; + case UV_TTY_MODE_RAW: + tmp.c_iflag &= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON); + tmp.c_oflag |= (ONLCR); + tmp.c_cflag |= (CS8); + tmp.c_lflag &= ~(ECHO | ICANON | IEXTEN | ISIG); + tmp.c_cc[VMIN] = 1; + tmp.c_cc[VTIME] = 0; + break; + case UV_TTY_MODE_IO: + uv__tty_make_raw(&tmp); + break; + } + + /* Apply changes after draining */ + if (tcsetattr(fd, TCSADRAIN, &tmp)) + return UV__ERR(errno); + + tty->mode = mode; + return 0; +} + + +int uv_tty_get_winsize(uv_tty_t* tty, int* width, int* height) { + struct winsize ws; + int err; + + do + err = ioctl(uv__stream_fd(tty), TIOCGWINSZ, &ws); + while (err == -1 && errno == EINTR); + + if (err == -1) + return UV__ERR(errno); + + *width = ws.ws_col; + *height = ws.ws_row; + + return 0; +} + + +uv_handle_type uv_guess_handle(uv_file file) { + struct sockaddr sa; + struct stat s; + socklen_t len; + int type; + + if (file < 0) + return UV_UNKNOWN_HANDLE; + + if (isatty(file)) + return UV_TTY; + + if (fstat(file, &s)) + return UV_UNKNOWN_HANDLE; + + if (S_ISREG(s.st_mode)) + return UV_FILE; + + if (S_ISCHR(s.st_mode)) + return UV_FILE; /* XXX UV_NAMED_PIPE? */ + + if (S_ISFIFO(s.st_mode)) + return UV_NAMED_PIPE; + + if (!S_ISSOCK(s.st_mode)) + return UV_UNKNOWN_HANDLE; + + len = sizeof(type); + if (getsockopt(file, SOL_SOCKET, SO_TYPE, &type, &len)) + return UV_UNKNOWN_HANDLE; + + len = sizeof(sa); + if (getsockname(file, &sa, &len)) + return UV_UNKNOWN_HANDLE; + + if (type == SOCK_DGRAM) + if (sa.sa_family == AF_INET || sa.sa_family == AF_INET6) + return UV_UDP; + + if (type == SOCK_STREAM) { +#if defined(_AIX) || defined(__DragonFly__) + /* on AIX/DragonFly the getsockname call returns an empty sa structure + * for sockets of type AF_UNIX. For all other types it will + * return a properly filled in structure. + */ + if (len == 0) + return UV_NAMED_PIPE; +#endif /* defined(_AIX) || defined(__DragonFly__) */ + + if (sa.sa_family == AF_INET || sa.sa_family == AF_INET6) + return UV_TCP; + if (sa.sa_family == AF_UNIX) + return UV_NAMED_PIPE; + } + + return UV_UNKNOWN_HANDLE; +} + + +/* This function is async signal-safe, meaning that it's safe to call from + * inside a signal handler _unless_ execution was inside uv_tty_set_mode()'s + * critical section when the signal was raised. + */ +int uv_tty_reset_mode(void) { + int saved_errno; + int err; + + saved_errno = errno; + if (!uv_spinlock_trylock(&termios_spinlock)) + return UV_EBUSY; /* In uv_tty_set_mode(). */ + + err = 0; + if (orig_termios_fd != -1) + if (tcsetattr(orig_termios_fd, TCSANOW, &orig_termios)) + err = UV__ERR(errno); + + uv_spinlock_unlock(&termios_spinlock); + errno = saved_errno; + + return err; +} + +void uv_tty_set_vterm_state(uv_tty_vtermstate_t state) { +} + +int uv_tty_get_vterm_state(uv_tty_vtermstate_t* state) { + return UV_ENOTSUP; +} diff --git a/external/libuv/src/unix/udp.c b/external/libuv/src/unix/udp.c new file mode 100644 index 000000000..7cf80ef3b --- /dev/null +++ b/external/libuv/src/unix/udp.c @@ -0,0 +1,1316 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#include "uv.h" +#include "internal.h" + +#include +#include +#include +#include +#include +#if defined(__MVS__) +#include +#endif +#include + +#define UV__UDP_DGRAM_MAXSIZE (64 * 1024) + +#if defined(IPV6_JOIN_GROUP) && !defined(IPV6_ADD_MEMBERSHIP) +# define IPV6_ADD_MEMBERSHIP IPV6_JOIN_GROUP +#endif + +#if defined(IPV6_LEAVE_GROUP) && !defined(IPV6_DROP_MEMBERSHIP) +# define IPV6_DROP_MEMBERSHIP IPV6_LEAVE_GROUP +#endif + +union uv__sockaddr { + struct sockaddr_in6 in6; + struct sockaddr_in in; + struct sockaddr addr; +}; + +static void uv__udp_run_completed(uv_udp_t* handle); +static void uv__udp_io(uv_loop_t* loop, uv__io_t* w, unsigned int revents); +static void uv__udp_recvmsg(uv_udp_t* handle); +static void uv__udp_sendmsg(uv_udp_t* handle); +static int uv__udp_maybe_deferred_bind(uv_udp_t* handle, + int domain, + unsigned int flags); + +#if HAVE_MMSG + +#define UV__MMSG_MAXWIDTH 20 + +static int uv__udp_recvmmsg(uv_udp_t* handle, uv_buf_t* buf); +static void uv__udp_sendmmsg(uv_udp_t* handle); + +static int uv__recvmmsg_avail; +static int uv__sendmmsg_avail; +static uv_once_t once = UV_ONCE_INIT; + +static void uv__udp_mmsg_init(void) { + int ret; + int s; + s = uv__socket(AF_INET, SOCK_DGRAM, 0); + if (s < 0) + return; + ret = uv__sendmmsg(s, NULL, 0, 0); + if (ret == 0 || errno != ENOSYS) { + uv__sendmmsg_avail = 1; + uv__recvmmsg_avail = 1; + } else { + ret = uv__recvmmsg(s, NULL, 0, 0, NULL); + if (ret == 0 || errno != ENOSYS) + uv__recvmmsg_avail = 1; + } + uv__close(s); +} + +#endif + +void uv__udp_close(uv_udp_t* handle) { + uv__io_close(handle->loop, &handle->io_watcher); + uv__handle_stop(handle); + + if (handle->io_watcher.fd != -1) { + uv__close(handle->io_watcher.fd); + handle->io_watcher.fd = -1; + } +} + + +void uv__udp_finish_close(uv_udp_t* handle) { + uv_udp_send_t* req; + QUEUE* q; + + assert(!uv__io_active(&handle->io_watcher, POLLIN | POLLOUT)); + assert(handle->io_watcher.fd == -1); + + while (!QUEUE_EMPTY(&handle->write_queue)) { + q = QUEUE_HEAD(&handle->write_queue); + QUEUE_REMOVE(q); + + req = QUEUE_DATA(q, uv_udp_send_t, queue); + req->status = UV_ECANCELED; + QUEUE_INSERT_TAIL(&handle->write_completed_queue, &req->queue); + } + + uv__udp_run_completed(handle); + + assert(handle->send_queue_size == 0); + assert(handle->send_queue_count == 0); + + /* Now tear down the handle. */ + handle->recv_cb = NULL; + handle->alloc_cb = NULL; + /* but _do not_ touch close_cb */ +} + + +static void uv__udp_run_completed(uv_udp_t* handle) { + uv_udp_send_t* req; + QUEUE* q; + + assert(!(handle->flags & UV_HANDLE_UDP_PROCESSING)); + handle->flags |= UV_HANDLE_UDP_PROCESSING; + + while (!QUEUE_EMPTY(&handle->write_completed_queue)) { + q = QUEUE_HEAD(&handle->write_completed_queue); + QUEUE_REMOVE(q); + + req = QUEUE_DATA(q, uv_udp_send_t, queue); + uv__req_unregister(handle->loop, req); + + handle->send_queue_size -= uv__count_bufs(req->bufs, req->nbufs); + handle->send_queue_count--; + + if (req->bufs != req->bufsml) + uv__free(req->bufs); + req->bufs = NULL; + + if (req->send_cb == NULL) + continue; + + /* req->status >= 0 == bytes written + * req->status < 0 == errno + */ + if (req->status >= 0) + req->send_cb(req, 0); + else + req->send_cb(req, req->status); + } + + if (QUEUE_EMPTY(&handle->write_queue)) { + /* Pending queue and completion queue empty, stop watcher. */ + uv__io_stop(handle->loop, &handle->io_watcher, POLLOUT); + if (!uv__io_active(&handle->io_watcher, POLLIN)) + uv__handle_stop(handle); + } + + handle->flags &= ~UV_HANDLE_UDP_PROCESSING; +} + + +static void uv__udp_io(uv_loop_t* loop, uv__io_t* w, unsigned int revents) { + uv_udp_t* handle; + + handle = container_of(w, uv_udp_t, io_watcher); + assert(handle->type == UV_UDP); + + if (revents & POLLIN) + uv__udp_recvmsg(handle); + + if (revents & POLLOUT) { + uv__udp_sendmsg(handle); + uv__udp_run_completed(handle); + } +} + +#if HAVE_MMSG +static int uv__udp_recvmmsg(uv_udp_t* handle, uv_buf_t* buf) { + struct sockaddr_in6 peers[UV__MMSG_MAXWIDTH]; + struct iovec iov[UV__MMSG_MAXWIDTH]; + struct uv__mmsghdr msgs[UV__MMSG_MAXWIDTH]; + ssize_t nread; + uv_buf_t chunk_buf; + size_t chunks; + int flags; + size_t k; + + /* prepare structures for recvmmsg */ + chunks = buf->len / UV__UDP_DGRAM_MAXSIZE; + if (chunks > ARRAY_SIZE(iov)) + chunks = ARRAY_SIZE(iov); + for (k = 0; k < chunks; ++k) { + iov[k].iov_base = buf->base + k * UV__UDP_DGRAM_MAXSIZE; + iov[k].iov_len = UV__UDP_DGRAM_MAXSIZE; + msgs[k].msg_hdr.msg_iov = iov + k; + msgs[k].msg_hdr.msg_iovlen = 1; + msgs[k].msg_hdr.msg_name = peers + k; + msgs[k].msg_hdr.msg_namelen = sizeof(peers[0]); + msgs[k].msg_hdr.msg_control = NULL; + msgs[k].msg_hdr.msg_controllen = 0; + msgs[k].msg_hdr.msg_flags = 0; + } + + do + nread = uv__recvmmsg(handle->io_watcher.fd, msgs, chunks, 0, NULL); + while (nread == -1 && errno == EINTR); + + if (nread < 1) { + if (nread == 0 || errno == EAGAIN || errno == EWOULDBLOCK) + handle->recv_cb(handle, 0, buf, NULL, 0); + else + handle->recv_cb(handle, UV__ERR(errno), buf, NULL, 0); + } else { + /* pass each chunk to the application */ + for (k = 0; k < (size_t) nread && handle->recv_cb != NULL; k++) { + flags = UV_UDP_MMSG_CHUNK; + if (msgs[k].msg_hdr.msg_flags & MSG_TRUNC) + flags |= UV_UDP_PARTIAL; + + chunk_buf = uv_buf_init(iov[k].iov_base, iov[k].iov_len); + handle->recv_cb(handle, + msgs[k].msg_len, + &chunk_buf, + msgs[k].msg_hdr.msg_name, + flags); + } + + /* one last callback so the original buffer is freed */ + if (handle->recv_cb != NULL) + handle->recv_cb(handle, 0, buf, NULL, 0); + } + return nread; +} +#endif + +static void uv__udp_recvmsg(uv_udp_t* handle) { + struct sockaddr_storage peer; + struct msghdr h; + ssize_t nread; + uv_buf_t buf; + int flags; + int count; + + assert(handle->recv_cb != NULL); + assert(handle->alloc_cb != NULL); + + /* Prevent loop starvation when the data comes in as fast as (or faster than) + * we can read it. XXX Need to rearm fd if we switch to edge-triggered I/O. + */ + count = 32; + + do { + buf = uv_buf_init(NULL, 0); + handle->alloc_cb((uv_handle_t*) handle, UV__UDP_DGRAM_MAXSIZE, &buf); + if (buf.base == NULL || buf.len == 0) { + handle->recv_cb(handle, UV_ENOBUFS, &buf, NULL, 0); + return; + } + assert(buf.base != NULL); + +#if HAVE_MMSG + if (handle->flags & UV_HANDLE_UDP_RECVMMSG) { + uv_once(&once, uv__udp_mmsg_init); + if (uv__recvmmsg_avail) { + nread = uv__udp_recvmmsg(handle, &buf); + if (nread > 0) + count -= nread; + continue; + } + } +#endif + + memset(&h, 0, sizeof(h)); + memset(&peer, 0, sizeof(peer)); + h.msg_name = &peer; + h.msg_namelen = sizeof(peer); + h.msg_iov = (void*) &buf; + h.msg_iovlen = 1; + + do { + nread = recvmsg(handle->io_watcher.fd, &h, 0); + } + while (nread == -1 && errno == EINTR); + + if (nread == -1) { + if (errno == EAGAIN || errno == EWOULDBLOCK) + handle->recv_cb(handle, 0, &buf, NULL, 0); + else + handle->recv_cb(handle, UV__ERR(errno), &buf, NULL, 0); + } + else { + flags = 0; + if (h.msg_flags & MSG_TRUNC) + flags |= UV_UDP_PARTIAL; + + handle->recv_cb(handle, nread, &buf, (const struct sockaddr*) &peer, flags); + } + count--; + } + /* recv_cb callback may decide to pause or close the handle */ + while (nread != -1 + && count > 0 + && handle->io_watcher.fd != -1 + && handle->recv_cb != NULL); +} + +#if HAVE_MMSG +static void uv__udp_sendmmsg(uv_udp_t* handle) { + uv_udp_send_t* req; + struct uv__mmsghdr h[UV__MMSG_MAXWIDTH]; + struct uv__mmsghdr *p; + QUEUE* q; + ssize_t npkts; + size_t pkts; + size_t i; + + if (QUEUE_EMPTY(&handle->write_queue)) + return; + +write_queue_drain: + for (pkts = 0, q = QUEUE_HEAD(&handle->write_queue); + pkts < UV__MMSG_MAXWIDTH && q != &handle->write_queue; + ++pkts, q = QUEUE_HEAD(q)) { + assert(q != NULL); + req = QUEUE_DATA(q, uv_udp_send_t, queue); + assert(req != NULL); + + p = &h[pkts]; + memset(p, 0, sizeof(*p)); + if (req->addr.ss_family == AF_UNSPEC) { + p->msg_hdr.msg_name = NULL; + p->msg_hdr.msg_namelen = 0; + } else { + p->msg_hdr.msg_name = &req->addr; + if (req->addr.ss_family == AF_INET6) + p->msg_hdr.msg_namelen = sizeof(struct sockaddr_in6); + else if (req->addr.ss_family == AF_INET) + p->msg_hdr.msg_namelen = sizeof(struct sockaddr_in); + else if (req->addr.ss_family == AF_UNIX) + p->msg_hdr.msg_namelen = sizeof(struct sockaddr_un); + else { + assert(0 && "unsupported address family"); + abort(); + } + } + h[pkts].msg_hdr.msg_iov = (struct iovec*) req->bufs; + h[pkts].msg_hdr.msg_iovlen = req->nbufs; + } + + do + npkts = uv__sendmmsg(handle->io_watcher.fd, h, pkts, 0); + while (npkts == -1 && errno == EINTR); + + if (npkts < 1) { + if (errno == EAGAIN || errno == EWOULDBLOCK || errno == ENOBUFS) + return; + for (i = 0, q = QUEUE_HEAD(&handle->write_queue); + i < pkts && q != &handle->write_queue; + ++i, q = QUEUE_HEAD(q)) { + assert(q != NULL); + req = QUEUE_DATA(q, uv_udp_send_t, queue); + assert(req != NULL); + + req->status = UV__ERR(errno); + QUEUE_REMOVE(&req->queue); + QUEUE_INSERT_TAIL(&handle->write_completed_queue, &req->queue); + } + uv__io_feed(handle->loop, &handle->io_watcher); + return; + } + + for (i = 0, q = QUEUE_HEAD(&handle->write_queue); + i < pkts && q != &handle->write_queue; + ++i, q = QUEUE_HEAD(&handle->write_queue)) { + assert(q != NULL); + req = QUEUE_DATA(q, uv_udp_send_t, queue); + assert(req != NULL); + + req->status = req->bufs[0].len; + + /* Sending a datagram is an atomic operation: either all data + * is written or nothing is (and EMSGSIZE is raised). That is + * why we don't handle partial writes. Just pop the request + * off the write queue and onto the completed queue, done. + */ + QUEUE_REMOVE(&req->queue); + QUEUE_INSERT_TAIL(&handle->write_completed_queue, &req->queue); + } + + /* couldn't batch everything, continue sending (jump to avoid stack growth) */ + if (!QUEUE_EMPTY(&handle->write_queue)) + goto write_queue_drain; + uv__io_feed(handle->loop, &handle->io_watcher); + return; +} +#endif + +static void uv__udp_sendmsg(uv_udp_t* handle) { + uv_udp_send_t* req; + struct msghdr h; + QUEUE* q; + ssize_t size; + +#if HAVE_MMSG + uv_once(&once, uv__udp_mmsg_init); + if (uv__sendmmsg_avail) { + uv__udp_sendmmsg(handle); + return; + } +#endif + + while (!QUEUE_EMPTY(&handle->write_queue)) { + q = QUEUE_HEAD(&handle->write_queue); + assert(q != NULL); + + req = QUEUE_DATA(q, uv_udp_send_t, queue); + assert(req != NULL); + + memset(&h, 0, sizeof h); + if (req->addr.ss_family == AF_UNSPEC) { + h.msg_name = NULL; + h.msg_namelen = 0; + } else { + h.msg_name = &req->addr; + if (req->addr.ss_family == AF_INET6) + h.msg_namelen = sizeof(struct sockaddr_in6); + else if (req->addr.ss_family == AF_INET) + h.msg_namelen = sizeof(struct sockaddr_in); + else if (req->addr.ss_family == AF_UNIX) + h.msg_namelen = sizeof(struct sockaddr_un); + else { + assert(0 && "unsupported address family"); + abort(); + } + } + h.msg_iov = (struct iovec*) req->bufs; + h.msg_iovlen = req->nbufs; + + do { + size = sendmsg(handle->io_watcher.fd, &h, 0); + } while (size == -1 && errno == EINTR); + + if (size == -1) { + if (errno == EAGAIN || errno == EWOULDBLOCK || errno == ENOBUFS) + break; + } + + req->status = (size == -1 ? UV__ERR(errno) : size); + + /* Sending a datagram is an atomic operation: either all data + * is written or nothing is (and EMSGSIZE is raised). That is + * why we don't handle partial writes. Just pop the request + * off the write queue and onto the completed queue, done. + */ + QUEUE_REMOVE(&req->queue); + QUEUE_INSERT_TAIL(&handle->write_completed_queue, &req->queue); + uv__io_feed(handle->loop, &handle->io_watcher); + } +} + +/* On the BSDs, SO_REUSEPORT implies SO_REUSEADDR but with some additional + * refinements for programs that use multicast. + * + * Linux as of 3.9 has a SO_REUSEPORT socket option but with semantics that + * are different from the BSDs: it _shares_ the port rather than steal it + * from the current listener. While useful, it's not something we can emulate + * on other platforms so we don't enable it. + * + * zOS does not support getsockname with SO_REUSEPORT option when using + * AF_UNIX. + */ +static int uv__set_reuse(int fd) { + int yes; + yes = 1; + +#if defined(SO_REUSEPORT) && defined(__MVS__) + struct sockaddr_in sockfd; + unsigned int sockfd_len = sizeof(sockfd); + if (getsockname(fd, (struct sockaddr*) &sockfd, &sockfd_len) == -1) + return UV__ERR(errno); + if (sockfd.sin_family == AF_UNIX) { + if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(yes))) + return UV__ERR(errno); + } else { + if (setsockopt(fd, SOL_SOCKET, SO_REUSEPORT, &yes, sizeof(yes))) + return UV__ERR(errno); + } +#elif defined(SO_REUSEPORT) && !defined(__linux__) + if (setsockopt(fd, SOL_SOCKET, SO_REUSEPORT, &yes, sizeof(yes))) + return UV__ERR(errno); +#else + if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(yes))) + return UV__ERR(errno); +#endif + + return 0; +} + + +int uv__udp_bind(uv_udp_t* handle, + const struct sockaddr* addr, + unsigned int addrlen, + unsigned int flags) { + int err; + int yes; + int fd; + + /* Check for bad flags. */ + if (flags & ~(UV_UDP_IPV6ONLY | UV_UDP_REUSEADDR)) + return UV_EINVAL; + + /* Cannot set IPv6-only mode on non-IPv6 socket. */ + if ((flags & UV_UDP_IPV6ONLY) && addr->sa_family != AF_INET6) + return UV_EINVAL; + + fd = handle->io_watcher.fd; + if (fd == -1) { + err = uv__socket(addr->sa_family, SOCK_DGRAM, 0); + if (err < 0) + return err; + fd = err; + handle->io_watcher.fd = fd; + } + + if (flags & UV_UDP_REUSEADDR) { + err = uv__set_reuse(fd); + if (err) + return err; + } + + if (flags & UV_UDP_IPV6ONLY) { +#ifdef IPV6_V6ONLY + yes = 1; + if (setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, &yes, sizeof yes) == -1) { + err = UV__ERR(errno); + return err; + } +#else + err = UV_ENOTSUP; + return err; +#endif + } + + if (bind(fd, addr, addrlen)) { + err = UV__ERR(errno); + if (errno == EAFNOSUPPORT) + /* OSX, other BSDs and SunoS fail with EAFNOSUPPORT when binding a + * socket created with AF_INET to an AF_INET6 address or vice versa. */ + err = UV_EINVAL; + return err; + } + + if (addr->sa_family == AF_INET6) + handle->flags |= UV_HANDLE_IPV6; + + handle->flags |= UV_HANDLE_BOUND; + return 0; +} + + +static int uv__udp_maybe_deferred_bind(uv_udp_t* handle, + int domain, + unsigned int flags) { + union uv__sockaddr taddr; + socklen_t addrlen; + + if (handle->io_watcher.fd != -1) + return 0; + + switch (domain) { + case AF_INET: + { + struct sockaddr_in* addr = &taddr.in; + memset(addr, 0, sizeof *addr); + addr->sin_family = AF_INET; + addr->sin_addr.s_addr = INADDR_ANY; + addrlen = sizeof *addr; + break; + } + case AF_INET6: + { + struct sockaddr_in6* addr = &taddr.in6; + memset(addr, 0, sizeof *addr); + addr->sin6_family = AF_INET6; + addr->sin6_addr = in6addr_any; + addrlen = sizeof *addr; + break; + } + default: + assert(0 && "unsupported address family"); + abort(); + } + + return uv__udp_bind(handle, &taddr.addr, addrlen, flags); +} + + +int uv__udp_connect(uv_udp_t* handle, + const struct sockaddr* addr, + unsigned int addrlen) { + int err; + + err = uv__udp_maybe_deferred_bind(handle, addr->sa_family, 0); + if (err) + return err; + + do { + errno = 0; + err = connect(handle->io_watcher.fd, addr, addrlen); + } while (err == -1 && errno == EINTR); + + if (err) + return UV__ERR(errno); + + handle->flags |= UV_HANDLE_UDP_CONNECTED; + + return 0; +} + + +int uv__udp_disconnect(uv_udp_t* handle) { + int r; + struct sockaddr addr; + + memset(&addr, 0, sizeof(addr)); + + addr.sa_family = AF_UNSPEC; + + do { + errno = 0; + r = connect(handle->io_watcher.fd, &addr, sizeof(addr)); + } while (r == -1 && errno == EINTR); + + if (r == -1 && errno != EAFNOSUPPORT) + return UV__ERR(errno); + + handle->flags &= ~UV_HANDLE_UDP_CONNECTED; + return 0; +} + + +int uv__udp_send(uv_udp_send_t* req, + uv_udp_t* handle, + const uv_buf_t bufs[], + unsigned int nbufs, + const struct sockaddr* addr, + unsigned int addrlen, + uv_udp_send_cb send_cb) { + int err; + int empty_queue; + + assert(nbufs > 0); + + if (addr) { + err = uv__udp_maybe_deferred_bind(handle, addr->sa_family, 0); + if (err) + return err; + } + + /* It's legal for send_queue_count > 0 even when the write_queue is empty; + * it means there are error-state requests in the write_completed_queue that + * will touch up send_queue_size/count later. + */ + empty_queue = (handle->send_queue_count == 0); + + uv__req_init(handle->loop, req, UV_UDP_SEND); + assert(addrlen <= sizeof(req->addr)); + if (addr == NULL) + req->addr.ss_family = AF_UNSPEC; + else + memcpy(&req->addr, addr, addrlen); + req->send_cb = send_cb; + req->handle = handle; + req->nbufs = nbufs; + + req->bufs = req->bufsml; + if (nbufs > ARRAY_SIZE(req->bufsml)) + req->bufs = uv__malloc(nbufs * sizeof(bufs[0])); + + if (req->bufs == NULL) { + uv__req_unregister(handle->loop, req); + return UV_ENOMEM; + } + + memcpy(req->bufs, bufs, nbufs * sizeof(bufs[0])); + handle->send_queue_size += uv__count_bufs(req->bufs, req->nbufs); + handle->send_queue_count++; + QUEUE_INSERT_TAIL(&handle->write_queue, &req->queue); + uv__handle_start(handle); + + if (empty_queue && !(handle->flags & UV_HANDLE_UDP_PROCESSING)) { + uv__udp_sendmsg(handle); + + /* `uv__udp_sendmsg` may not be able to do non-blocking write straight + * away. In such cases the `io_watcher` has to be queued for asynchronous + * write. + */ + if (!QUEUE_EMPTY(&handle->write_queue)) + uv__io_start(handle->loop, &handle->io_watcher, POLLOUT); + } else { + uv__io_start(handle->loop, &handle->io_watcher, POLLOUT); + } + + return 0; +} + + +int uv__udp_try_send(uv_udp_t* handle, + const uv_buf_t bufs[], + unsigned int nbufs, + const struct sockaddr* addr, + unsigned int addrlen) { + int err; + struct msghdr h; + ssize_t size; + + assert(nbufs > 0); + + /* already sending a message */ + if (handle->send_queue_count != 0) + return UV_EAGAIN; + + if (addr) { + err = uv__udp_maybe_deferred_bind(handle, addr->sa_family, 0); + if (err) + return err; + } else { + assert(handle->flags & UV_HANDLE_UDP_CONNECTED); + } + + memset(&h, 0, sizeof h); + h.msg_name = (struct sockaddr*) addr; + h.msg_namelen = addrlen; + h.msg_iov = (struct iovec*) bufs; + h.msg_iovlen = nbufs; + + do { + size = sendmsg(handle->io_watcher.fd, &h, 0); + } while (size == -1 && errno == EINTR); + + if (size == -1) { + if (errno == EAGAIN || errno == EWOULDBLOCK || errno == ENOBUFS) + return UV_EAGAIN; + else + return UV__ERR(errno); + } + + return size; +} + + +static int uv__udp_set_membership4(uv_udp_t* handle, + const struct sockaddr_in* multicast_addr, + const char* interface_addr, + uv_membership membership) { + struct ip_mreq mreq; + int optname; + int err; + + memset(&mreq, 0, sizeof mreq); + + if (interface_addr) { + err = uv_inet_pton(AF_INET, interface_addr, &mreq.imr_interface.s_addr); + if (err) + return err; + } else { + mreq.imr_interface.s_addr = htonl(INADDR_ANY); + } + + mreq.imr_multiaddr.s_addr = multicast_addr->sin_addr.s_addr; + + switch (membership) { + case UV_JOIN_GROUP: + optname = IP_ADD_MEMBERSHIP; + break; + case UV_LEAVE_GROUP: + optname = IP_DROP_MEMBERSHIP; + break; + default: + return UV_EINVAL; + } + + if (setsockopt(handle->io_watcher.fd, + IPPROTO_IP, + optname, + &mreq, + sizeof(mreq))) { +#if defined(__MVS__) + if (errno == ENXIO) + return UV_ENODEV; +#endif + return UV__ERR(errno); + } + + return 0; +} + + +static int uv__udp_set_membership6(uv_udp_t* handle, + const struct sockaddr_in6* multicast_addr, + const char* interface_addr, + uv_membership membership) { + int optname; + struct ipv6_mreq mreq; + struct sockaddr_in6 addr6; + + memset(&mreq, 0, sizeof mreq); + + if (interface_addr) { + if (uv_ip6_addr(interface_addr, 0, &addr6)) + return UV_EINVAL; + mreq.ipv6mr_interface = addr6.sin6_scope_id; + } else { + mreq.ipv6mr_interface = 0; + } + + mreq.ipv6mr_multiaddr = multicast_addr->sin6_addr; + + switch (membership) { + case UV_JOIN_GROUP: + optname = IPV6_ADD_MEMBERSHIP; + break; + case UV_LEAVE_GROUP: + optname = IPV6_DROP_MEMBERSHIP; + break; + default: + return UV_EINVAL; + } + + if (setsockopt(handle->io_watcher.fd, + IPPROTO_IPV6, + optname, + &mreq, + sizeof(mreq))) { +#if defined(__MVS__) + if (errno == ENXIO) + return UV_ENODEV; +#endif + return UV__ERR(errno); + } + + return 0; +} + + +#if !defined(__OpenBSD__) && !defined(__NetBSD__) && !defined(__ANDROID__) +static int uv__udp_set_source_membership4(uv_udp_t* handle, + const struct sockaddr_in* multicast_addr, + const char* interface_addr, + const struct sockaddr_in* source_addr, + uv_membership membership) { + struct ip_mreq_source mreq; + int optname; + int err; + + err = uv__udp_maybe_deferred_bind(handle, AF_INET, UV_UDP_REUSEADDR); + if (err) + return err; + + memset(&mreq, 0, sizeof(mreq)); + + if (interface_addr != NULL) { + err = uv_inet_pton(AF_INET, interface_addr, &mreq.imr_interface.s_addr); + if (err) + return err; + } else { + mreq.imr_interface.s_addr = htonl(INADDR_ANY); + } + + mreq.imr_multiaddr.s_addr = multicast_addr->sin_addr.s_addr; + mreq.imr_sourceaddr.s_addr = source_addr->sin_addr.s_addr; + + if (membership == UV_JOIN_GROUP) + optname = IP_ADD_SOURCE_MEMBERSHIP; + else if (membership == UV_LEAVE_GROUP) + optname = IP_DROP_SOURCE_MEMBERSHIP; + else + return UV_EINVAL; + + if (setsockopt(handle->io_watcher.fd, + IPPROTO_IP, + optname, + &mreq, + sizeof(mreq))) { + return UV__ERR(errno); + } + + return 0; +} + + +static int uv__udp_set_source_membership6(uv_udp_t* handle, + const struct sockaddr_in6* multicast_addr, + const char* interface_addr, + const struct sockaddr_in6* source_addr, + uv_membership membership) { + struct group_source_req mreq; + struct sockaddr_in6 addr6; + int optname; + int err; + + err = uv__udp_maybe_deferred_bind(handle, AF_INET6, UV_UDP_REUSEADDR); + if (err) + return err; + + memset(&mreq, 0, sizeof(mreq)); + + if (interface_addr != NULL) { + err = uv_ip6_addr(interface_addr, 0, &addr6); + if (err) + return err; + mreq.gsr_interface = addr6.sin6_scope_id; + } else { + mreq.gsr_interface = 0; + } + + STATIC_ASSERT(sizeof(mreq.gsr_group) >= sizeof(*multicast_addr)); + STATIC_ASSERT(sizeof(mreq.gsr_source) >= sizeof(*source_addr)); + memcpy(&mreq.gsr_group, multicast_addr, sizeof(*multicast_addr)); + memcpy(&mreq.gsr_source, source_addr, sizeof(*source_addr)); + + if (membership == UV_JOIN_GROUP) + optname = MCAST_JOIN_SOURCE_GROUP; + else if (membership == UV_LEAVE_GROUP) + optname = MCAST_LEAVE_SOURCE_GROUP; + else + return UV_EINVAL; + + if (setsockopt(handle->io_watcher.fd, + IPPROTO_IPV6, + optname, + &mreq, + sizeof(mreq))) { + return UV__ERR(errno); + } + + return 0; +} +#endif + + +int uv__udp_init_ex(uv_loop_t* loop, + uv_udp_t* handle, + unsigned flags, + int domain) { + int fd; + + fd = -1; + if (domain != AF_UNSPEC) { + fd = uv__socket(domain, SOCK_DGRAM, 0); + if (fd < 0) + return fd; + } + + uv__handle_init(loop, (uv_handle_t*)handle, UV_UDP); + handle->alloc_cb = NULL; + handle->recv_cb = NULL; + handle->send_queue_size = 0; + handle->send_queue_count = 0; + uv__io_init(&handle->io_watcher, uv__udp_io, fd); + QUEUE_INIT(&handle->write_queue); + QUEUE_INIT(&handle->write_completed_queue); + + return 0; +} + + +int uv_udp_open(uv_udp_t* handle, uv_os_sock_t sock) { + int err; + + /* Check for already active socket. */ + if (handle->io_watcher.fd != -1) + return UV_EBUSY; + + if (uv__fd_exists(handle->loop, sock)) + return UV_EEXIST; + + err = uv__nonblock(sock, 1); + if (err) + return err; + + err = uv__set_reuse(sock); + if (err) + return err; + + handle->io_watcher.fd = sock; + if (uv__udp_is_connected(handle)) + handle->flags |= UV_HANDLE_UDP_CONNECTED; + + return 0; +} + + +int uv_udp_set_membership(uv_udp_t* handle, + const char* multicast_addr, + const char* interface_addr, + uv_membership membership) { + int err; + struct sockaddr_in addr4; + struct sockaddr_in6 addr6; + + if (uv_ip4_addr(multicast_addr, 0, &addr4) == 0) { + err = uv__udp_maybe_deferred_bind(handle, AF_INET, UV_UDP_REUSEADDR); + if (err) + return err; + return uv__udp_set_membership4(handle, &addr4, interface_addr, membership); + } else if (uv_ip6_addr(multicast_addr, 0, &addr6) == 0) { + err = uv__udp_maybe_deferred_bind(handle, AF_INET6, UV_UDP_REUSEADDR); + if (err) + return err; + return uv__udp_set_membership6(handle, &addr6, interface_addr, membership); + } else { + return UV_EINVAL; + } +} + + +int uv_udp_set_source_membership(uv_udp_t* handle, + const char* multicast_addr, + const char* interface_addr, + const char* source_addr, + uv_membership membership) { +#if !defined(__OpenBSD__) && !defined(__NetBSD__) && !defined(__ANDROID__) + int err; + union uv__sockaddr mcast_addr; + union uv__sockaddr src_addr; + + err = uv_ip4_addr(multicast_addr, 0, &mcast_addr.in); + if (err) { + err = uv_ip6_addr(multicast_addr, 0, &mcast_addr.in6); + if (err) + return err; + err = uv_ip6_addr(source_addr, 0, &src_addr.in6); + if (err) + return err; + return uv__udp_set_source_membership6(handle, + &mcast_addr.in6, + interface_addr, + &src_addr.in6, + membership); + } + + err = uv_ip4_addr(source_addr, 0, &src_addr.in); + if (err) + return err; + return uv__udp_set_source_membership4(handle, + &mcast_addr.in, + interface_addr, + &src_addr.in, + membership); +#else + return UV_ENOSYS; +#endif +} + + +static int uv__setsockopt(uv_udp_t* handle, + int option4, + int option6, + const void* val, + socklen_t size) { + int r; + + if (handle->flags & UV_HANDLE_IPV6) + r = setsockopt(handle->io_watcher.fd, + IPPROTO_IPV6, + option6, + val, + size); + else + r = setsockopt(handle->io_watcher.fd, + IPPROTO_IP, + option4, + val, + size); + if (r) + return UV__ERR(errno); + + return 0; +} + +static int uv__setsockopt_maybe_char(uv_udp_t* handle, + int option4, + int option6, + int val) { +#if defined(__sun) || defined(_AIX) || defined(__MVS__) + char arg = val; +#elif defined(__OpenBSD__) + unsigned char arg = val; +#else + int arg = val; +#endif + + if (val < 0 || val > 255) + return UV_EINVAL; + + return uv__setsockopt(handle, option4, option6, &arg, sizeof(arg)); +} + + +int uv_udp_set_broadcast(uv_udp_t* handle, int on) { + if (setsockopt(handle->io_watcher.fd, + SOL_SOCKET, + SO_BROADCAST, + &on, + sizeof(on))) { + return UV__ERR(errno); + } + + return 0; +} + + +int uv_udp_set_ttl(uv_udp_t* handle, int ttl) { + if (ttl < 1 || ttl > 255) + return UV_EINVAL; + +#if defined(__MVS__) + if (!(handle->flags & UV_HANDLE_IPV6)) + return UV_ENOTSUP; /* zOS does not support setting ttl for IPv4 */ +#endif + +/* + * On Solaris and derivatives such as SmartOS, the length of socket options + * is sizeof(int) for IP_TTL and IPV6_UNICAST_HOPS, + * so hardcode the size of these options on this platform, + * and use the general uv__setsockopt_maybe_char call on other platforms. + */ +#if defined(__sun) || defined(_AIX) || defined(__OpenBSD__) || \ + defined(__MVS__) + + return uv__setsockopt(handle, + IP_TTL, + IPV6_UNICAST_HOPS, + &ttl, + sizeof(ttl)); + +#else /* !(defined(__sun) || defined(_AIX) || defined (__OpenBSD__) || + defined(__MVS__)) */ + + return uv__setsockopt_maybe_char(handle, + IP_TTL, + IPV6_UNICAST_HOPS, + ttl); + +#endif /* defined(__sun) || defined(_AIX) || defined (__OpenBSD__) || + defined(__MVS__) */ +} + + +int uv_udp_set_multicast_ttl(uv_udp_t* handle, int ttl) { +/* + * On Solaris and derivatives such as SmartOS, the length of socket options + * is sizeof(int) for IPV6_MULTICAST_HOPS and sizeof(char) for + * IP_MULTICAST_TTL, so hardcode the size of the option in the IPv6 case, + * and use the general uv__setsockopt_maybe_char call otherwise. + */ +#if defined(__sun) || defined(_AIX) || defined(__OpenBSD__) || \ + defined(__MVS__) + if (handle->flags & UV_HANDLE_IPV6) + return uv__setsockopt(handle, + IP_MULTICAST_TTL, + IPV6_MULTICAST_HOPS, + &ttl, + sizeof(ttl)); +#endif /* defined(__sun) || defined(_AIX) || defined(__OpenBSD__) || \ + defined(__MVS__) */ + + return uv__setsockopt_maybe_char(handle, + IP_MULTICAST_TTL, + IPV6_MULTICAST_HOPS, + ttl); +} + + +int uv_udp_set_multicast_loop(uv_udp_t* handle, int on) { +/* + * On Solaris and derivatives such as SmartOS, the length of socket options + * is sizeof(int) for IPV6_MULTICAST_LOOP and sizeof(char) for + * IP_MULTICAST_LOOP, so hardcode the size of the option in the IPv6 case, + * and use the general uv__setsockopt_maybe_char call otherwise. + */ +#if defined(__sun) || defined(_AIX) || defined(__OpenBSD__) || \ + defined(__MVS__) + if (handle->flags & UV_HANDLE_IPV6) + return uv__setsockopt(handle, + IP_MULTICAST_LOOP, + IPV6_MULTICAST_LOOP, + &on, + sizeof(on)); +#endif /* defined(__sun) || defined(_AIX) ||defined(__OpenBSD__) || + defined(__MVS__) */ + + return uv__setsockopt_maybe_char(handle, + IP_MULTICAST_LOOP, + IPV6_MULTICAST_LOOP, + on); +} + +int uv_udp_set_multicast_interface(uv_udp_t* handle, const char* interface_addr) { + struct sockaddr_storage addr_st; + struct sockaddr_in* addr4; + struct sockaddr_in6* addr6; + + addr4 = (struct sockaddr_in*) &addr_st; + addr6 = (struct sockaddr_in6*) &addr_st; + + if (!interface_addr) { + memset(&addr_st, 0, sizeof addr_st); + if (handle->flags & UV_HANDLE_IPV6) { + addr_st.ss_family = AF_INET6; + addr6->sin6_scope_id = 0; + } else { + addr_st.ss_family = AF_INET; + addr4->sin_addr.s_addr = htonl(INADDR_ANY); + } + } else if (uv_ip4_addr(interface_addr, 0, addr4) == 0) { + /* nothing, address was parsed */ + } else if (uv_ip6_addr(interface_addr, 0, addr6) == 0) { + /* nothing, address was parsed */ + } else { + return UV_EINVAL; + } + + if (addr_st.ss_family == AF_INET) { + if (setsockopt(handle->io_watcher.fd, + IPPROTO_IP, + IP_MULTICAST_IF, + (void*) &addr4->sin_addr, + sizeof(addr4->sin_addr)) == -1) { + return UV__ERR(errno); + } + } else if (addr_st.ss_family == AF_INET6) { + if (setsockopt(handle->io_watcher.fd, + IPPROTO_IPV6, + IPV6_MULTICAST_IF, + &addr6->sin6_scope_id, + sizeof(addr6->sin6_scope_id)) == -1) { + return UV__ERR(errno); + } + } else { + assert(0 && "unexpected address family"); + abort(); + } + + return 0; +} + +int uv_udp_getpeername(const uv_udp_t* handle, + struct sockaddr* name, + int* namelen) { + + return uv__getsockpeername((const uv_handle_t*) handle, + getpeername, + name, + namelen); +} + +int uv_udp_getsockname(const uv_udp_t* handle, + struct sockaddr* name, + int* namelen) { + + return uv__getsockpeername((const uv_handle_t*) handle, + getsockname, + name, + namelen); +} + + +int uv__udp_recv_start(uv_udp_t* handle, + uv_alloc_cb alloc_cb, + uv_udp_recv_cb recv_cb) { + int err; + + if (alloc_cb == NULL || recv_cb == NULL) + return UV_EINVAL; + + if (uv__io_active(&handle->io_watcher, POLLIN)) + return UV_EALREADY; /* FIXME(bnoordhuis) Should be UV_EBUSY. */ + + err = uv__udp_maybe_deferred_bind(handle, AF_INET, 0); + if (err) + return err; + + handle->alloc_cb = alloc_cb; + handle->recv_cb = recv_cb; + + uv__io_start(handle->loop, &handle->io_watcher, POLLIN); + uv__handle_start(handle); + + return 0; +} + + +int uv__udp_recv_stop(uv_udp_t* handle) { + uv__io_stop(handle->loop, &handle->io_watcher, POLLIN); + + if (!uv__io_active(&handle->io_watcher, POLLOUT)) + uv__handle_stop(handle); + + handle->alloc_cb = NULL; + handle->recv_cb = NULL; + + return 0; +} diff --git a/external/libuv/src/uv-common.c b/external/libuv/src/uv-common.c new file mode 100644 index 000000000..0ab548799 --- /dev/null +++ b/external/libuv/src/uv-common.c @@ -0,0 +1,869 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#include "uv.h" +#include "uv-common.h" + +#include +#include +#include +#include /* NULL */ +#include +#include /* malloc */ +#include /* memset */ + +#if defined(_WIN32) +# include /* malloc */ +#else +# include /* if_nametoindex */ +# include /* AF_UNIX, sockaddr_un */ +#endif + + +typedef struct { + uv_malloc_func local_malloc; + uv_realloc_func local_realloc; + uv_calloc_func local_calloc; + uv_free_func local_free; +} uv__allocator_t; + +static uv__allocator_t uv__allocator = { + malloc, + realloc, + calloc, + free, +}; + +char* uv__strdup(const char* s) { + size_t len = strlen(s) + 1; + char* m = (char *)uv__malloc(len); + if (m == NULL) + return NULL; + return (char *)memcpy(m, s, len); +} + +char* uv__strndup(const char* s, size_t n) { + char* m; + size_t len = strlen(s); + if (n < len) + len = n; + m = (char *)uv__malloc(len + 1); + if (m == NULL) + return NULL; + m[len] = '\0'; + return (char *)memcpy(m, s, len); +} + +void* uv__malloc(size_t size) { + if (size > 0) + return uv__allocator.local_malloc(size); + return NULL; +} + +void uv__free(void* ptr) { + int saved_errno; + + /* Libuv expects that free() does not clobber errno. The system allocator + * honors that assumption but custom allocators may not be so careful. + */ + saved_errno = errno; + uv__allocator.local_free(ptr); + errno = saved_errno; +} + +void* uv__calloc(size_t count, size_t size) { + return uv__allocator.local_calloc(count, size); +} + +void* uv__realloc(void* ptr, size_t size) { + if (size > 0) + return uv__allocator.local_realloc(ptr, size); + uv__free(ptr); + return NULL; +} + +void* uv__reallocf(void* ptr, size_t size) { + void* newptr; + + newptr = uv__realloc(ptr, size); + if (newptr == NULL) + if (size > 0) + uv__free(ptr); + + return newptr; +} + +int uv_replace_allocator(uv_malloc_func malloc_func, + uv_realloc_func realloc_func, + uv_calloc_func calloc_func, + uv_free_func free_func) { + if (malloc_func == NULL || realloc_func == NULL || + calloc_func == NULL || free_func == NULL) { + return UV_EINVAL; + } + + uv__allocator.local_malloc = malloc_func; + uv__allocator.local_realloc = realloc_func; + uv__allocator.local_calloc = calloc_func; + uv__allocator.local_free = free_func; + + return 0; +} + +#define XX(uc, lc) case UV_##uc: return sizeof(uv_##lc##_t); + +size_t uv_handle_size(uv_handle_type type) { + switch (type) { + UV_HANDLE_TYPE_MAP(XX) + default: + return -1; + } +} + +size_t uv_req_size(uv_req_type type) { + switch(type) { + UV_REQ_TYPE_MAP(XX) + default: + return -1; + } +} + +#undef XX + + +size_t uv_loop_size(void) { + return sizeof(uv_loop_t); +} + + +uv_buf_t uv_buf_init(char* base, unsigned int len) { + uv_buf_t buf; + buf.base = base; + buf.len = len; + return buf; +} + + +static const char* uv__unknown_err_code(int err) { + char buf[32]; + char* copy; + + snprintf(buf, sizeof(buf), "Unknown system error %d", err); + copy = uv__strdup(buf); + + return copy != NULL ? copy : "Unknown system error"; +} + +#define UV_ERR_NAME_GEN_R(name, _) \ +case UV_## name: \ + uv__strscpy(buf, #name, buflen); break; +char* uv_err_name_r(int err, char* buf, size_t buflen) { + switch (err) { + UV_ERRNO_MAP(UV_ERR_NAME_GEN_R) + default: snprintf(buf, buflen, "Unknown system error %d", err); + } + return buf; +} +#undef UV_ERR_NAME_GEN_R + + +#define UV_ERR_NAME_GEN(name, _) case UV_ ## name: return #name; +const char* uv_err_name(int err) { + switch (err) { + UV_ERRNO_MAP(UV_ERR_NAME_GEN) + } + return uv__unknown_err_code(err); +} +#undef UV_ERR_NAME_GEN + + +#define UV_STRERROR_GEN_R(name, msg) \ +case UV_ ## name: \ + snprintf(buf, buflen, "%s", msg); break; +char* uv_strerror_r(int err, char* buf, size_t buflen) { + switch (err) { + UV_ERRNO_MAP(UV_STRERROR_GEN_R) + default: snprintf(buf, buflen, "Unknown system error %d", err); + } + return buf; +} +#undef UV_STRERROR_GEN_R + + +#define UV_STRERROR_GEN(name, msg) case UV_ ## name: return msg; +const char* uv_strerror(int err) { + switch (err) { + UV_ERRNO_MAP(UV_STRERROR_GEN) + } + return uv__unknown_err_code(err); +} +#undef UV_STRERROR_GEN + + +int uv_ip4_addr(const char* ip, int port, struct sockaddr_in* addr) { + memset(addr, 0, sizeof(*addr)); + addr->sin_family = AF_INET; + addr->sin_port = htons(port); +#ifdef SIN6_LEN + addr->sin_len = sizeof(*addr); +#endif + return uv_inet_pton(AF_INET, ip, &(addr->sin_addr.s_addr)); +} + + +int uv_ip6_addr(const char* ip, int port, struct sockaddr_in6* addr) { + char address_part[40]; + size_t address_part_size; + const char* zone_index; + + memset(addr, 0, sizeof(*addr)); + addr->sin6_family = AF_INET6; + addr->sin6_port = htons(port); +#ifdef SIN6_LEN + addr->sin6_len = sizeof(*addr); +#endif + + zone_index = strchr(ip, '%'); + if (zone_index != NULL) { + address_part_size = zone_index - ip; + if (address_part_size >= sizeof(address_part)) + address_part_size = sizeof(address_part) - 1; + + memcpy(address_part, ip, address_part_size); + address_part[address_part_size] = '\0'; + ip = address_part; + + zone_index++; /* skip '%' */ + /* NOTE: unknown interface (id=0) is silently ignored */ +#ifdef _WIN32 + addr->sin6_scope_id = atoi(zone_index); +#else + addr->sin6_scope_id = if_nametoindex(zone_index); +#endif + } + + return uv_inet_pton(AF_INET6, ip, &addr->sin6_addr); +} + + +int uv_ip4_name(const struct sockaddr_in* src, char* dst, size_t size) { + return uv_inet_ntop(AF_INET, &src->sin_addr, dst, size); +} + + +int uv_ip6_name(const struct sockaddr_in6* src, char* dst, size_t size) { + return uv_inet_ntop(AF_INET6, &src->sin6_addr, dst, size); +} + + +int uv_tcp_bind(uv_tcp_t* handle, + const struct sockaddr* addr, + unsigned int flags) { + unsigned int addrlen; + + if (handle->type != UV_TCP) + return UV_EINVAL; + + if (addr->sa_family == AF_INET) + addrlen = sizeof(struct sockaddr_in); + else if (addr->sa_family == AF_INET6) + addrlen = sizeof(struct sockaddr_in6); + else + return UV_EINVAL; + + return uv__tcp_bind(handle, addr, addrlen, flags); +} + + +int uv_udp_init_ex(uv_loop_t* loop, uv_udp_t* handle, unsigned flags) { + unsigned extra_flags; + int domain; + int rc; + + /* Use the lower 8 bits for the domain. */ + domain = flags & 0xFF; + if (domain != AF_INET && domain != AF_INET6 && domain != AF_UNSPEC) + return UV_EINVAL; + + /* Use the higher bits for extra flags. */ + extra_flags = flags & ~0xFF; + if (extra_flags & ~UV_UDP_RECVMMSG) + return UV_EINVAL; + + rc = uv__udp_init_ex(loop, handle, flags, domain); + + if (rc == 0) + if (extra_flags & UV_UDP_RECVMMSG) + handle->flags |= UV_HANDLE_UDP_RECVMMSG; + + return rc; +} + + +int uv_udp_init(uv_loop_t* loop, uv_udp_t* handle) { + return uv_udp_init_ex(loop, handle, AF_UNSPEC); +} + + +int uv_udp_bind(uv_udp_t* handle, + const struct sockaddr* addr, + unsigned int flags) { + unsigned int addrlen; + + if (handle->type != UV_UDP) + return UV_EINVAL; + + if (addr->sa_family == AF_INET) + addrlen = sizeof(struct sockaddr_in); + else if (addr->sa_family == AF_INET6) + addrlen = sizeof(struct sockaddr_in6); + else + return UV_EINVAL; + + return uv__udp_bind(handle, addr, addrlen, flags); +} + + +int uv_tcp_connect(uv_connect_t* req, + uv_tcp_t* handle, + const struct sockaddr* addr, + uv_connect_cb cb) { + unsigned int addrlen; + + if (handle->type != UV_TCP) + return UV_EINVAL; + + if (addr->sa_family == AF_INET) + addrlen = sizeof(struct sockaddr_in); + else if (addr->sa_family == AF_INET6) + addrlen = sizeof(struct sockaddr_in6); + else + return UV_EINVAL; + + return uv__tcp_connect(req, handle, addr, addrlen, cb); +} + + +int uv_udp_connect(uv_udp_t* handle, const struct sockaddr* addr) { + unsigned int addrlen; + + if (handle->type != UV_UDP) + return UV_EINVAL; + + /* Disconnect the handle */ + if (addr == NULL) { + if (!(handle->flags & UV_HANDLE_UDP_CONNECTED)) + return UV_ENOTCONN; + + return uv__udp_disconnect(handle); + } + + if (addr->sa_family == AF_INET) + addrlen = sizeof(struct sockaddr_in); + else if (addr->sa_family == AF_INET6) + addrlen = sizeof(struct sockaddr_in6); + else + return UV_EINVAL; + + if (handle->flags & UV_HANDLE_UDP_CONNECTED) + return UV_EISCONN; + + return uv__udp_connect(handle, addr, addrlen); +} + + +int uv__udp_is_connected(uv_udp_t* handle) { + struct sockaddr_storage addr; + int addrlen; + if (handle->type != UV_UDP) + return 0; + + addrlen = sizeof(addr); + if (uv_udp_getpeername(handle, (struct sockaddr*) &addr, &addrlen) != 0) + return 0; + + return addrlen > 0; +} + + +int uv__udp_check_before_send(uv_udp_t* handle, const struct sockaddr* addr) { + unsigned int addrlen; + + if (handle->type != UV_UDP) + return UV_EINVAL; + + if (addr != NULL && (handle->flags & UV_HANDLE_UDP_CONNECTED)) + return UV_EISCONN; + + if (addr == NULL && !(handle->flags & UV_HANDLE_UDP_CONNECTED)) + return UV_EDESTADDRREQ; + + if (addr != NULL) { + if (addr->sa_family == AF_INET) + addrlen = sizeof(struct sockaddr_in); + else if (addr->sa_family == AF_INET6) + addrlen = sizeof(struct sockaddr_in6); +#if defined(AF_UNIX) && !defined(_WIN32) + else if (addr->sa_family == AF_UNIX) + addrlen = sizeof(struct sockaddr_un); +#endif + else + return UV_EINVAL; + } else { + addrlen = 0; + } + + return addrlen; +} + + +int uv_udp_send(uv_udp_send_t* req, + uv_udp_t* handle, + const uv_buf_t bufs[], + unsigned int nbufs, + const struct sockaddr* addr, + uv_udp_send_cb send_cb) { + int addrlen; + + addrlen = uv__udp_check_before_send(handle, addr); + if (addrlen < 0) + return addrlen; + + return uv__udp_send(req, handle, bufs, nbufs, addr, addrlen, send_cb); +} + + +int uv_udp_try_send(uv_udp_t* handle, + const uv_buf_t bufs[], + unsigned int nbufs, + const struct sockaddr* addr) { + int addrlen; + + addrlen = uv__udp_check_before_send(handle, addr); + if (addrlen < 0) + return addrlen; + + return uv__udp_try_send(handle, bufs, nbufs, addr, addrlen); +} + + +int uv_udp_recv_start(uv_udp_t* handle, + uv_alloc_cb alloc_cb, + uv_udp_recv_cb recv_cb) { + if (handle->type != UV_UDP || alloc_cb == NULL || recv_cb == NULL) + return UV_EINVAL; + else + return uv__udp_recv_start(handle, alloc_cb, recv_cb); +} + + +int uv_udp_recv_stop(uv_udp_t* handle) { + if (handle->type != UV_UDP) + return UV_EINVAL; + else + return uv__udp_recv_stop(handle); +} + + +void uv_walk(uv_loop_t* loop, uv_walk_cb walk_cb, void* arg) { + QUEUE queue; + QUEUE* q; + uv_handle_t* h; + + QUEUE_MOVE(&loop->handle_queue, &queue); + while (!QUEUE_EMPTY(&queue)) { + q = QUEUE_HEAD(&queue); + h = QUEUE_DATA(q, uv_handle_t, handle_queue); + + QUEUE_REMOVE(q); + QUEUE_INSERT_TAIL(&loop->handle_queue, q); + + if (h->flags & UV_HANDLE_INTERNAL) continue; + walk_cb(h, arg); + } +} + + +static void uv__print_handles(uv_loop_t* loop, int only_active, FILE* stream) { + const char* type; + QUEUE* q; + uv_handle_t* h; + + if (loop == NULL) + loop = uv_default_loop(); + + QUEUE_FOREACH(q, &loop->handle_queue) { + h = QUEUE_DATA(q, uv_handle_t, handle_queue); + + if (only_active && !uv__is_active(h)) + continue; + + switch (h->type) { +#define X(uc, lc) case UV_##uc: type = #lc; break; + UV_HANDLE_TYPE_MAP(X) +#undef X + default: type = ""; + } + + fprintf(stream, + "[%c%c%c] %-8s %p\n", + "R-"[!(h->flags & UV_HANDLE_REF)], + "A-"[!(h->flags & UV_HANDLE_ACTIVE)], + "I-"[!(h->flags & UV_HANDLE_INTERNAL)], + type, + (void*)h); + } +} + + +void uv_print_all_handles(uv_loop_t* loop, FILE* stream) { + uv__print_handles(loop, 0, stream); +} + + +void uv_print_active_handles(uv_loop_t* loop, FILE* stream) { + uv__print_handles(loop, 1, stream); +} + + +void uv_ref(uv_handle_t* handle) { + uv__handle_ref(handle); +} + + +void uv_unref(uv_handle_t* handle) { + uv__handle_unref(handle); +} + + +int uv_has_ref(const uv_handle_t* handle) { + return uv__has_ref(handle); +} + + +void uv_stop(uv_loop_t* loop) { + loop->stop_flag = 1; +} + + +uint64_t uv_now(const uv_loop_t* loop) { + return loop->time; +} + + + +size_t uv__count_bufs(const uv_buf_t bufs[], unsigned int nbufs) { + unsigned int i; + size_t bytes; + + bytes = 0; + for (i = 0; i < nbufs; i++) + bytes += (size_t) bufs[i].len; + + return bytes; +} + +int uv_recv_buffer_size(uv_handle_t* handle, int* value) { + return uv__socket_sockopt(handle, SO_RCVBUF, value); +} + +int uv_send_buffer_size(uv_handle_t* handle, int *value) { + return uv__socket_sockopt(handle, SO_SNDBUF, value); +} + +int uv_fs_event_getpath(uv_fs_event_t* handle, char* buffer, size_t* size) { + size_t required_len; + + if (!uv__is_active(handle)) { + *size = 0; + return UV_EINVAL; + } + + required_len = strlen(handle->path); + if (required_len >= *size) { + *size = required_len + 1; + return UV_ENOBUFS; + } + + memcpy(buffer, handle->path, required_len); + *size = required_len; + buffer[required_len] = '\0'; + + return 0; +} + +/* The windows implementation does not have the same structure layout as + * the unix implementation (nbufs is not directly inside req but is + * contained in a nested union/struct) so this function locates it. +*/ +static unsigned int* uv__get_nbufs(uv_fs_t* req) { +#ifdef _WIN32 + return &req->fs.info.nbufs; +#else + return &req->nbufs; +#endif +} + +/* uv_fs_scandir() uses the system allocator to allocate memory on non-Windows + * systems. So, the memory should be released using free(). On Windows, + * uv__malloc() is used, so use uv__free() to free memory. +*/ +#ifdef _WIN32 +# define uv__fs_scandir_free uv__free +#else +# define uv__fs_scandir_free free +#endif + +void uv__fs_scandir_cleanup(uv_fs_t* req) { + uv__dirent_t** dents; + + unsigned int* nbufs = uv__get_nbufs(req); + + dents = (uv__dirent_t **)req->ptr; + if (*nbufs > 0 && *nbufs != (unsigned int) req->result) + (*nbufs)--; + for (; *nbufs < (unsigned int) req->result; (*nbufs)++) + uv__fs_scandir_free(dents[*nbufs]); + + uv__fs_scandir_free(req->ptr); + req->ptr = NULL; +} + + +int uv_fs_scandir_next(uv_fs_t* req, uv_dirent_t* ent) { + uv__dirent_t** dents; + uv__dirent_t* dent; + unsigned int* nbufs; + + /* Check to see if req passed */ + if (req->result < 0) + return req->result; + + /* Ptr will be null if req was canceled or no files found */ + if (!req->ptr) + return UV_EOF; + + nbufs = uv__get_nbufs(req); + assert(nbufs); + + dents = (uv__dirent_t **)req->ptr; + + /* Free previous entity */ + if (*nbufs > 0) + uv__fs_scandir_free(dents[*nbufs - 1]); + + /* End was already reached */ + if (*nbufs == (unsigned int) req->result) { + uv__fs_scandir_free(dents); + req->ptr = NULL; + return UV_EOF; + } + + dent = dents[(*nbufs)++]; + + ent->name = dent->d_name; + ent->type = uv__fs_get_dirent_type(dent); + + return 0; +} + +uv_dirent_type_t uv__fs_get_dirent_type(uv__dirent_t* dent) { + uv_dirent_type_t type; + +#ifdef HAVE_DIRENT_TYPES + switch (dent->d_type) { + case UV__DT_DIR: + type = UV_DIRENT_DIR; + break; + case UV__DT_FILE: + type = UV_DIRENT_FILE; + break; + case UV__DT_LINK: + type = UV_DIRENT_LINK; + break; + case UV__DT_FIFO: + type = UV_DIRENT_FIFO; + break; + case UV__DT_SOCKET: + type = UV_DIRENT_SOCKET; + break; + case UV__DT_CHAR: + type = UV_DIRENT_CHAR; + break; + case UV__DT_BLOCK: + type = UV_DIRENT_BLOCK; + break; + default: + type = UV_DIRENT_UNKNOWN; + } +#else + type = UV_DIRENT_UNKNOWN; +#endif + + return type; +} + +void uv__fs_readdir_cleanup(uv_fs_t* req) { + uv_dir_t* dir; + uv_dirent_t* dirents; + int i; + + if (req->ptr == NULL) + return; + + dir = (uv_dir_t *)req->ptr; + dirents = dir->dirents; + req->ptr = NULL; + + if (dirents == NULL) + return; + + for (i = 0; i < req->result; ++i) { + uv__free((char*) dirents[i].name); + dirents[i].name = NULL; + } +} + + +int uv_loop_configure(uv_loop_t* loop, uv_loop_option option, ...) { + va_list ap; + int err; + + va_start(ap, option); + /* Any platform-agnostic options should be handled here. */ + err = uv__loop_configure(loop, option, ap); + va_end(ap); + + return err; +} + + +static uv_loop_t default_loop_struct; +static uv_loop_t* default_loop_ptr; + + +uv_loop_t* uv_default_loop(void) { + if (default_loop_ptr != NULL) + return default_loop_ptr; + + if (uv_loop_init(&default_loop_struct)) + return NULL; + + default_loop_ptr = &default_loop_struct; + return default_loop_ptr; +} + + +uv_loop_t* uv_loop_new(void) { + uv_loop_t* loop; + + loop = (uv_loop_t *)uv__malloc(sizeof(*loop)); + if (loop == NULL) + return NULL; + + if (uv_loop_init(loop)) { + uv__free(loop); + return NULL; + } + + return loop; +} + + +int uv_loop_close(uv_loop_t* loop) { + QUEUE* q; + uv_handle_t* h; +#ifndef NDEBUG + void* saved_data; +#endif + + if (uv__has_active_reqs(loop)) + return UV_EBUSY; + + QUEUE_FOREACH(q, &loop->handle_queue) { + h = QUEUE_DATA(q, uv_handle_t, handle_queue); + if (!(h->flags & UV_HANDLE_INTERNAL)) + return UV_EBUSY; + } + + uv__loop_close(loop); + +#ifndef NDEBUG + saved_data = loop->data; + memset(loop, -1, sizeof(*loop)); + loop->data = saved_data; +#endif + if (loop == default_loop_ptr) + default_loop_ptr = NULL; + + return 0; +} + + +void uv_loop_delete(uv_loop_t* loop) { + uv_loop_t* default_loop; + int err; + + default_loop = default_loop_ptr; + + err = uv_loop_close(loop); + (void) err; /* Squelch compiler warnings. */ + assert(err == 0); + if (loop != default_loop) + uv__free(loop); +} + + +void uv_os_free_environ(uv_env_item_t* envitems, int count) { + int i; + + for (i = 0; i < count; i++) { + uv__free(envitems[i].name); + } + + uv__free(envitems); +} + + +void uv_free_cpu_info(uv_cpu_info_t* cpu_infos, int count) { + int i; + + for (i = 0; i < count; i++) + uv__free(cpu_infos[i].model); + + uv__free(cpu_infos); +} + + +#ifdef __GNUC__ /* Also covers __clang__ and __INTEL_COMPILER. */ +__attribute__((destructor)) +#endif +void uv_library_shutdown(void) { + static int was_shutdown; + + if (was_shutdown) + return; + + uv__process_title_cleanup(); + uv__signal_cleanup(); + uv__threadpool_cleanup(); + was_shutdown = 1; +} diff --git a/external/libuv/src/uv-common.h b/external/libuv/src/uv-common.h new file mode 100644 index 000000000..0b0f5f86a --- /dev/null +++ b/external/libuv/src/uv-common.h @@ -0,0 +1,337 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +/* + * This file is private to libuv. It provides common functionality to both + * Windows and Unix backends. + */ + +#ifndef UV_COMMON_H_ +#define UV_COMMON_H_ + +#include +#include +#include + +#if defined(_MSC_VER) && _MSC_VER < 1600 +# include "uv/stdint-msvc2008.h" +#else +# include +#endif + +#include "uv.h" +#include "uv/tree.h" +#include "queue.h" +#include "strscpy.h" + +#if EDOM > 0 +# define UV__ERR(x) (-(x)) +#else +# define UV__ERR(x) (x) +#endif + +#if !defined(snprintf) && defined(_MSC_VER) && _MSC_VER < 1900 +extern int snprintf(char*, size_t, const char*, ...); +#endif + +#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0])) + +#define container_of(ptr, type, member) \ + ((type *) ((char *) (ptr) - offsetof(type, member))) + +#define STATIC_ASSERT(expr) \ + void uv__static_assert(int static_assert_failed[1 - 2 * !(expr)]) + +/* Handle flags. Some flags are specific to Windows or UNIX. */ +enum { + /* Used by all handles. */ + UV_HANDLE_CLOSING = 0x00000001, + UV_HANDLE_CLOSED = 0x00000002, + UV_HANDLE_ACTIVE = 0x00000004, + UV_HANDLE_REF = 0x00000008, + UV_HANDLE_INTERNAL = 0x00000010, + UV_HANDLE_ENDGAME_QUEUED = 0x00000020, + + /* Used by streams. */ + UV_HANDLE_LISTENING = 0x00000040, + UV_HANDLE_CONNECTION = 0x00000080, + UV_HANDLE_SHUTTING = 0x00000100, + UV_HANDLE_SHUT = 0x00000200, + UV_HANDLE_READ_PARTIAL = 0x00000400, + UV_HANDLE_READ_EOF = 0x00000800, + + /* Used by streams and UDP handles. */ + UV_HANDLE_READING = 0x00001000, + UV_HANDLE_BOUND = 0x00002000, + UV_HANDLE_READABLE = 0x00004000, + UV_HANDLE_WRITABLE = 0x00008000, + UV_HANDLE_READ_PENDING = 0x00010000, + UV_HANDLE_SYNC_BYPASS_IOCP = 0x00020000, + UV_HANDLE_ZERO_READ = 0x00040000, + UV_HANDLE_EMULATE_IOCP = 0x00080000, + UV_HANDLE_BLOCKING_WRITES = 0x00100000, + UV_HANDLE_CANCELLATION_PENDING = 0x00200000, + + /* Used by uv_tcp_t and uv_udp_t handles */ + UV_HANDLE_IPV6 = 0x00400000, + + /* Only used by uv_tcp_t handles. */ + UV_HANDLE_TCP_NODELAY = 0x01000000, + UV_HANDLE_TCP_KEEPALIVE = 0x02000000, + UV_HANDLE_TCP_SINGLE_ACCEPT = 0x04000000, + UV_HANDLE_TCP_ACCEPT_STATE_CHANGING = 0x08000000, + UV_HANDLE_TCP_SOCKET_CLOSED = 0x10000000, + UV_HANDLE_SHARED_TCP_SOCKET = 0x20000000, + + /* Only used by uv_udp_t handles. */ + UV_HANDLE_UDP_PROCESSING = 0x01000000, + UV_HANDLE_UDP_CONNECTED = 0x02000000, + UV_HANDLE_UDP_RECVMMSG = 0x04000000, + + /* Only used by uv_pipe_t handles. */ + UV_HANDLE_NON_OVERLAPPED_PIPE = 0x01000000, + UV_HANDLE_PIPESERVER = 0x02000000, + + /* Only used by uv_tty_t handles. */ + UV_HANDLE_TTY_READABLE = 0x01000000, + UV_HANDLE_TTY_RAW = 0x02000000, + UV_HANDLE_TTY_SAVED_POSITION = 0x04000000, + UV_HANDLE_TTY_SAVED_ATTRIBUTES = 0x08000000, + + /* Only used by uv_signal_t handles. */ + UV_SIGNAL_ONE_SHOT_DISPATCHED = 0x01000000, + UV_SIGNAL_ONE_SHOT = 0x02000000, + + /* Only used by uv_poll_t handles. */ + UV_HANDLE_POLL_SLOW = 0x01000000 +}; + +int uv__loop_configure(uv_loop_t* loop, uv_loop_option option, va_list ap); + +void uv__loop_close(uv_loop_t* loop); + +int uv__tcp_bind(uv_tcp_t* tcp, + const struct sockaddr* addr, + unsigned int addrlen, + unsigned int flags); + +int uv__tcp_connect(uv_connect_t* req, + uv_tcp_t* handle, + const struct sockaddr* addr, + unsigned int addrlen, + uv_connect_cb cb); + +int uv__udp_init_ex(uv_loop_t* loop, + uv_udp_t* handle, + unsigned flags, + int domain); + +int uv__udp_bind(uv_udp_t* handle, + const struct sockaddr* addr, + unsigned int addrlen, + unsigned int flags); + +int uv__udp_connect(uv_udp_t* handle, + const struct sockaddr* addr, + unsigned int addrlen); + +int uv__udp_disconnect(uv_udp_t* handle); + +int uv__udp_is_connected(uv_udp_t* handle); + +int uv__udp_send(uv_udp_send_t* req, + uv_udp_t* handle, + const uv_buf_t bufs[], + unsigned int nbufs, + const struct sockaddr* addr, + unsigned int addrlen, + uv_udp_send_cb send_cb); + +int uv__udp_try_send(uv_udp_t* handle, + const uv_buf_t bufs[], + unsigned int nbufs, + const struct sockaddr* addr, + unsigned int addrlen); + +int uv__udp_recv_start(uv_udp_t* handle, uv_alloc_cb alloccb, + uv_udp_recv_cb recv_cb); + +int uv__udp_recv_stop(uv_udp_t* handle); + +void uv__fs_poll_close(uv_fs_poll_t* handle); + +int uv__getaddrinfo_translate_error(int sys_err); /* EAI_* error. */ + +enum uv__work_kind { + UV__WORK_CPU, + UV__WORK_FAST_IO, + UV__WORK_SLOW_IO +}; + +void uv__work_submit(uv_loop_t* loop, + struct uv__work *w, + enum uv__work_kind kind, + void (*work)(struct uv__work *w), + void (*done)(struct uv__work *w, int status)); + +void uv__work_done(uv_async_t* handle); + +size_t uv__count_bufs(const uv_buf_t bufs[], unsigned int nbufs); + +int uv__socket_sockopt(uv_handle_t* handle, int optname, int* value); + +void uv__fs_scandir_cleanup(uv_fs_t* req); +void uv__fs_readdir_cleanup(uv_fs_t* req); +uv_dirent_type_t uv__fs_get_dirent_type(uv__dirent_t* dent); + +int uv__next_timeout(const uv_loop_t* loop); +void uv__run_timers(uv_loop_t* loop); +void uv__timer_close(uv_timer_t* handle); + +void uv__process_title_cleanup(void); +void uv__signal_cleanup(void); +void uv__threadpool_cleanup(void); + +#define uv__has_active_reqs(loop) \ + ((loop)->active_reqs.count > 0) + +#define uv__req_register(loop, req) \ + do { \ + (loop)->active_reqs.count++; \ + } \ + while (0) + +#define uv__req_unregister(loop, req) \ + do { \ + assert(uv__has_active_reqs(loop)); \ + (loop)->active_reqs.count--; \ + } \ + while (0) + +#define uv__has_active_handles(loop) \ + ((loop)->active_handles > 0) + +#define uv__active_handle_add(h) \ + do { \ + (h)->loop->active_handles++; \ + } \ + while (0) + +#define uv__active_handle_rm(h) \ + do { \ + (h)->loop->active_handles--; \ + } \ + while (0) + +#define uv__is_active(h) \ + (((h)->flags & UV_HANDLE_ACTIVE) != 0) + +#define uv__is_closing(h) \ + (((h)->flags & (UV_HANDLE_CLOSING | UV_HANDLE_CLOSED)) != 0) + +#define uv__handle_start(h) \ + do { \ + if (((h)->flags & UV_HANDLE_ACTIVE) != 0) break; \ + (h)->flags |= UV_HANDLE_ACTIVE; \ + if (((h)->flags & UV_HANDLE_REF) != 0) uv__active_handle_add(h); \ + } \ + while (0) + +#define uv__handle_stop(h) \ + do { \ + if (((h)->flags & UV_HANDLE_ACTIVE) == 0) break; \ + (h)->flags &= ~UV_HANDLE_ACTIVE; \ + if (((h)->flags & UV_HANDLE_REF) != 0) uv__active_handle_rm(h); \ + } \ + while (0) + +#define uv__handle_ref(h) \ + do { \ + if (((h)->flags & UV_HANDLE_REF) != 0) break; \ + (h)->flags |= UV_HANDLE_REF; \ + if (((h)->flags & UV_HANDLE_CLOSING) != 0) break; \ + if (((h)->flags & UV_HANDLE_ACTIVE) != 0) uv__active_handle_add(h); \ + } \ + while (0) + +#define uv__handle_unref(h) \ + do { \ + if (((h)->flags & UV_HANDLE_REF) == 0) break; \ + (h)->flags &= ~UV_HANDLE_REF; \ + if (((h)->flags & UV_HANDLE_CLOSING) != 0) break; \ + if (((h)->flags & UV_HANDLE_ACTIVE) != 0) uv__active_handle_rm(h); \ + } \ + while (0) + +#define uv__has_ref(h) \ + (((h)->flags & UV_HANDLE_REF) != 0) + +#if defined(_WIN32) +# define uv__handle_platform_init(h) ((h)->u.fd = -1) +#else +# define uv__handle_platform_init(h) ((h)->next_closing = NULL) +#endif + +#define uv__handle_init(loop_, h, type_) \ + do { \ + (h)->loop = (loop_); \ + (h)->type = (type_); \ + (h)->flags = UV_HANDLE_REF; /* Ref the loop when active. */ \ + QUEUE_INSERT_TAIL(&(loop_)->handle_queue, &(h)->handle_queue); \ + uv__handle_platform_init(h); \ + } \ + while (0) + +/* Note: uses an open-coded version of SET_REQ_SUCCESS() because of + * a circular dependency between src/uv-common.h and src/win/internal.h. + */ +#if defined(_WIN32) +# define UV_REQ_INIT(req, typ) \ + do { \ + (req)->type = (typ); \ + (req)->u.io.overlapped.Internal = 0; /* SET_REQ_SUCCESS() */ \ + } \ + while (0) +#else +# define UV_REQ_INIT(req, typ) \ + do { \ + (req)->type = (typ); \ + } \ + while (0) +#endif + +#define uv__req_init(loop, req, typ) \ + do { \ + UV_REQ_INIT(req, typ); \ + uv__req_register(loop, req); \ + } \ + while (0) + +/* Allocator prototypes */ +void *uv__calloc(size_t count, size_t size); +char *uv__strdup(const char* s); +char *uv__strndup(const char* s, size_t n); +void* uv__malloc(size_t size); +void uv__free(void* ptr); +void* uv__realloc(void* ptr, size_t size); +void* uv__reallocf(void* ptr, size_t size); + +#endif /* UV_COMMON_H_ */ diff --git a/external/libuv/src/uv-data-getter-setters.c b/external/libuv/src/uv-data-getter-setters.c new file mode 100644 index 000000000..c3025662f --- /dev/null +++ b/external/libuv/src/uv-data-getter-setters.c @@ -0,0 +1,98 @@ +#include "uv.h" + +const char* uv_handle_type_name(uv_handle_type type) { + switch (type) { +#define XX(uc,lc) case UV_##uc: return #lc; + UV_HANDLE_TYPE_MAP(XX) +#undef XX + case UV_FILE: return "file"; + case UV_HANDLE_TYPE_MAX: + case UV_UNKNOWN_HANDLE: return NULL; + } + return NULL; +} + +uv_handle_type uv_handle_get_type(const uv_handle_t* handle) { + return handle->type; +} + +void* uv_handle_get_data(const uv_handle_t* handle) { + return handle->data; +} + +uv_loop_t* uv_handle_get_loop(const uv_handle_t* handle) { + return handle->loop; +} + +void uv_handle_set_data(uv_handle_t* handle, void* data) { + handle->data = data; +} + +const char* uv_req_type_name(uv_req_type type) { + switch (type) { +#define XX(uc,lc) case UV_##uc: return #lc; + UV_REQ_TYPE_MAP(XX) +#undef XX + case UV_REQ_TYPE_MAX: + case UV_UNKNOWN_REQ: + default: /* UV_REQ_TYPE_PRIVATE */ + break; + } + return NULL; +} + +uv_req_type uv_req_get_type(const uv_req_t* req) { + return req->type; +} + +void* uv_req_get_data(const uv_req_t* req) { + return req->data; +} + +void uv_req_set_data(uv_req_t* req, void* data) { + req->data = data; +} + +size_t uv_stream_get_write_queue_size(const uv_stream_t* stream) { + return stream->write_queue_size; +} + +size_t uv_udp_get_send_queue_size(const uv_udp_t* handle) { + return handle->send_queue_size; +} + +size_t uv_udp_get_send_queue_count(const uv_udp_t* handle) { + return handle->send_queue_count; +} + +uv_pid_t uv_process_get_pid(const uv_process_t* proc) { + return proc->pid; +} + +uv_fs_type uv_fs_get_type(const uv_fs_t* req) { + return req->fs_type; +} + +ssize_t uv_fs_get_result(const uv_fs_t* req) { + return req->result; +} + +void* uv_fs_get_ptr(const uv_fs_t* req) { + return req->ptr; +} + +const char* uv_fs_get_path(const uv_fs_t* req) { + return req->path; +} + +uv_stat_t* uv_fs_get_statbuf(uv_fs_t* req) { + return &req->statbuf; +} + +void* uv_loop_get_data(const uv_loop_t* loop) { + return loop->data; +} + +void uv_loop_set_data(uv_loop_t* loop, void* data) { + loop->data = data; +} diff --git a/external/libuv/src/version.c b/external/libuv/src/version.c new file mode 100644 index 000000000..686dedd98 --- /dev/null +++ b/external/libuv/src/version.c @@ -0,0 +1,45 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#include "uv.h" + +#define UV_STRINGIFY(v) UV_STRINGIFY_HELPER(v) +#define UV_STRINGIFY_HELPER(v) #v + +#define UV_VERSION_STRING_BASE UV_STRINGIFY(UV_VERSION_MAJOR) "." \ + UV_STRINGIFY(UV_VERSION_MINOR) "." \ + UV_STRINGIFY(UV_VERSION_PATCH) + +#if UV_VERSION_IS_RELEASE +# define UV_VERSION_STRING UV_VERSION_STRING_BASE +#else +# define UV_VERSION_STRING UV_VERSION_STRING_BASE "-" UV_VERSION_SUFFIX +#endif + + +unsigned int uv_version(void) { + return UV_VERSION_HEX; +} + + +const char* uv_version_string(void) { + return UV_VERSION_STRING; +} diff --git a/external/libuv/src/win/async.c b/external/libuv/src/win/async.c new file mode 100644 index 000000000..d787f6604 --- /dev/null +++ b/external/libuv/src/win/async.c @@ -0,0 +1,98 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#include + +#include "uv.h" +#include "internal.h" +#include "atomicops-inl.h" +#include "handle-inl.h" +#include "req-inl.h" + + +void uv_async_endgame(uv_loop_t* loop, uv_async_t* handle) { + if (handle->flags & UV_HANDLE_CLOSING && + !handle->async_sent) { + assert(!(handle->flags & UV_HANDLE_CLOSED)); + uv__handle_close(handle); + } +} + + +int uv_async_init(uv_loop_t* loop, uv_async_t* handle, uv_async_cb async_cb) { + uv_req_t* req; + + uv__handle_init(loop, (uv_handle_t*) handle, UV_ASYNC); + handle->async_sent = 0; + handle->async_cb = async_cb; + + req = &handle->async_req; + UV_REQ_INIT(req, UV_WAKEUP); + req->data = handle; + + uv__handle_start(handle); + + return 0; +} + + +void uv_async_close(uv_loop_t* loop, uv_async_t* handle) { + if (!((uv_async_t*)handle)->async_sent) { + uv_want_endgame(loop, (uv_handle_t*) handle); + } + + uv__handle_closing(handle); +} + + +int uv_async_send(uv_async_t* handle) { + uv_loop_t* loop = handle->loop; + + if (handle->type != UV_ASYNC) { + /* Can't set errno because that's not thread-safe. */ + return -1; + } + + /* The user should make sure never to call uv_async_send to a closing or + * closed handle. */ + assert(!(handle->flags & UV_HANDLE_CLOSING)); + + if (!uv__atomic_exchange_set(&handle->async_sent)) { + POST_COMPLETION_FOR_REQ(loop, &handle->async_req); + } + + return 0; +} + + +void uv_process_async_wakeup_req(uv_loop_t* loop, uv_async_t* handle, + uv_req_t* req) { + assert(handle->type == UV_ASYNC); + assert(req->type == UV_WAKEUP); + + handle->async_sent = 0; + + if (handle->flags & UV_HANDLE_CLOSING) { + uv_want_endgame(loop, (uv_handle_t*)handle); + } else if (handle->async_cb != NULL) { + handle->async_cb(handle); + } +} diff --git a/external/libuv/src/win/atomicops-inl.h b/external/libuv/src/win/atomicops-inl.h new file mode 100644 index 000000000..52713cf30 --- /dev/null +++ b/external/libuv/src/win/atomicops-inl.h @@ -0,0 +1,57 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#ifndef UV_WIN_ATOMICOPS_INL_H_ +#define UV_WIN_ATOMICOPS_INL_H_ + +#include "uv.h" +#include "internal.h" + + +/* Atomic set operation on char */ +#ifdef _MSC_VER /* MSVC */ + +/* _InterlockedOr8 is supported by MSVC on x32 and x64. It is slightly less + * efficient than InterlockedExchange, but InterlockedExchange8 does not exist, + * and interlocked operations on larger targets might require the target to be + * aligned. */ +#pragma intrinsic(_InterlockedOr8) + +static char INLINE uv__atomic_exchange_set(char volatile* target) { + return _InterlockedOr8(target, 1); +} + +#else /* GCC */ + +/* Mingw-32 version, hopefully this works for 64-bit gcc as well. */ +static inline char uv__atomic_exchange_set(char volatile* target) { + const char one = 1; + char old_value; + __asm__ __volatile__ ("lock xchgb %0, %1\n\t" + : "=r"(old_value), "=m"(*target) + : "0"(one), "m"(*target) + : "memory"); + return old_value; +} + +#endif + +#endif /* UV_WIN_ATOMICOPS_INL_H_ */ diff --git a/external/libuv/src/win/core.c b/external/libuv/src/win/core.c new file mode 100644 index 000000000..4d0de7baa --- /dev/null +++ b/external/libuv/src/win/core.c @@ -0,0 +1,657 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#include +#include +#include +#include +#include +#include +#if defined(_MSC_VER) || defined(__MINGW64_VERSION_MAJOR) +#include +#endif + +#include "uv.h" +#include "internal.h" +#include "queue.h" +#include "handle-inl.h" +#include "heap-inl.h" +#include "req-inl.h" + +/* uv_once initialization guards */ +static uv_once_t uv_init_guard_ = UV_ONCE_INIT; + + +#if defined(_DEBUG) && (defined(_MSC_VER) || defined(__MINGW64_VERSION_MAJOR)) +/* Our crt debug report handler allows us to temporarily disable asserts + * just for the current thread. + */ + +UV_THREAD_LOCAL int uv__crt_assert_enabled = TRUE; + +static int uv__crt_dbg_report_handler(int report_type, char *message, int *ret_val) { + if (uv__crt_assert_enabled || report_type != _CRT_ASSERT) + return FALSE; + + if (ret_val) { + /* Set ret_val to 0 to continue with normal execution. + * Set ret_val to 1 to trigger a breakpoint. + */ + + if(IsDebuggerPresent()) + *ret_val = 1; + else + *ret_val = 0; + } + + /* Don't call _CrtDbgReport. */ + return TRUE; +} +#else +UV_THREAD_LOCAL int uv__crt_assert_enabled = FALSE; +#endif + + +#if !defined(__MINGW32__) || __MSVCRT_VERSION__ >= 0x800 +static void uv__crt_invalid_parameter_handler(const wchar_t* expression, + const wchar_t* function, const wchar_t * file, unsigned int line, + uintptr_t reserved) { + /* No-op. */ +} +#endif + +static uv_loop_t** uv__loops; +static int uv__loops_size; +static int uv__loops_capacity; +#define UV__LOOPS_CHUNK_SIZE 8 +static uv_mutex_t uv__loops_lock; + +static void uv__loops_init(void) { + uv_mutex_init(&uv__loops_lock); +} + +static int uv__loops_add(uv_loop_t* loop) { + uv_loop_t** new_loops; + int new_capacity, i; + + uv_mutex_lock(&uv__loops_lock); + + if (uv__loops_size == uv__loops_capacity) { + new_capacity = uv__loops_capacity + UV__LOOPS_CHUNK_SIZE; + new_loops = (uv_loop_t **)uv__realloc(uv__loops, sizeof(uv_loop_t*) * new_capacity); + if (!new_loops) + goto failed_loops_realloc; + uv__loops = new_loops; + for (i = uv__loops_capacity; i < new_capacity; ++i) + uv__loops[i] = NULL; + uv__loops_capacity = new_capacity; + } + uv__loops[uv__loops_size] = loop; + ++uv__loops_size; + + uv_mutex_unlock(&uv__loops_lock); + return 0; + +failed_loops_realloc: + uv_mutex_unlock(&uv__loops_lock); + return ERROR_OUTOFMEMORY; +} + +static void uv__loops_remove(uv_loop_t* loop) { + int loop_index; + int smaller_capacity; + uv_loop_t** new_loops; + + uv_mutex_lock(&uv__loops_lock); + + for (loop_index = 0; loop_index < uv__loops_size; ++loop_index) { + if (uv__loops[loop_index] == loop) + break; + } + /* If loop was not found, ignore */ + if (loop_index == uv__loops_size) + goto loop_removed; + + uv__loops[loop_index] = uv__loops[uv__loops_size - 1]; + uv__loops[uv__loops_size - 1] = NULL; + --uv__loops_size; + + if (uv__loops_size == 0) { + uv__loops_capacity = 0; + uv__free(uv__loops); + uv__loops = NULL; + goto loop_removed; + } + + /* If we didn't grow to big skip downsizing */ + if (uv__loops_capacity < 4 * UV__LOOPS_CHUNK_SIZE) + goto loop_removed; + + /* Downsize only if more than half of buffer is free */ + smaller_capacity = uv__loops_capacity / 2; + if (uv__loops_size >= smaller_capacity) + goto loop_removed; + new_loops = (uv_loop_t **)uv__realloc(uv__loops, sizeof(uv_loop_t*) * smaller_capacity); + if (!new_loops) + goto loop_removed; + uv__loops = new_loops; + uv__loops_capacity = smaller_capacity; + +loop_removed: + uv_mutex_unlock(&uv__loops_lock); +} + +void uv__wake_all_loops(void) { + int i; + uv_loop_t* loop; + + uv_mutex_lock(&uv__loops_lock); + for (i = 0; i < uv__loops_size; ++i) { + loop = uv__loops[i]; + assert(loop); + if (loop->iocp != INVALID_HANDLE_VALUE) + PostQueuedCompletionStatus(loop->iocp, 0, 0, NULL); + } + uv_mutex_unlock(&uv__loops_lock); +} + +static void uv_init(void) { + /* Tell Windows that we will handle critical errors. */ + SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX | + SEM_NOOPENFILEERRORBOX); + + /* Tell the CRT to not exit the application when an invalid parameter is + * passed. The main issue is that invalid FDs will trigger this behavior. + */ +#if !defined(__MINGW32__) || __MSVCRT_VERSION__ >= 0x800 + _set_invalid_parameter_handler(uv__crt_invalid_parameter_handler); +#endif + + /* We also need to setup our debug report handler because some CRT + * functions (eg _get_osfhandle) raise an assert when called with invalid + * FDs even though they return the proper error code in the release build. + */ +#if defined(_DEBUG) && (defined(_MSC_VER) || defined(__MINGW64_VERSION_MAJOR)) + _CrtSetReportHook(uv__crt_dbg_report_handler); +#endif + + /* Initialize tracking of all uv loops */ + uv__loops_init(); + + /* Fetch winapi function pointers. This must be done first because other + * initialization code might need these function pointers to be loaded. + */ + uv_winapi_init(); + + /* Initialize winsock */ + uv_winsock_init(); + + /* Initialize FS */ + uv_fs_init(); + + /* Initialize signal stuff */ + uv_signals_init(); + + /* Initialize console */ + uv_console_init(); + + /* Initialize utilities */ + uv__util_init(); + + /* Initialize system wakeup detection */ + uv__init_detect_system_wakeup(); +} + + +int uv_loop_init(uv_loop_t* loop) { + struct heap* timer_heap; + int err; + + /* Initialize libuv itself first */ + uv__once_init(); + + /* Create an I/O completion port */ + loop->iocp = CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, 0, 1); + if (loop->iocp == NULL) + return uv_translate_sys_error(GetLastError()); + + /* To prevent uninitialized memory access, loop->time must be initialized + * to zero before calling uv_update_time for the first time. + */ + loop->time = 0; + uv_update_time(loop); + + QUEUE_INIT(&loop->wq); + QUEUE_INIT(&loop->handle_queue); + loop->active_reqs.count = 0; + loop->active_handles = 0; + + loop->pending_reqs_tail = NULL; + + loop->endgame_handles = NULL; + + loop->timer_heap = timer_heap = (struct heap *)uv__malloc(sizeof(*timer_heap)); + if (timer_heap == NULL) { + err = UV_ENOMEM; + goto fail_timers_alloc; + } + + heap_init(timer_heap); + + loop->check_handles = NULL; + loop->prepare_handles = NULL; + loop->idle_handles = NULL; + + loop->next_prepare_handle = NULL; + loop->next_check_handle = NULL; + loop->next_idle_handle = NULL; + + memset(&loop->poll_peer_sockets, 0, sizeof loop->poll_peer_sockets); + + loop->active_tcp_streams = 0; + loop->active_udp_streams = 0; + + loop->timer_counter = 0; + loop->stop_flag = 0; + + err = uv_mutex_init(&loop->wq_mutex); + if (err) + goto fail_mutex_init; + + err = uv_async_init(loop, &loop->wq_async, uv__work_done); + if (err) + goto fail_async_init; + + uv__handle_unref(&loop->wq_async); + loop->wq_async.flags |= UV_HANDLE_INTERNAL; + + err = uv__loops_add(loop); + if (err) + goto fail_async_init; + + return 0; + +fail_async_init: + uv_mutex_destroy(&loop->wq_mutex); + +fail_mutex_init: + uv__free(timer_heap); + loop->timer_heap = NULL; + +fail_timers_alloc: + CloseHandle(loop->iocp); + loop->iocp = INVALID_HANDLE_VALUE; + + return err; +} + + +void uv_update_time(uv_loop_t* loop) { + uint64_t new_time = uv__hrtime(1000); + assert(new_time >= loop->time); + loop->time = new_time; +} + + +void uv__once_init(void) { + uv_once(&uv_init_guard_, uv_init); +} + + +void uv__loop_close(uv_loop_t* loop) { + size_t i; + + uv__loops_remove(loop); + + /* Close the async handle without needing an extra loop iteration. + * We might have a pending message, but we're just going to destroy the IOCP + * soon, so we can just discard it now without the usual risk of a getting + * another notification from GetQueuedCompletionStatusEx after calling the + * close_cb (which we also skip defining). We'll assert later that queue was + * actually empty and all reqs handled. */ + loop->wq_async.async_sent = 0; + loop->wq_async.close_cb = NULL; + uv__handle_closing(&loop->wq_async); + uv__handle_close(&loop->wq_async); + + for (i = 0; i < ARRAY_SIZE(loop->poll_peer_sockets); i++) { + SOCKET sock = loop->poll_peer_sockets[i]; + if (sock != 0 && sock != INVALID_SOCKET) + closesocket(sock); + } + + uv_mutex_lock(&loop->wq_mutex); + assert(QUEUE_EMPTY(&loop->wq) && "thread pool work queue not empty!"); + assert(!uv__has_active_reqs(loop)); + uv_mutex_unlock(&loop->wq_mutex); + uv_mutex_destroy(&loop->wq_mutex); + + uv__free(loop->timer_heap); + loop->timer_heap = NULL; + + CloseHandle(loop->iocp); +} + + +int uv__loop_configure(uv_loop_t* loop, uv_loop_option option, va_list ap) { + return UV_ENOSYS; +} + + +int uv_backend_fd(const uv_loop_t* loop) { + return -1; +} + + +int uv_loop_fork(uv_loop_t* loop) { + return UV_ENOSYS; +} + + +int uv_backend_timeout(const uv_loop_t* loop) { + if (loop->stop_flag != 0) + return 0; + + if (!uv__has_active_handles(loop) && !uv__has_active_reqs(loop)) + return 0; + + if (loop->pending_reqs_tail) + return 0; + + if (loop->endgame_handles) + return 0; + + if (loop->idle_handles) + return 0; + + return uv__next_timeout(loop); +} + + +static void uv__poll_wine(uv_loop_t* loop, DWORD timeout) { + DWORD bytes; + ULONG_PTR key; + OVERLAPPED* overlapped; + uv_req_t* req; + int repeat; + uint64_t timeout_time; + + timeout_time = loop->time + timeout; + + for (repeat = 0; ; repeat++) { + GetQueuedCompletionStatus(loop->iocp, + &bytes, + &key, + &overlapped, + timeout); + + if (overlapped) { + /* Package was dequeued */ + req = uv_overlapped_to_req(overlapped); + uv_insert_pending_req(loop, req); + + /* Some time might have passed waiting for I/O, + * so update the loop time here. + */ + uv_update_time(loop); + } else if (GetLastError() != WAIT_TIMEOUT) { + /* Serious error */ + uv_fatal_error(GetLastError(), "GetQueuedCompletionStatus"); + } else if (timeout > 0) { + /* GetQueuedCompletionStatus can occasionally return a little early. + * Make sure that the desired timeout target time is reached. + */ + uv_update_time(loop); + if (timeout_time > loop->time) { + timeout = (DWORD)(timeout_time - loop->time); + /* The first call to GetQueuedCompletionStatus should return very + * close to the target time and the second should reach it, but + * this is not stated in the documentation. To make sure a busy + * loop cannot happen, the timeout is increased exponentially + * starting on the third round. + */ + timeout += repeat ? (1 << (repeat - 1)) : 0; + continue; + } + } + break; + } +} + + +static void uv__poll(uv_loop_t* loop, DWORD timeout) { + BOOL success; + uv_req_t* req; + OVERLAPPED_ENTRY overlappeds[128]; + ULONG count; + ULONG i; + int repeat; + uint64_t timeout_time; + + timeout_time = loop->time + timeout; + + for (repeat = 0; ; repeat++) { + success = pGetQueuedCompletionStatusEx(loop->iocp, + overlappeds, + ARRAY_SIZE(overlappeds), + &count, + timeout, + FALSE); + + if (success) { + for (i = 0; i < count; i++) { + /* Package was dequeued, but see if it is not a empty package + * meant only to wake us up. + */ + if (overlappeds[i].lpOverlapped) { + req = uv_overlapped_to_req(overlappeds[i].lpOverlapped); + uv_insert_pending_req(loop, req); + } + } + + /* Some time might have passed waiting for I/O, + * so update the loop time here. + */ + uv_update_time(loop); + } else if (GetLastError() != WAIT_TIMEOUT) { + /* Serious error */ + uv_fatal_error(GetLastError(), "GetQueuedCompletionStatusEx"); + } else if (timeout > 0) { + /* GetQueuedCompletionStatus can occasionally return a little early. + * Make sure that the desired timeout target time is reached. + */ + uv_update_time(loop); + if (timeout_time > loop->time) { + timeout = (DWORD)(timeout_time - loop->time); + /* The first call to GetQueuedCompletionStatus should return very + * close to the target time and the second should reach it, but + * this is not stated in the documentation. To make sure a busy + * loop cannot happen, the timeout is increased exponentially + * starting on the third round. + */ + timeout += repeat ? (1 << (repeat - 1)) : 0; + continue; + } + } + break; + } +} + + +static int uv__loop_alive(const uv_loop_t* loop) { + return uv__has_active_handles(loop) || + uv__has_active_reqs(loop) || + loop->endgame_handles != NULL; +} + + +int uv_loop_alive(const uv_loop_t* loop) { + return uv__loop_alive(loop); +} + + +int uv_run(uv_loop_t *loop, uv_run_mode mode) { + DWORD timeout; + int r; + int ran_pending; + + r = uv__loop_alive(loop); + if (!r) + uv_update_time(loop); + + while (r != 0 && loop->stop_flag == 0) { + uv_update_time(loop); + uv__run_timers(loop); + + ran_pending = uv_process_reqs(loop); + uv_idle_invoke(loop); + uv_prepare_invoke(loop); + + timeout = 0; + if ((mode == UV_RUN_ONCE && !ran_pending) || mode == UV_RUN_DEFAULT) + timeout = uv_backend_timeout(loop); + + if (pGetQueuedCompletionStatusEx) + uv__poll(loop, timeout); + else + uv__poll_wine(loop, timeout); + + + uv_check_invoke(loop); + uv_process_endgames(loop); + + if (mode == UV_RUN_ONCE) { + /* UV_RUN_ONCE implies forward progress: at least one callback must have + * been invoked when it returns. uv__io_poll() can return without doing + * I/O (meaning: no callbacks) when its timeout expires - which means we + * have pending timers that satisfy the forward progress constraint. + * + * UV_RUN_NOWAIT makes no guarantees about progress so it's omitted from + * the check. + */ + uv__run_timers(loop); + } + + r = uv__loop_alive(loop); + if (mode == UV_RUN_ONCE || mode == UV_RUN_NOWAIT) + break; + } + + /* The if statement lets the compiler compile it to a conditional store. + * Avoids dirtying a cache line. + */ + if (loop->stop_flag != 0) + loop->stop_flag = 0; + + return r; +} + + +int uv_fileno(const uv_handle_t* handle, uv_os_fd_t* fd) { + uv_os_fd_t fd_out; + + switch (handle->type) { + case UV_TCP: + fd_out = (uv_os_fd_t)((uv_tcp_t*) handle)->socket; + break; + + case UV_NAMED_PIPE: + fd_out = ((uv_pipe_t*) handle)->handle; + break; + + case UV_TTY: + fd_out = ((uv_tty_t*) handle)->handle; + break; + + case UV_UDP: + fd_out = (uv_os_fd_t)((uv_udp_t*) handle)->socket; + break; + + case UV_POLL: + fd_out = (uv_os_fd_t)((uv_poll_t*) handle)->socket; + break; + + default: + return UV_EINVAL; + } + + if (uv_is_closing(handle) || fd_out == INVALID_HANDLE_VALUE) + return UV_EBADF; + + *fd = fd_out; + return 0; +} + + +int uv__socket_sockopt(uv_handle_t* handle, int optname, int* value) { + int r; + int len; + SOCKET socket; + + if (handle == NULL || value == NULL) + return UV_EINVAL; + + if (handle->type == UV_TCP) + socket = ((uv_tcp_t*) handle)->socket; + else if (handle->type == UV_UDP) + socket = ((uv_udp_t*) handle)->socket; + else + return UV_ENOTSUP; + + len = sizeof(*value); + + if (*value == 0) + r = getsockopt(socket, SOL_SOCKET, optname, (char*) value, &len); + else + r = setsockopt(socket, SOL_SOCKET, optname, (const char*) value, len); + + if (r == SOCKET_ERROR) + return uv_translate_sys_error(WSAGetLastError()); + + return 0; +} + +int uv_cpumask_size(void) { + return (int)(sizeof(DWORD_PTR) * 8); +} + +int uv__getsockpeername(const uv_handle_t* handle, + uv__peersockfunc func, + struct sockaddr* name, + int* namelen, + int delayed_error) { + + int result; + uv_os_fd_t fd; + + result = uv_fileno(handle, &fd); + if (result != 0) + return result; + + if (delayed_error) + return uv_translate_sys_error(delayed_error); + + result = func((SOCKET) fd, name, namelen); + if (result != 0) + return uv_translate_sys_error(WSAGetLastError()); + + return 0; +} diff --git a/external/libuv/src/win/detect-wakeup.c b/external/libuv/src/win/detect-wakeup.c new file mode 100644 index 000000000..72dfb7a17 --- /dev/null +++ b/external/libuv/src/win/detect-wakeup.c @@ -0,0 +1,35 @@ +#include "uv.h" +#include "internal.h" +#include "winapi.h" + +static void uv__register_system_resume_callback(void); + +void uv__init_detect_system_wakeup(void) { + /* Try registering system power event callback. This is the cleanest + * method, but it will only work on Win8 and above. + */ + uv__register_system_resume_callback(); +} + +static ULONG CALLBACK uv__system_resume_callback(PVOID Context, + ULONG Type, + PVOID Setting) { + if (Type == PBT_APMRESUMESUSPEND || Type == PBT_APMRESUMEAUTOMATIC) + uv__wake_all_loops(); + + return 0; +} + +static void uv__register_system_resume_callback(void) { + _DEVICE_NOTIFY_SUBSCRIBE_PARAMETERS recipient; + _HPOWERNOTIFY registration_handle; + + if (pPowerRegisterSuspendResumeNotification == NULL) + return; + + recipient.Callback = uv__system_resume_callback; + recipient.Context = NULL; + (*pPowerRegisterSuspendResumeNotification)(DEVICE_NOTIFY_CALLBACK, + &recipient, + ®istration_handle); +} diff --git a/external/libuv/src/win/dl.c b/external/libuv/src/win/dl.c new file mode 100644 index 000000000..676be4dc7 --- /dev/null +++ b/external/libuv/src/win/dl.c @@ -0,0 +1,136 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#include "uv.h" +#include "internal.h" + +static int uv__dlerror(uv_lib_t* lib, const char* filename, DWORD errorno); + + +int uv_dlopen(const char* filename, uv_lib_t* lib) { + WCHAR filename_w[32768]; + + lib->handle = NULL; + lib->errmsg = NULL; + + if (!MultiByteToWideChar(CP_UTF8, + 0, + filename, + -1, + filename_w, + ARRAY_SIZE(filename_w))) { + return uv__dlerror(lib, filename, GetLastError()); + } + + lib->handle = LoadLibraryExW(filename_w, NULL, LOAD_WITH_ALTERED_SEARCH_PATH); + if (lib->handle == NULL) { + return uv__dlerror(lib, filename, GetLastError()); + } + + return 0; +} + + +void uv_dlclose(uv_lib_t* lib) { + if (lib->errmsg) { + LocalFree((void*)lib->errmsg); + lib->errmsg = NULL; + } + + if (lib->handle) { + /* Ignore errors. No good way to signal them without leaking memory. */ + FreeLibrary(lib->handle); + lib->handle = NULL; + } +} + + +int uv_dlsym(uv_lib_t* lib, const char* name, void** ptr) { + /* Cast though integer to suppress pedantic warning about forbidden cast. */ + *ptr = (void*)(uintptr_t) GetProcAddress(lib->handle, name); + return uv__dlerror(lib, "", *ptr ? 0 : GetLastError()); +} + + +const char* uv_dlerror(const uv_lib_t* lib) { + return lib->errmsg ? lib->errmsg : "no error"; +} + + +static void uv__format_fallback_error(uv_lib_t* lib, int errorno){ + static const CHAR fallback_error[] = "error: %1!d!"; + DWORD_PTR args[1]; + args[0] = (DWORD_PTR) errorno; + + FormatMessageA(FORMAT_MESSAGE_FROM_STRING | + FORMAT_MESSAGE_ARGUMENT_ARRAY | + FORMAT_MESSAGE_ALLOCATE_BUFFER, + fallback_error, 0, 0, + (LPSTR) &lib->errmsg, + 0, (va_list*) args); +} + + + +static int uv__dlerror(uv_lib_t* lib, const char* filename, DWORD errorno) { + DWORD_PTR arg; + DWORD res; + char* msg; + + if (lib->errmsg) { + LocalFree(lib->errmsg); + lib->errmsg = NULL; + } + + if (errorno == 0) + return 0; + + res = FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | + FORMAT_MESSAGE_FROM_SYSTEM | + FORMAT_MESSAGE_IGNORE_INSERTS, NULL, errorno, + MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), + (LPSTR) &lib->errmsg, 0, NULL); + + if (!res && (GetLastError() == ERROR_MUI_FILE_NOT_FOUND || + GetLastError() == ERROR_RESOURCE_TYPE_NOT_FOUND)) { + res = FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | + FORMAT_MESSAGE_FROM_SYSTEM | + FORMAT_MESSAGE_IGNORE_INSERTS, NULL, errorno, + 0, (LPSTR) &lib->errmsg, 0, NULL); + } + + if (res && errorno == ERROR_BAD_EXE_FORMAT && strstr(lib->errmsg, "%1")) { + msg = lib->errmsg; + lib->errmsg = NULL; + arg = (DWORD_PTR) filename; + res = FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | + FORMAT_MESSAGE_ARGUMENT_ARRAY | + FORMAT_MESSAGE_FROM_STRING, + msg, + 0, 0, (LPSTR) &lib->errmsg, 0, (va_list*) &arg); + LocalFree(msg); + } + + if (!res) + uv__format_fallback_error(lib, errorno); + + return -1; +} diff --git a/external/libuv/src/win/error.c b/external/libuv/src/win/error.c new file mode 100644 index 000000000..3ec984c83 --- /dev/null +++ b/external/libuv/src/win/error.c @@ -0,0 +1,173 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#include +#include +#include +#include +#include + +#include "uv.h" +#include "internal.h" + + +/* + * Display an error message and abort the event loop. + */ +void uv_fatal_error(const int errorno, const char* syscall) { + char* buf = NULL; + const char* errmsg; + + FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | + FORMAT_MESSAGE_IGNORE_INSERTS, NULL, errorno, + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&buf, 0, NULL); + + if (buf) { + errmsg = buf; + } else { + errmsg = "Unknown error"; + } + + /* FormatMessage messages include a newline character already, so don't add + * another. */ + if (syscall) { + fprintf(stderr, "%s: (%d) %s", syscall, errorno, errmsg); + } else { + fprintf(stderr, "(%d) %s", errorno, errmsg); + } + + if (buf) { + LocalFree(buf); + } + + DebugBreak(); + abort(); +} + + +int uv_translate_sys_error(int sys_errno) { + if (sys_errno <= 0) { + return sys_errno; /* If < 0 then it's already a libuv error. */ + } + + switch (sys_errno) { + case ERROR_NOACCESS: return UV_EACCES; + case WSAEACCES: return UV_EACCES; + case ERROR_ELEVATION_REQUIRED: return UV_EACCES; + case ERROR_CANT_ACCESS_FILE: return UV_EACCES; + case ERROR_ADDRESS_ALREADY_ASSOCIATED: return UV_EADDRINUSE; + case WSAEADDRINUSE: return UV_EADDRINUSE; + case WSAEADDRNOTAVAIL: return UV_EADDRNOTAVAIL; + case WSAEAFNOSUPPORT: return UV_EAFNOSUPPORT; + case WSAEWOULDBLOCK: return UV_EAGAIN; + case WSAEALREADY: return UV_EALREADY; + case ERROR_INVALID_FLAGS: return UV_EBADF; + case ERROR_INVALID_HANDLE: return UV_EBADF; + case ERROR_LOCK_VIOLATION: return UV_EBUSY; + case ERROR_PIPE_BUSY: return UV_EBUSY; + case ERROR_SHARING_VIOLATION: return UV_EBUSY; + case ERROR_OPERATION_ABORTED: return UV_ECANCELED; + case WSAEINTR: return UV_ECANCELED; + case ERROR_NO_UNICODE_TRANSLATION: return UV_ECHARSET; + case ERROR_CONNECTION_ABORTED: return UV_ECONNABORTED; + case WSAECONNABORTED: return UV_ECONNABORTED; + case ERROR_CONNECTION_REFUSED: return UV_ECONNREFUSED; + case WSAECONNREFUSED: return UV_ECONNREFUSED; + case ERROR_NETNAME_DELETED: return UV_ECONNRESET; + case WSAECONNRESET: return UV_ECONNRESET; + case ERROR_ALREADY_EXISTS: return UV_EEXIST; + case ERROR_FILE_EXISTS: return UV_EEXIST; + case ERROR_BUFFER_OVERFLOW: return UV_EFAULT; + case WSAEFAULT: return UV_EFAULT; + case ERROR_HOST_UNREACHABLE: return UV_EHOSTUNREACH; + case WSAEHOSTUNREACH: return UV_EHOSTUNREACH; + case ERROR_INSUFFICIENT_BUFFER: return UV_EINVAL; + case ERROR_INVALID_DATA: return UV_EINVAL; + case ERROR_INVALID_PARAMETER: return UV_EINVAL; + case ERROR_SYMLINK_NOT_SUPPORTED: return UV_EINVAL; + case WSAEINVAL: return UV_EINVAL; + case WSAEPFNOSUPPORT: return UV_EINVAL; + case WSAESOCKTNOSUPPORT: return UV_EINVAL; + case ERROR_BEGINNING_OF_MEDIA: return UV_EIO; + case ERROR_BUS_RESET: return UV_EIO; + case ERROR_CRC: return UV_EIO; + case ERROR_DEVICE_DOOR_OPEN: return UV_EIO; + case ERROR_DEVICE_REQUIRES_CLEANING: return UV_EIO; + case ERROR_DISK_CORRUPT: return UV_EIO; + case ERROR_EOM_OVERFLOW: return UV_EIO; + case ERROR_FILEMARK_DETECTED: return UV_EIO; + case ERROR_GEN_FAILURE: return UV_EIO; + case ERROR_INVALID_BLOCK_LENGTH: return UV_EIO; + case ERROR_IO_DEVICE: return UV_EIO; + case ERROR_NO_DATA_DETECTED: return UV_EIO; + case ERROR_NO_SIGNAL_SENT: return UV_EIO; + case ERROR_OPEN_FAILED: return UV_EIO; + case ERROR_SETMARK_DETECTED: return UV_EIO; + case ERROR_SIGNAL_REFUSED: return UV_EIO; + case WSAEISCONN: return UV_EISCONN; + case ERROR_CANT_RESOLVE_FILENAME: return UV_ELOOP; + case ERROR_TOO_MANY_OPEN_FILES: return UV_EMFILE; + case WSAEMFILE: return UV_EMFILE; + case WSAEMSGSIZE: return UV_EMSGSIZE; + case ERROR_FILENAME_EXCED_RANGE: return UV_ENAMETOOLONG; + case ERROR_NETWORK_UNREACHABLE: return UV_ENETUNREACH; + case WSAENETUNREACH: return UV_ENETUNREACH; + case WSAENOBUFS: return UV_ENOBUFS; + case ERROR_BAD_PATHNAME: return UV_ENOENT; + case ERROR_DIRECTORY: return UV_ENOENT; + case ERROR_ENVVAR_NOT_FOUND: return UV_ENOENT; + case ERROR_FILE_NOT_FOUND: return UV_ENOENT; + case ERROR_INVALID_NAME: return UV_ENOENT; + case ERROR_INVALID_DRIVE: return UV_ENOENT; + case ERROR_INVALID_REPARSE_DATA: return UV_ENOENT; + case ERROR_MOD_NOT_FOUND: return UV_ENOENT; + case ERROR_PATH_NOT_FOUND: return UV_ENOENT; + case WSAHOST_NOT_FOUND: return UV_ENOENT; + case WSANO_DATA: return UV_ENOENT; + case ERROR_NOT_ENOUGH_MEMORY: return UV_ENOMEM; + case ERROR_OUTOFMEMORY: return UV_ENOMEM; + case ERROR_CANNOT_MAKE: return UV_ENOSPC; + case ERROR_DISK_FULL: return UV_ENOSPC; + case ERROR_EA_TABLE_FULL: return UV_ENOSPC; + case ERROR_END_OF_MEDIA: return UV_ENOSPC; + case ERROR_HANDLE_DISK_FULL: return UV_ENOSPC; + case ERROR_NOT_CONNECTED: return UV_ENOTCONN; + case WSAENOTCONN: return UV_ENOTCONN; + case ERROR_DIR_NOT_EMPTY: return UV_ENOTEMPTY; + case WSAENOTSOCK: return UV_ENOTSOCK; + case ERROR_NOT_SUPPORTED: return UV_ENOTSUP; + case ERROR_BROKEN_PIPE: return UV_EOF; + case ERROR_ACCESS_DENIED: return UV_EPERM; + case ERROR_PRIVILEGE_NOT_HELD: return UV_EPERM; + case ERROR_BAD_PIPE: return UV_EPIPE; + case ERROR_NO_DATA: return UV_EPIPE; + case ERROR_PIPE_NOT_CONNECTED: return UV_EPIPE; + case WSAESHUTDOWN: return UV_EPIPE; + case WSAEPROTONOSUPPORT: return UV_EPROTONOSUPPORT; + case ERROR_WRITE_PROTECT: return UV_EROFS; + case ERROR_SEM_TIMEOUT: return UV_ETIMEDOUT; + case WSAETIMEDOUT: return UV_ETIMEDOUT; + case ERROR_NOT_SAME_DEVICE: return UV_EXDEV; + case ERROR_INVALID_FUNCTION: return UV_EISDIR; + case ERROR_META_EXPANSION_TOO_LONG: return UV_E2BIG; + default: return UV_UNKNOWN; + } +} diff --git a/external/libuv/src/win/fs-event.c b/external/libuv/src/win/fs-event.c new file mode 100644 index 000000000..e48935155 --- /dev/null +++ b/external/libuv/src/win/fs-event.c @@ -0,0 +1,608 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#include +#include +#include +#include + +#include "uv.h" +#include "internal.h" +#include "handle-inl.h" +#include "req-inl.h" + + +const unsigned int uv_directory_watcher_buffer_size = 4096; + + +static void uv_fs_event_queue_readdirchanges(uv_loop_t* loop, + uv_fs_event_t* handle) { + assert(handle->dir_handle != INVALID_HANDLE_VALUE); + assert(!handle->req_pending); + + memset(&(handle->req.u.io.overlapped), 0, + sizeof(handle->req.u.io.overlapped)); + if (!ReadDirectoryChangesW(handle->dir_handle, + handle->buffer, + uv_directory_watcher_buffer_size, + (handle->flags & UV_FS_EVENT_RECURSIVE) ? TRUE : FALSE, + FILE_NOTIFY_CHANGE_FILE_NAME | + FILE_NOTIFY_CHANGE_DIR_NAME | + FILE_NOTIFY_CHANGE_ATTRIBUTES | + FILE_NOTIFY_CHANGE_SIZE | + FILE_NOTIFY_CHANGE_LAST_WRITE | + FILE_NOTIFY_CHANGE_LAST_ACCESS | + FILE_NOTIFY_CHANGE_CREATION | + FILE_NOTIFY_CHANGE_SECURITY, + NULL, + &handle->req.u.io.overlapped, + NULL)) { + /* Make this req pending reporting an error. */ + SET_REQ_ERROR(&handle->req, GetLastError()); + uv_insert_pending_req(loop, (uv_req_t*)&handle->req); + } + + handle->req_pending = 1; +} + +static void uv_relative_path(const WCHAR* filename, + const WCHAR* dir, + WCHAR** relpath) { + size_t relpathlen; + size_t filenamelen = wcslen(filename); + size_t dirlen = wcslen(dir); + assert(!_wcsnicmp(filename, dir, dirlen)); + if (dirlen > 0 && dir[dirlen - 1] == '\\') + dirlen--; + relpathlen = filenamelen - dirlen - 1; + *relpath = (WCHAR *)uv__malloc((relpathlen + 1) * sizeof(WCHAR)); + if (!*relpath) + uv_fatal_error(ERROR_OUTOFMEMORY, "uv__malloc"); + wcsncpy(*relpath, filename + dirlen + 1, relpathlen); + (*relpath)[relpathlen] = L'\0'; +} + +static int uv_split_path(const WCHAR* filename, WCHAR** dir, + WCHAR** file) { + size_t len, i; + DWORD dir_len; + + if (filename == NULL) { + if (dir != NULL) + *dir = NULL; + *file = NULL; + return 0; + } + + len = wcslen(filename); + i = len; + while (i > 0 && filename[--i] != '\\' && filename[i] != '/'); + + if (i == 0) { + if (dir) { + dir_len = GetCurrentDirectoryW(0, NULL); + if (dir_len == 0) { + return -1; + } + *dir = (WCHAR*)uv__malloc(dir_len * sizeof(WCHAR)); + if (!*dir) { + uv_fatal_error(ERROR_OUTOFMEMORY, "uv__malloc"); + } + + if (!GetCurrentDirectoryW(dir_len, *dir)) { + uv__free(*dir); + *dir = NULL; + return -1; + } + } + + *file = wcsdup(filename); + } else { + if (dir) { + *dir = (WCHAR*)uv__malloc((i + 2) * sizeof(WCHAR)); + if (!*dir) { + uv_fatal_error(ERROR_OUTOFMEMORY, "uv__malloc"); + } + wcsncpy(*dir, filename, i + 1); + (*dir)[i + 1] = L'\0'; + } + + *file = (WCHAR*)uv__malloc((len - i) * sizeof(WCHAR)); + if (!*file) { + uv_fatal_error(ERROR_OUTOFMEMORY, "uv__malloc"); + } + wcsncpy(*file, filename + i + 1, len - i - 1); + (*file)[len - i - 1] = L'\0'; + } + + return 0; +} + + +int uv_fs_event_init(uv_loop_t* loop, uv_fs_event_t* handle) { + uv__handle_init(loop, (uv_handle_t*) handle, UV_FS_EVENT); + handle->dir_handle = INVALID_HANDLE_VALUE; + handle->buffer = NULL; + handle->req_pending = 0; + handle->filew = NULL; + handle->short_filew = NULL; + handle->dirw = NULL; + + UV_REQ_INIT(&handle->req, UV_FS_EVENT_REQ); + handle->req.data = handle; + + return 0; +} + + +int uv_fs_event_start(uv_fs_event_t* handle, + uv_fs_event_cb cb, + const char* path, + unsigned int flags) { + int name_size, is_path_dir, size; + DWORD attr, last_error; + WCHAR* dir = NULL, *dir_to_watch, *pathw = NULL; + DWORD short_path_buffer_len; + WCHAR *short_path_buffer; + WCHAR* short_path, *long_path; + + short_path = NULL; + if (uv__is_active(handle)) + return UV_EINVAL; + + handle->cb = cb; + handle->path = uv__strdup(path); + if (!handle->path) { + uv_fatal_error(ERROR_OUTOFMEMORY, "uv__malloc"); + } + + uv__handle_start(handle); + + /* Convert name to UTF16. */ + + name_size = MultiByteToWideChar(CP_UTF8, 0, path, -1, NULL, 0) * + sizeof(WCHAR); + pathw = (WCHAR*)uv__malloc(name_size); + if (!pathw) { + uv_fatal_error(ERROR_OUTOFMEMORY, "uv__malloc"); + } + + if (!MultiByteToWideChar(CP_UTF8, + 0, + path, + -1, + pathw, + name_size / sizeof(WCHAR))) { + return uv_translate_sys_error(GetLastError()); + } + + /* Determine whether path is a file or a directory. */ + attr = GetFileAttributesW(pathw); + if (attr == INVALID_FILE_ATTRIBUTES) { + last_error = GetLastError(); + goto error; + } + + is_path_dir = (attr & FILE_ATTRIBUTE_DIRECTORY) ? 1 : 0; + + if (is_path_dir) { + /* path is a directory, so that's the directory that we will watch. */ + + /* Convert to long path. */ + size = GetLongPathNameW(pathw, NULL, 0); + + if (size) { + long_path = (WCHAR*)uv__malloc(size * sizeof(WCHAR)); + if (!long_path) { + uv_fatal_error(ERROR_OUTOFMEMORY, "uv__malloc"); + } + + size = GetLongPathNameW(pathw, long_path, size); + if (size) { + long_path[size] = '\0'; + } else { + uv__free(long_path); + long_path = NULL; + } + + if (long_path) { + uv__free(pathw); + pathw = long_path; + } + } + + dir_to_watch = pathw; + } else { + /* + * path is a file. So we split path into dir & file parts, and + * watch the dir directory. + */ + + /* Convert to short path. */ + short_path_buffer = NULL; + short_path_buffer_len = GetShortPathNameW(pathw, NULL, 0); + if (short_path_buffer_len == 0) { + goto short_path_done; + } + short_path_buffer = (WCHAR *)uv__malloc(short_path_buffer_len * sizeof(WCHAR)); + if (short_path_buffer == NULL) { + goto short_path_done; + } + if (GetShortPathNameW(pathw, + short_path_buffer, + short_path_buffer_len) == 0) { + uv__free(short_path_buffer); + short_path_buffer = NULL; + } +short_path_done: + short_path = short_path_buffer; + + if (uv_split_path(pathw, &dir, &handle->filew) != 0) { + last_error = GetLastError(); + goto error; + } + + if (uv_split_path(short_path, NULL, &handle->short_filew) != 0) { + last_error = GetLastError(); + goto error; + } + + dir_to_watch = dir; + uv__free(pathw); + pathw = NULL; + } + + handle->dir_handle = CreateFileW(dir_to_watch, + FILE_LIST_DIRECTORY, + FILE_SHARE_READ | FILE_SHARE_DELETE | + FILE_SHARE_WRITE, + NULL, + OPEN_EXISTING, + FILE_FLAG_BACKUP_SEMANTICS | + FILE_FLAG_OVERLAPPED, + NULL); + + if (dir) { + uv__free(dir); + dir = NULL; + } + + if (handle->dir_handle == INVALID_HANDLE_VALUE) { + last_error = GetLastError(); + goto error; + } + + if (CreateIoCompletionPort(handle->dir_handle, + handle->loop->iocp, + (ULONG_PTR)handle, + 0) == NULL) { + last_error = GetLastError(); + goto error; + } + + if (!handle->buffer) { + handle->buffer = (char*)uv__malloc(uv_directory_watcher_buffer_size); + } + if (!handle->buffer) { + uv_fatal_error(ERROR_OUTOFMEMORY, "uv__malloc"); + } + + memset(&(handle->req.u.io.overlapped), 0, + sizeof(handle->req.u.io.overlapped)); + + if (!ReadDirectoryChangesW(handle->dir_handle, + handle->buffer, + uv_directory_watcher_buffer_size, + (flags & UV_FS_EVENT_RECURSIVE) ? TRUE : FALSE, + FILE_NOTIFY_CHANGE_FILE_NAME | + FILE_NOTIFY_CHANGE_DIR_NAME | + FILE_NOTIFY_CHANGE_ATTRIBUTES | + FILE_NOTIFY_CHANGE_SIZE | + FILE_NOTIFY_CHANGE_LAST_WRITE | + FILE_NOTIFY_CHANGE_LAST_ACCESS | + FILE_NOTIFY_CHANGE_CREATION | + FILE_NOTIFY_CHANGE_SECURITY, + NULL, + &handle->req.u.io.overlapped, + NULL)) { + last_error = GetLastError(); + goto error; + } + + assert(is_path_dir ? pathw != NULL : pathw == NULL); + handle->dirw = pathw; + handle->req_pending = 1; + return 0; + +error: + if (handle->path) { + uv__free(handle->path); + handle->path = NULL; + } + + if (handle->filew) { + uv__free(handle->filew); + handle->filew = NULL; + } + + if (handle->short_filew) { + uv__free(handle->short_filew); + handle->short_filew = NULL; + } + + uv__free(pathw); + + if (handle->dir_handle != INVALID_HANDLE_VALUE) { + CloseHandle(handle->dir_handle); + handle->dir_handle = INVALID_HANDLE_VALUE; + } + + if (handle->buffer) { + uv__free(handle->buffer); + handle->buffer = NULL; + } + + if (uv__is_active(handle)) + uv__handle_stop(handle); + + uv__free(short_path); + + return uv_translate_sys_error(last_error); +} + + +int uv_fs_event_stop(uv_fs_event_t* handle) { + if (!uv__is_active(handle)) + return 0; + + if (handle->dir_handle != INVALID_HANDLE_VALUE) { + CloseHandle(handle->dir_handle); + handle->dir_handle = INVALID_HANDLE_VALUE; + } + + uv__handle_stop(handle); + + if (handle->filew) { + uv__free(handle->filew); + handle->filew = NULL; + } + + if (handle->short_filew) { + uv__free(handle->short_filew); + handle->short_filew = NULL; + } + + if (handle->path) { + uv__free(handle->path); + handle->path = NULL; + } + + if (handle->dirw) { + uv__free(handle->dirw); + handle->dirw = NULL; + } + + return 0; +} + + +static int file_info_cmp(WCHAR* str, WCHAR* file_name, size_t file_name_len) { + size_t str_len; + + if (str == NULL) + return -1; + + str_len = wcslen(str); + + /* + Since we only care about equality, return early if the strings + aren't the same length + */ + if (str_len != (file_name_len / sizeof(WCHAR))) + return -1; + + return _wcsnicmp(str, file_name, str_len); +} + + +void uv_process_fs_event_req(uv_loop_t* loop, uv_req_t* req, + uv_fs_event_t* handle) { + FILE_NOTIFY_INFORMATION* file_info; + int err, sizew, size; + char* filename = NULL; + WCHAR* filenamew = NULL; + WCHAR* long_filenamew = NULL; + DWORD offset = 0; + + assert(req->type == UV_FS_EVENT_REQ); + assert(handle->req_pending); + handle->req_pending = 0; + + /* Don't report any callbacks if: + * - We're closing, just push the handle onto the endgame queue + * - We are not active, just ignore the callback + */ + if (!uv__is_active(handle)) { + if (handle->flags & UV_HANDLE_CLOSING) { + uv_want_endgame(loop, (uv_handle_t*) handle); + } + return; + } + + file_info = (FILE_NOTIFY_INFORMATION*)(handle->buffer + offset); + + if (REQ_SUCCESS(req)) { + if (req->u.io.overlapped.InternalHigh > 0) { + do { + file_info = (FILE_NOTIFY_INFORMATION*)((char*)file_info + offset); + assert(!filename); + assert(!filenamew); + assert(!long_filenamew); + + /* + * Fire the event only if we were asked to watch a directory, + * or if the filename filter matches. + */ + if (handle->dirw || + file_info_cmp(handle->filew, + file_info->FileName, + file_info->FileNameLength) == 0 || + file_info_cmp(handle->short_filew, + file_info->FileName, + file_info->FileNameLength) == 0) { + + if (handle->dirw) { + /* + * We attempt to resolve the long form of the file name explicitly. + * We only do this for file names that might still exist on disk. + * If this fails, we use the name given by ReadDirectoryChangesW. + * This may be the long form or the 8.3 short name in some cases. + */ + if (file_info->Action != FILE_ACTION_REMOVED && + file_info->Action != FILE_ACTION_RENAMED_OLD_NAME) { + /* Construct a full path to the file. */ + size = wcslen(handle->dirw) + + file_info->FileNameLength / sizeof(WCHAR) + 2; + + filenamew = (WCHAR*)uv__malloc(size * sizeof(WCHAR)); + if (!filenamew) { + uv_fatal_error(ERROR_OUTOFMEMORY, "uv__malloc"); + } + + _snwprintf(filenamew, size, L"%s\\%.*s", handle->dirw, + file_info->FileNameLength / (DWORD)sizeof(WCHAR), + file_info->FileName); + + filenamew[size - 1] = L'\0'; + + /* Convert to long name. */ + size = GetLongPathNameW(filenamew, NULL, 0); + + if (size) { + long_filenamew = (WCHAR*)uv__malloc(size * sizeof(WCHAR)); + if (!long_filenamew) { + uv_fatal_error(ERROR_OUTOFMEMORY, "uv__malloc"); + } + + size = GetLongPathNameW(filenamew, long_filenamew, size); + if (size) { + long_filenamew[size] = '\0'; + } else { + uv__free(long_filenamew); + long_filenamew = NULL; + } + } + + uv__free(filenamew); + + if (long_filenamew) { + /* Get the file name out of the long path. */ + uv_relative_path(long_filenamew, + handle->dirw, + &filenamew); + uv__free(long_filenamew); + long_filenamew = filenamew; + sizew = -1; + } else { + /* We couldn't get the long filename, use the one reported. */ + filenamew = file_info->FileName; + sizew = file_info->FileNameLength / sizeof(WCHAR); + } + } else { + /* + * Removed or renamed events cannot be resolved to the long form. + * We therefore use the name given by ReadDirectoryChangesW. + * This may be the long form or the 8.3 short name in some cases. + */ + filenamew = file_info->FileName; + sizew = file_info->FileNameLength / sizeof(WCHAR); + } + } else { + /* We already have the long name of the file, so just use it. */ + filenamew = handle->filew; + sizew = -1; + } + + /* Convert the filename to utf8. */ + uv__convert_utf16_to_utf8(filenamew, sizew, &filename); + + switch (file_info->Action) { + case FILE_ACTION_ADDED: + case FILE_ACTION_REMOVED: + case FILE_ACTION_RENAMED_OLD_NAME: + case FILE_ACTION_RENAMED_NEW_NAME: + handle->cb(handle, filename, UV_RENAME, 0); + break; + + case FILE_ACTION_MODIFIED: + handle->cb(handle, filename, UV_CHANGE, 0); + break; + } + + uv__free(filename); + filename = NULL; + uv__free(long_filenamew); + long_filenamew = NULL; + filenamew = NULL; + } + + offset = file_info->NextEntryOffset; + } while (offset && !(handle->flags & UV_HANDLE_CLOSING)); + } else { + handle->cb(handle, NULL, UV_CHANGE, 0); + } + } else { + err = GET_REQ_ERROR(req); + handle->cb(handle, NULL, 0, uv_translate_sys_error(err)); + } + + if (!(handle->flags & UV_HANDLE_CLOSING)) { + uv_fs_event_queue_readdirchanges(loop, handle); + } else { + uv_want_endgame(loop, (uv_handle_t*)handle); + } +} + + +void uv_fs_event_close(uv_loop_t* loop, uv_fs_event_t* handle) { + uv_fs_event_stop(handle); + + uv__handle_closing(handle); + + if (!handle->req_pending) { + uv_want_endgame(loop, (uv_handle_t*)handle); + } + +} + + +void uv_fs_event_endgame(uv_loop_t* loop, uv_fs_event_t* handle) { + if ((handle->flags & UV_HANDLE_CLOSING) && !handle->req_pending) { + assert(!(handle->flags & UV_HANDLE_CLOSED)); + + if (handle->buffer) { + uv__free(handle->buffer); + handle->buffer = NULL; + } + + uv__handle_close(handle); + } +} diff --git a/external/libuv/src/win/fs-fd-hash-inl.h b/external/libuv/src/win/fs-fd-hash-inl.h new file mode 100644 index 000000000..bc7e054fe --- /dev/null +++ b/external/libuv/src/win/fs-fd-hash-inl.h @@ -0,0 +1,178 @@ +#ifndef UV_WIN_FS_FD_HASH_INL_H_ +#define UV_WIN_FS_FD_HASH_INL_H_ + +#include "uv.h" +#include "internal.h" + +/* Files are only inserted in uv__fd_hash when the UV_FS_O_FILEMAP flag is + * specified. Thus, when uv__fd_hash_get returns true, the file mapping in the + * info structure should be used for read/write operations. + * + * If the file is empty, the mapping field will be set to + * INVALID_HANDLE_VALUE. This is not an issue since the file mapping needs to + * be created anyway when the file size changes. + * + * Since file descriptors are sequential integers, the modulo operator is used + * as hashing function. For each bucket, a single linked list of arrays is + * kept to minimize allocations. A statically allocated memory buffer is kept + * for the first array in each bucket. */ + + +#define UV__FD_HASH_SIZE 256 +#define UV__FD_HASH_GROUP_SIZE 16 + +struct uv__fd_info_s { + int flags; + BOOLEAN is_directory; + HANDLE mapping; + LARGE_INTEGER size; + LARGE_INTEGER current_pos; +}; + +struct uv__fd_hash_entry_s { + uv_file fd; + struct uv__fd_info_s info; +}; + +struct uv__fd_hash_entry_group_s { + struct uv__fd_hash_entry_s entries[UV__FD_HASH_GROUP_SIZE]; + struct uv__fd_hash_entry_group_s* next; +}; + +struct uv__fd_hash_bucket_s { + size_t size; + struct uv__fd_hash_entry_group_s* data; +}; + + +static uv_mutex_t uv__fd_hash_mutex; + +static struct uv__fd_hash_entry_group_s + uv__fd_hash_entry_initial[UV__FD_HASH_SIZE * UV__FD_HASH_GROUP_SIZE]; +static struct uv__fd_hash_bucket_s uv__fd_hash[UV__FD_HASH_SIZE]; + + +INLINE static void uv__fd_hash_init(void) { + int i, err; + + err = uv_mutex_init(&uv__fd_hash_mutex); + if (err) { + uv_fatal_error(err, "uv_mutex_init"); + } + + for (i = 0; i < ARRAY_SIZE(uv__fd_hash); ++i) { + uv__fd_hash[i].size = 0; + uv__fd_hash[i].data = + uv__fd_hash_entry_initial + i * UV__FD_HASH_GROUP_SIZE; + } +} + +#define FIND_COMMON_VARIABLES \ + unsigned i; \ + unsigned bucket = fd % ARRAY_SIZE(uv__fd_hash); \ + struct uv__fd_hash_entry_s* entry_ptr = NULL; \ + struct uv__fd_hash_entry_group_s* group_ptr; \ + struct uv__fd_hash_bucket_s* bucket_ptr = &uv__fd_hash[bucket]; + +#define FIND_IN_GROUP_PTR(group_size) \ + do { \ + for (i = 0; i < group_size; ++i) { \ + if (group_ptr->entries[i].fd == fd) { \ + entry_ptr = &group_ptr->entries[i]; \ + break; \ + } \ + } \ + } while (0) + +#define FIND_IN_BUCKET_PTR() \ + do { \ + size_t first_group_size = bucket_ptr->size % UV__FD_HASH_GROUP_SIZE; \ + if (bucket_ptr->size != 0 && first_group_size == 0) \ + first_group_size = UV__FD_HASH_GROUP_SIZE; \ + group_ptr = bucket_ptr->data; \ + FIND_IN_GROUP_PTR(first_group_size); \ + for (group_ptr = group_ptr->next; \ + group_ptr != NULL && entry_ptr == NULL; \ + group_ptr = group_ptr->next) \ + FIND_IN_GROUP_PTR(UV__FD_HASH_GROUP_SIZE); \ + } while (0) + +INLINE static int uv__fd_hash_get(int fd, struct uv__fd_info_s* info) { + FIND_COMMON_VARIABLES + + uv_mutex_lock(&uv__fd_hash_mutex); + + FIND_IN_BUCKET_PTR(); + + if (entry_ptr != NULL) { + *info = entry_ptr->info; + } + + uv_mutex_unlock(&uv__fd_hash_mutex); + return entry_ptr != NULL; +} + +INLINE static void uv__fd_hash_add(int fd, struct uv__fd_info_s* info) { + FIND_COMMON_VARIABLES + + uv_mutex_lock(&uv__fd_hash_mutex); + + FIND_IN_BUCKET_PTR(); + + if (entry_ptr == NULL) { + i = bucket_ptr->size % UV__FD_HASH_GROUP_SIZE; + + if (bucket_ptr->size != 0 && i == 0) { + struct uv__fd_hash_entry_group_s* new_group_ptr = + (struct uv__fd_hash_entry_group_s *)uv__malloc(sizeof(*new_group_ptr)); + if (new_group_ptr == NULL) { + uv_fatal_error(ERROR_OUTOFMEMORY, "uv__malloc"); + } + new_group_ptr->next = bucket_ptr->data; + bucket_ptr->data = new_group_ptr; + } + + bucket_ptr->size += 1; + entry_ptr = &bucket_ptr->data->entries[i]; + entry_ptr->fd = fd; + } + + entry_ptr->info = *info; + + uv_mutex_unlock(&uv__fd_hash_mutex); +} + +INLINE static int uv__fd_hash_remove(int fd, struct uv__fd_info_s* info) { + FIND_COMMON_VARIABLES + + uv_mutex_lock(&uv__fd_hash_mutex); + + FIND_IN_BUCKET_PTR(); + + if (entry_ptr != NULL) { + *info = entry_ptr->info; + + bucket_ptr->size -= 1; + + i = bucket_ptr->size % UV__FD_HASH_GROUP_SIZE; + if (entry_ptr != &bucket_ptr->data->entries[i]) { + *entry_ptr = bucket_ptr->data->entries[i]; + } + + if (bucket_ptr->size != 0 && + bucket_ptr->size % UV__FD_HASH_GROUP_SIZE == 0) { + struct uv__fd_hash_entry_group_s* old_group_ptr = bucket_ptr->data; + bucket_ptr->data = old_group_ptr->next; + uv__free(old_group_ptr); + } + } + + uv_mutex_unlock(&uv__fd_hash_mutex); + return entry_ptr != NULL; +} + +#undef FIND_COMMON_VARIABLES +#undef FIND_IN_GROUP_PTR +#undef FIND_IN_BUCKET_PTR + +#endif /* UV_WIN_FS_FD_HASH_INL_H_ */ diff --git a/external/libuv/src/win/fs.c b/external/libuv/src/win/fs.c new file mode 100644 index 000000000..db6a3b86c --- /dev/null +++ b/external/libuv/src/win/fs.c @@ -0,0 +1,3421 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "uv.h" +#include "internal.h" +#include "req-inl.h" +#include "handle-inl.h" +#include "fs-fd-hash-inl.h" + + +#define UV_FS_FREE_PATHS 0x0002 +#define UV_FS_FREE_PTR 0x0008 +#define UV_FS_CLEANEDUP 0x0010 + + +#define INIT(subtype) \ + do { \ + if (req == NULL) \ + return UV_EINVAL; \ + uv_fs_req_init(loop, req, subtype, cb); \ + } \ + while (0) + +#define POST \ + do { \ + if (cb != NULL) { \ + uv__req_register(loop, req); \ + uv__work_submit(loop, \ + &req->work_req, \ + UV__WORK_FAST_IO, \ + uv__fs_work, \ + uv__fs_done); \ + return 0; \ + } else { \ + uv__fs_work(&req->work_req); \ + return req->result; \ + } \ + } \ + while (0) + +#define SET_REQ_RESULT(req, result_value) \ + do { \ + req->result = (result_value); \ + if (req->result == -1) { \ + req->sys_errno_ = _doserrno; \ + req->result = uv_translate_sys_error(req->sys_errno_); \ + } \ + } while (0) + +#define SET_REQ_WIN32_ERROR(req, sys_errno) \ + do { \ + req->sys_errno_ = (sys_errno); \ + req->result = uv_translate_sys_error(req->sys_errno_); \ + } while (0) + +#define SET_REQ_UV_ERROR(req, uv_errno, sys_errno) \ + do { \ + req->result = (uv_errno); \ + req->sys_errno_ = (sys_errno); \ + } while (0) + +#define VERIFY_FD(fd, req) \ + if (fd == -1) { \ + req->result = UV_EBADF; \ + req->sys_errno_ = ERROR_INVALID_HANDLE; \ + return; \ + } + +#define MILLIONu (1000U * 1000U) +#define BILLIONu (1000U * 1000U * 1000U) + +#define FILETIME_TO_UINT(filetime) \ + (*((uint64_t*) &(filetime)) - (uint64_t) 116444736 * BILLIONu) + +#define FILETIME_TO_TIME_T(filetime) \ + (FILETIME_TO_UINT(filetime) / (10u * MILLIONu)) + +#define FILETIME_TO_TIME_NS(filetime, secs) \ + ((FILETIME_TO_UINT(filetime) - (secs * (uint64_t) 10 * MILLIONu)) * 100U) + +#define FILETIME_TO_TIMESPEC(ts, filetime) \ + do { \ + (ts).tv_sec = (long) FILETIME_TO_TIME_T(filetime); \ + (ts).tv_nsec = (long) FILETIME_TO_TIME_NS(filetime, (ts).tv_sec); \ + } while(0) + +#define TIME_T_TO_FILETIME(time, filetime_ptr) \ + do { \ + uint64_t bigtime = ((uint64_t) ((time) * (uint64_t) 10 * MILLIONu)) + \ + (uint64_t) 116444736 * BILLIONu; \ + (filetime_ptr)->dwLowDateTime = bigtime & 0xFFFFFFFF; \ + (filetime_ptr)->dwHighDateTime = bigtime >> 32; \ + } while(0) + +#define IS_SLASH(c) ((c) == L'\\' || (c) == L'/') +#define IS_LETTER(c) (((c) >= L'a' && (c) <= L'z') || \ + ((c) >= L'A' && (c) <= L'Z')) + +#define MIN(a,b) (((a) < (b)) ? (a) : (b)) + +const WCHAR JUNCTION_PREFIX[] = L"\\??\\"; +const WCHAR JUNCTION_PREFIX_LEN = 4; + +const WCHAR LONG_PATH_PREFIX[] = L"\\\\?\\"; +const WCHAR LONG_PATH_PREFIX_LEN = 4; + +const WCHAR UNC_PATH_PREFIX[] = L"\\\\?\\UNC\\"; +const WCHAR UNC_PATH_PREFIX_LEN = 8; + +static int uv__file_symlink_usermode_flag = SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATE; + +static DWORD uv__allocation_granularity; + + +void uv_fs_init(void) { + SYSTEM_INFO system_info; + + GetSystemInfo(&system_info); + uv__allocation_granularity = system_info.dwAllocationGranularity; + + uv__fd_hash_init(); +} + + +INLINE static int fs__capture_path(uv_fs_t* req, const char* path, + const char* new_path, const int copy_path) { + char* buf; + char* pos; + ssize_t buf_sz = 0, path_len = 0, pathw_len = 0, new_pathw_len = 0; + + /* new_path can only be set if path is also set. */ + assert(new_path == NULL || path != NULL); + + if (path != NULL) { + pathw_len = MultiByteToWideChar(CP_UTF8, + 0, + path, + -1, + NULL, + 0); + if (pathw_len == 0) { + return GetLastError(); + } + + buf_sz += pathw_len * sizeof(WCHAR); + } + + if (path != NULL && copy_path) { + path_len = 1 + strlen(path); + buf_sz += path_len; + } + + if (new_path != NULL) { + new_pathw_len = MultiByteToWideChar(CP_UTF8, + 0, + new_path, + -1, + NULL, + 0); + if (new_pathw_len == 0) { + return GetLastError(); + } + + buf_sz += new_pathw_len * sizeof(WCHAR); + } + + + if (buf_sz == 0) { + req->file.pathw = NULL; + req->fs.info.new_pathw = NULL; + req->path = NULL; + return 0; + } + + buf = (char*) uv__malloc(buf_sz); + if (buf == NULL) { + return ERROR_OUTOFMEMORY; + } + + pos = buf; + + if (path != NULL) { + DWORD r = MultiByteToWideChar(CP_UTF8, + 0, + path, + -1, + (WCHAR*) pos, + pathw_len); + assert(r == (DWORD) pathw_len); + req->file.pathw = (WCHAR*) pos; + pos += r * sizeof(WCHAR); + } else { + req->file.pathw = NULL; + } + + if (new_path != NULL) { + DWORD r = MultiByteToWideChar(CP_UTF8, + 0, + new_path, + -1, + (WCHAR*) pos, + new_pathw_len); + assert(r == (DWORD) new_pathw_len); + req->fs.info.new_pathw = (WCHAR*) pos; + pos += r * sizeof(WCHAR); + } else { + req->fs.info.new_pathw = NULL; + } + + req->path = path; + if (path != NULL && copy_path) { + memcpy(pos, path, path_len); + assert(path_len == buf_sz - (pos - buf)); + req->path = pos; + } + + req->flags |= UV_FS_FREE_PATHS; + + return 0; +} + + + +INLINE static void uv_fs_req_init(uv_loop_t* loop, uv_fs_t* req, + uv_fs_type fs_type, const uv_fs_cb cb) { + uv__once_init(); + UV_REQ_INIT(req, UV_FS); + req->loop = loop; + req->flags = 0; + req->fs_type = fs_type; + req->sys_errno_ = 0; + req->result = 0; + req->ptr = NULL; + req->path = NULL; + req->cb = cb; + memset(&req->fs, 0, sizeof(req->fs)); +} + + +static int fs__wide_to_utf8(WCHAR* w_source_ptr, + DWORD w_source_len, + char** target_ptr, + uint64_t* target_len_ptr) { + int r; + int target_len; + char* target; + target_len = WideCharToMultiByte(CP_UTF8, + 0, + w_source_ptr, + w_source_len, + NULL, + 0, + NULL, + NULL); + + if (target_len == 0) { + return -1; + } + + if (target_len_ptr != NULL) { + *target_len_ptr = target_len; + } + + if (target_ptr == NULL) { + return 0; + } + + target = (char *)uv__malloc(target_len + 1); + if (target == NULL) { + SetLastError(ERROR_OUTOFMEMORY); + return -1; + } + + r = WideCharToMultiByte(CP_UTF8, + 0, + w_source_ptr, + w_source_len, + target, + target_len, + NULL, + NULL); + assert(r == target_len); + target[target_len] = '\0'; + *target_ptr = target; + return 0; +} + + +INLINE static int fs__readlink_handle(HANDLE handle, char** target_ptr, + uint64_t* target_len_ptr) { + char buffer[MAXIMUM_REPARSE_DATA_BUFFER_SIZE]; + REPARSE_DATA_BUFFER* reparse_data = (REPARSE_DATA_BUFFER*) buffer; + WCHAR* w_target; + DWORD w_target_len; + DWORD bytes; + size_t i; + size_t len; + + if (!DeviceIoControl(handle, + FSCTL_GET_REPARSE_POINT, + NULL, + 0, + buffer, + sizeof buffer, + &bytes, + NULL)) { + return -1; + } + + if (reparse_data->ReparseTag == IO_REPARSE_TAG_SYMLINK) { + /* Real symlink */ + w_target = reparse_data->SymbolicLinkReparseBuffer.PathBuffer + + (reparse_data->SymbolicLinkReparseBuffer.SubstituteNameOffset / + sizeof(WCHAR)); + w_target_len = + reparse_data->SymbolicLinkReparseBuffer.SubstituteNameLength / + sizeof(WCHAR); + + /* Real symlinks can contain pretty much everything, but the only thing we + * really care about is undoing the implicit conversion to an NT namespaced + * path that CreateSymbolicLink will perform on absolute paths. If the path + * is win32-namespaced then the user must have explicitly made it so, and + * we better just return the unmodified reparse data. */ + if (w_target_len >= 4 && + w_target[0] == L'\\' && + w_target[1] == L'?' && + w_target[2] == L'?' && + w_target[3] == L'\\') { + /* Starts with \??\ */ + if (w_target_len >= 6 && + ((w_target[4] >= L'A' && w_target[4] <= L'Z') || + (w_target[4] >= L'a' && w_target[4] <= L'z')) && + w_target[5] == L':' && + (w_target_len == 6 || w_target[6] == L'\\')) { + /* \??\:\ */ + w_target += 4; + w_target_len -= 4; + + } else if (w_target_len >= 8 && + (w_target[4] == L'U' || w_target[4] == L'u') && + (w_target[5] == L'N' || w_target[5] == L'n') && + (w_target[6] == L'C' || w_target[6] == L'c') && + w_target[7] == L'\\') { + /* \??\UNC\\\ - make sure the final path looks like + * \\\\ */ + w_target += 6; + w_target[0] = L'\\'; + w_target_len -= 6; + } + } + + } else if (reparse_data->ReparseTag == IO_REPARSE_TAG_MOUNT_POINT) { + /* Junction. */ + w_target = reparse_data->MountPointReparseBuffer.PathBuffer + + (reparse_data->MountPointReparseBuffer.SubstituteNameOffset / + sizeof(WCHAR)); + w_target_len = reparse_data->MountPointReparseBuffer.SubstituteNameLength / + sizeof(WCHAR); + + /* Only treat junctions that look like \??\:\ as symlink. Junctions + * can also be used as mount points, like \??\Volume{}, but that's + * confusing for programs since they wouldn't be able to actually + * understand such a path when returned by uv_readlink(). UNC paths are + * never valid for junctions so we don't care about them. */ + if (!(w_target_len >= 6 && + w_target[0] == L'\\' && + w_target[1] == L'?' && + w_target[2] == L'?' && + w_target[3] == L'\\' && + ((w_target[4] >= L'A' && w_target[4] <= L'Z') || + (w_target[4] >= L'a' && w_target[4] <= L'z')) && + w_target[5] == L':' && + (w_target_len == 6 || w_target[6] == L'\\'))) { + SetLastError(ERROR_SYMLINK_NOT_SUPPORTED); + return -1; + } + + /* Remove leading \??\ */ + w_target += 4; + w_target_len -= 4; + + } else if (reparse_data->ReparseTag == IO_REPARSE_TAG_APPEXECLINK) { + /* String #3 in the list has the target filename. */ + if (reparse_data->AppExecLinkReparseBuffer.StringCount < 3) { + SetLastError(ERROR_SYMLINK_NOT_SUPPORTED); + return -1; + } + w_target = reparse_data->AppExecLinkReparseBuffer.StringList; + /* The StringList buffer contains a list of strings separated by "\0", */ + /* with "\0\0" terminating the list. Move to the 3rd string in the list: */ + for (i = 0; i < 2; ++i) { + len = wcslen(w_target); + if (len == 0) { + SetLastError(ERROR_SYMLINK_NOT_SUPPORTED); + return -1; + } + w_target += len + 1; + } + w_target_len = wcslen(w_target); + if (w_target_len == 0) { + SetLastError(ERROR_SYMLINK_NOT_SUPPORTED); + return -1; + } + /* Make sure it is an absolute path. */ + if (!(w_target_len >= 3 && + ((w_target[0] >= L'a' && w_target[0] <= L'z') || + (w_target[0] >= L'A' && w_target[0] <= L'Z')) && + w_target[1] == L':' && + w_target[2] == L'\\')) { + SetLastError(ERROR_SYMLINK_NOT_SUPPORTED); + return -1; + } + + } else { + /* Reparse tag does not indicate a symlink. */ + SetLastError(ERROR_SYMLINK_NOT_SUPPORTED); + return -1; + } + + return fs__wide_to_utf8(w_target, w_target_len, target_ptr, target_len_ptr); +} + + +void fs__open(uv_fs_t* req) { + DWORD access; + DWORD share; + DWORD disposition; + DWORD attributes = 0; + HANDLE file; + int fd, current_umask; + int flags = req->fs.info.file_flags; + struct uv__fd_info_s fd_info; + + /* Adjust flags to be compatible with the memory file mapping. Save the + * original flags to emulate the correct behavior. */ + if (flags & UV_FS_O_FILEMAP) { + fd_info.flags = flags; + fd_info.current_pos.QuadPart = 0; + + if ((flags & (UV_FS_O_RDONLY | UV_FS_O_WRONLY | UV_FS_O_RDWR)) == + UV_FS_O_WRONLY) { + /* CreateFileMapping always needs read access */ + flags = (flags & ~UV_FS_O_WRONLY) | UV_FS_O_RDWR; + } + + if (flags & UV_FS_O_APPEND) { + /* Clear the append flag and ensure RDRW mode */ + flags &= ~UV_FS_O_APPEND; + flags &= ~(UV_FS_O_RDONLY | UV_FS_O_WRONLY | UV_FS_O_RDWR); + flags |= UV_FS_O_RDWR; + } + } + + /* Obtain the active umask. umask() never fails and returns the previous + * umask. */ + current_umask = umask(0); + umask(current_umask); + + /* convert flags and mode to CreateFile parameters */ + switch (flags & (UV_FS_O_RDONLY | UV_FS_O_WRONLY | UV_FS_O_RDWR)) { + case UV_FS_O_RDONLY: + access = FILE_GENERIC_READ; + break; + case UV_FS_O_WRONLY: + access = FILE_GENERIC_WRITE; + break; + case UV_FS_O_RDWR: + access = FILE_GENERIC_READ | FILE_GENERIC_WRITE; + break; + default: + goto einval; + } + + if (flags & UV_FS_O_APPEND) { + access &= ~FILE_WRITE_DATA; + access |= FILE_APPEND_DATA; + } + + /* + * Here is where we deviate significantly from what CRT's _open() + * does. We indiscriminately use all the sharing modes, to match + * UNIX semantics. In particular, this ensures that the file can + * be deleted even whilst it's open, fixing issue + * https://github.com/nodejs/node-v0.x-archive/issues/1449. + * We still support exclusive sharing mode, since it is necessary + * for opening raw block devices, otherwise Windows will prevent + * any attempt to write past the master boot record. + */ + if (flags & UV_FS_O_EXLOCK) { + share = 0; + } else { + share = FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE; + } + + switch (flags & (UV_FS_O_CREAT | UV_FS_O_EXCL | UV_FS_O_TRUNC)) { + case 0: + case UV_FS_O_EXCL: + disposition = OPEN_EXISTING; + break; + case UV_FS_O_CREAT: + disposition = OPEN_ALWAYS; + break; + case UV_FS_O_CREAT | UV_FS_O_EXCL: + case UV_FS_O_CREAT | UV_FS_O_TRUNC | UV_FS_O_EXCL: + disposition = CREATE_NEW; + break; + case UV_FS_O_TRUNC: + case UV_FS_O_TRUNC | UV_FS_O_EXCL: + disposition = TRUNCATE_EXISTING; + break; + case UV_FS_O_CREAT | UV_FS_O_TRUNC: + disposition = CREATE_ALWAYS; + break; + default: + goto einval; + } + + attributes |= FILE_ATTRIBUTE_NORMAL; + if (flags & UV_FS_O_CREAT) { + if (!((req->fs.info.mode & ~current_umask) & _S_IWRITE)) { + attributes |= FILE_ATTRIBUTE_READONLY; + } + } + + if (flags & UV_FS_O_TEMPORARY ) { + attributes |= FILE_FLAG_DELETE_ON_CLOSE | FILE_ATTRIBUTE_TEMPORARY; + access |= DELETE; + } + + if (flags & UV_FS_O_SHORT_LIVED) { + attributes |= FILE_ATTRIBUTE_TEMPORARY; + } + + switch (flags & (UV_FS_O_SEQUENTIAL | UV_FS_O_RANDOM)) { + case 0: + break; + case UV_FS_O_SEQUENTIAL: + attributes |= FILE_FLAG_SEQUENTIAL_SCAN; + break; + case UV_FS_O_RANDOM: + attributes |= FILE_FLAG_RANDOM_ACCESS; + break; + default: + goto einval; + } + + if (flags & UV_FS_O_DIRECT) { + /* + * FILE_APPEND_DATA and FILE_FLAG_NO_BUFFERING are mutually exclusive. + * Windows returns 87, ERROR_INVALID_PARAMETER if these are combined. + * + * FILE_APPEND_DATA is included in FILE_GENERIC_WRITE: + * + * FILE_GENERIC_WRITE = STANDARD_RIGHTS_WRITE | + * FILE_WRITE_DATA | + * FILE_WRITE_ATTRIBUTES | + * FILE_WRITE_EA | + * FILE_APPEND_DATA | + * SYNCHRONIZE + * + * Note: Appends are also permitted by FILE_WRITE_DATA. + * + * In order for direct writes and direct appends to succeed, we therefore + * exclude FILE_APPEND_DATA if FILE_WRITE_DATA is specified, and otherwise + * fail if the user's sole permission is a direct append, since this + * particular combination is invalid. + */ + if (access & FILE_APPEND_DATA) { + if (access & FILE_WRITE_DATA) { + access &= ~FILE_APPEND_DATA; + } else { + goto einval; + } + } + attributes |= FILE_FLAG_NO_BUFFERING; + } + + switch (flags & (UV_FS_O_DSYNC | UV_FS_O_SYNC)) { + case 0: + break; + case UV_FS_O_DSYNC: + case UV_FS_O_SYNC: + attributes |= FILE_FLAG_WRITE_THROUGH; + break; + default: + goto einval; + } + + /* Setting this flag makes it possible to open a directory. */ + attributes |= FILE_FLAG_BACKUP_SEMANTICS; + + file = CreateFileW(req->file.pathw, + access, + share, + NULL, + disposition, + attributes, + NULL); + if (file == INVALID_HANDLE_VALUE) { + DWORD error = GetLastError(); + if (error == ERROR_FILE_EXISTS && (flags & UV_FS_O_CREAT) && + !(flags & UV_FS_O_EXCL)) { + /* Special case: when ERROR_FILE_EXISTS happens and UV_FS_O_CREAT was + * specified, it means the path referred to a directory. */ + SET_REQ_UV_ERROR(req, UV_EISDIR, error); + } else { + SET_REQ_WIN32_ERROR(req, GetLastError()); + } + return; + } + + fd = _open_osfhandle((intptr_t) file, flags); + if (fd < 0) { + /* The only known failure mode for _open_osfhandle() is EMFILE, in which + * case GetLastError() will return zero. However we'll try to handle other + * errors as well, should they ever occur. + */ + if (errno == EMFILE) + SET_REQ_UV_ERROR(req, UV_EMFILE, ERROR_TOO_MANY_OPEN_FILES); + else if (GetLastError() != ERROR_SUCCESS) + SET_REQ_WIN32_ERROR(req, GetLastError()); + else + SET_REQ_WIN32_ERROR(req, (DWORD) UV_UNKNOWN); + CloseHandle(file); + return; + } + + if (flags & UV_FS_O_FILEMAP) { + FILE_STANDARD_INFO file_info; + if (!GetFileInformationByHandleEx(file, + FileStandardInfo, + &file_info, + sizeof file_info)) { + SET_REQ_WIN32_ERROR(req, GetLastError()); + CloseHandle(file); + return; + } + fd_info.is_directory = file_info.Directory; + + if (fd_info.is_directory) { + fd_info.size.QuadPart = 0; + fd_info.mapping = INVALID_HANDLE_VALUE; + } else { + if (!GetFileSizeEx(file, &fd_info.size)) { + SET_REQ_WIN32_ERROR(req, GetLastError()); + CloseHandle(file); + return; + } + + if (fd_info.size.QuadPart == 0) { + fd_info.mapping = INVALID_HANDLE_VALUE; + } else { + DWORD flProtect = (fd_info.flags & (UV_FS_O_RDONLY | UV_FS_O_WRONLY | + UV_FS_O_RDWR)) == UV_FS_O_RDONLY ? PAGE_READONLY : PAGE_READWRITE; + fd_info.mapping = CreateFileMapping(file, + NULL, + flProtect, + fd_info.size.HighPart, + fd_info.size.LowPart, + NULL); + if (fd_info.mapping == NULL) { + SET_REQ_WIN32_ERROR(req, GetLastError()); + CloseHandle(file); + return; + } + } + } + + uv__fd_hash_add(fd, &fd_info); + } + + SET_REQ_RESULT(req, fd); + return; + + einval: + SET_REQ_UV_ERROR(req, UV_EINVAL, ERROR_INVALID_PARAMETER); +} + +void fs__close(uv_fs_t* req) { + int fd = req->file.fd; + int result; + struct uv__fd_info_s fd_info; + + VERIFY_FD(fd, req); + + if (uv__fd_hash_remove(fd, &fd_info)) { + if (fd_info.mapping != INVALID_HANDLE_VALUE) { + CloseHandle(fd_info.mapping); + } + } + + if (fd > 2) + result = _close(fd); + else + result = 0; + + /* _close doesn't set _doserrno on failure, but it does always set errno + * to EBADF on failure. + */ + if (result == -1) { + assert(errno == EBADF); + SET_REQ_UV_ERROR(req, UV_EBADF, ERROR_INVALID_HANDLE); + } else { + req->result = 0; + } +} + + +LONG fs__filemap_ex_filter(LONG excode, PEXCEPTION_POINTERS pep, + int* perror) { + if (excode != EXCEPTION_IN_PAGE_ERROR) { + return EXCEPTION_CONTINUE_SEARCH; + } + + assert(perror != NULL); + if (pep != NULL && pep->ExceptionRecord != NULL && + pep->ExceptionRecord->NumberParameters >= 3) { + NTSTATUS status = (NTSTATUS)pep->ExceptionRecord->ExceptionInformation[3]; + *perror = pRtlNtStatusToDosError(status); + if (*perror != ERROR_SUCCESS) { + return EXCEPTION_EXECUTE_HANDLER; + } + } + *perror = UV_UNKNOWN; + return EXCEPTION_EXECUTE_HANDLER; +} + + +void fs__read_filemap(uv_fs_t* req, struct uv__fd_info_s* fd_info) { + int fd = req->file.fd; /* VERIFY_FD done in fs__read */ + int rw_flags = fd_info->flags & + (UV_FS_O_RDONLY | UV_FS_O_WRONLY | UV_FS_O_RDWR); + size_t read_size, done_read; + unsigned int index; + LARGE_INTEGER pos, end_pos; + size_t view_offset; + LARGE_INTEGER view_base; + void* view; + + if (rw_flags == UV_FS_O_WRONLY) { + SET_REQ_WIN32_ERROR(req, ERROR_ACCESS_DENIED); + return; + } + if (fd_info->is_directory) { + SET_REQ_WIN32_ERROR(req, ERROR_INVALID_FUNCTION); + return; + } + + if (req->fs.info.offset == -1) { + pos = fd_info->current_pos; + } else { + pos.QuadPart = req->fs.info.offset; + } + + /* Make sure we wont read past EOF. */ + if (pos.QuadPart >= fd_info->size.QuadPart) { + SET_REQ_RESULT(req, 0); + return; + } + + read_size = 0; + for (index = 0; index < req->fs.info.nbufs; ++index) { + read_size += req->fs.info.bufs[index].len; + } + read_size = (size_t) MIN((LONGLONG) read_size, + fd_info->size.QuadPart - pos.QuadPart); + if (read_size == 0) { + SET_REQ_RESULT(req, 0); + return; + } + + end_pos.QuadPart = pos.QuadPart + read_size; + + view_offset = pos.QuadPart % uv__allocation_granularity; + view_base.QuadPart = pos.QuadPart - view_offset; + view = MapViewOfFile(fd_info->mapping, + FILE_MAP_READ, + view_base.HighPart, + view_base.LowPart, + view_offset + read_size); + if (view == NULL) { + SET_REQ_WIN32_ERROR(req, GetLastError()); + return; + } + + done_read = 0; + for (index = 0; + index < req->fs.info.nbufs && done_read < read_size; + ++index) { + int err = 0; + size_t this_read_size = MIN(req->fs.info.bufs[index].len, + read_size - done_read); +#ifdef _MSC_VER + __try { +#endif + memcpy(req->fs.info.bufs[index].base, + (char*)view + view_offset + done_read, + this_read_size); +#ifdef _MSC_VER + } + __except (fs__filemap_ex_filter(GetExceptionCode(), + GetExceptionInformation(), &err)) { + SET_REQ_WIN32_ERROR(req, err); + UnmapViewOfFile(view); + return; + } +#endif + done_read += this_read_size; + } + assert(done_read == read_size); + + if (!UnmapViewOfFile(view)) { + SET_REQ_WIN32_ERROR(req, GetLastError()); + return; + } + + if (req->fs.info.offset == -1) { + fd_info->current_pos = end_pos; + uv__fd_hash_add(fd, fd_info); + } + + SET_REQ_RESULT(req, read_size); + return; +} + +void fs__read(uv_fs_t* req) { + int fd = req->file.fd; + int64_t offset = req->fs.info.offset; + HANDLE handle; + OVERLAPPED overlapped, *overlapped_ptr; + LARGE_INTEGER offset_; + DWORD bytes; + DWORD error; + int result; + unsigned int index; + LARGE_INTEGER original_position; + LARGE_INTEGER zero_offset; + int restore_position; + struct uv__fd_info_s fd_info; + + VERIFY_FD(fd, req); + + if (uv__fd_hash_get(fd, &fd_info)) { + fs__read_filemap(req, &fd_info); + return; + } + + zero_offset.QuadPart = 0; + restore_position = 0; + handle = uv__get_osfhandle(fd); + + if (handle == INVALID_HANDLE_VALUE) { + SET_REQ_WIN32_ERROR(req, ERROR_INVALID_HANDLE); + return; + } + + if (offset != -1) { + memset(&overlapped, 0, sizeof overlapped); + overlapped_ptr = &overlapped; + if (SetFilePointerEx(handle, zero_offset, &original_position, + FILE_CURRENT)) { + restore_position = 1; + } + } else { + overlapped_ptr = NULL; + } + + index = 0; + bytes = 0; + do { + DWORD incremental_bytes; + + if (offset != -1) { + offset_.QuadPart = offset + bytes; + overlapped.Offset = offset_.LowPart; + overlapped.OffsetHigh = offset_.HighPart; + } + + result = ReadFile(handle, + req->fs.info.bufs[index].base, + req->fs.info.bufs[index].len, + &incremental_bytes, + overlapped_ptr); + bytes += incremental_bytes; + ++index; + } while (result && index < req->fs.info.nbufs); + + if (restore_position) + SetFilePointerEx(handle, original_position, NULL, FILE_BEGIN); + + if (result || bytes > 0) { + SET_REQ_RESULT(req, bytes); + } else { + error = GetLastError(); + if (error == ERROR_HANDLE_EOF) { + SET_REQ_RESULT(req, bytes); + } else { + SET_REQ_WIN32_ERROR(req, error); + } + } +} + + +void fs__write_filemap(uv_fs_t* req, HANDLE file, + struct uv__fd_info_s* fd_info) { + int fd = req->file.fd; /* VERIFY_FD done in fs__write */ + int force_append = fd_info->flags & UV_FS_O_APPEND; + int rw_flags = fd_info->flags & + (UV_FS_O_RDONLY | UV_FS_O_WRONLY | UV_FS_O_RDWR); + size_t write_size, done_write; + unsigned int index; + LARGE_INTEGER zero, pos, end_pos; + size_t view_offset; + LARGE_INTEGER view_base; + void* view; + FILETIME ft; + + if (rw_flags == UV_FS_O_RDONLY) { + SET_REQ_WIN32_ERROR(req, ERROR_ACCESS_DENIED); + return; + } + if (fd_info->is_directory) { + SET_REQ_WIN32_ERROR(req, ERROR_INVALID_FUNCTION); + return; + } + + write_size = 0; + for (index = 0; index < req->fs.info.nbufs; ++index) { + write_size += req->fs.info.bufs[index].len; + } + + if (write_size == 0) { + SET_REQ_RESULT(req, 0); + return; + } + + zero.QuadPart = 0; + if (force_append) { + pos = fd_info->size; + } else if (req->fs.info.offset == -1) { + pos = fd_info->current_pos; + } else { + pos.QuadPart = req->fs.info.offset; + } + + end_pos.QuadPart = pos.QuadPart + write_size; + + /* Recreate the mapping to enlarge the file if needed */ + if (end_pos.QuadPart > fd_info->size.QuadPart) { + if (fd_info->mapping != INVALID_HANDLE_VALUE) { + CloseHandle(fd_info->mapping); + } + + fd_info->mapping = CreateFileMapping(file, + NULL, + PAGE_READWRITE, + end_pos.HighPart, + end_pos.LowPart, + NULL); + if (fd_info->mapping == NULL) { + SET_REQ_WIN32_ERROR(req, GetLastError()); + CloseHandle(file); + fd_info->mapping = INVALID_HANDLE_VALUE; + fd_info->size.QuadPart = 0; + fd_info->current_pos.QuadPart = 0; + uv__fd_hash_add(fd, fd_info); + return; + } + + fd_info->size = end_pos; + uv__fd_hash_add(fd, fd_info); + } + + view_offset = pos.QuadPart % uv__allocation_granularity; + view_base.QuadPart = pos.QuadPart - view_offset; + view = MapViewOfFile(fd_info->mapping, + FILE_MAP_WRITE, + view_base.HighPart, + view_base.LowPart, + view_offset + write_size); + if (view == NULL) { + SET_REQ_WIN32_ERROR(req, GetLastError()); + return; + } + + done_write = 0; + for (index = 0; index < req->fs.info.nbufs; ++index) { + int err = 0; +#ifdef _MSC_VER + __try { +#endif + memcpy((char*)view + view_offset + done_write, + req->fs.info.bufs[index].base, + req->fs.info.bufs[index].len); +#ifdef _MSC_VER + } + __except (fs__filemap_ex_filter(GetExceptionCode(), + GetExceptionInformation(), &err)) { + SET_REQ_WIN32_ERROR(req, err); + UnmapViewOfFile(view); + return; + } +#endif + done_write += req->fs.info.bufs[index].len; + } + assert(done_write == write_size); + + if (!FlushViewOfFile(view, 0)) { + SET_REQ_WIN32_ERROR(req, GetLastError()); + UnmapViewOfFile(view); + return; + } + if (!UnmapViewOfFile(view)) { + SET_REQ_WIN32_ERROR(req, GetLastError()); + return; + } + + if (req->fs.info.offset == -1) { + fd_info->current_pos = end_pos; + uv__fd_hash_add(fd, fd_info); + } + + GetSystemTimeAsFileTime(&ft); + SetFileTime(file, NULL, NULL, &ft); + + SET_REQ_RESULT(req, done_write); +} + +void fs__write(uv_fs_t* req) { + int fd = req->file.fd; + int64_t offset = req->fs.info.offset; + HANDLE handle; + OVERLAPPED overlapped, *overlapped_ptr; + LARGE_INTEGER offset_; + DWORD bytes; + int result; + unsigned int index; + LARGE_INTEGER original_position; + LARGE_INTEGER zero_offset; + int restore_position; + struct uv__fd_info_s fd_info; + + VERIFY_FD(fd, req); + + zero_offset.QuadPart = 0; + restore_position = 0; + handle = uv__get_osfhandle(fd); + if (handle == INVALID_HANDLE_VALUE) { + SET_REQ_WIN32_ERROR(req, ERROR_INVALID_HANDLE); + return; + } + + if (uv__fd_hash_get(fd, &fd_info)) { + fs__write_filemap(req, handle, &fd_info); + return; + } + + if (offset != -1) { + memset(&overlapped, 0, sizeof overlapped); + overlapped_ptr = &overlapped; + if (SetFilePointerEx(handle, zero_offset, &original_position, + FILE_CURRENT)) { + restore_position = 1; + } + } else { + overlapped_ptr = NULL; + } + + index = 0; + bytes = 0; + do { + DWORD incremental_bytes; + + if (offset != -1) { + offset_.QuadPart = offset + bytes; + overlapped.Offset = offset_.LowPart; + overlapped.OffsetHigh = offset_.HighPart; + } + + result = WriteFile(handle, + req->fs.info.bufs[index].base, + req->fs.info.bufs[index].len, + &incremental_bytes, + overlapped_ptr); + bytes += incremental_bytes; + ++index; + } while (result && index < req->fs.info.nbufs); + + if (restore_position) + SetFilePointerEx(handle, original_position, NULL, FILE_BEGIN); + + if (result || bytes > 0) { + SET_REQ_RESULT(req, bytes); + } else { + SET_REQ_WIN32_ERROR(req, GetLastError()); + } +} + + +void fs__rmdir(uv_fs_t* req) { + int result = _wrmdir(req->file.pathw); + SET_REQ_RESULT(req, result); +} + + +void fs__unlink(uv_fs_t* req) { + const WCHAR* pathw = req->file.pathw; + HANDLE handle; + BY_HANDLE_FILE_INFORMATION info; + FILE_DISPOSITION_INFORMATION disposition; + IO_STATUS_BLOCK iosb; + NTSTATUS status; + + handle = CreateFileW(pathw, + FILE_READ_ATTRIBUTES | FILE_WRITE_ATTRIBUTES | DELETE, + FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, + NULL, + OPEN_EXISTING, + FILE_FLAG_OPEN_REPARSE_POINT | FILE_FLAG_BACKUP_SEMANTICS, + NULL); + + if (handle == INVALID_HANDLE_VALUE) { + SET_REQ_WIN32_ERROR(req, GetLastError()); + return; + } + + if (!GetFileInformationByHandle(handle, &info)) { + SET_REQ_WIN32_ERROR(req, GetLastError()); + CloseHandle(handle); + return; + } + + if (info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { + /* Do not allow deletion of directories, unless it is a symlink. When the + * path refers to a non-symlink directory, report EPERM as mandated by + * POSIX.1. */ + + /* Check if it is a reparse point. If it's not, it's a normal directory. */ + if (!(info.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT)) { + SET_REQ_WIN32_ERROR(req, ERROR_ACCESS_DENIED); + CloseHandle(handle); + return; + } + + /* Read the reparse point and check if it is a valid symlink. If not, don't + * unlink. */ + if (fs__readlink_handle(handle, NULL, NULL) < 0) { + DWORD error = GetLastError(); + if (error == ERROR_SYMLINK_NOT_SUPPORTED) + error = ERROR_ACCESS_DENIED; + SET_REQ_WIN32_ERROR(req, error); + CloseHandle(handle); + return; + } + } + + if (info.dwFileAttributes & FILE_ATTRIBUTE_READONLY) { + /* Remove read-only attribute */ + FILE_BASIC_INFORMATION basic = { 0 }; + + basic.FileAttributes = (info.dwFileAttributes & ~FILE_ATTRIBUTE_READONLY) | + FILE_ATTRIBUTE_ARCHIVE; + + status = pNtSetInformationFile(handle, + &iosb, + &basic, + sizeof basic, + FileBasicInformation); + if (!NT_SUCCESS(status)) { + SET_REQ_WIN32_ERROR(req, pRtlNtStatusToDosError(status)); + CloseHandle(handle); + return; + } + } + + /* Try to set the delete flag. */ + disposition.DeleteFile = TRUE; + status = pNtSetInformationFile(handle, + &iosb, + &disposition, + sizeof disposition, + FileDispositionInformation); + if (NT_SUCCESS(status)) { + SET_REQ_SUCCESS(req); + } else { + SET_REQ_WIN32_ERROR(req, pRtlNtStatusToDosError(status)); + } + + CloseHandle(handle); +} + + +void fs__mkdir(uv_fs_t* req) { + /* TODO: use req->mode. */ + req->result = _wmkdir(req->file.pathw); + if (req->result == -1) { + req->sys_errno_ = _doserrno; + req->result = req->sys_errno_ == ERROR_INVALID_NAME + ? UV_EINVAL + : uv_translate_sys_error(req->sys_errno_); + } +} + +typedef int (*uv__fs_mktemp_func)(uv_fs_t* req); + +/* OpenBSD original: lib/libc/stdio/mktemp.c */ +void fs__mktemp(uv_fs_t* req, uv__fs_mktemp_func func) { + static const WCHAR *tempchars = + L"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; + static const size_t num_chars = 62; + static const size_t num_x = 6; + WCHAR *cp, *ep; + unsigned int tries, i; + size_t len; + uint64_t v; + + len = wcslen(req->file.pathw); + ep = req->file.pathw + len; + if (len < num_x || wcsncmp(ep - num_x, L"XXXXXX", num_x)) { + SET_REQ_UV_ERROR(req, UV_EINVAL, ERROR_INVALID_PARAMETER); + return; + } + + tries = TMP_MAX; + do { + if (uv__random_rtlgenrandom((void *)&v, sizeof(v)) < 0) { + SET_REQ_UV_ERROR(req, UV_EIO, ERROR_IO_DEVICE); + break; + } + + cp = ep - num_x; + for (i = 0; i < num_x; i++) { + *cp++ = tempchars[v % num_chars]; + v /= num_chars; + } + + if (func(req)) { + if (req->result >= 0) { + len = strlen(req->path); + wcstombs((char*) req->path + len - num_x, ep - num_x, num_x); + } + break; + } + } while (--tries); + + if (tries == 0) { + SET_REQ_RESULT(req, -1); + } +} + + +static int fs__mkdtemp_func(uv_fs_t* req) { + if (_wmkdir(req->file.pathw) == 0) { + SET_REQ_RESULT(req, 0); + return 1; + } else if (errno != EEXIST) { + SET_REQ_RESULT(req, -1); + return 1; + } + + return 0; +} + + +void fs__mkdtemp(uv_fs_t* req) { + fs__mktemp(req, fs__mkdtemp_func); +} + + +static int fs__mkstemp_func(uv_fs_t* req) { + HANDLE file; + int fd; + + file = CreateFileW(req->file.pathw, + GENERIC_READ | GENERIC_WRITE, + FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, + NULL, + CREATE_NEW, + FILE_ATTRIBUTE_NORMAL, + NULL); + + if (file == INVALID_HANDLE_VALUE) { + DWORD error; + error = GetLastError(); + + /* If the file exists, the main fs__mktemp() function + will retry. If it's another error, we want to stop. */ + if (error != ERROR_FILE_EXISTS) { + SET_REQ_WIN32_ERROR(req, error); + return 1; + } + + return 0; + } + + fd = _open_osfhandle((intptr_t) file, 0); + if (fd < 0) { + /* The only known failure mode for _open_osfhandle() is EMFILE, in which + * case GetLastError() will return zero. However we'll try to handle other + * errors as well, should they ever occur. + */ + if (errno == EMFILE) + SET_REQ_UV_ERROR(req, UV_EMFILE, ERROR_TOO_MANY_OPEN_FILES); + else if (GetLastError() != ERROR_SUCCESS) + SET_REQ_WIN32_ERROR(req, GetLastError()); + else + SET_REQ_WIN32_ERROR(req, UV_UNKNOWN); + CloseHandle(file); + return 1; + } + + SET_REQ_RESULT(req, fd); + + return 1; +} + + +void fs__mkstemp(uv_fs_t* req) { + fs__mktemp(req, fs__mkstemp_func); +} + + +void fs__scandir(uv_fs_t* req) { + static const size_t dirents_initial_size = 32; + + HANDLE dir_handle = INVALID_HANDLE_VALUE; + + uv__dirent_t** dirents = NULL; + size_t dirents_size = 0; + size_t dirents_used = 0; + + IO_STATUS_BLOCK iosb; + NTSTATUS status; + + /* Buffer to hold directory entries returned by NtQueryDirectoryFile. + * It's important that this buffer can hold at least one entry, regardless + * of the length of the file names present in the enumerated directory. + * A file name is at most 256 WCHARs long. + * According to MSDN, the buffer must be aligned at an 8-byte boundary. + */ +#if _MSC_VER + __declspec(align(8)) char buffer[8192]; +#else + __attribute__ ((aligned (8))) char buffer[8192]; +#endif + + STATIC_ASSERT(sizeof buffer >= + sizeof(FILE_DIRECTORY_INFORMATION) + 256 * sizeof(WCHAR)); + + /* Open the directory. */ + dir_handle = + CreateFileW(req->file.pathw, + FILE_LIST_DIRECTORY | SYNCHRONIZE, + FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, + NULL, + OPEN_EXISTING, + FILE_FLAG_BACKUP_SEMANTICS, + NULL); + if (dir_handle == INVALID_HANDLE_VALUE) + goto win32_error; + + /* Read the first chunk. */ + status = pNtQueryDirectoryFile(dir_handle, + NULL, + NULL, + NULL, + &iosb, + &buffer, + sizeof buffer, + FileDirectoryInformation, + FALSE, + NULL, + TRUE); + + /* If the handle is not a directory, we'll get STATUS_INVALID_PARAMETER. + * This should be reported back as UV_ENOTDIR. + */ + if (status == STATUS_INVALID_PARAMETER) + goto not_a_directory_error; + + while (NT_SUCCESS(status)) { + char* position = buffer; + size_t next_entry_offset = 0; + + do { + FILE_DIRECTORY_INFORMATION* info; + uv__dirent_t* dirent; + + size_t wchar_len; + size_t utf8_len; + + /* Obtain a pointer to the current directory entry. */ + position += next_entry_offset; + info = (FILE_DIRECTORY_INFORMATION*) position; + + /* Fetch the offset to the next directory entry. */ + next_entry_offset = info->NextEntryOffset; + + /* Compute the length of the filename in WCHARs. */ + wchar_len = info->FileNameLength / sizeof info->FileName[0]; + + /* Skip over '.' and '..' entries. It has been reported that + * the SharePoint driver includes the terminating zero byte in + * the filename length. Strip those first. + */ + while (wchar_len > 0 && info->FileName[wchar_len - 1] == L'\0') + wchar_len -= 1; + + if (wchar_len == 0) + continue; + if (wchar_len == 1 && info->FileName[0] == L'.') + continue; + if (wchar_len == 2 && info->FileName[0] == L'.' && + info->FileName[1] == L'.') + continue; + + /* Compute the space required to store the filename as UTF-8. */ + utf8_len = WideCharToMultiByte( + CP_UTF8, 0, &info->FileName[0], wchar_len, NULL, 0, NULL, NULL); + if (utf8_len == 0) + goto win32_error; + + /* Resize the dirent array if needed. */ + if (dirents_used >= dirents_size) { + size_t new_dirents_size = + dirents_size == 0 ? dirents_initial_size : dirents_size << 1; + uv__dirent_t** new_dirents = + (uv__dirent_t **)uv__realloc(dirents, new_dirents_size * sizeof *dirents); + + if (new_dirents == NULL) + goto out_of_memory_error; + + dirents_size = new_dirents_size; + dirents = new_dirents; + } + + /* Allocate space for the uv dirent structure. The dirent structure + * includes room for the first character of the filename, but `utf8_len` + * doesn't count the NULL terminator at this point. + */ + dirent = (uv__dirent_t *)uv__malloc(sizeof *dirent + utf8_len); + if (dirent == NULL) + goto out_of_memory_error; + + dirents[dirents_used++] = dirent; + + /* Convert file name to UTF-8. */ + if (WideCharToMultiByte(CP_UTF8, + 0, + &info->FileName[0], + wchar_len, + &dirent->d_name[0], + utf8_len, + NULL, + NULL) == 0) + goto win32_error; + + /* Add a null terminator to the filename. */ + dirent->d_name[utf8_len] = '\0'; + + /* Fill out the type field. */ + if (info->FileAttributes & FILE_ATTRIBUTE_DEVICE) + dirent->d_type = UV__DT_CHAR; + else if (info->FileAttributes & FILE_ATTRIBUTE_REPARSE_POINT) + dirent->d_type = UV__DT_LINK; + else if (info->FileAttributes & FILE_ATTRIBUTE_DIRECTORY) + dirent->d_type = UV__DT_DIR; + else + dirent->d_type = UV__DT_FILE; + } while (next_entry_offset != 0); + + /* Read the next chunk. */ + status = pNtQueryDirectoryFile(dir_handle, + NULL, + NULL, + NULL, + &iosb, + &buffer, + sizeof buffer, + FileDirectoryInformation, + FALSE, + NULL, + FALSE); + + /* After the first pNtQueryDirectoryFile call, the function may return + * STATUS_SUCCESS even if the buffer was too small to hold at least one + * directory entry. + */ + if (status == STATUS_SUCCESS && iosb.Information == 0) + status = STATUS_BUFFER_OVERFLOW; + } + + if (status != STATUS_NO_MORE_FILES) + goto nt_error; + + CloseHandle(dir_handle); + + /* Store the result in the request object. */ + req->ptr = dirents; + if (dirents != NULL) + req->flags |= UV_FS_FREE_PTR; + + SET_REQ_RESULT(req, dirents_used); + + /* `nbufs` will be used as index by uv_fs_scandir_next. */ + req->fs.info.nbufs = 0; + + return; + +nt_error: + SET_REQ_WIN32_ERROR(req, pRtlNtStatusToDosError(status)); + goto cleanup; + +win32_error: + SET_REQ_WIN32_ERROR(req, GetLastError()); + goto cleanup; + +not_a_directory_error: + SET_REQ_UV_ERROR(req, UV_ENOTDIR, ERROR_DIRECTORY); + goto cleanup; + +out_of_memory_error: + SET_REQ_UV_ERROR(req, UV_ENOMEM, ERROR_OUTOFMEMORY); + goto cleanup; + +cleanup: + if (dir_handle != INVALID_HANDLE_VALUE) + CloseHandle(dir_handle); + while (dirents_used > 0) + uv__free(dirents[--dirents_used]); + if (dirents != NULL) + uv__free(dirents); +} + +void fs__opendir(uv_fs_t* req) { + WCHAR* pathw; + size_t len; + const WCHAR* fmt; + WCHAR* find_path; + uv_dir_t* dir; + + pathw = req->file.pathw; + dir = NULL; + find_path = NULL; + + /* Figure out whether path is a file or a directory. */ + if (!(GetFileAttributesW(pathw) & FILE_ATTRIBUTE_DIRECTORY)) { + SET_REQ_UV_ERROR(req, UV_ENOTDIR, ERROR_DIRECTORY); + goto error; + } + + dir = (uv_dir_t *)uv__malloc(sizeof(*dir)); + if (dir == NULL) { + SET_REQ_UV_ERROR(req, UV_ENOMEM, ERROR_OUTOFMEMORY); + goto error; + } + + len = wcslen(pathw); + + if (len == 0) + fmt = L"./*"; + else if (IS_SLASH(pathw[len - 1])) + fmt = L"%s*"; + else + fmt = L"%s\\*"; + + find_path = (WCHAR *)uv__malloc(sizeof(WCHAR) * (len + 4)); + if (find_path == NULL) { + SET_REQ_UV_ERROR(req, UV_ENOMEM, ERROR_OUTOFMEMORY); + goto error; + } + + _snwprintf(find_path, len + 3, fmt, pathw); + dir->dir_handle = FindFirstFileW(find_path, &dir->find_data); + uv__free(find_path); + find_path = NULL; + if (dir->dir_handle == INVALID_HANDLE_VALUE && + GetLastError() != ERROR_FILE_NOT_FOUND) { + SET_REQ_WIN32_ERROR(req, GetLastError()); + goto error; + } + + dir->need_find_call = FALSE; + req->ptr = dir; + SET_REQ_RESULT(req, 0); + return; + +error: + uv__free(dir); + uv__free(find_path); + req->ptr = NULL; +} + +void fs__readdir(uv_fs_t* req) { + uv_dir_t* dir; + uv_dirent_t* dirents; + uv__dirent_t dent; + unsigned int dirent_idx; + PWIN32_FIND_DATAW find_data; + unsigned int i; + int r; + + req->flags |= UV_FS_FREE_PTR; + dir = (uv_dir_t *)req->ptr; + dirents = dir->dirents; + memset(dirents, 0, dir->nentries * sizeof(*dir->dirents)); + find_data = &dir->find_data; + dirent_idx = 0; + + while (dirent_idx < dir->nentries) { + if (dir->need_find_call && FindNextFileW(dir->dir_handle, find_data) == 0) { + if (GetLastError() == ERROR_NO_MORE_FILES) + break; + goto error; + } + + /* Skip "." and ".." entries. */ + if (find_data->cFileName[0] == L'.' && + (find_data->cFileName[1] == L'\0' || + (find_data->cFileName[1] == L'.' && + find_data->cFileName[2] == L'\0'))) { + dir->need_find_call = TRUE; + continue; + } + + r = uv__convert_utf16_to_utf8((const WCHAR*) &find_data->cFileName, + -1, + (char**) &dirents[dirent_idx].name); + if (r != 0) + goto error; + + /* Copy file type. */ + if ((find_data->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0) + dent.d_type = UV__DT_DIR; + else if ((find_data->dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT) != 0) + dent.d_type = UV__DT_LINK; + else if ((find_data->dwFileAttributes & FILE_ATTRIBUTE_DEVICE) != 0) + dent.d_type = UV__DT_CHAR; + else + dent.d_type = UV__DT_FILE; + + dirents[dirent_idx].type = uv__fs_get_dirent_type(&dent); + dir->need_find_call = TRUE; + ++dirent_idx; + } + + SET_REQ_RESULT(req, dirent_idx); + return; + +error: + SET_REQ_WIN32_ERROR(req, GetLastError()); + for (i = 0; i < dirent_idx; ++i) { + uv__free((char*) dirents[i].name); + dirents[i].name = NULL; + } +} + +void fs__closedir(uv_fs_t* req) { + uv_dir_t* dir; + + dir = (uv_dir_t *)req->ptr; + FindClose(dir->dir_handle); + uv__free(req->ptr); + SET_REQ_RESULT(req, 0); +} + +INLINE static int fs__stat_handle(HANDLE handle, uv_stat_t* statbuf, + int do_lstat) { + FILE_ALL_INFORMATION file_info; + FILE_FS_VOLUME_INFORMATION volume_info; + NTSTATUS nt_status; + IO_STATUS_BLOCK io_status; + + nt_status = pNtQueryInformationFile(handle, + &io_status, + &file_info, + sizeof file_info, + FileAllInformation); + + /* Buffer overflow (a warning status code) is expected here. */ + if (NT_ERROR(nt_status)) { + SetLastError(pRtlNtStatusToDosError(nt_status)); + return -1; + } + + nt_status = pNtQueryVolumeInformationFile(handle, + &io_status, + &volume_info, + sizeof volume_info, + FileFsVolumeInformation); + + /* Buffer overflow (a warning status code) is expected here. */ + if (io_status.Status == STATUS_NOT_IMPLEMENTED) { + statbuf->st_dev = 0; + } else if (NT_ERROR(nt_status)) { + SetLastError(pRtlNtStatusToDosError(nt_status)); + return -1; + } else { + statbuf->st_dev = volume_info.VolumeSerialNumber; + } + + /* Todo: st_mode should probably always be 0666 for everyone. We might also + * want to report 0777 if the file is a .exe or a directory. + * + * Currently it's based on whether the 'readonly' attribute is set, which + * makes little sense because the semantics are so different: the 'read-only' + * flag is just a way for a user to protect against accidental deletion, and + * serves no security purpose. Windows uses ACLs for that. + * + * Also people now use uv_fs_chmod() to take away the writable bit for good + * reasons. Windows however just makes the file read-only, which makes it + * impossible to delete the file afterwards, since read-only files can't be + * deleted. + * + * IOW it's all just a clusterfuck and we should think of something that + * makes slightly more sense. + * + * And uv_fs_chmod should probably just fail on windows or be a total no-op. + * There's nothing sensible it can do anyway. + */ + statbuf->st_mode = 0; + + /* + * On Windows, FILE_ATTRIBUTE_REPARSE_POINT is a general purpose mechanism + * by which filesystem drivers can intercept and alter file system requests. + * + * The only reparse points we care about are symlinks and mount points, both + * of which are treated as POSIX symlinks. Further, we only care when + * invoked via lstat, which seeks information about the link instead of its + * target. Otherwise, reparse points must be treated as regular files. + */ + if (do_lstat && + (file_info.BasicInformation.FileAttributes & FILE_ATTRIBUTE_REPARSE_POINT)) { + /* + * If reading the link fails, the reparse point is not a symlink and needs + * to be treated as a regular file. The higher level lstat function will + * detect this failure and retry without do_lstat if appropriate. + */ + if (fs__readlink_handle(handle, NULL, &statbuf->st_size) != 0) + return -1; + statbuf->st_mode |= S_IFLNK; + } + + if (statbuf->st_mode == 0) { + if (file_info.BasicInformation.FileAttributes & FILE_ATTRIBUTE_DIRECTORY) { + statbuf->st_mode |= _S_IFDIR; + statbuf->st_size = 0; + } else { + statbuf->st_mode |= _S_IFREG; + statbuf->st_size = file_info.StandardInformation.EndOfFile.QuadPart; + } + } + + if (file_info.BasicInformation.FileAttributes & FILE_ATTRIBUTE_READONLY) + statbuf->st_mode |= _S_IREAD | (_S_IREAD >> 3) | (_S_IREAD >> 6); + else + statbuf->st_mode |= (_S_IREAD | _S_IWRITE) | ((_S_IREAD | _S_IWRITE) >> 3) | + ((_S_IREAD | _S_IWRITE) >> 6); + + FILETIME_TO_TIMESPEC(statbuf->st_atim, file_info.BasicInformation.LastAccessTime); + FILETIME_TO_TIMESPEC(statbuf->st_ctim, file_info.BasicInformation.ChangeTime); + FILETIME_TO_TIMESPEC(statbuf->st_mtim, file_info.BasicInformation.LastWriteTime); + FILETIME_TO_TIMESPEC(statbuf->st_birthtim, file_info.BasicInformation.CreationTime); + + statbuf->st_ino = file_info.InternalInformation.IndexNumber.QuadPart; + + /* st_blocks contains the on-disk allocation size in 512-byte units. */ + statbuf->st_blocks = + (uint64_t) file_info.StandardInformation.AllocationSize.QuadPart >> 9; + + statbuf->st_nlink = file_info.StandardInformation.NumberOfLinks; + + /* The st_blksize is supposed to be the 'optimal' number of bytes for reading + * and writing to the disk. That is, for any definition of 'optimal' - it's + * supposed to at least avoid read-update-write behavior when writing to the + * disk. + * + * However nobody knows this and even fewer people actually use this value, + * and in order to fill it out we'd have to make another syscall to query the + * volume for FILE_FS_SECTOR_SIZE_INFORMATION. + * + * Therefore we'll just report a sensible value that's quite commonly okay + * on modern hardware. + * + * 4096 is the minimum required to be compatible with newer Advanced Format + * drives (which have 4096 bytes per physical sector), and to be backwards + * compatible with older drives (which have 512 bytes per physical sector). + */ + statbuf->st_blksize = 4096; + + /* Todo: set st_flags to something meaningful. Also provide a wrapper for + * chattr(2). + */ + statbuf->st_flags = 0; + + /* Windows has nothing sensible to say about these values, so they'll just + * remain empty. + */ + statbuf->st_gid = 0; + statbuf->st_uid = 0; + statbuf->st_rdev = 0; + statbuf->st_gen = 0; + + return 0; +} + + +INLINE static void fs__stat_prepare_path(WCHAR* pathw) { + size_t len = wcslen(pathw); + + /* TODO: ignore namespaced paths. */ + if (len > 1 && pathw[len - 2] != L':' && + (pathw[len - 1] == L'\\' || pathw[len - 1] == L'/')) { + pathw[len - 1] = '\0'; + } +} + + +INLINE static DWORD fs__stat_impl_from_path(WCHAR* path, + int do_lstat, + uv_stat_t* statbuf) { + HANDLE handle; + DWORD flags; + DWORD ret; + + flags = FILE_FLAG_BACKUP_SEMANTICS; + if (do_lstat) + flags |= FILE_FLAG_OPEN_REPARSE_POINT; + + handle = CreateFileW(path, + FILE_READ_ATTRIBUTES, + FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, + NULL, + OPEN_EXISTING, + flags, + NULL); + + if (handle == INVALID_HANDLE_VALUE) + ret = GetLastError(); + else if (fs__stat_handle(handle, statbuf, do_lstat) != 0) + ret = GetLastError(); + else + ret = 0; + + CloseHandle(handle); + return ret; +} + + +INLINE static void fs__stat_impl(uv_fs_t* req, int do_lstat) { + DWORD error; + + error = fs__stat_impl_from_path(req->file.pathw, do_lstat, &req->statbuf); + if (error != 0) { + if (do_lstat && + (error == ERROR_SYMLINK_NOT_SUPPORTED || + error == ERROR_NOT_A_REPARSE_POINT)) { + /* We opened a reparse point but it was not a symlink. Try again. */ + fs__stat_impl(req, 0); + } else { + /* Stat failed. */ + SET_REQ_WIN32_ERROR(req, error); + } + + return; + } + + req->ptr = &req->statbuf; + req->result = 0; +} + + +static void fs__stat(uv_fs_t* req) { + fs__stat_prepare_path(req->file.pathw); + fs__stat_impl(req, 0); +} + + +static void fs__lstat(uv_fs_t* req) { + fs__stat_prepare_path(req->file.pathw); + fs__stat_impl(req, 1); +} + + +static void fs__fstat(uv_fs_t* req) { + int fd = req->file.fd; + HANDLE handle; + + VERIFY_FD(fd, req); + + handle = uv__get_osfhandle(fd); + + if (handle == INVALID_HANDLE_VALUE) { + SET_REQ_WIN32_ERROR(req, ERROR_INVALID_HANDLE); + return; + } + + if (fs__stat_handle(handle, &req->statbuf, 0) != 0) { + SET_REQ_WIN32_ERROR(req, GetLastError()); + return; + } + + req->ptr = &req->statbuf; + req->result = 0; +} + + +static void fs__rename(uv_fs_t* req) { + if (!MoveFileExW(req->file.pathw, req->fs.info.new_pathw, MOVEFILE_REPLACE_EXISTING)) { + SET_REQ_WIN32_ERROR(req, GetLastError()); + return; + } + + SET_REQ_RESULT(req, 0); +} + + +INLINE static void fs__sync_impl(uv_fs_t* req) { + int fd = req->file.fd; + int result; + + VERIFY_FD(fd, req); + + result = FlushFileBuffers(uv__get_osfhandle(fd)) ? 0 : -1; + if (result == -1) { + SET_REQ_WIN32_ERROR(req, GetLastError()); + } else { + SET_REQ_RESULT(req, result); + } +} + + +static void fs__fsync(uv_fs_t* req) { + fs__sync_impl(req); +} + + +static void fs__fdatasync(uv_fs_t* req) { + fs__sync_impl(req); +} + + +static void fs__ftruncate(uv_fs_t* req) { + int fd = req->file.fd; + HANDLE handle; + struct uv__fd_info_s fd_info = { 0 }; + NTSTATUS status; + IO_STATUS_BLOCK io_status; + FILE_END_OF_FILE_INFORMATION eof_info; + + VERIFY_FD(fd, req); + + handle = uv__get_osfhandle(fd); + + if (uv__fd_hash_get(fd, &fd_info)) { + if (fd_info.is_directory) { + SET_REQ_WIN32_ERROR(req, ERROR_ACCESS_DENIED); + return; + } + + if (fd_info.mapping != INVALID_HANDLE_VALUE) { + CloseHandle(fd_info.mapping); + } + } + + eof_info.EndOfFile.QuadPart = req->fs.info.offset; + + status = pNtSetInformationFile(handle, + &io_status, + &eof_info, + sizeof eof_info, + FileEndOfFileInformation); + + if (NT_SUCCESS(status)) { + SET_REQ_RESULT(req, 0); + } else { + SET_REQ_WIN32_ERROR(req, pRtlNtStatusToDosError(status)); + + if (fd_info.flags) { + CloseHandle(handle); + fd_info.mapping = INVALID_HANDLE_VALUE; + fd_info.size.QuadPart = 0; + fd_info.current_pos.QuadPart = 0; + uv__fd_hash_add(fd, &fd_info); + return; + } + } + + if (fd_info.flags) { + fd_info.size = eof_info.EndOfFile; + + if (fd_info.size.QuadPart == 0) { + fd_info.mapping = INVALID_HANDLE_VALUE; + } else { + DWORD flProtect = (fd_info.flags & (UV_FS_O_RDONLY | UV_FS_O_WRONLY | + UV_FS_O_RDWR)) == UV_FS_O_RDONLY ? PAGE_READONLY : PAGE_READWRITE; + fd_info.mapping = CreateFileMapping(handle, + NULL, + flProtect, + fd_info.size.HighPart, + fd_info.size.LowPart, + NULL); + if (fd_info.mapping == NULL) { + SET_REQ_WIN32_ERROR(req, GetLastError()); + CloseHandle(handle); + fd_info.mapping = INVALID_HANDLE_VALUE; + fd_info.size.QuadPart = 0; + fd_info.current_pos.QuadPart = 0; + uv__fd_hash_add(fd, &fd_info); + return; + } + } + + uv__fd_hash_add(fd, &fd_info); + } +} + + +static void fs__copyfile(uv_fs_t* req) { + int flags; + int overwrite; + uv_stat_t statbuf; + uv_stat_t new_statbuf; + + flags = req->fs.info.file_flags; + + if (flags & UV_FS_COPYFILE_FICLONE_FORCE) { + SET_REQ_UV_ERROR(req, UV_ENOSYS, ERROR_NOT_SUPPORTED); + return; + } + + overwrite = flags & UV_FS_COPYFILE_EXCL; + + if (CopyFileW(req->file.pathw, req->fs.info.new_pathw, overwrite) != 0) { + SET_REQ_RESULT(req, 0); + return; + } + + SET_REQ_WIN32_ERROR(req, GetLastError()); + if (req->result != UV_EBUSY) + return; + + /* if error UV_EBUSY check if src and dst file are the same */ + if (fs__stat_impl_from_path(req->file.pathw, 0, &statbuf) != 0 || + fs__stat_impl_from_path(req->fs.info.new_pathw, 0, &new_statbuf) != 0) { + return; + } + + if (statbuf.st_dev == new_statbuf.st_dev && + statbuf.st_ino == new_statbuf.st_ino) { + SET_REQ_RESULT(req, 0); + } +} + + +static void fs__sendfile(uv_fs_t* req) { + int fd_in = req->file.fd, fd_out = req->fs.info.fd_out; + size_t length = req->fs.info.bufsml[0].len; + int64_t offset = req->fs.info.offset; + const size_t max_buf_size = 65536; + size_t buf_size = length < max_buf_size ? length : max_buf_size; + int n, result = 0; + int64_t result_offset = 0; + char* buf = (char*) uv__malloc(buf_size); + if (!buf) { + uv_fatal_error(ERROR_OUTOFMEMORY, "uv__malloc"); + } + + if (offset != -1) { + result_offset = _lseeki64(fd_in, offset, SEEK_SET); + } + + if (result_offset == -1) { + result = -1; + } else { + while (length > 0) { + n = _read(fd_in, buf, length < buf_size ? length : buf_size); + if (n == 0) { + break; + } else if (n == -1) { + result = -1; + break; + } + + length -= n; + + n = _write(fd_out, buf, n); + if (n == -1) { + result = -1; + break; + } + + result += n; + } + } + + uv__free(buf); + + SET_REQ_RESULT(req, result); +} + + +static void fs__access(uv_fs_t* req) { + DWORD attr = GetFileAttributesW(req->file.pathw); + + if (attr == INVALID_FILE_ATTRIBUTES) { + SET_REQ_WIN32_ERROR(req, GetLastError()); + return; + } + + /* + * Access is possible if + * - write access wasn't requested, + * - or the file isn't read-only, + * - or it's a directory. + * (Directories cannot be read-only on Windows.) + */ + if (!(req->fs.info.mode & W_OK) || + !(attr & FILE_ATTRIBUTE_READONLY) || + (attr & FILE_ATTRIBUTE_DIRECTORY)) { + SET_REQ_RESULT(req, 0); + } else { + SET_REQ_WIN32_ERROR(req, UV_EPERM); + } + +} + + +static void fs__chmod(uv_fs_t* req) { + int result = _wchmod(req->file.pathw, req->fs.info.mode); + SET_REQ_RESULT(req, result); +} + + +static void fs__fchmod(uv_fs_t* req) { + int fd = req->file.fd; + int clear_archive_flag; + HANDLE handle; + NTSTATUS nt_status; + IO_STATUS_BLOCK io_status; + FILE_BASIC_INFORMATION file_info; + + VERIFY_FD(fd, req); + + handle = ReOpenFile(uv__get_osfhandle(fd), FILE_WRITE_ATTRIBUTES, 0, 0); + if (handle == INVALID_HANDLE_VALUE) { + SET_REQ_WIN32_ERROR(req, GetLastError()); + return; + } + + nt_status = pNtQueryInformationFile(handle, + &io_status, + &file_info, + sizeof file_info, + FileBasicInformation); + + if (!NT_SUCCESS(nt_status)) { + SET_REQ_WIN32_ERROR(req, pRtlNtStatusToDosError(nt_status)); + goto fchmod_cleanup; + } + + /* Test if the Archive attribute is cleared */ + if ((file_info.FileAttributes & FILE_ATTRIBUTE_ARCHIVE) == 0) { + /* Set Archive flag, otherwise setting or clearing the read-only + flag will not work */ + file_info.FileAttributes |= FILE_ATTRIBUTE_ARCHIVE; + nt_status = pNtSetInformationFile(handle, + &io_status, + &file_info, + sizeof file_info, + FileBasicInformation); + if (!NT_SUCCESS(nt_status)) { + SET_REQ_WIN32_ERROR(req, pRtlNtStatusToDosError(nt_status)); + goto fchmod_cleanup; + } + /* Remeber to clear the flag later on */ + clear_archive_flag = 1; + } else { + clear_archive_flag = 0; + } + + if (req->fs.info.mode & _S_IWRITE) { + file_info.FileAttributes &= ~FILE_ATTRIBUTE_READONLY; + } else { + file_info.FileAttributes |= FILE_ATTRIBUTE_READONLY; + } + + nt_status = pNtSetInformationFile(handle, + &io_status, + &file_info, + sizeof file_info, + FileBasicInformation); + + if (!NT_SUCCESS(nt_status)) { + SET_REQ_WIN32_ERROR(req, pRtlNtStatusToDosError(nt_status)); + goto fchmod_cleanup; + } + + if (clear_archive_flag) { + file_info.FileAttributes &= ~FILE_ATTRIBUTE_ARCHIVE; + if (file_info.FileAttributes == 0) { + file_info.FileAttributes = FILE_ATTRIBUTE_NORMAL; + } + nt_status = pNtSetInformationFile(handle, + &io_status, + &file_info, + sizeof file_info, + FileBasicInformation); + if (!NT_SUCCESS(nt_status)) { + SET_REQ_WIN32_ERROR(req, pRtlNtStatusToDosError(nt_status)); + goto fchmod_cleanup; + } + } + + SET_REQ_SUCCESS(req); +fchmod_cleanup: + CloseHandle(handle); +} + + +INLINE static int fs__utime_handle(HANDLE handle, double atime, double mtime) { + FILETIME filetime_a, filetime_m; + + TIME_T_TO_FILETIME(atime, &filetime_a); + TIME_T_TO_FILETIME(mtime, &filetime_m); + + if (!SetFileTime(handle, NULL, &filetime_a, &filetime_m)) { + return -1; + } + + return 0; +} + +INLINE static DWORD fs__utime_impl_from_path(WCHAR* path, + double atime, + double mtime, + int do_lutime) { + HANDLE handle; + DWORD flags; + DWORD ret; + + flags = FILE_FLAG_BACKUP_SEMANTICS; + if (do_lutime) { + flags |= FILE_FLAG_OPEN_REPARSE_POINT; + } + + handle = CreateFileW(path, + FILE_WRITE_ATTRIBUTES, + FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, + NULL, + OPEN_EXISTING, + flags, + NULL); + + if (handle == INVALID_HANDLE_VALUE) { + ret = GetLastError(); + } else if (fs__utime_handle(handle, atime, mtime) != 0) { + ret = GetLastError(); + } else { + ret = 0; + } + + CloseHandle(handle); + return ret; +} + +INLINE static void fs__utime_impl(uv_fs_t* req, int do_lutime) { + DWORD error; + + error = fs__utime_impl_from_path(req->file.pathw, + req->fs.time.atime, + req->fs.time.mtime, + do_lutime); + + if (error != 0) { + if (do_lutime && + (error == ERROR_SYMLINK_NOT_SUPPORTED || + error == ERROR_NOT_A_REPARSE_POINT)) { + /* Opened file is a reparse point but not a symlink. Try again. */ + fs__utime_impl(req, 0); + } else { + /* utime failed. */ + SET_REQ_WIN32_ERROR(req, error); + } + + return; + } + + req->result = 0; +} + +static void fs__utime(uv_fs_t* req) { + fs__utime_impl(req, /* do_lutime */ 0); +} + + +static void fs__futime(uv_fs_t* req) { + int fd = req->file.fd; + HANDLE handle; + VERIFY_FD(fd, req); + + handle = uv__get_osfhandle(fd); + + if (handle == INVALID_HANDLE_VALUE) { + SET_REQ_WIN32_ERROR(req, ERROR_INVALID_HANDLE); + return; + } + + if (fs__utime_handle(handle, req->fs.time.atime, req->fs.time.mtime) != 0) { + SET_REQ_WIN32_ERROR(req, GetLastError()); + return; + } + + req->result = 0; +} + +static void fs__lutime(uv_fs_t* req) { + fs__utime_impl(req, /* do_lutime */ 1); +} + + +static void fs__link(uv_fs_t* req) { + DWORD r = CreateHardLinkW(req->fs.info.new_pathw, req->file.pathw, NULL); + if (r == 0) { + SET_REQ_WIN32_ERROR(req, GetLastError()); + } else { + req->result = 0; + } +} + + +static void fs__create_junction(uv_fs_t* req, const WCHAR* path, + const WCHAR* new_path) { + HANDLE handle = INVALID_HANDLE_VALUE; + REPARSE_DATA_BUFFER *buffer = NULL; + int created = 0; + int target_len; + int is_absolute, is_long_path; + int needed_buf_size, used_buf_size, used_data_size, path_buf_len; + int start, len, i; + int add_slash; + DWORD bytes; + WCHAR* path_buf; + + target_len = wcslen(path); + is_long_path = wcsncmp(path, LONG_PATH_PREFIX, LONG_PATH_PREFIX_LEN) == 0; + + if (is_long_path) { + is_absolute = 1; + } else { + is_absolute = target_len >= 3 && IS_LETTER(path[0]) && + path[1] == L':' && IS_SLASH(path[2]); + } + + if (!is_absolute) { + /* Not supporting relative paths */ + SET_REQ_UV_ERROR(req, UV_EINVAL, ERROR_NOT_SUPPORTED); + return; + } + + /* Do a pessimistic calculation of the required buffer size */ + needed_buf_size = + FIELD_OFFSET(REPARSE_DATA_BUFFER, MountPointReparseBuffer.PathBuffer) + + JUNCTION_PREFIX_LEN * sizeof(WCHAR) + + 2 * (target_len + 2) * sizeof(WCHAR); + + /* Allocate the buffer */ + buffer = (REPARSE_DATA_BUFFER*)uv__malloc(needed_buf_size); + if (!buffer) { + uv_fatal_error(ERROR_OUTOFMEMORY, "uv__malloc"); + } + + /* Grab a pointer to the part of the buffer where filenames go */ + path_buf = (WCHAR*)&(buffer->MountPointReparseBuffer.PathBuffer); + path_buf_len = 0; + + /* Copy the substitute (internal) target path */ + start = path_buf_len; + + wcsncpy((WCHAR*)&path_buf[path_buf_len], JUNCTION_PREFIX, + JUNCTION_PREFIX_LEN); + path_buf_len += JUNCTION_PREFIX_LEN; + + add_slash = 0; + for (i = is_long_path ? LONG_PATH_PREFIX_LEN : 0; path[i] != L'\0'; i++) { + if (IS_SLASH(path[i])) { + add_slash = 1; + continue; + } + + if (add_slash) { + path_buf[path_buf_len++] = L'\\'; + add_slash = 0; + } + + path_buf[path_buf_len++] = path[i]; + } + path_buf[path_buf_len++] = L'\\'; + len = path_buf_len - start; + + /* Set the info about the substitute name */ + buffer->MountPointReparseBuffer.SubstituteNameOffset = start * sizeof(WCHAR); + buffer->MountPointReparseBuffer.SubstituteNameLength = len * sizeof(WCHAR); + + /* Insert null terminator */ + path_buf[path_buf_len++] = L'\0'; + + /* Copy the print name of the target path */ + start = path_buf_len; + add_slash = 0; + for (i = is_long_path ? LONG_PATH_PREFIX_LEN : 0; path[i] != L'\0'; i++) { + if (IS_SLASH(path[i])) { + add_slash = 1; + continue; + } + + if (add_slash) { + path_buf[path_buf_len++] = L'\\'; + add_slash = 0; + } + + path_buf[path_buf_len++] = path[i]; + } + len = path_buf_len - start; + if (len == 2) { + path_buf[path_buf_len++] = L'\\'; + len++; + } + + /* Set the info about the print name */ + buffer->MountPointReparseBuffer.PrintNameOffset = start * sizeof(WCHAR); + buffer->MountPointReparseBuffer.PrintNameLength = len * sizeof(WCHAR); + + /* Insert another null terminator */ + path_buf[path_buf_len++] = L'\0'; + + /* Calculate how much buffer space was actually used */ + used_buf_size = FIELD_OFFSET(REPARSE_DATA_BUFFER, MountPointReparseBuffer.PathBuffer) + + path_buf_len * sizeof(WCHAR); + used_data_size = used_buf_size - + FIELD_OFFSET(REPARSE_DATA_BUFFER, MountPointReparseBuffer); + + /* Put general info in the data buffer */ + buffer->ReparseTag = IO_REPARSE_TAG_MOUNT_POINT; + buffer->ReparseDataLength = used_data_size; + buffer->Reserved = 0; + + /* Create a new directory */ + if (!CreateDirectoryW(new_path, NULL)) { + SET_REQ_WIN32_ERROR(req, GetLastError()); + goto error; + } + created = 1; + + /* Open the directory */ + handle = CreateFileW(new_path, + GENERIC_WRITE, + 0, + NULL, + OPEN_EXISTING, + FILE_FLAG_BACKUP_SEMANTICS | + FILE_FLAG_OPEN_REPARSE_POINT, + NULL); + if (handle == INVALID_HANDLE_VALUE) { + SET_REQ_WIN32_ERROR(req, GetLastError()); + goto error; + } + + /* Create the actual reparse point */ + if (!DeviceIoControl(handle, + FSCTL_SET_REPARSE_POINT, + buffer, + used_buf_size, + NULL, + 0, + &bytes, + NULL)) { + SET_REQ_WIN32_ERROR(req, GetLastError()); + goto error; + } + + /* Clean up */ + CloseHandle(handle); + uv__free(buffer); + + SET_REQ_RESULT(req, 0); + return; + +error: + uv__free(buffer); + + if (handle != INVALID_HANDLE_VALUE) { + CloseHandle(handle); + } + + if (created) { + RemoveDirectoryW(new_path); + } +} + + +static void fs__symlink(uv_fs_t* req) { + WCHAR* pathw; + WCHAR* new_pathw; + int flags; + int err; + + pathw = req->file.pathw; + new_pathw = req->fs.info.new_pathw; + + if (req->fs.info.file_flags & UV_FS_SYMLINK_JUNCTION) { + fs__create_junction(req, pathw, new_pathw); + return; + } + + if (req->fs.info.file_flags & UV_FS_SYMLINK_DIR) + flags = SYMBOLIC_LINK_FLAG_DIRECTORY | uv__file_symlink_usermode_flag; + else + flags = uv__file_symlink_usermode_flag; + + if (CreateSymbolicLinkW(new_pathw, pathw, flags)) { + SET_REQ_RESULT(req, 0); + return; + } + + /* Something went wrong. We will test if it is because of user-mode + * symlinks. + */ + err = GetLastError(); + if (err == ERROR_INVALID_PARAMETER && + flags & SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATE) { + /* This system does not support user-mode symlinks. We will clear the + * unsupported flag and retry. + */ + uv__file_symlink_usermode_flag = 0; + fs__symlink(req); + } else { + SET_REQ_WIN32_ERROR(req, err); + } +} + + +static void fs__readlink(uv_fs_t* req) { + HANDLE handle; + + handle = CreateFileW(req->file.pathw, + 0, + 0, + NULL, + OPEN_EXISTING, + FILE_FLAG_OPEN_REPARSE_POINT | FILE_FLAG_BACKUP_SEMANTICS, + NULL); + + if (handle == INVALID_HANDLE_VALUE) { + SET_REQ_WIN32_ERROR(req, GetLastError()); + return; + } + + if (fs__readlink_handle(handle, (char**) &req->ptr, NULL) != 0) { + SET_REQ_WIN32_ERROR(req, GetLastError()); + CloseHandle(handle); + return; + } + + req->flags |= UV_FS_FREE_PTR; + SET_REQ_RESULT(req, 0); + + CloseHandle(handle); +} + + +static ssize_t fs__realpath_handle(HANDLE handle, char** realpath_ptr) { + int r; + DWORD w_realpath_len; + WCHAR* w_realpath_ptr = NULL; + WCHAR* w_realpath_buf; + + w_realpath_len = GetFinalPathNameByHandleW(handle, NULL, 0, VOLUME_NAME_DOS); + if (w_realpath_len == 0) { + return -1; + } + + w_realpath_buf = (WCHAR *)uv__malloc((w_realpath_len + 1) * sizeof(WCHAR)); + if (w_realpath_buf == NULL) { + SetLastError(ERROR_OUTOFMEMORY); + return -1; + } + w_realpath_ptr = w_realpath_buf; + + if (GetFinalPathNameByHandleW( + handle, w_realpath_ptr, w_realpath_len, VOLUME_NAME_DOS) == 0) { + uv__free(w_realpath_buf); + SetLastError(ERROR_INVALID_HANDLE); + return -1; + } + + /* convert UNC path to long path */ + if (wcsncmp(w_realpath_ptr, + UNC_PATH_PREFIX, + UNC_PATH_PREFIX_LEN) == 0) { + w_realpath_ptr += 6; + *w_realpath_ptr = L'\\'; + w_realpath_len -= 6; + } else if (wcsncmp(w_realpath_ptr, + LONG_PATH_PREFIX, + LONG_PATH_PREFIX_LEN) == 0) { + w_realpath_ptr += 4; + w_realpath_len -= 4; + } else { + uv__free(w_realpath_buf); + SetLastError(ERROR_INVALID_HANDLE); + return -1; + } + + r = fs__wide_to_utf8(w_realpath_ptr, w_realpath_len, realpath_ptr, NULL); + uv__free(w_realpath_buf); + return r; +} + +static void fs__realpath(uv_fs_t* req) { + HANDLE handle; + + handle = CreateFileW(req->file.pathw, + 0, + 0, + NULL, + OPEN_EXISTING, + FILE_ATTRIBUTE_NORMAL | FILE_FLAG_BACKUP_SEMANTICS, + NULL); + if (handle == INVALID_HANDLE_VALUE) { + SET_REQ_WIN32_ERROR(req, GetLastError()); + return; + } + + if (fs__realpath_handle(handle, (char**) &req->ptr) == -1) { + CloseHandle(handle); + SET_REQ_WIN32_ERROR(req, GetLastError()); + return; + } + + CloseHandle(handle); + req->flags |= UV_FS_FREE_PTR; + SET_REQ_RESULT(req, 0); +} + + +static void fs__chown(uv_fs_t* req) { + req->result = 0; +} + + +static void fs__fchown(uv_fs_t* req) { + req->result = 0; +} + + +static void fs__lchown(uv_fs_t* req) { + req->result = 0; +} + + +static void fs__statfs(uv_fs_t* req) { + uv_statfs_t* stat_fs; + DWORD sectors_per_cluster; + DWORD bytes_per_sector; + DWORD free_clusters; + DWORD total_clusters; + WCHAR* pathw; + + pathw = req->file.pathw; +retry_get_disk_free_space: + if (0 == GetDiskFreeSpaceW(pathw, + §ors_per_cluster, + &bytes_per_sector, + &free_clusters, + &total_clusters)) { + DWORD err; + WCHAR* fpart; + size_t len; + DWORD ret; + BOOL is_second; + + err = GetLastError(); + is_second = pathw != req->file.pathw; + if (err != ERROR_DIRECTORY || is_second) { + if (is_second) + uv__free(pathw); + + SET_REQ_WIN32_ERROR(req, err); + return; + } + + len = MAX_PATH + 1; + pathw = (WCHAR *)uv__malloc(len * sizeof(*pathw)); + if (pathw == NULL) { + SET_REQ_UV_ERROR(req, UV_ENOMEM, ERROR_OUTOFMEMORY); + return; + } +retry_get_full_path_name: + ret = GetFullPathNameW(req->file.pathw, + len, + pathw, + &fpart); + if (ret == 0) { + uv__free(pathw); + SET_REQ_WIN32_ERROR(req, err); + return; + } else if (ret > len) { + len = ret; + pathw = (WCHAR *)uv__reallocf(pathw, len * sizeof(*pathw)); + if (pathw == NULL) { + SET_REQ_UV_ERROR(req, UV_ENOMEM, ERROR_OUTOFMEMORY); + return; + } + goto retry_get_full_path_name; + } + if (fpart != 0) + *fpart = L'\0'; + + goto retry_get_disk_free_space; + } + if (pathw != req->file.pathw) { + uv__free(pathw); + } + + stat_fs = (uv_statfs_t *)uv__malloc(sizeof(*stat_fs)); + if (stat_fs == NULL) { + SET_REQ_UV_ERROR(req, UV_ENOMEM, ERROR_OUTOFMEMORY); + return; + } + + stat_fs->f_type = 0; + stat_fs->f_bsize = bytes_per_sector * sectors_per_cluster; + stat_fs->f_blocks = total_clusters; + stat_fs->f_bfree = free_clusters; + stat_fs->f_bavail = free_clusters; + stat_fs->f_files = 0; + stat_fs->f_ffree = 0; + req->ptr = stat_fs; + req->flags |= UV_FS_FREE_PTR; + SET_REQ_RESULT(req, 0); +} + + +static void uv__fs_work(struct uv__work* w) { + uv_fs_t* req; + + req = container_of(w, uv_fs_t, work_req); + assert(req->type == UV_FS); + +#define XX(uc, lc) case UV_FS_##uc: fs__##lc(req); break; + switch (req->fs_type) { + XX(OPEN, open) + XX(CLOSE, close) + XX(READ, read) + XX(WRITE, write) + XX(COPYFILE, copyfile) + XX(SENDFILE, sendfile) + XX(STAT, stat) + XX(LSTAT, lstat) + XX(FSTAT, fstat) + XX(FTRUNCATE, ftruncate) + XX(UTIME, utime) + XX(FUTIME, futime) + XX(LUTIME, lutime) + XX(ACCESS, access) + XX(CHMOD, chmod) + XX(FCHMOD, fchmod) + XX(FSYNC, fsync) + XX(FDATASYNC, fdatasync) + XX(UNLINK, unlink) + XX(RMDIR, rmdir) + XX(MKDIR, mkdir) + XX(MKDTEMP, mkdtemp) + XX(MKSTEMP, mkstemp) + XX(RENAME, rename) + XX(SCANDIR, scandir) + XX(READDIR, readdir) + XX(OPENDIR, opendir) + XX(CLOSEDIR, closedir) + XX(LINK, link) + XX(SYMLINK, symlink) + XX(READLINK, readlink) + XX(REALPATH, realpath) + XX(CHOWN, chown) + XX(FCHOWN, fchown) + XX(LCHOWN, lchown) + XX(STATFS, statfs) + default: + assert(!"bad uv_fs_type"); + } +} + + +static void uv__fs_done(struct uv__work* w, int status) { + uv_fs_t* req; + + req = container_of(w, uv_fs_t, work_req); + uv__req_unregister(req->loop, req); + + if (status == UV_ECANCELED) { + assert(req->result == 0); + req->result = UV_ECANCELED; + } + + req->cb(req); +} + + +void uv_fs_req_cleanup(uv_fs_t* req) { + if (req == NULL) + return; + + if (req->flags & UV_FS_CLEANEDUP) + return; + + if (req->flags & UV_FS_FREE_PATHS) + uv__free(req->file.pathw); + + if (req->flags & UV_FS_FREE_PTR) { + if (req->fs_type == UV_FS_SCANDIR && req->ptr != NULL) + uv__fs_scandir_cleanup(req); + else if (req->fs_type == UV_FS_READDIR) + uv__fs_readdir_cleanup(req); + else + uv__free(req->ptr); + } + + if (req->fs.info.bufs != req->fs.info.bufsml) + uv__free(req->fs.info.bufs); + + req->path = NULL; + req->file.pathw = NULL; + req->fs.info.new_pathw = NULL; + req->fs.info.bufs = NULL; + req->ptr = NULL; + + req->flags |= UV_FS_CLEANEDUP; +} + + +int uv_fs_open(uv_loop_t* loop, uv_fs_t* req, const char* path, int flags, + int mode, uv_fs_cb cb) { + int err; + + INIT(UV_FS_OPEN); + err = fs__capture_path(req, path, NULL, cb != NULL); + if (err) { + SET_REQ_WIN32_ERROR(req, err); + return req->result; + } + + req->fs.info.file_flags = flags; + req->fs.info.mode = mode; + POST; +} + + +int uv_fs_close(uv_loop_t* loop, uv_fs_t* req, uv_file fd, uv_fs_cb cb) { + INIT(UV_FS_CLOSE); + req->file.fd = fd; + POST; +} + + +int uv_fs_read(uv_loop_t* loop, + uv_fs_t* req, + uv_file fd, + const uv_buf_t bufs[], + unsigned int nbufs, + int64_t offset, + uv_fs_cb cb) { + INIT(UV_FS_READ); + + if (bufs == NULL || nbufs == 0) { + SET_REQ_UV_ERROR(req, UV_EINVAL, ERROR_INVALID_PARAMETER); + return UV_EINVAL; + } + + req->file.fd = fd; + + req->fs.info.nbufs = nbufs; + req->fs.info.bufs = req->fs.info.bufsml; + if (nbufs > ARRAY_SIZE(req->fs.info.bufsml)) + req->fs.info.bufs = (uv_buf_t *)uv__malloc(nbufs * sizeof(*bufs)); + + if (req->fs.info.bufs == NULL) { + SET_REQ_UV_ERROR(req, UV_ENOMEM, ERROR_OUTOFMEMORY); + return UV_ENOMEM; + } + + memcpy(req->fs.info.bufs, bufs, nbufs * sizeof(*bufs)); + + req->fs.info.offset = offset; + POST; +} + + +int uv_fs_write(uv_loop_t* loop, + uv_fs_t* req, + uv_file fd, + const uv_buf_t bufs[], + unsigned int nbufs, + int64_t offset, + uv_fs_cb cb) { + INIT(UV_FS_WRITE); + + if (bufs == NULL || nbufs == 0) { + SET_REQ_UV_ERROR(req, UV_EINVAL, ERROR_INVALID_PARAMETER); + return UV_EINVAL; + } + + req->file.fd = fd; + + req->fs.info.nbufs = nbufs; + req->fs.info.bufs = req->fs.info.bufsml; + if (nbufs > ARRAY_SIZE(req->fs.info.bufsml)) + req->fs.info.bufs = (uv_buf_t *)uv__malloc(nbufs * sizeof(*bufs)); + + if (req->fs.info.bufs == NULL) { + SET_REQ_UV_ERROR(req, UV_ENOMEM, ERROR_OUTOFMEMORY); + return UV_ENOMEM; + } + + memcpy(req->fs.info.bufs, bufs, nbufs * sizeof(*bufs)); + + req->fs.info.offset = offset; + POST; +} + + +int uv_fs_unlink(uv_loop_t* loop, uv_fs_t* req, const char* path, + uv_fs_cb cb) { + int err; + + INIT(UV_FS_UNLINK); + err = fs__capture_path(req, path, NULL, cb != NULL); + if (err) { + SET_REQ_WIN32_ERROR(req, err); + return req->result; + } + + POST; +} + + +int uv_fs_mkdir(uv_loop_t* loop, uv_fs_t* req, const char* path, int mode, + uv_fs_cb cb) { + int err; + + INIT(UV_FS_MKDIR); + err = fs__capture_path(req, path, NULL, cb != NULL); + if (err) { + SET_REQ_WIN32_ERROR(req, err); + return req->result; + } + + req->fs.info.mode = mode; + POST; +} + + +int uv_fs_mkdtemp(uv_loop_t* loop, + uv_fs_t* req, + const char* tpl, + uv_fs_cb cb) { + int err; + + INIT(UV_FS_MKDTEMP); + err = fs__capture_path(req, tpl, NULL, TRUE); + if (err) { + SET_REQ_WIN32_ERROR(req, err); + return req->result; + } + + POST; +} + + +int uv_fs_mkstemp(uv_loop_t* loop, + uv_fs_t* req, + const char* tpl, + uv_fs_cb cb) { + int err; + + INIT(UV_FS_MKSTEMP); + err = fs__capture_path(req, tpl, NULL, TRUE); + if (err) { + SET_REQ_WIN32_ERROR(req, err); + return req->result; + } + + POST; +} + + +int uv_fs_rmdir(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb) { + int err; + + INIT(UV_FS_RMDIR); + err = fs__capture_path(req, path, NULL, cb != NULL); + if (err) { + SET_REQ_WIN32_ERROR(req, err); + return req->result; + } + + POST; +} + + +int uv_fs_scandir(uv_loop_t* loop, uv_fs_t* req, const char* path, int flags, + uv_fs_cb cb) { + int err; + + INIT(UV_FS_SCANDIR); + err = fs__capture_path(req, path, NULL, cb != NULL); + if (err) { + SET_REQ_WIN32_ERROR(req, err); + return req->result; + } + + req->fs.info.file_flags = flags; + POST; +} + +int uv_fs_opendir(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + uv_fs_cb cb) { + int err; + + INIT(UV_FS_OPENDIR); + err = fs__capture_path(req, path, NULL, cb != NULL); + if (err) { + SET_REQ_WIN32_ERROR(req, err); + return req->result; + } + POST; +} + +int uv_fs_readdir(uv_loop_t* loop, + uv_fs_t* req, + uv_dir_t* dir, + uv_fs_cb cb) { + INIT(UV_FS_READDIR); + + if (dir == NULL || + dir->dirents == NULL || + dir->dir_handle == INVALID_HANDLE_VALUE) { + SET_REQ_UV_ERROR(req, UV_EINVAL, ERROR_INVALID_PARAMETER); + return UV_EINVAL; + } + + req->ptr = dir; + POST; +} + +int uv_fs_closedir(uv_loop_t* loop, + uv_fs_t* req, + uv_dir_t* dir, + uv_fs_cb cb) { + INIT(UV_FS_CLOSEDIR); + if (dir == NULL) { + SET_REQ_UV_ERROR(req, UV_EINVAL, ERROR_INVALID_PARAMETER); + return UV_EINVAL; + } + req->ptr = dir; + POST; +} + +int uv_fs_link(uv_loop_t* loop, uv_fs_t* req, const char* path, + const char* new_path, uv_fs_cb cb) { + int err; + + INIT(UV_FS_LINK); + err = fs__capture_path(req, path, new_path, cb != NULL); + if (err) { + SET_REQ_WIN32_ERROR(req, err); + return req->result; + } + + POST; +} + + +int uv_fs_symlink(uv_loop_t* loop, uv_fs_t* req, const char* path, + const char* new_path, int flags, uv_fs_cb cb) { + int err; + + INIT(UV_FS_SYMLINK); + err = fs__capture_path(req, path, new_path, cb != NULL); + if (err) { + SET_REQ_WIN32_ERROR(req, err); + return req->result; + } + + req->fs.info.file_flags = flags; + POST; +} + + +int uv_fs_readlink(uv_loop_t* loop, uv_fs_t* req, const char* path, + uv_fs_cb cb) { + int err; + + INIT(UV_FS_READLINK); + err = fs__capture_path(req, path, NULL, cb != NULL); + if (err) { + SET_REQ_WIN32_ERROR(req, err); + return req->result; + } + + POST; +} + + +int uv_fs_realpath(uv_loop_t* loop, uv_fs_t* req, const char* path, + uv_fs_cb cb) { + int err; + + INIT(UV_FS_REALPATH); + + if (!path) { + SET_REQ_UV_ERROR(req, UV_EINVAL, ERROR_INVALID_PARAMETER); + return UV_EINVAL; + } + + err = fs__capture_path(req, path, NULL, cb != NULL); + if (err) { + SET_REQ_WIN32_ERROR(req, err); + return req->result; + } + + POST; +} + + +int uv_fs_chown(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_uid_t uid, + uv_gid_t gid, uv_fs_cb cb) { + int err; + + INIT(UV_FS_CHOWN); + err = fs__capture_path(req, path, NULL, cb != NULL); + if (err) { + SET_REQ_WIN32_ERROR(req, err); + return req->result; + } + + POST; +} + + +int uv_fs_fchown(uv_loop_t* loop, uv_fs_t* req, uv_file fd, uv_uid_t uid, + uv_gid_t gid, uv_fs_cb cb) { + INIT(UV_FS_FCHOWN); + POST; +} + + +int uv_fs_lchown(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_uid_t uid, + uv_gid_t gid, uv_fs_cb cb) { + int err; + + INIT(UV_FS_LCHOWN); + err = fs__capture_path(req, path, NULL, cb != NULL); + if (err) { + SET_REQ_WIN32_ERROR(req, err); + return req->result; + } + + POST; +} + + +int uv_fs_stat(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb) { + int err; + + INIT(UV_FS_STAT); + err = fs__capture_path(req, path, NULL, cb != NULL); + if (err) { + SET_REQ_WIN32_ERROR(req, err); + return req->result; + } + + POST; +} + + +int uv_fs_lstat(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb) { + int err; + + INIT(UV_FS_LSTAT); + err = fs__capture_path(req, path, NULL, cb != NULL); + if (err) { + SET_REQ_WIN32_ERROR(req, err); + return req->result; + } + + POST; +} + + +int uv_fs_fstat(uv_loop_t* loop, uv_fs_t* req, uv_file fd, uv_fs_cb cb) { + INIT(UV_FS_FSTAT); + req->file.fd = fd; + POST; +} + + +int uv_fs_rename(uv_loop_t* loop, uv_fs_t* req, const char* path, + const char* new_path, uv_fs_cb cb) { + int err; + + INIT(UV_FS_RENAME); + err = fs__capture_path(req, path, new_path, cb != NULL); + if (err) { + SET_REQ_WIN32_ERROR(req, err); + return req->result; + } + + POST; +} + + +int uv_fs_fsync(uv_loop_t* loop, uv_fs_t* req, uv_file fd, uv_fs_cb cb) { + INIT(UV_FS_FSYNC); + req->file.fd = fd; + POST; +} + + +int uv_fs_fdatasync(uv_loop_t* loop, uv_fs_t* req, uv_file fd, uv_fs_cb cb) { + INIT(UV_FS_FDATASYNC); + req->file.fd = fd; + POST; +} + + +int uv_fs_ftruncate(uv_loop_t* loop, uv_fs_t* req, uv_file fd, + int64_t offset, uv_fs_cb cb) { + INIT(UV_FS_FTRUNCATE); + req->file.fd = fd; + req->fs.info.offset = offset; + POST; +} + + +int uv_fs_copyfile(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + const char* new_path, + int flags, + uv_fs_cb cb) { + int err; + + INIT(UV_FS_COPYFILE); + + if (flags & ~(UV_FS_COPYFILE_EXCL | + UV_FS_COPYFILE_FICLONE | + UV_FS_COPYFILE_FICLONE_FORCE)) { + SET_REQ_UV_ERROR(req, UV_EINVAL, ERROR_INVALID_PARAMETER); + return UV_EINVAL; + } + + err = fs__capture_path(req, path, new_path, cb != NULL); + if (err) { + SET_REQ_WIN32_ERROR(req, err); + return req->result; + } + + req->fs.info.file_flags = flags; + POST; +} + + +int uv_fs_sendfile(uv_loop_t* loop, uv_fs_t* req, uv_file fd_out, + uv_file fd_in, int64_t in_offset, size_t length, uv_fs_cb cb) { + INIT(UV_FS_SENDFILE); + req->file.fd = fd_in; + req->fs.info.fd_out = fd_out; + req->fs.info.offset = in_offset; + req->fs.info.bufsml[0].len = length; + POST; +} + + +int uv_fs_access(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + int flags, + uv_fs_cb cb) { + int err; + + INIT(UV_FS_ACCESS); + err = fs__capture_path(req, path, NULL, cb != NULL); + if (err) { + SET_REQ_WIN32_ERROR(req, err); + return req->result; + } + + req->fs.info.mode = flags; + POST; +} + + +int uv_fs_chmod(uv_loop_t* loop, uv_fs_t* req, const char* path, int mode, + uv_fs_cb cb) { + int err; + + INIT(UV_FS_CHMOD); + err = fs__capture_path(req, path, NULL, cb != NULL); + if (err) { + SET_REQ_WIN32_ERROR(req, err); + return req->result; + } + + req->fs.info.mode = mode; + POST; +} + + +int uv_fs_fchmod(uv_loop_t* loop, uv_fs_t* req, uv_file fd, int mode, + uv_fs_cb cb) { + INIT(UV_FS_FCHMOD); + req->file.fd = fd; + req->fs.info.mode = mode; + POST; +} + + +int uv_fs_utime(uv_loop_t* loop, uv_fs_t* req, const char* path, double atime, + double mtime, uv_fs_cb cb) { + int err; + + INIT(UV_FS_UTIME); + err = fs__capture_path(req, path, NULL, cb != NULL); + if (err) { + SET_REQ_WIN32_ERROR(req, err); + return req->result; + } + + req->fs.time.atime = atime; + req->fs.time.mtime = mtime; + POST; +} + + +int uv_fs_futime(uv_loop_t* loop, uv_fs_t* req, uv_file fd, double atime, + double mtime, uv_fs_cb cb) { + INIT(UV_FS_FUTIME); + req->file.fd = fd; + req->fs.time.atime = atime; + req->fs.time.mtime = mtime; + POST; +} + +int uv_fs_lutime(uv_loop_t* loop, uv_fs_t* req, const char* path, double atime, + double mtime, uv_fs_cb cb) { + int err; + + INIT(UV_FS_LUTIME); + err = fs__capture_path(req, path, NULL, cb != NULL); + if (err) { + SET_REQ_WIN32_ERROR(req, err); + return req->result; + } + + req->fs.time.atime = atime; + req->fs.time.mtime = mtime; + POST; +} + + +int uv_fs_statfs(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + uv_fs_cb cb) { + int err; + + INIT(UV_FS_STATFS); + err = fs__capture_path(req, path, NULL, cb != NULL); + if (err) { + SET_REQ_WIN32_ERROR(req, err); + return req->result; + } + + POST; +} + +int uv_fs_get_system_error(const uv_fs_t* req) { + return req->sys_errno_; +} diff --git a/external/libuv/src/win/getaddrinfo.c b/external/libuv/src/win/getaddrinfo.c new file mode 100644 index 000000000..dfab860a7 --- /dev/null +++ b/external/libuv/src/win/getaddrinfo.c @@ -0,0 +1,463 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#include + +#include "uv.h" +#include "internal.h" +#include "req-inl.h" +#include "idna.h" + +/* EAI_* constants. */ +#include + +/* Needed for ConvertInterfaceIndexToLuid and ConvertInterfaceLuidToNameA */ +#include + +int uv__getaddrinfo_translate_error(int sys_err) { + switch (sys_err) { + case 0: return 0; + case WSATRY_AGAIN: return UV_EAI_AGAIN; + case WSAEINVAL: return UV_EAI_BADFLAGS; + case WSANO_RECOVERY: return UV_EAI_FAIL; + case WSAEAFNOSUPPORT: return UV_EAI_FAMILY; + case WSA_NOT_ENOUGH_MEMORY: return UV_EAI_MEMORY; + case WSAHOST_NOT_FOUND: return UV_EAI_NONAME; + case WSATYPE_NOT_FOUND: return UV_EAI_SERVICE; + case WSAESOCKTNOSUPPORT: return UV_EAI_SOCKTYPE; + default: return uv_translate_sys_error(sys_err); + } +} + + +/* + * MinGW is missing this + */ +#if !defined(_MSC_VER) && !defined(__MINGW64_VERSION_MAJOR) + typedef struct addrinfoW { + int ai_flags; + int ai_family; + int ai_socktype; + int ai_protocol; + size_t ai_addrlen; + WCHAR* ai_canonname; + struct sockaddr* ai_addr; + struct addrinfoW* ai_next; + } ADDRINFOW, *PADDRINFOW; + + DECLSPEC_IMPORT int WSAAPI GetAddrInfoW(const WCHAR* node, + const WCHAR* service, + const ADDRINFOW* hints, + PADDRINFOW* result); + + DECLSPEC_IMPORT void WSAAPI FreeAddrInfoW(PADDRINFOW pAddrInfo); +#endif + + +/* Adjust size value to be multiple of 4. Use to keep pointer aligned. + * Do we need different versions of this for different architectures? */ +#define ALIGNED_SIZE(X) ((((X) + 3) >> 2) << 2) + +#ifndef NDIS_IF_MAX_STRING_SIZE +#define NDIS_IF_MAX_STRING_SIZE IF_MAX_STRING_SIZE +#endif + +static void uv__getaddrinfo_work(struct uv__work* w) { + uv_getaddrinfo_t* req; + struct addrinfoW* hints; + int err; + + req = container_of(w, uv_getaddrinfo_t, work_req); + hints = req->addrinfow; + req->addrinfow = NULL; + err = GetAddrInfoW(req->node, req->service, hints, &req->addrinfow); + req->retcode = uv__getaddrinfo_translate_error(err); +} + + +/* + * Called from uv_run when complete. Call user specified callback + * then free returned addrinfo + * Returned addrinfo strings are converted from UTF-16 to UTF-8. + * + * To minimize allocation we calculate total size required, + * and copy all structs and referenced strings into the one block. + * Each size calculation is adjusted to avoid unaligned pointers. + */ +static void uv__getaddrinfo_done(struct uv__work* w, int status) { + uv_getaddrinfo_t* req; + int addrinfo_len = 0; + int name_len = 0; + size_t addrinfo_struct_len = ALIGNED_SIZE(sizeof(struct addrinfo)); + struct addrinfoW* addrinfow_ptr; + struct addrinfo* addrinfo_ptr; + char* alloc_ptr = NULL; + char* cur_ptr = NULL; + + req = container_of(w, uv_getaddrinfo_t, work_req); + + /* release input parameter memory */ + uv__free(req->alloc); + req->alloc = NULL; + + if (status == UV_ECANCELED) { + assert(req->retcode == 0); + req->retcode = UV_EAI_CANCELED; + goto complete; + } + + if (req->retcode == 0) { + /* Convert addrinfoW to addrinfo. First calculate required length. */ + addrinfow_ptr = req->addrinfow; + while (addrinfow_ptr != NULL) { + addrinfo_len += addrinfo_struct_len + + ALIGNED_SIZE(addrinfow_ptr->ai_addrlen); + if (addrinfow_ptr->ai_canonname != NULL) { + name_len = WideCharToMultiByte(CP_UTF8, + 0, + addrinfow_ptr->ai_canonname, + -1, + NULL, + 0, + NULL, + NULL); + if (name_len == 0) { + req->retcode = uv_translate_sys_error(GetLastError()); + goto complete; + } + addrinfo_len += ALIGNED_SIZE(name_len); + } + addrinfow_ptr = addrinfow_ptr->ai_next; + } + + /* allocate memory for addrinfo results */ + alloc_ptr = (char*)uv__malloc(addrinfo_len); + + /* do conversions */ + if (alloc_ptr != NULL) { + cur_ptr = alloc_ptr; + addrinfow_ptr = req->addrinfow; + + while (addrinfow_ptr != NULL) { + /* copy addrinfo struct data */ + assert(cur_ptr + addrinfo_struct_len <= alloc_ptr + addrinfo_len); + addrinfo_ptr = (struct addrinfo*)cur_ptr; + addrinfo_ptr->ai_family = addrinfow_ptr->ai_family; + addrinfo_ptr->ai_socktype = addrinfow_ptr->ai_socktype; + addrinfo_ptr->ai_protocol = addrinfow_ptr->ai_protocol; + addrinfo_ptr->ai_flags = addrinfow_ptr->ai_flags; + addrinfo_ptr->ai_addrlen = addrinfow_ptr->ai_addrlen; + addrinfo_ptr->ai_canonname = NULL; + addrinfo_ptr->ai_addr = NULL; + addrinfo_ptr->ai_next = NULL; + + cur_ptr += addrinfo_struct_len; + + /* copy sockaddr */ + if (addrinfo_ptr->ai_addrlen > 0) { + assert(cur_ptr + addrinfo_ptr->ai_addrlen <= + alloc_ptr + addrinfo_len); + memcpy(cur_ptr, addrinfow_ptr->ai_addr, addrinfo_ptr->ai_addrlen); + addrinfo_ptr->ai_addr = (struct sockaddr*)cur_ptr; + cur_ptr += ALIGNED_SIZE(addrinfo_ptr->ai_addrlen); + } + + /* convert canonical name to UTF-8 */ + if (addrinfow_ptr->ai_canonname != NULL) { + name_len = WideCharToMultiByte(CP_UTF8, + 0, + addrinfow_ptr->ai_canonname, + -1, + NULL, + 0, + NULL, + NULL); + assert(name_len > 0); + assert(cur_ptr + name_len <= alloc_ptr + addrinfo_len); + name_len = WideCharToMultiByte(CP_UTF8, + 0, + addrinfow_ptr->ai_canonname, + -1, + cur_ptr, + name_len, + NULL, + NULL); + assert(name_len > 0); + addrinfo_ptr->ai_canonname = cur_ptr; + cur_ptr += ALIGNED_SIZE(name_len); + } + assert(cur_ptr <= alloc_ptr + addrinfo_len); + + /* set next ptr */ + addrinfow_ptr = addrinfow_ptr->ai_next; + if (addrinfow_ptr != NULL) { + addrinfo_ptr->ai_next = (struct addrinfo*)cur_ptr; + } + } + req->addrinfo = (struct addrinfo*)alloc_ptr; + } else { + req->retcode = UV_EAI_MEMORY; + } + } + + /* return memory to system */ + if (req->addrinfow != NULL) { + FreeAddrInfoW(req->addrinfow); + req->addrinfow = NULL; + } + +complete: + uv__req_unregister(req->loop, req); + + /* finally do callback with converted result */ + if (req->getaddrinfo_cb) + req->getaddrinfo_cb(req, req->retcode, req->addrinfo); +} + + +void uv_freeaddrinfo(struct addrinfo* ai) { + char* alloc_ptr = (char*)ai; + + /* release copied result memory */ + uv__free(alloc_ptr); +} + + +/* + * Entry point for getaddrinfo + * we convert the UTF-8 strings to UNICODE + * and save the UNICODE string pointers in the req + * We also copy hints so that caller does not need to keep memory until the + * callback. + * return 0 if a callback will be made + * return error code if validation fails + * + * To minimize allocation we calculate total size required, + * and copy all structs and referenced strings into the one block. + * Each size calculation is adjusted to avoid unaligned pointers. + */ +int uv_getaddrinfo(uv_loop_t* loop, + uv_getaddrinfo_t* req, + uv_getaddrinfo_cb getaddrinfo_cb, + const char* node, + const char* service, + const struct addrinfo* hints) { + char hostname_ascii[256]; + int nodesize = 0; + int servicesize = 0; + int hintssize = 0; + char* alloc_ptr = NULL; + int err; + long rc; + + if (req == NULL || (node == NULL && service == NULL)) { + return UV_EINVAL; + } + + UV_REQ_INIT(req, UV_GETADDRINFO); + req->getaddrinfo_cb = getaddrinfo_cb; + req->addrinfo = NULL; + req->loop = loop; + req->retcode = 0; + + /* calculate required memory size for all input values */ + if (node != NULL) { + rc = uv__idna_toascii(node, + node + strlen(node), + hostname_ascii, + hostname_ascii + sizeof(hostname_ascii)); + if (rc < 0) + return rc; + nodesize = ALIGNED_SIZE(MultiByteToWideChar(CP_UTF8, 0, hostname_ascii, + -1, NULL, 0) * sizeof(WCHAR)); + if (nodesize == 0) { + err = GetLastError(); + goto error; + } + node = hostname_ascii; + } + + if (service != NULL) { + servicesize = ALIGNED_SIZE(MultiByteToWideChar(CP_UTF8, + 0, + service, + -1, + NULL, + 0) * + sizeof(WCHAR)); + if (servicesize == 0) { + err = GetLastError(); + goto error; + } + } + if (hints != NULL) { + hintssize = ALIGNED_SIZE(sizeof(struct addrinfoW)); + } + + /* allocate memory for inputs, and partition it as needed */ + alloc_ptr = (char*)uv__malloc(nodesize + servicesize + hintssize); + if (!alloc_ptr) { + err = WSAENOBUFS; + goto error; + } + + /* save alloc_ptr now so we can free if error */ + req->alloc = (void*)alloc_ptr; + + /* Convert node string to UTF16 into allocated memory and save pointer in the + * request. */ + if (node != NULL) { + req->node = (WCHAR*)alloc_ptr; + if (MultiByteToWideChar(CP_UTF8, + 0, + node, + -1, + (WCHAR*) alloc_ptr, + nodesize / sizeof(WCHAR)) == 0) { + err = GetLastError(); + goto error; + } + alloc_ptr += nodesize; + } else { + req->node = NULL; + } + + /* Convert service string to UTF16 into allocated memory and save pointer in + * the req. */ + if (service != NULL) { + req->service = (WCHAR*)alloc_ptr; + if (MultiByteToWideChar(CP_UTF8, + 0, + service, + -1, + (WCHAR*) alloc_ptr, + servicesize / sizeof(WCHAR)) == 0) { + err = GetLastError(); + goto error; + } + alloc_ptr += servicesize; + } else { + req->service = NULL; + } + + /* copy hints to allocated memory and save pointer in req */ + if (hints != NULL) { + req->addrinfow = (struct addrinfoW*)alloc_ptr; + req->addrinfow->ai_family = hints->ai_family; + req->addrinfow->ai_socktype = hints->ai_socktype; + req->addrinfow->ai_protocol = hints->ai_protocol; + req->addrinfow->ai_flags = hints->ai_flags; + req->addrinfow->ai_addrlen = 0; + req->addrinfow->ai_canonname = NULL; + req->addrinfow->ai_addr = NULL; + req->addrinfow->ai_next = NULL; + } else { + req->addrinfow = NULL; + } + + uv__req_register(loop, req); + + if (getaddrinfo_cb) { + uv__work_submit(loop, + &req->work_req, + UV__WORK_SLOW_IO, + uv__getaddrinfo_work, + uv__getaddrinfo_done); + return 0; + } else { + uv__getaddrinfo_work(&req->work_req); + uv__getaddrinfo_done(&req->work_req, 0); + return req->retcode; + } + +error: + if (req != NULL) { + uv__free(req->alloc); + req->alloc = NULL; + } + return uv_translate_sys_error(err); +} + +int uv_if_indextoname(unsigned int ifindex, char* buffer, size_t* size) { + NET_LUID luid; + wchar_t wname[NDIS_IF_MAX_STRING_SIZE + 1]; /* Add one for the NUL. */ + DWORD bufsize; + int r; + + if (buffer == NULL || size == NULL || *size == 0) + return UV_EINVAL; + + r = ConvertInterfaceIndexToLuid(ifindex, &luid); + + if (r != 0) + return uv_translate_sys_error(r); + + r = ConvertInterfaceLuidToNameW(&luid, wname, ARRAY_SIZE(wname)); + + if (r != 0) + return uv_translate_sys_error(r); + + /* Check how much space we need */ + bufsize = WideCharToMultiByte(CP_UTF8, 0, wname, -1, NULL, 0, NULL, NULL); + + if (bufsize == 0) { + return uv_translate_sys_error(GetLastError()); + } else if (bufsize > *size) { + *size = bufsize; + return UV_ENOBUFS; + } + + /* Convert to UTF-8 */ + bufsize = WideCharToMultiByte(CP_UTF8, + 0, + wname, + -1, + buffer, + *size, + NULL, + NULL); + + if (bufsize == 0) + return uv_translate_sys_error(GetLastError()); + + *size = bufsize - 1; + return 0; +} + +int uv_if_indextoiid(unsigned int ifindex, char* buffer, size_t* size) { + int r; + + if (buffer == NULL || size == NULL || *size == 0) + return UV_EINVAL; + + r = snprintf(buffer, *size, "%d", ifindex); + + if (r < 0) + return uv_translate_sys_error(r); + + if (r >= (int) *size) { + *size = r + 1; + return UV_ENOBUFS; + } + + *size = r; + return 0; +} diff --git a/external/libuv/src/win/getnameinfo.c b/external/libuv/src/win/getnameinfo.c new file mode 100644 index 000000000..b3773380c --- /dev/null +++ b/external/libuv/src/win/getnameinfo.c @@ -0,0 +1,157 @@ +/* Copyright Joyent, Inc. and other Node 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. +*/ + +#include +#include + +#include "uv.h" +#include "internal.h" +#include "req-inl.h" + +#ifndef GetNameInfo +int WSAAPI GetNameInfoW( + const SOCKADDR *pSockaddr, + socklen_t SockaddrLength, + PWCHAR pNodeBuffer, + DWORD NodeBufferSize, + PWCHAR pServiceBuffer, + DWORD ServiceBufferSize, + INT Flags +); +#endif + +static void uv__getnameinfo_work(struct uv__work* w) { + uv_getnameinfo_t* req; + WCHAR host[NI_MAXHOST]; + WCHAR service[NI_MAXSERV]; + int ret; + + req = container_of(w, uv_getnameinfo_t, work_req); + if (GetNameInfoW((struct sockaddr*)&req->storage, + sizeof(req->storage), + host, + ARRAY_SIZE(host), + service, + ARRAY_SIZE(service), + req->flags)) { + ret = WSAGetLastError(); + req->retcode = uv__getaddrinfo_translate_error(ret); + return; + } + + ret = WideCharToMultiByte(CP_UTF8, + 0, + host, + -1, + req->host, + sizeof(req->host), + NULL, + NULL); + if (ret == 0) { + req->retcode = uv_translate_sys_error(GetLastError()); + return; + } + + ret = WideCharToMultiByte(CP_UTF8, + 0, + service, + -1, + req->service, + sizeof(req->service), + NULL, + NULL); + if (ret == 0) { + req->retcode = uv_translate_sys_error(GetLastError()); + } +} + + +/* +* Called from uv_run when complete. +*/ +static void uv__getnameinfo_done(struct uv__work* w, int status) { + uv_getnameinfo_t* req; + char* host; + char* service; + + req = container_of(w, uv_getnameinfo_t, work_req); + uv__req_unregister(req->loop, req); + host = service = NULL; + + if (status == UV_ECANCELED) { + assert(req->retcode == 0); + req->retcode = UV_EAI_CANCELED; + } else if (req->retcode == 0) { + host = req->host; + service = req->service; + } + + if (req->getnameinfo_cb) + req->getnameinfo_cb(req, req->retcode, host, service); +} + + +/* +* Entry point for getnameinfo +* return 0 if a callback will be made +* return error code if validation fails +*/ +int uv_getnameinfo(uv_loop_t* loop, + uv_getnameinfo_t* req, + uv_getnameinfo_cb getnameinfo_cb, + const struct sockaddr* addr, + int flags) { + if (req == NULL || addr == NULL) + return UV_EINVAL; + + if (addr->sa_family == AF_INET) { + memcpy(&req->storage, + addr, + sizeof(struct sockaddr_in)); + } else if (addr->sa_family == AF_INET6) { + memcpy(&req->storage, + addr, + sizeof(struct sockaddr_in6)); + } else { + return UV_EINVAL; + } + + UV_REQ_INIT(req, UV_GETNAMEINFO); + uv__req_register(loop, req); + + req->getnameinfo_cb = getnameinfo_cb; + req->flags = flags; + req->loop = loop; + req->retcode = 0; + + if (getnameinfo_cb) { + uv__work_submit(loop, + &req->work_req, + UV__WORK_SLOW_IO, + uv__getnameinfo_work, + uv__getnameinfo_done); + return 0; + } else { + uv__getnameinfo_work(&req->work_req); + uv__getnameinfo_done(&req->work_req, 0); + return req->retcode; + } +} diff --git a/external/libuv/src/win/handle-inl.h b/external/libuv/src/win/handle-inl.h new file mode 100644 index 000000000..82c657d57 --- /dev/null +++ b/external/libuv/src/win/handle-inl.h @@ -0,0 +1,180 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#ifndef UV_WIN_HANDLE_INL_H_ +#define UV_WIN_HANDLE_INL_H_ + +#include +#include + +#include "uv.h" +#include "internal.h" + + +#define DECREASE_ACTIVE_COUNT(loop, handle) \ + do { \ + if (--(handle)->activecnt == 0 && \ + !((handle)->flags & UV_HANDLE_CLOSING)) { \ + uv__handle_stop((handle)); \ + } \ + assert((handle)->activecnt >= 0); \ + } while (0) + + +#define INCREASE_ACTIVE_COUNT(loop, handle) \ + do { \ + if ((handle)->activecnt++ == 0) { \ + uv__handle_start((handle)); \ + } \ + assert((handle)->activecnt > 0); \ + } while (0) + + +#define DECREASE_PENDING_REQ_COUNT(handle) \ + do { \ + assert(handle->reqs_pending > 0); \ + handle->reqs_pending--; \ + \ + if (handle->flags & UV_HANDLE_CLOSING && \ + handle->reqs_pending == 0) { \ + uv_want_endgame(loop, (uv_handle_t*)handle); \ + } \ + } while (0) + + +#define uv__handle_closing(handle) \ + do { \ + assert(!((handle)->flags & UV_HANDLE_CLOSING)); \ + \ + if (!(((handle)->flags & UV_HANDLE_ACTIVE) && \ + ((handle)->flags & UV_HANDLE_REF))) \ + uv__active_handle_add((uv_handle_t*) (handle)); \ + \ + (handle)->flags |= UV_HANDLE_CLOSING; \ + (handle)->flags &= ~UV_HANDLE_ACTIVE; \ + } while (0) + + +#define uv__handle_close(handle) \ + do { \ + QUEUE_REMOVE(&(handle)->handle_queue); \ + uv__active_handle_rm((uv_handle_t*) (handle)); \ + \ + (handle)->flags |= UV_HANDLE_CLOSED; \ + \ + if ((handle)->close_cb) \ + (handle)->close_cb((uv_handle_t*) (handle)); \ + } while (0) + + +INLINE static void uv_want_endgame(uv_loop_t* loop, uv_handle_t* handle) { + if (!(handle->flags & UV_HANDLE_ENDGAME_QUEUED)) { + handle->flags |= UV_HANDLE_ENDGAME_QUEUED; + + handle->endgame_next = loop->endgame_handles; + loop->endgame_handles = handle; + } +} + + +INLINE static void uv_process_endgames(uv_loop_t* loop) { + uv_handle_t* handle; + + while (loop->endgame_handles) { + handle = loop->endgame_handles; + loop->endgame_handles = handle->endgame_next; + + handle->flags &= ~UV_HANDLE_ENDGAME_QUEUED; + + switch (handle->type) { + case UV_TCP: + uv_tcp_endgame(loop, (uv_tcp_t*) handle); + break; + + case UV_NAMED_PIPE: + uv_pipe_endgame(loop, (uv_pipe_t*) handle); + break; + + case UV_TTY: + uv_tty_endgame(loop, (uv_tty_t*) handle); + break; + + case UV_UDP: + uv_udp_endgame(loop, (uv_udp_t*) handle); + break; + + case UV_POLL: + uv_poll_endgame(loop, (uv_poll_t*) handle); + break; + + case UV_TIMER: + uv__timer_close((uv_timer_t*) handle); + uv__handle_close(handle); + break; + + case UV_PREPARE: + case UV_CHECK: + case UV_IDLE: + uv_loop_watcher_endgame(loop, handle); + break; + + case UV_ASYNC: + uv_async_endgame(loop, (uv_async_t*) handle); + break; + + case UV_SIGNAL: + uv_signal_endgame(loop, (uv_signal_t*) handle); + break; + + case UV_PROCESS: + uv_process_endgame(loop, (uv_process_t*) handle); + break; + + case UV_FS_EVENT: + uv_fs_event_endgame(loop, (uv_fs_event_t*) handle); + break; + + case UV_FS_POLL: + uv__fs_poll_endgame(loop, (uv_fs_poll_t*) handle); + break; + + default: + assert(0); + break; + } + } +} + +INLINE static HANDLE uv__get_osfhandle(int fd) +{ + /* _get_osfhandle() raises an assert in debug builds if the FD is invalid. + * But it also correctly checks the FD and returns INVALID_HANDLE_VALUE for + * invalid FDs in release builds (or if you let the assert continue). So this + * wrapper function disables asserts when calling _get_osfhandle. */ + + HANDLE handle; + UV_BEGIN_DISABLE_CRT_ASSERT(); + handle = (HANDLE) _get_osfhandle(fd); + UV_END_DISABLE_CRT_ASSERT(); + return handle; +} + +#endif /* UV_WIN_HANDLE_INL_H_ */ diff --git a/external/libuv/src/win/handle.c b/external/libuv/src/win/handle.c new file mode 100644 index 000000000..61e4df61b --- /dev/null +++ b/external/libuv/src/win/handle.c @@ -0,0 +1,162 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#include +#include +#include + +#include "uv.h" +#include "internal.h" +#include "handle-inl.h" + + +uv_handle_type uv_guess_handle(uv_file file) { + HANDLE handle; + DWORD mode; + + if (file < 0) { + return UV_UNKNOWN_HANDLE; + } + + handle = uv__get_osfhandle(file); + + switch (GetFileType(handle)) { + case FILE_TYPE_CHAR: + if (GetConsoleMode(handle, &mode)) { + return UV_TTY; + } else { + return UV_FILE; + } + + case FILE_TYPE_PIPE: + return UV_NAMED_PIPE; + + case FILE_TYPE_DISK: + return UV_FILE; + + default: + return UV_UNKNOWN_HANDLE; + } +} + + +int uv_is_active(const uv_handle_t* handle) { + return (handle->flags & UV_HANDLE_ACTIVE) && + !(handle->flags & UV_HANDLE_CLOSING); +} + + +void uv_close(uv_handle_t* handle, uv_close_cb cb) { + uv_loop_t* loop = handle->loop; + + if (handle->flags & UV_HANDLE_CLOSING) { + assert(0); + return; + } + + handle->close_cb = cb; + + /* Handle-specific close actions */ + switch (handle->type) { + case UV_TCP: + uv_tcp_close(loop, (uv_tcp_t*)handle); + return; + + case UV_NAMED_PIPE: + uv_pipe_close(loop, (uv_pipe_t*) handle); + return; + + case UV_TTY: + uv_tty_close((uv_tty_t*) handle); + return; + + case UV_UDP: + uv_udp_close(loop, (uv_udp_t*) handle); + return; + + case UV_POLL: + uv_poll_close(loop, (uv_poll_t*) handle); + return; + + case UV_TIMER: + uv_timer_stop((uv_timer_t*)handle); + uv__handle_closing(handle); + uv_want_endgame(loop, handle); + return; + + case UV_PREPARE: + uv_prepare_stop((uv_prepare_t*)handle); + uv__handle_closing(handle); + uv_want_endgame(loop, handle); + return; + + case UV_CHECK: + uv_check_stop((uv_check_t*)handle); + uv__handle_closing(handle); + uv_want_endgame(loop, handle); + return; + + case UV_IDLE: + uv_idle_stop((uv_idle_t*)handle); + uv__handle_closing(handle); + uv_want_endgame(loop, handle); + return; + + case UV_ASYNC: + uv_async_close(loop, (uv_async_t*) handle); + return; + + case UV_SIGNAL: + uv_signal_close(loop, (uv_signal_t*) handle); + return; + + case UV_PROCESS: + uv_process_close(loop, (uv_process_t*) handle); + return; + + case UV_FS_EVENT: + uv_fs_event_close(loop, (uv_fs_event_t*) handle); + return; + + case UV_FS_POLL: + uv__fs_poll_close((uv_fs_poll_t*) handle); + uv__handle_closing(handle); + return; + + default: + /* Not supported */ + abort(); + } +} + + +int uv_is_closing(const uv_handle_t* handle) { + return !!(handle->flags & (UV_HANDLE_CLOSING | UV_HANDLE_CLOSED)); +} + + +uv_os_fd_t uv_get_osfhandle(int fd) { + return uv__get_osfhandle(fd); +} + +int uv_open_osfhandle(uv_os_fd_t os_fd) { + return _open_osfhandle((intptr_t) os_fd, 0); +} diff --git a/external/libuv/src/win/internal.h b/external/libuv/src/win/internal.h new file mode 100644 index 000000000..058ddb8ed --- /dev/null +++ b/external/libuv/src/win/internal.h @@ -0,0 +1,344 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#ifndef UV_WIN_INTERNAL_H_ +#define UV_WIN_INTERNAL_H_ + +#include "uv.h" +#include "../uv-common.h" + +#include "uv/tree.h" +#include "winapi.h" +#include "winsock.h" + +#ifdef _MSC_VER +# define INLINE __inline +# define UV_THREAD_LOCAL __declspec( thread ) +#else +# define INLINE inline +# define UV_THREAD_LOCAL __thread +#endif + + +#ifdef _DEBUG + +extern UV_THREAD_LOCAL int uv__crt_assert_enabled; + +#define UV_BEGIN_DISABLE_CRT_ASSERT() \ + { \ + int uv__saved_crt_assert_enabled = uv__crt_assert_enabled; \ + uv__crt_assert_enabled = FALSE; + + +#define UV_END_DISABLE_CRT_ASSERT() \ + uv__crt_assert_enabled = uv__saved_crt_assert_enabled; \ + } + +#else +#define UV_BEGIN_DISABLE_CRT_ASSERT() +#define UV_END_DISABLE_CRT_ASSERT() +#endif + +/* + * TCP + */ + +typedef enum { + UV__IPC_SOCKET_XFER_NONE = 0, + UV__IPC_SOCKET_XFER_TCP_CONNECTION, + UV__IPC_SOCKET_XFER_TCP_SERVER +} uv__ipc_socket_xfer_type_t; + +typedef struct { + WSAPROTOCOL_INFOW socket_info; + uint32_t delayed_error; +} uv__ipc_socket_xfer_info_t; + +int uv_tcp_listen(uv_tcp_t* handle, int backlog, uv_connection_cb cb); +int uv_tcp_accept(uv_tcp_t* server, uv_tcp_t* client); +int uv_tcp_read_start(uv_tcp_t* handle, uv_alloc_cb alloc_cb, + uv_read_cb read_cb); +int uv_tcp_write(uv_loop_t* loop, uv_write_t* req, uv_tcp_t* handle, + const uv_buf_t bufs[], unsigned int nbufs, uv_write_cb cb); +int uv__tcp_try_write(uv_tcp_t* handle, const uv_buf_t bufs[], + unsigned int nbufs); + +void uv_process_tcp_read_req(uv_loop_t* loop, uv_tcp_t* handle, uv_req_t* req); +void uv_process_tcp_write_req(uv_loop_t* loop, uv_tcp_t* handle, + uv_write_t* req); +void uv_process_tcp_accept_req(uv_loop_t* loop, uv_tcp_t* handle, + uv_req_t* req); +void uv_process_tcp_connect_req(uv_loop_t* loop, uv_tcp_t* handle, + uv_connect_t* req); + +void uv_tcp_close(uv_loop_t* loop, uv_tcp_t* tcp); +void uv_tcp_endgame(uv_loop_t* loop, uv_tcp_t* handle); + +int uv__tcp_xfer_export(uv_tcp_t* handle, + int pid, + uv__ipc_socket_xfer_type_t* xfer_type, + uv__ipc_socket_xfer_info_t* xfer_info); +int uv__tcp_xfer_import(uv_tcp_t* tcp, + uv__ipc_socket_xfer_type_t xfer_type, + uv__ipc_socket_xfer_info_t* xfer_info); + + +/* + * UDP + */ +void uv_process_udp_recv_req(uv_loop_t* loop, uv_udp_t* handle, uv_req_t* req); +void uv_process_udp_send_req(uv_loop_t* loop, uv_udp_t* handle, + uv_udp_send_t* req); + +void uv_udp_close(uv_loop_t* loop, uv_udp_t* handle); +void uv_udp_endgame(uv_loop_t* loop, uv_udp_t* handle); + + +/* + * Pipes + */ +int uv_stdio_pipe_server(uv_loop_t* loop, uv_pipe_t* handle, DWORD access, + char* name, size_t nameSize); + +int uv_pipe_listen(uv_pipe_t* handle, int backlog, uv_connection_cb cb); +int uv_pipe_accept(uv_pipe_t* server, uv_stream_t* client); +int uv_pipe_read_start(uv_pipe_t* handle, uv_alloc_cb alloc_cb, + uv_read_cb read_cb); +void uv__pipe_read_stop(uv_pipe_t* handle); +int uv__pipe_write(uv_loop_t* loop, + uv_write_t* req, + uv_pipe_t* handle, + const uv_buf_t bufs[], + size_t nbufs, + uv_stream_t* send_handle, + uv_write_cb cb); + +void uv_process_pipe_read_req(uv_loop_t* loop, uv_pipe_t* handle, + uv_req_t* req); +void uv_process_pipe_write_req(uv_loop_t* loop, uv_pipe_t* handle, + uv_write_t* req); +void uv_process_pipe_accept_req(uv_loop_t* loop, uv_pipe_t* handle, + uv_req_t* raw_req); +void uv_process_pipe_connect_req(uv_loop_t* loop, uv_pipe_t* handle, + uv_connect_t* req); +void uv_process_pipe_shutdown_req(uv_loop_t* loop, uv_pipe_t* handle, + uv_shutdown_t* req); + +void uv_pipe_close(uv_loop_t* loop, uv_pipe_t* handle); +void uv_pipe_cleanup(uv_loop_t* loop, uv_pipe_t* handle); +void uv_pipe_endgame(uv_loop_t* loop, uv_pipe_t* handle); + + +/* + * TTY + */ +void uv_console_init(void); + +int uv_tty_read_start(uv_tty_t* handle, uv_alloc_cb alloc_cb, + uv_read_cb read_cb); +int uv_tty_read_stop(uv_tty_t* handle); +int uv_tty_write(uv_loop_t* loop, uv_write_t* req, uv_tty_t* handle, + const uv_buf_t bufs[], unsigned int nbufs, uv_write_cb cb); +int uv__tty_try_write(uv_tty_t* handle, const uv_buf_t bufs[], + unsigned int nbufs); +void uv_tty_close(uv_tty_t* handle); + +void uv_process_tty_read_req(uv_loop_t* loop, uv_tty_t* handle, + uv_req_t* req); +void uv_process_tty_write_req(uv_loop_t* loop, uv_tty_t* handle, + uv_write_t* req); +/* + * uv_process_tty_accept_req() is a stub to keep DELEGATE_STREAM_REQ working + * TODO: find a way to remove it + */ +void uv_process_tty_accept_req(uv_loop_t* loop, uv_tty_t* handle, + uv_req_t* raw_req); +/* + * uv_process_tty_connect_req() is a stub to keep DELEGATE_STREAM_REQ working + * TODO: find a way to remove it + */ +void uv_process_tty_connect_req(uv_loop_t* loop, uv_tty_t* handle, + uv_connect_t* req); + +void uv_tty_endgame(uv_loop_t* loop, uv_tty_t* handle); + + +/* + * Poll watchers + */ +void uv_process_poll_req(uv_loop_t* loop, uv_poll_t* handle, + uv_req_t* req); + +int uv_poll_close(uv_loop_t* loop, uv_poll_t* handle); +void uv_poll_endgame(uv_loop_t* loop, uv_poll_t* handle); + + +/* + * Loop watchers + */ +void uv_loop_watcher_endgame(uv_loop_t* loop, uv_handle_t* handle); + +void uv_prepare_invoke(uv_loop_t* loop); +void uv_check_invoke(uv_loop_t* loop); +void uv_idle_invoke(uv_loop_t* loop); + +void uv__once_init(void); + + +/* + * Async watcher + */ +void uv_async_close(uv_loop_t* loop, uv_async_t* handle); +void uv_async_endgame(uv_loop_t* loop, uv_async_t* handle); + +void uv_process_async_wakeup_req(uv_loop_t* loop, uv_async_t* handle, + uv_req_t* req); + + +/* + * Signal watcher + */ +void uv_signals_init(void); +int uv__signal_dispatch(int signum); + +void uv_signal_close(uv_loop_t* loop, uv_signal_t* handle); +void uv_signal_endgame(uv_loop_t* loop, uv_signal_t* handle); + +void uv_process_signal_req(uv_loop_t* loop, uv_signal_t* handle, + uv_req_t* req); + + +/* + * Spawn + */ +void uv_process_proc_exit(uv_loop_t* loop, uv_process_t* handle); +void uv_process_close(uv_loop_t* loop, uv_process_t* handle); +void uv_process_endgame(uv_loop_t* loop, uv_process_t* handle); + + +/* + * Error + */ +int uv_translate_sys_error(int sys_errno); + + +/* + * FS + */ +void uv_fs_init(void); + + +/* + * FS Event + */ +void uv_process_fs_event_req(uv_loop_t* loop, uv_req_t* req, + uv_fs_event_t* handle); +void uv_fs_event_close(uv_loop_t* loop, uv_fs_event_t* handle); +void uv_fs_event_endgame(uv_loop_t* loop, uv_fs_event_t* handle); + + +/* + * Stat poller. + */ +void uv__fs_poll_endgame(uv_loop_t* loop, uv_fs_poll_t* handle); + + +/* + * Utilities. + */ +void uv__util_init(void); + +uint64_t uv__hrtime(double scale); +__declspec(noreturn) void uv_fatal_error(const int errorno, const char* syscall); +int uv__getpwuid_r(uv_passwd_t* pwd); +int uv__convert_utf16_to_utf8(const WCHAR* utf16, int utf16len, char** utf8); +int uv__convert_utf8_to_utf16(const char* utf8, int utf8len, WCHAR** utf16); + +typedef int (WINAPI *uv__peersockfunc)(SOCKET, struct sockaddr*, int*); + +int uv__getsockpeername(const uv_handle_t* handle, + uv__peersockfunc func, + struct sockaddr* name, + int* namelen, + int delayed_error); + +int uv__random_rtlgenrandom(void* buf, size_t buflen); + + +/* + * Process stdio handles. + */ +int uv__stdio_create(uv_loop_t* loop, + const uv_process_options_t* options, + BYTE** buffer_ptr); +void uv__stdio_destroy(BYTE* buffer); +void uv__stdio_noinherit(BYTE* buffer); +int uv__stdio_verify(BYTE* buffer, WORD size); +WORD uv__stdio_size(BYTE* buffer); +HANDLE uv__stdio_handle(BYTE* buffer, int fd); + + +/* + * Winapi and ntapi utility functions + */ +void uv_winapi_init(void); + + +/* + * Winsock utility functions + */ +void uv_winsock_init(void); + +int uv_ntstatus_to_winsock_error(NTSTATUS status); + +BOOL uv_get_acceptex_function(SOCKET socket, LPFN_ACCEPTEX* target); +BOOL uv_get_connectex_function(SOCKET socket, LPFN_CONNECTEX* target); + +int WSAAPI uv_wsarecv_workaround(SOCKET socket, WSABUF* buffers, + DWORD buffer_count, DWORD* bytes, DWORD* flags, WSAOVERLAPPED *overlapped, + LPWSAOVERLAPPED_COMPLETION_ROUTINE completion_routine); +int WSAAPI uv_wsarecvfrom_workaround(SOCKET socket, WSABUF* buffers, + DWORD buffer_count, DWORD* bytes, DWORD* flags, struct sockaddr* addr, + int* addr_len, WSAOVERLAPPED *overlapped, + LPWSAOVERLAPPED_COMPLETION_ROUTINE completion_routine); + +int WSAAPI uv_msafd_poll(SOCKET socket, AFD_POLL_INFO* info_in, + AFD_POLL_INFO* info_out, OVERLAPPED* overlapped); + +/* Whether there are any non-IFS LSPs stacked on TCP */ +extern int uv_tcp_non_ifs_lsp_ipv4; +extern int uv_tcp_non_ifs_lsp_ipv6; + +/* Ip address used to bind to any port at any interface */ +extern struct sockaddr_in uv_addr_ip4_any_; +extern struct sockaddr_in6 uv_addr_ip6_any_; + +/* + * Wake all loops with fake message + */ +void uv__wake_all_loops(void); + +/* + * Init system wake-up detection + */ +void uv__init_detect_system_wakeup(void); + +#endif /* UV_WIN_INTERNAL_H_ */ diff --git a/external/libuv/src/win/loop-watcher.c b/external/libuv/src/win/loop-watcher.c new file mode 100644 index 000000000..ad7fbea16 --- /dev/null +++ b/external/libuv/src/win/loop-watcher.c @@ -0,0 +1,122 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#include + +#include "uv.h" +#include "internal.h" +#include "handle-inl.h" + + +void uv_loop_watcher_endgame(uv_loop_t* loop, uv_handle_t* handle) { + if (handle->flags & UV_HANDLE_CLOSING) { + assert(!(handle->flags & UV_HANDLE_CLOSED)); + handle->flags |= UV_HANDLE_CLOSED; + uv__handle_close(handle); + } +} + + +#define UV_LOOP_WATCHER_DEFINE(name, NAME) \ + int uv_##name##_init(uv_loop_t* loop, uv_##name##_t* handle) { \ + uv__handle_init(loop, (uv_handle_t*) handle, UV_##NAME); \ + \ + return 0; \ + } \ + \ + \ + int uv_##name##_start(uv_##name##_t* handle, uv_##name##_cb cb) { \ + uv_loop_t* loop = handle->loop; \ + uv_##name##_t* old_head; \ + \ + assert(handle->type == UV_##NAME); \ + \ + if (uv__is_active(handle)) \ + return 0; \ + \ + if (cb == NULL) \ + return UV_EINVAL; \ + \ + old_head = loop->name##_handles; \ + \ + handle->name##_next = old_head; \ + handle->name##_prev = NULL; \ + \ + if (old_head) { \ + old_head->name##_prev = handle; \ + } \ + \ + loop->name##_handles = handle; \ + \ + handle->name##_cb = cb; \ + uv__handle_start(handle); \ + \ + return 0; \ + } \ + \ + \ + int uv_##name##_stop(uv_##name##_t* handle) { \ + uv_loop_t* loop = handle->loop; \ + \ + assert(handle->type == UV_##NAME); \ + \ + if (!uv__is_active(handle)) \ + return 0; \ + \ + /* Update loop head if needed */ \ + if (loop->name##_handles == handle) { \ + loop->name##_handles = handle->name##_next; \ + } \ + \ + /* Update the iterator-next pointer of needed */ \ + if (loop->next_##name##_handle == handle) { \ + loop->next_##name##_handle = handle->name##_next; \ + } \ + \ + if (handle->name##_prev) { \ + handle->name##_prev->name##_next = handle->name##_next; \ + } \ + if (handle->name##_next) { \ + handle->name##_next->name##_prev = handle->name##_prev; \ + } \ + \ + uv__handle_stop(handle); \ + \ + return 0; \ + } \ + \ + \ + void uv_##name##_invoke(uv_loop_t* loop) { \ + uv_##name##_t* handle; \ + \ + (loop)->next_##name##_handle = (loop)->name##_handles; \ + \ + while ((loop)->next_##name##_handle != NULL) { \ + handle = (loop)->next_##name##_handle; \ + (loop)->next_##name##_handle = handle->name##_next; \ + \ + handle->name##_cb(handle); \ + } \ + } + +UV_LOOP_WATCHER_DEFINE(prepare, PREPARE) +UV_LOOP_WATCHER_DEFINE(check, CHECK) +UV_LOOP_WATCHER_DEFINE(idle, IDLE) diff --git a/external/libuv/src/win/pipe.c b/external/libuv/src/win/pipe.c new file mode 100644 index 000000000..bad45dfe9 --- /dev/null +++ b/external/libuv/src/win/pipe.c @@ -0,0 +1,2395 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#include +#include +#include +#include +#include + +#include "handle-inl.h" +#include "internal.h" +#include "req-inl.h" +#include "stream-inl.h" +#include "uv-common.h" +#include "uv.h" + +#include +#include + +/* A zero-size buffer for use by uv_pipe_read */ +static char uv_zero_[] = ""; + +/* Null uv_buf_t */ +static const uv_buf_t uv_null_buf_ = { 0, NULL }; + +/* The timeout that the pipe will wait for the remote end to write data when + * the local ends wants to shut it down. */ +static const int64_t eof_timeout = 50; /* ms */ + +static const int default_pending_pipe_instances = 4; + +/* Pipe prefix */ +static char pipe_prefix[] = "\\\\?\\pipe"; +static const int pipe_prefix_len = sizeof(pipe_prefix) - 1; + +/* IPC incoming xfer queue item. */ +typedef struct { + uv__ipc_socket_xfer_type_t xfer_type; + uv__ipc_socket_xfer_info_t xfer_info; + QUEUE member; +} uv__ipc_xfer_queue_item_t; + +/* IPC frame header flags. */ +/* clang-format off */ +enum { + UV__IPC_FRAME_HAS_DATA = 0x01, + UV__IPC_FRAME_HAS_SOCKET_XFER = 0x02, + UV__IPC_FRAME_XFER_IS_TCP_CONNECTION = 0x04, + /* These are combinations of the flags above. */ + UV__IPC_FRAME_XFER_FLAGS = 0x06, + UV__IPC_FRAME_VALID_FLAGS = 0x07 +}; +/* clang-format on */ + +/* IPC frame header. */ +typedef struct { + uint32_t flags; + uint32_t reserved1; /* Ignored. */ + uint32_t data_length; /* Must be zero if there is no data. */ + uint32_t reserved2; /* Must be zero. */ +} uv__ipc_frame_header_t; + +/* To implement the IPC protocol correctly, these structures must have exactly + * the right size. */ +STATIC_ASSERT(sizeof(uv__ipc_frame_header_t) == 16); +STATIC_ASSERT(sizeof(uv__ipc_socket_xfer_info_t) == 632); + +/* Coalesced write request. */ +typedef struct { + uv_write_t req; /* Internal heap-allocated write request. */ + uv_write_t* user_req; /* Pointer to user-specified uv_write_t. */ +} uv__coalesced_write_t; + + +static void eof_timer_init(uv_pipe_t* pipe); +static void eof_timer_start(uv_pipe_t* pipe); +static void eof_timer_stop(uv_pipe_t* pipe); +static void eof_timer_cb(uv_timer_t* timer); +static void eof_timer_destroy(uv_pipe_t* pipe); +static void eof_timer_close_cb(uv_handle_t* handle); + + +static void uv_unique_pipe_name(char* ptr, char* name, size_t size) { + snprintf(name, size, "\\\\?\\pipe\\uv\\%p-%lu", ptr, GetCurrentProcessId()); +} + + +int uv_pipe_init(uv_loop_t* loop, uv_pipe_t* handle, int ipc) { + uv_stream_init(loop, (uv_stream_t*)handle, UV_NAMED_PIPE); + + handle->reqs_pending = 0; + handle->handle = INVALID_HANDLE_VALUE; + handle->name = NULL; + handle->pipe.conn.ipc_remote_pid = 0; + handle->pipe.conn.ipc_data_frame.payload_remaining = 0; + QUEUE_INIT(&handle->pipe.conn.ipc_xfer_queue); + handle->pipe.conn.ipc_xfer_queue_length = 0; + handle->ipc = ipc; + handle->pipe.conn.non_overlapped_writes_tail = NULL; + + return 0; +} + + +static void uv_pipe_connection_init(uv_pipe_t* handle) { + uv_connection_init((uv_stream_t*) handle); + handle->read_req.data = handle; + handle->pipe.conn.eof_timer = NULL; + assert(!(handle->flags & UV_HANDLE_PIPESERVER)); + if (handle->flags & UV_HANDLE_NON_OVERLAPPED_PIPE) { + handle->pipe.conn.readfile_thread_handle = NULL; + InitializeCriticalSection(&handle->pipe.conn.readfile_thread_lock); + } +} + + +static HANDLE open_named_pipe(const WCHAR* name, DWORD* duplex_flags) { + HANDLE pipeHandle; + + /* + * Assume that we have a duplex pipe first, so attempt to + * connect with GENERIC_READ | GENERIC_WRITE. + */ + pipeHandle = CreateFileW(name, + GENERIC_READ | GENERIC_WRITE, + 0, + NULL, + OPEN_EXISTING, + FILE_FLAG_OVERLAPPED, + NULL); + if (pipeHandle != INVALID_HANDLE_VALUE) { + *duplex_flags = UV_HANDLE_READABLE | UV_HANDLE_WRITABLE; + return pipeHandle; + } + + /* + * If the pipe is not duplex CreateFileW fails with + * ERROR_ACCESS_DENIED. In that case try to connect + * as a read-only or write-only. + */ + if (GetLastError() == ERROR_ACCESS_DENIED) { + pipeHandle = CreateFileW(name, + GENERIC_READ | FILE_WRITE_ATTRIBUTES, + 0, + NULL, + OPEN_EXISTING, + FILE_FLAG_OVERLAPPED, + NULL); + + if (pipeHandle != INVALID_HANDLE_VALUE) { + *duplex_flags = UV_HANDLE_READABLE; + return pipeHandle; + } + } + + if (GetLastError() == ERROR_ACCESS_DENIED) { + pipeHandle = CreateFileW(name, + GENERIC_WRITE | FILE_READ_ATTRIBUTES, + 0, + NULL, + OPEN_EXISTING, + FILE_FLAG_OVERLAPPED, + NULL); + + if (pipeHandle != INVALID_HANDLE_VALUE) { + *duplex_flags = UV_HANDLE_WRITABLE; + return pipeHandle; + } + } + + return INVALID_HANDLE_VALUE; +} + + +static void close_pipe(uv_pipe_t* pipe) { + assert(pipe->u.fd == -1 || pipe->u.fd > 2); + if (pipe->u.fd == -1) + CloseHandle(pipe->handle); + else + close(pipe->u.fd); + + pipe->u.fd = -1; + pipe->handle = INVALID_HANDLE_VALUE; +} + + +int uv_stdio_pipe_server(uv_loop_t* loop, uv_pipe_t* handle, DWORD access, + char* name, size_t nameSize) { + HANDLE pipeHandle; + int err; + char* ptr = (char*)handle; + + for (;;) { + uv_unique_pipe_name(ptr, name, nameSize); + + pipeHandle = CreateNamedPipeA(name, + access | FILE_FLAG_OVERLAPPED | FILE_FLAG_FIRST_PIPE_INSTANCE | WRITE_DAC, + PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_WAIT, 1, 65536, 65536, 0, + NULL); + + if (pipeHandle != INVALID_HANDLE_VALUE) { + /* No name collisions. We're done. */ + break; + } + + err = GetLastError(); + if (err != ERROR_PIPE_BUSY && err != ERROR_ACCESS_DENIED) { + goto error; + } + + /* Pipe name collision. Increment the pointer and try again. */ + ptr++; + } + + if (CreateIoCompletionPort(pipeHandle, + loop->iocp, + (ULONG_PTR)handle, + 0) == NULL) { + err = GetLastError(); + goto error; + } + + uv_pipe_connection_init(handle); + handle->handle = pipeHandle; + + return 0; + + error: + if (pipeHandle != INVALID_HANDLE_VALUE) { + CloseHandle(pipeHandle); + } + + return err; +} + + +static int uv_set_pipe_handle(uv_loop_t* loop, + uv_pipe_t* handle, + HANDLE pipeHandle, + int fd, + DWORD duplex_flags) { + NTSTATUS nt_status; + IO_STATUS_BLOCK io_status; + FILE_MODE_INFORMATION mode_info; + DWORD mode = PIPE_READMODE_BYTE | PIPE_WAIT; + DWORD current_mode = 0; + DWORD err = 0; + + if (handle->flags & UV_HANDLE_PIPESERVER) + return UV_EINVAL; + if (handle->handle != INVALID_HANDLE_VALUE) + return UV_EBUSY; + + if (!SetNamedPipeHandleState(pipeHandle, &mode, NULL, NULL)) { + err = GetLastError(); + if (err == ERROR_ACCESS_DENIED) { + /* + * SetNamedPipeHandleState can fail if the handle doesn't have either + * GENERIC_WRITE or FILE_WRITE_ATTRIBUTES. + * But if the handle already has the desired wait and blocking modes + * we can continue. + */ + if (!GetNamedPipeHandleState(pipeHandle, ¤t_mode, NULL, NULL, + NULL, NULL, 0)) { + return -1; + } else if (current_mode & PIPE_NOWAIT) { + SetLastError(ERROR_ACCESS_DENIED); + return -1; + } + } else { + /* If this returns ERROR_INVALID_PARAMETER we probably opened + * something that is not a pipe. */ + if (err == ERROR_INVALID_PARAMETER) { + SetLastError(WSAENOTSOCK); + } + return -1; + } + } + + /* Check if the pipe was created with FILE_FLAG_OVERLAPPED. */ + nt_status = pNtQueryInformationFile(pipeHandle, + &io_status, + &mode_info, + sizeof(mode_info), + FileModeInformation); + if (nt_status != STATUS_SUCCESS) { + return -1; + } + + if (mode_info.Mode & FILE_SYNCHRONOUS_IO_ALERT || + mode_info.Mode & FILE_SYNCHRONOUS_IO_NONALERT) { + /* Non-overlapped pipe. */ + handle->flags |= UV_HANDLE_NON_OVERLAPPED_PIPE; + } else { + /* Overlapped pipe. Try to associate with IOCP. */ + if (CreateIoCompletionPort(pipeHandle, + loop->iocp, + (ULONG_PTR) handle, + 0) == NULL) { + handle->flags |= UV_HANDLE_EMULATE_IOCP; + } + } + + handle->handle = pipeHandle; + handle->u.fd = fd; + handle->flags |= duplex_flags; + + return 0; +} + + +static int pipe_alloc_accept(uv_loop_t* loop, uv_pipe_t* handle, + uv_pipe_accept_t* req, BOOL firstInstance) { + assert(req->pipeHandle == INVALID_HANDLE_VALUE); + + req->pipeHandle = + CreateNamedPipeW(handle->name, + PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED | WRITE_DAC | + (firstInstance ? FILE_FLAG_FIRST_PIPE_INSTANCE : 0), + PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_WAIT, + PIPE_UNLIMITED_INSTANCES, 65536, 65536, 0, NULL); + + if (req->pipeHandle == INVALID_HANDLE_VALUE) { + return 0; + } + + /* Associate it with IOCP so we can get events. */ + if (CreateIoCompletionPort(req->pipeHandle, + loop->iocp, + (ULONG_PTR) handle, + 0) == NULL) { + uv_fatal_error(GetLastError(), "CreateIoCompletionPort"); + } + + /* Stash a handle in the server object for use from places such as + * getsockname and chmod. As we transfer ownership of these to client + * objects, we'll allocate new ones here. */ + handle->handle = req->pipeHandle; + + return 1; +} + + +static DWORD WINAPI pipe_shutdown_thread_proc(void* parameter) { + uv_loop_t* loop; + uv_pipe_t* handle; + uv_shutdown_t* req; + + req = (uv_shutdown_t*) parameter; + assert(req); + handle = (uv_pipe_t*) req->handle; + assert(handle); + loop = handle->loop; + assert(loop); + + FlushFileBuffers(handle->handle); + + /* Post completed */ + POST_COMPLETION_FOR_REQ(loop, req); + + return 0; +} + + +void uv_pipe_endgame(uv_loop_t* loop, uv_pipe_t* handle) { + int err; + DWORD result; + uv_shutdown_t* req; + NTSTATUS nt_status; + IO_STATUS_BLOCK io_status; + FILE_PIPE_LOCAL_INFORMATION pipe_info; + uv__ipc_xfer_queue_item_t* xfer_queue_item; + + if ((handle->flags & UV_HANDLE_CONNECTION) && + handle->stream.conn.shutdown_req != NULL && + handle->stream.conn.write_reqs_pending == 0) { + req = handle->stream.conn.shutdown_req; + + /* Clear the shutdown_req field so we don't go here again. */ + handle->stream.conn.shutdown_req = NULL; + + if (handle->flags & UV_HANDLE_CLOSING) { + UNREGISTER_HANDLE_REQ(loop, handle, req); + + /* Already closing. Cancel the shutdown. */ + if (req->cb) { + req->cb(req, UV_ECANCELED); + } + + DECREASE_PENDING_REQ_COUNT(handle); + return; + } + + /* Try to avoid flushing the pipe buffer in the thread pool. */ + nt_status = pNtQueryInformationFile(handle->handle, + &io_status, + &pipe_info, + sizeof pipe_info, + FilePipeLocalInformation); + + if (nt_status != STATUS_SUCCESS) { + /* Failure */ + UNREGISTER_HANDLE_REQ(loop, handle, req); + + handle->flags |= UV_HANDLE_WRITABLE; /* Questionable */ + if (req->cb) { + err = pRtlNtStatusToDosError(nt_status); + req->cb(req, uv_translate_sys_error(err)); + } + + DECREASE_PENDING_REQ_COUNT(handle); + return; + } + + if (pipe_info.OutboundQuota == pipe_info.WriteQuotaAvailable) { + /* Short-circuit, no need to call FlushFileBuffers. */ + uv_insert_pending_req(loop, (uv_req_t*) req); + return; + } + + /* Run FlushFileBuffers in the thread pool. */ + result = QueueUserWorkItem(pipe_shutdown_thread_proc, + req, + WT_EXECUTELONGFUNCTION); + if (result) { + return; + + } else { + /* Failure. */ + UNREGISTER_HANDLE_REQ(loop, handle, req); + + handle->flags |= UV_HANDLE_WRITABLE; /* Questionable */ + if (req->cb) { + err = GetLastError(); + req->cb(req, uv_translate_sys_error(err)); + } + + DECREASE_PENDING_REQ_COUNT(handle); + return; + } + } + + if (handle->flags & UV_HANDLE_CLOSING && + handle->reqs_pending == 0) { + assert(!(handle->flags & UV_HANDLE_CLOSED)); + + if (handle->flags & UV_HANDLE_CONNECTION) { + /* Free pending sockets */ + while (!QUEUE_EMPTY(&handle->pipe.conn.ipc_xfer_queue)) { + QUEUE* q; + SOCKET socket; + + q = QUEUE_HEAD(&handle->pipe.conn.ipc_xfer_queue); + QUEUE_REMOVE(q); + xfer_queue_item = QUEUE_DATA(q, uv__ipc_xfer_queue_item_t, member); + + /* Materialize socket and close it */ + socket = WSASocketW(FROM_PROTOCOL_INFO, + FROM_PROTOCOL_INFO, + FROM_PROTOCOL_INFO, + &xfer_queue_item->xfer_info.socket_info, + 0, + WSA_FLAG_OVERLAPPED); + uv__free(xfer_queue_item); + + if (socket != INVALID_SOCKET) + closesocket(socket); + } + handle->pipe.conn.ipc_xfer_queue_length = 0; + + if (handle->flags & UV_HANDLE_EMULATE_IOCP) { + if (handle->read_req.wait_handle != INVALID_HANDLE_VALUE) { + UnregisterWait(handle->read_req.wait_handle); + handle->read_req.wait_handle = INVALID_HANDLE_VALUE; + } + if (handle->read_req.event_handle != NULL) { + CloseHandle(handle->read_req.event_handle); + handle->read_req.event_handle = NULL; + } + } + + if (handle->flags & UV_HANDLE_NON_OVERLAPPED_PIPE) + DeleteCriticalSection(&handle->pipe.conn.readfile_thread_lock); + } + + if (handle->flags & UV_HANDLE_PIPESERVER) { + assert(handle->pipe.serv.accept_reqs); + uv__free(handle->pipe.serv.accept_reqs); + handle->pipe.serv.accept_reqs = NULL; + } + + uv__handle_close(handle); + } +} + + +void uv_pipe_pending_instances(uv_pipe_t* handle, int count) { + if (handle->flags & UV_HANDLE_BOUND) + return; + handle->pipe.serv.pending_instances = count; + handle->flags |= UV_HANDLE_PIPESERVER; +} + + +/* Creates a pipe server. */ +int uv_pipe_bind(uv_pipe_t* handle, const char* name) { + uv_loop_t* loop = handle->loop; + int i, err, nameSize; + uv_pipe_accept_t* req; + + if (handle->flags & UV_HANDLE_BOUND) { + return UV_EINVAL; + } + + if (!name) { + return UV_EINVAL; + } + + if (!(handle->flags & UV_HANDLE_PIPESERVER)) { + handle->pipe.serv.pending_instances = default_pending_pipe_instances; + } + + handle->pipe.serv.accept_reqs = (uv_pipe_accept_t*) + uv__malloc(sizeof(uv_pipe_accept_t) * handle->pipe.serv.pending_instances); + if (!handle->pipe.serv.accept_reqs) { + uv_fatal_error(ERROR_OUTOFMEMORY, "uv__malloc"); + } + + for (i = 0; i < handle->pipe.serv.pending_instances; i++) { + req = &handle->pipe.serv.accept_reqs[i]; + UV_REQ_INIT(req, UV_ACCEPT); + req->data = handle; + req->pipeHandle = INVALID_HANDLE_VALUE; + req->next_pending = NULL; + } + + /* Convert name to UTF16. */ + nameSize = MultiByteToWideChar(CP_UTF8, 0, name, -1, NULL, 0) * sizeof(WCHAR); + handle->name = (WCHAR*)uv__malloc(nameSize); + if (!handle->name) { + uv_fatal_error(ERROR_OUTOFMEMORY, "uv__malloc"); + } + + if (!MultiByteToWideChar(CP_UTF8, + 0, + name, + -1, + handle->name, + nameSize / sizeof(WCHAR))) { + err = GetLastError(); + goto error; + } + + /* + * Attempt to create the first pipe with FILE_FLAG_FIRST_PIPE_INSTANCE. + * If this fails then there's already a pipe server for the given pipe name. + */ + if (!pipe_alloc_accept(loop, + handle, + &handle->pipe.serv.accept_reqs[0], + TRUE)) { + err = GetLastError(); + if (err == ERROR_ACCESS_DENIED) { + err = WSAEADDRINUSE; /* Translates to UV_EADDRINUSE. */ + } else if (err == ERROR_PATH_NOT_FOUND || err == ERROR_INVALID_NAME) { + err = WSAEACCES; /* Translates to UV_EACCES. */ + } + goto error; + } + + handle->pipe.serv.pending_accepts = NULL; + handle->flags |= UV_HANDLE_PIPESERVER; + handle->flags |= UV_HANDLE_BOUND; + + return 0; + +error: + if (handle->name) { + uv__free(handle->name); + handle->name = NULL; + } + + return uv_translate_sys_error(err); +} + + +static DWORD WINAPI pipe_connect_thread_proc(void* parameter) { + uv_loop_t* loop; + uv_pipe_t* handle; + uv_connect_t* req; + HANDLE pipeHandle = INVALID_HANDLE_VALUE; + DWORD duplex_flags; + + req = (uv_connect_t*) parameter; + assert(req); + handle = (uv_pipe_t*) req->handle; + assert(handle); + loop = handle->loop; + assert(loop); + + /* We're here because CreateFile on a pipe returned ERROR_PIPE_BUSY. We wait + * for the pipe to become available with WaitNamedPipe. */ + while (WaitNamedPipeW(handle->name, 30000)) { + /* The pipe is now available, try to connect. */ + pipeHandle = open_named_pipe(handle->name, &duplex_flags); + if (pipeHandle != INVALID_HANDLE_VALUE) { + break; + } + + SwitchToThread(); + } + + if (pipeHandle != INVALID_HANDLE_VALUE && + !uv_set_pipe_handle(loop, handle, pipeHandle, -1, duplex_flags)) { + SET_REQ_SUCCESS(req); + } else { + SET_REQ_ERROR(req, GetLastError()); + } + + /* Post completed */ + POST_COMPLETION_FOR_REQ(loop, req); + + return 0; +} + + +void uv_pipe_connect(uv_connect_t* req, uv_pipe_t* handle, + const char* name, uv_connect_cb cb) { + uv_loop_t* loop = handle->loop; + int err, nameSize; + HANDLE pipeHandle = INVALID_HANDLE_VALUE; + DWORD duplex_flags; + + UV_REQ_INIT(req, UV_CONNECT); + req->handle = (uv_stream_t*) handle; + req->cb = cb; + + /* Convert name to UTF16. */ + nameSize = MultiByteToWideChar(CP_UTF8, 0, name, -1, NULL, 0) * sizeof(WCHAR); + handle->name = (WCHAR*)uv__malloc(nameSize); + if (!handle->name) { + uv_fatal_error(ERROR_OUTOFMEMORY, "uv__malloc"); + } + + if (!MultiByteToWideChar(CP_UTF8, + 0, + name, + -1, + handle->name, + nameSize / sizeof(WCHAR))) { + err = GetLastError(); + goto error; + } + + pipeHandle = open_named_pipe(handle->name, &duplex_flags); + if (pipeHandle == INVALID_HANDLE_VALUE) { + if (GetLastError() == ERROR_PIPE_BUSY) { + /* Wait for the server to make a pipe instance available. */ + if (!QueueUserWorkItem(&pipe_connect_thread_proc, + req, + WT_EXECUTELONGFUNCTION)) { + err = GetLastError(); + goto error; + } + + REGISTER_HANDLE_REQ(loop, handle, req); + handle->reqs_pending++; + + return; + } + + err = GetLastError(); + goto error; + } + + assert(pipeHandle != INVALID_HANDLE_VALUE); + + if (uv_set_pipe_handle(loop, + (uv_pipe_t*) req->handle, + pipeHandle, + -1, + duplex_flags)) { + err = GetLastError(); + goto error; + } + + SET_REQ_SUCCESS(req); + uv_insert_pending_req(loop, (uv_req_t*) req); + handle->reqs_pending++; + REGISTER_HANDLE_REQ(loop, handle, req); + return; + +error: + if (handle->name) { + uv__free(handle->name); + handle->name = NULL; + } + + if (pipeHandle != INVALID_HANDLE_VALUE) { + CloseHandle(pipeHandle); + } + + /* Make this req pending reporting an error. */ + SET_REQ_ERROR(req, err); + uv_insert_pending_req(loop, (uv_req_t*) req); + handle->reqs_pending++; + REGISTER_HANDLE_REQ(loop, handle, req); + return; +} + + +void uv__pipe_interrupt_read(uv_pipe_t* handle) { + BOOL r; + + if (!(handle->flags & UV_HANDLE_READ_PENDING)) + return; /* No pending reads. */ + if (handle->flags & UV_HANDLE_CANCELLATION_PENDING) + return; /* Already cancelled. */ + if (handle->handle == INVALID_HANDLE_VALUE) + return; /* Pipe handle closed. */ + + if (!(handle->flags & UV_HANDLE_NON_OVERLAPPED_PIPE)) { + /* Cancel asynchronous read. */ + r = CancelIoEx(handle->handle, &handle->read_req.u.io.overlapped); + assert(r || GetLastError() == ERROR_NOT_FOUND); + + } else { + /* Cancel synchronous read (which is happening in the thread pool). */ + HANDLE thread; + volatile HANDLE* thread_ptr = &handle->pipe.conn.readfile_thread_handle; + + EnterCriticalSection(&handle->pipe.conn.readfile_thread_lock); + + thread = *thread_ptr; + if (thread == NULL) { + /* The thread pool thread has not yet reached the point of blocking, we + * can pre-empt it by setting thread_handle to INVALID_HANDLE_VALUE. */ + *thread_ptr = INVALID_HANDLE_VALUE; + + } else { + /* Spin until the thread has acknowledged (by setting the thread to + * INVALID_HANDLE_VALUE) that it is past the point of blocking. */ + while (thread != INVALID_HANDLE_VALUE) { + r = CancelSynchronousIo(thread); + assert(r || GetLastError() == ERROR_NOT_FOUND); + SwitchToThread(); /* Yield thread. */ + thread = *thread_ptr; + } + } + + LeaveCriticalSection(&handle->pipe.conn.readfile_thread_lock); + } + + /* Set flag to indicate that read has been cancelled. */ + handle->flags |= UV_HANDLE_CANCELLATION_PENDING; +} + + +void uv__pipe_read_stop(uv_pipe_t* handle) { + handle->flags &= ~UV_HANDLE_READING; + DECREASE_ACTIVE_COUNT(handle->loop, handle); + + uv__pipe_interrupt_read(handle); +} + + +/* Cleans up uv_pipe_t (server or connection) and all resources associated with + * it. */ +void uv_pipe_cleanup(uv_loop_t* loop, uv_pipe_t* handle) { + int i; + HANDLE pipeHandle; + + uv__pipe_interrupt_read(handle); + + if (handle->name) { + uv__free(handle->name); + handle->name = NULL; + } + + if (handle->flags & UV_HANDLE_PIPESERVER) { + for (i = 0; i < handle->pipe.serv.pending_instances; i++) { + pipeHandle = handle->pipe.serv.accept_reqs[i].pipeHandle; + if (pipeHandle != INVALID_HANDLE_VALUE) { + CloseHandle(pipeHandle); + handle->pipe.serv.accept_reqs[i].pipeHandle = INVALID_HANDLE_VALUE; + } + } + handle->handle = INVALID_HANDLE_VALUE; + } + + if (handle->flags & UV_HANDLE_CONNECTION) { + handle->flags &= ~UV_HANDLE_WRITABLE; + eof_timer_destroy(handle); + } + + if ((handle->flags & UV_HANDLE_CONNECTION) + && handle->handle != INVALID_HANDLE_VALUE) + close_pipe(handle); +} + + +void uv_pipe_close(uv_loop_t* loop, uv_pipe_t* handle) { + if (handle->flags & UV_HANDLE_READING) { + handle->flags &= ~UV_HANDLE_READING; + DECREASE_ACTIVE_COUNT(loop, handle); + } + + if (handle->flags & UV_HANDLE_LISTENING) { + handle->flags &= ~UV_HANDLE_LISTENING; + DECREASE_ACTIVE_COUNT(loop, handle); + } + + uv_pipe_cleanup(loop, handle); + + if (handle->reqs_pending == 0) { + uv_want_endgame(loop, (uv_handle_t*) handle); + } + + handle->flags &= ~(UV_HANDLE_READABLE | UV_HANDLE_WRITABLE); + uv__handle_closing(handle); +} + + +static void uv_pipe_queue_accept(uv_loop_t* loop, uv_pipe_t* handle, + uv_pipe_accept_t* req, BOOL firstInstance) { + assert(handle->flags & UV_HANDLE_LISTENING); + + if (!firstInstance && !pipe_alloc_accept(loop, handle, req, FALSE)) { + SET_REQ_ERROR(req, GetLastError()); + uv_insert_pending_req(loop, (uv_req_t*) req); + handle->reqs_pending++; + return; + } + + assert(req->pipeHandle != INVALID_HANDLE_VALUE); + + /* Prepare the overlapped structure. */ + memset(&(req->u.io.overlapped), 0, sizeof(req->u.io.overlapped)); + + if (!ConnectNamedPipe(req->pipeHandle, &req->u.io.overlapped) && + GetLastError() != ERROR_IO_PENDING) { + if (GetLastError() == ERROR_PIPE_CONNECTED) { + SET_REQ_SUCCESS(req); + } else { + CloseHandle(req->pipeHandle); + req->pipeHandle = INVALID_HANDLE_VALUE; + /* Make this req pending reporting an error. */ + SET_REQ_ERROR(req, GetLastError()); + } + uv_insert_pending_req(loop, (uv_req_t*) req); + handle->reqs_pending++; + return; + } + + /* Wait for completion via IOCP */ + handle->reqs_pending++; +} + + +int uv_pipe_accept(uv_pipe_t* server, uv_stream_t* client) { + uv_loop_t* loop = server->loop; + uv_pipe_t* pipe_client; + uv_pipe_accept_t* req; + QUEUE* q; + uv__ipc_xfer_queue_item_t* item; + int err; + + if (server->ipc) { + if (QUEUE_EMPTY(&server->pipe.conn.ipc_xfer_queue)) { + /* No valid pending sockets. */ + return WSAEWOULDBLOCK; + } + + q = QUEUE_HEAD(&server->pipe.conn.ipc_xfer_queue); + QUEUE_REMOVE(q); + server->pipe.conn.ipc_xfer_queue_length--; + item = QUEUE_DATA(q, uv__ipc_xfer_queue_item_t, member); + + err = uv__tcp_xfer_import( + (uv_tcp_t*) client, item->xfer_type, &item->xfer_info); + if (err != 0) + return err; + + uv__free(item); + + } else { + pipe_client = (uv_pipe_t*) client; + + /* Find a connection instance that has been connected, but not yet + * accepted. */ + req = server->pipe.serv.pending_accepts; + + if (!req) { + /* No valid connections found, so we error out. */ + return WSAEWOULDBLOCK; + } + + /* Initialize the client handle and copy the pipeHandle to the client */ + uv_pipe_connection_init(pipe_client); + pipe_client->handle = req->pipeHandle; + pipe_client->flags |= UV_HANDLE_READABLE | UV_HANDLE_WRITABLE; + + /* Prepare the req to pick up a new connection */ + server->pipe.serv.pending_accepts = req->next_pending; + req->next_pending = NULL; + req->pipeHandle = INVALID_HANDLE_VALUE; + + server->handle = INVALID_HANDLE_VALUE; + if (!(server->flags & UV_HANDLE_CLOSING)) { + uv_pipe_queue_accept(loop, server, req, FALSE); + } + } + + return 0; +} + + +/* Starts listening for connections for the given pipe. */ +int uv_pipe_listen(uv_pipe_t* handle, int backlog, uv_connection_cb cb) { + uv_loop_t* loop = handle->loop; + int i; + + if (handle->flags & UV_HANDLE_LISTENING) { + handle->stream.serv.connection_cb = cb; + } + + if (!(handle->flags & UV_HANDLE_BOUND)) { + return WSAEINVAL; + } + + if (handle->flags & UV_HANDLE_READING) { + return WSAEISCONN; + } + + if (!(handle->flags & UV_HANDLE_PIPESERVER)) { + return ERROR_NOT_SUPPORTED; + } + + if (handle->ipc) { + return WSAEINVAL; + } + + handle->flags |= UV_HANDLE_LISTENING; + INCREASE_ACTIVE_COUNT(loop, handle); + handle->stream.serv.connection_cb = cb; + + /* First pipe handle should have already been created in uv_pipe_bind */ + assert(handle->pipe.serv.accept_reqs[0].pipeHandle != INVALID_HANDLE_VALUE); + + for (i = 0; i < handle->pipe.serv.pending_instances; i++) { + uv_pipe_queue_accept(loop, handle, &handle->pipe.serv.accept_reqs[i], i == 0); + } + + return 0; +} + + +static DWORD WINAPI uv_pipe_zero_readfile_thread_proc(void* arg) { + uv_read_t* req = (uv_read_t*) arg; + uv_pipe_t* handle = (uv_pipe_t*) req->data; + uv_loop_t* loop = handle->loop; + volatile HANDLE* thread_ptr = &handle->pipe.conn.readfile_thread_handle; + CRITICAL_SECTION* lock = &handle->pipe.conn.readfile_thread_lock; + HANDLE thread; + DWORD bytes; + DWORD err; + + assert(req->type == UV_READ); + assert(handle->type == UV_NAMED_PIPE); + + err = 0; + + /* Create a handle to the current thread. */ + if (!DuplicateHandle(GetCurrentProcess(), + GetCurrentThread(), + GetCurrentProcess(), + &thread, + 0, + FALSE, + DUPLICATE_SAME_ACCESS)) { + err = GetLastError(); + goto out1; + } + + /* The lock needs to be held when thread handle is modified. */ + EnterCriticalSection(lock); + if (*thread_ptr == INVALID_HANDLE_VALUE) { + /* uv__pipe_interrupt_read() cancelled reading before we got here. */ + err = ERROR_OPERATION_ABORTED; + } else { + /* Let main thread know which worker thread is doing the blocking read. */ + assert(*thread_ptr == NULL); + *thread_ptr = thread; + } + LeaveCriticalSection(lock); + + if (err) + goto out2; + + /* Block the thread until data is available on the pipe, or the read is + * cancelled. */ + if (!ReadFile(handle->handle, &uv_zero_, 0, &bytes, NULL)) + err = GetLastError(); + + /* Let the main thread know the worker is past the point of blocking. */ + assert(thread == *thread_ptr); + *thread_ptr = INVALID_HANDLE_VALUE; + + /* Briefly acquire the mutex. Since the main thread holds the lock while it + * is spinning trying to cancel this thread's I/O, we will block here until + * it stops doing that. */ + EnterCriticalSection(lock); + LeaveCriticalSection(lock); + +out2: + /* Close the handle to the current thread. */ + CloseHandle(thread); + +out1: + /* Set request status and post a completion record to the IOCP. */ + if (err) + SET_REQ_ERROR(req, err); + else + SET_REQ_SUCCESS(req); + POST_COMPLETION_FOR_REQ(loop, req); + + return 0; +} + + +static DWORD WINAPI uv_pipe_writefile_thread_proc(void* parameter) { + int result; + DWORD bytes; + uv_write_t* req = (uv_write_t*) parameter; + uv_pipe_t* handle = (uv_pipe_t*) req->handle; + uv_loop_t* loop = handle->loop; + + assert(req != NULL); + assert(req->type == UV_WRITE); + assert(handle->type == UV_NAMED_PIPE); + assert(req->write_buffer.base); + + result = WriteFile(handle->handle, + req->write_buffer.base, + req->write_buffer.len, + &bytes, + NULL); + + if (!result) { + SET_REQ_ERROR(req, GetLastError()); + } + + POST_COMPLETION_FOR_REQ(loop, req); + return 0; +} + + +static void CALLBACK post_completion_read_wait(void* context, BOOLEAN timed_out) { + uv_read_t* req; + uv_tcp_t* handle; + + req = (uv_read_t*) context; + assert(req != NULL); + handle = (uv_tcp_t*)req->data; + assert(handle != NULL); + assert(!timed_out); + + if (!PostQueuedCompletionStatus(handle->loop->iocp, + req->u.io.overlapped.InternalHigh, + 0, + &req->u.io.overlapped)) { + uv_fatal_error(GetLastError(), "PostQueuedCompletionStatus"); + } +} + + +static void CALLBACK post_completion_write_wait(void* context, BOOLEAN timed_out) { + uv_write_t* req; + uv_tcp_t* handle; + + req = (uv_write_t*) context; + assert(req != NULL); + handle = (uv_tcp_t*)req->handle; + assert(handle != NULL); + assert(!timed_out); + + if (!PostQueuedCompletionStatus(handle->loop->iocp, + req->u.io.overlapped.InternalHigh, + 0, + &req->u.io.overlapped)) { + uv_fatal_error(GetLastError(), "PostQueuedCompletionStatus"); + } +} + + +static void uv_pipe_queue_read(uv_loop_t* loop, uv_pipe_t* handle) { + uv_read_t* req; + int result; + + assert(handle->flags & UV_HANDLE_READING); + assert(!(handle->flags & UV_HANDLE_READ_PENDING)); + + assert(handle->handle != INVALID_HANDLE_VALUE); + + req = &handle->read_req; + + if (handle->flags & UV_HANDLE_NON_OVERLAPPED_PIPE) { + handle->pipe.conn.readfile_thread_handle = NULL; /* Reset cancellation. */ + if (!QueueUserWorkItem(&uv_pipe_zero_readfile_thread_proc, + req, + WT_EXECUTELONGFUNCTION)) { + /* Make this req pending reporting an error. */ + SET_REQ_ERROR(req, GetLastError()); + goto error; + } + } else { + memset(&req->u.io.overlapped, 0, sizeof(req->u.io.overlapped)); + if (handle->flags & UV_HANDLE_EMULATE_IOCP) { + assert(req->event_handle != NULL); + req->u.io.overlapped.hEvent = (HANDLE) ((uintptr_t) req->event_handle | 1); + } + + /* Do 0-read */ + result = ReadFile(handle->handle, + &uv_zero_, + 0, + NULL, + &req->u.io.overlapped); + + if (!result && GetLastError() != ERROR_IO_PENDING) { + /* Make this req pending reporting an error. */ + SET_REQ_ERROR(req, GetLastError()); + goto error; + } + + if (handle->flags & UV_HANDLE_EMULATE_IOCP) { + if (req->wait_handle == INVALID_HANDLE_VALUE) { + if (!RegisterWaitForSingleObject(&req->wait_handle, + req->event_handle, post_completion_read_wait, (void*) req, + INFINITE, WT_EXECUTEINWAITTHREAD)) { + SET_REQ_ERROR(req, GetLastError()); + goto error; + } + } + } + } + + /* Start the eof timer if there is one */ + eof_timer_start(handle); + handle->flags |= UV_HANDLE_READ_PENDING; + handle->reqs_pending++; + return; + +error: + uv_insert_pending_req(loop, (uv_req_t*)req); + handle->flags |= UV_HANDLE_READ_PENDING; + handle->reqs_pending++; +} + + +int uv_pipe_read_start(uv_pipe_t* handle, + uv_alloc_cb alloc_cb, + uv_read_cb read_cb) { + uv_loop_t* loop = handle->loop; + + handle->flags |= UV_HANDLE_READING; + INCREASE_ACTIVE_COUNT(loop, handle); + handle->read_cb = read_cb; + handle->alloc_cb = alloc_cb; + + /* If reading was stopped and then started again, there could still be a read + * request pending. */ + if (!(handle->flags & UV_HANDLE_READ_PENDING)) { + if (handle->flags & UV_HANDLE_EMULATE_IOCP && + handle->read_req.event_handle == NULL) { + handle->read_req.event_handle = CreateEvent(NULL, 0, 0, NULL); + if (handle->read_req.event_handle == NULL) { + uv_fatal_error(GetLastError(), "CreateEvent"); + } + } + uv_pipe_queue_read(loop, handle); + } + + return 0; +} + + +static void uv_insert_non_overlapped_write_req(uv_pipe_t* handle, + uv_write_t* req) { + req->next_req = NULL; + if (handle->pipe.conn.non_overlapped_writes_tail) { + req->next_req = + handle->pipe.conn.non_overlapped_writes_tail->next_req; + handle->pipe.conn.non_overlapped_writes_tail->next_req = (uv_req_t*)req; + handle->pipe.conn.non_overlapped_writes_tail = req; + } else { + req->next_req = (uv_req_t*)req; + handle->pipe.conn.non_overlapped_writes_tail = req; + } +} + + +static uv_write_t* uv_remove_non_overlapped_write_req(uv_pipe_t* handle) { + uv_write_t* req; + + if (handle->pipe.conn.non_overlapped_writes_tail) { + req = (uv_write_t*)handle->pipe.conn.non_overlapped_writes_tail->next_req; + + if (req == handle->pipe.conn.non_overlapped_writes_tail) { + handle->pipe.conn.non_overlapped_writes_tail = NULL; + } else { + handle->pipe.conn.non_overlapped_writes_tail->next_req = + req->next_req; + } + + return req; + } else { + /* queue empty */ + return NULL; + } +} + + +static void uv_queue_non_overlapped_write(uv_pipe_t* handle) { + uv_write_t* req = uv_remove_non_overlapped_write_req(handle); + if (req) { + if (!QueueUserWorkItem(&uv_pipe_writefile_thread_proc, + req, + WT_EXECUTELONGFUNCTION)) { + uv_fatal_error(GetLastError(), "QueueUserWorkItem"); + } + } +} + + +static int uv__build_coalesced_write_req(uv_write_t* user_req, + const uv_buf_t bufs[], + size_t nbufs, + uv_write_t** req_out, + uv_buf_t* write_buf_out) { + /* Pack into a single heap-allocated buffer: + * (a) a uv_write_t structure where libuv stores the actual state. + * (b) a pointer to the original uv_write_t. + * (c) data from all `bufs` entries. + */ + char* heap_buffer; + size_t heap_buffer_length, heap_buffer_offset; + uv__coalesced_write_t* coalesced_write_req; /* (a) + (b) */ + char* data_start; /* (c) */ + size_t data_length; + unsigned int i; + + /* Compute combined size of all combined buffers from `bufs`. */ + data_length = 0; + for (i = 0; i < nbufs; i++) + data_length += bufs[i].len; + + /* The total combined size of data buffers should not exceed UINT32_MAX, + * because WriteFile() won't accept buffers larger than that. */ + if (data_length > UINT32_MAX) + return WSAENOBUFS; /* Maps to UV_ENOBUFS. */ + + /* Compute heap buffer size. */ + heap_buffer_length = sizeof *coalesced_write_req + /* (a) + (b) */ + data_length; /* (c) */ + + /* Allocate buffer. */ + heap_buffer = (char *)uv__malloc(heap_buffer_length); + if (heap_buffer == NULL) + return ERROR_NOT_ENOUGH_MEMORY; /* Maps to UV_ENOMEM. */ + + /* Copy uv_write_t information to the buffer. */ + coalesced_write_req = (uv__coalesced_write_t*) heap_buffer; + coalesced_write_req->req = *user_req; /* copy (a) */ + coalesced_write_req->req.coalesced = 1; + coalesced_write_req->user_req = user_req; /* copy (b) */ + heap_buffer_offset = sizeof *coalesced_write_req; /* offset (a) + (b) */ + + /* Copy data buffers to the heap buffer. */ + data_start = &heap_buffer[heap_buffer_offset]; + for (i = 0; i < nbufs; i++) { + memcpy(&heap_buffer[heap_buffer_offset], + bufs[i].base, + bufs[i].len); /* copy (c) */ + heap_buffer_offset += bufs[i].len; /* offset (c) */ + } + assert(heap_buffer_offset == heap_buffer_length); + + /* Set out arguments and return. */ + *req_out = &coalesced_write_req->req; + *write_buf_out = uv_buf_init(data_start, (unsigned int) data_length); + return 0; +} + + +static int uv__pipe_write_data(uv_loop_t* loop, + uv_write_t* req, + uv_pipe_t* handle, + const uv_buf_t bufs[], + size_t nbufs, + uv_write_cb cb, + int copy_always) { + int err; + int result; + uv_buf_t write_buf; + + assert(handle->handle != INVALID_HANDLE_VALUE); + + UV_REQ_INIT(req, UV_WRITE); + req->handle = (uv_stream_t*) handle; + req->send_handle = NULL; + req->cb = cb; + /* Private fields. */ + req->coalesced = 0; + req->event_handle = NULL; + req->wait_handle = INVALID_HANDLE_VALUE; + + /* Prepare the overlapped structure. */ + memset(&req->u.io.overlapped, 0, sizeof(req->u.io.overlapped)); + if (handle->flags & (UV_HANDLE_EMULATE_IOCP | UV_HANDLE_BLOCKING_WRITES)) { + req->event_handle = CreateEvent(NULL, 0, 0, NULL); + if (req->event_handle == NULL) { + uv_fatal_error(GetLastError(), "CreateEvent"); + } + req->u.io.overlapped.hEvent = (HANDLE) ((uintptr_t) req->event_handle | 1); + } + req->write_buffer = uv_null_buf_; + + if (nbufs == 0) { + /* Write empty buffer. */ + write_buf = uv_null_buf_; + } else if (nbufs == 1 && !copy_always) { + /* Write directly from bufs[0]. */ + write_buf = bufs[0]; + } else { + /* Coalesce all `bufs` into one big buffer. This also creates a new + * write-request structure that replaces the old one. */ + err = uv__build_coalesced_write_req(req, bufs, nbufs, &req, &write_buf); + if (err != 0) + return err; + } + + if ((handle->flags & + (UV_HANDLE_BLOCKING_WRITES | UV_HANDLE_NON_OVERLAPPED_PIPE)) == + (UV_HANDLE_BLOCKING_WRITES | UV_HANDLE_NON_OVERLAPPED_PIPE)) { + DWORD bytes; + result = + WriteFile(handle->handle, write_buf.base, write_buf.len, &bytes, NULL); + + if (!result) { + err = GetLastError(); + return err; + } else { + /* Request completed immediately. */ + req->u.io.queued_bytes = 0; + } + + REGISTER_HANDLE_REQ(loop, handle, req); + handle->reqs_pending++; + handle->stream.conn.write_reqs_pending++; + POST_COMPLETION_FOR_REQ(loop, req); + return 0; + } else if (handle->flags & UV_HANDLE_NON_OVERLAPPED_PIPE) { + req->write_buffer = write_buf; + uv_insert_non_overlapped_write_req(handle, req); + if (handle->stream.conn.write_reqs_pending == 0) { + uv_queue_non_overlapped_write(handle); + } + + /* Request queued by the kernel. */ + req->u.io.queued_bytes = write_buf.len; + handle->write_queue_size += req->u.io.queued_bytes; + } else if (handle->flags & UV_HANDLE_BLOCKING_WRITES) { + /* Using overlapped IO, but wait for completion before returning */ + result = WriteFile(handle->handle, + write_buf.base, + write_buf.len, + NULL, + &req->u.io.overlapped); + + if (!result && GetLastError() != ERROR_IO_PENDING) { + err = GetLastError(); + CloseHandle(req->event_handle); + req->event_handle = NULL; + return err; + } + + if (result) { + /* Request completed immediately. */ + req->u.io.queued_bytes = 0; + } else { + /* Request queued by the kernel. */ + req->u.io.queued_bytes = write_buf.len; + handle->write_queue_size += req->u.io.queued_bytes; + if (WaitForSingleObject(req->event_handle, INFINITE) != + WAIT_OBJECT_0) { + err = GetLastError(); + CloseHandle(req->event_handle); + req->event_handle = NULL; + return err; + } + } + CloseHandle(req->event_handle); + req->event_handle = NULL; + + REGISTER_HANDLE_REQ(loop, handle, req); + handle->reqs_pending++; + handle->stream.conn.write_reqs_pending++; + return 0; + } else { + result = WriteFile(handle->handle, + write_buf.base, + write_buf.len, + NULL, + &req->u.io.overlapped); + + if (!result && GetLastError() != ERROR_IO_PENDING) { + return GetLastError(); + } + + if (result) { + /* Request completed immediately. */ + req->u.io.queued_bytes = 0; + } else { + /* Request queued by the kernel. */ + req->u.io.queued_bytes = write_buf.len; + handle->write_queue_size += req->u.io.queued_bytes; + } + + if (handle->flags & UV_HANDLE_EMULATE_IOCP) { + if (!RegisterWaitForSingleObject(&req->wait_handle, + req->event_handle, post_completion_write_wait, (void*) req, + INFINITE, WT_EXECUTEINWAITTHREAD)) { + return GetLastError(); + } + } + } + + REGISTER_HANDLE_REQ(loop, handle, req); + handle->reqs_pending++; + handle->stream.conn.write_reqs_pending++; + + return 0; +} + + +static DWORD uv__pipe_get_ipc_remote_pid(uv_pipe_t* handle) { + DWORD* pid = &handle->pipe.conn.ipc_remote_pid; + + /* If the both ends of the IPC pipe are owned by the same process, + * the remote end pid may not yet be set. If so, do it here. + * TODO: this is weird; it'd probably better to use a handshake. */ + if (*pid == 0) + *pid = GetCurrentProcessId(); + + return *pid; +} + + +int uv__pipe_write_ipc(uv_loop_t* loop, + uv_write_t* req, + uv_pipe_t* handle, + const uv_buf_t data_bufs[], + size_t data_buf_count, + uv_stream_t* send_handle, + uv_write_cb cb) { + uv_buf_t stack_bufs[6]; + uv_buf_t* bufs; + size_t buf_count, buf_index; + uv__ipc_frame_header_t frame_header; + uv__ipc_socket_xfer_type_t xfer_type = UV__IPC_SOCKET_XFER_NONE; + uv__ipc_socket_xfer_info_t xfer_info; + uint64_t data_length; + size_t i; + int err; + + /* Compute the combined size of data buffers. */ + data_length = 0; + for (i = 0; i < data_buf_count; i++) + data_length += data_bufs[i].len; + if (data_length > UINT32_MAX) + return WSAENOBUFS; /* Maps to UV_ENOBUFS. */ + + /* Prepare the frame's socket xfer payload. */ + if (send_handle != NULL) { + uv_tcp_t* send_tcp_handle = (uv_tcp_t*) send_handle; + + /* Verify that `send_handle` it is indeed a tcp handle. */ + if (send_tcp_handle->type != UV_TCP) + return ERROR_NOT_SUPPORTED; + + /* Export the tcp handle. */ + err = uv__tcp_xfer_export(send_tcp_handle, + uv__pipe_get_ipc_remote_pid(handle), + &xfer_type, + &xfer_info); + if (err != 0) + return err; + } + + /* Compute the number of uv_buf_t's required. */ + buf_count = 1 + data_buf_count; /* Frame header and data buffers. */ + if (send_handle != NULL) + buf_count += 1; /* One extra for the socket xfer information. */ + + /* Use the on-stack buffer array if it is big enough; otherwise allocate + * space for it on the heap. */ + if (buf_count < ARRAY_SIZE(stack_bufs)) { + /* Use on-stack buffer array. */ + bufs = stack_bufs; + } else { + /* Use heap-allocated buffer array. */ + bufs = (uv_buf_t *)uv__calloc(buf_count, sizeof(uv_buf_t)); + if (bufs == NULL) + return ERROR_NOT_ENOUGH_MEMORY; /* Maps to UV_ENOMEM. */ + } + buf_index = 0; + + /* Initialize frame header and add it to the buffers list. */ + memset(&frame_header, 0, sizeof frame_header); + bufs[buf_index++] = uv_buf_init((char*) &frame_header, sizeof frame_header); + + if (send_handle != NULL) { + /* Add frame header flags. */ + switch (xfer_type) { + case UV__IPC_SOCKET_XFER_TCP_CONNECTION: + frame_header.flags |= UV__IPC_FRAME_HAS_SOCKET_XFER | + UV__IPC_FRAME_XFER_IS_TCP_CONNECTION; + break; + case UV__IPC_SOCKET_XFER_TCP_SERVER: + frame_header.flags |= UV__IPC_FRAME_HAS_SOCKET_XFER; + break; + default: + assert(0); /* Unreachable. */ + } + /* Add xfer info buffer. */ + bufs[buf_index++] = uv_buf_init((char*) &xfer_info, sizeof xfer_info); + } + + if (data_length > 0) { + /* Update frame header. */ + frame_header.flags |= UV__IPC_FRAME_HAS_DATA; + frame_header.data_length = (uint32_t) data_length; + /* Add data buffers to buffers list. */ + for (i = 0; i < data_buf_count; i++) + bufs[buf_index++] = data_bufs[i]; + } + + /* Write buffers. We set the `always_copy` flag, so it is not a problem that + * some of the written data lives on the stack. */ + err = uv__pipe_write_data(loop, req, handle, bufs, buf_count, cb, 1); + + /* If we had to heap-allocate the bufs array, free it now. */ + if (bufs != stack_bufs) { + uv__free(bufs); + } + + return err; +} + + +int uv__pipe_write(uv_loop_t* loop, + uv_write_t* req, + uv_pipe_t* handle, + const uv_buf_t bufs[], + size_t nbufs, + uv_stream_t* send_handle, + uv_write_cb cb) { + if (handle->ipc) { + /* IPC pipe write: use framing protocol. */ + return uv__pipe_write_ipc(loop, req, handle, bufs, nbufs, send_handle, cb); + } else { + /* Non-IPC pipe write: put data on the wire directly. */ + assert(send_handle == NULL); + return uv__pipe_write_data(loop, req, handle, bufs, nbufs, cb, 0); + } +} + + +static void uv_pipe_read_eof(uv_loop_t* loop, uv_pipe_t* handle, + uv_buf_t buf) { + /* If there is an eof timer running, we don't need it any more, so discard + * it. */ + eof_timer_destroy(handle); + + handle->flags &= ~UV_HANDLE_READABLE; + uv_read_stop((uv_stream_t*) handle); + + handle->read_cb((uv_stream_t*) handle, UV_EOF, &buf); +} + + +static void uv_pipe_read_error(uv_loop_t* loop, uv_pipe_t* handle, int error, + uv_buf_t buf) { + /* If there is an eof timer running, we don't need it any more, so discard + * it. */ + eof_timer_destroy(handle); + + uv_read_stop((uv_stream_t*) handle); + + handle->read_cb((uv_stream_t*)handle, uv_translate_sys_error(error), &buf); +} + + +static void uv_pipe_read_error_or_eof(uv_loop_t* loop, uv_pipe_t* handle, + int error, uv_buf_t buf) { + if (error == ERROR_BROKEN_PIPE) { + uv_pipe_read_eof(loop, handle, buf); + } else { + uv_pipe_read_error(loop, handle, error, buf); + } +} + + +static void uv__pipe_queue_ipc_xfer_info( + uv_pipe_t* handle, + uv__ipc_socket_xfer_type_t xfer_type, + uv__ipc_socket_xfer_info_t* xfer_info) { + uv__ipc_xfer_queue_item_t* item; + + item = (uv__ipc_xfer_queue_item_t*) uv__malloc(sizeof(*item)); + if (item == NULL) + uv_fatal_error(ERROR_OUTOFMEMORY, "uv__malloc"); + + item->xfer_type = xfer_type; + item->xfer_info = *xfer_info; + + QUEUE_INSERT_TAIL(&handle->pipe.conn.ipc_xfer_queue, &item->member); + handle->pipe.conn.ipc_xfer_queue_length++; +} + + +/* Read an exact number of bytes from a pipe. If an error or end-of-file is + * encountered before the requested number of bytes are read, an error is + * returned. */ +static int uv__pipe_read_exactly(HANDLE h, void* buffer, DWORD count) { + DWORD bytes_read, bytes_read_now; + + bytes_read = 0; + while (bytes_read < count) { + if (!ReadFile(h, + (char*) buffer + bytes_read, + count - bytes_read, + &bytes_read_now, + NULL)) { + return GetLastError(); + } + + bytes_read += bytes_read_now; + } + + assert(bytes_read == count); + return 0; +} + + +static DWORD uv__pipe_read_data(uv_loop_t* loop, + uv_pipe_t* handle, + DWORD suggested_bytes, + DWORD max_bytes) { + DWORD bytes_read; + uv_buf_t buf; + + /* Ask the user for a buffer to read data into. */ + buf = uv_buf_init(NULL, 0); + handle->alloc_cb((uv_handle_t*) handle, suggested_bytes, &buf); + if (buf.base == NULL || buf.len == 0) { + handle->read_cb((uv_stream_t*) handle, UV_ENOBUFS, &buf); + return 0; /* Break out of read loop. */ + } + + /* Ensure we read at most the smaller of: + * (a) the length of the user-allocated buffer. + * (b) the maximum data length as specified by the `max_bytes` argument. + */ + if (max_bytes > buf.len) + max_bytes = buf.len; + + /* Read into the user buffer. */ + if (!ReadFile(handle->handle, buf.base, max_bytes, &bytes_read, NULL)) { + uv_pipe_read_error_or_eof(loop, handle, GetLastError(), buf); + return 0; /* Break out of read loop. */ + } + + /* Call the read callback. */ + handle->read_cb((uv_stream_t*) handle, bytes_read, &buf); + + return bytes_read; +} + + +static DWORD uv__pipe_read_ipc(uv_loop_t* loop, uv_pipe_t* handle) { + uint32_t* data_remaining = &handle->pipe.conn.ipc_data_frame.payload_remaining; + int err; + + if (*data_remaining > 0) { + /* Read frame data payload. */ + DWORD bytes_read = + uv__pipe_read_data(loop, handle, *data_remaining, *data_remaining); + *data_remaining -= bytes_read; + return bytes_read; + + } else { + /* Start of a new IPC frame. */ + uv__ipc_frame_header_t frame_header; + uint32_t xfer_flags; + uv__ipc_socket_xfer_type_t xfer_type; + uv__ipc_socket_xfer_info_t xfer_info; + + /* Read the IPC frame header. */ + err = uv__pipe_read_exactly( + handle->handle, &frame_header, sizeof frame_header); + if (err) + goto error; + + /* Validate that flags are valid. */ + if ((frame_header.flags & ~UV__IPC_FRAME_VALID_FLAGS) != 0) + goto invalid; + /* Validate that reserved2 is zero. */ + if (frame_header.reserved2 != 0) + goto invalid; + + /* Parse xfer flags. */ + xfer_flags = frame_header.flags & UV__IPC_FRAME_XFER_FLAGS; + if (xfer_flags & UV__IPC_FRAME_HAS_SOCKET_XFER) { + /* Socket coming -- determine the type. */ + xfer_type = xfer_flags & UV__IPC_FRAME_XFER_IS_TCP_CONNECTION + ? UV__IPC_SOCKET_XFER_TCP_CONNECTION + : UV__IPC_SOCKET_XFER_TCP_SERVER; + } else if (xfer_flags == 0) { + /* No socket. */ + xfer_type = UV__IPC_SOCKET_XFER_NONE; + } else { + /* Invalid flags. */ + goto invalid; + } + + /* Parse data frame information. */ + if (frame_header.flags & UV__IPC_FRAME_HAS_DATA) { + *data_remaining = frame_header.data_length; + } else if (frame_header.data_length != 0) { + /* Data length greater than zero but data flag not set -- invalid. */ + goto invalid; + } + + /* If no socket xfer info follows, return here. Data will be read in a + * subsequent invocation of uv__pipe_read_ipc(). */ + if (xfer_type == UV__IPC_SOCKET_XFER_NONE) + return sizeof frame_header; /* Number of bytes read. */ + + /* Read transferred socket information. */ + err = uv__pipe_read_exactly(handle->handle, &xfer_info, sizeof xfer_info); + if (err) + goto error; + + /* Store the pending socket info. */ + uv__pipe_queue_ipc_xfer_info(handle, xfer_type, &xfer_info); + + /* Return number of bytes read. */ + return sizeof frame_header + sizeof xfer_info; + } + +invalid: + /* Invalid frame. */ + err = WSAECONNABORTED; /* Maps to UV_ECONNABORTED. */ + +error: + uv_pipe_read_error_or_eof(loop, handle, err, uv_null_buf_); + return 0; /* Break out of read loop. */ +} + + +void uv_process_pipe_read_req(uv_loop_t* loop, + uv_pipe_t* handle, + uv_req_t* req) { + assert(handle->type == UV_NAMED_PIPE); + + handle->flags &= ~(UV_HANDLE_READ_PENDING | UV_HANDLE_CANCELLATION_PENDING); + DECREASE_PENDING_REQ_COUNT(handle); + eof_timer_stop(handle); + + /* At this point, we're done with bookkeeping. If the user has stopped + * reading the pipe in the meantime, there is nothing left to do, since there + * is no callback that we can call. */ + if (!(handle->flags & UV_HANDLE_READING)) + return; + + if (!REQ_SUCCESS(req)) { + /* An error occurred doing the zero-read. */ + DWORD err = GET_REQ_ERROR(req); + + /* If the read was cancelled by uv__pipe_interrupt_read(), the request may + * indicate an ERROR_OPERATION_ABORTED error. This error isn't relevant to + * the user; we'll start a new zero-read at the end of this function. */ + if (err != ERROR_OPERATION_ABORTED) + uv_pipe_read_error_or_eof(loop, handle, err, uv_null_buf_); + + } else { + /* The zero-read completed without error, indicating there is data + * available in the kernel buffer. */ + DWORD avail; + + /* Get the number of bytes available. */ + avail = 0; + if (!PeekNamedPipe(handle->handle, NULL, 0, NULL, &avail, NULL)) + uv_pipe_read_error_or_eof(loop, handle, GetLastError(), uv_null_buf_); + + /* Read until we've either read all the bytes available, or the 'reading' + * flag is cleared. */ + while (avail > 0 && handle->flags & UV_HANDLE_READING) { + /* Depending on the type of pipe, read either IPC frames or raw data. */ + DWORD bytes_read = + handle->ipc ? uv__pipe_read_ipc(loop, handle) + : uv__pipe_read_data(loop, handle, avail, (DWORD) -1); + + /* If no bytes were read, treat this as an indication that an error + * occurred, and break out of the read loop. */ + if (bytes_read == 0) + break; + + /* It is possible that more bytes were read than we thought were + * available. To prevent `avail` from underflowing, break out of the loop + * if this is the case. */ + if (bytes_read > avail) + break; + + /* Recompute the number of bytes available. */ + avail -= bytes_read; + } + } + + /* Start another zero-read request if necessary. */ + if ((handle->flags & UV_HANDLE_READING) && + !(handle->flags & UV_HANDLE_READ_PENDING)) { + uv_pipe_queue_read(loop, handle); + } +} + + +void uv_process_pipe_write_req(uv_loop_t* loop, uv_pipe_t* handle, + uv_write_t* req) { + int err; + + assert(handle->type == UV_NAMED_PIPE); + + assert(handle->write_queue_size >= req->u.io.queued_bytes); + handle->write_queue_size -= req->u.io.queued_bytes; + + UNREGISTER_HANDLE_REQ(loop, handle, req); + + if (handle->flags & UV_HANDLE_EMULATE_IOCP) { + if (req->wait_handle != INVALID_HANDLE_VALUE) { + UnregisterWait(req->wait_handle); + req->wait_handle = INVALID_HANDLE_VALUE; + } + if (req->event_handle) { + CloseHandle(req->event_handle); + req->event_handle = NULL; + } + } + + err = GET_REQ_ERROR(req); + + /* If this was a coalesced write, extract pointer to the user_provided + * uv_write_t structure so we can pass the expected pointer to the callback, + * then free the heap-allocated write req. */ + if (req->coalesced) { + uv__coalesced_write_t* coalesced_write = + container_of(req, uv__coalesced_write_t, req); + req = coalesced_write->user_req; + uv__free(coalesced_write); + } + if (req->cb) { + req->cb(req, uv_translate_sys_error(err)); + } + + handle->stream.conn.write_reqs_pending--; + + if (handle->flags & UV_HANDLE_NON_OVERLAPPED_PIPE && + handle->pipe.conn.non_overlapped_writes_tail) { + assert(handle->stream.conn.write_reqs_pending > 0); + uv_queue_non_overlapped_write(handle); + } + + if (handle->stream.conn.shutdown_req != NULL && + handle->stream.conn.write_reqs_pending == 0) { + uv_want_endgame(loop, (uv_handle_t*)handle); + } + + DECREASE_PENDING_REQ_COUNT(handle); +} + + +void uv_process_pipe_accept_req(uv_loop_t* loop, uv_pipe_t* handle, + uv_req_t* raw_req) { + uv_pipe_accept_t* req = (uv_pipe_accept_t*) raw_req; + + assert(handle->type == UV_NAMED_PIPE); + + if (handle->flags & UV_HANDLE_CLOSING) { + /* The req->pipeHandle should be freed already in uv_pipe_cleanup(). */ + assert(req->pipeHandle == INVALID_HANDLE_VALUE); + DECREASE_PENDING_REQ_COUNT(handle); + return; + } + + if (REQ_SUCCESS(req)) { + assert(req->pipeHandle != INVALID_HANDLE_VALUE); + req->next_pending = handle->pipe.serv.pending_accepts; + handle->pipe.serv.pending_accepts = req; + + if (handle->stream.serv.connection_cb) { + handle->stream.serv.connection_cb((uv_stream_t*)handle, 0); + } + } else { + if (req->pipeHandle != INVALID_HANDLE_VALUE) { + CloseHandle(req->pipeHandle); + req->pipeHandle = INVALID_HANDLE_VALUE; + } + if (!(handle->flags & UV_HANDLE_CLOSING)) { + uv_pipe_queue_accept(loop, handle, req, FALSE); + } + } + + DECREASE_PENDING_REQ_COUNT(handle); +} + + +void uv_process_pipe_connect_req(uv_loop_t* loop, uv_pipe_t* handle, + uv_connect_t* req) { + int err; + + assert(handle->type == UV_NAMED_PIPE); + + UNREGISTER_HANDLE_REQ(loop, handle, req); + + if (req->cb) { + err = 0; + if (REQ_SUCCESS(req)) { + uv_pipe_connection_init(handle); + } else { + err = GET_REQ_ERROR(req); + } + req->cb(req, uv_translate_sys_error(err)); + } + + DECREASE_PENDING_REQ_COUNT(handle); +} + + +void uv_process_pipe_shutdown_req(uv_loop_t* loop, uv_pipe_t* handle, + uv_shutdown_t* req) { + assert(handle->type == UV_NAMED_PIPE); + + UNREGISTER_HANDLE_REQ(loop, handle, req); + + if (handle->flags & UV_HANDLE_READABLE) { + /* Initialize and optionally start the eof timer. Only do this if the pipe + * is readable and we haven't seen EOF come in ourselves. */ + eof_timer_init(handle); + + /* If reading start the timer right now. Otherwise uv_pipe_queue_read will + * start it. */ + if (handle->flags & UV_HANDLE_READ_PENDING) { + eof_timer_start(handle); + } + + } else { + /* This pipe is not readable. We can just close it to let the other end + * know that we're done writing. */ + close_pipe(handle); + } + + if (req->cb) { + req->cb(req, 0); + } + + DECREASE_PENDING_REQ_COUNT(handle); +} + + +static void eof_timer_init(uv_pipe_t* pipe) { + int r; + + assert(pipe->pipe.conn.eof_timer == NULL); + assert(pipe->flags & UV_HANDLE_CONNECTION); + + pipe->pipe.conn.eof_timer = (uv_timer_t*) uv__malloc(sizeof *pipe->pipe.conn.eof_timer); + + r = uv_timer_init(pipe->loop, pipe->pipe.conn.eof_timer); + assert(r == 0); /* timers can't fail */ + pipe->pipe.conn.eof_timer->data = pipe; + uv_unref((uv_handle_t*) pipe->pipe.conn.eof_timer); +} + + +static void eof_timer_start(uv_pipe_t* pipe) { + assert(pipe->flags & UV_HANDLE_CONNECTION); + + if (pipe->pipe.conn.eof_timer != NULL) { + uv_timer_start(pipe->pipe.conn.eof_timer, eof_timer_cb, eof_timeout, 0); + } +} + + +static void eof_timer_stop(uv_pipe_t* pipe) { + assert(pipe->flags & UV_HANDLE_CONNECTION); + + if (pipe->pipe.conn.eof_timer != NULL) { + uv_timer_stop(pipe->pipe.conn.eof_timer); + } +} + + +static void eof_timer_cb(uv_timer_t* timer) { + uv_pipe_t* pipe = (uv_pipe_t*) timer->data; + uv_loop_t* loop = timer->loop; + + assert(pipe->type == UV_NAMED_PIPE); + + /* This should always be true, since we start the timer only in + * uv_pipe_queue_read after successfully calling ReadFile, or in + * uv_process_pipe_shutdown_req if a read is pending, and we always + * immediately stop the timer in uv_process_pipe_read_req. */ + assert(pipe->flags & UV_HANDLE_READ_PENDING); + + /* If there are many packets coming off the iocp then the timer callback may + * be called before the read request is coming off the queue. Therefore we + * check here if the read request has completed but will be processed later. + */ + if ((pipe->flags & UV_HANDLE_READ_PENDING) && + HasOverlappedIoCompleted(&pipe->read_req.u.io.overlapped)) { + return; + } + + /* Force both ends off the pipe. */ + close_pipe(pipe); + + /* Stop reading, so the pending read that is going to fail will not be + * reported to the user. */ + uv_read_stop((uv_stream_t*) pipe); + + /* Report the eof and update flags. This will get reported even if the user + * stopped reading in the meantime. TODO: is that okay? */ + uv_pipe_read_eof(loop, pipe, uv_null_buf_); +} + + +static void eof_timer_destroy(uv_pipe_t* pipe) { + assert(pipe->flags & UV_HANDLE_CONNECTION); + + if (pipe->pipe.conn.eof_timer) { + uv_close((uv_handle_t*) pipe->pipe.conn.eof_timer, eof_timer_close_cb); + pipe->pipe.conn.eof_timer = NULL; + } +} + + +static void eof_timer_close_cb(uv_handle_t* handle) { + assert(handle->type == UV_TIMER); + uv__free(handle); +} + + +int uv_pipe_open(uv_pipe_t* pipe, uv_file file) { + HANDLE os_handle = uv__get_osfhandle(file); + NTSTATUS nt_status; + IO_STATUS_BLOCK io_status; + FILE_ACCESS_INFORMATION access; + DWORD duplex_flags = 0; + + if (os_handle == INVALID_HANDLE_VALUE) + return UV_EBADF; + + uv__once_init(); + /* In order to avoid closing a stdio file descriptor 0-2, duplicate the + * underlying OS handle and forget about the original fd. + * We could also opt to use the original OS handle and just never close it, + * but then there would be no reliable way to cancel pending read operations + * upon close. + */ + if (file <= 2) { + if (!DuplicateHandle(INVALID_HANDLE_VALUE, + os_handle, + INVALID_HANDLE_VALUE, + &os_handle, + 0, + FALSE, + DUPLICATE_SAME_ACCESS)) + return uv_translate_sys_error(GetLastError()); + file = -1; + } + + /* Determine what kind of permissions we have on this handle. + * Cygwin opens the pipe in message mode, but we can support it, + * just query the access flags and set the stream flags accordingly. + */ + nt_status = pNtQueryInformationFile(os_handle, + &io_status, + &access, + sizeof(access), + FileAccessInformation); + if (nt_status != STATUS_SUCCESS) + return UV_EINVAL; + + if (pipe->ipc) { + if (!(access.AccessFlags & FILE_WRITE_DATA) || + !(access.AccessFlags & FILE_READ_DATA)) { + return UV_EINVAL; + } + } + + if (access.AccessFlags & FILE_WRITE_DATA) + duplex_flags |= UV_HANDLE_WRITABLE; + if (access.AccessFlags & FILE_READ_DATA) + duplex_flags |= UV_HANDLE_READABLE; + + if (os_handle == INVALID_HANDLE_VALUE || + uv_set_pipe_handle(pipe->loop, + pipe, + os_handle, + file, + duplex_flags) == -1) { + return UV_EINVAL; + } + + uv_pipe_connection_init(pipe); + + if (pipe->ipc) { + assert(!(pipe->flags & UV_HANDLE_NON_OVERLAPPED_PIPE)); + pipe->pipe.conn.ipc_remote_pid = uv_os_getppid(); + assert(pipe->pipe.conn.ipc_remote_pid != (DWORD) -1); + } + return 0; +} + + +static int uv__pipe_getname(const uv_pipe_t* handle, char* buffer, size_t* size) { + NTSTATUS nt_status; + IO_STATUS_BLOCK io_status; + FILE_NAME_INFORMATION tmp_name_info; + FILE_NAME_INFORMATION* name_info; + WCHAR* name_buf; + unsigned int addrlen; + unsigned int name_size; + unsigned int name_len; + int err; + + uv__once_init(); + name_info = NULL; + + if (handle->handle == INVALID_HANDLE_VALUE) { + *size = 0; + return UV_EINVAL; + } + + /* NtQueryInformationFile will block if another thread is performing a + * blocking operation on the queried handle. If the pipe handle is + * synchronous, there may be a worker thread currently calling ReadFile() on + * the pipe handle, which could cause a deadlock. To avoid this, interrupt + * the read. */ + if (handle->flags & UV_HANDLE_CONNECTION && + handle->flags & UV_HANDLE_NON_OVERLAPPED_PIPE) { + uv__pipe_interrupt_read((uv_pipe_t*) handle); /* cast away const warning */ + } + + nt_status = pNtQueryInformationFile(handle->handle, + &io_status, + &tmp_name_info, + sizeof tmp_name_info, + FileNameInformation); + if (nt_status == STATUS_BUFFER_OVERFLOW) { + name_size = sizeof(*name_info) + tmp_name_info.FileNameLength; + name_info = (FILE_NAME_INFORMATION *)uv__malloc(name_size); + if (!name_info) { + *size = 0; + err = UV_ENOMEM; + goto cleanup; + } + + nt_status = pNtQueryInformationFile(handle->handle, + &io_status, + name_info, + name_size, + FileNameInformation); + } + + if (nt_status != STATUS_SUCCESS) { + *size = 0; + err = uv_translate_sys_error(pRtlNtStatusToDosError(nt_status)); + goto error; + } + + if (!name_info) { + /* the struct on stack was used */ + name_buf = tmp_name_info.FileName; + name_len = tmp_name_info.FileNameLength; + } else { + name_buf = name_info->FileName; + name_len = name_info->FileNameLength; + } + + if (name_len == 0) { + *size = 0; + err = 0; + goto error; + } + + name_len /= sizeof(WCHAR); + + /* check how much space we need */ + addrlen = WideCharToMultiByte(CP_UTF8, + 0, + name_buf, + name_len, + NULL, + 0, + NULL, + NULL); + if (!addrlen) { + *size = 0; + err = uv_translate_sys_error(GetLastError()); + goto error; + } else if (pipe_prefix_len + addrlen >= *size) { + /* "\\\\.\\pipe" + name */ + *size = pipe_prefix_len + addrlen + 1; + err = UV_ENOBUFS; + goto error; + } + + memcpy(buffer, pipe_prefix, pipe_prefix_len); + addrlen = WideCharToMultiByte(CP_UTF8, + 0, + name_buf, + name_len, + buffer+pipe_prefix_len, + *size-pipe_prefix_len, + NULL, + NULL); + if (!addrlen) { + *size = 0; + err = uv_translate_sys_error(GetLastError()); + goto error; + } + + addrlen += pipe_prefix_len; + *size = addrlen; + buffer[addrlen] = '\0'; + + err = 0; + +error: + uv__free(name_info); + +cleanup: + return err; +} + + +int uv_pipe_pending_count(uv_pipe_t* handle) { + if (!handle->ipc) + return 0; + return handle->pipe.conn.ipc_xfer_queue_length; +} + + +int uv_pipe_getsockname(const uv_pipe_t* handle, char* buffer, size_t* size) { + if (handle->flags & UV_HANDLE_BOUND) + return uv__pipe_getname(handle, buffer, size); + + if (handle->flags & UV_HANDLE_CONNECTION || + handle->handle != INVALID_HANDLE_VALUE) { + *size = 0; + return 0; + } + + return UV_EBADF; +} + + +int uv_pipe_getpeername(const uv_pipe_t* handle, char* buffer, size_t* size) { + /* emulate unix behaviour */ + if (handle->flags & UV_HANDLE_BOUND) + return UV_ENOTCONN; + + if (handle->handle != INVALID_HANDLE_VALUE) + return uv__pipe_getname(handle, buffer, size); + + return UV_EBADF; +} + + +uv_handle_type uv_pipe_pending_type(uv_pipe_t* handle) { + if (!handle->ipc) + return UV_UNKNOWN_HANDLE; + if (handle->pipe.conn.ipc_xfer_queue_length == 0) + return UV_UNKNOWN_HANDLE; + else + return UV_TCP; +} + +int uv_pipe_chmod(uv_pipe_t* handle, int mode) { + SID_IDENTIFIER_AUTHORITY sid_world = { SECURITY_WORLD_SID_AUTHORITY }; + PACL old_dacl, new_dacl; + PSECURITY_DESCRIPTOR sd; + EXPLICIT_ACCESS ea; + PSID everyone; + int error; + + if (handle == NULL || handle->handle == INVALID_HANDLE_VALUE) + return UV_EBADF; + + if (mode != UV_READABLE && + mode != UV_WRITABLE && + mode != (UV_WRITABLE | UV_READABLE)) + return UV_EINVAL; + + if (!AllocateAndInitializeSid(&sid_world, + 1, + SECURITY_WORLD_RID, + 0, 0, 0, 0, 0, 0, 0, + &everyone)) { + error = GetLastError(); + goto done; + } + + if (GetSecurityInfo(handle->handle, + SE_KERNEL_OBJECT, + DACL_SECURITY_INFORMATION, + NULL, + NULL, + &old_dacl, + NULL, + &sd)) { + error = GetLastError(); + goto clean_sid; + } + + memset(&ea, 0, sizeof(EXPLICIT_ACCESS)); + if (mode & UV_READABLE) + ea.grfAccessPermissions |= GENERIC_READ | FILE_WRITE_ATTRIBUTES; + if (mode & UV_WRITABLE) + ea.grfAccessPermissions |= GENERIC_WRITE | FILE_READ_ATTRIBUTES; + ea.grfAccessPermissions |= SYNCHRONIZE; + ea.grfAccessMode = SET_ACCESS; + ea.grfInheritance = NO_INHERITANCE; + ea.Trustee.TrusteeForm = TRUSTEE_IS_SID; + ea.Trustee.TrusteeType = TRUSTEE_IS_WELL_KNOWN_GROUP; + ea.Trustee.ptstrName = (LPTSTR)everyone; + + if (SetEntriesInAcl(1, &ea, old_dacl, &new_dacl)) { + error = GetLastError(); + goto clean_sd; + } + + if (SetSecurityInfo(handle->handle, + SE_KERNEL_OBJECT, + DACL_SECURITY_INFORMATION, + NULL, + NULL, + new_dacl, + NULL)) { + error = GetLastError(); + goto clean_dacl; + } + + error = 0; + +clean_dacl: + LocalFree((HLOCAL) new_dacl); +clean_sd: + LocalFree((HLOCAL) sd); +clean_sid: + FreeSid(everyone); +done: + return uv_translate_sys_error(error); +} diff --git a/external/libuv/src/win/poll.c b/external/libuv/src/win/poll.c new file mode 100644 index 000000000..87858590c --- /dev/null +++ b/external/libuv/src/win/poll.c @@ -0,0 +1,584 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#include +#include + +#include "uv.h" +#include "internal.h" +#include "handle-inl.h" +#include "req-inl.h" + + +static const GUID uv_msafd_provider_ids[UV_MSAFD_PROVIDER_COUNT] = { + {0xe70f1aa0, 0xab8b, 0x11cf, + {0x8c, 0xa3, 0x00, 0x80, 0x5f, 0x48, 0xa1, 0x92}}, + {0xf9eab0c0, 0x26d4, 0x11d0, + {0xbb, 0xbf, 0x00, 0xaa, 0x00, 0x6c, 0x34, 0xe4}}, + {0x9fc48064, 0x7298, 0x43e4, + {0xb7, 0xbd, 0x18, 0x1f, 0x20, 0x89, 0x79, 0x2a}} +}; + +typedef struct uv_single_fd_set_s { + unsigned int fd_count; + SOCKET fd_array[1]; +} uv_single_fd_set_t; + + +static OVERLAPPED overlapped_dummy_; +static uv_once_t overlapped_dummy_init_guard_ = UV_ONCE_INIT; + +static AFD_POLL_INFO afd_poll_info_dummy_; + + +static void uv__init_overlapped_dummy(void) { + HANDLE event; + + event = CreateEvent(NULL, TRUE, TRUE, NULL); + if (event == NULL) + uv_fatal_error(GetLastError(), "CreateEvent"); + + memset(&overlapped_dummy_, 0, sizeof overlapped_dummy_); + overlapped_dummy_.hEvent = (HANDLE) ((uintptr_t) event | 1); +} + + +static OVERLAPPED* uv__get_overlapped_dummy(void) { + uv_once(&overlapped_dummy_init_guard_, uv__init_overlapped_dummy); + return &overlapped_dummy_; +} + + +static AFD_POLL_INFO* uv__get_afd_poll_info_dummy(void) { + return &afd_poll_info_dummy_; +} + + +static void uv__fast_poll_submit_poll_req(uv_loop_t* loop, uv_poll_t* handle) { + uv_req_t* req; + AFD_POLL_INFO* afd_poll_info; + int result; + + /* Find a yet unsubmitted req to submit. */ + if (handle->submitted_events_1 == 0) { + req = &handle->poll_req_1; + afd_poll_info = &handle->afd_poll_info_1; + handle->submitted_events_1 = handle->events; + handle->mask_events_1 = 0; + handle->mask_events_2 = handle->events; + } else if (handle->submitted_events_2 == 0) { + req = &handle->poll_req_2; + afd_poll_info = &handle->afd_poll_info_2; + handle->submitted_events_2 = handle->events; + handle->mask_events_1 = handle->events; + handle->mask_events_2 = 0; + } else { + /* Just wait until there's an unsubmitted req. This will happen almost + * immediately as one of the 2 outstanding requests is about to return. + * When this happens, uv__fast_poll_process_poll_req will be called, and + * the pending events, if needed, will be processed in a subsequent + * request. */ + return; + } + + /* Setting Exclusive to TRUE makes the other poll request return if there is + * any. */ + afd_poll_info->Exclusive = TRUE; + afd_poll_info->NumberOfHandles = 1; + afd_poll_info->Timeout.QuadPart = INT64_MAX; + afd_poll_info->Handles[0].Handle = (HANDLE) handle->socket; + afd_poll_info->Handles[0].Status = 0; + afd_poll_info->Handles[0].Events = 0; + + if (handle->events & UV_READABLE) { + afd_poll_info->Handles[0].Events |= AFD_POLL_RECEIVE | + AFD_POLL_DISCONNECT | AFD_POLL_ACCEPT | AFD_POLL_ABORT; + } else { + if (handle->events & UV_DISCONNECT) { + afd_poll_info->Handles[0].Events |= AFD_POLL_DISCONNECT; + } + } + if (handle->events & UV_WRITABLE) { + afd_poll_info->Handles[0].Events |= AFD_POLL_SEND | AFD_POLL_CONNECT_FAIL; + } + + memset(&req->u.io.overlapped, 0, sizeof req->u.io.overlapped); + + result = uv_msafd_poll((SOCKET) handle->peer_socket, + afd_poll_info, + afd_poll_info, + &req->u.io.overlapped); + if (result != 0 && WSAGetLastError() != WSA_IO_PENDING) { + /* Queue this req, reporting an error. */ + SET_REQ_ERROR(req, WSAGetLastError()); + uv_insert_pending_req(loop, req); + } +} + + +static void uv__fast_poll_process_poll_req(uv_loop_t* loop, uv_poll_t* handle, + uv_req_t* req) { + unsigned char mask_events; + AFD_POLL_INFO* afd_poll_info; + + if (req == &handle->poll_req_1) { + afd_poll_info = &handle->afd_poll_info_1; + handle->submitted_events_1 = 0; + mask_events = handle->mask_events_1; + } else if (req == &handle->poll_req_2) { + afd_poll_info = &handle->afd_poll_info_2; + handle->submitted_events_2 = 0; + mask_events = handle->mask_events_2; + } else { + assert(0); + return; + } + + /* Report an error unless the select was just interrupted. */ + if (!REQ_SUCCESS(req)) { + DWORD error = GET_REQ_SOCK_ERROR(req); + if (error != WSAEINTR && handle->events != 0) { + handle->events = 0; /* Stop the watcher */ + handle->poll_cb(handle, uv_translate_sys_error(error), 0); + } + + } else if (afd_poll_info->NumberOfHandles >= 1) { + unsigned char events = 0; + + if ((afd_poll_info->Handles[0].Events & (AFD_POLL_RECEIVE | + AFD_POLL_DISCONNECT | AFD_POLL_ACCEPT | AFD_POLL_ABORT)) != 0) { + events |= UV_READABLE; + if ((afd_poll_info->Handles[0].Events & AFD_POLL_DISCONNECT) != 0) { + events |= UV_DISCONNECT; + } + } + if ((afd_poll_info->Handles[0].Events & (AFD_POLL_SEND | + AFD_POLL_CONNECT_FAIL)) != 0) { + events |= UV_WRITABLE; + } + + events &= handle->events & ~mask_events; + + if (afd_poll_info->Handles[0].Events & AFD_POLL_LOCAL_CLOSE) { + /* Stop polling. */ + handle->events = 0; + if (uv__is_active(handle)) + uv__handle_stop(handle); + } + + if (events != 0) { + handle->poll_cb(handle, 0, events); + } + } + + if ((handle->events & ~(handle->submitted_events_1 | + handle->submitted_events_2)) != 0) { + uv__fast_poll_submit_poll_req(loop, handle); + } else if ((handle->flags & UV_HANDLE_CLOSING) && + handle->submitted_events_1 == 0 && + handle->submitted_events_2 == 0) { + uv_want_endgame(loop, (uv_handle_t*) handle); + } +} + + +static SOCKET uv__fast_poll_create_peer_socket(HANDLE iocp, + WSAPROTOCOL_INFOW* protocol_info) { + SOCKET sock = 0; + + sock = WSASocketW(protocol_info->iAddressFamily, + protocol_info->iSocketType, + protocol_info->iProtocol, + protocol_info, + 0, + WSA_FLAG_OVERLAPPED); + if (sock == INVALID_SOCKET) { + return INVALID_SOCKET; + } + + if (!SetHandleInformation((HANDLE) sock, HANDLE_FLAG_INHERIT, 0)) { + goto error; + }; + + if (CreateIoCompletionPort((HANDLE) sock, + iocp, + (ULONG_PTR) sock, + 0) == NULL) { + goto error; + } + + return sock; + + error: + closesocket(sock); + return INVALID_SOCKET; +} + + +static SOCKET uv__fast_poll_get_peer_socket(uv_loop_t* loop, + WSAPROTOCOL_INFOW* protocol_info) { + int index, i; + SOCKET peer_socket; + + index = -1; + for (i = 0; (size_t) i < ARRAY_SIZE(uv_msafd_provider_ids); i++) { + if (memcmp((void*) &protocol_info->ProviderId, + (void*) &uv_msafd_provider_ids[i], + sizeof protocol_info->ProviderId) == 0) { + index = i; + } + } + + /* Check if the protocol uses an msafd socket. */ + if (index < 0) { + return INVALID_SOCKET; + } + + /* If we didn't (try) to create a peer socket yet, try to make one. Don't try + * again if the peer socket creation failed earlier for the same protocol. */ + peer_socket = loop->poll_peer_sockets[index]; + if (peer_socket == 0) { + peer_socket = uv__fast_poll_create_peer_socket(loop->iocp, protocol_info); + loop->poll_peer_sockets[index] = peer_socket; + } + + return peer_socket; +} + + +static DWORD WINAPI uv__slow_poll_thread_proc(void* arg) { + uv_req_t* req = (uv_req_t*) arg; + uv_poll_t* handle = (uv_poll_t*) req->data; + unsigned char reported_events; + int r; + uv_single_fd_set_t rfds, wfds, efds; + struct timeval timeout; + + assert(handle->type == UV_POLL); + assert(req->type == UV_POLL_REQ); + + if (handle->events & UV_READABLE) { + rfds.fd_count = 1; + rfds.fd_array[0] = handle->socket; + } else { + rfds.fd_count = 0; + } + + if (handle->events & UV_WRITABLE) { + wfds.fd_count = 1; + wfds.fd_array[0] = handle->socket; + efds.fd_count = 1; + efds.fd_array[0] = handle->socket; + } else { + wfds.fd_count = 0; + efds.fd_count = 0; + } + + /* Make the select() time out after 3 minutes. If select() hangs because the + * user closed the socket, we will at least not hang indefinitely. */ + timeout.tv_sec = 3 * 60; + timeout.tv_usec = 0; + + r = select(1, (fd_set*) &rfds, (fd_set*) &wfds, (fd_set*) &efds, &timeout); + if (r == SOCKET_ERROR) { + /* Queue this req, reporting an error. */ + SET_REQ_ERROR(&handle->poll_req_1, WSAGetLastError()); + POST_COMPLETION_FOR_REQ(handle->loop, req); + return 0; + } + + reported_events = 0; + + if (r > 0) { + if (rfds.fd_count > 0) { + assert(rfds.fd_count == 1); + assert(rfds.fd_array[0] == handle->socket); + reported_events |= UV_READABLE; + } + + if (wfds.fd_count > 0) { + assert(wfds.fd_count == 1); + assert(wfds.fd_array[0] == handle->socket); + reported_events |= UV_WRITABLE; + } else if (efds.fd_count > 0) { + assert(efds.fd_count == 1); + assert(efds.fd_array[0] == handle->socket); + reported_events |= UV_WRITABLE; + } + } + + SET_REQ_SUCCESS(req); + req->u.io.overlapped.InternalHigh = (DWORD) reported_events; + POST_COMPLETION_FOR_REQ(handle->loop, req); + + return 0; +} + + +static void uv__slow_poll_submit_poll_req(uv_loop_t* loop, uv_poll_t* handle) { + uv_req_t* req; + + /* Find a yet unsubmitted req to submit. */ + if (handle->submitted_events_1 == 0) { + req = &handle->poll_req_1; + handle->submitted_events_1 = handle->events; + handle->mask_events_1 = 0; + handle->mask_events_2 = handle->events; + } else if (handle->submitted_events_2 == 0) { + req = &handle->poll_req_2; + handle->submitted_events_2 = handle->events; + handle->mask_events_1 = handle->events; + handle->mask_events_2 = 0; + } else { + assert(0); + return; + } + + if (!QueueUserWorkItem(uv__slow_poll_thread_proc, + (void*) req, + WT_EXECUTELONGFUNCTION)) { + /* Make this req pending, reporting an error. */ + SET_REQ_ERROR(req, GetLastError()); + uv_insert_pending_req(loop, req); + } +} + + + +static void uv__slow_poll_process_poll_req(uv_loop_t* loop, uv_poll_t* handle, + uv_req_t* req) { + unsigned char mask_events; + int err; + + if (req == &handle->poll_req_1) { + handle->submitted_events_1 = 0; + mask_events = handle->mask_events_1; + } else if (req == &handle->poll_req_2) { + handle->submitted_events_2 = 0; + mask_events = handle->mask_events_2; + } else { + assert(0); + return; + } + + if (!REQ_SUCCESS(req)) { + /* Error. */ + if (handle->events != 0) { + err = GET_REQ_ERROR(req); + handle->events = 0; /* Stop the watcher */ + handle->poll_cb(handle, uv_translate_sys_error(err), 0); + } + } else { + /* Got some events. */ + int events = req->u.io.overlapped.InternalHigh & handle->events & ~mask_events; + if (events != 0) { + handle->poll_cb(handle, 0, events); + } + } + + if ((handle->events & ~(handle->submitted_events_1 | + handle->submitted_events_2)) != 0) { + uv__slow_poll_submit_poll_req(loop, handle); + } else if ((handle->flags & UV_HANDLE_CLOSING) && + handle->submitted_events_1 == 0 && + handle->submitted_events_2 == 0) { + uv_want_endgame(loop, (uv_handle_t*) handle); + } +} + + +int uv_poll_init(uv_loop_t* loop, uv_poll_t* handle, int fd) { + return uv_poll_init_socket(loop, handle, (SOCKET) uv__get_osfhandle(fd)); +} + + +int uv_poll_init_socket(uv_loop_t* loop, uv_poll_t* handle, + uv_os_sock_t socket) { + WSAPROTOCOL_INFOW protocol_info; + int len; + SOCKET peer_socket, base_socket; + DWORD bytes; + DWORD yes = 1; + + /* Set the socket to nonblocking mode */ + if (ioctlsocket(socket, FIONBIO, &yes) == SOCKET_ERROR) + return uv_translate_sys_error(WSAGetLastError()); + +/* Try to obtain a base handle for the socket. This increases this chances that + * we find an AFD handle and are able to use the fast poll mechanism. This will + * always fail on windows XP/2k3, since they don't support the. SIO_BASE_HANDLE + * ioctl. */ +#ifndef NDEBUG + base_socket = INVALID_SOCKET; +#endif + + if (WSAIoctl(socket, + SIO_BASE_HANDLE, + NULL, + 0, + &base_socket, + sizeof base_socket, + &bytes, + NULL, + NULL) == 0) { + assert(base_socket != 0 && base_socket != INVALID_SOCKET); + socket = base_socket; + } + + uv__handle_init(loop, (uv_handle_t*) handle, UV_POLL); + handle->socket = socket; + handle->events = 0; + + /* Obtain protocol information about the socket. */ + len = sizeof protocol_info; + if (getsockopt(socket, + SOL_SOCKET, + SO_PROTOCOL_INFOW, + (char*) &protocol_info, + &len) != 0) { + return uv_translate_sys_error(WSAGetLastError()); + } + + /* Get the peer socket that is needed to enable fast poll. If the returned + * value is NULL, the protocol is not implemented by MSAFD and we'll have to + * use slow mode. */ + peer_socket = uv__fast_poll_get_peer_socket(loop, &protocol_info); + + if (peer_socket != INVALID_SOCKET) { + /* Initialize fast poll specific fields. */ + handle->peer_socket = peer_socket; + } else { + /* Initialize slow poll specific fields. */ + handle->flags |= UV_HANDLE_POLL_SLOW; + } + + /* Initialize 2 poll reqs. */ + handle->submitted_events_1 = 0; + UV_REQ_INIT(&handle->poll_req_1, UV_POLL_REQ); + handle->poll_req_1.data = handle; + + handle->submitted_events_2 = 0; + UV_REQ_INIT(&handle->poll_req_2, UV_POLL_REQ); + handle->poll_req_2.data = handle; + + return 0; +} + + +static int uv__poll_set(uv_poll_t* handle, int events, uv_poll_cb cb) { + int submitted_events; + + assert(handle->type == UV_POLL); + assert(!(handle->flags & UV_HANDLE_CLOSING)); + assert((events & ~(UV_READABLE | UV_WRITABLE | UV_DISCONNECT)) == 0); + + handle->events = events; + handle->poll_cb = cb; + + if (handle->events == 0) { + uv__handle_stop(handle); + return 0; + } + + uv__handle_start(handle); + submitted_events = handle->submitted_events_1 | handle->submitted_events_2; + + if (handle->events & ~submitted_events) { + if (handle->flags & UV_HANDLE_POLL_SLOW) { + uv__slow_poll_submit_poll_req(handle->loop, handle); + } else { + uv__fast_poll_submit_poll_req(handle->loop, handle); + } + } + + return 0; +} + + +int uv_poll_start(uv_poll_t* handle, int events, uv_poll_cb cb) { + return uv__poll_set(handle, events, cb); +} + + +int uv_poll_stop(uv_poll_t* handle) { + return uv__poll_set(handle, 0, handle->poll_cb); +} + + +void uv_process_poll_req(uv_loop_t* loop, uv_poll_t* handle, uv_req_t* req) { + if (!(handle->flags & UV_HANDLE_POLL_SLOW)) { + uv__fast_poll_process_poll_req(loop, handle, req); + } else { + uv__slow_poll_process_poll_req(loop, handle, req); + } +} + + +int uv_poll_close(uv_loop_t* loop, uv_poll_t* handle) { + AFD_POLL_INFO afd_poll_info; + DWORD error; + int result; + + handle->events = 0; + uv__handle_closing(handle); + + if (handle->submitted_events_1 == 0 && + handle->submitted_events_2 == 0) { + uv_want_endgame(loop, (uv_handle_t*) handle); + return 0; + } + + if (handle->flags & UV_HANDLE_POLL_SLOW) + return 0; + + /* Cancel outstanding poll requests by executing another, unique poll + * request that forces the outstanding ones to return. */ + afd_poll_info.Exclusive = TRUE; + afd_poll_info.NumberOfHandles = 1; + afd_poll_info.Timeout.QuadPart = INT64_MAX; + afd_poll_info.Handles[0].Handle = (HANDLE) handle->socket; + afd_poll_info.Handles[0].Status = 0; + afd_poll_info.Handles[0].Events = AFD_POLL_ALL; + + result = uv_msafd_poll(handle->socket, + &afd_poll_info, + uv__get_afd_poll_info_dummy(), + uv__get_overlapped_dummy()); + + if (result == SOCKET_ERROR) { + error = WSAGetLastError(); + if (error != WSA_IO_PENDING) + return uv_translate_sys_error(error); + } + + return 0; +} + + +void uv_poll_endgame(uv_loop_t* loop, uv_poll_t* handle) { + assert(handle->flags & UV_HANDLE_CLOSING); + assert(!(handle->flags & UV_HANDLE_CLOSED)); + + assert(handle->submitted_events_1 == 0); + assert(handle->submitted_events_2 == 0); + + uv__handle_close(handle); +} diff --git a/external/libuv/src/win/process-stdio.c b/external/libuv/src/win/process-stdio.c new file mode 100644 index 000000000..355d61880 --- /dev/null +++ b/external/libuv/src/win/process-stdio.c @@ -0,0 +1,512 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#include +#include +#include +#include + +#include "uv.h" +#include "internal.h" +#include "handle-inl.h" + + +/* + * The `child_stdio_buffer` buffer has the following layout: + * int number_of_fds + * unsigned char crt_flags[number_of_fds] + * HANDLE os_handle[number_of_fds] + */ +#define CHILD_STDIO_SIZE(count) \ + (sizeof(int) + \ + sizeof(unsigned char) * (count) + \ + sizeof(uintptr_t) * (count)) + +#define CHILD_STDIO_COUNT(buffer) \ + *((unsigned int*) (buffer)) + +#define CHILD_STDIO_CRT_FLAGS(buffer, fd) \ + *((unsigned char*) (buffer) + sizeof(int) + fd) + +#define CHILD_STDIO_HANDLE(buffer, fd) \ + *((HANDLE*) ((unsigned char*) (buffer) + \ + sizeof(int) + \ + sizeof(unsigned char) * \ + CHILD_STDIO_COUNT((buffer)) + \ + sizeof(HANDLE) * (fd))) + + +/* CRT file descriptor mode flags */ +#define FOPEN 0x01 +#define FEOFLAG 0x02 +#define FCRLF 0x04 +#define FPIPE 0x08 +#define FNOINHERIT 0x10 +#define FAPPEND 0x20 +#define FDEV 0x40 +#define FTEXT 0x80 + + +/* + * Clear the HANDLE_FLAG_INHERIT flag from all HANDLEs that were inherited + * the parent process. Don't check for errors - the stdio handles may not be + * valid, or may be closed already. There is no guarantee that this function + * does a perfect job. + */ +void uv_disable_stdio_inheritance(void) { + HANDLE handle; + STARTUPINFOW si; + + /* Make the windows stdio handles non-inheritable. */ + handle = GetStdHandle(STD_INPUT_HANDLE); + if (handle != NULL && handle != INVALID_HANDLE_VALUE) + SetHandleInformation(handle, HANDLE_FLAG_INHERIT, 0); + + handle = GetStdHandle(STD_OUTPUT_HANDLE); + if (handle != NULL && handle != INVALID_HANDLE_VALUE) + SetHandleInformation(handle, HANDLE_FLAG_INHERIT, 0); + + handle = GetStdHandle(STD_ERROR_HANDLE); + if (handle != NULL && handle != INVALID_HANDLE_VALUE) + SetHandleInformation(handle, HANDLE_FLAG_INHERIT, 0); + + /* Make inherited CRT FDs non-inheritable. */ + GetStartupInfoW(&si); + if (uv__stdio_verify(si.lpReserved2, si.cbReserved2)) + uv__stdio_noinherit(si.lpReserved2); +} + + +static int uv__create_stdio_pipe_pair(uv_loop_t* loop, + uv_pipe_t* server_pipe, HANDLE* child_pipe_ptr, unsigned int flags) { + char pipe_name[64]; + SECURITY_ATTRIBUTES sa; + DWORD server_access = 0; + DWORD client_access = 0; + HANDLE child_pipe = INVALID_HANDLE_VALUE; + int err; + int overlap; + + if (flags & UV_READABLE_PIPE) { + /* The server needs inbound access too, otherwise CreateNamedPipe() won't + * give us the FILE_READ_ATTRIBUTES permission. We need that to probe the + * state of the write buffer when we're trying to shutdown the pipe. */ + server_access |= PIPE_ACCESS_OUTBOUND | PIPE_ACCESS_INBOUND; + client_access |= GENERIC_READ | FILE_WRITE_ATTRIBUTES; + } + if (flags & UV_WRITABLE_PIPE) { + server_access |= PIPE_ACCESS_INBOUND; + client_access |= GENERIC_WRITE | FILE_READ_ATTRIBUTES; + } + + /* Create server pipe handle. */ + err = uv_stdio_pipe_server(loop, + server_pipe, + server_access, + pipe_name, + sizeof(pipe_name)); + if (err) + goto error; + + /* Create child pipe handle. */ + sa.nLength = sizeof sa; + sa.lpSecurityDescriptor = NULL; + sa.bInheritHandle = TRUE; + + overlap = server_pipe->ipc || (flags & UV_OVERLAPPED_PIPE); + child_pipe = CreateFileA(pipe_name, + client_access, + 0, + &sa, + OPEN_EXISTING, + overlap ? FILE_FLAG_OVERLAPPED : 0, + NULL); + if (child_pipe == INVALID_HANDLE_VALUE) { + err = GetLastError(); + goto error; + } + +#ifndef NDEBUG + /* Validate that the pipe was opened in the right mode. */ + { + DWORD mode; + BOOL r = GetNamedPipeHandleState(child_pipe, + &mode, + NULL, + NULL, + NULL, + NULL, + 0); + assert(r == TRUE); + assert(mode == (PIPE_READMODE_BYTE | PIPE_WAIT)); + } +#endif + + /* Do a blocking ConnectNamedPipe. This should not block because we have both + * ends of the pipe created. */ + if (!ConnectNamedPipe(server_pipe->handle, NULL)) { + if (GetLastError() != ERROR_PIPE_CONNECTED) { + err = GetLastError(); + goto error; + } + } + + /* The server end is now readable and/or writable. */ + if (flags & UV_READABLE_PIPE) + server_pipe->flags |= UV_HANDLE_WRITABLE; + if (flags & UV_WRITABLE_PIPE) + server_pipe->flags |= UV_HANDLE_READABLE; + + *child_pipe_ptr = child_pipe; + return 0; + + error: + if (server_pipe->handle != INVALID_HANDLE_VALUE) { + uv_pipe_cleanup(loop, server_pipe); + } + + if (child_pipe != INVALID_HANDLE_VALUE) { + CloseHandle(child_pipe); + } + + return err; +} + + +static int uv__duplicate_handle(uv_loop_t* loop, HANDLE handle, HANDLE* dup) { + HANDLE current_process; + + + /* _get_osfhandle will sometimes return -2 in case of an error. This seems to + * happen when fd <= 2 and the process' corresponding stdio handle is set to + * NULL. Unfortunately DuplicateHandle will happily duplicate (HANDLE) -2, so + * this situation goes unnoticed until someone tries to use the duplicate. + * Therefore we filter out known-invalid handles here. */ + if (handle == INVALID_HANDLE_VALUE || + handle == NULL || + handle == (HANDLE) -2) { + *dup = INVALID_HANDLE_VALUE; + return ERROR_INVALID_HANDLE; + } + + current_process = GetCurrentProcess(); + + if (!DuplicateHandle(current_process, + handle, + current_process, + dup, + 0, + TRUE, + DUPLICATE_SAME_ACCESS)) { + *dup = INVALID_HANDLE_VALUE; + return GetLastError(); + } + + return 0; +} + + +static int uv__duplicate_fd(uv_loop_t* loop, int fd, HANDLE* dup) { + HANDLE handle; + + if (fd == -1) { + *dup = INVALID_HANDLE_VALUE; + return ERROR_INVALID_HANDLE; + } + + handle = uv__get_osfhandle(fd); + return uv__duplicate_handle(loop, handle, dup); +} + + +int uv__create_nul_handle(HANDLE* handle_ptr, + DWORD access) { + HANDLE handle; + SECURITY_ATTRIBUTES sa; + + sa.nLength = sizeof sa; + sa.lpSecurityDescriptor = NULL; + sa.bInheritHandle = TRUE; + + handle = CreateFileW(L"NUL", + access, + FILE_SHARE_READ | FILE_SHARE_WRITE, + &sa, + OPEN_EXISTING, + 0, + NULL); + if (handle == INVALID_HANDLE_VALUE) { + return GetLastError(); + } + + *handle_ptr = handle; + return 0; +} + + +int uv__stdio_create(uv_loop_t* loop, + const uv_process_options_t* options, + BYTE** buffer_ptr) { + BYTE* buffer; + int count, i; + int err; + + count = options->stdio_count; + + if (count < 0 || count > 255) { + /* Only support FDs 0-255 */ + return ERROR_NOT_SUPPORTED; + } else if (count < 3) { + /* There should always be at least 3 stdio handles. */ + count = 3; + } + + /* Allocate the child stdio buffer */ + buffer = (BYTE*) uv__malloc(CHILD_STDIO_SIZE(count)); + if (buffer == NULL) { + return ERROR_OUTOFMEMORY; + } + + /* Prepopulate the buffer with INVALID_HANDLE_VALUE handles so we can clean + * up on failure. */ + CHILD_STDIO_COUNT(buffer) = count; + for (i = 0; i < count; i++) { + CHILD_STDIO_CRT_FLAGS(buffer, i) = 0; + CHILD_STDIO_HANDLE(buffer, i) = INVALID_HANDLE_VALUE; + } + + for (i = 0; i < count; i++) { + uv_stdio_container_t fdopt; + if (i < options->stdio_count) { + fdopt = options->stdio[i]; + } else { + fdopt.flags = UV_IGNORE; + } + + switch (fdopt.flags & (UV_IGNORE | UV_CREATE_PIPE | UV_INHERIT_FD | + UV_INHERIT_STREAM)) { + case UV_IGNORE: + /* Starting a process with no stdin/stout/stderr can confuse it. So no + * matter what the user specified, we make sure the first three FDs are + * always open in their typical modes, e. g. stdin be readable and + * stdout/err should be writable. For FDs > 2, don't do anything - all + * handles in the stdio buffer are initialized with. + * INVALID_HANDLE_VALUE, which should be okay. */ + if (i <= 2) { + DWORD access = (i == 0) ? FILE_GENERIC_READ : + FILE_GENERIC_WRITE | FILE_READ_ATTRIBUTES; + + err = uv__create_nul_handle(&CHILD_STDIO_HANDLE(buffer, i), + access); + if (err) + goto error; + + CHILD_STDIO_CRT_FLAGS(buffer, i) = FOPEN | FDEV; + } + break; + + case UV_CREATE_PIPE: { + /* Create a pair of two connected pipe ends; one end is turned into an + * uv_pipe_t for use by the parent. The other one is given to the + * child. */ + uv_pipe_t* parent_pipe = (uv_pipe_t*) fdopt.data.stream; + HANDLE child_pipe = INVALID_HANDLE_VALUE; + + /* Create a new, connected pipe pair. stdio[i]. stream should point to + * an uninitialized, but not connected pipe handle. */ + assert(fdopt.data.stream->type == UV_NAMED_PIPE); + assert(!(fdopt.data.stream->flags & UV_HANDLE_CONNECTION)); + assert(!(fdopt.data.stream->flags & UV_HANDLE_PIPESERVER)); + + err = uv__create_stdio_pipe_pair(loop, + parent_pipe, + &child_pipe, + fdopt.flags); + if (err) + goto error; + + CHILD_STDIO_HANDLE(buffer, i) = child_pipe; + CHILD_STDIO_CRT_FLAGS(buffer, i) = FOPEN | FPIPE; + break; + } + + case UV_INHERIT_FD: { + /* Inherit a raw FD. */ + HANDLE child_handle; + + /* Make an inheritable duplicate of the handle. */ + err = uv__duplicate_fd(loop, fdopt.data.fd, &child_handle); + if (err) { + /* If fdopt. data. fd is not valid and fd <= 2, then ignore the + * error. */ + if (fdopt.data.fd <= 2 && err == ERROR_INVALID_HANDLE) { + CHILD_STDIO_CRT_FLAGS(buffer, i) = 0; + CHILD_STDIO_HANDLE(buffer, i) = INVALID_HANDLE_VALUE; + break; + } + goto error; + } + + /* Figure out what the type is. */ + switch (GetFileType(child_handle)) { + case FILE_TYPE_DISK: + CHILD_STDIO_CRT_FLAGS(buffer, i) = FOPEN; + break; + + case FILE_TYPE_PIPE: + CHILD_STDIO_CRT_FLAGS(buffer, i) = FOPEN | FPIPE; + break; + + case FILE_TYPE_CHAR: + case FILE_TYPE_REMOTE: + CHILD_STDIO_CRT_FLAGS(buffer, i) = FOPEN | FDEV; + break; + + case FILE_TYPE_UNKNOWN: + if (GetLastError() != 0) { + err = GetLastError(); + CloseHandle(child_handle); + goto error; + } + CHILD_STDIO_CRT_FLAGS(buffer, i) = FOPEN | FDEV; + break; + + default: + assert(0); + return -1; + } + + CHILD_STDIO_HANDLE(buffer, i) = child_handle; + break; + } + + case UV_INHERIT_STREAM: { + /* Use an existing stream as the stdio handle for the child. */ + HANDLE stream_handle, child_handle; + unsigned char crt_flags; + uv_stream_t* stream = fdopt.data.stream; + + /* Leech the handle out of the stream. */ + if (stream->type == UV_TTY) { + stream_handle = ((uv_tty_t*) stream)->handle; + crt_flags = FOPEN | FDEV; + } else if (stream->type == UV_NAMED_PIPE && + stream->flags & UV_HANDLE_CONNECTION) { + stream_handle = ((uv_pipe_t*) stream)->handle; + crt_flags = FOPEN | FPIPE; + } else { + stream_handle = INVALID_HANDLE_VALUE; + crt_flags = 0; + } + + if (stream_handle == NULL || + stream_handle == INVALID_HANDLE_VALUE) { + /* The handle is already closed, or not yet created, or the stream + * type is not supported. */ + err = ERROR_NOT_SUPPORTED; + goto error; + } + + /* Make an inheritable copy of the handle. */ + err = uv__duplicate_handle(loop, stream_handle, &child_handle); + if (err) + goto error; + + CHILD_STDIO_HANDLE(buffer, i) = child_handle; + CHILD_STDIO_CRT_FLAGS(buffer, i) = crt_flags; + break; + } + + default: + assert(0); + return -1; + } + } + + *buffer_ptr = buffer; + return 0; + + error: + uv__stdio_destroy(buffer); + return err; +} + + +void uv__stdio_destroy(BYTE* buffer) { + int i, count; + + count = CHILD_STDIO_COUNT(buffer); + for (i = 0; i < count; i++) { + HANDLE handle = CHILD_STDIO_HANDLE(buffer, i); + if (handle != INVALID_HANDLE_VALUE) { + CloseHandle(handle); + } + } + + uv__free(buffer); +} + + +void uv__stdio_noinherit(BYTE* buffer) { + int i, count; + + count = CHILD_STDIO_COUNT(buffer); + for (i = 0; i < count; i++) { + HANDLE handle = CHILD_STDIO_HANDLE(buffer, i); + if (handle != INVALID_HANDLE_VALUE) { + SetHandleInformation(handle, HANDLE_FLAG_INHERIT, 0); + } + } +} + + +int uv__stdio_verify(BYTE* buffer, WORD size) { + unsigned int count; + + /* Check the buffer pointer. */ + if (buffer == NULL) + return 0; + + /* Verify that the buffer is at least big enough to hold the count. */ + if (size < CHILD_STDIO_SIZE(0)) + return 0; + + /* Verify if the count is within range. */ + count = CHILD_STDIO_COUNT(buffer); + if (count > 256) + return 0; + + /* Verify that the buffer size is big enough to hold info for N FDs. */ + if (size < CHILD_STDIO_SIZE(count)) + return 0; + + return 1; +} + + +WORD uv__stdio_size(BYTE* buffer) { + return (WORD) CHILD_STDIO_SIZE(CHILD_STDIO_COUNT((buffer))); +} + + +HANDLE uv__stdio_handle(BYTE* buffer, int fd) { + return CHILD_STDIO_HANDLE(buffer, fd); +} diff --git a/external/libuv/src/win/process.c b/external/libuv/src/win/process.c new file mode 100644 index 000000000..dae3281b3 --- /dev/null +++ b/external/libuv/src/win/process.c @@ -0,0 +1,1281 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#include +#include +#include +#include +#include +#include +#include +#include /* alloca */ + +#include "uv.h" +#include "internal.h" +#include "handle-inl.h" +#include "req-inl.h" + + +#define SIGKILL 9 + + +typedef struct env_var { + const WCHAR* const wide; + const WCHAR* const wide_eq; + const size_t len; /* including null or '=' */ +} env_var_t; + +#define E_V(str) { L##str, L##str L"=", sizeof(str) } + +static const env_var_t required_vars[] = { /* keep me sorted */ + E_V("HOMEDRIVE"), + E_V("HOMEPATH"), + E_V("LOGONSERVER"), + E_V("PATH"), + E_V("SYSTEMDRIVE"), + E_V("SYSTEMROOT"), + E_V("TEMP"), + E_V("USERDOMAIN"), + E_V("USERNAME"), + E_V("USERPROFILE"), + E_V("WINDIR"), +}; + + +static HANDLE uv_global_job_handle_; +static uv_once_t uv_global_job_handle_init_guard_ = UV_ONCE_INIT; + + +static void uv__init_global_job_handle(void) { + /* Create a job object and set it up to kill all contained processes when + * it's closed. Since this handle is made non-inheritable and we're not + * giving it to anyone, we're the only process holding a reference to it. + * That means that if this process exits it is closed and all the processes + * it contains are killed. All processes created with uv_spawn that are not + * spawned with the UV_PROCESS_DETACHED flag are assigned to this job. + * + * We're setting the JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK flag so only the + * processes that we explicitly add are affected, and *their* subprocesses + * are not. This ensures that our child processes are not limited in their + * ability to use job control on Windows versions that don't deal with + * nested jobs (prior to Windows 8 / Server 2012). It also lets our child + * processes created detached processes without explicitly breaking away + * from job control (which uv_spawn doesn't, either). + */ + SECURITY_ATTRIBUTES attr; + JOBOBJECT_EXTENDED_LIMIT_INFORMATION info; + + memset(&attr, 0, sizeof attr); + attr.bInheritHandle = FALSE; + + memset(&info, 0, sizeof info); + info.BasicLimitInformation.LimitFlags = + JOB_OBJECT_LIMIT_BREAKAWAY_OK | + JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK | + JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION | + JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE; + + uv_global_job_handle_ = CreateJobObjectW(&attr, NULL); + if (uv_global_job_handle_ == NULL) + uv_fatal_error(GetLastError(), "CreateJobObjectW"); + + if (!SetInformationJobObject(uv_global_job_handle_, + JobObjectExtendedLimitInformation, + &info, + sizeof info)) + uv_fatal_error(GetLastError(), "SetInformationJobObject"); +} + + +static int uv_utf8_to_utf16_alloc(const char* s, WCHAR** ws_ptr) { + int ws_len, r; + WCHAR* ws; + + ws_len = MultiByteToWideChar(CP_UTF8, + 0, + s, + -1, + NULL, + 0); + if (ws_len <= 0) { + return GetLastError(); + } + + ws = (WCHAR*) uv__malloc(ws_len * sizeof(WCHAR)); + if (ws == NULL) { + return ERROR_OUTOFMEMORY; + } + + r = MultiByteToWideChar(CP_UTF8, + 0, + s, + -1, + ws, + ws_len); + assert(r == ws_len); + + *ws_ptr = ws; + return 0; +} + + +static void uv_process_init(uv_loop_t* loop, uv_process_t* handle) { + uv__handle_init(loop, (uv_handle_t*) handle, UV_PROCESS); + handle->exit_cb = NULL; + handle->pid = 0; + handle->exit_signal = 0; + handle->wait_handle = INVALID_HANDLE_VALUE; + handle->process_handle = INVALID_HANDLE_VALUE; + handle->child_stdio_buffer = NULL; + handle->exit_cb_pending = 0; + + UV_REQ_INIT(&handle->exit_req, UV_PROCESS_EXIT); + handle->exit_req.data = handle; +} + + +/* + * Path search functions + */ + +/* + * Helper function for search_path + */ +static WCHAR* search_path_join_test(const WCHAR* dir, + size_t dir_len, + const WCHAR* name, + size_t name_len, + const WCHAR* ext, + size_t ext_len, + const WCHAR* cwd, + size_t cwd_len) { + WCHAR *result, *result_pos; + DWORD attrs; + if (dir_len > 2 && dir[0] == L'\\' && dir[1] == L'\\') { + /* It's a UNC path so ignore cwd */ + cwd_len = 0; + } else if (dir_len >= 1 && (dir[0] == L'/' || dir[0] == L'\\')) { + /* It's a full path without drive letter, use cwd's drive letter only */ + cwd_len = 2; + } else if (dir_len >= 2 && dir[1] == L':' && + (dir_len < 3 || (dir[2] != L'/' && dir[2] != L'\\'))) { + /* It's a relative path with drive letter (ext.g. D:../some/file) + * Replace drive letter in dir by full cwd if it points to the same drive, + * otherwise use the dir only. + */ + if (cwd_len < 2 || _wcsnicmp(cwd, dir, 2) != 0) { + cwd_len = 0; + } else { + dir += 2; + dir_len -= 2; + } + } else if (dir_len > 2 && dir[1] == L':') { + /* It's an absolute path with drive letter + * Don't use the cwd at all + */ + cwd_len = 0; + } + + /* Allocate buffer for output */ + result = result_pos = (WCHAR*)uv__malloc(sizeof(WCHAR) * + (cwd_len + 1 + dir_len + 1 + name_len + 1 + ext_len + 1)); + + /* Copy cwd */ + wcsncpy(result_pos, cwd, cwd_len); + result_pos += cwd_len; + + /* Add a path separator if cwd didn't end with one */ + if (cwd_len && wcsrchr(L"\\/:", result_pos[-1]) == NULL) { + result_pos[0] = L'\\'; + result_pos++; + } + + /* Copy dir */ + wcsncpy(result_pos, dir, dir_len); + result_pos += dir_len; + + /* Add a separator if the dir didn't end with one */ + if (dir_len && wcsrchr(L"\\/:", result_pos[-1]) == NULL) { + result_pos[0] = L'\\'; + result_pos++; + } + + /* Copy filename */ + wcsncpy(result_pos, name, name_len); + result_pos += name_len; + + if (ext_len) { + /* Add a dot if the filename didn't end with one */ + if (name_len && result_pos[-1] != '.') { + result_pos[0] = L'.'; + result_pos++; + } + + /* Copy extension */ + wcsncpy(result_pos, ext, ext_len); + result_pos += ext_len; + } + + /* Null terminator */ + result_pos[0] = L'\0'; + + attrs = GetFileAttributesW(result); + + if (attrs != INVALID_FILE_ATTRIBUTES && + !(attrs & FILE_ATTRIBUTE_DIRECTORY)) { + return result; + } + + uv__free(result); + return NULL; +} + + +/* + * Helper function for search_path + */ +static WCHAR* path_search_walk_ext(const WCHAR *dir, + size_t dir_len, + const WCHAR *name, + size_t name_len, + WCHAR *cwd, + size_t cwd_len, + int name_has_ext) { + WCHAR* result; + + /* If the name itself has a nonempty extension, try this extension first */ + if (name_has_ext) { + result = search_path_join_test(dir, dir_len, + name, name_len, + L"", 0, + cwd, cwd_len); + if (result != NULL) { + return result; + } + } + + /* Try .com extension */ + result = search_path_join_test(dir, dir_len, + name, name_len, + L"com", 3, + cwd, cwd_len); + if (result != NULL) { + return result; + } + + /* Try .exe extension */ + result = search_path_join_test(dir, dir_len, + name, name_len, + L"exe", 3, + cwd, cwd_len); + if (result != NULL) { + return result; + } + + return NULL; +} + + +/* + * search_path searches the system path for an executable filename - + * the windows API doesn't provide this as a standalone function nor as an + * option to CreateProcess. + * + * It tries to return an absolute filename. + * + * Furthermore, it tries to follow the semantics that cmd.exe, with this + * exception that PATHEXT environment variable isn't used. Since CreateProcess + * can start only .com and .exe files, only those extensions are tried. This + * behavior equals that of msvcrt's spawn functions. + * + * - Do not search the path if the filename already contains a path (either + * relative or absolute). + * + * - If there's really only a filename, check the current directory for file, + * then search all path directories. + * + * - If filename specified has *any* extension, search for the file with the + * specified extension first. + * + * - If the literal filename is not found in a directory, try *appending* + * (not replacing) .com first and then .exe. + * + * - The path variable may contain relative paths; relative paths are relative + * to the cwd. + * + * - Directories in path may or may not end with a trailing backslash. + * + * - CMD does not trim leading/trailing whitespace from path/pathex entries + * nor from the environment variables as a whole. + * + * - When cmd.exe cannot read a directory, it will just skip it and go on + * searching. However, unlike posix-y systems, it will happily try to run a + * file that is not readable/executable; if the spawn fails it will not + * continue searching. + * + * UNC path support: we are dealing with UNC paths in both the path and the + * filename. This is a deviation from what cmd.exe does (it does not let you + * start a program by specifying an UNC path on the command line) but this is + * really a pointless restriction. + * + */ +static WCHAR* search_path(const WCHAR *file, + WCHAR *cwd, + const WCHAR *path) { + int file_has_dir; + WCHAR* result = NULL; + WCHAR *file_name_start; + WCHAR *dot; + const WCHAR *dir_start, *dir_end, *dir_path; + size_t dir_len; + int name_has_ext; + + size_t file_len = wcslen(file); + size_t cwd_len = wcslen(cwd); + + /* If the caller supplies an empty filename, + * we're not gonna return c:\windows\.exe -- GFY! + */ + if (file_len == 0 + || (file_len == 1 && file[0] == L'.')) { + return NULL; + } + + /* Find the start of the filename so we can split the directory from the + * name. */ + for (file_name_start = (WCHAR*)file + file_len; + file_name_start > file + && file_name_start[-1] != L'\\' + && file_name_start[-1] != L'/' + && file_name_start[-1] != L':'; + file_name_start--); + + file_has_dir = file_name_start != file; + + /* Check if the filename includes an extension */ + dot = wcschr(file_name_start, L'.'); + name_has_ext = (dot != NULL && dot[1] != L'\0'); + + if (file_has_dir) { + /* The file has a path inside, don't use path */ + result = path_search_walk_ext( + file, file_name_start - file, + file_name_start, file_len - (file_name_start - file), + cwd, cwd_len, + name_has_ext); + + } else { + dir_end = path; + + /* The file is really only a name; look in cwd first, then scan path */ + result = path_search_walk_ext(L"", 0, + file, file_len, + cwd, cwd_len, + name_has_ext); + + while (result == NULL) { + if (*dir_end == L'\0') { + break; + } + + /* Skip the separator that dir_end now points to */ + if (dir_end != path || *path == L';') { + dir_end++; + } + + /* Next slice starts just after where the previous one ended */ + dir_start = dir_end; + + /* If path is quoted, find quote end */ + if (*dir_start == L'"' || *dir_start == L'\'') { + dir_end = wcschr(dir_start + 1, *dir_start); + if (dir_end == NULL) { + dir_end = wcschr(dir_start, L'\0'); + } + } + /* Slice until the next ; or \0 is found */ + dir_end = wcschr(dir_end, L';'); + if (dir_end == NULL) { + dir_end = wcschr(dir_start, L'\0'); + } + + /* If the slice is zero-length, don't bother */ + if (dir_end - dir_start == 0) { + continue; + } + + dir_path = dir_start; + dir_len = dir_end - dir_start; + + /* Adjust if the path is quoted. */ + if (dir_path[0] == '"' || dir_path[0] == '\'') { + ++dir_path; + --dir_len; + } + + if (dir_path[dir_len - 1] == '"' || dir_path[dir_len - 1] == '\'') { + --dir_len; + } + + result = path_search_walk_ext(dir_path, dir_len, + file, file_len, + cwd, cwd_len, + name_has_ext); + } + } + + return result; +} + + +/* + * Quotes command line arguments + * Returns a pointer to the end (next char to be written) of the buffer + */ +WCHAR* quote_cmd_arg(const WCHAR *source, WCHAR *target) { + size_t len = wcslen(source); + size_t i; + int quote_hit; + WCHAR* start; + + if (len == 0) { + /* Need double quotation for empty argument */ + *(target++) = L'"'; + *(target++) = L'"'; + return target; + } + + if (NULL == wcspbrk(source, L" \t\"")) { + /* No quotation needed */ + wcsncpy(target, source, len); + target += len; + return target; + } + + if (NULL == wcspbrk(source, L"\"\\")) { + /* + * No embedded double quotes or backlashes, so I can just wrap + * quote marks around the whole thing. + */ + *(target++) = L'"'; + wcsncpy(target, source, len); + target += len; + *(target++) = L'"'; + return target; + } + + /* + * Expected input/output: + * input : hello"world + * output: "hello\"world" + * input : hello""world + * output: "hello\"\"world" + * input : hello\world + * output: hello\world + * input : hello\\world + * output: hello\\world + * input : hello\"world + * output: "hello\\\"world" + * input : hello\\"world + * output: "hello\\\\\"world" + * input : hello world\ + * output: "hello world\\" + */ + + *(target++) = L'"'; + start = target; + quote_hit = 1; + + for (i = len; i > 0; --i) { + *(target++) = source[i - 1]; + + if (quote_hit && source[i - 1] == L'\\') { + *(target++) = L'\\'; + } else if(source[i - 1] == L'"') { + quote_hit = 1; + *(target++) = L'\\'; + } else { + quote_hit = 0; + } + } + target[0] = L'\0'; + wcsrev(start); + *(target++) = L'"'; + return target; +} + + +int make_program_args(char** args, int verbatim_arguments, WCHAR** dst_ptr) { + char** arg; + WCHAR* dst = NULL; + WCHAR* temp_buffer = NULL; + size_t dst_len = 0; + size_t temp_buffer_len = 0; + WCHAR* pos; + int arg_count = 0; + int err = 0; + + /* Count the required size. */ + for (arg = args; *arg; arg++) { + DWORD arg_len; + + arg_len = MultiByteToWideChar(CP_UTF8, + 0, + *arg, + -1, + NULL, + 0); + if (arg_len == 0) { + return GetLastError(); + } + + dst_len += arg_len; + + if (arg_len > temp_buffer_len) + temp_buffer_len = arg_len; + + arg_count++; + } + + /* Adjust for potential quotes. Also assume the worst-case scenario that + * every character needs escaping, so we need twice as much space. */ + dst_len = dst_len * 2 + arg_count * 2; + + /* Allocate buffer for the final command line. */ + dst = (WCHAR*) uv__malloc(dst_len * sizeof(WCHAR)); + if (dst == NULL) { + err = ERROR_OUTOFMEMORY; + goto error; + } + + /* Allocate temporary working buffer. */ + temp_buffer = (WCHAR*) uv__malloc(temp_buffer_len * sizeof(WCHAR)); + if (temp_buffer == NULL) { + err = ERROR_OUTOFMEMORY; + goto error; + } + + pos = dst; + for (arg = args; *arg; arg++) { + DWORD arg_len; + + /* Convert argument to wide char. */ + arg_len = MultiByteToWideChar(CP_UTF8, + 0, + *arg, + -1, + temp_buffer, + (int) (dst + dst_len - pos)); + if (arg_len == 0) { + err = GetLastError(); + goto error; + } + + if (verbatim_arguments) { + /* Copy verbatim. */ + wcscpy(pos, temp_buffer); + pos += arg_len - 1; + } else { + /* Quote/escape, if needed. */ + pos = quote_cmd_arg(temp_buffer, pos); + } + + *pos++ = *(arg + 1) ? L' ' : L'\0'; + } + + uv__free(temp_buffer); + + *dst_ptr = dst; + return 0; + +error: + uv__free(dst); + uv__free(temp_buffer); + return err; +} + + +int env_strncmp(const wchar_t* a, int na, const wchar_t* b) { + wchar_t* a_eq; + wchar_t* b_eq; + wchar_t* A; + wchar_t* B; + int nb; + int r; + + if (na < 0) { + a_eq = wcschr(a, L'='); + assert(a_eq); + na = (int)(long)(a_eq - a); + } else { + na--; + } + b_eq = wcschr(b, L'='); + assert(b_eq); + nb = b_eq - b; + + A = (wchar_t *)alloca((na+1) * sizeof(wchar_t)); + B = (wchar_t *)alloca((nb+1) * sizeof(wchar_t)); + + r = LCMapStringW(LOCALE_INVARIANT, LCMAP_UPPERCASE, a, na, A, na); + assert(r==na); + A[na] = L'\0'; + r = LCMapStringW(LOCALE_INVARIANT, LCMAP_UPPERCASE, b, nb, B, nb); + assert(r==nb); + B[nb] = L'\0'; + + while (1) { + wchar_t AA = *A++; + wchar_t BB = *B++; + if (AA < BB) { + return -1; + } else if (AA > BB) { + return 1; + } else if (!AA && !BB) { + return 0; + } + } +} + + +static int qsort_wcscmp(const void *a, const void *b) { + wchar_t* astr = *(wchar_t* const*)a; + wchar_t* bstr = *(wchar_t* const*)b; + return env_strncmp(astr, -1, bstr); +} + + +/* + * The way windows takes environment variables is different than what C does; + * Windows wants a contiguous block of null-terminated strings, terminated + * with an additional null. + * + * Windows has a few "essential" environment variables. winsock will fail + * to initialize if SYSTEMROOT is not defined; some APIs make reference to + * TEMP. SYSTEMDRIVE is probably also important. We therefore ensure that + * these get defined if the input environment block does not contain any + * values for them. + * + * Also add variables known to Cygwin to be required for correct + * subprocess operation in many cases: + * https://github.com/Alexpux/Cygwin/blob/b266b04fbbd3a595f02ea149e4306d3ab9b1fe3d/winsup/cygwin/environ.cc#L955 + * + */ +int make_program_env(char* env_block[], WCHAR** dst_ptr) { + WCHAR* dst; + WCHAR* ptr; + char** env; + size_t env_len = 0; + int len; + size_t i; + DWORD var_size; + size_t env_block_count = 1; /* 1 for null-terminator */ + WCHAR* dst_copy; + WCHAR** ptr_copy; + WCHAR** env_copy; + DWORD required_vars_value_len[ARRAY_SIZE(required_vars)]; + + /* first pass: determine size in UTF-16 */ + for (env = env_block; *env; env++) { + int len; + if (strchr(*env, '=')) { + len = MultiByteToWideChar(CP_UTF8, + 0, + *env, + -1, + NULL, + 0); + if (len <= 0) { + return GetLastError(); + } + env_len += len; + env_block_count++; + } + } + + /* second pass: copy to UTF-16 environment block */ + dst_copy = (WCHAR*)uv__malloc(env_len * sizeof(WCHAR)); + if (dst_copy == NULL && env_len > 0) { + return ERROR_OUTOFMEMORY; + } + env_copy = (WCHAR **)alloca(env_block_count * sizeof(WCHAR*)); + + ptr = dst_copy; + ptr_copy = env_copy; + for (env = env_block; *env; env++) { + if (strchr(*env, '=')) { + len = MultiByteToWideChar(CP_UTF8, + 0, + *env, + -1, + ptr, + (int) (env_len - (ptr - dst_copy))); + if (len <= 0) { + DWORD err = GetLastError(); + uv__free(dst_copy); + return err; + } + *ptr_copy++ = ptr; + ptr += len; + } + } + *ptr_copy = NULL; + assert(env_len == 0 || env_len == (size_t) (ptr - dst_copy)); + + /* sort our (UTF-16) copy */ + qsort(env_copy, env_block_count-1, sizeof(wchar_t*), qsort_wcscmp); + + /* third pass: check for required variables */ + for (ptr_copy = env_copy, i = 0; i < ARRAY_SIZE(required_vars); ) { + int cmp; + if (!*ptr_copy) { + cmp = -1; + } else { + cmp = env_strncmp(required_vars[i].wide_eq, + required_vars[i].len, + *ptr_copy); + } + if (cmp < 0) { + /* missing required var */ + var_size = GetEnvironmentVariableW(required_vars[i].wide, NULL, 0); + required_vars_value_len[i] = var_size; + if (var_size != 0) { + env_len += required_vars[i].len; + env_len += var_size; + } + i++; + } else { + ptr_copy++; + if (cmp == 0) + i++; + } + } + + /* final pass: copy, in sort order, and inserting required variables */ + dst = (WCHAR *)uv__malloc((1+env_len) * sizeof(WCHAR)); + if (!dst) { + uv__free(dst_copy); + return ERROR_OUTOFMEMORY; + } + + for (ptr = dst, ptr_copy = env_copy, i = 0; + *ptr_copy || i < ARRAY_SIZE(required_vars); + ptr += len) { + int cmp; + if (i >= ARRAY_SIZE(required_vars)) { + cmp = 1; + } else if (!*ptr_copy) { + cmp = -1; + } else { + cmp = env_strncmp(required_vars[i].wide_eq, + required_vars[i].len, + *ptr_copy); + } + if (cmp < 0) { + /* missing required var */ + len = required_vars_value_len[i]; + if (len) { + wcscpy(ptr, required_vars[i].wide_eq); + ptr += required_vars[i].len; + var_size = GetEnvironmentVariableW(required_vars[i].wide, + ptr, + (int) (env_len - (ptr - dst))); + if (var_size != (DWORD) (len - 1)) { /* TODO: handle race condition? */ + uv_fatal_error(GetLastError(), "GetEnvironmentVariableW"); + } + } + i++; + } else { + /* copy var from env_block */ + len = wcslen(*ptr_copy) + 1; + wmemcpy(ptr, *ptr_copy, len); + ptr_copy++; + if (cmp == 0) + i++; + } + } + + /* Terminate with an extra NULL. */ + assert(env_len == (size_t) (ptr - dst)); + *ptr = L'\0'; + + uv__free(dst_copy); + *dst_ptr = dst; + return 0; +} + +/* + * Attempt to find the value of the PATH environment variable in the child's + * preprocessed environment. + * + * If found, a pointer into `env` is returned. If not found, NULL is returned. + */ +static WCHAR* find_path(WCHAR *env) { + for (; env != NULL && *env != 0; env += wcslen(env) + 1) { + if ((env[0] == L'P' || env[0] == L'p') && + (env[1] == L'A' || env[1] == L'a') && + (env[2] == L'T' || env[2] == L't') && + (env[3] == L'H' || env[3] == L'h') && + (env[4] == L'=')) { + return &env[5]; + } + } + + return NULL; +} + +/* + * Called on Windows thread-pool thread to indicate that + * a child process has exited. + */ +static void CALLBACK exit_wait_callback(void* data, BOOLEAN didTimeout) { + uv_process_t* process = (uv_process_t*) data; + uv_loop_t* loop = process->loop; + + assert(didTimeout == FALSE); + assert(process); + assert(!process->exit_cb_pending); + + process->exit_cb_pending = 1; + + /* Post completed */ + POST_COMPLETION_FOR_REQ(loop, &process->exit_req); +} + + +/* Called on main thread after a child process has exited. */ +void uv_process_proc_exit(uv_loop_t* loop, uv_process_t* handle) { + int64_t exit_code; + DWORD status; + + assert(handle->exit_cb_pending); + handle->exit_cb_pending = 0; + + /* If we're closing, don't call the exit callback. Just schedule a close + * callback now. */ + if (handle->flags & UV_HANDLE_CLOSING) { + uv_want_endgame(loop, (uv_handle_t*) handle); + return; + } + + /* Unregister from process notification. */ + if (handle->wait_handle != INVALID_HANDLE_VALUE) { + UnregisterWait(handle->wait_handle); + handle->wait_handle = INVALID_HANDLE_VALUE; + } + + /* Set the handle to inactive: no callbacks will be made after the exit + * callback. */ + uv__handle_stop(handle); + + if (GetExitCodeProcess(handle->process_handle, &status)) { + exit_code = status; + } else { + /* Unable to obtain the exit code. This should never happen. */ + exit_code = uv_translate_sys_error(GetLastError()); + } + + /* Fire the exit callback. */ + if (handle->exit_cb) { + handle->exit_cb(handle, exit_code, handle->exit_signal); + } +} + + +void uv_process_close(uv_loop_t* loop, uv_process_t* handle) { + uv__handle_closing(handle); + + if (handle->wait_handle != INVALID_HANDLE_VALUE) { + /* This blocks until either the wait was cancelled, or the callback has + * completed. */ + BOOL r = UnregisterWaitEx(handle->wait_handle, INVALID_HANDLE_VALUE); + if (!r) { + /* This should never happen, and if it happens, we can't recover... */ + uv_fatal_error(GetLastError(), "UnregisterWaitEx"); + } + + handle->wait_handle = INVALID_HANDLE_VALUE; + } + + if (!handle->exit_cb_pending) { + uv_want_endgame(loop, (uv_handle_t*)handle); + } +} + + +void uv_process_endgame(uv_loop_t* loop, uv_process_t* handle) { + assert(!handle->exit_cb_pending); + assert(handle->flags & UV_HANDLE_CLOSING); + assert(!(handle->flags & UV_HANDLE_CLOSED)); + + /* Clean-up the process handle. */ + CloseHandle(handle->process_handle); + + uv__handle_close(handle); +} + + +int uv_spawn(uv_loop_t* loop, + uv_process_t* process, + const uv_process_options_t* options) { + int i; + int err = 0; + WCHAR* path = NULL, *alloc_path = NULL; + BOOL result; + WCHAR* application_path = NULL, *application = NULL, *arguments = NULL, + *env = NULL, *cwd = NULL; + STARTUPINFOW startup; + PROCESS_INFORMATION info; + DWORD process_flags; + + uv_process_init(loop, process); + process->exit_cb = options->exit_cb; + + if (options->flags & (UV_PROCESS_SETGID | UV_PROCESS_SETUID)) { + return UV_ENOTSUP; + } + + if (options->file == NULL || + options->args == NULL) { + return UV_EINVAL; + } + + assert(options->file != NULL); + assert(!(options->flags & ~(UV_PROCESS_DETACHED | + UV_PROCESS_SETGID | + UV_PROCESS_SETUID | + UV_PROCESS_WINDOWS_HIDE | + UV_PROCESS_WINDOWS_HIDE_CONSOLE | + UV_PROCESS_WINDOWS_HIDE_GUI | + UV_PROCESS_WINDOWS_VERBATIM_ARGUMENTS))); + + err = uv_utf8_to_utf16_alloc(options->file, &application); + if (err) + goto done; + + err = make_program_args( + options->args, + options->flags & UV_PROCESS_WINDOWS_VERBATIM_ARGUMENTS, + &arguments); + if (err) + goto done; + + if (options->env) { + err = make_program_env(options->env, &env); + if (err) + goto done; + } + + if (options->cwd) { + /* Explicit cwd */ + err = uv_utf8_to_utf16_alloc(options->cwd, &cwd); + if (err) + goto done; + + } else { + /* Inherit cwd */ + DWORD cwd_len, r; + + cwd_len = GetCurrentDirectoryW(0, NULL); + if (!cwd_len) { + err = GetLastError(); + goto done; + } + + cwd = (WCHAR*) uv__malloc(cwd_len * sizeof(WCHAR)); + if (cwd == NULL) { + err = ERROR_OUTOFMEMORY; + goto done; + } + + r = GetCurrentDirectoryW(cwd_len, cwd); + if (r == 0 || r >= cwd_len) { + err = GetLastError(); + goto done; + } + } + + /* Get PATH environment variable. */ + path = find_path(env); + if (path == NULL) { + DWORD path_len, r; + + path_len = GetEnvironmentVariableW(L"PATH", NULL, 0); + if (path_len == 0) { + err = GetLastError(); + goto done; + } + + alloc_path = (WCHAR*) uv__malloc(path_len * sizeof(WCHAR)); + if (alloc_path == NULL) { + err = ERROR_OUTOFMEMORY; + goto done; + } + path = alloc_path; + + r = GetEnvironmentVariableW(L"PATH", path, path_len); + if (r == 0 || r >= path_len) { + err = GetLastError(); + goto done; + } + } + + err = uv__stdio_create(loop, options, &process->child_stdio_buffer); + if (err) + goto done; + + application_path = search_path(application, + cwd, + path); + if (application_path == NULL) { + /* Not found. */ + err = ERROR_FILE_NOT_FOUND; + goto done; + } + + startup.cb = sizeof(startup); + startup.lpReserved = NULL; + startup.lpDesktop = NULL; + startup.lpTitle = NULL; + startup.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW; + + startup.cbReserved2 = uv__stdio_size(process->child_stdio_buffer); + startup.lpReserved2 = (BYTE*) process->child_stdio_buffer; + + startup.hStdInput = uv__stdio_handle(process->child_stdio_buffer, 0); + startup.hStdOutput = uv__stdio_handle(process->child_stdio_buffer, 1); + startup.hStdError = uv__stdio_handle(process->child_stdio_buffer, 2); + + process_flags = CREATE_UNICODE_ENVIRONMENT; + + if ((options->flags & UV_PROCESS_WINDOWS_HIDE_CONSOLE) || + (options->flags & UV_PROCESS_WINDOWS_HIDE)) { + /* Avoid creating console window if stdio is not inherited. */ + for (i = 0; i < options->stdio_count; i++) { + if (options->stdio[i].flags & UV_INHERIT_FD) + break; + if (i == options->stdio_count - 1) + process_flags |= CREATE_NO_WINDOW; + } + } + if ((options->flags & UV_PROCESS_WINDOWS_HIDE_GUI) || + (options->flags & UV_PROCESS_WINDOWS_HIDE)) { + /* Use SW_HIDE to avoid any potential process window. */ + startup.wShowWindow = SW_HIDE; + } else { + startup.wShowWindow = SW_SHOWDEFAULT; + } + + if (options->flags & UV_PROCESS_DETACHED) { + /* Note that we're not setting the CREATE_BREAKAWAY_FROM_JOB flag. That + * means that libuv might not let you create a fully daemonized process + * when run under job control. However the type of job control that libuv + * itself creates doesn't trickle down to subprocesses so they can still + * daemonize. + * + * A reason to not do this is that CREATE_BREAKAWAY_FROM_JOB makes the + * CreateProcess call fail if we're under job control that doesn't allow + * breakaway. + */ + process_flags |= DETACHED_PROCESS | CREATE_NEW_PROCESS_GROUP; + } + + if (!CreateProcessW(application_path, + arguments, + NULL, + NULL, + 1, + process_flags, + env, + cwd, + &startup, + &info)) { + /* CreateProcessW failed. */ + err = GetLastError(); + goto done; + } + + /* Spawn succeeded. Beyond this point, failure is reported asynchronously. */ + + process->process_handle = info.hProcess; + process->pid = info.dwProcessId; + + /* If the process isn't spawned as detached, assign to the global job object + * so windows will kill it when the parent process dies. */ + if (!(options->flags & UV_PROCESS_DETACHED)) { + uv_once(&uv_global_job_handle_init_guard_, uv__init_global_job_handle); + + if (!AssignProcessToJobObject(uv_global_job_handle_, info.hProcess)) { + /* AssignProcessToJobObject might fail if this process is under job + * control and the job doesn't have the + * JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK flag set, on a Windows version + * that doesn't support nested jobs. + * + * When that happens we just swallow the error and continue without + * establishing a kill-child-on-parent-exit relationship, otherwise + * there would be no way for libuv applications run under job control + * to spawn processes at all. + */ + DWORD err = GetLastError(); + if (err != ERROR_ACCESS_DENIED) + uv_fatal_error(err, "AssignProcessToJobObject"); + } + } + + /* Set IPC pid to all IPC pipes. */ + for (i = 0; i < options->stdio_count; i++) { + const uv_stdio_container_t* fdopt = &options->stdio[i]; + if (fdopt->flags & UV_CREATE_PIPE && + fdopt->data.stream->type == UV_NAMED_PIPE && + ((uv_pipe_t*) fdopt->data.stream)->ipc) { + ((uv_pipe_t*) fdopt->data.stream)->pipe.conn.ipc_remote_pid = + info.dwProcessId; + } + } + + /* Setup notifications for when the child process exits. */ + result = RegisterWaitForSingleObject(&process->wait_handle, + process->process_handle, exit_wait_callback, (void*)process, INFINITE, + WT_EXECUTEINWAITTHREAD | WT_EXECUTEONLYONCE); + if (!result) { + uv_fatal_error(GetLastError(), "RegisterWaitForSingleObject"); + } + + CloseHandle(info.hThread); + + assert(!err); + + /* Make the handle active. It will remain active until the exit callback is + * made or the handle is closed, whichever happens first. */ + uv__handle_start(process); + + /* Cleanup, whether we succeeded or failed. */ + done: + uv__free(application); + uv__free(application_path); + uv__free(arguments); + uv__free(cwd); + uv__free(env); + uv__free(alloc_path); + + if (process->child_stdio_buffer != NULL) { + /* Clean up child stdio handles. */ + uv__stdio_destroy(process->child_stdio_buffer); + process->child_stdio_buffer = NULL; + } + + return uv_translate_sys_error(err); +} + + +static int uv__kill(HANDLE process_handle, int signum) { + if (signum < 0 || signum >= NSIG) { + return UV_EINVAL; + } + + switch (signum) { + case SIGTERM: + case SIGKILL: + case SIGINT: { + /* Unconditionally terminate the process. On Windows, killed processes + * normally return 1. */ + DWORD status; + int err; + + if (TerminateProcess(process_handle, 1)) + return 0; + + /* If the process already exited before TerminateProcess was called,. + * TerminateProcess will fail with ERROR_ACCESS_DENIED. */ + err = GetLastError(); + if (err == ERROR_ACCESS_DENIED && + GetExitCodeProcess(process_handle, &status) && + status != STILL_ACTIVE) { + return UV_ESRCH; + } + + return uv_translate_sys_error(err); + } + + case 0: { + /* Health check: is the process still alive? */ + DWORD status; + + if (!GetExitCodeProcess(process_handle, &status)) + return uv_translate_sys_error(GetLastError()); + + if (status != STILL_ACTIVE) + return UV_ESRCH; + + return 0; + } + + default: + /* Unsupported signal. */ + return UV_ENOSYS; + } +} + + +int uv_process_kill(uv_process_t* process, int signum) { + int err; + + if (process->process_handle == INVALID_HANDLE_VALUE) { + return UV_EINVAL; + } + + err = uv__kill(process->process_handle, signum); + if (err) { + return err; /* err is already translated. */ + } + + process->exit_signal = signum; + + return 0; +} + + +int uv_kill(int pid, int signum) { + int err; + HANDLE process_handle; + + if (pid == 0) { + process_handle = GetCurrentProcess(); + } else { + process_handle = OpenProcess(PROCESS_TERMINATE | PROCESS_QUERY_INFORMATION, + FALSE, + pid); + } + + if (process_handle == NULL) { + err = GetLastError(); + if (err == ERROR_INVALID_PARAMETER) { + return UV_ESRCH; + } else { + return uv_translate_sys_error(err); + } + } + + err = uv__kill(process_handle, signum); + CloseHandle(process_handle); + + return err; /* err is already translated. */ +} diff --git a/external/libuv/src/win/req-inl.h b/external/libuv/src/win/req-inl.h new file mode 100644 index 000000000..f2513b7d3 --- /dev/null +++ b/external/libuv/src/win/req-inl.h @@ -0,0 +1,221 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#ifndef UV_WIN_REQ_INL_H_ +#define UV_WIN_REQ_INL_H_ + +#include + +#include "uv.h" +#include "internal.h" + + +#define SET_REQ_STATUS(req, status) \ + (req)->u.io.overlapped.Internal = (ULONG_PTR) (status) + +#define SET_REQ_ERROR(req, error) \ + SET_REQ_STATUS((req), NTSTATUS_FROM_WIN32((error))) + +/* Note: used open-coded in UV_REQ_INIT() because of a circular dependency + * between src/uv-common.h and src/win/internal.h. + */ +#define SET_REQ_SUCCESS(req) \ + SET_REQ_STATUS((req), STATUS_SUCCESS) + +#define GET_REQ_STATUS(req) \ + ((NTSTATUS) (req)->u.io.overlapped.Internal) + +#define REQ_SUCCESS(req) \ + (NT_SUCCESS(GET_REQ_STATUS((req)))) + +#define GET_REQ_ERROR(req) \ + (pRtlNtStatusToDosError(GET_REQ_STATUS((req)))) + +#define GET_REQ_SOCK_ERROR(req) \ + (uv_ntstatus_to_winsock_error(GET_REQ_STATUS((req)))) + + +#define REGISTER_HANDLE_REQ(loop, handle, req) \ + do { \ + INCREASE_ACTIVE_COUNT((loop), (handle)); \ + uv__req_register((loop), (req)); \ + } while (0) + +#define UNREGISTER_HANDLE_REQ(loop, handle, req) \ + do { \ + DECREASE_ACTIVE_COUNT((loop), (handle)); \ + uv__req_unregister((loop), (req)); \ + } while (0) + + +#define UV_SUCCEEDED_WITHOUT_IOCP(result) \ + ((result) && (handle->flags & UV_HANDLE_SYNC_BYPASS_IOCP)) + +#define UV_SUCCEEDED_WITH_IOCP(result) \ + ((result) || (GetLastError() == ERROR_IO_PENDING)) + + +#define POST_COMPLETION_FOR_REQ(loop, req) \ + if (!PostQueuedCompletionStatus((loop)->iocp, \ + 0, \ + 0, \ + &((req)->u.io.overlapped))) { \ + uv_fatal_error(GetLastError(), "PostQueuedCompletionStatus"); \ + } + + +INLINE static uv_req_t* uv_overlapped_to_req(OVERLAPPED* overlapped) { + return CONTAINING_RECORD(overlapped, uv_req_t, u.io.overlapped); +} + + +INLINE static void uv_insert_pending_req(uv_loop_t* loop, uv_req_t* req) { + req->next_req = NULL; + if (loop->pending_reqs_tail) { +#ifdef _DEBUG + /* Ensure the request is not already in the queue, or the queue + * will get corrupted. + */ + uv_req_t* current = loop->pending_reqs_tail; + do { + assert(req != current); + current = current->next_req; + } while(current != loop->pending_reqs_tail); +#endif + + req->next_req = loop->pending_reqs_tail->next_req; + loop->pending_reqs_tail->next_req = req; + loop->pending_reqs_tail = req; + } else { + req->next_req = req; + loop->pending_reqs_tail = req; + } +} + + +#define DELEGATE_STREAM_REQ(loop, req, method, handle_at) \ + do { \ + switch (((uv_handle_t*) (req)->handle_at)->type) { \ + case UV_TCP: \ + uv_process_tcp_##method##_req(loop, \ + (uv_tcp_t*) ((req)->handle_at), \ + req); \ + break; \ + \ + case UV_NAMED_PIPE: \ + uv_process_pipe_##method##_req(loop, \ + (uv_pipe_t*) ((req)->handle_at), \ + req); \ + break; \ + \ + case UV_TTY: \ + uv_process_tty_##method##_req(loop, \ + (uv_tty_t*) ((req)->handle_at), \ + req); \ + break; \ + \ + default: \ + assert(0); \ + } \ + } while (0) + + +INLINE static int uv_process_reqs(uv_loop_t* loop) { + uv_req_t* req; + uv_req_t* first; + uv_req_t* next; + + if (loop->pending_reqs_tail == NULL) + return 0; + + first = loop->pending_reqs_tail->next_req; + next = first; + loop->pending_reqs_tail = NULL; + + while (next != NULL) { + req = next; + next = req->next_req != first ? req->next_req : NULL; + + switch (req->type) { + case UV_READ: + DELEGATE_STREAM_REQ(loop, req, read, data); + break; + + case UV_WRITE: + DELEGATE_STREAM_REQ(loop, (uv_write_t*) req, write, handle); + break; + + case UV_ACCEPT: + DELEGATE_STREAM_REQ(loop, req, accept, data); + break; + + case UV_CONNECT: + DELEGATE_STREAM_REQ(loop, (uv_connect_t*) req, connect, handle); + break; + + case UV_SHUTDOWN: + /* Tcp shutdown requests don't come here. */ + assert(((uv_shutdown_t*) req)->handle->type == UV_NAMED_PIPE); + uv_process_pipe_shutdown_req( + loop, + (uv_pipe_t*) ((uv_shutdown_t*) req)->handle, + (uv_shutdown_t*) req); + break; + + case UV_UDP_RECV: + uv_process_udp_recv_req(loop, (uv_udp_t*) req->data, req); + break; + + case UV_UDP_SEND: + uv_process_udp_send_req(loop, + ((uv_udp_send_t*) req)->handle, + (uv_udp_send_t*) req); + break; + + case UV_WAKEUP: + uv_process_async_wakeup_req(loop, (uv_async_t*) req->data, req); + break; + + case UV_SIGNAL_REQ: + uv_process_signal_req(loop, (uv_signal_t*) req->data, req); + break; + + case UV_POLL_REQ: + uv_process_poll_req(loop, (uv_poll_t*) req->data, req); + break; + + case UV_PROCESS_EXIT: + uv_process_proc_exit(loop, (uv_process_t*) req->data); + break; + + case UV_FS_EVENT_REQ: + uv_process_fs_event_req(loop, req, (uv_fs_event_t*) req->data); + break; + + default: + assert(0); + } + } + + return 1; +} + +#endif /* UV_WIN_REQ_INL_H_ */ diff --git a/external/libuv/src/win/signal.c b/external/libuv/src/win/signal.c new file mode 100644 index 000000000..3d9f92cfb --- /dev/null +++ b/external/libuv/src/win/signal.c @@ -0,0 +1,282 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#include +#include + +#include "uv.h" +#include "internal.h" +#include "handle-inl.h" +#include "req-inl.h" + + +RB_HEAD(uv_signal_tree_s, uv_signal_s); + +static struct uv_signal_tree_s uv__signal_tree = RB_INITIALIZER(uv__signal_tree); +static CRITICAL_SECTION uv__signal_lock; + +static BOOL WINAPI uv__signal_control_handler(DWORD type); + +int uv__signal_start(uv_signal_t* handle, + uv_signal_cb signal_cb, + int signum, + int oneshot); + +void uv_signals_init(void) { + InitializeCriticalSection(&uv__signal_lock); + if (!SetConsoleCtrlHandler(uv__signal_control_handler, TRUE)) + abort(); +} + + +void uv__signal_cleanup(void) { + /* TODO(bnoordhuis) Undo effects of uv_signal_init()? */ +} + + +static int uv__signal_compare(uv_signal_t* w1, uv_signal_t* w2) { + /* Compare signums first so all watchers with the same signnum end up + * adjacent. */ + if (w1->signum < w2->signum) return -1; + if (w1->signum > w2->signum) return 1; + + /* Sort by loop pointer, so we can easily look up the first item after + * { .signum = x, .loop = NULL }. */ + if ((uintptr_t) w1->loop < (uintptr_t) w2->loop) return -1; + if ((uintptr_t) w1->loop > (uintptr_t) w2->loop) return 1; + + if ((uintptr_t) w1 < (uintptr_t) w2) return -1; + if ((uintptr_t) w1 > (uintptr_t) w2) return 1; + + return 0; +} + + +RB_GENERATE_STATIC(uv_signal_tree_s, uv_signal_s, tree_entry, uv__signal_compare) + + +/* + * Dispatches signal {signum} to all active uv_signal_t watchers in all loops. + * Returns 1 if the signal was dispatched to any watcher, or 0 if there were + * no active signal watchers observing this signal. + */ +int uv__signal_dispatch(int signum) { + uv_signal_t lookup; + uv_signal_t* handle; + int dispatched; + + dispatched = 0; + + EnterCriticalSection(&uv__signal_lock); + + lookup.signum = signum; + lookup.loop = NULL; + + for (handle = RB_NFIND(uv_signal_tree_s, &uv__signal_tree, &lookup); + handle != NULL && handle->signum == signum; + handle = RB_NEXT(uv_signal_tree_s, &uv__signal_tree, handle)) { + unsigned long previous = InterlockedExchange( + (volatile LONG*) &handle->pending_signum, signum); + + if (handle->flags & UV_SIGNAL_ONE_SHOT_DISPATCHED) + continue; + + if (!previous) { + POST_COMPLETION_FOR_REQ(handle->loop, &handle->signal_req); + } + + dispatched = 1; + if (handle->flags & UV_SIGNAL_ONE_SHOT) + handle->flags |= UV_SIGNAL_ONE_SHOT_DISPATCHED; + } + + LeaveCriticalSection(&uv__signal_lock); + + return dispatched; +} + + +static BOOL WINAPI uv__signal_control_handler(DWORD type) { + switch (type) { + case CTRL_C_EVENT: + return uv__signal_dispatch(SIGINT); + + case CTRL_BREAK_EVENT: + return uv__signal_dispatch(SIGBREAK); + + case CTRL_CLOSE_EVENT: + if (uv__signal_dispatch(SIGHUP)) { + /* Windows will terminate the process after the control handler + * returns. After that it will just terminate our process. Therefore + * block the signal handler so the main loop has some time to pick up + * the signal and do something for a few seconds. */ + Sleep(INFINITE); + return TRUE; + } + return FALSE; + + case CTRL_LOGOFF_EVENT: + case CTRL_SHUTDOWN_EVENT: + /* These signals are only sent to services. Services have their own + * notification mechanism, so there's no point in handling these. */ + + default: + /* We don't handle these. */ + return FALSE; + } +} + + +int uv_signal_init(uv_loop_t* loop, uv_signal_t* handle) { + uv__handle_init(loop, (uv_handle_t*) handle, UV_SIGNAL); + handle->pending_signum = 0; + handle->signum = 0; + handle->signal_cb = NULL; + + UV_REQ_INIT(&handle->signal_req, UV_SIGNAL_REQ); + handle->signal_req.data = handle; + + return 0; +} + + +int uv_signal_stop(uv_signal_t* handle) { + uv_signal_t* removed_handle; + + /* If the watcher wasn't started, this is a no-op. */ + if (handle->signum == 0) + return 0; + + EnterCriticalSection(&uv__signal_lock); + + removed_handle = RB_REMOVE(uv_signal_tree_s, &uv__signal_tree, handle); + assert(removed_handle == handle); + + LeaveCriticalSection(&uv__signal_lock); + + handle->signum = 0; + uv__handle_stop(handle); + + return 0; +} + + +int uv_signal_start(uv_signal_t* handle, uv_signal_cb signal_cb, int signum) { + return uv__signal_start(handle, signal_cb, signum, 0); +} + + +int uv_signal_start_oneshot(uv_signal_t* handle, + uv_signal_cb signal_cb, + int signum) { + return uv__signal_start(handle, signal_cb, signum, 1); +} + + +int uv__signal_start(uv_signal_t* handle, + uv_signal_cb signal_cb, + int signum, + int oneshot) { + /* Test for invalid signal values. */ + if (signum <= 0 || signum >= NSIG) + return UV_EINVAL; + + /* Short circuit: if the signal watcher is already watching {signum} don't go + * through the process of deregistering and registering the handler. + * Additionally, this avoids pending signals getting lost in the (small) time + * frame that handle->signum == 0. */ + if (signum == handle->signum) { + handle->signal_cb = signal_cb; + return 0; + } + + /* If the signal handler was already active, stop it first. */ + if (handle->signum != 0) { + int r = uv_signal_stop(handle); + /* uv_signal_stop is infallible. */ + assert(r == 0); + } + + EnterCriticalSection(&uv__signal_lock); + + handle->signum = signum; + if (oneshot) + handle->flags |= UV_SIGNAL_ONE_SHOT; + + RB_INSERT(uv_signal_tree_s, &uv__signal_tree, handle); + + LeaveCriticalSection(&uv__signal_lock); + + handle->signal_cb = signal_cb; + uv__handle_start(handle); + + return 0; +} + + +void uv_process_signal_req(uv_loop_t* loop, uv_signal_t* handle, + uv_req_t* req) { + long dispatched_signum; + + assert(handle->type == UV_SIGNAL); + assert(req->type == UV_SIGNAL_REQ); + + dispatched_signum = InterlockedExchange( + (volatile LONG*) &handle->pending_signum, 0); + assert(dispatched_signum != 0); + + /* Check if the pending signal equals the signum that we are watching for. + * These can get out of sync when the handler is stopped and restarted while + * the signal_req is pending. */ + if (dispatched_signum == handle->signum) + handle->signal_cb(handle, dispatched_signum); + + if (handle->flags & UV_SIGNAL_ONE_SHOT) + uv_signal_stop(handle); + + if (handle->flags & UV_HANDLE_CLOSING) { + /* When it is closing, it must be stopped at this point. */ + assert(handle->signum == 0); + uv_want_endgame(loop, (uv_handle_t*) handle); + } +} + + +void uv_signal_close(uv_loop_t* loop, uv_signal_t* handle) { + uv_signal_stop(handle); + uv__handle_closing(handle); + + if (handle->pending_signum == 0) { + uv_want_endgame(loop, (uv_handle_t*) handle); + } +} + + +void uv_signal_endgame(uv_loop_t* loop, uv_signal_t* handle) { + assert(handle->flags & UV_HANDLE_CLOSING); + assert(!(handle->flags & UV_HANDLE_CLOSED)); + + assert(handle->signum == 0); + assert(handle->pending_signum == 0); + + handle->flags |= UV_HANDLE_CLOSED; + + uv__handle_close(handle); +} diff --git a/external/libuv/src/win/snprintf.c b/external/libuv/src/win/snprintf.c new file mode 100644 index 000000000..776c0e392 --- /dev/null +++ b/external/libuv/src/win/snprintf.c @@ -0,0 +1,42 @@ +/* Copyright the libuv 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 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. + */ + +#if defined(_MSC_VER) && _MSC_VER < 1900 + +#include +#include + +/* Emulate snprintf() on MSVC<2015, _snprintf() doesn't zero-terminate the buffer + * on overflow... + */ +int snprintf(char* buf, size_t len, const char* fmt, ...) { + int n; + va_list ap; + va_start(ap, fmt); + + n = _vscprintf(fmt, ap); + vsnprintf_s(buf, len, _TRUNCATE, fmt, ap); + + va_end(ap); + return n; +} + +#endif diff --git a/external/libuv/src/win/stream-inl.h b/external/libuv/src/win/stream-inl.h new file mode 100644 index 000000000..40f5ddd51 --- /dev/null +++ b/external/libuv/src/win/stream-inl.h @@ -0,0 +1,54 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#ifndef UV_WIN_STREAM_INL_H_ +#define UV_WIN_STREAM_INL_H_ + +#include + +#include "uv.h" +#include "internal.h" +#include "handle-inl.h" +#include "req-inl.h" + + +INLINE static void uv_stream_init(uv_loop_t* loop, + uv_stream_t* handle, + uv_handle_type type) { + uv__handle_init(loop, (uv_handle_t*) handle, type); + handle->write_queue_size = 0; + handle->activecnt = 0; + handle->stream.conn.shutdown_req = NULL; + handle->stream.conn.write_reqs_pending = 0; + + UV_REQ_INIT(&handle->read_req, UV_READ); + handle->read_req.event_handle = NULL; + handle->read_req.wait_handle = INVALID_HANDLE_VALUE; + handle->read_req.data = handle; +} + + +INLINE static void uv_connection_init(uv_stream_t* handle) { + handle->flags |= UV_HANDLE_CONNECTION; +} + + +#endif /* UV_WIN_STREAM_INL_H_ */ diff --git a/external/libuv/src/win/stream.c b/external/libuv/src/win/stream.c new file mode 100644 index 000000000..46a0709a3 --- /dev/null +++ b/external/libuv/src/win/stream.c @@ -0,0 +1,243 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#include + +#include "uv.h" +#include "internal.h" +#include "handle-inl.h" +#include "req-inl.h" + + +int uv_listen(uv_stream_t* stream, int backlog, uv_connection_cb cb) { + int err; + + err = ERROR_INVALID_PARAMETER; + switch (stream->type) { + case UV_TCP: + err = uv_tcp_listen((uv_tcp_t*)stream, backlog, cb); + break; + case UV_NAMED_PIPE: + err = uv_pipe_listen((uv_pipe_t*)stream, backlog, cb); + break; + default: + assert(0); + } + + return uv_translate_sys_error(err); +} + + +int uv_accept(uv_stream_t* server, uv_stream_t* client) { + int err; + + err = ERROR_INVALID_PARAMETER; + switch (server->type) { + case UV_TCP: + err = uv_tcp_accept((uv_tcp_t*)server, (uv_tcp_t*)client); + break; + case UV_NAMED_PIPE: + err = uv_pipe_accept((uv_pipe_t*)server, client); + break; + default: + assert(0); + } + + return uv_translate_sys_error(err); +} + + +int uv_read_start(uv_stream_t* handle, uv_alloc_cb alloc_cb, + uv_read_cb read_cb) { + int err; + + if (handle->flags & UV_HANDLE_READING) { + return UV_EALREADY; + } + + if (!(handle->flags & UV_HANDLE_READABLE)) { + return UV_ENOTCONN; + } + + err = ERROR_INVALID_PARAMETER; + switch (handle->type) { + case UV_TCP: + err = uv_tcp_read_start((uv_tcp_t*)handle, alloc_cb, read_cb); + break; + case UV_NAMED_PIPE: + err = uv_pipe_read_start((uv_pipe_t*)handle, alloc_cb, read_cb); + break; + case UV_TTY: + err = uv_tty_read_start((uv_tty_t*) handle, alloc_cb, read_cb); + break; + default: + assert(0); + } + + return uv_translate_sys_error(err); +} + + +int uv_read_stop(uv_stream_t* handle) { + int err; + + if (!(handle->flags & UV_HANDLE_READING)) + return 0; + + err = 0; + if (handle->type == UV_TTY) { + err = uv_tty_read_stop((uv_tty_t*) handle); + } else if (handle->type == UV_NAMED_PIPE) { + uv__pipe_read_stop((uv_pipe_t*) handle); + } else { + handle->flags &= ~UV_HANDLE_READING; + DECREASE_ACTIVE_COUNT(handle->loop, handle); + } + + return uv_translate_sys_error(err); +} + + +int uv_write(uv_write_t* req, + uv_stream_t* handle, + const uv_buf_t bufs[], + unsigned int nbufs, + uv_write_cb cb) { + uv_loop_t* loop = handle->loop; + int err; + + if (!(handle->flags & UV_HANDLE_WRITABLE)) { + return UV_EPIPE; + } + + err = ERROR_INVALID_PARAMETER; + switch (handle->type) { + case UV_TCP: + err = uv_tcp_write(loop, req, (uv_tcp_t*) handle, bufs, nbufs, cb); + break; + case UV_NAMED_PIPE: + err = uv__pipe_write( + loop, req, (uv_pipe_t*) handle, bufs, nbufs, NULL, cb); + break; + case UV_TTY: + err = uv_tty_write(loop, req, (uv_tty_t*) handle, bufs, nbufs, cb); + break; + default: + assert(0); + } + + return uv_translate_sys_error(err); +} + + +int uv_write2(uv_write_t* req, + uv_stream_t* handle, + const uv_buf_t bufs[], + unsigned int nbufs, + uv_stream_t* send_handle, + uv_write_cb cb) { + uv_loop_t* loop = handle->loop; + int err; + + if (send_handle == NULL) { + return uv_write(req, handle, bufs, nbufs, cb); + } + + if (handle->type != UV_NAMED_PIPE || !((uv_pipe_t*) handle)->ipc) { + return UV_EINVAL; + } else if (!(handle->flags & UV_HANDLE_WRITABLE)) { + return UV_EPIPE; + } + + err = uv__pipe_write( + loop, req, (uv_pipe_t*) handle, bufs, nbufs, send_handle, cb); + return uv_translate_sys_error(err); +} + + +int uv_try_write(uv_stream_t* stream, + const uv_buf_t bufs[], + unsigned int nbufs) { + if (stream->flags & UV_HANDLE_CLOSING) + return UV_EBADF; + if (!(stream->flags & UV_HANDLE_WRITABLE)) + return UV_EPIPE; + + switch (stream->type) { + case UV_TCP: + return uv__tcp_try_write((uv_tcp_t*) stream, bufs, nbufs); + case UV_TTY: + return uv__tty_try_write((uv_tty_t*) stream, bufs, nbufs); + case UV_NAMED_PIPE: + return UV_EAGAIN; + default: + assert(0); + return UV_ENOSYS; + } +} + + +int uv_shutdown(uv_shutdown_t* req, uv_stream_t* handle, uv_shutdown_cb cb) { + uv_loop_t* loop = handle->loop; + + if (!(handle->flags & UV_HANDLE_WRITABLE) || + handle->flags & UV_HANDLE_SHUTTING || + uv__is_closing(handle)) { + return UV_ENOTCONN; + } + + UV_REQ_INIT(req, UV_SHUTDOWN); + req->handle = handle; + req->cb = cb; + + handle->flags &= ~UV_HANDLE_WRITABLE; + handle->flags |= UV_HANDLE_SHUTTING; + handle->stream.conn.shutdown_req = req; + handle->reqs_pending++; + REGISTER_HANDLE_REQ(loop, handle, req); + + uv_want_endgame(loop, (uv_handle_t*)handle); + + return 0; +} + + +int uv_is_readable(const uv_stream_t* handle) { + return !!(handle->flags & UV_HANDLE_READABLE); +} + + +int uv_is_writable(const uv_stream_t* handle) { + return !!(handle->flags & UV_HANDLE_WRITABLE); +} + + +int uv_stream_set_blocking(uv_stream_t* handle, int blocking) { + if (handle->type != UV_NAMED_PIPE) + return UV_EINVAL; + + if (blocking != 0) + handle->flags |= UV_HANDLE_BLOCKING_WRITES; + else + handle->flags &= ~UV_HANDLE_BLOCKING_WRITES; + + return 0; +} diff --git a/external/libuv/src/win/tcp.c b/external/libuv/src/win/tcp.c new file mode 100644 index 000000000..29bab51f3 --- /dev/null +++ b/external/libuv/src/win/tcp.c @@ -0,0 +1,1521 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#include +#include + +#include "uv.h" +#include "internal.h" +#include "handle-inl.h" +#include "stream-inl.h" +#include "req-inl.h" + + +/* + * Threshold of active tcp streams for which to preallocate tcp read buffers. + * (Due to node slab allocator performing poorly under this pattern, + * the optimization is temporarily disabled (threshold=0). This will be + * revisited once node allocator is improved.) + */ +const unsigned int uv_active_tcp_streams_threshold = 0; + +/* + * Number of simultaneous pending AcceptEx calls. + */ +const unsigned int uv_simultaneous_server_accepts = 32; + +/* A zero-size buffer for use by uv_tcp_read */ +static char uv_zero_[] = ""; + +static int uv__tcp_nodelay(uv_tcp_t* handle, SOCKET socket, int enable) { + if (setsockopt(socket, + IPPROTO_TCP, + TCP_NODELAY, + (const char*)&enable, + sizeof enable) == -1) { + return WSAGetLastError(); + } + return 0; +} + + +static int uv__tcp_keepalive(uv_tcp_t* handle, SOCKET socket, int enable, unsigned int delay) { + if (setsockopt(socket, + SOL_SOCKET, + SO_KEEPALIVE, + (const char*)&enable, + sizeof enable) == -1) { + return WSAGetLastError(); + } + + if (enable && setsockopt(socket, + IPPROTO_TCP, + TCP_KEEPALIVE, + (const char*)&delay, + sizeof delay) == -1) { + return WSAGetLastError(); + } + + return 0; +} + + +static int uv_tcp_set_socket(uv_loop_t* loop, + uv_tcp_t* handle, + SOCKET socket, + int family, + int imported) { + DWORD yes = 1; + int non_ifs_lsp; + int err; + + if (handle->socket != INVALID_SOCKET) + return UV_EBUSY; + + /* Set the socket to nonblocking mode */ + if (ioctlsocket(socket, FIONBIO, &yes) == SOCKET_ERROR) { + return WSAGetLastError(); + } + + /* Make the socket non-inheritable */ + if (!SetHandleInformation((HANDLE) socket, HANDLE_FLAG_INHERIT, 0)) + return GetLastError(); + + /* Associate it with the I/O completion port. Use uv_handle_t pointer as + * completion key. */ + if (CreateIoCompletionPort((HANDLE)socket, + loop->iocp, + (ULONG_PTR)socket, + 0) == NULL) { + if (imported) { + handle->flags |= UV_HANDLE_EMULATE_IOCP; + } else { + return GetLastError(); + } + } + + if (family == AF_INET6) { + non_ifs_lsp = uv_tcp_non_ifs_lsp_ipv6; + } else { + non_ifs_lsp = uv_tcp_non_ifs_lsp_ipv4; + } + + if (!(handle->flags & UV_HANDLE_EMULATE_IOCP) && !non_ifs_lsp) { + UCHAR sfcnm_flags = + FILE_SKIP_SET_EVENT_ON_HANDLE | FILE_SKIP_COMPLETION_PORT_ON_SUCCESS; + if (!SetFileCompletionNotificationModes((HANDLE) socket, sfcnm_flags)) + return GetLastError(); + handle->flags |= UV_HANDLE_SYNC_BYPASS_IOCP; + } + + if (handle->flags & UV_HANDLE_TCP_NODELAY) { + err = uv__tcp_nodelay(handle, socket, 1); + if (err) + return err; + } + + /* TODO: Use stored delay. */ + if (handle->flags & UV_HANDLE_TCP_KEEPALIVE) { + err = uv__tcp_keepalive(handle, socket, 1, 60); + if (err) + return err; + } + + handle->socket = socket; + + if (family == AF_INET6) { + handle->flags |= UV_HANDLE_IPV6; + } else { + assert(!(handle->flags & UV_HANDLE_IPV6)); + } + + return 0; +} + + +int uv_tcp_init_ex(uv_loop_t* loop, uv_tcp_t* handle, unsigned int flags) { + int domain; + + /* Use the lower 8 bits for the domain */ + domain = flags & 0xFF; + if (domain != AF_INET && domain != AF_INET6 && domain != AF_UNSPEC) + return UV_EINVAL; + + if (flags & ~0xFF) + return UV_EINVAL; + + uv_stream_init(loop, (uv_stream_t*) handle, UV_TCP); + handle->tcp.serv.accept_reqs = NULL; + handle->tcp.serv.pending_accepts = NULL; + handle->socket = INVALID_SOCKET; + handle->reqs_pending = 0; + handle->tcp.serv.func_acceptex = NULL; + handle->tcp.conn.func_connectex = NULL; + handle->tcp.serv.processed_accepts = 0; + handle->delayed_error = 0; + + /* If anything fails beyond this point we need to remove the handle from + * the handle queue, since it was added by uv__handle_init in uv_stream_init. + */ + + if (domain != AF_UNSPEC) { + SOCKET sock; + DWORD err; + + sock = socket(domain, SOCK_STREAM, 0); + if (sock == INVALID_SOCKET) { + err = WSAGetLastError(); + QUEUE_REMOVE(&handle->handle_queue); + return uv_translate_sys_error(err); + } + + err = uv_tcp_set_socket(handle->loop, handle, sock, domain, 0); + if (err) { + closesocket(sock); + QUEUE_REMOVE(&handle->handle_queue); + return uv_translate_sys_error(err); + } + + } + + return 0; +} + + +int uv_tcp_init(uv_loop_t* loop, uv_tcp_t* handle) { + return uv_tcp_init_ex(loop, handle, AF_UNSPEC); +} + + +void uv_tcp_endgame(uv_loop_t* loop, uv_tcp_t* handle) { + int err; + unsigned int i; + uv_tcp_accept_t* req; + + if (handle->flags & UV_HANDLE_CONNECTION && + handle->stream.conn.shutdown_req != NULL && + handle->stream.conn.write_reqs_pending == 0) { + + UNREGISTER_HANDLE_REQ(loop, handle, handle->stream.conn.shutdown_req); + + err = 0; + if (handle->flags & UV_HANDLE_CLOSING) { + err = ERROR_OPERATION_ABORTED; + } else if (shutdown(handle->socket, SD_SEND) == SOCKET_ERROR) { + err = WSAGetLastError(); + } + + if (handle->stream.conn.shutdown_req->cb) { + handle->stream.conn.shutdown_req->cb(handle->stream.conn.shutdown_req, + uv_translate_sys_error(err)); + } + + handle->stream.conn.shutdown_req = NULL; + DECREASE_PENDING_REQ_COUNT(handle); + return; + } + + if (handle->flags & UV_HANDLE_CLOSING && + handle->reqs_pending == 0) { + assert(!(handle->flags & UV_HANDLE_CLOSED)); + + if (!(handle->flags & UV_HANDLE_TCP_SOCKET_CLOSED)) { + closesocket(handle->socket); + handle->socket = INVALID_SOCKET; + handle->flags |= UV_HANDLE_TCP_SOCKET_CLOSED; + } + + if (!(handle->flags & UV_HANDLE_CONNECTION) && handle->tcp.serv.accept_reqs) { + if (handle->flags & UV_HANDLE_EMULATE_IOCP) { + for (i = 0; i < uv_simultaneous_server_accepts; i++) { + req = &handle->tcp.serv.accept_reqs[i]; + if (req->wait_handle != INVALID_HANDLE_VALUE) { + UnregisterWait(req->wait_handle); + req->wait_handle = INVALID_HANDLE_VALUE; + } + if (req->event_handle != NULL) { + CloseHandle(req->event_handle); + req->event_handle = NULL; + } + } + } + + uv__free(handle->tcp.serv.accept_reqs); + handle->tcp.serv.accept_reqs = NULL; + } + + if (handle->flags & UV_HANDLE_CONNECTION && + handle->flags & UV_HANDLE_EMULATE_IOCP) { + if (handle->read_req.wait_handle != INVALID_HANDLE_VALUE) { + UnregisterWait(handle->read_req.wait_handle); + handle->read_req.wait_handle = INVALID_HANDLE_VALUE; + } + if (handle->read_req.event_handle != NULL) { + CloseHandle(handle->read_req.event_handle); + handle->read_req.event_handle = NULL; + } + } + + uv__handle_close(handle); + loop->active_tcp_streams--; + } +} + + +/* Unlike on Unix, here we don't set SO_REUSEADDR, because it doesn't just + * allow binding to addresses that are in use by sockets in TIME_WAIT, it + * effectively allows 'stealing' a port which is in use by another application. + * + * SO_EXCLUSIVEADDRUSE is also not good here because it does check all sockets, + * regardless of state, so we'd get an error even if the port is in use by a + * socket in TIME_WAIT state. + * + * See issue #1360. + * + */ +static int uv_tcp_try_bind(uv_tcp_t* handle, + const struct sockaddr* addr, + unsigned int addrlen, + unsigned int flags) { + DWORD err; + int r; + + if (handle->socket == INVALID_SOCKET) { + SOCKET sock; + + /* Cannot set IPv6-only mode on non-IPv6 socket. */ + if ((flags & UV_TCP_IPV6ONLY) && addr->sa_family != AF_INET6) + return ERROR_INVALID_PARAMETER; + + sock = socket(addr->sa_family, SOCK_STREAM, 0); + if (sock == INVALID_SOCKET) { + return WSAGetLastError(); + } + + err = uv_tcp_set_socket(handle->loop, handle, sock, addr->sa_family, 0); + if (err) { + closesocket(sock); + return err; + } + } + +#ifdef IPV6_V6ONLY + if (addr->sa_family == AF_INET6) { + int on; + + on = (flags & UV_TCP_IPV6ONLY) != 0; + + /* TODO: how to handle errors? This may fail if there is no ipv4 stack + * available, or when run on XP/2003 which have no support for dualstack + * sockets. For now we're silently ignoring the error. */ + setsockopt(handle->socket, + IPPROTO_IPV6, + IPV6_V6ONLY, + (const char*)&on, + sizeof on); + } +#endif + + r = bind(handle->socket, addr, addrlen); + + if (r == SOCKET_ERROR) { + err = WSAGetLastError(); + if (err == WSAEADDRINUSE) { + /* Some errors are not to be reported until connect() or listen() */ + handle->delayed_error = err; + } else { + return err; + } + } + + handle->flags |= UV_HANDLE_BOUND; + + return 0; +} + + +static void CALLBACK post_completion(void* context, BOOLEAN timed_out) { + uv_req_t* req; + uv_tcp_t* handle; + + req = (uv_req_t*) context; + assert(req != NULL); + handle = (uv_tcp_t*)req->data; + assert(handle != NULL); + assert(!timed_out); + + if (!PostQueuedCompletionStatus(handle->loop->iocp, + req->u.io.overlapped.InternalHigh, + 0, + &req->u.io.overlapped)) { + uv_fatal_error(GetLastError(), "PostQueuedCompletionStatus"); + } +} + + +static void CALLBACK post_write_completion(void* context, BOOLEAN timed_out) { + uv_write_t* req; + uv_tcp_t* handle; + + req = (uv_write_t*) context; + assert(req != NULL); + handle = (uv_tcp_t*)req->handle; + assert(handle != NULL); + assert(!timed_out); + + if (!PostQueuedCompletionStatus(handle->loop->iocp, + req->u.io.overlapped.InternalHigh, + 0, + &req->u.io.overlapped)) { + uv_fatal_error(GetLastError(), "PostQueuedCompletionStatus"); + } +} + + +static void uv_tcp_queue_accept(uv_tcp_t* handle, uv_tcp_accept_t* req) { + uv_loop_t* loop = handle->loop; + BOOL success; + DWORD bytes; + SOCKET accept_socket; + short family; + + assert(handle->flags & UV_HANDLE_LISTENING); + assert(req->accept_socket == INVALID_SOCKET); + + /* choose family and extension function */ + if (handle->flags & UV_HANDLE_IPV6) { + family = AF_INET6; + } else { + family = AF_INET; + } + + /* Open a socket for the accepted connection. */ + accept_socket = socket(family, SOCK_STREAM, 0); + if (accept_socket == INVALID_SOCKET) { + SET_REQ_ERROR(req, WSAGetLastError()); + uv_insert_pending_req(loop, (uv_req_t*)req); + handle->reqs_pending++; + return; + } + + /* Make the socket non-inheritable */ + if (!SetHandleInformation((HANDLE) accept_socket, HANDLE_FLAG_INHERIT, 0)) { + SET_REQ_ERROR(req, GetLastError()); + uv_insert_pending_req(loop, (uv_req_t*)req); + handle->reqs_pending++; + closesocket(accept_socket); + return; + } + + /* Prepare the overlapped structure. */ + memset(&(req->u.io.overlapped), 0, sizeof(req->u.io.overlapped)); + if (handle->flags & UV_HANDLE_EMULATE_IOCP) { + assert(req->event_handle != NULL); + req->u.io.overlapped.hEvent = (HANDLE) ((ULONG_PTR) req->event_handle | 1); + } + + success = handle->tcp.serv.func_acceptex(handle->socket, + accept_socket, + (void*)req->accept_buffer, + 0, + sizeof(struct sockaddr_storage), + sizeof(struct sockaddr_storage), + &bytes, + &req->u.io.overlapped); + + if (UV_SUCCEEDED_WITHOUT_IOCP(success)) { + /* Process the req without IOCP. */ + req->accept_socket = accept_socket; + handle->reqs_pending++; + uv_insert_pending_req(loop, (uv_req_t*)req); + } else if (UV_SUCCEEDED_WITH_IOCP(success)) { + /* The req will be processed with IOCP. */ + req->accept_socket = accept_socket; + handle->reqs_pending++; + if (handle->flags & UV_HANDLE_EMULATE_IOCP && + req->wait_handle == INVALID_HANDLE_VALUE && + !RegisterWaitForSingleObject(&req->wait_handle, + req->event_handle, post_completion, (void*) req, + INFINITE, WT_EXECUTEINWAITTHREAD)) { + SET_REQ_ERROR(req, GetLastError()); + uv_insert_pending_req(loop, (uv_req_t*)req); + } + } else { + /* Make this req pending reporting an error. */ + SET_REQ_ERROR(req, WSAGetLastError()); + uv_insert_pending_req(loop, (uv_req_t*)req); + handle->reqs_pending++; + /* Destroy the preallocated client socket. */ + closesocket(accept_socket); + /* Destroy the event handle */ + if (handle->flags & UV_HANDLE_EMULATE_IOCP) { + CloseHandle(req->event_handle); + req->event_handle = NULL; + } + } +} + + +static void uv_tcp_queue_read(uv_loop_t* loop, uv_tcp_t* handle) { + uv_read_t* req; + uv_buf_t buf; + int result; + DWORD bytes, flags; + + assert(handle->flags & UV_HANDLE_READING); + assert(!(handle->flags & UV_HANDLE_READ_PENDING)); + + req = &handle->read_req; + memset(&req->u.io.overlapped, 0, sizeof(req->u.io.overlapped)); + + /* + * Preallocate a read buffer if the number of active streams is below + * the threshold. + */ + if (loop->active_tcp_streams < uv_active_tcp_streams_threshold) { + handle->flags &= ~UV_HANDLE_ZERO_READ; + handle->tcp.conn.read_buffer = uv_buf_init(NULL, 0); + handle->alloc_cb((uv_handle_t*) handle, 65536, &handle->tcp.conn.read_buffer); + if (handle->tcp.conn.read_buffer.base == NULL || + handle->tcp.conn.read_buffer.len == 0) { + handle->read_cb((uv_stream_t*) handle, UV_ENOBUFS, &handle->tcp.conn.read_buffer); + return; + } + assert(handle->tcp.conn.read_buffer.base != NULL); + buf = handle->tcp.conn.read_buffer; + } else { + handle->flags |= UV_HANDLE_ZERO_READ; + buf.base = (char*) &uv_zero_; + buf.len = 0; + } + + /* Prepare the overlapped structure. */ + memset(&(req->u.io.overlapped), 0, sizeof(req->u.io.overlapped)); + if (handle->flags & UV_HANDLE_EMULATE_IOCP) { + assert(req->event_handle != NULL); + req->u.io.overlapped.hEvent = (HANDLE) ((ULONG_PTR) req->event_handle | 1); + } + + flags = 0; + result = WSARecv(handle->socket, + (WSABUF*)&buf, + 1, + &bytes, + &flags, + &req->u.io.overlapped, + NULL); + + if (UV_SUCCEEDED_WITHOUT_IOCP(result == 0)) { + /* Process the req without IOCP. */ + handle->flags |= UV_HANDLE_READ_PENDING; + req->u.io.overlapped.InternalHigh = bytes; + handle->reqs_pending++; + uv_insert_pending_req(loop, (uv_req_t*)req); + } else if (UV_SUCCEEDED_WITH_IOCP(result == 0)) { + /* The req will be processed with IOCP. */ + handle->flags |= UV_HANDLE_READ_PENDING; + handle->reqs_pending++; + if (handle->flags & UV_HANDLE_EMULATE_IOCP && + req->wait_handle == INVALID_HANDLE_VALUE && + !RegisterWaitForSingleObject(&req->wait_handle, + req->event_handle, post_completion, (void*) req, + INFINITE, WT_EXECUTEINWAITTHREAD)) { + SET_REQ_ERROR(req, GetLastError()); + uv_insert_pending_req(loop, (uv_req_t*)req); + } + } else { + /* Make this req pending reporting an error. */ + SET_REQ_ERROR(req, WSAGetLastError()); + uv_insert_pending_req(loop, (uv_req_t*)req); + handle->reqs_pending++; + } +} + + +int uv_tcp_close_reset(uv_tcp_t* handle, uv_close_cb close_cb) { + struct linger l = { 1, 0 }; + + /* Disallow setting SO_LINGER to zero due to some platform inconsistencies */ + if (handle->flags & UV_HANDLE_SHUTTING) + return UV_EINVAL; + + if (0 != setsockopt(handle->socket, SOL_SOCKET, SO_LINGER, (const char*)&l, sizeof(l))) + return uv_translate_sys_error(WSAGetLastError()); + + uv_close((uv_handle_t*) handle, close_cb); + return 0; +} + + +int uv_tcp_listen(uv_tcp_t* handle, int backlog, uv_connection_cb cb) { + unsigned int i, simultaneous_accepts; + uv_tcp_accept_t* req; + int err; + + assert(backlog > 0); + + if (handle->flags & UV_HANDLE_LISTENING) { + handle->stream.serv.connection_cb = cb; + } + + if (handle->flags & UV_HANDLE_READING) { + return WSAEISCONN; + } + + if (handle->delayed_error) { + return handle->delayed_error; + } + + if (!(handle->flags & UV_HANDLE_BOUND)) { + err = uv_tcp_try_bind(handle, + (const struct sockaddr*) &uv_addr_ip4_any_, + sizeof(uv_addr_ip4_any_), + 0); + if (err) + return err; + if (handle->delayed_error) + return handle->delayed_error; + } + + if (!handle->tcp.serv.func_acceptex) { + if (!uv_get_acceptex_function(handle->socket, &handle->tcp.serv.func_acceptex)) { + return WSAEAFNOSUPPORT; + } + } + + if (!(handle->flags & UV_HANDLE_SHARED_TCP_SOCKET) && + listen(handle->socket, backlog) == SOCKET_ERROR) { + return WSAGetLastError(); + } + + handle->flags |= UV_HANDLE_LISTENING; + handle->stream.serv.connection_cb = cb; + INCREASE_ACTIVE_COUNT(loop, handle); + + simultaneous_accepts = handle->flags & UV_HANDLE_TCP_SINGLE_ACCEPT ? 1 + : uv_simultaneous_server_accepts; + + if (handle->tcp.serv.accept_reqs == NULL) { + handle->tcp.serv.accept_reqs = + (uv_tcp_accept_t *)uv__malloc(uv_simultaneous_server_accepts * sizeof(uv_tcp_accept_t)); + if (!handle->tcp.serv.accept_reqs) { + uv_fatal_error(ERROR_OUTOFMEMORY, "uv__malloc"); + } + + for (i = 0; i < simultaneous_accepts; i++) { + req = &handle->tcp.serv.accept_reqs[i]; + UV_REQ_INIT(req, UV_ACCEPT); + req->accept_socket = INVALID_SOCKET; + req->data = handle; + + req->wait_handle = INVALID_HANDLE_VALUE; + if (handle->flags & UV_HANDLE_EMULATE_IOCP) { + req->event_handle = CreateEvent(NULL, 0, 0, NULL); + if (req->event_handle == NULL) { + uv_fatal_error(GetLastError(), "CreateEvent"); + } + } else { + req->event_handle = NULL; + } + + uv_tcp_queue_accept(handle, req); + } + + /* Initialize other unused requests too, because uv_tcp_endgame doesn't + * know how many requests were initialized, so it will try to clean up + * {uv_simultaneous_server_accepts} requests. */ + for (i = simultaneous_accepts; i < uv_simultaneous_server_accepts; i++) { + req = &handle->tcp.serv.accept_reqs[i]; + UV_REQ_INIT(req, UV_ACCEPT); + req->accept_socket = INVALID_SOCKET; + req->data = handle; + req->wait_handle = INVALID_HANDLE_VALUE; + req->event_handle = NULL; + } + } + + return 0; +} + + +int uv_tcp_accept(uv_tcp_t* server, uv_tcp_t* client) { + uv_loop_t* loop = server->loop; + int err = 0; + int family; + + uv_tcp_accept_t* req = server->tcp.serv.pending_accepts; + + if (!req) { + /* No valid connections found, so we error out. */ + return WSAEWOULDBLOCK; + } + + if (req->accept_socket == INVALID_SOCKET) { + return WSAENOTCONN; + } + + if (server->flags & UV_HANDLE_IPV6) { + family = AF_INET6; + } else { + family = AF_INET; + } + + err = uv_tcp_set_socket(client->loop, + client, + req->accept_socket, + family, + 0); + if (err) { + closesocket(req->accept_socket); + } else { + uv_connection_init((uv_stream_t*) client); + /* AcceptEx() implicitly binds the accepted socket. */ + client->flags |= UV_HANDLE_BOUND | UV_HANDLE_READABLE | UV_HANDLE_WRITABLE; + } + + /* Prepare the req to pick up a new connection */ + server->tcp.serv.pending_accepts = req->next_pending; + req->next_pending = NULL; + req->accept_socket = INVALID_SOCKET; + + if (!(server->flags & UV_HANDLE_CLOSING)) { + /* Check if we're in a middle of changing the number of pending accepts. */ + if (!(server->flags & UV_HANDLE_TCP_ACCEPT_STATE_CHANGING)) { + uv_tcp_queue_accept(server, req); + } else { + /* We better be switching to a single pending accept. */ + assert(server->flags & UV_HANDLE_TCP_SINGLE_ACCEPT); + + server->tcp.serv.processed_accepts++; + + if (server->tcp.serv.processed_accepts >= uv_simultaneous_server_accepts) { + server->tcp.serv.processed_accepts = 0; + /* + * All previously queued accept requests are now processed. + * We now switch to queueing just a single accept. + */ + uv_tcp_queue_accept(server, &server->tcp.serv.accept_reqs[0]); + server->flags &= ~UV_HANDLE_TCP_ACCEPT_STATE_CHANGING; + server->flags |= UV_HANDLE_TCP_SINGLE_ACCEPT; + } + } + } + + loop->active_tcp_streams++; + + return err; +} + + +int uv_tcp_read_start(uv_tcp_t* handle, uv_alloc_cb alloc_cb, + uv_read_cb read_cb) { + uv_loop_t* loop = handle->loop; + + handle->flags |= UV_HANDLE_READING; + handle->read_cb = read_cb; + handle->alloc_cb = alloc_cb; + INCREASE_ACTIVE_COUNT(loop, handle); + + /* If reading was stopped and then started again, there could still be a read + * request pending. */ + if (!(handle->flags & UV_HANDLE_READ_PENDING)) { + if (handle->flags & UV_HANDLE_EMULATE_IOCP && + handle->read_req.event_handle == NULL) { + handle->read_req.event_handle = CreateEvent(NULL, 0, 0, NULL); + if (handle->read_req.event_handle == NULL) { + uv_fatal_error(GetLastError(), "CreateEvent"); + } + } + uv_tcp_queue_read(loop, handle); + } + + return 0; +} + + +static int uv_tcp_try_connect(uv_connect_t* req, + uv_tcp_t* handle, + const struct sockaddr* addr, + unsigned int addrlen, + uv_connect_cb cb) { + uv_loop_t* loop = handle->loop; + const struct sockaddr* bind_addr; + struct sockaddr_storage converted; + BOOL success; + DWORD bytes; + int err; + + err = uv__convert_to_localhost_if_unspecified(addr, &converted); + if (err) + return err; + + if (handle->delayed_error) { + return handle->delayed_error; + } + + if (!(handle->flags & UV_HANDLE_BOUND)) { + if (addrlen == sizeof(uv_addr_ip4_any_)) { + bind_addr = (const struct sockaddr*) &uv_addr_ip4_any_; + } else if (addrlen == sizeof(uv_addr_ip6_any_)) { + bind_addr = (const struct sockaddr*) &uv_addr_ip6_any_; + } else { + abort(); + } + err = uv_tcp_try_bind(handle, bind_addr, addrlen, 0); + if (err) + return err; + if (handle->delayed_error) + return handle->delayed_error; + } + + if (!handle->tcp.conn.func_connectex) { + if (!uv_get_connectex_function(handle->socket, &handle->tcp.conn.func_connectex)) { + return WSAEAFNOSUPPORT; + } + } + + UV_REQ_INIT(req, UV_CONNECT); + req->handle = (uv_stream_t*) handle; + req->cb = cb; + memset(&req->u.io.overlapped, 0, sizeof(req->u.io.overlapped)); + + success = handle->tcp.conn.func_connectex(handle->socket, + (const struct sockaddr*) &converted, + addrlen, + NULL, + 0, + &bytes, + &req->u.io.overlapped); + + if (UV_SUCCEEDED_WITHOUT_IOCP(success)) { + /* Process the req without IOCP. */ + handle->reqs_pending++; + REGISTER_HANDLE_REQ(loop, handle, req); + uv_insert_pending_req(loop, (uv_req_t*)req); + } else if (UV_SUCCEEDED_WITH_IOCP(success)) { + /* The req will be processed with IOCP. */ + handle->reqs_pending++; + REGISTER_HANDLE_REQ(loop, handle, req); + } else { + return WSAGetLastError(); + } + + return 0; +} + + +int uv_tcp_getsockname(const uv_tcp_t* handle, + struct sockaddr* name, + int* namelen) { + + return uv__getsockpeername((const uv_handle_t*) handle, + getsockname, + name, + namelen, + handle->delayed_error); +} + + +int uv_tcp_getpeername(const uv_tcp_t* handle, + struct sockaddr* name, + int* namelen) { + + return uv__getsockpeername((const uv_handle_t*) handle, + getpeername, + name, + namelen, + handle->delayed_error); +} + + +int uv_tcp_write(uv_loop_t* loop, + uv_write_t* req, + uv_tcp_t* handle, + const uv_buf_t bufs[], + unsigned int nbufs, + uv_write_cb cb) { + int result; + DWORD bytes; + + UV_REQ_INIT(req, UV_WRITE); + req->handle = (uv_stream_t*) handle; + req->cb = cb; + + /* Prepare the overlapped structure. */ + memset(&(req->u.io.overlapped), 0, sizeof(req->u.io.overlapped)); + if (handle->flags & UV_HANDLE_EMULATE_IOCP) { + req->event_handle = CreateEvent(NULL, 0, 0, NULL); + if (req->event_handle == NULL) { + uv_fatal_error(GetLastError(), "CreateEvent"); + } + req->u.io.overlapped.hEvent = (HANDLE) ((ULONG_PTR) req->event_handle | 1); + req->wait_handle = INVALID_HANDLE_VALUE; + } + + result = WSASend(handle->socket, + (WSABUF*) bufs, + nbufs, + &bytes, + 0, + &req->u.io.overlapped, + NULL); + + if (UV_SUCCEEDED_WITHOUT_IOCP(result == 0)) { + /* Request completed immediately. */ + req->u.io.queued_bytes = 0; + handle->reqs_pending++; + handle->stream.conn.write_reqs_pending++; + REGISTER_HANDLE_REQ(loop, handle, req); + uv_insert_pending_req(loop, (uv_req_t*) req); + } else if (UV_SUCCEEDED_WITH_IOCP(result == 0)) { + /* Request queued by the kernel. */ + req->u.io.queued_bytes = uv__count_bufs(bufs, nbufs); + handle->reqs_pending++; + handle->stream.conn.write_reqs_pending++; + REGISTER_HANDLE_REQ(loop, handle, req); + handle->write_queue_size += req->u.io.queued_bytes; + if (handle->flags & UV_HANDLE_EMULATE_IOCP && + !RegisterWaitForSingleObject(&req->wait_handle, + req->event_handle, post_write_completion, (void*) req, + INFINITE, WT_EXECUTEINWAITTHREAD | WT_EXECUTEONLYONCE)) { + SET_REQ_ERROR(req, GetLastError()); + uv_insert_pending_req(loop, (uv_req_t*)req); + } + } else { + /* Send failed due to an error, report it later */ + req->u.io.queued_bytes = 0; + handle->reqs_pending++; + handle->stream.conn.write_reqs_pending++; + REGISTER_HANDLE_REQ(loop, handle, req); + SET_REQ_ERROR(req, WSAGetLastError()); + uv_insert_pending_req(loop, (uv_req_t*) req); + } + + return 0; +} + + +int uv__tcp_try_write(uv_tcp_t* handle, + const uv_buf_t bufs[], + unsigned int nbufs) { + int result; + DWORD bytes; + + if (handle->stream.conn.write_reqs_pending > 0) + return UV_EAGAIN; + + result = WSASend(handle->socket, + (WSABUF*) bufs, + nbufs, + &bytes, + 0, + NULL, + NULL); + + if (result == SOCKET_ERROR) + return uv_translate_sys_error(WSAGetLastError()); + else + return bytes; +} + + +void uv_process_tcp_read_req(uv_loop_t* loop, uv_tcp_t* handle, + uv_req_t* req) { + DWORD bytes, flags, err; + uv_buf_t buf; + int count; + + assert(handle->type == UV_TCP); + + handle->flags &= ~UV_HANDLE_READ_PENDING; + + if (!REQ_SUCCESS(req)) { + /* An error occurred doing the read. */ + if ((handle->flags & UV_HANDLE_READING) || + !(handle->flags & UV_HANDLE_ZERO_READ)) { + handle->flags &= ~UV_HANDLE_READING; + DECREASE_ACTIVE_COUNT(loop, handle); + buf = (handle->flags & UV_HANDLE_ZERO_READ) ? + uv_buf_init(NULL, 0) : handle->tcp.conn.read_buffer; + + err = GET_REQ_SOCK_ERROR(req); + + if (err == WSAECONNABORTED) { + /* Turn WSAECONNABORTED into UV_ECONNRESET to be consistent with Unix. + */ + err = WSAECONNRESET; + } + + handle->read_cb((uv_stream_t*)handle, + uv_translate_sys_error(err), + &buf); + } + } else { + if (!(handle->flags & UV_HANDLE_ZERO_READ)) { + /* The read was done with a non-zero buffer length. */ + if (req->u.io.overlapped.InternalHigh > 0) { + /* Successful read */ + handle->read_cb((uv_stream_t*)handle, + req->u.io.overlapped.InternalHigh, + &handle->tcp.conn.read_buffer); + /* Read again only if bytes == buf.len */ + if (req->u.io.overlapped.InternalHigh < handle->tcp.conn.read_buffer.len) { + goto done; + } + } else { + /* Connection closed */ + if (handle->flags & UV_HANDLE_READING) { + handle->flags &= ~UV_HANDLE_READING; + DECREASE_ACTIVE_COUNT(loop, handle); + } + handle->flags &= ~UV_HANDLE_READABLE; + + buf.base = 0; + buf.len = 0; + handle->read_cb((uv_stream_t*)handle, UV_EOF, &handle->tcp.conn.read_buffer); + goto done; + } + } + + /* Do nonblocking reads until the buffer is empty */ + count = 32; + while ((handle->flags & UV_HANDLE_READING) && (count-- > 0)) { + buf = uv_buf_init(NULL, 0); + handle->alloc_cb((uv_handle_t*) handle, 65536, &buf); + if (buf.base == NULL || buf.len == 0) { + handle->read_cb((uv_stream_t*) handle, UV_ENOBUFS, &buf); + break; + } + assert(buf.base != NULL); + + flags = 0; + if (WSARecv(handle->socket, + (WSABUF*)&buf, + 1, + &bytes, + &flags, + NULL, + NULL) != SOCKET_ERROR) { + if (bytes > 0) { + /* Successful read */ + handle->read_cb((uv_stream_t*)handle, bytes, &buf); + /* Read again only if bytes == buf.len */ + if (bytes < buf.len) { + break; + } + } else { + /* Connection closed */ + handle->flags &= ~(UV_HANDLE_READING | UV_HANDLE_READABLE); + DECREASE_ACTIVE_COUNT(loop, handle); + + handle->read_cb((uv_stream_t*)handle, UV_EOF, &buf); + break; + } + } else { + err = WSAGetLastError(); + if (err == WSAEWOULDBLOCK) { + /* Read buffer was completely empty, report a 0-byte read. */ + handle->read_cb((uv_stream_t*)handle, 0, &buf); + } else { + /* Ouch! serious error. */ + handle->flags &= ~UV_HANDLE_READING; + DECREASE_ACTIVE_COUNT(loop, handle); + + if (err == WSAECONNABORTED) { + /* Turn WSAECONNABORTED into UV_ECONNRESET to be consistent with + * Unix. */ + err = WSAECONNRESET; + } + + handle->read_cb((uv_stream_t*)handle, + uv_translate_sys_error(err), + &buf); + } + break; + } + } + +done: + /* Post another read if still reading and not closing. */ + if ((handle->flags & UV_HANDLE_READING) && + !(handle->flags & UV_HANDLE_READ_PENDING)) { + uv_tcp_queue_read(loop, handle); + } + } + + DECREASE_PENDING_REQ_COUNT(handle); +} + + +void uv_process_tcp_write_req(uv_loop_t* loop, uv_tcp_t* handle, + uv_write_t* req) { + int err; + + assert(handle->type == UV_TCP); + + assert(handle->write_queue_size >= req->u.io.queued_bytes); + handle->write_queue_size -= req->u.io.queued_bytes; + + UNREGISTER_HANDLE_REQ(loop, handle, req); + + if (handle->flags & UV_HANDLE_EMULATE_IOCP) { + if (req->wait_handle != INVALID_HANDLE_VALUE) { + UnregisterWait(req->wait_handle); + req->wait_handle = INVALID_HANDLE_VALUE; + } + if (req->event_handle != NULL) { + CloseHandle(req->event_handle); + req->event_handle = NULL; + } + } + + if (req->cb) { + err = uv_translate_sys_error(GET_REQ_SOCK_ERROR(req)); + if (err == UV_ECONNABORTED) { + /* use UV_ECANCELED for consistency with Unix */ + err = UV_ECANCELED; + } + req->cb(req, err); + } + + handle->stream.conn.write_reqs_pending--; + if (handle->stream.conn.shutdown_req != NULL && + handle->stream.conn.write_reqs_pending == 0) { + uv_want_endgame(loop, (uv_handle_t*)handle); + } + + DECREASE_PENDING_REQ_COUNT(handle); +} + + +void uv_process_tcp_accept_req(uv_loop_t* loop, uv_tcp_t* handle, + uv_req_t* raw_req) { + uv_tcp_accept_t* req = (uv_tcp_accept_t*) raw_req; + int err; + + assert(handle->type == UV_TCP); + + /* If handle->accepted_socket is not a valid socket, then uv_queue_accept + * must have failed. This is a serious error. We stop accepting connections + * and report this error to the connection callback. */ + if (req->accept_socket == INVALID_SOCKET) { + if (handle->flags & UV_HANDLE_LISTENING) { + handle->flags &= ~UV_HANDLE_LISTENING; + DECREASE_ACTIVE_COUNT(loop, handle); + if (handle->stream.serv.connection_cb) { + err = GET_REQ_SOCK_ERROR(req); + handle->stream.serv.connection_cb((uv_stream_t*)handle, + uv_translate_sys_error(err)); + } + } + } else if (REQ_SUCCESS(req) && + setsockopt(req->accept_socket, + SOL_SOCKET, + SO_UPDATE_ACCEPT_CONTEXT, + (char*)&handle->socket, + sizeof(handle->socket)) == 0) { + req->next_pending = handle->tcp.serv.pending_accepts; + handle->tcp.serv.pending_accepts = req; + + /* Accept and SO_UPDATE_ACCEPT_CONTEXT were successful. */ + if (handle->stream.serv.connection_cb) { + handle->stream.serv.connection_cb((uv_stream_t*)handle, 0); + } + } else { + /* Error related to accepted socket is ignored because the server socket + * may still be healthy. If the server socket is broken uv_queue_accept + * will detect it. */ + closesocket(req->accept_socket); + req->accept_socket = INVALID_SOCKET; + if (handle->flags & UV_HANDLE_LISTENING) { + uv_tcp_queue_accept(handle, req); + } + } + + DECREASE_PENDING_REQ_COUNT(handle); +} + + +void uv_process_tcp_connect_req(uv_loop_t* loop, uv_tcp_t* handle, + uv_connect_t* req) { + int err; + + assert(handle->type == UV_TCP); + + UNREGISTER_HANDLE_REQ(loop, handle, req); + + err = 0; + if (REQ_SUCCESS(req)) { + if (handle->flags & UV_HANDLE_CLOSING) { + /* use UV_ECANCELED for consistency with Unix */ + err = ERROR_OPERATION_ABORTED; + } else if (setsockopt(handle->socket, + SOL_SOCKET, + SO_UPDATE_CONNECT_CONTEXT, + NULL, + 0) == 0) { + uv_connection_init((uv_stream_t*)handle); + handle->flags |= UV_HANDLE_READABLE | UV_HANDLE_WRITABLE; + loop->active_tcp_streams++; + } else { + err = WSAGetLastError(); + } + } else { + err = GET_REQ_SOCK_ERROR(req); + } + req->cb(req, uv_translate_sys_error(err)); + + DECREASE_PENDING_REQ_COUNT(handle); +} + + +int uv__tcp_xfer_export(uv_tcp_t* handle, + int target_pid, + uv__ipc_socket_xfer_type_t* xfer_type, + uv__ipc_socket_xfer_info_t* xfer_info) { + if (handle->flags & UV_HANDLE_CONNECTION) { + *xfer_type = UV__IPC_SOCKET_XFER_TCP_CONNECTION; + } else { + *xfer_type = UV__IPC_SOCKET_XFER_TCP_SERVER; + /* We're about to share the socket with another process. Because this is a + * listening socket, we assume that the other process will be accepting + * connections on it. Thus, before sharing the socket with another process, + * we call listen here in the parent process. */ + if (!(handle->flags & UV_HANDLE_LISTENING)) { + if (!(handle->flags & UV_HANDLE_BOUND)) { + return ERROR_NOT_SUPPORTED; + } + if (handle->delayed_error == 0 && + listen(handle->socket, SOMAXCONN) == SOCKET_ERROR) { + handle->delayed_error = WSAGetLastError(); + } + } + } + + if (WSADuplicateSocketW(handle->socket, target_pid, &xfer_info->socket_info)) + return WSAGetLastError(); + xfer_info->delayed_error = handle->delayed_error; + + /* Mark the local copy of the handle as 'shared' so we behave in a way that's + * friendly to the process(es) that we share the socket with. */ + handle->flags |= UV_HANDLE_SHARED_TCP_SOCKET; + + return 0; +} + + +int uv__tcp_xfer_import(uv_tcp_t* tcp, + uv__ipc_socket_xfer_type_t xfer_type, + uv__ipc_socket_xfer_info_t* xfer_info) { + int err; + SOCKET socket; + + assert(xfer_type == UV__IPC_SOCKET_XFER_TCP_SERVER || + xfer_type == UV__IPC_SOCKET_XFER_TCP_CONNECTION); + + socket = WSASocketW(FROM_PROTOCOL_INFO, + FROM_PROTOCOL_INFO, + FROM_PROTOCOL_INFO, + &xfer_info->socket_info, + 0, + WSA_FLAG_OVERLAPPED); + + if (socket == INVALID_SOCKET) { + return WSAGetLastError(); + } + + err = uv_tcp_set_socket( + tcp->loop, tcp, socket, xfer_info->socket_info.iAddressFamily, 1); + if (err) { + closesocket(socket); + return err; + } + + tcp->delayed_error = xfer_info->delayed_error; + tcp->flags |= UV_HANDLE_BOUND | UV_HANDLE_SHARED_TCP_SOCKET; + + if (xfer_type == UV__IPC_SOCKET_XFER_TCP_CONNECTION) { + uv_connection_init((uv_stream_t*)tcp); + tcp->flags |= UV_HANDLE_READABLE | UV_HANDLE_WRITABLE; + } + + tcp->loop->active_tcp_streams++; + return 0; +} + + +int uv_tcp_nodelay(uv_tcp_t* handle, int enable) { + int err; + + if (handle->socket != INVALID_SOCKET) { + err = uv__tcp_nodelay(handle, handle->socket, enable); + if (err) + return err; + } + + if (enable) { + handle->flags |= UV_HANDLE_TCP_NODELAY; + } else { + handle->flags &= ~UV_HANDLE_TCP_NODELAY; + } + + return 0; +} + + +int uv_tcp_keepalive(uv_tcp_t* handle, int enable, unsigned int delay) { + int err; + + if (handle->socket != INVALID_SOCKET) { + err = uv__tcp_keepalive(handle, handle->socket, enable, delay); + if (err) + return err; + } + + if (enable) { + handle->flags |= UV_HANDLE_TCP_KEEPALIVE; + } else { + handle->flags &= ~UV_HANDLE_TCP_KEEPALIVE; + } + + /* TODO: Store delay if handle->socket isn't created yet. */ + + return 0; +} + + +int uv_tcp_simultaneous_accepts(uv_tcp_t* handle, int enable) { + if (handle->flags & UV_HANDLE_CONNECTION) { + return UV_EINVAL; + } + + /* Check if we're already in the desired mode. */ + if ((enable && !(handle->flags & UV_HANDLE_TCP_SINGLE_ACCEPT)) || + (!enable && handle->flags & UV_HANDLE_TCP_SINGLE_ACCEPT)) { + return 0; + } + + /* Don't allow switching from single pending accept to many. */ + if (enable) { + return UV_ENOTSUP; + } + + /* Check if we're in a middle of changing the number of pending accepts. */ + if (handle->flags & UV_HANDLE_TCP_ACCEPT_STATE_CHANGING) { + return 0; + } + + handle->flags |= UV_HANDLE_TCP_SINGLE_ACCEPT; + + /* Flip the changing flag if we have already queued multiple accepts. */ + if (handle->flags & UV_HANDLE_LISTENING) { + handle->flags |= UV_HANDLE_TCP_ACCEPT_STATE_CHANGING; + } + + return 0; +} + + +static int uv_tcp_try_cancel_io(uv_tcp_t* tcp) { + SOCKET socket = tcp->socket; + int non_ifs_lsp; + + /* Check if we have any non-IFS LSPs stacked on top of TCP */ + non_ifs_lsp = (tcp->flags & UV_HANDLE_IPV6) ? uv_tcp_non_ifs_lsp_ipv6 : + uv_tcp_non_ifs_lsp_ipv4; + + /* If there are non-ifs LSPs then try to obtain a base handle for the socket. + * This will always fail on Windows XP/3k. */ + if (non_ifs_lsp) { + DWORD bytes; + if (WSAIoctl(socket, + SIO_BASE_HANDLE, + NULL, + 0, + &socket, + sizeof socket, + &bytes, + NULL, + NULL) != 0) { + /* Failed. We can't do CancelIo. */ + return -1; + } + } + + assert(socket != 0 && socket != INVALID_SOCKET); + + if (!CancelIo((HANDLE) socket)) { + return GetLastError(); + } + + /* It worked. */ + return 0; +} + + +void uv_tcp_close(uv_loop_t* loop, uv_tcp_t* tcp) { + int close_socket = 1; + + if (tcp->flags & UV_HANDLE_READ_PENDING) { + /* In order for winsock to do a graceful close there must not be any any + * pending reads, or the socket must be shut down for writing */ + if (!(tcp->flags & UV_HANDLE_SHARED_TCP_SOCKET)) { + /* Just do shutdown on non-shared sockets, which ensures graceful close. */ + shutdown(tcp->socket, SD_SEND); + + } else if (uv_tcp_try_cancel_io(tcp) == 0) { + /* In case of a shared socket, we try to cancel all outstanding I/O,. If + * that works, don't close the socket yet - wait for the read req to + * return and close the socket in uv_tcp_endgame. */ + close_socket = 0; + + } else { + /* When cancelling isn't possible - which could happen when an LSP is + * present on an old Windows version, we will have to close the socket + * with a read pending. That is not nice because trailing sent bytes may + * not make it to the other side. */ + } + + } else if ((tcp->flags & UV_HANDLE_SHARED_TCP_SOCKET) && + tcp->tcp.serv.accept_reqs != NULL) { + /* Under normal circumstances closesocket() will ensure that all pending + * accept reqs are canceled. However, when the socket is shared the + * presence of another reference to the socket in another process will keep + * the accept reqs going, so we have to ensure that these are canceled. */ + if (uv_tcp_try_cancel_io(tcp) != 0) { + /* When cancellation is not possible, there is another option: we can + * close the incoming sockets, which will also cancel the accept + * operations. However this is not cool because we might inadvertently + * close a socket that just accepted a new connection, which will cause + * the connection to be aborted. */ + unsigned int i; + for (i = 0; i < uv_simultaneous_server_accepts; i++) { + uv_tcp_accept_t* req = &tcp->tcp.serv.accept_reqs[i]; + if (req->accept_socket != INVALID_SOCKET && + !HasOverlappedIoCompleted(&req->u.io.overlapped)) { + closesocket(req->accept_socket); + req->accept_socket = INVALID_SOCKET; + } + } + } + } + + if (tcp->flags & UV_HANDLE_READING) { + tcp->flags &= ~UV_HANDLE_READING; + DECREASE_ACTIVE_COUNT(loop, tcp); + } + + if (tcp->flags & UV_HANDLE_LISTENING) { + tcp->flags &= ~UV_HANDLE_LISTENING; + DECREASE_ACTIVE_COUNT(loop, tcp); + } + + if (close_socket) { + closesocket(tcp->socket); + tcp->socket = INVALID_SOCKET; + tcp->flags |= UV_HANDLE_TCP_SOCKET_CLOSED; + } + + tcp->flags &= ~(UV_HANDLE_READABLE | UV_HANDLE_WRITABLE); + uv__handle_closing(tcp); + + if (tcp->reqs_pending == 0) { + uv_want_endgame(tcp->loop, (uv_handle_t*)tcp); + } +} + + +int uv_tcp_open(uv_tcp_t* handle, uv_os_sock_t sock) { + WSAPROTOCOL_INFOW protocol_info; + int opt_len; + int err; + struct sockaddr_storage saddr; + int saddr_len; + + /* Detect the address family of the socket. */ + opt_len = (int) sizeof protocol_info; + if (getsockopt(sock, + SOL_SOCKET, + SO_PROTOCOL_INFOW, + (char*) &protocol_info, + &opt_len) == SOCKET_ERROR) { + return uv_translate_sys_error(GetLastError()); + } + + err = uv_tcp_set_socket(handle->loop, + handle, + sock, + protocol_info.iAddressFamily, + 1); + if (err) { + return uv_translate_sys_error(err); + } + + /* Support already active socket. */ + saddr_len = sizeof(saddr); + if (!uv_tcp_getsockname(handle, (struct sockaddr*) &saddr, &saddr_len)) { + /* Socket is already bound. */ + handle->flags |= UV_HANDLE_BOUND; + saddr_len = sizeof(saddr); + if (!uv_tcp_getpeername(handle, (struct sockaddr*) &saddr, &saddr_len)) { + /* Socket is already connected. */ + uv_connection_init((uv_stream_t*) handle); + handle->flags |= UV_HANDLE_READABLE | UV_HANDLE_WRITABLE; + } + } + + return 0; +} + + +/* This function is an egress point, i.e. it returns libuv errors rather than + * system errors. + */ +int uv__tcp_bind(uv_tcp_t* handle, + const struct sockaddr* addr, + unsigned int addrlen, + unsigned int flags) { + int err; + + err = uv_tcp_try_bind(handle, addr, addrlen, flags); + if (err) + return uv_translate_sys_error(err); + + return 0; +} + + +/* This function is an egress point, i.e. it returns libuv errors rather than + * system errors. + */ +int uv__tcp_connect(uv_connect_t* req, + uv_tcp_t* handle, + const struct sockaddr* addr, + unsigned int addrlen, + uv_connect_cb cb) { + int err; + + err = uv_tcp_try_connect(req, handle, addr, addrlen, cb); + if (err) + return uv_translate_sys_error(err); + + return 0; +} diff --git a/external/libuv/src/win/thread.c b/external/libuv/src/win/thread.c new file mode 100644 index 000000000..e47ea8e28 --- /dev/null +++ b/external/libuv/src/win/thread.c @@ -0,0 +1,520 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#include +#include +#include + +#if defined(__MINGW64_VERSION_MAJOR) +/* MemoryBarrier expands to __mm_mfence in some cases (x86+sse2), which may + * require this header in some versions of mingw64. */ +#include +#endif + +#include "uv.h" +#include "internal.h" + +static void uv__once_inner(uv_once_t* guard, void (*callback)(void)) { + DWORD result; + HANDLE existing_event, created_event; + + created_event = CreateEvent(NULL, 1, 0, NULL); + if (created_event == 0) { + /* Could fail in a low-memory situation? */ + uv_fatal_error(GetLastError(), "CreateEvent"); + } + + existing_event = InterlockedCompareExchangePointer(&guard->event, + created_event, + NULL); + + if (existing_event == NULL) { + /* We won the race */ + callback(); + + result = SetEvent(created_event); + assert(result); + guard->ran = 1; + + } else { + /* We lost the race. Destroy the event we created and wait for the existing + * one to become signaled. */ + CloseHandle(created_event); + result = WaitForSingleObject(existing_event, INFINITE); + assert(result == WAIT_OBJECT_0); + } +} + + +void uv_once(uv_once_t* guard, void (*callback)(void)) { + /* Fast case - avoid WaitForSingleObject. */ + if (guard->ran) { + return; + } + + uv__once_inner(guard, callback); +} + + +/* Verify that uv_thread_t can be stored in a TLS slot. */ +STATIC_ASSERT(sizeof(uv_thread_t) <= sizeof(void*)); + +static uv_key_t uv__current_thread_key; +static uv_once_t uv__current_thread_init_guard = UV_ONCE_INIT; + + +static void uv__init_current_thread_key(void) { + if (uv_key_create(&uv__current_thread_key)) + abort(); +} + + +struct thread_ctx { + void (*entry)(void* arg); + void* arg; + uv_thread_t self; +}; + + +static UINT __stdcall uv__thread_start(void* arg) { + struct thread_ctx *ctx_p; + struct thread_ctx ctx; + + ctx_p = (struct thread_ctx *)arg; + ctx = *ctx_p; + uv__free(ctx_p); + + uv_once(&uv__current_thread_init_guard, uv__init_current_thread_key); + uv_key_set(&uv__current_thread_key, (void*) ctx.self); + + ctx.entry(ctx.arg); + + return 0; +} + + +int uv_thread_create(uv_thread_t *tid, void (*entry)(void *arg), void *arg) { + uv_thread_options_t params; + params.flags = UV_THREAD_NO_FLAGS; + return uv_thread_create_ex(tid, ¶ms, entry, arg); +} + +int uv_thread_create_ex(uv_thread_t* tid, + const uv_thread_options_t* params, + void (*entry)(void *arg), + void *arg) { + struct thread_ctx* ctx; + int err; + HANDLE thread; + SYSTEM_INFO sysinfo; + size_t stack_size; + size_t pagesize; + + stack_size = + params->flags & UV_THREAD_HAS_STACK_SIZE ? params->stack_size : 0; + + if (stack_size != 0) { + GetNativeSystemInfo(&sysinfo); + pagesize = (size_t)sysinfo.dwPageSize; + /* Round up to the nearest page boundary. */ + stack_size = (stack_size + pagesize - 1) &~ (pagesize - 1); + + if ((unsigned)stack_size != stack_size) + return UV_EINVAL; + } + + ctx = (struct thread_ctx *)uv__malloc(sizeof(*ctx)); + if (ctx == NULL) + return UV_ENOMEM; + + ctx->entry = entry; + ctx->arg = arg; + + /* Create the thread in suspended state so we have a chance to pass + * its own creation handle to it */ + thread = (HANDLE) _beginthreadex(NULL, + (unsigned)stack_size, + uv__thread_start, + ctx, + CREATE_SUSPENDED, + NULL); + if (thread == NULL) { + err = errno; + uv__free(ctx); + } else { + err = 0; + *tid = thread; + ctx->self = thread; + ResumeThread(thread); + } + + switch (err) { + case 0: + return 0; + case EACCES: + return UV_EACCES; + case EAGAIN: + return UV_EAGAIN; + case EINVAL: + return UV_EINVAL; + } + + return UV_EIO; +} + + +uv_thread_t uv_thread_self(void) { + uv_once(&uv__current_thread_init_guard, uv__init_current_thread_key); + return (uv_thread_t) uv_key_get(&uv__current_thread_key); +} + + +int uv_thread_join(uv_thread_t *tid) { + if (WaitForSingleObject(*tid, INFINITE)) + return uv_translate_sys_error(GetLastError()); + else { + CloseHandle(*tid); + *tid = 0; + MemoryBarrier(); /* For feature parity with pthread_join(). */ + return 0; + } +} + + +int uv_thread_equal(const uv_thread_t* t1, const uv_thread_t* t2) { + return *t1 == *t2; +} + + +int uv_mutex_init(uv_mutex_t* mutex) { + InitializeCriticalSection(mutex); + return 0; +} + + +int uv_mutex_init_recursive(uv_mutex_t* mutex) { + return uv_mutex_init(mutex); +} + + +void uv_mutex_destroy(uv_mutex_t* mutex) { + DeleteCriticalSection(mutex); +} + + +void uv_mutex_lock(uv_mutex_t* mutex) { + EnterCriticalSection(mutex); +} + + +int uv_mutex_trylock(uv_mutex_t* mutex) { + if (TryEnterCriticalSection(mutex)) + return 0; + else + return UV_EBUSY; +} + + +void uv_mutex_unlock(uv_mutex_t* mutex) { + LeaveCriticalSection(mutex); +} + + +int uv_rwlock_init(uv_rwlock_t* rwlock) { + /* Initialize the semaphore that acts as the write lock. */ + HANDLE handle = CreateSemaphoreW(NULL, 1, 1, NULL); + if (handle == NULL) + return uv_translate_sys_error(GetLastError()); + rwlock->state_.write_semaphore_ = handle; + + /* Initialize the critical section protecting the reader count. */ + InitializeCriticalSection(&rwlock->state_.num_readers_lock_); + + /* Initialize the reader count. */ + rwlock->state_.num_readers_ = 0; + + return 0; +} + + +void uv_rwlock_destroy(uv_rwlock_t* rwlock) { + DeleteCriticalSection(&rwlock->state_.num_readers_lock_); + CloseHandle(rwlock->state_.write_semaphore_); +} + + +void uv_rwlock_rdlock(uv_rwlock_t* rwlock) { + /* Acquire the lock that protects the reader count. */ + EnterCriticalSection(&rwlock->state_.num_readers_lock_); + + /* Increase the reader count, and lock for write if this is the first + * reader. + */ + if (++rwlock->state_.num_readers_ == 1) { + DWORD r = WaitForSingleObject(rwlock->state_.write_semaphore_, INFINITE); + if (r != WAIT_OBJECT_0) + uv_fatal_error(GetLastError(), "WaitForSingleObject"); + } + + /* Release the lock that protects the reader count. */ + LeaveCriticalSection(&rwlock->state_.num_readers_lock_); +} + + +int uv_rwlock_tryrdlock(uv_rwlock_t* rwlock) { + int err; + + if (!TryEnterCriticalSection(&rwlock->state_.num_readers_lock_)) + return UV_EBUSY; + + err = 0; + + if (rwlock->state_.num_readers_ == 0) { + /* Currently there are no other readers, which means that the write lock + * needs to be acquired. + */ + DWORD r = WaitForSingleObject(rwlock->state_.write_semaphore_, 0); + if (r == WAIT_OBJECT_0) + rwlock->state_.num_readers_++; + else if (r == WAIT_TIMEOUT) + err = UV_EBUSY; + else if (r == WAIT_FAILED) + uv_fatal_error(GetLastError(), "WaitForSingleObject"); + + } else { + /* The write lock has already been acquired because there are other + * active readers. + */ + rwlock->state_.num_readers_++; + } + + LeaveCriticalSection(&rwlock->state_.num_readers_lock_); + return err; +} + + +void uv_rwlock_rdunlock(uv_rwlock_t* rwlock) { + EnterCriticalSection(&rwlock->state_.num_readers_lock_); + + if (--rwlock->state_.num_readers_ == 0) { + if (!ReleaseSemaphore(rwlock->state_.write_semaphore_, 1, NULL)) + uv_fatal_error(GetLastError(), "ReleaseSemaphore"); + } + + LeaveCriticalSection(&rwlock->state_.num_readers_lock_); +} + + +void uv_rwlock_wrlock(uv_rwlock_t* rwlock) { + DWORD r = WaitForSingleObject(rwlock->state_.write_semaphore_, INFINITE); + if (r != WAIT_OBJECT_0) + uv_fatal_error(GetLastError(), "WaitForSingleObject"); +} + + +int uv_rwlock_trywrlock(uv_rwlock_t* rwlock) { + DWORD r = WaitForSingleObject(rwlock->state_.write_semaphore_, 0); + if (r == WAIT_OBJECT_0) + return 0; + else if (r == WAIT_TIMEOUT) + return UV_EBUSY; + else + uv_fatal_error(GetLastError(), "WaitForSingleObject"); +} + + +void uv_rwlock_wrunlock(uv_rwlock_t* rwlock) { + if (!ReleaseSemaphore(rwlock->state_.write_semaphore_, 1, NULL)) + uv_fatal_error(GetLastError(), "ReleaseSemaphore"); +} + + +int uv_sem_init(uv_sem_t* sem, unsigned int value) { + *sem = CreateSemaphore(NULL, value, INT_MAX, NULL); + if (*sem == NULL) + return uv_translate_sys_error(GetLastError()); + else + return 0; +} + + +void uv_sem_destroy(uv_sem_t* sem) { + if (!CloseHandle(*sem)) + abort(); +} + + +void uv_sem_post(uv_sem_t* sem) { + if (!ReleaseSemaphore(*sem, 1, NULL)) + abort(); +} + + +void uv_sem_wait(uv_sem_t* sem) { + if (WaitForSingleObject(*sem, INFINITE) != WAIT_OBJECT_0) + abort(); +} + + +int uv_sem_trywait(uv_sem_t* sem) { + DWORD r = WaitForSingleObject(*sem, 0); + + if (r == WAIT_OBJECT_0) + return 0; + + if (r == WAIT_TIMEOUT) + return UV_EAGAIN; + + abort(); + return -1; /* Satisfy the compiler. */ +} + + +int uv_cond_init(uv_cond_t* cond) { + InitializeConditionVariable(&cond->cond_var); + return 0; +} + + +void uv_cond_destroy(uv_cond_t* cond) { + /* nothing to do */ + (void) &cond; +} + + +void uv_cond_signal(uv_cond_t* cond) { + WakeConditionVariable(&cond->cond_var); +} + + +void uv_cond_broadcast(uv_cond_t* cond) { + WakeAllConditionVariable(&cond->cond_var); +} + + +void uv_cond_wait(uv_cond_t* cond, uv_mutex_t* mutex) { + if (!SleepConditionVariableCS(&cond->cond_var, mutex, INFINITE)) + abort(); +} + +int uv_cond_timedwait(uv_cond_t* cond, uv_mutex_t* mutex, uint64_t timeout) { + if (SleepConditionVariableCS(&cond->cond_var, mutex, (DWORD)(timeout / 1e6))) + return 0; + if (GetLastError() != ERROR_TIMEOUT) + abort(); + return UV_ETIMEDOUT; +} + + +int uv_barrier_init(uv_barrier_t* barrier, unsigned int count) { + int err; + + barrier->n = count; + barrier->count = 0; + + err = uv_mutex_init(&barrier->mutex); + if (err) + return err; + + err = uv_sem_init(&barrier->turnstile1, 0); + if (err) + goto error2; + + err = uv_sem_init(&barrier->turnstile2, 1); + if (err) + goto error; + + return 0; + +error: + uv_sem_destroy(&barrier->turnstile1); +error2: + uv_mutex_destroy(&barrier->mutex); + return err; + +} + + +void uv_barrier_destroy(uv_barrier_t* barrier) { + uv_sem_destroy(&barrier->turnstile2); + uv_sem_destroy(&barrier->turnstile1); + uv_mutex_destroy(&barrier->mutex); +} + + +int uv_barrier_wait(uv_barrier_t* barrier) { + int serial_thread; + + uv_mutex_lock(&barrier->mutex); + if (++barrier->count == barrier->n) { + uv_sem_wait(&barrier->turnstile2); + uv_sem_post(&barrier->turnstile1); + } + uv_mutex_unlock(&barrier->mutex); + + uv_sem_wait(&barrier->turnstile1); + uv_sem_post(&barrier->turnstile1); + + uv_mutex_lock(&barrier->mutex); + serial_thread = (--barrier->count == 0); + if (serial_thread) { + uv_sem_wait(&barrier->turnstile1); + uv_sem_post(&barrier->turnstile2); + } + uv_mutex_unlock(&barrier->mutex); + + uv_sem_wait(&barrier->turnstile2); + uv_sem_post(&barrier->turnstile2); + return serial_thread; +} + + +int uv_key_create(uv_key_t* key) { + key->tls_index = TlsAlloc(); + if (key->tls_index == TLS_OUT_OF_INDEXES) + return UV_ENOMEM; + return 0; +} + + +void uv_key_delete(uv_key_t* key) { + if (TlsFree(key->tls_index) == FALSE) + abort(); + key->tls_index = TLS_OUT_OF_INDEXES; +} + + +void* uv_key_get(uv_key_t* key) { + void* value; + + value = TlsGetValue(key->tls_index); + if (value == NULL) + if (GetLastError() != ERROR_SUCCESS) + abort(); + + return value; +} + + +void uv_key_set(uv_key_t* key, void* value) { + if (TlsSetValue(key->tls_index, value) == FALSE) + abort(); +} diff --git a/external/libuv/src/win/tty.c b/external/libuv/src/win/tty.c new file mode 100644 index 000000000..488d9b2a1 --- /dev/null +++ b/external/libuv/src/win/tty.c @@ -0,0 +1,2451 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#include +#include +#include +#include + +#if defined(_MSC_VER) && _MSC_VER < 1600 +# include "uv/stdint-msvc2008.h" +#else +# include +#endif + +#ifndef COMMON_LVB_REVERSE_VIDEO +# define COMMON_LVB_REVERSE_VIDEO 0x4000 +#endif + +#include "uv.h" +#include "internal.h" +#include "handle-inl.h" +#include "stream-inl.h" +#include "req-inl.h" + +#ifndef InterlockedOr +# define InterlockedOr _InterlockedOr +#endif + +#define UNICODE_REPLACEMENT_CHARACTER (0xfffd) + +#define ANSI_NORMAL 0x0000 +#define ANSI_ESCAPE_SEEN 0x0002 +#define ANSI_CSI 0x0004 +#define ANSI_ST_CONTROL 0x0008 +#define ANSI_IGNORE 0x0010 +#define ANSI_IN_ARG 0x0020 +#define ANSI_IN_STRING 0x0040 +#define ANSI_BACKSLASH_SEEN 0x0080 +#define ANSI_EXTENSION 0x0100 +#define ANSI_DECSCUSR 0x0200 + +#define MAX_INPUT_BUFFER_LENGTH 8192 +#define MAX_CONSOLE_CHAR 8192 + +#ifndef ENABLE_VIRTUAL_TERMINAL_PROCESSING +#define ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004 +#endif + +#define CURSOR_SIZE_SMALL 25 +#define CURSOR_SIZE_LARGE 100 + +static void uv_tty_capture_initial_style( + CONSOLE_SCREEN_BUFFER_INFO* screen_buffer_info, + CONSOLE_CURSOR_INFO* cursor_info); +static void uv_tty_update_virtual_window(CONSOLE_SCREEN_BUFFER_INFO* info); +static int uv__cancel_read_console(uv_tty_t* handle); + + +/* Null uv_buf_t */ +static const uv_buf_t uv_null_buf_ = { 0, NULL }; + +enum uv__read_console_status_e { + NOT_STARTED, + IN_PROGRESS, + TRAP_REQUESTED, + COMPLETED +}; + +static volatile LONG uv__read_console_status = NOT_STARTED; +static volatile LONG uv__restore_screen_state; +static CONSOLE_SCREEN_BUFFER_INFO uv__saved_screen_state; + + +/* + * The console virtual window. + * + * Normally cursor movement in windows is relative to the console screen buffer, + * e.g. the application is allowed to overwrite the 'history'. This is very + * inconvenient, it makes absolute cursor movement pretty useless. There is + * also the concept of 'client rect' which is defined by the actual size of + * the console window and the scroll position of the screen buffer, but it's + * very volatile because it changes when the user scrolls. + * + * To make cursor movement behave sensibly we define a virtual window to which + * cursor movement is confined. The virtual window is always as wide as the + * console screen buffer, but it's height is defined by the size of the + * console window. The top of the virtual window aligns with the position + * of the caret when the first stdout/err handle is created, unless that would + * mean that it would extend beyond the bottom of the screen buffer - in that + * that case it's located as far down as possible. + * + * When the user writes a long text or many newlines, such that the output + * reaches beyond the bottom of the virtual window, the virtual window is + * shifted downwards, but not resized. + * + * Since all tty i/o happens on the same console, this window is shared + * between all stdout/stderr handles. + */ + +static int uv_tty_virtual_offset = -1; +static int uv_tty_virtual_height = -1; +static int uv_tty_virtual_width = -1; + +/* The console window size + * We keep this separate from uv_tty_virtual_*. We use those values to only + * handle signalling SIGWINCH + */ + +static HANDLE uv__tty_console_handle = INVALID_HANDLE_VALUE; +static int uv__tty_console_height = -1; +static int uv__tty_console_width = -1; +static HANDLE uv__tty_console_resized = INVALID_HANDLE_VALUE; +static uv_mutex_t uv__tty_console_resize_mutex; + +static DWORD WINAPI uv__tty_console_resize_message_loop_thread(void* param); +static void CALLBACK uv__tty_console_resize_event(HWINEVENTHOOK hWinEventHook, + DWORD event, + HWND hwnd, + LONG idObject, + LONG idChild, + DWORD dwEventThread, + DWORD dwmsEventTime); +static DWORD WINAPI uv__tty_console_resize_watcher_thread(void* param); +static void uv__tty_console_signal_resize(void); + +/* We use a semaphore rather than a mutex or critical section because in some + cases (uv__cancel_read_console) we need take the lock in the main thread and + release it in another thread. Using a semaphore ensures that in such + scenario the main thread will still block when trying to acquire the lock. */ +static uv_sem_t uv_tty_output_lock; + +static WORD uv_tty_default_text_attributes = + FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE; + +static char uv_tty_default_fg_color = 7; +static char uv_tty_default_bg_color = 0; +static char uv_tty_default_fg_bright = 0; +static char uv_tty_default_bg_bright = 0; +static char uv_tty_default_inverse = 0; + +static CONSOLE_CURSOR_INFO uv_tty_default_cursor_info; + +/* Determine whether or not ANSI support is enabled. */ +static BOOL uv__need_check_vterm_state = TRUE; +static uv_tty_vtermstate_t uv__vterm_state = UV_TTY_UNSUPPORTED; +static void uv__determine_vterm_state(HANDLE handle); + +void uv_console_init(void) { + if (uv_sem_init(&uv_tty_output_lock, 1)) + abort(); + uv__tty_console_handle = CreateFileW(L"CONOUT$", + GENERIC_READ | GENERIC_WRITE, + FILE_SHARE_WRITE, + 0, + OPEN_EXISTING, + 0, + 0); + if (uv__tty_console_handle != INVALID_HANDLE_VALUE) { + CONSOLE_SCREEN_BUFFER_INFO sb_info; + QueueUserWorkItem(uv__tty_console_resize_message_loop_thread, + NULL, + WT_EXECUTELONGFUNCTION); + uv_mutex_init(&uv__tty_console_resize_mutex); + if (GetConsoleScreenBufferInfo(uv__tty_console_handle, &sb_info)) { + uv__tty_console_width = sb_info.dwSize.X; + uv__tty_console_height = sb_info.srWindow.Bottom - sb_info.srWindow.Top + 1; + } + } +} + + +int uv_tty_init(uv_loop_t* loop, uv_tty_t* tty, uv_file fd, int unused) { + BOOL readable; + DWORD NumberOfEvents; + HANDLE handle; + CONSOLE_SCREEN_BUFFER_INFO screen_buffer_info; + CONSOLE_CURSOR_INFO cursor_info; + (void)unused; + + uv__once_init(); + handle = (HANDLE) uv__get_osfhandle(fd); + if (handle == INVALID_HANDLE_VALUE) + return UV_EBADF; + + if (fd <= 2) { + /* In order to avoid closing a stdio file descriptor 0-2, duplicate the + * underlying OS handle and forget about the original fd. + * We could also opt to use the original OS handle and just never close it, + * but then there would be no reliable way to cancel pending read operations + * upon close. + */ + if (!DuplicateHandle(INVALID_HANDLE_VALUE, + handle, + INVALID_HANDLE_VALUE, + &handle, + 0, + FALSE, + DUPLICATE_SAME_ACCESS)) + return uv_translate_sys_error(GetLastError()); + fd = -1; + } + + readable = GetNumberOfConsoleInputEvents(handle, &NumberOfEvents); + if (!readable) { + /* Obtain the screen buffer info with the output handle. */ + if (!GetConsoleScreenBufferInfo(handle, &screen_buffer_info)) { + return uv_translate_sys_error(GetLastError()); + } + + /* Obtain the cursor info with the output handle. */ + if (!GetConsoleCursorInfo(handle, &cursor_info)) { + return uv_translate_sys_error(GetLastError()); + } + + /* Obtain the tty_output_lock because the virtual window state is shared + * between all uv_tty_t handles. */ + uv_sem_wait(&uv_tty_output_lock); + + if (uv__need_check_vterm_state) + uv__determine_vterm_state(handle); + + /* Remember the original console text attributes and cursor info. */ + uv_tty_capture_initial_style(&screen_buffer_info, &cursor_info); + + uv_tty_update_virtual_window(&screen_buffer_info); + + uv_sem_post(&uv_tty_output_lock); + } + + + uv_stream_init(loop, (uv_stream_t*) tty, UV_TTY); + uv_connection_init((uv_stream_t*) tty); + + tty->handle = handle; + tty->u.fd = fd; + tty->reqs_pending = 0; + tty->flags |= UV_HANDLE_BOUND; + + if (readable) { + /* Initialize TTY input specific fields. */ + tty->flags |= UV_HANDLE_TTY_READABLE | UV_HANDLE_READABLE; + /* TODO: remove me in v2.x. */ + tty->tty.rd.unused_ = NULL; + tty->tty.rd.read_line_buffer = uv_null_buf_; + tty->tty.rd.read_raw_wait = NULL; + + /* Init keycode-to-vt100 mapper state. */ + tty->tty.rd.last_key_len = 0; + tty->tty.rd.last_key_offset = 0; + tty->tty.rd.last_utf16_high_surrogate = 0; + memset(&tty->tty.rd.last_input_record, 0, sizeof tty->tty.rd.last_input_record); + } else { + /* TTY output specific fields. */ + tty->flags |= UV_HANDLE_WRITABLE; + + /* Init utf8-to-utf16 conversion state. */ + tty->tty.wr.utf8_bytes_left = 0; + tty->tty.wr.utf8_codepoint = 0; + + /* Initialize eol conversion state */ + tty->tty.wr.previous_eol = 0; + + /* Init ANSI parser state. */ + tty->tty.wr.ansi_parser_state = ANSI_NORMAL; + } + + return 0; +} + + +/* Set the default console text attributes based on how the console was + * configured when libuv started. + */ +static void uv_tty_capture_initial_style( + CONSOLE_SCREEN_BUFFER_INFO* screen_buffer_info, + CONSOLE_CURSOR_INFO* cursor_info) { + static int style_captured = 0; + + /* Only do this once. + Assumption: Caller has acquired uv_tty_output_lock. */ + if (style_captured) + return; + + /* Save raw win32 attributes. */ + uv_tty_default_text_attributes = screen_buffer_info->wAttributes; + + /* Convert black text on black background to use white text. */ + if (uv_tty_default_text_attributes == 0) + uv_tty_default_text_attributes = 7; + + /* Convert Win32 attributes to ANSI colors. */ + uv_tty_default_fg_color = 0; + uv_tty_default_bg_color = 0; + uv_tty_default_fg_bright = 0; + uv_tty_default_bg_bright = 0; + uv_tty_default_inverse = 0; + + if (uv_tty_default_text_attributes & FOREGROUND_RED) + uv_tty_default_fg_color |= 1; + + if (uv_tty_default_text_attributes & FOREGROUND_GREEN) + uv_tty_default_fg_color |= 2; + + if (uv_tty_default_text_attributes & FOREGROUND_BLUE) + uv_tty_default_fg_color |= 4; + + if (uv_tty_default_text_attributes & BACKGROUND_RED) + uv_tty_default_bg_color |= 1; + + if (uv_tty_default_text_attributes & BACKGROUND_GREEN) + uv_tty_default_bg_color |= 2; + + if (uv_tty_default_text_attributes & BACKGROUND_BLUE) + uv_tty_default_bg_color |= 4; + + if (uv_tty_default_text_attributes & FOREGROUND_INTENSITY) + uv_tty_default_fg_bright = 1; + + if (uv_tty_default_text_attributes & BACKGROUND_INTENSITY) + uv_tty_default_bg_bright = 1; + + if (uv_tty_default_text_attributes & COMMON_LVB_REVERSE_VIDEO) + uv_tty_default_inverse = 1; + + /* Save the cursor size and the cursor state. */ + uv_tty_default_cursor_info = *cursor_info; + + style_captured = 1; +} + + +int uv_tty_set_mode(uv_tty_t* tty, uv_tty_mode_t mode) { + DWORD flags; + unsigned char was_reading; + uv_alloc_cb alloc_cb; + uv_read_cb read_cb; + int err; + + if (!(tty->flags & UV_HANDLE_TTY_READABLE)) { + return UV_EINVAL; + } + + if (!!mode == !!(tty->flags & UV_HANDLE_TTY_RAW)) { + return 0; + } + + switch (mode) { + case UV_TTY_MODE_NORMAL: + flags = ENABLE_ECHO_INPUT | ENABLE_LINE_INPUT | ENABLE_PROCESSED_INPUT; + break; + case UV_TTY_MODE_RAW: + flags = ENABLE_WINDOW_INPUT; + break; + case UV_TTY_MODE_IO: + return UV_ENOTSUP; + default: + return UV_EINVAL; + } + + /* If currently reading, stop, and restart reading. */ + if (tty->flags & UV_HANDLE_READING) { + was_reading = 1; + alloc_cb = tty->alloc_cb; + read_cb = tty->read_cb; + err = uv_tty_read_stop(tty); + if (err) { + return uv_translate_sys_error(err); + } + } else { + was_reading = 0; + alloc_cb = NULL; + read_cb = NULL; + } + + uv_sem_wait(&uv_tty_output_lock); + if (!SetConsoleMode(tty->handle, flags)) { + err = uv_translate_sys_error(GetLastError()); + uv_sem_post(&uv_tty_output_lock); + return err; + } + uv_sem_post(&uv_tty_output_lock); + + /* Update flag. */ + tty->flags &= ~UV_HANDLE_TTY_RAW; + tty->flags |= mode ? UV_HANDLE_TTY_RAW : 0; + + /* If we just stopped reading, restart. */ + if (was_reading) { + err = uv_tty_read_start(tty, alloc_cb, read_cb); + if (err) { + return uv_translate_sys_error(err); + } + } + + return 0; +} + + +int uv_tty_get_winsize(uv_tty_t* tty, int* width, int* height) { + CONSOLE_SCREEN_BUFFER_INFO info; + + if (!GetConsoleScreenBufferInfo(tty->handle, &info)) { + return uv_translate_sys_error(GetLastError()); + } + + uv_sem_wait(&uv_tty_output_lock); + uv_tty_update_virtual_window(&info); + uv_sem_post(&uv_tty_output_lock); + + *width = uv_tty_virtual_width; + *height = uv_tty_virtual_height; + + return 0; +} + + +static void CALLBACK uv_tty_post_raw_read(void* data, BOOLEAN didTimeout) { + uv_loop_t* loop; + uv_tty_t* handle; + uv_req_t* req; + + assert(data); + assert(!didTimeout); + + req = (uv_req_t*) data; + handle = (uv_tty_t*) req->data; + loop = handle->loop; + + UnregisterWait(handle->tty.rd.read_raw_wait); + handle->tty.rd.read_raw_wait = NULL; + + SET_REQ_SUCCESS(req); + POST_COMPLETION_FOR_REQ(loop, req); +} + + +static void uv_tty_queue_read_raw(uv_loop_t* loop, uv_tty_t* handle) { + uv_read_t* req; + BOOL r; + + assert(handle->flags & UV_HANDLE_READING); + assert(!(handle->flags & UV_HANDLE_READ_PENDING)); + + assert(handle->handle && handle->handle != INVALID_HANDLE_VALUE); + + handle->tty.rd.read_line_buffer = uv_null_buf_; + + req = &handle->read_req; + memset(&req->u.io.overlapped, 0, sizeof(req->u.io.overlapped)); + + r = RegisterWaitForSingleObject(&handle->tty.rd.read_raw_wait, + handle->handle, + uv_tty_post_raw_read, + (void*) req, + INFINITE, + WT_EXECUTEINWAITTHREAD | WT_EXECUTEONLYONCE); + if (!r) { + handle->tty.rd.read_raw_wait = NULL; + SET_REQ_ERROR(req, GetLastError()); + uv_insert_pending_req(loop, (uv_req_t*)req); + } + + handle->flags |= UV_HANDLE_READ_PENDING; + handle->reqs_pending++; +} + + +static DWORD CALLBACK uv_tty_line_read_thread(void* data) { + uv_loop_t* loop; + uv_tty_t* handle; + uv_req_t* req; + DWORD bytes, read_bytes; + WCHAR utf16[MAX_INPUT_BUFFER_LENGTH / 3]; + DWORD chars, read_chars; + LONG status; + COORD pos; + BOOL read_console_success; + + assert(data); + + req = (uv_req_t*) data; + handle = (uv_tty_t*) req->data; + loop = handle->loop; + + assert(handle->tty.rd.read_line_buffer.base != NULL); + assert(handle->tty.rd.read_line_buffer.len > 0); + + /* ReadConsole can't handle big buffers. */ + if (handle->tty.rd.read_line_buffer.len < MAX_INPUT_BUFFER_LENGTH) { + bytes = handle->tty.rd.read_line_buffer.len; + } else { + bytes = MAX_INPUT_BUFFER_LENGTH; + } + + /* At last, unicode! One utf-16 codeunit never takes more than 3 utf-8 + * codeunits to encode. */ + chars = bytes / 3; + + status = InterlockedExchange(&uv__read_console_status, IN_PROGRESS); + if (status == TRAP_REQUESTED) { + SET_REQ_SUCCESS(req); + req->u.io.overlapped.InternalHigh = 0; + POST_COMPLETION_FOR_REQ(loop, req); + return 0; + } + + read_console_success = ReadConsoleW(handle->handle, + (void*) utf16, + chars, + &read_chars, + NULL); + + if (read_console_success) { + read_bytes = WideCharToMultiByte(CP_UTF8, + 0, + utf16, + read_chars, + handle->tty.rd.read_line_buffer.base, + bytes, + NULL, + NULL); + SET_REQ_SUCCESS(req); + req->u.io.overlapped.InternalHigh = read_bytes; + } else { + SET_REQ_ERROR(req, GetLastError()); + } + + status = InterlockedExchange(&uv__read_console_status, COMPLETED); + + if (status == TRAP_REQUESTED) { + /* If we canceled the read by sending a VK_RETURN event, restore the + screen state to undo the visual effect of the VK_RETURN */ + if (read_console_success && InterlockedOr(&uv__restore_screen_state, 0)) { + HANDLE active_screen_buffer; + active_screen_buffer = CreateFileA("conout$", + GENERIC_READ | GENERIC_WRITE, + FILE_SHARE_READ | FILE_SHARE_WRITE, + NULL, + OPEN_EXISTING, + FILE_ATTRIBUTE_NORMAL, + NULL); + if (active_screen_buffer != INVALID_HANDLE_VALUE) { + pos = uv__saved_screen_state.dwCursorPosition; + + /* If the cursor was at the bottom line of the screen buffer, the + VK_RETURN would have caused the buffer contents to scroll up by one + line. The right position to reset the cursor to is therefore one line + higher */ + if (pos.Y == uv__saved_screen_state.dwSize.Y - 1) + pos.Y--; + + SetConsoleCursorPosition(active_screen_buffer, pos); + CloseHandle(active_screen_buffer); + } + } + uv_sem_post(&uv_tty_output_lock); + } + POST_COMPLETION_FOR_REQ(loop, req); + return 0; +} + + +static void uv_tty_queue_read_line(uv_loop_t* loop, uv_tty_t* handle) { + uv_read_t* req; + BOOL r; + + assert(handle->flags & UV_HANDLE_READING); + assert(!(handle->flags & UV_HANDLE_READ_PENDING)); + assert(handle->handle && handle->handle != INVALID_HANDLE_VALUE); + + req = &handle->read_req; + memset(&req->u.io.overlapped, 0, sizeof(req->u.io.overlapped)); + + handle->tty.rd.read_line_buffer = uv_buf_init(NULL, 0); + handle->alloc_cb((uv_handle_t*) handle, 8192, &handle->tty.rd.read_line_buffer); + if (handle->tty.rd.read_line_buffer.base == NULL || + handle->tty.rd.read_line_buffer.len == 0) { + handle->read_cb((uv_stream_t*) handle, + UV_ENOBUFS, + &handle->tty.rd.read_line_buffer); + return; + } + assert(handle->tty.rd.read_line_buffer.base != NULL); + + /* Reset flags No locking is required since there cannot be a line read + in progress. We are also relying on the memory barrier provided by + QueueUserWorkItem*/ + uv__restore_screen_state = FALSE; + uv__read_console_status = NOT_STARTED; + r = QueueUserWorkItem(uv_tty_line_read_thread, + (void*) req, + WT_EXECUTELONGFUNCTION); + if (!r) { + SET_REQ_ERROR(req, GetLastError()); + uv_insert_pending_req(loop, (uv_req_t*)req); + } + + handle->flags |= UV_HANDLE_READ_PENDING; + handle->reqs_pending++; +} + + +static void uv_tty_queue_read(uv_loop_t* loop, uv_tty_t* handle) { + if (handle->flags & UV_HANDLE_TTY_RAW) { + uv_tty_queue_read_raw(loop, handle); + } else { + uv_tty_queue_read_line(loop, handle); + } +} + + +static const char* get_vt100_fn_key(DWORD code, char shift, char ctrl, + size_t* len) { +#define VK_CASE(vk, normal_str, shift_str, ctrl_str, shift_ctrl_str) \ + case (vk): \ + if (shift && ctrl) { \ + *len = sizeof shift_ctrl_str; \ + return "\033" shift_ctrl_str; \ + } else if (shift) { \ + *len = sizeof shift_str ; \ + return "\033" shift_str; \ + } else if (ctrl) { \ + *len = sizeof ctrl_str; \ + return "\033" ctrl_str; \ + } else { \ + *len = sizeof normal_str; \ + return "\033" normal_str; \ + } + + switch (code) { + /* These mappings are the same as Cygwin's. Unmodified and alt-modified + * keypad keys comply with linux console, modifiers comply with xterm + * modifier usage. F1. f12 and shift-f1. f10 comply with linux console, f6. + * f12 with and without modifiers comply with rxvt. */ + VK_CASE(VK_INSERT, "[2~", "[2;2~", "[2;5~", "[2;6~") + VK_CASE(VK_END, "[4~", "[4;2~", "[4;5~", "[4;6~") + VK_CASE(VK_DOWN, "[B", "[1;2B", "[1;5B", "[1;6B") + VK_CASE(VK_NEXT, "[6~", "[6;2~", "[6;5~", "[6;6~") + VK_CASE(VK_LEFT, "[D", "[1;2D", "[1;5D", "[1;6D") + VK_CASE(VK_CLEAR, "[G", "[1;2G", "[1;5G", "[1;6G") + VK_CASE(VK_RIGHT, "[C", "[1;2C", "[1;5C", "[1;6C") + VK_CASE(VK_UP, "[A", "[1;2A", "[1;5A", "[1;6A") + VK_CASE(VK_HOME, "[1~", "[1;2~", "[1;5~", "[1;6~") + VK_CASE(VK_PRIOR, "[5~", "[5;2~", "[5;5~", "[5;6~") + VK_CASE(VK_DELETE, "[3~", "[3;2~", "[3;5~", "[3;6~") + VK_CASE(VK_NUMPAD0, "[2~", "[2;2~", "[2;5~", "[2;6~") + VK_CASE(VK_NUMPAD1, "[4~", "[4;2~", "[4;5~", "[4;6~") + VK_CASE(VK_NUMPAD2, "[B", "[1;2B", "[1;5B", "[1;6B") + VK_CASE(VK_NUMPAD3, "[6~", "[6;2~", "[6;5~", "[6;6~") + VK_CASE(VK_NUMPAD4, "[D", "[1;2D", "[1;5D", "[1;6D") + VK_CASE(VK_NUMPAD5, "[G", "[1;2G", "[1;5G", "[1;6G") + VK_CASE(VK_NUMPAD6, "[C", "[1;2C", "[1;5C", "[1;6C") + VK_CASE(VK_NUMPAD7, "[A", "[1;2A", "[1;5A", "[1;6A") + VK_CASE(VK_NUMPAD8, "[1~", "[1;2~", "[1;5~", "[1;6~") + VK_CASE(VK_NUMPAD9, "[5~", "[5;2~", "[5;5~", "[5;6~") + VK_CASE(VK_DECIMAL, "[3~", "[3;2~", "[3;5~", "[3;6~") + VK_CASE(VK_F1, "[[A", "[23~", "[11^", "[23^" ) + VK_CASE(VK_F2, "[[B", "[24~", "[12^", "[24^" ) + VK_CASE(VK_F3, "[[C", "[25~", "[13^", "[25^" ) + VK_CASE(VK_F4, "[[D", "[26~", "[14^", "[26^" ) + VK_CASE(VK_F5, "[[E", "[28~", "[15^", "[28^" ) + VK_CASE(VK_F6, "[17~", "[29~", "[17^", "[29^" ) + VK_CASE(VK_F7, "[18~", "[31~", "[18^", "[31^" ) + VK_CASE(VK_F8, "[19~", "[32~", "[19^", "[32^" ) + VK_CASE(VK_F9, "[20~", "[33~", "[20^", "[33^" ) + VK_CASE(VK_F10, "[21~", "[34~", "[21^", "[34^" ) + VK_CASE(VK_F11, "[23~", "[23$", "[23^", "[23@" ) + VK_CASE(VK_F12, "[24~", "[24$", "[24^", "[24@" ) + + default: + *len = 0; + return NULL; + } +#undef VK_CASE +} + + +void uv_process_tty_read_raw_req(uv_loop_t* loop, uv_tty_t* handle, + uv_req_t* req) { + /* Shortcut for handle->tty.rd.last_input_record.Event.KeyEvent. */ +#define KEV handle->tty.rd.last_input_record.Event.KeyEvent + + DWORD records_left, records_read; + uv_buf_t buf; + off_t buf_used; + + assert(handle->type == UV_TTY); + assert(handle->flags & UV_HANDLE_TTY_READABLE); + handle->flags &= ~UV_HANDLE_READ_PENDING; + + if (!(handle->flags & UV_HANDLE_READING) || + !(handle->flags & UV_HANDLE_TTY_RAW)) { + goto out; + } + + if (!REQ_SUCCESS(req)) { + /* An error occurred while waiting for the event. */ + if ((handle->flags & UV_HANDLE_READING)) { + handle->flags &= ~UV_HANDLE_READING; + handle->read_cb((uv_stream_t*)handle, + uv_translate_sys_error(GET_REQ_ERROR(req)), + &uv_null_buf_); + } + goto out; + } + + /* Fetch the number of events */ + if (!GetNumberOfConsoleInputEvents(handle->handle, &records_left)) { + handle->flags &= ~UV_HANDLE_READING; + DECREASE_ACTIVE_COUNT(loop, handle); + handle->read_cb((uv_stream_t*)handle, + uv_translate_sys_error(GetLastError()), + &uv_null_buf_); + goto out; + } + + /* Windows sends a lot of events that we're not interested in, so buf will be + * allocated on demand, when there's actually something to emit. */ + buf = uv_null_buf_; + buf_used = 0; + + while ((records_left > 0 || handle->tty.rd.last_key_len > 0) && + (handle->flags & UV_HANDLE_READING)) { + if (handle->tty.rd.last_key_len == 0) { + /* Read the next input record */ + if (!ReadConsoleInputW(handle->handle, + &handle->tty.rd.last_input_record, + 1, + &records_read)) { + handle->flags &= ~UV_HANDLE_READING; + DECREASE_ACTIVE_COUNT(loop, handle); + handle->read_cb((uv_stream_t*) handle, + uv_translate_sys_error(GetLastError()), + &buf); + goto out; + } + records_left--; + + /* We might be not subscribed to EVENT_CONSOLE_LAYOUT or we might be + * running under some TTY emulator that does not send those events. */ + if (handle->tty.rd.last_input_record.EventType == WINDOW_BUFFER_SIZE_EVENT) { + uv__tty_console_signal_resize(); + } + + /* Ignore other events that are not key events. */ + if (handle->tty.rd.last_input_record.EventType != KEY_EVENT) { + continue; + } + + /* Ignore keyup events, unless the left alt key was held and a valid + * unicode character was emitted. */ + if (!KEV.bKeyDown && + (KEV.wVirtualKeyCode != VK_MENU || + KEV.uChar.UnicodeChar == 0)) { + continue; + } + + /* Ignore keypresses to numpad number keys if the left alt is held + * because the user is composing a character, or windows simulating this. + */ + if ((KEV.dwControlKeyState & LEFT_ALT_PRESSED) && + !(KEV.dwControlKeyState & ENHANCED_KEY) && + (KEV.wVirtualKeyCode == VK_INSERT || + KEV.wVirtualKeyCode == VK_END || + KEV.wVirtualKeyCode == VK_DOWN || + KEV.wVirtualKeyCode == VK_NEXT || + KEV.wVirtualKeyCode == VK_LEFT || + KEV.wVirtualKeyCode == VK_CLEAR || + KEV.wVirtualKeyCode == VK_RIGHT || + KEV.wVirtualKeyCode == VK_HOME || + KEV.wVirtualKeyCode == VK_UP || + KEV.wVirtualKeyCode == VK_PRIOR || + KEV.wVirtualKeyCode == VK_NUMPAD0 || + KEV.wVirtualKeyCode == VK_NUMPAD1 || + KEV.wVirtualKeyCode == VK_NUMPAD2 || + KEV.wVirtualKeyCode == VK_NUMPAD3 || + KEV.wVirtualKeyCode == VK_NUMPAD4 || + KEV.wVirtualKeyCode == VK_NUMPAD5 || + KEV.wVirtualKeyCode == VK_NUMPAD6 || + KEV.wVirtualKeyCode == VK_NUMPAD7 || + KEV.wVirtualKeyCode == VK_NUMPAD8 || + KEV.wVirtualKeyCode == VK_NUMPAD9)) { + continue; + } + + if (KEV.uChar.UnicodeChar != 0) { + int prefix_len, char_len; + + /* Character key pressed */ + if (KEV.uChar.UnicodeChar >= 0xD800 && + KEV.uChar.UnicodeChar < 0xDC00) { + /* UTF-16 high surrogate */ + handle->tty.rd.last_utf16_high_surrogate = KEV.uChar.UnicodeChar; + continue; + } + + /* Prefix with \u033 if alt was held, but alt was not used as part a + * compose sequence. */ + if ((KEV.dwControlKeyState & (LEFT_ALT_PRESSED | RIGHT_ALT_PRESSED)) + && !(KEV.dwControlKeyState & (LEFT_CTRL_PRESSED | + RIGHT_CTRL_PRESSED)) && KEV.bKeyDown) { + handle->tty.rd.last_key[0] = '\033'; + prefix_len = 1; + } else { + prefix_len = 0; + } + + if (KEV.uChar.UnicodeChar >= 0xDC00 && + KEV.uChar.UnicodeChar < 0xE000) { + /* UTF-16 surrogate pair */ + WCHAR utf16_buffer[2]; + utf16_buffer[0] = handle->tty.rd.last_utf16_high_surrogate; + utf16_buffer[1] = KEV.uChar.UnicodeChar; + char_len = WideCharToMultiByte(CP_UTF8, + 0, + utf16_buffer, + 2, + &handle->tty.rd.last_key[prefix_len], + sizeof handle->tty.rd.last_key, + NULL, + NULL); + } else { + /* Single UTF-16 character */ + char_len = WideCharToMultiByte(CP_UTF8, + 0, + &KEV.uChar.UnicodeChar, + 1, + &handle->tty.rd.last_key[prefix_len], + sizeof handle->tty.rd.last_key, + NULL, + NULL); + } + + /* Whatever happened, the last character wasn't a high surrogate. */ + handle->tty.rd.last_utf16_high_surrogate = 0; + + /* If the utf16 character(s) couldn't be converted something must be + * wrong. */ + if (!char_len) { + handle->flags &= ~UV_HANDLE_READING; + DECREASE_ACTIVE_COUNT(loop, handle); + handle->read_cb((uv_stream_t*) handle, + uv_translate_sys_error(GetLastError()), + &buf); + goto out; + } + + handle->tty.rd.last_key_len = (unsigned char) (prefix_len + char_len); + handle->tty.rd.last_key_offset = 0; + continue; + + } else { + /* Function key pressed */ + const char* vt100; + size_t prefix_len, vt100_len; + + vt100 = get_vt100_fn_key(KEV.wVirtualKeyCode, + !!(KEV.dwControlKeyState & SHIFT_PRESSED), + !!(KEV.dwControlKeyState & ( + LEFT_CTRL_PRESSED | + RIGHT_CTRL_PRESSED)), + &vt100_len); + + /* If we were unable to map to a vt100 sequence, just ignore. */ + if (!vt100) { + continue; + } + + /* Prefix with \x033 when the alt key was held. */ + if (KEV.dwControlKeyState & (LEFT_ALT_PRESSED | RIGHT_ALT_PRESSED)) { + handle->tty.rd.last_key[0] = '\033'; + prefix_len = 1; + } else { + prefix_len = 0; + } + + /* Copy the vt100 sequence to the handle buffer. */ + assert(prefix_len + vt100_len < sizeof handle->tty.rd.last_key); + memcpy(&handle->tty.rd.last_key[prefix_len], vt100, vt100_len); + + handle->tty.rd.last_key_len = (unsigned char) (prefix_len + vt100_len); + handle->tty.rd.last_key_offset = 0; + continue; + } + } else { + /* Copy any bytes left from the last keypress to the user buffer. */ + if (handle->tty.rd.last_key_offset < handle->tty.rd.last_key_len) { + /* Allocate a buffer if needed */ + if (buf_used == 0) { + buf = uv_buf_init(NULL, 0); + handle->alloc_cb((uv_handle_t*) handle, 1024, &buf); + if (buf.base == NULL || buf.len == 0) { + handle->read_cb((uv_stream_t*) handle, UV_ENOBUFS, &buf); + goto out; + } + assert(buf.base != NULL); + } + + buf.base[buf_used++] = handle->tty.rd.last_key[handle->tty.rd.last_key_offset++]; + + /* If the buffer is full, emit it */ + if ((size_t) buf_used == buf.len) { + handle->read_cb((uv_stream_t*) handle, buf_used, &buf); + buf = uv_null_buf_; + buf_used = 0; + } + + continue; + } + + /* Apply dwRepeat from the last input record. */ + if (--KEV.wRepeatCount > 0) { + handle->tty.rd.last_key_offset = 0; + continue; + } + + handle->tty.rd.last_key_len = 0; + continue; + } + } + + /* Send the buffer back to the user */ + if (buf_used > 0) { + handle->read_cb((uv_stream_t*) handle, buf_used, &buf); + } + + out: + /* Wait for more input events. */ + if ((handle->flags & UV_HANDLE_READING) && + !(handle->flags & UV_HANDLE_READ_PENDING)) { + uv_tty_queue_read(loop, handle); + } + + DECREASE_PENDING_REQ_COUNT(handle); + +#undef KEV +} + + + +void uv_process_tty_read_line_req(uv_loop_t* loop, uv_tty_t* handle, + uv_req_t* req) { + uv_buf_t buf; + + assert(handle->type == UV_TTY); + assert(handle->flags & UV_HANDLE_TTY_READABLE); + + buf = handle->tty.rd.read_line_buffer; + + handle->flags &= ~UV_HANDLE_READ_PENDING; + handle->tty.rd.read_line_buffer = uv_null_buf_; + + if (!REQ_SUCCESS(req)) { + /* Read was not successful */ + if (handle->flags & UV_HANDLE_READING) { + /* Real error */ + handle->flags &= ~UV_HANDLE_READING; + DECREASE_ACTIVE_COUNT(loop, handle); + handle->read_cb((uv_stream_t*) handle, + uv_translate_sys_error(GET_REQ_ERROR(req)), + &buf); + } + } else { + if (!(handle->flags & UV_HANDLE_CANCELLATION_PENDING) && + req->u.io.overlapped.InternalHigh != 0) { + /* Read successful. TODO: read unicode, convert to utf-8 */ + DWORD bytes = req->u.io.overlapped.InternalHigh; + handle->read_cb((uv_stream_t*) handle, bytes, &buf); + } + handle->flags &= ~UV_HANDLE_CANCELLATION_PENDING; + } + + /* Wait for more input events. */ + if ((handle->flags & UV_HANDLE_READING) && + !(handle->flags & UV_HANDLE_READ_PENDING)) { + uv_tty_queue_read(loop, handle); + } + + DECREASE_PENDING_REQ_COUNT(handle); +} + + +void uv_process_tty_read_req(uv_loop_t* loop, uv_tty_t* handle, + uv_req_t* req) { + assert(handle->type == UV_TTY); + assert(handle->flags & UV_HANDLE_TTY_READABLE); + + /* If the read_line_buffer member is zero, it must have been an raw read. + * Otherwise it was a line-buffered read. FIXME: This is quite obscure. Use a + * flag or something. */ + if (handle->tty.rd.read_line_buffer.len == 0) { + uv_process_tty_read_raw_req(loop, handle, req); + } else { + uv_process_tty_read_line_req(loop, handle, req); + } +} + + +int uv_tty_read_start(uv_tty_t* handle, uv_alloc_cb alloc_cb, + uv_read_cb read_cb) { + uv_loop_t* loop = handle->loop; + + if (!(handle->flags & UV_HANDLE_TTY_READABLE)) { + return ERROR_INVALID_PARAMETER; + } + + handle->flags |= UV_HANDLE_READING; + INCREASE_ACTIVE_COUNT(loop, handle); + handle->read_cb = read_cb; + handle->alloc_cb = alloc_cb; + + /* If reading was stopped and then started again, there could still be a read + * request pending. */ + if (handle->flags & UV_HANDLE_READ_PENDING) { + return 0; + } + + /* Maybe the user stopped reading half-way while processing key events. + * Short-circuit if this could be the case. */ + if (handle->tty.rd.last_key_len > 0) { + SET_REQ_SUCCESS(&handle->read_req); + uv_insert_pending_req(handle->loop, (uv_req_t*) &handle->read_req); + /* Make sure no attempt is made to insert it again until it's handled. */ + handle->flags |= UV_HANDLE_READ_PENDING; + handle->reqs_pending++; + return 0; + } + + uv_tty_queue_read(loop, handle); + + return 0; +} + + +int uv_tty_read_stop(uv_tty_t* handle) { + INPUT_RECORD record; + DWORD written, err; + + handle->flags &= ~UV_HANDLE_READING; + DECREASE_ACTIVE_COUNT(handle->loop, handle); + + if (!(handle->flags & UV_HANDLE_READ_PENDING)) + return 0; + + if (handle->flags & UV_HANDLE_TTY_RAW) { + /* Cancel raw read. Write some bullshit event to force the console wait to + * return. */ + memset(&record, 0, sizeof record); + record.EventType = FOCUS_EVENT; + if (!WriteConsoleInputW(handle->handle, &record, 1, &written)) { + return GetLastError(); + } + } else if (!(handle->flags & UV_HANDLE_CANCELLATION_PENDING)) { + /* Cancel line-buffered read if not already pending */ + err = uv__cancel_read_console(handle); + if (err) + return err; + + handle->flags |= UV_HANDLE_CANCELLATION_PENDING; + } + + return 0; +} + +static int uv__cancel_read_console(uv_tty_t* handle) { + HANDLE active_screen_buffer = INVALID_HANDLE_VALUE; + INPUT_RECORD record; + DWORD written; + DWORD err = 0; + LONG status; + + assert(!(handle->flags & UV_HANDLE_CANCELLATION_PENDING)); + + /* Hold the output lock during the cancellation, to ensure that further + writes don't interfere with the screen state. It will be the ReadConsole + thread's responsibility to release the lock. */ + uv_sem_wait(&uv_tty_output_lock); + status = InterlockedExchange(&uv__read_console_status, TRAP_REQUESTED); + if (status != IN_PROGRESS) { + /* Either we have managed to set a trap for the other thread before + ReadConsole is called, or ReadConsole has returned because the user + has pressed ENTER. In either case, there is nothing else to do. */ + uv_sem_post(&uv_tty_output_lock); + return 0; + } + + /* Save screen state before sending the VK_RETURN event */ + active_screen_buffer = CreateFileA("conout$", + GENERIC_READ | GENERIC_WRITE, + FILE_SHARE_READ | FILE_SHARE_WRITE, + NULL, + OPEN_EXISTING, + FILE_ATTRIBUTE_NORMAL, + NULL); + + if (active_screen_buffer != INVALID_HANDLE_VALUE && + GetConsoleScreenBufferInfo(active_screen_buffer, + &uv__saved_screen_state)) { + InterlockedOr(&uv__restore_screen_state, 1); + } + + /* Write enter key event to force the console wait to return. */ + record.EventType = KEY_EVENT; + record.Event.KeyEvent.bKeyDown = TRUE; + record.Event.KeyEvent.wRepeatCount = 1; + record.Event.KeyEvent.wVirtualKeyCode = VK_RETURN; + record.Event.KeyEvent.wVirtualScanCode = + MapVirtualKeyW(VK_RETURN, MAPVK_VK_TO_VSC); + record.Event.KeyEvent.uChar.UnicodeChar = L'\r'; + record.Event.KeyEvent.dwControlKeyState = 0; + if (!WriteConsoleInputW(handle->handle, &record, 1, &written)) + err = GetLastError(); + + if (active_screen_buffer != INVALID_HANDLE_VALUE) + CloseHandle(active_screen_buffer); + + return err; +} + + +static void uv_tty_update_virtual_window(CONSOLE_SCREEN_BUFFER_INFO* info) { + uv_tty_virtual_width = info->dwSize.X; + uv_tty_virtual_height = info->srWindow.Bottom - info->srWindow.Top + 1; + + /* Recompute virtual window offset row. */ + if (uv_tty_virtual_offset == -1) { + uv_tty_virtual_offset = info->dwCursorPosition.Y; + } else if (uv_tty_virtual_offset < info->dwCursorPosition.Y - + uv_tty_virtual_height + 1) { + /* If suddenly find the cursor outside of the virtual window, it must have + * somehow scrolled. Update the virtual window offset. */ + uv_tty_virtual_offset = info->dwCursorPosition.Y - + uv_tty_virtual_height + 1; + } + if (uv_tty_virtual_offset + uv_tty_virtual_height > info->dwSize.Y) { + uv_tty_virtual_offset = info->dwSize.Y - uv_tty_virtual_height; + } + if (uv_tty_virtual_offset < 0) { + uv_tty_virtual_offset = 0; + } +} + + +static COORD uv_tty_make_real_coord(uv_tty_t* handle, + CONSOLE_SCREEN_BUFFER_INFO* info, int x, unsigned char x_relative, int y, + unsigned char y_relative) { + COORD result; + + uv_tty_update_virtual_window(info); + + /* Adjust y position */ + if (y_relative) { + y = info->dwCursorPosition.Y + y; + } else { + y = uv_tty_virtual_offset + y; + } + /* Clip y to virtual client rectangle */ + if (y < uv_tty_virtual_offset) { + y = uv_tty_virtual_offset; + } else if (y >= uv_tty_virtual_offset + uv_tty_virtual_height) { + y = uv_tty_virtual_offset + uv_tty_virtual_height - 1; + } + + /* Adjust x */ + if (x_relative) { + x = info->dwCursorPosition.X + x; + } + /* Clip x */ + if (x < 0) { + x = 0; + } else if (x >= uv_tty_virtual_width) { + x = uv_tty_virtual_width - 1; + } + + result.X = (unsigned short) x; + result.Y = (unsigned short) y; + return result; +} + + +static int uv_tty_emit_text(uv_tty_t* handle, WCHAR buffer[], DWORD length, + DWORD* error) { + DWORD written; + + if (*error != ERROR_SUCCESS) { + return -1; + } + + if (!WriteConsoleW(handle->handle, + (void*) buffer, + length, + &written, + NULL)) { + *error = GetLastError(); + return -1; + } + + return 0; +} + + +static int uv_tty_move_caret(uv_tty_t* handle, int x, unsigned char x_relative, + int y, unsigned char y_relative, DWORD* error) { + CONSOLE_SCREEN_BUFFER_INFO info; + COORD pos; + + if (*error != ERROR_SUCCESS) { + return -1; + } + + retry: + if (!GetConsoleScreenBufferInfo(handle->handle, &info)) { + *error = GetLastError(); + } + + pos = uv_tty_make_real_coord(handle, &info, x, x_relative, y, y_relative); + + if (!SetConsoleCursorPosition(handle->handle, pos)) { + if (GetLastError() == ERROR_INVALID_PARAMETER) { + /* The console may be resized - retry */ + goto retry; + } else { + *error = GetLastError(); + return -1; + } + } + + return 0; +} + + +static int uv_tty_reset(uv_tty_t* handle, DWORD* error) { + const COORD origin = {0, 0}; + const WORD char_attrs = uv_tty_default_text_attributes; + CONSOLE_SCREEN_BUFFER_INFO screen_buffer_info; + DWORD count, written; + + if (*error != ERROR_SUCCESS) { + return -1; + } + + /* Reset original text attributes. */ + if (!SetConsoleTextAttribute(handle->handle, char_attrs)) { + *error = GetLastError(); + return -1; + } + + /* Move the cursor position to (0, 0). */ + if (!SetConsoleCursorPosition(handle->handle, origin)) { + *error = GetLastError(); + return -1; + } + + /* Clear the screen buffer. */ + retry: + if (!GetConsoleScreenBufferInfo(handle->handle, &screen_buffer_info)) { + *error = GetLastError(); + return -1; + } + + count = screen_buffer_info.dwSize.X * screen_buffer_info.dwSize.Y; + + if (!(FillConsoleOutputCharacterW(handle->handle, + L'\x20', + count, + origin, + &written) && + FillConsoleOutputAttribute(handle->handle, + char_attrs, + written, + origin, + &written))) { + if (GetLastError() == ERROR_INVALID_PARAMETER) { + /* The console may be resized - retry */ + goto retry; + } else { + *error = GetLastError(); + return -1; + } + } + + /* Move the virtual window up to the top. */ + uv_tty_virtual_offset = 0; + uv_tty_update_virtual_window(&screen_buffer_info); + + /* Reset the cursor size and the cursor state. */ + if (!SetConsoleCursorInfo(handle->handle, &uv_tty_default_cursor_info)) { + *error = GetLastError(); + return -1; + } + + return 0; +} + + +static int uv_tty_clear(uv_tty_t* handle, int dir, char entire_screen, + DWORD* error) { + CONSOLE_SCREEN_BUFFER_INFO info; + COORD start, end; + DWORD count, written; + + int x1, x2, y1, y2; + int x1r, x2r, y1r, y2r; + + if (*error != ERROR_SUCCESS) { + return -1; + } + + if (dir == 0) { + /* Clear from current position */ + x1 = 0; + x1r = 1; + } else { + /* Clear from column 0 */ + x1 = 0; + x1r = 0; + } + + if (dir == 1) { + /* Clear to current position */ + x2 = 0; + x2r = 1; + } else { + /* Clear to end of row. We pretend the console is 65536 characters wide, + * uv_tty_make_real_coord will clip it to the actual console width. */ + x2 = 0xffff; + x2r = 0; + } + + if (!entire_screen) { + /* Stay on our own row */ + y1 = y2 = 0; + y1r = y2r = 1; + } else { + /* Apply columns direction to row */ + y1 = x1; + y1r = x1r; + y2 = x2; + y2r = x2r; + } + + retry: + if (!GetConsoleScreenBufferInfo(handle->handle, &info)) { + *error = GetLastError(); + return -1; + } + + start = uv_tty_make_real_coord(handle, &info, x1, x1r, y1, y1r); + end = uv_tty_make_real_coord(handle, &info, x2, x2r, y2, y2r); + count = (end.Y * info.dwSize.X + end.X) - + (start.Y * info.dwSize.X + start.X) + 1; + + if (!(FillConsoleOutputCharacterW(handle->handle, + L'\x20', + count, + start, + &written) && + FillConsoleOutputAttribute(handle->handle, + info.wAttributes, + written, + start, + &written))) { + if (GetLastError() == ERROR_INVALID_PARAMETER) { + /* The console may be resized - retry */ + goto retry; + } else { + *error = GetLastError(); + return -1; + } + } + + return 0; +} + +#define FLIP_FGBG \ + do { \ + WORD fg = info.wAttributes & 0xF; \ + WORD bg = info.wAttributes & 0xF0; \ + info.wAttributes &= 0xFF00; \ + info.wAttributes |= fg << 4; \ + info.wAttributes |= bg >> 4; \ + } while (0) + +static int uv_tty_set_style(uv_tty_t* handle, DWORD* error) { + unsigned short argc = handle->tty.wr.ansi_csi_argc; + unsigned short* argv = handle->tty.wr.ansi_csi_argv; + int i; + CONSOLE_SCREEN_BUFFER_INFO info; + + char fg_color = -1, bg_color = -1; + char fg_bright = -1, bg_bright = -1; + char inverse = -1; + + if (argc == 0) { + /* Reset mode */ + fg_color = uv_tty_default_fg_color; + bg_color = uv_tty_default_bg_color; + fg_bright = uv_tty_default_fg_bright; + bg_bright = uv_tty_default_bg_bright; + inverse = uv_tty_default_inverse; + } + + for (i = 0; i < argc; i++) { + short arg = argv[i]; + + if (arg == 0) { + /* Reset mode */ + fg_color = uv_tty_default_fg_color; + bg_color = uv_tty_default_bg_color; + fg_bright = uv_tty_default_fg_bright; + bg_bright = uv_tty_default_bg_bright; + inverse = uv_tty_default_inverse; + + } else if (arg == 1) { + /* Foreground bright on */ + fg_bright = 1; + + } else if (arg == 2) { + /* Both bright off */ + fg_bright = 0; + bg_bright = 0; + + } else if (arg == 5) { + /* Background bright on */ + bg_bright = 1; + + } else if (arg == 7) { + /* Inverse: on */ + inverse = 1; + + } else if (arg == 21 || arg == 22) { + /* Foreground bright off */ + fg_bright = 0; + + } else if (arg == 25) { + /* Background bright off */ + bg_bright = 0; + + } else if (arg == 27) { + /* Inverse: off */ + inverse = 0; + + } else if (arg >= 30 && arg <= 37) { + /* Set foreground color */ + fg_color = arg - 30; + + } else if (arg == 39) { + /* Default text color */ + fg_color = uv_tty_default_fg_color; + fg_bright = uv_tty_default_fg_bright; + + } else if (arg >= 40 && arg <= 47) { + /* Set background color */ + bg_color = arg - 40; + + } else if (arg == 49) { + /* Default background color */ + bg_color = uv_tty_default_bg_color; + bg_bright = uv_tty_default_bg_bright; + + } else if (arg >= 90 && arg <= 97) { + /* Set bold foreground color */ + fg_bright = 1; + fg_color = arg - 90; + + } else if (arg >= 100 && arg <= 107) { + /* Set bold background color */ + bg_bright = 1; + bg_color = arg - 100; + + } + } + + if (fg_color == -1 && bg_color == -1 && fg_bright == -1 && + bg_bright == -1 && inverse == -1) { + /* Nothing changed */ + return 0; + } + + if (!GetConsoleScreenBufferInfo(handle->handle, &info)) { + *error = GetLastError(); + return -1; + } + + if ((info.wAttributes & COMMON_LVB_REVERSE_VIDEO) > 0) { + FLIP_FGBG; + } + + if (fg_color != -1) { + info.wAttributes &= ~(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE); + if (fg_color & 1) info.wAttributes |= FOREGROUND_RED; + if (fg_color & 2) info.wAttributes |= FOREGROUND_GREEN; + if (fg_color & 4) info.wAttributes |= FOREGROUND_BLUE; + } + + if (fg_bright != -1) { + if (fg_bright) { + info.wAttributes |= FOREGROUND_INTENSITY; + } else { + info.wAttributes &= ~FOREGROUND_INTENSITY; + } + } + + if (bg_color != -1) { + info.wAttributes &= ~(BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE); + if (bg_color & 1) info.wAttributes |= BACKGROUND_RED; + if (bg_color & 2) info.wAttributes |= BACKGROUND_GREEN; + if (bg_color & 4) info.wAttributes |= BACKGROUND_BLUE; + } + + if (bg_bright != -1) { + if (bg_bright) { + info.wAttributes |= BACKGROUND_INTENSITY; + } else { + info.wAttributes &= ~BACKGROUND_INTENSITY; + } + } + + if (inverse != -1) { + if (inverse) { + info.wAttributes |= COMMON_LVB_REVERSE_VIDEO; + } else { + info.wAttributes &= ~COMMON_LVB_REVERSE_VIDEO; + } + } + + if ((info.wAttributes & COMMON_LVB_REVERSE_VIDEO) > 0) { + FLIP_FGBG; + } + + if (!SetConsoleTextAttribute(handle->handle, info.wAttributes)) { + *error = GetLastError(); + return -1; + } + + return 0; +} + + +static int uv_tty_save_state(uv_tty_t* handle, unsigned char save_attributes, + DWORD* error) { + CONSOLE_SCREEN_BUFFER_INFO info; + + if (*error != ERROR_SUCCESS) { + return -1; + } + + if (!GetConsoleScreenBufferInfo(handle->handle, &info)) { + *error = GetLastError(); + return -1; + } + + uv_tty_update_virtual_window(&info); + + handle->tty.wr.saved_position.X = info.dwCursorPosition.X; + handle->tty.wr.saved_position.Y = info.dwCursorPosition.Y - uv_tty_virtual_offset; + handle->flags |= UV_HANDLE_TTY_SAVED_POSITION; + + if (save_attributes) { + handle->tty.wr.saved_attributes = info.wAttributes & + (FOREGROUND_INTENSITY | BACKGROUND_INTENSITY); + handle->flags |= UV_HANDLE_TTY_SAVED_ATTRIBUTES; + } + + return 0; +} + + +static int uv_tty_restore_state(uv_tty_t* handle, + unsigned char restore_attributes, DWORD* error) { + CONSOLE_SCREEN_BUFFER_INFO info; + WORD new_attributes; + + if (*error != ERROR_SUCCESS) { + return -1; + } + + if (handle->flags & UV_HANDLE_TTY_SAVED_POSITION) { + if (uv_tty_move_caret(handle, + handle->tty.wr.saved_position.X, + 0, + handle->tty.wr.saved_position.Y, + 0, + error) != 0) { + return -1; + } + } + + if (restore_attributes && + (handle->flags & UV_HANDLE_TTY_SAVED_ATTRIBUTES)) { + if (!GetConsoleScreenBufferInfo(handle->handle, &info)) { + *error = GetLastError(); + return -1; + } + + new_attributes = info.wAttributes; + new_attributes &= ~(FOREGROUND_INTENSITY | BACKGROUND_INTENSITY); + new_attributes |= handle->tty.wr.saved_attributes; + + if (!SetConsoleTextAttribute(handle->handle, new_attributes)) { + *error = GetLastError(); + return -1; + } + } + + return 0; +} + +static int uv_tty_set_cursor_visibility(uv_tty_t* handle, + BOOL visible, + DWORD* error) { + CONSOLE_CURSOR_INFO cursor_info; + + if (!GetConsoleCursorInfo(handle->handle, &cursor_info)) { + *error = GetLastError(); + return -1; + } + + cursor_info.bVisible = visible; + + if (!SetConsoleCursorInfo(handle->handle, &cursor_info)) { + *error = GetLastError(); + return -1; + } + + return 0; +} + +static int uv_tty_set_cursor_shape(uv_tty_t* handle, int style, DWORD* error) { + CONSOLE_CURSOR_INFO cursor_info; + + if (!GetConsoleCursorInfo(handle->handle, &cursor_info)) { + *error = GetLastError(); + return -1; + } + + if (style == 0) { + cursor_info.dwSize = uv_tty_default_cursor_info.dwSize; + } else if (style <= 2) { + cursor_info.dwSize = CURSOR_SIZE_LARGE; + } else { + cursor_info.dwSize = CURSOR_SIZE_SMALL; + } + + if (!SetConsoleCursorInfo(handle->handle, &cursor_info)) { + *error = GetLastError(); + return -1; + } + + return 0; +} + + +static int uv_tty_write_bufs(uv_tty_t* handle, + const uv_buf_t bufs[], + unsigned int nbufs, + DWORD* error) { + /* We can only write 8k characters at a time. Windows can't handle much more + * characters in a single console write anyway. */ + WCHAR utf16_buf[MAX_CONSOLE_CHAR]; + DWORD utf16_buf_used = 0; + unsigned int i; + +#define FLUSH_TEXT() \ + do { \ + if (utf16_buf_used > 0) { \ + uv_tty_emit_text(handle, utf16_buf, utf16_buf_used, error); \ + utf16_buf_used = 0; \ + } \ + } while (0) + +#define ENSURE_BUFFER_SPACE(wchars_needed) \ + if (wchars_needed > ARRAY_SIZE(utf16_buf) - utf16_buf_used) { \ + FLUSH_TEXT(); \ + } + + /* Cache for fast access */ + unsigned char utf8_bytes_left = handle->tty.wr.utf8_bytes_left; + unsigned int utf8_codepoint = handle->tty.wr.utf8_codepoint; + unsigned char previous_eol = handle->tty.wr.previous_eol; + unsigned short ansi_parser_state = handle->tty.wr.ansi_parser_state; + + /* Store the error here. If we encounter an error, stop trying to do i/o but + * keep parsing the buffer so we leave the parser in a consistent state. */ + *error = ERROR_SUCCESS; + + uv_sem_wait(&uv_tty_output_lock); + + for (i = 0; i < nbufs; i++) { + uv_buf_t buf = bufs[i]; + unsigned int j; + + for (j = 0; j < buf.len; j++) { + unsigned char c = buf.base[j]; + + /* Run the character through the utf8 decoder We happily accept non + * shortest form encodings and invalid code points - there's no real harm + * that can be done. */ + if (utf8_bytes_left == 0) { + /* Read utf-8 start byte */ + DWORD first_zero_bit; + unsigned char not_c = ~c; +#ifdef _MSC_VER /* msvc */ + if (_BitScanReverse(&first_zero_bit, not_c)) { +#else /* assume gcc */ + if (c != 0) { + first_zero_bit = (sizeof(int) * 8) - 1 - __builtin_clz(not_c); +#endif + if (first_zero_bit == 7) { + /* Ascii - pass right through */ + utf8_codepoint = (unsigned int) c; + + } else if (first_zero_bit <= 5) { + /* Multibyte sequence */ + utf8_codepoint = (0xff >> (8 - first_zero_bit)) & c; + utf8_bytes_left = (char) (6 - first_zero_bit); + + } else { + /* Invalid continuation */ + utf8_codepoint = UNICODE_REPLACEMENT_CHARACTER; + } + + } else { + /* 0xff -- invalid */ + utf8_codepoint = UNICODE_REPLACEMENT_CHARACTER; + } + + } else if ((c & 0xc0) == 0x80) { + /* Valid continuation of utf-8 multibyte sequence */ + utf8_bytes_left--; + utf8_codepoint <<= 6; + utf8_codepoint |= ((unsigned int) c & 0x3f); + + } else { + /* Start byte where continuation was expected. */ + utf8_bytes_left = 0; + utf8_codepoint = UNICODE_REPLACEMENT_CHARACTER; + /* Patch buf offset so this character will be parsed again as a start + * byte. */ + j--; + } + + /* Maybe we need to parse more bytes to find a character. */ + if (utf8_bytes_left != 0) { + continue; + } + + /* Parse vt100/ansi escape codes */ + if (uv__vterm_state == UV_TTY_SUPPORTED) { + /* Pass through escape codes if conhost supports them. */ + } else if (ansi_parser_state == ANSI_NORMAL) { + switch (utf8_codepoint) { + case '\033': + ansi_parser_state = ANSI_ESCAPE_SEEN; + continue; + + case 0233: + ansi_parser_state = ANSI_CSI; + handle->tty.wr.ansi_csi_argc = 0; + continue; + } + + } else if (ansi_parser_state == ANSI_ESCAPE_SEEN) { + switch (utf8_codepoint) { + case '[': + ansi_parser_state = ANSI_CSI; + handle->tty.wr.ansi_csi_argc = 0; + continue; + + case '^': + case '_': + case 'P': + case ']': + /* Not supported, but we'll have to parse until we see a stop code, + * e. g. ESC \ or BEL. */ + ansi_parser_state = ANSI_ST_CONTROL; + continue; + + case '\033': + /* Ignore double escape. */ + continue; + + case 'c': + /* Full console reset. */ + FLUSH_TEXT(); + uv_tty_reset(handle, error); + ansi_parser_state = ANSI_NORMAL; + continue; + + case '7': + /* Save the cursor position and text attributes. */ + FLUSH_TEXT(); + uv_tty_save_state(handle, 1, error); + ansi_parser_state = ANSI_NORMAL; + continue; + + case '8': + /* Restore the cursor position and text attributes */ + FLUSH_TEXT(); + uv_tty_restore_state(handle, 1, error); + ansi_parser_state = ANSI_NORMAL; + continue; + + default: + if (utf8_codepoint >= '@' && utf8_codepoint <= '_') { + /* Single-char control. */ + ansi_parser_state = ANSI_NORMAL; + continue; + } else { + /* Invalid - proceed as normal, */ + ansi_parser_state = ANSI_NORMAL; + } + } + + } else if (ansi_parser_state == ANSI_IGNORE) { + /* We're ignoring this command. Stop only on command character. */ + if (utf8_codepoint >= '@' && utf8_codepoint <= '~') { + ansi_parser_state = ANSI_NORMAL; + } + continue; + + } else if (ansi_parser_state == ANSI_DECSCUSR) { + /* So far we've the sequence `ESC [ arg space`, and we're waiting for + * the final command byte. */ + if (utf8_codepoint >= '@' && utf8_codepoint <= '~') { + /* Command byte */ + if (utf8_codepoint == 'q') { + /* Change the cursor shape */ + int style = handle->tty.wr.ansi_csi_argc + ? handle->tty.wr.ansi_csi_argv[0] : 1; + if (style >= 0 && style <= 6) { + FLUSH_TEXT(); + uv_tty_set_cursor_shape(handle, style, error); + } + } + + /* Sequence ended - go back to normal state. */ + ansi_parser_state = ANSI_NORMAL; + continue; + } + /* Unexpected character, but sequence hasn't ended yet. Ignore the rest + * of the sequence. */ + ansi_parser_state = ANSI_IGNORE; + + } else if (ansi_parser_state & ANSI_CSI) { + /* So far we've seen `ESC [`, and we may or may not have already parsed + * some of the arguments that follow. */ + + if (utf8_codepoint >= '0' && utf8_codepoint <= '9') { + /* Parse a numerical argument. */ + if (!(ansi_parser_state & ANSI_IN_ARG)) { + /* We were not currently parsing a number, add a new one. */ + /* Check for that there are too many arguments. */ + if (handle->tty.wr.ansi_csi_argc >= + ARRAY_SIZE(handle->tty.wr.ansi_csi_argv)) { + ansi_parser_state = ANSI_IGNORE; + continue; + } + ansi_parser_state |= ANSI_IN_ARG; + handle->tty.wr.ansi_csi_argc++; + handle->tty.wr.ansi_csi_argv[handle->tty.wr.ansi_csi_argc - 1] = + (unsigned short) utf8_codepoint - '0'; + continue; + + } else { + /* We were already parsing a number. Parse next digit. */ + uint32_t value = 10 * + handle->tty.wr.ansi_csi_argv[handle->tty.wr.ansi_csi_argc - 1]; + + /* Check for overflow. */ + if (value > UINT16_MAX) { + ansi_parser_state = ANSI_IGNORE; + continue; + } + + handle->tty.wr.ansi_csi_argv[handle->tty.wr.ansi_csi_argc - 1] = + (unsigned short) value + (utf8_codepoint - '0'); + continue; + } + + } else if (utf8_codepoint == ';') { + /* Denotes the end of an argument. */ + if (ansi_parser_state & ANSI_IN_ARG) { + ansi_parser_state &= ~ANSI_IN_ARG; + continue; + + } else { + /* If ANSI_IN_ARG is not set, add another argument and default + * it to 0. */ + + /* Check for too many arguments */ + if (handle->tty.wr.ansi_csi_argc >= + + ARRAY_SIZE(handle->tty.wr.ansi_csi_argv)) { + ansi_parser_state = ANSI_IGNORE; + continue; + } + + handle->tty.wr.ansi_csi_argc++; + handle->tty.wr.ansi_csi_argv[handle->tty.wr.ansi_csi_argc - 1] = 0; + continue; + } + + } else if (utf8_codepoint == '?' && + !(ansi_parser_state & ANSI_IN_ARG) && + !(ansi_parser_state & ANSI_EXTENSION) && + handle->tty.wr.ansi_csi_argc == 0) { + /* Pass through '?' if it is the first character after CSI */ + /* This is an extension character from the VT100 codeset */ + /* that is supported and used by most ANSI terminals today. */ + ansi_parser_state |= ANSI_EXTENSION; + continue; + + } else if (utf8_codepoint == ' ' && + !(ansi_parser_state & ANSI_EXTENSION)) { + /* We expect a command byte to follow after this space. The only + * command that we current support is 'set cursor style'. */ + ansi_parser_state = ANSI_DECSCUSR; + continue; + + } else if (utf8_codepoint >= '@' && utf8_codepoint <= '~') { + /* Command byte */ + if (ansi_parser_state & ANSI_EXTENSION) { + /* Sequence is `ESC [ ? args command`. */ + switch (utf8_codepoint) { + case 'l': + /* Hide the cursor */ + if (handle->tty.wr.ansi_csi_argc == 1 && + handle->tty.wr.ansi_csi_argv[0] == 25) { + FLUSH_TEXT(); + uv_tty_set_cursor_visibility(handle, 0, error); + } + break; + + case 'h': + /* Show the cursor */ + if (handle->tty.wr.ansi_csi_argc == 1 && + handle->tty.wr.ansi_csi_argv[0] == 25) { + FLUSH_TEXT(); + uv_tty_set_cursor_visibility(handle, 1, error); + } + break; + } + + } else { + /* Sequence is `ESC [ args command`. */ + int x, y, d; + switch (utf8_codepoint) { + case 'A': + /* cursor up */ + FLUSH_TEXT(); + y = -(handle->tty.wr.ansi_csi_argc + ? handle->tty.wr.ansi_csi_argv[0] : 1); + uv_tty_move_caret(handle, 0, 1, y, 1, error); + break; + + case 'B': + /* cursor down */ + FLUSH_TEXT(); + y = handle->tty.wr.ansi_csi_argc + ? handle->tty.wr.ansi_csi_argv[0] : 1; + uv_tty_move_caret(handle, 0, 1, y, 1, error); + break; + + case 'C': + /* cursor forward */ + FLUSH_TEXT(); + x = handle->tty.wr.ansi_csi_argc + ? handle->tty.wr.ansi_csi_argv[0] : 1; + uv_tty_move_caret(handle, x, 1, 0, 1, error); + break; + + case 'D': + /* cursor back */ + FLUSH_TEXT(); + x = -(handle->tty.wr.ansi_csi_argc + ? handle->tty.wr.ansi_csi_argv[0] : 1); + uv_tty_move_caret(handle, x, 1, 0, 1, error); + break; + + case 'E': + /* cursor next line */ + FLUSH_TEXT(); + y = handle->tty.wr.ansi_csi_argc + ? handle->tty.wr.ansi_csi_argv[0] : 1; + uv_tty_move_caret(handle, 0, 0, y, 1, error); + break; + + case 'F': + /* cursor previous line */ + FLUSH_TEXT(); + y = -(handle->tty.wr.ansi_csi_argc + ? handle->tty.wr.ansi_csi_argv[0] : 1); + uv_tty_move_caret(handle, 0, 0, y, 1, error); + break; + + case 'G': + /* cursor horizontal move absolute */ + FLUSH_TEXT(); + x = (handle->tty.wr.ansi_csi_argc >= 1 && + handle->tty.wr.ansi_csi_argv[0]) + ? handle->tty.wr.ansi_csi_argv[0] - 1 : 0; + uv_tty_move_caret(handle, x, 0, 0, 1, error); + break; + + case 'H': + case 'f': + /* cursor move absolute */ + FLUSH_TEXT(); + y = (handle->tty.wr.ansi_csi_argc >= 1 && + handle->tty.wr.ansi_csi_argv[0]) + ? handle->tty.wr.ansi_csi_argv[0] - 1 : 0; + x = (handle->tty.wr.ansi_csi_argc >= 2 && + handle->tty.wr.ansi_csi_argv[1]) + ? handle->tty.wr.ansi_csi_argv[1] - 1 : 0; + uv_tty_move_caret(handle, x, 0, y, 0, error); + break; + + case 'J': + /* Erase screen */ + FLUSH_TEXT(); + d = handle->tty.wr.ansi_csi_argc + ? handle->tty.wr.ansi_csi_argv[0] : 0; + if (d >= 0 && d <= 2) { + uv_tty_clear(handle, d, 1, error); + } + break; + + case 'K': + /* Erase line */ + FLUSH_TEXT(); + d = handle->tty.wr.ansi_csi_argc + ? handle->tty.wr.ansi_csi_argv[0] : 0; + if (d >= 0 && d <= 2) { + uv_tty_clear(handle, d, 0, error); + } + break; + + case 'm': + /* Set style */ + FLUSH_TEXT(); + uv_tty_set_style(handle, error); + break; + + case 's': + /* Save the cursor position. */ + FLUSH_TEXT(); + uv_tty_save_state(handle, 0, error); + break; + + case 'u': + /* Restore the cursor position */ + FLUSH_TEXT(); + uv_tty_restore_state(handle, 0, error); + break; + } + } + + /* Sequence ended - go back to normal state. */ + ansi_parser_state = ANSI_NORMAL; + continue; + + } else { + /* We don't support commands that use private mode characters or + * intermediaries. Ignore the rest of the sequence. */ + ansi_parser_state = ANSI_IGNORE; + continue; + } + + } else if (ansi_parser_state & ANSI_ST_CONTROL) { + /* Unsupported control code. + * Ignore everything until we see `BEL` or `ESC \`. */ + if (ansi_parser_state & ANSI_IN_STRING) { + if (!(ansi_parser_state & ANSI_BACKSLASH_SEEN)) { + if (utf8_codepoint == '"') { + ansi_parser_state &= ~ANSI_IN_STRING; + } else if (utf8_codepoint == '\\') { + ansi_parser_state |= ANSI_BACKSLASH_SEEN; + } + } else { + ansi_parser_state &= ~ANSI_BACKSLASH_SEEN; + } + } else { + if (utf8_codepoint == '\007' || (utf8_codepoint == '\\' && + (ansi_parser_state & ANSI_ESCAPE_SEEN))) { + /* End of sequence */ + ansi_parser_state = ANSI_NORMAL; + } else if (utf8_codepoint == '\033') { + /* Escape character */ + ansi_parser_state |= ANSI_ESCAPE_SEEN; + } else if (utf8_codepoint == '"') { + /* String starting */ + ansi_parser_state |= ANSI_IN_STRING; + ansi_parser_state &= ~ANSI_ESCAPE_SEEN; + ansi_parser_state &= ~ANSI_BACKSLASH_SEEN; + } else { + ansi_parser_state &= ~ANSI_ESCAPE_SEEN; + } + } + continue; + } else { + /* Inconsistent state */ + abort(); + } + + /* We wouldn't mind emitting utf-16 surrogate pairs. Too bad, the windows + * console doesn't really support UTF-16, so just emit the replacement + * character. */ + if (utf8_codepoint > 0xffff) { + utf8_codepoint = UNICODE_REPLACEMENT_CHARACTER; + } + + if (utf8_codepoint == 0x0a || utf8_codepoint == 0x0d) { + /* EOL conversion - emit \r\n when we see \n. */ + + if (utf8_codepoint == 0x0a && previous_eol != 0x0d) { + /* \n was not preceded by \r; print \r\n. */ + ENSURE_BUFFER_SPACE(2); + utf16_buf[utf16_buf_used++] = L'\r'; + utf16_buf[utf16_buf_used++] = L'\n'; + } else if (utf8_codepoint == 0x0d && previous_eol == 0x0a) { + /* \n was followed by \r; do not print the \r, since the source was + * either \r\n\r (so the second \r is redundant) or was \n\r (so the + * \n was processed by the last case and an \r automatically + * inserted). */ + } else { + /* \r without \n; print \r as-is. */ + ENSURE_BUFFER_SPACE(1); + utf16_buf[utf16_buf_used++] = (WCHAR) utf8_codepoint; + } + + previous_eol = (char) utf8_codepoint; + + } else if (utf8_codepoint <= 0xffff) { + /* Encode character into utf-16 buffer. */ + ENSURE_BUFFER_SPACE(1); + utf16_buf[utf16_buf_used++] = (WCHAR) utf8_codepoint; + previous_eol = 0; + } + } + } + + /* Flush remaining characters */ + FLUSH_TEXT(); + + /* Copy cached values back to struct. */ + handle->tty.wr.utf8_bytes_left = utf8_bytes_left; + handle->tty.wr.utf8_codepoint = utf8_codepoint; + handle->tty.wr.previous_eol = previous_eol; + handle->tty.wr.ansi_parser_state = ansi_parser_state; + + uv_sem_post(&uv_tty_output_lock); + + if (*error == STATUS_SUCCESS) { + return 0; + } else { + return -1; + } + +#undef FLUSH_TEXT +} + + +int uv_tty_write(uv_loop_t* loop, + uv_write_t* req, + uv_tty_t* handle, + const uv_buf_t bufs[], + unsigned int nbufs, + uv_write_cb cb) { + DWORD error; + + UV_REQ_INIT(req, UV_WRITE); + req->handle = (uv_stream_t*) handle; + req->cb = cb; + + handle->reqs_pending++; + handle->stream.conn.write_reqs_pending++; + REGISTER_HANDLE_REQ(loop, handle, req); + + req->u.io.queued_bytes = 0; + + if (!uv_tty_write_bufs(handle, bufs, nbufs, &error)) { + SET_REQ_SUCCESS(req); + } else { + SET_REQ_ERROR(req, error); + } + + uv_insert_pending_req(loop, (uv_req_t*) req); + + return 0; +} + + +int uv__tty_try_write(uv_tty_t* handle, + const uv_buf_t bufs[], + unsigned int nbufs) { + DWORD error; + + if (handle->stream.conn.write_reqs_pending > 0) + return UV_EAGAIN; + + if (uv_tty_write_bufs(handle, bufs, nbufs, &error)) + return uv_translate_sys_error(error); + + return uv__count_bufs(bufs, nbufs); +} + + +void uv_process_tty_write_req(uv_loop_t* loop, uv_tty_t* handle, + uv_write_t* req) { + int err; + + handle->write_queue_size -= req->u.io.queued_bytes; + UNREGISTER_HANDLE_REQ(loop, handle, req); + + if (req->cb) { + err = GET_REQ_ERROR(req); + req->cb(req, uv_translate_sys_error(err)); + } + + handle->stream.conn.write_reqs_pending--; + if (handle->stream.conn.shutdown_req != NULL && + handle->stream.conn.write_reqs_pending == 0) { + uv_want_endgame(loop, (uv_handle_t*)handle); + } + + DECREASE_PENDING_REQ_COUNT(handle); +} + + +void uv_tty_close(uv_tty_t* handle) { + assert(handle->u.fd == -1 || handle->u.fd > 2); + if (handle->flags & UV_HANDLE_READING) + uv_tty_read_stop(handle); + + if (handle->u.fd == -1) + CloseHandle(handle->handle); + else + close(handle->u.fd); + + handle->u.fd = -1; + handle->handle = INVALID_HANDLE_VALUE; + handle->flags &= ~(UV_HANDLE_READABLE | UV_HANDLE_WRITABLE); + uv__handle_closing(handle); + + if (handle->reqs_pending == 0) { + uv_want_endgame(handle->loop, (uv_handle_t*) handle); + } +} + + +void uv_tty_endgame(uv_loop_t* loop, uv_tty_t* handle) { + if (!(handle->flags & UV_HANDLE_TTY_READABLE) && + handle->stream.conn.shutdown_req != NULL && + handle->stream.conn.write_reqs_pending == 0) { + UNREGISTER_HANDLE_REQ(loop, handle, handle->stream.conn.shutdown_req); + + /* TTY shutdown is really just a no-op */ + if (handle->stream.conn.shutdown_req->cb) { + if (handle->flags & UV_HANDLE_CLOSING) { + handle->stream.conn.shutdown_req->cb(handle->stream.conn.shutdown_req, UV_ECANCELED); + } else { + handle->stream.conn.shutdown_req->cb(handle->stream.conn.shutdown_req, 0); + } + } + + handle->stream.conn.shutdown_req = NULL; + + DECREASE_PENDING_REQ_COUNT(handle); + return; + } + + if (handle->flags & UV_HANDLE_CLOSING && + handle->reqs_pending == 0) { + /* The wait handle used for raw reading should be unregistered when the + * wait callback runs. */ + assert(!(handle->flags & UV_HANDLE_TTY_READABLE) || + handle->tty.rd.read_raw_wait == NULL); + + assert(!(handle->flags & UV_HANDLE_CLOSED)); + uv__handle_close(handle); + } +} + + +/* + * uv_process_tty_accept_req() is a stub to keep DELEGATE_STREAM_REQ working + * TODO: find a way to remove it + */ +void uv_process_tty_accept_req(uv_loop_t* loop, uv_tty_t* handle, + uv_req_t* raw_req) { + abort(); +} + + +/* + * uv_process_tty_connect_req() is a stub to keep DELEGATE_STREAM_REQ working + * TODO: find a way to remove it + */ +void uv_process_tty_connect_req(uv_loop_t* loop, uv_tty_t* handle, + uv_connect_t* req) { + abort(); +} + + +int uv_tty_reset_mode(void) { + /* Not necessary to do anything. */ + return 0; +} + +/* Determine whether or not this version of windows supports + * proper ANSI color codes. Should be supported as of windows + * 10 version 1511, build number 10.0.10586. + */ +static void uv__determine_vterm_state(HANDLE handle) { + DWORD dwMode = 0; + + uv__need_check_vterm_state = FALSE; + if (!GetConsoleMode(handle, &dwMode)) { + return; + } + + dwMode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING; + if (!SetConsoleMode(handle, dwMode)) { + return; + } + + uv__vterm_state = UV_TTY_SUPPORTED; +} + +static DWORD WINAPI uv__tty_console_resize_message_loop_thread(void* param) { + NTSTATUS status; + ULONG_PTR conhost_pid; + MSG msg; + + if (pSetWinEventHook == NULL || pNtQueryInformationProcess == NULL) + return 0; + + status = pNtQueryInformationProcess(GetCurrentProcess(), + ProcessConsoleHostProcess, + &conhost_pid, + sizeof(conhost_pid), + NULL); + + if (!NT_SUCCESS(status)) { + /* We couldn't retrieve our console host process, probably because this + * is a 32-bit process running on 64-bit Windows. Fall back to receiving + * console events from the input stream only. */ + return 0; + } + + /* Ensure the PID is a multiple of 4, which is required by SetWinEventHook */ + conhost_pid &= ~(ULONG_PTR)0x3; + + uv__tty_console_resized = CreateEvent(NULL, TRUE, FALSE, NULL); + if (uv__tty_console_resized == NULL) + return 0; + if (QueueUserWorkItem(uv__tty_console_resize_watcher_thread, + NULL, + WT_EXECUTELONGFUNCTION) == 0) + return 0; + + if (!pSetWinEventHook(EVENT_CONSOLE_LAYOUT, + EVENT_CONSOLE_LAYOUT, + NULL, + uv__tty_console_resize_event, + (DWORD)conhost_pid, + 0, + WINEVENT_OUTOFCONTEXT)) + return 0; + + while (GetMessage(&msg, NULL, 0, 0)) { + TranslateMessage(&msg); + DispatchMessage(&msg); + } + return 0; +} + +static void CALLBACK uv__tty_console_resize_event(HWINEVENTHOOK hWinEventHook, + DWORD event, + HWND hwnd, + LONG idObject, + LONG idChild, + DWORD dwEventThread, + DWORD dwmsEventTime) { + SetEvent(uv__tty_console_resized); +} + +static DWORD WINAPI uv__tty_console_resize_watcher_thread(void* param) { + for (;;) { + /* Make sure to not overwhelm the system with resize events */ + Sleep(33); + WaitForSingleObject(uv__tty_console_resized, INFINITE); + uv__tty_console_signal_resize(); + ResetEvent(uv__tty_console_resized); + } +} + +static void uv__tty_console_signal_resize(void) { + CONSOLE_SCREEN_BUFFER_INFO sb_info; + int width, height; + + if (!GetConsoleScreenBufferInfo(uv__tty_console_handle, &sb_info)) + return; + + width = sb_info.dwSize.X; + height = sb_info.srWindow.Bottom - sb_info.srWindow.Top + 1; + + uv_mutex_lock(&uv__tty_console_resize_mutex); + assert(uv__tty_console_width != -1 && uv__tty_console_height != -1); + if (width != uv__tty_console_width || height != uv__tty_console_height) { + uv__tty_console_width = width; + uv__tty_console_height = height; + uv_mutex_unlock(&uv__tty_console_resize_mutex); + uv__signal_dispatch(SIGWINCH); + } else { + uv_mutex_unlock(&uv__tty_console_resize_mutex); + } +} + +void uv_tty_set_vterm_state(uv_tty_vtermstate_t state) { + uv_sem_wait(&uv_tty_output_lock); + uv__need_check_vterm_state = FALSE; + uv__vterm_state = state; + uv_sem_post(&uv_tty_output_lock); +} + +int uv_tty_get_vterm_state(uv_tty_vtermstate_t* state) { + uv_sem_wait(&uv_tty_output_lock); + *state = uv__vterm_state; + uv_sem_post(&uv_tty_output_lock); + return 0; +} diff --git a/external/libuv/src/win/udp.c b/external/libuv/src/win/udp.c new file mode 100644 index 000000000..1c4977af9 --- /dev/null +++ b/external/libuv/src/win/udp.c @@ -0,0 +1,1175 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#include +#include + +#include "uv.h" +#include "internal.h" +#include "handle-inl.h" +#include "stream-inl.h" +#include "req-inl.h" + + +/* + * Threshold of active udp streams for which to preallocate udp read buffers. + */ +const unsigned int uv_active_udp_streams_threshold = 0; + +/* A zero-size buffer for use by uv_udp_read */ +static char uv_zero_[] = ""; +int uv_udp_getpeername(const uv_udp_t* handle, + struct sockaddr* name, + int* namelen) { + + return uv__getsockpeername((const uv_handle_t*) handle, + getpeername, + name, + namelen, + 0); +} + + +int uv_udp_getsockname(const uv_udp_t* handle, + struct sockaddr* name, + int* namelen) { + + return uv__getsockpeername((const uv_handle_t*) handle, + getsockname, + name, + namelen, + 0); +} + + +static int uv_udp_set_socket(uv_loop_t* loop, uv_udp_t* handle, SOCKET socket, + int family) { + DWORD yes = 1; + WSAPROTOCOL_INFOW info; + int opt_len; + + if (handle->socket != INVALID_SOCKET) + return UV_EBUSY; + + /* Set the socket to nonblocking mode */ + if (ioctlsocket(socket, FIONBIO, &yes) == SOCKET_ERROR) { + return WSAGetLastError(); + } + + /* Make the socket non-inheritable */ + if (!SetHandleInformation((HANDLE)socket, HANDLE_FLAG_INHERIT, 0)) { + return GetLastError(); + } + + /* Associate it with the I/O completion port. Use uv_handle_t pointer as + * completion key. */ + if (CreateIoCompletionPort((HANDLE)socket, + loop->iocp, + (ULONG_PTR)socket, + 0) == NULL) { + return GetLastError(); + } + + /* All known Windows that support SetFileCompletionNotificationModes have a + * bug that makes it impossible to use this function in conjunction with + * datagram sockets. We can work around that but only if the user is using + * the default UDP driver (AFD) and has no other. LSPs stacked on top. Here + * we check whether that is the case. */ + opt_len = (int) sizeof info; + if (getsockopt( + socket, SOL_SOCKET, SO_PROTOCOL_INFOW, (char*) &info, &opt_len) == + SOCKET_ERROR) { + return GetLastError(); + } + + if (info.ProtocolChain.ChainLen == 1) { + if (SetFileCompletionNotificationModes( + (HANDLE) socket, + FILE_SKIP_SET_EVENT_ON_HANDLE | + FILE_SKIP_COMPLETION_PORT_ON_SUCCESS)) { + handle->flags |= UV_HANDLE_SYNC_BYPASS_IOCP; + handle->func_wsarecv = uv_wsarecv_workaround; + handle->func_wsarecvfrom = uv_wsarecvfrom_workaround; + } else if (GetLastError() != ERROR_INVALID_FUNCTION) { + return GetLastError(); + } + } + + handle->socket = socket; + + if (family == AF_INET6) { + handle->flags |= UV_HANDLE_IPV6; + } else { + assert(!(handle->flags & UV_HANDLE_IPV6)); + } + + return 0; +} + + +int uv__udp_init_ex(uv_loop_t* loop, + uv_udp_t* handle, + unsigned flags, + int domain) { + uv__handle_init(loop, (uv_handle_t*) handle, UV_UDP); + handle->socket = INVALID_SOCKET; + handle->reqs_pending = 0; + handle->activecnt = 0; + handle->func_wsarecv = WSARecv; + handle->func_wsarecvfrom = WSARecvFrom; + handle->send_queue_size = 0; + handle->send_queue_count = 0; + UV_REQ_INIT(&handle->recv_req, UV_UDP_RECV); + handle->recv_req.data = handle; + + /* If anything fails beyond this point we need to remove the handle from + * the handle queue, since it was added by uv__handle_init. + */ + + if (domain != AF_UNSPEC) { + SOCKET sock; + DWORD err; + + sock = socket(domain, SOCK_DGRAM, 0); + if (sock == INVALID_SOCKET) { + err = WSAGetLastError(); + QUEUE_REMOVE(&handle->handle_queue); + return uv_translate_sys_error(err); + } + + err = uv_udp_set_socket(handle->loop, handle, sock, domain); + if (err) { + closesocket(sock); + QUEUE_REMOVE(&handle->handle_queue); + return uv_translate_sys_error(err); + } + } + + return 0; +} + + +void uv_udp_close(uv_loop_t* loop, uv_udp_t* handle) { + uv_udp_recv_stop(handle); + closesocket(handle->socket); + handle->socket = INVALID_SOCKET; + + uv__handle_closing(handle); + + if (handle->reqs_pending == 0) { + uv_want_endgame(loop, (uv_handle_t*) handle); + } +} + + +void uv_udp_endgame(uv_loop_t* loop, uv_udp_t* handle) { + if (handle->flags & UV_HANDLE_CLOSING && + handle->reqs_pending == 0) { + assert(!(handle->flags & UV_HANDLE_CLOSED)); + uv__handle_close(handle); + } +} + + +static int uv_udp_maybe_bind(uv_udp_t* handle, + const struct sockaddr* addr, + unsigned int addrlen, + unsigned int flags) { + int r; + int err; + DWORD no = 0; + + if (handle->flags & UV_HANDLE_BOUND) + return 0; + + if ((flags & UV_UDP_IPV6ONLY) && addr->sa_family != AF_INET6) { + /* UV_UDP_IPV6ONLY is supported only for IPV6 sockets */ + return ERROR_INVALID_PARAMETER; + } + + if (handle->socket == INVALID_SOCKET) { + SOCKET sock = socket(addr->sa_family, SOCK_DGRAM, 0); + if (sock == INVALID_SOCKET) { + return WSAGetLastError(); + } + + err = uv_udp_set_socket(handle->loop, handle, sock, addr->sa_family); + if (err) { + closesocket(sock); + return err; + } + } + + if (flags & UV_UDP_REUSEADDR) { + DWORD yes = 1; + /* Set SO_REUSEADDR on the socket. */ + if (setsockopt(handle->socket, + SOL_SOCKET, + SO_REUSEADDR, + (char*) &yes, + sizeof yes) == SOCKET_ERROR) { + err = WSAGetLastError(); + return err; + } + } + + if (addr->sa_family == AF_INET6) + handle->flags |= UV_HANDLE_IPV6; + + if (addr->sa_family == AF_INET6 && !(flags & UV_UDP_IPV6ONLY)) { + /* On windows IPV6ONLY is on by default. If the user doesn't specify it + * libuv turns it off. */ + + /* TODO: how to handle errors? This may fail if there is no ipv4 stack + * available, or when run on XP/2003 which have no support for dualstack + * sockets. For now we're silently ignoring the error. */ + setsockopt(handle->socket, + IPPROTO_IPV6, + IPV6_V6ONLY, + (char*) &no, + sizeof no); + } + + r = bind(handle->socket, addr, addrlen); + if (r == SOCKET_ERROR) { + return WSAGetLastError(); + } + + handle->flags |= UV_HANDLE_BOUND; + + return 0; +} + + +static void uv_udp_queue_recv(uv_loop_t* loop, uv_udp_t* handle) { + uv_req_t* req; + uv_buf_t buf; + DWORD bytes, flags; + int result; + + assert(handle->flags & UV_HANDLE_READING); + assert(!(handle->flags & UV_HANDLE_READ_PENDING)); + + req = &handle->recv_req; + memset(&req->u.io.overlapped, 0, sizeof(req->u.io.overlapped)); + + /* + * Preallocate a read buffer if the number of active streams is below + * the threshold. + */ + if (loop->active_udp_streams < uv_active_udp_streams_threshold) { + handle->flags &= ~UV_HANDLE_ZERO_READ; + + handle->recv_buffer = uv_buf_init(NULL, 0); + handle->alloc_cb((uv_handle_t*) handle, 65536, &handle->recv_buffer); + if (handle->recv_buffer.base == NULL || handle->recv_buffer.len == 0) { + handle->recv_cb(handle, UV_ENOBUFS, &handle->recv_buffer, NULL, 0); + return; + } + assert(handle->recv_buffer.base != NULL); + + buf = handle->recv_buffer; + memset(&handle->recv_from, 0, sizeof handle->recv_from); + handle->recv_from_len = sizeof handle->recv_from; + flags = 0; + + result = handle->func_wsarecvfrom(handle->socket, + (WSABUF*) &buf, + 1, + &bytes, + &flags, + (struct sockaddr*) &handle->recv_from, + &handle->recv_from_len, + &req->u.io.overlapped, + NULL); + + if (UV_SUCCEEDED_WITHOUT_IOCP(result == 0)) { + /* Process the req without IOCP. */ + handle->flags |= UV_HANDLE_READ_PENDING; + req->u.io.overlapped.InternalHigh = bytes; + handle->reqs_pending++; + uv_insert_pending_req(loop, req); + } else if (UV_SUCCEEDED_WITH_IOCP(result == 0)) { + /* The req will be processed with IOCP. */ + handle->flags |= UV_HANDLE_READ_PENDING; + handle->reqs_pending++; + } else { + /* Make this req pending reporting an error. */ + SET_REQ_ERROR(req, WSAGetLastError()); + uv_insert_pending_req(loop, req); + handle->reqs_pending++; + } + + } else { + handle->flags |= UV_HANDLE_ZERO_READ; + + buf.base = (char*) uv_zero_; + buf.len = 0; + flags = MSG_PEEK; + + result = handle->func_wsarecv(handle->socket, + (WSABUF*) &buf, + 1, + &bytes, + &flags, + &req->u.io.overlapped, + NULL); + + if (UV_SUCCEEDED_WITHOUT_IOCP(result == 0)) { + /* Process the req without IOCP. */ + handle->flags |= UV_HANDLE_READ_PENDING; + req->u.io.overlapped.InternalHigh = bytes; + handle->reqs_pending++; + uv_insert_pending_req(loop, req); + } else if (UV_SUCCEEDED_WITH_IOCP(result == 0)) { + /* The req will be processed with IOCP. */ + handle->flags |= UV_HANDLE_READ_PENDING; + handle->reqs_pending++; + } else { + /* Make this req pending reporting an error. */ + SET_REQ_ERROR(req, WSAGetLastError()); + uv_insert_pending_req(loop, req); + handle->reqs_pending++; + } + } +} + + +int uv__udp_recv_start(uv_udp_t* handle, uv_alloc_cb alloc_cb, + uv_udp_recv_cb recv_cb) { + uv_loop_t* loop = handle->loop; + int err; + + if (handle->flags & UV_HANDLE_READING) { + return UV_EALREADY; + } + + err = uv_udp_maybe_bind(handle, + (const struct sockaddr*) &uv_addr_ip4_any_, + sizeof(uv_addr_ip4_any_), + 0); + if (err) + return uv_translate_sys_error(err); + + handle->flags |= UV_HANDLE_READING; + INCREASE_ACTIVE_COUNT(loop, handle); + loop->active_udp_streams++; + + handle->recv_cb = recv_cb; + handle->alloc_cb = alloc_cb; + + /* If reading was stopped and then started again, there could still be a recv + * request pending. */ + if (!(handle->flags & UV_HANDLE_READ_PENDING)) + uv_udp_queue_recv(loop, handle); + + return 0; +} + + +int uv__udp_recv_stop(uv_udp_t* handle) { + if (handle->flags & UV_HANDLE_READING) { + handle->flags &= ~UV_HANDLE_READING; + handle->loop->active_udp_streams--; + DECREASE_ACTIVE_COUNT(loop, handle); + } + + return 0; +} + + +static int uv__send(uv_udp_send_t* req, + uv_udp_t* handle, + const uv_buf_t bufs[], + unsigned int nbufs, + const struct sockaddr* addr, + unsigned int addrlen, + uv_udp_send_cb cb) { + uv_loop_t* loop = handle->loop; + DWORD result, bytes; + + UV_REQ_INIT(req, UV_UDP_SEND); + req->handle = handle; + req->cb = cb; + memset(&req->u.io.overlapped, 0, sizeof(req->u.io.overlapped)); + + result = WSASendTo(handle->socket, + (WSABUF*)bufs, + nbufs, + &bytes, + 0, + addr, + addrlen, + &req->u.io.overlapped, + NULL); + + if (UV_SUCCEEDED_WITHOUT_IOCP(result == 0)) { + /* Request completed immediately. */ + req->u.io.queued_bytes = 0; + handle->reqs_pending++; + handle->send_queue_size += req->u.io.queued_bytes; + handle->send_queue_count++; + REGISTER_HANDLE_REQ(loop, handle, req); + uv_insert_pending_req(loop, (uv_req_t*)req); + } else if (UV_SUCCEEDED_WITH_IOCP(result == 0)) { + /* Request queued by the kernel. */ + req->u.io.queued_bytes = uv__count_bufs(bufs, nbufs); + handle->reqs_pending++; + handle->send_queue_size += req->u.io.queued_bytes; + handle->send_queue_count++; + REGISTER_HANDLE_REQ(loop, handle, req); + } else { + /* Send failed due to an error. */ + return WSAGetLastError(); + } + + return 0; +} + + +void uv_process_udp_recv_req(uv_loop_t* loop, uv_udp_t* handle, + uv_req_t* req) { + uv_buf_t buf; + int partial; + + assert(handle->type == UV_UDP); + + handle->flags &= ~UV_HANDLE_READ_PENDING; + + if (!REQ_SUCCESS(req)) { + DWORD err = GET_REQ_SOCK_ERROR(req); + if (err == WSAEMSGSIZE) { + /* Not a real error, it just indicates that the received packet was + * bigger than the receive buffer. */ + } else if (err == WSAECONNRESET || err == WSAENETRESET) { + /* A previous sendto operation failed; ignore this error. If zero-reading + * we need to call WSARecv/WSARecvFrom _without_ the. MSG_PEEK flag to + * clear out the error queue. For nonzero reads, immediately queue a new + * receive. */ + if (!(handle->flags & UV_HANDLE_ZERO_READ)) { + goto done; + } + } else { + /* A real error occurred. Report the error to the user only if we're + * currently reading. */ + if (handle->flags & UV_HANDLE_READING) { + uv_udp_recv_stop(handle); + buf = (handle->flags & UV_HANDLE_ZERO_READ) ? + uv_buf_init(NULL, 0) : handle->recv_buffer; + handle->recv_cb(handle, uv_translate_sys_error(err), &buf, NULL, 0); + } + goto done; + } + } + + if (!(handle->flags & UV_HANDLE_ZERO_READ)) { + /* Successful read */ + partial = !REQ_SUCCESS(req); + handle->recv_cb(handle, + req->u.io.overlapped.InternalHigh, + &handle->recv_buffer, + (const struct sockaddr*) &handle->recv_from, + partial ? UV_UDP_PARTIAL : 0); + } else if (handle->flags & UV_HANDLE_READING) { + DWORD bytes, err, flags; + struct sockaddr_storage from; + int from_len; + + /* Do a nonblocking receive. + * TODO: try to read multiple datagrams at once. FIONREAD maybe? */ + buf = uv_buf_init(NULL, 0); + handle->alloc_cb((uv_handle_t*) handle, 65536, &buf); + if (buf.base == NULL || buf.len == 0) { + handle->recv_cb(handle, UV_ENOBUFS, &buf, NULL, 0); + goto done; + } + assert(buf.base != NULL); + + memset(&from, 0, sizeof from); + from_len = sizeof from; + + flags = 0; + + if (WSARecvFrom(handle->socket, + (WSABUF*)&buf, + 1, + &bytes, + &flags, + (struct sockaddr*) &from, + &from_len, + NULL, + NULL) != SOCKET_ERROR) { + + /* Message received */ + handle->recv_cb(handle, bytes, &buf, (const struct sockaddr*) &from, 0); + } else { + err = WSAGetLastError(); + if (err == WSAEMSGSIZE) { + /* Message truncated */ + handle->recv_cb(handle, + bytes, + &buf, + (const struct sockaddr*) &from, + UV_UDP_PARTIAL); + } else if (err == WSAEWOULDBLOCK) { + /* Kernel buffer empty */ + handle->recv_cb(handle, 0, &buf, NULL, 0); + } else if (err == WSAECONNRESET || err == WSAENETRESET) { + /* WSAECONNRESET/WSANETRESET is ignored because this just indicates + * that a previous sendto operation failed. + */ + handle->recv_cb(handle, 0, &buf, NULL, 0); + } else { + /* Any other error that we want to report back to the user. */ + uv_udp_recv_stop(handle); + handle->recv_cb(handle, uv_translate_sys_error(err), &buf, NULL, 0); + } + } + } + +done: + /* Post another read if still reading and not closing. */ + if ((handle->flags & UV_HANDLE_READING) && + !(handle->flags & UV_HANDLE_READ_PENDING)) { + uv_udp_queue_recv(loop, handle); + } + + DECREASE_PENDING_REQ_COUNT(handle); +} + + +void uv_process_udp_send_req(uv_loop_t* loop, uv_udp_t* handle, + uv_udp_send_t* req) { + int err; + + assert(handle->type == UV_UDP); + + assert(handle->send_queue_size >= req->u.io.queued_bytes); + assert(handle->send_queue_count >= 1); + handle->send_queue_size -= req->u.io.queued_bytes; + handle->send_queue_count--; + + UNREGISTER_HANDLE_REQ(loop, handle, req); + + if (req->cb) { + err = 0; + if (!REQ_SUCCESS(req)) { + err = GET_REQ_SOCK_ERROR(req); + } + req->cb(req, uv_translate_sys_error(err)); + } + + DECREASE_PENDING_REQ_COUNT(handle); +} + + +static int uv__udp_set_membership4(uv_udp_t* handle, + const struct sockaddr_in* multicast_addr, + const char* interface_addr, + uv_membership membership) { + int err; + int optname; + struct ip_mreq mreq; + + if (handle->flags & UV_HANDLE_IPV6) + return UV_EINVAL; + + /* If the socket is unbound, bind to inaddr_any. */ + err = uv_udp_maybe_bind(handle, + (const struct sockaddr*) &uv_addr_ip4_any_, + sizeof(uv_addr_ip4_any_), + UV_UDP_REUSEADDR); + if (err) + return uv_translate_sys_error(err); + + memset(&mreq, 0, sizeof mreq); + + if (interface_addr) { + err = uv_inet_pton(AF_INET, interface_addr, &mreq.imr_interface.s_addr); + if (err) + return err; + } else { + mreq.imr_interface.s_addr = htonl(INADDR_ANY); + } + + mreq.imr_multiaddr.s_addr = multicast_addr->sin_addr.s_addr; + + switch (membership) { + case UV_JOIN_GROUP: + optname = IP_ADD_MEMBERSHIP; + break; + case UV_LEAVE_GROUP: + optname = IP_DROP_MEMBERSHIP; + break; + default: + return UV_EINVAL; + } + + if (setsockopt(handle->socket, + IPPROTO_IP, + optname, + (char*) &mreq, + sizeof mreq) == SOCKET_ERROR) { + return uv_translate_sys_error(WSAGetLastError()); + } + + return 0; +} + + +int uv__udp_set_membership6(uv_udp_t* handle, + const struct sockaddr_in6* multicast_addr, + const char* interface_addr, + uv_membership membership) { + int optname; + int err; + struct ipv6_mreq mreq; + struct sockaddr_in6 addr6; + + if ((handle->flags & UV_HANDLE_BOUND) && !(handle->flags & UV_HANDLE_IPV6)) + return UV_EINVAL; + + err = uv_udp_maybe_bind(handle, + (const struct sockaddr*) &uv_addr_ip6_any_, + sizeof(uv_addr_ip6_any_), + UV_UDP_REUSEADDR); + + if (err) + return uv_translate_sys_error(err); + + memset(&mreq, 0, sizeof(mreq)); + + if (interface_addr) { + if (uv_ip6_addr(interface_addr, 0, &addr6)) + return UV_EINVAL; + mreq.ipv6mr_interface = addr6.sin6_scope_id; + } else { + mreq.ipv6mr_interface = 0; + } + + mreq.ipv6mr_multiaddr = multicast_addr->sin6_addr; + + switch (membership) { + case UV_JOIN_GROUP: + optname = IPV6_ADD_MEMBERSHIP; + break; + case UV_LEAVE_GROUP: + optname = IPV6_DROP_MEMBERSHIP; + break; + default: + return UV_EINVAL; + } + + if (setsockopt(handle->socket, + IPPROTO_IPV6, + optname, + (char*) &mreq, + sizeof mreq) == SOCKET_ERROR) { + return uv_translate_sys_error(WSAGetLastError()); + } + + return 0; +} + + +static int uv__udp_set_source_membership4(uv_udp_t* handle, + const struct sockaddr_in* multicast_addr, + const char* interface_addr, + const struct sockaddr_in* source_addr, + uv_membership membership) { + struct ip_mreq_source mreq; + int optname; + int err; + + if (handle->flags & UV_HANDLE_IPV6) + return UV_EINVAL; + + /* If the socket is unbound, bind to inaddr_any. */ + err = uv_udp_maybe_bind(handle, + (const struct sockaddr*) &uv_addr_ip4_any_, + sizeof(uv_addr_ip4_any_), + UV_UDP_REUSEADDR); + if (err) + return uv_translate_sys_error(err); + + memset(&mreq, 0, sizeof(mreq)); + + if (interface_addr != NULL) { + err = uv_inet_pton(AF_INET, interface_addr, &mreq.imr_interface.s_addr); + if (err) + return err; + } else { + mreq.imr_interface.s_addr = htonl(INADDR_ANY); + } + + mreq.imr_multiaddr.s_addr = multicast_addr->sin_addr.s_addr; + mreq.imr_sourceaddr.s_addr = source_addr->sin_addr.s_addr; + + if (membership == UV_JOIN_GROUP) + optname = IP_ADD_SOURCE_MEMBERSHIP; + else if (membership == UV_LEAVE_GROUP) + optname = IP_DROP_SOURCE_MEMBERSHIP; + else + return UV_EINVAL; + + if (setsockopt(handle->socket, + IPPROTO_IP, + optname, + (char*) &mreq, + sizeof(mreq)) == SOCKET_ERROR) { + return uv_translate_sys_error(WSAGetLastError()); + } + + return 0; +} + + +int uv__udp_set_source_membership6(uv_udp_t* handle, + const struct sockaddr_in6* multicast_addr, + const char* interface_addr, + const struct sockaddr_in6* source_addr, + uv_membership membership) { + struct group_source_req mreq; + struct sockaddr_in6 addr6; + int optname; + int err; + + if ((handle->flags & UV_HANDLE_BOUND) && !(handle->flags & UV_HANDLE_IPV6)) + return UV_EINVAL; + + err = uv_udp_maybe_bind(handle, + (const struct sockaddr*) &uv_addr_ip6_any_, + sizeof(uv_addr_ip6_any_), + UV_UDP_REUSEADDR); + + if (err) + return uv_translate_sys_error(err); + + memset(&mreq, 0, sizeof(mreq)); + + if (interface_addr != NULL) { + err = uv_ip6_addr(interface_addr, 0, &addr6); + if (err) + return err; + mreq.gsr_interface = addr6.sin6_scope_id; + } else { + mreq.gsr_interface = 0; + } + + STATIC_ASSERT(sizeof(mreq.gsr_group) >= sizeof(*multicast_addr)); + STATIC_ASSERT(sizeof(mreq.gsr_source) >= sizeof(*source_addr)); + memcpy(&mreq.gsr_group, multicast_addr, sizeof(*multicast_addr)); + memcpy(&mreq.gsr_source, source_addr, sizeof(*source_addr)); + + if (membership == UV_JOIN_GROUP) + optname = MCAST_JOIN_SOURCE_GROUP; + else if (membership == UV_LEAVE_GROUP) + optname = MCAST_LEAVE_SOURCE_GROUP; + else + return UV_EINVAL; + + if (setsockopt(handle->socket, + IPPROTO_IPV6, + optname, + (char*) &mreq, + sizeof(mreq)) == SOCKET_ERROR) { + return uv_translate_sys_error(WSAGetLastError()); + } + + return 0; +} + + +int uv_udp_set_membership(uv_udp_t* handle, + const char* multicast_addr, + const char* interface_addr, + uv_membership membership) { + struct sockaddr_in addr4; + struct sockaddr_in6 addr6; + + if (uv_ip4_addr(multicast_addr, 0, &addr4) == 0) + return uv__udp_set_membership4(handle, &addr4, interface_addr, membership); + else if (uv_ip6_addr(multicast_addr, 0, &addr6) == 0) + return uv__udp_set_membership6(handle, &addr6, interface_addr, membership); + else + return UV_EINVAL; +} + + +int uv_udp_set_source_membership(uv_udp_t* handle, + const char* multicast_addr, + const char* interface_addr, + const char* source_addr, + uv_membership membership) { + int err; + struct sockaddr_storage mcast_addr; + struct sockaddr_in* mcast_addr4; + struct sockaddr_in6* mcast_addr6; + struct sockaddr_storage src_addr; + struct sockaddr_in* src_addr4; + struct sockaddr_in6* src_addr6; + + mcast_addr4 = (struct sockaddr_in*)&mcast_addr; + mcast_addr6 = (struct sockaddr_in6*)&mcast_addr; + src_addr4 = (struct sockaddr_in*)&src_addr; + src_addr6 = (struct sockaddr_in6*)&src_addr; + + err = uv_ip4_addr(multicast_addr, 0, mcast_addr4); + if (err) { + err = uv_ip6_addr(multicast_addr, 0, mcast_addr6); + if (err) + return err; + err = uv_ip6_addr(source_addr, 0, src_addr6); + if (err) + return err; + return uv__udp_set_source_membership6(handle, + mcast_addr6, + interface_addr, + src_addr6, + membership); + } + + err = uv_ip4_addr(source_addr, 0, src_addr4); + if (err) + return err; + return uv__udp_set_source_membership4(handle, + mcast_addr4, + interface_addr, + src_addr4, + membership); +} + + +int uv_udp_set_multicast_interface(uv_udp_t* handle, const char* interface_addr) { + struct sockaddr_storage addr_st; + struct sockaddr_in* addr4; + struct sockaddr_in6* addr6; + + addr4 = (struct sockaddr_in*) &addr_st; + addr6 = (struct sockaddr_in6*) &addr_st; + + if (!interface_addr) { + memset(&addr_st, 0, sizeof addr_st); + if (handle->flags & UV_HANDLE_IPV6) { + addr_st.ss_family = AF_INET6; + addr6->sin6_scope_id = 0; + } else { + addr_st.ss_family = AF_INET; + addr4->sin_addr.s_addr = htonl(INADDR_ANY); + } + } else if (uv_ip4_addr(interface_addr, 0, addr4) == 0) { + /* nothing, address was parsed */ + } else if (uv_ip6_addr(interface_addr, 0, addr6) == 0) { + /* nothing, address was parsed */ + } else { + return UV_EINVAL; + } + + if (handle->socket == INVALID_SOCKET) + return UV_EBADF; + + if (addr_st.ss_family == AF_INET) { + if (setsockopt(handle->socket, + IPPROTO_IP, + IP_MULTICAST_IF, + (char*) &addr4->sin_addr, + sizeof(addr4->sin_addr)) == SOCKET_ERROR) { + return uv_translate_sys_error(WSAGetLastError()); + } + } else if (addr_st.ss_family == AF_INET6) { + if (setsockopt(handle->socket, + IPPROTO_IPV6, + IPV6_MULTICAST_IF, + (char*) &addr6->sin6_scope_id, + sizeof(addr6->sin6_scope_id)) == SOCKET_ERROR) { + return uv_translate_sys_error(WSAGetLastError()); + } + } else { + assert(0 && "unexpected address family"); + abort(); + } + + return 0; +} + + +int uv_udp_set_broadcast(uv_udp_t* handle, int value) { + BOOL optval = (BOOL) value; + + if (handle->socket == INVALID_SOCKET) + return UV_EBADF; + + if (setsockopt(handle->socket, + SOL_SOCKET, + SO_BROADCAST, + (char*) &optval, + sizeof optval)) { + return uv_translate_sys_error(WSAGetLastError()); + } + + return 0; +} + + +int uv__udp_is_bound(uv_udp_t* handle) { + struct sockaddr_storage addr; + int addrlen; + + addrlen = sizeof(addr); + if (uv_udp_getsockname(handle, (struct sockaddr*) &addr, &addrlen) != 0) + return 0; + + return addrlen > 0; +} + + +int uv_udp_open(uv_udp_t* handle, uv_os_sock_t sock) { + WSAPROTOCOL_INFOW protocol_info; + int opt_len; + int err; + + /* Detect the address family of the socket. */ + opt_len = (int) sizeof protocol_info; + if (getsockopt(sock, + SOL_SOCKET, + SO_PROTOCOL_INFOW, + (char*) &protocol_info, + &opt_len) == SOCKET_ERROR) { + return uv_translate_sys_error(GetLastError()); + } + + err = uv_udp_set_socket(handle->loop, + handle, + sock, + protocol_info.iAddressFamily); + if (err) + return uv_translate_sys_error(err); + + if (uv__udp_is_bound(handle)) + handle->flags |= UV_HANDLE_BOUND; + + if (uv__udp_is_connected(handle)) + handle->flags |= UV_HANDLE_UDP_CONNECTED; + + return 0; +} + + +#define SOCKOPT_SETTER(name, option4, option6, validate) \ + int uv_udp_set_##name(uv_udp_t* handle, int value) { \ + DWORD optval = (DWORD) value; \ + \ + if (!(validate(value))) { \ + return UV_EINVAL; \ + } \ + \ + if (handle->socket == INVALID_SOCKET) \ + return UV_EBADF; \ + \ + if (!(handle->flags & UV_HANDLE_IPV6)) { \ + /* Set IPv4 socket option */ \ + if (setsockopt(handle->socket, \ + IPPROTO_IP, \ + option4, \ + (char*) &optval, \ + sizeof optval)) { \ + return uv_translate_sys_error(WSAGetLastError()); \ + } \ + } else { \ + /* Set IPv6 socket option */ \ + if (setsockopt(handle->socket, \ + IPPROTO_IPV6, \ + option6, \ + (char*) &optval, \ + sizeof optval)) { \ + return uv_translate_sys_error(WSAGetLastError()); \ + } \ + } \ + return 0; \ + } + +#define VALIDATE_TTL(value) ((value) >= 1 && (value) <= 255) +#define VALIDATE_MULTICAST_TTL(value) ((value) >= -1 && (value) <= 255) +#define VALIDATE_MULTICAST_LOOP(value) (1) + +SOCKOPT_SETTER(ttl, + IP_TTL, + IPV6_HOPLIMIT, + VALIDATE_TTL) +SOCKOPT_SETTER(multicast_ttl, + IP_MULTICAST_TTL, + IPV6_MULTICAST_HOPS, + VALIDATE_MULTICAST_TTL) +SOCKOPT_SETTER(multicast_loop, + IP_MULTICAST_LOOP, + IPV6_MULTICAST_LOOP, + VALIDATE_MULTICAST_LOOP) + +#undef SOCKOPT_SETTER +#undef VALIDATE_TTL +#undef VALIDATE_MULTICAST_TTL +#undef VALIDATE_MULTICAST_LOOP + + +/* This function is an egress point, i.e. it returns libuv errors rather than + * system errors. + */ +int uv__udp_bind(uv_udp_t* handle, + const struct sockaddr* addr, + unsigned int addrlen, + unsigned int flags) { + int err; + + err = uv_udp_maybe_bind(handle, addr, addrlen, flags); + if (err) + return uv_translate_sys_error(err); + + return 0; +} + + +int uv__udp_connect(uv_udp_t* handle, + const struct sockaddr* addr, + unsigned int addrlen) { + const struct sockaddr* bind_addr; + int err; + + if (!(handle->flags & UV_HANDLE_BOUND)) { + if (addrlen == sizeof(uv_addr_ip4_any_)) + bind_addr = (const struct sockaddr*) &uv_addr_ip4_any_; + else if (addrlen == sizeof(uv_addr_ip6_any_)) + bind_addr = (const struct sockaddr*) &uv_addr_ip6_any_; + else + return UV_EINVAL; + + err = uv_udp_maybe_bind(handle, bind_addr, addrlen, 0); + if (err) + return uv_translate_sys_error(err); + } + + err = connect(handle->socket, addr, addrlen); + if (err) + return uv_translate_sys_error(err); + + handle->flags |= UV_HANDLE_UDP_CONNECTED; + + return 0; +} + + +int uv__udp_disconnect(uv_udp_t* handle) { + int err; + struct sockaddr addr; + + memset(&addr, 0, sizeof(addr)); + + err = connect(handle->socket, &addr, sizeof(addr)); + if (err) + return uv_translate_sys_error(err); + + handle->flags &= ~UV_HANDLE_UDP_CONNECTED; + return 0; +} + + +/* This function is an egress point, i.e. it returns libuv errors rather than + * system errors. + */ +int uv__udp_send(uv_udp_send_t* req, + uv_udp_t* handle, + const uv_buf_t bufs[], + unsigned int nbufs, + const struct sockaddr* addr, + unsigned int addrlen, + uv_udp_send_cb send_cb) { + const struct sockaddr* bind_addr; + int err; + + if (!(handle->flags & UV_HANDLE_BOUND)) { + if (addrlen == sizeof(uv_addr_ip4_any_)) + bind_addr = (const struct sockaddr*) &uv_addr_ip4_any_; + else if (addrlen == sizeof(uv_addr_ip6_any_)) + bind_addr = (const struct sockaddr*) &uv_addr_ip6_any_; + else + return UV_EINVAL; + + err = uv_udp_maybe_bind(handle, bind_addr, addrlen, 0); + if (err) + return uv_translate_sys_error(err); + } + + err = uv__send(req, handle, bufs, nbufs, addr, addrlen, send_cb); + if (err) + return uv_translate_sys_error(err); + + return 0; +} + + +int uv__udp_try_send(uv_udp_t* handle, + const uv_buf_t bufs[], + unsigned int nbufs, + const struct sockaddr* addr, + unsigned int addrlen) { + DWORD bytes; + const struct sockaddr* bind_addr; + struct sockaddr_storage converted; + int err; + + assert(nbufs > 0); + + if (addr != NULL) { + err = uv__convert_to_localhost_if_unspecified(addr, &converted); + if (err) + return err; + } + + /* Already sending a message.*/ + if (handle->send_queue_count != 0) + return UV_EAGAIN; + + if (!(handle->flags & UV_HANDLE_BOUND)) { + if (addrlen == sizeof(uv_addr_ip4_any_)) + bind_addr = (const struct sockaddr*) &uv_addr_ip4_any_; + else if (addrlen == sizeof(uv_addr_ip6_any_)) + bind_addr = (const struct sockaddr*) &uv_addr_ip6_any_; + else + return UV_EINVAL; + err = uv_udp_maybe_bind(handle, bind_addr, addrlen, 0); + if (err) + return uv_translate_sys_error(err); + } + + err = WSASendTo(handle->socket, + (WSABUF*)bufs, + nbufs, + &bytes, + 0, + (const struct sockaddr*) &converted, + addrlen, + NULL, + NULL); + + if (err) + return uv_translate_sys_error(WSAGetLastError()); + + return bytes; +} diff --git a/external/libuv/src/win/util.c b/external/libuv/src/win/util.c new file mode 100644 index 000000000..74c904632 --- /dev/null +++ b/external/libuv/src/win/util.c @@ -0,0 +1,1972 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#include +#include +#include +#include +#include +#include +#include + +#include "uv.h" +#include "internal.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * Max title length; the only thing MSDN tells us about the maximum length + * of the console title is that it is smaller than 64K. However in practice + * it is much smaller, and there is no way to figure out what the exact length + * of the title is or can be, at least not on XP. To make it even more + * annoying, GetConsoleTitle fails when the buffer to be read into is bigger + * than the actual maximum length. So we make a conservative guess here; + * just don't put the novel you're writing in the title, unless the plot + * survives truncation. + */ +#define MAX_TITLE_LENGTH 8192 + +/* The number of nanoseconds in one second. */ +#define UV__NANOSEC 1000000000 + +/* Max user name length, from iphlpapi.h */ +#ifndef UNLEN +# define UNLEN 256 +#endif + +/* RtlGenRandom() */ +#define SystemFunction036 NTAPI SystemFunction036 +#include +#undef SystemFunction036 + +/* Cached copy of the process title, plus a mutex guarding it. */ +static char *process_title; +static CRITICAL_SECTION process_title_lock; + +/* Interval (in seconds) of the high-resolution clock. */ +static double hrtime_interval_ = 0; + + +/* + * One-time initialization code for functionality defined in util.c. + */ +void uv__util_init(void) { + LARGE_INTEGER perf_frequency; + + /* Initialize process title access mutex. */ + InitializeCriticalSection(&process_title_lock); + + /* Retrieve high-resolution timer frequency + * and precompute its reciprocal. + */ + if (QueryPerformanceFrequency(&perf_frequency)) { + hrtime_interval_ = 1.0 / perf_frequency.QuadPart; + } else { + hrtime_interval_= 0; + } +} + + +int uv_exepath(char* buffer, size_t* size_ptr) { + int utf8_len, utf16_buffer_len, utf16_len; + WCHAR* utf16_buffer; + int err; + + if (buffer == NULL || size_ptr == NULL || *size_ptr == 0) { + return UV_EINVAL; + } + + if (*size_ptr > 32768) { + /* Windows paths can never be longer than this. */ + utf16_buffer_len = 32768; + } else { + utf16_buffer_len = (int) *size_ptr; + } + + utf16_buffer = (WCHAR*) uv__malloc(sizeof(WCHAR) * utf16_buffer_len); + if (!utf16_buffer) { + return UV_ENOMEM; + } + + /* Get the path as UTF-16. */ + utf16_len = GetModuleFileNameW(NULL, utf16_buffer, utf16_buffer_len); + if (utf16_len <= 0) { + err = GetLastError(); + goto error; + } + + /* utf16_len contains the length, *not* including the terminating null. */ + utf16_buffer[utf16_len] = L'\0'; + + /* Convert to UTF-8 */ + utf8_len = WideCharToMultiByte(CP_UTF8, + 0, + utf16_buffer, + -1, + buffer, + (int) *size_ptr, + NULL, + NULL); + if (utf8_len == 0) { + err = GetLastError(); + goto error; + } + + uv__free(utf16_buffer); + + /* utf8_len *does* include the terminating null at this point, but the + * returned size shouldn't. */ + *size_ptr = utf8_len - 1; + return 0; + + error: + uv__free(utf16_buffer); + return uv_translate_sys_error(err); +} + + +int uv_cwd(char* buffer, size_t* size) { + DWORD utf16_len; + WCHAR *utf16_buffer; + int r; + + if (buffer == NULL || size == NULL) { + return UV_EINVAL; + } + + utf16_len = GetCurrentDirectoryW(0, NULL); + if (utf16_len == 0) { + return uv_translate_sys_error(GetLastError()); + } + utf16_buffer = (WCHAR *)uv__malloc(utf16_len * sizeof(WCHAR)); + if (utf16_buffer == NULL) { + return UV_ENOMEM; + } + + utf16_len = GetCurrentDirectoryW(utf16_len, utf16_buffer); + if (utf16_len == 0) { + uv__free(utf16_buffer); + return uv_translate_sys_error(GetLastError()); + } + + /* utf16_len contains the length, *not* including the terminating null. */ + utf16_buffer[utf16_len] = L'\0'; + + /* The returned directory should not have a trailing slash, unless it points + * at a drive root, like c:\. Remove it if needed. */ + if (utf16_buffer[utf16_len - 1] == L'\\' && + !(utf16_len == 3 && utf16_buffer[1] == L':')) { + utf16_len--; + utf16_buffer[utf16_len] = L'\0'; + } + + /* Check how much space we need */ + r = WideCharToMultiByte(CP_UTF8, + 0, + utf16_buffer, + -1, + NULL, + 0, + NULL, + NULL); + if (r == 0) { + uv__free(utf16_buffer); + return uv_translate_sys_error(GetLastError()); + } else if (r > (int) *size) { + uv__free(utf16_buffer); + *size = r; + return UV_ENOBUFS; + } + + /* Convert to UTF-8 */ + r = WideCharToMultiByte(CP_UTF8, + 0, + utf16_buffer, + -1, + buffer, + *size > INT_MAX ? INT_MAX : (int) *size, + NULL, + NULL); + uv__free(utf16_buffer); + + if (r == 0) { + return uv_translate_sys_error(GetLastError()); + } + + *size = r - 1; + return 0; +} + + +int uv_chdir(const char* dir) { + WCHAR *utf16_buffer; + size_t utf16_len, new_utf16_len; + WCHAR drive_letter, env_var[4]; + + if (dir == NULL) { + return UV_EINVAL; + } + + utf16_len = MultiByteToWideChar(CP_UTF8, + 0, + dir, + -1, + NULL, + 0); + if (utf16_len == 0) { + return uv_translate_sys_error(GetLastError()); + } + utf16_buffer = (WCHAR *)uv__malloc(utf16_len * sizeof(WCHAR)); + if (utf16_buffer == NULL) { + return UV_ENOMEM; + } + + if (MultiByteToWideChar(CP_UTF8, + 0, + dir, + -1, + utf16_buffer, + utf16_len) == 0) { + uv__free(utf16_buffer); + return uv_translate_sys_error(GetLastError()); + } + + if (!SetCurrentDirectoryW(utf16_buffer)) { + uv__free(utf16_buffer); + return uv_translate_sys_error(GetLastError()); + } + + /* Windows stores the drive-local path in an "hidden" environment variable, + * which has the form "=C:=C:\Windows". SetCurrentDirectory does not update + * this, so we'll have to do it. */ + new_utf16_len = GetCurrentDirectoryW(utf16_len, utf16_buffer); + if (new_utf16_len > utf16_len ) { + uv__free(utf16_buffer); + utf16_buffer = (WCHAR *)uv__malloc(new_utf16_len * sizeof(WCHAR)); + if (utf16_buffer == NULL) { + /* When updating the environment variable fails, return UV_OK anyway. + * We did successfully change current working directory, only updating + * hidden env variable failed. */ + return 0; + } + new_utf16_len = GetCurrentDirectoryW(new_utf16_len, utf16_buffer); + } + if (utf16_len == 0) { + uv__free(utf16_buffer); + return 0; + } + + /* The returned directory should not have a trailing slash, unless it points + * at a drive root, like c:\. Remove it if needed. */ + if (utf16_buffer[utf16_len - 1] == L'\\' && + !(utf16_len == 3 && utf16_buffer[1] == L':')) { + utf16_len--; + utf16_buffer[utf16_len] = L'\0'; + } + + if (utf16_len < 2 || utf16_buffer[1] != L':') { + /* Doesn't look like a drive letter could be there - probably an UNC path. + * TODO: Need to handle win32 namespaces like \\?\C:\ ? */ + drive_letter = 0; + } else if (utf16_buffer[0] >= L'A' && utf16_buffer[0] <= L'Z') { + drive_letter = utf16_buffer[0]; + } else if (utf16_buffer[0] >= L'a' && utf16_buffer[0] <= L'z') { + /* Convert to uppercase. */ + drive_letter = utf16_buffer[0] - L'a' + L'A'; + } else { + /* Not valid. */ + drive_letter = 0; + } + + if (drive_letter != 0) { + /* Construct the environment variable name and set it. */ + env_var[0] = L'='; + env_var[1] = drive_letter; + env_var[2] = L':'; + env_var[3] = L'\0'; + + SetEnvironmentVariableW(env_var, utf16_buffer); + } + + uv__free(utf16_buffer); + return 0; +} + + +void uv_loadavg(double avg[3]) { + /* Can't be implemented */ + avg[0] = avg[1] = avg[2] = 0; +} + + +uint64_t uv_get_free_memory(void) { + MEMORYSTATUSEX memory_status; + memory_status.dwLength = sizeof(memory_status); + + if (!GlobalMemoryStatusEx(&memory_status)) { + return -1; + } + + return (uint64_t)memory_status.ullAvailPhys; +} + + +uint64_t uv_get_total_memory(void) { + MEMORYSTATUSEX memory_status; + memory_status.dwLength = sizeof(memory_status); + + if (!GlobalMemoryStatusEx(&memory_status)) { + return -1; + } + + return (uint64_t)memory_status.ullTotalPhys; +} + + +uint64_t uv_get_constrained_memory(void) { + return 0; /* Memory constraints are unknown. */ +} + + +uv_pid_t uv_os_getpid(void) { + return GetCurrentProcessId(); +} + + +uv_pid_t uv_os_getppid(void) { + int parent_pid = -1; + HANDLE handle; + PROCESSENTRY32 pe; + DWORD current_pid = GetCurrentProcessId(); + + pe.dwSize = sizeof(PROCESSENTRY32); + handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); + + if (Process32First(handle, &pe)) { + do { + if (pe.th32ProcessID == current_pid) { + parent_pid = pe.th32ParentProcessID; + break; + } + } while( Process32Next(handle, &pe)); + } + + CloseHandle(handle); + return parent_pid; +} + + +char** uv_setup_args(int argc, char** argv) { + return argv; +} + + +void uv__process_title_cleanup(void) { +} + + +int uv_set_process_title(const char* title) { + int err; + int length; + WCHAR* title_w = NULL; + + uv__once_init(); + + /* Find out how big the buffer for the wide-char title must be */ + length = MultiByteToWideChar(CP_UTF8, 0, title, -1, NULL, 0); + if (!length) { + err = GetLastError(); + goto done; + } + + /* Convert to wide-char string */ + title_w = (WCHAR*)uv__malloc(sizeof(WCHAR) * length); + if (!title_w) { + uv_fatal_error(ERROR_OUTOFMEMORY, "uv__malloc"); + } + + length = MultiByteToWideChar(CP_UTF8, 0, title, -1, title_w, length); + if (!length) { + err = GetLastError(); + goto done; + } + + /* If the title must be truncated insert a \0 terminator there */ + if (length > MAX_TITLE_LENGTH) { + title_w[MAX_TITLE_LENGTH - 1] = L'\0'; + } + + if (!SetConsoleTitleW(title_w)) { + err = GetLastError(); + goto done; + } + + EnterCriticalSection(&process_title_lock); + uv__free(process_title); + process_title = uv__strdup(title); + LeaveCriticalSection(&process_title_lock); + + err = 0; + +done: + uv__free(title_w); + return uv_translate_sys_error(err); +} + + +static int uv__get_process_title(void) { + WCHAR title_w[MAX_TITLE_LENGTH]; + + if (!GetConsoleTitleW(title_w, sizeof(title_w) / sizeof(WCHAR))) { + return -1; + } + + if (uv__convert_utf16_to_utf8(title_w, -1, &process_title) != 0) + return -1; + + return 0; +} + + +int uv_get_process_title(char* buffer, size_t size) { + size_t len; + + if (buffer == NULL || size == 0) + return UV_EINVAL; + + uv__once_init(); + + EnterCriticalSection(&process_title_lock); + /* + * If the process_title was never read before nor explicitly set, + * we must query it with getConsoleTitleW + */ + if (!process_title && uv__get_process_title() == -1) { + LeaveCriticalSection(&process_title_lock); + return uv_translate_sys_error(GetLastError()); + } + + assert(process_title); + len = strlen(process_title) + 1; + + if (size < len) { + LeaveCriticalSection(&process_title_lock); + return UV_ENOBUFS; + } + + memcpy(buffer, process_title, len); + LeaveCriticalSection(&process_title_lock); + + return 0; +} + + +uint64_t uv_hrtime(void) { + uv__once_init(); + return uv__hrtime(UV__NANOSEC); +} + +uint64_t uv__hrtime(double scale) { + LARGE_INTEGER counter; + + /* If the performance interval is zero, there's no support. */ + if (hrtime_interval_ == 0) { + return 0; + } + + if (!QueryPerformanceCounter(&counter)) { + return 0; + } + + /* Because we have no guarantee about the order of magnitude of the + * performance counter interval, integer math could cause this computation + * to overflow. Therefore we resort to floating point math. + */ + return (uint64_t) ((double) counter.QuadPart * hrtime_interval_ * scale); +} + + +int uv_resident_set_memory(size_t* rss) { + HANDLE current_process; + PROCESS_MEMORY_COUNTERS pmc; + + current_process = GetCurrentProcess(); + + if (!GetProcessMemoryInfo(current_process, &pmc, sizeof(pmc))) { + return uv_translate_sys_error(GetLastError()); + } + + *rss = pmc.WorkingSetSize; + + return 0; +} + + +int uv_uptime(double* uptime) { + BYTE stack_buffer[4096]; + BYTE* malloced_buffer = NULL; + BYTE* buffer = (BYTE*) stack_buffer; + size_t buffer_size = sizeof(stack_buffer); + DWORD data_size; + + PERF_DATA_BLOCK* data_block; + PERF_OBJECT_TYPE* object_type; + PERF_COUNTER_DEFINITION* counter_definition; + + DWORD i; + + for (;;) { + LONG result; + + data_size = (DWORD) buffer_size; + result = RegQueryValueExW(HKEY_PERFORMANCE_DATA, + L"2", + NULL, + NULL, + buffer, + &data_size); + if (result == ERROR_SUCCESS) { + break; + } else if (result != ERROR_MORE_DATA) { + *uptime = 0; + return uv_translate_sys_error(result); + } + + buffer_size *= 2; + /* Don't let the buffer grow infinitely. */ + if (buffer_size > 1 << 20) { + goto internalError; + } + + uv__free(malloced_buffer); + + buffer = malloced_buffer = (BYTE*) uv__malloc(buffer_size); + if (malloced_buffer == NULL) { + *uptime = 0; + return UV_ENOMEM; + } + } + + if (data_size < sizeof(*data_block)) + goto internalError; + + data_block = (PERF_DATA_BLOCK*) buffer; + + if (wmemcmp(data_block->Signature, L"PERF", 4) != 0) + goto internalError; + + if (data_size < data_block->HeaderLength + sizeof(*object_type)) + goto internalError; + + object_type = (PERF_OBJECT_TYPE*) (buffer + data_block->HeaderLength); + + if (object_type->NumInstances != PERF_NO_INSTANCES) + goto internalError; + + counter_definition = (PERF_COUNTER_DEFINITION*) (buffer + + data_block->HeaderLength + object_type->HeaderLength); + for (i = 0; i < object_type->NumCounters; i++) { + if ((BYTE*) counter_definition + sizeof(*counter_definition) > + buffer + data_size) { + break; + } + + if (counter_definition->CounterNameTitleIndex == 674 && + counter_definition->CounterSize == sizeof(uint64_t)) { + if (counter_definition->CounterOffset + sizeof(uint64_t) > data_size || + !(counter_definition->CounterType & PERF_OBJECT_TIMER)) { + goto internalError; + } else { + BYTE* address = (BYTE*) object_type + object_type->DefinitionLength + + counter_definition->CounterOffset; + uint64_t value = *((uint64_t*) address); + *uptime = floor((double) (object_type->PerfTime.QuadPart - value) / + (double) object_type->PerfFreq.QuadPart); + uv__free(malloced_buffer); + return 0; + } + } + + counter_definition = (PERF_COUNTER_DEFINITION*) + ((BYTE*) counter_definition + counter_definition->ByteLength); + } + + /* If we get here, the uptime value was not found. */ + uv__free(malloced_buffer); + *uptime = 0; + return UV_ENOSYS; + + internalError: + uv__free(malloced_buffer); + *uptime = 0; + return UV_EIO; +} + + +int uv_cpu_info(uv_cpu_info_t** cpu_infos_ptr, int* cpu_count_ptr) { + uv_cpu_info_t* cpu_infos; + SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION* sppi; + DWORD sppi_size; + SYSTEM_INFO system_info; + DWORD cpu_count, i; + NTSTATUS status; + ULONG result_size; + int err; + uv_cpu_info_t* cpu_info; + + cpu_infos = NULL; + cpu_count = 0; + sppi = NULL; + + uv__once_init(); + + GetSystemInfo(&system_info); + cpu_count = system_info.dwNumberOfProcessors; + + cpu_infos = (uv_cpu_info_t *)uv__calloc(cpu_count, sizeof *cpu_infos); + if (cpu_infos == NULL) { + err = ERROR_OUTOFMEMORY; + goto error; + } + + sppi_size = cpu_count * sizeof(*sppi); + sppi = (SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION *)uv__malloc(sppi_size); + if (sppi == NULL) { + err = ERROR_OUTOFMEMORY; + goto error; + } + + status = pNtQuerySystemInformation(SystemProcessorPerformanceInformation, + sppi, + sppi_size, + &result_size); + if (!NT_SUCCESS(status)) { + err = pRtlNtStatusToDosError(status); + goto error; + } + + assert(result_size == sppi_size); + + for (i = 0; i < cpu_count; i++) { + WCHAR key_name[128]; + HKEY processor_key; + DWORD cpu_speed; + DWORD cpu_speed_size = sizeof(cpu_speed); + WCHAR cpu_brand[256]; + DWORD cpu_brand_size = sizeof(cpu_brand); + size_t len; + + len = _snwprintf(key_name, + ARRAY_SIZE(key_name), + L"HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\%d", + i); + + assert(len > 0 && len < ARRAY_SIZE(key_name)); + + err = RegOpenKeyExW(HKEY_LOCAL_MACHINE, + key_name, + 0, + KEY_QUERY_VALUE, + &processor_key); + if (err != ERROR_SUCCESS) { + goto error; + } + + err = RegQueryValueExW(processor_key, + L"~MHz", + NULL, + NULL, + (BYTE*)&cpu_speed, + &cpu_speed_size); + if (err != ERROR_SUCCESS) { + RegCloseKey(processor_key); + goto error; + } + + err = RegQueryValueExW(processor_key, + L"ProcessorNameString", + NULL, + NULL, + (BYTE*)&cpu_brand, + &cpu_brand_size); + RegCloseKey(processor_key); + if (err != ERROR_SUCCESS) + goto error; + + cpu_info = &cpu_infos[i]; + cpu_info->speed = cpu_speed; + cpu_info->cpu_times.user = sppi[i].UserTime.QuadPart / 10000; + cpu_info->cpu_times.sys = (sppi[i].KernelTime.QuadPart - + sppi[i].IdleTime.QuadPart) / 10000; + cpu_info->cpu_times.idle = sppi[i].IdleTime.QuadPart / 10000; + cpu_info->cpu_times.irq = sppi[i].InterruptTime.QuadPart / 10000; + cpu_info->cpu_times.nice = 0; + + uv__convert_utf16_to_utf8(cpu_brand, + cpu_brand_size / sizeof(WCHAR), + &(cpu_info->model)); + } + + uv__free(sppi); + + *cpu_count_ptr = cpu_count; + *cpu_infos_ptr = cpu_infos; + + return 0; + + error: + if (cpu_infos != NULL) { + /* This is safe because the cpu_infos array is zeroed on allocation. */ + for (i = 0; i < cpu_count; i++) + uv__free(cpu_infos[i].model); + } + + uv__free(cpu_infos); + uv__free(sppi); + + return uv_translate_sys_error(err); +} + + +static int is_windows_version_or_greater(DWORD os_major, + DWORD os_minor, + WORD service_pack_major, + WORD service_pack_minor) { + OSVERSIONINFOEX osvi; + DWORDLONG condition_mask = 0; + int op = VER_GREATER_EQUAL; + + /* Initialize the OSVERSIONINFOEX structure. */ + ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX)); + osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); + osvi.dwMajorVersion = os_major; + osvi.dwMinorVersion = os_minor; + osvi.wServicePackMajor = service_pack_major; + osvi.wServicePackMinor = service_pack_minor; + + /* Initialize the condition mask. */ + VER_SET_CONDITION(condition_mask, VER_MAJORVERSION, op); + VER_SET_CONDITION(condition_mask, VER_MINORVERSION, op); + VER_SET_CONDITION(condition_mask, VER_SERVICEPACKMAJOR, op); + VER_SET_CONDITION(condition_mask, VER_SERVICEPACKMINOR, op); + + /* Perform the test. */ + return (int) VerifyVersionInfo( + &osvi, + VER_MAJORVERSION | VER_MINORVERSION | + VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, + condition_mask); +} + + +static int address_prefix_match(int family, + struct sockaddr* address, + struct sockaddr* prefix_address, + int prefix_len) { + uint8_t* address_data; + uint8_t* prefix_address_data; + int i; + + assert(address->sa_family == family); + assert(prefix_address->sa_family == family); + + if (family == AF_INET6) { + address_data = (uint8_t*) &(((struct sockaddr_in6 *) address)->sin6_addr); + prefix_address_data = + (uint8_t*) &(((struct sockaddr_in6 *) prefix_address)->sin6_addr); + } else { + address_data = (uint8_t*) &(((struct sockaddr_in *) address)->sin_addr); + prefix_address_data = + (uint8_t*) &(((struct sockaddr_in *) prefix_address)->sin_addr); + } + + for (i = 0; i < prefix_len >> 3; i++) { + if (address_data[i] != prefix_address_data[i]) + return 0; + } + + if (prefix_len % 8) + return prefix_address_data[i] == + (address_data[i] & (0xff << (8 - prefix_len % 8))); + + return 1; +} + + +int uv_interface_addresses(uv_interface_address_t** addresses_ptr, + int* count_ptr) { + IP_ADAPTER_ADDRESSES* win_address_buf; + ULONG win_address_buf_size; + IP_ADAPTER_ADDRESSES* adapter; + + uv_interface_address_t* uv_address_buf; + char* name_buf; + size_t uv_address_buf_size; + uv_interface_address_t* uv_address; + + int count; + + int is_vista_or_greater; + ULONG flags; + + *addresses_ptr = NULL; + *count_ptr = 0; + + is_vista_or_greater = is_windows_version_or_greater(6, 0, 0, 0); + if (is_vista_or_greater) { + flags = GAA_FLAG_SKIP_ANYCAST | GAA_FLAG_SKIP_MULTICAST | + GAA_FLAG_SKIP_DNS_SERVER; + } else { + /* We need at least XP SP1. */ + if (!is_windows_version_or_greater(5, 1, 1, 0)) + return UV_ENOTSUP; + + flags = GAA_FLAG_SKIP_ANYCAST | GAA_FLAG_SKIP_MULTICAST | + GAA_FLAG_SKIP_DNS_SERVER | GAA_FLAG_INCLUDE_PREFIX; + } + + + /* Fetch the size of the adapters reported by windows, and then get the list + * itself. */ + win_address_buf_size = 0; + win_address_buf = NULL; + + for (;;) { + ULONG r; + + /* If win_address_buf is 0, then GetAdaptersAddresses will fail with. + * ERROR_BUFFER_OVERFLOW, and the required buffer size will be stored in + * win_address_buf_size. */ + r = GetAdaptersAddresses(AF_UNSPEC, + flags, + NULL, + win_address_buf, + &win_address_buf_size); + + if (r == ERROR_SUCCESS) + break; + + uv__free(win_address_buf); + + switch (r) { + case ERROR_BUFFER_OVERFLOW: + /* This happens when win_address_buf is NULL or too small to hold all + * adapters. */ + win_address_buf = (IP_ADAPTER_ADDRESSES *)uv__malloc(win_address_buf_size); + if (win_address_buf == NULL) + return UV_ENOMEM; + + continue; + + case ERROR_NO_DATA: { + /* No adapters were found. */ + uv_address_buf = (uv_interface_address_t *)uv__malloc(1); + if (uv_address_buf == NULL) + return UV_ENOMEM; + + *count_ptr = 0; + *addresses_ptr = uv_address_buf; + + return 0; + } + + case ERROR_ADDRESS_NOT_ASSOCIATED: + return UV_EAGAIN; + + case ERROR_INVALID_PARAMETER: + /* MSDN says: + * "This error is returned for any of the following conditions: the + * SizePointer parameter is NULL, the Address parameter is not + * AF_INET, AF_INET6, or AF_UNSPEC, or the address information for + * the parameters requested is greater than ULONG_MAX." + * Since the first two conditions are not met, it must be that the + * adapter data is too big. + */ + return UV_ENOBUFS; + + default: + /* Other (unspecified) errors can happen, but we don't have any special + * meaning for them. */ + assert(r != ERROR_SUCCESS); + return uv_translate_sys_error(r); + } + } + + /* Count the number of enabled interfaces and compute how much space is + * needed to store their info. */ + count = 0; + uv_address_buf_size = 0; + + for (adapter = win_address_buf; + adapter != NULL; + adapter = adapter->Next) { + IP_ADAPTER_UNICAST_ADDRESS* unicast_address; + int name_size; + + /* Interfaces that are not 'up' should not be reported. Also skip + * interfaces that have no associated unicast address, as to avoid + * allocating space for the name for this interface. */ + if (adapter->OperStatus != IfOperStatusUp || + adapter->FirstUnicastAddress == NULL) + continue; + + /* Compute the size of the interface name. */ + name_size = WideCharToMultiByte(CP_UTF8, + 0, + adapter->FriendlyName, + -1, + NULL, + 0, + NULL, + FALSE); + if (name_size <= 0) { + uv__free(win_address_buf); + return uv_translate_sys_error(GetLastError()); + } + uv_address_buf_size += name_size; + + /* Count the number of addresses associated with this interface, and + * compute the size. */ + for (unicast_address = (IP_ADAPTER_UNICAST_ADDRESS*) + adapter->FirstUnicastAddress; + unicast_address != NULL; + unicast_address = unicast_address->Next) { + count++; + uv_address_buf_size += sizeof(uv_interface_address_t); + } + } + + /* Allocate space to store interface data plus adapter names. */ + uv_address_buf = (uv_interface_address_t *)uv__malloc(uv_address_buf_size); + if (uv_address_buf == NULL) { + uv__free(win_address_buf); + return UV_ENOMEM; + } + + /* Compute the start of the uv_interface_address_t array, and the place in + * the buffer where the interface names will be stored. */ + uv_address = uv_address_buf; + name_buf = (char*) (uv_address_buf + count); + + /* Fill out the output buffer. */ + for (adapter = win_address_buf; + adapter != NULL; + adapter = adapter->Next) { + IP_ADAPTER_UNICAST_ADDRESS* unicast_address; + int name_size; + size_t max_name_size; + + if (adapter->OperStatus != IfOperStatusUp || + adapter->FirstUnicastAddress == NULL) + continue; + + /* Convert the interface name to UTF8. */ + max_name_size = (char*) uv_address_buf + uv_address_buf_size - name_buf; + if (max_name_size > (size_t) INT_MAX) + max_name_size = INT_MAX; + name_size = WideCharToMultiByte(CP_UTF8, + 0, + adapter->FriendlyName, + -1, + name_buf, + (int) max_name_size, + NULL, + FALSE); + if (name_size <= 0) { + uv__free(win_address_buf); + uv__free(uv_address_buf); + return uv_translate_sys_error(GetLastError()); + } + + /* Add an uv_interface_address_t element for every unicast address. */ + for (unicast_address = (IP_ADAPTER_UNICAST_ADDRESS*) + adapter->FirstUnicastAddress; + unicast_address != NULL; + unicast_address = unicast_address->Next) { + struct sockaddr* sa; + ULONG prefix_len; + + sa = unicast_address->Address.lpSockaddr; + + /* XP has no OnLinkPrefixLength field. */ + if (is_vista_or_greater) { + prefix_len = + ((IP_ADAPTER_UNICAST_ADDRESS_LH*) unicast_address)->OnLinkPrefixLength; + } else { + /* Prior to Windows Vista the FirstPrefix pointed to the list with + * single prefix for each IP address assigned to the adapter. + * Order of FirstPrefix does not match order of FirstUnicastAddress, + * so we need to find corresponding prefix. + */ + IP_ADAPTER_PREFIX* prefix; + prefix_len = 0; + + for (prefix = adapter->FirstPrefix; prefix; prefix = prefix->Next) { + /* We want the longest matching prefix. */ + if (prefix->Address.lpSockaddr->sa_family != sa->sa_family || + prefix->PrefixLength <= prefix_len) + continue; + + if (address_prefix_match(sa->sa_family, sa, + prefix->Address.lpSockaddr, prefix->PrefixLength)) { + prefix_len = prefix->PrefixLength; + } + } + + /* If there is no matching prefix information, return a single-host + * subnet mask (e.g. 255.255.255.255 for IPv4). + */ + if (!prefix_len) + prefix_len = (sa->sa_family == AF_INET6) ? 128 : 32; + } + + memset(uv_address, 0, sizeof *uv_address); + + uv_address->name = name_buf; + + if (adapter->PhysicalAddressLength == sizeof(uv_address->phys_addr)) { + memcpy(uv_address->phys_addr, + adapter->PhysicalAddress, + sizeof(uv_address->phys_addr)); + } + + uv_address->is_internal = + (adapter->IfType == IF_TYPE_SOFTWARE_LOOPBACK); + + if (sa->sa_family == AF_INET6) { + uv_address->address.address6 = *((struct sockaddr_in6 *) sa); + + uv_address->netmask.netmask6.sin6_family = AF_INET6; + memset(uv_address->netmask.netmask6.sin6_addr.s6_addr, 0xff, prefix_len >> 3); + /* This check ensures that we don't write past the size of the data. */ + if (prefix_len % 8) { + uv_address->netmask.netmask6.sin6_addr.s6_addr[prefix_len >> 3] = + 0xff << (8 - prefix_len % 8); + } + + } else { + uv_address->address.address4 = *((struct sockaddr_in *) sa); + + uv_address->netmask.netmask4.sin_family = AF_INET; + uv_address->netmask.netmask4.sin_addr.s_addr = (prefix_len > 0) ? + htonl(0xffffffff << (32 - prefix_len)) : 0; + } + + uv_address++; + } + + name_buf += name_size; + } + + uv__free(win_address_buf); + + *addresses_ptr = uv_address_buf; + *count_ptr = count; + + return 0; +} + + +void uv_free_interface_addresses(uv_interface_address_t* addresses, + int count) { + uv__free(addresses); +} + + +int uv_getrusage(uv_rusage_t *uv_rusage) { + FILETIME createTime, exitTime, kernelTime, userTime; + SYSTEMTIME kernelSystemTime, userSystemTime; + PROCESS_MEMORY_COUNTERS memCounters; + IO_COUNTERS ioCounters; + int ret; + + ret = GetProcessTimes(GetCurrentProcess(), &createTime, &exitTime, &kernelTime, &userTime); + if (ret == 0) { + return uv_translate_sys_error(GetLastError()); + } + + ret = FileTimeToSystemTime(&kernelTime, &kernelSystemTime); + if (ret == 0) { + return uv_translate_sys_error(GetLastError()); + } + + ret = FileTimeToSystemTime(&userTime, &userSystemTime); + if (ret == 0) { + return uv_translate_sys_error(GetLastError()); + } + + ret = GetProcessMemoryInfo(GetCurrentProcess(), + &memCounters, + sizeof(memCounters)); + if (ret == 0) { + return uv_translate_sys_error(GetLastError()); + } + + ret = GetProcessIoCounters(GetCurrentProcess(), &ioCounters); + if (ret == 0) { + return uv_translate_sys_error(GetLastError()); + } + + memset(uv_rusage, 0, sizeof(*uv_rusage)); + + uv_rusage->ru_utime.tv_sec = userSystemTime.wHour * 3600 + + userSystemTime.wMinute * 60 + + userSystemTime.wSecond; + uv_rusage->ru_utime.tv_usec = userSystemTime.wMilliseconds * 1000; + + uv_rusage->ru_stime.tv_sec = kernelSystemTime.wHour * 3600 + + kernelSystemTime.wMinute * 60 + + kernelSystemTime.wSecond; + uv_rusage->ru_stime.tv_usec = kernelSystemTime.wMilliseconds * 1000; + + uv_rusage->ru_majflt = (uint64_t) memCounters.PageFaultCount; + uv_rusage->ru_maxrss = (uint64_t) memCounters.PeakWorkingSetSize / 1024; + + uv_rusage->ru_oublock = (uint64_t) ioCounters.WriteOperationCount; + uv_rusage->ru_inblock = (uint64_t) ioCounters.ReadOperationCount; + + return 0; +} + + +int uv_os_homedir(char* buffer, size_t* size) { + uv_passwd_t pwd; + size_t len; + int r; + + /* Check if the USERPROFILE environment variable is set first. The task of + performing input validation on buffer and size is taken care of by + uv_os_getenv(). */ + r = uv_os_getenv("USERPROFILE", buffer, size); + + /* Don't return an error if USERPROFILE was not found. */ + if (r != UV_ENOENT) + return r; + + /* USERPROFILE is not set, so call uv__getpwuid_r() */ + r = uv__getpwuid_r(&pwd); + + if (r != 0) { + return r; + } + + len = strlen(pwd.homedir); + + if (len >= *size) { + *size = len + 1; + uv_os_free_passwd(&pwd); + return UV_ENOBUFS; + } + + memcpy(buffer, pwd.homedir, len + 1); + *size = len; + uv_os_free_passwd(&pwd); + + return 0; +} + + +int uv_os_tmpdir(char* buffer, size_t* size) { + wchar_t *path; + DWORD bufsize; + size_t len; + + if (buffer == NULL || size == NULL || *size == 0) + return UV_EINVAL; + + len = 0; + len = GetTempPathW(0, NULL); + if (len == 0) { + return uv_translate_sys_error(GetLastError()); + } + /* Include space for terminating null char. */ + len += 1; + path = (wchar_t *)uv__malloc(len * sizeof(wchar_t)); + if (path == NULL) { + return UV_ENOMEM; + } + len = GetTempPathW(len, path); + + if (len == 0) { + uv__free(path); + return uv_translate_sys_error(GetLastError()); + } + + /* The returned directory should not have a trailing slash, unless it points + * at a drive root, like c:\. Remove it if needed. */ + if (path[len - 1] == L'\\' && + !(len == 3 && path[1] == L':')) { + len--; + path[len] = L'\0'; + } + + /* Check how much space we need */ + bufsize = WideCharToMultiByte(CP_UTF8, 0, path, -1, NULL, 0, NULL, NULL); + + if (bufsize == 0) { + uv__free(path); + return uv_translate_sys_error(GetLastError()); + } else if (bufsize > *size) { + uv__free(path); + *size = bufsize; + return UV_ENOBUFS; + } + + /* Convert to UTF-8 */ + bufsize = WideCharToMultiByte(CP_UTF8, + 0, + path, + -1, + buffer, + *size, + NULL, + NULL); + uv__free(path); + + if (bufsize == 0) + return uv_translate_sys_error(GetLastError()); + + *size = bufsize - 1; + return 0; +} + + +void uv_os_free_passwd(uv_passwd_t* pwd) { + if (pwd == NULL) + return; + + uv__free(pwd->username); + uv__free(pwd->homedir); + pwd->username = NULL; + pwd->homedir = NULL; +} + + +/* + * Converts a UTF-16 string into a UTF-8 one. The resulting string is + * null-terminated. + * + * If utf16 is null terminated, utf16len can be set to -1, otherwise it must + * be specified. + */ +int uv__convert_utf16_to_utf8(const WCHAR* utf16, int utf16len, char** utf8) { + DWORD bufsize; + + if (utf16 == NULL) + return UV_EINVAL; + + /* Check how much space we need */ + bufsize = WideCharToMultiByte(CP_UTF8, + 0, + utf16, + utf16len, + NULL, + 0, + NULL, + NULL); + + if (bufsize == 0) + return uv_translate_sys_error(GetLastError()); + + /* Allocate the destination buffer adding an extra byte for the terminating + * NULL. If utf16len is not -1 WideCharToMultiByte will not add it, so + * we do it ourselves always, just in case. */ + *utf8 = (char *)uv__malloc(bufsize + 1); + + if (*utf8 == NULL) + return UV_ENOMEM; + + /* Convert to UTF-8 */ + bufsize = WideCharToMultiByte(CP_UTF8, + 0, + utf16, + utf16len, + *utf8, + bufsize, + NULL, + NULL); + + if (bufsize == 0) { + uv__free(*utf8); + *utf8 = NULL; + return uv_translate_sys_error(GetLastError()); + } + + (*utf8)[bufsize] = '\0'; + return 0; +} + + +/* + * Converts a UTF-8 string into a UTF-16 one. The resulting string is + * null-terminated. + * + * If utf8 is null terminated, utf8len can be set to -1, otherwise it must + * be specified. + */ +int uv__convert_utf8_to_utf16(const char* utf8, int utf8len, WCHAR** utf16) { + int bufsize; + + if (utf8 == NULL) + return UV_EINVAL; + + /* Check how much space we need */ + bufsize = MultiByteToWideChar(CP_UTF8, 0, utf8, utf8len, NULL, 0); + + if (bufsize == 0) + return uv_translate_sys_error(GetLastError()); + + /* Allocate the destination buffer adding an extra byte for the terminating + * NULL. If utf8len is not -1 MultiByteToWideChar will not add it, so + * we do it ourselves always, just in case. */ + *utf16 = (WCHAR *)uv__malloc(sizeof(WCHAR) * (bufsize + 1)); + + if (*utf16 == NULL) + return UV_ENOMEM; + + /* Convert to UTF-16 */ + bufsize = MultiByteToWideChar(CP_UTF8, 0, utf8, utf8len, *utf16, bufsize); + + if (bufsize == 0) { + uv__free(*utf16); + *utf16 = NULL; + return uv_translate_sys_error(GetLastError()); + } + + (*utf16)[bufsize] = L'\0'; + return 0; +} + + +int uv__getpwuid_r(uv_passwd_t* pwd) { + HANDLE token; + wchar_t username[UNLEN + 1]; + wchar_t *path; + DWORD bufsize; + int r; + + if (pwd == NULL) + return UV_EINVAL; + + /* Get the home directory using GetUserProfileDirectoryW() */ + if (OpenProcessToken(GetCurrentProcess(), TOKEN_READ, &token) == 0) + return uv_translate_sys_error(GetLastError()); + + bufsize = 0; + GetUserProfileDirectoryW(token, NULL, &bufsize); + if (GetLastError() != ERROR_INSUFFICIENT_BUFFER) { + r = GetLastError(); + CloseHandle(token); + return uv_translate_sys_error(r); + } + + path = (wchar_t *)uv__malloc(bufsize * sizeof(wchar_t)); + if (path == NULL) { + CloseHandle(token); + return UV_ENOMEM; + } + + if (!GetUserProfileDirectoryW(token, path, &bufsize)) { + r = GetLastError(); + CloseHandle(token); + uv__free(path); + return uv_translate_sys_error(r); + } + + CloseHandle(token); + + /* Get the username using GetUserNameW() */ + bufsize = ARRAY_SIZE(username); + if (!GetUserNameW(username, &bufsize)) { + r = GetLastError(); + uv__free(path); + + /* This should not be possible */ + if (r == ERROR_INSUFFICIENT_BUFFER) + return UV_ENOMEM; + + return uv_translate_sys_error(r); + } + + pwd->homedir = NULL; + r = uv__convert_utf16_to_utf8(path, -1, &pwd->homedir); + uv__free(path); + + if (r != 0) + return r; + + pwd->username = NULL; + r = uv__convert_utf16_to_utf8(username, -1, &pwd->username); + + if (r != 0) { + uv__free(pwd->homedir); + return r; + } + + pwd->shell = NULL; + pwd->uid = -1; + pwd->gid = -1; + + return 0; +} + + +int uv_os_get_passwd(uv_passwd_t* pwd) { + return uv__getpwuid_r(pwd); +} + + +int uv_os_environ(uv_env_item_t** envitems, int* count) { + wchar_t* env; + wchar_t* penv; + int i, cnt; + uv_env_item_t* envitem; + + *envitems = NULL; + *count = 0; + + env = GetEnvironmentStringsW(); + if (env == NULL) + return 0; + + for (penv = env, i = 0; *penv != L'\0'; penv += wcslen(penv) + 1, i++); + + *envitems = (uv_env_item_t *)uv__calloc(i, sizeof(**envitems)); + if (*envitems == NULL) { + FreeEnvironmentStringsW(env); + return UV_ENOMEM; + } + + penv = env; + cnt = 0; + + while (*penv != L'\0' && cnt < i) { + char* buf; + char* ptr; + + if (uv__convert_utf16_to_utf8(penv, -1, &buf) != 0) + goto fail; + + /* Using buf + 1 here because we know that `buf` has length at least 1, + * and some special environment variables on Windows start with a = sign. */ + ptr = strchr(buf + 1, '='); + if (ptr == NULL) { + uv__free(buf); + goto do_continue; + } + + *ptr = '\0'; + + envitem = &(*envitems)[cnt]; + envitem->name = buf; + envitem->value = ptr + 1; + + cnt++; + + do_continue: + penv += wcslen(penv) + 1; + } + + FreeEnvironmentStringsW(env); + + *count = cnt; + return 0; + +fail: + FreeEnvironmentStringsW(env); + + for (i = 0; i < cnt; i++) { + envitem = &(*envitems)[cnt]; + uv__free(envitem->name); + } + uv__free(*envitems); + + *envitems = NULL; + *count = 0; + return UV_ENOMEM; +} + + +int uv_os_getenv(const char* name, char* buffer, size_t* size) { + wchar_t fastvar[512]; + wchar_t* var; + DWORD varlen; + wchar_t* name_w; + DWORD bufsize; + size_t len; + int r; + + if (name == NULL || buffer == NULL || size == NULL || *size == 0) + return UV_EINVAL; + + r = uv__convert_utf8_to_utf16(name, -1, &name_w); + + if (r != 0) + return r; + + var = fastvar; + varlen = ARRAY_SIZE(fastvar); + + for (;;) { + SetLastError(ERROR_SUCCESS); + len = GetEnvironmentVariableW(name_w, var, varlen); + + if (len < varlen) + break; + + /* Try repeatedly because we might have been preempted by another thread + * modifying the environment variable just as we're trying to read it. + */ + if (var != fastvar) + uv__free(var); + + varlen = 1 + len; + var = (wchar_t *)uv__malloc(varlen * sizeof(*var)); + + if (var == NULL) { + r = UV_ENOMEM; + goto fail; + } + } + + uv__free(name_w); + name_w = NULL; + + if (len == 0) { + r = GetLastError(); + if (r != ERROR_SUCCESS) { + r = uv_translate_sys_error(r); + goto fail; + } + } + + /* Check how much space we need */ + bufsize = WideCharToMultiByte(CP_UTF8, 0, var, -1, NULL, 0, NULL, NULL); + + if (bufsize == 0) { + r = uv_translate_sys_error(GetLastError()); + goto fail; + } else if (bufsize > *size) { + *size = bufsize; + r = UV_ENOBUFS; + goto fail; + } + + /* Convert to UTF-8 */ + bufsize = WideCharToMultiByte(CP_UTF8, + 0, + var, + -1, + buffer, + *size, + NULL, + NULL); + + if (bufsize == 0) { + r = uv_translate_sys_error(GetLastError()); + goto fail; + } + + *size = bufsize - 1; + r = 0; + +fail: + + if (name_w != NULL) + uv__free(name_w); + + if (var != fastvar) + uv__free(var); + + return r; +} + + +int uv_os_setenv(const char* name, const char* value) { + wchar_t* name_w; + wchar_t* value_w; + int r; + + if (name == NULL || value == NULL) + return UV_EINVAL; + + r = uv__convert_utf8_to_utf16(name, -1, &name_w); + + if (r != 0) + return r; + + r = uv__convert_utf8_to_utf16(value, -1, &value_w); + + if (r != 0) { + uv__free(name_w); + return r; + } + + r = SetEnvironmentVariableW(name_w, value_w); + uv__free(name_w); + uv__free(value_w); + + if (r == 0) + return uv_translate_sys_error(GetLastError()); + + return 0; +} + + +int uv_os_unsetenv(const char* name) { + wchar_t* name_w; + int r; + + if (name == NULL) + return UV_EINVAL; + + r = uv__convert_utf8_to_utf16(name, -1, &name_w); + + if (r != 0) + return r; + + r = SetEnvironmentVariableW(name_w, NULL); + uv__free(name_w); + + if (r == 0) + return uv_translate_sys_error(GetLastError()); + + return 0; +} + + +int uv_os_gethostname(char* buffer, size_t* size) { + char buf[UV_MAXHOSTNAMESIZE]; + size_t len; + + if (buffer == NULL || size == NULL || *size == 0) + return UV_EINVAL; + + uv__once_init(); /* Initialize winsock */ + + if (gethostname(buf, sizeof(buf)) != 0) + return uv_translate_sys_error(WSAGetLastError()); + + buf[sizeof(buf) - 1] = '\0'; /* Null terminate, just to be safe. */ + len = strlen(buf); + + if (len >= *size) { + *size = len + 1; + return UV_ENOBUFS; + } + + memcpy(buffer, buf, len + 1); + *size = len; + return 0; +} + + +static int uv__get_handle(uv_pid_t pid, int access, HANDLE* handle) { + int r; + + if (pid == 0) + *handle = GetCurrentProcess(); + else + *handle = OpenProcess(access, FALSE, pid); + + if (*handle == NULL) { + r = GetLastError(); + + if (r == ERROR_INVALID_PARAMETER) + return UV_ESRCH; + else + return uv_translate_sys_error(r); + } + + return 0; +} + + +int uv_os_getpriority(uv_pid_t pid, int* priority) { + HANDLE handle; + int r; + + if (priority == NULL) + return UV_EINVAL; + + r = uv__get_handle(pid, PROCESS_QUERY_LIMITED_INFORMATION, &handle); + + if (r != 0) + return r; + + r = GetPriorityClass(handle); + + if (r == 0) { + r = uv_translate_sys_error(GetLastError()); + } else { + /* Map Windows priority classes to Unix nice values. */ + if (r == REALTIME_PRIORITY_CLASS) + *priority = UV_PRIORITY_HIGHEST; + else if (r == HIGH_PRIORITY_CLASS) + *priority = UV_PRIORITY_HIGH; + else if (r == ABOVE_NORMAL_PRIORITY_CLASS) + *priority = UV_PRIORITY_ABOVE_NORMAL; + else if (r == NORMAL_PRIORITY_CLASS) + *priority = UV_PRIORITY_NORMAL; + else if (r == BELOW_NORMAL_PRIORITY_CLASS) + *priority = UV_PRIORITY_BELOW_NORMAL; + else /* IDLE_PRIORITY_CLASS */ + *priority = UV_PRIORITY_LOW; + + r = 0; + } + + CloseHandle(handle); + return r; +} + + +int uv_os_setpriority(uv_pid_t pid, int priority) { + HANDLE handle; + int priority_class; + int r; + + /* Map Unix nice values to Windows priority classes. */ + if (priority < UV_PRIORITY_HIGHEST || priority > UV_PRIORITY_LOW) + return UV_EINVAL; + else if (priority < UV_PRIORITY_HIGH) + priority_class = REALTIME_PRIORITY_CLASS; + else if (priority < UV_PRIORITY_ABOVE_NORMAL) + priority_class = HIGH_PRIORITY_CLASS; + else if (priority < UV_PRIORITY_NORMAL) + priority_class = ABOVE_NORMAL_PRIORITY_CLASS; + else if (priority < UV_PRIORITY_BELOW_NORMAL) + priority_class = NORMAL_PRIORITY_CLASS; + else if (priority < UV_PRIORITY_LOW) + priority_class = BELOW_NORMAL_PRIORITY_CLASS; + else + priority_class = IDLE_PRIORITY_CLASS; + + r = uv__get_handle(pid, PROCESS_SET_INFORMATION, &handle); + + if (r != 0) + return r; + + if (SetPriorityClass(handle, priority_class) == 0) + r = uv_translate_sys_error(GetLastError()); + + CloseHandle(handle); + return r; +} + + +int uv_os_uname(uv_utsname_t* buffer) { + /* Implementation loosely based on + https://github.com/gagern/gnulib/blob/master/lib/uname.c */ + OSVERSIONINFOW os_info; + SYSTEM_INFO system_info; + HKEY registry_key; + WCHAR product_name_w[256]; + DWORD product_name_w_size; + int version_size; + int processor_level; + int r; + + if (buffer == NULL) + return UV_EINVAL; + + uv__once_init(); + os_info.dwOSVersionInfoSize = sizeof(os_info); + os_info.szCSDVersion[0] = L'\0'; + + /* Try calling RtlGetVersion(), and fall back to the deprecated GetVersionEx() + if RtlGetVersion() is not available. */ + if (pRtlGetVersion) { + pRtlGetVersion(&os_info); + } else { + /* Silence GetVersionEx() deprecation warning. */ + #pragma warning(suppress : 4996) + if (GetVersionExW(&os_info) == 0) { + r = uv_translate_sys_error(GetLastError()); + goto error; + } + } + + /* Populate the version field. */ + version_size = 0; + r = RegOpenKeyExW(HKEY_LOCAL_MACHINE, + L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion", + 0, + KEY_QUERY_VALUE, + ®istry_key); + + if (r == ERROR_SUCCESS) { + product_name_w_size = sizeof(product_name_w); + r = RegGetValueW(registry_key, + NULL, + L"ProductName", + RRF_RT_REG_SZ, + NULL, + (PVOID) product_name_w, + &product_name_w_size); + RegCloseKey(registry_key); + + if (r == ERROR_SUCCESS) { + version_size = WideCharToMultiByte(CP_UTF8, + 0, + product_name_w, + -1, + buffer->version, + sizeof(buffer->version), + NULL, + NULL); + if (version_size == 0) { + r = uv_translate_sys_error(GetLastError()); + goto error; + } + } + } + + /* Append service pack information to the version if present. */ + if (os_info.szCSDVersion[0] != L'\0') { + if (version_size > 0) + buffer->version[version_size - 1] = ' '; + + if (WideCharToMultiByte(CP_UTF8, + 0, + os_info.szCSDVersion, + -1, + buffer->version + version_size, + sizeof(buffer->version) - version_size, + NULL, + NULL) == 0) { + r = uv_translate_sys_error(GetLastError()); + goto error; + } + } + + /* Populate the sysname field. */ +#ifdef __MINGW32__ + r = snprintf(buffer->sysname, + sizeof(buffer->sysname), + "MINGW32_NT-%u.%u", + (unsigned int) os_info.dwMajorVersion, + (unsigned int) os_info.dwMinorVersion); + assert(r < sizeof(buffer->sysname)); +#else + uv__strscpy(buffer->sysname, "Windows_NT", sizeof(buffer->sysname)); +#endif + + /* Populate the release field. */ + r = snprintf(buffer->release, + sizeof(buffer->release), + "%d.%d.%d", + (unsigned int) os_info.dwMajorVersion, + (unsigned int) os_info.dwMinorVersion, + (unsigned int) os_info.dwBuildNumber); + assert(r < sizeof(buffer->release)); + + /* Populate the machine field. */ + GetSystemInfo(&system_info); + + switch (system_info.wProcessorArchitecture) { + case PROCESSOR_ARCHITECTURE_AMD64: + uv__strscpy(buffer->machine, "x86_64", sizeof(buffer->machine)); + break; + case PROCESSOR_ARCHITECTURE_IA64: + uv__strscpy(buffer->machine, "ia64", sizeof(buffer->machine)); + break; + case PROCESSOR_ARCHITECTURE_INTEL: + uv__strscpy(buffer->machine, "i386", sizeof(buffer->machine)); + + if (system_info.wProcessorLevel > 3) { + processor_level = system_info.wProcessorLevel < 6 ? + system_info.wProcessorLevel : 6; + buffer->machine[1] = '0' + processor_level; + } + + break; + case PROCESSOR_ARCHITECTURE_IA32_ON_WIN64: + uv__strscpy(buffer->machine, "i686", sizeof(buffer->machine)); + break; + case PROCESSOR_ARCHITECTURE_MIPS: + uv__strscpy(buffer->machine, "mips", sizeof(buffer->machine)); + break; + case PROCESSOR_ARCHITECTURE_ALPHA: + case PROCESSOR_ARCHITECTURE_ALPHA64: + uv__strscpy(buffer->machine, "alpha", sizeof(buffer->machine)); + break; + case PROCESSOR_ARCHITECTURE_PPC: + uv__strscpy(buffer->machine, "powerpc", sizeof(buffer->machine)); + break; + case PROCESSOR_ARCHITECTURE_SHX: + uv__strscpy(buffer->machine, "sh", sizeof(buffer->machine)); + break; + case PROCESSOR_ARCHITECTURE_ARM: + uv__strscpy(buffer->machine, "arm", sizeof(buffer->machine)); + break; + default: + uv__strscpy(buffer->machine, "unknown", sizeof(buffer->machine)); + break; + } + + return 0; + +error: + buffer->sysname[0] = '\0'; + buffer->release[0] = '\0'; + buffer->version[0] = '\0'; + buffer->machine[0] = '\0'; + return r; +} + +int uv_gettimeofday(uv_timeval64_t* tv) { + /* Based on https://doxygen.postgresql.org/gettimeofday_8c_source.html */ + const uint64_t epoch = (uint64_t) 116444736000000000ULL; + FILETIME file_time; + ULARGE_INTEGER ularge; + + if (tv == NULL) + return UV_EINVAL; + + GetSystemTimeAsFileTime(&file_time); + ularge.LowPart = file_time.dwLowDateTime; + ularge.HighPart = file_time.dwHighDateTime; + tv->tv_sec = (int64_t) ((ularge.QuadPart - epoch) / 10000000L); + tv->tv_usec = (int32_t) (((ularge.QuadPart - epoch) % 10000000L) / 10); + return 0; +} + +int uv__random_rtlgenrandom(void* buf, size_t buflen) { + if (buflen == 0) + return 0; + + if (RtlGenRandom(buf, buflen) == FALSE) + return UV_EIO; + + return 0; +} + +void uv_sleep(unsigned int msec) { + Sleep(msec); +} diff --git a/external/libuv/src/win/winapi.c b/external/libuv/src/win/winapi.c new file mode 100644 index 000000000..bb86ec8ce --- /dev/null +++ b/external/libuv/src/win/winapi.c @@ -0,0 +1,137 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#include + +#include "uv.h" +#include "internal.h" + + +/* Ntdll function pointers */ +sRtlGetVersion pRtlGetVersion; +sRtlNtStatusToDosError pRtlNtStatusToDosError; +sNtDeviceIoControlFile pNtDeviceIoControlFile; +sNtQueryInformationFile pNtQueryInformationFile; +sNtSetInformationFile pNtSetInformationFile; +sNtQueryVolumeInformationFile pNtQueryVolumeInformationFile; +sNtQueryDirectoryFile pNtQueryDirectoryFile; +sNtQuerySystemInformation pNtQuerySystemInformation; +sNtQueryInformationProcess pNtQueryInformationProcess; + +/* Kernel32 function pointers */ +sGetQueuedCompletionStatusEx pGetQueuedCompletionStatusEx; + +/* Powrprof.dll function pointer */ +sPowerRegisterSuspendResumeNotification pPowerRegisterSuspendResumeNotification; + +/* User32.dll function pointer */ +sSetWinEventHook pSetWinEventHook; + + +void uv_winapi_init(void) { + HMODULE ntdll_module; + HMODULE powrprof_module; + HMODULE user32_module; + HMODULE kernel32_module; + + ntdll_module = GetModuleHandleA("ntdll.dll"); + if (ntdll_module == NULL) { + uv_fatal_error(GetLastError(), "GetModuleHandleA"); + } + + pRtlGetVersion = (sRtlGetVersion) GetProcAddress(ntdll_module, + "RtlGetVersion"); + + pRtlNtStatusToDosError = (sRtlNtStatusToDosError) GetProcAddress( + ntdll_module, + "RtlNtStatusToDosError"); + if (pRtlNtStatusToDosError == NULL) { + uv_fatal_error(GetLastError(), "GetProcAddress"); + } + + pNtDeviceIoControlFile = (sNtDeviceIoControlFile) GetProcAddress( + ntdll_module, + "NtDeviceIoControlFile"); + if (pNtDeviceIoControlFile == NULL) { + uv_fatal_error(GetLastError(), "GetProcAddress"); + } + + pNtQueryInformationFile = (sNtQueryInformationFile) GetProcAddress( + ntdll_module, + "NtQueryInformationFile"); + if (pNtQueryInformationFile == NULL) { + uv_fatal_error(GetLastError(), "GetProcAddress"); + } + + pNtSetInformationFile = (sNtSetInformationFile) GetProcAddress( + ntdll_module, + "NtSetInformationFile"); + if (pNtSetInformationFile == NULL) { + uv_fatal_error(GetLastError(), "GetProcAddress"); + } + + pNtQueryVolumeInformationFile = (sNtQueryVolumeInformationFile) + GetProcAddress(ntdll_module, "NtQueryVolumeInformationFile"); + if (pNtQueryVolumeInformationFile == NULL) { + uv_fatal_error(GetLastError(), "GetProcAddress"); + } + + pNtQueryDirectoryFile = (sNtQueryDirectoryFile) + GetProcAddress(ntdll_module, "NtQueryDirectoryFile"); + if (pNtQueryVolumeInformationFile == NULL) { + uv_fatal_error(GetLastError(), "GetProcAddress"); + } + + pNtQuerySystemInformation = (sNtQuerySystemInformation) GetProcAddress( + ntdll_module, + "NtQuerySystemInformation"); + if (pNtQuerySystemInformation == NULL) { + uv_fatal_error(GetLastError(), "GetProcAddress"); + } + + pNtQueryInformationProcess = (sNtQueryInformationProcess) GetProcAddress( + ntdll_module, + "NtQueryInformationProcess"); + if (pNtQueryInformationProcess == NULL) { + uv_fatal_error(GetLastError(), "GetProcAddress"); + } + + kernel32_module = GetModuleHandleA("kernel32.dll"); + if (kernel32_module == NULL) { + uv_fatal_error(GetLastError(), "GetModuleHandleA"); + } + + pGetQueuedCompletionStatusEx = (sGetQueuedCompletionStatusEx) GetProcAddress( + kernel32_module, + "GetQueuedCompletionStatusEx"); + + powrprof_module = LoadLibraryA("powrprof.dll"); + if (powrprof_module != NULL) { + pPowerRegisterSuspendResumeNotification = (sPowerRegisterSuspendResumeNotification) + GetProcAddress(powrprof_module, "PowerRegisterSuspendResumeNotification"); + } + + user32_module = LoadLibraryA("user32.dll"); + if (user32_module != NULL) { + pSetWinEventHook = (sSetWinEventHook) + GetProcAddress(user32_module, "SetWinEventHook"); + } +} diff --git a/external/libuv/src/win/winapi.h b/external/libuv/src/win/winapi.h new file mode 100644 index 000000000..cbe1437a4 --- /dev/null +++ b/external/libuv/src/win/winapi.h @@ -0,0 +1,4750 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#ifndef UV_WIN_WINAPI_H_ +#define UV_WIN_WINAPI_H_ + +#include + + +/* + * Ntdll headers + */ +#ifndef STATUS_SEVERITY_SUCCESS +# define STATUS_SEVERITY_SUCCESS 0x0 +#endif + +#ifndef STATUS_SEVERITY_INFORMATIONAL +# define STATUS_SEVERITY_INFORMATIONAL 0x1 +#endif + +#ifndef STATUS_SEVERITY_WARNING +# define STATUS_SEVERITY_WARNING 0x2 +#endif + +#ifndef STATUS_SEVERITY_ERROR +# define STATUS_SEVERITY_ERROR 0x3 +#endif + +#ifndef FACILITY_NTWIN32 +# define FACILITY_NTWIN32 0x7 +#endif + +#ifndef NT_SUCCESS +# define NT_SUCCESS(status) (((NTSTATUS) (status)) >= 0) +#endif + +#ifndef NT_INFORMATION +# define NT_INFORMATION(status) ((((ULONG) (status)) >> 30) == 1) +#endif + +#ifndef NT_WARNING +# define NT_WARNING(status) ((((ULONG) (status)) >> 30) == 2) +#endif + +#ifndef NT_ERROR +# define NT_ERROR(status) ((((ULONG) (status)) >> 30) == 3) +#endif + +#ifndef STATUS_SUCCESS +# define STATUS_SUCCESS ((NTSTATUS) 0x00000000L) +#endif + +#ifndef STATUS_WAIT_0 +# define STATUS_WAIT_0 ((NTSTATUS) 0x00000000L) +#endif + +#ifndef STATUS_WAIT_1 +# define STATUS_WAIT_1 ((NTSTATUS) 0x00000001L) +#endif + +#ifndef STATUS_WAIT_2 +# define STATUS_WAIT_2 ((NTSTATUS) 0x00000002L) +#endif + +#ifndef STATUS_WAIT_3 +# define STATUS_WAIT_3 ((NTSTATUS) 0x00000003L) +#endif + +#ifndef STATUS_WAIT_63 +# define STATUS_WAIT_63 ((NTSTATUS) 0x0000003FL) +#endif + +#ifndef STATUS_ABANDONED +# define STATUS_ABANDONED ((NTSTATUS) 0x00000080L) +#endif + +#ifndef STATUS_ABANDONED_WAIT_0 +# define STATUS_ABANDONED_WAIT_0 ((NTSTATUS) 0x00000080L) +#endif + +#ifndef STATUS_ABANDONED_WAIT_63 +# define STATUS_ABANDONED_WAIT_63 ((NTSTATUS) 0x000000BFL) +#endif + +#ifndef STATUS_USER_APC +# define STATUS_USER_APC ((NTSTATUS) 0x000000C0L) +#endif + +#ifndef STATUS_KERNEL_APC +# define STATUS_KERNEL_APC ((NTSTATUS) 0x00000100L) +#endif + +#ifndef STATUS_ALERTED +# define STATUS_ALERTED ((NTSTATUS) 0x00000101L) +#endif + +#ifndef STATUS_TIMEOUT +# define STATUS_TIMEOUT ((NTSTATUS) 0x00000102L) +#endif + +#ifndef STATUS_PENDING +# define STATUS_PENDING ((NTSTATUS) 0x00000103L) +#endif + +#ifndef STATUS_REPARSE +# define STATUS_REPARSE ((NTSTATUS) 0x00000104L) +#endif + +#ifndef STATUS_MORE_ENTRIES +# define STATUS_MORE_ENTRIES ((NTSTATUS) 0x00000105L) +#endif + +#ifndef STATUS_NOT_ALL_ASSIGNED +# define STATUS_NOT_ALL_ASSIGNED ((NTSTATUS) 0x00000106L) +#endif + +#ifndef STATUS_SOME_NOT_MAPPED +# define STATUS_SOME_NOT_MAPPED ((NTSTATUS) 0x00000107L) +#endif + +#ifndef STATUS_OPLOCK_BREAK_IN_PROGRESS +# define STATUS_OPLOCK_BREAK_IN_PROGRESS ((NTSTATUS) 0x00000108L) +#endif + +#ifndef STATUS_VOLUME_MOUNTED +# define STATUS_VOLUME_MOUNTED ((NTSTATUS) 0x00000109L) +#endif + +#ifndef STATUS_RXACT_COMMITTED +# define STATUS_RXACT_COMMITTED ((NTSTATUS) 0x0000010AL) +#endif + +#ifndef STATUS_NOTIFY_CLEANUP +# define STATUS_NOTIFY_CLEANUP ((NTSTATUS) 0x0000010BL) +#endif + +#ifndef STATUS_NOTIFY_ENUM_DIR +# define STATUS_NOTIFY_ENUM_DIR ((NTSTATUS) 0x0000010CL) +#endif + +#ifndef STATUS_NO_QUOTAS_FOR_ACCOUNT +# define STATUS_NO_QUOTAS_FOR_ACCOUNT ((NTSTATUS) 0x0000010DL) +#endif + +#ifndef STATUS_PRIMARY_TRANSPORT_CONNECT_FAILED +# define STATUS_PRIMARY_TRANSPORT_CONNECT_FAILED ((NTSTATUS) 0x0000010EL) +#endif + +#ifndef STATUS_PAGE_FAULT_TRANSITION +# define STATUS_PAGE_FAULT_TRANSITION ((NTSTATUS) 0x00000110L) +#endif + +#ifndef STATUS_PAGE_FAULT_DEMAND_ZERO +# define STATUS_PAGE_FAULT_DEMAND_ZERO ((NTSTATUS) 0x00000111L) +#endif + +#ifndef STATUS_PAGE_FAULT_COPY_ON_WRITE +# define STATUS_PAGE_FAULT_COPY_ON_WRITE ((NTSTATUS) 0x00000112L) +#endif + +#ifndef STATUS_PAGE_FAULT_GUARD_PAGE +# define STATUS_PAGE_FAULT_GUARD_PAGE ((NTSTATUS) 0x00000113L) +#endif + +#ifndef STATUS_PAGE_FAULT_PAGING_FILE +# define STATUS_PAGE_FAULT_PAGING_FILE ((NTSTATUS) 0x00000114L) +#endif + +#ifndef STATUS_CACHE_PAGE_LOCKED +# define STATUS_CACHE_PAGE_LOCKED ((NTSTATUS) 0x00000115L) +#endif + +#ifndef STATUS_CRASH_DUMP +# define STATUS_CRASH_DUMP ((NTSTATUS) 0x00000116L) +#endif + +#ifndef STATUS_BUFFER_ALL_ZEROS +# define STATUS_BUFFER_ALL_ZEROS ((NTSTATUS) 0x00000117L) +#endif + +#ifndef STATUS_REPARSE_OBJECT +# define STATUS_REPARSE_OBJECT ((NTSTATUS) 0x00000118L) +#endif + +#ifndef STATUS_RESOURCE_REQUIREMENTS_CHANGED +# define STATUS_RESOURCE_REQUIREMENTS_CHANGED ((NTSTATUS) 0x00000119L) +#endif + +#ifndef STATUS_TRANSLATION_COMPLETE +# define STATUS_TRANSLATION_COMPLETE ((NTSTATUS) 0x00000120L) +#endif + +#ifndef STATUS_DS_MEMBERSHIP_EVALUATED_LOCALLY +# define STATUS_DS_MEMBERSHIP_EVALUATED_LOCALLY ((NTSTATUS) 0x00000121L) +#endif + +#ifndef STATUS_NOTHING_TO_TERMINATE +# define STATUS_NOTHING_TO_TERMINATE ((NTSTATUS) 0x00000122L) +#endif + +#ifndef STATUS_PROCESS_NOT_IN_JOB +# define STATUS_PROCESS_NOT_IN_JOB ((NTSTATUS) 0x00000123L) +#endif + +#ifndef STATUS_PROCESS_IN_JOB +# define STATUS_PROCESS_IN_JOB ((NTSTATUS) 0x00000124L) +#endif + +#ifndef STATUS_VOLSNAP_HIBERNATE_READY +# define STATUS_VOLSNAP_HIBERNATE_READY ((NTSTATUS) 0x00000125L) +#endif + +#ifndef STATUS_FSFILTER_OP_COMPLETED_SUCCESSFULLY +# define STATUS_FSFILTER_OP_COMPLETED_SUCCESSFULLY ((NTSTATUS) 0x00000126L) +#endif + +#ifndef STATUS_INTERRUPT_VECTOR_ALREADY_CONNECTED +# define STATUS_INTERRUPT_VECTOR_ALREADY_CONNECTED ((NTSTATUS) 0x00000127L) +#endif + +#ifndef STATUS_INTERRUPT_STILL_CONNECTED +# define STATUS_INTERRUPT_STILL_CONNECTED ((NTSTATUS) 0x00000128L) +#endif + +#ifndef STATUS_PROCESS_CLONED +# define STATUS_PROCESS_CLONED ((NTSTATUS) 0x00000129L) +#endif + +#ifndef STATUS_FILE_LOCKED_WITH_ONLY_READERS +# define STATUS_FILE_LOCKED_WITH_ONLY_READERS ((NTSTATUS) 0x0000012AL) +#endif + +#ifndef STATUS_FILE_LOCKED_WITH_WRITERS +# define STATUS_FILE_LOCKED_WITH_WRITERS ((NTSTATUS) 0x0000012BL) +#endif + +#ifndef STATUS_RESOURCEMANAGER_READ_ONLY +# define STATUS_RESOURCEMANAGER_READ_ONLY ((NTSTATUS) 0x00000202L) +#endif + +#ifndef STATUS_RING_PREVIOUSLY_EMPTY +# define STATUS_RING_PREVIOUSLY_EMPTY ((NTSTATUS) 0x00000210L) +#endif + +#ifndef STATUS_RING_PREVIOUSLY_FULL +# define STATUS_RING_PREVIOUSLY_FULL ((NTSTATUS) 0x00000211L) +#endif + +#ifndef STATUS_RING_PREVIOUSLY_ABOVE_QUOTA +# define STATUS_RING_PREVIOUSLY_ABOVE_QUOTA ((NTSTATUS) 0x00000212L) +#endif + +#ifndef STATUS_RING_NEWLY_EMPTY +# define STATUS_RING_NEWLY_EMPTY ((NTSTATUS) 0x00000213L) +#endif + +#ifndef STATUS_RING_SIGNAL_OPPOSITE_ENDPOINT +# define STATUS_RING_SIGNAL_OPPOSITE_ENDPOINT ((NTSTATUS) 0x00000214L) +#endif + +#ifndef STATUS_OPLOCK_SWITCHED_TO_NEW_HANDLE +# define STATUS_OPLOCK_SWITCHED_TO_NEW_HANDLE ((NTSTATUS) 0x00000215L) +#endif + +#ifndef STATUS_OPLOCK_HANDLE_CLOSED +# define STATUS_OPLOCK_HANDLE_CLOSED ((NTSTATUS) 0x00000216L) +#endif + +#ifndef STATUS_WAIT_FOR_OPLOCK +# define STATUS_WAIT_FOR_OPLOCK ((NTSTATUS) 0x00000367L) +#endif + +#ifndef STATUS_OBJECT_NAME_EXISTS +# define STATUS_OBJECT_NAME_EXISTS ((NTSTATUS) 0x40000000L) +#endif + +#ifndef STATUS_THREAD_WAS_SUSPENDED +# define STATUS_THREAD_WAS_SUSPENDED ((NTSTATUS) 0x40000001L) +#endif + +#ifndef STATUS_WORKING_SET_LIMIT_RANGE +# define STATUS_WORKING_SET_LIMIT_RANGE ((NTSTATUS) 0x40000002L) +#endif + +#ifndef STATUS_IMAGE_NOT_AT_BASE +# define STATUS_IMAGE_NOT_AT_BASE ((NTSTATUS) 0x40000003L) +#endif + +#ifndef STATUS_RXACT_STATE_CREATED +# define STATUS_RXACT_STATE_CREATED ((NTSTATUS) 0x40000004L) +#endif + +#ifndef STATUS_SEGMENT_NOTIFICATION +# define STATUS_SEGMENT_NOTIFICATION ((NTSTATUS) 0x40000005L) +#endif + +#ifndef STATUS_LOCAL_USER_SESSION_KEY +# define STATUS_LOCAL_USER_SESSION_KEY ((NTSTATUS) 0x40000006L) +#endif + +#ifndef STATUS_BAD_CURRENT_DIRECTORY +# define STATUS_BAD_CURRENT_DIRECTORY ((NTSTATUS) 0x40000007L) +#endif + +#ifndef STATUS_SERIAL_MORE_WRITES +# define STATUS_SERIAL_MORE_WRITES ((NTSTATUS) 0x40000008L) +#endif + +#ifndef STATUS_REGISTRY_RECOVERED +# define STATUS_REGISTRY_RECOVERED ((NTSTATUS) 0x40000009L) +#endif + +#ifndef STATUS_FT_READ_RECOVERY_FROM_BACKUP +# define STATUS_FT_READ_RECOVERY_FROM_BACKUP ((NTSTATUS) 0x4000000AL) +#endif + +#ifndef STATUS_FT_WRITE_RECOVERY +# define STATUS_FT_WRITE_RECOVERY ((NTSTATUS) 0x4000000BL) +#endif + +#ifndef STATUS_SERIAL_COUNTER_TIMEOUT +# define STATUS_SERIAL_COUNTER_TIMEOUT ((NTSTATUS) 0x4000000CL) +#endif + +#ifndef STATUS_NULL_LM_PASSWORD +# define STATUS_NULL_LM_PASSWORD ((NTSTATUS) 0x4000000DL) +#endif + +#ifndef STATUS_IMAGE_MACHINE_TYPE_MISMATCH +# define STATUS_IMAGE_MACHINE_TYPE_MISMATCH ((NTSTATUS) 0x4000000EL) +#endif + +#ifndef STATUS_RECEIVE_PARTIAL +# define STATUS_RECEIVE_PARTIAL ((NTSTATUS) 0x4000000FL) +#endif + +#ifndef STATUS_RECEIVE_EXPEDITED +# define STATUS_RECEIVE_EXPEDITED ((NTSTATUS) 0x40000010L) +#endif + +#ifndef STATUS_RECEIVE_PARTIAL_EXPEDITED +# define STATUS_RECEIVE_PARTIAL_EXPEDITED ((NTSTATUS) 0x40000011L) +#endif + +#ifndef STATUS_EVENT_DONE +# define STATUS_EVENT_DONE ((NTSTATUS) 0x40000012L) +#endif + +#ifndef STATUS_EVENT_PENDING +# define STATUS_EVENT_PENDING ((NTSTATUS) 0x40000013L) +#endif + +#ifndef STATUS_CHECKING_FILE_SYSTEM +# define STATUS_CHECKING_FILE_SYSTEM ((NTSTATUS) 0x40000014L) +#endif + +#ifndef STATUS_FATAL_APP_EXIT +# define STATUS_FATAL_APP_EXIT ((NTSTATUS) 0x40000015L) +#endif + +#ifndef STATUS_PREDEFINED_HANDLE +# define STATUS_PREDEFINED_HANDLE ((NTSTATUS) 0x40000016L) +#endif + +#ifndef STATUS_WAS_UNLOCKED +# define STATUS_WAS_UNLOCKED ((NTSTATUS) 0x40000017L) +#endif + +#ifndef STATUS_SERVICE_NOTIFICATION +# define STATUS_SERVICE_NOTIFICATION ((NTSTATUS) 0x40000018L) +#endif + +#ifndef STATUS_WAS_LOCKED +# define STATUS_WAS_LOCKED ((NTSTATUS) 0x40000019L) +#endif + +#ifndef STATUS_LOG_HARD_ERROR +# define STATUS_LOG_HARD_ERROR ((NTSTATUS) 0x4000001AL) +#endif + +#ifndef STATUS_ALREADY_WIN32 +# define STATUS_ALREADY_WIN32 ((NTSTATUS) 0x4000001BL) +#endif + +#ifndef STATUS_WX86_UNSIMULATE +# define STATUS_WX86_UNSIMULATE ((NTSTATUS) 0x4000001CL) +#endif + +#ifndef STATUS_WX86_CONTINUE +# define STATUS_WX86_CONTINUE ((NTSTATUS) 0x4000001DL) +#endif + +#ifndef STATUS_WX86_SINGLE_STEP +# define STATUS_WX86_SINGLE_STEP ((NTSTATUS) 0x4000001EL) +#endif + +#ifndef STATUS_WX86_BREAKPOINT +# define STATUS_WX86_BREAKPOINT ((NTSTATUS) 0x4000001FL) +#endif + +#ifndef STATUS_WX86_EXCEPTION_CONTINUE +# define STATUS_WX86_EXCEPTION_CONTINUE ((NTSTATUS) 0x40000020L) +#endif + +#ifndef STATUS_WX86_EXCEPTION_LASTCHANCE +# define STATUS_WX86_EXCEPTION_LASTCHANCE ((NTSTATUS) 0x40000021L) +#endif + +#ifndef STATUS_WX86_EXCEPTION_CHAIN +# define STATUS_WX86_EXCEPTION_CHAIN ((NTSTATUS) 0x40000022L) +#endif + +#ifndef STATUS_IMAGE_MACHINE_TYPE_MISMATCH_EXE +# define STATUS_IMAGE_MACHINE_TYPE_MISMATCH_EXE ((NTSTATUS) 0x40000023L) +#endif + +#ifndef STATUS_NO_YIELD_PERFORMED +# define STATUS_NO_YIELD_PERFORMED ((NTSTATUS) 0x40000024L) +#endif + +#ifndef STATUS_TIMER_RESUME_IGNORED +# define STATUS_TIMER_RESUME_IGNORED ((NTSTATUS) 0x40000025L) +#endif + +#ifndef STATUS_ARBITRATION_UNHANDLED +# define STATUS_ARBITRATION_UNHANDLED ((NTSTATUS) 0x40000026L) +#endif + +#ifndef STATUS_CARDBUS_NOT_SUPPORTED +# define STATUS_CARDBUS_NOT_SUPPORTED ((NTSTATUS) 0x40000027L) +#endif + +#ifndef STATUS_WX86_CREATEWX86TIB +# define STATUS_WX86_CREATEWX86TIB ((NTSTATUS) 0x40000028L) +#endif + +#ifndef STATUS_MP_PROCESSOR_MISMATCH +# define STATUS_MP_PROCESSOR_MISMATCH ((NTSTATUS) 0x40000029L) +#endif + +#ifndef STATUS_HIBERNATED +# define STATUS_HIBERNATED ((NTSTATUS) 0x4000002AL) +#endif + +#ifndef STATUS_RESUME_HIBERNATION +# define STATUS_RESUME_HIBERNATION ((NTSTATUS) 0x4000002BL) +#endif + +#ifndef STATUS_FIRMWARE_UPDATED +# define STATUS_FIRMWARE_UPDATED ((NTSTATUS) 0x4000002CL) +#endif + +#ifndef STATUS_DRIVERS_LEAKING_LOCKED_PAGES +# define STATUS_DRIVERS_LEAKING_LOCKED_PAGES ((NTSTATUS) 0x4000002DL) +#endif + +#ifndef STATUS_MESSAGE_RETRIEVED +# define STATUS_MESSAGE_RETRIEVED ((NTSTATUS) 0x4000002EL) +#endif + +#ifndef STATUS_SYSTEM_POWERSTATE_TRANSITION +# define STATUS_SYSTEM_POWERSTATE_TRANSITION ((NTSTATUS) 0x4000002FL) +#endif + +#ifndef STATUS_ALPC_CHECK_COMPLETION_LIST +# define STATUS_ALPC_CHECK_COMPLETION_LIST ((NTSTATUS) 0x40000030L) +#endif + +#ifndef STATUS_SYSTEM_POWERSTATE_COMPLEX_TRANSITION +# define STATUS_SYSTEM_POWERSTATE_COMPLEX_TRANSITION ((NTSTATUS) 0x40000031L) +#endif + +#ifndef STATUS_ACCESS_AUDIT_BY_POLICY +# define STATUS_ACCESS_AUDIT_BY_POLICY ((NTSTATUS) 0x40000032L) +#endif + +#ifndef STATUS_ABANDON_HIBERFILE +# define STATUS_ABANDON_HIBERFILE ((NTSTATUS) 0x40000033L) +#endif + +#ifndef STATUS_BIZRULES_NOT_ENABLED +# define STATUS_BIZRULES_NOT_ENABLED ((NTSTATUS) 0x40000034L) +#endif + +#ifndef STATUS_GUARD_PAGE_VIOLATION +# define STATUS_GUARD_PAGE_VIOLATION ((NTSTATUS) 0x80000001L) +#endif + +#ifndef STATUS_DATATYPE_MISALIGNMENT +# define STATUS_DATATYPE_MISALIGNMENT ((NTSTATUS) 0x80000002L) +#endif + +#ifndef STATUS_BREAKPOINT +# define STATUS_BREAKPOINT ((NTSTATUS) 0x80000003L) +#endif + +#ifndef STATUS_SINGLE_STEP +# define STATUS_SINGLE_STEP ((NTSTATUS) 0x80000004L) +#endif + +#ifndef STATUS_BUFFER_OVERFLOW +# define STATUS_BUFFER_OVERFLOW ((NTSTATUS) 0x80000005L) +#endif + +#ifndef STATUS_NO_MORE_FILES +# define STATUS_NO_MORE_FILES ((NTSTATUS) 0x80000006L) +#endif + +#ifndef STATUS_WAKE_SYSTEM_DEBUGGER +# define STATUS_WAKE_SYSTEM_DEBUGGER ((NTSTATUS) 0x80000007L) +#endif + +#ifndef STATUS_HANDLES_CLOSED +# define STATUS_HANDLES_CLOSED ((NTSTATUS) 0x8000000AL) +#endif + +#ifndef STATUS_NO_INHERITANCE +# define STATUS_NO_INHERITANCE ((NTSTATUS) 0x8000000BL) +#endif + +#ifndef STATUS_GUID_SUBSTITUTION_MADE +# define STATUS_GUID_SUBSTITUTION_MADE ((NTSTATUS) 0x8000000CL) +#endif + +#ifndef STATUS_PARTIAL_COPY +# define STATUS_PARTIAL_COPY ((NTSTATUS) 0x8000000DL) +#endif + +#ifndef STATUS_DEVICE_PAPER_EMPTY +# define STATUS_DEVICE_PAPER_EMPTY ((NTSTATUS) 0x8000000EL) +#endif + +#ifndef STATUS_DEVICE_POWERED_OFF +# define STATUS_DEVICE_POWERED_OFF ((NTSTATUS) 0x8000000FL) +#endif + +#ifndef STATUS_DEVICE_OFF_LINE +# define STATUS_DEVICE_OFF_LINE ((NTSTATUS) 0x80000010L) +#endif + +#ifndef STATUS_DEVICE_BUSY +# define STATUS_DEVICE_BUSY ((NTSTATUS) 0x80000011L) +#endif + +#ifndef STATUS_NO_MORE_EAS +# define STATUS_NO_MORE_EAS ((NTSTATUS) 0x80000012L) +#endif + +#ifndef STATUS_INVALID_EA_NAME +# define STATUS_INVALID_EA_NAME ((NTSTATUS) 0x80000013L) +#endif + +#ifndef STATUS_EA_LIST_INCONSISTENT +# define STATUS_EA_LIST_INCONSISTENT ((NTSTATUS) 0x80000014L) +#endif + +#ifndef STATUS_INVALID_EA_FLAG +# define STATUS_INVALID_EA_FLAG ((NTSTATUS) 0x80000015L) +#endif + +#ifndef STATUS_VERIFY_REQUIRED +# define STATUS_VERIFY_REQUIRED ((NTSTATUS) 0x80000016L) +#endif + +#ifndef STATUS_EXTRANEOUS_INFORMATION +# define STATUS_EXTRANEOUS_INFORMATION ((NTSTATUS) 0x80000017L) +#endif + +#ifndef STATUS_RXACT_COMMIT_NECESSARY +# define STATUS_RXACT_COMMIT_NECESSARY ((NTSTATUS) 0x80000018L) +#endif + +#ifndef STATUS_NO_MORE_ENTRIES +# define STATUS_NO_MORE_ENTRIES ((NTSTATUS) 0x8000001AL) +#endif + +#ifndef STATUS_FILEMARK_DETECTED +# define STATUS_FILEMARK_DETECTED ((NTSTATUS) 0x8000001BL) +#endif + +#ifndef STATUS_MEDIA_CHANGED +# define STATUS_MEDIA_CHANGED ((NTSTATUS) 0x8000001CL) +#endif + +#ifndef STATUS_BUS_RESET +# define STATUS_BUS_RESET ((NTSTATUS) 0x8000001DL) +#endif + +#ifndef STATUS_END_OF_MEDIA +# define STATUS_END_OF_MEDIA ((NTSTATUS) 0x8000001EL) +#endif + +#ifndef STATUS_BEGINNING_OF_MEDIA +# define STATUS_BEGINNING_OF_MEDIA ((NTSTATUS) 0x8000001FL) +#endif + +#ifndef STATUS_MEDIA_CHECK +# define STATUS_MEDIA_CHECK ((NTSTATUS) 0x80000020L) +#endif + +#ifndef STATUS_SETMARK_DETECTED +# define STATUS_SETMARK_DETECTED ((NTSTATUS) 0x80000021L) +#endif + +#ifndef STATUS_NO_DATA_DETECTED +# define STATUS_NO_DATA_DETECTED ((NTSTATUS) 0x80000022L) +#endif + +#ifndef STATUS_REDIRECTOR_HAS_OPEN_HANDLES +# define STATUS_REDIRECTOR_HAS_OPEN_HANDLES ((NTSTATUS) 0x80000023L) +#endif + +#ifndef STATUS_SERVER_HAS_OPEN_HANDLES +# define STATUS_SERVER_HAS_OPEN_HANDLES ((NTSTATUS) 0x80000024L) +#endif + +#ifndef STATUS_ALREADY_DISCONNECTED +# define STATUS_ALREADY_DISCONNECTED ((NTSTATUS) 0x80000025L) +#endif + +#ifndef STATUS_LONGJUMP +# define STATUS_LONGJUMP ((NTSTATUS) 0x80000026L) +#endif + +#ifndef STATUS_CLEANER_CARTRIDGE_INSTALLED +# define STATUS_CLEANER_CARTRIDGE_INSTALLED ((NTSTATUS) 0x80000027L) +#endif + +#ifndef STATUS_PLUGPLAY_QUERY_VETOED +# define STATUS_PLUGPLAY_QUERY_VETOED ((NTSTATUS) 0x80000028L) +#endif + +#ifndef STATUS_UNWIND_CONSOLIDATE +# define STATUS_UNWIND_CONSOLIDATE ((NTSTATUS) 0x80000029L) +#endif + +#ifndef STATUS_REGISTRY_HIVE_RECOVERED +# define STATUS_REGISTRY_HIVE_RECOVERED ((NTSTATUS) 0x8000002AL) +#endif + +#ifndef STATUS_DLL_MIGHT_BE_INSECURE +# define STATUS_DLL_MIGHT_BE_INSECURE ((NTSTATUS) 0x8000002BL) +#endif + +#ifndef STATUS_DLL_MIGHT_BE_INCOMPATIBLE +# define STATUS_DLL_MIGHT_BE_INCOMPATIBLE ((NTSTATUS) 0x8000002CL) +#endif + +#ifndef STATUS_STOPPED_ON_SYMLINK +# define STATUS_STOPPED_ON_SYMLINK ((NTSTATUS) 0x8000002DL) +#endif + +#ifndef STATUS_CANNOT_GRANT_REQUESTED_OPLOCK +# define STATUS_CANNOT_GRANT_REQUESTED_OPLOCK ((NTSTATUS) 0x8000002EL) +#endif + +#ifndef STATUS_NO_ACE_CONDITION +# define STATUS_NO_ACE_CONDITION ((NTSTATUS) 0x8000002FL) +#endif + +#ifndef STATUS_UNSUCCESSFUL +# define STATUS_UNSUCCESSFUL ((NTSTATUS) 0xC0000001L) +#endif + +#ifndef STATUS_NOT_IMPLEMENTED +# define STATUS_NOT_IMPLEMENTED ((NTSTATUS) 0xC0000002L) +#endif + +#ifndef STATUS_INVALID_INFO_CLASS +# define STATUS_INVALID_INFO_CLASS ((NTSTATUS) 0xC0000003L) +#endif + +#ifndef STATUS_INFO_LENGTH_MISMATCH +# define STATUS_INFO_LENGTH_MISMATCH ((NTSTATUS) 0xC0000004L) +#endif + +#ifndef STATUS_ACCESS_VIOLATION +# define STATUS_ACCESS_VIOLATION ((NTSTATUS) 0xC0000005L) +#endif + +#ifndef STATUS_IN_PAGE_ERROR +# define STATUS_IN_PAGE_ERROR ((NTSTATUS) 0xC0000006L) +#endif + +#ifndef STATUS_PAGEFILE_QUOTA +# define STATUS_PAGEFILE_QUOTA ((NTSTATUS) 0xC0000007L) +#endif + +#ifndef STATUS_INVALID_HANDLE +# define STATUS_INVALID_HANDLE ((NTSTATUS) 0xC0000008L) +#endif + +#ifndef STATUS_BAD_INITIAL_STACK +# define STATUS_BAD_INITIAL_STACK ((NTSTATUS) 0xC0000009L) +#endif + +#ifndef STATUS_BAD_INITIAL_PC +# define STATUS_BAD_INITIAL_PC ((NTSTATUS) 0xC000000AL) +#endif + +#ifndef STATUS_INVALID_CID +# define STATUS_INVALID_CID ((NTSTATUS) 0xC000000BL) +#endif + +#ifndef STATUS_TIMER_NOT_CANCELED +# define STATUS_TIMER_NOT_CANCELED ((NTSTATUS) 0xC000000CL) +#endif + +#ifndef STATUS_INVALID_PARAMETER +# define STATUS_INVALID_PARAMETER ((NTSTATUS) 0xC000000DL) +#endif + +#ifndef STATUS_NO_SUCH_DEVICE +# define STATUS_NO_SUCH_DEVICE ((NTSTATUS) 0xC000000EL) +#endif + +#ifndef STATUS_NO_SUCH_FILE +# define STATUS_NO_SUCH_FILE ((NTSTATUS) 0xC000000FL) +#endif + +#ifndef STATUS_INVALID_DEVICE_REQUEST +# define STATUS_INVALID_DEVICE_REQUEST ((NTSTATUS) 0xC0000010L) +#endif + +#ifndef STATUS_END_OF_FILE +# define STATUS_END_OF_FILE ((NTSTATUS) 0xC0000011L) +#endif + +#ifndef STATUS_WRONG_VOLUME +# define STATUS_WRONG_VOLUME ((NTSTATUS) 0xC0000012L) +#endif + +#ifndef STATUS_NO_MEDIA_IN_DEVICE +# define STATUS_NO_MEDIA_IN_DEVICE ((NTSTATUS) 0xC0000013L) +#endif + +#ifndef STATUS_UNRECOGNIZED_MEDIA +# define STATUS_UNRECOGNIZED_MEDIA ((NTSTATUS) 0xC0000014L) +#endif + +#ifndef STATUS_NONEXISTENT_SECTOR +# define STATUS_NONEXISTENT_SECTOR ((NTSTATUS) 0xC0000015L) +#endif + +#ifndef STATUS_MORE_PROCESSING_REQUIRED +# define STATUS_MORE_PROCESSING_REQUIRED ((NTSTATUS) 0xC0000016L) +#endif + +#ifndef STATUS_NO_MEMORY +# define STATUS_NO_MEMORY ((NTSTATUS) 0xC0000017L) +#endif + +#ifndef STATUS_CONFLICTING_ADDRESSES +# define STATUS_CONFLICTING_ADDRESSES ((NTSTATUS) 0xC0000018L) +#endif + +#ifndef STATUS_NOT_MAPPED_VIEW +# define STATUS_NOT_MAPPED_VIEW ((NTSTATUS) 0xC0000019L) +#endif + +#ifndef STATUS_UNABLE_TO_FREE_VM +# define STATUS_UNABLE_TO_FREE_VM ((NTSTATUS) 0xC000001AL) +#endif + +#ifndef STATUS_UNABLE_TO_DELETE_SECTION +# define STATUS_UNABLE_TO_DELETE_SECTION ((NTSTATUS) 0xC000001BL) +#endif + +#ifndef STATUS_INVALID_SYSTEM_SERVICE +# define STATUS_INVALID_SYSTEM_SERVICE ((NTSTATUS) 0xC000001CL) +#endif + +#ifndef STATUS_ILLEGAL_INSTRUCTION +# define STATUS_ILLEGAL_INSTRUCTION ((NTSTATUS) 0xC000001DL) +#endif + +#ifndef STATUS_INVALID_LOCK_SEQUENCE +# define STATUS_INVALID_LOCK_SEQUENCE ((NTSTATUS) 0xC000001EL) +#endif + +#ifndef STATUS_INVALID_VIEW_SIZE +# define STATUS_INVALID_VIEW_SIZE ((NTSTATUS) 0xC000001FL) +#endif + +#ifndef STATUS_INVALID_FILE_FOR_SECTION +# define STATUS_INVALID_FILE_FOR_SECTION ((NTSTATUS) 0xC0000020L) +#endif + +#ifndef STATUS_ALREADY_COMMITTED +# define STATUS_ALREADY_COMMITTED ((NTSTATUS) 0xC0000021L) +#endif + +#ifndef STATUS_ACCESS_DENIED +# define STATUS_ACCESS_DENIED ((NTSTATUS) 0xC0000022L) +#endif + +#ifndef STATUS_BUFFER_TOO_SMALL +# define STATUS_BUFFER_TOO_SMALL ((NTSTATUS) 0xC0000023L) +#endif + +#ifndef STATUS_OBJECT_TYPE_MISMATCH +# define STATUS_OBJECT_TYPE_MISMATCH ((NTSTATUS) 0xC0000024L) +#endif + +#ifndef STATUS_NONCONTINUABLE_EXCEPTION +# define STATUS_NONCONTINUABLE_EXCEPTION ((NTSTATUS) 0xC0000025L) +#endif + +#ifndef STATUS_INVALID_DISPOSITION +# define STATUS_INVALID_DISPOSITION ((NTSTATUS) 0xC0000026L) +#endif + +#ifndef STATUS_UNWIND +# define STATUS_UNWIND ((NTSTATUS) 0xC0000027L) +#endif + +#ifndef STATUS_BAD_STACK +# define STATUS_BAD_STACK ((NTSTATUS) 0xC0000028L) +#endif + +#ifndef STATUS_INVALID_UNWIND_TARGET +# define STATUS_INVALID_UNWIND_TARGET ((NTSTATUS) 0xC0000029L) +#endif + +#ifndef STATUS_NOT_LOCKED +# define STATUS_NOT_LOCKED ((NTSTATUS) 0xC000002AL) +#endif + +#ifndef STATUS_PARITY_ERROR +# define STATUS_PARITY_ERROR ((NTSTATUS) 0xC000002BL) +#endif + +#ifndef STATUS_UNABLE_TO_DECOMMIT_VM +# define STATUS_UNABLE_TO_DECOMMIT_VM ((NTSTATUS) 0xC000002CL) +#endif + +#ifndef STATUS_NOT_COMMITTED +# define STATUS_NOT_COMMITTED ((NTSTATUS) 0xC000002DL) +#endif + +#ifndef STATUS_INVALID_PORT_ATTRIBUTES +# define STATUS_INVALID_PORT_ATTRIBUTES ((NTSTATUS) 0xC000002EL) +#endif + +#ifndef STATUS_PORT_MESSAGE_TOO_LONG +# define STATUS_PORT_MESSAGE_TOO_LONG ((NTSTATUS) 0xC000002FL) +#endif + +#ifndef STATUS_INVALID_PARAMETER_MIX +# define STATUS_INVALID_PARAMETER_MIX ((NTSTATUS) 0xC0000030L) +#endif + +#ifndef STATUS_INVALID_QUOTA_LOWER +# define STATUS_INVALID_QUOTA_LOWER ((NTSTATUS) 0xC0000031L) +#endif + +#ifndef STATUS_DISK_CORRUPT_ERROR +# define STATUS_DISK_CORRUPT_ERROR ((NTSTATUS) 0xC0000032L) +#endif + +#ifndef STATUS_OBJECT_NAME_INVALID +# define STATUS_OBJECT_NAME_INVALID ((NTSTATUS) 0xC0000033L) +#endif + +#ifndef STATUS_OBJECT_NAME_NOT_FOUND +# define STATUS_OBJECT_NAME_NOT_FOUND ((NTSTATUS) 0xC0000034L) +#endif + +#ifndef STATUS_OBJECT_NAME_COLLISION +# define STATUS_OBJECT_NAME_COLLISION ((NTSTATUS) 0xC0000035L) +#endif + +#ifndef STATUS_PORT_DISCONNECTED +# define STATUS_PORT_DISCONNECTED ((NTSTATUS) 0xC0000037L) +#endif + +#ifndef STATUS_DEVICE_ALREADY_ATTACHED +# define STATUS_DEVICE_ALREADY_ATTACHED ((NTSTATUS) 0xC0000038L) +#endif + +#ifndef STATUS_OBJECT_PATH_INVALID +# define STATUS_OBJECT_PATH_INVALID ((NTSTATUS) 0xC0000039L) +#endif + +#ifndef STATUS_OBJECT_PATH_NOT_FOUND +# define STATUS_OBJECT_PATH_NOT_FOUND ((NTSTATUS) 0xC000003AL) +#endif + +#ifndef STATUS_OBJECT_PATH_SYNTAX_BAD +# define STATUS_OBJECT_PATH_SYNTAX_BAD ((NTSTATUS) 0xC000003BL) +#endif + +#ifndef STATUS_DATA_OVERRUN +# define STATUS_DATA_OVERRUN ((NTSTATUS) 0xC000003CL) +#endif + +#ifndef STATUS_DATA_LATE_ERROR +# define STATUS_DATA_LATE_ERROR ((NTSTATUS) 0xC000003DL) +#endif + +#ifndef STATUS_DATA_ERROR +# define STATUS_DATA_ERROR ((NTSTATUS) 0xC000003EL) +#endif + +#ifndef STATUS_CRC_ERROR +# define STATUS_CRC_ERROR ((NTSTATUS) 0xC000003FL) +#endif + +#ifndef STATUS_SECTION_TOO_BIG +# define STATUS_SECTION_TOO_BIG ((NTSTATUS) 0xC0000040L) +#endif + +#ifndef STATUS_PORT_CONNECTION_REFUSED +# define STATUS_PORT_CONNECTION_REFUSED ((NTSTATUS) 0xC0000041L) +#endif + +#ifndef STATUS_INVALID_PORT_HANDLE +# define STATUS_INVALID_PORT_HANDLE ((NTSTATUS) 0xC0000042L) +#endif + +#ifndef STATUS_SHARING_VIOLATION +# define STATUS_SHARING_VIOLATION ((NTSTATUS) 0xC0000043L) +#endif + +#ifndef STATUS_QUOTA_EXCEEDED +# define STATUS_QUOTA_EXCEEDED ((NTSTATUS) 0xC0000044L) +#endif + +#ifndef STATUS_INVALID_PAGE_PROTECTION +# define STATUS_INVALID_PAGE_PROTECTION ((NTSTATUS) 0xC0000045L) +#endif + +#ifndef STATUS_MUTANT_NOT_OWNED +# define STATUS_MUTANT_NOT_OWNED ((NTSTATUS) 0xC0000046L) +#endif + +#ifndef STATUS_SEMAPHORE_LIMIT_EXCEEDED +# define STATUS_SEMAPHORE_LIMIT_EXCEEDED ((NTSTATUS) 0xC0000047L) +#endif + +#ifndef STATUS_PORT_ALREADY_SET +# define STATUS_PORT_ALREADY_SET ((NTSTATUS) 0xC0000048L) +#endif + +#ifndef STATUS_SECTION_NOT_IMAGE +# define STATUS_SECTION_NOT_IMAGE ((NTSTATUS) 0xC0000049L) +#endif + +#ifndef STATUS_SUSPEND_COUNT_EXCEEDED +# define STATUS_SUSPEND_COUNT_EXCEEDED ((NTSTATUS) 0xC000004AL) +#endif + +#ifndef STATUS_THREAD_IS_TERMINATING +# define STATUS_THREAD_IS_TERMINATING ((NTSTATUS) 0xC000004BL) +#endif + +#ifndef STATUS_BAD_WORKING_SET_LIMIT +# define STATUS_BAD_WORKING_SET_LIMIT ((NTSTATUS) 0xC000004CL) +#endif + +#ifndef STATUS_INCOMPATIBLE_FILE_MAP +# define STATUS_INCOMPATIBLE_FILE_MAP ((NTSTATUS) 0xC000004DL) +#endif + +#ifndef STATUS_SECTION_PROTECTION +# define STATUS_SECTION_PROTECTION ((NTSTATUS) 0xC000004EL) +#endif + +#ifndef STATUS_EAS_NOT_SUPPORTED +# define STATUS_EAS_NOT_SUPPORTED ((NTSTATUS) 0xC000004FL) +#endif + +#ifndef STATUS_EA_TOO_LARGE +# define STATUS_EA_TOO_LARGE ((NTSTATUS) 0xC0000050L) +#endif + +#ifndef STATUS_NONEXISTENT_EA_ENTRY +# define STATUS_NONEXISTENT_EA_ENTRY ((NTSTATUS) 0xC0000051L) +#endif + +#ifndef STATUS_NO_EAS_ON_FILE +# define STATUS_NO_EAS_ON_FILE ((NTSTATUS) 0xC0000052L) +#endif + +#ifndef STATUS_EA_CORRUPT_ERROR +# define STATUS_EA_CORRUPT_ERROR ((NTSTATUS) 0xC0000053L) +#endif + +#ifndef STATUS_FILE_LOCK_CONFLICT +# define STATUS_FILE_LOCK_CONFLICT ((NTSTATUS) 0xC0000054L) +#endif + +#ifndef STATUS_LOCK_NOT_GRANTED +# define STATUS_LOCK_NOT_GRANTED ((NTSTATUS) 0xC0000055L) +#endif + +#ifndef STATUS_DELETE_PENDING +# define STATUS_DELETE_PENDING ((NTSTATUS) 0xC0000056L) +#endif + +#ifndef STATUS_CTL_FILE_NOT_SUPPORTED +# define STATUS_CTL_FILE_NOT_SUPPORTED ((NTSTATUS) 0xC0000057L) +#endif + +#ifndef STATUS_UNKNOWN_REVISION +# define STATUS_UNKNOWN_REVISION ((NTSTATUS) 0xC0000058L) +#endif + +#ifndef STATUS_REVISION_MISMATCH +# define STATUS_REVISION_MISMATCH ((NTSTATUS) 0xC0000059L) +#endif + +#ifndef STATUS_INVALID_OWNER +# define STATUS_INVALID_OWNER ((NTSTATUS) 0xC000005AL) +#endif + +#ifndef STATUS_INVALID_PRIMARY_GROUP +# define STATUS_INVALID_PRIMARY_GROUP ((NTSTATUS) 0xC000005BL) +#endif + +#ifndef STATUS_NO_IMPERSONATION_TOKEN +# define STATUS_NO_IMPERSONATION_TOKEN ((NTSTATUS) 0xC000005CL) +#endif + +#ifndef STATUS_CANT_DISABLE_MANDATORY +# define STATUS_CANT_DISABLE_MANDATORY ((NTSTATUS) 0xC000005DL) +#endif + +#ifndef STATUS_NO_LOGON_SERVERS +# define STATUS_NO_LOGON_SERVERS ((NTSTATUS) 0xC000005EL) +#endif + +#ifndef STATUS_NO_SUCH_LOGON_SESSION +# define STATUS_NO_SUCH_LOGON_SESSION ((NTSTATUS) 0xC000005FL) +#endif + +#ifndef STATUS_NO_SUCH_PRIVILEGE +# define STATUS_NO_SUCH_PRIVILEGE ((NTSTATUS) 0xC0000060L) +#endif + +#ifndef STATUS_PRIVILEGE_NOT_HELD +# define STATUS_PRIVILEGE_NOT_HELD ((NTSTATUS) 0xC0000061L) +#endif + +#ifndef STATUS_INVALID_ACCOUNT_NAME +# define STATUS_INVALID_ACCOUNT_NAME ((NTSTATUS) 0xC0000062L) +#endif + +#ifndef STATUS_USER_EXISTS +# define STATUS_USER_EXISTS ((NTSTATUS) 0xC0000063L) +#endif + +#ifndef STATUS_NO_SUCH_USER +# define STATUS_NO_SUCH_USER ((NTSTATUS) 0xC0000064L) +#endif + +#ifndef STATUS_GROUP_EXISTS +# define STATUS_GROUP_EXISTS ((NTSTATUS) 0xC0000065L) +#endif + +#ifndef STATUS_NO_SUCH_GROUP +# define STATUS_NO_SUCH_GROUP ((NTSTATUS) 0xC0000066L) +#endif + +#ifndef STATUS_MEMBER_IN_GROUP +# define STATUS_MEMBER_IN_GROUP ((NTSTATUS) 0xC0000067L) +#endif + +#ifndef STATUS_MEMBER_NOT_IN_GROUP +# define STATUS_MEMBER_NOT_IN_GROUP ((NTSTATUS) 0xC0000068L) +#endif + +#ifndef STATUS_LAST_ADMIN +# define STATUS_LAST_ADMIN ((NTSTATUS) 0xC0000069L) +#endif + +#ifndef STATUS_WRONG_PASSWORD +# define STATUS_WRONG_PASSWORD ((NTSTATUS) 0xC000006AL) +#endif + +#ifndef STATUS_ILL_FORMED_PASSWORD +# define STATUS_ILL_FORMED_PASSWORD ((NTSTATUS) 0xC000006BL) +#endif + +#ifndef STATUS_PASSWORD_RESTRICTION +# define STATUS_PASSWORD_RESTRICTION ((NTSTATUS) 0xC000006CL) +#endif + +#ifndef STATUS_LOGON_FAILURE +# define STATUS_LOGON_FAILURE ((NTSTATUS) 0xC000006DL) +#endif + +#ifndef STATUS_ACCOUNT_RESTRICTION +# define STATUS_ACCOUNT_RESTRICTION ((NTSTATUS) 0xC000006EL) +#endif + +#ifndef STATUS_INVALID_LOGON_HOURS +# define STATUS_INVALID_LOGON_HOURS ((NTSTATUS) 0xC000006FL) +#endif + +#ifndef STATUS_INVALID_WORKSTATION +# define STATUS_INVALID_WORKSTATION ((NTSTATUS) 0xC0000070L) +#endif + +#ifndef STATUS_PASSWORD_EXPIRED +# define STATUS_PASSWORD_EXPIRED ((NTSTATUS) 0xC0000071L) +#endif + +#ifndef STATUS_ACCOUNT_DISABLED +# define STATUS_ACCOUNT_DISABLED ((NTSTATUS) 0xC0000072L) +#endif + +#ifndef STATUS_NONE_MAPPED +# define STATUS_NONE_MAPPED ((NTSTATUS) 0xC0000073L) +#endif + +#ifndef STATUS_TOO_MANY_LUIDS_REQUESTED +# define STATUS_TOO_MANY_LUIDS_REQUESTED ((NTSTATUS) 0xC0000074L) +#endif + +#ifndef STATUS_LUIDS_EXHAUSTED +# define STATUS_LUIDS_EXHAUSTED ((NTSTATUS) 0xC0000075L) +#endif + +#ifndef STATUS_INVALID_SUB_AUTHORITY +# define STATUS_INVALID_SUB_AUTHORITY ((NTSTATUS) 0xC0000076L) +#endif + +#ifndef STATUS_INVALID_ACL +# define STATUS_INVALID_ACL ((NTSTATUS) 0xC0000077L) +#endif + +#ifndef STATUS_INVALID_SID +# define STATUS_INVALID_SID ((NTSTATUS) 0xC0000078L) +#endif + +#ifndef STATUS_INVALID_SECURITY_DESCR +# define STATUS_INVALID_SECURITY_DESCR ((NTSTATUS) 0xC0000079L) +#endif + +#ifndef STATUS_PROCEDURE_NOT_FOUND +# define STATUS_PROCEDURE_NOT_FOUND ((NTSTATUS) 0xC000007AL) +#endif + +#ifndef STATUS_INVALID_IMAGE_FORMAT +# define STATUS_INVALID_IMAGE_FORMAT ((NTSTATUS) 0xC000007BL) +#endif + +#ifndef STATUS_NO_TOKEN +# define STATUS_NO_TOKEN ((NTSTATUS) 0xC000007CL) +#endif + +#ifndef STATUS_BAD_INHERITANCE_ACL +# define STATUS_BAD_INHERITANCE_ACL ((NTSTATUS) 0xC000007DL) +#endif + +#ifndef STATUS_RANGE_NOT_LOCKED +# define STATUS_RANGE_NOT_LOCKED ((NTSTATUS) 0xC000007EL) +#endif + +#ifndef STATUS_DISK_FULL +# define STATUS_DISK_FULL ((NTSTATUS) 0xC000007FL) +#endif + +#ifndef STATUS_SERVER_DISABLED +# define STATUS_SERVER_DISABLED ((NTSTATUS) 0xC0000080L) +#endif + +#ifndef STATUS_SERVER_NOT_DISABLED +# define STATUS_SERVER_NOT_DISABLED ((NTSTATUS) 0xC0000081L) +#endif + +#ifndef STATUS_TOO_MANY_GUIDS_REQUESTED +# define STATUS_TOO_MANY_GUIDS_REQUESTED ((NTSTATUS) 0xC0000082L) +#endif + +#ifndef STATUS_GUIDS_EXHAUSTED +# define STATUS_GUIDS_EXHAUSTED ((NTSTATUS) 0xC0000083L) +#endif + +#ifndef STATUS_INVALID_ID_AUTHORITY +# define STATUS_INVALID_ID_AUTHORITY ((NTSTATUS) 0xC0000084L) +#endif + +#ifndef STATUS_AGENTS_EXHAUSTED +# define STATUS_AGENTS_EXHAUSTED ((NTSTATUS) 0xC0000085L) +#endif + +#ifndef STATUS_INVALID_VOLUME_LABEL +# define STATUS_INVALID_VOLUME_LABEL ((NTSTATUS) 0xC0000086L) +#endif + +#ifndef STATUS_SECTION_NOT_EXTENDED +# define STATUS_SECTION_NOT_EXTENDED ((NTSTATUS) 0xC0000087L) +#endif + +#ifndef STATUS_NOT_MAPPED_DATA +# define STATUS_NOT_MAPPED_DATA ((NTSTATUS) 0xC0000088L) +#endif + +#ifndef STATUS_RESOURCE_DATA_NOT_FOUND +# define STATUS_RESOURCE_DATA_NOT_FOUND ((NTSTATUS) 0xC0000089L) +#endif + +#ifndef STATUS_RESOURCE_TYPE_NOT_FOUND +# define STATUS_RESOURCE_TYPE_NOT_FOUND ((NTSTATUS) 0xC000008AL) +#endif + +#ifndef STATUS_RESOURCE_NAME_NOT_FOUND +# define STATUS_RESOURCE_NAME_NOT_FOUND ((NTSTATUS) 0xC000008BL) +#endif + +#ifndef STATUS_ARRAY_BOUNDS_EXCEEDED +# define STATUS_ARRAY_BOUNDS_EXCEEDED ((NTSTATUS) 0xC000008CL) +#endif + +#ifndef STATUS_FLOAT_DENORMAL_OPERAND +# define STATUS_FLOAT_DENORMAL_OPERAND ((NTSTATUS) 0xC000008DL) +#endif + +#ifndef STATUS_FLOAT_DIVIDE_BY_ZERO +# define STATUS_FLOAT_DIVIDE_BY_ZERO ((NTSTATUS) 0xC000008EL) +#endif + +#ifndef STATUS_FLOAT_INEXACT_RESULT +# define STATUS_FLOAT_INEXACT_RESULT ((NTSTATUS) 0xC000008FL) +#endif + +#ifndef STATUS_FLOAT_INVALID_OPERATION +# define STATUS_FLOAT_INVALID_OPERATION ((NTSTATUS) 0xC0000090L) +#endif + +#ifndef STATUS_FLOAT_OVERFLOW +# define STATUS_FLOAT_OVERFLOW ((NTSTATUS) 0xC0000091L) +#endif + +#ifndef STATUS_FLOAT_STACK_CHECK +# define STATUS_FLOAT_STACK_CHECK ((NTSTATUS) 0xC0000092L) +#endif + +#ifndef STATUS_FLOAT_UNDERFLOW +# define STATUS_FLOAT_UNDERFLOW ((NTSTATUS) 0xC0000093L) +#endif + +#ifndef STATUS_INTEGER_DIVIDE_BY_ZERO +# define STATUS_INTEGER_DIVIDE_BY_ZERO ((NTSTATUS) 0xC0000094L) +#endif + +#ifndef STATUS_INTEGER_OVERFLOW +# define STATUS_INTEGER_OVERFLOW ((NTSTATUS) 0xC0000095L) +#endif + +#ifndef STATUS_PRIVILEGED_INSTRUCTION +# define STATUS_PRIVILEGED_INSTRUCTION ((NTSTATUS) 0xC0000096L) +#endif + +#ifndef STATUS_TOO_MANY_PAGING_FILES +# define STATUS_TOO_MANY_PAGING_FILES ((NTSTATUS) 0xC0000097L) +#endif + +#ifndef STATUS_FILE_INVALID +# define STATUS_FILE_INVALID ((NTSTATUS) 0xC0000098L) +#endif + +#ifndef STATUS_ALLOTTED_SPACE_EXCEEDED +# define STATUS_ALLOTTED_SPACE_EXCEEDED ((NTSTATUS) 0xC0000099L) +#endif + +#ifndef STATUS_INSUFFICIENT_RESOURCES +# define STATUS_INSUFFICIENT_RESOURCES ((NTSTATUS) 0xC000009AL) +#endif + +#ifndef STATUS_DFS_EXIT_PATH_FOUND +# define STATUS_DFS_EXIT_PATH_FOUND ((NTSTATUS) 0xC000009BL) +#endif + +#ifndef STATUS_DEVICE_DATA_ERROR +# define STATUS_DEVICE_DATA_ERROR ((NTSTATUS) 0xC000009CL) +#endif + +#ifndef STATUS_DEVICE_NOT_CONNECTED +# define STATUS_DEVICE_NOT_CONNECTED ((NTSTATUS) 0xC000009DL) +#endif + +#ifndef STATUS_DEVICE_POWER_FAILURE +# define STATUS_DEVICE_POWER_FAILURE ((NTSTATUS) 0xC000009EL) +#endif + +#ifndef STATUS_FREE_VM_NOT_AT_BASE +# define STATUS_FREE_VM_NOT_AT_BASE ((NTSTATUS) 0xC000009FL) +#endif + +#ifndef STATUS_MEMORY_NOT_ALLOCATED +# define STATUS_MEMORY_NOT_ALLOCATED ((NTSTATUS) 0xC00000A0L) +#endif + +#ifndef STATUS_WORKING_SET_QUOTA +# define STATUS_WORKING_SET_QUOTA ((NTSTATUS) 0xC00000A1L) +#endif + +#ifndef STATUS_MEDIA_WRITE_PROTECTED +# define STATUS_MEDIA_WRITE_PROTECTED ((NTSTATUS) 0xC00000A2L) +#endif + +#ifndef STATUS_DEVICE_NOT_READY +# define STATUS_DEVICE_NOT_READY ((NTSTATUS) 0xC00000A3L) +#endif + +#ifndef STATUS_INVALID_GROUP_ATTRIBUTES +# define STATUS_INVALID_GROUP_ATTRIBUTES ((NTSTATUS) 0xC00000A4L) +#endif + +#ifndef STATUS_BAD_IMPERSONATION_LEVEL +# define STATUS_BAD_IMPERSONATION_LEVEL ((NTSTATUS) 0xC00000A5L) +#endif + +#ifndef STATUS_CANT_OPEN_ANONYMOUS +# define STATUS_CANT_OPEN_ANONYMOUS ((NTSTATUS) 0xC00000A6L) +#endif + +#ifndef STATUS_BAD_VALIDATION_CLASS +# define STATUS_BAD_VALIDATION_CLASS ((NTSTATUS) 0xC00000A7L) +#endif + +#ifndef STATUS_BAD_TOKEN_TYPE +# define STATUS_BAD_TOKEN_TYPE ((NTSTATUS) 0xC00000A8L) +#endif + +#ifndef STATUS_BAD_MASTER_BOOT_RECORD +# define STATUS_BAD_MASTER_BOOT_RECORD ((NTSTATUS) 0xC00000A9L) +#endif + +#ifndef STATUS_INSTRUCTION_MISALIGNMENT +# define STATUS_INSTRUCTION_MISALIGNMENT ((NTSTATUS) 0xC00000AAL) +#endif + +#ifndef STATUS_INSTANCE_NOT_AVAILABLE +# define STATUS_INSTANCE_NOT_AVAILABLE ((NTSTATUS) 0xC00000ABL) +#endif + +#ifndef STATUS_PIPE_NOT_AVAILABLE +# define STATUS_PIPE_NOT_AVAILABLE ((NTSTATUS) 0xC00000ACL) +#endif + +#ifndef STATUS_INVALID_PIPE_STATE +# define STATUS_INVALID_PIPE_STATE ((NTSTATUS) 0xC00000ADL) +#endif + +#ifndef STATUS_PIPE_BUSY +# define STATUS_PIPE_BUSY ((NTSTATUS) 0xC00000AEL) +#endif + +#ifndef STATUS_ILLEGAL_FUNCTION +# define STATUS_ILLEGAL_FUNCTION ((NTSTATUS) 0xC00000AFL) +#endif + +#ifndef STATUS_PIPE_DISCONNECTED +# define STATUS_PIPE_DISCONNECTED ((NTSTATUS) 0xC00000B0L) +#endif + +#ifndef STATUS_PIPE_CLOSING +# define STATUS_PIPE_CLOSING ((NTSTATUS) 0xC00000B1L) +#endif + +#ifndef STATUS_PIPE_CONNECTED +# define STATUS_PIPE_CONNECTED ((NTSTATUS) 0xC00000B2L) +#endif + +#ifndef STATUS_PIPE_LISTENING +# define STATUS_PIPE_LISTENING ((NTSTATUS) 0xC00000B3L) +#endif + +#ifndef STATUS_INVALID_READ_MODE +# define STATUS_INVALID_READ_MODE ((NTSTATUS) 0xC00000B4L) +#endif + +#ifndef STATUS_IO_TIMEOUT +# define STATUS_IO_TIMEOUT ((NTSTATUS) 0xC00000B5L) +#endif + +#ifndef STATUS_FILE_FORCED_CLOSED +# define STATUS_FILE_FORCED_CLOSED ((NTSTATUS) 0xC00000B6L) +#endif + +#ifndef STATUS_PROFILING_NOT_STARTED +# define STATUS_PROFILING_NOT_STARTED ((NTSTATUS) 0xC00000B7L) +#endif + +#ifndef STATUS_PROFILING_NOT_STOPPED +# define STATUS_PROFILING_NOT_STOPPED ((NTSTATUS) 0xC00000B8L) +#endif + +#ifndef STATUS_COULD_NOT_INTERPRET +# define STATUS_COULD_NOT_INTERPRET ((NTSTATUS) 0xC00000B9L) +#endif + +#ifndef STATUS_FILE_IS_A_DIRECTORY +# define STATUS_FILE_IS_A_DIRECTORY ((NTSTATUS) 0xC00000BAL) +#endif + +#ifndef STATUS_NOT_SUPPORTED +# define STATUS_NOT_SUPPORTED ((NTSTATUS) 0xC00000BBL) +#endif + +#ifndef STATUS_REMOTE_NOT_LISTENING +# define STATUS_REMOTE_NOT_LISTENING ((NTSTATUS) 0xC00000BCL) +#endif + +#ifndef STATUS_DUPLICATE_NAME +# define STATUS_DUPLICATE_NAME ((NTSTATUS) 0xC00000BDL) +#endif + +#ifndef STATUS_BAD_NETWORK_PATH +# define STATUS_BAD_NETWORK_PATH ((NTSTATUS) 0xC00000BEL) +#endif + +#ifndef STATUS_NETWORK_BUSY +# define STATUS_NETWORK_BUSY ((NTSTATUS) 0xC00000BFL) +#endif + +#ifndef STATUS_DEVICE_DOES_NOT_EXIST +# define STATUS_DEVICE_DOES_NOT_EXIST ((NTSTATUS) 0xC00000C0L) +#endif + +#ifndef STATUS_TOO_MANY_COMMANDS +# define STATUS_TOO_MANY_COMMANDS ((NTSTATUS) 0xC00000C1L) +#endif + +#ifndef STATUS_ADAPTER_HARDWARE_ERROR +# define STATUS_ADAPTER_HARDWARE_ERROR ((NTSTATUS) 0xC00000C2L) +#endif + +#ifndef STATUS_INVALID_NETWORK_RESPONSE +# define STATUS_INVALID_NETWORK_RESPONSE ((NTSTATUS) 0xC00000C3L) +#endif + +#ifndef STATUS_UNEXPECTED_NETWORK_ERROR +# define STATUS_UNEXPECTED_NETWORK_ERROR ((NTSTATUS) 0xC00000C4L) +#endif + +#ifndef STATUS_BAD_REMOTE_ADAPTER +# define STATUS_BAD_REMOTE_ADAPTER ((NTSTATUS) 0xC00000C5L) +#endif + +#ifndef STATUS_PRINT_QUEUE_FULL +# define STATUS_PRINT_QUEUE_FULL ((NTSTATUS) 0xC00000C6L) +#endif + +#ifndef STATUS_NO_SPOOL_SPACE +# define STATUS_NO_SPOOL_SPACE ((NTSTATUS) 0xC00000C7L) +#endif + +#ifndef STATUS_PRINT_CANCELLED +# define STATUS_PRINT_CANCELLED ((NTSTATUS) 0xC00000C8L) +#endif + +#ifndef STATUS_NETWORK_NAME_DELETED +# define STATUS_NETWORK_NAME_DELETED ((NTSTATUS) 0xC00000C9L) +#endif + +#ifndef STATUS_NETWORK_ACCESS_DENIED +# define STATUS_NETWORK_ACCESS_DENIED ((NTSTATUS) 0xC00000CAL) +#endif + +#ifndef STATUS_BAD_DEVICE_TYPE +# define STATUS_BAD_DEVICE_TYPE ((NTSTATUS) 0xC00000CBL) +#endif + +#ifndef STATUS_BAD_NETWORK_NAME +# define STATUS_BAD_NETWORK_NAME ((NTSTATUS) 0xC00000CCL) +#endif + +#ifndef STATUS_TOO_MANY_NAMES +# define STATUS_TOO_MANY_NAMES ((NTSTATUS) 0xC00000CDL) +#endif + +#ifndef STATUS_TOO_MANY_SESSIONS +# define STATUS_TOO_MANY_SESSIONS ((NTSTATUS) 0xC00000CEL) +#endif + +#ifndef STATUS_SHARING_PAUSED +# define STATUS_SHARING_PAUSED ((NTSTATUS) 0xC00000CFL) +#endif + +#ifndef STATUS_REQUEST_NOT_ACCEPTED +# define STATUS_REQUEST_NOT_ACCEPTED ((NTSTATUS) 0xC00000D0L) +#endif + +#ifndef STATUS_REDIRECTOR_PAUSED +# define STATUS_REDIRECTOR_PAUSED ((NTSTATUS) 0xC00000D1L) +#endif + +#ifndef STATUS_NET_WRITE_FAULT +# define STATUS_NET_WRITE_FAULT ((NTSTATUS) 0xC00000D2L) +#endif + +#ifndef STATUS_PROFILING_AT_LIMIT +# define STATUS_PROFILING_AT_LIMIT ((NTSTATUS) 0xC00000D3L) +#endif + +#ifndef STATUS_NOT_SAME_DEVICE +# define STATUS_NOT_SAME_DEVICE ((NTSTATUS) 0xC00000D4L) +#endif + +#ifndef STATUS_FILE_RENAMED +# define STATUS_FILE_RENAMED ((NTSTATUS) 0xC00000D5L) +#endif + +#ifndef STATUS_VIRTUAL_CIRCUIT_CLOSED +# define STATUS_VIRTUAL_CIRCUIT_CLOSED ((NTSTATUS) 0xC00000D6L) +#endif + +#ifndef STATUS_NO_SECURITY_ON_OBJECT +# define STATUS_NO_SECURITY_ON_OBJECT ((NTSTATUS) 0xC00000D7L) +#endif + +#ifndef STATUS_CANT_WAIT +# define STATUS_CANT_WAIT ((NTSTATUS) 0xC00000D8L) +#endif + +#ifndef STATUS_PIPE_EMPTY +# define STATUS_PIPE_EMPTY ((NTSTATUS) 0xC00000D9L) +#endif + +#ifndef STATUS_CANT_ACCESS_DOMAIN_INFO +# define STATUS_CANT_ACCESS_DOMAIN_INFO ((NTSTATUS) 0xC00000DAL) +#endif + +#ifndef STATUS_CANT_TERMINATE_SELF +# define STATUS_CANT_TERMINATE_SELF ((NTSTATUS) 0xC00000DBL) +#endif + +#ifndef STATUS_INVALID_SERVER_STATE +# define STATUS_INVALID_SERVER_STATE ((NTSTATUS) 0xC00000DCL) +#endif + +#ifndef STATUS_INVALID_DOMAIN_STATE +# define STATUS_INVALID_DOMAIN_STATE ((NTSTATUS) 0xC00000DDL) +#endif + +#ifndef STATUS_INVALID_DOMAIN_ROLE +# define STATUS_INVALID_DOMAIN_ROLE ((NTSTATUS) 0xC00000DEL) +#endif + +#ifndef STATUS_NO_SUCH_DOMAIN +# define STATUS_NO_SUCH_DOMAIN ((NTSTATUS) 0xC00000DFL) +#endif + +#ifndef STATUS_DOMAIN_EXISTS +# define STATUS_DOMAIN_EXISTS ((NTSTATUS) 0xC00000E0L) +#endif + +#ifndef STATUS_DOMAIN_LIMIT_EXCEEDED +# define STATUS_DOMAIN_LIMIT_EXCEEDED ((NTSTATUS) 0xC00000E1L) +#endif + +#ifndef STATUS_OPLOCK_NOT_GRANTED +# define STATUS_OPLOCK_NOT_GRANTED ((NTSTATUS) 0xC00000E2L) +#endif + +#ifndef STATUS_INVALID_OPLOCK_PROTOCOL +# define STATUS_INVALID_OPLOCK_PROTOCOL ((NTSTATUS) 0xC00000E3L) +#endif + +#ifndef STATUS_INTERNAL_DB_CORRUPTION +# define STATUS_INTERNAL_DB_CORRUPTION ((NTSTATUS) 0xC00000E4L) +#endif + +#ifndef STATUS_INTERNAL_ERROR +# define STATUS_INTERNAL_ERROR ((NTSTATUS) 0xC00000E5L) +#endif + +#ifndef STATUS_GENERIC_NOT_MAPPED +# define STATUS_GENERIC_NOT_MAPPED ((NTSTATUS) 0xC00000E6L) +#endif + +#ifndef STATUS_BAD_DESCRIPTOR_FORMAT +# define STATUS_BAD_DESCRIPTOR_FORMAT ((NTSTATUS) 0xC00000E7L) +#endif + +#ifndef STATUS_INVALID_USER_BUFFER +# define STATUS_INVALID_USER_BUFFER ((NTSTATUS) 0xC00000E8L) +#endif + +#ifndef STATUS_UNEXPECTED_IO_ERROR +# define STATUS_UNEXPECTED_IO_ERROR ((NTSTATUS) 0xC00000E9L) +#endif + +#ifndef STATUS_UNEXPECTED_MM_CREATE_ERR +# define STATUS_UNEXPECTED_MM_CREATE_ERR ((NTSTATUS) 0xC00000EAL) +#endif + +#ifndef STATUS_UNEXPECTED_MM_MAP_ERROR +# define STATUS_UNEXPECTED_MM_MAP_ERROR ((NTSTATUS) 0xC00000EBL) +#endif + +#ifndef STATUS_UNEXPECTED_MM_EXTEND_ERR +# define STATUS_UNEXPECTED_MM_EXTEND_ERR ((NTSTATUS) 0xC00000ECL) +#endif + +#ifndef STATUS_NOT_LOGON_PROCESS +# define STATUS_NOT_LOGON_PROCESS ((NTSTATUS) 0xC00000EDL) +#endif + +#ifndef STATUS_LOGON_SESSION_EXISTS +# define STATUS_LOGON_SESSION_EXISTS ((NTSTATUS) 0xC00000EEL) +#endif + +#ifndef STATUS_INVALID_PARAMETER_1 +# define STATUS_INVALID_PARAMETER_1 ((NTSTATUS) 0xC00000EFL) +#endif + +#ifndef STATUS_INVALID_PARAMETER_2 +# define STATUS_INVALID_PARAMETER_2 ((NTSTATUS) 0xC00000F0L) +#endif + +#ifndef STATUS_INVALID_PARAMETER_3 +# define STATUS_INVALID_PARAMETER_3 ((NTSTATUS) 0xC00000F1L) +#endif + +#ifndef STATUS_INVALID_PARAMETER_4 +# define STATUS_INVALID_PARAMETER_4 ((NTSTATUS) 0xC00000F2L) +#endif + +#ifndef STATUS_INVALID_PARAMETER_5 +# define STATUS_INVALID_PARAMETER_5 ((NTSTATUS) 0xC00000F3L) +#endif + +#ifndef STATUS_INVALID_PARAMETER_6 +# define STATUS_INVALID_PARAMETER_6 ((NTSTATUS) 0xC00000F4L) +#endif + +#ifndef STATUS_INVALID_PARAMETER_7 +# define STATUS_INVALID_PARAMETER_7 ((NTSTATUS) 0xC00000F5L) +#endif + +#ifndef STATUS_INVALID_PARAMETER_8 +# define STATUS_INVALID_PARAMETER_8 ((NTSTATUS) 0xC00000F6L) +#endif + +#ifndef STATUS_INVALID_PARAMETER_9 +# define STATUS_INVALID_PARAMETER_9 ((NTSTATUS) 0xC00000F7L) +#endif + +#ifndef STATUS_INVALID_PARAMETER_10 +# define STATUS_INVALID_PARAMETER_10 ((NTSTATUS) 0xC00000F8L) +#endif + +#ifndef STATUS_INVALID_PARAMETER_11 +# define STATUS_INVALID_PARAMETER_11 ((NTSTATUS) 0xC00000F9L) +#endif + +#ifndef STATUS_INVALID_PARAMETER_12 +# define STATUS_INVALID_PARAMETER_12 ((NTSTATUS) 0xC00000FAL) +#endif + +#ifndef STATUS_REDIRECTOR_NOT_STARTED +# define STATUS_REDIRECTOR_NOT_STARTED ((NTSTATUS) 0xC00000FBL) +#endif + +#ifndef STATUS_REDIRECTOR_STARTED +# define STATUS_REDIRECTOR_STARTED ((NTSTATUS) 0xC00000FCL) +#endif + +#ifndef STATUS_STACK_OVERFLOW +# define STATUS_STACK_OVERFLOW ((NTSTATUS) 0xC00000FDL) +#endif + +#ifndef STATUS_NO_SUCH_PACKAGE +# define STATUS_NO_SUCH_PACKAGE ((NTSTATUS) 0xC00000FEL) +#endif + +#ifndef STATUS_BAD_FUNCTION_TABLE +# define STATUS_BAD_FUNCTION_TABLE ((NTSTATUS) 0xC00000FFL) +#endif + +#ifndef STATUS_VARIABLE_NOT_FOUND +# define STATUS_VARIABLE_NOT_FOUND ((NTSTATUS) 0xC0000100L) +#endif + +#ifndef STATUS_DIRECTORY_NOT_EMPTY +# define STATUS_DIRECTORY_NOT_EMPTY ((NTSTATUS) 0xC0000101L) +#endif + +#ifndef STATUS_FILE_CORRUPT_ERROR +# define STATUS_FILE_CORRUPT_ERROR ((NTSTATUS) 0xC0000102L) +#endif + +#ifndef STATUS_NOT_A_DIRECTORY +# define STATUS_NOT_A_DIRECTORY ((NTSTATUS) 0xC0000103L) +#endif + +#ifndef STATUS_BAD_LOGON_SESSION_STATE +# define STATUS_BAD_LOGON_SESSION_STATE ((NTSTATUS) 0xC0000104L) +#endif + +#ifndef STATUS_LOGON_SESSION_COLLISION +# define STATUS_LOGON_SESSION_COLLISION ((NTSTATUS) 0xC0000105L) +#endif + +#ifndef STATUS_NAME_TOO_LONG +# define STATUS_NAME_TOO_LONG ((NTSTATUS) 0xC0000106L) +#endif + +#ifndef STATUS_FILES_OPEN +# define STATUS_FILES_OPEN ((NTSTATUS) 0xC0000107L) +#endif + +#ifndef STATUS_CONNECTION_IN_USE +# define STATUS_CONNECTION_IN_USE ((NTSTATUS) 0xC0000108L) +#endif + +#ifndef STATUS_MESSAGE_NOT_FOUND +# define STATUS_MESSAGE_NOT_FOUND ((NTSTATUS) 0xC0000109L) +#endif + +#ifndef STATUS_PROCESS_IS_TERMINATING +# define STATUS_PROCESS_IS_TERMINATING ((NTSTATUS) 0xC000010AL) +#endif + +#ifndef STATUS_INVALID_LOGON_TYPE +# define STATUS_INVALID_LOGON_TYPE ((NTSTATUS) 0xC000010BL) +#endif + +#ifndef STATUS_NO_GUID_TRANSLATION +# define STATUS_NO_GUID_TRANSLATION ((NTSTATUS) 0xC000010CL) +#endif + +#ifndef STATUS_CANNOT_IMPERSONATE +# define STATUS_CANNOT_IMPERSONATE ((NTSTATUS) 0xC000010DL) +#endif + +#ifndef STATUS_IMAGE_ALREADY_LOADED +# define STATUS_IMAGE_ALREADY_LOADED ((NTSTATUS) 0xC000010EL) +#endif + +#ifndef STATUS_ABIOS_NOT_PRESENT +# define STATUS_ABIOS_NOT_PRESENT ((NTSTATUS) 0xC000010FL) +#endif + +#ifndef STATUS_ABIOS_LID_NOT_EXIST +# define STATUS_ABIOS_LID_NOT_EXIST ((NTSTATUS) 0xC0000110L) +#endif + +#ifndef STATUS_ABIOS_LID_ALREADY_OWNED +# define STATUS_ABIOS_LID_ALREADY_OWNED ((NTSTATUS) 0xC0000111L) +#endif + +#ifndef STATUS_ABIOS_NOT_LID_OWNER +# define STATUS_ABIOS_NOT_LID_OWNER ((NTSTATUS) 0xC0000112L) +#endif + +#ifndef STATUS_ABIOS_INVALID_COMMAND +# define STATUS_ABIOS_INVALID_COMMAND ((NTSTATUS) 0xC0000113L) +#endif + +#ifndef STATUS_ABIOS_INVALID_LID +# define STATUS_ABIOS_INVALID_LID ((NTSTATUS) 0xC0000114L) +#endif + +#ifndef STATUS_ABIOS_SELECTOR_NOT_AVAILABLE +# define STATUS_ABIOS_SELECTOR_NOT_AVAILABLE ((NTSTATUS) 0xC0000115L) +#endif + +#ifndef STATUS_ABIOS_INVALID_SELECTOR +# define STATUS_ABIOS_INVALID_SELECTOR ((NTSTATUS) 0xC0000116L) +#endif + +#ifndef STATUS_NO_LDT +# define STATUS_NO_LDT ((NTSTATUS) 0xC0000117L) +#endif + +#ifndef STATUS_INVALID_LDT_SIZE +# define STATUS_INVALID_LDT_SIZE ((NTSTATUS) 0xC0000118L) +#endif + +#ifndef STATUS_INVALID_LDT_OFFSET +# define STATUS_INVALID_LDT_OFFSET ((NTSTATUS) 0xC0000119L) +#endif + +#ifndef STATUS_INVALID_LDT_DESCRIPTOR +# define STATUS_INVALID_LDT_DESCRIPTOR ((NTSTATUS) 0xC000011AL) +#endif + +#ifndef STATUS_INVALID_IMAGE_NE_FORMAT +# define STATUS_INVALID_IMAGE_NE_FORMAT ((NTSTATUS) 0xC000011BL) +#endif + +#ifndef STATUS_RXACT_INVALID_STATE +# define STATUS_RXACT_INVALID_STATE ((NTSTATUS) 0xC000011CL) +#endif + +#ifndef STATUS_RXACT_COMMIT_FAILURE +# define STATUS_RXACT_COMMIT_FAILURE ((NTSTATUS) 0xC000011DL) +#endif + +#ifndef STATUS_MAPPED_FILE_SIZE_ZERO +# define STATUS_MAPPED_FILE_SIZE_ZERO ((NTSTATUS) 0xC000011EL) +#endif + +#ifndef STATUS_TOO_MANY_OPENED_FILES +# define STATUS_TOO_MANY_OPENED_FILES ((NTSTATUS) 0xC000011FL) +#endif + +#ifndef STATUS_CANCELLED +# define STATUS_CANCELLED ((NTSTATUS) 0xC0000120L) +#endif + +#ifndef STATUS_CANNOT_DELETE +# define STATUS_CANNOT_DELETE ((NTSTATUS) 0xC0000121L) +#endif + +#ifndef STATUS_INVALID_COMPUTER_NAME +# define STATUS_INVALID_COMPUTER_NAME ((NTSTATUS) 0xC0000122L) +#endif + +#ifndef STATUS_FILE_DELETED +# define STATUS_FILE_DELETED ((NTSTATUS) 0xC0000123L) +#endif + +#ifndef STATUS_SPECIAL_ACCOUNT +# define STATUS_SPECIAL_ACCOUNT ((NTSTATUS) 0xC0000124L) +#endif + +#ifndef STATUS_SPECIAL_GROUP +# define STATUS_SPECIAL_GROUP ((NTSTATUS) 0xC0000125L) +#endif + +#ifndef STATUS_SPECIAL_USER +# define STATUS_SPECIAL_USER ((NTSTATUS) 0xC0000126L) +#endif + +#ifndef STATUS_MEMBERS_PRIMARY_GROUP +# define STATUS_MEMBERS_PRIMARY_GROUP ((NTSTATUS) 0xC0000127L) +#endif + +#ifndef STATUS_FILE_CLOSED +# define STATUS_FILE_CLOSED ((NTSTATUS) 0xC0000128L) +#endif + +#ifndef STATUS_TOO_MANY_THREADS +# define STATUS_TOO_MANY_THREADS ((NTSTATUS) 0xC0000129L) +#endif + +#ifndef STATUS_THREAD_NOT_IN_PROCESS +# define STATUS_THREAD_NOT_IN_PROCESS ((NTSTATUS) 0xC000012AL) +#endif + +#ifndef STATUS_TOKEN_ALREADY_IN_USE +# define STATUS_TOKEN_ALREADY_IN_USE ((NTSTATUS) 0xC000012BL) +#endif + +#ifndef STATUS_PAGEFILE_QUOTA_EXCEEDED +# define STATUS_PAGEFILE_QUOTA_EXCEEDED ((NTSTATUS) 0xC000012CL) +#endif + +#ifndef STATUS_COMMITMENT_LIMIT +# define STATUS_COMMITMENT_LIMIT ((NTSTATUS) 0xC000012DL) +#endif + +#ifndef STATUS_INVALID_IMAGE_LE_FORMAT +# define STATUS_INVALID_IMAGE_LE_FORMAT ((NTSTATUS) 0xC000012EL) +#endif + +#ifndef STATUS_INVALID_IMAGE_NOT_MZ +# define STATUS_INVALID_IMAGE_NOT_MZ ((NTSTATUS) 0xC000012FL) +#endif + +#ifndef STATUS_INVALID_IMAGE_PROTECT +# define STATUS_INVALID_IMAGE_PROTECT ((NTSTATUS) 0xC0000130L) +#endif + +#ifndef STATUS_INVALID_IMAGE_WIN_16 +# define STATUS_INVALID_IMAGE_WIN_16 ((NTSTATUS) 0xC0000131L) +#endif + +#ifndef STATUS_LOGON_SERVER_CONFLICT +# define STATUS_LOGON_SERVER_CONFLICT ((NTSTATUS) 0xC0000132L) +#endif + +#ifndef STATUS_TIME_DIFFERENCE_AT_DC +# define STATUS_TIME_DIFFERENCE_AT_DC ((NTSTATUS) 0xC0000133L) +#endif + +#ifndef STATUS_SYNCHRONIZATION_REQUIRED +# define STATUS_SYNCHRONIZATION_REQUIRED ((NTSTATUS) 0xC0000134L) +#endif + +#ifndef STATUS_DLL_NOT_FOUND +# define STATUS_DLL_NOT_FOUND ((NTSTATUS) 0xC0000135L) +#endif + +#ifndef STATUS_OPEN_FAILED +# define STATUS_OPEN_FAILED ((NTSTATUS) 0xC0000136L) +#endif + +#ifndef STATUS_IO_PRIVILEGE_FAILED +# define STATUS_IO_PRIVILEGE_FAILED ((NTSTATUS) 0xC0000137L) +#endif + +#ifndef STATUS_ORDINAL_NOT_FOUND +# define STATUS_ORDINAL_NOT_FOUND ((NTSTATUS) 0xC0000138L) +#endif + +#ifndef STATUS_ENTRYPOINT_NOT_FOUND +# define STATUS_ENTRYPOINT_NOT_FOUND ((NTSTATUS) 0xC0000139L) +#endif + +#ifndef STATUS_CONTROL_C_EXIT +# define STATUS_CONTROL_C_EXIT ((NTSTATUS) 0xC000013AL) +#endif + +#ifndef STATUS_LOCAL_DISCONNECT +# define STATUS_LOCAL_DISCONNECT ((NTSTATUS) 0xC000013BL) +#endif + +#ifndef STATUS_REMOTE_DISCONNECT +# define STATUS_REMOTE_DISCONNECT ((NTSTATUS) 0xC000013CL) +#endif + +#ifndef STATUS_REMOTE_RESOURCES +# define STATUS_REMOTE_RESOURCES ((NTSTATUS) 0xC000013DL) +#endif + +#ifndef STATUS_LINK_FAILED +# define STATUS_LINK_FAILED ((NTSTATUS) 0xC000013EL) +#endif + +#ifndef STATUS_LINK_TIMEOUT +# define STATUS_LINK_TIMEOUT ((NTSTATUS) 0xC000013FL) +#endif + +#ifndef STATUS_INVALID_CONNECTION +# define STATUS_INVALID_CONNECTION ((NTSTATUS) 0xC0000140L) +#endif + +#ifndef STATUS_INVALID_ADDRESS +# define STATUS_INVALID_ADDRESS ((NTSTATUS) 0xC0000141L) +#endif + +#ifndef STATUS_DLL_INIT_FAILED +# define STATUS_DLL_INIT_FAILED ((NTSTATUS) 0xC0000142L) +#endif + +#ifndef STATUS_MISSING_SYSTEMFILE +# define STATUS_MISSING_SYSTEMFILE ((NTSTATUS) 0xC0000143L) +#endif + +#ifndef STATUS_UNHANDLED_EXCEPTION +# define STATUS_UNHANDLED_EXCEPTION ((NTSTATUS) 0xC0000144L) +#endif + +#ifndef STATUS_APP_INIT_FAILURE +# define STATUS_APP_INIT_FAILURE ((NTSTATUS) 0xC0000145L) +#endif + +#ifndef STATUS_PAGEFILE_CREATE_FAILED +# define STATUS_PAGEFILE_CREATE_FAILED ((NTSTATUS) 0xC0000146L) +#endif + +#ifndef STATUS_NO_PAGEFILE +# define STATUS_NO_PAGEFILE ((NTSTATUS) 0xC0000147L) +#endif + +#ifndef STATUS_INVALID_LEVEL +# define STATUS_INVALID_LEVEL ((NTSTATUS) 0xC0000148L) +#endif + +#ifndef STATUS_WRONG_PASSWORD_CORE +# define STATUS_WRONG_PASSWORD_CORE ((NTSTATUS) 0xC0000149L) +#endif + +#ifndef STATUS_ILLEGAL_FLOAT_CONTEXT +# define STATUS_ILLEGAL_FLOAT_CONTEXT ((NTSTATUS) 0xC000014AL) +#endif + +#ifndef STATUS_PIPE_BROKEN +# define STATUS_PIPE_BROKEN ((NTSTATUS) 0xC000014BL) +#endif + +#ifndef STATUS_REGISTRY_CORRUPT +# define STATUS_REGISTRY_CORRUPT ((NTSTATUS) 0xC000014CL) +#endif + +#ifndef STATUS_REGISTRY_IO_FAILED +# define STATUS_REGISTRY_IO_FAILED ((NTSTATUS) 0xC000014DL) +#endif + +#ifndef STATUS_NO_EVENT_PAIR +# define STATUS_NO_EVENT_PAIR ((NTSTATUS) 0xC000014EL) +#endif + +#ifndef STATUS_UNRECOGNIZED_VOLUME +# define STATUS_UNRECOGNIZED_VOLUME ((NTSTATUS) 0xC000014FL) +#endif + +#ifndef STATUS_SERIAL_NO_DEVICE_INITED +# define STATUS_SERIAL_NO_DEVICE_INITED ((NTSTATUS) 0xC0000150L) +#endif + +#ifndef STATUS_NO_SUCH_ALIAS +# define STATUS_NO_SUCH_ALIAS ((NTSTATUS) 0xC0000151L) +#endif + +#ifndef STATUS_MEMBER_NOT_IN_ALIAS +# define STATUS_MEMBER_NOT_IN_ALIAS ((NTSTATUS) 0xC0000152L) +#endif + +#ifndef STATUS_MEMBER_IN_ALIAS +# define STATUS_MEMBER_IN_ALIAS ((NTSTATUS) 0xC0000153L) +#endif + +#ifndef STATUS_ALIAS_EXISTS +# define STATUS_ALIAS_EXISTS ((NTSTATUS) 0xC0000154L) +#endif + +#ifndef STATUS_LOGON_NOT_GRANTED +# define STATUS_LOGON_NOT_GRANTED ((NTSTATUS) 0xC0000155L) +#endif + +#ifndef STATUS_TOO_MANY_SECRETS +# define STATUS_TOO_MANY_SECRETS ((NTSTATUS) 0xC0000156L) +#endif + +#ifndef STATUS_SECRET_TOO_LONG +# define STATUS_SECRET_TOO_LONG ((NTSTATUS) 0xC0000157L) +#endif + +#ifndef STATUS_INTERNAL_DB_ERROR +# define STATUS_INTERNAL_DB_ERROR ((NTSTATUS) 0xC0000158L) +#endif + +#ifndef STATUS_FULLSCREEN_MODE +# define STATUS_FULLSCREEN_MODE ((NTSTATUS) 0xC0000159L) +#endif + +#ifndef STATUS_TOO_MANY_CONTEXT_IDS +# define STATUS_TOO_MANY_CONTEXT_IDS ((NTSTATUS) 0xC000015AL) +#endif + +#ifndef STATUS_LOGON_TYPE_NOT_GRANTED +# define STATUS_LOGON_TYPE_NOT_GRANTED ((NTSTATUS) 0xC000015BL) +#endif + +#ifndef STATUS_NOT_REGISTRY_FILE +# define STATUS_NOT_REGISTRY_FILE ((NTSTATUS) 0xC000015CL) +#endif + +#ifndef STATUS_NT_CROSS_ENCRYPTION_REQUIRED +# define STATUS_NT_CROSS_ENCRYPTION_REQUIRED ((NTSTATUS) 0xC000015DL) +#endif + +#ifndef STATUS_DOMAIN_CTRLR_CONFIG_ERROR +# define STATUS_DOMAIN_CTRLR_CONFIG_ERROR ((NTSTATUS) 0xC000015EL) +#endif + +#ifndef STATUS_FT_MISSING_MEMBER +# define STATUS_FT_MISSING_MEMBER ((NTSTATUS) 0xC000015FL) +#endif + +#ifndef STATUS_ILL_FORMED_SERVICE_ENTRY +# define STATUS_ILL_FORMED_SERVICE_ENTRY ((NTSTATUS) 0xC0000160L) +#endif + +#ifndef STATUS_ILLEGAL_CHARACTER +# define STATUS_ILLEGAL_CHARACTER ((NTSTATUS) 0xC0000161L) +#endif + +#ifndef STATUS_UNMAPPABLE_CHARACTER +# define STATUS_UNMAPPABLE_CHARACTER ((NTSTATUS) 0xC0000162L) +#endif + +#ifndef STATUS_UNDEFINED_CHARACTER +# define STATUS_UNDEFINED_CHARACTER ((NTSTATUS) 0xC0000163L) +#endif + +#ifndef STATUS_FLOPPY_VOLUME +# define STATUS_FLOPPY_VOLUME ((NTSTATUS) 0xC0000164L) +#endif + +#ifndef STATUS_FLOPPY_ID_MARK_NOT_FOUND +# define STATUS_FLOPPY_ID_MARK_NOT_FOUND ((NTSTATUS) 0xC0000165L) +#endif + +#ifndef STATUS_FLOPPY_WRONG_CYLINDER +# define STATUS_FLOPPY_WRONG_CYLINDER ((NTSTATUS) 0xC0000166L) +#endif + +#ifndef STATUS_FLOPPY_UNKNOWN_ERROR +# define STATUS_FLOPPY_UNKNOWN_ERROR ((NTSTATUS) 0xC0000167L) +#endif + +#ifndef STATUS_FLOPPY_BAD_REGISTERS +# define STATUS_FLOPPY_BAD_REGISTERS ((NTSTATUS) 0xC0000168L) +#endif + +#ifndef STATUS_DISK_RECALIBRATE_FAILED +# define STATUS_DISK_RECALIBRATE_FAILED ((NTSTATUS) 0xC0000169L) +#endif + +#ifndef STATUS_DISK_OPERATION_FAILED +# define STATUS_DISK_OPERATION_FAILED ((NTSTATUS) 0xC000016AL) +#endif + +#ifndef STATUS_DISK_RESET_FAILED +# define STATUS_DISK_RESET_FAILED ((NTSTATUS) 0xC000016BL) +#endif + +#ifndef STATUS_SHARED_IRQ_BUSY +# define STATUS_SHARED_IRQ_BUSY ((NTSTATUS) 0xC000016CL) +#endif + +#ifndef STATUS_FT_ORPHANING +# define STATUS_FT_ORPHANING ((NTSTATUS) 0xC000016DL) +#endif + +#ifndef STATUS_BIOS_FAILED_TO_CONNECT_INTERRUPT +# define STATUS_BIOS_FAILED_TO_CONNECT_INTERRUPT ((NTSTATUS) 0xC000016EL) +#endif + +#ifndef STATUS_PARTITION_FAILURE +# define STATUS_PARTITION_FAILURE ((NTSTATUS) 0xC0000172L) +#endif + +#ifndef STATUS_INVALID_BLOCK_LENGTH +# define STATUS_INVALID_BLOCK_LENGTH ((NTSTATUS) 0xC0000173L) +#endif + +#ifndef STATUS_DEVICE_NOT_PARTITIONED +# define STATUS_DEVICE_NOT_PARTITIONED ((NTSTATUS) 0xC0000174L) +#endif + +#ifndef STATUS_UNABLE_TO_LOCK_MEDIA +# define STATUS_UNABLE_TO_LOCK_MEDIA ((NTSTATUS) 0xC0000175L) +#endif + +#ifndef STATUS_UNABLE_TO_UNLOAD_MEDIA +# define STATUS_UNABLE_TO_UNLOAD_MEDIA ((NTSTATUS) 0xC0000176L) +#endif + +#ifndef STATUS_EOM_OVERFLOW +# define STATUS_EOM_OVERFLOW ((NTSTATUS) 0xC0000177L) +#endif + +#ifndef STATUS_NO_MEDIA +# define STATUS_NO_MEDIA ((NTSTATUS) 0xC0000178L) +#endif + +#ifndef STATUS_NO_SUCH_MEMBER +# define STATUS_NO_SUCH_MEMBER ((NTSTATUS) 0xC000017AL) +#endif + +#ifndef STATUS_INVALID_MEMBER +# define STATUS_INVALID_MEMBER ((NTSTATUS) 0xC000017BL) +#endif + +#ifndef STATUS_KEY_DELETED +# define STATUS_KEY_DELETED ((NTSTATUS) 0xC000017CL) +#endif + +#ifndef STATUS_NO_LOG_SPACE +# define STATUS_NO_LOG_SPACE ((NTSTATUS) 0xC000017DL) +#endif + +#ifndef STATUS_TOO_MANY_SIDS +# define STATUS_TOO_MANY_SIDS ((NTSTATUS) 0xC000017EL) +#endif + +#ifndef STATUS_LM_CROSS_ENCRYPTION_REQUIRED +# define STATUS_LM_CROSS_ENCRYPTION_REQUIRED ((NTSTATUS) 0xC000017FL) +#endif + +#ifndef STATUS_KEY_HAS_CHILDREN +# define STATUS_KEY_HAS_CHILDREN ((NTSTATUS) 0xC0000180L) +#endif + +#ifndef STATUS_CHILD_MUST_BE_VOLATILE +# define STATUS_CHILD_MUST_BE_VOLATILE ((NTSTATUS) 0xC0000181L) +#endif + +#ifndef STATUS_DEVICE_CONFIGURATION_ERROR +# define STATUS_DEVICE_CONFIGURATION_ERROR ((NTSTATUS) 0xC0000182L) +#endif + +#ifndef STATUS_DRIVER_INTERNAL_ERROR +# define STATUS_DRIVER_INTERNAL_ERROR ((NTSTATUS) 0xC0000183L) +#endif + +#ifndef STATUS_INVALID_DEVICE_STATE +# define STATUS_INVALID_DEVICE_STATE ((NTSTATUS) 0xC0000184L) +#endif + +#ifndef STATUS_IO_DEVICE_ERROR +# define STATUS_IO_DEVICE_ERROR ((NTSTATUS) 0xC0000185L) +#endif + +#ifndef STATUS_DEVICE_PROTOCOL_ERROR +# define STATUS_DEVICE_PROTOCOL_ERROR ((NTSTATUS) 0xC0000186L) +#endif + +#ifndef STATUS_BACKUP_CONTROLLER +# define STATUS_BACKUP_CONTROLLER ((NTSTATUS) 0xC0000187L) +#endif + +#ifndef STATUS_LOG_FILE_FULL +# define STATUS_LOG_FILE_FULL ((NTSTATUS) 0xC0000188L) +#endif + +#ifndef STATUS_TOO_LATE +# define STATUS_TOO_LATE ((NTSTATUS) 0xC0000189L) +#endif + +#ifndef STATUS_NO_TRUST_LSA_SECRET +# define STATUS_NO_TRUST_LSA_SECRET ((NTSTATUS) 0xC000018AL) +#endif + +#ifndef STATUS_NO_TRUST_SAM_ACCOUNT +# define STATUS_NO_TRUST_SAM_ACCOUNT ((NTSTATUS) 0xC000018BL) +#endif + +#ifndef STATUS_TRUSTED_DOMAIN_FAILURE +# define STATUS_TRUSTED_DOMAIN_FAILURE ((NTSTATUS) 0xC000018CL) +#endif + +#ifndef STATUS_TRUSTED_RELATIONSHIP_FAILURE +# define STATUS_TRUSTED_RELATIONSHIP_FAILURE ((NTSTATUS) 0xC000018DL) +#endif + +#ifndef STATUS_EVENTLOG_FILE_CORRUPT +# define STATUS_EVENTLOG_FILE_CORRUPT ((NTSTATUS) 0xC000018EL) +#endif + +#ifndef STATUS_EVENTLOG_CANT_START +# define STATUS_EVENTLOG_CANT_START ((NTSTATUS) 0xC000018FL) +#endif + +#ifndef STATUS_TRUST_FAILURE +# define STATUS_TRUST_FAILURE ((NTSTATUS) 0xC0000190L) +#endif + +#ifndef STATUS_MUTANT_LIMIT_EXCEEDED +# define STATUS_MUTANT_LIMIT_EXCEEDED ((NTSTATUS) 0xC0000191L) +#endif + +#ifndef STATUS_NETLOGON_NOT_STARTED +# define STATUS_NETLOGON_NOT_STARTED ((NTSTATUS) 0xC0000192L) +#endif + +#ifndef STATUS_ACCOUNT_EXPIRED +# define STATUS_ACCOUNT_EXPIRED ((NTSTATUS) 0xC0000193L) +#endif + +#ifndef STATUS_POSSIBLE_DEADLOCK +# define STATUS_POSSIBLE_DEADLOCK ((NTSTATUS) 0xC0000194L) +#endif + +#ifndef STATUS_NETWORK_CREDENTIAL_CONFLICT +# define STATUS_NETWORK_CREDENTIAL_CONFLICT ((NTSTATUS) 0xC0000195L) +#endif + +#ifndef STATUS_REMOTE_SESSION_LIMIT +# define STATUS_REMOTE_SESSION_LIMIT ((NTSTATUS) 0xC0000196L) +#endif + +#ifndef STATUS_EVENTLOG_FILE_CHANGED +# define STATUS_EVENTLOG_FILE_CHANGED ((NTSTATUS) 0xC0000197L) +#endif + +#ifndef STATUS_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT +# define STATUS_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT ((NTSTATUS) 0xC0000198L) +#endif + +#ifndef STATUS_NOLOGON_WORKSTATION_TRUST_ACCOUNT +# define STATUS_NOLOGON_WORKSTATION_TRUST_ACCOUNT ((NTSTATUS) 0xC0000199L) +#endif + +#ifndef STATUS_NOLOGON_SERVER_TRUST_ACCOUNT +# define STATUS_NOLOGON_SERVER_TRUST_ACCOUNT ((NTSTATUS) 0xC000019AL) +#endif + +#ifndef STATUS_DOMAIN_TRUST_INCONSISTENT +# define STATUS_DOMAIN_TRUST_INCONSISTENT ((NTSTATUS) 0xC000019BL) +#endif + +#ifndef STATUS_FS_DRIVER_REQUIRED +# define STATUS_FS_DRIVER_REQUIRED ((NTSTATUS) 0xC000019CL) +#endif + +#ifndef STATUS_IMAGE_ALREADY_LOADED_AS_DLL +# define STATUS_IMAGE_ALREADY_LOADED_AS_DLL ((NTSTATUS) 0xC000019DL) +#endif + +#ifndef STATUS_INCOMPATIBLE_WITH_GLOBAL_SHORT_NAME_REGISTRY_SETTING +# define STATUS_INCOMPATIBLE_WITH_GLOBAL_SHORT_NAME_REGISTRY_SETTING ((NTSTATUS) 0xC000019EL) +#endif + +#ifndef STATUS_SHORT_NAMES_NOT_ENABLED_ON_VOLUME +# define STATUS_SHORT_NAMES_NOT_ENABLED_ON_VOLUME ((NTSTATUS) 0xC000019FL) +#endif + +#ifndef STATUS_SECURITY_STREAM_IS_INCONSISTENT +# define STATUS_SECURITY_STREAM_IS_INCONSISTENT ((NTSTATUS) 0xC00001A0L) +#endif + +#ifndef STATUS_INVALID_LOCK_RANGE +# define STATUS_INVALID_LOCK_RANGE ((NTSTATUS) 0xC00001A1L) +#endif + +#ifndef STATUS_INVALID_ACE_CONDITION +# define STATUS_INVALID_ACE_CONDITION ((NTSTATUS) 0xC00001A2L) +#endif + +#ifndef STATUS_IMAGE_SUBSYSTEM_NOT_PRESENT +# define STATUS_IMAGE_SUBSYSTEM_NOT_PRESENT ((NTSTATUS) 0xC00001A3L) +#endif + +#ifndef STATUS_NOTIFICATION_GUID_ALREADY_DEFINED +# define STATUS_NOTIFICATION_GUID_ALREADY_DEFINED ((NTSTATUS) 0xC00001A4L) +#endif + +#ifndef STATUS_NETWORK_OPEN_RESTRICTION +# define STATUS_NETWORK_OPEN_RESTRICTION ((NTSTATUS) 0xC0000201L) +#endif + +#ifndef STATUS_NO_USER_SESSION_KEY +# define STATUS_NO_USER_SESSION_KEY ((NTSTATUS) 0xC0000202L) +#endif + +#ifndef STATUS_USER_SESSION_DELETED +# define STATUS_USER_SESSION_DELETED ((NTSTATUS) 0xC0000203L) +#endif + +#ifndef STATUS_RESOURCE_LANG_NOT_FOUND +# define STATUS_RESOURCE_LANG_NOT_FOUND ((NTSTATUS) 0xC0000204L) +#endif + +#ifndef STATUS_INSUFF_SERVER_RESOURCES +# define STATUS_INSUFF_SERVER_RESOURCES ((NTSTATUS) 0xC0000205L) +#endif + +#ifndef STATUS_INVALID_BUFFER_SIZE +# define STATUS_INVALID_BUFFER_SIZE ((NTSTATUS) 0xC0000206L) +#endif + +#ifndef STATUS_INVALID_ADDRESS_COMPONENT +# define STATUS_INVALID_ADDRESS_COMPONENT ((NTSTATUS) 0xC0000207L) +#endif + +#ifndef STATUS_INVALID_ADDRESS_WILDCARD +# define STATUS_INVALID_ADDRESS_WILDCARD ((NTSTATUS) 0xC0000208L) +#endif + +#ifndef STATUS_TOO_MANY_ADDRESSES +# define STATUS_TOO_MANY_ADDRESSES ((NTSTATUS) 0xC0000209L) +#endif + +#ifndef STATUS_ADDRESS_ALREADY_EXISTS +# define STATUS_ADDRESS_ALREADY_EXISTS ((NTSTATUS) 0xC000020AL) +#endif + +#ifndef STATUS_ADDRESS_CLOSED +# define STATUS_ADDRESS_CLOSED ((NTSTATUS) 0xC000020BL) +#endif + +#ifndef STATUS_CONNECTION_DISCONNECTED +# define STATUS_CONNECTION_DISCONNECTED ((NTSTATUS) 0xC000020CL) +#endif + +#ifndef STATUS_CONNECTION_RESET +# define STATUS_CONNECTION_RESET ((NTSTATUS) 0xC000020DL) +#endif + +#ifndef STATUS_TOO_MANY_NODES +# define STATUS_TOO_MANY_NODES ((NTSTATUS) 0xC000020EL) +#endif + +#ifndef STATUS_TRANSACTION_ABORTED +# define STATUS_TRANSACTION_ABORTED ((NTSTATUS) 0xC000020FL) +#endif + +#ifndef STATUS_TRANSACTION_TIMED_OUT +# define STATUS_TRANSACTION_TIMED_OUT ((NTSTATUS) 0xC0000210L) +#endif + +#ifndef STATUS_TRANSACTION_NO_RELEASE +# define STATUS_TRANSACTION_NO_RELEASE ((NTSTATUS) 0xC0000211L) +#endif + +#ifndef STATUS_TRANSACTION_NO_MATCH +# define STATUS_TRANSACTION_NO_MATCH ((NTSTATUS) 0xC0000212L) +#endif + +#ifndef STATUS_TRANSACTION_RESPONDED +# define STATUS_TRANSACTION_RESPONDED ((NTSTATUS) 0xC0000213L) +#endif + +#ifndef STATUS_TRANSACTION_INVALID_ID +# define STATUS_TRANSACTION_INVALID_ID ((NTSTATUS) 0xC0000214L) +#endif + +#ifndef STATUS_TRANSACTION_INVALID_TYPE +# define STATUS_TRANSACTION_INVALID_TYPE ((NTSTATUS) 0xC0000215L) +#endif + +#ifndef STATUS_NOT_SERVER_SESSION +# define STATUS_NOT_SERVER_SESSION ((NTSTATUS) 0xC0000216L) +#endif + +#ifndef STATUS_NOT_CLIENT_SESSION +# define STATUS_NOT_CLIENT_SESSION ((NTSTATUS) 0xC0000217L) +#endif + +#ifndef STATUS_CANNOT_LOAD_REGISTRY_FILE +# define STATUS_CANNOT_LOAD_REGISTRY_FILE ((NTSTATUS) 0xC0000218L) +#endif + +#ifndef STATUS_DEBUG_ATTACH_FAILED +# define STATUS_DEBUG_ATTACH_FAILED ((NTSTATUS) 0xC0000219L) +#endif + +#ifndef STATUS_SYSTEM_PROCESS_TERMINATED +# define STATUS_SYSTEM_PROCESS_TERMINATED ((NTSTATUS) 0xC000021AL) +#endif + +#ifndef STATUS_DATA_NOT_ACCEPTED +# define STATUS_DATA_NOT_ACCEPTED ((NTSTATUS) 0xC000021BL) +#endif + +#ifndef STATUS_NO_BROWSER_SERVERS_FOUND +# define STATUS_NO_BROWSER_SERVERS_FOUND ((NTSTATUS) 0xC000021CL) +#endif + +#ifndef STATUS_VDM_HARD_ERROR +# define STATUS_VDM_HARD_ERROR ((NTSTATUS) 0xC000021DL) +#endif + +#ifndef STATUS_DRIVER_CANCEL_TIMEOUT +# define STATUS_DRIVER_CANCEL_TIMEOUT ((NTSTATUS) 0xC000021EL) +#endif + +#ifndef STATUS_REPLY_MESSAGE_MISMATCH +# define STATUS_REPLY_MESSAGE_MISMATCH ((NTSTATUS) 0xC000021FL) +#endif + +#ifndef STATUS_MAPPED_ALIGNMENT +# define STATUS_MAPPED_ALIGNMENT ((NTSTATUS) 0xC0000220L) +#endif + +#ifndef STATUS_IMAGE_CHECKSUM_MISMATCH +# define STATUS_IMAGE_CHECKSUM_MISMATCH ((NTSTATUS) 0xC0000221L) +#endif + +#ifndef STATUS_LOST_WRITEBEHIND_DATA +# define STATUS_LOST_WRITEBEHIND_DATA ((NTSTATUS) 0xC0000222L) +#endif + +#ifndef STATUS_CLIENT_SERVER_PARAMETERS_INVALID +# define STATUS_CLIENT_SERVER_PARAMETERS_INVALID ((NTSTATUS) 0xC0000223L) +#endif + +#ifndef STATUS_PASSWORD_MUST_CHANGE +# define STATUS_PASSWORD_MUST_CHANGE ((NTSTATUS) 0xC0000224L) +#endif + +#ifndef STATUS_NOT_FOUND +# define STATUS_NOT_FOUND ((NTSTATUS) 0xC0000225L) +#endif + +#ifndef STATUS_NOT_TINY_STREAM +# define STATUS_NOT_TINY_STREAM ((NTSTATUS) 0xC0000226L) +#endif + +#ifndef STATUS_RECOVERY_FAILURE +# define STATUS_RECOVERY_FAILURE ((NTSTATUS) 0xC0000227L) +#endif + +#ifndef STATUS_STACK_OVERFLOW_READ +# define STATUS_STACK_OVERFLOW_READ ((NTSTATUS) 0xC0000228L) +#endif + +#ifndef STATUS_FAIL_CHECK +# define STATUS_FAIL_CHECK ((NTSTATUS) 0xC0000229L) +#endif + +#ifndef STATUS_DUPLICATE_OBJECTID +# define STATUS_DUPLICATE_OBJECTID ((NTSTATUS) 0xC000022AL) +#endif + +#ifndef STATUS_OBJECTID_EXISTS +# define STATUS_OBJECTID_EXISTS ((NTSTATUS) 0xC000022BL) +#endif + +#ifndef STATUS_CONVERT_TO_LARGE +# define STATUS_CONVERT_TO_LARGE ((NTSTATUS) 0xC000022CL) +#endif + +#ifndef STATUS_RETRY +# define STATUS_RETRY ((NTSTATUS) 0xC000022DL) +#endif + +#ifndef STATUS_FOUND_OUT_OF_SCOPE +# define STATUS_FOUND_OUT_OF_SCOPE ((NTSTATUS) 0xC000022EL) +#endif + +#ifndef STATUS_ALLOCATE_BUCKET +# define STATUS_ALLOCATE_BUCKET ((NTSTATUS) 0xC000022FL) +#endif + +#ifndef STATUS_PROPSET_NOT_FOUND +# define STATUS_PROPSET_NOT_FOUND ((NTSTATUS) 0xC0000230L) +#endif + +#ifndef STATUS_MARSHALL_OVERFLOW +# define STATUS_MARSHALL_OVERFLOW ((NTSTATUS) 0xC0000231L) +#endif + +#ifndef STATUS_INVALID_VARIANT +# define STATUS_INVALID_VARIANT ((NTSTATUS) 0xC0000232L) +#endif + +#ifndef STATUS_DOMAIN_CONTROLLER_NOT_FOUND +# define STATUS_DOMAIN_CONTROLLER_NOT_FOUND ((NTSTATUS) 0xC0000233L) +#endif + +#ifndef STATUS_ACCOUNT_LOCKED_OUT +# define STATUS_ACCOUNT_LOCKED_OUT ((NTSTATUS) 0xC0000234L) +#endif + +#ifndef STATUS_HANDLE_NOT_CLOSABLE +# define STATUS_HANDLE_NOT_CLOSABLE ((NTSTATUS) 0xC0000235L) +#endif + +#ifndef STATUS_CONNECTION_REFUSED +# define STATUS_CONNECTION_REFUSED ((NTSTATUS) 0xC0000236L) +#endif + +#ifndef STATUS_GRACEFUL_DISCONNECT +# define STATUS_GRACEFUL_DISCONNECT ((NTSTATUS) 0xC0000237L) +#endif + +#ifndef STATUS_ADDRESS_ALREADY_ASSOCIATED +# define STATUS_ADDRESS_ALREADY_ASSOCIATED ((NTSTATUS) 0xC0000238L) +#endif + +#ifndef STATUS_ADDRESS_NOT_ASSOCIATED +# define STATUS_ADDRESS_NOT_ASSOCIATED ((NTSTATUS) 0xC0000239L) +#endif + +#ifndef STATUS_CONNECTION_INVALID +# define STATUS_CONNECTION_INVALID ((NTSTATUS) 0xC000023AL) +#endif + +#ifndef STATUS_CONNECTION_ACTIVE +# define STATUS_CONNECTION_ACTIVE ((NTSTATUS) 0xC000023BL) +#endif + +#ifndef STATUS_NETWORK_UNREACHABLE +# define STATUS_NETWORK_UNREACHABLE ((NTSTATUS) 0xC000023CL) +#endif + +#ifndef STATUS_HOST_UNREACHABLE +# define STATUS_HOST_UNREACHABLE ((NTSTATUS) 0xC000023DL) +#endif + +#ifndef STATUS_PROTOCOL_UNREACHABLE +# define STATUS_PROTOCOL_UNREACHABLE ((NTSTATUS) 0xC000023EL) +#endif + +#ifndef STATUS_PORT_UNREACHABLE +# define STATUS_PORT_UNREACHABLE ((NTSTATUS) 0xC000023FL) +#endif + +#ifndef STATUS_REQUEST_ABORTED +# define STATUS_REQUEST_ABORTED ((NTSTATUS) 0xC0000240L) +#endif + +#ifndef STATUS_CONNECTION_ABORTED +# define STATUS_CONNECTION_ABORTED ((NTSTATUS) 0xC0000241L) +#endif + +#ifndef STATUS_BAD_COMPRESSION_BUFFER +# define STATUS_BAD_COMPRESSION_BUFFER ((NTSTATUS) 0xC0000242L) +#endif + +#ifndef STATUS_USER_MAPPED_FILE +# define STATUS_USER_MAPPED_FILE ((NTSTATUS) 0xC0000243L) +#endif + +#ifndef STATUS_AUDIT_FAILED +# define STATUS_AUDIT_FAILED ((NTSTATUS) 0xC0000244L) +#endif + +#ifndef STATUS_TIMER_RESOLUTION_NOT_SET +# define STATUS_TIMER_RESOLUTION_NOT_SET ((NTSTATUS) 0xC0000245L) +#endif + +#ifndef STATUS_CONNECTION_COUNT_LIMIT +# define STATUS_CONNECTION_COUNT_LIMIT ((NTSTATUS) 0xC0000246L) +#endif + +#ifndef STATUS_LOGIN_TIME_RESTRICTION +# define STATUS_LOGIN_TIME_RESTRICTION ((NTSTATUS) 0xC0000247L) +#endif + +#ifndef STATUS_LOGIN_WKSTA_RESTRICTION +# define STATUS_LOGIN_WKSTA_RESTRICTION ((NTSTATUS) 0xC0000248L) +#endif + +#ifndef STATUS_IMAGE_MP_UP_MISMATCH +# define STATUS_IMAGE_MP_UP_MISMATCH ((NTSTATUS) 0xC0000249L) +#endif + +#ifndef STATUS_INSUFFICIENT_LOGON_INFO +# define STATUS_INSUFFICIENT_LOGON_INFO ((NTSTATUS) 0xC0000250L) +#endif + +#ifndef STATUS_BAD_DLL_ENTRYPOINT +# define STATUS_BAD_DLL_ENTRYPOINT ((NTSTATUS) 0xC0000251L) +#endif + +#ifndef STATUS_BAD_SERVICE_ENTRYPOINT +# define STATUS_BAD_SERVICE_ENTRYPOINT ((NTSTATUS) 0xC0000252L) +#endif + +#ifndef STATUS_LPC_REPLY_LOST +# define STATUS_LPC_REPLY_LOST ((NTSTATUS) 0xC0000253L) +#endif + +#ifndef STATUS_IP_ADDRESS_CONFLICT1 +# define STATUS_IP_ADDRESS_CONFLICT1 ((NTSTATUS) 0xC0000254L) +#endif + +#ifndef STATUS_IP_ADDRESS_CONFLICT2 +# define STATUS_IP_ADDRESS_CONFLICT2 ((NTSTATUS) 0xC0000255L) +#endif + +#ifndef STATUS_REGISTRY_QUOTA_LIMIT +# define STATUS_REGISTRY_QUOTA_LIMIT ((NTSTATUS) 0xC0000256L) +#endif + +#ifndef STATUS_PATH_NOT_COVERED +# define STATUS_PATH_NOT_COVERED ((NTSTATUS) 0xC0000257L) +#endif + +#ifndef STATUS_NO_CALLBACK_ACTIVE +# define STATUS_NO_CALLBACK_ACTIVE ((NTSTATUS) 0xC0000258L) +#endif + +#ifndef STATUS_LICENSE_QUOTA_EXCEEDED +# define STATUS_LICENSE_QUOTA_EXCEEDED ((NTSTATUS) 0xC0000259L) +#endif + +#ifndef STATUS_PWD_TOO_SHORT +# define STATUS_PWD_TOO_SHORT ((NTSTATUS) 0xC000025AL) +#endif + +#ifndef STATUS_PWD_TOO_RECENT +# define STATUS_PWD_TOO_RECENT ((NTSTATUS) 0xC000025BL) +#endif + +#ifndef STATUS_PWD_HISTORY_CONFLICT +# define STATUS_PWD_HISTORY_CONFLICT ((NTSTATUS) 0xC000025CL) +#endif + +#ifndef STATUS_PLUGPLAY_NO_DEVICE +# define STATUS_PLUGPLAY_NO_DEVICE ((NTSTATUS) 0xC000025EL) +#endif + +#ifndef STATUS_UNSUPPORTED_COMPRESSION +# define STATUS_UNSUPPORTED_COMPRESSION ((NTSTATUS) 0xC000025FL) +#endif + +#ifndef STATUS_INVALID_HW_PROFILE +# define STATUS_INVALID_HW_PROFILE ((NTSTATUS) 0xC0000260L) +#endif + +#ifndef STATUS_INVALID_PLUGPLAY_DEVICE_PATH +# define STATUS_INVALID_PLUGPLAY_DEVICE_PATH ((NTSTATUS) 0xC0000261L) +#endif + +#ifndef STATUS_DRIVER_ORDINAL_NOT_FOUND +# define STATUS_DRIVER_ORDINAL_NOT_FOUND ((NTSTATUS) 0xC0000262L) +#endif + +#ifndef STATUS_DRIVER_ENTRYPOINT_NOT_FOUND +# define STATUS_DRIVER_ENTRYPOINT_NOT_FOUND ((NTSTATUS) 0xC0000263L) +#endif + +#ifndef STATUS_RESOURCE_NOT_OWNED +# define STATUS_RESOURCE_NOT_OWNED ((NTSTATUS) 0xC0000264L) +#endif + +#ifndef STATUS_TOO_MANY_LINKS +# define STATUS_TOO_MANY_LINKS ((NTSTATUS) 0xC0000265L) +#endif + +#ifndef STATUS_QUOTA_LIST_INCONSISTENT +# define STATUS_QUOTA_LIST_INCONSISTENT ((NTSTATUS) 0xC0000266L) +#endif + +#ifndef STATUS_FILE_IS_OFFLINE +# define STATUS_FILE_IS_OFFLINE ((NTSTATUS) 0xC0000267L) +#endif + +#ifndef STATUS_EVALUATION_EXPIRATION +# define STATUS_EVALUATION_EXPIRATION ((NTSTATUS) 0xC0000268L) +#endif + +#ifndef STATUS_ILLEGAL_DLL_RELOCATION +# define STATUS_ILLEGAL_DLL_RELOCATION ((NTSTATUS) 0xC0000269L) +#endif + +#ifndef STATUS_LICENSE_VIOLATION +# define STATUS_LICENSE_VIOLATION ((NTSTATUS) 0xC000026AL) +#endif + +#ifndef STATUS_DLL_INIT_FAILED_LOGOFF +# define STATUS_DLL_INIT_FAILED_LOGOFF ((NTSTATUS) 0xC000026BL) +#endif + +#ifndef STATUS_DRIVER_UNABLE_TO_LOAD +# define STATUS_DRIVER_UNABLE_TO_LOAD ((NTSTATUS) 0xC000026CL) +#endif + +#ifndef STATUS_DFS_UNAVAILABLE +# define STATUS_DFS_UNAVAILABLE ((NTSTATUS) 0xC000026DL) +#endif + +#ifndef STATUS_VOLUME_DISMOUNTED +# define STATUS_VOLUME_DISMOUNTED ((NTSTATUS) 0xC000026EL) +#endif + +#ifndef STATUS_WX86_INTERNAL_ERROR +# define STATUS_WX86_INTERNAL_ERROR ((NTSTATUS) 0xC000026FL) +#endif + +#ifndef STATUS_WX86_FLOAT_STACK_CHECK +# define STATUS_WX86_FLOAT_STACK_CHECK ((NTSTATUS) 0xC0000270L) +#endif + +#ifndef STATUS_VALIDATE_CONTINUE +# define STATUS_VALIDATE_CONTINUE ((NTSTATUS) 0xC0000271L) +#endif + +#ifndef STATUS_NO_MATCH +# define STATUS_NO_MATCH ((NTSTATUS) 0xC0000272L) +#endif + +#ifndef STATUS_NO_MORE_MATCHES +# define STATUS_NO_MORE_MATCHES ((NTSTATUS) 0xC0000273L) +#endif + +#ifndef STATUS_NOT_A_REPARSE_POINT +# define STATUS_NOT_A_REPARSE_POINT ((NTSTATUS) 0xC0000275L) +#endif + +#ifndef STATUS_IO_REPARSE_TAG_INVALID +# define STATUS_IO_REPARSE_TAG_INVALID ((NTSTATUS) 0xC0000276L) +#endif + +#ifndef STATUS_IO_REPARSE_TAG_MISMATCH +# define STATUS_IO_REPARSE_TAG_MISMATCH ((NTSTATUS) 0xC0000277L) +#endif + +#ifndef STATUS_IO_REPARSE_DATA_INVALID +# define STATUS_IO_REPARSE_DATA_INVALID ((NTSTATUS) 0xC0000278L) +#endif + +#ifndef STATUS_IO_REPARSE_TAG_NOT_HANDLED +# define STATUS_IO_REPARSE_TAG_NOT_HANDLED ((NTSTATUS) 0xC0000279L) +#endif + +#ifndef STATUS_REPARSE_POINT_NOT_RESOLVED +# define STATUS_REPARSE_POINT_NOT_RESOLVED ((NTSTATUS) 0xC0000280L) +#endif + +#ifndef STATUS_DIRECTORY_IS_A_REPARSE_POINT +# define STATUS_DIRECTORY_IS_A_REPARSE_POINT ((NTSTATUS) 0xC0000281L) +#endif + +#ifndef STATUS_RANGE_LIST_CONFLICT +# define STATUS_RANGE_LIST_CONFLICT ((NTSTATUS) 0xC0000282L) +#endif + +#ifndef STATUS_SOURCE_ELEMENT_EMPTY +# define STATUS_SOURCE_ELEMENT_EMPTY ((NTSTATUS) 0xC0000283L) +#endif + +#ifndef STATUS_DESTINATION_ELEMENT_FULL +# define STATUS_DESTINATION_ELEMENT_FULL ((NTSTATUS) 0xC0000284L) +#endif + +#ifndef STATUS_ILLEGAL_ELEMENT_ADDRESS +# define STATUS_ILLEGAL_ELEMENT_ADDRESS ((NTSTATUS) 0xC0000285L) +#endif + +#ifndef STATUS_MAGAZINE_NOT_PRESENT +# define STATUS_MAGAZINE_NOT_PRESENT ((NTSTATUS) 0xC0000286L) +#endif + +#ifndef STATUS_REINITIALIZATION_NEEDED +# define STATUS_REINITIALIZATION_NEEDED ((NTSTATUS) 0xC0000287L) +#endif + +#ifndef STATUS_DEVICE_REQUIRES_CLEANING +# define STATUS_DEVICE_REQUIRES_CLEANING ((NTSTATUS) 0x80000288L) +#endif + +#ifndef STATUS_DEVICE_DOOR_OPEN +# define STATUS_DEVICE_DOOR_OPEN ((NTSTATUS) 0x80000289L) +#endif + +#ifndef STATUS_ENCRYPTION_FAILED +# define STATUS_ENCRYPTION_FAILED ((NTSTATUS) 0xC000028AL) +#endif + +#ifndef STATUS_DECRYPTION_FAILED +# define STATUS_DECRYPTION_FAILED ((NTSTATUS) 0xC000028BL) +#endif + +#ifndef STATUS_RANGE_NOT_FOUND +# define STATUS_RANGE_NOT_FOUND ((NTSTATUS) 0xC000028CL) +#endif + +#ifndef STATUS_NO_RECOVERY_POLICY +# define STATUS_NO_RECOVERY_POLICY ((NTSTATUS) 0xC000028DL) +#endif + +#ifndef STATUS_NO_EFS +# define STATUS_NO_EFS ((NTSTATUS) 0xC000028EL) +#endif + +#ifndef STATUS_WRONG_EFS +# define STATUS_WRONG_EFS ((NTSTATUS) 0xC000028FL) +#endif + +#ifndef STATUS_NO_USER_KEYS +# define STATUS_NO_USER_KEYS ((NTSTATUS) 0xC0000290L) +#endif + +#ifndef STATUS_FILE_NOT_ENCRYPTED +# define STATUS_FILE_NOT_ENCRYPTED ((NTSTATUS) 0xC0000291L) +#endif + +#ifndef STATUS_NOT_EXPORT_FORMAT +# define STATUS_NOT_EXPORT_FORMAT ((NTSTATUS) 0xC0000292L) +#endif + +#ifndef STATUS_FILE_ENCRYPTED +# define STATUS_FILE_ENCRYPTED ((NTSTATUS) 0xC0000293L) +#endif + +#ifndef STATUS_WAKE_SYSTEM +# define STATUS_WAKE_SYSTEM ((NTSTATUS) 0x40000294L) +#endif + +#ifndef STATUS_WMI_GUID_NOT_FOUND +# define STATUS_WMI_GUID_NOT_FOUND ((NTSTATUS) 0xC0000295L) +#endif + +#ifndef STATUS_WMI_INSTANCE_NOT_FOUND +# define STATUS_WMI_INSTANCE_NOT_FOUND ((NTSTATUS) 0xC0000296L) +#endif + +#ifndef STATUS_WMI_ITEMID_NOT_FOUND +# define STATUS_WMI_ITEMID_NOT_FOUND ((NTSTATUS) 0xC0000297L) +#endif + +#ifndef STATUS_WMI_TRY_AGAIN +# define STATUS_WMI_TRY_AGAIN ((NTSTATUS) 0xC0000298L) +#endif + +#ifndef STATUS_SHARED_POLICY +# define STATUS_SHARED_POLICY ((NTSTATUS) 0xC0000299L) +#endif + +#ifndef STATUS_POLICY_OBJECT_NOT_FOUND +# define STATUS_POLICY_OBJECT_NOT_FOUND ((NTSTATUS) 0xC000029AL) +#endif + +#ifndef STATUS_POLICY_ONLY_IN_DS +# define STATUS_POLICY_ONLY_IN_DS ((NTSTATUS) 0xC000029BL) +#endif + +#ifndef STATUS_VOLUME_NOT_UPGRADED +# define STATUS_VOLUME_NOT_UPGRADED ((NTSTATUS) 0xC000029CL) +#endif + +#ifndef STATUS_REMOTE_STORAGE_NOT_ACTIVE +# define STATUS_REMOTE_STORAGE_NOT_ACTIVE ((NTSTATUS) 0xC000029DL) +#endif + +#ifndef STATUS_REMOTE_STORAGE_MEDIA_ERROR +# define STATUS_REMOTE_STORAGE_MEDIA_ERROR ((NTSTATUS) 0xC000029EL) +#endif + +#ifndef STATUS_NO_TRACKING_SERVICE +# define STATUS_NO_TRACKING_SERVICE ((NTSTATUS) 0xC000029FL) +#endif + +#ifndef STATUS_SERVER_SID_MISMATCH +# define STATUS_SERVER_SID_MISMATCH ((NTSTATUS) 0xC00002A0L) +#endif + +#ifndef STATUS_DS_NO_ATTRIBUTE_OR_VALUE +# define STATUS_DS_NO_ATTRIBUTE_OR_VALUE ((NTSTATUS) 0xC00002A1L) +#endif + +#ifndef STATUS_DS_INVALID_ATTRIBUTE_SYNTAX +# define STATUS_DS_INVALID_ATTRIBUTE_SYNTAX ((NTSTATUS) 0xC00002A2L) +#endif + +#ifndef STATUS_DS_ATTRIBUTE_TYPE_UNDEFINED +# define STATUS_DS_ATTRIBUTE_TYPE_UNDEFINED ((NTSTATUS) 0xC00002A3L) +#endif + +#ifndef STATUS_DS_ATTRIBUTE_OR_VALUE_EXISTS +# define STATUS_DS_ATTRIBUTE_OR_VALUE_EXISTS ((NTSTATUS) 0xC00002A4L) +#endif + +#ifndef STATUS_DS_BUSY +# define STATUS_DS_BUSY ((NTSTATUS) 0xC00002A5L) +#endif + +#ifndef STATUS_DS_UNAVAILABLE +# define STATUS_DS_UNAVAILABLE ((NTSTATUS) 0xC00002A6L) +#endif + +#ifndef STATUS_DS_NO_RIDS_ALLOCATED +# define STATUS_DS_NO_RIDS_ALLOCATED ((NTSTATUS) 0xC00002A7L) +#endif + +#ifndef STATUS_DS_NO_MORE_RIDS +# define STATUS_DS_NO_MORE_RIDS ((NTSTATUS) 0xC00002A8L) +#endif + +#ifndef STATUS_DS_INCORRECT_ROLE_OWNER +# define STATUS_DS_INCORRECT_ROLE_OWNER ((NTSTATUS) 0xC00002A9L) +#endif + +#ifndef STATUS_DS_RIDMGR_INIT_ERROR +# define STATUS_DS_RIDMGR_INIT_ERROR ((NTSTATUS) 0xC00002AAL) +#endif + +#ifndef STATUS_DS_OBJ_CLASS_VIOLATION +# define STATUS_DS_OBJ_CLASS_VIOLATION ((NTSTATUS) 0xC00002ABL) +#endif + +#ifndef STATUS_DS_CANT_ON_NON_LEAF +# define STATUS_DS_CANT_ON_NON_LEAF ((NTSTATUS) 0xC00002ACL) +#endif + +#ifndef STATUS_DS_CANT_ON_RDN +# define STATUS_DS_CANT_ON_RDN ((NTSTATUS) 0xC00002ADL) +#endif + +#ifndef STATUS_DS_CANT_MOD_OBJ_CLASS +# define STATUS_DS_CANT_MOD_OBJ_CLASS ((NTSTATUS) 0xC00002AEL) +#endif + +#ifndef STATUS_DS_CROSS_DOM_MOVE_FAILED +# define STATUS_DS_CROSS_DOM_MOVE_FAILED ((NTSTATUS) 0xC00002AFL) +#endif + +#ifndef STATUS_DS_GC_NOT_AVAILABLE +# define STATUS_DS_GC_NOT_AVAILABLE ((NTSTATUS) 0xC00002B0L) +#endif + +#ifndef STATUS_DIRECTORY_SERVICE_REQUIRED +# define STATUS_DIRECTORY_SERVICE_REQUIRED ((NTSTATUS) 0xC00002B1L) +#endif + +#ifndef STATUS_REPARSE_ATTRIBUTE_CONFLICT +# define STATUS_REPARSE_ATTRIBUTE_CONFLICT ((NTSTATUS) 0xC00002B2L) +#endif + +#ifndef STATUS_CANT_ENABLE_DENY_ONLY +# define STATUS_CANT_ENABLE_DENY_ONLY ((NTSTATUS) 0xC00002B3L) +#endif + +#ifndef STATUS_FLOAT_MULTIPLE_FAULTS +# define STATUS_FLOAT_MULTIPLE_FAULTS ((NTSTATUS) 0xC00002B4L) +#endif + +#ifndef STATUS_FLOAT_MULTIPLE_TRAPS +# define STATUS_FLOAT_MULTIPLE_TRAPS ((NTSTATUS) 0xC00002B5L) +#endif + +#ifndef STATUS_DEVICE_REMOVED +# define STATUS_DEVICE_REMOVED ((NTSTATUS) 0xC00002B6L) +#endif + +#ifndef STATUS_JOURNAL_DELETE_IN_PROGRESS +# define STATUS_JOURNAL_DELETE_IN_PROGRESS ((NTSTATUS) 0xC00002B7L) +#endif + +#ifndef STATUS_JOURNAL_NOT_ACTIVE +# define STATUS_JOURNAL_NOT_ACTIVE ((NTSTATUS) 0xC00002B8L) +#endif + +#ifndef STATUS_NOINTERFACE +# define STATUS_NOINTERFACE ((NTSTATUS) 0xC00002B9L) +#endif + +#ifndef STATUS_DS_ADMIN_LIMIT_EXCEEDED +# define STATUS_DS_ADMIN_LIMIT_EXCEEDED ((NTSTATUS) 0xC00002C1L) +#endif + +#ifndef STATUS_DRIVER_FAILED_SLEEP +# define STATUS_DRIVER_FAILED_SLEEP ((NTSTATUS) 0xC00002C2L) +#endif + +#ifndef STATUS_MUTUAL_AUTHENTICATION_FAILED +# define STATUS_MUTUAL_AUTHENTICATION_FAILED ((NTSTATUS) 0xC00002C3L) +#endif + +#ifndef STATUS_CORRUPT_SYSTEM_FILE +# define STATUS_CORRUPT_SYSTEM_FILE ((NTSTATUS) 0xC00002C4L) +#endif + +#ifndef STATUS_DATATYPE_MISALIGNMENT_ERROR +# define STATUS_DATATYPE_MISALIGNMENT_ERROR ((NTSTATUS) 0xC00002C5L) +#endif + +#ifndef STATUS_WMI_READ_ONLY +# define STATUS_WMI_READ_ONLY ((NTSTATUS) 0xC00002C6L) +#endif + +#ifndef STATUS_WMI_SET_FAILURE +# define STATUS_WMI_SET_FAILURE ((NTSTATUS) 0xC00002C7L) +#endif + +#ifndef STATUS_COMMITMENT_MINIMUM +# define STATUS_COMMITMENT_MINIMUM ((NTSTATUS) 0xC00002C8L) +#endif + +#ifndef STATUS_REG_NAT_CONSUMPTION +# define STATUS_REG_NAT_CONSUMPTION ((NTSTATUS) 0xC00002C9L) +#endif + +#ifndef STATUS_TRANSPORT_FULL +# define STATUS_TRANSPORT_FULL ((NTSTATUS) 0xC00002CAL) +#endif + +#ifndef STATUS_DS_SAM_INIT_FAILURE +# define STATUS_DS_SAM_INIT_FAILURE ((NTSTATUS) 0xC00002CBL) +#endif + +#ifndef STATUS_ONLY_IF_CONNECTED +# define STATUS_ONLY_IF_CONNECTED ((NTSTATUS) 0xC00002CCL) +#endif + +#ifndef STATUS_DS_SENSITIVE_GROUP_VIOLATION +# define STATUS_DS_SENSITIVE_GROUP_VIOLATION ((NTSTATUS) 0xC00002CDL) +#endif + +#ifndef STATUS_PNP_RESTART_ENUMERATION +# define STATUS_PNP_RESTART_ENUMERATION ((NTSTATUS) 0xC00002CEL) +#endif + +#ifndef STATUS_JOURNAL_ENTRY_DELETED +# define STATUS_JOURNAL_ENTRY_DELETED ((NTSTATUS) 0xC00002CFL) +#endif + +#ifndef STATUS_DS_CANT_MOD_PRIMARYGROUPID +# define STATUS_DS_CANT_MOD_PRIMARYGROUPID ((NTSTATUS) 0xC00002D0L) +#endif + +#ifndef STATUS_SYSTEM_IMAGE_BAD_SIGNATURE +# define STATUS_SYSTEM_IMAGE_BAD_SIGNATURE ((NTSTATUS) 0xC00002D1L) +#endif + +#ifndef STATUS_PNP_REBOOT_REQUIRED +# define STATUS_PNP_REBOOT_REQUIRED ((NTSTATUS) 0xC00002D2L) +#endif + +#ifndef STATUS_POWER_STATE_INVALID +# define STATUS_POWER_STATE_INVALID ((NTSTATUS) 0xC00002D3L) +#endif + +#ifndef STATUS_DS_INVALID_GROUP_TYPE +# define STATUS_DS_INVALID_GROUP_TYPE ((NTSTATUS) 0xC00002D4L) +#endif + +#ifndef STATUS_DS_NO_NEST_GLOBALGROUP_IN_MIXEDDOMAIN +# define STATUS_DS_NO_NEST_GLOBALGROUP_IN_MIXEDDOMAIN ((NTSTATUS) 0xC00002D5L) +#endif + +#ifndef STATUS_DS_NO_NEST_LOCALGROUP_IN_MIXEDDOMAIN +# define STATUS_DS_NO_NEST_LOCALGROUP_IN_MIXEDDOMAIN ((NTSTATUS) 0xC00002D6L) +#endif + +#ifndef STATUS_DS_GLOBAL_CANT_HAVE_LOCAL_MEMBER +# define STATUS_DS_GLOBAL_CANT_HAVE_LOCAL_MEMBER ((NTSTATUS) 0xC00002D7L) +#endif + +#ifndef STATUS_DS_GLOBAL_CANT_HAVE_UNIVERSAL_MEMBER +# define STATUS_DS_GLOBAL_CANT_HAVE_UNIVERSAL_MEMBER ((NTSTATUS) 0xC00002D8L) +#endif + +#ifndef STATUS_DS_UNIVERSAL_CANT_HAVE_LOCAL_MEMBER +# define STATUS_DS_UNIVERSAL_CANT_HAVE_LOCAL_MEMBER ((NTSTATUS) 0xC00002D9L) +#endif + +#ifndef STATUS_DS_GLOBAL_CANT_HAVE_CROSSDOMAIN_MEMBER +# define STATUS_DS_GLOBAL_CANT_HAVE_CROSSDOMAIN_MEMBER ((NTSTATUS) 0xC00002DAL) +#endif + +#ifndef STATUS_DS_LOCAL_CANT_HAVE_CROSSDOMAIN_LOCAL_MEMBER +# define STATUS_DS_LOCAL_CANT_HAVE_CROSSDOMAIN_LOCAL_MEMBER ((NTSTATUS) 0xC00002DBL) +#endif + +#ifndef STATUS_DS_HAVE_PRIMARY_MEMBERS +# define STATUS_DS_HAVE_PRIMARY_MEMBERS ((NTSTATUS) 0xC00002DCL) +#endif + +#ifndef STATUS_WMI_NOT_SUPPORTED +# define STATUS_WMI_NOT_SUPPORTED ((NTSTATUS) 0xC00002DDL) +#endif + +#ifndef STATUS_INSUFFICIENT_POWER +# define STATUS_INSUFFICIENT_POWER ((NTSTATUS) 0xC00002DEL) +#endif + +#ifndef STATUS_SAM_NEED_BOOTKEY_PASSWORD +# define STATUS_SAM_NEED_BOOTKEY_PASSWORD ((NTSTATUS) 0xC00002DFL) +#endif + +#ifndef STATUS_SAM_NEED_BOOTKEY_FLOPPY +# define STATUS_SAM_NEED_BOOTKEY_FLOPPY ((NTSTATUS) 0xC00002E0L) +#endif + +#ifndef STATUS_DS_CANT_START +# define STATUS_DS_CANT_START ((NTSTATUS) 0xC00002E1L) +#endif + +#ifndef STATUS_DS_INIT_FAILURE +# define STATUS_DS_INIT_FAILURE ((NTSTATUS) 0xC00002E2L) +#endif + +#ifndef STATUS_SAM_INIT_FAILURE +# define STATUS_SAM_INIT_FAILURE ((NTSTATUS) 0xC00002E3L) +#endif + +#ifndef STATUS_DS_GC_REQUIRED +# define STATUS_DS_GC_REQUIRED ((NTSTATUS) 0xC00002E4L) +#endif + +#ifndef STATUS_DS_LOCAL_MEMBER_OF_LOCAL_ONLY +# define STATUS_DS_LOCAL_MEMBER_OF_LOCAL_ONLY ((NTSTATUS) 0xC00002E5L) +#endif + +#ifndef STATUS_DS_NO_FPO_IN_UNIVERSAL_GROUPS +# define STATUS_DS_NO_FPO_IN_UNIVERSAL_GROUPS ((NTSTATUS) 0xC00002E6L) +#endif + +#ifndef STATUS_DS_MACHINE_ACCOUNT_QUOTA_EXCEEDED +# define STATUS_DS_MACHINE_ACCOUNT_QUOTA_EXCEEDED ((NTSTATUS) 0xC00002E7L) +#endif + +#ifndef STATUS_MULTIPLE_FAULT_VIOLATION +# define STATUS_MULTIPLE_FAULT_VIOLATION ((NTSTATUS) 0xC00002E8L) +#endif + +#ifndef STATUS_CURRENT_DOMAIN_NOT_ALLOWED +# define STATUS_CURRENT_DOMAIN_NOT_ALLOWED ((NTSTATUS) 0xC00002E9L) +#endif + +#ifndef STATUS_CANNOT_MAKE +# define STATUS_CANNOT_MAKE ((NTSTATUS) 0xC00002EAL) +#endif + +#ifndef STATUS_SYSTEM_SHUTDOWN +# define STATUS_SYSTEM_SHUTDOWN ((NTSTATUS) 0xC00002EBL) +#endif + +#ifndef STATUS_DS_INIT_FAILURE_CONSOLE +# define STATUS_DS_INIT_FAILURE_CONSOLE ((NTSTATUS) 0xC00002ECL) +#endif + +#ifndef STATUS_DS_SAM_INIT_FAILURE_CONSOLE +# define STATUS_DS_SAM_INIT_FAILURE_CONSOLE ((NTSTATUS) 0xC00002EDL) +#endif + +#ifndef STATUS_UNFINISHED_CONTEXT_DELETED +# define STATUS_UNFINISHED_CONTEXT_DELETED ((NTSTATUS) 0xC00002EEL) +#endif + +#ifndef STATUS_NO_TGT_REPLY +# define STATUS_NO_TGT_REPLY ((NTSTATUS) 0xC00002EFL) +#endif + +#ifndef STATUS_OBJECTID_NOT_FOUND +# define STATUS_OBJECTID_NOT_FOUND ((NTSTATUS) 0xC00002F0L) +#endif + +#ifndef STATUS_NO_IP_ADDRESSES +# define STATUS_NO_IP_ADDRESSES ((NTSTATUS) 0xC00002F1L) +#endif + +#ifndef STATUS_WRONG_CREDENTIAL_HANDLE +# define STATUS_WRONG_CREDENTIAL_HANDLE ((NTSTATUS) 0xC00002F2L) +#endif + +#ifndef STATUS_CRYPTO_SYSTEM_INVALID +# define STATUS_CRYPTO_SYSTEM_INVALID ((NTSTATUS) 0xC00002F3L) +#endif + +#ifndef STATUS_MAX_REFERRALS_EXCEEDED +# define STATUS_MAX_REFERRALS_EXCEEDED ((NTSTATUS) 0xC00002F4L) +#endif + +#ifndef STATUS_MUST_BE_KDC +# define STATUS_MUST_BE_KDC ((NTSTATUS) 0xC00002F5L) +#endif + +#ifndef STATUS_STRONG_CRYPTO_NOT_SUPPORTED +# define STATUS_STRONG_CRYPTO_NOT_SUPPORTED ((NTSTATUS) 0xC00002F6L) +#endif + +#ifndef STATUS_TOO_MANY_PRINCIPALS +# define STATUS_TOO_MANY_PRINCIPALS ((NTSTATUS) 0xC00002F7L) +#endif + +#ifndef STATUS_NO_PA_DATA +# define STATUS_NO_PA_DATA ((NTSTATUS) 0xC00002F8L) +#endif + +#ifndef STATUS_PKINIT_NAME_MISMATCH +# define STATUS_PKINIT_NAME_MISMATCH ((NTSTATUS) 0xC00002F9L) +#endif + +#ifndef STATUS_SMARTCARD_LOGON_REQUIRED +# define STATUS_SMARTCARD_LOGON_REQUIRED ((NTSTATUS) 0xC00002FAL) +#endif + +#ifndef STATUS_KDC_INVALID_REQUEST +# define STATUS_KDC_INVALID_REQUEST ((NTSTATUS) 0xC00002FBL) +#endif + +#ifndef STATUS_KDC_UNABLE_TO_REFER +# define STATUS_KDC_UNABLE_TO_REFER ((NTSTATUS) 0xC00002FCL) +#endif + +#ifndef STATUS_KDC_UNKNOWN_ETYPE +# define STATUS_KDC_UNKNOWN_ETYPE ((NTSTATUS) 0xC00002FDL) +#endif + +#ifndef STATUS_SHUTDOWN_IN_PROGRESS +# define STATUS_SHUTDOWN_IN_PROGRESS ((NTSTATUS) 0xC00002FEL) +#endif + +#ifndef STATUS_SERVER_SHUTDOWN_IN_PROGRESS +# define STATUS_SERVER_SHUTDOWN_IN_PROGRESS ((NTSTATUS) 0xC00002FFL) +#endif + +#ifndef STATUS_NOT_SUPPORTED_ON_SBS +# define STATUS_NOT_SUPPORTED_ON_SBS ((NTSTATUS) 0xC0000300L) +#endif + +#ifndef STATUS_WMI_GUID_DISCONNECTED +# define STATUS_WMI_GUID_DISCONNECTED ((NTSTATUS) 0xC0000301L) +#endif + +#ifndef STATUS_WMI_ALREADY_DISABLED +# define STATUS_WMI_ALREADY_DISABLED ((NTSTATUS) 0xC0000302L) +#endif + +#ifndef STATUS_WMI_ALREADY_ENABLED +# define STATUS_WMI_ALREADY_ENABLED ((NTSTATUS) 0xC0000303L) +#endif + +#ifndef STATUS_MFT_TOO_FRAGMENTED +# define STATUS_MFT_TOO_FRAGMENTED ((NTSTATUS) 0xC0000304L) +#endif + +#ifndef STATUS_COPY_PROTECTION_FAILURE +# define STATUS_COPY_PROTECTION_FAILURE ((NTSTATUS) 0xC0000305L) +#endif + +#ifndef STATUS_CSS_AUTHENTICATION_FAILURE +# define STATUS_CSS_AUTHENTICATION_FAILURE ((NTSTATUS) 0xC0000306L) +#endif + +#ifndef STATUS_CSS_KEY_NOT_PRESENT +# define STATUS_CSS_KEY_NOT_PRESENT ((NTSTATUS) 0xC0000307L) +#endif + +#ifndef STATUS_CSS_KEY_NOT_ESTABLISHED +# define STATUS_CSS_KEY_NOT_ESTABLISHED ((NTSTATUS) 0xC0000308L) +#endif + +#ifndef STATUS_CSS_SCRAMBLED_SECTOR +# define STATUS_CSS_SCRAMBLED_SECTOR ((NTSTATUS) 0xC0000309L) +#endif + +#ifndef STATUS_CSS_REGION_MISMATCH +# define STATUS_CSS_REGION_MISMATCH ((NTSTATUS) 0xC000030AL) +#endif + +#ifndef STATUS_CSS_RESETS_EXHAUSTED +# define STATUS_CSS_RESETS_EXHAUSTED ((NTSTATUS) 0xC000030BL) +#endif + +#ifndef STATUS_PKINIT_FAILURE +# define STATUS_PKINIT_FAILURE ((NTSTATUS) 0xC0000320L) +#endif + +#ifndef STATUS_SMARTCARD_SUBSYSTEM_FAILURE +# define STATUS_SMARTCARD_SUBSYSTEM_FAILURE ((NTSTATUS) 0xC0000321L) +#endif + +#ifndef STATUS_NO_KERB_KEY +# define STATUS_NO_KERB_KEY ((NTSTATUS) 0xC0000322L) +#endif + +#ifndef STATUS_HOST_DOWN +# define STATUS_HOST_DOWN ((NTSTATUS) 0xC0000350L) +#endif + +#ifndef STATUS_UNSUPPORTED_PREAUTH +# define STATUS_UNSUPPORTED_PREAUTH ((NTSTATUS) 0xC0000351L) +#endif + +#ifndef STATUS_EFS_ALG_BLOB_TOO_BIG +# define STATUS_EFS_ALG_BLOB_TOO_BIG ((NTSTATUS) 0xC0000352L) +#endif + +#ifndef STATUS_PORT_NOT_SET +# define STATUS_PORT_NOT_SET ((NTSTATUS) 0xC0000353L) +#endif + +#ifndef STATUS_DEBUGGER_INACTIVE +# define STATUS_DEBUGGER_INACTIVE ((NTSTATUS) 0xC0000354L) +#endif + +#ifndef STATUS_DS_VERSION_CHECK_FAILURE +# define STATUS_DS_VERSION_CHECK_FAILURE ((NTSTATUS) 0xC0000355L) +#endif + +#ifndef STATUS_AUDITING_DISABLED +# define STATUS_AUDITING_DISABLED ((NTSTATUS) 0xC0000356L) +#endif + +#ifndef STATUS_PRENT4_MACHINE_ACCOUNT +# define STATUS_PRENT4_MACHINE_ACCOUNT ((NTSTATUS) 0xC0000357L) +#endif + +#ifndef STATUS_DS_AG_CANT_HAVE_UNIVERSAL_MEMBER +# define STATUS_DS_AG_CANT_HAVE_UNIVERSAL_MEMBER ((NTSTATUS) 0xC0000358L) +#endif + +#ifndef STATUS_INVALID_IMAGE_WIN_32 +# define STATUS_INVALID_IMAGE_WIN_32 ((NTSTATUS) 0xC0000359L) +#endif + +#ifndef STATUS_INVALID_IMAGE_WIN_64 +# define STATUS_INVALID_IMAGE_WIN_64 ((NTSTATUS) 0xC000035AL) +#endif + +#ifndef STATUS_BAD_BINDINGS +# define STATUS_BAD_BINDINGS ((NTSTATUS) 0xC000035BL) +#endif + +#ifndef STATUS_NETWORK_SESSION_EXPIRED +# define STATUS_NETWORK_SESSION_EXPIRED ((NTSTATUS) 0xC000035CL) +#endif + +#ifndef STATUS_APPHELP_BLOCK +# define STATUS_APPHELP_BLOCK ((NTSTATUS) 0xC000035DL) +#endif + +#ifndef STATUS_ALL_SIDS_FILTERED +# define STATUS_ALL_SIDS_FILTERED ((NTSTATUS) 0xC000035EL) +#endif + +#ifndef STATUS_NOT_SAFE_MODE_DRIVER +# define STATUS_NOT_SAFE_MODE_DRIVER ((NTSTATUS) 0xC000035FL) +#endif + +#ifndef STATUS_ACCESS_DISABLED_BY_POLICY_DEFAULT +# define STATUS_ACCESS_DISABLED_BY_POLICY_DEFAULT ((NTSTATUS) 0xC0000361L) +#endif + +#ifndef STATUS_ACCESS_DISABLED_BY_POLICY_PATH +# define STATUS_ACCESS_DISABLED_BY_POLICY_PATH ((NTSTATUS) 0xC0000362L) +#endif + +#ifndef STATUS_ACCESS_DISABLED_BY_POLICY_PUBLISHER +# define STATUS_ACCESS_DISABLED_BY_POLICY_PUBLISHER ((NTSTATUS) 0xC0000363L) +#endif + +#ifndef STATUS_ACCESS_DISABLED_BY_POLICY_OTHER +# define STATUS_ACCESS_DISABLED_BY_POLICY_OTHER ((NTSTATUS) 0xC0000364L) +#endif + +#ifndef STATUS_FAILED_DRIVER_ENTRY +# define STATUS_FAILED_DRIVER_ENTRY ((NTSTATUS) 0xC0000365L) +#endif + +#ifndef STATUS_DEVICE_ENUMERATION_ERROR +# define STATUS_DEVICE_ENUMERATION_ERROR ((NTSTATUS) 0xC0000366L) +#endif + +#ifndef STATUS_MOUNT_POINT_NOT_RESOLVED +# define STATUS_MOUNT_POINT_NOT_RESOLVED ((NTSTATUS) 0xC0000368L) +#endif + +#ifndef STATUS_INVALID_DEVICE_OBJECT_PARAMETER +# define STATUS_INVALID_DEVICE_OBJECT_PARAMETER ((NTSTATUS) 0xC0000369L) +#endif + +#ifndef STATUS_MCA_OCCURED +# define STATUS_MCA_OCCURED ((NTSTATUS) 0xC000036AL) +#endif + +#ifndef STATUS_DRIVER_BLOCKED_CRITICAL +# define STATUS_DRIVER_BLOCKED_CRITICAL ((NTSTATUS) 0xC000036BL) +#endif + +#ifndef STATUS_DRIVER_BLOCKED +# define STATUS_DRIVER_BLOCKED ((NTSTATUS) 0xC000036CL) +#endif + +#ifndef STATUS_DRIVER_DATABASE_ERROR +# define STATUS_DRIVER_DATABASE_ERROR ((NTSTATUS) 0xC000036DL) +#endif + +#ifndef STATUS_SYSTEM_HIVE_TOO_LARGE +# define STATUS_SYSTEM_HIVE_TOO_LARGE ((NTSTATUS) 0xC000036EL) +#endif + +#ifndef STATUS_INVALID_IMPORT_OF_NON_DLL +# define STATUS_INVALID_IMPORT_OF_NON_DLL ((NTSTATUS) 0xC000036FL) +#endif + +#ifndef STATUS_DS_SHUTTING_DOWN +# define STATUS_DS_SHUTTING_DOWN ((NTSTATUS) 0x40000370L) +#endif + +#ifndef STATUS_NO_SECRETS +# define STATUS_NO_SECRETS ((NTSTATUS) 0xC0000371L) +#endif + +#ifndef STATUS_ACCESS_DISABLED_NO_SAFER_UI_BY_POLICY +# define STATUS_ACCESS_DISABLED_NO_SAFER_UI_BY_POLICY ((NTSTATUS) 0xC0000372L) +#endif + +#ifndef STATUS_FAILED_STACK_SWITCH +# define STATUS_FAILED_STACK_SWITCH ((NTSTATUS) 0xC0000373L) +#endif + +#ifndef STATUS_HEAP_CORRUPTION +# define STATUS_HEAP_CORRUPTION ((NTSTATUS) 0xC0000374L) +#endif + +#ifndef STATUS_SMARTCARD_WRONG_PIN +# define STATUS_SMARTCARD_WRONG_PIN ((NTSTATUS) 0xC0000380L) +#endif + +#ifndef STATUS_SMARTCARD_CARD_BLOCKED +# define STATUS_SMARTCARD_CARD_BLOCKED ((NTSTATUS) 0xC0000381L) +#endif + +#ifndef STATUS_SMARTCARD_CARD_NOT_AUTHENTICATED +# define STATUS_SMARTCARD_CARD_NOT_AUTHENTICATED ((NTSTATUS) 0xC0000382L) +#endif + +#ifndef STATUS_SMARTCARD_NO_CARD +# define STATUS_SMARTCARD_NO_CARD ((NTSTATUS) 0xC0000383L) +#endif + +#ifndef STATUS_SMARTCARD_NO_KEY_CONTAINER +# define STATUS_SMARTCARD_NO_KEY_CONTAINER ((NTSTATUS) 0xC0000384L) +#endif + +#ifndef STATUS_SMARTCARD_NO_CERTIFICATE +# define STATUS_SMARTCARD_NO_CERTIFICATE ((NTSTATUS) 0xC0000385L) +#endif + +#ifndef STATUS_SMARTCARD_NO_KEYSET +# define STATUS_SMARTCARD_NO_KEYSET ((NTSTATUS) 0xC0000386L) +#endif + +#ifndef STATUS_SMARTCARD_IO_ERROR +# define STATUS_SMARTCARD_IO_ERROR ((NTSTATUS) 0xC0000387L) +#endif + +#ifndef STATUS_DOWNGRADE_DETECTED +# define STATUS_DOWNGRADE_DETECTED ((NTSTATUS) 0xC0000388L) +#endif + +#ifndef STATUS_SMARTCARD_CERT_REVOKED +# define STATUS_SMARTCARD_CERT_REVOKED ((NTSTATUS) 0xC0000389L) +#endif + +#ifndef STATUS_ISSUING_CA_UNTRUSTED +# define STATUS_ISSUING_CA_UNTRUSTED ((NTSTATUS) 0xC000038AL) +#endif + +#ifndef STATUS_REVOCATION_OFFLINE_C +# define STATUS_REVOCATION_OFFLINE_C ((NTSTATUS) 0xC000038BL) +#endif + +#ifndef STATUS_PKINIT_CLIENT_FAILURE +# define STATUS_PKINIT_CLIENT_FAILURE ((NTSTATUS) 0xC000038CL) +#endif + +#ifndef STATUS_SMARTCARD_CERT_EXPIRED +# define STATUS_SMARTCARD_CERT_EXPIRED ((NTSTATUS) 0xC000038DL) +#endif + +#ifndef STATUS_DRIVER_FAILED_PRIOR_UNLOAD +# define STATUS_DRIVER_FAILED_PRIOR_UNLOAD ((NTSTATUS) 0xC000038EL) +#endif + +#ifndef STATUS_SMARTCARD_SILENT_CONTEXT +# define STATUS_SMARTCARD_SILENT_CONTEXT ((NTSTATUS) 0xC000038FL) +#endif + +#ifndef STATUS_PER_USER_TRUST_QUOTA_EXCEEDED +# define STATUS_PER_USER_TRUST_QUOTA_EXCEEDED ((NTSTATUS) 0xC0000401L) +#endif + +#ifndef STATUS_ALL_USER_TRUST_QUOTA_EXCEEDED +# define STATUS_ALL_USER_TRUST_QUOTA_EXCEEDED ((NTSTATUS) 0xC0000402L) +#endif + +#ifndef STATUS_USER_DELETE_TRUST_QUOTA_EXCEEDED +# define STATUS_USER_DELETE_TRUST_QUOTA_EXCEEDED ((NTSTATUS) 0xC0000403L) +#endif + +#ifndef STATUS_DS_NAME_NOT_UNIQUE +# define STATUS_DS_NAME_NOT_UNIQUE ((NTSTATUS) 0xC0000404L) +#endif + +#ifndef STATUS_DS_DUPLICATE_ID_FOUND +# define STATUS_DS_DUPLICATE_ID_FOUND ((NTSTATUS) 0xC0000405L) +#endif + +#ifndef STATUS_DS_GROUP_CONVERSION_ERROR +# define STATUS_DS_GROUP_CONVERSION_ERROR ((NTSTATUS) 0xC0000406L) +#endif + +#ifndef STATUS_VOLSNAP_PREPARE_HIBERNATE +# define STATUS_VOLSNAP_PREPARE_HIBERNATE ((NTSTATUS) 0xC0000407L) +#endif + +#ifndef STATUS_USER2USER_REQUIRED +# define STATUS_USER2USER_REQUIRED ((NTSTATUS) 0xC0000408L) +#endif + +#ifndef STATUS_STACK_BUFFER_OVERRUN +# define STATUS_STACK_BUFFER_OVERRUN ((NTSTATUS) 0xC0000409L) +#endif + +#ifndef STATUS_NO_S4U_PROT_SUPPORT +# define STATUS_NO_S4U_PROT_SUPPORT ((NTSTATUS) 0xC000040AL) +#endif + +#ifndef STATUS_CROSSREALM_DELEGATION_FAILURE +# define STATUS_CROSSREALM_DELEGATION_FAILURE ((NTSTATUS) 0xC000040BL) +#endif + +#ifndef STATUS_REVOCATION_OFFLINE_KDC +# define STATUS_REVOCATION_OFFLINE_KDC ((NTSTATUS) 0xC000040CL) +#endif + +#ifndef STATUS_ISSUING_CA_UNTRUSTED_KDC +# define STATUS_ISSUING_CA_UNTRUSTED_KDC ((NTSTATUS) 0xC000040DL) +#endif + +#ifndef STATUS_KDC_CERT_EXPIRED +# define STATUS_KDC_CERT_EXPIRED ((NTSTATUS) 0xC000040EL) +#endif + +#ifndef STATUS_KDC_CERT_REVOKED +# define STATUS_KDC_CERT_REVOKED ((NTSTATUS) 0xC000040FL) +#endif + +#ifndef STATUS_PARAMETER_QUOTA_EXCEEDED +# define STATUS_PARAMETER_QUOTA_EXCEEDED ((NTSTATUS) 0xC0000410L) +#endif + +#ifndef STATUS_HIBERNATION_FAILURE +# define STATUS_HIBERNATION_FAILURE ((NTSTATUS) 0xC0000411L) +#endif + +#ifndef STATUS_DELAY_LOAD_FAILED +# define STATUS_DELAY_LOAD_FAILED ((NTSTATUS) 0xC0000412L) +#endif + +#ifndef STATUS_AUTHENTICATION_FIREWALL_FAILED +# define STATUS_AUTHENTICATION_FIREWALL_FAILED ((NTSTATUS) 0xC0000413L) +#endif + +#ifndef STATUS_VDM_DISALLOWED +# define STATUS_VDM_DISALLOWED ((NTSTATUS) 0xC0000414L) +#endif + +#ifndef STATUS_HUNG_DISPLAY_DRIVER_THREAD +# define STATUS_HUNG_DISPLAY_DRIVER_THREAD ((NTSTATUS) 0xC0000415L) +#endif + +#ifndef STATUS_INSUFFICIENT_RESOURCE_FOR_SPECIFIED_SHARED_SECTION_SIZE +# define STATUS_INSUFFICIENT_RESOURCE_FOR_SPECIFIED_SHARED_SECTION_SIZE ((NTSTATUS) 0xC0000416L) +#endif + +#ifndef STATUS_INVALID_CRUNTIME_PARAMETER +# define STATUS_INVALID_CRUNTIME_PARAMETER ((NTSTATUS) 0xC0000417L) +#endif + +#ifndef STATUS_NTLM_BLOCKED +# define STATUS_NTLM_BLOCKED ((NTSTATUS) 0xC0000418L) +#endif + +#ifndef STATUS_DS_SRC_SID_EXISTS_IN_FOREST +# define STATUS_DS_SRC_SID_EXISTS_IN_FOREST ((NTSTATUS) 0xC0000419L) +#endif + +#ifndef STATUS_DS_DOMAIN_NAME_EXISTS_IN_FOREST +# define STATUS_DS_DOMAIN_NAME_EXISTS_IN_FOREST ((NTSTATUS) 0xC000041AL) +#endif + +#ifndef STATUS_DS_FLAT_NAME_EXISTS_IN_FOREST +# define STATUS_DS_FLAT_NAME_EXISTS_IN_FOREST ((NTSTATUS) 0xC000041BL) +#endif + +#ifndef STATUS_INVALID_USER_PRINCIPAL_NAME +# define STATUS_INVALID_USER_PRINCIPAL_NAME ((NTSTATUS) 0xC000041CL) +#endif + +#ifndef STATUS_FATAL_USER_CALLBACK_EXCEPTION +# define STATUS_FATAL_USER_CALLBACK_EXCEPTION ((NTSTATUS) 0xC000041DL) +#endif + +#ifndef STATUS_ASSERTION_FAILURE +# define STATUS_ASSERTION_FAILURE ((NTSTATUS) 0xC0000420L) +#endif + +#ifndef STATUS_VERIFIER_STOP +# define STATUS_VERIFIER_STOP ((NTSTATUS) 0xC0000421L) +#endif + +#ifndef STATUS_CALLBACK_POP_STACK +# define STATUS_CALLBACK_POP_STACK ((NTSTATUS) 0xC0000423L) +#endif + +#ifndef STATUS_INCOMPATIBLE_DRIVER_BLOCKED +# define STATUS_INCOMPATIBLE_DRIVER_BLOCKED ((NTSTATUS) 0xC0000424L) +#endif + +#ifndef STATUS_HIVE_UNLOADED +# define STATUS_HIVE_UNLOADED ((NTSTATUS) 0xC0000425L) +#endif + +#ifndef STATUS_COMPRESSION_DISABLED +# define STATUS_COMPRESSION_DISABLED ((NTSTATUS) 0xC0000426L) +#endif + +#ifndef STATUS_FILE_SYSTEM_LIMITATION +# define STATUS_FILE_SYSTEM_LIMITATION ((NTSTATUS) 0xC0000427L) +#endif + +#ifndef STATUS_INVALID_IMAGE_HASH +# define STATUS_INVALID_IMAGE_HASH ((NTSTATUS) 0xC0000428L) +#endif + +#ifndef STATUS_NOT_CAPABLE +# define STATUS_NOT_CAPABLE ((NTSTATUS) 0xC0000429L) +#endif + +#ifndef STATUS_REQUEST_OUT_OF_SEQUENCE +# define STATUS_REQUEST_OUT_OF_SEQUENCE ((NTSTATUS) 0xC000042AL) +#endif + +#ifndef STATUS_IMPLEMENTATION_LIMIT +# define STATUS_IMPLEMENTATION_LIMIT ((NTSTATUS) 0xC000042BL) +#endif + +#ifndef STATUS_ELEVATION_REQUIRED +# define STATUS_ELEVATION_REQUIRED ((NTSTATUS) 0xC000042CL) +#endif + +#ifndef STATUS_NO_SECURITY_CONTEXT +# define STATUS_NO_SECURITY_CONTEXT ((NTSTATUS) 0xC000042DL) +#endif + +#ifndef STATUS_PKU2U_CERT_FAILURE +# define STATUS_PKU2U_CERT_FAILURE ((NTSTATUS) 0xC000042FL) +#endif + +#ifndef STATUS_BEYOND_VDL +# define STATUS_BEYOND_VDL ((NTSTATUS) 0xC0000432L) +#endif + +#ifndef STATUS_ENCOUNTERED_WRITE_IN_PROGRESS +# define STATUS_ENCOUNTERED_WRITE_IN_PROGRESS ((NTSTATUS) 0xC0000433L) +#endif + +#ifndef STATUS_PTE_CHANGED +# define STATUS_PTE_CHANGED ((NTSTATUS) 0xC0000434L) +#endif + +#ifndef STATUS_PURGE_FAILED +# define STATUS_PURGE_FAILED ((NTSTATUS) 0xC0000435L) +#endif + +#ifndef STATUS_CRED_REQUIRES_CONFIRMATION +# define STATUS_CRED_REQUIRES_CONFIRMATION ((NTSTATUS) 0xC0000440L) +#endif + +#ifndef STATUS_CS_ENCRYPTION_INVALID_SERVER_RESPONSE +# define STATUS_CS_ENCRYPTION_INVALID_SERVER_RESPONSE ((NTSTATUS) 0xC0000441L) +#endif + +#ifndef STATUS_CS_ENCRYPTION_UNSUPPORTED_SERVER +# define STATUS_CS_ENCRYPTION_UNSUPPORTED_SERVER ((NTSTATUS) 0xC0000442L) +#endif + +#ifndef STATUS_CS_ENCRYPTION_EXISTING_ENCRYPTED_FILE +# define STATUS_CS_ENCRYPTION_EXISTING_ENCRYPTED_FILE ((NTSTATUS) 0xC0000443L) +#endif + +#ifndef STATUS_CS_ENCRYPTION_NEW_ENCRYPTED_FILE +# define STATUS_CS_ENCRYPTION_NEW_ENCRYPTED_FILE ((NTSTATUS) 0xC0000444L) +#endif + +#ifndef STATUS_CS_ENCRYPTION_FILE_NOT_CSE +# define STATUS_CS_ENCRYPTION_FILE_NOT_CSE ((NTSTATUS) 0xC0000445L) +#endif + +#ifndef STATUS_INVALID_LABEL +# define STATUS_INVALID_LABEL ((NTSTATUS) 0xC0000446L) +#endif + +#ifndef STATUS_DRIVER_PROCESS_TERMINATED +# define STATUS_DRIVER_PROCESS_TERMINATED ((NTSTATUS) 0xC0000450L) +#endif + +#ifndef STATUS_AMBIGUOUS_SYSTEM_DEVICE +# define STATUS_AMBIGUOUS_SYSTEM_DEVICE ((NTSTATUS) 0xC0000451L) +#endif + +#ifndef STATUS_SYSTEM_DEVICE_NOT_FOUND +# define STATUS_SYSTEM_DEVICE_NOT_FOUND ((NTSTATUS) 0xC0000452L) +#endif + +#ifndef STATUS_RESTART_BOOT_APPLICATION +# define STATUS_RESTART_BOOT_APPLICATION ((NTSTATUS) 0xC0000453L) +#endif + +#ifndef STATUS_INSUFFICIENT_NVRAM_RESOURCES +# define STATUS_INSUFFICIENT_NVRAM_RESOURCES ((NTSTATUS) 0xC0000454L) +#endif + +#ifndef STATUS_INVALID_TASK_NAME +# define STATUS_INVALID_TASK_NAME ((NTSTATUS) 0xC0000500L) +#endif + +#ifndef STATUS_INVALID_TASK_INDEX +# define STATUS_INVALID_TASK_INDEX ((NTSTATUS) 0xC0000501L) +#endif + +#ifndef STATUS_THREAD_ALREADY_IN_TASK +# define STATUS_THREAD_ALREADY_IN_TASK ((NTSTATUS) 0xC0000502L) +#endif + +#ifndef STATUS_CALLBACK_BYPASS +# define STATUS_CALLBACK_BYPASS ((NTSTATUS) 0xC0000503L) +#endif + +#ifndef STATUS_FAIL_FAST_EXCEPTION +# define STATUS_FAIL_FAST_EXCEPTION ((NTSTATUS) 0xC0000602L) +#endif + +#ifndef STATUS_IMAGE_CERT_REVOKED +# define STATUS_IMAGE_CERT_REVOKED ((NTSTATUS) 0xC0000603L) +#endif + +#ifndef STATUS_PORT_CLOSED +# define STATUS_PORT_CLOSED ((NTSTATUS) 0xC0000700L) +#endif + +#ifndef STATUS_MESSAGE_LOST +# define STATUS_MESSAGE_LOST ((NTSTATUS) 0xC0000701L) +#endif + +#ifndef STATUS_INVALID_MESSAGE +# define STATUS_INVALID_MESSAGE ((NTSTATUS) 0xC0000702L) +#endif + +#ifndef STATUS_REQUEST_CANCELED +# define STATUS_REQUEST_CANCELED ((NTSTATUS) 0xC0000703L) +#endif + +#ifndef STATUS_RECURSIVE_DISPATCH +# define STATUS_RECURSIVE_DISPATCH ((NTSTATUS) 0xC0000704L) +#endif + +#ifndef STATUS_LPC_RECEIVE_BUFFER_EXPECTED +# define STATUS_LPC_RECEIVE_BUFFER_EXPECTED ((NTSTATUS) 0xC0000705L) +#endif + +#ifndef STATUS_LPC_INVALID_CONNECTION_USAGE +# define STATUS_LPC_INVALID_CONNECTION_USAGE ((NTSTATUS) 0xC0000706L) +#endif + +#ifndef STATUS_LPC_REQUESTS_NOT_ALLOWED +# define STATUS_LPC_REQUESTS_NOT_ALLOWED ((NTSTATUS) 0xC0000707L) +#endif + +#ifndef STATUS_RESOURCE_IN_USE +# define STATUS_RESOURCE_IN_USE ((NTSTATUS) 0xC0000708L) +#endif + +#ifndef STATUS_HARDWARE_MEMORY_ERROR +# define STATUS_HARDWARE_MEMORY_ERROR ((NTSTATUS) 0xC0000709L) +#endif + +#ifndef STATUS_THREADPOOL_HANDLE_EXCEPTION +# define STATUS_THREADPOOL_HANDLE_EXCEPTION ((NTSTATUS) 0xC000070AL) +#endif + +#ifndef STATUS_THREADPOOL_SET_EVENT_ON_COMPLETION_FAILED +# define STATUS_THREADPOOL_SET_EVENT_ON_COMPLETION_FAILED ((NTSTATUS) 0xC000070BL) +#endif + +#ifndef STATUS_THREADPOOL_RELEASE_SEMAPHORE_ON_COMPLETION_FAILED +# define STATUS_THREADPOOL_RELEASE_SEMAPHORE_ON_COMPLETION_FAILED ((NTSTATUS) 0xC000070CL) +#endif + +#ifndef STATUS_THREADPOOL_RELEASE_MUTEX_ON_COMPLETION_FAILED +# define STATUS_THREADPOOL_RELEASE_MUTEX_ON_COMPLETION_FAILED ((NTSTATUS) 0xC000070DL) +#endif + +#ifndef STATUS_THREADPOOL_FREE_LIBRARY_ON_COMPLETION_FAILED +# define STATUS_THREADPOOL_FREE_LIBRARY_ON_COMPLETION_FAILED ((NTSTATUS) 0xC000070EL) +#endif + +#ifndef STATUS_THREADPOOL_RELEASED_DURING_OPERATION +# define STATUS_THREADPOOL_RELEASED_DURING_OPERATION ((NTSTATUS) 0xC000070FL) +#endif + +#ifndef STATUS_CALLBACK_RETURNED_WHILE_IMPERSONATING +# define STATUS_CALLBACK_RETURNED_WHILE_IMPERSONATING ((NTSTATUS) 0xC0000710L) +#endif + +#ifndef STATUS_APC_RETURNED_WHILE_IMPERSONATING +# define STATUS_APC_RETURNED_WHILE_IMPERSONATING ((NTSTATUS) 0xC0000711L) +#endif + +#ifndef STATUS_PROCESS_IS_PROTECTED +# define STATUS_PROCESS_IS_PROTECTED ((NTSTATUS) 0xC0000712L) +#endif + +#ifndef STATUS_MCA_EXCEPTION +# define STATUS_MCA_EXCEPTION ((NTSTATUS) 0xC0000713L) +#endif + +#ifndef STATUS_CERTIFICATE_MAPPING_NOT_UNIQUE +# define STATUS_CERTIFICATE_MAPPING_NOT_UNIQUE ((NTSTATUS) 0xC0000714L) +#endif + +#ifndef STATUS_SYMLINK_CLASS_DISABLED +# define STATUS_SYMLINK_CLASS_DISABLED ((NTSTATUS) 0xC0000715L) +#endif + +#ifndef STATUS_INVALID_IDN_NORMALIZATION +# define STATUS_INVALID_IDN_NORMALIZATION ((NTSTATUS) 0xC0000716L) +#endif + +#ifndef STATUS_NO_UNICODE_TRANSLATION +# define STATUS_NO_UNICODE_TRANSLATION ((NTSTATUS) 0xC0000717L) +#endif + +#ifndef STATUS_ALREADY_REGISTERED +# define STATUS_ALREADY_REGISTERED ((NTSTATUS) 0xC0000718L) +#endif + +#ifndef STATUS_CONTEXT_MISMATCH +# define STATUS_CONTEXT_MISMATCH ((NTSTATUS) 0xC0000719L) +#endif + +#ifndef STATUS_PORT_ALREADY_HAS_COMPLETION_LIST +# define STATUS_PORT_ALREADY_HAS_COMPLETION_LIST ((NTSTATUS) 0xC000071AL) +#endif + +#ifndef STATUS_CALLBACK_RETURNED_THREAD_PRIORITY +# define STATUS_CALLBACK_RETURNED_THREAD_PRIORITY ((NTSTATUS) 0xC000071BL) +#endif + +#ifndef STATUS_INVALID_THREAD +# define STATUS_INVALID_THREAD ((NTSTATUS) 0xC000071CL) +#endif + +#ifndef STATUS_CALLBACK_RETURNED_TRANSACTION +# define STATUS_CALLBACK_RETURNED_TRANSACTION ((NTSTATUS) 0xC000071DL) +#endif + +#ifndef STATUS_CALLBACK_RETURNED_LDR_LOCK +# define STATUS_CALLBACK_RETURNED_LDR_LOCK ((NTSTATUS) 0xC000071EL) +#endif + +#ifndef STATUS_CALLBACK_RETURNED_LANG +# define STATUS_CALLBACK_RETURNED_LANG ((NTSTATUS) 0xC000071FL) +#endif + +#ifndef STATUS_CALLBACK_RETURNED_PRI_BACK +# define STATUS_CALLBACK_RETURNED_PRI_BACK ((NTSTATUS) 0xC0000720L) +#endif + +#ifndef STATUS_CALLBACK_RETURNED_THREAD_AFFINITY +# define STATUS_CALLBACK_RETURNED_THREAD_AFFINITY ((NTSTATUS) 0xC0000721L) +#endif + +#ifndef STATUS_DISK_REPAIR_DISABLED +# define STATUS_DISK_REPAIR_DISABLED ((NTSTATUS) 0xC0000800L) +#endif + +#ifndef STATUS_DS_DOMAIN_RENAME_IN_PROGRESS +# define STATUS_DS_DOMAIN_RENAME_IN_PROGRESS ((NTSTATUS) 0xC0000801L) +#endif + +#ifndef STATUS_DISK_QUOTA_EXCEEDED +# define STATUS_DISK_QUOTA_EXCEEDED ((NTSTATUS) 0xC0000802L) +#endif + +#ifndef STATUS_DATA_LOST_REPAIR +# define STATUS_DATA_LOST_REPAIR ((NTSTATUS) 0x80000803L) +#endif + +#ifndef STATUS_CONTENT_BLOCKED +# define STATUS_CONTENT_BLOCKED ((NTSTATUS) 0xC0000804L) +#endif + +#ifndef STATUS_BAD_CLUSTERS +# define STATUS_BAD_CLUSTERS ((NTSTATUS) 0xC0000805L) +#endif + +#ifndef STATUS_VOLUME_DIRTY +# define STATUS_VOLUME_DIRTY ((NTSTATUS) 0xC0000806L) +#endif + +#ifndef STATUS_FILE_CHECKED_OUT +# define STATUS_FILE_CHECKED_OUT ((NTSTATUS) 0xC0000901L) +#endif + +#ifndef STATUS_CHECKOUT_REQUIRED +# define STATUS_CHECKOUT_REQUIRED ((NTSTATUS) 0xC0000902L) +#endif + +#ifndef STATUS_BAD_FILE_TYPE +# define STATUS_BAD_FILE_TYPE ((NTSTATUS) 0xC0000903L) +#endif + +#ifndef STATUS_FILE_TOO_LARGE +# define STATUS_FILE_TOO_LARGE ((NTSTATUS) 0xC0000904L) +#endif + +#ifndef STATUS_FORMS_AUTH_REQUIRED +# define STATUS_FORMS_AUTH_REQUIRED ((NTSTATUS) 0xC0000905L) +#endif + +#ifndef STATUS_VIRUS_INFECTED +# define STATUS_VIRUS_INFECTED ((NTSTATUS) 0xC0000906L) +#endif + +#ifndef STATUS_VIRUS_DELETED +# define STATUS_VIRUS_DELETED ((NTSTATUS) 0xC0000907L) +#endif + +#ifndef STATUS_BAD_MCFG_TABLE +# define STATUS_BAD_MCFG_TABLE ((NTSTATUS) 0xC0000908L) +#endif + +#ifndef STATUS_CANNOT_BREAK_OPLOCK +# define STATUS_CANNOT_BREAK_OPLOCK ((NTSTATUS) 0xC0000909L) +#endif + +#ifndef STATUS_WOW_ASSERTION +# define STATUS_WOW_ASSERTION ((NTSTATUS) 0xC0009898L) +#endif + +#ifndef STATUS_INVALID_SIGNATURE +# define STATUS_INVALID_SIGNATURE ((NTSTATUS) 0xC000A000L) +#endif + +#ifndef STATUS_HMAC_NOT_SUPPORTED +# define STATUS_HMAC_NOT_SUPPORTED ((NTSTATUS) 0xC000A001L) +#endif + +#ifndef STATUS_AUTH_TAG_MISMATCH +# define STATUS_AUTH_TAG_MISMATCH ((NTSTATUS) 0xC000A002L) +#endif + +#ifndef STATUS_IPSEC_QUEUE_OVERFLOW +# define STATUS_IPSEC_QUEUE_OVERFLOW ((NTSTATUS) 0xC000A010L) +#endif + +#ifndef STATUS_ND_QUEUE_OVERFLOW +# define STATUS_ND_QUEUE_OVERFLOW ((NTSTATUS) 0xC000A011L) +#endif + +#ifndef STATUS_HOPLIMIT_EXCEEDED +# define STATUS_HOPLIMIT_EXCEEDED ((NTSTATUS) 0xC000A012L) +#endif + +#ifndef STATUS_PROTOCOL_NOT_SUPPORTED +# define STATUS_PROTOCOL_NOT_SUPPORTED ((NTSTATUS) 0xC000A013L) +#endif + +#ifndef STATUS_FASTPATH_REJECTED +# define STATUS_FASTPATH_REJECTED ((NTSTATUS) 0xC000A014L) +#endif + +#ifndef STATUS_LOST_WRITEBEHIND_DATA_NETWORK_DISCONNECTED +# define STATUS_LOST_WRITEBEHIND_DATA_NETWORK_DISCONNECTED ((NTSTATUS) 0xC000A080L) +#endif + +#ifndef STATUS_LOST_WRITEBEHIND_DATA_NETWORK_SERVER_ERROR +# define STATUS_LOST_WRITEBEHIND_DATA_NETWORK_SERVER_ERROR ((NTSTATUS) 0xC000A081L) +#endif + +#ifndef STATUS_LOST_WRITEBEHIND_DATA_LOCAL_DISK_ERROR +# define STATUS_LOST_WRITEBEHIND_DATA_LOCAL_DISK_ERROR ((NTSTATUS) 0xC000A082L) +#endif + +#ifndef STATUS_XML_PARSE_ERROR +# define STATUS_XML_PARSE_ERROR ((NTSTATUS) 0xC000A083L) +#endif + +#ifndef STATUS_XMLDSIG_ERROR +# define STATUS_XMLDSIG_ERROR ((NTSTATUS) 0xC000A084L) +#endif + +#ifndef STATUS_WRONG_COMPARTMENT +# define STATUS_WRONG_COMPARTMENT ((NTSTATUS) 0xC000A085L) +#endif + +#ifndef STATUS_AUTHIP_FAILURE +# define STATUS_AUTHIP_FAILURE ((NTSTATUS) 0xC000A086L) +#endif + +#ifndef STATUS_DS_OID_MAPPED_GROUP_CANT_HAVE_MEMBERS +# define STATUS_DS_OID_MAPPED_GROUP_CANT_HAVE_MEMBERS ((NTSTATUS) 0xC000A087L) +#endif + +#ifndef STATUS_DS_OID_NOT_FOUND +# define STATUS_DS_OID_NOT_FOUND ((NTSTATUS) 0xC000A088L) +#endif + +#ifndef STATUS_HASH_NOT_SUPPORTED +# define STATUS_HASH_NOT_SUPPORTED ((NTSTATUS) 0xC000A100L) +#endif + +#ifndef STATUS_HASH_NOT_PRESENT +# define STATUS_HASH_NOT_PRESENT ((NTSTATUS) 0xC000A101L) +#endif + +/* This is not the NTSTATUS_FROM_WIN32 that the DDK provides, because the DDK + * got it wrong! */ +#ifdef NTSTATUS_FROM_WIN32 +# undef NTSTATUS_FROM_WIN32 +#endif +#define NTSTATUS_FROM_WIN32(error) ((NTSTATUS) (error) <= 0 ? \ + ((NTSTATUS) (error)) : ((NTSTATUS) (((error) & 0x0000FFFF) | \ + (FACILITY_NTWIN32 << 16) | ERROR_SEVERITY_WARNING))) + +#ifndef JOB_OBJECT_LIMIT_PROCESS_MEMORY +# define JOB_OBJECT_LIMIT_PROCESS_MEMORY 0x00000100 +#endif +#ifndef JOB_OBJECT_LIMIT_JOB_MEMORY +# define JOB_OBJECT_LIMIT_JOB_MEMORY 0x00000200 +#endif +#ifndef JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION +# define JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION 0x00000400 +#endif +#ifndef JOB_OBJECT_LIMIT_BREAKAWAY_OK +# define JOB_OBJECT_LIMIT_BREAKAWAY_OK 0x00000800 +#endif +#ifndef JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK +# define JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK 0x00001000 +#endif +#ifndef JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE +# define JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE 0x00002000 +#endif + +#ifndef SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATE +# define SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATE 0x00000002 +#endif + +/* from winternl.h */ +#if !defined(__UNICODE_STRING_DEFINED) && defined(__MINGW32__) +#define __UNICODE_STRING_DEFINED +#endif +typedef struct _UNICODE_STRING { + USHORT Length; + USHORT MaximumLength; + PWSTR Buffer; +} UNICODE_STRING, *PUNICODE_STRING; + +typedef const UNICODE_STRING *PCUNICODE_STRING; + +/* from ntifs.h */ +#ifndef DEVICE_TYPE +# define DEVICE_TYPE DWORD +#endif + +/* MinGW already has a definition for REPARSE_DATA_BUFFER, but mingw-w64 does + * not. + */ +#if defined(_MSC_VER) || defined(__MINGW64_VERSION_MAJOR) + typedef struct _REPARSE_DATA_BUFFER { + ULONG ReparseTag; + USHORT ReparseDataLength; + USHORT Reserved; + union { + struct { + USHORT SubstituteNameOffset; + USHORT SubstituteNameLength; + USHORT PrintNameOffset; + USHORT PrintNameLength; + ULONG Flags; + WCHAR PathBuffer[1]; + } SymbolicLinkReparseBuffer; + struct { + USHORT SubstituteNameOffset; + USHORT SubstituteNameLength; + USHORT PrintNameOffset; + USHORT PrintNameLength; + WCHAR PathBuffer[1]; + } MountPointReparseBuffer; + struct { + UCHAR DataBuffer[1]; + } GenericReparseBuffer; + struct { + ULONG StringCount; + WCHAR StringList[1]; + } AppExecLinkReparseBuffer; + }; + } REPARSE_DATA_BUFFER, *PREPARSE_DATA_BUFFER; +#endif + +typedef struct _IO_STATUS_BLOCK { + union { + NTSTATUS Status; + PVOID Pointer; + }; + ULONG_PTR Information; +} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK; + +typedef enum _FILE_INFORMATION_CLASS { + FileDirectoryInformation = 1, + FileFullDirectoryInformation, + FileBothDirectoryInformation, + FileBasicInformation, + FileStandardInformation, + FileInternalInformation, + FileEaInformation, + FileAccessInformation, + FileNameInformation, + FileRenameInformation, + FileLinkInformation, + FileNamesInformation, + FileDispositionInformation, + FilePositionInformation, + FileFullEaInformation, + FileModeInformation, + FileAlignmentInformation, + FileAllInformation, + FileAllocationInformation, + FileEndOfFileInformation, + FileAlternateNameInformation, + FileStreamInformation, + FilePipeInformation, + FilePipeLocalInformation, + FilePipeRemoteInformation, + FileMailslotQueryInformation, + FileMailslotSetInformation, + FileCompressionInformation, + FileObjectIdInformation, + FileCompletionInformation, + FileMoveClusterInformation, + FileQuotaInformation, + FileReparsePointInformation, + FileNetworkOpenInformation, + FileAttributeTagInformation, + FileTrackingInformation, + FileIdBothDirectoryInformation, + FileIdFullDirectoryInformation, + FileValidDataLengthInformation, + FileShortNameInformation, + FileIoCompletionNotificationInformation, + FileIoStatusBlockRangeInformation, + FileIoPriorityHintInformation, + FileSfioReserveInformation, + FileSfioVolumeInformation, + FileHardLinkInformation, + FileProcessIdsUsingFileInformation, + FileNormalizedNameInformation, + FileNetworkPhysicalNameInformation, + FileIdGlobalTxDirectoryInformation, + FileIsRemoteDeviceInformation, + FileAttributeCacheInformation, + FileNumaNodeInformation, + FileStandardLinkInformation, + FileRemoteProtocolInformation, + FileMaximumInformation +} FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS; + +typedef struct _FILE_DIRECTORY_INFORMATION { + ULONG NextEntryOffset; + ULONG FileIndex; + LARGE_INTEGER CreationTime; + LARGE_INTEGER LastAccessTime; + LARGE_INTEGER LastWriteTime; + LARGE_INTEGER ChangeTime; + LARGE_INTEGER EndOfFile; + LARGE_INTEGER AllocationSize; + ULONG FileAttributes; + ULONG FileNameLength; + WCHAR FileName[1]; +} FILE_DIRECTORY_INFORMATION, *PFILE_DIRECTORY_INFORMATION; + +typedef struct _FILE_BOTH_DIR_INFORMATION { + ULONG NextEntryOffset; + ULONG FileIndex; + LARGE_INTEGER CreationTime; + LARGE_INTEGER LastAccessTime; + LARGE_INTEGER LastWriteTime; + LARGE_INTEGER ChangeTime; + LARGE_INTEGER EndOfFile; + LARGE_INTEGER AllocationSize; + ULONG FileAttributes; + ULONG FileNameLength; + ULONG EaSize; + CCHAR ShortNameLength; + WCHAR ShortName[12]; + WCHAR FileName[1]; +} FILE_BOTH_DIR_INFORMATION, *PFILE_BOTH_DIR_INFORMATION; + +typedef struct _FILE_BASIC_INFORMATION { + LARGE_INTEGER CreationTime; + LARGE_INTEGER LastAccessTime; + LARGE_INTEGER LastWriteTime; + LARGE_INTEGER ChangeTime; + DWORD FileAttributes; +} FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION; + +typedef struct _FILE_STANDARD_INFORMATION { + LARGE_INTEGER AllocationSize; + LARGE_INTEGER EndOfFile; + ULONG NumberOfLinks; + BOOLEAN DeletePending; + BOOLEAN Directory; +} FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION; + +typedef struct _FILE_INTERNAL_INFORMATION { + LARGE_INTEGER IndexNumber; +} FILE_INTERNAL_INFORMATION, *PFILE_INTERNAL_INFORMATION; + +typedef struct _FILE_EA_INFORMATION { + ULONG EaSize; +} FILE_EA_INFORMATION, *PFILE_EA_INFORMATION; + +typedef struct _FILE_ACCESS_INFORMATION { + ACCESS_MASK AccessFlags; +} FILE_ACCESS_INFORMATION, *PFILE_ACCESS_INFORMATION; + +typedef struct _FILE_POSITION_INFORMATION { + LARGE_INTEGER CurrentByteOffset; +} FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION; + +typedef struct _FILE_MODE_INFORMATION { + ULONG Mode; +} FILE_MODE_INFORMATION, *PFILE_MODE_INFORMATION; + +typedef struct _FILE_ALIGNMENT_INFORMATION { + ULONG AlignmentRequirement; +} FILE_ALIGNMENT_INFORMATION, *PFILE_ALIGNMENT_INFORMATION; + +typedef struct _FILE_NAME_INFORMATION { + ULONG FileNameLength; + WCHAR FileName[1]; +} FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION; + +typedef struct _FILE_END_OF_FILE_INFORMATION { + LARGE_INTEGER EndOfFile; +} FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION; + +typedef struct _FILE_ALL_INFORMATION { + FILE_BASIC_INFORMATION BasicInformation; + FILE_STANDARD_INFORMATION StandardInformation; + FILE_INTERNAL_INFORMATION InternalInformation; + FILE_EA_INFORMATION EaInformation; + FILE_ACCESS_INFORMATION AccessInformation; + FILE_POSITION_INFORMATION PositionInformation; + FILE_MODE_INFORMATION ModeInformation; + FILE_ALIGNMENT_INFORMATION AlignmentInformation; + FILE_NAME_INFORMATION NameInformation; +} FILE_ALL_INFORMATION, *PFILE_ALL_INFORMATION; + +typedef struct _FILE_DISPOSITION_INFORMATION { + BOOLEAN DeleteFile; +} FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION; + +typedef struct _FILE_PIPE_LOCAL_INFORMATION { + ULONG NamedPipeType; + ULONG NamedPipeConfiguration; + ULONG MaximumInstances; + ULONG CurrentInstances; + ULONG InboundQuota; + ULONG ReadDataAvailable; + ULONG OutboundQuota; + ULONG WriteQuotaAvailable; + ULONG NamedPipeState; + ULONG NamedPipeEnd; +} FILE_PIPE_LOCAL_INFORMATION, *PFILE_PIPE_LOCAL_INFORMATION; + +#define FILE_SYNCHRONOUS_IO_ALERT 0x00000010 +#define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020 + +typedef enum _FS_INFORMATION_CLASS { + FileFsVolumeInformation = 1, + FileFsLabelInformation = 2, + FileFsSizeInformation = 3, + FileFsDeviceInformation = 4, + FileFsAttributeInformation = 5, + FileFsControlInformation = 6, + FileFsFullSizeInformation = 7, + FileFsObjectIdInformation = 8, + FileFsDriverPathInformation = 9, + FileFsVolumeFlagsInformation = 10, + FileFsSectorSizeInformation = 11 +} FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS; + +typedef struct _FILE_FS_VOLUME_INFORMATION { + LARGE_INTEGER VolumeCreationTime; + ULONG VolumeSerialNumber; + ULONG VolumeLabelLength; + BOOLEAN SupportsObjects; + WCHAR VolumeLabel[1]; +} FILE_FS_VOLUME_INFORMATION, *PFILE_FS_VOLUME_INFORMATION; + +typedef struct _FILE_FS_LABEL_INFORMATION { + ULONG VolumeLabelLength; + WCHAR VolumeLabel[1]; +} FILE_FS_LABEL_INFORMATION, *PFILE_FS_LABEL_INFORMATION; + +typedef struct _FILE_FS_SIZE_INFORMATION { + LARGE_INTEGER TotalAllocationUnits; + LARGE_INTEGER AvailableAllocationUnits; + ULONG SectorsPerAllocationUnit; + ULONG BytesPerSector; +} FILE_FS_SIZE_INFORMATION, *PFILE_FS_SIZE_INFORMATION; + +typedef struct _FILE_FS_DEVICE_INFORMATION { + DEVICE_TYPE DeviceType; + ULONG Characteristics; +} FILE_FS_DEVICE_INFORMATION, *PFILE_FS_DEVICE_INFORMATION; + +typedef struct _FILE_FS_ATTRIBUTE_INFORMATION { + ULONG FileSystemAttributes; + LONG MaximumComponentNameLength; + ULONG FileSystemNameLength; + WCHAR FileSystemName[1]; +} FILE_FS_ATTRIBUTE_INFORMATION, *PFILE_FS_ATTRIBUTE_INFORMATION; + +typedef struct _FILE_FS_CONTROL_INFORMATION { + LARGE_INTEGER FreeSpaceStartFiltering; + LARGE_INTEGER FreeSpaceThreshold; + LARGE_INTEGER FreeSpaceStopFiltering; + LARGE_INTEGER DefaultQuotaThreshold; + LARGE_INTEGER DefaultQuotaLimit; + ULONG FileSystemControlFlags; +} FILE_FS_CONTROL_INFORMATION, *PFILE_FS_CONTROL_INFORMATION; + +typedef struct _FILE_FS_FULL_SIZE_INFORMATION { + LARGE_INTEGER TotalAllocationUnits; + LARGE_INTEGER CallerAvailableAllocationUnits; + LARGE_INTEGER ActualAvailableAllocationUnits; + ULONG SectorsPerAllocationUnit; + ULONG BytesPerSector; +} FILE_FS_FULL_SIZE_INFORMATION, *PFILE_FS_FULL_SIZE_INFORMATION; + +typedef struct _FILE_FS_OBJECTID_INFORMATION { + UCHAR ObjectId[16]; + UCHAR ExtendedInfo[48]; +} FILE_FS_OBJECTID_INFORMATION, *PFILE_FS_OBJECTID_INFORMATION; + +typedef struct _FILE_FS_DRIVER_PATH_INFORMATION { + BOOLEAN DriverInPath; + ULONG DriverNameLength; + WCHAR DriverName[1]; +} FILE_FS_DRIVER_PATH_INFORMATION, *PFILE_FS_DRIVER_PATH_INFORMATION; + +typedef struct _FILE_FS_VOLUME_FLAGS_INFORMATION { + ULONG Flags; +} FILE_FS_VOLUME_FLAGS_INFORMATION, *PFILE_FS_VOLUME_FLAGS_INFORMATION; + +typedef struct _FILE_FS_SECTOR_SIZE_INFORMATION { + ULONG LogicalBytesPerSector; + ULONG PhysicalBytesPerSectorForAtomicity; + ULONG PhysicalBytesPerSectorForPerformance; + ULONG FileSystemEffectivePhysicalBytesPerSectorForAtomicity; + ULONG Flags; + ULONG ByteOffsetForSectorAlignment; + ULONG ByteOffsetForPartitionAlignment; +} FILE_FS_SECTOR_SIZE_INFORMATION, *PFILE_FS_SECTOR_SIZE_INFORMATION; + +typedef struct _SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION { + LARGE_INTEGER IdleTime; + LARGE_INTEGER KernelTime; + LARGE_INTEGER UserTime; + LARGE_INTEGER DpcTime; + LARGE_INTEGER InterruptTime; + ULONG InterruptCount; +} SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION, *PSYSTEM_PROCESSOR_PERFORMANCE_INFORMATION; + +#ifndef SystemProcessorPerformanceInformation +# define SystemProcessorPerformanceInformation 8 +#endif + +#ifndef ProcessConsoleHostProcess +# define ProcessConsoleHostProcess 49 +#endif + +#ifndef FILE_DEVICE_FILE_SYSTEM +# define FILE_DEVICE_FILE_SYSTEM 0x00000009 +#endif + +#ifndef FILE_DEVICE_NETWORK +# define FILE_DEVICE_NETWORK 0x00000012 +#endif + +#ifndef METHOD_BUFFERED +# define METHOD_BUFFERED 0 +#endif + +#ifndef METHOD_IN_DIRECT +# define METHOD_IN_DIRECT 1 +#endif + +#ifndef METHOD_OUT_DIRECT +# define METHOD_OUT_DIRECT 2 +#endif + +#ifndef METHOD_NEITHER +#define METHOD_NEITHER 3 +#endif + +#ifndef METHOD_DIRECT_TO_HARDWARE +# define METHOD_DIRECT_TO_HARDWARE METHOD_IN_DIRECT +#endif + +#ifndef METHOD_DIRECT_FROM_HARDWARE +# define METHOD_DIRECT_FROM_HARDWARE METHOD_OUT_DIRECT +#endif + +#ifndef FILE_ANY_ACCESS +# define FILE_ANY_ACCESS 0 +#endif + +#ifndef FILE_SPECIAL_ACCESS +# define FILE_SPECIAL_ACCESS (FILE_ANY_ACCESS) +#endif + +#ifndef FILE_READ_ACCESS +# define FILE_READ_ACCESS 0x0001 +#endif + +#ifndef FILE_WRITE_ACCESS +# define FILE_WRITE_ACCESS 0x0002 +#endif + +#ifndef CTL_CODE +# define CTL_CODE(device_type, function, method, access) \ + (((device_type) << 16) | ((access) << 14) | ((function) << 2) | (method)) +#endif + +#ifndef FSCTL_SET_REPARSE_POINT +# define FSCTL_SET_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, \ + 41, \ + METHOD_BUFFERED, \ + FILE_SPECIAL_ACCESS) +#endif + +#ifndef FSCTL_GET_REPARSE_POINT +# define FSCTL_GET_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, \ + 42, \ + METHOD_BUFFERED, \ + FILE_ANY_ACCESS) +#endif + +#ifndef FSCTL_DELETE_REPARSE_POINT +# define FSCTL_DELETE_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, \ + 43, \ + METHOD_BUFFERED, \ + FILE_SPECIAL_ACCESS) +#endif + +#ifndef IO_REPARSE_TAG_SYMLINK +# define IO_REPARSE_TAG_SYMLINK (0xA000000CL) +#endif +#ifndef IO_REPARSE_TAG_APPEXECLINK +# define IO_REPARSE_TAG_APPEXECLINK (0x8000001BL) +#endif + +typedef VOID (NTAPI *PIO_APC_ROUTINE) + (PVOID ApcContext, + PIO_STATUS_BLOCK IoStatusBlock, + ULONG Reserved); + +typedef NTSTATUS (NTAPI *sRtlGetVersion) + (PRTL_OSVERSIONINFOW lpVersionInformation); + +typedef ULONG (NTAPI *sRtlNtStatusToDosError) + (NTSTATUS Status); + +typedef NTSTATUS (NTAPI *sNtDeviceIoControlFile) + (HANDLE FileHandle, + HANDLE Event, + PIO_APC_ROUTINE ApcRoutine, + PVOID ApcContext, + PIO_STATUS_BLOCK IoStatusBlock, + ULONG IoControlCode, + PVOID InputBuffer, + ULONG InputBufferLength, + PVOID OutputBuffer, + ULONG OutputBufferLength); + +typedef NTSTATUS (NTAPI *sNtQueryInformationFile) + (HANDLE FileHandle, + PIO_STATUS_BLOCK IoStatusBlock, + PVOID FileInformation, + ULONG Length, + FILE_INFORMATION_CLASS FileInformationClass); + +typedef NTSTATUS (NTAPI *sNtSetInformationFile) + (HANDLE FileHandle, + PIO_STATUS_BLOCK IoStatusBlock, + PVOID FileInformation, + ULONG Length, + FILE_INFORMATION_CLASS FileInformationClass); + +typedef NTSTATUS (NTAPI *sNtQueryVolumeInformationFile) + (HANDLE FileHandle, + PIO_STATUS_BLOCK IoStatusBlock, + PVOID FsInformation, + ULONG Length, + FS_INFORMATION_CLASS FsInformationClass); + +typedef NTSTATUS (NTAPI *sNtQuerySystemInformation) + (UINT SystemInformationClass, + PVOID SystemInformation, + ULONG SystemInformationLength, + PULONG ReturnLength); + +typedef NTSTATUS (NTAPI *sNtQueryDirectoryFile) + (HANDLE FileHandle, + HANDLE Event, + PIO_APC_ROUTINE ApcRoutine, + PVOID ApcContext, + PIO_STATUS_BLOCK IoStatusBlock, + PVOID FileInformation, + ULONG Length, + FILE_INFORMATION_CLASS FileInformationClass, + BOOLEAN ReturnSingleEntry, + PUNICODE_STRING FileName, + BOOLEAN RestartScan + ); + +typedef NTSTATUS (NTAPI *sNtQueryInformationProcess) + (HANDLE ProcessHandle, + UINT ProcessInformationClass, + PVOID ProcessInformation, + ULONG Length, + PULONG ReturnLength); + +/* + * Kernel32 headers + */ +#ifndef FILE_SKIP_COMPLETION_PORT_ON_SUCCESS +# define FILE_SKIP_COMPLETION_PORT_ON_SUCCESS 0x1 +#endif + +#ifndef FILE_SKIP_SET_EVENT_ON_HANDLE +# define FILE_SKIP_SET_EVENT_ON_HANDLE 0x2 +#endif + +#ifndef SYMBOLIC_LINK_FLAG_DIRECTORY +# define SYMBOLIC_LINK_FLAG_DIRECTORY 0x1 +#endif + +#if defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR) + typedef struct _OVERLAPPED_ENTRY { + ULONG_PTR lpCompletionKey; + LPOVERLAPPED lpOverlapped; + ULONG_PTR Internal; + DWORD dwNumberOfBytesTransferred; + } OVERLAPPED_ENTRY, *LPOVERLAPPED_ENTRY; +#endif + +/* from wincon.h */ +#ifndef ENABLE_INSERT_MODE +# define ENABLE_INSERT_MODE 0x20 +#endif + +#ifndef ENABLE_QUICK_EDIT_MODE +# define ENABLE_QUICK_EDIT_MODE 0x40 +#endif + +#ifndef ENABLE_EXTENDED_FLAGS +# define ENABLE_EXTENDED_FLAGS 0x80 +#endif + +/* from winerror.h */ +#ifndef ERROR_ELEVATION_REQUIRED +# define ERROR_ELEVATION_REQUIRED 740 +#endif + +#ifndef ERROR_SYMLINK_NOT_SUPPORTED +# define ERROR_SYMLINK_NOT_SUPPORTED 1464 +#endif + +#ifndef ERROR_MUI_FILE_NOT_FOUND +# define ERROR_MUI_FILE_NOT_FOUND 15100 +#endif + +#ifndef ERROR_MUI_INVALID_FILE +# define ERROR_MUI_INVALID_FILE 15101 +#endif + +#ifndef ERROR_MUI_INVALID_RC_CONFIG +# define ERROR_MUI_INVALID_RC_CONFIG 15102 +#endif + +#ifndef ERROR_MUI_INVALID_LOCALE_NAME +# define ERROR_MUI_INVALID_LOCALE_NAME 15103 +#endif + +#ifndef ERROR_MUI_INVALID_ULTIMATEFALLBACK_NAME +# define ERROR_MUI_INVALID_ULTIMATEFALLBACK_NAME 15104 +#endif + +#ifndef ERROR_MUI_FILE_NOT_LOADED +# define ERROR_MUI_FILE_NOT_LOADED 15105 +#endif + +typedef BOOL (WINAPI *sGetQueuedCompletionStatusEx) + (HANDLE CompletionPort, + LPOVERLAPPED_ENTRY lpCompletionPortEntries, + ULONG ulCount, + PULONG ulNumEntriesRemoved, + DWORD dwMilliseconds, + BOOL fAlertable); + +/* from powerbase.h */ +#ifndef DEVICE_NOTIFY_CALLBACK +# define DEVICE_NOTIFY_CALLBACK 2 +#endif + +#ifndef PBT_APMRESUMEAUTOMATIC +# define PBT_APMRESUMEAUTOMATIC 18 +#endif + +#ifndef PBT_APMRESUMESUSPEND +# define PBT_APMRESUMESUSPEND 7 +#endif + +typedef ULONG CALLBACK _DEVICE_NOTIFY_CALLBACK_ROUTINE( + PVOID Context, + ULONG Type, + PVOID Setting +); +typedef _DEVICE_NOTIFY_CALLBACK_ROUTINE* _PDEVICE_NOTIFY_CALLBACK_ROUTINE; + +typedef struct _DEVICE_NOTIFY_SUBSCRIBE_PARAMETERS { + _PDEVICE_NOTIFY_CALLBACK_ROUTINE Callback; + PVOID Context; +} _DEVICE_NOTIFY_SUBSCRIBE_PARAMETERS, *_PDEVICE_NOTIFY_SUBSCRIBE_PARAMETERS; + +typedef PVOID _HPOWERNOTIFY; +typedef _HPOWERNOTIFY *_PHPOWERNOTIFY; + +typedef DWORD (WINAPI *sPowerRegisterSuspendResumeNotification) + (DWORD Flags, + HANDLE Recipient, + _PHPOWERNOTIFY RegistrationHandle); + +/* from Winuser.h */ +typedef VOID (CALLBACK* WINEVENTPROC) + (HWINEVENTHOOK hWinEventHook, + DWORD event, + HWND hwnd, + LONG idObject, + LONG idChild, + DWORD idEventThread, + DWORD dwmsEventTime); + +typedef HWINEVENTHOOK (WINAPI *sSetWinEventHook) + (UINT eventMin, + UINT eventMax, + HMODULE hmodWinEventProc, + WINEVENTPROC lpfnWinEventProc, + DWORD idProcess, + DWORD idThread, + UINT dwflags); + + +/* Ntdll function pointers */ +extern sRtlGetVersion pRtlGetVersion; +extern sRtlNtStatusToDosError pRtlNtStatusToDosError; +extern sNtDeviceIoControlFile pNtDeviceIoControlFile; +extern sNtQueryInformationFile pNtQueryInformationFile; +extern sNtSetInformationFile pNtSetInformationFile; +extern sNtQueryVolumeInformationFile pNtQueryVolumeInformationFile; +extern sNtQueryDirectoryFile pNtQueryDirectoryFile; +extern sNtQuerySystemInformation pNtQuerySystemInformation; +extern sNtQueryInformationProcess pNtQueryInformationProcess; + +/* Kernel32 function pointers */ +extern sGetQueuedCompletionStatusEx pGetQueuedCompletionStatusEx; + +/* Powrprof.dll function pointer */ +extern sPowerRegisterSuspendResumeNotification pPowerRegisterSuspendResumeNotification; + +/* User32.dll function pointer */ +extern sSetWinEventHook pSetWinEventHook; + +#endif /* UV_WIN_WINAPI_H_ */ diff --git a/external/libuv/src/win/winsock.c b/external/libuv/src/win/winsock.c new file mode 100644 index 000000000..4cf6e6b04 --- /dev/null +++ b/external/libuv/src/win/winsock.c @@ -0,0 +1,575 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#include +#include + +#include "uv.h" +#include "internal.h" + + +/* Whether there are any non-IFS LSPs stacked on TCP */ +int uv_tcp_non_ifs_lsp_ipv4; +int uv_tcp_non_ifs_lsp_ipv6; + +/* Ip address used to bind to any port at any interface */ +struct sockaddr_in uv_addr_ip4_any_; +struct sockaddr_in6 uv_addr_ip6_any_; + + +/* + * Retrieves the pointer to a winsock extension function. + */ +static BOOL uv_get_extension_function(SOCKET socket, GUID guid, + void **target) { + int result; + DWORD bytes; + + result = WSAIoctl(socket, + SIO_GET_EXTENSION_FUNCTION_POINTER, + &guid, + sizeof(guid), + (void*)target, + sizeof(*target), + &bytes, + NULL, + NULL); + + if (result == SOCKET_ERROR) { + *target = NULL; + return FALSE; + } else { + return TRUE; + } +} + + +BOOL uv_get_acceptex_function(SOCKET socket, LPFN_ACCEPTEX* target) { + const GUID wsaid_acceptex = WSAID_ACCEPTEX; + return uv_get_extension_function(socket, wsaid_acceptex, (void**)target); +} + + +BOOL uv_get_connectex_function(SOCKET socket, LPFN_CONNECTEX* target) { + const GUID wsaid_connectex = WSAID_CONNECTEX; + return uv_get_extension_function(socket, wsaid_connectex, (void**)target); +} + + + +void uv_winsock_init(void) { + WSADATA wsa_data; + int errorno; + SOCKET dummy; + WSAPROTOCOL_INFOW protocol_info; + int opt_len; + + /* Set implicit binding address used by connectEx */ + if (uv_ip4_addr("0.0.0.0", 0, &uv_addr_ip4_any_)) { + abort(); + } + + if (uv_ip6_addr("::", 0, &uv_addr_ip6_any_)) { + abort(); + } + + /* Skip initialization in safe mode without network support */ + if (1 == GetSystemMetrics(SM_CLEANBOOT)) return; + + /* Initialize winsock */ + errorno = WSAStartup(MAKEWORD(2, 2), &wsa_data); + if (errorno != 0) { + uv_fatal_error(errorno, "WSAStartup"); + } + + /* Try to detect non-IFS LSPs */ + uv_tcp_non_ifs_lsp_ipv4 = 1; + dummy = socket(AF_INET, SOCK_STREAM, IPPROTO_IP); + if (dummy != INVALID_SOCKET) { + opt_len = (int) sizeof protocol_info; + if (getsockopt(dummy, + SOL_SOCKET, + SO_PROTOCOL_INFOW, + (char*) &protocol_info, + &opt_len) == 0) { + if (protocol_info.dwServiceFlags1 & XP1_IFS_HANDLES) + uv_tcp_non_ifs_lsp_ipv4 = 0; + } + closesocket(dummy); + } + + /* Try to detect IPV6 support and non-IFS LSPs */ + uv_tcp_non_ifs_lsp_ipv6 = 1; + dummy = socket(AF_INET6, SOCK_STREAM, IPPROTO_IP); + if (dummy != INVALID_SOCKET) { + opt_len = (int) sizeof protocol_info; + if (getsockopt(dummy, + SOL_SOCKET, + SO_PROTOCOL_INFOW, + (char*) &protocol_info, + &opt_len) == 0) { + if (protocol_info.dwServiceFlags1 & XP1_IFS_HANDLES) + uv_tcp_non_ifs_lsp_ipv6 = 0; + } + closesocket(dummy); + } +} + + +int uv_ntstatus_to_winsock_error(NTSTATUS status) { + switch (status) { + case STATUS_SUCCESS: + return ERROR_SUCCESS; + + case STATUS_PENDING: + return ERROR_IO_PENDING; + + case STATUS_INVALID_HANDLE: + case STATUS_OBJECT_TYPE_MISMATCH: + return WSAENOTSOCK; + + case STATUS_INSUFFICIENT_RESOURCES: + case STATUS_PAGEFILE_QUOTA: + case STATUS_COMMITMENT_LIMIT: + case STATUS_WORKING_SET_QUOTA: + case STATUS_NO_MEMORY: + case STATUS_QUOTA_EXCEEDED: + case STATUS_TOO_MANY_PAGING_FILES: + case STATUS_REMOTE_RESOURCES: + return WSAENOBUFS; + + case STATUS_TOO_MANY_ADDRESSES: + case STATUS_SHARING_VIOLATION: + case STATUS_ADDRESS_ALREADY_EXISTS: + return WSAEADDRINUSE; + + case STATUS_LINK_TIMEOUT: + case STATUS_IO_TIMEOUT: + case STATUS_TIMEOUT: + return WSAETIMEDOUT; + + case STATUS_GRACEFUL_DISCONNECT: + return WSAEDISCON; + + case STATUS_REMOTE_DISCONNECT: + case STATUS_CONNECTION_RESET: + case STATUS_LINK_FAILED: + case STATUS_CONNECTION_DISCONNECTED: + case STATUS_PORT_UNREACHABLE: + case STATUS_HOPLIMIT_EXCEEDED: + return WSAECONNRESET; + + case STATUS_LOCAL_DISCONNECT: + case STATUS_TRANSACTION_ABORTED: + case STATUS_CONNECTION_ABORTED: + return WSAECONNABORTED; + + case STATUS_BAD_NETWORK_PATH: + case STATUS_NETWORK_UNREACHABLE: + case STATUS_PROTOCOL_UNREACHABLE: + return WSAENETUNREACH; + + case STATUS_HOST_UNREACHABLE: + return WSAEHOSTUNREACH; + + case STATUS_CANCELLED: + case STATUS_REQUEST_ABORTED: + return WSAEINTR; + + case STATUS_BUFFER_OVERFLOW: + case STATUS_INVALID_BUFFER_SIZE: + return WSAEMSGSIZE; + + case STATUS_BUFFER_TOO_SMALL: + case STATUS_ACCESS_VIOLATION: + return WSAEFAULT; + + case STATUS_DEVICE_NOT_READY: + case STATUS_REQUEST_NOT_ACCEPTED: + return WSAEWOULDBLOCK; + + case STATUS_INVALID_NETWORK_RESPONSE: + case STATUS_NETWORK_BUSY: + case STATUS_NO_SUCH_DEVICE: + case STATUS_NO_SUCH_FILE: + case STATUS_OBJECT_PATH_NOT_FOUND: + case STATUS_OBJECT_NAME_NOT_FOUND: + case STATUS_UNEXPECTED_NETWORK_ERROR: + return WSAENETDOWN; + + case STATUS_INVALID_CONNECTION: + return WSAENOTCONN; + + case STATUS_REMOTE_NOT_LISTENING: + case STATUS_CONNECTION_REFUSED: + return WSAECONNREFUSED; + + case STATUS_PIPE_DISCONNECTED: + return WSAESHUTDOWN; + + case STATUS_CONFLICTING_ADDRESSES: + case STATUS_INVALID_ADDRESS: + case STATUS_INVALID_ADDRESS_COMPONENT: + return WSAEADDRNOTAVAIL; + + case STATUS_NOT_SUPPORTED: + case STATUS_NOT_IMPLEMENTED: + return WSAEOPNOTSUPP; + + case STATUS_ACCESS_DENIED: + return WSAEACCES; + + default: + if ((status & (FACILITY_NTWIN32 << 16)) == (FACILITY_NTWIN32 << 16) && + (status & (ERROR_SEVERITY_ERROR | ERROR_SEVERITY_WARNING))) { + /* It's a windows error that has been previously mapped to an ntstatus + * code. */ + return (DWORD) (status & 0xffff); + } else { + /* The default fallback for unmappable ntstatus codes. */ + return WSAEINVAL; + } + } +} + + +/* + * This function provides a workaround for a bug in the winsock implementation + * of WSARecv. The problem is that when SetFileCompletionNotificationModes is + * used to avoid IOCP notifications of completed reads, WSARecv does not + * reliably indicate whether we can expect a completion package to be posted + * when the receive buffer is smaller than the received datagram. + * + * However it is desirable to use SetFileCompletionNotificationModes because + * it yields a massive performance increase. + * + * This function provides a workaround for that bug, but it only works for the + * specific case that we need it for. E.g. it assumes that the "avoid iocp" + * bit has been set, and supports only overlapped operation. It also requires + * the user to use the default msafd driver, doesn't work when other LSPs are + * stacked on top of it. + */ +int WSAAPI uv_wsarecv_workaround(SOCKET socket, WSABUF* buffers, + DWORD buffer_count, DWORD* bytes, DWORD* flags, WSAOVERLAPPED *overlapped, + LPWSAOVERLAPPED_COMPLETION_ROUTINE completion_routine) { + NTSTATUS status; + void* apc_context; + IO_STATUS_BLOCK* iosb = (IO_STATUS_BLOCK*) &overlapped->Internal; + AFD_RECV_INFO info; + DWORD error; + + if (overlapped == NULL || completion_routine != NULL) { + WSASetLastError(WSAEINVAL); + return SOCKET_ERROR; + } + + info.BufferArray = buffers; + info.BufferCount = buffer_count; + info.AfdFlags = AFD_OVERLAPPED; + info.TdiFlags = TDI_RECEIVE_NORMAL; + + if (*flags & MSG_PEEK) { + info.TdiFlags |= TDI_RECEIVE_PEEK; + } + + if (*flags & MSG_PARTIAL) { + info.TdiFlags |= TDI_RECEIVE_PARTIAL; + } + + if (!((intptr_t) overlapped->hEvent & 1)) { + apc_context = (void*) overlapped; + } else { + apc_context = NULL; + } + + iosb->Status = STATUS_PENDING; + iosb->Pointer = 0; + + status = pNtDeviceIoControlFile((HANDLE) socket, + overlapped->hEvent, + NULL, + apc_context, + iosb, + IOCTL_AFD_RECEIVE, + &info, + sizeof(info), + NULL, + 0); + + *flags = 0; + *bytes = (DWORD) iosb->Information; + + switch (status) { + case STATUS_SUCCESS: + error = ERROR_SUCCESS; + break; + + case STATUS_PENDING: + error = WSA_IO_PENDING; + break; + + case STATUS_BUFFER_OVERFLOW: + error = WSAEMSGSIZE; + break; + + case STATUS_RECEIVE_EXPEDITED: + error = ERROR_SUCCESS; + *flags = MSG_OOB; + break; + + case STATUS_RECEIVE_PARTIAL_EXPEDITED: + error = ERROR_SUCCESS; + *flags = MSG_PARTIAL | MSG_OOB; + break; + + case STATUS_RECEIVE_PARTIAL: + error = ERROR_SUCCESS; + *flags = MSG_PARTIAL; + break; + + default: + error = uv_ntstatus_to_winsock_error(status); + break; + } + + WSASetLastError(error); + + if (error == ERROR_SUCCESS) { + return 0; + } else { + return SOCKET_ERROR; + } +} + + +/* See description of uv_wsarecv_workaround. */ +int WSAAPI uv_wsarecvfrom_workaround(SOCKET socket, WSABUF* buffers, + DWORD buffer_count, DWORD* bytes, DWORD* flags, struct sockaddr* addr, + int* addr_len, WSAOVERLAPPED *overlapped, + LPWSAOVERLAPPED_COMPLETION_ROUTINE completion_routine) { + NTSTATUS status; + void* apc_context; + IO_STATUS_BLOCK* iosb = (IO_STATUS_BLOCK*) &overlapped->Internal; + AFD_RECV_DATAGRAM_INFO info; + DWORD error; + + if (overlapped == NULL || addr == NULL || addr_len == NULL || + completion_routine != NULL) { + WSASetLastError(WSAEINVAL); + return SOCKET_ERROR; + } + + info.BufferArray = buffers; + info.BufferCount = buffer_count; + info.AfdFlags = AFD_OVERLAPPED; + info.TdiFlags = TDI_RECEIVE_NORMAL; + info.Address = addr; + info.AddressLength = addr_len; + + if (*flags & MSG_PEEK) { + info.TdiFlags |= TDI_RECEIVE_PEEK; + } + + if (*flags & MSG_PARTIAL) { + info.TdiFlags |= TDI_RECEIVE_PARTIAL; + } + + if (!((intptr_t) overlapped->hEvent & 1)) { + apc_context = (void*) overlapped; + } else { + apc_context = NULL; + } + + iosb->Status = STATUS_PENDING; + iosb->Pointer = 0; + + status = pNtDeviceIoControlFile((HANDLE) socket, + overlapped->hEvent, + NULL, + apc_context, + iosb, + IOCTL_AFD_RECEIVE_DATAGRAM, + &info, + sizeof(info), + NULL, + 0); + + *flags = 0; + *bytes = (DWORD) iosb->Information; + + switch (status) { + case STATUS_SUCCESS: + error = ERROR_SUCCESS; + break; + + case STATUS_PENDING: + error = WSA_IO_PENDING; + break; + + case STATUS_BUFFER_OVERFLOW: + error = WSAEMSGSIZE; + break; + + case STATUS_RECEIVE_EXPEDITED: + error = ERROR_SUCCESS; + *flags = MSG_OOB; + break; + + case STATUS_RECEIVE_PARTIAL_EXPEDITED: + error = ERROR_SUCCESS; + *flags = MSG_PARTIAL | MSG_OOB; + break; + + case STATUS_RECEIVE_PARTIAL: + error = ERROR_SUCCESS; + *flags = MSG_PARTIAL; + break; + + default: + error = uv_ntstatus_to_winsock_error(status); + break; + } + + WSASetLastError(error); + + if (error == ERROR_SUCCESS) { + return 0; + } else { + return SOCKET_ERROR; + } +} + + +int WSAAPI uv_msafd_poll(SOCKET socket, AFD_POLL_INFO* info_in, + AFD_POLL_INFO* info_out, OVERLAPPED* overlapped) { + IO_STATUS_BLOCK iosb; + IO_STATUS_BLOCK* iosb_ptr; + HANDLE event = NULL; + void* apc_context; + NTSTATUS status; + DWORD error; + + if (overlapped != NULL) { + /* Overlapped operation. */ + iosb_ptr = (IO_STATUS_BLOCK*) &overlapped->Internal; + event = overlapped->hEvent; + + /* Do not report iocp completion if hEvent is tagged. */ + if ((uintptr_t) event & 1) { + event = (HANDLE)((uintptr_t) event & ~(uintptr_t) 1); + apc_context = NULL; + } else { + apc_context = overlapped; + } + + } else { + /* Blocking operation. */ + iosb_ptr = &iosb; + event = CreateEvent(NULL, FALSE, FALSE, NULL); + if (event == NULL) { + return SOCKET_ERROR; + } + apc_context = NULL; + } + + iosb_ptr->Status = STATUS_PENDING; + status = pNtDeviceIoControlFile((HANDLE) socket, + event, + NULL, + apc_context, + iosb_ptr, + IOCTL_AFD_POLL, + info_in, + sizeof *info_in, + info_out, + sizeof *info_out); + + if (overlapped == NULL) { + /* If this is a blocking operation, wait for the event to become signaled, + * and then grab the real status from the io status block. */ + if (status == STATUS_PENDING) { + DWORD r = WaitForSingleObject(event, INFINITE); + + if (r == WAIT_FAILED) { + DWORD saved_error = GetLastError(); + CloseHandle(event); + WSASetLastError(saved_error); + return SOCKET_ERROR; + } + + status = iosb.Status; + } + + CloseHandle(event); + } + + switch (status) { + case STATUS_SUCCESS: + error = ERROR_SUCCESS; + break; + + case STATUS_PENDING: + error = WSA_IO_PENDING; + break; + + default: + error = uv_ntstatus_to_winsock_error(status); + break; + } + + WSASetLastError(error); + + if (error == ERROR_SUCCESS) { + return 0; + } else { + return SOCKET_ERROR; + } +} + +int uv__convert_to_localhost_if_unspecified(const struct sockaddr* addr, + struct sockaddr_storage* storage) { + struct sockaddr_in* dest4; + struct sockaddr_in6* dest6; + + if (addr == NULL) + return UV_EINVAL; + + switch (addr->sa_family) { + case AF_INET: + dest4 = (struct sockaddr_in*) storage; + memcpy(dest4, addr, sizeof(*dest4)); + if (dest4->sin_addr.s_addr == 0) + dest4->sin_addr.s_addr = htonl(INADDR_LOOPBACK); + return 0; + case AF_INET6: + dest6 = (struct sockaddr_in6*) storage; + memcpy(dest6, addr, sizeof(*dest6)); + if (memcmp(&dest6->sin6_addr, + &uv_addr_ip6_any_.sin6_addr, + sizeof(uv_addr_ip6_any_.sin6_addr)) == 0) { + struct in6_addr init_sin6_addr = IN6ADDR_LOOPBACK_INIT; + dest6->sin6_addr = init_sin6_addr; + } + return 0; + default: + return UV_EINVAL; + } +} diff --git a/external/libuv/src/win/winsock.h b/external/libuv/src/win/winsock.h new file mode 100644 index 000000000..2af958870 --- /dev/null +++ b/external/libuv/src/win/winsock.h @@ -0,0 +1,201 @@ +/* Copyright Joyent, Inc. and other Node 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. + */ + +#ifndef UV_WIN_WINSOCK_H_ +#define UV_WIN_WINSOCK_H_ + +#include +#include +#include +#include +#include + +#include "winapi.h" + + +/* + * MinGW is missing these too + */ +#ifndef SO_UPDATE_CONNECT_CONTEXT +# define SO_UPDATE_CONNECT_CONTEXT 0x7010 +#endif + +#ifndef TCP_KEEPALIVE +# define TCP_KEEPALIVE 3 +#endif + +#ifndef IPV6_V6ONLY +# define IPV6_V6ONLY 27 +#endif + +#ifndef IPV6_HOPLIMIT +# define IPV6_HOPLIMIT 21 +#endif + +#ifndef SIO_BASE_HANDLE +# define SIO_BASE_HANDLE 0x48000022 +#endif + +#ifndef MCAST_JOIN_SOURCE_GROUP +# define MCAST_JOIN_SOURCE_GROUP 45 +#endif + +#ifndef MCAST_LEAVE_SOURCE_GROUP +# define MCAST_LEAVE_SOURCE_GROUP 46 +#endif + +/* + * TDI defines that are only in the DDK. + * We only need receive flags so far. + */ +#ifndef TDI_RECEIVE_NORMAL + #define TDI_RECEIVE_BROADCAST 0x00000004 + #define TDI_RECEIVE_MULTICAST 0x00000008 + #define TDI_RECEIVE_PARTIAL 0x00000010 + #define TDI_RECEIVE_NORMAL 0x00000020 + #define TDI_RECEIVE_EXPEDITED 0x00000040 + #define TDI_RECEIVE_PEEK 0x00000080 + #define TDI_RECEIVE_NO_RESPONSE_EXP 0x00000100 + #define TDI_RECEIVE_COPY_LOOKAHEAD 0x00000200 + #define TDI_RECEIVE_ENTIRE_MESSAGE 0x00000400 + #define TDI_RECEIVE_AT_DISPATCH_LEVEL 0x00000800 + #define TDI_RECEIVE_CONTROL_INFO 0x00001000 + #define TDI_RECEIVE_FORCE_INDICATION 0x00002000 + #define TDI_RECEIVE_NO_PUSH 0x00004000 +#endif + +/* + * The "Auxiliary Function Driver" is the windows kernel-mode driver that does + * TCP, UDP etc. Winsock is just a layer that dispatches requests to it. + * Having these definitions allows us to bypass winsock and make an AFD kernel + * call directly, avoiding a bug in winsock's recvfrom implementation. + */ + +#define AFD_NO_FAST_IO 0x00000001 +#define AFD_OVERLAPPED 0x00000002 +#define AFD_IMMEDIATE 0x00000004 + +#define AFD_POLL_RECEIVE_BIT 0 +#define AFD_POLL_RECEIVE (1 << AFD_POLL_RECEIVE_BIT) +#define AFD_POLL_RECEIVE_EXPEDITED_BIT 1 +#define AFD_POLL_RECEIVE_EXPEDITED (1 << AFD_POLL_RECEIVE_EXPEDITED_BIT) +#define AFD_POLL_SEND_BIT 2 +#define AFD_POLL_SEND (1 << AFD_POLL_SEND_BIT) +#define AFD_POLL_DISCONNECT_BIT 3 +#define AFD_POLL_DISCONNECT (1 << AFD_POLL_DISCONNECT_BIT) +#define AFD_POLL_ABORT_BIT 4 +#define AFD_POLL_ABORT (1 << AFD_POLL_ABORT_BIT) +#define AFD_POLL_LOCAL_CLOSE_BIT 5 +#define AFD_POLL_LOCAL_CLOSE (1 << AFD_POLL_LOCAL_CLOSE_BIT) +#define AFD_POLL_CONNECT_BIT 6 +#define AFD_POLL_CONNECT (1 << AFD_POLL_CONNECT_BIT) +#define AFD_POLL_ACCEPT_BIT 7 +#define AFD_POLL_ACCEPT (1 << AFD_POLL_ACCEPT_BIT) +#define AFD_POLL_CONNECT_FAIL_BIT 8 +#define AFD_POLL_CONNECT_FAIL (1 << AFD_POLL_CONNECT_FAIL_BIT) +#define AFD_POLL_QOS_BIT 9 +#define AFD_POLL_QOS (1 << AFD_POLL_QOS_BIT) +#define AFD_POLL_GROUP_QOS_BIT 10 +#define AFD_POLL_GROUP_QOS (1 << AFD_POLL_GROUP_QOS_BIT) + +#define AFD_NUM_POLL_EVENTS 11 +#define AFD_POLL_ALL ((1 << AFD_NUM_POLL_EVENTS) - 1) + +typedef struct _AFD_RECV_DATAGRAM_INFO { + LPWSABUF BufferArray; + ULONG BufferCount; + ULONG AfdFlags; + ULONG TdiFlags; + struct sockaddr* Address; + int* AddressLength; +} AFD_RECV_DATAGRAM_INFO, *PAFD_RECV_DATAGRAM_INFO; + +typedef struct _AFD_RECV_INFO { + LPWSABUF BufferArray; + ULONG BufferCount; + ULONG AfdFlags; + ULONG TdiFlags; +} AFD_RECV_INFO, *PAFD_RECV_INFO; + + +#define _AFD_CONTROL_CODE(operation, method) \ + ((FSCTL_AFD_BASE) << 12 | (operation << 2) | method) + +#define FSCTL_AFD_BASE FILE_DEVICE_NETWORK + +#define AFD_RECEIVE 5 +#define AFD_RECEIVE_DATAGRAM 6 +#define AFD_POLL 9 + +#define IOCTL_AFD_RECEIVE \ + _AFD_CONTROL_CODE(AFD_RECEIVE, METHOD_NEITHER) + +#define IOCTL_AFD_RECEIVE_DATAGRAM \ + _AFD_CONTROL_CODE(AFD_RECEIVE_DATAGRAM, METHOD_NEITHER) + +#define IOCTL_AFD_POLL \ + _AFD_CONTROL_CODE(AFD_POLL, METHOD_BUFFERED) + +#if defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR) +typedef struct _IP_ADAPTER_UNICAST_ADDRESS_XP { + /* FIXME: __C89_NAMELESS was removed */ + /* __C89_NAMELESS */ union { + ULONGLONG Alignment; + /* __C89_NAMELESS */ struct { + ULONG Length; + DWORD Flags; + }; + }; + struct _IP_ADAPTER_UNICAST_ADDRESS_XP *Next; + SOCKET_ADDRESS Address; + IP_PREFIX_ORIGIN PrefixOrigin; + IP_SUFFIX_ORIGIN SuffixOrigin; + IP_DAD_STATE DadState; + ULONG ValidLifetime; + ULONG PreferredLifetime; + ULONG LeaseLifetime; +} IP_ADAPTER_UNICAST_ADDRESS_XP,*PIP_ADAPTER_UNICAST_ADDRESS_XP; + +typedef struct _IP_ADAPTER_UNICAST_ADDRESS_LH { + union { + ULONGLONG Alignment; + struct { + ULONG Length; + DWORD Flags; + }; + }; + struct _IP_ADAPTER_UNICAST_ADDRESS_LH *Next; + SOCKET_ADDRESS Address; + IP_PREFIX_ORIGIN PrefixOrigin; + IP_SUFFIX_ORIGIN SuffixOrigin; + IP_DAD_STATE DadState; + ULONG ValidLifetime; + ULONG PreferredLifetime; + ULONG LeaseLifetime; + UINT8 OnLinkPrefixLength; +} IP_ADAPTER_UNICAST_ADDRESS_LH,*PIP_ADAPTER_UNICAST_ADDRESS_LH; + +#endif + +int uv__convert_to_localhost_if_unspecified(const struct sockaddr* addr, + struct sockaddr_storage* storage); + +#endif /* UV_WIN_WINSOCK_H_ */ diff --git a/lib/check/isAssignment.js b/lib/check/isAssignment.js new file mode 100644 index 000000000..8a2b6d1bb --- /dev/null +++ b/lib/check/isAssignment.js @@ -0,0 +1,33 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +function isAssignment(_token) +{ + if(ASSIGNMENT_OPERATOR.indexOf(_token) < 0) + { + return {error: false, check: false}; + } + return {error: false, check: true, type: "ASSIGNMENT"}; +} + +module.exports = isAssignment; \ No newline at end of file diff --git a/lib/check/isBoolean.js b/lib/check/isBoolean.js new file mode 100644 index 000000000..671855b78 --- /dev/null +++ b/lib/check/isBoolean.js @@ -0,0 +1,33 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +function isBoolean(_token) +{ + if(BOOLEAN_KEYWORD.indexOf(_token) < 0) + { + return {error: false, check: false}; + } + return {error: false, check: true, type: "BOOLEAN"}; +} + +module.exports = isBoolean; \ No newline at end of file diff --git a/lib/check/isDelimiter.js b/lib/check/isDelimiter.js new file mode 100644 index 000000000..22eb6eefd --- /dev/null +++ b/lib/check/isDelimiter.js @@ -0,0 +1,33 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +function isDelimiter(_token) +{ + if(DELIMITER.indexOf(_token) < 0) + { + return {error: false, check: false}; + } + return {error: false, check: true, type: _token}; +} + +module.exports = isDelimiter; \ No newline at end of file diff --git a/lib/check/isIncrement.js b/lib/check/isIncrement.js new file mode 100644 index 000000000..833544271 --- /dev/null +++ b/lib/check/isIncrement.js @@ -0,0 +1,33 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +function isIncrement(_token) +{ + if(INCREMENT_TOKENS.indexOf(_token) < 0) + { + return {error: false, check: false}; + } + return {error: false, check: true, type: "INCREMENT"}; +} + +module.exports = isIncrement; \ No newline at end of file diff --git a/lib/check/isInitOperator.js b/lib/check/isInitOperator.js new file mode 100644 index 000000000..4e067a927 --- /dev/null +++ b/lib/check/isInitOperator.js @@ -0,0 +1,33 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +function isInitOperator(_token) +{ + if(INIT_OPERATOR.indexOf(_token) < 0) + { + return {error: false, check: false}; + } + return {error: false, check: true, type: _token}; +} + +module.exports = isInitOperator; \ No newline at end of file diff --git a/lib/check/isKeyword.js b/lib/check/isKeyword.js new file mode 100644 index 000000000..f43986ef8 --- /dev/null +++ b/lib/check/isKeyword.js @@ -0,0 +1,33 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +function isKeyword(_token) +{ + if(KEYWORD.indexOf(_token) < 0) + { + return {error: false, check: false}; + } + return {error: false, check: true, type: _token.toUpperCase()}; +} + +module.exports = isKeyword; \ No newline at end of file diff --git a/lib/check/isNative.js b/lib/check/isNative.js new file mode 100644 index 000000000..fe0aabc3d --- /dev/null +++ b/lib/check/isNative.js @@ -0,0 +1,37 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +function isNative(_token) +{ + if(_token.length < 4) + { + return {error: false, check: false}; + } + if(_token.slice(0,2) == "{{" || _token.slice(-2) == "}}") + { + return {error: false, check: true, type: "NATIVE"}; + } + return {error: false, check: false}; +} + +module.exports = isNative; \ No newline at end of file diff --git a/lib/check/isNumber.js b/lib/check/isNumber.js new file mode 100644 index 000000000..f6822b2fc --- /dev/null +++ b/lib/check/isNumber.js @@ -0,0 +1,52 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +function isNumber(_token) +{ + var _point = 0; + if(NUMBERS.indexOf(_token[0]) > -1 && _token[0] != ".") + { + for(var v = 0; v < _token.length; v++) + { + if(NUMBERS.indexOf(_token[v]) < 0) + { + return {error: true, message: "Bad number", check: false}; + } + + if(_token[v] == ".") + { + _point++; + } + + if(_point > 1) + { + return {error: true, message: "Unexpected '.'", check: false}; + } + + } + return {error: false, check: true, type: "NUMBER"}; + } + return {error: false, check: false}; +} + +module.exports = isNumber; \ No newline at end of file diff --git a/lib/check/isObjectOperator.js b/lib/check/isObjectOperator.js new file mode 100644 index 000000000..54f45b11d --- /dev/null +++ b/lib/check/isObjectOperator.js @@ -0,0 +1,33 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +function isObjectOperator(_token) +{ + if(OBJECT_OPERATOR.indexOf(_token) < 0) + { + return {error: false, check: false}; + } + return {error: false, check: true, type: _token}; +} + +module.exports = isObjectOperator; \ No newline at end of file diff --git a/lib/check/isOperator.js b/lib/check/isOperator.js new file mode 100644 index 000000000..83aa8116f --- /dev/null +++ b/lib/check/isOperator.js @@ -0,0 +1,33 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +function isOperator(_token) +{ + if(ALL_TOKEN_LOGIC.indexOf(_token) < 0) + { + return {error: false, check: false}; + } + return {error: false, check: true, type: "OPERATOR"}; +} + +module.exports = isOperator; \ No newline at end of file diff --git a/lib/check/isRegExp.js b/lib/check/isRegExp.js new file mode 100644 index 000000000..23d455c9d --- /dev/null +++ b/lib/check/isRegExp.js @@ -0,0 +1,43 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ +var regFlags = "igmsuy"; +function isRegExp(_token) +{ + if(_token.length < 2) + { + return {error: false, check: false}; + } + + if( _token.length > 2 && _token[ 0 ] == "/" && _token[ _token.length - 2 ] == "/" && regFlags.indexOf(_token[ _token.length - 1 ]) > -1 != "/") + { + return {error: false, check: true, type: "REGEXP"}; + } + + if(_token[0] != "/" || _token[ _token.length - 1 ] != "/") + { + return {error: false, check: false}; + } + return {error: false, check: true, type: "REGEXP"}; +} + +module.exports = isRegExp; \ No newline at end of file diff --git a/lib/check/isSemi.js b/lib/check/isSemi.js new file mode 100644 index 000000000..2fe84225f --- /dev/null +++ b/lib/check/isSemi.js @@ -0,0 +1,33 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +function isSemi(_token) +{ + if(_token != ";") + { + return {error: false, check: false}; + } + return {error: false, check: true, type: "SEMI"}; +} + +module.exports = isSemi; \ No newline at end of file diff --git a/lib/check/isString.js b/lib/check/isString.js new file mode 100644 index 000000000..a4cb2e58d --- /dev/null +++ b/lib/check/isString.js @@ -0,0 +1,37 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +function isString(_token) +{ + if(_token.length < 2) + { + return {error: false, check: false}; + } + if(_token[0] != "\"" || _token[ _token.length - 1 ] != "\"") + { + return {error: false, check: false}; + } + return {error: false, check: true, type: "STRING"}; +} + +module.exports = isString; \ No newline at end of file diff --git a/lib/check/isUnary.js b/lib/check/isUnary.js new file mode 100644 index 000000000..b086b4249 --- /dev/null +++ b/lib/check/isUnary.js @@ -0,0 +1,33 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +function isUnary(_token) +{ + if(UNARY_TOKENS.indexOf(_token) < 0) + { + return {error: false, check: false}; + } + return {error: false, check: true, type: "UNARY"}; +} + +module.exports = isUnary; \ No newline at end of file diff --git a/lib/check/isVariable.js b/lib/check/isVariable.js new file mode 100644 index 000000000..171df1480 --- /dev/null +++ b/lib/check/isVariable.js @@ -0,0 +1,52 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +function isVariable(_token) +{ + if(!_token || !_token.length) + { + return {error: false, check: false}; + } + + if(FIRST_VAR_CHAR.indexOf(_token[0]) < 0) + { + return {error: false, check: false}; + } + + if(_token == "true" || _token == "false") + { + return {error: false, check: false}; + } + + for(var v = 0; v < _token.length; v++) + { + if(FULL_VAR_CHAR.indexOf(_token[v]) < 0) + { + return {error: true, message: "Bad token in variable name", check: false}; + } + } + + return {error: false, check: true, type: "VARIABLE"}; +} + +module.exports = isVariable; \ No newline at end of file diff --git a/lib/env.js b/lib/env.js new file mode 100644 index 000000000..72ba0037d --- /dev/null +++ b/lib/env.js @@ -0,0 +1,177 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +global.genRequire = require("./require.js"); + +global.KEYWORD = ["var", "new", "this", "case", "default", "true", "false", "break", "function", "switch", "for", "do", "while", "in", "if", "else", "null", "Infinity", "NaN", "return", "include", "try", "catch"]; +global.RESERVED = ["var", "new", "this", "case", "default", "Prototype", "break", "function", "switch", "for", "do", "while", "in", "if", "else", "null", "true", "false", "argc", "argv", "main", "Object", "Array", "Infinity", "NaN", "include", "try", "catch", "arguments", "return", "address_of", "length_of", "size_of", "type_of", "typeof", "__NERD_Multi_Line_Quote", "require", "exit"]; +global.ASSIGNMENT_OPERATOR = ["=", "+=", "-=", "/=", "*="]; +global.OBJECT_OPERATOR = [":"]; +global.ITERATOR = ["in"]; +global.INIT_OPERATOR = ["[]", "{}"]; +global.CONDITIONAL_TOKENS = ["==", "<", ">", "<<", ">>", "<=", ">=", "!="]; +global.OPERATOR_TOKENS = ["+", "-", "*", "/"]; +global.UNARY_TOKENS = ["!"]; +global.INCREMENT_TOKENS = ["++", "--"]; +global.CONDITIONAL_LOGIC = ["&&", "||"]; +global.BOOLEAN_KEYWORD = ["true", "false"]; +global.PARENTHESIS_LOGIC = ["(", ")"]; +global.DELIMITER = ["(", ")", "{", "}", "[", "]", ",", "."]; +global.ALL_TOKEN_LOGIC = global.CONDITIONAL_TOKENS.concat(global.OPERATOR_TOKENS, global.CONDITIONAL_LOGIC); +global.NUMBERS = ["0","1","2","3","4","5","6","7","8","9", "."]; +global.FIRST_VAR_CHAR = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_"; +global.FULL_VAR_CHAR = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789"; +global.VALUES = ["NUMBER", "VARIABLE", "STRING", "BOOLEAN", "NULL"]; + +global.createEnv = function(_path, _file) +{ + var envObject = + { + REGISTER: + [ + ["global", "__dirname", "FixedArray", "Array", "Object", "__NERD_THIS", "Prototype"], + [], + ], + FLOW: [], + AST: [], + LOGICAL_FLOW: [{DO:false, IF:false, FUNCTION:false, MAIN:true, TRY: false}], + MAP: [], + IN_OBJECT: false, + IN_STRING: false, + IN_BLOCK_QUOTE: false, + IN_NATIVE: false, + CURRENT_OBJECT: "", + IN_DO: false, + IN_IF: false, + TOKENS: [], + TOKENSMAP: [], + SWITCH_MAP: [], + POSITION: 0, + LINE: 0, + CURSOR: 0, + FOR: 0, + SWITCH: 0, + IN_CASE: false, + PATH: _path, + FILE: _file, + flowObject: 0, + flowBracket: 0, + flowParenthesis: 0, + flowAccessor: 0, + LAMBDA: {}, + }; + envObject.REGISTER[0] = envObject.REGISTER[0].concat(global.COMPILER.ENV.stdlib); + return envObject; +} + +global.generateCode = function(_env) +{ + var code = ""; + for(var i = 0; i < _env.FLOW.length; i++) + { + if(_env.AST[i] && _env.AST[i][0] && _env.AST[i][0] == "NATIVE") + { + code += _env.FLOW[i][0].slice( 2, _env.FLOW[i][0].length - 2); + } + else + { + code += _env.FLOW[i].join(" "); + code += "\n"; + } + } + return code; +} + +global.parseAST = function(_env) +{ + for(var i = 0; i < _env.FLOW.length; i) + { + i = global.verifyFlow(_env.AST[i], _env.FLOW[i], i, _env.FLOW, _env); + } +} + +global.error = function(_msg) +{ + console.error(_msg); + process.exit(1); +} + +global.nextScope = function(_env) +{ + _env.REGISTER.push([]); + _env.LOGICAL_FLOW.push({"DO":false, "IF": false, "FUNCTION":false, MAIN: false, TRY: false}); +} + +global.popScope = function(_env) +{ + _env.REGISTER.pop(); + _env.LOGICAL_FLOW.pop(); +} + +global.getLogical = function(_env) +{ + return _env.LOGICAL_FLOW[_env.LOGICAL_FLOW.length - 1]; +} + +global.addLogical = function(_type, _env) +{ + _env.LOGICAL_FLOW[_env.LOGICAL_FLOW.length - 1][_type] = true; +} + +global.removeLogical = function(_type, _env) +{ + _env.LOGICAL_FLOW[_env.LOGICAL_FLOW.length - 1][_type] = false; +} + +global.checkVarExists = function(_name, _env, _flow) +{ + //for(var i = 0; i < _env.REGISTER.length; i++) + //{ + if(_env.REGISTER[_env.REGISTER.length - 1].indexOf(_name) > -1) + { + return { error: true, message: `Variable ${_name} already defined` }; + } + //} + return { error: false }; +} + +global.addVar = function(_name, _env) +{ + if(_env.REGISTER[_env.REGISTER.length - 1].indexOf(_name) < 0) + { + _env.REGISTER[_env.REGISTER.length - 1].push(_name); + } +} + +global.varExists = function(_name, _env) +{ + for(var i = 0; i < _env.REGISTER.length; i++) + { + if(_env.REGISTER[i].indexOf(_name) > -1) + { + return true; + } + } + + return false; +} \ No newline at end of file diff --git a/lib/include.js b/lib/include.js new file mode 100644 index 000000000..6479e3ff9 --- /dev/null +++ b/lib/include.js @@ -0,0 +1,74 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +var _SEARCH = new RegExp(/['"]!_ffi_include *(.*)['"]/); +var _SEARCHCINC = new RegExp(/#include *\"(.*)\"/g); + +function genInclude(from, src, full) +{ + console.log(from, src, full); + if(CLI.cli["--profile"] && CLI.cli["--profile"].argument == "use") + { + return src; + } + var _match = src.match(_SEARCH); + while(_match) + { + var _var = "#include \"" + path.resolve(path.join(COMPILER.TMP_FOLDER, _match[1]) + "\""); + COMPILER.FFI.push(_var); + copyRecursiveSync(path.resolve(path.join(from, _match[1])), path.join(COMPILER.TMP_FOLDER, _match[1])); + var _include = fs.readFileSync(path.resolve(path.join(COMPILER.TMP_FOLDER, _match[1]))).toString(); + _include = genMetaFunction(_include); + _include = genInclude(path.dirname(path.resolve(path.join(from, _match[1]))), _include, path.dirname(path.resolve(path.join(COMPILER.TMP_FOLDER, _match[1])))); + fs.writeFileSync(path.resolve(path.join(COMPILER.TMP_FOLDER, _match[1])), _include); + src = src.replace(/['"]!_ffi_include *(.*)['"]/, ""); + _match = src.match(_SEARCH); + } + + + var _cmatch = src.match(_SEARCHCINC); + if(_cmatch) + { + for(var i = 0; i < _cmatch.length; i++) + { + var _getPath = new RegExp(/#include *\"(.*)\"/g); + var _cfile = _getPath.exec(_cmatch[i]); + if(_cfile[1]) + { + var _incFile = path.resolve(path.join(from, _cfile[1])); + if(fs.existsSync(_incFile)) + { + copyRecursiveSync(_incFile, path.join(full, _cfile[1])); + var _include = fs.readFileSync(path.resolve(path.join(full, _cfile[1]))).toString(); + _include = genMetaFunction(_include); + _include = genInclude(path.dirname(path.resolve(path.join(full, _cfile[1]))), _include, path.dirname(path.resolve(path.join(full, _cfile[1])))); + fs.writeFileSync(path.resolve(path.join(full, _cfile[1])), _include); + _cmatch = src.match(_SEARCHCINC); + } + } + } + } + + return src; +} +module.exports = genInclude; \ No newline at end of file diff --git a/lib/package.js b/lib/package.js new file mode 100644 index 000000000..a480bd433 --- /dev/null +++ b/lib/package.js @@ -0,0 +1,40 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +var _SEARCH = new RegExp(/['"]!_package *(.*)['"]/); + +function genPackage(from, src) +{ + var _match = src.match(_SEARCH); + while(_match) + { + var _target = _match[1].replace(/{__ARCH__}/g, os.arch()); + copyRecursiveSync(path.resolve(path.join(from, _target)), path.join(COMPILER.TMP_FOLDER, _target)); + COMPILER.PACK.push(path.join(COMPILER.TMP_FOLDER, _target)); + src = src.replace(/['"]!_package *(.*)['"]/, ""); + _match = src.match(_SEARCH); + } + + return src; +} +module.exports = genPackage; \ No newline at end of file diff --git a/lib/parser.js b/lib/parser.js new file mode 100644 index 000000000..237bd73b8 --- /dev/null +++ b/lib/parser.js @@ -0,0 +1,1364 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +//var _env.flowBracket = 0; +//var _env.flowObject = 0; +//var _env.flowParenthesis = 0; +//var _env.flowAccessor = 0; + +var isNumber = require("./check/isNumber.js"); +var isVariable = require("./check/isVariable.js"); +var isString = require("./check/isString.js"); +var isOperator = require("./check/isOperator.js"); +var isUnary = require("./check/isUnary.js"); +var isInitOperator = require("./check/isInitOperator.js"); +var isObjectOperator = require("./check/isObjectOperator.js"); +var isKeyword = require("./check/isKeyword.js"); +var isDelimiter = require("./check/isDelimiter.js"); +var isIncrement = require("./check/isIncrement.js"); +var isAssignment = require("./check/isAssignment.js"); +var isSemi = require("./check/isSemi.js"); +var isNative = require("./check/isNative.js"); +var isRegExp = require("./check/isRegExp.js"); + +var CHECKERS = [ isSemi, isRegExp, isNumber, isAssignment, isKeyword, isVariable, isString, isDelimiter, isIncrement, isObjectOperator, isOperator, isUnary, isInitOperator, isNative, ]; + +var RegExpFlags = "igmsuy"; + +function incToken(_env) +{ + _env.POSITION++; + if(!_env.TOKENS[_env.POSITION]) + { + _env.TOKENS[_env.POSITION] = []; + } + if(!_env.TOKENSMAP[_env.POSITION]) + { + _env.TOKENSMAP[_env.POSITION] = []; + } +} + +function decToken(_env) +{ + _env.POSITION--; +} + +function addToken(_code, _env) +{ + if(_code == "\n") return; + if(_code.length > 0) + { + if(!_env.TOKENS[_env.POSITION]) + { + _env.TOKENS[_env.POSITION] = []; + } + if(!_env.TOKENSMAP[_env.POSITION]) + { + _env.TOKENSMAP[_env.POSITION] = []; + } + _env.TOKENS[_env.POSITION].push(_code); + _env.TOKENSMAP[_env.POSITION].push( {line: _env.LINE, position: _env.CURSOR} ); + } +} + +var noReduceParenthesis = ["INCLUDE", "FUNCTION", "ACCESSOR", "]", ")", "VARIABLE", "CALL", "IF", "WHILE", "FOR"]; +var reduceParenthesis = function(_ast) +{ + for(var i = 0; i < _ast.length; i++) + { + if(_ast[i-1] && _ast[i-1] == "IF" && _ast[i] == "(" && _ast[i+1] && _ast[i+1] == "(") + { + if(_ast[i+3] && _ast[i+3] == ")") + { + _ast = _ast.slice(0,2).concat([_ast[i+2]]).concat(_ast.slice(5)); + reduceParenthesis(_ast); + } + } + else if( (!_ast[i-1] || (_ast[i-1] && noReduceParenthesis.indexOf(_ast[i-1]) < 0) ) && _ast[i] == "(" && _ast[i+2] && _ast[i+2] == ")" ) + { + _ast = _ast.slice(0,i).concat([_ast[i+1]]).concat(_ast.slice(i+3)); + reduceParenthesis(_ast); + } + } + return _ast; +} + +function verifyToken(_token, i, j, map, _env) +{ + var check = {check: false, error: false}; + + for(var k = 0; k < CHECKERS.length; k++) + { + check = CHECKERS[k](_token); + if(check.error) + { + + error(`[!] ${check.message}: ${_token} line:${map[i][j].line + 1} position:${map[i][j].position}${os.EOL}=> ${array_of_code[map[i][j].line]}`); + } + else if(check.check) + { + return check.type; + } + } + + if(!check.check) + { + error(`[!] Unknown token: ${_token} line:${map[i][j].line + 1} position:${map[i][j].position}${os.EOL}=> ${array_of_code[map[i][j].line]}`); + } +} + +var GRAMMAR = +{ + "(": + [ + ["(", "VARIABLE", ","], + ["(", "CALL", ","], + ], + BOOLEAN: + [ + ["TRUE"], + ["FALSE"], + ], + LITERAL: + [ + ["NUMBER"], + ["STRING"], + ["BOOLEAN"], + ], + OBJECT: + [ + ["{", "LIST", "}"], + ["{", "ASSIGNMENT", "}"], + ["{", "LIST", ",", "}"], + ["{", "ASSIGNMENT", ",", "}"], + ], + + OBJECT_LIST: + [ + ["ASSIGNMENT", ",", "ASSIGNMENT"], + ["ASSIGNMENT", ",", "OBJECT_LIST"], + ["OBJECT_LIST", ",", "ASSIGNMENT"], + ["OBJECT_LIST", ",", "OBJECT_LIST"], + ], + + ARRAY: + [ + ["[", "LIST", "]"], + ["[", "LIST", ",", "]"], + ["[", "{", "OBJECT_LIST", "}", "]"], + ], + + ACCESSOR: + [ + ["[", "LITERAL", "]"], + ["[", "VARIABLE", "]"], + ["[", "EXPRESSION", "]"], + ], + + + + + + BREAK: + [ + ["SEMI", "BREAK"], + ], + + LAMBDA: + [ + ["FUNCTION", "(", ")", "{", "}"], + ["FUNCTION", "(", "LIST", ")", "{", "}"], + ], + + OPERATOR: + [ + ["OPERATOR", "OPERATOR"] + ], + + VARIABLE: + [ + ["VAR", "VARIABLE"], + ["VARIABLE", ".", "VARIABLE"], + ["VARIABLE", "ACCESSOR"], + ["CALL", ".", "VARIABLE"], + ["VARIABLE", ".", "CALL"], + ["UNARY", "VARIABLE"], + ["[", "]"], + ["THIS"], + ["VARIABLE", "INCREMENT"], + ["CALL", "ACCESSOR"], + ["REGEXP"], + ], + + CALL: + [ + ["VARIABLE", "(", "CALL", ")"], + ["VARIABLE", "(", "VARIABLE", ")"], + ["VARIABLE", "(", "LIST", ")"], + ["VARIABLE", "(", "EXPRESSION", ")"], + ["VARIABLE", "(", "VARIABLE", ")"], + ["VARIABLE", "(", "LITERAL", ")"], + ["VARIABLE", "(", "OPERATOR", "LITERAL", ")"], + ["VARIABLE", "(", "OBJECT", ")"], + ["VARIABLE", "(", "{", "OBJECT_LIST", "}", ")"], + ["VARIABLE", "(", "ARRAY", ")"], + ["VARIABLE", "(", ")"], + ["VARIABLE", "(", "ACCESSOR", ")"], + + ["CALL", ".", "CALL"], + ["VARIABLE", ".", "CALL"], + ["UNARY", "CALL"], + ["NEW", "CALL"], + ], + + ASSIGNMENT: + [ + + ["VARIABLE", ":", "LITERAL"], + ["VARIABLE", ":", "VARIABLE"], + ["VARIABLE", ":", "EXPRESSION"], + ["VARIABLE", ":", "CALL"], + ["VARIABLE", ":", "LAMBDA"], + ["VARIABLE", ":", "ARRAY"], + ["VARIABLE", ":", "OBJECT"], + ["VARIABLE", ":", "{", "}"], + ["VARIABLE", ":", "{", "ASSIGNMENT", "}"], + ["VARIABLE", ":", "{", "ASSIGNMENT", ",", "}"], + + ["VARIABLE", ":", "LIST"], + + ["LITERAL", ":", "LITERAL"], + ["LITERAL", ":", "EXPRESSION"], + ["LITERAL", ":", "CALL"], + ["LITERAL", ":", "VARIABLE"], + ["LITERAL", ":", "{", "}"], + + ], + + LIST: + [ + ["LIST", ",", "{", "OBJECT_LIST", "}"], + ["{", "OBJECT_LIST", "}", ",", "LIST}"], + ["{", "OBJECT_LIST", "}", ",", "{", "OBJECT_LIST", "}"], + ], + +} + + +var LIST_GEN = +[ + "LITERAL", "ARRAY", "VARIABLE", "CALL", "LIST", "OBJECT" +] +var VAR_OPERATOR_GEN = +[ + "VARIABLE", "LITERAL", "CALL", +] + +for(var i = 0; i < LIST_GEN.length; i++) +{ + for(var j = 0; j < LIST_GEN.length; j++) + { + GRAMMAR.LIST.push([LIST_GEN[i], ",", LIST_GEN[j]]); + } +} + +for(var i = 0; i < VAR_OPERATOR_GEN.length; i++) +{ + for(var j = 0; j < VAR_OPERATOR_GEN.length; j++) + { + GRAMMAR.VARIABLE.push([VAR_OPERATOR_GEN[i], "OPERATOR", VAR_OPERATOR_GEN[j]]); + } +} + +var VALIDATION = +{ + VARIABLE: + [ + ["VARIABLE", "SEMI"], + ["VARIABLE", "ASSIGNMENT", "LITERAL", "SEMI"], + ["VARIABLE", "ASSIGNMENT", "VARIABLE", "SEMI"], + ["VARIABLE", "ASSIGNMENT", "ACCESSOR", "SEMI"], + ["VARIABLE", "ASSIGNMENT", "OBJECT", "SEMI"], + ["VARIABLE", "ASSIGNMENT", "ARRAY", "SEMI"], + ["VARIABLE", "ASSIGNMENT", "EXPRESSION", "SEMI"], + ["VARIABLE", "ASSIGNMENT", "CALL", "SEMI"], + + ["VARIABLE", "ASSIGNMENT", "[", "LITERAL", "]", "SEMI"], + ["VARIABLE", "ASSIGNMENT", "[", "LIST", "]", "SEMI"], + + ["VARIABLE", "ASSIGNMENT", "FUNCTION", "(", "LIST", ")", "{"], + ["VARIABLE", "ASSIGNMENT", "FUNCTION", "(", "LITERAL", ")", "{"], + ["VARIABLE", "ASSIGNMENT", "FUNCTION", "(", "VARIABLE", ")", "{"], + ["VARIABLE", "ASSIGNMENT", "FUNCTION", "(", "ARRAY", ")", "{"], + ["VARIABLE", "ASSIGNMENT", "FUNCTION", "(", "OBJECT", ")", "{"], + ["VARIABLE", "ASSIGNMENT", "FUNCTION", "(", ")", "{"], + + ["VARIABLE", "ASSIGNMENT", "{", "OBJECT_LIST", "}", "SEMI"], + ["VARIABLE", "ASSIGNMENT", "{", "OBJECT_LIST", ",", "}", "SEMI"], + ["VARIABLE", "ASSIGNMENT", "{", "}", "SEMI"], + ], + ASSIGNMENT: + [ + ["ASSIGNMENT", "SEMI"], + ["ASSIGNMENT", "{"], + ], + EXPRESSION: + [ + ["EXPRESSION", "SEMI"], + ], + WHILE: + [ + [ "WHILE", "(", "LITERAL", ")", "{" ], + [ "WHILE", "(", "VARIABLE", ")", "{" ], + [ "WHILE", "(", "EXPRESSION", ")", "{" ], + + [ "WHILE", "(", "LITERAL", ")", "SEMI" ], + [ "WHILE", "(", "VARIABLE", ")", "SEMI" ], + [ "WHILE", "(", "EXPRESSION", ")", "SEMI" ], + ], + SWITCH: + [ + ["SWITCH", "(", "VARIABLE", ")", "{"], + ["SWITCH", "(", "EXPRESSION", ")", "{"], + ["SWITCH", "(", "LITERAL", ")", "{"], + ["SWITCH", "(", "CALL", ")", "{"], + ], + CASE: + [ + ["CASE", "LITERAL", ":"], + ["CASE", "VARIABLE", ":"], + ["CASE", "EXPRESSION", ":"], + ["CASE", "CALL", ":"], + ], + DEFAULT: + [ + ["DEFAULT", ":"], + ], + DO: + [ + [ "DO", "{" ], + ], + IF: + [ + [ "IF", "(", "LITERAL", ")", "{" ], + [ "IF", "(", "VARIABLE", ")", "{" ], + [ "IF", "(", "EXPRESSION", ")", "{" ], + [ "IF", "(", "CALL", ")", "{" ], + + [ "IF", "(", "LITERAL", ")", "ASSIGNMENT", "SEMI" ], + [ "IF", "(", "VARIABLE", ")", "ASSIGNMENT", "SEMI" ], + [ "IF", "(", "VARIABLE", ")", "VARIABLE", "SEMI" ], + [ "IF", "(", "VARIABLE", ")", "RETURN", "SEMI" ], + [ "IF", "(", "EXPRESSION", ")", "ASSIGNMENT", "SEMI" ], + [ "IF", "(", "CALL", ")", "ASSIGNMENT", "SEMI" ], + [ "IF", "(", "CALL", ")", "CALL", "SEMI" ], + [ "IF", "(", "VARIABLE", ")", "CALL", "SEMI" ], + [ "IF", "(", "EXPRESSION", ")", "CALL", "SEMI" ], + [ "IF", "(", "EXPRESSION", ")", "RETURN", "SEMI" ], + + + [ "IF", "(", "VARIABLE", ")", "VARIABLE", "ASSIGNMENT", "LITERAL", "SEMI" ], + [ "IF", "(", "VARIABLE", ")", "VARIABLE", "ASSIGNMENT", "VARIABLE", "SEMI" ], + [ "IF", "(", "VARIABLE", ")", "VARIABLE", "ASSIGNMENT", "CALL", "SEMI" ], + + [ "IF", "(", "EXPRESSION", ")", "VARIABLE", "ASSIGNMENT", "STRING", "SEMI" ], + [ "IF", "(", "EXPRESSION", ")", "VARIABLE", "ASSIGNMENT", "VARIABLE", "SEMI" ], + [ "IF", "(", "EXPRESSION", ")", "VARIABLE", "ASSIGNMENT", "CALL", "SEMI" ], + [ "IF", "(", "EXPRESSION", ")", "VARIABLE", "ASSIGNMENT", "EXPRESSION", "SEMI" ], + + ], + ELSE: + [ + [ "ELSE", "IF", "(", "LITERAL", ")", "{" ], + [ "ELSE", "IF", "(", "VARIABLE", ")", "{" ], + [ "ELSE", "IF", "(", "EXPRESSION", ")", "{" ], + [ "ELSE", "IF", "(", "CALL", ")", "{" ], + + [ "ELSE", "IF", "(", "LITERAL", ")", "ASSIGNMENT", "SEMI" ], + [ "ELSE", "IF", "(", "VARIABLE", ")", "ASSIGNMENT", "SEMI" ], + [ "ELSE", "IF", "(", "EXPRESSION", ")", "ASSIGNMENT", "SEMI" ], + [ "ELSE", "IF", "(", "EXPRESSION", ")", "VARIABLE", "EXPRESSION", "SEMI" ], + [ "ELSE", "IF", "(", "CALL", ")", "ASSIGNMENT", "SEMI" ], + [ "ELSE", "IF", "(", "CALL", ")", "CALL", "SEMI" ], + [ "ELSE", "IF", "(", "VARIABLE", ")", "CALL", "SEMI" ], + + [ "ELSE", "IF", "(", "VARIABLE", ")", "VARIABLE", "ASSIGNMENT", "LITERAL", "SEMI" ], + [ "ELSE", "IF", "(", "VARIABLE", ")", "VARIABLE", "ASSIGNMENT", "VARIABLE", "SEMI" ], + [ "ELSE", "IF", "(", "EXPRESSION", ")", "VARIABLE", "ASSIGNMENT", "VARIABLE", "SEMI" ], + [ "ELSE", "IF", "(", "EXPRESSION", ")", "VARIABLE", "ASSIGNMENT", "LITERAL", "SEMI" ], + + [ "ELSE", "{" ], + [ "ELSE", "TRY", "{" ], + [ "ELSE", "VARIABLE", "SEMI" ], + [ "ELSE", "ASSIGNMENT", "SEMI" ], + [ "ELSE", "CALL", "SEMI" ], + [ "ELSE", "VARIABLE", "ASSIGNMENT", "VARIABLE", "SEMI" ], + [ "ELSE", "VARIABLE", "ASSIGNMENT", "CALL", "SEMI" ], + [ "ELSE", "VARIABLE", "EXPRESSION", "SEMI" ], + ], + FOR: + [ + ["FOR", "(", "VARIABLE", "ASSIGNMENT", "LITERAL", "SEMI", "VARIABLE", "SEMI", "VARIABLE", ")", "{"], + ["FOR", "(", "VARIABLE", "ASSIGNMENT", "LITERAL", "SEMI", "CALL", "SEMI", "VARIABLE", ")", "{"], + ["FOR", "(", "VARIABLE", "ASSIGNMENT", "VARIABLE", "SEMI", "VARIABLE", "SEMI", "VARIABLE", ")", "{"], + ["FOR", "(", "VARIABLE", "ASSIGNMENT", "VARIABLE", "SEMI", "CALL", "SEMI", "VARIABLE", ")", "{"], + ["FOR", "(", "VARIABLE", "ASSIGNMENT", "LITERAL", "SEMI", "VARIABLE", "SEMI", "EXPRESSION", ")", "{"], + ["FOR", "(", "VARIABLE", "ASSIGNMENT", "VARIABLE", "SEMI", "VARIABLE", "SEMI", "EXPRESSION", ")", "{"], + ["FOR", "(", "VARIABLE", "ASSIGNMENT", "LITERAL", "SEMI", "EXPRESSION", "SEMI", "VARIABLE", ")", "{"], + ["FOR", "(", "VARIABLE", "ASSIGNMENT", "VARIABLE", "SEMI", "EXPRESSION", "SEMI", "VARIABLE", ")", "{"], + ["FOR", "(", "VARIABLE", "ASSIGNMENT", "LITERAL", "SEMI", "EXPRESSION", "SEMI", "EXPRESSION", ")", "{"], + ["FOR", "(", "VARIABLE", "ASSIGNMENT", "VARIABLE", "SEMI", "EXPRESSION", "SEMI", "EXPRESSION", ")", "{"], + ["FOR", "(", "VARIABLE", "SEMI", "EXPRESSION", "SEMI", "EXPRESSION", ")", "{"], + ["FOR", "(", "VARIABLE", "IN", "VARIABLE", ")", "{"], + ], + FUNCTION: + [ + ["FUNCTION", "CALL", "{"], + ], + CALL: + [ + ["CALL", "SEMI"], + ], + INCLUDE: + [ + ["INCLUDE", "(", "LITERAL", ")", "SEMI"], + ], + DEFINE: + [ + ["DEFINE", "(", "STRING", ")", "SEMI"], + ], + RETURN: + [ + ["RETURN", "LITERAL", "SEMI"], + ["RETURN", "SEMI"], + ["RETURN", "VARIABLE", "SEMI"], + ["RETURN", "EXPRESSION", "SEMI"], + ["RETURN", "CALL", "SEMI"], + ["RETURN", "OBJECT", "SEMI"], + ["RETURN", "OBJECT", ",", "SEMI"], + ["RETURN", "{", "ASSIGNMENT", ",", "}", "SEMI"], + ["RETURN", "{", "ASSIGNMENT", "}", "SEMI"], + ["RETURN", "{", "OBJECT_LIST", ",", "}", "SEMI"], + ["RETURN", "{", "OBJECT_LIST","}", "SEMI"], + ], + TRY: + [ + ["TRY", "{"], + ], + CATCH: + [ + ["CATCH", "(", "VARIABLE", ")", "{"], + ], + "NATIVE": + [ + ["NATIVE"], + ], + "{": + [ + ["{"], + ], + "}": + [ + ["}"], + ["}", "SEMI"], + ], + BREAK: + [ + ["BREAK"], + ["BREAK", "SEMI"], + ], + SEMI: + [ + ["SEMI"], + ] +} + +function checkExpression(_ast, _flow, _arr) +{ + var _startAst = 0; + var _endAst = 0; + var _match = false; + + var _newAst = []; + + for(var g = 0; g < Object.keys(_arr).length; g++) + { + var _grammarName = Object.keys(_arr)[g]; + var _grammar = _arr[_grammarName]; + + for(var t = 0; t < _grammar.length; t++) + { + for(var i = 0; i < _ast.length ; i++) + { + _startAst = 0; + _endAst = 0; + _match = false; + if(_ast[i] == _grammar[t][0]) + { + _match = true; + _startAst = i; + _endAst = i; + for(var m = 0; m < _grammar[t].length; m++) + { + if(!_ast[i + m]) + { + _match = false; + break + } + else if( _ast[i + m] == _grammar[t][m]) + { + _endAst++; + } + else + { + _match = false; + break; + } + } + if(_match) + { + _newAst = _ast.slice(0, _startAst); + _newAst.push( _grammarName ); + _newAst = _newAst.concat( _ast.slice( _endAst )); + + _ast = _newAst; + _ast = reduceParenthesis(_ast); + + return checkExpression(_ast, _flow, _arr); + } + } + } + } + } + return _ast; +} + +function checkSyntax(_ast, _flow, _scope, _env) +{ + if(_ast.length < 1) + { + return; + } + if(VALIDATION[_ast[0]]) + { + var _check = VALIDATION[_ast[0]]; + var _good = true; + + for(var c = 0; c < _check.length; c++) + { + _good = true; + for(var t = 0; t < _ast.length; t++) + { + if(!_check[c][t] || _ast[t] != _check[c][t]) + { + _good = false; + break; + } + } + if(_good) + { + break; + } + } + + if(!_good) + { + var _debug = "\n"; + if(global.DEBUG) + { + _debug += _ast.join(" "); + } + error(`[!] Unexpected token: line: ${_scope[0].line + 1} in ${_env.FILE}\n${_flow.join(" ")}${_debug}`); + } + } + else + { + var _debug = "\n"; + if(global.DEBUG) + { + _debug += _ast.join(" "); + } + error(`[!] Unexpected token: line: ${_scope[0].line + 1} position: 0 in ${_env.FILE}\n${_flow.join(" ")}${_debug}`); + } +} + + +function addFlow(_env) +{ + if(_env.TOKENS.length > 0 && _env.TOKENS[0]) + { + var _ast = []; + for(var i = 0; i < _env.TOKENS.length; i++) + { + _ast[i] = []; + + + for(var j = 0; j < _env.TOKENS[i].length; j++) + { + _ast[i][j] = verifyToken(_env.TOKENS[i][j], i, j, _env.TOKENSMAP, _env); + } + + _ast[i] = checkExpression(_ast[i], _env.TOKENS[i], GRAMMAR); + //_ast[i] = checkExpression(_ast[i], _env.TOKENS[i], ASSIGN); + + //_ast[i] = checkExpression(_ast[i], _env.TOKENS[i], SECOND); + + checkSyntax(_ast[i], _env.TOKENS[i], _env.TOKENSMAP[i], _env); + } + + _env.FLOW = _env.FLOW.concat(_env.TOKENS); + _env.MAP = _env.MAP.concat(_env.TOKENSMAP); + _env.AST = _env.AST.concat(_ast); + } + _env.TOKENS = []; + _env.TOKENSMAP = []; + _env.POSITION = 0; + +} + +function findNextLine(_code, _from, _env) +{ + for(var i = _from; i < _code.length; i++) + { + if(_code[i] == "\r" && _code[i+1] && _code[i+1] == "\n") + { + _env.LINE++; + _env.CURSOR = 0; + return i+2; + } + else if(_code[i] == "\n") + { + _env.LINE++; + _env.CURSOR = 0; + return i+1; + } + } + // ERROR + return _code.length - 1; +} + +function findEndComment(_code, _from, _env) +{ + for(var i = _from; i < _code.length; i++) + { + if(_code[i] == "\n") + { + _env.LINE++; + _env.CURSOR = 0; + } + else if(_code[i] == "\r" && _code[i + 1] && _code[i + 1] == "\n") + { + _env.LINE++; + _env.CURSOR = 0; + i++; + } + else if(_code[i] == "*" && _code[i+1] && _code[i+1] == "/") + { + return i+2; + } + _env.CURSOR++; + } + // ERROR + return _code.length - 1; +} + +function setFor(_current, _env) +{ + if(_current == "for" && _env.FOR == 0) + { + _env.FOR = 2; + } +} + +function setSwitch(_current, _env) +{ + if(_current == "switch") + { + _env.SWITCH ++; + } +} + +function setCase(_current, _env) +{ + if(_current == "case") + { + if(_env.SWITCH > 0) + { + _env.IN_CASE = true; + } + else + { + error(`'case' keyworkds require to be in a switch statement`); + } + } +} + +function unsetCase(_current, _env) +{ + if(_current == "break") + { + if(_env.IN_CASE == true) + { + _env.IN_CASE = false; + } + } +} + +function parseCode(_code, _from, _env) +{ + var _current = ""; + _env.POSITION = 0; + + for(var i = _from; i < _code.length; i++) + { + var _tokens = _env.TOKENS[_env.TOKENS.length - 1]; + var _before; + + if(_tokens && _tokens[_tokens.length - 1]) + { + _before = _tokens[_tokens.length - 1]; + } + + switch(_code[i]) + { + case " ": + if(!_env.IN_STRING && !_env.IN_BLOCK_QUOTE && !_env.IN_NATIVE) + { + setFor(_current, _env); + setSwitch(_current, _env); + addToken(_current, _env); + _current = ""; + } + else + { + _current += _code[i]; + } + break; + case "\t": + if(!_env.IN_STRING && !_env.IN_BLOCK_QUOTE && !_env.IN_NATIVE) + { + setFor(_current, _env); + setSwitch(_current, _env); + addToken(_current, _env); + _current = ""; + } + else if(_env.IN_STRING || _env.IN_NATIVE) + { + _current += _code[i]; + } + else if(_env.IN_BLOCK_QUOTE) + { + _current += "\\t"; + } + break; + + case "\n": + if(!_env.IN_BLOCK_QUOTE && !_env.IN_NATIVE) + { + _env.LINE++; + _env.CURSOR = 0; + addToken(_current, _env); + _current = ""; + } + else if(_env.IN_NATIVE) + { + _current += _code[i]; + } + else + { + _current += "\\n"; + } + break; + + case "\r": + if(!_env.IN_BLOCK_QUOTE && !_env.IN_NATIVE) + { + _env.LINE++; + _env.CURSOR = 0; + if(_code[i+1] && _code[i+1] == "\n") + { + addToken(_current, _env); + _current = ""; + i++ + break; + } + } + else if(_env.IN_NATIVE) + { + _current += _code[i]; + } + else + { + _current += "\\r"; + } + break; + + case "\\": + if(_env.IN_BLOCK_QUOTE) + { + _current += "\\\\"; + } + _current += "\\"; + break; + + case "\"": + if(_env.IN_STRING && !_env.IN_NATIVE) + { + _env.IN_STRING = false; + } + else if(!_env.IN_BLOCK_QUOTE && !_env.IN_NATIVE) + { + _env.IN_STRING = true; + } + if(_env.IN_BLOCK_QUOTE) + { + _current += "\\\""; + } + else + { + _current += _code[i]; + } + break; + + case "`": + if(_env.IN_BLOCK_QUOTE && !_env.IN_NATIVE) + { + _env.IN_BLOCK_QUOTE = false; + addToken(_current + "\"", _env); + _current = ""; + } + else if(!_env.IN_STRING && !_env.IN_NATIVE) + { + _env.IN_BLOCK_QUOTE = true; + addToken(_current, _env); + _current = "\""; + + for(var q = i+1; q < _code.length; q++) + { + if(_code[q] == "`") + { + break; + } + if(_code[q] == "$" && _code[q+1] == "{") + { + for(var end = q; end < _code.length; end++) + { + + if(_code[end] == "}") + { + _code[q] = "\""; + _code[q+1] = "+"; + _code = _code.slice(0, q) + "` + " + _code.slice(q+2, end) + " + `" + _code.slice(end+1); + break; + } + } + + } + } + } + else _current += _code[i]; + break; + + case "/": + if(!_env.IN_STRING && !_env.IN_BLOCK_QUOTE && !_env.IN_NATIVE) + { + if(_code[i+1]) + { + if(_code[i + 1] && _code[i + 1] == "=") + { + // /= + addToken(_code[i] + _code[i + 1], _env); + i++; + } + else if(_code[i+1] == "/") + { + addToken(_current, _env); + addFlow(_env); + _current = ""; + parseCode(_code, findNextLine(_code, i, _env), _env); + return; + } + else if(_code[i+1] == "*") + { + addToken(_current, _env); + addFlow(_env); + _current = ""; + i = parseCode(_code, findEndComment(_code, i, _env), _env); + return; + } + else + { + var _isRegExp = false; + var _regExp = _code[i]; + for(r = i + 1; r < _code.length; r++) + { + if(_code[r] == "\n" || _code[r] == ";") + { + break; + } + else if(_code[r] == "/") + { + _regExp += _code[r]; + isRegExp = true; + if(_code[r + 1] && RegExpFlags.indexOf(_code[r + 1]) > -1) + { + _regExp += _code[r + 1]; + r++; + } + i = r; + break; + } + else + { + _regExp += _code[r]; + } + } + + addToken(_current, _env); + if(isRegExp) + { + addToken("new", _env); + addToken("RegExp", _env); + addToken("(", _env); + + addToken(`"${_regExp.slice(1, -1)}"`, _env); + addToken(")", _env); + } + else + { + addToken(_code[i], _env); + } + _current = ""; + } + } + } + else + { + _current += _code[i]; + } + + break; + + case "0": + case "1": + case "2": + case "3": + case "4": + case "5": + case "6": + case "7": + case "8": + case "9": + _current += _code[i]; + break; + + case "{": + case "}": + + if(!_env.IN_STRING && !_env.IN_BLOCK_QUOTE && !_env.IN_NATIVE) + { + + if(_code[i] == "{" && _code[i + 1] && _code[i + 1] == _code[i]) + { + _env.IN_NATIVE = true; + + addToken(_current, _env); + _current = "{{"; + + i++; + } + else if(_code[i] == "{" && _code[i + 1] && _code[i + 1] != "}" && _code[i - 1] && (_code[i - 1] == "=" || _code[i - 1] == "," || _code[i - 1] == "return")) + { + // obj + _env.flowObject++; + _current += "{"; + } + else if(_code[i] == "{" && _code[i + 1] && _code[i + 1] != "}" && (_before == "=" || _before == "," || _before == "return" || _before == "(")) + { + // obj + _env.flowObject++; + _current += "{"; + addToken(_current, _env), + _current = ""; + } + else if(_code[i] == "{" && _before && _before == ")") + { + // function() = {}; or catch(e){} + addToken(_current, _env); + if(_code[i+1] == "}") + { + addToken("{", _env); + if(_env.flowObject < 1) + { + incToken(_env); + } + addToken("}", _env); + addFlow(_env); + i++; + } + else + { + addToken(_code[i], _env); + if(_env.flowObject < 1) + { + incToken(_env); + } + _env.flowBracket++; + } + _current = ""; + } + else if(_code[i] == "{" && _code[i + 1] && _code[i + 1] == "}" && _env.flowObject < 1) + { + // obj + addToken(_current, _env); + addToken("{", _env); + addToken("}", _env); + i++; + _current = ""; + } + else + { + if(_code[i] == "{") + { + if(_env.flowObject < 1) + { + addToken(_current, _env); + addToken(_code[i], _env); + incToken(_env); + _env.flowBracket++; + + _current+= ""; + + } + else + { + addToken(_current, _env); + addToken("{", _env); + _env.flowObject++; + //_current += _code[i]; + _current = ""; + } + } + else + { + if(_env.flowObject > 0 || _env.flowAccessor > 0 ) + { + //_current += _code[i]; + addToken(_current, _env); + addToken("}", _env); + //addFlow(_env); + _env.flowObject--; + _current = ""; + } + else + { + if(_env.SWITCH > 0) + { + _env.SWITCH--; + } + //_current += "}"; + addToken(_current, _env); + addToken("}", _env); + addFlow(_env); + + //incToken(_env); + _env.flowBracket--; + + _current = ""; + } + + } + } + + } + else if(_env.IN_NATIVE && _code[i] == "}" && _code[i + 1] && _code[i + 1] == _code[i]) + { + _env.IN_NATIVE = false; + _current += "}}"; + addToken(_current, _env); + addFlow(_env); + _current = ""; + i++; + } + else + { + _current += _code[i]; + } + break; + + case "[": + case "]": + case "(": + case ")": + if(!_env.IN_STRING && !_env.IN_BLOCK_QUOTE && !_env.IN_NATIVE) + { + if(_code[i] == "(") + { + setFor(_current, _env); + setSwitch(_current, _env); + _env.flowParenthesis++; + } + else if(_code[i] == ")") + { + _env.flowParenthesis--; + } + else if(_code[i] == "[") + { + _env.flowAccessor++; + } + else if(_code[i] == "]") + { + _env.flowAccessor--; + } + + addToken(_current, _env); + addToken(_code[i], _env); + _current = ""; + } + else + { + _current += _code[i]; + } + break; + + case ";": + if(!_env.IN_STRING && !_env.IN_BLOCK_QUOTE && !_env.IN_NATIVE) + { + addToken(_current, _env); + addToken(";", _env); + _current = ""; + if(_env.FOR == 0) + { + addFlow(_env); + } + else + { + _env.FOR--; + } + + } + else + { + _current += _code[i]; + } + break; + + case ":": + if(!_env.IN_STRING && !_env.IN_BLOCK_QUOTE && !_env.IN_NATIVE && _env.SWITCH == 0) + { + addToken(_current, _env); + addToken(":", _env); + _current = ""; + } + else if(!_env.IN_STRING && !_env.IN_BLOCK_QUOTE && !_env.IN_NATIVE && _env.SWITCH > 0) + { + addToken(_current, _env); + addToken(":", _env); + _current = ""; + addFlow(_env); + } + else + { + _current += _code[i]; + } + break; + + case ",": + if(!_env.IN_STRING && !_env.IN_BLOCK_QUOTE && !_env.IN_NATIVE) + { + addToken(_current, _env); + addToken(",", _env); + _current = ""; + } + else + { + _current += _code[i]; + } + break; + + case "!": + case "+": + case "-": + + if(!_env.IN_STRING && !_env.IN_BLOCK_QUOTE && !_env.IN_NATIVE) + { + addToken(_current, _env); + if(_code[i + 1] && _code[i + 1] == _code[i]) + { + addToken(_code[i] + _code[i + 1], _env); + i++; + } + else if(_code[i + 1] && _code[i + 1] == "=") + { + // += -= + addToken(_code[i] + _code[i + 1], _env); + i++; + } + else + { + addToken(_code[i], _env); + } + _current = ""; + } + else + { + _current += _code[i]; + } + break; + case "*": + case ".": + if(!_env.IN_STRING && !_env.IN_BLOCK_QUOTE && !_env.IN_NATIVE) + { + var _number = isNumber(_current); + if(_number.check) + { + _current += _code[i]; + } + else + { + addToken(_current, _env); + addToken(_code[i], _env); + _current = ""; + } + } + else + { + _current += _code[i]; + } + break; + + default: + _current += _code[i]; + var _currentScope = []; + if(_env.TOKENS.length > 0) + { + _currentScope = _env.TOKENS[_env.TOKENS.length - 1]; + } + + var _lastToken; + if(_currentScope.length > 0) + { + _currentScope = _currentScope[_currentScope.length - 1]; + } + + if(_current == "in" && _code[i+1] == " ") + { + _env.FOR = 0; + } + + if(!_env.IN_STRING && !_env.IN_BLOCK_QUOTE && !_env.IN_NATIVE && _current == "function" && (_currentScope == ":" || _currentScope == "," || _currentScope == "[")) + { + var _functionID = "__NERD_LAMBDA_FUNC_" + Math.random().toString(36).slice(2, 12); + var _bracketState = 0; + var _end = -1; + //addVar(_functionID, _env); + for(var b = i; b < _code.length; b++) + { + if(_code[b] == "{") + { + _bracketState++; + } + else if(_code[b] == "}") + { + _bracketState--; + if(_bracketState == 0) + { + _end = b+1; + break; + } + } + } + var bodyLambda = "var " + _functionID + " = " + _code.substring(i-8, _end); + _current = ""; + _code = _code.substring(0, i+1) + _functionID + _code.substring(_end); + var _tmpEnv = createEnv(); + _tmpEnv.REGISTER = _tmpEnv.REGISTER.concat(_env.REGISTER); + parseCode(bodyLambda, 0, _tmpEnv); + _env.LAMBDA[_functionID] = { code: bodyLambda, env: _tmpEnv }; + + } + + break; + } + _env.CURSOR++; + } + + addFlow(_env); + if(_current.length > 0 && i == _code.length) + { + error("[!] untermined instruction"); + } + if(_env.flowBracket < 0) + { + error("[!] Missing opening bracket {"); + } + else if(_env.flowBracket > 0) + { + error("[!] Missing closing bracket }"); + } + + if(_env.flowObject < 0) + { + error("[!] Missing opening bracket {"); + } + else if(_env.flowObject > 0) + { + error("[!] Missing closing bracket }"); + } + + if(_env.flowParenthesis < 0) + { + error("[!] Missing opening parenthesis ("); + } + else if(_env.flowParenthesis > 0) + { + error("[!] Missing closing parenthesis )"); + } + + if(_env.flowAccessor < 0) + { + error("[!] Missing opening accessor ["); + } + else if(_env.flowAccessor > 0) + { + error("[!] Missing closing accessor ]"); + } + + if(_env.IN_NATIVE) + { + error("[!] Missing closing native block }} ]"); + } + + if(_env.IN_STRING) + { + error("[!] Missing closing string \" }} ]"); + } + + if(_env.IN_BLOCK_QUOTE) + { + error("[!] Missing closing block quote ` }} ]"); + } + +} + +module.exports = parseCode; diff --git a/lib/require.js b/lib/require.js new file mode 100644 index 000000000..862de74bf --- /dev/null +++ b/lib/require.js @@ -0,0 +1,275 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + + +var fs = require("fs"); +var CACHE = {}; + +var showModuleComment = function(_obj, _name) +{ + if(Array.isArray(_obj)) + { + for(var l = 0; l < _obj.length; l++ ) + { + console.log("[*] " + _name + ": " + _obj[l]); + } + } + else if(typeof(_obj) == "string") + { + console.log("[*] " + _name + ": " + _obj); + } + else if(typeof(_obj) == "object") + { + var _platform; + if(_obj[global.PLATFORM]) + { + _platform = global.PLATFORM; + } + else if(_obj["default"]) + { + _platform = "default"; + } + + if(_obj[_platform] && typeof(_obj[_platform]) == "object") + { + var currentCompiler = global.COMPILER.COMPILER.split(" ")[0]; + var _compiler; + if(_obj[_platform][currentCompiler]) + { + _compiler = currentCompiler; + } + else if(_obj[_platform]["default"]) + { + _compiler = "default"; + } + + if(_obj[_platform][_compiler]) + { + showModuleComment(_obj[_platform][_compiler], _name); + } + } + else if(_obj[_platform]) + { + showModuleComment(_obj[_platform], _name); + } + } +} + +var addModuleLib = function(_lib, modSource) +{ + if(Array.isArray(_lib)) + { + for(var l = 0; l < _lib.length; l++ ) + { + global.COMPILER.LIBS += _lib[l].replace(/{__MODULE__}/g, global.path.resolve(modSource)).replace(/{__ARCH__}/g, global.os.arch()).replace(/{__EXTERN__}/g, global.extern) + " "; + } + } + else if(typeof(_lib) == "string") + { + global.COMPILER.LIBS += _lib.replace(/{__MODULE__}/g, modSource).replace(/{__ARCH__}/g, global.os.arch()).replace(/{__EXTERN__}/g, global.extern) + " "; + } + else if(typeof(_lib) == "object") + { + var _platform; + if(_lib[global.PLATFORM]) + { + _platform = global.PLATFORM; + } + else if(_lib["default"]) + { + _platform = "default"; + } + + if(_lib[_platform] && Array.isArray(_lib[_platform])) + { + addModuleLib(_lib[_platform], modSource); + } + if(_lib[_platform] && typeof(_lib[_platform]) == "object") + { + var currentCompiler = global.COMPILER.COMPILER.split(" ")[0]; + var _compiler; + if(_lib[_platform][currentCompiler]) + { + _compiler = currentCompiler; + } + else if(_lib[_platform]["default"]) + { + _compiler = "default"; + } + + if(_lib[_platform][_compiler]) + { + addModuleLib(_lib[_platform][_compiler], modSource); + } + } + else if(_lib[_platform]) + { + addModuleLib(_lib[_platform], modSource); + } + } +} + +var genRequire = function(from, addSource, _env, _name) +{ + var modSource = ""; + var fileSource; + + if(global.COMPILER.DIR.length > 0) + { + from = global.COMPILER.DIR[global.COMPILER.DIR.length - 1]; + } + if(addSource.indexOf(from) > -1) + { + modSource = addSource; + } + else + { + modSource = global.path.join(from + addSource); + + } + global.COMPILER.DIR.push(__dirname + "/"); + var trySource = [modSource, modSource + "/" + "index.ng", from + "nerd_modules/" + addSource + "/index.ng", global.NERD_PATH + "/nerd_modules/" + addSource + "/index.ng", modSource + ".ng", modSource, ]; + var newSrc = ""; + for(var i = 0; i < trySource.length; i++) + { + try + { + modSource = global.path.dirname(trySource[i]) + "/"; + newSrc = fs.readFileSync(trySource[i]).toString(); + + if(global.CLI.cli["--env"] && global.CLI.cli["--env"].argument == "js" && addSource != "Module") + { + newSrc = `var module = require("Module");` + newSrc; + } + + if(CACHE[addSource]) + { + global.COMPILER.DIR.pop(); + return {add: false, module: CACHE[addSource], code: ""}; + } + + fileSource = trySource[i]; + + var pkgpath = global.path.join(modSource, "package.json"); + var pkgObject; + if(fs.existsSync(pkgpath)) + { + var pkg = fs.readFileSync(pkgpath); + try + { + pkg = JSON.parse(pkg); + pkgObject = pkg; + if(pkg.nerd) + { + if(pkg.nerd.message) + { + showModuleComment(pkg.nerd.message, pkg.name); + } + if(pkg.nerd.env) + { + if(pkg.nerd.env.indexOf(global.COMPILER.ENV.name) < 0) + { + console.error("Nerd:\n\n[!] module " + addSource + " doesn't support env : " + global.COMPILER.ENV.name + " only these : " + pkg.nerd.env); + process.exit(1); + } + } + + if(pkg.nerd.target) + { + if(!global.COMPILER.TARGET) + { + console.error("Nerd:\n\n[!] module " + addSource + " require one of these targets : " + pkg.nerd.target + ". None specified"); + process.exit(1); + } + else if(pkg.nerd.target.indexOf(global.COMPILER.TARGET) < 0) + { + console.error("Nerd:\n\n[!] module " + addSource + " require one of these targets : " + pkg.nerd.target + ". " + global.COMPILER.TARGET + " specified"); + process.exit(1); + } + } + /* + if(pkg.nerd.expose) + { + COMPILER.EXPOSE = COMPILER.EXPOSE.concat(pkg.nerd.expose); + COMPILER.GLOBAL = COMPILER.GLOBAL.concat(pkg.nerd.expose); + } + */ + + if(pkg.nerd.lib) + { + addModuleLib(pkg.nerd.lib, modSource); + } + + } + } + catch(e) + { + console.log("Nerd:\n[!] " + e + " -> " + pkgpath.split("/").splice(-3).join("/")); + } + } + + break; + } + catch (e) {} + } + + var ext = "nd"; + if(fileSource && fileSource.split) + { + var _Ext = fileSource.split("."); + if(_Ext.length > 1) ext = _Ext[_Ext.length - 1]; + + + var _newEnv = global.createEnv(modSource); + global.parseCode(newSrc, 0, _newEnv); + global.parseAST(_newEnv); + var _generated = global.generateCode(_newEnv); + + var reqFN = "__MODULE_" + Math.random().toString(36).substr(2, 10); + global.addVar(reqFN, _env); + //CACHE[addSource] = reqFN + "(" + _name + ")"; + CACHE[addSource] = reqFN + "(__NERD_THIS)"; + + newSrc = "NerdCore::Global::var " + reqFN + " = NerdCore::VAR(NerdCore::Enum::Type::Function, new NerdCore::Type::function_t([&](NerdCore::VAR& __NERD_THIS, NerdCore::VAR* __NERD_VARARGS, int __NERD_VARLENGTH, void* __NERD_PTR = nullptr) mutable{\n"; + newSrc += _generated; + + if(global.CLI.cli["--env"] && global.CLI.cli["--env"].argument == "js") + { + newSrc += `return module["exports"];`; + } + + newSrc += "return NerdCore::Global::null;\n}));"; + + global.COMPILER.REQUIRE += newSrc + ";"; + global.COMPILER.DIR.pop(); + //return {add: true, module: reqFN + "(" + _name + ")", code: newSrc} + return {add: true, module: reqFN + "(__NERD_THIS)", code: newSrc}; + } + else + { + global.error("[!] module unknown: " + addSource); + } + +} + +module.exports = genRequire; \ No newline at end of file diff --git a/lib/verify.js b/lib/verify.js new file mode 100644 index 000000000..4277c330f --- /dev/null +++ b/lib/verify.js @@ -0,0 +1,1482 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +var isVariable = require("./check/isVariable.js"); +var isNumber = require("./check/isNumber.js"); +var isString = require("./check/isString.js"); +var isBoolean = require("./check/isBoolean.js"); + +function verifyExpression(_exp, _inst, _env) +{ + for(var i = 0; i < _env.FLOW[_inst].length; i++) + { + if(_env.FLOW[_inst][i] == "new") + { + _env.FLOW[_inst][i] = ""; + _env.FLOW[_inst][i+1] = "((NerdCore::Class::Function*)" + _env.FLOW[_inst][i+1] + ".data.ptr)->New" + } + } + + for(var z = 0; z < _exp.length; z++) + { + if(RESERVED.indexOf(_exp[z]) < 0 && BOOLEAN_KEYWORD.indexOf(_exp[z]) < 0 && isVariable(_exp[z]).check) + { + if( (!_exp[ z - 1] || _exp[ z - 1] != ".") && (!_exp[ z + 1] || _exp[ z + 1] != ":" ) && !varExists(_exp[z], _env)) + { + if(_env.MAP[_inst][z]) + { + error(`[!] Unknown variable: ${_exp[z]} line:${_env.MAP[_inst][z].line + 1} position:${_env.MAP[_inst][z].position}${os.EOL}=> ${array_of_code[_env.MAP[_inst][z].line]}`); + } + else + { + error(`[!] Unknown variable: ${_exp[z]}`); + } + } + } + if(_exp[z] == "__NERD_Multi_Line_Quote") + { + _env.FLOW[_inst][z + 2] = _exp[z + 2].slice(1, _exp[z + 2].length - 1) + } + } +} + +function checkLogicalState(_token, _next, _env, _ast) +{ + var _logicalState = getLogical(_env); + + if(_logicalState.DO) + { + if(_token == "}") + { + if(_next != "WHILE") + { + return { error: true, message: "Unexpected token, waiting for while"}; + } + } + else if(_token == "WHILE") + { + return { error: false }; + } + else + { + return { error: true, message: "Unexpected token, waiting for while"}; + } + } + + if(_logicalState.TRY) + { + if(_token == "}") + { + if(_next != "CATCH") + { + return { error: true, message: "Unexpected token, waiting for catch"}; + } + } + else if(_token == "CATCH") + { + return { error: false }; + } + else + { + return { error: true, message: "Unexpected token, waiting for catch"}; + } + } + if(_logicalState.FUNCTION) + { + if(_token == "}") + { + if(_ast && _ast[1] && (_ast[1] == "SEMI" || _ast[1] == ";")) + { + //good + } + else if(_next && (_next == "SEMI" || _next == ";")) + { + // good + } + else + { + //return { error: true, message: "Unexpected token, waiting for ';' after "}; + } + } + } + return { error: false }; +} + +function getFunctionThis(_flow, param, _env, _inst) +{ + var _end = -1; + for(var i = 0; i < _flow.length; i++) + { + if(_flow[i] == "[" || _flow[i] == "\"" || isVariable(_flow[i], _env).check) + { + _end = i; + } + else if(_flow[i] == "(") + { + break; + } + } + return _end; +} + +function getFunctionArgs(_flow, param, _env, _inst, _call) +{ + var _return = {}; + + var _this = getFunctionThis(_flow, param, _env, _inst); + _return["this"] = "__NERD_THIS"; + + if(_this > -1) + { + if(_this == 0) + { + _return["this"] = _flow[0]; + } + else + { + _return["this"] = _flow.slice(0, _this).join(" "); + } + } + + var _parenthesis = 0; + _return["args"] = []; + for(var i = 0; i < _flow.length; i++) + { + if(_flow[i] == "(") _parenthesis++; + else if(_flow[i] == ")") _parenthesis--; + else if(_parenthesis > 0) + { + + if(_flow[i][0] == '\"') + { + _return["args"].push(_flow[i]); + } + else if(_flow[i] == "new" && _flow[i+1]) + { + var _end = 0; + var _argP = 0; + for(var j = i; j < _flow.length; j++) + { + if(_flow[j] == "(") + { + _argP++; + } + else if(_flow[j] == ")") + { + _argP--; + if(_argP == 0) + { + _end = j + 1; + break; + } + } + } + _new = "__NERD_FUNCTION(" + _flow[i+1] + ")->New" + _flow.slice(i + 2, _end).join(" "); + _env.FLOW[_inst] = _flow.slice(0, i).concat(_new, ..._flow.slice(_end)); + } + else if(param && isVariable(_flow[i]) && varExists(_flow[i], _env)) + { + _return["args"].push(_flow[i]); + } + else if(param ) + { + _return["args"].push(_flow[i]); + } + else if(!param) + { + _return["args"].push(_flow[i]); + } + } + else if(_parenthesis < 0) + { + break; + } + } + return _return; +} + +function _forgeArray(_var, _flow, _start, _inst, _env, _nested) +{ + if(!_nested) + { + _env.FLOW[_inst][_start - 1] = "new NerdCore::Class::Array()"; + _env.FLOW[_inst] = _env.FLOW[_inst].slice(0, _start); + _env.FLOW[_inst].push(";"); + } + + if(_flow[_start] != "]" ) + { + var a = 0; + for(var i = _start; i < _flow.length - 1; i+=2) + { + if(_flow[i] == "[" && _flow[i + 1] == "]") + { + _env.FLOW[_inst].push(_var + "[" + a + "]"); + _env.FLOW[_inst].push("="); + _env.FLOW[_inst].push("new NerdCore::Class::Array()"); + _env.FLOW[_inst].push(";"); + } + else if(_flow[i] == "{") + { + var _end = -1; + var _objBracket = 0; + for(var k = i; k < _flow.length; k++) + { + if(_flow[k] == "{") + { + _objBracket++; + } + else if(_flow[k] == "}") + { + _objBracket--; + if(_objBracket == 0) + { + _end = k; + break; + } + } + } + + _env.FLOW[_inst].push(_var + "[" + a + "]"); + _env.FLOW[_inst].push("="); + _env.FLOW[_inst] = _env.FLOW[_inst].concat(_flow.slice(i, _end)); + forgeObject(_flow, i+6, _inst, _env); + + i = _end; // we jump to the end of this object + } + else if(_flow[i] == "[") + { + _env.FLOW[_inst].push(_var + "[" + a + "]"); + _env.FLOW[_inst].push("="); + _env.FLOW[_inst].push("new NerdCore::Class::Array()"); + _env.FLOW[_inst].push(";"); + forgeArray( _var + "[" + a + "]", _flow, i+1, _inst, _env, true); + + var _endArrayIndex = -1; + var _indArr = 1; + for(var z = i+1; z < _flow.length; z++) + { + if(_flow[z] == "[") + { + _indArr++; + } + else if(_flow[z] == "]") + { + _indArr--; + if(_indArr == 0) + { + _endArrayIndex = z; + break; + } + } + } + if(_endArrayIndex > -1) + { + i += _endArrayIndex; + } + } + else if(_flow[i] != "]" && _flow[i] != ",") + { + + if(_env.LAMBDA[_flow[i]]) + { + var _l = _env.LAMBDA[_flow[i]]; + _l.env.REGISTER = _l.env.REGISTER.concat(_env.REGISTER); + for(var k = 0; k < _l.env.FLOW.length; k) + { + k = verifyFlow(_l.env.AST[k], _l.env.FLOW[k], k, _l.env.FLOW, _l.env); + } + + for(var j = 0; j < _l.env.FLOW.length; j++) + { + _env.FLOW[_inst].push( _l.env.FLOW[j].join(" ") ); + } + + } + else if(isVariable(_flow[i]).check) + { + if(!varExists(_flow[i], _env)) + { + error(`[!] Variable or token undefined: ${_flow[i]} line:${_env.MAP[_inst][i].line + 1} position:${_env.MAP[_inst][i].position}${os.EOL}=> ${array_of_code[_env.MAP[_inst][i].line]}`); + } + } + + _env.FLOW[_inst].push(_var + "[" + a + "]"); + _env.FLOW[_inst].push("="); + _env.FLOW[_inst].push(_flow[i]); + _env.FLOW[_inst].push(";"); + } + a++; + } + } +} + +function _forgeObject(_var, _flow, _start, _inst, _env) +{ + if(typeof _var != "object") + { + _var = [_var]; + } + + //var newFlow = _env.FLOW[_inst].slice(0, _start - 1); + //newFlow.push("((NerdCore::Class::Function*)Object.data.ptr)->New()"); + //newFlow.push(";"); + + for(var f = _start; f < _env.FLOW[_inst].length; f+=4) + { + if(_env.FLOW[_inst][f+1] && _env.FLOW[_inst][f+1] == ":" /*&& (_env.FLOW[_inst][f+2] != "}" && _env.FLOW[_inst][f+2] != "," )*/ ) + { + _env.FLOW[_inst][f] = + _env.FLOW[_inst][f+1] = ","; + if(_env.FLOW[_inst][f + 2] && isVariable(_env.FLOW[_inst][f + 2]).check) + { + if(_env.LAMBDA[_env.FLOW[_inst][f + 2]]) + { + var _l = _env.LAMBDA[_env.FLOW[_inst][f + 2]]; + _l.env.REGISTER = _l.env.REGISTER.concat(_env.REGISTER); + for(var i = 0; i < _l.env.FLOW.length; i) + { + i = verifyFlow(_l.env.AST[i], _l.env.FLOW[i], i, _l.env.FLOW, _l.env); + } + + for(var j = 0; j < _l.env.FLOW.length; j++) + { + newFlow.push( _l.env.FLOW[j].join(" ") ); + } + + } + else if(!varExists(_env.FLOW[_inst][f + 2], _env)) + { + error(`[!] Variable or token undefined: ${_env.FLOW[_inst][f + 2]} line:${_env.MAP[_inst][f+2].line + 1} position:${_env.MAP[_inst][f+2].position}${os.EOL}=> ${array_of_code[_env.MAP[_inst][f+2].line]}`); + } + } + + if(_env.FLOW[_inst][f + 2] && _env.FLOW[_inst][f + 2] == "{") + { + if(isVariable(_env.FLOW[_inst][f]).check) + { + _var.push("[\"" + _env.FLOW[_inst][f] + "\"]"); + newFlow.push(_var.join("") + " = new NerdCore::Class::Object();"); + } + else + { + _var.push("[" + _env.FLOW[_inst][f] + "]"); + newFlow.push(_var.join("") + " = new NerdCore::Class::Object();"); + } + + if(_env.FLOW[_inst][f + 3] != ",") + { + f--; + } + } + else if(_env.FLOW[_inst][f + 2] && _env.FLOW[_inst][f + 2] == "[") + { + if(isVariable(_env.FLOW[_inst][f]).check) + { + _var.push("[\"" + _env.FLOW[_inst][f] + "\"]"); + newFlow.push(_var.join("") + " = new NerdCore::Class::Array();"); + } + else + { + _var.push("[" + _env.FLOW[_inst][f] + "]"); + newFlow.push(_var.join("") + " = new NerdCore::Class::Array();"); + } + + var _endArray = -1; + var _count = 0; + + for(var indArray = f+2; indArray < _env.FLOW[_inst].length - 1; indArray++) + { + if(_env.FLOW[_inst][indArray] == "[") + { + _count++; + } + else if(_env.FLOW[_inst][indArray] == "]") + { + _count--; + + if(_count == 0) + { + _endArray = indArray; + break; + } + } + } + + + if(_endArray > -1) + { + var _virtualFlow = _env.FLOW[_inst].slice(f+2, _endArray + 1 ); + var _newFlowArray = {LAMBDA: _env.LAMBDA, FLOW:[[]]}; + forgeArray(_var.join(""), _virtualFlow, 1, 0, _newFlowArray, true) + newFlow.push(_newFlowArray.FLOW[0].join("")); + } + + while(_env.FLOW[_inst][f + 3] != "," && f < _env.FLOW[_inst].length) + { + f++; + } + _var.pop(); + } + else + { + if(isVariable(_env.FLOW[_inst][f]).check) + { + newFlow.push(_var.join("") + "[\"" + _env.FLOW[_inst][f] + "\"] = " + _env.FLOW[_inst][f + 2]); + + var _bracket = f + 3; + var _closing = -1; + while(_env.FLOW[_inst][_bracket] == "[") + { + newFlow.push("["); + _closing = _bracket + 1; + while(_env.FLOW[_inst][_closing] != "]" && _closing < _env.FLOW[_inst].length) + { + _closing++; + } + if(_closing != _bracket + 1) + { + verifyExpression(_env.FLOW[_inst].slice(_bracket+1, _closing), _inst, _env); + newFlow.push(_env.FLOW[_inst].slice(_bracket+1, _closing).join(" ")); + } + newFlow.push("]"); + + _bracket ++; + } + + newFlow.push(";"); + + } + else newFlow.push(_var.join("") + "[" + _env.FLOW[_inst][f] + "] = " + _env.FLOW[_inst][f + 2] + ";"); + } + } + else + { + if(_env.FLOW[_inst][f] == "}" || _env.FLOW[_inst][f] == ",") + { + if(_env.FLOW[_inst][f] == "}") + { + _var.pop(); + } + f-=3; + } + } + } + _env.FLOW[_inst] = newFlow; +} + +function forgeArray(_flow, _start, _inst, _env) +{ + if(_flow[_start] == "[" && _flow[_start + 1] == "]") + { + _flow[_start] = "new NerdCore::Class::Array("; + _flow[_start + 1] = ")"; + return; + } + var _brack = 0; + for(var i = _start; i < _flow.length; i++) + { + if(_flow[i] == "[") + { + _brack++; + _flow[i] = "new NerdCore::Class::Array({"; + } + else if(_flow[i] == "]") + { + _brack--; + _flow[i] = "})"; + } + if(_brack == 0) + { + return i; + } + else if(_brack == 1) + { + if(_flow[i] == "{") + { + i = forgeObject(_flow, i, _inst, _env); + _flow[i] = "})"; + } + else if(_flow[i] == "[") + { + if(_flow[i + 1] == "]") + { + _flow[i] = "new NerdCore::Class::Array("; + _flow[i + 1] = ")"; + i++; + } + else + { + i = forgeArray(_flow, i, _inst, _env); + _flow[i] = ")"; + } + } + else if(_env.LAMBDA[_flow[i]]) + { + var _l = _env.LAMBDA[_flow[i]]; + _l.env.REGISTER = _l.env.REGISTER.concat(_env.REGISTER); + + for(var k = 0; k < _l.env.FLOW.length; k) + { + k = verifyFlow(_l.env.AST[k], _l.env.FLOW[k], k, _l.env.FLOW, _l.env); + } + + var _lambdaBody = ""; + if(_l.env.FLOW[_l.env.FLOW.length-1][0] == "}") + { + _l.env.FLOW[_l.env.FLOW.length-1] = ["return NerdCore::Global::null;", "}", ")", ";"]; + } + for(var jj = 0; jj < _l.env.FLOW.length; jj++) + { + _lambdaBody += _l.env.FLOW[jj].join(" "); + } + _flow[0] = _lambdaBody + _flow[0]; + } + } + } +} + +function forgeObject(_flow, _start, _inst, _env) +{ + if(_flow[_start] == "{" && _flow[_start + 1] == "}") + { + _flow[_start] = "new NerdCore::Class::Object("; + _flow[_start + 1] = ")"; + return; + } + var _brack = 0; + if(_flow[_start + 2] == ":") + { + for(var i = _start; i < _flow.length; i++) + { + if(_flow[i] == "{") + { + _brack++; + _flow[i] = "new NerdCore::Class::Object({"; + } + else if(_flow[i] == "}") + { + _brack--; + } + if(_brack == 0) + { + if(_flow[i] == "}") + { + _flow[i] = "})"; + } + return i; + } + else if(_brack == 1) + { + if(_flow[i] == ":") + { + _flow[i] = ","; + if(_flow[i - 1][0] != "\"") + { + _flow[i - 1] = "\"" + _flow[i - 1] + "\""; + } + _flow[i - 1] = "{" + _flow[i - 1]; + // if nested object + if(_flow[i + 1] == "{") + { + if(_flow[i + 2] == "}") + { + _flow[i + 1] = "new NerdCore::Class::Object("; + _flow[i + 2] = ")}"; + i += 2; + } + else + { + i = forgeObject(_flow, i+1, _inst, _env); + _flow[i] = "})"; + } + + } + + else + { + + if(_env.LAMBDA[_flow[i + 1]]) + { + var _l = _env.LAMBDA[_flow[i + 1]]; + _l.env.REGISTER = _l.env.REGISTER.concat(_env.REGISTER); + + _flow[i + 1] = "var(" + _flow[i + 1] + ")"; + + for(var k = 0; k < _l.env.FLOW.length; k) + { + k = verifyFlow(_l.env.AST[k], _l.env.FLOW[k], k, _l.env.FLOW, _l.env); + } + + var _lambdaBody = ""; + if(_l.env.FLOW[_l.env.FLOW.length-1][0] == "}") + { + _l.env.FLOW[_l.env.FLOW.length-1] = ["return NerdCore::Global::null;", "}", ")", ";"]; + } + for(var jj = 0; jj < _l.env.FLOW.length; jj++) + { + _lambdaBody += _l.env.FLOW[jj].join(" "); + } + _flow[0] = _lambdaBody + _flow[0]; + } + else if(_flow[i + 1] && isVariable(_flow[i + 1]).check && !varExists(_flow[i + 1], _env).error) + { + if(_flow[i + 2] == "[") + { + var _acc = 0; + i++; + while(++i && i < _flow.length) + { + if(_flow[i] == "[") + { + _acc++; + } + else if(_flow[i] == "]") + { + _acc--; + } + if(_acc == 0) + { + break; + } + } + } + } + + else if(_flow[i + 1] == "[") + { + if(_flow[i + 2] == "]") + { + _flow[i + 1] = "new NerdCore::Class::Array("; + _flow[i + 2] = ")}"; + i += 2; + continue; + } + else + { + i = forgeArray(_flow, i+1, _inst, _env); + _flow[i] = ")}"; + } + } + + if(_flow[i + 1] != "}") + { + _flow[i + 1] = _flow[i + 1] + "}"; + if(_flow[i] != ",") + { + _flow[i + 1] += ","; + } + } + } + + } + } + } + } +} + +var _NO_THIS = ["if", "else", "while", "for", "while", "typeof", "type_of", "size_of", "length_of", "catch"]; +var _NO_CALL = ["require", "function"]; +var checkCalls = function(_eq, _flow, _inst, _env) +{ + var _callTree = []; + var _current = 0; + var _lastThis; + for(var i = 0; i < _flow.length; i++) + { + var _start = -1; + var _end = -1; + var _par = 0; + if(_flow[i] == "(") + { + _par++; + _start = i - 1; + var _end = -1; + for(var j = i+1; j < _flow.length; j++) + { + if(_flow[j] == "(") + { + _par++; + } + if(_flow[j] == ")") + { + _par--; + } + if(_par == 0) + { + _end = j; + break; + } + } + if(_end != -1) + { + var _var = i-1; + while(--_var > -1) + { + if(_flow[_var] == "]" || _flow[_var] == "[" || _flow[_var][0] == "\"" || isVariable(_flow[_var], _env).check) + { + // nothing to do + } + else + { + break; + } + } + _var++; + if(_NO_CALL.indexOf(_flow[_var]) < 0) + { + // FORGE LAMBDAS + for(var a = 0; a < _env.FLOW[_inst].length; a++) + { + if(isVariable(_env.FLOW[_inst][a]).check) + { + if(_env.LAMBDA[_env.FLOW[_inst][a]]) + { + var _l = _env.LAMBDA[_env.FLOW[_inst][a]]; + _l.env.REGISTER = _l.env.REGISTER.concat(_env.REGISTER); + + for(var k = 0; k < _l.env.FLOW.length; k) + { + k = verifyFlow(_l.env.AST[k], _l.env.FLOW[k], k, _l.env.FLOW, _l.env); + } + + var _lambdaBody = ""; + if(_l.env.FLOW[_l.env.FLOW.length-1][0] == "}") + { + _l.env.FLOW[_l.env.FLOW.length-1] = ["return NerdCore::Global::null;", "}", ")", ";"]; + } + for(var jj = 0; jj < _l.env.FLOW.length; jj++) + { + _lambdaBody += _l.env.FLOW[jj].join(" "); + } + + _env.FLOW[_inst-1].push(_lambdaBody); + + } + } + } + + var _args = getFunctionArgs(_flow.slice(_var, _end + 1), true, _env, _inst, true); + if(_args.this == "[") + { + if(_lastThis) + { + _args.this = _lastThis; + } + else + { + _args.this == "__NERD_THIS"; + } + } + else + { + _lastThis = _args.this; + } + // forge arrays + for(var a = 0; a < _env.FLOW[_inst].length; a++) + { + if(_env.FLOW[_inst][a] == "[" && _env.FLOW[_inst][a-1] && (_env.FLOW[_inst][a-1] == "(" || _env.FLOW[_inst][a-1] == ",")) + { + var _brack = 1; + for(var b = a+1; b < _env.FLOW[_inst].length; b++) + { + if(_env.FLOW[_inst][b] == "[") + { + _brack++; + } + else if(_env.FLOW[_inst][b] == "]") + { + _brack--; + } + if(_brack == 0) + { + a = forgeArray(_env.FLOW[_inst], a, _inst, _env) + break; + } + } + } + + } + + if(_NO_THIS.indexOf(_args.this) < 0) + { + _flow[i] = _flow[i] + _args.this; + if(_args.args.length > 0) + { + _flow[i] += "," + } + } + for(var a = 0; a < _args.args.length; a+=2) + { + if(RESERVED.indexOf(_args.args[a]) < 0 && isVariable(_args.args[a]).check && !varExists(_args.args[a], _env)) + { + error(`[!] Unknown variable or token: ${_args.args[a]} line:${_env.MAP[_inst][_eq + a].line + 1} position:${_env.MAP[_inst][_eq + a].position}${os.EOL}=> ${array_of_code[_env.MAP[_inst][_eq + a].line]}`); + } + + } + } + } + } + } + + return _inst + 1; + +} + +function verifyFlow(_ast, _flow, _inst, _scope, _env, _main) +{ + if(_ast.length < 1) + { + return _inst + 1; + } + for(var z = 0; z < _flow.length; z++) + { + if(_flow[z] == ".") + { + _scope[_inst] = _scope[_inst].slice(0, z-1); + _scope[_inst].push(_flow[z-1]); + + for(var v = z; v < _flow.length; v++) + { + if(_flow[v] == ".") + { + _scope[_inst].push("["); + _scope[_inst].push("\"" + _flow[v+1] + "\""); + _scope[_inst].push("]"); + v++; + } + else + { + _scope[_inst].push(_flow[v]); + } + } + break; + } + } + _flow = _scope[_inst]; + + for(var i = 0; i < _flow.length; i++) + { + if(_flow[i] == "this") + { + _flow[i] = "__NERD_THIS"; + } + } + + var _next; + if(_scope[_inst+1] && _scope[_inst+1][0]) + { + _next = _scope[_inst+1][0]; + } + var _logicalError = checkLogicalState(_ast[0], _next, _env, _ast); + if(_logicalError.error) + { + error(`[!] ${_logicalError.message}: ${_flow[0]} line:${_env.MAP[_inst][0].line + 1} position:${_env.MAP[_inst][0].position}${os.EOL}=> ${array_of_code[_env.MAP[_inst][0].line]}`); + } + + switch(_flow[0]) + { + case "var": + if(RESERVED.indexOf(_flow[1]) > -1) + { + error(`[!] ${_flow[1]} is a reserved keyword: ${_flow[1]} line:${_env.MAP[_inst][1].line + 1} position:${_env.MAP[_inst][1].position}${os.EOL}=> ${array_of_code[_env.MAP[_inst][1].line]}`); + } + + if(_flow[2] != "=") + { + addVar(_flow[1], _env); + return _inst + 1; + } + else if(_flow[2] == "=") + { + var _existsVar = checkVarExists(_flow[1], _env, _flow); + if(_existsVar.error) + { + error(`[!] ${_existsVar.message}: line:${_env.MAP[_inst][1].line + 1} position:${_env.MAP[_inst][1].position}${os.EOL}=> ${array_of_code[_env.MAP[_inst][1].line]}`); + } + + if(_flow[3] == "function") + { + var _newFlow = [_flow[0], _flow[1], _flow[2], "__NERD_Create_Var_Scoped_Copy_Anon_With_Ref", "(" + _flow[1] + ",{"]; + var _args = getFunctionArgs(_flow, false, _env, _inst); + addVar(_flow[1], _env, 1, _inst); + nextScope(_env); + addLogical("FUNCTION", _env); + _scope[_inst] = _newFlow; + var item = 0; + for(var a = 0; a < _args.args.length; a+=2) + { + addVar(_args.args[a], _env, 5, _inst); + _scope[_inst] = _scope[_inst].concat(["var", _args.args[a], ";", "if", "(", "__NERD_VARLENGTH", ">", item,")", _args.args[a], "=", `__NERD_VARARGS[${item}];`]); + item++; + } + + //verifyExpression(_flow.slice(6), _inst, _env); + return _inst + 1; + } + else if(_flow[3] == "[" ) + { + addVar(_flow[1], _env); + forgeArray(_flow, 3, _inst, _env); + return _inst + 1; + } + else if(_flow[3] == "{}") + { + addVar(_flow[1], _env); + forgeObject(_flow, 3, _inst, _env); + return _inst + 1; + } + else if(_flow[3] == "{") + { + addVar(_flow[1], _env); + forgeObject(_flow, 3, _inst, _env); + return _inst + 1; + } + else if(_flow[3] == "exit") + { + error(`[!] Invalid use of exit: line:${_env.MAP[_inst][eq].line + 1} position:${_env.MAP[_inst][eq].position}${os.EOL}=> ${array_of_code[_env.MAP[_inst][eq].line]}`); + } + else if(_flow[3] == "require") + { + addVar(_flow[1], _env); + verifyExpression(_flow.slice(3), _inst, _env); + var _args = getFunctionArgs(_flow, true, _env, _inst); + if(_args.args.length != 1) + { + error(`[!] Invalid number of parameter, only one required: ${_flow[3]} line:${_env.MAP[_inst][3].line + 1} position:${_env.MAP[_inst][3].position}${os.EOL}=> ${array_of_code[_env.MAP[_inst][3].line]}`); + } + var _required = genRequire(COMPILER.PATH, _args.args[0].slice(1, _args.args[0].length - 1), _env, _flow[1]); + if(_required.add) + { + COMPILER.DECL += _required.code; + } + _scope[_inst] = _flow.slice(0, 3); + _scope[_inst].push(_required.module); + _scope[_inst].push(";"); + } + else + { + addVar(_flow[1], _env); + verifyExpression(_flow.slice(3), _inst, _env); + if(_flow[3] != "arguments" && _flow[3] != "Array") + { + checkCalls(3, _flow, _inst, _env); + } + } + + return _inst + 1; + } + break; + + nextScope(_env); + + break; + + case "}": + if(getLogical(_env).FUNCTION) + { + _scope[_inst] = ["return NerdCore::Global::null;"].concat(_flow).concat([")", ";"]); + removeLogical("FUNCTION", _env); + } + + if(_scope[_inst - 1] && (_scope[_inst - 1][0] == "case" || _scope[_inst - 1][0] == "default")) + { + _scope[_inst - 1].push("break;"); + _env.SWITCH_MAP.pop(); + } + popScope(_env); + + break; + + case "exit": + verifyExpression(_flow.slice(1), _inst, _env); + var _args = getFunctionArgs(_flow, true, _env, _inst); + if(_args.args.length < 1) + { + error(`[!] Invalid number of parameter, only one required: ${_flow[3]} line:${_env.MAP[_inst][3].line + 1} position:${_env.MAP[_inst][3].position}${os.EOL}=> ${array_of_code[_env.MAP[_inst][3].line]}`); + } + break; + case "require": + + var _args = getFunctionArgs(_flow, true, _env, _inst); + if(_args.args.length < 1) + { + error(`[!] Missing file parameter: ${_flow[3]} line:${_env.MAP[_inst][3].line + 1} position:${_env.MAP[_inst][3].position}${os.EOL}=> ${array_of_code[_env.MAP[_inst][3].line]}`); + } + verifyExpression(_flow.slice(1), _inst, _env); + + var _required = genRequire(COMPILER.PATH, _args.args[0].slice(1, _args.args[0].length - 1), _env, _flow[0]); + if(_required.add) + { + COMPILER.DECL += _required.code; + } + _scope[_inst] = []; + _scope[_inst].push(_required.module); + _scope[_inst].push(";"); + + break; + /* + case "function": + var _hoisting = []; + + var _bracketState = 0; + var _end = -1; + for(var s = _inst; s < _scope.length; s++) + { + for(var b = i; b < _scope[s].length; b++) + { + if(_scope[s][b] == "{") + { + _bracketState++; + } + else if(_scope[s][b] == "}") + { + _bracketState--; + if(_bracketState == 0) + { + _end = s+1; + break; + } + } + } + if(s > -1) + { + break; + } + } + + _hoisting = _hoisting.concat(_scope.slice(0, _inst), _scope.slice(_end)); + var _newScope = [].concat(_scope.slice(0, _inst), _scope.slice(_end)); + + _env.FLOW = _env.FLOW.slice(0, _inst).concat(_env.FLOW.slice(_end)); + _env.AST = _env.AST.slice(0, _inst).concat(_env.AST.slice(_end)); + + return _inst; + break; + */ + + case "define": + + _scope[_inst] = []; + if(_flow[2] == "__NERD_Multi_Line_Quote") + { + COMPILER.DECL += "\n" + _flow[4].slice(1, _flow[4].length -1) + "\n"; + } + else COMPILER.DECL += "\n" + _flow[2].slice(1, _flow[2].length - 1) + "\n"; + return _inst + 1; + + break; + + case "include": + + _scope[_inst] = [""]; + if(_flow[2][1] == "<") + { + COMPILER.INCLUDE += "#include " + _flow[2].slice(1, _flow[2].length - 1) + "\n"; + } + else + { + var _toInclude = _flow[2].slice(1, _flow[2].length - 1); + var _pathToInclude = path.resolve(path.join( _env.PATH, _toInclude)); + + if(fs.existsSync(_pathToInclude)) + { + COMPILER.INCLUDE += "#include \"" + _pathToInclude + "\"\n" + } + else COMPILER.INCLUDE += "#include " + _flow[2] + "\n"; + } + return _inst + 1; + + break; + + case "for": + if(_flow[2] == "auto") + { + break; + }; + nextScope(_env); + + var _for = _flow.slice(2); + + if(_flow[4] == "in") + { + addVar(_flow[3], _env); + var _functionID = "__NERD_IT_FUNC_" + Math.random().toString(36).slice(2, 12); + + var _iterator = _for.slice(3, 4); + verifyExpression(_iterator, _inst, _env); + _scope[_inst] = + [ + "var", _functionID, "=", "function", "(", _for[1], ")", "{", + ]; + var _nextScope = + [ + "{{if(" + _iterator[0] + ".type == NerdCore::Enum::Type::Object){ for(auto __NERD_ITERATOR = ((NerdCore::Class::Object*)" + _iterator[0] + ".data.ptr)->object.begin(); __NERD_ITERATOR != ((NerdCore::Class::Object*)" + _iterator[0] + ".data.ptr)->object.end(); ++__NERD_ITERATOR) {if(__NERD_ITERATOR->first.compare(\"__proto__\") != 0) {var " + _for[1] + " = __NERD_ITERATOR->first;" + _functionID + "(null," + _for[1] + ");}}}else if(" + _iterator[0] + ".type == NerdCore::Enum::Type::Array){for(std::size_t __NERD_ITERATOR = 0; __NERD_ITERATOR < ((NerdCore::Class::Array*)" + _iterator[0] + ".data.ptr)->value.size(); __NERD_ITERATOR++) {" + _functionID + "(null,__NERD_ITERATOR);}}else if(" + _iterator[0] + ".type == NerdCore::Enum::Type::String){for(std::size_t __NERD_ITERATOR = 0; __NERD_ITERATOR < ((NerdCore::Class::String*)" + _iterator[0] + ".data.ptr)->value.length(); __NERD_ITERATOR++) {var " + _for[1] + " = __NERD_ITERATOR;" + _functionID + "(null," + _for[1] + ");}}}}", + ]; + + + + var sIndex = 1; + var endOfScope = 0; + for(var f = _inst+1; f < _scope.length; f++) + { + endOfScope = f; + if(_scope[f][_scope[f].length - 1] == "}") + { + sIndex--; + } + if(sIndex == 0) + { + break; + } + } + + _env.FLOW.splice(endOfScope+1, 0, _nextScope); + _env.AST.splice(endOfScope+1, 0, ["NATIVE"]); + + return _inst; + } + + + + var _firstComa = _for.indexOf(";"); + var _init = _for.slice(0, _firstComa); + + _for = _for.slice(_firstComa + 1); + + var _secondComa = _for.indexOf(";"); + var _loop = _for.slice(0, _secondComa); + + var _it = _for.slice(_secondComa + 1, _for.length - 2); + + if(_init[0] == "var") + { + addVar(_init[1], _env); + } + else + { + verifyExpression(_init, _inst, _env); + } + + verifyExpression(_loop, _inst, _env); + verifyExpression(_it, _inst, _env); + + return _inst + 1; + break; + + case "if": + verifyExpression(_flow.slice(2, _flow.length - 2), _inst, _env); + checkCalls(2, _flow, _inst, _env); + addLogical("IF", _env); + nextScope(_env); + return _inst + 1; + break; + + case "else": + if(!getLogical(_env).IF) + { + error(`[!] Use if before else/else if: ${_flow[0]} line:${_env.MAP[_inst][0].line + 1} position:${_env.MAP[_inst][0].position}${os.EOL}=> ${array_of_code[_env.MAP[_inst][0].line]}`); + } + if(_flow[1] && _flow[1] == "if") + { + verifyExpression(_flow.slice(2, _flow.length - 2), _inst, _env); + checkCalls(3, _flow, _inst, _env); + nextScope(_env); + } + else + { + nextScope(_env); + } + + return _inst + 1; + break; + + case "do": + + addLogical("DO", _env); + + nextScope(_env); + return _inst + 1; + + break; + + case "while": + verifyExpression(_flow.slice(2, _flow.length - 2), _inst, _env); + if(getLogical(_env).DO) + { + removeLogical("DO", _env); + } + else + { + nextScope(_env); + } + return _inst + 1; + break; + + case ";": + + break; + + case "try": + + addLogical("TRY", _env); + + nextScope(_env); + return _inst + 1; + break; + + case "catch": + addVar(_scope[_inst][2], _env); + _scope[_inst][2] = "var " + _scope[_inst][2]; + + if(getLogical(_env).TRY) + { + removeLogical("TRY", _env); + } + else + { + error(`[!] Missing try statement before catch: ${_flow[0]} line:${_env.MAP[_inst][0].line + 1} position:${_env.MAP[_inst][0].position}${os.EOL}=> ${array_of_code[_env.MAP[_inst][0].line]}`); + } + nextScope(_env); + return _inst + 1; + break; + + case "return": + if(_flow[1] == "{") + { + //var _returnVar = "__NERD_RETURN_" + _env.MAP[_inst][0].line; + //_env.FLOW[_inst] = ["var", _returnVar, "="].concat(_env.FLOW[_inst].slice(1)); + forgeObject(_flow, 1, _inst, _env); + //_env.FLOW[_inst].push("return"); + //_env.FLOW[_inst].push(" "); + //_env.FLOW[_inst].push(_returnVar); + //_env.FLOW[_inst].push(";"); + } + else if(_flow[1] == ";") + { + _flow[1] = "null;"; + } + else + { + verifyExpression(_flow.slice(1), _inst, _env); + if(_ast[1] != "VARIABLE" && _ast[1] != "EXPRESSION") + { + _flow[1] = "var(" + _flow[1] + ")"; + } + } + return _inst + 1; + break; + case "switch": + nextScope(_env); + var _current = _flow[2]; + if(isString(_current).check || isBoolean(_current).check || isNumber(_current).check) + { + _current = "var(" + _current + ")"; + } + _env.SWITCH_MAP.push(_current); + _scope[_inst] = ["if", "(", "false", ")", "{"]; // switch hack, case will be else if + //_scope[_inst] = ["var", "__NERD_TEST", "=", _flow[2], ";"]; + break; + + case "case": + if(_env.SWITCH_MAP.length < 1) + { + error("[!] case without switch"); + } + if(_scope[_inst-1] && (!_scope[_inst-1][0] || (_scope[_inst-1][0] && (_scope[_inst-1][0] != "case")))) + { + _scope[_inst-1].push("}"); + } + + var _current = _flow[1]; + + if(isString(_current).check || isBoolean(_current).check || isNumber(_current).check) + { + _current = "var(" + _current + ")"; + } + + _scope[_inst] = ["else", "if", "(", _current, "==", _env.SWITCH_MAP[_env.SWITCH_MAP.length - 1]]; + while(_scope[_inst+1] && _scope[_inst+1][0] && _scope[_inst+1][0] == "case") + { + _scope[_inst].push(" || "); + if(isString(_scope[_inst+1][1]).check || isBoolean(_scope[_inst+1][1]).check || isNumber(_scope[_inst+1][1]).check) + { + _scope[_inst].push("var"); + _scope[_inst].push("("); + _scope[_inst].push(_scope[_inst+1][1]); + _scope[_inst].push(")"); + } + else + { + _scope[_inst].push(_scope[_inst+1][1]); + } + + _scope[_inst].push("=="); + _scope[_inst].push(_env.SWITCH_MAP[_env.SWITCH_MAP.length - 1]); + _scope[_inst+1] = []; + _inst++; + } + _scope[_inst].push(")"); + _scope[_inst].push("{"); + + break; + + case "default": + if(_scope[_inst-1] && (!_scope[_inst-1][0] || (_scope[_inst-1][0] && (_scope[_inst-1][0] != "case")))) + { + _scope[_inst-1].push("}"); + } + _scope[_inst] = ["else", "{"]; + break; + + + case "break": + _scope[_inst] = []; + break; + + case "true": + case "false": + case "new": + + break; + + case "this": + _flow[0] = "__NERD_THIS"; + break; + + default: + if(varExists(_flow[0], _env)) + { + /* + if(!CLI.cli["--env"] || CLI.cli["--env"].argument != "js") + { + if(_flow[0][0] == "_" && _flow[1] && _flow[1] == "=") + { + error(`[!] Cannot reassign value to constant: ${_flow[0]} line:${_env.MAP[_inst][0].line + 1} position:${_env.MAP[_inst][0].position}${os.EOL}=> ${array_of_code[_env.MAP[_inst][0].line]}`); + } + } + */ + + if(_flow[1]) + { + for(var i = 0; i < _flow.length - 1; i++) + { + if(_flow[i] == "require") + { + verifyExpression(_flow.slice(i), _inst, _env); + var _args = getFunctionArgs(_flow, true, _env, _inst); + if(_args.args.length != 1) + { + error(`[!] Invalid number of parameter, only one required: ${_flow[3]} line:${_env.MAP[_inst][3].line + 1} position:${_env.MAP[_inst][3].position}${os.EOL}=> ${array_of_code[_env.MAP[_inst][3].line]}`); + } + var _required = genRequire(COMPILER.PATH, _args.args[0].slice(1, _args.args[0].length - 1), _env); + if(_required.add) + { + COMPILER.DECL += _required.code; + } + _scope[_inst] = _flow.slice(0, i); + _scope[_inst].push(_required.module); + _scope[_inst].push(";"); + break; + } + } + + var _eq = -1; + while(_eq < _flow.length) + { + for(var e = _eq; e < _flow.length; e++) + { + if(_flow[e] == "=") + { + _eq = e; + break; + } + } + + var _left = _flow.slice(0, _eq).join(" "); + + if(_flow[_eq] == "=") + { + if(_flow[_eq + 1] == "{") + { + forgeObject(_flow, _eq + 1, _inst, _env); + } + else if(_flow[_eq + 1] == "[") + { + forgeArray( _flow, _eq + 1, _inst, _env) + } + else if(_flow[_eq + 1] == "[]") + { + forgeArray( _flow, _eq + 1, _inst, _env); + } + else if(_flow[_eq + 1] == "function") + { + var _newFlow = _flow.slice(0, _eq + 1).concat(["__NERD_Create_Var_Scoped_Copy_Anon", "({"]); + var _args = getFunctionArgs(_flow, false, _env, _inst); + nextScope(_env); + addLogical("FUNCTION", _env); + _scope[_inst] = _newFlow; + var item = 0; + for(var a = 0; a < _args.args.length; a+=2) + { + addVar(_args.args[a], _env, 4, _inst); + _scope[_inst] = _scope[_inst].concat(["var", _args.args[a], ";", "if", "(", "__NERD_VARLENGTH", ">", item,")", _args.args[a], "=", `__NERD_VARARGS[${item}];`]); + item++; + } + verifyExpression(_flow.slice(_eq + 1), _inst, _env); + } + break; + //return _inst + 1; + } + _eq++; + } + + if(_eq == _flow.length) + { + _eq = 0; + } + else + { + _eq++; + } + + checkCalls(_eq, _flow, _inst, _env); + + } + } + else if(_ast[0] == "NATIVE") + { + // nothing to do + } + else + { + error(`[!] Unknown variable or token: ${_flow[0]} line:${_env.MAP[_inst][0].line + 1} position:${_env.MAP[_inst][0].position}${os.EOL}=> ${array_of_code[_env.MAP[_inst][0].line]}`); + } + + break; + } + verifyExpression(_flow, _inst, _env); + return _inst+1; +} + +module.exports = verifyFlow; \ No newline at end of file diff --git a/nectar.js b/nectar.js deleted file mode 100755 index f66661ce7..000000000 --- a/nectar.js +++ /dev/null @@ -1,684 +0,0 @@ -#!/usr/bin/env node - -var VALID_COMPILER = ["native"]; - -global.fs = require('fs'); -global.os = require('os'); -global.path = require('path'); -global.process = require('process'); -global.querystring = require('querystring'); -global.child_process = require('child_process'); -global.execSync = child_process.execSync; -global.extern = path.join(__dirname, "node_modules", "nectarjs_external"); -global.NJS_ENV = {}; - -try - { - require("strip-comments"); - } - catch(e) - { - console.log("[*] First execution, installing core dependencies"); - process.chdir(__dirname); - child_process.execSync("npm i"); - console.log("[+] Core dependencies installed, please launch your command again"); - process.exit(0); - } - - -global.PACKAGE = require(path.join(__dirname, "package.json")); -global.VERSION = PACKAGE.version; -var CONFIGPATH = os.homedir() + path.sep + ".nectar"; -var CONFIGFILE = CONFIGPATH + "/" + "nectar.json"; -global.CONFIG = {}; -Init(); -readConfig(); - -var parseCLI = require('./base/cli/cliParser.js'); -global.coreHttp = require('./base/util/httpUtils.js'); -var getExt = require('./base/util/getExt.js'); -var getTips = require('./base/util/getTips.js'); -var Flash = require('./base/util/flash.js'); -var installModule = require('./base/util/installModule.js'); -var initModule = require('./base/util/initModule.js'); -global.rmdir = require("./base/util/rmdir.js"); -global.copyRecursiveSync = require("./base/util/copyRecursive.js"); -global.copyDirSync = require("./base/util/copyDirSync.js"); -global.Zip = require("./base/util/adm-zip/"); -var CURRENT = process.cwd(); -var TARGET = require('./base/compiler/target.js'); -global.LINT = require("./base/util/lint.js"); -global.compileTS = require("./base/compiler/ts.js"); -global.PLATFORM = os.platform(); -global.ARCH = os.arch(); - -global.COMPILER = {}; -global.NECTAR_PATH = __dirname; -var DEFAULT_COMPILER = "native"; - -global.CLI = parseCLI(process.argv); - -if(CLI.error) -{ - console.log(CLI.msg); - return; -} - -var ACTION = "build"; -if(CLI.cli["--install_external"]) ACTION = "installExternal"; -else if(CLI.cli["--help"] || CLI.cli["-h"]) ACTION = "help"; -else if(CLI.cli["--example"] || CLI.cli["--examples"]) ACTION = "example"; -else if(CLI.cli["--version"] || CLI.cli["-v"]) ACTION = "version"; -else if(CLI.cli["--install"] || CLI.cli["-i"]) ACTION = "install"; -else if(CLI.cli["--init-module"]) ACTION = "initModule"; -else if(CLI.cli["--project"]) ACTION = "showproject"; -else if(CLI.cli["--clean"] || CLI.cli["--purge"]) ACTION = "clean"; -else if(CLI.cli["--setauthor"] || CLI.cli["--setid"] || CLI.cli["--setkey"] || CLI.cli["--sethash"] || CLI.cli["--setsdk"] || CLI.cli["--setndk"] || CLI.cli["--setwin_inc_ucrt"] || CLI.cli["--setwin_lib_ucrt"] || CLI.cli["--setwin_lib_um"] || CLI.cli["--setapi"] || CLI.cli["--setport"] || CLI.cli["--setxcode"]) ACTION = "setconfig"; -else if(CLI.cli["--config"]) ACTION = "showconfig"; -else if(CLI.cli["--reinit"]) ACTION = "reinitconfig"; - -switch(ACTION) -{ - case "installExternal": - installExternal(); - break; - case "version": - showVersion(); - break; - - case "help": - Help(); - break; - - case "example": - copyExample(); - break; - - case "showproject": - showProject(); - break; - - case "setconfig": - setConfig(); - break; - - case "showconfig": - showConfig(); - break; - - case "reinitconfig": - reinitConfig(); - break; - - case "build": - Build(); - break; - - case "install": - Install(); - break; - - case "initModule": - InitModule(); - break; - - case "clean": - Clean(); - break; - - default: - Help(); - break; -} - -function installExternal() -{ - console.log("[*] Installing external dependencies...") - process.chdir(NECTAR_PATH); - execSync("npm r nectarjs_external"); - execSync("npm i nectarjs_external"); - console.log("[+] External dependencies installed") -} - -function getExampleFiles (dir, list) -{ - list = list || []; - var files = fs.readdirSync(dir); - for (var i in files) - { - var name = dir + path.sep + files[i]; - if (fs.statSync(name).isDirectory()) - { - getExampleFiles(name, list); - } - else - { - list.push(name); - } - } - return list; -} - -function copyExample() -{ - var folder = ["c"]; - var list = getExampleFiles(path.join(__dirname, "example")); - for(var l in list) - { - var name = list[l].split(path.sep); - if(name[name.length - 2] && folder.indexOf(name[name.length - 2]) > -1) - { - try - { - fs.mkdirSync(name[name.length - 2]); - }catch(e){} - name = name[name.length - 2] + "/" + name[name.length - 1]; - } - else name = name[name.length - 1]; - var content = fs.readFileSync(list[l]); - fs.writeFileSync(name, content); - console.log("[+] Copy of " + name + " done"); - } -} - -function Init() -{ - if(!fs.existsSync(CONFIGPATH)) fs.mkdirSync(CONFIGPATH); - try - { - var writeConfig = false; - var config = ""; - config = fs.readFileSync(CONFIGFILE); - config = JSON.parse(config) - if(!config.version) - { - config.version = VERSION; - config.port = 443; - fs.writeFileSync(CONFIGFILE, JSON.stringify(config)); - } - } - catch (e) - { - writeConfig = true; - } - - if(!config || writeConfig) - { - var defaultConfig = { author: os.userInfo().username, id: "", key:"", hash:"SHA256", api:"api.nectarjs.com", port:443, version: VERSION, sdk: "", ndk: "", win_inc_ucrt: "", win_lib_ucrt: "", win_lib_um: "", xcode: "/Applications/Xcode.app"}; - fs.writeFileSync(CONFIGFILE, JSON.stringify(defaultConfig)); - } -} - -function readConfig() -{ - try - { - var tmp = fs.readFileSync(CONFIGFILE); - CONFIG = JSON.parse(tmp); - } - catch (e) - { - Init(); - readConfig(); - } -} - -function showConfig(str) -{ - console.log(); - if(str) console.log(str); - else console.log("[*] Current config :"); - console.log("author : " + CONFIG.author); - console.log("id : " + CONFIG.id); - console.log("key : " + CONFIG.key); - console.log("hash : " + CONFIG.hash); - console.log("api : " + CONFIG.api); - console.log("port : " + CONFIG.port); - console.log("version : " + VERSION); - console.log("Android SDK : " + CONFIG.sdk); - console.log("Android NDK : " + CONFIG.ndk); - console.log("Windows Include UCRT : " + CONFIG.win_inc_ucrt); - console.log("Android Lib UCRT : " + CONFIG.win_lib_ucrt); - console.log("Android Lib UM : " + CONFIG.win_lib_um); - console.log("iOS xCode : " + CONFIG.xcode); - console.log(); -} - -function setConfig() -{ - try - { - if(CLI.cli["--setauthor"]) CONFIG.author = CLI.cli["--setauthor"].argument; - if(CLI.cli["--setid"]) CONFIG.id = CLI.cli["--setid"].argument; - if(CLI.cli["--setkey"]) CONFIG.key = CLI.cli["--setkey"].argument; - if(CLI.cli["--setapi"]) CONFIG.api = CLI.cli["--setapi"].argument; - if(CLI.cli["--setport"]) CONFIG.port = parseInt(CLI.cli["--setport"].argument); - if(CLI.cli["--setsdk"]) CONFIG.sdk = CLI.cli["--setsdk"].argument.replace(/\\/g, "\\\\").replace(/:/g, "\\\:"); - if(CLI.cli["--setndk"]) CONFIG.ndk = CLI.cli["--setndk"].argument.replace(/\\/g, "\\\\").replace(/:/g, "\\\:"); - if(CLI.cli["--setwin_ucrt"]) CONFIG.win_ucrt = CLI.cli["--setwin_ucrt"].argument; - if(CLI.cli["--setwin_inc_ucrt"]) CONFIG.win_inc_ucrt = CLI.cli["--setwin_inc_ucrt"].argument; - if(CLI.cli["--setwin_lib_ucrt"]) CONFIG.win_lib_ucrt = CLI.cli["--setwin_lib_ucrt"].argument; - if(CLI.cli["--setwin_lib_um"]) CONFIG.win_lib_um = CLI.cli["--setwin_lib_um"].argument; - if(CLI.cli["--setxcode"]) CONFIG.xcode = CLI.cli["--setxcode"].argument; - - if(isNaN(CONFIG.port)) - { - console.dir("[!] This port is not valid : '" + CLI.cli["--setport"].argument +"', please specify a number."); - return; - } - - if(CLI.cli["--sethash"]) - { - var hash = CLI.cli["--sethash"].argument.toUpperCase(); - if(validHash.indexOf(hash) < 0) - { - console.dir("[!] Hash is not valid and won't be saved. Valid hash are : MD5, SHA256 ans SHA512"); - } - else - { - CONFIG.hash = hash; - } - } - - fs.writeFileSync(CONFIGFILE, JSON.stringify(CONFIG)); - } - catch (e) - { - console.log(e); - } -} - -function reinitConfig() -{ - try - { - var defaultConfig = { author: os.userInfo().username, id: "", key:"", hash:"SHA256", api:"api.nectarjs.com", "port":443, sdk: "", ndk: "", win_inc_ucrt: "", win_lib_ucrt: "", win_lib_um: "", xcode: "/Applications/Xcode.app"}; - fs.writeFileSync(CONFIGFILE, JSON.stringify(defaultConfig)); - readConfig(); - showConfig("[*] Config reinitialized :"); - } catch (e) - { - console.log(e); - } -} - -function showProject() -{ - var project = "project.json"; - if(CLI.stack && CLI.stack.length > 0) - { - project = CLI.stack[CLI.stack.length - 1]; - } - try - { - var pConf = fs.readFileSync(project); - var jConf = JSON.parse(pConf); - printProject(jConf); - } - catch (e) - { - console.dir("[!] Error : " + e.message); - } - -} - -function Clean(purge) -{ - var project = "project.json"; - if(CLI.stack && CLI.stack.length > 0) - { - project = CLI.stack[CLI.stack.length - 1]; - } - try - { - var pConf = fs.readFileSync(project); - var jConf = JSON.parse(pConf); - if(jConf.main) - { - if( (CLI.cli["--purge"] || purge) && jConf.out) - { - var outFile = jConf.out; - if(jConf.out[0] != path.sep) - { - outFile = path.join(path.dirname(project), jConf.out); - } - try{fs.unlinkSync(outFile);}catch(e){} - } - } - try{fs.unlinkSync(project)}catch(e){} - } - catch (e) - { - console.dir("[!] Error : " + e.message); - } -} - -function printProject(obj) -{ - console.log(); - console.log("[*] Project configuration :\n"); - console.log("Main file : " + obj.main); - console.log("Output : " + obj.out); - console.log("Target : " + obj.target); - console.log("Preset : " + obj.preset); - console.log(); -} - -function Build(prepare) -{ - if(CLI.cli["--build"]) DEFAULT_COMPILER = CLI.cli["--build"].argument; - else if(CLI.cli["-b"]) DEFAULT_COMPILER = CLI.cli["-b"].argument; - - COMPILER = require(path.join(__dirname, "compiler", DEFAULT_COMPILER, "compiler.js")); - - if(CLI.cli["--compiler"] && CLI.cli["--compiler"].argument) COMPILER.COMPILER = CLI.cli["--compiler"].argument; - else if(CLI.cli["-c"] && CLI.cli["-c"].argument) COMPILER.COMPILER = CLI.cli["-c"].argument; - - var preset; - if(CLI.cli["--preset"] && CLI.cli["--preset"].argument) preset = CLI.cli["--preset"].argument; - - var env; - if(CLI.cli["--env"] && CLI.cli["--env"].argument) env = CLI.cli["--env"].argument; - - if(!preset) preset = "speed"; - COMPILER.preset = preset; - - if(!env) env = "std"; - - if(env != "std" && env != "test") - { - var _external = false; - try - { - var _external = require("nectarjs_external") - } - catch(e) - { - - } - if(!_external) - { - console.log("You need to install the package nectarjs_external to use this environment: "); - console.log("nectar --install_external"); - process.exit(0); - } - } - var target; - if(CLI.cli["--target"] && CLI.cli["--target"].argument) target = CLI.cli["--target"].argument; - COMPILER.TARGET = target; - - var spec; - if(CLI.cli["--spec"] && CLI.cli["--spec"].argument) spec = CLI.cli["--spec"].argument; - COMPILER.SPEC = spec; - - var _tmp; - if(CLI.cli["--tmp"] && CLI.cli["--tmp"].argument) - _tmp = path.resolve(CLI.cli["--tmp"].argument); - else { - var _current = process.cwd(); - var _npath = path.join(_current, ".nectar"); - _tmp = path.join(_npath, Math.random().toString(36).substr(2, 5)); - } - COMPILER.TMP_FOLDER = _tmp; - - if(!CLI.stack || CLI.stack.length < 1) - { - console.error("[!] Missing file to compile or project.json path, 'nectar --help' if you need help"); - return; - } - else - { - var QUIET = false; - var _in = CLI.stack[0]; - COMPILER.IN = _in; - fs.readFile(_in, function(err, fileData) - { - if(err) - { - console.error("[!] Error : " + err.message); - return; - } - else - { - - /* CHECKING */ - Check(_in); - /* END CHECKING */ - - var ext = "js"; - var _Ext = _in.split("."); - if(_Ext.length > 1) ext = _Ext[_Ext.length - 1]; - - /*** CREATE COMPIL ENV ***/ - var _current = process.cwd(); - var _npath = path.join(_current, ".nectar"); - try { fs.mkdirSync(_npath); } catch(e){}; - if(COMPILER.ENV.init) COMPILER.ENV.init(COMPILER.TMP_FOLDER); - else try { fs.mkdirSync(COMPILER.TMP_FOLDER); } catch(e){}; - - /*** PREPARE SRC ***/ - var _libOut = COMPILER.TMP_FOLDER; - if(COMPILER.ENV.prepare) - { - var _tmpLibOut = COMPILER.ENV.prepare(COMPILER.TMP_FOLDER); - if(_tmpLibOut) _libOut = _tmpLibOut; - } - - COMPILER.Prepare(_libOut); - - var fProject = false; - var prjectConf = {}; - if(path.basename(_in) == "project.json") - { - try - { - projectConf = JSON.parse(fileData); - fProject = true; - single = false; - } - catch (e) - { - console.error("[!] Error with project.json : " + e.message); - return; - } - } - - /*** GET FILES NAME ***/ - var _binoutput = ""; - if(fProject) - { - _binoutput = projectConf.out; - } - else _binoutput = path.basename(_in).slice(0, path.basename(_in).length - path.extname(_in).length); - - if(CLI.cli["-o"]) - { - _binoutput = CLI.cli["-o"].argument; - } - else if(CLI.cli["--out"]) - { - _binoutput = CLI.cli["--out"].argument; - } - - _binoutput = path.join(process.cwd(), _binoutput) - - var _cout = path.join(COMPILER.TMP_FOLDER, path.basename(_in).slice(0, path.basename(_in).length - path.extname(_in).length) + ".cpp"); - - _binoutput = COMPILER.Out(_binoutput); - - var projTo = ""; - var tmp = _in.split("/"); - - projTo = _binoutput; - - var main = _in.split(path.sep); - main = main[main.length - 1]; - - var tips = ""; - - if(!QUIET) console.log("[*] Generating source file"); - - var _code = fs.readFileSync(path.resolve(_in)).toString(); - - if(ext == "ts") _code = compileTS(_code, _in); - COMPILER.Parse(_code); - - if(COMPILER.ENV.write) - { - COMPILER.ENV.write(COMPILER.MAIN, _cout); - } - else - { - if((!CLI.cli["--profile"]) || CLI.cli["--profile"].argument != "use") - { - fs.writeFileSync(_cout, COMPILER.MAIN); - } - } - - if(CLI.cli["--generate"]) - { - if(!QUIET) console.log("[*] Source generated in " + path.dirname(_cout)); - process.exit(0); - } - - if(!QUIET) console.log("[*] Compiling with preset: " + COMPILER.preset); - try - { - COMPILER.Compile(COMPILER.TMP_FOLDER, _cout); - } - catch(e) - { - console.log(e); - console.log("[!] Compilation error"); - process.exit(1); - } - - if(COMPILER.ENV.post) COMPILER.ENV.post(); - - try - { - fs.chmodSync(_binoutput, "755"); - } - catch(e){} - - if(COMPILER.Package) COMPILER.Package(); - - process.chdir(NECTAR_PATH); - - if(!CLI.cli["--conserve"]) - { - var _current = process.cwd(); - process.chdir(_current); - rmdir(COMPILER.TMP_FOLDER, function() {}); - } - - var verb = false; - if(CLI.cli["--verbose"]) verb = true; - - var bin; - try - { - bin = fs.statSync(_binoutput); - } - catch(e){} - - if(COMPILER.ENV.clean && typeof COMPILER.ENV.clean == "function") - { - COMPILER.ENV.clean(); - } - - if(verb && bin) - { - console.log("[+] Compilation done\n"); - console.log("[*] Informations :\n"); - var size = "Size : "; - if(bin.size < 1000) size += bin.size + " o"; - else if(bin.size < 1000000) size += (bin.size / 1000) + " ko"; - else size += (bin.size / 1000000) + " mo"; - console.log(size); - console.log("Main file : " + main); - console.log("Output : " + projTo); - console.log("Preset : " + preset); - } - - if(CLI.cli["--tips"] && tips && tips.length > 0) console.log("\n" + tips + "\n"); - - if(CLI.cli["--flash"]) Flash(projTo, CLI.cli["--flash"].argument, target, verb); - - if(CLI.cli["--run"]) - { - console.log(); - console.log("[*] Executing " + _binoutput); - if(!COMPILER.ENV.run) - { - var _binexec = child_process.spawnSync(_binoutput, - [], - { - detached: false, - stdio: [process.stdin, process.stdout, process.stderr], - cwd: process.cwd(), - env: process.env - }); - if(_binexec.error) - { - console.log(_binexec.error); - } - } - else COMPILER.ENV.run(); - } - if(!CLI.cli["--prepare"]) - { - var _current = path.dirname(path.resolve(process.argv[1])); - var _native = path.join(_current, "core", "nativejs"); - var _to = path.resolve(projTo); - var _fullPathCompile = path.resolve(main); - } - else - { - var pObj = {main: main, out:projTo, target:target, preset:preset}; - printProject(pObj); - } - } - }); - } -} - -function showVersion() -{ - console.log("NectarJS v" + VERSION); -} - -function Check(file) -{ - if(file.split('.').pop() != "js") return; - - if(CLI.cli["--check"]) process.exit(); -} - -function Help() -{ - showVersion(); - console.log("\n[*] Compile :\nnectar [--env std|node|arduino|wasm|android] [--target the-target] [--run] [--generate] [--conserve] [--reg 1000] [--preset speed|size] [-o output] [--tips] [--flash device] source.js|project.json\n"); - console.log("[*] Show project :\nnectar [--project] [project.json]\n"); - console.log("[*] Clean project :\nnectar [--clean] [--purge] [path_to_project.json]\n"); - console.log("[*] Copy example files :\nnectar --example\n"); - console.log("[*] Nectar version :\nnectar --version\n"); -} - -function Install() -{ - var _module = ""; - if(CLI.cli["--install"]) _module = CLI.cli["--install"].argument; - else _module = CLI.cli["-i"].argument; - installModule(_module); -} - -function InitModule() -{ - var _module = CLI.cli["--init-module"].argument; - var _author = "undefined"; - - if(CLI.cli["--author"]) _name = CLI.cli["--author"].argument; - - initModule(_author, _module); -} \ No newline at end of file diff --git a/nectar_modules/Array/index.js b/nectar_modules/Array/index.js deleted file mode 100644 index a5ade4106..000000000 --- a/nectar_modules/Array/index.js +++ /dev/null @@ -1,34 +0,0 @@ -/* - * This file is part of NectarJS - * Copyright (c) 2017 - 2020 Adrien THIERRY - * http://nectarjs.com - https://seraum.com/ - * - * sources : https://github.com/nectarjs/nectarjs - * - * NectarJS is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * NectarJS is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with NectarJS. If not, see . - * - */ - -var _Array = -{ - prototype: - { - slice: function() - { - console.log(this); - }, - }, -}; - -module.exports = _Array; diff --git a/nectar_modules/Array/lib/native_object.h b/nectar_modules/Array/lib/native_object.h deleted file mode 100644 index 58d635c1d..000000000 --- a/nectar_modules/Array/lib/native_object.h +++ /dev/null @@ -1,26 +0,0 @@ -/* - * This file is part of NectarJS - * Copyright (c) 2017 - 2020 Adrien THIERRY - * http://nectarjs.com - https://seraum.com/ - * - * sources : https://github.com/nectarjs/nectarjs - * - * NectarJS is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * NectarJS is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with NectarJS. If not, see . - * - */ - -function __Nectar_NATIVE_OBJECT_KEYS(_obj) -{ - return __Nectar_Object_Keys(_obj); -}; diff --git a/nectar_modules/Array/package.json b/nectar_modules/Array/package.json deleted file mode 100644 index a2e762fb8..000000000 --- a/nectar_modules/Array/package.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "Array", - "description": "NectarJS base Array module", - "main": "index.js", - "bugs": - { - "url": "https://github.com/NectarJS/nectarjs/issues" - }, - - "directories": - { - "root": ".", - "lib": "lib" - }, - "homepage": "https://github.com/NectarJS/nectarjs#readme", - "keywords": - [ - "nectarjs", - "JSON", - "javascript" - ], - "license": "GPL-3.0-or-later", - "licenses": [ - { - "type": "GPL", - "url": "https://github.com/nectarjs/nectarjs/blob/master/LICENSE" - } - ], - "repository": - { - "type": "git", - "url": "git+ssh://git@github.com/NectarJS/nectarjs.git" - }, - "version": "0.0.1", - "nectar": - { - "env": ["std", "android", "ios", "node", "arduino", "stm32", "wasm"], - "read_only": [], - "expose": [] - } -} diff --git a/nectar_modules/Date/index.js b/nectar_modules/Date/index.js deleted file mode 100644 index 621c59e85..000000000 --- a/nectar_modules/Date/index.js +++ /dev/null @@ -1,33 +0,0 @@ -/* - * This file is part of NectarJS - * Copyright (c) 2017 - 2020 Adrien THIERRY - * http://nectarjs.com - https://seraum.com/ - * - * sources : https://github.com/nectarjs/nectarjs - * - * NectarJS is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * NectarJS is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with NectarJS. If not, see . - * - */ - -/* Date std module */ -"!_ffi_include libdate/date.h"; - -function _date(_date) -{ - this.__Nectar_Internal_Date = _date; -}; - -_date.now = __Nectar_NATIVE_DATE_NOW; - -module.exports = _date; \ No newline at end of file diff --git a/nectar_modules/Date/libdate/date.h b/nectar_modules/Date/libdate/date.h deleted file mode 100644 index ae68d08b0..000000000 --- a/nectar_modules/Date/libdate/date.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * This file is part of NectarJS - * Copyright (c) 2017 - 2020 Adrien THIERRY - * http://nectarjs.com - https://seraum.com/ - * - * sources : https://github.com/nectarjs/nectarjs - * - * NectarJS is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * NectarJS is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with NectarJS. If not, see . - * - */ - -#include - -using namespace std::chrono; - -function __Nectar_NATIVE_DATE_NOW() -{ - return NectarCore::VAR((double)duration_cast( - system_clock::now().time_since_epoch() - ).count()); -}; diff --git a/nectar_modules/Date/package.json b/nectar_modules/Date/package.json deleted file mode 100644 index d8c21c46e..000000000 --- a/nectar_modules/Date/package.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "Date", - "description": "NectarJS base Date module", - "main": "index.js", - "bugs": - { - "url": "https://github.com/NectarJS/nectarjs/issues" - }, - - "directories": - { - "root": ".", - "lib": "libdate" - }, - "homepage": "https://github.com/NectarJS/nectarjs#readme", - "keywords": - [ - "nectarjs", - "Date", - "javascript" - ], - "license": "GPL-3.0-or-later", - "licenses": [ - { - "type": "GPL", - "url": "https://github.com/nectarjs/nectarjs/blob/master/LICENSE" - } - ], - "repository": - { - "type": "git", - "url": "git+ssh://git@github.com/NectarJS/nectarjs.git" - }, - "version": "0.0.1", - "nectar": - { - "env": ["std", "android", "ios", "node", "arduino", "stm32", "wasm"], - "read_only": [], - "expose": ["__Nectar_NATIVE_DATE_NOW"] - } -} diff --git a/nectar_modules/Error/index.js b/nectar_modules/Error/index.js deleted file mode 100644 index 63c5590e6..000000000 --- a/nectar_modules/Error/index.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * This file is part of NectarJS - * Copyright (c) 2017 - 2020 Adrien THIERRY - * http://nectarjs.com - https://seraum.com/ - * - * sources : https://github.com/nectarjs/nectarjs - * - * NectarJS is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * NectarJS is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with NectarJS. If not, see . - * - */ - -var _Error = -{ - -}; - -module.exports = _Error; diff --git a/nectar_modules/Error/package.json b/nectar_modules/Error/package.json deleted file mode 100644 index 19a6c2908..000000000 --- a/nectar_modules/Error/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "Error", - "description": "NectarJS base Error module", - "main": "index.js", - "bugs": - { - "url": "https://github.com/NectarJS/nectarjs/issues" - }, - - "directories": - { - "root": "." - }, - "homepage": "https://github.com/NectarJS/nectarjs#readme", - "keywords": - [ - "nectarjs", - "JSON", - "javascript" - ], - "license": "GPL-3.0-or-later", - "licenses": [ - { - "type": "GPL", - "url": "https://github.com/nectarjs/nectarjs/blob/master/LICENSE" - } - ], - "repository": - { - "type": "git", - "url": "git+ssh://git@github.com/NectarJS/nectarjs.git" - }, - "version": "0.0.1", - "nectar": - { - "env": ["std", "android", "ios", "node", "arduino", "stm32", "esp32", "wasm"], - "read_only": [], - "expose": [] - } -} diff --git a/nectar_modules/JSON/index.js b/nectar_modules/JSON/index.js deleted file mode 100644 index fa76212f5..000000000 --- a/nectar_modules/JSON/index.js +++ /dev/null @@ -1,31 +0,0 @@ -/* - * This file is part of NectarJS - * Copyright (c) 2017 - 2020 Adrien THIERRY - * http://nectarjs.com - https://seraum.com/ - * - * sources : https://github.com/nectarjs/nectarjs - * - * NectarJS is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * NectarJS is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with NectarJS. If not, see . - * - */ - -"!_ffi_include lib/json.h"; - -var _JSON = -{ - parse: __Nectar_JSON_PARSE, - stringify: __Nectar_JSON_STRINGIFY, -}; - -module.exports = _JSON; diff --git a/nectar_modules/JSON/lib/json.h b/nectar_modules/JSON/lib/json.h deleted file mode 100644 index 0179029f8..000000000 --- a/nectar_modules/JSON/lib/json.h +++ /dev/null @@ -1,166 +0,0 @@ -/* - * This file is part of NectarJS - * Copyright (c) 2017 - 2020 Adrien THIERRY - * http://nectarjs.com - https://seraum.com/ - * - * sources : https://github.com/nectarjs/nectarjs - * - * NectarJS is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * NectarJS is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with NectarJS. If not, see . - * - */ - -#define JSMN_STRICT -#ifndef __Nectar_ARDUINO - #define JSMN_PARENT_LINK -#endif - -#include "jsmn.h" - -NectarCore::VAR to_int(char const *s) -{ - bool _float = false; - if(strchr(s, '.')) - { - return NectarCore::VAR(std::stod(s)); - } - else - { - return NectarCore::VAR(std::stoi(s)); - } -} - -static inline void *realloc_it(void *ptrmem, size_t size) { - void *p = std::realloc(ptrmem, size); - if (!p) { - std::free(ptrmem); - std::fprintf(stderr, "realloc(): errno=%d\n", errno); - } - return p; -} - - - -char* substr(const char* arr, int begin, int len) -{ - char* res = new char[len]; - for (int i = 0; i < len; i++) res[i] = *(arr + begin + i); - res[len] = 0; - return res; -} - - - -int dump(const char *js, jsmntok_t *t, size_t count, int indent, var& _res) -{ - int i, j, k; - jsmntok_t *key; - if (count == 0) - { - return 0; - } - if (t->type == JSMN_PRIMITIVE) - { - std::string _s = substr(js, t->start, t->end - t->start); - if(_s[0] == 't') _res = true; - else if(_s[0] == 'f') _res = false; - else if(_s[0] == 'n') _res = var(); - else _res = to_int(_s.c_str()); - - return 1; - } - else if (t->type == JSMN_STRING) - { - _res = substr(js, t->start, t->end - t->start); - - return 1; - } - else if (t->type == JSMN_OBJECT) - { - j = 0; - _res = __NJS_Create_Object(); - for (i = 0; i < t->size; i++) - { - key = t + 1 + j; - var _key; - j += dump(js, key, count - j, indent + 1, _key); - var _value; - if (key->size > 0) - { - j += dump(js, t + 1 + j, count - j, indent + 1, _value); - } - __Nectar_Object_Set(_key, _value, _res); - } - return j+1; - } - else if (t->type == JSMN_ARRAY) - { - j = 0; - _res = __NJS_Create_Array(); - std::vector _arr; - - - for (i = 0; i < t->size; i++) - { - var _value; - j += dump(js, t + 1 + j, count - j, indent + 1, _value); - __Nectar_Object_Set(i, _value, _res); - } - return j+1; - } - return 0; -} - -NectarCore::Type::function_t* __Nectar_FN___5po78g = new NectarCore::Type::function_t([](var __INJECTED_THIS, NectarCore::VAR* __Nectar_VARARGS, int __Nectar_VARLENGTH) -> NectarCore::VAR{var __json; if(__Nectar_VARLENGTH > 0) __json = __Nectar_VARARGS[0]; - if(!__json) return NectarCore::Global::undefined; - size_t tokcount = 32; - int r; - int j = 0; - var __RESULT; - const char* JSON_STRING = ((NectarCore::Class::String*)__json.data.ptr)->value.c_str(); - jsmn_parser p; - jsmntok_t *tok = (jsmntok_t*)malloc(sizeof(*tok) * tokcount); - - jsmn_init(&p); - - int _again = 1; - while(_again) - { - r = jsmn_parse(&p, JSON_STRING, strlen(JSON_STRING), tok, tokcount); - if (r < 0) - { - if (r == (int)JSMN_ERROR_NOMEM) - { - tokcount = tokcount * 2; - tok = (jsmntok_t *)realloc_it(tok, sizeof(*tok) * tokcount); - } - else - { - printf("Failed to parse JSON: %d\n", r); - return __RESULT; - } - } - else - { - dump(JSON_STRING, tok, p.toknext, 0, __RESULT); - _again = 0; - } - } - free(tok); - return __RESULT; -;return __Nectar_Create_Undefined();});var __Nectar_JSON_PARSE=NectarCore::VAR(NectarCore::Enum::Type::Function, __Nectar_FN___5po78g);; - - -NectarCore::Type::function_t* __Nectar_FN___ylc1k6 = new NectarCore::Type::function_t([](var __INJECTED_THIS, NectarCore::VAR* __Nectar_VARARGS, int __Nectar_VARLENGTH ) -> NectarCore::VAR{var __object; if(__Nectar_VARLENGTH > 0) __object = __Nectar_VARARGS[0]; - return __Nectar_Object_Stringify(__object); -;return __Nectar_Create_Undefined();});var __Nectar_JSON_STRINGIFY=NectarCore::VAR(NectarCore::Enum::Type::Function, __Nectar_FN___ylc1k6);; diff --git a/nectar_modules/JSON/package.json b/nectar_modules/JSON/package.json deleted file mode 100644 index 5d2f40cd5..000000000 --- a/nectar_modules/JSON/package.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "JSON", - "description": "NectarJS base JSON module", - "main": "index.js", - "bugs": - { - "url": "https://github.com/NectarJS/nectarjs/issues" - }, - - "directories": - { - "root": ".", - "lib": "lib" - }, - "homepage": "https://github.com/NectarJS/nectarjs#readme", - "keywords": - [ - "nectarjs", - "JSON", - "javascript" - ], - "license": "GPL-3.0-or-later", - "licenses": [ - { - "type": "GPL", - "url": "https://github.com/nectarjs/nectarjs/blob/master/LICENSE" - } - ], - "repository": - { - "type": "git", - "url": "git+ssh://git@github.com/NectarJS/nectarjs.git" - }, - "version": "0.0.2", - "nectar": - { - "env": ["std", "android", "ios", "node", "arduino", "wasm"], - "read_only": [], - "expose": ["__Nectar_JSON_PARSE", "__Nectar_JSON_STRINGIFY"] - } -} diff --git a/nectar_modules/Math/index.js b/nectar_modules/Math/index.js deleted file mode 100644 index cd07c5373..000000000 --- a/nectar_modules/Math/index.js +++ /dev/null @@ -1,82 +0,0 @@ -/* - * This file is part of NectarJS - * Copyright (c) 2017 - 2020 Adrien THIERRY - * http://nectarjs.com - https://seraum.com/ - * - * sources : https://github.com/nectarjs/nectarjs - * - * NectarJS is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * NectarJS is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with NectarJS. If not, see . - * - */ - -"!_ffi_include lib/math.h"; - -var _Math = -{ - /*** PROPERTIES ***/ - - E: __Nectar_MATH_E, - LN2: __Nectar_MATH_LN2, - LOG2E: __Nectar_MATH_LOG2E, - LOG10E: __Nectar_MATH_LOG10E, - PI: __Nectar_MATH_PI, - SQRT1_2: __Nectar_MATH_SQRT1_2, - SQRT2: __Nectar_MATH_SQRT2, - - /*** END PROPERTIES ***/ - - /*** METHODS ***/ - - abs: __Nectar_MATH_ABS, - acos: __Nectar_MATH_ACOS, - acosh: __Nectar_MATH_ACOSH, - asin: __Nectar_MATH_ASIN, - asinh: __Nectar_MATH_ASINH, - atan: __Nectar_MATH_ATAN, - atanh: __Nectar_MATH_ATANH, - atan2: __Nectar_MATH_ATAN2, - cbrt: __Nectar_MATH_CBRT, - ceil: __Nectar_MATH_CEIL, - clz32: __Nectar_MATH_CLZ32, - cos: __Nectar_MATH_COS, - cosh: __Nectar_MATH_COSH, - exp: __Nectar_MATH_EXP, - expm1: __Nectar_MATH_EXPM1, - floor: __Nectar_MATH_FLOOR, - fround: __Nectar_MATH_FROUND, - hypot: __Nectar_MATH_HYPOT, - imul: __Nectar_MATH_IMUL, - log: __Nectar_MATH_LOG, - log1p: __Nectar_MATH_LOG1P, - log10: __Nectar_MATH_LOG10, - log2: __Nectar_MATH_LOG2, - max: __Nectar_MATH_MAX, - min: __Nectar_MATH_MIN, - pow: __Nectar_MATH_POW, - random: __Nectar_MATH_RANDOM, - round: __Nectar_MATH_ROUND, - sign: __Nectar_MATH_SIGN, - sin: __Nectar_MATH_SIN, - sinh: __Nectar_MATH_SINH, - sqrt: __Nectar_MATH_SQRT, - tan: __Nectar_MATH_TAN, - tanh: __Nectar_MATH_TANH, - trunc: __Nectar_MATH_TRUNC, - - /*** END METHODS ***/ - toString: function () { return "[object Math]"; } -}; - - -module.exports = _Math; diff --git a/nectar_modules/Math/lib/math.h b/nectar_modules/Math/lib/math.h deleted file mode 100644 index 5fffa2c22..000000000 --- a/nectar_modules/Math/lib/math.h +++ /dev/null @@ -1,268 +0,0 @@ -/* - * This file is part of NectarJS - * Copyright (c) 2017 - 2020 Adrien THIERRY - * http://nectarjs.com - https://seraum.com/ - * - * sources : https://github.com/nectarjs/nectarjs - * - * NectarJS is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * NectarJS is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with NectarJS. If not, see . - * - */ -#define __Nectar_INIT_RAND_SEED -#if defined(_USE_MATH_DEFINES) && !defined(M_E) -#define _MATH_DEFINES_DEFINED - -/* Define _USE_MATH_DEFINES before including math.h to expose these macro - * definitions for common math constants. These are placed under an #ifdef - * since these commonly-defined names are not part of the C/C++ standards. - */ - -/* Definitions of useful mathematical constants - * M_E - e - * M_LOG2E - log2(e) - * M_LOG10E - log10(e) - * M_LN2 - ln(2) - * M_LN10 - ln(10) - * M_PI - pi - * M_PI_2 - pi/2 - * M_PI_4 - pi/4 - * M_1_PI - 1/pi - * M_2_PI - 2/pi - * M_2_SQRTPI - 2/sqrt(pi) - * M_SQRT2 - sqrt(2) - * M_SQRT1_2 - 1/sqrt(2) - */ - -#define M_E 2.71828182845904523536 -#define M_LOG2E 1.44269504088896340736 -#define M_LOG10E 0.434294481903251827651 -#define M_LN2 0.693147180559945309417 -#define M_LN10 2.30258509299404568402 -#define M_PI 3.14159265358979323846 -#define M_PI_2 1.57079632679489661923 -#define M_PI_4 0.785398163397448309616 -#define M_1_PI 0.318309886183790671538 -#define M_2_PI 0.636619772367581343076 -#define M_2_SQRTPI 1.12837916709551257390 -#define M_SQRT2 1.41421356237309504880 -#define M_SQRT1_2 0.707106781186547524401 - -#endif /* _USE_MATH_DEFINES */ - - - -var __Nectar_MATH_E = NectarCore::VAR(M_E); -var __Nectar_MATH_LN2 = NectarCore::VAR(M_LN2); -var __Nectar_MATH_LOG2E = NectarCore::VAR(M_LOG2E); -var __Nectar_MATH_LOG10E = NectarCore::VAR(M_LOG10E); -var __Nectar_MATH_PI = NectarCore::VAR(M_PI); -var __Nectar_MATH_SQRT1_2 = NectarCore::VAR(M_SQRT1_2); -var __Nectar_MATH_SQRT2 = NectarCore::VAR(M_SQRT2); - -function __Nectar_MATH_ABS(x) -{ - return NectarCore::VAR(std::abs((double)(x))); -}; - -function __Nectar_MATH_ACOS(x) -{ - return NectarCore::VAR(std::acos((double)(x))); -}; - -function __Nectar_MATH_ACOSH(x) -{ - return NectarCore::VAR(std::acosh((double)(x))); -}; - -function __Nectar_MATH_ASIN(x) -{ - return NectarCore::VAR(std::asin((double)(x))); -}; - -function __Nectar_MATH_ASINH(x) -{ - return NectarCore::VAR(std::asinh((double)(x))); -}; -function __Nectar_MATH_ATAN(x) -{ - return NectarCore::VAR(std::atan((double)(x))); -}; -function __Nectar_MATH_ATAN2(x, y) -{ - return NectarCore::VAR(std::atan2((double)(x), (double)(y))); -}; -function __Nectar_MATH_ATANH(x) -{ - return NectarCore::VAR(std::atanh((double)(x))); -}; -function __Nectar_MATH_CBRT(x) -{ - return NectarCore::VAR(std::cbrt((double)(x))); -}; -function __Nectar_MATH_CEIL(x) -{ - return NectarCore::VAR(std::ceil((double)(x))); -}; - -function __Nectar_MATH_CLZ32(x) -{ - int n = (int)(x); - return NectarCore::VAR(n > 0 ? (int)(31 - std::log2(n >> 0)) : 32); -}; - -function __Nectar_MATH_COS(x) -{ - return NectarCore::VAR(std::cos((double)(x))); -}; - -function __Nectar_MATH_COSH(x) -{ - return NectarCore::VAR(std::cosh((double)(x))); -}; - -function __Nectar_MATH_EXP(x) -{ - return std::exp((double)(x)); -}; - -function __Nectar_MATH_EXPM1(x) -{ - return NectarCore::VAR(std::expm1((double)(x))); -}; - -function __Nectar_MATH_FLOOR(x) -{ - return NectarCore::VAR((int)(std::floor((double)(x)))); -}; - -function __Nectar_MATH_FROUND(x) -{ - return NectarCore::VAR((double)((double)(x))); -}; - -function __Nectar_MATH_HYPOT() -{ - double max = 0; - double s = 0; - for (int i = 0; i < __Nectar_VARLENGTH; i++) { - double x = std::abs((double)(__Nectar_VARARGS[i])); - if (x > max) { - s *= (max / x) * (max / x); - max = x; - } - s += (x == 0 && max == 0) ? 0 : (x / max) * (x / max); - } - return NectarCore::VAR(max == INFINITY ? INFINITY : max * std::sqrt(s)); -}; - -function __Nectar_MATH_IMUL(x, y) -{ - return NectarCore::VAR((int)(x) * (int)(y)); -}; - -function __Nectar_MATH_LOG(x) -{ - return NectarCore::VAR(std::log((double)(x))); -}; - -function __Nectar_MATH_LOG1P(x) -{ - return NectarCore::VAR(std::log1p((double)(x))); -}; - -function __Nectar_MATH_LOG2(x) -{ - return NectarCore::VAR(std::log2((double)(x))); -}; - -function __Nectar_MATH_LOG10(x) -{ - return NectarCore::VAR(std::log10((double)(x))); -}; - -function __Nectar_MATH_MAX() -{ - double max = -INFINITY; - for (int i = 0; i < __Nectar_VARLENGTH; i++) { - double n = (double)(__Nectar_VARARGS[i]); - if (n > max) { - max = n; - } - } - return NectarCore::VAR(max); -}; - -function __Nectar_MATH_MIN() -{ - double min = INFINITY; - for (int i = 0; i < __Nectar_VARLENGTH; i++) { - double n = (double)(__Nectar_VARARGS[i]); - if (n < min) { - min = n; - } - } - return NectarCore::VAR(min); -}; - -function __Nectar_MATH_POW(x, x2) -{ - return NectarCore::VAR(std::pow((double)(x), (double)(x2))); -}; - -function __Nectar_MATH_RANDOM() -{ - return NectarCore::VAR((double)(std::rand()) / (double)(RAND_MAX)); -}; - -function __Nectar_MATH_ROUND(x) -{ - return NectarCore::VAR((int)(std::round((double)(x)))); -}; - -function __Nectar_MATH_SIGN(x) -{ - double n = (double)(x); - if (n == 0) { return NectarCore::VAR(0); } - else { return NectarCore::VAR(n > 0 ? 1 : -1); }; -}; - -function __Nectar_MATH_SIN(x) -{ - return NectarCore::VAR(std::sin((double)(x))); -}; - -function __Nectar_MATH_SINH(x) -{ - return NectarCore::VAR(std::sinh((double)(x))); -}; - -function __Nectar_MATH_SQRT(x) -{ - return NectarCore::VAR(std::sqrt((double)(x))); -}; - -function __Nectar_MATH_TAN(x) -{ - return NectarCore::VAR(std::tan((double)(x))); -}; - -function __Nectar_MATH_TANH(x) -{ - return NectarCore::VAR(std::tanh((double)(x))); -}; - -function __Nectar_MATH_TRUNC(x) -{ - return NectarCore::VAR((int)(x)); -}; diff --git a/nectar_modules/Math/package.json b/nectar_modules/Math/package.json deleted file mode 100644 index d552191ea..000000000 --- a/nectar_modules/Math/package.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "name": "math", - "description": "NectarJS base Math module", - "main": "index.js", - "bugs": - { - "url": "https://github.com/NectarJS/nectarjs/issues" - }, - - "directories": - { - "root": ".", - "lib": "lib" - }, - "homepage": "https://github.com/NectarJS/nectarjs#readme", - "keywords": - [ - "nectarjs", - "JSON", - "javascript" - ], - "license": "GPL-3.0-or-later", - "licenses": [ - { - "type": "GPL", - "url": "https://github.com/nectarjs/nectarjs/blob/master/LICENSE" - } - ], - "repository": - { - "type": "git", - "url": "git+ssh://git@github.com/NectarJS/nectarjs.git" - }, - "version": "0.0.2", - "nectar": - { - "env": ["std", "android", "ios", "node", "arduino", "wasm"], - "read_only": [], - "expose": ["__Nectar_MATH_E", "__Nectar_MATH_LN2", "__Nectar_MATH_LOG2E", "__Nectar_MATH_LOG10E", "__Nectar_MATH_PI", "__Nectar_MATH_SQRT1_2", "__Nectar_MATH_SQRT2", "__Nectar_MATH_ABS", "__Nectar_MATH_ACOS", "__Nectar_MATH_ACOSH", "__Nectar_MATH_ASIN", "__Nectar_MATH_ASINH", "__Nectar_MATH_ATAN", "__Nectar_MATH_ATANH", "__Nectar_MATH_ATAN2", "__Nectar_MATH_CBRT", "__Nectar_MATH_CEIL", "__Nectar_MATH_CLZ32", "__Nectar_MATH_COS", "__Nectar_MATH_COSH", "__Nectar_MATH_EXP", "__Nectar_MATH_EXPM1", "__Nectar_MATH_FLOOR", "__Nectar_MATH_FROUND", "__Nectar_MATH_HYPOT", "__Nectar_MATH_IMUL", "__Nectar_MATH_LOG", "__Nectar_MATH_LOG1P", "__Nectar_MATH_LOG10", "__Nectar_MATH_LOG2", "__Nectar_MATH_MAX", "__Nectar_MATH_MIN", "__Nectar_MATH_POW", "__Nectar_MATH_RANDOM", "__Nectar_MATH_ROUND", "__Nectar_MATH_SIGN", "__Nectar_MATH_SIN", "__Nectar_MATH_SINH", "__Nectar_MATH_SQRT", "__Nectar_MATH_TAN", "__Nectar_MATH_TANH", "__Nectar_MATH_TRUNC"] - } - } - \ No newline at end of file diff --git a/nectar_modules/Number/index.js b/nectar_modules/Number/index.js deleted file mode 100644 index 24030f4f8..000000000 --- a/nectar_modules/Number/index.js +++ /dev/null @@ -1,36 +0,0 @@ -/* - * This file is part of NectarJS - * Copyright (c) 2017 - 2020 Adrien THIERRY - * http://nectarjs.com - https://seraum.com/ - * - * sources : https://github.com/nectarjs/nectarjs - * - * NectarJS is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * NectarJS is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with NectarJS. If not, see . - * - */ - -function _Number(_arg) -{ - if(_arg) - { - if(typeof _arg == "string") - { - return parseInt(_arg); - } - else return _arg; - } - return 0; -} - -module.exports = _Number; diff --git a/nectar_modules/Number/package.json b/nectar_modules/Number/package.json deleted file mode 100644 index d3a10ee84..000000000 --- a/nectar_modules/Number/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "Number", - "description": "NectarJS base Number module", - "main": "index.js", - "bugs": - { - "url": "https://github.com/NectarJS/nectarjs/issues" - }, - - "directories": - { - "root": "." - }, - "homepage": "https://github.com/NectarJS/nectarjs#readme", - "keywords": - [ - "nectarjs", - "JSON", - "javascript" - ], - "license": "GPL-3.0-or-later", - "licenses": [ - { - "type": "GPL", - "url": "https://github.com/nectarjs/nectarjs/blob/master/LICENSE" - } - ], - "repository": - { - "type": "git", - "url": "git+ssh://git@github.com/NectarJS/nectarjs.git" - }, - "version": "0.0.1", - "nectar": - { - "env": ["std", "android", "ios", "node", "arduino", "stm32", "wasm"], - "read_only": [], - "expose": [] - } -} diff --git a/nectar_modules/Object/index.js b/nectar_modules/Object/index.js deleted file mode 100644 index 953a2597a..000000000 --- a/nectar_modules/Object/index.js +++ /dev/null @@ -1,31 +0,0 @@ -/* - * This file is part of NectarJS - * Copyright (c) 2017 - 2020 Adrien THIERRY - * http://nectarjs.com - https://seraum.com/ - * - * sources : https://github.com/nectarjs/nectarjs - * - * NectarJS is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * NectarJS is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with NectarJS. If not, see . - * - */ - -"!_ffi_include lib/native_object.h"; - -var _Object = -{ - keys: __Nectar_NATIVE_OBJECT_KEYS, - freeze: __Nectar_NATIVE_OBJECT_FREEZE, -}; - -module.exports = _Object; diff --git a/nectar_modules/Object/lib/native_object.h b/nectar_modules/Object/lib/native_object.h deleted file mode 100644 index 963c3a87b..000000000 --- a/nectar_modules/Object/lib/native_object.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * This file is part of NectarJS - * Copyright (c) 2017 - 2020 Adrien THIERRY - * http://nectarjs.com - https://seraum.com/ - * - * sources : https://github.com/nectarjs/nectarjs - * - * NectarJS is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * NectarJS is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with NectarJS. If not, see . - * - */ - -function __Nectar_NATIVE_OBJECT_KEYS(_obj) -{ - return __Nectar_Object_Keys(_obj); -}; - -function __Nectar_NATIVE_OBJECT_FREEZE(_obj) -{ - if(_obj) - { - if(_obj.type == NectarCore::Enum::Type::Object) - { - ((NectarCore::Class::Object*)_obj.data.ptr)->property.set(0, 1); - return _obj; - } - } -}; diff --git a/nectar_modules/Object/package.json b/nectar_modules/Object/package.json deleted file mode 100644 index 3beca1b4d..000000000 --- a/nectar_modules/Object/package.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "Object", - "description": "NectarJS base Object module", - "main": "index.js", - "bugs": - { - "url": "https://github.com/NectarJS/nectarjs/issues" - }, - - "directories": - { - "root": ".", - "lib": "lib" - }, - "homepage": "https://github.com/NectarJS/nectarjs#readme", - "keywords": - [ - "nectarjs", - "JSON", - "javascript" - ], - "license": "GPL-3.0-or-later", - "licenses": [ - { - "type": "GPL", - "url": "https://github.com/nectarjs/nectarjs/blob/master/LICENSE" - } - ], - "repository": - { - "type": "git", - "url": "git+ssh://git@github.com/NectarJS/nectarjs.git" - }, - "version": "0.0.2", - "nectar": - { - "env": ["std", "android", "ios", "node", "arduino", "stm32", "wasm"], - "read_only": [], - "expose": ["__Nectar_NATIVE_OBJECT_KEYS"] - } -} diff --git a/nectar_modules/Performance/index.js b/nectar_modules/Performance/index.js deleted file mode 100644 index c657f4322..000000000 --- a/nectar_modules/Performance/index.js +++ /dev/null @@ -1,37 +0,0 @@ -/* - * This file is part of NectarJS - * Copyright (c) 2017 - 2020 Adrien THIERRY - * http://nectarjs.com - https://seraum.com/ - * - * sources : https://github.com/nectarjs/nectarjs - * - * NectarJS is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * NectarJS is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with NectarJS. If not, see . - * - */ - -/* performance std module */ -"!_ffi_include libperformance/perf.h"; - - -function _performance() -{ - this.timeOrigin = __Nectar_NATIVE_PERFORMANCE_NOW(); - this.now = function() - { - return (__Nectar_NATIVE_PERFORMANCE_NOW() - this.timeOrigin) * 1000; - }; - -}; - -module.exports = new _performance(); \ No newline at end of file diff --git a/nectar_modules/Performance/libperformance/perf.h b/nectar_modules/Performance/libperformance/perf.h deleted file mode 100644 index 1e50bc0f5..000000000 --- a/nectar_modules/Performance/libperformance/perf.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * This file is part of NectarJS - * Copyright (c) 2017 - 2020 Adrien THIERRY - * http://nectarjs.com - https://seraum.com/ - * - * sources : https://github.com/nectarjs/nectarjs - * - * NectarJS is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * NectarJS is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with NectarJS. If not, see . - * - */ - -#include - -using namespace std::chrono; - -NectarCore::VAR __Nectar_NATIVE_PERFORMANCE_NOW() -{ - return NectarCore::VAR( (double)duration_cast( - system_clock::now().time_since_epoch() - ).count()); -}; diff --git a/nectar_modules/Performance/package.json b/nectar_modules/Performance/package.json deleted file mode 100644 index 514776603..000000000 --- a/nectar_modules/Performance/package.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "perfomance", - "description": "NectarJS base perfomance module", - "main": "index.js", - "bugs": - { - "url": "https://github.com/NectarJS/nectarjs/issues" - }, - - "directories": - { - "root": ".", - "lib": "libperformance" - }, - "homepage": "https://github.com/NectarJS/nectarjs#readme", - "keywords": - [ - "nectarjs", - "perfomance", - "javascript" - ], - "license": "GPL-3.0-or-later", - "licenses": [ - { - "type": "GPL", - "url": "https://github.com/nectarjs/nectarjs/blob/master/LICENSE" - } - ], - "repository": - { - "type": "git", - "url": "git+ssh://git@github.com/NectarJS/nectarjs.git" - }, - "version": "0.0.1", - "nectar": - { - "env": ["std", "android", "ios", "node", "arduino", "stm32", "wasm"], - "read_only": [], - "expose": ["__Nectar_NATIVE_PERFORMANCE_NOW"] - } -} diff --git a/nectar_modules/RUNTIME-EXCEPTION b/nectar_modules/RUNTIME-EXCEPTION deleted file mode 100644 index 8613951bd..000000000 --- a/nectar_modules/RUNTIME-EXCEPTION +++ /dev/null @@ -1,15 +0,0 @@ -Runtime Exception - -Linking this library statically or dynamically with other modules is making a combined work based on this library. -Thus, the terms and conditions of the GNU General Public License cover the whole combination. -As a special exception, the copyright holders of this library give you permission to link this library with -independent modules to produce an executable, regardless of the license terms of these independent modules, -and to copy and distribute the resulting executable under terms of your choice, provided that you also meet, -for each linked independent module, the terms and conditions of the license of that module. -An independent module is a module which is not derived from or based on this library. -If you modify this library, you may extend this exception to your version of the library, but you are not obligated to do so. -If you do not wish to do so, delete this exception statement from your version. -Additionally if other files instantiate templates or use macros or inline functions from this file, -or you compile this file and link it with other files to produce an executable, -this file does not by itself cause the resulting executable to be covered by the GNU General Public License. -This exception does not however invalidate any other reasons why the executable file might be covered by the GNU General Public License. diff --git a/nectar_modules/RegExp/index.js b/nectar_modules/RegExp/index.js deleted file mode 100644 index 2751d2aa4..000000000 --- a/nectar_modules/RegExp/index.js +++ /dev/null @@ -1,35 +0,0 @@ -/* - * This file is part of NectarJS - * Copyright (c) 2017 - 2020 Adrien THIERRY - * http://nectarjs.com - https://seraum.com/ - * - * sources : https://github.com/nectarjs/nectarjs - * - * NectarJS is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * NectarJS is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with NectarJS. If not, see . - * - */ - -/* RegExp std module */ - -"!_ffi_include libregexp/regexp.h"; - -function _regexp(_expression, _flag) -{ - this.__Nectar_Internal_Expression = _expression; - this.flag = _flag; - this.test = __Nectar_RegExp_Test; - this.exec = __Nectar_RegExp_Exec; -}; - -module.exports = _regexp; \ No newline at end of file diff --git a/nectar_modules/RegExp/libregexp/regexp.h b/nectar_modules/RegExp/libregexp/regexp.h deleted file mode 100644 index 144f6ca8e..000000000 --- a/nectar_modules/RegExp/libregexp/regexp.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - * This file is part of NectarJS - * Copyright (c) 2017 - 2020 Adrien THIERRY - * http://nectarjs.com - https://seraum.com/ - * - * sources : https://github.com/nectarjs/nectarjs - * - * NectarJS is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * NectarJS is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with NectarJS. If not, see . - * - */ - -#include - -function __Nectar_RegExp_Test(_search) -{ - if( std::regex_match ( (std::string)_search, std::regex((std::string)__Nectar_THIS["__Nectar_Internal_Expression"], std::regex::ECMAScript) ) ) return __Nectar_Boolean_TRUE; - else return __Nectar_Boolean_FALSE; -} - -function __Nectar_RegExp_Exec(_search) -{ - var _res = __NJS_Create_Array(); - std::string s = (std::string)_search; - std::smatch m; - while(std::regex_search ( s, m, std::regex((std::string)__Nectar_THIS["__Nectar_Internal_Expression"], std::regex::ECMAScript) )) - { - int i = 0; - for(auto x:m) - { - _res[i] = (std::string)x; - i++; - } - _res["index"] = (double)m.position(); - _res["input"] = _search; - _res["groups"] = NectarCore::Global::undefined; - - s = m.suffix().str(); - } - return _res; -} - -/* -function __Nectar_RegExp_StringMatch(_search, _re) -{ - var _res = __NJS_Create_Array(); - std::string s = (string)_search; - std::smatch m; - while(std::regex_search ( s, m, std::regex((string)_re, std::regex::ECMAScript) )) - { - for(auto x:m) ((NectarCore::Class::Array*)_res.data.ptr)->value.push_back((string)x); - s = m.suffix().str(); - } - return _res; -} -*/ \ No newline at end of file diff --git a/nectar_modules/RegExp/package.json b/nectar_modules/RegExp/package.json deleted file mode 100644 index 1a536f37c..000000000 --- a/nectar_modules/RegExp/package.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "RegExp", - "description": "NectarJS base RegExp module", - "main": "index.js", - "bugs": - { - "url": "https://github.com/NectarJS/nectarjs/issues" - }, - - "directories": - { - "root": ".", - "lib": "libregexp" - }, - "homepage": "https://github.com/NectarJS/nectarjs#readme", - "keywords": - [ - "nectarjs", - "RegExp", - "javascript" - ], - "license": "GPL-3.0-or-later", - "licenses": [ - { - "type": "GPL", - "url": "https://github.com/nectarjs/nectarjs/blob/master/LICENSE" - } - ], - "repository": - { - "type": "git", - "url": "git+ssh://git@github.com/NectarJS/nectarjs.git" - }, - "version": "0.0.1", - "nectar": - { - "env": ["std", "android", "ios", "node", "arduino", "stm32", "wasm"], - "read_only": [], - "expose": ["__Nectar_RegExp_Test"] - } -} diff --git a/nectar_modules/Thread/index.js b/nectar_modules/Thread/index.js deleted file mode 100644 index 16a8cc394..000000000 --- a/nectar_modules/Thread/index.js +++ /dev/null @@ -1,32 +0,0 @@ -/* - * This file is part of NectarJS - * Copyright (c) 2017 - 2020 Adrien THIERRY - * http://nectarjs.com - https://seraum.com/ - * - * sources : https://github.com/nectarjs/nectarjs - * - * NectarJS is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * NectarJS is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with NectarJS. If not, see . - * - */ - -"!_ffi_include njs_thread_lib/thread.h"; - -var _Thread = -{ - run: __Nectar_NATIVE_THREAD_RUN, - lock: __Nectar_NATIVE_LOCK_GUARD, - waitForAll: __Nectar_NATIVE_WAIT_FOR_ALL, -}; - -module.exports = _Thread; diff --git a/nectar_modules/Thread/njs_thread_lib/thread.h b/nectar_modules/Thread/njs_thread_lib/thread.h deleted file mode 100644 index 56190180e..000000000 --- a/nectar_modules/Thread/njs_thread_lib/thread.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - * This file is part of NectarJS - * Copyright (c) 2017 - 2020 Adrien THIERRY - * http://nectarjs.com - https://seraum.com/ - * - * sources : https://github.com/nectarjs/nectarjs - * - * NectarJS is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * NectarJS is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with NectarJS. If not, see . - * - */ - -std::unordered_map __Nectar_Thread_mutexList; -std::vector __Nectar_Thread_List; - -void __Nectar_THREADED_CALL(NectarCore::VAR _fn) -{ - try - { - _fn(); - } - catch(NectarCore::VAR e) - { - __Nectar_Log_Console(e); - } -} - -function __Nectar_NATIVE_THREAD_RUN(_cb) -{ - if(_cb) - { - __Nectar_Thread_List.emplace_back(__Nectar_THREADED_CALL, _cb); - } -}; - -function __Nectar_NATIVE_LOCK_GUARD(_key) -{ - if(!_key) _key = "default"; - std::lock_guard guard(__Nectar_Thread_mutexList[(std::string)_key]); -}; - -function __Nectar_NATIVE_WAIT_FOR_ALL() -{ - for(auto& _thread: __Nectar_Thread_List) - { - _thread.join(); - } -}; - diff --git a/nectar_modules/Thread/package.json b/nectar_modules/Thread/package.json deleted file mode 100644 index 98ab78dff..000000000 --- a/nectar_modules/Thread/package.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "name": "Thread", - "description": "NectarJS base Thread module", - "main": "index.js", - "bugs": - { - "url": "https://github.com/NectarJS/nectarjs/issues" - }, - - "directories": - { - "root": ".", - "lib": "njs_thread_lib" - }, - "homepage": "https://github.com/NectarJS/nectarjs#readme", - "keywords": - [ - "nectarjs", - "Thread", - "MultiThreading", - "javascript" - ], - "license": "GPL-3.0-or-later", - "licenses": [ - { - "type": "GPL", - "url": "https://github.com/nectarjs/nectarjs/blob/master/LICENSE" - } - ], - "repository": - { - "type": "git", - "url": "git+ssh://git@github.com/NectarJS/nectarjs.git" - }, - "version": "0.0.1", - "nectar": - { - "env": ["std", "android", "ios", "node", "wasm"], - "read_only": [], - "expose": [] - } -} diff --git a/nectar_modules/WASM/index.js b/nectar_modules/WASM/index.js deleted file mode 100644 index 2861d8d83..000000000 --- a/nectar_modules/WASM/index.js +++ /dev/null @@ -1,32 +0,0 @@ -/* - * This file is part of NectarJS - * Copyright (c) 2017 - 2020 Adrien THIERRY - * http://nectarjs.com - https://seraum.com/ - * - * sources : https://github.com/nectarjs/nectarjs - * - * NectarJS is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * NectarJS is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with NectarJS. If not, see . - * - */ - -"!_ffi_include wasmlib/wasm.h"; - -var _WASM = -{ - run: __Nectar_WASM_RUN_SCRIPT, - bind: __Nectar_WASM_BIND, - bindInt: __Nectar_WASM_BIND, -}; - -module.exports = _WASM; diff --git a/nectar_modules/WASM/package.json b/nectar_modules/WASM/package.json deleted file mode 100644 index f5d583955..000000000 --- a/nectar_modules/WASM/package.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "name": "WASM", - "description": "NectarJS base WASM module", - "main": "index.js", - "bugs": - { - "url": "https://github.com/NectarJS/nectarjs/issues" - }, - - "directories": - { - "root": ".", - "lib": "lib" - }, - "homepage": "https://github.com/NectarJS/nectarjs#readme", - "keywords": - [ - "nectarjs", - "JSON", - "javascript", - "wasm", - "webassembly" - ], - "license": "GPL-3.0-or-later", - "licenses": [ - { - "type": "GPL", - "url": "https://github.com/nectarjs/nectarjs/blob/master/LICENSE" - } - ], - "repository": - { - "type": "git", - "url": "git+ssh://git@github.com/NectarJS/nectarjs.git" - }, - "version": "0.0.2", - "nectar": - { - "env": ["wasm"], - "read_only": [], - "expose": ["__Nectar_WASM_BIND", "__Nectar_WASM_RUN_SCRIPT"], - "lib": ["--bind"] - } -} diff --git a/nectar_modules/WASM/wasmlib/wasm.h b/nectar_modules/WASM/wasmlib/wasm.h deleted file mode 100644 index b2fb92021..000000000 --- a/nectar_modules/WASM/wasmlib/wasm.h +++ /dev/null @@ -1,69 +0,0 @@ -/* - * This file is part of NectarJS - * Copyright (c) 2017 - 2020 Adrien THIERRY - * http://nectarjs.com - https://seraum.com/ - * - * sources : https://github.com/nectarjs/nectarjs - * - * NectarJS is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * NectarJS is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with NectarJS. If not, see . - * - */ -#pragma once -#include -#include - -std::vector> __Nectar_INTERNAL_BIND; - -function __Nectar_WASM_RUN_SCRIPT(_script) -{ - emscripten_run_script(__Nectar_Get_String(_script)); -} - -function __Nectar_WASM_BIND(_name, _function) -{ - __Nectar_INTERNAL_BIND.push_back(std::make_pair(__Nectar_Get_String(_name), _function)); -} - -std::string __Nectar_EM_BIND(std::string _name, std::string _data) -{ - for (auto it = begin (__Nectar_INTERNAL_BIND); it != end (__Nectar_INTERNAL_BIND); ++it) - { - if(it->first.compare(_name) == 0) - { - return (std::string)(it->second(_data)); - break; - } - } - return "undefined"; -} - -int __Nectar_EM_BIND_INT(std::string _name, int _data) -{ - for (auto it = begin (__Nectar_INTERNAL_BIND); it != end (__Nectar_INTERNAL_BIND); ++it) - { - if(it->first.compare(_name) == 0) - { - return (int)(it->second(_data)); - break; - } - } - return 0; -} - - -EMSCRIPTEN_BINDINGS(nectar_module) -{ - emscripten::function("callNectar", &__Nectar_EM_BIND); - emscripten::function("callNectarInt", &__Nectar_EM_BIND_INT); -} diff --git a/nectar_modules/android/index.js b/nectar_modules/android/index.js deleted file mode 100644 index 5c18d5e8a..000000000 --- a/nectar_modules/android/index.js +++ /dev/null @@ -1,32 +0,0 @@ -/* - * This file is part of NectarJS - * Copyright (c) 2017 - 2020 Adrien THIERRY - * http://nectarjs.com - https://seraum.com/ - * - * sources : https://github.com/nectarjs/nectarjs - * - * NectarJS is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * NectarJS is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with NectarJS. If not, see . - * - */ - -'!_ffi_include lib/lib.h'; - -var _android = -{ - draw: __Nectar_ANDROID_DRAW, - navigate: __Nectar_ANDROID_NAVIGATE, - app_path: "http://localhost:12001/", -}; - -module.exports = _android; \ No newline at end of file diff --git a/nectar_modules/android/lib/lib.h b/nectar_modules/android/lib/lib.h deleted file mode 100644 index fbb5ea032..000000000 --- a/nectar_modules/android/lib/lib.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * This file is part of NectarJS - * Copyright (c) 2017 - 2020 Adrien THIERRY - * http://nectarjs.com - https://seraum.com/ - * - * sources : https://github.com/nectarjs/nectarjs - * - * NectarJS is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * NectarJS is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with NectarJS. If not, see . - * - */ - - -function __Nectar_ANDROID_DRAW(_value) -{ - drawJNI(((std::string)_value).c_str()); -} - -function __Nectar_ANDROID_NAVIGATE(_value) -{ - navigateJNI(((std::string)_value).c_str()); -} \ No newline at end of file diff --git a/nectar_modules/android/package.json b/nectar_modules/android/package.json deleted file mode 100644 index 8da1b25db..000000000 --- a/nectar_modules/android/package.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "name": "android", - "description": "NectarJS base Android module", - "main": "index.js", - "bugs": - { - "url": "https://github.com/NectarJS/nectarjs/issues" - }, - - "directories": - { - "root": ".", - "lib": "lib" - }, - "homepage": "https://github.com/NectarJS/nectarjs#readme", - "keywords": - [ - "nectarjs", - "android", - "smartphone", - "mobile" - ], - "license": "GPL-3.0-or-later", - "licenses": [ - { - "type": "GPL", - "url": "https://github.com/nectarjs/nectarjs/blob/master/LICENSE" - } - ], - "repository": - { - "type": "git", - "url": "git+ssh://git@github.com/NectarJS/nectarjs.git" - }, - "version": "0.0.2", - "nectar": - { - "env": ["android"], - "read_only": [], - "expose": ["__Nectar_ANDROID_DRAW", "__Nectar_ANDROID_NAVIGATE"] - } -} diff --git a/nectar_modules/arduino-func/index.js b/nectar_modules/arduino-func/index.js deleted file mode 100644 index d26286026..000000000 --- a/nectar_modules/arduino-func/index.js +++ /dev/null @@ -1,23 +0,0 @@ -/* - * This file is part of NectarJS - * Copyright (c) 2017 - 2020 Adrien THIERRY - * http://nectarjs.com - https://seraum.com/ - * - * sources : https://github.com/nectarjs/nectarjs - * - * NectarJS is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * NectarJS is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with NectarJS. If not, see . - * - */ - -'!_ffi_include lib/lib.h'; \ No newline at end of file diff --git a/nectar_modules/arduino-func/lib/lib.h b/nectar_modules/arduino-func/lib/lib.h deleted file mode 100644 index 97b92a3d0..000000000 --- a/nectar_modules/arduino-func/lib/lib.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - * This file is part of NectarJS - * Copyright (c) 2017 - 2020 Adrien THIERRY - * http://nectarjs.com - https://seraum.com/ - * - * sources : https://github.com/nectarjs/nectarjs - * - * NectarJS is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * NectarJS is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with NectarJS. If not, see . - * - */ - -function arduino_delay(_value) -{ - delay(__Nectar_Get_Int(_value)); -} - -function arduino_delaySecond(_value) -{ - delay(__Nectar_Get_Int(_value) * 1000); -} - -function arduino_pinMode(_pin, _mode) -{ - pinMode(__Nectar_Get_Int(_pin), __Nectar_Get_Int(_mode)); -} - -function arduino_digitalWrite(_pin, _mode) -{ - digitalWrite(__Nectar_Get_Int(_pin), __Nectar_Get_Int(_mode)); -} - -#define arduino_HIGH var(HIGH) -#define arduino_LOW var(LOW) -#define arduino_INPUT var(INPUT) -#define arduino_OUTPUT var(OUTPUT) -#define arduino_LED_BUILTIN var(LED_BUILTIN) diff --git a/nectar_modules/arduino-func/package.json b/nectar_modules/arduino-func/package.json deleted file mode 100644 index 61fc0097b..000000000 --- a/nectar_modules/arduino-func/package.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "name": "arduino-func", - "description": "NectarJS base Arduino functionnal module", - "main": "index.js", - "bugs": - { - "url": "https://github.com/NectarJS/nectarjs/issues" - }, - - "directories": - { - "root": ".", - "lib": "lib" - }, - "homepage": "https://github.com/NectarJS/nectarjs#readme", - "keywords": - [ - "nectarjs", - "arduino", - "iot" - ], - "license": "GPL-3.0-or-later", - "licenses": [ - { - "type": "GPL", - "url": "https://github.com/nectarjs/nectarjs/blob/master/LICENSE" - } - ], - "repository": - { - "type": "git", - "url": "git+ssh://git@github.com/NectarJS/nectarjs.git" - }, - "version": "0.0.1", - "nectar": - { - "env": ["arduino"], - "target": ["uno", "mega", "mega2560", "mega1280", "mega328p", "nano", "nano2", "nano3"], - "lib": - [ - "{__EXTERN__}/stlarduino/func_exception.cpp", - "{__EXTERN__}/stlarduino/char_traits.cpp", - "{__EXTERN__}/stlarduino/new_op.cpp", - "{__EXTERN__}/stlarduino/del_op.cpp", - "{__EXTERN__}/stlarduino/del_ops.cpp", - "{__EXTERN__}/stlarduino/ostream_helpers.cpp" - ], - "read_only": ["HIGH", "LOW", "INPUT", "OUTPUT", "LED_BUILTIN"], - "expose": ["arduino_delayMS", "arduino_delay", "arduino_delaySeconds", "arduino_millis", "arduino_seconds", "arduino_pinMode", "arduino_digitalWrite", "HIGH", "LOW", "INPUT", "OUTPUT", - "arduino_HIGH", "arduino_LOW", "arduino_INPUT", "arduino_OUTPUT", "arduino_LED_BUILTIN", "INPUT", "OUTPUT", "HIGH", "LOW", "LED_BUILTIN"] - } -} diff --git a/nectar_modules/arduino/index.js b/nectar_modules/arduino/index.js deleted file mode 100644 index cd3d53138..000000000 --- a/nectar_modules/arduino/index.js +++ /dev/null @@ -1,37 +0,0 @@ -/* - * This file is part of NectarJS - * Copyright (c) 2017 - 2020 Adrien THIERRY - * http://nectarjs.com - https://seraum.com/ - * - * sources : https://github.com/nectarjs/nectarjs - * - * NectarJS is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * NectarJS is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with NectarJS. If not, see . - * - */ - -'!_ffi_include lib/lib.h'; - -var _arduino = -{ - delay: __Nectar_DELAY, - pinMode: __Nectar_PIN_MODE, - digitalWrite: __Nectar_DIGITAL_WRITE, - high: arduino_HIGH, - low: arduino_LOW, - input: arduino_INPUT, - output: arduino_OUTPUT, - led_builtin: arduino_LED_BUILTIN -}; - -module.exports = _arduino; \ No newline at end of file diff --git a/nectar_modules/arduino/lib/lib.h b/nectar_modules/arduino/lib/lib.h deleted file mode 100644 index 6175c2340..000000000 --- a/nectar_modules/arduino/lib/lib.h +++ /dev/null @@ -1,52 +0,0 @@ -/* - * This file is part of NectarJS - * Copyright (c) 2017 - 2020 Adrien THIERRY - * http://nectarjs.com - https://seraum.com/ - * - * sources : https://github.com/nectarjs/nectarjs - * - * NectarJS is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * NectarJS is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with NectarJS. If not, see . - * - */ - -function __Nectar_DELAY_MS(_value) -{ - delay(__Nectar_Get_Int(_value)); // to fix -} - -function __Nectar_DELAY(_value) -{ - delay(__Nectar_Get_Int(_value)); -} - -function __Nectar_DELAY_SECOND(_value) -{ - delay(__Nectar_Get_Int(_value) * 1000); -} - -function __Nectar_PIN_MODE( _pin, _mode) -{ - pinMode(__Nectar_Get_Int(_pin), __Nectar_Get_Int(_mode)); -} - -function __Nectar_DIGITAL_WRITE( _pin, _mode) -{ - digitalWrite(__Nectar_Get_Int(_pin), __Nectar_Get_Int(_mode)); -} - -#define arduino_HIGH var(HIGH) -#define arduino_LOW var(LOW) -#define arduino_INPUT var(INPUT) -#define arduino_OUTPUT var(OUTPUT) -#define arduino_LED_BUILTIN var(LED_BUILTIN) diff --git a/nectar_modules/arduino/package.json b/nectar_modules/arduino/package.json deleted file mode 100644 index b53ea2992..000000000 --- a/nectar_modules/arduino/package.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "name": "arduino", - "description": "NectarJS base Arduino module", - "main": "index.js", - "bugs": - { - "url": "https://github.com/NectarJS/nectarjs/issues" - }, - - "directories": - { - "root": ".", - "lib": "lib" - }, - "homepage": "https://github.com/NectarJS/nectarjs#readme", - "keywords": - [ - "nectarjs", - "arduino", - "iot" - ], - "license": "GPL-3.0-or-later", - "licenses": [ - { - "type": "GPL", - "url": "https://github.com/nectarjs/nectarjs/blob/master/LICENSE" - } - ], - "repository": - { - "type": "git", - "url": "git+ssh://git@github.com/NectarJS/nectarjs.git" - }, - "version": "0.0.2", - "nectar": - { - "env": ["arduino"], - "target": ["uno", "mega", "mega2560", "mega1280", "mega328p", "nano", "nano2", "nano3"], - "lib": - [ - "{__EXTERN__}/stlarduino/func_exception.cpp", - "{__EXTERN__}/stlarduino/char_traits.cpp", - "{__EXTERN__}/stlarduino/new_op.cpp", - "{__EXTERN__}/stlarduino/del_op.cpp", - "{__EXTERN__}/stlarduino/del_ops.cpp", - "{__EXTERN__}/stlarduino/ostream_helpers.cpp" - ], - "read_only": ["HIGH", "LOW", "INPUT", "OUTPUT", "LED_BUILTIN"], - "expose": ["__Nectar_DELAY_MS", "__Nectar_DELAY", "__Nectar_DELAY_SECOND", "__Nectar_MILLIS", "__Nectar_SECONDS", "__Nectar_PIN_MODE", "__Nectar_DIGITAL_WRITE", "HIGH", "LOW", "INPUT", "OUTPUT", - "arduino_HIGH", "arduino_LOW", "arduino_INPUT", "arduino_OUTPUT", "arduino_LED_BUILTIN", "INPUT", "OUTPUT", "HIGH", "LOW", "LED_BUILTIN"] - } -} diff --git a/nectar_modules/child_process/child_process/child_process.h b/nectar_modules/child_process/child_process/child_process.h deleted file mode 100644 index 0a178b353..000000000 --- a/nectar_modules/child_process/child_process/child_process.h +++ /dev/null @@ -1,64 +0,0 @@ -/* - * This file is part of NectarJS - * Copyright (c) 2017-2018 Adrien THIERRY - * http://nectarjs.com - https://www.linkedin.com/in/adrien-thierry-fr/ - * - * sources : https://github.com/nectarjs/nectar_modules/ - * - * this program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - * - * You can be released from the requirements of the license by purchasing - * a commercial license. Buying such a license is mandatory as soon as you - * develop commercial activities involving the NectarJS software without - * disclosing the source code of your own applications. Visit http://seraum.com/ - * and feel free to contact us. - * - */ - -function __Nectar_CHILD_PROCESS_EXEC_SYNC(_cmd) -{ - FILE *fp; - const int pSize = 64; - int bSize = pSize; - int now = 0; - char* buffer = (char*)malloc(pSize * sizeof(char)); - - buffer[0] = 0; - char pChar[pSize]; - - fp = popen(((std::string)_cmd).c_str(), "r"); - - if (fp == NULL) - { - printf("Failed to run command\n" ); - return NectarCore::VAR(); - } - - while (fgets(pChar, sizeof(pChar), fp) != NULL) - { - now += strlen(pChar); - if(now > bSize) - { - bSize += (now) * 1.5; - buffer = (char*)realloc(buffer, bSize); - } - strcat(buffer, pChar); - } - - pclose(fp); - - NectarCore::VAR _return = buffer; - free(buffer); - return _return; -} diff --git a/nectar_modules/child_process/index.js b/nectar_modules/child_process/index.js deleted file mode 100644 index 61e54c8e6..000000000 --- a/nectar_modules/child_process/index.js +++ /dev/null @@ -1,35 +0,0 @@ -/* - * This file is part of NectarJS - * Copyright (c) 2017-2018 Adrien THIERRY - * http://nectarjs.com - https://www.linkedin.com/in/adrien-thierry-fr/ - * - * sources : https://github.com/nectarjs/nectar_modules/ - * - * this program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - * - * You can be released from the requirements of the license by purchasing - * a commercial license. Buying such a license is mandatory as soon as you - * develop commercial activities involving the NectarJS software without - * disclosing the source code of your own applications. Visit http://seraum.com/ - * and feel free to contact us. - * - */ - -"!_ffi_include child_process/child_process.h" -var child_process = -{ - execSync: __Nectar_CHILD_PROCESS_EXEC_SYNC, -} - -module.exports = child_process; diff --git a/nectar_modules/child_process/package.json b/nectar_modules/child_process/package.json deleted file mode 100644 index c16674afc..000000000 --- a/nectar_modules/child_process/package.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "name": "child_process", - "description": "NectarJS base child process module", - "main": "index.js", - "bugs": - { - "url": "https://github.com/NectarJS/nectarjs/issues" - }, - - "directories": - { - "root": ".", - "lib": "child_process" - }, - "homepage": "https://github.com/NectarJS/nectarjs#readme", - "keywords": - [ - "nectarjs", - "child_process", - "nodejs", - "node" - ], - "license": "GPL-3.0-or-later", - "licenses": [ - { - "type": "GPL", - "url": "https://github.com/nectarjs/nectarjs/blob/master/LICENSE" - } - ], - "repository": - { - "type": "git", - "url": "git+ssh://git@github.com/NectarJS/nectarjs.git" - }, - "version": "0.0.1", - "nectar": - { - "env": ["std", "node"], - "read_only": [], - "expose": ["__Nectar_CHILD_PROCESS_EXEC_SYNC"] - } -} diff --git a/nectar_modules/console/index.js b/nectar_modules/console/index.js deleted file mode 100644 index 8601cedf6..000000000 --- a/nectar_modules/console/index.js +++ /dev/null @@ -1,30 +0,0 @@ -/* - * This file is part of NectarJS - * Copyright (c) 2017 - 2020 Adrien THIERRY - * http://nectarjs.com - https://seraum.com/ - * - * sources : https://github.com/nectarjs/nectarjs - * - * NectarJS is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * NectarJS is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with NectarJS. If not, see . - * - */ - -"!_ffi_include lib/console.h"; - -var console = -{ - log: __Nectar_NATIVE_LOG_CONSOLE, -}; - -module.exports = console; diff --git a/nectar_modules/console/lib/console.h b/nectar_modules/console/lib/console.h deleted file mode 100644 index 118625d87..000000000 --- a/nectar_modules/console/lib/console.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * This file is part of NectarJS - * Copyright (c) 2017 - 2020 Adrien THIERRY - * http://nectarjs.com - https://seraum.com/ - * - * sources : https://github.com/nectarjs/nectarjs - * - * NectarJS is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * NectarJS is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with NectarJS. If not, see . - * - */ - -function __Nectar_NATIVE_LOG_CONSOLE() -{ - if(__Nectar_VARLENGTH == 0) __Nectar_Log_Console(""); - else __Nectar_Log_Console(__Nectar_VARARGS, __Nectar_VARLENGTH); - return var(); -}; - diff --git a/nectar_modules/console/package.json b/nectar_modules/console/package.json deleted file mode 100644 index 4412e2f3e..000000000 --- a/nectar_modules/console/package.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "console", - "description": "NectarJS base console module", - "main": "index.js", - "bugs": - { - "url": "https://github.com/NectarJS/nectarjs/issues" - }, - - "directories": - { - "root": ".", - "lib": "lib" - }, - "homepage": "https://github.com/NectarJS/nectarjs#readme", - "keywords": - [ - "nectarjs", - "JSON", - "javascript" - ], - "license": "GPL-3.0-or-later", - "licenses": [ - { - "type": "GPL", - "url": "https://github.com/nectarjs/nectarjs/blob/master/LICENSE" - } - ], - "repository": - { - "type": "git", - "url": "git+ssh://git@github.com/NectarJS/nectarjs.git" - }, - "version": "0.0.2", - "nectar": - { - "env": ["std", "android", "ios", "node", "wasm"], - "read_only": [], - "expose": ["__Nectar_NATIVE_LOG_CONSOLE"] - } -} diff --git a/nectar_modules/example/index.js b/nectar_modules/example/index.js deleted file mode 100644 index 7fcf82005..000000000 --- a/nectar_modules/example/index.js +++ /dev/null @@ -1,30 +0,0 @@ -/* - * This file is part of NectarJS - * Copyright (c) 2017 - 2020 Adrien THIERRY - * http://nectarjs.com - https://seraum.com/ - * - * sources : https://github.com/nectarjs/nectarjs - * - * NectarJS is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * NectarJS is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with NectarJS. If not, see . - * - */ - -"!_ffi_include lib/example.h"; - -var _example = -{ - example: __Nectar_NATIVE_EXAMPLE, -}; - -module.exports = _example; diff --git a/nectar_modules/example/lib/example.h b/nectar_modules/example/lib/example.h deleted file mode 100644 index 996016e3f..000000000 --- a/nectar_modules/example/lib/example.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * This file is part of NectarJS - * Copyright (c) 2017 - 2020 Adrien THIERRY - * http://nectarjs.com - https://seraum.com/ - * - * sources : https://github.com/nectarjs/nectarjs - * - * NectarJS is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * NectarJS is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with NectarJS. If not, see . - * - */ - -function __Nectar_NATIVE_EXAMPLE(_var) -{ - cout << "In example: " << _var << endl; - return _var; -}; diff --git a/nectar_modules/example/package.json b/nectar_modules/example/package.json deleted file mode 100644 index 89d7d0a35..000000000 --- a/nectar_modules/example/package.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "example", - "description": "NectarJS example module", - "main": "index.js", - "bugs": - { - "url": "https://github.com/NectarJS/nectarjs/issues" - }, - - "directories": - { - "root": ".", - "lib": "lib" - }, - "homepage": "https://github.com/NectarJS/nectarjs#readme", - "keywords": - [ - "nectarjs", - "javascript", - "example" - ], - "license": "GPL-3.0-or-later", - "licenses": [ - { - "type": "GPL", - "url": "https://github.com/nectarjs/nectarjs/blob/master/LICENSE" - } - ], - "repository": - { - "type": "git", - "url": "git+ssh://git@github.com/NectarJS/nectarjs.git" - }, - "version": "0.0.1", - "nectar": - { - "env": ["std", "android", "ios", "node", "arduino", "wasm", "test"], - "read_only": [], - "expose": ["__Nectar_NATIVE_EXAMPLE"] - } -} diff --git a/nectar_modules/fs/index.js b/nectar_modules/fs/index.js deleted file mode 100644 index ad21a643b..000000000 --- a/nectar_modules/fs/index.js +++ /dev/null @@ -1,48 +0,0 @@ -/* - * This file is part of NectarJS - * Copyright (c) 2017 - 2020 Adrien THIERRY - * http://nectarjs.com - https://seraum.com/ - * - * sources : https://github.com/nectarjs/nectarjs - * - * NectarJS is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * NectarJS is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with NectarJS. If not, see . - * - */ - -'!_ffi_include lib/fs.h'; - -var fs = -{ - readFile : __Nectar_fs_readFile, - writeFile : __Nectar_fs_writeFile, - appendFile : __Nectar_fs_appendFile, - unlink : __Nectar_fs_unlink, - rmdir : __Nectar_fs_rmdir, - remove : __Nectar_fs_remove, - rename: __Nectar_fs_rename, - mkdir: __Nectar_fs_mkdir, - readdir: "TODO", - - readFileSync : __Nectar_fs_readFileSync, - writeFileSync : __Nectar_fs_writeFileSync, - appendFileSync : __Nectar_fs_appendFileSync, - unlinkSync : __Nectar_fs_unlinkSync, - rmdirSync : __Nectar_fs_rmdirSync, - removeSync : __Nectar_fs_removeSync, - renameSync: __Nectar_fs_renameSync, - mkdirSync: __Nectar_fs_mkdirSync, - readdirSync: "TODO", -}; - -module.exports = fs; diff --git a/nectar_modules/fs/lib/fs-node.h b/nectar_modules/fs/lib/fs-node.h deleted file mode 100644 index e325f5761..000000000 --- a/nectar_modules/fs/lib/fs-node.h +++ /dev/null @@ -1,294 +0,0 @@ -//void callback(uv_fs_t* req); -//fprintf(stderr, "error opening file: %s\n", uv_strerror((int)req->result)); - - -/* - * This file is part of NectarJS - * Copyright (c) 2017 - 2020 Adrien THIERRY - * http://nectarjs.com - https://seraum.com/ - * - * sources : https://github.com/nectarjs/nectarjs - * - * NectarJS is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * NectarJS is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with NectarJS. If not, see . - * - */ - - -function maybeCallback(cb) -{ - if (cb.type == NectarCore::Enum::Type::Function) - return cb; - - throw NectarCore::VAR("Invalid Callback"); -} - -long GetFileSize(std::string filename) -{ - struct stat stat_buf; - int rc = stat(filename.c_str(), &stat_buf); - return rc == 0 ? stat_buf.st_size : -1; -} - -long FdGetFileSize(int fd) -{ - struct stat stat_buf; - int rc = fstat(fd, &stat_buf); - return rc == 0 ? stat_buf.st_size : -1; -} - - -/*** Sync ***/ -function __Nectar_fs_readFileSync(_name, _options, _cb) -{ - uv_fs_t openReq; - uv_fs_open(__Nectar_UV_DEFAULT_LOOP, &openReq, ((std::string)_name).c_str(), O_RDONLY, 0, NULL); - if (openReq.result < 0) - { - fprintf(stderr, "error: %s\n", uv_strerror(openReq.result)); - } - else - { - uv_fs_t readReq; - uv_buf_t uvBuf; - long _fsize = GetFileSize(((std::string)_name)); - char strBuf[_fsize]; - char dataBuf[_fsize]; - uvBuf = uv_buf_init(dataBuf, sizeof(dataBuf)); - - uv_fs_read(__Nectar_UV_DEFAULT_LOOP, &readReq, openReq.result, &uvBuf, 1, -1, NULL); - - if (readReq.result < 0) - { - fprintf(stderr, "error: %s\n", uv_strerror(readReq.result)); - } - else if (readReq.result == 0) - { - uv_fs_t closeReq; - uv_fs_close(__Nectar_UV_DEFAULT_LOOP, &closeReq, openReq.result, NULL); - } - else - { - memset(strBuf, 0, sizeof(strBuf)); - memcpy(strBuf, dataBuf, sizeof(dataBuf)); - return strBuf; - } - } -}; - -function __Nectar_fs_writeFileSync(_name, _content) -{ - -}; - -function __Nectar_fs_appendFileSync(_name, _content) -{ - -}; - -function __Nectar_fs_unlinkSync(_name) -{ - -}; - -function __Nectar_fs_rmdirSync(_name) -{ - -}; - -function __Nectar_fs_removeSync(_name) -{ - -}; - -function __Nectar_fs_renameSync(_old, _new) -{ - -}; - -function __Nectar_fs_mkdirSync(_path) -{ - -} -/* END SYNC */ - -/*** Async ***/ -/* -void onReadFile(uv_fs_t* readReq) -{ - if (readReq->result < 0) - { - fprintf(stderr, "error: %s\n", uv_strerror(readReq->result)); - } - else if (readReq->result == 0) - { - //uv_fs_t closeReq; - //uv_fs_close(__Nectar_UV_DEFAULT_LOOP, &closeReq, openReq.result, NULL); - } - else - { - memset(strBuf, 0, sizeof(strBuf)); - memcpy(strBuf, dataBuf, sizeof(dataBuf)); - //return strBuf; - } -} - -void onOpenFile(uv_fs_t* openReq) -{ - if (openReq->result < 0) - { - fprintf(stderr, "error: %s\n", uv_strerror(openReq->result)); - } - else - { - uv_fs_t readReq; - uv_buf_t uvBuf; - long _fsize = GetFileSize(((std::string)_name)); - char strBuf[_fsize]; - char dataBuf[_fsize]; - uvBuf = uv_buf_init(dataBuf, sizeof(dataBuf)); - - uv_fs_read(__Nectar_UV_DEFAULT_LOOP, &readReq, openReq->result, &uvBuf, 1, -1, onReadFile); - - - } -} -*/ - -struct __Nectar_UV_FS_DATA -{ - std::string filename; - NectarCore::Class::Function* fn; - char* charbuf; - int size; - uv_buf_t buffer; -}; - -function __Nectar_fs_readFile(_name, _cb) -{ - uv_fs_t* _openReq = new uv_fs_t(); - __Nectar_UV_FS_DATA* _data = new __Nectar_UV_FS_DATA{.filename = (std::string)_name, .fn = (NectarCore::Class::Function*)_cb.data.ptr}; - - _openReq->data = _data; - - uv_fs_open(__Nectar_UV_DEFAULT_LOOP, _openReq, _data->filename.c_str(), O_RDONLY, 0, - [](uv_fs_t* openReq) - { - if (openReq->result < 0) - { - NectarCore::Class::Function* fn = ((__Nectar_UV_FS_DATA*)openReq->data)->fn; - std::string result = uv_strerror(openReq->result); - - free(((__Nectar_UV_FS_DATA*)openReq->data)->charbuf); - free((__Nectar_UV_FS_DATA*)openReq->data); - free(openReq); - - (*fn)(result); - } - else - { - uv_fs_t* _readReq = new uv_fs_t();; - _readReq->data = openReq->data; - - long _fsize = GetFileSize(((__Nectar_UV_FS_DATA*)_readReq->data)->filename); - ((__Nectar_UV_FS_DATA*)_readReq->data)->size = _fsize; - - char* dataBuf = (char*)malloc(_fsize); - ((__Nectar_UV_FS_DATA*)_readReq->data)->charbuf = dataBuf; - ((__Nectar_UV_FS_DATA*)_readReq->data)->buffer = uv_buf_init(dataBuf, _fsize); - - free(openReq); - - uv_fs_read(__Nectar_UV_DEFAULT_LOOP, _readReq, openReq->result, &((__Nectar_UV_FS_DATA*)_readReq->data)->buffer, 1, -1, - [](uv_fs_t* readReq) - { - if (readReq->result < 0) - { - NectarCore::Class::Function* fn = ((__Nectar_UV_FS_DATA*)readReq->data)->fn; - std::string result = uv_strerror(readReq->result); - - free(((__Nectar_UV_FS_DATA*)readReq->data)->charbuf); - free((__Nectar_UV_FS_DATA*)readReq->data); - free(readReq); - - (*fn)(result); - } - else if (readReq->result == 0) - { - uv_fs_close(__Nectar_UV_DEFAULT_LOOP, readReq, readReq->result, - [](uv_fs_t* closeReq) - { - NectarCore::Class::Function* fn = ((__Nectar_UV_FS_DATA*)closeReq->data)->fn; - free(((__Nectar_UV_FS_DATA*)closeReq->data)->charbuf); - free((__Nectar_UV_FS_DATA*)closeReq->data); - free(closeReq); - - (*fn)(); - }); - } - else - { - char* strBuf = (char*)malloc(((__Nectar_UV_FS_DATA*)readReq->data)->size); - memset(strBuf, 0, ((__Nectar_UV_FS_DATA*)readReq->data)->size); - memcpy(strBuf, ((__Nectar_UV_FS_DATA*)readReq->data)->charbuf, ((__Nectar_UV_FS_DATA*)readReq->data)->size); - - NectarCore::Class::Function* fn = ((__Nectar_UV_FS_DATA*)readReq->data)->fn; - NectarCore::VAR _res = strBuf; - - free(((__Nectar_UV_FS_DATA*)readReq->data)->charbuf); - free((__Nectar_UV_FS_DATA*)readReq->data); - free(readReq); - - (*fn)(null, _res); - } - }); - } - }); -}; - - -function __Nectar_fs_writeFile(_name, _content, _cb) -{ - -}; - -function __Nectar_fs_appendFile(_name, _content, _cb) -{ - -}; - -function __Nectar_fs_unlink(_name, _cb) -{ - -}; - -function __Nectar_fs_rmdir(_name, _cb) -{ - -}; - -function __Nectar_fs_remove(_name, _cb) -{ - -}; - -function __Nectar_fs_rename(_old, _new, _cb) -{ - -}; - -function __Nectar_fs_mkdir(_path, _cb) -{ - -} -/* END ASYNC */ diff --git a/nectar_modules/fs/lib/fs-std.h b/nectar_modules/fs/lib/fs-std.h deleted file mode 100644 index 033d699c8..000000000 --- a/nectar_modules/fs/lib/fs-std.h +++ /dev/null @@ -1,211 +0,0 @@ -/* - * This file is part of NectarJS - * Copyright (c) 2017 - 2020 Adrien THIERRY - * http://nectarjs.com - https://seraum.com/ - * - * sources : https://github.com/nectarjs/nectarjs - * - * NectarJS is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * NectarJS is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with NectarJS. If not, see . - * - */ - -#include -#include -#include -#include - -#ifndef WIN32 - #include -#endif - -/*** Sync ***/ -function __Nectar_fs_readFileSync(_name) -{ - FILE* fp; - - int resultat = 1; - - fp = fopen(__Nectar_Get_String(_name), "r"); - - if(fp == NULL) - { - return __Nectar_Create_String(""); - } - - fseek(fp, 0L, SEEK_END); - long fsize = ftell(fp); - fseek(fp, SEEK_SET, 0); - - char* buffer = (char*)malloc((fsize + 1) * sizeof(char)); - - size_t _ret = fread(buffer, fsize+1, 1, fp); - - buffer[fsize] = '\0'; - fclose(fp); - return __Nectar_Create_String(buffer); -}; - - -function __Nectar_fs_writeFileSync(_name, _content) -{ - std::ofstream myfile(__Nectar_Get_String(_name), std::ios::out | std::ios::trunc | std::ios::binary); - if(!myfile) - { - return __Nectar_Create_Boolean(0); - } - myfile.write(((NectarCore::Class::String*)_content.data.ptr)->value.c_str(), ((NectarCore::Class::String*)_content.data.ptr)->value.size()); - myfile.close(); - - return __Nectar_Create_Boolean(1); -}; - -function __Nectar_fs_appendFileSync(_name, _content) -{ - std::ofstream myfile(__Nectar_Get_String(_name), std::ios::out | std::ios::app | std::ios::binary); - if(!myfile) - { - return __Nectar_Create_Boolean(0); - } - myfile.write(((NectarCore::Class::String*)_content.data.ptr)->value.c_str(), ((NectarCore::Class::String*)_content.data.ptr)->value.size()); - myfile.close(); - - return __Nectar_Create_Boolean(1); -}; - -function __Nectar_fs_unlinkSync(_name) -{ - unlink(__Nectar_Get_String(_name)); - return __Nectar_Create_Boolean(1); -}; - -function __Nectar_fs_rmdirSync(_name) -{ - rmdir(__Nectar_Get_String(_name)); - return __Nectar_Create_Boolean(1); -}; - -function __Nectar_fs_removeSync(_name) -{ - remove(__Nectar_Get_String(_name)); - return __Nectar_Create_Boolean(1); -}; - -function __Nectar_fs_renameSync(_old, _new) -{ - rename(__Nectar_Get_String(_old), __Nectar_Get_String(_new)); - return __Nectar_Create_Boolean(1); -}; - -function __Nectar_fs_mkdirSync(_path) -{ - #ifndef __linux__ - mkdir( ((std::string)_path).c_str() ); - #endif - return __Nectar_Create_Boolean(1); -} -/* END SYNC */ - -/*** Async ***/ -function __Nectar_fs_readFile(_name, _cb) -{ - FILE* fp; - - int resultat = 1; - - fp = fopen(__Nectar_Get_String(_name), "r"); - - if(fp == NULL) - { - if(_cb) _cb(null, ""); - return NectarCore::Global::undefined; - } - - fseek(fp, 0L, SEEK_END); - long fsize = ftell(fp); - fseek(fp, SEEK_SET, 0); - - char* buffer = (char*)malloc((fsize + 1) * sizeof(char)); - - size_t _ret = fread(buffer, fsize+1, 1, fp); - - buffer[fsize] = '\0'; - fclose(fp); - if(_cb) _cb(null, __Nectar_Create_String(buffer)); -}; - - -function __Nectar_fs_writeFile(_name, _content, _cb) -{ - std::ofstream myfile(__Nectar_Get_String(_name), std::ios::out | std::ios::trunc | std::ios::binary); - if(!myfile) - { - if(_cb) _cb(null, __Nectar_Boolean_FALSE); - return NectarCore::Global::undefined; - } - myfile.write(((NectarCore::Class::String*)_content.data.ptr)->value.c_str(), ((NectarCore::Class::String*)_content.data.ptr)->value.size()); - myfile.close(); - - if(_cb) _cb(null, __Nectar_Boolean_TRUE); -}; - -function __Nectar_fs_appendFile(_name, _content, _cb) -{ - std::ofstream myfile(__Nectar_Get_String(_name), std::ios::out | std::ios::app | std::ios::binary); - if(!myfile) - { - if(_cb) _cb(null, __Nectar_Boolean_FALSE); - return NectarCore::Global::undefined; - } - myfile.write(((NectarCore::Class::String*)_content.data.ptr)->value.c_str(), ((NectarCore::Class::String*)_content.data.ptr)->value.size()); - myfile.close(); - - if(_cb) _cb(null, __Nectar_Boolean_TRUE); -}; - -function __Nectar_fs_unlink(_name, _cb) -{ - unlink(__Nectar_Get_String(_name)); - - if(_cb) _cb(null, __Nectar_Boolean_TRUE); -}; - -function __Nectar_fs_rmdir(_name, _cb) -{ - rmdir(__Nectar_Get_String(_name)); - - if(_cb) _cb(null, __Nectar_Boolean_TRUE); -}; - -function __Nectar_fs_remove(_name, _cb) -{ - remove(__Nectar_Get_String(_name)); - - if(_cb) _cb(null, __Nectar_Boolean_TRUE); -}; - -function __Nectar_fs_rename(_old, _new, _cb) -{ - rename(__Nectar_Get_String(_old), __Nectar_Get_String(_new)); - - if(_cb) _cb(null, __Nectar_Boolean_TRUE); -}; - -function __Nectar_fs_mkdir(_path, _cb) -{ - #ifndef __linux__ - mkdir( ((std::string)_path).c_str() ); - #endif - if(_cb) _cb(null, __Nectar_Boolean_TRUE); -} -/* END ASYNC */ diff --git a/nectar_modules/fs/lib/fs.h b/nectar_modules/fs/lib/fs.h deleted file mode 100644 index c92700b01..000000000 --- a/nectar_modules/fs/lib/fs.h +++ /dev/null @@ -1,26 +0,0 @@ -/* - * This file is part of NectarJS - * Copyright (c) 2017 - 2020 Adrien THIERRY - * http://nectarjs.com - https://seraum.com/ - * - * sources : https://github.com/nectarjs/nectarjs - * - * NectarJS is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * NectarJS is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with NectarJS. If not, see . - * - */ -#if defined(__Nectar_ENV_NODE) - #include "fs-node.h" -#else - #include "fs-std.h" -#endif \ No newline at end of file diff --git a/nectar_modules/fs/package.json b/nectar_modules/fs/package.json deleted file mode 100644 index c9f0f46f3..000000000 --- a/nectar_modules/fs/package.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "name": "fs", - "description": "NectarJS Standard FS module", - "main": "index.js", - "bugs": - { - "url": "https://github.com/NectarJS/nectarjs/issues" - }, - - "directories": - { - "root": ".", - "lib": "lib" - }, - "homepage": "https://github.com/NectarJS/nectarjs#readme", - "keywords": - [ - "nectarjs", - "fs", - "nodejs", - "node" - ], - "license": - { - "type": "MIT", - "url": "https://github.com/NectarJS/nectarjs/blob/master/LICENSE" - }, - "repository": - { - "type": "git", - "url": "git+ssh://git@github.com/NectarJS/nectarjs.git" - }, - "version": "0.0.1", - "nectar": - { - "env": ["std", "node"], - "expose": ["__Nectar_fs_readFileSync", "__Nectar_fs_writeFileSync", "__Nectar_fs_appendFileSync", "__Nectar_fs_unlinkSync", "__Nectar_fs_rmdirSync", "__Nectar_fs_removeSync"] - } -} diff --git a/nectar_modules/http/httplib/http.hpp b/nectar_modules/http/httplib/http.hpp deleted file mode 100644 index e26b63268..000000000 --- a/nectar_modules/http/httplib/http.hpp +++ /dev/null @@ -1,86 +0,0 @@ -#include - -NectarCore::VAR __NJS_Create_Server() -{ - NectarCore::VAR app = new NectarCore::Class::Object(); - NectarCore::VAR conf = new NectarCore::Class::Object(); - - conf["PORT"] = 8080; - - uWS::App* uws = new uWS::App(); - - app["run"] = __Nectar_Create_Var_Scoped_Copy_Anon( - { - uws->run(); - delete uws; - return NectarCore::Global::undefined; - }); - - app["listen"] = __Nectar_Create_Var_Scoped_Copy_Anon( - { - if(__Nectar_VARLENGTH > 0) conf["PORT"] = __Nectar_VARARGS[0]; - if(__Nectar_VARLENGTH > 1) conf["LISTEN_CB"] = __Nectar_VARARGS[1]; - - if(conf["PORT"].type != NectarCore::Enum::Type::Number) - { - throw(NectarCore::VAR(".listen method requires a number")); - } - - uws->listen(conf["PORT"], [&](auto *token) - { - if (token) - { - if(conf["LISTEN_CB"]) conf["LISTEN_CB"](); - } - - }); - - return app; - }); - - app["get"] = __Nectar_Create_Var_Scoped_Copy_Anon( - { - NectarCore::VAR path; - NectarCore::VAR cb; - if(__Nectar_VARLENGTH > 0) path = __Nectar_VARARGS[0]; - if(__Nectar_VARLENGTH > 1) cb = __Nectar_VARARGS[1]; - - if(cb.type == NectarCore::Enum::Type::Function) - { - uws->get(path, [=](auto *res, auto *req) - { - NectarCore::VAR _req = new NectarCore::Class::Object(); - NectarCore::VAR _res = new NectarCore::Class::Object(); - - _res["write"] = __Nectar_Create_Var_Scoped_Anon( - { - if(__Nectar_VARLENGTH > 0) res->write(__Nectar_VARARGS[0]); - else res->write(""); - return NectarCore::Global::undefined; - }); - _res["end"] = __Nectar_Create_Var_Scoped_Anon( - { - if(__Nectar_VARLENGTH > 0) res->end(__Nectar_VARARGS[0]); - else res->end(); - return NectarCore::Global::undefined; - }); - cb(_req, _res); - }); - } - else if(cb.type == NectarCore::Enum::Type::String) - { - std::string s = cb; - uws->get(path, [=](auto *res, auto *req) - { - res->end(s); - }); - } - else - { - throw(NectarCore::VAR(".get method requires a function callback or a string")); - } - return app; - }); - - return app; -} diff --git a/nectar_modules/http/httplib/uSockets/.gitattributes b/nectar_modules/http/httplib/uSockets/.gitattributes deleted file mode 100644 index 15a5c5809..000000000 --- a/nectar_modules/http/httplib/uSockets/.gitattributes +++ /dev/null @@ -1 +0,0 @@ -*.h linguist-language=C diff --git a/nectar_modules/http/httplib/uSockets/Makefile b/nectar_modules/http/httplib/uSockets/Makefile deleted file mode 100644 index 95af87a30..000000000 --- a/nectar_modules/http/httplib/uSockets/Makefile +++ /dev/null @@ -1,60 +0,0 @@ -# WITH_OPENSSL=1 enables OpenSSL 1.1+ support or BoringSSL -# For now we need to link with C++ for OpenSSL support, but should be removed with time -ifeq ($(WITH_OPENSSL),1) - override CFLAGS += -DLIBUS_USE_OPENSSL - # With problems on macOS, make sure to pass needed LDFLAGS required to find these - override LDFLAGS += -lssl -lcrypto -lstdc++ -else - # WITH_WOLFSSL=1 enables WolfSSL 4.2.0 support (mutually exclusive with OpenSSL) - ifeq ($(WITH_WOLFSSL),1) - # todo: change these - override CFLAGS += -DLIBUS_USE_WOLFSSL -I/usr/local/include - override LDFLAGS += -L/usr/local/lib -lwolfssl - else - override CFLAGS += -DLIBUS_NO_SSL - endif -endif - -# WITH_LIBUV=1 builds with libuv as event-loop -ifeq ($(WITH_LIBUV),1) - override CFLAGS += -DLIBUS_USE_LIBUV - override LDFLAGS += -luv -endif - -# WITH_GCD=1 builds with libdispatch as event-loop -ifeq ($(WITH_GCD),1) - override CFLAGS += -DLIBUS_USE_GCD - override LDFLAGS += -framework CoreFoundation -endif - -# WITH_ASAN builds with sanitizers -ifeq ($(WITH_ASAN),1) - override CFLAGS += -fsanitize=address -g - override LDFLAGS += -lasan -endif - -override CFLAGS += -std=c11 -Isrc -override LDFLAGS += uSockets.a - -# By default we build the uSockets.a static library -default: - rm -f *.o - gcc $(CFLAGS) -flto -O3 -c src/*.c src/eventing/*.c src/crypto/*.c -# For now we do rely on C++17 for OpenSSL support but we will be porting this work to C11 -ifeq ($(WITH_OPENSSL),1) - $(CXX) $(CXXFLAGS) -std=c++17 -flto -O3 -c src/crypto/*.cpp -endif - $(AR) rvs uSockets.a *.o - -# Builds all examples -.PHONY: examples -examples: default - for f in examples/*.c; do gcc -flto -O3 $(CFLAGS) -o $$(basename "$$f" ".c") "$$f" $(LDFLAGS); done - -swift_examples: - swiftc -O -I . examples/swift_http_server/main.swift uSockets.a -o swift_http_server - -clean: - rm -f *.o - rm -f *.a - rm -rf .certs diff --git a/nectar_modules/http/httplib/uSockets/README.md b/nectar_modules/http/httplib/uSockets/README.md deleted file mode 100644 index 1b889c3d9..000000000 --- a/nectar_modules/http/httplib/uSockets/README.md +++ /dev/null @@ -1,40 +0,0 @@ -## µSockets - miniscule networking & eventing - -This is the cross-platform async networking and eventing foundation library used by [µWebSockets](https://github.com/uNetworking/uWebSockets). - -It runs on Linux, macOS, FreeBSD and Windows. Most is C11 while some optional parts are C++17. - - Language grade: C/C++ - -### Key aspects - -* Built-in (optionally available) TLS support exposed with identical interface as for TCP. -* Acknowledges and integrates with any event-loop via a layered hierarchical design of plugins. -* Extremely pedantic about user space memory footprint and designed to perform as good as can be. -* Designed from scratch to map well to user space TCP stacks or other experimental platforms. -* Low resolution timer system ideal for performant tracking of networking timeouts. -* Minimal yet truly cross-platform, will not emit a billion different platform specific error codes. -* Fully opaque library, inclusion will not completely pollute your global namespace. -* Continuously fuzzed by Google's [OSS-Fuzz](https://github.com/google/oss-fuzz) with 95% code coverage (asan, ubsan and msan). - -### Extensible - -Designed in layers of abstraction where any one layer depends only on the previous one. Write plugins and swap things out with compiler flags as you see fit. - -![](misc/layout.png) - -### Compilation -Build example binaries using `make examples`. The static library itself builds with `make`. It is also possible to simply include the `src` folder in your project as it is standard C11. Defining LIBUS_NO_SSL (-DLIBUS_NO_SSL) will disable OpenSSL 1.1+ support/dependency (not needed if building with shipped Makefile). Build with environment variables set as shown below to configure for specific needs. - -##### Available plugins -* Build using `WITH_LIBUV=1 make [examples]` to use libuv as event-loop. -* Build using `WITH_GCD=1 make [examples]` to use Grand Central Dispatch/CoreFoundation as event-loop (slower). -* Build using `WITH_OPENSSL=1 make [examples]` to enable and link OpenSSL 1.1+ support (or BoringSSL). -* Build using `WITH_WOLFSSL=1 make [examples]` to enable and link WolfSSL 2.4.0+ support for embedded use. - -The default event-loop is native epoll on Linux, native kqueue on macOS and finally libuv on Windows. - -##### A word on performance -This library is opaque; there are function calls for everything - even simple things like accessing the "user data" of a socket. In other words, static linking and link-time-optimizations mean **everything** for performance. I've benchmarked dynamic linking vs. static, link-time optimization and found roughly a 60% performance difference. - -The kernel you run makes a huge difference. Linux wins, hands down. Mitigations off, or a modern hardware-mitigated CPU makes huge differences and distros like Clear Linux have shown significant speedups compared to more "vanilla" kernels. diff --git a/nectar_modules/http/httplib/uSockets/examples/echo_server.c b/nectar_modules/http/httplib/uSockets/examples/echo_server.c deleted file mode 100644 index 8eb17378c..000000000 --- a/nectar_modules/http/httplib/uSockets/examples/echo_server.c +++ /dev/null @@ -1,152 +0,0 @@ -/* This is a basic TCP/TLS echo server. */ - -#include -const int SSL = 1; - -#include -#include -#include - -/* Our socket extension */ -struct echo_socket { - char *backpressure; - int length; -}; - -/* Our socket context extension */ -struct echo_context { - -}; - -/* Loop wakeup handler */ -void on_wakeup(struct us_loop_t *loop) { - -} - -/* Loop pre iteration handler */ -void on_pre(struct us_loop_t *loop) { - -} - -/* Loop post iteration handler */ -void on_post(struct us_loop_t *loop) { - -} - -/* Socket writable handler */ -struct us_socket_t *on_echo_socket_writable(struct us_socket_t *s) { - struct echo_socket *es = (struct echo_socket *) us_socket_ext(SSL, s); - - /* Continue writing out our backpressure */ - int written = us_socket_write(SSL, s, es->backpressure, es->length, 0); - if (written != es->length) { - char *new_buffer = (char *) malloc(es->length - written); - memcpy(new_buffer, es->backpressure, es->length - written); - free(es->backpressure); - es->backpressure = new_buffer; - es->length -= written; - } else { - free(es->backpressure); - es->length = 0; - } - - /* Client is not boring */ - us_socket_timeout(SSL, s, 30); - - return s; -} - -/* Socket closed handler */ -struct us_socket_t *on_echo_socket_close(struct us_socket_t *s, int code, void *reason) { - struct echo_socket *es = (struct echo_socket *) us_socket_ext(SSL, s); - - printf("Client disconnected\n"); - - free(es->backpressure); - - return s; -} - -/* Socket half-closed handler */ -struct us_socket_t *on_echo_socket_end(struct us_socket_t *s) { - us_socket_shutdown(SSL, s); - return us_socket_close(SSL, s, 0, NULL); -} - -/* Socket data handler */ -struct us_socket_t *on_echo_socket_data(struct us_socket_t *s, char *data, int length) { - struct echo_socket *es = (struct echo_socket *) us_socket_ext(SSL, s); - - /* Print the data we received */ - printf("Client sent <%.*s>\n", length, data); - - /* Send it back or buffer it up */ - int written = us_socket_write(SSL, s, data, length, 0); - if (written != length) { - char *new_buffer = (char *) malloc(es->length + length - written); - memcpy(new_buffer, es->backpressure, es->length); - memcpy(new_buffer + es->length, data + written, length - written); - free(es->backpressure); - es->backpressure = new_buffer; - es->length += length - written; - } - - /* Client is not boring */ - us_socket_timeout(SSL, s, 30); - - return s; -} - -/* Socket opened handler */ -struct us_socket_t *on_echo_socket_open(struct us_socket_t *s, int is_client, char *ip, int ip_length) { - struct echo_socket *es = (struct echo_socket *) us_socket_ext(SSL, s); - - /* Initialize the new socket's extension */ - es->backpressure = 0; - es->length = 0; - - /* Start a timeout to close the socekt if boring */ - us_socket_timeout(SSL, s, 30); - - printf("Client connected\n"); - - return s; -} - -/* Socket timeout handler */ -struct us_socket_t *on_echo_socket_timeout(struct us_socket_t *s) { - printf("Client was idle for too long\n"); - return us_socket_close(SSL, s, 0, NULL); -} - -int main() { - /* The event loop */ - struct us_loop_t *loop = us_create_loop(0, on_wakeup, on_pre, on_post, 0); - - /* Socket context */ - struct us_socket_context_options_t options = {}; - options.key_file_name = "/home/alexhultman/uWebSockets.js/misc/key.pem"; - options.cert_file_name = "/home/alexhultman/uWebSockets.js/misc/cert.pem"; - options.passphrase = "1234"; - - struct us_socket_context_t *echo_context = us_create_socket_context(SSL, loop, sizeof(struct echo_context), options); - - - /* Registering event handlers */ - us_socket_context_on_open(SSL, echo_context, on_echo_socket_open); - us_socket_context_on_data(SSL, echo_context, on_echo_socket_data); - us_socket_context_on_writable(SSL, echo_context, on_echo_socket_writable); - us_socket_context_on_close(SSL, echo_context, on_echo_socket_close); - us_socket_context_on_timeout(SSL, echo_context, on_echo_socket_timeout); - us_socket_context_on_end(SSL, echo_context, on_echo_socket_end); - - /* Start accepting echo sockets */ - struct us_listen_socket_t *listen_socket = us_socket_context_listen(SSL, echo_context, 0, 3000, 0, sizeof(struct echo_socket)); - - if (listen_socket) { - printf("Listening on port 3000...\n"); - us_loop_run(loop); - } else { - printf("Failed to listen!\n"); - } -} diff --git a/nectar_modules/http/httplib/uSockets/examples/hammer_test.c b/nectar_modules/http/httplib/uSockets/examples/hammer_test.c deleted file mode 100644 index 8d98cbe09..000000000 --- a/nectar_modules/http/httplib/uSockets/examples/hammer_test.c +++ /dev/null @@ -1,301 +0,0 @@ -/* This example, or test, is a moron test where the library is being hammered in all the possible ways randomly over time */ - -#include -const int SSL = 1; - -#include -#include -#include -#include - -// todo: properly put all of these in various ext data so to test them! -int opened_connections, closed_connections, operations_done; -struct us_socket_context_t *http_context, *websocket_context; -struct us_listen_socket_t *listen_socket; - -// put in loop ext data -void *long_buffer; -unsigned int long_length = 5 * 1024 * 1024; - -// also make sure to have socket ext data -// and context ext data -// and loop ext data - -const double pad_should_always_be = 14.652752; - -struct http_socket { - double pad_invariant; - int is_http; - double post_pad_invariant; - char content[1024]; -}; - -struct web_socket { - double pad_invariant; - int is_http; - double post_pad_invariant; - char content[128]; -}; - -/* This checks the ext data state according to callbacks */ -void assume_state(struct us_socket_t *s, int is_http) { - struct http_socket *hs = (struct http_socket *) us_socket_ext(SSL, s); - - if (hs->pad_invariant != pad_should_always_be || hs->post_pad_invariant != pad_should_always_be) { - printf("ERROR: Pad invariant is not correct!\n"); - free((void *) 1); - } - - if (hs->is_http != is_http) { - printf("ERROR: State is: %d should be: %d. Terminating now!\n", hs->is_http, is_http); - free((void *) 1); - } - - // try and cause havoc (different size) - if (hs->is_http) { - memset(hs->content, 0, 1024); - } else { - memset(hs->content, 0, 128); - } -} - -struct http_context { - // link to the other context here - char content[1]; -}; - -// todo: it would be nice to randomly select socket instead of -// using the one responsible for the event -struct us_socket_t *perform_random_operation(struct us_socket_t *s) { - switch (rand() % 5) { - case 0: { - // close - return us_socket_close(SSL, s, 0, NULL); - } - case 1: { - // adoption cannot happen if closed! - if (!us_socket_is_closed(SSL, s)) { - if (rand() % 2) { - s = us_socket_context_adopt_socket(SSL, websocket_context, s, sizeof(struct web_socket)); - struct http_socket *hs = (struct http_socket *) us_socket_ext(SSL, s); - hs->is_http = 0; - } else { - s = us_socket_context_adopt_socket(SSL, http_context, s, sizeof(struct http_socket)); - struct http_socket *hs = (struct http_socket *) us_socket_ext(SSL, s); - hs->is_http = 1; - } - } - - return perform_random_operation(s); - } - case 2: { - // write - us_socket_write(SSL, s, (char *) long_buffer, rand() % long_length, 0); - } - break; - case 3: { - // shutdown - us_socket_shutdown(SSL, s); - } - break; - case 4: { - // loop wakeup and timeout sweep - us_socket_timeout(SSL, s, 1); - us_wakeup_loop(us_socket_context_loop(SSL, us_socket_context(SSL, s))); - } - break; - } - return s; -} - -void on_wakeup(struct us_loop_t *loop) { - // note: we expose internal functions to trigger a timeout sweep to find bugs - extern void us_internal_timer_sweep(struct us_loop_t *loop); - us_internal_timer_sweep(loop); -} - -// maybe use thse to count spurious wakeups? -// that is, if we get tons of pre/post over and over without any events -// that would point towards 100% cpu usage kind of bugs -void on_pre(struct us_loop_t *loop) { - printf("PRE\n"); - - // reset a boolean here -} - -void on_post(struct us_loop_t *loop) { - // check if we did perform_random_operation -} - -struct us_socket_t *on_web_socket_writable(struct us_socket_t *s) { - printf("on_web_socket_writable\n"); - assume_state(s, 0); - - return perform_random_operation(s); -} - -struct us_socket_t *on_http_socket_writable(struct us_socket_t *s) { - printf("on_http_socket_writable\n"); - assume_state(s, 1); - - return perform_random_operation(s); -} - -struct us_socket_t *on_web_socket_close(struct us_socket_t *s, int code, void *reason) { - assume_state(s, 0); - - closed_connections++; - printf("Opened: %d\nClosed: %d\n\n", opened_connections, closed_connections); - - if (closed_connections == 10000) { - us_listen_socket_close(SSL, listen_socket); - } else { - return perform_random_operation(s); - } - return s; -} - -struct us_socket_t *on_http_socket_close(struct us_socket_t *s, int code, void *reason) { - assume_state(s, 1); - - closed_connections++; - printf("Opened: %d\nClosed: %d\n\n", opened_connections, closed_connections); - - if (closed_connections == 10000) { - us_listen_socket_close(SSL, listen_socket); - } else { - return perform_random_operation(s); - } - return s; -} - -struct us_socket_t *on_web_socket_end(struct us_socket_t *s) { - assume_state(s, 0); - - // we need to close on shutdown - s = us_socket_close(SSL, s, 0, NULL); - return perform_random_operation(s); -} - -struct us_socket_t *on_http_socket_end(struct us_socket_t *s) { - assume_state(s, 1); - - // we need to close on shutdown - s = us_socket_close(SSL, s, 0, NULL); - return perform_random_operation(s); -} - -struct us_socket_t *on_web_socket_data(struct us_socket_t *s, char *data, int length) { - assume_state(s, 0); - - if (length == 0) { - printf("ERROR: Got data event with no data\n"); - exit(-1); - } - - //printf("Fick data: <%.*s>\n", length, data); - return perform_random_operation(s); -} - -struct us_socket_t *on_http_socket_data(struct us_socket_t *s, char *data, int length) { - assume_state(s, 1); - - if (length == 0) { - printf("ERROR: Got data event with no data\n"); - exit(-1); - } - - //printf("Fick data: <%.*s>\n", length, data); - return perform_random_operation(s); -} - -struct us_socket_t *on_web_socket_open(struct us_socket_t *s, int is_client, char *ip, int ip_length) { - // fail here, this can never happen! - printf("ERROR: on_web_socket_open called!\n"); - exit(-2); -} - -struct us_socket_t *on_http_socket_open(struct us_socket_t *s, int is_client, char *ip, int ip_length) { - struct http_socket *hs = (struct http_socket *) us_socket_ext(SSL, s); - hs->is_http = 1; - hs->pad_invariant = pad_should_always_be; - hs->post_pad_invariant = pad_should_always_be; - - assume_state(s, 1); - - opened_connections++; - printf("Opened: %d\nClosed: %d\n\n", opened_connections, closed_connections); - - if (is_client && opened_connections <= 10000 - 2) { - us_socket_context_connect(SSL, http_context, "127.0.0.1", 3000, NULL, 0, sizeof(struct http_socket)); - } - - return perform_random_operation(s); -} - -struct us_socket_t *on_web_socket_timeout(struct us_socket_t *s) { - assume_state(s, 0); - - return perform_random_operation(s); -} - -struct us_socket_t *on_http_socket_timeout(struct us_socket_t *s) { - assume_state(s, 1); - - return perform_random_operation(s); -} - -int main() { - srand(time(0)); - long_buffer = calloc(long_length, 1); - - struct us_loop_t *loop = us_create_loop(0, on_wakeup, on_pre, on_post, 0); - - // us_loop_on_wakeup() - // us_loop_on_pre() - // us_loop_on_post() - // us_loop_on_poll() - // us_loop_on_timer() - - - // these are ignored for non-SSL - struct us_socket_context_options_t options = {}; - options.key_file_name = "/home/alexhultman/uWebSockets.js/misc/key.pem"; - options.cert_file_name = "/home/alexhultman/uWebSockets.js/misc/cert.pem"; - options.passphrase = "1234"; - - http_context = us_create_socket_context(SSL, loop, sizeof(struct http_context), options); - - - us_socket_context_on_open(SSL, http_context, on_http_socket_open); - us_socket_context_on_data(SSL, http_context, on_http_socket_data); - us_socket_context_on_writable(SSL, http_context, on_http_socket_writable); - us_socket_context_on_close(SSL, http_context, on_http_socket_close); - us_socket_context_on_timeout(SSL, http_context, on_http_socket_timeout); - us_socket_context_on_end(SSL, http_context, on_http_socket_end); - - websocket_context = us_create_child_socket_context(SSL, http_context, sizeof(struct http_context)); - - us_socket_context_on_open(SSL, websocket_context, on_web_socket_open); - us_socket_context_on_data(SSL, websocket_context, on_web_socket_data); - us_socket_context_on_writable(SSL, websocket_context, on_web_socket_writable); - us_socket_context_on_close(SSL, websocket_context, on_web_socket_close); - us_socket_context_on_timeout(SSL, websocket_context, on_web_socket_timeout); - us_socket_context_on_end(SSL, websocket_context, on_web_socket_end); - - listen_socket = us_socket_context_listen(SSL, http_context, "127.0.0.1", 3000, 0, sizeof(struct http_socket)); - - if (listen_socket) { - printf("Running hammer test\n"); - us_socket_context_connect(SSL, http_context, "127.0.0.1", 3000, NULL, 0, sizeof(struct http_socket)); - us_loop_run(loop); - } else { - printf("Cannot listen to port 3000!\n"); - } - - us_socket_context_free(SSL, websocket_context); - us_socket_context_free(SSL, http_context); - us_loop_free(loop); - free(long_buffer); - printf("Done, shutting down now\n"); -} diff --git a/nectar_modules/http/httplib/uSockets/examples/http_load_test.c b/nectar_modules/http/httplib/uSockets/examples/http_load_test.c deleted file mode 100644 index e1af81642..000000000 --- a/nectar_modules/http/httplib/uSockets/examples/http_load_test.c +++ /dev/null @@ -1,131 +0,0 @@ -/* This is a simple yet efficient HTTP server benchmark */ -#include -/* If compiled with SSL support, enable it */ -const int SSL = 1; - -#include -#include -#include - -char request[] = "GET / HTTP/1.1\r\n\r\n"; -char *host; -int port; -int connections; - -int responses; - -struct http_socket { - /* How far we have streamed our request */ - int offset; -}; - -/* We don't need any of these */ -void on_wakeup(struct us_loop_t *loop) { - -} - -void on_pre(struct us_loop_t *loop) { - -} - -/* This is not HTTP POST, it is merely an event emitted post loop iteration */ -void on_post(struct us_loop_t *loop) { - -} - -struct us_socket_t *on_http_socket_writable(struct us_socket_t *s) { - struct http_socket *http_socket = (struct http_socket *) us_socket_ext(SSL, s); - - /* Stream whatever is remaining of the request */ - http_socket->offset += us_socket_write(SSL, s, request + http_socket->offset, (sizeof(request) - 1) - http_socket->offset, 0); - - return s; -} - -struct us_socket_t *on_http_socket_close(struct us_socket_t *s, int code, void *reason) { - return s; -} - -struct us_socket_t *on_http_socket_end(struct us_socket_t *s) { - return us_socket_close(SSL, s, 0, NULL); -} - -struct us_socket_t *on_http_socket_data(struct us_socket_t *s, char *data, int length) { - /* Get socket extension and the socket's context's extension */ - struct http_socket *http_socket = (struct http_socket *) us_socket_ext(SSL, s); - - /* We treat all data events as a response */ - http_socket->offset = us_socket_write(SSL, s, request, sizeof(request) - 1, 0); - - /* */ - responses++; - - return s; -} - -struct us_socket_t *on_http_socket_open(struct us_socket_t *s, int is_client, char *ip, int ip_length) { - struct http_socket *http_socket = (struct http_socket *) us_socket_ext(SSL, s); - - /* Reset offset */ - http_socket->offset = 0; - - /* Send a request */ - us_socket_write(SSL, s, request, sizeof(request) - 1, 0); - - if (--connections) { - us_socket_context_connect(SSL, us_socket_context(SSL, s), host, port, NULL, 0, sizeof(struct http_socket)); - } else { - printf("Running benchmark now...\n"); - - us_socket_timeout(SSL, s, LIBUS_TIMEOUT_GRANULARITY); - } - - return s; -} - -struct us_socket_t *on_http_socket_timeout(struct us_socket_t *s) { - /* Print current statistics */ - printf("Req/sec: %f\n", ((float)responses) / LIBUS_TIMEOUT_GRANULARITY); - - responses = 0; - us_socket_timeout(SSL, s, LIBUS_TIMEOUT_GRANULARITY); - - return s; -} - -int main(int argc, char **argv) { - - /* Parse host and port */ - if (argc != 4) { - printf("Usage: connections host port\n"); - return 0; - } - - port = atoi(argv[3]); - host = malloc(strlen(argv[2]) + 1); - memcpy(host, argv[2], strlen(argv[2]) + 1); - connections = atoi(argv[1]); - - /* Create the event loop */ - struct us_loop_t *loop = us_create_loop(0, on_wakeup, on_pre, on_post, 0); - - /* Create a socket context for HTTP */ - struct us_socket_context_options_t options = {}; - options.key_file_name = "/home/alexhultman/uWebSockets.js/misc/key.pem"; - options.cert_file_name = "/home/alexhultman/uWebSockets.js/misc/cert.pem"; - options.passphrase = "1234"; - struct us_socket_context_t *http_context = us_create_socket_context(SSL, loop, 0, options); - - /* Set up event handlers */ - us_socket_context_on_open(SSL, http_context, on_http_socket_open); - us_socket_context_on_data(SSL, http_context, on_http_socket_data); - us_socket_context_on_writable(SSL, http_context, on_http_socket_writable); - us_socket_context_on_close(SSL, http_context, on_http_socket_close); - us_socket_context_on_timeout(SSL, http_context, on_http_socket_timeout); - us_socket_context_on_end(SSL, http_context, on_http_socket_end); - - /* Start making HTTP connections */ - us_socket_context_connect(SSL, http_context, host, port, NULL, 0, sizeof(struct http_socket)); - - us_loop_run(loop); -} diff --git a/nectar_modules/http/httplib/uSockets/examples/http_server.c b/nectar_modules/http/httplib/uSockets/examples/http_server.c deleted file mode 100644 index 4c07401af..000000000 --- a/nectar_modules/http/httplib/uSockets/examples/http_server.c +++ /dev/null @@ -1,127 +0,0 @@ -/* This is a barebone keep-alive HTTP server */ -#include -/* Compiling with LIBUS_NO_SSL will ignore SSL */ -const int SSL = 1; - -#include -#include -#include - -struct http_socket { - /* How far we have streamed our response */ - int offset; -}; - -struct http_context { - /* The shared response */ - char *response; - int length; -}; - -/* We don't need any of these */ -void on_wakeup(struct us_loop_t *loop) { - -} - -void on_pre(struct us_loop_t *loop) { - -} - -/* This is not HTTP POST, it is merely an event emitted post loop iteration */ -void on_post(struct us_loop_t *loop) { - -} - -struct us_socket_t *on_http_socket_writable(struct us_socket_t *s) { - struct http_socket *http_socket = (struct http_socket *) us_socket_ext(SSL, s); - struct http_context *http_context = (struct http_context *) us_socket_context_ext(SSL, us_socket_context(SSL, s)); - - /* Stream whatever is remaining of the response */ - http_socket->offset += us_socket_write(SSL, s, http_context->response + http_socket->offset, http_context->length - http_socket->offset, 0); - - return s; -} - -struct us_socket_t *on_http_socket_close(struct us_socket_t *s, int code, void *reason) { - printf("Client disconnected\n"); - - return s; -} - -struct us_socket_t *on_http_socket_end(struct us_socket_t *s) { - /* HTTP does not support half-closed sockets */ - us_socket_shutdown(SSL, s); - return us_socket_close(SSL, s, 0, NULL); -} - -struct us_socket_t *on_http_socket_data(struct us_socket_t *s, char *data, int length) { - /* Get socket extension and the socket's context's extension */ - struct http_socket *http_socket = (struct http_socket *) us_socket_ext(SSL, s); - struct http_context *http_context = (struct http_context *) us_socket_context_ext(SSL, us_socket_context(SSL, s)); - - /* We treat all data events as a request */ - http_socket->offset = us_socket_write(SSL, s, http_context->response, http_context->length, 0); - - /* Reset idle timer */ - us_socket_timeout(SSL, s, 30); - - return s; -} - -struct us_socket_t *on_http_socket_open(struct us_socket_t *s, int is_client, char *ip, int ip_length) { - struct http_socket *http_socket = (struct http_socket *) us_socket_ext(SSL, s); - - /* Reset offset */ - http_socket->offset = 0; - - /* Timeout idle HTTP connections */ - us_socket_timeout(SSL, s, 30); - - printf("Client connected\n"); - - return s; -} - -struct us_socket_t *on_http_socket_timeout(struct us_socket_t *s) { - /* Close idle HTTP sockets */ - return us_socket_close(SSL, s, 0, NULL); -} - -int main() { - /* Create the event loop */ - struct us_loop_t *loop = us_create_loop(0, on_wakeup, on_pre, on_post, 0); - - /* Create a socket context for HTTP */ - struct us_socket_context_options_t options = {}; - options.key_file_name = "/home/alexhultman/uWebSockets.js/misc/key.pem"; - options.cert_file_name = "/home/alexhultman/uWebSockets.js/misc/cert.pem"; - options.passphrase = "1234"; - - struct us_socket_context_t *http_context = us_create_socket_context(SSL, loop, sizeof(struct http_context), options); - - - /* Generate the shared response */ - const char body[] = "

Why hello there!

"; - - struct http_context *http_context_ext = (struct http_context *) us_socket_context_ext(SSL, http_context); - http_context_ext->response = (char *) malloc(128 + sizeof(body) - 1); - http_context_ext->length = snprintf(http_context_ext->response, 128 + sizeof(body) - 1, "HTTP/1.1 200 OK\r\nContent-Length: %ld\r\n\r\n%s", sizeof(body) - 1, body); - - /* Set up event handlers */ - us_socket_context_on_open(SSL, http_context, on_http_socket_open); - us_socket_context_on_data(SSL, http_context, on_http_socket_data); - us_socket_context_on_writable(SSL, http_context, on_http_socket_writable); - us_socket_context_on_close(SSL, http_context, on_http_socket_close); - us_socket_context_on_timeout(SSL, http_context, on_http_socket_timeout); - us_socket_context_on_end(SSL, http_context, on_http_socket_end); - - /* Start serving HTTP connections */ - struct us_listen_socket_t *listen_socket = us_socket_context_listen(SSL, http_context, 0, 3000, 0, sizeof(struct http_socket)); - - if (listen_socket) { - printf("Listening on port 3000...\n"); - us_loop_run(loop); - } else { - printf("Failed to listen!\n"); - } -} diff --git a/nectar_modules/http/httplib/uSockets/examples/peer_verify_test.c b/nectar_modules/http/httplib/uSockets/examples/peer_verify_test.c deleted file mode 100644 index 20ce5e83d..000000000 --- a/nectar_modules/http/httplib/uSockets/examples/peer_verify_test.c +++ /dev/null @@ -1,330 +0,0 @@ -/* This example, or test, is a moron test where the library is being hammered in all the possible ways randomly over time */ - -#include -const int SSL = 1; - -#include -#include -#include -#include -#include - -int port; -int opened_connections, closed_connections, operations_done; -struct us_socket_context_t *server_context, *client_context; -struct us_listen_socket_t *listen_socket; - -char client_msg[] = "Hello from client"; -char server_msg[] = "Hello from server"; - -// also make sure to have socket ext data -// and context ext data -// and loop ext data - -bool client_received_data; -bool server_received_data; - -struct socket_context { - char *backpressure; - int length; -}; - -void on_wakeup(struct us_loop_t *loop) { - // note: we expose internal functions to trigger a timeout sweep to find bugs - extern void us_internal_timer_sweep(struct us_loop_t * loop); - us_internal_timer_sweep(loop); -} - -// maybe use thse to count spurious wakeups? -// that is, if we get tons of pre/post over and over without any events -// that would point towards 100% cpu usage kind of bugs -void on_pre(struct us_loop_t *loop) { - // printf("PRE\n"); -} - -void on_post(struct us_loop_t *loop) { - // check if we did perform_random_operation -} - -int write_buffered(int SSL, struct us_socket_t *s, const char *data, int length) { - - struct socket_context *ctx = (struct socket_context *)us_socket_ext(SSL, s); - - int written = us_socket_write(SSL, s, data, length, 0); - if (written != length) { - char *new_buffer = (char *)malloc(ctx->length + length - written); - memcpy(new_buffer, ctx->backpressure, ctx->length); - memcpy(new_buffer + ctx->length, data + written, length - written); - free(ctx->backpressure); - ctx->backpressure = new_buffer; - ctx->length += length - written; - } - return written; -} - -void write_backpressure(int SSL, struct us_socket_t *s) { - - struct socket_context *ctx = (struct socket_context *)us_socket_ext(SSL, s); - - /* Continue writing out our backpressure */ - int written = us_socket_write(SSL, s, ctx->backpressure, ctx->length, 0); - if (written != ctx->length) { - char *new_buffer = (char *)malloc(ctx->length - written); - memcpy(new_buffer, ctx->backpressure, ctx->length - written); - free(ctx->backpressure); - ctx->backpressure = new_buffer; - ctx->length -= written; - } else { - free(ctx->backpressure); - ctx->length = 0; - } -} - -struct us_socket_t *on_server_socket_writable(struct us_socket_t *s) { - printf("on_server_socket_writable\n"); - - write_backpressure(SSL, s); - - /* Peer is not boring */ - us_socket_timeout(SSL, s, 30); - - return s; -} - -struct us_socket_t *on_client_socket_writable(struct us_socket_t *s) { - printf("on_client_socket_writable\n"); - - write_backpressure(SSL, s); - - /* Peer is not boring */ - us_socket_timeout(SSL, s, 30); - - return s; -} - -struct us_socket_t *on_server_socket_close(struct us_socket_t *s, int code, void *reason) { - printf("on_server_socket_close\n"); - - us_listen_socket_close(SSL, listen_socket); - - return s; -} - -struct us_socket_t *on_client_socket_close(struct us_socket_t *s, int code, void *reason) { - - printf("on_client_socket_close\n"); - - return s; -} - -struct us_socket_t *on_server_socket_end(struct us_socket_t *s) { - - return us_socket_close(SSL, s, 0, NULL); -} - -struct us_socket_t *on_client_socket_end(struct us_socket_t *s) { - - return us_socket_close(SSL, s, 0, NULL); -} - -struct us_socket_t *on_server_socket_data(struct us_socket_t *s, char *data, int length) { - - if (length == 0) { - printf("ERROR: Got data event with no data\n"); - exit(-1); - } - /* Print the data we received */ - printf("on_server_socket_data: received '%.*s'\n", length, data); - - server_received_data = true; - - write_buffered(SSL, s, server_msg, sizeof(server_msg)); - - return s; -} - -struct us_socket_t *on_client_socket_data(struct us_socket_t *s, char *data, int length) { - - if (length == 0) { - printf("ERROR: Got data event with no data\n"); - exit(-1); - } - /* Print the data we received */ - printf("on_client_socket_data: received '%.*s'\n", length, data); - - client_received_data = true; - - return us_socket_close(SSL, s, 0, NULL); -} - -struct us_socket_t *on_server_socket_open(struct us_socket_t *s, int is_client, char *ip, int ip_length) { - - printf("on_server_socket_open\n"); - struct socket_context *ctx = (struct socket_context *)us_socket_ext(SSL, s); - - ctx->backpressure = 0; - ctx->length = 0; - - /* Start a timeout to close the socket if boring */ - us_socket_timeout(SSL, s, 30); - - printf("Client connected\n"); - - return s; -} - -struct us_socket_t *on_client_socket_open(struct us_socket_t *s, int is_client, char *ip, int ip_length) { - - printf("on_client_socket_open\n"); - - struct socket_context *ctx = (struct socket_context *)us_socket_ext(SSL, s); - - ctx->backpressure = 0; - ctx->length = 0; - - write_buffered(SSL, s, client_msg, sizeof(client_msg)); - - return s; -} - -struct us_socket_t *on_client_socket_timeout(struct us_socket_t *s) { - return s; -} - -struct us_socket_t *on_server_socket_timeout(struct us_socket_t *s) { - return s; -} - -int expect_peer_verify(const char *test_name, bool expect_data_exchanged, - struct us_socket_context_options_t server_options, - struct us_socket_context_options_t client_options) { - - - printf("----------------------------------------\n" - "[[ %s ]]\n" - " server_key: %s\n" - " server_crt: %s\n" - " server_ca: %s\n" - " client_crt: %s\n" - " client_key: %s\n" - " client_ca: %s\n\n", - test_name, - server_options.key_file_name, - server_options.cert_file_name, - server_options.ca_file_name, - client_options.key_file_name, - client_options.cert_file_name, - client_options.ca_file_name); - - srand(time(0)); - server_received_data = false; - client_received_data = false; - - struct us_loop_t *loop = us_create_loop(0, on_wakeup, on_pre, on_post, 0); - - server_context = us_create_socket_context(SSL, loop, sizeof(struct socket_context), server_options); - - us_socket_context_on_open(SSL, server_context, on_server_socket_open); - us_socket_context_on_data(SSL, server_context, on_server_socket_data); - us_socket_context_on_writable(SSL, server_context, on_server_socket_writable); - us_socket_context_on_close(SSL, server_context, on_server_socket_close); - us_socket_context_on_timeout(SSL, server_context, on_server_socket_timeout); - us_socket_context_on_end(SSL, server_context, on_server_socket_end); - - port = 3000; - listen_socket = us_socket_context_listen(SSL, server_context, "127.0.0.1", port, 0, sizeof(struct socket_context)); - while (!listen_socket) { - listen_socket = us_socket_context_listen(SSL, server_context, "127.0.0.1", ++port, 0, sizeof(struct socket_context)); - } - printf("Server listening on 127.0.0.1:%d\n", port); - - client_context = us_create_socket_context(SSL, loop, sizeof(struct socket_context), client_options); - us_socket_context_on_open(SSL, client_context, on_client_socket_open); - us_socket_context_on_data(SSL, client_context, on_client_socket_data); - us_socket_context_on_writable(SSL, client_context, on_client_socket_writable); - us_socket_context_on_close(SSL, client_context, on_client_socket_close); - us_socket_context_on_timeout(SSL, client_context, on_client_socket_timeout); - us_socket_context_on_end(SSL, client_context, on_client_socket_end); - - us_socket_context_connect(SSL, client_context, "127.0.0.1", port, NULL, 0, sizeof(struct socket_context)); - us_loop_run(loop); - - us_socket_context_free(SSL, server_context); - us_socket_context_free(SSL, client_context); - us_loop_free(loop); - - bool data_exchanged = server_received_data && client_received_data; - if (!!expect_data_exchanged != !!data_exchanged) { - - fprintf(stderr, "\n~ ERROR: expected data_echanged == %s, got %s\n\n", - (expect_data_exchanged ? "true" : "false"), - (data_exchanged ? "true" : "false")); - exit(1); - } - - printf("[[ OK ]]\n\n"); - return 0; -} - -int main() { - - expect_peer_verify("trusted client ca", true, - (struct us_socket_context_options_t){ - .key_file_name = ".certs/valid_server_key.pem", - .cert_file_name = ".certs/valid_server_crt.pem", - .ca_file_name = ".certs/valid_ca_crt.pem" - }, - (struct us_socket_context_options_t){ - .key_file_name = ".certs/valid_client_key.pem", - .cert_file_name = ".certs/valid_client_crt.pem", - .ca_file_name = ".certs/valid_ca_crt.pem" - }); - - - expect_peer_verify("untrusted client ca", false, - (struct us_socket_context_options_t){ - .key_file_name = ".certs/valid_server_key.pem", - .cert_file_name = ".certs/valid_server_crt.pem", - .ca_file_name = ".certs/valid_ca_crt.pem" - }, - (struct us_socket_context_options_t){ - .key_file_name = ".certs/invalid_client_key.pem", - .cert_file_name = ".certs/invalid_client_crt.pem", - .ca_file_name = ".certs/valid_ca_crt.pem" - }); - - expect_peer_verify("trusted selfsigned client", true, - (struct us_socket_context_options_t){ - .key_file_name = ".certs/valid_server_key.pem", - .cert_file_name = ".certs/valid_server_crt.pem", - .ca_file_name = ".certs/selfsigned_client_crt.pem" - }, - (struct us_socket_context_options_t){ - .key_file_name = ".certs/selfsigned_client_key.pem", - .cert_file_name = ".certs/selfsigned_client_crt.pem", - .ca_file_name = ".certs/valid_ca_crt.pem" - }); - - expect_peer_verify("untrusted selfsigned client", false, - (struct us_socket_context_options_t){ - .key_file_name = ".certs/valid_server_key.pem", - .cert_file_name = ".certs/valid_server_crt.pem", - .ca_file_name = ".certs/valid_ca_crt.pem" - }, - (struct us_socket_context_options_t){ - .key_file_name = ".certs/selfsigned_client_key.pem", - .cert_file_name = ".certs/selfsigned_client_crt.pem", - .ca_file_name = ".certs/valid_ca_crt.pem" - }); - - expect_peer_verify("peer verify disabled", true, - (struct us_socket_context_options_t){ - .key_file_name = ".certs/valid_server_key.pem", - .cert_file_name = ".certs/valid_server_crt.pem" - }, - (struct us_socket_context_options_t){ - .key_file_name = ".certs/valid_client_key.pem", - .cert_file_name = ".certs/valid_client_crt.pem" - }); - -} diff --git a/nectar_modules/http/httplib/uSockets/examples/swift_http_server/main.swift b/nectar_modules/http/httplib/uSockets/examples/swift_http_server/main.swift deleted file mode 100644 index 97e30f2b6..000000000 --- a/nectar_modules/http/httplib/uSockets/examples/swift_http_server/main.swift +++ /dev/null @@ -1,47 +0,0 @@ -/* Incomplete Swift version of http_server example */ - -import Foundation -import CoreFoundation -import uSockets - -/* Keep track of connections, for fun */ -var sockets = 0 - -/* Create loop */ -let loop = us_create_loop(UnsafeMutableRawPointer(bitPattern: 0), { loop in }, { loop in }, { loop in }, 0) - -/* Create socket context */ -let options = us_socket_context_options_t() -let context = us_create_socket_context(0, loop, 0, options) - -/* Register callbacks */ -us_socket_context_on_open(0, context) { (s, b, ip, ipLength) -> OpaquePointer? in - sockets += 1 - print("Welcome socket \(sockets)!") - return s -} - -us_socket_context_on_end(0, context) { (s) -> OpaquePointer? in - return s -} - -us_socket_context_on_close(0, context) { (s) -> OpaquePointer? in - return s -} - -us_socket_context_on_data(0, context) { (s, data, length) -> OpaquePointer? in - us_socket_write(0, s, data, length, 0) - return s -} - -/* Listen on port 3000 */ -"127.0.0.1".data(using: .utf8)?.withUnsafeBytes({ (unsafeRawBufferPointer) -> Void in - let host = unsafeRawBufferPointer.bindMemory(to: Int8.self).baseAddress! - if let _ = us_socket_context_listen(0, context, host, 3000, 0, 0) { - print("Listening on port 3000 from Swift") - } -}) - -/* Integrate with existing CoreFoundation/GCD event-loop */ -us_loop_integrate(loop) -CFRunLoopRun() diff --git a/nectar_modules/http/httplib/uSockets/misc/gen_test_certs.sh b/nectar_modules/http/httplib/uSockets/misc/gen_test_certs.sh deleted file mode 100644 index 01343f640..000000000 --- a/nectar_modules/http/httplib/uSockets/misc/gen_test_certs.sh +++ /dev/null @@ -1,51 +0,0 @@ -#!/bin/bash - -set -eo pipefail - -function gen_cert { - local path=$1 - local CN=$2 - local ca_path=$3 - local ca_name=${4:-ca} - - mkdir -p ${path} - - openssl genrsa -out ${path}/${CN}_key.pem 2048 >/dev/null - echo "generated ${path}/${CN}_key.pem" - - openssl req -new -sha256 \ - -key ${path}/${CN}_key.pem \ - -subj "/O=uNetworking/O=uSockets/CN=${CN}" \ - -reqexts SAN \ - -config <(cat /etc/ssl/openssl.cnf \ - <(printf "\n[SAN]\nsubjectAltName=DNS:localhost,DNS:127.0.0.1")) \ - -out ${path}/${CN}.csr &>/dev/null - - if [ -z "${ca_path}" ]; then - # self-signed - openssl x509 -req -in ${path}/${CN}.csr \ - -signkey ${path}/${CN}_key.pem -days 365 -sha256 \ - -outform PEM -out ${path}/${CN}_crt.pem &>/dev/null - - else - openssl x509 -req -in ${path}/${CN}.csr \ - -CA ${ca_path}/${ca_name}_crt.pem -CAkey ${ca_path}/${ca_name}_key.pem \ - -CAcreateserial -days 365 -sha256 \ - -outform PEM -out ${path}/${CN}_crt.pem &>/dev/null - fi - - rm -f ${path}/${CN}.csr - echo "generated ${path}/${CN}_crt.pem" -} - -# main -certs=${1:-"/tmp/certs"} - -gen_cert "${certs}" "valid_ca" -gen_cert "${certs}" "valid_server" "${certs}" "valid_ca" -gen_cert "${certs}" "valid_client" "${certs}" "valid_ca" - -gen_cert "${certs}" "invalid_ca" -gen_cert "${certs}" "invalid_client" "${certs}" "invalid_ca" -gen_cert "${certs}" "selfsigned_client" - diff --git a/nectar_modules/http/httplib/uSockets/misc/layout.png b/nectar_modules/http/httplib/uSockets/misc/layout.png deleted file mode 100644 index e8dd1b0b0..000000000 Binary files a/nectar_modules/http/httplib/uSockets/misc/layout.png and /dev/null differ diff --git a/nectar_modules/http/httplib/uSockets/misc/manual.md b/nectar_modules/http/httplib/uSockets/misc/manual.md deleted file mode 100644 index d42484a9d..000000000 --- a/nectar_modules/http/httplib/uSockets/misc/manual.md +++ /dev/null @@ -1,172 +0,0 @@ -# libusockets.h -This is the only header you include. Following documentation has been extracted from this header. It may be outdated, go read the header directly for up-to-date documentation. - -These interfaces are "beta" and subject to smaller changes. Last updated **2019-06-11**. - -# A quick note on compilation -Major differences in performance can be seen based solely on compiler and/or linker options. Important is to compile with some kind of link-time-optimization mode, preferably with static linking of this library such as including all C source files in the user program build step itself. Proper compilation and linking can lead to over 25% performance increase (in my case, YMMV). - -# Cross-platform benchmarks -While the library is compatible with many platforms, Linux in particular is the preferred production system. Benchmarking has been done on Windows, Linux and macOS where Linux clearly stood out as significant winner. Windows performed about half that of Linux and macOS was not much better than Windows. Do run your production systems on Linux. - -# us_loop_t - The root per-thread resource and callback emitter -```c -/* Returns a new event loop with user data extension */ -WIN32_EXPORT struct us_loop_t *us_create_loop(void *hint, void (*wakeup_cb)(struct us_loop_t *loop), void (*pre_cb)(struct us_loop_t *loop), void (*post_cb)(struct us_loop_t *loop), unsigned int ext_size); - -/* Frees the loop immediately */ -WIN32_EXPORT void us_loop_free(struct us_loop_t *loop); - -/* Returns the loop user data extension */ -WIN32_EXPORT void *us_loop_ext(struct us_loop_t *loop); - -/* Blocks the calling thread and drives the event loop until no more non-fallthrough polls are scheduled */ -WIN32_EXPORT void us_loop_run(struct us_loop_t *loop); - -/* Signals the loop from any thread to wake up and execute its wakeup handler from the loop's own running thread. - * This is the only fully thread-safe function and serves as the basis for thread safety */ -WIN32_EXPORT void us_wakeup_loop(struct us_loop_t *loop); - -/* Hook up timers in existing loop */ -WIN32_EXPORT void us_loop_integrate(struct us_loop_t *loop); - -/* Returns the loop iteration number */ -WIN32_EXPORT long long us_loop_iteration_number(struct us_loop_t *loop); -``` - -# us_socket_context_t - The per-behavior group of networking sockets -```c -struct us_socket_context_options_t { - const char *key_file_name; - const char *cert_file_name; - const char *passphrase; - const char *dh_params_file_name; - int ssl_prefer_low_memory_usage; -}; - -/* A socket context holds shared callbacks and user data extension for associated sockets */ -WIN32_EXPORT struct us_socket_context_t *us_create_socket_context(int ssl, struct us_loop_t *loop, int ext_size, struct us_socket_context_options_t options); - -/* Delete resources allocated at creation time. */ -WIN32_EXPORT void us_socket_context_free(int ssl, struct us_socket_context_t *context); - -/* Setters of various async callbacks */ -WIN32_EXPORT void us_socket_context_on_open(int ssl, struct us_socket_context_t *context, struct us_socket_t *(*on_open)(struct us_socket_t *s, int is_client, char *ip, int ip_length)); -WIN32_EXPORT void us_socket_context_on_close(int ssl, struct us_socket_context_t *context, struct us_socket_t *(*on_close)(struct us_socket_t *s)); -WIN32_EXPORT void us_socket_context_on_data(int ssl, struct us_socket_context_t *context, struct us_socket_t *(*on_data)(struct us_socket_t *s, char *data, int length)); -WIN32_EXPORT void us_socket_context_on_writable(int ssl, struct us_socket_context_t *context, struct us_socket_t *(*on_writable)(struct us_socket_t *s)); -WIN32_EXPORT void us_socket_context_on_timeout(int ssl, struct us_socket_context_t *context, struct us_socket_t *(*on_timeout)(struct us_socket_t *s)); - -/* Emitted when a socket has been half-closed */ -WIN32_EXPORT void us_socket_context_on_end(int ssl, struct us_socket_context_t *context, struct us_socket_t *(*on_end)(struct us_socket_t *s)); - -/* Returns user data extension for this socket context */ -WIN32_EXPORT void *us_socket_context_ext(int ssl, struct us_socket_context_t *context); - -/* Listen for connections. Acts as the main driving cog in a server. Will call set async callbacks. */ -WIN32_EXPORT struct us_listen_socket_t *us_socket_context_listen(int ssl, struct us_socket_context_t *context, const char *host, int port, int options, int socket_ext_size); - -/* listen_socket.c/.h */ -WIN32_EXPORT void us_listen_socket_close(int ssl, struct us_listen_socket_t *ls); - -/* Land in on_open or on_close or return null or return socket */ -WIN32_EXPORT struct us_socket_t *us_socket_context_connect(int ssl, struct us_socket_context_t *context, const char *host, int port, int options, int socket_ext_size); - -/* Returns the loop for this socket context. */ -WIN32_EXPORT struct us_loop_t *us_socket_context_loop(int ssl, struct us_socket_context_t *context); - -/* Invalidates passed socket, returning a new resized socket which belongs to a different socket context. - * Used mainly for "socket upgrades" such as when transitioning from HTTP to WebSocket. */ -WIN32_EXPORT struct us_socket_t *us_socket_context_adopt_socket(int ssl, struct us_socket_context_t *context, struct us_socket_t *s, int ext_size); - -/* Create a child socket context which acts much like its own socket context with its own callbacks yet still relies on the - * parent socket context for some shared resources. Child socket contexts should be used together with socket adoptions and nothing else. */ -WIN32_EXPORT struct us_socket_context_t *us_create_child_socket_context(int ssl, struct us_socket_context_t *context, int context_ext_size); -``` - -# us_socket_t - The network connection (SSL or non-SSL) -```c -/* Write up to length bytes of data. Returns actual bytes written. Will call the on_writable callback of active socket context on failure to write everything off in one go. - * Set hint msg_more if you have more immediate data to write. */ -WIN32_EXPORT int us_socket_write(int ssl, struct us_socket_t *s, const char *data, int length, int msg_more); - -/* Set a low precision, high performance timer on a socket. A socket can only have one single active timer at any given point in time. Will remove any such pre set timer */ -WIN32_EXPORT void us_socket_timeout(int ssl, struct us_socket_t *s, unsigned int seconds); - -/* Return the user data extension of this socket */ -WIN32_EXPORT void *us_socket_ext(int ssl, struct us_socket_t *s); - -/* Return the socket context of this socket */ -WIN32_EXPORT struct us_socket_context_t *us_socket_context(int ssl, struct us_socket_t *s); - -/* Withdraw any msg_more status and flush any pending data */ -WIN32_EXPORT void us_socket_flush(int ssl, struct us_socket_t *s); - -/* Shuts down the connection by sending FIN and/or close_notify */ -WIN32_EXPORT void us_socket_shutdown(int ssl, struct us_socket_t *s); - -/* Returns whether the socket has been shut down or not */ -WIN32_EXPORT int us_socket_is_shut_down(int ssl, struct us_socket_t *s); - -/* Returns whether this socket has been closed. Only valid if memory has not yet been released. */ -WIN32_EXPORT int us_socket_is_closed(int ssl, struct us_socket_t *s); - -/* Immediately closes the socket */ -WIN32_EXPORT struct us_socket_t *us_socket_close(int ssl, struct us_socket_t *s); - -/* Copy remote (IP) address of socket, or fail with zero length. */ -WIN32_EXPORT void us_socket_remote_address(int ssl, struct us_socket_t *s, char *buf, int *length); -``` - -# Low level components - -## us_timer_t - High cost (very expensive resource) timers - -**NOTE:** Many slow servers use one timer per socket. That is incredibly inefficient and so uSockets will only use one single us_timer_t per every one us_loop_t. A similar design is utilized in the Linux kernel and is how you should think of timers yourself. - -```c -/* Create a new high precision, low performance timer. May fail and return null */ -WIN32_EXPORT struct us_timer_t *us_create_timer(struct us_loop_t *loop, int fallthrough, unsigned int ext_size); - -/* Returns user data extension for this timer */ -WIN32_EXPORT void *us_timer_ext(struct us_timer_t *timer); - -/* */ -WIN32_EXPORT void us_timer_close(struct us_timer_t *timer); - -/* Arm a timer with a delay from now and eventually a repeat delay. - * Specify 0 as repeat delay to disable repeating. Specify both 0 to disarm. */ -WIN32_EXPORT void us_timer_set(struct us_timer_t *timer, void (*cb)(struct us_timer_t *t), int ms, int repeat_ms); - -/* Returns the loop for this timer */ -WIN32_EXPORT struct us_loop_t *us_timer_loop(struct us_timer_t *t); -``` - -## us_poll_t - The eventing foundation of a socket or anything that has a file descriptor -```c -/* A fallthrough poll does not keep the loop running, it falls through */ -WIN32_EXPORT struct us_poll_t *us_create_poll(struct us_loop_t *loop, int fallthrough, unsigned int ext_size); - -/* After stopping a poll you must manually free the memory */ -WIN32_EXPORT void us_poll_free(struct us_poll_t *p, struct us_loop_t *loop); - -/* Associate this poll with a socket descriptor and poll type */ -WIN32_EXPORT void us_poll_init(struct us_poll_t *p, LIBUS_SOCKET_DESCRIPTOR fd, int poll_type); - -/* Start, change and stop polling for events */ -WIN32_EXPORT void us_poll_start(struct us_poll_t *p, struct us_loop_t *loop, int events); -WIN32_EXPORT void us_poll_change(struct us_poll_t *p, struct us_loop_t *loop, int events); -WIN32_EXPORT void us_poll_stop(struct us_poll_t *p, struct us_loop_t *loop); - -/* Return what events we are polling for */ -WIN32_EXPORT int us_poll_events(struct us_poll_t *p); - -/* Returns the user data extension of this poll */ -WIN32_EXPORT void *us_poll_ext(struct us_poll_t *p); - -/* Get associated socket descriptor from a poll */ -WIN32_EXPORT LIBUS_SOCKET_DESCRIPTOR us_poll_fd(struct us_poll_t *p); - -/* Resize an active poll */ -WIN32_EXPORT struct us_poll_t *us_poll_resize(struct us_poll_t *p, struct us_loop_t *loop, unsigned int ext_size); -``` diff --git a/nectar_modules/http/httplib/uSockets/module.modulemap b/nectar_modules/http/httplib/uSockets/module.modulemap deleted file mode 100644 index 7276fd5c6..000000000 --- a/nectar_modules/http/httplib/uSockets/module.modulemap +++ /dev/null @@ -1,4 +0,0 @@ -module uSockets { - header "src/libusockets.h" - export * -} diff --git a/nectar_modules/http/httplib/uSockets/src/internal/internal.h b/nectar_modules/http/httplib/uSockets/src/internal/internal.h deleted file mode 100644 index cd9ba3a63..000000000 --- a/nectar_modules/http/httplib/uSockets/src/internal/internal.h +++ /dev/null @@ -1,182 +0,0 @@ -/* - * Authored by Alex Hultman, 2018-2019. - * Intellectual property of third-party. - - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - - * http://www.apache.org/licenses/LICENSE-2.0 - - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef INTERNAL_H -#define INTERNAL_H - -#if defined(_MSC_VER) -#define alignas(x) __declspec(align(x)) -#else -#include -#endif - -/* We only have one networking implementation so far */ -#include "internal/networking/bsd.h" - -/* We have many different eventing implementations */ -#if defined(LIBUS_USE_EPOLL) || defined(LIBUS_USE_KQUEUE) -#include "internal/eventing/epoll_kqueue.h" -#endif -#ifdef LIBUS_USE_LIBUV -#include "internal/eventing/libuv.h" -#endif -#ifdef LIBUS_USE_GCD -#include "internal/eventing/gcd.h" -#endif - -/* Poll type and what it polls for */ -enum { - /* Two first bits */ - POLL_TYPE_SOCKET = 0, - POLL_TYPE_SOCKET_SHUT_DOWN = 1, - POLL_TYPE_SEMI_SOCKET = 2, - POLL_TYPE_CALLBACK = 3, - - /* Two last bits */ - POLL_TYPE_POLLING_OUT = 4, - POLL_TYPE_POLLING_IN = 8 -}; - -/* Loop related */ -void us_internal_dispatch_ready_poll(struct us_poll_t *p, int error, int events); -void us_internal_timer_sweep(struct us_loop_t *loop); -void us_internal_free_closed_sockets(struct us_loop_t *loop); -void us_internal_loop_link(struct us_loop_t *loop, struct us_socket_context_t *context); -void us_internal_loop_unlink(struct us_loop_t *loop, struct us_socket_context_t *context); -void us_internal_loop_data_init(struct us_loop_t *loop, void (*wakeup_cb)(struct us_loop_t *loop), - void (*pre_cb)(struct us_loop_t *loop), void (*post_cb)(struct us_loop_t *loop)); -void us_internal_loop_data_free(struct us_loop_t *loop); -void us_internal_loop_pre(struct us_loop_t *loop); -void us_internal_loop_post(struct us_loop_t *loop); - -/* Asyncs (old) */ -struct us_internal_async *us_internal_create_async(struct us_loop_t *loop, int fallthrough, unsigned int ext_size); -void us_internal_async_close(struct us_internal_async *a); -void us_internal_async_set(struct us_internal_async *a, void (*cb)(struct us_internal_async *)); -void us_internal_async_wakeup(struct us_internal_async *a); - -/* Eventing related */ -unsigned int us_internal_accept_poll_event(struct us_poll_t *p); -int us_internal_poll_type(struct us_poll_t *p); -void us_internal_poll_set_type(struct us_poll_t *p, int poll_type); - -/* SSL loop data */ -void us_internal_init_loop_ssl_data(struct us_loop_t *loop); -void us_internal_free_loop_ssl_data(struct us_loop_t *loop); - -/* Socket context related */ -void us_internal_socket_context_link(struct us_socket_context_t *context, struct us_socket_t *s); -void us_internal_socket_context_unlink(struct us_socket_context_t *context, struct us_socket_t *s); - -/* Sockets are polls */ -struct us_socket_t { - alignas(LIBUS_EXT_ALIGNMENT) struct us_poll_t p; - struct us_socket_context_t *context; - struct us_socket_t *prev, *next; - unsigned short timeout; -}; - -/* Internal callback types are polls just like sockets */ -struct us_internal_callback_t { - alignas(LIBUS_EXT_ALIGNMENT) struct us_poll_t p; - struct us_loop_t *loop; - int cb_expects_the_loop; - void (*cb)(struct us_internal_callback_t *cb); -}; - -/* Listen sockets are sockets */ -struct us_listen_socket_t { - alignas(LIBUS_EXT_ALIGNMENT) struct us_socket_t s; - unsigned int socket_ext_size; -}; - -struct us_socket_context_t { - alignas(LIBUS_EXT_ALIGNMENT) struct us_loop_t *loop; - //unsigned short timeout; - struct us_socket_t *head; - struct us_socket_t *iterator; - struct us_socket_context_t *prev, *next; - - struct us_socket_t *(*on_open)(struct us_socket_t *, int is_client, char *ip, int ip_length); - struct us_socket_t *(*on_data)(struct us_socket_t *, char *data, int length); - struct us_socket_t *(*on_writable)(struct us_socket_t *); - struct us_socket_t *(*on_close)(struct us_socket_t *, int code, void *reason); - //void (*on_timeout)(struct us_socket_context *); - struct us_socket_t *(*on_socket_timeout)(struct us_socket_t *); - struct us_socket_t *(*on_end)(struct us_socket_t *); - int (*ignore_data)(struct us_socket_t *); -}; - -/* Internal SSL interface */ -#ifndef LIBUS_NO_SSL - -struct us_internal_ssl_socket_context_t; -struct us_internal_ssl_socket_t; - -/* SNI functions */ -void us_internal_ssl_socket_context_add_server_name(struct us_internal_ssl_socket_context_t *context, const char *hostname_pattern, struct us_socket_context_options_t options); -void us_internal_ssl_socket_context_remove_server_name(struct us_internal_ssl_socket_context_t *context, const char *hostname_pattern); -void us_internal_ssl_socket_context_on_server_name(struct us_internal_ssl_socket_context_t *context, void (*cb)(struct us_internal_ssl_socket_context_t *, const char *)); - -void *us_internal_ssl_socket_get_native_handle(struct us_internal_ssl_socket_t *s); -void *us_internal_ssl_socket_context_get_native_handle(struct us_internal_ssl_socket_context_t *context); - -struct us_internal_ssl_socket_context_t *us_internal_create_ssl_socket_context(struct us_loop_t *loop, - int context_ext_size, struct us_socket_context_options_t options); - -void us_internal_ssl_socket_context_free(struct us_internal_ssl_socket_context_t *context); -void us_internal_ssl_socket_context_on_open(struct us_internal_ssl_socket_context_t *context, - struct us_internal_ssl_socket_t *(*on_open)(struct us_internal_ssl_socket_t *s, int is_client, char *ip, int ip_length)); - -void us_internal_ssl_socket_context_on_close(struct us_internal_ssl_socket_context_t *context, - struct us_internal_ssl_socket_t *(*on_close)(struct us_internal_ssl_socket_t *s, int code, void *reason)); - -void us_internal_ssl_socket_context_on_data(struct us_internal_ssl_socket_context_t *context, - struct us_internal_ssl_socket_t *(*on_data)(struct us_internal_ssl_socket_t *s, char *data, int length)); - -void us_internal_ssl_socket_context_on_writable(struct us_internal_ssl_socket_context_t *context, - struct us_internal_ssl_socket_t *(*on_writable)(struct us_internal_ssl_socket_t *s)); - -void us_internal_ssl_socket_context_on_timeout(struct us_internal_ssl_socket_context_t *context, - struct us_internal_ssl_socket_t *(*on_timeout)(struct us_internal_ssl_socket_t *s)); - -void us_internal_ssl_socket_context_on_end(struct us_internal_ssl_socket_context_t *context, - struct us_internal_ssl_socket_t *(*on_end)(struct us_internal_ssl_socket_t *s)); - -struct us_listen_socket_t *us_internal_ssl_socket_context_listen(struct us_internal_ssl_socket_context_t *context, - const char *host, int port, int options, int socket_ext_size); - -struct us_internal_ssl_socket_t *us_internal_ssl_socket_context_connect(struct us_internal_ssl_socket_context_t *context, - const char *host, int port, const char *source_host, int options, int socket_ext_size); - -int us_internal_ssl_socket_write(struct us_internal_ssl_socket_t *s, const char *data, int length, int msg_more); -void us_internal_ssl_socket_timeout(struct us_internal_ssl_socket_t *s, unsigned int seconds); -void *us_internal_ssl_socket_context_ext(struct us_internal_ssl_socket_context_t *s); -struct us_internal_ssl_socket_context_t *us_internal_ssl_socket_get_context(struct us_internal_ssl_socket_t *s); -void *us_internal_ssl_socket_ext(struct us_internal_ssl_socket_t *s); -int us_internal_ssl_socket_is_shut_down(struct us_internal_ssl_socket_t *s); -void us_internal_ssl_socket_shutdown(struct us_internal_ssl_socket_t *s); - -struct us_internal_ssl_socket_t *us_internal_ssl_socket_context_adopt_socket(struct us_internal_ssl_socket_context_t *context, - struct us_internal_ssl_socket_t *s, int ext_size); - -struct us_internal_ssl_socket_context_t *us_internal_create_child_ssl_socket_context(struct us_internal_ssl_socket_context_t *context, int context_ext_size); -struct us_loop_t *us_internal_ssl_socket_context_loop(struct us_internal_ssl_socket_context_t *context); - -#endif - -#endif // INTERNAL_H diff --git a/nectar_modules/http/httplib/uSockets/src/internal/networking/bsd.h b/nectar_modules/http/httplib/uSockets/src/internal/networking/bsd.h deleted file mode 100644 index 046d2a28d..000000000 --- a/nectar_modules/http/httplib/uSockets/src/internal/networking/bsd.h +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Authored by Alex Hultman, 2018-2019. - * Intellectual property of third-party. - - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - - * http://www.apache.org/licenses/LICENSE-2.0 - - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef BSD_H -#define BSD_H - -// top-most wrapper of bsd-like syscalls - -// holds everything you need from the bsd/winsock interfaces, only included by internal libusockets.h -// here everything about the syscalls are inline-wrapped and included - -#ifdef _WIN32 -#ifndef NOMINMAX -#define NOMINMAX -#endif -#include -#include -#pragma comment(lib, "ws2_32.lib") -#define SETSOCKOPT_PTR_TYPE const char * -#define LIBUS_SOCKET_ERROR INVALID_SOCKET -#else -#define _GNU_SOURCE -/* For socklen_t */ -#include -#define SETSOCKOPT_PTR_TYPE int * -#define LIBUS_SOCKET_ERROR -1 -#endif - -struct bsd_addr_t { - struct sockaddr_storage mem; - socklen_t len; - char *ip; - int ip_length; -}; - -LIBUS_SOCKET_DESCRIPTOR apple_no_sigpipe(LIBUS_SOCKET_DESCRIPTOR fd); -LIBUS_SOCKET_DESCRIPTOR bsd_set_nonblocking(LIBUS_SOCKET_DESCRIPTOR fd); -void bsd_socket_nodelay(LIBUS_SOCKET_DESCRIPTOR fd, int enabled); -void bsd_socket_flush(LIBUS_SOCKET_DESCRIPTOR fd); -LIBUS_SOCKET_DESCRIPTOR bsd_create_socket(int domain, int type, int protocol); - -void bsd_close_socket(LIBUS_SOCKET_DESCRIPTOR fd); -void bsd_shutdown_socket(LIBUS_SOCKET_DESCRIPTOR fd); - -void internal_finalize_bsd_addr(struct bsd_addr_t *addr); - -int bsd_socket_addr(LIBUS_SOCKET_DESCRIPTOR fd, struct bsd_addr_t *addr); - -char *bsd_addr_get_ip(struct bsd_addr_t *addr); - -int bsd_addr_get_ip_length(struct bsd_addr_t *addr); - -// called by dispatch_ready_poll -LIBUS_SOCKET_DESCRIPTOR bsd_accept_socket(LIBUS_SOCKET_DESCRIPTOR fd, struct bsd_addr_t *addr); - -int bsd_recv(LIBUS_SOCKET_DESCRIPTOR fd, void *buf, int length, int flags); -int bsd_send(LIBUS_SOCKET_DESCRIPTOR fd, const char *buf, int length, int msg_more); -int bsd_would_block(); - -// return LIBUS_SOCKET_ERROR or the fd that represents listen socket -// listen both on ipv6 and ipv4 -LIBUS_SOCKET_DESCRIPTOR bsd_create_listen_socket(const char *host, int port, int options); - -LIBUS_SOCKET_DESCRIPTOR bsd_create_connect_socket(const char *host, int port, const char *source_host, int options); - -#endif // BSD_H diff --git a/nectar_modules/http/httplib/uSockets/src/loop.c b/nectar_modules/http/httplib/uSockets/src/loop.c deleted file mode 100644 index 5821b9b7d..000000000 --- a/nectar_modules/http/httplib/uSockets/src/loop.c +++ /dev/null @@ -1,266 +0,0 @@ -/* - * Authored by Alex Hultman, 2018-2019. - * Intellectual property of third-party. - - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - - * http://www.apache.org/licenses/LICENSE-2.0 - - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "libusockets.h" -#include "internal/internal.h" -#include - -/* The loop has 2 fallthrough polls */ -void us_internal_loop_data_init(struct us_loop_t *loop, void (*wakeup_cb)(struct us_loop_t *loop), - void (*pre_cb)(struct us_loop_t *loop), void (*post_cb)(struct us_loop_t *loop)) { - loop->data.sweep_timer = us_create_timer(loop, 1, 0); - loop->data.recv_buf = malloc(LIBUS_RECV_BUFFER_LENGTH + LIBUS_RECV_BUFFER_PADDING * 2); - loop->data.ssl_data = 0; - loop->data.head = 0; - loop->data.iterator = 0; - loop->data.closed_head = 0; - - loop->data.pre_cb = pre_cb; - loop->data.post_cb = post_cb; - loop->data.iteration_nr = 0; - - loop->data.wakeup_async = us_internal_create_async(loop, 1, 0); - us_internal_async_set(loop->data.wakeup_async, (void (*)(struct us_internal_async *)) wakeup_cb); -} - -void us_internal_loop_data_free(struct us_loop_t *loop) { -#ifndef LIBUS_NO_SSL - us_internal_free_loop_ssl_data(loop); -#endif - - free(loop->data.recv_buf); - - us_timer_close(loop->data.sweep_timer); - us_internal_async_close(loop->data.wakeup_async); -} - -void us_wakeup_loop(struct us_loop_t *loop) { - us_internal_async_wakeup(loop->data.wakeup_async); -} - -void us_internal_loop_link(struct us_loop_t *loop, struct us_socket_context_t *context) { - /* Insert this context as the head of loop */ - context->next = loop->data.head; - context->prev = 0; - if (loop->data.head) { - loop->data.head->prev = context; - } - loop->data.head = context; -} - -/* Unlink is called before free */ -void us_internal_loop_unlink(struct us_loop_t *loop, struct us_socket_context_t *context) { - if (loop->data.head == context) { - loop->data.head = context->next; - if (loop->data.head) { - loop->data.head->prev = 0; - } - } else { - context->prev->next = context->next; - if (context->next) { - context->next->prev = context->prev; - } - } -} - -/* This functions should never run recursively */ -void us_internal_timer_sweep(struct us_loop_t *loop) { - struct us_internal_loop_data_t *loop_data = &loop->data; - for (loop_data->iterator = loop_data->head; loop_data->iterator; loop_data->iterator = loop_data->iterator->next) { - - struct us_socket_context_t *context = loop_data->iterator; - for (context->iterator = context->head; context->iterator; ) { - - struct us_socket_t *s = context->iterator; - if (s->timeout && --(s->timeout) == 0) { - - context->on_socket_timeout(s); - - /* Check for unlink / link */ - if (s == context->iterator) { - context->iterator = s->next; - } - } else { - context->iterator = s->next; - } - } - } -} - -/* Note: Properly takes the linked list and timeout sweep into account */ -void us_internal_free_closed_sockets(struct us_loop_t *loop) { - /* Free all closed sockets (maybe it is better to reverse order?) */ - if (loop->data.closed_head) { - for (struct us_socket_t *s = loop->data.closed_head; s; ) { - struct us_socket_t *next = s->next; - us_poll_free((struct us_poll_t *) s, loop); - s = next; - } - loop->data.closed_head = 0; - } -} - -void sweep_timer_cb(struct us_internal_callback_t *cb) { - us_internal_timer_sweep(cb->loop); -} - -long long us_loop_iteration_number(struct us_loop_t *loop) { - return loop->data.iteration_nr; -} - -/* These may have somewhat different meaning depending on the underlying event library */ -void us_internal_loop_pre(struct us_loop_t *loop) { - loop->data.iteration_nr++; - loop->data.pre_cb(loop); -} - -void us_internal_loop_post(struct us_loop_t *loop) { - us_internal_free_closed_sockets(loop); - loop->data.post_cb(loop); -} - -void us_internal_dispatch_ready_poll(struct us_poll_t *p, int error, int events) { - switch (us_internal_poll_type(p)) { - case POLL_TYPE_CALLBACK: { - /* Let's just do this to clear the CodeQL alert */ - #ifndef LIBUS_USE_LIBUV - us_internal_accept_poll_event(p); - #endif - struct us_internal_callback_t *cb = (struct us_internal_callback_t *) p; - cb->cb(cb->cb_expects_the_loop ? (struct us_internal_callback_t *) cb->loop : (struct us_internal_callback_t *) &cb->p); - } - break; - case POLL_TYPE_SEMI_SOCKET: { - /* Both connect and listen sockets are semi-sockets - * but they poll for different events */ - if (us_poll_events(p) == LIBUS_SOCKET_WRITABLE) { - struct us_socket_t *s = (struct us_socket_t *) p; - - us_poll_change(p, s->context->loop, LIBUS_SOCKET_READABLE); - - /* We always use nodelay */ - bsd_socket_nodelay(us_poll_fd(p), 1); - - /* We are now a proper socket */ - us_internal_poll_set_type(p, POLL_TYPE_SOCKET); - - s->context->on_open(s, 1, 0, 0); - } else { - struct us_listen_socket_t *listen_socket = (struct us_listen_socket_t *) p; - struct bsd_addr_t addr; - - LIBUS_SOCKET_DESCRIPTOR client_fd = bsd_accept_socket(us_poll_fd(p), &addr); - if (client_fd == LIBUS_SOCKET_ERROR) { - /* Todo: start timer here */ - - } else { - - /* Todo: stop timer if any */ - - do { - struct us_poll_t *accepted_p = us_create_poll(us_socket_context(0, &listen_socket->s)->loop, 0, sizeof(struct us_socket_t) - sizeof(struct us_poll_t) + listen_socket->socket_ext_size); - us_poll_init(accepted_p, client_fd, POLL_TYPE_SOCKET); - us_poll_start(accepted_p, listen_socket->s.context->loop, LIBUS_SOCKET_READABLE); - - struct us_socket_t *s = (struct us_socket_t *) accepted_p; - - s->context = listen_socket->s.context; - - /* We always use nodelay */ - bsd_socket_nodelay(client_fd, 1); - - us_internal_socket_context_link(listen_socket->s.context, s); - - listen_socket->s.context->on_open(s, 0, bsd_addr_get_ip(&addr), bsd_addr_get_ip_length(&addr)); - - /* Exit accept loop if listen socket was closed in on_open handler */ - if (us_socket_is_closed(0, &listen_socket->s)) { - break; - } - - } while ((client_fd = bsd_accept_socket(us_poll_fd(p), &addr)) != LIBUS_SOCKET_ERROR); - } - } - } - break; - case POLL_TYPE_SOCKET_SHUT_DOWN: - case POLL_TYPE_SOCKET: { - /* We should only use s, no p after this point */ - struct us_socket_t *s = (struct us_socket_t *) p; - - /* Such as epollerr epollhup */ - if (error) { - /* Todo: decide what code we give here */ - s = us_socket_close(0, s, 0, NULL); - return; - } - - if (events & LIBUS_SOCKET_WRITABLE) { - /* Note: if we failed a write as a socket of one loop then adopted - * to another loop, this will be wrong. Absurd case though */ - s->context->loop->data.last_write_failed = 0; - - s = s->context->on_writable(s); - - if (us_socket_is_closed(0, s)) { - return; - } - - /* If we have no failed write or if we shut down, then stop polling for more writable */ - if (!s->context->loop->data.last_write_failed || us_socket_is_shut_down(0, s)) { - us_poll_change(&s->p, us_socket_context(0, s)->loop, us_poll_events(&s->p) & LIBUS_SOCKET_READABLE); - } - } - - if (events & LIBUS_SOCKET_READABLE) { - /* Contexts may ignore data and postpone it to next iteration, for balancing purposes such as - * when SSL handshakes take too long to finish and we only want a few of them per iteration */ - if (s->context->ignore_data(s)) { - break; - } - - int length = bsd_recv(us_poll_fd(&s->p), s->context->loop->data.recv_buf + LIBUS_RECV_BUFFER_PADDING, LIBUS_RECV_BUFFER_LENGTH, 0); - if (length > 0) { - s = s->context->on_data(s, s->context->loop->data.recv_buf + LIBUS_RECV_BUFFER_PADDING, length); - } else if (!length) { - if (us_socket_is_shut_down(0, s)) { - /* We got FIN back after sending it */ - /* Todo: We should give "CLEAN SHUTDOWN" as reason here */ - s = us_socket_close(0, s, 0, NULL); - } else { - /* We got FIN, so stop polling for readable */ - us_poll_change(&s->p, us_socket_context(0, s)->loop, us_poll_events(&s->p) & LIBUS_SOCKET_WRITABLE); - s = s->context->on_end(s); - } - } else if (length == LIBUS_SOCKET_ERROR && !bsd_would_block()) { - /* Todo: decide also here what kind of reason we should give */ - s = us_socket_close(0, s, 0, NULL); - } - } - } - break; - } -} - -/* Integration only requires the timer to be set up */ -void us_loop_integrate(struct us_loop_t *loop) { - us_timer_set(loop->data.sweep_timer, (void (*)(struct us_timer_t *)) sweep_timer_cb, LIBUS_TIMEOUT_GRANULARITY * 1000, LIBUS_TIMEOUT_GRANULARITY * 1000); -} - -void *us_loop_ext(struct us_loop_t *loop) { - return loop + 1; -} diff --git a/nectar_modules/http/httplib/uSockets/src/socket.c b/nectar_modules/http/httplib/uSockets/src/socket.c deleted file mode 100644 index 84c868368..000000000 --- a/nectar_modules/http/httplib/uSockets/src/socket.c +++ /dev/null @@ -1,144 +0,0 @@ -/* - * Authored by Alex Hultman, 2018-2019. - * Intellectual property of third-party. - - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - - * http://www.apache.org/licenses/LICENSE-2.0 - - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "libusockets.h" -#include "internal/internal.h" -#include -#include - -/* Shared with SSL */ - -void us_socket_remote_address(int ssl, struct us_socket_t *s, char *buf, int *length) { - struct bsd_addr_t addr; - if (bsd_socket_addr(us_poll_fd(&s->p), &addr) || *length < bsd_addr_get_ip_length(&addr)) { - *length = 0; - } else { - *length = bsd_addr_get_ip_length(&addr); - memcpy(buf, bsd_addr_get_ip(&addr), *length); - } -} - -struct us_socket_context_t *us_socket_context(int ssl, struct us_socket_t *s) { - return s->context; -} - -void us_socket_timeout(int ssl, struct us_socket_t *s, unsigned int seconds) { - if (seconds) { - unsigned short timeout_sweeps = (unsigned short) (0.5f + ((float) seconds) / ((float) LIBUS_TIMEOUT_GRANULARITY)); - s->timeout = timeout_sweeps ? timeout_sweeps : 1; - } else { - s->timeout = 0; - } -} - -void us_socket_flush(int ssl, struct us_socket_t *s) { - if (!us_socket_is_shut_down(0, s)) { - bsd_socket_flush(us_poll_fd((struct us_poll_t *) s)); - } -} - -int us_socket_is_closed(int ssl, struct us_socket_t *s) { - return s->prev == (struct us_socket_t *) s->context; -} - -struct us_socket_t *us_socket_close(int ssl, struct us_socket_t *s, int code, void *reason) { - if (!us_socket_is_closed(0, s)) { - us_internal_socket_context_unlink(s->context, s); - us_poll_stop((struct us_poll_t *) s, s->context->loop); - bsd_close_socket(us_poll_fd((struct us_poll_t *) s)); - - /* Link this socket to the close-list and let it be deleted after this iteration */ - s->next = s->context->loop->data.closed_head; - s->context->loop->data.closed_head = s; - - /* Any socket with prev = context is marked as closed */ - s->prev = (struct us_socket_t *) s->context; - - return s->context->on_close(s, code, reason); - } - return s; -} - -/* Not shared with SSL */ - -void *us_socket_get_native_handle(int ssl, struct us_socket_t *s) { -#ifndef LIBUS_NO_SSL - if (ssl) { - return us_internal_ssl_socket_get_native_handle((struct us_internal_ssl_socket_t *) s); - } -#endif - - return (void *) (uintptr_t) us_poll_fd((struct us_poll_t *) s); -} - -int us_socket_write(int ssl, struct us_socket_t *s, const char *data, int length, int msg_more) { -#ifndef LIBUS_NO_SSL - if (ssl) { - return us_internal_ssl_socket_write((struct us_internal_ssl_socket_t *) s, data, length, msg_more); - } -#endif - - if (us_socket_is_closed(ssl, s) || us_socket_is_shut_down(ssl, s)) { - return 0; - } - - int written = bsd_send(us_poll_fd(&s->p), data, length, msg_more); - if (written != length) { - s->context->loop->data.last_write_failed = 1; - us_poll_change(&s->p, s->context->loop, LIBUS_SOCKET_READABLE | LIBUS_SOCKET_WRITABLE); - } - - return written < 0 ? 0 : written; -} - -void *us_socket_ext(int ssl, struct us_socket_t *s) { -#ifndef LIBUS_NO_SSL - if (ssl) { - return us_internal_ssl_socket_ext((struct us_internal_ssl_socket_t *) s); - } -#endif - - return s + 1; -} - -int us_socket_is_shut_down(int ssl, struct us_socket_t *s) { -#ifndef LIBUS_NO_SSL - if (ssl) { - return us_internal_ssl_socket_is_shut_down((struct us_internal_ssl_socket_t *) s); - } -#endif - - return us_internal_poll_type(&s->p) == POLL_TYPE_SOCKET_SHUT_DOWN; -} - -void us_socket_shutdown(int ssl, struct us_socket_t *s) { -#ifndef LIBUS_NO_SSL - if (ssl) { - us_internal_ssl_socket_shutdown((struct us_internal_ssl_socket_t *) s); - return; - } -#endif - - /* Todo: should we emit on_close if calling shutdown on an already half-closed socket? - * We need more states in that case, we need to track RECEIVED_FIN - * so far, the app has to track this and call close as needed */ - if (!us_socket_is_closed(ssl, s) && !us_socket_is_shut_down(ssl, s)) { - us_internal_poll_set_type(&s->p, POLL_TYPE_SOCKET_SHUT_DOWN); - us_poll_change(&s->p, s->context->loop, us_poll_events(&s->p) & LIBUS_SOCKET_READABLE); - bsd_shutdown_socket(us_poll_fd((struct us_poll_t *) s)); - } -} diff --git a/nectar_modules/http/httplib/uSockets/tests/sni_test.c b/nectar_modules/http/httplib/uSockets/tests/sni_test.c deleted file mode 100644 index 9de1ffbcf..000000000 --- a/nectar_modules/http/httplib/uSockets/tests/sni_test.c +++ /dev/null @@ -1,57 +0,0 @@ -extern "C" { -void *sni_new(); -void sni_free(void *sni, void (*cb)(void *user)); -int sni_add(void *sni, const char *hostname, void *user); -void *sni_remove(void *sni, const char *hostname); -void *sni_find(void *sni, const char *hostname); -} - -#include -#include - -/* Todo: replace 13, 14 and 15 with malloc */ -//void *WILDCARD_GOOGLE_COM = strdup("*.google.com"); -//void *TEST_GOOGLE_COM = strdup("test.google.com"); - -void sni_free_cb(void *user) { - printf("Freeing %p\n", user); -} - -int main() { - - void *sni = sni_new(); - - /* Adding should succeed */ - assert(sni_add(sni, "*.google.com", 13) == 0); - assert(sni_add(sni, "test.google.com", 14) == 0); - - /* Adding the same name should not overwrite existing */ - assert(sni_add(sni, "*.google.com", 15) != 0); - assert(sni_find(sni, "anything.google.com") == 13); - - assert(sni_find(sni, "docs.google.com") == 13); - assert(sni_find(sni, "*.google.com") == 13); - assert(sni_find(sni, "test.google.com") == 14); - assert(sni_find(sni, "yolo.nothing.com") == 0); - assert(sni_find(sni, "yolo.google.com") == 13); - - /* Removing should work */ - assert(sni_remove(sni, "test.google.com") == 14); - assert(sni_find(sni, "test.google.com") == 13); - assert(sni_remove(sni, "*.google.com") == 13); - assert(sni_find(sni, "test.google.com") == 0); - - /* Removing parent with data should not remove child with data */ - assert(sni_add(sni, "www.google.com", 16) == 0); - assert(sni_add(sni, "www.google.com.au.ck.uk", 17) == 0); - assert(sni_find(sni, "www.google.com") == 16); - assert(sni_find(sni, "www.google.com.au.ck.uk") == 17); - assert(sni_remove(sni, "www.google.com.yolo") == 0); - assert(sni_remove(sni, "www.google.com.au.ck.uk") == 17); - assert(sni_find(sni, "www.google.com") == 16); - - /* Free should not leave anything remaining (test with ASAN leaksanitizer) */ - sni_free(sni, sni_free_cb); - - printf("OK\n"); -} diff --git a/nectar_modules/http/httplib/uSockets/uSockets.vcxproj b/nectar_modules/http/httplib/uSockets/uSockets.vcxproj deleted file mode 100644 index 87cbb854a..000000000 --- a/nectar_modules/http/httplib/uSockets/uSockets.vcxproj +++ /dev/null @@ -1,54 +0,0 @@ - - - - Release - x64 - - - Debug - x64 - - - Release - Win32 - - - Debug - Win32 - - - - {39D08679-782E-41AC-BDE0-06A462568EFF} - 10.0.17134.0 - - - - DynamicLibrary - v141 - uSockets - - - - MaxSpeed - - - - - src - LIBUS_NO_SSL - - - - - - - - - - - - - - - - diff --git a/nectar_modules/http/httplib/uWS/App.h b/nectar_modules/http/httplib/uWS/App.h deleted file mode 100644 index 4a586c8e1..000000000 --- a/nectar_modules/http/httplib/uWS/App.h +++ /dev/null @@ -1,328 +0,0 @@ -/* - * Authored by Alex Hultman, 2018-2020. - * Intellectual property of third-party. - - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - - * http://www.apache.org/licenses/LICENSE-2.0 - - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef UWS_APP_H -#define UWS_APP_H - -/* An app is a convenience wrapper of some of the most used fuctionalities and allows a - * builder-pattern kind of init. Apps operate on the implicit thread local Loop */ - -#include "HttpContext.h" -#include "HttpResponse.h" -#include "WebSocketContext.h" -#include "WebSocket.h" -#include "PerMessageDeflate.h" - -namespace uWS { - -template -struct TemplatedApp { -private: - /* The app always owns at least one http context, but creates websocket contexts on demand */ - HttpContext *httpContext; - std::vector *> webSocketContexts; - -public: - - /* Server name */ - TemplatedApp &&addServerName(std::string hostname_pattern, us_socket_context_options_t options = {}) { - - us_socket_context_add_server_name(SSL, (struct us_socket_context_t *) httpContext, hostname_pattern.c_str(), options); - return std::move(*this); - } - - TemplatedApp &&removeServerName(std::string hostname_pattern) { - - us_socket_context_remove_server_name(SSL, (struct us_socket_context_t *) httpContext, hostname_pattern.c_str()); - return std::move(*this); - } - - TemplatedApp &&missingServerName(fu2::unique_function handler) { - - if (!constructorFailed()) { - httpContext->getSocketContextData()->missingServerNameHandler = std::move(handler); - - us_socket_context_on_server_name(SSL, (struct us_socket_context_t *) httpContext, [](struct us_socket_context_t *context, const char *hostname) { - - /* This is the only requirements of being friends with HttpContextData */ - HttpContext *httpContext = (HttpContext *) context; - httpContext->getSocketContextData()->missingServerNameHandler(hostname); - }); - } - - return std::move(*this); - } - - /* Returns the SSL_CTX of this app, or nullptr. */ - void *getNativeHandle() { - return us_socket_context_get_native_handle(SSL, (struct us_socket_context_t *) httpContext); - } - - /* Attaches a "filter" function to track socket connections/disconnections */ - void filter(fu2::unique_function *, int)> &&filterHandler) { - httpContext->filter(std::move(filterHandler)); - } - - /* Publishes a message to all websocket contexts */ - void publish(std::string_view topic, std::string_view message, OpCode opCode, bool compress = false) { - for (auto *webSocketContext : webSocketContexts) { - webSocketContext->getExt()->publish(topic, message, opCode, compress); - } - } - - ~TemplatedApp() { - /* Let's just put everything here */ - if (httpContext) { - httpContext->free(); - - for (auto *webSocketContext : webSocketContexts) { - webSocketContext->free(); - } - } - } - - /* Disallow copying, only move */ - TemplatedApp(const TemplatedApp &other) = delete; - - TemplatedApp(TemplatedApp &&other) { - /* Move HttpContext */ - httpContext = other.httpContext; - other.httpContext = nullptr; - - /* Move webSocketContexts */ - webSocketContexts = std::move(other.webSocketContexts); - } - - TemplatedApp(us_socket_context_options_t options = {}) { - httpContext = uWS::HttpContext::create(uWS::Loop::get(), options); - } - - bool constructorFailed() { - return !httpContext; - } - - struct WebSocketBehavior { - CompressOptions compression = DISABLED; - int maxPayloadLength = 16 * 1024; - int idleTimeout = 120; - int maxBackpressure = 1 * 1024 * 1024; - fu2::unique_function *, HttpRequest *, struct us_socket_context_t *)> upgrade = nullptr; - fu2::unique_function *)> open = nullptr; - fu2::unique_function *, std::string_view, uWS::OpCode)> message = nullptr; - fu2::unique_function *)> drain = nullptr; - fu2::unique_function *)> ping = nullptr; - fu2::unique_function *)> pong = nullptr; - fu2::unique_function *, int, std::string_view)> close = nullptr; - }; - - template - TemplatedApp &&ws(std::string pattern, WebSocketBehavior &&behavior) { - /* Don't compile if alignment rules cannot be satisfied */ - static_assert(alignof(UserData) <= LIBUS_EXT_ALIGNMENT, - "µWebSockets cannot satisfy UserData alignment requirements. You need to recompile µSockets with LIBUS_EXT_ALIGNMENT adjusted accordingly."); - - if (!httpContext) { - return std::move(*this); - } - - /* Every route has its own websocket context with its own behavior and user data type */ - auto *webSocketContext = WebSocketContext::create(Loop::get(), (us_socket_context_t *) httpContext); - - /* We need to clear this later on */ - webSocketContexts.push_back(webSocketContext); - - /* Quick fix to disable any compression if set */ -#ifdef UWS_NO_ZLIB - behavior.compression = uWS::DISABLED; -#endif - - /* If we are the first one to use compression, initialize it */ - if (behavior.compression) { - LoopData *loopData = (LoopData *) us_loop_ext(us_socket_context_loop(SSL, webSocketContext->getSocketContext())); - - /* Initialize loop's deflate inflate streams */ - if (!loopData->zlibContext) { - loopData->zlibContext = new ZlibContext; - loopData->inflationStream = new InflationStream; - loopData->deflationStream = new DeflationStream(CompressOptions::DEDICATED_COMPRESSOR); - } - } - - /* Copy all handlers */ - webSocketContext->getExt()->openHandler = std::move(behavior.open); - webSocketContext->getExt()->messageHandler = std::move(behavior.message); - webSocketContext->getExt()->drainHandler = std::move(behavior.drain); - webSocketContext->getExt()->closeHandler = std::move([closeHandler = std::move(behavior.close)](WebSocket *ws, int code, std::string_view message) mutable { - if (closeHandler) { - closeHandler(ws, code, message); - } - - /* Destruct user data after returning from close handler */ - ((UserData *) ws->getUserData())->~UserData(); - }); - webSocketContext->getExt()->pingHandler = std::move(behavior.ping); - webSocketContext->getExt()->pongHandler = std::move(behavior.pong); - - /* Copy settings */ - webSocketContext->getExt()->maxPayloadLength = behavior.maxPayloadLength; - webSocketContext->getExt()->idleTimeout = behavior.idleTimeout; - webSocketContext->getExt()->maxBackpressure = behavior.maxBackpressure; - webSocketContext->getExt()->compression = behavior.compression; - - httpContext->onHttp("get", pattern, [webSocketContext, behavior = std::move(behavior)](auto *res, auto *req) mutable { - - /* If we have this header set, it's a websocket */ - std::string_view secWebSocketKey = req->getHeader("sec-websocket-key"); - if (secWebSocketKey.length() == 24) { - - /* Emit upgrade handler */ - if (behavior.upgrade) { - behavior.upgrade(res, req, (struct us_socket_context_t *) webSocketContext); - } else { - /* Default handler upgrades to WebSocket */ - std::string_view secWebSocketProtocol = req->getHeader("sec-websocket-protocol"); - std::string_view secWebSocketExtensions = req->getHeader("sec-websocket-extensions"); - - res->template upgrade({}, secWebSocketKey, secWebSocketProtocol, secWebSocketExtensions, (struct us_socket_context_t *) webSocketContext); - } - - /* We are going to get uncorked by the Http get return */ - - /* We do not need to check for any close or shutdown here as we immediately return from get handler */ - - } else { - /* Tell the router that we did not handle this request */ - req->setYield(true); - } - }, true); - return std::move(*this); - } - - TemplatedApp &&get(std::string pattern, fu2::unique_function *, HttpRequest *)> &&handler) { - if (httpContext) { - httpContext->onHttp("get", pattern, std::move(handler)); - } - return std::move(*this); - } - - TemplatedApp &&post(std::string pattern, fu2::unique_function *, HttpRequest *)> &&handler) { - if (httpContext) { - httpContext->onHttp("post", pattern, std::move(handler)); - } - return std::move(*this); - } - - TemplatedApp &&options(std::string pattern, fu2::unique_function *, HttpRequest *)> &&handler) { - if (httpContext) { - httpContext->onHttp("options", pattern, std::move(handler)); - } - return std::move(*this); - } - - TemplatedApp &&del(std::string pattern, fu2::unique_function *, HttpRequest *)> &&handler) { - if (httpContext) { - httpContext->onHttp("delete", pattern, std::move(handler)); - } - return std::move(*this); - } - - TemplatedApp &&patch(std::string pattern, fu2::unique_function *, HttpRequest *)> &&handler) { - if (httpContext) { - httpContext->onHttp("patch", pattern, std::move(handler)); - } - return std::move(*this); - } - - TemplatedApp &&put(std::string pattern, fu2::unique_function *, HttpRequest *)> &&handler) { - if (httpContext) { - httpContext->onHttp("put", pattern, std::move(handler)); - } - return std::move(*this); - } - - TemplatedApp &&head(std::string pattern, fu2::unique_function *, HttpRequest *)> &&handler) { - if (httpContext) { - httpContext->onHttp("head", pattern, std::move(handler)); - } - return std::move(*this); - } - - TemplatedApp &&connect(std::string pattern, fu2::unique_function *, HttpRequest *)> &&handler) { - if (httpContext) { - httpContext->onHttp("connect", pattern, std::move(handler)); - } - return std::move(*this); - } - - TemplatedApp &&trace(std::string pattern, fu2::unique_function *, HttpRequest *)> &&handler) { - if (httpContext) { - httpContext->onHttp("trace", pattern, std::move(handler)); - } - return std::move(*this); - } - - /* This one catches any method */ - TemplatedApp &&any(std::string pattern, fu2::unique_function *, HttpRequest *)> &&handler) { - if (httpContext) { - httpContext->onHttp("*", pattern, std::move(handler)); - } - return std::move(*this); - } - - /* Host, port, callback */ - TemplatedApp &&listen(std::string host, int port, fu2::unique_function &&handler) { - if (!host.length()) { - return listen(port, std::move(handler)); - } - handler(httpContext ? httpContext->listen(host.c_str(), port, 0) : nullptr); - return std::move(*this); - } - - /* Host, port, options, callback */ - TemplatedApp &&listen(std::string host, int port, int options, fu2::unique_function &&handler) { - if (!host.length()) { - return listen(port, options, std::move(handler)); - } - handler(httpContext ? httpContext->listen(host.c_str(), port, options) : nullptr); - return std::move(*this); - } - - /* Port, callback */ - TemplatedApp &&listen(int port, fu2::unique_function &&handler) { - handler(httpContext ? httpContext->listen(nullptr, port, 0) : nullptr); - return std::move(*this); - } - - /* Port, options, callback */ - TemplatedApp &&listen(int port, int options, fu2::unique_function &&handler) { - handler(httpContext ? httpContext->listen(nullptr, port, options) : nullptr); - return std::move(*this); - } - - TemplatedApp &&run() { - uWS::run(); - return std::move(*this); - } - -}; - -typedef TemplatedApp App; -typedef TemplatedApp SSLApp; - -} - -#endif // UWS_APP_H diff --git a/nectar_modules/http/httplib/uWS/HttpParser.h b/nectar_modules/http/httplib/uWS/HttpParser.h deleted file mode 100644 index 022e65a4e..000000000 --- a/nectar_modules/http/httplib/uWS/HttpParser.h +++ /dev/null @@ -1,372 +0,0 @@ -/* - * Authored by Alex Hultman, 2018-2020. - * Intellectual property of third-party. - - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - - * http://www.apache.org/licenses/LICENSE-2.0 - - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef UWS_HTTPPARSER_H -#define UWS_HTTPPARSER_H - -// todo: HttpParser is in need of a few clean-ups and refactorings - -/* The HTTP parser is an independent module subject to unit testing / fuzz testing */ - -#include -#include -#include -#include "f2/function2.hpp" - -#include "BloomFilter.h" -#include "ProxyParser.h" -#include "QueryParser.h" - -namespace uWS { - -/* We require at least this much post padding */ -static const int MINIMUM_HTTP_POST_PADDING = 32; - -struct HttpRequest { - - friend struct HttpParser; - -private: - const static int MAX_HEADERS = 50; - struct Header { - std::string_view key, value; - } headers[MAX_HEADERS]; - int querySeparator; - bool didYield; - BloomFilter bf; - std::pair currentParameters; - -public: - bool getYield() { - return didYield; - } - - /* Iteration over headers (key, value) */ - struct HeaderIterator { - Header *ptr; - - bool operator!=(const HeaderIterator &other) const { - /* Comparison with end is a special case */ - if (ptr != other.ptr) { - return other.ptr || ptr->key.length(); - } - return false; - } - - HeaderIterator &operator++() { - ptr++; - return *this; - } - - std::pair operator*() const { - return {ptr->key, ptr->value}; - } - }; - - HeaderIterator begin() { - return {headers + 1}; - } - - HeaderIterator end() { - return {nullptr}; - } - - /* If you do not want to handle this route */ - void setYield(bool yield) { - didYield = yield; - } - - std::string_view getHeader(std::string_view lowerCasedHeader) { - if (bf.mightHave(lowerCasedHeader)) { - for (Header *h = headers; (++h)->key.length(); ) { - if (h->key.length() == lowerCasedHeader.length() && !strncmp(h->key.data(), lowerCasedHeader.data(), lowerCasedHeader.length())) { - return h->value; - } - } - } - return std::string_view(nullptr, 0); - } - - std::string_view getUrl() { - return std::string_view(headers->value.data(), querySeparator); - } - - std::string_view getMethod() { - return std::string_view(headers->key.data(), headers->key.length()); - } - - /* Returns the raw querystring as a whole, still encoded */ - std::string_view getQuery() { - if (querySeparator < (int) headers->value.length()) { - /* Strip the initial ? */ - return std::string_view(headers->value.data() + querySeparator + 1, headers->value.length() - querySeparator - 1); - } else { - return std::string_view(nullptr, 0); - } - } - - /* Finds and decodes the URI component. */ - std::string_view getQuery(std::string_view key) { - /* Raw querystring including initial '?' sign */ - std::string_view queryString = std::string_view(headers->value.data() + querySeparator, headers->value.length() - querySeparator); - - return getDecodedQueryValue(key, queryString); - } - - void setParameters(std::pair parameters) { - currentParameters = parameters; - } - - std::string_view getParameter(unsigned int index) { - if (currentParameters.first < (int) index) { - return {}; - } else { - return currentParameters.second[index]; - } - } - -}; - -struct HttpParser { - -private: - std::string fallback; - unsigned int remainingStreamingBytes = 0; - - const size_t MAX_FALLBACK_SIZE = 1024 * 4; - - static unsigned int toUnsignedInteger(std::string_view str) { - unsigned int unsignedIntegerValue = 0; - for (unsigned char c : str) { - unsignedIntegerValue = unsignedIntegerValue * 10 + (c - '0'); - } - return unsignedIntegerValue; - } - - static unsigned int getHeaders(char *postPaddedBuffer, char *end, struct HttpRequest::Header *headers, BloomFilter *bf) { - char *preliminaryKey, *preliminaryValue, *start = postPaddedBuffer; - - for (unsigned int i = 0; i < HttpRequest::MAX_HEADERS; i++) { - for (preliminaryKey = postPaddedBuffer; (*postPaddedBuffer != ':') & (*postPaddedBuffer > 32); *(postPaddedBuffer++) |= 32); - if (*postPaddedBuffer == '\r') { - if ((postPaddedBuffer != end) & (postPaddedBuffer[1] == '\n') & (i > 0)) { - headers->key = std::string_view(nullptr, 0); - return (unsigned int) ((postPaddedBuffer + 2) - start); - } else { - return 0; - } - } else { - headers->key = std::string_view(preliminaryKey, (size_t) (postPaddedBuffer - preliminaryKey)); - for (postPaddedBuffer++; (*postPaddedBuffer == ':' || *postPaddedBuffer < 33) && *postPaddedBuffer != '\r'; postPaddedBuffer++); - preliminaryValue = postPaddedBuffer; - postPaddedBuffer = (char *) memchr(postPaddedBuffer, '\r', end - postPaddedBuffer); - if (postPaddedBuffer && postPaddedBuffer[1] == '\n') { - headers->value = std::string_view(preliminaryValue, (size_t) (postPaddedBuffer - preliminaryValue)); - postPaddedBuffer += 2; - headers++; - } else { - return 0; - } - } - } - return 0; - } - - // the only caller of getHeaders - template - std::pair fenceAndConsumePostPadded(char *data, int length, void *user, void *reserved, HttpRequest *req, fu2::unique_function &requestHandler, fu2::unique_function &dataHandler) { - - /* How much data we CONSUMED (to throw away) */ - int consumedTotal = 0; - -#ifdef UWS_WITH_PROXY - /* ProxyParser is passed as reserved parameter */ - ProxyParser *pp = (ProxyParser *) reserved; - - /* Parse PROXY protocol */ - auto [done, offset] = pp->parse({data, (unsigned int) length}); - if (!done) { - return {0, user}; - } else { - /* We have consumed this data so skip it */ - data += offset; - length -= offset; - consumedTotal += offset; - } -#endif - - /* Fence one byte past end of our buffer (buffer has post padded margins) */ - data[length] = '\r'; - - for (int consumed; length && (consumed = getHeaders(data, data + length, req->headers, &req->bf)); ) { - data += consumed; - length -= consumed; - consumedTotal += consumed; - - /* Strip away tail of first "header value" aka URL */ - req->headers->value = std::string_view(req->headers->value.data(), std::max(0, (int) req->headers->value.length() - 9)); - - /* Add all headers to bloom filter */ - req->bf.reset(); - for (HttpRequest::Header *h = req->headers; (++h)->key.length(); ) { - req->bf.add(h->key); - } - - /* Parse query */ - const char *querySeparatorPtr = (const char *) memchr(req->headers->value.data(), '?', req->headers->value.length()); - req->querySeparator = (int) ((querySeparatorPtr ? querySeparatorPtr : req->headers->value.data() + req->headers->value.length()) - req->headers->value.data()); - - /* If returned socket is not what we put in we need - * to break here as we either have upgraded to - * WebSockets or otherwise closed the socket. */ - void *returnedUser = requestHandler(user, req); - if (returnedUser != user) { - /* We are upgraded to WebSocket or otherwise broken */ - return {consumedTotal, returnedUser}; - } - - // todo: do not check this for GET (get should not have a body) - // todo: also support reading chunked streams - std::string_view contentLengthString = req->getHeader("content-length"); - if (contentLengthString.length()) { - remainingStreamingBytes = toUnsignedInteger(contentLengthString); - - if (!CONSUME_MINIMALLY) { - unsigned int emittable = std::min(remainingStreamingBytes, length); - dataHandler(user, std::string_view(data, emittable), emittable == remainingStreamingBytes); - remainingStreamingBytes -= emittable; - - data += emittable; - length -= emittable; - consumedTotal += emittable; - } - } else { - /* Still emit an empty data chunk to signal no data */ - dataHandler(user, {}, true); - } - - if (CONSUME_MINIMALLY) { - break; - } - } - return {consumedTotal, user}; - } - -public: - void *consumePostPadded(char *data, int length, void *user, void *reserved, fu2::unique_function &&requestHandler, fu2::unique_function &&dataHandler, fu2::unique_function &&errorHandler) { - - /* This resets BloomFilter by construction, but later we also reset it again. - * Optimize this to skip resetting twice (req could be made global) */ - HttpRequest req; - - if (remainingStreamingBytes) { - - // this is exactly the same as below! - // todo: refactor this - if (remainingStreamingBytes >= (unsigned int) length) { - void *returnedUser = dataHandler(user, std::string_view(data, length), remainingStreamingBytes == (unsigned int) length); - remainingStreamingBytes -= length; - return returnedUser; - } else { - void *returnedUser = dataHandler(user, std::string_view(data, remainingStreamingBytes), true); - - data += remainingStreamingBytes; - length -= remainingStreamingBytes; - - remainingStreamingBytes = 0; - - if (returnedUser != user) { - return returnedUser; - } - } - - } else if (fallback.length()) { - int had = (int) fallback.length(); - - int maxCopyDistance = (int) std::min(MAX_FALLBACK_SIZE - fallback.length(), (size_t) length); - - /* We don't want fallback to be short string optimized, since we want to move it */ - fallback.reserve(fallback.length() + maxCopyDistance + std::max(MINIMUM_HTTP_POST_PADDING, sizeof(std::string))); - fallback.append(data, maxCopyDistance); - - // break here on break - std::pair consumed = fenceAndConsumePostPadded(fallback.data(), (int) fallback.length(), user, reserved, &req, requestHandler, dataHandler); - if (consumed.second != user) { - return consumed.second; - } - - if (consumed.first) { - - fallback.clear(); - - data += consumed.first - had; - length -= consumed.first - had; - - if (remainingStreamingBytes) { - // this is exactly the same as above! - if (remainingStreamingBytes >= (unsigned int) length) { - void *returnedUser = dataHandler(user, std::string_view(data, length), remainingStreamingBytes == (unsigned int) length); - remainingStreamingBytes -= length; - return returnedUser; - } else { - void *returnedUser = dataHandler(user, std::string_view(data, remainingStreamingBytes), true); - - data += remainingStreamingBytes; - length -= remainingStreamingBytes; - - remainingStreamingBytes = 0; - - if (returnedUser != user) { - return returnedUser; - } - } - } - - } else { - if (fallback.length() == MAX_FALLBACK_SIZE) { - // note: you don't really need error handler, just return something strange! - // we could have it return a constant pointer to denote error! - return errorHandler(user); - } - return user; - } - } - - std::pair consumed = fenceAndConsumePostPadded(data, length, user, reserved, &req, requestHandler, dataHandler); - if (consumed.second != user) { - return consumed.second; - } - - data += consumed.first; - length -= consumed.first; - - if (length) { - if ((unsigned int) length < MAX_FALLBACK_SIZE) { - fallback.append(data, length); - } else { - return errorHandler(user); - } - } - - // added for now - return user; - } -}; - -} - -#endif // UWS_HTTPPARSER_H diff --git a/nectar_modules/http/httplib/uWS/PerMessageDeflate.h b/nectar_modules/http/httplib/uWS/PerMessageDeflate.h deleted file mode 100644 index bcd1eaa3d..000000000 --- a/nectar_modules/http/httplib/uWS/PerMessageDeflate.h +++ /dev/null @@ -1,250 +0,0 @@ -/* - * Authored by Alex Hultman, 2018-2020. - * Intellectual property of third-party. - - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - - * http://www.apache.org/licenses/LICENSE-2.0 - - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* This standalone module implements deflate / inflate streams */ - -#ifndef UWS_PERMESSAGEDEFLATE_H -#define UWS_PERMESSAGEDEFLATE_H - -/* We always define these options no matter if ZLIB is enabled or not */ -namespace uWS { - /* Compress options (really more like PerMessageDeflateOptions) */ - enum CompressOptions : int { - /* Compression disabled */ - DISABLED = 0, - /* We compress using a shared non-sliding window. No added memory usage, worse compression. */ - SHARED_COMPRESSOR = 1, - /* We compress using a dedicated sliding window. Major memory usage added, better compression of similarly repeated messages. */ - DEDICATED_COMPRESSOR = 2, - /* Flags for limiting memory usage of dedicated compressor */ - DEDICATED_COMPRESSOR_3KB = 2 | 4, - DEDICATED_COMPRESSOR_4KB = 2 | 8, - DEDICATED_COMPRESSOR_8KB = 2 | 16, - DEDICATED_COMPRESSOR_16KB = 2 | 32, - DEDICATED_COMPRESSOR_32KB = 2 | 64, - DEDICATED_COMPRESSOR_64KB = 2 | 128, - DEDICATED_COMPRESSOR_128KB = 2 | 256, - DEDICATED_COMPRESSOR_256KB = 2 | 512 - }; -} - -#ifndef UWS_NO_ZLIB -#include -#endif - -#include -#include - -namespace uWS { - -/* Do not compile this module if we don't want it */ -#ifdef UWS_NO_ZLIB -struct ZlibContext {}; -struct InflationStream { - std::optional inflate(ZlibContext *zlibContext, std::string_view compressed, size_t maxPayloadLength) { - /* Anything here goes, it is never going to be called */ - return std::nullopt; - } -}; -struct DeflationStream { - std::string_view deflate(ZlibContext *zlibContext, std::string_view raw, bool reset) { - return raw; - } - DeflationStream(int compressOptions) { - } -}; -#else - -#define LARGE_BUFFER_SIZE 1024 * 16 // todo: fix this - -struct ZlibContext { - /* Any returned data is valid until next same-class call. - * We need to have two classes to allow inflation followed - * by many deflations without modifying the inflation */ - std::string dynamicDeflationBuffer; - std::string dynamicInflationBuffer; - char *deflationBuffer; - char *inflationBuffer; - - ZlibContext() { - deflationBuffer = (char *) malloc(LARGE_BUFFER_SIZE); - inflationBuffer = (char *) malloc(LARGE_BUFFER_SIZE); - } - - ~ZlibContext() { - free(deflationBuffer); - free(inflationBuffer); - } -}; - -struct DeflationStream { - z_stream deflationStream = {}; - - DeflationStream(int compressOptions) { - - /* Sliding inflator should be about 44kb by default, less than compressor */ - - /* Memory usage is given by 2 ^ (windowBits + 2) + 2 ^ (memLevel + 9) */ - int windowBits = -15, memLevel = 8; - - if (compressOptions == DEDICATED_COMPRESSOR_3KB) { - windowBits = -9; - memLevel = 1; - } else if (compressOptions == DEDICATED_COMPRESSOR_4KB) { - windowBits = -9; - memLevel = 2; - } else if (compressOptions == DEDICATED_COMPRESSOR_8KB) { - windowBits = -10; - memLevel = 3; - } else if (compressOptions == DEDICATED_COMPRESSOR_16KB) { - windowBits = -11; - memLevel = 4; - } else if (compressOptions == DEDICATED_COMPRESSOR_32KB) { - windowBits = -12; - memLevel = 5; - } else if (compressOptions == DEDICATED_COMPRESSOR_64KB) { - windowBits = -13; - memLevel = 6; - } else if (compressOptions == DEDICATED_COMPRESSOR_128KB) { - windowBits = -14; - memLevel = 7; - } else if (compressOptions == DEDICATED_COMPRESSOR_256KB) { - windowBits = -15; - memLevel = 8; - } - - /* DEDICATED_COMPRESSOR_256KB is the same as DEDICATED_COMPRESSOR */ - - deflateInit2(&deflationStream, 1, Z_DEFLATED, windowBits, memLevel, Z_DEFAULT_STRATEGY); - } - - /* Deflate and optionally reset. You must not deflate an empty string. */ - std::string_view deflate(ZlibContext *zlibContext, std::string_view raw, bool reset) { - /* Odd place to clear this one, fix */ - zlibContext->dynamicDeflationBuffer.clear(); - - deflationStream.next_in = (Bytef *) raw.data(); - deflationStream.avail_in = (unsigned int) raw.length(); - - /* This buffer size has to be at least 6 bytes for Z_SYNC_FLUSH to work */ - const int DEFLATE_OUTPUT_CHUNK = LARGE_BUFFER_SIZE; - - int err; - do { - deflationStream.next_out = (Bytef *) zlibContext->deflationBuffer; - deflationStream.avail_out = DEFLATE_OUTPUT_CHUNK; - - err = ::deflate(&deflationStream, Z_SYNC_FLUSH); - if (Z_OK == err && deflationStream.avail_out == 0) { - zlibContext->dynamicDeflationBuffer.append(zlibContext->deflationBuffer, DEFLATE_OUTPUT_CHUNK - deflationStream.avail_out); - continue; - } else { - break; - } - } while (true); - - /* This must not change avail_out */ - if (reset) { - deflateReset(&deflationStream); - } - - if (zlibContext->dynamicDeflationBuffer.length()) { - zlibContext->dynamicDeflationBuffer.append(zlibContext->deflationBuffer, DEFLATE_OUTPUT_CHUNK - deflationStream.avail_out); - - return std::string_view((char *) zlibContext->dynamicDeflationBuffer.data(), zlibContext->dynamicDeflationBuffer.length() - 4); - } - - /* Note: We will get an interger overflow resulting in heap buffer overflow if Z_BUF_ERROR is returned - * from passing 0 as avail_in. Therefore we must not deflate an empty string */ - return { - zlibContext->deflationBuffer, - DEFLATE_OUTPUT_CHUNK - deflationStream.avail_out - 4 - }; - } - - ~DeflationStream() { - deflateEnd(&deflationStream); - } -}; - -struct InflationStream { - z_stream inflationStream = {}; - - InflationStream() { - inflateInit2(&inflationStream, -15); - } - - ~InflationStream() { - inflateEnd(&inflationStream); - } - - /* Zero length inflates are possible and valid */ - std::optional inflate(ZlibContext *zlibContext, std::string_view compressed, size_t maxPayloadLength) { - - /* We clear this one here, could be done better */ - zlibContext->dynamicInflationBuffer.clear(); - - inflationStream.next_in = (Bytef *) compressed.data(); - inflationStream.avail_in = (unsigned int) compressed.length(); - - int err; - do { - inflationStream.next_out = (Bytef *) zlibContext->inflationBuffer; - inflationStream.avail_out = LARGE_BUFFER_SIZE; - - err = ::inflate(&inflationStream, Z_SYNC_FLUSH); - if (err == Z_OK && inflationStream.avail_out) { - break; - } - - zlibContext->dynamicInflationBuffer.append(zlibContext->inflationBuffer, LARGE_BUFFER_SIZE - inflationStream.avail_out); - - - } while (inflationStream.avail_out == 0 && zlibContext->dynamicInflationBuffer.length() <= maxPayloadLength); - - inflateReset(&inflationStream); - - if ((err != Z_BUF_ERROR && err != Z_OK) || zlibContext->dynamicInflationBuffer.length() > maxPayloadLength) { - return std::nullopt; - } - - if (zlibContext->dynamicInflationBuffer.length()) { - zlibContext->dynamicInflationBuffer.append(zlibContext->inflationBuffer, LARGE_BUFFER_SIZE - inflationStream.avail_out); - - /* Let's be strict about the max size */ - if (zlibContext->dynamicInflationBuffer.length() > maxPayloadLength) { - return std::nullopt; - } - - return std::string_view(zlibContext->dynamicInflationBuffer.data(), zlibContext->dynamicInflationBuffer.length()); - } - - /* Let's be strict about the max size */ - if ((LARGE_BUFFER_SIZE - inflationStream.avail_out) > maxPayloadLength) { - return std::nullopt; - } - - return std::string_view(zlibContext->inflationBuffer, LARGE_BUFFER_SIZE - inflationStream.avail_out); - } - -}; - -#endif - -} - -#endif // UWS_PERMESSAGEDEFLATE_H diff --git a/nectar_modules/http/httplib/uWS/TopicTree.h b/nectar_modules/http/httplib/uWS/TopicTree.h deleted file mode 100644 index 80dd180da..000000000 --- a/nectar_modules/http/httplib/uWS/TopicTree.h +++ /dev/null @@ -1,443 +0,0 @@ -/* - * Authored by Alex Hultman, 2018-2020. - * Intellectual property of third-party. - - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - - * http://www.apache.org/licenses/LICENSE-2.0 - - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef UWS_TOPICTREE_H -#define UWS_TOPICTREE_H - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace uWS { - -/* A Subscriber is an extension of a socket */ -struct Subscriber { - std::list subscriptions; - void *user; - - Subscriber(void *user) : user(user) {} -}; - -struct Topic { - /* Memory for our name */ - char *name; - size_t length; - - /* Our parent or nullptr */ - Topic *parent = nullptr; - - /* Next triggered Topic */ - bool triggered = false; - - /* Exact string matches */ - std::map children; - - /* Wildcard child */ - Topic *wildcardChild = nullptr; - - /* Terminating wildcard child */ - Topic *terminatingWildcardChild = nullptr; - - /* What we published, {inflated, deflated} */ - std::map> messages; - - std::set subs; -}; - -struct TopicTree { -private: - std::function)> cb; - - Topic *root = new Topic; - - /* Global messageId for deduplication of overlapping topics and ordering between topics */ - unsigned int messageId = 0; - - /* The triggered topics */ - Topic *triggeredTopics[64]; - int numTriggeredTopics = 0; - Subscriber *min = (Subscriber *) UINTPTR_MAX; - - /* Cull or trim unused Topic nodes from leaf to root */ - void trimTree(Topic *topic) { - repeat: - if (!topic->subs.size() && !topic->children.size() && !topic->terminatingWildcardChild && !topic->wildcardChild) { - Topic *parent = topic->parent; - - if (topic->length == 1) { - if (topic->name[0] == '#') { - parent->terminatingWildcardChild = nullptr; - } else if (topic->name[0] == '+') { - parent->wildcardChild = nullptr; - } - } - /* Erase us from our parents set (wildcards also live here) */ - parent->children.erase(std::string_view(topic->name, topic->length)); - - /* If this node is triggered, make sure to remove it from the triggered list */ - if (topic->triggered) { - Topic *tmp[64]; - int length = 0; - for (int i = 0; i < numTriggeredTopics; i++) { - if (triggeredTopics[i] != topic) { - tmp[length++] = triggeredTopics[i]; - } - } - - for (int i = 0; i < length; i++) { - triggeredTopics[i] = tmp[i]; - } - numTriggeredTopics = length; - } - - /* Free various memory for the node */ - delete [] topic->name; - delete topic; - - if (parent != root) { - topic = parent; - goto repeat; - //trimTree(parent); - } - } - } - - /* Should be getData and commit? */ - void publish(Topic *iterator, size_t start, size_t stop, std::string_view topic, std::pair message) { - - /* Iterate over all segments in given topic */ - for (; stop != std::string::npos; start = stop + 1) { - stop = topic.find('/', start); - std::string_view segment = topic.substr(start, stop - start); - - /* It is very important to disallow wildcards when publishing. - * We will not catch EVERY misuse this lazy way, but enough to hinder - * explosive recursion. - * Terminating wildcards MAY still get triggered along the way, if for - * instace the error is found late while iterating the topic segments. */ - if (segment.length() == 1) { - if (segment[0] == '+' || segment[0] == '#') { - return; - } - } - - /* Do we have a terminating wildcard child? */ - if (iterator->terminatingWildcardChild) { - iterator->terminatingWildcardChild->messages[messageId] = message; - - /* Add this topic to triggered */ - if (!iterator->terminatingWildcardChild->triggered) { - /* If we already have 64 triggered topics make sure to drain it here */ - if (numTriggeredTopics == 64) { - drain(); - } - - triggeredTopics[numTriggeredTopics++] = iterator->terminatingWildcardChild; - iterator->terminatingWildcardChild->triggered = true; - } - } - - /* Do we have a wildcard child? */ - if (iterator->wildcardChild) { - publish(iterator->wildcardChild, stop + 1, stop, topic, message); - } - - std::map::iterator it = iterator->children.find(segment); - if (it == iterator->children.end()) { - /* Stop trying to match by exact string */ - return; - } - - iterator = it->second; - } - - /* If we went all the way we matched exactly */ - iterator->messages[messageId] = message; - - /* Add this topic to triggered */ - if (!iterator->triggered) { - /* If we already have 64 triggered topics make sure to drain it here */ - if (numTriggeredTopics == 64) { - drain(); - } - - triggeredTopics[numTriggeredTopics++] = iterator; - iterator->triggered = true; - } - } - -public: - - TopicTree(std::function)> cb) { - this->cb = cb; - } - - ~TopicTree() { - delete root; - } - - void subscribe(std::string_view topic, Subscriber *subscriber) { - /* Start iterating from the root */ - Topic *iterator = root; - - /* Traverse the topic, inserting a node for every new segment separated by / */ - for (size_t start = 0, stop = 0; stop != std::string::npos; start = stop + 1) { - stop = topic.find('/', start); - std::string_view segment = topic.substr(start, stop - start); - - auto lb = iterator->children.lower_bound(segment); - - if (lb != iterator->children.end() && !(iterator->children.key_comp()(segment, lb->first))) { - iterator = lb->second; - } else { - /* Allocate and insert new node */ - Topic *newTopic = new Topic; - newTopic->parent = iterator; - newTopic->name = new char[segment.length()]; - newTopic->length = segment.length(); - newTopic->terminatingWildcardChild = nullptr; - newTopic->wildcardChild = nullptr; - memcpy(newTopic->name, segment.data(), segment.length()); - - /* For simplicity we do insert wildcards with text */ - iterator->children.insert(lb, {std::string_view(newTopic->name, segment.length()), newTopic}); - - /* Store fast lookup to wildcards */ - if (segment.length() == 1) { - /* If this segment is '+' it is a wildcard */ - if (segment[0] == '+') { - iterator->wildcardChild = newTopic; - } - /* If this segment is '#' it is a terminating wildcard */ - if (segment[0] == '#') { - iterator->terminatingWildcardChild = newTopic; - } - } - - iterator = newTopic; - } - } - - /* If this topic is triggered, drain the tree before we join */ - if (iterator->triggered) { - drain(); - } - - /* Add socket to Topic's Set */ - auto [it, inserted] = iterator->subs.insert(subscriber); - - /* Add Topic to list of subscriptions only if we weren't already subscribed */ - if (inserted) { - subscriber->subscriptions.push_back(iterator); - } - } - - void publish(std::string_view topic, std::pair message) { - publish(root, 0, 0, topic, message); - messageId++; - } - - /* Returns whether we were subscribed prior */ - bool unsubscribe(std::string_view topic, Subscriber *subscriber) { - /* Subscribers are likely to have very few subscriptions (20 or fewer) */ - if (subscriber) { - /* Lookup exact Topic ptr from string */ - Topic *iterator = root; - for (size_t start = 0, stop = 0; stop != std::string::npos; start = stop + 1) { - stop = topic.find('/', start); - std::string_view segment = topic.substr(start, stop - start); - - std::map::iterator it = iterator->children.find(segment); - if (it == iterator->children.end()) { - /* This topic does not even exist */ - return false; - } - - iterator = it->second; - } - - /* Try and remove this topic from our list */ - for (auto it = subscriber->subscriptions.begin(); it != subscriber->subscriptions.end(); it++) { - if (*it == iterator) { - /* If this topic is triggered, drain the tree before we leave */ - if (iterator->triggered) { - drain(); - } - - /* Remove topic ptr from our list */ - subscriber->subscriptions.erase(it); - - /* Remove us from Topic's subs */ - iterator->subs.erase(subscriber); - trimTree(iterator); - return true; - } - } - } - return false; - } - - /* Can be called with nullptr, ignore it then */ - void unsubscribeAll(Subscriber *subscriber, bool mayFlush = true) { - if (subscriber) { - for (Topic *topic : subscriber->subscriptions) { - - /* We do not want to flush when closing a socket, it makes no sense to do so */ - - /* If this topic is triggered, drain the tree before we leave */ - if (mayFlush && topic->triggered) { - drain(); - } - - /* Remove us from the topic's set */ - topic->subs.erase(subscriber); - trimTree(topic); - } - subscriber->subscriptions.clear(); - } - } - - /* Drain the tree by emitting what to send with every Subscriber */ - /* Better name would be commit() and making it public so that one can commit and shutdown, etc */ - void drain() { - - /* Do nothing if nothing to send */ - if (!numTriggeredTopics) { - return; - } - - /* bug fix: Filter triggered topics without subscribers */ - int numFilteredTriggeredTopics = 0; - for (int i = 0; i < numTriggeredTopics; i++) { - if (triggeredTopics[i]->subs.size()) { - triggeredTopics[numFilteredTriggeredTopics++] = triggeredTopics[i]; - } else { - /* If we no longer have any subscribers, yet still keep this Topic alive (parent), - * make sure to clear its potential messages. */ - triggeredTopics[i]->messages.clear(); - triggeredTopics[i]->triggered = false; - } - } - numTriggeredTopics = numFilteredTriggeredTopics; - - if (!numTriggeredTopics) { - return; - } - - /* bug fix: update min, as the one tracked via subscribe gets invalid as you unsubscribe */ - min = (Subscriber *)UINTPTR_MAX; - for (int i = 0; i < numTriggeredTopics; i++) { - if ((triggeredTopics[i]->subs.size()) && (min > *triggeredTopics[i]->subs.begin())) { - min = *triggeredTopics[i]->subs.begin(); - } - } - - /* Check if we really have any sockets still */ - if (min != (Subscriber *)UINTPTR_MAX) { - - /* Up to 64 triggered Topics per batch */ - std::map> intersectionCache; - - /* Loop over these here */ - std::set::iterator it[64]; - std::set::iterator end[64]; - for (int i = 0; i < numTriggeredTopics; i++) { - it[i] = triggeredTopics[i]->subs.begin(); - end[i] = triggeredTopics[i]->subs.end(); - } - - /* Empty all sets from unique subscribers */ - for (int nonEmpty = numTriggeredTopics; nonEmpty; ) { - - Subscriber *nextMin = (Subscriber *)UINTPTR_MAX; - - /* The message sets relevant for this intersection */ - std::map> *perSubscriberIntersectingTopicMessages[64]; - int numPerSubscriberIntersectingTopicMessages = 0; - - uint64_t intersection = 0; - - for (int i = 0; i < numTriggeredTopics; i++) { - if ((it[i] != end[i]) && (*it[i] == min)) { - - /* Mark this intersection */ - intersection |= ((uint64_t)1 << i); - perSubscriberIntersectingTopicMessages[numPerSubscriberIntersectingTopicMessages++] = &triggeredTopics[i]->messages; - - it[i]++; - if (it[i] == end[i]) { - nonEmpty--; - } - else { - if (nextMin > *it[i]) { - nextMin = *it[i]; - } - } - } - else { - /* We need to lower nextMin to us, in the case of min being the last in a set */ - if ((it[i] != end[i]) && (nextMin > *it[i])) { - nextMin = *it[i]; - } - } - } - - /* Generate cache for intersection */ - if (intersectionCache[intersection].first.length() == 0) { - - /* Build the union in order without duplicates */ - std::map> complete; - for (int i = 0; i < numPerSubscriberIntersectingTopicMessages; i++) { - complete.insert(perSubscriberIntersectingTopicMessages[i]->begin(), perSubscriberIntersectingTopicMessages[i]->end()); - } - - /* Create the linear cache, {inflated, deflated} */ - std::pair res; - for (auto &p : complete) { - res.first.append(p.second.first); - res.second.append(p.second.second); - } - - cb(min, intersectionCache[intersection] = std::move(res)); - } - else { - cb(min, intersectionCache[intersection]); - } - - min = nextMin; - } - - } - - /* Clear messages of triggered Topics */ - for (int i = 0; i < numTriggeredTopics; i++) { - triggeredTopics[i]->messages.clear(); - triggeredTopics[i]->triggered = false; - } - numTriggeredTopics = 0; - } -}; - -} - -#endif diff --git a/nectar_modules/http/httplib/uWS/WebSocket.h b/nectar_modules/http/httplib/uWS/WebSocket.h deleted file mode 100644 index 270fb6c29..000000000 --- a/nectar_modules/http/httplib/uWS/WebSocket.h +++ /dev/null @@ -1,234 +0,0 @@ -/* - * Authored by Alex Hultman, 2018-2020. - * Intellectual property of third-party. - - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - - * http://www.apache.org/licenses/LICENSE-2.0 - - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef UWS_WEBSOCKET_H -#define UWS_WEBSOCKET_H - -#include "WebSocketData.h" -#include "WebSocketProtocol.h" -#include "AsyncSocket.h" -#include "WebSocketContextData.h" - -#include - -namespace uWS { - -template -struct WebSocket : AsyncSocket { - template friend struct TemplatedApp; - template friend struct HttpResponse; -private: - typedef AsyncSocket Super; - - void *init(bool perMessageDeflate, int compressOptions, std::string &&backpressure) { - new (us_socket_ext(SSL, (us_socket_t *) this)) WebSocketData(perMessageDeflate, compressOptions, std::move(backpressure)); - return this; - } -public: - - /* Returns pointer to the per socket user data */ - void *getUserData() { - WebSocketData *webSocketData = (WebSocketData *) us_socket_ext(SSL, (us_socket_t *) this); - /* We just have it overallocated by sizeof type */ - return (webSocketData + 1); - } - - /* See AsyncSocket */ - using Super::getBufferedAmount; - using Super::getRemoteAddress; - using Super::getRemoteAddressAsText; - using Super::getNativeHandle; - - /* Simple, immediate close of the socket. Emits close event */ - using Super::close; - - /* Send or buffer a WebSocket frame, compressed or not. Returns false on increased user space backpressure. */ - bool send(std::string_view message, uWS::OpCode opCode = uWS::OpCode::BINARY, bool compress = false) { - WebSocketContextData *webSocketContextData = (WebSocketContextData *) us_socket_context_ext(SSL, - (us_socket_context_t *) us_socket_context(SSL, (us_socket_t *) this) - ); - - /* Skip sending and report success if we are over the limit of maxBackpressure */ - if (webSocketContextData->maxBackpressure && webSocketContextData->maxBackpressure < getBufferedAmount()) { - return true; - } - - /* Transform the message to compressed domain if requested */ - if (compress) { - WebSocketData *webSocketData = (WebSocketData *) Super::getAsyncSocketData(); - - /* Check and correct the compress hint. It is never valid to compress 0 bytes */ - if (message.length() && opCode < 3 && webSocketData->compressionStatus == WebSocketData::ENABLED) { - LoopData *loopData = Super::getLoopData(); - /* Compress using either shared or dedicated deflationStream */ - if (webSocketData->deflationStream) { - message = webSocketData->deflationStream->deflate(loopData->zlibContext, message, false); - } else { - message = loopData->deflationStream->deflate(loopData->zlibContext, message, true); - } - } else { - compress = false; - } - } - - /* Check to see if we can cork for the user */ - bool automaticallyCorked = false; - if (!Super::isCorked() && Super::canCork()) { - automaticallyCorked = true; - Super::cork(); - } - - /* Get size, alloate size, write if needed */ - size_t messageFrameSize = protocol::messageFrameSize(message.length()); - auto [sendBuffer, requiresWrite] = Super::getSendBuffer(messageFrameSize); - protocol::formatMessage(sendBuffer, message.data(), message.length(), opCode, message.length(), compress); - /* This is the slow path, when we couldn't cork for the user */ - if (requiresWrite) { - auto[written, failed] = Super::write(sendBuffer, (int) messageFrameSize); - - /* For now, we are slow here */ - free(sendBuffer); - - if (failed) { - /* Return false for failure, skipping to reset the timeout below */ - return false; - } - } - - /* Uncork here if we automatically corked for the user */ - if (automaticallyCorked) { - auto [written, failed] = Super::uncork(); - if (failed) { - return false; - } - } - - /* Every successful send resets the timeout */ - Super::timeout(webSocketContextData->idleTimeout); - - /* Return success */ - return true; - } - - /* Send websocket close frame, emit close event, send FIN if successful. - * Will not append a close reason if code is 0 or 1005. */ - void end(int code = 0, std::string_view message = {}) { - /* Check if we already called this one */ - WebSocketData *webSocketData = (WebSocketData *) us_socket_ext(SSL, (us_socket_t *) this); - if (webSocketData->isShuttingDown) { - return; - } - - /* We postpone any FIN sending to either drainage or uncorking */ - webSocketData->isShuttingDown = true; - - /* Format and send the close frame */ - static const int MAX_CLOSE_PAYLOAD = 123; - int length = (int) std::min(MAX_CLOSE_PAYLOAD, message.length()); - char closePayload[MAX_CLOSE_PAYLOAD + 2]; - int closePayloadLength = (int) protocol::formatClosePayload(closePayload, (uint16_t) code, message.data(), length); - bool ok = send(std::string_view(closePayload, closePayloadLength), OpCode::CLOSE); - - /* FIN if we are ok and not corked */ - WebSocket *webSocket = (WebSocket *) this; - if (!webSocket->isCorked()) { - if (ok) { - /* If we are not corked, and we just sent off everything, we need to FIN right here. - * In all other cases, we need to fin either if uncork was successful, or when drainage is complete. */ - webSocket->shutdown(); - } - } - - /* Emit close event */ - WebSocketContextData *webSocketContextData = (WebSocketContextData *) us_socket_context_ext(SSL, - (us_socket_context_t *) us_socket_context(SSL, (us_socket_t *) this) - ); - if (webSocketContextData->closeHandler) { - webSocketContextData->closeHandler(this, code, message); - } - - /* Make sure to unsubscribe from any pub/sub node at exit */ - webSocketContextData->topicTree.unsubscribeAll(webSocketData->subscriber, false); - delete webSocketData->subscriber; - webSocketData->subscriber = nullptr; - } - - /* Corks the response if possible. Leaves already corked socket be. */ - void cork(fu2::unique_function &&handler) { - if (!Super::isCorked() && Super::canCork()) { - Super::cork(); - handler(); - - /* There is no timeout when failing to uncork for WebSockets, - * as that is handled by idleTimeout */ - auto [written, failed] = Super::uncork(); - } else { - /* We are already corked, or can't cork so let's just call the handler */ - handler(); - } - } - - /* Subscribe to a topic according to MQTT rules and syntax */ - void subscribe(std::string_view topic) { - WebSocketContextData *webSocketContextData = (WebSocketContextData *) us_socket_context_ext(SSL, - (us_socket_context_t *) us_socket_context(SSL, (us_socket_t *) this) - ); - - /* Make us a subscriber if we aren't yet */ - WebSocketData *webSocketData = (WebSocketData *) us_socket_ext(SSL, (us_socket_t *) this); - if (!webSocketData->subscriber) { - webSocketData->subscriber = new Subscriber(this); - } - - webSocketContextData->topicTree.subscribe(topic, webSocketData->subscriber); - } - - /* Unsubscribe from a topic, returns true if we were subscribed */ - bool unsubscribe(std::string_view topic) { - WebSocketContextData *webSocketContextData = (WebSocketContextData *) us_socket_context_ext(SSL, - (us_socket_context_t *) us_socket_context(SSL, (us_socket_t *) this) - ); - - WebSocketData *webSocketData = (WebSocketData *) us_socket_ext(SSL, (us_socket_t *) this); - - return webSocketContextData->topicTree.unsubscribe(topic, webSocketData->subscriber); - } - - /* Unsubscribe from all topics you might be subscribed to */ - void unsubscribeAll() { - WebSocketContextData *webSocketContextData = (WebSocketContextData *) us_socket_context_ext(SSL, - (us_socket_context_t *) us_socket_context(SSL, (us_socket_t *) this) - ); - - WebSocketData *webSocketData = (WebSocketData *) us_socket_ext(SSL, (us_socket_t *) this); - - webSocketContextData->topicTree.unsubscribeAll(webSocketData->subscriber); - } - - /* Publish a message to a topic according to MQTT rules and syntax */ - void publish(std::string_view topic, std::string_view message, OpCode opCode = OpCode::TEXT, bool compress = false) { - WebSocketContextData *webSocketContextData = (WebSocketContextData *) us_socket_context_ext(SSL, - (us_socket_context_t *) us_socket_context(SSL, (us_socket_t *) this) - ); - /* Is the same as publishing per websocket context */ - webSocketContextData->publish(topic, message, opCode, compress); - } -}; - -} - -#endif // UWS_WEBSOCKET_H diff --git a/nectar_modules/http/httplib/uWS/WebSocketContextData.h b/nectar_modules/http/httplib/uWS/WebSocketContextData.h deleted file mode 100644 index e5a9b6008..000000000 --- a/nectar_modules/http/httplib/uWS/WebSocketContextData.h +++ /dev/null @@ -1,219 +0,0 @@ -/* - * Authored by Alex Hultman, 2018-2020. - * Intellectual property of third-party. - - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - - * http://www.apache.org/licenses/LICENSE-2.0 - - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef UWS_WEBSOCKETCONTEXTDATA_H -#define UWS_WEBSOCKETCONTEXTDATA_H - -#include "f2/function2.hpp" -#include - -#include "WebSocketProtocol.h" -#include "TopicTree.h" -#include "WebSocketData.h" - -namespace uWS { - -template struct WebSocket; - -/* todo: this looks identical to WebSocketBehavior, why not just std::move that entire thing in? */ - -template -struct WebSocketContextData { -private: - /* Used for prepending unframed messages when using dedicated compressors */ - struct MessageMetadata { - unsigned int length; - OpCode opCode; - bool compress; - }; - -public: - /* The callbacks for this context */ - fu2::unique_function *)> openHandler = nullptr; - fu2::unique_function *, std::string_view, uWS::OpCode)> messageHandler = nullptr; - fu2::unique_function *)> drainHandler = nullptr; - fu2::unique_function *, int, std::string_view)> closeHandler = nullptr; - /* Todo: these should take message also; breaking change for v0.18 */ - fu2::unique_function *)> pingHandler = nullptr; - fu2::unique_function *)> pongHandler = nullptr; - - /* Settings for this context */ - size_t maxPayloadLength = 0; - int idleTimeout = 0; - - /* We do need these for async upgrade */ - int compression; - - /* There needs to be a maxBackpressure which will force close everything over that limit */ - size_t maxBackpressure = 0; - - /* Each websocket context has a topic tree for pub/sub */ - TopicTree topicTree; - - ~WebSocketContextData() { - /* We must unregister any loop post handler here */ - Loop::get()->removePostHandler(this); - Loop::get()->removePreHandler(this); - } - - WebSocketContextData() : topicTree([this](Subscriber *s, std::pair data) -> int { - /* We rely on writing to regular asyncSockets */ - auto *asyncSocket = (AsyncSocket *) s->user; - - /* Check if we now have too much backpressure (todo: don't buffer up before check) */ - if (!maxBackpressure || (unsigned int) asyncSocket->getBufferedAmount() < maxBackpressure) { - /* Pick uncompressed data track */ - std::string_view selectedData = data.first; - - /* Are we using compression? Fine, pick the compressed data track */ - WebSocketData *webSocketData = (WebSocketData *) asyncSocket->getAsyncSocketData(); - if (webSocketData->compressionStatus != WebSocketData::CompressionStatus::DISABLED) { - - /* This is used for both shared and dedicated paths */ - selectedData = data.second; - - /* However, dedicated compression has its own path */ - if (compression != SHARED_COMPRESSOR) { - - WebSocket *ws = (WebSocket *) asyncSocket; - - /* We need to handle being corked, and corking here */ - bool needsUncorking = false; - if (!ws->isCorked() && ws->canCork()) { - asyncSocket->cork(); - needsUncorking = true; - } - - while (selectedData.length()) { - /* Interpret the data like so, because this is how we shoved it in */ - MessageMetadata mm; - memcpy((char *) &mm, selectedData.data(), sizeof(MessageMetadata)); - std::string_view unframedMessage(selectedData.data() + sizeof(MessageMetadata), mm.length); - - /* Skip this message if our backpressure is too high */ - if (maxBackpressure && ws->getBufferedAmount() > maxBackpressure) { - break; - } - - /* Here we perform the actual compression and framing */ - ws->send(unframedMessage, mm.opCode, mm.compress); - - /* Advance until empty */ - selectedData.remove_prefix(sizeof(MessageMetadata) + mm.length); - } - - /* Here we need to uncork or keep it as was */ - if (needsUncorking) { - asyncSocket->uncork(); - } - - /* See below */ - return 0; - } - } - - /* Note: this assumes we are not corked, as corking will swallow things and fail later on */ - auto [written, failed] = asyncSocket->write(selectedData.data(), (int) selectedData.length()); - if (!failed) { - asyncSocket->timeout(this->idleTimeout); - } - - /* Failing here must not immediately close the socket, as that could result in stack overflow, - * iterator invalidation and other TopicTree::drain bugs. We may shutdown the reading side of the socket, - * causing next iteration to error-close the socket from that context instead, if we want to */ - } - - /* If we have too much backpressure, simply skip sending from here */ - - /* Reserved, unused */ - return 0; - }) { - /* We empty for both pre and post just to make sure */ - Loop::get()->addPostHandler(this, [this](Loop *loop) { - /* Commit pub/sub batches every loop iteration */ - topicTree.drain(); - }); - - Loop::get()->addPreHandler(this, [this](Loop *loop) { - /* Commit pub/sub batches every loop iteration */ - topicTree.drain(); - }); - } - - /* Helper for topictree publish, common path from app and ws */ - void publish(std::string_view topic, std::string_view message, OpCode opCode, bool compress) { - /* We frame the message right here and only pass raw bytes to the pub/subber */ - char *dst = (char *) malloc(protocol::messageFrameSize(message.size())); - size_t dst_length = protocol::formatMessage(dst, message.data(), message.length(), opCode, message.length(), false); - - /* If compression is disabled */ - if (compression == DISABLED) { - /* Leave second field empty as nobody will ever read it */ - topicTree.publish(topic, {std::string_view(dst, dst_length), {}}); - } else { - if (compress) { - /* Shared compression mode publishes compressed, framed data */ - if (compression == SHARED_COMPRESSOR) { - /* Loop data holds shared compressor */ - LoopData *loopData = (LoopData *) us_loop_ext((us_loop_t *) Loop::get()); - - /* Compress it */ - std::string_view compressedMessage = loopData->deflationStream->deflate(loopData->zlibContext, message, true); - - /* Frame it */ - char *dst_compressed = (char *) malloc(protocol::messageFrameSize(compressedMessage.size())); - size_t dst_compressed_length = protocol::formatMessage(dst_compressed, compressedMessage.data(), compressedMessage.length(), opCode, compressedMessage.length(), true); - - /* Always publish the shortest one in any case */ - topicTree.publish(topic, {std::string_view(dst, dst_length), dst_compressed_length >= dst_length ? std::string_view(dst, dst_length) : std::string_view(dst_compressed, dst_compressed_length)}); - - /* We don't care for allocation here */ - ::free(dst_compressed); - } else { - /* Dedicated compression mode publishes metadata + unframed uncompressed data */ - char *dst_compressed = (char *) malloc(message.length() + sizeof(MessageMetadata)); - - MessageMetadata mm = { - (unsigned int) message.length(), - opCode, - compress - }; - - memcpy(dst_compressed, (char *) &mm, sizeof(MessageMetadata)); - memcpy(dst_compressed + sizeof(MessageMetadata), message.data(), message.length()); - - /* Interpretation of compressed data depends on what compressor we use */ - topicTree.publish(topic, { - std::string_view(dst, dst_length), - std::string_view(dst_compressed, message.length() + sizeof(MessageMetadata)) - }); - - ::free(dst_compressed); - } - } else { - /* If not compressing, put same message on both tracks */ - topicTree.publish(topic, {std::string_view(dst, dst_length), std::string_view(dst, dst_length)}); - } - } - - ::free(dst); - } -}; - -} - -#endif // UWS_WEBSOCKETCONTEXTDATA_H diff --git a/nectar_modules/http/httplib/uWS/WebSocketExtensions.h b/nectar_modules/http/httplib/uWS/WebSocketExtensions.h deleted file mode 100644 index 79994ee57..000000000 --- a/nectar_modules/http/httplib/uWS/WebSocketExtensions.h +++ /dev/null @@ -1,169 +0,0 @@ -/* - * Authored by Alex Hultman, 2018-2020. - * Intellectual property of third-party. - - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - - * http://www.apache.org/licenses/LICENSE-2.0 - - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef UWS_WEBSOCKETEXTENSIONS_H -#define UWS_WEBSOCKETEXTENSIONS_H - -#include -#include - -namespace uWS { - -enum Options : unsigned int { - NO_OPTIONS = 0, - PERMESSAGE_DEFLATE = 1, - SERVER_NO_CONTEXT_TAKEOVER = 2, // remove this - CLIENT_NO_CONTEXT_TAKEOVER = 4, // remove this - NO_DELAY = 8, - SLIDING_DEFLATE_WINDOW = 16 -}; - -enum ExtensionTokens { - TOK_PERMESSAGE_DEFLATE = 1838, - TOK_SERVER_NO_CONTEXT_TAKEOVER = 2807, - TOK_CLIENT_NO_CONTEXT_TAKEOVER = 2783, - TOK_SERVER_MAX_WINDOW_BITS = 2372, - TOK_CLIENT_MAX_WINDOW_BITS = 2348 -}; - -struct ExtensionsParser { -private: - int *lastInteger = nullptr; - -public: - bool perMessageDeflate = false; - bool serverNoContextTakeover = false; - bool clientNoContextTakeover = false; - int serverMaxWindowBits = 0; - int clientMaxWindowBits = 0; - - int getToken(const char *&in, const char *stop) { - while (in != stop && !isalnum(*in)) { - in++; - } - - /* Don't care more than this for now */ - static_assert(SHRT_MIN > INT_MIN, "Integer overflow fix is invalid for this platform, report this as a bug!"); - - int hashedToken = 0; - while (in != stop && (isalnum(*in) || *in == '-' || *in == '_')) { - if (isdigit(*in)) { - /* This check is a quick and incorrect fix for integer overflow - * in oss-fuzz but we don't care as it doesn't matter either way */ - if (hashedToken > SHRT_MIN && hashedToken < SHRT_MAX) { - hashedToken = hashedToken * 10 - (*in - '0'); - } - } else { - hashedToken += *in; - } - in++; - } - return hashedToken; - } - - ExtensionsParser(const char *data, size_t length) { - const char *stop = data + length; - int token = 1; - for (; token && token != TOK_PERMESSAGE_DEFLATE; token = getToken(data, stop)); - - perMessageDeflate = (token == TOK_PERMESSAGE_DEFLATE); - while ((token = getToken(data, stop))) { - switch (token) { - case TOK_PERMESSAGE_DEFLATE: - return; - case TOK_SERVER_NO_CONTEXT_TAKEOVER: - serverNoContextTakeover = true; - break; - case TOK_CLIENT_NO_CONTEXT_TAKEOVER: - clientNoContextTakeover = true; - break; - case TOK_SERVER_MAX_WINDOW_BITS: - serverMaxWindowBits = 1; - lastInteger = &serverMaxWindowBits; - break; - case TOK_CLIENT_MAX_WINDOW_BITS: - clientMaxWindowBits = 1; - lastInteger = &clientMaxWindowBits; - break; - default: - if (token < 0 && lastInteger) { - *lastInteger = -token; - } - break; - } - } - } -}; - -template -struct ExtensionsNegotiator { -protected: - int options; - -public: - ExtensionsNegotiator(int wantedOptions) { - options = wantedOptions; - } - - std::string generateOffer() { - std::string extensionsOffer; - if (options & Options::PERMESSAGE_DEFLATE) { - extensionsOffer += "permessage-deflate"; - - if (options & Options::CLIENT_NO_CONTEXT_TAKEOVER) { - extensionsOffer += "; client_no_context_takeover"; - } - - /* It is questionable sending this improves anything */ - /*if (options & Options::SERVER_NO_CONTEXT_TAKEOVER) { - extensionsOffer += "; server_no_context_takeover"; - }*/ - } - - return extensionsOffer; - } - - void readOffer(std::string_view offer) { - if (isServer) { - ExtensionsParser extensionsParser(offer.data(), offer.length()); - if ((options & PERMESSAGE_DEFLATE) && extensionsParser.perMessageDeflate) { - if (extensionsParser.clientNoContextTakeover || (options & CLIENT_NO_CONTEXT_TAKEOVER)) { - options |= CLIENT_NO_CONTEXT_TAKEOVER; - } - - /* We leave this option for us to read even if the client did not send it */ - if (extensionsParser.serverNoContextTakeover) { - options |= SERVER_NO_CONTEXT_TAKEOVER; - }/* else { - options &= ~SERVER_NO_CONTEXT_TAKEOVER; - }*/ - } else { - options &= ~PERMESSAGE_DEFLATE; - } - } else { - // todo! - } - } - - int getNegotiatedOptions() { - return options; - } -}; - -} - -#endif // UWS_WEBSOCKETEXTENSIONS_H diff --git a/nectar_modules/http/httplib/uWS/f2/LICENSE.txt b/nectar_modules/http/httplib/uWS/f2/LICENSE.txt deleted file mode 100644 index 36b7cd93c..000000000 --- a/nectar_modules/http/httplib/uWS/f2/LICENSE.txt +++ /dev/null @@ -1,23 +0,0 @@ -Boost Software License - Version 1.0 - August 17th, 2003 - -Permission is hereby granted, free of charge, to any person or organization -obtaining a copy of the software and accompanying documentation covered by -this license (the "Software") to use, reproduce, display, distribute, -execute, and transmit the Software, and to prepare derivative works of the -Software, and to permit third-parties to whom the Software is furnished to -do so, all subject to the following: - -The copyright notices in the Software and this entire statement, including -the above license grant, this restriction and the following disclaimer, -must be included in all copies of the Software, in whole or in part, and -all derivative works of the Software, unless such copies or derivative -works are solely in the form of machine-executable object code generated by -a source language processor. - -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, TITLE AND NON-INFRINGEMENT. IN NO EVENT -SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE -FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. diff --git a/nectar_modules/http/httplib/uWS/f2/function2.hpp b/nectar_modules/http/httplib/uWS/f2/function2.hpp deleted file mode 100644 index dc81c7d60..000000000 --- a/nectar_modules/http/httplib/uWS/f2/function2.hpp +++ /dev/null @@ -1,1764 +0,0 @@ - -// Copyright 2015-2019 Denis Blank -// Distributed under the Boost Software License, Version 1.0 -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#ifndef FU2_INCLUDED_FUNCTION2_HPP_ -#define FU2_INCLUDED_FUNCTION2_HPP_ - -#include -#include -#include -#include -#include -#include -#include - -// Defines: -// - FU2_HAS_DISABLED_EXCEPTIONS -#if defined(FU2_WITH_DISABLED_EXCEPTIONS) || \ - defined(FU2_MACRO_DISABLE_EXCEPTIONS) -#define FU2_HAS_DISABLED_EXCEPTIONS -#else // FU2_WITH_DISABLED_EXCEPTIONS -#if defined(_MSC_VER) -#if !defined(_HAS_EXCEPTIONS) || (_HAS_EXCEPTIONS == 0) -#define FU2_HAS_DISABLED_EXCEPTIONS -#endif -#elif defined(__clang__) -#if !(__EXCEPTIONS && __has_feature(cxx_exceptions)) -#define FU2_HAS_DISABLED_EXCEPTIONS -#endif -#elif defined(__GNUC__) -#if !__EXCEPTIONS -#define FU2_HAS_DISABLED_EXCEPTIONS -#endif -#endif -#endif // FU2_WITH_DISABLED_EXCEPTIONS -// - FU2_HAS_NO_FUNCTIONAL_HEADER -#if !defined(FU2_WITH_NO_FUNCTIONAL_HEADER) && \ - !defined(FU2_NO_FUNCTIONAL_HEADER) && \ - !defined(FU2_HAS_DISABLED_EXCEPTIONS) -#include -#else -#define FU2_HAS_NO_FUNCTIONAL_HEADER -#endif -// - FU2_HAS_CXX17_NOEXCEPT_FUNCTION_TYPE -#if defined(FU2_WITH_CXX17_NOEXCEPT_FUNCTION_TYPE) -#define FU2_HAS_CXX17_NOEXCEPT_FUNCTION_TYPE -#else // FU2_WITH_CXX17_NOEXCEPT_FUNCTION_TYPE -#if defined(_MSC_VER) -#if defined(_HAS_CXX17) && _HAS_CXX17 -#define FU2_HAS_CXX17_NOEXCEPT_FUNCTION_TYPE -#endif -#elif defined(__cpp_noexcept_function_type) -#define FU2_HAS_CXX17_NOEXCEPT_FUNCTION_TYPE -#elif defined(__cplusplus) && (__cplusplus >= 201703L) -#define FU2_HAS_CXX17_NOEXCEPT_FUNCTION_TYPE -#endif -#endif // FU2_WITH_CXX17_NOEXCEPT_FUNCTION_TYPE - -// - FU2_HAS_NO_EMPTY_PROPAGATION -#if defined(FU2_WITH_NO_EMPTY_PROPAGATION) -#define FU2_HAS_NO_EMPTY_PROPAGATION -#endif // FU2_WITH_NO_EMPTY_PROPAGATION - -#if !defined(FU2_HAS_DISABLED_EXCEPTIONS) -#include -#endif - -/// Hint for the compiler that this point should be unreachable -#if defined(_MSC_VER) -// NOLINTNEXTLINE(cppcoreguidelines-macro-usage) -#define FU2_DETAIL_UNREACHABLE_INTRINSIC() __assume(false) -#elif defined(__GNUC__) -// NOLINTNEXTLINE(cppcoreguidelines-macro-usage) -#define FU2_DETAIL_UNREACHABLE_INTRINSIC() __builtin_unreachable() -#elif defined(__has_builtin) && __has_builtin(__builtin_unreachable) -// NOLINTNEXTLINE(cppcoreguidelines-macro-usage) -#define FU2_DETAIL_UNREACHABLE_INTRINSIC() __builtin_unreachable() -#else -// NOLINTNEXTLINE(cppcoreguidelines-macro-usage) -#define FU2_DETAIL_UNREACHABLE_INTRINSIC() abort() -#endif - -/// Causes the application to exit abnormally -#if defined(_MSC_VER) -// NOLINTNEXTLINE(cppcoreguidelines-macro-usage) -#define FU2_DETAIL_TRAP() __debugbreak() -#elif defined(__GNUC__) -// NOLINTNEXTLINE(cppcoreguidelines-macro-usage) -#define FU2_DETAIL_TRAP() __builtin_trap() -#elif defined(__has_builtin) && __has_builtin(__builtin_trap) -// NOLINTNEXTLINE(cppcoreguidelines-macro-usage) -#define FU2_DETAIL_TRAP() __builtin_trap() -#else -// NOLINTNEXTLINE(cppcoreguidelines-macro-usage) -#define FU2_DETAIL_TRAP() *(volatile int*)0x11 = 0 -#endif - -#ifndef NDEBUG -// NOLINTNEXTLINE(cppcoreguidelines-macro-usage) -#define FU2_DETAIL_UNREACHABLE() ::fu2::detail::unreachable_debug() -#else -// NOLINTNEXTLINE(cppcoreguidelines-macro-usage) -#define FU2_DETAIL_UNREACHABLE() FU2_DETAIL_UNREACHABLE_INTRINSIC() -#endif - -namespace fu2 { -inline namespace abi_400 { -namespace detail { -template -class function; - -template -struct identity {}; - -// Equivalent to C++17's std::void_t which targets a bug in GCC, -// that prevents correct SFINAE behavior. -// See http://stackoverflow.com/questions/35753920 for details. -template -struct deduce_to_void : std::common_type {}; - -template -using void_t = typename deduce_to_void::type; - -template -using unrefcv_t = std::remove_cv_t>; - -// Copy enabler helper class -template -struct copyable {}; -template <> -struct copyable { - copyable() = default; - ~copyable() = default; - copyable(copyable const&) = delete; - copyable(copyable&&) = default; - copyable& operator=(copyable const&) = delete; - copyable& operator=(copyable&&) = default; -}; - -/// Configuration trait to configure the function_base class. -template -struct config { - // Is true if the function is owning. - static constexpr auto const is_owning = Owning; - - // Is true if the function is copyable. - static constexpr auto const is_copyable = Copyable; - - // The internal capacity of the function - // used in small functor optimization. - // The object shall expose the real capacity through Capacity::capacity - // and the intended alignment through Capacity::alignment. - using capacity = Capacity; -}; - -/// A config which isn't compatible to other configs -template -struct property { - // Is true when the function throws an exception on empty invocation. - static constexpr auto const is_throwing = Throws; - - // Is true when the function throws an exception on empty invocation. - static constexpr auto const is_strong_exception_guaranteed = - HasStrongExceptGuarantee; -}; - -#ifndef NDEBUG -[[noreturn]] inline void unreachable_debug() { - FU2_DETAIL_TRAP(); - std::abort(); -} -#endif - -/// Provides utilities for invocing callable objects -namespace invocation { -/// Invokes the given callable object with the given arguments -template -constexpr auto invoke(Callable&& callable, Args&&... args) noexcept( - noexcept(std::forward(callable)(std::forward(args)...))) - -> decltype(std::forward(callable)(std::forward(args)...)) { - - return std::forward(callable)(std::forward(args)...); -} -/// Invokes the given member function pointer by reference -template -constexpr auto invoke(Type T::*member, Self&& self, Args&&... args) noexcept( - noexcept((std::forward(self).*member)(std::forward(args)...))) - -> decltype((std::forward(self).* - member)(std::forward(args)...)) { - return (std::forward(self).*member)(std::forward(args)...); -} -/// Invokes the given member function pointer by pointer -template -constexpr auto invoke(Type T::*member, Self&& self, Args&&... args) noexcept( - noexcept((std::forward(self)->*member)(std::forward(args)...))) - -> decltype( - (std::forward(self)->*member)(std::forward(args)...)) { - return (std::forward(self)->*member)(std::forward(args)...); -} -/// Invokes the given pointer to a scalar member by reference -template -constexpr auto -invoke(Type T::*member, - Self&& self) noexcept(noexcept(std::forward(self).*member)) - -> decltype(std::forward(self).*member) { - return (std::forward(self).*member); -} -/// Invokes the given pointer to a scalar member by pointer -template -constexpr auto -invoke(Type T::*member, - Self&& self) noexcept(noexcept(std::forward(self)->*member)) - -> decltype(std::forward(self)->*member) { - return std::forward(self)->*member; -} - -/// Deduces to a true type if the callable object can be invoked with -/// the given arguments. -/// We don't use invoke here because MSVC can't evaluate the nested expression -/// SFINAE here. -template -struct can_invoke : std::false_type {}; -template -struct can_invoke, - decltype((void)std::declval()(std::declval()...))> - : std::true_type {}; -template -struct can_invoke, - decltype((void)((std::declval().*std::declval())( - std::declval()...)))> : std::true_type {}; -template -struct can_invoke, - decltype( - (void)((std::declval().*std::declval())( - std::declval()...)))> : std::true_type {}; -template -struct can_invoke, - decltype( - (void)((std::declval()->*std::declval())( - std::declval()...)))> : std::true_type {}; -template -struct can_invoke, - decltype((void)(std::declval().*std::declval()))> - : std::true_type {}; -template -struct can_invoke, - decltype( - (void)(std::declval().*std::declval()))> - : std::true_type {}; -template -struct can_invoke, - decltype( - (void)(std::declval()->*std::declval()))> - : std::true_type {}; - -template -struct is_noexcept_correct : std::true_type {}; -template -struct is_noexcept_correct> - : std::integral_constant(), - std::declval()...))> { -}; -} // end namespace invocation - -namespace overloading { -template -struct overload_impl; -template -struct overload_impl : Current, - overload_impl { - explicit overload_impl(Current current, Next next, Rest... rest) - : Current(std::move(current)), overload_impl( - std::move(next), std::move(rest)...) { - } - - using Current::operator(); - using overload_impl::operator(); -}; -template -struct overload_impl : Current { - explicit overload_impl(Current current) : Current(std::move(current)) { - } - - using Current::operator(); -}; - -template -constexpr auto overload(T&&... callables) { - return overload_impl...>{std::forward(callables)...}; -} -} // namespace overloading - -/// Declares the namespace which provides the functionality to work with a -/// type-erased object. -namespace type_erasure { -/// Specialization to work with addresses of callable objects -template -struct address_taker { - template - static void* take(O&& obj) { - return std::addressof(obj); - } - static T& restore(void* ptr) { - return *static_cast(ptr); - } - static T const& restore(void const* ptr) { - return *static_cast(ptr); - } - static T volatile& restore(void volatile* ptr) { - return *static_cast(ptr); - } - static T const volatile& restore(void const volatile* ptr) { - return *static_cast(ptr); - } -}; -/// Specialization to work with addresses of raw function pointers -template -struct address_taker::value>> { - template - static void* take(O&& obj) { - return reinterpret_cast(obj); - } - template - static T restore(O ptr) { - return reinterpret_cast(const_cast(ptr)); - } -}; - -template -struct box_factory; -/// Store the allocator inside the box -template -struct box : private Allocator { - friend box_factory; - - T value_; - - explicit box(T value, Allocator allocator) - : Allocator(std::move(allocator)), value_(std::move(value)) { - } - - box(box&&) = default; - box(box const&) = default; - box& operator=(box&&) = default; - box& operator=(box const&) = default; - ~box() = default; -}; -template -struct box : private Allocator { - friend box_factory; - - T value_; - - explicit box(T value, Allocator allocator) - : Allocator(std::move(allocator)), value_(std::move(value)) { - } - - box(box&&) = default; - box(box const&) = delete; - box& operator=(box&&) = default; - box& operator=(box const&) = delete; - ~box() = default; -}; - -template -struct box_factory> { - using real_allocator = - typename std::allocator_traits>:: - template rebind_alloc>; - - /// Allocates space through the boxed allocator - static box* - box_allocate(box const* me) { - real_allocator allocator(*static_cast(me)); - - return static_cast*>( - std::allocator_traits::allocate(allocator, 1U)); - } - - /// Destroys the box through the given allocator - static void box_deallocate(box* me) { - real_allocator allocator(*static_cast(me)); - - me->~box(); - std::allocator_traits::deallocate(allocator, me, 1U); - } -}; - -/// Creates a box containing the given value and allocator -template -auto make_box(std::integral_constant, T&& value, - Allocator&& allocator) { - return box, std::decay_t>( - std::forward(value), std::forward(allocator)); -} - -template -struct is_box : std::false_type {}; -template -struct is_box> : std::true_type {}; - -/// Provides access to the pointer to a heal allocated erased object -/// as well to the inplace storage. -union data_accessor { - data_accessor() = default; - explicit constexpr data_accessor(std::nullptr_t) noexcept : ptr_(nullptr) { - } - explicit constexpr data_accessor(void* ptr) noexcept : ptr_(ptr) { - } - - /// The pointer we use if the object is on the heap - void* ptr_; - /// The first field of the inplace storage - std::size_t inplace_storage_; -}; - -/// See opcode::op_fetch_empty -constexpr void write_empty(data_accessor* accessor, bool empty) noexcept { - accessor->inplace_storage_ = std::size_t(empty); -} - -template -using transfer_const_t = - std::conditional_t>::value, - std::add_const_t, To>; -template -using transfer_volatile_t = - std::conditional_t>::value, - std::add_volatile_t, To>; - -/// The retriever when the object is allocated inplace -template -constexpr auto retrieve(std::true_type /*is_inplace*/, Accessor from, - std::size_t from_capacity) { - using type = transfer_const_t>*; - - /// Process the command by using the data inside the internal capacity - auto storage = &(from->inplace_storage_); - auto inplace = const_cast(static_cast(storage)); - return type(std::align(alignof(T), sizeof(T), inplace, from_capacity)); -} - -/// The retriever which is used when the object is allocated -/// through the allocator -template -constexpr auto retrieve(std::false_type /*is_inplace*/, Accessor from, - std::size_t /*from_capacity*/) { - - return from->ptr_; -} - -namespace invocation_table { -#if !defined(FU2_HAS_DISABLED_EXCEPTIONS) -#if defined(FU2_HAS_NO_FUNCTIONAL_HEADER) -struct bad_function_call : std::exception { - bad_function_call() noexcept { - } - - char const* what() const noexcept override { - return "bad function call"; - } -}; -#else -using std::bad_function_call; -#endif -#endif - -#ifdef FU2_HAS_CXX17_NOEXCEPT_FUNCTION_TYPE -#define FU2_DETAIL_EXPAND_QUALIFIERS_NOEXCEPT(F) \ - F(, , noexcept, , &) \ - F(const, , noexcept, , &) \ - F(, volatile, noexcept, , &) \ - F(const, volatile, noexcept, , &) \ - F(, , noexcept, &, &) \ - F(const, , noexcept, &, &) \ - F(, volatile, noexcept, &, &) \ - F(const, volatile, noexcept, &, &) \ - F(, , noexcept, &&, &&) \ - F(const, , noexcept, &&, &&) \ - F(, volatile, noexcept, &&, &&) \ - F(const, volatile, noexcept, &&, &&) -#define FU2_DETAIL_EXPAND_CV_NOEXCEPT(F) \ - F(, , noexcept) \ - F(const, , noexcept) \ - F(, volatile, noexcept) \ - F(const, volatile, noexcept) -#else // FU2_HAS_CXX17_NOEXCEPT_FUNCTION_TYPE -#define FU2_DETAIL_EXPAND_QUALIFIERS_NOEXCEPT(F) -#define FU2_DETAIL_EXPAND_CV_NOEXCEPT(F) -#endif // FU2_HAS_CXX17_NOEXCEPT_FUNCTION_TYPE - -#define FU2_DETAIL_EXPAND_QUALIFIERS(F) \ - F(, , , , &) \ - F(const, , , , &) \ - F(, volatile, , , &) \ - F(const, volatile, , , &) \ - F(, , , &, &) \ - F(const, , , &, &) \ - F(, volatile, , &, &) \ - F(const, volatile, , &, &) \ - F(, , , &&, &&) \ - F(const, , , &&, &&) \ - F(, volatile, , &&, &&) \ - F(const, volatile, , &&, &&) \ - FU2_DETAIL_EXPAND_QUALIFIERS_NOEXCEPT(F) -#define FU2_DETAIL_EXPAND_CV(F) \ - F(, , ) \ - F(const, , ) \ - F(, volatile, ) \ - F(const, volatile, ) \ - FU2_DETAIL_EXPAND_CV_NOEXCEPT(F) - -/// If the function is qualified as noexcept, the call will never throw -template -[[noreturn]] void throw_or_abortnoexcept( - std::integral_constant /*is_throwing*/) noexcept { - std::abort(); -} -/// Calls std::abort on empty function calls -[[noreturn]] inline void -throw_or_abort(std::false_type /*is_throwing*/) noexcept { - std::abort(); -} -/// Throws bad_function_call on empty funciton calls -[[noreturn]] inline void throw_or_abort(std::true_type /*is_throwing*/) { -#ifdef FU2_HAS_DISABLED_EXCEPTIONS - throw_or_abort(std::false_type{}); -#else - throw bad_function_call{}; -#endif -} - -template -struct function_trait; - -using is_noexcept_ = std::false_type; -using is_noexcept_noexcept = std::true_type; - -#define FU2_DEFINE_FUNCTION_TRAIT(CONST, VOLATILE, NOEXCEPT, OVL_REF, REF) \ - template \ - struct function_trait { \ - using pointer_type = Ret (*)(data_accessor CONST VOLATILE*, \ - std::size_t capacity, Args...); \ - template \ - struct internal_invoker { \ - static Ret invoke(data_accessor CONST VOLATILE* data, \ - std::size_t capacity, Args... args) NOEXCEPT { \ - auto obj = retrieve(std::integral_constant{}, \ - data, capacity); \ - auto box = static_cast(obj); \ - return invocation::invoke( \ - static_castvalue_)> CONST VOLATILE \ - REF>(box->value_), \ - std::forward(args)...); \ - } \ - }; \ - \ - template \ - struct view_invoker { \ - static Ret invoke(data_accessor CONST VOLATILE* data, std::size_t, \ - Args... args) NOEXCEPT { \ - \ - auto ptr = static_cast(data->ptr_); \ - return invocation::invoke(address_taker::restore(ptr), \ - std::forward(args)...); \ - } \ - }; \ - \ - template \ - using callable = T CONST VOLATILE REF; \ - \ - using arguments = identity; \ - \ - using is_noexcept = is_noexcept_##NOEXCEPT; \ - \ - template \ - struct empty_invoker { \ - static Ret invoke(data_accessor CONST VOLATILE* /*data*/, \ - std::size_t /*capacity*/, Args... /*args*/) NOEXCEPT { \ - throw_or_abort##NOEXCEPT(std::integral_constant{}); \ - } \ - }; \ - }; - -FU2_DETAIL_EXPAND_QUALIFIERS(FU2_DEFINE_FUNCTION_TRAIT) -#undef FU2_DEFINE_FUNCTION_TRAIT - -/// Deduces to the function pointer to the given signature -template -using function_pointer_of = typename function_trait::pointer_type; - -template -struct invoke_table; - -/// We optimize the vtable_t in case there is a single function overload -template -struct invoke_table { - using type = function_pointer_of; - - /// Return the function pointer itself - template - static constexpr auto fetch(type pointer) noexcept { - static_assert(Index == 0U, "The index should be 0 here!"); - return pointer; - } - - /// Returns the thunk of an single overloaded callable - template - static constexpr type get_invocation_table_of() noexcept { - return &function_trait::template internal_invoker::invoke; - } - /// Returns the thunk of an single overloaded callable - template - static constexpr type get_invocation_view_table_of() noexcept { - return &function_trait::template view_invoker::invoke; - } - /// Returns the thunk of an empty single overloaded callable - template - static constexpr type get_empty_invocation_table() noexcept { - return &function_trait::template empty_invoker::invoke; - } -}; -/// We generate a table in case of multiple function overloads -template -struct invoke_table { - using type = - std::tuple, function_pointer_of, - function_pointer_of...> const*; - - /// Return the function pointer at the particular index - template - static constexpr auto fetch(type table) noexcept { - return std::get(*table); - } - - /// The invocation vtable for a present object - template - struct invocation_vtable : public std::tuple, - function_pointer_of, - function_pointer_of...> { - constexpr invocation_vtable() noexcept - : std::tuple, function_pointer_of, - function_pointer_of...>(std::make_tuple( - &function_trait::template internal_invoker< - T, IsInplace>::invoke, - &function_trait::template internal_invoker< - T, IsInplace>::invoke, - &function_trait::template internal_invoker< - T, IsInplace>::invoke...)) { - } - }; - - /// Returns the thunk of an multi overloaded callable - template - static type get_invocation_table_of() noexcept { - static invocation_vtable const table; - return &table; - } - - /// The invocation vtable for a present object - template - struct invocation_view_vtable - : public std::tuple, - function_pointer_of, - function_pointer_of...> { - constexpr invocation_view_vtable() noexcept - : std::tuple, function_pointer_of, - function_pointer_of...>(std::make_tuple( - &function_trait::template view_invoker::invoke, - &function_trait::template view_invoker::invoke, - &function_trait::template view_invoker::invoke...)) { - } - }; - - /// Returns the thunk of an multi overloaded callable - template - static type get_invocation_view_table_of() noexcept { - static invocation_view_vtable const table; - return &table; - } - - /// The invocation table for an empty wrapper - template - struct empty_vtable : public std::tuple, - function_pointer_of, - function_pointer_of...> { - constexpr empty_vtable() noexcept - : std::tuple, function_pointer_of, - function_pointer_of...>( - std::make_tuple(&function_trait::template empty_invoker< - IsThrowing>::invoke, - &function_trait::template empty_invoker< - IsThrowing>::invoke, - &function_trait::template empty_invoker< - IsThrowing>::invoke...)) { - } - }; - - /// Returns the thunk of an multi single overloaded callable - template - static type get_empty_invocation_table() noexcept { - static empty_vtable const table; - return &table; - } -}; - -template -class operator_impl; - -#define FU2_DEFINE_FUNCTION_TRAIT(CONST, VOLATILE, NOEXCEPT, OVL_REF, REF) \ - template \ - class operator_impl \ - : operator_impl { \ - \ - template \ - friend class operator_impl; \ - \ - protected: \ - operator_impl() = default; \ - ~operator_impl() = default; \ - operator_impl(operator_impl const&) = default; \ - operator_impl(operator_impl&&) = default; \ - operator_impl& operator=(operator_impl const&) = default; \ - operator_impl& operator=(operator_impl&&) = default; \ - \ - using operator_impl::operator(); \ - \ - Ret operator()(Args... args) CONST VOLATILE OVL_REF NOEXCEPT { \ - auto parent = static_cast(this); \ - using erasure_t = std::decay_terasure_)>; \ - \ - /* `std::decay_terasure_)>` is a workaround for a */ \ - /* compiler regression of MSVC 16.3.1, see #29 for details. */ \ - return std::decay_terasure_)>::template invoke( \ - static_cast(parent->erasure_), \ - std::forward(args)...); \ - } \ - }; \ - template \ - class operator_impl, \ - Ret(Args...) CONST VOLATILE OVL_REF NOEXCEPT> \ - : copyable { \ - \ - template \ - friend class operator_impl; \ - \ - protected: \ - operator_impl() = default; \ - ~operator_impl() = default; \ - operator_impl(operator_impl const&) = default; \ - operator_impl(operator_impl&&) = default; \ - operator_impl& operator=(operator_impl const&) = default; \ - operator_impl& operator=(operator_impl&&) = default; \ - \ - Ret operator()(Args... args) CONST VOLATILE OVL_REF NOEXCEPT { \ - auto parent = \ - static_cast CONST VOLATILE*>(this); \ - using erasure_t = std::decay_terasure_)>; \ - \ - /* `std::decay_terasure_)>` is a workaround for a */ \ - /* compiler regression of MSVC 16.3.1, see #29 for details. */ \ - return std::decay_terasure_)>::template invoke( \ - static_cast(parent->erasure_), \ - std::forward(args)...); \ - } \ - }; - -FU2_DETAIL_EXPAND_QUALIFIERS(FU2_DEFINE_FUNCTION_TRAIT) -#undef FU2_DEFINE_FUNCTION_TRAIT -} // namespace invocation_table - -namespace tables { -/// Identifies the action which is dispatched on the erased object -enum class opcode { - op_move, //< Move the object and set the vtable - op_copy, //< Copy the object and set the vtable - op_destroy, //< Destroy the object and reset the vtable - op_weak_destroy, //< Destroy the object without resetting the vtable - op_fetch_empty, //< Stores true or false into the to storage - //< to indicate emptiness -}; - -/// Abstraction for a vtable together with a command table -/// TODO Add optimization for a single formal argument -/// TODO Add optimization to merge both tables if the function is size -/// optimized -template -class vtable; -template -class vtable> { - using command_function_t = void (*)(vtable* /*this*/, opcode /*op*/, - data_accessor* /*from*/, - std::size_t /*from_capacity*/, - data_accessor* /*to*/, - std::size_t /*to_capacity*/); - - using invoke_table_t = invocation_table::invoke_table; - - command_function_t cmd_; - typename invoke_table_t::type vtable_; - - template - struct trait { - static_assert(is_box::value, - "The trait must be specialized with a box!"); - - /// The command table - template - static void process_cmd(vtable* to_table, opcode op, data_accessor* from, - std::size_t from_capacity, data_accessor* to, - std::size_t to_capacity) { - - switch (op) { - case opcode::op_move: { - /// Retrieve the pointer to the object - auto box = static_cast(retrieve( - std::integral_constant{}, from, from_capacity)); - assert(box && "The object must not be over aligned or null!"); - - if (!IsInplace) { - // Just swap both pointers if we allocated on the heap - to->ptr_ = from->ptr_; - -#ifndef NDEBUG - // We don't need to null the pointer since we know that - // we don't own the data anymore through the vtable - // which is set to empty. - from->ptr_ = nullptr; -#endif - - to_table->template set_allocated(); - - } - // The object is allocated inplace - else { - construct(std::true_type{}, std::move(*box), to_table, to, - to_capacity); - box->~T(); - } - return; - } - case opcode::op_copy: { - auto box = static_cast(retrieve( - std::integral_constant{}, from, from_capacity)); - assert(box && "The object must not be over aligned or null!"); - - assert(std::is_copy_constructible::value && - "The box is required to be copyable here!"); - - // Try to allocate the object inplace - construct(std::is_copy_constructible{}, *box, to_table, to, - to_capacity); - return; - } - case opcode::op_destroy: - case opcode::op_weak_destroy: { - - assert(!to && !to_capacity && "Arg overflow!"); - auto box = static_cast(retrieve( - std::integral_constant{}, from, from_capacity)); - - if (IsInplace) { - box->~T(); - } else { - box_factory::box_deallocate(box); - } - - if (op == opcode::op_destroy) { - to_table->set_empty(); - } - return; - } - case opcode::op_fetch_empty: { - write_empty(to, false); - return; - } - } - - FU2_DETAIL_UNREACHABLE(); - } - - template - static void - construct(std::true_type /*apply*/, Box&& box, vtable* to_table, - data_accessor* to, - std::size_t to_capacity) noexcept(HasStrongExceptGuarantee) { - // Try to allocate the object inplace - void* storage = retrieve(std::true_type{}, to, to_capacity); - if (storage) { - to_table->template set_inplace(); - } else { - // Allocate the object through the allocator - to->ptr_ = storage = - box_factory>::box_allocate(std::addressof(box)); - to_table->template set_allocated(); - } - new (storage) T(std::forward(box)); - } - - template - static void - construct(std::false_type /*apply*/, Box&& /*box*/, vtable* /*to_table*/, - data_accessor* /*to*/, - std::size_t /*to_capacity*/) noexcept(HasStrongExceptGuarantee) { - } - }; - - /// The command table - static void empty_cmd(vtable* to_table, opcode op, data_accessor* /*from*/, - std::size_t /*from_capacity*/, data_accessor* to, - std::size_t /*to_capacity*/) { - - switch (op) { - case opcode::op_move: - case opcode::op_copy: { - to_table->set_empty(); - break; - } - case opcode::op_destroy: - case opcode::op_weak_destroy: { - // Do nothing - break; - } - case opcode::op_fetch_empty: { - write_empty(to, true); - break; - } - default: { - FU2_DETAIL_UNREACHABLE(); - } - } - } - -public: - vtable() noexcept = default; - - /// Initialize an object at the given position - template - static void init(vtable& table, T&& object, data_accessor* to, - std::size_t to_capacity) { - - trait>::construct(std::true_type{}, std::forward(object), - &table, to, to_capacity); - } - - /// Moves the object at the given position - void move(vtable& to_table, data_accessor* from, std::size_t from_capacity, - data_accessor* to, - std::size_t to_capacity) noexcept(HasStrongExceptGuarantee) { - cmd_(&to_table, opcode::op_move, from, from_capacity, to, to_capacity); - set_empty(); - } - - /// Destroys the object at the given position - void copy(vtable& to_table, data_accessor const* from, - std::size_t from_capacity, data_accessor* to, - std::size_t to_capacity) const { - cmd_(&to_table, opcode::op_copy, const_cast(from), - from_capacity, to, to_capacity); - } - - /// Destroys the object at the given position - void destroy(data_accessor* from, - std::size_t from_capacity) noexcept(HasStrongExceptGuarantee) { - cmd_(this, opcode::op_destroy, from, from_capacity, nullptr, 0U); - } - - /// Destroys the object at the given position without invalidating the - /// vtable - void - weak_destroy(data_accessor* from, - std::size_t from_capacity) noexcept(HasStrongExceptGuarantee) { - cmd_(this, opcode::op_weak_destroy, from, from_capacity, nullptr, 0U); - } - - /// Returns true when the vtable doesn't hold any erased object - bool empty() const noexcept { - data_accessor data; - cmd_(nullptr, opcode::op_fetch_empty, nullptr, 0U, &data, 0U); - return bool(data.inplace_storage_); - } - - /// Invoke the function at the given index - template - constexpr auto invoke(Args&&... args) const { - auto thunk = invoke_table_t::template fetch(vtable_); - return thunk(std::forward(args)...); - } - /// Invoke the function at the given index - template - constexpr auto invoke(Args&&... args) const volatile { - auto thunk = invoke_table_t::template fetch(vtable_); - return thunk(std::forward(args)...); - } - - template - void set_inplace() noexcept { - using type = std::decay_t; - vtable_ = invoke_table_t::template get_invocation_table_of(); - cmd_ = &trait::template process_cmd; - } - - template - void set_allocated() noexcept { - using type = std::decay_t; - vtable_ = invoke_table_t::template get_invocation_table_of(); - cmd_ = &trait::template process_cmd; - } - - void set_empty() noexcept { - vtable_ = invoke_table_t::template get_empty_invocation_table(); - cmd_ = &empty_cmd; - } -}; -} // namespace tables - -/// A union which makes the pointer to the heap object share the -/// same space with the internal capacity. -/// The storage type is distinguished by multiple versions of the -/// control and vtable. -template -struct internal_capacity { - /// We extend the union through a technique similar to the tail object hack - typedef union { - /// Tag to access the structure in a type-safe way - data_accessor accessor_; - /// The internal capacity we use to allocate in-place - std::aligned_storage_t capacity_; - } type; -}; -template -struct internal_capacity< - Capacity, std::enable_if_t<(Capacity::capacity < sizeof(void*))>> { - typedef struct { - /// Tag to access the structure in a type-safe way - data_accessor accessor_; - } type; -}; - -template -class internal_capacity_holder { - // Tag to access the structure in a type-safe way - typename internal_capacity::type storage_; - -public: - constexpr internal_capacity_holder() = default; - - constexpr data_accessor* opaque_ptr() noexcept { - return &storage_.accessor_; - } - constexpr data_accessor const* opaque_ptr() const noexcept { - return &storage_.accessor_; - } - constexpr data_accessor volatile* opaque_ptr() volatile noexcept { - return &storage_.accessor_; - } - constexpr data_accessor const volatile* opaque_ptr() const volatile noexcept { - return &storage_.accessor_; - } - - static constexpr std::size_t capacity() noexcept { - return sizeof(storage_); - } -}; - -/// An owning erasure -template -class erasure : internal_capacity_holder { - template - friend class erasure; - template - friend class operator_impl; - - using vtable_t = tables::vtable; - - vtable_t vtable_; - -public: - /// Returns the capacity of this erasure - static constexpr std::size_t capacity() noexcept { - return internal_capacity_holder::capacity(); - } - - constexpr erasure() noexcept { - vtable_.set_empty(); - } - - constexpr erasure(std::nullptr_t) noexcept { - vtable_.set_empty(); - } - - constexpr erasure(erasure&& right) noexcept( - Property::is_strong_exception_guaranteed) { - right.vtable_.move(vtable_, right.opaque_ptr(), right.capacity(), - this->opaque_ptr(), capacity()); - } - - constexpr erasure(erasure const& right) { - right.vtable_.copy(vtable_, right.opaque_ptr(), right.capacity(), - this->opaque_ptr(), capacity()); - } - - template - constexpr erasure(erasure right) noexcept( - Property::is_strong_exception_guaranteed) { - right.vtable_.move(vtable_, right.opaque_ptr(), right.capacity(), - this->opaque_ptr(), capacity()); - } - - template >> - constexpr erasure(std::false_type /*use_bool_op*/, T&& callable, - Allocator&& allocator = Allocator{}) { - vtable_t::init(vtable_, - type_erasure::make_box( - std::integral_constant{}, - std::forward(callable), - std::forward(allocator)), - this->opaque_ptr(), capacity()); - } - template >> - constexpr erasure(std::true_type /*use_bool_op*/, T&& callable, - Allocator&& allocator = Allocator{}) { - if (bool(callable)) { - vtable_t::init(vtable_, - type_erasure::make_box( - std::integral_constant{}, - std::forward(callable), - std::forward(allocator)), - this->opaque_ptr(), capacity()); - } else { - vtable_.set_empty(); - } - } - - ~erasure() { - vtable_.weak_destroy(this->opaque_ptr(), capacity()); - } - - constexpr erasure& - operator=(std::nullptr_t) noexcept(Property::is_strong_exception_guaranteed) { - vtable_.destroy(this->opaque_ptr(), capacity()); - return *this; - } - - constexpr erasure& operator=(erasure&& right) noexcept( - Property::is_strong_exception_guaranteed) { - vtable_.weak_destroy(this->opaque_ptr(), capacity()); - right.vtable_.move(vtable_, right.opaque_ptr(), right.capacity(), - this->opaque_ptr(), capacity()); - return *this; - } - - constexpr erasure& operator=(erasure const& right) { - vtable_.weak_destroy(this->opaque_ptr(), capacity()); - right.vtable_.copy(vtable_, right.opaque_ptr(), right.capacity(), - this->opaque_ptr(), capacity()); - return *this; - } - - template - constexpr erasure& - operator=(erasure right) noexcept( - Property::is_strong_exception_guaranteed) { - vtable_.weak_destroy(this->opaque_ptr(), capacity()); - right.vtable_.move(vtable_, right.opaque_ptr(), right.capacity(), - this->opaque_ptr(), capacity()); - return *this; - } - - template >> - void assign(std::false_type /*use_bool_op*/, T&& callable, - Allocator&& allocator = {}) { - vtable_.weak_destroy(this->opaque_ptr(), capacity()); - vtable_t::init(vtable_, - type_erasure::make_box( - std::integral_constant{}, - std::forward(callable), - std::forward(allocator)), - this->opaque_ptr(), capacity()); - } - - template >> - void assign(std::true_type /*use_bool_op*/, T&& callable, - Allocator&& allocator = {}) { - if (bool(callable)) { - assign(std::false_type{}, std::forward(callable), - std::forward(allocator)); - } else { - operator=(nullptr); - } - } - - /// Returns true when the erasure doesn't hold any erased object - constexpr bool empty() const noexcept { - return vtable_.empty(); - } - - /// Invoke the function of the erasure at the given index - /// - /// We define this out of class to be able to forward the qualified - /// erasure correctly. - template - static constexpr auto invoke(Erasure&& erasure, Args&&... args) { - auto const capacity = erasure.capacity(); - return erasure.vtable_.template invoke( - std::forward(erasure).opaque_ptr(), capacity, - std::forward(args)...); - } -}; - -// A non owning erasure -template -class erasure> { - template - friend class erasure; - template - friend class operator_impl; - - using property_t = property; - - using invoke_table_t = invocation_table::invoke_table; - typename invoke_table_t::type invoke_table_; - - /// The internal pointer to the non owned object - data_accessor view_; - -public: - // NOLINTNEXTLINE(cppcoreguidlines-pro-type-member-init) - constexpr erasure() noexcept - : invoke_table_( - invoke_table_t::template get_empty_invocation_table()), - view_(nullptr) { - } - - // NOLINTNEXTLINE(cppcoreguidlines-pro-type-member-init) - constexpr erasure(std::nullptr_t) noexcept - : invoke_table_( - invoke_table_t::template get_empty_invocation_table()), - view_(nullptr) { - } - - // NOLINTNEXTLINE(cppcoreguidlines-pro-type-member-init) - constexpr erasure(erasure&& right) noexcept - : invoke_table_(right.invoke_table_), view_(right.view_) { - } - - constexpr erasure(erasure const& /*right*/) = default; - - template - // NOLINTNEXTLINE(cppcoreguidlines-pro-type-member-init) - constexpr erasure(erasure right) noexcept - : invoke_table_(right.invoke_table_), view_(right.view_) { - } - - template - // NOLINTNEXTLINE(cppcoreguidlines-pro-type-member-init) - constexpr erasure(std::false_type /*use_bool_op*/, T&& object) - : invoke_table_(invoke_table_t::template get_invocation_view_table_of< - std::decay_t>()), - view_(address_taker>::take(std::forward(object))) { - } - template - // NOLINTNEXTLINE(cppcoreguidlines-pro-type-member-init) - constexpr erasure(std::true_type use_bool_op, T&& object) { - this->assign(use_bool_op, std::forward(object)); - } - - ~erasure() = default; - - constexpr erasure& - operator=(std::nullptr_t) noexcept(HasStrongExceptGuarantee) { - invoke_table_ = - invoke_table_t::template get_empty_invocation_table(); - view_.ptr_ = nullptr; - return *this; - } - - constexpr erasure& operator=(erasure&& right) noexcept { - invoke_table_ = right.invoke_table_; - view_ = right.view_; - right = nullptr; - return *this; - } - - constexpr erasure& operator=(erasure const& /*right*/) = default; - - template - constexpr erasure& - operator=(erasure right) noexcept { - invoke_table_ = right.invoke_table_; - view_ = right.view_; - return *this; - } - - template - constexpr void assign(std::false_type /*use_bool_op*/, T&& callable) { - invoke_table_ = invoke_table_t::template get_invocation_view_table_of< - std::decay_t>(); - view_.ptr_ = - address_taker>::take(std::forward(callable)); - } - template - constexpr void assign(std::true_type /*use_bool_op*/, T&& callable) { - if (bool(callable)) { - assign(std::false_type{}, std::forward(callable)); - } else { - operator=(nullptr); - } - } - - /// Returns true when the erasure doesn't hold any erased object - constexpr bool empty() const noexcept { - return view_.ptr_ == nullptr; - } - - template - static constexpr auto invoke(Erasure&& erasure, T&&... args) { - auto thunk = invoke_table_t::template fetch(erasure.invoke_table_); - return thunk(&(erasure.view_), 0UL, std::forward(args)...); - } -}; -} // namespace type_erasure - -/// Deduces to a true_type if the type T provides the given signature and the -/// signature is noexcept correct callable. -template > -struct accepts_one - : std::integral_constant< - bool, invocation::can_invoke, - typename Trait::arguments>::value && - invocation::is_noexcept_correct< - Trait::is_noexcept::value, - typename Trait::template callable, - typename Trait::arguments>::value> {}; - -/// Deduces to a true_type if the type T provides all signatures -template -struct accepts_all : std::false_type {}; -template -struct accepts_all< - T, identity, - void_t::value>...>> - : std::true_type {}; - -/// Deduces to a true_type if the type T is implementing operator bool() -/// or if the type is convertible to bool directly, this also implements an -/// optimizations for function references `void(&)()` which are can never -/// be null and for such a conversion to bool would never return false. -#if defined(FU2_HAS_NO_EMPTY_PROPAGATION) -template -struct use_bool_op : std::false_type {}; -#else -template -struct has_bool_op : std::false_type {}; -template -struct has_bool_op()))>> - : std::true_type { -#ifndef NDEBUG - static_assert(!std::is_pointer::value, - "Missing deduction for function pointer!"); -#endif -}; - -template -struct use_bool_op : has_bool_op {}; - -#define FU2_DEFINE_USE_OP_TRAIT(CONST, VOLATILE, NOEXCEPT) \ - template \ - struct use_bool_op \ - : std::true_type {}; - -FU2_DETAIL_EXPAND_CV(FU2_DEFINE_USE_OP_TRAIT) -#undef FU2_DEFINE_USE_OP_TRAIT - -template -struct use_bool_op : std::false_type {}; - -#if defined(FU2_HAS_CXX17_NOEXCEPT_FUNCTION_TYPE) -template -struct use_bool_op : std::false_type {}; -#endif -#endif // FU2_HAS_NO_EMPTY_PROPAGATION - -template -struct assert_wrong_copy_assign { - static_assert(!Config::is_owning || !Config::is_copyable || - std::is_copy_constructible>::value, - "Can't wrap a non copyable object into a unique function!"); - - using type = void; -}; - -template -struct assert_no_strong_except_guarantee { - static_assert( - !IsStrongExceptGuaranteed || - (std::is_nothrow_move_constructible::value && - std::is_nothrow_destructible::value), - "Can't wrap a object an object that has no strong exception guarantees " - "if this is required by the wrapper!"); - - using type = void; -}; - -/// SFINAES out if the given callable is not copyable correct to the left one. -template -using enable_if_copyable_correct_t = - std::enable_if_t<(!LeftConfig::is_copyable || RightConfig::is_copyable)>; - -template -using is_owning_correct = - std::integral_constant; - -/// SFINAES out if the given function2 is not owning correct to this one -template -using enable_if_owning_correct_t = - std::enable_if_t::value>; - -template -class function> - : type_erasure::invocation_table::operator_impl< - 0U, - function>, - Args...> { - - template - friend class function; - - template - friend class type_erasure::invocation_table::operator_impl; - - using property_t = property; - using erasure_t = - type_erasure::erasure; - - template - using enable_if_can_accept_all_t = - std::enable_if_t, identity>::value>; - - template - struct is_convertible_to_this : std::false_type {}; - template - struct is_convertible_to_this< - function, - void_t, - enable_if_owning_correct_t>> - : std::true_type {}; - - template - using enable_if_not_convertible_to_this = - std::enable_if_t>::value>; - - template - using enable_if_owning_t = - std::enable_if_t::value && Config::is_owning>; - - template - using assert_wrong_copy_assign_t = - typename assert_wrong_copy_assign>::type; - - template - using assert_no_strong_except_guarantee_t = - typename assert_no_strong_except_guarantee>::type; - - erasure_t erasure_; - -public: - /// Default constructor which empty constructs the function - function() = default; - ~function() = default; - - explicit constexpr function(function const& /*right*/) = default; - explicit constexpr function(function&& /*right*/) = default; - - /// Copy construction from another copyable function - template * = nullptr, - enable_if_copyable_correct_t* = nullptr, - enable_if_owning_correct_t* = nullptr> - constexpr function(function const& right) - : erasure_(right.erasure_) { - } - - /// Move construction from another function - template * = nullptr, - enable_if_owning_correct_t* = nullptr> - constexpr function(function&& right) - : erasure_(std::move(right.erasure_)) { - } - - /// Construction from a callable object which overloads the `()` operator - template * = nullptr, - enable_if_can_accept_all_t* = nullptr, - assert_wrong_copy_assign_t* = nullptr, - assert_no_strong_except_guarantee_t* = nullptr> - constexpr function(T&& callable) - : erasure_(use_bool_op>{}, std::forward(callable)) { - } - template * = nullptr, - enable_if_can_accept_all_t* = nullptr, - enable_if_owning_t* = nullptr, - assert_wrong_copy_assign_t* = nullptr, - assert_no_strong_except_guarantee_t* = nullptr> - constexpr function(T&& callable, Allocator&& allocator) - : erasure_(use_bool_op>{}, std::forward(callable), - std::forward(allocator)) { - } - - /// Empty constructs the function - constexpr function(std::nullptr_t np) : erasure_(np) { - } - - function& operator=(function const& /*right*/) = default; - function& operator=(function&& /*right*/) = default; - - /// Copy assigning from another copyable function - template * = nullptr, - enable_if_copyable_correct_t* = nullptr, - enable_if_owning_correct_t* = nullptr> - function& operator=(function const& right) { - erasure_ = right.erasure_; - return *this; - } - - /// Move assigning from another function - template * = nullptr, - enable_if_owning_correct_t* = nullptr> - function& operator=(function&& right) { - erasure_ = std::move(right.erasure_); - return *this; - } - - /// Move assigning from a callable object - template * = nullptr, - enable_if_can_accept_all_t* = nullptr, - assert_wrong_copy_assign_t* = nullptr, - assert_no_strong_except_guarantee_t* = nullptr> - function& operator=(T&& callable) { - erasure_.assign(use_bool_op>{}, std::forward(callable)); - return *this; - } - - /// Clears the function - function& operator=(std::nullptr_t np) { - erasure_ = np; - return *this; - } - - /// Returns true when the function is empty - bool empty() const noexcept { - return erasure_.empty(); - } - - /// Returns true when the function isn't empty - explicit operator bool() const noexcept { - return !empty(); - } - - /// Assigns a new target with an optional allocator - template >, - enable_if_not_convertible_to_this* = nullptr, - enable_if_can_accept_all_t* = nullptr, - assert_wrong_copy_assign_t* = nullptr, - assert_no_strong_except_guarantee_t* = nullptr> - void assign(T&& callable, Allocator&& allocator = Allocator{}) { - erasure_.assign(use_bool_op>{}, std::forward(callable), - std::forward(allocator)); - } - - /// Swaps this function with the given function - void swap(function& other) noexcept(HasStrongExceptGuarantee) { - if (&other == this) { - return; - } - - function cache = std::move(other); - other = std::move(*this); - *this = std::move(cache); - } - - /// Swaps the left function with the right one - friend void swap(function& left, - function& right) noexcept(HasStrongExceptGuarantee) { - left.swap(right); - } - - /// Calls the wrapped callable object - using type_erasure::invocation_table::operator_impl< - 0U, function, Args...>::operator(); -}; - -template -bool operator==(function const& f, std::nullptr_t) { - return !bool(f); -} - -template -bool operator!=(function const& f, std::nullptr_t) { - return bool(f); -} - -template -bool operator==(std::nullptr_t, function const& f) { - return !bool(f); -} - -template -bool operator!=(std::nullptr_t, function const& f) { - return bool(f); -} - -// Default intended object size of the function -using object_size = std::integral_constant; -} // namespace detail -} // namespace abi_400 - -/// Can be passed to function_base as template argument which causes -/// the internal small buffer to be sized according to the given size, -/// and aligned with the given alignment. -template -struct capacity_fixed { - static constexpr std::size_t capacity = Capacity; - static constexpr std::size_t alignment = Alignment; -}; - -/// Default capacity for small functor optimization -struct capacity_default - : capacity_fixed {}; - -/// Can be passed to function_base as template argument which causes -/// the internal small buffer to be removed from the callable wrapper. -/// The owning function_base will then allocate memory for every object -/// it applies a type erasure on. -struct capacity_none : capacity_fixed<0UL> {}; - -/// Can be passed to function_base as template argument which causes -/// the internal small buffer to be sized such that it can hold -/// the given object without allocating memory for an applied type erasure. -template -struct capacity_can_hold { - static constexpr std::size_t capacity = sizeof(T); - static constexpr std::size_t alignment = alignof(T); -}; - -/// An adaptable function wrapper base for arbitrary functional types. -/// -/// \tparam IsOwning Is true when the type erasure shall be owning the object. -/// -/// \tparam IsCopyable Defines whether the function is copyable or not -/// -/// \tparam Capacity Defines the internal capacity of the function -/// for small functor optimization. -/// The size of the whole function object will be the capacity -/// plus the size of two pointers. If the capacity is zero, -/// the size will increase through one additional pointer -/// so the whole object has the size of 3 * sizeof(void*). -/// The type which is passed to the Capacity template parameter -/// shall provide a capacity and alignment member which -/// looks like the following example: -/// ```cpp -/// struct my_capacity { -/// static constexpr std::size_t capacity = sizeof(my_type); -/// static constexpr std::size_t alignment = alignof(my_type); -/// }; -/// ``` -/// -/// \tparam IsThrowing Defines whether the function throws an exception on -/// empty function call, `std::abort` is called otherwise. -/// -/// \tparam HasStrongExceptGuarantee Defines whether all objects satisfy the -/// strong exception guarantees, -/// which means the function type will satisfy -/// the strong exception guarantees too. -/// -/// \tparam Signatures Defines the signature of the callable wrapper -/// -template -using function_base = detail::function< - detail::config, - detail::property>; - -/// An owning copyable function wrapper for arbitrary callable types. -template -using function = function_base; - -/// An owning non copyable function wrapper for arbitrary callable types. -template -using unique_function = function_base; - -/// A non owning copyable function wrapper for arbitrary callable types. -template -using function_view = function_base; - -#if !defined(FU2_HAS_DISABLED_EXCEPTIONS) -/// Exception type that is thrown when invoking empty function objects -/// and exception support isn't disabled. -/// -/// Exception support is enabled if -/// the template parameter 'Throwing' is set to true (default). -/// -/// This type will default to std::bad_function_call if the -/// functional header is used, otherwise the library provides its own type. -/// -/// You may disable the inclusion of the functional header -/// through defining `FU2_WITH_NO_FUNCTIONAL_HEADER`. -/// -using detail::type_erasure::invocation_table::bad_function_call; -#endif - -/// Returns a callable object, which unifies all callable objects -/// that were passed to this function. -/// -/// ```cpp -/// auto overloaded = fu2::overload([](std::true_type) { return true; }, -/// [](std::false_type) { return false; }); -/// ``` -/// -/// \param callables A pack of callable objects with arbitrary signatures. -/// -/// \returns A callable object which exposes the -/// -template -constexpr auto overload(T&&... callables) { - return detail::overloading::overload(std::forward(callables)...); -} -} // namespace fu2 - -#undef FU2_DETAIL_EXPAND_QUALIFIERS -#undef FU2_DETAIL_EXPAND_QUALIFIERS_NOEXCEPT -#undef FU2_DETAIL_EXPAND_CV -#undef FU2_DETAIL_EXPAND_CV_NOEXCEPT -#undef FU2_DETAIL_UNREACHABLE_INTRINSIC -#undef FU2_DETAIL_UNREACHABLE_INTRINSIC -#undef FU2_DETAIL_TRAP - -#endif // FU2_INCLUDED_FUNCTION2_HPP_ - diff --git a/nectar_modules/http/index.js b/nectar_modules/http/index.js deleted file mode 100644 index d555baa3c..000000000 --- a/nectar_modules/http/index.js +++ /dev/null @@ -1,32 +0,0 @@ -/* - * This file is part of NectarJS - * Copyright (c) 2017 - 2020 Adrien THIERRY - * http://nectarjs.com - https://seraum.com/ - * - * sources : https://github.com/nectarjs/nectarjs - * - * NectarJS is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * NectarJS is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with NectarJS. If not, see . - * - */ - "!_ffi_include httplib/http.hpp"; - - function Http() - { - this.createServer = function() - { - return __NJS_Create_Server(); - }; - } - - module.exports = new Http(); \ No newline at end of file diff --git a/nectar_modules/http/package.json b/nectar_modules/http/package.json deleted file mode 100644 index dd9cd3d96..000000000 --- a/nectar_modules/http/package.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "name": "http", - "description": "NectarJS http module", - "main": "index.js", - "bugs": - { - "url": "https://github.com/NectarJS/nectarjs/issues" - }, - - "directories": - { - "root": "." - }, - "homepage": "https://github.com/NectarJS/nectarjs/#readme", - "keywords": - [ - "nectarjs", - "js", - "javascript" - ], - "license": "MIT", - "licenses": [ - { - "type": "MIT", - "url": "https://github.com/NectarJS/nectarjs/blob/master/LICENSE" - } - ], - "repository": - { - "type": "git", - "url": "git+ssh://git@github.com/NectarJS/nectarjs.git" - }, - "version": "0.0.1", - "nectar": - { - "comment": - { - - }, - "env": ["std"], - "read_only": [], - "expose": ["__NJS_Create_Server"], - "message": "[*] The module http requires the external libraries, if missing, install it with 'njs --install_external'", - "lib": - { - "win32": - [ - "-D_WIN32_WINNT=0x0600", - "-Wno-narrowing", - "-D_GNU_SOURCE", - "-I{__EXTERN__}/libuv/include/", - "-I{__EXTERN__}/libuv/src/", - "-D_CRT_SECURE_NO_DEPRECATE", - "-D_CRT_NONSTDC_NO_DEPRECATE", - "{__EXTERN__}/libuv/src/*.h", - "{__EXTERN__}/libuv/src/*.c", - "{__EXTERN__}/libuv/src/win/*.h", - "{__EXTERN__}/libuv/src/win/*.c", - "-I {__MODULE__}/httplib/uWS/", - "-I {__MODULE__}/httplib/uSockets/src/", - "{__MODULE__}/httplib/uSockets/src/*.c", - "{__MODULE__}/httplib/uSockets/src/crypto/*.c", - "{__MODULE__}/httplib/uSockets/src/eventing/*.c", - "-DLIBUS_NO_SSL", - "-DUWS_NO_ZLIB", - "-fpermissive", - "-w", - "-lm", - "-ladvapi32", - "-liphlpapi", - "-lpsapi", - "-lshell32", - "-luser32 ", - "-luserenv", - "-lwsock32", - "-lws2_32" - ] - } - } -} diff --git a/nectar_modules/iOS/index.js b/nectar_modules/iOS/index.js deleted file mode 100644 index 6911bcdea..000000000 --- a/nectar_modules/iOS/index.js +++ /dev/null @@ -1,32 +0,0 @@ -/* - * This file is part of NectarJS - * Copyright (c) 2017 - 2020 Adrien THIERRY - * http://nectarjs.com - https://seraum.com/ - * - * sources : https://github.com/nectarjs/nectarjs - * - * NectarJS is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * NectarJS is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with NectarJS. If not, see . - * - */ - -'!_ffi_include lib/lib.h'; - -var _ios = -{ - draw: __Nectar_IOS_DRAW, - navigate: __Nectar_IOS_NAVIGATE, - app_path: "http://localhost:12001/", -}; - -module.exports = _ios; \ No newline at end of file diff --git a/nectar_modules/iOS/lib/lib.h b/nectar_modules/iOS/lib/lib.h deleted file mode 100644 index 3d32350bb..000000000 --- a/nectar_modules/iOS/lib/lib.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * This file is part of NectarJS - * Copyright (c) 2017 - 2020 Adrien THIERRY - * http://nectarjs.com - https://seraum.com/ - * - * sources : https://github.com/nectarjs/nectarjs - * - * NectarJS is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * NectarJS is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with NectarJS. If not, see . - * - */ - - -function __Nectar_IOS_DRAW(_value) -{ - drawNative(__Nectar_Get_String(_value)); -} - -function __Nectar_IOS_NAVIGATE(_value) -{ - navigateNative(__Nectar_Get_String(_value)); -} diff --git a/nectar_modules/iOS/package.json b/nectar_modules/iOS/package.json deleted file mode 100644 index b141ac0e7..000000000 --- a/nectar_modules/iOS/package.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "name": "iOS", - "description": "NectarJS base iOS module", - "main": "index.js", - "bugs": - { - "url": "https://github.com/NectarJS/nectarjs/issues" - }, - - "directories": - { - "root": ".", - "lib": "lib" - }, - "homepage": "https://github.com/NectarJS/nectarjs#readme", - "keywords": - [ - "nectarjs", - "iOS", - "Apple", - "smartphone", - "mobile" - ], - "license": "GPL-3.0-or-later", - "licenses": [ - { - "type": "GPL", - "url": "https://github.com/nectarjs/nectarjs/blob/master/LICENSE" - } - ], - "repository": - { - "type": "git", - "url": "git+ssh://git@github.com/NectarJS/nectarjs.git" - }, - "version": "0.0.1", - "nectar": - { - "env": ["ios"], - "read_only": [], - "expose": ["__Nectar_IOS_DRAW", "__Nectar_IOS_NAVIGATE"] - } -} diff --git a/nectar_modules/mysqlx/index.js b/nectar_modules/mysqlx/index.js deleted file mode 100644 index a32fe28d1..000000000 --- a/nectar_modules/mysqlx/index.js +++ /dev/null @@ -1,8 +0,0 @@ - - -var _mysql = -{ - //connect: __NJS_NATIVE_CONNECT_MYSQL, -}; - -module.exports = _mysql; diff --git a/nectar_modules/mysqlx/mysqlx/njs-mysqlx.h b/nectar_modules/mysqlx/mysqlx/njs-mysqlx.h deleted file mode 100644 index ea9ad38a2..000000000 --- a/nectar_modules/mysqlx/mysqlx/njs-mysqlx.h +++ /dev/null @@ -1,166 +0,0 @@ -#include - -using namespace ::mysqlx; - -function __NJS_NATIVE_CONNECT_MYSQL(_auth, _schema, _coll) -{ - try - { - if(!_auth) _auth = "mysqlx://root@localhost"; - else - { - if(_auth.type == __NJS_STRING) _auth = "mysqlx://" + _auth; - else if(_auth.type == __NJS_OBJECT) - { - var _strauth = "mysqlx://"; - - var _user = __NJS_Object_Get("user", _auth); - if(_user.type == __NJS_STRING) _strauth += _user; - else _strauth += "root"; - - var _pass = __NJS_Object_Get("pass", _auth); - if(_pass.type == __NJS_STRING) _strauth += ":" + _pass; - - var _host = __NJS_Object_Get("host", _auth); - if(_host.type == __NJS_STRING) _strauth += "@" + _host; - else _strauth += "localhost"; - - _auth = _strauth; - } - } - - if(!_schema) _schema = "nectarSchema"; - if(!_coll) _coll = "nectar"; - - Session* sess = new Session(__NJS_Get_String(_auth)); - Schema sch= sess->getSchema(__NJS_Get_String(_schema)); - Collection coll= sch.createCollection(__NJS_Get_String(_coll), true); - - var _mysqlObject = __NJS_Create_Object(); - - function _mysql_close() - { - delete sess; - }; - - function _mysql_add(_json) - { - "SCOPED_FUNCTION"; - try - { - coll.add(__NJS_Get_String(_json)).execute(); - var _result = __NJS_Create_Boolean(1); - return _result; - } - catch(const std::exception& e) - { - return __NJS_Create_Boolean(0); - } - }; - - function _mysql_modify(_obj) - { - "SCOPED_FUNCTION"; - try - { - var _search = __NJS_Object_Get("search",_obj); - if(_search.type != __NJS_STRING) return __NJS_Create_Boolean(0); - - auto _cm = coll.modify(__NJS_Get_String(_search)); - - var _set = __NJS_Object_Get("set", _obj); - if(_set && _set.type == __NJS_ARRAY) - { - for(int i = 0; i < _set.get().a->__NJS_VALUE.size(); i+=2) - { - if(i+1 <= _set.get().a->__NJS_VALUE.size()) - { - var _left = __NJS_Object_Get(i, _set); - var _right = __NJS_Object_Get(i+1, _set); - if(_left.type == __NJS_STRING && _right.type == __NJS_STRING) - _cm.set(__NJS_Get_String(_left), __NJS_Get_String(_right)); - } - } - } - _cm.execute(); - - var _result = __NJS_Create_Boolean(1); - return _result; - } - catch(const std::exception& e) - { - return __NJS_Create_Boolean(0); - } - } - - function _mysql_find(_request) - { - "SCOPED_FUNCTION"; - try - { - var _result = __NJS_Create_Array(); - std::list dbList; - if(_request) dbList = coll.find(__NJS_Get_String(_request)).execute().fetchAll(); - else dbList = coll.find().execute().fetchAll(); - - int i = 0; - std::list::iterator it; - stringstream s; - s << "{\"data\":["; - for (it = dbList.begin(); it != dbList.end(); it++) - { - if(i) s << ","; - it->print(s); - i++; - } - s << "], \"code\":0, \"length\":" << dbList.size() << "}"; - std::string _str = std::string(s.str()); - var _data = _str.c_str(); - return _data; - } - catch(const std::exception& e) - { - return '{"code:"1, "msg":"Find error"}'; - } - } - - function _mysql_remove(_request) - { - "SCOPED_FUNCTION"; - try - { - coll.remove(__NJS_Get_String(_request)).execute(); - return __NJS_Create_Boolean(1); - } - catch(const std::exception& e) - { - return __NJS_Create_Boolean(0); - } - } - - __NJS_Object_Set("version", "8", _mysqlObject); - __NJS_Object_Set("add", _mysql_add, _mysqlObject); - __NJS_Object_Set("modify", _mysql_modify, _mysqlObject); - __NJS_Object_Set("find", _mysql_find, _mysqlObject); - __NJS_Object_Set("remove", _mysql_remove, _mysqlObject); - __NJS_Object_Set("close", _mysql_close, _mysqlObject); - - return _mysqlObject; - - } - catch (const mysqlx::Error &err) - { - cout <<"ERROR: " <. - * - */ - -'!_ffi_include lib/njs-http.h'; - -var njs_server = {}; - -njs_server.listen = function(_host, _port, _cb, _opt) -{ - __Nectar_HTTP_LISTEN(_host, _port, _cb, _opt); -}; - - -module.exports = njs_server; diff --git a/nectar_modules/njs-http/lib/LICENSE b/nectar_modules/njs-http/lib/LICENSE deleted file mode 100644 index 3e5ed359a..000000000 --- a/nectar_modules/njs-http/lib/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2017 yhirose - -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. - diff --git a/nectar_modules/njs-http/lib/httplib.h b/nectar_modules/njs-http/lib/httplib.h deleted file mode 100644 index 4939556bf..000000000 --- a/nectar_modules/njs-http/lib/httplib.h +++ /dev/null @@ -1,6673 +0,0 @@ -// -// httplib.h -// -// Copyright (c) 2020 Yuji Hirose. All rights reserved. -// MIT License -// - -#ifndef CPPHTTPLIB_HTTPLIB_H -#define CPPHTTPLIB_HTTPLIB_H - -/* - * Configuration - */ - -#ifndef CPPHTTPLIB_KEEPALIVE_TIMEOUT_SECOND -#define CPPHTTPLIB_KEEPALIVE_TIMEOUT_SECOND 5 -#endif - -#ifndef CPPHTTPLIB_KEEPALIVE_MAX_COUNT -#define CPPHTTPLIB_KEEPALIVE_MAX_COUNT 5 -#endif - -#ifndef CPPHTTPLIB_CONNECTION_TIMEOUT_SECOND -#define CPPHTTPLIB_CONNECTION_TIMEOUT_SECOND 300 -#endif - -#ifndef CPPHTTPLIB_CONNECTION_TIMEOUT_USECOND -#define CPPHTTPLIB_CONNECTION_TIMEOUT_USECOND 0 -#endif - -#ifndef CPPHTTPLIB_READ_TIMEOUT_SECOND -#define CPPHTTPLIB_READ_TIMEOUT_SECOND 5 -#endif - -#ifndef CPPHTTPLIB_READ_TIMEOUT_USECOND -#define CPPHTTPLIB_READ_TIMEOUT_USECOND 0 -#endif - -#ifndef CPPHTTPLIB_WRITE_TIMEOUT_SECOND -#define CPPHTTPLIB_WRITE_TIMEOUT_SECOND 5 -#endif - -#ifndef CPPHTTPLIB_WRITE_TIMEOUT_USECOND -#define CPPHTTPLIB_WRITE_TIMEOUT_USECOND 0 -#endif - -#ifndef CPPHTTPLIB_IDLE_INTERVAL_SECOND -#define CPPHTTPLIB_IDLE_INTERVAL_SECOND 0 -#endif - -#ifndef CPPHTTPLIB_IDLE_INTERVAL_USECOND -#ifdef _WIN32 -#define CPPHTTPLIB_IDLE_INTERVAL_USECOND 10000 -#else -#define CPPHTTPLIB_IDLE_INTERVAL_USECOND 0 -#endif -#endif - -#ifndef CPPHTTPLIB_REQUEST_URI_MAX_LENGTH -#define CPPHTTPLIB_REQUEST_URI_MAX_LENGTH 8192 -#endif - -#ifndef CPPHTTPLIB_REDIRECT_MAX_COUNT -#define CPPHTTPLIB_REDIRECT_MAX_COUNT 20 -#endif - -#ifndef CPPHTTPLIB_PAYLOAD_MAX_LENGTH -#define CPPHTTPLIB_PAYLOAD_MAX_LENGTH ((std::numeric_limits::max)()) -#endif - -#ifndef CPPHTTPLIB_TCP_NODELAY -#define CPPHTTPLIB_TCP_NODELAY false -#endif - -#ifndef CPPHTTPLIB_RECV_BUFSIZ -#define CPPHTTPLIB_RECV_BUFSIZ size_t(4096u) -#endif - -#ifndef CPPHTTPLIB_COMPRESSION_BUFSIZ -#define CPPHTTPLIB_COMPRESSION_BUFSIZ size_t(16384u) -#endif - -#ifndef CPPHTTPLIB_THREAD_POOL_COUNT -#define CPPHTTPLIB_THREAD_POOL_COUNT \ - ((std::max)(8u, std::thread::hardware_concurrency() > 0 \ - ? std::thread::hardware_concurrency() - 1 \ - : 0)) -#endif - -#ifndef CPPHTTPLIB_RECV_FLAGS -#define CPPHTTPLIB_RECV_FLAGS 0 -#endif - -#ifndef CPPHTTPLIB_SEND_FLAGS -#define CPPHTTPLIB_SEND_FLAGS 0 -#endif - -/* - * Headers - */ - -#ifdef _WIN32 -#ifndef _CRT_SECURE_NO_WARNINGS -#define _CRT_SECURE_NO_WARNINGS -#endif //_CRT_SECURE_NO_WARNINGS - -#ifndef _CRT_NONSTDC_NO_DEPRECATE -#define _CRT_NONSTDC_NO_DEPRECATE -#endif //_CRT_NONSTDC_NO_DEPRECATE - -#if defined(_MSC_VER) -#ifdef _WIN64 -using ssize_t = __int64; -#else -using ssize_t = int; -#endif - -#if _MSC_VER < 1900 -#define snprintf _snprintf_s -#endif -#endif // _MSC_VER - -#ifndef S_ISREG -#define S_ISREG(m) (((m)&S_IFREG) == S_IFREG) -#endif // S_ISREG - -#ifndef S_ISDIR -#define S_ISDIR(m) (((m)&S_IFDIR) == S_IFDIR) -#endif // S_ISDIR - -#ifndef NOMINMAX -#define NOMINMAX -#endif // NOMINMAX - -#include -#include - -#include -#include - -#ifndef WSA_FLAG_NO_HANDLE_INHERIT -#define WSA_FLAG_NO_HANDLE_INHERIT 0x80 -#endif - -#ifdef _MSC_VER -#pragma comment(lib, "ws2_32.lib") -#pragma comment(lib, "crypt32.lib") -#pragma comment(lib, "cryptui.lib") -#endif - -#ifndef strcasecmp -#define strcasecmp _stricmp -#endif // strcasecmp - -using socket_t = SOCKET; -#ifdef CPPHTTPLIB_USE_POLL -#define poll(fds, nfds, timeout) WSAPoll(fds, nfds, timeout) -#endif - -#else // not _WIN32 - -#include -#include -#include -#include -#include -#ifdef __linux__ -#include -#endif -#include -#ifdef CPPHTTPLIB_USE_POLL -#include -#endif -#include -#include -#include -#include -#include - -using socket_t = int; -#define INVALID_SOCKET (-1) -#endif //_WIN32 - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT -#include -#include -#include -#include - -#if defined(_WIN32) && defined(OPENSSL_USE_APPLINK) -#include -#endif - -#include -#include -#include - -#if OPENSSL_VERSION_NUMBER < 0x1010100fL -#error Sorry, OpenSSL versions prior to 1.1.1 are not supported -#endif - -#if OPENSSL_VERSION_NUMBER < 0x10100000L -#include -inline const unsigned char *ASN1_STRING_get0_data(const ASN1_STRING *asn1) { - return M_ASN1_STRING_data(asn1); -} -#endif -#endif - -#ifdef CPPHTTPLIB_ZLIB_SUPPORT -#include -#endif - -#ifdef CPPHTTPLIB_BROTLI_SUPPORT -#include -#include -#endif - -/* - * Declaration - */ -namespace httplib { - -namespace detail { - -/* - * Backport std::make_unique from C++14. - * - * NOTE: This code came up with the following stackoverflow post: - * https://stackoverflow.com/questions/10149840/c-arrays-and-make-unique - * - */ - -template -typename std::enable_if::value, std::unique_ptr>::type -make_unique(Args &&... args) { - return std::unique_ptr(new T(std::forward(args)...)); -} - -template -typename std::enable_if::value, std::unique_ptr>::type -make_unique(std::size_t n) { - typedef typename std::remove_extent::type RT; - return std::unique_ptr(new RT[n]); -} - -struct ci { - bool operator()(const std::string &s1, const std::string &s2) const { - return std::lexicographical_compare( - s1.begin(), s1.end(), s2.begin(), s2.end(), - [](char c1, char c2) { return ::tolower(c1) < ::tolower(c2); }); - } -}; - -} // namespace detail - -using Headers = std::multimap; - -using Params = std::multimap; -using Match = std::smatch; - -using Progress = std::function; - -struct Response; -using ResponseHandler = std::function; - -struct MultipartFormData { - std::string name; - std::string content; - std::string filename; - std::string content_type; -}; -using MultipartFormDataItems = std::vector; -using MultipartFormDataMap = std::multimap; - -class DataSink { -public: - DataSink() : os(&sb_), sb_(*this) {} - - DataSink(const DataSink &) = delete; - DataSink &operator=(const DataSink &) = delete; - DataSink(DataSink &&) = delete; - DataSink &operator=(DataSink &&) = delete; - - std::function write; - std::function done; - std::function is_writable; - std::ostream os; - -private: - class data_sink_streambuf : public std::streambuf { - public: - explicit data_sink_streambuf(DataSink &sink) : sink_(sink) {} - - protected: - std::streamsize xsputn(const char *s, std::streamsize n) { - sink_.write(s, static_cast(n)); - return n; - } - - private: - DataSink &sink_; - }; - - data_sink_streambuf sb_; -}; - -using ContentProvider = - std::function; - -using ContentProviderWithoutLength = - std::function; - -using ContentReceiverWithProgress = - std::function; - -using ContentReceiver = - std::function; - -using MultipartContentHeader = - std::function; - -class ContentReader { -public: - using Reader = std::function; - using MultipartReader = std::function; - - ContentReader(Reader reader, MultipartReader multipart_reader) - : reader_(std::move(reader)), - multipart_reader_(std::move(multipart_reader)) {} - - bool operator()(MultipartContentHeader header, - ContentReceiver receiver) const { - return multipart_reader_(std::move(header), std::move(receiver)); - } - - bool operator()(ContentReceiver receiver) const { - return reader_(std::move(receiver)); - } - - Reader reader_; - MultipartReader multipart_reader_; -}; - -using Range = std::pair; -using Ranges = std::vector; - -struct Request { - std::string method; - std::string path; - Headers headers; - std::string body; - - std::string remote_addr; - int remote_port = -1; - - // for server - std::string version; - std::string target; - Params params; - MultipartFormDataMap files; - Ranges ranges; - Match matches; - - // for client - size_t redirect_count = CPPHTTPLIB_REDIRECT_MAX_COUNT; - ResponseHandler response_handler; - ContentReceiverWithProgress content_receiver; - size_t content_length = 0; - ContentProvider content_provider; - Progress progress; - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - const SSL *ssl; -#endif - - bool has_header(const char *key) const; - std::string get_header_value(const char *key, size_t id = 0) const; - template - T get_header_value(const char *key, size_t id = 0) const; - size_t get_header_value_count(const char *key) const; - void set_header(const char *key, const char *val); - void set_header(const char *key, const std::string &val); - - bool has_param(const char *key) const; - std::string get_param_value(const char *key, size_t id = 0) const; - size_t get_param_value_count(const char *key) const; - - bool is_multipart_form_data() const; - - bool has_file(const char *key) const; - MultipartFormData get_file_value(const char *key) const; - - // private members... - size_t authorization_count_ = 0; -}; - -struct Response { - std::string version; - int status = -1; - std::string reason; - Headers headers; - std::string body; - - bool has_header(const char *key) const; - std::string get_header_value(const char *key, size_t id = 0) const; - template - T get_header_value(const char *key, size_t id = 0) const; - size_t get_header_value_count(const char *key) const; - void set_header(const char *key, const char *val); - void set_header(const char *key, const std::string &val); - - void set_redirect(const char *url, int status = 302); - void set_redirect(const std::string &url, int status = 302); - void set_content(const char *s, size_t n, const char *content_type); - void set_content(const std::string &s, const char *content_type); - - void set_content_provider( - size_t length, const char *content_type, ContentProvider provider, - const std::function &resource_releaser = nullptr); - - void set_content_provider( - const char *content_type, ContentProviderWithoutLength provider, - const std::function &resource_releaser = nullptr); - - void set_chunked_content_provider( - const char *content_type, ContentProviderWithoutLength provider, - const std::function &resource_releaser = nullptr); - - Response() = default; - Response(const Response &) = default; - Response &operator=(const Response &) = default; - Response(Response &&) = default; - Response &operator=(Response &&) = default; - ~Response() { - if (content_provider_resource_releaser_) { - content_provider_resource_releaser_(); - } - } - - // private members... - size_t content_length_ = 0; - ContentProvider content_provider_; - std::function content_provider_resource_releaser_; - bool is_chunked_content_provider = false; -}; - -class Stream { -public: - virtual ~Stream() = default; - - virtual bool is_readable() const = 0; - virtual bool is_writable() const = 0; - - virtual ssize_t read(char *ptr, size_t size) = 0; - virtual ssize_t write(const char *ptr, size_t size) = 0; - virtual void get_remote_ip_and_port(std::string &ip, int &port) const = 0; - - template - ssize_t write_format(const char *fmt, const Args &... args); - ssize_t write(const char *ptr); - ssize_t write(const std::string &s); -}; - -class TaskQueue { -public: - TaskQueue() = default; - virtual ~TaskQueue() = default; - - virtual void enqueue(std::function fn) = 0; - virtual void shutdown() = 0; - - virtual void on_idle(){}; -}; - -class ThreadPool : public TaskQueue { -public: - explicit ThreadPool(size_t n) : shutdown_(false) { - while (n) { - threads_.emplace_back(worker(*this)); - n--; - } - } - - ThreadPool(const ThreadPool &) = delete; - ~ThreadPool() override = default; - - void enqueue(std::function fn) override { - std::unique_lock lock(mutex_); - jobs_.push_back(std::move(fn)); - cond_.notify_one(); - } - - void shutdown() override { - // Stop all worker threads... - { - std::unique_lock lock(mutex_); - shutdown_ = true; - } - - cond_.notify_all(); - - // Join... - for (auto &t : threads_) { - t.join(); - } - } - -private: - struct worker { - explicit worker(ThreadPool &pool) : pool_(pool) {} - - void operator()() { - for (;;) { - std::function fn; - { - std::unique_lock lock(pool_.mutex_); - - pool_.cond_.wait( - lock, [&] { return !pool_.jobs_.empty() || pool_.shutdown_; }); - - if (pool_.shutdown_ && pool_.jobs_.empty()) { break; } - - fn = pool_.jobs_.front(); - pool_.jobs_.pop_front(); - } - - assert(true == static_cast(fn)); - fn(); - } - } - - ThreadPool &pool_; - }; - friend struct worker; - - std::vector threads_; - std::list> jobs_; - - bool shutdown_; - - std::condition_variable cond_; - std::mutex mutex_; -}; - -using Logger = std::function; - -using SocketOptions = std::function; - -inline void default_socket_options(socket_t sock) { - int yes = 1; -#ifdef _WIN32 - setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, reinterpret_cast(&yes), - sizeof(yes)); - setsockopt(sock, SOL_SOCKET, SO_EXCLUSIVEADDRUSE, - reinterpret_cast(&yes), sizeof(yes)); -#else -#ifdef SO_REUSEPORT - setsockopt(sock, SOL_SOCKET, SO_REUSEPORT, reinterpret_cast(&yes), - sizeof(yes)); -#else - setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, reinterpret_cast(&yes), - sizeof(yes)); -#endif -#endif -} - -class Server { -public: - using Handler = std::function; - using HandlerWithContentReader = std::function; - using Expect100ContinueHandler = - std::function; - - Server(); - - virtual ~Server(); - - virtual bool is_valid() const; - - Server &Get(const char *pattern, Handler handler); - Server &Post(const char *pattern, Handler handler); - Server &Post(const char *pattern, HandlerWithContentReader handler); - Server &Put(const char *pattern, Handler handler); - Server &Put(const char *pattern, HandlerWithContentReader handler); - Server &Patch(const char *pattern, Handler handler); - Server &Patch(const char *pattern, HandlerWithContentReader handler); - Server &Delete(const char *pattern, Handler handler); - Server &Delete(const char *pattern, HandlerWithContentReader handler); - Server &Options(const char *pattern, Handler handler); - - bool set_base_dir(const char *dir, const char *mount_point = nullptr); - bool set_mount_point(const char *mount_point, const char *dir, - Headers headers = Headers()); - bool remove_mount_point(const char *mount_point); - void set_file_extension_and_mimetype_mapping(const char *ext, - const char *mime); - void set_file_request_handler(Handler handler); - - void set_error_handler(Handler handler); - void set_expect_100_continue_handler(Expect100ContinueHandler handler); - void set_logger(Logger logger); - - void set_tcp_nodelay(bool on); - void set_socket_options(SocketOptions socket_options); - - void set_keep_alive_max_count(size_t count); - void set_keep_alive_timeout(time_t sec); - void set_read_timeout(time_t sec, time_t usec = 0); - void set_write_timeout(time_t sec, time_t usec = 0); - void set_idle_interval(time_t sec, time_t usec = 0); - - void set_payload_max_length(size_t length); - - bool bind_to_port(const char *host, int port, int socket_flags = 0); - int bind_to_any_port(const char *host, int socket_flags = 0); - bool listen_after_bind(); - - bool listen(const char *host, int port, int socket_flags = 0); - - bool is_running() const; - void stop(); - - std::function new_task_queue; - -protected: - bool process_request(Stream &strm, bool close_connection, - bool &connection_closed, - const std::function &setup_request); - - std::atomic svr_sock_; - size_t keep_alive_max_count_ = CPPHTTPLIB_KEEPALIVE_MAX_COUNT; - time_t keep_alive_timeout_sec_ = CPPHTTPLIB_KEEPALIVE_TIMEOUT_SECOND; - time_t read_timeout_sec_ = CPPHTTPLIB_READ_TIMEOUT_SECOND; - time_t read_timeout_usec_ = CPPHTTPLIB_READ_TIMEOUT_USECOND; - time_t write_timeout_sec_ = CPPHTTPLIB_WRITE_TIMEOUT_SECOND; - time_t write_timeout_usec_ = CPPHTTPLIB_WRITE_TIMEOUT_USECOND; - time_t idle_interval_sec_ = CPPHTTPLIB_IDLE_INTERVAL_SECOND; - time_t idle_interval_usec_ = CPPHTTPLIB_IDLE_INTERVAL_USECOND; - size_t payload_max_length_ = CPPHTTPLIB_PAYLOAD_MAX_LENGTH; - -private: - using Handlers = std::vector>; - using HandlersForContentReader = - std::vector>; - - socket_t create_server_socket(const char *host, int port, int socket_flags, - SocketOptions socket_options) const; - int bind_internal(const char *host, int port, int socket_flags); - bool listen_internal(); - - bool routing(Request &req, Response &res, Stream &strm); - bool handle_file_request(Request &req, Response &res, bool head = false); - bool dispatch_request(Request &req, Response &res, const Handlers &handlers); - bool - dispatch_request_for_content_reader(Request &req, Response &res, - ContentReader content_reader, - const HandlersForContentReader &handlers); - - bool parse_request_line(const char *s, Request &req); - void apply_ranges(const Request &req, Response &res, - std::string &content_type, std::string &boundary); - bool write_response(Stream &strm, bool close_connection, const Request &req, - Response &res); - bool write_response_with_content(Stream &strm, bool close_connection, - const Request &req, Response &res); - bool write_response_core(Stream &strm, bool close_connection, - const Request &req, Response &res, - bool need_apply_ranges); - bool write_content_with_provider(Stream &strm, const Request &req, - Response &res, const std::string &boundary, - const std::string &content_type); - bool read_content(Stream &strm, Request &req, Response &res); - bool - read_content_with_content_receiver(Stream &strm, Request &req, Response &res, - ContentReceiver receiver, - MultipartContentHeader multipart_header, - ContentReceiver multipart_receiver); - bool read_content_core(Stream &strm, Request &req, Response &res, - ContentReceiver receiver, - MultipartContentHeader mulitpart_header, - ContentReceiver multipart_receiver); - - virtual bool process_and_close_socket(socket_t sock); - - struct MountPointEntry { - std::string mount_point; - std::string base_dir; - Headers headers; - }; - std::vector base_dirs_; - - std::atomic is_running_; - std::map file_extension_and_mimetype_map_; - Handler file_request_handler_; - Handlers get_handlers_; - Handlers post_handlers_; - HandlersForContentReader post_handlers_for_content_reader_; - Handlers put_handlers_; - HandlersForContentReader put_handlers_for_content_reader_; - Handlers patch_handlers_; - HandlersForContentReader patch_handlers_for_content_reader_; - Handlers delete_handlers_; - HandlersForContentReader delete_handlers_for_content_reader_; - Handlers options_handlers_; - Handler error_handler_; - Logger logger_; - Expect100ContinueHandler expect_100_continue_handler_; - - bool tcp_nodelay_ = CPPHTTPLIB_TCP_NODELAY; - SocketOptions socket_options_ = default_socket_options; -}; - -enum HTTPError { - Success = 0, - Unknown, - Connection, - BindIPAddress, - Read, - Write, - ExceedRedirectCount, - Canceled, - SSLConnection, - SSLLoadingCerts, - SSLServerVerification, - UnsupportedMultipartBoundaryChars -}; - -class Result { -public: - Result(std::unique_ptr res, HTTPError err) - : res_(std::move(res)), err_(err) {} - operator bool() const { return res_ != nullptr; } - bool operator==(std::nullptr_t) const { return res_ == nullptr; } - bool operator!=(std::nullptr_t) const { return res_ != nullptr; } - const Response &value() const { return *res_; } - Response &value() { return *res_; } - const Response &operator*() const { return *res_; } - Response &operator*() { return *res_; } - const Response *operator->() const { return res_.get(); } - Response *operator->() { return res_.get(); } - HTTPError error() const { return err_; } - -private: - std::unique_ptr res_; - HTTPError err_; -}; - -class ClientImpl { -public: - explicit ClientImpl(const std::string &host); - - explicit ClientImpl(const std::string &host, int port); - - explicit ClientImpl(const std::string &host, int port, - const std::string &client_cert_path, - const std::string &client_key_path); - - virtual ~ClientImpl(); - - virtual bool is_valid() const; - - Result Get(const char *path); - Result Get(const char *path, const Headers &headers); - Result Get(const char *path, Progress progress); - Result Get(const char *path, const Headers &headers, Progress progress); - Result Get(const char *path, ContentReceiver content_receiver); - Result Get(const char *path, const Headers &headers, - ContentReceiver content_receiver); - Result Get(const char *path, ContentReceiver content_receiver, - Progress progress); - Result Get(const char *path, const Headers &headers, - ContentReceiver content_receiver, Progress progress); - Result Get(const char *path, ResponseHandler response_handler, - ContentReceiver content_receiver); - Result Get(const char *path, const Headers &headers, - ResponseHandler response_handler, - ContentReceiver content_receiver); - Result Get(const char *path, ResponseHandler response_handler, - ContentReceiver content_receiver, Progress progress); - Result Get(const char *path, const Headers &headers, - ResponseHandler response_handler, ContentReceiver content_receiver, - Progress progress); - - Result Head(const char *path); - Result Head(const char *path, const Headers &headers); - - Result Post(const char *path); - Result Post(const char *path, const std::string &body, - const char *content_type); - Result Post(const char *path, const Headers &headers, const std::string &body, - const char *content_type); - Result Post(const char *path, size_t content_length, - ContentProvider content_provider, const char *content_type); - Result Post(const char *path, const Headers &headers, size_t content_length, - ContentProvider content_provider, const char *content_type); - Result Post(const char *path, const Params ¶ms); - Result Post(const char *path, const Headers &headers, const Params ¶ms); - Result Post(const char *path, const MultipartFormDataItems &items); - Result Post(const char *path, const Headers &headers, - const MultipartFormDataItems &items); - Result Post(const char *path, const Headers &headers, - const MultipartFormDataItems &items, const std::string &boundary); - - Result Put(const char *path); - Result Put(const char *path, const std::string &body, - const char *content_type); - Result Put(const char *path, const Headers &headers, const std::string &body, - const char *content_type); - Result Put(const char *path, size_t content_length, - ContentProvider content_provider, const char *content_type); - Result Put(const char *path, const Headers &headers, size_t content_length, - ContentProvider content_provider, const char *content_type); - Result Put(const char *path, const Params ¶ms); - Result Put(const char *path, const Headers &headers, const Params ¶ms); - - Result Patch(const char *path, const std::string &body, - const char *content_type); - Result Patch(const char *path, const Headers &headers, - const std::string &body, const char *content_type); - Result Patch(const char *path, size_t content_length, - ContentProvider content_provider, const char *content_type); - Result Patch(const char *path, const Headers &headers, size_t content_length, - ContentProvider content_provider, const char *content_type); - - Result Delete(const char *path); - Result Delete(const char *path, const std::string &body, - const char *content_type); - Result Delete(const char *path, const Headers &headers); - Result Delete(const char *path, const Headers &headers, - const std::string &body, const char *content_type); - - Result Options(const char *path); - Result Options(const char *path, const Headers &headers); - - bool send(const Request &req, Response &res); - - size_t is_socket_open() const; - - void stop(); - - void set_default_headers(Headers headers); - - void set_tcp_nodelay(bool on); - void set_socket_options(SocketOptions socket_options); - - void set_connection_timeout(time_t sec, time_t usec = 0); - void set_read_timeout(time_t sec, time_t usec = 0); - void set_write_timeout(time_t sec, time_t usec = 0); - - void set_basic_auth(const char *username, const char *password); - void set_bearer_token_auth(const char *token); -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - void set_digest_auth(const char *username, const char *password); -#endif - - void set_keep_alive(bool on); - void set_follow_location(bool on); - - void set_compress(bool on); - - void set_decompress(bool on); - - void set_interface(const char *intf); - - void set_proxy(const char *host, int port); - void set_proxy_basic_auth(const char *username, const char *password); - void set_proxy_bearer_token_auth(const char *token); -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - void set_proxy_digest_auth(const char *username, const char *password); -#endif - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - void enable_server_certificate_verification(bool enabled); -#endif - - void set_logger(Logger logger); - -protected: - struct Socket { - socket_t sock = INVALID_SOCKET; -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - SSL *ssl = nullptr; -#endif - - bool is_open() const { return sock != INVALID_SOCKET; } - }; - - virtual bool create_and_connect_socket(Socket &socket); - virtual void close_socket(Socket &socket, bool process_socket_ret); - - bool process_request(Stream &strm, const Request &req, Response &res, - bool close_connection); - - HTTPError get_last_error() const; - - void copy_settings(const ClientImpl &rhs); - - // HTTPError state - mutable HTTPError error_ = HTTPError::Success; - - // Socket endoint information - const std::string host_; - const int port_; - const std::string host_and_port_; - - // Current open socket - Socket socket_; - mutable std::mutex socket_mutex_; - std::recursive_mutex request_mutex_; - - // Default headers - Headers default_headers_; - - // Settings - std::string client_cert_path_; - std::string client_key_path_; - - time_t connection_timeout_sec_ = CPPHTTPLIB_CONNECTION_TIMEOUT_SECOND; - time_t connection_timeout_usec_ = CPPHTTPLIB_CONNECTION_TIMEOUT_USECOND; - time_t read_timeout_sec_ = CPPHTTPLIB_READ_TIMEOUT_SECOND; - time_t read_timeout_usec_ = CPPHTTPLIB_READ_TIMEOUT_USECOND; - time_t write_timeout_sec_ = CPPHTTPLIB_WRITE_TIMEOUT_SECOND; - time_t write_timeout_usec_ = CPPHTTPLIB_WRITE_TIMEOUT_USECOND; - - std::string basic_auth_username_; - std::string basic_auth_password_; - std::string bearer_token_auth_token_; -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - std::string digest_auth_username_; - std::string digest_auth_password_; -#endif - - bool keep_alive_ = false; - bool follow_location_ = false; - - bool tcp_nodelay_ = CPPHTTPLIB_TCP_NODELAY; - SocketOptions socket_options_ = nullptr; - - bool compress_ = false; - bool decompress_ = true; - - std::string interface_; - - std::string proxy_host_; - int proxy_port_ = -1; - - std::string proxy_basic_auth_username_; - std::string proxy_basic_auth_password_; - std::string proxy_bearer_token_auth_token_; -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - std::string proxy_digest_auth_username_; - std::string proxy_digest_auth_password_; -#endif - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - bool server_certificate_verification_ = true; -#endif - - Logger logger_; - -private: - socket_t create_client_socket() const; - bool read_response_line(Stream &strm, Response &res); - bool write_request(Stream &strm, const Request &req, bool close_connection); - bool redirect(const Request &req, Response &res); - bool handle_request(Stream &strm, const Request &req, Response &res, - bool close_connection); - void stop_core(); - std::unique_ptr send_with_content_provider( - const char *method, const char *path, const Headers &headers, - const std::string &body, size_t content_length, - ContentProvider content_provider, const char *content_type); - - virtual bool process_socket(Socket &socket, - std::function callback); - virtual bool is_ssl() const; -}; - -class Client { -public: - // Universal interface - explicit Client(const char *scheme_host_port); - - explicit Client(const char *scheme_host_port, - const std::string &client_cert_path, - const std::string &client_key_path); - - // HTTP only interface - explicit Client(const std::string &host, int port); - - explicit Client(const std::string &host, int port, - const std::string &client_cert_path, - const std::string &client_key_path); - - ~Client(); - - bool is_valid() const; - - Result Get(const char *path); - Result Get(const char *path, const Headers &headers); - Result Get(const char *path, Progress progress); - Result Get(const char *path, const Headers &headers, Progress progress); - Result Get(const char *path, ContentReceiver content_receiver); - Result Get(const char *path, const Headers &headers, - ContentReceiver content_receiver); - Result Get(const char *path, ContentReceiver content_receiver, - Progress progress); - Result Get(const char *path, const Headers &headers, - ContentReceiver content_receiver, Progress progress); - Result Get(const char *path, ResponseHandler response_handler, - ContentReceiver content_receiver); - Result Get(const char *path, const Headers &headers, - ResponseHandler response_handler, - ContentReceiver content_receiver); - Result Get(const char *path, const Headers &headers, - ResponseHandler response_handler, ContentReceiver content_receiver, - Progress progress); - Result Get(const char *path, ResponseHandler response_handler, - ContentReceiver content_receiver, Progress progress); - - Result Head(const char *path); - Result Head(const char *path, const Headers &headers); - - Result Post(const char *path); - Result Post(const char *path, const std::string &body, - const char *content_type); - Result Post(const char *path, const Headers &headers, const std::string &body, - const char *content_type); - Result Post(const char *path, size_t content_length, - ContentProvider content_provider, const char *content_type); - Result Post(const char *path, const Headers &headers, size_t content_length, - ContentProvider content_provider, const char *content_type); - Result Post(const char *path, const Params ¶ms); - Result Post(const char *path, const Headers &headers, const Params ¶ms); - Result Post(const char *path, const MultipartFormDataItems &items); - Result Post(const char *path, const Headers &headers, - const MultipartFormDataItems &items); - Result Post(const char *path, const Headers &headers, - const MultipartFormDataItems &items, const std::string &boundary); - Result Put(const char *path); - Result Put(const char *path, const std::string &body, - const char *content_type); - Result Put(const char *path, const Headers &headers, const std::string &body, - const char *content_type); - Result Put(const char *path, size_t content_length, - ContentProvider content_provider, const char *content_type); - Result Put(const char *path, const Headers &headers, size_t content_length, - ContentProvider content_provider, const char *content_type); - Result Put(const char *path, const Params ¶ms); - Result Put(const char *path, const Headers &headers, const Params ¶ms); - Result Patch(const char *path, const std::string &body, - const char *content_type); - Result Patch(const char *path, const Headers &headers, - const std::string &body, const char *content_type); - Result Patch(const char *path, size_t content_length, - ContentProvider content_provider, const char *content_type); - Result Patch(const char *path, const Headers &headers, size_t content_length, - ContentProvider content_provider, const char *content_type); - - Result Delete(const char *path); - Result Delete(const char *path, const std::string &body, - const char *content_type); - Result Delete(const char *path, const Headers &headers); - Result Delete(const char *path, const Headers &headers, - const std::string &body, const char *content_type); - - Result Options(const char *path); - Result Options(const char *path, const Headers &headers); - - bool send(const Request &req, Response &res); - - size_t is_socket_open() const; - - void stop(); - - void set_default_headers(Headers headers); - - void set_tcp_nodelay(bool on); - void set_socket_options(SocketOptions socket_options); - - void set_connection_timeout(time_t sec, time_t usec = 0); - void set_read_timeout(time_t sec, time_t usec = 0); - void set_write_timeout(time_t sec, time_t usec = 0); - - void set_basic_auth(const char *username, const char *password); - void set_bearer_token_auth(const char *token); -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - void set_digest_auth(const char *username, const char *password); -#endif - - void set_keep_alive(bool on); - void set_follow_location(bool on); - - void set_compress(bool on); - - void set_decompress(bool on); - - void set_interface(const char *intf); - - void set_proxy(const char *host, int port); - void set_proxy_basic_auth(const char *username, const char *password); - void set_proxy_bearer_token_auth(const char *token); -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - void set_proxy_digest_auth(const char *username, const char *password); -#endif - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - void enable_server_certificate_verification(bool enabled); -#endif - - void set_logger(Logger logger); - - // SSL -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - void set_ca_cert_path(const char *ca_cert_file_path, - const char *ca_cert_dir_path = nullptr); - - void set_ca_cert_store(X509_STORE *ca_cert_store); - - long get_openssl_verify_result() const; - - SSL_CTX *ssl_context() const; -#endif - -private: - std::unique_ptr cli_; - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - bool is_ssl_ = false; -#endif -}; - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT -class SSLServer : public Server { -public: - SSLServer(const char *cert_path, const char *private_key_path, - const char *client_ca_cert_file_path = nullptr, - const char *client_ca_cert_dir_path = nullptr); - - SSLServer(X509 *cert, EVP_PKEY *private_key, - X509_STORE *client_ca_cert_store = nullptr); - - ~SSLServer() override; - - bool is_valid() const override; - -private: - bool process_and_close_socket(socket_t sock) override; - - SSL_CTX *ctx_; - std::mutex ctx_mutex_; -}; - -class SSLClient : public ClientImpl { -public: - explicit SSLClient(const std::string &host); - - explicit SSLClient(const std::string &host, int port); - - explicit SSLClient(const std::string &host, int port, - const std::string &client_cert_path, - const std::string &client_key_path); - - explicit SSLClient(const std::string &host, int port, X509 *client_cert, - EVP_PKEY *client_key); - - ~SSLClient() override; - - bool is_valid() const override; - - void set_ca_cert_path(const char *ca_cert_file_path, - const char *ca_cert_dir_path = nullptr); - - void set_ca_cert_store(X509_STORE *ca_cert_store); - - long get_openssl_verify_result() const; - - SSL_CTX *ssl_context() const; - -private: - bool create_and_connect_socket(Socket &socket) override; - void close_socket(Socket &socket, bool process_socket_ret) override; - - bool process_socket(Socket &socket, - std::function callback) override; - bool is_ssl() const override; - - bool connect_with_proxy(Socket &sock, Response &res, bool &success); - bool initialize_ssl(Socket &socket); - - bool load_certs(); - - bool verify_host(X509 *server_cert) const; - bool verify_host_with_subject_alt_name(X509 *server_cert) const; - bool verify_host_with_common_name(X509 *server_cert) const; - bool check_host_name(const char *pattern, size_t pattern_len) const; - - SSL_CTX *ctx_; - std::mutex ctx_mutex_; - std::once_flag initialize_cert_; - - std::vector host_components_; - - std::string ca_cert_file_path_; - std::string ca_cert_dir_path_; - long verify_result_ = 0; - - friend class ClientImpl; -}; -#endif - -// ---------------------------------------------------------------------------- - -/* - * Implementation - */ - -namespace detail { - -inline bool is_hex(char c, int &v) { - if (0x20 <= c && isdigit(c)) { - v = c - '0'; - return true; - } else if ('A' <= c && c <= 'F') { - v = c - 'A' + 10; - return true; - } else if ('a' <= c && c <= 'f') { - v = c - 'a' + 10; - return true; - } - return false; -} - -inline bool from_hex_to_i(const std::string &s, size_t i, size_t cnt, - int &val) { - if (i >= s.size()) { return false; } - - val = 0; - for (; cnt; i++, cnt--) { - if (!s[i]) { return false; } - int v = 0; - if (is_hex(s[i], v)) { - val = val * 16 + v; - } else { - return false; - } - } - return true; -} - -inline std::string from_i_to_hex(size_t n) { - const char *charset = "0123456789abcdef"; - std::string ret; - do { - ret = charset[n & 15] + ret; - n >>= 4; - } while (n > 0); - return ret; -} - -inline bool start_with(const std::string &a, const std::string &b) { - if (a.size() < b.size()) { return false; } - for (size_t i = 0; i < b.size(); i++) { - if (::tolower(a[i]) != ::tolower(b[i])) { return false; } - } - return true; -} - -inline size_t to_utf8(int code, char *buff) { - if (code < 0x0080) { - buff[0] = (code & 0x7F); - return 1; - } else if (code < 0x0800) { - buff[0] = static_cast(0xC0 | ((code >> 6) & 0x1F)); - buff[1] = static_cast(0x80 | (code & 0x3F)); - return 2; - } else if (code < 0xD800) { - buff[0] = static_cast(0xE0 | ((code >> 12) & 0xF)); - buff[1] = static_cast(0x80 | ((code >> 6) & 0x3F)); - buff[2] = static_cast(0x80 | (code & 0x3F)); - return 3; - } else if (code < 0xE000) { // D800 - DFFF is invalid... - return 0; - } else if (code < 0x10000) { - buff[0] = static_cast(0xE0 | ((code >> 12) & 0xF)); - buff[1] = static_cast(0x80 | ((code >> 6) & 0x3F)); - buff[2] = static_cast(0x80 | (code & 0x3F)); - return 3; - } else if (code < 0x110000) { - buff[0] = static_cast(0xF0 | ((code >> 18) & 0x7)); - buff[1] = static_cast(0x80 | ((code >> 12) & 0x3F)); - buff[2] = static_cast(0x80 | ((code >> 6) & 0x3F)); - buff[3] = static_cast(0x80 | (code & 0x3F)); - return 4; - } - - // NOTREACHED - return 0; -} - -// NOTE: This code came up with the following stackoverflow post: -// https://stackoverflow.com/questions/180947/base64-decode-snippet-in-c -inline std::string base64_encode(const std::string &in) { - static const auto lookup = - "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; - - std::string out; - out.reserve(in.size()); - - int val = 0; - int valb = -6; - - for (auto c : in) { - val = (val << 8) + static_cast(c); - valb += 8; - while (valb >= 0) { - out.push_back(lookup[(val >> valb) & 0x3F]); - valb -= 6; - } - } - - if (valb > -6) { out.push_back(lookup[((val << 8) >> (valb + 8)) & 0x3F]); } - - while (out.size() % 4) { - out.push_back('='); - } - - return out; -} - -inline bool is_file(const std::string &path) { - struct stat st; - return stat(path.c_str(), &st) >= 0 && S_ISREG(st.st_mode); -} - -inline bool is_dir(const std::string &path) { - struct stat st; - return stat(path.c_str(), &st) >= 0 && S_ISDIR(st.st_mode); -} - -inline bool is_valid_path(const std::string &path) { - size_t level = 0; - size_t i = 0; - - // Skip slash - while (i < path.size() && path[i] == '/') { - i++; - } - - while (i < path.size()) { - // Read component - auto beg = i; - while (i < path.size() && path[i] != '/') { - i++; - } - - auto len = i - beg; - assert(len > 0); - - if (!path.compare(beg, len, ".")) { - ; - } else if (!path.compare(beg, len, "..")) { - if (level == 0) { return false; } - level--; - } else { - level++; - } - - // Skip slash - while (i < path.size() && path[i] == '/') { - i++; - } - } - - return true; -} - -inline std::string encode_url(const std::string &s) { - std::string result; - - for (size_t i = 0; s[i]; i++) { - switch (s[i]) { - case ' ': result += "%20"; break; - case '+': result += "%2B"; break; - case '\r': result += "%0D"; break; - case '\n': result += "%0A"; break; - case '\'': result += "%27"; break; - case ',': result += "%2C"; break; - // case ':': result += "%3A"; break; // ok? probably... - case ';': result += "%3B"; break; - default: - auto c = static_cast(s[i]); - if (c >= 0x80) { - result += '%'; - char hex[4]; - auto len = snprintf(hex, sizeof(hex) - 1, "%02X", c); - assert(len == 2); - result.append(hex, static_cast(len)); - } else { - result += s[i]; - } - break; - } - } - - return result; -} - -inline std::string decode_url(const std::string &s, - bool convert_plus_to_space) { - std::string result; - - for (size_t i = 0; i < s.size(); i++) { - if (s[i] == '%' && i + 1 < s.size()) { - if (s[i + 1] == 'u') { - int val = 0; - if (from_hex_to_i(s, i + 2, 4, val)) { - // 4 digits Unicode codes - char buff[4]; - size_t len = to_utf8(val, buff); - if (len > 0) { result.append(buff, len); } - i += 5; // 'u0000' - } else { - result += s[i]; - } - } else { - int val = 0; - if (from_hex_to_i(s, i + 1, 2, val)) { - // 2 digits hex codes - result += static_cast(val); - i += 2; // '00' - } else { - result += s[i]; - } - } - } else if (convert_plus_to_space && s[i] == '+') { - result += ' '; - } else { - result += s[i]; - } - } - - return result; -} - -inline void read_file(const std::string &path, std::string &out) { - std::ifstream fs(path, std::ios_base::binary); - fs.seekg(0, std::ios_base::end); - auto size = fs.tellg(); - fs.seekg(0); - out.resize(static_cast(size)); - fs.read(&out[0], static_cast(size)); -} - -inline std::string file_extension(const std::string &path) { - std::smatch m; - static auto re = std::regex("\\.([a-zA-Z0-9]+)$"); - if (std::regex_search(path, m, re)) { return m[1].str(); } - return std::string(); -} - -inline bool is_space_or_tab(char c) { return c == ' ' || c == '\t'; } - -inline std::pair trim(const char *b, const char *e, size_t left, - size_t right) { - while (b + left < e && is_space_or_tab(b[left])) { - left++; - } - while (right > 0 && is_space_or_tab(b[right - 1])) { - right--; - } - return std::make_pair(left, right); -} - -inline std::string trim_copy(const std::string &s) { - auto r = trim(s.data(), s.data() + s.size(), 0, s.size()); - return s.substr(r.first, r.second - r.first); -} - -template void split(const char *b, const char *e, char d, Fn fn) { - size_t i = 0; - size_t beg = 0; - - while (e ? (b + i < e) : (b[i] != '\0')) { - if (b[i] == d) { - auto r = trim(b, e, beg, i); - if (r.first < r.second) { fn(&b[r.first], &b[r.second]); } - beg = i + 1; - } - i++; - } - - if (i) { - auto r = trim(b, e, beg, i); - if (r.first < r.second) { fn(&b[r.first], &b[r.second]); } - } -} - -// NOTE: until the read size reaches `fixed_buffer_size`, use `fixed_buffer` -// to store data. The call can set memory on stack for performance. -class stream_line_reader { -public: - stream_line_reader(Stream &strm, char *fixed_buffer, size_t fixed_buffer_size) - : strm_(strm), fixed_buffer_(fixed_buffer), - fixed_buffer_size_(fixed_buffer_size) {} - - const char *ptr() const { - if (glowable_buffer_.empty()) { - return fixed_buffer_; - } else { - return glowable_buffer_.data(); - } - } - - size_t size() const { - if (glowable_buffer_.empty()) { - return fixed_buffer_used_size_; - } else { - return glowable_buffer_.size(); - } - } - - bool end_with_crlf() const { - auto end = ptr() + size(); - return size() >= 2 && end[-2] == '\r' && end[-1] == '\n'; - } - - bool getline() { - fixed_buffer_used_size_ = 0; - glowable_buffer_.clear(); - - for (size_t i = 0;; i++) { - char byte; - auto n = strm_.read(&byte, 1); - - if (n < 0) { - return false; - } else if (n == 0) { - if (i == 0) { - return false; - } else { - break; - } - } - - append(byte); - - if (byte == '\n') { break; } - } - - return true; - } - -private: - void append(char c) { - if (fixed_buffer_used_size_ < fixed_buffer_size_ - 1) { - fixed_buffer_[fixed_buffer_used_size_++] = c; - fixed_buffer_[fixed_buffer_used_size_] = '\0'; - } else { - if (glowable_buffer_.empty()) { - assert(fixed_buffer_[fixed_buffer_used_size_] == '\0'); - glowable_buffer_.assign(fixed_buffer_, fixed_buffer_used_size_); - } - glowable_buffer_ += c; - } - } - - Stream &strm_; - char *fixed_buffer_; - const size_t fixed_buffer_size_; - size_t fixed_buffer_used_size_ = 0; - std::string glowable_buffer_; -}; - -inline int close_socket(socket_t sock) { -#ifdef _WIN32 - return closesocket(sock); -#else - return close(sock); -#endif -} - -template inline ssize_t handle_EINTR(T fn) { - ssize_t res = false; - while (true) { - res = fn(); - if (res < 0 && errno == EINTR) { continue; } - break; - } - return res; -} - -inline ssize_t select_read(socket_t sock, time_t sec, time_t usec) { -#ifdef CPPHTTPLIB_USE_POLL - struct pollfd pfd_read; - pfd_read.fd = sock; - pfd_read.events = POLLIN; - - auto timeout = static_cast(sec * 1000 + usec / 1000); - - return handle_EINTR([&]() { return poll(&pfd_read, 1, timeout); }); -#else - fd_set fds; - FD_ZERO(&fds); - FD_SET(sock, &fds); - - timeval tv; - tv.tv_sec = static_cast(sec); - tv.tv_usec = static_cast(usec); - - return handle_EINTR([&]() { - return select(static_cast(sock + 1), &fds, nullptr, nullptr, &tv); - }); -#endif -} - -inline ssize_t select_write(socket_t sock, time_t sec, time_t usec) { -#ifdef CPPHTTPLIB_USE_POLL - struct pollfd pfd_read; - pfd_read.fd = sock; - pfd_read.events = POLLOUT; - - auto timeout = static_cast(sec * 1000 + usec / 1000); - - return handle_EINTR([&]() { return poll(&pfd_read, 1, timeout); }); -#else - fd_set fds; - FD_ZERO(&fds); - FD_SET(sock, &fds); - - timeval tv; - tv.tv_sec = static_cast(sec); - tv.tv_usec = static_cast(usec); - - return handle_EINTR([&]() { - return select(static_cast(sock + 1), nullptr, &fds, nullptr, &tv); - }); -#endif -} - -inline bool wait_until_socket_is_ready(socket_t sock, time_t sec, time_t usec) { -#ifdef CPPHTTPLIB_USE_POLL - struct pollfd pfd_read; - pfd_read.fd = sock; - pfd_read.events = POLLIN | POLLOUT; - - auto timeout = static_cast(sec * 1000 + usec / 1000); - - auto poll_res = handle_EINTR([&]() { return poll(&pfd_read, 1, timeout); }); - - if (poll_res > 0 && pfd_read.revents & (POLLIN | POLLOUT)) { - int error = 0; - socklen_t len = sizeof(error); - auto res = getsockopt(sock, SOL_SOCKET, SO_ERROR, - reinterpret_cast(&error), &len); - return res >= 0 && !error; - } - return false; -#else - fd_set fdsr; - FD_ZERO(&fdsr); - FD_SET(sock, &fdsr); - - auto fdsw = fdsr; - auto fdse = fdsr; - - timeval tv; - tv.tv_sec = static_cast(sec); - tv.tv_usec = static_cast(usec); - - auto ret = handle_EINTR([&]() { - return select(static_cast(sock + 1), &fdsr, &fdsw, &fdse, &tv); - }); - - if (ret > 0 && (FD_ISSET(sock, &fdsr) || FD_ISSET(sock, &fdsw))) { - int error = 0; - socklen_t len = sizeof(error); - return getsockopt(sock, SOL_SOCKET, SO_ERROR, - reinterpret_cast(&error), &len) >= 0 && - !error; - } - return false; -#endif -} - -class SocketStream : public Stream { -public: - SocketStream(socket_t sock, time_t read_timeout_sec, time_t read_timeout_usec, - time_t write_timeout_sec, time_t write_timeout_usec); - ~SocketStream() override; - - bool is_readable() const override; - bool is_writable() const override; - ssize_t read(char *ptr, size_t size) override; - ssize_t write(const char *ptr, size_t size) override; - void get_remote_ip_and_port(std::string &ip, int &port) const override; - -private: - socket_t sock_; - time_t read_timeout_sec_; - time_t read_timeout_usec_; - time_t write_timeout_sec_; - time_t write_timeout_usec_; -}; - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT -class SSLSocketStream : public Stream { -public: - SSLSocketStream(socket_t sock, SSL *ssl, time_t read_timeout_sec, - time_t read_timeout_usec, time_t write_timeout_sec, - time_t write_timeout_usec); - ~SSLSocketStream() override; - - bool is_readable() const override; - bool is_writable() const override; - ssize_t read(char *ptr, size_t size) override; - ssize_t write(const char *ptr, size_t size) override; - void get_remote_ip_and_port(std::string &ip, int &port) const override; - -private: - socket_t sock_; - SSL *ssl_; - time_t read_timeout_sec_; - time_t read_timeout_usec_; - time_t write_timeout_sec_; - time_t write_timeout_usec_; -}; -#endif - -class BufferStream : public Stream { -public: - BufferStream() = default; - ~BufferStream() override = default; - - bool is_readable() const override; - bool is_writable() const override; - ssize_t read(char *ptr, size_t size) override; - ssize_t write(const char *ptr, size_t size) override; - void get_remote_ip_and_port(std::string &ip, int &port) const override; - - const std::string &get_buffer() const; - -private: - std::string buffer; - size_t position = 0; -}; - -inline bool keep_alive(socket_t sock, time_t keep_alive_timeout_sec) { - using namespace std::chrono; - auto start = steady_clock::now(); - while (true) { - auto val = select_read(sock, 0, 10000); - if (val < 0) { - return false; - } else if (val == 0) { - auto current = steady_clock::now(); - auto duration = duration_cast(current - start); - auto timeout = keep_alive_timeout_sec * 1000; - if (duration.count() > timeout) { return false; } - std::this_thread::sleep_for(std::chrono::milliseconds(1)); - } else { - return true; - } - } -} - -template -inline bool -process_server_socket_core(socket_t sock, size_t keep_alive_max_count, - time_t keep_alive_timeout_sec, T callback) { - assert(keep_alive_max_count > 0); - auto ret = false; - auto count = keep_alive_max_count; - while (count > 0 && keep_alive(sock, keep_alive_timeout_sec)) { - auto close_connection = count == 1; - auto connection_closed = false; - ret = callback(close_connection, connection_closed); - if (!ret || connection_closed) { break; } - count--; - } - return ret; -} - -template -inline bool -process_server_socket(socket_t sock, size_t keep_alive_max_count, - time_t keep_alive_timeout_sec, time_t read_timeout_sec, - time_t read_timeout_usec, time_t write_timeout_sec, - time_t write_timeout_usec, T callback) { - return process_server_socket_core( - sock, keep_alive_max_count, keep_alive_timeout_sec, - [&](bool close_connection, bool &connection_closed) { - SocketStream strm(sock, read_timeout_sec, read_timeout_usec, - write_timeout_sec, write_timeout_usec); - return callback(strm, close_connection, connection_closed); - }); -} - -template -inline bool process_client_socket(socket_t sock, time_t read_timeout_sec, - time_t read_timeout_usec, - time_t write_timeout_sec, - time_t write_timeout_usec, T callback) { - SocketStream strm(sock, read_timeout_sec, read_timeout_usec, - write_timeout_sec, write_timeout_usec); - return callback(strm); -} - -inline int shutdown_socket(socket_t sock) { -#ifdef _WIN32 - return shutdown(sock, SD_BOTH); -#else - return shutdown(sock, SHUT_RDWR); -#endif -} - -template -socket_t create_socket(const char *host, int port, int socket_flags, - bool tcp_nodelay, SocketOptions socket_options, - BindOrConnect bind_or_connect) { - // Get address info - struct addrinfo hints; - struct addrinfo *result; - - memset(&hints, 0, sizeof(struct addrinfo)); - hints.ai_family = AF_UNSPEC; - hints.ai_socktype = SOCK_STREAM; - hints.ai_flags = socket_flags; - hints.ai_protocol = 0; - - auto service = std::to_string(port); - - if (getaddrinfo(host, service.c_str(), &hints, &result)) { -#ifdef __linux__ - res_init(); -#endif - return INVALID_SOCKET; - } - - for (auto rp = result; rp; rp = rp->ai_next) { - // Create a socket -#ifdef _WIN32 - auto sock = WSASocketW(rp->ai_family, rp->ai_socktype, rp->ai_protocol, - nullptr, 0, WSA_FLAG_NO_HANDLE_INHERIT); - /** - * Since the WSA_FLAG_NO_HANDLE_INHERIT is only supported on Windows 7 SP1 - * and above the socket creation fails on older Windows Systems. - * - * Let's try to create a socket the old way in this case. - * - * Reference: - * https://docs.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-wsasocketa - * - * WSA_FLAG_NO_HANDLE_INHERIT: - * This flag is supported on Windows 7 with SP1, Windows Server 2008 R2 with - * SP1, and later - * - */ - if (sock == INVALID_SOCKET) { - sock = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol); - } -#else - auto sock = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol); -#endif - if (sock == INVALID_SOCKET) { continue; } - -#ifndef _WIN32 - if (fcntl(sock, F_SETFD, FD_CLOEXEC) == -1) { continue; } -#endif - - if (tcp_nodelay) { - int yes = 1; - setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, reinterpret_cast(&yes), - sizeof(yes)); - } - - if (socket_options) { socket_options(sock); } - - if (rp->ai_family == AF_INET6) { - int no = 0; - setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY, reinterpret_cast(&no), - sizeof(no)); - } - - // bind or connect - if (bind_or_connect(sock, *rp)) { - freeaddrinfo(result); - return sock; - } - - close_socket(sock); - } - - freeaddrinfo(result); - return INVALID_SOCKET; -} - -inline void set_nonblocking(socket_t sock, bool nonblocking) { -#ifdef _WIN32 - auto flags = nonblocking ? 1UL : 0UL; - ioctlsocket(sock, FIONBIO, &flags); -#else - auto flags = fcntl(sock, F_GETFL, 0); - fcntl(sock, F_SETFL, - nonblocking ? (flags | O_NONBLOCK) : (flags & (~O_NONBLOCK))); -#endif -} - -inline bool is_connection_error() { -#ifdef _WIN32 - return WSAGetLastError() != WSAEWOULDBLOCK; -#else - return errno != EINPROGRESS; -#endif -} - -inline bool bind_ip_address(socket_t sock, const char *host) { - struct addrinfo hints; - struct addrinfo *result; - - memset(&hints, 0, sizeof(struct addrinfo)); - hints.ai_family = AF_UNSPEC; - hints.ai_socktype = SOCK_STREAM; - hints.ai_protocol = 0; - - if (getaddrinfo(host, "0", &hints, &result)) { return false; } - - auto ret = false; - for (auto rp = result; rp; rp = rp->ai_next) { - const auto &ai = *rp; - if (!::bind(sock, ai.ai_addr, static_cast(ai.ai_addrlen))) { - ret = true; - break; - } - } - - freeaddrinfo(result); - return ret; -} - -#if !defined _WIN32 && !defined ANDROID -#define USE_IF2IP -#endif - -#ifdef USE_IF2IP -inline std::string if2ip(const std::string &ifn) { - struct ifaddrs *ifap; - getifaddrs(&ifap); - for (auto ifa = ifap; ifa; ifa = ifa->ifa_next) { - if (ifa->ifa_addr && ifn == ifa->ifa_name) { - if (ifa->ifa_addr->sa_family == AF_INET) { - auto sa = reinterpret_cast(ifa->ifa_addr); - char buf[INET_ADDRSTRLEN]; - if (inet_ntop(AF_INET, &sa->sin_addr, buf, INET_ADDRSTRLEN)) { - freeifaddrs(ifap); - return std::string(buf, INET_ADDRSTRLEN); - } - } - } - } - freeifaddrs(ifap); - return std::string(); -} -#endif - -inline socket_t create_client_socket(const char *host, int port, - bool tcp_nodelay, - SocketOptions socket_options, - time_t timeout_sec, time_t timeout_usec, - const std::string &intf, HTTPError &error) { - auto sock = create_socket( - host, port, 0, tcp_nodelay, std::move(socket_options), - [&](socket_t sock, struct addrinfo &ai) -> bool { - if (!intf.empty()) { -#ifdef USE_IF2IP - auto ip = if2ip(intf); - if (ip.empty()) { ip = intf; } - if (!bind_ip_address(sock, ip.c_str())) { - error = HTTPError::BindIPAddress; - return false; - } -#endif - } - - set_nonblocking(sock, true); - - auto ret = - ::connect(sock, ai.ai_addr, static_cast(ai.ai_addrlen)); - - if (ret < 0) { - if (is_connection_error() || - !wait_until_socket_is_ready(sock, timeout_sec, timeout_usec)) { - close_socket(sock); - error = HTTPError::Connection; - return false; - } - } - - set_nonblocking(sock, false); - error = HTTPError::Success; - return true; - }); - - if (sock != INVALID_SOCKET) { - error = HTTPError::Success; - } else { - if (error == HTTPError::Success) { error = HTTPError::Connection; } - } - - return sock; -} - -inline void get_remote_ip_and_port(const struct sockaddr_storage &addr, - socklen_t addr_len, std::string &ip, - int &port) { - if (addr.ss_family == AF_INET) { - port = ntohs(reinterpret_cast(&addr)->sin_port); - } else if (addr.ss_family == AF_INET6) { - port = - ntohs(reinterpret_cast(&addr)->sin6_port); - } - - std::array ipstr{}; - if (!getnameinfo(reinterpret_cast(&addr), addr_len, - ipstr.data(), static_cast(ipstr.size()), nullptr, - 0, NI_NUMERICHOST)) { - ip = ipstr.data(); - } -} - -inline void get_remote_ip_and_port(socket_t sock, std::string &ip, int &port) { - struct sockaddr_storage addr; - socklen_t addr_len = sizeof(addr); - - if (!getpeername(sock, reinterpret_cast(&addr), - &addr_len)) { - get_remote_ip_and_port(addr, addr_len, ip, port); - } -} - -inline const char * -find_content_type(const std::string &path, - const std::map &user_data) { - auto ext = file_extension(path); - - auto it = user_data.find(ext); - if (it != user_data.end()) { return it->second.c_str(); } - - if (ext == "txt") { - return "text/plain"; - } else if (ext == "html" || ext == "htm") { - return "text/html"; - } else if (ext == "css") { - return "text/css"; - } else if (ext == "jpeg" || ext == "jpg") { - return "image/jpg"; - } else if (ext == "png") { - return "image/png"; - } else if (ext == "gif") { - return "image/gif"; - } else if (ext == "svg") { - return "image/svg+xml"; - } else if (ext == "ico") { - return "image/x-icon"; - } else if (ext == "json") { - return "application/json"; - } else if (ext == "pdf") { - return "application/pdf"; - } else if (ext == "js") { - return "application/javascript"; - } else if (ext == "wasm") { - return "application/wasm"; - } else if (ext == "xml") { - return "application/xml"; - } else if (ext == "xhtml") { - return "application/xhtml+xml"; - } - return nullptr; -} - -inline const char *status_message(int status) { - switch (status) { - case 100: return "Continue"; - case 101: return "Switching Protocol"; - case 102: return "Processing"; - case 103: return "Early Hints"; - case 200: return "OK"; - case 201: return "Created"; - case 202: return "Accepted"; - case 203: return "Non-Authoritative Information"; - case 204: return "No Content"; - case 205: return "Reset Content"; - case 206: return "Partial Content"; - case 207: return "Multi-Status"; - case 208: return "Already Reported"; - case 226: return "IM Used"; - case 300: return "Multiple Choice"; - case 301: return "Moved Permanently"; - case 302: return "Found"; - case 303: return "See Other"; - case 304: return "Not Modified"; - case 305: return "Use Proxy"; - case 306: return "unused"; - case 307: return "Temporary Redirect"; - case 308: return "Permanent Redirect"; - case 400: return "Bad Request"; - case 401: return "Unauthorized"; - case 402: return "Payment Required"; - case 403: return "Forbidden"; - case 404: return "Not Found"; - case 405: return "Method Not Allowed"; - case 406: return "Not Acceptable"; - case 407: return "Proxy Authentication Required"; - case 408: return "Request Timeout"; - case 409: return "Conflict"; - case 410: return "Gone"; - case 411: return "Length Required"; - case 412: return "Precondition Failed"; - case 413: return "Payload Too Large"; - case 414: return "URI Too Long"; - case 415: return "Unsupported Media Type"; - case 416: return "Range Not Satisfiable"; - case 417: return "Expectation Failed"; - case 418: return "I'm a teapot"; - case 421: return "Misdirected Request"; - case 422: return "Unprocessable Entity"; - case 423: return "Locked"; - case 424: return "Failed Dependency"; - case 425: return "Too Early"; - case 426: return "Upgrade Required"; - case 428: return "Precondition Required"; - case 429: return "Too Many Requests"; - case 431: return "Request Header Fields Too Large"; - case 451: return "Unavailable For Legal Reasons"; - case 501: return "Not Implemented"; - case 502: return "Bad Gateway"; - case 503: return "Service Unavailable"; - case 504: return "Gateway Timeout"; - case 505: return "HTTP Version Not Supported"; - case 506: return "Variant Also Negotiates"; - case 507: return "Insufficient Storage"; - case 508: return "Loop Detected"; - case 510: return "Not Extended"; - case 511: return "Network Authentication Required"; - - default: - case 500: return "Internal Server HTTPError"; - } -} - -inline bool can_compress_content_type(const std::string &content_type) { - return (!content_type.find("text/") && content_type != "text/event-stream") || - content_type == "image/svg+xml" || - content_type == "application/javascript" || - content_type == "application/json" || - content_type == "application/xml" || - content_type == "application/xhtml+xml"; -} - -enum class EncodingType { None = 0, Gzip, Brotli }; - -inline EncodingType encoding_type(const Request &req, const Response &res) { - auto ret = - detail::can_compress_content_type(res.get_header_value("Content-Type")); - if (!ret) { return EncodingType::None; } - - const auto &s = req.get_header_value("Accept-Encoding"); - (void)(s); - -#ifdef CPPHTTPLIB_BROTLI_SUPPORT - // TODO: 'Accept-Encoding' has br, not br;q=0 - ret = s.find("br") != std::string::npos; - if (ret) { return EncodingType::Brotli; } -#endif - -#ifdef CPPHTTPLIB_ZLIB_SUPPORT - // TODO: 'Accept-Encoding' has gzip, not gzip;q=0 - ret = s.find("gzip") != std::string::npos; - if (ret) { return EncodingType::Gzip; } -#endif - - return EncodingType::None; -} - -class compressor { -public: - virtual ~compressor(){}; - - typedef std::function Callback; - virtual bool compress(const char *data, size_t data_length, bool last, - Callback callback) = 0; -}; - -class decompressor { -public: - virtual ~decompressor() {} - - virtual bool is_valid() const = 0; - - typedef std::function Callback; - virtual bool decompress(const char *data, size_t data_length, - Callback callback) = 0; -}; - -class nocompressor : public compressor { -public: - ~nocompressor(){}; - - bool compress(const char *data, size_t data_length, bool /*last*/, - Callback callback) override { - if (!data_length) { return true; } - return callback(data, data_length); - } -}; - -#ifdef CPPHTTPLIB_ZLIB_SUPPORT -class gzip_compressor : public compressor { -public: - gzip_compressor() { - std::memset(&strm_, 0, sizeof(strm_)); - strm_.zalloc = Z_NULL; - strm_.zfree = Z_NULL; - strm_.opaque = Z_NULL; - - is_valid_ = deflateInit2(&strm_, Z_DEFAULT_COMPRESSION, Z_DEFLATED, 31, 8, - Z_DEFAULT_STRATEGY) == Z_OK; - } - - ~gzip_compressor() { deflateEnd(&strm_); } - - bool compress(const char *data, size_t data_length, bool last, - Callback callback) override { - assert(is_valid_); - - auto flush = last ? Z_FINISH : Z_NO_FLUSH; - - strm_.avail_in = static_cast(data_length); - strm_.next_in = const_cast(reinterpret_cast(data)); - - int ret = Z_OK; - - std::array buff{}; - do { - strm_.avail_out = buff.size(); - strm_.next_out = reinterpret_cast(buff.data()); - - ret = deflate(&strm_, flush); - assert(ret != Z_STREAM_ERROR); - - if (!callback(buff.data(), buff.size() - strm_.avail_out)) { - return false; - } - } while (strm_.avail_out == 0); - - assert((last && ret == Z_STREAM_END) || (!last && ret == Z_OK)); - assert(strm_.avail_in == 0); - return true; - } - -private: - bool is_valid_ = false; - z_stream strm_; -}; - -class gzip_decompressor : public decompressor { -public: - gzip_decompressor() { - std::memset(&strm_, 0, sizeof(strm_)); - strm_.zalloc = Z_NULL; - strm_.zfree = Z_NULL; - strm_.opaque = Z_NULL; - - // 15 is the value of wbits, which should be at the maximum possible value - // to ensure that any gzip stream can be decoded. The offset of 32 specifies - // that the stream type should be automatically detected either gzip or - // deflate. - is_valid_ = inflateInit2(&strm_, 32 + 15) == Z_OK; - } - - ~gzip_decompressor() { inflateEnd(&strm_); } - - bool is_valid() const override { return is_valid_; } - - bool decompress(const char *data, size_t data_length, - Callback callback) override { - assert(is_valid_); - - int ret = Z_OK; - - strm_.avail_in = static_cast(data_length); - strm_.next_in = const_cast(reinterpret_cast(data)); - - std::array buff{}; - while (strm_.avail_in > 0) { - strm_.avail_out = buff.size(); - strm_.next_out = reinterpret_cast(buff.data()); - - ret = inflate(&strm_, Z_NO_FLUSH); - assert(ret != Z_STREAM_ERROR); - switch (ret) { - case Z_NEED_DICT: - case Z_DATA_ERROR: - case Z_MEM_ERROR: inflateEnd(&strm_); return false; - } - - if (!callback(buff.data(), buff.size() - strm_.avail_out)) { - return false; - } - } - - return ret == Z_OK || ret == Z_STREAM_END; - } - -private: - bool is_valid_ = false; - z_stream strm_; -}; -#endif - -#ifdef CPPHTTPLIB_BROTLI_SUPPORT -class brotli_compressor : public compressor { -public: - brotli_compressor() { - state_ = BrotliEncoderCreateInstance(nullptr, nullptr, nullptr); - } - - ~brotli_compressor() { BrotliEncoderDestroyInstance(state_); } - - bool compress(const char *data, size_t data_length, bool last, - Callback callback) override { - std::array buff{}; - - auto operation = last ? BROTLI_OPERATION_FINISH : BROTLI_OPERATION_PROCESS; - auto available_in = data_length; - auto next_in = reinterpret_cast(data); - - for (;;) { - if (last) { - if (BrotliEncoderIsFinished(state_)) { break; } - } else { - if (!available_in) { break; } - } - - auto available_out = buff.size(); - auto next_out = buff.data(); - - if (!BrotliEncoderCompressStream(state_, operation, &available_in, - &next_in, &available_out, &next_out, - nullptr)) { - return false; - } - - auto output_bytes = buff.size() - available_out; - if (output_bytes) { - callback(reinterpret_cast(buff.data()), output_bytes); - } - } - - return true; - } - -private: - BrotliEncoderState *state_ = nullptr; -}; - -class brotli_decompressor : public decompressor { -public: - brotli_decompressor() { - decoder_s = BrotliDecoderCreateInstance(0, 0, 0); - decoder_r = decoder_s ? BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT - : BROTLI_DECODER_RESULT_ERROR; - } - - ~brotli_decompressor() { - if (decoder_s) { BrotliDecoderDestroyInstance(decoder_s); } - } - - bool is_valid() const override { return decoder_s; } - - bool decompress(const char *data, size_t data_length, - Callback callback) override { - if (decoder_r == BROTLI_DECODER_RESULT_SUCCESS || - decoder_r == BROTLI_DECODER_RESULT_ERROR) { - return 0; - } - - const uint8_t *next_in = (const uint8_t *)data; - size_t avail_in = data_length; - size_t total_out; - - decoder_r = BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT; - - std::array buff{}; - while (decoder_r == BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT) { - char *next_out = buff.data(); - size_t avail_out = buff.size(); - - decoder_r = BrotliDecoderDecompressStream( - decoder_s, &avail_in, &next_in, &avail_out, - reinterpret_cast(&next_out), &total_out); - - if (decoder_r == BROTLI_DECODER_RESULT_ERROR) { return false; } - - if (!callback(buff.data(), buff.size() - avail_out)) { return false; } - } - - return decoder_r == BROTLI_DECODER_RESULT_SUCCESS || - decoder_r == BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT; - } - -private: - BrotliDecoderResult decoder_r; - BrotliDecoderState *decoder_s = nullptr; -}; -#endif - -inline bool has_header(const Headers &headers, const char *key) { - return headers.find(key) != headers.end(); -} - -inline const char *get_header_value(const Headers &headers, const char *key, - size_t id = 0, const char *def = nullptr) { - auto rng = headers.equal_range(key); - auto it = rng.first; - std::advance(it, static_cast(id)); - if (it != rng.second) { return it->second.c_str(); } - return def; -} - -template -inline T get_header_value(const Headers & /*headers*/, const char * /*key*/, - size_t /*id*/ = 0, uint64_t /*def*/ = 0) {} - -template <> -inline uint64_t get_header_value(const Headers &headers, - const char *key, size_t id, - uint64_t def) { - auto rng = headers.equal_range(key); - auto it = rng.first; - std::advance(it, static_cast(id)); - if (it != rng.second) { - return std::strtoull(it->second.data(), nullptr, 10); - } - return def; -} - -template -inline bool parse_header(const char *beg, const char *end, T fn) { - // Skip trailing spaces and tabs. - while (beg < end && is_space_or_tab(end[-1])) { - end--; - } - - auto p = beg; - while (p < end && *p != ':') { - p++; - } - - if (p == end) { return false; } - - auto key_end = p; - - if (*p++ != ':') { return false; } - - while (p < end && is_space_or_tab(*p)) { - p++; - } - - if (p < end) { - fn(std::string(beg, key_end), decode_url(std::string(p, end), false)); - return true; - } - - return false; -} - -inline bool read_headers(Stream &strm, Headers &headers) { - const auto bufsiz = 2048; - char buf[bufsiz]; - stream_line_reader line_reader(strm, buf, bufsiz); - - for (;;) { - if (!line_reader.getline()) { return false; } - - // Check if the line ends with CRLF. - if (line_reader.end_with_crlf()) { - // Blank line indicates end of headers. - if (line_reader.size() == 2) { break; } - } else { - continue; // Skip invalid line. - } - - // Exclude CRLF - auto end = line_reader.ptr() + line_reader.size() - 2; - - parse_header(line_reader.ptr(), end, - [&](std::string &&key, std::string &&val) { - headers.emplace(std::move(key), std::move(val)); - }); - } - - return true; -} - -inline bool read_content_with_length(Stream &strm, uint64_t len, - Progress progress, - ContentReceiverWithProgress out) { - char buf[CPPHTTPLIB_RECV_BUFSIZ]; - - uint64_t r = 0; - while (r < len) { - auto read_len = static_cast(len - r); - auto n = strm.read(buf, (std::min)(read_len, CPPHTTPLIB_RECV_BUFSIZ)); - if (n <= 0) { return false; } - - if (!out(buf, static_cast(n), r, len)) { return false; } - r += static_cast(n); - - if (progress) { - if (!progress(r, len)) { return false; } - } - } - - return true; -} - -inline void skip_content_with_length(Stream &strm, uint64_t len) { - char buf[CPPHTTPLIB_RECV_BUFSIZ]; - uint64_t r = 0; - while (r < len) { - auto read_len = static_cast(len - r); - auto n = strm.read(buf, (std::min)(read_len, CPPHTTPLIB_RECV_BUFSIZ)); - if (n <= 0) { return; } - r += static_cast(n); - } -} - -inline bool read_content_without_length(Stream &strm, - ContentReceiverWithProgress out) { - char buf[CPPHTTPLIB_RECV_BUFSIZ]; - uint64_t r = 0; - for (;;) { - auto n = strm.read(buf, CPPHTTPLIB_RECV_BUFSIZ); - if (n < 0) { - return false; - } else if (n == 0) { - return true; - } - - if (!out(buf, static_cast(n), r, 0)) { return false; } - r += static_cast(n); - } - - return true; -} - -inline bool read_content_chunked(Stream &strm, - ContentReceiverWithProgress out) { - const auto bufsiz = 16; - char buf[bufsiz]; - - stream_line_reader line_reader(strm, buf, bufsiz); - - if (!line_reader.getline()) { return false; } - - unsigned long chunk_len; - while (true) { - char *end_ptr; - - chunk_len = std::strtoul(line_reader.ptr(), &end_ptr, 16); - - if (end_ptr == line_reader.ptr()) { return false; } - if (chunk_len == ULONG_MAX) { return false; } - - if (chunk_len == 0) { break; } - - if (!read_content_with_length(strm, chunk_len, nullptr, out)) { - return false; - } - - if (!line_reader.getline()) { return false; } - - if (strcmp(line_reader.ptr(), "\r\n")) { break; } - - if (!line_reader.getline()) { return false; } - } - - if (chunk_len == 0) { - // Reader terminator after chunks - if (!line_reader.getline() || strcmp(line_reader.ptr(), "\r\n")) - return false; - } - - return true; -} - -inline bool is_chunked_transfer_encoding(const Headers &headers) { - return !strcasecmp(get_header_value(headers, "Transfer-Encoding", 0, ""), - "chunked"); -} - -template -bool prepare_content_receiver(T &x, int &status, - ContentReceiverWithProgress receiver, - bool decompress, U callback) { - if (decompress) { - std::string encoding = x.get_header_value("Content-Encoding"); - std::unique_ptr decompressor; - - if (encoding.find("gzip") != std::string::npos || - encoding.find("deflate") != std::string::npos) { -#ifdef CPPHTTPLIB_ZLIB_SUPPORT - decompressor = detail::make_unique(); -#else - status = 415; - return false; -#endif - } else if (encoding.find("br") != std::string::npos) { -#ifdef CPPHTTPLIB_BROTLI_SUPPORT - decompressor = detail::make_unique(); -#else - status = 415; - return false; -#endif - } - - if (decompressor) { - if (decompressor->is_valid()) { - ContentReceiverWithProgress out = [&](const char *buf, size_t n, - uint64_t off, uint64_t len) { - return decompressor->decompress(buf, n, - [&](const char *buf, size_t n) { - return receiver(buf, n, off, len); - }); - }; - return callback(std::move(out)); - } else { - status = 500; - return false; - } - } - } - - ContentReceiverWithProgress out = [&](const char *buf, size_t n, uint64_t off, - uint64_t len) { - return receiver(buf, n, off, len); - }; - return callback(std::move(out)); -} - -template -bool read_content(Stream &strm, T &x, size_t payload_max_length, int &status, - Progress progress, ContentReceiverWithProgress receiver, - bool decompress) { - return prepare_content_receiver( - x, status, std::move(receiver), decompress, - [&](const ContentReceiverWithProgress &out) { - auto ret = true; - auto exceed_payload_max_length = false; - - if (is_chunked_transfer_encoding(x.headers)) { - ret = read_content_chunked(strm, out); - } else if (!has_header(x.headers, "Content-Length")) { - ret = read_content_without_length(strm, out); - } else { - auto len = get_header_value(x.headers, "Content-Length"); - if (len > payload_max_length) { - exceed_payload_max_length = true; - skip_content_with_length(strm, len); - ret = false; - } else if (len > 0) { - ret = read_content_with_length(strm, len, std::move(progress), out); - } - } - - if (!ret) { status = exceed_payload_max_length ? 413 : 400; } - return ret; - }); -} - -template -inline ssize_t write_headers(Stream &strm, const T &info, - const Headers &headers) { - ssize_t write_len = 0; - for (const auto &x : info.headers) { - if (x.first == "EXCEPTION_WHAT") { continue; } - auto len = - strm.write_format("%s: %s\r\n", x.first.c_str(), x.second.c_str()); - if (len < 0) { return len; } - write_len += len; - } - for (const auto &x : headers) { - auto len = - strm.write_format("%s: %s\r\n", x.first.c_str(), x.second.c_str()); - if (len < 0) { return len; } - write_len += len; - } - auto len = strm.write("\r\n"); - if (len < 0) { return len; } - write_len += len; - return write_len; -} - -inline bool write_data(Stream &strm, const char *d, size_t l) { - size_t offset = 0; - while (offset < l) { - auto length = strm.write(d + offset, l - offset); - if (length < 0) { return false; } - offset += static_cast(length); - } - return true; -} - -template -inline ssize_t write_content(Stream &strm, ContentProvider content_provider, - size_t offset, size_t length, T is_shutting_down) { - size_t begin_offset = offset; - size_t end_offset = offset + length; - auto ok = true; - DataSink data_sink; - - data_sink.write = [&](const char *d, size_t l) { - if (ok) { - offset += l; - if (!write_data(strm, d, l)) { ok = false; } - } - }; - - data_sink.is_writable = [&](void) { return ok && strm.is_writable(); }; - - while (offset < end_offset && !is_shutting_down()) { - if (!content_provider(offset, end_offset - offset, data_sink)) { - return -1; - } - if (!ok) { return -1; } - } - - return static_cast(offset - begin_offset); -} - -template -inline ssize_t write_content_without_length(Stream &strm, - ContentProvider content_provider, - T is_shutting_down) { - size_t offset = 0; - auto data_available = true; - auto ok = true; - DataSink data_sink; - - data_sink.write = [&](const char *d, size_t l) { - if (ok) { - offset += l; - if (!write_data(strm, d, l)) { ok = false; } - } - }; - - data_sink.done = [&](void) { data_available = false; }; - - data_sink.is_writable = [&](void) { return ok && strm.is_writable(); }; - - while (data_available && !is_shutting_down()) { - if (!content_provider(offset, 0, data_sink)) { return -1; } - if (!ok) { return -1; } - } - - return static_cast(offset); -} - -template -inline ssize_t write_content_chunked(Stream &strm, - ContentProvider content_provider, - T is_shutting_down, U &compressor) { - size_t offset = 0; - auto data_available = true; - ssize_t total_written_length = 0; - auto ok = true; - DataSink data_sink; - - data_sink.write = [&](const char *d, size_t l) { - if (!ok) { return; } - - data_available = l > 0; - offset += l; - - std::string payload; - if (!compressor.compress(d, l, false, - [&](const char *data, size_t data_len) { - payload.append(data, data_len); - return true; - })) { - ok = false; - return; - } - - if (!payload.empty()) { - // Emit chunked response header and footer for each chunk - auto chunk = from_i_to_hex(payload.size()) + "\r\n" + payload + "\r\n"; - if (write_data(strm, chunk.data(), chunk.size())) { - total_written_length += chunk.size(); - } else { - ok = false; - return; - } - } - }; - - data_sink.done = [&](void) { - if (!ok) { return; } - - data_available = false; - - std::string payload; - if (!compressor.compress(nullptr, 0, true, - [&](const char *data, size_t data_len) { - payload.append(data, data_len); - return true; - })) { - ok = false; - return; - } - - if (!payload.empty()) { - // Emit chunked response header and footer for each chunk - auto chunk = from_i_to_hex(payload.size()) + "\r\n" + payload + "\r\n"; - if (write_data(strm, chunk.data(), chunk.size())) { - total_written_length += chunk.size(); - } else { - ok = false; - return; - } - } - - static const std::string done_marker("0\r\n\r\n"); - if (write_data(strm, done_marker.data(), done_marker.size())) { - total_written_length += done_marker.size(); - } else { - ok = false; - } - }; - - data_sink.is_writable = [&](void) { return ok && strm.is_writable(); }; - - while (data_available && !is_shutting_down()) { - if (!content_provider(offset, 0, data_sink)) { return -1; } - if (!ok) { return -1; } - } - - return total_written_length; -} - -template -inline bool redirect(T &cli, const Request &req, Response &res, - const std::string &path) { - Request new_req = req; - new_req.path = path; - new_req.redirect_count -= 1; - - if (res.status == 303 && (req.method != "GET" && req.method != "HEAD")) { - new_req.method = "GET"; - new_req.body.clear(); - new_req.headers.clear(); - } - - Response new_res; - - auto ret = cli.send(new_req, new_res); - if (ret) { res = new_res; } - return ret; -} - -inline std::string params_to_query_str(const Params ¶ms) { - std::string query; - - for (auto it = params.begin(); it != params.end(); ++it) { - if (it != params.begin()) { query += "&"; } - query += it->first; - query += "="; - query += encode_url(it->second); - } - return query; -} - -inline void parse_query_text(const std::string &s, Params ¶ms) { - split(s.data(), s.data() + s.size(), '&', [&](const char *b, const char *e) { - std::string key; - std::string val; - split(b, e, '=', [&](const char *b2, const char *e2) { - if (key.empty()) { - key.assign(b2, e2); - } else { - val.assign(b2, e2); - } - }); - - if (!key.empty()) { - params.emplace(decode_url(key, true), decode_url(val, true)); - } - }); -} - -inline bool parse_multipart_boundary(const std::string &content_type, - std::string &boundary) { - auto pos = content_type.find("boundary="); - if (pos == std::string::npos) { return false; } - boundary = content_type.substr(pos + 9); - if (boundary.length() >= 2 && boundary.front() == '"' && - boundary.back() == '"') { - boundary = boundary.substr(1, boundary.size() - 2); - } - return !boundary.empty(); -} - -inline bool parse_range_header(const std::string &s, Ranges &ranges) try { - static auto re_first_range = std::regex(R"(bytes=(\d*-\d*(?:,\s*\d*-\d*)*))"); - std::smatch m; - if (std::regex_match(s, m, re_first_range)) { - auto pos = static_cast(m.position(1)); - auto len = static_cast(m.length(1)); - bool all_valid_ranges = true; - split(&s[pos], &s[pos + len], ',', [&](const char *b, const char *e) { - if (!all_valid_ranges) return; - static auto re_another_range = std::regex(R"(\s*(\d*)-(\d*))"); - std::cmatch cm; - if (std::regex_match(b, e, cm, re_another_range)) { - ssize_t first = -1; - if (!cm.str(1).empty()) { - first = static_cast(std::stoll(cm.str(1))); - } - - ssize_t last = -1; - if (!cm.str(2).empty()) { - last = static_cast(std::stoll(cm.str(2))); - } - - if (first != -1 && last != -1 && first > last) { - all_valid_ranges = false; - return; - } - ranges.emplace_back(std::make_pair(first, last)); - } - }); - return all_valid_ranges; - } - return false; -} catch (...) { return false; } - -class MultipartFormDataParser { -public: - MultipartFormDataParser() = default; - - void set_boundary(std::string &&boundary) { boundary_ = boundary; } - - bool is_valid() const { return is_valid_; } - - template - bool parse(const char *buf, size_t n, const T &content_callback, - const U &header_callback) { - - static const std::regex re_content_disposition( - "^Content-Disposition:\\s*form-data;\\s*name=\"(.*?)\"(?:;\\s*filename=" - "\"(.*?)\")?\\s*$", - std::regex_constants::icase); - static const std::string dash_ = "--"; - static const std::string crlf_ = "\r\n"; - - buf_.append(buf, n); // TODO: performance improvement - - while (!buf_.empty()) { - switch (state_) { - case 0: { // Initial boundary - auto pattern = dash_ + boundary_ + crlf_; - if (pattern.size() > buf_.size()) { return true; } - auto pos = buf_.find(pattern); - if (pos != 0) { return false; } - buf_.erase(0, pattern.size()); - off_ += pattern.size(); - state_ = 1; - break; - } - case 1: { // New entry - clear_file_info(); - state_ = 2; - break; - } - case 2: { // Headers - auto pos = buf_.find(crlf_); - while (pos != std::string::npos) { - // Empty line - if (pos == 0) { - if (!header_callback(file_)) { - is_valid_ = false; - return false; - } - buf_.erase(0, crlf_.size()); - off_ += crlf_.size(); - state_ = 3; - break; - } - - static const std::string header_name = "content-type:"; - const auto header = buf_.substr(0, pos); - if (start_with(header, header_name)) { - file_.content_type = trim_copy(header.substr(header_name.size())); - } else { - std::smatch m; - if (std::regex_match(header, m, re_content_disposition)) { - file_.name = m[1]; - file_.filename = m[2]; - } - } - - buf_.erase(0, pos + crlf_.size()); - off_ += pos + crlf_.size(); - pos = buf_.find(crlf_); - } - if (state_ != 3) { return true; } - break; - } - case 3: { // Body - { - auto pattern = crlf_ + dash_; - if (pattern.size() > buf_.size()) { return true; } - - auto pos = buf_.find(pattern); - if (pos == std::string::npos) { - pos = buf_.size(); - while (pos > 0) { - auto c = buf_[pos - 1]; - if (c != '\r' && c != '\n' && c != '-') { break; } - pos--; - } - } - - if (!content_callback(buf_.data(), pos)) { - is_valid_ = false; - return false; - } - - off_ += pos; - buf_.erase(0, pos); - } - - { - auto pattern = crlf_ + dash_ + boundary_; - if (pattern.size() > buf_.size()) { return true; } - - auto pos = buf_.find(pattern); - if (pos != std::string::npos) { - if (!content_callback(buf_.data(), pos)) { - is_valid_ = false; - return false; - } - - off_ += pos + pattern.size(); - buf_.erase(0, pos + pattern.size()); - state_ = 4; - } else { - if (!content_callback(buf_.data(), pattern.size())) { - is_valid_ = false; - return false; - } - - off_ += pattern.size(); - buf_.erase(0, pattern.size()); - } - } - break; - } - case 4: { // Boundary - if (crlf_.size() > buf_.size()) { return true; } - if (buf_.compare(0, crlf_.size(), crlf_) == 0) { - buf_.erase(0, crlf_.size()); - off_ += crlf_.size(); - state_ = 1; - } else { - auto pattern = dash_ + crlf_; - if (pattern.size() > buf_.size()) { return true; } - if (buf_.compare(0, pattern.size(), pattern) == 0) { - buf_.erase(0, pattern.size()); - off_ += pattern.size(); - is_valid_ = true; - state_ = 5; - } else { - return true; - } - } - break; - } - case 5: { // Done - is_valid_ = false; - return false; - } - } - } - - return true; - } - -private: - void clear_file_info() { - file_.name.clear(); - file_.filename.clear(); - file_.content_type.clear(); - } - - std::string boundary_; - - std::string buf_; - size_t state_ = 0; - bool is_valid_ = false; - size_t off_ = 0; - MultipartFormData file_; -}; - -inline std::string to_lower(const char *beg, const char *end) { - std::string out; - auto it = beg; - while (it != end) { - out += static_cast(::tolower(*it)); - it++; - } - return out; -} - -inline std::string make_multipart_data_boundary() { - static const char data[] = - "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; - - // std::random_device might actually be deterministic on some - // platforms, but due to lack of support in the c++ standard library, - // doing better requires either some ugly hacks or breaking portability. - std::random_device seed_gen; - // Request 128 bits of entropy for initialization - std::seed_seq seed_sequence{seed_gen(), seed_gen(), seed_gen(), seed_gen()}; - std::mt19937 engine(seed_sequence); - - std::string result = "--cpp-httplib-multipart-data-"; - - for (auto i = 0; i < 16; i++) { - result += data[engine() % (sizeof(data) - 1)]; - } - - return result; -} - -inline std::pair -get_range_offset_and_length(const Request &req, size_t content_length, - size_t index) { - auto r = req.ranges[index]; - - if (r.first == -1 && r.second == -1) { - return std::make_pair(0, content_length); - } - - auto slen = static_cast(content_length); - - if (r.first == -1) { - r.first = (std::max)(static_cast(0), slen - r.second); - r.second = slen - 1; - } - - if (r.second == -1) { r.second = slen - 1; } - return std::make_pair(r.first, static_cast(r.second - r.first) + 1); -} - -inline std::string make_content_range_header_field(size_t offset, size_t length, - size_t content_length) { - std::string field = "bytes "; - field += std::to_string(offset); - field += "-"; - field += std::to_string(offset + length - 1); - field += "/"; - field += std::to_string(content_length); - return field; -} - -template -bool process_multipart_ranges_data(const Request &req, Response &res, - const std::string &boundary, - const std::string &content_type, - SToken stoken, CToken ctoken, - Content content) { - for (size_t i = 0; i < req.ranges.size(); i++) { - ctoken("--"); - stoken(boundary); - ctoken("\r\n"); - if (!content_type.empty()) { - ctoken("Content-Type: "); - stoken(content_type); - ctoken("\r\n"); - } - - auto offsets = get_range_offset_and_length(req, res.body.size(), i); - auto offset = offsets.first; - auto length = offsets.second; - - ctoken("Content-Range: "); - stoken(make_content_range_header_field(offset, length, res.body.size())); - ctoken("\r\n"); - ctoken("\r\n"); - if (!content(offset, length)) { return false; } - ctoken("\r\n"); - } - - ctoken("--"); - stoken(boundary); - ctoken("--\r\n"); - - return true; -} - -inline bool make_multipart_ranges_data(const Request &req, Response &res, - const std::string &boundary, - const std::string &content_type, - std::string &data) { - return process_multipart_ranges_data( - req, res, boundary, content_type, - [&](const std::string &token) { data += token; }, - [&](const char *token) { data += token; }, - [&](size_t offset, size_t length) { - if (offset < res.body.size()) { - data += res.body.substr(offset, length); - return true; - } - return false; - }); -} - -inline size_t -get_multipart_ranges_data_length(const Request &req, Response &res, - const std::string &boundary, - const std::string &content_type) { - size_t data_length = 0; - - process_multipart_ranges_data( - req, res, boundary, content_type, - [&](const std::string &token) { data_length += token.size(); }, - [&](const char *token) { data_length += strlen(token); }, - [&](size_t /*offset*/, size_t length) { - data_length += length; - return true; - }); - - return data_length; -} - -template -inline bool write_multipart_ranges_data(Stream &strm, const Request &req, - Response &res, - const std::string &boundary, - const std::string &content_type, - T is_shutting_down) { - return process_multipart_ranges_data( - req, res, boundary, content_type, - [&](const std::string &token) { strm.write(token); }, - [&](const char *token) { strm.write(token); }, - [&](size_t offset, size_t length) { - return write_content(strm, res.content_provider_, offset, length, - is_shutting_down) >= 0; - }); -} - -inline std::pair -get_range_offset_and_length(const Request &req, const Response &res, - size_t index) { - auto r = req.ranges[index]; - - if (r.second == -1) { - r.second = static_cast(res.content_length_) - 1; - } - - return std::make_pair(r.first, r.second - r.first + 1); -} - -inline bool expect_content(const Request &req) { - if (req.method == "POST" || req.method == "PUT" || req.method == "PATCH" || - req.method == "PRI" || req.method == "DELETE") { - return true; - } - // TODO: check if Content-Length is set - return false; -} - -inline bool has_crlf(const char *s) { - auto p = s; - while (*p) { - if (*p == '\r' || *p == '\n') { return true; } - p++; - } - return false; -} - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT -template -inline std::string message_digest(const std::string &s, Init init, - Update update, Final final, - size_t digest_length) { - using namespace std; - - std::vector md(digest_length, 0); - CTX ctx; - init(&ctx); - update(&ctx, s.data(), s.size()); - final(md.data(), &ctx); - - stringstream ss; - for (auto c : md) { - ss << setfill('0') << setw(2) << hex << (unsigned int)c; - } - return ss.str(); -} - -inline std::string MD5(const std::string &s) { - return message_digest(s, MD5_Init, MD5_Update, MD5_Final, - MD5_DIGEST_LENGTH); -} - -inline std::string SHA_256(const std::string &s) { - return message_digest(s, SHA256_Init, SHA256_Update, SHA256_Final, - SHA256_DIGEST_LENGTH); -} - -inline std::string SHA_512(const std::string &s) { - return message_digest(s, SHA512_Init, SHA512_Update, SHA512_Final, - SHA512_DIGEST_LENGTH); -} -#endif - -#ifdef _WIN32 -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT -// NOTE: This code came up with the following stackoverflow post: -// https://stackoverflow.com/questions/9507184/can-openssl-on-windows-use-the-system-certificate-store -inline bool load_system_certs_on_windows(X509_STORE *store) { - auto hStore = CertOpenSystemStoreW((HCRYPTPROV_LEGACY)NULL, L"ROOT"); - - if (!hStore) { return false; } - - PCCERT_CONTEXT pContext = NULL; - while (pContext = CertEnumCertificatesInStore(hStore, pContext)) { - auto encoded_cert = - static_cast(pContext->pbCertEncoded); - - auto x509 = d2i_X509(NULL, &encoded_cert, pContext->cbCertEncoded); - if (x509) { - X509_STORE_add_cert(store, x509); - X509_free(x509); - } - } - - CertFreeCertificateContext(pContext); - CertCloseStore(hStore, 0); - - return true; -} -#endif - -class WSInit { -public: - WSInit() { - WSADATA wsaData; - WSAStartup(0x0002, &wsaData); - } - - ~WSInit() { WSACleanup(); } -}; - -static WSInit wsinit_; -#endif - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT -inline std::pair make_digest_authentication_header( - const Request &req, const std::map &auth, - size_t cnonce_count, const std::string &cnonce, const std::string &username, - const std::string &password, bool is_proxy = false) { - using namespace std; - - string nc; - { - stringstream ss; - ss << setfill('0') << setw(8) << hex << cnonce_count; - nc = ss.str(); - } - - auto qop = auth.at("qop"); - if (qop.find("auth-int") != std::string::npos) { - qop = "auth-int"; - } else { - qop = "auth"; - } - - std::string algo = "MD5"; - if (auth.find("algorithm") != auth.end()) { algo = auth.at("algorithm"); } - - string response; - { - auto H = algo == "SHA-256" - ? detail::SHA_256 - : algo == "SHA-512" ? detail::SHA_512 : detail::MD5; - - auto A1 = username + ":" + auth.at("realm") + ":" + password; - - auto A2 = req.method + ":" + req.path; - if (qop == "auth-int") { A2 += ":" + H(req.body); } - - response = H(H(A1) + ":" + auth.at("nonce") + ":" + nc + ":" + cnonce + - ":" + qop + ":" + H(A2)); - } - - auto field = "Digest username=\"" + username + "\", realm=\"" + - auth.at("realm") + "\", nonce=\"" + auth.at("nonce") + - "\", uri=\"" + req.path + "\", algorithm=" + algo + - ", qop=" + qop + ", nc=\"" + nc + "\", cnonce=\"" + cnonce + - "\", response=\"" + response + "\""; - - auto key = is_proxy ? "Proxy-Authorization" : "Authorization"; - return std::make_pair(key, field); -} -#endif - -inline bool parse_www_authenticate(const Response &res, - std::map &auth, - bool is_proxy) { - auto auth_key = is_proxy ? "Proxy-Authenticate" : "WWW-Authenticate"; - if (res.has_header(auth_key)) { - static auto re = std::regex(R"~((?:(?:,\s*)?(.+?)=(?:"(.*?)"|([^,]*))))~"); - auto s = res.get_header_value(auth_key); - auto pos = s.find(' '); - if (pos != std::string::npos) { - auto type = s.substr(0, pos); - if (type == "Basic") { - return false; - } else if (type == "Digest") { - s = s.substr(pos + 1); - auto beg = std::sregex_iterator(s.begin(), s.end(), re); - for (auto i = beg; i != std::sregex_iterator(); ++i) { - auto m = *i; - auto key = s.substr(static_cast(m.position(1)), - static_cast(m.length(1))); - auto val = m.length(2) > 0 - ? s.substr(static_cast(m.position(2)), - static_cast(m.length(2))) - : s.substr(static_cast(m.position(3)), - static_cast(m.length(3))); - auth[key] = val; - } - return true; - } - } - } - return false; -} - -// https://stackoverflow.com/questions/440133/how-do-i-create-a-random-alpha-numeric-string-in-c/440240#answer-440240 -inline std::string random_string(size_t length) { - auto randchar = []() -> char { - const char charset[] = "0123456789" - "ABCDEFGHIJKLMNOPQRSTUVWXYZ" - "abcdefghijklmnopqrstuvwxyz"; - const size_t max_index = (sizeof(charset) - 1); - return charset[static_cast(rand()) % max_index]; - }; - std::string str(length, 0); - std::generate_n(str.begin(), length, randchar); - return str; -} - -class ContentProviderAdapter { -public: - explicit ContentProviderAdapter( - ContentProviderWithoutLength &&content_provider) - : content_provider_(content_provider) {} - - bool operator()(size_t offset, size_t, DataSink &sink) { - return content_provider_(offset, sink); - } - -private: - ContentProviderWithoutLength content_provider_; -}; - -} // namespace detail - -// Header utilities -inline std::pair make_range_header(Ranges ranges) { - std::string field = "bytes="; - auto i = 0; - for (auto r : ranges) { - if (i != 0) { field += ", "; } - if (r.first != -1) { field += std::to_string(r.first); } - field += '-'; - if (r.second != -1) { field += std::to_string(r.second); } - i++; - } - return std::make_pair("Range", std::move(field)); -} - -inline std::pair -make_basic_authentication_header(const std::string &username, - const std::string &password, - bool is_proxy = false) { - auto field = "Basic " + detail::base64_encode(username + ":" + password); - auto key = is_proxy ? "Proxy-Authorization" : "Authorization"; - return std::make_pair(key, std::move(field)); -} - -inline std::pair -make_bearer_token_authentication_header(const std::string &token, - bool is_proxy = false) { - auto field = "Bearer " + token; - auto key = is_proxy ? "Proxy-Authorization" : "Authorization"; - return std::make_pair(key, std::move(field)); -} - -// Request implementation -inline bool Request::has_header(const char *key) const { - return detail::has_header(headers, key); -} - -inline std::string Request::get_header_value(const char *key, size_t id) const { - return detail::get_header_value(headers, key, id, ""); -} - -template -inline T Request::get_header_value(const char *key, size_t id) const { - return detail::get_header_value(headers, key, id, 0); -} - -inline size_t Request::get_header_value_count(const char *key) const { - auto r = headers.equal_range(key); - return static_cast(std::distance(r.first, r.second)); -} - -inline void Request::set_header(const char *key, const char *val) { - if (!detail::has_crlf(key) && !detail::has_crlf(val)) { - headers.emplace(key, val); - } -} - -inline void Request::set_header(const char *key, const std::string &val) { - if (!detail::has_crlf(key) && !detail::has_crlf(val.c_str())) { - headers.emplace(key, val); - } -} - -inline bool Request::has_param(const char *key) const { - return params.find(key) != params.end(); -} - -inline std::string Request::get_param_value(const char *key, size_t id) const { - auto rng = params.equal_range(key); - auto it = rng.first; - std::advance(it, static_cast(id)); - if (it != rng.second) { return it->second; } - return std::string(); -} - -inline size_t Request::get_param_value_count(const char *key) const { - auto r = params.equal_range(key); - return static_cast(std::distance(r.first, r.second)); -} - -inline bool Request::is_multipart_form_data() const { - const auto &content_type = get_header_value("Content-Type"); - return !content_type.find("multipart/form-data"); -} - -inline bool Request::has_file(const char *key) const { - return files.find(key) != files.end(); -} - -inline MultipartFormData Request::get_file_value(const char *key) const { - auto it = files.find(key); - if (it != files.end()) { return it->second; } - return MultipartFormData(); -} - -// Response implementation -inline bool Response::has_header(const char *key) const { - return headers.find(key) != headers.end(); -} - -inline std::string Response::get_header_value(const char *key, - size_t id) const { - return detail::get_header_value(headers, key, id, ""); -} - -template -inline T Response::get_header_value(const char *key, size_t id) const { - return detail::get_header_value(headers, key, id, 0); -} - -inline size_t Response::get_header_value_count(const char *key) const { - auto r = headers.equal_range(key); - return static_cast(std::distance(r.first, r.second)); -} - -inline void Response::set_header(const char *key, const char *val) { - if (!detail::has_crlf(key) && !detail::has_crlf(val)) { - headers.emplace(key, val); - } -} - -inline void Response::set_header(const char *key, const std::string &val) { - if (!detail::has_crlf(key) && !detail::has_crlf(val.c_str())) { - headers.emplace(key, val); - } -} - -inline void Response::set_redirect(const char *url, int stat) { - if (!detail::has_crlf(url)) { - set_header("Location", url); - if (300 <= stat && stat < 400) { - this->status = stat; - } else { - this->status = 302; - } - } -} - -inline void Response::set_redirect(const std::string &url, int stat) { - set_redirect(url.c_str(), stat); -} - -inline void Response::set_content(const char *s, size_t n, - const char *content_type) { - body.assign(s, n); - - auto rng = headers.equal_range("Content-Type"); - headers.erase(rng.first, rng.second); - set_header("Content-Type", content_type); -} - -inline void Response::set_content(const std::string &s, - const char *content_type) { - set_content(s.data(), s.size(), content_type); -} - -inline void -Response::set_content_provider(size_t in_length, const char *content_type, - ContentProvider provider, - const std::function &resource_releaser) { - assert(in_length > 0); - set_header("Content-Type", content_type); - content_length_ = in_length; - content_provider_ = std::move(provider); - content_provider_resource_releaser_ = resource_releaser; - is_chunked_content_provider = false; -} - -inline void -Response::set_content_provider(const char *content_type, - ContentProviderWithoutLength provider, - const std::function &resource_releaser) { - set_header("Content-Type", content_type); - content_length_ = 0; - content_provider_ = detail::ContentProviderAdapter(std::move(provider)); - content_provider_resource_releaser_ = resource_releaser; - is_chunked_content_provider = false; -} - -inline void Response::set_chunked_content_provider( - const char *content_type, ContentProviderWithoutLength provider, - const std::function &resource_releaser) { - set_header("Content-Type", content_type); - content_length_ = 0; - content_provider_ = detail::ContentProviderAdapter(std::move(provider)); - content_provider_resource_releaser_ = resource_releaser; - is_chunked_content_provider = true; -} - -// Rstream implementation -inline ssize_t Stream::write(const char *ptr) { - return write(ptr, strlen(ptr)); -} - -inline ssize_t Stream::write(const std::string &s) { - return write(s.data(), s.size()); -} - -template -inline ssize_t Stream::write_format(const char *fmt, const Args &... args) { - const auto bufsiz = 2048; - std::array buf; - -#if defined(_MSC_VER) && _MSC_VER < 1900 - auto sn = _snprintf_s(buf.data(), bufsiz - 1, buf.size() - 1, fmt, args...); -#else - auto sn = snprintf(buf.data(), buf.size() - 1, fmt, args...); -#endif - if (sn <= 0) { return sn; } - - auto n = static_cast(sn); - - if (n >= buf.size() - 1) { - std::vector glowable_buf(buf.size()); - - while (n >= glowable_buf.size() - 1) { - glowable_buf.resize(glowable_buf.size() * 2); -#if defined(_MSC_VER) && _MSC_VER < 1900 - n = static_cast(_snprintf_s(&glowable_buf[0], glowable_buf.size(), - glowable_buf.size() - 1, fmt, - args...)); -#else - n = static_cast( - snprintf(&glowable_buf[0], glowable_buf.size() - 1, fmt, args...)); -#endif - } - return write(&glowable_buf[0], n); - } else { - return write(buf.data(), n); - } -} - -namespace detail { - -// Socket stream implementation -inline SocketStream::SocketStream(socket_t sock, time_t read_timeout_sec, - time_t read_timeout_usec, - time_t write_timeout_sec, - time_t write_timeout_usec) - : sock_(sock), read_timeout_sec_(read_timeout_sec), - read_timeout_usec_(read_timeout_usec), - write_timeout_sec_(write_timeout_sec), - write_timeout_usec_(write_timeout_usec) {} - -inline SocketStream::~SocketStream() {} - -inline bool SocketStream::is_readable() const { - return select_read(sock_, read_timeout_sec_, read_timeout_usec_) > 0; -} - -inline bool SocketStream::is_writable() const { - return select_write(sock_, write_timeout_sec_, write_timeout_usec_) > 0; -} - -inline ssize_t SocketStream::read(char *ptr, size_t size) { - if (!is_readable()) { return -1; } - -#ifdef _WIN32 - if (size > static_cast((std::numeric_limits::max)())) { - return -1; - } - return recv(sock_, ptr, static_cast(size), CPPHTTPLIB_RECV_FLAGS); -#else - return handle_EINTR( - [&]() { return recv(sock_, ptr, size, CPPHTTPLIB_RECV_FLAGS); }); -#endif -} - -inline ssize_t SocketStream::write(const char *ptr, size_t size) { - if (!is_writable()) { return -1; } - -#ifdef _WIN32 - if (size > static_cast((std::numeric_limits::max)())) { - return -1; - } - return send(sock_, ptr, static_cast(size), CPPHTTPLIB_SEND_FLAGS); -#else - return handle_EINTR( - [&]() { return send(sock_, ptr, size, CPPHTTPLIB_SEND_FLAGS); }); -#endif -} - -inline void SocketStream::get_remote_ip_and_port(std::string &ip, - int &port) const { - return detail::get_remote_ip_and_port(sock_, ip, port); -} - -// Buffer stream implementation -inline bool BufferStream::is_readable() const { return true; } - -inline bool BufferStream::is_writable() const { return true; } - -inline ssize_t BufferStream::read(char *ptr, size_t size) { -#if defined(_MSC_VER) && _MSC_VER <= 1900 - auto len_read = buffer._Copy_s(ptr, size, size, position); -#else - auto len_read = buffer.copy(ptr, size, position); -#endif - position += static_cast(len_read); - return static_cast(len_read); -} - -inline ssize_t BufferStream::write(const char *ptr, size_t size) { - buffer.append(ptr, size); - return static_cast(size); -} - -inline void BufferStream::get_remote_ip_and_port(std::string & /*ip*/, - int & /*port*/) const {} - -inline const std::string &BufferStream::get_buffer() const { return buffer; } - -} // namespace detail - -// HTTP server implementation -inline Server::Server() - : new_task_queue( - [] { return new ThreadPool(CPPHTTPLIB_THREAD_POOL_COUNT); }), - svr_sock_(INVALID_SOCKET), is_running_(false) { -#ifndef _WIN32 - signal(SIGPIPE, SIG_IGN); -#endif -} - -inline Server::~Server() {} - -inline Server &Server::Get(const char *pattern, Handler handler) { - get_handlers_.push_back( - std::make_pair(std::regex(pattern), std::move(handler))); - return *this; -} - -inline Server &Server::Post(const char *pattern, Handler handler) { - post_handlers_.push_back( - std::make_pair(std::regex(pattern), std::move(handler))); - return *this; -} - -inline Server &Server::Post(const char *pattern, - HandlerWithContentReader handler) { - post_handlers_for_content_reader_.push_back( - std::make_pair(std::regex(pattern), std::move(handler))); - return *this; -} - -inline Server &Server::Put(const char *pattern, Handler handler) { - put_handlers_.push_back( - std::make_pair(std::regex(pattern), std::move(handler))); - return *this; -} - -inline Server &Server::Put(const char *pattern, - HandlerWithContentReader handler) { - put_handlers_for_content_reader_.push_back( - std::make_pair(std::regex(pattern), std::move(handler))); - return *this; -} - -inline Server &Server::Patch(const char *pattern, Handler handler) { - patch_handlers_.push_back( - std::make_pair(std::regex(pattern), std::move(handler))); - return *this; -} - -inline Server &Server::Patch(const char *pattern, - HandlerWithContentReader handler) { - patch_handlers_for_content_reader_.push_back( - std::make_pair(std::regex(pattern), std::move(handler))); - return *this; -} - -inline Server &Server::Delete(const char *pattern, Handler handler) { - delete_handlers_.push_back( - std::make_pair(std::regex(pattern), std::move(handler))); - return *this; -} - -inline Server &Server::Delete(const char *pattern, - HandlerWithContentReader handler) { - delete_handlers_for_content_reader_.push_back( - std::make_pair(std::regex(pattern), std::move(handler))); - return *this; -} - -inline Server &Server::Options(const char *pattern, Handler handler) { - options_handlers_.push_back( - std::make_pair(std::regex(pattern), std::move(handler))); - return *this; -} - -inline bool Server::set_base_dir(const char *dir, const char *mount_point) { - return set_mount_point(mount_point, dir); -} - -inline bool Server::set_mount_point(const char *mount_point, const char *dir, - Headers headers) { - if (detail::is_dir(dir)) { - std::string mnt = mount_point ? mount_point : "/"; - if (!mnt.empty() && mnt[0] == '/') { - base_dirs_.push_back({mnt, dir, std::move(headers)}); - return true; - } - } - return false; -} - -inline bool Server::remove_mount_point(const char *mount_point) { - for (auto it = base_dirs_.begin(); it != base_dirs_.end(); ++it) { - if (it->mount_point == mount_point) { - base_dirs_.erase(it); - return true; - } - } - return false; -} - -inline void Server::set_file_extension_and_mimetype_mapping(const char *ext, - const char *mime) { - file_extension_and_mimetype_map_[ext] = mime; -} - -inline void Server::set_file_request_handler(Handler handler) { - file_request_handler_ = std::move(handler); -} - -inline void Server::set_error_handler(Handler handler) { - error_handler_ = std::move(handler); -} - -inline void Server::set_tcp_nodelay(bool on) { tcp_nodelay_ = on; } - -inline void Server::set_socket_options(SocketOptions socket_options) { - socket_options_ = std::move(socket_options); -} - -inline void Server::set_logger(Logger logger) { logger_ = std::move(logger); } - -inline void -Server::set_expect_100_continue_handler(Expect100ContinueHandler handler) { - expect_100_continue_handler_ = std::move(handler); -} - -inline void Server::set_keep_alive_max_count(size_t count) { - keep_alive_max_count_ = count; -} - -inline void Server::set_keep_alive_timeout(time_t sec) { - keep_alive_timeout_sec_ = sec; -} - -inline void Server::set_read_timeout(time_t sec, time_t usec) { - read_timeout_sec_ = sec; - read_timeout_usec_ = usec; -} - -inline void Server::set_write_timeout(time_t sec, time_t usec) { - write_timeout_sec_ = sec; - write_timeout_usec_ = usec; -} - -inline void Server::set_idle_interval(time_t sec, time_t usec) { - idle_interval_sec_ = sec; - idle_interval_usec_ = usec; -} - -inline void Server::set_payload_max_length(size_t length) { - payload_max_length_ = length; -} - -inline bool Server::bind_to_port(const char *host, int port, int socket_flags) { - if (bind_internal(host, port, socket_flags) < 0) return false; - return true; -} -inline int Server::bind_to_any_port(const char *host, int socket_flags) { - return bind_internal(host, 0, socket_flags); -} - -inline bool Server::listen_after_bind() { return listen_internal(); } - -inline bool Server::listen(const char *host, int port, int socket_flags) { - return bind_to_port(host, port, socket_flags) && listen_internal(); -} - -inline bool Server::is_running() const { return is_running_; } - -inline void Server::stop() { - if (is_running_) { - assert(svr_sock_ != INVALID_SOCKET); - std::atomic sock(svr_sock_.exchange(INVALID_SOCKET)); - detail::shutdown_socket(sock); - detail::close_socket(sock); - } -} - -inline bool Server::parse_request_line(const char *s, Request &req) { - const static std::regex re( - "(GET|HEAD|POST|PUT|DELETE|CONNECT|OPTIONS|TRACE|PATCH|PRI) " - "(([^?]+)(?:\\?(.*?))?) (HTTP/1\\.[01])\r\n"); - - std::cmatch m; - if (std::regex_match(s, m, re)) { - req.version = std::string(m[5]); - req.method = std::string(m[1]); - req.target = std::string(m[2]); - req.path = detail::decode_url(m[3], false); - - // Parse query text - auto len = std::distance(m[4].first, m[4].second); - if (len > 0) { detail::parse_query_text(m[4], req.params); } - - return true; - } - - return false; -} - -inline bool Server::write_response(Stream &strm, bool close_connection, - const Request &req, Response &res) { - return write_response_core(strm, close_connection, req, res, false); -} - -inline bool Server::write_response_with_content(Stream &strm, - bool close_connection, - const Request &req, - Response &res) { - return write_response_core(strm, close_connection, req, res, true); -} - -inline bool Server::write_response_core(Stream &strm, bool close_connection, - const Request &req, Response &res, - bool need_apply_ranges) { - assert(res.status != -1); - - if (400 <= res.status && error_handler_) { error_handler_(req, res); } - - std::string content_type; - std::string boundary; - if (need_apply_ranges) { apply_ranges(req, res, content_type, boundary); } - - // Headers - if (close_connection || req.get_header_value("Connection") == "close") { - res.set_header("Connection", "close"); - } else { - std::stringstream ss; - ss << "timeout=" << keep_alive_timeout_sec_ - << ", max=" << keep_alive_max_count_; - res.set_header("Keep-Alive", ss.str()); - } - - if (!res.has_header("Content-Type") && - (!res.body.empty() || res.content_length_ > 0 || res.content_provider_)) { - res.set_header("Content-Type", "text/plain"); - } - - if (!res.has_header("Content-Length") && res.body.empty() && - !res.content_length_ && !res.content_provider_) { - res.set_header("Content-Length", "0"); - } - - if (!res.has_header("Accept-Ranges") && req.method == "HEAD") { - res.set_header("Accept-Ranges", "bytes"); - } - - detail::BufferStream bstrm; - - // Response line - if (!bstrm.write_format("HTTP/1.1 %d %s\r\n", res.status, - detail::status_message(res.status))) { - return false; - } - - if (!detail::write_headers(bstrm, res, Headers())) { return false; } - - // Flush buffer - auto &data = bstrm.get_buffer(); - strm.write(data.data(), data.size()); - - // Body - auto ret = true; - if (req.method != "HEAD") { - if (!res.body.empty()) { - if (!strm.write(res.body)) { ret = false; } - } else if (res.content_provider_) { - if (!write_content_with_provider(strm, req, res, boundary, - content_type)) { - ret = false; - } - } - } - - // Log - if (logger_) { logger_(req, res); } - - return ret; -} - -inline bool -Server::write_content_with_provider(Stream &strm, const Request &req, - Response &res, const std::string &boundary, - const std::string &content_type) { - auto is_shutting_down = [this]() { - return this->svr_sock_ == INVALID_SOCKET; - }; - - if (res.content_length_ > 0) { - if (req.ranges.empty()) { - if (detail::write_content(strm, res.content_provider_, 0, - res.content_length_, is_shutting_down) < 0) { - return false; - } - } else if (req.ranges.size() == 1) { - auto offsets = - detail::get_range_offset_and_length(req, res.content_length_, 0); - auto offset = offsets.first; - auto length = offsets.second; - if (detail::write_content(strm, res.content_provider_, offset, length, - is_shutting_down) < 0) { - return false; - } - } else { - if (!detail::write_multipart_ranges_data( - strm, req, res, boundary, content_type, is_shutting_down)) { - return false; - } - } - } else { - if (res.is_chunked_content_provider) { - auto type = detail::encoding_type(req, res); - - std::unique_ptr compressor; - if (type == detail::EncodingType::Gzip) { -#ifdef CPPHTTPLIB_ZLIB_SUPPORT - compressor = detail::make_unique(); -#endif - } else if (type == detail::EncodingType::Brotli) { -#ifdef CPPHTTPLIB_BROTLI_SUPPORT - compressor = detail::make_unique(); -#endif - } else { - compressor = detail::make_unique(); - } - assert(compressor != nullptr); - - if (detail::write_content_chunked(strm, res.content_provider_, - is_shutting_down, *compressor) < 0) { - return false; - } - } else { - if (detail::write_content_without_length(strm, res.content_provider_, - is_shutting_down) < 0) { - return false; - } - } - } - return true; -} - -inline bool Server::read_content(Stream &strm, Request &req, Response &res) { - MultipartFormDataMap::iterator cur; - if (read_content_core( - strm, req, res, - // Regular - [&](const char *buf, size_t n) { - if (req.body.size() + n > req.body.max_size()) { return false; } - req.body.append(buf, n); - return true; - }, - // Multipart - [&](const MultipartFormData &file) { - cur = req.files.emplace(file.name, file); - return true; - }, - [&](const char *buf, size_t n) { - auto &content = cur->second.content; - if (content.size() + n > content.max_size()) { return false; } - content.append(buf, n); - return true; - })) { - const auto &content_type = req.get_header_value("Content-Type"); - if (!content_type.find("application/x-www-form-urlencoded")) { - detail::parse_query_text(req.body, req.params); - } - return true; - } - return false; -} - -inline bool Server::read_content_with_content_receiver( - Stream &strm, Request &req, Response &res, ContentReceiver receiver, - MultipartContentHeader multipart_header, - ContentReceiver multipart_receiver) { - return read_content_core(strm, req, res, std::move(receiver), - std::move(multipart_header), - std::move(multipart_receiver)); -} - -inline bool Server::read_content_core(Stream &strm, Request &req, Response &res, - ContentReceiver receiver, - MultipartContentHeader mulitpart_header, - ContentReceiver multipart_receiver) { - detail::MultipartFormDataParser multipart_form_data_parser; - ContentReceiverWithProgress out; - - if (req.is_multipart_form_data()) { - const auto &content_type = req.get_header_value("Content-Type"); - std::string boundary; - if (!detail::parse_multipart_boundary(content_type, boundary)) { - res.status = 400; - return false; - } - - multipart_form_data_parser.set_boundary(std::move(boundary)); - out = [&](const char *buf, size_t n, uint64_t /*off*/, uint64_t /*len*/) { - /* For debug - size_t pos = 0; - while (pos < n) { - auto read_size = std::min(1, n - pos); - auto ret = multipart_form_data_parser.parse( - buf + pos, read_size, multipart_receiver, mulitpart_header); - if (!ret) { return false; } - pos += read_size; - } - return true; - */ - return multipart_form_data_parser.parse(buf, n, multipart_receiver, - mulitpart_header); - }; - } else { - out = [receiver](const char *buf, size_t n, uint64_t /*off*/, - uint64_t /*len*/) { return receiver(buf, n); }; - } - - if (req.method == "DELETE" && !req.has_header("Content-Length")) { - return true; - } - - if (!detail::read_content(strm, req, payload_max_length_, res.status, nullptr, - out, true)) { - return false; - } - - if (req.is_multipart_form_data()) { - if (!multipart_form_data_parser.is_valid()) { - res.status = 400; - return false; - } - } - - return true; -} - -inline bool Server::handle_file_request(Request &req, Response &res, - bool head) { - for (const auto &entry : base_dirs_) { - // Prefix match - if (!req.path.compare(0, entry.mount_point.size(), entry.mount_point)) { - std::string sub_path = "/" + req.path.substr(entry.mount_point.size()); - if (detail::is_valid_path(sub_path)) { - auto path = entry.base_dir + sub_path; - if (path.back() == '/') { path += "index.html"; } - - if (detail::is_file(path)) { - detail::read_file(path, res.body); - auto type = - detail::find_content_type(path, file_extension_and_mimetype_map_); - if (type) { res.set_header("Content-Type", type); } - for (const auto &kv : entry.headers) { - res.set_header(kv.first.c_str(), kv.second); - } - res.status = 200; - if (!head && file_request_handler_) { - file_request_handler_(req, res); - } - return true; - } - } - } - } - return false; -} - -inline socket_t -Server::create_server_socket(const char *host, int port, int socket_flags, - SocketOptions socket_options) const { - return detail::create_socket( - host, port, socket_flags, tcp_nodelay_, std::move(socket_options), - [](socket_t sock, struct addrinfo &ai) -> bool { - if (::bind(sock, ai.ai_addr, static_cast(ai.ai_addrlen))) { - return false; - } - if (::listen(sock, 5)) { // Listen through 5 channels - return false; - } - return true; - }); -} - -inline int Server::bind_internal(const char *host, int port, int socket_flags) { - if (!is_valid()) { return -1; } - - svr_sock_ = create_server_socket(host, port, socket_flags, socket_options_); - if (svr_sock_ == INVALID_SOCKET) { return -1; } - - if (port == 0) { - struct sockaddr_storage addr; - socklen_t addr_len = sizeof(addr); - if (getsockname(svr_sock_, reinterpret_cast(&addr), - &addr_len) == -1) { - return -1; - } - if (addr.ss_family == AF_INET) { - return ntohs(reinterpret_cast(&addr)->sin_port); - } else if (addr.ss_family == AF_INET6) { - return ntohs(reinterpret_cast(&addr)->sin6_port); - } else { - return -1; - } - } else { - return port; - } -} - -inline bool Server::listen_internal() { - auto ret = true; - is_running_ = true; - - { - std::unique_ptr task_queue(new_task_queue()); - - while (svr_sock_ != INVALID_SOCKET) { -#ifndef _WIN32 - if (idle_interval_sec_ > 0 || idle_interval_usec_ > 0) { -#endif - auto val = detail::select_read(svr_sock_, idle_interval_sec_, - idle_interval_usec_); - if (val == 0) { // Timeout - task_queue->on_idle(); - continue; - } -#ifndef _WIN32 - } -#endif - socket_t sock = accept(svr_sock_, nullptr, nullptr); - - if (sock == INVALID_SOCKET) { - if (errno == EMFILE) { - // The per-process limit of open file descriptors has been reached. - // Try to accept new connections after a short sleep. - std::this_thread::sleep_for(std::chrono::milliseconds(1)); - continue; - } - if (svr_sock_ != INVALID_SOCKET) { - detail::close_socket(svr_sock_); - ret = false; - } else { - ; // The server socket was closed by user. - } - break; - } - -#if __cplusplus > 201703L - task_queue->enqueue([=, this]() { process_and_close_socket(sock); }); -#else - task_queue->enqueue([=]() { process_and_close_socket(sock); }); -#endif - } - - task_queue->shutdown(); - } - - is_running_ = false; - return ret; -} - -inline bool Server::routing(Request &req, Response &res, Stream &strm) { - // File handler - bool is_head_request = req.method == "HEAD"; - if ((req.method == "GET" || is_head_request) && - handle_file_request(req, res, is_head_request)) { - return true; - } - - if (detail::expect_content(req)) { - // Content reader handler - { - ContentReader reader( - [&](ContentReceiver receiver) { - return read_content_with_content_receiver( - strm, req, res, std::move(receiver), nullptr, nullptr); - }, - [&](MultipartContentHeader header, ContentReceiver receiver) { - return read_content_with_content_receiver(strm, req, res, nullptr, - std::move(header), - std::move(receiver)); - }); - - if (req.method == "POST") { - if (dispatch_request_for_content_reader( - req, res, std::move(reader), - post_handlers_for_content_reader_)) { - return true; - } - } else if (req.method == "PUT") { - if (dispatch_request_for_content_reader( - req, res, std::move(reader), - put_handlers_for_content_reader_)) { - return true; - } - } else if (req.method == "PATCH") { - if (dispatch_request_for_content_reader( - req, res, std::move(reader), - patch_handlers_for_content_reader_)) { - return true; - } - } else if (req.method == "DELETE") { - if (dispatch_request_for_content_reader( - req, res, std::move(reader), - delete_handlers_for_content_reader_)) { - return true; - } - } - } - - // Read content into `req.body` - if (!read_content(strm, req, res)) { return false; } - } - - // Regular handler - if (req.method == "GET" || req.method == "HEAD") { - return dispatch_request(req, res, get_handlers_); - } else if (req.method == "POST") { - return dispatch_request(req, res, post_handlers_); - } else if (req.method == "PUT") { - return dispatch_request(req, res, put_handlers_); - } else if (req.method == "DELETE") { - return dispatch_request(req, res, delete_handlers_); - } else if (req.method == "OPTIONS") { - return dispatch_request(req, res, options_handlers_); - } else if (req.method == "PATCH") { - return dispatch_request(req, res, patch_handlers_); - } - - res.status = 400; - return false; -} - -inline bool Server::dispatch_request(Request &req, Response &res, - const Handlers &handlers) { - try { - for (const auto &x : handlers) { - const auto &pattern = x.first; - const auto &handler = x.second; - - if (std::regex_match(req.path, req.matches, pattern)) { - handler(req, res); - return true; - } - } - } catch (const std::exception &ex) { - res.status = 500; - res.set_header("EXCEPTION_WHAT", ex.what()); - } catch (...) { - res.status = 500; - res.set_header("EXCEPTION_WHAT", "UNKNOWN"); - } - return false; -} - -inline void Server::apply_ranges(const Request &req, Response &res, - std::string &content_type, - std::string &boundary) { - if (req.ranges.size() > 1) { - boundary = detail::make_multipart_data_boundary(); - - auto it = res.headers.find("Content-Type"); - if (it != res.headers.end()) { - content_type = it->second; - res.headers.erase(it); - } - - res.headers.emplace("Content-Type", - "multipart/byteranges; boundary=" + boundary); - } - - auto type = detail::encoding_type(req, res); - - if (res.body.empty()) { - if (res.content_length_ > 0) { - size_t length = 0; - if (req.ranges.empty()) { - length = res.content_length_; - } else if (req.ranges.size() == 1) { - auto offsets = - detail::get_range_offset_and_length(req, res.content_length_, 0); - auto offset = offsets.first; - length = offsets.second; - auto content_range = detail::make_content_range_header_field( - offset, length, res.content_length_); - res.set_header("Content-Range", content_range); - } else { - length = detail::get_multipart_ranges_data_length(req, res, boundary, - content_type); - } - res.set_header("Content-Length", std::to_string(length)); - } else { - if (res.content_provider_) { - if (res.is_chunked_content_provider) { - res.set_header("Transfer-Encoding", "chunked"); - if (type == detail::EncodingType::Gzip) { - res.set_header("Content-Encoding", "gzip"); - } else if (type == detail::EncodingType::Brotli) { - res.set_header("Content-Encoding", "br"); - } - } - } - } - } else { - if (req.ranges.empty()) { - ; - } else if (req.ranges.size() == 1) { - auto offsets = - detail::get_range_offset_and_length(req, res.body.size(), 0); - auto offset = offsets.first; - auto length = offsets.second; - auto content_range = detail::make_content_range_header_field( - offset, length, res.body.size()); - res.set_header("Content-Range", content_range); - if (offset < res.body.size()) { - res.body = res.body.substr(offset, length); - } else { - res.body.clear(); - res.status = 416; - } - } else { - std::string data; - if (detail::make_multipart_ranges_data(req, res, boundary, content_type, - data)) { - res.body.swap(data); - } else { - res.body.clear(); - res.status = 416; - } - } - - if (type != detail::EncodingType::None) { - std::unique_ptr compressor; - std::string content_encoding; - - if (type == detail::EncodingType::Gzip) { -#ifdef CPPHTTPLIB_ZLIB_SUPPORT - compressor = detail::make_unique(); - content_encoding = "gzip"; -#endif - } else if (type == detail::EncodingType::Brotli) { -#ifdef CPPHTTPLIB_BROTLI_SUPPORT - compressor = detail::make_unique(); - content_encoding = "brotli"; -#endif - } - - if (compressor) { - std::string compressed; - if (compressor->compress(res.body.data(), res.body.size(), true, - [&](const char *data, size_t data_len) { - compressed.append(data, data_len); - return true; - })) { - res.body.swap(compressed); - res.set_header("Content-Encoding", content_encoding); - } - } - } - - auto length = std::to_string(res.body.size()); - res.set_header("Content-Length", length); - } -} - -inline bool Server::dispatch_request_for_content_reader( - Request &req, Response &res, ContentReader content_reader, - const HandlersForContentReader &handlers) { - for (const auto &x : handlers) { - const auto &pattern = x.first; - const auto &handler = x.second; - - if (std::regex_match(req.path, req.matches, pattern)) { - handler(req, res, content_reader); - return true; - } - } - return false; -} - -inline bool -Server::process_request(Stream &strm, bool close_connection, - bool &connection_closed, - const std::function &setup_request) { - std::array buf{}; - - detail::stream_line_reader line_reader(strm, buf.data(), buf.size()); - - // Connection has been closed on client - if (!line_reader.getline()) { return false; } - - Request req; - Response res; - - res.version = "HTTP/1.1"; - - // Check if the request URI doesn't exceed the limit - if (line_reader.size() > CPPHTTPLIB_REQUEST_URI_MAX_LENGTH) { - Headers dummy; - detail::read_headers(strm, dummy); - res.status = 414; - return write_response(strm, close_connection, req, res); - } - - // Request line and headers - if (!parse_request_line(line_reader.ptr(), req) || - !detail::read_headers(strm, req.headers)) { - res.status = 400; - return write_response(strm, close_connection, req, res); - } - - if (req.get_header_value("Connection") == "close") { - connection_closed = true; - } - - if (req.version == "HTTP/1.0" && - req.get_header_value("Connection") != "Keep-Alive") { - connection_closed = true; - } - - strm.get_remote_ip_and_port(req.remote_addr, req.remote_port); - req.set_header("REMOTE_ADDR", req.remote_addr); - req.set_header("REMOTE_PORT", std::to_string(req.remote_port)); - - if (req.has_header("Range")) { - const auto &range_header_value = req.get_header_value("Range"); - if (!detail::parse_range_header(range_header_value, req.ranges)) { - res.status = 416; - return write_response(strm, close_connection, req, res); - } - } - - if (setup_request) { setup_request(req); } - - if (req.get_header_value("Expect") == "100-continue") { - auto status = 100; - if (expect_100_continue_handler_) { - status = expect_100_continue_handler_(req, res); - } - switch (status) { - case 100: - case 417: - strm.write_format("HTTP/1.1 %d %s\r\n\r\n", status, - detail::status_message(status)); - break; - default: return write_response(strm, close_connection, req, res); - } - } - - // Rounting - if (routing(req, res, strm)) { - if (res.status == -1) { res.status = req.ranges.empty() ? 200 : 206; } - return write_response_with_content(strm, close_connection, req, res); - } else { - if (res.status == -1) { res.status = 404; } - return write_response(strm, close_connection, req, res); - } -} - -inline bool Server::is_valid() const { return true; } - -inline bool Server::process_and_close_socket(socket_t sock) { - auto ret = detail::process_server_socket( - sock, keep_alive_max_count_, keep_alive_timeout_sec_, read_timeout_sec_, - read_timeout_usec_, write_timeout_sec_, write_timeout_usec_, - [this](Stream &strm, bool close_connection, bool &connection_closed) { - return process_request(strm, close_connection, connection_closed, - nullptr); - }); - - detail::shutdown_socket(sock); - detail::close_socket(sock); - return ret; -} - -// HTTP client implementation -inline ClientImpl::ClientImpl(const std::string &host) - : ClientImpl(host, 80, std::string(), std::string()) {} - -inline ClientImpl::ClientImpl(const std::string &host, int port) - : ClientImpl(host, port, std::string(), std::string()) {} - -inline ClientImpl::ClientImpl(const std::string &host, int port, - const std::string &client_cert_path, - const std::string &client_key_path) - : host_(host), port_(port), - host_and_port_(host_ + ":" + std::to_string(port_)), - client_cert_path_(client_cert_path), client_key_path_(client_key_path) {} - -inline ClientImpl::~ClientImpl() { stop_core(); } - -inline bool ClientImpl::is_valid() const { return true; } - -inline HTTPError ClientImpl::get_last_error() const { return error_; } - -inline void ClientImpl::copy_settings(const ClientImpl &rhs) { - client_cert_path_ = rhs.client_cert_path_; - client_key_path_ = rhs.client_key_path_; - connection_timeout_sec_ = rhs.connection_timeout_sec_; - read_timeout_sec_ = rhs.read_timeout_sec_; - read_timeout_usec_ = rhs.read_timeout_usec_; - write_timeout_sec_ = rhs.write_timeout_sec_; - write_timeout_usec_ = rhs.write_timeout_usec_; - basic_auth_username_ = rhs.basic_auth_username_; - basic_auth_password_ = rhs.basic_auth_password_; - bearer_token_auth_token_ = rhs.bearer_token_auth_token_; -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - digest_auth_username_ = rhs.digest_auth_username_; - digest_auth_password_ = rhs.digest_auth_password_; -#endif - keep_alive_ = rhs.keep_alive_; - follow_location_ = rhs.follow_location_; - tcp_nodelay_ = rhs.tcp_nodelay_; - socket_options_ = rhs.socket_options_; - compress_ = rhs.compress_; - decompress_ = rhs.decompress_; - interface_ = rhs.interface_; - proxy_host_ = rhs.proxy_host_; - proxy_port_ = rhs.proxy_port_; - proxy_basic_auth_username_ = rhs.proxy_basic_auth_username_; - proxy_basic_auth_password_ = rhs.proxy_basic_auth_password_; - proxy_bearer_token_auth_token_ = rhs.proxy_bearer_token_auth_token_; -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - proxy_digest_auth_username_ = rhs.proxy_digest_auth_username_; - proxy_digest_auth_password_ = rhs.proxy_digest_auth_password_; -#endif -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - server_certificate_verification_ = rhs.server_certificate_verification_; -#endif - logger_ = rhs.logger_; -} - -inline socket_t ClientImpl::create_client_socket() const { - if (!proxy_host_.empty() && proxy_port_ != -1) { - return detail::create_client_socket( - proxy_host_.c_str(), proxy_port_, tcp_nodelay_, socket_options_, - connection_timeout_sec_, connection_timeout_usec_, interface_, error_); - } - return detail::create_client_socket( - host_.c_str(), port_, tcp_nodelay_, socket_options_, - connection_timeout_sec_, connection_timeout_usec_, interface_, error_); -} - -inline bool ClientImpl::create_and_connect_socket(Socket &socket) { - auto sock = create_client_socket(); - if (sock == INVALID_SOCKET) { return false; } - socket.sock = sock; - return true; -} - -inline void ClientImpl::close_socket(Socket &socket, - bool /*process_socket_ret*/) { - detail::close_socket(socket.sock); - socket_.sock = INVALID_SOCKET; -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - socket_.ssl = nullptr; -#endif -} - -inline bool ClientImpl::read_response_line(Stream &strm, Response &res) { - std::array buf; - - detail::stream_line_reader line_reader(strm, buf.data(), buf.size()); - - if (!line_reader.getline()) { return false; } - - const static std::regex re("(HTTP/1\\.[01]) (\\d+) (.*?)\r\n"); - - std::cmatch m; - if (!std::regex_match(line_reader.ptr(), m, re)) { return true; } - res.version = std::string(m[1]); - res.status = std::stoi(std::string(m[2])); - res.reason = std::string(m[3]); - - // Ignore '100 Continue' - while (res.status == 100) { - if (!line_reader.getline()) { return false; } // CRLF - if (!line_reader.getline()) { return false; } // next response line - - if (!std::regex_match(line_reader.ptr(), m, re)) { return false; } - res.version = std::string(m[1]); - res.status = std::stoi(std::string(m[2])); - res.reason = std::string(m[3]); - } - - return true; -} - -inline bool ClientImpl::send(const Request &req, Response &res) { - std::lock_guard request_mutex_guard(request_mutex_); - - { - std::lock_guard guard(socket_mutex_); - - auto is_alive = false; - if (socket_.is_open()) { - is_alive = detail::select_write(socket_.sock, 0, 0) > 0; - if (!is_alive) { close_socket(socket_, false); } - } - - if (!is_alive) { - if (!create_and_connect_socket(socket_)) { return false; } - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - // TODO: refactoring - if (is_ssl()) { - auto &scli = static_cast(*this); - if (!proxy_host_.empty() && proxy_port_ != -1) { - bool success = false; - if (!scli.connect_with_proxy(socket_, res, success)) { - return success; - } - } - - if (!scli.initialize_ssl(socket_)) { return false; } - } -#endif - } - } - - auto close_connection = !keep_alive_; - - auto ret = process_socket(socket_, [&](Stream &strm) { - return handle_request(strm, req, res, close_connection); - }); - - if (close_connection || !ret) { stop_core(); } - - if (!ret) { - if (error_ == HTTPError::Success) { error_ = HTTPError::Unknown; } - } - - return ret; -} - -inline bool ClientImpl::handle_request(Stream &strm, const Request &req, - Response &res, bool close_connection) { - if (req.path.empty()) { - error_ = HTTPError::Connection; - return false; - } - - bool ret; - - if (!is_ssl() && !proxy_host_.empty() && proxy_port_ != -1) { - auto req2 = req; - req2.path = "http://" + host_and_port_ + req.path; - ret = process_request(strm, req2, res, close_connection); - } else { - ret = process_request(strm, req, res, close_connection); - } - - if (!ret) { return false; } - - if (300 < res.status && res.status < 400 && follow_location_) { - ret = redirect(req, res); - } - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - if ((res.status == 401 || res.status == 407) && - req.authorization_count_ < 5) { - auto is_proxy = res.status == 407; - const auto &username = - is_proxy ? proxy_digest_auth_username_ : digest_auth_username_; - const auto &password = - is_proxy ? proxy_digest_auth_password_ : digest_auth_password_; - - if (!username.empty() && !password.empty()) { - std::map auth; - if (detail::parse_www_authenticate(res, auth, is_proxy)) { - Request new_req = req; - new_req.authorization_count_ += 1; - auto key = is_proxy ? "Proxy-Authorization" : "Authorization"; - new_req.headers.erase(key); - new_req.headers.insert(detail::make_digest_authentication_header( - req, auth, new_req.authorization_count_, detail::random_string(10), - username, password, is_proxy)); - - Response new_res; - - ret = send(new_req, new_res); - if (ret) { res = new_res; } - } - } - } -#endif - - return ret; -} - -inline bool ClientImpl::redirect(const Request &req, Response &res) { - if (req.redirect_count == 0) { - error_ = HTTPError::ExceedRedirectCount; - return false; - } - - auto location = detail::decode_url(res.get_header_value("location"), true); - if (location.empty()) { return false; } - - const static std::regex re( - R"(^(?:(https?):)?(?://([^:/?#]*)(?::(\d+))?)?([^?#]*(?:\?[^#]*)?)(?:#.*)?)"); - - std::smatch m; - if (!std::regex_match(location, m, re)) { return false; } - - auto scheme = is_ssl() ? "https" : "http"; - - auto next_scheme = m[1].str(); - auto next_host = m[2].str(); - auto port_str = m[3].str(); - auto next_path = m[4].str(); - - auto next_port = port_; - if (!port_str.empty()) { - next_port = std::stoi(port_str); - } else if (!next_scheme.empty()) { - next_port = next_scheme == "https" ? 443 : 80; - } - - if (next_scheme.empty()) { next_scheme = scheme; } - if (next_host.empty()) { next_host = host_; } - if (next_path.empty()) { next_path = "/"; } - - if (next_scheme == scheme && next_host == host_ && next_port == port_) { - return detail::redirect(*this, req, res, next_path); - } else { - if (next_scheme == "https") { -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - SSLClient cli(next_host.c_str(), next_port); - cli.copy_settings(*this); - auto ret = detail::redirect(cli, req, res, next_path); - if (!ret) { error_ = cli.get_last_error(); } - return ret; -#else - return false; -#endif - } else { - ClientImpl cli(next_host.c_str(), next_port); - cli.copy_settings(*this); - auto ret = detail::redirect(cli, req, res, next_path); - if (!ret) { error_ = cli.get_last_error(); } - return ret; - } - } -} - -inline bool ClientImpl::write_request(Stream &strm, const Request &req, - bool close_connection) { - detail::BufferStream bstrm; - - // Request line - const auto &path = detail::encode_url(req.path); - - bstrm.write_format("%s %s HTTP/1.1\r\n", req.method.c_str(), path.c_str()); - - // Additonal headers - Headers headers; - if (close_connection) { headers.emplace("Connection", "close"); } - - if (!req.has_header("Host")) { - if (is_ssl()) { - if (port_ == 443) { - headers.emplace("Host", host_); - } else { - headers.emplace("Host", host_and_port_); - } - } else { - if (port_ == 80) { - headers.emplace("Host", host_); - } else { - headers.emplace("Host", host_and_port_); - } - } - } - - if (!req.has_header("Accept")) { headers.emplace("Accept", "*/*"); } - - if (!req.has_header("User-Agent")) { - headers.emplace("User-Agent", "cpp-httplib/0.7"); - } - - if (req.body.empty()) { - if (req.content_provider) { - auto length = std::to_string(req.content_length); - headers.emplace("Content-Length", length); - } else { - if (req.method == "POST" || req.method == "PUT" || - req.method == "PATCH") { - headers.emplace("Content-Length", "0"); - } - } - } else { - if (!req.has_header("Content-Type")) { - headers.emplace("Content-Type", "text/plain"); - } - - if (!req.has_header("Content-Length")) { - auto length = std::to_string(req.body.size()); - headers.emplace("Content-Length", length); - } - } - - if (!basic_auth_password_.empty()) { - headers.insert(make_basic_authentication_header( - basic_auth_username_, basic_auth_password_, false)); - } - - if (!proxy_basic_auth_username_.empty() && - !proxy_basic_auth_password_.empty()) { - headers.insert(make_basic_authentication_header( - proxy_basic_auth_username_, proxy_basic_auth_password_, true)); - } - - if (!bearer_token_auth_token_.empty()) { - headers.insert(make_bearer_token_authentication_header( - bearer_token_auth_token_, false)); - } - - if (!proxy_bearer_token_auth_token_.empty()) { - headers.insert(make_bearer_token_authentication_header( - proxy_bearer_token_auth_token_, true)); - } - - detail::write_headers(bstrm, req, headers); - - // Flush buffer - auto &data = bstrm.get_buffer(); - if (!detail::write_data(strm, data.data(), data.size())) { - error_ = HTTPError::Write; - return false; - } - - // Body - if (req.body.empty()) { - if (req.content_provider) { - size_t offset = 0; - size_t end_offset = req.content_length; - - bool ok = true; - - DataSink data_sink; - data_sink.write = [&](const char *d, size_t l) { - if (ok) { - if (detail::write_data(strm, d, l)) { - offset += l; - } else { - ok = false; - } - } - }; - data_sink.is_writable = [&](void) { return ok && strm.is_writable(); }; - - while (offset < end_offset) { - if (!req.content_provider(offset, end_offset - offset, data_sink)) { - error_ = HTTPError::Canceled; - return false; - } - if (!ok) { - error_ = HTTPError::Write; - return false; - } - } - } - } else { - return detail::write_data(strm, req.body.data(), req.body.size()); - } - - return true; -} - -inline std::unique_ptr ClientImpl::send_with_content_provider( - const char *method, const char *path, const Headers &headers, - const std::string &body, size_t content_length, - ContentProvider content_provider, const char *content_type) { - - Request req; - req.method = method; - req.headers = default_headers_; - req.headers.insert(headers.begin(), headers.end()); - req.path = path; - - if (content_type) { req.headers.emplace("Content-Type", content_type); } - -#ifdef CPPHTTPLIB_ZLIB_SUPPORT - if (compress_) { - detail::gzip_compressor compressor; - - if (content_provider) { - auto ok = true; - size_t offset = 0; - - DataSink data_sink; - data_sink.write = [&](const char *data, size_t data_len) { - if (ok) { - auto last = offset + data_len == content_length; - - auto ret = compressor.compress( - data, data_len, last, [&](const char *data, size_t data_len) { - req.body.append(data, data_len); - return true; - }); - - if (ret) { - offset += data_len; - } else { - ok = false; - } - } - }; - data_sink.is_writable = [&](void) { return ok && true; }; - - while (ok && offset < content_length) { - if (!content_provider(offset, content_length - offset, data_sink)) { - error_ = HTTPError::Canceled; - return nullptr; - } - } - } else { - if (!compressor.compress(body.data(), body.size(), true, - [&](const char *data, size_t data_len) { - req.body.append(data, data_len); - return true; - })) { - return nullptr; - } - } - - req.headers.emplace("Content-Encoding", "gzip"); - } else -#endif - { - if (content_provider) { - req.content_length = content_length; - req.content_provider = std::move(content_provider); - } else { - req.body = body; - } - } - - auto res = detail::make_unique(); - - return send(req, *res) ? std::move(res) : nullptr; -} - -inline bool ClientImpl::process_request(Stream &strm, const Request &req, - Response &res, bool close_connection) { - // Send request - if (!write_request(strm, req, close_connection)) { return false; } - - // Receive response and headers - if (!read_response_line(strm, res) || - !detail::read_headers(strm, res.headers)) { - error_ = HTTPError::Read; - return false; - } - - if (req.response_handler) { - if (!req.response_handler(res)) { - error_ = HTTPError::Canceled; - return false; - } - } - - // Body - if (req.method != "HEAD" && req.method != "CONNECT") { - auto out = - req.content_receiver - ? static_cast( - [&](const char *buf, size_t n, uint64_t off, uint64_t len) { - auto ret = req.content_receiver(buf, n, off, len); - if (!ret) { error_ = HTTPError::Canceled; } - return ret; - }) - : static_cast( - [&](const char *buf, size_t n, uint64_t /*off*/, - uint64_t /*len*/) { - if (res.body.size() + n > res.body.max_size()) { - return false; - } - res.body.append(buf, n); - return true; - }); - - auto progress = [&](uint64_t current, uint64_t total) { - if (!req.progress) { return true; } - auto ret = req.progress(current, total); - if (!ret) { error_ = HTTPError::Canceled; } - return ret; - }; - - int dummy_status; - if (!detail::read_content(strm, res, (std::numeric_limits::max)(), - dummy_status, std::move(progress), std::move(out), - decompress_)) { - if (error_ != HTTPError::Canceled) { error_ = HTTPError::Read; } - return false; - } - } - - if (res.get_header_value("Connection") == "close" || - (res.version == "HTTP/1.0" && res.reason != "Connection established")) { - stop_core(); - } - - // Log - if (logger_) { logger_(req, res); } - - return true; -} - -inline bool -ClientImpl::process_socket(Socket &socket, - std::function callback) { - return detail::process_client_socket( - socket.sock, read_timeout_sec_, read_timeout_usec_, write_timeout_sec_, - write_timeout_usec_, std::move(callback)); -} - -inline bool ClientImpl::is_ssl() const { return false; } - -inline Result ClientImpl::Get(const char *path) { - return Get(path, Headers(), Progress()); -} - -inline Result ClientImpl::Get(const char *path, Progress progress) { - return Get(path, Headers(), std::move(progress)); -} - -inline Result ClientImpl::Get(const char *path, const Headers &headers) { - return Get(path, headers, Progress()); -} - -inline Result ClientImpl::Get(const char *path, const Headers &headers, - Progress progress) { - Request req; - req.method = "GET"; - req.path = path; - req.headers = default_headers_; - req.headers.insert(headers.begin(), headers.end()); - req.progress = std::move(progress); - - auto res = detail::make_unique(); - auto ret = send(req, *res); - return Result{ret ? std::move(res) : nullptr, get_last_error()}; -} - -inline Result ClientImpl::Get(const char *path, - ContentReceiver content_receiver) { - return Get(path, Headers(), nullptr, std::move(content_receiver), nullptr); -} - -inline Result ClientImpl::Get(const char *path, - ContentReceiver content_receiver, - Progress progress) { - return Get(path, Headers(), nullptr, std::move(content_receiver), - std::move(progress)); -} - -inline Result ClientImpl::Get(const char *path, const Headers &headers, - ContentReceiver content_receiver) { - return Get(path, headers, nullptr, std::move(content_receiver), nullptr); -} - -inline Result ClientImpl::Get(const char *path, const Headers &headers, - ContentReceiver content_receiver, - Progress progress) { - return Get(path, headers, nullptr, std::move(content_receiver), - std::move(progress)); -} - -inline Result ClientImpl::Get(const char *path, - ResponseHandler response_handler, - ContentReceiver content_receiver) { - return Get(path, Headers(), std::move(response_handler), - std::move(content_receiver), nullptr); -} - -inline Result ClientImpl::Get(const char *path, const Headers &headers, - ResponseHandler response_handler, - ContentReceiver content_receiver) { - return Get(path, headers, std::move(response_handler), - std::move(content_receiver), nullptr); -} - -inline Result ClientImpl::Get(const char *path, - ResponseHandler response_handler, - ContentReceiver content_receiver, - Progress progress) { - return Get(path, Headers(), std::move(response_handler), - std::move(content_receiver), std::move(progress)); -} - -inline Result ClientImpl::Get(const char *path, const Headers &headers, - ResponseHandler response_handler, - ContentReceiver content_receiver, - Progress progress) { - Request req; - req.method = "GET"; - req.path = path; - req.headers = default_headers_; - req.headers.insert(headers.begin(), headers.end()); - req.response_handler = std::move(response_handler); - req.content_receiver = - [content_receiver](const char *data, size_t data_length, - uint64_t /*offset*/, uint64_t /*total_length*/) { - return content_receiver(data, data_length); - }; - req.progress = std::move(progress); - - auto res = detail::make_unique(); - auto ret = send(req, *res); - return Result{ret ? std::move(res) : nullptr, get_last_error()}; -} - -inline Result ClientImpl::Head(const char *path) { - return Head(path, Headers()); -} - -inline Result ClientImpl::Head(const char *path, const Headers &headers) { - Request req; - req.method = "HEAD"; - req.headers = default_headers_; - req.headers.insert(headers.begin(), headers.end()); - req.path = path; - - auto res = detail::make_unique(); - auto ret = send(req, *res); - return Result{ret ? std::move(res) : nullptr, get_last_error()}; -} - -inline Result ClientImpl::Post(const char *path) { - return Post(path, std::string(), nullptr); -} - -inline Result ClientImpl::Post(const char *path, const std::string &body, - const char *content_type) { - return Post(path, Headers(), body, content_type); -} - -inline Result ClientImpl::Post(const char *path, const Headers &headers, - const std::string &body, - const char *content_type) { - auto ret = send_with_content_provider("POST", path, headers, body, 0, nullptr, - content_type); - return Result{std::move(ret), get_last_error()}; -} - -inline Result ClientImpl::Post(const char *path, const Params ¶ms) { - return Post(path, Headers(), params); -} - -inline Result ClientImpl::Post(const char *path, size_t content_length, - ContentProvider content_provider, - const char *content_type) { - return Post(path, Headers(), content_length, std::move(content_provider), - content_type); -} - -inline Result ClientImpl::Post(const char *path, const Headers &headers, - size_t content_length, - ContentProvider content_provider, - const char *content_type) { - auto ret = send_with_content_provider( - "POST", path, headers, std::string(), content_length, - std::move(content_provider), content_type); - return Result{std::move(ret), get_last_error()}; -} - -inline Result ClientImpl::Post(const char *path, const Headers &headers, - const Params ¶ms) { - auto query = detail::params_to_query_str(params); - return Post(path, headers, query, "application/x-www-form-urlencoded"); -} - -inline Result ClientImpl::Post(const char *path, - const MultipartFormDataItems &items) { - return Post(path, Headers(), items); -} - -inline Result ClientImpl::Post(const char *path, const Headers &headers, - const MultipartFormDataItems &items) { - return Post(path, headers, items, detail::make_multipart_data_boundary()); -} -inline Result ClientImpl::Post(const char *path, const Headers &headers, - const MultipartFormDataItems &items, - const std::string &boundary) { - for (size_t i = 0; i < boundary.size(); i++) { - char c = boundary[i]; - if (!std::isalnum(c) && c != '-' && c != '_') { - error_ = HTTPError::UnsupportedMultipartBoundaryChars; - return Result{nullptr, error_}; - } - } - - std::string body; - - for (const auto &item : items) { - body += "--" + boundary + "\r\n"; - body += "Content-Disposition: form-data; name=\"" + item.name + "\""; - if (!item.filename.empty()) { - body += "; filename=\"" + item.filename + "\""; - } - body += "\r\n"; - if (!item.content_type.empty()) { - body += "Content-Type: " + item.content_type + "\r\n"; - } - body += "\r\n"; - body += item.content + "\r\n"; - } - - body += "--" + boundary + "--\r\n"; - - std::string content_type = "multipart/form-data; boundary=" + boundary; - return Post(path, headers, body, content_type.c_str()); -} - -inline Result ClientImpl::Put(const char *path) { - return Put(path, std::string(), nullptr); -} - -inline Result ClientImpl::Put(const char *path, const std::string &body, - const char *content_type) { - return Put(path, Headers(), body, content_type); -} - -inline Result ClientImpl::Put(const char *path, const Headers &headers, - const std::string &body, - const char *content_type) { - auto ret = send_with_content_provider("PUT", path, headers, body, 0, nullptr, - content_type); - return Result{std::move(ret), get_last_error()}; -} - -inline Result ClientImpl::Put(const char *path, size_t content_length, - ContentProvider content_provider, - const char *content_type) { - return Put(path, Headers(), content_length, std::move(content_provider), - content_type); -} - -inline Result ClientImpl::Put(const char *path, const Headers &headers, - size_t content_length, - ContentProvider content_provider, - const char *content_type) { - auto ret = send_with_content_provider( - "PUT", path, headers, std::string(), content_length, - std::move(content_provider), content_type); - return Result{std::move(ret), get_last_error()}; -} - -inline Result ClientImpl::Put(const char *path, const Params ¶ms) { - return Put(path, Headers(), params); -} - -inline Result ClientImpl::Put(const char *path, const Headers &headers, - const Params ¶ms) { - auto query = detail::params_to_query_str(params); - return Put(path, headers, query, "application/x-www-form-urlencoded"); -} - -inline Result ClientImpl::Patch(const char *path, const std::string &body, - const char *content_type) { - return Patch(path, Headers(), body, content_type); -} - -inline Result ClientImpl::Patch(const char *path, const Headers &headers, - const std::string &body, - const char *content_type) { - auto ret = send_with_content_provider("PATCH", path, headers, body, 0, - nullptr, content_type); - return Result{std::move(ret), get_last_error()}; -} - -inline Result ClientImpl::Patch(const char *path, size_t content_length, - ContentProvider content_provider, - const char *content_type) { - return Patch(path, Headers(), content_length, std::move(content_provider), - content_type); -} - -inline Result ClientImpl::Patch(const char *path, const Headers &headers, - size_t content_length, - ContentProvider content_provider, - const char *content_type) { - auto ret = send_with_content_provider( - "PATCH", path, headers, std::string(), content_length, - std::move(content_provider), content_type); - return Result{std::move(ret), get_last_error()}; -} - -inline Result ClientImpl::Delete(const char *path) { - return Delete(path, Headers(), std::string(), nullptr); -} - -inline Result ClientImpl::Delete(const char *path, const std::string &body, - const char *content_type) { - return Delete(path, Headers(), body, content_type); -} - -inline Result ClientImpl::Delete(const char *path, const Headers &headers) { - return Delete(path, headers, std::string(), nullptr); -} - -inline Result ClientImpl::Delete(const char *path, const Headers &headers, - const std::string &body, - const char *content_type) { - Request req; - req.method = "DELETE"; - req.headers = default_headers_; - req.headers.insert(headers.begin(), headers.end()); - req.path = path; - - if (content_type) { req.headers.emplace("Content-Type", content_type); } - req.body = body; - - auto res = detail::make_unique(); - auto ret = send(req, *res); - return Result{ret ? std::move(res) : nullptr, get_last_error()}; -} - -inline Result ClientImpl::Options(const char *path) { - return Options(path, Headers()); -} - -inline Result ClientImpl::Options(const char *path, const Headers &headers) { - Request req; - req.method = "OPTIONS"; - req.headers = default_headers_; - req.headers.insert(headers.begin(), headers.end()); - req.path = path; - - auto res = detail::make_unique(); - auto ret = send(req, *res); - return Result{ret ? std::move(res) : nullptr, get_last_error()}; -} - -inline size_t ClientImpl::is_socket_open() const { - std::lock_guard guard(socket_mutex_); - return socket_.is_open(); -} - -inline void ClientImpl::stop() { - stop_core(); - error_ = HTTPError::Canceled; -} - -inline void ClientImpl::stop_core() { - std::lock_guard guard(socket_mutex_); - if (socket_.is_open()) { - detail::shutdown_socket(socket_.sock); - std::this_thread::sleep_for(std::chrono::milliseconds(1)); - close_socket(socket_, true); - std::this_thread::sleep_for(std::chrono::milliseconds(1)); - } -} - -inline void ClientImpl::set_connection_timeout(time_t sec, time_t usec) { - connection_timeout_sec_ = sec; - connection_timeout_usec_ = usec; -} - -inline void ClientImpl::set_read_timeout(time_t sec, time_t usec) { - read_timeout_sec_ = sec; - read_timeout_usec_ = usec; -} - -inline void ClientImpl::set_write_timeout(time_t sec, time_t usec) { - write_timeout_sec_ = sec; - write_timeout_usec_ = usec; -} - -inline void ClientImpl::set_basic_auth(const char *username, - const char *password) { - basic_auth_username_ = username; - basic_auth_password_ = password; -} - -inline void ClientImpl::set_bearer_token_auth(const char *token) { - bearer_token_auth_token_ = token; -} - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT -inline void ClientImpl::set_digest_auth(const char *username, - const char *password) { - digest_auth_username_ = username; - digest_auth_password_ = password; -} -#endif - -inline void ClientImpl::set_keep_alive(bool on) { keep_alive_ = on; } - -inline void ClientImpl::set_follow_location(bool on) { follow_location_ = on; } - -inline void ClientImpl::set_default_headers(Headers headers) { - default_headers_ = std::move(headers); -} - -inline void ClientImpl::set_tcp_nodelay(bool on) { tcp_nodelay_ = on; } - -inline void ClientImpl::set_socket_options(SocketOptions socket_options) { - socket_options_ = std::move(socket_options); -} - -inline void ClientImpl::set_compress(bool on) { compress_ = on; } - -inline void ClientImpl::set_decompress(bool on) { decompress_ = on; } - -inline void ClientImpl::set_interface(const char *intf) { interface_ = intf; } - -inline void ClientImpl::set_proxy(const char *host, int port) { - proxy_host_ = host; - proxy_port_ = port; -} - -inline void ClientImpl::set_proxy_basic_auth(const char *username, - const char *password) { - proxy_basic_auth_username_ = username; - proxy_basic_auth_password_ = password; -} - -inline void ClientImpl::set_proxy_bearer_token_auth(const char *token) { - proxy_bearer_token_auth_token_ = token; -} - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT -inline void ClientImpl::set_proxy_digest_auth(const char *username, - const char *password) { - proxy_digest_auth_username_ = username; - proxy_digest_auth_password_ = password; -} -#endif - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT -inline void ClientImpl::enable_server_certificate_verification(bool enabled) { - server_certificate_verification_ = enabled; -} -#endif - -inline void ClientImpl::set_logger(Logger logger) { - logger_ = std::move(logger); -} - -/* - * SSL Implementation - */ -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT -namespace detail { - -template -inline SSL *ssl_new(socket_t sock, SSL_CTX *ctx, std::mutex &ctx_mutex, - U SSL_connect_or_accept, V setup) { - SSL *ssl = nullptr; - { - std::lock_guard guard(ctx_mutex); - ssl = SSL_new(ctx); - } - - if (ssl) { - set_nonblocking(sock, true); - auto bio = BIO_new_socket(static_cast(sock), BIO_NOCLOSE); - BIO_set_nbio(bio, 1); - SSL_set_bio(ssl, bio, bio); - - if (!setup(ssl) || SSL_connect_or_accept(ssl) != 1) { - SSL_shutdown(ssl); - { - std::lock_guard guard(ctx_mutex); - SSL_free(ssl); - } - set_nonblocking(sock, false); - return nullptr; - } - BIO_set_nbio(bio, 0); - set_nonblocking(sock, false); - } - - return ssl; -} - -inline void ssl_delete(std::mutex &ctx_mutex, SSL *ssl, - bool process_socket_ret) { - if (process_socket_ret) { - SSL_shutdown(ssl); // shutdown only if not already closed by remote - } - - std::lock_guard guard(ctx_mutex); - SSL_free(ssl); -} - -template -bool ssl_connect_or_accept_nonblocking(socket_t sock, SSL *ssl, - U ssl_connect_or_accept, - time_t timeout_sec, - time_t timeout_usec) { - int res = 0; - while ((res = ssl_connect_or_accept(ssl)) != 1) { - auto err = SSL_get_error(ssl, res); - switch (err) { - case SSL_ERROR_WANT_READ: - if (select_read(sock, timeout_sec, timeout_usec) > 0) { continue; } - break; - case SSL_ERROR_WANT_WRITE: - if (select_write(sock, timeout_sec, timeout_usec) > 0) { continue; } - break; - default: break; - } - return false; - } - return true; -} - -template -inline bool -process_server_socket_ssl(SSL *ssl, socket_t sock, size_t keep_alive_max_count, - time_t keep_alive_timeout_sec, - time_t read_timeout_sec, time_t read_timeout_usec, - time_t write_timeout_sec, time_t write_timeout_usec, - T callback) { - return process_server_socket_core( - sock, keep_alive_max_count, keep_alive_timeout_sec, - [&](bool close_connection, bool &connection_closed) { - SSLSocketStream strm(sock, ssl, read_timeout_sec, read_timeout_usec, - write_timeout_sec, write_timeout_usec); - return callback(strm, close_connection, connection_closed); - }); -} - -template -inline bool -process_client_socket_ssl(SSL *ssl, socket_t sock, time_t read_timeout_sec, - time_t read_timeout_usec, time_t write_timeout_sec, - time_t write_timeout_usec, T callback) { - SSLSocketStream strm(sock, ssl, read_timeout_sec, read_timeout_usec, - write_timeout_sec, write_timeout_usec); - return callback(strm); -} - -#if OPENSSL_VERSION_NUMBER < 0x10100000L -static std::shared_ptr> openSSL_locks_; - -class SSLThreadLocks { -public: - SSLThreadLocks() { - openSSL_locks_ = - std::make_shared>(CRYPTO_num_locks()); - CRYPTO_set_locking_callback(locking_callback); - } - - ~SSLThreadLocks() { CRYPTO_set_locking_callback(nullptr); } - -private: - static void locking_callback(int mode, int type, const char * /*file*/, - int /*line*/) { - auto &lk = (*openSSL_locks_)[static_cast(type)]; - if (mode & CRYPTO_LOCK) { - lk.lock(); - } else { - lk.unlock(); - } - } -}; - -#endif - -class SSLInit { -public: - SSLInit() { -#if OPENSSL_VERSION_NUMBER < 0x1010001fL - SSL_load_error_strings(); - SSL_library_init(); -#else - OPENSSL_init_ssl( - OPENSSL_INIT_LOAD_SSL_STRINGS | OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL); -#endif - } - - ~SSLInit() { -#if OPENSSL_VERSION_NUMBER < 0x1010001fL - ERR_free_strings(); -#endif - } - -private: -#if OPENSSL_VERSION_NUMBER < 0x10100000L - SSLThreadLocks thread_init_; -#endif -}; - -// SSL socket stream implementation -inline SSLSocketStream::SSLSocketStream(socket_t sock, SSL *ssl, - time_t read_timeout_sec, - time_t read_timeout_usec, - time_t write_timeout_sec, - time_t write_timeout_usec) - : sock_(sock), ssl_(ssl), read_timeout_sec_(read_timeout_sec), - read_timeout_usec_(read_timeout_usec), - write_timeout_sec_(write_timeout_sec), - write_timeout_usec_(write_timeout_usec) { - SSL_clear_mode(ssl, SSL_MODE_AUTO_RETRY); -} - -inline SSLSocketStream::~SSLSocketStream() {} - -inline bool SSLSocketStream::is_readable() const { - return detail::select_read(sock_, read_timeout_sec_, read_timeout_usec_) > 0; -} - -inline bool SSLSocketStream::is_writable() const { - return detail::select_write(sock_, write_timeout_sec_, write_timeout_usec_) > - 0; -} - -inline ssize_t SSLSocketStream::read(char *ptr, size_t size) { - if (SSL_pending(ssl_) > 0) { - return SSL_read(ssl_, ptr, static_cast(size)); - } else if (is_readable()) { - auto ret = SSL_read(ssl_, ptr, static_cast(size)); - if (ret < 0) { - auto err = SSL_get_error(ssl_, ret); - while (err == SSL_ERROR_WANT_READ) { - if (SSL_pending(ssl_) > 0) { - return SSL_read(ssl_, ptr, static_cast(size)); - } else if (is_readable()) { - ret = SSL_read(ssl_, ptr, static_cast(size)); - if (ret >= 0) { return ret; } - err = SSL_get_error(ssl_, ret); - } else { - return -1; - } - } - } - return ret; - } - return -1; -} - -inline ssize_t SSLSocketStream::write(const char *ptr, size_t size) { - if (is_writable()) { return SSL_write(ssl_, ptr, static_cast(size)); } - return -1; -} - -inline void SSLSocketStream::get_remote_ip_and_port(std::string &ip, - int &port) const { - detail::get_remote_ip_and_port(sock_, ip, port); -} - -static SSLInit sslinit_; - -} // namespace detail - -// SSL HTTP server implementation -inline SSLServer::SSLServer(const char *cert_path, const char *private_key_path, - const char *client_ca_cert_file_path, - const char *client_ca_cert_dir_path) { - ctx_ = SSL_CTX_new(SSLv23_server_method()); - - if (ctx_) { - SSL_CTX_set_options(ctx_, - SSL_OP_ALL | SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3 | - SSL_OP_NO_COMPRESSION | - SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION); - - // auto ecdh = EC_KEY_new_by_curve_name(NID_X9_62_prime256v1); - // SSL_CTX_set_tmp_ecdh(ctx_, ecdh); - // EC_KEY_free(ecdh); - - if (SSL_CTX_use_certificate_chain_file(ctx_, cert_path) != 1 || - SSL_CTX_use_PrivateKey_file(ctx_, private_key_path, SSL_FILETYPE_PEM) != - 1) { - SSL_CTX_free(ctx_); - ctx_ = nullptr; - } else if (client_ca_cert_file_path || client_ca_cert_dir_path) { - // if (client_ca_cert_file_path) { - // auto list = SSL_load_client_CA_file(client_ca_cert_file_path); - // SSL_CTX_set_client_CA_list(ctx_, list); - // } - - SSL_CTX_load_verify_locations(ctx_, client_ca_cert_file_path, - client_ca_cert_dir_path); - - SSL_CTX_set_verify( - ctx_, - SSL_VERIFY_PEER | - SSL_VERIFY_FAIL_IF_NO_PEER_CERT, // SSL_VERIFY_CLIENT_ONCE, - nullptr); - } - } -} - -inline SSLServer::SSLServer(X509 *cert, EVP_PKEY *private_key, - X509_STORE *client_ca_cert_store) { - ctx_ = SSL_CTX_new(SSLv23_server_method()); - - if (ctx_) { - SSL_CTX_set_options(ctx_, - SSL_OP_ALL | SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3 | - SSL_OP_NO_COMPRESSION | - SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION); - - if (SSL_CTX_use_certificate(ctx_, cert) != 1 || - SSL_CTX_use_PrivateKey(ctx_, private_key) != 1) { - SSL_CTX_free(ctx_); - ctx_ = nullptr; - } else if (client_ca_cert_store) { - - SSL_CTX_set_cert_store(ctx_, client_ca_cert_store); - - SSL_CTX_set_verify( - ctx_, - SSL_VERIFY_PEER | - SSL_VERIFY_FAIL_IF_NO_PEER_CERT, // SSL_VERIFY_CLIENT_ONCE, - nullptr); - } - } -} - -inline SSLServer::~SSLServer() { - if (ctx_) { SSL_CTX_free(ctx_); } -} - -inline bool SSLServer::is_valid() const { return ctx_; } - -inline bool SSLServer::process_and_close_socket(socket_t sock) { - auto ssl = detail::ssl_new( - sock, ctx_, ctx_mutex_, - [&](SSL *ssl) { - return detail::ssl_connect_or_accept_nonblocking( - sock, ssl, SSL_accept, read_timeout_sec_, read_timeout_usec_); - }, - [](SSL * /*ssl*/) { return true; }); - - if (ssl) { - auto ret = detail::process_server_socket_ssl( - ssl, sock, keep_alive_max_count_, keep_alive_timeout_sec_, - read_timeout_sec_, read_timeout_usec_, write_timeout_sec_, - write_timeout_usec_, - [this, ssl](Stream &strm, bool close_connection, - bool &connection_closed) { - return process_request(strm, close_connection, connection_closed, - [&](Request &req) { req.ssl = ssl; }); - }); - - detail::ssl_delete(ctx_mutex_, ssl, ret); - detail::shutdown_socket(sock); - detail::close_socket(sock); - return ret; - } - - detail::shutdown_socket(sock); - detail::close_socket(sock); - return false; -} - -// SSL HTTP client implementation -inline SSLClient::SSLClient(const std::string &host) - : SSLClient(host, 443, std::string(), std::string()) {} - -inline SSLClient::SSLClient(const std::string &host, int port) - : SSLClient(host, port, std::string(), std::string()) {} - -inline SSLClient::SSLClient(const std::string &host, int port, - const std::string &client_cert_path, - const std::string &client_key_path) - : ClientImpl(host, port, client_cert_path, client_key_path) { - ctx_ = SSL_CTX_new(SSLv23_client_method()); - - detail::split(&host_[0], &host_[host_.size()], '.', - [&](const char *b, const char *e) { - host_components_.emplace_back(std::string(b, e)); - }); - if (!client_cert_path.empty() && !client_key_path.empty()) { - if (SSL_CTX_use_certificate_file(ctx_, client_cert_path.c_str(), - SSL_FILETYPE_PEM) != 1 || - SSL_CTX_use_PrivateKey_file(ctx_, client_key_path.c_str(), - SSL_FILETYPE_PEM) != 1) { - SSL_CTX_free(ctx_); - ctx_ = nullptr; - } - } -} - -inline SSLClient::SSLClient(const std::string &host, int port, - X509 *client_cert, EVP_PKEY *client_key) - : ClientImpl(host, port) { - ctx_ = SSL_CTX_new(SSLv23_client_method()); - - detail::split(&host_[0], &host_[host_.size()], '.', - [&](const char *b, const char *e) { - host_components_.emplace_back(std::string(b, e)); - }); - if (client_cert != nullptr && client_key != nullptr) { - if (SSL_CTX_use_certificate(ctx_, client_cert) != 1 || - SSL_CTX_use_PrivateKey(ctx_, client_key) != 1) { - SSL_CTX_free(ctx_); - ctx_ = nullptr; - } - } -} - -inline SSLClient::~SSLClient() { - if (ctx_) { SSL_CTX_free(ctx_); } -} - -inline bool SSLClient::is_valid() const { return ctx_; } - -inline void SSLClient::set_ca_cert_path(const char *ca_cert_file_path, - const char *ca_cert_dir_path) { - if (ca_cert_file_path) { ca_cert_file_path_ = ca_cert_file_path; } - if (ca_cert_dir_path) { ca_cert_dir_path_ = ca_cert_dir_path; } -} - -inline void SSLClient::set_ca_cert_store(X509_STORE *ca_cert_store) { - if (ca_cert_store) { - if (ctx_) { - if (SSL_CTX_get_cert_store(ctx_) != ca_cert_store) { - // Free memory allocated for old cert and use new store `ca_cert_store` - SSL_CTX_set_cert_store(ctx_, ca_cert_store); - } - } else { - X509_STORE_free(ca_cert_store); - } - } -} - -inline long SSLClient::get_openssl_verify_result() const { - return verify_result_; -} - -inline SSL_CTX *SSLClient::ssl_context() const { return ctx_; } - -inline bool SSLClient::create_and_connect_socket(Socket &socket) { - return is_valid() && ClientImpl::create_and_connect_socket(socket); -} - -inline bool SSLClient::connect_with_proxy(Socket &socket, Response &res, - bool &success) { - success = true; - Response res2; - - if (!detail::process_client_socket( - socket.sock, read_timeout_sec_, read_timeout_usec_, - write_timeout_sec_, write_timeout_usec_, [&](Stream &strm) { - Request req2; - req2.method = "CONNECT"; - req2.path = host_and_port_; - return process_request(strm, req2, res2, false); - })) { - close_socket(socket, true); - success = false; - return false; - } - - if (res2.status == 407) { - if (!proxy_digest_auth_username_.empty() && - !proxy_digest_auth_password_.empty()) { - std::map auth; - if (detail::parse_www_authenticate(res2, auth, true)) { - Response res3; - if (!detail::process_client_socket( - socket.sock, read_timeout_sec_, read_timeout_usec_, - write_timeout_sec_, write_timeout_usec_, [&](Stream &strm) { - Request req3; - req3.method = "CONNECT"; - req3.path = host_and_port_; - req3.headers.insert(detail::make_digest_authentication_header( - req3, auth, 1, detail::random_string(10), - proxy_digest_auth_username_, proxy_digest_auth_password_, - true)); - return process_request(strm, req3, res3, false); - })) { - close_socket(socket, true); - success = false; - return false; - } - } - } else { - res = res2; - return false; - } - } - - return true; -} - -inline bool SSLClient::load_certs() { - bool ret = true; - - std::call_once(initialize_cert_, [&]() { - std::lock_guard guard(ctx_mutex_); - if (!ca_cert_file_path_.empty()) { - if (!SSL_CTX_load_verify_locations(ctx_, ca_cert_file_path_.c_str(), - nullptr)) { - ret = false; - } - } else if (!ca_cert_dir_path_.empty()) { - if (!SSL_CTX_load_verify_locations(ctx_, nullptr, - ca_cert_dir_path_.c_str())) { - ret = false; - } - } else { -#ifdef _WIN32 - detail::load_system_certs_on_windows(SSL_CTX_get_cert_store(ctx_)); -#else - SSL_CTX_set_default_verify_paths(ctx_); -#endif - } - }); - - return ret; -} - -inline bool SSLClient::initialize_ssl(Socket &socket) { - auto ssl = detail::ssl_new( - socket.sock, ctx_, ctx_mutex_, - [&](SSL *ssl) { - if (server_certificate_verification_) { - if (!load_certs()) { - error_ = HTTPError::SSLLoadingCerts; - return false; - } - SSL_set_verify(ssl, SSL_VERIFY_NONE, nullptr); - } - - if (!detail::ssl_connect_or_accept_nonblocking( - socket.sock, ssl, SSL_connect, connection_timeout_sec_, - connection_timeout_usec_)) { - error_ = HTTPError::SSLConnection; - return false; - } - - if (server_certificate_verification_) { - verify_result_ = SSL_get_verify_result(ssl); - - if (verify_result_ != X509_V_OK) { - error_ = HTTPError::SSLServerVerification; - return false; - } - - auto server_cert = SSL_get_peer_certificate(ssl); - - if (server_cert == nullptr) { - error_ = HTTPError::SSLServerVerification; - return false; - } - - if (!verify_host(server_cert)) { - X509_free(server_cert); - error_ = HTTPError::SSLServerVerification; - return false; - } - X509_free(server_cert); - } - - return true; - }, - [&](SSL *ssl) { - SSL_set_tlsext_host_name(ssl, host_.c_str()); - return true; - }); - - if (ssl) { - socket.ssl = ssl; - return true; - } - - close_socket(socket, false); - return false; -} - -inline void SSLClient::close_socket(Socket &socket, bool process_socket_ret) { - detail::close_socket(socket.sock); - socket_.sock = INVALID_SOCKET; - if (socket.ssl) { - detail::ssl_delete(ctx_mutex_, socket.ssl, process_socket_ret); - socket_.ssl = nullptr; - } -} - -inline bool -SSLClient::process_socket(Socket &socket, - std::function callback) { - assert(socket.ssl); - return detail::process_client_socket_ssl( - socket.ssl, socket.sock, read_timeout_sec_, read_timeout_usec_, - write_timeout_sec_, write_timeout_usec_, std::move(callback)); -} - -inline bool SSLClient::is_ssl() const { return true; } - -inline bool SSLClient::verify_host(X509 *server_cert) const { - /* Quote from RFC2818 section 3.1 "Server Identity" - - If a subjectAltName extension of type dNSName is present, that MUST - be used as the identity. Otherwise, the (most specific) Common Name - field in the Subject field of the certificate MUST be used. Although - the use of the Common Name is existing practice, it is deprecated and - Certification Authorities are encouraged to use the dNSName instead. - - Matching is performed using the matching rules specified by - [RFC2459]. If more than one identity of a given type is present in - the certificate (e.g., more than one dNSName name, a match in any one - of the set is considered acceptable.) Names may contain the wildcard - character * which is considered to match any single domain name - component or component fragment. E.g., *.a.com matches foo.a.com but - not bar.foo.a.com. f*.com matches foo.com but not bar.com. - - In some cases, the URI is specified as an IP address rather than a - hostname. In this case, the iPAddress subjectAltName must be present - in the certificate and must exactly match the IP in the URI. - - */ - return verify_host_with_subject_alt_name(server_cert) || - verify_host_with_common_name(server_cert); -} - -inline bool -SSLClient::verify_host_with_subject_alt_name(X509 *server_cert) const { - auto ret = false; - - auto type = GEN_DNS; - - struct in6_addr addr6; - struct in_addr addr; - size_t addr_len = 0; - -#ifndef __MINGW32__ - if (inet_pton(AF_INET6, host_.c_str(), &addr6)) { - type = GEN_IPADD; - addr_len = sizeof(struct in6_addr); - } else if (inet_pton(AF_INET, host_.c_str(), &addr)) { - type = GEN_IPADD; - addr_len = sizeof(struct in_addr); - } -#endif - - auto alt_names = static_cast( - X509_get_ext_d2i(server_cert, NID_subject_alt_name, nullptr, nullptr)); - - if (alt_names) { - auto dsn_matched = false; - auto ip_mached = false; - - auto count = sk_GENERAL_NAME_num(alt_names); - - for (decltype(count) i = 0; i < count && !dsn_matched; i++) { - auto val = sk_GENERAL_NAME_value(alt_names, i); - if (val->type == type) { - auto name = (const char *)ASN1_STRING_get0_data(val->d.ia5); - auto name_len = (size_t)ASN1_STRING_length(val->d.ia5); - - switch (type) { - case GEN_DNS: dsn_matched = check_host_name(name, name_len); break; - - case GEN_IPADD: - if (!memcmp(&addr6, name, addr_len) || - !memcmp(&addr, name, addr_len)) { - ip_mached = true; - } - break; - } - } - } - - if (dsn_matched || ip_mached) { ret = true; } - } - - GENERAL_NAMES_free((STACK_OF(GENERAL_NAME) *)alt_names); - return ret; -} - -inline bool SSLClient::verify_host_with_common_name(X509 *server_cert) const { - const auto subject_name = X509_get_subject_name(server_cert); - - if (subject_name != nullptr) { - char name[BUFSIZ]; - auto name_len = X509_NAME_get_text_by_NID(subject_name, NID_commonName, - name, sizeof(name)); - - if (name_len != -1) { - return check_host_name(name, static_cast(name_len)); - } - } - - return false; -} - -inline bool SSLClient::check_host_name(const char *pattern, - size_t pattern_len) const { - if (host_.size() == pattern_len && host_ == pattern) { return true; } - - // Wildcard match - // https://bugs.launchpad.net/ubuntu/+source/firefox-3.0/+bug/376484 - std::vector pattern_components; - detail::split(&pattern[0], &pattern[pattern_len], '.', - [&](const char *b, const char *e) { - pattern_components.emplace_back(std::string(b, e)); - }); - - if (host_components_.size() != pattern_components.size()) { return false; } - - auto itr = pattern_components.begin(); - for (const auto &h : host_components_) { - auto &p = *itr; - if (p != h && p != "*") { - auto partial_match = (p.size() > 0 && p[p.size() - 1] == '*' && - !p.compare(0, p.size() - 1, h)); - if (!partial_match) { return false; } - } - ++itr; - } - - return true; -} -#endif - -// Universal client implementation -inline Client::Client(const char *scheme_host_port) - : Client(scheme_host_port, std::string(), std::string()) {} - -inline Client::Client(const char *scheme_host_port, - const std::string &client_cert_path, - const std::string &client_key_path) { - const static std::regex re(R"(^(?:([a-z]+)://)?([^:/?#]+)(?::(\d+))?)"); - - std::cmatch m; - if (std::regex_match(scheme_host_port, m, re)) { - auto scheme = m[1].str(); - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - if (!scheme.empty() && (scheme != "http" && scheme != "https")) { -#else - if (!scheme.empty() && scheme != "http") { -#endif - std::string msg = "'" + scheme + "' scheme is not supported."; - throw std::invalid_argument(msg); - return; - } - - auto is_ssl = scheme == "https"; - - auto host = m[2].str(); - - auto port_str = m[3].str(); - auto port = !port_str.empty() ? std::stoi(port_str) : (is_ssl ? 443 : 80); - - if (is_ssl) { -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - cli_ = detail::make_unique(host.c_str(), port, - client_cert_path, client_key_path); - is_ssl_ = is_ssl; -#endif - } else { - cli_ = detail::make_unique(host.c_str(), port, - client_cert_path, client_key_path); - } - } else { - cli_ = detail::make_unique(scheme_host_port, 80, - client_cert_path, client_key_path); - } -} - -inline Client::Client(const std::string &host, int port) - : cli_(detail::make_unique(host, port)) {} - -inline Client::Client(const std::string &host, int port, - const std::string &client_cert_path, - const std::string &client_key_path) - : cli_(detail::make_unique(host, port, client_cert_path, - client_key_path)) {} - -inline Client::~Client() {} - -inline bool Client::is_valid() const { - return cli_ != nullptr && cli_->is_valid(); -} - -inline Result Client::Get(const char *path) { return cli_->Get(path); } -inline Result Client::Get(const char *path, const Headers &headers) { - return cli_->Get(path, headers); -} -inline Result Client::Get(const char *path, Progress progress) { - return cli_->Get(path, std::move(progress)); -} -inline Result Client::Get(const char *path, const Headers &headers, - Progress progress) { - return cli_->Get(path, headers, std::move(progress)); -} -inline Result Client::Get(const char *path, ContentReceiver content_receiver) { - return cli_->Get(path, std::move(content_receiver)); -} -inline Result Client::Get(const char *path, const Headers &headers, - ContentReceiver content_receiver) { - return cli_->Get(path, headers, std::move(content_receiver)); -} -inline Result Client::Get(const char *path, ContentReceiver content_receiver, - Progress progress) { - return cli_->Get(path, std::move(content_receiver), std::move(progress)); -} -inline Result Client::Get(const char *path, const Headers &headers, - ContentReceiver content_receiver, Progress progress) { - return cli_->Get(path, headers, std::move(content_receiver), - std::move(progress)); -} -inline Result Client::Get(const char *path, ResponseHandler response_handler, - ContentReceiver content_receiver) { - return cli_->Get(path, std::move(response_handler), - std::move(content_receiver)); -} -inline Result Client::Get(const char *path, const Headers &headers, - ResponseHandler response_handler, - ContentReceiver content_receiver) { - return cli_->Get(path, headers, std::move(response_handler), - std::move(content_receiver)); -} -inline Result Client::Get(const char *path, ResponseHandler response_handler, - ContentReceiver content_receiver, Progress progress) { - return cli_->Get(path, std::move(response_handler), - std::move(content_receiver), std::move(progress)); -} -inline Result Client::Get(const char *path, const Headers &headers, - ResponseHandler response_handler, - ContentReceiver content_receiver, Progress progress) { - return cli_->Get(path, headers, std::move(response_handler), - std::move(content_receiver), std::move(progress)); -} - -inline Result Client::Head(const char *path) { return cli_->Head(path); } -inline Result Client::Head(const char *path, const Headers &headers) { - return cli_->Head(path, headers); -} - -inline Result Client::Post(const char *path) { return cli_->Post(path); } -inline Result Client::Post(const char *path, const std::string &body, - const char *content_type) { - return cli_->Post(path, body, content_type); -} -inline Result Client::Post(const char *path, const Headers &headers, - const std::string &body, const char *content_type) { - return cli_->Post(path, headers, body, content_type); -} -inline Result Client::Post(const char *path, size_t content_length, - ContentProvider content_provider, - const char *content_type) { - return cli_->Post(path, content_length, std::move(content_provider), - content_type); -} -inline Result Client::Post(const char *path, const Headers &headers, - size_t content_length, - ContentProvider content_provider, - const char *content_type) { - return cli_->Post(path, headers, content_length, std::move(content_provider), - content_type); -} -inline Result Client::Post(const char *path, const Params ¶ms) { - return cli_->Post(path, params); -} -inline Result Client::Post(const char *path, const Headers &headers, - const Params ¶ms) { - return cli_->Post(path, headers, params); -} -inline Result Client::Post(const char *path, - const MultipartFormDataItems &items) { - return cli_->Post(path, items); -} -inline Result Client::Post(const char *path, const Headers &headers, - const MultipartFormDataItems &items) { - return cli_->Post(path, headers, items); -} -inline Result Client::Post(const char *path, const Headers &headers, - const MultipartFormDataItems &items, - const std::string &boundary) { - return cli_->Post(path, headers, items, boundary); -} -inline Result Client::Put(const char *path) { return cli_->Put(path); } -inline Result Client::Put(const char *path, const std::string &body, - const char *content_type) { - return cli_->Put(path, body, content_type); -} -inline Result Client::Put(const char *path, const Headers &headers, - const std::string &body, const char *content_type) { - return cli_->Put(path, headers, body, content_type); -} -inline Result Client::Put(const char *path, size_t content_length, - ContentProvider content_provider, - const char *content_type) { - return cli_->Put(path, content_length, std::move(content_provider), - content_type); -} -inline Result Client::Put(const char *path, const Headers &headers, - size_t content_length, - ContentProvider content_provider, - const char *content_type) { - return cli_->Put(path, headers, content_length, std::move(content_provider), - content_type); -} -inline Result Client::Put(const char *path, const Params ¶ms) { - return cli_->Put(path, params); -} -inline Result Client::Put(const char *path, const Headers &headers, - const Params ¶ms) { - return cli_->Put(path, headers, params); -} -inline Result Client::Patch(const char *path, const std::string &body, - const char *content_type) { - return cli_->Patch(path, body, content_type); -} -inline Result Client::Patch(const char *path, const Headers &headers, - const std::string &body, const char *content_type) { - return cli_->Patch(path, headers, body, content_type); -} -inline Result Client::Patch(const char *path, size_t content_length, - ContentProvider content_provider, - const char *content_type) { - return cli_->Patch(path, content_length, std::move(content_provider), - content_type); -} -inline Result Client::Patch(const char *path, const Headers &headers, - size_t content_length, - ContentProvider content_provider, - const char *content_type) { - return cli_->Patch(path, headers, content_length, std::move(content_provider), - content_type); -} -inline Result Client::Delete(const char *path) { return cli_->Delete(path); } -inline Result Client::Delete(const char *path, const std::string &body, - const char *content_type) { - return cli_->Delete(path, body, content_type); -} -inline Result Client::Delete(const char *path, const Headers &headers) { - return cli_->Delete(path, headers); -} -inline Result Client::Delete(const char *path, const Headers &headers, - const std::string &body, - const char *content_type) { - return cli_->Delete(path, headers, body, content_type); -} -inline Result Client::Options(const char *path) { return cli_->Options(path); } -inline Result Client::Options(const char *path, const Headers &headers) { - return cli_->Options(path, headers); -} - -inline bool Client::send(const Request &req, Response &res) { - return cli_->send(req, res); -} - -inline size_t Client::is_socket_open() const { return cli_->is_socket_open(); } - -inline void Client::stop() { cli_->stop(); } - -inline void Client::set_default_headers(Headers headers) { - cli_->set_default_headers(std::move(headers)); -} - -inline void Client::set_tcp_nodelay(bool on) { cli_->set_tcp_nodelay(on); } -inline void Client::set_socket_options(SocketOptions socket_options) { - cli_->set_socket_options(std::move(socket_options)); -} - -inline void Client::set_connection_timeout(time_t sec, time_t usec) { - cli_->set_connection_timeout(sec, usec); -} -inline void Client::set_read_timeout(time_t sec, time_t usec) { - cli_->set_read_timeout(sec, usec); -} -inline void Client::set_write_timeout(time_t sec, time_t usec) { - cli_->set_write_timeout(sec, usec); -} - -inline void Client::set_basic_auth(const char *username, const char *password) { - cli_->set_basic_auth(username, password); -} -inline void Client::set_bearer_token_auth(const char *token) { - cli_->set_bearer_token_auth(token); -} -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT -inline void Client::set_digest_auth(const char *username, - const char *password) { - cli_->set_digest_auth(username, password); -} -#endif - -inline void Client::set_keep_alive(bool on) { cli_->set_keep_alive(on); } -inline void Client::set_follow_location(bool on) { - cli_->set_follow_location(on); -} - -inline void Client::set_compress(bool on) { cli_->set_compress(on); } - -inline void Client::set_decompress(bool on) { cli_->set_decompress(on); } - -inline void Client::set_interface(const char *intf) { - cli_->set_interface(intf); -} - -inline void Client::set_proxy(const char *host, int port) { - cli_->set_proxy(host, port); -} -inline void Client::set_proxy_basic_auth(const char *username, - const char *password) { - cli_->set_proxy_basic_auth(username, password); -} -inline void Client::set_proxy_bearer_token_auth(const char *token) { - cli_->set_proxy_bearer_token_auth(token); -} -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT -inline void Client::set_proxy_digest_auth(const char *username, - const char *password) { - cli_->set_proxy_digest_auth(username, password); -} -#endif - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT -inline void Client::enable_server_certificate_verification(bool enabled) { - cli_->enable_server_certificate_verification(enabled); -} -#endif - -inline void Client::set_logger(Logger logger) { cli_->set_logger(logger); } - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT -inline void Client::set_ca_cert_path(const char *ca_cert_file_path, - const char *ca_cert_dir_path) { - if (is_ssl_) { - static_cast(*cli_).set_ca_cert_path(ca_cert_file_path, - ca_cert_dir_path); - } -} - -inline void Client::set_ca_cert_store(X509_STORE *ca_cert_store) { - if (is_ssl_) { - static_cast(*cli_).set_ca_cert_store(ca_cert_store); - } -} - -inline long Client::get_openssl_verify_result() const { - if (is_ssl_) { - return static_cast(*cli_).get_openssl_verify_result(); - } - return -1; // NOTE: -1 doesn't match any of X509_V_ERR_??? -} - -inline SSL_CTX *Client::ssl_context() const { - if (is_ssl_) { return static_cast(*cli_).ssl_context(); } - return nullptr; -} -#endif - -// ---------------------------------------------------------------------------- - -} // namespace httplib - -#endif // CPPHTTPLIB_HTTPLIB_H \ No newline at end of file diff --git a/nectar_modules/njs-http/lib/njs-http.h b/nectar_modules/njs-http/lib/njs-http.h deleted file mode 100644 index b2fc5614d..000000000 --- a/nectar_modules/njs-http/lib/njs-http.h +++ /dev/null @@ -1,235 +0,0 @@ -/* - * This file is part of NectarJS - * Copyright (c) 2017 - 2020 Adrien THIERRY - * http://nectarjs.com - https://seraum.com/ - * - * sources : https://github.com/nectarjs/nectarjs - * - * NectarJS is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * NectarJS is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with NectarJS. If not, see . - * - */ - -#if defined(_WIN32) || defined(__CYGWIN__) - #define WIN32_LEAN_AND_MEAN - #include "windows.h" -#endif - -#include "httplib.h" - -using namespace httplib; - - -var __Nectar_HTTP_LISTEN(var _host, var _port, var _cb, var _opt) -{ - Server __Nectar_HTTP_SRV; - - if(_opt.type == NectarCore::Enum::Type::Object) - { - var _static = _opt["static"]; - if(_static.type == NectarCore::Enum::Type::String) - { - auto ret = __Nectar_HTTP_SRV.set_mount_point("/", ((std::string)_static).c_str()); - if (!ret) - { - __Nectar_Log_Console("Warning: path " + _static + " doesn't exist"); - } - } - - } - /*** LOAD GET ***/ - __Nectar_HTTP_SRV.Get(".*", [&](const Request& request, Response& response) - { - - var __f_Nectar_HTTP_RES_END = __Nectar_Create_Var_Scoped_Anon( - { - var _str = ""; - if(__Nectar_VARLENGTH == 1) _str = __Nectar_VARARGS[0]; - response.set_content((std::string)_str, "text/plain"); - return var(); - }); - - - var _req = __NJS_Create_Object(); - _req["method"] = "GET"; - _req["url"] = request.path; - - var _query = __NJS_Create_Object(); - for (auto it = request.params.begin(); it != request.params.end(); ++it) - { - __Nectar_Object_Set(it->first, it->second, _query); - } - _req["get"] = _query; - - var _njs_res = __NJS_Create_Object(); - _njs_res["end"] = __f_Nectar_HTTP_RES_END; - - _cb(_req, _njs_res); - return var(); - }); - - /*** LOAD POST ***/ - __Nectar_HTTP_SRV.Post(".*", [&](const Request& request, Response& response, const ContentReader &content_reader) - { - NectarCore::Type::function_t* __Nectar_HTTP_RES_END = new NectarCore::Type::function_t([&](NectarCore::VAR& __Nectar_THIS, NectarCore::VAR* _args, int _length) - { - var _str = ""; - if(_length == 1) _str = _args[0]; - response.set_content((std::string)_str, "text/plain"); - return var(); - }); - var __f_Nectar_HTTP_RES_END = __Nectar_Create_Function(__Nectar_HTTP_RES_END); - - var _req = __NJS_Create_Object(); - _req["method"] = "POST"; - _req["url"] = request.path; - - // GET DATA - if (request.is_multipart_form_data()) - { - __Nectar_Object_Set("isMultipart", true, _req); - var _multi = __NJS_Create_Object(); - - MultipartFormDataItems files; - content_reader( - [&](const MultipartFormData &file) - { - files.push_back(file); - return true; - }, - [&](const char *data, size_t data_length) - { - files.back().content.append(data, data_length); - return true; - } - ); - for (const auto &file : files) - { - var _file = __NJS_Create_Object(); - _file["body"] = file.content; - _file["mime"] = file.content_type; - _multi[file.name] = _file; - } - _req["data"] = _multi; - } - else - { - _req["isMultipart"] = false; - std::string body; - content_reader([&](const char *data, size_t data_length) - { - body.append(data, data_length); - return true; - }); - _req["data"] = body; - } - - - var _njs_res = __NJS_Create_Object(); - _njs_res["end"] = __f_Nectar_HTTP_RES_END; - - _cb(_req, _njs_res); - return var(); - }); - - /*** LOAD PUT ***/ - __Nectar_HTTP_SRV.Put(".*", [&](const Request& request, Response& response, const ContentReader &content_reader) - { - NectarCore::Type::function_t* __Nectar_HTTP_RES_END = new NectarCore::Type::function_t([&](NectarCore::VAR& __Nectar_THIS, NectarCore::VAR* _args, int _length) - { - var _str = ""; - if(_length == 1) _str = _args[0]; - response.set_content((std::string)_str, "text/plain"); - return var(); - }); - var __f_Nectar_HTTP_RES_END = __Nectar_Create_Function(__Nectar_HTTP_RES_END); - - var _req = __NJS_Create_Object(); - _req["method"] = "PUT"; - _req["url"] = request.path; - - // GET DATA - if (request.is_multipart_form_data()) - { - _req["isMultipart"] = true; - var _multi = __NJS_Create_Object(); - - MultipartFormDataItems files; - content_reader( - [&](const MultipartFormData &file) - { - files.push_back(file); - return true; - }, - [&](const char *data, size_t data_length) - { - files.back().content.append(data, data_length); - return true; - } - ); - - for (const auto &file : files) - { - var _file = __NJS_Create_Object(); - _file["body"] = file.content; - _file["mime"] = file.content_type; - _multi[file.name] = _file; - } - _req["data"] = _multi; - } - else - { - _req["isMultipart"] = false; - std::string body; - content_reader([&](const char *data, size_t data_length) - { - body.append(data, data_length); - return true; - }); - _req["data"] = body; - } - - var _njs_res = __NJS_Create_Object(); - _njs_res["end"] = __f_Nectar_HTTP_RES_END; - - _cb(_req, _njs_res); - return var(); - }); - - /*** LOAD DELETE ***/ - __Nectar_HTTP_SRV.Delete(".*", [&](const Request& request, Response& response) - { - NectarCore::Type::function_t* __Nectar_HTTP_RES_END = new NectarCore::Type::function_t([&](NectarCore::VAR& __Nectar_THIS, NectarCore::VAR* _args, int _length) - { - var _str = ""; - if(_length == 1) _str = _args[0]; - response.set_content((std::string)_str, "text/plain"); - return var(); - }); - var __f_Nectar_HTTP_RES_END = __Nectar_Create_Function(__Nectar_HTTP_RES_END); - - var _req = __NJS_Create_Object(); - _req["method"] = "DELETE"; - _req["url"] = request.path; - - var _njs_res = __NJS_Create_Object(); - _njs_res["end"] = __f_Nectar_HTTP_RES_END; - - _cb(_req, _njs_res); - return var(); - }); - - __Nectar_HTTP_SRV.listen(((std::string)_host).c_str(), (int)_port); - return var(); -} - diff --git a/nectar_modules/njs-http/package.json b/nectar_modules/njs-http/package.json deleted file mode 100644 index a5626b1c2..000000000 --- a/nectar_modules/njs-http/package.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "name": "njs-http", - "description": "NectarJS Simple HTTP module", - "main": "index.js", - "bugs": - { - "url": "https://github.com/NectarJS/nectar-modules/issues" - }, - - "directories": - { - "root": ".", - "lib": "lib" - }, - "homepage": "https://github.com/NectarJS/nectar-modules#readme", - "keywords": - [ - "nectarjs", - "console", - "nodejs", - "node", - "http" - ], - "license": - { - "type": "MIT", - "url": "https://github.com/NectarJS/nectar-modules/blob/master/LICENSE" - }, - "repository": - { - "type": "git", - "url": "git+ssh://git@github.com/NectarJS/nectar-modules.git" - }, - "version": "0.0.2", - "nectar": - { - "message": - { - "win32": - { - "g++": "This library needs GCC without CYGWIN or clang++ to be compiled on Windows" - } - }, - "env": ["std", "node"], - "expose": ["__Nectar_HTTP_GET", "__Nectar_HTTP_LISTEN"], - "lib": - { - "default": "-lpthread", - "win32": - { - "default": ["-lWsock32", "-lws2_32"] - } - } - } -} diff --git a/nectar_modules/process/index.js b/nectar_modules/process/index.js deleted file mode 100644 index a830d050b..000000000 --- a/nectar_modules/process/index.js +++ /dev/null @@ -1,33 +0,0 @@ -/* - * This file is part of NectarJS - * Copyright (c) 2017 - 2020 Adrien THIERRY - * http://nectarjs.com - https://seraum.com/ - * - * sources : https://github.com/nectarjs/nectarjs - * - * NectarJS is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * NectarJS is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with NectarJS. If not, see . - * - */ - -var process = -{ - argv: __NJS_ARGS, - exit: function(_code) - { - if(_code) _code = 0; - __Nectar_EXIT(_code); - } -}; - -module.exports = process; diff --git a/nectar_modules/process/package.json b/nectar_modules/process/package.json deleted file mode 100644 index 8291fce5b..000000000 --- a/nectar_modules/process/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "process", - "description": "NectarJS NodeJS base process module", - "main": "index.js", - "bugs": - { - "url": "https://github.com/NectarJS/nectarjs/issues" - }, - - "directories": - { - "root": "." - }, - "homepage": "https://github.com/NectarJS/nectarjs#readme", - "keywords": - [ - "nectarjs", - "nodejs", - "process", - "argv", - "arguments" - ], - "license": "GPL-3.0-or-later", - "licenses": [ - { - "type": "GPL", - "url": "https://github.com/nectarjs/nectarjs/blob/master/LICENSE" - } - ], - "repository": - { - "type": "git", - "url": "git+ssh://git@github.com/NectarJS/nectarjs.git" - }, - "version": "0.0.1", - "nectar": - { - "env": ["std", "node"] - } -} diff --git a/nectar_modules/stm32/index.js b/nectar_modules/stm32/index.js deleted file mode 100644 index 42a391642..000000000 --- a/nectar_modules/stm32/index.js +++ /dev/null @@ -1,30 +0,0 @@ -/* - * This file is part of NectarJS - * Copyright (c) 2017 - 2020 Adrien THIERRY - * http://nectarjs.com - https://seraum.com/ - * - * sources : https://github.com/nectarjs/nectarjs - * - * NectarJS is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * NectarJS is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with NectarJS. If not, see . - * - */ - -"!_ffi_include lib/stm32.h"; - -var STM32 = -{ - wait: function(_num) { __Nectar_STM32_WAIT(_num); } -}; - -module.exports = STM32; diff --git a/nectar_modules/stm32/lib/stm32.h b/nectar_modules/stm32/lib/stm32.h deleted file mode 100644 index dc1456039..000000000 --- a/nectar_modules/stm32/lib/stm32.h +++ /dev/null @@ -1,28 +0,0 @@ -/* - * This file is part of NectarJS - * Copyright (c) 2017 - 2020 Adrien THIERRY - * http://nectarjs.com - https://seraum.com/ - * - * sources : https://github.com/nectarjs/nectarjs - * - * NectarJS is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * NectarJS is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with NectarJS. If not, see . - * - */ - -#include "mbed.h" - -void __Nectar_STM32_WAIT(var _time) -{ - wait(__Nectar_Get_Int(_time)); -} diff --git a/nectar_modules/stm32/package.json b/nectar_modules/stm32/package.json deleted file mode 100644 index ea21a4f47..000000000 --- a/nectar_modules/stm32/package.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "name": "stm32", - "description": "NectarJS base STM32 module", - "main": "index.js", - "bugs": - { - "url": "https://github.com/NectarJS/nectarjs/issues" - }, - - "directories": - { - "root": ".", - "lib": "lib" - }, - "homepage": "https://github.com/NectarJS/nectarjs#readme", - "keywords": - [ - "nectarjs", - "STMicro", - "STM32", - "nucleo" - ], - "license": "GPL-3.0-or-later", - "licenses": [ - { - "type": "GPL", - "url": "https://github.com/nectarjs/nectarjs/blob/master/LICENSE" - } - ], - "repository": - { - "type": "git", - "url": "git+ssh://git@github.com/NectarJS/nectarjs.git" - }, - "version": "0.0.1", - "nectar": - { - "env": ["stm32"], - "read_only": [], - "expose": ["__Nectar_STM32_WAIT"] - } -} diff --git a/nectar_modules/test/index.js b/nectar_modules/test/index.js deleted file mode 100644 index 64573799c..000000000 --- a/nectar_modules/test/index.js +++ /dev/null @@ -1,29 +0,0 @@ -/* - * This file is part of NectarJS - * Copyright (c) 2017 - 2020 Adrien THIERRY - * http://nectarjs.com - https://seraum.com/ - * - * sources : https://github.com/nectarjs/nectarjs - * - * NectarJS is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * NectarJS is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with NectarJS. If not, see . - * - */ - -'!_ffi_include lib/test.cpp'; - -var ffi = { - msgBox: __WIN_MESSAGE_BOX, -}; - -module.exports = ffi; \ No newline at end of file diff --git a/nectar_modules/test/lib/test.cpp b/nectar_modules/test/lib/test.cpp deleted file mode 100644 index ec73d5f6d..000000000 --- a/nectar_modules/test/lib/test.cpp +++ /dev/null @@ -1,45 +0,0 @@ -/* - * This file is part of NectarJS - * Copyright (c) 2017 - 2020 Adrien THIERRY - * http://nectarjs.com - https://seraum.com/ - * - * sources : https://github.com/nectarjs/nectarjs - * - * NectarJS is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * NectarJS is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with NectarJS. If not, see . - * - */ - -// FFI example -#if defined(_WIN32) || defined(__CYGWIN__) - #include "windows.h" -#endif - -var __FFI_SIMPLE_MSGBOX() -{ - #if defined(_WIN32) || defined(__CYGWIN__) - int msgboxID = MessageBox(NULL, "A simple messagebox", "Nectar FFI", MB_YESNOCANCEL); - #else - cout << "this platform is not compatible with MessageBox" << "\n"; - #endif - return NectarCore::VAR(); -}; - -function __WIN_MESSAGE_BOX(_message, _title) -{ - #if defined(_WIN32) || defined(__CYGWIN__) - int msgboxID = MessageBox(NULL, __Nectar_GET_STRING(_message), __Nectar_GET_STRING(_title), MB_ICONWARNING | MB_YESNOCANCEL); - #else - cout << "this platform is not compatible with MessageBox" << "\n"; - #endif -}; diff --git a/nectar_modules/test/package.json b/nectar_modules/test/package.json deleted file mode 100644 index 373b4afb3..000000000 --- a/nectar_modules/test/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "test", - "description": "NectarJS api test module", - "main": "index.js", - "bugs": - { - "url": "https://github.com/NectarJS/nectarjs" - }, - - "directories": - { - "root": ".", - "lib": "lib" - }, - "homepage": "https://github.com/NectarJS/nectarjs#readme", - "keywords": - [ - "nectarjs", - "arduino", - "iot" - ], - "license": "GPL-3.0-or-later", - "licenses": [ - { - "type": "GPL", - "url": "https://github.com/nectarjs/nectarjs/blob/master/LICENSE" - } - ], - "repository": - { - "type": "git", - "url": "git+ssh://git@github.com/NectarJS/nectar-modules.git" - }, - "version": "0.0.1", - "nectar": - { - "env": ["std", "node"], - "expose": ["__FFI_SIMPLE_MSGBOX", "__WIN_MESSAGE_BOX"] - } -} diff --git a/nerd.js b/nerd.js new file mode 100644 index 000000000..e6a602de8 --- /dev/null +++ b/nerd.js @@ -0,0 +1,644 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +global.fs = require("fs"); +global.os = require("os"); +global.path = require("path"); +global.process = require("process"); +global.child_process = require("child_process"); +global.execSync = global.child_process.execSync; + +global.PACKAGE = JSON.parse(global.fs.readFileSync(global.path.join(__dirname, "package.json"))); +global.VERSION = global.PACKAGE.version; + +global.extern = global.path.join(__dirname, "external"); + +var parseCLI = require("./base/cli/cliParser.js"); +var getExt = require("./base/util/getExt.js"); +var getTips = require("./base/util/getTips.js"); +var Flash = require("./base/util/flash.js"); +global.copyRecursiveSync = require("./base/util/copyRecursive.js"); +global.copyDirSync = require("./base/util/copyDirSync.js"); + +var CURRENT = global.process.cwd(); +var TARGET = require("./base/compiler/target.js"); + + +global.PLATFORM = os.platform(); +global.ARCH = os.arch(); + +global.COMPILER = {}; +global.NERD_PATH = __dirname; +var DEFAULT_COMPILER = "native"; + +global.CLI = parseCLI(process.argv); + +if(global.CLI.error) +{ + console.log(global.CLI.msg); + return 1; +} +require("./lib/env.js"); +global.parseCode = require("./lib/parser.js"); +global.verifyFlow = require("./lib/verify.js"); + + +global.CONFIGPATH = global.os.homedir() + path.sep + ".nerd"; +global.CONFIGFILE = global.CONFIGPATH + "/" + "nerd.json"; +global.CONFIG = {}; + + +var ACTION = "build"; +if(global.CLI.cli["--help"] || global.CLI.cli["-h"]) ACTION = "help"; +else if(global.CLI.cli["--example"] || global.CLI.cli["--examples"]) ACTION = "example"; +else if(global.CLI.cli["--version"] || global.CLI.cli["-v"]) ACTION = "version"; +else if(global.CLI.cli["--project"]) ACTION = "showproject"; +else if(global.CLI.cli["--clean"] || global.CLI.cli["--purge"]) ACTION = "clean"; +else if(global.CLI.cli["--setauthor"] || global.CLI.cli["--setid"] || global.CLI.cli["--setkey"] || global.CLI.cli["--sethash"] || global.CLI.cli["--setsdk"] || global.CLI.cli["--setndk"] || global.CLI.cli["--setwin_inc_ucrt"] || global.CLI.cli["--setwin_lib_ucrt"] || global.CLI.cli["--setwin_lib_um"] || global.CLI.cli["--setapi"] || global.CLI.cli["--setport"] || global.CLI.cli["--setxcode"]) ACTION = "setconfig"; +else if(global.CLI.cli["--config"]) ACTION = "showconfig"; +else if(global.CLI.cli["--reinit"]) ACTION = "reinitconfig"; + + +var getExampleFiles = function(dir, list) +{ + if(!list) + { + list = []; + } + + var files = fs.readdirSync(dir); + for (var i in files) + { + var name = dir + path.sep + files[i]; + if (fs.statSync(name).isDirectory()) + { + getExampleFiles(name, list); + } + else + { + list.push(name); + } + } + return list; +} + +var copyExample = function() +{ + var folder = ["c"]; + var list = getExampleFiles(path.join(__dirname, "example")); + for(var l in list) + { + var name = list[l].split(path.sep); + if(name[name.length - 2] && folder.indexOf(name[name.length - 2]) > -1) + { + try + { + fs.mkdirSync(name[name.length - 2]); + }catch(e){} + name = name[name.length - 2] + "/" + name[name.length - 1]; + } + else name = name[name.length - 1]; + var content = fs.readFileSync(list[l]); + fs.writeFileSync(name, content); + console.log("[+] Copy of " + name + " done"); + } +} + +var Init = function() +{ + if(!fs.existsSync(CONFIGPATH)) fs.mkdirSync(CONFIGPATH); + try + { + var writeConfig = false; + var config = ""; + config = fs.readFileSync(CONFIGFILE); + config = JSON.parse(config); + if(!config.version) + { + config.version = VERSION; + config.port = 443; + fs.writeFileSync(CONFIGFILE, JSON.stringify(config)); + } + } + catch (e) + { + writeConfig = true; + } + + if(!config || writeConfig) + { + var defaultConfig = { author: os.userInfo().username, id: "", key:"", hash:"SHA256", api:"api.nerdlang.com", port:443, version: VERSION, sdk: "", ndk: "", win_inc_ucrt: "", win_lib_ucrt: "", win_lib_um: "", xcode: "/Applications/Xcode.app"}; + fs.writeFileSync(CONFIGFILE, JSON.stringify(defaultConfig)); + } +} + +var readConfig = function() +{ + try + { + var tmp = fs.readFileSync(CONFIGFILE); + CONFIG = JSON.parse(tmp); + } + catch (e) + { + Init(); + readConfig(); + } +} + +var showConfig = function(str) +{ + console.log(); + if(str) console.log(str); + else console.log("[*] Current config :"); + console.log("author : " + CONFIG.author); + console.log("id : " + CONFIG.id); + console.log("key : " + CONFIG.key); + console.log("hash : " + CONFIG.hash); + console.log("api : " + CONFIG.api); + console.log("port : " + CONFIG.port); + console.log("version : " + VERSION); + console.log("Android SDK : " + CONFIG.sdk); + console.log("Android NDK : " + CONFIG.ndk); + console.log("Windows Include UCRT : " + CONFIG.win_inc_ucrt); + console.log("Android Lib UCRT : " + CONFIG.win_lib_ucrt); + console.log("Android Lib UM : " + CONFIG.win_lib_um); + console.log("iOS xCode : " + CONFIG.xcode); + console.log(); +} + +var setConfig = function() +{ + try + { + if(global.CLI.cli["--setauthor"]) CONFIG.author = global.CLI.cli["--setauthor"].argument; + if(global.CLI.cli["--setid"]) CONFIG.id = global.CLI.cli["--setid"].argument; + if(global.CLI.cli["--setkey"]) CONFIG.key = global.CLI.cli["--setkey"].argument; + if(global.CLI.cli["--setapi"]) CONFIG.api = global.CLI.cli["--setapi"].argument; + if(global.CLI.cli["--setport"]) CONFIG.port = parseInt(global.CLI.cli["--setport"].argument); + //if(global.CLI.cli["--setsdk"]) CONFIG.sdk = global.CLI.cli["--setsdk"].argument.replace(/\\/g, "\\\\").replace(/:/g, "\\\:"); // for android + //if(global.CLI.cli["--setndk"]) CONFIG.ndk = global.CLI.cli["--setndk"].argument.replace(/\\/g, "\\\\").replace(/:/g, "\\\:"); // for android + if(global.CLI.cli["--setwin_ucrt"]) CONFIG.win_ucrt = global.CLI.cli["--setwin_ucrt"].argument; + if(global.CLI.cli["--setwin_inc_ucrt"]) CONFIG.win_inc_ucrt = global.CLI.cli["--setwin_inc_ucrt"].argument; + if(global.CLI.cli["--setwin_lib_ucrt"]) CONFIG.win_lib_ucrt = global.CLI.cli["--setwin_lib_ucrt"].argument; + if(global.CLI.cli["--setwin_lib_um"]) CONFIG.win_lib_um = global.CLI.cli["--setwin_lib_um"].argument; + if(global.CLI.cli["--setxcode"]) CONFIG.xcode = global.CLI.cli["--setxcode"].argument; + + /* + if(isNaN(CONFIG.port)) + { + console.dir("[!] This port is not valid : '" + global.CLI.cli["--setport"].argument +"', please specify a number."); + return; + } + */ + + if(global.CLI.cli["--sethash"]) + { + var hash = global.CLI.cli["--sethash"].argument.toUpperCase(); + if(validHash.indexOf(hash) < 0) + { + console.dir("[!] Hash is not valid and won't be saved. Valid hash are : MD5, SHA256 ans SHA512"); + } + else + { + CONFIG.hash = hash; + } + } + + fs.writeFileSync(CONFIGFILE, JSON.stringify(CONFIG)); + } + catch (e) + { + console.log(e); + } +} + +var reinitConfig = function() +{ + try + { + var defaultConfig = { author: os.userInfo().username, id: "", key:"", hash:"SHA256", api:"api.nerdlang.com", "port":443, sdk: "", ndk: "", win_inc_ucrt: "", win_lib_ucrt: "", win_lib_um: "", xcode: "/Applications/Xcode.app"}; + fs.writeFileSync(CONFIGFILE, JSON.stringify(defaultConfig)); + readConfig(); + showConfig("[*] Config reinitialized :"); + } catch (e) + { + console.log(e); + } +} + +var showProject = function() +{ + var project = "project.json"; + if(global.CLI.stack && global.CLI.stack.length > 0) + { + project = global.CLI.stack[global.CLI.stack.length - 1]; + } + try + { + var pConf = fs.readFileSync(project); + var jConf = JSON.parse(pConf); + printProject(jConf); + } + catch (e) + { + console.dir("[!] Error : " + e.message); + } + +} + +var Clean = function(purge) +{ + var project = "project.json"; + if(global.CLI.stack && global.CLI.stack.length > 0) + { + project = global.CLI.stack[global.CLI.stack.length - 1]; + } + try + { + var pConf = fs.readFileSync(project); + var jConf = JSON.parse(pConf); + if(jConf.main) + { + if( (global.CLI.cli["--purge"] || purge) && jConf.out) + { + var outFile = jConf.out; + if(jConf.out[0] != path.sep) + { + outFile = path.join(path.dirname(project), jConf.out); + } + try{fs.unlinkSync(outFile);}catch(e){} + } + } + try + { + fs.unlinkSync(project); + }catch(e){} + } + catch (e) + { + console.dir("[!] Error : " + e.message); + } +} + +var printProject = function(obj) +{ + console.log(); + console.log("[*] Project configuration :\n"); + console.log("Main file : " + obj.main); + console.log("Output : " + obj.out); + console.log("Target : " + obj.target); + console.log("Preset : " + obj.preset); + console.log(); +} + +var Build = function(prepare) +{ + global.DEBUG = false; + if(global.CLI.cli["--debug"]) + { + global.DEBUG = true; + } + if(global.CLI.cli["--build"]) DEFAULT_COMPILER = global.CLI.cli["--build"].argument; + else if(global.CLI.cli["-b"]) DEFAULT_COMPILER = global.CLI.cli["-b"].argument; + + COMPILER = require(path.join(__dirname, "compiler", DEFAULT_COMPILER, "compiler.js")); + + if(global.CLI.cli["--compiler"] && global.CLI.cli["--compiler"].argument) COMPILER.COMPILER = global.CLI.cli["--compiler"].argument; + else if(global.CLI.cli["-c"] && global.CLI.cli["-c"].argument) COMPILER.COMPILER = global.CLI.cli["-c"].argument; + + var preset; + if(global.CLI.cli["--preset"] && global.CLI.cli["--preset"].argument) preset = global.CLI.cli["--preset"].argument; + + var env; + if(global.CLI.cli["--env"] && global.CLI.cli["--env"].argument) env = global.CLI.cli["--env"].argument; + + if(!preset) preset = "speed"; + COMPILER.preset = preset; + + if(!env) env = "std"; + + var target; + if(global.CLI.cli["--target"] && global.CLI.cli["--target"].argument) target = global.CLI.cli["--target"].argument; + COMPILER.TARGET = target; + + var spec; + if(global.CLI.cli["--spec"] && global.CLI.cli["--spec"].argument) spec = global.CLI.cli["--spec"].argument; + COMPILER.SPEC = spec; + + var _tmp; + if(global.CLI.cli["--tmp"] && global.CLI.cli["--tmp"].argument) + _tmp = path.resolve(global.CLI.cli["--tmp"].argument); + else { + var _current = process.cwd(); + var _npath = path.join(_current, ".nerd"); + _tmp = path.join(_npath, Math.random().toString(36).substr(2, 5)); + } + COMPILER.TMP_FOLDER = _tmp; + + if(!global.CLI.stack || global.CLI.stack.length < 1) + { + console.error("[!] Missing file to compile or project.json path, 'nerd --help' if you need help"); + return; + } + else + { + var QUIET = false; + var _in = global.CLI.stack[0]; + var main; + COMPILER.IN = _in; + fs.readFile(_in, function(err, fileData) + { + if(err) + { + console.error("[!] Error : " + err.message); + return; + } + else + { + + Check(_in); + + var ext = "ng"; + var _Ext = _in.split("."); + if(_Ext.length > 1) ext = _Ext[_Ext.length - 1]; + + /*** CREATE COMPIL ENV ***/ + var _current = process.cwd(); + var _npath = path.join(_current, ".nerd"); + try { fs.mkdirSync(_npath); } catch(e){}; + if(COMPILER.ENV.init) COMPILER.ENV.init(COMPILER.TMP_FOLDER); + else try { fs.mkdirSync(COMPILER.TMP_FOLDER); } catch(e){}; + + /*** PREPARE SRC ***/ + var _libOut = COMPILER.TMP_FOLDER; + if(COMPILER.ENV.prepare) + { + var _tmpLibOut = COMPILER.ENV.prepare(COMPILER.TMP_FOLDER); + if(_tmpLibOut) _libOut = _tmpLibOut; + } + + COMPILER.Prepare(_libOut); + + var fProject = false; + var prjectConf = {}; + if(path.basename(_in) == "project.json") + { + try + { + projectConf = JSON.parse(fileData); + fProject = true; + single = false; + } + catch (e) + { + console.error("[!] Error with project.json : " + e.message); + return; + } + } + + /*** GET FILES NAME ***/ + var _binoutput = ""; + if(fProject) + { + _binoutput = projectConf.out; + } + else _binoutput = path.basename(_in).slice(0, path.basename(_in).length - path.extname(_in).length); + + if(global.CLI.cli["-o"]) + { + _binoutput = global.CLI.cli["-o"].argument; + } + else if(global.CLI.cli["--out"]) + { + _binoutput = global.CLI.cli["--out"].argument; + } + + _binoutput = path.join(process.cwd(), _binoutput); + + var _cout = path.join(COMPILER.TMP_FOLDER, path.basename(_in).slice(0, path.basename(_in).length - path.extname(_in).length) + ".cpp"); + + _binoutput = COMPILER.Out(_binoutput); + + var projTo = ""; + var tmp = _in.split("/"); + + projTo = _binoutput; + + main = _in.split(path.sep); + main = main[main.length - 1]; + + var tips = ""; + + if(!QUIET) console.log("[*] Generating source file"); + + var _code = fs.readFileSync(path.resolve(_in)).toString(); + + global.array_of_code = _code.split(os.EOL); + _code = COMPILER.Parse(_code, _in); + + if(COMPILER.ENV.write) + { + COMPILER.ENV.write(COMPILER.MAIN, _cout); + } + else + { + if((!global.CLI.cli["--profile"]) || global.CLI.cli["--profile"].argument != "use") + { + fs.writeFileSync(_cout, COMPILER.MAIN); + } + } + + if(global.CLI.cli["--generate"]) + { + if(!QUIET) console.log("[*] Source generated in " + path.dirname(_cout)); + process.exit(0); + } + + if(!QUIET) console.log("[*] Compiling with preset: " + COMPILER.preset); + try + { + COMPILER.Compile(COMPILER.TMP_FOLDER, _cout); + } + catch(e) + { + console.log(e); + console.log("[!] Compilation error"); + process.exit(1); + } + + if(COMPILER.ENV.post) COMPILER.ENV.post(); + + try + { + fs.chmodSync(_binoutput, "755"); + } + catch(e){} + + if(COMPILER.Package) COMPILER.Package(); + + process.chdir(NERD_PATH); + + if(!global.CLI.cli["--conserve"]) + { + var _current = process.cwd(); + process.chdir(_current); + fs.rmSync(COMPILER.TMP_FOLDER, {recursive: true}); + } + + var verb = false; + if(global.CLI.cli["--verbose"]) verb = true; + + var bin; + try + { + bin = fs.statSync(_binoutput); + } + catch(e){} + + if(COMPILER.ENV.clean && typeof(COMPILER.ENV.clean) == "function") + { + COMPILER.ENV.clean(); + } + + if(verb && bin) + { + console.log("[+] Compilation done\n"); + console.log("[*] Informations :\n"); + var size = "Size : "; + if(bin.size < 1000) size += bin.size + " o"; + else if(bin.size < 1000000) size += (bin.size / 1000) + " ko"; + else size += (bin.size / 1000000) + " mo"; + console.log(size); + console.log("Main file : " + main); + console.log("Output : " + projTo); + console.log("Preset : " + preset); + } + + if(global.CLI.cli["--tips"] && tips && tips.length > 0) console.log("\n" + tips + "\n"); + + if(global.CLI.cli["--flash"]) Flash(projTo, global.CLI.cli["--flash"].argument, target, verb); + + if(global.CLI.cli["--run"]) + { + console.log(); + console.log("[*] Executing " + _binoutput); + if(!COMPILER.ENV.run) + { + var _binexec = child_process.spawnSync(_binoutput, + [], + { + detached: false, + stdio: [process.stdin, process.stdout, process.stderr], + cwd: process.cwd(), + env: process.env + }); + if(_binexec.error) + { + console.log(_binexec.error); + } + } + else COMPILER.ENV.run(); + } + if(!global.CLI.cli["--prepare"]) + { + var _current = path.dirname(path.resolve(process.argv[1])); + var _native = path.join(_current, "core", "nativejs"); + var _to = path.resolve(projTo); + var _fullPathCompile = path.resolve(main); + } + else + { + var pObj = { main: main, out:projTo, target:target, preset:preset }; + printProject(pObj); + } + } + }); + } +} + +var showVersion = function() +{ + console.log("Nerd v" + VERSION); +} + +var Check = function(file) +{ + if(file.split(".").pop() != "js") return; + + if(global.CLI.cli["--check"]) process.exit(); +} + +var Help = function() +{ + showVersion(); + console.log("\n[*] Compile :\nnerd [--env std|node|arduino|wasm|android] [--target the-target] [--run] [--reg 1000] [--preset speed|size] [-o output] [--tips] [--flash device] source.js|project.json\n"); + console.log("[*] Show project :\nnerd [--project] [project.json]\n"); + console.log("[*] Clean project :\nnerd [--clean] [--purge] [path_to_project.json]\n"); + console.log("[*] Copy example files :\nnerd --example\n"); + console.log("[*] Nerd version :\nnerd --version\n"); +} + + +switch(ACTION) +{ + case "version": + showVersion(); + break; + + case "help": + Help(); + break; + + case "example": + copyExample(); + break; + + case "showproject": + showProject(); + break; + + case "setconfig": + setConfig(); + break; + + case "showconfig": + showConfig(); + break; + + case "reinitconfig": + reinitConfig(); + break; + + case "build": + Build(); + break; + + case "clean": + Clean(); + break; + + default: + Help(); + break; +} \ No newline at end of file diff --git a/nerd_modules/JSON/index.ng b/nerd_modules/JSON/index.ng new file mode 100644 index 000000000..0dbd92046 --- /dev/null +++ b/nerd_modules/JSON/index.ng @@ -0,0 +1,82 @@ +/* + * This file is part of NectarJS + * Copyright (c) 2017 - 2020 Adrien THIERRY + * http://nectarjs.com - https://seraum.com/ + * + * sources : https://github.com/nectarjs/nectarjs + * + * NectarJS is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * NectarJS is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with NectarJS. If not, see . + * + */ + +include("./lib/json.h"); + +var _JSON = {}; + +_JSON.stringify = function(_obj) +{ + {{ + return __NERD_Object_Stringify(_obj); + }} +}; + +_JSON.parse = function(__json) +{ + {{ + if(!__json) return null; + size_t tokcount = 32; + int r; + int j = 0; + var __RESULT; + const char* JSON_STRING = ((NerdCore::Class::String*)__json.data.ptr)->value.c_str(); + + jsmn_parser p; + jsmntok_t *tok = (jsmntok_t*)malloc(sizeof(*tok) * tokcount); + + jsmn_init(&p); + + bool _again = true; + while(_again) + { + r = jsmn_parse(&p, JSON_STRING, strlen(JSON_STRING), tok, tokcount); + + if (r < 0) + { + + if (r == (int)JSMN_ERROR_NOMEM) + { + tokcount = tokcount * 2; + tok = (jsmntok_t *)realloc_it(tok, sizeof(*tok) * tokcount); + } + else + { + printf("Failed to parse JSON: %d\n", r); + return __RESULT; + } + + } + else + { + dump(JSON_STRING, tok, p.toknext, 0, __RESULT); + _again = false; + } + } + + free(tok); + return __RESULT; + }} + +}; + +return _JSON; diff --git a/nectar_modules/JSON/lib/jsmn.h b/nerd_modules/JSON/lib/jsmn.h similarity index 99% rename from nectar_modules/JSON/lib/jsmn.h rename to nerd_modules/JSON/lib/jsmn.h index 36c413ce3..a1f17b7f6 100644 --- a/nectar_modules/JSON/lib/jsmn.h +++ b/nerd_modules/JSON/lib/jsmn.h @@ -39,16 +39,16 @@ extern "C" { /** * JSON type identifier. Basic types are: * o Object - * o Arraya + * o Array * o String * o Other primitive: number, boolean (true/false) or null */ typedef enum { JSMN_UNDEFINED = 0, - JSMN_OBJECT = 1, - JSMN_ARRAY = 2, - JSMN_STRING = 3, - JSMN_PRIMITIVE = 4 + JSMN_OBJECT = 1 << 0, + JSMN_ARRAY = 1 << 1, + JSMN_STRING = 1 << 2, + JSMN_PRIMITIVE = 1 << 3 } jsmntype_t; enum jsmnerr { @@ -196,10 +196,10 @@ static int jsmn_parse_string(jsmn_parser *parser, const char *js, jsmntok_t *token; int start = parser->pos; - - parser->pos++; - + /* Skip starting quote */ + parser->pos++; + for (; parser->pos < len && js[parser->pos] != '\0'; parser->pos++) { char c = js[parser->pos]; diff --git a/nerd_modules/JSON/lib/json.h b/nerd_modules/JSON/lib/json.h new file mode 100644 index 000000000..beb90831c --- /dev/null +++ b/nerd_modules/JSON/lib/json.h @@ -0,0 +1,121 @@ +/* + * This file is part of NectarJS + * Copyright (c) 2017 - 2020 Adrien THIERRY + * http://nectarjs.com - https://seraum.com/ + * + * sources : https://github.com/nectarjs/nectarjs + * + * NectarJS is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * NectarJS is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with NectarJS. If not, see . + * + */ + +#define JSMN_STRICT +#ifndef __Nectar_ARDUINO + #define JSMN_PARENT_LINK +#endif + +#include "jsmn.h" + +NerdCore::VAR to_int(char const *s) +{ + bool _float = false; + if(strchr(s, '.')) + { + return NerdCore::VAR(std::stod(s)); + } + else + { + return NerdCore::VAR(std::stoi(s)); + } +} + +static inline void *realloc_it(void *ptrmem, size_t size) { + void *p = std::realloc(ptrmem, size); + if (!p) { + std::free(ptrmem); + std::fprintf(stderr, "realloc(): errno=%d\n", errno); + } + return p; +} + +char* substr(const char* arr, int begin, int len) +{ + char* res = new char[len]; + for (int i = 0; i < len - 1; i++) res[i] = *(arr + begin + i); + res[len - 1] = 0; + return res; +} + + + +int dump(const char *js, jsmntok_t *t, size_t count, int indent, var& _res) +{ + int i, j, k; + jsmntok_t *key; + if (count == 0) + { + return 0; + } + if (t->type == JSMN_PRIMITIVE) + { + std::string _s = substr(js, t->start, t->end - t->start); + if(_s[0] == 't') _res = true; + else if(_s[0] == 'f') _res = false; + else if(_s[0] == 'n') _res = var(); + else _res = to_int(_s.c_str()); + + return 1; + } + else if (t->type == JSMN_STRING) + { + _res = substr(js, t->start, t->end - t->start + 1); + + return 1; + } + else if (t->type == JSMN_OBJECT) + { + j = 0; + _res = new NerdCore::Class::Object(); + for (i = 0; i < t->size; i++) + { + key = t + 1 + j; + var _key; + j += dump(js, key, count - j, indent + 1, _key); + var _value; + if (key->size > 0) + { + j += dump(js, t + 1 + j, count - j, indent + 1, _value); + } + _res[_key] = _value; + //__NERD_Object_Set(_key, _value, _res); + } + return j+1; + } + else if (t->type == JSMN_ARRAY) + { + j = 0; + _res = new NerdCore::Class::Array(); + std::vector _arr; + + for (i = 0; i < t->size; i++) + { + var _value; + j += dump(js, t + 1 + j, count - j, indent + 1, _value); + _res[i] = _value; + //__NERD_Object_Set(i, _value, _res); + } + return j+1; + } + return 0; +} diff --git a/nerd_modules/JSON/package.json b/nerd_modules/JSON/package.json new file mode 100644 index 000000000..284af2bfd --- /dev/null +++ b/nerd_modules/JSON/package.json @@ -0,0 +1,39 @@ +{ + "name": "JSON", + "description": "NectarJS base JSON module", + "main": "index.js", + "bugs": + { + "url": "https://github.com/NectarJS/nectarjs/issues" + }, + + "directories": + { + "root": ".", + "lib": "lib" + }, + "homepage": "https://github.com/NectarJS/nectarjs#readme", + "keywords": + [ + "nectarjs", + "JSON", + "javascript" + ], + "license": "GPL-3.0-or-later", + "licenses": [ + { + "type": "GPL", + "url": "https://github.com/nectarjs/nectarjs/blob/master/LICENSE" + } + ], + "repository": + { + "type": "git", + "url": "git+ssh://git@github.com/NectarJS/nectarjs.git" + }, + "version": "0.0.2", + "nerd": + { + "env": ["std", "js", "android", "ios", "node", "arduino", "wasm"] + } +} diff --git a/nerd_modules/Module/index.ng b/nerd_modules/Module/index.ng new file mode 100644 index 000000000..b8d3ef96e --- /dev/null +++ b/nerd_modules/Module/index.ng @@ -0,0 +1,7 @@ +// NodeJS modules compatibility +var module = function() +{ + +}; + +return module; \ No newline at end of file diff --git a/nerd_modules/RegExp/index.ng b/nerd_modules/RegExp/index.ng new file mode 100644 index 000000000..5b1d78d8d --- /dev/null +++ b/nerd_modules/RegExp/index.ng @@ -0,0 +1,68 @@ +/* + Copyright (c) 2022 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +include(""); +var regexp = function(_regExp, flag) +{ + this.source = _regExp; + this.flag = flag; +}; + +regexp.prototype.test = function(_string) +{ + {{ + if( std::regex_match ( (std::string)_string, std::regex((std::string)__NERD_THIS["source"], std::regex::ECMAScript) ) ) + { + return true; + } + else + { + return false; + } + }} +}; + +regexp.prototype.exec = function(_string) +{ + {{ + var _res = new NerdCore::Class::Array(); + std::string s = (std::string)_string; + std::smatch m; + while(std::regex_search ( s, m, std::regex((std::string)__NERD_THIS["source"], std::regex::ECMAScript) )) + { + int i = 0; + for(auto x:m) + { + _res[i] = (std::string)x; + i++; + } + s = m.suffix().str(); + } + return _res; + }} +}; + +regexp.prototype.match = regexp.prototype.exec; + + +return regexp; \ No newline at end of file diff --git a/nerd_modules/String/index.ng b/nerd_modules/String/index.ng new file mode 100644 index 000000000..7c70e8ecf --- /dev/null +++ b/nerd_modules/String/index.ng @@ -0,0 +1,31 @@ +var String = function(value) +{ + if(!value) + { + value = ""; + } + + return value; +}; + +String.prototype.replace = function(_search, _replace) +{ + {{ + size_t start_pos = ((NerdCore::Class::String*)(__NERD_THIS.data.ptr))->value.find((std::string)_search); + if (start_pos == std::string::npos) + { + return NerdCore::VAR(((NerdCore::Class::String*)(__NERD_THIS.data.ptr))->value); + } + + std::string _new = ((NerdCore::Class::String*)(__NERD_THIS.data.ptr))->value; + return NerdCore::VAR(_new.replace(start_pos, ((std::string)_search).length(), (std::string)_replace)); + }} + +} + +String.prototype.toString = function() +{ + return this; +} + +return String; \ No newline at end of file diff --git a/nerd_modules/arduino-lcd/index.ng b/nerd_modules/arduino-lcd/index.ng new file mode 100644 index 000000000..e37b7ef33 --- /dev/null +++ b/nerd_modules/arduino-lcd/index.ng @@ -0,0 +1,64 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +include("lib/LiquidCrystal.h"); + +var _lcd = function(rs, en, d4, d5, d6, d7) +{ + var object = {}; + {{ + LiquidCrystal* lcdNative = new LiquidCrystal((int)rs, (int)en, (int)d4, (int)d5, (int)d6, (int)d7); + }} + + object.begin = function(col, row) + { + {{ + lcdNative->begin((int)col, (int)row); + }} + }; + + object.print = function(text) + { + {{ + lcdNative->print(((std::string)text).c_str()); + }} + }; + + object.setCursor = function(col, row) + { + {{ + lcdNative->setCursor((int)col, (int)row); + }} + }; + + object.clear = function() + { + {{ + lcdNative->clear(); + }} + }; + + return object; +}; + +return _lcd; \ No newline at end of file diff --git a/nerd_modules/arduino-lcd/lib/LiquidCrystal.cpp b/nerd_modules/arduino-lcd/lib/LiquidCrystal.cpp new file mode 100644 index 000000000..67bd06d47 --- /dev/null +++ b/nerd_modules/arduino-lcd/lib/LiquidCrystal.cpp @@ -0,0 +1,326 @@ +#include "LiquidCrystal.h" + +#include +#include +#include +#include "Arduino.h" + +// When the display powers up, it is configured as follows: +// +// 1. Display clear +// 2. Function set: +// DL = 1; 8-bit interface data +// N = 0; 1-line display +// F = 0; 5x8 dot character font +// 3. Display on/off control: +// D = 0; Display off +// C = 0; Cursor off +// B = 0; Blinking off +// 4. Entry mode set: +// I/D = 1; Increment by 1 +// S = 0; No shift +// +// Note, however, that resetting the Arduino doesn't reset the LCD, so we +// can't assume that it's in that state when a sketch starts (and the +// LiquidCrystal constructor is called). + +LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, + uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7) +{ + init(0, rs, rw, enable, d0, d1, d2, d3, d4, d5, d6, d7); +} + +LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, + uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7) +{ + init(0, rs, 255, enable, d0, d1, d2, d3, d4, d5, d6, d7); +} + +LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3) +{ + init(1, rs, rw, enable, d0, d1, d2, d3, 0, 0, 0, 0); +} + +LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3) +{ + init(1, rs, 255, enable, d0, d1, d2, d3, 0, 0, 0, 0); +} + +void LiquidCrystal::init(uint8_t fourbitmode, uint8_t rs, uint8_t rw, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, + uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7) +{ + _rs_pin = rs; + _rw_pin = rw; + _enable_pin = enable; + + _data_pins[0] = d0; + _data_pins[1] = d1; + _data_pins[2] = d2; + _data_pins[3] = d3; + _data_pins[4] = d4; + _data_pins[5] = d5; + _data_pins[6] = d6; + _data_pins[7] = d7; + + if (fourbitmode) + _displayfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x8DOTS; + else + _displayfunction = LCD_8BITMODE | LCD_1LINE | LCD_5x8DOTS; + + begin(16, 1); +} + +void LiquidCrystal::begin(uint8_t cols, uint8_t lines, uint8_t dotsize) { + if (lines > 1) { + _displayfunction |= LCD_2LINE; + } + _numlines = lines; + + setRowOffsets(0x00, 0x40, 0x00 + cols, 0x40 + cols); + + // for some 1 line displays you can select a 10 pixel high font + if ((dotsize != LCD_5x8DOTS) && (lines == 1)) { + _displayfunction |= LCD_5x10DOTS; + } + + pinMode(_rs_pin, OUTPUT); + // we can save 1 pin by not using RW. Indicate by passing 255 instead of pin# + if (_rw_pin != 255) { + pinMode(_rw_pin, OUTPUT); + } + pinMode(_enable_pin, OUTPUT); + + // Do these once, instead of every time a character is drawn for speed reasons. + for (int i=0; i<((_displayfunction & LCD_8BITMODE) ? 8 : 4); ++i) + { + pinMode(_data_pins[i], OUTPUT); + } + + // SEE PAGE 45/46 FOR INITIALIZATION SPECIFICATION! + // according to datasheet, we need at least 40 ms after power rises above 2.7 V + // before sending commands. Arduino can turn on way before 4.5 V so we'll wait 50 + delayMicroseconds(50000); + // Now we pull both RS and R/W low to begin commands + digitalWrite(_rs_pin, LOW); + digitalWrite(_enable_pin, LOW); + if (_rw_pin != 255) { + digitalWrite(_rw_pin, LOW); + } + + //put the LCD into 4 bit or 8 bit mode + if (! (_displayfunction & LCD_8BITMODE)) { + // this is according to the Hitachi HD44780 datasheet + // figure 24, pg 46 + + // we start in 8bit mode, try to set 4 bit mode + write4bits(0x03); + delayMicroseconds(4500); // wait min 4.1ms + + // second try + write4bits(0x03); + delayMicroseconds(4500); // wait min 4.1ms + + // third go! + write4bits(0x03); + delayMicroseconds(150); + + // finally, set to 4-bit interface + write4bits(0x02); + } else { + // this is according to the Hitachi HD44780 datasheet + // page 45 figure 23 + + // Send function set command sequence + command(LCD_FUNCTIONSET | _displayfunction); + delayMicroseconds(4500); // wait more than 4.1 ms + + // second try + command(LCD_FUNCTIONSET | _displayfunction); + delayMicroseconds(150); + + // third go + command(LCD_FUNCTIONSET | _displayfunction); + } + + // finally, set # lines, font size, etc. + command(LCD_FUNCTIONSET | _displayfunction); + + // turn the display on with no cursor or blinking default + _displaycontrol = LCD_DISPLAYON | LCD_CURSOROFF | LCD_BLINKOFF; + display(); + + // clear it off + clear(); + + // Initialize to default text direction (for romance languages) + _displaymode = LCD_ENTRYLEFT | LCD_ENTRYSHIFTDECREMENT; + // set the entry mode + command(LCD_ENTRYMODESET | _displaymode); + +} + +void LiquidCrystal::setRowOffsets(int row0, int row1, int row2, int row3) +{ + _row_offsets[0] = row0; + _row_offsets[1] = row1; + _row_offsets[2] = row2; + _row_offsets[3] = row3; +} + +/********** high level commands, for the user! */ +void LiquidCrystal::clear() +{ + command(LCD_CLEARDISPLAY); // clear display, set cursor position to zero + delayMicroseconds(2000); // this command takes a long time! +} + +void LiquidCrystal::home() +{ + command(LCD_RETURNHOME); // set cursor position to zero + delayMicroseconds(2000); // this command takes a long time! +} + +void LiquidCrystal::setCursor(uint8_t col, uint8_t row) +{ + const size_t max_lines = sizeof(_row_offsets) / sizeof(*_row_offsets); + if ( row >= max_lines ) { + row = max_lines - 1; // we count rows starting w/ 0 + } + if ( row >= _numlines ) { + row = _numlines - 1; // we count rows starting w/ 0 + } + + command(LCD_SETDDRAMADDR | (col + _row_offsets[row])); +} + +// Turn the display on/off (quickly) +void LiquidCrystal::noDisplay() { + _displaycontrol &= ~LCD_DISPLAYON; + command(LCD_DISPLAYCONTROL | _displaycontrol); +} +void LiquidCrystal::display() { + _displaycontrol |= LCD_DISPLAYON; + command(LCD_DISPLAYCONTROL | _displaycontrol); +} + +// Turns the underline cursor on/off +void LiquidCrystal::noCursor() { + _displaycontrol &= ~LCD_CURSORON; + command(LCD_DISPLAYCONTROL | _displaycontrol); +} +void LiquidCrystal::cursor() { + _displaycontrol |= LCD_CURSORON; + command(LCD_DISPLAYCONTROL | _displaycontrol); +} + +// Turn on and off the blinking cursor +void LiquidCrystal::noBlink() { + _displaycontrol &= ~LCD_BLINKON; + command(LCD_DISPLAYCONTROL | _displaycontrol); +} +void LiquidCrystal::blink() { + _displaycontrol |= LCD_BLINKON; + command(LCD_DISPLAYCONTROL | _displaycontrol); +} + +// These commands scroll the display without changing the RAM +void LiquidCrystal::scrollDisplayLeft(void) { + command(LCD_CURSORSHIFT | LCD_DISPLAYMOVE | LCD_MOVELEFT); +} +void LiquidCrystal::scrollDisplayRight(void) { + command(LCD_CURSORSHIFT | LCD_DISPLAYMOVE | LCD_MOVERIGHT); +} + +// This is for text that flows Left to Right +void LiquidCrystal::leftToRight(void) { + _displaymode |= LCD_ENTRYLEFT; + command(LCD_ENTRYMODESET | _displaymode); +} + +// This is for text that flows Right to Left +void LiquidCrystal::rightToLeft(void) { + _displaymode &= ~LCD_ENTRYLEFT; + command(LCD_ENTRYMODESET | _displaymode); +} + +// This will 'right justify' text from the cursor +void LiquidCrystal::autoscroll(void) { + _displaymode |= LCD_ENTRYSHIFTINCREMENT; + command(LCD_ENTRYMODESET | _displaymode); +} + +// This will 'left justify' text from the cursor +void LiquidCrystal::noAutoscroll(void) { + _displaymode &= ~LCD_ENTRYSHIFTINCREMENT; + command(LCD_ENTRYMODESET | _displaymode); +} + +// Allows us to fill the first 8 CGRAM locations +// with custom characters +void LiquidCrystal::createChar(uint8_t location, uint8_t charmap[]) { + location &= 0x7; // we only have 8 locations 0-7 + command(LCD_SETCGRAMADDR | (location << 3)); + for (int i=0; i<8; i++) { + write(charmap[i]); + } +} + +/*********** mid level commands, for sending data/cmds */ + +inline void LiquidCrystal::command(uint8_t value) { + send(value, LOW); +} + +inline size_t LiquidCrystal::write(uint8_t value) { + send(value, HIGH); + return 1; // assume success +} + +/************ low level data pushing commands **********/ + +// write either command or data, with automatic 4/8-bit selection +void LiquidCrystal::send(uint8_t value, uint8_t mode) { + digitalWrite(_rs_pin, mode); + + // if there is a RW pin indicated, set it low to Write + if (_rw_pin != 255) { + digitalWrite(_rw_pin, LOW); + } + + if (_displayfunction & LCD_8BITMODE) { + write8bits(value); + } else { + write4bits(value>>4); + write4bits(value); + } +} + +void LiquidCrystal::pulseEnable(void) { + digitalWrite(_enable_pin, LOW); + delayMicroseconds(1); + digitalWrite(_enable_pin, HIGH); + delayMicroseconds(1); // enable pulse must be >450 ns + digitalWrite(_enable_pin, LOW); + delayMicroseconds(100); // commands need >37 us to settle +} + +void LiquidCrystal::write4bits(uint8_t value) { + for (int i = 0; i < 4; i++) { + digitalWrite(_data_pins[i], (value >> i) & 0x01); + } + + pulseEnable(); +} + +void LiquidCrystal::write8bits(uint8_t value) { + for (int i = 0; i < 8; i++) { + digitalWrite(_data_pins[i], (value >> i) & 0x01); + } + + pulseEnable(); +} diff --git a/nerd_modules/arduino-lcd/lib/LiquidCrystal.h b/nerd_modules/arduino-lcd/lib/LiquidCrystal.h new file mode 100644 index 000000000..da950ce58 --- /dev/null +++ b/nerd_modules/arduino-lcd/lib/LiquidCrystal.h @@ -0,0 +1,108 @@ +#ifndef LiquidCrystal_h +#define LiquidCrystal_h + +#include +#include "Print.h" + +// commands +#define LCD_CLEARDISPLAY 0x01 +#define LCD_RETURNHOME 0x02 +#define LCD_ENTRYMODESET 0x04 +#define LCD_DISPLAYCONTROL 0x08 +#define LCD_CURSORSHIFT 0x10 +#define LCD_FUNCTIONSET 0x20 +#define LCD_SETCGRAMADDR 0x40 +#define LCD_SETDDRAMADDR 0x80 + +// flags for display entry mode +#define LCD_ENTRYRIGHT 0x00 +#define LCD_ENTRYLEFT 0x02 +#define LCD_ENTRYSHIFTINCREMENT 0x01 +#define LCD_ENTRYSHIFTDECREMENT 0x00 + +// flags for display on/off control +#define LCD_DISPLAYON 0x04 +#define LCD_DISPLAYOFF 0x00 +#define LCD_CURSORON 0x02 +#define LCD_CURSOROFF 0x00 +#define LCD_BLINKON 0x01 +#define LCD_BLINKOFF 0x00 + +// flags for display/cursor shift +#define LCD_DISPLAYMOVE 0x08 +#define LCD_CURSORMOVE 0x00 +#define LCD_MOVERIGHT 0x04 +#define LCD_MOVELEFT 0x00 + +// flags for function set +#define LCD_8BITMODE 0x10 +#define LCD_4BITMODE 0x00 +#define LCD_2LINE 0x08 +#define LCD_1LINE 0x00 +#define LCD_5x10DOTS 0x04 +#define LCD_5x8DOTS 0x00 + +class LiquidCrystal : public Print { +public: + LiquidCrystal(uint8_t rs, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, + uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7); + LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, + uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7); + LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3); + LiquidCrystal(uint8_t rs, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3); + + void init(uint8_t fourbitmode, uint8_t rs, uint8_t rw, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, + uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7); + + void begin(uint8_t cols, uint8_t rows, uint8_t charsize = LCD_5x8DOTS); + + void clear(); + void home(); + + void noDisplay(); + void display(); + void noBlink(); + void blink(); + void noCursor(); + void cursor(); + void scrollDisplayLeft(); + void scrollDisplayRight(); + void leftToRight(); + void rightToLeft(); + void autoscroll(); + void noAutoscroll(); + + void setRowOffsets(int row1, int row2, int row3, int row4); + void createChar(uint8_t, uint8_t[]); + void setCursor(uint8_t, uint8_t); + virtual size_t write(uint8_t); + void command(uint8_t); + + using Print::write; +private: + void send(uint8_t, uint8_t); + void write4bits(uint8_t); + void write8bits(uint8_t); + void pulseEnable(); + + uint8_t _rs_pin; // LOW: command. HIGH: character. + uint8_t _rw_pin; // LOW: write to LCD. HIGH: read from LCD. + uint8_t _enable_pin; // activated by a HIGH pulse. + uint8_t _data_pins[8]; + + uint8_t _displayfunction; + uint8_t _displaycontrol; + uint8_t _displaymode; + + uint8_t _initialized; + + uint8_t _numlines; + uint8_t _row_offsets[4]; +}; + +#endif diff --git a/nerd_modules/arduino-lcd/package.json b/nerd_modules/arduino-lcd/package.json new file mode 100644 index 000000000..a42161c4c --- /dev/null +++ b/nerd_modules/arduino-lcd/package.json @@ -0,0 +1,42 @@ +{ + "name": "arduino-lcd", + "description": "NerdLang Arduino LCD module", + "main": "index.ng", + "bugs": + { + "url": "https://github.com/NerdLang/Nerd/issues" + }, + + "directories": + { + "root": ".", + "lib": "lib" + }, + "homepage": "https://github.com/NerdLang/Nerd#readme", + "keywords": + [ + "nerd", + "nerdlang", + "arduino", + "lcd" + ], + "license": "MIT", + "licenses": [ + { + "type": "MIT", + "url": "https://github.com/NerdLang/Nerd/blob/master/LICENSE" + } + ], + "repository": + { + "type": "git", + "url": "git+ssh://git@github.com/NerdLang/Nerd.git" + }, + "version": "0.0.1", + "nerd": + { + "env": ["arduino"], + "read_only": [], + "lib": ["{__MODULE__}/lib/LiquidCrystal.cpp","{__EXTERN__}/arduino/avr/cores/arduino/Print.cpp"] + } +} \ No newline at end of file diff --git a/nerd_modules/arduino/index.ng b/nerd_modules/arduino/index.ng new file mode 100644 index 000000000..993f817b5 --- /dev/null +++ b/nerd_modules/arduino/index.ng @@ -0,0 +1,64 @@ +var high; +var low; +var input; +var output; +var led_builtin; + +{{ + high = HIGH; + low = LOW; + input = INPUT; + output = OUTPUT; + led_builtin = LED_BUILTIN; +}} + +var nerdDelay = function(_value) +{ + {{ + delay((int)_value); + }} +}; + +var nerdPinMode = function(_pin, _mode) +{ + {{ + pinMode((int)_pin, (int)_mode); + }} +}; + +var nerdDigitalWrite = function( _pin, _mode) +{ + {{ + digitalWrite((int)_pin, (int)_mode); + }} +}; + +var nerdMillis = function( ) +{ + {{ + return var((double)millis()); + }} +}; + +var nerdSec = function( ) +{ + {{ + return var((int)(millis()/1000)); + }} +}; + +var arduino = +{ + delay: nerdDelay, + pinMode: nerdPinMode, + digitalWrite: nerdDigitalWrite, + high: high, + low: low, + input: input, + output: output, + led_builtin: led_builtin, + millis: nerdMillis, + seconds: nerdSec, +}; + +return arduino; \ No newline at end of file diff --git a/nerd_modules/child_process/index.ng b/nerd_modules/child_process/index.ng new file mode 100644 index 000000000..9c4ead911 --- /dev/null +++ b/nerd_modules/child_process/index.ng @@ -0,0 +1,66 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +var child_process = {}; + +child_process.exec = function(_cmd) +{ + {{ + FILE *fp; + const int pSize = 64; + int bSize = pSize; + int now = 0; + char* buffer = (char*)malloc(pSize * sizeof(char)); + + buffer[0] = 0; + char pChar[pSize]; + + fp = popen(((std::string)_cmd).c_str(), "r"); + + if (fp == NULL) + { + printf("Failed to run command\n" ); + return var(); + } + + while (fgets(pChar, sizeof(pChar), fp) != NULL) + { + now += strlen(pChar); + if(now > bSize) + { + bSize += (now) * 1.5; + buffer = (char*)realloc(buffer, bSize); + } + strcat(buffer, pChar); + } + + pclose(fp); + + var _return = buffer; + free(buffer); + return _return; + }} +}; +child_process.execSync = child_process.exec; + +return child_process; diff --git a/nerd_modules/child_process/package.json b/nerd_modules/child_process/package.json new file mode 100644 index 000000000..c4f6368a0 --- /dev/null +++ b/nerd_modules/child_process/package.json @@ -0,0 +1,40 @@ +{ + "name": "child_process", + "description": "Nerd base child process module", + "main": "index.nf", + "bugs": + { + "url": "https://github.com/Nerdlang/Nerd/issues" + }, + + "directories": + { + "root": "." + }, + "homepage": "https://github.com/Nerdlang/Nerd#readme", + "keywords": + [ + "nerdlang", + "nerd", + "child_process", + "exec", + "spawn" + ], + "license": "MIT", + "licenses": [ + { + "type": "MIT", + "url": "https://github.com/nerdlang/nerd/blob/master/LICENSE" + } + ], + "repository": + { + "type": "git", + "url": "git+ssh://git@github.com/Nerdlang/Nerd.git" + }, + "version": "0.0.1", + "nectar": + { + "env": ["std", "wasm"] + } +} diff --git a/nerd_modules/console/index.ng b/nerd_modules/console/index.ng new file mode 100644 index 000000000..ee800536a --- /dev/null +++ b/nerd_modules/console/index.ng @@ -0,0 +1,83 @@ +/* + Copyright (c) 2022 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +var console = {}; + +console.log = function() +{ + var _args = arguments(); + for(var i = 0; i < length_of(_args); i++) + { + if(i > 0) + { + {{ + std::cout << " "; + }} + } + {{ + std::cout << _args[i]; + }} + } + {{ + std::cout << std::endl; + }} +}; + +console.error = function() +{ + var _args = arguments(); + for(var i = 0; i < length_of(_args); i++) + { + if(i > 0) + { + {{ + std::cerr << " "; + }} + } + {{ + std::cerr << _args[i]; + }} + } + {{ + std::cerr << std::endl; + }} +}; + +console.write = function() +{ + var _args = arguments(); + for(var i = 0; i < length_of(_args); i++) + { + if(i > 0) + { + {{ + std::cout << " "; + }} + } + {{ + std::cout << _args[i]; + }} + } +}; + +return console; \ No newline at end of file diff --git a/nerd_modules/date/index.ng b/nerd_modules/date/index.ng new file mode 100644 index 000000000..b2ab8f09a --- /dev/null +++ b/nerd_modules/date/index.ng @@ -0,0 +1,14 @@ +include(""); + +var date = {}; + +date.now = function() +{ + {{ + return NerdCore::VAR(std::chrono::duration_cast( + std::chrono::system_clock::now().time_since_epoch() + ).count()); + }} +}; + +return date; \ No newline at end of file diff --git a/nerd_modules/error/index.ng b/nerd_modules/error/index.ng new file mode 100644 index 000000000..c18fd9f79 --- /dev/null +++ b/nerd_modules/error/index.ng @@ -0,0 +1,33 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +var error = {}; + +error.throw = function(_obj) +{ + {{ + throw(_obj); + }} +}; + +return error; \ No newline at end of file diff --git a/nerd_modules/fs/index.ng b/nerd_modules/fs/index.ng new file mode 100644 index 000000000..e2476a40a --- /dev/null +++ b/nerd_modules/fs/index.ng @@ -0,0 +1,156 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +include(""); +include(""); +include(""); +include(""); + +var fs = {}; + +fs.readFile = function(_name) +{ + {{ + std::ifstream _ifs((std::string)_name); + std::string str((std::istreambuf_iterator(_ifs)), std::istreambuf_iterator()); + return str; + }} +}; +fs.readFileSync = fs.readFile; + +fs.writeFile = function(_name, _content) +{ + {{ + std::ofstream _file((std::string)_name); + if(_file.is_open()) + { + _file << _content; + _file.close(); + return true; + } + else + { + return false; + } + }} +}; +fs.writeFileSync = fs.writeFile; + +fs.appendFile = function(_name, _content) +{ + {{ + std::ofstream _file; + _file.open((std::string)_name, std::ofstream::out | std::ofstream::app); + if(_file.is_open()) + { + _file << _content; + _file.close(); + return true; + } + else + { + return false; + } + }} +}; +fs.appendFileSync = fs.appendFile; + +fs.unlink = function(_name) +{ + {{ + unlink(_name); + }} + return true; +}; +fs.unlinkSync = fs.unlink; + + +fs.rmdir = function(_name) +{ + {{ + rmdir(_name); + }} + return true; +}; +fs.rmdirSync = fs.rmdir; + +fs.remove = function(_name) +{ + {{ + remove(_name); + }} + return true; +}; +fs.removeSync = fs.remove; + +fs.rename = function(_old, _new) +{ + {{ + rename(_old, _new); + }} + return true; +}; +fs.renameSync = fs.rename; + +fs.mkdir = function(_path) +{ + {{ + #ifndef __linux__ + mkdir(_path); + #else + // TODO + #endif + }} + return true; +}; +fs.mkdirSync = fs.mkdir; + + +fs.readdir = function(_path) +{ + var _list = []; + + {{ + int i = 0; + DIR *dir; struct dirent *diread; + std::string str; + if ((dir = opendir(_path)) != nullptr) + { + while ((diread = readdir(dir)) != nullptr) + { + str = diread->d_name; + _list[i] = str; + i++; + } + closedir (dir); + } + else + { + throw(var("Cannont open dir: " + _path)); + } + }} + return _list; +}; +fs.readdirSync = fs.readdir; + +return fs; diff --git a/nerd_modules/fs/package.json b/nerd_modules/fs/package.json new file mode 100644 index 000000000..c42318904 --- /dev/null +++ b/nerd_modules/fs/package.json @@ -0,0 +1,39 @@ +{ + "name": "fs", + "description": "Nerd Standard FS module", + "main": "index.ng", + "bugs": + { + "url": "https://github.com/Nerdlang/Nerd/issues" + }, + + "directories": + { + "root": "." + }, + "homepage": "https://github.com/Nerdlang/Nerd#readme", + "keywords": + [ + "nerd", + "nerdlang", + "fs", + "filesystem" + ], + "license": "MIT", + "licenses": [ + { + "type": "MIT", + "url": "https://github.com/nerdlang/nerd/blob/master/LICENSE" + } + ], + "repository": + { + "type": "git", + "url": "git+ssh://git@github.com/Nerd/nectarjs.git" + }, + "version": "0.0.1", + "nerd": + { + "env": ["std", "wasm", "js"] + } +} diff --git a/nerd_modules/http/httpStruct.h b/nerd_modules/http/httpStruct.h new file mode 100644 index 000000000..ae59a4f83 --- /dev/null +++ b/nerd_modules/http/httpStruct.h @@ -0,0 +1,80 @@ +var __LAZY_RES_STATUS = __NERD_Create_Var_Unscoped_Anon( +{ + var arg; + if(__NERD_VARLENGTH > 0) + { + arg = __NERD_VARARGS[0]; + } + ((uWS::HttpResponse*)__NERD_OBJECT(__NERD_THIS)->bind)->writeStatus((std::string)arg); + return NerdCore::Global::null; +}); + +var __LAZY_RES_HEADER = __NERD_Create_Var_Unscoped_Anon( +{ + var arg1; + var arg2; + if(__NERD_VARLENGTH > 0) + { + arg1 = __NERD_VARARGS[0]; + } + if(__NERD_VARLENGTH > 1) + { + arg2 = __NERD_VARARGS[1]; + } + ((uWS::HttpResponse*)__NERD_OBJECT(__NERD_THIS)->bind)->writeHeader((std::string)arg1, (std::string)arg2); + return NerdCore::Global::null; +}); + +var __LAZY_RES_WRITE = __NERD_Create_Var_Unscoped_Anon( +{ + var arg; + if(__NERD_VARLENGTH > 0) + { + arg = __NERD_VARARGS[0]; + } + + ((uWS::HttpResponse*)__NERD_OBJECT(__NERD_THIS)->bind)->write((std::string)arg); + return NerdCore::Global::null; +}); + +var __LAZY_RES_END = __NERD_Create_Var_Unscoped_Anon( +{ + var arg; + if(__NERD_VARLENGTH > 0) + { + arg = __NERD_VARARGS[0]; + } + ((uWS::HttpResponse*)__NERD_OBJECT(__NERD_THIS)->bind)->end((std::string)arg); + return NerdCore::Global::null; +}); + +var __LAZY_REQ_METHOD = __NERD_Create_Var_Unscoped_Anon( +{ + return ((uWS::HttpRequest*)__NERD_OBJECT(__NERD_THIS)->bind)->getMethod(); +}); + +var __LAZY_REQ_HEADER = __NERD_Create_Var_Unscoped_Anon( +{ + var arg; + if(__NERD_VARLENGTH > 0) + { + arg = __NERD_VARARGS[0]; + } + return ((uWS::HttpRequest*)__NERD_OBJECT(__NERD_THIS)->bind)->getHeader((std::string)arg); +}); + +var __LAZY_REQ_URL = __NERD_Create_Var_Unscoped_Anon( +{ + return ((uWS::HttpRequest*)__NERD_OBJECT(__NERD_THIS)->bind)->getUrl(); +}); + +struct __Nerd_HttpStruct +{ + var resStatus =__LAZY_RES_STATUS; + var resHeader = __LAZY_RES_HEADER; + var resWrite = __LAZY_RES_WRITE; + var resEnd = __LAZY_RES_END; + var reqMethod = __LAZY_REQ_METHOD; + var reqHeader = __LAZY_REQ_HEADER; + var reqUrl = __LAZY_REQ_URL; +} ; diff --git a/nectar_modules/http/httplib/uSockets/LICENSE b/nerd_modules/http/httplib/uSockets/LICENSE similarity index 100% rename from nectar_modules/http/httplib/uSockets/LICENSE rename to nerd_modules/http/httplib/uSockets/LICENSE diff --git a/nectar_modules/http/httplib/uSockets/src/bsd.c b/nerd_modules/http/httplib/uSockets/bsd.c similarity index 86% rename from nectar_modules/http/httplib/uSockets/src/bsd.c rename to nerd_modules/http/httplib/uSockets/bsd.c index 2117f8703..c525c39e3 100644 --- a/nectar_modules/http/httplib/uSockets/src/bsd.c +++ b/nerd_modules/http/httplib/uSockets/bsd.c @@ -1,5 +1,5 @@ /* - * Authored by Alex Hultman, 2018-2019. + * Authored by Alex Hultman, 2018-2021. * Intellectual property of third-party. * Licensed under the Apache License, Version 2.0 (the "License"); @@ -94,20 +94,40 @@ void bsd_shutdown_socket(LIBUS_SOCKET_DESCRIPTOR fd) { #endif } +void bsd_shutdown_socket_read(LIBUS_SOCKET_DESCRIPTOR fd) { +#ifdef _WIN32 + shutdown(fd, SD_RECEIVE); +#else + shutdown(fd, SHUT_RD); +#endif +} + void internal_finalize_bsd_addr(struct bsd_addr_t *addr) { // parse, so to speak, the address if (addr->mem.ss_family == AF_INET6) { addr->ip = (char *) &((struct sockaddr_in6 *) addr)->sin6_addr; addr->ip_length = sizeof(struct in6_addr); + addr->port = ntohs(((struct sockaddr_in6 *) addr)->sin6_port); } else if (addr->mem.ss_family == AF_INET) { addr->ip = (char *) &((struct sockaddr_in *) addr)->sin_addr; addr->ip_length = sizeof(struct in_addr); + addr->port = ntohs(((struct sockaddr_in *) addr)->sin_port); } else { addr->ip_length = 0; + addr->port = -1; } } -int bsd_socket_addr(LIBUS_SOCKET_DESCRIPTOR fd, struct bsd_addr_t *addr) { +int bsd_local_addr(LIBUS_SOCKET_DESCRIPTOR fd, struct bsd_addr_t *addr) { + addr->len = sizeof(addr->mem); + if (getsockname(fd, (struct sockaddr *) &addr->mem, &addr->len)) { + return -1; + } + internal_finalize_bsd_addr(addr); + return 0; +} + +int bsd_remote_addr(LIBUS_SOCKET_DESCRIPTOR fd, struct bsd_addr_t *addr) { addr->len = sizeof(addr->mem); if (getpeername(fd, (struct sockaddr *) &addr->mem, &addr->len)) { return -1; @@ -124,6 +144,10 @@ int bsd_addr_get_ip_length(struct bsd_addr_t *addr) { return addr->ip_length; } +int bsd_addr_get_port(struct bsd_addr_t *addr) { + return addr->port; +} + // called by dispatch_ready_poll LIBUS_SOCKET_DESCRIPTOR bsd_accept_socket(LIBUS_SOCKET_DESCRIPTOR fd, struct bsd_addr_t *addr) { LIBUS_SOCKET_DESCRIPTOR accepted_fd; @@ -220,17 +244,18 @@ LIBUS_SOCKET_DESCRIPTOR bsd_create_listen_socket(const char *host, int port, int return LIBUS_SOCKET_ERROR; } - /* Always enable SO_REUSEPORT and SO_REUSEADDR _unless_ options specify otherwise */ -#if defined(__linux) && defined(SO_REUSEPORT) - if (!(options & LIBUS_LISTEN_EXCLUSIVE_PORT)) { - int optval = 1; - setsockopt(listenFd, SOL_SOCKET, SO_REUSEPORT, &optval, sizeof(optval)); - } + if (port != 0) { + /* Otherwise, always enable SO_REUSEPORT and SO_REUSEADDR _unless_ options specify otherwise */ +#if /*defined(__linux) &&*/ defined(SO_REUSEPORT) + if (!(options & LIBUS_LISTEN_EXCLUSIVE_PORT)) { + int optval = 1; + setsockopt(listenFd, SOL_SOCKET, SO_REUSEPORT, &optval, sizeof(optval)); + } #endif - - int enabled = 1; - setsockopt(listenFd, SOL_SOCKET, SO_REUSEADDR, (SETSOCKOPT_PTR_TYPE) &enabled, sizeof(enabled)); - + int enabled = 1; + setsockopt(listenFd, SOL_SOCKET, SO_REUSEADDR, (SETSOCKOPT_PTR_TYPE) &enabled, sizeof(enabled)); + } + #ifdef IPV6_V6ONLY int disabled = 0; setsockopt(listenFd, IPPROTO_IPV6, IPV6_V6ONLY, (SETSOCKOPT_PTR_TYPE) &disabled, sizeof(disabled)); diff --git a/nectar_modules/http/httplib/uSockets/src/context.c b/nerd_modules/http/httplib/uSockets/context.c similarity index 94% rename from nectar_modules/http/httplib/uSockets/src/context.c rename to nerd_modules/http/httplib/uSockets/context.c index 18b2051e6..860101b8b 100644 --- a/nectar_modules/http/httplib/uSockets/src/context.c +++ b/nerd_modules/http/httplib/uSockets/context.c @@ -26,6 +26,10 @@ int default_ignore_data_handler(struct us_socket_t *s) { /* Shared with SSL */ +unsigned short us_socket_context_timestamp(int ssl, struct us_socket_context_t *context) { + return context->timestamp; +} + void us_listen_socket_close(int ssl, struct us_listen_socket_t *ls) { /* us_listen_socket_t extends us_socket_t so we close in similar ways */ if (!us_socket_is_closed(0, &ls->s)) { @@ -145,6 +149,9 @@ struct us_socket_context_t *us_create_socket_context(int ssl, struct us_loop_t * context->next = 0; context->ignore_data = default_ignore_data_handler; + /* Begin at 0 */ + context->timestamp = 0; + us_internal_loop_link(loop, context); /* If we are called from within SSL code, SSL code will make further changes to us */ @@ -323,6 +330,17 @@ void us_socket_context_on_end(int ssl, struct us_socket_context_t *context, stru context->on_end = on_end; } +void us_socket_context_on_connect_error(int ssl, struct us_socket_context_t *context, struct us_socket_t *(*on_connect_error)(struct us_socket_t *s, int code)) { +#ifndef LIBUS_NO_SSL + if (ssl) { + us_internal_ssl_socket_context_on_connect_error((struct us_internal_ssl_socket_context_t *) context, (struct us_internal_ssl_socket_t * (*)(struct us_internal_ssl_socket_t *, int)) on_connect_error); + return; + } +#endif + + context->on_connect_error = on_connect_error; +} + void *us_socket_context_ext(int ssl, struct us_socket_context_t *context) { #ifndef LIBUS_NO_SSL if (ssl) { diff --git a/nectar_modules/http/httplib/uSockets/src/crypto/openssl.c b/nerd_modules/http/httplib/uSockets/crypto/openssl.c similarity index 93% rename from nectar_modules/http/httplib/uSockets/src/crypto/openssl.c rename to nerd_modules/http/httplib/uSockets/crypto/openssl.c index feb26e5bf..bbeb02442 100644 --- a/nectar_modules/http/httplib/uSockets/src/crypto/openssl.c +++ b/nerd_modules/http/httplib/uSockets/crypto/openssl.c @@ -70,6 +70,7 @@ struct us_internal_ssl_socket_context_t { /* These decorate the base implementation */ struct us_internal_ssl_socket_t *(*on_open)(struct us_internal_ssl_socket_t *, int is_client, char *ip, int ip_length); struct us_internal_ssl_socket_t *(*on_data)(struct us_internal_ssl_socket_t *, char *data, int length); + struct us_internal_ssl_socket_t *(*on_writable)(struct us_internal_ssl_socket_t *); struct us_internal_ssl_socket_t *(*on_close)(struct us_internal_ssl_socket_t *, int code, void *reason); /* Called for missing SNI hostnames, if not NULL */ @@ -84,6 +85,7 @@ struct us_internal_ssl_socket_t { struct us_socket_t s; SSL *ssl; int ssl_write_wants_read; // we use this for now + int ssl_read_wants_write; }; int passphrase_cb(char *buf, int size, int rwflag, void *u) { @@ -155,6 +157,7 @@ struct us_internal_ssl_socket_t *ssl_on_open(struct us_internal_ssl_socket_t *s, s->ssl = SSL_new(context->ssl_context); s->ssl_write_wants_read = 0; + s->ssl_read_wants_write = 0; SSL_set_bio(s->ssl, loop_ssl_data->shared_rbio, loop_ssl_data->shared_wbio); BIO_up_ref(loop_ssl_data->shared_rbio); @@ -183,7 +186,7 @@ struct us_internal_ssl_socket_t *ssl_on_close(struct us_internal_ssl_socket_t *s } struct us_internal_ssl_socket_t *ssl_on_end(struct us_internal_ssl_socket_t *s) { - struct us_internal_ssl_socket_context_t *context = (struct us_internal_ssl_socket_context_t *) us_socket_context(0, &s->s); + // struct us_internal_ssl_socket_context_t *context = (struct us_internal_ssl_socket_context_t *) us_socket_context(0, &s->s); // whatever state we are in, a TCP FIN is always an answered shutdown @@ -252,6 +255,11 @@ struct us_internal_ssl_socket_t *ssl_on_data(struct us_internal_ssl_socket_t *s, } else { // emit the data we have and exit + if (err == SSL_ERROR_WANT_WRITE) { + // here we need to trigger writable event next ssl_read! + s->ssl_read_wants_write = 1; + } + // assume we emptied the input buffer fully or error here as well! if (loop_ssl_data->ssl_read_input_length) { return us_internal_ssl_socket_close(s, 0, NULL); @@ -262,6 +270,8 @@ struct us_internal_ssl_socket_t *ssl_on_data(struct us_internal_ssl_socket_t *s, break; } + context = (struct us_internal_ssl_socket_context_t *) us_socket_context(0, &s->s); + s = context->on_data(s, loop_ssl_data->ssl_read_output + LIBUS_RECV_BUFFER_PADDING, read); if (us_socket_is_closed(0, &s->s)) { return s; @@ -277,6 +287,8 @@ struct us_internal_ssl_socket_t *ssl_on_data(struct us_internal_ssl_socket_t *s, // at this point we might be full and need to emit the data to application and start over if (read == LIBUS_RECV_BUFFER_LENGTH) { + context = (struct us_internal_ssl_socket_context_t *) us_socket_context(0, &s->s); + // emit data and restart s = context->on_data(s, loop_ssl_data->ssl_read_output + LIBUS_RECV_BUFFER_PADDING, read); if (us_socket_is_closed(0, &s->s)) { @@ -317,6 +329,28 @@ struct us_internal_ssl_socket_t *ssl_on_data(struct us_internal_ssl_socket_t *s, return s; } +struct us_internal_ssl_socket_t *ssl_on_writable(struct us_internal_ssl_socket_t *s) { + + struct us_internal_ssl_socket_context_t *context = (struct us_internal_ssl_socket_context_t *) us_socket_context(0, &s->s); + + // todo: cork here so that we efficiently output both from reading and from writing? + + if (s->ssl_read_wants_write) { + s->ssl_read_wants_write = 0; + + // make sure to update context before we call (context can change if the user adopts the socket!) + context = (struct us_internal_ssl_socket_context_t *) us_socket_context(0, &s->s); + + // if this one fails to write data, it sets ssl_read_wants_write again + s = (struct us_internal_ssl_socket_t *) context->sc.on_data(&s->s, 0, 0); // cast here! + } + + // should this one come before we have read? should it come always? spurious on_writable is okay + s = context->on_writable(s); + + return s; +} + /* Lazily inits loop ssl data first time */ void us_internal_init_loop_ssl_data(struct us_loop_t *loop) { if (!loop->data.ssl_data) { @@ -670,17 +704,23 @@ void us_internal_ssl_socket_context_on_data(struct us_internal_ssl_socket_contex } void us_internal_ssl_socket_context_on_writable(struct us_internal_ssl_socket_context_t *context, struct us_internal_ssl_socket_t *(*on_writable)(struct us_internal_ssl_socket_t *s)) { - us_socket_context_on_writable(0, (struct us_socket_context_t *) context, (struct us_socket_t *(*)(struct us_socket_t *)) on_writable); + us_socket_context_on_writable(0, (struct us_socket_context_t *) context, (struct us_socket_t *(*)(struct us_socket_t *)) ssl_on_writable); + context->on_writable = on_writable; } void us_internal_ssl_socket_context_on_timeout(struct us_internal_ssl_socket_context_t *context, struct us_internal_ssl_socket_t *(*on_timeout)(struct us_internal_ssl_socket_t *s)) { us_socket_context_on_timeout(0, (struct us_socket_context_t *) context, (struct us_socket_t *(*)(struct us_socket_t *)) on_timeout); } +/* We do not really listen to passed FIN-handler, we entirely override it with our handler since SSL doesn't really have support for half-closed sockets */ void us_internal_ssl_socket_context_on_end(struct us_internal_ssl_socket_context_t *context, struct us_internal_ssl_socket_t *(*on_end)(struct us_internal_ssl_socket_t *)) { us_socket_context_on_end(0, (struct us_socket_context_t *) context, (struct us_socket_t *(*)(struct us_socket_t *)) ssl_on_end); } +void us_internal_ssl_socket_context_on_connect_error(struct us_internal_ssl_socket_context_t *context, struct us_internal_ssl_socket_t *(*on_connect_error)(struct us_internal_ssl_socket_t *, int code)) { + us_socket_context_on_connect_error(0, (struct us_socket_context_t *) context, (struct us_socket_t *(*)(struct us_socket_t *, int)) on_connect_error); +} + void *us_internal_ssl_socket_context_ext(struct us_internal_ssl_socket_context_t *context) { return context + 1; } diff --git a/nectar_modules/http/httplib/uSockets/src/crypto/sni_tree.cpp b/nerd_modules/http/httplib/uSockets/crypto/sni_tree.cpp similarity index 100% rename from nectar_modules/http/httplib/uSockets/src/crypto/sni_tree.cpp rename to nerd_modules/http/httplib/uSockets/crypto/sni_tree.cpp diff --git a/nectar_modules/http/httplib/uSockets/src/crypto/wolfssl.c b/nerd_modules/http/httplib/uSockets/crypto/wolfssl.c similarity index 100% rename from nectar_modules/http/httplib/uSockets/src/crypto/wolfssl.c rename to nerd_modules/http/httplib/uSockets/crypto/wolfssl.c diff --git a/nectar_modules/http/httplib/uSockets/src/eventing/epoll_kqueue.c b/nerd_modules/http/httplib/uSockets/eventing/epoll_kqueue.c similarity index 99% rename from nectar_modules/http/httplib/uSockets/src/eventing/epoll_kqueue.c rename to nerd_modules/http/httplib/uSockets/eventing/epoll_kqueue.c index 18958a80e..671db7e21 100644 --- a/nectar_modules/http/httplib/uSockets/src/eventing/epoll_kqueue.c +++ b/nerd_modules/http/httplib/uSockets/eventing/epoll_kqueue.c @@ -332,8 +332,8 @@ void us_timer_set(struct us_timer_t *t, void (*cb)(struct us_timer_t *t), int ms internal_cb->cb = (void (*)(struct us_internal_callback_t *)) cb; struct itimerspec timer_spec = { - {repeat_ms / 1000, ((long)repeat_ms * 1000000) % 1000000000}, - {ms / 1000, ((long)ms * 1000000) % 1000000000} + {repeat_ms / 1000, (long) (repeat_ms % 1000) * (long) 1000000}, + {ms / 1000, (long) (ms % 1000) * (long) 1000000} }; timerfd_settime(us_poll_fd((struct us_poll_t *) t), 0, &timer_spec, NULL); diff --git a/nectar_modules/http/httplib/uSockets/src/eventing/gcd.c b/nerd_modules/http/httplib/uSockets/eventing/gcd.c similarity index 99% rename from nectar_modules/http/httplib/uSockets/src/eventing/gcd.c rename to nerd_modules/http/httplib/uSockets/eventing/gcd.c index 120eec4a7..4aa3fec70 100644 --- a/nectar_modules/http/httplib/uSockets/src/eventing/gcd.c +++ b/nerd_modules/http/httplib/uSockets/eventing/gcd.c @@ -145,7 +145,7 @@ void *us_poll_ext(struct us_poll_t *p) { } unsigned int us_internal_accept_poll_event(struct us_poll_t *p) { - printf("us_internal_accept_poll_event\n"); + //printf("us_internal_accept_poll_event\n"); return 0; } diff --git a/nectar_modules/http/httplib/uSockets/src/eventing/libuv.c b/nerd_modules/http/httplib/uSockets/eventing/libuv.c similarity index 80% rename from nectar_modules/http/httplib/uSockets/src/eventing/libuv.c rename to nerd_modules/http/httplib/uSockets/eventing/libuv.c index 353642660..765137fbf 100644 --- a/nectar_modules/http/httplib/uSockets/src/eventing/libuv.c +++ b/nerd_modules/http/httplib/uSockets/eventing/libuv.c @@ -1,5 +1,5 @@ /* - * Authored by Alex Hultman, 2018-2019. + * Authored by Alex Hultman, 2018-2021. * Intellectual property of third-party. * Licensed under the Apache License, Version 2.0 (the "License"); @@ -21,9 +21,9 @@ #ifdef LIBUS_USE_LIBUV -// poll dispatch +/* uv_poll_t->data always (except for most times after calling us_poll_stop) points to the us_poll_t */ static void poll_cb(uv_poll_t *p, int status, int events) { - us_internal_dispatch_ready_poll((struct us_poll_t *) p, status < 0, events); + us_internal_dispatch_ready_poll((struct us_poll_t *) p->data, status < 0, events); } static void prepare_cb(uv_prepare_t *p) { @@ -37,10 +37,21 @@ static void check_cb(uv_check_t *p) { us_internal_loop_post(loop); } +/* Not used for polls, since polls need two frees */ static void close_cb_free(uv_handle_t *h) { free(h->data); } +/* This one is different for polls, since we need two frees here */ +static void close_cb_free_poll(uv_handle_t *h) { + /* It is only in case we called us_poll_stop then quickly us_poll_free that we enter this. + * Most of the time, actual freeing is done by us_poll_free. */ + if (h->data) { + free(h->data); + free(h); + } +} + static void timer_cb(uv_timer_t *t) { struct us_internal_callback_t *cb = t->data; cb->cb(cb); @@ -59,9 +70,14 @@ void us_poll_init(struct us_poll_t *p, LIBUS_SOCKET_DESCRIPTOR fd, int poll_type } void us_poll_free(struct us_poll_t *p, struct us_loop_t *loop) { - if (uv_is_closing((uv_handle_t *) &p->uv_p)) { - p->uv_p.data = p; + /* The idea here is like so; in us_poll_stop we call uv_close after setting data of uv-poll to 0. + * This means that in close_cb_free we call free on 0 with does nothing, since us_poll_stop should + * not really free the poll. HOWEVER, if we then call us_poll_free while still closing the uv-poll, + * we simply change back the data to point to our structure so that we actually do free it like we should. */ + if (uv_is_closing((uv_handle_t *) p->uv_p)) { + p->uv_p->data = p; } else { + free(p->uv_p); free(p); } } @@ -69,24 +85,26 @@ void us_poll_free(struct us_poll_t *p, struct us_loop_t *loop) { void us_poll_start(struct us_poll_t *p, struct us_loop_t *loop, int events) { p->poll_type = us_internal_poll_type(p) | ((events & LIBUS_SOCKET_READABLE) ? POLL_TYPE_POLLING_IN : 0) | ((events & LIBUS_SOCKET_WRITABLE) ? POLL_TYPE_POLLING_OUT : 0); - uv_poll_init_socket(loop->uv_loop, &p->uv_p, p->fd); - uv_poll_start(&p->uv_p, events, poll_cb); + uv_poll_init_socket(loop->uv_loop, p->uv_p, p->fd); + uv_poll_start(p->uv_p, events, poll_cb); } void us_poll_change(struct us_poll_t *p, struct us_loop_t *loop, int events) { if (us_poll_events(p) != events) { p->poll_type = us_internal_poll_type(p) | ((events & LIBUS_SOCKET_READABLE) ? POLL_TYPE_POLLING_IN : 0) | ((events & LIBUS_SOCKET_WRITABLE) ? POLL_TYPE_POLLING_OUT : 0); - uv_poll_start(&p->uv_p, events, poll_cb); + uv_poll_start(p->uv_p, events, poll_cb); } } void us_poll_stop(struct us_poll_t *p, struct us_loop_t *loop) { - uv_poll_stop(&p->uv_p); + uv_poll_stop(p->uv_p); - // close but not free is needed here - p->uv_p.data = 0; - uv_close((uv_handle_t *) &p->uv_p, close_cb_free); // needed here + /* We normally only want to close the poll here, not free it. But if we stop it, then quickly "free" it with + * us_poll_free, we postpone the actual freeing to close_cb_free_poll whenever it triggers. + * That's why we set data to null here, so that us_poll_free can reset it if needed */ + p->uv_p->data = 0; + uv_close((uv_handle_t *) p->uv_p, close_cb_free_poll); } int us_poll_events(struct us_poll_t *p) { @@ -171,19 +189,17 @@ void us_loop_run(struct us_loop_t *loop) { } struct us_poll_t *us_create_poll(struct us_loop_t *loop, int fallthrough, unsigned int ext_size) { - return malloc(sizeof(struct us_poll_t) + ext_size); + struct us_poll_t *p = (struct us_poll_t *) malloc(sizeof(struct us_poll_t) + ext_size); + p->uv_p = malloc(sizeof(uv_poll_t)); + p->uv_p->data = p; + return p; } -// this one is broken, us_poll needs to hold a pointer to uv_poll_t for it to work (bad anyways) +/* If we update our block position we have to updarte the uv_poll data to point to us */ struct us_poll_t *us_poll_resize(struct us_poll_t *p, struct us_loop_t *loop, unsigned int ext_size) { - // do not support it yet - return p; - struct us_poll_t *new_p = realloc(p, sizeof(struct us_poll_t) + ext_size); - if (p != new_p) { - new_p->uv_p.data = new_p; - } + new_p->uv_p->data = new_p; return new_p; } diff --git a/nectar_modules/http/httplib/uSockets/src/internal/eventing/epoll_kqueue.h b/nerd_modules/http/httplib/uSockets/internal/eventing/epoll_kqueue.h similarity index 100% rename from nectar_modules/http/httplib/uSockets/src/internal/eventing/epoll_kqueue.h rename to nerd_modules/http/httplib/uSockets/internal/eventing/epoll_kqueue.h diff --git a/nectar_modules/http/httplib/uSockets/src/internal/eventing/gcd.h b/nerd_modules/http/httplib/uSockets/internal/eventing/gcd.h similarity index 100% rename from nectar_modules/http/httplib/uSockets/src/internal/eventing/gcd.h rename to nerd_modules/http/httplib/uSockets/internal/eventing/gcd.h diff --git a/nectar_modules/http/httplib/uSockets/src/internal/eventing/libuv.h b/nerd_modules/http/httplib/uSockets/internal/eventing/libuv.h similarity index 84% rename from nectar_modules/http/httplib/uSockets/src/internal/eventing/libuv.h rename to nerd_modules/http/httplib/uSockets/internal/eventing/libuv.h index 74882120f..590878b57 100644 --- a/nectar_modules/http/httplib/uSockets/src/internal/eventing/libuv.h +++ b/nerd_modules/http/httplib/uSockets/internal/eventing/libuv.h @@ -34,8 +34,10 @@ struct us_loop_t { uv_check_t *uv_check; }; +// it is no longer valid to cast a pointer to us_poll_t to a pointer of uv_poll_t struct us_poll_t { - uv_poll_t uv_p; + /* We need to hold a pointer to this uv_poll_t since we need to be able to resize our block */ + uv_poll_t *uv_p; LIBUS_SOCKET_DESCRIPTOR fd; unsigned char poll_type; }; diff --git a/nerd_modules/http/httplib/uSockets/internal/internal.h b/nerd_modules/http/httplib/uSockets/internal/internal.h new file mode 100644 index 000000000..ac54b0f22 --- /dev/null +++ b/nerd_modules/http/httplib/uSockets/internal/internal.h @@ -0,0 +1,186 @@ +/* + * Authored by Alex Hultman, 2018-2019. + * Intellectual property of third-party. + + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + + * http://www.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef INTERNAL_H +#define INTERNAL_H + +#if defined(_MSC_VER) +#define alignas(x) __declspec(align(x)) +#else +#include +#endif + +/* We only have one networking implementation so far */ +#include "internal/networking/bsd.h" + +/* We have many different eventing implementations */ +#if defined(LIBUS_USE_EPOLL) || defined(LIBUS_USE_KQUEUE) +#include "internal/eventing/epoll_kqueue.h" +#endif +#ifdef LIBUS_USE_LIBUV +#include "internal/eventing/libuv.h" +#endif +#ifdef LIBUS_USE_GCD +#include "internal/eventing/gcd.h" +#endif + +/* Poll type and what it polls for */ +enum { + /* Two first bits */ + POLL_TYPE_SOCKET = 0, + POLL_TYPE_SOCKET_SHUT_DOWN = 1, + POLL_TYPE_SEMI_SOCKET = 2, + POLL_TYPE_CALLBACK = 3, + + /* Two last bits */ + POLL_TYPE_POLLING_OUT = 4, + POLL_TYPE_POLLING_IN = 8 +}; + +/* Loop related */ +void us_internal_dispatch_ready_poll(struct us_poll_t *p, int error, int events); +void us_internal_timer_sweep(struct us_loop_t *loop); +void us_internal_free_closed_sockets(struct us_loop_t *loop); +void us_internal_loop_link(struct us_loop_t *loop, struct us_socket_context_t *context); +void us_internal_loop_unlink(struct us_loop_t *loop, struct us_socket_context_t *context); +void us_internal_loop_data_init(struct us_loop_t *loop, void (*wakeup_cb)(struct us_loop_t *loop), + void (*pre_cb)(struct us_loop_t *loop), void (*post_cb)(struct us_loop_t *loop)); +void us_internal_loop_data_free(struct us_loop_t *loop); +void us_internal_loop_pre(struct us_loop_t *loop); +void us_internal_loop_post(struct us_loop_t *loop); + +/* Asyncs (old) */ +struct us_internal_async *us_internal_create_async(struct us_loop_t *loop, int fallthrough, unsigned int ext_size); +void us_internal_async_close(struct us_internal_async *a); +void us_internal_async_set(struct us_internal_async *a, void (*cb)(struct us_internal_async *)); +void us_internal_async_wakeup(struct us_internal_async *a); + +/* Eventing related */ +unsigned int us_internal_accept_poll_event(struct us_poll_t *p); +int us_internal_poll_type(struct us_poll_t *p); +void us_internal_poll_set_type(struct us_poll_t *p, int poll_type); + +/* SSL loop data */ +void us_internal_init_loop_ssl_data(struct us_loop_t *loop); +void us_internal_free_loop_ssl_data(struct us_loop_t *loop); + +/* Socket context related */ +void us_internal_socket_context_link(struct us_socket_context_t *context, struct us_socket_t *s); +void us_internal_socket_context_unlink(struct us_socket_context_t *context, struct us_socket_t *s); + +/* Sockets are polls */ +struct us_socket_t { + alignas(LIBUS_EXT_ALIGNMENT) struct us_poll_t p; + struct us_socket_context_t *context; + struct us_socket_t *prev, *next; + unsigned short timeout; +}; + +/* Internal callback types are polls just like sockets */ +struct us_internal_callback_t { + alignas(LIBUS_EXT_ALIGNMENT) struct us_poll_t p; + struct us_loop_t *loop; + int cb_expects_the_loop; + void (*cb)(struct us_internal_callback_t *cb); +}; + +/* Listen sockets are sockets */ +struct us_listen_socket_t { + alignas(LIBUS_EXT_ALIGNMENT) struct us_socket_t s; + unsigned int socket_ext_size; +}; + +struct us_socket_context_t { + alignas(LIBUS_EXT_ALIGNMENT) struct us_loop_t *loop; + unsigned short timestamp; + struct us_socket_t *head; + struct us_socket_t *iterator; + struct us_socket_context_t *prev, *next; + + struct us_socket_t *(*on_open)(struct us_socket_t *, int is_client, char *ip, int ip_length); + struct us_socket_t *(*on_data)(struct us_socket_t *, char *data, int length); + struct us_socket_t *(*on_writable)(struct us_socket_t *); + struct us_socket_t *(*on_close)(struct us_socket_t *, int code, void *reason); + //void (*on_timeout)(struct us_socket_context *); + struct us_socket_t *(*on_socket_timeout)(struct us_socket_t *); + struct us_socket_t *(*on_end)(struct us_socket_t *); + struct us_socket_t *(*on_connect_error)(struct us_socket_t *, int code); + int (*ignore_data)(struct us_socket_t *); +}; + +/* Internal SSL interface */ +#ifndef LIBUS_NO_SSL + +struct us_internal_ssl_socket_context_t; +struct us_internal_ssl_socket_t; + +/* SNI functions */ +void us_internal_ssl_socket_context_add_server_name(struct us_internal_ssl_socket_context_t *context, const char *hostname_pattern, struct us_socket_context_options_t options); +void us_internal_ssl_socket_context_remove_server_name(struct us_internal_ssl_socket_context_t *context, const char *hostname_pattern); +void us_internal_ssl_socket_context_on_server_name(struct us_internal_ssl_socket_context_t *context, void (*cb)(struct us_internal_ssl_socket_context_t *, const char *)); + +void *us_internal_ssl_socket_get_native_handle(struct us_internal_ssl_socket_t *s); +void *us_internal_ssl_socket_context_get_native_handle(struct us_internal_ssl_socket_context_t *context); + +struct us_internal_ssl_socket_context_t *us_internal_create_ssl_socket_context(struct us_loop_t *loop, + int context_ext_size, struct us_socket_context_options_t options); + +void us_internal_ssl_socket_context_free(struct us_internal_ssl_socket_context_t *context); +void us_internal_ssl_socket_context_on_open(struct us_internal_ssl_socket_context_t *context, + struct us_internal_ssl_socket_t *(*on_open)(struct us_internal_ssl_socket_t *s, int is_client, char *ip, int ip_length)); + +void us_internal_ssl_socket_context_on_close(struct us_internal_ssl_socket_context_t *context, + struct us_internal_ssl_socket_t *(*on_close)(struct us_internal_ssl_socket_t *s, int code, void *reason)); + +void us_internal_ssl_socket_context_on_data(struct us_internal_ssl_socket_context_t *context, + struct us_internal_ssl_socket_t *(*on_data)(struct us_internal_ssl_socket_t *s, char *data, int length)); + +void us_internal_ssl_socket_context_on_writable(struct us_internal_ssl_socket_context_t *context, + struct us_internal_ssl_socket_t *(*on_writable)(struct us_internal_ssl_socket_t *s)); + +void us_internal_ssl_socket_context_on_timeout(struct us_internal_ssl_socket_context_t *context, + struct us_internal_ssl_socket_t *(*on_timeout)(struct us_internal_ssl_socket_t *s)); + +void us_internal_ssl_socket_context_on_end(struct us_internal_ssl_socket_context_t *context, + struct us_internal_ssl_socket_t *(*on_end)(struct us_internal_ssl_socket_t *s)); + +void us_internal_ssl_socket_context_on_connect_error(struct us_internal_ssl_socket_context_t *context, + struct us_internal_ssl_socket_t *(*on_connect_error)(struct us_internal_ssl_socket_t *s, int code)); + +struct us_listen_socket_t *us_internal_ssl_socket_context_listen(struct us_internal_ssl_socket_context_t *context, + const char *host, int port, int options, int socket_ext_size); + +struct us_internal_ssl_socket_t *us_internal_ssl_socket_context_connect(struct us_internal_ssl_socket_context_t *context, + const char *host, int port, const char *source_host, int options, int socket_ext_size); + +int us_internal_ssl_socket_write(struct us_internal_ssl_socket_t *s, const char *data, int length, int msg_more); +void us_internal_ssl_socket_timeout(struct us_internal_ssl_socket_t *s, unsigned int seconds); +void *us_internal_ssl_socket_context_ext(struct us_internal_ssl_socket_context_t *s); +struct us_internal_ssl_socket_context_t *us_internal_ssl_socket_get_context(struct us_internal_ssl_socket_t *s); +void *us_internal_ssl_socket_ext(struct us_internal_ssl_socket_t *s); +int us_internal_ssl_socket_is_shut_down(struct us_internal_ssl_socket_t *s); +void us_internal_ssl_socket_shutdown(struct us_internal_ssl_socket_t *s); + +struct us_internal_ssl_socket_t *us_internal_ssl_socket_context_adopt_socket(struct us_internal_ssl_socket_context_t *context, + struct us_internal_ssl_socket_t *s, int ext_size); + +struct us_internal_ssl_socket_context_t *us_internal_create_child_ssl_socket_context(struct us_internal_ssl_socket_context_t *context, int context_ext_size); +struct us_loop_t *us_internal_ssl_socket_context_loop(struct us_internal_ssl_socket_context_t *context); + +#endif + +#endif // INTERNAL_H diff --git a/nectar_modules/http/httplib/uSockets/src/internal/loop_data.h b/nerd_modules/http/httplib/uSockets/internal/loop_data.h similarity index 100% rename from nectar_modules/http/httplib/uSockets/src/internal/loop_data.h rename to nerd_modules/http/httplib/uSockets/internal/loop_data.h diff --git a/nerd_modules/http/httplib/uSockets/internal/networking/bsd.h b/nerd_modules/http/httplib/uSockets/internal/networking/bsd.h new file mode 100644 index 000000000..23b4fb7d3 --- /dev/null +++ b/nerd_modules/http/httplib/uSockets/internal/networking/bsd.h @@ -0,0 +1,84 @@ +/* + * Authored by Alex Hultman, 2018-2019. + * Intellectual property of third-party. + + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + + * http://www.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef BSD_H +#define BSD_H + +// top-most wrapper of bsd-like syscalls + +// holds everything you need from the bsd/winsock interfaces, only included by internal libusockets.h +// here everything about the syscalls are inline-wrapped and included + +#ifdef _WIN32 +#ifndef NOMINMAX +#define NOMINMAX +#endif +#include +#include +#pragma comment(lib, "ws2_32.lib") +#define SETSOCKOPT_PTR_TYPE const char * +#define LIBUS_SOCKET_ERROR INVALID_SOCKET +#else +#define _GNU_SOURCE +/* For socklen_t */ +#include +#define SETSOCKOPT_PTR_TYPE int * +#define LIBUS_SOCKET_ERROR -1 +#endif + +struct bsd_addr_t { + struct sockaddr_storage mem; + socklen_t len; + char *ip; + int ip_length; + int port; +}; + +LIBUS_SOCKET_DESCRIPTOR apple_no_sigpipe(LIBUS_SOCKET_DESCRIPTOR fd); +LIBUS_SOCKET_DESCRIPTOR bsd_set_nonblocking(LIBUS_SOCKET_DESCRIPTOR fd); +void bsd_socket_nodelay(LIBUS_SOCKET_DESCRIPTOR fd, int enabled); +void bsd_socket_flush(LIBUS_SOCKET_DESCRIPTOR fd); +LIBUS_SOCKET_DESCRIPTOR bsd_create_socket(int domain, int type, int protocol); + +void bsd_close_socket(LIBUS_SOCKET_DESCRIPTOR fd); +void bsd_shutdown_socket(LIBUS_SOCKET_DESCRIPTOR fd); +void bsd_shutdown_socket_read(LIBUS_SOCKET_DESCRIPTOR fd); + +void internal_finalize_bsd_addr(struct bsd_addr_t *addr); + +int bsd_local_addr(LIBUS_SOCKET_DESCRIPTOR fd, struct bsd_addr_t *addr); +int bsd_remote_addr(LIBUS_SOCKET_DESCRIPTOR fd, struct bsd_addr_t *addr); + +char *bsd_addr_get_ip(struct bsd_addr_t *addr); +int bsd_addr_get_ip_length(struct bsd_addr_t *addr); + +int bsd_addr_get_port(struct bsd_addr_t *addr); + +// called by dispatch_ready_poll +LIBUS_SOCKET_DESCRIPTOR bsd_accept_socket(LIBUS_SOCKET_DESCRIPTOR fd, struct bsd_addr_t *addr); + +int bsd_recv(LIBUS_SOCKET_DESCRIPTOR fd, void *buf, int length, int flags); +int bsd_send(LIBUS_SOCKET_DESCRIPTOR fd, const char *buf, int length, int msg_more); +int bsd_would_block(); + +// return LIBUS_SOCKET_ERROR or the fd that represents listen socket +// listen both on ipv6 and ipv4 +LIBUS_SOCKET_DESCRIPTOR bsd_create_listen_socket(const char *host, int port, int options); + +LIBUS_SOCKET_DESCRIPTOR bsd_create_connect_socket(const char *host, int port, const char *source_host, int options); + +#endif // BSD_H diff --git a/nectar_modules/http/httplib/uSockets/src/libusockets.h b/nerd_modules/http/httplib/uSockets/libusockets.h similarity index 88% rename from nectar_modules/http/httplib/uSockets/src/libusockets.h rename to nerd_modules/http/httplib/uSockets/libusockets.h index bbc8a071d..f25762ebd 100644 --- a/nectar_modules/http/httplib/uSockets/src/libusockets.h +++ b/nerd_modules/http/httplib/uSockets/libusockets.h @@ -87,6 +87,9 @@ struct us_socket_context_options_t { int ssl_prefer_low_memory_usage; /* Todo: rename to prefer_low_memory_usage and apply for TCP as well */ }; +/* Return 15-bit timestamp for this context */ +WIN32_EXPORT unsigned short us_socket_context_timestamp(int ssl, struct us_socket_context_t *context); + /* Adds SNI domain and cert in asn1 format */ WIN32_EXPORT void us_socket_context_add_server_name(int ssl, struct us_socket_context_t *context, const char *hostname_pattern, struct us_socket_context_options_t options); WIN32_EXPORT void us_socket_context_remove_server_name(int ssl, struct us_socket_context_t *context, const char *hostname_pattern); @@ -113,6 +116,9 @@ WIN32_EXPORT void us_socket_context_on_writable(int ssl, struct us_socket_contex struct us_socket_t *(*on_writable)(struct us_socket_t *s)); WIN32_EXPORT void us_socket_context_on_timeout(int ssl, struct us_socket_context_t *context, struct us_socket_t *(*on_timeout)(struct us_socket_t *s)); +/* This one is only used for when a connecting socket fails in a late stage. */ +WIN32_EXPORT void us_socket_context_on_connect_error(int ssl, struct us_socket_context_t *context, + struct us_socket_t *(*on_connect_error)(struct us_socket_t *s, int code)); /* Emitted when a socket has been half-closed */ WIN32_EXPORT void us_socket_context_on_end(int ssl, struct us_socket_context_t *context, struct us_socket_t *(*on_end)(struct us_socket_t *s)); @@ -127,10 +133,19 @@ WIN32_EXPORT struct us_listen_socket_t *us_socket_context_listen(int ssl, struct /* listen_socket.c/.h */ WIN32_EXPORT void us_listen_socket_close(int ssl, struct us_listen_socket_t *ls); -/* Land in on_open or on_close or return null or return socket */ +/* Land in on_open or on_connection_error or return null or return socket */ WIN32_EXPORT struct us_socket_t *us_socket_context_connect(int ssl, struct us_socket_context_t *context, const char *host, int port, const char *source_host, int options, int socket_ext_size); +/* Is this socket established? Can be used to check if a connecting socket has fired the on_open event yet. + * Can also be used to determine if a socket is a listen_socket or not, but you probably know that already. */ +WIN32_EXPORT int us_socket_is_established(int ssl, struct us_socket_t *s); + +/* Cancel a connecting socket. Can be used together with us_socket_timeout to limit connection times. + * Entirely destroys the socket - this function works like us_socket_close but does not trigger on_close event since + * you never got the on_open event first. */ +WIN32_EXPORT struct us_socket_t *us_socket_close_connecting(int ssl, struct us_socket_t *s); + /* Returns the loop for this socket context. */ WIN32_EXPORT struct us_loop_t *us_socket_context_loop(int ssl, struct us_socket_context_t *context); @@ -222,6 +237,11 @@ WIN32_EXPORT void us_socket_flush(int ssl, struct us_socket_t *s); /* Shuts down the connection by sending FIN and/or close_notify */ WIN32_EXPORT void us_socket_shutdown(int ssl, struct us_socket_t *s); +/* Shuts down the connection in terms of read, meaning next event loop + * iteration will catch the socket being closed. Can be used to defer closing + * to next event loop iteration. */ +WIN32_EXPORT void us_socket_shutdown_read(int ssl, struct us_socket_t *s); + /* Returns whether the socket has been shut down or not */ WIN32_EXPORT int us_socket_is_shut_down(int ssl, struct us_socket_t *s); @@ -231,6 +251,9 @@ WIN32_EXPORT int us_socket_is_closed(int ssl, struct us_socket_t *s); /* Immediately closes the socket */ WIN32_EXPORT struct us_socket_t *us_socket_close(int ssl, struct us_socket_t *s, int code, void *reason); +/* Returns local port or -1 on failure. */ +WIN32_EXPORT int us_socket_local_port(int ssl, struct us_socket_t *s); + /* Copy remote (IP) address of socket, or fail with zero length. */ WIN32_EXPORT void us_socket_remote_address(int ssl, struct us_socket_t *s, char *buf, int *length); diff --git a/nerd_modules/http/httplib/uSockets/loop.c b/nerd_modules/http/httplib/uSockets/loop.c new file mode 100644 index 000000000..ae34fa849 --- /dev/null +++ b/nerd_modules/http/httplib/uSockets/loop.c @@ -0,0 +1,303 @@ +/* + * Authored by Alex Hultman, 2018-2021. + * Intellectual property of third-party. + + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + + * http://www.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "libusockets.h" +#include "internal/internal.h" +#include + +/* The loop has 2 fallthrough polls */ +void us_internal_loop_data_init(struct us_loop_t *loop, void (*wakeup_cb)(struct us_loop_t *loop), + void (*pre_cb)(struct us_loop_t *loop), void (*post_cb)(struct us_loop_t *loop)) { + loop->data.sweep_timer = us_create_timer(loop, 1, 0); + loop->data.recv_buf = malloc(LIBUS_RECV_BUFFER_LENGTH + LIBUS_RECV_BUFFER_PADDING * 2); + loop->data.ssl_data = 0; + loop->data.head = 0; + loop->data.iterator = 0; + loop->data.closed_head = 0; + + loop->data.pre_cb = pre_cb; + loop->data.post_cb = post_cb; + loop->data.iteration_nr = 0; + + loop->data.wakeup_async = us_internal_create_async(loop, 1, 0); + us_internal_async_set(loop->data.wakeup_async, (void (*)(struct us_internal_async *)) wakeup_cb); +} + +void us_internal_loop_data_free(struct us_loop_t *loop) { +#ifndef LIBUS_NO_SSL + us_internal_free_loop_ssl_data(loop); +#endif + + free(loop->data.recv_buf); + + us_timer_close(loop->data.sweep_timer); + us_internal_async_close(loop->data.wakeup_async); +} + +void us_wakeup_loop(struct us_loop_t *loop) { + us_internal_async_wakeup(loop->data.wakeup_async); +} + +void us_internal_loop_link(struct us_loop_t *loop, struct us_socket_context_t *context) { + /* Insert this context as the head of loop */ + context->next = loop->data.head; + context->prev = 0; + if (loop->data.head) { + loop->data.head->prev = context; + } + loop->data.head = context; +} + +/* Unlink is called before free */ +void us_internal_loop_unlink(struct us_loop_t *loop, struct us_socket_context_t *context) { + if (loop->data.head == context) { + loop->data.head = context->next; + if (loop->data.head) { + loop->data.head->prev = 0; + } + } else { + context->prev->next = context->next; + if (context->next) { + context->next->prev = context->prev; + } + } +} + +/* This functions should never run recursively */ +void us_internal_timer_sweep(struct us_loop_t *loop) { + struct us_internal_loop_data_t *loop_data = &loop->data; + /* For all socket contexts in this loop */ + for (loop_data->iterator = loop_data->head; loop_data->iterator; loop_data->iterator = loop_data->iterator->next) { + + struct us_socket_context_t *context = loop_data->iterator; + + /* Update this context's 15-bit timestamp */ + context->timestamp = (context->timestamp + 1) & 0x7fff; + + /* Update our 16-bit full timestamp (the needle in the haystack) */ + unsigned short needle = 0x8000 | context->timestamp; + + /* Begin at head */ + struct us_socket_t *s = context->head; + while (s) { + /* Seek until end or timeout found (tightest loop) */ + while (1) { + /* We only read from 1 random cache line here */ + if (needle == s->timeout) { + break; + } + + /* Did we reach the end without a find? */ + if ((s = s->next) == 0) { + goto next_context; + } + } + + /* Here we have a timeout to emit (slow path) */ + s->timeout = 0; + context->iterator = s; + + context->on_socket_timeout(s); + + /* Check for unlink / link (if the event handler did not modify the chain, we step 1) */ + if (s == context->iterator) { + s = s->next; + } else { + /* The iterator was changed by event handler */ + s = context->iterator; + } + } + /* We always store a 0 to context->iterator here since we are no longer iterating this context */ + next_context: + context->iterator = 0; + } +} + +/* Note: Properly takes the linked list and timeout sweep into account */ +void us_internal_free_closed_sockets(struct us_loop_t *loop) { + /* Free all closed sockets (maybe it is better to reverse order?) */ + if (loop->data.closed_head) { + for (struct us_socket_t *s = loop->data.closed_head; s; ) { + struct us_socket_t *next = s->next; + us_poll_free((struct us_poll_t *) s, loop); + s = next; + } + loop->data.closed_head = 0; + } +} + +void sweep_timer_cb(struct us_internal_callback_t *cb) { + us_internal_timer_sweep(cb->loop); +} + +long long us_loop_iteration_number(struct us_loop_t *loop) { + return loop->data.iteration_nr; +} + +/* These may have somewhat different meaning depending on the underlying event library */ +void us_internal_loop_pre(struct us_loop_t *loop) { + loop->data.iteration_nr++; + loop->data.pre_cb(loop); +} + +void us_internal_loop_post(struct us_loop_t *loop) { + us_internal_free_closed_sockets(loop); + loop->data.post_cb(loop); +} + +void us_internal_dispatch_ready_poll(struct us_poll_t *p, int error, int events) { + switch (us_internal_poll_type(p)) { + case POLL_TYPE_CALLBACK: { + /* Let's just do this to clear the CodeQL alert */ + #ifndef LIBUS_USE_LIBUV + us_internal_accept_poll_event(p); + #endif + struct us_internal_callback_t *cb = (struct us_internal_callback_t *) p; + cb->cb(cb->cb_expects_the_loop ? (struct us_internal_callback_t *) cb->loop : (struct us_internal_callback_t *) &cb->p); + } + break; + case POLL_TYPE_SEMI_SOCKET: { + /* Both connect and listen sockets are semi-sockets + * but they poll for different events */ + if (us_poll_events(p) == LIBUS_SOCKET_WRITABLE) { + struct us_socket_t *s = (struct us_socket_t *) p; + + /* It is perfectly possible to come here with an error */ + if (error) { + /* Emit error, close without emitting on_close */ + s->context->on_connect_error(s, 0); + us_socket_close_connecting(0, s); + } else { + /* All sockets poll for readable */ + us_poll_change(p, s->context->loop, LIBUS_SOCKET_READABLE); + + /* We always use nodelay */ + bsd_socket_nodelay(us_poll_fd(p), 1); + + /* We are now a proper socket */ + us_internal_poll_set_type(p, POLL_TYPE_SOCKET); + + /* If we used a connection timeout we have to reset it here */ + us_socket_timeout(0, s, 0); + + s->context->on_open(s, 1, 0, 0); + } + } else { + struct us_listen_socket_t *listen_socket = (struct us_listen_socket_t *) p; + struct bsd_addr_t addr; + + LIBUS_SOCKET_DESCRIPTOR client_fd = bsd_accept_socket(us_poll_fd(p), &addr); + if (client_fd == LIBUS_SOCKET_ERROR) { + /* Todo: start timer here */ + + } else { + + /* Todo: stop timer if any */ + + do { + struct us_poll_t *accepted_p = us_create_poll(us_socket_context(0, &listen_socket->s)->loop, 0, sizeof(struct us_socket_t) - sizeof(struct us_poll_t) + listen_socket->socket_ext_size); + us_poll_init(accepted_p, client_fd, POLL_TYPE_SOCKET); + us_poll_start(accepted_p, listen_socket->s.context->loop, LIBUS_SOCKET_READABLE); + + struct us_socket_t *s = (struct us_socket_t *) accepted_p; + + s->context = listen_socket->s.context; + + /* We always use nodelay */ + bsd_socket_nodelay(client_fd, 1); + + us_internal_socket_context_link(listen_socket->s.context, s); + + listen_socket->s.context->on_open(s, 0, bsd_addr_get_ip(&addr), bsd_addr_get_ip_length(&addr)); + + /* Exit accept loop if listen socket was closed in on_open handler */ + if (us_socket_is_closed(0, &listen_socket->s)) { + break; + } + + } while ((client_fd = bsd_accept_socket(us_poll_fd(p), &addr)) != LIBUS_SOCKET_ERROR); + } + } + } + break; + case POLL_TYPE_SOCKET_SHUT_DOWN: + case POLL_TYPE_SOCKET: { + /* We should only use s, no p after this point */ + struct us_socket_t *s = (struct us_socket_t *) p; + + /* Such as epollerr epollhup */ + if (error) { + /* Todo: decide what code we give here */ + s = us_socket_close(0, s, 0, NULL); + return; + } + + if (events & LIBUS_SOCKET_WRITABLE) { + /* Note: if we failed a write as a socket of one loop then adopted + * to another loop, this will be wrong. Absurd case though */ + s->context->loop->data.last_write_failed = 0; + + s = s->context->on_writable(s); + + if (us_socket_is_closed(0, s)) { + return; + } + + /* If we have no failed write or if we shut down, then stop polling for more writable */ + if (!s->context->loop->data.last_write_failed || us_socket_is_shut_down(0, s)) { + us_poll_change(&s->p, us_socket_context(0, s)->loop, us_poll_events(&s->p) & LIBUS_SOCKET_READABLE); + } + } + + if (events & LIBUS_SOCKET_READABLE) { + /* Contexts may ignore data and postpone it to next iteration, for balancing purposes such as + * when SSL handshakes take too long to finish and we only want a few of them per iteration */ + if (s->context->ignore_data(s)) { + break; + } + + int length = bsd_recv(us_poll_fd(&s->p), s->context->loop->data.recv_buf + LIBUS_RECV_BUFFER_PADDING, LIBUS_RECV_BUFFER_LENGTH, 0); + if (length > 0) { + s = s->context->on_data(s, s->context->loop->data.recv_buf + LIBUS_RECV_BUFFER_PADDING, length); + } else if (!length) { + if (us_socket_is_shut_down(0, s)) { + /* We got FIN back after sending it */ + /* Todo: We should give "CLEAN SHUTDOWN" as reason here */ + s = us_socket_close(0, s, 0, NULL); + } else { + /* We got FIN, so stop polling for readable */ + us_poll_change(&s->p, us_socket_context(0, s)->loop, us_poll_events(&s->p) & LIBUS_SOCKET_WRITABLE); + s = s->context->on_end(s); + } + } else if (length == LIBUS_SOCKET_ERROR && !bsd_would_block()) { + /* Todo: decide also here what kind of reason we should give */ + s = us_socket_close(0, s, 0, NULL); + } + } + } + break; + } +} + +/* Integration only requires the timer to be set up */ +void us_loop_integrate(struct us_loop_t *loop) { + us_timer_set(loop->data.sweep_timer, (void (*)(struct us_timer_t *)) sweep_timer_cb, LIBUS_TIMEOUT_GRANULARITY * 1000, LIBUS_TIMEOUT_GRANULARITY * 1000); +} + +void *us_loop_ext(struct us_loop_t *loop) { + return loop + 1; +} diff --git a/nerd_modules/http/httplib/uSockets/socket.c b/nerd_modules/http/httplib/uSockets/socket.c new file mode 100644 index 000000000..683be7c61 --- /dev/null +++ b/nerd_modules/http/httplib/uSockets/socket.c @@ -0,0 +1,182 @@ +/* + * Authored by Alex Hultman, 2018-2021. + * Intellectual property of third-party. + + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + + * http://www.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "libusockets.h" +#include "internal/internal.h" +#include +#include + +/* Shared with SSL */ + +int us_socket_local_port(int ssl, struct us_socket_t *s) { + struct bsd_addr_t addr; + if (bsd_local_addr(us_poll_fd(&s->p), &addr)) { + return -1; + } else { + return bsd_addr_get_port(&addr); + } +} + +void us_socket_shutdown_read(int ssl, struct us_socket_t *s) { + /* This syscall is idempotent so no extra check is needed */ + bsd_shutdown_socket_read(us_poll_fd((struct us_poll_t *) s)); +} + +void us_socket_remote_address(int ssl, struct us_socket_t *s, char *buf, int *length) { + struct bsd_addr_t addr; + if (bsd_remote_addr(us_poll_fd(&s->p), &addr) || *length < bsd_addr_get_ip_length(&addr)) { + *length = 0; + } else { + *length = bsd_addr_get_ip_length(&addr); + memcpy(buf, bsd_addr_get_ip(&addr), *length); + } +} + +struct us_socket_context_t *us_socket_context(int ssl, struct us_socket_t *s) { + return s->context; +} + +void us_socket_timeout(int ssl, struct us_socket_t *s, unsigned int seconds) { + if (seconds) { + s->timeout = 0x8000 | (s->context->timestamp + (seconds >> 2)); + } else { + s->timeout = 0; + } +} + +void us_socket_flush(int ssl, struct us_socket_t *s) { + if (!us_socket_is_shut_down(0, s)) { + bsd_socket_flush(us_poll_fd((struct us_poll_t *) s)); + } +} + +int us_socket_is_closed(int ssl, struct us_socket_t *s) { + return s->prev == (struct us_socket_t *) s->context; +} + +int us_socket_is_established(int ssl, struct us_socket_t *s) { + /* Everything that is not POLL_TYPE_SEMI_SOCKET is established */ + return us_internal_poll_type((struct us_poll_t *) s) != POLL_TYPE_SEMI_SOCKET; +} + +/* Exactly the same as us_socket_close but does not emit on_close event */ +struct us_socket_t *us_socket_close_connecting(int ssl, struct us_socket_t *s) { + if (!us_socket_is_closed(0, s)) { + us_internal_socket_context_unlink(s->context, s); + us_poll_stop((struct us_poll_t *) s, s->context->loop); + bsd_close_socket(us_poll_fd((struct us_poll_t *) s)); + + /* Link this socket to the close-list and let it be deleted after this iteration */ + s->next = s->context->loop->data.closed_head; + s->context->loop->data.closed_head = s; + + /* Any socket with prev = context is marked as closed */ + s->prev = (struct us_socket_t *) s->context; + + //return s->context->on_close(s, code, reason); + } + return s; +} + +/* Same as above but emits on_close */ +struct us_socket_t *us_socket_close(int ssl, struct us_socket_t *s, int code, void *reason) { + if (!us_socket_is_closed(0, s)) { + us_internal_socket_context_unlink(s->context, s); + us_poll_stop((struct us_poll_t *) s, s->context->loop); + bsd_close_socket(us_poll_fd((struct us_poll_t *) s)); + + /* Link this socket to the close-list and let it be deleted after this iteration */ + s->next = s->context->loop->data.closed_head; + s->context->loop->data.closed_head = s; + + /* Any socket with prev = context is marked as closed */ + s->prev = (struct us_socket_t *) s->context; + + return s->context->on_close(s, code, reason); + } + return s; +} + +/* Not shared with SSL */ + +void *us_socket_get_native_handle(int ssl, struct us_socket_t *s) { +#ifndef LIBUS_NO_SSL + if (ssl) { + return us_internal_ssl_socket_get_native_handle((struct us_internal_ssl_socket_t *) s); + } +#endif + + return (void *) (uintptr_t) us_poll_fd((struct us_poll_t *) s); +} + +int us_socket_write(int ssl, struct us_socket_t *s, const char *data, int length, int msg_more) { +#ifndef LIBUS_NO_SSL + if (ssl) { + return us_internal_ssl_socket_write((struct us_internal_ssl_socket_t *) s, data, length, msg_more); + } +#endif + + if (us_socket_is_closed(ssl, s) || us_socket_is_shut_down(ssl, s)) { + return 0; + } + + int written = bsd_send(us_poll_fd(&s->p), data, length, msg_more); + if (written != length) { + s->context->loop->data.last_write_failed = 1; + us_poll_change(&s->p, s->context->loop, LIBUS_SOCKET_READABLE | LIBUS_SOCKET_WRITABLE); + } + + return written < 0 ? 0 : written; +} + +void *us_socket_ext(int ssl, struct us_socket_t *s) { +#ifndef LIBUS_NO_SSL + if (ssl) { + return us_internal_ssl_socket_ext((struct us_internal_ssl_socket_t *) s); + } +#endif + + return s + 1; +} + +int us_socket_is_shut_down(int ssl, struct us_socket_t *s) { +#ifndef LIBUS_NO_SSL + if (ssl) { + return us_internal_ssl_socket_is_shut_down((struct us_internal_ssl_socket_t *) s); + } +#endif + + return us_internal_poll_type(&s->p) == POLL_TYPE_SOCKET_SHUT_DOWN; +} + +void us_socket_shutdown(int ssl, struct us_socket_t *s) { +#ifndef LIBUS_NO_SSL + if (ssl) { + us_internal_ssl_socket_shutdown((struct us_internal_ssl_socket_t *) s); + return; + } +#endif + + /* Todo: should we emit on_close if calling shutdown on an already half-closed socket? + * We need more states in that case, we need to track RECEIVED_FIN + * so far, the app has to track this and call close as needed */ + if (!us_socket_is_closed(ssl, s) && !us_socket_is_shut_down(ssl, s)) { + us_internal_poll_set_type(&s->p, POLL_TYPE_SOCKET_SHUT_DOWN); + us_poll_change(&s->p, s->context->loop, us_poll_events(&s->p) & LIBUS_SOCKET_READABLE); + bsd_shutdown_socket(us_poll_fd((struct us_poll_t *) s)); + } +} diff --git a/nerd_modules/http/httplib/uWS/App.h b/nerd_modules/http/httplib/uWS/App.h new file mode 100644 index 000000000..aa1f0a581 --- /dev/null +++ b/nerd_modules/http/httplib/uWS/App.h @@ -0,0 +1,404 @@ +/* + * Authored by Alex Hultman, 2018-2020. + * Intellectual property of third-party. + + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + + * http://www.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef UWS_APP_H +#define UWS_APP_H + +/* An app is a convenience wrapper of some of the most used fuctionalities and allows a + * builder-pattern kind of init. Apps operate on the implicit thread local Loop */ + +#include "HttpContext.h" +#include "HttpResponse.h" +#include "WebSocketContext.h" +#include "WebSocket.h" +#include "PerMessageDeflate.h" + +namespace uWS { + + /* This one matches us_socket_context_options_t but has default values */ + struct SocketContextOptions { + const char *key_file_name = nullptr; + const char *cert_file_name = nullptr; + const char *passphrase = nullptr; + const char *dh_params_file_name = nullptr; + const char *ca_file_name = nullptr; + int ssl_prefer_low_memory_usage = 0; + + /* Conversion operator used internally */ + operator struct us_socket_context_options_t() const { + struct us_socket_context_options_t socket_context_options; + memcpy(&socket_context_options, this, sizeof(SocketContextOptions)); + return socket_context_options; + } + }; + + static_assert(sizeof(struct us_socket_context_options_t) == sizeof(SocketContextOptions), "Mismatching uSockets/uWebSockets ABI"); + +template +struct TemplatedApp { +private: + /* The app always owns at least one http context, but creates websocket contexts on demand */ + HttpContext *httpContext; + std::vector *> webSocketContexts; + +public: + + /* Server name */ + TemplatedApp &&addServerName(std::string hostname_pattern, SocketContextOptions options = {}) { + + us_socket_context_add_server_name(SSL, (struct us_socket_context_t *) httpContext, hostname_pattern.c_str(), options); + return std::move(*this); + } + + TemplatedApp &&removeServerName(std::string hostname_pattern) { + + us_socket_context_remove_server_name(SSL, (struct us_socket_context_t *) httpContext, hostname_pattern.c_str()); + return std::move(*this); + } + + TemplatedApp &&missingServerName(MoveOnlyFunction handler) { + + if (!constructorFailed()) { + httpContext->getSocketContextData()->missingServerNameHandler = std::move(handler); + + us_socket_context_on_server_name(SSL, (struct us_socket_context_t *) httpContext, [](struct us_socket_context_t *context, const char *hostname) { + + /* This is the only requirements of being friends with HttpContextData */ + HttpContext *httpContext = (HttpContext *) context; + httpContext->getSocketContextData()->missingServerNameHandler(hostname); + }); + } + + return std::move(*this); + } + + /* Returns the SSL_CTX of this app, or nullptr. */ + void *getNativeHandle() { + return us_socket_context_get_native_handle(SSL, (struct us_socket_context_t *) httpContext); + } + + /* Attaches a "filter" function to track socket connections/disconnections */ + void filter(MoveOnlyFunction *, int)> &&filterHandler) { + httpContext->filter(std::move(filterHandler)); + } + + /* Publishes a message to all websocket contexts - conceptually as if publishing to the one single + * TopicTree of this app (technically there are many TopicTrees, however the concept is that one + * app has one conceptual Topic tree) */ + void publish(std::string_view topic, std::string_view message, OpCode opCode, bool compress = false) { + for (auto *webSocketContext : webSocketContexts) { + webSocketContext->getExt()->publish(topic, message, opCode, compress); + } + } + + /* Returns number of subscribers for this topic, or 0 for failure. + * This function should probably be optimized a lot in future releases, + * it could be O(1) with a hash map of fullnames and their counts. */ + unsigned int numSubscribers(std::string_view topic) { + unsigned int subscribers = 0; + + for (auto *webSocketContext : webSocketContexts) { + auto *webSocketContextData = webSocketContext->getExt(); + + Topic *t = webSocketContextData->topicTree.lookupTopic(topic); + if (t) { + subscribers += t->subs.size(); + } + } + + return subscribers; + } + + ~TemplatedApp() { + /* Let's just put everything here */ + if (httpContext) { + httpContext->free(); + + for (auto *webSocketContext : webSocketContexts) { + webSocketContext->free(); + } + } + } + + /* Disallow copying, only move */ + TemplatedApp(const TemplatedApp &other) = delete; + + TemplatedApp(TemplatedApp &&other) { + /* Move HttpContext */ + httpContext = other.httpContext; + other.httpContext = nullptr; + + /* Move webSocketContexts */ + webSocketContexts = std::move(other.webSocketContexts); + } + + TemplatedApp(SocketContextOptions options = {}) { + httpContext = HttpContext::create(Loop::get(), options); + } + + bool constructorFailed() { + return !httpContext; + } + + template + struct WebSocketBehavior { + /* Disabled compression by default - probably a bad default */ + CompressOptions compression = DISABLED; + /* Maximum message size we can receive */ + unsigned int maxPayloadLength = 16 * 1024; + /* 2 minutes timeout is good */ + unsigned short idleTimeout = 120; + /* 64kb backpressure is probably good */ + unsigned int maxBackpressure = 64 * 1024; + bool closeOnBackpressureLimit = false; + /* This one depends on kernel timeouts and is a bad default */ + bool resetIdleTimeoutOnSend = false; + /* A good default, esp. for newcomers */ + bool sendPingsAutomatically = true; + /* Maximum socket lifetime in seconds before forced closure (defaults to disabled) */ + unsigned short maxLifetime = 0; + MoveOnlyFunction *, HttpRequest *, struct us_socket_context_t *)> upgrade = nullptr; + MoveOnlyFunction *)> open = nullptr; + MoveOnlyFunction *, std::string_view, OpCode)> message = nullptr; + MoveOnlyFunction *)> drain = nullptr; + MoveOnlyFunction *, std::string_view)> ping = nullptr; + MoveOnlyFunction *, std::string_view)> pong = nullptr; + MoveOnlyFunction *, int, std::string_view)> close = nullptr; + }; + + template + TemplatedApp &&ws(std::string pattern, WebSocketBehavior &&behavior) { + /* Don't compile if alignment rules cannot be satisfied */ + static_assert(alignof(UserData) <= LIBUS_EXT_ALIGNMENT, + "µWebSockets cannot satisfy UserData alignment requirements. You need to recompile µSockets with LIBUS_EXT_ALIGNMENT adjusted accordingly."); + + if (!httpContext) { + return std::move(*this); + } + + /* Terminate on misleading idleTimeout values */ + if (behavior.idleTimeout && behavior.idleTimeout < 8) { + std::cerr << "Error: idleTimeout must be either 0 or greater than 8!" << std::endl; + std::terminate(); + } + + if (behavior.idleTimeout % 4) { + std::cerr << "Warning: idleTimeout should be a multiple of 4!" << std::endl; + } + + /* Every route has its own websocket context with its own behavior and user data type */ + auto *webSocketContext = WebSocketContext::create(Loop::get(), (us_socket_context_t *) httpContext); + + /* Add all other WebSocketContextData to this new WebSocketContextData */ + for (WebSocketContext *adjacentWebSocketContext : webSocketContexts) { + webSocketContext->getExt()->adjacentWebSocketContextDatas.push_back(adjacentWebSocketContext->getExt()); + } + + /* Add this WebSocketContextData to all other WebSocketContextData */ + for (WebSocketContext *adjacentWebSocketContext : webSocketContexts) { + adjacentWebSocketContext->getExt()->adjacentWebSocketContextDatas.push_back((WebSocketContextData *) webSocketContext->getExt()); + } + + /* We need to clear this later on */ + webSocketContexts.push_back((WebSocketContext *) webSocketContext); + + /* Quick fix to disable any compression if set */ +#ifdef UWS_NO_ZLIB + behavior.compression = DISABLED; +#endif + + /* If we are the first one to use compression, initialize it */ + if (behavior.compression) { + LoopData *loopData = (LoopData *) us_loop_ext(us_socket_context_loop(SSL, webSocketContext->getSocketContext())); + + /* Initialize loop's deflate inflate streams */ + if (!loopData->zlibContext) { + loopData->zlibContext = new ZlibContext; + loopData->inflationStream = new InflationStream; + loopData->deflationStream = new DeflationStream(CompressOptions::DEDICATED_COMPRESSOR); + } + } + + /* Copy all handlers */ + webSocketContext->getExt()->openHandler = std::move(behavior.open); + webSocketContext->getExt()->messageHandler = std::move(behavior.message); + webSocketContext->getExt()->drainHandler = std::move(behavior.drain); + webSocketContext->getExt()->closeHandler = std::move([closeHandler = std::move(behavior.close)](WebSocket *ws, int code, std::string_view message) mutable { + if (closeHandler) { + closeHandler(ws, code, message); + } + + /* Destruct user data after returning from close handler */ + ((UserData *) ws->getUserData())->~UserData(); + }); + webSocketContext->getExt()->pingHandler = std::move(behavior.ping); + webSocketContext->getExt()->pongHandler = std::move(behavior.pong); + + /* Copy settings */ + webSocketContext->getExt()->maxPayloadLength = behavior.maxPayloadLength; + webSocketContext->getExt()->maxBackpressure = behavior.maxBackpressure; + webSocketContext->getExt()->closeOnBackpressureLimit = behavior.closeOnBackpressureLimit; + webSocketContext->getExt()->resetIdleTimeoutOnSend = behavior.resetIdleTimeoutOnSend; + webSocketContext->getExt()->sendPingsAutomatically = behavior.sendPingsAutomatically; + webSocketContext->getExt()->compression = behavior.compression; + + /* Calculate idleTimeoutCompnents */ + webSocketContext->getExt()->calculateIdleTimeoutCompnents(behavior.idleTimeout); + + httpContext->onHttp("get", pattern, [webSocketContext, behavior = std::move(behavior)](auto *res, auto *req) mutable { + + /* If we have this header set, it's a websocket */ + std::string_view secWebSocketKey = req->getHeader("sec-websocket-key"); + if (secWebSocketKey.length() == 24) { + + /* Emit upgrade handler */ + if (behavior.upgrade) { + behavior.upgrade(res, req, (struct us_socket_context_t *) webSocketContext); + } else { + /* Default handler upgrades to WebSocket */ + std::string_view secWebSocketProtocol = req->getHeader("sec-websocket-protocol"); + std::string_view secWebSocketExtensions = req->getHeader("sec-websocket-extensions"); + + res->template upgrade({}, secWebSocketKey, secWebSocketProtocol, secWebSocketExtensions, (struct us_socket_context_t *) webSocketContext); + } + + /* We are going to get uncorked by the Http get return */ + + /* We do not need to check for any close or shutdown here as we immediately return from get handler */ + + } else { + /* Tell the router that we did not handle this request */ + req->setYield(true); + } + }, true); + return std::move(*this); + } + + TemplatedApp &&get(std::string pattern, MoveOnlyFunction *, HttpRequest *)> &&handler) { + if (httpContext) { + httpContext->onHttp("get", pattern, std::move(handler)); + } + return std::move(*this); + } + + TemplatedApp &&post(std::string pattern, MoveOnlyFunction *, HttpRequest *)> &&handler) { + if (httpContext) { + httpContext->onHttp("post", pattern, std::move(handler)); + } + return std::move(*this); + } + + TemplatedApp &&options(std::string pattern, MoveOnlyFunction *, HttpRequest *)> &&handler) { + if (httpContext) { + httpContext->onHttp("options", pattern, std::move(handler)); + } + return std::move(*this); + } + + TemplatedApp &&del(std::string pattern, MoveOnlyFunction *, HttpRequest *)> &&handler) { + if (httpContext) { + httpContext->onHttp("delete", pattern, std::move(handler)); + } + return std::move(*this); + } + + TemplatedApp &&patch(std::string pattern, MoveOnlyFunction *, HttpRequest *)> &&handler) { + if (httpContext) { + httpContext->onHttp("patch", pattern, std::move(handler)); + } + return std::move(*this); + } + + TemplatedApp &&put(std::string pattern, MoveOnlyFunction *, HttpRequest *)> &&handler) { + if (httpContext) { + httpContext->onHttp("put", pattern, std::move(handler)); + } + return std::move(*this); + } + + TemplatedApp &&head(std::string pattern, MoveOnlyFunction *, HttpRequest *)> &&handler) { + if (httpContext) { + httpContext->onHttp("head", pattern, std::move(handler)); + } + return std::move(*this); + } + + TemplatedApp &&connect(std::string pattern, MoveOnlyFunction *, HttpRequest *)> &&handler) { + if (httpContext) { + httpContext->onHttp("connect", pattern, std::move(handler)); + } + return std::move(*this); + } + + TemplatedApp &&trace(std::string pattern, MoveOnlyFunction *, HttpRequest *)> &&handler) { + if (httpContext) { + httpContext->onHttp("trace", pattern, std::move(handler)); + } + return std::move(*this); + } + + /* This one catches any method */ + TemplatedApp &&any(std::string pattern, MoveOnlyFunction *, HttpRequest *)> &&handler) { + if (httpContext) { + httpContext->onHttp("*", pattern, std::move(handler)); + } + return std::move(*this); + } + + /* Host, port, callback */ + TemplatedApp &&listen(std::string host, int port, MoveOnlyFunction &&handler) { + if (!host.length()) { + return listen(port, std::move(handler)); + } + handler(httpContext ? httpContext->listen(host.c_str(), port, 0) : nullptr); + return std::move(*this); + } + + /* Host, port, options, callback */ + TemplatedApp &&listen(std::string host, int port, int options, MoveOnlyFunction &&handler) { + if (!host.length()) { + return listen(port, options, std::move(handler)); + } + handler(httpContext ? httpContext->listen(host.c_str(), port, options) : nullptr); + return std::move(*this); + } + + /* Port, callback */ + TemplatedApp &&listen(int port, MoveOnlyFunction &&handler) { + handler(httpContext ? httpContext->listen(nullptr, port, 0) : nullptr); + return std::move(*this); + } + + /* Port, options, callback */ + TemplatedApp &&listen(int port, int options, MoveOnlyFunction &&handler) { + handler(httpContext ? httpContext->listen(nullptr, port, options) : nullptr); + return std::move(*this); + } + + TemplatedApp &&run() { + uWS::run(); + return std::move(*this); + } + +}; + +typedef TemplatedApp App; +typedef TemplatedApp SSLApp; + +} + +#endif // UWS_APP_H diff --git a/nectar_modules/http/httplib/uWS/AsyncSocket.h b/nerd_modules/http/httplib/uWS/AsyncSocket.h similarity index 88% rename from nectar_modules/http/httplib/uWS/AsyncSocket.h rename to nerd_modules/http/httplib/uWS/AsyncSocket.h index 5052deb51..743f406f2 100644 --- a/nectar_modules/http/httplib/uWS/AsyncSocket.h +++ b/nerd_modules/http/httplib/uWS/AsyncSocket.h @@ -20,18 +20,22 @@ /* This class implements async socket memory management strategies */ +/* NOTE: Many unsigned/signed conversion warnings could be solved by moving from int length + * to unsigned length for everything to/from uSockets - this would however remove the opportunity + * to signal error with -1 (which is how the entire UNIX syscalling is built). */ + #include "LoopData.h" #include "AsyncSocketData.h" namespace uWS { - template struct WebSocketContext; + template struct WebSocketContext; template struct AsyncSocket { template friend struct HttpContext; - template friend struct WebSocketContext; - template friend struct WebSocketContextData; + template friend struct WebSocketContext; + template friend struct WebSocketContextData; friend struct TopicTree; protected: @@ -87,7 +91,7 @@ struct AsyncSocket { LoopData *loopData = getLoopData(); if (loopData->corkedSocket == this && loopData->corkOffset + size < LoopData::CORK_BUFFER_SIZE) { char *sendBuffer = loopData->corkBuffer + loopData->corkOffset; - loopData->corkOffset += (int) size; + loopData->corkOffset += (unsigned int) size; return {sendBuffer, false}; } else { /* Slow path for now, we want to always be corked if possible */ @@ -127,7 +131,7 @@ struct AsyncSocket { static thread_local char buf[16]; int ipLength = 16; us_socket_remote_address(SSL, (us_socket_t *) this, buf, &ipLength); - return std::string_view(buf, ipLength); + return std::string_view(buf, (unsigned int) ipLength); } /* Returns the text representation of IP */ @@ -156,14 +160,14 @@ struct AsyncSocket { if ((unsigned int) written < asyncSocketData->buffer.length()) { /* Update buffering (todo: we can do better here if we keep track of what happens to this guy later on) */ - asyncSocketData->buffer = asyncSocketData->buffer.substr(written); + asyncSocketData->buffer = asyncSocketData->buffer.substr((size_t) written); if (optionally) { /* Thankfully we can exit early here */ return {0, true}; } else { /* This path is horrible and points towards erroneous usage */ - asyncSocketData->buffer.append(src, length); + asyncSocketData->buffer.append(src, (unsigned int) length); return {length, true}; } @@ -176,21 +180,21 @@ struct AsyncSocket { if (length) { if (loopData->corkedSocket == this) { /* We are corked */ - if (LoopData::CORK_BUFFER_SIZE - loopData->corkOffset >= length) { + if (LoopData::CORK_BUFFER_SIZE - loopData->corkOffset >= (unsigned int) length) { /* If the entire chunk fits in cork buffer */ - memcpy(loopData->corkBuffer + loopData->corkOffset, src, length); - loopData->corkOffset += length; + memcpy(loopData->corkBuffer + loopData->corkOffset, src, (unsigned int) length); + loopData->corkOffset += (unsigned int) length; /* Fall through to default return */ } else { /* Strategy differences between SSL and non-SSL regarding syscall minimizing */ if constexpr (SSL) { /* Cork up as much as we can */ - int stripped = LoopData::CORK_BUFFER_SIZE - loopData->corkOffset; + unsigned int stripped = LoopData::CORK_BUFFER_SIZE - loopData->corkOffset; memcpy(loopData->corkBuffer + loopData->corkOffset, src, stripped); loopData->corkOffset = LoopData::CORK_BUFFER_SIZE; - auto [written, failed] = uncork(src + stripped, length - stripped, optionally); - return {written + stripped, failed}; + auto [written, failed] = uncork(src + stripped, length - (int) stripped, optionally); + return {written + (int) stripped, failed}; } /* For non-SSL we take the penalty of two syscalls */ @@ -210,11 +214,11 @@ struct AsyncSocket { /* Fall back to worst possible case (should be very rare for HTTP) */ /* At least we can reserve room for next chunk if we know it up front */ if (nextLength) { - asyncSocketData->buffer.reserve(asyncSocketData->buffer.length() + length - written + nextLength); + asyncSocketData->buffer.reserve(asyncSocketData->buffer.length() + (size_t) (length - written + nextLength)); } /* Buffer this chunk */ - asyncSocketData->buffer.append(src + written, length - written); + asyncSocketData->buffer.append(src + written, (size_t) (length - written)); /* Return the failure */ return {length, true}; @@ -237,7 +241,7 @@ struct AsyncSocket { if (loopData->corkOffset) { /* Corked data is already accounted for via its write call */ - auto [written, failed] = write(loopData->corkBuffer, loopData->corkOffset, false, length); + auto [written, failed] = write(loopData->corkBuffer, (int) loopData->corkOffset, false, length); loopData->corkOffset = 0; if (failed) { diff --git a/nectar_modules/http/httplib/uWS/AsyncSocketData.h b/nerd_modules/http/httplib/uWS/AsyncSocketData.h similarity index 100% rename from nectar_modules/http/httplib/uWS/AsyncSocketData.h rename to nerd_modules/http/httplib/uWS/AsyncSocketData.h diff --git a/nectar_modules/http/httplib/uWS/BloomFilter.h b/nerd_modules/http/httplib/uWS/BloomFilter.h similarity index 91% rename from nectar_modules/http/httplib/uWS/BloomFilter.h rename to nerd_modules/http/httplib/uWS/BloomFilter.h index 2547fd676..95ced77d7 100644 --- a/nectar_modules/http/httplib/uWS/BloomFilter.h +++ b/nerd_modules/http/httplib/uWS/BloomFilter.h @@ -31,11 +31,11 @@ struct BloomFilter { std::bitset<512> filter; unsigned int hash1(std::string_view key) { - return ((unsigned int)key[key.length() - 1] - (key.length() << 3)) & 511; + return ((size_t)key[key.length() - 1] - (key.length() << 3)) & 511; } unsigned int hash2(std::string_view key) { - return (((unsigned int)key[0] + (key.length() << 4)) & 511); + return (((size_t)key[0] + (key.length() << 4)) & 511); } unsigned int hash3(std::string_view key) { diff --git a/nectar_modules/http/httplib/uWS/HttpContext.h b/nerd_modules/http/httplib/uWS/HttpContext.h similarity index 88% rename from nectar_modules/http/httplib/uWS/HttpContext.h rename to nerd_modules/http/httplib/uWS/HttpContext.h index 07c6921a4..70a74e1e1 100644 --- a/nectar_modules/http/httplib/uWS/HttpContext.h +++ b/nerd_modules/http/httplib/uWS/HttpContext.h @@ -28,7 +28,7 @@ #include #include -#include "f2/function2.hpp" +#include "MoveOnlyFunction.h" namespace uWS { template struct HttpResponse; @@ -62,7 +62,7 @@ struct HttpContext { /* Init the HttpContext by registering libusockets event handlers */ HttpContext *init() { /* Handle socket connections */ - us_socket_context_on_open(SSL, getSocketContext(), [](us_socket_t *s, int is_client, char *ip, int ip_length) { + us_socket_context_on_open(SSL, getSocketContext(), [](us_socket_t *s, int /*is_client*/, char */*ip*/, int /*ip_length*/) { /* Any connected socket should timeout until it has a request */ us_socket_timeout(SSL, s, HTTP_IDLE_TIMEOUT_S); @@ -79,7 +79,7 @@ struct HttpContext { }); /* Handle socket disconnections */ - us_socket_context_on_close(SSL, getSocketContext(), [](us_socket_t *s, int code, void *reason) { + us_socket_context_on_close(SSL, getSocketContext(), [](us_socket_t *s, int /*code*/, void */*reason*/) { /* Get socket ext */ HttpResponseData *httpResponseData = (HttpResponseData *) us_socket_ext(SSL, s); @@ -133,7 +133,7 @@ struct HttpContext { #endif /* The return value is entirely up to us to interpret. The HttpParser only care for whether the returned value is DIFFERENT or not from passed user */ - void *returnedSocket = httpResponseData->consumePostPadded(data, length, s, proxyParser, [httpContextData](void *s, uWS::HttpRequest *httpRequest) -> void * { + void *returnedSocket = httpResponseData->consumePostPadded(data, (unsigned int) length, s, proxyParser, [httpContextData](void *s, HttpRequest *httpRequest) -> void * { /* For every request we reset the timeout and hang until user makes action */ /* Warning: if we are in shutdown state, resetting the timer is a security issue! */ us_socket_timeout(SSL, (us_socket_t *) s, 0); @@ -151,6 +151,11 @@ struct HttpContext { /* Mark pending request and emit it */ httpResponseData->state = HttpResponseData::HTTP_RESPONSE_PENDING; + /* Mark this response as connectionClose if ancient or connection: close */ + if (httpRequest->isAncient() || httpRequest->getHeader("connection").length() == 5) { + httpResponseData->state |= HttpResponseData::HTTP_CONNECTION_CLOSE; + } + /* Route the method and URL */ httpContextData->router.getUserData() = {(HttpResponse *) s, httpRequest}; if (!httpContextData->router.route(httpRequest->getMethod(), httpRequest->getUrl())) { @@ -242,6 +247,18 @@ struct HttpContext { ((AsyncSocket *) s)->timeout(HTTP_IDLE_TIMEOUT_S); } + /* We need to check if we should close this socket here now */ + if (httpResponseData->state & HttpResponseData::HTTP_CONNECTION_CLOSE) { + if ((httpResponseData->state & HttpResponseData::HTTP_RESPONSE_PENDING) == 0) { + if (((AsyncSocket *) s)->getBufferedAmount() == 0) { + ((AsyncSocket *) s)->shutdown(); + /* We need to force close after sending FIN since we want to hinder + * clients from keeping to send their huge data */ + ((AsyncSocket *) s)->close(); + } + } + } + return (us_socket_t *) returnedSocket; } @@ -305,6 +322,18 @@ struct HttpContext { /* Drain any socket buffer, this might empty our backpressure and thus finish the request */ /*auto [written, failed] = */asyncSocket->write(nullptr, 0, true, 0); + /* Should we close this connection after a response - and is this response really done? */ + if (httpResponseData->state & HttpResponseData::HTTP_CONNECTION_CLOSE) { + if ((httpResponseData->state & HttpResponseData::HTTP_RESPONSE_PENDING) == 0) { + if (asyncSocket->getBufferedAmount() == 0) { + asyncSocket->shutdown(); + /* We need to force close after sending FIN since we want to hinder + * clients from keeping to send their huge data */ + asyncSocket->close(); + } + } + } + /* Expect another writable event, or another request within the timeout */ asyncSocket->timeout(HTTP_IDLE_TIMEOUT_S); @@ -358,12 +387,12 @@ struct HttpContext { us_socket_context_free(SSL, getSocketContext()); } - void filter(fu2::unique_function *, int)> &&filterHandler) { + void filter(MoveOnlyFunction *, int)> &&filterHandler) { getSocketContextData()->filterHandlers.emplace_back(std::move(filterHandler)); } /* Register an HTTP route handler acording to URL pattern */ - void onHttp(std::string method, std::string pattern, fu2::unique_function *, HttpRequest *)> &&handler, bool upgrade = false) { + void onHttp(std::string method, std::string pattern, MoveOnlyFunction *, HttpRequest *)> &&handler, bool upgrade = false) { HttpContextData *httpContextData = getSocketContextData(); /* Todo: This is ugly, fix */ diff --git a/nectar_modules/http/httplib/uWS/HttpContextData.h b/nerd_modules/http/httplib/uWS/HttpContextData.h similarity index 86% rename from nectar_modules/http/httplib/uWS/HttpContextData.h rename to nerd_modules/http/httplib/uWS/HttpContextData.h index 3bf441226..9375994ba 100644 --- a/nectar_modules/http/httplib/uWS/HttpContextData.h +++ b/nerd_modules/http/httplib/uWS/HttpContextData.h @@ -21,7 +21,7 @@ #include "HttpRouter.h" #include -#include "f2/function2.hpp" +#include "MoveOnlyFunction.h" namespace uWS { template struct HttpResponse; @@ -33,9 +33,9 @@ struct alignas(16) HttpContextData { template friend struct HttpResponse; template friend struct TemplatedApp; private: - std::vector *, int)>> filterHandlers; + std::vector *, int)>> filterHandlers; - fu2::unique_function missingServerNameHandler; + MoveOnlyFunction missingServerNameHandler; struct RouterData { HttpResponse *httpResponse; diff --git a/nerd_modules/http/httplib/uWS/HttpParser.h b/nerd_modules/http/httplib/uWS/HttpParser.h new file mode 100644 index 000000000..8e3333583 --- /dev/null +++ b/nerd_modules/http/httplib/uWS/HttpParser.h @@ -0,0 +1,391 @@ +/* + * Authored by Alex Hultman, 2018-2020. + * Intellectual property of third-party. + + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + + * http://www.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef UWS_HTTPPARSER_H +#define UWS_HTTPPARSER_H + +// todo: HttpParser is in need of a few clean-ups and refactorings + +/* The HTTP parser is an independent module subject to unit testing / fuzz testing */ + +#include +#include +#include +#include "MoveOnlyFunction.h" + +#include "BloomFilter.h" +#include "ProxyParser.h" +#include "QueryParser.h" + +namespace uWS { + +/* We require at least this much post padding */ +static const unsigned int MINIMUM_HTTP_POST_PADDING = 32; + +struct HttpRequest { + + friend struct HttpParser; + +private: + const static int MAX_HEADERS = 50; + struct Header { + std::string_view key, value; + } headers[MAX_HEADERS]; + bool ancientHttp; + unsigned int querySeparator; + bool didYield; + BloomFilter bf; + std::pair currentParameters; + +public: + bool isAncient() { + return ancientHttp; + } + + bool getYield() { + return didYield; + } + + /* Iteration over headers (key, value) */ + struct HeaderIterator { + Header *ptr; + + bool operator!=(const HeaderIterator &other) const { + /* Comparison with end is a special case */ + if (ptr != other.ptr) { + return other.ptr || ptr->key.length(); + } + return false; + } + + HeaderIterator &operator++() { + ptr++; + return *this; + } + + std::pair operator*() const { + return {ptr->key, ptr->value}; + } + }; + + HeaderIterator begin() { + return {headers + 1}; + } + + HeaderIterator end() { + return {nullptr}; + } + + /* If you do not want to handle this route */ + void setYield(bool yield) { + didYield = yield; + } + + std::string_view getHeader(std::string_view lowerCasedHeader) { + if (bf.mightHave(lowerCasedHeader)) { + for (Header *h = headers; (++h)->key.length(); ) { + if (h->key.length() == lowerCasedHeader.length() && !strncmp(h->key.data(), lowerCasedHeader.data(), lowerCasedHeader.length())) { + return h->value; + } + } + } + return std::string_view(nullptr, 0); + } + + std::string_view getUrl() { + return std::string_view(headers->value.data(), querySeparator); + } + + std::string_view getMethod() { + return std::string_view(headers->key.data(), headers->key.length()); + } + + /* Returns the raw querystring as a whole, still encoded */ + std::string_view getQuery() { + if (querySeparator < headers->value.length()) { + /* Strip the initial ? */ + return std::string_view(headers->value.data() + querySeparator + 1, headers->value.length() - querySeparator - 1); + } else { + return std::string_view(nullptr, 0); + } + } + + /* Finds and decodes the URI component. */ + std::string_view getQuery(std::string_view key) { + /* Raw querystring including initial '?' sign */ + std::string_view queryString = std::string_view(headers->value.data() + querySeparator, headers->value.length() - querySeparator); + + return getDecodedQueryValue(key, queryString); + } + + void setParameters(std::pair parameters) { + currentParameters = parameters; + } + + std::string_view getParameter(unsigned short index) { + if (currentParameters.first < (int) index) { + return {}; + } else { + return currentParameters.second[index]; + } + } + +}; + +struct HttpParser { + +private: + std::string fallback; + unsigned int remainingStreamingBytes = 0; + + const size_t MAX_FALLBACK_SIZE = 1024 * 4; + + static unsigned int toUnsignedInteger(std::string_view str) { + unsigned int unsignedIntegerValue = 0; + for (char c : str) { + unsignedIntegerValue = unsignedIntegerValue * 10u + ((unsigned int) c - (unsigned int) '0'); + } + return unsignedIntegerValue; + } + + static unsigned int getHeaders(char *postPaddedBuffer, char *end, struct HttpRequest::Header *headers, void *reserved) { + char *preliminaryKey, *preliminaryValue, *start = postPaddedBuffer; + + #ifdef UWS_WITH_PROXY + /* ProxyParser is passed as reserved parameter */ + ProxyParser *pp = (ProxyParser *) reserved; + + /* Parse PROXY protocol */ + auto [done, offset] = pp->parse({start, (size_t) (end - postPaddedBuffer)}); + if (!done) { + /* We do not reset the ProxyParser (on filure) since it is tied to this + * connection, which is really only supposed to ever get one PROXY frame + * anyways. We do however allow multiple PROXY frames to be sent (overwrites former). */ + return 0; + } else { + /* We have consumed this data so skip it */ + start += offset; + } + #else + /* This one is unused */ + (void) reserved; + #endif + + /* It is critical for fallback buffering logic that we only return with success + * if we managed to parse a complete HTTP request (minus data). Returning success + * for PROXY means we can end up succeeding, yet leaving bytes in the fallback buffer + * which is then removed, and our counters to flip due to overflow and we end up with a crash */ + + for (unsigned int i = 0; i < HttpRequest::MAX_HEADERS; i++) { + for (preliminaryKey = postPaddedBuffer; (*postPaddedBuffer != ':') & (*postPaddedBuffer > 32); *(postPaddedBuffer++) |= 32); + if (*postPaddedBuffer == '\r') { + if ((postPaddedBuffer != end) & (postPaddedBuffer[1] == '\n') & (i > 0)) { + headers->key = std::string_view(nullptr, 0); + return (unsigned int) ((postPaddedBuffer + 2) - start); + } else { + return 0; + } + } else { + headers->key = std::string_view(preliminaryKey, (size_t) (postPaddedBuffer - preliminaryKey)); + for (postPaddedBuffer++; (*postPaddedBuffer == ':' || *postPaddedBuffer < 33) && *postPaddedBuffer != '\r'; postPaddedBuffer++); + preliminaryValue = postPaddedBuffer; + postPaddedBuffer = (char *) memchr(postPaddedBuffer, '\r', (size_t) (end - postPaddedBuffer)); + if (postPaddedBuffer && postPaddedBuffer[1] == '\n') { + headers->value = std::string_view(preliminaryValue, (size_t) (postPaddedBuffer - preliminaryValue)); + postPaddedBuffer += 2; + headers++; + } else { + return 0; + } + } + } + return 0; + } + + // the only caller of getHeaders + template + std::pair fenceAndConsumePostPadded(char *data, unsigned int length, void *user, void *reserved, HttpRequest *req, MoveOnlyFunction &requestHandler, MoveOnlyFunction &dataHandler) { + + /* How much data we CONSUMED (to throw away) */ + unsigned int consumedTotal = 0; + + /* Fence one byte past end of our buffer (buffer has post padded margins) */ + data[length] = '\r'; + + for (unsigned int consumed; length && (consumed = getHeaders(data, data + length, req->headers, reserved)); ) { + data += consumed; + length -= consumed; + consumedTotal += consumed; + + /* Store HTTP version (ancient 1.0 or 1.1) */ + req->ancientHttp = req->headers->value.length() && (req->headers->value[req->headers->value.length() - 1] == '0'); + + /* Strip away tail of first "header value" aka URL */ + req->headers->value = std::string_view(req->headers->value.data(), (size_t) std::max(0, (int) req->headers->value.length() - 9)); + + /* Add all headers to bloom filter */ + req->bf.reset(); + for (HttpRequest::Header *h = req->headers; (++h)->key.length(); ) { + req->bf.add(h->key); + } + + /* Parse query */ + const char *querySeparatorPtr = (const char *) memchr(req->headers->value.data(), '?', req->headers->value.length()); + req->querySeparator = (unsigned int) ((querySeparatorPtr ? querySeparatorPtr : req->headers->value.data() + req->headers->value.length()) - req->headers->value.data()); + + /* If returned socket is not what we put in we need + * to break here as we either have upgraded to + * WebSockets or otherwise closed the socket. */ + void *returnedUser = requestHandler(user, req); + if (returnedUser != user) { + /* We are upgraded to WebSocket or otherwise broken */ + return {consumedTotal, returnedUser}; + } + + // todo: do not check this for GET (get should not have a body) + // todo: also support reading chunked streams + std::string_view contentLengthString = req->getHeader("content-length"); + if (contentLengthString.length()) { + remainingStreamingBytes = toUnsignedInteger(contentLengthString); + + if (!CONSUME_MINIMALLY) { + unsigned int emittable = std::min(remainingStreamingBytes, length); + dataHandler(user, std::string_view(data, emittable), emittable == remainingStreamingBytes); + remainingStreamingBytes -= emittable; + + data += emittable; + length -= emittable; + consumedTotal += emittable; + } + } else { + /* Still emit an empty data chunk to signal no data */ + dataHandler(user, {}, true); + } + + if (CONSUME_MINIMALLY) { + break; + } + } + return {consumedTotal, user}; + } + +public: + void *consumePostPadded(char *data, unsigned int length, void *user, void *reserved, MoveOnlyFunction &&requestHandler, MoveOnlyFunction &&dataHandler, MoveOnlyFunction &&errorHandler) { + + /* This resets BloomFilter by construction, but later we also reset it again. + * Optimize this to skip resetting twice (req could be made global) */ + HttpRequest req; + + if (remainingStreamingBytes) { + + // this is exactly the same as below! + // todo: refactor this + if (remainingStreamingBytes >= length) { + void *returnedUser = dataHandler(user, std::string_view(data, length), remainingStreamingBytes == length); + remainingStreamingBytes -= length; + return returnedUser; + } else { + void *returnedUser = dataHandler(user, std::string_view(data, remainingStreamingBytes), true); + + data += remainingStreamingBytes; + length -= remainingStreamingBytes; + + remainingStreamingBytes = 0; + + if (returnedUser != user) { + return returnedUser; + } + } + + } else if (fallback.length()) { + unsigned int had = (unsigned int) fallback.length(); + + size_t maxCopyDistance = std::min(MAX_FALLBACK_SIZE - fallback.length(), (size_t) length); + + /* We don't want fallback to be short string optimized, since we want to move it */ + fallback.reserve(fallback.length() + maxCopyDistance + std::max(MINIMUM_HTTP_POST_PADDING, sizeof(std::string))); + fallback.append(data, maxCopyDistance); + + // break here on break + std::pair consumed = fenceAndConsumePostPadded(fallback.data(), (unsigned int) fallback.length(), user, reserved, &req, requestHandler, dataHandler); + if (consumed.second != user) { + return consumed.second; + } + + if (consumed.first) { + + /* This logic assumes that we consumed everything in fallback buffer. + * This is critically important, as we will get an integer overflow in case + * of "had" being larger than what we consumed, and that we would drop data */ + fallback.clear(); + data += consumed.first - had; + length -= consumed.first - had; + + if (remainingStreamingBytes) { + // this is exactly the same as above! + if (remainingStreamingBytes >= (unsigned int) length) { + void *returnedUser = dataHandler(user, std::string_view(data, length), remainingStreamingBytes == (unsigned int) length); + remainingStreamingBytes -= length; + return returnedUser; + } else { + void *returnedUser = dataHandler(user, std::string_view(data, remainingStreamingBytes), true); + + data += remainingStreamingBytes; + length -= remainingStreamingBytes; + + remainingStreamingBytes = 0; + + if (returnedUser != user) { + return returnedUser; + } + } + } + + } else { + if (fallback.length() == MAX_FALLBACK_SIZE) { + // note: you don't really need error handler, just return something strange! + // we could have it return a constant pointer to denote error! + return errorHandler(user); + } + return user; + } + } + + std::pair consumed = fenceAndConsumePostPadded(data, length, user, reserved, &req, requestHandler, dataHandler); + if (consumed.second != user) { + return consumed.second; + } + + data += consumed.first; + length -= consumed.first; + + if (length) { + if (length < MAX_FALLBACK_SIZE) { + fallback.append(data, length); + } else { + return errorHandler(user); + } + } + + // added for now + return user; + } +}; + +} + +#endif // UWS_HTTPPARSER_H diff --git a/nectar_modules/http/httplib/uWS/HttpResponse.h b/nerd_modules/http/httplib/uWS/HttpResponse.h similarity index 75% rename from nectar_modules/http/httplib/uWS/HttpResponse.h rename to nerd_modules/http/httplib/uWS/HttpResponse.h index 436e6e3c8..a0f05d08d 100644 --- a/nectar_modules/http/httplib/uWS/HttpResponse.h +++ b/nerd_modules/http/httplib/uWS/HttpResponse.h @@ -30,7 +30,7 @@ #include "WebSocket.h" #include "WebSocketContextData.h" -#include "f2/function2.hpp" +#include "MoveOnlyFunction.h" /* todo: tryWrite is missing currently, only send smaller segments with write */ @@ -80,20 +80,9 @@ struct HttpResponse : public AsyncSocket { httpResponseData->state &= ~HttpResponseData::HTTP_RESPONSE_PENDING; } - /* Called only once per request */ - void writeMark() { - /* You can disable this altogether */ -#ifndef UWS_HTTPRESPONSE_NO_WRITEMARK - if (!Super::getLoopData()->noMark) { - /* We only expose major version */ - writeHeader("uWebSockets", "18"); - } -#endif - } - /* Returns true on success, indicating that it might be feasible to write more data. * Will start timeout if stream reaches totalSize or write failure. */ - bool internalEnd(std::string_view data, size_t totalSize, bool optional, bool allowContentLength = true) { + bool internalEnd(std::string_view data, uintmax_t totalSize, bool optional, bool allowContentLength = true, bool closeConnection = false) { /* Write status if not already done */ writeStatus(HTTP_200_OK); @@ -103,6 +92,22 @@ struct HttpResponse : public AsyncSocket { } HttpResponseData *httpResponseData = getHttpResponseData(); + + /* In some cases, such as when refusing huge data we want to close the connection when drained */ + if (closeConnection) { + + /* HTTP 1.1 must send this back unless the client already sent it to us. + * It is a connection close when either of the two parties say so but the + * one party must tell the other one so. + * + * This check also serves to limit writing the header only once. */ + if ((httpResponseData->state & HttpResponseData::HTTP_CONNECTION_CLOSE) == 0) { + writeHeader("Connection", "close"); + } + + httpResponseData->state |= HttpResponseData::HTTP_CONNECTION_CLOSE; + } + if (httpResponseData->state & HttpResponseData::HTTP_WRITE_CALLED) { /* We do not have tryWrite-like functionalities, so ignore optional in this path */ @@ -128,9 +133,6 @@ struct HttpResponse : public AsyncSocket { } else { /* Write content-length on first call */ if (!(httpResponseData->state & HttpResponseData::HTTP_END_CALLED)) { - /* Write mark, this propagates to WebSockets too */ - writeMark(); - /* WebSocket upgrades does not allow content-length */ if (allowContentLength) { /* Even zero is a valid content-length */ @@ -155,7 +157,7 @@ struct HttpResponse : public AsyncSocket { /* uSockets only deals with int sizes, so pass chunks of max signed int size */ auto writtenFailed = Super::write(data.data() + written, (int) std::min(data.length() - written, INT_MAX), optional); - written += writtenFailed.first; + written += (size_t) writtenFailed.first; failed = writtenFailed.second; } @@ -198,7 +200,7 @@ struct HttpResponse : public AsyncSocket { struct us_socket_context_t *webSocketContext) { /* Extract needed parameters from WebSocketContextData */ - WebSocketContextData *webSocketContextData = (WebSocketContextData *) us_socket_context_ext(SSL, webSocketContext); + WebSocketContextData *webSocketContextData = (WebSocketContextData *) us_socket_context_ext(SSL, webSocketContext); /* Note: OpenSSL can be used here to speed this up somewhat */ char secWebSocketAccept[29] = {}; @@ -214,67 +216,39 @@ struct HttpResponse : public AsyncSocket { writeHeader("Sec-WebSocket-Protocol", secWebSocketProtocol.substr(0, secWebSocketProtocol.find(','))); } - /* Negotiate compression, we may use a smaller compression window than we negotiate */ + /* Negotiate compression */ bool perMessageDeflate = false; - /* We are always allowed to share compressor, if perMessageDeflate */ - int compressOptions = webSocketContextData->compression & SHARED_COMPRESSOR; - if (webSocketContextData->compression != DISABLED) { - if (secWebSocketExtensions.length()) { - /* We never support client context takeover (the client cannot compress with a sliding window). */ - int wantedOptions = PERMESSAGE_DEFLATE | CLIENT_NO_CONTEXT_TAKEOVER; - - /* Shared compressor is the default */ - if (webSocketContextData->compression == SHARED_COMPRESSOR) { - /* Disable per-socket compressor */ - wantedOptions |= SERVER_NO_CONTEXT_TAKEOVER; - } + CompressOptions compressOptions = CompressOptions::DISABLED; + if (secWebSocketExtensions.length() && webSocketContextData->compression != DISABLED) { - /* isServer = true */ - ExtensionsNegotiator extensionsNegotiator(wantedOptions); - extensionsNegotiator.readOffer(secWebSocketExtensions); - - /* Todo: remove these mid string copies */ - std::string offer = extensionsNegotiator.generateOffer(); - if (offer.length()) { - - /* Todo: this is a quick fix that should be properly moved to ExtensionsNegotiator */ - if (webSocketContextData->compression & DEDICATED_COMPRESSOR && - webSocketContextData->compression != DEDICATED_COMPRESSOR_256KB) { - /* 3kb, 4kb is 9, 256 is 15 (default) */ - int maxServerWindowBits = 9; - switch (webSocketContextData->compression) { - case DEDICATED_COMPRESSOR_8KB: - maxServerWindowBits = 10; - break; - case DEDICATED_COMPRESSOR_16KB: - maxServerWindowBits = 11; - break; - case DEDICATED_COMPRESSOR_32KB: - maxServerWindowBits = 12; - break; - case DEDICATED_COMPRESSOR_64KB: - maxServerWindowBits = 13; - break; - case DEDICATED_COMPRESSOR_128KB: - maxServerWindowBits = 14; - break; - } - offer += "; server_max_window_bits="; - offer += std::to_string(maxServerWindowBits); - } + /* We always want shared inflation */ + int wantedInflationWindow = 0; - writeHeader("Sec-WebSocket-Extensions", offer); - } + /* Map from selected compressor */ + int wantedCompressionWindow = (webSocketContextData->compression & 0xFF00) >> 8; - /* Did we negotiate permessage-deflate? */ - if (extensionsNegotiator.getNegotiatedOptions() & PERMESSAGE_DEFLATE) { - perMessageDeflate = true; - } + auto [negCompression, negCompressionWindow, negInflationWindow, negResponse] = + negotiateCompression(true, wantedCompressionWindow, wantedInflationWindow, + secWebSocketExtensions); + + if (negCompression) { + perMessageDeflate = true; + + /* Map from windowBits to compressor */ + if (negCompressionWindow == 0) { + compressOptions = CompressOptions::SHARED_COMPRESSOR; + } else { + compressOptions = (CompressOptions) ((uint32_t) (negCompressionWindow << 8) + | (uint32_t) (negCompressionWindow - 7)); - /* Is the server allowed to compress with a sliding window? */ - if (!(extensionsNegotiator.getNegotiatedOptions() & SERVER_NO_CONTEXT_TAKEOVER)) { - compressOptions = webSocketContextData->compression; + /* If we are dedicated and have the 3kb then correct any 4kb to 3kb, + * (they both share the windowBits = 9) */ + if (webSocketContextData->compression == DEDICATED_COMPRESSOR_3KB) { + compressOptions = DEDICATED_COMPRESSOR_3KB; + } } + + writeHeader("Sec-WebSocket-Extensions", negResponse); } } @@ -293,7 +267,7 @@ struct HttpResponse : public AsyncSocket { bool wasCorked = Super::isCorked(); /* Adopting a socket invalidates it, do not rely on it directly to carry any data */ - WebSocket *webSocket = (WebSocket *) us_socket_context_adopt_socket(SSL, + WebSocket *webSocket = (WebSocket *) us_socket_context_adopt_socket(SSL, (us_socket_context_t *) webSocketContext, (us_socket_t *) this, sizeof(WebSocketData) + sizeof(UserData)); /* For whatever reason we were corked, update cork to the new socket */ @@ -312,7 +286,7 @@ struct HttpResponse : public AsyncSocket { } /* Arm idleTimeout */ - us_socket_timeout(SSL, (us_socket_t *) webSocket, webSocketContextData->idleTimeout); + us_socket_timeout(SSL, (us_socket_t *) webSocket, webSocketContextData->idleTimeoutComponents.first); /* Move construct the UserData right before calling open handler */ new (webSocket->getUserData()) UserData(std::move(userData)); @@ -371,6 +345,8 @@ struct HttpResponse : public AsyncSocket { /* Write an HTTP header with unsigned int value */ HttpResponse *writeHeader(std::string_view key, uint64_t value) { + writeStatus(HTTP_200_OK); + Super::write(key.data(), (int) key.length()); Super::write(": ", 2); writeUnsigned64(value); @@ -379,13 +355,13 @@ struct HttpResponse : public AsyncSocket { } /* End the response with an optional data chunk. Always starts a timeout. */ - void end(std::string_view data = {}) { - internalEnd(data, data.length(), false); + void end(std::string_view data = {}, bool closeConnection = false) { + internalEnd(data, data.length(), false, true, closeConnection); } /* Try and end the response. Returns [true, true] on success. * Starts a timeout in some cases. Returns [ok, hasResponded] */ - std::pair tryEnd(std::string_view data, size_t totalSize = 0) { + std::pair tryEnd(std::string_view data, uintmax_t totalSize = 0) { return {internalEnd(data, totalSize, true), hasResponded()}; } @@ -402,9 +378,6 @@ struct HttpResponse : public AsyncSocket { HttpResponseData *httpResponseData = getHttpResponseData(); if (!(httpResponseData->state & HttpResponseData::HTTP_WRITE_CALLED)) { - /* Write mark on first call to write */ - writeMark(); - writeHeader("Transfer-Encoding", "chunked"); httpResponseData->state |= HttpResponseData::HTTP_WRITE_CALLED; } @@ -423,7 +396,7 @@ struct HttpResponse : public AsyncSocket { } /* Get the current byte write offset for this Http response */ - size_t getWriteOffset() { + uintmax_t getWriteOffset() { HttpResponseData *httpResponseData = getHttpResponseData(); return httpResponseData->offset; @@ -437,7 +410,7 @@ struct HttpResponse : public AsyncSocket { } /* Corks the response if possible. Leaves already corked socket be. */ - HttpResponse *cork(fu2::unique_function &&handler) { + HttpResponse *cork(MoveOnlyFunction &&handler) { if (!Super::isCorked() && Super::canCork()) { Super::cork(); handler(); @@ -458,7 +431,7 @@ struct HttpResponse : public AsyncSocket { } /* Attach handler for writable HTTP response */ - HttpResponse *onWritable(fu2::unique_function &&handler) { + HttpResponse *onWritable(MoveOnlyFunction &&handler) { HttpResponseData *httpResponseData = getHttpResponseData(); httpResponseData->onWritable = std::move(handler); @@ -466,7 +439,7 @@ struct HttpResponse : public AsyncSocket { } /* Attach handler for aborted HTTP request */ - HttpResponse *onAborted(fu2::unique_function &&handler) { + HttpResponse *onAborted(MoveOnlyFunction &&handler) { HttpResponseData *httpResponseData = getHttpResponseData(); httpResponseData->onAborted = std::move(handler); @@ -474,7 +447,7 @@ struct HttpResponse : public AsyncSocket { } /* Attach a read handler for data sent. Will be called with FIN set true if last segment. */ - void onData(fu2::unique_function &&handler) { + void onData(MoveOnlyFunction &&handler) { HttpResponseData *data = getHttpResponseData(); data->inStream = std::move(handler); } diff --git a/nectar_modules/http/httplib/uWS/HttpResponseData.h b/nerd_modules/http/httplib/uWS/HttpResponseData.h similarity index 84% rename from nectar_modules/http/httplib/uWS/HttpResponseData.h rename to nerd_modules/http/httplib/uWS/HttpResponseData.h index 5746f4fab..ca17dc688 100644 --- a/nectar_modules/http/httplib/uWS/HttpResponseData.h +++ b/nerd_modules/http/httplib/uWS/HttpResponseData.h @@ -24,7 +24,7 @@ #include "AsyncSocketData.h" #include "ProxyParser.h" -#include "f2/function2.hpp" +#include "MoveOnlyFunction.h" namespace uWS { @@ -39,15 +39,15 @@ struct HttpResponseData : AsyncSocketData, HttpParser { HTTP_WRITE_CALLED = 2, // used HTTP_END_CALLED = 4, // used HTTP_RESPONSE_PENDING = 8, // used - HTTP_ENDED_STREAM_OUT = 16 // not used + HTTP_CONNECTION_CLOSE = 16 // used }; /* Per socket event handlers */ - fu2::unique_function onWritable; - fu2::unique_function onAborted; - fu2::unique_function inStream; // onData + MoveOnlyFunction onWritable; + MoveOnlyFunction onAborted; + MoveOnlyFunction inStream; // onData /* Outgoing offset */ - size_t offset = 0; + uintmax_t offset = 0; /* Current state (content-length sent, status sent, write called, etc */ int state = 0; diff --git a/nectar_modules/http/httplib/uWS/HttpRouter.h b/nerd_modules/http/httplib/uWS/HttpRouter.h similarity index 95% rename from nectar_modules/http/httplib/uWS/HttpRouter.h rename to nerd_modules/http/httplib/uWS/HttpRouter.h index aba0b211c..ef83654b4 100644 --- a/nectar_modules/http/httplib/uWS/HttpRouter.h +++ b/nerd_modules/http/httplib/uWS/HttpRouter.h @@ -27,7 +27,7 @@ #include #include -#include "f2/function2.hpp" +#include "MoveOnlyFunction.h" namespace uWS { @@ -48,7 +48,7 @@ struct HttpRouter { std::map priority; /* List of handlers */ - std::vector> handlers; + std::vector> handlers; /* Current URL cache */ std::string_view currentUrl; @@ -61,6 +61,8 @@ struct HttpRouter { std::vector> children; std::vector handlers; bool isHighPriority; + + Node(std::string name) : name(name) {} } root = {"rootNode"}; /* Advance from parent to child, adding child if necessary */ @@ -72,7 +74,7 @@ struct HttpRouter { } /* Insert sorted, but keep order if parent is root (we sort methods by priority elsewhere) */ - std::unique_ptr newNode(new Node({child})); + std::unique_ptr newNode(new Node(child)); newNode->isHighPriority = isHighPriority; return parent->children.emplace(std::upper_bound(parent->children.begin(), parent->children.end(), newNode, [parent, this](auto &a, auto &b) { @@ -158,7 +160,7 @@ struct HttpRouter { /* If we are on STOP, return where we may stand */ if (isStop) { /* We have reached accross the entire URL with no stoppage, execute */ - for (int handler : parent->handlers) { + for (uint32_t handler : parent->handlers) { if (handlers[handler & HANDLER_MASK](this)) { return true; } @@ -170,7 +172,7 @@ struct HttpRouter { for (auto &p : parent->children) { if (p->name.length() && p->name[0] == '*') { /* Wildcard match (can be seen as a shortcut) */ - for (int handler : p->handlers) { + for (uint32_t handler : p->handlers) { if (handlers[handler & HANDLER_MASK](this)) { return true; } @@ -227,7 +229,7 @@ struct HttpRouter { } /* Adds the corresponding entires in matching tree and handler list */ - void add(std::vector methods, std::string pattern, fu2::unique_function &&handler, uint32_t priority = MEDIUM_PRIORITY) { + void add(std::vector methods, std::string pattern, MoveOnlyFunction &&handler, uint32_t priority = MEDIUM_PRIORITY) { for (std::string method : methods) { /* Lookup method */ Node *node = getNode(&root, method, false); diff --git a/nerd_modules/http/httplib/uWS/LICENSE b/nerd_modules/http/httplib/uWS/LICENSE new file mode 100644 index 000000000..f49a4e16e --- /dev/null +++ b/nerd_modules/http/httplib/uWS/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/nectar_modules/http/httplib/uWS/Loop.h b/nerd_modules/http/httplib/uWS/Loop.h similarity index 94% rename from nectar_modules/http/httplib/uWS/Loop.h rename to nerd_modules/http/httplib/uWS/Loop.h index 62b276a1a..305cc2dc9 100644 --- a/nectar_modules/http/httplib/uWS/Loop.h +++ b/nerd_modules/http/httplib/uWS/Loop.h @@ -18,7 +18,7 @@ #ifndef UWS_LOOP_H #define UWS_LOOP_H -/* The loop is lazily created per-thread and run with uWS::run() */ +/* The loop is lazily created per-thread and run with run() */ #include "LoopData.h" #include @@ -116,7 +116,7 @@ struct Loop { getLazyLoop().loop = nullptr; } - void addPostHandler(void *key, fu2::unique_function &&handler) { + void addPostHandler(void *key, MoveOnlyFunction &&handler) { LoopData *loopData = (LoopData *) us_loop_ext((us_loop_t *) this); loopData->postHandlers.emplace(key, std::move(handler)); @@ -129,7 +129,7 @@ struct Loop { loopData->postHandlers.erase(key); } - void addPreHandler(void *key, fu2::unique_function &&handler) { + void addPreHandler(void *key, MoveOnlyFunction &&handler) { LoopData *loopData = (LoopData *) us_loop_ext((us_loop_t *) this); loopData->preHandlers.emplace(key, std::move(handler)); @@ -143,7 +143,7 @@ struct Loop { } /* Defer this callback on Loop's thread of execution */ - void defer(fu2::unique_function &&cb) { + void defer(MoveOnlyFunction &&cb) { LoopData *loopData = (LoopData *) us_loop_ext((us_loop_t *) this); //if (std::thread::get_id() == ) // todo: add fast path for same thread id diff --git a/nectar_modules/http/httplib/uWS/LoopData.h b/nerd_modules/http/httplib/uWS/LoopData.h similarity index 86% rename from nectar_modules/http/httplib/uWS/LoopData.h rename to nerd_modules/http/httplib/uWS/LoopData.h index eba52e2e4..b4cac2930 100644 --- a/nectar_modules/http/httplib/uWS/LoopData.h +++ b/nerd_modules/http/httplib/uWS/LoopData.h @@ -26,7 +26,7 @@ #include "PerMessageDeflate.h" -#include "f2/function2.hpp" +#include "MoveOnlyFunction.h" namespace uWS { @@ -37,10 +37,10 @@ struct alignas(16) LoopData { private: std::mutex deferMutex; int currentDeferQueue = 0; - std::vector> deferQueues[2]; + std::vector> deferQueues[2]; /* Map from void ptr to handler */ - std::map> postHandlers, preHandlers; + std::map> postHandlers, preHandlers; public: ~LoopData() { @@ -57,11 +57,11 @@ struct alignas(16) LoopData { bool noMark = false; /* Good 16k for SSL perf. */ - static const int CORK_BUFFER_SIZE = 16 * 1024; + static const unsigned int CORK_BUFFER_SIZE = 16 * 1024; /* Cork data */ char *corkBuffer = new char[CORK_BUFFER_SIZE]; - int corkOffset = 0; + unsigned int corkOffset = 0; void *corkedSocket = nullptr; /* Per message deflate data */ diff --git a/nectar_modules/http/httplib/uWS/MessageParser.h b/nerd_modules/http/httplib/uWS/MessageParser.h similarity index 100% rename from nectar_modules/http/httplib/uWS/MessageParser.h rename to nerd_modules/http/httplib/uWS/MessageParser.h diff --git a/nerd_modules/http/httplib/uWS/MoveOnlyFunction.h b/nerd_modules/http/httplib/uWS/MoveOnlyFunction.h new file mode 100644 index 000000000..b1ae785e2 --- /dev/null +++ b/nerd_modules/http/httplib/uWS/MoveOnlyFunction.h @@ -0,0 +1,377 @@ +/* +MIT License + +Copyright (c) 2020 Oleg Fatkhiev + +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. +*/ + +/* Sources fetched from https://github.com/ofats/any_invocable on 2021-02-19. */ + +#ifndef _ANY_INVOKABLE_H_ +#define _ANY_INVOKABLE_H_ + +#include +#include +#include + +// clang-format off +/* +namespace std { + template class any_invocable; // never defined + + template + class any_invocable { + public: + using result_type = R; + + // SECTION.3, construct/copy/destroy + any_invocable() noexcept; + any_invocable(nullptr_t) noexcept; + any_invocable(any_invocable&&) noexcept; + template any_invocable(F&&); + + template + explicit any_invocable(in_place_type_t, Args&&...); + template + explicit any_invocable(in_place_type_t, initializer_list, Args&&...); + + any_invocable& operator=(any_invocable&&) noexcept; + any_invocable& operator=(nullptr_t) noexcept; + template any_invocable& operator=(F&&); + template any_invocable& operator=(reference_wrapper) noexcept; + + ~any_invocable(); + + // SECTION.4, any_invocable modifiers + void swap(any_invocable&) noexcept; + + // SECTION.5, any_invocable capacity + explicit operator bool() const noexcept; + + // SECTION.6, any_invocable invocation + R operator()(ArgTypes...) cv ref noexcept(noex); + + // SECTION.7, null pointer comparisons + friend bool operator==(const any_invocable&, nullptr_t) noexcept; + + // SECTION.8, specialized algorithms + friend void swap(any_invocable&, any_invocable&) noexcept; + }; +} +*/ +// clang-format on + +namespace ofats { + +namespace any_detail { + +using buffer = std::aligned_storage_t; + +template +inline constexpr bool is_small_object_v = + sizeof(T) <= sizeof(buffer) && alignof(buffer) % alignof(T) == 0 && + std::is_nothrow_move_constructible_v; + +union storage { + void* ptr_ = nullptr; + buffer buf_; +}; + +enum class action { destroy, move }; + +template +struct handler_traits { + template + struct handler_base { + static void handle(action act, storage* current, storage* other = nullptr) { + switch (act) { + case (action::destroy): + Derived::destroy(*current); + break; + case (action::move): + Derived::move(*current, *other); + break; + } + } + }; + + template + struct small_handler : handler_base> { + template + static void create(storage& s, Args&&... args) { + new (static_cast(&s.buf_)) T(std::forward(args)...); + } + + static void destroy(storage& s) noexcept { + T& value = *static_cast(static_cast(&s.buf_)); + value.~T(); + } + + static void move(storage& dst, storage& src) noexcept { + create(dst, std::move(*static_cast(static_cast(&src.buf_)))); + destroy(src); + } + + static R call(storage& s, ArgTypes... args) { + return std::invoke(*static_cast(static_cast(&s.buf_)), + std::forward(args)...); + } + }; + + template + struct large_handler : handler_base> { + template + static void create(storage& s, Args&&... args) { + s.ptr_ = new T(std::forward(args)...); + } + + static void destroy(storage& s) noexcept { delete static_cast(s.ptr_); } + + static void move(storage& dst, storage& src) noexcept { + dst.ptr_ = src.ptr_; + } + + static R call(storage& s, ArgTypes... args) { + return std::invoke(*static_cast(s.ptr_), + std::forward(args)...); + } + }; + + template + using handler = std::conditional_t, small_handler, + large_handler>; +}; + +template +struct is_in_place_type : std::false_type {}; + +template +struct is_in_place_type> : std::true_type {}; + +template +inline constexpr auto is_in_place_type_v = is_in_place_type::value; + +template +class any_invocable_impl { + template + using handler = + typename any_detail::handler_traits::template handler; + + using storage = any_detail::storage; + using action = any_detail::action; + using handle_func = void (*)(any_detail::action, any_detail::storage*, + any_detail::storage*); + using call_func = R (*)(any_detail::storage&, ArgTypes...); + + public: + using result_type = R; + + any_invocable_impl() noexcept = default; + any_invocable_impl(std::nullptr_t) noexcept {} + any_invocable_impl(any_invocable_impl&& rhs) noexcept { + if (rhs.handle_) { + handle_ = rhs.handle_; + handle_(action::move, &storage_, &rhs.storage_); + call_ = rhs.call_; + rhs.handle_ = nullptr; + } + } + + any_invocable_impl& operator=(any_invocable_impl&& rhs) noexcept { + any_invocable_impl{std::move(rhs)}.swap(*this); + return *this; + } + any_invocable_impl& operator=(std::nullptr_t) noexcept { + destroy(); + return *this; + } + + ~any_invocable_impl() { destroy(); } + + void swap(any_invocable_impl& rhs) noexcept { + if (handle_) { + if (rhs.handle_) { + storage tmp; + handle_(action::move, &tmp, &storage_); + rhs.handle_(action::move, &storage_, &rhs.storage_); + handle_(action::move, &rhs.storage_, &tmp); + std::swap(handle_, rhs.handle_); + std::swap(call_, rhs.call_); + } else { + rhs.swap(*this); + } + } else if (rhs.handle_) { + rhs.handle_(action::move, &storage_, &rhs.storage_); + handle_ = rhs.handle_; + call_ = rhs.call_; + rhs.handle_ = nullptr; + } + } + + explicit operator bool() const noexcept { return handle_ != nullptr; } + + protected: + template + void create(Args&&... args) { + using hdl = handler; + hdl::create(storage_, std::forward(args)...); + handle_ = &hdl::handle; + call_ = &hdl::call; + } + + void destroy() noexcept { + if (handle_) { + handle_(action::destroy, &storage_, nullptr); + handle_ = nullptr; + } + } + + R call(ArgTypes... args) noexcept(is_noexcept) { + return call_(storage_, std::forward(args)...); + } + + friend bool operator==(const any_invocable_impl& f, std::nullptr_t) noexcept { + return !f; + } + friend bool operator==(std::nullptr_t, const any_invocable_impl& f) noexcept { + return !f; + } + friend bool operator!=(const any_invocable_impl& f, std::nullptr_t) noexcept { + return static_cast(f); + } + friend bool operator!=(std::nullptr_t, const any_invocable_impl& f) noexcept { + return static_cast(f); + } + + friend void swap(any_invocable_impl& lhs, any_invocable_impl& rhs) noexcept { + lhs.swap(rhs); + } + + private: + storage storage_; + handle_func handle_ = nullptr; + call_func call_; +}; + +template +using remove_cvref_t = std::remove_cv_t>; + +template +using can_convert = std::conjunction< + std::negation, AI>>, + std::negation>>, + std::is_invocable_r, + std::bool_constant<(!noex || + std::is_nothrow_invocable_r_v)>, + std::is_constructible, F>>; + +} // namespace any_detail + +template +class any_invocable; + +#define __OFATS_ANY_INVOCABLE(cv, ref, noex, inv_quals) \ + template \ + class any_invocable \ + : public any_detail::any_invocable_impl { \ + using base_type = any_detail::any_invocable_impl; \ + \ + public: \ + using base_type::base_type; \ + \ + template < \ + class F, \ + class = std::enable_if_t::value>> \ + any_invocable(F&& f) { \ + base_type::template create>(std::forward(f)); \ + } \ + \ + template , \ + class = std::enable_if_t< \ + std::is_move_constructible_v && \ + std::is_constructible_v && \ + std::is_invocable_r_v && \ + (!noex || std::is_nothrow_invocable_r_v)>> \ + explicit any_invocable(std::in_place_type_t, Args&&... args) { \ + base_type::template create(std::forward(args)...); \ + } \ + \ + template < \ + class T, class U, class... Args, class VT = std::decay_t, \ + class = std::enable_if_t< \ + std::is_move_constructible_v && \ + std::is_constructible_v&, Args...> && \ + std::is_invocable_r_v && \ + (!noex || \ + std::is_nothrow_invocable_r_v)>> \ + explicit any_invocable(std::in_place_type_t, \ + std::initializer_list il, Args&&... args) { \ + base_type::template create(il, std::forward(args)...); \ + } \ + \ + template > \ + std::enable_if_t && \ + std::is_move_constructible_v, \ + any_invocable&> \ + operator=(F&& f) { \ + any_invocable{std::forward(f)}.swap(*this); \ + return *this; \ + } \ + template \ + any_invocable& operator=(std::reference_wrapper f) { \ + any_invocable{f}.swap(*this); \ + return *this; \ + } \ + \ + R operator()(ArgTypes... args) cv ref noexcept(noex) { \ + return base_type::call(std::forward(args)...); \ + } \ + }; + +// cv -> {`empty`, const} +// ref -> {`empty`, &, &&} +// noex -> {true, false} +// inv_quals -> (is_empty(ref) ? & : ref) +__OFATS_ANY_INVOCABLE(, , false, &) // 000 +__OFATS_ANY_INVOCABLE(, , true, &) // 001 +__OFATS_ANY_INVOCABLE(, &, false, &) // 010 +__OFATS_ANY_INVOCABLE(, &, true, &) // 011 +__OFATS_ANY_INVOCABLE(, &&, false, &&) // 020 +__OFATS_ANY_INVOCABLE(, &&, true, &&) // 021 +__OFATS_ANY_INVOCABLE(const, , false, const&) // 100 +__OFATS_ANY_INVOCABLE(const, , true, const&) // 101 +__OFATS_ANY_INVOCABLE(const, &, false, const&) // 110 +__OFATS_ANY_INVOCABLE(const, &, true, const&) // 111 +__OFATS_ANY_INVOCABLE(const, &&, false, const&&) // 120 +__OFATS_ANY_INVOCABLE(const, &&, true, const&&) // 121 + +#undef __OFATS_ANY_INVOCABLE + +} // namespace ofats + +/* We, uWebSockets define our own type */ +namespace uWS { + template + using MoveOnlyFunction = ofats::any_invocable; +} + +#endif // _ANY_INVOKABLE_H_ diff --git a/nectar_modules/http/httplib/uWS/Multipart.h b/nerd_modules/http/httplib/uWS/Multipart.h similarity index 96% rename from nectar_modules/http/httplib/uWS/Multipart.h rename to nerd_modules/http/httplib/uWS/Multipart.h index c5027c544..8538d642e 100644 --- a/nectar_modules/http/httplib/uWS/Multipart.h +++ b/nerd_modules/http/httplib/uWS/Multipart.h @@ -39,21 +39,6 @@ namespace uWS { remainingLine = line; } - /* Common parameter */ - std::string_view getName() { - return name; - } - - /* Common parameter */ - std::string_view getFilename() { - return filename; - } - - /* Parses common values */ - void parseCommonValues() { - - } - /* Returns next key/value where value can simply be empty. * If key (first) is empty then we are at the end */ std::pair getKeyValue() { @@ -76,7 +61,6 @@ namespace uWS { private: std::string_view remainingLine; - std::string_view filename, name; /* Consumes a token from the line. Will "unquote" strings */ std::string_view getToken() { @@ -108,6 +92,11 @@ namespace uWS { quoteLength++; } + /* We can't remove_prefix if we have nothing to remove */ + if (!remainingLine.length()) { + return {}; + } + remainingLine.remove_prefix(1); return quote.substr(0, quoteLength); } else { @@ -239,4 +228,4 @@ namespace uWS { } -#endif \ No newline at end of file +#endif diff --git a/nerd_modules/http/httplib/uWS/PerMessageDeflate.h b/nerd_modules/http/httplib/uWS/PerMessageDeflate.h new file mode 100644 index 000000000..b6ee0bedd --- /dev/null +++ b/nerd_modules/http/httplib/uWS/PerMessageDeflate.h @@ -0,0 +1,274 @@ +/* + * Authored by Alex Hultman, 2018-2021. + * Intellectual property of third-party. + + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + + * http://www.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* This standalone module implements deflate / inflate streams */ + +#ifndef UWS_PERMESSAGEDEFLATE_H +#define UWS_PERMESSAGEDEFLATE_H + +/* We always define these options no matter if ZLIB is enabled or not */ +namespace uWS { + /* Compressor mode is HIGH8(windowBits), LOW8(memLevel) */ + enum CompressOptions : uint32_t { + DISABLED = 0, + SHARED_COMPRESSOR = 1, + DEDICATED_COMPRESSOR_3KB = 9 << 8 | 1, + DEDICATED_COMPRESSOR_4KB = 9 << 8 | 2, + DEDICATED_COMPRESSOR_8KB = 10 << 8 | 3, + DEDICATED_COMPRESSOR_16KB = 11 << 8 | 4, + DEDICATED_COMPRESSOR_32KB = 12 << 8 | 5, + DEDICATED_COMPRESSOR_64KB = 13 << 8 | 6, + DEDICATED_COMPRESSOR_128KB = 14 << 8 | 7, + DEDICATED_COMPRESSOR_256KB = 15 << 8 | 8, + /* Same as 256kb */ + DEDICATED_COMPRESSOR = 15 << 8 | 8 + }; +} + +#if !defined(UWS_NO_ZLIB) && !defined(UWS_MOCK_ZLIB) +#include +#endif + +#include +#include + +#ifdef UWS_USE_LIBDEFLATE +#include "libdeflate.h" +#include +#endif + +namespace uWS { + +/* Do not compile this module if we don't want it */ +#if defined(UWS_NO_ZLIB) || defined(UWS_MOCK_ZLIB) +struct ZlibContext {}; +struct InflationStream { + std::optional inflate(ZlibContext *zlibContext, std::string_view compressed, size_t maxPayloadLength) { + return compressed.substr(0, std::min(maxPayloadLength, compressed.length())); + } +}; +struct DeflationStream { + std::string_view deflate(ZlibContext *zlibContext, std::string_view raw, bool reset) { + return raw; + } + DeflationStream(int compressOptions) { + } +}; +#else + +#define LARGE_BUFFER_SIZE 1024 * 16 // todo: fix this + +struct ZlibContext { + /* Any returned data is valid until next same-class call. + * We need to have two classes to allow inflation followed + * by many deflations without modifying the inflation */ + std::string dynamicDeflationBuffer; + std::string dynamicInflationBuffer; + char *deflationBuffer; + char *inflationBuffer; + +#ifdef UWS_USE_LIBDEFLATE + libdeflate_decompressor *decompressor; + libdeflate_compressor *compressor; +#endif + + ZlibContext() { + deflationBuffer = (char *) malloc(LARGE_BUFFER_SIZE); + inflationBuffer = (char *) malloc(LARGE_BUFFER_SIZE); + +#ifdef UWS_USE_LIBDEFLATE + decompressor = libdeflate_alloc_decompressor(); + compressor = libdeflate_alloc_compressor(6); +#endif + } + + ~ZlibContext() { + free(deflationBuffer); + free(inflationBuffer); + +#ifdef UWS_USE_LIBDEFLATE + libdeflate_free_decompressor(decompressor); + libdeflate_free_compressor(compressor); +#endif + } +}; + +struct DeflationStream { + z_stream deflationStream = {}; + + DeflationStream(CompressOptions compressOptions) { + + /* Sliding inflator should be about 44kb by default, less than compressor */ + + /* Memory usage is given by 2 ^ (windowBits + 2) + 2 ^ (memLevel + 9) */ + int windowBits = -(int) ((compressOptions & 0xFF00) >> 8), memLevel = compressOptions & 0x00FF; + + //printf("windowBits: %d, memLevel: %d\n", windowBits, memLevel); + + deflateInit2(&deflationStream, Z_DEFAULT_COMPRESSION, Z_DEFLATED, windowBits, memLevel, Z_DEFAULT_STRATEGY); + } + + /* Deflate and optionally reset. You must not deflate an empty string. */ + std::string_view deflate(ZlibContext *zlibContext, std::string_view raw, bool reset) { + +#ifdef UWS_USE_LIBDEFLATE + /* Run a fast path in case of shared_compressor */ + if (reset) { + size_t written = 0; + static unsigned char buf[1024 + 1]; + + written = libdeflate_deflate_compress(zlibContext->compressor, raw.data(), raw.length(), buf, 1024); + + if (written) { + memcpy(&buf[written], "\x00", 1); + return std::string_view((char *) buf, written + 1); + } + } +#endif + + /* Odd place to clear this one, fix */ + zlibContext->dynamicDeflationBuffer.clear(); + + deflationStream.next_in = (Bytef *) raw.data(); + deflationStream.avail_in = (unsigned int) raw.length(); + + /* This buffer size has to be at least 6 bytes for Z_SYNC_FLUSH to work */ + const int DEFLATE_OUTPUT_CHUNK = LARGE_BUFFER_SIZE; + + int err; + do { + deflationStream.next_out = (Bytef *) zlibContext->deflationBuffer; + deflationStream.avail_out = DEFLATE_OUTPUT_CHUNK; + + err = ::deflate(&deflationStream, Z_SYNC_FLUSH); + if (Z_OK == err && deflationStream.avail_out == 0) { + zlibContext->dynamicDeflationBuffer.append(zlibContext->deflationBuffer, DEFLATE_OUTPUT_CHUNK - deflationStream.avail_out); + continue; + } else { + break; + } + } while (true); + + /* This must not change avail_out */ + if (reset) { + deflateReset(&deflationStream); + } + + if (zlibContext->dynamicDeflationBuffer.length()) { + zlibContext->dynamicDeflationBuffer.append(zlibContext->deflationBuffer, DEFLATE_OUTPUT_CHUNK - deflationStream.avail_out); + + return std::string_view((char *) zlibContext->dynamicDeflationBuffer.data(), zlibContext->dynamicDeflationBuffer.length() - 4); + } + + /* Note: We will get an interger overflow resulting in heap buffer overflow if Z_BUF_ERROR is returned + * from passing 0 as avail_in. Therefore we must not deflate an empty string */ + return { + zlibContext->deflationBuffer, + DEFLATE_OUTPUT_CHUNK - deflationStream.avail_out - 4 + }; + } + + ~DeflationStream() { + deflateEnd(&deflationStream); + } +}; + +struct InflationStream { + z_stream inflationStream = {}; + + InflationStream() { + inflateInit2(&inflationStream, -15); + } + + ~InflationStream() { + inflateEnd(&inflationStream); + } + + /* Zero length inflates are possible and valid */ + std::optional inflate(ZlibContext *zlibContext, std::string_view compressed, size_t maxPayloadLength) { + +#ifdef UWS_USE_LIBDEFLATE + /* Try fast path first */ + size_t written = 0; + static char buf[1024]; + + /* We have to pad 9 bytes and restore those bytes when done since 9 is more than 6 of next WebSocket message */ + char tmp[9]; + memcpy(tmp, (char *) compressed.data() + compressed.length(), 9); + memcpy((char *) compressed.data() + compressed.length(), "\x00\x00\xff\xff\x01\x00\x00\xff\xff", 9); + libdeflate_result res = libdeflate_deflate_decompress(zlibContext->decompressor, compressed.data(), compressed.length() + 9, buf, 1024, &written); + memcpy((char *) compressed.data() + compressed.length(), tmp, 9); + + if (res == 0) { + /* Fast path wins */ + return std::string_view(buf, written); + } +#endif + + /* We clear this one here, could be done better */ + zlibContext->dynamicInflationBuffer.clear(); + + inflationStream.next_in = (Bytef *) compressed.data(); + inflationStream.avail_in = (unsigned int) compressed.length(); + + int err; + do { + inflationStream.next_out = (Bytef *) zlibContext->inflationBuffer; + inflationStream.avail_out = LARGE_BUFFER_SIZE; + + err = ::inflate(&inflationStream, Z_SYNC_FLUSH); + if (err == Z_OK && inflationStream.avail_out) { + break; + } + + zlibContext->dynamicInflationBuffer.append(zlibContext->inflationBuffer, LARGE_BUFFER_SIZE - inflationStream.avail_out); + + + } while (inflationStream.avail_out == 0 && zlibContext->dynamicInflationBuffer.length() <= maxPayloadLength); + + inflateReset(&inflationStream); + + if ((err != Z_BUF_ERROR && err != Z_OK) || zlibContext->dynamicInflationBuffer.length() > maxPayloadLength) { + return std::nullopt; + } + + if (zlibContext->dynamicInflationBuffer.length()) { + zlibContext->dynamicInflationBuffer.append(zlibContext->inflationBuffer, LARGE_BUFFER_SIZE - inflationStream.avail_out); + + /* Let's be strict about the max size */ + if (zlibContext->dynamicInflationBuffer.length() > maxPayloadLength) { + return std::nullopt; + } + + return std::string_view(zlibContext->dynamicInflationBuffer.data(), zlibContext->dynamicInflationBuffer.length()); + } + + /* Let's be strict about the max size */ + if ((LARGE_BUFFER_SIZE - inflationStream.avail_out) > maxPayloadLength) { + return std::nullopt; + } + + return std::string_view(zlibContext->inflationBuffer, LARGE_BUFFER_SIZE - inflationStream.avail_out); + } + +}; + +#endif + +} + +#endif // UWS_PERMESSAGEDEFLATE_H diff --git a/nectar_modules/http/httplib/uWS/ProxyParser.h b/nerd_modules/http/httplib/uWS/ProxyParser.h similarity index 98% rename from nectar_modules/http/httplib/uWS/ProxyParser.h rename to nerd_modules/http/httplib/uWS/ProxyParser.h index aee2ac1ab..95ee3d119 100644 --- a/nectar_modules/http/httplib/uWS/ProxyParser.h +++ b/nerd_modules/http/httplib/uWS/ProxyParser.h @@ -133,7 +133,7 @@ struct ProxyParser { uint16_t hostLength = _cond_byte_swap(header.len); /* We must have all the data available */ - if (data.length() < 16 + hostLength) { + if (data.length() < 16u + hostLength) { return {false, 0}; } diff --git a/nectar_modules/http/httplib/uWS/QueryParser.h b/nerd_modules/http/httplib/uWS/QueryParser.h similarity index 97% rename from nectar_modules/http/httplib/uWS/QueryParser.h rename to nerd_modules/http/httplib/uWS/QueryParser.h index 9c04d379b..552bb56e7 100644 --- a/nectar_modules/http/httplib/uWS/QueryParser.h +++ b/nerd_modules/http/httplib/uWS/QueryParser.h @@ -56,10 +56,10 @@ namespace uWS { char *in = (char *) statementValue.data(); /* Write offset */ - int out = 0; + unsigned int out = 0; /* Walk over all chars until end or null char, decoding in place */ - for (int i = 0; i < statementValue.length() && in[i]; i++) { + for (unsigned int i = 0; i < statementValue.length() && in[i]; i++) { /* Only bother with '%' */ if (in[i] == '%') { /* Do we have enough data for two bytes hex? */ diff --git a/nerd_modules/http/httplib/uWS/TopicTree.h b/nerd_modules/http/httplib/uWS/TopicTree.h new file mode 100644 index 000000000..7ea06f08d --- /dev/null +++ b/nerd_modules/http/httplib/uWS/TopicTree.h @@ -0,0 +1,604 @@ +/* + * Authored by Alex Hultman, 2018-2021. + * Intellectual property of third-party. + + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + + * http://www.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef UWS_TOPICTREE_H +#define UWS_TOPICTREE_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* We use std::function here, not MoveOnlyFunction */ +#include + +namespace uWS { + +/* A Subscriber is an extension of a socket */ +struct Subscriber { + std::list subscriptions; + void *user; + + Subscriber(void *user) : user(user) {} +}; + +struct Topic { + /* Memory for our name */ + char *name; + size_t length; + + /* Our parent or nullptr */ + Topic *parent = nullptr; + + /* Next triggered Topic */ + bool triggered = false; + + /* Exact string matches */ + std::map children; + + /* Wildcard child */ + Topic *wildcardChild = nullptr; + + /* Terminating wildcard child */ + Topic *terminatingWildcardChild = nullptr; + + /* What we published, {inflated, deflated} */ + std::map> messages; + + std::set subs; + + /* Locked or not, used only when iterating over a Subscriber's topics */ + bool locked = false; + + /* Full name is used when iterating topcis */ + std::string fullName; +}; + +struct Hole { + std::pair lengths; + unsigned int messageId; +}; + +struct Intersection { + std::pair dataChannels; + std::vector holes; + + void forSubscriber(std::vector &senderForMessages, std::function, bool)> cb) { + /* How far we already emitted of the two dataChannels */ + std::pair emitted = {}; + + /* Holes are global to the entire topic tree, so we are not guaranteed to find + * holes in this intersection - they are sorted, though */ + unsigned int examinedHoles = 0; + + /* This is a slow path of sorts, most subscribers will be observers, not active senders */ + for (unsigned int id : senderForMessages) { + std::pair toEmit = {}; + std::pair toIgnore = {}; + + /* This linear search is most probably very small - it could be made log2 if every hole + * knows about its previous accumulated length, which is easy to set up. However this + * log2 search will most likely never be a warranted perf. gain */ + for (; examinedHoles < holes.size(); examinedHoles++) { + if (holes[examinedHoles].messageId == id) { + toIgnore.first += holes[examinedHoles].lengths.first; + toIgnore.second += holes[examinedHoles].lengths.second; + examinedHoles++; + break; + } + /* We are not the sender of this message so we should emit it in this segment */ + toEmit.first += holes[examinedHoles].lengths.first; + toEmit.second += holes[examinedHoles].lengths.second; + } + + /* Emit this segment */ + if (toEmit.first || toEmit.second) { + std::pair cutDataChannels = { + std::string_view(dataChannels.first.data() + emitted.first, toEmit.first), + std::string_view(dataChannels.second.data() + emitted.second, toEmit.second), + }; + + /* We only need to test the first data channel for "FIN" */ + cb(cutDataChannels, emitted.first + toEmit.first + toIgnore.first == dataChannels.first.length()); + } + + emitted.first += toEmit.first + toIgnore.first; + emitted.second += toEmit.second + toIgnore.second; + } + + if (emitted.first == dataChannels.first.length() && emitted.second == dataChannels.second.length()) { + return; + } + + std::pair cutDataChannels = { + std::string_view(dataChannels.first.data() + emitted.first, dataChannels.first.length() - emitted.first), + std::string_view(dataChannels.second.data() + emitted.second, dataChannels.second.length() - emitted.second), + }; + + cb(cutDataChannels, true); + } +}; + +struct TopicTree { + /* Returns Topic, or nullptr. Topic can be root if empty string given. */ + Topic *lookupTopic(std::string_view topic) { + /* Lookup exact Topic ptr from string */ + Topic *iterator = root; + for (size_t start = 0, stop = 0; stop != std::string::npos; start = stop + 1) { + stop = topic.find('/', start); + std::string_view segment = topic.substr(start, stop - start); + + std::map::iterator it = iterator->children.find(segment); + if (it == iterator->children.end()) { + /* This topic does not even exist */ + return nullptr; + } + + iterator = it->second; + } + + return iterator; + } + +private: + std::function cb; + + Topic *root = new Topic; + + /* Global messageId for deduplication of overlapping topics and ordering between topics */ + unsigned int messageId = 0; + + /* Sender holes */ + std::map> senderHoles; + + /* The triggered topics */ + Topic *triggeredTopics[64]; + int numTriggeredTopics = 0; + Subscriber *min = (Subscriber *) UINTPTR_MAX; + + /* Cull or trim unused Topic nodes from leaf to root */ + void trimTree(Topic *topic) { + while (!topic->subs.size() && !topic->children.size() && !topic->terminatingWildcardChild && !topic->wildcardChild) { + Topic *parent = topic->parent; + + if (topic->length == 1) { + if (topic->name[0] == '#') { + parent->terminatingWildcardChild = nullptr; + } else if (topic->name[0] == '+') { + parent->wildcardChild = nullptr; + } + } + /* Erase us from our parents set (wildcards also live here) */ + parent->children.erase(std::string_view(topic->name, topic->length)); + + /* If this node is triggered, make sure to remove it from the triggered list */ + if (topic->triggered) { + Topic *tmp[64]; + int length = 0; + for (int i = 0; i < numTriggeredTopics; i++) { + if (triggeredTopics[i] != topic) { + tmp[length++] = triggeredTopics[i]; + } + } + + for (int i = 0; i < length; i++) { + triggeredTopics[i] = tmp[i]; + } + numTriggeredTopics = length; + } + + /* Free various memory for the node */ + delete [] topic->name; + delete topic; + + if (parent == root) { + break; + } + + topic = parent; + } + } + + /* Publishes to all matching topics and wildcards. Returns whether at least one topic was a match. */ + bool publish(Topic *iterator, size_t start, size_t stop, std::string_view topic, std::pair message) { + + /* Whether we matched with at least one topic */ + bool didMatch = false; + + /* Iterate over all segments in given topic */ + for (; stop != std::string::npos; start = stop + 1) { + stop = topic.find('/', start); + std::string_view segment = topic.substr(start, stop - start); + + /* It is very important to disallow wildcards when publishing. + * We will not catch EVERY misuse this lazy way, but enough to hinder + * explosive recursion. + * Terminating wildcards MAY still get triggered along the way, if for + * instace the error is found late while iterating the topic segments. */ + if (segment.length() == 1) { + if (segment[0] == '+' || segment[0] == '#') { + /* "Fail" here, but not necessarily for the entire publish */ + return didMatch; + } + } + + /* Do we have a terminating wildcard child? */ + if (iterator->terminatingWildcardChild) { + iterator->terminatingWildcardChild->messages[messageId] = message; + + /* Add this topic to triggered */ + if (!iterator->terminatingWildcardChild->triggered) { + /* If we already have 64 triggered topics make sure to drain it here */ + if (numTriggeredTopics == 64) { + drain(); + } + + triggeredTopics[numTriggeredTopics++] = iterator->terminatingWildcardChild; + iterator->terminatingWildcardChild->triggered = true; + } + + didMatch = true; + } + + /* Do we have a wildcard child? */ + if (iterator->wildcardChild) { + didMatch |= publish(iterator->wildcardChild, stop + 1, stop, topic, message); + } + + std::map::iterator it = iterator->children.find(segment); + if (it == iterator->children.end()) { + /* Stop trying to match by exact string */ + return didMatch; + } + + iterator = it->second; + } + + /* If we went all the way we matched exactly */ + iterator->messages[messageId] = message; + + /* Add this topic to triggered */ + if (!iterator->triggered) { + /* If we already have 64 triggered topics make sure to drain it here */ + if (numTriggeredTopics == 64) { + drain(); + } + + triggeredTopics[numTriggeredTopics++] = iterator; + iterator->triggered = true; + } + + /* We obviously matches exactly here */ + return true; + } + +public: + + TopicTree(std::function cb) { + this->cb = cb; + } + + ~TopicTree() { + delete root; + } + + /* This is part of the fast path, so should be optimal */ + std::vector &getSenderFor(Subscriber *s) { + static thread_local std::vector emptyVector; + + auto it = senderHoles.find(s); + if (it != senderHoles.end()) { + return it->second; + } + + return emptyVector; + } + + /* Returns number of subscribers after the call and whether or not we were successful in subscribing */ + std::pair subscribe(std::string_view topic, Subscriber *subscriber, bool nonStrict = false) { + /* Start iterating from the root */ + Topic *iterator = root; + + /* Traverse the topic, inserting a node for every new segment separated by / */ + for (size_t start = 0, stop = 0; stop != std::string::npos; start = stop + 1) { + stop = topic.find('/', start); + std::string_view segment = topic.substr(start, stop - start); + + auto lb = iterator->children.lower_bound(segment); + + if (lb != iterator->children.end() && !(iterator->children.key_comp()(segment, lb->first))) { + iterator = lb->second; + } else { + /* Allocate and insert new node */ + Topic *newTopic = new Topic; + newTopic->parent = iterator; + newTopic->name = new char[segment.length()]; + newTopic->length = segment.length(); + newTopic->terminatingWildcardChild = nullptr; + newTopic->wildcardChild = nullptr; + memcpy(newTopic->name, segment.data(), segment.length()); + + /* Set fullname as parent's name plus our name */ + newTopic->fullName.reserve(newTopic->parent->fullName.length() + 1 + segment.length()); + + /* Only append parent's name if parent is not root */ + if (newTopic->parent != root) { + newTopic->fullName.append(newTopic->parent->fullName); + newTopic->fullName.append("/"); + } + + newTopic->fullName.append(segment); + + /* For simplicity we do insert wildcards with text */ + iterator->children.insert(lb, {std::string_view(newTopic->name, segment.length()), newTopic}); + + /* Store fast lookup to wildcards */ + if (segment.length() == 1) { + /* If this segment is '+' it is a wildcard */ + if (segment[0] == '+') { + iterator->wildcardChild = newTopic; + } + /* If this segment is '#' it is a terminating wildcard */ + if (segment[0] == '#') { + iterator->terminatingWildcardChild = newTopic; + } + } + + iterator = newTopic; + } + } + + /* If this topic is triggered, drain the tree before we join */ + if (iterator->triggered) { + if (!nonStrict) { + drain(); + } + } + + /* Add socket to Topic's Set */ + auto [it, inserted] = iterator->subs.insert(subscriber); + + /* Add Topic to list of subscriptions only if we weren't already subscribed */ + if (inserted) { + subscriber->subscriptions.push_back(iterator); + return {(unsigned int) iterator->subs.size(), true}; + } + return {(unsigned int) iterator->subs.size(), false}; + } + + bool publish(std::string_view topic, std::pair message, Subscriber *sender = nullptr) { + /* Add a hole for the sender if one */ + if (sender) { + senderHoles[sender].push_back(messageId); + } + + auto ret = publish(root, 0, 0, topic, message); + /* MessageIDs are reset on drain - this should be fine since messages itself are cleared on drain */ + messageId++; + return ret; + } + + /* Returns a pair of numSubscribers after operation, and whether we were subscribed prior */ + std::pair unsubscribe(std::string_view topic, Subscriber *subscriber, bool nonStrict = false) { + /* Subscribers are likely to have very few subscriptions (20 or fewer) */ + if (subscriber) { + /* Lookup exact Topic ptr from string */ + Topic *iterator = root; + for (size_t start = 0, stop = 0; stop != std::string::npos; start = stop + 1) { + stop = topic.find('/', start); + std::string_view segment = topic.substr(start, stop - start); + + std::map::iterator it = iterator->children.find(segment); + if (it == iterator->children.end()) { + /* This topic does not even exist */ + return {0, false}; + } + + iterator = it->second; + } + + /* Is this topic locked? If so, we cannot unsubscribe from it */ + if (iterator->locked) { + return {iterator->subs.size(), false}; + } + + /* Try and remove this topic from our list */ + for (auto it = subscriber->subscriptions.begin(); it != subscriber->subscriptions.end(); it++) { + if (*it == iterator) { + /* If this topic is triggered, drain the tree before we leave */ + if (iterator->triggered) { + if (!nonStrict) { + drain(); + } + } + + /* Remove topic ptr from our list */ + subscriber->subscriptions.erase(it); + + /* Remove us from Topic's subs */ + iterator->subs.erase(subscriber); + unsigned int numSubscribers = (unsigned int) iterator->subs.size(); + trimTree(iterator); + return {numSubscribers, true}; + } + } + } + return {0, false}; + } + + /* Can be called with nullptr, ignore it then */ + void unsubscribeAll(Subscriber *subscriber, bool mayFlush = true) { + if (subscriber) { + for (Topic *topic : subscriber->subscriptions) { + + /* We do not want to flush when closing a socket, it makes no sense to do so */ + + /* If this topic is triggered, drain the tree before we leave */ + if (mayFlush && topic->triggered) { + /* Never mind nonStrict here (yet?) */ + drain(); + } + + /* Remove us from the topic's set */ + topic->subs.erase(subscriber); + trimTree(topic); + } + subscriber->subscriptions.clear(); + } + } + + /* Drain the tree by emitting what to send with every Subscriber */ + /* Better name would be commit() and making it public so that one can commit and shutdown, etc */ + void drain() { + + /* Do nothing if nothing to send */ + if (!numTriggeredTopics) { + return; + } + + /* bug fix: Filter triggered topics without subscribers */ + int numFilteredTriggeredTopics = 0; + for (int i = 0; i < numTriggeredTopics; i++) { + if (triggeredTopics[i]->subs.size()) { + triggeredTopics[numFilteredTriggeredTopics++] = triggeredTopics[i]; + } else { + /* If we no longer have any subscribers, yet still keep this Topic alive (parent), + * make sure to clear its potential messages. */ + triggeredTopics[i]->messages.clear(); + triggeredTopics[i]->triggered = false; + } + } + numTriggeredTopics = numFilteredTriggeredTopics; + + if (!numTriggeredTopics) { + senderHoles.clear(); + messageId = 0; + return; + } + + /* bug fix: update min, as the one tracked via subscribe gets invalid as you unsubscribe */ + min = (Subscriber *)UINTPTR_MAX; + for (int i = 0; i < numTriggeredTopics; i++) { + if ((triggeredTopics[i]->subs.size()) && (min > *triggeredTopics[i]->subs.begin())) { + min = *triggeredTopics[i]->subs.begin(); + } + } + + /* Check if we really have any sockets still */ + if (min != (Subscriber *)UINTPTR_MAX) { + + /* Up to 64 triggered Topics per batch */ + std::map intersectionCache; + + /* Loop over these here */ + std::set::iterator it[64]; + std::set::iterator end[64]; + for (int i = 0; i < numTriggeredTopics; i++) { + it[i] = triggeredTopics[i]->subs.begin(); + end[i] = triggeredTopics[i]->subs.end(); + } + + /* Empty all sets from unique subscribers */ + for (int nonEmpty = numTriggeredTopics; nonEmpty; ) { + + Subscriber *nextMin = (Subscriber *)UINTPTR_MAX; + + /* The message sets relevant for this intersection */ + std::map> *perSubscriberIntersectingTopicMessages[64]; + int numPerSubscriberIntersectingTopicMessages = 0; + + uint64_t intersection = 0; + + for (int i = 0; i < numTriggeredTopics; i++) { + if ((it[i] != end[i]) && (*it[i] == min)) { + + /* Mark this intersection */ + intersection |= ((uint64_t)1 << i); + perSubscriberIntersectingTopicMessages[numPerSubscriberIntersectingTopicMessages++] = &triggeredTopics[i]->messages; + + it[i]++; + if (it[i] == end[i]) { + nonEmpty--; + } + else { + if (nextMin > *it[i]) { + nextMin = *it[i]; + } + } + } + else { + /* We need to lower nextMin to us, in the case of min being the last in a set */ + if ((it[i] != end[i]) && (nextMin > *it[i])) { + nextMin = *it[i]; + } + } + } + + /* Generate cache for intersection */ + if (intersectionCache[intersection].dataChannels.first.length() == 0) { + + /* Build the union in order without duplicates */ + std::map> complete; + for (int i = 0; i < numPerSubscriberIntersectingTopicMessages; i++) { + complete.insert(perSubscriberIntersectingTopicMessages[i]->begin(), perSubscriberIntersectingTopicMessages[i]->end()); + } + + /* Create the linear cache, {inflated, deflated} */ + Intersection res; + for (auto &p : complete) { + res.dataChannels.first.append(p.second.first); + res.dataChannels.second.append(p.second.second); + + /* Appends {id, length, length} + * We could possibly append byte offset also, + * if we want to use log2 search later. */ + Hole h; + h.lengths.first = p.second.first.length(); + h.lengths.second = p.second.second.length(); + h.messageId = p.first; + res.holes.push_back(h); + } + + cb(min, intersectionCache[intersection] = std::move(res)); + } + else { + cb(min, intersectionCache[intersection]); + } + + min = nextMin; + } + } + + /* Clear messages of triggered Topics */ + for (int i = 0; i < numTriggeredTopics; i++) { + triggeredTopics[i]->messages.clear(); + triggeredTopics[i]->triggered = false; + } + numTriggeredTopics = 0; + senderHoles.clear(); + messageId = 0; + } +}; + +} + +#endif diff --git a/nectar_modules/http/httplib/uWS/Utilities.h b/nerd_modules/http/httplib/uWS/Utilities.h similarity index 100% rename from nectar_modules/http/httplib/uWS/Utilities.h rename to nerd_modules/http/httplib/uWS/Utilities.h diff --git a/nerd_modules/http/httplib/uWS/WebSocket.h b/nerd_modules/http/httplib/uWS/WebSocket.h new file mode 100644 index 000000000..39ca0b245 --- /dev/null +++ b/nerd_modules/http/httplib/uWS/WebSocket.h @@ -0,0 +1,297 @@ +/* + * Authored by Alex Hultman, 2018-2021. + * Intellectual property of third-party. + + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + + * http://www.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef UWS_WEBSOCKET_H +#define UWS_WEBSOCKET_H + +#include "WebSocketData.h" +#include "WebSocketProtocol.h" +#include "AsyncSocket.h" +#include "WebSocketContextData.h" + +#include + +namespace uWS { + +template +struct WebSocket : AsyncSocket { + template friend struct TemplatedApp; + template friend struct HttpResponse; +private: + typedef AsyncSocket Super; + + void *init(bool perMessageDeflate, CompressOptions compressOptions, std::string &&backpressure) { + new (us_socket_ext(SSL, (us_socket_t *) this)) WebSocketData(perMessageDeflate, compressOptions, std::move(backpressure)); + return this; + } +public: + + /* Returns pointer to the per socket user data */ + USERDATA *getUserData() { + WebSocketData *webSocketData = (WebSocketData *) us_socket_ext(SSL, (us_socket_t *) this); + /* We just have it overallocated by sizeof type */ + return (USERDATA *) (webSocketData + 1); + } + + /* See AsyncSocket */ + using Super::getBufferedAmount; + using Super::getRemoteAddress; + using Super::getRemoteAddressAsText; + using Super::getNativeHandle; + + /* Simple, immediate close of the socket. Emits close event */ + using Super::close; + + enum SendStatus : int { + BACKPRESSURE, + SUCCESS, + DROPPED + }; + + /* Send or buffer a WebSocket frame, compressed or not. Returns BACKPRESSURE on increased user space backpressure, + * DROPPED on dropped message (due to backpressure) or SUCCCESS if you are free to send even more now. */ + SendStatus send(std::string_view message, OpCode opCode = OpCode::BINARY, bool compress = false) { + WebSocketContextData *webSocketContextData = (WebSocketContextData *) us_socket_context_ext(SSL, + (us_socket_context_t *) us_socket_context(SSL, (us_socket_t *) this) + ); + + /* Skip sending and report success if we are over the limit of maxBackpressure */ + if (webSocketContextData->maxBackpressure && webSocketContextData->maxBackpressure < getBufferedAmount()) { + /* Also defer a close if we should */ + if (webSocketContextData->closeOnBackpressureLimit) { + us_socket_shutdown_read(SSL, (us_socket_t *) this); + } + return DROPPED; + } + + /* Transform the message to compressed domain if requested */ + if (compress) { + WebSocketData *webSocketData = (WebSocketData *) Super::getAsyncSocketData(); + + /* Check and correct the compress hint. It is never valid to compress 0 bytes */ + if (message.length() && opCode < 3 && webSocketData->compressionStatus == WebSocketData::ENABLED) { + LoopData *loopData = Super::getLoopData(); + /* Compress using either shared or dedicated deflationStream */ + if (webSocketData->deflationStream) { + message = webSocketData->deflationStream->deflate(loopData->zlibContext, message, false); + } else { + message = loopData->deflationStream->deflate(loopData->zlibContext, message, true); + } + } else { + compress = false; + } + } + + /* Check to see if we can cork for the user */ + bool automaticallyCorked = false; + if (!Super::isCorked() && Super::canCork()) { + automaticallyCorked = true; + Super::cork(); + } + + /* Get size, alloate size, write if needed */ + size_t messageFrameSize = protocol::messageFrameSize(message.length()); + auto [sendBuffer, requiresWrite] = Super::getSendBuffer(messageFrameSize); + protocol::formatMessage(sendBuffer, message.data(), message.length(), opCode, message.length(), compress); + /* This is the slow path, when we couldn't cork for the user */ + if (requiresWrite) { + auto[written, failed] = Super::write(sendBuffer, (int) messageFrameSize); + + /* For now, we are slow here */ + free(sendBuffer); + + if (failed) { + /* Return false for failure, skipping to reset the timeout below */ + return BACKPRESSURE; + } + } + + /* Uncork here if we automatically corked for the user */ + if (automaticallyCorked) { + auto [written, failed] = Super::uncork(); + if (failed) { + return BACKPRESSURE; + } + } + + /* Every successful send resets the timeout */ + if (webSocketContextData->resetIdleTimeoutOnSend) { + Super::timeout(webSocketContextData->idleTimeoutComponents.first); + WebSocketData *webSocketData = (WebSocketData *) Super::getAsyncSocketData(); + webSocketData->hasTimedOut = false; + } + + /* Return success */ + return SUCCESS; + } + + /* Send websocket close frame, emit close event, send FIN if successful. + * Will not append a close reason if code is 0 or 1005. */ + void end(int code = 0, std::string_view message = {}) { + /* Check if we already called this one */ + WebSocketData *webSocketData = (WebSocketData *) us_socket_ext(SSL, (us_socket_t *) this); + if (webSocketData->isShuttingDown) { + return; + } + + /* We postpone any FIN sending to either drainage or uncorking */ + webSocketData->isShuttingDown = true; + + /* Format and send the close frame */ + static const int MAX_CLOSE_PAYLOAD = 123; + size_t length = std::min(MAX_CLOSE_PAYLOAD, message.length()); + char closePayload[MAX_CLOSE_PAYLOAD + 2]; + size_t closePayloadLength = protocol::formatClosePayload(closePayload, (uint16_t) code, message.data(), length); + bool ok = send(std::string_view(closePayload, closePayloadLength), OpCode::CLOSE); + + /* FIN if we are ok and not corked */ + if (!this->isCorked()) { + if (ok) { + /* If we are not corked, and we just sent off everything, we need to FIN right here. + * In all other cases, we need to fin either if uncork was successful, or when drainage is complete. */ + this->shutdown(); + } + } + + /* Emit close event */ + WebSocketContextData *webSocketContextData = (WebSocketContextData *) us_socket_context_ext(SSL, + (us_socket_context_t *) us_socket_context(SSL, (us_socket_t *) this) + ); + if (webSocketContextData->closeHandler) { + webSocketContextData->closeHandler(this, code, message); + } + + /* Make sure to unsubscribe from any pub/sub node at exit */ + webSocketContextData->topicTree.unsubscribeAll(webSocketData->subscriber, false); + delete webSocketData->subscriber; + webSocketData->subscriber = nullptr; + } + + /* Corks the response if possible. Leaves already corked socket be. */ + void cork(MoveOnlyFunction &&handler) { + if (!Super::isCorked() && Super::canCork()) { + Super::cork(); + handler(); + + /* There is no timeout when failing to uncork for WebSockets, + * as that is handled by idleTimeout */ + auto [written, failed] = Super::uncork(); + } else { + /* We are already corked, or can't cork so let's just call the handler */ + handler(); + } + } + + /* Subscribe to a topic according to MQTT rules and syntax. Returns success */ + /*std::pair*/ bool subscribe(std::string_view topic, bool nonStrict = false) { + WebSocketContextData *webSocketContextData = (WebSocketContextData *) us_socket_context_ext(SSL, + (us_socket_context_t *) us_socket_context(SSL, (us_socket_t *) this) + ); + + /* Make us a subscriber if we aren't yet */ + WebSocketData *webSocketData = (WebSocketData *) us_socket_ext(SSL, (us_socket_t *) this); + if (!webSocketData->subscriber) { + webSocketData->subscriber = new Subscriber(this); + } + + /* Cannot return numSubscribers as this is only for this particular websocket context */ + return webSocketContextData->topicTree.subscribe(topic, webSocketData->subscriber, nonStrict).second; + } + + /* Unsubscribe from a topic, returns true if we were subscribed. */ + /*std::pair*/ bool unsubscribe(std::string_view topic, bool nonStrict = false) { + WebSocketContextData *webSocketContextData = (WebSocketContextData *) us_socket_context_ext(SSL, + (us_socket_context_t *) us_socket_context(SSL, (us_socket_t *) this) + ); + + WebSocketData *webSocketData = (WebSocketData *) us_socket_ext(SSL, (us_socket_t *) this); + + /* Cannot return numSubscribers as this is only for this particular websocket context */ + return webSocketContextData->topicTree.unsubscribe(topic, webSocketData->subscriber, nonStrict).second; + } + + /* Returns whether this socket is subscribed to the specified topic */ + bool isSubscribed(std::string_view topic) { + WebSocketContextData *webSocketContextData = (WebSocketContextData *) us_socket_context_ext(SSL, + (us_socket_context_t *) us_socket_context(SSL, (us_socket_t *) this) + ); + + WebSocketData *webSocketData = (WebSocketData *) us_socket_ext(SSL, (us_socket_t *) this); + if (!webSocketData->subscriber) { + return false; + } + + Topic *t = webSocketContextData->topicTree.lookupTopic(topic); + if (t) { + return t->subs.find(webSocketData->subscriber) != t->subs.end(); + } + + return false; + } + + /* Iterates all topics of this WebSocket. Every topic is represented by its full name. + * Can be called in close handler. It is possible to modify the subscription list while + * inside the callback ONLY IF not modifying the topic passed to the callback. + * Topic names are valid only for the duration of the callback. */ + void iterateTopics(MoveOnlyFunction cb) { + WebSocketData *webSocketData = (WebSocketData *) us_socket_ext(SSL, (us_socket_t *) this); + + if (webSocketData->subscriber) { + for (Topic *t : webSocketData->subscriber->subscriptions) { + /* Lock this topic so that nobody may unsubscribe from it during this callback */ + t->locked = true; + + cb(t->fullName/*, (unsigned int) t->subs.size()*/); + + t->locked = false; + } + } + } + + /* Publish a message to a topic according to MQTT rules and syntax. Returns success. + * We, the WebSocket, must be subscribed to the topic itself and if so - no message will be sent to ourselves. + * Use App::publish for an unconditional publish that simply publishes to whomever might be subscribed. */ + bool publish(std::string_view topic, std::string_view message, OpCode opCode = OpCode::TEXT, bool compress = false) { + WebSocketContextData *webSocketContextData = (WebSocketContextData *) us_socket_context_ext(SSL, + (us_socket_context_t *) us_socket_context(SSL, (us_socket_t *) this) + ); + + /* We cannot be a subscriber of this topic if we are not a subscriber of anything */ + WebSocketData *webSocketData = (WebSocketData *) us_socket_ext(SSL, (us_socket_t *) this); + if (!webSocketData->subscriber) { + /* Failure, but still do return the number of subscribers */ + return false; + } + + /* Publish as sender, does not receive its own messages even if subscribed to relevant topics */ + bool success = webSocketContextData->publish(topic, message, opCode, compress, webSocketData->subscriber); + + /* Loop over all websocket contexts for this App */ + if (success) { + /* Success is really only determined by the first publish. We must be subscribed to the topic. */ + for (auto *adjacentWebSocketContextData : webSocketContextData->adjacentWebSocketContextDatas) { + adjacentWebSocketContextData->publish(topic, message, opCode, compress); + } + } + + return success; + } +}; + +} + +#endif // UWS_WEBSOCKET_H diff --git a/nectar_modules/http/httplib/uWS/WebSocketContext.h b/nerd_modules/http/httplib/uWS/WebSocketContext.h similarity index 81% rename from nectar_modules/http/httplib/uWS/WebSocketContext.h rename to nerd_modules/http/httplib/uWS/WebSocketContext.h index 894e1887d..84625a45d 100644 --- a/nectar_modules/http/httplib/uWS/WebSocketContext.h +++ b/nerd_modules/http/httplib/uWS/WebSocketContext.h @@ -25,7 +25,7 @@ namespace uWS { -template +template struct WebSocketContext { template friend struct TemplatedApp; template friend struct WebSocketProtocol; @@ -36,12 +36,12 @@ struct WebSocketContext { return (us_socket_context_t *) this; } - WebSocketContextData *getExt() { - return (WebSocketContextData *) us_socket_context_ext(SSL, (us_socket_context_t *) this); + WebSocketContextData *getExt() { + return (WebSocketContextData *) us_socket_context_ext(SSL, (us_socket_context_t *) this); } /* If we have negotiated compression, set this frame compressed */ - static bool setCompressed(uWS::WebSocketState *wState, void *s) { + static bool setCompressed(WebSocketState */*wState*/, void *s) { WebSocketData *webSocketData = (WebSocketData *) us_socket_ext(SSL, (us_socket_t *) s); if (webSocketData->compressionStatus == WebSocketData::CompressionStatus::ENABLED) { @@ -52,14 +52,14 @@ struct WebSocketContext { } } - static void forceClose(uWS::WebSocketState *wState, void *s, std::string_view reason = {}) { + static void forceClose(WebSocketState */*wState*/, void *s, std::string_view reason = {}) { us_socket_close(SSL, (us_socket_t *) s, (int) reason.length(), (void *) reason.data()); } /* Returns true on breakage */ - static bool handleFragment(char *data, size_t length, unsigned int remainingBytes, int opCode, bool fin, uWS::WebSocketState *webSocketState, void *s) { + static bool handleFragment(char *data, size_t length, unsigned int remainingBytes, int opCode, bool fin, WebSocketState *webSocketState, void *s) { /* WebSocketData and WebSocketContextData */ - WebSocketContextData *webSocketContextData = (WebSocketContextData *) us_socket_context_ext(SSL, us_socket_context(SSL, (us_socket_t *) s)); + WebSocketContextData *webSocketContextData = (WebSocketContextData *) us_socket_context_ext(SSL, us_socket_context(SSL, (us_socket_t *) s)); WebSocketData *webSocketData = (WebSocketData *) us_socket_ext(SSL, (us_socket_t *) s); /* Is this a non-control frame? */ @@ -90,7 +90,7 @@ struct WebSocketContext { /* Emit message event & break if we are closed or shut down when returning */ if (webSocketContextData->messageHandler) { - webSocketContextData->messageHandler((WebSocket *) s, std::string_view(data, length), (uWS::OpCode) opCode); + webSocketContextData->messageHandler((WebSocket *) s, std::string_view(data, length), (OpCode) opCode); if (us_socket_is_closed(SSL, (us_socket_t *) s) || webSocketData->isShuttingDown) { return true; } @@ -115,8 +115,8 @@ struct WebSocketContext { if (webSocketData->compressionStatus == WebSocketData::CompressionStatus::COMPRESSED_FRAME) { webSocketData->compressionStatus = WebSocketData::CompressionStatus::ENABLED; - // what's really the story here? - webSocketData->fragmentBuffer.append("...."); + /* 9 bytes of padding for libdeflate */ + webSocketData->fragmentBuffer.append("123456789"); LoopData *loopData = (LoopData *) us_loop_ext( us_socket_context_loop(SSL, @@ -124,7 +124,7 @@ struct WebSocketContext { ) ); - auto inflatedFrame = loopData->inflationStream->inflate(loopData->zlibContext, {webSocketData->fragmentBuffer.data(), webSocketData->fragmentBuffer.length() - 4}, webSocketContextData->maxPayloadLength); + auto inflatedFrame = loopData->inflationStream->inflate(loopData->zlibContext, {webSocketData->fragmentBuffer.data(), webSocketData->fragmentBuffer.length() - 9}, webSocketContextData->maxPayloadLength); if (!inflatedFrame.has_value()) { forceClose(webSocketState, s, ERR_TOO_BIG_MESSAGE_INFLATION); return true; @@ -148,7 +148,7 @@ struct WebSocketContext { /* Emit message and check for shutdown or close */ if (webSocketContextData->messageHandler) { - webSocketContextData->messageHandler((WebSocket *) s, std::string_view(data, length), (uWS::OpCode) opCode); + webSocketContextData->messageHandler((WebSocket *) s, std::string_view(data, length), (OpCode) opCode); if (us_socket_is_closed(SSL, (us_socket_t *) s) || webSocketData->isShuttingDown) { return true; } @@ -160,7 +160,7 @@ struct WebSocketContext { } } else { /* Control frames need the websocket to send pings, pongs and close */ - WebSocket *webSocket = (WebSocket *) s; + WebSocket *webSocket = (WebSocket *) s; if (!remainingBytes && fin && !webSocketData->controlTipLength) { if (opCode == CLOSE) { @@ -171,14 +171,14 @@ struct WebSocketContext { if (opCode == PING) { webSocket->send(std::string_view(data, length), (OpCode) OpCode::PONG); if (webSocketContextData->pingHandler) { - webSocketContextData->pingHandler(webSocket); + webSocketContextData->pingHandler(webSocket, {data, length}); if (us_socket_is_closed(SSL, (us_socket_t *) s) || webSocketData->isShuttingDown) { return true; } } } else if (opCode == PONG) { if (webSocketContextData->pongHandler) { - webSocketContextData->pongHandler(webSocket); + webSocketContextData->pongHandler(webSocket, {data, length}); if (us_socket_is_closed(SSL, (us_socket_t *) s) || webSocketData->isShuttingDown) { return true; } @@ -188,7 +188,7 @@ struct WebSocketContext { } else { /* Here we never mind any size optimizations as we are in the worst possible path */ webSocketData->fragmentBuffer.append(data, length); - webSocketData->controlTipLength += (int) length; + webSocketData->controlTipLength += (unsigned int) length; if (!remainingBytes && fin) { char *controlBuffer = (char *) webSocketData->fragmentBuffer.data() + webSocketData->fragmentBuffer.length() - webSocketData->controlTipLength; @@ -200,14 +200,14 @@ struct WebSocketContext { if (opCode == PING) { webSocket->send(std::string_view(controlBuffer, webSocketData->controlTipLength), (OpCode) OpCode::PONG); if (webSocketContextData->pingHandler) { - webSocketContextData->pingHandler(webSocket); + webSocketContextData->pingHandler(webSocket, std::string_view(controlBuffer, webSocketData->controlTipLength)); if (us_socket_is_closed(SSL, (us_socket_t *) s) || webSocketData->isShuttingDown) { return true; } } } else if (opCode == PONG) { if (webSocketContextData->pongHandler) { - webSocketContextData->pongHandler(webSocket); + webSocketContextData->pongHandler(webSocket, std::string_view(controlBuffer, webSocketData->controlTipLength)); if (us_socket_is_closed(SSL, (us_socket_t *) s) || webSocketData->isShuttingDown) { return true; } @@ -224,14 +224,14 @@ struct WebSocketContext { return false; } - static bool refusePayloadLength(uint64_t length, uWS::WebSocketState *wState, void *s) { - auto *webSocketContextData = (WebSocketContextData *) us_socket_context_ext(SSL, us_socket_context(SSL, (us_socket_t *) s)); + static bool refusePayloadLength(uint64_t length, WebSocketState */*wState*/, void *s) { + auto *webSocketContextData = (WebSocketContextData *) us_socket_context_ext(SSL, us_socket_context(SSL, (us_socket_t *) s)); /* Return true for refuse, false for accept */ return webSocketContextData->maxPayloadLength < length; } - WebSocketContext *init() { + WebSocketContext *init() { /* Adopting a socket does not trigger open event. * We arreive as WebSocket with timeout set and * any backpressure from HTTP state kept. */ @@ -242,10 +242,10 @@ struct WebSocketContext { WebSocketData *webSocketData = (WebSocketData *) (us_socket_ext(SSL, s)); if (!webSocketData->isShuttingDown) { /* Emit close event */ - auto *webSocketContextData = (WebSocketContextData *) us_socket_context_ext(SSL, us_socket_context(SSL, (us_socket_t *) s)); + auto *webSocketContextData = (WebSocketContextData *) us_socket_context_ext(SSL, us_socket_context(SSL, (us_socket_t *) s)); if (webSocketContextData->closeHandler) { - webSocketContextData->closeHandler((WebSocket *) s, 1006, {(char *) reason, (size_t) code}); + webSocketContextData->closeHandler((WebSocket *) s, 1006, {(char *) reason, (size_t) code}); } /* Make sure to unsubscribe from any pub/sub node at exit */ @@ -272,17 +272,18 @@ struct WebSocketContext { return s; } - auto *webSocketContextData = (WebSocketContextData *) us_socket_context_ext(SSL, us_socket_context(SSL, (us_socket_t *) s)); + auto *webSocketContextData = (WebSocketContextData *) us_socket_context_ext(SSL, us_socket_context(SSL, (us_socket_t *) s)); auto *asyncSocket = (AsyncSocket *) s; /* Every time we get data and not in shutdown state we simply reset the timeout */ - asyncSocket->timeout(webSocketContextData->idleTimeout); + asyncSocket->timeout(webSocketContextData->idleTimeoutComponents.first); + webSocketData->hasTimedOut = false; /* We always cork on data */ asyncSocket->cork(); /* This parser has virtually no overhead */ - uWS::WebSocketProtocol>::consume(data, length, (WebSocketState *) webSocketData, s); + WebSocketProtocol>::consume(data, (unsigned int) length, (WebSocketState *) webSocketData, s); /* Uncorking a closed socekt is fine, in fact it is needed */ asyncSocket->uncork(); @@ -322,10 +323,11 @@ struct WebSocketContext { asyncSocket->write(nullptr, 0); /* Behavior: if we actively drain backpressure, always reset timeout (even if we are in shutdown) */ - /* Also emit drain event if we came here with 0 backpressure */ - if (!backpressure || backpressure < asyncSocket->getBufferedAmount()) { - auto *webSocketContextData = (WebSocketContextData *) us_socket_context_ext(SSL, us_socket_context(SSL, (us_socket_t *) s)); - asyncSocket->timeout(webSocketContextData->idleTimeout); + /* Also reset timeout if we came here with 0 backpressure */ + if (!backpressure || backpressure > asyncSocket->getBufferedAmount()) { + auto *webSocketContextData = (WebSocketContextData *) us_socket_context_ext(SSL, us_socket_context(SSL, (us_socket_t *) s)); + asyncSocket->timeout(webSocketContextData->idleTimeoutComponents.first); + webSocketData->hasTimedOut = false; } /* Are we in (WebSocket) shutdown mode? */ @@ -336,10 +338,10 @@ struct WebSocketContext { asyncSocket->shutdown(); } } else if (!backpressure || backpressure > asyncSocket->getBufferedAmount()) { - /* Only call drain if we actually drained backpressure */ - auto *webSocketContextData = (WebSocketContextData *) us_socket_context_ext(SSL, us_socket_context(SSL, (us_socket_t *) s)); + /* Only call drain if we actually drained backpressure or if we came here with 0 backpressure */ + auto *webSocketContextData = (WebSocketContextData *) us_socket_context_ext(SSL, us_socket_context(SSL, (us_socket_t *) s)); if (webSocketContextData->drainHandler) { - webSocketContextData->drainHandler((WebSocket *) s); + webSocketContextData->drainHandler((WebSocket *) s); } /* No need to check for closed here as we leave the handler immediately*/ } @@ -359,6 +361,17 @@ struct WebSocketContext { /* Handle socket timeouts, simply close them so to not confuse client with FIN */ us_socket_context_on_timeout(SSL, getSocketContext(), [](auto *s) { + auto *webSocketData = (WebSocketData *)(us_socket_ext(SSL, s)); + auto *webSocketContextData = (WebSocketContextData *) us_socket_context_ext(SSL, us_socket_context(SSL, (us_socket_t *) s)); + + if (webSocketContextData->sendPingsAutomatically && !webSocketData->hasTimedOut) { + webSocketData->hasTimedOut = true; + us_socket_timeout(SSL, s, webSocketContextData->idleTimeoutComponents.second); + /* Send ping without being corked */ + ((AsyncSocket *) s)->write("\x89\x00", 2); + return s; + } + /* Timeout is very simple; we just close it */ /* Warning: we happen to know forceClose will not use first parameter so pass nullptr here */ forceClose(nullptr, s, ERR_WEBSOCKET_TIMEOUT); @@ -370,7 +383,7 @@ struct WebSocketContext { } void free() { - WebSocketContextData *webSocketContextData = (WebSocketContextData *) us_socket_context_ext(SSL, (us_socket_context_t *) this); + WebSocketContextData *webSocketContextData = (WebSocketContextData *) us_socket_context_ext(SSL, (us_socket_context_t *) this); webSocketContextData->~WebSocketContextData(); us_socket_context_free(SSL, (us_socket_context_t *) this); @@ -378,14 +391,14 @@ struct WebSocketContext { public: /* WebSocket contexts are always child contexts to a HTTP context so no SSL options are needed as they are inherited */ - static WebSocketContext *create(Loop *loop, us_socket_context_t *parentSocketContext) { - WebSocketContext *webSocketContext = (WebSocketContext *) us_create_child_socket_context(SSL, parentSocketContext, sizeof(WebSocketContextData)); + static WebSocketContext *create(Loop */*loop*/, us_socket_context_t *parentSocketContext) { + WebSocketContext *webSocketContext = (WebSocketContext *) us_create_child_socket_context(SSL, parentSocketContext, sizeof(WebSocketContextData)); if (!webSocketContext) { return nullptr; } /* Init socket context data */ - new ((WebSocketContextData *) us_socket_context_ext(SSL, (us_socket_context_t *)webSocketContext)) WebSocketContextData; + new ((WebSocketContextData *) us_socket_context_ext(SSL, (us_socket_context_t *)webSocketContext)) WebSocketContextData; return webSocketContext->init(); } }; diff --git a/nerd_modules/http/httplib/uWS/WebSocketContextData.h b/nerd_modules/http/httplib/uWS/WebSocketContextData.h new file mode 100644 index 000000000..4cac0da5e --- /dev/null +++ b/nerd_modules/http/httplib/uWS/WebSocketContextData.h @@ -0,0 +1,299 @@ +/* + * Authored by Alex Hultman, 2018-2020. + * Intellectual property of third-party. + + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + + * http://www.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef UWS_WEBSOCKETCONTEXTDATA_H +#define UWS_WEBSOCKETCONTEXTDATA_H + +#include "MoveOnlyFunction.h" +#include +#include + +#include "WebSocketProtocol.h" +#include "TopicTree.h" +#include "WebSocketData.h" + +namespace uWS { + +template struct WebSocket; + +/* todo: this looks identical to WebSocketBehavior, why not just std::move that entire thing in? */ + +template +struct WebSocketContextData { +private: + /* Used for prepending unframed messages when using dedicated compressors */ + struct MessageMetadata { + unsigned int length; + OpCode opCode; + bool compress; + /* Undefined init of all members */ + MessageMetadata() {} + MessageMetadata(unsigned int length, OpCode opCode, bool compress) + : length(length), opCode(opCode), compress(compress) {} + }; + +public: + /* All WebSocketContextData holds a list to all other WebSocketContextData in this app. + * We cannot type it USERDATA since different WebSocketContextData can have different USERDATA. */ + std::vector *> adjacentWebSocketContextDatas; + + /* The callbacks for this context */ + MoveOnlyFunction *)> openHandler = nullptr; + MoveOnlyFunction *, std::string_view, OpCode)> messageHandler = nullptr; + MoveOnlyFunction *)> drainHandler = nullptr; + MoveOnlyFunction *, int, std::string_view)> closeHandler = nullptr; + /* Todo: these should take message also; breaking change for v0.18 */ + MoveOnlyFunction *, std::string_view)> pingHandler = nullptr; + MoveOnlyFunction *, std::string_view)> pongHandler = nullptr; + + /* Settings for this context */ + size_t maxPayloadLength = 0; + + /* We do need these for async upgrade */ + CompressOptions compression; + + /* There needs to be a maxBackpressure which will force close everything over that limit */ + size_t maxBackpressure = 0; + bool closeOnBackpressureLimit; + bool resetIdleTimeoutOnSend; + bool sendPingsAutomatically; + + /* These are calculated on creation */ + std::pair idleTimeoutComponents; + + /* Each websocket context has a topic tree for pub/sub */ + TopicTree topicTree; + + /* This is run once on start-up */ + void calculateIdleTimeoutCompnents(unsigned short idleTimeout) { + unsigned short margin = 4; + /* 4, 8 or 16 seconds margin based on idleTimeout */ + while ((int) idleTimeout - margin * 2 >= margin * 2 && margin < 16) { + margin = (unsigned short) (margin << 1); + } + /* We should have no margin if not using sendPingsAutomatically */ + if (!sendPingsAutomatically) { + margin = 0; + } + idleTimeoutComponents = { + idleTimeout - margin, + margin + }; + } + + ~WebSocketContextData() { + /* We must unregister any loop post handler here */ + Loop::get()->removePostHandler(this); + Loop::get()->removePreHandler(this); + } + + WebSocketContextData() : topicTree([this](Subscriber *s, Intersection &intersection) -> int { + + /* We could potentially be called here even if we have nothing to send, since we can + * be the sender of every single message in this intersection. Also "fin" of a segment is not + * guaranteed to be set, in case remaining segments are all from us. + * Essentially, we cannot make strict assumptions here. Also, we can even come here corked, + * since publish can call drain! */ + + /* We rely on writing to regular asyncSockets */ + auto *asyncSocket = (AsyncSocket *) s->user; + + /* If we are corked, do not uncork - otherwise if we cork in here, uncork before leaving */ + bool wasCorked = asyncSocket->isCorked(); + + /* Do we even have room for potential data? */ + if (!maxBackpressure || asyncSocket->getBufferedAmount() < maxBackpressure) { + + /* Roll over all our segments */ + intersection.forSubscriber(topicTree.getSenderFor(s), [asyncSocket, this](std::pair data, bool fin) { + + /* We have a segment that is not marked as last ("fin"). + * Cork if not already so (purely for performance reasons). Does not touch "wasCorked". */ + if (!fin && !asyncSocket->isCorked() && asyncSocket->canCork()) { + asyncSocket->cork(); + } + + /* Pick uncompressed data track */ + std::string_view selectedData = data.first; + + /* Are we using compression? Fine, pick the compressed data track */ + WebSocketData *webSocketData = (WebSocketData *) asyncSocket->getAsyncSocketData(); + if (webSocketData->compressionStatus != WebSocketData::CompressionStatus::DISABLED) { + + /* This is used for both shared and dedicated paths */ + selectedData = data.second; + + /* However, dedicated compression has its own path */ + if (compression != SHARED_COMPRESSOR) { + + WebSocket *ws = (WebSocket *) asyncSocket; + + /* For performance reasons we always cork when in dedicated mode. + * Is this really the best? We already kind of cork things in Zlib? + * Right, formatting needs a cork buffer, right. Never mind. */ + if (!ws->isCorked() && ws->canCork()) { + asyncSocket->cork(); + } + + while (selectedData.length()) { + /* Interpret the data like so, because this is how we shoved it in */ + MessageMetadata mm; + memcpy((char *) &mm, selectedData.data(), sizeof(MessageMetadata)); + std::string_view unframedMessage(selectedData.data() + sizeof(MessageMetadata), mm.length); + + /* Skip this message if our backpressure is too high */ + if (maxBackpressure && ws->getBufferedAmount() > maxBackpressure) { + break; + } + + /* Here we perform the actual compression and framing */ + ws->send(unframedMessage, mm.opCode, mm.compress); + + /* Advance until empty */ + selectedData.remove_prefix(sizeof(MessageMetadata) + mm.length); + } + + /* Continue to next segment without executing below path */ + return; + } + } + + /* Common path for SHARED and DISABLED. It is an invalid assumption that we always are + * uncorked here, however the following (invalid) assumption is not critically wrong either way */ + + /* Note: this assumes we are not corked, as corking will swallow things and fail later on */ + auto [written, failed] = asyncSocket->write(selectedData.data(), (int) selectedData.length()); + /* If we want strict check for success, we can ignore this check if corked and repeat below + * when uncorking - however this is too strict as we really care about PROGRESS rather than + * ENTIRE SUCCESS - we need minor API changes to support correct checks */ + if (!failed) { + if (this->resetIdleTimeoutOnSend) { + auto *webSocketData = (WebSocketData *) us_socket_ext(SSL, (us_socket_t *) asyncSocket); + webSocketData->hasTimedOut = false; + asyncSocket->timeout(this->idleTimeoutComponents.first); + } + } + }); + } + + /* We are done sending, for whatever reasons we ended up corked while not starting with "wasCorked", + * we here need to uncork to restore the state we were called in */ + if (!wasCorked && asyncSocket->isCorked()) { + /* Regarding timeout for writes; */ + auto [written, failed] = asyncSocket->uncork(); + /* Again, this check should be more like DID WE PROGRESS rather than DID WE SUCCEED ENTIRELY */ + if (!failed) { + if (this->resetIdleTimeoutOnSend) { + auto *webSocketData = (WebSocketData *) us_socket_ext(SSL, (us_socket_t *) asyncSocket); + webSocketData->hasTimedOut = false; + asyncSocket->timeout(this->idleTimeoutComponents.first); + } + } + } + + /* Defer a close if we now have (or already had) too much backpressure, or simply skip */ + if (maxBackpressure && closeOnBackpressureLimit && asyncSocket->getBufferedAmount() > maxBackpressure) { + /* We must not immediately close the socket, as that could result in stack overflow, + * iterator invalidation and other TopicTree::drain bugs. We may shutdown the reading side of the socket, + * causing next iteration to error-close the socket from that context instead, if we want to */ + us_socket_shutdown_read(SSL, (us_socket_t *) asyncSocket); + } + + /* Reserved, unused */ + return 0; + }) { + /* We empty for both pre and post just to make sure */ + Loop::get()->addPostHandler(this, [this](Loop */*loop*/) { + /* Commit pub/sub batches every loop iteration */ + topicTree.drain(); + }); + + Loop::get()->addPreHandler(this, [this](Loop */*loop*/) { + /* Commit pub/sub batches every loop iteration */ + topicTree.drain(); + }); + } + + /* Helper for topictree publish, common path from app and ws */ + bool publish(std::string_view topic, std::string_view message, OpCode opCode, bool compress, Subscriber *sender = nullptr) { + bool didMatch = false; + + /* We frame the message right here and only pass raw bytes to the pub/subber */ + char *dst = (char *) malloc(protocol::messageFrameSize(message.size())); + size_t dst_length = protocol::formatMessage(dst, message.data(), message.length(), opCode, message.length(), false); + + /* If compression is disabled */ + if (compression == DISABLED) { + /* Leave second field empty as nobody will ever read it */ + didMatch |= topicTree.publish(topic, {std::string_view(dst, dst_length), {}}, sender); + } else { + /* DEDICATED_COMPRESSOR always takes the same path as must always have MessageMetadata as head */ + if (compress || compression != SHARED_COMPRESSOR) { + /* Shared compression mode publishes compressed, framed data */ + if (compression == SHARED_COMPRESSOR) { + /* Loop data holds shared compressor */ + LoopData *loopData = (LoopData *) us_loop_ext((us_loop_t *) Loop::get()); + + /* Compress it */ + std::string_view compressedMessage = loopData->deflationStream->deflate(loopData->zlibContext, message, true); + + /* Frame it */ + char *dst_compressed = (char *) malloc(protocol::messageFrameSize(compressedMessage.size())); + size_t dst_compressed_length = protocol::formatMessage(dst_compressed, compressedMessage.data(), compressedMessage.length(), opCode, compressedMessage.length(), true); + + /* Always publish the shortest one in any case */ + didMatch |= topicTree.publish(topic, {std::string_view(dst, dst_length), dst_compressed_length >= dst_length ? std::string_view(dst, dst_length) : std::string_view(dst_compressed, dst_compressed_length)}, sender); + + /* We don't care for allocation here */ + ::free(dst_compressed); + } else { + /* Dedicated compression mode publishes metadata + unframed uncompressed data */ + char *dst_compressed = (char *) malloc(message.length() + sizeof(MessageMetadata)); + + MessageMetadata mm( + (unsigned int) message.length(), + opCode, + compress + ); + + memcpy(dst_compressed, (char *) &mm, sizeof(MessageMetadata)); + memcpy(dst_compressed + sizeof(MessageMetadata), message.data(), message.length()); + + /* Interpretation of compressed data depends on what compressor we use */ + didMatch |= topicTree.publish(topic, { + std::string_view(dst, dst_length), + std::string_view(dst_compressed, message.length() + sizeof(MessageMetadata)) + }, sender); + + ::free(dst_compressed); + } + } else { + /* If not compressing, put same message on both tracks (only valid for SHARED_COMPRESSOR). + * DEDICATED_COMPRESSOR_xKB must never end up here as we don't put a proper head here. */ + didMatch |= topicTree.publish(topic, {std::string_view(dst, dst_length), std::string_view(dst, dst_length)}, sender); + } + } + + ::free(dst); + + return didMatch; + } +}; + +} + +#endif // UWS_WEBSOCKETCONTEXTDATA_H diff --git a/nectar_modules/http/httplib/uWS/WebSocketData.h b/nerd_modules/http/httplib/uWS/WebSocketData.h similarity index 77% rename from nectar_modules/http/httplib/uWS/WebSocketData.h rename to nerd_modules/http/httplib/uWS/WebSocketData.h index a26e953de..d0cea6f4d 100644 --- a/nectar_modules/http/httplib/uWS/WebSocketData.h +++ b/nerd_modules/http/httplib/uWS/WebSocketData.h @@ -29,14 +29,15 @@ namespace uWS { struct WebSocketData : AsyncSocketData, WebSocketState { /* This guy has a lot of friends - why? */ - template friend struct WebSocketContext; - template friend struct WebSocketContextData; - template friend struct WebSocket; + template friend struct WebSocketContext; + template friend struct WebSocketContextData; + template friend struct WebSocket; template friend struct HttpContext; private: std::string fragmentBuffer; - int controlTipLength = 0; + unsigned int controlTipLength = 0; bool isShuttingDown = 0; + bool hasTimedOut = false; enum CompressionStatus : char { DISABLED, ENABLED, @@ -49,11 +50,11 @@ struct WebSocketData : AsyncSocketData, WebSocketState { /* We could be a subscriber */ Subscriber *subscriber = nullptr; public: - WebSocketData(bool perMessageDeflate, int compressOptions, std::string &&backpressure) : AsyncSocketData(std::move(backpressure)), WebSocketState() { + WebSocketData(bool perMessageDeflate, CompressOptions compressOptions, std::string &&backpressure) : AsyncSocketData(std::move(backpressure)), WebSocketState() { compressionStatus = perMessageDeflate ? ENABLED : DISABLED; /* Initialize the dedicated sliding window */ - if (perMessageDeflate && (compressOptions & CompressOptions::DEDICATED_COMPRESSOR)) { + if (perMessageDeflate && (compressOptions != CompressOptions::SHARED_COMPRESSOR)) { deflationStream = new DeflationStream(compressOptions); } } diff --git a/nerd_modules/http/httplib/uWS/WebSocketExtensions.h b/nerd_modules/http/httplib/uWS/WebSocketExtensions.h new file mode 100644 index 000000000..93fd5df7f --- /dev/null +++ b/nerd_modules/http/httplib/uWS/WebSocketExtensions.h @@ -0,0 +1,256 @@ +/* + * Authored by Alex Hultman, 2018-2021. + * Intellectual property of third-party. + + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + + * http://www.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef UWS_WEBSOCKETEXTENSIONS_H +#define UWS_WEBSOCKETEXTENSIONS_H + +/* There is a new, huge bug scenario that needs to be fixed: + * pub/sub does not support being in DEDICATED_COMPRESSOR-mode while having + * some clients downgraded to SHARED_COMPRESSOR - we cannot allow the client to + * demand a downgrade to SHARED_COMPRESSOR (yet) until we fix that scenario in pub/sub */ +// #define UWS_ALLOW_SHARED_AND_DEDICATED_COMPRESSOR_MIX + +/* We forbid negotiating 8 windowBits since Zlib has a bug with this */ +// #define UWS_ALLOW_8_WINDOW_BITS + +#include +#include +#include +#include +#include + +namespace uWS { + +enum ExtensionTokens { + /* Standard permessage-deflate tokens */ + TOK_PERMESSAGE_DEFLATE = 1838, + TOK_SERVER_NO_CONTEXT_TAKEOVER = 2807, + TOK_CLIENT_NO_CONTEXT_TAKEOVER = 2783, + TOK_SERVER_MAX_WINDOW_BITS = 2372, + TOK_CLIENT_MAX_WINDOW_BITS = 2348, + /* Non-standard alias for Safari */ + TOK_X_WEBKIT_DEFLATE_FRAME = 2149, + TOK_NO_CONTEXT_TAKEOVER = 2049, + TOK_MAX_WINDOW_BITS = 1614 + +}; + +struct ExtensionsParser { +private: + int *lastInteger = nullptr; + +public: + /* Standard */ + bool perMessageDeflate = false; + bool serverNoContextTakeover = false; + bool clientNoContextTakeover = false; + int serverMaxWindowBits = 0; + int clientMaxWindowBits = 0; + + /* Non-standard Safari */ + bool xWebKitDeflateFrame = false; + bool noContextTakeover = false; + int maxWindowBits = 0; + + int getToken(const char *&in, const char *stop) { + while (in != stop && !isalnum(*in)) { + in++; + } + + /* Don't care more than this for now */ + static_assert(SHRT_MIN > INT_MIN, "Integer overflow fix is invalid for this platform, report this as a bug!"); + + int hashedToken = 0; + while (in != stop && (isalnum(*in) || *in == '-' || *in == '_')) { + if (isdigit(*in)) { + /* This check is a quick and incorrect fix for integer overflow + * in oss-fuzz but we don't care as it doesn't matter either way */ + if (hashedToken > SHRT_MIN && hashedToken < SHRT_MAX) { + hashedToken = hashedToken * 10 - (*in - '0'); + } + } else { + hashedToken += *in; + } + in++; + } + return hashedToken; + } + + ExtensionsParser(const char *data, size_t length) { + const char *stop = data + length; + int token = 1; + + /* Ignore anything before permessage-deflate or x-webkit-deflate-frame */ + for (; token && token != TOK_PERMESSAGE_DEFLATE && token != TOK_X_WEBKIT_DEFLATE_FRAME; token = getToken(data, stop)); + + /* What protocol are we going to use? */ + perMessageDeflate = (token == TOK_PERMESSAGE_DEFLATE); + xWebKitDeflateFrame = (token == TOK_X_WEBKIT_DEFLATE_FRAME); + + while ((token = getToken(data, stop))) { + switch (token) { + case TOK_X_WEBKIT_DEFLATE_FRAME: + /* Duplicates not allowed/supported */ + return; + case TOK_NO_CONTEXT_TAKEOVER: + noContextTakeover = true; + break; + case TOK_MAX_WINDOW_BITS: + maxWindowBits = 1; + lastInteger = &maxWindowBits; + break; + case TOK_PERMESSAGE_DEFLATE: + /* Duplicates not allowed/supported */ + return; + case TOK_SERVER_NO_CONTEXT_TAKEOVER: + serverNoContextTakeover = true; + break; + case TOK_CLIENT_NO_CONTEXT_TAKEOVER: + clientNoContextTakeover = true; + break; + case TOK_SERVER_MAX_WINDOW_BITS: + serverMaxWindowBits = 1; + lastInteger = &serverMaxWindowBits; + break; + case TOK_CLIENT_MAX_WINDOW_BITS: + clientMaxWindowBits = 1; + lastInteger = &clientMaxWindowBits; + break; + default: + if (token < 0 && lastInteger) { + *lastInteger = -token; + } + break; + } + } + } +}; + +/* Takes what we (the server) wants, returns what we got */ +static inline std::tuple negotiateCompression(bool wantCompression, int wantedCompressionWindow, int wantedInflationWindow, std::string_view offer) { + + /* If we don't want compression then we are done here */ + if (!wantCompression) { + return {false, 0, 0, ""}; + } + + ExtensionsParser ep(offer.data(), offer.length()); + + static thread_local std::string response; + response = ""; + + int compressionWindow = wantedCompressionWindow; + int inflationWindow = wantedInflationWindow; + bool compression = false; + + if (ep.xWebKitDeflateFrame) { + /* We now have compression */ + compression = true; + response = "x-webkit-deflate-frame"; + + /* If the other peer has DEMANDED us no sliding window, + * we cannot compress with anything other than shared compressor */ + if (ep.noContextTakeover) { + /* We must fail here right now (fix pub/sub) */ +#ifndef UWS_ALLOW_SHARED_AND_DEDICATED_COMPRESSOR_MIX + if (wantedCompressionWindow != 0) { + return {false, 0, 0, ""}; + } +#endif + + compressionWindow = 0; + } + + /* If the other peer has DEMANDED us to use a limited sliding window, + * we have to limit out compression sliding window */ + if (ep.maxWindowBits && ep.maxWindowBits < compressionWindow) { + compressionWindow = ep.maxWindowBits; +#ifndef UWS_ALLOW_8_WINDOW_BITS + /* We cannot really deny this, so we have to disable compression in this case */ + if (compressionWindow == 8) { + return {false, 0, 0, ""}; + } +#endif + } + + /* We decide our own inflation sliding window (and their compression sliding window) */ + if (wantedInflationWindow < 15) { + if (!wantedInflationWindow) { + response += "; no_context_takeover"; + } else { + response += "; max_window_bits=" + std::to_string(wantedInflationWindow); + } + } + } else if (ep.perMessageDeflate) { + /* We now have compression */ + compression = true; + response = "permessage-deflate"; + + if (ep.clientNoContextTakeover) { + inflationWindow = 0; + } else if (ep.clientMaxWindowBits && ep.clientMaxWindowBits != 1) { + inflationWindow = std::min(ep.clientMaxWindowBits, inflationWindow); + } + + /* Whatever we have now, write */ + if (inflationWindow < 15) { + if (!inflationWindow || !ep.clientMaxWindowBits) { + response += "; client_no_context_takeover"; + inflationWindow = 0; + } else { + response += "; client_max_window_bits=" + std::to_string(inflationWindow); + } + } + + /* This block basically lets the client lower it */ + if (ep.serverNoContextTakeover) { + /* This is an important (temporary) fix since we haven't allowed + * these two modes to mix, and pub/sub will not handle this case (yet) */ +#ifdef UWS_ALLOW_SHARED_AND_DEDICATED_COMPRESSOR_MIX + compressionWindow = 0; +#endif + } else if (ep.serverMaxWindowBits) { + compressionWindow = std::min(ep.serverMaxWindowBits, compressionWindow); +#ifndef UWS_ALLOW_8_WINDOW_BITS + /* Zlib cannot do windowBits=8, memLevel=1 so we raise it up to 9 minimum */ + if (compressionWindow == 8) { + compressionWindow = 9; + } +#endif + } + + /* Whatever we have now, write */ + if (compressionWindow < 15) { + if (!compressionWindow) { + response += "; server_no_context_takeover"; + } else { + response += "; server_max_window_bits=" + std::to_string(compressionWindow); + } + } + } + + /* A final sanity check (this check does not actually catch too high values!) */ + if ((compressionWindow && compressionWindow < 8) || compressionWindow > 15 || (inflationWindow && inflationWindow < 8) || inflationWindow > 15) { + return {false, 0, 0, ""}; + } + + return {compression, compressionWindow, inflationWindow, response}; +} + +} + +#endif // UWS_WEBSOCKETEXTENSIONS_H diff --git a/nectar_modules/http/httplib/uWS/WebSocketHandshake.h b/nerd_modules/http/httplib/uWS/WebSocketHandshake.h similarity index 95% rename from nectar_modules/http/httplib/uWS/WebSocketHandshake.h rename to nerd_modules/http/httplib/uWS/WebSocketHandshake.h index f3bb3f574..808415e4a 100644 --- a/nectar_modules/http/httplib/uWS/WebSocketHandshake.h +++ b/nerd_modules/http/httplib/uWS/WebSocketHandshake.h @@ -34,7 +34,7 @@ struct WebSocketHandshake { template struct static_for<0, T> { - void operator()(uint32_t *a, uint32_t *hash) {} + void operator()(uint32_t */*a*/, uint32_t */*hash*/) {} }; static inline uint32_t rol(uint32_t value, size_t bits) {return (value << bits) | (value >> (32 - bits));} @@ -123,7 +123,7 @@ struct WebSocketHandshake { }; for (int i = 0; i < 6; i++) { - b_input[i] = (input[4 * i + 3] & 0xff) | (input[4 * i + 2] & 0xff) << 8 | (input[4 * i + 1] & 0xff) << 16 | (input[4 * i + 0] & 0xff) << 24; + b_input[i] = (uint32_t) ((input[4 * i + 3] & 0xff) | (input[4 * i + 2] & 0xff) << 8 | (input[4 * i + 1] & 0xff) << 16 | (input[4 * i + 0] & 0xff) << 24); } sha1(b_output, b_input); uint32_t last_b[16] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 480}; diff --git a/nectar_modules/http/httplib/uWS/WebSocketProtocol.h b/nerd_modules/http/httplib/uWS/WebSocketProtocol.h similarity index 98% rename from nectar_modules/http/httplib/uWS/WebSocketProtocol.h rename to nerd_modules/http/httplib/uWS/WebSocketProtocol.h index 01171b307..db282e4c4 100644 --- a/nectar_modules/http/httplib/uWS/WebSocketProtocol.h +++ b/nerd_modules/http/httplib/uWS/WebSocketProtocol.h @@ -160,14 +160,14 @@ struct CloseFrame { static inline CloseFrame parseClosePayload(char *src, size_t length) { /* If we get no code or message, default to reporting 1005 no status code present */ - CloseFrame cf = {1005}; + CloseFrame cf = {1005, nullptr, 0}; if (length >= 2) { memcpy(&cf.code, src, 2); cf = {cond_byte_swap(cf.code), src + 2, length - 2}; if (cf.code < 1000 || cf.code > 4999 || (cf.code > 1011 && cf.code < 4000) || (cf.code >= 1004 && cf.code <= 1006) || !isValidUtf8((unsigned char *) cf.message, cf.length)) { /* Even though we got a WebSocket close frame, it in itself is abnormal */ - return {1006}; + return {1006, nullptr, 0}; } } return cf; @@ -230,7 +230,7 @@ static inline size_t formatMessage(char *dst, const char *src, size_t length, Op char mask[4]; if (!isServer) { dst[1] |= 0x80; - uint32_t random = rand(); + uint32_t random = (uint32_t) rand(); memcpy(mask, &random, 4); memcpy(dst + headerLength, &random, 4); headerLength += 4; @@ -362,9 +362,9 @@ struct WIN32_EXPORT WebSocketProtocol { static inline bool consumeContinuation(char *&src, unsigned int &length, WebSocketState *wState, void *user) { if (wState->remainingBytes <= length) { if (isServer) { - int n = wState->remainingBytes >> 2; + unsigned int n = wState->remainingBytes >> 2; unmaskInplace(src, src + n * 4, wState->mask); - for (int i = 0, s = wState->remainingBytes % 4; i < s; i++) { + for (unsigned int i = 0, s = wState->remainingBytes % 4; i < s; i++) { src[n * 4 + i] ^= wState->mask[i]; } } diff --git a/nerd_modules/http/index.ng b/nerd_modules/http/index.ng new file mode 100644 index 000000000..9a32c75ed --- /dev/null +++ b/nerd_modules/http/index.ng @@ -0,0 +1,115 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + + include(""); + include ("httpStruct.h"); + + var http = {}; + var console = require("console"); + +var _protoRes = function() {}; + +{{ + + _protoRes["prototype"]["setStatus"] = __LAZY_RES_STATUS; + _protoRes["prototype"]["setHeader"] = __LAZY_RES_HEADER; + _protoRes["prototype"]["write"] = __LAZY_RES_WRITE; + _protoRes["prototype"]["end"] = __LAZY_RES_END; +}} + +var _protoReq = function() {}; + +{{ + _protoReq["prototype"]["getMethod"] = __LAZY_REQ_METHOD; + _protoReq["prototype"]["getHeader"] = __LAZY_REQ_HEADER; + _protoReq["prototype"]["getUrl"] = __LAZY_REQ_URL; +}} + + http.createServer = function(_cb) + { + + var app = {}; + {{ + __NERD_OBJECT(app)->bind = new uWS::App(); + }} + + app.listen = function(_port, _listenCB) + { + {{ + ((uWS::App*)__NERD_OBJECT(app)->bind)->listen((int)_port, [=](auto *listenSocket) + { + if (listenSocket) + { + if(_listenCB) + { + _listenCB(__NERD_THIS); + } + __Nerd_HttpStruct httpStruct; + + auto uwsCB = [_cb, _protoRes, _protoReq](auto *resUWS, auto *reqUWS) + { + var _res = __NERD_NEW(_protoRes)(); + __NERD_OBJECT(_res)->bind = resUWS; + var _req = __NERD_NEW(_protoReq)(); + __NERD_OBJECT(_req)->bind = reqUWS; + + resUWS->onData([=](auto chunk, bool isLast) + { + if(_req["onData"]) + { + _req["onData"](_req, chunk, isLast); + } + }); + + resUWS->onAborted([=]() + { + if(_req["onAborted"]) + { + _req["onAborded"](_req); + } + else + { + resUWS->tryEnd(""); + } + }); + + _cb(null, _req, _res); + }; + + + ((uWS::App*)__NERD_OBJECT(app)->bind)->any("/*", uwsCB); + ((uWS::App*)__NERD_OBJECT(app)->bind)->run(); + + } + else + { + std::cout << "NO SOCKET" << std::endl; + } + }); + }} + }; + + return app; + }; + + return http; \ No newline at end of file diff --git a/nerd_modules/http/package.json b/nerd_modules/http/package.json new file mode 100644 index 000000000..2e8bf7dc3 --- /dev/null +++ b/nerd_modules/http/package.json @@ -0,0 +1,75 @@ +{ + "name": "http", + "description": "Nerd http module", + "main": "index.ng", + "bugs": + { + "url": "https://github.com/Nerdlang/Nerd/issues" + }, + + "directories": + { + "root": "." + }, + "homepage": "https://github.com/Nerdlang/Nerd/#readme", + "keywords": + [ + "nerd", + "nerdlang", + "http", + "web" + ], + "license": "MIT", + "licenses": [ + { + "type": "MIT", + "url": "https://github.com/Nerdlang/Nerd/blob/master/LICENSE" + } + ], + "repository": + { + "type": "git", + "url": "git+ssh://git@github.com/Nerd/nerd.git" + }, + "version": "0.0.1", + "nerd": + { + "env": ["std"], + "read_only": [], + "lib": + { + "win32": + [ + "-D_WIN32_WINNT=0x0600", + "-Wno-narrowing", + "-D_GNU_SOURCE", + "-I{__EXTERN__}/libuv/include/", + "-I{__EXTERN__}/libuv/src/", + "-D_CRT_SECURE_NO_DEPRECATE", + "-D_CRT_NONSTDC_NO_DEPRECATE", + "{__EXTERN__}/libuv/src/*.h", + "{__EXTERN__}/libuv/src/*.c", + "{__EXTERN__}/libuv/src/win/*.h", + "{__EXTERN__}/libuv/src/win/*.c", + "-I {__MODULE__}/httplib/uWS/", + "-I {__MODULE__}/httplib/uSockets/", + "{__MODULE__}/httplib/uSockets/*.c", + "{__MODULE__}/httplib/uSockets/crypto/*.c", + "{__MODULE__}/httplib/uSockets/eventing/*.c", + "-DLIBUS_NO_SSL", + "-DUWS_NO_ZLIB", + "-fpermissive", + "-w", + "-lm", + "-ladvapi32", + "-liphlpapi", + "-lpsapi", + "-lshell32", + "-luser32 ", + "-luserenv", + "-lwsock32", + "-lws2_32" + ] + } + } +} diff --git a/nerd_modules/math/index.ng b/nerd_modules/math/index.ng new file mode 100644 index 000000000..2ca45b35d --- /dev/null +++ b/nerd_modules/math/index.ng @@ -0,0 +1,334 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +var math = +{ + "E": 2.71828182845904523536, + "LN2": 0.693147180559945309417, + "LN10": 2.30258509299404568402, + "LOG2E": 1.44269504088896340736, + "LOG10E": 0.434294481903251827651, + "PI": 3.14159265358979323846, + "PIx2": 1.57079632679489661923, + "PIx4": 0.785398163397448309616, + "1/PI": 0.318309886183790671538, + "2/PI": 0.636619772367581343076, + "2/SQRTP1": 1.12837916709551257390, + "SQRT1/2": 0.707106781186547524401, + "SQRT2": 1.41421356237309504880, +}; + +/*** PROPERTIES ***/ + + + +/*** END PROPERTIES ***/ + +/*** METHODS ***/ + +math.abs = function (x) +{ + {{ + return std::abs((double)(x)); + }} +}; + +math.acos = function (x) +{ + {{ + std::acos((double)(x)); + }} +}; + +math.acosh = function (x) +{ + {{ + std::acosh((double)(x)); + }} +}; + +math.asin = function (x) +{ + {{ + std::asin((double)(x)); + }} +}; + +math.asinh = function (x) +{ + {{ + std::asinh((double)(x)); + }} +}; + +math.atan = function (x) +{ + {{ + std::atan((double)(x)); + }} +}; + +math.atanh = function (x) +{ + {{ + std::atanh((double)(x)); + }} +}; + +math.atan2 = function (x, y) +{ + {{ + std::atan2((double)(x), (double)(y)); + }} +}; + +math.cbrt = function (x) +{ + {{ + std::cbrt((double)(x)); + }} +}; + +math.ceil = function (x) +{ + {{ + std::ceil((double)(x)); + }} +}; + +math.clz32 = function (x) +{ + {{ + int n = (int)(x); + return NerdCore::Global::var(n > 0 ? (int)(31 - std::log2(n >> 0)) : 32); + }} +}; + +math.cos = function (x) +{ + {{ + return std::cos((double)(x)); + }} +}; + +math.cosh = function (x) +{ + {{ + return std::cosh((double)(x)); + }} +}; + +math.exp = function (x) +{ + {{ + return std::exp((double)(x)); + }} +}; + +math.expm1 = function (x) +{ + {{ + return std::expm1((double)(x)); + }} +}; + + +math.floor = function (x) +{ + {{ + return std::floor((double)(x)); + }} +}; + +math.fround = function (x) +{ + {{ + return (double)(x); + }} +}; + +math.hypot = function () +{ + {{ + double max = 0; + double s = 0; + for (int i = 0; i < __NERD_VARLENGTH; i++) { + double x = std::abs((double)(__NERD_VARARGS[i])); + if (x > max) { + s *= (max / x) * (max / x); + max = x; + } + s += (x == 0 && max == 0) ? 0 : (x / max) * (x / max); + } + return NerdCore::Global::var(max == INFINITY ? INFINITY : max * std::sqrt(s)); + }} +}; + +math.imul = function (x, y) +{ + {{ + return x * y; + }} +}; + +math.log = function (x) +{ + {{ + return std::log((double)(x)); + }} +}; + +math.log1p = function (x) +{ + {{ + return std::log1p((double)(x)); + }} +}; + +math.log10 = function (x) +{ + {{ + return std::log10((double)(x)); + }} +}; + +math.log2 = function (x) +{ + {{ + return std::log2((double)(x)); + }} +}; + +math.max = function () +{ + {{ + double max = -INFINITY; + for (int i = 0; i < __NERD_VARLENGTH; i++) + { + double n = (double)(__NERD_VARARGS[i]); + if (n > max) + { + max = n; + } + } + return max; + }} +}; + +math.min = function () +{ + {{ + double min = INFINITY; + for (int i = 0; i < __NERD_VARLENGTH; i++) + { + double n = (double)(__NERD_VARARGS[i]); + if (n < min) + { + min = n; + } + } + return min; + }} +}; + +math.pow = function (x, y) +{ + {{ + return std::pow((double)x, (double)y); + }} +}; + +math.random = function () +{ + {{ + return (double)(std::rand()) / (double)(RAND_MAX); + }} +}; + +math.round = function (x, y) +{ + {{ + return std::round((double)x); + }} +}; + +math.sign = function (x, y) +{ + {{ + double n = (double)(x); + if (n == 0) + { + return 0; + } + else + { + return n > 0 ? 1 : -1; + }; + }} +}; + +math.sin = function (x, y) +{ + {{ + return std::sin((double)x); + }} +}; + +math.sinh = function (x, y) +{ + {{ + return std::sinh((double)x); + }} +}; + +math.sqrt = function (x, y) +{ + {{ + return std::sqrt((double)x); + }} +}; + +math.tan = function (x, y) +{ + {{ + return std::tan((double)x); + }} +}; + +math.tanh = function (x, y) +{ + {{ + return std::tanh((double)x); + }} +}; + +math.trunc = function (x, y) +{ + {{ + return std::trunc((double)x); + }} +}; + +/*** END METHODS ***/ + +return math; \ No newline at end of file diff --git a/nerd_modules/object/index.ng b/nerd_modules/object/index.ng new file mode 100644 index 000000000..28f14ac8a --- /dev/null +++ b/nerd_modules/object/index.ng @@ -0,0 +1,55 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +var object = {}; + +object.keys = function(_obj) +{ + {{ + return __NERD_Object_Keys(_obj); + }} +}; + +object.clone = function(obj) +{ + var result = {}; + if(type_of(result) == "array") + { + result = []; + } + + for (var i in obj) + { + if (typeof(obj[i]) == "object") + { + result[i] = object.clone(obj[i]); + } + else + { + result[i] = obj[i]; + } + } + return result; +}; + +return object; \ No newline at end of file diff --git a/nerd_modules/os/index.ng b/nerd_modules/os/index.ng new file mode 100644 index 000000000..28a37b08a --- /dev/null +++ b/nerd_modules/os/index.ng @@ -0,0 +1,117 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +var os = {}; + +os.arch = function() +{ + {{ + #if defined(__x86_64__) || defined(_M_X64) + return "x86_64"; + #elif defined(i386) || defined(__i386__) || defined(__i386) || defined(_M_IX86) + return "x86_32"; + #elif defined(__ARM_ARCH_2__) + return "arm2"; + #elif defined(__ARM_ARCH_3__) || defined(__ARM_ARCH_3M__) + return "arm3"; + #elif defined(__ARM_ARCH_4T__) || defined(__TARGET_ARM_4T) + return "arm4t"; + #elif defined(__ARM_ARCH_5_) || defined(__ARM_ARCH_5E_) + return "arm5" + #elif defined(__ARM_ARCH_6T2_) || defined(__ARM_ARCH_6T2_) + return "arm6t2"; + #elif defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__) + return "arm6"; + #elif defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7S__) + return "arm7"; + #elif defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7S__) + return "arm7a"; + #elif defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7S__) + return "arm7r"; + #elif defined(__ARM_ARCH_7M__) + return "arm7m"; + #elif defined(__ARM_ARCH_7S__) + return "arm7s"; + #elif defined(__aarch64__) || defined(_M_ARM64) + return "arm64"; + #elif defined(mips) || defined(__mips__) || defined(__mips) + return "mips"; + #elif defined(__sh__) + return "superh"; + #elif defined(__powerpc) || defined(__powerpc__) || defined(__powerpc64__) || defined(__POWERPC__) || defined(__ppc__) || defined(__PPC__) || defined(_ARCH_PPC) + return "powerpc"; + #elif defined(__PPC64__) || defined(__ppc64__) || defined(_ARCH_PPC64) + return "powerpc64"; + #elif defined(__sparc__) || defined(__sparc) + return "sparc"; + #elif defined(__m68k__) + return "m68k"; + #else + return "unknown"; + #endif + }} +}; + +os.version = function() +{ + {{ + #ifdef _WIN32 + return "windows"; + #elif _WIN64 + return "windows"; + #elif __APPLE__ || __MACH__ + return "Mac OSX"; + #elif __linux__ + return "linux"; + #elif __FreeBSD__ + return "freebsd"; + #elif __unix || __unix__ + return "unix"; + #else + return "other"; + #endif + }} +}; + +os.platform = function() +{ + {{ + #ifdef _WIN32 + return "win32"; + #elif _WIN64 + return "win32"; + #elif __APPLE__ || __MACH__ + return "darwin"; + #elif __linux__ + return "linux"; + #elif __FreeBSD__ + return "freebsd"; + #elif __unix || __unix__ + return "unix"; + #else + return "other"; + #endif + }} +}; + +return os; \ No newline at end of file diff --git a/nerd_modules/path/index.ng b/nerd_modules/path/index.ng new file mode 100644 index 000000000..e1a197f7e --- /dev/null +++ b/nerd_modules/path/index.ng @@ -0,0 +1,36 @@ +var path = {}; + +{{ + #ifdef _WIN32 + var SEP = "\\"; + #elif _WIN64 + var SEP = "\\"; + #else + var SEP = "/"; + #endif +}} + + +path.join = function() +{ + var joined = ""; + + var fnArgs = arguments(); + + for(var i = 0; i < length_of(fnArgs); i++) + { + var j = i - 1; + if(i > 0 && length_of(fnArgs[j]) > 0) + { + {{ + joined += SEP; + }} + } + joined += fnArgs[i]; + + } + + return joined; +}; + +return path; \ No newline at end of file diff --git a/nerd_modules/process/index.ng b/nerd_modules/process/index.ng new file mode 100644 index 000000000..f250d5099 --- /dev/null +++ b/nerd_modules/process/index.ng @@ -0,0 +1,33 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +var process = +{ + cwd: function() + { + return __dirname; + }, + argv: __NERD_ARGS, +}; + +return process; \ No newline at end of file diff --git a/nerd_modules/querystring/index.ng b/nerd_modules/querystring/index.ng new file mode 100644 index 000000000..ef6a43736 --- /dev/null +++ b/nerd_modules/querystring/index.ng @@ -0,0 +1,3 @@ +/* + +*/ \ No newline at end of file diff --git a/nerd_modules/thread/index.ng b/nerd_modules/thread/index.ng new file mode 100644 index 000000000..bc8b5dd21 --- /dev/null +++ b/nerd_modules/thread/index.ng @@ -0,0 +1,60 @@ +// WIP + {{ + using __NERD_UNORDERED = std::unordered_map; + + auto __Nerd_THREADED_CALL = [](NerdCore::VAR _fn) + { + try + { + _fn(); + } + catch(NerdCore::VAR e) + { + std::cout << e << std::endl; + } + }; + + }} +var thread = function() +{ + var _self = {}; + _self.mutex = {}; + _self.list = {}; + {{ + __NERD_OBJECT(_self["mutex"])->bind = new __NERD_UNORDERED(); + __NERD_OBJECT(_self["list"])->bind = new std::vector(); + }} + + _self.run = function(_cb) + { + {{ + if(_cb.type == NerdCore::Enum::Type::Function) + { + ((std::vector*)__NERD_OBJECT(_self["list"])->bind)->emplace_back(std::thread(__Nerd_THREADED_CALL, _cb)); + } + }} + }; + + _self.lock = function(_key) + { + {{ + if(!_key) _key = "default"; + std::lock_guard guard((*(((__NERD_UNORDERED*)__NERD_OBJECT(_self["mutex"])->bind)))[(std::string)_key]); + }} + }; + + _self.waitForAll = function() + { + {{ + for(auto& _thread: *((std::vector*)__NERD_OBJECT(_self["list"])->bind)) + { + _thread.join(); + } + }} + }; + return _self; +}; + + + +return thread; \ No newline at end of file diff --git a/nerd_modules/wasm/index.ng b/nerd_modules/wasm/index.ng new file mode 100644 index 000000000..71d52af54 --- /dev/null +++ b/nerd_modules/wasm/index.ng @@ -0,0 +1,43 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ +include("lib/wasm.hpp"); +include(""); +include(""); + +var wasm = {}; + +wasm.run = function(_script) +{ + {{ + emscripten_run_script(((std::string)_script).c_str()); + }} +}; + +wasm.bind = function(_name, _obj) +{ + {{ + __NERD_WASM_INTERNAL_BIND[_name] = _obj; + }} +}; + +return wasm; \ No newline at end of file diff --git a/nerd_modules/wasm/lib/wasm.hpp b/nerd_modules/wasm/lib/wasm.hpp new file mode 100644 index 000000000..e1111223b --- /dev/null +++ b/nerd_modules/wasm/lib/wasm.hpp @@ -0,0 +1,38 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ +#pragma once + +#include +#include + +NerdCore::Type::object_t __NERD_WASM_INTERNAL_BIND; + +std::string __NERD_EM_BIND(std::string _name, std::string _data) +{ + return __NERD_WASM_INTERNAL_BIND[(std::string)_name](_data); +} + +EMSCRIPTEN_BINDINGS(nerd_module) +{ + emscripten::function("call", &__NERD_EM_BIND); +} diff --git a/nerd_modules/wasm/package.json b/nerd_modules/wasm/package.json new file mode 100644 index 000000000..77aa48e0f --- /dev/null +++ b/nerd_modules/wasm/package.json @@ -0,0 +1,42 @@ +{ + "name": "wasm", + "description": "Nerd base wasm module", + "main": "index.ng", + "bugs": + { + "url": "https://github.com/Nerdlang/Nerd/issues" + }, + + "directories": + { + "root": ".", + "lib": "lib" + }, + "homepage": "https://github.com/Nerdlang/Nerd#readme", + "keywords": + [ + "nerdlang", + "nerd", + "wasm", + "webassembly", + "asmjs" + ], + "license": "MIT", + "licenses": [ + { + "type": "MIT", + "url": "https://github.com/Nerdlang/Nerd/blob/master/LICENSE" + } + ], + "repository": + { + "type": "git", + "url": "git+ssh://git@github.com/Nerdlang/Nerd.git" + }, + "version": "0.0.1", + "nerd": + { + "env": ["wasm"], + "lib": ["--bind"] + } +} diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 4bc9951a6..000000000 --- a/package-lock.json +++ /dev/null @@ -1,2755 +0,0 @@ -{ - "name": "nectarjs", - "version": "0.7.115", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "version": "0.7.115", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/generator": "^7.12.5", - "babel-plugin-minify-dead-code-elimination": "^0.5.1", - "babel-plugin-minify-guarded-expressions": "^0.4.4", - "babel-plugin-remove-unused-vars": "^2.2.0", - "eslint": "^7.13.0", - "strip-comments": "^2.0.1", - "typescript": "^4.0.5" - }, - "bin": { - "nectar": "nectar.js", - "njs": "nectar.js" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dependencies": { - "@babel/highlight": "^7.12.13" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.0.tgz", - "integrity": "sha512-vu9V3uMM/1o5Hl5OekMUowo3FqXLJSw+s+66nt0fSWVWTtmosdzn45JHOB3cPtZoe6CTBDzvSw0RdOY85Q37+Q==" - }, - "node_modules/@babel/core": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.0.tgz", - "integrity": "sha512-8YqpRig5NmIHlMLw09zMlPTvUVMILjqCOtVgu+TVNWEBvy9b5I3RRyhqnrV4hjgEK7n8P9OqvkWJAFmEL6Wwfw==", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.0", - "@babel/helper-compilation-targets": "^7.13.16", - "@babel/helper-module-transforms": "^7.14.0", - "@babel/helpers": "^7.14.0", - "@babel/parser": "^7.14.0", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.0", - "@babel/types": "^7.14.0", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/generator": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.1.tgz", - "integrity": "sha512-TMGhsXMXCP/O1WtQmZjpEYDhCYC9vFhayWZPJSZCGkPJgUqX0rF0wwtrYvnzVxIjcF80tkUertXVk5cwqi5cAQ==", - "dependencies": { - "@babel/types": "^7.14.1", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.13.16", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz", - "integrity": "sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA==", - "dependencies": { - "@babel/compat-data": "^7.13.15", - "@babel/helper-validator-option": "^7.12.17", - "browserslist": "^4.14.5", - "semver": "^6.3.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", - "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", - "dependencies": { - "@babel/helper-get-function-arity": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/types": "^7.12.13" - } - }, - "node_modules/@babel/helper-get-function-arity": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", - "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", - "dependencies": { - "@babel/types": "^7.12.13" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", - "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", - "dependencies": { - "@babel/types": "^7.13.12" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", - "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", - "dependencies": { - "@babel/types": "^7.13.12" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.0.tgz", - "integrity": "sha512-L40t9bxIuGOfpIGA3HNkJhU9qYrf4y5A5LUSw7rGMSn+pcG8dfJ0g6Zval6YJGd2nEjI7oP00fRdnhLKndx6bw==", - "dependencies": { - "@babel/helper-module-imports": "^7.13.12", - "@babel/helper-replace-supers": "^7.13.12", - "@babel/helper-simple-access": "^7.13.12", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/helper-validator-identifier": "^7.14.0", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.0", - "@babel/types": "^7.14.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", - "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", - "dependencies": { - "@babel/types": "^7.12.13" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz", - "integrity": "sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw==", - "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.13.12", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.12" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", - "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", - "dependencies": { - "@babel/types": "^7.13.12" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", - "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", - "dependencies": { - "@babel/types": "^7.12.13" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", - "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==" - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz", - "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==" - }, - "node_modules/@babel/helpers": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", - "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", - "dependencies": { - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.0", - "@babel/types": "^7.14.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", - "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.0", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.1.tgz", - "integrity": "sha512-muUGEKu8E/ftMTPlNp+mc6zL3E9zKWmF5sDHZ5MSsoTP9Wyz64AhEf9kD08xYJ7w6Hdcu8H550ircnPyWSIF0Q==", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/template": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", - "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@babel/parser": "^7.12.13", - "@babel/types": "^7.12.13" - } - }, - "node_modules/@babel/traverse": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.0.tgz", - "integrity": "sha512-dZ/a371EE5XNhTHomvtuLTUyx6UEoJmYX+DT5zBCQN3McHemsuIaKKYqsc/fs26BEkHs/lBZy0J571LP5z9kQA==", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.0", - "@babel/helper-function-name": "^7.12.13", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.14.0", - "@babel/types": "^7.14.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "node_modules/@babel/types": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.1.tgz", - "integrity": "sha512-S13Qe85fzLs3gYRUnrpyeIrBJIMYv33qSTg1qoBwiG6nPKwUWAD9odSzWhEedpwOIzSEI6gbdQIWEMiCI42iBA==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.0", - "to-fast-properties": "^2.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.1.tgz", - "integrity": "sha512-5v7TDE9plVhvxQeWLXDTvFvJBdH6pEsdnl2g/dAptmuFEPedQ4Erq5rsDsX+mvAM610IhNaO2W5V1dOOnDKxkQ==", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", - "dependencies": { - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", - "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-helper-evaluate-path": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/babel-helper-evaluate-path/-/babel-helper-evaluate-path-0.5.0.tgz", - "integrity": "sha512-mUh0UhS607bGh5wUMAQfOpt2JX2ThXMtppHRdRU1kL7ZLRWIXxoV2UIV1r2cAeeNeU1M5SB5/RSUgUxrK8yOkA==" - }, - "node_modules/babel-helper-flip-expressions": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/babel-helper-flip-expressions/-/babel-helper-flip-expressions-0.4.3.tgz", - "integrity": "sha1-NpZzahKKwYvCUlS19AoizrPB0/0=" - }, - "node_modules/babel-helper-mark-eval-scopes": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/babel-helper-mark-eval-scopes/-/babel-helper-mark-eval-scopes-0.4.3.tgz", - "integrity": "sha1-0kSjvvmESHJgP/tG4izorN9VFWI=" - }, - "node_modules/babel-helper-remove-or-void": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/babel-helper-remove-or-void/-/babel-helper-remove-or-void-0.4.3.tgz", - "integrity": "sha1-pPA7QAd6D/6I5F0HAQ3uJB/1rmA=" - }, - "node_modules/babel-plugin-minify-dead-code-elimination": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.5.1.tgz", - "integrity": "sha512-x8OJOZIrRmQBcSqxBcLbMIK8uPmTvNWPXH2bh5MDCW1latEqYiRMuUkPImKcfpo59pTUB2FT7HfcgtG8ZlR5Qg==", - "dependencies": { - "babel-helper-evaluate-path": "^0.5.0", - "babel-helper-mark-eval-scopes": "^0.4.3", - "babel-helper-remove-or-void": "^0.4.3", - "lodash": "^4.17.11" - } - }, - "node_modules/babel-plugin-minify-guarded-expressions": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-guarded-expressions/-/babel-plugin-minify-guarded-expressions-0.4.4.tgz", - "integrity": "sha512-RMv0tM72YuPPfLT9QLr3ix9nwUIq+sHT6z8Iu3sLbqldzC1Dls8DPCywzUIzkTx9Zh1hWX4q/m9BPoPed9GOfA==", - "dependencies": { - "babel-helper-evaluate-path": "^0.5.0", - "babel-helper-flip-expressions": "^0.4.3" - } - }, - "node_modules/babel-plugin-remove-unused-vars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-remove-unused-vars/-/babel-plugin-remove-unused-vars-2.2.0.tgz", - "integrity": "sha512-s5OoMCGk616NnfuM4whPwvEi9iupOTLhkAlfCKnAoFJze5ZeJESdGgWI7Ovx0qIS4J9uFjDUU3ZvkvwZLUgWpw==" - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/browserslist": { - "version": "4.16.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", - "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", - "dependencies": { - "caniuse-lite": "^1.0.30001219", - "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.723", - "escalade": "^3.1.1", - "node-releases": "^1.1.71" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001223", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001223.tgz", - "integrity": "sha512-k/RYs6zc/fjbxTjaWZemeSmOjO0JJV+KguOBA3NwPup8uzxM1cMhR2BD9XmO86GuqaqTCO8CgkgH9Rz//vdDiA==" - }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "node_modules/colorette": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", - "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "node_modules/convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.3.727", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.727.tgz", - "integrity": "sha512-Mfz4FIB4FSvEwBpDfdipRIrwd6uo8gUDoRDF4QEYb4h4tSuI3ov594OrjU6on042UlFHouIJpClDODGkPcBSbg==" - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dependencies": { - "ansi-colors": "^4.1.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/eslint": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.26.0.tgz", - "integrity": "sha512-4R1ieRf52/izcZE7AlLy56uIHHDLT74Yzz2Iv2l6kDaYvEu9x+wMB5dZArVL8SYGXSYV2YAg70FcW5Y5nGGNIg==", - "dependencies": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.1", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash": "^4.17.21", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.4", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint/node_modules/@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dependencies": { - "@babel/highlight": "^7.10.4" - } - }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/eslint/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/eslint/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/eslint/node_modules/globals": { - "version": "13.8.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.8.0.tgz", - "integrity": "sha512-rHtdA6+PDBIjeEvA91rpqzEvk/k3/i7EeNQiryiWuJH0Hw9cpyJMAt2jtbAwUaRdhD+573X4vWw6IcjKPasi9Q==", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", - "dependencies": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", - "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==" - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "engines": { - "node": ">=4" - } - }, - "node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" - }, - "node_modules/json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" - }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=" - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" - }, - "node_modules/node-releases": { - "version": "1.1.71", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz", - "integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==" - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/regexpp": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", - "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "engines": { - "node": ">=4" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "engines": { - "node": ">=8" - } - }, - "node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/slice-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - }, - "node_modules/string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", - "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==", - "engines": { - "node": ">=10" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/table": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.0.tgz", - "integrity": "sha512-SAM+5p6V99gYiiy2gT5ArdzgM1dLDed0nkrWmG6Fry/bUS/m9x83BwpJUOf1Qj/x2qJd+thL6IkIx7qPGRxqBw==", - "dependencies": { - "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/table/node_modules/ajv": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.2.0.tgz", - "integrity": "sha512-WSNGFuyWd//XO8n/m/EaOlNLtO0yL8EXT/74LqT4khdhpZjP7lkj/kT5uwRmGitKEVp/Oj7ZUHeGfPtgHhQ5CA==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/table/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "engines": { - "node": ">=4" - } - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/typescript": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.4.tgz", - "integrity": "sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg==", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "requires": { - "@babel/highlight": "^7.12.13" - } - }, - "@babel/compat-data": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.0.tgz", - "integrity": "sha512-vu9V3uMM/1o5Hl5OekMUowo3FqXLJSw+s+66nt0fSWVWTtmosdzn45JHOB3cPtZoe6CTBDzvSw0RdOY85Q37+Q==" - }, - "@babel/core": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.0.tgz", - "integrity": "sha512-8YqpRig5NmIHlMLw09zMlPTvUVMILjqCOtVgu+TVNWEBvy9b5I3RRyhqnrV4hjgEK7n8P9OqvkWJAFmEL6Wwfw==", - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.0", - "@babel/helper-compilation-targets": "^7.13.16", - "@babel/helper-module-transforms": "^7.14.0", - "@babel/helpers": "^7.14.0", - "@babel/parser": "^7.14.0", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.0", - "@babel/types": "^7.14.0", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" - } - }, - "@babel/generator": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.1.tgz", - "integrity": "sha512-TMGhsXMXCP/O1WtQmZjpEYDhCYC9vFhayWZPJSZCGkPJgUqX0rF0wwtrYvnzVxIjcF80tkUertXVk5cwqi5cAQ==", - "requires": { - "@babel/types": "^7.14.1", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.13.16", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz", - "integrity": "sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA==", - "requires": { - "@babel/compat-data": "^7.13.15", - "@babel/helper-validator-option": "^7.12.17", - "browserslist": "^4.14.5", - "semver": "^6.3.0" - } - }, - "@babel/helper-function-name": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", - "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", - "requires": { - "@babel/helper-get-function-arity": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", - "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", - "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", - "requires": { - "@babel/types": "^7.13.12" - } - }, - "@babel/helper-module-imports": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", - "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", - "requires": { - "@babel/types": "^7.13.12" - } - }, - "@babel/helper-module-transforms": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.0.tgz", - "integrity": "sha512-L40t9bxIuGOfpIGA3HNkJhU9qYrf4y5A5LUSw7rGMSn+pcG8dfJ0g6Zval6YJGd2nEjI7oP00fRdnhLKndx6bw==", - "requires": { - "@babel/helper-module-imports": "^7.13.12", - "@babel/helper-replace-supers": "^7.13.12", - "@babel/helper-simple-access": "^7.13.12", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/helper-validator-identifier": "^7.14.0", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.0", - "@babel/types": "^7.14.0" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", - "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-replace-supers": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz", - "integrity": "sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw==", - "requires": { - "@babel/helper-member-expression-to-functions": "^7.13.12", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.12" - } - }, - "@babel/helper-simple-access": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", - "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", - "requires": { - "@babel/types": "^7.13.12" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", - "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", - "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==" - }, - "@babel/helper-validator-option": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz", - "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==" - }, - "@babel/helpers": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", - "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", - "requires": { - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.0", - "@babel/types": "^7.14.0" - } - }, - "@babel/highlight": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", - "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", - "requires": { - "@babel/helper-validator-identifier": "^7.14.0", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.1.tgz", - "integrity": "sha512-muUGEKu8E/ftMTPlNp+mc6zL3E9zKWmF5sDHZ5MSsoTP9Wyz64AhEf9kD08xYJ7w6Hdcu8H550ircnPyWSIF0Q==" - }, - "@babel/template": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", - "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/parser": "^7.12.13", - "@babel/types": "^7.12.13" - } - }, - "@babel/traverse": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.0.tgz", - "integrity": "sha512-dZ/a371EE5XNhTHomvtuLTUyx6UEoJmYX+DT5zBCQN3McHemsuIaKKYqsc/fs26BEkHs/lBZy0J571LP5z9kQA==", - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.0", - "@babel/helper-function-name": "^7.12.13", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.14.0", - "@babel/types": "^7.14.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.1.tgz", - "integrity": "sha512-S13Qe85fzLs3gYRUnrpyeIrBJIMYv33qSTg1qoBwiG6nPKwUWAD9odSzWhEedpwOIzSEI6gbdQIWEMiCI42iBA==", - "requires": { - "@babel/helper-validator-identifier": "^7.14.0", - "to-fast-properties": "^2.0.0" - } - }, - "@eslint/eslintrc": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.1.tgz", - "integrity": "sha512-5v7TDE9plVhvxQeWLXDTvFvJBdH6pEsdnl2g/dAptmuFEPedQ4Erq5rsDsX+mvAM610IhNaO2W5V1dOOnDKxkQ==", - "requires": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", - "requires": { - "type-fest": "^0.8.1" - } - } - } - }, - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" - }, - "acorn-jsx": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", - "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", - "requires": {} - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==" - }, - "babel-helper-evaluate-path": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/babel-helper-evaluate-path/-/babel-helper-evaluate-path-0.5.0.tgz", - "integrity": "sha512-mUh0UhS607bGh5wUMAQfOpt2JX2ThXMtppHRdRU1kL7ZLRWIXxoV2UIV1r2cAeeNeU1M5SB5/RSUgUxrK8yOkA==" - }, - "babel-helper-flip-expressions": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/babel-helper-flip-expressions/-/babel-helper-flip-expressions-0.4.3.tgz", - "integrity": "sha1-NpZzahKKwYvCUlS19AoizrPB0/0=" - }, - "babel-helper-mark-eval-scopes": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/babel-helper-mark-eval-scopes/-/babel-helper-mark-eval-scopes-0.4.3.tgz", - "integrity": "sha1-0kSjvvmESHJgP/tG4izorN9VFWI=" - }, - "babel-helper-remove-or-void": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/babel-helper-remove-or-void/-/babel-helper-remove-or-void-0.4.3.tgz", - "integrity": "sha1-pPA7QAd6D/6I5F0HAQ3uJB/1rmA=" - }, - "babel-plugin-minify-dead-code-elimination": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.5.1.tgz", - "integrity": "sha512-x8OJOZIrRmQBcSqxBcLbMIK8uPmTvNWPXH2bh5MDCW1latEqYiRMuUkPImKcfpo59pTUB2FT7HfcgtG8ZlR5Qg==", - "requires": { - "babel-helper-evaluate-path": "^0.5.0", - "babel-helper-mark-eval-scopes": "^0.4.3", - "babel-helper-remove-or-void": "^0.4.3", - "lodash": "^4.17.11" - } - }, - "babel-plugin-minify-guarded-expressions": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-guarded-expressions/-/babel-plugin-minify-guarded-expressions-0.4.4.tgz", - "integrity": "sha512-RMv0tM72YuPPfLT9QLr3ix9nwUIq+sHT6z8Iu3sLbqldzC1Dls8DPCywzUIzkTx9Zh1hWX4q/m9BPoPed9GOfA==", - "requires": { - "babel-helper-evaluate-path": "^0.5.0", - "babel-helper-flip-expressions": "^0.4.3" - } - }, - "babel-plugin-remove-unused-vars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-remove-unused-vars/-/babel-plugin-remove-unused-vars-2.2.0.tgz", - "integrity": "sha512-s5OoMCGk616NnfuM4whPwvEi9iupOTLhkAlfCKnAoFJze5ZeJESdGgWI7Ovx0qIS4J9uFjDUU3ZvkvwZLUgWpw==" - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "browserslist": { - "version": "4.16.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", - "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", - "requires": { - "caniuse-lite": "^1.0.30001219", - "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.723", - "escalade": "^3.1.1", - "node-releases": "^1.1.71" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" - }, - "caniuse-lite": { - "version": "1.0.30001223", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001223.tgz", - "integrity": "sha512-k/RYs6zc/fjbxTjaWZemeSmOjO0JJV+KguOBA3NwPup8uzxM1cMhR2BD9XmO86GuqaqTCO8CgkgH9Rz//vdDiA==" - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "colorette": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", - "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==" - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "requires": { - "ms": "2.1.2" - } - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "requires": { - "esutils": "^2.0.2" - } - }, - "electron-to-chromium": { - "version": "1.3.727", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.727.tgz", - "integrity": "sha512-Mfz4FIB4FSvEwBpDfdipRIrwd6uo8gUDoRDF4QEYb4h4tSuI3ov594OrjU6on042UlFHouIJpClDODGkPcBSbg==" - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "requires": { - "ansi-colors": "^4.1.1" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "eslint": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.26.0.tgz", - "integrity": "sha512-4R1ieRf52/izcZE7AlLy56uIHHDLT74Yzz2Iv2l6kDaYvEu9x+wMB5dZArVL8SYGXSYV2YAg70FcW5Y5nGGNIg==", - "requires": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.1", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash": "^4.17.21", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.4", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "globals": { - "version": "13.8.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.8.0.tgz", - "integrity": "sha512-rHtdA6+PDBIjeEvA91rpqzEvk/k3/i7EeNQiryiWuJH0Hw9cpyJMAt2jtbAwUaRdhD+573X4vWw6IcjKPasi9Q==", - "requires": { - "type-fest": "^0.20.2" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" - } - } - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "requires": { - "eslint-visitor-keys": "^1.1.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==" - } - } - }, - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==" - }, - "espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", - "requires": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==" - } - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" - } - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "requires": { - "flat-cache": "^3.0.4" - } - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", - "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==" - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" - }, - "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "requires": { - "is-glob": "^4.0.1" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "requires": { - "is-extglob": "^2.1.1" - } - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" - }, - "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "requires": { - "minimist": "^1.2.5" - } - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" - }, - "lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=" - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" - }, - "node-releases": { - "version": "1.1.71", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz", - "integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==" - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "requires": { - "callsites": "^3.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "regexpp": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", - "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==" - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" - }, - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - } - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "strip-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", - "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==" - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - }, - "table": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.0.tgz", - "integrity": "sha512-SAM+5p6V99gYiiy2gT5ArdzgM1dLDed0nkrWmG6Fry/bUS/m9x83BwpJUOf1Qj/x2qJd+thL6IkIx7qPGRxqBw==", - "requires": { - "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.2.0.tgz", - "integrity": "sha512-WSNGFuyWd//XO8n/m/EaOlNLtO0yL8EXT/74LqT4khdhpZjP7lkj/kT5uwRmGitKEVp/Oj7ZUHeGfPtgHhQ5CA==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - } - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" - }, - "typescript": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.4.tgz", - "integrity": "sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg==" - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "requires": { - "punycode": "^2.1.0" - } - }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "requires": { - "isexe": "^2.0.0" - } - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } - } -} diff --git a/package.json b/package.json index 8e17e11e5..0a847e761 100644 --- a/package.json +++ b/package.json @@ -1,28 +1,20 @@ { - "name": "nectarjs", - "version": "0.7.115", - "description": "Javascript's God Mode. No VM. No Bytecode. No GC. Just native binaries.", - "main": "nectar", + "name": "nerd", + "version": "0.0.16", + "description": "Nerd. JS native compiler.", + "main": "nerd", "bin": { - "nectar": "./nectar.js", - "njs": "./nectar.js" - }, - "scripts": { - "njs_test": "node script/njs_tests.js", - "njs_clang_test": "node script/njs_clang_tests.js", - "es3_test": "node script/es3_tests.js" + "nerd": "./nerd.js" }, + "scripts": {}, "repository": { "type": "git", - "url": "git+https://github.com/nectarjs/nectarjs.git" + "url": "git+https://github.com/nerdlang/nerd.git" }, "keywords": [ - "nectar", - "nectarjs", - "nectar-lang", - "javascript", - "js", - "god mode", + "nerd", + "nerdlang", + "nerd-lang", "compilation", "crossplatform", "simple", @@ -37,37 +29,29 @@ "raspberry", "stm32", "nucleo", - "express", - "uwebsocket", "http", "https", - "bytcode", + "bytecode", "wasm", "arm", "arm64", "msbuild", "cl", - "http", "webserver", - "webview", - "typescript", - "ts", - "tsc" + "webview" ], - "author": "Adrien THIERRY (https://seraum.com)", + "author": "Adrien THIERRY ", "license": "MIT", + "licenses": [ + { + "type": "MIT", + "url": "https://github.com/nerdlang/nerd/blob/master/LICENSE" + } + ], "bugs": { - "url": "https://github.com/nectarjs/nectarjs/issues" + "url": "https://github.com/nerdlang/nerd/issues" }, - "homepage": "https://nectarjs.com", + "homepage": "https://nerdlang.org", "dependencies": { - "@babel/core": "^7.12.3", - "@babel/generator": "^7.12.5", - "babel-plugin-minify-dead-code-elimination": "^0.5.1", - "babel-plugin-minify-guarded-expressions": "^0.4.4", - "babel-plugin-remove-unused-vars": "^2.2.0", - "eslint": "^7.13.0", - "strip-comments": "^2.0.1", - "typescript": "^4.0.5" } } diff --git a/script/es3_tests.js b/script/es3_tests.js deleted file mode 100644 index dd2ecd077..000000000 --- a/script/es3_tests.js +++ /dev/null @@ -1,65 +0,0 @@ -var fs = require("fs"); -var path = require("path"); -var exec = require("child_process").execSync; -var MAIN_PATH = path.resolve(path.join(__dirname, "..")); - -var NODE = process.argv[0]; - -var MAIN_TEST_PATH = path.join(MAIN_PATH, "tests", "ES3"); - -var walkSync = function(dir, filelist) -{ - files = fs.readdirSync(dir); - filelist = filelist || []; - files.forEach(function(file) - { - if (fs.statSync(dir + file).isDirectory()) - { - filelist = walkSync(dir + file + '/', filelist); - } - else { - filelist.push(dir + file); - } - }); - return filelist; -}; - -var _LIST = walkSync(MAIN_TEST_PATH + "/"); - -var error = false; -var errList = []; - -process.chdir(MAIN_PATH); - -for(var i = 0; i < _LIST.length; i++) -{ - try - { - - console.log("[*] Testing: " + path.basename(_LIST[i])); - - exec("\"" + NODE + "\" nectar.js --env test --run \"" + _LIST[i] + "\""); - - console.log("[+] Test passed: " + path.basename(_LIST[i])); - } - catch(e) - { - error = true; - errList.push(path.basename(_LIST[i])); - console.log("[!] Test error: " + path.basename(_LIST[i])); - } -} - -if(error) -{ - console.log("[!] tests exited with errors"); - console.log("[ERRORS]"); - console.dir(errList); - console.log("" + errList.length + " / " + _LIST.length); - process.exit(1); -} -else -{ - console.log("[*] tests exited without errors"); - process.exit(0); -} \ No newline at end of file diff --git a/script/njs_clang_tests.js b/script/njs_clang_tests.js deleted file mode 100644 index 3b55be94d..000000000 --- a/script/njs_clang_tests.js +++ /dev/null @@ -1,45 +0,0 @@ -var fs = require("fs"); -var path = require("path"); -var exec = require("child_process").execSync; -var MAIN_PATH = path.resolve(path.join(__dirname, "..")); - -var NODE = process.argv[0]; - -var TEST_PATH = path.join(MAIN_PATH, "tests", "NJS"); - -var error = false; -var errList = []; - -var _list = fs.readdirSync(TEST_PATH); - -for(var i = 0; i < _list.length; i++) -{ - try - { - process.chdir(MAIN_PATH); - console.log("[*] Testing: " + _list[i]); - - exec("\"" + NODE + "\" nectar.js --compiler clang++ --run \"" + path.join(TEST_PATH, _list[i]) + "\""); - - console.log("[+] Test passed: " + _list[i]); - } - catch(e) - { - error = true; - errList.push(_list[i]); - console.log("[!] Test error: " + _list[i]); - } -} - -if(error) -{ - console.log("[!] tests exited with errors"); - console.log("[ERRORS]"); - console.dir(errList); - process.exit(1); -} -else -{ - console.log("[*] tests exited without errors"); - process.exit(0); -} diff --git a/script/njs_tests.js b/script/njs_tests.js deleted file mode 100644 index 35962c16b..000000000 --- a/script/njs_tests.js +++ /dev/null @@ -1,45 +0,0 @@ -var fs = require("fs"); -var path = require("path"); -var exec = require("child_process").execSync; -var MAIN_PATH = path.resolve(path.join(__dirname, "..")); - -var NODE = process.argv[0]; - -var TEST_PATH = path.join(MAIN_PATH, "tests", "NJS"); - -var error = false; -var errList = []; - -var _list = fs.readdirSync(TEST_PATH); - -for(var i = 0; i < _list.length; i++) -{ - try - { - process.chdir(MAIN_PATH); - console.log("[*] Testing: " + _list[i]); - - exec("\"" + NODE + "\" nectar.js --run \"" + path.join(TEST_PATH, _list[i]) + "\""); - - console.log("[+] Test passed: " + _list[i]); - } - catch(e) - { - error = true; - errList.push(_list[i]); - console.log("[!] Test error: " + _list[i]); - } -} - -if(error) -{ - console.log("[!] tests exited with errors"); - console.log("[ERRORS]"); - console.dir(errList); - process.exit(1); -} -else -{ - console.log("[*] tests exited without errors"); - process.exit(0); -} \ No newline at end of file diff --git a/self/base/cli/cliParser.js b/self/base/cli/cliParser.js new file mode 100644 index 000000000..dced6999c --- /dev/null +++ b/self/base/cli/cliParser.js @@ -0,0 +1,77 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + + +var parseCLI = function(args) +{ + var result = {error: false, msg: "", cli:{}, stack: [], useless: []}; + var useless = [0, 1]; + var withArgs = ["--target", "--spec", "--env", "--stack", "-o", "--preset", "--flash", "--compiler", "-c", "--build", "-b", "--option", "--register", "-r", "--setauthor", "--setid", "--setkey", "--setapi", "--setport", "--sethash", "--setsdk", "--setndk", "--setwin_inc_ucrt", "--setwin_lib_ucrt", "--setwin_lib_um", "--setxcode"]; + var noArgs = ["--install_external", "--debug", "--conserve", "--generate", "--config", "--reinit", "--example", "--examples" , "--prepare", "--project", "--run", "--clean", "--purge", "--check", "--no-check", "--verbose", "-v", "--tips", "--version", "--help", "-h", "--release", "--no-object-hashmap"]; + + + for(var i = 0; i < args.length; i++) + { + if( useless.indexOf(i) > -1 ) + { + result.useless.push(args[i]); + } + else if( withArgs.indexOf(args[i]) > -1) + { + if(args[i+1]) + { + result.cli[args[i]] = + { + state: true, + argument: args[i+1], + }; + i++; + } + else + { + result.error = true; + result.msg = "[!] Missing argument for " + args[i]; + break; + } + } + else if(noArgs.indexOf(args[i]) > -1) + { + result.cli[args[i]] = + { + state: true, + }; + } + else if(args[i].length > 0 && args[i][0] == "-") + { + if(withArgs.indexOf(args[i]) < 0 && noArgs.indexOf(args[i]) < 0) + { + result.error = true; + result.msg = "[!] Unknown parameter : " + args[i]; + break; + } + } + else result.stack.push(args[i]); + } + return result; +} +module.exports = parseCLI; \ No newline at end of file diff --git a/self/base/compiler/target.js b/self/base/compiler/target.js new file mode 100644 index 000000000..cd6bb5a29 --- /dev/null +++ b/self/base/compiler/target.js @@ -0,0 +1,30 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +var target = ["win-x86-32", "win-x86-64", "linux-x86-32", "linux-x86-64", "linux-arm32v7", + "arduino-uno", "arduino-mega1280", "arduino-mega2560", + "wasm", "wast", "asm-js", + "mac-osx", + "nucleo-l152re", "nucleo-l432kc" + ]; +module.exports = target; diff --git a/self/base/util/copyDirSync.js b/self/base/util/copyDirSync.js new file mode 100644 index 000000000..f54b68efd --- /dev/null +++ b/self/base/util/copyDirSync.js @@ -0,0 +1,67 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +var fs = require("fs"); +var path = require("path"); + +var copyDirSync = function( source, target ) +{ + var targetFile = target; + if ( fs.existsSync( target ) ) + { + if ( fs.lstatSync( target ).isDirectory() ) + { + targetFile = path.join( target, path.basename( source ) ); + } + } + fs.copyFileSync(source, targetFile); +} + +var copyFolderRecursiveSync = function( source, target, _root ) +{ + var files = []; + var targetFolder = path.join( target, path.basename( source ) ); + if(_root) targetFolder = target; + if ( !fs.existsSync( targetFolder ) ) + { + fs.mkdirSync( targetFolder ); + } + + if ( fs.lstatSync( source ).isDirectory() ) + { + files = fs.readdirSync( source ); + for(var i = 0; i < files.length; i++) + { + var curSource = path.join( source, files[i] ); + if ( fs.lstatSync( curSource ).isDirectory() ) + { + copyFolderRecursiveSync( curSource, targetFolder ); + } else + { + copyDirSync( curSource, targetFolder ); + } + } + } +} + +module.exports = copyFolderRecursiveSync; \ No newline at end of file diff --git a/self/base/util/copyRecursive.js b/self/base/util/copyRecursive.js new file mode 100644 index 000000000..44b794d56 --- /dev/null +++ b/self/base/util/copyRecursive.js @@ -0,0 +1,46 @@ +var fs = require("fs"); +var path = require("path"); + +var copyRecursiveSync = function(src, dest) +{ + if(!fs.existsSync(src)) + { + console.log("[!] Warning: " + src + " doesn't exist"); + return; + } + if(fs.lstatSync( src ).isDirectory()) + { + var _newDest = path.dirname(dest); + global.copyDirSync(src, _newDest, true); + } + else + { + var _path = []; + + var _newDest = path.dirname(dest); + + _path.push(_newDest); + + while(path.dirname(_newDest) != _newDest) + { + _newDest = path.dirname(_newDest); + if(_newDest.indexOf(global.NERD_PATH) == 0) + { + _path.push(_newDest); + } + } + + for(var i = _path.length; i > -1; i--) + { + try + { + fs.mkdirSync(_path[i]); + } + catch(e){} + } + + fs.copyFileSync(src, dest); + } +}; + +module.exports = copyRecursiveSync; diff --git a/self/base/util/flash.js b/self/base/util/flash.js new file mode 100644 index 000000000..131e43a3e --- /dev/null +++ b/self/base/util/flash.js @@ -0,0 +1,92 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ +var fs = require("fs"); +var path = require("path"); + + + +var execFlashArduino = function(from, to, model, driver, bauds, verb) +{ + var spawn = require("child_process").spawn; + var _flash = spawn("avrdude", ["-p", model, "-c", driver, "-P", to, "-b", bauds, "-F", "-U", "flash:w:"+from]); + + _flash.stdout.on("data", function(data) + { + if(verb) process.stdout.write(data.toString()); + }); + + _flash.stderr.on("data", function(data) + { + if(verb) process.stdout.write(data.toString()); + }); + + _flash.on("error", function(err) + { + console.log("[!] Error :"); + console.log(err); + }); + + _flash.on("close", function(code) + { + console.log("[+] Flashed"); + }); +} + +var execFlashSTM32 = function(from, to) +{ + try + { + fs.writeFileSync(path.join(to, from), fs.readFileSync(from)); + console.log("[+ Flashed]"); + } + catch(e) + { + console.log("[!] Your file is compiled, but an error occured while flashing, please try again."); + } + +} + + +var Flash = function(from, to, target, verb) +{ + switch(target) + { + case "uno": + execFlashArduino(from, to, "ATMEGA328P", "arduino", "19200", verb); + break; + case "mega1280": + execFlashArduino(from, to, "m1280", "arduino", "57600", verb); + break; + case "mega2560": + execFlashArduino(from, to, "m2560", "wiring", "115200", verb); + break; + case "nucleo-l152re": + case "nucleo-l432kc": + execFlashSTM32(from, to); + break; + default: + console.log("Nothing to do for target : " + target); + break; + } +} +module.exports = Flash; \ No newline at end of file diff --git a/self/base/util/getExt.js b/self/base/util/getExt.js new file mode 100644 index 000000000..834e8e3c0 --- /dev/null +++ b/self/base/util/getExt.js @@ -0,0 +1,63 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +var getExt = function(target) +{ + switch(target) + { + case "wasm": + return ".wasm"; + break; + case "asm-js": + return ".asm.js"; + break; + case "wast": + return ".wast"; + break; + case "win-x86-32": + case "win-x86-64": + return "-" + target + ".exe"; + break; + case "nucleo-l432kc": + case "nucleo-l152re": + case "mac-osx": + case "linux-x86-32": + case "linux-x86-64": + case "linux-arm32v7": + return "-" + target + ".bin"; + break; + case "arduino-uno": + return "-" + target + ".hex"; + break; + case "arduino-mega1280": + return "-" + target + ".hex"; + break; + case "arduino-mega2560": + return "-" + target + ".hex"; + break; + default: + return ".bin"; + break; + } +} +module.exports = getExt; \ No newline at end of file diff --git a/self/base/util/getTips.js b/self/base/util/getTips.js new file mode 100644 index 000000000..b3407974b --- /dev/null +++ b/self/base/util/getTips.js @@ -0,0 +1,64 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +var getTips = function(target, file) +{ + switch(target) + { + case "wasm": + return ""; + break; + case "asm-js": + return "[*] Tips : run this file with node : 'node " + file + "', or embed it in a .html page with "; + break; + case "wast": + return ""; + break; + case "win-x86-32": + case "win-x86-64": + return "[*] Tips : on Linux, you can run this .exe with Wine : 'wine " + file + "'"; + break; + case "linux-x86-32": + case "linux-x86-64": + case "linux-arm32v7": + return "[*] Tips : on Linux, don't forget to : 'chmod +x " + file + "'."; + break; + case "arduino-uno": + return "[*] Tips : avrdude -p ATMEGA328P -c arduino -P [COMPORT] -b 19200 -F -U flash:w:" + file; + break; + case "arduino-mega1280": + return "[*] Tips : avrdude -p m1280 -c arduino -P [COMPORT] -b 57600 -F -U flash:w:" + file; + break; + case "arduino-mega2560": + return "[*] Tips : avrdude -p m2560 -c wiring -P [COMPORT] -b 115200 -F -U flash:w:" + file; + break; + case "nucleo-l152re": + case "nucleo-l432kc": + return "[*] Connect your nucleo on your computer, and symple copy/paste " + file + " on the nucleo drive"; + default: + return ""; + break; + } +} + +module.exports = getTips; \ No newline at end of file diff --git a/self/base/util/rmdir.js b/self/base/util/rmdir.js new file mode 100644 index 000000000..cf63dfcbc --- /dev/null +++ b/self/base/util/rmdir.js @@ -0,0 +1,103 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ +var fs = require("fs"); + +var rmdir = function(dir, callback) +{ + fs.readdir(dir, function(err, list) + { + if(err) + { + try + { + fs.unlink(dir, function(err) + { + callback(err); + }); + } + catch(e){} + } + else + { + var i = 0; + var j = list.length; + var cb = function(){ fs.rmdir(dir, function(err){if(callback && typeof(callback) == "function") callback(err);});}; + recursiveRm(dir, i, j, list, cb); + return; + } + }); + + var recursiveRm = function(from, i, j, list, cb) + { + + var nextFile = function() + { + i++; + if(i < j) + { + recursiveRm(from, i, j, list, cb); + } + else + { + if(cb && typeof(cb) == "function") + cb(); + } + } + var filename = ""; + + try + { + filename = path.join(from, list[i]); + } + catch(e) + { + nextFile(); + return; + } + + fs.stat(filename, function(err, stat) + { + if(err) + { + nextFile(); + } + else if(stat.isDirectory()) + { + if(filename) + { + rmdir(filename, nextFile); + } + else + { + nextFile(); + } + } + else + { + fs.unlink(filename, nextFile); + } + }); + } +}; + +module.exports = rmdir; \ No newline at end of file diff --git a/self/compiler/native/compiler.js b/self/compiler/native/compiler.js new file mode 100644 index 000000000..8d83b5ef9 --- /dev/null +++ b/self/compiler/native/compiler.js @@ -0,0 +1,179 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +global.ENV = loadEnv(); +function loadEnv() +{ + var _res = {}; + var _folder = path.join(__dirname, "/env/"); + var _list = fs.readdirSync(_folder); + for(var _el in _list) + { + var _name = _list[_el].substring(0, _list[_el].length-3); + var _e = require(path.join(_folder, _list[_el])); + _res[_name] = _e; + } + return _res; +} + +function Compiler() +{ + var _handler = this; + this.MAIN_PATH = __dirname; + this.TARGET = "standard"; + this.SPEC; + this.EXPOSE = ""; + this.STD = ""; + this.GEN = ""; + this.PATH = ""; + this.LIBS = ""; + this.STATE = ""; + this.PACK = []; + this.DIR = []; + + if(CLI.stack[0]) this.PATH = path.dirname(CLI.stack[0]) + path.sep; + + this.ENV = ENV["std"]; + if(CLI.cli["--env"]) + { + var _env = CLI.cli["--env"].argument; + if(ENV[_env]) + { + this.ENV = ENV[_env]; + } + else + { + console.log("[!] ENV: " + _env + " does not exist, please select one of [" + Object.keys(ENV).toString() + "]"); + process.exit(1); + } + } + this.COMPILER = this.ENV.compiler; + this.PRESET = "none"; + + this.MAIN = fs.readFileSync(path.join(__dirname, "squel", this.ENV.main)).toString(); + + this.IN = ""; + this.OUT = ""; + this.TMP_FOLDER = ""; + this.OPTION = ""; + + this.INIT = ""; + this.DECL = ""; + this.REQUIRE = ""; + this.INCLUDE = ""; + + this.INFO = + { + FUNCTION: [], + CACHE: {}, + VALUE: [], + CALL: {}, + SCOPE: {}, + HOISTING: [], + }; + + if(this.ENV.stdlib) + { + for(var _s in this.ENV.stdlib) + { + if(typeof this.ENV.stdlib[_s] == "string") + { + this.DECL += "var " + this.ENV.stdlib[_s] + ";"; + this.STD += this.ENV.stdlib[_s] + " = require(\"" + this.ENV.stdlib[_s] + "\");"; + } + else if(typeof this.ENV.stdlib[_s] == "object") + { + this.DECL += "var " + this.ENV.stdlib[_s].bind + ";"; + this.STD += this.ENV.stdlib[_s].bind + " = require(\"" + this.ENV.stdlib[_s].module + "\");"; + } + } + } + + this.CODE = ""; + + this.FOOTER = ""; + + /*** METHODS ***/ + this.Parse = function(code, _file) + { + var _env = createEnv(_handler.PATH, _file); + code = this.STD + code; + parseCode(code, 0, _env); + parseAST(_env); + var _generated = generateCode(_env); + _handler.MAIN = _handler.MAIN.replace("{CODE}", _generated); + _handler.MAIN = _handler.MAIN.replace("{INIT}", COMPILER.INIT); + _handler.MAIN = _handler.MAIN.replace("{DECL}", COMPILER.DECL); + _handler.MAIN = _handler.MAIN.replace("{INCLUDE}", COMPILER.INCLUDE); + _handler.MAIN = _handler.MAIN.replace("{{__PLATFORM__}}", os.platform()); + } + + this.Prepare = function(_folder) + { + if((!CLI.cli["--profile"]) || CLI.cli["--profile"].argument != "use") + { + copyDirSync(path.join(__dirname, "nerdcore"), _folder, false); + } + }; + + this.Out = function(_name) + { + if(os.platform() == "win32" && path.extname(_name) != ".exe") _handler.OUT = _name + ".exe"; + else _handler.OUT = _name; + if(COMPILER.ENV.out && typeof COMPILER.ENV.out == "function") + { + _handler.OUT = COMPILER.ENV.out(_name); + } + return _handler.OUT; + } + + this.CLI = function(compiler, out, _in, option) + { + return this.ENV.cli(compiler, this.preset, out, _in, option, this.TARGET, this.SPEC); + } + + this.Compile = function(_folder, _file) + { + + fs.writeFileSync(_file, _handler.MAIN); + process.chdir(_folder); + var _exec = _handler.CLI(_handler.COMPILER, _handler.OUT, _file, _handler.OPTION); + execSync(_exec); + + } + + this.Package = function() + { + if(this.PACK && this.PACK.length) + { + for(var i = 0; i < this.PACK.length; i++) + { + copyRecursiveSync(this.PACK[i], this.OUT); + } + } + } + /*** END METHODS ***/ + +} + +module.exports = new Compiler(); diff --git a/self/compiler/native/env/arduino.js b/self/compiler/native/env/arduino.js new file mode 100644 index 000000000..c4136195b --- /dev/null +++ b/self/compiler/native/env/arduino.js @@ -0,0 +1,67 @@ +var OPTIONS = +{ + "mega": { preset: "-DF_CPU=16000000UL -mmcu=atmega2560", variant: "mega"}, + "mega2560": { preset: "-DF_CPU=16000000UL -mmcu=atmega2560", variant: "mega"}, + "mega1280": { preset: "-DF_CPU=16000000UL -mmcu=atmega1280", variant: "mega"}, + "mega328p": { preset: "-DF_CPU=16000000UL -mmcu=atmega328p", variant: "standard"}, + "uno": { preset: "-DF_CPU=16000000UL -mmcu=atmega328p", variant: "standard"}, + "nano": { preset: "-DF_CPU=16000000UL -mmcu=atmega328p", variant: "standard"}, + "nano2": { preset: "-DF_CPU=16000000UL -mmcu=atmega168", variant: "standard"}, + "nano3": { preset: "-DF_CPU=16000000UL -mmcu=atmega328p", variant: "standard"} +} + +function getOptions() +{ + var OPT = + { + elf: false, + cli: false, + }; + + if(CLI.cli["--option"] && CLI.cli["--option"].argument) + { + var _args = CLI.cli["--option"].argument.split(","); + for(var i = 0; i < _args.length; i++) + { + OPT[_args[i]] = true; + } + } + return OPT; +} + +var ARDUINO = +{ + name: "arduino", + main: "arduino.cpp", + cli: function(compiler, preset, out, _in, option, target, spec) + { + var OPT = getOptions(); + var _cliOption = ""; + if(CLI.cli["--option"]) _cliOption = CLI.cli["--option"].argument; + + if(!target || !OPTIONS[target]) + { + console.log("[!] No target or bad target selected, switching to 'uno'"); + target = "uno"; + } + var _cli = `${compiler} ${OPTIONS[target].preset} -D__NERD__OBJECT_VECTOR -DARDUINO_ARCH_AVR -w -Os -fno-exceptions -fno-rtti -fno-stack-protector -fomit-frame-pointer -ffunction-sections -fdata-sections -Wl,--gc-sections \ + -I ${extern}/arduino/avr -I ${extern}/arduino/avr/variants/${OPTIONS[target].variant}/ -I ${extern}/arduino/avr/cores/arduino -I ${extern}/arduino/stlarduino ${extern}/arduino/stlarduino/ios.cpp ${extern}/arduino/avr/cores/arduino/abi.cpp ${extern}/arduino/stlarduino/new*.cpp ${extern}/arduino/stlarduino/char_traits.cpp ${extern}/arduino/stlarduino/del*.cpp ${extern}/arduino/stlarduino/stdexcept.cpp ${extern}/arduino/stlarduino/func_exception.cpp ${extern}/arduino/stlarduino/ostream_helpers.cpp -fno-threadsafe-statics -lm ${COMPILER.LIBS} -o ${out} ${_in} ${_cliOption}`; + + if(!OPT.elf) _cli += `&& avr-objcopy -O ihex -R .eeprom ${out}`; + if(OPT.cli) console.log("[*]" + _cli); + + return _cli; + }, + compiler: "avr-g++ -std=c++17", + stdlib:[], + out: function(_name) + { + var OPT = getOptions(); + if(OPT.elf) _name += ".elf"; + else _name += ".hex"; + return _name; + }, + +} + +module.exports = ARDUINO; \ No newline at end of file diff --git a/self/compiler/native/env/js.js b/self/compiler/native/env/js.js new file mode 100644 index 000000000..e6bec02e3 --- /dev/null +++ b/self/compiler/native/env/js.js @@ -0,0 +1,141 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ +var _debug = " -g "; +var JS = +{ + name: "js", + main: "js.cpp", + compiler: "g++", + stdlib: ["console", "JSON", "Module"], + cli: function(compiler, preset, out, _in, option) + { + var _cachePath = path.join(process.cwd(), "..", "cached_" + COMPILER.ENV.name + "_" + os.platform + "_" + VERSION); + var _precompiled = path.join(_cachePath, "nerd.o"); + + var _stack = 0; + if(CLI.cli["--stack"]) + { + try + { + _stack = parseInt(CLI.cli["--stack"].argument); + } + catch(e) + { + console.log("[!] Error: --stack flags required a number, received -> " + CLI.cli["--stack"].argument); + process.exit(1); + } + } + + if(!fs.existsSync(_precompiled)) + { + + var _args = " -flto -Ofast "; + if(preset == "debug") + { + console.log("Building core with debug"); + _args = _debug; + } + + console.log(`[+] Creating Nerd binary lib for ${COMPILER.ENV.name + "_" + os.platform + "_" + VERSION}`); + console.log(`${compiler} -std=c++17 ${_args} -c nerdcore/src/nerd.cpp -o "${_precompiled}"`); + try { fs.mkdirSync(_cachePath); } catch(e){}; + execSync(`${compiler} -std=c++17 ${_args} -c nerdcore/src/nerd.cpp -o "${_precompiled}"`); + console.log("[+] Compiling with precompiled Nerd lib"); + } + + if(compiler == "cl" || compiler.indexOf("cl ") == 0) + { + console.log("[!] cl is not supported, please use g++, clang++, em++ or avr-g++"); + process.exit(1); + } + + var _hashmap = ""; + if(CLI.cli['--no-object-hashmap']) _hashmap = "-D__NERD__OBJECT_VECTOR"; + + if(_stack) _stack = "-Wl,--stack," + _stack; + else _stack = ""; + + var _sysVNetLibs = ""; + if(os.platform() == "sunos") _sysVNetLibs = "-lsocket -lnsl"; + + var _cliOption = ""; + if(CLI.cli["--option"]) _cliOption = CLI.cli["--option"].argument; + + + if(CLI.cli["--profile"]) + { + if(!CLI.cli["--conserve"]) CLI.cli["--conserve"] = true; + if(CLI.cli["--profile"].argument == "gen") + { + _cliOption += " -fprofile-generate"; + console.log("[*] Profiling data will be stored in: " + COMPILER.TMP_FOLDER); + } + else if(CLI.cli["--profile"].argument == "use") + { + _cliOption += " -fprofile-use"; + console.log("[*] Using profile data from: " + COMPILER.TMP_FOLDER); + } + else + { + console.log("[!] Please use --profile with gen or use"); + } + } + + var _files = `"${_precompiled}" "${_in}"`; + if(os.platform == "win32") _files = `"${_in}" "${_precompiled}"`; + + if(preset == "none") + { + return `${compiler} ${_stack} -std=c++17 ${_files} -g -s ${COMPILER.LIBS} -pthread -o "${out}" ${_sysVNetLibs} ${_cliOption}`; + } + else if(preset == "debug") + { + console.log(`${compiler} ${_stack} -std=c++17 ${_files} ${_debug} -s ${COMPILER.LIBS} -pthread -o "${out}" ${_sysVNetLibs} ${_cliOption}`); + return `${compiler} ${_stack} -std=c++17 ${_files} ${_debug} -s ${COMPILER.LIBS} -pthread -o "${out}" ${_sysVNetLibs} ${_cliOption}`; + } + else if(preset == "size") + { + return `${compiler} ${_stack} -std=c++17 ${_files} -pthread -Os -fno-rtti -fno-stack-protector -fomit-frame-pointer -s ${COMPILER.LIBS} -o "${out}" ${_sysVNetLibs} ${_cliOption}`; + } + else + { + var _opt = "-O"; + if(os.platform() == "darwin" || compiler.indexOf("clang") > -1) _opt += "3"; + else _opt += "fast"; + _opt += " -flto"; + return `${compiler} ${_stack} -std=c++17 ${_files} ${_opt} -pthread -s ${COMPILER.LIBS} -o "${out}" ${_sysVNetLibs} ${_cliOption}`; + } + }, + write: function(_content, _in) + { + if(CLI.cli["--profile"] && CLI.cli["--profile"].argument == "use") + { + return; + } + + fs.writeFileSync(_in, _content); + } + +} + +module.exports = JS; diff --git a/self/compiler/native/env/std.js b/self/compiler/native/env/std.js new file mode 100644 index 000000000..7f55a4df4 --- /dev/null +++ b/self/compiler/native/env/std.js @@ -0,0 +1,141 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ +var _debug = " -g "; +var STD = +{ + name: "std", + main: "std.cpp", + compiler: "g++", + stdlib: [], + cli: function(compiler, preset, out, _in, option) + { + var _cachePath = path.join(process.cwd(), "..", "cached_" + COMPILER.ENV.name + "_" + os.platform + "_" + VERSION); + var _precompiled = path.join(_cachePath, "nerd.o"); + + var _stack = 0; + if(CLI.cli["--stack"]) + { + try + { + _stack = parseInt(CLI.cli["--stack"].argument); + } + catch(e) + { + console.log("[!] Error: --stack flags required a number, received -> " + CLI.cli["--stack"].argument); + process.exit(1); + } + } + + if(!fs.existsSync(_precompiled)) + { + + var _args = " -flto -Ofast "; + if(preset == "debug") + { + console.log("Building core with debug"); + _args = _debug; + } + + console.log(`[+] Creating Nerd binary lib for ${COMPILER.ENV.name + "_" + os.platform + "_" + VERSION}`); + console.log(`${compiler} -std=c++17 ${_args} -c nerdcore/src/nerd.cpp -o "${_precompiled}"`); + try { fs.mkdirSync(_cachePath); } catch(e){}; + execSync(`${compiler} -std=c++17 ${_args} -c nerdcore/src/nerd.cpp -o "${_precompiled}"`); + console.log("[+] Compiling with precompiled Nerd lib"); + } + + if(compiler == "cl" || compiler.indexOf("cl ") == 0) + { + console.log("[!] cl is not supported, please use g++, clang++, em++ or avr-g++"); + process.exit(1); + } + + var _hashmap = ""; + if(CLI.cli['--no-object-hashmap']) _hashmap = "-D__NERD__OBJECT_VECTOR"; + + if(_stack) _stack = "-Wl,--stack," + _stack; + else _stack = ""; + + var _sysVNetLibs = ""; + if(os.platform() == "sunos") _sysVNetLibs = "-lsocket -lnsl"; + + var _cliOption = ""; + if(CLI.cli["--option"]) _cliOption = CLI.cli["--option"].argument; + + + if(CLI.cli["--profile"]) + { + if(!CLI.cli["--conserve"]) CLI.cli["--conserve"] = true; + if(CLI.cli["--profile"].argument == "gen") + { + _cliOption += " -fprofile-generate"; + console.log("[*] Profiling data will be stored in: " + COMPILER.TMP_FOLDER); + } + else if(CLI.cli["--profile"].argument == "use") + { + _cliOption += " -fprofile-use"; + console.log("[*] Using profile data from: " + COMPILER.TMP_FOLDER); + } + else + { + console.log("[!] Please use --profile with gen or use"); + } + } + + var _files = `"${_precompiled}" "${_in}"`; + if(os.platform == "win32") _files = `"${_in}" "${_precompiled}"`; + + if(preset == "none") + { + return `${compiler} ${_stack} -std=c++17 ${_files} -g -s ${COMPILER.LIBS} -pthread -o "${out}" ${_sysVNetLibs} ${_cliOption}`; + } + else if(preset == "debug") + { + console.log(`${compiler} ${_stack} -std=c++17 ${_files} ${_debug} -s ${COMPILER.LIBS} -pthread -o "${out}" ${_sysVNetLibs} ${_cliOption}`); + return `${compiler} ${_stack} -std=c++17 ${_files} ${_debug} -s ${COMPILER.LIBS} -pthread -o "${out}" ${_sysVNetLibs} ${_cliOption}`; + } + else if(preset == "size") + { + return `${compiler} ${_stack} -std=c++17 ${_files} -pthread -Os -fno-rtti -fno-stack-protector -fomit-frame-pointer -s ${COMPILER.LIBS} -o "${out}" ${_sysVNetLibs} ${_cliOption}`; + } + else + { + var _opt = "-O"; + if(os.platform() == "darwin" || compiler.indexOf("clang") > -1) _opt += "3"; + else _opt += "fast"; + _opt += " -flto"; + return `${compiler} ${_stack} -std=c++17 ${_files} ${_opt} -pthread -s ${COMPILER.LIBS} -o "${out}" ${_sysVNetLibs} ${_cliOption}`; + } + }, + write: function(_content, _in) + { + if(CLI.cli["--profile"] && CLI.cli["--profile"].argument == "use") + { + return; + } + + fs.writeFileSync(_in, _content); + } + +} + +module.exports = STD; diff --git a/self/compiler/native/env/wasm.js b/self/compiler/native/env/wasm.js new file mode 100644 index 000000000..bb047203f --- /dev/null +++ b/self/compiler/native/env/wasm.js @@ -0,0 +1,53 @@ +var WASM = +{ + name: "wasm", + main: "wasm.cpp", + compiler: "em++", + out: function(_name) + { + if(CLI.cli["--target"]) + { + if(CLI.cli["--target"].argument == "js") return _name + ".asm.js"; + else if(CLI.cli["--target"].argument == "wasm") return _name + ".wasm"; + else if(CLI.cli["--target"].argument == "html") return _name + ".html"; + else + { + console.log("[!] Invalid target, expected js, wasm, html"); + process.exit(1); + } + } + return _name + ".wasm"; + }, + cli: function(compiler, preset, out, _in, option) + { + /* + var _cachePath = path.join(process.cwd(), "..", "cached_" + COMPILER.ENV.name + "_" + VERSION); + var _precompiled = path.join(_cachePath, "nerd.o"); + + if(!fs.existsSync(_precompiled)) + { + console.log(`[+] Creating Nerd binary lib for ${COMPILER.ENV.name + "_" + VERSION}`); + try { fs.mkdirSync(_cachePath); } catch(e){}; + execSync(`${compiler} -std=c++17 -c nerd.cpp -O3 -o "${_precompiled}"`); + console.log("[+] Compiling with precompiled Nerd lib"); + } + */ + var _cliOption = ""; + if(CLI.cli["--option"]) _cliOption = CLI.cli["--option"].argument; + + if(preset == "none") + { + return `${compiler} nerdcore/src/nerd.cpp -D__NJS_REGISTER_SIZE=${COMPILER.REGISTER} ${_in} -O1 -w -s TOTAL_MEMORY=33554432 ${COMPILER.LIBS} -o ${out} ${_cliOption}`; + } + else if(preset == "size") + { + return `${compiler} nerdcore/src/nerd.cpp -D__NJS_REGISTER_SIZE=${COMPILER.REGISTER} ${_in} -Os -fno-rtti -fno-stack-protector -fomit-frame-pointer -w -s TOTAL_MEMORY=33554432 ${COMPILER.LIBS} -o ${out} ${_cliOption}`; + } + else + { + return `${compiler} nerdcore/src/nerd.cpp -D__NJS_REGISTER_SIZE=${COMPILER.REGISTER} ${_in} -O3 -w -s TOTAL_MEMORY=33554432 ${COMPILER.LIBS} -o ${out} ${_cliOption}`; + } + } +} + +module.exports = WASM; diff --git a/self/compiler/native/nerdcore/src/class/_meta.h b/self/compiler/native/nerdcore/src/class/_meta.h new file mode 100644 index 000000000..74ba26401 --- /dev/null +++ b/self/compiler/native/nerdcore/src/class/_meta.h @@ -0,0 +1,44 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +#pragma once +#include + +namespace NerdCore::Class +{ +#ifdef __NERD_ENV_ARDUINO + typedef uint16_t count_t; +#else + typedef int count_t; +#endif + class InvalidTypeException : public std::exception + { + }; + #ifdef __NERD_ENV_ARDUINO + const int SMI_MAX = 32767; + const int SMI_MIN = -32768; + #else + const int SMI_MAX = 1073741823; + const int SMI_MIN = -1073741824; + #endif +} // namespace NerdCore::Class diff --git a/self/compiler/native/nerdcore/src/class/array.h b/self/compiler/native/nerdcore/src/class/array.h new file mode 100644 index 000000000..6a77cdcb1 --- /dev/null +++ b/self/compiler/native/nerdcore/src/class/array.h @@ -0,0 +1,435 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +#pragma once +#include "array_header.h" +#include +#include + +namespace NerdCore::Class +{ + // Constructors + Array::Array() + { + + } + Array::Array(NerdCore::Type::vector_t vec) + { + value = vec; + } + Array::Array(std::initializer_list l) : value(l){} + + // Methods + inline void Array::Delete() noexcept + { + if (--counter == 0) + { + delete this; + } + } + double Array::Size() + { + return value.size(); + } + inline void Array::jsDelete(NerdCore::VAR _key) noexcept + { + if(_key.type == NerdCore::Enum::Type::String) + { + // TODO: if string is a number, convert to number and erase + } + else if(_key.type == NerdCore::Enum::Type::Number) + { + value[(double)_key] = NerdCore::Global::null; + } + } + inline void* Array::Copy() noexcept + { + counter++; + return this; + } + // Native cast + Array::operator bool() const noexcept { return true; } + Array::operator double() const noexcept + { + if (value.size() == 1) + { + return (double)value[0]; + } + else + { + #ifdef __NERD_ENV_ARDUINO + return 0; + #else + return std::numeric_limits::quiet_NaN(); + #endif + } + } + Array::operator int() const noexcept + { + if (value.size() == 1) + { + return (int)value[0]; + } + else + { + #ifdef __NERD_ENV_ARDUINO + return 0; + #else + return std::numeric_limits::quiet_NaN(); + #endif + } + } + Array::operator long long() const noexcept + { + if (value.size() == 1) + { + return (long long)value[0]; + } + else + { + #ifdef __NERD_ENV_ARDUINO + return 0; + #else + return std::numeric_limits::quiet_NaN(); + #endif + } + } + Array::operator std::string() const noexcept + { + auto l = value.size(); + if (l == 0) + return ""; + std::stringstream stream; + stream << (std::string)value[0]; + for (auto i = 1; i < l; i++) + { + stream << "," << (std::string)value[i]; + } + return stream.str(); + } + // Main operators + NerdCore::VAR const Array::operator[](NerdCore::VAR key) const + { + if (key.type == NerdCore::Enum::Type::Number) + { + auto i = (int)key; + if (i >= 0 && i <= value.size()) + { + return value.at(i); + } + } + + return NerdCore::Global::null; + } + NerdCore::VAR const Array::operator[](int key) const + { + if (key >= 0 && key <= value.size()) + { + return value.at(key); + } + + return NerdCore::Global::null; + } + + #ifndef __NERD__OBJECT_VECTOR + NerdCore::VAR &Array::operator[](NerdCore::VAR key) + { + if (key.type == NerdCore::Enum::Type::Number) + { + auto i = (int)key; + + if (i < 0) + { + return NerdCore::Global::null; + } + else + { + if (i >= value.size()) + { + value.resize(i + 1); + } + } + return value[i]; + } + + return NerdCore::Global::null; + } + #else + NerdCore::VAR &Array::operator[](NerdCore::VAR key) + { + if (key.type == NerdCore::Enum::Type::Number) + { + auto i = (int)key; + + if (i < 0) + { + return NerdCore::Global::null; + } + else + { + if (i >= value.size()) + { + value.resize(i + 1); + } + } + return value[i]; + } + + return NerdCore::Global::null; + } + #endif + + NerdCore::VAR &Array::operator[](int key) + { + if (key < 0) + { + return NerdCore::Global::null; + } + else + { + if (key >= value.size()) + { + value.resize(key + 1); + } + } + return value[key]; + } + + NerdCore::VAR &Array::operator[](double key) + { + if (key < 0) + { + return NerdCore::Global::null; + } + else + { + if (key >= value.size()) + { + value.resize(key + 1); + } + } + return value[key]; + } + + #ifndef __NERD__OBJECT_VECTOR + NerdCore::VAR &Array::operator[](const char* key) + { + return NerdCore::Global::null; + } + #else + NerdCore::VAR &Array::operator[](const char* key) + { + return NerdCore::Global::null; + } + #endif + + // Comparation operators + Array Array::operator!() const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Array(); + } + + // Numeric operators + Array Array::operator+() const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Array(); + } + Array Array::operator-() const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Array(); + } + Array Array::operator++(const int _v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Array(); + } + Array Array::operator--(const int _v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Array(); + } + Array Array::operator+(const Array &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Array(); + } + Array Array::operator+=(const Array &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Array(); + } + Array Array::operator-(const Array &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Array(); + } + Array Array::operator-=(const Array &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Array(); + } + Array Array::operator*(const Array &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Array(); + } + Array Array::operator*=(const Array &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Array(); + } + // TODO: "**" and "**=" operators + Array Array::operator/(const Array &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Array(); + } + Array Array::operator/=(const Array &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Array(); + } + Array Array::operator%(const Array &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Array(); + } + Array Array::operator%=(const Array &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Array(); + } + Array Array::operator&(const Array &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Array(); + } + Array Array::operator|(const Array &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Array(); + } + Array Array::operator^(const Array &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Array(); + } + Array Array::operator~() const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Array(); + } + Array Array::operator>>(const Array &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Array(); + } + Array Array::operator<<(const Array &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Array(); + } + Array Array::operator&=(const Array &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Array(); + } + Array Array::operator|=(const Array &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Array(); + } + Array Array::operator^=(const Array &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Array(); + } + Array Array::operator>>=(const Array &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Array(); + } + Array Array::operator<<=(const Array &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Array(); + } + // TODO: ">>>" and ">>>=" operators + + +} // namespace NerdCore::Class diff --git a/self/compiler/native/nerdcore/src/class/array_header.h b/self/compiler/native/nerdcore/src/class/array_header.h new file mode 100644 index 000000000..ebf01cb03 --- /dev/null +++ b/self/compiler/native/nerdcore/src/class/array_header.h @@ -0,0 +1,154 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +#pragma once +#include "_meta.h" + +namespace NerdCore::Class +{ + class Array : public virtual Base + { + public: + // Constructors + Array(); + Array(NerdCore::Type::vector_t vec); + + template + Array(Args ... args) + { + NerdCore::Type::vector_t _vec = {args...}; + value = _vec; + } + + Array(std::initializer_list l); + + // Properties + count_t counter = 0; + NerdCore::Type::vector_t value; + // Methods + double Size(); + inline void Delete() noexcept; + inline void jsDelete(const NerdCore::VAR _key) noexcept; + inline void* Copy() noexcept; + // Native cast + explicit operator bool() const noexcept; + explicit operator double() const noexcept; + explicit operator int() const noexcept; + explicit operator long long() const noexcept; + explicit operator std::string() const noexcept; + // Main operators + NerdCore::VAR const operator[](NerdCore::VAR key) const; + NerdCore::VAR const operator[](int key) const; + NerdCore::VAR &operator[](NerdCore::VAR key); + NerdCore::VAR &operator[](int key); + NerdCore::VAR &operator[](double key); + NerdCore::VAR &operator[](const char* key); + + // Comparation operators + Array operator!() const; + + template + bool operator==(const t &_v1) const { return false; } + + // === emulated with __NERD_EQUAL_VALUE_AND_TYPE + // !== emulated with __NERD_NOT_EQUAL_VALUE_AND_TYPE + + template + bool operator!=(const t &_v1) const { return true; } + + template + bool operator<(const t &_v1) const { return (*this)[0] < _v1;} + + template + bool operator<=(const t &_v1) const { return (*this)[0] <= _v1; } + + template + bool operator>(const t &_v1) const { return (*this)[0] > _v1; } + + template + bool operator>=(const t &_v1) const { return (*this)[0] >= _v1; } + + // Numeric operators + Array operator+() const; + Array operator-() const; + Array operator++(const int _v1); + Array operator--(const int _v1); + Array operator+(const Array &_v1) const; + Array operator+=(const Array &_v1); + Array operator-(const Array &_v1) const; + Array operator-=(const Array &_v1); + Array operator*(const Array &_v1) const; + Array operator*=(const Array &_v1); + // TODO: "**" and "**=" operators + Array operator/(const Array &_v1) const; + Array operator/=(const Array &_v1); + Array operator%(const Array &_v1) const; + Array operator%=(const Array &_v1); + Array operator&(const Array &_v1) const; + Array operator|(const Array &_v1) const; + Array operator^(const Array &_v1) const; + Array operator~() const; + Array operator>>(const Array &_v1) const; + Array operator<<(const Array &_v1) const; + Array operator&=(const Array &_v1); + Array operator|=(const Array &_v1); + Array operator^=(const Array &_v1); + Array operator>>=(const Array &_v1); + Array operator<<=(const Array &_v1); + // TODO: ">>>" and ">>>=" operators + + NerdCore::VAR __iterator(NerdCore::VAR* args, int _length) const; + NerdCore::VAR __unscopables(NerdCore::VAR* args, int _length) const; + NerdCore::VAR concat(NerdCore::VAR* args, int _length) const; + NerdCore::VAR copyWithin(NerdCore::VAR* args, int _length); + NerdCore::VAR entries(NerdCore::VAR* args, int _length) const; + NerdCore::VAR every(NerdCore::VAR* args, int _length) const; + NerdCore::VAR fill(NerdCore::VAR* args, int _length) const; + NerdCore::VAR filter(NerdCore::VAR* args, int _length) const; + NerdCore::VAR find(NerdCore::VAR* args, int _length) const; + NerdCore::VAR findIndex(NerdCore::VAR* args, int _length) const; + NerdCore::VAR flat(NerdCore::VAR* args, int _length) const; + NerdCore::VAR flatMap(NerdCore::VAR* args, int _length) const; + NerdCore::VAR forEach(NerdCore::VAR* args, int _length) const; + NerdCore::VAR includes(NerdCore::VAR* args, int _length) const; + NerdCore::VAR indexOf(NerdCore::VAR* args, int _length) const; + NerdCore::VAR join(NerdCore::VAR* args, int _length) const; + NerdCore::VAR keys(NerdCore::VAR* args, int _length) const; + NerdCore::VAR lastIndexOf(NerdCore::VAR* args, int _length) const; + NerdCore::VAR map(NerdCore::VAR* args, int _length) const; + NerdCore::VAR pop(NerdCore::VAR* args, int _length); + NerdCore::VAR push(NerdCore::VAR* args, int _length); + NerdCore::VAR reduce(NerdCore::VAR* args, int _length) const; + NerdCore::VAR reduceRight(NerdCore::VAR* args, int _length) const; + NerdCore::VAR reverse(NerdCore::VAR* args, int _length); + NerdCore::VAR shift(NerdCore::VAR* args, int _length); + NerdCore::VAR slice(NerdCore::VAR* args, int _length) const; + NerdCore::VAR some(NerdCore::VAR* args, int _length) const; + NerdCore::VAR sort(NerdCore::VAR* args, int _length) const; + NerdCore::VAR splice(NerdCore::VAR* args, int _length); + NerdCore::VAR toLocaleString(NerdCore::VAR* args, int _length) const; + NerdCore::VAR toString(NerdCore::VAR* args, int _length) const; + NerdCore::VAR unshift(NerdCore::VAR* args, int _length); + NerdCore::VAR values(NerdCore::VAR* args, int _length) const; + }; +} // namespace NerdCore::Class diff --git a/self/compiler/native/nerdcore/src/class/base_header.h b/self/compiler/native/nerdcore/src/class/base_header.h new file mode 100644 index 000000000..833ab57b6 --- /dev/null +++ b/self/compiler/native/nerdcore/src/class/base_header.h @@ -0,0 +1,47 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +#pragma once +#include "_meta.h" + +namespace NerdCore::Class +{ + class Base + { + public: + #ifdef __NERD_ENV_ESP32 + virtual ~Base() { } + #endif + virtual void Delete() noexcept{}; + virtual void* Copy() noexcept{ return nullptr; }; + virtual explicit operator bool() const noexcept{ return true;}; + virtual explicit operator std::string() const noexcept{ return "";}; + virtual explicit operator int() const noexcept {return 0;}; + virtual explicit operator double() const noexcept {return 0.0;}; + virtual explicit operator long long() const noexcept {return 0;}; + virtual NerdCore::VAR &operator[](NerdCore::VAR key){ return NerdCore::Global::null; }; + virtual NerdCore::VAR &operator[](int key){ return NerdCore::Global::null; }; + virtual NerdCore::VAR &operator[](double key){ return NerdCore::Global::null; }; + virtual NerdCore::VAR &operator[](const char* key){ return NerdCore::Global::null; }; + }; +} \ No newline at end of file diff --git a/self/compiler/native/nerdcore/src/class/fixed_array.h b/self/compiler/native/nerdcore/src/class/fixed_array.h new file mode 100644 index 000000000..e068a24f6 --- /dev/null +++ b/self/compiler/native/nerdcore/src/class/fixed_array.h @@ -0,0 +1,401 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +#pragma once +#include "array_header.h" +#include +#include + +namespace NerdCore::Class +{ + // Constructors + FixedArray::FixedArray() + { + length = 8; + value = new NerdCore::VAR[8]; + } + FixedArray::FixedArray(NerdCore::VAR _length) + { + length = _length; + value = new NerdCore::VAR[(int)_length]; + } + FixedArray::FixedArray(int _length) + { + length = _length; + value = new NerdCore::VAR[_length]; + } + FixedArray::FixedArray(NerdCore::VAR* _var, int _length) + { + length = _length; + value = new NerdCore::VAR[_length]; + for(int i = 0; i < _length; i++) + { + value[i] = _var[i]; + } + } + + // Methods + inline void FixedArray::Delete() noexcept + { + if (--counter == 0) + { + delete[] value; + delete this; + } + } + inline void* FixedArray::Copy() noexcept + { + counter++; + return this; + } + // Native cast + FixedArray::operator bool() const noexcept { return true; } + FixedArray::operator double() const noexcept + { + if ((int)length == 1) + { + return (double)value[0]; + } + else + { + #ifdef __NERD_ENV_ARDUINO + return 0; + #else + return std::numeric_limits::quiet_NaN(); + #endif + } + } + FixedArray::operator int() const noexcept + { + if ((int)length == 1) + { + return (int)value[0]; + } + else + { + #ifdef __NERD_ENV_ARDUINO + return 0; + #else + return std::numeric_limits::quiet_NaN(); + #endif + } + } + FixedArray::operator long long() const noexcept + { + if ((int)length == 1) + { + return (long long)value[0]; + } + else + { + #ifdef __NERD_ENV_ARDUINO + return 0; + #else + return std::numeric_limits::quiet_NaN(); + #endif + } + } + FixedArray::operator std::string() const noexcept + { + auto l = (int)length; + std::stringstream stream; + stream << (std::string)value[0]; + for (auto i = 1; i < l; i++) + { + stream << "," << (std::string)value[i]; + } + return stream.str(); + } + // Main operators + NerdCore::VAR const FixedArray::operator[](NerdCore::VAR key) const + { + if (key.type == NerdCore::Enum::Type::Number) + { + auto i = (int)key; + if (i >= 0 && i <= (int)length) + { + return value[i]; + } + } + + return NerdCore::Global::null; + } + NerdCore::VAR const FixedArray::operator[](int key) const + { + if (key >= 0 && key <= (int)length) + { + return value[key]; + } + + return NerdCore::Global::null; + } + + NerdCore::VAR &FixedArray::operator[](NerdCore::VAR key) + { + if (key.type == NerdCore::Enum::Type::Number) + { + auto i = (int)key; + + if (i < 0) + { + return NerdCore::Global::null; + } + else + { + if (i >= (int)length) + { + return NerdCore::Global::null; + } + } + return value[i]; + } + + return NerdCore::Global::null; + } + + NerdCore::VAR &FixedArray::operator[](int key) + { + if (key < 0) + { + return NerdCore::Global::null; + } + else + { + if (key >= (int)length) + { + return NerdCore::Global::null; + } + } + return value[key]; + } + + NerdCore::VAR &FixedArray::operator[](double key) + { + if (key < 0) + { + return NerdCore::Global::null; + } + else + { + if (key >= (int)length) + { + return NerdCore::Global::null; + } + } + return value[(int)key]; + } + + NerdCore::VAR &FixedArray::operator[](const char* key) + { + return NerdCore::Global::null; + } + + // Comparation operators + FixedArray FixedArray::operator!() const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return FixedArray(); + } + + // Numeric operators + FixedArray FixedArray::operator+() const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return FixedArray(); + } + FixedArray FixedArray::operator-() const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return FixedArray(); + } + FixedArray FixedArray::operator++(const int _v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return FixedArray(); + } + FixedArray FixedArray::operator--(const int _v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return FixedArray(); + } + FixedArray FixedArray::operator+(const FixedArray &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return FixedArray(); + } + FixedArray FixedArray::operator+=(const FixedArray &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return FixedArray(); + } + FixedArray FixedArray::operator-(const FixedArray &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return FixedArray(); + } + FixedArray FixedArray::operator-=(const FixedArray &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return FixedArray(); + } + FixedArray FixedArray::operator*(const FixedArray &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return FixedArray(); + } + FixedArray FixedArray::operator*=(const FixedArray &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return FixedArray(); + } + // TODO: "**" and "**=" operators + FixedArray FixedArray::operator/(const FixedArray &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return FixedArray(); + } + FixedArray FixedArray::operator/=(const FixedArray &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return FixedArray(); + } + FixedArray FixedArray::operator%(const FixedArray &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return FixedArray(); + } + FixedArray FixedArray::operator%=(const FixedArray &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return FixedArray(); + } + FixedArray FixedArray::operator&(const FixedArray &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return FixedArray(); + } + FixedArray FixedArray::operator|(const FixedArray &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return FixedArray(); + } + FixedArray FixedArray::operator^(const FixedArray &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return FixedArray(); + } + FixedArray FixedArray::operator~() const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return FixedArray(); + } + FixedArray FixedArray::operator>>(const FixedArray &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return FixedArray(); + } + FixedArray FixedArray::operator<<(const FixedArray &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return FixedArray(); + } + FixedArray FixedArray::operator&=(const FixedArray &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return FixedArray(); + } + FixedArray FixedArray::operator|=(const FixedArray &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return FixedArray(); + } + FixedArray FixedArray::operator^=(const FixedArray &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return FixedArray(); + } + FixedArray FixedArray::operator>>=(const FixedArray &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return FixedArray(); + } + FixedArray FixedArray::operator<<=(const FixedArray &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return FixedArray(); + } + // TODO: ">>>" and ">>>=" operators + +} // namespace NerdCore::Class diff --git a/self/compiler/native/nerdcore/src/class/fixed_array_header.h b/self/compiler/native/nerdcore/src/class/fixed_array_header.h new file mode 100644 index 000000000..174e759c2 --- /dev/null +++ b/self/compiler/native/nerdcore/src/class/fixed_array_header.h @@ -0,0 +1,111 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +#pragma once +#include "_meta.h" + +namespace NerdCore::Class +{ + class FixedArray : public virtual Base + { + public: + // Constructors + FixedArray(); + FixedArray(NerdCore::VAR length); + FixedArray(int length); + FixedArray(NerdCore::VAR* value, int length); + // Properties + count_t counter = 0; + NerdCore::VAR length; + NerdCore::VAR* value; + // Methods + inline void Delete() noexcept; + inline void* Copy() noexcept; + // Native cast + explicit operator bool() const noexcept; + explicit operator double() const noexcept; + explicit operator int() const noexcept; + explicit operator long long() const noexcept; + explicit operator std::string() const noexcept; + // Main operators + NerdCore::VAR const operator[](NerdCore::VAR key) const; + NerdCore::VAR const operator[](int key) const; + NerdCore::VAR &operator[](NerdCore::VAR key); + NerdCore::VAR &operator[](int key); + NerdCore::VAR &operator[](double key); + NerdCore::VAR &operator[](const char* key); + + // Comparation operators + FixedArray operator!() const; + + template + bool operator==(const t &_v1) const { return false; } + + // === emulated with __NERD_EQUAL_VALUE_AND_TYPE + // !== emulated with __NERD_NOT_EQUAL_VALUE_AND_TYPE + + template + bool operator!=(const t &_v1) const { return true; } + + template + bool operator<(const t &_v1) const { return (*this)[0] < _v1;} + + template + bool operator<=(const t &_v1) const { return (*this)[0] <= _v1; } + + template + bool operator>(const t &_v1) const { return (*this)[0] > _v1; } + + template + bool operator>=(const t &_v1) const { return (*this)[0] >= _v1; } + + // Numeric operators + FixedArray operator+() const; + FixedArray operator-() const; + FixedArray operator++(const int _v1); + FixedArray operator--(const int _v1); + FixedArray operator+(const FixedArray &_v1) const; + FixedArray operator+=(const FixedArray &_v1); + FixedArray operator-(const FixedArray &_v1) const; + FixedArray operator-=(const FixedArray &_v1); + FixedArray operator*(const FixedArray &_v1) const; + FixedArray operator*=(const FixedArray &_v1); + // TODO: "**" and "**=" operators + FixedArray operator/(const FixedArray &_v1) const; + FixedArray operator/=(const FixedArray &_v1); + FixedArray operator%(const FixedArray &_v1) const; + FixedArray operator%=(const FixedArray &_v1); + FixedArray operator&(const FixedArray &_v1) const; + FixedArray operator|(const FixedArray &_v1) const; + FixedArray operator^(const FixedArray &_v1) const; + FixedArray operator~() const; + FixedArray operator>>(const FixedArray &_v1) const; + FixedArray operator<<(const FixedArray &_v1) const; + FixedArray operator&=(const FixedArray &_v1); + FixedArray operator|=(const FixedArray &_v1); + FixedArray operator^=(const FixedArray &_v1); + FixedArray operator>>=(const FixedArray &_v1); + FixedArray operator<<=(const FixedArray &_v1); + // TODO: ">>>" and ">>>=" operators + }; +} // namespace NerdCore::Class diff --git a/self/compiler/native/nerdcore/src/class/function.h b/self/compiler/native/nerdcore/src/class/function.h new file mode 100644 index 000000000..f0d25d085 --- /dev/null +++ b/self/compiler/native/nerdcore/src/class/function.h @@ -0,0 +1,410 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +#pragma once +#include "function_header.h" +#include +#include + +namespace NerdCore::Class +{ + // Constructors + Function::Function() + { + (*this)["prototype"] = new NerdCore::Class::Object(); + } + Function::Function(void *val) + { + counter++; + value = (NerdCore::Type::function_t*)val; + if((*this)["prototype"].type == NerdCore::Enum::Type::Null) + { + (*this)["prototype"] = new NerdCore::Class::Object(); + } + } + Function::Function(void *val, NerdCore::VAR __this) + { + counter++; + (*this)["this"] = __this; + value = (NerdCore::Type::function_t*)val; + if((*this)["prototype"].type == NerdCore::Enum::Type::Null) + { + (*this)["prototype"] = new NerdCore::Class::Object(); + } + } + // Methods + inline void Function::Delete() noexcept + { + if (--counter == 0) + { + delete (NerdCore::Type::function_t*)value; + delete this; + } + } + inline void Function::jsDelete(const std::string _key) noexcept + { + + } + inline void* Function::Copy() noexcept + { + counter++; + return this; + } + + // Main operators + NerdCore::VAR const Function::operator[](NerdCore::VAR key) const + { + return NerdCore::Global::null; + } + + #ifndef __NERD__OBJECT_VECTOR + NerdCore::VAR &Function::operator[](NerdCore::VAR key) + { + /* + if(hasLazy && LazyRTM.count(key) && !object.count(key)) + { + object[key] = LazyRTM[key]; + } + */ + return object[key]; + } + #else + NerdCore::VAR &Function::operator[](NerdCore::VAR key) + { + std::string _str = ((std::string)key); + NerdCore::Type::StringView _sview = _str; + + if (key.type == NerdCore::Enum::Type::Number) + { + auto i = (int)key; + + if (i < 0) + { + return NerdCore::Global::null; + } + else + { + if (i >= object.size()) + { + object.reserve(i + 1); + object.resize(i + 1); + } + } + return object[i].second; + } + + for (auto & search : object) + { + if (_sview.compare(search.first) == 0) + { + return search.second; + } + } + + object.push_back(NerdCore::Type::pair_t(_str, NerdCore::Global::null)); + + return object[object.size() - 1].second; + } + #endif + + #ifndef __NERD__OBJECT_VECTOR + NerdCore::VAR &Function::operator[](int key) + { + std::string _str = std::to_string(key); + NerdCore::Type::StringView _sview = _str; + + return object[_str]; + } + #else + NerdCore::VAR &Function::operator[](int key) + { + std::string _str = std::to_string(key); + NerdCore::Type::StringView _sview = _str; + + for (auto & search : object) + { + if (_sview.compare(search.first) == 0) + { + return search.second; + } + } + + object.push_back(NerdCore::Type::pair_t(_str, NerdCore::Global::null)); + + + return object[object.size() - 1].second; + } + #endif + + #ifndef __NERD__OBJECT_VECTOR + NerdCore::VAR &Function::operator[](double key) + { + std::string _str = std::to_string(key); + NerdCore::Type::StringView _sview = _str; + + return object[_str]; + } + #else + NerdCore::VAR &Function::operator[](double key) + { + std::string _str = std::to_string(key); + NerdCore::Type::StringView _sview = _str; + + for (auto & search : object) + { + if (_sview.compare(search.first) == 0) + { + return search.second; + } + } + + object.push_back(NerdCore::Type::pair_t(_str, NerdCore::Global::null)); + + return object[object.size() - 1].second; + } + #endif + + #ifndef __NERD__OBJECT_VECTOR + NerdCore::VAR &Function::operator[](const char* key) + { + /* + if(hasLazy && LazyRTM.count(key) && !object.count(key)) + { + object[key] = LazyRTM[key]; + } + */ + return object[key]; + } + #else + NerdCore::VAR &Function::operator[](const char* key) + { + std::string _str = key; + NerdCore::Type::StringView _sview = _str; + + for (auto & search : object) + { + if (_sview.compare(search.first) == 0) + { + return search.second; + } + } + + object.push_back(NerdCore::Type::pair_t(_str, NerdCore::Global::null)); + + + return object[object.size() - 1].second; + } + #endif + + // Comparation operators + NerdCore::VAR Function::operator!() const + { + return __NERD_Boolean_FALSE; + } + bool Function::operator==(const Function &_v1) const { return false; } + // === emulated with __NERD_EQUAL_VALUE_AND_TYPE + // !== emulated with __NERD_NOT_EQUAL_VALUE_AND_TYPE + bool Function::operator!=(const Function &_v1) const { return true; } + bool Function::operator<(const Function &_v1) const { return false; } + bool Function::operator<=(const Function &_v1) const { return true; } + bool Function::operator>(const Function &_v1) const { return false; } + bool Function::operator>=(const Function &_v1) const { return true; } + // Numeric operators + Function Function::operator+() const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Function(); + } + Function Function::operator-() const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Function(); + } + Function Function::operator++(const int _v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Function(); + } + Function Function::operator--(const int _v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Function(); + } + Function Function::operator+(const Function &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Function(); + } + Function Function::operator+=(const Function &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Function(); + } + Function Function::operator-(const Function &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Function(); + } + Function Function::operator-=(const Function &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Function(); + } + Function Function::operator*(const Function &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Function(); + } + Function Function::operator*=(const Function &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Function(); + } + // TODO: "**" and "**=" operators + Function Function::operator/(const Function &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Function(); + } + Function Function::operator/=(const Function &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Function(); + } + Function Function::operator%(const Function &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Function(); + } + Function Function::operator%=(const Function &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Function(); + } + Function Function::operator&(const Function &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Function(); + } + Function Function::operator|(const Function &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Function(); + } + Function Function::operator^(const Function &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Function(); + } + Function Function::operator~() const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Function(); + } + Function Function::operator>>(const Function &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Function(); + } + Function Function::operator<<(const Function &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Function(); + } + Function Function::operator&=(const Function &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Function(); + } + Function Function::operator|=(const Function &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Function(); + } + Function Function::operator^=(const Function &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Function(); + } + Function Function::operator>>=(const Function &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Function(); + } + Function Function::operator<<=(const Function &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Function(); + } + // TODO: ">>>" and ">>>=" operators +} // namespace NerdCore::Class diff --git a/self/compiler/native/nerdcore/src/class/function_header.h b/self/compiler/native/nerdcore/src/class/function_header.h new file mode 100644 index 000000000..6bea74887 --- /dev/null +++ b/self/compiler/native/nerdcore/src/class/function_header.h @@ -0,0 +1,150 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +#pragma once +#include "_meta.h" + +namespace NerdCore::Class +{ + class Function : public virtual Base + { + public: + // Constructors + Function(); + Function(void* val); + Function(void* val, NerdCore::VAR __this); + // Properties + count_t counter = 0; + + NerdCore::Type::function_t* value = nullptr; + NerdCore::Type::object_t object; + NerdCore::VAR This; + //void* bind = nullptr; + // Methods + inline void Delete() noexcept; + inline void jsDelete(std::string _key) noexcept; + inline void* Copy() noexcept; + + inline NerdCore::VAR Call(NerdCore::VAR __NERD_THIS, NerdCore::VAR* _args, int i) + { + #ifndef __NERD__OBJECT_VECTOR + if(__NERD_THIS.type == NerdCore::Enum::Type::Null) + { + return std::invoke((*static_cast(value)), This, _args, i); + } + else + { + return std::invoke((*static_cast(value)), __NERD_THIS, _args, i); + } + #else + return (*static_cast(value))(__NERD_THIS, _args, i); + #endif + } + + template + NerdCore::VAR operator()(NerdCore::VAR __NERD_THIS, Args... args) + { + NerdCore::VAR _args[] = {args...}; + int i = sizeof...(args); + #ifndef __NERD__OBJECT_VECTOR + if(__NERD_THIS.type == NerdCore::Enum::Type::Null) + { + return std::invoke((*static_cast(value)), This, _args, i); + } + else + { + return std::invoke((*static_cast(value)), __NERD_THIS, _args, i); + } + #else + return (*static_cast(value))(__NERD_THIS, _args, i); + #endif + } + + template + NerdCore::VAR New(Args... args) + { + + NerdCore::VAR _args[] = {args...}; + int i = sizeof...(args); + + NerdCore::VAR _this = new NerdCore::Class::Object(); //__NERD_Object_Clone((*this)["this"]); + //if(_this.type == NerdCore::Enum::Type::Null) _this = new NerdCore::Class::Object(); + + //((NerdCore::Class::Object*)_this.data.ptr)->bind = bind; + NerdCore::VAR _return = this->Call(_this, _args, i); + if(_return.type == NerdCore::Enum::Type::Object) + { + _this = _return; + } + _this["__proto__"] = object["prototype"]; + return _this; + + } + + // Main operators + NerdCore::VAR const operator[](NerdCore::VAR key) const; + NerdCore::VAR &operator[](NerdCore::VAR key); + NerdCore::VAR &operator[](int key); + NerdCore::VAR &operator[](double key); + NerdCore::VAR &operator[](const char* key); + + // Comparation operators + NerdCore::VAR operator!() const; + bool operator==(const Function &_v1) const; + // === emulated with __NERD_EQUAL_VALUE_AND_TYPE + // !== emulated with __NERD_NOT_EQUAL_VALUE_AND_TYPE + bool operator!=(const Function &_v1) const; + bool operator<(const Function &_v1) const; + bool operator<=(const Function &_v1) const; + bool operator>(const Function &_v1) const; + bool operator>=(const Function &_v1) const; + // Numeric operators + Function operator+() const; + Function operator-() const; + Function operator++(const int _v1); + Function operator--(const int _v1); + Function operator+(const Function &_v1) const; + Function operator+=(const Function &_v1); + Function operator-(const Function &_v1) const; + Function operator-=(const Function &_v1); + Function operator*(const Function &_v1) const; + Function operator*=(const Function &_v1); + // TODO: "**" and "**=" operators + Function operator/(const Function &_v1) const; + Function operator/=(const Function &_v1); + Function operator%(const Function &_v1) const; + Function operator%=(const Function &_v1); + Function operator&(const Function &_v1) const; + Function operator|(const Function &_v1) const; + Function operator^(const Function &_v1) const; + Function operator~() const; + Function operator>>(const Function &_v1) const; + Function operator<<(const Function &_v1) const; + Function operator&=(const Function &_v1); + Function operator|=(const Function &_v1); + Function operator^=(const Function &_v1); + Function operator>>=(const Function &_v1); + Function operator<<=(const Function &_v1); + // TODO: ">>>" and ">>>=" operators + }; +} // namespace NerdCore::Class \ No newline at end of file diff --git a/self/compiler/native/nerdcore/src/class/native.h b/self/compiler/native/nerdcore/src/class/native.h new file mode 100644 index 000000000..63f4debcd --- /dev/null +++ b/self/compiler/native/nerdcore/src/class/native.h @@ -0,0 +1,301 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +#pragma once +#include "native_header.h" +#include +#include + +namespace NerdCore::Class +{ + // Constructors + Native::Native() {} + Native::Native(void *val) + { + value = val; + } + // Methods + inline void Native::Delete() noexcept + { + if (--counter < 1) + { + if((*this)["__NERD_On_Destroy"]) (*this)["__NERD_On_Destroy"](NerdCore::Global::null); + delete this; + } + } + inline void* Native::Copy() noexcept + { + counter++; + return this; + } + // Native cast + Native::operator bool() const noexcept { return true; } + Native::operator double() const noexcept + { + #ifdef __NERD_ENV_ARDUINO + return 0; + #else + return std::numeric_limits::quiet_NaN(); + #endif + } + Native::operator int() const noexcept + { + #ifdef __NERD_ENV_ARDUINO + return 0; + #else + return std::numeric_limits::quiet_NaN(); + #endif + } + Native::operator long long() const noexcept + { + #ifdef __NERD_ENV_ARDUINO + return 0; + #else + return std::numeric_limits::quiet_NaN(); + #endif + } + Native::operator std::string() const noexcept + { + return "[native code]"; + } + // Main operators + NerdCore::VAR const Native::operator[](NerdCore::VAR key) const + { + return NerdCore::Global::null; + } + NerdCore::VAR &Native::operator[](NerdCore::VAR key) + { + return NerdCore::Global::null; + } + + NerdCore::VAR &Native::operator[](int key) + { + return NerdCore::Global::null; + } + + NerdCore::VAR &Native::operator[](double key) + { + return NerdCore::Global::null; + } + + + NerdCore::VAR &Native::operator[](const char* key) + { + return NerdCore::Global::null; + } + + // Comparation operators + Native Native::operator!() const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Native(); + } + bool Native::operator==(const Native &_v1) const { return false; } + // === emulated with __NERD_EQUAL_VALUE_AND_TYPE + // !== emulated with __NERD_NOT_EQUAL_VALUE_AND_TYPE + bool Native::operator!=(const Native &_v1) const { return true; } + bool Native::operator<(const Native &_v1) const { return false; } + bool Native::operator<=(const Native &_v1) const { return true; } + bool Native::operator>(const Native &_v1) const { return false; } + bool Native::operator>=(const Native &_v1) const { return true; } + // Numeric operators + Native Native::operator+() const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Native(); + } + Native Native::operator-() const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Native(); + } + Native Native::operator++(const int _v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Native(); + } + Native Native::operator--(const int _v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Native(); + } + Native Native::operator+(const Native &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Native(); + } + Native Native::operator+=(const Native &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Native(); + } + Native Native::operator-(const Native &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Native(); + } + Native Native::operator-=(const Native &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Native(); + } + Native Native::operator*(const Native &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Native(); + } + Native Native::operator*=(const Native &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Native(); + } + // TODO: "**" and "**=" operators + Native Native::operator/(const Native &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Native(); + } + Native Native::operator/=(const Native &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Native(); + } + Native Native::operator%(const Native &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Native(); + } + Native Native::operator%=(const Native &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Native(); + } + Native Native::operator&(const Native &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Native(); + } + Native Native::operator|(const Native &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Native(); + } + Native Native::operator^(const Native &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Native(); + } + Native Native::operator~() const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Native(); + } + Native Native::operator>>(const Native &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Native(); + } + Native Native::operator<<(const Native &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Native(); + } + Native Native::operator&=(const Native &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Native(); + } + Native Native::operator|=(const Native &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Native(); + } + Native Native::operator^=(const Native &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Native(); + } + Native Native::operator>>=(const Native &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Native(); + } + Native Native::operator<<=(const Native &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Native(); + } + // TODO: ">>>" and ">>>=" operators +} // namespace NerdCore::Class diff --git a/self/compiler/native/nerdcore/src/class/native_header.h b/self/compiler/native/nerdcore/src/class/native_header.h new file mode 100644 index 000000000..cdaa099b8 --- /dev/null +++ b/self/compiler/native/nerdcore/src/class/native_header.h @@ -0,0 +1,94 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +#pragma once +#include "_meta.h" + +namespace NerdCore::Class +{ + class Native : public virtual Base + { + public: + // Constructors + Native(); + Native(void* val); + // Properties + count_t counter = 1; + int length = 0; + void* value = nullptr; + // Methods + inline void Delete() noexcept; + inline void* Copy() noexcept; + // Native cast + explicit operator bool() const noexcept; + explicit operator double() const noexcept; + explicit operator int() const noexcept; + explicit operator long long() const noexcept; + explicit operator std::string() const noexcept; + // Main operators + NerdCore::VAR const operator[](NerdCore::VAR key) const; + NerdCore::VAR &operator[](NerdCore::VAR key); + NerdCore::VAR &operator[](int key); + NerdCore::VAR &operator[](double key); + NerdCore::VAR &operator[](const char* key); + + // Comparation operators + Native operator!() const; + bool operator==(const Native &_v1) const; + // === emulated with __NERD_EQUAL_VALUE_AND_TYPE + // !== emulated with __NERD_NOT_EQUAL_VALUE_AND_TYPE + bool operator!=(const Native &_v1) const; + bool operator<(const Native &_v1) const; + bool operator<=(const Native &_v1) const; + bool operator>(const Native &_v1) const; + bool operator>=(const Native &_v1) const; + // Numeric operators + Native operator+() const; + Native operator-() const; + Native operator++(const int _v1); + Native operator--(const int _v1); + Native operator+(const Native &_v1) const; + Native operator+=(const Native &_v1); + Native operator-(const Native &_v1) const; + Native operator-=(const Native &_v1); + Native operator*(const Native &_v1) const; + Native operator*=(const Native &_v1); + // TODO: "**" and "**=" operators + Native operator/(const Native &_v1) const; + Native operator/=(const Native &_v1); + Native operator%(const Native &_v1) const; + Native operator%=(const Native &_v1); + Native operator&(const Native &_v1) const; + Native operator|(const Native &_v1) const; + Native operator^(const Native &_v1) const; + Native operator~() const; + Native operator>>(const Native &_v1) const; + Native operator<<(const Native &_v1) const; + Native operator&=(const Native &_v1); + Native operator|=(const Native &_v1); + Native operator^=(const Native &_v1); + Native operator>>=(const Native &_v1); + Native operator<<=(const Native &_v1); + // TODO: ">>>" and ">>>=" operators + }; +} // namespace NerdCore::Class diff --git a/self/compiler/native/nerdcore/src/class/native_tpl_header.h b/self/compiler/native/nerdcore/src/class/native_tpl_header.h new file mode 100644 index 000000000..858ddd054 --- /dev/null +++ b/self/compiler/native/nerdcore/src/class/native_tpl_header.h @@ -0,0 +1,359 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +#pragma once +#include "_meta.h" + + +namespace NerdCore::Class +{ + template + class NativeTPL : public virtual Base + { + + private: + inline void internalDelete() + { + if(is_ptr) + { + delete value; + } + } + public: + // Constructors + bool is_ptr = true; + int length = 0; + std::string type; + + NativeTPL(T val) + { + is_ptr = true; + value = val; + + type = "undef"; + } + NativeTPL(T val, const char str[]) + { + is_ptr = true; + type = str; + value = val; + } + NativeTPL(T val, bool isPtr) + { + is_ptr = isPtr; + value = val; + type = "undef"; + } + NativeTPL(T val, const char str[], bool isPtr) + { + is_ptr = isPtr; + value = val; + type = str; + } + // Properties + count_t counter = 1; + T value; + NerdCore::Type::object_t object; + // Methods + + inline void Delete() noexcept + { + if (--counter == 0) + { + internalDelete(); + delete this; + } + } + + inline void* Copy() noexcept + { + counter++; + return this; + } + + template + const inline T operator()(Cast& c) const + { + static_assert(std::is_same::value, "Casting must be same as NativeType"); + + return value; + } + + inline T operator()() const + { + return value; + } + + operator bool() const noexcept { return true; } + operator double() const noexcept + { + #ifdef __NERD_ENV_ARDUINO + return 0; + #else + return std::numeric_limits::quiet_NaN(); + #endif + } + operator int() const noexcept + { + #ifdef __NERD_ENV_ARDUINO + return 0; + #else + return std::numeric_limits::quiet_NaN(); + #endif + } + operator long long() const noexcept + { + #ifdef __NERD_ENV_ARDUINO + return 0; + #else + return std::numeric_limits::quiet_NaN(); + #endif + } + operator std::string() const noexcept + { + return std::string("[native ") + type + std::string("]"); + } + + // Main operators + NerdCore::VAR const operator[](NerdCore::VAR key) const + { + return NerdCore::Global::null; + } + NerdCore::VAR &operator[](NerdCore::VAR key) + { + return NerdCore::Global::null; + } + + NerdCore::VAR &operator[](int key) + { + return NerdCore::Global::null; + } + + NerdCore::VAR &operator[](double key) + { + return NerdCore::Global::null; + } + + + NerdCore::VAR &operator[](const char* key) + { + return NerdCore::Global::null; + } + + // Comparation operators + NativeTPL operator!() const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NativeTPL(); + } + bool operator==(const NativeTPL &_v1) const { return false; } + // === emulated with __NERD_EQUAL_VALUE_AND_TYPE + // !== emulated with __NERD_NOT_EQUAL_VALUE_AND_TYPE + bool operator!=(const NativeTPL &_v1) const { return true; } + bool operator<(const NativeTPL &_v1) const { return false; } + bool operator<=(const NativeTPL &_v1) const { return true; } + bool operator>(const NativeTPL &_v1) const { return false; } + bool operator>=(const NativeTPL &_v1) const { return true; } + // Numeric operators + NativeTPL operator+() const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NativeTPL(); + } + NativeTPL operator-() const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NativeTPL(); + } + NativeTPL operator++(const int _v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NativeTPL(); + } + NativeTPL operator--(const int _v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NativeTPL(); + } + NativeTPL operator+(const NativeTPL &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NativeTPL(); + } + NativeTPL operator+=(const NativeTPL &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NativeTPL(); + } + NativeTPL operator-(const NativeTPL &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NativeTPL(); + } + NativeTPL operator-=(const NativeTPL &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NativeTPL(); + } + NativeTPL operator*(const NativeTPL &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NativeTPL(); + } + NativeTPL operator*=(const NativeTPL &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NativeTPL(); + } + // TODO: "**" and "**=" operators + NativeTPL operator/(const NativeTPL &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NativeTPL(); + } + NativeTPL operator/=(const NativeTPL &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NativeTPL(); + } + NativeTPL operator%(const NativeTPL &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NativeTPL(); + } + NativeTPL operator%=(const NativeTPL &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NativeTPL(); + } + NativeTPL operator&(const NativeTPL &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NativeTPL(); + } + NativeTPL operator|(const NativeTPL &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NativeTPL(); + } + NativeTPL operator^(const NativeTPL &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NativeTPL(); + } + NativeTPL operator~() const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NativeTPL(); + } + NativeTPL operator>>(const NativeTPL &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NativeTPL(); + } + NativeTPL operator<<(const NativeTPL &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NativeTPL(); + } + NativeTPL operator&=(const NativeTPL &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NativeTPL(); + } + NativeTPL operator|=(const NativeTPL &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NativeTPL(); + } + NativeTPL operator^=(const NativeTPL &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NativeTPL(); + } + NativeTPL operator>>=(const NativeTPL &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NativeTPL(); + } + NativeTPL operator<<=(const NativeTPL &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NativeTPL(); + } + // TODO: ">>>" and ">>>=" operators + + }; +} // namespace NerdCore::Class diff --git a/self/compiler/native/nerdcore/src/class/number.h b/self/compiler/native/nerdcore/src/class/number.h new file mode 100644 index 000000000..19e3b7c22 --- /dev/null +++ b/self/compiler/native/nerdcore/src/class/number.h @@ -0,0 +1,27 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +namespace NerdCore::Class::NUMBER +{ + +} diff --git a/self/compiler/native/nerdcore/src/class/number_header.h b/self/compiler/native/nerdcore/src/class/number_header.h new file mode 100644 index 000000000..c9a134f2f --- /dev/null +++ b/self/compiler/native/nerdcore/src/class/number_header.h @@ -0,0 +1,27 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +namespace NerdCore::Class::NUMBER +{ + +} diff --git a/self/compiler/native/nerdcore/src/class/object.h b/self/compiler/native/nerdcore/src/class/object.h new file mode 100644 index 000000000..166cd9fee --- /dev/null +++ b/self/compiler/native/nerdcore/src/class/object.h @@ -0,0 +1,373 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +#pragma once +#include "object_header.h" +#include + +namespace NerdCore::Class +{ + NerdCore::VAR __proxy; + // Constructors + Object::Object() { } + + /* + Object::Object(const char* _key, NerdCore::VAR _value) + { + object[_key] = _value; + } + */ + /* + Object::Object(NerdCore::VAR _obj) + { + object = ((NerdCore::Class::Object*)_obj.data.ptr)->object; + } + */ + + // Methods + double Object::Size() + { + return object.size(); + } + + inline void Object::Delete() noexcept + { + if (--counter == 0) + { + delete this; + } + } + inline void Object::jsDelete(const std::string _key) noexcept + { + #ifndef __NERD__OBJECT_VECTOR + object.erase(_key); + #else + for (NerdCore::Type::object_t::iterator it = object.begin() ; it != object.end(); ++it) + { + if (_key.compare(it->first) == 0) + { + object.erase(it); + return; + } + } + #endif + } + inline void* Object::Copy() noexcept + { + counter++; + return this; + } + // Native cast + Object::operator bool() const noexcept { return true; } + Object::operator double() const noexcept + { + #ifdef __NERD_ENV_ARDUINO + return 0; + #else + return std::numeric_limits::quiet_NaN(); + #endif + } + Object::operator int() const noexcept + { + #ifdef __NERD_ENV_ARDUINO + return 0; + #else + return std::numeric_limits::quiet_NaN(); + #endif + } + Object::operator long long() const noexcept + { + #ifdef __NERD_ENV_ARDUINO + return 0; + #else + return std::numeric_limits::quiet_NaN(); + #endif + } + Object::operator std::string() const noexcept + { + return "[object Object]"; + } + // Main operators + NerdCore::VAR const Object::operator[](NerdCore::VAR key) const + { + return NerdCore::Global::null; + } + + NerdCore::VAR &Object::GetSet(std::string key) + { + #ifndef __NERD__OBJECT_VECTOR + // if current object[key] is null, we look for the prototypal chain + if(object[key].type == NerdCore::Enum::Type::Null) + { + NerdCore::VAR __proto = object["__proto__"]; + while(__proto.type != NerdCore::Enum::Type::Null) + { + if(__proto[key].type != NerdCore::Enum::Type::Null) + { + object[key] = __proto[key]; + break; + } + __proto = __proto["__proto__"]; + } + } + /* + if(object[key].type == NerdCore::Enum::Type::Function) + { + (__NERD_FUNCTION(object[key]))->object["this"] = NerdCore::VAR(this); + __NERD_FUNCTION(object[key])->bind = bind; + } + */ + return object[key]; + #else + for (auto & search : object) + { + if (key.compare(search.first) == 0) + { + return search.second; + } + } + + object.push_back(NerdCore::Type::pair_t(key, NerdCore::Global::null)); + + return object[object.size() - 1].second; + #endif + } + + NerdCore::VAR &Object::operator[](NerdCore::VAR key) + { + return Object::GetSet(key); + + } + + NerdCore::VAR &Object::operator[](int key) + { + std::string _str = std::to_string(key); + return Object::GetSet(_str); + } + + NerdCore::VAR &Object::operator[](double key) + { + std::string _str = std::to_string(key); + return Object::GetSet(_str); + } + + NerdCore::VAR &Object::operator[](const char* key) + { + return Object::GetSet(key); + } + + // Comparation operators + Object Object::operator!() const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Object(); + } + bool Object::operator==(const Object &_v1) const { return false; } + // === emulated with __NERD_EQUAL_VALUE_AND_TYPE + // !== emulated with __NERD_NOT_EQUAL_VALUE_AND_TYPE + bool Object::operator!=(const Object &_v1) const { return true; } + bool Object::operator<(const Object &_v1) const { return false; } + bool Object::operator<=(const Object &_v1) const { return true; } + bool Object::operator>(const Object &_v1) const { return false; } + bool Object::operator>=(const Object &_v1) const { return true; } + // Numeric operators + Object Object::operator+() const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Object(); + } + Object Object::operator-() const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Object(); + } + Object Object::operator++(const int _v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Object(); + } + Object Object::operator--(const int _v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Object(); + } + Object Object::operator+(const Object &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Object(); + } + Object Object::operator+=(const Object &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Object(); + } + Object Object::operator-(const Object &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Object(); + } + Object Object::operator-=(const Object &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Object(); + } + Object Object::operator*(const Object &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Object(); + } + Object Object::operator*=(const Object &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Object(); + } + // TODO: "**" and "**=" operators + Object Object::operator/(const Object &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Object(); + } + Object Object::operator/=(const Object &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Object(); + } + Object Object::operator%(const Object &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Object(); + } + Object Object::operator%=(const Object &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Object(); + } + Object Object::operator&(const Object &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Object(); + } + Object Object::operator|(const Object &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Object(); + } + Object Object::operator^(const Object &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Object(); + } + Object Object::operator~() const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Object(); + } + Object Object::operator>>(const Object &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Object(); + } + Object Object::operator<<(const Object &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Object(); + } + Object Object::operator&=(const Object &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Object(); + } + Object Object::operator|=(const Object &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Object(); + } + Object Object::operator^=(const Object &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Object(); + } + Object Object::operator>>=(const Object &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Object(); + } + Object Object::operator<<=(const Object &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return Object(); + } + // TODO: ">>>" and ">>>=" operators +} // namespace NerdCore::Class diff --git a/self/compiler/native/nerdcore/src/class/object_header.h b/self/compiler/native/nerdcore/src/class/object_header.h new file mode 100644 index 000000000..7a1b52ca9 --- /dev/null +++ b/self/compiler/native/nerdcore/src/class/object_header.h @@ -0,0 +1,102 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +#pragma once +#include "_meta.h" + +namespace NerdCore::Class +{ + class Object : public virtual Base + { + public: + // Constructors + Object(); + + //Object(NerdCore::VAR _obj); + // Properties + count_t counter = 0; + bool deleted = false; + //bool hasLazy = false; + NerdCore::Type::object_t object; + void* bind = nullptr; + // Methods + double Size(); + inline void Delete() noexcept; + inline void jsDelete(const std::string _key) noexcept; + inline void* Copy() noexcept; + // Native cast + explicit operator bool() const noexcept; + explicit operator double() const noexcept; + explicit operator int() const noexcept; + explicit operator long long() const noexcept; + explicit operator std::string() const noexcept; + // Main operators + inline NerdCore::VAR& GetSet(std::string key); + + NerdCore::VAR const operator[](NerdCore::VAR key) const; + NerdCore::VAR &operator[](NerdCore::VAR key); + NerdCore::VAR &operator[](int key); + NerdCore::VAR &operator[](double key); + NerdCore::VAR &operator[](const char* key); + + + // Comparation operators + Object operator!() const; + bool operator==(const Object &_v1) const; + // === emulated with __NERD_EQUAL_VALUE_AND_TYPE + // !== emulated with __NERD_NOT_EQUAL_VALUE_AND_TYPE + bool operator!=(const Object &_v1) const; + bool operator<(const Object &_v1) const; + bool operator<=(const Object &_v1) const; + bool operator>(const Object &_v1) const; + bool operator>=(const Object &_v1) const; + // Numeric operators + Object operator+() const; + Object operator-() const; + Object operator++(const int _v1); + Object operator--(const int _v1); + Object operator+(const Object &_v1) const; + Object operator+=(const Object &_v1); + Object operator-(const Object &_v1) const; + Object operator-=(const Object &_v1); + Object operator*(const Object &_v1) const; + Object operator*=(const Object &_v1); + // TODO: "**" and "**=" operators + Object operator/(const Object &_v1) const; + Object operator/=(const Object &_v1); + Object operator%(const Object &_v1) const; + Object operator%=(const Object &_v1); + Object operator&(const Object &_v1) const; + Object operator|(const Object &_v1) const; + Object operator^(const Object &_v1) const; + Object operator~() const; + Object operator>>(const Object &_v1) const; + Object operator<<(const Object &_v1) const; + Object operator&=(const Object &_v1); + Object operator|=(const Object &_v1); + Object operator^=(const Object &_v1); + Object operator>>=(const Object &_v1); + Object operator<<=(const Object &_v1); + // TODO: ">>>" and ">>>=" operators + }; +} // namespace NerdCore::Class diff --git a/self/compiler/native/nerdcore/src/class/string.h b/self/compiler/native/nerdcore/src/class/string.h new file mode 100644 index 000000000..a842af080 --- /dev/null +++ b/self/compiler/native/nerdcore/src/class/string.h @@ -0,0 +1,568 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +#pragma once +#include "string_header.h" +#include +#include + +namespace NerdCore::Class +{ + // Constructors + String::String() + { + object["__proto__"] = NerdCore::Global::String["prototype"]; + } + String::String(std::string val) + { + object["__proto__"] = NerdCore::Global::String["prototype"]; + value = val; + } + String::String(const char* val) + { + object["__proto__"] = NerdCore::Global::String["prototype"]; + value = val; + } + // Methods + inline void String::Delete() noexcept + { + if(--counter == 0) + { + delete this; + } + } + inline void* String::Copy() noexcept + { + return new String(value); + } + // Native cast + String::operator bool() const noexcept { return value.size() > 0; } + String::operator double() const noexcept + { + std::string::size_type end; + double res; + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + try + { + res = std::stod(value, &end); + }catch(...){} + #else + res = std::stod(value, &end); + #endif + + #ifdef __NERD_ENV_ARDUINO + return 0; + #else + return end == value.size() ? res : std::numeric_limits::quiet_NaN(); + #endif + } + String::operator int() const noexcept + { + std::string::size_type end; + int res; + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + try + { + res = std::stoi(value, &end, 10); + }catch(...){} + #else + res = std::stoi(value, &end, 10); + #endif + + #ifdef __NERD_ENV_ARDUINO + return 0; + #else + return end == value.size() ? res : std::numeric_limits::quiet_NaN(); + #endif + } + String::operator long long() const noexcept + { + std::string::size_type end; + long long res; + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + try + { + res = std::stoll(value, &end, 10); + }catch(...){} + #else + res = std::stoll(value, &end, 10); + #endif + + #ifdef __NERD_ENV_ARDUINO + return 0; + #else + return end == value.size() ? res : std::numeric_limits::quiet_NaN(); + #endif + } + String::operator std::string() const noexcept { return value; } + // Main operators + NerdCore::VAR const String::operator[](NerdCore::VAR key) const + { + return NerdCore::Global::null; + } + + static NerdCore::Global::var _char = ""; + + + + NerdCore::VAR &String::GetSet(NerdCore::VAR keyVar) + { + if(keyVar.type == NerdCore::Enum::Type::Number) + { + int key = (int)keyVar; + + if(key > value.size() - 1) + { + return NerdCore::Global::null; + } + else + { + _char = std::string(1, value[key]); + return _char; + } + } + else if(keyVar.type == NerdCore::Enum::Type::String) + { + std::string key = ((NerdCore::Class::String*)(keyVar.data.ptr))->value; + #ifndef __NERD__OBJECT_VECTOR + // if current object[key] is null, we look for the prototypal chain + if(object[key].type == NerdCore::Enum::Type::Null) + { + + NerdCore::VAR __proto = object["__proto__"]; + while(__proto.type != NerdCore::Enum::Type::Null) + { + if(__proto[key].type != NerdCore::Enum::Type::Null) + { + object[key] = __proto[key]; + break; + } + __proto = __proto["__proto__"]; + } + } + /* + if(object[key].type == NerdCore::Enum::Type::Function) + { + value.copy((char*)__NERD_FUNCTION(object[key])->bind, value.length()); + } + */ + + return object[key]; + #else + for (auto & search : object) + { + if (key.compare(search.first) == 0) + { + return search.second; + } + } + + object.push_back(NerdCore::Type::pair_t(key, NerdCore::Global::null)); + + return object[object.size() - 1].second; + #endif + } + else + { + return NerdCore::Global::null; + } + } + + + NerdCore::VAR &String::operator[](NerdCore::VAR key) + { + return String::GetSet(key); + } + + NerdCore::VAR &String::operator[](int key) + { + return String::GetSet(key); + } + + NerdCore::VAR &String::operator[](double key) + { + return String::GetSet(key); + } + + NerdCore::VAR &String::operator[](const char* key) + { + #ifndef __NERD__OBJECT_VECTOR + // if current object[key] is null, we look for the prototypal chain + if(object[key].type == NerdCore::Enum::Type::Null) + { + NerdCore::VAR __proto = object["__proto__"]; + while(__proto.type != NerdCore::Enum::Type::Null) + { + if(__proto[key].type != NerdCore::Enum::Type::Null) + { + object[key] = __proto[key]; + break; + } + __proto = __proto["__proto__"]; + } + } + /* + if(object[key].type == NerdCore::Enum::Type::Function) + { + //__NERD_FUNCTION(object[key])->bind = value.data(); + //value.copy((char*)__NERD_FUNCTION(object[key])->bind, value.length()); + } + */ + return object[key]; + #else + for (auto & search : object) + { + if (key.compare(search.first) == 0) + { + return search.second; + } + } + + object.push_back(NerdCore::Type::pair_t(key, NerdCore::Global::null)); + + return object[object.size() - 1].second; + #endif + } + + // Comparation operators + String String::operator!() const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return String(); + } + bool String::operator==(const String &_v1) const { return value.compare(_v1.value) == 0; } + // === emulated with __NERD_EQUAL_VALUE_AND_TYPE + // !== emulated with __NERD_NOT_EQUAL_VALUE_AND_TYPE + bool String::operator!=(const String &_v1) const { return value.compare(_v1.value) != 0; } + bool String::operator<(const String &_v1) const { return value.at(0) < _v1.value.at(0); } + bool String::operator<=(const String &_v1) const { return value.at(0) <= _v1.value.at(0); } + bool String::operator>(const String &_v1) const { return value.at(0) > _v1.value.at(0); } + bool String::operator>=(const String &_v1) const { return value.at(0) >= _v1.value.at(0); } + // Numeric operators + String String::operator+() const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return String(); + } + String String::operator-() const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return String(); + } + String String::operator++(const int _v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return String(); + } + String String::operator--(const int _v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return String(); + } + String String::operator+(const String &_v1) const { return value + _v1.value; } + String String::operator+=(const String &_v1) { value += _v1.value; return *this; } + String String::operator-(const String &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return String(); + } + String String::operator-=(const String &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return String(); + } + String String::operator*(const String &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return String(); + } + String String::operator*=(const String &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return String(); + } + // TODO: "**" and "**=" operators + String String::operator/(const String &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return String(); + } + String String::operator/=(const String &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return String(); + } + String String::operator%(const String &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return String(); + } + String String::operator%=(const String &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return String(); + } + String String::operator&(const String &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return String(); + } + String String::operator|(const String &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return String(); + } + String String::operator^(const String &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return String(); + } + String String::operator~() const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return String(); + } + String String::operator>>(const String &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return String(); + } + String String::operator<<(const String &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return String(); + } + String String::operator&=(const String &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return String(); + } + String String::operator|=(const String &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return String(); + } + String String::operator^=(const String &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return String(); + } + String String::operator>>=(const String &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return String(); + } + String String::operator<<=(const String &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return String(); + } + // TODO: ">>>" and ">>>=" operators + /*** STRING METHODS ***/ + NerdCore::VAR String::toString(NerdCore::VAR* _args, int _length) const + { + return value; + } + + NerdCore::VAR String::split(NerdCore::VAR* _args, int _length) const + { + NerdCore::VAR _needle; + if (_length > 0) + _needle = _args[0]; + else + return NerdCore::VAR(this->value); + + NerdCore::VAR _arr = new NerdCore::Class::Array(); + char *_v = (char *)malloc(strlen(this->value.c_str()) + 1); + strcpy(_v, this->value.c_str()); + char *delim = (char *)malloc(strlen(((std::string)_needle).c_str()) + 1); + strcpy(delim, ((std::string)_needle).c_str()); + + char *ptr = strtok(_v, delim); + int i = 0; + char *_new; + while (ptr != NULL) + { + _new = (char *)malloc(strlen(ptr) + 1); + strcpy(_new, ptr); + __NERD_Object_Set(i, _new, _arr); + free(_new); + ptr = strtok(NULL, delim); + i++; + } + + free(delim); + return _arr; + } + + NerdCore::VAR String::indexOf(NerdCore::VAR* _args, int _length) const + { + NerdCore::VAR _needle; + if (_length > 0) + _needle = _args[0]; + else + return NerdCore::VAR(-1); + + std::string::size_type loc = this->value.find((std::string)_needle, 0); + if (loc != std::string::npos) + { + return NerdCore::VAR((int)loc); + } + return NerdCore::VAR(-1); + } + + NerdCore::VAR String::lastIndexOf(NerdCore::VAR* _args, int _length) const + { + NerdCore::VAR _needle; + if (_length > 0) + _needle = _args[0]; + else + return NerdCore::VAR(-1); + + std::string::size_type loc = this->value.find_last_of((std::string)_needle, 0); + if (loc != std::string::npos) + { + return NerdCore::VAR((int)loc); + } + return NerdCore::VAR(-1); + } + + NerdCore::VAR String::search(NerdCore::VAR* _args, int _length) const + { + NerdCore::VAR _needle; + if (_length > 0) + _needle = _args[0]; + else + return NerdCore::VAR(-1); + + std::string::size_type loc = this->value.find((std::string)_needle, 0); + if (loc != std::string::npos) + { + return NerdCore::VAR((int)loc); + } + return NerdCore::VAR(-1); + } + + NerdCore::VAR String::slice(NerdCore::VAR* _args, int _length) const + { + NerdCore::VAR _start; + NerdCore::VAR _end; + if (_length > 0) + _start = _args[0]; + else + return NerdCore::VAR(this->value); + if (_length > 1) + _end = _args[1]; + + if (_end.type == NerdCore::Enum::Type::Null) + return NerdCore::VAR(this->value.substr((int)_start, std::string::npos)); + int _endIndex = (int)_end - (int)_start; + return NerdCore::VAR(this->value.substr((int)_start, _endIndex)); + } + + NerdCore::VAR String::substr(NerdCore::VAR* _args, int _length) const + { + NerdCore::VAR _start; + NerdCore::VAR _end; + if (_length > 0) + _start = _args[0]; + else + return NerdCore::VAR(this->value); + if (_length > 1) + _end = _args[1]; + + if (_end.type == NerdCore::Enum::Type::Null) + return NerdCore::VAR(this->value.substr((int)_start, std::string::npos)); + return NerdCore::VAR(this->value.substr((int)_start, (int)_end)); + } + + NerdCore::VAR String::replace(NerdCore::VAR* _args, int _length) const + { + NerdCore::VAR _search; + NerdCore::VAR _replace; + if (_length > 0) + _search = _args[0]; + else + return NerdCore::VAR(this->value); + if (_length > 1) + _replace = _args[1]; + + size_t start_pos = this->value.find((std::string)_search); + if (start_pos == std::string::npos) + { + return NerdCore::VAR(value); + } + + std::string _new = value; + return NerdCore::VAR(_new.replace(start_pos, ((std::string)_search).length(), (std::string)_replace)); + } + /* END STRING METHODS */ +} // namespace NerdCore::Class \ No newline at end of file diff --git a/self/compiler/native/nerdcore/src/class/string_header.h b/self/compiler/native/nerdcore/src/class/string_header.h new file mode 100644 index 000000000..d107aef6a --- /dev/null +++ b/self/compiler/native/nerdcore/src/class/string_header.h @@ -0,0 +1,115 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +#pragma once +#include "_meta.h" + +namespace NerdCore::Class +{ + class String : public virtual Base + { + public: + // Constructors + String(); + String(std::string val); + String(const char* val); + // Properties + std::string value; + NerdCore::Type::object_t object; + void* bind = nullptr; + count_t counter = 1; + // Methods + inline void Delete() noexcept; + inline void* Copy() noexcept; + // Native cast + explicit operator bool() const noexcept; + explicit operator double() const noexcept; + explicit operator int() const noexcept; + explicit operator long long() const noexcept; + explicit operator std::string() const noexcept; + // Main operators + inline NerdCore::VAR& GetSet(NerdCore::VAR keyVar); + NerdCore::VAR const operator[](NerdCore::VAR key) const; + NerdCore::VAR &operator[](NerdCore::VAR key); + NerdCore::VAR &operator[](int key); + NerdCore::VAR &operator[](double key); + NerdCore::VAR &operator[](const char* key); + + // Comparation operators + template + NerdCore::VAR operator() (Args... args) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NerdCore::Global::null; + } + String operator!() const; + bool operator==(const String &_v1) const; + // === emulated with __NERD_EQUAL_VALUE_AND_TYPE + // !== emulated with __NERD_NOT_EQUAL_VALUE_AND_TYPE + bool operator!=(const String &_v1) const; + bool operator<(const String &_v1) const; + bool operator<=(const String &_v1) const; + bool operator>(const String &_v1) const; + bool operator>=(const String &_v1) const; + // Numeric operators + String operator+() const; + String operator-() const; + String operator++(const int _v1); + String operator--(const int _v1); + String operator+(const String &_v1) const; + String operator+=(const String &_v1); + String operator-(const String &_v1) const; + String operator-=(const String &_v1); + String operator*(const String &_v1) const; + String operator*=(const String &_v1); + // TODO: "**" and "**=" operators + String operator/(const String &_v1) const; + String operator/=(const String &_v1); + String operator%(const String &_v1) const; + String operator%=(const String &_v1); + String operator&(const String &_v1) const; + String operator|(const String &_v1) const; + String operator^(const String &_v1) const; + String operator~() const; + String operator>>(const String &_v1) const; + String operator<<(const String &_v1) const; + String operator&=(const String &_v1); + String operator|=(const String &_v1); + String operator^=(const String &_v1); + String operator>>=(const String &_v1); + String operator<<=(const String &_v1); + // TODO: ">>>" and ">>>=" operators + /*** STRING METHODS ***/ + NerdCore::VAR toString(NerdCore::VAR* _args, int _length) const; + NerdCore::VAR split(NerdCore::VAR* _args, int _length) const; + NerdCore::VAR indexOf(NerdCore::VAR* _args, int _length) const; + NerdCore::VAR lastIndexOf(NerdCore::VAR* _args, int _length) const; + NerdCore::VAR search(NerdCore::VAR* _args, int _length) const; + NerdCore::VAR slice(NerdCore::VAR* _args, int _length) const; + NerdCore::VAR substr(NerdCore::VAR* _args, int _length) const; + NerdCore::VAR replace(NerdCore::VAR* _args, int _length) const; + /* END STRING METHODS */ + }; +} // namespace NerdCore::Class diff --git a/self/compiler/native/nerdcore/src/class/struct.h b/self/compiler/native/nerdcore/src/class/struct.h new file mode 100644 index 000000000..5b6aff5f5 --- /dev/null +++ b/self/compiler/native/nerdcore/src/class/struct.h @@ -0,0 +1,363 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +#pragma once +#include "struct_header.h" +#include +#include + +namespace NerdCore::Class +{ + // Constructors + Struct::Struct() {} + Struct::Struct(void *val) + { + value = val; + } + Struct::Struct(void *val, void* fn) + { + value = val; + Clean = (NerdCore::Type::clean_struct*)fn; + } + // Methods + inline void Struct::Delete() noexcept + { + if (--counter == 0) + { + (*static_cast(Clean))(value); + delete Clean; + delete this; + } + } + + inline void* Struct::Copy() noexcept + { + counter++; + return this; + } + // Native cast + Struct::operator bool() const noexcept { return true; } + Struct::operator double() const noexcept + { + #ifdef __NERD_ENV_ARDUINO + return 0; + #else + return std::numeric_limits::quiet_NaN(); + #endif + } + Struct::operator int() const noexcept + { + #ifdef __NERD_ENV_ARDUINO + return 0; + #else + return std::numeric_limits::quiet_NaN(); + #endif + } + Struct::operator long long() const noexcept + { + #ifdef __NERD_ENV_ARDUINO + return 0; + #else + return std::numeric_limits::quiet_NaN(); + #endif + } + Struct::operator std::string() const noexcept + { + return "[native struct]"; + } + // Main operators + NerdCore::VAR const Struct::operator[](NerdCore::VAR key) const + { + return NerdCore::Global::null; + } + NerdCore::VAR &Struct::operator[](NerdCore::VAR key) + { + #ifndef __NERD__OBJECT_VECTOR + return object[(std::string)key]; + #else + for (auto & search : object) + { + if (((std::string)key).compare(search.first) == 0) + { + return search.second; + } + } + + object.push_back(NerdCore::Type::pair_t((std::string)key, NerdCore::VAR())); + return object[object.size() - 1].second; + #endif + } + + NerdCore::VAR &Struct::operator[](int key) + { + #ifndef __NERD__OBJECT_VECTOR + return object[std::to_string(key)]; + #else + std::string _str = std::to_string(key); + for (auto & search : object) + { + if (_str.compare(search.first) == 0) + { + return search.second; + } + } + + object.push_back(NerdCore::Type::pair_t(_str, NerdCore::VAR())); + return object[object.size() - 1].second; + #endif + } + + NerdCore::VAR &Struct::operator[](double key) + { + #ifndef __NERD__OBJECT_VECTOR + return object[std::to_string(key)]; + #else + std::string _str = std::to_string(key); + for (auto & search : object) + { + if (_str.compare(search.first) == 0) + { + return search.second; + } + } + + object.push_back(NerdCore::Type::pair_t(_str, NerdCore::VAR())); + return object[object.size() - 1].second; + #endif + } + + + NerdCore::VAR &Struct::operator[](const char* key) + { + std::string str = key; + #ifndef __NERD__OBJECT_VECTOR + return object[str]; + #else + for (auto & search : object) + { + if (str.compare(search.first) == 0) + { + return search.second; + } + } + + object.push_back(NerdCore::Type::pair_t(str, NerdCore::VAR())); + return object[object.size() - 1].second; + #endif + } + + // Comparation operators + NerdCore::VAR Struct::operator!() const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NerdCore::VAR(); + } + bool Struct::operator==(const NerdCore::VAR &_v1) const { return false; } + // === emulated with __NERD_EQUAL_VALUE_AND_TYPE + // !== emulated with __NERD_NOT_EQUAL_VALUE_AND_TYPE + bool Struct::operator!=(const NerdCore::VAR &_v1) const { return true; } + bool Struct::operator<(const NerdCore::VAR &_v1) const { return false; } + bool Struct::operator<=(const NerdCore::VAR &_v1) const { return true; } + bool Struct::operator>(const NerdCore::VAR &_v1) const { return false; } + bool Struct::operator>=(const NerdCore::VAR &_v1) const { return true; } + // Numeric operators + NerdCore::VAR Struct::operator+() const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NerdCore::VAR(); + } + NerdCore::VAR Struct::operator-() const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NerdCore::VAR(); + } + NerdCore::VAR Struct::operator++(const int _v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NerdCore::VAR(); + } + NerdCore::VAR Struct::operator--(const int _v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NerdCore::VAR(); + } + NerdCore::VAR Struct::operator+(const NerdCore::VAR &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NerdCore::VAR(); + } + NerdCore::VAR Struct::operator+=(const NerdCore::VAR &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NerdCore::VAR(); + } + NerdCore::VAR Struct::operator-(const NerdCore::VAR &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NerdCore::VAR(); + } + NerdCore::VAR Struct::operator-=(const NerdCore::VAR &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NerdCore::VAR(); + } + NerdCore::VAR Struct::operator*(const NerdCore::VAR &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NerdCore::VAR(); + } + NerdCore::VAR Struct::operator*=(const NerdCore::VAR &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NerdCore::VAR(); + } + // TODO: "**" and "**=" operators + NerdCore::VAR Struct::operator/(const NerdCore::VAR &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NerdCore::VAR(); + } + NerdCore::VAR Struct::operator/=(const NerdCore::VAR &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NerdCore::VAR(); + } + NerdCore::VAR Struct::operator%(const NerdCore::VAR &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NerdCore::VAR(); + } + NerdCore::VAR Struct::operator%=(const NerdCore::VAR &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NerdCore::VAR(); + } + NerdCore::VAR Struct::operator&(const NerdCore::VAR &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NerdCore::VAR(); + } + NerdCore::VAR Struct::operator|(const NerdCore::VAR &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NerdCore::VAR(); + } + NerdCore::VAR Struct::operator^(const NerdCore::VAR &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NerdCore::VAR(); + } + NerdCore::VAR Struct::operator~() const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NerdCore::VAR(); + } + NerdCore::VAR Struct::operator>>(const NerdCore::VAR &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NerdCore::VAR(); + } + NerdCore::VAR Struct::operator<<(const NerdCore::VAR &_v1) const + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NerdCore::VAR(); + } + NerdCore::VAR Struct::operator&=(const NerdCore::VAR &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NerdCore::VAR(); + } + NerdCore::VAR Struct::operator|=(const NerdCore::VAR &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NerdCore::VAR(); + } + NerdCore::VAR Struct::operator^=(const NerdCore::VAR &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NerdCore::VAR(); + } + NerdCore::VAR Struct::operator>>=(const NerdCore::VAR &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NerdCore::VAR(); + } + NerdCore::VAR Struct::operator<<=(const NerdCore::VAR &_v1) + { + #if !defined(__NERD_ENV_ARDUINO) && !defined(__NERD_ENV_ESP32) + throw InvalidTypeException(); + #endif + return NerdCore::VAR(); + } + // TODO: ">>>" and ">>>=" operators +} // namespace NerdCore::Class diff --git a/self/compiler/native/nerdcore/src/class/struct_header.h b/self/compiler/native/nerdcore/src/class/struct_header.h new file mode 100644 index 000000000..bd1251f3d --- /dev/null +++ b/self/compiler/native/nerdcore/src/class/struct_header.h @@ -0,0 +1,104 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +#pragma once +#include "_meta.h" + +namespace NerdCore::Class +{ + class Struct : public virtual Base + { + public: + // Constructors + Struct(); + Struct(void* val); + Struct(void* val, void* fn); + // Properties + count_t counter = 1; + void* value = nullptr; + NerdCore::Type::object_t object; + NerdCore::Type::clean_struct* Clean; + // Methods + inline void Delete() noexcept; + inline void StructDelete() noexcept; + inline void* Copy() noexcept; + // Struct cast + explicit operator bool() const noexcept; + explicit operator double() const noexcept; + explicit operator int() const noexcept; + explicit operator long long() const noexcept; + explicit operator std::string() const noexcept; + // Main operators + NerdCore::VAR const operator[](NerdCore::VAR key) const; + NerdCore::VAR &operator[](NerdCore::VAR key); + NerdCore::VAR &operator[](int key); + NerdCore::VAR &operator[](double key); + NerdCore::VAR &operator[](const char* key); + + template + NerdCore::VAR operator()(Args... args) const + { + auto _args = NerdCore::Type::vector_t{(NerdCore::VAR)args...}; + return (*static_cast *>(value))(_args); + } + + // Comparation operators + NerdCore::VAR operator!() const; + bool operator==(const NerdCore::VAR &_v1) const; + // === emulated with __NERD_EQUAL_VALUE_AND_TYPE + // !== emulated with __NERD_NOT_EQUAL_VALUE_AND_TYPE + bool operator!=(const NerdCore::VAR &_v1) const; + bool operator<(const NerdCore::VAR &_v1) const; + bool operator<=(const NerdCore::VAR &_v1) const; + bool operator>(const NerdCore::VAR &_v1) const; + bool operator>=(const NerdCore::VAR &_v1) const; + // Numeric operators + NerdCore::VAR operator+() const; + NerdCore::VAR operator-() const; + NerdCore::VAR operator++(const int _v1); + NerdCore::VAR operator--(const int _v1); + NerdCore::VAR operator+(const NerdCore::VAR &_v1) const; + NerdCore::VAR operator+=(const NerdCore::VAR &_v1); + NerdCore::VAR operator-(const NerdCore::VAR &_v1) const; + NerdCore::VAR operator-=(const NerdCore::VAR &_v1); + NerdCore::VAR operator*(const NerdCore::VAR &_v1) const; + NerdCore::VAR operator*=(const NerdCore::VAR &_v1); + // TODO: "**" and "**=" operators + NerdCore::VAR operator/(const NerdCore::VAR &_v1) const; + NerdCore::VAR operator/=(const NerdCore::VAR &_v1); + NerdCore::VAR operator%(const NerdCore::VAR &_v1) const; + NerdCore::VAR operator%=(const NerdCore::VAR &_v1); + NerdCore::VAR operator&(const NerdCore::VAR &_v1) const; + NerdCore::VAR operator|(const NerdCore::VAR &_v1) const; + NerdCore::VAR operator^(const NerdCore::VAR &_v1) const; + NerdCore::VAR operator~() const; + NerdCore::VAR operator>>(const NerdCore::VAR &_v1) const; + NerdCore::VAR operator<<(const NerdCore::VAR &_v1) const; + NerdCore::VAR operator&=(const NerdCore::VAR &_v1); + NerdCore::VAR operator|=(const NerdCore::VAR &_v1); + NerdCore::VAR operator^=(const NerdCore::VAR &_v1); + NerdCore::VAR operator>>=(const NerdCore::VAR &_v1); + NerdCore::VAR operator<<=(const NerdCore::VAR &_v1); + // TODO: ">>>" and ">>>=" operators + }; +} // namespace NerdCore::Class diff --git a/self/compiler/native/nerdcore/src/classes.h b/self/compiler/native/nerdcore/src/classes.h new file mode 100644 index 000000000..2604f65f1 --- /dev/null +++ b/self/compiler/native/nerdcore/src/classes.h @@ -0,0 +1,32 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +#pragma once + +#include "./class/array.h" +#include "./class/function.h" +#include "./class/native.h" +#include "./class/struct.h" +#include "./class/fixed_array.h" +#include "./class/object.h" +#include "./class/string.h" diff --git a/self/compiler/native/nerdcore/src/classes_header.h b/self/compiler/native/nerdcore/src/classes_header.h new file mode 100644 index 000000000..a32216e78 --- /dev/null +++ b/self/compiler/native/nerdcore/src/classes_header.h @@ -0,0 +1,35 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +#pragma once +#define __INC_Nerd_CLASSES_HEADER + +#include "./class/base_header.h" +#include "./class/array_header.h" +#include "./class/object_header.h" +#include "./class/function_header.h" +#include "./class/native_header.h" +//#include "./class/native_tpl_header.h" +#include "./class/struct_header.h" +#include "./class/fixed_array_header.h" +#include "./class/string_header.h" diff --git a/self/compiler/native/nerdcore/src/enum.h b/self/compiler/native/nerdcore/src/enum.h new file mode 100644 index 000000000..52e9b5362 --- /dev/null +++ b/self/compiler/native/nerdcore/src/enum.h @@ -0,0 +1,40 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +namespace NerdCore::Enum +{ + enum Type + { + Null, + Boolean, + Number, + String, + Native, + NativeTPL, + Struct, + FixedArray, + Array, + Object, + Function, + }; +} \ No newline at end of file diff --git a/self/compiler/native/nerdcore/src/functions.h b/self/compiler/native/nerdcore/src/functions.h new file mode 100644 index 000000000..a5c97689b --- /dev/null +++ b/self/compiler/native/nerdcore/src/functions.h @@ -0,0 +1,32 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +NerdCore::VAR getArguments(int argc, char** argv) +{ + NerdCore::VAR __NJS_ARGS = new NerdCore::Class::Array(); + for( int i = 0; i < argc; i++) + { + __NJS_ARGS[i] = argv[i]; + } + return __NJS_ARGS; +} diff --git a/self/compiler/native/nerdcore/src/functions_header.h b/self/compiler/native/nerdcore/src/functions_header.h new file mode 100644 index 000000000..6d4b63c99 --- /dev/null +++ b/self/compiler/native/nerdcore/src/functions_header.h @@ -0,0 +1,111 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +NerdCore::VAR __NERD_Log_Console(NerdCore::VAR _var); +NerdCore::VAR __NERD_Object_Keys(NerdCore::VAR _var); +NerdCore::VAR __NERD_Object_Stringify(NerdCore::VAR _var); +NerdCore::VAR __NERD_Object_Stringify(NerdCore::VAR _var, bool _bracket); +NerdCore::VAR __NERD_Object_Clone(NerdCore::VAR& _var); +NerdCore::VAR __NERD_Object_Set(std::string _index, NerdCore::VAR _value, NerdCore::Type::object_t *_obj); +std::string __NERD_DOUBLE_TO_STRING(double _var); + +/*** String MANIPULATION ***/ + +#ifdef __NERD_ENV_ARDUINO +namespace std +{ + template + string to_string(m _var) + { + std::stringstream output; + output << _var; + return output.str(); + } + int isnan(double __x) + { + return ::isnan(__x); + } + inline int isfinite(double __x) + { + return ::isfinite(__x); + } + inline int signbit(double __x) + { + return ::signbit(__x); + } + inline double stod(std::string _str, std::string::size_type* sz) + { + *sz = _str.length(); + return String(_str.c_str()).toFloat(); + } + inline int stoi(std::string _str, std::string::size_type* sz, int _base) + { + *sz = _str.length(); + return String(_str.c_str()).toInt(); + } + inline long long stoll(std::string _str, std::string::size_type* sz, int _base) + { + *sz = _str.length(); + return atol(_str.c_str()); + } +} + +template +m remainder(m _dividend, n _divisor) +{ + m quotient = (int)_dividend / (int)_divisor; + m remainder = (int)_dividend % (int)_divisor; + return remainder; +} +#endif +template +std::string __NERD_Concat_To_Str(m _left, n _right) +{ + std::stringstream output; + output << _left << _right; + return output.str(); +} +/* END String MANIPULATION */ + +/*** Number MANIPULATION ***/ +template +int __NERD_Str_To_Int(m _left) +{ + int out; + std::stringstream output; + output << _left; + output >> out; + return out; +} +template +double __NERD_Str_To_Double(m _left) +{ + double out; + std::stringstream output; + output << _left; + output >> out; + return out; +} +/* END Number MANIPULATION */ + +NerdCore::VAR getArguments(int argc, char** argv); \ No newline at end of file diff --git a/self/compiler/native/nerdcore/src/macro.h b/self/compiler/native/nerdcore/src/macro.h new file mode 100644 index 000000000..1afe26a21 --- /dev/null +++ b/self/compiler/native/nerdcore/src/macro.h @@ -0,0 +1,66 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +/*** HELPERS ***/ +#define __NERD_GET_String(_var) _var.get().s->value +#define __NERD_Create_Boolean(_value) NerdCore::VAR(NerdCore::Enum::Type::Boolean, _value) +#define __NERD_Create_Number(_value) NerdCore::VAR(_value) +#define __NERD_Create_Function(_value) NerdCore::VAR(NerdCore::Enum::Type::Function, _value) +#define __NERD_Create_Undefined() NerdCore::VAR() +#define __NERD_Create_String(_value) NerdCore::VAR(_value) +#define __NERD_Create_Infinity() NerdCore::VAR(std::numeric_limits::infinity) +#define __NERD_Create_Null() NerdCore::VAR(NerdCore::Enum::Type::Null, 0) +#define __NERD_Create_Struct(_value) NerdCore::VAR(new _value(), new NerdCore::Type::clean_struct([](void* _ptr){ delete (_value*)_ptr;})) +#define __NERD_Create_FixedArray(_length) NerdCore::VAR(new NerdCore::Class::FixedArray(_length)) +#define __NERD_Create_Lambda(name) NerdCore::Type::function_t* name = new NerdCore::Type::function_t([](NerdCore::VAR& __NERD_THIS, NerdCore::VAR* __NERD_VARARGS, int __NERD_VARLENGTH) + +#define __NERD_Create_Ptr_Scoped_Anon(__CONTENT__) new NerdCore::Type::function_t([&](NerdCore::VAR& __NERD_THIS, NerdCore::VAR* __NERD_VARARGS, int __NERD_VARLENGTH) mutable -> NerdCore::Global::var { __CONTENT__ }) +#define __NERD_Create_Ptr_Scoped_Copy_Anon(__CONTENT__) new NerdCore::Type::function_t([=](NerdCore::VAR& __NERD_THIS, NerdCore::VAR* __NERD_VARARGS, int __NERD_VARLENGTH) mutable -> NerdCore::Global::var { __CONTENT__ }) +#define __NERD_Create_Ptr_Scoped_Copy_Anon_With_Ref(__FN__, __CONTENT__) new NerdCore::Type::function_t([=, &__FN__](NerdCore::VAR& __NERD_THIS, NerdCore::VAR* __NERD_VARARGS, int __NERD_VARLENGTH) mutable -> NerdCore::Global::var { __CONTENT__ }) +#define __NERD_Create_Ptr_Unscoped_With_Copy(__FN__, __CONTENT__) new NerdCore::Type::function_t([__FN__](NerdCore::VAR& __NERD_THIS, NerdCore::VAR* __NERD_VARARGS, int __NERD_VARLENGTH) mutable -> NerdCore::Global::var { __CONTENT__ }) +#define __NERD_Create_Ptr_Unscoped_Anon(__CONTENT__) new NerdCore::Type::function_t([](NerdCore::VAR& __NERD_THIS, NerdCore::VAR* __NERD_VARARGS, int __NERD_VARLENGTH) -> NerdCore::Global::var{ __CONTENT__ }) + +#define __NERD_Create_Var_Scoped_Anon(__CONTENT__) NerdCore::VAR(NerdCore::Enum::Type::Function, __NERD_Create_Ptr_Scoped_Anon(__CONTENT__)) +#define __NERD_Create_Var_Unscoped_Anon(__CONTENT__) NerdCore::VAR(NerdCore::Enum::Type::Function, __NERD_Create_Ptr_Unscoped_Anon(__CONTENT__)) +#define __NERD_Create_Var_Scoped_Copy_Anon(__CONTENT__) NerdCore::VAR(NerdCore::Enum::Type::Function, __NERD_Create_Ptr_Scoped_Copy_Anon(__CONTENT__)) +#define __NERD_Create_Var_Unscoped_With_Copy(__FN__, __CONTENT__) NerdCore::VAR(NerdCore::Enum::Type::Function, __NERD_Create_Ptr_Unscoped_With_Copy(__FN__, __CONTENT__)) +#define __NERD_Create_Var_Scoped_Copy_Anon_With_Ref(__FN__, __CONTENT__) NerdCore::VAR(NerdCore::Enum::Type::Function, __NERD_Create_Ptr_Scoped_Copy_Anon_With_Ref(__FN__, __CONTENT__)) + +#define __NERD_Init_Int(_name, _value) int _name = _value +#define __NERD_Init_Double(_name, _value) double _name = _value +#define __NERD_Init_String(_name, _value) std::string _name = _value +#define __NERD_EXCEPTION_PARAMETER NerdCore::VAR &e +#define finally ; +#define __NERD_Throw_Error(_err) NerdCore::VAR(NerdCore::VAR(_err) + NerdCore::VAR(", line: ") + std::to_string(__LINE__) + NerdCore::VAR(", file: ") + NerdCore::VAR(__FILE__)) +#define __NERD_Boolean_TRUE __NERD_Create_Boolean(true) +#define __NERD_Boolean_FALSE __NERD_Create_Boolean(false) +#define __NERD_FAST_INT double +#define __NERD_CreateMethodToClass(_name, _fn) __NERD_Object_Set(_name, __NERD_Create_Var_Scoped_Anon( return _fn(NerdCore::VAR& __NERD_THIS, __NERD_VARARGS, __NERD_VARLENGTH); ), &object); +#define __NERD_NEW(_fn) ((NerdCore::Class::Function*)_fn.data.ptr)->New +#define __NERD_Access_Struct(_exp, _name) (*(_name*)((NerdCore::Class::Struct*)_exp.data.ptr)->value) +#define arguments() new NerdCore::Class::FixedArray(__NERD_VARARGS, __NERD_VARLENGTH); +//#define __NERD_Native_Ptr(_var, _type) ((_type)((NerdCore::Class::NativeTPL<_type>*)_var.data.ptr)->value) +#define __NERD_OBJECT(_var) ((NerdCore::Class::Object*)_var.data.ptr) +#define __NERD_FUNCTION(_var) ((NerdCore::Class::Function*)_var.data.ptr) +#define __NERD_BIND(_var, _function, _bind) _var = _function;((NerdCore::Class::Function*)_var.data.ptr)->bind = _bind; +#define Prototype() __NERD_Create_Var_Scoped_Copy_Anon( return __NERD_THIS; ) \ No newline at end of file diff --git a/self/compiler/native/nerdcore/src/native.h b/self/compiler/native/nerdcore/src/native.h new file mode 100644 index 000000000..3ad813a6e --- /dev/null +++ b/self/compiler/native/nerdcore/src/native.h @@ -0,0 +1,25 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +#include "native/int.h" +#include "native/double.h" diff --git a/self/compiler/native/nerdcore/src/native/double.h b/self/compiler/native/nerdcore/src/native/double.h new file mode 100644 index 000000000..a26768f71 --- /dev/null +++ b/self/compiler/native/nerdcore/src/native/double.h @@ -0,0 +1,108 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +NerdCore::VAR operator+(double _i, NerdCore::VAR _v) +{ + if(_v.type == NerdCore::Enum::Type::String) return __NERD_DOUBLE_TO_STRING(_i) + (std::string)_v; + else return _i + (double)_v; +} + +void operator+=(double& _i, NerdCore::VAR _v) +{ + _i += (double)_v; +} + +double operator-(double _i, NerdCore::VAR _v) +{ + if(_v.type == NerdCore::Enum::Type::String) return std::numeric_limits::quiet_NaN(); + return _i - (double)_v; +} + +void operator-=(double& _i, NerdCore::VAR _v) +{ + _i -= (double)_v; +} + +double operator*(double _i, NerdCore::VAR _v) +{ + if(_v.type == NerdCore::Enum::Type::String) return std::numeric_limits::quiet_NaN(); + return _i * (double)_v; +} + +void operator*=(double& _i, NerdCore::VAR _v) +{ + _i *= (double)_v; +} + +double operator/(double _i, NerdCore::VAR _v) +{ + if(_v.type == NerdCore::Enum::Type::String) return std::numeric_limits::quiet_NaN(); + return _i / (double)_v; +} + +void operator/=(double& _i, NerdCore::VAR _v) +{ + _i /= _v; +} + +double operator%(double _i, NerdCore::VAR _v) +{ + return (int)_i % (int)_v; +} + +void operator%=(double& _i, NerdCore::VAR _v) +{ + _i %= _v; +} + +double operator==(double _i, NerdCore::VAR _v) +{ + return _i == (double)_v; +} + +double operator!=(double _i, NerdCore::VAR _v) +{ + return _i != (double)_v; +} + +double operator>(double _i, NerdCore::VAR _v) +{ + return _i > (double)_v; +} + +double operator>=(double _i, NerdCore::VAR _v) +{ + return _i >= (double)_v; +} + + +double operator<(double _i, NerdCore::VAR _v) +{ + return _i < (double)_v; +} + + +double operator<=(double _i, NerdCore::VAR _v) +{ + return _i <= (double)_v; +} \ No newline at end of file diff --git a/self/compiler/native/nerdcore/src/native/double_header.h b/self/compiler/native/nerdcore/src/native/double_header.h new file mode 100644 index 000000000..d0ccadb39 --- /dev/null +++ b/self/compiler/native/nerdcore/src/native/double_header.h @@ -0,0 +1,39 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +NerdCore::VAR operator+(double _i, NerdCore::VAR _v); +void operator+=(double& _i, NerdCore::VAR _v); +double operator-(double _i, NerdCore::VAR _v); +void operator-=(double& _i, NerdCore::VAR _v); +double operator*(double _i, NerdCore::VAR _v); +void operator*=(double& _i, NerdCore::VAR _v); +double operator/(double _i, NerdCore::VAR _v); +void operator/=(double& _i, NerdCore::VAR _v); +double operator%(double _i, NerdCore::VAR _v); +void operator%=(double& _i, NerdCore::VAR _v); +double operator==(double _i, NerdCore::VAR _v); +double operator!=(double _i, NerdCore::VAR _v); +double operator>(double _i, NerdCore::VAR _v); +double operator>=(double _i, NerdCore::VAR _v); +double operator<(double _i, NerdCore::VAR _v); +double operator<=(double _i, NerdCore::VAR _v); diff --git a/self/compiler/native/nerdcore/src/native/int.h b/self/compiler/native/nerdcore/src/native/int.h new file mode 100644 index 000000000..ca72ba207 --- /dev/null +++ b/self/compiler/native/nerdcore/src/native/int.h @@ -0,0 +1,105 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +NerdCore::VAR operator+(int _i, NerdCore::VAR _v) +{ + if(_v.type == NerdCore::Enum::Type::String) return __NERD_DOUBLE_TO_STRING(_i) + (std::string)_v; + else return _i + (double)_v; +} + +void operator+=(int& _i, NerdCore::VAR _v) +{ + _i += (double)_v; +} + +double operator-(int _i, NerdCore::VAR _v) +{ + return _i - (double)_v; +} + +void operator-=(int& _i, NerdCore::VAR _v) +{ + _i -= (double)_v; +} + +double operator*(int _i, NerdCore::VAR _v) +{ + return _i * (double)_v; +} + +void operator*=(int& _i, NerdCore::VAR _v) +{ + _i *= _v; +} + +double operator/(int _i, NerdCore::VAR _v) +{ + return _i / (double)_v; +} + +void operator/=(int& _i, NerdCore::VAR _v) +{ + _i /= _v; +} + +double operator%(int _i, NerdCore::VAR _v) +{ + return (int)_i % (int)_v; +} + +void operator%=(int& _i, NerdCore::VAR _v) +{ + _i %= _v; +} + +double operator==(int _i, NerdCore::VAR _v) +{ + return _i == (double)_v; +} + +double operator!=(int _i, NerdCore::VAR _v) +{ + return _i != (double)_v; +} + +double operator>(int _i, NerdCore::VAR _v) +{ + return _i > (double)_v; +} + +double operator>=(int _i, NerdCore::VAR _v) +{ + return _i >= (double)_v; +} + + +double operator<(int _i, NerdCore::VAR _v) +{ + return _i < (double)_v; +} + + +double operator<=(int _i, NerdCore::VAR _v) +{ + return _i <= (double)_v; +} diff --git a/self/compiler/native/nerdcore/src/native/int_header.h b/self/compiler/native/nerdcore/src/native/int_header.h new file mode 100644 index 000000000..b44be3424 --- /dev/null +++ b/self/compiler/native/nerdcore/src/native/int_header.h @@ -0,0 +1,39 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +NerdCore::VAR operator+(int _i, NerdCore::VAR _v); +void operator+=(int& _i, NerdCore::VAR _v); +double operator-(int _i, NerdCore::VAR _v); +void operator-=(int& _i, NerdCore::VAR _v); +double operator*(int _i, NerdCore::VAR _v); +void operator*=(int& _i, NerdCore::VAR _v); +double operator/(int _i, NerdCore::VAR _v); +void operator/=(int& _i, NerdCore::VAR _v); +double operator%(int _i, NerdCore::VAR _v); +void operator%=(int& _i, NerdCore::VAR _v); +double operator==(int _i, NerdCore::VAR _v); +double operator!=(int _i, NerdCore::VAR _v); +double operator>(int _i, NerdCore::VAR _v); +double operator>=(int _i, NerdCore::VAR _v); +double operator<(int _i, NerdCore::VAR _v); +double operator<=(int _i, NerdCore::VAR _v); diff --git a/self/compiler/native/nerdcore/src/native_header.h b/self/compiler/native/nerdcore/src/native_header.h new file mode 100644 index 000000000..647e376ab --- /dev/null +++ b/self/compiler/native/nerdcore/src/native_header.h @@ -0,0 +1,25 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +#include "native/int_header.h" +#include "native/double_header.h" diff --git a/self/compiler/native/nerdcore/src/nerd.cpp b/self/compiler/native/nerdcore/src/nerd.cpp new file mode 100644 index 000000000..c08b128ac --- /dev/null +++ b/self/compiler/native/nerdcore/src/nerd.cpp @@ -0,0 +1,34 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +#include "nerd.hpp" + +#include "functions.h" +#include "native.h" +#include "values.h" +#include "class/number.h" +#include "var.h" +#include "objmgmt.h" +#include "classes.h" +#include "operator.h" +#include "stdfn.h" \ No newline at end of file diff --git a/self/compiler/native/nerdcore/src/nerd.hpp b/self/compiler/native/nerdcore/src/nerd.hpp new file mode 100644 index 000000000..dc20ca359 --- /dev/null +++ b/self/compiler/native/nerdcore/src/nerd.hpp @@ -0,0 +1,96 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +#define _USE_MATH_DEFINES +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#define _USE_MATH_DEFINES +#include +#include +#include + + +#ifdef __NERD_ENV_ARDUINO +#include +#include +#include +#include +#include +#include +#include +#undef max +#undef min +#include +#else +#include +#include +#include +#include +#include +#include +#endif + +#include "enum.h" +#include "macro.h" + +namespace NerdCore +{ + struct VAR; + + namespace Class + { + class Base; + class Undefined; + class Boolean; + class String; + class Array; + class Object; + class Function; + class Native; + class Struct; + class FixedArray; + + + //template + //class NativeTPL; + } +} // namespace NerdCore +#include "type_header.h" +#include "var_header.h" +#include "values_header.h" +#include "functions_header.h" +#include "classes_header.h" +#include "native_header.h" +#include "class/number_header.h" +#include "objmgmt_header.h" +#include "operator_header.h" +#include "stdfn_header.h" diff --git a/self/compiler/native/nerdcore/src/objmgmt.h b/self/compiler/native/nerdcore/src/objmgmt.h new file mode 100644 index 000000000..4c7e4dda2 --- /dev/null +++ b/self/compiler/native/nerdcore/src/objmgmt.h @@ -0,0 +1,127 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +NerdCore::VAR __NERD_delete(NerdCore::VAR _left, NerdCore::VAR _right) +{ + if(_left.type == NerdCore::Enum::Type::Object) + { + ((NerdCore::Class::Object*)_left.data.ptr)->jsDelete(_right); + return __NERD_Boolean_TRUE; + } + else if(_left.type == NerdCore::Enum::Type::Array) + { + ((NerdCore::Class::Array*)_left.data.ptr)->jsDelete(_right); + return __NERD_Boolean_TRUE; + } + else if(_left.type == NerdCore::Enum::Type::Function) + { + ((NerdCore::Class::Function*)_left.data.ptr)->jsDelete(_right); + return __NERD_Boolean_TRUE; + } + return __NERD_Boolean_FALSE; +} + +/*** ***/ +#ifndef __NERD__OBJECT_VECTOR +NerdCore::VAR __NERD_Object_Set(std::string _index, NerdCore::VAR _value, NerdCore::Type::object_t *_obj) +{ + + if (_value.type == NerdCore::Enum::Type::String) + { + (*_obj)[_index] = new NerdCore::Class::String((std::string)_value); + } + else + { + (*_obj)[_index].data.ptr = _value.data.ptr; + } + + return NerdCore::Global::null; +} +#else +NerdCore::VAR __NERD_Object_Set(std::string _index, NerdCore::VAR _value, NerdCore::Type::object_t *_obj) +{ + int _j = (*_obj).size(); + for (int _i = 0; _i < _j; _i++) + { + if (_index.compare((*_obj)[_i].first) == 0) + { + + if (_value.type == NerdCore::Enum::Type::String) + { + (*_obj)[_i].second = new NerdCore::Class::String((std::string)_value); + } + else + { + (*_obj)[_i].second.data.ptr = _value.data.ptr; + } + + return NerdCore::Global::null; + } + } + + (*_obj).push_back(NerdCore::Type::pair_t(_index, _value)); + return NerdCore::Global::null; +} +#endif +/**/ + +NerdCore::VAR __NERD_Object_Set(NerdCore::VAR _index, NerdCore::VAR _value, NerdCore::VAR _array) +{ + if (_array.type == NerdCore::Enum::Type::Array && _index.type == NerdCore::Enum::Type::Number) + { + + if (((NerdCore::Class::Array*)_array.data.ptr)->value.size() <= (int)_index.data.number) + { + ((NerdCore::Class::Array*)_array.data.ptr)->value.resize( (int)_index.data.number + 1); + } + + ((NerdCore::Class::Array*)_array.data.ptr)->value.at( (int)_index.data.number ) = _value; + + return NerdCore::Global::null; + } + else if (_array.type == NerdCore::Enum::Type::Object || _array.type == NerdCore::Enum::Type::String || _array.type == NerdCore::Enum::Type::Function || _array.type == NerdCore::Enum::Type::Array || _array.type == NerdCore::Enum::Type::Native) + { + NerdCore::Type::object_t *_obj; + if (_array.type == NerdCore::Enum::Type::Object) + _obj = &((NerdCore::Class::Object*)_array.data.ptr)->object; + else + return NerdCore::Global::null; + + return __NERD_Object_Set((std::string)_index, _value, _obj); + } + + return NerdCore::Global::null; +} + + + +/* typeof */ +const std::string _array[] = {"null", "boolean", "number", "string", "native", "native", "struct", "fixed_array", "array", "object", "function" }; +std::string type_of(NerdCore::Global::var _var) +{ + return _array[_var.type]; +} +std::string typeof(NerdCore::Global::var _var) +{ + return _array[_var.type]; +} \ No newline at end of file diff --git a/self/compiler/native/nerdcore/src/objmgmt_header.h b/self/compiler/native/nerdcore/src/objmgmt_header.h new file mode 100644 index 000000000..be7d3922d --- /dev/null +++ b/self/compiler/native/nerdcore/src/objmgmt_header.h @@ -0,0 +1,62 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +NerdCore::VAR __NERD_delete(NerdCore::VAR _left, NerdCore::VAR _right); +NerdCore::VAR __NERD_Object_Set(std::string _index, NerdCore::VAR _value, NerdCore::Type::object_t *_obj); +NerdCore::VAR __NERD_Object_Set(NerdCore::VAR _index, NerdCore::VAR _value, NerdCore::VAR _array); +std::string type_of(NerdCore::Global::var _var); +std::string typeof(NerdCore::Global::var _var); + + +/* +inline NerdCore::Global::var Object() +{ + return NerdCore::VAR((NerdCore::Class::Object *)new NerdCore::Class::Object()); +} +*/ +/* +inline NerdCore::Global::var Object(NerdCore::Type::object_t _obj) +{ + return new NerdCore::Class::Object(_obj); +} +*/ + +inline NerdCore::Global::var Array() +{ + return new NerdCore::Class::Array(); +} + +inline NerdCore::Global::var FixedArray() +{ + return new NerdCore::Class::FixedArray(); +} + +inline NerdCore::Global::var FixedArray(NerdCore::Global::var _length) +{ + return new NerdCore::Class::FixedArray(_length); +} + +inline NerdCore::Global::var FixedArray(int _length) +{ + return new NerdCore::Class::FixedArray(_length); +} \ No newline at end of file diff --git a/self/compiler/native/nerdcore/src/operator.h b/self/compiler/native/nerdcore/src/operator.h new file mode 100644 index 000000000..67b619703 --- /dev/null +++ b/self/compiler/native/nerdcore/src/operator.h @@ -0,0 +1,879 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +NerdCore::VAR operator+ (const char* _left, const NerdCore::VAR &_right) +{ + return NerdCore::VAR(_left) + _right; +} +NerdCore::VAR operator+ (std::string _left, const NerdCore::VAR &_right) +{ + return NerdCore::VAR(_left) + _right; +} + +NerdCore::VAR operator* (const char* _left, const NerdCore::VAR &_right) +{ + return NerdCore::Global::NaN; +} +NerdCore::VAR operator* (std::string _left, const NerdCore::VAR &_right) +{ + return NerdCore::Global::NaN; +} + +NerdCore::VAR operator- (const char* _left, const NerdCore::VAR &_right) +{ + return NerdCore::Global::NaN; +} +NerdCore::VAR operator- (std::string _left, const NerdCore::VAR &_right) +{ + return NerdCore::Global::NaN; +} + +NerdCore::VAR operator/ (const char* _left, const NerdCore::VAR &_right) +{ + return NerdCore::Global::NaN; +} +NerdCore::VAR operator/ (std::string _left, const NerdCore::VAR &_right) +{ + return NerdCore::Global::NaN; +} + +/*** operator== ***/ +NerdCore::VAR operator== (NerdCore::VAR _left, int right) +{ + return (double)_left == right; +} + +NerdCore::VAR operator== (NerdCore::VAR _left, double right) +{ + return (double)_left == right; +} + +NerdCore::VAR operator== (NerdCore::VAR _left, std::string right) +{ + return (std::string)_left == right; +} + +NerdCore::VAR operator== (NerdCore::VAR _left, const char* right) +{ + return (std::string)_left == std::string(right); +} +/* end operator== */ + +/*** operator!= ***/ +NerdCore::VAR operator!= (NerdCore::VAR _left, int right) +{ + return (double)_left != right; +} + +NerdCore::VAR operator!= (NerdCore::VAR _left, double right) +{ + return (double)_left != right; +} + +NerdCore::VAR operator!= (NerdCore::VAR _left, std::string right) +{ + return (std::string)_left != right; +} + +NerdCore::VAR operator!= (NerdCore::VAR _left, const char* right) +{ + return (std::string)_left != std::string(right); +} +/* end operator!= */ + +/*** operator| ***/ +NerdCore::VAR operator| (NerdCore::VAR _left, int right) +{ + return (int)_left | right; +} + +NerdCore::VAR operator| (NerdCore::VAR _left, double right) +{ + return (int)_left | (int)right; +} + +NerdCore::VAR operator| (NerdCore::VAR _left, std::string right) +{ + return (double)_left; +} + +NerdCore::VAR operator| (NerdCore::VAR _left, const char* right) +{ + return (double)_left; +} +/* end operator| */ + +/*** operator^ ***/ +NerdCore::VAR operator^ (NerdCore::VAR _left, int right) +{ + return (int)_left ^ right; +} + +NerdCore::VAR operator^ (NerdCore::VAR _left, double right) +{ + return (int)_left ^ (int)right; +} + +NerdCore::VAR operator^ (NerdCore::VAR _left, std::string right) +{ + return (double)_left; +} + +NerdCore::VAR operator^ (NerdCore::VAR _left, const char* right) +{ + return (double)_left; +} +/* end operator^ */ + +/*** operator& ***/ +NerdCore::VAR operator& (NerdCore::VAR _left, int right) +{ + return (int)_left & right; +} + +NerdCore::VAR operator& (NerdCore::VAR _left, double right) +{ + return (int)_left & (int)right; +} + +NerdCore::VAR operator& (NerdCore::VAR _left, std::string right) +{ + return (double)_left; +} + +NerdCore::VAR operator& (NerdCore::VAR _left, const char* right) +{ + return (double)_left; +} +/* end operator& */ + +/*** operator< ** +inline NerdCore::VAR operator< (NerdCore::VAR _left, int right) +{ + return _left.data.number < right; +} + + +inline NerdCore::VAR operator< (NerdCore::VAR _left, double right) +{ + return _left.data.number < right; +} +*/ +NerdCore::VAR operator< (NerdCore::VAR _left, std::string right) +{ + return (std::string)_left < right; +} + +NerdCore::VAR operator< (NerdCore::VAR _left, const char* right) +{ + return (std::string)_left < std::string(right); +} +/* end operator< */ + +/*** operator<< ***/ +NerdCore::VAR operator<< (NerdCore::VAR _left, int right) +{ + return (int)_left << right; +} + +NerdCore::VAR operator<< (NerdCore::VAR _left, double right) +{ + return (int)_left << (int)right; +} + +NerdCore::VAR operator<< (NerdCore::VAR _left, std::string right) +{ + return (std::string)_left << right; +} + +NerdCore::VAR operator<< (NerdCore::VAR _left, const char* right) +{ + return (std::string)_left << std::string(right); +} +/* end operator<< */ + +/*** operator>= ***/ +NerdCore::VAR operator<= (NerdCore::VAR _left, std::string right) +{ + return (std::string)_left <= right; +} + +NerdCore::VAR operator<= (NerdCore::VAR _left, const char* right) +{ + return (std::string)_left < std::string(right); +} +/* end operator<= */ + +/*** operator> ***/ + +NerdCore::VAR operator> (NerdCore::VAR _left, std::string right) +{ + return (std::string)_left > right; +} + +NerdCore::VAR operator> (NerdCore::VAR _left, const char* right) +{ + return (std::string)_left > std::string(right); +} +/* end operator> */ + +/*** operator>> ***/ +NerdCore::VAR operator>> (NerdCore::VAR _left, int right) +{ + return (int)_left >> right; +} + +NerdCore::VAR operator>> (NerdCore::VAR _left, double right) +{ + return (int)_left >> (int)right; +} + +NerdCore::VAR operator>> (NerdCore::VAR _left, std::string right) +{ + return (std::string)_left >> right; +} + +NerdCore::VAR operator>> (NerdCore::VAR _left, const char* right) +{ + return (std::string)_left >> std::string(right); +} +/* end operator>> */ + +/*** operator>= ***/ + +NerdCore::VAR operator>= (NerdCore::VAR _left, std::string right) +{ + return (std::string)_left >= right; +} + +NerdCore::VAR operator>= (NerdCore::VAR _left, const char* right) +{ + return (std::string)_left > std::string(right); +} + +/* end operator>= */ + +NerdCore::VAR __NERD_Boolean_Result(NerdCore::VAR _v) +{ + if (_v.type == NerdCore::Enum::Type::Number) + return _v.data.number; + else if (_v.type == NerdCore::Enum::Type::Boolean) + return _v.data.number; + else if (_v.type == NerdCore::Enum::Type::String) + { + if (strlen(((NerdCore::Class::String*)_v.data.ptr)->value.c_str()) > 0) + return true; + else + return false; + } + else if (_v.type == NerdCore::Enum::Type::Array) + return true; + else + return false; +} + +std::string __NERD_DOUBLE_TO_STRING(double _var) +{ + std::ostringstream strout ; + strout << std::fixed << std::setprecision(14) << _var; + std::string str = strout.str() ; + + size_t end = str.find_last_not_of( '0' ) + 1 ; + str = str.erase( end ) ; + + end = str.find_last_not_of( '.' ) + 1 ; + str = str.erase( end ) ; + + int exp = str.length(); + if(exp > 21) + { + std::string first = str.substr(0, 1); + std::string second = str.substr(1, 15); + str = first + "." + second + "e+" + std::to_string(exp-1); + } + return str; +} + +std::ostream &operator<<(std::ostream &os, const NerdCore::VAR &_v) +{ + switch (_v.type) + { + case NerdCore::Enum::Type::Boolean: + if(_v.data.number) os << "true"; + else os << "false"; + break; + case NerdCore::Enum::Type::Number: + os << std::setprecision(14) << _v.data.number; + break; + case NerdCore::Enum::Type::String: + os << (std::string)(*(NerdCore::Class::String*)_v.data.ptr); + break; + case NerdCore::Enum::Type::Object: + os << __NERD_Object_Stringify(_v); + break; + case NerdCore::Enum::Type::FixedArray: + os << __NERD_Object_Stringify(_v); + break; + case NerdCore::Enum::Type::Array: + os << __NERD_Object_Stringify(_v); + break; + case NerdCore::Enum::Type::Struct: + os << (std::string)(*(NerdCore::Class::Struct*)_v.data.ptr); + break; + case NerdCore::Enum::Type::Native: + os << (std::string)(*(NerdCore::Class::Native*)_v.data.ptr); + break; + case NerdCore::Enum::Type::Function: + os << (std::string)(*(NerdCore::Class::Function*)_v.data.ptr); + break; + case NerdCore::Enum::Type::Null: + os << "null"; + break; + default: + os << "null"; + break; + } + return os; + +} + +NerdCore::VAR parseInt(NerdCore::VAR _str) +{ + if (_str.type == NerdCore::Enum::Type::String) + { +#ifdef __NERD_ENV_ARDUINO + return NerdCore::Global::null; +#else + return __NERD_Create_Number((double)(*(NerdCore::Class::String*)_str.data.ptr)); +#endif + } + else + return NerdCore::Global::null; +} + +NerdCore::VAR __NERD_Log_Console(NerdCore::VAR _var) +{ +#ifdef __NERD_ENV_ARDUINO + +#else + std::cout << _var; + std::cout << std::endl; +#endif + + return NerdCore::Global::null; +} + +NerdCore::VAR __NERD_Log_Console(NerdCore::VAR* _var, int _length) +{ +#ifdef __NERD_ENV_ARDUINO + +#else + bool first = false; + for(int i = 0; i < _length; i++) + { + if(first) std::cout << " "; + std::cout << _var[i]; + if(!first) first = true; + } + std::cout << std::endl; +#endif + + return NerdCore::Global::null; +} + +NerdCore::VAR __NERD_Object_Keys(NerdCore::VAR _var) +{ + NerdCore::VAR _res = new NerdCore::Class::Array(); + + if (_var.type != NerdCore::Enum::Type::Object && _var.type != NerdCore::Enum::Type::Array) + { + return _res; + } + + if(_var.type == NerdCore::Enum::Type::Array) + { + NerdCore::Type::vector_t *_arr = &((NerdCore::Class::Array*)_var.data.ptr)->value; + int _j = (*_arr).size(); + for (int _i = 0; _i < _j; _i++) + { + _res[_i] = std::to_string(_i); + } + } + else + { + NerdCore::Type::object_t *_obj; + if(_var.type == NerdCore::Enum::Type::Object) _obj = &((NerdCore::Class::Object*)_var.data.ptr)->object; + + #ifndef __NERD__OBJECT_VECTOR + int _k = 0; + for (auto _el: *_obj) + { + _res[_k] = _el.first; + _k++; + } + #else + int _j = (*_obj).size(); + for (int _k = 0; _k < _j; _k++) + { + _res[_k] = (*_obj)[_k].first; + } + #endif + } + return _res; +} + +NerdCore::VAR __NERD_Object_Stringify(NerdCore::VAR _var) +{ + return __NERD_Object_Stringify(_var, true); +} + +NerdCore::VAR __NERD_Object_Stringify(NerdCore::VAR _var, bool _bracket) +{ + NerdCore::Enum::Type _t = _var.type; + if (_t == NerdCore::Enum::Type::Number) + { + return "\e[33m" + _var + "\e[0m"; + } + else if (_t == NerdCore::Enum::Type::String) + { + return "\e[32m'" + ((NerdCore::Class::String*)_var.data.ptr)->value + "'\e[0m"; + } + else if (_t == NerdCore::Enum::Type::Function) + { + return "'" + (std::string)(*(NerdCore::Class::Function*)_var.data.ptr) + "'"; + } + else if (_t == NerdCore::Enum::Type::FixedArray) + { + NerdCore::VAR _res = ""; + NerdCore::VAR *_arr = ((NerdCore::Class::FixedArray*)_var.data.ptr)->value; + + if(_bracket) _res += " [ "; + int j = ((NerdCore::Class::FixedArray*)_var.data.ptr)->length; + int k = 0; + int l = 0; + for (int i = 0; i < j; i++) + { + if (l > 0) _res += ", "; + if(k > 0) + { + if(k == 1) + _res += "\e[90m<1 empty item>\e[0m, "; + else + _res += "\e[90m<" + std::to_string(k) + " empty items>\e[0m, "; + k = 0; + } + _res += __NERD_Object_Stringify((*_arr)[i], _bracket); + l++; + } + + if(k > 0) + { + if (l > 0) _res += ", "; + if(k == 1) + _res += "\e[90m<1 empty item>\e[0m"; + else + _res += "\e[90m<" + std::to_string(k) + " empty items>\e[0m"; + l++; + } + + if(_bracket) _res += " ] "; + + return _res; + } + else if (_t == NerdCore::Enum::Type::Array) + { + NerdCore::VAR _res = NerdCore::Global::var(""); + NerdCore::Type::vector_t *_arr = &((NerdCore::Class::Array*)_var.data.ptr)->value; + if(_bracket) _res += " [ "; + int j = (*_arr).size(); + int k = 0; + int l = 0; + for (int i = 0; i < j; i++) + { + if (l > 0) _res += ", "; + if(k > 0) + { + if(k == 1) + _res += "\e[90m<1 empty item>\e[0m, "; + else + _res += "\e[90m<" + std::to_string(k) + " empty items>\e[0m, "; + k = 0; + } + + NerdCore::Global::var test = + _res += __NERD_Object_Stringify((*_arr)[i], _bracket); + + l++; + } + if(k > 0) + { + if (l > 0) _res += ", "; + if(k == 1) + _res += "\e[90m<1 empty item>\e[0m"; + else + _res += "\e[90m<" + std::to_string(k) + " empty items>\e[0m"; + l++; + } + + if(_bracket) _res += " ] "; + + return _res; + } + else if (_t == NerdCore::Enum::Type::Object) + { + NerdCore::VAR _res = ""; + NerdCore::Type::object_t *_obj = &((NerdCore::Class::Object*)_var.data.ptr)->object; + _res = "{"; + #ifndef __NERD__OBJECT_VECTOR + int _i = 0; + int _comma = 0; + for (auto _el: *_obj) + { + if(_el.second.type != NerdCore::Enum::Type::Null && _el.first != "__proto__" && _el.first != "prototype") + { + if (_comma > 0) _res += ", "; + _res += NerdCore::VAR("\"") + _el.first + "\""; + _res += ":"; + _res += __NERD_Object_Stringify(_el.second); + _comma++; + } + _i++; + } + #else + int j = (*_obj).size(); + for (int _i = 0; _i < j; _i++) + { + if (_i > 0) _res += ", "; + _res += NerdCore::VAR("\"") + (*_obj)[_i].first + "\""; + _res += ":"; + _res += __NERD_Object_Stringify((*_obj)[_i].second); + } + #endif + _res += "}"; + return _res; + } + else + return ""; +} + +NerdCore::VAR __NERD_Object_Clone(NerdCore::VAR& _var) +{ + NerdCore::Enum::Type _t = _var.type; + switch(_t) + { + case NerdCore::Enum::Type::Null: + case NerdCore::Enum::Type::Number: + case NerdCore::Enum::Type::String: + case NerdCore::Enum::Type::Function: + return _var; + case NerdCore::Enum::Type::Array: + { + NerdCore::VAR _res = new NerdCore::Class::Array(); + std::vector *_arr = &((NerdCore::Class::Array*)_var.data.ptr)->value; + + int j = (*_arr).size(); + for (int i = 0; i < j; i++) + { + _res[i] = __NERD_Object_Clone((*_arr)[i]); + } + return _res; + } + case NerdCore::Enum::Type::Object: + { + const NerdCore::VAR _res = new NerdCore::Class::Object(); + NerdCore::Type::object_t *_obj = &((NerdCore::Class::Object*)_var.data.ptr)->object; + #ifndef __NERD__OBJECT_VECTOR + for (auto _el: *_obj) + { + _res[_el.first] = __NERD_Object_Clone(_el.second); + } + #else + int j = (*_obj).size(); + for (int _i = 0; _i < j; _i++) + { + _res[(*_obj)[_i].first] = __NERD_Object_Clone((*_obj)[_i].second); + } + #endif + return _res; + } + default: + return NerdCore::Global::null; + } +} + +void __NERD_Object_Construct(NerdCore::VAR _this, NerdCore::VAR _prototype) +{ + if(_this.type == NerdCore::Enum::Type::Object && _prototype.type == NerdCore::Enum::Type::Object) + { + NerdCore::Type::object_t *_obj = &((NerdCore::Class::Object*)_prototype.data.ptr)->object; + + #ifndef __NERD__OBJECT_VECTOR + for (auto _el: *_obj) + { + NerdCore::VAR _tmp = _this[_el.first]; + if(_tmp.type == NerdCore::Enum::Type::Null) + { + _this[_el.first] = _el.second; + } + } + #else + int j = (*_obj).size(); + for (int _i = 0; _i < j; _i++) + { + NerdCore::VAR _tmp = _this[(*_obj)[_i].first]; + if(_tmp.type == NerdCore::Enum::Type::Null) + { + _this[(*_obj)[_i].first] = (*_obj)[_i].second; + } + } + #endif + } + +} + +NerdCore::VAR __NERD_CREATE_Function(void *_fn) +{ + return NerdCore::VAR(NerdCore::Enum::Type::Function, _fn); +} + +NerdCore::VAR __NERD_Create_Native(void *_native) +{ + return NerdCore::VAR(NerdCore::Enum::Type::Null, _native); +} + +void *__NERD_Get_Native(NerdCore::VAR _native) +{ + return ((NerdCore::Class::Function*)_native.data.ptr); +} + +__NERD_Create_Lambda(__IMPL_EVAL) +{ + __NERD_Log_Console("eval not implemented, return NerdCore::Global::null"); + return NerdCore::VAR(); +}); + +NerdCore::VAR eval = __NERD_Create_Function(__IMPL_EVAL); + +std::function *__NERD_IS_NAN = new std::function([](NerdCore::Type::vector_t _Nerd_VARARGS) { + NerdCore::VAR _test; + if (_Nerd_VARARGS.size() > 0) + _test = _Nerd_VARARGS[0]; + else + return __NERD_Create_Boolean(0); + + if (_test.type == NerdCore::Enum::Type::Number) + { + return __NERD_Create_Boolean(1); + } + + return __NERD_Create_Boolean(0); +}); + +NerdCore::VAR isNaN = NerdCore::VAR(NerdCore::Enum::Type::Function, __NERD_IS_NAN); + +NerdCore::VAR __NERD_EQUAL_VALUE_AND_TYPE(NerdCore::VAR _left, NerdCore::VAR _right) +{ + if (_left.type == _right.type && (NerdCore::VAR)_left == (NerdCore::VAR)_right) + { + return __NERD_Create_Boolean(1); + } + + return __NERD_Create_Boolean(0); +} + +NerdCore::VAR __NERD_NOT_EQUAL_VALUE_AND_TYPE(NerdCore::VAR _left, NerdCore::VAR _right) +{ + if (_left.type != _right.type || (bool)(_left != _right)) + { + return __NERD_Create_Boolean(1); + } + + return __NERD_Create_Boolean(0); +} + +NerdCore::VAR operator+ (NerdCore::VAR _left, int right) +{ + if (_left.type == NerdCore::Enum::Type::String) return (std::string)_left + __NERD_DOUBLE_TO_STRING(right); + else return (double)_left + right; +} + +NerdCore::VAR operator+ (NerdCore::VAR _left, double right) +{ + if (_left.type == NerdCore::Enum::Type::String) return (std::string)_left + __NERD_DOUBLE_TO_STRING(right); + else return (double)_left + right; +} + +NerdCore::VAR operator+ (NerdCore::VAR _left, const char* right) +{ + return (std::string)_left + std::string(right); +} + +void operator+= (NerdCore::VAR& _left, std::string right) +{ + std::string _str = (std::string)_left; + _str += right; + _left = _str; +} + +void operator+= (NerdCore::VAR& _left, const char* right) +{ + std::string _str = (std::string)_left; + _str += right; + _left = _str; +} + +void operator+= (NerdCore::VAR& _left, int right) +{ + if(_left.type == NerdCore::Enum::Type::Number) _left.data.number += right; + else + { + std::string _str = (std::string)_left; + _str += right; + _left = _str; + } +} + +void operator+= (NerdCore::VAR& _left, double right) +{ + if(_left.type == NerdCore::Enum::Type::Number) _left.data.number += right; + else + { + std::string _str = (std::string)_left; + _str += right; + _left.data.ptr = new NerdCore::Class::String(_str); + _left.type = NerdCore::Enum::Type::String; + } +} + + +NerdCore::VAR operator|| (NerdCore::VAR _left, int right) +{ + if(_left.type != NerdCore::Enum::Type::Null) return _left; + else return right; +} + +NerdCore::VAR operator|| (NerdCore::VAR _left, double right) +{ + if(_left.type != NerdCore::Enum::Type::Null) return _left; + else return right; +} + +NerdCore::VAR operator|| (NerdCore::VAR _left, std::string right) +{ + if(_left.type != NerdCore::Enum::Type::Null) return _left; + else return right; +} + +NerdCore::VAR operator|| (NerdCore::VAR _left, const char* right) +{ + if(_left.type != NerdCore::Enum::Type::Null) return _left; + else return right; +} + +/*** op* ***/ +NerdCore::VAR operator* (NerdCore::VAR _left, int right) +{ + return (double)_left * right; +} + +NerdCore::VAR operator* (NerdCore::VAR _left, double right) +{ + return (double)_left * right; +} + +NerdCore::VAR operator* (NerdCore::VAR _left, std::string right) +{ + return (double)_left * (double)(NerdCore::VAR(right)); +} + +NerdCore::VAR operator* (NerdCore::VAR _left, const char* right) +{ + return (double)_left * (double)(NerdCore::VAR(right)); +} +/* end op* */ + +/*** op- ***/ +NerdCore::VAR operator- (NerdCore::VAR _left, int right) +{ + return (double)_left - right; +} + +NerdCore::VAR operator- (NerdCore::VAR _left, double right) +{ + return (double)_left - right; +} + +NerdCore::VAR operator- (NerdCore::VAR _left, std::string right) +{ + return (double)_left - (double)(NerdCore::VAR(right)); +} + +NerdCore::VAR operator- (NerdCore::VAR _left, const char* right) +{ + return (double)_left - (double)(NerdCore::VAR(right)); +} +/* end op- */ + +/*** op/ ***/ +NerdCore::VAR operator/ (NerdCore::VAR _left, int right) +{ + return (double)_left / right; +} + +NerdCore::VAR operator/ (NerdCore::VAR _left, double right) +{ + return (double)_left / right; +} + +NerdCore::VAR operator/ (NerdCore::VAR _left, std::string right) +{ + return (double)_left / (double)(NerdCore::VAR(right)); +} + +NerdCore::VAR operator/ (NerdCore::VAR _left, const char* right) +{ + return (double)_left / (double)(NerdCore::VAR(right)); +} +/* end op/ */ + +/*** op% ***/ +NerdCore::VAR operator% (NerdCore::VAR _left, int right) +{ + return (int)_left % right; +} + +NerdCore::VAR operator% (NerdCore::VAR _left, double right) +{ + return (int)_left % (int)right; +} + +NerdCore::VAR operator% (NerdCore::VAR _left, std::string right) +{ + return (int)_left % (int)(NerdCore::VAR(right)); +} + +NerdCore::VAR operator% (NerdCore::VAR _left, const char* right) +{ + return (int)_left % (int)(NerdCore::VAR(right)); +} +/* end op% */ \ No newline at end of file diff --git a/self/compiler/native/nerdcore/src/operator_header.h b/self/compiler/native/nerdcore/src/operator_header.h new file mode 100644 index 000000000..b99d7def5 --- /dev/null +++ b/self/compiler/native/nerdcore/src/operator_header.h @@ -0,0 +1,214 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ +#ifdef __NERD_ENV_ARDUINO + bool operator==(std::string_view sw, const char* c) + { + return sw == std::string_view(c); + } + + bool operator!=(std::string_view sw, const char* c) + { + return sw != std::string_view(c); + } +#else + constexpr bool operator==(std::string_view sw, const char* c) + { + return sw == std::string_view(c); + } + + constexpr bool operator!=(std::string_view sw, const char* c) + { + return sw != std::string_view(c); + } +#endif + +NerdCore::VAR __NERD_Boolean_Result(NerdCore::VAR _v); +std::string __NERD_DOUBLE_TO_STRING(double _var); +std::ostream &operator<<(std::ostream &os, const NerdCore::VAR &_v); +NerdCore::VAR parseInt(NerdCore::VAR _str); +NerdCore::VAR __NERD_Log_Console(NerdCore::VAR _var); +NerdCore::VAR __NERD_Log_Console(NerdCore::VAR* _var, int _length); +NerdCore::VAR __NERD_Object_Keys(NerdCore::VAR _var); +NerdCore::VAR __NERD_Object_Stringify(NerdCore::VAR _var); +NerdCore::VAR __NERD_Object_Stringify(NerdCore::VAR _var, bool _bracket); +NerdCore::VAR __NERD_Object_Clone(NerdCore::VAR& _var); +void __NERD_Object_Construct(NerdCore::VAR _this, NerdCore::VAR _prototype); +NerdCore::VAR __NERD_CREATE_Function(void *_fn); +NerdCore::VAR __NERD_Create_Native(void *_native); +void *__NERD_Get_Native(NerdCore::VAR _native); + +/*** REDIFINING STD OPERATORS ***/ + +NerdCore::VAR operator+ (const char* _left, const NerdCore::VAR &_right); +NerdCore::VAR operator+ (std::string _left, const NerdCore::VAR &_right); + +NerdCore::VAR operator- (const char* _left, const NerdCore::VAR &_right); +NerdCore::VAR operator- (std::string _left, const NerdCore::VAR &_right); + +NerdCore::VAR operator* (const char* _left, const NerdCore::VAR &_right); +NerdCore::VAR operator* (std::string _left, const NerdCore::VAR &_right); + +NerdCore::VAR operator/ (const char* _left, const NerdCore::VAR &_right); +NerdCore::VAR operator/ (std::string _left, const NerdCore::VAR &_right); + + +inline bool operator< (NerdCore::VAR _left, const int right) noexcept +{ + return _left.data.number < right; +} +inline bool operator< (NerdCore::VAR _left, const long long int right) noexcept +{ + return _left.data.number < right; +} +inline bool operator< (NerdCore::VAR _left, const double right) noexcept +{ + return _left.data.number < right; +} + +NerdCore::VAR operator< (NerdCore::VAR _left, std::string right); +NerdCore::VAR operator< (NerdCore::VAR _left, const char* right); + +inline bool operator<= (NerdCore::VAR _left, const int right) noexcept +{ + return _left.data.number <= right; +} +inline bool operator<= (NerdCore::VAR _left, const long long int right) noexcept +{ + return _left.data.number <= right; +} +inline bool operator<= (NerdCore::VAR _left, const double right) noexcept +{ + return _left.data.number <= right; +} + +NerdCore::VAR operator<= (NerdCore::VAR _left, std::string right); +NerdCore::VAR operator<= (NerdCore::VAR _left, const char* right); + +inline bool operator> (NerdCore::VAR _left, const int right) noexcept +{ + return _left.data.number > right; +} +inline bool operator> (NerdCore::VAR _left, const long long int right) noexcept +{ + return _left.data.number > right; +} +inline bool operator> (NerdCore::VAR _left, const double right) noexcept +{ + return _left.data.number > right; +} + +NerdCore::VAR operator> (NerdCore::VAR _left, std::string right); +NerdCore::VAR operator> (NerdCore::VAR _left, const char* right); + +inline const bool operator>= (NerdCore::VAR _left, const int right) noexcept +{ + return _left.data.number >= right; +} +inline bool operator>= (NerdCore::VAR _left, const long long int right) noexcept +{ + return _left.data.number >= right; +} +inline bool operator>= (NerdCore::VAR _left, const double right) noexcept +{ + return _left.data.number >= right; +} + +NerdCore::VAR operator>= (NerdCore::VAR _left, std::string right); +NerdCore::VAR operator>= (NerdCore::VAR _left, const char* right); + + +/*** END REDIFINING STD OPERATORS ***/ + +extern NerdCore::VAR eval; +extern std::function *__NERD_IS_NAN; +extern NerdCore::VAR isNaN; + +NerdCore::VAR __NERD_EQUAL_VALUE_AND_TYPE(NerdCore::VAR _left, NerdCore::VAR _right); +NerdCore::VAR __NERD_NOT_EQUAL_VALUE_AND_TYPE(NerdCore::VAR _left, NerdCore::VAR _right); +NerdCore::VAR operator+ (NerdCore::VAR _left, int right); +NerdCore::VAR operator+ (NerdCore::VAR _left, double right); + +void operator+= (NerdCore::VAR& _left, std::string right); +void operator+= (NerdCore::VAR& _left, const char* right); +void operator+= (NerdCore::VAR& _left, int right); +void operator+= (NerdCore::VAR& _left, double right); + +NerdCore::VAR operator* (NerdCore::VAR _left, int right); +NerdCore::VAR operator* (NerdCore::VAR _left, double right); +NerdCore::VAR operator* (NerdCore::VAR _left, std::string right); +NerdCore::VAR operator* (NerdCore::VAR _left, const char* right); + +NerdCore::VAR operator- (NerdCore::VAR _left, int right); +NerdCore::VAR operator- (NerdCore::VAR _left, double right); +NerdCore::VAR operator- (NerdCore::VAR _left, std::string right); +NerdCore::VAR operator- (NerdCore::VAR _left, const char* right); + +NerdCore::VAR operator/ (NerdCore::VAR _left, int right); +NerdCore::VAR operator/ (NerdCore::VAR _left, double right); +NerdCore::VAR operator/ (NerdCore::VAR _left, std::string right); +NerdCore::VAR operator/ (NerdCore::VAR _left, const char* right); + +NerdCore::VAR operator% (NerdCore::VAR _left, int right); +NerdCore::VAR operator% (NerdCore::VAR _left, double right); +NerdCore::VAR operator% (NerdCore::VAR _left, std::string right); +NerdCore::VAR operator% (NerdCore::VAR _left, const char* right); + +NerdCore::VAR operator|| (NerdCore::VAR _left, int right); +NerdCore::VAR operator|| (NerdCore::VAR _left, double right); +NerdCore::VAR operator|| (NerdCore::VAR _left, std::string right); +NerdCore::VAR operator|| (NerdCore::VAR _left, const char* right); + +NerdCore::VAR operator== (NerdCore::VAR _left, int right); +NerdCore::VAR operator== (NerdCore::VAR _left, double right); +NerdCore::VAR operator== (NerdCore::VAR _left, std::string right); +NerdCore::VAR operator== (NerdCore::VAR _left, const char* right); + +NerdCore::VAR operator!= (NerdCore::VAR _left, int right); +NerdCore::VAR operator!= (NerdCore::VAR _left, double right); +NerdCore::VAR operator!= (NerdCore::VAR _left, std::string right); +NerdCore::VAR operator!= (NerdCore::VAR _left, const char* right); + +NerdCore::VAR operator| (NerdCore::VAR _left, int right); +NerdCore::VAR operator| (NerdCore::VAR _left, double right); +NerdCore::VAR operator| (NerdCore::VAR _left, std::string right); +NerdCore::VAR operator| (NerdCore::VAR _left, const char* right); + +NerdCore::VAR operator^ (NerdCore::VAR _left, int right); +NerdCore::VAR operator^ (NerdCore::VAR _left, double right); +NerdCore::VAR operator^ (NerdCore::VAR _left, std::string right); +NerdCore::VAR operator^ (NerdCore::VAR _left, const char* right); + +NerdCore::VAR operator& (NerdCore::VAR _left, int right); +NerdCore::VAR operator& (NerdCore::VAR _left, double right); +NerdCore::VAR operator& (NerdCore::VAR _left, std::string right); +NerdCore::VAR operator& (NerdCore::VAR _left, const char* right); + +NerdCore::VAR operator<< (NerdCore::VAR _left, int right); +NerdCore::VAR operator<< (NerdCore::VAR _left, double right); +NerdCore::VAR operator<< (NerdCore::VAR _left, std::string right); +NerdCore::VAR operator<< (NerdCore::VAR _left, const char* right); + +NerdCore::VAR operator>> (NerdCore::VAR _left, int right); +NerdCore::VAR operator>> (NerdCore::VAR _left, double right); +NerdCore::VAR operator>> (NerdCore::VAR _left, std::string right); +NerdCore::VAR operator>> (NerdCore::VAR _left, const char* right); diff --git a/self/compiler/native/nerdcore/src/stdfn.h b/self/compiler/native/nerdcore/src/stdfn.h new file mode 100644 index 000000000..fa137ab07 --- /dev/null +++ b/self/compiler/native/nerdcore/src/stdfn.h @@ -0,0 +1,96 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +namespace NerdCore::Functions +{ + NerdCore::VAR println() + { + #ifndef __NERD_ENV_ARDUINO + std::cout << std::endl; + #endif + return NerdCore::Global::null; + } + NerdCore::VAR println(NerdCore::VAR _var) + { + #ifndef __NERD_ENV_ARDUINO + std::cout << _var << std::endl; + #endif + return NerdCore::Global::null; + } + + NerdCore::VAR print() + { + return NerdCore::Global::null; + } + + NerdCore::VAR print(NerdCore::VAR _var) + { + #ifndef __NERD_ENV_ARDUINO + std::cout << _var; + #endif + return NerdCore::Global::null; + } + + +} + + // no namespace + NerdCore::VAR length_of(NerdCore::VAR _var) + { + switch( _var.type) + { + case NerdCore::Enum::Type::Null: + return 0; + break; + case NerdCore::Enum::Type::Boolean: + return 1; + break; + case NerdCore::Enum::Type::Number: + return 1; + break; + case NerdCore::Enum::Type::String: + return (double)((std::string)_var).size(); + break; + case NerdCore::Enum::Type::Array: + return (double)((NerdCore::Class::Array*)_var.data.ptr)->Size(); + break; + case NerdCore::Enum::Type::FixedArray: + return (double)((NerdCore::Class::FixedArray*)_var.data.ptr)->length; + break; + case NerdCore::Enum::Type::Object: + return (double)((NerdCore::Class::Object*)_var.data.ptr)->Size(); + break; + case NerdCore::Enum::Type::Native: + return (double)((NerdCore::Class::Native*)_var.data.ptr)->length; + break; + default: + return 0; + break; + } + return 0; + } + + NerdCore::VAR size_of(NerdCore::VAR _var) + { + return (double)sizeof(_var); + } \ No newline at end of file diff --git a/self/compiler/native/nerdcore/src/stdfn_header.h b/self/compiler/native/nerdcore/src/stdfn_header.h new file mode 100644 index 000000000..b04bcc3de --- /dev/null +++ b/self/compiler/native/nerdcore/src/stdfn_header.h @@ -0,0 +1,34 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +namespace NerdCore::Functions +{ + NerdCore::VAR println(); + NerdCore::VAR println(NerdCore::VAR _var); + NerdCore::VAR print(); + NerdCore::VAR print(NerdCore::VAR _var); +} + + // no namespace + NerdCore::VAR length_of(NerdCore::VAR _var); + NerdCore::VAR size_of(NerdCore::VAR _var); \ No newline at end of file diff --git a/self/compiler/native/nerdcore/src/tsl/robin_growth_policy.h b/self/compiler/native/nerdcore/src/tsl/robin_growth_policy.h new file mode 100644 index 000000000..eba8cdfa0 --- /dev/null +++ b/self/compiler/native/nerdcore/src/tsl/robin_growth_policy.h @@ -0,0 +1,406 @@ +/** + * MIT License + * + * Copyright (c) 2017 Thibaut Goetghebuer-Planchon + * + * 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. + */ +#ifndef TSL_ROBIN_GROWTH_POLICY_H +#define TSL_ROBIN_GROWTH_POLICY_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef TSL_DEBUG +#define tsl_rh_assert(expr) assert(expr) +#else +#define tsl_rh_assert(expr) (static_cast(0)) +#endif + +/** + * If exceptions are enabled, throw the exception passed in parameter, otherwise + * call std::terminate. + */ +#if (defined(__cpp_exceptions) || defined(__EXCEPTIONS) || \ + (defined(_MSC_VER) && defined(_CPPUNWIND))) && \ + !defined(TSL_NO_EXCEPTIONS) +#define TSL_RH_THROW_OR_TERMINATE(ex, msg) throw ex(msg) +#else +#define TSL_RH_NO_EXCEPTIONS +#ifdef TSL_DEBUG +#include +#define TSL_RH_THROW_OR_TERMINATE(ex, msg) \ + do { \ + std::cerr << msg << std::endl; \ + std::terminate(); \ + } while (0) +#else +#define TSL_RH_THROW_OR_TERMINATE(ex, msg) std::terminate() +#endif +#endif + +#if defined(__GNUC__) || defined(__clang__) +#define TSL_RH_LIKELY(exp) (__builtin_expect(!!(exp), true)) +#else +#define TSL_RH_LIKELY(exp) (exp) +#endif + +#define TSL_RH_UNUSED(x) static_cast(x) + +namespace tsl { +namespace rh { + +/** + * Grow the hash table by a factor of GrowthFactor keeping the bucket count to a + * power of two. It allows the table to use a mask operation instead of a modulo + * operation to map a hash to a bucket. + * + * GrowthFactor must be a power of two >= 2. + */ +template +class power_of_two_growth_policy { + public: + /** + * Called on the hash table creation and on rehash. The number of buckets for + * the table is passed in parameter. This number is a minimum, the policy may + * update this value with a higher value if needed (but not lower). + * + * If 0 is given, min_bucket_count_in_out must still be 0 after the policy + * creation and bucket_for_hash must always return 0 in this case. + */ + explicit power_of_two_growth_policy(std::size_t& min_bucket_count_in_out) { + if (min_bucket_count_in_out > max_bucket_count()) { + TSL_RH_THROW_OR_TERMINATE(std::length_error, + "The hash table exceeds its maximum size."); + } + + if (min_bucket_count_in_out > 0) { + min_bucket_count_in_out = + round_up_to_power_of_two(min_bucket_count_in_out); + m_mask = min_bucket_count_in_out - 1; + } else { + m_mask = 0; + } + } + + /** + * Return the bucket [0, bucket_count()) to which the hash belongs. + * If bucket_count() is 0, it must always return 0. + */ + std::size_t bucket_for_hash(std::size_t hash) const noexcept { + return hash & m_mask; + } + + /** + * Return the number of buckets that should be used on next growth. + */ + std::size_t next_bucket_count() const { + if ((m_mask + 1) > max_bucket_count() / GrowthFactor) { + TSL_RH_THROW_OR_TERMINATE(std::length_error, + "The hash table exceeds its maximum size."); + } + + return (m_mask + 1) * GrowthFactor; + } + + /** + * Return the maximum number of buckets supported by the policy. + */ + std::size_t max_bucket_count() const { + // Largest power of two. + return (std::numeric_limits::max() / 2) + 1; + } + + /** + * Reset the growth policy as if it was created with a bucket count of 0. + * After a clear, the policy must always return 0 when bucket_for_hash is + * called. + */ + void clear() noexcept { m_mask = 0; } + + private: + static std::size_t round_up_to_power_of_two(std::size_t value) { + if (is_power_of_two(value)) { + return value; + } + + if (value == 0) { + return 1; + } + + --value; + for (std::size_t i = 1; i < sizeof(std::size_t) * CHAR_BIT; i *= 2) { + value |= value >> i; + } + + return value + 1; + } + + static constexpr bool is_power_of_two(std::size_t value) { + return value != 0 && (value & (value - 1)) == 0; + } + + protected: + static_assert(is_power_of_two(GrowthFactor) && GrowthFactor >= 2, + "GrowthFactor must be a power of two >= 2."); + + std::size_t m_mask; +}; + +/** + * Grow the hash table by GrowthFactor::num / GrowthFactor::den and use a modulo + * to map a hash to a bucket. Slower but it can be useful if you want a slower + * growth. + */ +template > +class mod_growth_policy { + public: + explicit mod_growth_policy(std::size_t& min_bucket_count_in_out) { + if (min_bucket_count_in_out > max_bucket_count()) { + TSL_RH_THROW_OR_TERMINATE(std::length_error, + "The hash table exceeds its maximum size."); + } + + if (min_bucket_count_in_out > 0) { + m_mod = min_bucket_count_in_out; + } else { + m_mod = 1; + } + } + + std::size_t bucket_for_hash(std::size_t hash) const noexcept { + return hash % m_mod; + } + + std::size_t next_bucket_count() const { + if (m_mod == max_bucket_count()) { + TSL_RH_THROW_OR_TERMINATE(std::length_error, + "The hash table exceeds its maximum size."); + } + + const double next_bucket_count = + std::ceil(double(m_mod) * REHASH_SIZE_MULTIPLICATION_FACTOR); + if (!std::isnormal(next_bucket_count)) { + TSL_RH_THROW_OR_TERMINATE(std::length_error, + "The hash table exceeds its maximum size."); + } + + if (next_bucket_count > double(max_bucket_count())) { + return max_bucket_count(); + } else { + return std::size_t(next_bucket_count); + } + } + + std::size_t max_bucket_count() const { return MAX_BUCKET_COUNT; } + + void clear() noexcept { m_mod = 1; } + + private: + static constexpr double REHASH_SIZE_MULTIPLICATION_FACTOR = + 1.0 * GrowthFactor::num / GrowthFactor::den; + static const std::size_t MAX_BUCKET_COUNT = + std::size_t(double(std::numeric_limits::max() / + REHASH_SIZE_MULTIPLICATION_FACTOR)); + + static_assert(REHASH_SIZE_MULTIPLICATION_FACTOR >= 1.1, + "Growth factor should be >= 1.1."); + + std::size_t m_mod; +}; + +namespace detail { + +#if SIZE_MAX >= ULLONG_MAX +#define TSL_RH_NB_PRIMES 51 +#elif SIZE_MAX >= ULONG_MAX +#define TSL_RH_NB_PRIMES 40 +#else +#define TSL_RH_NB_PRIMES 23 +#endif + +static constexpr const std::array PRIMES = {{ + 1u, + 5u, + 17u, + 29u, + 37u, + 53u, + 67u, + 79u, + 97u, + 131u, + 193u, + 257u, + 389u, + 521u, + 769u, + 1031u, + 1543u, + 2053u, + 3079u, + 6151u, + 12289u, + 24593u, + 49157u, +#if SIZE_MAX >= ULONG_MAX + 98317ul, + 196613ul, + 393241ul, + 786433ul, + 1572869ul, + 3145739ul, + 6291469ul, + 12582917ul, + 25165843ul, + 50331653ul, + 100663319ul, + 201326611ul, + 402653189ul, + 805306457ul, + 1610612741ul, + 3221225473ul, + 4294967291ul, +#endif +#if SIZE_MAX >= ULLONG_MAX + 6442450939ull, + 12884901893ull, + 25769803751ull, + 51539607551ull, + 103079215111ull, + 206158430209ull, + 412316860441ull, + 824633720831ull, + 1649267441651ull, + 3298534883309ull, + 6597069766657ull, +#endif +}}; + +template +static constexpr std::size_t mod(std::size_t hash) { + return hash % PRIMES[IPrime]; +} + +// MOD_PRIME[iprime](hash) returns hash % PRIMES[iprime]. This table allows for +// faster modulo as the compiler can optimize the modulo code better with a +// constant known at the compilation. +static constexpr const std::array + MOD_PRIME = {{ + &mod<0>, &mod<1>, &mod<2>, &mod<3>, &mod<4>, &mod<5>, + &mod<6>, &mod<7>, &mod<8>, &mod<9>, &mod<10>, &mod<11>, + &mod<12>, &mod<13>, &mod<14>, &mod<15>, &mod<16>, &mod<17>, + &mod<18>, &mod<19>, &mod<20>, &mod<21>, &mod<22>, +#if SIZE_MAX >= ULONG_MAX + &mod<23>, &mod<24>, &mod<25>, &mod<26>, &mod<27>, &mod<28>, + &mod<29>, &mod<30>, &mod<31>, &mod<32>, &mod<33>, &mod<34>, + &mod<35>, &mod<36>, &mod<37>, &mod<38>, &mod<39>, +#endif +#if SIZE_MAX >= ULLONG_MAX + &mod<40>, &mod<41>, &mod<42>, &mod<43>, &mod<44>, &mod<45>, + &mod<46>, &mod<47>, &mod<48>, &mod<49>, &mod<50>, +#endif + }}; + +} // namespace detail + +/** + * Grow the hash table by using prime numbers as bucket count. Slower than + * tsl::rh::power_of_two_growth_policy in general but will probably distribute + * the values around better in the buckets with a poor hash function. + * + * To allow the compiler to optimize the modulo operation, a lookup table is + * used with constant primes numbers. + * + * With a switch the code would look like: + * \code + * switch(iprime) { // iprime is the current prime of the hash table + * case 0: hash % 5ul; + * break; + * case 1: hash % 17ul; + * break; + * case 2: hash % 29ul; + * break; + * ... + * } + * \endcode + * + * Due to the constant variable in the modulo the compiler is able to optimize + * the operation by a series of multiplications, substractions and shifts. + * + * The 'hash % 5' could become something like 'hash - (hash * 0xCCCCCCCD) >> 34) + * * 5' in a 64 bits environment. + */ +class prime_growth_policy { + public: + explicit prime_growth_policy(std::size_t& min_bucket_count_in_out) { + auto it_prime = std::lower_bound( + detail::PRIMES.begin(), detail::PRIMES.end(), min_bucket_count_in_out); + if (it_prime == detail::PRIMES.end()) { + TSL_RH_THROW_OR_TERMINATE(std::length_error, + "The hash table exceeds its maximum size."); + } + + m_iprime = static_cast( + std::distance(detail::PRIMES.begin(), it_prime)); + if (min_bucket_count_in_out > 0) { + min_bucket_count_in_out = *it_prime; + } else { + min_bucket_count_in_out = 0; + } + } + + std::size_t bucket_for_hash(std::size_t hash) const noexcept { + return detail::MOD_PRIME[m_iprime](hash); + } + + std::size_t next_bucket_count() const { + if (m_iprime + 1 >= detail::PRIMES.size()) { + TSL_RH_THROW_OR_TERMINATE(std::length_error, + "The hash table exceeds its maximum size."); + } + + return detail::PRIMES[m_iprime + 1]; + } + + std::size_t max_bucket_count() const { return detail::PRIMES.back(); } + + void clear() noexcept { m_iprime = 0; } + + private: + unsigned int m_iprime; + + static_assert(std::numeric_limits::max() >= + detail::PRIMES.size(), + "The type of m_iprime is not big enough."); +}; + +} // namespace rh +} // namespace tsl + +#endif diff --git a/self/compiler/native/nerdcore/src/tsl/robin_hash.h b/self/compiler/native/nerdcore/src/tsl/robin_hash.h new file mode 100644 index 000000000..89c7c96f2 --- /dev/null +++ b/self/compiler/native/nerdcore/src/tsl/robin_hash.h @@ -0,0 +1,1639 @@ +/** + * MIT License + * + * Copyright (c) 2017 Thibaut Goetghebuer-Planchon + * + * 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. + */ +#ifndef TSL_ROBIN_HASH_H +#define TSL_ROBIN_HASH_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "robin_growth_policy.h" + +namespace tsl { + +namespace detail_robin_hash { + +template +struct make_void { + using type = void; +}; + +template +struct has_is_transparent : std::false_type {}; + +template +struct has_is_transparent::type> + : std::true_type {}; + +template +struct is_power_of_two_policy : std::false_type {}; + +template +struct is_power_of_two_policy> + : std::true_type {}; + +// Only available in C++17, we need to be compatible with C++11 +template +const T& clamp(const T& v, const T& lo, const T& hi) { + return std::min(hi, std::max(lo, v)); +} + +template +static T numeric_cast(U value, + const char* error_message = "numeric_cast() failed.") { + T ret = static_cast(value); + if (static_cast(ret) != value) { + TSL_RH_THROW_OR_TERMINATE(std::runtime_error, error_message); + } + + const bool is_same_signedness = + (std::is_unsigned::value && std::is_unsigned::value) || + (std::is_signed::value && std::is_signed::value); + if (!is_same_signedness && (ret < T{}) != (value < U{})) { + TSL_RH_THROW_OR_TERMINATE(std::runtime_error, error_message); + } + + return ret; +} + +template +static T deserialize_value(Deserializer& deserializer) { + // MSVC < 2017 is not conformant, circumvent the problem by removing the + // template keyword +#if defined(_MSC_VER) && _MSC_VER < 1910 + return deserializer.Deserializer::operator()(); +#else + return deserializer.Deserializer::template operator()(); +#endif +} + +/** + * Fixed size type used to represent size_type values on serialization. Need to + * be big enough to represent a std::size_t on 32 and 64 bits platforms, and + * must be the same size on both platforms. + */ +using slz_size_type = std::uint64_t; +static_assert(std::numeric_limits::max() >= + std::numeric_limits::max(), + "slz_size_type must be >= std::size_t"); + +using truncated_hash_type = std::uint32_t; + +/** + * Helper class that stores a truncated hash if StoreHash is true and nothing + * otherwise. + */ +template +class bucket_entry_hash { + public: + bool bucket_hash_equal(std::size_t /*hash*/) const noexcept { return true; } + + truncated_hash_type truncated_hash() const noexcept { return 0; } + + protected: + void set_hash(truncated_hash_type /*hash*/) noexcept {} +}; + +template <> +class bucket_entry_hash { + public: + bool bucket_hash_equal(std::size_t hash) const noexcept { + return m_hash == truncated_hash_type(hash); + } + + truncated_hash_type truncated_hash() const noexcept { return m_hash; } + + protected: + void set_hash(truncated_hash_type hash) noexcept { + m_hash = truncated_hash_type(hash); + } + + private: + truncated_hash_type m_hash; +}; + +/** + * Each bucket entry has: + * - A value of type `ValueType`. + * - An integer to store how far the value of the bucket, if any, is from its + * ideal bucket (ex: if the current bucket 5 has the value 'foo' and + * `hash('foo') % nb_buckets` == 3, `dist_from_ideal_bucket()` will return 2 as + * the current value of the bucket is two buckets away from its ideal bucket) If + * there is no value in the bucket (i.e. `empty()` is true) + * `dist_from_ideal_bucket()` will be < 0. + * - A marker which tells us if the bucket is the last bucket of the bucket + * array (useful for the iterator of the hash table). + * - If `StoreHash` is true, 32 bits of the hash of the value, if any, are also + * stored in the bucket. If the size of the hash is more than 32 bits, it is + * truncated. We don't store the full hash as storing the hash is a potential + * opportunity to use the unused space due to the alignment of the bucket_entry + * structure. We can thus potentially store the hash without any extra space + * (which would not be possible with 64 bits of the hash). + */ +template +class bucket_entry : public bucket_entry_hash { + using bucket_hash = bucket_entry_hash; + + public: + using value_type = ValueType; + using distance_type = std::int16_t; + + bucket_entry() noexcept + : bucket_hash(), + m_dist_from_ideal_bucket(EMPTY_MARKER_DIST_FROM_IDEAL_BUCKET), + m_last_bucket(false) { + tsl_rh_assert(empty()); + } + + bucket_entry(bool last_bucket) noexcept + : bucket_hash(), + m_dist_from_ideal_bucket(EMPTY_MARKER_DIST_FROM_IDEAL_BUCKET), + m_last_bucket(last_bucket) { + tsl_rh_assert(empty()); + } + + bucket_entry(const bucket_entry& other) noexcept( + std::is_nothrow_copy_constructible::value) + : bucket_hash(other), + m_dist_from_ideal_bucket(EMPTY_MARKER_DIST_FROM_IDEAL_BUCKET), + m_last_bucket(other.m_last_bucket) { + if (!other.empty()) { + ::new (static_cast(std::addressof(m_value))) + value_type(other.value()); + m_dist_from_ideal_bucket = other.m_dist_from_ideal_bucket; + } + tsl_rh_assert(empty() == other.empty()); + } + + /** + * Never really used, but still necessary as we must call resize on an empty + * `std::vector`. and we need to support move-only types. See + * robin_hash constructor for details. + */ + bucket_entry(bucket_entry&& other) noexcept( + std::is_nothrow_move_constructible::value) + : bucket_hash(std::move(other)), + m_dist_from_ideal_bucket(EMPTY_MARKER_DIST_FROM_IDEAL_BUCKET), + m_last_bucket(other.m_last_bucket) { + if (!other.empty()) { + ::new (static_cast(std::addressof(m_value))) + value_type(std::move(other.value())); + m_dist_from_ideal_bucket = other.m_dist_from_ideal_bucket; + } + tsl_rh_assert(empty() == other.empty()); + } + + bucket_entry& operator=(const bucket_entry& other) noexcept( + std::is_nothrow_copy_constructible::value) { + if (this != &other) { + clear(); + + bucket_hash::operator=(other); + if (!other.empty()) { + ::new (static_cast(std::addressof(m_value))) + value_type(other.value()); + } + + m_dist_from_ideal_bucket = other.m_dist_from_ideal_bucket; + m_last_bucket = other.m_last_bucket; + } + + return *this; + } + + bucket_entry& operator=(bucket_entry&&) = delete; + + ~bucket_entry() noexcept { clear(); } + + void clear() noexcept { + if (!empty()) { + destroy_value(); + m_dist_from_ideal_bucket = EMPTY_MARKER_DIST_FROM_IDEAL_BUCKET; + } + } + + bool empty() const noexcept { + return m_dist_from_ideal_bucket == EMPTY_MARKER_DIST_FROM_IDEAL_BUCKET; + } + + value_type& value() noexcept { + tsl_rh_assert(!empty()); +#if defined(__cplusplus) && __cplusplus >= 201703L + return *std::launder( + reinterpret_cast(std::addressof(m_value))); +#else + return *reinterpret_cast(std::addressof(m_value)); +#endif + } + + const value_type& value() const noexcept { + tsl_rh_assert(!empty()); +#if defined(__cplusplus) && __cplusplus >= 201703L + return *std::launder( + reinterpret_cast(std::addressof(m_value))); +#else + return *reinterpret_cast(std::addressof(m_value)); +#endif + } + + distance_type dist_from_ideal_bucket() const noexcept { + return m_dist_from_ideal_bucket; + } + + bool last_bucket() const noexcept { return m_last_bucket; } + + void set_as_last_bucket() noexcept { m_last_bucket = true; } + + template + void set_value_of_empty_bucket(distance_type dist_from_ideal_bucket, + truncated_hash_type hash, + Args&&... value_type_args) { + tsl_rh_assert(dist_from_ideal_bucket >= 0); + tsl_rh_assert(empty()); + + ::new (static_cast(std::addressof(m_value))) + value_type(std::forward(value_type_args)...); + this->set_hash(hash); + m_dist_from_ideal_bucket = dist_from_ideal_bucket; + + tsl_rh_assert(!empty()); + } + + void swap_with_value_in_bucket(distance_type& dist_from_ideal_bucket, + truncated_hash_type& hash, value_type& value) { + tsl_rh_assert(!empty()); + tsl_rh_assert(dist_from_ideal_bucket > m_dist_from_ideal_bucket); + + using std::swap; + swap(value, this->value()); + swap(dist_from_ideal_bucket, m_dist_from_ideal_bucket); + + if (StoreHash) { + const truncated_hash_type tmp_hash = this->truncated_hash(); + this->set_hash(hash); + hash = tmp_hash; + } else { + // Avoid warning of unused variable if StoreHash is false + TSL_RH_UNUSED(hash); + } + } + + static truncated_hash_type truncate_hash(std::size_t hash) noexcept { + return truncated_hash_type(hash); + } + + private: + void destroy_value() noexcept { + tsl_rh_assert(!empty()); + value().~value_type(); + } + + public: + static const distance_type EMPTY_MARKER_DIST_FROM_IDEAL_BUCKET = -1; + static const distance_type DIST_FROM_IDEAL_BUCKET_LIMIT = 4096; + static_assert(DIST_FROM_IDEAL_BUCKET_LIMIT <= + std::numeric_limits::max() - 1, + "DIST_FROM_IDEAL_BUCKET_LIMIT must be <= " + "std::numeric_limits::max() - 1."); + + private: + using storage = typename std::aligned_storage::type; + + distance_type m_dist_from_ideal_bucket; + bool m_last_bucket; + storage m_value; +}; + +/** + * Internal common class used by `robin_map` and `robin_set`. + * + * ValueType is what will be stored by `robin_hash` (usually `std::pair` + * for map and `Key` for set). + * + * `KeySelect` should be a `FunctionObject` which takes a `ValueType` in + * parameter and returns a reference to the key. + * + * `ValueSelect` should be a `FunctionObject` which takes a `ValueType` in + * parameter and returns a reference to the value. `ValueSelect` should be void + * if there is no value (in a set for example). + * + * The strong exception guarantee only holds if the expression + * `std::is_nothrow_swappable::value && + * std::is_nothrow_move_constructible::value` is true. + * + * Behaviour is undefined if the destructor of `ValueType` throws. + */ +template +class robin_hash : private Hash, private KeyEqual, private GrowthPolicy { + private: + template + using has_mapped_type = + typename std::integral_constant::value>; + + static_assert( + noexcept(std::declval().bucket_for_hash(std::size_t(0))), + "GrowthPolicy::bucket_for_hash must be noexcept."); + static_assert(noexcept(std::declval().clear()), + "GrowthPolicy::clear must be noexcept."); + + public: + template + class robin_iterator; + + using key_type = typename KeySelect::key_type; + using value_type = ValueType; + using size_type = std::size_t; + using difference_type = std::ptrdiff_t; + using hasher = Hash; + using key_equal = KeyEqual; + using allocator_type = Allocator; + using reference = value_type&; + using const_reference = const value_type&; + using pointer = value_type*; + using const_pointer = const value_type*; + using iterator = robin_iterator; + using const_iterator = robin_iterator; + + private: + /** + * Either store the hash because we are asked by the `StoreHash` template + * parameter or store the hash because it doesn't cost us anything in size and + * can be used to speed up rehash. + */ + static constexpr bool STORE_HASH = + StoreHash || + ((sizeof(tsl::detail_robin_hash::bucket_entry) == + sizeof(tsl::detail_robin_hash::bucket_entry)) && + (sizeof(std::size_t) == sizeof(truncated_hash_type) || + is_power_of_two_policy::value) && + // Don't store the hash for primitive types with default hash. + (!std::is_arithmetic::value || + !std::is_same>::value)); + + /** + * Only use the stored hash on lookup if we are explicitly asked. We are not + * sure how slow the KeyEqual operation is. An extra comparison may slow + * things down with a fast KeyEqual. + */ + static constexpr bool USE_STORED_HASH_ON_LOOKUP = StoreHash; + + /** + * We can only use the hash on rehash if the size of the hash type is the same + * as the stored one or if we use a power of two modulo. In the case of the + * power of two modulo, we just mask the least significant bytes, we just have + * to check that the truncated_hash_type didn't truncated more bytes. + */ + static bool USE_STORED_HASH_ON_REHASH(size_type bucket_count) { + if (STORE_HASH && sizeof(std::size_t) == sizeof(truncated_hash_type)) { + TSL_RH_UNUSED(bucket_count); + return true; + } else if (STORE_HASH && is_power_of_two_policy::value) { + return bucket_count == 0 || + (bucket_count - 1) <= + std::numeric_limits::max(); + } else { + TSL_RH_UNUSED(bucket_count); + return false; + } + } + + using bucket_entry = + tsl::detail_robin_hash::bucket_entry; + using distance_type = typename bucket_entry::distance_type; + + using buckets_allocator = typename std::allocator_traits< + allocator_type>::template rebind_alloc; + using buckets_container_type = std::vector; + + public: + /** + * The 'operator*()' and 'operator->()' methods return a const reference and + * const pointer respectively to the stored value type. + * + * In case of a map, to get a mutable reference to the value associated to a + * key (the '.second' in the stored pair), you have to call 'value()'. + * + * The main reason for this is that if we returned a `std::pair&` + * instead of a `const std::pair&`, the user may modify the key which + * will put the map in a undefined state. + */ + template + class robin_iterator { + friend class robin_hash; + + private: + using bucket_entry_ptr = + typename std::conditional::type; + + robin_iterator(bucket_entry_ptr bucket) noexcept : m_bucket(bucket) {} + + public: + using iterator_category = std::forward_iterator_tag; + using value_type = const typename robin_hash::value_type; + using difference_type = std::ptrdiff_t; + using reference = value_type&; + using pointer = value_type*; + + robin_iterator() noexcept {} + + // Copy constructor from iterator to const_iterator. + template ::type* = nullptr> + robin_iterator(const robin_iterator& other) noexcept + : m_bucket(other.m_bucket) {} + + robin_iterator(const robin_iterator& other) = default; + robin_iterator(robin_iterator&& other) = default; + robin_iterator& operator=(const robin_iterator& other) = default; + robin_iterator& operator=(robin_iterator&& other) = default; + + const typename robin_hash::key_type& key() const { + return KeySelect()(m_bucket->value()); + } + + template ::value && + IsConst>::type* = nullptr> + const typename U::value_type& value() const { + return U()(m_bucket->value()); + } + + template ::value && + !IsConst>::type* = nullptr> + typename U::value_type& value() const { + return U()(m_bucket->value()); + } + + reference operator*() const { return m_bucket->value(); } + + pointer operator->() const { return std::addressof(m_bucket->value()); } + + robin_iterator& operator++() { + while (true) { + if (m_bucket->last_bucket()) { + ++m_bucket; + return *this; + } + + ++m_bucket; + if (!m_bucket->empty()) { + return *this; + } + } + } + + robin_iterator operator++(int) { + robin_iterator tmp(*this); + ++*this; + + return tmp; + } + + friend bool operator==(const robin_iterator& lhs, + const robin_iterator& rhs) { + return lhs.m_bucket == rhs.m_bucket; + } + + friend bool operator!=(const robin_iterator& lhs, + const robin_iterator& rhs) { + return !(lhs == rhs); + } + + private: + bucket_entry_ptr m_bucket; + }; + + public: +#if defined(__cplusplus) && __cplusplus >= 201402L + robin_hash(size_type bucket_count, const Hash& hash, const KeyEqual& equal, + const Allocator& alloc, + float min_load_factor = DEFAULT_MIN_LOAD_FACTOR, + float max_load_factor = DEFAULT_MAX_LOAD_FACTOR) + : Hash(hash), + KeyEqual(equal), + GrowthPolicy(bucket_count), + m_buckets_data(bucket_count, alloc), + m_buckets(m_buckets_data.empty() ? static_empty_bucket_ptr() + : m_buckets_data.data()), + m_bucket_count(bucket_count), + m_nb_elements(0), + m_grow_on_next_insert(false), + m_try_shrink_on_next_insert(false) { + if (bucket_count > max_bucket_count()) { + TSL_RH_THROW_OR_TERMINATE(std::length_error, + "The map exceeds its maximum bucket count."); + } + + if (m_bucket_count > 0) { + tsl_rh_assert(!m_buckets_data.empty()); + m_buckets_data.back().set_as_last_bucket(); + } + + this->min_load_factor(min_load_factor); + this->max_load_factor(max_load_factor); + } +#else + /** + * C++11 doesn't support the creation of a std::vector with a custom allocator + * and 'count' default-inserted elements. The needed contructor `explicit + * vector(size_type count, const Allocator& alloc = Allocator());` is only + * available in C++14 and later. We thus must resize after using the + * `vector(const Allocator& alloc)` constructor. + * + * We can't use `vector(size_type count, const T& value, const Allocator& + * alloc)` as it requires the value T to be copyable. + */ + robin_hash(size_type bucket_count, const Hash& hash, const KeyEqual& equal, + const Allocator& alloc, + float min_load_factor = DEFAULT_MIN_LOAD_FACTOR, + float max_load_factor = DEFAULT_MAX_LOAD_FACTOR) + : Hash(hash), + KeyEqual(equal), + GrowthPolicy(bucket_count), + m_buckets_data(alloc), + m_buckets(static_empty_bucket_ptr()), + m_bucket_count(bucket_count), + m_nb_elements(0), + m_grow_on_next_insert(false), + m_try_shrink_on_next_insert(false) { + if (bucket_count > max_bucket_count()) { + TSL_RH_THROW_OR_TERMINATE(std::length_error, + "The map exceeds its maximum bucket count."); + } + + if (m_bucket_count > 0) { + m_buckets_data.resize(m_bucket_count); + m_buckets = m_buckets_data.data(); + + tsl_rh_assert(!m_buckets_data.empty()); + m_buckets_data.back().set_as_last_bucket(); + } + + this->min_load_factor(min_load_factor); + this->max_load_factor(max_load_factor); + } +#endif + + robin_hash(const robin_hash& other) + : Hash(other), + KeyEqual(other), + GrowthPolicy(other), + m_buckets_data(other.m_buckets_data), + m_buckets(m_buckets_data.empty() ? static_empty_bucket_ptr() + : m_buckets_data.data()), + m_bucket_count(other.m_bucket_count), + m_nb_elements(other.m_nb_elements), + m_load_threshold(other.m_load_threshold), + m_min_load_factor(other.m_min_load_factor), + m_max_load_factor(other.m_max_load_factor), + m_grow_on_next_insert(other.m_grow_on_next_insert), + m_try_shrink_on_next_insert(other.m_try_shrink_on_next_insert) {} + + robin_hash(robin_hash&& other) noexcept( + std::is_nothrow_move_constructible< + Hash>::value&& std::is_nothrow_move_constructible::value&& + std::is_nothrow_move_constructible::value&& + std::is_nothrow_move_constructible::value) + : Hash(std::move(static_cast(other))), + KeyEqual(std::move(static_cast(other))), + GrowthPolicy(std::move(static_cast(other))), + m_buckets_data(std::move(other.m_buckets_data)), + m_buckets(m_buckets_data.empty() ? static_empty_bucket_ptr() + : m_buckets_data.data()), + m_bucket_count(other.m_bucket_count), + m_nb_elements(other.m_nb_elements), + m_load_threshold(other.m_load_threshold), + m_min_load_factor(other.m_min_load_factor), + m_max_load_factor(other.m_max_load_factor), + m_grow_on_next_insert(other.m_grow_on_next_insert), + m_try_shrink_on_next_insert(other.m_try_shrink_on_next_insert) { + other.clear_and_shrink(); + } + + robin_hash& operator=(const robin_hash& other) { + if (&other != this) { + Hash::operator=(other); + KeyEqual::operator=(other); + GrowthPolicy::operator=(other); + + m_buckets_data = other.m_buckets_data; + m_buckets = m_buckets_data.empty() ? static_empty_bucket_ptr() + : m_buckets_data.data(); + m_bucket_count = other.m_bucket_count; + m_nb_elements = other.m_nb_elements; + + m_load_threshold = other.m_load_threshold; + m_min_load_factor = other.m_min_load_factor; + m_max_load_factor = other.m_max_load_factor; + + m_grow_on_next_insert = other.m_grow_on_next_insert; + m_try_shrink_on_next_insert = other.m_try_shrink_on_next_insert; + } + + return *this; + } + + robin_hash& operator=(robin_hash&& other) { + other.swap(*this); + other.clear_and_shrink(); + + return *this; + } + + allocator_type get_allocator() const { + return m_buckets_data.get_allocator(); + } + + /* + * Iterators + */ + iterator begin() noexcept { + std::size_t i = 0; + while (i < m_bucket_count && m_buckets[i].empty()) { + i++; + } + + return iterator(m_buckets + i); + } + + const_iterator begin() const noexcept { return cbegin(); } + + const_iterator cbegin() const noexcept { + std::size_t i = 0; + while (i < m_bucket_count && m_buckets[i].empty()) { + i++; + } + + return const_iterator(m_buckets + i); + } + + iterator end() noexcept { return iterator(m_buckets + m_bucket_count); } + + const_iterator end() const noexcept { return cend(); } + + const_iterator cend() const noexcept { + return const_iterator(m_buckets + m_bucket_count); + } + + /* + * Capacity + */ + bool empty() const noexcept { return m_nb_elements == 0; } + + size_type size() const noexcept { return m_nb_elements; } + + size_type max_size() const noexcept { return m_buckets_data.max_size(); } + + /* + * Modifiers + */ + void clear() noexcept { + if (m_min_load_factor > 0.0f) { + clear_and_shrink(); + } else { + for (auto& bucket : m_buckets_data) { + bucket.clear(); + } + + m_nb_elements = 0; + m_grow_on_next_insert = false; + } + } + + template + std::pair insert(P&& value) { + return insert_impl(KeySelect()(value), std::forward

(value)); + } + + template + iterator insert_hint(const_iterator hint, P&& value) { + if (hint != cend() && + compare_keys(KeySelect()(*hint), KeySelect()(value))) { + return mutable_iterator(hint); + } + + return insert(std::forward

(value)).first; + } + + template + void insert(InputIt first, InputIt last) { + if (std::is_base_of< + std::forward_iterator_tag, + typename std::iterator_traits::iterator_category>::value) { + const auto nb_elements_insert = std::distance(first, last); + const size_type nb_free_buckets = m_load_threshold - size(); + tsl_rh_assert(m_load_threshold >= size()); + + if (nb_elements_insert > 0 && + nb_free_buckets < size_type(nb_elements_insert)) { + reserve(size() + size_type(nb_elements_insert)); + } + } + + for (; first != last; ++first) { + insert(*first); + } + } + + template + std::pair insert_or_assign(K&& key, M&& obj) { + auto it = try_emplace(std::forward(key), std::forward(obj)); + if (!it.second) { + it.first.value() = std::forward(obj); + } + + return it; + } + + template + iterator insert_or_assign(const_iterator hint, K&& key, M&& obj) { + if (hint != cend() && compare_keys(KeySelect()(*hint), key)) { + auto it = mutable_iterator(hint); + it.value() = std::forward(obj); + + return it; + } + + return insert_or_assign(std::forward(key), std::forward(obj)).first; + } + + template + std::pair emplace(Args&&... args) { + return insert(value_type(std::forward(args)...)); + } + + template + iterator emplace_hint(const_iterator hint, Args&&... args) { + return insert_hint(hint, value_type(std::forward(args)...)); + } + + template + std::pair try_emplace(K&& key, Args&&... args) { + return insert_impl(key, std::piecewise_construct, + std::forward_as_tuple(std::forward(key)), + std::forward_as_tuple(std::forward(args)...)); + } + + template + iterator try_emplace_hint(const_iterator hint, K&& key, Args&&... args) { + if (hint != cend() && compare_keys(KeySelect()(*hint), key)) { + return mutable_iterator(hint); + } + + return try_emplace(std::forward(key), std::forward(args)...).first; + } + + /** + * Here to avoid `template size_type erase(const K& key)` being used + * when we use an `iterator` instead of a `const_iterator`. + */ + iterator erase(iterator pos) { + erase_from_bucket(pos); + + /** + * Erase bucket used a backward shift after clearing the bucket. + * Check if there is a new value in the bucket, if not get the next + * non-empty. + */ + if (pos.m_bucket->empty()) { + ++pos; + } + + m_try_shrink_on_next_insert = true; + + return pos; + } + + iterator erase(const_iterator pos) { return erase(mutable_iterator(pos)); } + + iterator erase(const_iterator first, const_iterator last) { + if (first == last) { + return mutable_iterator(first); + } + + auto first_mutable = mutable_iterator(first); + auto last_mutable = mutable_iterator(last); + for (auto it = first_mutable.m_bucket; it != last_mutable.m_bucket; ++it) { + if (!it->empty()) { + it->clear(); + m_nb_elements--; + } + } + + if (last_mutable == end()) { + m_try_shrink_on_next_insert = true; + return end(); + } + + /* + * Backward shift on the values which come after the deleted values. + * We try to move the values closer to their ideal bucket. + */ + std::size_t icloser_bucket = + static_cast(first_mutable.m_bucket - m_buckets); + std::size_t ito_move_closer_value = + static_cast(last_mutable.m_bucket - m_buckets); + tsl_rh_assert(ito_move_closer_value > icloser_bucket); + + const std::size_t ireturn_bucket = + ito_move_closer_value - + std::min( + ito_move_closer_value - icloser_bucket, + std::size_t( + m_buckets[ito_move_closer_value].dist_from_ideal_bucket())); + + while (ito_move_closer_value < m_bucket_count && + m_buckets[ito_move_closer_value].dist_from_ideal_bucket() > 0) { + icloser_bucket = + ito_move_closer_value - + std::min( + ito_move_closer_value - icloser_bucket, + std::size_t( + m_buckets[ito_move_closer_value].dist_from_ideal_bucket())); + + tsl_rh_assert(m_buckets[icloser_bucket].empty()); + const distance_type new_distance = distance_type( + m_buckets[ito_move_closer_value].dist_from_ideal_bucket() - + (ito_move_closer_value - icloser_bucket)); + m_buckets[icloser_bucket].set_value_of_empty_bucket( + new_distance, m_buckets[ito_move_closer_value].truncated_hash(), + std::move(m_buckets[ito_move_closer_value].value())); + m_buckets[ito_move_closer_value].clear(); + + ++icloser_bucket; + ++ito_move_closer_value; + } + + m_try_shrink_on_next_insert = true; + + return iterator(m_buckets + ireturn_bucket); + } + + template + size_type erase(const K& key) { + return erase(key, hash_key(key)); + } + + template + size_type erase(const K& key, std::size_t hash) { + auto it = find(key, hash); + if (it != end()) { + erase_from_bucket(it); + m_try_shrink_on_next_insert = true; + + return 1; + } else { + return 0; + } + } + + void swap(robin_hash& other) { + using std::swap; + + swap(static_cast(*this), static_cast(other)); + swap(static_cast(*this), static_cast(other)); + swap(static_cast(*this), static_cast(other)); + swap(m_buckets_data, other.m_buckets_data); + swap(m_buckets, other.m_buckets); + swap(m_bucket_count, other.m_bucket_count); + swap(m_nb_elements, other.m_nb_elements); + swap(m_load_threshold, other.m_load_threshold); + swap(m_min_load_factor, other.m_min_load_factor); + swap(m_max_load_factor, other.m_max_load_factor); + swap(m_grow_on_next_insert, other.m_grow_on_next_insert); + swap(m_try_shrink_on_next_insert, other.m_try_shrink_on_next_insert); + } + + /* + * Lookup + */ + template ::value>::type* = nullptr> + typename U::value_type& at(const K& key) { + return at(key, hash_key(key)); + } + + template ::value>::type* = nullptr> + typename U::value_type& at(const K& key, std::size_t hash) { + return const_cast( + static_cast(this)->at(key, hash)); + } + + template ::value>::type* = nullptr> + const typename U::value_type& at(const K& key) const { + return at(key, hash_key(key)); + } + + template ::value>::type* = nullptr> + const typename U::value_type& at(const K& key, std::size_t hash) const { + auto it = find(key, hash); + if (it != cend()) { + return it.value(); + } else { + TSL_RH_THROW_OR_TERMINATE(std::out_of_range, "Couldn't find key."); + } + } + + template ::value>::type* = nullptr> + typename U::value_type& operator[](K&& key) { + return try_emplace(std::forward(key)).first.value(); + } + + template + size_type count(const K& key) const { + return count(key, hash_key(key)); + } + + template + size_type count(const K& key, std::size_t hash) const { + if (find(key, hash) != cend()) { + return 1; + } else { + return 0; + } + } + + template + iterator find(const K& key) { + return find_impl(key, hash_key(key)); + } + + template + iterator find(const K& key, std::size_t hash) { + return find_impl(key, hash); + } + + template + const_iterator find(const K& key) const { + return find_impl(key, hash_key(key)); + } + + template + const_iterator find(const K& key, std::size_t hash) const { + return find_impl(key, hash); + } + + template + bool contains(const K& key) const { + return contains(key, hash_key(key)); + } + + template + bool contains(const K& key, std::size_t hash) const { + return count(key, hash) != 0; + } + + template + std::pair equal_range(const K& key) { + return equal_range(key, hash_key(key)); + } + + template + std::pair equal_range(const K& key, std::size_t hash) { + iterator it = find(key, hash); + return std::make_pair(it, (it == end()) ? it : std::next(it)); + } + + template + std::pair equal_range(const K& key) const { + return equal_range(key, hash_key(key)); + } + + template + std::pair equal_range( + const K& key, std::size_t hash) const { + const_iterator it = find(key, hash); + return std::make_pair(it, (it == cend()) ? it : std::next(it)); + } + + /* + * Bucket interface + */ + size_type bucket_count() const { return m_bucket_count; } + + size_type max_bucket_count() const { + return std::min(GrowthPolicy::max_bucket_count(), + m_buckets_data.max_size()); + } + + /* + * Hash policy + */ + float load_factor() const { + if (bucket_count() == 0) { + return 0; + } + + return float(m_nb_elements) / float(bucket_count()); + } + + float min_load_factor() const { return m_min_load_factor; } + + float max_load_factor() const { return m_max_load_factor; } + + void min_load_factor(float ml) { + m_min_load_factor = clamp(ml, float(MINIMUM_MIN_LOAD_FACTOR), + float(MAXIMUM_MIN_LOAD_FACTOR)); + } + + void max_load_factor(float ml) { + m_max_load_factor = clamp(ml, float(MINIMUM_MAX_LOAD_FACTOR), + float(MAXIMUM_MAX_LOAD_FACTOR)); + m_load_threshold = size_type(float(bucket_count()) * m_max_load_factor); + tsl_rh_assert(bucket_count() == 0 || m_load_threshold < bucket_count()); + } + + void rehash(size_type count_) { + count_ = std::max(count_, + size_type(std::ceil(float(size()) / max_load_factor()))); + rehash_impl(count_); + } + + void reserve(size_type count_) { + rehash(size_type(std::ceil(float(count_) / max_load_factor()))); + } + + /* + * Observers + */ + hasher hash_function() const { return static_cast(*this); } + + key_equal key_eq() const { return static_cast(*this); } + + /* + * Other + */ + iterator mutable_iterator(const_iterator pos) { + return iterator(const_cast(pos.m_bucket)); + } + + template + void serialize(Serializer& serializer) const { + serialize_impl(serializer); + } + + template + void deserialize(Deserializer& deserializer, bool hash_compatible) { + deserialize_impl(deserializer, hash_compatible); + } + + private: + template + std::size_t hash_key(const K& key) const { + return Hash::operator()(key); + } + + template + bool compare_keys(const K1& key1, const K2& key2) const { + return KeyEqual::operator()(key1, key2); + } + + std::size_t bucket_for_hash(std::size_t hash) const { + const std::size_t bucket = GrowthPolicy::bucket_for_hash(hash); + tsl_rh_assert(bucket < m_bucket_count || + (bucket == 0 && m_bucket_count == 0)); + + return bucket; + } + + template ::value>::type* = + nullptr> + std::size_t next_bucket(std::size_t index) const noexcept { + tsl_rh_assert(index < bucket_count()); + + return (index + 1) & this->m_mask; + } + + template ::value>::type* = + nullptr> + std::size_t next_bucket(std::size_t index) const noexcept { + tsl_rh_assert(index < bucket_count()); + + index++; + return (index != bucket_count()) ? index : 0; + } + + template + iterator find_impl(const K& key, std::size_t hash) { + return mutable_iterator( + static_cast(this)->find(key, hash)); + } + + template + const_iterator find_impl(const K& key, std::size_t hash) const { + std::size_t ibucket = bucket_for_hash(hash); + distance_type dist_from_ideal_bucket = 0; + + while (dist_from_ideal_bucket <= + m_buckets[ibucket].dist_from_ideal_bucket()) { + if (TSL_RH_LIKELY( + (!USE_STORED_HASH_ON_LOOKUP || + m_buckets[ibucket].bucket_hash_equal(hash)) && + compare_keys(KeySelect()(m_buckets[ibucket].value()), key))) { + return const_iterator(m_buckets + ibucket); + } + + ibucket = next_bucket(ibucket); + dist_from_ideal_bucket++; + } + + return cend(); + } + + void erase_from_bucket(iterator pos) { + pos.m_bucket->clear(); + m_nb_elements--; + + /** + * Backward shift, swap the empty bucket, previous_ibucket, with the values + * on its right, ibucket, until we cross another empty bucket or if the + * other bucket has a distance_from_ideal_bucket == 0. + * + * We try to move the values closer to their ideal bucket. + */ + std::size_t previous_ibucket = + static_cast(pos.m_bucket - m_buckets); + std::size_t ibucket = next_bucket(previous_ibucket); + + while (m_buckets[ibucket].dist_from_ideal_bucket() > 0) { + tsl_rh_assert(m_buckets[previous_ibucket].empty()); + + const distance_type new_distance = + distance_type(m_buckets[ibucket].dist_from_ideal_bucket() - 1); + m_buckets[previous_ibucket].set_value_of_empty_bucket( + new_distance, m_buckets[ibucket].truncated_hash(), + std::move(m_buckets[ibucket].value())); + m_buckets[ibucket].clear(); + + previous_ibucket = ibucket; + ibucket = next_bucket(ibucket); + } + } + + template + std::pair insert_impl(const K& key, + Args&&... value_type_args) { + const std::size_t hash = hash_key(key); + + std::size_t ibucket = bucket_for_hash(hash); + distance_type dist_from_ideal_bucket = 0; + + while (dist_from_ideal_bucket <= + m_buckets[ibucket].dist_from_ideal_bucket()) { + if ((!USE_STORED_HASH_ON_LOOKUP || + m_buckets[ibucket].bucket_hash_equal(hash)) && + compare_keys(KeySelect()(m_buckets[ibucket].value()), key)) { + return std::make_pair(iterator(m_buckets + ibucket), false); + } + + ibucket = next_bucket(ibucket); + dist_from_ideal_bucket++; + } + + if (rehash_on_extreme_load()) { + ibucket = bucket_for_hash(hash); + dist_from_ideal_bucket = 0; + + while (dist_from_ideal_bucket <= + m_buckets[ibucket].dist_from_ideal_bucket()) { + ibucket = next_bucket(ibucket); + dist_from_ideal_bucket++; + } + } + + if (m_buckets[ibucket].empty()) { + m_buckets[ibucket].set_value_of_empty_bucket( + dist_from_ideal_bucket, bucket_entry::truncate_hash(hash), + std::forward(value_type_args)...); + } else { + insert_value(ibucket, dist_from_ideal_bucket, + bucket_entry::truncate_hash(hash), + std::forward(value_type_args)...); + } + + m_nb_elements++; + /* + * The value will be inserted in ibucket in any case, either because it was + * empty or by stealing the bucket (robin hood). + */ + return std::make_pair(iterator(m_buckets + ibucket), true); + } + + template + void insert_value(std::size_t ibucket, distance_type dist_from_ideal_bucket, + truncated_hash_type hash, Args&&... value_type_args) { + value_type value(std::forward(value_type_args)...); + insert_value_impl(ibucket, dist_from_ideal_bucket, hash, value); + } + + void insert_value(std::size_t ibucket, distance_type dist_from_ideal_bucket, + truncated_hash_type hash, value_type&& value) { + insert_value_impl(ibucket, dist_from_ideal_bucket, hash, value); + } + + /* + * We don't use `value_type&& value` as last argument due to a bug in MSVC + * when `value_type` is a pointer, The compiler is not able to see the + * difference between `std::string*` and `std::string*&&` resulting in a + * compilation error. + * + * The `value` will be in a moved state at the end of the function. + */ + void insert_value_impl(std::size_t ibucket, + distance_type dist_from_ideal_bucket, + truncated_hash_type hash, value_type& value) { + tsl_rh_assert(dist_from_ideal_bucket > + m_buckets[ibucket].dist_from_ideal_bucket()); + m_buckets[ibucket].swap_with_value_in_bucket(dist_from_ideal_bucket, hash, + value); + ibucket = next_bucket(ibucket); + dist_from_ideal_bucket++; + + while (!m_buckets[ibucket].empty()) { + if (dist_from_ideal_bucket > + m_buckets[ibucket].dist_from_ideal_bucket()) { + if (dist_from_ideal_bucket >= + bucket_entry::DIST_FROM_IDEAL_BUCKET_LIMIT) { + /** + * The number of probes is really high, rehash the map on the next + * insert. Difficult to do now as rehash may throw an exception. + */ + m_grow_on_next_insert = true; + } + + m_buckets[ibucket].swap_with_value_in_bucket(dist_from_ideal_bucket, + hash, value); + } + + ibucket = next_bucket(ibucket); + dist_from_ideal_bucket++; + } + + m_buckets[ibucket].set_value_of_empty_bucket(dist_from_ideal_bucket, hash, + std::move(value)); + } + + void rehash_impl(size_type count_) { + robin_hash new_table(count_, static_cast(*this), + static_cast(*this), get_allocator(), + m_min_load_factor, m_max_load_factor); + tsl_rh_assert(size() <= new_table.m_load_threshold); + + const bool use_stored_hash = + USE_STORED_HASH_ON_REHASH(new_table.bucket_count()); + for (auto& bucket : m_buckets_data) { + if (bucket.empty()) { + continue; + } + + const std::size_t hash = + use_stored_hash ? bucket.truncated_hash() + : new_table.hash_key(KeySelect()(bucket.value())); + + new_table.insert_value_on_rehash(new_table.bucket_for_hash(hash), 0, + bucket_entry::truncate_hash(hash), + std::move(bucket.value())); + } + + new_table.m_nb_elements = m_nb_elements; + new_table.swap(*this); + } + + void clear_and_shrink() noexcept { + GrowthPolicy::clear(); + m_buckets_data.clear(); + m_buckets = static_empty_bucket_ptr(); + m_bucket_count = 0; + m_nb_elements = 0; + m_load_threshold = 0; + m_grow_on_next_insert = false; + m_try_shrink_on_next_insert = false; + } + + void insert_value_on_rehash(std::size_t ibucket, + distance_type dist_from_ideal_bucket, + truncated_hash_type hash, value_type&& value) { + while (true) { + if (dist_from_ideal_bucket > + m_buckets[ibucket].dist_from_ideal_bucket()) { + if (m_buckets[ibucket].empty()) { + m_buckets[ibucket].set_value_of_empty_bucket(dist_from_ideal_bucket, + hash, std::move(value)); + return; + } else { + m_buckets[ibucket].swap_with_value_in_bucket(dist_from_ideal_bucket, + hash, value); + } + } + + dist_from_ideal_bucket++; + ibucket = next_bucket(ibucket); + } + } + + /** + * Grow the table if m_grow_on_next_insert is true or we reached the + * max_load_factor. Shrink the table if m_try_shrink_on_next_insert is true + * (an erase occurred) and we're below the min_load_factor. + * + * Return true if the table has been rehashed. + */ + bool rehash_on_extreme_load() { + if (m_grow_on_next_insert || size() >= m_load_threshold) { + rehash_impl(GrowthPolicy::next_bucket_count()); + m_grow_on_next_insert = false; + + return true; + } + + if (m_try_shrink_on_next_insert) { + m_try_shrink_on_next_insert = false; + if (m_min_load_factor != 0.0f && load_factor() < m_min_load_factor) { + reserve(size() + 1); + + return true; + } + } + + return false; + } + + template + void serialize_impl(Serializer& serializer) const { + const slz_size_type version = SERIALIZATION_PROTOCOL_VERSION; + serializer(version); + + // Indicate if the truncated hash of each bucket is stored. Use a + // std::int16_t instead of a bool to avoid the need for the serializer to + // support an extra 'bool' type. + const std::int16_t hash_stored_for_bucket = + static_cast(STORE_HASH); + serializer(hash_stored_for_bucket); + + const slz_size_type nb_elements = m_nb_elements; + serializer(nb_elements); + + const slz_size_type bucket_count = m_buckets_data.size(); + serializer(bucket_count); + + const float min_load_factor = m_min_load_factor; + serializer(min_load_factor); + + const float max_load_factor = m_max_load_factor; + serializer(max_load_factor); + + for (const bucket_entry& bucket : m_buckets_data) { + if (bucket.empty()) { + const std::int16_t empty_bucket = + bucket_entry::EMPTY_MARKER_DIST_FROM_IDEAL_BUCKET; + serializer(empty_bucket); + } else { + const std::int16_t dist_from_ideal_bucket = + bucket.dist_from_ideal_bucket(); + serializer(dist_from_ideal_bucket); + if (STORE_HASH) { + const std::uint32_t truncated_hash = bucket.truncated_hash(); + serializer(truncated_hash); + } + serializer(bucket.value()); + } + } + } + + template + void deserialize_impl(Deserializer& deserializer, bool hash_compatible) { + tsl_rh_assert(m_buckets_data.empty()); // Current hash table must be empty + + const slz_size_type version = + deserialize_value(deserializer); + // For now we only have one version of the serialization protocol. + // If it doesn't match there is a problem with the file. + if (version != SERIALIZATION_PROTOCOL_VERSION) { + TSL_RH_THROW_OR_TERMINATE(std::runtime_error, + "Can't deserialize the ordered_map/set. " + "The protocol version header is invalid."); + } + + const bool hash_stored_for_bucket = + deserialize_value(deserializer) ? true : false; + if (hash_compatible && STORE_HASH != hash_stored_for_bucket) { + TSL_RH_THROW_OR_TERMINATE( + std::runtime_error, + "Can't deserialize a map with a different StoreHash " + "than the one used during the serialization when " + "hash compatibility is used"); + } + + const slz_size_type nb_elements = + deserialize_value(deserializer); + const slz_size_type bucket_count_ds = + deserialize_value(deserializer); + const float min_load_factor = deserialize_value(deserializer); + const float max_load_factor = deserialize_value(deserializer); + + if (min_load_factor < MINIMUM_MIN_LOAD_FACTOR || + min_load_factor > MAXIMUM_MIN_LOAD_FACTOR) { + TSL_RH_THROW_OR_TERMINATE( + std::runtime_error, + "Invalid min_load_factor. Check that the serializer " + "and deserializer support floats correctly as they " + "can be converted implicitly to ints."); + } + + if (max_load_factor < MINIMUM_MAX_LOAD_FACTOR || + max_load_factor > MAXIMUM_MAX_LOAD_FACTOR) { + TSL_RH_THROW_OR_TERMINATE( + std::runtime_error, + "Invalid max_load_factor. Check that the serializer " + "and deserializer support floats correctly as they " + "can be converted implicitly to ints."); + } + + this->min_load_factor(min_load_factor); + this->max_load_factor(max_load_factor); + + if (bucket_count_ds == 0) { + tsl_rh_assert(nb_elements == 0); + return; + } + + if (!hash_compatible) { + reserve(numeric_cast(nb_elements, + "Deserialized nb_elements is too big.")); + for (slz_size_type ibucket = 0; ibucket < bucket_count_ds; ibucket++) { + const distance_type dist_from_ideal_bucket = + deserialize_value(deserializer); + if (dist_from_ideal_bucket != + bucket_entry::EMPTY_MARKER_DIST_FROM_IDEAL_BUCKET) { + if (hash_stored_for_bucket) { + TSL_RH_UNUSED(deserialize_value(deserializer)); + } + + insert(deserialize_value(deserializer)); + } + } + + tsl_rh_assert(nb_elements == size()); + } else { + m_bucket_count = numeric_cast( + bucket_count_ds, "Deserialized bucket_count is too big."); + + GrowthPolicy::operator=(GrowthPolicy(m_bucket_count)); + // GrowthPolicy should not modify the bucket count we got from + // deserialization + if (m_bucket_count != bucket_count_ds) { + TSL_RH_THROW_OR_TERMINATE(std::runtime_error, + "The GrowthPolicy is not the same even " + "though hash_compatible is true."); + } + + m_nb_elements = numeric_cast( + nb_elements, "Deserialized nb_elements is too big."); + m_buckets_data.resize(m_bucket_count); + m_buckets = m_buckets_data.data(); + + for (bucket_entry& bucket : m_buckets_data) { + const distance_type dist_from_ideal_bucket = + deserialize_value(deserializer); + if (dist_from_ideal_bucket != + bucket_entry::EMPTY_MARKER_DIST_FROM_IDEAL_BUCKET) { + truncated_hash_type truncated_hash = 0; + if (hash_stored_for_bucket) { + tsl_rh_assert(hash_stored_for_bucket); + truncated_hash = deserialize_value(deserializer); + } + + bucket.set_value_of_empty_bucket( + dist_from_ideal_bucket, truncated_hash, + deserialize_value(deserializer)); + } + } + + if (!m_buckets_data.empty()) { + m_buckets_data.back().set_as_last_bucket(); + } + } + } + + public: + static const size_type DEFAULT_INIT_BUCKETS_SIZE = 0; + + static constexpr float DEFAULT_MAX_LOAD_FACTOR = 0.5f; + static constexpr float MINIMUM_MAX_LOAD_FACTOR = 0.2f; + static constexpr float MAXIMUM_MAX_LOAD_FACTOR = 0.95f; + + static constexpr float DEFAULT_MIN_LOAD_FACTOR = 0.0f; + static constexpr float MINIMUM_MIN_LOAD_FACTOR = 0.0f; + static constexpr float MAXIMUM_MIN_LOAD_FACTOR = 0.15f; + + static_assert(MINIMUM_MAX_LOAD_FACTOR < MAXIMUM_MAX_LOAD_FACTOR, + "MINIMUM_MAX_LOAD_FACTOR should be < MAXIMUM_MAX_LOAD_FACTOR"); + static_assert(MINIMUM_MIN_LOAD_FACTOR < MAXIMUM_MIN_LOAD_FACTOR, + "MINIMUM_MIN_LOAD_FACTOR should be < MAXIMUM_MIN_LOAD_FACTOR"); + static_assert(MAXIMUM_MIN_LOAD_FACTOR < MINIMUM_MAX_LOAD_FACTOR, + "MAXIMUM_MIN_LOAD_FACTOR should be < MINIMUM_MAX_LOAD_FACTOR"); + + private: + /** + * Protocol version currenlty used for serialization. + */ + static const slz_size_type SERIALIZATION_PROTOCOL_VERSION = 1; + + /** + * Return an always valid pointer to an static empty bucket_entry with + * last_bucket() == true. + */ + bucket_entry* static_empty_bucket_ptr() noexcept { + static bucket_entry empty_bucket(true); + tsl_rh_assert(empty_bucket.empty()); + return &empty_bucket; + } + + private: + buckets_container_type m_buckets_data; + + /** + * Points to m_buckets_data.data() if !m_buckets_data.empty() otherwise points + * to static_empty_bucket_ptr. This variable is useful to avoid the cost of + * checking if m_buckets_data is empty when trying to find an element. + * + * TODO Remove m_buckets_data and only use a pointer instead of a + * pointer+vector to save some space in the robin_hash object. Manage the + * Allocator manually. + */ + bucket_entry* m_buckets; + + /** + * Used a lot in find, avoid the call to m_buckets_data.size() which is a bit + * slower. + */ + size_type m_bucket_count; + + size_type m_nb_elements; + + size_type m_load_threshold; + + float m_min_load_factor; + float m_max_load_factor; + + bool m_grow_on_next_insert; + + /** + * We can't shrink down the map on erase operations as the erase methods need + * to return the next iterator. Shrinking the map would invalidate all the + * iterators and we could not return the next iterator in a meaningful way, On + * erase, we thus just indicate on erase that we should try to shrink the hash + * table on the next insert if we go below the min_load_factor. + */ + bool m_try_shrink_on_next_insert; +}; + +} // namespace detail_robin_hash + +} // namespace tsl + +#endif diff --git a/self/compiler/native/nerdcore/src/tsl/robin_map.h b/self/compiler/native/nerdcore/src/tsl/robin_map.h new file mode 100644 index 000000000..aeb354c3c --- /dev/null +++ b/self/compiler/native/nerdcore/src/tsl/robin_map.h @@ -0,0 +1,807 @@ +/** + * MIT License + * + * Copyright (c) 2017 Thibaut Goetghebuer-Planchon + * + * 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. + */ +#ifndef TSL_ROBIN_MAP_H +#define TSL_ROBIN_MAP_H + +#include +#include +#include +#include +#include +#include + +#include "robin_hash.h" + +namespace tsl { + +/** + * Implementation of a hash map using open-addressing and the robin hood hashing + * algorithm with backward shift deletion. + * + * For operations modifying the hash map (insert, erase, rehash, ...), the + * strong exception guarantee is only guaranteed when the expression + * `std::is_nothrow_swappable>::value && + * std::is_nothrow_move_constructible>::value` is true, + * otherwise if an exception is thrown during the swap or the move, the hash map + * may end up in a undefined state. Per the standard a `Key` or `T` with a + * noexcept copy constructor and no move constructor also satisfies the + * `std::is_nothrow_move_constructible>::value` criterion (and + * will thus guarantee the strong exception for the map). + * + * When `StoreHash` is true, 32 bits of the hash are stored alongside the + * values. It can improve the performance during lookups if the `KeyEqual` + * function takes time (if it engenders a cache-miss for example) as we then + * compare the stored hashes before comparing the keys. When + * `tsl::rh::power_of_two_growth_policy` is used as `GrowthPolicy`, it may also + * speed-up the rehash process as we can avoid to recalculate the hash. When it + * is detected that storing the hash will not incur any memory penalty due to + * alignment (i.e. `sizeof(tsl::detail_robin_hash::bucket_entry) == sizeof(tsl::detail_robin_hash::bucket_entry)`) + * and `tsl::rh::power_of_two_growth_policy` is used, the hash will be stored + * even if `StoreHash` is false so that we can speed-up the rehash (but it will + * not be used on lookups unless `StoreHash` is true). + * + * `GrowthPolicy` defines how the map grows and consequently how a hash value is + * mapped to a bucket. By default the map uses + * `tsl::rh::power_of_two_growth_policy`. This policy keeps the number of + * buckets to a power of two and uses a mask to map the hash to a bucket instead + * of the slow modulo. Other growth policies are available and you may define + * your own growth policy, check `tsl::rh::power_of_two_growth_policy` for the + * interface. + * + * `std::pair` must be swappable. + * + * `Key` and `T` must be copy and/or move constructible. + * + * If the destructor of `Key` or `T` throws an exception, the behaviour of the + * class is undefined. + * + * Iterators invalidation: + * - clear, operator=, reserve, rehash: always invalidate the iterators. + * - insert, emplace, emplace_hint, operator[]: if there is an effective + * insert, invalidate the iterators. + * - erase: always invalidate the iterators. + */ +template , + class KeyEqual = std::equal_to, + class Allocator = std::allocator>, + bool StoreHash = false, + class GrowthPolicy = tsl::rh::power_of_two_growth_policy<2>> +class robin_map { + private: + template + using has_is_transparent = tsl::detail_robin_hash::has_is_transparent; + + class KeySelect { + public: + using key_type = Key; + + const key_type& operator()( + const std::pair& key_value) const noexcept { + return key_value.first; + } + + key_type& operator()(std::pair& key_value) noexcept { + return key_value.first; + } + }; + + class ValueSelect { + public: + using value_type = T; + + const value_type& operator()( + const std::pair& key_value) const noexcept { + return key_value.second; + } + + value_type& operator()(std::pair& key_value) noexcept { + return key_value.second; + } + }; + + using ht = detail_robin_hash::robin_hash, KeySelect, + ValueSelect, Hash, KeyEqual, + Allocator, StoreHash, GrowthPolicy>; + + public: + using key_type = typename ht::key_type; + using mapped_type = T; + using value_type = typename ht::value_type; + using size_type = typename ht::size_type; + using difference_type = typename ht::difference_type; + using hasher = typename ht::hasher; + using key_equal = typename ht::key_equal; + using allocator_type = typename ht::allocator_type; + using reference = typename ht::reference; + using const_reference = typename ht::const_reference; + using pointer = typename ht::pointer; + using const_pointer = typename ht::const_pointer; + using iterator = typename ht::iterator; + using const_iterator = typename ht::const_iterator; + + public: + /* + * Constructors + */ + robin_map() : robin_map(ht::DEFAULT_INIT_BUCKETS_SIZE) {} + + explicit robin_map(size_type bucket_count, const Hash& hash = Hash(), + const KeyEqual& equal = KeyEqual(), + const Allocator& alloc = Allocator()) + : m_ht(bucket_count, hash, equal, alloc) {} + + robin_map(size_type bucket_count, const Allocator& alloc) + : robin_map(bucket_count, Hash(), KeyEqual(), alloc) {} + + robin_map(size_type bucket_count, const Hash& hash, const Allocator& alloc) + : robin_map(bucket_count, hash, KeyEqual(), alloc) {} + + explicit robin_map(const Allocator& alloc) + : robin_map(ht::DEFAULT_INIT_BUCKETS_SIZE, alloc) {} + + template + robin_map(InputIt first, InputIt last, + size_type bucket_count = ht::DEFAULT_INIT_BUCKETS_SIZE, + const Hash& hash = Hash(), const KeyEqual& equal = KeyEqual(), + const Allocator& alloc = Allocator()) + : robin_map(bucket_count, hash, equal, alloc) { + insert(first, last); + } + + template + robin_map(InputIt first, InputIt last, size_type bucket_count, + const Allocator& alloc) + : robin_map(first, last, bucket_count, Hash(), KeyEqual(), alloc) {} + + template + robin_map(InputIt first, InputIt last, size_type bucket_count, + const Hash& hash, const Allocator& alloc) + : robin_map(first, last, bucket_count, hash, KeyEqual(), alloc) {} + + robin_map(std::initializer_list init, + size_type bucket_count = ht::DEFAULT_INIT_BUCKETS_SIZE, + const Hash& hash = Hash(), const KeyEqual& equal = KeyEqual(), + const Allocator& alloc = Allocator()) + : robin_map(init.begin(), init.end(), bucket_count, hash, equal, alloc) {} + + robin_map(std::initializer_list init, size_type bucket_count, + const Allocator& alloc) + : robin_map(init.begin(), init.end(), bucket_count, Hash(), KeyEqual(), + alloc) {} + + robin_map(std::initializer_list init, size_type bucket_count, + const Hash& hash, const Allocator& alloc) + : robin_map(init.begin(), init.end(), bucket_count, hash, KeyEqual(), + alloc) {} + + robin_map& operator=(std::initializer_list ilist) { + m_ht.clear(); + + m_ht.reserve(ilist.size()); + m_ht.insert(ilist.begin(), ilist.end()); + + return *this; + } + + allocator_type get_allocator() const { return m_ht.get_allocator(); } + + /* + * Iterators + */ + iterator begin() noexcept { return m_ht.begin(); } + const_iterator begin() const noexcept { return m_ht.begin(); } + const_iterator cbegin() const noexcept { return m_ht.cbegin(); } + + iterator end() noexcept { return m_ht.end(); } + const_iterator end() const noexcept { return m_ht.end(); } + const_iterator cend() const noexcept { return m_ht.cend(); } + + /* + * Capacity + */ + bool empty() const noexcept { return m_ht.empty(); } + size_type size() const noexcept { return m_ht.size(); } + size_type max_size() const noexcept { return m_ht.max_size(); } + + /* + * Modifiers + */ + void clear() noexcept { m_ht.clear(); } + + std::pair insert(const value_type& value) { + return m_ht.insert(value); + } + + template ::value>::type* = nullptr> + std::pair insert(P&& value) { + return m_ht.emplace(std::forward

(value)); + } + + std::pair insert(value_type&& value) { + return m_ht.insert(std::move(value)); + } + + iterator insert(const_iterator hint, const value_type& value) { + return m_ht.insert_hint(hint, value); + } + + template ::value>::type* = nullptr> + iterator insert(const_iterator hint, P&& value) { + return m_ht.emplace_hint(hint, std::forward

(value)); + } + + iterator insert(const_iterator hint, value_type&& value) { + return m_ht.insert_hint(hint, std::move(value)); + } + + template + void insert(InputIt first, InputIt last) { + m_ht.insert(first, last); + } + + void insert(std::initializer_list ilist) { + m_ht.insert(ilist.begin(), ilist.end()); + } + + template + std::pair insert_or_assign(const key_type& k, M&& obj) { + return m_ht.insert_or_assign(k, std::forward(obj)); + } + + template + std::pair insert_or_assign(key_type&& k, M&& obj) { + return m_ht.insert_or_assign(std::move(k), std::forward(obj)); + } + + template + iterator insert_or_assign(const_iterator hint, const key_type& k, M&& obj) { + return m_ht.insert_or_assign(hint, k, std::forward(obj)); + } + + template + iterator insert_or_assign(const_iterator hint, key_type&& k, M&& obj) { + return m_ht.insert_or_assign(hint, std::move(k), std::forward(obj)); + } + + /** + * Due to the way elements are stored, emplace will need to move or copy the + * key-value once. The method is equivalent to + * insert(value_type(std::forward(args)...)); + * + * Mainly here for compatibility with the std::unordered_map interface. + */ + template + std::pair emplace(Args&&... args) { + return m_ht.emplace(std::forward(args)...); + } + + /** + * Due to the way elements are stored, emplace_hint will need to move or copy + * the key-value once. The method is equivalent to insert(hint, + * value_type(std::forward(args)...)); + * + * Mainly here for compatibility with the std::unordered_map interface. + */ + template + iterator emplace_hint(const_iterator hint, Args&&... args) { + return m_ht.emplace_hint(hint, std::forward(args)...); + } + + template + std::pair try_emplace(const key_type& k, Args&&... args) { + return m_ht.try_emplace(k, std::forward(args)...); + } + + template + std::pair try_emplace(key_type&& k, Args&&... args) { + return m_ht.try_emplace(std::move(k), std::forward(args)...); + } + + template + iterator try_emplace(const_iterator hint, const key_type& k, Args&&... args) { + return m_ht.try_emplace_hint(hint, k, std::forward(args)...); + } + + template + iterator try_emplace(const_iterator hint, key_type&& k, Args&&... args) { + return m_ht.try_emplace_hint(hint, std::move(k), + std::forward(args)...); + } + + iterator erase(iterator pos) { return m_ht.erase(pos); } + iterator erase(const_iterator pos) { return m_ht.erase(pos); } + iterator erase(const_iterator first, const_iterator last) { + return m_ht.erase(first, last); + } + size_type erase(const key_type& key) { return m_ht.erase(key); } + + /** + * Use the hash value 'precalculated_hash' instead of hashing the key. The + * hash value should be the same as hash_function()(key). Useful to speed-up + * the lookup to the value if you already have the hash. + */ + size_type erase(const key_type& key, std::size_t precalculated_hash) { + return m_ht.erase(key, precalculated_hash); + } + + /** + * This overload only participates in the overload resolution if the typedef + * KeyEqual::is_transparent exists. If so, K must be hashable and comparable + * to Key. + */ + template < + class K, class KE = KeyEqual, + typename std::enable_if::value>::type* = nullptr> + size_type erase(const K& key) { + return m_ht.erase(key); + } + + /** + * @copydoc erase(const K& key) + * + * Use the hash value 'precalculated_hash' instead of hashing the key. The + * hash value should be the same as hash_function()(key). Useful to speed-up + * the lookup to the value if you already have the hash. + */ + template < + class K, class KE = KeyEqual, + typename std::enable_if::value>::type* = nullptr> + size_type erase(const K& key, std::size_t precalculated_hash) { + return m_ht.erase(key, precalculated_hash); + } + + void swap(robin_map& other) { other.m_ht.swap(m_ht); } + + /* + * Lookup + */ + T& at(const Key& key) { return m_ht.at(key); } + + /** + * Use the hash value 'precalculated_hash' instead of hashing the key. The + * hash value should be the same as hash_function()(key). Useful to speed-up + * the lookup if you already have the hash. + */ + T& at(const Key& key, std::size_t precalculated_hash) { + return m_ht.at(key, precalculated_hash); + } + + const T& at(const Key& key) const { return m_ht.at(key); } + + /** + * @copydoc at(const Key& key, std::size_t precalculated_hash) + */ + const T& at(const Key& key, std::size_t precalculated_hash) const { + return m_ht.at(key, precalculated_hash); + } + + /** + * This overload only participates in the overload resolution if the typedef + * KeyEqual::is_transparent exists. If so, K must be hashable and comparable + * to Key. + */ + template < + class K, class KE = KeyEqual, + typename std::enable_if::value>::type* = nullptr> + T& at(const K& key) { + return m_ht.at(key); + } + + /** + * @copydoc at(const K& key) + * + * Use the hash value 'precalculated_hash' instead of hashing the key. The + * hash value should be the same as hash_function()(key). Useful to speed-up + * the lookup if you already have the hash. + */ + template < + class K, class KE = KeyEqual, + typename std::enable_if::value>::type* = nullptr> + T& at(const K& key, std::size_t precalculated_hash) { + return m_ht.at(key, precalculated_hash); + } + + /** + * @copydoc at(const K& key) + */ + template < + class K, class KE = KeyEqual, + typename std::enable_if::value>::type* = nullptr> + const T& at(const K& key) const { + return m_ht.at(key); + } + + /** + * @copydoc at(const K& key, std::size_t precalculated_hash) + */ + template < + class K, class KE = KeyEqual, + typename std::enable_if::value>::type* = nullptr> + const T& at(const K& key, std::size_t precalculated_hash) const { + return m_ht.at(key, precalculated_hash); + } + + T& operator[](const Key& key) { return m_ht[key]; } + T& operator[](Key&& key) { return m_ht[std::move(key)]; } + + size_type count(const Key& key) const { return m_ht.count(key); } + + /** + * Use the hash value 'precalculated_hash' instead of hashing the key. The + * hash value should be the same as hash_function()(key). Useful to speed-up + * the lookup if you already have the hash. + */ + size_type count(const Key& key, std::size_t precalculated_hash) const { + return m_ht.count(key, precalculated_hash); + } + + /** + * This overload only participates in the overload resolution if the typedef + * KeyEqual::is_transparent exists. If so, K must be hashable and comparable + * to Key. + */ + template < + class K, class KE = KeyEqual, + typename std::enable_if::value>::type* = nullptr> + size_type count(const K& key) const { + return m_ht.count(key); + } + + /** + * @copydoc count(const K& key) const + * + * Use the hash value 'precalculated_hash' instead of hashing the key. The + * hash value should be the same as hash_function()(key). Useful to speed-up + * the lookup if you already have the hash. + */ + template < + class K, class KE = KeyEqual, + typename std::enable_if::value>::type* = nullptr> + size_type count(const K& key, std::size_t precalculated_hash) const { + return m_ht.count(key, precalculated_hash); + } + + iterator find(const Key& key) { return m_ht.find(key); } + + /** + * Use the hash value 'precalculated_hash' instead of hashing the key. The + * hash value should be the same as hash_function()(key). Useful to speed-up + * the lookup if you already have the hash. + */ + iterator find(const Key& key, std::size_t precalculated_hash) { + return m_ht.find(key, precalculated_hash); + } + + const_iterator find(const Key& key) const { return m_ht.find(key); } + + /** + * @copydoc find(const Key& key, std::size_t precalculated_hash) + */ + const_iterator find(const Key& key, std::size_t precalculated_hash) const { + return m_ht.find(key, precalculated_hash); + } + + /** + * This overload only participates in the overload resolution if the typedef + * KeyEqual::is_transparent exists. If so, K must be hashable and comparable + * to Key. + */ + template < + class K, class KE = KeyEqual, + typename std::enable_if::value>::type* = nullptr> + iterator find(const K& key) { + return m_ht.find(key); + } + + /** + * @copydoc find(const K& key) + * + * Use the hash value 'precalculated_hash' instead of hashing the key. The + * hash value should be the same as hash_function()(key). Useful to speed-up + * the lookup if you already have the hash. + */ + template < + class K, class KE = KeyEqual, + typename std::enable_if::value>::type* = nullptr> + iterator find(const K& key, std::size_t precalculated_hash) { + return m_ht.find(key, precalculated_hash); + } + + /** + * @copydoc find(const K& key) + */ + template < + class K, class KE = KeyEqual, + typename std::enable_if::value>::type* = nullptr> + const_iterator find(const K& key) const { + return m_ht.find(key); + } + + /** + * @copydoc find(const K& key) + * + * Use the hash value 'precalculated_hash' instead of hashing the key. The + * hash value should be the same as hash_function()(key). Useful to speed-up + * the lookup if you already have the hash. + */ + template < + class K, class KE = KeyEqual, + typename std::enable_if::value>::type* = nullptr> + const_iterator find(const K& key, std::size_t precalculated_hash) const { + return m_ht.find(key, precalculated_hash); + } + + bool contains(const Key& key) const { return m_ht.contains(key); } + + /** + * Use the hash value 'precalculated_hash' instead of hashing the key. The + * hash value should be the same as hash_function()(key). Useful to speed-up + * the lookup if you already have the hash. + */ + bool contains(const Key& key, std::size_t precalculated_hash) const { + return m_ht.contains(key, precalculated_hash); + } + + /** + * This overload only participates in the overload resolution if the typedef + * KeyEqual::is_transparent exists. If so, K must be hashable and comparable + * to Key. + */ + template < + class K, class KE = KeyEqual, + typename std::enable_if::value>::type* = nullptr> + bool contains(const K& key) const { + return m_ht.contains(key); + } + + /** + * @copydoc contains(const K& key) const + * + * Use the hash value 'precalculated_hash' instead of hashing the key. The + * hash value should be the same as hash_function()(key). Useful to speed-up + * the lookup if you already have the hash. + */ + template < + class K, class KE = KeyEqual, + typename std::enable_if::value>::type* = nullptr> + bool contains(const K& key, std::size_t precalculated_hash) const { + return m_ht.contains(key, precalculated_hash); + } + + std::pair equal_range(const Key& key) { + return m_ht.equal_range(key); + } + + /** + * Use the hash value 'precalculated_hash' instead of hashing the key. The + * hash value should be the same as hash_function()(key). Useful to speed-up + * the lookup if you already have the hash. + */ + std::pair equal_range(const Key& key, + std::size_t precalculated_hash) { + return m_ht.equal_range(key, precalculated_hash); + } + + std::pair equal_range(const Key& key) const { + return m_ht.equal_range(key); + } + + /** + * @copydoc equal_range(const Key& key, std::size_t precalculated_hash) + */ + std::pair equal_range( + const Key& key, std::size_t precalculated_hash) const { + return m_ht.equal_range(key, precalculated_hash); + } + + /** + * This overload only participates in the overload resolution if the typedef + * KeyEqual::is_transparent exists. If so, K must be hashable and comparable + * to Key. + */ + template < + class K, class KE = KeyEqual, + typename std::enable_if::value>::type* = nullptr> + std::pair equal_range(const K& key) { + return m_ht.equal_range(key); + } + + /** + * @copydoc equal_range(const K& key) + * + * Use the hash value 'precalculated_hash' instead of hashing the key. The + * hash value should be the same as hash_function()(key). Useful to speed-up + * the lookup if you already have the hash. + */ + template < + class K, class KE = KeyEqual, + typename std::enable_if::value>::type* = nullptr> + std::pair equal_range(const K& key, + std::size_t precalculated_hash) { + return m_ht.equal_range(key, precalculated_hash); + } + + /** + * @copydoc equal_range(const K& key) + */ + template < + class K, class KE = KeyEqual, + typename std::enable_if::value>::type* = nullptr> + std::pair equal_range(const K& key) const { + return m_ht.equal_range(key); + } + + /** + * @copydoc equal_range(const K& key, std::size_t precalculated_hash) + */ + template < + class K, class KE = KeyEqual, + typename std::enable_if::value>::type* = nullptr> + std::pair equal_range( + const K& key, std::size_t precalculated_hash) const { + return m_ht.equal_range(key, precalculated_hash); + } + + /* + * Bucket interface + */ + size_type bucket_count() const { return m_ht.bucket_count(); } + size_type max_bucket_count() const { return m_ht.max_bucket_count(); } + + /* + * Hash policy + */ + float load_factor() const { return m_ht.load_factor(); } + + float min_load_factor() const { return m_ht.min_load_factor(); } + float max_load_factor() const { return m_ht.max_load_factor(); } + + /** + * Set the `min_load_factor` to `ml`. When the `load_factor` of the map goes + * below `min_load_factor` after some erase operations, the map will be + * shrunk when an insertion occurs. The erase method itself never shrinks + * the map. + * + * The default value of `min_load_factor` is 0.0f, the map never shrinks by + * default. + */ + void min_load_factor(float ml) { m_ht.min_load_factor(ml); } + void max_load_factor(float ml) { m_ht.max_load_factor(ml); } + + void rehash(size_type count_) { m_ht.rehash(count_); } + void reserve(size_type count_) { m_ht.reserve(count_); } + + /* + * Observers + */ + hasher hash_function() const { return m_ht.hash_function(); } + key_equal key_eq() const { return m_ht.key_eq(); } + + /* + * Other + */ + + /** + * Convert a const_iterator to an iterator. + */ + iterator mutable_iterator(const_iterator pos) { + return m_ht.mutable_iterator(pos); + } + + /** + * Serialize the map through the `serializer` parameter. + * + * The `serializer` parameter must be a function object that supports the + * following call: + * - `template void operator()(const U& value);` where the types + * `std::int16_t`, `std::uint32_t`, `std::uint64_t`, `float` and + * `std::pair` must be supported for U. + * + * The implementation leaves binary compatibility (endianness, IEEE 754 for + * floats, ...) of the types it serializes in the hands of the `Serializer` + * function object if compatibility is required. + */ + template + void serialize(Serializer& serializer) const { + m_ht.serialize(serializer); + } + + /** + * Deserialize a previously serialized map through the `deserializer` + * parameter. + * + * The `deserializer` parameter must be a function object that supports the + * following call: + * - `template U operator()();` where the types `std::int16_t`, + * `std::uint32_t`, `std::uint64_t`, `float` and `std::pair` must be + * supported for U. + * + * If the deserialized hash map type is hash compatible with the serialized + * map, the deserialization process can be sped up by setting + * `hash_compatible` to true. To be hash compatible, the Hash, KeyEqual and + * GrowthPolicy must behave the same way than the ones used on the serialized + * map and the StoreHash must have the same value. The `std::size_t` must also + * be of the same size as the one on the platform used to serialize the map. + * If these criteria are not met, the behaviour is undefined with + * `hash_compatible` sets to true. + * + * The behaviour is undefined if the type `Key` and `T` of the `robin_map` are + * not the same as the types used during serialization. + * + * The implementation leaves binary compatibility (endianness, IEEE 754 for + * floats, size of int, ...) of the types it deserializes in the hands of the + * `Deserializer` function object if compatibility is required. + */ + template + static robin_map deserialize(Deserializer& deserializer, + bool hash_compatible = false) { + robin_map map(0); + map.m_ht.deserialize(deserializer, hash_compatible); + + return map; + } + + friend bool operator==(const robin_map& lhs, const robin_map& rhs) { + if (lhs.size() != rhs.size()) { + return false; + } + + for (const auto& element_lhs : lhs) { + const auto it_element_rhs = rhs.find(element_lhs.first); + if (it_element_rhs == rhs.cend() || + element_lhs.second != it_element_rhs->second) { + return false; + } + } + + return true; + } + + friend bool operator!=(const robin_map& lhs, const robin_map& rhs) { + return !operator==(lhs, rhs); + } + + friend void swap(robin_map& lhs, robin_map& rhs) { lhs.swap(rhs); } + + private: + ht m_ht; +}; + +/** + * Same as `tsl::robin_map`. + */ +template , + class KeyEqual = std::equal_to, + class Allocator = std::allocator>, + bool StoreHash = false> +using robin_pg_map = robin_map; + +} // end namespace tsl + +#endif diff --git a/self/compiler/native/nerdcore/src/tsl/robin_set.h b/self/compiler/native/nerdcore/src/tsl/robin_set.h new file mode 100644 index 000000000..54789509c --- /dev/null +++ b/self/compiler/native/nerdcore/src/tsl/robin_set.h @@ -0,0 +1,660 @@ +/** + * MIT License + * + * Copyright (c) 2017 Thibaut Goetghebuer-Planchon + * + * 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. + */ +#ifndef TSL_ROBIN_SET_H +#define TSL_ROBIN_SET_H + +#include +#include +#include +#include +#include +#include + +#include "robin_hash.h" + +namespace tsl { + +/** + * Implementation of a hash set using open-addressing and the robin hood hashing + * algorithm with backward shift deletion. + * + * For operations modifying the hash set (insert, erase, rehash, ...), the + * strong exception guarantee is only guaranteed when the expression + * `std::is_nothrow_swappable::value && + * std::is_nothrow_move_constructible::value` is true, otherwise if an + * exception is thrown during the swap or the move, the hash set may end up in a + * undefined state. Per the standard a `Key` with a noexcept copy constructor + * and no move constructor also satisfies the + * `std::is_nothrow_move_constructible::value` criterion (and will thus + * guarantee the strong exception for the set). + * + * When `StoreHash` is true, 32 bits of the hash are stored alongside the + * values. It can improve the performance during lookups if the `KeyEqual` + * function takes time (or engenders a cache-miss for example) as we then + * compare the stored hashes before comparing the keys. When + * `tsl::rh::power_of_two_growth_policy` is used as `GrowthPolicy`, it may also + * speed-up the rehash process as we can avoid to recalculate the hash. When it + * is detected that storing the hash will not incur any memory penalty due to + * alignment (i.e. `sizeof(tsl::detail_robin_hash::bucket_entry) == sizeof(tsl::detail_robin_hash::bucket_entry)`) + * and `tsl::rh::power_of_two_growth_policy` is used, the hash will be stored + * even if `StoreHash` is false so that we can speed-up the rehash (but it will + * not be used on lookups unless `StoreHash` is true). + * + * `GrowthPolicy` defines how the set grows and consequently how a hash value is + * mapped to a bucket. By default the set uses + * `tsl::rh::power_of_two_growth_policy`. This policy keeps the number of + * buckets to a power of two and uses a mask to set the hash to a bucket instead + * of the slow modulo. Other growth policies are available and you may define + * your own growth policy, check `tsl::rh::power_of_two_growth_policy` for the + * interface. + * + * `Key` must be swappable. + * + * `Key` must be copy and/or move constructible. + * + * If the destructor of `Key` throws an exception, the behaviour of the class is + * undefined. + * + * Iterators invalidation: + * - clear, operator=, reserve, rehash: always invalidate the iterators. + * - insert, emplace, emplace_hint, operator[]: if there is an effective + * insert, invalidate the iterators. + * - erase: always invalidate the iterators. + */ +template , + class KeyEqual = std::equal_to, + class Allocator = std::allocator, bool StoreHash = false, + class GrowthPolicy = tsl::rh::power_of_two_growth_policy<2>> +class robin_set { + private: + template + using has_is_transparent = tsl::detail_robin_hash::has_is_transparent; + + class KeySelect { + public: + using key_type = Key; + + const key_type& operator()(const Key& key) const noexcept { return key; } + + key_type& operator()(Key& key) noexcept { return key; } + }; + + using ht = detail_robin_hash::robin_hash; + + public: + using key_type = typename ht::key_type; + using value_type = typename ht::value_type; + using size_type = typename ht::size_type; + using difference_type = typename ht::difference_type; + using hasher = typename ht::hasher; + using key_equal = typename ht::key_equal; + using allocator_type = typename ht::allocator_type; + using reference = typename ht::reference; + using const_reference = typename ht::const_reference; + using pointer = typename ht::pointer; + using const_pointer = typename ht::const_pointer; + using iterator = typename ht::iterator; + using const_iterator = typename ht::const_iterator; + + /* + * Constructors + */ + robin_set() : robin_set(ht::DEFAULT_INIT_BUCKETS_SIZE) {} + + explicit robin_set(size_type bucket_count, const Hash& hash = Hash(), + const KeyEqual& equal = KeyEqual(), + const Allocator& alloc = Allocator()) + : m_ht(bucket_count, hash, equal, alloc) {} + + robin_set(size_type bucket_count, const Allocator& alloc) + : robin_set(bucket_count, Hash(), KeyEqual(), alloc) {} + + robin_set(size_type bucket_count, const Hash& hash, const Allocator& alloc) + : robin_set(bucket_count, hash, KeyEqual(), alloc) {} + + explicit robin_set(const Allocator& alloc) + : robin_set(ht::DEFAULT_INIT_BUCKETS_SIZE, alloc) {} + + template + robin_set(InputIt first, InputIt last, + size_type bucket_count = ht::DEFAULT_INIT_BUCKETS_SIZE, + const Hash& hash = Hash(), const KeyEqual& equal = KeyEqual(), + const Allocator& alloc = Allocator()) + : robin_set(bucket_count, hash, equal, alloc) { + insert(first, last); + } + + template + robin_set(InputIt first, InputIt last, size_type bucket_count, + const Allocator& alloc) + : robin_set(first, last, bucket_count, Hash(), KeyEqual(), alloc) {} + + template + robin_set(InputIt first, InputIt last, size_type bucket_count, + const Hash& hash, const Allocator& alloc) + : robin_set(first, last, bucket_count, hash, KeyEqual(), alloc) {} + + robin_set(std::initializer_list init, + size_type bucket_count = ht::DEFAULT_INIT_BUCKETS_SIZE, + const Hash& hash = Hash(), const KeyEqual& equal = KeyEqual(), + const Allocator& alloc = Allocator()) + : robin_set(init.begin(), init.end(), bucket_count, hash, equal, alloc) {} + + robin_set(std::initializer_list init, size_type bucket_count, + const Allocator& alloc) + : robin_set(init.begin(), init.end(), bucket_count, Hash(), KeyEqual(), + alloc) {} + + robin_set(std::initializer_list init, size_type bucket_count, + const Hash& hash, const Allocator& alloc) + : robin_set(init.begin(), init.end(), bucket_count, hash, KeyEqual(), + alloc) {} + + robin_set& operator=(std::initializer_list ilist) { + m_ht.clear(); + + m_ht.reserve(ilist.size()); + m_ht.insert(ilist.begin(), ilist.end()); + + return *this; + } + + allocator_type get_allocator() const { return m_ht.get_allocator(); } + + /* + * Iterators + */ + iterator begin() noexcept { return m_ht.begin(); } + const_iterator begin() const noexcept { return m_ht.begin(); } + const_iterator cbegin() const noexcept { return m_ht.cbegin(); } + + iterator end() noexcept { return m_ht.end(); } + const_iterator end() const noexcept { return m_ht.end(); } + const_iterator cend() const noexcept { return m_ht.cend(); } + + /* + * Capacity + */ + bool empty() const noexcept { return m_ht.empty(); } + size_type size() const noexcept { return m_ht.size(); } + size_type max_size() const noexcept { return m_ht.max_size(); } + + /* + * Modifiers + */ + void clear() noexcept { m_ht.clear(); } + + std::pair insert(const value_type& value) { + return m_ht.insert(value); + } + + std::pair insert(value_type&& value) { + return m_ht.insert(std::move(value)); + } + + iterator insert(const_iterator hint, const value_type& value) { + return m_ht.insert_hint(hint, value); + } + + iterator insert(const_iterator hint, value_type&& value) { + return m_ht.insert_hint(hint, std::move(value)); + } + + template + void insert(InputIt first, InputIt last) { + m_ht.insert(first, last); + } + + void insert(std::initializer_list ilist) { + m_ht.insert(ilist.begin(), ilist.end()); + } + + /** + * Due to the way elements are stored, emplace will need to move or copy the + * key-value once. The method is equivalent to + * insert(value_type(std::forward(args)...)); + * + * Mainly here for compatibility with the std::unordered_map interface. + */ + template + std::pair emplace(Args&&... args) { + return m_ht.emplace(std::forward(args)...); + } + + /** + * Due to the way elements are stored, emplace_hint will need to move or copy + * the key-value once. The method is equivalent to insert(hint, + * value_type(std::forward(args)...)); + * + * Mainly here for compatibility with the std::unordered_map interface. + */ + template + iterator emplace_hint(const_iterator hint, Args&&... args) { + return m_ht.emplace_hint(hint, std::forward(args)...); + } + + iterator erase(iterator pos) { return m_ht.erase(pos); } + iterator erase(const_iterator pos) { return m_ht.erase(pos); } + iterator erase(const_iterator first, const_iterator last) { + return m_ht.erase(first, last); + } + size_type erase(const key_type& key) { return m_ht.erase(key); } + + /** + * Use the hash value 'precalculated_hash' instead of hashing the key. The + * hash value should be the same as hash_function()(key). Useful to speed-up + * the lookup to the value if you already have the hash. + */ + size_type erase(const key_type& key, std::size_t precalculated_hash) { + return m_ht.erase(key, precalculated_hash); + } + + /** + * This overload only participates in the overload resolution if the typedef + * KeyEqual::is_transparent exists. If so, K must be hashable and comparable + * to Key. + */ + template < + class K, class KE = KeyEqual, + typename std::enable_if::value>::type* = nullptr> + size_type erase(const K& key) { + return m_ht.erase(key); + } + + /** + * @copydoc erase(const K& key) + * + * Use the hash value 'precalculated_hash' instead of hashing the key. The + * hash value should be the same as hash_function()(key). Useful to speed-up + * the lookup to the value if you already have the hash. + */ + template < + class K, class KE = KeyEqual, + typename std::enable_if::value>::type* = nullptr> + size_type erase(const K& key, std::size_t precalculated_hash) { + return m_ht.erase(key, precalculated_hash); + } + + void swap(robin_set& other) { other.m_ht.swap(m_ht); } + + /* + * Lookup + */ + size_type count(const Key& key) const { return m_ht.count(key); } + + /** + * Use the hash value 'precalculated_hash' instead of hashing the key. The + * hash value should be the same as hash_function()(key). Useful to speed-up + * the lookup if you already have the hash. + */ + size_type count(const Key& key, std::size_t precalculated_hash) const { + return m_ht.count(key, precalculated_hash); + } + + /** + * This overload only participates in the overload resolution if the typedef + * KeyEqual::is_transparent exists. If so, K must be hashable and comparable + * to Key. + */ + template < + class K, class KE = KeyEqual, + typename std::enable_if::value>::type* = nullptr> + size_type count(const K& key) const { + return m_ht.count(key); + } + + /** + * @copydoc count(const K& key) const + * + * Use the hash value 'precalculated_hash' instead of hashing the key. The + * hash value should be the same as hash_function()(key). Useful to speed-up + * the lookup if you already have the hash. + */ + template < + class K, class KE = KeyEqual, + typename std::enable_if::value>::type* = nullptr> + size_type count(const K& key, std::size_t precalculated_hash) const { + return m_ht.count(key, precalculated_hash); + } + + iterator find(const Key& key) { return m_ht.find(key); } + + /** + * Use the hash value 'precalculated_hash' instead of hashing the key. The + * hash value should be the same as hash_function()(key). Useful to speed-up + * the lookup if you already have the hash. + */ + iterator find(const Key& key, std::size_t precalculated_hash) { + return m_ht.find(key, precalculated_hash); + } + + const_iterator find(const Key& key) const { return m_ht.find(key); } + + /** + * @copydoc find(const Key& key, std::size_t precalculated_hash) + */ + const_iterator find(const Key& key, std::size_t precalculated_hash) const { + return m_ht.find(key, precalculated_hash); + } + + /** + * This overload only participates in the overload resolution if the typedef + * KeyEqual::is_transparent exists. If so, K must be hashable and comparable + * to Key. + */ + template < + class K, class KE = KeyEqual, + typename std::enable_if::value>::type* = nullptr> + iterator find(const K& key) { + return m_ht.find(key); + } + + /** + * @copydoc find(const K& key) + * + * Use the hash value 'precalculated_hash' instead of hashing the key. The + * hash value should be the same as hash_function()(key). Useful to speed-up + * the lookup if you already have the hash. + */ + template < + class K, class KE = KeyEqual, + typename std::enable_if::value>::type* = nullptr> + iterator find(const K& key, std::size_t precalculated_hash) { + return m_ht.find(key, precalculated_hash); + } + + /** + * @copydoc find(const K& key) + */ + template < + class K, class KE = KeyEqual, + typename std::enable_if::value>::type* = nullptr> + const_iterator find(const K& key) const { + return m_ht.find(key); + } + + /** + * @copydoc find(const K& key) + * + * Use the hash value 'precalculated_hash' instead of hashing the key. The + * hash value should be the same as hash_function()(key). Useful to speed-up + * the lookup if you already have the hash. + */ + template < + class K, class KE = KeyEqual, + typename std::enable_if::value>::type* = nullptr> + const_iterator find(const K& key, std::size_t precalculated_hash) const { + return m_ht.find(key, precalculated_hash); + } + + bool contains(const Key& key) const { return m_ht.contains(key); } + + /** + * Use the hash value 'precalculated_hash' instead of hashing the key. The + * hash value should be the same as hash_function()(key). Useful to speed-up + * the lookup if you already have the hash. + */ + bool contains(const Key& key, std::size_t precalculated_hash) const { + return m_ht.contains(key, precalculated_hash); + } + + /** + * This overload only participates in the overload resolution if the typedef + * KeyEqual::is_transparent exists. If so, K must be hashable and comparable + * to Key. + */ + template < + class K, class KE = KeyEqual, + typename std::enable_if::value>::type* = nullptr> + bool contains(const K& key) const { + return m_ht.contains(key); + } + + /** + * @copydoc contains(const K& key) const + * + * Use the hash value 'precalculated_hash' instead of hashing the key. The + * hash value should be the same as hash_function()(key). Useful to speed-up + * the lookup if you already have the hash. + */ + template < + class K, class KE = KeyEqual, + typename std::enable_if::value>::type* = nullptr> + bool contains(const K& key, std::size_t precalculated_hash) const { + return m_ht.contains(key, precalculated_hash); + } + + std::pair equal_range(const Key& key) { + return m_ht.equal_range(key); + } + + /** + * Use the hash value 'precalculated_hash' instead of hashing the key. The + * hash value should be the same as hash_function()(key). Useful to speed-up + * the lookup if you already have the hash. + */ + std::pair equal_range(const Key& key, + std::size_t precalculated_hash) { + return m_ht.equal_range(key, precalculated_hash); + } + + std::pair equal_range(const Key& key) const { + return m_ht.equal_range(key); + } + + /** + * @copydoc equal_range(const Key& key, std::size_t precalculated_hash) + */ + std::pair equal_range( + const Key& key, std::size_t precalculated_hash) const { + return m_ht.equal_range(key, precalculated_hash); + } + + /** + * This overload only participates in the overload resolution if the typedef + * KeyEqual::is_transparent exists. If so, K must be hashable and comparable + * to Key. + */ + template < + class K, class KE = KeyEqual, + typename std::enable_if::value>::type* = nullptr> + std::pair equal_range(const K& key) { + return m_ht.equal_range(key); + } + + /** + * @copydoc equal_range(const K& key) + * + * Use the hash value 'precalculated_hash' instead of hashing the key. The + * hash value should be the same as hash_function()(key). Useful to speed-up + * the lookup if you already have the hash. + */ + template < + class K, class KE = KeyEqual, + typename std::enable_if::value>::type* = nullptr> + std::pair equal_range(const K& key, + std::size_t precalculated_hash) { + return m_ht.equal_range(key, precalculated_hash); + } + + /** + * @copydoc equal_range(const K& key) + */ + template < + class K, class KE = KeyEqual, + typename std::enable_if::value>::type* = nullptr> + std::pair equal_range(const K& key) const { + return m_ht.equal_range(key); + } + + /** + * @copydoc equal_range(const K& key, std::size_t precalculated_hash) + */ + template < + class K, class KE = KeyEqual, + typename std::enable_if::value>::type* = nullptr> + std::pair equal_range( + const K& key, std::size_t precalculated_hash) const { + return m_ht.equal_range(key, precalculated_hash); + } + + /* + * Bucket interface + */ + size_type bucket_count() const { return m_ht.bucket_count(); } + size_type max_bucket_count() const { return m_ht.max_bucket_count(); } + + /* + * Hash policy + */ + float load_factor() const { return m_ht.load_factor(); } + + float min_load_factor() const { return m_ht.min_load_factor(); } + float max_load_factor() const { return m_ht.max_load_factor(); } + + /** + * Set the `min_load_factor` to `ml`. When the `load_factor` of the set goes + * below `min_load_factor` after some erase operations, the set will be + * shrunk when an insertion occurs. The erase method itself never shrinks + * the set. + * + * The default value of `min_load_factor` is 0.0f, the set never shrinks by + * default. + */ + void min_load_factor(float ml) { m_ht.min_load_factor(ml); } + void max_load_factor(float ml) { m_ht.max_load_factor(ml); } + + void rehash(size_type count_) { m_ht.rehash(count_); } + void reserve(size_type count_) { m_ht.reserve(count_); } + + /* + * Observers + */ + hasher hash_function() const { return m_ht.hash_function(); } + key_equal key_eq() const { return m_ht.key_eq(); } + + /* + * Other + */ + + /** + * Convert a const_iterator to an iterator. + */ + iterator mutable_iterator(const_iterator pos) { + return m_ht.mutable_iterator(pos); + } + + friend bool operator==(const robin_set& lhs, const robin_set& rhs) { + if (lhs.size() != rhs.size()) { + return false; + } + + for (const auto& element_lhs : lhs) { + const auto it_element_rhs = rhs.find(element_lhs); + if (it_element_rhs == rhs.cend()) { + return false; + } + } + + return true; + } + + /** + * Serialize the set through the `serializer` parameter. + * + * The `serializer` parameter must be a function object that supports the + * following call: + * - `template void operator()(const U& value);` where the types + * `std::int16_t`, `std::uint32_t`, `std::uint64_t`, `float` and `Key` must be + * supported for U. + * + * The implementation leaves binary compatibility (endianness, IEEE 754 for + * floats, ...) of the types it serializes in the hands of the `Serializer` + * function object if compatibility is required. + */ + template + void serialize(Serializer& serializer) const { + m_ht.serialize(serializer); + } + + /** + * Deserialize a previously serialized set through the `deserializer` + * parameter. + * + * The `deserializer` parameter must be a function object that supports the + * following call: + * - `template U operator()();` where the types `std::int16_t`, + * `std::uint32_t`, `std::uint64_t`, `float` and `Key` must be supported for + * U. + * + * If the deserialized hash set type is hash compatible with the serialized + * set, the deserialization process can be sped up by setting + * `hash_compatible` to true. To be hash compatible, the Hash, KeyEqual and + * GrowthPolicy must behave the same way than the ones used on the serialized + * set and the StoreHash must have the same value. The `std::size_t` must also + * be of the same size as the one on the platform used to serialize the set. + * If these criteria are not met, the behaviour is undefined with + * `hash_compatible` sets to true. + * + * The behaviour is undefined if the type `Key` of the `robin_set` is not the + * same as the type used during serialization. + * + * The implementation leaves binary compatibility (endianness, IEEE 754 for + * floats, size of int, ...) of the types it deserializes in the hands of the + * `Deserializer` function object if compatibility is required. + */ + template + static robin_set deserialize(Deserializer& deserializer, + bool hash_compatible = false) { + robin_set set(0); + set.m_ht.deserialize(deserializer, hash_compatible); + + return set; + } + + friend bool operator!=(const robin_set& lhs, const robin_set& rhs) { + return !operator==(lhs, rhs); + } + + friend void swap(robin_set& lhs, robin_set& rhs) { lhs.swap(rhs); } + + private: + ht m_ht; +}; + +/** + * Same as `tsl::robin_set`. + */ +template , + class KeyEqual = std::equal_to, + class Allocator = std::allocator, bool StoreHash = false> +using robin_pg_set = robin_set; + +} // end namespace tsl + +#endif diff --git a/self/compiler/native/nerdcore/src/type_header.h b/self/compiler/native/nerdcore/src/type_header.h new file mode 100644 index 000000000..991a1fd6c --- /dev/null +++ b/self/compiler/native/nerdcore/src/type_header.h @@ -0,0 +1,48 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +#ifndef __NERD__OBJECT_VECTOR +#include "tsl/robin_map.h" +#endif +namespace NerdCore +{ + namespace Type + { + typedef std::vector vector_t; + typedef std::vector vector_p; + typedef std::pair pair_t; + #ifndef __NERD__OBJECT_VECTOR + typedef tsl::robin_map object_t; + #else + typedef std::vector object_t; + #endif + typedef std::function function_t; + typedef std::function clean_struct; + + #ifdef __NERD_ENV_ARDUINO + typedef std::string StringView; + #else + typedef std::string_view StringView; + #endif + } +} \ No newline at end of file diff --git a/self/compiler/native/nerdcore/src/values.h b/self/compiler/native/nerdcore/src/values.h new file mode 100644 index 000000000..25e2ceeec --- /dev/null +++ b/self/compiler/native/nerdcore/src/values.h @@ -0,0 +1,37 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +namespace NerdCore::Global +{ + using var = NerdCore::VAR; + NerdCore::VAR null = __NERD_Create_Null(); + NerdCore::VAR undefined = __NERD_Create_Null(); + NerdCore::VAR Infinity = std::numeric_limits::infinity(); + NerdCore::VAR NaN = std::numeric_limits::quiet_NaN(); + NerdCore::VAR String = __NERD_Create_Var_Unscoped_Anon( return null; ); + NerdCore::VAR Object = __NERD_Create_Var_Unscoped_Anon( return null; ); + NerdCore::VAR Function = __NERD_Create_Var_Unscoped_Anon( return null; ); + NerdCore::VAR global = new NerdCore::Class::Object(); + NerdCore::VAR __NERD_THIS = global; +} + diff --git a/self/compiler/native/nerdcore/src/values_header.h b/self/compiler/native/nerdcore/src/values_header.h new file mode 100644 index 000000000..cb332f1ca --- /dev/null +++ b/self/compiler/native/nerdcore/src/values_header.h @@ -0,0 +1,38 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +namespace NerdCore::Global +{ + using var = NerdCore::VAR; + using let = NerdCore::VAR; + extern NerdCore::VAR null; + extern NerdCore::VAR undefined; + extern NerdCore::VAR Infinity; + extern NerdCore::VAR NaN; + + extern NerdCore::VAR global; + extern NerdCore::VAR __NERD_THIS; + //extern NerdCore::VAR String; + extern NerdCore::VAR String; + extern NerdCore::VAR Object; +} diff --git a/self/compiler/native/nerdcore/src/var.h b/self/compiler/native/nerdcore/src/var.h new file mode 100644 index 000000000..340703731 --- /dev/null +++ b/self/compiler/native/nerdcore/src/var.h @@ -0,0 +1,661 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +namespace NerdCore +{ + + VAR::VAR() + { + type = NerdCore::Enum::Type::Null; + data.number = 0; + } + + VAR::~VAR() + { + if(type > NerdCore::Enum::Type::Number) + { + ((NerdCore::Class::Base*)data.ptr)->Delete(); + } + } + + /*** COPY ***/ + VAR::VAR(VAR const &_v) + { + type = _v.type; + if(type < NerdCore::Enum::Type::String) + { + data.number = _v.data.number; + } + else data.ptr = ((NerdCore::Class::Base*)_v.data.ptr)->Copy(); + + } + /* END COPY */ + + /*** MOVE ***/ + VAR::VAR(VAR const &&_v) + { + type = _v.type; + if(type < NerdCore::Enum::Type::String) + { + data.number = _v.data.number; + } + else data.ptr = ((NerdCore::Class::Base*)_v.data.ptr)->Copy(); + } + /* END MOVE */ + + /*** CONSTRUCTOR ***/ + + VAR::VAR(NerdCore::Enum::Type _type, int _value) + { + this->type = _type; + data.number = _value; + } + + VAR::VAR(NerdCore::Enum::Type _type, double _value) + { + this->type = _type; + data.number = _value; + } + + VAR::VAR(int _value) + { + this->type = NerdCore::Enum::Type::Number; + data.number = _value; + } + + VAR::VAR(double _value) + { + this->type = NerdCore::Enum::Type::Number; + data.number = _value; + } + + VAR::VAR(unsigned long _value) + { + this->type = NerdCore::Enum::Type::Number; + data.number = _value; + } + + VAR::VAR(long long _value) + { + this->type = NerdCore::Enum::Type::Number; + data.number = _value; + } + + VAR::VAR(long long unsigned int _value) + { + this->type = NerdCore::Enum::Type::Number; + data.number = _value; + } + + VAR::VAR(char *_value) + { + type = NerdCore::Enum::Type::String; + data.ptr = new NerdCore::Class::String(_value); + } + + VAR::VAR(const std::string _value) + { + type = NerdCore::Enum::Type::String; + data.ptr = new NerdCore::Class::String(_value); + } + + VAR::VAR(const char *_value) + { + type = NerdCore::Enum::Type::String; + data.ptr = new NerdCore::Class::String(_value); + } + + VAR::VAR(std::string_view _value) + { + type = NerdCore::Enum::Type::String; + data.ptr = new NerdCore::Class::String({_value.data(), _value.size()}); + } + + VAR::VAR(NerdCore::Class::FixedArray *_value) + { + type = NerdCore::Enum::Type::FixedArray; + _value->counter++; + data.ptr = _value; + } + + VAR::VAR(NerdCore::Class::Array *_value) + { + type = NerdCore::Enum::Type::Array; + _value->counter++; + data.ptr = _value; + } + + VAR::VAR(std::initializer_list l) + { + type = NerdCore::Enum::Type::Array; + NerdCore::Class::Array* _arr = new NerdCore::Class::Array(l); + _arr->counter++; + data.ptr = _arr; + } + + VAR::VAR(const NerdCore::Class::Array *_value) + { + type = NerdCore::Enum::Type::Array; + data.ptr = (NerdCore::Class::Array *)_value; + ((NerdCore::Class::Array*)data.ptr)->counter++; + } + + VAR::VAR(bool _value) + { + type = NerdCore::Enum::Type::Boolean; + data.number =_value; + } + + VAR::VAR(NerdCore::Class::Function *_value) + { + type = NerdCore::Enum::Type::Function; + _value->counter++; + data.ptr = _value; + } + + VAR::VAR(NerdCore::Class::Object *_value) + { + type = NerdCore::Enum::Type::Object; + _value->counter++; + data.ptr = _value; + } + + VAR::VAR(NerdCore::Class::String *_value) + { + type = NerdCore::Enum::Type::String; + data.ptr = new NerdCore::Class::String(_value->value); + } + + VAR::VAR(NerdCore::Class::Native *_value) + { + type = NerdCore::Enum::Type::Native; + _value->counter++; + data.ptr = _value; + } + + VAR::VAR(void *_value, void* fn) + { + type = NerdCore::Enum::Type::Struct; + data.ptr = new NerdCore::Class::Struct(_value, (NerdCore::Type::clean_struct*)fn); + } + VAR::VAR(NerdCore::Enum::Type _type, void *_value) + { + type = _type; + data.ptr = new NerdCore::Class::Function(_value); + } + + /* END CALL OVERLOAD */ + + VAR & VAR::operator[] (VAR _index) + { + if(type < NerdCore::Enum::Type::String) return NerdCore::Global::null; + return (*(NerdCore::Class::Base*)data.ptr)[_index]; + } + + VAR & VAR::operator[] (VAR _index) const + { + if(type < NerdCore::Enum::Type::String) return NerdCore::Global::null; + return (*(NerdCore::Class::Base*)data.ptr)[_index]; + } + + VAR & VAR::operator[] (int _index) const + { + if(type < NerdCore::Enum::Type::String) return NerdCore::Global::null; + return (*(NerdCore::Class::Base*)data.ptr)[_index]; + } + + VAR & VAR::operator[] (int _index) + { + if(type < NerdCore::Enum::Type::String) return NerdCore::Global::null; + return (*(NerdCore::Class::Base*)data.ptr)[_index]; + } + + VAR & VAR::operator[] (double _index) + { + if(type < NerdCore::Enum::Type::String) return NerdCore::Global::null; + return (*(NerdCore::Class::Base*)data.ptr)[_index]; + } + + VAR & VAR::operator[] (const char* _index) + { + if(type < NerdCore::Enum::Type::String) return NerdCore::Global::null; + return (*(NerdCore::Class::Base*)data.ptr)[_index]; + } + + /* END ACCESS OVERLOAD */ + + /*** END CONSTRUCTOR ***/ + + /*** OPERATOR ***/ + void VAR::operator=(const VAR &_v) + { + if(this == &_v) + { + return; + } + + if(type > NerdCore::Enum::Type::Number) + { + ((NerdCore::Class::Base*)data.ptr)->Delete(); + } + + type = _v.type; + if(type < NerdCore::Enum::Type::String) + { + data.number = (double)_v; + } + else + { + data.ptr = ((NerdCore::Class::Base*)_v.data.ptr)->Copy(); + } + } + + /// Unary VAR::operators + VAR VAR::operator+() + { + if(type < NerdCore::Enum::Type::String) return data.number; + return (double)*this; + } + + VAR VAR::operator-() + { + if(type < NerdCore::Enum::Type::String) return -data.number; + return -(double)*this; + } + VAR VAR::operator!() + { + if(type < NerdCore::Enum::Type::String) return !data.number; + return !(bool)*this; + }; + + /// Logical VAR::operators + VAR VAR::operator&&(const VAR &_v1) const { return (bool)*this && (bool)_v1; } + VAR VAR::operator||(const VAR &_v1) const { return (bool)*this || (bool)_v1; } + + /// Arithmetic VAR::operators + VAR VAR::operator+(const VAR &_v1) + { + if (type < NerdCore::Enum::Type::String) + { + return data.number + _v1; + } + else if (type == NerdCore::Enum::Type::String || type == NerdCore::Enum::Type::Array || type == NerdCore::Enum::Type::Object || _v1.type == NerdCore::Enum::Type::String) + { + if(_v1.type == NerdCore::Enum::Type::Null) return ((std::string)*this) + "null"; + else return __NERD_Concat_To_Str((std::string)*this, (std::string)_v1); + } + else + { + return NerdCore::Global::NaN; + } + + } + VAR VAR::operator+(const char _v1[]) + { + return __NERD_Concat_To_Str((std::string)*this, _v1); + } + + VAR& VAR::operator+=(const VAR &_v1) + { + if(type < NerdCore::Enum::Type::String) + { + data.number += _v1; + } + else if(type == NerdCore::Enum::Type::String) + { + ((NerdCore::Class::String*)data.ptr)->value += (std::string)_v1; + } + else + { + std::string _s = (std::string)*this; + type = NerdCore::Enum::Type::String; + data.ptr = new NerdCore::Class::String(""); + ((NerdCore::Class::String*)data.ptr)->value += _s + (std::string)_v1; + + } + return *this; + } + + VAR VAR::operator-(const VAR &_v1) + { + if (type < NerdCore::Enum::Type::String ) return data.number - _v1; + else return NerdCore::Global::NaN; + } + + VAR& VAR::operator-=(const VAR &_v1) + { + if(type < NerdCore::Enum::Type::String) data.number -= _v1; + else + { + return NerdCore::Global::NaN; + } + return *this; + } + VAR VAR::operator*(const VAR &_v1) + { + if(type < NerdCore::Enum::Type::String) return data.number * _v1; + return NerdCore::Global::NaN; + } + + VAR& VAR::operator*=(const VAR &_v1) + { + if(type < NerdCore::Enum::Type::String) data.number *= _v1; + return *this; + } + VAR VAR::operator/(const VAR &_v1) + { + if (type < NerdCore::Enum::Type::String) return data.number / _v1; + return NerdCore::Global::NaN; + } + + VAR& VAR::operator/=(const VAR &_v1) + { + if(type < NerdCore::Enum::Type::String) data.number /= _v1; + return *this; + } + VAR VAR::operator%(const VAR &_v1) + { + if (type < NerdCore::Enum::Type::String && _v1.type < NerdCore::Enum::Type::String) + { + int _left = (int)_v1; + if(_left == 0) return NerdCore::Global::NaN; + return (int)data.number % _left; + } + else + { + double _left = (double)_v1; + if(_left == 0) return NerdCore::Global::NaN; + return remainder((double)*this, _left); + } + } + VAR& VAR::operator%=(const VAR &_v1) + { + if (type < NerdCore::Enum::Type::String) + { + int _left = (int)data.number; + _left %= (int)_v1; + if(_left == 0) data.number = std::numeric_limits::quiet_NaN(); + data.number = _left; + } + else + { + return NerdCore::Global::NaN; + } + return *this; + } + // TODO: "**" and "**=" VAR::operators + // var++ + /* + inline VAR& VAR::operator++(const int _v1) + { + if (type < NerdCore::Enum::Type::String) + { + data.number++; + } + return *this; + } + + // ++var + VAR& VAR::operator++() + { + if (type < NerdCore::Enum::Type::String) + { + ++data.number; + } + return *this; + } + // var-- + VAR& VAR::operator--(const int _v1) + { + if (type < NerdCore::Enum::Type::String) + { + data.number--; + } + return *this; + } + // --var + VAR& VAR::operator--() + { + if (type < NerdCore::Enum::Type::String) + { + --data.number; + } + return *this; + } + */ + + /// Comparison VAR::operators + VAR VAR::operator==(const VAR &_v1) const + { + if (type == _v1.type) + { + switch (type) + { + case NerdCore::Enum::Type::Number: + return (bool)(data.number == _v1); + case NerdCore::Enum::Type::Boolean: + return __NERD_Create_Boolean((bool)data.number == (bool)_v1); + case NerdCore::Enum::Type::String: + return __NERD_Create_Boolean((((NerdCore::Class::String*)data.ptr)->value).compare((std::string)_v1) == 0); + case NerdCore::Enum::Type::Null: + case NerdCore::Enum::Type::Array: + case NerdCore::Enum::Type::Native: + case NerdCore::Enum::Type::Function: + case NerdCore::Enum::Type::Object: + default: + return _v1.data.ptr == this->data.ptr; + } + } + else + { + if (type == NerdCore::Enum::Type::String || _v1.type == NerdCore::Enum::Type::String) + { + return __NERD_Create_Boolean((std::string) * this == (std::string)_v1); + } + else + return __NERD_Create_Boolean((double)*this == (double)_v1); + } + } + // === emulated with __NERD_EQUAL_VALUE_AND_TYPE + VAR VAR::operator!=(const VAR &_v1) + { + return !(*this == _v1); + } + + // !== emulated with __NERD_NOT_EQUAL_VALUE_AND_TYPE + + VAR VAR::operator<(const VAR &_v1) + { + return data.number < (double)_v1; + } + + VAR VAR::operator<=(const VAR &_v1) + { + return (int)*this <= (int)_v1; + } + VAR VAR::operator>(const VAR &_v1) + { + return (int)*this > (int)_v1; + } + VAR VAR::operator>=(const VAR &_v1) + { + return (int)*this >= (int)_v1; + } + + /// Bitwise VAR::operators + VAR VAR::operator&(const VAR &_v1) { return (int)*this & (int)_v1; } + VAR& VAR::operator&=(const VAR &_v1) + { + type = NerdCore::Enum::Type::Number; + data.number = (int)*this & (int)_v1; + return *this; + } + + VAR VAR::operator|(const VAR &_v1) + { + return (int)*this | (int)_v1; + } + VAR VAR::operator|=(const VAR &_v1) + { + if (type < NerdCore::Enum::Type::String) + { + data.number = (int)data.number | (int)_v1; + } + else + { + return NerdCore::Global::NaN; + } + return *this; + } + VAR VAR::operator^(const VAR &_v1) { return (int)*this ^ (int)_v1; } + VAR VAR::operator^=(const VAR &_v1) + { + if (type < NerdCore::Enum::Type::String) + { + data.number = (int)data.number ^ (int)_v1; + } + else + { + return NerdCore::Global::NaN; + } + return *this; + } + VAR VAR::operator~() { return ~(int)*this; } + VAR VAR::operator>>(const VAR &_v1) { return (int)*this >> (int)_v1; } + VAR VAR::operator>>=(const VAR &_v1) + { + if (type < NerdCore::Enum::Type::String) + { + data.number = (int)data.number >> (int)_v1; + } + else + { + return NerdCore::Global::NaN; + } + return *this; + } + VAR VAR::operator<<(const VAR &_v1) + { + return (int)*this << (int)_v1; + } + VAR VAR::operator<<=(const VAR &_v1) + { + if (type < NerdCore::Enum::Type::String) + { + data.number = (int)data.number << (int)_v1; + } + else + { + return NerdCore::Global::NaN; + } + return *this; + } + + VAR::operator int() const + { + if(type < NerdCore::Enum::Type::String) return data.number; + return (int)(*(NerdCore::Class::Base*)data.ptr); + } + + VAR::operator int() + { + if(type < NerdCore::Enum::Type::String) return data.number; + return (int)(*(NerdCore::Class::Base*)data.ptr); + } + + VAR::operator double() const + { + if(type < NerdCore::Enum::Type::String) return data.number; + return (double)(*(NerdCore::Class::Base*)data.ptr); + } + + VAR::operator double() + { + if(type < NerdCore::Enum::Type::String) return data.number; + return (double)(*(NerdCore::Class::Base*)data.ptr); + } + + VAR::operator bool() const + { + if(type == NerdCore::Enum::Type::Null) return false; + else if(type == NerdCore::Enum::Type::Boolean || type == NerdCore::Enum::Type::Number) return data.number; + else return (bool)(*(NerdCore::Class::Base*)data.ptr); + } + + VAR::operator bool() + { + if(type == NerdCore::Enum::Type::Null) return false; + else if(type == NerdCore::Enum::Type::Boolean || type == NerdCore::Enum::Type::Number) return data.number; + else return (bool)(*(NerdCore::Class::Base*)data.ptr); + } + + VAR::operator const char*() const + { + if(type == NerdCore::Enum::Type::String) + { + return ((NerdCore::Class::String*)this->data.ptr)->value.c_str(); + } + else + { + throw(NerdCore::VAR("Char* conversion error: variable is not a string")); + } + } + + VAR::operator std::string() const + { + if(type < NerdCore::Enum::Type::String) return __NERD_DOUBLE_TO_STRING(data.number); + return (std::string)(*(NerdCore::Class::Base*)data.ptr); + } + + VAR::operator std::string() + { + if(type < NerdCore::Enum::Type::String) return __NERD_DOUBLE_TO_STRING(data.number); + return (std::string)(*(NerdCore::Class::Base*)data.ptr); + } + + VAR::operator long long() + { + if(type < NerdCore::Enum::Type::String) return data.number; + return (long long)((double)*this); + } + + VAR::operator long long() const + { + if(type < NerdCore::Enum::Type::String) return data.number; + return (long long)((double)*this); + } + + VAR::operator std::string_view() const + { + if(type == NerdCore::Enum::Type::String) + { + return std::string_view(((NerdCore::Class::String*)this->data.ptr)->value.c_str()); + } + else + { + throw(NerdCore::VAR("string_view conversion error: variable is not a string")); + } + } + + +} // namespace NerdCore \ No newline at end of file diff --git a/self/compiler/native/nerdcore/src/var_header.h b/self/compiler/native/nerdcore/src/var_header.h new file mode 100644 index 000000000..1862d766a --- /dev/null +++ b/self/compiler/native/nerdcore/src/var_header.h @@ -0,0 +1,259 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +namespace NerdCore +{ + + union Data + { + void* ptr; + double number; + }; + + struct VAR + { + NerdCore::Enum::Type type; + Data data; + + VAR(); + ~VAR(); + + /**/ + VAR(VAR const &_v); + VAR(VAR const &&_v); + /**/ + + /*** CONSTRUCTOR ***/ + + VAR(NerdCore::Enum::Type _type, int _value); + VAR(NerdCore::Enum::Type _type, double _value); + VAR(int _value); + VAR(double _value); + VAR(long long _value); + VAR(unsigned long _value); + VAR(long long unsigned int _value); + VAR(char *_value); + VAR(std::string _value); + VAR(const char *_value); + VAR(std::string_view _value); + VAR(NerdCore::Class::FixedArray *_value); + VAR(NerdCore::Class::Array *_value); + VAR(std::initializer_list l); + VAR(const NerdCore::Class::Array *_value); + VAR(bool _value); + VAR(NerdCore::Class::Function *_value); + VAR(NerdCore::Class::Object *_value); + VAR(NerdCore::Class::String *_value); + VAR(NerdCore::Class::Native *_value); + VAR(NerdCore::Class::Undefined *_value); + VAR(void *_value, void* fn); + VAR(NerdCore::Enum::Type _type, void *_value); + VAR(NerdCore::Enum::Type _type, void *_value, VAR _this); + VAR(std::function &_value); + + /* + template + VAR(NerdCore::Class::NativeTPL* _value) + { + this->type = NerdCore::Enum::Type::NativeTPL; + data.ptr = _value; + }; + + template + T toNative (T _type) + { + if(type == NerdCore::Enum::Type::NativeTPL) + { + return (*(NerdCore::Class::NativeTPL*)data.ptr)(_type); + } + else + { + #ifndef __NERD_NO_EXCEPT + throw VAR("TypeError: Object is not a Native object"); + #endif + exit(1); + } + } + + template + T toNative () + { + if(type == NerdCore::Enum::Type::NativeTPL) + { + return (*(NerdCore::Class::NativeTPL*)data.ptr)(); + } + else + { + #ifndef __NERD_NO_EXCEPT + throw VAR("TypeError: Object is not a Native object"); + #endif + exit(1); + } + } + + template + T Ptr () + { + if(type == NerdCore::Enum::Type::NativeTPL) + { + return (NerdCore::Class::NativeTPL*)data.ptr; + } + else + { + #ifndef __NERD_NO_EXCEPT + throw VAR("TypeError: Object is not a Native object"); + #endif + exit(1); + } + } + */ + + template + VAR operator() (NerdCore::VAR __NERD_THIS, Args... args) const + { + if (type != NerdCore::Enum::Type::Function) + { + #ifndef __NERD_NO_EXCEPT + throw VAR("TypeError: object is not a function"); + #endif + exit(1); + } + else return (*(NerdCore::Class::Function*)data.ptr)(__NERD_THIS, (VAR)(args)...); + } + + /* END CALL OVERLOAD */ + + VAR & operator[] (VAR _index); + VAR & operator[] (VAR _index) const; + VAR & operator[] (int _index) const; + VAR & operator[] (int _index); + VAR & operator[] (double _index); + VAR & operator[] (const char* _index); + /* END ACCESS OVERLOAD */ + + /*** END CONSTRUCTOR ***/ + + /*** OPERATOR ***/ + void operator=(const VAR &_v); + + /// Unary operators + VAR operator+(); + VAR operator-(); + VAR operator!(); + + /// Logical operators + VAR operator&&(const VAR &_v1) const; + VAR operator||(const VAR &_v1) const; + + /// Arithmetic operators + VAR operator+(const VAR &_v1); + VAR operator+(const char _v1[]); + VAR& operator+=(const VAR &_v1); + VAR operator-(const VAR &_v1); + VAR& operator-=(const VAR &_v1); + VAR operator*(const VAR &_v1); + VAR& operator*=(const VAR &_v1); + VAR operator/(const VAR &_v1); + VAR& operator/=(const VAR &_v1); + VAR operator%(const VAR &_v1); + VAR& operator%=(const VAR &_v1); + // TODO: "**" and "**=" operators + + // var++ + inline VAR& operator++(const int _v1) noexcept + { + if (type < NerdCore::Enum::Type::String) + { + data.number++; + } + return *this; + } + // ++var + inline VAR& operator++() + { + if (type < NerdCore::Enum::Type::String) + { + ++data.number; + } + return *this; + } + // var-- + inline VAR& operator--(const int _v1) + { + if (type < NerdCore::Enum::Type::String) + { + data.number--; + } + return *this; + } + // --var + inline VAR& operator--() + { + if (type < NerdCore::Enum::Type::String) + { + --data.number; + } + return *this; + } + /// Comparison operators + VAR operator==(const VAR &_v1) const; + // === emulated with __NERD_EQUAL_VALUE_AND_TYPE + VAR operator!=(const VAR &_v1); + // !== emulated with __NERD_NOT_EQUAL_VALUE_AND_TYPE + VAR operator<(long long int &_v1); + VAR operator<(int &_v1); + VAR operator<(double &_v1); + VAR operator<(const VAR &_v1); + + VAR operator<=(const VAR &_v1); + VAR operator>(const VAR &_v1); + VAR operator>=(const VAR &_v1); + /// Bitwise operators + VAR operator&(const VAR &_v1); + VAR& operator&=(const VAR &_v1); + VAR operator|(const VAR &_v1); + VAR operator|=(const VAR &_v1); + VAR operator^(const VAR &_v1); + VAR operator^=(const VAR &_v1); + VAR operator~(); + VAR operator>>(const VAR &_v1); + VAR operator>>=(const VAR &_v1); + VAR operator<<(const VAR &_v1); + VAR operator<<=(const VAR &_v1); + + explicit operator int() const; + operator int(); + explicit operator double() const; + operator double(); + explicit operator bool() const; + operator bool(); + explicit operator std::string() const; + operator std::string(); + operator const char*() const; + operator long long(); + explicit operator long long() const; + operator std::string_view() const; + + }; + +} // namespace NerdCore \ No newline at end of file diff --git a/self/compiler/native/nerdcore/test/array.cpp b/self/compiler/native/nerdcore/test/array.cpp new file mode 100644 index 000000000..3ba9505b2 --- /dev/null +++ b/self/compiler/native/nerdcore/test/array.cpp @@ -0,0 +1,19 @@ +#include "../src/nerd.hpp" +using namespace NerdCore; +using namespace NerdCore::Global; +using namespace NerdCore::Class; +using namespace NerdCore::Functions; + +int main(int argc, char** argv) +{ + var arr = new Array(); + println(arr); + + var initArr = new Array(0, "one", 2, "three"); + println(initArr); + + var initArr2 = {"zero", 1, "two", 3}; + println(initArr2); + + return 0; +} diff --git a/self/compiler/native/nerdcore/test/cast.cpp b/self/compiler/native/nerdcore/test/cast.cpp new file mode 100644 index 000000000..b7ecd310f --- /dev/null +++ b/self/compiler/native/nerdcore/test/cast.cpp @@ -0,0 +1,36 @@ +#include "../src/nerd.hpp" + +using namespace NerdCore; +using namespace NerdCore::Global; +using namespace NerdCore::Class; +using namespace NerdCore::Functions; + +int main() +{ + try + { + var _str = "string"; + std::cout << "_str: " << _str << std::endl; + var _nbr = 123; + std::cout << "_nbr: " << _nbr << std::endl; + const char* c = _str; + std::cout << "char: " << c << std::endl; + std::string s = _str; + std::cout << "string: " << s << std::endl; + std::string_view sv = _str; + std::cout << "string_view: " << sv << std::endl; + int i = _nbr; + std::cout << "int: " << i << std::endl; + double d = _nbr; + std::cout << "double: " << d << std::endl; + long long ll = _nbr; + std::cout << "long long: " << ll << std::endl; + bool b = _nbr; + std::cout << "bool: " << b << std::endl; + } + catch(var& error) + { + println(error); + } + return 0; +} \ No newline at end of file diff --git a/self/compiler/native/nerdcore/test/native.cpp b/self/compiler/native/nerdcore/test/native.cpp new file mode 100644 index 000000000..3ecbe466b --- /dev/null +++ b/self/compiler/native/nerdcore/test/native.cpp @@ -0,0 +1,37 @@ +#include "../src/nerd.hpp" +using namespace NerdCore; +using namespace NerdCore::Global; +using namespace NerdCore::Class; +using namespace NerdCore::Functions; + +struct s +{ + int i = 10; + int j; +}; + +s* typeStruct = new s(); + +int main(int argc, char** argv) +{ + try + { + #if __cplusplus > 202002L + auto __fn = []() {std::cout << "Hello" << std::endl;}; + + var _struct = new NativeTPL(new s({3,4})); + std::cout << _struct.toNative(typeStruct)->i << std::endl; + + var _fn = new NativeTPL(__fn); + _fn.toNative(__fn)(); + #else + var _struct = new NativeTPL(new s({3,4})); + std::cout << _struct.toNative(typeStruct)->i << std::endl; + #endif + } + catch(var e) + { + println(e); + } + return 0; +} diff --git a/self/compiler/native/nerdcore/test/object.cpp b/self/compiler/native/nerdcore/test/object.cpp new file mode 100644 index 000000000..5a72c70fa --- /dev/null +++ b/self/compiler/native/nerdcore/test/object.cpp @@ -0,0 +1,29 @@ +#include "../src/nerd.hpp" +using namespace NerdCore; +using namespace NerdCore::Global; +using namespace NerdCore::Class; +using namespace NerdCore::Functions; + +int main(int argc, char** argv) +{ + var args = getArguments(argc, argv); + println(args); + + var o = new Object(); + o["int"] = 1; + o["string"] = "str"; + println(o); + + var init = new Object( + { + {"one", 1}, // number + {"two", "2"}, // string + {"three", {1,2,3}}, // array + {"four", new Object("key", "value")}, // sub object with only one key + {"five", new Object({"key", 1})}, // another way with non string value + {"six", new Object({ {"key", 2} })}, // another way with non string value + }); + println(init); + + return 0; +} diff --git a/self/compiler/native/nerdcore/test/operators.cpp b/self/compiler/native/nerdcore/test/operators.cpp new file mode 100644 index 000000000..1f3e61c5e --- /dev/null +++ b/self/compiler/native/nerdcore/test/operators.cpp @@ -0,0 +1,83 @@ +#include "../src/nerd.hpp" + +using namespace NerdCore; +using namespace NerdCore::Global; +using namespace NerdCore::Class; +using namespace NerdCore::Functions; + +int main() +{ + try + { + var a = 1; + + println(a + a); + println(a + 1); + println(a + "1"); + + println(1 + a); + println("1" + a); + + println(a - a); + println(a - 1); + println(a - "1"); + + println(1 - a); + println("1" - a); + + println(a * a); + println(a * 1); + println(a * "1"); + + println(1 * a); + println("1" * a); + + println(a / a); + println(a / 1); + println(a / "1"); + + println(1 / a); + println("1" / a); + + println(a == a); + println(a == 1); + println(a == "1"); + + println(a != a); + println(a != 1); + println(a != "1"); + + println(a > a); + println(a > 1); + println(a > "1"); + + println(a < a); + println(a < 1); + println(a < "1"); + + println(a >= a); + println(a >= 1); + println(a >= "1"); + + println(a <= a); + println(a <= 1); + println(a <= "1"); + + println(a | a); + println(a | 1); + println(a | "1"); + + println(a & a); + println(a & 1); + println(a & "1"); + + println(a ^ a); + println(a ^ 1); + println(a ^ "1"); + } + catch(var& error) + { + println(error); + } + return 0; +} \ No newline at end of file diff --git a/self/compiler/native/squel/arduino.cpp b/self/compiler/native/squel/arduino.cpp new file mode 100644 index 000000000..ccf50738a --- /dev/null +++ b/self/compiler/native/squel/arduino.cpp @@ -0,0 +1,69 @@ + #define _USE_MATH_DEFINES + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + + #include + #include + + #include + + #define __NERD_ENV_ARDUINO + #define __NERD_NO_EXCEPT + + #include "nerdcore/src/nerd.cpp" + + using namespace NerdCore::Global; + using namespace NerdCore::Functions; + #define __NERD_Create_Object() new NerdCore::Class::Object() + #define __NERD_Create_Array(_arr) new NerdCore::Class::Array(_arr) + #define __NERD_InitVar() NerdCore::VAR() + + var __NERD_ENV = "arduino"; + var __NERD_PLATFORM = "{{__PLATFORM__}}"; + + + + + // Declared weak in Arduino.h to allow user redefinitions. +int atexit(void (* /*func*/ )()) { return 0; } +// Weak empty variant initialization function. +// May be redefined by variant files. +void initVariant() __attribute__((weak)); +void initVariant() { } + +void setupUSB() __attribute__((weak)); +void setupUSB() { } + + + {INCLUDE} + +int main(int argc, char* argv[]) +{ + + {DECL} + + init(); + initVariant(); + + #if defined(USBCON) + USBDevice.attach(); + #endif + + {INIT} + + { + {CODE} + } + + return 0; +} diff --git a/self/compiler/native/squel/js.cpp b/self/compiler/native/squel/js.cpp new file mode 100644 index 000000000..002b786ae --- /dev/null +++ b/self/compiler/native/squel/js.cpp @@ -0,0 +1,122 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + + #include + #include + #include + #include + #include + #include + #include + #include + #include + + + #include "nerdcore/src/nerd.hpp" + using namespace NerdCore::Global; + + var __NJS_ENV = "std"; + var __NJS_PLATFORM = "{{__PLATFORM__}}"; + NerdCore::Global::var __NERD_ARGS = new NerdCore::Class::Array(); + NerdCore::Global::var _ = new NerdCore::Class::Object(); + NerdCore::Global::var __dirname; + {INCLUDE} + + + std::string ToFixed(double number, size_t digits) + { + char format[10]; + char str[64]; + sprintf_s(format, "%%0.%zdf", digits); + return std::string(str, sprintf_s(str, format, number)); + } + + +int main(int __NERD_VARLENGTH, char* __Nerd_Argv[]) +{ + //NerdCore::VAR Object = __NERD_Create_Var_Scoped_Copy_Anon( return __NERD_THIS; ); + //NerdCore::VAR String = __NERD_Create_Var_Scoped_Copy_Anon( return __NERD_THIS; ); + {DECL} + + Object["prototype"] = new NerdCore::Class::Object(); + Object["prototype"]["valueOf"] = __NERD_Create_Var_Scoped_Copy_Anon({ + return __NERD_THIS; + }); + + Object["prototype"]["toString"] = __NERD_Create_Var_Scoped_Copy_Anon({ + return __NERD_THIS; + }); + + String["prototype"] = new NerdCore::Class::Object(); + String["prototype"]["__proto__"] = Object["prototype"]; + String["prototype"]["valueOf"] = __NERD_Create_Var_Scoped_Copy_Anon({ + return ((char*)__NERD_PTR); + }); + String["prototype"]["toString"] = __NERD_Create_Var_Scoped_Copy_Anon({ + return ((char*)__NERD_PTR); + }); + + + std::string argv_str(__Nerd_Argv[0]); + + #ifdef _WIN32 + std::string __NERD_DIRNAME = argv_str.substr(0, argv_str.find_last_of("\\")); + #elif _WIN64 + std::string __NERD_DIRNAME = argv_str.substr(0, argv_str.find_last_of("\\")); + #else + std::string __NERD_DIRNAME = argv_str.substr(0, argv_str.find_last_of("/")); + #endif + if(__NERD_DIRNAME.size() == argv_str.size()) + { + __dirname = ""; + } + else + { + __dirname = __NERD_DIRNAME; + } + NerdCore::VAR __NERD_VARARGS[__NERD_VARLENGTH]; + for( int i = 0; i < __NERD_VARLENGTH; i++) + { + __NERD_ARGS[i] = __Nerd_Argv[i]; + __NERD_VARARGS[i] = __Nerd_Argv[i]; + } + + try + { + {INIT} + + #ifdef __NERD_INIT_RAND_SEED + srand (time(NULL)); + #endif + + { + {CODE} + } + } + catch(NerdCore::VAR __NERD_Global_Exception) + { + __NERD_Log_Console(__NERD_Global_Exception); + exit(1); + } + return 0; +} diff --git a/self/compiler/native/squel/std.cpp b/self/compiler/native/squel/std.cpp new file mode 100644 index 000000000..e942ba626 --- /dev/null +++ b/self/compiler/native/squel/std.cpp @@ -0,0 +1,112 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + + #include + #include + #include + #include + #include + #include + #include + #include + #include + + + #include "nerdcore/src/nerd.hpp" + using namespace NerdCore::Global; + + var __NJS_ENV = "std"; + var __NJS_PLATFORM = "{{__PLATFORM__}}"; + NerdCore::Global::var __NERD_ARGS = new NerdCore::Class::Array(); + NerdCore::Global::var _ = new NerdCore::Class::Object(); + NerdCore::Global::var __dirname; + {INCLUDE} + + + +int main(int __NERD_VARLENGTH, char* __Nerd_Argv[]) +{ + + {DECL} + + Object["prototype"] = new NerdCore::Class::Object(); + Object["prototype"]["valueOf"] = __NERD_Create_Var_Scoped_Copy_Anon({ + return __NERD_THIS; + }); + + Object["prototype"]["toString"] = __NERD_Create_Var_Scoped_Copy_Anon({ + return __NERD_THIS; + }); + + String["prototype"] = new NerdCore::Class::Object(); + String["prototype"]["__proto__"] = Object["prototype"]; + String["prototype"]["valueOf"] = __NERD_Create_Var_Scoped_Copy_Anon({ + return ((char*)__NERD_OBJECT(__NERD_THIS)->bind); + }); + String["prototype"]["toString"] = __NERD_Create_Var_Scoped_Copy_Anon({ + return ((char*)__NERD_OBJECT(__NERD_THIS)->bind); + }); + + std::string argv_str(__Nerd_Argv[0]); + + #ifdef _WIN32 + std::string __NERD_DIRNAME = argv_str.substr(0, argv_str.find_last_of("\\")); + #elif _WIN64 + __NERD_DIRNAME = argv_str.substr(0, argv_str.find_last_of("\\")); + #else + __NERD_DIRNAME = argv_str.substr(0, argv_str.find_last_of("/")); + #endif + if(__NERD_DIRNAME.size() == argv_str.size()) + { + __dirname = ""; + } + else + { + __dirname = __NERD_DIRNAME; + } + NerdCore::VAR __NERD_VARARGS[__NERD_VARLENGTH]; + for( int i = 0; i < __NERD_VARLENGTH; i++) + { + __NERD_ARGS[i] = __Nerd_Argv[i]; + __NERD_VARARGS[i] = __Nerd_Argv[i]; + } + + try + { + {INIT} + + #ifdef __NERD_INIT_RAND_SEED + srand (time(NULL)); + #endif + + { + {CODE} + } + } + catch(NerdCore::VAR __NERD_Global_Exception) + { + __NERD_Log_Console(__NERD_Global_Exception); + exit(1); + } + return 0; +} diff --git a/self/compiler/native/squel/wasm.cpp b/self/compiler/native/squel/wasm.cpp new file mode 100644 index 000000000..111edbb93 --- /dev/null +++ b/self/compiler/native/squel/wasm.cpp @@ -0,0 +1,44 @@ + #define __NERD_ENV_WASM + #include "nerdcore/src/nerd.hpp" + + using namespace NerdCore::Global; + using namespace NerdCore::Functions; + + var __NERD_ENV = "wasm"; + var __NERD_PLATFORM = "{{__PLATFORM__}}"; + NerdCore::Global::var __NERD_ARGS = new NerdCore::Class::Array(); + + {INCLUDE} + +int main(int __NERD_VARLENGTH, char* __Nerd_Argv[]) +{ + {DECL} + + NerdCore::VAR __NERD_VARARGS[__NERD_VARLENGTH]; + for( int i = 0; i < __NERD_VARLENGTH; i++) + { + __NERD_ARGS[i] = __Nerd_Argv[i]; + __NERD_VARARGS[i] = __Nerd_Argv[i]; + } + + try + { + + {INIT} + + #ifdef __NERD_INIT_RAND_SEED + srand (time(NULL)); + #endif + + { + {CODE} + } + + } + catch(NerdCore::VAR __NERD_Global_Exception) + { + __NERD_Log_Console(__NERD_Global_Exception); + exit(1); + } + return 0; +} diff --git a/self/compiler/self/base/cli/cliParser.ng b/self/compiler/self/base/cli/cliParser.ng new file mode 100644 index 000000000..5c79ed3ec --- /dev/null +++ b/self/compiler/self/base/cli/cliParser.ng @@ -0,0 +1,61 @@ +var parseCLI = function(args) +{ + var result = + { + error: false, + msg: "", + cli: {}, + stack: [], + useless: [] + }; + var useless = [0, 1]; + var withArgs = ["--target", "--spec", "--env", "--stack", "-o", "--preset", "--flash", "--compiler", "-c", "--build", "-b", "--option", "--register", "-r", "--setauthor", "--setid", "--setkey", "--setapi", "--setport", "--sethash", "--setsdk", "--setndk", "--setwin_inc_ucrt", "--setwin_lib_ucrt", "--setwin_lib_um", "--setxcode"]; + var noArgs = ["--install_external", "--debug", "--conserve", "--generate", "--config", "--reinit", "--example", "--examples" , "--prepare", "--project", "--run", "--clean", "--purge", "--check", "--no-check", "--verbose", "-v", "--tips", "--version", "--help", "-h", "--release", "--no-object-hashmap"]; + + + for(var i = 0; i < args.length; i++) + { + if( useless.indexOf(i) > -1 ) + { + result.useless.push(args[i]); + } + else if( withArgs.indexOf(args[i]) > -1) + { + if(args[i+1]) + { + result.cli[args[i]] = + { + state: true, + argument: args[i+1], + }; + i++; + } + else + { + result.error = true; + result.msg = "[!] Missing argument for " + args[i]; + break; + } + } + else if(noArgs.indexOf(args[i]) > -1) + { + result.cli[args[i]] = + { + state: true, + }; + } + else if(args[i].length > 0 && args[i][0] == "-") + { + if(withArgs.indexOf(args[i]) < 0 && noArgs.indexOf(args[i]) < 0) + { + result.error = true; + result.msg = "[!] Unknown parameter : " + args[i]; + break; + } + } + else result.stack.push(args[i]); + } + return result; +}; + +return parseCLI; \ No newline at end of file diff --git a/self/compiler/self/base/compiler/target.js b/self/compiler/self/base/compiler/target.js new file mode 100644 index 000000000..cd6bb5a29 --- /dev/null +++ b/self/compiler/self/base/compiler/target.js @@ -0,0 +1,30 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +var target = ["win-x86-32", "win-x86-64", "linux-x86-32", "linux-x86-64", "linux-arm32v7", + "arduino-uno", "arduino-mega1280", "arduino-mega2560", + "wasm", "wast", "asm-js", + "mac-osx", + "nucleo-l152re", "nucleo-l432kc" + ]; +module.exports = target; diff --git a/self/compiler/self/base/util/copyDirSync.js b/self/compiler/self/base/util/copyDirSync.js new file mode 100644 index 000000000..4c4a8cd91 --- /dev/null +++ b/self/compiler/self/base/util/copyDirSync.js @@ -0,0 +1,64 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +function copyDirSync( source, target ) +{ + var targetFile = target; + if ( fs.existsSync( target ) ) + { + if ( fs.lstatSync( target ).isDirectory() ) + { + targetFile = path.join( target, path.basename( source ) ); + } + } + fs.copyFileSync(source, targetFile); +} + +function copyFolderRecursiveSync( source, target, _root ) +{ + var files = []; + var targetFolder = path.join( target, path.basename( source ) ); + if(_root) targetFolder = target; + if ( !fs.existsSync( targetFolder ) ) + { + fs.mkdirSync( targetFolder ); + } + + if ( fs.lstatSync( source ).isDirectory() ) + { + files = fs.readdirSync( source ); + files.forEach( function ( file ) + { + var curSource = path.join( source, file ); + if ( fs.lstatSync( curSource ).isDirectory() ) + { + copyFolderRecursiveSync( curSource, targetFolder ); + } else + { + copyDirSync( curSource, targetFolder ); + } + } ); + } +} + +module.exports = copyFolderRecursiveSync; \ No newline at end of file diff --git a/self/compiler/self/base/util/copyRecursive.js b/self/compiler/self/base/util/copyRecursive.js new file mode 100644 index 000000000..fd2a7e54e --- /dev/null +++ b/self/compiler/self/base/util/copyRecursive.js @@ -0,0 +1,43 @@ +var copyRecursiveSync = function(src, dest) +{ + if(!fs.existsSync(src)) + { + console.log("[!] Warning: " + src + " doesn't exist"); + return; + } + if(fs.lstatSync( src ).isDirectory()) + { + var _newDest = path.dirname(dest); + copyDirSync(src, _newDest, true); + } + else + { + var _path = []; + + var _newDest = path.dirname(dest); + + _path.push(_newDest); + + while(path.dirname(_newDest) != _newDest) + { + _newDest = path.dirname(_newDest); + if(_newDest.indexOf(NERD_PATH) == 0) + { + _path.push(_newDest); + } + } + + for(var i = _path.length; i > -1; i--) + { + try + { + fs.mkdirSync(_path[i]); + } + catch(e){} + } + + fs.copyFileSync(src, dest); + } +}; + +module.exports = copyRecursiveSync; diff --git a/self/compiler/self/base/util/flash.js b/self/compiler/self/base/util/flash.js new file mode 100644 index 000000000..d1cc36402 --- /dev/null +++ b/self/compiler/self/base/util/flash.js @@ -0,0 +1,90 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +module.exports = Flash; +var fs = require("fs"); +var path = require("path"); + +function Flash(from, to, target, verb) +{ + switch(target) + { + case "uno": + execFlashArduino(from, to, "ATMEGA328P", "arduino", "19200", verb) + break; + case "mega1280": + execFlashArduino(from, to, "m1280", "arduino", "57600", verb) + break; + case "mega2560": + execFlashArduino(from, to, "m2560", "wiring", "115200", verb) + break; + case "nucleo-l152re": + case "nucleo-l432kc": + execFlashSTM32(from, to); + break; + default: + console.log("Nothing to do for target : " + target); + break; + } +} + +function execFlashArduino(from, to, model, driver, bauds, verb) +{ + var spawn = require('child_process').spawn; + var _flash = spawn('avrdude', ['-p', model, "-c", driver, "-P", to, "-b", bauds, "-F", "-U", "flash:w:"+from]); + + _flash.stdout.on('data', function(data) + { + if(verb) process.stdout.write(data.toString()); + }); + + _flash.stderr.on('data', function(data) + { + if(verb) process.stdout.write(data.toString()); + }); + + _flash.on('error', function(err) + { + console.log("[!] Error :"); + console.log(err) + }); + + _flash.on('close', function(code) + { + console.log("[+] Flashed") + }); +} + +function execFlashSTM32(from, to) +{ + try + { + fs.writeFileSync(path.join(to, from), fs.readFileSync(from)); + console.log("[+ Flashed]"); + } + catch(e) + { + console.log("[!] Your file is compiled, but an error occured while flashing, please try again.") + } + +} diff --git a/self/compiler/self/base/util/getExt.js b/self/compiler/self/base/util/getExt.js new file mode 100644 index 000000000..5b29b8577 --- /dev/null +++ b/self/compiler/self/base/util/getExt.js @@ -0,0 +1,64 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +module.exports = getExt; + +function getExt(target) +{ + switch(target) + { + case "wasm": + return ".wasm"; + break; + case "asm-js": + return ".asm.js"; + break; + case "wast": + return ".wast"; + break; + case "win-x86-32": + case "win-x86-64": + return "-" + target + ".exe"; + break; + case "nucleo-l432kc": + case "nucleo-l152re": + case "mac-osx": + case "linux-x86-32": + case "linux-x86-64": + case "linux-arm32v7": + return "-" + target + ".bin"; + break; + case "arduino-uno": + return "-" + target + ".hex"; + break; + case "arduino-mega1280": + return "-" + target + ".hex"; + break; + case "arduino-mega2560": + return "-" + target + ".hex"; + break; + default: + return ".bin"; + break; + } +} diff --git a/self/compiler/self/base/util/getTips.js b/self/compiler/self/base/util/getTips.js new file mode 100644 index 000000000..4c3f727ef --- /dev/null +++ b/self/compiler/self/base/util/getTips.js @@ -0,0 +1,64 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +module.exports = getTips; + +function getTips(target, file) +{ + switch(target) + { + case "wasm": + return ""; + break; + case "asm-js": + return "[*] Tips : run this file with node : 'node " + file + "', or embed it in a .html page with " + break; + case "wast": + return ""; + break; + case "win-x86-32": + case "win-x86-64": + return "[*] Tips : on Linux, you can run this .exe with Wine : 'wine " + file + "'" + break; + case "linux-x86-32": + case "linux-x86-64": + case "linux-arm32v7": + return "[*] Tips : on Linux, don't forget to : 'chmod +x " + file + "'." + break; + case "arduino-uno": + return "[*] Tips : avrdude -p ATMEGA328P -c arduino -P [COMPORT] -b 19200 -F -U flash:w:" + file; + break; + case "arduino-mega1280": + return "[*] Tips : avrdude -p m1280 -c arduino -P [COMPORT] -b 57600 -F -U flash:w:" + file; + break; + case "arduino-mega2560": + return "[*] Tips : avrdude -p m2560 -c wiring -P [COMPORT] -b 115200 -F -U flash:w:" + file; + break; + case "nucleo-l152re": + case "nucleo-l432kc": + return "[*] Connect your nucleo on your computer, and symple copy/paste " + file + " on the nucleo drive" + default: + return ""; + break; + } +} diff --git a/self/compiler/self/base/util/httpUtils.js b/self/compiler/self/base/util/httpUtils.js new file mode 100644 index 000000000..a0b0f72ff --- /dev/null +++ b/self/compiler/self/base/util/httpUtils.js @@ -0,0 +1,105 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +var http = require("http"); +var https = require("https"); + +module.exports.httpUtil = new httpUtil(http); +module.exports.httpsUtil = new httpUtil(https); + +/** + * httpUtil Catalog of standard http call + * @class httpUtil + * @name httpUtil + * @memberof WF + * +*/ +function httpUtil(httpHandler) +{ + + /** + * Send a http request. + * @memberof httpUtil + * @example wf.httpUtil.httpReq(opt, cbError, cbOk, "utf-8"); + * + */ + this.httpReq = function(opt, cbError, cbOk, encoding) + { + var data = ""; + if(opt.data) data = opt.data; + + if(!encoding) encoding = "utf8"; + opt.path = encodeURI(opt.path); + var request = httpHandler.request(opt); + request.on("error", function(err) + { + cbError(err); + + }); + request.on("response", function(response) + { + var data = ""; + response.on("data", function(chunk) + { + data += chunk.toString(encoding); + }); + response.on("end", function() + { + cbOk(data); + }); + }); + request.end(data); + return; + }; + + /** + * Send a http request and redirect output in a pipe, then call a callback when finished. + * @memberof httpUtil + * @example wf.httpUtil.httpReqPipe(opt, cbError, cbPipe, cbOk); + * + */ + this.httpReqPipe = function(opt, cbError,cbPipe, cbOk) + { + var data = ""; + if(opt.data) data = opt.data; + opt.path = encodeURI(opt.path); + var request = httpHandler.request(opt); + request.on("error", function(err) + { + cbError(err); + + }); + request.on("response", function(response) + { + if(cbPipe) + cbPipe(response); + response.on("end", function() + { + if(cbOk) + cbOk(); + }); + }); + request.end(data); + return; + }; +} diff --git a/self/compiler/self/base/util/rmdir.js b/self/compiler/self/base/util/rmdir.js new file mode 100644 index 000000000..6a14f9f18 --- /dev/null +++ b/self/compiler/self/base/util/rmdir.js @@ -0,0 +1,102 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +var rmdir = function(dir, callback) +{ + fs.readdir(dir, function(err, list) + { + if(err) + { + try + { + fs.unlink(dir, function(err) + { + callback(err); + }); + } + catch(e){} + } + else + { + var i = 0; + var j = list.length; + var cb = function(){ fs.rmdir(dir, function(err){if(callback && typeof(callback) == "function") callback(err);});}; + recursiveRm(dir, i, j, list, cb); + return; + } + }); + + function recursiveRm(from, i, j, list, cb) + { + + function nextFile() + { + i++; + if(i < j) + { + recursiveRm(from, i, j, list, cb); + } + else + { + if(cb && typeof cb == "function") + cb(); + } + } + var filename = ""; + + try + { + filename = path.join(from, list[i]); + } + catch(e) + { + nextFile(); + return; + } + + fs.stat(filename, function(err, stat) + { + if(err) + { + nextFile(); + } + else if(stat.isDirectory()) + { + if(filename) + { + rmdir(filename, nextFile); + } + else + { + nextFile(); + } + } + else + { + fs.unlink(filename, nextFile); + } + }); + } +}; + +module.exports = rmdir; \ No newline at end of file diff --git a/self/compiler/self/nerd.ng b/self/compiler/self/nerd.ng new file mode 100644 index 000000000..36ae737dc --- /dev/null +++ b/self/compiler/self/nerd.ng @@ -0,0 +1,39 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +_.VERSION = "0.1.1"; +_.fs = require("fs"); +_.console = require("console"); +_.os = require("os"); +_.path = require("path"); +_.process = require("process"); +_.querystring = require("querystring"); +_.child_process = require("child_process"); +_.execSync = _.child_process.execSync; +_.JSON = require("JSON"); + +_.extern = _.path.join(__dirname, "external"); + +_.console.log(_.extern); + +//var _parseCLI = require("./base/cli/cliParser.ng"); \ No newline at end of file diff --git a/self/lib/check/isAssignment.js b/self/lib/check/isAssignment.js new file mode 100644 index 000000000..8a2b6d1bb --- /dev/null +++ b/self/lib/check/isAssignment.js @@ -0,0 +1,33 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +function isAssignment(_token) +{ + if(ASSIGNMENT_OPERATOR.indexOf(_token) < 0) + { + return {error: false, check: false}; + } + return {error: false, check: true, type: "ASSIGNMENT"}; +} + +module.exports = isAssignment; \ No newline at end of file diff --git a/self/lib/check/isBoolean.js b/self/lib/check/isBoolean.js new file mode 100644 index 000000000..671855b78 --- /dev/null +++ b/self/lib/check/isBoolean.js @@ -0,0 +1,33 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +function isBoolean(_token) +{ + if(BOOLEAN_KEYWORD.indexOf(_token) < 0) + { + return {error: false, check: false}; + } + return {error: false, check: true, type: "BOOLEAN"}; +} + +module.exports = isBoolean; \ No newline at end of file diff --git a/self/lib/check/isDelimiter.js b/self/lib/check/isDelimiter.js new file mode 100644 index 000000000..22eb6eefd --- /dev/null +++ b/self/lib/check/isDelimiter.js @@ -0,0 +1,33 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +function isDelimiter(_token) +{ + if(DELIMITER.indexOf(_token) < 0) + { + return {error: false, check: false}; + } + return {error: false, check: true, type: _token}; +} + +module.exports = isDelimiter; \ No newline at end of file diff --git a/self/lib/check/isIncrement.js b/self/lib/check/isIncrement.js new file mode 100644 index 000000000..833544271 --- /dev/null +++ b/self/lib/check/isIncrement.js @@ -0,0 +1,33 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +function isIncrement(_token) +{ + if(INCREMENT_TOKENS.indexOf(_token) < 0) + { + return {error: false, check: false}; + } + return {error: false, check: true, type: "INCREMENT"}; +} + +module.exports = isIncrement; \ No newline at end of file diff --git a/self/lib/check/isInitOperator.js b/self/lib/check/isInitOperator.js new file mode 100644 index 000000000..4e067a927 --- /dev/null +++ b/self/lib/check/isInitOperator.js @@ -0,0 +1,33 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +function isInitOperator(_token) +{ + if(INIT_OPERATOR.indexOf(_token) < 0) + { + return {error: false, check: false}; + } + return {error: false, check: true, type: _token}; +} + +module.exports = isInitOperator; \ No newline at end of file diff --git a/self/lib/check/isKeyword.js b/self/lib/check/isKeyword.js new file mode 100644 index 000000000..f43986ef8 --- /dev/null +++ b/self/lib/check/isKeyword.js @@ -0,0 +1,33 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +function isKeyword(_token) +{ + if(KEYWORD.indexOf(_token) < 0) + { + return {error: false, check: false}; + } + return {error: false, check: true, type: _token.toUpperCase()}; +} + +module.exports = isKeyword; \ No newline at end of file diff --git a/self/lib/check/isNative.js b/self/lib/check/isNative.js new file mode 100644 index 000000000..fe0aabc3d --- /dev/null +++ b/self/lib/check/isNative.js @@ -0,0 +1,37 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +function isNative(_token) +{ + if(_token.length < 4) + { + return {error: false, check: false}; + } + if(_token.slice(0,2) == "{{" || _token.slice(-2) == "}}") + { + return {error: false, check: true, type: "NATIVE"}; + } + return {error: false, check: false}; +} + +module.exports = isNative; \ No newline at end of file diff --git a/self/lib/check/isNumber.js b/self/lib/check/isNumber.js new file mode 100644 index 000000000..f6822b2fc --- /dev/null +++ b/self/lib/check/isNumber.js @@ -0,0 +1,52 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +function isNumber(_token) +{ + var _point = 0; + if(NUMBERS.indexOf(_token[0]) > -1 && _token[0] != ".") + { + for(var v = 0; v < _token.length; v++) + { + if(NUMBERS.indexOf(_token[v]) < 0) + { + return {error: true, message: "Bad number", check: false}; + } + + if(_token[v] == ".") + { + _point++; + } + + if(_point > 1) + { + return {error: true, message: "Unexpected '.'", check: false}; + } + + } + return {error: false, check: true, type: "NUMBER"}; + } + return {error: false, check: false}; +} + +module.exports = isNumber; \ No newline at end of file diff --git a/self/lib/check/isObjectOperator.js b/self/lib/check/isObjectOperator.js new file mode 100644 index 000000000..54f45b11d --- /dev/null +++ b/self/lib/check/isObjectOperator.js @@ -0,0 +1,33 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +function isObjectOperator(_token) +{ + if(OBJECT_OPERATOR.indexOf(_token) < 0) + { + return {error: false, check: false}; + } + return {error: false, check: true, type: _token}; +} + +module.exports = isObjectOperator; \ No newline at end of file diff --git a/self/lib/check/isOperator.js b/self/lib/check/isOperator.js new file mode 100644 index 000000000..83aa8116f --- /dev/null +++ b/self/lib/check/isOperator.js @@ -0,0 +1,33 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +function isOperator(_token) +{ + if(ALL_TOKEN_LOGIC.indexOf(_token) < 0) + { + return {error: false, check: false}; + } + return {error: false, check: true, type: "OPERATOR"}; +} + +module.exports = isOperator; \ No newline at end of file diff --git a/self/lib/check/isSemi.js b/self/lib/check/isSemi.js new file mode 100644 index 000000000..2fe84225f --- /dev/null +++ b/self/lib/check/isSemi.js @@ -0,0 +1,33 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +function isSemi(_token) +{ + if(_token != ";") + { + return {error: false, check: false}; + } + return {error: false, check: true, type: "SEMI"}; +} + +module.exports = isSemi; \ No newline at end of file diff --git a/self/lib/check/isString.js b/self/lib/check/isString.js new file mode 100644 index 000000000..a4cb2e58d --- /dev/null +++ b/self/lib/check/isString.js @@ -0,0 +1,37 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +function isString(_token) +{ + if(_token.length < 2) + { + return {error: false, check: false}; + } + if(_token[0] != "\"" || _token[ _token.length - 1 ] != "\"") + { + return {error: false, check: false}; + } + return {error: false, check: true, type: "STRING"}; +} + +module.exports = isString; \ No newline at end of file diff --git a/self/lib/check/isUnary.js b/self/lib/check/isUnary.js new file mode 100644 index 000000000..b086b4249 --- /dev/null +++ b/self/lib/check/isUnary.js @@ -0,0 +1,33 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +function isUnary(_token) +{ + if(UNARY_TOKENS.indexOf(_token) < 0) + { + return {error: false, check: false}; + } + return {error: false, check: true, type: "UNARY"}; +} + +module.exports = isUnary; \ No newline at end of file diff --git a/self/lib/check/isVariable.js b/self/lib/check/isVariable.js new file mode 100644 index 000000000..f0e4b1844 --- /dev/null +++ b/self/lib/check/isVariable.js @@ -0,0 +1,47 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +function isVariable(_token) +{ + if(FIRST_VAR_CHAR.indexOf(_token[0]) < 0) + { + return {error: false, check: false}; + } + + if(_token == "true" || _token == "false") + { + return {error: false, check: false}; + } + + for(var v = 0; v < _token.length; v++) + { + if(FULL_VAR_CHAR.indexOf(_token[v]) < 0) + { + return {error: true, message: "Bad token in variable name", check: false}; + } + } + + return {error: false, check: true, type: "VARIABLE"}; +} + +module.exports = isVariable; \ No newline at end of file diff --git a/self/lib/env.js b/self/lib/env.js new file mode 100644 index 000000000..f49449ef8 --- /dev/null +++ b/self/lib/env.js @@ -0,0 +1,177 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +global.genRequire = require("./require.js"); + +global.KEYWORD = ["var", "new", "this", "case", "default", "true", "false", "break", "function", "switch", "for", "do", "while", "in", "if", "else", "null", "Infinity", "NaN", "return", "include", "try", "catch"]; +global.RESERVED = ["var", "new", "this", "case", "default", "Prototype", "break", "function", "switch", "for", "do", "while", "in", "if", "else", "null", "true", "false", "argc", "argv", "main", "Object", "Array", "Infinity", "NaN", "include", "try", "catch", "arguments", "return", "address_of", "length_of", "size_of", "type_of", "typeof", "__NERD_Multi_Line_Quote", "require", "exit"]; +global.ASSIGNMENT_OPERATOR = ["=", "+=", "-=", "/=", "*="]; +global.OBJECT_OPERATOR = [":"]; +global.ITERATOR = ["in"]; +global.INIT_OPERATOR = ["[]", "{}"]; +global.CONDITIONAL_TOKENS = ["==", "<", ">", "<<", ">>", "<=", ">=", "!="]; +global.OPERATOR_TOKENS = ["+", "-", "*", "/"]; +global.UNARY_TOKENS = ["!"]; +global.INCREMENT_TOKENS = ["++", "--"]; +global.CONDITIONAL_LOGIC = ["&&", "||"]; +global.BOOLEAN_KEYWORD = ["true", "false"]; +global.PARENTHESIS_LOGIC = ["(", ")"]; +global.DELIMITER = ["(", ")", "{", "}", "[", "]", ",", "."]; +global.ALL_TOKEN_LOGIC = CONDITIONAL_TOKENS.concat(OPERATOR_TOKENS, CONDITIONAL_LOGIC); +global.NUMBERS = ["0","1","2","3","4","5","6","7","8","9", "."]; +global.FIRST_VAR_CHAR = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_"; +global.FULL_VAR_CHAR = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789"; +global.VALUES = ["NUMBER", "VARIABLE", "STRING", "BOOLEAN", "NULL"]; + +global.createEnv = function(_path, _file) +{ + var envObject = + { + REGISTER: + [ + ["global", "__dirname", "FixedArray", "Array", "Object", "__NERD_THIS", "Prototype"], + [], + ], + FLOW: [], + AST: [], + LOGICAL_FLOW: [{DO:false, IF:false, FUNCTION:false, MAIN:true, TRY: false}], + MAP: [], + IN_OBJECT: false, + IN_STRING: false, + IN_BLOCK_QUOTE: false, + IN_NATIVE: false, + CURRENT_OBJECT: "", + IN_DO: false, + IN_IF: false, + TOKENS: [], + TOKENSMAP: [], + SWITCH_MAP: [], + POSITION: 0, + LINE: 0, + CURSOR: 0, + FOR: 0, + SWITCH: 0, + IN_CASE: false, + PATH: _path, + FILE: _file, + flowObject: 0, + flowBracket: 0, + flowParenthesis: 0, + flowAccessor: 0, + LAMBDA: {}, + }; + envObject.REGISTER[0] = envObject.REGISTER[0].concat(COMPILER.ENV.stdlib); + return envObject; +} + +global.generateCode = function(_env) +{ + var code = ""; + for(var i = 0; i < _env.FLOW.length; i++) + { + if(_env.AST[i] && _env.AST[i][0] && _env.AST[i][0] == "NATIVE") + { + code += _env.FLOW[i][0].slice( 2, _env.FLOW[i][0].length - 2); + } + else + { + code += _env.FLOW[i].join(" "); + code += "\n"; + } + } + return code; +} + +global.parseAST = function(_env) +{ + for(var i = 0; i < _env.FLOW.length; i) + { + i = verifyFlow(_env.AST[i], _env.FLOW[i], i, _env.FLOW, _env); + } +} + +global.error = function(_msg) +{ + console.error(_msg); + process.exit(1); +} + +global.nextScope = function(_env) +{ + _env.REGISTER.push([]); + _env.LOGICAL_FLOW.push({"DO":false, "IF": false, "FUNCTION":false, MAIN: false, TRY: false}); +} + +global.popScope = function(_env) +{ + _env.REGISTER.pop(); + _env.LOGICAL_FLOW.pop(); +} + +global.getLogical = function(_env) +{ + return _env.LOGICAL_FLOW[_env.LOGICAL_FLOW.length - 1]; +} + +global.addLogical = function(_type, _env) +{ + _env.LOGICAL_FLOW[_env.LOGICAL_FLOW.length - 1][_type] = true; +} + +global.removeLogical = function(_type, _env) +{ + _env.LOGICAL_FLOW[_env.LOGICAL_FLOW.length - 1][_type] = false; +} + +global.checkVarExists = function(_name, _env, _flow) +{ + //for(var i = 0; i < _env.REGISTER.length; i++) + //{ + if(_env.REGISTER[_env.REGISTER.length - 1].indexOf(_name) > -1) + { + return { error: true, message: `Variable ${_name} already defined` }; + } + //} + return { error: false }; +} + +global.addVar = function(_name, _env) +{ + if(_env.REGISTER[_env.REGISTER.length - 1].indexOf(_name) < 0) + { + _env.REGISTER[_env.REGISTER.length - 1].push(_name); + } +} + +global.varExists = function(_name, _env) +{ + for(var i = 0; i < _env.REGISTER.length; i++) + { + if(_env.REGISTER[i].indexOf(_name) > -1) + { + return true; + } + } + + return false; +} \ No newline at end of file diff --git a/self/lib/include.js b/self/lib/include.js new file mode 100644 index 000000000..6479e3ff9 --- /dev/null +++ b/self/lib/include.js @@ -0,0 +1,74 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +var _SEARCH = new RegExp(/['"]!_ffi_include *(.*)['"]/); +var _SEARCHCINC = new RegExp(/#include *\"(.*)\"/g); + +function genInclude(from, src, full) +{ + console.log(from, src, full); + if(CLI.cli["--profile"] && CLI.cli["--profile"].argument == "use") + { + return src; + } + var _match = src.match(_SEARCH); + while(_match) + { + var _var = "#include \"" + path.resolve(path.join(COMPILER.TMP_FOLDER, _match[1]) + "\""); + COMPILER.FFI.push(_var); + copyRecursiveSync(path.resolve(path.join(from, _match[1])), path.join(COMPILER.TMP_FOLDER, _match[1])); + var _include = fs.readFileSync(path.resolve(path.join(COMPILER.TMP_FOLDER, _match[1]))).toString(); + _include = genMetaFunction(_include); + _include = genInclude(path.dirname(path.resolve(path.join(from, _match[1]))), _include, path.dirname(path.resolve(path.join(COMPILER.TMP_FOLDER, _match[1])))); + fs.writeFileSync(path.resolve(path.join(COMPILER.TMP_FOLDER, _match[1])), _include); + src = src.replace(/['"]!_ffi_include *(.*)['"]/, ""); + _match = src.match(_SEARCH); + } + + + var _cmatch = src.match(_SEARCHCINC); + if(_cmatch) + { + for(var i = 0; i < _cmatch.length; i++) + { + var _getPath = new RegExp(/#include *\"(.*)\"/g); + var _cfile = _getPath.exec(_cmatch[i]); + if(_cfile[1]) + { + var _incFile = path.resolve(path.join(from, _cfile[1])); + if(fs.existsSync(_incFile)) + { + copyRecursiveSync(_incFile, path.join(full, _cfile[1])); + var _include = fs.readFileSync(path.resolve(path.join(full, _cfile[1]))).toString(); + _include = genMetaFunction(_include); + _include = genInclude(path.dirname(path.resolve(path.join(full, _cfile[1]))), _include, path.dirname(path.resolve(path.join(full, _cfile[1])))); + fs.writeFileSync(path.resolve(path.join(full, _cfile[1])), _include); + _cmatch = src.match(_SEARCHCINC); + } + } + } + } + + return src; +} +module.exports = genInclude; \ No newline at end of file diff --git a/self/lib/package.js b/self/lib/package.js new file mode 100644 index 000000000..a480bd433 --- /dev/null +++ b/self/lib/package.js @@ -0,0 +1,40 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +var _SEARCH = new RegExp(/['"]!_package *(.*)['"]/); + +function genPackage(from, src) +{ + var _match = src.match(_SEARCH); + while(_match) + { + var _target = _match[1].replace(/{__ARCH__}/g, os.arch()); + copyRecursiveSync(path.resolve(path.join(from, _target)), path.join(COMPILER.TMP_FOLDER, _target)); + COMPILER.PACK.push(path.join(COMPILER.TMP_FOLDER, _target)); + src = src.replace(/['"]!_package *(.*)['"]/, ""); + _match = src.match(_SEARCH); + } + + return src; +} +module.exports = genPackage; \ No newline at end of file diff --git a/self/lib/parser.js b/self/lib/parser.js new file mode 100644 index 000000000..f1867e449 --- /dev/null +++ b/self/lib/parser.js @@ -0,0 +1,1318 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +//var _env.flowBracket = 0; +//var _env.flowObject = 0; +//var _env.flowParenthesis = 0; +//var _env.flowAccessor = 0; + +var isNumber = require("./check/isNumber.js"); +var isVariable = require("./check/isVariable.js"); +var isString = require("./check/isString.js"); +var isOperator = require("./check/isOperator.js"); +var isUnary = require("./check/isUnary.js"); +var isInitOperator = require("./check/isInitOperator.js"); +var isObjectOperator = require("./check/isObjectOperator.js"); +var isKeyword = require("./check/isKeyword.js"); +var isDelimiter = require("./check/isDelimiter.js"); +var isIncrement = require("./check/isIncrement.js"); +var isAssignment = require("./check/isAssignment.js"); +var isSemi = require("./check/isSemi.js"); +var isNative = require("./check/isNative.js"); + +var CHECKERS = [ isSemi, isNumber, isAssignment, isKeyword, isVariable, isString, isDelimiter, isIncrement, isObjectOperator, isOperator, isUnary, isInitOperator, isNative, ]; + +function incToken(_env) +{ + _env.POSITION++; + if(!_env.TOKENS[_env.POSITION]) + { + _env.TOKENS[_env.POSITION] = []; + } + if(!_env.TOKENSMAP[_env.POSITION]) + { + _env.TOKENSMAP[_env.POSITION] = []; + } +} + +function decToken(_env) +{ + _env.POSITION--; +} + +function addToken(_code, _env) +{ + if(_code == "\n") return; + if(_code.length > 0) + { + if(!_env.TOKENS[_env.POSITION]) + { + _env.TOKENS[_env.POSITION] = []; + } + if(!_env.TOKENSMAP[_env.POSITION]) + { + _env.TOKENSMAP[_env.POSITION] = []; + } + _env.TOKENS[_env.POSITION].push(_code); + _env.TOKENSMAP[_env.POSITION].push( {line: _env.LINE, position: _env.CURSOR} ); + } +} + +var noReduceParenthesis = ["INCLUDE", "FUNCTION", "ACCESSOR", "]", ")", "VARIABLE", "CALL", "IF", "WHILE", "FOR"]; +var reduceParenthesis = function(_ast) +{ + for(var i = 0; i < _ast.length; i++) + { + if(_ast[i-1] && _ast[i-1] == "IF" &&_ast[i] == "(" && _ast[i+1] && _ast[i+1] == "(") + { + if(_ast[i+3] && _ast[i+3] == ")") + { + _ast = _ast.slice(0,2).concat([_ast[i+2]]).concat(_ast.slice(5)); + reduceParenthesis(_ast); + } + } + else if( (!_ast[i-1] || (_ast[i-1] && noReduceParenthesis.indexOf(_ast[i-1]) < 0) ) && _ast[i] == "(" && _ast[i+2] && _ast[i+2] == ")" ) + { + _ast = _ast.slice(0,i).concat([_ast[i+1]]).concat(_ast.slice(i+3)); + reduceParenthesis(_ast); + } + } + return _ast; +} + +function verifyToken(_token, i, j, map, _env) +{ + var check = {check: false, error: false}; + + for(var k = 0; k < CHECKERS.length; k++) + { + check = CHECKERS[k](_token); + if(check.error) + { + + error(`[!] ${check.message}: ${_token} line:${map[i][j].line + 1} position:${map[i][j].position}${os.EOL}=> ${array_of_code[map[i][j].line]}`); + } + else if(check.check) + { + return check.type; + } + } + + if(!check.check) + { + console.trace(); + error(`[!] Unknown token: ${_token} line:${map[i][j].line + 1} position:${map[i][j].position}${os.EOL}=> ${array_of_code[map[i][j].line]}`); + } +} + +var GRAMMAR = +{ + "(": + [ + ["(", "VARIABLE", ","], + ["(", "CALL", ","], + ], + BOOLEAN: + [ + ["TRUE"], + ["FALSE"], + ], + LITERAL: + [ + ["NUMBER"], + ["STRING"], + ["BOOLEAN"], + ], + OBJECT: + [ + ["{", "LIST", "}"], + ["{", "ASSIGNMENT", "}"], + ["{", "LIST", ",", "}"], + ["{", "ASSIGNMENT", ",", "}"], + ], + + OBJECT_LIST: + [ + ["ASSIGNMENT", ",", "ASSIGNMENT"], + ["ASSIGNMENT", ",", "OBJECT_LIST"], + ["OBJECT_LIST", ",", "ASSIGNMENT"], + ["OBJECT_LIST", ",", "OBJECT_LIST"], + ], + + ARRAY: + [ + ["[", "LIST", "]"], + ["[", "LIST", ",", "]"], + ["[", "{", "OBJECT_LIST", "}", "]"], + ], + + ACCESSOR: + [ + ["[", "LITERAL", "]"], + ["[", "VARIABLE", "]"], + ["[", "EXPRESSION", "]"], + ], + + + + + + BREAK: + [ + ["SEMI", "BREAK"], + ], + + LAMBDA: + [ + ["FUNCTION", "(", ")", "{", "}"], + ["FUNCTION", "(", "LIST", ")", "{", "}"], + ], + + OPERATOR: + [ + ["OPERATOR", "OPERATOR"] + ], + + VARIABLE: + [ + ["VAR", "VARIABLE"], + ["VARIABLE", ".", "VARIABLE"], + ["VARIABLE", "ACCESSOR"], + ["CALL", ".", "VARIABLE"], + ["VARIABLE", ".", "CALL"], + ["UNARY", "VARIABLE"], + ["[", "]"], + ["THIS"], + ["VARIABLE", "INCREMENT"], + ["CALL", "ACCESSOR"], + ], + + CALL: + [ + ["VARIABLE", "(", "CALL", ")"], + ["VARIABLE", "(", "VARIABLE", ")"], + ["VARIABLE", "(", "LIST", ")"], + ["VARIABLE", "(", "EXPRESSION", ")"], + ["VARIABLE", "(", "VARIABLE", ")"], + ["VARIABLE", "(", "LITERAL", ")"], + ["VARIABLE", "(", "OBJECT", ")"], + ["VARIABLE", "(", "{", "OBJECT_LIST", "}", ")"], + ["VARIABLE", "(", "ARRAY", ")"], + ["VARIABLE", "(", ")"], + + ["CALL", ".", "CALL"], + ["VARIABLE", ".", "CALL"], + ["UNARY", "CALL"], + ["NEW", "CALL"], + ], + + ASSIGNMENT: + [ + + ["VARIABLE", ":", "LITERAL"], + ["VARIABLE", ":", "VARIABLE"], + ["VARIABLE", ":", "EXPRESSION"], + ["VARIABLE", ":", "CALL"], + ["VARIABLE", ":", "LAMBDA"], + ["VARIABLE", ":", "ARRAY"], + ["VARIABLE", ":", "OBJECT"], + ["VARIABLE", ":", "{", "}"], + ["VARIABLE", ":", "{", "ASSIGNMENT", "}"], + ["VARIABLE", ":", "{", "ASSIGNMENT", ",", "}"], + + ["VARIABLE", ":", "LIST"], + + ["LITERAL", ":", "LITERAL"], + ["LITERAL", ":", "EXPRESSION"], + ["LITERAL", ":", "CALL"], + + ], + + LIST: + [ + ["LIST", ",", "{", "OBJECT_LIST", "}"], + ["{", "OBJECT_LIST", "}", ",", "LIST}"], + ["{", "OBJECT_LIST", "}", ",", "{", "OBJECT_LIST", "}"], + ], + +} + + +var LIST_GEN = +[ + "LITERAL", "ARRAY", "VARIABLE", "CALL", "LIST", +] +var VAR_OPERATOR_GEN = +[ + "VARIABLE", "LITERAL", "CALL", +] + +for(var i = 0; i < LIST_GEN.length; i++) +{ + for(var j = 0; j < LIST_GEN.length; j++) + { + GRAMMAR.LIST.push([LIST_GEN[i], ",", LIST_GEN[j]]); + } +} + +for(var i = 0; i < VAR_OPERATOR_GEN.length; i++) +{ + for(var j = 0; j < VAR_OPERATOR_GEN.length; j++) + { + GRAMMAR.VARIABLE.push([VAR_OPERATOR_GEN[i], "OPERATOR", VAR_OPERATOR_GEN[j]]); + } +} + +var VALIDATION = +{ + VARIABLE: + [ + ["VARIABLE", "SEMI"], + ["VARIABLE", "ASSIGNMENT", "LITERAL", "SEMI"], + ["VARIABLE", "ASSIGNMENT", "VARIABLE", "SEMI"], + ["VARIABLE", "ASSIGNMENT", "ACCESSOR", "SEMI"], + ["VARIABLE", "ASSIGNMENT", "OBJECT", "SEMI"], + ["VARIABLE", "ASSIGNMENT", "ARRAY", "SEMI"], + ["VARIABLE", "ASSIGNMENT", "EXPRESSION", "SEMI"], + ["VARIABLE", "ASSIGNMENT", "CALL", "SEMI"], + + ["VARIABLE", "ASSIGNMENT", "[", "LITERAL", "]", "SEMI"], + ["VARIABLE", "ASSIGNMENT", "[", "LIST", "]", "SEMI"], + + + ["VARIABLE", "ASSIGNMENT", "FUNCTION", "(", "LIST", ")", "{"], + ["VARIABLE", "ASSIGNMENT", "FUNCTION", "(", "LITERAL", ")", "{"], + ["VARIABLE", "ASSIGNMENT", "FUNCTION", "(", "VARIABLE", ")", "{"], + ["VARIABLE", "ASSIGNMENT", "FUNCTION", "(", "ARRAY", ")", "{"], + ["VARIABLE", "ASSIGNMENT", "FUNCTION", "(", "OBJECT", ")", "{"], + ["VARIABLE", "ASSIGNMENT", "FUNCTION", "(", ")", "{"], + + ["VARIABLE", "ASSIGNMENT", "{", "OBJECT_LIST", "}", "SEMI"], + ["VARIABLE", "ASSIGNMENT", "{", "OBJECT_LIST", ",", "}", "SEMI"], + ["VARIABLE", "ASSIGNMENT", "{", "}", "SEMI"], + ], + ASSIGNMENT: + [ + ["ASSIGNMENT", "SEMI"], + ["ASSIGNMENT", "{"], + ], + EXPRESSION: + [ + ["EXPRESSION", "SEMI"], + ], + WHILE: + [ + [ "WHILE", "(", "LITERAL", ")", "{" ], + [ "WHILE", "(", "VARIABLE", ")", "{" ], + [ "WHILE", "(", "EXPRESSION", ")", "{" ], + + [ "WHILE", "(", "LITERAL", ")", "SEMI" ], + [ "WHILE", "(", "VARIABLE", ")", "SEMI" ], + [ "WHILE", "(", "EXPRESSION", ")", "SEMI" ], + ], + SWITCH: + [ + ["SWITCH", "(", "VARIABLE", ")", "{"], + ["SWITCH", "(", "EXPRESSION", ")", "{"], + ["SWITCH", "(", "LITERAL", ")", "{"], + ["SWITCH", "(", "CALL", ")", "{"], + ], + CASE: + [ + ["CASE", "LITERAL", ":"], + ["CASE", "VARIABLE", ":"], + ["CASE", "EXPRESSION", ":"], + ["CASE", "CALL", ":"], + ], + DEFAULT: + [ + ["DEFAULT", ":"], + ], + DO: + [ + [ "DO", "{" ], + ], + IF: + [ + [ "IF", "(", "LITERAL", ")", "{" ], + [ "IF", "(", "VARIABLE", ")", "{" ], + [ "IF", "(", "EXPRESSION", ")", "{" ], + [ "IF", "(", "CALL", ")", "{" ], + + [ "IF", "(", "LITERAL", ")", "ASSIGNMENT", "SEMI" ], + [ "IF", "(", "VARIABLE", ")", "ASSIGNMENT", "SEMI" ], + [ "IF", "(", "VARIABLE", ")", "VARIABLE", "SEMI" ], + [ "IF", "(", "VARIABLE", ")", "RETURN", "SEMI" ], + [ "IF", "(", "EXPRESSION", ")", "ASSIGNMENT", "SEMI" ], + [ "IF", "(", "CALL", ")", "ASSIGNMENT", "SEMI" ], + [ "IF", "(", "CALL", ")", "CALL", "SEMI" ], + [ "IF", "(", "VARIABLE", ")", "CALL", "SEMI" ], + [ "IF", "(", "EXPRESSION", ")", "CALL", "SEMI" ], + [ "IF", "(", "EXPRESSION", ")", "RETURN", "SEMI" ], + + + [ "IF", "(", "VARIABLE", ")", "VARIABLE", "ASSIGNMENT", "LITERAL", "SEMI" ], + [ "IF", "(", "VARIABLE", ")", "VARIABLE", "ASSIGNMENT", "VARIABLE", "SEMI" ], + [ "IF", "(", "VARIABLE", ")", "VARIABLE", "ASSIGNMENT", "CALL", "SEMI" ], + + [ "IF", "(", "EXPRESSION", ")", "VARIABLE", "ASSIGNMENT", "STRING", "SEMI" ], + [ "IF", "(", "EXPRESSION", ")", "VARIABLE", "ASSIGNMENT", "VARIABLE", "SEMI" ], + [ "IF", "(", "EXPRESSION", ")", "VARIABLE", "ASSIGNMENT", "CALL", "SEMI" ], + [ "IF", "(", "EXPRESSION", ")", "VARIABLE", "ASSIGNMENT", "EXPRESSION", "SEMI" ], + + ], + ELSE: + [ + [ "ELSE", "IF", "(", "LITERAL", ")", "{" ], + [ "ELSE", "IF", "(", "VARIABLE", ")", "{" ], + [ "ELSE", "IF", "(", "EXPRESSION", ")", "{" ], + [ "ELSE", "IF", "(", "CALL", ")", "{" ], + + [ "ELSE", "IF", "(", "LITERAL", ")", "ASSIGNMENT", "SEMI" ], + [ "ELSE", "IF", "(", "VARIABLE", ")", "ASSIGNMENT", "SEMI" ], + [ "ELSE", "IF", "(", "EXPRESSION", ")", "ASSIGNMENT", "SEMI" ], + [ "ELSE", "IF", "(", "EXPRESSION", ")", "VARIABLE", "EXPRESSION", "SEMI" ], + [ "ELSE", "IF", "(", "CALL", ")", "ASSIGNMENT", "SEMI" ], + [ "ELSE", "IF", "(", "CALL", ")", "CALL", "SEMI" ], + [ "ELSE", "IF", "(", "VARIABLE", ")", "CALL", "SEMI" ], + + [ "ELSE", "IF", "(", "VARIABLE", ")", "VARIABLE", "ASSIGNMENT", "LITERAL", "SEMI" ], + [ "ELSE", "IF", "(", "VARIABLE", ")", "VARIABLE", "ASSIGNMENT", "VARIABLE", "SEMI" ], + [ "ELSE", "IF", "(", "EXPRESSION", ")", "VARIABLE", "ASSIGNMENT", "VARIABLE", "SEMI" ], + [ "ELSE", "IF", "(", "EXPRESSION", ")", "VARIABLE", "ASSIGNMENT", "LITERAL", "SEMI" ], + + [ "ELSE", "{" ], + [ "ELSE", "TRY", "{" ], + [ "ELSE", "VARIABLE", "SEMI" ], + [ "ELSE", "ASSIGNMENT", "SEMI" ], + [ "ELSE", "CALL", "SEMI" ], + [ "ELSE", "VARIABLE", "ASSIGNMENT", "VARIABLE", "SEMI" ], + [ "ELSE", "VARIABLE", "ASSIGNMENT", "CALL", "SEMI" ], + [ "ELSE", "VARIABLE", "EXPRESSION", "SEMI" ], + ], + FOR: + [ + ["FOR", "(", "VARIABLE", "ASSIGNMENT", "LITERAL", "SEMI", "VARIABLE", "SEMI", "VARIABLE", ")", "{"], + ["FOR", "(", "VARIABLE", "ASSIGNMENT", "LITERAL", "SEMI", "CALL", "SEMI", "VARIABLE", ")", "{"], + ["FOR", "(", "VARIABLE", "ASSIGNMENT", "VARIABLE", "SEMI", "VARIABLE", "SEMI", "VARIABLE", ")", "{"], + ["FOR", "(", "VARIABLE", "ASSIGNMENT", "VARIABLE", "SEMI", "CALL", "SEMI", "VARIABLE", ")", "{"], + ["FOR", "(", "VARIABLE", "ASSIGNMENT", "LITERAL", "SEMI", "VARIABLE", "SEMI", "EXPRESSION", ")", "{"], + ["FOR", "(", "VARIABLE", "ASSIGNMENT", "VARIABLE", "SEMI", "VARIABLE", "SEMI", "EXPRESSION", ")", "{"], + ["FOR", "(", "VARIABLE", "ASSIGNMENT", "LITERAL", "SEMI", "EXPRESSION", "SEMI", "VARIABLE", ")", "{"], + ["FOR", "(", "VARIABLE", "ASSIGNMENT", "VARIABLE", "SEMI", "EXPRESSION", "SEMI", "VARIABLE", ")", "{"], + ["FOR", "(", "VARIABLE", "ASSIGNMENT", "LITERAL", "SEMI", "EXPRESSION", "SEMI", "EXPRESSION", ")", "{"], + ["FOR", "(", "VARIABLE", "ASSIGNMENT", "VARIABLE", "SEMI", "EXPRESSION", "SEMI", "EXPRESSION", ")", "{"], + ["FOR", "(", "VARIABLE", "SEMI", "EXPRESSION", "SEMI", "EXPRESSION", ")", "{"], + ["FOR", "(", "VARIABLE", "IN", "VARIABLE", ")", "{"], + ], + FUNCTION: + [ + ["FUNCTION", "CALL", "{"], + ], + CALL: + [ + ["CALL", "SEMI"], + ], + INCLUDE: + [ + ["INCLUDE", "(", "LITERAL", ")", "SEMI"], + ], + DEFINE: + [ + ["DEFINE", "(", "STRING", ")", "SEMI"], + ], + RETURN: + [ + ["RETURN", "LITERAL", "SEMI"], + ["RETURN", "SEMI"], + ["RETURN", "VARIABLE", "SEMI"], + ["RETURN", "EXPRESSION", "SEMI"], + ["RETURN", "CALL", "SEMI"], + ["RETURN", "OBJECT", "SEMI"], + ["RETURN", "OBJECT", ",", "SEMI"], + ["RETURN", "{", "ASSIGNMENT", ",", "}", "SEMI"], + ["RETURN", "{", "ASSIGNMENT", "}", "SEMI"], + ["RETURN", "{", "OBJECT_LIST", ",", "}", "SEMI"], + ["RETURN", "{", "OBJECT_LIST","}", "SEMI"], + ], + TRY: + [ + ["TRY", "{"], + ], + CATCH: + [ + ["CATCH", "(", "VARIABLE", ")", "{"], + ], + "NATIVE": + [ + ["NATIVE"], + ], + "{": + [ + ["{"], + ], + "}": + [ + ["}"], + ["}", "SEMI"], + ], + BREAK: + [ + ["BREAK"], + ["BREAK", "SEMI"], + ], + SEMI: + [ + ["SEMI"], + ] +} + +function checkExpression(_ast, _flow, _arr) +{ + var _startAst = 0; + var _endAst = 0; + var _match = false; + + var _newAst = []; + + for(var g = 0; g < Object.keys(_arr).length; g++) + { + var _grammarName = Object.keys(_arr)[g]; + var _grammar = _arr[_grammarName]; + + for(var t = 0; t < _grammar.length; t++) + { + for(var i = 0; i < _ast.length ; i++) + { + _startAst = 0; + _endAst = 0; + _match = false; + if(_ast[i] == _grammar[t][0]) + { + _match = true; + _startAst = i; + _endAst = i; + for(var m = 0; m < _grammar[t].length; m++) + { + if(!_ast[i + m]) + { + _match = false; + break + } + else if( _ast[i + m] == _grammar[t][m]) + { + _endAst++; + } + else + { + _match = false; + break; + } + } + if(_match) + { + _newAst = _ast.slice(0, _startAst); + _newAst.push( _grammarName ); + _newAst = _newAst.concat( _ast.slice( _endAst )); + + _ast = _newAst; + _ast = reduceParenthesis(_ast); + + return checkExpression(_ast, _flow, _arr); + } + } + } + } + } + return _ast; +} + +function checkSyntax(_ast, _flow, _scope, _env) +{ + if(_ast.length < 1) + { + return; + } + if(VALIDATION[_ast[0]]) + { + var _check = VALIDATION[_ast[0]]; + var _good = true; + + for(var c = 0; c < _check.length; c++) + { + _good = true; + for(var t = 0; t < _ast.length; t++) + { + if(!_check[c][t] || _ast[t] != _check[c][t]) + { + _good = false; + break; + } + } + if(_good) + { + break; + } + } + + if(!_good) + { + var _debug = "\n"; + if(global.DEBUG) + { + _debug += _ast.join(" "); + } + error(`[!] Unexpected token: line: ${_scope[0].line + 1} in ${_env.FILE}\n${_flow.join(" ")}${_debug}`); + } + } + else + { + var _debug = "\n"; + if(global.DEBUG) + { + _debug += _ast.join(" "); + } + error(`[!] Unexpected token: line: ${_scope[0].line + 1} position: 0 in ${_env.FILE}\n${_flow.join(" ")}${_debug}`); + } +} + + +function addFlow(_env) +{ + if(_env.TOKENS.length > 0 && _env.TOKENS[0]) + { + var _ast = []; + for(var i = 0; i < _env.TOKENS.length; i++) + { + _ast[i] = []; + + + for(var j = 0; j < _env.TOKENS[i].length; j++) + { + _ast[i][j] = verifyToken(_env.TOKENS[i][j], i, j, _env.TOKENSMAP, _env); + } + + _ast[i] = checkExpression(_ast[i], _env.TOKENS[i], GRAMMAR); + //_ast[i] = checkExpression(_ast[i], _env.TOKENS[i], ASSIGN); + + //_ast[i] = checkExpression(_ast[i], _env.TOKENS[i], SECOND); + + checkSyntax(_ast[i], _env.TOKENS[i], _env.TOKENSMAP[i], _env); + } + + _env.FLOW = _env.FLOW.concat(_env.TOKENS); + _env.MAP = _env.MAP.concat(_env.TOKENSMAP); + _env.AST = _env.AST.concat(_ast); + } + _env.TOKENS = []; + _env.TOKENSMAP = []; + _env.POSITION = 0; + +} + +function findNextLine(_code, _from, _env) +{ + for(var i = _from; i < _code.length; i++) + { + if(_code[i] == "\r" && _code[i+1] && _code[i+1] == "\n") + { + _env.LINE++; + _env.CURSOR = 0; + return i+2; + } + else if(_code[i] == "\n") + { + _env.LINE++; + _env.CURSOR = 0; + return i+1; + } + } + // ERROR + return _code.length - 1; +} + +function findEndComment(_code, _from, _env) +{ + for(var i = _from; i < _code.length; i++) + { + if(_code[i] == "\n") + { + _env.LINE++; + _env.CURSOR = 0; + } + else if(_code[i] == "\r" && _code[i + 1] && _code[i + 1] == "\n") + { + _env.LINE++; + _env.CURSOR = 0; + i++; + } + else if(_code[i] == "*" && _code[i+1] && _code[i+1] == "/") + { + return i+2; + } + _env.CURSOR++; + } + // ERROR + return _code.length - 1; +} + +function setFor(_current, _env) +{ + if(_current == "for" && _env.FOR == 0) + { + _env.FOR = 2; + } +} + +function setSwitch(_current, _env) +{ + if(_current == "switch") + { + _env.SWITCH ++; + } +} + +function setCase(_current, _env) +{ + if(_current == "case") + { + if(_env.SWITCH > 0) + { + _env.IN_CASE = true; + } + else + { + error(`'case' keyworkds require to be in a switch statement`); + } + } +} + +function unsetCase(_current, _env) +{ + if(_current == "break") + { + if(_env.IN_CASE == true) + { + _env.IN_CASE = false; + } + } +} + +function parseCode(_code, _from, _env) +{ + var _current = ""; + _env.POSITION = 0; + + for(var i = _from; i < _code.length; i++) + { + var _tokens = _env.TOKENS[_env.TOKENS.length - 1]; + var _before; + + if(_tokens && _tokens[_tokens.length - 1]) + { + _before = _tokens[_tokens.length - 1]; + } + + switch(_code[i]) + { + case " ": + if(!_env.IN_STRING && !_env.IN_BLOCK_QUOTE && !_env.IN_NATIVE) + { + setFor(_current, _env); + setSwitch(_current, _env); + addToken(_current, _env); + _current = ""; + } + else + { + _current += _code[i]; + } + break; + case "\t": + if(!_env.IN_STRING && !_env.IN_BLOCK_QUOTE && !_env.IN_NATIVE) + { + setFor(_current, _env); + setSwitch(_current, _env); + addToken(_current, _env); + _current = ""; + } + else if(_env.IN_STRING || _env.IN_NATIVE) + { + _current += _code[i]; + } + else if(_env.IN_BLOCK_QUOTE) + { + _current += "\\t"; + } + break; + + case "\n": + if(!_env.IN_BLOCK_QUOTE && !_env.IN_NATIVE) + { + _env.LINE++; + _env.CURSOR = 0; + addToken(_current, _env); + _current = ""; + } + else if(_env.IN_NATIVE) + { + _current += _code[i]; + } + else + { + _current += "\\n"; + } + break; + + case "\r": + if(!_env.IN_BLOCK_QUOTE && !_env.IN_NATIVE) + { + _env.LINE++; + _env.CURSOR = 0; + if(_code[i+1] && _code[i+1] == "\n") + { + addToken(_current, _env); + _current = ""; + i++ + break; + } + } + else if(_env.IN_NATIVE) + { + _current += _code[i]; + } + else + { + _current += "\\r"; + } + break; + + case "\\": + if(_env.IN_BLOCK_QUOTE) + { + _current += "\\\\"; + } + _current += "\\"; + break; + + case "\"": + if(_env.IN_STRING && !_env.IN_NATIVE) + { + _env.IN_STRING = false; + } + else if(!_env.IN_BLOCK_QUOTE && !_env.IN_NATIVE) + { + _env.IN_STRING = true; + } + if(_env.IN_BLOCK_QUOTE) + { + _current += "\\\""; + } + else + { + _current += _code[i]; + } + break; + + case "`": + if(_env.IN_BLOCK_QUOTE && !_env.IN_NATIVE) + { + _env.IN_BLOCK_QUOTE = false; + addToken(_current + "\"", _env); + _current = ""; + } + else if(!_env.IN_STRING && !_env.IN_NATIVE) + { + _env.IN_BLOCK_QUOTE = true; + addToken(_current, _env); + _current = "\""; + + for(var q = i+1; q < _code.length; q++) + { + if(_code[q] == "`") + { + break; + } + if(_code[q] == "$" && _code[q+1] == "{") + { + for(var end = q; end < _code.length; end++) + { + + if(_code[end] == "}") + { + _code[q] = "\""; + _code[q+1] = "+"; + _code = _code.slice(0, q) + "` + " + _code.slice(q+2, end) + " + `" + _code.slice(end+1); + break; + } + } + + } + } + } + else _current += _code[i]; + break; + + case "/": + if(!_env.IN_STRING && !_env.IN_BLOCK_QUOTE && !_env.IN_NATIVE) + { + if(_code[i+1]) + { + if(_code[i + 1] && _code[i + 1] == "=") + { + // /= + addToken(_code[i] + _code[i + 1], _env); + i++; + } + else if(_code[i+1] == "/") + { + addToken(_current, _env); + addFlow(_env); + _current = ""; + parseCode(_code, findNextLine(_code, i, _env), _env); + return; + } + else if(_code[i+1] == "*") + { + addToken(_current, _env); + addFlow(_env); + _current = ""; + i = parseCode(_code, findEndComment(_code, i, _env), _env); + return; + } + else + { + addToken(_current, _env); + addToken(_code[i], _env); + _current = ""; + } + } + } + else + { + _current += _code[i]; + } + + break; + + case "0": + case "1": + case "2": + case "3": + case "4": + case "5": + case "6": + case "7": + case "8": + case "9": + _current += _code[i]; + break; + + case "{": + case "}": + + if(!_env.IN_STRING && !_env.IN_BLOCK_QUOTE && !_env.IN_NATIVE) + { + + if(_code[i] == "{" && _code[i + 1] && _code[i + 1] == _code[i]) + { + _env.IN_NATIVE = true; + + addToken(_current, _env); + _current = "{{"; + + i++; + } + else if(_code[i] == "{" && _code[i + 1] && _code[i + 1] != "}" && _code[i - 1] && (_code[i - 1] == "=" || _code[i - 1] == "," || _code[i - 1] == "return")) + { + // obj + _env.flowObject++; + _current += "{"; + } + else if(_code[i] == "{" && _code[i + 1] && _code[i + 1] != "}" && (_before == "=" || _before == "," || _before == "return" || _before == "(")) + { + // obj + _env.flowObject++; + _current += "{"; + addToken(_current, _env), + _current = ""; + } + else if(_code[i] == "{" && _before && _before == ")") + { + // function() = {}; or catch(e){} + addToken(_current, _env); + if(_code[i+1] == "}") + { + addToken("{", _env); + if(_env.flowObject < 1) + { + incToken(_env); + } + addToken("}", _env); + addFlow(_env); + i++; + } + else + { + addToken(_code[i], _env); + if(_env.flowObject < 1) + { + incToken(_env); + } + _env.flowBracket++; + } + _current = ""; + } + else if(_code[i] == "{" && _code[i + 1] && _code[i + 1] == "}" && _env.flowObject < 1) + { + // obj + addToken(_current, _env); + addToken("{", _env); + addToken("}", _env); + i++; + _current = ""; + } + else + { + if(_code[i] == "{") + { + if(_env.flowObject < 1) + { + addToken(_current, _env); + addToken(_code[i], _env); + incToken(_env); + _env.flowBracket++; + + _current+= ""; + + } + else + { + addToken(_current, _env); + addToken("{", _env); + _env.flowObject++; + //_current += _code[i]; + _current = ""; + } + } + else + { + if(_env.flowObject > 0 || _env.flowAccessor > 0 ) + { + //_current += _code[i]; + addToken(_current, _env); + addToken("}", _env); + //addFlow(_env); + _env.flowObject--; + _current = ""; + } + else + { + if(_env.SWITCH > 0) + { + _env.SWITCH--; + } + //_current += "}"; + addToken(_current, _env); + addToken("}", _env); + addFlow(_env); + + //incToken(_env); + _env.flowBracket--; + + _current = ""; + } + + } + } + + } + else if(_env.IN_NATIVE && _code[i] == "}" && _code[i + 1] && _code[i + 1] == _code[i]) + { + _env.IN_NATIVE = false; + _current += "}}"; + addToken(_current, _env); + addFlow(_env); + _current = ""; + i++; + } + else + { + _current += _code[i]; + } + break; + + case "[": + case "]": + case "(": + case ")": + if(!_env.IN_STRING && !_env.IN_BLOCK_QUOTE && !_env.IN_NATIVE) + { + if(_code[i] == "(") + { + setFor(_current, _env); + setSwitch(_current, _env); + _env.flowParenthesis++; + } + else if(_code[i] == ")") + { + _env.flowParenthesis--; + } + else if(_code[i] == "[") + { + _env.flowAccessor++; + } + else if(_code[i] == "]") + { + _env.flowAccessor--; + } + + addToken(_current, _env); + addToken(_code[i], _env); + _current = ""; + } + else + { + _current += _code[i]; + } + break; + + case ";": + if(!_env.IN_STRING && !_env.IN_BLOCK_QUOTE && !_env.IN_NATIVE) + { + addToken(_current, _env); + addToken(";", _env); + _current = ""; + if(_env.FOR == 0) + { + addFlow(_env); + } + else + { + _env.FOR--; + } + + } + else + { + _current += _code[i]; + } + break; + + case ":": + if(!_env.IN_STRING && !_env.IN_BLOCK_QUOTE && !_env.IN_NATIVE && _env.SWITCH == 0) + { + addToken(_current, _env); + addToken(":", _env); + _current = ""; + } + else if(!_env.IN_STRING && !_env.IN_BLOCK_QUOTE && !_env.IN_NATIVE && _env.SWITCH > 0) + { + addToken(_current, _env); + addToken(":", _env); + _current = ""; + addFlow(_env); + } + else + { + _current += _code[i]; + } + break; + + case ",": + if(!_env.IN_STRING && !_env.IN_BLOCK_QUOTE && !_env.IN_NATIVE) + { + addToken(_current, _env); + addToken(",", _env); + _current = ""; + } + else + { + _current += _code[i]; + } + break; + + case "!": + case "+": + case "-": + + if(!_env.IN_STRING && !_env.IN_BLOCK_QUOTE && !_env.IN_NATIVE) + { + addToken(_current, _env); + if(_code[i + 1] && _code[i + 1] == _code[i]) + { + addToken(_code[i] + _code[i + 1], _env); + i++; + } + else if(_code[i + 1] && _code[i + 1] == "=") + { + // += -= + addToken(_code[i] + _code[i + 1], _env); + i++; + } + else + { + addToken(_code[i], _env); + } + _current = ""; + } + else + { + _current += _code[i]; + } + break; + case "*": + case ".": + if(!_env.IN_STRING && !_env.IN_BLOCK_QUOTE && !_env.IN_NATIVE) + { + var _number = isNumber(_current); + if(_number.check) + { + _current += _code[i]; + } + else + { + addToken(_current, _env); + addToken(_code[i], _env); + _current = ""; + } + } + else + { + _current += _code[i]; + } + break; + + default: + _current += _code[i]; + var _currentScope = []; + if(_env.TOKENS.length > 0) + { + _currentScope = _env.TOKENS[_env.TOKENS.length - 1]; + } + + var _lastToken; + if(_currentScope.length > 0) + { + _currentScope = _currentScope[_currentScope.length - 1]; + } + + if(_current == "in" && _code[i+1] == " ") + { + _env.FOR = 0; + } + + if(!_env.IN_STRING && !_env.IN_BLOCK_QUOTE && !_env.IN_NATIVE && _current == "function" && (_currentScope == ":" || _currentScope == "," || _currentScope == "[")) + { + var _functionID = "__NERD_LAMBDA_FUNC_" + Math.random().toString(36).slice(2, 12); + var _bracketState = 0; + var _end = -1; + for(var b = i; b < _code.length; b++) + { + if(_code[b] == "{") + { + _bracketState++; + } + else if(_code[b] == "}") + { + _bracketState--; + if(_bracketState == 0) + { + _end = b+1; + break; + } + } + } + var bodyLambda = "var " + _functionID + " = " + _code.substring(i-8, _end); + _current = ""; + _code = _code.substring(0, i+1) + _functionID + _code.substring(_end); + var _tmpEnv = createEnv(); + _tmpEnv.REGISTER = _tmpEnv.REGISTER.concat(_env.REGISTER); + var _tmpFn = parseCode(bodyLambda, 0, _tmpEnv); + _env.LAMBDA[_functionID] = { code: bodyLambda, env: _tmpEnv }; + } + + break; + } + _env.CURSOR++; + } + + addFlow(_env); + if(_current.length > 0 && i == _code.length) + { + error("[!] untermined instruction"); + } + if(_env.flowBracket < 0) + { + error("[!] Missing opening bracket {"); + } + else if(_env.flowBracket > 0) + { + error("[!] Missing closing bracket }"); + } + + if(_env.flowObject < 0) + { + error("[!] Missing opening bracket {"); + } + else if(_env.flowObject > 0) + { + error("[!] Missing closing bracket }"); + } + + if(_env.flowParenthesis < 0) + { + error("[!] Missing opening parenthesis ("); + } + else if(_env.flowParenthesis > 0) + { + error("[!] Missing closing parenthesis )"); + } + + if(_env.flowAccessor < 0) + { + error("[!] Missing opening accessor ["); + } + else if(_env.flowAccessor > 0) + { + error("[!] Missing closing accessor ]"); + } + + if(_env.IN_NATIVE) + { + error("[!] Missing closing native block }} ]"); + } + + if(_env.IN_STRING) + { + error("[!] Missing closing string \" }} ]"); + } + + if(_env.IN_BLOCK_QUOTE) + { + error("[!] Missing closing block quote ` }} ]"); + } + +} + +module.exports = parseCode; diff --git a/self/lib/require.js b/self/lib/require.js new file mode 100644 index 000000000..082207a33 --- /dev/null +++ b/self/lib/require.js @@ -0,0 +1,231 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +module.exports = genRequire; +var fs = require("fs"); +var CACHE = {}; + +function showModuleComment(_obj, _name) +{ + if(Array.isArray(_obj)) + { + for(var l = 0; l < _obj.length; l++ ) + { + console.log("[*] " + _name + ": " + _obj[l]); + } + } + else if(typeof(_obj) == "string") + { + console.log("[*] " + _name + ": " + _obj); + } + else if(typeof(_obj) == "object") + { + var _platform; + if(_obj[PLATFORM]) _platform = PLATFORM; + else if(_obj["default"]) _platform = "default"; + + if(_obj[_platform] && typeof(_obj[_platform]) == "object") + { + var currentCompiler = COMPILER.COMPILER.split(" ")[0]; + var _compiler; + if(_obj[_platform][currentCompiler]) _compiler = currentCompiler; + else if(_obj[_platform]["default"]) _compiler = "default"; + + if(_obj[_platform][_compiler]) showModuleComment(_obj[_platform][_compiler], _name); + } + else if(_obj[_platform]) showModuleComment(_obj[_platform], _name); + } +} + +function addModuleLib(_lib, modSource) +{ + if(Array.isArray(_lib)) + { + for(var l = 0; l < _lib.length; l++ ) + { + COMPILER.LIBS += _lib[l].replace(/{__MODULE__}/g, path.resolve(modSource)).replace(/{__ARCH__}/g, os.arch()).replace(/{__EXTERN__}/g, extern) + " "; + } + } + else if(typeof(_lib) == "string") + { + COMPILER.LIBS += _lib.replace(/{__MODULE__}/g, modSource).replace(/{__ARCH__}/g, os.arch()).replace(/{__EXTERN__}/g, extern) + " "; + } + else if(typeof(_lib) == "object") + { + var _platform; + if(_lib[PLATFORM]) _platform = PLATFORM; + else if(_lib["default"]) _platform = "default"; + + if(_lib[_platform] && Array.isArray(_lib[_platform])) + { + addModuleLib(_lib[_platform], modSource); + } + if(_lib[_platform] && typeof(_lib[_platform]) == "object") + { + var currentCompiler = COMPILER.COMPILER.split(" ")[0]; + var _compiler; + if(_lib[_platform][currentCompiler]) _compiler = currentCompiler; + else if(_lib[_platform]["default"]) _compiler = "default"; + + if(_lib[_platform][_compiler]) addModuleLib(_lib[_platform][_compiler], modSource); + } + else if(_lib[_platform]) addModuleLib(_lib[_platform], modSource); + } +} + +function genRequire(from, addSource, _env, _name) +{ + var modSource = ""; + var fileSource; + + if(COMPILER.DIR.length > 0) + { + from = COMPILER.DIR[COMPILER.DIR.length - 1]; + } + if(addSource.indexOf(from) > -1) + { + modSource = addSource; + } + else + { + modSource = path.join(from + addSource); + + } + COMPILER.DIR.push(__dirname + "/"); + var trySource = [modSource, modSource + "/" + "index.ng", from + "nerd_modules/" + addSource + "/index.ng", NERD_PATH + "/nerd_modules/" + addSource + "/index.ng", modSource + ".ng", modSource, ]; + var newSrc = ""; + for(var i = 0; i < trySource.length; i++) + { + try + { + modSource = path.dirname(trySource[i]) + "/"; + newSrc = fs.readFileSync(trySource[i]).toString(); + + if(CLI.cli["--env"] && CLI.cli["--env"].argument == "js" && addSource != "Module") + { + newSrc = `var module = require("Module");` + newSrc; + } + + if(CACHE[addSource]) + { + COMPILER.DIR.pop(); + return {add: false, module: CACHE[addSource], code: ""} + } + + fileSource = trySource[i]; + + var pkgPath = path.join(modSource, "package.json"); + var pkgObject; + if(fs.existsSync(pkgPath)) + { + var pkg = fs.readFileSync(pkgPath); + try + { + pkg = JSON.parse(pkg); + pkgObject = pkg; + if(pkg.nerd) + { + if(pkg.nerd.message) + { + showModuleComment(pkg.nerd.message, pkg.name); + } + if(pkg.nerd.env) + { + if(pkg.nerd.env.indexOf(COMPILER.ENV.name) < 0) + { + console.error("Nerd:\n\n[!] module " + addSource + " doesn't support env : " + COMPILER.ENV.name + " only these : " + pkg.nerd.env); + process.exit(1); + } + } + + if(pkg.nerd.target) + { + if(!COMPILER.TARGET) + { + console.error("Nerd:\n\n[!] module " + addSource + " require one of these targets : " + pkg.nerd.target + ". None specified"); + process.exit(1); + } + else if(pkg.nerd.target.indexOf(COMPILER.TARGET) < 0) + { + console.error("Nerd:\n\n[!] module " + addSource + " require one of these targets : " + pkg.nerd.target + ". " + COMPILER.TARGET + " specified"); + process.exit(1); + } + } + /* + if(pkg.nerd.expose) + { + COMPILER.EXPOSE = COMPILER.EXPOSE.concat(pkg.nerd.expose); + COMPILER.GLOBAL = COMPILER.GLOBAL.concat(pkg.nerd.expose); + } + */ + + if(pkg.nerd.lib) + { + addModuleLib(pkg.nerd.lib, modSource); + } + + } + } + catch(e) + { + console.log("Nerd:\n[!] " + e + " -> " + pkgPath.split("/").splice(-3).join("/")) + } + } + + break; + } + catch (e) {} + } + + var ext = "nd"; + if(fileSource && fileSource.split) + { + var _Ext = fileSource.split("."); + if(_Ext.length > 1) ext = _Ext[_Ext.length - 1]; + + + var _newEnv = createEnv(modSource); + parseCode(newSrc, 0, _newEnv); + parseAST(_newEnv); + var _generated = generateCode(_newEnv); + + var reqFN = "__MODULE_" + Math.random().toString(36).substr(2, 10); + addVar(reqFN, _env); + //CACHE[addSource] = reqFN + "(" + _name + ")"; + CACHE[addSource] = reqFN + "(__NERD_THIS)"; + + newSrc = "NerdCore::Global::var " + reqFN + " = NerdCore::VAR(NerdCore::Enum::Type::Function, new NerdCore::Type::function_t([&](NerdCore::VAR& __NERD_THIS, NerdCore::VAR* __NERD_VARARGS, int __NERD_VARLENGTH, void* __NERD_PTR = nullptr) mutable{\n"; + newSrc += _generated; + newSrc += "return NerdCore::Global::null;\n}));"; + + COMPILER.REQUIRE += newSrc + ";" + COMPILER.DIR.pop(); + //return {add: true, module: reqFN + "(" + _name + ")", code: newSrc} + return {add: true, module: reqFN + "(__NERD_THIS)", code: newSrc} + } + else + { + error("[!] module unknown: " + addSource); + } + +} \ No newline at end of file diff --git a/self/lib/verify.js b/self/lib/verify.js new file mode 100644 index 000000000..21a3ada39 --- /dev/null +++ b/self/lib/verify.js @@ -0,0 +1,1213 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +var isVariable = require("./check/isVariable.js"); +var isNumber = require("./check/isNumber.js"); +var isString = require("./check/isString.js"); +var isBoolean = require("./check/isBoolean.js"); + +function verifyExpression(_exp, _inst, _env) +{ + for(var i = 0; i < _env.FLOW[_inst].length; i++) + { + if(_env.FLOW[_inst][i] == "new") + { + _env.FLOW[_inst][i] = ""; + _env.FLOW[_inst][i+1] = "((NerdCore::Class::Function*)" + _env.FLOW[_inst][i+1] + ".data.ptr)->New" + } + } + + for(var z = 0; z < _exp.length; z++) + { + if(RESERVED.indexOf(_exp[z]) < 0 && BOOLEAN_KEYWORD.indexOf(_exp[z]) < 0 && isVariable(_exp[z]).check) + { + if( (!_exp[ z - 1] || _exp[ z - 1] != ".") && !varExists(_exp[z], _env)) + { + error(`[!] Unknown variable: ${_exp[z]} line:${_env.MAP[_inst][z].line + 1} position:${_env.MAP[_inst][z].position}${os.EOL}=> ${array_of_code[_env.MAP[_inst][z].line]}`); + } + } + if(_exp[z] == "__NERD_Multi_Line_Quote") + { + _env.FLOW[_inst][z + 2] = _exp[z + 2].slice(1, _exp[z + 2].length - 1) + } + } +} + +function checkLogicalState(_token, _next, _env, _ast) +{ + var _logicalState = getLogical(_env); + + if(_logicalState.DO) + { + if(_token == "}") + { + if(_next != "WHILE") + { + return { error: true, message: "Unexpected token, waiting for while"}; + } + } + else if(_token == "WHILE") + { + return { error: false }; + } + else + { + return { error: true, message: "Unexpected token, waiting for while"}; + } + } + + if(_logicalState.TRY) + { + if(_token == "}") + { + if(_next != "CATCH") + { + return { error: true, message: "Unexpected token, waiting for catch"}; + } + } + else if(_token == "CATCH") + { + return { error: false }; + } + else + { + return { error: true, message: "Unexpected token, waiting for catch"}; + } + } + if(_logicalState.FUNCTION) + { + if(_token == "}") + { + if(_ast && _ast[1] && (_ast[1] == "SEMI" || _ast[1] == ";")) + { + //good + } + else if(_next && (_next == "SEMI" || _next == ";")) + { + // good + } + else + { + //return { error: true, message: "Unexpected token, waiting for ';' after "}; + } + } + } + return { error: false }; +} + +function getFunctionThis(_flow, param, _env, _inst) +{ + var _end = -1; + for(var i = 0; i < _flow.length; i++) + { + if(_flow[i] == "[") + { + _end = i; + } + else if(_flow[i] == "(") + { + break; + } + } + return _end; +} + +function getFunctionArgs(_flow, param, _env, _inst, _call) +{ + var _return = {}; + + var _this = getFunctionThis(_flow, param, _env, _inst); + _return["this"] = "__NERD_THIS"; + + if(_this > 0) + { + _return["this"] = _flow.slice(0, _this).join(" "); + } + var _parenthesis = 0; + _return["args"] = []; + for(var i = 0; i < _flow.length; i++) + { + if(_flow[i] == "(") _parenthesis++; + else if(_flow[i] == ")") _parenthesis--; + else if(_parenthesis > 0) + { + + if(_flow[i][0] == '\"') + { + _return["args"].push(_flow[i]); + } + else if(_flow[i] == "new" && _flow[i+1]) + { + var _end = 0; + var _argP = 0; + for(var j = i; j < _flow.length; j++) + { + if(_flow[j] == "(") + { + _argP++; + } + else if(_flow[j] == ")") + { + _argP--; + if(_argP == 0) + { + _end = j + 1; + break; + } + } + } + _new = "__NERD_FUNCTION(" + _flow[i+1] + ")->New" + _flow.slice(i + 2, _end).join(" "); + _env.FLOW[_inst] = _flow.slice(0, i).concat(_new, ..._flow.slice(_end)); + } + else if(param && varExists(_flow[i], _env)) + { + _return["args"].push(_flow[i]); + } + else if(!param) + { + _return["args"].push(_flow[i]); + } + } + else if(_parenthesis < 0) + { + break; + } + } + return _return; +} + +function forgeArray(_var, _flow, _start, _inst, _env, _nested) +{ + if(!_nested) + { + _env.FLOW[_inst][_start - 1] = "new NerdCore::Class::Array()"; + _env.FLOW[_inst] = _env.FLOW[_inst].slice(0, _start); + _env.FLOW[_inst].push(";"); + } + + if(_flow[_start] != "]" ) + { + var a = 0; + for(var i = _start; i < _flow.length - 1; i+=2) + { + if(_flow[i] == "[" && _flow[i + 1] == "]") + { + _env.FLOW[_inst].push(_var + "[" + a + "]"); + _env.FLOW[_inst].push("="); + _env.FLOW[_inst].push("new NerdCore::Class::Array()"); + _env.FLOW[_inst].push(";"); + } + else if(_flow[i] == "{") + { + var _end = -1; + var _objBracket = 0; + for(var k = i; k < _flow.length; k++) + { + if(_flow[k] == "{") + { + _objBracket++; + } + else if(_flow[k] == "}") + { + _objBracket--; + if(_objBracket == 0) + { + _end = k; + break; + } + } + } + + _env.FLOW[_inst].push(_var + "[" + a + "]"); + _env.FLOW[_inst].push("="); + _env.FLOW[_inst] = _env.FLOW[_inst].concat(_flow.slice(i, _end)); + forgeObject(_var + "[" + a + "]", _flow, i+6, _inst, _env); + + i = _end; // we jump to the end of this object + } + else if(_flow[i] == "[") + { + _env.FLOW[_inst].push(_var + "[" + a + "]"); + _env.FLOW[_inst].push("="); + _env.FLOW[_inst].push("new NerdCore::Class::Array()"); + _env.FLOW[_inst].push(";"); + forgeArray( _var + "[" + a + "]", _flow, i+1, _inst, _env, true) + + var _endArrayIndex = -1; + var _indArr = 1; + for(var z = i+1; z < _flow.length; z++) + { + if(_flow[z] == "[") + { + _indArr++; + } + else if(_flow[z] == "]") + { + _indArr--; + if(_indArr == 0) + { + _endArrayIndex = z; + break; + } + } + } + if(_endArrayIndex > -1) + { + i += _endArrayIndex; + } + } + else if(_flow[i] != "]" && _flow[i] != ",") + { + + if(_env.LAMBDA[_flow[i]]) + { + var _l = _env.LAMBDA[_flow[i]]; + + for(var k = 0; k < _l.env.FLOW.length; k) + { + k = verifyFlow(_l.env.AST[k], _l.env.FLOW[k], k, _l.env.FLOW, _l.env); + } + + for(var j = 0; j < _l.env.FLOW.length; j++) + { + _env.FLOW[_inst].push( _l.env.FLOW[j].join(" ") ); + } + + } + else if(isVariable(_flow[i]).check) + { + if(!varExists(_flow[i], _env)) + { + error(`[!] Variable or token undefined: ${_flow[i]} line:${_env.MAP[_inst][i].line + 1} position:${_env.MAP[_inst][i].position}${os.EOL}=> ${array_of_code[_env.MAP[_inst][i].line]}`); + } + } + + _env.FLOW[_inst].push(_var + "[" + a + "]"); + _env.FLOW[_inst].push("="); + _env.FLOW[_inst].push(_flow[i]); + _env.FLOW[_inst].push(";"); + } + a++; + } + } +} + +function forgeObject(_var, _flow, _start, _inst, _env) +{ + if(typeof _var != "object") + { + _var = [_var]; + } + + var newFlow = _env.FLOW[_inst].slice(0, _start - 1); + newFlow.push("((NerdCore::Class::Function*)Object.data.ptr)->New()"); + newFlow.push(";"); + + for(var f = _start; f < _env.FLOW[_inst].length; f+=4) + { + if(_env.FLOW[_inst][f+1] && _env.FLOW[_inst][f+1] == ":" /*&& (_env.FLOW[_inst][f+2] != "}" && _env.FLOW[_inst][f+2] != "," )*/ ) + { + if(_env.FLOW[_inst][f + 2] && isVariable(_env.FLOW[_inst][f + 2]).check) + { + if(_env.LAMBDA[_env.FLOW[_inst][f + 2]]) + { + var _l = _env.LAMBDA[_env.FLOW[_inst][f + 2]]; + + for(var i = 0; i < _l.env.FLOW.length; i) + { + i = verifyFlow(_l.env.AST[i], _l.env.FLOW[i], i, _l.env.FLOW, _l.env); + } + + for(var j = 0; j < _l.env.FLOW.length; j++) + { + newFlow.push( _l.env.FLOW[j].join(" ") ); + } + + } + else if(!varExists(_env.FLOW[_inst][f + 2], _env)) + { + error(`[!] Variable or token undefined: ${_env.FLOW[_inst][f + 2]} line:${_env.MAP[_inst][f+2].line + 1} position:${_env.MAP[_inst][f+2].position}${os.EOL}=> ${array_of_code[_env.MAP[_inst][f+2].line]}`); + } + } + + // OK + if(_env.FLOW[_inst][f + 2] && _env.FLOW[_inst][f + 2] == "{") + { + if(isVariable(_env.FLOW[_inst][f]).check) + { + _var.push("[\"" + _env.FLOW[_inst][f] + "\"]"); + newFlow.push(_var.join("") + " = new NerdCore::Class::Object();"); + } + else + { + _var.push("[" + _env.FLOW[_inst][f] + "]"); + newFlow.push(_var.join("") + " = new NerdCore::Class::Object();"); + } + + if(_env.FLOW[_inst][f + 3] != ",") + { + f--; + } + } + else if(_env.FLOW[_inst][f + 2] && _env.FLOW[_inst][f + 2] == "[") + { + if(isVariable(_env.FLOW[_inst][f]).check) + { + _var.push("[\"" + _env.FLOW[_inst][f] + "\"]"); + newFlow.push(_var.join("") + " = new NerdCore::Class::Array();"); + } + else + { + _var.push("[" + _env.FLOW[_inst][f] + "]"); + newFlow.push(_var.join("") + " = new NerdCore::Class::Array();"); + } + + var _endArray = -1; + var _count = 0; + for(var indArray = f+2; indArray < _env.FLOW[_inst].length - 1; indArray++) + { + if(_env.FLOW[_inst][indArray] == "[") + { + _count++; + } + else if(_env.FLOW[_inst][indArray] == "]") + { + _count--; + if(_count == 0) + { + _endArray = indArray; + break; + } + } + } + + if(_endArray > -1) + { + var _virtualFlow = _env.FLOW[_inst].slice(f+2, _endArray + 1 ); + var _newFlowArray = {LAMBDA: _env.LAMBDA, FLOW:[[]]}; + forgeArray(_var.join(""), _virtualFlow, 1, 0, _newFlowArray, true) + newFlow.push(_newFlowArray.FLOW[0].join("")); + } + if(_env.FLOW[_inst][f + 3] != ",") + { + f--; + } + } + else + { + if(isVariable(_env.FLOW[_inst][f]).check) + { + newFlow.push(_var.join("") + "[\"" + _env.FLOW[_inst][f] + "\"] = " + _env.FLOW[_inst][f + 2] + ";"); + } + else newFlow.push(_var.join("") + "[" + _env.FLOW[_inst][f] + "] = " + _env.FLOW[_inst][f + 2] + ";"); + } + } + else + { + if(_env.FLOW[_inst][f] == "}" || _env.FLOW[_inst][f] == ",") + { + if(_env.FLOW[_inst][f] == "}") + { + _var.pop(); + } + f-=3; + } + } + } + _env.FLOW[_inst] = newFlow; +} + + +var checkCalls = function(_eq, _flow, _inst, _env) +{ + var _par = -1; + while(_par < _flow.length) + { + if(_flow[_par] == "(") + { + var _finished = false; + var _par = _eq; + while(!_finished) + { + var _args = getFunctionArgs(_flow.slice(_par), true, _env, _inst, true); + + while(_par < _flow.length) + { + if(_flow[_par] == "(") + { + break; + } + else if(_par == _flow.length - 1) + { + _finished = true; + } + _par++; + } + + if(_flow[_par]) + { + _flow[_par] = _flow[_par] + _args["this"]; + if(_args.args.length > 0) + { + _flow[_par] += ","; + } + + while(_flow[_par] != "(" && _par.length < _flow.length - 1) + { + _par++; + } + + _par++; + for(var a = 0; a < _args.args.length; a+=2) + { + if(isVariable(_args.args[a]).check && !varExists(_args.args[a], _env)) + { + error(`[!] Unknown variable or token: ${_args.args[a]} line:${_env.MAP[_inst][_eq + a].line + 1} position:${_env.MAP[_inst][_eq + a].position}${os.EOL}=> ${array_of_code[_env.MAP[_inst][_eq + a].line]}`); + } + + } + } + else + { + _finished = true; + } + + while(_flow[_par] == ")" || _flow[_par] == ",") + { + _par++; + } + + while( (_flow[_par] == ")" || _flow[_par] == "," || _flow[_par+1] == "," || _flow[_par+1] == ")") && _par < _flow.length) + { + if(_flow[_par] == ")" || _flow[_par] == ",") + { + _par++; + } + else + { + _par += 2; + } + } + } + + return _inst + 1; + } + /* + else if(_flow[_eq] == "=") + { + if(_flow[_eq + 1] == "{") + { + forgeObject( _left, _flow, _eq + 2, _inst, _env); + } + else if(_flow[_eq + 1] == "[") + { + forgeArray( _left, _flow, _eq + 2, _inst, _env) + } + else if(_flow[_eq + 1] == "[]") + { + forgeArray( _left, _flow, _eq + 2, _inst, _env); + } + else if(_flow[_eq + 1] == "function") + { + var _newFlow = _flow.slice(0, _eq + 1).concat(["__NERD_Create_Var_Scoped_Copy_Anon", "({"]); + var _args = getFunctionArgs(_flow, false, _env, _inst); + nextScope(_env); + addLogical("FUNCTION", _env); + _scope[_inst] = _newFlow; + var item = 0; + for(var a = 0; a < _args.args.length; a+=2) + { + addVar(_args.args[a], _env, 4, _inst); + _scope[_inst] = _scope[_inst].concat(["var", _args.args[a], ";", "if", "(", "__NERD_VARLENGTH", ">", item,")", _args.args[a], "=", `__NERD_VARARGS[${item}];`]); + item++; + } + verifyExpression(_flow.slice(_eq + 1), _inst, _env); + } + //return _inst + 1; + } + /* + else if(_flow[_eq] == "exit") + { + error(`[!] Invalid use of exit: ${_flow[eq]} line:${_env.MAP[_inst][eq].line + 1} position:${_env.MAP[_inst][eq].position}${os.EOL}=> ${array_of_code[_env.MAP[_inst][eq].line]}`); + } + */ + /* + else if(_flow[_eq] == "require") + { + var _args = getFunctionArgs(_flow, true, _env); + if(_args.length < 1) + { + error(`[!] Missing file parameter: ${_flow[eq]} line:${_env.MAP[_inst][eq].line + 1} position:${_env.MAP[_inst][eq].position}${os.EOL}=> ${array_of_code[_env.MAP[_inst][eq].line]}`); + } + verifyExpression(_flow.slice(_eq), _inst, _env); + var _required = genRequire(COMPILER.PATH, _args[0].slice(1, _args[0].length - 1), _env); + if(_required.add) + { + COMPILER.DECL += _required.code; + } + _scope[_inst] = []; + _scope[_inst].push(_required.module); + _scope[_inst].push(";"); + } + */ + _par++; + } +} + +function verifyFlow(_ast, _flow, _inst, _scope, _env, _main) +{ + if(_ast.length < 1) + { + return _inst + 1; + } + for(var z = 0; z < _flow.length; z++) + { + if(_flow[z] == ".") + { + _scope[_inst] = _scope[_inst].slice(0, z-1); + _scope[_inst].push(_flow[z-1]); + + for(var v = z; v < _flow.length; v++) + { + if(_flow[v] == ".") + { + _scope[_inst].push("["); + _scope[_inst].push("\"" + _flow[v+1] + "\""); + _scope[_inst].push("]"); + v++; + } + else + { + _scope[_inst].push(_flow[v]); + } + } + break; + } + } + _flow = _scope[_inst]; + + for(var i = 0; i < _flow.length; i++) + { + if(_flow[i] == "this") + { + _flow[i] = "__NERD_THIS"; + } + } + + var _next; + if(_scope[_inst+1] && _scope[_inst+1][0]) + { + _next = _scope[_inst+1][0]; + } + var _logicalError = checkLogicalState(_ast[0], _next, _env, _ast); + if(_logicalError.error) + { + error(`[!] ${_logicalError.message}: ${_flow[0]} line:${_env.MAP[_inst][0].line + 1} position:${_env.MAP[_inst][0].position}${os.EOL}=> ${array_of_code[_env.MAP[_inst][0].line]}`); + } + + switch(_flow[0]) + { + case "var": + if(RESERVED.indexOf(_flow[1]) > -1) + { + error(`[!] ${_flow[1]} is a reserved keyword: ${_flow[1]} line:${_env.MAP[_inst][1].line + 1} position:${_env.MAP[_inst][1].position}${os.EOL}=> ${array_of_code[_env.MAP[_inst][1].line]}`); + } + + if(_flow[2] != "=") + { + addVar(_flow[1], _env); + return _inst + 1; + } + else if(_flow[2] == "=") + { + var _existsVar = checkVarExists(_flow[1], _env, _flow); + if(_existsVar.error) + { + error(`[!] ${_existsVar.message}: line:${_env.MAP[_inst][1].line + 1} position:${_env.MAP[_inst][1].position}${os.EOL}=> ${array_of_code[_env.MAP[_inst][1].line]}`); + } + + if(_flow[3] == "function") + { + var _newFlow = [_flow[0], _flow[1], _flow[2], "__NERD_Create_Var_Scoped_Copy_Anon_With_Ref", "(" + _flow[1] + ",{"]; + var _args = getFunctionArgs(_flow, false, _env, _inst); + addVar(_flow[1], _env, 1, _inst); + nextScope(_env); + addLogical("FUNCTION", _env); + _scope[_inst] = _newFlow; + var item = 0; + for(var a = 0; a < _args.args.length; a+=2) + { + addVar(_args.args[a], _env, 5, _inst); + _scope[_inst] = _scope[_inst].concat(["var", _args.args[a], ";", "if", "(", "__NERD_VARLENGTH", ">", item,")", _args.args[a], "=", `__NERD_VARARGS[${item}];`]); + item++; + } + + //verifyExpression(_flow.slice(6), _inst, _env); + return _inst + 1; + } + else if(_flow[3] == "[" ) + { + addVar(_flow[1], _env); + forgeArray(_flow[1], _flow, 4, _inst, _env); + return _inst + 1; + } + else if(_flow[3] == "{}") + { + addVar(_flow[1], _env); + forgeObject(_flow[1], _flow, 4, _inst, _env); + return _inst + 1; + } + else if(_flow[3] == "{") + { + addVar(_flow[1], _env); + forgeObject(_flow[1], _flow, 4, _inst, _env); + return _inst + 1; + } + else if(_flow[3] == "exit") + { + error(`[!] Invalid use of exit: line:${_env.MAP[_inst][eq].line + 1} position:${_env.MAP[_inst][eq].position}${os.EOL}=> ${array_of_code[_env.MAP[_inst][eq].line]}`); + } + else if(_flow[3] == "require") + { + addVar(_flow[1], _env); + verifyExpression(_flow.slice(3), _inst, _env); + var _args = getFunctionArgs(_flow, true, _env, _inst); + if(_args.args.length != 1) + { + error(`[!] Invalid number of parameter, only one required: ${_flow[3]} line:${_env.MAP[_inst][3].line + 1} position:${_env.MAP[_inst][3].position}${os.EOL}=> ${array_of_code[_env.MAP[_inst][3].line]}`); + } + var _required = genRequire(COMPILER.PATH, _args.args[0].slice(1, _args.args[0].length - 1), _env, _flow[1]); + if(_required.add) + { + COMPILER.DECL += _required.code; + } + _scope[_inst] = _flow.slice(0, 3); + _scope[_inst].push(_required.module); + _scope[_inst].push(";"); + } + else + { + addVar(_flow[1], _env); + verifyExpression(_flow.slice(3), _inst, _env); + if(_flow[3] != "arguments") + { + checkCalls(3, _flow, _inst, _env); + } + } + + return _inst + 1; + } + break; + + nextScope(_env); + + break; + + case "}": + if(getLogical(_env).FUNCTION) + { + _scope[_inst] = ["return NerdCore::Global::null;"].concat(_flow).concat([")", ";"]); + removeLogical("FUNCTION", _env); + } + + if(_scope[_inst - 1] && (_scope[_inst - 1][0] == "case" || _scope[_inst - 1][0] == "default")) + { + _scope[_inst - 1].push("break;"); + _env.SWITCH_MAP.pop(); + } + popScope(_env); + + break; + + case "exit": + verifyExpression(_flow.slice(1), _inst, _env); + var _args = getFunctionArgs(_flow, true, _env, _inst); + if(_args.args.length < 1) + { + error(`[!] Invalid number of parameter, only one required: ${_flow[3]} line:${_env.MAP[_inst][3].line + 1} position:${_env.MAP[_inst][3].position}${os.EOL}=> ${array_of_code[_env.MAP[_inst][3].line]}`); + } + break; + case "require": + + var _args = getFunctionArgs(_flow, true, _env, _inst); + if(_args.args.length < 1) + { + error(`[!] Missing file parameter: ${_flow[3]} line:${_env.MAP[_inst][3].line + 1} position:${_env.MAP[_inst][3].position}${os.EOL}=> ${array_of_code[_env.MAP[_inst][3].line]}`); + } + verifyExpression(_flow.slice(1), _inst, _env); + + var _required = genRequire(COMPILER.PATH, _args.args[0].slice(1, _args.args[0].length - 1), _env, _flow[0]); + if(_required.add) + { + COMPILER.DECL += _required.code; + } + _scope[_inst] = []; + _scope[_inst].push(_required.module); + _scope[_inst].push(";"); + + break; + /* + case "function": + var _hoisting = []; + + var _bracketState = 0; + var _end = -1; + for(var s = _inst; s < _scope.length; s++) + { + for(var b = i; b < _scope[s].length; b++) + { + if(_scope[s][b] == "{") + { + _bracketState++; + } + else if(_scope[s][b] == "}") + { + _bracketState--; + if(_bracketState == 0) + { + _end = s+1; + break; + } + } + } + if(s > -1) + { + break; + } + } + + _hoisting = _hoisting.concat(_scope.slice(0, _inst), _scope.slice(_end)); + var _newScope = [].concat(_scope.slice(0, _inst), _scope.slice(_end)); + + _env.FLOW = _env.FLOW.slice(0, _inst).concat(_env.FLOW.slice(_end)); + _env.AST = _env.AST.slice(0, _inst).concat(_env.AST.slice(_end)); + + return _inst; + break; + */ + + case "define": + + _scope[_inst] = []; + if(_flow[2] == "__NERD_Multi_Line_Quote") + { + COMPILER.DECL += "\n" + _flow[4].slice(1, _flow[4].length -1) + "\n"; + } + else COMPILER.DECL += "\n" + _flow[2].slice(1, _flow[2].length - 1) + "\n"; + return _inst + 1; + + break; + + case "include": + + _scope[_inst] = [""]; + if(_flow[2][1] == "<") + { + COMPILER.INCLUDE += "#include " + _flow[2].slice(1, _flow[2].length - 1) + "\n"; + } + else + { + var _toInclude = _flow[2].slice(1, _flow[2].length - 1); + var _pathToInclude = path.resolve(path.join( _env.PATH, _toInclude)); + + if(fs.existsSync(_pathToInclude)) + { + COMPILER.INCLUDE += "#include \"" + _pathToInclude + "\"\n" + } + else COMPILER.INCLUDE += "#include " + _flow[2] + "\n"; + } + return _inst + 1; + + break; + + case "for": + if(_flow[2] == "auto") + { + break; + }; + nextScope(_env); + + var _for = _flow.slice(2); + + if(_flow[4] == "in") + { + addVar(_flow[3], _env); + var _functionID = "__NERD_IT_FUNC_" + Math.random().toString(36).slice(2, 12); + + var _iterator = _for.slice(3, 4); + verifyExpression(_iterator, _inst, _env); + _scope[_inst] = + [ + "var", _functionID, "=", "function", "(", _for[1], ")", "{", + ]; + var _nextScope = + [ + "{{if(" + _iterator[0] + ".type == NerdCore::Enum::Type::Object){ for(auto __NERD_ITERATOR = ((NerdCore::Class::Object*)" + _iterator[0] + ".data.ptr)->object.begin(); __NERD_ITERATOR != ((NerdCore::Class::Object*)" + _iterator[0] + ".data.ptr)->object.end(); ++__NERD_ITERATOR) {if(__NERD_ITERATOR->first.compare(\"__proto__\") != 0) {var " + _for[1] + " = __NERD_ITERATOR->first;" + _functionID + "(null," + _for[1] + ");}}}else if(" + _iterator[0] + ".type == NerdCore::Enum::Type::Array){for(std::size_t __NERD_ITERATOR = 0; __NERD_ITERATOR < ((NerdCore::Class::Array*)" + _iterator[0] + ".data.ptr)->value.size(); __NERD_ITERATOR++) {" + _functionID + "(null,__NERD_ITERATOR);}}else if(" + _iterator[0] + ".type == NerdCore::Enum::Type::String){for(std::size_t __NERD_ITERATOR = 0; __NERD_ITERATOR < ((NerdCore::Class::String*)" + _iterator[0] + ".data.ptr)->value.length(); __NERD_ITERATOR++) {var " + _for[1] + " = __NERD_ITERATOR;" + _functionID + "(null," + _for[1] + ");}}}}", + ]; + + + + var sIndex = 1; + var endOfScope = 0; + for(var f = _inst+1; f < _scope.length; f++) + { + endOfScope = f; + if(_scope[f][_scope[f].length - 1] == "}") + { + sIndex--; + } + if(sIndex == 0) + { + break; + } + } + + _env.FLOW.splice(endOfScope+1, 0, _nextScope); + _env.AST.splice(endOfScope+1, 0, ["NATIVE"]); + + return _inst; + } + + + + var _firstComa = _for.indexOf(";"); + var _init = _for.slice(0, _firstComa); + + _for = _for.slice(_firstComa + 1); + + var _secondComa = _for.indexOf(";"); + var _loop = _for.slice(0, _secondComa); + + var _it = _for.slice(_secondComa + 1, _for.length - 2); + + if(_init[0] == "var") + { + addVar(_init[1], _env); + } + else + { + verifyExpression(_init, _inst, _env); + } + + verifyExpression(_loop, _inst, _env); + verifyExpression(_it, _inst, _env); + + return _inst + 1; + break; + + case "if": + verifyExpression(_flow.slice(2, _flow.length - 2), _inst, _env); + + addLogical("IF", _env); + nextScope(_env); + return _inst + 1; + break; + + case "else": + if(!getLogical(_env).IF) + { + error(`[!] Use if before else/else if: ${_flow[0]} line:${_env.MAP[_inst][0].line + 1} position:${_env.MAP[_inst][0].position}${os.EOL}=> ${array_of_code[_env.MAP[_inst][0].line]}`); + } + if(_flow[1] && _flow[1] == "if") + { + verifyExpression(_flow.slice(3, _flow.length - 2), _inst, _env); + nextScope(_env); + } + else + { + nextScope(_env); + } + + return _inst + 1; + break; + + case "do": + + addLogical("DO", _env); + + nextScope(_env); + return _inst + 1; + + break; + + case "while": + verifyExpression(_flow.slice(2, _flow.length - 2), _inst, _env); + if(getLogical(_env).DO) + { + removeLogical("DO", _env); + } + else + { + nextScope(_env); + } + return _inst + 1; + break; + + case ";": + + break; + + case "try": + + addLogical("TRY", _env); + + nextScope(_env); + return _inst + 1; + break; + + case "catch": + + _scope[_inst][2] = "var " + _scope[_inst][2]; + + if(getLogical(_env).TRY) + { + removeLogical("TRY", _env); + } + else + { + error(`[!] Missing try statement before catch: ${_flow[0]} line:${_env.MAP[_inst][0].line + 1} position:${_env.MAP[_inst][0].position}${os.EOL}=> ${array_of_code[_env.MAP[_inst][0].line]}`); + } + nextScope(_env); + return _inst + 1; + break; + + case "return": + if(_flow[1] == "{") + { + var _returnVar = "__NERD_RETURN_" + _env.MAP[_inst][0].line; + _env.FLOW[_inst] = ["var", _returnVar, "="].concat(_env.FLOW[_inst].slice(1)); + forgeObject(_returnVar, _flow, 4, _inst, _env); + _env.FLOW[_inst].push("return"); + _env.FLOW[_inst].push(" "); + _env.FLOW[_inst].push(_returnVar); + _env.FLOW[_inst].push(";"); + } + else if(_flow[1] == ";") + { + _flow[1] = "null;"; + } + else + { + verifyExpression(_flow.slice(1), _inst, _env); + if(_ast[1] != "VARIABLE" && _ast[1] != "EXPRESSION") + { + _flow[1] = "var(" + _flow[1] + ")"; + } + } + return _inst + 1; + break; + case "switch": + nextScope(_env); + var _current = _flow[2]; + + if(isString(_current).check || isBoolean(_current).check || isNumber(_current).check) + { + _current = "var(" + _current + ")"; + } + _env.SWITCH_MAP.push(_current); + _scope[_inst] = ["if", "(", "false", ")", "{"]; + //_scope[_inst] = ["var", "__NERD_TEST", "=", _flow[2], ";"]; + break; + + case "case": + if(_env.SWITCH_MAP.length < 1) + { + error("[!] case without switch"); + } + if(_scope[_inst-1] && (!_scope[_inst-1][0] || (_scope[_inst-1][0] && (_scope[_inst-1][0] != "case")))) + { + _scope[_inst-1].push("}"); + } + + var _current = _flow[1]; + + if(isString(_current).check || isBoolean(_current).check || isNumber(_current).check) + { + _current = "var(" + _current + ")"; + } + + _scope[_inst] = ["else", "if", "(", _current, "==", _env.SWITCH_MAP[_env.SWITCH_MAP.length - 1]]; + while(_scope[_inst+1] && _scope[_inst+1][0] && _scope[_inst+1][0] == "case") + { + _scope[_inst].push(" || "); + if(isString(_scope[_inst+1][0]).check || isBoolean(_scope[_inst+1][0]).check || isNumber(_scope[_inst+1][0]).check) + { + _scope[_inst].push("var"); + _scope[_inst].push("("); + _scope[_inst].push(_scope[_inst+1][1]); + _scope[_inst].push(")"); + } + else + { + _scope[_inst].push(_scope[_inst+1][1]); + } + + _scope[_inst].push("=="); + _scope[_inst].push(_env.SWITCH_MAP[_env.SWITCH_MAP.length - 1]); + _scope[_inst+1] = []; + _inst++; + } + _scope[_inst].push(")"); + _scope[_inst].push("{"); + + break; + + case "default": + if(_scope[_inst-1] && (!_scope[_inst-1][0] || (_scope[_inst-1][0] && (_scope[_inst-1][0] != "case")))) + { + _scope[_inst-1].push("}"); + } + _scope[_inst] = ["else", "{"]; + break; + + + case "break": + _scope[_inst] = []; + break; + + case "true": + case "false": + case "new": + + break; + + case "this": + _flow[0] = "__NERD_THIS"; + break; + + default: + if(varExists(_flow[0], _env)) + { + /* + if(!CLI.cli["--env"] || CLI.cli["--env"].argument != "js") + { + if(_flow[0][0] == "_" && _flow[1] && _flow[1] == "=") + { + error(`[!] Cannot reassign value to constant: ${_flow[0]} line:${_env.MAP[_inst][0].line + 1} position:${_env.MAP[_inst][0].position}${os.EOL}=> ${array_of_code[_env.MAP[_inst][0].line]}`); + } + } + */ + + if(_flow[1]) + { + for(var i = 0; i < _flow.length - 1; i++) + { + if(_flow[i] == "require") + { + verifyExpression(_flow.slice(i), _inst, _env); + var _args = getFunctionArgs(_flow, true, _env, _inst); + if(_args.args.length != 1) + { + error(`[!] Invalid number of parameter, only one required: ${_flow[3]} line:${_env.MAP[_inst][3].line + 1} position:${_env.MAP[_inst][3].position}${os.EOL}=> ${array_of_code[_env.MAP[_inst][3].line]}`); + } + var _required = genRequire(COMPILER.PATH, _args.args[0].slice(1, _args.args[0].length - 1), _env); + if(_required.add) + { + COMPILER.DECL += _required.code; + } + _scope[_inst] = _flow.slice(0, i); + _scope[_inst].push(_required.module); + _scope[_inst].push(";"); + break; + } + } + + var _eq = -1; + while(_eq < _flow.length) + { + for(var e = _eq; e < _flow.length; e++) + { + if(_flow[e] == "=") + { + _eq = e; + break; + } + } + + var _left = _flow.slice(0, _eq).join(" "); + + if(_flow[_eq] == "=") + { + if(_flow[_eq + 1] == "{") + { + forgeObject( _left, _flow, _eq + 2, _inst, _env); + } + else if(_flow[_eq + 1] == "[") + { + forgeArray( _left, _flow, _eq + 2, _inst, _env) + } + else if(_flow[_eq + 1] == "[]") + { + forgeArray( _left, _flow, _eq + 2, _inst, _env); + } + else if(_flow[_eq + 1] == "function") + { + var _newFlow = _flow.slice(0, _eq + 1).concat(["__NERD_Create_Var_Scoped_Copy_Anon", "({"]); + var _args = getFunctionArgs(_flow, false, _env, _inst); + nextScope(_env); + addLogical("FUNCTION", _env); + _scope[_inst] = _newFlow; + var item = 0; + for(var a = 0; a < _args.args.length; a+=2) + { + addVar(_args.args[a], _env, 4, _inst); + _scope[_inst] = _scope[_inst].concat(["var", _args.args[a], ";", "if", "(", "__NERD_VARLENGTH", ">", item,")", _args.args[a], "=", `__NERD_VARARGS[${item}];`]); + item++; + } + verifyExpression(_flow.slice(_eq + 1), _inst, _env); + } + break; + //return _inst + 1; + } + _eq++; + } + + if(_eq == _flow.length) + { + _eq = 0; + } + else + { + _eq++; + } + + checkCalls(_eq, _flow, _inst, _env); + + } + } + else if(_ast[0] == "NATIVE") + { + // nothing to do + } + else + { + error(`[!] Unknown variable or token: ${_flow[0]} line:${_env.MAP[_inst][0].line + 1} position:${_env.MAP[_inst][0].position}${os.EOL}=> ${array_of_code[_env.MAP[_inst][0].line]}`); + } + + break; + } + verifyExpression(_flow, _inst, _env); + return _inst+1; +} + +module.exports = verifyFlow; \ No newline at end of file diff --git a/self/nerd.js b/self/nerd.js new file mode 100644 index 000000000..1a06d0f55 --- /dev/null +++ b/self/nerd.js @@ -0,0 +1,637 @@ +/* + Copyright (c) 2021 NerdLang - Adrien THIERRY and contributors + + 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. + +*/ + +global.fs = require("fs"); +global.os = require("os"); +global.path = require("path"); +global.process = require("process"); +global.child_process = require("child_process"); +global.execSync = global.child_process.execSync; + +global.PACKAGE = JSON.parse(global.fs.readFileSync(global.path.join(__dirname, "package.json"))); +global.VERSION = global.PACKAGE.version; + +global.extern = global.path.join(__dirname, "external"); + +/* +var parseCLI = require("./base/cli/cliParser.js"); +var getExt = require("./base/util/getExt.js"); +var getTips = require("./base/util/getTips.js"); +var Flash = require("./base/util/flash.js"); +global.rmdir = require("./base/util/rmdir.js"); +global.copyRecursiveSync = require("./base/util/copyRecursive.js"); +global.copyDirSync = require("./base/util/copyDirSync.js"); + +var CURRENT = global.process.cwd(); +var TARGET = require("./base/compiler/target.js"); + + +global.PLATFORM = os.platform(); +global.ARCH = os.arch(); + +global.COMPILER = {}; +global.NERD_PATH = __dirname; +var DEFAULT_COMPILER = "native"; + +global.CLI = parseCLI(process.argv); + +if(global.CLI.error) +{ + console.log(global.CLI.msg); + return 1; +} +require("./lib/env.js"); +global.parseCode = require("./lib/parser.js"); +global.verifyFlow = require("./lib/verify.js"); + + +global.CONFIGPATH = os.homedir() + path.sep + ".nerd"; +global.CONFIGFILE = CONFIGPATH + "/" + "nerd.json"; +global.CONFIG = {}; + + +var ACTION = "build"; +if(global.CLI.cli["--help"] || global.CLI.cli["-h"]) ACTION = "help"; +else if(global.CLI.cli["--example"] || global.CLI.cli["--examples"]) ACTION = "example"; +else if(global.CLI.cli["--version"] || global.CLI.cli["-v"]) ACTION = "version"; +else if(global.CLI.cli["--project"]) ACTION = "showproject"; +else if(global.CLI.cli["--clean"] || global.CLI.cli["--purge"]) ACTION = "clean"; +else if(global.CLI.cli["--setauthor"] || global.CLI.cli["--setid"] || global.CLI.cli["--setkey"] || global.CLI.cli["--sethash"] || global.CLI.cli["--setsdk"] || global.CLI.cli["--setndk"] || global.CLI.cli["--setwin_inc_ucrt"] || global.CLI.cli["--setwin_lib_ucrt"] || global.CLI.cli["--setwin_lib_um"] || global.CLI.cli["--setapi"] || global.CLI.cli["--setport"] || global.CLI.cli["--setxcode"]) ACTION = "setconfig"; +else if(global.CLI.cli["--config"]) ACTION = "showconfig"; +else if(global.CLI.cli["--reinit"]) ACTION = "reinitconfig"; + + +var getExampleFiles = function(dir, list) +{ + if(!list) + { + list = []; + } + + var files = fs.readdirSync(dir); + for (var i in files) + { + var name = dir + path.sep + files[i]; + if (fs.statSync(name).isDirectory()) + { + getExampleFiles(name, list); + } + else + { + list.push(name); + } + } + return list; +} + +var copyExample = function() +{ + var folder = ["c"]; + var list = getExampleFiles(path.join(__dirname, "example")); + for(var l in list) + { + var name = list[l].split(path.sep); + if(name[name.length - 2] && folder.indexOf(name[name.length - 2]) > -1) + { + try + { + fs.mkdirSync(name[name.length - 2]); + }catch(e){} + name = name[name.length - 2] + "/" + name[name.length - 1]; + } + else name = name[name.length - 1]; + var content = fs.readFileSync(list[l]); + fs.writeFileSync(name, content); + console.log("[+] Copy of " + name + " done"); + } +} + +var Init = function() +{ + if(!fs.existsSync(CONFIGPATH)) fs.mkdirSync(CONFIGPATH); + try + { + var writeConfig = false; + var config = ""; + config = fs.readFileSync(CONFIGFILE); + config = JSON.parse(config); + if(!config.version) + { + config.version = VERSION; + config.port = 443; + fs.writeFileSync(CONFIGFILE, JSON.stringify(config)); + } + } + catch (e) + { + writeConfig = true; + } + + if(!config || writeConfig) + { + var defaultConfig = { author: os.userInfo().username, id: "", key:"", hash:"SHA256", api:"api.nerdlang.com", port:443, version: VERSION, sdk: "", ndk: "", win_inc_ucrt: "", win_lib_ucrt: "", win_lib_um: "", xcode: "/Applications/Xcode.app"}; + fs.writeFileSync(CONFIGFILE, JSON.stringify(defaultConfig)); + } +} + +var readConfig = function() +{ + try + { + var tmp = fs.readFileSync(CONFIGFILE); + CONFIG = JSON.parse(tmp); + } + catch (e) + { + Init(); + readConfig(); + } +} + +var showConfig = function(str) +{ + console.log(); + if(str) console.log(str); + else console.log("[*] Current config :"); + console.log("author : " + CONFIG.author); + console.log("id : " + CONFIG.id); + console.log("key : " + CONFIG.key); + console.log("hash : " + CONFIG.hash); + console.log("api : " + CONFIG.api); + console.log("port : " + CONFIG.port); + console.log("version : " + VERSION); + console.log("Android SDK : " + CONFIG.sdk); + console.log("Android NDK : " + CONFIG.ndk); + console.log("Windows Include UCRT : " + CONFIG.win_inc_ucrt); + console.log("Android Lib UCRT : " + CONFIG.win_lib_ucrt); + console.log("Android Lib UM : " + CONFIG.win_lib_um); + console.log("iOS xCode : " + CONFIG.xcode); + console.log(); +} + +var setConfig = function() +{ + try + { + if(global.CLI.cli["--setauthor"]) CONFIG.author = global.CLI.cli["--setauthor"].argument; + if(global.CLI.cli["--setid"]) CONFIG.id = global.CLI.cli["--setid"].argument; + if(global.CLI.cli["--setkey"]) CONFIG.key = global.CLI.cli["--setkey"].argument; + if(global.CLI.cli["--setapi"]) CONFIG.api = global.CLI.cli["--setapi"].argument; + if(global.CLI.cli["--setport"]) CONFIG.port = parseInt(global.CLI.cli["--setport"].argument); + //if(global.CLI.cli["--setsdk"]) CONFIG.sdk = global.CLI.cli["--setsdk"].argument.replace(/\\/g, "\\\\").replace(/:/g, "\\\:"); // for android + //if(global.CLI.cli["--setndk"]) CONFIG.ndk = global.CLI.cli["--setndk"].argument.replace(/\\/g, "\\\\").replace(/:/g, "\\\:"); // for android + if(global.CLI.cli["--setwin_ucrt"]) CONFIG.win_ucrt = global.CLI.cli["--setwin_ucrt"].argument; + if(global.CLI.cli["--setwin_inc_ucrt"]) CONFIG.win_inc_ucrt = global.CLI.cli["--setwin_inc_ucrt"].argument; + if(global.CLI.cli["--setwin_lib_ucrt"]) CONFIG.win_lib_ucrt = global.CLI.cli["--setwin_lib_ucrt"].argument; + if(global.CLI.cli["--setwin_lib_um"]) CONFIG.win_lib_um = global.CLI.cli["--setwin_lib_um"].argument; + if(global.CLI.cli["--setxcode"]) CONFIG.xcode = global.CLI.cli["--setxcode"].argument; + + if(global.CLI.cli["--sethash"]) + { + var hash = global.CLI.cli["--sethash"].argument.toUpperCase(); + if(validHash.indexOf(hash) < 0) + { + console.dir("[!] Hash is not valid and won't be saved. Valid hash are : MD5, SHA256 ans SHA512"); + } + else + { + CONFIG.hash = hash; + } + } + + fs.writeFileSync(CONFIGFILE, JSON.stringify(CONFIG)); + } + catch (e) + { + console.log(e); + } +} + +var reinitConfig = function() +{ + try + { + var defaultConfig = { author: os.userInfo().username, id: "", key:"", hash:"SHA256", api:"api.nerdlang.com", "port":443, sdk: "", ndk: "", win_inc_ucrt: "", win_lib_ucrt: "", win_lib_um: "", xcode: "/Applications/Xcode.app"}; + fs.writeFileSync(CONFIGFILE, JSON.stringify(defaultConfig)); + readConfig(); + showConfig("[*] Config reinitialized :"); + } catch (e) + { + console.log(e); + } +} + +var showProject = function() +{ + var project = "project.json"; + if(global.CLI.stack && global.CLI.stack.length > 0) + { + project = global.CLI.stack[global.CLI.stack.length - 1]; + } + try + { + var pConf = fs.readFileSync(project); + var jConf = JSON.parse(pConf); + printProject(jConf); + } + catch (e) + { + console.dir("[!] Error : " + e.message); + } + +} + +var Clean = function(purge) +{ + var project = "project.json"; + if(global.CLI.stack && global.CLI.stack.length > 0) + { + project = global.CLI.stack[global.CLI.stack.length - 1]; + } + try + { + var pConf = fs.readFileSync(project); + var jConf = JSON.parse(pConf); + if(jConf.main) + { + if( (global.CLI.cli["--purge"] || purge) && jConf.out) + { + var outFile = jConf.out; + if(jConf.out[0] != path.sep) + { + outFile = path.join(path.dirname(project), jConf.out); + } + try{fs.unlinkSync(outFile);}catch(e){} + } + } + try + { + fs.unlinkSync(project); + }catch(e){} + } + catch (e) + { + console.dir("[!] Error : " + e.message); + } +} + +var printProject = function(obj) +{ + console.log(); + console.log("[*] Project configuration :\n"); + console.log("Main file : " + obj.main); + console.log("Output : " + obj.out); + console.log("Target : " + obj.target); + console.log("Preset : " + obj.preset); + console.log(); +} + +var Build = function(prepare) +{ + global.DEBUG = false; + if(global.CLI.cli["--debug"]) + { + global.DEBUG = true; + } + if(global.CLI.cli["--build"]) DEFAULT_COMPILER = global.CLI.cli["--build"].argument; + else if(global.CLI.cli["-b"]) DEFAULT_COMPILER = global.CLI.cli["-b"].argument; + + COMPILER = require(path.join(__dirname, "compiler", DEFAULT_COMPILER, "compiler.js")); + + if(global.CLI.cli["--compiler"] && global.CLI.cli["--compiler"].argument) COMPILER.COMPILER = global.CLI.cli["--compiler"].argument; + else if(global.CLI.cli["-c"] && global.CLI.cli["-c"].argument) COMPILER.COMPILER = global.CLI.cli["-c"].argument; + + var preset; + if(global.CLI.cli["--preset"] && global.CLI.cli["--preset"].argument) preset = global.CLI.cli["--preset"].argument; + + var env; + if(global.CLI.cli["--env"] && global.CLI.cli["--env"].argument) env = global.CLI.cli["--env"].argument; + + if(!preset) preset = "speed"; + COMPILER.preset = preset; + + if(!env) env = "std"; + + var target; + if(global.CLI.cli["--target"] && global.CLI.cli["--target"].argument) target = global.CLI.cli["--target"].argument; + COMPILER.TARGET = target; + + var spec; + if(global.CLI.cli["--spec"] && global.CLI.cli["--spec"].argument) spec = global.CLI.cli["--spec"].argument; + COMPILER.SPEC = spec; + + var _tmp; + if(global.CLI.cli["--tmp"] && global.CLI.cli["--tmp"].argument) + _tmp = path.resolve(global.CLI.cli["--tmp"].argument); + else { + var _current = process.cwd(); + var _npath = path.join(_current, ".nerd"); + _tmp = path.join(_npath, Math.random().toString(36).substr(2, 5)); + } + COMPILER.TMP_FOLDER = _tmp; + + if(!global.CLI.stack || global.CLI.stack.length < 1) + { + console.error("[!] Missing file to compile or project.json path, 'nerd --help' if you need help"); + return; + } + else + { + var QUIET = false; + var _in = global.CLI.stack[0]; + var main; + COMPILER.IN = _in; + fs.readFile(_in, function(err, fileData) + { + if(err) + { + console.error("[!] Error : " + err.message); + return; + } + else + { + + Check(_in); + + var ext = "ng"; + var _Ext = _in.split("."); + if(_Ext.length > 1) ext = _Ext[_Ext.length - 1]; + + var _current = process.cwd(); + var _npath = path.join(_current, ".nerd"); + try { fs.mkdirSync(_npath); } catch(e){}; + if(COMPILER.ENV.init) COMPILER.ENV.init(COMPILER.TMP_FOLDER); + else try { fs.mkdirSync(COMPILER.TMP_FOLDER); } catch(e){}; + + var _libOut = COMPILER.TMP_FOLDER; + if(COMPILER.ENV.prepare) + { + var _tmpLibOut = COMPILER.ENV.prepare(COMPILER.TMP_FOLDER); + if(_tmpLibOut) _libOut = _tmpLibOut; + } + + COMPILER.Prepare(_libOut); + + var fProject = false; + var prjectConf = {}; + if(path.basename(_in) == "project.json") + { + try + { + projectConf = JSON.parse(fileData); + fProject = true; + single = false; + } + catch (e) + { + console.error("[!] Error with project.json : " + e.message); + return; + } + } + + var _binoutput = ""; + if(fProject) + { + _binoutput = projectConf.out; + } + else _binoutput = path.basename(_in).slice(0, path.basename(_in).length - path.extname(_in).length); + + if(global.CLI.cli["-o"]) + { + _binoutput = global.CLI.cli["-o"].argument; + } + else if(global.CLI.cli["--out"]) + { + _binoutput = global.CLI.cli["--out"].argument; + } + + _binoutput = path.join(process.cwd(), _binoutput); + + var _cout = path.join(COMPILER.TMP_FOLDER, path.basename(_in).slice(0, path.basename(_in).length - path.extname(_in).length) + ".cpp"); + + _binoutput = COMPILER.Out(_binoutput); + + var projTo = ""; + var tmp = _in.split("/"); + + projTo = _binoutput; + + main = _in.split(path.sep); + main = main[main.length - 1]; + + var tips = ""; + + if(!QUIET) console.log("[*] Generating source file"); + + var _code = fs.readFileSync(path.resolve(_in)).toString(); + + global.array_of_code = _code.split(os.EOL); + _code = COMPILER.Parse(_code, _in); + + if(COMPILER.ENV.write) + { + COMPILER.ENV.write(COMPILER.MAIN, _cout); + } + else + { + if((!global.CLI.cli["--profile"]) || global.CLI.cli["--profile"].argument != "use") + { + fs.writeFileSync(_cout, COMPILER.MAIN); + } + } + + if(global.CLI.cli["--generate"]) + { + if(!QUIET) console.log("[*] Source generated in " + path.dirname(_cout)); + process.exit(0); + } + + if(!QUIET) console.log("[*] Compiling with preset: " + COMPILER.preset); + try + { + COMPILER.Compile(COMPILER.TMP_FOLDER, _cout); + } + catch(e) + { + console.log(e); + console.log("[!] Compilation error"); + process.exit(1); + } + + if(COMPILER.ENV.post) COMPILER.ENV.post(); + + try + { + fs.chmodSync(_binoutput, "755"); + } + catch(e){} + + if(COMPILER.Package) COMPILER.Package(); + + process.chdir(NERD_PATH); + + if(!global.CLI.cli["--conserve"]) + { + var _current = process.cwd(); + process.chdir(_current); + rmdir(COMPILER.TMP_FOLDER, function() {}); + } + + var verb = false; + if(global.CLI.cli["--verbose"]) verb = true; + + var bin; + try + { + bin = fs.statSync(_binoutput); + } + catch(e){} + + if(COMPILER.ENV.clean && typeof(COMPILER.ENV.clean) == "function") + { + COMPILER.ENV.clean(); + } + + if(verb && bin) + { + console.log("[+] Compilation done\n"); + console.log("[*] Informations :\n"); + var size = "Size : "; + if(bin.size < 1000) size += bin.size + " o"; + else if(bin.size < 1000000) size += (bin.size / 1000) + " ko"; + else size += (bin.size / 1000000) + " mo"; + console.log(size); + console.log("Main file : " + main); + console.log("Output : " + projTo); + console.log("Preset : " + preset); + } + + if(global.CLI.cli["--tips"] && tips && tips.length > 0) console.log("\n" + tips + "\n"); + + if(global.CLI.cli["--flash"]) Flash(projTo, global.CLI.cli["--flash"].argument, target, verb); + + if(global.CLI.cli["--run"]) + { + console.log(); + console.log("[*] Executing " + _binoutput); + if(!COMPILER.ENV.run) + { + var _binexec = child_process.spawnSync(_binoutput, + [], + { + detached: false, + stdio: [process.stdin, process.stdout, process.stderr], + cwd: process.cwd(), + env: process.env + }); + if(_binexec.error) + { + console.log(_binexec.error); + } + } + else COMPILER.ENV.run(); + } + if(!global.CLI.cli["--prepare"]) + { + var _current = path.dirname(path.resolve(process.argv[1])); + var _native = path.join(_current, "core", "nativejs"); + var _to = path.resolve(projTo); + var _fullPathCompile = path.resolve(main); + } + else + { + var pObj = { main: main, out:projTo, target:target, preset:preset }; + printProject(pObj); + } + } + }); + } +} + +var showVersion = function() +{ + console.log("Nerd v" + VERSION); +} + +var Check = function(file) +{ + if(file.split(".").pop() != "js") return; + + if(global.CLI.cli["--check"]) process.exit(); +} + +var Help = function() +{ + showVersion(); + console.log("\n[*] Compile :\nnerd [--env std|node|arduino|wasm|android] [--target the-target] [--run] [--reg 1000] [--preset speed|size] [-o output] [--tips] [--flash device] source.js|project.json\n"); + console.log("[*] Show project :\nnerd [--project] [project.json]\n"); + console.log("[*] Clean project :\nnerd [--clean] [--purge] [path_to_project.json]\n"); + console.log("[*] Copy example files :\nnerd --example\n"); + console.log("[*] Nerd version :\nnerd --version\n"); +} + + +switch(ACTION) +{ + case "version": + showVersion(); + break; + + case "help": + Help(); + break; + + case "example": + copyExample(); + break; + + case "showproject": + showProject(); + break; + + case "setconfig": + setConfig(); + break; + + case "showconfig": + showConfig(); + break; + + case "reinitconfig": + reinitConfig(); + break; + + case "build": + Build(); + break; + + case "clean": + Clean(); + break; + + default: + Help(); + break; +} + +*/ \ No newline at end of file diff --git a/self/package.json b/self/package.json new file mode 100644 index 000000000..1dfe9e6b4 --- /dev/null +++ b/self/package.json @@ -0,0 +1,57 @@ +{ + "name": "nerdlang", + "version": "0.0.16", + "description": "NerdLang. Simple yet efficient.", + "main": "nerd", + "bin": { + "nerd": "./nerd.js" + }, + "scripts": {}, + "repository": { + "type": "git", + "url": "git+https://github.com/nerdlang/nerd.git" + }, + "keywords": [ + "nerd", + "nerdlang", + "nerd-lang", + "compilation", + "crossplatform", + "simple", + "speed", + "io", + "iot", + "socket", + "android", + "linux", + "windows", + "arduino", + "raspberry", + "stm32", + "nucleo", + "http", + "https", + "bytecode", + "wasm", + "arm", + "arm64", + "msbuild", + "cl", + "webserver", + "webview" + ], + "author": "Adrien THIERRY (https://seraum.com)", + "license": "MIT", + "licenses": [ + { + "type": "MIT", + "url": "https://github.com/nerdlang/nerd/blob/master/LICENSE" + } + ], + "bugs": { + "url": "https://github.com/nerdlang/nerd/issues" + }, + "homepage": "https://nerdlang.org", + "dependencies": { + } +} diff --git a/test/accessor.ng b/test/accessor.ng new file mode 100644 index 000000000..998161ed0 --- /dev/null +++ b/test/accessor.ng @@ -0,0 +1,18 @@ +var a = "abcdef"; +var b = [0,1,2,3]; +var c = +{ + "zero": 0, + "one": 1, +}; + +var fn = function(_arg) +{ + return _arg; +}; + +fn(a[0]); + +fn(b[0]); + +fn(c["zero"]); \ No newline at end of file diff --git a/test/builtin.ng b/test/builtin.ng new file mode 100644 index 000000000..1d5aca85a --- /dev/null +++ b/test/builtin.ng @@ -0,0 +1,21 @@ +var str = "abcdef"; +var args = arguments(); + +var obj = { + "1":1, + "2":2, + "3":3, +} + +var length = length_of(str); +var size = size_of(str); +var sizeOfObj = size_of(obj); +var lengthOfObj = length_of(obj); + +{{ + std::cout << "length of('abcdef'): " << length << std::endl; + std::cout << "size of('abcdef'): " << size << std::endl; + std::cout << std::endl; + std::cout << "lengthof(obj): " << lengthOfObj << std::endl; + std::cout << "sizeof(obj): " << sizeOfObj << std::endl; +}} \ No newline at end of file diff --git a/test/comments.ng b/test/comments.ng new file mode 100644 index 000000000..60b4e2a41 --- /dev/null +++ b/test/comments.ng @@ -0,0 +1,17 @@ +/* + multiline comment +*/ + +// one line comment + +var a = "ok"; + +var fn = function() +{ + /* + Multiline comment + */ + // One line comment +}; + +fn(); \ No newline at end of file diff --git a/test/conditionals.ng b/test/conditionals.ng new file mode 100644 index 000000000..aab996c8a --- /dev/null +++ b/test/conditionals.ng @@ -0,0 +1,16 @@ + + +var a = 0; + +if(a == 0) +{ + +} +else if(a == 1) +{ + +} +else +{ + +} \ No newline at end of file diff --git a/test/function.ng b/test/function.ng new file mode 100644 index 000000000..b940720ad --- /dev/null +++ b/test/function.ng @@ -0,0 +1,18 @@ +var fn = function(_arg, a2, a3, a4) +{ + var args = arguments(); + + for(var i = 0; i < length_of(args); i++) + { + {{ + std::cout << args[i] << std::endl; + }} + } + return { + a: _arg, + }; +}; + +fn(); + +fn("a", "b", "c", "d", "e"); \ No newline at end of file diff --git a/test/loop.ng b/test/loop.ng new file mode 100644 index 000000000..0cd100f5e --- /dev/null +++ b/test/loop.ng @@ -0,0 +1,17 @@ +for(var i = 0; i < 10; i++) +{ + var a = i + 1; +} + +var a = 3; + +while(a) +{ + a--; +} + + +do +{ + a++; +}while(a < 3); \ No newline at end of file diff --git a/test/native.ng b/test/native.ng new file mode 100644 index 000000000..29faa192e --- /dev/null +++ b/test/native.ng @@ -0,0 +1,8 @@ +var _cli = arguments(); + +for(var i = 0; i < length_of(_cli); i++) +{ + {{ + std::cout << i << " : " << _cli[i] << " - " << &_cli[i] << std::endl; + }} +} diff --git a/test/var.ng b/test/var.ng new file mode 100644 index 000000000..964d2ad14 --- /dev/null +++ b/test/var.ng @@ -0,0 +1,55 @@ +var a = 0; + +var b = 1.1; + +var c = "Hello"; + +var d = true; + +var e = false; + +var f = 1 < 1; + +var g = null; + +var h = function(){}; + +var i = function(arg, brg, crg) +{ + return arg + 1; +}; + +var j = []; + +var k = {}; + +var l = +{ + a: "a", + b: "b", +} + +var m = [0,1,2,3,4]; + +m = [[]]; + +a = 1; + +b = 0; + +c = {}; + +d = []; + +e = { + hello: "world" +}; + +f = ["0", 1, "2"]; + +g = function(_arg) +{ + return _arg++; +}; + +a = g(1); \ No newline at end of file diff --git a/tests/ES3/CREDITS.md b/tests/ES3/CREDITS.md deleted file mode 100644 index 8cc33cdfd..000000000 --- a/tests/ES3/CREDITS.md +++ /dev/null @@ -1 +0,0 @@ -https://github.com/kangax/sputniktests-webrunner \ No newline at end of file diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A1.1_T2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A1.1_T2.js deleted file mode 100644 index 7853214f0..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A1.1_T2.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.2_A1.1_T2; - * @section: 7.2, 7.5; - * @assertion: HORIZONTAL TAB (U+0009) between any two tokens is allowed; - * @description: Insert real HORIZONTAL TAB between tokens of var x=1; -*/ - - var x = 1 ; -if (x !== 1) { - $ERROR('#1: var x = 1 ; x === 1. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A1.2_T2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A1.2_T2.js deleted file mode 100644 index a12b5fec5..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A1.2_T2.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.2_A1.2_T2; - * @section: 7.2, 7.5; - * @assertion: VERTICAL TAB (U+000B) between any two tokens is allowed; - * @description: Insert real VERTICAL TAB between tokens of var x=1; -*/ - - var x = 1 ; -if (x !== 1) { - $ERROR('#1: var x = 1 ; x === 1. Actual: ' + (x)); -} - diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A1.3_T2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A1.3_T2.js deleted file mode 100644 index fee0a33ac..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A1.3_T2.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.2_A1.3_T2; - * @section: 7.2, 7.5; - * @assertion: FORM FEED (U+000C) between any two tokens is allowed; - * @description: Insert real FORM FEED between tokens of var x=1; -*/ - -//CHECK#1 - var x = 1 ; -if (x !== 1) { - $ERROR('#1: var x = 1 ; x === 1. Actual: ' + (x)); -} - diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A1.4_T2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A1.4_T2.js deleted file mode 100644 index e79223cbc..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A1.4_T2.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.2_A1.4_T2; - * @section: 7.2, 7.5; - * @assertion: SPACE (U+0020) between any two tokens is allowed; - * @description: Insert real SPACE between tokens of var x=1; -*/ - - -//CHECK#2 - var x = 1 ; -if (x !== 1) { - $ERROR('#2: var x = 1 ; x === 1. Actual: ' + (x)); -} - diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A1.5_T2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A1.5_T2.js deleted file mode 100644 index d3588c89f..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A1.5_T2.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.2_A1.5_T2; - * @section: 7.2, 7.5; - * @assertion: NO-BREAK SPACE (U+00A0) between any two tokens is allowed; - * @description: Insert real NO-BREAK SPACE between tokens of var x=1; -*/ - - -//CHECK#2 - var x = 1 ; -if (x !== 1) { - $ERROR('#2:  var x = 1 ; x === 1. Actual: ' + (x)); -} \ No newline at end of file diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A2.1_T2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A2.1_T2.js deleted file mode 100644 index 1d21a6a8a..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A2.1_T2.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.2_A2.1_T2; - * @section: 7.2, 7.8.4; - * @assertion: HORIZONTAL TAB (U+0009) may occur within strings; - * @description: Use real HORIZONTAL TAB; -*/ - -//CHECK#1 -if (" str ing " !== "\u0009str\u0009ing\u0009") { - $ERROR('#1: " str ing " === "\\u0009str\\u0009ing\\u0009"'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A2.2_T2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A2.2_T2.js deleted file mode 100644 index 02602eab5..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A2.2_T2.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.2_A2.2_T2; - * @section: 7.2, 7.8.4; - * @assertion: VERTICAL TAB (U+000B) may occur within strings; - * @description: Use real VERTICAL TAB; -*/ - -//CHECK#1 -if (" str ing " !== "\u000Bstr\u000Bing\u000B") { - $ERROR('#1: " str ing " === "\\u000Bstr\\u000Bing\\u000B"'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A2.3_T2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A2.3_T2.js deleted file mode 100644 index f42bfcc96..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A2.3_T2.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.2_A2.3_T2; - * @section: 7.2, 7.8.4; - * @assertion: FORM FEED (U+000C) may occur within strings; - * @description: Use real FORM FEED; -*/ - -//CHECK#1 -if (" str ing " !== "\u000Cstr\u000Cing\u000C") { - $ERROR('#1: " str ing " === "\\u000Cstr\\u000Cing\\u000C"'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A2.4_T2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A2.4_T2.js deleted file mode 100644 index f64685a91..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A2.4_T2.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.2_A2.4_T2; - * @section: 7.2, 7.8.4; - * @assertion: SPACE (U+0020) may occur within strings; - * @description: Use real SPACE; -*/ - -//CHECK#1 -if (" str ing " !== "\u0020str\u0020ing\u0020") { - $ERROR('#1: " str ing " === "\\u0020str\\u0020ing\\u0020"'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A2.5_T2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A2.5_T2.js deleted file mode 100644 index 42bf7644d..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A2.5_T2.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.2_A2.5_T2; - * @section: 7.2, 7.8.4; - * @assertion: NO-BREAK SPACE (U+00A0) may occur within strings; - * @description: Use real NO-BREAK SPACE; -*/ - -//CHECK#1 -if (" str ing " !== "\u00A0str\u00A0ing\u00A0") { - $ERROR('#1: " str ing " === "\\u00A0str\\u00A0ing\\u00A0"'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A3.1_T2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A3.1_T2.js deleted file mode 100644 index 2535b5f5c..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A3.1_T2.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.2_A3.1_T2; - * @section: 7.2, 7.4; - * @assertion: Single line comment can contain HORIZONTAL TAB (U+0009); - * @description: Use real HORIZONTAL TAB; - */ - -//CHECK#1 -var x = 0; -// single line comment x = 1; -if (x !== 0) { - $ERROR('#1: var x = 0; // single line comment x = 1; x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A3.2_T2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A3.2_T2.js deleted file mode 100644 index a2649d2d9..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A3.2_T2.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.2_A3.2_T2; - * @section: 7.2, 7.4; - * @assertion: Single line comment can contain VERTICAL TAB (U+000B); - * @description: Use real VERTICAL TAB; - */ - -//CHECK#1 -var x = 0; -// single line comment x = 1; -if (x !== 0) { - $ERROR('#1: var x = 0; // single line comment x = 1; x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A3.3_T2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A3.3_T2.js deleted file mode 100644 index 7bc2c757c..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A3.3_T2.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.2_A3.3_T2; - * @section: 7.2, 7.4; - * @assertion: Single line comment can contain FORM FEED (U+000C); - * @description: Use real FORM FEED; - */ - -//CHECK#1 -var x = 0; -// single line comment x = 1; -if (x !== 0) { - $ERROR('#1: var x = 0; // single line comment x = 1; x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A3.4_T2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A3.4_T2.js deleted file mode 100644 index 85759b101..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A3.4_T2.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.2_A3.4_T2; - * @section: 7.2, 7.4; - * @assertion: Single line comment can contain SPACE (U+0020); - * @description: Use real SPACE; - */ - -//CHECK#1 -var x = 0; -// single line comment x = 1; -if (x !== 0) { - $ERROR('#1: var x = 0; // single line comment x = 1; x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A3.5_T2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A3.5_T2.js deleted file mode 100644 index 667f58f9c..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A3.5_T2.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.2_A3.5_T2; - * @section: 7.2, 7.4; - * @assertion: Single line comment can contain NO-BREAK SPACE (U+00A0); - * @description: Use real NO-BREAK SPACE; - */ - -//CHECK#1 -var x = 0; -// single line comment x = 1; -if (x !== 0) { - $ERROR('#1: var x = 0; // single line comment x = 1; x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A4.1_T2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A4.1_T2.js deleted file mode 100644 index 7112fdd93..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A4.1_T2.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.2_A4.1_T2; - * @section: 7.2, 7.4; - * @assertion: Multi line comment can contain HORIZONTAL TAB (U+0009); - * @description: Use real HORIZONTAL TAB; - */ - -/*CHECK#1*/ -var x = 0; -/* multi line comment x = 1;*/ -if (x !== 0) { - $ERROR('#1: var x = 0; /* multi line comment x = 1;*/ x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A4.2_T2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A4.2_T2.js deleted file mode 100644 index 7ddcd3242..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A4.2_T2.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.2_A4.2_T2; - * @section: 7.2, 7.4; - * @assertion: Multi line comment can contain VERTICAL TAB (U+000B); - * @description: Use real VERTICAL TAB; - */ - -/*CHECK#1*/ -var x = 0; -/* multi line comment x = 1;*/ -if (x !== 0) { - $ERROR('#1: var x = 0; /* multi line comment x = 1;*/ x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A4.3_T2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A4.3_T2.js deleted file mode 100644 index 45b7fcc41..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A4.3_T2.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.2_A4.3_T2; - * @section: 7.2, 7.4; - * @assertion: Multi line comment can contain FORM FEED (U+000C); - * @description: Use real FORM FEED; - */ - -/*CHECK#1*/ -var x = 0; -/* multi line comment x = 1;*/ -if (x !== 0) { - $ERROR('#1: var x = 0; /* multi line comment x = 1;*/ x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A4.4_T2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A4.4_T2.js deleted file mode 100644 index a6c31c785..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A4.4_T2.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.2_A4.4_T2; - * @section: 7.2, 7.4; - * @assertion: Multi line comment can contain SPACE (U+0020); - * @description: Use real SPACE; - */ - -/*CHECK#1*/ -var x = 0; -/* multi line comment x = 1;*/ -if (x !== 0) { - $ERROR('#1: var x = 0; /* multi line comment x = 1;*/ x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A4.5_T2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A4.5_T2.js deleted file mode 100644 index 148270c29..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.2_White_Space/S7.2_A4.5_T2.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.2_A4.5_T2; - * @section: 7.2, 7.4; - * @assertion: Multi line comment can contain NO-BREAK SPACE (U+00A0); - * @description: Use real NO-BREAK SPACE; - */ - -/*CHECK#1*/ -var x = 0; -/* multi line comment x = 1;*/ -if (x !== 0) { - $ERROR('#1: var x = 0; /* multi line comment x = 1;*/ x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.3_Line_Terminators/S7.3_A1.1_T2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.3_Line_Terminators/S7.3_A1.1_T2.js deleted file mode 100644 index 8e836e261..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.3_Line_Terminators/S7.3_A1.1_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.3_A1.1_T2; - * @section: 7.3; - * @assertion: LINE FEED (U+000A) may occur between any two tokens; - * @description: Insert real LINE FEED between tokens of var x=1; -*/ - -//CHECK#1 -var -x -= -1; -if (x !== 1) { - $ERROR('#1: var\\nx\\n=\\n1\\n; x === 1. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.3_Line_Terminators/S7.3_A1.2_T2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.3_Line_Terminators/S7.3_A1.2_T2.js deleted file mode 100644 index ee5bae510..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.3_Line_Terminators/S7.3_A1.2_T2.js +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.3_A1.2_T2; - * @section: 7.3; - * @assertion: CARRIAGE RETURN (U+000D) may occur between any two tokens; - * @description: Insert real CARRIAGE RETURN between tokens of var x=1; -*/ - //CHECK#1 var x -= 1; if (x !== 1) { $ERROR('#1: var\\nx\\n=\\n1\\n; x === 1. Actual: ' + (x)); } diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.3_Line_Terminators/S7.3_A2.1_T2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.3_Line_Terminators/S7.3_A2.1_T2.js deleted file mode 100644 index 64bb1b6c5..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.3_Line_Terminators/S7.3_A2.1_T2.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.3_A2.1_T2; - * @section: 7.3; - * @assertion: LINE FEED (U+000A) within strings is not allowed; - * @description: Use real LINE FEED into string; - * @negative -*/ - -//CHECK#1 -" -str -ing -"; diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.3_Line_Terminators/S7.3_A2.2_T2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.3_Line_Terminators/S7.3_A2.2_T2.js deleted file mode 100644 index a3f465c95..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.3_Line_Terminators/S7.3_A2.2_T2.js +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.3_A2.2_T2; - * @section: 7.3; - * @assertion: CARRIAGE RETURN (U+000D) within strings is not allowed; - * @description: Insert real CARRIAGE RETURN into string; - * @negative -*/ - //CHECK#1 " str ing "; diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.3_Line_Terminators/S7.3_A5.1_T2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.3_Line_Terminators/S7.3_A5.1_T2.js deleted file mode 100644 index 0b7fe7aba..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.3_Line_Terminators/S7.3_A5.1_T2.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.3_A5.1_T2; - * @section: 7.3, 7.4; - * @assertion: Multi line comment can contain LINE FEED (U+000A); - * @description: Insert real LINE FEED into multi line comment; - */ - -/*CHECK#1*/ -var x = 0; -/* -multi -line -comment -x = 1; -*/ -if (x !== 0) { - $ERROR('#1: var x = 0; /*\\nmulti\\nline\\ncomment\\nx = 1;\\n*/ x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.3_Line_Terminators/S7.3_A5.2_T2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.3_Line_Terminators/S7.3_A5.2_T2.js deleted file mode 100644 index 7bc6810c9..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.3_Line_Terminators/S7.3_A5.2_T2.js +++ /dev/null @@ -1,10 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.3_A5.2_T2; - * @section: 7.3, 7.4; - * @assertion: Multi line comment can contain CARRIAGE RETURN (U+000D); - * @description: Insert real CARRIAGE RETURN into multi line comment; - */ - /*CHECK#1*/ var x = 0; /* multi line comment x = 1; */ if (x !== 0) { $ERROR('#1: var x = 0; /*\\rmulti\\rline\\rcomment\\rx = 1;\\r*/ x === 0. Actual: ' + (x)); } diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.3_Line_Terminators/S7.3_A7_T1.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.3_Line_Terminators/S7.3_A7_T1.js deleted file mode 100644 index 5a2db25bf..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.3_Line_Terminators/S7.3_A7_T1.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.3_A7_T1; - * @section: 7.3; - * @assertion: Line Terminators between operators are allowed; - * @description: Insert Line Terminator in var x=y+z; -*/ - -// CHECK#1 -var y=2; -var z=3; -var -x -= -y -+ -z -; -if (x !== 5) { - $ERROR('#1: var\\nx\\n=\\ny\\n+\\nz\\n; x === 5. Actual: ' + (x)); -} -x=0; - -// CHECK#2 -var y=2; -var z=3; -var -x -= -y -+ -z -; -if (x !== 5) { - $ERROR('#2: var\\nx\\n=\\ny\\n+\\nz\\n; x === 5. Actual: ' + (x)); -} -x=0; diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.3_Line_Terminators/S7.3_A7_T2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.3_Line_Terminators/S7.3_A7_T2.js deleted file mode 100644 index 4fef408b2..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.3_Line_Terminators/S7.3_A7_T2.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.3_A7_T2; - * @section: 7.3; - * @assertion: Line Terminators between operators are allowed; - * @description: Insert Line Terminator in var x=y-z; -*/ - -// CHECK#1 -var y=3; -var z=2; -var -x -= -y -- -z -; -if (x !== 1) { - $ERROR('#1: var\\nx\\n=\\ny\\n-\\nz\\n; x === 1. Actual: ' + (x)); -} -x=0; - -// CHECK#2 -var y=3; -var z=2; -var -x -= -y -- -z -; -if (x !== 1) { - $ERROR('#2: var\\nx\\n=\\ny\\n-\\nz\\n; x === 1. Actual: ' + (x)); -} -x=0; diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.3_Line_Terminators/S7.3_A7_T3.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.3_Line_Terminators/S7.3_A7_T3.js deleted file mode 100644 index 78b188a4e..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.3_Line_Terminators/S7.3_A7_T3.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.3_A7_T3; - * @section: 7.3; - * @assertion: Line Terminators between operators are allowed; - * @description: Insert Line Terminator in var x=y*z; -*/ - -// CHECK#1 -var y=3; -var z=2; -var -x -= -y -* -z -; -if (x !== 6) { - $ERROR('#1: var\\nx\\n=\\ny\\n*\\nz\\n; x === 6. Actual: ' + (x)); -} -x=0; - -// CHECK#2 -var y=3; -var z=2; -var -x -= -y -* -z -; -if (x !== 6) { - $ERROR('#2: var\\nx\\n=\\ny\\n*\\nz\\n; x === 6. Actual: ' + (x)); -} -x=0; - diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.3_Line_Terminators/S7.3_A7_T4.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.3_Line_Terminators/S7.3_A7_T4.js deleted file mode 100644 index 62b91a7f7..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.3_Line_Terminators/S7.3_A7_T4.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.3_A7_T4; - * @section: 7.3; - * @assertion: Line Terminators between operators are allowed; - * @description: Insert Line Terminator in var x=y/z; -*/ - -// CHECK#1 -var y=12; -var z=2; -var -x -= -y -/ -z -; -if (x !== 6) { - $ERROR('#1: var\\nx\\n=\\ny\\n/\\nz\\n; x === 6. Actual: ' + (x)); -} -x=0; - -// CHECK#2 -var y=12; -var z=2; -var -x -= -y -/ -z -; -if (x !== 6) { - $ERROR('#2: var\\nx\\n=\\ny\\n/\\nz\\n; x === 6. Actual: ' + (x)); -} -x=0; - diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.3_Line_Terminators/S7.3_A7_T5.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.3_Line_Terminators/S7.3_A7_T5.js deleted file mode 100644 index ef02e8584..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.3_Line_Terminators/S7.3_A7_T5.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.3_A7_T5; - * @section: 7.3; - * @assertion: Line Terminators between operators are allowed; - * @description: Insert Line Terminator in var x=y%z; -*/ - -// CHECK#1 -var y=16; -var z=10; -var -x -= -y -% -z -; -if (x !== 6) { - $ERROR('#1: var\\nx\\n=\\ny\\n%\\nz\\n; x === 6. Actual: ' + (x)); -} -x=0; - -// CHECK#2 -var y=16; -var z=10; -var -x -= -y -% -z -; -if (x !== 6) { - $ERROR('#2: var\\nx\\n=\\ny\\n%\\nz\\n; x === 6. Actual: ' + (x)); -} -x=0; - diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.3_Line_Terminators/S7.3_A7_T6.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.3_Line_Terminators/S7.3_A7_T6.js deleted file mode 100644 index 72bb4889b..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.3_Line_Terminators/S7.3_A7_T6.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.3_A7_T6; - * @section: 7.3; - * @assertion: Line Terminators between operators are allowed; - * @description: Insert Line Terminator in var x=y>>z; -*/ - -// CHECK#1 -var y=16; -var z=3; -var -x -= -y ->> -z -; -if (x !== 2) { - $ERROR('#1: var\\nx\\n=\\ny\\n>>\\nz\\n; x === 2. Actual: ' + (x)); -} -x=0; - -// CHECK#2 -var y=16; -var z=3; -var -x -= -y ->> -z -; -if (x !== 2) { - $ERROR('#2: var\\nx\\n=\\ny\\n>>\\nz\\n; x === 2. Actual: ' + (x)); -} -x=0; diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.3_Line_Terminators/S7.3_A7_T7.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.3_Line_Terminators/S7.3_A7_T7.js deleted file mode 100644 index 2132bfb63..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.3_Line_Terminators/S7.3_A7_T7.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.3_A7_T7; - * @section: 7.3; - * @assertion: Line Terminators between operators are allowed; - * @description: Insert Line Terminator in var x=y< 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.4_Comments/S7.4_A6.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.4_Comments/S7.4_A6.js deleted file mode 100644 index a79a8ae35..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.4_Comments/S7.4_A6.js +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.4_A6; - * @section: 7.4; - * @assertion: If multi line comments csn not nest, they can contain any Unicode character; - * @description: "var"+ yy+ "xx = 1", insert instead of yy all Unicode characters; -*/ - -//CHECK -errorCount = 0; -count = 0; -for (indexI = 0; indexI <= 65535; indexI++) { - try { - var xx = 0; - eval("/*var " + String.fromCharCode(indexI) + "xx = 1*/"); - var hex = decimalToHexString(indexI); - if (xx !== 0) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e){ - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.5_Tokens/7.5.1_Reserved_Words/S7.5.1_A2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.5_Tokens/7.5.1_Reserved_Words/S7.5.1_A2.js deleted file mode 100644 index 3654f9e9f..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.5_Tokens/7.5.1_Reserved_Words/S7.5.1_A2.js +++ /dev/null @@ -1,121 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.5.1_A2; - * @section: 7.5.1; - * @assertion: List of words that are not reserved; - * @description: Try assign 1 for not reserved words; -*/ - -// a -and = 1; -and_eq = 1; -as = 1; -asm = 1; -assert = 1; -auto = 1; -// b -base = 1; -bitand = 1; -bitor = 1; -bool = 1; -byvalue = 1; -// c -checked = 1; -clone = 1; -comment = 1; -compl = 1; -const_cast = 1; -// d -decimal = 1; -delegate = 1; -dynamic_cast = 1; -// e -explicit = 1; -extern = 1; -equals = 1; -event = 1; -// f -finalize = 1; -fixed = 1; -friend = 1; -foreach = 1; -future = 1; -// g -getClass = 1; -generic = 1; -// h -hashCode = 1; -// i -implicit = 1; -infinity = 1; -inline = 1; -inner = 1; -internal = 1; -is = 1; -// j -// k -// l -lock = 1; -// m -mutable = 1; -// n -NaN = 1; -namespace = 1; -not = 1; -notify = 1; -notifyAll = 1; -not_eq = 1; -// o -object = 1; -operator = 1; -or = 1; -or_eq = 1; -out = 1; -outer = 1; -override = 1; -// p -params = 1; -// q -// r -readonly = 1; -reinterpret_cast = 1; -ref = 1; -register = 1; - -// s -sbyte = 1; -signed = 1; -sizeof = 1; -stackalloc = 1; -static_cast = 1; -string = 1; -strictfp = 1; -struct = 1; -// t -template = 1; -toString = 1; -typedef = 1; -typeid = 1; -// u -uint = 1; -unchecked = 1; -undefiend = 1; -union = 1; -unsafe = 1; -unsigned = 1; -use = 1; -using = 1; -ushort = 1; -// v -valueOf = 1; -virtual = 1; -// w -wait = 1; -wchar_t = 1; -// x -xor = 1; -xor_eq = 1; -// y -// z diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.6_Identifiers/S7.6_A1.2_T1.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.6_Identifiers/S7.6_A1.2_T1.js deleted file mode 100644 index e75b5ae7c..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.6_Identifiers/S7.6_A1.2_T1.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A1.2_T1; - * @section: 7.6; - * @assertion: IdentifierStart :: $; - * @description: Create variable $; -*/ - -//CHECK#1 -var $ = 1; -if ($ !== 1) { - $ERROR('#1: var $ = 1; $ === 1. Actual: ' + ($)); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.6_Identifiers/S7.6_A1.2_T2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.6_Identifiers/S7.6_A1.2_T2.js deleted file mode 100644 index 404e37577..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.6_Identifiers/S7.6_A1.2_T2.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A1.2_T2; - * @section: 7.6; - * @assertion: IdentifierStart :: $; - * @description: The $ as unicode character \u0024; -*/ - -//CHECK#1 -var \u0024 = 1; -if ($ !== 1) { - $ERROR('#1: var \\u0024 = 1; $ === 1. Actual: ' + ($)); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.6_Identifiers/S7.6_A1.2_T3.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.6_Identifiers/S7.6_A1.2_T3.js deleted file mode 100644 index 88f6b04a9..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.6_Identifiers/S7.6_A1.2_T3.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A1.2_T3; - * @section: 7.6; - * @assertion: IdentifierStart :: $; - * @description: The $ as unicode character \u0024; -*/ - -//CHECK#2 -if ("$" !== String.fromCharCode(0x0024)) { - $ERROR('#2: "$" === String.fromCharCode(0x0024)'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.6_Identifiers/S7.6_A1.3_T1.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.6_Identifiers/S7.6_A1.3_T1.js deleted file mode 100644 index 447c19945..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.6_Identifiers/S7.6_A1.3_T1.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A1.3_T1; - * @section: 7.6; - * @assertion: IdentifierStart :: _; - * @description: Create variable _; -*/ - -//CHECK#1 -var _ = 1; -if (_ !== 1) { - $ERROR('#1: var _ = 1; _ === 1. Actual: ' + (_)); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.6_Identifiers/S7.6_A1.3_T2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.6_Identifiers/S7.6_A1.3_T2.js deleted file mode 100644 index ec5c1e585..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.6_Identifiers/S7.6_A1.3_T2.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A1.3_T2; - * @section: 7.6; - * @assertion: IdentifierStart :: _; - * @description: The _ as unicode character \u005F; -*/ - -//CHECK#1 -var \u005F = 1; -if (_ !== 1) { - $ERROR('#1: var \\u005F = 1; _ === 1. Actual: ' + (_)); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.6_Identifiers/S7.6_A1.3_T3.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.6_Identifiers/S7.6_A1.3_T3.js deleted file mode 100644 index 1b9429a4e..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.6_Identifiers/S7.6_A1.3_T3.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A1.3_T3; - * @section: 7.6; - * @assertion: IdentifierStart :: _; - * @description: The _ as unicode character \u005F; -*/ - -//CHECK#2 -if ("_" !== String.fromCharCode(0x005F)) { - $ERROR('#2: "_" === String.fromCharCode(0x005F)'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.6_Identifiers/S7.6_A2.1_T1.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.6_Identifiers/S7.6_A2.1_T1.js deleted file mode 100644 index 49199acc0..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.6_Identifiers/S7.6_A2.1_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A2.1_T1; - * @section: 7.6; - * @assertion: IdentifierPart :: IdentifierStart; - * @description: IdentifierStart :: UnicodeLetter; -*/ - -//CHECK#6 -try { - var \u0078x = 6; - if (xx !== 6) { - $ERROR('#6.1: var \\u0078x = 1; xx === 6. Actual: ' + (xx)); - } -} catch (e) { - $ERROR('#6.2: var \\u0078x = 1; xx === 6. Actual: ' + (xx)); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.6_Identifiers/S7.6_A2.1_T2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.6_Identifiers/S7.6_A2.1_T2.js deleted file mode 100644 index a74208b09..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.6_Identifiers/S7.6_A2.1_T2.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A2.1_T2; - * @section: 7.6; - * @assertion: IdentifierPart :: IdentifierStart; - * @description: IdentifierStart :: $; -*/ - -//CHECK#6 -try { - var \u0078$ = 6; - if (x$ !== 6) { - $ERROR('#6.1: var \\u0078$ = 1; x$ === 6. Actual: ' + (x$)); - } -} catch (e) { - $ERROR('#6.2: var \\u0078$ = 1; x$ === 6. Actual: ' + (x$)); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.6_Identifiers/S7.6_A2.1_T3.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.6_Identifiers/S7.6_A2.1_T3.js deleted file mode 100644 index b388eee49..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.6_Identifiers/S7.6_A2.1_T3.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A2.1_T3; - * @section: 7.6; - * @assertion: IdentifierPart :: IdentifierStart; - * @description: IdentifierStart :: _; -*/ - -//CHECK#6 -try { - var \u0078_ = 6; - if (x_ !== 6) { - $ERROR('#6.1: var \\u0078_ = 1; x_ === 6. Actual: ' + (x_)); - } -} catch (e) { - $ERROR('#6.2: var \\u0078_ = 1; x_ === 6. Actual: ' + (x_)); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.6_Identifiers/S7.6_A2.1_T4.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.6_Identifiers/S7.6_A2.1_T4.js deleted file mode 100644 index a71dd55d0..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.6_Identifiers/S7.6_A2.1_T4.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A2.1_T4; - * @section: 7.6; - * @assertion: IdentifierPart :: IdentifierStart; - * @description: IdentifierStart :: \UnicodeEscapeSequence; -*/ - -//CHECK#1 -try { - var x\u0078 = 1; - if (xx !== 1) { - $ERROR('#1.1: var x\\u0078 = 1; xx === 1. Actual: ' + (xx)); - } -} catch (e) { - $ERROR('#1.2: var x\\u0078 = 1; xx === 1. Actual: ' + (xx)); -} - -//CHECK#2 -try { - var \u0078\u0078 = 2; - if (xx !== 2) { - $ERROR('#2.1: var \\u0078\\u0078 = 1; xx === 2. Actual: ' + (xx)); - } -} catch (e) { - $ERROR('#2.2: var \\u0078\\u0078 = 1; xx === 2. Actual: ' + (xx)); -} - -//CHECK#3 -try { - var \u0024\u0024 = 3; - if ($$ !== 3) { - $ERROR('#3.1: var \\u0024\\u0024 = 1; $$ === 3. Actual: ' + ($$)); - } -} catch (e) { - $ERROR('#3.2: var \\u0024\\u0024 = 1; $$ === 3. Actual: ' + ($$)); -} - -//CHECK#4 -try { - var \u005F\u005F = 4; - if (__ !== 4) { - $ERROR('#4.1: var \\u005F\\u005F = 1; __ === 4. Actual: ' + (__)); - } -} catch (e) { - $ERROR('#4.2: var \\u005F\\u005F = 1; __ === 4. Actual: ' + (__)); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.6_Identifiers/S7.6_A4.1_T1.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.6_Identifiers/S7.6_A4.1_T1.js deleted file mode 100644 index bc78e0374..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.6_Identifiers/S7.6_A4.1_T1.js +++ /dev/null @@ -1,115 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A4.1_T1; - * @section: 7.6; - * @assertion: Correct interpretation of ENGLISH ALPHABET; - * @description: Check ENGLISH CAPITAL ALPHABET; -*/ - -//CHECK#A-Z -\u0041 = 1; -if (A !== 1) { - $ERROR('#A'); -} -\u0042 = 1; -if (B !== 1) { - $ERROR('#B'); -} -\u0043 = 1; -if (C !== 1) { - $ERROR('#C'); -} -\u0044 = 1; -if (D !== 1) { - $ERROR('#D'); -} -\u0045 = 1; -if (E !== 1) { - $ERROR('#E'); -} -\u0046 = 1; -if (F !== 1) { - $ERROR('#F'); -} -\u0047 = 1; -if (G !== 1) { - $ERROR('#G'); -} -\u0048 = 1; -if (H !== 1) { - $ERROR('#H'); -} -\u0049 = 1; -if (I !== 1) { - $ERROR('#I'); -} -\u004A = 1; -if (J !== 1) { - $ERROR('#J'); -} -\u004B = 1; -if (K !== 1) { - $ERROR('#K'); -} -\u004C = 1; -if (L !== 1) { - $ERROR('#L'); -} -\u004D = 1; -if (M !== 1) { - $ERROR('#M'); -} -\u004E = 1; -if (N !== 1) { - $ERROR('#N'); -} -\u004F = 1; -if (O !== 1) { - $ERROR('#O'); -} -\u0050 = 1; -if (P !== 1) { - $ERROR('#P'); -} -\u0051 = 1; -if (Q !== 1) { - $ERROR('#Q'); -} -\u0052 = 1; -if (R !== 1) { - $ERROR('#R'); -} -\u0053 = 1; -if (S !== 1) { - $ERROR('#S'); -} -\u0054 = 1; -if (T !== 1) { - $ERROR('#T'); -} -\u0055 = 1; -if (U !== 1) { - $ERROR('#U'); -} -\u0056 = 1; -if (V !== 1) { - $ERROR('#V'); -} -\u0057 = 1; -if (W !== 1) { - $ERROR('#W'); -} -\u0058 = 1; -if (X !== 1) { - $ERROR('#X'); -} -\u0059 = 1; -if (Y !== 1) { - $ERROR('#Y'); -} -\u005A = 1; -if (Z !== 1) { - $ERROR('#Z'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.6_Identifiers/S7.6_A4.1_T2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.6_Identifiers/S7.6_A4.1_T2.js deleted file mode 100644 index 8add4b80e..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.6_Identifiers/S7.6_A4.1_T2.js +++ /dev/null @@ -1,116 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A4.1_T2; - * @section: 7.6; - * @assertion: Correct interpretation of ENGLISH ALPHABET; - * @description: Check ENGLISH SMALL ALPHABET; -*/ - -//CHECK#a-z -\u0061 = 1; -if (a !== 1) { - $ERROR('#a'); -} -\u0062 = 1; -if (b !== 1) { - $ERROR('#b'); -} -\u0063 = 1; -if (c !== 1) { - $ERROR('#c'); -} -\u0064 = 1; -if (d !== 1) { - $ERROR('#d'); -} -\u0065 = 1; -if (e !== 1) { - $ERROR('#e'); -} -\u0066 = 1; -if (f !== 1) { - $ERROR('#f'); -} -\u0067 = 1; -if (g !== 1) { - $ERROR('#g'); -} -\u0068 = 1; -if (h !== 1) { - $ERROR('#h'); -} -\u0069 = 1; -if (i !== 1) { - $ERROR('#i'); -} -\u006A = 1; -if (j !== 1) { - $ERROR('#j'); -} -\u006B = 1; -if (k !== 1) { - $ERROR('#k'); -} -\u006C = 1; -if (l !== 1) { - $ERROR('#l'); -} -\u006D = 1; -if (m !== 1) { - $ERROR('#m'); -} -\u006E = 1; -if (n !== 1) { - $ERROR('#n'); -} -\u006F = 1; -if (o !== 1) { - $ERROR('#o'); -} -\u0070 = 1; -if (p !== 1) { - $ERROR('#p'); -} -\u0071 = 1; -if (q !== 1) { - $ERROR('#q'); -} -\u0072 = 1; -if (r !== 1) { - $ERROR('#r'); -} -\u0073 = 1; -if (s !== 1) { - $ERROR('#s'); -} -\u0074 = 1; -if (t !== 1) { - $ERROR('#t'); -} -\u0075 = 1; -if (u !== 1) { - $ERROR('#u'); -} -\u0076 = 1; -if (v !== 1) { - $ERROR('#v'); -} -\u0077 = 1; -if (w !== 1) { - $ERROR('#w'); -} -\u0078 = 1; -if (x !== 1) { - $ERROR('#x'); -} -\u0079 = 1; -if (y !== 1) { - $ERROR('#y'); -} -\u007A = 1; -if (z !== 1) { - $ERROR('#z'); -} - diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.6_Identifiers/S7.6_A4.2_T1.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.6_Identifiers/S7.6_A4.2_T1.js deleted file mode 100644 index 12e181f20..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.6_Identifiers/S7.6_A4.2_T1.js +++ /dev/null @@ -1,143 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A4.2_T1; - * @section: 7.6; - * @assertion: Correct interpretation of RUSSIAN ALPHABET; - * @description: Check RUSSIAN CAPITAL ALPHABET; -*/ - -//CHECK#А-Я -\u0410 = 1; -if (А !== 1) { - $ERROR('#А'); -} -\u0411 = 1; -if (Б !== 1) { - $ERROR('#Б'); -} -\u0412 = 1; -if (В !== 1) { - $ERROR('#В'); -} -\u0413 = 1; -if (Г !== 1) { - $ERROR('#Г'); -} -\u0414 = 1; -if (Д !== 1) { - $ERROR('#Д'); -} -\u0415 = 1; -if (Е !== 1) { - $ERROR('#Е'); -} -\u0416 = 1; -if (Ж !== 1) { - $ERROR('#Ж'); -} -\u0417 = 1; -if (З !== 1) { - $ERROR('#З'); -} -\u0418 = 1; -if (И !== 1) { - $ERROR('#И'); -} -\u0419 = 1; -if (Й !== 1) { - $ERROR('#Й'); -} -\u041A = 1; -if (К !== 1) { - $ERROR('#К'); -} -\u041B = 1; -if (Л !== 1) { - $ERROR('#Л'); -} -\u041C = 1; -if (М !== 1) { - $ERROR('#М'); -} -\u041D = 1; -if (Н !== 1) { - $ERROR('#Н'); -} -\u041E = 1; -if (О !== 1) { - $ERROR('#О'); -} -\u041F = 1; -if (П !== 1) { - $ERROR('#П'); -} -\u0420 = 1; -if (Р !== 1) { - $ERROR('#Р'); -} -\u0421 = 1; -if (С !== 1) { - $ERROR('#С'); -} -\u0422 = 1; -if (Т !== 1) { - $ERROR('#Т'); -} -\u0423 = 1; -if (У !== 1) { - $ERROR('#У'); -} -\u0424 = 1; -if (Ф !== 1) { - $ERROR('#Ф'); -} -\u0425 = 1; -if (Х !== 1) { - $ERROR('#Х'); -} -\u0426 = 1; -if (Ц !== 1) { - $ERROR('#Ц'); -} -\u0427 = 1; -if (Ч !== 1) { - $ERROR('#Ч'); -} -\u0428 = 1; -if (Ш !== 1) { - $ERROR('#Ш'); -} -\u0429 = 1; -if (Щ !== 1) { - $ERROR('#Щ'); -} -\u042A = 1; -if (Ъ !== 1) { - $ERROR('#Ъ'); -} -\u042B = 1; -if (Ы !== 1) { - $ERROR('#Ы'); -} -\u042C = 1; -if (Ь !== 1) { - $ERROR('#Ь'); -} -\u042D = 1; -if (Э !== 1) { - $ERROR('#Э'); -} -\u042E = 1; -if (Ю !== 1) { - $ERROR('#Ю'); -} -\u042F = 1; -if (Я !== 1) { - $ERROR('#Я'); -} -\u0401 = 1; -if (Ё !== 1) { - $ERROR('#Ё'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.6_Identifiers/S7.6_A4.2_T2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.6_Identifiers/S7.6_A4.2_T2.js deleted file mode 100644 index 6ed7c177b..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.6_Identifiers/S7.6_A4.2_T2.js +++ /dev/null @@ -1,143 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A4.2_T2; - * @section: 7.6; - * @assertion: Correct interpretation of RUSSIAN ALPHABET; - * @description: Check RUSSIAN SMALL ALPHABET; -*/ - -//CHECK#а-я -\u0430 = 1; -if (а !== 1) { - $ERROR('#а'); -} -\u0431 = 1; -if (б !== 1) { - $ERROR('#б'); -} -\u0432 = 1; -if (в !== 1) { - $ERROR('#в'); -} -\u0433 = 1; -if (г !== 1) { - $ERROR('#г'); -} -\u0434 = 1; -if (д !== 1) { - $ERROR('#д'); -} -\u0435 = 1; -if (е !== 1) { - $ERROR('#е'); -} -\u0436 = 1; -if (ж !== 1) { - $ERROR('#ж'); -} -\u0437 = 1; -if (з !== 1) { - $ERROR('#з'); -} -\u0438 = 1; -if (и !== 1) { - $ERROR('#и'); -} -\u0439 = 1; -if (й !== 1) { - $ERROR('#й'); -} -\u043A = 1; -if (к !== 1) { - $ERROR('#к'); -} -\u043B = 1; -if (л !== 1) { - $ERROR('#л'); -} -\u043C = 1; -if (м !== 1) { - $ERROR('#м'); -} -\u043D = 1; -if (н !== 1) { - $ERROR('#н'); -} -\u043E = 1; -if (о !== 1) { - $ERROR('#о'); -} -\u043F = 1; -if (п !== 1) { - $ERROR('#п'); -} -\u0440 = 1; -if (р !== 1) { - $ERROR('#р'); -} -\u0441 = 1; -if (с !== 1) { - $ERROR('#с'); -} -\u0442 = 1; -if (т !== 1) { - $ERROR('#т'); -} -\u0443 = 1; -if (у !== 1) { - $ERROR('#у'); -} -\u0444 = 1; -if (ф !== 1) { - $ERROR('#ф'); -} -\u0445 = 1; -if (х !== 1) { - $ERROR('#х'); -} -\u0446 = 1; -if (ц !== 1) { - $ERROR('#ц'); -} -\u0447 = 1; -if (ч !== 1) { - $ERROR('#ч'); -} -\u0448 = 1; -if (ш !== 1) { - $ERROR('#ш'); -} -\u0449 = 1; -if (щ !== 1) { - $ERROR('#щ'); -} -\u044A = 1; -if (ъ !== 1) { - $ERROR('#ъ'); -} -\u044B = 1; -if (ы !== 1) { - $ERROR('#ы'); -} -\u044C = 1; -if (ь !== 1) { - $ERROR('#ь'); -} -\u044D = 1; -if (э !== 1) { - $ERROR('#э'); -} -\u044E = 1; -if (ю !== 1) { - $ERROR('#ю'); -} -\u044F = 1; -if (я !== 1) { - $ERROR('#я'); -} -\u0451 = 1; -if (ё !== 1) { - $ERROR('#ё'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.6_Identifiers/S7.6_A4.3_T1.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.6_Identifiers/S7.6_A4.3_T1.js deleted file mode 100644 index 909907b07..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.6_Identifiers/S7.6_A4.3_T1.js +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A4.3_T1; - * @section: 7.6; - * @assertion: Correct interpretation of DIGITS; - * @description: Identifier is $+ANY_DIGIT; -*/ - -//CHECK#0-9 -$\u0030 = 0; -if ($0 !== 0) { - $ERROR('#0: $\\u0030 = 0; $0 === 0'); -} -$\u0031 = 1; -if ($1 !== 1) { - $ERROR('#1: $\\u0031 = 1; $1 === 1'); -} -$\u0032 = 2; -if ($2 !== 2) { - $ERROR('#2: $\\u0032 = 2; $2 === 2'); -} -$\u0033 = 3; -if ($3 !== 3) { - $ERROR('#3: $\\u0033 = 3; $3 === 3'); -} -$\u0034 = 4; -if ($4 !== 4) { - $ERROR('#4: $\\u0034 = 4; $4 === 4'); -} -$\u0035 = 5; -if ($5 !== 5) { - $ERROR('#5: $\\u0035 = 5; $5 === 5'); -} -$\u0036 = 6; -if ($6 !== 6) { - $ERROR('#6: $\\u0036 = 6; $6 === 6'); -} -$\u0037 = 7; -if ($7 !== 7) { - $ERROR('#7: $\\u0037 = 7; $7 === 7'); -} -$\u0038 = 8; -if ($8 !== 8) { - $ERROR('#8: $\\u0038 = 8; $8 === 8'); -} -$\u0039 = 9; -if ($9 !== 9) { - $ERROR('#9: $\\u0039 = 9; $9 === 9'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.7_Punctuators/S7.7_A1.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.7_Punctuators/S7.7_A1.js deleted file mode 100644 index 183ddb1f0..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.7_Punctuators/S7.7_A1.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.7_A1; - * @section: 7.7; - * @assertion: Correct interpretation of all punctuators; - * @description: Using all punctuators; -*/ - -//CHECK#1 - ({});[]; - this.NaN; - 1 < 2 > 3 <= 4 >= 5 == 6 != 7 === 8 !== 9; - 1 + 2 - 3 * 4 % 5 / 6 << 7 >> 8 >>> 9; - this.NaN++; ++this.NaN; this.NaN--; --this.NaN; - 1 & 2 | 3 ^ 4 && !5 || ~6; - 1 ? 2 : 3; - this.NaN = 1; this.NaN += 2; this.NaN -= 3; this.NaN *= 4; this.NaN /= 5; - this.NaN %= 6; this.NaN <<= 7; this.NaN >>= 8; this.NaN >>>= 9; - this.NaN &= 1; this.NaN |= 2; this.NaN ^= 3; diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.1_Null_Literals/S7.8.1_A1_T1.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.1_Null_Literals/S7.8.1_A1_T1.js deleted file mode 100644 index df432c8e1..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.1_Null_Literals/S7.8.1_A1_T1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.1_A1_T1; - * @section: 7.8.1; - * @assertion: Literal :: NullLiteral; - * @description: Check null === null; -*/ - -//CHECK#1 -if (null !== null) { - $ERROR('#1: null === null'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.1_Null_Literals/S7.8.1_A1_T2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.1_Null_Literals/S7.8.1_A1_T2.js deleted file mode 100644 index 8c1e0f78e..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.1_Null_Literals/S7.8.1_A1_T2.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.1_A1_T2; - * @section: 7.8.1; - * @assertion: Literal :: NullLiteral; - * @description: Check RegExp("0").exec("1") === null; -*/ - -//CHECK#1 -if (RegExp("0").exec("1") !== null) { - $ERROR('#1: RegExp("0").exec("1") === null'); -} - diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.2_Boolean_Literals/S7.8.2_A1_T1.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.2_Boolean_Literals/S7.8.2_A1_T1.js deleted file mode 100644 index c016eaf62..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.2_Boolean_Literals/S7.8.2_A1_T1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.2_A1_T1; - * @section: 7.8.2; - * @assertion: Literal :: BooleanLiteral; - * @description: BooleanLiteral :: true; -*/ - -//CHECK#1 -if (Boolean(true) !== true) { - $ERROR('#1: Boolean(true) === true. Actual: Boolean(true) === ' + (Boolean(true))); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.2_Boolean_Literals/S7.8.2_A1_T2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.2_Boolean_Literals/S7.8.2_A1_T2.js deleted file mode 100644 index d9fe3877a..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.2_Boolean_Literals/S7.8.2_A1_T2.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.2_A1_T2; - * @section: 7.8.2; - * @assertion: Literal :: BooleanLiteral; - * @description: BooleanLiteral :: false; -*/ - -//CHECK#1 -if (Boolean(false) !== false) { - $ERROR('#1: Boolean(false) === false. Actual: Boolean(false) === ' + (Boolean(false))); -} - diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A1.1_T1.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A1.1_T1.js deleted file mode 100644 index c33ec6ee0..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A1.1_T1.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.3_A1.1_T1; - * @section: 7.8.3; - * @assertion: DecimalLiteral :: DecimalIntegerLiteral; - * @description: DecimalIntegerLiteral :: 0, NoNZeroDigit; -*/ - -//CHECK#0 -if (0 !== 0) { - $ERROR('#0: 0 === 0'); -} - -//CHECK#1 -if (1 !== 1) { - $ERROR('#1: 1 === 1'); -} - -//CHECK#2 -if (2 !== 2) { - $ERROR('#2: 2 === 2'); -} - -//CHECK#3 -if (3 !== 3) { - $ERROR('#3: 3 === 3'); -} - -//CHECK#4 -if (4 !== 4) { - $ERROR('#4: 4 === 4'); -} - -//CHECK#5 -if (5 !== 5) { - $ERROR('#5: 5 === 5'); -} - -//CHECK#6 -if (6 !== 6) { - $ERROR('#6: 6 === 6'); -} - -//CHECK#7 -if (7 !== 7) { - $ERROR('#7: 7 === 7'); -} - -//CHECK#8 -if (8 !== 8) { - $ERROR('#8: 8 === 8'); -} - -//CHECK#9 -if (9 !== 9) { - $ERROR('#9: 9 === 9'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A1.1_T2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A1.1_T2.js deleted file mode 100644 index 197f9912a..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A1.1_T2.js +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.3_A1.1_T2; - * @section: 7.8.3; - * @assertion: DecimalLiteral :: DecimalIntegerLiteral; - * @description: DecimalIntegerLiteral :: NoNZeroDigit DecimalDigits; -*/ - - -//CHECK#1 -if (11 !== 11) { - $ERROR('#1: 11 === 11'); -} - -//CHECK#2 -if (22 !== 22) { - $ERROR('#2: 22 === 22'); -} - -//CHECK#3 -if (33 !== 33) { - $ERROR('#3: 33 === 33'); -} - -//CHECK#4 -if (44 !== 44) { - $ERROR('#4: 44 === 44'); -} - -//CHECK#5 -if (55 !== 55) { - $ERROR('#5: 55 === 55'); -} - -//CHECK#6 -if (66 !== 66) { - $ERROR('#6: 66 === 66'); -} - -//CHECK#7 -if (77 !== 77) { - $ERROR('#7: 77 === 77'); -} - -//CHECK#8 -if (88 !== 88) { - $ERROR('#8: 88 === 88'); -} - -//CHECK#9 -if (99 !== 99) { - $ERROR('#9: 99 === 99'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A1.2_T1.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A1.2_T1.js deleted file mode 100644 index c644424ba..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A1.2_T1.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.3_A1.2_T1; - * @section: 7.8.3; - * @assertion: DecimalLiteral :: DecimalIntegerLiteral ExponentPart; - * @description: ExponentPart :: e DecimalDigits; -*/ - -//CHECK#0 -if (0e1 !== 0) { - $ERROR('#0: 0e1 === 0'); -} - -//CHECK#1 -if (1e1 !== 10) { - $ERROR('#1: 1e1 === 10'); -} - -//CHECK#2 -if (2e1 !== 20) { - $ERROR('#2: 2e1 === 20'); -} - -//CHECK#3 -if (3e1 !== 30) { - $ERROR('#3: 3e1 === 30'); -} - -//CHECK#4 -if (4e1 !== 40) { - $ERROR('#4: 4e1 === 40'); -} - -//CHECK#5 -if (5e1 !== 50) { - $ERROR('#5: 5e1 === 50'); -} - -//CHECK#6 -if (6e1 !== 60) { - $ERROR('#6: 6e1 === 60'); -} - -//CHECK#7 -if (7e1 !== 70) { - $ERROR('#7: 7e1 === 70'); -} - -//CHECK#8 -if (8e1 !== 80) { - $ERROR('#8: 8e1 === 80'); -} - -//CHECK#9 -if (9e1 !== 90) { - $ERROR('#9: 9e1 === 90'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A1.2_T2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A1.2_T2.js deleted file mode 100644 index b8c469d56..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A1.2_T2.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.3_A1.2_T2; - * @section: 7.8.3; - * @assertion: DecimalLiteral :: DecimalIntegerLiteral ExponentPart; - * @description: ExponentPart :: E DecimalDigits; -*/ - -//CHECK#0 -if (0E1 !== 0) { - $ERROR('#0: 0E1 === 0'); -} - -//CHECK#1 -if (1E1 !== 10) { - $ERROR('#1: 1E1 === 1'); -} - -//CHECK#2 -if (2E1 !== 20) { - $ERROR('#2: 2E1 === 20'); -} - -//CHECK#3 -if (3E1 !== 30) { - $ERROR('#3: 3E1 === 30'); -} - -//CHECK#4 -if (4E1 !== 40) { - $ERROR('#4: 4E1 === 40'); -} - -//CHECK#5 -if (5E1 !== 50) { - $ERROR('#5: 5E1 === 50'); -} - -//CHECK#6 -if (6E1 !== 60) { - $ERROR('#6: 6E1 === 60'); -} - -//CHECK#7 -if (7E1 !== 70) { - $ERROR('#7: 7E1 === 70'); -} - -//CHECK#8 -if (8E1 !== 80) { - $ERROR('#8: 8E1 === 80'); -} - -//CHECK#9 -if (9E1 !== 90) { - $ERROR('#9: 9E1 === 90'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A1.2_T3.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A1.2_T3.js deleted file mode 100644 index f40072b36..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A1.2_T3.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.3_A1.2_T3; - * @section: 7.8.3; - * @assertion: DecimalLiteral :: DecimalIntegerLiteral ExponentPart; - * @description: ExponentPart :: e -DecimalDigits; -*/ - -//CHECK#0 -if (0e-1 !== 0) { - $ERROR('#0: 0e-1 === 0'); -} - -//CHECK#1 -if (1e-1 !== 0.1) { - $ERROR('#1: 1e-1 === 0.1'); -} - -//CHECK#2 -if (2e-1 !== 0.2) { - $ERROR('#2: 2e-1 === 0.2'); -} - -//CHECK#3 -if (3e-1 !== 0.3) { - $ERROR('#3: 3e-1 === 0.3'); -} - -//CHECK#4 -if (4e-1 !== 0.4) { - $ERROR('#4: 4e-1 === 0.4'); -} - -//CHECK#5 -if (5e-1 !== 0.5) { - $ERROR('#5: 5e-1 === 0.5'); -} - -//CHECK#6 -if (6e-1 !== 0.6) { - $ERROR('#6: 6e-1 === 0.6'); -} - -//CHECK#7 -if (7e-1 !== 0.7) { - $ERROR('#7: 7e-1 === 0.7'); -} - -//CHECK#8 -if (8e-1 !== 0.8) { - $ERROR('#8: 8e-1 === 0.8'); -} - -//CHECK#9 -if (9e-1 !== 0.9) { - $ERROR('#9: 9e-1 === 0.9'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A1.2_T4.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A1.2_T4.js deleted file mode 100644 index c2771dbc4..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A1.2_T4.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.3_A1.2_T4; - * @section: 7.8.3; - * @assertion: DecimalLiteral :: DecimalIntegerLiteral ExponentPart; - * @description: ExponentPart :: E -DecimalDigits; -*/ - -//CHECK#0 -if (0E-1 !== 0) { - $ERROR('#0: 0E-1 === 0'); -} - -//CHECK#1 -if (1E-1 !== 0.1) { - $ERROR('#1: 1E-1 === 0.1'); -} - -//CHECK#2 -if (2E-1 !== 0.2) { - $ERROR('#2: 2E-1 === 0.2'); -} - -//CHECK#3 -if (3E-1 !== 0.3) { - $ERROR('#3: 3E-1 === 0.3'); -} - -//CHECK#4 -if (4E-1 !== 0.4) { - $ERROR('#4: 4E-1 === 0.4'); -} - -//CHECK#5 -if (5E-1 !== 0.5) { - $ERROR('#5: 5E-1 === 0.5'); -} - -//CHECK#6 -if (6E-1 !== 0.6) { - $ERROR('#6: 6E-1 === 0.6'); -} - -//CHECK#7 -if (7E-1 !== 0.7) { - $ERROR('#7: 7E-1 === 0.7'); -} - -//CHECK#8 -if (8E-1 !== 0.8) { - $ERROR('#8: 8E-1 === 0.8'); -} - -//CHECK#9 -if (9E-1 !== 0.9) { - $ERROR('#9: 9E-1 === 0.9'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A1.2_T5.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A1.2_T5.js deleted file mode 100644 index 0cc0a0569..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A1.2_T5.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.3_A1.2_T5; - * @section: 7.8.3; - * @assertion: DecimalLiteral :: DecimalIntegerLiteral ExponentPart; - * @description: ExponentPart :: e +DecimalDigits; -*/ - -//CHECK#0 -if (0e+1 !== 0) { - $ERROR('#0: 0e+1 === 0'); -} - -//CHe+CK#1 -if (1e+1 !== 10) { - $ERROR('#1: 1e+1 === 10'); -} - -//CHe+CK#2 -if (2e+1 !== 20) { - $ERROR('#2: 2e+1 === 20'); -} - -//CHe+CK#3 -if (3e+1 !== 30) { - $ERROR('#3: 3e+1 === 30'); -} - -//CHe+CK#4 -if (4e+1 !== 40) { - $ERROR('#4: 4e+1 === 40'); -} - -//CHe+CK#5 -if (5e+1 !== 50) { - $ERROR('#5: 5e+1 === 50'); -} - -//CHe+CK#6 -if (6e+1 !== 60) { - $ERROR('#6: 6e+1 === 60'); -} - -//CHe+CK#7 -if (7e+1 !== 70) { - $ERROR('#7: 7e+1 === 70'); -} - -//CHe+CK#8 -if (8e+1 !== 80) { - $ERROR('#8: 8e+1 === 80'); -} - -//CHe+CK#9 -if (9e+1 !== 90) { - $ERROR('#9: 9e+1 === 90'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A1.2_T6.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A1.2_T6.js deleted file mode 100644 index 3f50e4f26..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A1.2_T6.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.3_A1.2_T6; - * @section: 7.8.3; - * @assertion: DecimalLiteral :: DecimalIntegerLiteral ExponentPart; - * @description: ExponentPart :: E +DecimalDigits; -*/ - -//CHECK#0 -if (0E+1 !== 0) { - $ERROR('#0: 0E+1 === 0'); -} - -//CHE+CK#1 -if (1E+1 !== 10) { - $ERROR('#1: 1E+1 === 10'); -} - -//CHE+CK#2 -if (2E+1 !== 20) { - $ERROR('#2: 2E+1 === 20'); -} - -//CHE+CK#3 -if (3E+1 !== 30) { - $ERROR('#3: 3E+1 === 30'); -} - -//CHE+CK#4 -if (4E+1 !== 40) { - $ERROR('#4: 4E+1 === 40'); -} - -//CHE+CK#5 -if (5E+1 !== 50) { - $ERROR('#5: 5E+1 === 50'); -} - -//CHE+CK#6 -if (6E+1 !== 60) { - $ERROR('#6: 6E+1 === 60'); -} - -//CHE+CK#7 -if (7E+1 !== 70) { - $ERROR('#7: 7E+1 === 70'); -} - -//CHE+CK#8 -if (8E+1 !== 80) { - $ERROR('#8: 8E+1 === 80'); -} - -//CHE+CK#9 -if (9E+1 !== 90) { - $ERROR('#9: 9E+1 === 90'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A1.2_T7.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A1.2_T7.js deleted file mode 100644 index 62e8241eb..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A1.2_T7.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.3_A1.2_T7; - * @section: 7.8.3; - * @assertion: DecimalLiteral :: DecimalIntegerLiteral ExponentPart; - * @description: ExponentPart :: e 0; -*/ - -//CHECK#0 -if (0e0 !== 0) { - $ERROR('#0: 0e0 === 0'); -} - -//CHECK#1 -if (1e0 !== 1) { - $ERROR('#1: 1e0 === 1'); -} - -//CHECK#2 -if (2e0 !== 2) { - $ERROR('#2: 2e0 === 2'); -} - -//CHECK#3 -if (3e0 !== 3) { - $ERROR('#3: 3e0 === 3'); -} - -//CHECK#4 -if (4e0 !== 4) { - $ERROR('#4: 4e0 === 4'); -} - -//CHECK#5 -if (5e0 !== 5) { - $ERROR('#5: 5e0 === 5'); -} - -//CHECK#6 -if (6e0 !== 6) { - $ERROR('#6: 6e0 === 6'); -} - -//CHECK#7 -if (7e0 !== 7) { - $ERROR('#7: 7e0 === 7'); -} - -//CHECK#8 -if (8e0 !== 8) { - $ERROR('#8: 8e0 === 8'); -} - -//CHECK#9 -if (9e0 !== 9) { - $ERROR('#9: 9e0 === 9'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A1.2_T8.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A1.2_T8.js deleted file mode 100644 index 73cddcc61..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A1.2_T8.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.3_A1.2_T8; - * @section: 7.8.3; - * @assertion: DecimalLiteral :: DecimalIntegerLiteral ExponentPart; - * @description: ExponentPart :: E 0; -*/ - -//CHECK#0 -if (0E0 !== 0) { - $ERROR('#0: 0E0 === 0'); -} - -//CHECK#1 -if (1E0 !== 1) { - $ERROR('#1: 1E0 === 1'); -} - -//CHECK#2 -if (2E0 !== 2) { - $ERROR('#2: 2E0 === 2'); -} - -//CHECK#3 -if (3E0 !== 3) { - $ERROR('#3: 3E0 === 3'); -} - -//CHECK#4 -if (4E0 !== 4) { - $ERROR('#4: 4E0 === 4'); -} - -//CHECK#5 -if (5E0 !== 5) { - $ERROR('#5: 5E0 === 5'); -} - -//CHECK#6 -if (6E0 !== 6) { - $ERROR('#6: 6E0 === 6'); -} - -//CHECK#7 -if (7E0 !== 7) { - $ERROR('#7: 7E0 === 7'); -} - -//CHECK#8 -if (8E0 !== 8) { - $ERROR('#8: 8E0 === 8'); -} - -//CHECK#9 -if (9E0 !== 9) { - $ERROR('#9: 9E0 === 9'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A2.1_T1.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A2.1_T1.js deleted file mode 100644 index e670bfa24..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A2.1_T1.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.3_A2.1_T1; - * @section: 7.8.3; - * @assertion: DecimalLiteral :: .DecimalDigits; - * @description: Use .DecimalDigit; -*/ - -//CHECK#0 -if (.0 !== 0.0) { - $ERROR('#0: .0 === 0.0'); -} - -//CHECK#1 -if (.1 !== 0.1) { - $ERROR('#1: .1 === 0.1'); -} - -//CHECK#2 -if (.2 !== 0.2) { - $ERROR('#2: .2 === 0.2'); -} - -//CHECK#3 -if (.3 !== 0.3) { - $ERROR('#3: .3 === 0.3'); -} - -//CHECK#4 -if (.4 !== 0.4) { - $ERROR('#4: .4 === 0.4'); -} - -//CHECK#5 -if (.5 !== 0.5) { - $ERROR('#5: .5 === 0.5'); -} - -//CHECK#6 -if (.6 !== 0.6) { - $ERROR('#6: .6 === 0.6'); -} - -//CHECK#7 -if (.7 !== 0.7) { - $ERROR('#7: .7 === 0.7'); -} - -//CHECK#8 -if (.8 !== 0.8) { - $ERROR('#8: .8 === 0.8'); -} - -//CHECK#9 -if (.9 !== 0.9) { - $ERROR('#9: .9 === 0.9'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A2.1_T2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A2.1_T2.js deleted file mode 100644 index 7370cc3cd..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A2.1_T2.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.3_A2.1_T2; - * @section: 7.8.3; - * @assertion: DecimalLiteral :: .DecimalDigits; - * @description: Use .DecimalDigits; -*/ - -//CHECK#0 -if (.00 !== 0.00) { - $ERROR('#0: .00 === 0.00'); -} - -//CHECK#1 -if (.11 !== 0.11) { - $ERROR('#1: .11 === 0.11'); -} - -//CHECK#2 -if (.22 !== 0.22) { - $ERROR('#2: .22 === 0.22'); -} - -//CHECK#3 -if (.33 !== 0.33) { - $ERROR('#3: .33 === 0.33'); -} - -//CHECK#4 -if (.44 !== 0.44) { - $ERROR('#4: .44 === 0.44'); -} - -//CHECK#5 -if (.55 !== 0.55) { - $ERROR('#5: .55 === 0.55'); -} - -//CHECK#6 -if (.66 !== 0.66) { - $ERROR('#6: .66 === 0.66'); -} - -//CHECK#7 -if (.77 !== 0.77) { - $ERROR('#7: .77 === 0.77'); -} - -//CHECK#8 -if (.88 !== 0.88) { - $ERROR('#8: .88 === 0.88'); -} - -//CHECK#9 -if (.99 !== 0.99) { - $ERROR('#9: .99 === 0.99'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A2.1_T3.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A2.1_T3.js deleted file mode 100644 index 126e7902d..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A2.1_T3.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.3_A2.1_T3; - * @section: 7.8.3; - * @assertion: DecimalLiteral :: .DecimalDigits; - * @description: Use .DecimalDigits that have at the end zeros; -*/ - -//CHECK#0 -if (.00 !== 0.0) { - $ERROR('#0: .0 === 0.0'); -} - -//CHECK#1 -if (.10 !== 0.1) { - $ERROR('#1: .1 === 0.1'); -} - -//CHECK#2 -if (.20 !== 0.2) { - $ERROR('#2: .2 === 0.2'); -} - -//CHECK#3 -if (.30 !== 0.3) { - $ERROR('#3: .3 === 0.3'); -} - -//CHECK#4 -if (.40 !== 0.4) { - $ERROR('#4: .4 === 0.4'); -} - -//CHECK#5 -if (.50 !== 0.5) { - $ERROR('#5: .5 === 0.5'); -} - -//CHECK#6 -if (.60 !== 0.6) { - $ERROR('#6: .6 === 0.6'); -} - -//CHECK#7 -if (.70 !== 0.7) { - $ERROR('#7: .7 === 0.7'); -} - -//CHECK#8 -if (.80 !== 0.8) { - $ERROR('#8: .8 === 0.8'); -} - -//CHECK#9 -if (.90 !== 0.9) { - $ERROR('#9: .9 === 0.9'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A2.2_T1.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A2.2_T1.js deleted file mode 100644 index 1481c1976..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A2.2_T1.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.3_A2.2_T1; - * @section: 7.8.3; - * @assertion: DecimalLiteral :: .DecimalDigits ExponentPart; - * @description: ExponentPart :: e DecimalDigits; -*/ - -//CHECK#0 -if (.0e1 !== 0) { - $ERROR('#0: .0e1 === 0'); -} - -//CHECK#1 -if (.1e1 !== 1) { - $ERROR('#1: .1e1 === 1'); -} - -//CHECK#2 -if (.2e1 !== 2) { - $ERROR('#2: .2e1 === 2'); -} - -//CHECK#3 -if (.3e1 !== 3) { - $ERROR('#3: .3e1 === 3'); -} - -//CHECK#4 -if (.4e1 !== 4) { - $ERROR('#4: .4e1 === 4'); -} - -//CHECK#5 -if (.5e1 !== 5) { - $ERROR('#5: .5e1 === 5'); -} - -//CHECK#6 -if (.6e1 !== 6) { - $ERROR('#6: .6e1 === 6'); -} - -//CHECK#7 -if (.7e1 !== 7) { - $ERROR('#7: .7e1 === 7'); -} - -//CHECK#8 -if (.8e1 !== 8) { - $ERROR('#8: .8e1 === 8'); -} - -//CHECK#9 -if (.9e1 !== 9) { - $ERROR('#9: .9e1 === 9'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A2.2_T2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A2.2_T2.js deleted file mode 100644 index 19eeabcd9..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A2.2_T2.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.3_A2.2_T2; - * @section: 7.8.3; - * @assertion: DecimalLiteral :: .DecimalDigits ExponentPart; - * @description: ExponentPart :: E DecimalDigits; -*/ - -//CHECK#0 -if (.0E1 !== 0) { - $ERROR('#0: .0E1 === 0'); -} - -//CHECK#1 -if (.1E1 !== 1) { - $ERROR('#1: .1E1 === 1'); -} - -//CHECK#2 -if (.2E1 !== 2) { - $ERROR('#2: .2E1 === 2'); -} - -//CHECK#3 -if (.3E1 !== 3) { - $ERROR('#3: .3E1 === 3'); -} - -//CHECK#4 -if (.4E1 !== 4) { - $ERROR('#4: .4E1 === 4'); -} - -//CHECK#5 -if (.5E1 !== 5) { - $ERROR('#5: .5E1 === 5'); -} - -//CHECK#6 -if (.6E1 !== 6) { - $ERROR('#6: .6E1 === 6'); -} - -//CHECK#7 -if (.7E1 !== 7) { - $ERROR('#7: .7E1 === 7'); -} - -//CHECK#8 -if (.8E1 !== 8) { - $ERROR('#8: .8E1 === 8'); -} - -//CHECK#9 -if (.9E1 !== 9) { - $ERROR('#9: .9E1 === 9'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A2.2_T3.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A2.2_T3.js deleted file mode 100644 index d272c9349..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A2.2_T3.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.3_A2.2_T3; - * @section: 7.8.3; - * @assertion: DecimalLiteral :: .DecimalDigits ExponentPart; - * @description: ExponentPart :: e +DecimalDigits; -*/ - -//CHECK#0 -if (.0e-1 !== 0) { - $ERROR('#0: .0e-1 === 0'); -} - -//CHECK#1 -if (.1e-1 !== 0.01) { - $ERROR('#1: .1e-1 === 0.01'); -} - -//CHECK#2 -if (.2e-1 !== 0.02) { - $ERROR('#2: .2e-1 === 0.02'); -} - -//CHECK#3 -if (.3e-1 !== 0.03) { - $ERROR('#3: .3e-1 === 0.03'); -} - -//CHECK#4 -if (.4e-1 !== 0.04) { - $ERROR('#4: .4e-1 === 0.04'); -} - -//CHECK#5 -if (.5e-1 !== 0.05) { - $ERROR('#5: .5e-1 === 0.05'); -} - -//CHECK#6 -if (.6e-1 !== 0.06) { - $ERROR('#6: .6e-1 === 0.06'); -} - -//CHECK#7 -if (.7e-1 !== 0.07) { - $ERROR('#7: .7e-1 === 0.07'); -} - -//CHECK#8 -if (.8e-1 !== 0.08) { - $ERROR('#8: .8e-1 === 0.08'); -} - -//CHECK#9 -if (.9e-1 !== 0.09) { - $ERROR('#9: .9e-1 === 0.09'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A2.2_T4.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A2.2_T4.js deleted file mode 100644 index 838e9cb12..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A2.2_T4.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.3_A2.2_T4; - * @section: 7.8.3; - * @assertion: DecimalLiteral :: .DecimalDigits ExponentPart; - * @description: ExponentPart :: E +DecimalDigits; -*/ - -//CHECK#0 -if (.0E-1 !== 0) { - $ERROR('#0: .0E-1 === 0'); -} - -//CHECK#1 -if (.1E-1 !== 0.01) { - $ERROR('#1: .1E-1 === 0.01'); -} - -//CHECK#2 -if (.2E-1 !== 0.02) { - $ERROR('#2: .2E-1 === 0.02'); -} - -//CHECK#3 -if (.3E-1 !== 0.03) { - $ERROR('#3: .3E-1 === 0.03'); -} - -//CHECK#4 -if (.4E-1 !== 0.04) { - $ERROR('#4: .4E-1 === 0.04'); -} - -//CHECK#5 -if (.5E-1 !== 0.05) { - $ERROR('#5: .5E-1 === 0.05'); -} - -//CHECK#6 -if (.6E-1 !== 0.06) { - $ERROR('#6: .6E-1 === 0.06'); -} - -//CHECK#7 -if (.7E-1 !== 0.07) { - $ERROR('#7: .7E-1 === 0.07'); -} - -//CHECK#8 -if (.8E-1 !== 0.08) { - $ERROR('#8: .8E-1 === 0.08'); -} - -//CHECK#9 -if (.9E-1 !== 0.09) { - $ERROR('#9: .9E-1 === 0.09'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A2.2_T5.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A2.2_T5.js deleted file mode 100644 index ff9c87c77..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A2.2_T5.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.3_A2.2_T5; - * @section: 7.8.3; - * @assertion: DecimalLiteral :: .DecimalDigits ExponentPart; - * @description: ExponentPart :: e +DecimalDigits; -*/ - -//CHECK#0 -if (.0e+1 !== 0) { - $ERROR('#0: .0e+1 === 0'); -} - -//CHECK#1 -if (.1e+1 !== 1) { - $ERROR('#1: .1e+1 === 1'); -} - -//CHECK#2 -if (.2e+1 !== 2) { - $ERROR('#2: .2e+1 === 2'); -} - -//CHECK#3 -if (.3e+1 !== 3) { - $ERROR('#3: .3e+1 === 3'); -} - -//CHECK#4 -if (.4e+1 !== 4) { - $ERROR('#4: .4e+1 === 4'); -} - -//CHECK#5 -if (.5e+1 !== 5) { - $ERROR('#5: .5e+1 === 5'); -} - -//CHECK#6 -if (.6e+1 !== 6) { - $ERROR('#6: .6e+1 === 6'); -} - -//CHECK#7 -if (.7e+1 !== 7) { - $ERROR('#7: .7e+1 === 7'); -} - -//CHECK#8 -if (.8e+1 !== 8) { - $ERROR('#8: .8e+1 === 8'); -} - -//CHECK#9 -if (.9e+1 !== 9) { - $ERROR('#9: .9e+1 === 9'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A2.2_T6.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A2.2_T6.js deleted file mode 100644 index 4e9b5bfa2..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A2.2_T6.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.3_A2.2_T6; - * @section: 7.8.3; - * @assertion: DecimalLiteral :: .DecimalDigits ExponentPart; - * @description: ExponentPart :: E +DecimalDigits; -*/ - -//CHECK#0 -if (.0E+1 !== 0) { - $ERROR('#0: .0E+1 === 0'); -} - -//CHECK#1 -if (.1E+1 !== 1) { - $ERROR('#1: .1E+1 === 1'); -} - -//CHECK#2 -if (.2E+1 !== 2) { - $ERROR('#2: .2E+1 === 2'); -} - -//CHECK#3 -if (.3E+1 !== 3) { - $ERROR('#3: .3E+1 === 3'); -} - -//CHECK#4 -if (.4E+1 !== 4) { - $ERROR('#4: .4E+1 === 4'); -} - -//CHECK#5 -if (.5E+1 !== 5) { - $ERROR('#5: .5E+1 === 5'); -} - -//CHECK#6 -if (.6E+1 !== 6) { - $ERROR('#6: .6E+1 === 6'); -} - -//CHECK#7 -if (.7E+1 !== 7) { - $ERROR('#7: .7E+1 === 7'); -} - -//CHECK#8 -if (.8E+1 !== 8) { - $ERROR('#8: .8E+1 === 8'); -} - -//CHECK#9 -if (.9E+1 !== 9) { - $ERROR('#9: .9E+1 === 9'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A2.2_T7.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A2.2_T7.js deleted file mode 100644 index 2d6cda8dd..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A2.2_T7.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.3_A2.2_T7; - * @section: 7.8.3; - * @assertion: DecimalLiteral :: .DecimalDigits ExponentPart; - * @description: ExponentPart :: e 0; -*/ - -//CHECK#0 -if (.0e0 !== 0.0) { - $ERROR('#0: .0e0 === 0.0'); -} - -//CHECK#1 -if (.1e0 !== 0.1) { - $ERROR('#1: .1e0 === 0.1'); -} - -//CHECK#2 -if (.2e0 !== 0.2) { - $ERROR('#2: .2e0 === 0.2'); -} - -//CHECK#3 -if (.3e0 !== 0.3) { - $ERROR('#3: .3e0 === 0.3'); -} - -//CHECK#4 -if (.4e0 !== 0.4) { - $ERROR('#4: .4e0 === 0.4'); -} - -//CHECK#5 -if (.5e0 !== 0.5) { - $ERROR('#5: .5e0 === 0.5'); -} - -//CHECK#6 -if (.6e0 !== 0.6) { - $ERROR('#6: .6e0 === 0.6'); -} - -//CHECK#7 -if (.7e0 !== 0.7) { - $ERROR('#7: .7e0 === 0.7'); -} - -//CHECK#8 -if (.8e0 !== 0.8) { - $ERROR('#8: .8e0 === 0.8'); -} - -//CHECK#9 -if (.9e0 !== 0.9) { - $ERROR('#9: .9e0 === 0.9'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A2.2_T8.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A2.2_T8.js deleted file mode 100644 index e85c55fdf..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A2.2_T8.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.3_A2.2_T8; - * @section: 7.8.3; - * @assertion: DecimalLiteral :: .DecimalDigits ExponentPart; - * @description: ExponentPart :: E 0; -*/ - -//CHECK#0 -if (.0E0 !== 0.0) { - $ERROR('#0: .0E0 === 0.0'); -} - -//CHECK#1 -if (.1E0 !== 0.1) { - $ERROR('#1: .1E0 === 0.1'); -} - -//CHECK#2 -if (.2E0 !== 0.2) { - $ERROR('#2: .2E0 === 0.2'); -} - -//CHECK#3 -if (.3E0 !== 0.3) { - $ERROR('#3: .3E0 === 0.3'); -} - -//CHECK#4 -if (.4E0 !== 0.4) { - $ERROR('#4: .4E0 === 0.4'); -} - -//CHECK#5 -if (.5E0 !== 0.5) { - $ERROR('#5: .5E0 === 0.5'); -} - -//CHECK#6 -if (.6E0 !== 0.6) { - $ERROR('#6: .6E0 === 0.6'); -} - -//CHECK#7 -if (.7E0 !== 0.7) { - $ERROR('#7: .7E0 === 0.7'); -} - -//CHECK#8 -if (.8E0 !== 0.8) { - $ERROR('#8: .8E0 === 0.8'); -} - -//CHECK#9 -if (.9E0 !== 0.9) { - $ERROR('#9: .9E0 === 0.9'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A3.1_T1.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A3.1_T1.js deleted file mode 100644 index 977ce1605..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A3.1_T1.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.3_A3.1_T1; - * @section: 7.8.3; - * @assertion: DecimalLiteral :: DecimalIntegerLiteral. ; - * @description: DecimalIntegerLiteral :: 0, NoNZeroDigit; -*/ - -//CHECK#0 -if (0. !== 0) { - $ERROR('#0: 0. === 0'); -} - -//CHECK#1 -if (1. !== 1) { - $ERROR('#1: 1. === 1'); -} - -//CHECK#2 -if (2. !== 2) { - $ERROR('#2: 2. === 2'); -} - -//CHECK#3 -if (3. !== 3) { - $ERROR('#3: 3. === 3'); -} - -//CHECK#4 -if (4. !== 4) { - $ERROR('#4: 4. === 4'); -} - -//CHECK#5 -if (5. !== 5) { - $ERROR('#5: 5. === 5'); -} - -//CHECK#6 -if (6. !== 6) { - $ERROR('#6: 6. === 6'); -} - -//CHECK#7 -if (7. !== 7) { - $ERROR('#7: 7. === 7'); -} - -//CHECK#8 -if (8. !== 8) { - $ERROR('#8: 8. === 8'); -} - -//CHECK#9 -if (9. !== 9) { - $ERROR('#9: 9. === 9'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A3.1_T2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A3.1_T2.js deleted file mode 100644 index 87022120a..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A3.1_T2.js +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.3_A3.1_T2; - * @section: 7.8.3; - * @assertion: DecimalLiteral :: DecimalIntegerLiteral. ; - * @description: DecimalIntegerLiteral :: NoNZeroDigit DecimalDigigts; -*/ - - -//CHECK#1 -if (11. !== 11) { - $ERROR('#1: 11. === 11'); -} - -//CHECK#2 -if (22. !== 22) { - $ERROR('#2: 22. === 22'); -} - -//CHECK#3 -if (33. !== 33) { - $ERROR('#3: 33. === 33'); -} - -//CHECK#4 -if (44. !== 44) { - $ERROR('#4: 44. === 44'); -} - -//CHECK#5 -if (55. !== 55) { - $ERROR('#5: 55. === 55'); -} - -//CHECK#6 -if (66. !== 66) { - $ERROR('#6: 66. === 66'); -} - -//CHECK#7 -if (77. !== 77) { - $ERROR('#7: 77. === 77'); -} - -//CHECK#8 -if (88. !== 88) { - $ERROR('#8: 88. === 88'); -} - -//CHECK#9 -if (99. !== 99) { - $ERROR('#9: 99. === 99'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A3.2_T1.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A3.2_T1.js deleted file mode 100644 index ee1afc0dd..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A3.2_T1.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.3_A3.2_T1; - * @section: 7.8.3; - * @assertion: DecimalLiteral :: DecimalIntegerLiteral. DecimalDigits; - * @description: After DecimalIntegerLiteral. used ZeroDigit; -*/ - -//CHECK#0 -if (0.0 !== 0) { - $ERROR('#0: 0.0 === 0'); -} - -//CHECK#1 -if (1.0 !== 1) { - $ERROR('#1: 1.0 === 1'); -} - -//CHECK#2 -if (2.0 !== 2) { - $ERROR('#2: 2.0 === 2'); -} - -//CHECK#3 -if (3.0 !== 3) { - $ERROR('#3: 3.0 === 3'); -} - -//CHECK#4 -if (4.0 !== 4) { - $ERROR('#4: 4.0 === 4'); -} - -//CHECK#5 -if (5.0 !== 5) { - $ERROR('#5: 5.0 === 5'); -} - -//CHECK#6 -if (6.0 !== 6) { - $ERROR('#6: 6.0 === 6'); -} - -//CHECK#7 -if (7.0 !== 7) { - $ERROR('#7: 7.0 === 7'); -} - -//CHECK#8 -if (8.0 !== 8) { - $ERROR('#8: 8.0 === 8'); -} - -//CHECK#9 -if (9.0 !== 9) { - $ERROR('#9: 9.0 === 9'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A3.2_T2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A3.2_T2.js deleted file mode 100644 index 03688aa04..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A3.2_T2.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.3_A3.2_T2; - * @section: 7.8.3; - * @assertion: DecimalLiteral :: DecimalIntegerLiteral. DecimalDigits; - * @description: After DecimalIntegerLiteral. used ZeroDigits; -*/ - -//CHECK#0 -if (0.00 !== 0) { - $ERROR('#0: 0.00 === 0'); -} - -//CHECK#1 -if (1.00 !== 1) { - $ERROR('#1: 1.00 === 1'); -} - -//CHECK#2 -if (2.00 !== 2) { - $ERROR('#2: 2.00 === 2'); -} - -//CHECK#3 -if (3.00 !== 3) { - $ERROR('#3: 3.00 === 3'); -} - -//CHECK#4 -if (4.00 !== 4) { - $ERROR('#4: 4.00 === 4'); -} - -//CHECK#5 -if (5.00 !== 5) { - $ERROR('#5: 5.00 === 5'); -} - -//CHECK#6 -if (6.00 !== 6) { - $ERROR('#6: 6.00 === 6'); -} - -//CHECK#7 -if (7.00 !== 7) { - $ERROR('#7: 7.00 === 7'); -} - -//CHECK#8 -if (8.00 !== 8) { - $ERROR('#8: 8.00 === 8'); -} - -//CHECK#9 -if (9.00 !== 9) { - $ERROR('#9: 9.00 === 9'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A3.2_T3.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A3.2_T3.js deleted file mode 100644 index 1b06b4a98..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A3.2_T3.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.3_A3.2_T3; - * @section: 7.8.3; - * @assertion: DecimalLiteral :: DecimalIntegerLiteral. DecimalDigits; - * @description: After DecimalIntegerLiteral. used NoNZeroDigit; -*/ - -//CHECK#0 -if (0.0 !== 0.0) { - $ERROR('#0: 0.0 === 0.0'); -} - -//CHECK#1 -if (1.1 !== 1.1) { - $ERROR('#1: 1.1 === 1.1'); -} - -//CHECK#2 -if (2.2 !== 2.2) { - $ERROR('#2: 2.2 === 2.2'); -} - -//CHECK#3 -if (3.3 !== 3.3) { - $ERROR('#3: 3.3 === 3.3'); -} - -//CHECK#4 -if (4.4 !== 4.4) { - $ERROR('#4: 4.4 === 4.4'); -} - -//CHECK#5 -if (5.5 !== 5.5) { - $ERROR('#5: 5.5 === 5.5'); -} - -//CHECK#6 -if (6.6 !== 6.6) { - $ERROR('#6: 6.6 === 6.6'); -} - -//CHECK#7 -if (7.7 !== 7.7) { - $ERROR('#7: 7.7 === 7.7'); -} - -//CHECK#8 -if (8.8 !== 8.8) { - $ERROR('#8: 8..8 === 8.8'); -} - -//CHECK#9 -if (9.9 !== 9.9) { - $ERROR('#9: 9.9 === 9.9'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A3.3_T1.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A3.3_T1.js deleted file mode 100644 index 4558c1e1c..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A3.3_T1.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.3_A3.3_T1; - * @section: 7.8.3; - * @assertion: DecimalLiteral :: DecimalIntegerLiteral. ExponentPart; - * @description: ExponentPart :: e DecimalDigits; -*/ - -//CHECK#0 -if (0.e1 !== 0) { - $ERROR('#0: 0.e1 === 0'); -} - -//CHECK#1 -if (1.e1 !== 10) { - $ERROR('#1: 1.e1 === 10'); -} - -//CHECK#2 -if (2.e1 !== 20) { - $ERROR('#2: 2.e1 === 20'); -} - -//CHECK#3 -if (3.e1 !== 30) { - $ERROR('#3: 3.e1 === 30'); -} - -//CHECK#4 -if (4.e1 !== 40) { - $ERROR('#4: 4.e1 === 40'); -} - -//CHECK#5 -if (5.e1 !== 50) { - $ERROR('#5: 5.e1 === 50'); -} - -//CHECK#6 -if (6.e1 !== 60) { - $ERROR('#6: 6.e1 === 60'); -} - -//CHECK#7 -if (7.e1 !== 70) { - $ERROR('#7: 7.e1 === 70'); -} - -//CHECK#8 -if (8.e1 !== 80) { - $ERROR('#8: 8.e1 === 80'); -} - -//CHECK#9 -if (9.e1 !== 90) { - $ERROR('#9: 9.e1 === 90'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A3.3_T2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A3.3_T2.js deleted file mode 100644 index 87648a40d..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A3.3_T2.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.3_A3.3_T2; - * @section: 7.8.3; - * @assertion: DecimalLiteral :: DecimalIntegerLiteral. ExponentPart; - * @description: ExponentPart :: E DecimalDigits; -*/ - -//CHECK#0 -if (0.E1 !== 0) { - $ERROR('#0: 0.E1 === 0'); -} - -//CHECK#1 -if (1.E1 !== 10) { - $ERROR('#1: 1.E1 === 10'); -} - -//CHECK#2 -if (2.E1 !== 20) { - $ERROR('#2: 2.E1 === 20'); -} - -//CHECK#3 -if (3.E1 !== 30) { - $ERROR('#3: 3.E1 === 30'); -} - -//CHECK#4 -if (4.E1 !== 40) { - $ERROR('#4: 4.E1 === 40'); -} - -//CHECK#5 -if (5.E1 !== 50) { - $ERROR('#5: 5.E1 === 50'); -} - -//CHECK#6 -if (6.E1 !== 60) { - $ERROR('#6: 6.E1 === 60'); -} - -//CHECK#7 -if (7.E1 !== 70) { - $ERROR('#7: 7.E1 === 70'); -} - -//CHECK#8 -if (8.E1 !== 80) { - $ERROR('#8: 8.E1 === 80'); -} - -//CHECK#9 -if (9.E1 !== 90) { - $ERROR('#9: 9.E1 === 90'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A3.3_T3.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A3.3_T3.js deleted file mode 100644 index 6c4553b1f..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A3.3_T3.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.3_A3.3_T3; - * @section: 7.8.3; - * @assertion: DecimalLiteral :: DecimalIntegerLiteral. ExponentPart; - * @description: ExponentPart :: e -DecimalDigits; -*/ - -//CHECK#0 -if (0.e-1 !== 0) { - $ERROR('#0: 0.e-1 === 0'); -} - -//CHECK#1 -if (1.e-1 !== 0.1) { - $ERROR('#1: 1.e-1 === 0.1'); -} - -//CHECK#2 -if (2.e-1 !== 0.2) { - $ERROR('#2: 2.e-1 === 0.2'); -} - -//CHECK#3 -if (3.e-1 !== 0.3) { - $ERROR('#3: 3.e-1 === 0.3'); -} - -//CHECK#4 -if (4.e-1 !== 0.4) { - $ERROR('#4: 4.e-1 === 0.4'); -} - -//CHECK#5 -if (5.e-1 !== 0.5) { - $ERROR('#5: 5.e-1 === 0.5'); -} - -//CHECK#6 -if (6.e-1 !== 0.6) { - $ERROR('#6: 6.e-1 === 0.6'); -} - -//CHECK#7 -if (7.e-1 !== 0.7) { - $ERROR('#7: 7.e-1 === 0.7'); -} - -//CHECK#8 -if (8.e-1 !== 0.8) { - $ERROR('#8: 8.e-1 === 0.8'); -} - -//CHECK#9 -if (9.e-1 !== 0.9) { - $ERROR('#9: 9.e-1 === 0.9'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A3.3_T4.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A3.3_T4.js deleted file mode 100644 index a47be52e6..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A3.3_T4.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.3_A3.3_T4; - * @section: 7.8.3; - * @assertion: DecimalLiteral :: DecimalIntegerLiteral. ExponentPart; - * @description: ExponentPart :: E -DecimalDigits; -*/ - -//CHECK#0 -if (0.E-1 !== 0) { - $ERROR('#0: 0.E-1 === 0'); -} - -//CHECK#1 -if (1.E-1 !== 0.1) { - $ERROR('#1: 1.E-1 === 0.1'); -} - -//CHECK#2 -if (2.E-1 !== 0.2) { - $ERROR('#2: 2.E-1 === 0.2'); -} - -//CHECK#3 -if (3.E-1 !== 0.3) { - $ERROR('#3: 3.E-1 === 0.3'); -} - -//CHECK#4 -if (4.E-1 !== 0.4) { - $ERROR('#4: 4.E-1 === 0.4'); -} - -//CHECK#5 -if (5.E-1 !== 0.5) { - $ERROR('#5: 5.E-1 === 0.5'); -} - -//CHECK#6 -if (6.E-1 !== 0.6) { - $ERROR('#6: 6.E-1 === 0.6'); -} - -//CHECK#7 -if (7.E-1 !== 0.7) { - $ERROR('#7: 7.E-1 === 0.7'); -} - -//CHECK#8 -if (8.E-1 !== 0.8) { - $ERROR('#8: 8.E-1 === 0.8'); -} - -//CHECK#9 -if (9.E-1 !== 0.9) { - $ERROR('#9: 9.E-1 === 0.9'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A3.3_T5.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A3.3_T5.js deleted file mode 100644 index f4e0e079a..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A3.3_T5.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.3_A3.3_T5; - * @section: 7.8.3; - * @assertion: DecimalLiteral :: DecimalIntegerLiteral. ExponentPart; - * @description: ExponentPart :: e +DecimalDigits; -*/ - -//CHECK#0 -if (0.e+1 !== 0) { - $ERROR('#0: 0.e+1 === 0'); -} - -//CHECK#1 -if (1.e+1 !== 10) { - $ERROR('#1: 1.e+1 === 10'); -} - -//CHECK#2 -if (2.e+1 !== 20) { - $ERROR('#2: 2.e+1 === 20'); -} - -//CHECK#3 -if (3.e+1 !== 30) { - $ERROR('#3: 3.e+1 === 30'); -} - -//CHECK#4 -if (4.e+1 !== 40) { - $ERROR('#4: 4.e+1 === 40'); -} - -//CHECK#5 -if (5.e+1 !== 50) { - $ERROR('#5: 5.e+1 === 50'); -} - -//CHECK#6 -if (6.e+1 !== 60) { - $ERROR('#6: 6.e+1 === 60'); -} - -//CHECK#7 -if (7.e+1 !== 70) { - $ERROR('#7: 7.e+1 === 70'); -} - -//CHECK#8 -if (8.e+1 !== 80) { - $ERROR('#8: 8.e+1 === 80'); -} - -//CHECK#9 -if (9.e+1 !== 90) { - $ERROR('#9: 9.e+1 === 90'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A3.3_T6.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A3.3_T6.js deleted file mode 100644 index 895b7d4c3..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A3.3_T6.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.3_A3.3_T6; - * @section: 7.8.3; - * @assertion: DecimalLiteral :: DecimalIntegerLiteral. ExponentPart; - * @description: ExponentPart :: E +DecimalDigits; -*/ - -//CHECK#0 -if (0.E+1 !== 0) { - $ERROR('#0: 0.E+1 === 0'); -} - -//CHECK#1 -if (1.E+1 !== 10) { - $ERROR('#1: 1.E+1 === 10'); -} - -//CHECK#2 -if (2.E+1 !== 20) { - $ERROR('#2: 2.E+1 === 20'); -} - -//CHECK#3 -if (3.E+1 !== 30) { - $ERROR('#3: 3.E+1 === 30'); -} - -//CHECK#4 -if (4.E+1 !== 40) { - $ERROR('#4: 4.E+1 === 40'); -} - -//CHECK#5 -if (5.E+1 !== 50) { - $ERROR('#5: 5.E+1 === 50'); -} - -//CHECK#6 -if (6.E+1 !== 60) { - $ERROR('#6: 6.E+1 === 60'); -} - -//CHECK#7 -if (7.E+1 !== 70) { - $ERROR('#7: 7.E+1 === 70'); -} - -//CHECK#8 -if (8.E+1 !== 80) { - $ERROR('#8: 8.E+1 === 80'); -} - -//CHECK#9 -if (9.E+1 !== 90) { - $ERROR('#9: 9.E+1 === 90'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A3.3_T7.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A3.3_T7.js deleted file mode 100644 index c779350d8..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A3.3_T7.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.3_A3.3_T7; - * @section: 7.8.3; - * @assertion: DecimalLiteral :: DecimalIntegerLiteral. ExponentPart; - * @description: ExponentPart :: e 0; -*/ - -//CHECK#0 -if (0.e0 !== 0) { - $ERROR('#0: 0.e0 === 0'); -} - -//CHECK#1 -if (1.e0 !== 1) { - $ERROR('#1: 1.e0 === 1'); -} - -//CHECK#2 -if (2.e0 !== 2) { - $ERROR('#2: 2.e0 === 2'); -} - -//CHECK#3 -if (3.e0 !== 3) { - $ERROR('#3: 3.e0 === 3'); -} - -//CHECK#4 -if (4.e0 !== 4) { - $ERROR('#4: 4.e0 === 4'); -} - -//CHECK#5 -if (5.e0 !== 5) { - $ERROR('#5: 5.e0 === 5'); -} - -//CHECK#6 -if (6.e0 !== 6) { - $ERROR('#6: 6.e0 === 6'); -} - -//CHECK#7 -if (7.e0 !== 7) { - $ERROR('#7: 7.e0 === 7'); -} - -//CHECK#8 -if (8.e0 !== 8) { - $ERROR('#8: 8.e0 === 8'); -} - -//CHECK#9 -if (9.e0 !== 9) { - $ERROR('#9: 9.e0 === 9'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A3.3_T8.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A3.3_T8.js deleted file mode 100644 index fa1050097..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A3.3_T8.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.3_A3.3_T8; - * @section: 7.8.3; - * @assertion: DecimalLiteral :: DecimalIntegerLiteral. ExponentPart; - * @description: ExponentPart :: E 0; -*/ - -//CHECK#0 -if (0.E0 !== 0) { - $ERROR('#0: 0.E0 === 0'); -} - -//CHECK#1 -if (1.E0 !== 1) { - $ERROR('#1: 1.E0 === 1'); -} - -//CHECK#2 -if (2.E0 !== 2) { - $ERROR('#2: 2.E0 === 2'); -} - -//CHECK#3 -if (3.E0 !== 3) { - $ERROR('#3: 3.E0 === 3'); -} - -//CHECK#4 -if (4.E0 !== 4) { - $ERROR('#4: 4.E0 === 4'); -} - -//CHECK#5 -if (5.E0 !== 5) { - $ERROR('#5: 5.E0 === 5'); -} - -//CHECK#6 -if (6.E0 !== 6) { - $ERROR('#6: 6.E0 === 6'); -} - -//CHECK#7 -if (7.E0 !== 7) { - $ERROR('#7: 7.E0 === 7'); -} - -//CHECK#8 -if (8.E0 !== 8) { - $ERROR('#8: 8.E0 === 8'); -} - -//CHECK#9 -if (9.E0 !== 9) { - $ERROR('#9: 9.E0 === 9'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A3.4_T1.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A3.4_T1.js deleted file mode 100644 index 4f1a8dd03..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A3.4_T1.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.3_A3.4_T1; - * @section: 7.8.3; - * @assertion: DecimalLiteral :: DecimalIntegerLiteral. DecimalDigigts ExponentPart; - * @description: ExponentPart :: e DecimalDigits; -*/ - -//CHECK#0 -if (0.0e1 !== 0) { - $ERROR('#0: 0.0e1 === 0'); -} - -//CHECK#1 -if (1.1e1 !== 11) { - $ERROR('#1: 1.1e1 === 11'); -} - -//CHECK#2 -if (2.2e1 !== 22) { - $ERROR('#2: 2.2e1 === 22'); -} - -//CHECK#3 -if (3.3e1 !== 33) { - $ERROR('#3: 3.3e1 === 33'); -} - -//CHECK#4 -if (4.4e1 !== 44) { - $ERROR('#4: 4.4e1 === 44'); -} - -//CHECK#5 -if (5.5e1 !== 55) { - $ERROR('#5: 5.5e1 === 55'); -} - -//CHECK#6 -if (6.6e1 !== 66) { - $ERROR('#6: 6.e1 === 66'); -} - -//CHECK#7 -if (7.7e1 !== 77) { - $ERROR('#7: 7.7e1 === 77'); -} - -//CHECK#8 -if (8.8e1 !== 88) { - $ERROR('#8: 8.8e1 === 88'); -} - -//CHECK#9 -if (9.9e1 !== 99) { - $ERROR('#9: 9.9e1 === 99'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A3.4_T2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A3.4_T2.js deleted file mode 100644 index d77b7cc7f..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A3.4_T2.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.3_A3.4_T2; - * @section: 7.8.3; - * @assertion: DecimalLiteral :: DecimalIntegerLiteral. DecimalDigigts ExponentPart; - * @description: ExponentPart :: E DecimalDigits; -*/ - -//CHECK#0 -if (0.0E1 !== 0) { - $ERROR('#0: 0.0E1 === 0'); -} - -//CHECK#1 -if (1.1E1 !== 11) { - $ERROR('#1: 1.1E1 === 11'); -} - -//CHECK#2 -if (2.2E1 !== 22) { - $ERROR('#2: 2.2E1 === 22'); -} - -//CHECK#3 -if (3.3E1 !== 33) { - $ERROR('#3: 3.3E1 === 33'); -} - -//CHECK#4 -if (4.4E1 !== 44) { - $ERROR('#4: 4.4E1 === 44'); -} - -//CHECK#5 -if (5.5E1 !== 55) { - $ERROR('#5: 5.5E1 === 55'); -} - -//CHECK#6 -if (6.6E1 !== 66) { - $ERROR('#6: 6.E1 === 66'); -} - -//CHECK#7 -if (7.7E1 !== 77) { - $ERROR('#7: 7.7E1 === 77'); -} - -//CHECK#8 -if (8.8E1 !== 88) { - $ERROR('#8: 8.8E1 === 88'); -} - -//CHECK#9 -if (9.9E1 !== 99) { - $ERROR('#9: 9.9E1 === 99'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A3.4_T3.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A3.4_T3.js deleted file mode 100644 index afc436855..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A3.4_T3.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.3_A3.4_T3; - * @section: 7.8.3; - * @assertion: DecimalLiteral :: DecimalIntegerLiteral. DecimalDigigts ExponentPart; - * @description: ExponentPart :: e -DecimalDigits; -*/ - -//CHECK#0 -if (0.0e-1 !== 0) { - $ERROR('#0: 0.0e-1 === 0'); -} - -//CHECK#1 -if (1.1e-1 !== 0.11) { - $ERROR('#1: 1.1e-1 === 0.11'); -} - -//CHECK#2 -if (2.2e-1 !== 0.22) { - $ERROR('#2: 2.2e-1 === 0.22'); -} - -//CHECK#3 -if (3.3e-1 !== 0.33) { - $ERROR('#3: 3.3e-1 === 0.33'); -} - -//CHECK#4 -if (4.4e-1 !== 0.44) { - $ERROR('#4: 4.4e-1 === 0.44'); -} - -//CHECK#5 -if (5.5e-1 !== 0.55) { - $ERROR('#5: 5.5e-1 === 0.55'); -} - -//CHECK#6 -if (6.6e-1 !== 0.66) { - $ERROR('#6: 6.e-1 === 0.66'); -} - -//CHECK#7 -if (7.7e-1 !== 0.77) { - $ERROR('#7: 7.7e-1 === 0.77'); -} - -//CHECK#8 -if (8.8e-1 !== 0.88) { - $ERROR('#8: 8.8e-1 === 0.88'); -} - -//CHECK#9 -if (9.9e-1 !== 0.99) { - $ERROR('#9: 9.9e-1 === 0.99'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A3.4_T4.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A3.4_T4.js deleted file mode 100644 index 237f5502b..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A3.4_T4.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.3_A3.4_T4; - * @section: 7.8.3; - * @assertion: DecimalLiteral :: DecimalIntegerLiteral. DecimalDigigts ExponentPart; - * @description: ExponentPart :: E -DecimalDigits; -*/ - -//CHECK#0 -if (0.0E-1 !== 0) { - $ERROR('#0: 0.0E-1 === 0'); -} - -//CHECK#1 -if (1.1E-1 !== 0.11) { - $ERROR('#1: 1.1E-1 === 0.11'); -} - -//CHECK#2 -if (2.2E-1 !== 0.22) { - $ERROR('#2: 2.2E-1 === 0.22'); -} - -//CHECK#3 -if (3.3E-1 !== 0.33) { - $ERROR('#3: 3.3E-1 === 0.33'); -} - -//CHECK#4 -if (4.4E-1 !== 0.44) { - $ERROR('#4: 4.4E-1 === 0.44'); -} - -//CHECK#5 -if (5.5E-1 !== 0.55) { - $ERROR('#5: 5.5E-1 === 0.55'); -} - -//CHECK#6 -if (6.6E-1 !== 0.66) { - $ERROR('#6: 6.E-1 === 0.66'); -} - -//CHECK#7 -if (7.7E-1 !== 0.77) { - $ERROR('#7: 7.7E-1 === 0.77'); -} - -//CHECK#8 -if (8.8E-1 !== 0.88) { - $ERROR('#8: 8.8E-1 === 0.88'); -} - -//CHECK#9 -if (9.9E-1 !== 0.99) { - $ERROR('#9: 9.9E-1 === 0.99'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A3.4_T5.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A3.4_T5.js deleted file mode 100644 index 90e1682a1..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A3.4_T5.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.3_A3.4_T5; - * @section: 7.8.3; - * @assertion: DecimalLiteral :: DecimalIntegerLiteral. DecimalDigigts ExponentPart; - * @description: ExponentPart :: e +DecimalDigits; -*/ - -//CHECK#0 -if (0.0e+1 !== 0) { - $ERROR('#0: 0.0e+1 === 0'); -} - -//CHECK#1 -if (1.1e+1 !== 11) { - $ERROR('#1: 1.1e+1 === 11'); -} - -//CHECK#2 -if (2.2e+1 !== 22) { - $ERROR('#2: 2.2e+1 === 22'); -} - -//CHECK#3 -if (3.3e+1 !== 33) { - $ERROR('#3: 3.3e+1 === 33'); -} - -//CHECK#4 -if (4.4e+1 !== 44) { - $ERROR('#4: 4.4e+1 === 44'); -} - -//CHECK#5 -if (5.5e+1 !== 55) { - $ERROR('#5: 5.5e+1 === 55'); -} - -//CHECK#6 -if (6.6e+1 !== 66) { - $ERROR('#6: 6.e+1 === 66'); -} - -//CHECK#7 -if (7.7e+1 !== 77) { - $ERROR('#7: 7.7e+1 === 77'); -} - -//CHECK#8 -if (8.8e+1 !== 88) { - $ERROR('#8: 8.8e+1 === 88'); -} - -//CHECK#9 -if (9.9e+1 !== 99) { - $ERROR('#9: 9.9e+1 === 99'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A3.4_T6.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A3.4_T6.js deleted file mode 100644 index e91892ef1..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A3.4_T6.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.3_A3.4_T6; - * @section: 7.8.3; - * @assertion: DecimalLiteral :: DecimalIntegerLiteral. DecimalDigigts ExponentPart; - * @description: ExponentPart :: E +DecimalDigits; -*/ - -//CHECK#0 -if (0.0E+1 !== 0) { - $ERROR('#0: 0.0E+1 === 0'); -} - -//CHECK#1 -if (1.1E+1 !== 11) { - $ERROR('#1: 1.1E+1 === 11'); -} - -//CHECK#2 -if (2.2E+1 !== 22) { - $ERROR('#2: 2.2E+1 === 22'); -} - -//CHECK#3 -if (3.3E+1 !== 33) { - $ERROR('#3: 3.3E+1 === 33'); -} - -//CHECK#4 -if (4.4E+1 !== 44) { - $ERROR('#4: 4.4E+1 === 44'); -} - -//CHECK#5 -if (5.5E+1 !== 55) { - $ERROR('#5: 5.5E+1 === 55'); -} - -//CHECK#6 -if (6.6E+1 !== 66) { - $ERROR('#6: 6.E+1 === 66'); -} - -//CHECK#7 -if (7.7E+1 !== 77) { - $ERROR('#7: 7.7E+1 === 77'); -} - -//CHECK#8 -if (8.8E+1 !== 88) { - $ERROR('#8: 8.8E+1 === 88'); -} - -//CHECK#9 -if (9.9E+1 !== 99) { - $ERROR('#9: 9.9E+1 === 99'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A3.4_T7.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A3.4_T7.js deleted file mode 100644 index 27caa4a39..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A3.4_T7.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.3_A3.4_T7; - * @section: 7.8.3; - * @assertion: DecimalLiteral :: DecimalIntegerLiteral. DecimalDigigts ExponentPart; - * @description: ExponentPart :: e 0; -*/ - -//CHECK#0 -if (0.0e0 !== 0.0) { - $ERROR('#0: 0.0e0 === 0.0'); -} - -//CHECK#1 -if (1.1e0 !== 1.1) { - $ERROR('#1: 1.1e0 === 1.1'); -} - -//CHECK#2 -if (2.2e0 !== 2.2) { - $ERROR('#2: 2.2e0 === 2.2'); -} - -//CHECK#3 -if (3.3e0 !== 3.3) { - $ERROR('#3: 3.3e0 === 3.3'); -} - -//CHECK#4 -if (4.4e0 !== 4.4) { - $ERROR('#4: 4.4e0 === 4.4'); -} - -//CHECK#5 -if (5.5e0 !== 5.5) { - $ERROR('#5: 5.5e0 === 5.5'); -} - -//CHECK#6 -if (6.6e0 !== 6.6) { - $ERROR('#6: 6.e0 === 6.6'); -} - -//CHECK#7 -if (7.7e0 !== 7.7) { - $ERROR('#7: 7.7e0 === 7.7'); -} - -//CHECK#8 -if (8.8e0 !== 8.8) { - $ERROR('#8: 8.8e0 === 8.8'); -} - -//CHECK#9 -if (9.9e0 !== 9.9) { - $ERROR('#9: 9.9e0 === 9.9'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A3.4_T8.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A3.4_T8.js deleted file mode 100644 index cb5f34cd7..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A3.4_T8.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.3_A3.4_T8; - * @section: 7.8.3; - * @assertion: DecimalLiteral :: DecimalIntegerLiteral. DecimalDigigts ExponentPart; - * @description: ExponentPart :: E 0; -*/ - -//CHECK#0 -if (0.0E0 !== 0.0) { - $ERROR('#0: 0.0E0 === 0.0'); -} - -//CHECK#1 -if (1.1E0 !== 1.1) { - $ERROR('#1: 1.1E0 === 1.1'); -} - -//CHECK#2 -if (2.2E0 !== 2.2) { - $ERROR('#2: 2.2E0 === 2.2'); -} - -//CHECK#3 -if (3.3E0 !== 3.3) { - $ERROR('#3: 3.3E0 === 3.3'); -} - -//CHECK#4 -if (4.4E0 !== 4.4) { - $ERROR('#4: 4.4E0 === 4.4'); -} - -//CHECK#5 -if (5.5E0 !== 5.5) { - $ERROR('#5: 5.5E0 === 5.5'); -} - -//CHECK#6 -if (6.6E0 !== 6.6) { - $ERROR('#6: 6.E0 === 6.6'); -} - -//CHECK#7 -if (7.7E0 !== 7.7) { - $ERROR('#7: 7.7E0 === 7.7'); -} - -//CHECK#8 -if (8.8E0 !== 8.8) { - $ERROR('#8: 8.8E0 === 8.8'); -} - -//CHECK#9 -if (9.9E0 !== 9.9) { - $ERROR('#9: 9.9E0 === 9.9'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A4.1_T1.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A4.1_T1.js deleted file mode 100644 index 1877e8684..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A4.1_T1.js +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.3_A4.1_T1; - * @section: 7.8.3; - * @assertion: DecimalLiteral :: ExponentPart is incorrect; - * @description: ExponentPart :: e DecimalDigits; - * @negative -*/ - -//CHECK#1 -e1 diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A4.1_T2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A4.1_T2.js deleted file mode 100644 index b03351640..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A4.1_T2.js +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.3_A4.1_T2; - * @section: 7.8.3; - * @assertion: DecimalLiteral :: ExponentPart is incorrect; - * @description: ExponentPart :: E DecimalDigits; - * @negative -*/ - -//CHECK#1 -E1 diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A4.1_T3.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A4.1_T3.js deleted file mode 100644 index 249f6f35b..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A4.1_T3.js +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.3_A4.1_T3; - * @section: 7.8.3; - * @assertion: DecimalLiteral :: ExponentPart is incorrect; - * @description: ExponentPart :: e DecimalDigits; - * @negative -*/ - -//CHECK#1 -e-1 diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A4.1_T4.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A4.1_T4.js deleted file mode 100644 index 3b7cec99c..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A4.1_T4.js +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.3_A4.1_T4; - * @section: 7.8.3; - * @assertion: DecimalLiteral :: ExponentPart is incorrect; - * @description: ExponentPart :: E DecimalDigits; - * @negative -*/ - -//CHECK#1 -E-1 diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A4.1_T5.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A4.1_T5.js deleted file mode 100644 index 1f92a7803..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A4.1_T5.js +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.3_A4.1_T5; - * @section: 7.8.3; - * @assertion: DecimalLiteral :: ExponentPart is incorrect; - * @description: ExponentPart :: e DecimalDigits; - * @negative -*/ - -//CHECK#1 -e+1 diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A4.1_T6.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A4.1_T6.js deleted file mode 100644 index ebd13fe46..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A4.1_T6.js +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.3_A4.1_T6; - * @section: 7.8.3; - * @assertion: DecimalLiteral :: ExponentPart is incorrect; - * @description: ExponentPart :: E DecimalDigits; - * @negative -*/ - -//CHECK#1 -E+1 diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A4.1_T7.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A4.1_T7.js deleted file mode 100644 index b6a02a0f0..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A4.1_T7.js +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.3_A4.1_T7; - * @section: 7.8.3; - * @assertion: DecimalLiteral :: ExponentPart is incorrect; - * @description: ExponentPart :: e 0; - * @negative -*/ - -//CHECK#1 -e0 diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A4.1_T8.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A4.1_T8.js deleted file mode 100644 index 054da2a67..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A4.1_T8.js +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.3_A4.1_T8; - * @section: 7.8.3; - * @assertion: DecimalLiteral :: ExponentPart is incorrect; - * @description: ExponentPart :: E 0; - * @negative -*/ - -//CHECK#1 -E0 diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A4.2_T1.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A4.2_T1.js deleted file mode 100644 index 60ea9aa9d..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A4.2_T1.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.3_A4.2_T1; - * @section: 7.8.3; - * @assertion: ExponentPart :: ExponentIndicator ( /+/-) 0 DecimalDigits is allowed; - * @description: ExponentIndicator :: e; -*/ - -//CHECK#0 -if (0e01 !== 0) { - $ERROR('#0: 0e01 === 0'); -} - -//CHECK#1 -if (1e01 !== 10) { - $ERROR('#1: 1e01 === 10'); -} - -//CHECK#2 -if (2e01 !== 20) { - $ERROR('#2: 2e01 === 20'); -} - -//CHECK#3 -if (3e01 !== 30) { - $ERROR('#3: 3e01 === 30'); -} - -//CHECK#4 -if (4e01 !== 40) { - $ERROR('#4: 4e01 === 40'); -} - -//CHECK#5 -if (5e01 !== 50) { - $ERROR('#5: 5e01 === 50'); -} - -//CHECK#6 -if (6e01 !== 60) { - $ERROR('#6: 6e01 === 60'); -} - -//CHECK#7 -if (7e01 !== 70) { - $ERROR('#7: 7e01 === 70'); -} - -//CHECK#8 -if (8e01 !== 80) { - $ERROR('#8: 8e01 === 80'); -} - -//CHECK#9 -if (9e01 !== 90) { - $ERROR('#9: 9e01 === 90'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A4.2_T2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A4.2_T2.js deleted file mode 100644 index cd727a47c..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A4.2_T2.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.3_A4.2_T2; - * @section: 7.8.3; - * @assertion: ExponentPart :: ExponentIndicator ( /+/-) 0 DecimalDigits is allowed; - * @description: ExponentIndicator :: E; -*/ - -//CHECK#0 -if (0E01 !== 0) { - $ERROR('#0: 0E01 === 0'); -} - -//CHECK#1 -if (1E01 !== 10) { - $ERROR('#1: 1E01 === 10'); -} - -//CHECK#2 -if (2E01 !== 20) { - $ERROR('#2: 2E01 === 20'); -} - -//CHECK#3 -if (3E01 !== 30) { - $ERROR('#3: 3E01 === 30'); -} - -//CHECK#4 -if (4E01 !== 40) { - $ERROR('#4: 4E01 === 40'); -} - -//CHECK#5 -if (5E01 !== 50) { - $ERROR('#5: 5E01 === 50'); -} - -//CHECK#6 -if (6E01 !== 60) { - $ERROR('#6: 6E01 === 60'); -} - -//CHECK#7 -if (7E01 !== 70) { - $ERROR('#7: 7E01 === 70'); -} - -//CHECK#8 -if (8E01 !== 80) { - $ERROR('#8: 8E01 === 80'); -} - -//CHECK#9 -if (9E01 !== 90) { - $ERROR('#9: 9E01 === 90'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A4.2_T3.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A4.2_T3.js deleted file mode 100644 index 153ad87fa..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A4.2_T3.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.3_A4.2_T3; - * @section: 7.8.3; - * @assertion: ExponentPart :: ExponentIndicator ( /+/-) 0 DecimalDigits is allowed; - * @description: ExponentIndicator :: e; -*/ - -//CHECK#0 -if (0e-01 !== 0) { - $ERROR('#0: 0e-01 === 0'); -} - -//CHECK#1 -if (1e-01 !== 0.1) { - $ERROR('#1: 1e-01 === 0.1'); -} - -//CHECK#2 -if (2e-01 !== 0.2) { - $ERROR('#2: 2e-01 === 0.2'); -} - -//CHECK#3 -if (3e-01 !== 0.3) { - $ERROR('#3: 3e-01 === 0.3'); -} - -//CHECK#4 -if (4e-01 !== 0.4) { - $ERROR('#4: 4e-01 === 0.4'); -} - -//CHECK#5 -if (5e-01 !== 0.5) { - $ERROR('#5: 5e-01 === 0.5'); -} - -//CHECK#6 -if (6e-01 !== 0.6) { - $ERROR('#6: 6e-01 === 0.6'); -} - -//CHECK#7 -if (7e-01 !== 0.7) { - $ERROR('#7: 7e-01 === 0.7'); -} - -//CHECK#8 -if (8e-01 !== 0.8) { - $ERROR('#8: 8e-01 === 0.8'); -} - -//CHECK#9 -if (9e-01 !== 0.9) { - $ERROR('#9: 9e-01 === 0.9'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A4.2_T4.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A4.2_T4.js deleted file mode 100644 index 8764c7b2b..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A4.2_T4.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.3_A4.2_T4; - * @section: 7.8.3; - * @assertion: ExponentPart :: ExponentIndicator ( /+/-) 0 DecimalDigits is allowed; - * @description: ExponentIndicator :: E; -*/ - -//CHECK#0 -if (0E-01 !== 0) { - $ERROR('#0: 0E-01 === 0'); -} - -//CHECK#1 -if (1E-01 !== 0.1) { - $ERROR('#1: 1E-01 === 0.1'); -} - -//CHECK#2 -if (2E-01 !== 0.2) { - $ERROR('#2: 2E-01 === 0.2'); -} - -//CHECK#3 -if (3E-01 !== 0.3) { - $ERROR('#3: 3E-01 === 0.3'); -} - -//CHECK#4 -if (4E-01 !== 0.4) { - $ERROR('#4: 4E-01 === 0.4'); -} - -//CHECK#5 -if (5E-01 !== 0.5) { - $ERROR('#5: 5E-01 === 0.5'); -} - -//CHECK#6 -if (6E-01 !== 0.6) { - $ERROR('#6: 6E-01 === 0.6'); -} - -//CHECK#7 -if (7E-01 !== 0.7) { - $ERROR('#7: 7E-01 === 0.7'); -} - -//CHECK#8 -if (8E-01 !== 0.8) { - $ERROR('#8: 8E-01 === 0.8'); -} - -//CHECK#9 -if (9E-01 !== 0.9) { - $ERROR('#9: 9E-01 === 0.9'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A4.2_T5.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A4.2_T5.js deleted file mode 100644 index b5e707ceb..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A4.2_T5.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.3_A4.2_T5; - * @section: 7.8.3; - * @assertion: ExponentPart :: ExponentIndicator ( /+/-) 0 DecimalDigits is allowed; - * @description: ExponentIndicator :: e; -*/ - -//CHECK#0 -if (0e+01 !== 0) { - $ERROR('#0: 0e+01 === 0'); -} - -//CHECK#1 -if (1e+01 !== 10) { - $ERROR('#1: 1e+01 === 10'); -} - -//CHECK#2 -if (2e+01 !== 20) { - $ERROR('#2: 2e+01 === 20'); -} - -//CHECK#3 -if (3e+01 !== 30) { - $ERROR('#3: 3e+01 === 30'); -} - -//CHECK#4 -if (4e+01 !== 40) { - $ERROR('#4: 4e+01 === 40'); -} - -//CHECK#5 -if (5e+01 !== 50) { - $ERROR('#5: 5e+01 === 50'); -} - -//CHECK#6 -if (6e+01 !== 60) { - $ERROR('#6: 6e+01 === 60'); -} - -//CHECK#7 -if (7e+01 !== 70) { - $ERROR('#7: 7e+01 === 70'); -} - -//CHECK#8 -if (8e+01 !== 80) { - $ERROR('#8: 8e+01 === 80'); -} - -//CHECK#9 -if (9e+01 !== 90) { - $ERROR('#9: 9e+01 === 90'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A4.2_T6.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A4.2_T6.js deleted file mode 100644 index f6b3cdbc2..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A4.2_T6.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.3_A4.2_T6; - * @section: 7.8.3; - * @assertion: ExponentPart :: ExponentIndicator ( /+/-) 0 DecimalDigits is allowed; - * @description: ExponentIndicator :: E; -*/ - -//CHECK#0 -if (0E+01 !== 0) { - $ERROR('#0: 0E+01 === 0'); -} - -//CHECK#1 -if (1E+01 !== 10) { - $ERROR('#1: 1E+01 === 10'); -} - -//CHECK#2 -if (2E+01 !== 20) { - $ERROR('#2: 2E+01 === 20'); -} - -//CHECK#3 -if (3E+01 !== 30) { - $ERROR('#3: 3E+01 === 30'); -} - -//CHECK#4 -if (4E+01 !== 40) { - $ERROR('#4: 4E+01 === 40'); -} - -//CHECK#5 -if (5E+01 !== 50) { - $ERROR('#5: 5E+01 === 50'); -} - -//CHECK#6 -if (6E+01 !== 60) { - $ERROR('#6: 6E+01 === 60'); -} - -//CHECK#7 -if (7E+01 !== 70) { - $ERROR('#7: 7E+01 === 70'); -} - -//CHECK#8 -if (8E+01 !== 80) { - $ERROR('#8: 8E+01 === 80'); -} - -//CHECK#9 -if (9E+01 !== 90) { - $ERROR('#9: 9E+01 === 90'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A4.2_T7.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A4.2_T7.js deleted file mode 100644 index a2543f9c5..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A4.2_T7.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.3_A4.2_T7; - * @section: 7.8.3; - * @assertion: ExponentPart :: ExponentIndicator ( /+/-) 0 DecimalDigits is allowed; - * @description: ExponentIndicator :: e; -*/ - -//CHECK#0 -if (0e00 !== 0) { - $ERROR('#0: 0e00 === 0'); -} - -//CHECK#1 -if (1e00 !== 1) { - $ERROR('#1: 1e00 === 1'); -} - -//CHECK#2 -if (2e00 !== 2) { - $ERROR('#2: 2e00 === 2'); -} - -//CHECK#3 -if (3e00 !== 3) { - $ERROR('#3: 3e00 === 3'); -} - -//CHECK#4 -if (4e00 !== 4) { - $ERROR('#4: 4e00 === 4'); -} - -//CHECK#5 -if (5e00 !== 5) { - $ERROR('#5: 5e00 === 5'); -} - -//CHECK#6 -if (6e00 !== 6) { - $ERROR('#6: 6e00 === 6'); -} - -//CHECK#7 -if (7e00 !== 7) { - $ERROR('#7: 7e00 === 7'); -} - -//CHECK#8 -if (8e00 !== 8) { - $ERROR('#8: 8e00 === 8'); -} - -//CHECK#9 -if (9e00 !== 9) { - $ERROR('#9: 9e00 === 9'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A4.2_T8.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A4.2_T8.js deleted file mode 100644 index 7496e6e12..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A4.2_T8.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.3_A4.2_T8; - * @section: 7.8.3; - * @assertion: ExponentPart :: ExponentIndicator ( /+/-) 0 DecimalDigits is allowed; - * @description: ExponentIndicator :: E; -*/ - -//CHECK#0 -if (0E00 !== 0) { - $ERROR('#0: 0E00 === 0'); -} - -//CHECK#1 -if (1E00 !== 1) { - $ERROR('#1: 1E00 === 1'); -} - -//CHECK#2 -if (2E00 !== 2) { - $ERROR('#2: 2E00 === 2'); -} - -//CHECK#3 -if (3E00 !== 3) { - $ERROR('#3: 3E00 === 3'); -} - -//CHECK#4 -if (4E00 !== 4) { - $ERROR('#4: 4E00 === 4'); -} - -//CHECK#5 -if (5E00 !== 5) { - $ERROR('#5: 5E00 === 5'); -} - -//CHECK#6 -if (6E00 !== 6) { - $ERROR('#6: 6E00 === 6'); -} - -//CHECK#7 -if (7E00 !== 7) { - $ERROR('#7: 7E00 === 7'); -} - -//CHECK#8 -if (8E00 !== 8) { - $ERROR('#8: 8E00 === 8'); -} - -//CHECK#9 -if (9E00 !== 9) { - $ERROR('#9: 9E00 === 9'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A5.1_T1.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A5.1_T1.js deleted file mode 100644 index b66e15df2..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A5.1_T1.js +++ /dev/null @@ -1,89 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.3_A5.1_T1; - * @section: 7.8.3; - * @assertion: DecimalLiteral :: HexIntegerLiteral; - * @description: HexIntegerLiteral :: 0x Digit; -*/ - -//CHECK#0 -if (0x0 !== 0) { - $ERROR('#0: 0x0 === 0'); -} - -//CHECK#1 -if (0x1 !== 1) { - $ERROR('#1: 0x1 === 1'); -} - -//CHECK#2 -if (0x2 !== 2) { - $ERROR('#2: 0x2 === 2'); -} - -//CHECK#3 -if (0x3 !== 3) { - $ERROR('#3: 0x3 === 3'); -} - -//CHECK#4 -if (0x4 !== 4) { - $ERROR('#4: 0x4 === 4'); -} - -//CHECK#5 -if (0x5 !== 5) { - $ERROR('#5: 0x5 === 5'); -} - -//CHECK#6 -if (0x6 !== 6) { - $ERROR('#6: 0x6 === 6'); -} - -//CHECK#7 -if (0x7 !== 7) { - $ERROR('#7: 0x7 === 7'); -} - -//CHECK#8 -if (0x8 !== 8) { - $ERROR('#8: 0x8 === 8'); -} - -//CHECK#9 -if (0x9 !== 9) { - $ERROR('#9: 0x9 === 9'); -} - -//CHECK#A -if (0xA !== 10) { - $ERROR('#A: 0xA === 10'); -} - -//CHECK#B -if (0xB !== 11) { - $ERROR('#B: 0xB === 11'); -} - -//CHECK#C -if (0xC !== 12) { - $ERROR('#C: 0xC === 12'); -} - -//CHECK#D -if (0xD !== 13) { - $ERROR('#D: 0xD === 13'); -} - -//CHECK#E -if (0xE !== 14) { - $ERROR('#E: 0xE === 14'); -} - -//CHECK#F -if (0xF !== 15) { - $ERROR('#F: 0xF === 15'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A5.1_T2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A5.1_T2.js deleted file mode 100644 index a1a44c125..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A5.1_T2.js +++ /dev/null @@ -1,89 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.3_A5.1_T2; - * @section: 7.8.3; - * @assertion: DecimalLiteral :: HexIntegerLiteral; - * @description: HexIntegerLiteral :: 0X Digit; -*/ - -//CHECK#0 -if (0X0 !== 0) { - $ERROR('#0: 0X0 === 0'); -} - -//CHECK#1 -if (0X1 !== 1) { - $ERROR('#1: 0X1 === 1'); -} - -//CHECK#2 -if (0X2 !== 2) { - $ERROR('#2: 0X2 === 2'); -} - -//CHECK#3 -if (0X3 !== 3) { - $ERROR('#3: 0X3 === 3'); -} - -//CHECK#4 -if (0X4 !== 4) { - $ERROR('#4: 0X4 === 4'); -} - -//CHECK#5 -if (0X5 !== 5) { - $ERROR('#5: 0X5 === 5'); -} - -//CHECK#6 -if (0X6 !== 6) { - $ERROR('#6: 0X6 === 6'); -} - -//CHECK#7 -if (0X7 !== 7) { - $ERROR('#7: 0X7 === 7'); -} - -//CHECK#8 -if (0X8 !== 8) { - $ERROR('#8: 0X8 === 8'); -} - -//CHECK#9 -if (0X9 !== 9) { - $ERROR('#9: 0X9 === 9'); -} - -//CHECK#A -if (0XA !== 10) { - $ERROR('#A: 0XA === 10'); -} - -//CHECK#B -if (0XB !== 11) { - $ERROR('#B: 0XB === 11'); -} - -//CHECK#C -if (0XC !== 12) { - $ERROR('#C: 0XC === 12'); -} - -//CHECK#D -if (0XD !== 13) { - $ERROR('#D: 0XD === 13'); -} - -//CHECK#E -if (0XE !== 14) { - $ERROR('#E: 0XE === 14'); -} - -//CHECK#F -if (0XF !== 15) { - $ERROR('#F: 0XF === 15'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A5.1_T3.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A5.1_T3.js deleted file mode 100644 index d8ecddd66..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A5.1_T3.js +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.3_A5.1_T3; - * @section: 7.8.3; - * @assertion: DecimalLiteral :: HexIntegerLiteral; - * @description: HexIntegerLiteral :: 0x NonZeroDigit Digits; -*/ - -//CHECK#0 -if (0x0 !== 0) { - $ERROR('#0: 0x0 === 0'); -} - -//CHECK#1 -if (0x1 !== 1) { - $ERROR('#1: 0x1 === 1'); -} - -//CHECK#2 -if (0x10 !== 16) { - $ERROR('#2: 0x10 === 16'); -} - -//CHECK3 -if (0x100 !== 256) { - $ERROR('3: 0x100 === 256'); -} - -//CHECK#4 -if (0x1000 !== 4096) { - $ERROR('#4: 0x1000 === 4096'); -} - -//CHECK#5 -if (0x10000 !== 65536) { - $ERROR('#5: 0x10000 === 65536'); -} - -//CHECK#6 -if (0x100000 !== 1048576) { - $ERROR('#6: 0x100000 === 1048576'); -} - -//CHECK#7 -if (0x1000000 !== 16777216) { - $ERROR('#7: 0x1000000 === 16777216'); -} - -//CHECK#8 -if (0x10000000 !== 268435456) { - $ERROR('#8: 0x10000000 === 268435456'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A5.1_T4.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A5.1_T4.js deleted file mode 100644 index 0b93e371c..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A5.1_T4.js +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.3_A5.1_T4; - * @section: 7.8.3; - * @assertion: DecimalLiteral :: HexIntegerLiteral; - * @description: HexIntegerLiteral :: 0X NonZeroDigit Digits; -*/ - -//CHECK#0 -if (0X0 !== 0) { - $ERROR('#0: 0X0 === 0'); -} - -//CHECK#1 -if (0X1 !== 1) { - $ERROR('#1: 0X1 === 1'); -} - -//CHECK#2 -if (0X10 !== 16) { - $ERROR('#2: 0X10 === 16'); -} - -//CHECK3 -if (0X100 !== 256) { - $ERROR('3: 0X100 === 256'); -} - -//CHECK#4 -if (0X1000 !== 4096) { - $ERROR('#4: 0X1000 === 4096'); -} - -//CHECK#5 -if (0X10000 !== 65536) { - $ERROR('#5: 0X10000 === 65536'); -} - -//CHECK#6 -if (0X100000 !== 1048576) { - $ERROR('#6: 0X100000 === 1048576'); -} - -//CHECK#7 -if (0X1000000 !== 16777216) { - $ERROR('#7: 0X1000000 === 16777216'); -} - -//CHECK#8 -if (0X10000000 !== 268435456) { - $ERROR('#8: 0X10000000 === 268435456'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A5.1_T5.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A5.1_T5.js deleted file mode 100644 index f7461a8d3..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A5.1_T5.js +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.3_A5.1_T5; - * @section: 7.8.3; - * @assertion: DecimalLiteral :: HexIntegerLiteral; - * @description: HexIntegerLiteral :: 0x0 Digits; -*/ - -//CHECK#0 -if (0x00 !== 0) { - $ERROR('#0: 0x00 === 0'); -} - -//CHECK#1 -if (0x01 !== 1) { - $ERROR('#1: 0x01 === 1'); -} - -//CHECK#2 -if (0x010 !== 16) { - $ERROR('#2: 0x010 === 16'); -} - -//CHECK3 -if (0x0100 !== 256) { - $ERROR('3: 0x0100 === 256'); -} - -//CHECK#4 -if (0x01000 !== 4096) { - $ERROR('#4: 0x01000 === 4096'); -} - -//CHECK#5 -if (0x010000 !== 65536) { - $ERROR('#5: 0x010000 === 65536'); -} - -//CHECK#6 -if (0x0100000 !== 1048576) { - $ERROR('#6: 0x0100000 === 1048576'); -} - -//CHECK#7 -if (0x01000000 !== 16777216) { - $ERROR('#7: 0x01000000 === 16777216'); -} - -//CHECK#8 -if (0x010000000 !== 268435456) { - $ERROR('#8: 0x010000000 === 268435456'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A5.1_T6.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A5.1_T6.js deleted file mode 100644 index b79cf24f3..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A5.1_T6.js +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.3_A5.1_T6; - * @section: 7.8.3; - * @assertion: DecimalLiteral :: HexIntegerLiteral; - * @description: HexIntegerLiteral :: 0X0 Digits; -*/ - -//CHECK#0 -if (0X00 !== 0) { - $ERROR('#0: 0X00 === 0'); -} - -//CHECK#1 -if (0X01 !== 1) { - $ERROR('#1: 0X01 === 1'); -} - -//CHECK#2 -if (0X010 !== 16) { - $ERROR('#2: 0X010 === 16'); -} - -//CHECK3 -if (0X0100 !== 256) { - $ERROR('3: 0X0100 === 256'); -} - -//CHECK#4 -if (0X01000 !== 4096) { - $ERROR('#4: 0X01000 === 4096'); -} - -//CHECK#5 -if (0X010000 !== 65536) { - $ERROR('#5: 0X010000 === 65536'); -} - -//CHECK#6 -if (0X0100000 !== 1048576) { - $ERROR('#6: 0X0100000 === 1048576'); -} - -//CHECK#7 -if (0X01000000 !== 16777216) { - $ERROR('#7: 0X01000000 === 16777216'); -} - -//CHECK#8 -if (0X010000000 !== 268435456) { - $ERROR('#8: 0X010000000 === 268435456'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A5.1_T7.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A5.1_T7.js deleted file mode 100644 index 1f0362640..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A5.1_T7.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.3_A5.1_T7; - * @section: 7.8.3; - * @assertion: DecimalLiteral :: HexIntegerLiteral; - * @description: HexIntegerLiteral :: 0x one of a, b, c, d, e, f; -*/ - -//CHECK#a -if (0xa !== 10) { - $ERROR('#a: 0xa === 10'); -} - -//CHECK#b -if (0xb !== 11) { - $ERROR('#b: 0xb === 11'); -} - -//CHECK#c -if (0xc !== 12) { - $ERROR('#c: 0xc === 12'); -} - -//CHECK#d -if (0xd !== 13) { - $ERROR('#d: 0xd === 13'); -} - -//CHECK#e -if (0xe !== 14) { - $ERROR('#e: 0xe === 14'); -} - -//CHECK#f -if (0xf !== 15) { - $ERROR('#f: 0xf === 15'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A5.1_T8.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A5.1_T8.js deleted file mode 100644 index ece396353..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.3_Numeric_Literals/S7.8.3_A5.1_T8.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.3_A5.1_T8; - * @section: 7.8.3; - * @assertion: DecimalLiteral :: HexIntegerLiteral; - * @description: HexIntegerLiteral :: 0X one of a, b, c, d, e, f; -*/ - -//CHECK#a -if (0Xa !== 10) { - $ERROR('#a: 0Xa === 10'); -} - -//CHECK#b -if (0Xb !== 11) { - $ERROR('#b: 0Xb === 11'); -} - -//CHECK#c -if (0Xc !== 12) { - $ERROR('#c: 0Xc === 12'); -} - -//CHECK#d -if (0Xd !== 13) { - $ERROR('#d: 0Xd === 13'); -} - -//CHECK#e -if (0Xe !== 14) { - $ERROR('#e: 0Xe === 14'); -} - -//CHECK#f -if (0Xf !== 15) { - $ERROR('#f: 0Xf === 15'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A2.1_T1.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A2.1_T1.js deleted file mode 100644 index d2b72052a..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A2.1_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.4_A2.1_T1; - * @section: 7.8.4; - * @assertion: Correct interpretation of ENGLISH ALPHABET; - * @description: Check ENGLISH CAPITAL ALPHABET; -*/ - -//CHECK#A-Z -unicode = ["\u0041", "\u0042", "\u0043", "\u0044", "\u0045", "\u0046", "\u0047", "\u0048", "\u0049", "\u004A", "\u004B", "\u004C", "\u004D", "\u004E", "\u004F", "\u0050", "\u0051", "\u0052", "\u0053", "\u0054", "\u0055", "\u0056", "\u0057", "\u0058", "\u0059", "\u005A"]; -character = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]; -for (index = 0; index <= 25; index++) { - if (unicode[index] !== character[index]) { - $ERROR('#' + character[index] + ' '); - } -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A2.1_T2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A2.1_T2.js deleted file mode 100644 index fcd0cf0b3..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A2.1_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.4_A2.1_T2; - * @section: 7.8.4; - * @assertion: Correct interpretation of ENGLISH ALPHABET; - * @description: Check ENGLISH SMALL ALPHABET; -*/ - -//CHECK#a-z -hex = ["\u0061", "\u0062", "\u0063", "\u0064", "\u0065", "\u0066", "\u0067", "\u0068", "\u0069", "\u006A", "\u006B", "\u006C", "\u006D", "\u006E", "\u006F", "\u0070", "\u0071", "\u0072", "\u0073", "\u0074", "\u0075", "\u0076", "\u0077", "\u0078", "\u0079", "\u007A"]; -character = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]; -for (index = 0; index <= 25; index++) { - if (hex[index] !== character[index]) { - $ERROR('#' + character[index] + ' '); - } -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A2.2_T1.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A2.2_T1.js deleted file mode 100644 index b51178192..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A2.2_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.4_A2.2_T1; - * @section: 7.8.4; - * @assertion: Correct interpretation of RUSSIAN ALPHABET; - * @description: Check RUSSIAN CAPITAL ALPHABET; -*/ - -//CHECK#А-Я -unicode = ["\u0410", "\u0411", "\u0412", "\u0413", "\u0414", "\u0415", "\u0416", "\u0417", "\u0418", "\u0419", "\u041A", "\u041B", "\u041C", "\u041D", "\u041E", "\u041F", "\u0420", "\u0421", "\u0422", "\u0423", "\u0424", "\u0425", "\u0426", "\u0427", "\u0428", "\u0429", "\u042A", "\u042B", "\u042C", "\u042D", "\u042E", "\u042F", "\u0401"]; -character = ["А", "Б", "В", "Г", "Д", "Е", "Ж", "З", "И", "Й", "К", "Л", "М", "Н", "О", "П", "Р", "С", "Т", "У", "Ф", "Х", "Ц", "Ч", "Ш", "Щ", "Ъ", "Ы", "Ь", "Э", "Ю", "Я", "Ё"]; -for (index = 0; index <= 32; index++) { - if (unicode[index] !== character[index]) { - $ERROR('#' + character[index] + ' '); - } -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A2.2_T2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A2.2_T2.js deleted file mode 100644 index ddc41a26f..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A2.2_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.4_A2.2_T2; - * @section: 7.8.4; - * @assertion: Correct interpretation of RUSSIAN ALPHABET; - * @description: Check RUSSIAN SMALL ALPHABET; -*/ - -//CHECK#а-я -unicode = ["\u0430", "\u0431", "\u0432", "\u0433", "\u0434", "\u0435", "\u0436", "\u0437", "\u0438", "\u0439", "\u043A", "\u043B", "\u043C", "\u043D", "\u043E", "\u043F", "\u0440", "\u0441", "\u0442", "\u0443", "\u0444", "\u0445", "\u0446", "\u0447", "\u0448", "\u0449", "\u044A", "\u044B", "\u044C", "\u044D", "\u044E", "\u044F", "\u0451"]; -character = ["а", "б", "в", "г", "д", "е", "ж", "з", "и", "й", "к", "л", "м", "н", "о", "п", "р", "с", "т", "у", "ф", "х", "ц", "ч", "ш", "щ", "ъ", "ы", "ь", "э", "ю", "я", "ё"]; -for (index = 0; index <= 32; index++) { - if (unicode[index] !== character[index]) { - $ERROR('#' + character[index] + ' '); - } -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A2.3_T1.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A2.3_T1.js deleted file mode 100644 index 017d0e13b..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A2.3_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.4_A2.3_T1; - * @section: 7.8.4; - * @assertion: Correct interpretation of DIGITS; - * @description: Check DIGITS; -*/ - -//CHECK#0-9 -unicode = ["\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039"]; -character = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]; -for (index = 0; index <= 9; index++) { - if (unicode[index] !== character[index]) { - $ERROR('#' + character[index] + ' '); - } -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A3.1_T1.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A3.1_T1.js deleted file mode 100644 index 2a8739269..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A3.1_T1.js +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.4_A3.1_T1; - * @section: 7.8.4; - * @assertion: StringLiteral :: "\" or '\' is not correct; - * @description: Checking if execution of "\" fails; - * @negative -*/ - -//CHECK#1 -"\" diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A3.1_T2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A3.1_T2.js deleted file mode 100644 index 690a37607..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A3.1_T2.js +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.4_A3.1_T2; - * @section: 7.8.4; - * @assertion: StringLiteral :: "\" or '\' is not correct; - * @description: Checking if execution of "'\'" fails; - * @negative -*/ - -//CHECK#1 -'\' diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A3.2_T1.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A3.2_T1.js deleted file mode 100644 index 8ff86be57..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A3.2_T1.js +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.4_A3.2_T1; - * @section: 7.8.4; - * @assertion: StringLiteral :: "\\\" or '\\\' is not correct; - * @description: Checking if execution of "\\\" fails; - * @negative -*/ - -//CHECK#1 -"\\\" diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A3.2_T2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A3.2_T2.js deleted file mode 100644 index 6aebf53b1..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A3.2_T2.js +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.4_A3.2_T2; - * @section: 7.8.4; - * @assertion: StringLiteral :: "\\\" or '\\\' is not correct; - * @description: Checking if execution of '\\\' fails; - * @negative -*/ - -//CHECK#1 -'\\\' diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A4.1_T1.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A4.1_T1.js deleted file mode 100644 index a0b9ebae3..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A4.1_T1.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.4_A4.1_T1; - * @section: 7.8.4; - * @assertion: CharacterEscapeSequnce :: SingleEscapeSequence; - * @description: SingleEscapeSequence :: one of b f n r t v; -*/ - -//CHECK#1 -if (String.fromCharCode(0x0008) !== "\b") { - $ERROR('#1: String.fromCharCode(0x0008) === "\\b"'); -} - -//CHECK#2 -if (String.fromCharCode(0x0009) !== "\t") { - $ERROR('#2: String.fromCharCode(0x0009) === "\\t"'); -} - -//CHECK#3 -if (String.fromCharCode(0x000A) !== "\n") { - $ERROR('#3: String.fromCharCode(0x000A) === "\\n"'); -} - -//CHECK#4 -if (String.fromCharCode(0x000B) !== "\v") { - $ERROR('#4: String.fromCharCode(0x000B) === "\\v"'); -} - -//CHECK#5 -if (String.fromCharCode(0x000C) !== "\f") { - $ERROR('#5: String.fromCharCode(0x000C) === "\\f"'); -} - -//CHECK#6 -if (String.fromCharCode(0x000D) !== "\r") { - $ERROR('#6: String.fromCharCode(0x000D) === "\\r"'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A4.1_T2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A4.1_T2.js deleted file mode 100644 index 781921799..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A4.1_T2.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.4_A4.1_T2; - * @section: 7.8.4; - * @assertion: CharacterEscapeSequnce :: SingleEscapeSequence; - * @description: SingleEscapeSequence :: one of ' " \; -*/ - -//CHECK#1 -if (String.fromCharCode(0x0027) !== "\'") { - $ERROR('#1: String.fromCharCode(0x0027) === "\\\'"'); -} - -//CHECK#2 -if (String.fromCharCode(0x0022) !== '\"') { - $ERROR('#2: String.fromCharCode(0x0027) === \'\\\"\''); -} - -//CHECK#3 -if (String.fromCharCode(0x005C) !== "\\") { - $ERROR('#3: String.fromCharCode(0x005C) === "\\\"'); -} - -//CHECK#4 -if ("\'" !== "'") { - $ERROR('#4: "\'" === "\\\'"'); -} - -//CHECK#5 -if ('\"' !== '"') { - $ERROR('#5: \'\"\' === \'\\\"\''); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A4.2_T1.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A4.2_T1.js deleted file mode 100644 index f96a20027..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A4.2_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.4_A4.2_T1; - * @section: 7.8.4; - * @assertion: CharacterEscapeSequnce :: NonEscapeSequence; - * @description: NonEscapeSequence :: ENGLISH CAPITAL ALPHABET; -*/ - -//CHECK#A-Z -CharacterCode = [0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A]; -NonEscapeCharacter = ["\A", "\B", "\C", "\D", "\E", "\F", "\G", "\H", "\I", "\J", "\K", "\L", "\M", "\N", "\O", "\P", "\Q", "\R", "\S", "\T", "\U", "\V", "\W", "\X", "\Y", "\Z"]; -for (index = 0; index <= 25; index++) { - if (String.fromCharCode(CharacterCode[index]) !== NonEscapeCharacter[index]) { - $ERROR('#' + NonEscapeCharacter[index] + ' '); - } -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A4.2_T2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A4.2_T2.js deleted file mode 100644 index 7b824c64c..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A4.2_T2.js +++ /dev/null @@ -1,114 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.4_A4.2_T2; - * @section: 7.8.4; - * @assertion: CharacterEscapeSequnce :: NonEscapeSequence; - * @description: NonEscapeSequence :: ENGLISH CAPITAL ALPHABET; -*/ - -//CHECK#A-Z -if ("A" !== "\A") { - $ERROR('#A'); -} - -if ("B" !== "\B") { - $ERROR('#B'); -} - -if ("C" !== "\C") { - $ERROR('#C'); -} - -if ("D" !== "\D") { - $ERROR('#D'); -} - -if ("E" !== "\E") { - $ERROR('#E'); -} - -if ("F" !== "\F") { - $ERROR('#F'); -} - -if ("G" !== "\G") { - $ERROR('#G'); -} - -if ("H" !== "\H") { - $ERROR('#H'); -} - -if ("I" !== "\I") { - $ERROR('#I'); -} - -if ("J" !== "\J") { - $ERROR('#J'); -} - -if ("K" !== "\K") { - $ERROR('#K'); -} - -if ("L" !== "\L") { - $ERROR('#L'); -} - -if ("M" !== "\M") { - $ERROR('#M'); -} - -if ("N" !== "\N") { - $ERROR('#N'); -} - -if ("O" !== "\O") { - $ERROR('#O'); -} - -if ("P" !== "\P") { - $ERROR('#P'); -} - -if ("Q" !== "\Q") { - $ERROR('#Q'); -} - -if ("R" !== "\R") { - $ERROR('#R'); -} - -if ("S" !== "\S") { - $ERROR('#S'); -} - -if ("T" !== "\T") { - $ERROR('#T'); -} - -if ("U" !== "\U") { - $ERROR('#U'); -} - -if ("V" !== "\V") { - $ERROR('#V'); -} - -if ("W" !== "\W") { - $ERROR('#W'); -} - -if ("X" !== "\X") { - $ERROR('#X'); -} - -if ("Y" !== "\Y") { - $ERROR('#Y'); -} - -if ("Z" !== "\Z") { - $ERROR('#Z'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A4.2_T3.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A4.2_T3.js deleted file mode 100644 index fa4495d6a..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A4.2_T3.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.4_A4.2_T3; - * @section: 7.8.4; - * @assertion: CharacterEscapeSequnce :: NonEscapeSequence; - * @description: NonEscapeSequence :: ENGLISH SMALL ALPHABET; -*/ - -//CHECK#a-z without b, f, n, r, t, v, x, u -CharacterCode = [0x0061, 0x0063, 0x0064, 0x0065, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006F, 0x0070, 0x0071, 0x0073, 0x0077, 0x0079, 0x007A]; -NonEscapeCharacter = ["\a", "\c", "\d", "\e", "\g", "\h", "\i", "\j", "\k", "\l", "\m", "\o", "\p", "\q", "\s", "\w", "\y", "\z"]; -for (index = 0; index <= 17; index++) { - if (String.fromCharCode(CharacterCode[index]) !== NonEscapeCharacter[index]) { - $ERROR('#' + NonEscapeCharacter[index] + ' '); - } -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A4.2_T4.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A4.2_T4.js deleted file mode 100644 index fcda8ea7f..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A4.2_T4.js +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.4_A4.2_T4; - * @section: 7.8.4; - * @assertion: CharacterEscapeSequnce :: NonEscapeSequence; - * @description: NonEscapeSequence :: ENGLISH SMALL ALPHABET; -*/ - -//CHECK#a-z without b, f, n, r, t, v, x, u - -if ("a" !== "\a") { - $ERROR('#a'); -} - -if ("c" !== "\c") { - $ERROR('#c'); -} - -if ("d" !== "\d") { - $ERROR('#d'); -} - -if ("e" !== "\e") { - $ERROR('#e'); -} - -if ("g" !== "\g") { - $ERROR('#g'); -} - -if ("h" !== "\h") { - $ERROR('#h'); -} - -if ("i" !== "\i") { - $ERROR('#i'); -} - -if ("j" !== "\j") { - $ERROR('#j'); -} - -if ("k" !== "\k") { - $ERROR('#k'); -} - -if ("l" !== "\l") { - $ERROR('#l'); -} - -if ("m" !== "\m") { - $ERROR('#m'); -} - - -if ("o" !== "\o") { - $ERROR('#o'); -} - -if ("p" !== "\p") { - $ERROR('#p'); -} - -if ("q" !== "\q") { - $ERROR('#q'); -} - -if ("s" !== "\s") { - $ERROR('#s'); -} - -if ("w" !== "\w") { - $ERROR('#w'); -} - -if ("y" !== "\y") { - $ERROR('#y'); -} - -if ("z" !== "\z") { - $ERROR('#z'); -} - diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A4.2_T5.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A4.2_T5.js deleted file mode 100644 index 074c07945..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A4.2_T5.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.4_A4.2_T5; - * @section: 7.8.4; - * @assertion: CharacterEscapeSequnce :: NonEscapeSequence; - * @description: NonEscapeSequence :: RUSSIAN CAPITAL ALPHABET; -*/ - -//CHECK#А-Я -CharacterCode = [0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F, 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F, 0x0401]; -NonEscapeCharacter = ["\А", "\Б", "\В", "\Г", "\Д", "\Е", "\Ж", "\З", "\И", "\Й", "\К", "\Л", "\М", "\Н", "\О", "\П", "\Р", "\С", "\Т", "\У", "\Ф", "\Х", "\Ц", "\Ч", "\Ш", "\Щ", "\Ъ", "\Ы", "\Ь", "\Э", "\Ю", "\Я", "\Ё"]; -for (index = 0; index <= 32; index++) { - if (String.fromCharCode(CharacterCode[index]) !== NonEscapeCharacter[index]) { - $ERROR('#' + NonEscapeCharacter[index] + ' '); - } -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A4.2_T6.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A4.2_T6.js deleted file mode 100644 index 0b2438e35..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A4.2_T6.js +++ /dev/null @@ -1,143 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.4_A4.2_T6; - * @section: 7.8.4; - * @assertion: CharacterEscapeSequnce :: NonEscapeSequence; - * @description: NonEscapeSequence :: RUSSIAN CAPITAL ALPHABET; -*/ - -//CHECK#А-Я - -if ("А" !== "\А") { - $ERROR('#А'); -} - -if ("Б" !== "\Б") { - $ERROR('#Б'); -} - -if ("В" !== "\В") { - $ERROR('#В'); -} - -if ("Г" !== "\Г") { - $ERROR('#Г'); -} - -if ("Д" !== "\Д") { - $ERROR('#Д'); -} - -if ("Е" !== "\Е") { - $ERROR('#Е'); -} - -if ("Ж" !== "\Ж") { - $ERROR('#Ж'); -} - -if ("З" !== "\З") { - $ERROR('#З'); -} - -if ("И" !== "\И") { - $ERROR('#И'); -} - -if ("Й" !== "\Й") { - $ERROR('#Й'); -} - -if ("К" !== "\К") { - $ERROR('#К'); -} - -if ("Л" !== "\Л") { - $ERROR('#Л'); -} - -if ("М" !== "\М") { - $ERROR('#М'); -} - -if ("Н" !== "\Н") { - $ERROR('#Н'); -} - -if ("О" !== "\О") { - $ERROR('#О'); -} - -if ("П" !== "\П") { - $ERROR('#П'); -} - -if ("Р" !== "\Р") { - $ERROR('#Р'); -} - -if ("С" !== "\С") { - $ERROR('#С'); -} - -if ("Т" !== "\Т") { - $ERROR('#Т'); -} - -if ("У" !== "\У") { - $ERROR('#У'); -} - -if ("Ф" !== "\Ф") { - $ERROR('#Ф'); -} - -if ("Х" !== "\Х") { - $ERROR('#Х'); -} - -if ("Ц" !== "\Ц") { - $ERROR('#Ц'); -} - -if ("Ч" !== "\Ч") { - $ERROR('#Ч'); -} - -if ("Ш" !== "\Ш") { - $ERROR('#Ш'); -} - -if ("Щ" !== "\Щ") { - $ERROR('#Щ'); -} - -if ("Ъ" !== "\Ъ") { - $ERROR('#Ъ'); -} - -if ("Ы" !== "\Ы") { - $ERROR('#Ы'); -} - -if ("Ь" !== "\Ь") { - $ERROR('#Ь'); -} - -if ("Э" !== "\Э") { - $ERROR('#Э'); -} - -if ("Ю" !== "\Ю") { - $ERROR('#Ю'); -} - -if ("Я" !== "\Я") { - $ERROR('#Я'); -} - -if ("Ё" !== "\Ё") { - $ERROR('#Ё'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A4.2_T7.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A4.2_T7.js deleted file mode 100644 index bb7b88cb0..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A4.2_T7.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.4_A4.2_T7; - * @section: 7.8.4; - * @assertion: CharacterEscapeSequnce :: NonEscapeSequence; - * @description: NonEscapeSequence :: RUSSIAN SMALL ALPHABET; -*/ - -//CHECK#а-я -CharacterCode = [0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F, 0x0451]; -NonEscapeCharacter = ["\а", "\б", "\в", "\г", "\д", "\е", "\ж", "\з", "\и", "\й", "\к", "\л", "\м", "\н", "\о", "\п", "\р", "\с", "\т", "\у", "\ф", "\х", "\ц", "\ч", "\ш", "\щ", "\ъ", "\ы", "\ь", "\э", "\ю", "\я", "\ё"]; -for (index = 0; index <= 32; index++) { - if (String.fromCharCode(CharacterCode[index]) !== NonEscapeCharacter[index]) { - $ERROR('#' + NonEscapeCharacter[index] + ' '); - } -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A4.2_T8.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A4.2_T8.js deleted file mode 100644 index aa58e4fdf..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A4.2_T8.js +++ /dev/null @@ -1,143 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.4_A4.2_T8; - * @section: 7.8.4; - * @assertion: CharacterEscapeSequnce :: NonEscapeSequence; - * @description: NonEscapeSequence :: RUSSIAN SMALL ALPHABET; -*/ - -//CHECK#а-я - -if ("а" !== "\а") { - $ERROR('#а'); -} - -if ("б" !== "\б") { - $ERROR('#б'); -} - -if ("в" !== "\в") { - $ERROR('#в'); -} - -if ("г" !== "\г") { - $ERROR('#г'); -} - -if ("д" !== "\д") { - $ERROR('#д'); -} - -if ("е" !== "\е") { - $ERROR('#е'); -} - -if ("ж" !== "\ж") { - $ERROR('#ж'); -} - -if ("з" !== "\з") { - $ERROR('#з'); -} - -if ("и" !== "\и") { - $ERROR('#и'); -} - -if ("й" !== "\й") { - $ERROR('#й'); -} - -if ("к" !== "\к") { - $ERROR('#к'); -} - -if ("л" !== "\л") { - $ERROR('#л'); -} - -if ("м" !== "\м") { - $ERROR('#м'); -} - -if ("н" !== "\н") { - $ERROR('#н'); -} - -if ("о" !== "\о") { - $ERROR('#о'); -} - -if ("п" !== "\п") { - $ERROR('#п'); -} - -if ("р" !== "\р") { - $ERROR('#р'); -} - -if ("с" !== "\с") { - $ERROR('#с'); -} - -if ("т" !== "\т") { - $ERROR('#т'); -} - -if ("у" !== "\у") { - $ERROR('#у'); -} - -if ("ф" !== "\ф") { - $ERROR('#ф'); -} - -if ("х" !== "\х") { - $ERROR('#х'); -} - -if ("ц" !== "\ц") { - $ERROR('#ц'); -} - -if ("ч" !== "\ч") { - $ERROR('#ч'); -} - -if ("ш" !== "\ш") { - $ERROR('#ш'); -} - -if ("щ" !== "\щ") { - $ERROR('#щ'); -} - -if ("ъ" !== "\ъ") { - $ERROR('#ъ'); -} - -if ("ы" !== "\ы") { - $ERROR('#ы'); -} - -if ("ь" !== "\ь") { - $ERROR('#ь'); -} - -if ("э" !== "\э") { - $ERROR('#э'); -} - -if ("ю" !== "\ю") { - $ERROR('#ю'); -} - -if ("я" !== "\я") { - $ERROR('#я'); -} - -if ("ё" !== "\ё") { - $ERROR('#ё'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A4.3_T1.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A4.3_T1.js deleted file mode 100644 index 979b36413..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A4.3_T1.js +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.4_A4.3_T1; - * @section: 7.8.4; - * @assertion: NonEscapeSequence is not EscapeCharacter; - * @description: EscapeCharacter :: DecimalDigits :: 1; - * @negative -*/ - -//CHECK#1 -"\1" diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A4.3_T2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A4.3_T2.js deleted file mode 100644 index 13c24c9f8..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A4.3_T2.js +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.4_A4.3_T2; - * @section: 7.8.4; - * @assertion: NonEscapeSequence is not EscapeCharacter; - * @description: EscapeCharacter :: DecimalDigits :: 7; - * @negative -*/ - -//CHECK#1 -"\7" diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A4.3_T3.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A4.3_T3.js deleted file mode 100644 index 1dd54fff5..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A4.3_T3.js +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.4_A4.3_T3; - * @section: 7.8.4; - * @assertion: NonEscapeSequence is not EscapeCharacter; - * @description: EscapeCharacter :: DecimalDigits :: 8; - * @negative -*/ - -//CHECK#1 -"\8" diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A4.3_T4.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A4.3_T4.js deleted file mode 100644 index 26a5260d5..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A4.3_T4.js +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.4_A4.3_T4; - * @section: 7.8.4; - * @assertion: NonEscapeSequence is not EscapeCharacter; - * @description: EscapeCharacter :: DecimalDigits :: 9; - * @negative -*/ - -//CHECK#1 -"\9" diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A4.3_T5.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A4.3_T5.js deleted file mode 100644 index 1cce3fb03..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A4.3_T5.js +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.4_A4.3_T5; - * @section: 7.8.4; - * @assertion: NonEscapeSequence is not EscapeCharacter; - * @description: EscapeCharacter :: u; - * @negative -*/ - -//CHECK#1 -"\u" diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A4.3_T6.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A4.3_T6.js deleted file mode 100644 index 81fc40fce..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A4.3_T6.js +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.4_A4.3_T6; - * @section: 7.8.4; - * @assertion: NonEscapeSequence is not EscapeCharacter; - * @description: EscapeCharacter :: x; - * @negative -*/ - -//CHECK#1 -"\x" diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A4.3_T7.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A4.3_T7.js deleted file mode 100644 index 3c9c838cd..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A4.3_T7.js +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.4_A4.3_T7; - * @section: 7.8.4; - * @assertion: NonEscapeSequence is not EscapeCharacter; - * @description: EscapeCharacter :: SingleEscapeCharacter :: one of b f n r t v; -*/ - -//CHECK#bfnrtv -if ("b" === "\b") { - $ERROR('#b') -} - -if ("f" === "\f") { - $ERROR('#f') -} - -if ("n" === "\n") { - $ERROR('#n') -} - -if ("r" === "\r") { - $ERROR('#r') -} - -if ("t" === "\t") { - $ERROR('#t') -} - -if ("v" === "\v") { - $ERROR('#v') -} - diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A5.1_T1.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A5.1_T1.js deleted file mode 100644 index b3270e0d3..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A5.1_T1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.4_A5.1_T1; - * @section: 7.8.4; - * @assertion: EscapeSequence :: 0; - * @description: String.fromCharCode(0x0000); -*/ - -//CHECK#1 -if (String.fromCharCode(0x0000) !== "\0") { - $ERROR('#1: String.fromCharCode(0x0000) === "\\0"'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A5.1_T2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A5.1_T2.js deleted file mode 100644 index ed3184f53..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A5.1_T2.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.4_A5.1_T2; - * @section: 7.8.4; - * @assertion: EscapeSequence :: 0; - * @description: "\u0000"; -*/ - -//CHECK#1 -if ("\u0000" !== "\0") { - $ERROR('#1: "\\u0000" === "\\0"'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A5.1_T3.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A5.1_T3.js deleted file mode 100644 index fa3573eb1..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A5.1_T3.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.4_A5.1_T3; - * @section: 7.8.4; - * @assertion: EscapeSequence :: 0; - * @description: "\x00"; -*/ - -//CHECK#1 -if ("\x00" !== "\0") { - $ERROR('#1: "\\x00" === "\\0"'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A6.1_T1.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A6.1_T1.js deleted file mode 100644 index 323b05146..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A6.1_T1.js +++ /dev/null @@ -1,89 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.4_A6.1_T1; - * @section: 7.8.4; - * @assertion: EscapeSequence :: HexEscapeSequence :: x HexDigit HexDigit; - * @description: HexEscapeSequence :: HexDigit; -*/ - -//CHECK#0 -if ("\x00" !== String.fromCharCode("0")) { - $ERROR('#0: "\\x00" === String.fromCharCode("0")'); -} - -//CHECK#1 -if ("\x01" !== String.fromCharCode("1")) { - $ERROR('#1: "\\x01" === String.fromCharCode("1")'); -} - -//CHECK#2 -if ("\x02" !== String.fromCharCode("2")) { - $ERROR('#2: "\\x02" === String.fromCharCode("2")'); -} - -//CHECK#3 -if ("\x03" !== String.fromCharCode("3")) { - $ERROR('#3: "\\x03" === String.fromCharCode("3")'); -} - -//CHECK#4 -if ("\x04" !== String.fromCharCode("4")) { - $ERROR('#4: "\\x04" === String.fromCharCode("4")'); -} - -//CHECK#5 -if ("\x05" !== String.fromCharCode("5")) { - $ERROR('#5: "\\x05" === String.fromCharCode("5")'); -} - -//CHECK#6 -if ("\x06" !== String.fromCharCode("6")) { - $ERROR('#6: "\\x06" === String.fromCharCode("6")'); -} - -//CHECK#7 -if ("\x07" !== String.fromCharCode("7")) { - $ERROR('#7: "\\x07" === String.fromCharCode("7")'); -} - -//CHECK#8 -if ("\x08" !== String.fromCharCode("8")) { - $ERROR('#8: "\\x08" === String.fromCharCode("8")'); -} - -//CHECK#9 -if ("\x09" !== String.fromCharCode("9")) { - $ERROR('#9: "\\x09" === String.fromCharCode("9")'); -} - -//CHECK#A -if ("\x0A" !== String.fromCharCode("10")) { - $ERROR('#A: "\\x0A" === String.fromCharCode("10")'); -} - -//CHECK#B -if ("\x0B" !== String.fromCharCode("11")) { - $ERROR('#B: "\\x0B" === String.fromCharCode("11")'); -} - -//CHECK#C -if ("\x0C" !== String.fromCharCode("12")) { - $ERROR('#C: "\\x0C" === String.fromCharCode("12")'); -} - -//CHECK#D -if ("\x0D" !== String.fromCharCode("13")) { - $ERROR('#D: "\\x0D" === String.fromCharCode("13")'); -} - -//CHECK#E -if ("\x0E" !== String.fromCharCode("14")) { - $ERROR('#E: "\\x0E" === String.fromCharCode("14")'); -} - -//CHECK#F -if ("\x0F" !== String.fromCharCode("15")) { - $ERROR('#F: "\\x0F" === String.fromCharCode("15")'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A6.1_T2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A6.1_T2.js deleted file mode 100644 index 1669290e1..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A6.1_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.4_A6.1_T2; - * @section: 7.8.4; - * @assertion: EscapeSequence :: HexEscapeSequence :: x HexDigit HexDigit; - * @description: HexEscapeSequence :: ENGLISH CAPITAL ALPHABET; -*/ - -//CHECK#A-Z -hex = ["\x41", "\x42", "\x43", "\x44", "\x45", "\x46", "\x47", "\x48", "\x49", "\x4A", "\x4B", "\x4C", "\x4D", "\x4E", "\x4F", "\x50", "\x51", "\x52", "\x53", "\x54", "\x55", "\x56", "\x57", "\x58", "\x59", "\x5A"]; -character = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]; -for (index = 0; index <= 25; index++) { - if (hex[index] !== character[index]) { - $ERROR('#' + character[index] + ' '); - } -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A6.1_T3.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A6.1_T3.js deleted file mode 100644 index 46f9a7873..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A6.1_T3.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.4_A6.1_T3; - * @section: 7.8.4; - * @assertion: EscapeSequence :: HexEscapeSequence :: x HexDigit HexDigit; - * @description: HexEscapeSequence :: ENGLISH SMALL ALPHABET; -*/ - -//CHECK#a-z -hex = ["\x61", "\x62", "\x63", "\x64", "\x65", "\x66", "\x67", "\x68", "\x69", "\x6A", "\x6B", "\x6C", "\x6D", "\x6E", "\x6F", "\x70", "\x71", "\x72", "\x73", "\x74", "\x75", "\x76", "\x77", "\x78", "\x79", "\x7A"]; -character = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]; -for (index = 0; index <= 25; index++) { - if (hex[index] !== character[index]) { - $ERROR('#' + character[index] + ' '); - } -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A6.3_T1.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A6.3_T1.js deleted file mode 100644 index 6ae94c79b..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A6.3_T1.js +++ /dev/null @@ -1,84 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.4_A6.3_T1; - * @section: 7.8.4; - * @assertion: \x HexDigit HexDigit SingleStringCharacter; - * @description: Check similar to ('\x01F' === String.fromCharCode('1') + 'F'); -*/ - -//CHECK#1 -if ('\x01F' !== String.fromCharCode('1') + 'F') { - $ERROR("#1: '\x01F' === String.fromCharCode('1') + 'F'"); -} - -//CHECK#2 -if ('\x02E' !== String.fromCharCode('2') + 'E') { - $ERROR("#2: '\x02E' === String.fromCharCode('2') + 'E'"); -} - -//CHECK#3 -if ('\x03D' !== String.fromCharCode('3') + 'D') { - $ERROR("#3: '\x03D' === String.fromCharCode('3') + 'D'"); -} - -//CHECK#4 -if ('\x04C' !== String.fromCharCode('4') + 'C') { - $ERROR("#4: '\x04C' === String.fromCharCode('4') + 'C'"); -} - -//CHECK#5 -if ('\x05B' !== String.fromCharCode('5') + 'B') { - $ERROR("#5: '\x05B' === String.fromCharCode('5') + 'B'"); -} - -//CHECK#6 -if ('\x06A' !== String.fromCharCode('6') + 'A') { - $ERROR("#6: '\x06A' === String.fromCharCode('6') + 'A'"); -} - -//CHECK#7 -if ('\x079' !== String.fromCharCode('7') + '9') { - $ERROR("#7: '\x079' === String.fromCharCode('7') + '9'"); -} - -//CHECK#8 -if ('\x088' !== String.fromCharCode('8') + '8') { - $ERROR("#8: '\x088' === String.fromCharCode('8') + '8'"); -} - -//CHECK#9 -if ('\x097' !== String.fromCharCode('9') + '7') { - $ERROR("#9: '\x097' === String.fromCharCode('9') + '7'"); -} - -//CHECK#A -if ('\x0A6' !== String.fromCharCode('10') + '6') { - $ERROR("#A: '\x0A6' === String.fromCharCode('10') + '6'"); -} - -//CHECK#B -if ('\x0B5' !== String.fromCharCode('11') + '5') { - $ERROR("#B: '\x0B5' === String.fromCharCode('11') + '5'"); -} - -//CHECK#C -if ('\x0C4' !== String.fromCharCode('12') + '4') { - $ERROR("#C: '\x0C4' === String.fromCharCode('12') + '4'"); -} - -//CHECK#D -if ('\x0D3' !== String.fromCharCode('13') + '3') { - $ERROR("#D: '\x0D3' === String.fromCharCode('13') + '3'"); -} - -//CHECK#E -if ('\x0E2' !== String.fromCharCode('14') + '2') { - $ERROR("#E: '\x0E2' === String.fromCharCode('14') + '2'"); -} - -//CHECK#F -if ('\x0F1' !== String.fromCharCode('15') + '1') { - $ERROR("#F: '\x0F1' === String.fromCharCode('15') + '1'"); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A7.1_T1.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A7.1_T1.js deleted file mode 100644 index 4729b84e9..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A7.1_T1.js +++ /dev/null @@ -1,89 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.4_A7.1_T1; - * @section: 7.8.4; - * @assertion: EscapeSequence :: UnicodeEscapeSequence :: u HexDigit HexDigit HexDigit HexDigit; - * @description: Check similar to ("\u0000" === String.fromCharCode("0")); -*/ - -//CHECK#0 -if ("\u0000" !== String.fromCharCode("0")) { - $ERROR('#0: "\\u0000" === String.fromCharCode("0")'); -} - -//CHECK#1 -if ("\u0001" !== String.fromCharCode("1")) { - $ERROR('#1: "\\u0001" === String.fromCharCode("1")'); -} - -//CHECK#2 -if ("\u0002" !== String.fromCharCode("2")) { - $ERROR('#2: "\\u0002" === String.fromCharCode("2")'); -} - -//CHECK#3 -if ("\u0003" !== String.fromCharCode("3")) { - $ERROR('#3: "\\u0003" === String.fromCharCode("3")'); -} - -//CHECK#4 -if ("\u0004" !== String.fromCharCode("4")) { - $ERROR('#4: "\\u0004" === String.fromCharCode("4")'); -} - -//CHECK#5 -if ("\u0005" !== String.fromCharCode("5")) { - $ERROR('#5: "\\u0005" === String.fromCharCode("5")'); -} - -//CHECK#6 -if ("\u0006" !== String.fromCharCode("6")) { - $ERROR('#6: "\\u0006" === String.fromCharCode("6")'); -} - -//CHECK#7 -if ("\u0007" !== String.fromCharCode("7")) { - $ERROR('#7: "\\u0007" === String.fromCharCode("7")'); -} - -//CHECK#8 -if ("\u0008" !== String.fromCharCode("8")) { - $ERROR('#8: "\\u0008" === String.fromCharCode("8")'); -} - -//CHECK#9 -if ("\u0009" !== String.fromCharCode("9")) { - $ERROR('#9: "\\u0009" === String.fromCharCode("9")'); -} - -//CHECK#A -if ("\u000A" !== String.fromCharCode("10")) { - $ERROR('#A: "\\u000A" === String.fromCharCode("10")'); -} - -//CHECK#B -if ("\u000B" !== String.fromCharCode("11")) { - $ERROR('#B: "\\u000B" === String.fromCharCode("11")'); -} - -//CHECK#C -if ("\u000C" !== String.fromCharCode("12")) { - $ERROR('#C: "\\u000C" === String.fromCharCode("12")'); -} - -//CHECK#D -if ("\u000D" !== String.fromCharCode("13")) { - $ERROR('#D: "\\u000D" === String.fromCharCode("13")'); -} - -//CHECK#E -if ("\u000E" !== String.fromCharCode("14")) { - $ERROR('#E: "\\u000E" === String.fromCharCode("14")'); -} - -//CHECK#F -if ("\u000F" !== String.fromCharCode("15")) { - $ERROR('#F: "\\u000F" === String.fromCharCode("15")'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A7.1_T2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A7.1_T2.js deleted file mode 100644 index a0ab77db2..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A7.1_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.4_A7.1_T2; - * @section: 7.8.4; - * @assertion: EscapeSequence :: UnicodeEscapeSequence :: u HexDigit HexDigit HexDigit HexDigit; - * @description: UnicodeEscapeSequence :: ENGLISH CAPITAL ALPHABET; -*/ - -//CHECK#A-Z -unicode = ["\u0041", "\u0042", "\u0043", "\u0044", "\u0045", "\u0046", "\u0047", "\u0048", "\u0049", "\u004A", "\u004B", "\u004C", "\u004D", "\u004E", "\u004F", "\u0050", "\u0051", "\u0052", "\u0053", "\u0054", "\u0055", "\u0056", "\u0057", "\u0058", "\u0059", "\u005A"]; -character = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]; -for (index = 0; index <= 25; index++) { - if (unicode[index] !== character[index]) { - $ERROR('#' + character[index] + ' '); - } -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A7.1_T3.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A7.1_T3.js deleted file mode 100644 index 025ac72e7..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A7.1_T3.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.4_A7.1_T3; - * @section: 7.8.4; - * @assertion: EscapeSequence :: UnicodeEscapeSequence :: u HexDigit HexDigit HexDigit HexDigit; - * @description: UnicodeEscapeSequence :: ENGLISH SMALL ALPHABET; -*/ - -//CHECK#a-z -unicode = ["\u0061", "\u0062", "\u0063", "\u0064", "\u0065", "\u0066", "\u0067", "\u0068", "\u0069", "\u006A", "\u006B", "\u006C", "\u006D", "\u006E", "\u006F", "\u0070", "\u0071", "\u0072", "\u0073", "\u0074", "\u0075", "\u0076", "\u0077", "\u0078", "\u0079", "\u007A"]; -character = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]; -for (index = 0; index <= 25; index++) { - if (unicode[index] !== character[index]) { - $ERROR('#' + character[index] + ' '); - } -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A7.3_T1.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A7.3_T1.js deleted file mode 100644 index 320e0087e..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.4_String_Literals/S7.8.4_A7.3_T1.js +++ /dev/null @@ -1,84 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.4_A7.3_T1; - * @section: 7.8.4; - * @assertion: \u HexDigit HexDigit HexDigit HexDigit DoubleStringCharacter; - * @description: Check similar to ("\u0001F" === String.fromCharCode("1") + "F"); -*/ - -//CHECK#1 -if ("\u0001F" !== String.fromCharCode("1") + "F") { - $ERROR('#1: "\\u0001F" === String.fromCharCode("1") + "F"'); -} - -//CHECK#2 -if ("\u0002E" !== String.fromCharCode("2") + "E") { - $ERROR('#2: "\\u0002E" === String.fromCharCode("2") + "E"'); -} - -//CHECK#3 -if ("\u0003D" !== String.fromCharCode("3") + "D") { - $ERROR('#3: "\\u0003D" === String.fromCharCode("3") + "D"'); -} - -//CHECK#4 -if ("\u0004C" !== String.fromCharCode("4") + "C") { - $ERROR('#4: "\\u0004C" === String.fromCharCode("4") + "C"'); -} - -//CHECK#5 -if ("\u0005B" !== String.fromCharCode("5") + "B") { - $ERROR('#5: "\\u0005B" === String.fromCharCode("5") + "B"'); -} - -//CHECK#6 -if ("\u0006A" !== String.fromCharCode("6") + "A") { - $ERROR('#6: "\\u0006A" === String.fromCharCode("6") + "A"'); -} - -//CHECK#7 -if ("\u00079" !== String.fromCharCode("7") + "9") { - $ERROR('#7: "\\u00079" === String.fromCharCode("7") + "9"'); -} - -//CHECK#8 -if ("\u00088" !== String.fromCharCode("8") + "8") { - $ERROR('#8: "\\u00088" === String.fromCharCode("8") + "8"'); -} - -//CHECK#9 -if ("\u00097" !== String.fromCharCode("9") + "7") { - $ERROR('#9: "\\u00097" === String.fromCharCode("9") + "7"'); -} - -//CHECK#A -if ("\u000A6" !== String.fromCharCode("10") + "6") { - $ERROR('#A: "\\u000A6" === String.fromCharCode("10") + "6"'); -} - -//CHECK#B -if ("\u000B5" !== String.fromCharCode("11") + "5") { - $ERROR('#B: "\\u000B5" === String.fromCharCode("11") + "5"'); -} - -//CHECK#C -if ("\u000C4" !== String.fromCharCode("12") + "4") { - $ERROR('#C: "\\u000C4" === String.fromCharCode("12") + "4"'); -} - -//CHECK#D -if ("\u000D3" !== String.fromCharCode("13") + "3") { - $ERROR('#D: "\\u000D3" === String.fromCharCode("13") + "3"'); -} - -//CHECK#E -if ("\u000E2" !== String.fromCharCode("14") + "2") { - $ERROR('#E: "\\u000E2" === String.fromCharCode("14") + "2"'); -} - -//CHECK#F -if ("\u000F1" !== String.fromCharCode("15") + "1") { - $ERROR('#F: "\\u000F1" === String.fromCharCode("15") + "1"'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.5_Regular_Expression_Literals/S7.8.5_A1.1_T1.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.5_Regular_Expression_Literals/S7.8.5_A1.1_T1.js deleted file mode 100644 index 889d2b3b2..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.5_Regular_Expression_Literals/S7.8.5_A1.1_T1.js +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.5_A1.1_T1; - * @section: 7.8.5; - * @assertion: RegularExpressionFirstChar :: NonTerminator but not * or \ or /, - * RegularExpressionChars :: [empty], RegularExpressionFlags :: [empty]; - * @description: Without eval; -*/ - -//CHECK#1 -if (/1/.source !== "1") { - $ERROR('#1: /1/'); -} - -//CHECK#2 -if (/a/.source !== "a") { - $ERROR('#2: /a/'); -} - -//CHECK#3 -if (/;/.source !== ";") { - $ERROR('#3: /;/'); -} - -//CHECK#4 -if (/ /.source !== " ") { - $ERROR('#4: / /'); -} - -//CHECK#5 -if (/\u0041/.source !== "\\u0041") { - $ERROR('#5: /\\u0041/'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.5_Regular_Expression_Literals/S7.8.5_A1.1_T2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.5_Regular_Expression_Literals/S7.8.5_A1.1_T2.js deleted file mode 100644 index 5b3a2b704..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.5_Regular_Expression_Literals/S7.8.5_A1.1_T2.js +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.5_A1.1_T2; - * @section: 7.8.5, 15.10.1; - * @assertion: RegularExpressionFirstChar :: NonTerminator but not * or \ or /, - * RegularExpressionChars :: [empty], RegularExpressionFlags :: [empty]; - * @description: Complex test with eval, using syntax pattern; -*/ - -//CHECK -errorCount = 0; -count = 0; -var hex = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"]; -for (i1 = 0; i1 < 16; i1++) { - for (i2 = 0; i2 < 16; i2++) { - for (i3 = 0; i3 < 16; i3++) { - for (i4 = 0; i4 < 16; i4++) { - try { - var uu = hex[i1] + hex[i2] + hex[i3] + hex[i4]; - var Elimination = - ((uu === "002A") || (uu === "002F") || (uu === "005C") || (uu === "002B") || - (uu === "003F") || (uu === "0028") || (uu === "0029") || - (uu === "005B") || (uu === "005D") || (uu === "007B") || (uu === "007D")); - /* - * \u002A / \u002F \ \u005C + \u002B - ? \u003F ( \u0028 ) \u0029 - [ \u005B ] \u005D { \u007B } \u007D - */ - var LineTerminator = ((uu === "000A") || (uu === "000D") || (uu === "2028") || (uu === "2029")); - if ((Elimination || LineTerminator ) === false) { - var xx = String.fromCharCode("0x" + uu); - var pattern = eval("/" + xx + "/"); - if (pattern.source !== xx) { - $ERROR('#' + uu + ' '); - errorCount++; - } - } else { - count--; - } - } catch (e) { - $ERROR('#' + uu + ' '); - errorCount++; - } - count++; - } - } - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Regular Expression First Char in ' + count); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.5_Regular_Expression_Literals/S7.8.5_A1.3_T2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.5_Regular_Expression_Literals/S7.8.5_A1.3_T2.js deleted file mode 100644 index ee9cb22ce..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.5_Regular_Expression_Literals/S7.8.5_A1.3_T2.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.5_A1.3_T2; - * @section: 7.8.5; - * @assertion: RegularExpressionFirstChar :: LineTerminator is incorrect; - * @description: Line Feed, with eval; -*/ - -//CHECK#1 -try { - eval("/\u000A/").source; - $ERROR('#1.1: RegularExpressionFirstChar :: Line Feed is incorrect. Actual: ' + (eval("/\u000A/").source)); -} -catch (e) { - if ((e instanceof SyntaxError) !== true) { - $ERROR('#1.2: RegularExpressionFirstChar :: Line Feed is incorrect. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.5_Regular_Expression_Literals/S7.8.5_A1.3_T4.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.5_Regular_Expression_Literals/S7.8.5_A1.3_T4.js deleted file mode 100644 index cde74def1..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.5_Regular_Expression_Literals/S7.8.5_A1.3_T4.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.5_A1.3_T4; - * @section: 7.8.5; - * @assertion: RegularExpressionFirstChar :: LineTerminator is incorrect; - * @description: Carriage Return, with eval; -*/ - -//CHECK#1 -try { - eval("/\u000D/").source; - $ERROR('#1.1: RegularExpressionFirstChar :: Carriage Return is incorrect. Actual: ' + (eval("/\u000D/").source)); -} -catch (e) { - if ((e instanceof SyntaxError) !== true) { - $ERROR('#1.2: RegularExpressionFirstChar :: Carriage Return is incorrect. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.5_Regular_Expression_Literals/S7.8.5_A1.3_T5.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.5_Regular_Expression_Literals/S7.8.5_A1.3_T5.js deleted file mode 100644 index b96fabe71..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.5_Regular_Expression_Literals/S7.8.5_A1.3_T5.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.5_A1.3_T5; - * @section: 7.8.5; - * @assertion: RegularExpressionFirstChar :: LineTerminator is incorrect; - * @description: Line separator, with eval; -*/ - -//CHECK#1 -try { - eval("/\u2028/").source; - $ERROR('#1.1: RegularExpressionFirstChar :: Line separator is incorrect. Actual: ' + (eval("/\u2028/").source)); -} -catch (e) { - if ((e instanceof SyntaxError) !== true) { - $ERROR('#1.2: RegularExpressionFirstChar :: Line separator is incorrect. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.5_Regular_Expression_Literals/S7.8.5_A1.3_T6.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.5_Regular_Expression_Literals/S7.8.5_A1.3_T6.js deleted file mode 100644 index 97cfc60bb..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.5_Regular_Expression_Literals/S7.8.5_A1.3_T6.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.5_A1.3_T6; - * @section: 7.8.5; - * @assertion: RegularExpressionFirstChar :: LineTerminator is incorrect; - * @description: Paragraph separator, with eval; -*/ - -//CHECK#1 -try { - eval("/\u2029/").source; - $ERROR('#1.1: RegularExpressionFirstChar :: Paragraph separator is incorrect. Actual: ' + (eval("/\u2029/").source)); -} -catch (e) { - if ((e instanceof SyntaxError) !== true) { - $ERROR('#1.2: RegularExpressionFirstChar :: Paragraph separator is incorrect. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.5_Regular_Expression_Literals/S7.8.5_A1.4_T1.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.5_Regular_Expression_Literals/S7.8.5_A1.4_T1.js deleted file mode 100644 index 19784202c..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.5_Regular_Expression_Literals/S7.8.5_A1.4_T1.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.5_A1.4_T1; - * @section: 7.8.5; - * @assertion: RegularExpressionFirstChar :: BackslashSequence :: \NonTerminator, - * RegularExpressionChars :: [empty], RegularExpressionFlags :: [empty]; - * @description: Check similar to (/\1/.source === "\\1"); -*/ - -//CHECK#1 -if (/\1/.source !== "\\1") { - $ERROR('#1: /\\1/'); -} - -//CHECK#2 -if (/\a/.source !== "\\a") { - $ERROR('#2: /\\a/'); -} - -//CHECK#3 -if (/\;/.source !== "\\;") { - $ERROR('#3: /\\;/'); -} - -//CHECK#4 -if (/\ /.source !== "\\ ") { - $ERROR('#4: /\\ /'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.5_Regular_Expression_Literals/S7.8.5_A2.1_T1.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.5_Regular_Expression_Literals/S7.8.5_A2.1_T1.js deleted file mode 100644 index b7edcb67d..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.5_Regular_Expression_Literals/S7.8.5_A2.1_T1.js +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.5_A2.1_T1; - * @section: 7.8.5; - * @assertion: RegularExpressionChar :: NonTerminator but not \ or /, - * RegularExpressionFlags :: [empty]; - * @description: Without eval; -*/ - -//CHECK#1 -if (/1a/.source !== "1a") { - $ERROR('#1: /1a/'); -} - -//CHECK#2 -if (/aa/.source !== "aa") { - $ERROR('#2: /aa/'); -} - -//CHECK#3 -if (/,;/.source !== ",;") { - $ERROR('#3: /,;/'); -} - -//CHECK#4 -if (/ /.source !== " ") { - $ERROR('#4: / /'); -} - -//CHECK#5 -if (/a\u0041/.source !== "a\\u0041") { - $ERROR('#5: /a\\u0041/'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.5_Regular_Expression_Literals/S7.8.5_A2.4_T1.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.5_Regular_Expression_Literals/S7.8.5_A2.4_T1.js deleted file mode 100644 index 0f3bface9..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.5_Regular_Expression_Literals/S7.8.5_A2.4_T1.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.5_A2.4_T1; - * @section: 7.8.5; - * @assertion: RegularExpressionChar :: BackslashSequence :: \NonTerminator, - * RegularExpressionFlags :: [empty]; - * @description: Check similar to (/a\1/.source === "a\\1"); -*/ - -//CHECK#1 -if (/a\1/.source !== "a\\1") { - $ERROR('#1: /a\\1/'); -} - -//CHECK#2 -if (/a\a/.source !== "a\\a") { - $ERROR('#2: /a\\a/'); -} - -//CHECK#3 -if (/,\;/.source !== ",\\;") { - $ERROR('#3: /,\\;/'); -} - -//CHECK#4 -if (/ \ /.source !== " \\ ") { - $ERROR('#4: / \\ /'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.5_Regular_Expression_Literals/S7.8.5_A3.1_T1.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.5_Regular_Expression_Literals/S7.8.5_A3.1_T1.js deleted file mode 100644 index 7a6a1276a..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.5_Regular_Expression_Literals/S7.8.5_A3.1_T1.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.5_A3.1_T1; - * @section: 7.8.5, 15.10.4.1; - * @assertion: RegularExpressionFlags :: IdentifierPart; - * @description: IdentifierPart :: g; -*/ - -//CHECK#1 -var regexp = /(?:)/g; -if (regexp.global !== true) { - $ERROR('#1: var regexp = /(?:)/g; regexp.global === true. Actual: ' + (regexp.global)); -} - -//CHECK#2 -if (regexp.ignoreCase !== false) { - $ERROR('#2: var regexp = /(?:)/g; regexp.ignoreCase === false. Actual: ' + (regexp.ignoreCase)); -} - -//CHECK#3 -if (regexp.multiline !== false) { - $ERROR('#3: var regexp = /(?:)/g; regexp.multiline === false. Actual: ' + (regexp.multiline)); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.5_Regular_Expression_Literals/S7.8.5_A3.1_T2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.5_Regular_Expression_Literals/S7.8.5_A3.1_T2.js deleted file mode 100644 index dc5fbbc42..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.5_Regular_Expression_Literals/S7.8.5_A3.1_T2.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.5_A3.1_T2; - * @section: 7.8.5, 15.10.4.1; - * @assertion: RegularExpressionFlags :: IdentifierPart; - * @description: IdentifierPart :: i; -*/ - -//CHECK#1 -var regexp = /(?:)/i; -if (regexp.global !== false) { - $ERROR('#1: var regexp = /(?:)/g; regexp.global === false. Actual: ' + (regexp.global)); -} - -//CHECK#2 -if (regexp.ignoreCase !== true) { - $ERROR('#2: var regexp = /(?:)/g; regexp.ignoreCase === true. Actual: ' + (regexp.ignoreCase)); -} - -//CHECK#3 -if (regexp.multiline !== false) { - $ERROR('#3: var regexp = /(?:)/g; regexp.multiline === false. Actual: ' + (regexp.multiline)); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.5_Regular_Expression_Literals/S7.8.5_A3.1_T3.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.5_Regular_Expression_Literals/S7.8.5_A3.1_T3.js deleted file mode 100644 index e266be1ee..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.5_Regular_Expression_Literals/S7.8.5_A3.1_T3.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.5_A3.1_T3; - * @section: 7.8.5, 15.10.4.1; - * @assertion: RegularExpressionFlags :: IdentifierPart; - * @description: IdentifierPart :: m; -*/ - -//CHECK#1 -var regexp = /(?:)/m; -if (regexp.global !== false) { - $ERROR('#1: var regexp = /(?:)/g; regexp.global === false. Actual: ' + (regexp.global)); -} - -//CHECK#2 -if (regexp.ignoreCase !== false) { - $ERROR('#2: var regexp = /(?:)/g; regexp.ignoreCase === false. Actual: ' + (regexp.ignoreCase)); -} - -//CHECK#3 -if (regexp.multiline !== true) { - $ERROR('#3: var regexp = /(?:)/g; regexp.multiline === true. Actual: ' + (regexp.multiline)); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.5_Regular_Expression_Literals/S7.8.5_A3.1_T4.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.5_Regular_Expression_Literals/S7.8.5_A3.1_T4.js deleted file mode 100644 index 0c3969309..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.5_Regular_Expression_Literals/S7.8.5_A3.1_T4.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.5_A3.1_T4; - * @section: 7.8.5, 15.10.4.1; - * @assertion: RegularExpressionFlags :: IdentifierPart; - * @description: IdentifierPart :: gi; -*/ - -//CHECK#1 -var regexp = /(?:)/gi; -if (regexp.global !== true) { - $ERROR('#1: var regexp = /(?:)/g; regexp.global === true. Actual: ' + (regexp.global)); -} - -//CHECK#2 -if (regexp.ignoreCase !== true) { - $ERROR('#2: var regexp = /(?:)/g; regexp.ignoreCase === true. Actual: ' + (regexp.ignoreCase)); -} - -//CHECK#3 -if (regexp.multiline !== false) { - $ERROR('#3: var regexp = /(?:)/g; regexp.multiline === false. Actual: ' + (regexp.multiline)); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.5_Regular_Expression_Literals/S7.8.5_A3.1_T5.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.5_Regular_Expression_Literals/S7.8.5_A3.1_T5.js deleted file mode 100644 index b0101e1a4..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.5_Regular_Expression_Literals/S7.8.5_A3.1_T5.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.5_A3.1_T5; - * @section: 7.8.5, 15.10.4.1; - * @assertion: RegularExpressionFlags :: IdentifierPart; - * @description: IdentifierPart :: mg; -*/ - -//CHECK#1 -var regexp = /(?:)/mg; -if (regexp.global !== true) { - $ERROR('#1: var regexp = /(?:)/g; regexp.global === true. Actual: ' + (regexp.global)); -} - -//CHECK#2 -if (regexp.ignoreCase !== false) { - $ERROR('#2: var regexp = /(?:)/g; regexp.ignoreCase === false. Actual: ' + (regexp.ignoreCase)); -} - -//CHECK#3 -if (regexp.multiline !== true) { - $ERROR('#3: var regexp = /(?:)/g; regexp.multiline === true. Actual: ' + (regexp.multiline)); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.5_Regular_Expression_Literals/S7.8.5_A3.1_T6.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.5_Regular_Expression_Literals/S7.8.5_A3.1_T6.js deleted file mode 100644 index 25e84137b..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.5_Regular_Expression_Literals/S7.8.5_A3.1_T6.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.5_A3.1_T6; - * @section: 7.8.5, 15.10.4.1; - * @assertion: RegularExpressionFlags :: IdentifierPart; - * @description: IdentifierPart :: mig; -*/ - -//CHECK#1 -var regexp = /(?:)/mig; -if (regexp.global !== true) { - $ERROR('#1: var regexp = /(?:)/g; regexp.global === true. Actual: ' + (regexp.global)); -} - -//CHECK#2 -if (regexp.ignoreCase !== true) { - $ERROR('#2: var regexp = /(?:)/g; regexp.ignoreCase === true. Actual: ' + (regexp.ignoreCase)); -} - -//CHECK#3 -if (regexp.multiline !== true) { - $ERROR('#3: var regexp = /(?:)/g; regexp.multiline === true. Actual: ' + (regexp.multiline)); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.5_Regular_Expression_Literals/S7.8.5_A3.1_T7.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.5_Regular_Expression_Literals/S7.8.5_A3.1_T7.js deleted file mode 100644 index 4c112480b..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.5_Regular_Expression_Literals/S7.8.5_A3.1_T7.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.5_A3.1_T7; - * @section: 7.8.5, 15.10.4.1; - * @assertion: RegularExpressionFlags :: IdentifierPart; - * @description: IdentifierPart :: \u0067 (g); -*/ - -//CHECK#1 -var regexp = /(?:)/\u0067; -if (regexp.global !== true) { - $ERROR('#1: var regexp = /(?:)/\\u0067; regexp.global === true. Actual: ' + (regexp.global)); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.5_Regular_Expression_Literals/S7.8.5_A3.1_T8.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.5_Regular_Expression_Literals/S7.8.5_A3.1_T8.js deleted file mode 100644 index 75d4a72af..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.5_Regular_Expression_Literals/S7.8.5_A3.1_T8.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.5_A3.1_T8; - * @section: 7.8.5, 15.10.4.1; - * @assertion: RegularExpressionFlags :: IdentifierPart; - * @description: IdentifierPart :: \u0069 (i); -*/ - -//CHECK#1 -var regexp = /(?:)/\u0069; -if (regexp.ignoreCase !== true) { - $ERROR('#1: var regexp = /(?:)/\\u0069; regexp.ignoreCase === true. Actual: ' + (regexp.ignoreCase)); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.5_Regular_Expression_Literals/S7.8.5_A3.1_T9.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.5_Regular_Expression_Literals/S7.8.5_A3.1_T9.js deleted file mode 100644 index 2086e12fe..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.5_Regular_Expression_Literals/S7.8.5_A3.1_T9.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.5_A3.1_T9; - * @section: 7.8.5, 15.10.4.1; - * @assertion: RegularExpressionFlags :: IdentifierPart; - * @description: IdentifierPart :: \u006D (m); -*/ - -//CHECK#1 -var regexp = /(?:)/\u006D; -if (regexp.multiline !== true) { - $ERROR('#1: var regexp = /(?:)/\\u006D; regexp.multiline === true. Actual: ' + (regexp.multiline)); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.5_Regular_Expression_Literals/S7.8.5_A4.1.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.5_Regular_Expression_Literals/S7.8.5_A4.1.js deleted file mode 100644 index 3846b14f9..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.5_Regular_Expression_Literals/S7.8.5_A4.1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.5_A4.1; - * @section: 7.8.5; - * @assertion: A regular expression literal is an input element that is converted to - * a RegExp object when it is scanned; - * @description: Check ((/(?:)/ instanceof RegExp) === true); -*/ - -//CHECK#1 -if ((/(?:)/ instanceof RegExp) !== true) { - $ERROR('#1: (/(?:)/ instanceof RegExp) === true. Actual: ' + ((/(?:)/ instanceof RegExp))); -} - diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.5_Regular_Expression_Literals/S7.8.5_A4.2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.5_Regular_Expression_Literals/S7.8.5_A4.2.js deleted file mode 100644 index 59d64a59d..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.8_Literals/7.8.5_Regular_Expression_Literals/S7.8.5_A4.2.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.8.5_A4.2; - * @section: 7.8.5; - * @assertion: Two regular expression literals in a program evaluate to - * regular expression objects that never compare as === to each other even - * if the two literals' contents are identical; - * @description: Check equality two regular expression literals; -*/ - -//CHECK#1 -var regexp1 = /(?:)/; -var regexp2 = /(?:)/; -if (regexp1 === regexp2) { - $ERROR('#1: var regexp1 = /(?:)/; var regexp2 = /(?:)/; regexp1 !== regexp2'); -} - diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/7.9.2_Examples_of_Automatic_Semicolon_Insertion/S7.9.2_A1_T2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/7.9.2_Examples_of_Automatic_Semicolon_Insertion/S7.9.2_A1_T2.js deleted file mode 100644 index ef79de50a..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/7.9.2_Examples_of_Automatic_Semicolon_Insertion/S7.9.2_A1_T2.js +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.9.2_A1_T2; - * @section: 7.9.2; - * @assertion: Check examples for automatic semicolon insertion from the Standart; - * @description: { 1 \n 2 } 3 is a valid sentence in the ECMAScript grammar with automatic semicolon insertion; -*/ - -//CHECK#1 -{ 1 -2 } 3 diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/7.9.2_Examples_of_Automatic_Semicolon_Insertion/S7.9.2_A1_T4.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/7.9.2_Examples_of_Automatic_Semicolon_Insertion/S7.9.2_A1_T4.js deleted file mode 100644 index 3466ea5c7..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/7.9.2_Examples_of_Automatic_Semicolon_Insertion/S7.9.2_A1_T4.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.9.2_A1_T4; - * @section: 7.9.2; - * @assertion: Check examples for automatic semicolon insertion from the Standart; - * @description: return \n a+b is a valid sentence in the ECMAScript grammar - * with automatic semicolon insertion, but returned undefined; -*/ - -//CHECK#1 -var a=1,b=2; -function test(){ - return - a+b -} -var x=test(); -if (x!==undefined) $ERROR('#1: Automatic semicolon insertion not work with return'); diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/7.9.2_Examples_of_Automatic_Semicolon_Insertion/S7.9.2_A1_T5.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/7.9.2_Examples_of_Automatic_Semicolon_Insertion/S7.9.2_A1_T5.js deleted file mode 100644 index 5e96a4885..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/7.9.2_Examples_of_Automatic_Semicolon_Insertion/S7.9.2_A1_T5.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.9.2_A1_T5; - * @section: 7.9.2; - * @assertion: Check examples for automatic semicolon insertion from the Standart; - * @description: a=b \n ++c is a valid sentence in the ECMAScript grammar - * with automatic semicolon insertion, but a!==b++c; -*/ - -//CHECK#1 -var a=1,b=2,c=3; -a=b -++c - -if (a!==b) $ERROR('#1: Automatic semicolon insertion not work with ++'); diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/7.9.2_Examples_of_Automatic_Semicolon_Insertion/S7.9.2_A1_T7.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/7.9.2_Examples_of_Automatic_Semicolon_Insertion/S7.9.2_A1_T7.js deleted file mode 100644 index 6b7c59a18..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/7.9.2_Examples_of_Automatic_Semicolon_Insertion/S7.9.2_A1_T7.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.9.2_A1_T7; - * @section: 7.9.2; - * @assertion: Check examples for automatic semicolon insertion from the Standart; - * @description: a=b+c \n (d+e).print() is a valid sentence in the ECMAScript grammar, - * and automatic semicolon insertion not run; -*/ - -//CHECK#1 -function c (a){ - return 2*a; -} - -var a=1,b=2,d=4,e=5; - -a=b+c -(d+e) - -if (a !== 20) $ERROR('#1: Automatic semicolon insertion work wrong'); diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A1.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A1.js deleted file mode 100644 index 1b63bf15d..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A1.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.9_A1; - * @section: 7.9, 12.7, 12.12; - * @assertion: Check Continue Statement for automatic semicolon insertion; - * @description: Try use continue \n Label construction; -*/ - -//CHECK#1 -label1: for (var i = 0; i <= 0; i++) { - for (var j = 0; j <= 1; j++) { - if (j === 0) { - continue label1; - } else { - $ERROR('#1: Check continue statement for automatic semicolon insertion'); - } - } -} - -//CHECK#2 -var result = false; -label2: for (var i = 0; i <= 1; i++) { - for (var j = 0; j <= 1; j++) { - if (j === 0) { - continue - label2; - } else { - result = true; - } - } -} - -if (result !== true) { - $ERROR('#2: Check continue statement for automatic semicolon insertion'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A10_T1.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A10_T1.js deleted file mode 100644 index bcf4cc633..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A10_T1.js +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.9_A10_T1; - * @section: 7.9; - * @assertion: Check {} for automatic semicolon insertion; - * @description: Checking if execution of "1 * {}" passes; -*/ - -//CHECK#1 -1 * {} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A10_T10.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A10_T10.js deleted file mode 100644 index c21b9338e..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A10_T10.js +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.9_A10_T10; - * @section: 7.9; - * @assertion: Check {} for automatic semicolon insertion; - * @description: Checking if execution of "{a:1 \n} 3" passes; -*/ - -//CHECK#1 -{a:1 -} 3 diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A10_T11.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A10_T11.js deleted file mode 100644 index cd8aa87f4..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A10_T11.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.9_A10_T11; - * @section: 7.9; - * @assertion: Check {} for automatic semicolon insertion; - * @description: Checking if execution of "{a:1 \n} \n 3" passes; -*/ - -//CHECK#1 -{a:1 -} -3 diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A10_T12.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A10_T12.js deleted file mode 100644 index c546db9ee..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A10_T12.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.9_A10_T12; - * @section: 7.9; - * @assertion: Check {} for automatic semicolon insertion; - * @description: Checking if execution of "{ \n a: \n 1 \n } \n 3" passes; -*/ - -//CHECK#1 -{ -a: -1 -} -3 diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A10_T3.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A10_T3.js deleted file mode 100644 index 100aac112..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A10_T3.js +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.9_A10_T3; - * @section: 7.9; - * @assertion: Check {} for automatic semicolon insertion; - * @description: Checking if execution of "({}) * 1" passes; -*/ - -//CHECK#1 -({}) * 1 diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A10_T5.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A10_T5.js deleted file mode 100644 index da946c6cf..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A10_T5.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.9_A10_T5; - * @section: 7.9; - * @assertion: Check {} for automatic semicolon insertion; - * @description: Checking if execution of "( \n {} \n ) * 1" passes; -*/ - -//CHECK#1 -( - {} -) * 1 diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A10_T7.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A10_T7.js deleted file mode 100644 index f6a646b72..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A10_T7.js +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.9_A10_T7; - * @section: 7.9; - * @assertion: Check {} for automatic semicolon insertion; - * @description: Checking if execution of "{1} 2" passes; -*/ - -//CHECK#1 -{1} 2 diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A10_T9.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A10_T9.js deleted file mode 100644 index caed5e1ae..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A10_T9.js +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.9_A10_T9; - * @section: 7.9; - * @assertion: Check {} for automatic semicolon insertion; - * @description: Checking if execution of "{1 \n 2} 3" passes; -*/ - -//CHECK#1 -{1 -2} 3 diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A11_T1.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A11_T1.js deleted file mode 100644 index afe266aa5..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A11_T1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.9_A11_T1; - * @section: 7.9, 12.5; - * @assertion: Check If Statement for automatic semicolon insertion; - * @description: Use if (false) x = 1 (without semicolon) and check x; -*/ - -//CHECK#1 -x = 0; -if (false) x = 1 -if (x !== 0) { - $ERROR('#1: Check If Statement for automatic semicolon insertion'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A11_T10.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A11_T10.js deleted file mode 100644 index 19232e941..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A11_T10.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.9_A11_T10; - * @section: 7.9, 12.5; - * @assertion: Check If Statement for automatic semicolon insertion; - * @description: Use if (false) {x = 1} else {x=-1} and check x; -*/ - -//CHECK#1 -x = 0; -if (false) {x = 1} else {x = -1} -if (x !== -1) { - $ERROR('#1: Check If Statement for automatic semicolon insertion'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A11_T11.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A11_T11.js deleted file mode 100644 index 98117dfdf..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A11_T11.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.9_A11_T11; - * @section: 7.9, 12.5; - * @assertion: Check If Statement for automatic semicolon insertion; - * @description: Use if (false) {{x = 1};} \n else x=-1 and check x; -*/ - -//CHECK#1 -x = 0; -if (false) {{x = 1};} -else x = -1 -if (x !== -1) { - $ERROR('#1: Check If Statement for automatic semicolon insertion'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A11_T2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A11_T2.js deleted file mode 100644 index 8aff7dc9c..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A11_T2.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.9_A11_T2; - * @section: 7.9, 12.5; - * @assertion: Check If Statement for automatic semicolon insertion; - * @description: Use if (false) \n x = 1 and check x; -*/ - -//CHECK#1 -x = 0; -if (false) -x = 1 -if (x !== 0) { - $ERROR('#1: Check If Statement for automatic semicolon insertion'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A11_T3.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A11_T3.js deleted file mode 100644 index 146f49df6..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A11_T3.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.9_A11_T3; - * @section: 7.9, 12.5; - * @assertion: Check If Statement for automatic semicolon insertion; - * @description: Use if (false);\n x = 1 and check x; -*/ - -//CHECK#1 -x = 0; -if (false); -x = 1 -if (x !== 1) { - $ERROR('#1: Check If Statement for automatic semicolon insertion'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A11_T5.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A11_T5.js deleted file mode 100644 index 07fd6aeff..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A11_T5.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.9_A11_T5; - * @section: 7.9, 12.5; - * @assertion: Check If Statement for automatic semicolon insertion; - * @description: Use if (false) x = 1; else x=-1 and check x; -*/ - -//CHECK#1 -x = 0; -if (false) x = 1; else x = -1 -if (x !== -1) { - $ERROR('#1: Check If Statement for automatic semicolon insertion'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A11_T6.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A11_T6.js deleted file mode 100644 index e947d06f9..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A11_T6.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.9_A11_T6; - * @section: 7.9, 12.5; - * @assertion: Check If Statement for automatic semicolon insertion; - * @description: Use if (false) x = 1 \n else x=-1 and check x; -*/ - -//CHECK#1 -x = 0; -if (false) x = 1 -else x = -1 -if (x !== -1) { - $ERROR('#1: Check If Statement for automatic semicolon insertion'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A11_T7.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A11_T7.js deleted file mode 100644 index b53ad7649..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A11_T7.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.9_A11_T7; - * @section: 7.9, 12.5; - * @assertion: Check If Statement for automatic semicolon insertion; - * @description: Use if (false) x = 1; \n else x=-1 and check x; -*/ - -//CHECK#1 -x = 0; -if (false) x = 1; -else x = -1 -if (x !== -1) { - $ERROR('#1: Check If Statement for automatic semicolon insertion'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A11_T9.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A11_T9.js deleted file mode 100644 index e8ef43ec1..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A11_T9.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.9_A11_T9; - * @section: 7.9, 12.5; - * @assertion: Check If Statement for automatic semicolon insertion; - * @description: Use if (false) {x = 1} \n else x=-1 and check x; -*/ - -//CHECK#1 -x = 0; -if (false) {x = 1} -else x = -1 -if (x !== -1) { - $ERROR('#1: Check If Statement for automatic semicolon insertion'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A2.js deleted file mode 100644 index 1de851fda..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A2.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.9_A2; - * @section: 7.9, 12.8, 12.12; - * @assertion: Check Break Statement for automatic semicolon insertion; - * @description: Try use break \n Label construction; -*/ - -//CHECK#1 -label1: for (var i = 0; i <= 0; i++) { - for (var j = 0; j <= 0; j++) { - break label1; - } - $ERROR('#1: Check break statement for automatic semicolon insertion'); -} - -//CHECK#2 -var result = false; -label2: for (var i = 0; i <= 0; i++) { - for (var j = 0; j <= 0; j++) { - break - label2; - } - result = true; -} - -if (result !== true) { - $ERROR('#2: Check break statement for automatic semicolon insertion'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A3.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A3.js deleted file mode 100644 index 3967e0786..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A3.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.9_A3; - * @section: 7.9, 12.9; - * @assertion: Check Return Statement for automatic semicolon insertion; - * @description: Try use return \n Expression construction; -*/ - -//CHECK#1 -function f1() -{ - return 1; -} -if (f1() !== 1) { - $ERROR('#1: Check return statement for automatic semicolon insertion'); -} - -//CHECK#2 -function f2() -{ - return - 1; -} -if (f2() !== undefined) { - $ERROR('#2: Check return statement for automatic semicolon insertion'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A5.2_T1.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A5.2_T1.js deleted file mode 100644 index 66c0dced4..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A5.2_T1.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.9_A5.2_T1; - * @section: 7.9, 12.4, 11.13.1; - * @assertion: Check Prefix Increment Operator for automatic semicolon insertion; - * @description: Try use Variable1 \n ++Variable2 construction; -*/ - -//CHECK#1 -var x = 0; -var y = 0; -x -++y -if (x !== 0) { - $ERROR('#1: Check Prefix Increment Operator for automatic semicolon insertion'); -} else { - if (y !== 1) { - $ERROR('#2: Check Prefix Increment Operator for automatic semicolon insertion'); - } -} - diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A5.4_T1.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A5.4_T1.js deleted file mode 100644 index 787559802..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A5.4_T1.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.9_A5.4_T1; - * @section: 7.9, 12.4, 11.13.2; - * @assertion: Check Prefix Decrement Operator for automatic semicolon insertion; - * @description: Try use Variable1 \n --Variable2 construction; -*/ - -//CHECK#1 -var x = 1; -var y = 1; -x ---y -if (x !== 1) { - $ERROR('#1: Check Prefix Decrement Operator for automatic semicolon insertion'); -} else { - if (y !== 0) { - $ERROR('#1: Check Prefix Decrement Operator for automatic semicolon insertion'); - } -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A5.5_T1.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A5.5_T1.js deleted file mode 100644 index cc22c8f24..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A5.5_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.9_A5.5_T1; - * @section: 7.9, 12.4, 11.2.5; - * @assertion: Check Function Expression for automatic semicolon insertion; - * @description: Try use 1 + function_name\n(2 + 3) construction; -*/ - -//CHECK#1 -function f(t) { - return t; -} -var x = 1 + f -(2 + 3) -if (x !== 6) { - $ERROR('#1: Check Function Expression for automatic semicolon insertion'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A5.5_T2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A5.5_T2.js deleted file mode 100644 index e10966215..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A5.5_T2.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.9_A5.5_T2; - * @section: 7.9, 12.4, 11.2.5; - * @assertion: Check Function Expression for automatic semicolon insertion; - * @description: Try use function f(o) {o.x = 1; return o;}; \n (new Object()).x; construction; -*/ - -//CHECK#1 -var result = function f(o) {o.x = 1; return o;}; -(new Object()).x; -if (typeof result !== "function") { - $ERROR('#1: Check Function Expression for automatic semicolon insertion'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A5.5_T3.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A5.5_T3.js deleted file mode 100644 index e11c40a04..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A5.5_T3.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.9_A5.5_T3; - * @section: 7.9, 12.4, 11.2.5; - * @assertion: Check Function Expression for automatic semicolon insertion; - * @description: Try use function f(o) {o.x = 1; return o;} \n (new Object()).x; construction; -*/ - -//CHECK#1 -var result = function f(o) {o.x = 1; return o;} -(new Object()).x; -if (result !== 1) { - $ERROR('#1: Check Function Expression for automatic semicolon insertion'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A5.5_T4.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A5.5_T4.js deleted file mode 100644 index 2e89107d9..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A5.5_T4.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.9_A5.5_T4; - * @section: 7.9, 12.4, 11.2.5; - * @assertion: Check Function Expression for automatic semicolon insertion; - * @description: Insert some LineTerminators into function body; -*/ - -//CHECK#1 -var x = -1 + (function (t){return {a:t -} -}) -(2 + 3). -a - -if (x !== 6) { - $ERROR('#1: Check Function Expression for automatic semicolon insertion'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A5.5_T5.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A5.5_T5.js deleted file mode 100644 index f0a7d5b23..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A5.5_T5.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.9_A5.5_T5; - * @section: 7.9, 12.4, 11.2.5; - * @assertion: Check Function Expression for automatic semicolon insertion; - * @description: Insert some LineTerminators into rerutn expression; - * -*/ - -//CHECK#1 -var x = -1 + (function f -(t){ -return { -a: -function(){ -return t + 1 -} -} -} -) -(2 + 3). -a -() - -if (x !== 7) { - $ERROR('#1: Check Function Expression for automatic semicolon insertion'); -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A5.6_T1.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A5.6_T1.js deleted file mode 100644 index 33c56031b..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A5.6_T1.js +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.9_A5.6_T1; - * @section: 7.9, 12.4, 11.3, 11.4.4, 11.4.5; - * @assertion: Since LineTerminator between Postfix Increment/Decrement Operator(I/DO) and operand is not allowed but - * between Prefix I/DO and operand admitted, Postfix I/DO in combination with prefix I/DO after automatic semicolon insertion gives valid result; - * @description: Try use Variable1 \n ++ \n Variable2 construction; -*/ - -var x=0, y=0; - -x -++ -y - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if ((x!==0)&(y!==1)) { - $ERROR('#1: Check Postfix Increment Operator for automatic semicolon insertion'); -} -// -////////////////////////////////////////////////////////////////////////////// - -x -++y - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if ((x!==0)&(y!==2)) { - $ERROR('#2: Check Postfix Increment Operator for automatic semicolon insertion'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A5.6_T2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A5.6_T2.js deleted file mode 100644 index c1aff726a..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A5.6_T2.js +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.9_A5.6_T2; - * @section: 7.9, 12.4, 11.3, 11.4.4, 11.4.5; - * @assertion: Since LineTerminator between Postfix Increment/Decrement Operator(I/DO) and operand is not allowed but - * between Prefix I/DO and operand admitted, Postfix I/DO in combination with prefix I/DO after automatic semicolon insertion gives valid result; - * @description: Try use Variable1 \n -- \n Variable2 construction; -*/ - -var x=0, y=2; - -x --- -y - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if ((x!==0)&(y!==1)) { - $ERROR('#1: Check Postfix Increment Operator for automatic semicolon insertion'); -} -// -////////////////////////////////////////////////////////////////////////////// - -x ---y - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if ((x!==0)&(y!==0)) { - $ERROR('#2: Check Postfix Increment Operator for automatic semicolon insertion'); -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A5.8_T1.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A5.8_T1.js deleted file mode 100644 index 3ab7f8dcc..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A5.8_T1.js +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S7.9_A5.8_T1; -* @section: 7.9; -* @assertion: Since LineTerminator(LT) between Postfix Increment/Decrement Operator(I/DO) and operand is admitted, -* Additive/Substract Operator(A/SO) in combination with I/DO separated by LT or white spaces after automatic semicolon insertion gives valid result; -* @description: Try use Variable1 \n + \n ++ \n Variable2 construction; -*/ - -var x=0, y=0; -z= -x -+ -++ -y - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if ((z!==1)&&(y!==1)&&(x!==0)) { - $ERROR('#1: '); -} -// -////////////////////////////////////////////////////////////////////////////// - -z= -x -+ ++ -y - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if ((z!==2)&&(y!==2)&&(x!==0)) { - $ERROR(''); -} -// -////////////////////////////////////////////////////////////////////////////// - -z= -x -+ ++ -y - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if ((z!==3)&&(y!==3)&&(x!==0)) { - $ERROR(''); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A5.9_T1.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A5.9_T1.js deleted file mode 100644 index d24d4f54d..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A5.9_T1.js +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S7.9_A5.9_T1; -* @section: 7.9; -* @assertion: Additive/Substract Operator(A/SO) in combination with itself separated by LT or white spaces -* after automatic semicolon insertion gives valid result; -* @description: Try use Variable1 (different combinations of three +) Variable2 construction; -*/ - -var x=1, y=1; -z= -x -+ -+ -+ -y - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if ((z!==2)&&(y!==1)&&(x!==1)) { - $ERROR('#1: '); -} -// -////////////////////////////////////////////////////////////////////////////// - -z= -x + + + y - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if ((z!==2)&&(y!==1)&&(x!==1)) { - $ERROR(''); -} -// -////////////////////////////////////////////////////////////////////////////// - -z= -x -+ + -+ + -y - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if ((z!==2)&&(y!==1)&&(x!==1)) { - $ERROR(''); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A6.1_T1.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A6.1_T1.js deleted file mode 100644 index e30eac579..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A6.1_T1.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.9_A6.1_T1; - * @section: 7.9, 12.6.3; - * @assertion: Check For Statement for automatic semicolon insertion; - * @description: for( Empty two semicolons and \n); -*/ - -//CHECK#1 -for(;; -) { - break; -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A6.1_T10.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A6.1_T10.js deleted file mode 100644 index 8ef0f8d98..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A6.1_T10.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.9_A6.1_T10; - * @section: 7.9, 12.6.3; - * @assertion: Check For Statement for automatic semicolon insertion; - * @description: for (false \n two semicolons false \n); -*/ - -//CHECK#1 -for(false - ;;false -) { - break; -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A6.1_T11.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A6.1_T11.js deleted file mode 100644 index 284e7adb7..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A6.1_T11.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.9_A6.1_T11; - * @section: 7.9, 12.6.3; - * @assertion: Check For Statement for automatic semicolon insertion; - * @description: for (false \n semicolon \n semicolon \n); -*/ - -//CHECK#1 -for(false - ; - ; -) { - break; -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A6.1_T12.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A6.1_T12.js deleted file mode 100644 index 5829f314b..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A6.1_T12.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.9_A6.1_T12; - * @section: 7.9, 12.6.3; - * @assertion: Check For Statement for automatic semicolon insertion; - * @description: for (false \n semicolon false \n semicolon \n); -*/ - -//CHECK#1 -for(false - ;false - ; -) { - break; -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A6.1_T13.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A6.1_T13.js deleted file mode 100644 index 13a422e48..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A6.1_T13.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.9_A6.1_T13; - * @section: 7.9, 12.6.3; - * @assertion: Check For Statement for automatic semicolon insertion; - * @description: for (false \n semicolon false \n semicolon false \n); -*/ - -//CHECK#1 -for(false - ;false - ;false -) { - break; -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A6.1_T2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A6.1_T2.js deleted file mode 100644 index 8b187e35c..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A6.1_T2.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.9_A6.1_T2; - * @section: 7.9, 12.6.3; - * @assertion: Check For Statement for automatic semicolon insertion; - * @description: for (semicolon \n semicolon \n); -*/ - -//CHECK#1 -for(; - ; -) { - break; -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A6.1_T3.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A6.1_T3.js deleted file mode 100644 index ac0aa30ea..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A6.1_T3.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.9_A6.1_T3; - * @section: 7.9, 12.6.3; - * @assertion: Check For Statement for automatic semicolon insertion; - * @description: for (\n two semicolons \n); -*/ - -//CHECK#1 -for( - ;; -) { - break; -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A6.1_T4.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A6.1_T4.js deleted file mode 100644 index 2ad59ae6e..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A6.1_T4.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.9_A6.1_T4; - * @section: 7.9, 12.6.3; - * @assertion: Check For Statement for automatic semicolon insertion; - * @description: for( \n semicolon \n semicolon \n); -*/ - -//CHECK#1 -for( - ; - ; -) { - break; -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A6.1_T5.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A6.1_T5.js deleted file mode 100644 index 32b90fdfc..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A6.1_T5.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.9_A6.1_T5; - * @section: 7.9, 12.6.3; - * @assertion: Check For Statement for automatic semicolon insertion; - * @description: for ( \n semicolon \n\n semicolon \n); -*/ - -//CHECK#1 -for( - ; - - ; -) { - break; -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A6.1_T6.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A6.1_T6.js deleted file mode 100644 index d99eb8763..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A6.1_T6.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.9_A6.1_T6; - * @section: 7.9, 12.6.3; - * @assertion: Check For Statement for automatic semicolon insertion; - * @description: for(false semicolon false semicolon false \n); -*/ - -//CHECK#1 -for(false;false;false -) { - break; -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A6.1_T7.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A6.1_T7.js deleted file mode 100644 index a1a144053..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A6.1_T7.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.9_A6.1_T7; - * @section: 7.9, 12.6.3; - * @assertion: Check For Statement for automatic semicolon insertion; - * @description: for (false semicolon false \n semicolon \n); -*/ - -//CHECK#1 -for(false;false - ; -) { - break; -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A6.1_T8.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A6.1_T8.js deleted file mode 100644 index 1259702ef..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A6.1_T8.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.9_A6.1_T8; - * @section: 7.9, 12.6.3; - * @assertion: Check For Statement for automatic semicolon insertion; - * @description: for (false semicolon false \n semicolon false \n); -*/ - -//CHECK#1 -for(false;false - ;false -) { - break; -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A6.1_T9.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A6.1_T9.js deleted file mode 100644 index 177aa3e8b..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A6.1_T9.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.9_A6.1_T9; - * @section: 7.9, 12.6.3; - * @assertion: Check For Statement for automatic semicolon insertion; - * @description: for (false \n two semicolons \n); -*/ - -//CHECK#1 -for(false - ;; -) { - break; -} diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A7_T1.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A7_T1.js deleted file mode 100644 index e595bea5a..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A7_T1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.9_A7_T1; - * @section: 7.9, 12.2; - * @assertion: Check Var Statement for automatic semicolon insertion; - * @description: Checking if execution of "var x \n = 1" passes; - -*/ - -//CHECK#1 -var x -= 1 diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A7_T2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A7_T2.js deleted file mode 100644 index e86117ce5..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A7_T2.js +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.9_A7_T2; - * @section: 7.9, 12.2; - * @assertion: Check Var Statement for automatic semicolon insertion; - * @description: Checking if execution of "var x = \n 1" passes; -*/ - -//CHECK#1 -var x = -1 diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A7_T3.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A7_T3.js deleted file mode 100644 index 3392194bb..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A7_T3.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.9_A7_T3; - * @section: 7.9, 12.2; - * @assertion: Check Var Statement for automatic semicolon insertion; - * @description: Checking if execution of "var x \n x = 1" passes; -*/ - -//CHECK#1 -var x -x = 1 - diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A7_T4.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A7_T4.js deleted file mode 100644 index b70cb5896..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A7_T4.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.9_A7_T4; - * @section: 7.9, 12.2; - * @assertion: Check Var Statement for automatic semicolon insertion; - * @description: Checking if execution of "var \n x" passes; -*/ - -//CHECK#1 -var -x - diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A7_T5.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A7_T5.js deleted file mode 100644 index d187870b9..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A7_T5.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.9_A7_T5; - * @section: 7.9, 12.2; - * @assertion: Check Var Statement for automatic semicolon insertion; - * @description: Checking if execution of "var \n x \n = \n 1" passes; -*/ - -//CHECK#1 -var -x -= -1 - diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A7_T6.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A7_T6.js deleted file mode 100644 index 74cf74cb0..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A7_T6.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.9_A7_T6; - * @section: 7.9, 12.2; - * @assertion: Check Var Statement for automatic semicolon insertion; - * @description: Checking if execution of "var x, \n y" passes; -*/ - -//CHECK#1 -var x, -y - diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A7_T8.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A7_T8.js deleted file mode 100644 index 475120f19..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A7_T8.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.9_A7_T8; - * @section: 7.9, 12.2; - * @assertion: Check Var Statement for automatic semicolon insertion; - * @description: Checking if execution of "var x \n ,y" passes; -*/ - -//CHECK#1 -var x -,y - diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A7_T9.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A7_T9.js deleted file mode 100644 index a830cf4c6..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A7_T9.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.9_A7_T9; - * @section: 7.9, 12.2; - * @assertion: Check Var Statement for automatic semicolon insertion; - * @description: Checking if execution of "var x \n ,y = 1" passes; -*/ - -//CHECK#1 -var -x -,y = 1 - diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A8_T1.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A8_T1.js deleted file mode 100644 index 0ebebe8f4..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A8_T1.js +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.9_A8_T1; - * @section: 7.9, 12.4; - * @assertion: Check Empty Statement for automatic semicolon insertion; - * @description: Checking if execution of one semicolon passes; -*/ - -//CHECK#1 -; diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A8_T2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A8_T2.js deleted file mode 100644 index 130d7ff01..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A8_T2.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.9_A8_T2; - * @section: 7.9, 12.4; - * @assertion: Check Empty Statement for automatic semicolon insertion; - * @description: Checking if execution of some semicolons with LineTerminators pases; -*/ - -//CHECK#1 -; -; -; -; diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A8_T3.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A8_T3.js deleted file mode 100644 index 65bacf2fe..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A8_T3.js +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.9_A8_T3; - * @section: 7.9, 12.4; - * @assertion: Check Empty Statement for automatic semicolon insertion; - * @description: Checking if execution of some semicolons without LineTerminators passes; -*/ - -//CHECK#1 -;;;; diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A8_T4.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A8_T4.js deleted file mode 100644 index 0503881e1..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A8_T4.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.9_A8_T4; - * @section: 7.9, 12.4; - * @assertion: Check Empty Statement for automatic semicolon insertion; - * @description: Checking if execution of some semicolons with LineTerminators and numbers passes; -*/ - -//CHECK#1 -;1; -;1 -;1; -;1 diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A8_T5.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A8_T5.js deleted file mode 100644 index bec378aa8..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A8_T5.js +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.9_A8_T5; - * @section: 7.9, 12.4; - * @assertion: Check Empty Statement for automatic semicolon insertion; - * @description: Checking if execution of some semicolons without LineTerminators but with numbers passes; -*/ - -//CHECK#1 -;;1;;1;;1 diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A9_T1.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A9_T1.js deleted file mode 100644 index 204a4fbb0..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A9_T1.js +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.9_A9_T1; - * @section: 7.9, 12.6.1; - * @assertion: Check Do-While Statement for automatic semicolon insertion; - * @description: Execute do { \n }while(false); -*/ - -//CHECK#1 -do { -} while (false) diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A9_T2.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A9_T2.js deleted file mode 100644 index 95e78a098..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A9_T2.js +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.9_A9_T2; - * @section: 7.9, 12.6.1; - * @assertion: Check Do-While Statement for automatic semicolon insertion; - * @description: Execute do; while(false) \n true; -*/ - -//CHECK#1 -do ; while (false) -true diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A9_T3.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A9_T3.js deleted file mode 100644 index e625f5b10..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A9_T3.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.9_A9_T3; - * @section: 7.9, 12.6.1; - * @assertion: Check Do-While Statement for automatic semicolon insertion; - * @description: Execute do { \n ; \n }while(false) true; -*/ - -//CHECK#1 -do { - ; -} while (false) true diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A9_T4.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A9_T4.js deleted file mode 100644 index c5e538235..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A9_T4.js +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.9_A9_T4; - * @section: 7.9, 12.6.1; - * @assertion: Check Do-While Statement for automatic semicolon insertion; - * @description: Execute do ; while \n (false) true; -*/ - -//CHECK#1 -do ; while -(false) true diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A9_T5.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A9_T5.js deleted file mode 100644 index 0243affa1..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A9_T5.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.9_A9_T5; - * @section: 7.9, 12.6.1; - * @assertion: Check Do-While Statement for automatic semicolon insertion; - * @description: Execute do { \n ; \n }while((false) \n ); -*/ - -//CHECK#1 -do { - ; -} while ((false) -) diff --git a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A9_T9.js b/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A9_T9.js deleted file mode 100644 index 794d5bd6a..000000000 --- a/tests/ES3/Conformance/07_Lexical_Conventions/7.9_Automatic_Semicolon_Insertion/S7.9_A9_T9.js +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.9_A9_T9; - * @section: 7.9, 12.6.1; - * @assertion: Check Do-While Statement for automatic semicolon insertion; - * @description: Execute do {} \n while(false); -*/ - -//CHECK#1 -do {} -while (false) diff --git a/tests/ES3/Conformance/08_Types/8.1_The_Undefined_Type/S8.1_A1_T1.js b/tests/ES3/Conformance/08_Types/8.1_The_Undefined_Type/S8.1_A1_T1.js deleted file mode 100644 index a6efca10e..000000000 --- a/tests/ES3/Conformance/08_Types/8.1_The_Undefined_Type/S8.1_A1_T1.js +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S8.1_A1_T1; - * @section: 8.1; - * @assertion: The Undefined type has one value, called undefined; - * @description: Checking if execution of "x = undefined" passes; -*/ - -// CHECK#1 -x = undefined; diff --git a/tests/ES3/Conformance/08_Types/8.1_The_Undefined_Type/S8.1_A1_T2.js b/tests/ES3/Conformance/08_Types/8.1_The_Undefined_Type/S8.1_A1_T2.js deleted file mode 100644 index b3c2e0859..000000000 --- a/tests/ES3/Conformance/08_Types/8.1_The_Undefined_Type/S8.1_A1_T2.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S8.1_A1_T2; - * @section: 8.1; - * @assertion: The Undefined type has one value, called undefined; - * @description: Check typeof(undefined) and typeof(void 0); -*/ - -// CHECK#1 -if (!(typeof(undefined) === "undefined")) { - ERROR('#1: typeof(undefined) === "undefined". Actual: ' + (typeof(undefined))); -} - -// CHECK#2 -if (!(typeof(void 0) === "undefined")) { - ERROR('#2: typeof(void 0) === "undefined". Actual: ' + (typeof(void 0))); -} - -// CHECK#3 -if (!(undefined === void 0)) { - ERROR('#3: undefined === void 0'); -} diff --git a/tests/ES3/Conformance/08_Types/8.1_The_Undefined_Type/S8.1_A2_T1.js b/tests/ES3/Conformance/08_Types/8.1_The_Undefined_Type/S8.1_A2_T1.js deleted file mode 100644 index 0a99c4117..000000000 --- a/tests/ES3/Conformance/08_Types/8.1_The_Undefined_Type/S8.1_A2_T1.js +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S8.1_A2_T1; - * @section: 8.1; - * @assertion: Any variable that has not been assigned a value has the value undefined; - * @description: Check that var x have value and type undefined; -*/ - -var x; - -/////////////////////////////////////////////////////////////////// -// CHECK#1 -if (!(x === undefined)) { - $ERROR('#1: var x; x === undefined. Actual: ' + (x)); -} -// -/////////////////////////////////////////////////////////////////// - -/////////////////////////////////////////////////////////////////// -// CHECK#2 -if (!(typeof(x) === "undefined")) { - $ERROR('#2: var x; typeof(x) === "undefined". Actual: ' + (typeof(x))); -} -// -/////////////////////////////////////////////////////////////////// - -/////////////////////////////////////////////////////////////////// -// CHECK#3 -if (!(x === void 0)) { - $ERROR('#3: var x; x === void 0. Actual: ' + (x)); -} -// -/////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/08_Types/8.1_The_Undefined_Type/S8.1_A2_T2.js b/tests/ES3/Conformance/08_Types/8.1_The_Undefined_Type/S8.1_A2_T2.js deleted file mode 100644 index ee8d56ad0..000000000 --- a/tests/ES3/Conformance/08_Types/8.1_The_Undefined_Type/S8.1_A2_T2.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S8.1_A2_T2; - * @section: 8.1; - * @assertion: Any variable that has not been assigned a value has the value undefined; - * @description: Function return undefined; -*/ - -// CHECK#1 -function test1(x) { - return x; -} - -if (!(test1() === void 0)) { - $ERROR('#1: function test1(x){return x} test1() === void 0. Actual: ' + (test1())); -} - -// CHECK#2 -function test2() { -} - -if (!(test2() === void 0)) { - $ERROR('#2: function test2(){} test2() === void 0. Actual: ' + (test2())); -} diff --git a/tests/ES3/Conformance/08_Types/8.1_The_Undefined_Type/S8.1_A3.js b/tests/ES3/Conformance/08_Types/8.1_The_Undefined_Type/S8.1_A3.js deleted file mode 100644 index 13f9f45fd..000000000 --- a/tests/ES3/Conformance/08_Types/8.1_The_Undefined_Type/S8.1_A3.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S8.1_A3; - * @section: 8.1; - * @assertion: undefined is not a keyword or reserved word; - * @description: Checking if execution of "undefined=1" passes; -*/ - -////////////////////////////////////////////////////////// -// CHECK#1 -undefined=1; -// -////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/08_Types/8.1_The_Undefined_Type/S8.1_A4.js b/tests/ES3/Conformance/08_Types/8.1_The_Undefined_Type/S8.1_A4.js deleted file mode 100644 index 11ea38cf4..000000000 --- a/tests/ES3/Conformance/08_Types/8.1_The_Undefined_Type/S8.1_A4.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S8.1_A4; - * @section: 8.1; - * @assertion: If property of object not exist, return undefined; - * @description: Check value of not existed property; -*/ - -// CHECK#1 -if ((new Object()).newProperty !== undefined) { - $ERROR('#1: (new Object()).newProperty === undefined. Actual: ' + ((new Object()).newProperty)); -} - diff --git a/tests/ES3/Conformance/08_Types/8.1_The_Undefined_Type/S8.1_A5.js b/tests/ES3/Conformance/08_Types/8.1_The_Undefined_Type/S8.1_A5.js deleted file mode 100644 index b877f1fa8..000000000 --- a/tests/ES3/Conformance/08_Types/8.1_The_Undefined_Type/S8.1_A5.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S8.1_A5; - * @section: 8.1; - * @assertion: Function argument that isn't provided has a value of undefined; - * @description: Call function without provided argument; -*/ - -/////////////////////////////////////// -// -function test(arg) { -// Check and make sure that arg is not undefined - if (typeof(arg) !== "undefined") { - $ERROR('#1: Function argument that isn\'t provided has a value of undefined. Actual: ' + (typeof(arg))); - } -} - -test(); -// -//////////////////////////////////////// diff --git a/tests/ES3/Conformance/08_Types/8.2_The_Null_Type/S8.2_A1_T1.js b/tests/ES3/Conformance/08_Types/8.2_The_Null_Type/S8.2_A1_T1.js deleted file mode 100644 index 29dd3c6fd..000000000 --- a/tests/ES3/Conformance/08_Types/8.2_The_Null_Type/S8.2_A1_T1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S8.2_A1_T1; - * @section: 8.2; - * @assertion: The Null Type has one value, called null; - * @description: Checking if execution of "var x = null" passes; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -var x = null; -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/08_Types/8.2_The_Null_Type/S8.2_A1_T2.js b/tests/ES3/Conformance/08_Types/8.2_The_Null_Type/S8.2_A1_T2.js deleted file mode 100644 index daa363f0f..000000000 --- a/tests/ES3/Conformance/08_Types/8.2_The_Null_Type/S8.2_A1_T2.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S8.2_A1_T2; - * @section: 8.2; - * @assertion: The Null Type has one value, called null; - * @description: Checking if execution of "x = null" passes; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -x = null; -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/08_Types/8.2_The_Null_Type/S8.2_A2.js b/tests/ES3/Conformance/08_Types/8.2_The_Null_Type/S8.2_A2.js deleted file mode 100644 index 0a6020d29..000000000 --- a/tests/ES3/Conformance/08_Types/8.2_The_Null_Type/S8.2_A2.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S8.2_A2; - * @section: 8.2; - * @assertion: The null is resrved word; - * @description: Checking if execution of "var null" fails; - * @negative; -*/ - -var null; - - diff --git a/tests/ES3/Conformance/08_Types/8.2_The_Null_Type/S8.2_A3.js b/tests/ES3/Conformance/08_Types/8.2_The_Null_Type/S8.2_A3.js deleted file mode 100644 index 84edee3ca..000000000 --- a/tests/ES3/Conformance/08_Types/8.2_The_Null_Type/S8.2_A3.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S8.2_A3; - * @section: 8.2, 11.4.3; - * @assertion: For the keyword null the typeof operator returns the "object" - * See also - * http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Operators:Special_Operators:typeof_Operator - * and - * http://bugs.ecmascript.org/ticket/250 - * for example; - * @description: Check type of null; -*/ - -////////////////////////////////////////////////////////////// -// CHECK#1 -if (typeof(null) !== "object") { - $ERROR('#1: typeof null === "object". Actual: ' + (typeof null)); -} -// -///////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/08_Types/8.3_The_Boolean_Type/S8.3_A1_T1.js b/tests/ES3/Conformance/08_Types/8.3_The_Boolean_Type/S8.3_A1_T1.js deleted file mode 100644 index 56ae6c245..000000000 --- a/tests/ES3/Conformance/08_Types/8.3_The_Boolean_Type/S8.3_A1_T1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S8.3_A1_T1; - * @section: 8.3; - * @assertion: The Boolean type have two values, called true and false; - * @description: Assign true and false to variables; -*/ - -//////////////////////////////////////////////////////////////////////// -// CHECK#1 -x = true; -var y = false; -// -//////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/08_Types/8.3_The_Boolean_Type/S8.3_A1_T2.js b/tests/ES3/Conformance/08_Types/8.3_The_Boolean_Type/S8.3_A1_T2.js deleted file mode 100644 index 264fa3471..000000000 --- a/tests/ES3/Conformance/08_Types/8.3_The_Boolean_Type/S8.3_A1_T2.js +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S8.3_A1_T2; - * @section: 8.3; - * @assertion: The Boolean type have two values, called true and false; - * @description: Check type of true/false and it`s equality; -*/ - -////////////////////////////////////////////////////////////////////// -// CHECK#1 -if (typeof(true) !== "boolean") { - $ERROR('#1: typeof(true) === "boolean"'); -} -// -////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////// -// CHECK#2 -if (typeof(true) != "boolean") { - $ERROR('#2: typeof(true) == "boolean"'); -} -// -////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////// -// CHECK#3 -if (typeof(false) !== "boolean") { - $ERROR('#3: typeof(false) === "boolean"'); -} -// -////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////// -// CHECK#4 -if (typeof(false) != "boolean") { - $ERROR('#4: typeof(false) == "boolean"'); -} -// -////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////// -// CHECK#5 -if (true === false) { - $ERROR('#5: true !== false'); -} -// -////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////// -// CHECK#6 -if (true == false) { - $ERROR('#6: true != false'); -} -// -////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////// -// CHECK#7 -if (false === true) { - $ERROR('#7: false !== true'); -} -// -////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////// -// CHECK#8 -if (false == true) { - $ERROR('#8: false != true'); -} -// -////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/08_Types/8.3_The_Boolean_Type/S8.3_A2.1.js b/tests/ES3/Conformance/08_Types/8.3_The_Boolean_Type/S8.3_A2.1.js deleted file mode 100644 index a65c209fa..000000000 --- a/tests/ES3/Conformance/08_Types/8.3_The_Boolean_Type/S8.3_A2.1.js +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S8.3_A2.1; - * @section: 8.3; - * @assertion: The true is reserved word; - * @description: Checking if execution of "true=1" fails; - * @negative -*/ - -true = 1; diff --git a/tests/ES3/Conformance/08_Types/8.3_The_Boolean_Type/S8.3_A2.2.js b/tests/ES3/Conformance/08_Types/8.3_The_Boolean_Type/S8.3_A2.2.js deleted file mode 100644 index b258b6572..000000000 --- a/tests/ES3/Conformance/08_Types/8.3_The_Boolean_Type/S8.3_A2.2.js +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S8.3_A2.2; - * @section: 8.3; - * @assertion: The false is reserved word; - * @description: Checking if execution of "false=0" fails; - * @negative -*/ - -false = 0; diff --git a/tests/ES3/Conformance/08_Types/8.3_The_Boolean_Type/S8.3_A3.js b/tests/ES3/Conformance/08_Types/8.3_The_Boolean_Type/S8.3_A3.js deleted file mode 100644 index e0c4c2bff..000000000 --- a/tests/ES3/Conformance/08_Types/8.3_The_Boolean_Type/S8.3_A3.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S8.3_A3; -* @section: 8.3; -* @assertion: Applaing negation to boolean works well; -* @description: Check not false equals true, not true equals false; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!false !== true){ - $ERROR('#1: !false === true'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (!false != true){ - $ERROR('#2: !false == true'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (!true !== false){ - $ERROR('#3: !true === false'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (!true != false){ - $ERROR('#4: !true == false'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A1.js b/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A1.js deleted file mode 100644 index 14e492061..000000000 --- a/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A1.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S8.4_A1; - * @section: 8.4, 7.8.4; - * @assertion: Any variable that has been assigned with string literal has the type string; - * @description: Check type of variable that has been assigned with string literal; -*/ - -///////////////////////////////////////////////////////// -// CHECK#1 -var str="abcdfg"; -if (typeof(str)!=="string"){ - $ERROR('#1: var str="abcdfg"; typeof(str) === "string". Actual: ' + (typeof(str))); -} -// -//////////////////////////////////////////////////////// - -///////////////////////////////////////////////////////// -// CHECK#2 -var str2='qwerty'; -if (typeof(str2)!=="string"){ - $ERROR('#2: var str2=\'qwerty\'; typeof(str) === "string". Actual: ' + (typeof(str2))); -} -// -//////////////////////////////////////////////////////// - -///////////////////////////////////////////////////////// -// CHECK#3 -var __str='\u0042\u0043\u0044\u0045\u0046\u0047\u0048'; -if (typeof(__str)!=="string"){ - $ERROR('#3: var __str=\'\\u0042\\u0043\\u0044\\u0045\\u0046\\u0047\\u0048\'; typeof(__str) === "string". Actual: ' + (typeof(__str))); -} -// -//////////////////////////////////////////////////////// - -///////////////////////////////////////////////////////// -// CHECK#4 -var str__="\u0042\u0043\u0044\u0045\u0046\u0047\u0048"; -if (typeof(str__)!=="string"){ - $ERROR('#4: var str__="abcdfg"; typeof(str__) === "string". Actual: ' + (typeof(str__))); -} -// -//////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A10.js b/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A10.js deleted file mode 100644 index 9febe9981..000000000 --- a/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A10.js +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S8.4_A10; -* @section: 8.4, 7.8.4; -* @assertion: Both unicode and ascii chars are allowed; -* @description: Create string using both unicode and ascii chars; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -var __str = "\u0041A\u0042B\u0043C"; -if (__str !== 'AABBCC'){ - $ERROR('#1: var __str = "\\u0041A\\u0042B\\u0043C"; __str === \'AABBCC\'. Actual: ' + (__str)); -}; -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -var __str__ = "\u0041\u0042\u0043"+'ABC'; -if (__str__ !== 'ABCABC'){ - $ERROR('#2: var __str__ = "\\u0041\\u0042\\u0043"+\'ABC\'; __str__ === \'ABCABC\'. Actual: ' + (__str__)); -}; -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -var str__ = "ABC"+'\u0041\u0042\u0043'; -if (str__ !== "ABCABC"){ - $ERROR('#2: var str__ = "ABC"+\'\\u0041\\u0042\\u0043\'; str__ === "ABCABC". Actual: ' + (str__)); -}; -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A11.js b/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A11.js deleted file mode 100644 index 676653dd0..000000000 --- a/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A11.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S8.4_A11; -* @section: 8.4, 7.8.4; -* @assertion: Presence of reserved words in string literal are allowed; -* @description: Create string variable, thet include all reserved words; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -var __delete=" break else new var case finally return void catch for switch while continue function this with default if throw delete in try do instanceof typeof "; -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A12.js b/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A12.js deleted file mode 100644 index 5d44716b7..000000000 --- a/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A12.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S8.4_A12; -* @section: 8.4, 7.8.4; -* @assertion: Assignment to string literal calls String constructor; -* @description: Check constructor of simple assigned variable; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -var str = "rock'n'roll"; -if (str.constructor !== String){ - $ERROR('#1: var str = "rock\'n\'roll"; str.constructor === String. Actual: ' + (str.constructor)); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A13_T1.js b/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A13_T1.js deleted file mode 100644 index 381b55963..000000000 --- a/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A13_T1.js +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S8.4_A13_T1; -* @section: 8.4; -* @assertion: When appears not closed single-quote program failes; -* @description: Try to create variable using 3 single-quote; -* @negative; -*/ - -var str = '''; diff --git a/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A13_T2.js b/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A13_T2.js deleted file mode 100644 index 5a76e7cdd..000000000 --- a/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A13_T2.js +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S8.4_A13_T2; -* @section: 8.4; -* @assertion: When appears not closed single-quote program failes; -* @description: Try to create variable using 1 single-quote; -* @negative; -*/ - -var str = '; diff --git a/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A13_T3.js b/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A13_T3.js deleted file mode 100644 index f812c606c..000000000 --- a/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A13_T3.js +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S8.4_A13_T3; -* @section: 8.4; -* @assertion: When appears not closed single-quote program failes; -* @description: Try to create variable using 4 single-quote; -* @negative; -*/ - -var str = ''''; diff --git a/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A14_T1.js b/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A14_T1.js deleted file mode 100644 index 38e863df2..000000000 --- a/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A14_T1.js +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S8.4_A14_T1; -* @section: 8.4; -* @assertion: When appears not closed double-quote program failes; -* @description: Try to create variable using 1 double-quote; -* @negative; -*/ - -var str = "; diff --git a/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A14_T2.js b/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A14_T2.js deleted file mode 100644 index ac5eb0d5b..000000000 --- a/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A14_T2.js +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S8.4_A14_T2; -* @section: 8.4; -* @assertion: When appears not closed double-quote program failes; -* @description: Try to create variable using 3 double-quote; -* @negative; -*/ - -var str = """; diff --git a/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A14_T3.js b/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A14_T3.js deleted file mode 100644 index 624f9af0d..000000000 --- a/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A14_T3.js +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S8.4_A14_T3; -* @section: 8.4; -* @assertion: When appears not closed double-quote program failes; -* @description: Try to create variable using 4 double-quote; -* @negative; -*/ - -var str = """"; diff --git a/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A2.js b/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A2.js deleted file mode 100644 index 86dd73d47..000000000 --- a/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A2.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S8.4_A2; - * @section: 8.4, 7.8.4; - * @assertion: Empty string has type string; - * @description: Create empty string and check it type; -*/ - -///////////////////////////////////////////////////////// -// CHECK#1 -var str = ''; -if (typeof(str) !== 'string'){ - $ERROR('#1: var str = \'\'; typeof(str) === \'string\'. Actual: ' + (typeof(str))); -} -// -//////////////////////////////////////////////////////// - -///////////////////////////////////////////////////////// -// CHECK#2 -var str = ""; -if (typeof(str) !== "string"){ - $ERROR('#2: var str = ""; typeof(str) === "string". Actual: ' + (str)); -} -// -//////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A3.js b/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A3.js deleted file mode 100644 index e8640efac..000000000 --- a/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A3.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S8.4_A3; -* @section: 8.4; -* @assertion: String type has a length property; -* @description: Try read length property of string variable; -*/ - -var __str = "ABCDEFGH"; -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__str.length !== 8) { - $ERROR('#1: var __str = "ABCDEFGH"; __str.length === 8. Actual: ' + (__str.length)); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A4.js b/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A4.js deleted file mode 100644 index a4097254a..000000000 --- a/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A4.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S8.4_A4; -* @section: 8.4; -* @assertion: Empty string variable has a length property; -* @description: Try read length property of empty string variable; -*/ - -var __str = ""; -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__str.length !== 0) { - $ERROR('#1: var __str = ""; __str.length === 0. Actual: ' + (__str)); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A5.js b/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A5.js deleted file mode 100644 index a8e3f256e..000000000 --- a/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A5.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S8.4_A5; - * @section: 8.4, 7.8.4; - * @assertion: Zero "\0" not terminates the string(C string); - * @description: Insert "\0" into string; -*/ - -// CHECK#1 -if ("x\0y" === "x") { - $ERROR('#1: "x\\0y" !== "x"'); -} - -// CHECK#2 -if (!(("x\0a" < "x\0b") && ("x\0b" < "x\0c"))) { - $ERROR('#2: (("x\\0a" < "x\\0b") && ("x\\0b" < "x\\0c")) === true'); -} diff --git a/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A6.1.js b/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A6.1.js deleted file mode 100644 index 50cf9c68c..000000000 --- a/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A6.1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S8.4_A6.1; - * @section: 8.4, 7.8.4; - * @assertion: Large string 4096 bytes; - * @description: Assign variable by large string; -*/ - -//////////////////////////////////////////////////// -// Check#1 -var largeStr='Standard ECMA-2623r d Edition - December 1999S t a n d a r d i z i n g Informat i o n and Commu n i c a t i o n SystemsPhone: +41 22 849.60.00 - Fax: +41 22 849.60.01 - URL: ht tp: / /www.ecma.ch - Internet: helpdesk@ecma.chECMAScript LanguageSpecificationStandard ECMA-2623r d Edition - December 1999S t a n d a r d i z i n g Informat i o n and Commu n i c a t i o n SystemsPhone: +41 22 849.60.00 - Fax: +41 22 849.60.01 - URL: ht tp: / /www.ecma.ch - Internet: helpdesk@ecma.chMB Ecma-262.doc 08-04-02 16,53ECMAScript LanguageSpecificationBrief HistoryThis ECMA Standard is based on several originating technologies, the most well known being JavaScript (Netscape)and JScript (Microsoft). The language was invented by Brendan Eich at Netscape and first appeared in thatcompan Navigator 2.0 browser. It has appeared in all subsequent browsers from Netscape and in all browsers fromMicrosoft starting with Internet Explorer 3.0.The development of this Standard started in November 1996. The first edition of this ECMA Standard was adopted bythe ECMA General Assembly of June 1997.That ECMA Standard was submitted to ISO/IEC JTC 1 for adoption under the fast-track procedure, and approved asinternational standard ISO/IEC 16262, in April 1998. The ECMA General Assembly of June 1998 approved thesecond edition of ECMA-262 to keep it fully aligned with ISO/IEC 16262. Changes between the first and the secondedition are editorial in nature.The current document defines the third edition of the Standard and includes powerful regular expressions, betterstring handling, new control statements, try/catch exception handling, tighter definition of errors, formatting fornumeric output and minor changes in anticipation of forthcoming internationalisation facilities and future languagegrowth.Work on the language is not complete. The technical committee is working on significant enhancements, includingmechanisms for scripts to be created and used across the Internet, and tighter coordination with other standards bodiessuch as groups within the World Wide Web Consortium and the Wireless Application Protocol Forum.This Standard has been adopted as 3rd Edition of ECMA-262 by the ECMA General Assembly in December, 1999.- i -Table of contents1 Scope 12 Conformance 13 References 14 Overview 1 4.1 Web Scripting 2 4.2 Language Overview 2 4.2.1 Objects 3 4.3 Definitions 4 4.3.1 Type 4 4.3.2 Primitive Value 4 4.3.3 Object 4 4.3.4 Constructor 4 4.3.5 Prototype 4 4.3.6 Native Object 4 4.3.7 Built-in Object 4 4.3.8 Host Object 4 4.3.9 Undefined Value 4 4.3.10 Undefined Type 4 4.3.11 Null Value 4 4.3.12 Null Type 4 4.3.13 Boolean Value 4 4.3.14 Boolean Type 4 4.3.15 Boolean Object 5 4.3.16 String Value 5 4.3.17 String Type 5 4.3.18 String Object 5 4.3.19 Number Value 5 4.3.20 Number Type 5 4.3.21 Number Object 5 4.3.22 Infinity 5 4.3.23 NaN 5 5 Notational Conventions 6 5.1 Syntactic and Lexical Grammars 6 5.1.1 Context-Free Grammars 6 5.1.2 The Lexical and RegExp Grammars 6 5.1.3 The Numeric String Grammar 6 5.1.4 The Syntactic Grammar 6 5.1.5 Grammar Notation 7 5.2 Algorithm Conventions 9 6. Source Text 10 7 Lexical Conventions 11 7.1 Unicode Format-Control Characters 11 7.2 White Space 11 7.3 Line Terminators 12 7.4 Comments 12 - ii - 7.5 Tokens 13 7.5.1 Reserved Words 13 7.5.2 Keywords 13 7.5.3 Future Reserved Words 14 7.6 Identifiers 14 7.7 Punctuators 15 7.8 Literals 16 7.8.1 Null Literals 16 7.8.2 Boolean Literals 16 7.8.3 Numeric Literals 16 7.8.4 String Literals 18 7.8.5 Regular Expression Literals 20 7.9 Automatic Semicolon Insertion 21 7.9.1 Rules of Automatic Semicolon Insertion 21 7.9.2 Examples of Automatic Semicolon Insertion 22 8 Types 24 8.1 The Undefined Type 24 8.2 The Null Type 24 8.3 The Boolean Type 24 8.4 The String Type 24 8.5 The Number Type 24 8.6 The Object Type 25 8.6.1 Property Attributes 25 8.6.2 Internal Properties and Methods 26 8.7 The Reference Type 29 8.7.1 GetValue (V) 29 8.7.2 PutValue (V, W) 29 8.8 The List Type 30 8.9 The Completion Type 30 9 Type Conversion 30 9.1 ToPrimitive 30 9.2 ToBoolean 30 9.3 ToNumber 31 9.3.1 ToNumber Ap'; -if(largeStr !== 'Standard ECMA-2623r d Edition - December 1999S t a n d a r d i z i n g Informat i o n and Commu n i c a t i o n SystemsPhone: +41 22 849.60.00 - Fax: +41 22 849.60.01 - URL: ht tp: / /www.ecma.ch - Internet: helpdesk@ecma.chECMAScript LanguageSpecificationStandard ECMA-2623r d Edition - December 1999S t a n d a r d i z i n g Informat i o n and Commu n i c a t i o n SystemsPhone: +41 22 849.60.00 - Fax: +41 22 849.60.01 - URL: ht tp: / /www.ecma.ch - Internet: helpdesk@ecma.chMB Ecma-262.doc 08-04-02 16,53ECMAScript LanguageSpecificationBrief HistoryThis ECMA Standard is based on several originating technologies, the most well known being JavaScript (Netscape)and JScript (Microsoft). The language was invented by Brendan Eich at Netscape and first appeared in thatcompan Navigator 2.0 browser. It has appeared in all subsequent browsers from Netscape and in all browsers fromMicrosoft starting with Internet Explorer 3.0.The development of this Standard started in November 1996. The first edition of this ECMA Standard was adopted bythe ECMA General Assembly of June 1997.That ECMA Standard was submitted to ISO/IEC JTC 1 for adoption under the fast-track procedure, and approved asinternational standard ISO/IEC 16262, in April 1998. The ECMA General Assembly of June 1998 approved thesecond edition of ECMA-262 to keep it fully aligned with ISO/IEC 16262. Changes between the first and the secondedition are editorial in nature.The current document defines the third edition of the Standard and includes powerful regular expressions, betterstring handling, new control statements, try/catch exception handling, tighter definition of errors, formatting fornumeric output and minor changes in anticipation of forthcoming internationalisation facilities and future languagegrowth.Work on the language is not complete. The technical committee is working on significant enhancements, includingmechanisms for scripts to be created and used across the Internet, and tighter coordination with other standards bodiessuch as groups within the World Wide Web Consortium and the Wireless Application Protocol Forum.This Standard has been adopted as 3rd Edition of ECMA-262 by the ECMA General Assembly in December, 1999.- i -Table of contents1 Scope 12 Conformance 13 References 14 Overview 1 4.1 Web Scripting 2 4.2 Language Overview 2 4.2.1 Objects 3 4.3 Definitions 4 4.3.1 Type 4 4.3.2 Primitive Value 4 4.3.3 Object 4 4.3.4 Constructor 4 4.3.5 Prototype 4 4.3.6 Native Object 4 4.3.7 Built-in Object 4 4.3.8 Host Object 4 4.3.9 Undefined Value 4 4.3.10 Undefined Type 4 4.3.11 Null Value 4 4.3.12 Null Type 4 4.3.13 Boolean Value 4 4.3.14 Boolean Type 4 4.3.15 Boolean Object 5 4.3.16 String Value 5 4.3.17 String Type 5 4.3.18 String Object 5 4.3.19 Number Value 5 4.3.20 Number Type 5 4.3.21 Number Object 5 4.3.22 Infinity 5 4.3.23 NaN 5 5 Notational Conventions 6 5.1 Syntactic and Lexical Grammars 6 5.1.1 Context-Free Grammars 6 5.1.2 The Lexical and RegExp Grammars 6 5.1.3 The Numeric String Grammar 6 5.1.4 The Syntactic Grammar 6 5.1.5 Grammar Notation 7 5.2 Algorithm Conventions 9 6. Source Text 10 7 Lexical Conventions 11 7.1 Unicode Format-Control Characters 11 7.2 White Space 11 7.3 Line Terminators 12 7.4 Comments 12 - ii - 7.5 Tokens 13 7.5.1 Reserved Words 13 7.5.2 Keywords 13 7.5.3 Future Reserved Words 14 7.6 Identifiers 14 7.7 Punctuators 15 7.8 Literals 16 7.8.1 Null Literals 16 7.8.2 Boolean Literals 16 7.8.3 Numeric Literals 16 7.8.4 String Literals 18 7.8.5 Regular Expression Literals 20 7.9 Automatic Semicolon Insertion 21 7.9.1 Rules of Automatic Semicolon Insertion 21 7.9.2 Examples of Automatic Semicolon Insertion 22 8 Types 24 8.1 The Undefined Type 24 8.2 The Null Type 24 8.3 The Boolean Type 24 8.4 The String Type 24 8.5 The Number Type 24 8.6 The Object Type 25 8.6.1 Property Attributes 25 8.6.2 Internal Properties and Methods 26 8.7 The Reference Type 29 8.7.1 GetValue (V) 29 8.7.2 PutValue (V, W) 29 8.8 The List Type 30 8.9 The Completion Type 30 9 Type Conversion 30 9.1 ToPrimitive 30 9.2 ToBoolean 30 9.3 ToNumber 31 9.3.1 ToNumber Ap'){ - $ERROR('#1: Large string 4096 bytes'); -} -// -//////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A6.2.js b/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A6.2.js deleted file mode 100644 index 0ab78538d..000000000 --- a/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A6.2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S8.4_A6.2; - * @section: 8.4, 7.8.4; - * @assertion: Large string 8192 bytes; - * @description: Assign variable by large string; -*/ - -//////////////////////////////////////////////////// -// Check#2 -var largeStr='Standard ECMA-2623r d Edition - December 1999S t a n d a r d i z i n g Informat i o n and Commu n i c a t i o n SystemsPhone: +41 22 849.60.00 - Fax: +41 22 849.60.01 - URL: ht tp: / /www.ecma.ch - Internet: helpdesk@ecma.chECMAScript LanguageSpecificationStandard ECMA-2623r d Edition - December 1999S t a n d a r d i z i n g Informat i o n and Commu n i c a t i o n SystemsPhone: +41 22 849.60.00 - Fax: +41 22 849.60.01 - URL: ht tp: / /www.ecma.ch - Internet: helpdesk@ecma.chMB Ecma-262.doc 08-04-02 16,53ECMAScript LanguageSpecificationBrief HistoryThis ECMA Standard is based on several originating technologies, the most well known being JavaScript (Netscape)and JScript (Microsoft). The language was invented by Brendan Eich at Netscape and first appeared in thatcompans Navigator 2.0 browser. It has appeared in all subsequent browsers from Netscape and in all browsers fromMicrosoft starting with Internet Explorer 3.0.The development of this Standard started in November 1996. The first edition of this ECMA Standard was adopted bythe ECMA General Assembly of June 1997.That ECMA Standard was submitted to ISO/IEC JTC 1 for adoption under the fast-track procedure, and approved asinternational standard ISO/IEC 16262, in April 1998. The ECMA General Assembly of June 1998 approved thesecond edition of ECMA-262 to keep it fully aligned with ISO/IEC 16262. Changes between the first and the secondedition are editorial in nature.The current document defines the third edition of the Standard and includes powerful regular expressions, betterstring handling, new control statements, try/catch exception handling, tighter definition of errors, formatting fornumeric output and minor changes in anticipation of forthcoming internationalisation facilities and future languagegrowth.Work on the language is not complete. The technical committee is working on significant enhancements, includingmechanisms for scripts to be created and used across the Internet, and tighter coordination with other standards bodiessuch as groups within the World Wide Web Consortium and the Wireless Application Protocol Forum.This Standard has been adopted as 3rd Edition of ECMA-262 by the ECMA General Assembly in December, 1999.- i -Table of contents1 Scope 12 Conformance 13 References 14 Overview 1 4.1 Web Scripting 2 4.2 Language Overview 2 4.2.1 Objects 3 4.3 Definitions 4 4.3.1 Type 4 4.3.2 Primitive Value 4 4.3.3 Object 4 4.3.4 Constructor 4 4.3.5 Prototype 4 4.3.6 Native Object 4 4.3.7 Built-in Object 4 4.3.8 Host Object 4 4.3.9 Undefined Value 4 4.3.10 Undefined Type 4 4.3.11 Null Value 4 4.3.12 Null Type 4 4.3.13 Boolean Value 4 4.3.14 Boolean Type 4 4.3.15 Boolean Object 5 4.3.16 String Value 5 4.3.17 String Type 5 4.3.18 String Object 5 4.3.19 Number Value 5 4.3.20 Number Type 5 4.3.21 Number Object 5 4.3.22 Infinity 5 4.3.23 NaN 5 5 Notational Conventions 6 5.1 Syntactic and Lexical Grammars 6 5.1.1 Context-Free Grammars 6 5.1.2 The Lexical and RegExp Grammars 6 5.1.3 The Numeric String Grammar 6 5.1.4 The Syntactic Grammar 6 5.1.5 Grammar Notation 7 5.2 Algorithm Conventions 9 6. Source Text 10 7 Lexical Conventions 11 7.1 Unicode Format-Control Characters 11 7.2 White Space 11 7.3 Line Terminators 12 7.4 Comments 12 - ii - 7.5 Tokens 13 7.5.1 Reserved Words 13 7.5.2 Keywords 13 7.5.3 Future Reserved Words 14 7.6 Identifiers 14 7.7 Punctuators 15 7.8 Literals 16 7.8.1 Null Literals 16 7.8.2 Boolean Literals 16 7.8.3 Numeric Literals 16 7.8.4 String Literals 18 7.8.5 Regular Expression Literals 20 7.9 Automatic Semicolon Insertion 21 7.9.1 Rules of Automatic Semicolon Insertion 21 7.9.2 Examples of Automatic Semicolon Insertion 22 8 Types 24 8.1 The Undefined Type 24 8.2 The Null Type 24 8.3 The Boolean Type 24 8.4 The String Type 24 8.5 The Number Type 24 8.6 The Object Type 25 8.6.1 Property Attributes 25 8.6.2 Internal Properties and Methods 26 8.7 The Reference Type 29 8.7.1 GetValue (V) 29 8.7.2 PutValue (V, W) 29 8.8 The List Type 30 8.9 The Completion Type 30 9 Type Conversion 30 9.1 ToPrimitive 30 9.2 ToBoolean 30 9.3 ToNumber 31 9.3.1 ToNumber Applied to the String Type 31 9.4 ToInteger 34 9.5 ToInt32: (Signed 32 Bit Integer) 34 9.6 ToUint32: (Unsigned 32 Bit Integer) 34 9.7 ToUint16: (Unsigned 16 Bit Integer) 35 9.8 ToString 35 9.8.1 ToString Applied to the Number Type 35 9.9 ToObject 36 10 Execution Contexts 37 10.1 Definitions 37 10.1.1 Function Objects 37 10.1.2 Types of Executable Code 37 10.1.3 Variable Instantiation 37 10.1.4 Scope Chain and Identifier Resolution 38 10.1.5 Global Object 38 10.1.6 Activation Object 38 - i i i - 10.1.7 This 39 10.1.8 Arguments Object 39 10.2 Entering An Execution Context 39 10.2.1 Global Code 39 10.2.2 Eval Code 39 10.2.3 Function Code 39 11 Expressions 40 11.1 Primary Expressions 40 11.1.1 The this Keyword 40 11.1.2 Identifier Reference 40 11.1.3 Literal Reference 40 11.1.4 Array Initialiser 40 11.1.5 Object Initialiser 41 11.1.6 The Grouping Operator 42 11.2 Left-Hand-Side Expressions 43 11.2.1 Property Accessors 43 11.2.2 The new Operator 44 11.2.3 Function Calls 44 11.2.4 Argument Lists 45 11.2.5 Function Expressions 45 11.3 Postfix Expressions 45 11.3.1 Postfix Increment Operator 45 11.3.2 Postfix Decrement Operator 45 11.4 Unary Operators 46 11.4.1 The delete Operator 46 11.4.2 The void Operator 46 11.4.3 The typeof Operator 46 11.4.4 Prefix Increment Operator 47 11.4.5 Prefix Decrement Operator 47 11.4.6 Unary + Operator 47 11.4.7 Unary - Operator 47 11.4.8 Bitwise NOT Operator ( ~) 48 11.4.9 Logical NOT Operator ( !) 48 11.5 Multiplicative Operators 48 11.5.1 Applying the * Operator 48 11.5.2 Applying the / Operator 49 11.5.3 Applying the % Operator 49 11.6 Additive Operators 50 11.6.1 The Addition operator ( +) 50 11.6.2 The Subtraction Operator ( -) 50 11.6.3 Applying the Additive Operators ( +,- ) to Numbers 51 11.7 Bitwise Shift Operators 51 11.7.1 The Left Shift Operator ( <<) 51 11.7.2 The Signed Right Shift Operator ( >>) 51 11.7.3 The Unsigned Right Shift Operator ( >>>) 52 11.4 Relational Operators 52 11.8.1 The Less-than Operator ( <) 53 11.8.2 The Greater-than Operator ( >) 53 11.8.3 The Less-than-or-equal Operator ( <=) 53 11.8.4 The Greater-than-or-equal Operator ( >=) 53 11.8.5 The Abstract Relational Comparison Algorithm 53 - iv - 11.8.6 The instanceof operator 54 11.8.7 The in operator 54 11.9 Equality Operators 54 11.9.1 The Equals Operator ( ==) 55 11.9.2 The Does-not-equals Operator ( !=) 55 11.9.3 The Abstract Equality Comparison Algorithm 55 11.9.4 The Strict Equals Operator ( ===) 56 11.9.5 The Strict Does-not-equal Operator ( !==) 56 11.9.6 The Strict Equality Comparison Algorithm 56 11.10 Binary Bitwise Operators 57 11.11 Binary Logical Operators 58 11.12 Conditional Operator ( ?: ) 58 11.13 Assignment Operators 59 11.13.1 Simple Assignment ( =) 59 11.13.2 Compound Assignment ( op=) 60 11.14 Comma Operator ( , ) 60 12 Statements 61 12.1 Block 61 12.2 Variable statement 62 12.3 Empty Statement 63 12.4 Expression Statement 63 12.5 The if Statement 63 12.6 Iteration Statements 64 12.6.1 The do-while Statement 64 12.6.2 The while statement 64 12.6.3 The for Statement 65 12.6.4 The for-in Statement 65 12.7 The continue Statement 66 12.8 The break Statement 67 12.9 The return Statement 67 12.10 The with Statement 67 12.11 The switch Statement 68 12.12 Labelled Statements 69 12.13 The throw statement 69 12.14 The try statement 70 13 Function Definition 71 13.1 Definitions 72 13.1.1 Equated Grammar Productions 72 13.1.2 Joined Objects 72 13.2 Creating Function Objects 72 13.2.1 [[Call]] 73 13.2.2 [[Construct]] 74 14 Program 75 15 Native ECMAScript Objects 76 15.1 The Global Object 76 15.1.1 Value Properties of the Global Object 77 15.1.2 Function Properties of the Global Object 77 15.1.3 URI Handling Function Properties 78 - v - 15.1.4 Constructor Properties of the Global Object 83 15.1.5 Other Properties of the Global Object 83 15.2 Object Objects 83 15.2.1 The Object Constructor Called as a Function 83 15.2.2 The Object Constructor 84 15.2.3 Properties of the Object Constructor 84 15.2.4 Properties of the Object Prototype Object 84 15.2.5 Properties of Object Instances 85 15.3 Function Objects 85 '; -if(largeStr !== 'Standard ECMA-2623r d Edition - December 1999S t a n d a r d i z i n g Informat i o n and Commu n i c a t i o n SystemsPhone: +41 22 849.60.00 - Fax: +41 22 849.60.01 - URL: ht tp: / /www.ecma.ch - Internet: helpdesk@ecma.chECMAScript LanguageSpecificationStandard ECMA-2623r d Edition - December 1999S t a n d a r d i z i n g Informat i o n and Commu n i c a t i o n SystemsPhone: +41 22 849.60.00 - Fax: +41 22 849.60.01 - URL: ht tp: / /www.ecma.ch - Internet: helpdesk@ecma.chMB Ecma-262.doc 08-04-02 16,53ECMAScript LanguageSpecificationBrief HistoryThis ECMA Standard is based on several originating technologies, the most well known being JavaScript (Netscape)and JScript (Microsoft). The language was invented by Brendan Eich at Netscape and first appeared in thatcompans Navigator 2.0 browser. It has appeared in all subsequent browsers from Netscape and in all browsers fromMicrosoft starting with Internet Explorer 3.0.The development of this Standard started in November 1996. The first edition of this ECMA Standard was adopted bythe ECMA General Assembly of June 1997.That ECMA Standard was submitted to ISO/IEC JTC 1 for adoption under the fast-track procedure, and approved asinternational standard ISO/IEC 16262, in April 1998. The ECMA General Assembly of June 1998 approved thesecond edition of ECMA-262 to keep it fully aligned with ISO/IEC 16262. Changes between the first and the secondedition are editorial in nature.The current document defines the third edition of the Standard and includes powerful regular expressions, betterstring handling, new control statements, try/catch exception handling, tighter definition of errors, formatting fornumeric output and minor changes in anticipation of forthcoming internationalisation facilities and future languagegrowth.Work on the language is not complete. The technical committee is working on significant enhancements, includingmechanisms for scripts to be created and used across the Internet, and tighter coordination with other standards bodiessuch as groups within the World Wide Web Consortium and the Wireless Application Protocol Forum.This Standard has been adopted as 3rd Edition of ECMA-262 by the ECMA General Assembly in December, 1999.- i -Table of contents1 Scope 12 Conformance 13 References 14 Overview 1 4.1 Web Scripting 2 4.2 Language Overview 2 4.2.1 Objects 3 4.3 Definitions 4 4.3.1 Type 4 4.3.2 Primitive Value 4 4.3.3 Object 4 4.3.4 Constructor 4 4.3.5 Prototype 4 4.3.6 Native Object 4 4.3.7 Built-in Object 4 4.3.8 Host Object 4 4.3.9 Undefined Value 4 4.3.10 Undefined Type 4 4.3.11 Null Value 4 4.3.12 Null Type 4 4.3.13 Boolean Value 4 4.3.14 Boolean Type 4 4.3.15 Boolean Object 5 4.3.16 String Value 5 4.3.17 String Type 5 4.3.18 String Object 5 4.3.19 Number Value 5 4.3.20 Number Type 5 4.3.21 Number Object 5 4.3.22 Infinity 5 4.3.23 NaN 5 5 Notational Conventions 6 5.1 Syntactic and Lexical Grammars 6 5.1.1 Context-Free Grammars 6 5.1.2 The Lexical and RegExp Grammars 6 5.1.3 The Numeric String Grammar 6 5.1.4 The Syntactic Grammar 6 5.1.5 Grammar Notation 7 5.2 Algorithm Conventions 9 6. Source Text 10 7 Lexical Conventions 11 7.1 Unicode Format-Control Characters 11 7.2 White Space 11 7.3 Line Terminators 12 7.4 Comments 12 - ii - 7.5 Tokens 13 7.5.1 Reserved Words 13 7.5.2 Keywords 13 7.5.3 Future Reserved Words 14 7.6 Identifiers 14 7.7 Punctuators 15 7.8 Literals 16 7.8.1 Null Literals 16 7.8.2 Boolean Literals 16 7.8.3 Numeric Literals 16 7.8.4 String Literals 18 7.8.5 Regular Expression Literals 20 7.9 Automatic Semicolon Insertion 21 7.9.1 Rules of Automatic Semicolon Insertion 21 7.9.2 Examples of Automatic Semicolon Insertion 22 8 Types 24 8.1 The Undefined Type 24 8.2 The Null Type 24 8.3 The Boolean Type 24 8.4 The String Type 24 8.5 The Number Type 24 8.6 The Object Type 25 8.6.1 Property Attributes 25 8.6.2 Internal Properties and Methods 26 8.7 The Reference Type 29 8.7.1 GetValue (V) 29 8.7.2 PutValue (V, W) 29 8.8 The List Type 30 8.9 The Completion Type 30 9 Type Conversion 30 9.1 ToPrimitive 30 9.2 ToBoolean 30 9.3 ToNumber 31 9.3.1 ToNumber Applied to the String Type 31 9.4 ToInteger 34 9.5 ToInt32: (Signed 32 Bit Integer) 34 9.6 ToUint32: (Unsigned 32 Bit Integer) 34 9.7 ToUint16: (Unsigned 16 Bit Integer) 35 9.8 ToString 35 9.8.1 ToString Applied to the Number Type 35 9.9 ToObject 36 10 Execution Contexts 37 10.1 Definitions 37 10.1.1 Function Objects 37 10.1.2 Types of Executable Code 37 10.1.3 Variable Instantiation 37 10.1.4 Scope Chain and Identifier Resolution 38 10.1.5 Global Object 38 10.1.6 Activation Object 38 - i i i - 10.1.7 This 39 10.1.8 Arguments Object 39 10.2 Entering An Execution Context 39 10.2.1 Global Code 39 10.2.2 Eval Code 39 10.2.3 Function Code 39 11 Expressions 40 11.1 Primary Expressions 40 11.1.1 The this Keyword 40 11.1.2 Identifier Reference 40 11.1.3 Literal Reference 40 11.1.4 Array Initialiser 40 11.1.5 Object Initialiser 41 11.1.6 The Grouping Operator 42 11.2 Left-Hand-Side Expressions 43 11.2.1 Property Accessors 43 11.2.2 The new Operator 44 11.2.3 Function Calls 44 11.2.4 Argument Lists 45 11.2.5 Function Expressions 45 11.3 Postfix Expressions 45 11.3.1 Postfix Increment Operator 45 11.3.2 Postfix Decrement Operator 45 11.4 Unary Operators 46 11.4.1 The delete Operator 46 11.4.2 The void Operator 46 11.4.3 The typeof Operator 46 11.4.4 Prefix Increment Operator 47 11.4.5 Prefix Decrement Operator 47 11.4.6 Unary + Operator 47 11.4.7 Unary - Operator 47 11.4.8 Bitwise NOT Operator ( ~) 48 11.4.9 Logical NOT Operator ( !) 48 11.5 Multiplicative Operators 48 11.5.1 Applying the * Operator 48 11.5.2 Applying the / Operator 49 11.5.3 Applying the % Operator 49 11.6 Additive Operators 50 11.6.1 The Addition operator ( +) 50 11.6.2 The Subtraction Operator ( -) 50 11.6.3 Applying the Additive Operators ( +,- ) to Numbers 51 11.7 Bitwise Shift Operators 51 11.7.1 The Left Shift Operator ( <<) 51 11.7.2 The Signed Right Shift Operator ( >>) 51 11.7.3 The Unsigned Right Shift Operator ( >>>) 52 11.4 Relational Operators 52 11.8.1 The Less-than Operator ( <) 53 11.8.2 The Greater-than Operator ( >) 53 11.8.3 The Less-than-or-equal Operator ( <=) 53 11.8.4 The Greater-than-or-equal Operator ( >=) 53 11.8.5 The Abstract Relational Comparison Algorithm 53 - iv - 11.8.6 The instanceof operator 54 11.8.7 The in operator 54 11.9 Equality Operators 54 11.9.1 The Equals Operator ( ==) 55 11.9.2 The Does-not-equals Operator ( !=) 55 11.9.3 The Abstract Equality Comparison Algorithm 55 11.9.4 The Strict Equals Operator ( ===) 56 11.9.5 The Strict Does-not-equal Operator ( !==) 56 11.9.6 The Strict Equality Comparison Algorithm 56 11.10 Binary Bitwise Operators 57 11.11 Binary Logical Operators 58 11.12 Conditional Operator ( ?: ) 58 11.13 Assignment Operators 59 11.13.1 Simple Assignment ( =) 59 11.13.2 Compound Assignment ( op=) 60 11.14 Comma Operator ( , ) 60 12 Statements 61 12.1 Block 61 12.2 Variable statement 62 12.3 Empty Statement 63 12.4 Expression Statement 63 12.5 The if Statement 63 12.6 Iteration Statements 64 12.6.1 The do-while Statement 64 12.6.2 The while statement 64 12.6.3 The for Statement 65 12.6.4 The for-in Statement 65 12.7 The continue Statement 66 12.8 The break Statement 67 12.9 The return Statement 67 12.10 The with Statement 67 12.11 The switch Statement 68 12.12 Labelled Statements 69 12.13 The throw statement 69 12.14 The try statement 70 13 Function Definition 71 13.1 Definitions 72 13.1.1 Equated Grammar Productions 72 13.1.2 Joined Objects 72 13.2 Creating Function Objects 72 13.2.1 [[Call]] 73 13.2.2 [[Construct]] 74 14 Program 75 15 Native ECMAScript Objects 76 15.1 The Global Object 76 15.1.1 Value Properties of the Global Object 77 15.1.2 Function Properties of the Global Object 77 15.1.3 URI Handling Function Properties 78 - v - 15.1.4 Constructor Properties of the Global Object 83 15.1.5 Other Properties of the Global Object 83 15.2 Object Objects 83 15.2.1 The Object Constructor Called as a Function 83 15.2.2 The Object Constructor 84 15.2.3 Properties of the Object Constructor 84 15.2.4 Properties of the Object Prototype Object 84 15.2.5 Properties of Object Instances 85 15.3 Function Objects 85 '){ - $ERROR('#2: Large string 8192 bytes'); -} -// -//////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A7.1.js b/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A7.1.js deleted file mode 100644 index fb981444e..000000000 --- a/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A7.1.js +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S8.4_A7.1; - * @section: 8.4, 7.8.4; - * @assertion: between chunks of one string not allowed; - * @description: Insert between chunks of one string; - * @negative -*/ - -eval("var x = asdf\u000Aghjk"); diff --git a/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A7.2.js b/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A7.2.js deleted file mode 100644 index fa24f8792..000000000 --- a/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A7.2.js +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S8.4_A7.2; -* @section: 8.4, 7.8.4; -* @assertion: between chunks of one string not allowed; -* @description: Insert between chunks of one string; -* @negative; -*/ - -eval("var x = asdf\u000Dghjk"); diff --git a/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A7.3.js b/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A7.3.js deleted file mode 100644 index f8ebad68b..000000000 --- a/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A7.3.js +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S8.4_A7.3; -* @section: 8.4, 7.8.4; -* @assertion: between chunks of one string not allowed; -* @description: Insert between chunks of one string; -* @negative; -*/ - -eval("var x = asdf\u2028ghjk"); diff --git a/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A7.4.js b/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A7.4.js deleted file mode 100644 index 8752e3ffd..000000000 --- a/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A7.4.js +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S8.4_A7.4; -* @section: 8.4, 7.8.4; -* @assertion: between chunks of one string not allowed; -* @description: Insert between chunks of one string; -* @negative; -*/ - -eval("var x = asdf\u2029ghjk"); diff --git a/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A8.js b/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A8.js deleted file mode 100644 index 1559562ba..000000000 --- a/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A8.js +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S8.4_A8; - * @section: 8.4, 7.8.4; - * @assertion: Empty string, 0, false are all equal (==) to each other, since they all evaluate to 0; - * @description: Compare empty string with undefined, null, 0 and false; -*/ - -var str=''; - -//////////////////////////////////////////////////////////// -// CHECK#1 -if (str == undefined){ - $ERROR('#1: Empty string and undefined are not equal (!=) to each other'); -} -// -///////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////// -// CHECK#2 -if (str == null){ - $ERROR('#1: Empty string and Null are not equal (!=) to each other'); -} -// -///////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////// -// CHECK#3 -if (str != 0){ - $ERROR('#3: Empty string and 0 are equal (==) to each other, since they all evaluate to 0'); -} -// -///////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////// -// CHECK#4 -if (str != false){ - $ERROR('#4: Empty string and false are equal (==) to each other, since they all evaluate to 0'); -} -// -///////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A9_T1.js b/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A9_T1.js deleted file mode 100644 index c92719b2a..000000000 --- a/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A9_T1.js +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S8.4_A9_T1; - * @section: 8.4, 7.8.4; - * @assertion: Assignment to string literals calls String constructor; - * @description: Simple string variable compare with object String; -*/ - -var str='ABC'; -var strObj=new String('ABC'); - -//////////////////////////////////////////////////////////// -// CHECK#1 -if (str.constructor !== strObj.constructor){ - $ERROR('#1: \'ABC\'.constructor === new String(\'ABC\').constructor'); -} -// -///////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////// -// CHECK#2 -if (str != strObj){ - $ERROR('#2: "ABC" == new String("ABC")'); -} -// -///////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////// -// CHECK#3 -if (str === strObj){ - $ERROR('#3: "ABC" !== new String("ABC")'); -} -// -///////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A9_T2.js b/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A9_T2.js deleted file mode 100644 index a215f38be..000000000 --- a/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A9_T2.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S8.4_A9_T2; - * @section: 8.4, 7.8.4; - * @assertion: Assignment to string literals calls String constructor; - * @description: Compare empty string variable, object String('') and object String(); -*/ - -var str=""; -var strObj=new String(""); -var strObj_=new String(); - -//////////////////////////////////////////////////////////// -// CHECK#1 -if (str.constructor !== strObj.constructor){ - $ERROR('#1: "".constructor === new String("").constructor'); -} -// -///////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////// -// CHECK#2 -if (str.constructor !== strObj_.constructor){ - $ERROR('#2: "".constructor === new String().constructor'); -} -// -///////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////// -// CHECK#3 -if (str != strObj){ - $ERROR('#3: values of str=""; and strObj=new String(""); are equal'); -} -// -///////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////// -// CHECK#4 -if (str === strObj){ - $ERROR('#4: objects of str=""; and strObj=new String(""); are different'); -} -// -///////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////// -// CHECK#5 -if (str != strObj_){ - $ERROR('#5: values of str=""; and strObj=new String(); are equal'); -} -// -///////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////// -// CHECK#6 -if (str === strObj_){ - $ERROR('#6: objects of str=""; and strObj=new String(); are different'); -} -// -///////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A9_T3.js b/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A9_T3.js deleted file mode 100644 index 3709817c2..000000000 --- a/tests/ES3/Conformance/08_Types/8.4_The_String_Type/S8.4_A9_T3.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S8.4_A9_T3; - * @section: 8.4, 7.8.4; - * @assertion: Assignment to string literals calls String constructor; - * @description: Simple empty string variable compare with empty object String; -*/ - -var str=""; -var strObj=new String; - -//////////////////////////////////////////////////////////// -// CHECK#1 -if (str.constructor !== strObj.constructor){ - $ERROR('#1: "".constructor === new String.constructor'); -} -// -///////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////// -// CHECK#2 -if (str != strObj){ - $ERROR('#2: values of str=""; and strObj=new String(""); are equal'); -} -// -///////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////// -// CHECK#3 -if (str === strObj){ - $ERROR('#3: objects of str=""; and strObj=new String(""); are different'); -} -// -///////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (typeof str == typeof strObj){ - $ERROR('#4: types of str=""; and strObj=new String(""); are different'); -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/08_Types/8.5_The_Number_Type/S8.5_A1.js b/tests/ES3/Conformance/08_Types/8.5_The_Number_Type/S8.5_A1.js deleted file mode 100644 index 75c264505..000000000 --- a/tests/ES3/Conformance/08_Types/8.5_The_Number_Type/S8.5_A1.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S8.5_A1; - * @section: 8.5, 7.8.3; - * @assertion: NaN !== NaN; - * @description: Compare NaN with NaN; -*/ - -var x = Number.NaN; -var x_ = Number.NaN; - -/////////////////////////////////////////////////////// -// CHECK #1 -if (x === x_){ - $ERROR('#1: NaN !== NaN '); -} -// -////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/08_Types/8.5_The_Number_Type/S8.5_A10.js b/tests/ES3/Conformance/08_Types/8.5_The_Number_Type/S8.5_A10.js deleted file mode 100644 index 3a9168cf9..000000000 --- a/tests/ES3/Conformance/08_Types/8.5_The_Number_Type/S8.5_A10.js +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S8.5_A10; - * @section: 8.5, 7.8.3; - * @assertion: Infinity is not a keyword; - * @description: Create variable entitled Infinity; -*/ - -var Infinity=1.0; -Infinity='asdf'; -Infinity=true; diff --git a/tests/ES3/Conformance/08_Types/8.5_The_Number_Type/S8.5_A11_T1.js b/tests/ES3/Conformance/08_Types/8.5_The_Number_Type/S8.5_A11_T1.js deleted file mode 100644 index 764bbd959..000000000 --- a/tests/ES3/Conformance/08_Types/8.5_The_Number_Type/S8.5_A11_T1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S8.5_A11_T1; - * @section: 8.5, 7.8.3; - * @assertion: The integer 0 has two representations, +0 and -0; - * @description: Check 1.0/p_zero !== 1.0/n_zero; -*/ - -var p_zero=+0; -var n_zero=-0; - -if (1.0/p_zero === 1.0/n_zero){ - $ERROR('#1: var p_zero=+0; var n_zero=-0; 1.0/p_zero !== 1.0/n_zero'); -} diff --git a/tests/ES3/Conformance/08_Types/8.5_The_Number_Type/S8.5_A11_T2.js b/tests/ES3/Conformance/08_Types/8.5_The_Number_Type/S8.5_A11_T2.js deleted file mode 100644 index a0d0e29f6..000000000 --- a/tests/ES3/Conformance/08_Types/8.5_The_Number_Type/S8.5_A11_T2.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S8.5_A11_T2; - * @section: 8.5, 7.8.3; - * @assertion: The integer 0 has two representations, +0 and -0; - * @description: Compare positive_zero and negative_zero; -*/ - -var p_zero=+0; -var n_zero=-0; - -//CHECK #1 -if ((p_zero == n_zero) !== true){ - $ERROR('#1: var p_zero=+0; var n_zero=-0; p_zero != n_zero'); -} - -//CHECK #2 -if ((n_zero == 0) !== true){ - $ERROR('#2: var p_zero=+0; var n_zero=-0; n_zero == 0'); -} - -//CHECK #3 -if ((p_zero == -0) !== true){ - $ERROR('#3: var p_zero=+0; var n_zero=-0; p_zero == -0'); -} - -//CHECK #4 -if ((p_zero === 0) !== true){ - $ERROR('#4: var p_zero=+0; var n_zero=-0; p_zero === 0'); -} - -//CHECK #5 -if ((n_zero === -0) !== true){ - $ERROR('#5: var p_zero=+0; var n_zero=-0; n_zero === -0'); -} diff --git a/tests/ES3/Conformance/08_Types/8.5_The_Number_Type/S8.5_A12.1.js b/tests/ES3/Conformance/08_Types/8.5_The_Number_Type/S8.5_A12.1.js deleted file mode 100644 index 91f95620e..000000000 --- a/tests/ES3/Conformance/08_Types/8.5_The_Number_Type/S8.5_A12.1.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S8.5_A12.1; - * @section: 8.5, 7.8.3; - * @assertion: +Infinity and Infinity are the same as Number.POSITIVE_INFINITY; - * @description: Compare Infinity and +Infinity with Number.POSITIVE_INFINITY; -*/ - - -var p_inf=+Infinity; -var inf=Infinity; - -//CHECK #1 -if (p_inf!==Number.POSITIVE_INFINITY){ - $ERROR('#1: +Infinity is the same as Number.POSITIVE_INFINITY'); -} - -//CHECK #2 -if (inf!==Number.POSITIVE_INFINITY){ - $ERROR('#2: Infinity is the same as Number.POSITIVE_INFINITY'); -} diff --git a/tests/ES3/Conformance/08_Types/8.5_The_Number_Type/S8.5_A12.2.js b/tests/ES3/Conformance/08_Types/8.5_The_Number_Type/S8.5_A12.2.js deleted file mode 100644 index 068910add..000000000 --- a/tests/ES3/Conformance/08_Types/8.5_The_Number_Type/S8.5_A12.2.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S8.5_A12.2; - * @section: 8.5, 7.8.3; - * @assertion: -Infinity is the same as Number.NEGATIVE_INFINITY; - * @description: Compare -Infinity with Number.NEGATIVE_INFINITY; -*/ - - -var n_inf=-Infinity; - -//CHECK #1 -if (n_inf !== Number.NEGATIVE_INFINITY){ - $ERROR('#1: -Infinity is the same as Number.NEGATIVE_INFINITY'); -} diff --git a/tests/ES3/Conformance/08_Types/8.5_The_Number_Type/S8.5_A13_T1.js b/tests/ES3/Conformance/08_Types/8.5_The_Number_Type/S8.5_A13_T1.js deleted file mode 100644 index b3f09697f..000000000 --- a/tests/ES3/Conformance/08_Types/8.5_The_Number_Type/S8.5_A13_T1.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S8.5_A13_T1; - * @section: 8.5, 7.8.3; - * @assertion: Finite nonzero values that are Normalised having the form s*m*2**e - * where s is +1 or -1, m is a positive integer less than 2**53 but not - * less than s**52 and e is an integer ranging from -1074 to 971; - * @description: Finite Non zero values where e is -1074; -*/ - -//CHECK #1 -if ((1*((Math.pow(2,53))-1)*(Math.pow(2,-1074))) !== 4.4501477170144023e-308){ - $ERROR('#1: (1*((Math.pow(2,53))-1)*(Math.pow(2,-1074))) === 4.4501477170144023e-308. Actual: ' + ((1*((Math.pow(2,53))-1)*(Math.pow(2,-1074))))); -} - -//CHECK #2 -if ((1*(Math.pow(2,52))*(Math.pow(2,-1074))) !== 2.2250738585072014e-308){ - $ERROR('#2: (1*(Math.pow(2,52))*(Math.pow(2,-1074))) === 2.2250738585072014e-308. Actual: ' + ((1*(Math.pow(2,52))*(Math.pow(2,-1074))))); -} - -//CHECK #3 -if ((-1*(Math.pow(2,52))*(Math.pow(2,-1074))) !== -2.2250738585072014e-308){ - $ERROR('#3: (-1*(Math.pow(2,52))*(Math.pow(2,-1074))) === -2.2250738585072014e-308. Actual: ' + ((-1*(Math.pow(2,52))*(Math.pow(2,-1074))))); -} diff --git a/tests/ES3/Conformance/08_Types/8.5_The_Number_Type/S8.5_A13_T2.js b/tests/ES3/Conformance/08_Types/8.5_The_Number_Type/S8.5_A13_T2.js deleted file mode 100644 index 4101d243a..000000000 --- a/tests/ES3/Conformance/08_Types/8.5_The_Number_Type/S8.5_A13_T2.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S8.5_A13_T2; - * @section: 8.5, 7.8.3; - * @assertion: Finite nonzero values that are Normalised having the form s*m*2**e - * where s is +1 or -1, m is a positive integer less than 2**53 but not - * less than s**52 and e is an integer ranging from -1074 to 971; - * @description: Finite Non zero values where e is 971; -*/ - -//CHECK #1 -if ((1*(Math.pow(2,52))*(Math.pow(2,971))) !== 8.98846567431158e+307){ - $ERROR('#1: (1*(Math.pow(2,52))*(Math.pow(2,971))) === 8.98846567431158e+307. Actual: ' + ((1*(Math.pow(2,52))*(Math.pow(2,971))))); -} - -//CHECK #2 -if ((1*((Math.pow(2,53))-1)*(Math.pow(2,971))) !== 1.7976931348623157e+308){ - $ERROR('#2: (1*((Math.pow(2,53))-1)*(Math.pow(2,971))) === 1.7976931348623157e+308. Actual: ' + ((1*((Math.pow(2,53))-1)*(Math.pow(2,971))))); -} - -//CHECK #3 -if ((-1*(Math.pow(2,52))*(Math.pow(2,971))) !== -8.98846567431158e+307){ - $ERROR('#3: (-1*(Math.pow(2,52))*(Math.pow(2,971))) === -8.98846567431158e+307. Actual: ' + ((-1*(Math.pow(2,52))*(Math.pow(2,971))))); -} diff --git a/tests/ES3/Conformance/08_Types/8.5_The_Number_Type/S8.5_A14_T1.js b/tests/ES3/Conformance/08_Types/8.5_The_Number_Type/S8.5_A14_T1.js deleted file mode 100644 index 4106de7ae..000000000 --- a/tests/ES3/Conformance/08_Types/8.5_The_Number_Type/S8.5_A14_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S8.5_A14_T1; - * @section: 8.5, 7.8.3; - * @assertion: When number absolute value is bigger of 2**1024 should convert to Infinity; - * @description: Create number bigger of 2**1024; -*/ - -//CHECK #1 -if (1e+308*2 !== Infinity){ - $ERROR('#1: 1e+308*2 === Infinity. Actual: ' + (1e+308*2)); -} - -//CHECK #2 -if ((1*(Math.pow(2,53))*(Math.pow(2,971))) !== Infinity){ - $ERROR('#2: (1*(Math.pow(2,53))*(Math.pow(2,971))) === Infinity. Actual: ' + ((1*(Math.pow(2,53))*(Math.pow(2,971))))); -} diff --git a/tests/ES3/Conformance/08_Types/8.5_The_Number_Type/S8.5_A14_T2.js b/tests/ES3/Conformance/08_Types/8.5_The_Number_Type/S8.5_A14_T2.js deleted file mode 100644 index 6717d8630..000000000 --- a/tests/ES3/Conformance/08_Types/8.5_The_Number_Type/S8.5_A14_T2.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S8.5_A14_T2; - * @section: 8.5, 7.8.3; - * @assertion: When number absolute value is bigger of 2**1024 should convert to Infinity; - * @description: Create number smaller of -2**1024; -*/ - -//CHECK #1 -if (-1e+308*3 !== -Infinity){ - $ERROR('#1: -1e+308*3 === Infinity. Actual: ' + (-1e+308*3)); -} - -//CHECK #2 -if ((-1*(Math.pow(2,53))*(Math.pow(2,971))) !== -Infinity){ - $ERROR('#2: (-1*(Math.pow(2,53))*(Math.pow(2,971))) === Infinity. Actual: ' + ((-1*(Math.pow(2,53))*(Math.pow(2,971))))); -} diff --git a/tests/ES3/Conformance/08_Types/8.5_The_Number_Type/S8.5_A2.1.js b/tests/ES3/Conformance/08_Types/8.5_The_Number_Type/S8.5_A2.1.js deleted file mode 100644 index b96e7b4eb..000000000 --- a/tests/ES3/Conformance/08_Types/8.5_The_Number_Type/S8.5_A2.1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S8.5_A2.1; - * @section: 8.5, 7.8.3; - * @assertion: Number type represented as the double precision 64-bit format IEEE 754; - * @description: Use 2^53 + 2 number and do some operation with it; -*/ - -var x = 9007199254740994.0; /* 2^53 + 2 */ -var y = 1.0 - 1/65536.0; -var z = x + y; -var d = z - x; - -if (d !== 0){ - $ERROR('#1: var x = 9007199254740994.0; var y = 1.0 - 1/65536.0; var z = x + y; var d = z - x; d === 0. Actual: ' + (d)); -} diff --git a/tests/ES3/Conformance/08_Types/8.5_The_Number_Type/S8.5_A2.2.js b/tests/ES3/Conformance/08_Types/8.5_The_Number_Type/S8.5_A2.2.js deleted file mode 100644 index 8a1dd4f4e..000000000 --- a/tests/ES3/Conformance/08_Types/8.5_The_Number_Type/S8.5_A2.2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S8.5_A2.2; - * @section: 8.5, 7.8.3; - * @assertion: Number type represented as the extended precision 64-bit format IEEE 754; - * @description: Use 2^53 + 2 number and do some operation with it; -*/ - -var x = 9007199254740994.0; /* 2^53 + 2 */ -var y = 1.0 - 1/65536.0; -var z = x + y; -var d = z - x; - -if (d === 2){ - $ERROR('#1: var x = 9007199254740994.0; var y = 1.0 - 1/65536.0; var z = x + y; var d = z - x; d !== 2'); -} diff --git a/tests/ES3/Conformance/08_Types/8.5_The_Number_Type/S8.5_A3.js b/tests/ES3/Conformance/08_Types/8.5_The_Number_Type/S8.5_A3.js deleted file mode 100644 index e728e38ca..000000000 --- a/tests/ES3/Conformance/08_Types/8.5_The_Number_Type/S8.5_A3.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S8.5_A3; - * @section: 8.5, 7.8.3; - * @assertion: NaN expression has a type Number; - * @description: Check type of NaN; -*/ - -var x=NaN; - -/////////////////////////////////////////////////////// -// CHECK#1 -if (typeof(x) !== "number"){ - $ERROR('#1: var x=NaN; typeof(x) === "number". Actual: ' + (typeof(x))); -} -// -////////////////////////////////////////////////////////// - -/////////////////////////////////////////////////////// -// CHECK#2 -if (typeof(NaN) !== "number"){ - $ERROR('#2: typeof(NaN) === "number". Actual: ' + (typeof(NaN))); -} -// -////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/08_Types/8.5_The_Number_Type/S8.5_A4.js b/tests/ES3/Conformance/08_Types/8.5_The_Number_Type/S8.5_A4.js deleted file mode 100644 index 6f94e1144..000000000 --- a/tests/ES3/Conformance/08_Types/8.5_The_Number_Type/S8.5_A4.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S8.5_A4; - * @section: 8.5, 7.8.3; - * @assertion: NaN is not a keyword; - * @description: Create variable entitled NaN; -*/ - -var NaN=1.0; -NaN='asdf'; -NaN=true; -NaN=Number.NaN; diff --git a/tests/ES3/Conformance/08_Types/8.5_The_Number_Type/S8.5_A5.js b/tests/ES3/Conformance/08_Types/8.5_The_Number_Type/S8.5_A5.js deleted file mode 100644 index 759d10de8..000000000 --- a/tests/ES3/Conformance/08_Types/8.5_The_Number_Type/S8.5_A5.js +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S8.5_A5; - * @section: 8.5, 7.8.3; - * @assertion: NaN not greater or equal zero; - * @description: Compare NaN with zero; -*/ - -var x = NaN; -var x_geq_0=(x >= 0.0); -var x_leq_0=(x <= 0.0); -var x_leq_0_OR_geq_0=(x <= 0.0)||(x >= 0.0); -var x_geq_0_ADD_leq_0=(x >= 0.0) + (x <= 0.0); - - -/////////////////////////////////////////////////// -// CHECK#1 -if (x_geq_0){ - $ERROR('#1: NaN not greater or equal zero'); -} else { - $PRINT('#1: NaN not greater or equal zero'); -} -// -/////////////////////////////////////////////////// - -/////////////////////////////////////////////////// -// CHECK#2 -if (x_leq_0){ - $ERROR('#2: NaN not less or equal zero'); -} else { - $PRINT('#2: NaN not less or equal zero'); -} -// -/////////////////////////////////////////////////// - -/////////////////////////////////////////////////// -// CHECK#3 -if (x_leq_0_OR_geq_0){ - $ERROR('#3: NaN not less or equal zero OR greater or equal zero'); -} else { - $PRINT('#3: NaN not less or equal zero OR greater or equal zero'); -} -// -/////////////////////////////////////////////////// - -/////////////////////////////////////////////////// -// CHECK#4 -if (x_geq_0_ADD_leq_0){ - $ERROR('#4: NaN not less or equal zero ADD greater or equal zero'); -} else { - $PRINT('#4: NaN not less or equal zero ADD greater or equal zero'); -} -// -/////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/08_Types/8.5_The_Number_Type/S8.5_A6.js b/tests/ES3/Conformance/08_Types/8.5_The_Number_Type/S8.5_A6.js deleted file mode 100644 index a9fc601a5..000000000 --- a/tests/ES3/Conformance/08_Types/8.5_The_Number_Type/S8.5_A6.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S8.5_A6; - * @section: 8.5, 7.8.3; - * @assertion: -Infinity expression has a type Number; - * @description: Check type of -Infinity; -*/ - -var x=-Infinity; - -/////////////////////////////////////////////////////// -// CHECK#1 -if (typeof(x) !== "number"){ - $ERROR('#1: var x=-Infinity; typeof(x) === "number". Actual: ' + (typeof(x))); -} -// -////////////////////////////////////////////////////////// - -/////////////////////////////////////////////////////// -// CHECK#2 -if (typeof(-Infinity) !== "number"){ - $ERROR('#2: typeof(-Infinity) === "number". Actual: ' + (typeof(-Infinity))); -} -// -////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/08_Types/8.5_The_Number_Type/S8.5_A7.js b/tests/ES3/Conformance/08_Types/8.5_The_Number_Type/S8.5_A7.js deleted file mode 100644 index c54eea77b..000000000 --- a/tests/ES3/Conformance/08_Types/8.5_The_Number_Type/S8.5_A7.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S8.5_A7; - * @section: 8.5, 7.8.3; - * @assertion: +Infinity expression has a type Number; - * @description: Check type of +Infinity; -*/ - -var x=+Infinity; - -/////////////////////////////////////////////////////// -// CHECK#1 -if (typeof(x) !== "number"){ - $ERROR('#1: var x=+Infinity; typeof(x) === "number". Actual: ' + (typeof(x))); -} -// -////////////////////////////////////////////////////////// - -/////////////////////////////////////////////////////// -// CHECK#2 -if (typeof(+Infinity) !== "number"){ - $ERROR('#2: typeof(+Infinity) === "number". Actual: ' + (typeof(+Infinity))); -} -// -////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/08_Types/8.5_The_Number_Type/S8.5_A8.js b/tests/ES3/Conformance/08_Types/8.5_The_Number_Type/S8.5_A8.js deleted file mode 100644 index c29714b6c..000000000 --- a/tests/ES3/Conformance/08_Types/8.5_The_Number_Type/S8.5_A8.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S8.5_A8; - * @section: 8.5, 7.8.3; - * @assertion: Infinity is the same as +Infinity; - * @description: Compare Infinity and +Infinity; -*/ - -var p_inf=+Infinity; -var inf=Infinity; - -/////////////////////////////////////////////////////// -// -if (p_inf!==inf){ - $ERROR('#1: Infinity is the same as +Infinity'); -} -// -////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/08_Types/8.5_The_Number_Type/S8.5_A9.js b/tests/ES3/Conformance/08_Types/8.5_The_Number_Type/S8.5_A9.js deleted file mode 100644 index 754bdecdb..000000000 --- a/tests/ES3/Conformance/08_Types/8.5_The_Number_Type/S8.5_A9.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S8.5_A9; - * @section: 8.5, 7.8.3; - * @assertion: Globally defined variable NaN has not been altered by program execution; - * @description: Try alter globally defined variable NaN; -*/ - -Number.NaN = 1; - -if (Number.NaN === 1) { - $ERROR('#1: Globally defined variable NaN has not been altered by program execution'); -} diff --git a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.1_Property_Attributes/S8.6.1_A1.js b/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.1_Property_Attributes/S8.6.1_A1.js deleted file mode 100644 index 8d66f7521..000000000 --- a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.1_Property_Attributes/S8.6.1_A1.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S8.6.1_A1; - * @section: 8.6.1, 15.2.2, 15.8; - * @assertion: A property can have attribute ReadOnly like E in Math; - * @description: Try change Math.E property; -*/ - -__e = Math.E; -Math.E=1; -if (Math.E !==__e){ - $ERROR('#1: __e = Math.E; Math.E=1; Math.E ===__e'); -} diff --git a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.1_Property_Attributes/S8.6.1_A2.js b/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.1_Property_Attributes/S8.6.1_A2.js deleted file mode 100644 index 78bd605db..000000000 --- a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.1_Property_Attributes/S8.6.1_A2.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S8.6.1_A2; - * @section: 8.6.1, 12.6.4, 15.7; - * @assertion: A property can have attribute DontEnum like all properties of Number; - * @description: Try to enumerate properties of Number; -*/ - -//CHECK#1 -count=0; -for (p in Number) count++; -if (count > 0){ - $ERROR('#1: count=0; for (p in Number) count++; count > 0. Actual: ' + (count)); -} diff --git a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.1_Property_Attributes/S8.6.1_A3.js b/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.1_Property_Attributes/S8.6.1_A3.js deleted file mode 100644 index 95e5a0d0b..000000000 --- a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.1_Property_Attributes/S8.6.1_A3.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S8.6.1_A3; - * @section: 8.6.1, 15.7; - * @assertion: A property can have attribute DontDelete like NaN propertie of Number object; - * @description: Try to delete Number.NaN; -*/ -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (delete Number.NaN !== false){ - $ERROR('#1: delete Number.NaN === false. Actual: ' + (delete Number.NaN)); -}; -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (typeof(Number.NaN) === "undefined"){ - $ERROR('#2: delete Number.NaN; typeof(Number.NaN) !== "undefined" '); -}; -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2.1_A1.js b/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2.1_A1.js deleted file mode 100644 index 18dfaa0df..000000000 --- a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2.1_A1.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S8.6.2.1_A1; -* @section: 8.6.2.1; -* @assertion: [[Get]](P) method should return value when property P does not exist in instance but prototype contain it; -* @description: Try to get P when property P does not exist in instance but prototype contain it; -*/ - -//Establish foo object -function FooObj(){}; FooObj.prototype.propFoo="some"; - -// Invoke instance of foo object -var __obj= new FooObj; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__obj.propFoo !== "some"){ - $ERROR('#1: function FooObj(){}; FooObj.prototype.propFoo="some"; var __obj= new FooObj; __obj.propFoo === "some". Actual: ' + (__obj.propFoo)); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__obj['propFoo'] !== "some"){ - $ERROR('#1: function FooObj(){}; FooObj.prototype.propFoo="some"; var __obj= new FooObj; __obj[\'propFoo\'] === "some". Actual: ' + (__obj['propFoo'])); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2.1_A2.js b/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2.1_A2.js deleted file mode 100644 index 5897e1d54..000000000 --- a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2.1_A2.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S8.6.2.1_A2; -* @section: 8.6.2.1; -* @assertion: [[Get]](P) method should return undefined when property P does not exist both in instance and prototype; -* @description: Try to get P when property P does not exist both in instance and prototype; -*/ - -var __obj={}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__obj.propFoo !== undefined){ - $ERROR('#1: var __obj={}; __obj.propFoo === undefined. Actual: ' + (__obj.propFoo)); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__obj['propFoo'] !== undefined){ - $ERROR('#2: var __obj={}; __obj[\'propFoo\'] === undefined. Actual: ' + (__obj['propFoo'])); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2.1_A3.js b/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2.1_A3.js deleted file mode 100644 index 4fb8b89cc..000000000 --- a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2.1_A3.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S8.6.2.1_A3; -* @section: 8.6.2.1; -* @assertion: When the [[Get]] method of O is called with property name P value of P returns; -* @description: Try to get P property P exist in instance; -*/ - -var __map={shape:"cube", 5:"five", "6":"six"}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__map.shape !== "cube"){ - $ERROR('#1: var __map={shape:"cube", 5:"five", "6":"six"}; __map.shape === "cube". Actual: ' + (__map.shape)); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__map["shape"] !== "cube"){ - $ERROR('#2: var __map={shape:"cube", 5:"five", "6":"six"}; __map["shape"] === "cube". Actual: ' + (__map["shape"])); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__map["5"] !== "five"){ - $ERROR('#3: var __map={shape:"cube", 5:"five", "6":"six"}; __map["5"] === "five". Actual: ' + (__map["5"])); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (__map[5] !== "five"){ - $ERROR('#4: var __map={shape:"cube", 5:"five", "6":"six"}; __map[5] === "five". Actual: ' + (__map[5])); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#5 -if (__map["6"] !== "six"){ - $ERROR('#5: var __map={shape:"cube", 5:"five", "6":"six"}; __map["6"] === "six". Actual: ' + (__map["6"])); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#6 -if (__map[6] !== "six"){ - $ERROR('#6: var __map={shape:"cube", 5:"five", "6":"six"}; __map[6] === "six". Actual: ' + (__map[6])); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2.2_A1.js b/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2.2_A1.js deleted file mode 100644 index d8637b3c8..000000000 --- a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2.2_A1.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S8.6.2.2_A1; -* @section: 8.6.2.2; -* @assertion: When the [[Put]] method of O is called with property P and value V, -* and If O doesn't have a property with name P, then -* creates a property with name P, set its value to V and give it empty attributes; -* @description: Put to not existent properties; -*/ - -var __map={}; __map[1]="one"; __map["two"]=2; __map["3"]="tre"; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__map[1] !== "one") { - $ERROR('#1: var __map={}; __map[1]="one"; __map["two"]=2; __map["3"]="tre"; __map[1] === "one". Actual: ' + (__map[1])); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__map["two"] !== 2) { - $ERROR('#2: var __map={}; __map[1]="one"; __map["two"]=2; __map["3"]="tre"; __map["two"] === 2. Actual: ' + (__map["two"])); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__map["3"] !== "tre") { - $ERROR('#3: var __map={}; __map[1]="one"; __map["two"]=2; __map["3"]="tre"; __map["3"] === "tre". Actual: ' + (__map["3"])); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2.2_A2.js b/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2.2_A2.js deleted file mode 100644 index 932a2d1b0..000000000 --- a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2.2_A2.js +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S8.6.2.2_A2; -* @section: 8.6.2.2; -* @assertion: When the [[Put]] method of O is called with property P and value V, -* then set the value of the property to V. The attributes of the property are not changed; -* @description: Put to existent properties; -*/ - -var _map={1:"one",two:2}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -_map[1]="uno"; -if (_map[1] !== "uno") { - $ERROR('#1: var _map={1:"one",two:2}; _map[1]="uno"; _map[1] === "uno". Actual: ' + (_map[1])); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -_map["1"]=1; -if (_map[1] !== 1) { - $ERROR('#2: var _map={1:"one",two:2}; _map[1]="uno"; _map["1"]=1; _map[1] === 1. Actual: ' + (_map[1])); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -_map["two"]="two"; -if (_map["two"] !== "two") { - $ERROR('#3: var _map={1:"one",two:2}; _map[1]="uno"; _map["1"]=1; _map["two"]="two"; _map["two"] === "two". Actual: ' + (_map["two"])); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -_map.two="duo"; -if (_map.two !== "duo") { - $ERROR('#4: var _map={1:"one",two:2}; _map[1]="uno"; _map["1"]=1; _map["two"]="two"; _map.two="duo"; _map.two === "duo". Actual: ' + (_map.two)); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2.3_A1.js b/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2.3_A1.js deleted file mode 100644 index 2b400d186..000000000 --- a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2.3_A1.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S8.6.2.3_A1; - * @section: 8.6.2.3, 8.6.2.2, 8.6.1; - * @assertion: If the property has the ReadOnly attribute, [[CanPut]](P) return false; - * @description: Try put other value for Math.E property; -*/ - -__e = Math.E; -Math.E = 1; -if (Math.E !== __e){ - $ERROR('#1: __e = Math.E; Math.E = 1; Math.E === __e. Actual: ' + (Math.E)); -} diff --git a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2.4_A1.js b/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2.4_A1.js deleted file mode 100644 index e479b8d41..000000000 --- a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2.4_A1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S8.6.2.4_A1; -* @section: 8.6.2.4, 12.6.4; -* @assertion: When the [[HasProperty]] method of O is called with property name P and if O has a property with name P, return true; -* @description: Try find existent property of any Object; -*/ - -var __obj={fooProp:"fooooooo"}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!("fooProp" in __obj)) { - $ERROR('#1: var __obj={fooProp:"fooooooo"}; "fooProp" in __obj'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2.4_A2_T1.js b/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2.4_A2_T1.js deleted file mode 100644 index 95d53195e..000000000 --- a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2.4_A2_T1.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S8.6.2.4_A2_T1; -* @section: 8.6.2.4, 12.6.4; -* @assertion: When the [[HasProperty]] method of O is called with property name P and if O has not a property with name P -* then If the [[Prototype]] of O is null, return false or call the [[HasProperty]] method of [[Prototype]] with property name P; -* @description: Try find not existent property of any Object; -*/ - -var __obj={}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!("valueOf" in __obj)) { - $ERROR('#1: var __obj={}; "valueOf" in __obj'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2.4_A2_T2.js b/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2.4_A2_T2.js deleted file mode 100644 index 6f44a9de5..000000000 --- a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2.4_A2_T2.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S8.6.2.4_A2_T2; -* @section: 8.6.2.4, 12.6.4; -* @assertion: When the [[HasProperty]] method of O is called with property name P and if O has not a property with name P -* then If the [[Prototype]] of O is null, return false or call the [[HasProperty]] method of [[Prototype]] with property name P; -* @description: Try find not existent property of any Object, but existent property of this Object prototype; -*/ - - - -var __proto={phylum:"avis"}; - - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!("valueOf" in __proto)) { - $ERROR('#1: var __proto={phylum:"avis"}; "valueOf" in __proto'); -} -// -////////////////////////////////////////////////////////////////////////////// - -function Robin(){this.name="robin"}; -Robin.prototype=__proto; - -var __my__robin = new Robin; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (!("phylum" in __my__robin)) { - $ERROR('#2: var __proto={phylum:"avis"}; function Robin(){this.name="robin"}; Robin.prototype=__proto; var __my__robin = new Robin; "phylum" in __my__robin'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__my__robin.hasOwnProperty("phylum")) { - $ERROR('#3: var __proto={phylum:"avis"}; function Robin(){this.name="robin"}; Robin.prototype=__proto; var __my__robin = new Robin; __my__robin.hasOwnProperty("phylum") === false. Actual: ' + (__my__robin.hasOwnProperty("phylum"))); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2.4_A3.js b/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2.4_A3.js deleted file mode 100644 index 57270a317..000000000 --- a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2.4_A3.js +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S8.6.2.4_A3; -* @section: 8.6.2.4, 12.6.4; -* @assertion: [[hasProperty]] is sensitive to property existence but [[Get]] is not; -* @description: Use [[hasProperty]] and [[Get]] for existent and not existent properties; -*/ - -var __obj={}; __obj.hole=undefined; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__obj.hole !== undefined) { - $ERROR('#1: var __obj={}; __obj.hole=undefined; __obj.hole === undefined. Actual: ' + (__obj.hole)); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__obj.notexist !== undefined) { - $ERROR('#2: var __obj={}; __obj.hole=undefined; __obj.notexist === undefined. Actual: ' + (__obj.notexist)); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (!("hole" in __obj)) { - $ERROR('#3: var __obj={}; __obj.hole=undefined; "hole" in __obj'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (("notexist" in __obj)) { - $ERROR('#4: var __obj={}; __obj.hole=undefined; "notexist" in __obj'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2.5_A1.js b/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2.5_A1.js deleted file mode 100644 index 4094c3396..000000000 --- a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2.5_A1.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S8.6.2.5_A1; -* @section: 8.6.2.5, 15.8, 11.4.1; -* @assertion: When the [[Delete]] method of O is called with property name P, -* and If the property has the DontDelete attribute, return false; -* @description: Try to delete Math.E, that has the DontDelete attribute; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (delete Math.E !== false){ - $ERROR('#1: delete Math.E === false. Actual: ' + (delete Math.E)); -}; -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (Math.E === undefined){ - $ERROR('#2: delete Math.E; Math.E !== undefined'); -}; -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2.5_A2_T1.js b/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2.5_A2_T1.js deleted file mode 100644 index 8bbf7fd93..000000000 --- a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2.5_A2_T1.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S8.6.2.5_A2_T1; -* @section: 8.6.2.5, 11.4.1; -* @assertion: When the [[Delete]] method of O is called with property name P, -* and if O doesn't have a property with name P, return true; -* @description: Try to delete not existent properties; -*/ - -var __color__map = {}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (delete __color__map.red !== true){ - $ERROR('#1: var __color__map = {}; delete __color__map.red === true. Actual: ' + (delete __color__map.red)); -}; -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (delete __color__map["green"] !== true){ - $ERROR('#2: var __color__map = {}; delete __color__map["green"] === true. Actual: ' + (delete __color__map["green"])); -}; -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -var blue = 1; -if (delete __color__map[blue] !== true){ - $ERROR('#3: var __color__map = {}; var blue = 1; delete __color__map[blue] === true. Actual: ' + (delete __color__map[blue])); -}; -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2.5_A2_T2.js b/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2.5_A2_T2.js deleted file mode 100644 index 7c27f1037..000000000 --- a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2.5_A2_T2.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S8.6.2.5_A2_T2; -* @section: 8.6.2.5, 11.4.1; -* @assertion: When the [[Delete]] method of O is called with property name P, -* and if O doesn't have a property with name P, return true; -* @description: Try to delete not existent properties of O, but existent property of prototype; -*/ - - -function Palette(){}; -Palette.prototype = {red:0xFF0000, green:0x00FF00}; -__palette = new Palette; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__palette.red !== 0xFF0000){ - $ERROR('#1: function Palette(){}; Palette.prototype = {red:0xFF0000, green:0x00FF00}; __palette = new Palette; __palette.red === 0xFF0000. Actual: ' + (__palette.red)); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (delete __palette.red !== true) { - $ERROR('#2 function Palette(){}; Palette.prototype = {red:0xFF0000, green:0x00FF00}; __palette = new Palette; delete __palette.red === true. Actual: ' + (delete __palette.red)); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__palette.red !== 0xFF0000){ - $ERROR('#3: function Palette(){}; Palette.prototype = {red:0xFF0000, green:0x00FF00}; __palette = new Palette; __palette.red === 0xFF0000. Actual: ' + (__palette.red)); -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2.5_A3.js b/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2.5_A3.js deleted file mode 100644 index 489756e55..000000000 --- a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2.5_A3.js +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S8.6.2.5_A3; -* @section: 8.6.2.5, 11.4.1; -* @assertion: When the [[Delete]] method of O is called with property name P, -* removes the property with name P from O and return true; -* @description: Delete existent properties; -*/ -var BLUE_NUM=1; -var BLUE_STR="1"; -var YELLOW_NUM=2; -var YELLOW_STR="2"; -var __color__map = {red:0xFF0000, BLUE_NUM:0x0000FF, green:0x00FF00, YELLOW_STR:0xFFFF00}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (delete __color__map[YELLOW_NUM] !== true){ - $ERROR('#1: var BLUE_NUM=1; var BLUE_STR="1"; var YELLOW_NUM=2; var YELLOW_STR="2"; var __color__map = {red:0xFF0000, BLUE_NUM:0x0000FF, green:0x00FF00, YELLOW_STR:0xFFFF00}; delete __color__map[YELLOW_NUM] === true;'); -}; -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__color__map[YELLOW_STR] !== undefined) { - $ERROR('#2: var BLUE_NUM=1; var BLUE_STR="1"; var YELLOW_NUM=2; var YELLOW_STR="2"; var __color__map = {red:0xFF0000, BLUE_NUM:0x0000FF, green:0x00FF00, YELLOW_STR:0xFFFF00}; delete __color__map[YELLOW_NUM]; __color__map[YELLOW_STR] === undefined. Actual: ' + (__color__map[YELLOW_STR])); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (delete __color__map[BLUE_STR] !== true){ - $ERROR('#3: var BLUE_NUM=1; var BLUE_STR="1"; var YELLOW_NUM=2; var YELLOW_STR="2"; var __color__map = {red:0xFF0000, BLUE_NUM:0x0000FF, green:0x00FF00, YELLOW_STR:0xFFFF00}; delete __color__map[BLUE_STR] === true. Actual: ' + (delete __color__map[BLUE_STR])); -}; -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (__color__map[BLUE_NUM] !== undefined) { - $ERROR('#4: var BLUE_NUM=1; var BLUE_STR="1"; var YELLOW_NUM=2; var YELLOW_STR="2"; var __color__map = {red:0xFF0000, BLUE_NUM:0x0000FF, green:0x00FF00, YELLOW_STR:0xFFFF00}; delete __color__map[BLUE_STR]; __color__map[BLUE_NUM] === undefined. Actual: ' + (__color__map[BLUE_NUM])); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2.6_A1.js b/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2.6_A1.js deleted file mode 100644 index 34bbd8e35..000000000 --- a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2.6_A1.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S8.6.2.6_A1; -* @section: 8.6.2.6, 8.6.2, 9.8, 11.8.6; -* @assertion: This should generate a TypeError, -* Cause we overload toString method so it return non Primitive value -* See ECMA reference at http://bugzilla.mozilla.org/show_bug.cgi?id=167325; -* @description: Try to overload toString method; -*/ - -try -{ - var __obj = {toString: function() {return new Object();}} - String(__obj); - $ERROR('#1.1: var __obj = {toString: function() {return new Object();}}; String(__obj) throw TypeError. Actual: ' + (String(__obj))); -} -catch(e) -{ - if ((e instanceof TypeError) !== true) { - $ERROR('#1.2: var __obj = {toString: function() {return new Object();}}; String(__obj) throw TypeError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2.6_A2.js b/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2.6_A2.js deleted file mode 100644 index f3e93b790..000000000 --- a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2.6_A2.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S8.6.2.6_A2; -* @section: 8.6.2.6, 8.6.2, 9.8; -* @assertion: This should generate no TypeError, -* Cause we overload toString method so it return non Primitive value -* but we overloaded valueOf method too. -* See ECMA reference at http://bugzilla.mozilla.org/show_bug.cgi?id=167325; -* @description: Try to overload toString, that returned new Object, and valueOf methods; -*/ - -try -{ - var __obj = {toString: function() {return new Object();}, valueOf: function() {return 1;}} - if (String(__obj) !== "1") { - $ERROR('#1.1: var __obj = {toString: function() {return new Object();}, valueOf: function() {return 1;}}; String(__obj) === "1". Actual: ' + (String(__obj))); - } -} -catch(e) -{ - $ERROR('#1.2: var __obj = {toString: function() {return new Object();}, valueOf: function() {return 1;}}; String(__obj) === "1". Actual: ' + (e)); -} - diff --git a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2.6_A3.js b/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2.6_A3.js deleted file mode 100644 index 0c9281e42..000000000 --- a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2.6_A3.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S8.6.2.6_A3; -* @section: 8.6.2.6, 8.6.2; -* @assertion: We overload valueOf method so it return non Primitive value -* Thus [[DefaultValue]] must return Object.toString() value; -* @description: Try to overload toString method, that returned Primitive, and valueOf method, that returned new Object; -*/ - - -try -{ - var __obj = {toString: function() {return "1"}, valueOf: function() {return new Object();}} - if (Number(__obj) !== 1) { - $ERROR('#1.1: var __obj = {toNumber: function() {return "1"}, valueOf: function() {return new Object();}}; Number(__obj) === 1. Actual: ' + (Number(__obj))); - } -} -catch(e) -{ - $ERROR('#1.2: var __obj = {toNumber: function() {return "1"}, valueOf: function() {return new Object();}}; Number(__obj) === 1. Actual: ' + (e)); -} - - - - - diff --git a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2.6_A4.js b/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2.6_A4.js deleted file mode 100644 index 2430b62cb..000000000 --- a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2.6_A4.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S8.6.2.6_A4; -* @section: 8.6.2.6, 8.6.2; -* @assertion: We overload valueOf method so it return non Primitive value and toString method so it return non Primitive value too -* Thus [[DefaultValue]] must generate TypeError error; -* @description: Try to overload toString and valueOf methods, they returned new Objects; -*/ - -try -{ - var __obj = {valueOf:function(){return new Object;},toString: function() {return new Object();}} - Number(__obj); - $ERROR('#1.1: var __obj = {valueOf:function(){return new Object;},toNumber: function() {return new Object();}}; Number(__obj) throw TypeError. Actual: ' + (Number(__obj))); -} -catch(e) -{ - if ((e instanceof TypeError) !== true) { - $ERROR('#1.2: var __obj = {valueOf:function(){return new Object;},toNumber: function() {return new Object();}}; Number(__obj) throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2_A1.js b/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2_A1.js deleted file mode 100644 index e3c17318b..000000000 --- a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2_A1.js +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S8.6.2_A1; - * @section: 8.6.2, 15.2.4; - * @assertion: Native ECMAScript objects have an internal property called [[Prototype]]. The value of this property is - * either null or an object and is used for implementing inheritance; - * @description: Check [[Prototype]] property of object; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -var __obj={}; -if (!Object.prototype.isPrototypeOf(__obj)){ - $ERROR('#1: Native ECMAScript objects have an internal property called [[Prototype]]. '); -}; -// -////////////////////////////////////////////////////////////////////////////// - -//Establish proto (base) object -/*function ProtoObj(){ - -};*/ -protoObj={}; -//Establish foo object -function FooObj(){}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -// Invoke instance of foo object -var obj__= new FooObj; - -if (!Object.prototype.isPrototypeOf(obj__)){ - $ERROR('#2.1: protoObj={}; function FooObj(){}; var obj__= new FooObj; Object.prototype.isPrototypeOf(obj__) === true. Actual: ' + (Object.prototype.isPrototypeOf(obj__))); -}; - -if (!FooObj.prototype.isPrototypeOf(obj__)){ - $ERROR('#2.2: protoObj={}; function FooObj(){}; var obj__= new FooObj; FooObj.prototype.isPrototypeOf(obj__) === true. Actual: ' + (FooObj.prototype.isPrototypeOf(obj__))); -}; - -if (protoObj.isPrototypeOf(obj__)){ - $ERROR('#2.3: protoObj={}; function FooObj(){}; var obj__= new FooObj; protoObj.isPrototypeOf(obj__) === false. Actual: ' + (protoObj.isPrototypeOf(obj__))); -}; -// Establish inheritance from proto object -FooObj.prototype=protoObj; - -if (protoObj.isPrototypeOf(obj__)){ - $ERROR('#2.4: protoObj={}; function FooObj(){}; var obj__= new FooObj; FooObj.prototype=protoObj; protoObj.isPrototypeOf(obj__) === false. Actual: ' + (protoObj.isPrototypeOf(obj__))); -}; -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 - -// Invoke instance of foo object -var __foo=new FooObj; - -if (!Object.prototype.isPrototypeOf(__foo)){ - $ERROR('#3.1: protoObj={}; function FooObj(){}; var obj__= new FooObj; FooObj.prototype=protoObj; var __foo=new FooObj; Object.prototype.isPrototypeOf(__foo) === true. Actual: ' + (Object.prototype.isPrototypeOf(__foo))); -}; - -if (!FooObj.prototype.isPrototypeOf(__foo)){ - $ERROR('#3.2: protoObj={}; function FooObj(){}; var obj__= new FooObj; FooObj.prototype=protoObj; var __foo=new FooObj; FooObj.prototype.isPrototypeOf(__foo) === true. Actual: ' + (FooObj.prototype.isPrototypeOf(__foo))); -}; - -if (!protoObj.isPrototypeOf(__foo)){ - $ERROR('#3.3: protoObj={}; function FooObj(){}; var obj__= new FooObj; FooObj.prototype=protoObj; var __foo=new FooObj; protoObj.isPrototypeOf(__foo) === true. Actual: ' + (protoObj.isPrototypeOf(__foo))); -}; -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2_A2.js b/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2_A2.js deleted file mode 100644 index 472593999..000000000 --- a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2_A2.js +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S8.6.2_A2; - * @section: 8.6.2, 15.2.4; - * @assertion: Properties of the [[Prototype]] object - * are visible as properties of the child object for the purposes of get access, but not for put access; - * @description: Check visibility properties of the child object for the purposes of get access, but not for put access; -*/ - -//Establish foo object -function FooObj(){}; -FooObj.prototype.prop="some"; - -// Invoke instance of foo object -var foo= new FooObj; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (foo.prop !== "some"){ - $ERROR('#1: function FooObj(){}; FooObj.prototype.prop="some"; var foo= new FooObj; foo.prop === "some". Actual: ' + (foo.prop)); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -foo.prop=true; -// Invoke another instance of foo object -var foo__ = new FooObj; -if (foo__.prop !== "some"){ - $ERROR('#2: function FooObj(){}; FooObj.prototype.prop="some"; var foo= new FooObj; foo.prop=true; var foo__ = new FooObj; foo__.prop === "some". Actual: ' + (foo__.prop)); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2_A3.js b/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2_A3.js deleted file mode 100644 index 678559f03..000000000 --- a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2_A3.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S8.6.2_A3; -* @section: 8.6.2, 15.2.4.2; -* @assertion: The specification does not provide any means for a program to access [[class]] value except through Object.prototype.toString; -* @description: Get [[class]] value except through Object.prototype.toString; -*/ - -var __obj={}; -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__obj.toString() !== "[object " + 'Object' + "]"){ - $ERROR('#1: var __obj={}; __obj.toString() === "[object " + \'Object\' + "]". Actual: ' + (__obj.toString())); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2_A4.js b/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2_A4.js deleted file mode 100644 index 5faa5ca4c..000000000 --- a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2_A4.js +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S8.6.2_A4; -* @section: 8.6.2, 11.8.6; -* @assertion: [[HasInstance]] returns a boolean value indicating whether Value delegates behaviour to this object; -* @description: Check that the obj instance of Object, but not instance -* of Function, String, Number, Array; -*/ - -var __obj={}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!(__obj instanceof Object)) { - $ERROR('#1: var __obj={}; (__obj instanceof Object) === true. Actual: ' + ((__obj instanceof Object))); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__obj instanceof Function) { - $ERROR('#2: var __obj={}; (__obj instanceof Function) === false. Actual: ' + ((__obj instanceof Function))); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__obj instanceof String) { - $ERROR('#3: var __obj={}; (__obj instanceof String) === false. Actual: ' + ((__obj instanceof String))); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (__obj instanceof Number) { - $ERROR('#4: var __obj={}; (__obj instanceof Number) === false. Actual: ' + ((__obj instanceof Number))); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#5 -if (__obj instanceof Array) { - $ERROR('#5: var __obj={}; (__obj instanceof Array) === false. Actual: ' + ((__obj instanceof Array))); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2_A5_T1.js b/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2_A5_T1.js deleted file mode 100644 index d99ed5717..000000000 --- a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2_A5_T1.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S8.6.2_A5_T1; -* @section: 8.6.2, 13.1, 13.2; -* @assertion: [[Call]] executes code associated with the object; -* @description: Call function-property of object, property defined -* as screen = {touch:function(){count++}}; -*/ - -this.count=0; - -screen = {touch:function(){count++}}; -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -screen.touch(); -if (count !==1) { - $ERROR('#1: this.count=0; screen = {touch:function(){count++}}; screen.touch(); count === 1. Actual: ' + (count)); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -screen['touch'](); -if (count !==2) { - $ERROR('#2: this.count=0; screen = {touch:function(){count++}}; screen.touch(); screen[\'touch\'](); count === 2. Actual: ' + (count)); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2_A5_T2.js b/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2_A5_T2.js deleted file mode 100644 index 18603376e..000000000 --- a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2_A5_T2.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S8.6.2_A5_T2; -* @section: 8.6.2, 13.1, 13.2; -* @assertion: [[Call]] executes code associated with the object; -* @description: Call function-property of object, property defined -* as seat['move']=function(){position++}; -*/ - -this.position=0; -seat = {}; -seat['move']=function(){position++}; -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -seat.move(); -if (position !==1) { - $ERROR('#1: this.position=0; seat = {}; seat[\'move\']=function(){position++}; seat.move(); position === 1. Actual: ' + (position)); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -seat['move'](); -if (position !==2) { - $ERROR('#2: this.position=0; seat = {}; seat[\'move\']=function(){position++}; seat.move(); seat[\'move\'](); position === 2. Actual: ' + (position)); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2_A5_T3.js b/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2_A5_T3.js deleted file mode 100644 index 01f3b0e33..000000000 --- a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2_A5_T3.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S8.6.2_A5_T3; -* @section: 8.6.2, 13.1, 13.2; -* @assertion: [[Call]] executes code associated with the object; -* @description: Call function-property of global object, property defined -* as knock=function(){count++}; -*/ - -count=0; -knock=function(){count++}; -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -knock(); -if (count !==1) { - $ERROR('#1: count=0; knock=function(){count++}; knock(); count === 1. Actual: ' + (count)); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -this['knock'](); -if (count !==2) { - $ERROR('#2: count=0; knock=function(){count++}; knock(); this[\'knock\'](); count === 2. Actual: ' + (count)); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2_A5_T4.js b/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2_A5_T4.js deleted file mode 100644 index 80389e5e3..000000000 --- a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2_A5_T4.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S8.6.2_A5_T4; -* @section: 8.6.2, 13.1, 13.2; -* @assertion: [[Call]] executes code associated with the object; -* @description: Call function-property of global object, property defined -* as this['beep']=function(){__count++}; -*/ - -__count=0; - -this["beep"]=function(){__count++}; -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -beep(); -if (__count !==1) { - $ERROR('#1: __count=0; this["beep"]=function(){__count++}; beep(); __count === 1. Actual: ' + (__count)); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -this["beep"](); -if (__count !==2) { - $ERROR('#2: __count=0; this["beep"]=function(){__count++}; beep(); this["beep"](); __count === 2. Actual: ' + (__count)); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2_A6.js b/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2_A6.js deleted file mode 100644 index e635e7382..000000000 --- a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2_A6.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S8.6.2_A6; -* @section: 8.6.2, 15.2.2; -* @assertion: [[Construct]] constructs an object. Invoked via the new operator. Objects that implement this internal method are called constructors; -* @description: Create a few Objects via the new operator; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -var objInstance=new Object; -if (objInstance.constructor !== Object){ - $ERROR('#1: var objInstance=new Object; objInstance.constructor === Object. Actual: ' + (objInstance.constructor)); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -var numInstance=new Number; -if (numInstance.constructor !== Number){ - $ERROR('#2: var numInstance=new Number; numInstance.constructor === Number. Actual: ' + (numInstance.constructor)); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2_A7.js b/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2_A7.js deleted file mode 100644 index 5fd42b8dd..000000000 --- a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/8.6.2_Internal_Properties_and_Methods/S8.6.2_A7.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S8.6.2_A7; -* @section: 8.6.2, 15.8; -* @assertion: Objects that implement internal method [[Construct]] are called constructors. Math object is NOT constructor; -* @description: Checking if execution of "var objMath=new Math" passes; -* @negative; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -var objMath=new Math; - -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/S8.6_A2_T1.js b/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/S8.6_A2_T1.js deleted file mode 100644 index e50bb3ab4..000000000 --- a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/S8.6_A2_T1.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S8.6_A2_T1; -* @section: 8.6, 11.3.1; -* @assertion: Do not crash with postincrement custom property; -* @description: Try to implement postincrement for custom property; -*/ - -var __map={foo:"bar"}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 - -__map.foo++; -if (!isNaN(__map.foo)) { - $ERROR('#1: var __map={foo:"bar"}; __map.foo++; __map.foo === Not-a-Number. Actual: ' + (__map.foo)); -} - -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/S8.6_A2_T2.js b/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/S8.6_A2_T2.js deleted file mode 100644 index a0b68bfb6..000000000 --- a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/S8.6_A2_T2.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S8.6_A2_T2; -* @section: 8.6, 11.3.1; -* @assertion: Do not crash with postincrement custom property; -* @description: Try to implement postincrement for not declared custom property; -*/ - -var __map={}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!isNaN(__map.foo++)) { - $ERROR('#1: var __map={}; __map.foo === Not-a-Number. Actual: ' + (__map.foo)); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (!("foo" in __map)) { - $ERROR('#2: var __map={}; "foo" in __map'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/S8.6_A3_T1.js b/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/S8.6_A3_T1.js deleted file mode 100644 index 51a6d24b2..000000000 --- a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/S8.6_A3_T1.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S8.6_A3_T1; -* @section: 8.6, 11.4.4; -* @assertion: Do not crash with pefixincrement custom property; -* @description: Try to implement pefixincrement for custom property; -*/ - -var __map={foo:'bar'}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 - -++__map.foo; -if (!isNaN(__map.foo)) { - $ERROR('#1: var __map={foo:"bar"}; ++__map.foo; __map.foo === Not-a-Number. Actual: ' + (__map.foo)); -} - -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/S8.6_A3_T2.js b/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/S8.6_A3_T2.js deleted file mode 100644 index b57f94469..000000000 --- a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/S8.6_A3_T2.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S8.6_A3_T2; -* @section: 8.6, 11.4.4; -* @assertion: Do not crash with pefixincrement custom property; -* @description: Try to implement pefixincrement for not declared custom property; -*/ - -var __map={}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!isNaN(++__map.foo)) { - $ERROR('#1: var __map={}; __map.foo++; __map.foo === Not-a-Number. Actual: ' + (__map.foo)); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (!("foo" in __map)) { - $ERROR('#2: var __map={}; "foo" in __map'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/S8.6_A4_T1.js b/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/S8.6_A4_T1.js deleted file mode 100644 index 4ae85c114..000000000 --- a/tests/ES3/Conformance/08_Types/8.6_The_Object_Type/S8.6_A4_T1.js +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S8.6_A4_T1; - * @section: 8.6, 8.6.1, 15.2.2, 12.6.4; - * @assertion: An Object is an unordered collection of properties; - * @description: Simple using a few custom properties; -*/ - -/////////////////////////////////////////////////////// -// CHECK#1 -obj = {bar:true, some:1, foo:"a"}; - -count=0; - -for (property in obj) count++; - -if (count !== 3){ - $ERROR('#1: obj = {bar:true, some:1, foo:"a"}; count=0; for (property in obj) count++; count === 3. Actual: ' + (count)); -} -// -//////////////////////////////////////////////////////// - -/////////////////////////////////////////////////////// -// CHECK#2 -obj_ = {bar:true}; -obj_.some = 1; -obj_.foo = "a"; - -count=0; - -for (property in obj_) count++; - -if (count !== 3){ - $ERROR('#2: obj_ = {bar:true}; obj_.some = 1; obj_.foo = "a"; count=0; for (property in obj_) count++; count === 3. Actual: ' + (count)); -} -// -//////////////////////////////////////////////////////// - -/////////////////////////////////////////////////////// -// CHECK#3 -obj__ = new Object(); -obj__.bar = true; -obj__.some = 1; -obj__.foo = "a"; - -count=0; - -for (property in obj__) count++; - -if (count !== 3){ - $ERROR('#3: obj__ = new Object(); obj__.bar = true; obj__.some = 1; obj__.foo = "a"; for (property in obj__) count++; count === 3. Actual: ' + (count)); -} -// -//////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/08_Types/8.7_The_Reference_Type/S8.7.1_A1.js b/tests/ES3/Conformance/08_Types/8.7_The_Reference_Type/S8.7.1_A1.js deleted file mode 100644 index 282d76a89..000000000 --- a/tests/ES3/Conformance/08_Types/8.7_The_Reference_Type/S8.7.1_A1.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S8.7.1_A1; -* @section: 8.7.1, 11.4.1; -* @assertion: Delete operator deletes pure property, so it returns true to be applyed to this.property; -* @description: Try to delete this.y, where y is this.y=1; -*/ - -this.y = 1; -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if((delete this.y) !== true){ - $ERROR('#1: this.y = 1; (delete this.y) === true. Actual: ' + ((delete this.y))); -}; -// -////////////////////////////////////////////////////////////////////////////// - - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (this.y !== undefined){ - $ERROR('#2: this.y = 1; (delete this.y) === true; this.y === undefined. Actual: ' + (this.y)); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/08_Types/8.7_The_Reference_Type/S8.7.1_A2.js b/tests/ES3/Conformance/08_Types/8.7_The_Reference_Type/S8.7.1_A2.js deleted file mode 100644 index c013f9283..000000000 --- a/tests/ES3/Conformance/08_Types/8.7_The_Reference_Type/S8.7.1_A2.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S8.7.1_A2; -* @section: 8.7.1; -* @assertion: Delete operator can't delete reference, so it returns false to be applyed to reference; -* @description: Try to delete y, where y is var y=1; -*/ - -var y = 1; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if(delete y){ - $ERROR('#1: y = 1; (delete y) === false. Actual: ' + ((delete y))); -}; -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (y !== 1) { - $ERROR('#2: y = 1; delete y; y === 1. Actual: ' + (y)); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/08_Types/8.7_The_Reference_Type/S8.7.2_A1_T1.js b/tests/ES3/Conformance/08_Types/8.7_The_Reference_Type/S8.7.2_A1_T1.js deleted file mode 100644 index ca5722a9d..000000000 --- a/tests/ES3/Conformance/08_Types/8.7_The_Reference_Type/S8.7.2_A1_T1.js +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S8.7.2_A1_T1; -* @section: 8.7.2; -* @assertion: GetValue(V) mast fail; -* @description: Checking if execution of "'litera'=1;" fails; -* @negative; -*/ - -'litera'=1; diff --git a/tests/ES3/Conformance/08_Types/8.7_The_Reference_Type/S8.7.2_A1_T2.js b/tests/ES3/Conformance/08_Types/8.7_The_Reference_Type/S8.7.2_A1_T2.js deleted file mode 100644 index d09a063d1..000000000 --- a/tests/ES3/Conformance/08_Types/8.7_The_Reference_Type/S8.7.2_A1_T2.js +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S8.7.2_A1_T2; -* @section: 8.7.2; -* @assertion: GetValue(V) mast fail; -* @description: Checking if execution of "1=1" fails; -* @negative; -*/ - -1=1; diff --git a/tests/ES3/Conformance/08_Types/8.7_The_Reference_Type/S8.7.2_A2.js b/tests/ES3/Conformance/08_Types/8.7_The_Reference_Type/S8.7.2_A2.js deleted file mode 100644 index 900786a16..000000000 --- a/tests/ES3/Conformance/08_Types/8.7_The_Reference_Type/S8.7.2_A2.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S8.7.2_A2; -* @section: 8.7.2; -* @assertion: x++ calls GetValue then PutValue so after applying postfix increment(actually conrete operator type is unimportant) -* we must have reference to defined value; -* @description: Execute x++, where x is var x; -*/ - -var x; -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (x !== undefined) { - $ERROR('#1: var x; x === undefined. Actual: ' + (x)); -} -// -////////////////////////////////////////////////////////////////////////////// -x++; -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (x === undefined) { - $ERROR('#2: var x; x++; x !== undefined'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/08_Types/8.7_The_Reference_Type/S8.7.2_A3.js b/tests/ES3/Conformance/08_Types/8.7_The_Reference_Type/S8.7.2_A3.js deleted file mode 100644 index d86917983..000000000 --- a/tests/ES3/Conformance/08_Types/8.7_The_Reference_Type/S8.7.2_A3.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S8.7.2_A3; -* @section: 8.7.2; -* @assertion: this.x++ calls GetValue then PutValue so after applying postfix increment(actually conrete operator type is unimportan) -* we must have reference to defined value; -* @description: Execute this.x++, where this.x is undefined; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (this.x !== undefined) { - $ERROR('#1: this.x === undefined. Actual: ' + (this.x)); -} -// -////////////////////////////////////////////////////////////////////////////// -this.x++; -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (x === undefined) { - $ERROR('#2: this.x; this.x++; x !== undefined'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/08_Types/8.7_The_Reference_Type/S8.7_A1.js b/tests/ES3/Conformance/08_Types/8.7_The_Reference_Type/S8.7_A1.js deleted file mode 100644 index 28fa746c3..000000000 --- a/tests/ES3/Conformance/08_Types/8.7_The_Reference_Type/S8.7_A1.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S8.7_A1; -* @section: 8.7; -* @assertion: Multiple Variables should Referring to a Single Object; -* @description: Create object and refers to the other object, modify a property in the original object. -* We now see that that change is represented in both variables; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK# -// Set obj to an empty object -// -var obj = new Object(); -// objRef now refers to the other object -// -var objRef = obj; -// Modify a property in the original object -objRef.oneProperty = -1; -obj.oneProperty = true; -// We now see that that change is represented in both variables -// (Since they both refer to the same object) -if(objRef.oneProperty !== true){ - $ERROR('#1: var obj = new Object(); var objRef = obj; objRef.oneProperty = -1; obj.oneProperty = true; objRef.oneProperty === true. Actual: ' + (objRef.oneProperty)); -}; -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/08_Types/8.7_The_Reference_Type/S8.7_A2.js b/tests/ES3/Conformance/08_Types/8.7_The_Reference_Type/S8.7_A2.js deleted file mode 100644 index bcb7ab1d1..000000000 --- a/tests/ES3/Conformance/08_Types/8.7_The_Reference_Type/S8.7_A2.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S8.7_A2; -* @section: 8.7; -* @assertion: Reference to Self-Modifying Object remain the integrity; -* @description: Create a reference to the array, and change original array; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -// Create an array of items -var items = new Array( "one", "two", "three" ); -// Create a reference to the array of items -var itemsRef = items; -// Add an item to the original array -items.push( "four" );var itemsRef = items; -// The length of each array should be the same, -// since they both point to the same array object -if( itemsRef.length !== 4){ - $ERROR('#1: var items = new Array( "one", "two", "three" ); var itemsRef = items; items.push( "four" );var itemsRef = items; itemsRef.length !== 4'); -}; -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK# -// Create an array of items -var items = new Array( "one", "two", "three" ); -// Create a reference to the array of items -var itemsRef = items; -// Add an item to the original array -items[1]="duo"; -// The length of each array should be the same, -// since they both point to the same array object -if( itemsRef[1] !== "duo"){ - $ERROR('#2: var items = new Array( "one", "two", "three" ); var itemsRef = items; items[1]="duo"; itemsRef[1] === "duo". Actual: ' + (itemsRef[1])); -}; -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/08_Types/8.7_The_Reference_Type/S8.7_A3.js b/tests/ES3/Conformance/08_Types/8.7_The_Reference_Type/S8.7_A3.js deleted file mode 100644 index 0f5bd2cd8..000000000 --- a/tests/ES3/Conformance/08_Types/8.7_The_Reference_Type/S8.7_A3.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S8.7_A3; -* @section: 8.7; -* @assertion: Changing the Reference of an Object While Maintaining Integrity; -* @description: Create a reference to the array, and redefine original array with new array; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK# -// Set items to an array (object) of strings -var items = new Array( "one", "two", "three" ); -// Set itemsRef to a reference to items -// -var itemsRef = items; -// Set items to equal a new object -// -items = new Array( "new", "array" ); -// items and itemsRef now point to different objects. -// items points to new Array( "new", "array" ) -// itemsRef points to new Array( "one", "two", "three" ) -if( items == itemsRef ){ - $ERROR('#1: var items = new Array( "one", "two", "three" ); var itemsRef = items; items = new Array( "new", "array" ); items != itemsRef'); -}; -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/08_Types/8.7_The_Reference_Type/S8.7_A4.js b/tests/ES3/Conformance/08_Types/8.7_The_Reference_Type/S8.7_A4.js deleted file mode 100644 index 1a6ebc852..000000000 --- a/tests/ES3/Conformance/08_Types/8.7_The_Reference_Type/S8.7_A4.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S8.7_A4; -* @section: 8.7; -* @assertion: Object Modification Resulting in a New Object for Not a Self-Modified Object leads to loss of integrity; -* @description: Create a reference to the string, and Concatenate some new text onto the string object; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK# -// Set item equal to a new string object -var item = new String("test"); -// itemRef now refers to the same string object -var itemRef = item; -// Concatenate some new text onto the string object -// NOTE: This creates a new object, and does not modify -// the original object. -item += "ing"; -// The values of item and itemRef are NOT equal, as a whole -// new string object has been created -if( item == itemRef ){ - $ERROR('#1: var item = new String("test"); var itemRef = item; item += "ing"; item != itemRef'); -}; -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/08_Types/8.7_The_Reference_Type/S8.7_A5_T1.js b/tests/ES3/Conformance/08_Types/8.7_The_Reference_Type/S8.7_A5_T1.js deleted file mode 100644 index ae5b10090..000000000 --- a/tests/ES3/Conformance/08_Types/8.7_The_Reference_Type/S8.7_A5_T1.js +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S8.7_A5_T1; -* @section: 8.7; -* @assertion: Delete unary operator can't delete object to be referenced; -* @description: Delete referenced object, var __ref = obj; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof(__ref) !== "undefined"){ - $ERROR('#1: typeof(__ref) === "undefined". Actual: ' + (typeof(__ref))); -}; -// -////////////////////////////////////////////////////////////////////////////// - -obj = new Object(); -var __ref = obj; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (typeof(__ref) === "undefined"){ - $ERROR('#2: obj = new Object(); var __ref = obj; typeof(__ref) !== "undefined"'); -}; -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (delete __ref !== false){ - $ERROR('#3: obj = new Object(); var __ref = obj; delete __ref === false. Actual: ' + (delete __ref)); -}; -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (typeof(__ref) !== "object"){ - $ERROR('#4: obj = new Object(); var __ref = obj; delete __ref; typeof(__ref) === "object". Actual: ' + (typeof(__ref))); -}; -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#5 -if (typeof(obj) !== "object"){ - $ERROR('#5: obj = new Object(); var __ref = obj; delete __ref; typeof(obj) === "object". Actual: ' + (typeof(obj))); -}; -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/08_Types/8.7_The_Reference_Type/S8.7_A5_T2.js b/tests/ES3/Conformance/08_Types/8.7_The_Reference_Type/S8.7_A5_T2.js deleted file mode 100644 index 388412aa5..000000000 --- a/tests/ES3/Conformance/08_Types/8.7_The_Reference_Type/S8.7_A5_T2.js +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S8.7_A5_T2; -* @section: 8.7, 11.4.1; -* @assertion: Delete unary operator can't delete object to be referenced; -* @description: Delete referenced object, __ref = obj; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof(__ref) !== "undefined"){ - $ERROR('#1: typeof(__ref) === "undefined". Actual: ' + (typeof(__ref))); -}; -// -////////////////////////////////////////////////////////////////////////////// - -obj = new Object(); -__ref = obj; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (typeof(__ref) === "undefined"){ - $ERROR('#2: obj = new Object(); __ref = obj; typeof(__ref) !== "undefined"'); -}; -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (delete __ref !== true){ - $ERROR('#3: obj = new Object(); __ref = obj; delete __ref === true. Actual: ' + (delete __ref)); -}; -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (typeof(__ref) !== "undefined"){ - $ERROR('#4: obj = new Object(); __ref = obj; delete __ref; typeof(__ref) === "undefined". Actual: ' + (typeof(__ref))); -}; -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#5 -if (typeof(obj) !== "object"){ - $ERROR('#5: obj = new Object(); __ref = obj; delete __ref; typeof(obj) === "object". Actual: ' + (typeof(obj))); -}; -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/08_Types/8.7_The_Reference_Type/S8.7_A6.js b/tests/ES3/Conformance/08_Types/8.7_The_Reference_Type/S8.7_A6.js deleted file mode 100644 index 2dcc88c0a..000000000 --- a/tests/ES3/Conformance/08_Types/8.7_The_Reference_Type/S8.7_A6.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S8.7_A6; -* @section: 8.7; -* @assertion: Passing arguments by value differs from by reference and do not change values to be passed; -* @description: Adding original variable with referenced one inside function; -*/ - -var n = 1; -var m = n; - -function addFirst2Second(first, second){first += second;} - -addFirst2Second(n, m); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (m !== 1) { - $ERROR('#1: var n = 1; var m = n; function addFirst2Second(first, second){first += second;} addFirst2Second(n, m); m === 1. Actual: ' + (m)); -} - -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/08_Types/8.7_The_Reference_Type/S8.7_A7.js b/tests/ES3/Conformance/08_Types/8.7_The_Reference_Type/S8.7_A7.js deleted file mode 100644 index da269cdbd..000000000 --- a/tests/ES3/Conformance/08_Types/8.7_The_Reference_Type/S8.7_A7.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S8.7_A7; -* @section: 8.7; -* @assertion: Passing arguments by reference do change values of reference to be passed; -* @description: Add new property to original variable inside function; -*/ - -var n = {}; -var m = n; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof m !== "object") { - $ERROR('#1: var n = {}; var m = n; typeof m === "object". Actual: ' + (typeof m)); -} -// -////////////////////////////////////////////////////////////////////////////// - -function populateAge(person){person.age = 50;} - -populateAge(m); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (n.age !== 50) { - $ERROR('#2: var n = {}; var m = n; function populateAge(person){person.age = 50;} populateAge(m); n.age === 50. Actual: ' + (n.age)); -} - -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/08_Types/8.8_The_List_Type/S8.8_A2_T1.js b/tests/ES3/Conformance/08_Types/8.8_The_List_Type/S8.8_A2_T1.js deleted file mode 100644 index 77ebc215e..000000000 --- a/tests/ES3/Conformance/08_Types/8.8_The_List_Type/S8.8_A2_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S8.8_A2_T1; -* @section: 8.8; -* @assertion: Values of the List type are simply ordered sequences of values; -* @description: Call function __mFunc(1,2,3) with 3 arguments; -*/ - -function __mFunc(){return arguments.length;}; -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__mFunc(1,2,3) !== 3){ - $ERROR('#1: function __mFunc(){return arguments.length;}; __mFunc(1,2,3) === 3. Actual: ' + (__mFunc(1,2,3))); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/08_Types/8.8_The_List_Type/S8.8_A2_T2.js b/tests/ES3/Conformance/08_Types/8.8_The_List_Type/S8.8_A2_T2.js deleted file mode 100644 index f00a6f89e..000000000 --- a/tests/ES3/Conformance/08_Types/8.8_The_List_Type/S8.8_A2_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S8.8_A2_T2; -* @section: 8.8; -* @assertion: Values of the List type are simply ordered sequences of values; -* @description: Call function __mFunc([,,]) with 1 arguments; -*/ - -function __mFunc(){return arguments.length;}; -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__mFunc([,,]) !== 1){ - $ERROR('#1: function __mFunc(){return arguments.length;}; __mFunc([,,]) === 1. Actual: ' + (__mFunc([,,]))); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/08_Types/8.8_The_List_Type/S8.8_A2_T3.js b/tests/ES3/Conformance/08_Types/8.8_The_List_Type/S8.8_A2_T3.js deleted file mode 100644 index 88cd24ae6..000000000 --- a/tests/ES3/Conformance/08_Types/8.8_The_List_Type/S8.8_A2_T3.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S8.8_A2_T3; -* @section: 8.8; -* @assertion: Values of the List type are simply ordered sequences of values; -* @description: Call function, that concatenate all it`s arguments; -*/ - -function __mFunc(){var __accum=""; for (var i = 0; i < arguments.length; ++i){__accum += arguments[i]};return __accum;}; -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__mFunc("A","B","C","D","E","F") !== "ABCDEF"){ - $ERROR('#1: function __mFunc(){var __accum=""; for (var i = 0; i < arguments.length; ++i){__accum += arguments[i]};return __accum;}; __mFunc("A","B","C","D","E","F") === "ABCDEF". Actual: ' + (__mFunc("A","B","C","D","E","F"))); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.1_ToPrimitive/S9.1_A1_T1.js b/tests/ES3/Conformance/09_Type_Conversion/9.1_ToPrimitive/S9.1_A1_T1.js deleted file mode 100644 index ee3de33af..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.1_ToPrimitive/S9.1_A1_T1.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.1_A1_T1; - * @section: 9.1; - * @assertion: Result of primitive conversion from object is a default value for the Object; - * @description: Using operator Number. The operator calls ToPrimitive with hint Number; -*/ - -// CHECK#1 -var object = {valueOf: function() {return "1"}, toString: function() {return 0}}; -if (Number(object) !== 1) { - $ERROR('#1: var object = {valueOf: function() {return "1"}, toString: function() {return 0}}; Number(object) === 1. Actual: ' + (Number(object))); -} - -// CHECK#2 -var object = {valueOf: function() {return {}}, toString: function() {return "0"}}; -if (Number(object) !== 0) { - $ERROR('#2: var object = {valueOf: function() {return {}}, toString: function() {return "0"}}; Number(object) === 0. Actual: ' + (Number(object))); -} - diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.1_ToPrimitive/S9.1_A1_T2.js b/tests/ES3/Conformance/09_Type_Conversion/9.1_ToPrimitive/S9.1_A1_T2.js deleted file mode 100644 index 173ef644a..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.1_ToPrimitive/S9.1_A1_T2.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.1_A1_T2; - * @section: 9.1; - * @assertion: Result of primitive conversion from object is a default value for the Object; - * @description: Using operator Number. This operator calls ToPrimitive with hint Number; -*/ - -// CHECK#1 -var object = {valueOf: function() {return 0}, toString: function() {return 1}}; -if (String(object) !== "1") { - $ERROR('#1: var object = {valueOf: function() {return 0}, toString: function() {return 1}}; String(object) === "1". Actual: ' + (String(object))); -} - -// CHECK#2 -var object = {valueOf: function() {return 0}, toString: function() {return {}}}; -if (String(object) !== "0") { - $ERROR('#2: var object = {valueOf: function() {return 0}, toString: function() {return {}}}; String(object) === "0". Actual: ' + (String(object))); -} - diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.1_ToPrimitive/S9.1_A1_T3.js b/tests/ES3/Conformance/09_Type_Conversion/9.1_ToPrimitive/S9.1_A1_T3.js deleted file mode 100644 index 1cd3f43b2..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.1_ToPrimitive/S9.1_A1_T3.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.1_A1_T3; - * @section: 9.1; - * @assertion: Result of primitive conversion from object is a default value for the Object; - * @description: Using operator "+". This operator firstly calls ToPrimitive and then calls ToString or ToNumber; -*/ - -// CHECK#1 -var object = {valueOf: function() {return 1}, toString: function() {return 0}}; -if (object + "" !== "1") { - $ERROR('#1: var object = {valueOf: function() {return 1}, toString: function() {return 0}}; object + "" === "1". Actual: ' + (object + "")); -} - -// CHECK#2 -var object = {valueOf: function() {return "1"}, toString: function() {return 0}}; -if (object + 0 !== "10") { - $ERROR('#2: var object = {valueOf: function() {return "1"}, toString: function() {return 0}}; object + 0 === "10". Actual: ' + (object + 0)); -} - diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.1_ToPrimitive/S9.1_A1_T4.js b/tests/ES3/Conformance/09_Type_Conversion/9.1_ToPrimitive/S9.1_A1_T4.js deleted file mode 100644 index 2cceed535..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.1_ToPrimitive/S9.1_A1_T4.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.1_A1_T4; - * @section: 9.1; - * @assertion: Result of primitive conversion from object is a default value for the Object; - * @description: Using operator "<". The operator firstly calls ToPrimitive and then calls ToString or ToNumber; -*/ - -// CHECK#1 -var object = {valueOf: function() {return -2}, toString: function() {return "-2"}}; -if ("-1" < object) { - $ERROR('#1: var object = {valueOf: function() {return -2}, toString: function() {return "-2"}}; "-1" < object'); -} - -// CHECK#2 -var object = {valueOf: function() {return "-2"}, toString: function() {return -2}}; -if (object < "-1") { - $ERROR('#2: var object = {valueOf: function() {return "-2"}, toString: function() {return -2}}; object < "-1"'); -} - diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.2_ToBoolean/S9.2_A1_T1.js b/tests/ES3/Conformance/09_Type_Conversion/9.2_ToBoolean/S9.2_A1_T1.js deleted file mode 100644 index 206a5dd42..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.2_ToBoolean/S9.2_A1_T1.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.2_A1_T1; - * @section: 9.2, 15.6.1; - * @assertion: Result of boolean conversion from undefined value is false; - * @description: Undefined, void and others are converted to Boolean by explicit transformation; -*/ - -// CHECK#1 -if (Boolean(undefined) !== false) { - $ERROR('#1: Boolean(undefined) === false. Actual: ' + (Boolean(undefined))); -} - -// CHECK#2 -if (Boolean(void 0) !== false) { - $ERROR('#2: Boolean(undefined) === false. Actual: ' + (Boolean(undefined))); -} - -// CHECK#3 -if (Boolean(eval("var x")) !== false) { - $ERROR('#3: Boolean(eval("var x")) === false. Actual: ' + (Boolean(eval("var x")))); -} - -// CHECK#4 -if (Boolean() !== false) { - $ERROR('#4: Boolean() === false. Actual: ' + (Boolean())); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.2_ToBoolean/S9.2_A1_T2.js b/tests/ES3/Conformance/09_Type_Conversion/9.2_ToBoolean/S9.2_A1_T2.js deleted file mode 100644 index 33484189f..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.2_ToBoolean/S9.2_A1_T2.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.2_A1_T2; - * @section: 9.2, 11.4.9; - * @assertion: Result of boolean conversion from undefined value is false; - * @description: Undefined, void and others are converted to Boolean by implicit transformation; -*/ - -// CHECK#1 -if (!(undefined) !== true) { - $ERROR('#1: !(undefined) === true. Actual: ' + (!(undefined))); -} - -// CHECK#2 -if (!(void 0) !== true) { - $ERROR('#2: !(undefined) === true. Actual: ' + (!(undefined))); -} - -// CHECK#3 -if (!(eval("var x")) !== true) { - $ERROR('#3: !(eval("var x")) === true. Actual: ' + (!(eval("var x")))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.2_ToBoolean/S9.2_A2_T1.js b/tests/ES3/Conformance/09_Type_Conversion/9.2_ToBoolean/S9.2_A2_T1.js deleted file mode 100644 index 0e2ab850a..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.2_ToBoolean/S9.2_A2_T1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.2_A2_T1; - * @section: 9.2, 15.6.1; - * @assertion: Result of boolean conversion from null value is false; - * @description: null convert to Boolean by explicit transformation; -*/ - -// CHECK#1 -if (Boolean(null) !== false) { - $ERROR('#1: Boolean(null) === false. Actual: ' + (Boolean(null))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.2_ToBoolean/S9.2_A2_T2.js b/tests/ES3/Conformance/09_Type_Conversion/9.2_ToBoolean/S9.2_A2_T2.js deleted file mode 100644 index c8c90438e..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.2_ToBoolean/S9.2_A2_T2.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.2_A2_T2; - * @section: 9.2, 11.4.9; - * @assertion: Result of boolean conversion from null value is false; - * @description: null convert to Boolean by implicit transformation; -*/ - -// CHECK#1 -if (!(null) !== true) { - $ERROR('#1: !(null) === true. Actual: ' + (!(null))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.2_ToBoolean/S9.2_A3_T1.js b/tests/ES3/Conformance/09_Type_Conversion/9.2_ToBoolean/S9.2_A3_T1.js deleted file mode 100644 index 7d3d0326f..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.2_ToBoolean/S9.2_A3_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.2_A3_T1; - * @section: 9.2, 15.6.1; - * @assertion: Result of boolean conversion from boolean value is no conversion; - * @description: true and false convert to Boolean by explicit transformation; -*/ - -// CHECK#1 -if (Boolean(true) !== true) { - $ERROR('#1: Boolean(true) === true. Actual: ' + (Boolean(true))); -} - -// CHECK#2 -if (Boolean(false) !== false) { - $ERROR('#2: Boolean(false) === false. Actual: ' + (Boolean(false))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.2_ToBoolean/S9.2_A3_T2.js b/tests/ES3/Conformance/09_Type_Conversion/9.2_ToBoolean/S9.2_A3_T2.js deleted file mode 100644 index 728d567a0..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.2_ToBoolean/S9.2_A3_T2.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.2_A3_T2; - * @section: 9.2, 11.4.9; - * @assertion: Result of boolean conversion from boolean value is no conversion; - * @description: true and false convert to Boolean by implicit transformation; -*/ - -// CHECK#1 -if (!(true) !== false) { - $ERROR('#1: !(true) === false. Actual: ' + (!(true))); -} - -// CHECK#2 -if (!(false) !== true) { - $ERROR('#2: !(false) === true. Actual: ' + (!(false))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.2_ToBoolean/S9.2_A4_T1.js b/tests/ES3/Conformance/09_Type_Conversion/9.2_ToBoolean/S9.2_A4_T1.js deleted file mode 100644 index a07eac31e..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.2_ToBoolean/S9.2_A4_T1.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.2_A4_T1; - * @section: 9.2, 15.6.1; - * @assertion: Result of boolean conversion from number value is false if the argument is +0, -0, or NaN; otherwise, is true; - * @description: +0, -0 and NaN convert to Boolean by explicit transformation; -*/ - -// CHECK#1 -if (Boolean(+0) !== false) { - $ERROR('#1: Boolean(+0) === false. Actual: ' + (Boolean(+0))); -} - -// CHECK#2 -if (Boolean(-0) !== false) { - $ERROR('#2: Boolean(-0) === false. Actual: ' + (Boolean(-0))); -} - -// CHECK#3 -if (Boolean(Number.NaN) !== false) { - $ERROR('#3: Boolean(Number.NaN) === false. Actual: ' + (Boolean(Number.NaN))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.2_ToBoolean/S9.2_A4_T2.js b/tests/ES3/Conformance/09_Type_Conversion/9.2_ToBoolean/S9.2_A4_T2.js deleted file mode 100644 index feece6042..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.2_ToBoolean/S9.2_A4_T2.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.2_A4_T2; - * @section: 9.2, 11.4.9; - * @assertion: Result of boolean conversion from number value is false if the argument is +0, -0, or NaN; otherwise, is true; - * @description: +0, -0 and NaN convert to Boolean by implicit transformation; -*/ - -// CHECK#1 -if (!(+0) !== true) { - $ERROR('#1: !(+0) === true. Actual: ' + (!(+0))); -} - -// CHECK#2 -if (!(-0) !== true) { - $ERROR('#2: !(-0) === true. Actual: ' + (!(-0))); -} - -// CHECK#3 -if (!(Number.NaN) !== true) { - $ERROR('#3: !(Number.NaN) === true. Actual: ' + (!(Number.NaN))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.2_ToBoolean/S9.2_A4_T3.js b/tests/ES3/Conformance/09_Type_Conversion/9.2_ToBoolean/S9.2_A4_T3.js deleted file mode 100644 index e0b8042be..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.2_ToBoolean/S9.2_A4_T3.js +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.2_A4_T3; - * @section: 9.2, 15.6.1; - * @assertion: Result of boolean conversion from number value is false if the argument is +0, -0, or NaN; otherwise, is true; - * @description: Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY, - * Number.MAX_VALUE, Number.MIN_VALUE and some numbers convert to Boolean by explicit transformation; - */ - -// CHECK#1 -if (Boolean(Number.POSITIVE_INFINITY) !== true) { - $ERROR('#1: Boolean(+Infinity) === true. Actual: ' + (Boolean(+Infinity))); -} - -// CHECK#2; -if (Boolean(Number.NEGATIVE_INFINITY) !== true) { - $ERROR('#2: Boolean(-Infinity) === true. Actual: ' + (Boolean(-Infinity))); -} - -// CHECK#3 -if (Boolean(Number.MAX_VALUE) !== true) { - $ERROR('#3: Boolean(Number.MAX_VALUE) === true. Actual: ' + (Boolean(Number.MAX_VALUE))); -} - -// CHECK#4 -if (Boolean(Number.MIN_VALUE) !== true) { - $ERROR('#4: Boolean(Number.MIN_VALUE) === true. Actual: ' + (Boolean(Number.MIN_VALUE))); -} - -// CHECK#5 -if (Boolean(13) !== true) { - $ERROR('#5: Boolean(13) === true. Actual: ' + (Boolean(13))); -} - -// CHECK#6 -if (Boolean(-13) !== true) { - $ERROR('#6: Boolean(-13) === true. Actual: ' + (Boolean(-13))); -} - -// CHECK#7 -if (Boolean(1.3) !== true) { - $ERROR('#7: Boolean(1.3) === true. Actual: ' + (Boolean(1.3))); -} - -// CHECK#8 -if (Boolean(-1.3) !== true) { - $ERROR('#8: Boolean(-1.3) === true. Actual: ' + (Boolean(-1.3))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.2_ToBoolean/S9.2_A4_T4.js b/tests/ES3/Conformance/09_Type_Conversion/9.2_ToBoolean/S9.2_A4_T4.js deleted file mode 100644 index 036d8197a..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.2_ToBoolean/S9.2_A4_T4.js +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.2_A4_T4; - * @section: 9.2, 11.4.9; - * @assertion: Result of boolean conversion from number value is false if the argument is +0, -0, or NaN; otherwise, is true; - * @description: Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY, - * Number.MAX_VALUE, Number.MIN_VALUE and some other numbers are converted to Boolean by implicit transformation; - */ - -// CHECK#1 -if (!(Number.POSITIVE_INFINITY) !== false) { - $ERROR('#1: !(+Infinity) === false. Actual: ' + (!(+Infinity))); -} - -// CHECK#2; -if (!(Number.NEGATIVE_INFINITY) !== false) { - $ERROR('#2: !(-Infinity) === false. Actual: ' + (!(-Infinity))); -} - -// CHECK#3 -if (!(Number.MAX_VALUE) !== false) { - $ERROR('#3: !(Number.MAX_VALUE) === false. Actual: ' + (!(Number.MAX_VALUE))); -} - -// CHECK#4 -if (!(Number.MIN_VALUE) !== false) { - $ERROR('#4: !(Number.MIN_VALUE) === false. Actual: ' + (!(Number.MIN_VALUE))); -} - -// CHECK#5 -if (!(13) !== false) { - $ERROR('#5: !(13) === false. Actual: ' + (!(13))); -} - -// CHECK#6 -if (!(-13) !== false) { - $ERROR('#6: !(-13) === false. Actual: ' + (!(-13))); -} - -// CHECK#7 -if (!(1.3) !== false) { - $ERROR('#7: !(1.3) === false. Actual: ' + (!(1.3))); -} - -// CHECK#8 -if (!(-1.3) !== false) { - $ERROR('#8: !(-1.3) === false. Actual: ' + (!(-1.3))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.2_ToBoolean/S9.2_A5_T1.js b/tests/ES3/Conformance/09_Type_Conversion/9.2_ToBoolean/S9.2_A5_T1.js deleted file mode 100644 index aff1af952..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.2_ToBoolean/S9.2_A5_T1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.2_A5_T1; - * @section: 9.2, 15.6.1; - * @assertion: Result of boolean conversion from nonempty string value (length is not zero) is true; from empty String (length is zero) is false; - * @description: "" is converted to Boolean by explicit transformation; -*/ - -// CHECK#1 -if (Boolean("") !== false) { - $ERROR('#1: Boolean("") === false. Actual: ' + (Boolean(""))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.2_ToBoolean/S9.2_A5_T2.js b/tests/ES3/Conformance/09_Type_Conversion/9.2_ToBoolean/S9.2_A5_T2.js deleted file mode 100644 index 319a0b115..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.2_ToBoolean/S9.2_A5_T2.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.2_A5_T2; - * @section: 9.2, 11.4.9; - * @assertion: Result of boolean conversion from nonempty string value (length is not zero) is true; from empty String (length is zero) is false; - * @description: "" convert to Boolean by implicit transformation; -*/ - -// CHECK#1 -if (!("") !== true) { - $ERROR('#1: !("") === true. Actual: ' + (!(""))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.2_ToBoolean/S9.2_A5_T3.js b/tests/ES3/Conformance/09_Type_Conversion/9.2_ToBoolean/S9.2_A5_T3.js deleted file mode 100644 index 5d23db0de..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.2_ToBoolean/S9.2_A5_T3.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.2_A5_T3; - * @section: 9.2, 15.6.1; - * @assertion: Result of boolean conversion from nonempty string value (length is not zero) is true; from empty String (length is zero) is false; - * @description: Any nonempty string convert to Boolean by explicit transformation; -*/ - -// CHECK#1 -if (Boolean(" ") !== true) { - $ERROR('#1: Boolean(" ") === true. Actual: ' + (Boolean(" "))); -} - -// CHECK#2 -if (Boolean("Nonempty String") !== true) { - $ERROR('#2: Boolean("Nonempty String") === true. Actual: ' + (Boolean("Nonempty String"))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.2_ToBoolean/S9.2_A5_T4.js b/tests/ES3/Conformance/09_Type_Conversion/9.2_ToBoolean/S9.2_A5_T4.js deleted file mode 100644 index b7fbc0698..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.2_ToBoolean/S9.2_A5_T4.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.2_A5_T4; - * @section: 9.2, 11.4.9; - * @assertion: Result of boolean conversion from nonempty string value (length is not zero) is true; from empty String (length is zero) is false; - * @description: Any nonempty string convert to Boolean by implicit transformation; -*/ - -// CHECK#1 -if (!(" ") !== false) { - $ERROR('#1: !(" ") === false. Actual: ' + (!(" "))); -} - -// CHECK#2 -if (!("Nonempty String") !== false) { - $ERROR('#2: !("Nonempty String") === false. Actual: ' + (!("Nonempty String"))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.2_ToBoolean/S9.2_A6_T1.js b/tests/ES3/Conformance/09_Type_Conversion/9.2_ToBoolean/S9.2_A6_T1.js deleted file mode 100644 index 30f15a9b8..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.2_ToBoolean/S9.2_A6_T1.js +++ /dev/null @@ -1,104 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.2_A6_T1; - * @section: 9.2, 15.6.1; - * @assertion: Result of boolean conversion from object is true; - * @description: Different objects convert to Boolean by explicit transformation; -*/ - -// CHECK#1 -if (Boolean(new Object()) !== true) { - $ERROR('#1: Boolean(new Object()) === true. Actual: ' + (Boolean(new Object()))); -} - -// CHECK#2 -if (Boolean(new String("")) !== true) { - $ERROR('#2: Boolean(new String("")) === true. Actual: ' + (Boolean(new String("")))); -} - -// CHECK#3 -if (Boolean(new String()) !== true) { - $ERROR('#3: Boolean(new String()) === true. Actual: ' + (Boolean(new String()))); -} - -// CHECK#4 -if (Boolean(new Boolean(true)) !== true) { - $ERROR('#4: Boolean(new Boolean(true)) === true. Actual: ' + (Boolean(new Boolean(true)))); -} - -// CHECK#5 -if (Boolean(new Boolean(false)) !== true) { - $ERROR('#5: Boolean(new Boolean(false)) === true. Actual: ' + (Boolean(new Boolean(false)))); -} - -// CHECK#6 -if (Boolean(new Boolean()) !== true) { - $ERROR('#6: Boolean(new Boolean()) === true. Actual: ' + (Boolean(new Boolean()))); -} - -// CHECK#7 -if (Boolean(new Array()) !== true) { - $ERROR('#7: Boolean(new Array()) === true. Actual: ' + (Boolean(new Array()))); -} - -// CHECK#8 -if (Boolean(new Number()) !== true) { - $ERROR('#8: Boolean(new Number()) === true. Actual: ' + (Boolean(new Number()))); -} - -// CHECK#9 -if (Boolean(new Number(-0)) !== true) { - $ERROR('#9: Boolean(new Number(-0)) === true. Actual: ' + (Boolean(new Number(-0)))); -} - -// CHECK#10 -if (Boolean(new Number(0)) !== true) { - $ERROR('#10: Boolean(new Number(0)) === true. Actual: ' + (Boolean(new Number(0)))); -} - -// CHECK#11 -if (Boolean(new Number()) !== true) { - $ERROR('#11: Boolean(new Number()) === true. Actual: ' + (Boolean(new Number()))); -} - -// CHECK#12 -if (Boolean(new Number(Number.NaN)) !== true) { - $ERROR('#12: Boolean(new Number(Number.NaN)) === true. Actual: ' + (Boolean(new Number(Number.NaN)))); -} - -// CHECK#13 -if (Boolean(new Number(-1)) !== true) { - $ERROR('#13: Boolean(new Number(-1)) === true. Actual: ' + (Boolean(new Number(-1)))); -} - -// CHECK#14 -if (Boolean(new Number(1)) !== true) { - $ERROR('#14: Boolean(new Number(1)) === true. Actual: ' + (Boolean(new Number(1)))); -} - -// CHECK#15 -if (Boolean(new Number(Number.POSITIVE_INFINITY)) !== true) { - $ERROR('#15: Boolean(new Number(Number.POSITIVE_INFINITY)) === true. Actual: ' + (Boolean(new Number(Number.POSITIVE_INFINITY)))); -} - -// CHECK#16 -if (Boolean(new Number(Number.NEGATIVE_INFINITY)) !== true) { - $ERROR('#16: Boolean(new Number(Number.NEGATIVE_INFINITY)) === true. Actual: ' + (Boolean(new Number(Number.NEGATIVE_INFINITY)))); -} - -// CHECK#17 -if (Boolean(new Function()) !== true) { - $ERROR('#17: Boolean(new Function()) === true. Actual: ' + (Boolean(new Function()))); -} - -// CHECK#18 -if (Boolean(new Date()) !== true) { - $ERROR('#18: Boolean(new Date()) === true. Actual: ' + (Boolean(new Date()))); -} - -// CHECK#19 -if (Boolean(new Date(0)) !== true) { - $ERROR('#19: Boolean(new Date(0)) === true. Actual: ' + (Boolean(new Date(0)))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.2_ToBoolean/S9.2_A6_T2.js b/tests/ES3/Conformance/09_Type_Conversion/9.2_ToBoolean/S9.2_A6_T2.js deleted file mode 100644 index 38c791a79..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.2_ToBoolean/S9.2_A6_T2.js +++ /dev/null @@ -1,104 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.2_A6_T2; - * @section: 9.2, 11.4.9; - * @assertion: Result of boolean conversion from object is true; - * @description: Different objects convert to Boolean by implicit transformation; -*/ - -// CHECK#1 -if (!(new Object()) !== false) { - $ERROR('#1: !(new Object()) === false. Actual: ' + (!(new Object()))); -} - -// CHECK#2 -if (!(new String("")) !== false) { - $ERROR('#2: !(new String("")) === false. Actual: ' + (!(new String("")))); -} - -// CHECK#3 -if (!(new String()) !== false) { - $ERROR('#3: !(new String()) === false. Actual: ' + (!(new String()))); -} - -// CHECK#4 -if (!(new Boolean(true)) !== false) { - $ERROR('#4: !(new Boolean(true)) === false. Actual: ' + (!(new Boolean(true)))); -} - -// CHECK#5 -if (!(new Boolean(false)) !== false) { - $ERROR('#5: !(new Boolean(false)) === false. Actual: ' + (!(new Boolean(false)))); -} - -// CHECK#6 -if (!(new Boolean()) !== false) { - $ERROR('#6: !(new Boolean()) === false. Actual: ' + (!(new Boolean()))); -} - -// CHECK#7 -if (!(new Array()) !== false) { - $ERROR('#7: !(new Array()) === false. Actual: ' + (!(new Array()))); -} - -// CHECK#8 -if (!(new Number()) !== false) { - $ERROR('#8: !(new Number()) === false. Actual: ' + (!(new Number()))); -} - -// CHECK#9 -if (!(new Number(-0)) !== false) { - $ERROR('#9: !(new Number(-0)) === false. Actual: ' + (!(new Number(-0)))); -} - -// CHECK#10 -if (!(new Number(0)) !== false) { - $ERROR('#10: !(new Number(0)) === false. Actual: ' + (!(new Number(0)))); -} - -// CHECK#11 -if (!(new Number()) !== false) { - $ERROR('#11: !(new Number()) === false. Actual: ' + (!(new Number()))); -} - -// CHECK#12 -if (!(new Number(Number.NaN)) !== false) { - $ERROR('#12: !(new Number(Number.NaN)) === false. Actual: ' + (!(new Number(Number.NaN)))); -} - -// CHECK#13 -if (!(new Number(-1)) !== false) { - $ERROR('#13: !(new Number(-1)) === false. Actual: ' + (!(new Number(-1)))); -} - -// CHECK#14 -if (!(new Number(1)) !== false) { - $ERROR('#14: !(new Number(1)) === false. Actual: ' + (!(new Number(1)))); -} - -// CHECK#15 -if (!(new Number(Number.POSITIVE_INFINITY)) !== false) { - $ERROR('#15: !(new Number(Number.POSITIVE_INFINITY)) === false. Actual: ' + (!(new Number(Number.POSITIVE_INFINITY)))); -} - -// CHECK#16 -if (!(new Number(Number.NEGATIVE_INFINITY)) !== false) { - $ERROR('#16: !(new Number(Number.NEGATIVE_INFINITY)) === false. Actual: ' + (!(new Number(Number.NEGATIVE_INFINITY)))); -} - -// CHECK#17 -if (!(new Function()) !== false) { - $ERROR('#17: !(new Function()) === false. Actual: ' + (!(new Function()))); -} - -// CHECK#18 -if (!(new Date()) !== false) { - $ERROR('#18: !(new Date()) === false. Actual: ' + (!(new Date()))); -} - -// CHECK#19 -if (!(new Date(0)) !== false) { - $ERROR('#19: !(new Date(0)) === false. Actual: ' + (!(new Date(0)))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A1.js b/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A1.js deleted file mode 100644 index 50d235b1c..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.3.1_A1; - * @section: 9.3.1, 15.7.1; - * @assertion: The MV of StringNumericLiteral ::: [empty] is 0; - * @description: Number('') convert to Number by explicit transformation; -*/ - -// CHECK#1 -if (Number("") !== 0) { - $ERROR('#1.1: Number("") === 0. Actual: ' + (Number(""))); -} else { - if (1/Number("") !== Number.POSITIVE_INFINITY) { - $ERROR('#1.2: Number("") == +0. Actual: -0'); - } -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A10.js b/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A10.js deleted file mode 100644 index 31bad3828..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A10.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.3.1_A10; - * @section: 9.3.1, 15.7.1; - * @assertion: The MV of StrUnsignedDecimalLiteral:::. DecimalDigits is the - * MV of DecimalDigits times 10-n, where n is the - * number of characters in DecimalDigits; - * @description: Compare Number('.12345') with +('12345')*1e-5; -*/ - -// CHECK#1 -if (Number(".12345") !== +("12345")*1e-5) { - $ERROR('#1: Number(".12345") === +("12345")*1e-5'); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A11.js b/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A11.js deleted file mode 100644 index 29434387e..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A11.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.3.1_A11; - * @section: 9.3.1, 15.7.1; - * @assertion: The MV of StrUnsignedDecimalLiteral:::. DecimalDigits ExponentPart - * is the MV of DecimalDigits times 10e-n, where n is - * the number of characters in DecimalDigits and e is the MV of ExponentPart; - * @description: Compare Number('.12345e6') with +('12345')*1e1, - * and Number('.12345e-3') !== Number('12345')*1e-8; -*/ - -// CHECK#1 -if (Number(".12345e6") !== +("12345")*1e1) { - $ERROR('#1: Number(".12345e6") === +("12345")*1e1'); -} - -// CHECK#2 -if (Number(".12345e-3") !== Number("12345")*1e-8) { - $ERROR('#2: Number(".12345e-3") === Number("12345")*1e-8'); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A12.js b/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A12.js deleted file mode 100644 index e051a4578..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A12.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.3.1_A12; - * @section: 9.3.1, 15.7.1; - * @assertion: The MV of StrUnsignedDecimalLiteral::: DecimalDigits ExponentPart - * is the MV of DecimalDigits times 10e, where e is the MV of ExponentPart; - * @description: Compare Number('12345e6') with +('12345')*1e1, - * and Number('12345e-6') !== Number('12345')*1e-6; -*/ - -// CHECK#1 -if (Number("12345e6") !== +("12345")*1e6) { - $ERROR('#1: Number("12345e6") === +("12345")*1e6'); -} - -// CHECK#2 -if (Number("12345e-6") !== Number("12345")*1e-6) { - $ERROR('#2: Number("12345e-6") === Number("12345")*1e-6'); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A13.js b/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A13.js deleted file mode 100644 index d2ce42bb9..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A13.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.3.1_A13; - * @section: 9.3.1, 15.7.1; - * @assertion: The MV of DecimalDigits ::: DecimalDigits DecimalDigit is - * (the MV of DecimalDigits times 10) plus the MV of DecimalDigit; - * @description: Compare '12' with Number("1")*10+Number("2") and analogous; -*/ - -// CHECK#1 -if (+("12") !== Number("1")*10+Number("2")) { - $ERROR('#1: +("12") === Number("1")*10+Number("2")'); -} - -// CHECK#2 -if (Number("123") !== Number("12")*10+Number("3")) { - $ERROR('#2: Number("123") === Number("12")*10+Number("3")'); -} - -// CHECK#2 -if (Number("1234") !== Number("123")*10+Number("4")) { - $ERROR('#2: Number("1234") === Number("123")*10+Number("4")'); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A14.js b/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A14.js deleted file mode 100644 index 60ca3816b..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A14.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.3.1_A14; - * @section: 9.3.1, 15.7.1; - * @assertion: The MV of SignedInteger ::: + DecimalDigits is the MV of DecimalDigits; - * @description: Compare Number('+1234567890') with +('1234567890'); -*/ - -// CHECK#1 -if (Number("+1234567890") !== +("1234567890")) { - $ERROR('#1: Number("+1234567890") === +("1234567890")'); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A15.js b/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A15.js deleted file mode 100644 index aa004c64b..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A15.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.3.1_A15; - * @section: 9.3.1, 15.7.1; - * @assertion: The MV of SignedInteger ::: - DecimalDigits is the negative of the MV of DecimalDigits; - * @description: Compare -Number('1234567890') with ('-1234567890'); -*/ - -// CHECK#1 -if (+("-1234567890") !== -Number("1234567890")) { - $ERROR('#1: +("-1234567890") === -Number("1234567890")'); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A16.js b/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A16.js deleted file mode 100644 index a73a8d8e0..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A16.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.3.1_A16; - * @section: 9.3.1, 15.7.1; - * @assertion: The MV of DecimalDigit ::: 0 or of HexDigit ::: 0 is 0; - * @description: Compare Number('0x0') and Number('0X0') with 0; -*/ - -// CHECK#1 -if (Number("0") !== 0) { - $ERROR('#1: Number("0") === 0. Actual: ' + (Number("0"))); -} - -// CHECK#2 -if (+("0x0") !== 0) { - $ERROR('#2: +("0x0") === 0. Actual: ' + (+("0x0"))); -} - -// CHECK#3 -if (Number("0X0") !== 0) { - $ERROR('#3: Number("0X0") === 0. Actual: ' + (Number("0X0"))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A17.js b/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A17.js deleted file mode 100644 index edd79d567..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A17.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.3.1_A17; - * @section: 9.3.1, 15.7.1; - * @assertion: The MV of DecimalDigit ::: 1 or of HexDigit ::: 1 is 1; - * @description: Compare Number('0x1') and Number('0X1') with 1; -*/ - -// CHECK#1 -if (Number("1") !== 1) { - $ERROR('#1: Number("1") === 1. Actual: ' + (Number("1"))); -} - -// CHECK#2 -if (Number("0x1") !== 1) { - $ERROR('#2: Number("0x1") === 1. Actual: ' + (Number("0x1"))); -} - -// CHECK#3 -if (+("0X1") !== 1) { - $ERROR('#3: +("0X1") === 1. Actual: ' + (+("0X1"))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A18.js b/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A18.js deleted file mode 100644 index 861440504..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A18.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.3.1_A18; - * @section: 9.3.1, 15.7.1; - * @assertion: The MV of DecimalDigit ::: 2 or of HexDigit ::: 2 is 2; - * @description: Compare Number('0x2') and Number('0X2') with 2; -*/ - -// CHECK#1 -if (+("2") !== 2) { - $ERROR('#1: +("2") === 2. Actual: ' + (+("2"))); -} - -// CHECK#2 -if (Number("0x2") !== 2) { - $ERROR('#2: Number("0x2") === 2. Actual: ' + (Number("0x2"))); -} - -// CHECK#3 -if (Number("0X2") !== 2) { - $ERROR('#3: Number("0X2") === 2. Actual: ' + (Number("0X2"))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A19.js b/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A19.js deleted file mode 100644 index 8aec46f1b..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A19.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.3.1_A19; - * @section: 9.3.1, 15.7.1; - * @assertion: The MV of DecimalDigit ::: 3 or of HexDigit ::: 3 is 3; - * @description: Compare Number('0x3') and Number('0X3') with 3; -*/ - -// CHECK#1 -if (Number("3") !== 3) { - $ERROR('#1: Number("3") === 3. Actual: ' + (Number("3"))); -} - -// CHECK#2 -if (+("0x3") !== 3) { - $ERROR('#2: +("0x3") === 3. Actual: ' + (+("0x3"))); -} - -// CHECK#3 -if (Number("0X3") !== 3) { - $ERROR('#3: Number("0X3") === 3. Actual: ' + (Number("0X3"))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A2.js b/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A2.js deleted file mode 100644 index 8cc2a7025..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A2.js +++ /dev/null @@ -1,288 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.3.1_A2; - * @section: 9.3.1, 15.7.1; - * @assertion: The MV of StringNumericLiteral ::: StrWhiteSpace is 0; - * @description: Strings with various WhiteSpaces convert to Number by explicit transformation; - */ - -// CHECK#1 -if (Number("\u0009\u000C\u0020\u00A0\u000B\u000A\u000D\u2028\u2029\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000") !== 0) { - $ERROR('#1.1: Number("\\u0009\\u000C\\u0020\\u00A0\\u000B\\u000A\\u000D\\u2028\\u2029\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000") === 0. Actual: ' + (Number("\u0009\u000C\u0020\u00A0\u000B\u000A\u000D\u2028\u2029\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000"))); -} else { - if (1/Number("\u0009\u000C\u0020\u00A0\u000B\u000A\u000D\u2028\u2029\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000") !== Number.POSITIVE_INFINITY) { - $ERROR('#1.2: Number("\\u0009\\u000C\\u0020\\u00A0\\u000B\\u000A\\u000D\\u2028\\u2029\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000") === +0. Actual: -0'); - } -} - -// CHECK#2 -if (Number(" ") !== 0) { - $ERROR('#2.1: Number(" ") === 0. Actual: ' + (Number(" "))); -} else { - if (1/Number(" ") !== Number.POSITIVE_INFINITY) { - $ERROR('#2.2: Number(" ") === +0. Actual: -0'); - } -} - -// CHECK#3 -if (Number("\t") !== 0) { - $ERROR('#3.1: Number("\\t") === 0. Actual: ' + (Number("\t"))); -} else { - if (1/Number("\t") !== Number.POSITIVE_INFINITY) { - $ERROR('#3.2: Number("\\t") === +0. Actual: -0'); - } -} - -// CHECK#4 -if (Number("\r") !== 0) { - $ERROR('#4.1: Number("\\r") === 0. Actual: ' + (Number("\r"))); -} else { - if (1/Number("\r") !== Number.POSITIVE_INFINITY) { - $ERROR('#4.2: Number("\\r") === +0. Actual: -0'); - } -} - -// CHECK#5 -if (Number("\n") !== 0) { - $ERROR('#5.1: Number("\\n") === 0. Actual: ' + (Number("\n"))); -} else { - if (1/Number("\n") !== Number.POSITIVE_INFINITY) { - $ERROR('#5.2: Number("\\n") === +0. Actual: -0'); - } -} - -// CHECK#6 -if (Number("\f") !== 0) { - $ERROR('#6.1: Number("\\f") === 0. Actual: ' + (Number("\f"))); -} else { - if (1/Number("\f") !== Number.POSITIVE_INFINITY) { - $ERROR('#6.2: Number("\\f") === +0. Actual: -0'); - } -} - -// CHECK#7 -if (Number("\u0009") !== 0) { - $ERROR('#7.1: Number("\\u0009") === 0. Actual: ' + (Number("\u0009"))); -} else { - if (1/Number("\u0009") !== Number.POSITIVE_INFINITY) { - $ERROR('#7.2: Number("\\u0009") === +0. Actual: -0'); - } -} - -// CHECK#8 -if (Number("\u000A") !== 0) { - $ERROR('#8.1: Number("\\u000A") === 0. Actual: ' + (Number("\u000A"))); -} else { - if (1/Number("\u000A") !== Number.POSITIVE_INFINITY) { - $ERROR('#8.2: Number("\\u000A") === +0. Actual: -0'); - } -} - -// CHECK#9 -if (Number("\u000B") !== 0) { - $ERROR('#9.1: Number("\\u000B") === 0. Actual: ' + (Number("\u000B"))); -} else { - if (1/Number("\u000B") !== Number.POSITIVE_INFINITY) { - $ERROR('#9.1.2: Number("\\u000B") === +0. Actual: -0'); - } -} - -// CHECK#10 -if (Number("\u000C") !== 0) { - $ERROR('#10.1: Number("\\u000C") === 0. Actual: ' + (Number("\u000C"))); -} else { - if (1/Number("\u000C") !== Number.POSITIVE_INFINITY) { - $ERROR('#10.2: Number("\\u000C") === +0. Actual: -0'); - } -} - -// CHECK#11 -if (Number("\u000D") !== 0) { - $ERROR('#11.1: Number("\\u000D") === 0. Actual: ' + (Number("\u000D"))); -} else { - if (1/Number("\u000D") !== Number.POSITIVE_INFINITY) { - $ERROR('#11.2: Number("\\u000D") === +0. Actual: -0'); - } -} - -// CHECK#12 -if (Number("\u00A0") !== 0) { - $ERROR('#12.1: Number("\\u00A0") === 0. Actual: ' + (Number("\u00A0"))); -} else { - if (1/Number("\u00A0") !== Number.POSITIVE_INFINITY) { - $ERROR('#12.2: Number("\\u00A0") === +0. Actual: -0'); - } -} - -// CHECK#13 -if (Number("\u0020") !== 0) { - $ERROR('#13.1: Number("\\u0020") === 0. Actual: ' + (Number("\u0020"))); -} else { - if (1/Number("\u0020") !== Number.POSITIVE_INFINITY) { - $ERROR('#13.2: Number("\\u0020") === +0. Actual: -0'); - } -} - -// CHECK#14 -if (Number("\u2028") !== 0) { - $ERROR('#14.1: Number("\\u2028") === 0. Actual: ' + (Number("\u2028"))); -} else { - if (1/Number("\u2028") !== Number.POSITIVE_INFINITY) { - $ERROR('#14.2: Number("\\u2028") === +0. Actual: -0'); - } -} - -// CHECK#15 -if (Number("\u2029") !== 0) { - $ERROR('#15.1: Number("\\u2029") === 0. Actual: ' + (Number("\u2029"))); -} else { - if (1/Number("\u2029") !== Number.POSITIVE_INFINITY) { - $ERROR('#15.2: Number("\\u2029") === +0. Actual: -0'); - } -} - -// CHECK#16 -if (Number("\u1680") !== 0) { - $ERROR('#16.1: Number("\\u1680") === 0. Actual: ' + (Number("\u1680"))); -} else { - if (1/Number("\u1680") !== Number.POSITIVE_INFINITY) { - $ERROR('#16.2: Number("\\u1680") === +0. Actual: -0'); - } -} - -// CHECK#17 -if (Number("\u180E") !== 0) { - $ERROR('#17.1: Number("\\u180E") === 0. Actual: ' + (Number("\u180E"))); -} else { - if (1/Number("\u180E") !== Number.POSITIVE_INFINITY) { - $ERROR('#17.2: Number("\\u180E") === +0. Actual: -0'); - } -} - -// CHECK#18 -if (Number("\u2000") !== 0) { - $ERROR('#18.1: Number("\\u2000") === 0. Actual: ' + (Number("\u2000"))); -} else { - if (1/Number("\u2000") !== Number.POSITIVE_INFINITY) { - $ERROR('#18.2: Number("\\u2000") === +0. Actual: -0'); - } -} - -// CHECK#19 -if (Number("\u2001") !== 0) { - $ERROR('#19.1: Number("\\u2001") === 0. Actual: ' + (Number("\u2001"))); -} else { - if (1/Number("\u2001") !== Number.POSITIVE_INFINITY) { - $ERROR('#19.2: Number("\\u2001") === +0. Actual: -0'); - } -} - -// CHECK#20 -if (Number("\u2002") !== 0) { - $ERROR('#20.1: Number("\\u2002") === 0. Actual: ' + (Number("\u2002"))); -} else { - if (1/Number("\u2002") !== Number.POSITIVE_INFINITY) { - $ERROR('#20.2: Number("\\u2002") === +0. Actual: -0'); - } -} - -// CHECK#21 -if (Number("\u2003") !== 0) { - $ERROR('#21.1: Number("\\u2003") === 0. Actual: ' + (Number("\u2003"))); -} else { - if (1/Number("\u2003") !== Number.POSITIVE_INFINITY) { - $ERROR('#21.2: Number("\\u2003") === +0. Actual: -0'); - } -} - -// CHECK#22 -if (Number("\u2004") !== 0) { - $ERROR('#22.1: Number("\\u2004") === 0. Actual: ' + (Number("\u2004"))); -} else { - if (1/Number("\u2004") !== Number.POSITIVE_INFINITY) { - $ERROR('#22.2: Number("\\u2004") === +0. Actual: -0'); - } -} - -// CHECK#23 -if (Number("\u2005") !== 0) { - $ERROR('#23.1: Number("\\u2005") === 0. Actual: ' + (Number("\u2005"))); -} else { - if (1/Number("\u2005") !== Number.POSITIVE_INFINITY) { - $ERROR('#23.2: Number("\\u2005") === +0. Actual: -0'); - } -} - -// CHECK#24 -if (Number("\u2006") !== 0) { - $ERROR('#24.1: Number("\\u2006") === 0. Actual: ' + (Number("\u2006"))); -} else { - if (1/Number("\u2006") !== Number.POSITIVE_INFINITY) { - $ERROR('#24.2: Number("\\u2006") === +0. Actual: -0'); - } -} - -// CHECK#25 -if (Number("\u2007") !== 0) { - $ERROR('#25.1: Number("\\u2007") === 0. Actual: ' + (Number("\u2007"))); -} else { - if (1/Number("\u2007") !== Number.POSITIVE_INFINITY) { - $ERROR('#25.2: Number("\\u2007") === +0. Actual: -0'); - } -} - -// CHECK#26 -if (Number("\u2008") !== 0) { - $ERROR('#26.1: Number("\\u2008") === 0. Actual: ' + (Number("\u2008"))); -} else { - if (1/Number("\u2008") !== Number.POSITIVE_INFINITY) { - $ERROR('#26.2: Number("\\u2008") === +0. Actual: -0'); - } -} - -// CHECK#27 -if (Number("\u2009") !== 0) { - $ERROR('#27.1: Number("\\u2009") === 0. Actual: ' + (Number("\u2009"))); -} else { - if (1/Number("\u2009") !== Number.POSITIVE_INFINITY) { - $ERROR('#27.2: Number("\\u2009") === +0. Actual: -0'); - } -} - -// CHECK#28 -if (Number("\u200A") !== 0) { - $ERROR('#28.1: Number("\\u200A") === 0. Actual: ' + (Number("\u200A"))); -} else { - if (1/Number("\u200A") !== Number.POSITIVE_INFINITY) { - $ERROR('#28.2: Number("\\u200A") === +0. Actual: -0'); - } -} - -// CHECK#29 -if (Number("\u202F") !== 0) { - $ERROR('#29.1: Number("\\u202F") === 0. Actual: ' + (Number("\u202F"))); -} else { - if (1/Number("\u202F") !== Number.POSITIVE_INFINITY) { - $ERROR('#29.2: Number("\\u202F") === +0. Actual: -0'); - } -} - -// CHECK#30 -if (Number("\u205F") !== 0) { - $ERROR('#30.1: Number("\\u205F") === 0. Actual: ' + (Number("\u205F"))); -} else { - if (1/Number("\u205F") !== Number.POSITIVE_INFINITY) { - $ERROR('#30.2: Number("\\u205F") === +0. Actual: -0'); - } -} - -// CHECK#31 -if (Number("\u3000") !== 0) { - $ERROR('#31.1: Number("\\u3000") === 0. Actual: ' + (Number("\u3000"))); -} else { - if (1/Number("\u3000") !== Number.POSITIVE_INFINITY) { - $ERROR('#31.2: Number("\\u3000") === +0. Actual: -0'); - } -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A20.js b/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A20.js deleted file mode 100644 index 3f0d55681..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A20.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.3.1_A20; - * @section: 9.3.1, 15.7.1; - * @assertion: The MV of DecimalDigit ::: 4 or of HexDigit ::: 4 is 4; - * @description: Compare Number('0x4') and Number('0X4') with 4; -*/ - -// CHECK#1 -if (Number("4") !== 4) { - $ERROR('#1: Number("4") === 4. Actual: ' + (Number("4"))); -} - -// CHECK#2 -if (Number("0x4") !== 4) { - $ERROR('#2: Number("0x4") === 4. Actual: ' + (Number("0x4"))); -} - -// CHECK#3 -if (+("0X4") !== 4) { - $ERROR('#3: +("0X4") === 4. Actual: ' + (+("0X4"))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A21.js b/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A21.js deleted file mode 100644 index 23d9ddf2d..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A21.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.3.1_A21; - * @section: 9.3.1, 15.7.1; - * @assertion: The MV of DecimalDigit ::: 5 or of HexDigit ::: 5 is 5; - * @description: Compare Number('0x5') and Number('0X5') with 5; -*/ - -// CHECK#1 -if (+("5") !== 5) { - $ERROR('#1: +("5") === 5. Actual: ' + (+("5"))); -} - -// CHECK#2 -if (Number("0x5") !== 5) { - $ERROR('#2: Number("0x5") === 5. Actual: ' + (Number("0x5"))); -} - -// CHECK#3 -if (Number("0X5") !== 5) { - $ERROR('#3: Number("0X5") === 5. Actual: ' + (Number("0X5"))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A22.js b/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A22.js deleted file mode 100644 index 44182adf7..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A22.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.3.1_A22; - * @section: 9.3.1, 15.7.1; - * @assertion: The MV of DecimalDigit ::: 6 or of HexDigit ::: 6 is 6; - * @description: Compare Number('0x6') and Number('0X6') with 6; -*/ - -// CHECK#1 -if (Number("6") !== 6) { - $ERROR('#1: Number("6") === 6. Actual: ' + (Number("6"))); -} - -// CHECK#2 -if (+("0x6") !== 6) { - $ERROR('#2: +("0x6") === 6. Actual: ' + (+("0x6"))); -} - -// CHECK#3 -if (Number("0X6") !== 6) { - $ERROR('#3: Number("0X6") === 6. Actual: ' + (Number("0X6"))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A23.js b/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A23.js deleted file mode 100644 index 24e73d1f3..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A23.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.3.1_A23; - * @section: 9.3.1, 15.7.1; - * @assertion: The MV of DecimalDigit ::: 7 or of HexDigit ::: 7 is 7; - * @description: Compare Number('0x7') and Number('0X7') with 7; -*/ - -// CHECK#1 -if (Number("7") !== 7) { - $ERROR('#1: Number("7") === 7. Actual: ' + (Number("7"))); -} - -// CHECK#2 -if (Number("0x7") !== 7) { - $ERROR('#2: Number("0x7") === 7. Actual: ' + (Number("0x7"))); -} - -// CHECK#3 -if (+("0X7") !== 7) { - $ERROR('#3: +("0X7") === 7. Actual: ' + (+("0X7"))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A24.js b/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A24.js deleted file mode 100644 index 64d4de30c..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A24.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.3.1_A24; - * @section: 9.3.1, 15.7.1; - * @assertion: The MV of DecimalDigit ::: 8 or of HexDigit ::: 8 is 8; - * @description: Compare Number('0x8') and Number('0X8') with 8; -*/ - -// CHECK#1 -if (+("8") !== 8) { - $ERROR('#1: +("8") === 8. Actual: ' + (+("8"))); -} - -// CHECK#2 -if (Number("0x8") !== 8) { - $ERROR('#2: Number("0x8") === 8. Actual: ' + (Number("0x8"))); -} - -// CHECK#3 -if (Number("0X8") !== 8) { - $ERROR('#3: Number("0X8") === 8. Actual: ' + (Number("0X8"))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A25.js b/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A25.js deleted file mode 100644 index 799762656..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A25.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.3.1_A25; - * @section: 9.3.1, 15.7.1; - * @assertion: The MV of DecimalDigit ::: 9 or of HexDigit ::: 9 is 9; - * @description: Compare Number('0x9') and Number('0X9') with 9; -*/ - -// CHECK#1 -if (Number("9") !== 9) { - $ERROR('#1: Number("9") === 9. Actual: ' + (Number("9"))); -} - -// CHECK#2 -if (+("0x9") !== 9) { - $ERROR('#2: +("0x9") === 9. Actual: ' + (+("0x9"))); -} - -// CHECK#3 -if (Number("0X9") !== 9) { - $ERROR('#3: Number("0X9") === 9. Actual: ' + (Number("0X9"))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A26.js b/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A26.js deleted file mode 100644 index df803ef72..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A26.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.3.1_A26; - * @section: 9.3.1, 15.7.1; - * @assertion: The MV of HexDigit ::: a or of HexDigit ::: A is 10; - * @description: Compare Number('0xA'), Number('0XA'), Number('0xa') and Number('0Xa') with 10; -*/ - -// CHECK#1 -if (Number("0xa") !== 10) { - $ERROR('#1: Number("0xa") === 10. Actual: ' + (Number("0xa"))); -} - -// CHECK#2 -if (Number("0xA") !== 10) { - $ERROR('#2: Number("0xA") === 10. Actual: ' + (Number("0xA"))); -} - -// CHECK#3 -if (Number("0Xa") !== 10) { - $ERROR('#3: Number("0Xa") === 10. Actual: ' + (Number("0Xa"))); -} - -// CHECK#4 -if (+("0XA") !== 10) { - $ERROR('#4: +("0XA") === 10. Actual: ' + (+("0XA"))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A27.js b/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A27.js deleted file mode 100644 index 16393d40f..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A27.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.3.1_A27; - * @section: 9.3.1, 15.7.1; - * @assertion: The MV of HexDigit ::: b or of HexDigit ::: B is 11; - * @description: Compare Number('0xB'), Number('0XB'), Number('0xb') and Number('0Xb') with 11; -*/ - -// CHECK#1 -if (Number("0xb") !== 11) { - $ERROR('#1: Number("0xb") === 11. Actual: ' + (Number("0xb"))); -} - -// CHECK#2 -if (Number("0xB") !== 11) { - $ERROR('#2: Number("0xB") === 11. Actual: ' + (Number("0xB"))); -} - -// CHECK#3 -if (+("0Xb") !== 11) { - $ERROR('#3: +("0Xb") === 11. Actual: ' + (+("0Xb"))); -} - -// CHECK#4 -if (Number("0XB") !== 11) { - $ERROR('#4: Number("0XB") === 11. Actual: ' + (Number("0XB"))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A28.js b/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A28.js deleted file mode 100644 index a4399c547..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A28.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.3.1_A28; - * @section: 9.3.1, 15.7.1; - * @assertion: The MV of HexDigit ::: c or of HexDigit ::: C is 12; - * @description: Compare Number('0xC'), Number('0XC'), Number('0xc') and Number('0Xc') with 12; -*/ - -// CHECK#1 -if (Number("0xc") !== 12) { - $ERROR('#1: Number("0xc") === 12. Actual: ' + (Number("0xc"))); -} - -// CHECK#2 -if (+("0xC") !== 12) { - $ERROR('#2: +("0xC") === 12. Actual: ' + (+("0xC"))); -} - -// CHECK#3 -if (Number("0Xc") !== 12) { - $ERROR('#3: Number("0Xc") === 12. Actual: ' + (Number("0Xc"))); -} - -// CHECK#4 -if (Number("0XC") !== 12) { - $ERROR('#4: Number("0XC") === 12. Actual: ' + (Number("0XC"))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A29.js b/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A29.js deleted file mode 100644 index 5a373d70b..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A29.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.3.1_A29; - * @section: 9.3.1, 15.7.1; - * @assertion: The MV of HexDigit ::: d or of HexDigit ::: D is 13; - * @description: Compare Number('0xD'), Number('0XD'), Number('0xd') and Number('0Xd') with 13; -*/ - -// CHECK#1 -if (+("0xd") !== 13) { - $ERROR('#1: +("0xd") === 13. Actual: ' + (+("0xd"))); -} - -// CHECK#2 -if (Number("0xD") !== 13) { - $ERROR('#2: Number("0xD") === 13. Actual: ' + (Number("0xD"))); -} - -// CHECK#3 -if (Number("0Xd") !== 13) { - $ERROR('#3: Number("0Xd") === 13. Actual: ' + (Number("0Xd"))); -} - -// CHECK#4 -if (Number("0XD") !== 13) { - $ERROR('#4: Number("0XD") === 13. Actual: ' + (Number("0XD"))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A30.js b/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A30.js deleted file mode 100644 index e57f828e1..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A30.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.3.1_A30; - * @section: 9.3.1, 15.7.1; - * @assertion: The MV of HexDigit ::: e or of HexDigit ::: E is 14; - * @description: Compare Number('0xE'), Number('0XE'), Number('0xe') and Number('0Xe') with 14; -*/ - -// CHECK#1 -if (Number("0xe") !== 14) { - $ERROR('#1: Number("0xe") === 14. Actual: ' + (Number("0xe"))); -} - -// CHECK#2 -if (Number("0xE") !== 14) { - $ERROR('#2: Number("0xE") === 14. Actual: ' + (Number("0xE"))); -} - -// CHECK#3 -if (Number("0Xe") !== 14) { - $ERROR('#3: Number("0Xe") === 14. Actual: ' + (Number("0Xe"))); -} - -// CHECK#4 -if (+("0XE") !== 14) { - $ERROR('#4: +("0XE") === 14. Actual: ' + (+("0XE"))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A31.js b/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A31.js deleted file mode 100644 index 26d0f83e8..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A31.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.3.1_A31; - * @section: 9.3.1, 15.7.1; - * @assertion: The MV of HexDigit ::: f or of HexDigit ::: F is 15; - * @description: Compare Number('0xF'), Number('0XF'), Number('0xf') and Number('0Xf') with 15; -*/ - -// CHECK#1 -if (Number("0xf") !== 15) { - $ERROR('#1: Number("0xf") === 15. Actual: ' + (Number("0xf"))); -} - -// CHECK#2 -if (Number("0xF") !== 15) { - $ERROR('#2: Number("0xF") === 15. Actual: ' + (Number("0xF"))); -} - -// CHECK#3 -if (+("0Xf") !== 15) { - $ERROR('#3: +("0Xf") === 15. Actual: ' + (+("0Xf"))); -} - -// CHECK#4 -if (Number("0XF") !== 15) { - $ERROR('#4: Number("0XF") === 15. Actual: ' + (Number("0XF"))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A32.js b/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A32.js deleted file mode 100644 index d86a97742..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A32.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.3.1_A32; - * @section: 9.3.1; - * @assertion: Once the exact MV for a string numeric literal has been - * determined, it is then rounded to a value of the Number type with 20 - * significant digits by replacing each significant digit after the 20th - * with a 0 digit or the number value; - * @description: Use various long numbers, for example, 1234567890.1234567890; -*/ - -// CHECK#1 -if (Number("1234567890.1234567890") !== 1234567890.1234567890) { - $ERROR('#1: Number("1234567890.1234567890") === 1234567890.1234567890. Actual: ' + (Number("1234567890.1234567890"))); -} - -// CHECK#2 -if (Number("1234567890.1234567890") !== 1234567890.1234567000) { - $ERROR('#2: Number("1234567890.1234567890") === 1234567890.1234567000. Actual: ' + (Number("1234567890.1234567890"))); -} - -// CHECK#3 -if (+("1234567890.1234567890") === 1234567890.123456) { - $ERROR('#3: +("1234567890.1234567890") !== 1234567890.123456'); -} - -// CHECK#4 -if (Number("0.12345678901234567890") !== 0.123456789012345678) { - $ERROR('#4: Number("0.12345678901234567890") === 0.123456789012345678. Actual: ' + (Number("0.12345678901234567890"))); -} - -// CHECK#4 -if (Number("00.12345678901234567890") !== 0.123456789012345678) { - $ERROR('#4: Number("00.12345678901234567890") === 0.123456789012345678. Actual: ' + (Number("00.12345678901234567890"))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A3_T1.js b/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A3_T1.js deleted file mode 100644 index 19535315c..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A3_T1.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.3.1_A3_T1; - * @section: 9.3.1, 15.7.1; - * @assertion: The MV of StringNumericLiteral ::: StrWhiteSpaceopt StrNumericLiteral StrWhiteSpaceopt is the MV of StrNumericLiteral, no matter whether white space is present or not; - * @description: static string; -*/ - -// CHECK#1 -if (Number("\u0009\u000C\u0020\u00A0\u000B\u000A\u000D\u2028\u2029\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000") !== Number("")) { - $ERROR('#1: Number("\\u0009\\u000C\\u0020\\u00A0\\u000B\\u000A\\u000D\\u2028\\u2029\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000") === Number("")'); -} - -// CHECK#2 -if (Number("\u0009\u000C\u0020\u00A0\u000A\u000D\u2028\u2029\u000B\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u30001234567890\u0009\u000C\u0020\u00A0\u000B\u000A\u000D\u2028\u2029\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000") !== Number("1234567890")) { - $ERROR('#2: Number("\\u0009\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029\\u000B\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u30001234567890\\u0009\\u000C\\u0020\\u00A0\\u000B\\u000A\\u000D\\u2028\\u2029\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000") === Number("1234567890")'); -} - -// CHECK#3 -if (!(+("\u0009\u000C\u0020\u00A0\u000B\u000A\u000D\u2028\u2029\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000Infinity\u0009\u000C\u0020\u00A0\u000B\u000A\u000D\u2028\u2029\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000") == Number("Infinity"))) { - $ERROR('#3: +("\\u0009\\u000C\\u0020\\u00A0\\u000B\\u000A\\u000D\\u2028\\u2029\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000Infinity\\u0009\\u000C\\u0020\\u00A0\\u000B\\u000A\\u000D\\u2028\\u2029\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000") == Number("Infinity")'); -} - -// CHECK#4 -if (!(Number("\u0009\u000C\u0020\u00A0\u000B\u000A\u000D\u2028\u2029\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000-Infinity\u0009\u000C\u0020\u00A0\u000B\u000A\u000D\u2028\u2029\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000") == Number(-"Infinity"))) { - $ERROR('#4: Number("\\u0009\\u000C\\u0020\\u00A0\\u000B\\u000A\\u000D\\u2028\\u2029\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000-Infinity\\u0009\\u000C\\u0020\\u00A0\\u000B\\u000A\\u000D\\u2028\\u2029\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000") == Number("-Infinity")'); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A3_T2.js b/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A3_T2.js deleted file mode 100644 index d554efa0a..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A3_T2.js +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.3.1_A3_T2; - * @section: 9.3.1, 15.7.1; - * @assertion: The MV of StringNumericLiteral ::: StrWhiteSpaceopt StrNumericLiteral StrWhiteSpaceopt is the MV of StrNumericLiteral, no matter whether white space is present or not; - * @description: dynamic string; -*/ -function dynaString(s1, s2){ - return String(s1)+String(s2); -} - -// CHECK#1 -if (Number(dynaString("\u0009\u000C\u0020\u00A0\u000B", "\u000A\u000D\u2028\u2029\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000")) !== Number("")) { - $ERROR('#1: Number("\\u0009\\u000C\\u0020\\u00A0\\u000B"+"\\u000A\\u000D\\u2028\\u2029\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000") === Number("")'); -} - -// CHECK#2 -if (+(dynaString("\u0009\u000C\u0020\u00A0\u000A\u000D\u2028\u2029\u000B12345", "67890\u0009\u000C\u0020\u00A0\u000B\u000A\u000D\u2028\u2029\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000")) !== Number("1234567890")) { - $ERROR('#2: +("\\u0009\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029\\u000B12345"+"67890\\u0009\\u000C\\u0020\\u00A0\\u000B\\u000A\\u000D\\u2028\\u2029\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000") === Number("1234567890")'); -} - -// CHECK#3 -if (!(Number(dynaString("\u0009\u000C\u0020\u00A0\u000B\u000A\u000D\u2028\u2029Infi", "nity\u0009\u000C\u0020\u00A0\u000B\u000A\u000D\u2028\u2029\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000")) == Number("Infinity"))) { - $ERROR('#3: Number("\\u0009\\u000C\\u0020\\u00A0\\u000B\\u000A\\u000D\\u2028\\u2029Infi"+"nity\\u0009\\u000C\\u0020\\u00A0\\u000B\\u000A\\u000D\\u2028\\u2029\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000") == Number("Infinity")'); -} - -// CHECK#4 -if (!(Number(dynaString("\u0009\u000C\u0020\u00A0\u000B\u000A\u000D\u2028\u2029-Infi", "nity\u0009\u000C\u0020\u00A0\u000B\u000A\u000D\u2028\u2029\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000")) == Number(-"Infinity"))) { - $ERROR('#4: Number("\\u0009\\u000C\\u0020\\u00A0\\u000B\\u000A\\u000D\\u2028\\u2029-Infi"+"nity\\u0009\\u000C\\u0020\\u00A0\\u000B\\u000A\\u000D\\u2028\\u2029\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000") == Number("-Infinity")'); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A4_T1.js b/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A4_T1.js deleted file mode 100644 index c361d486c..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A4_T1.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.3.1_A4_T1; - * @section: 9.3.1, 15.7.1; - * @assertion: The MV of StrDecimalLiteral::: + StrUnsignedDecimalLiteral is the MV of StrUnsignedDecimalLiteral; - * @description: Compare Number('+any_number') with Number('any_number'); -*/ - -// CHECK#1 -if (Number("+0") !== Number("0")) { - $ERROR('#1.1: Number("+0") === Number("0")'); -} else { - // CHECK#2 - if (1/Number("+0") !== 1/Number("0")) { - $ERROR('#2.2: 1/Number("+0") === 1/Number("0")'); - } -} - -// CHECK#3 -if (Number("+Infinity") !== Number("Infinity")) { - $ERROR('#3: Number("+Infinity") === Number("Infinity")'); -} - -// CHECK#4 -if (Number("+1234.5678") !== Number("1234.5678")) { - $ERROR('#4: Number("+1234.5678") === Number("1234.5678")'); -} - -// CHECK#5 -if (Number("+1234.5678e90") !== Number("1234.5678e90")) { - $ERROR('#5: Number("+1234.5678e90") === Number("1234.5678e90")'); -} - -// CHECK#6 -if (Number("+1234.5678E90") !== Number("1234.5678E90")) { - $ERROR('#6: Number("+1234.5678E90") === Number("1234.5678E90")'); -} - -// CHECK#7 -if (Number("+1234.5678e-90") !== Number("1234.5678e-90")) { - $ERROR('#7: Number("+1234.5678e-90") === Number("1234.5678e-90")'); -} - -// CHECK#8 -if (Number("+1234.5678E-90") !== Number("1234.5678E-90")) { - $ERROR('#8: Number("+1234.5678E-90") === Number("1234.5678E-90")'); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A4_T2.js b/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A4_T2.js deleted file mode 100644 index a2847b91c..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A4_T2.js +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.3.1_A4_T2; - * @section: 9.3.1, 15.7.1; - * @assertion: The MV of StrDecimalLiteral::: + StrUnsignedDecimalLiteral is the MV of StrUnsignedDecimalLiteral; - * @description: Compare Number('+' + 'any_number') with Number('any_number'); -*/ - -function dynaString(s1, s2){ - return String(s1)+String(s2); -} - -// CHECK#1 -if (Number(dynaString("+", "0")) !== Number("0")) { - $ERROR('#1: Number("+"+"0") === Number("0")'); -} else { - // CHECK#2 - if (1/Number(dynaString("+", "0")) !== 1/Number("0")) { - $ERROR('#2: 1/Number("+"+"0") === 1/Number("0")'); - } -} - -// CHECK#3 -if (Number(dynaString("+Infi", "nity")) !== Number("Infinity")) { - $ERROR('#3: Number("+Infin"+"ity") === Number("Infinity")'); -} - -// CHECK#4 -if (Number(dynaString("+1234.", "5678")) !== Number("1234.5678")) { - $ERROR('#4: Number("+1234."+"5678") === Number("1234.5678")'); -} - -// CHECK#5 -if (Number(dynaString("+1234.", "5678e90")) !== Number("1234.5678e90")) { - $ERROR('#5: Number("+1234."+"5678e90") === Number("1234.5678e90")'); -} - -// CHECK#6 -if (Number(dynaString("+1234.", "5678E90")) !== Number("1234.5678E90")) { - $ERROR('#6: Number("+1234."+"5678E90") === Number("1234.5678E90")'); -} - -// CHECK#7 -if (Number(dynaString("+1234.", "5678e-90")) !== Number("1234.5678e-90")) { - $ERROR('#7: Number("+1234."+"5678e-90") === Number("1234.5678e-90")'); -} - -// CHECK#8 -if (Number(dynaString("+1234.", "5678E-90")) !== Number("1234.5678E-90")) { - $ERROR('#8: Number("+1234."+"5678E-90") === Number("1234.5678E-90")'); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A5_T1.js b/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A5_T1.js deleted file mode 100644 index 76072c280..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A5_T1.js +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.3.1_A5_T1; - * @section: 9.3.1, 15.7.1; - * @assertion: The MV of StrDecimalLiteral::: - StrUnsignedDecimalLiteral is the negative - * of the MV of StrUnsignedDecimalLiteral. (the negative of this 0 is also 0); - * @description: Compare Number('-any_number') with -Number('any_number'); -*/ - -// CHECK#1 -if (Number("-0") !== -Number("0")) { - $ERROR('#1: Number("-0") === -Number("0")'); -} else { - // CHECK#2 - if (1/Number("-0") !== -1/Number("0")) { - $ERROR('#2: 1/Number("-0") === -1/Number("0")'); - } -} - -// CHECK#3 -if (Number("-Infinity") !== -Number("Infinity")) { - $ERROR('#3: Number("-Infinity") === -Number("Infinity")'); -} - -// CHECK#4 -if (Number("-1234567890") !== -Number("1234567890")) { - $ERROR('#4: Number("-1234567890") === -Number("1234567890")'); -} - -// CHECK#5 -if (Number("-1234.5678") !== -Number("1234.5678")) { - $ERROR('#5: Number("-1234.5678") === -Number("1234.5678")'); -} - -// CHECK#6 -if (Number("-1234.5678e90") !== -Number("1234.5678e90")) { - $ERROR('#6: Number("-1234.5678e90") === -Number("1234.5678e90")'); -} - -// CHECK#7 -if (Number("-1234.5678E90") !== -Number("1234.5678E90")) { - $ERROR('#6: Number("-1234.5678E90") === -Number("1234.5678E90")'); -} - -// CHECK#8 -if (Number("-1234.5678e-90") !== -Number("1234.5678e-90")) { - $ERROR('#6: Number("-1234.5678e-90") === -Number("1234.5678e-90")'); -} - -// CHECK#9 -if (Number("-1234.5678E-90") !== -Number("1234.5678E-90")) { - $ERROR('#6: Number("-1234.5678E-90") === -Number("1234.5678E-90")'); -} - -// CHECK#10 -if (Number("-Infinity") !== Number.NEGATIVE_INFINITY) { - $ERROR('#3: Number("-Infinity") === Number.NEGATIVE_INFINITY'); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A5_T2.js b/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A5_T2.js deleted file mode 100644 index 008f92589..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A5_T2.js +++ /dev/null @@ -1,145 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.3.1_A5_T2; - * @section: 9.3.1, 15.7.1; - * @assertion: The MV of StrDecimalLiteral::: - StrUnsignedDecimalLiteral is the negative - * of the MV of StrUnsignedDecimalLiteral. (the negative of this 0 is also 0); - * @description: Compare Number('-[or +]any_number') with -[or without -]any_number); -*/ - -// CHECK#1 -if (Number("1") !== 1) { - $ERROR('#1: Number("1") === 1'); -} - -// CHECK#2 -if (Number("+1") !== 1) { - $ERROR('#3: Number("+1") === 1'); -} - -// CHECK#3 -if (Number("-1") !== -1) { - $ERROR('#3: Number("-1") === -1'); -} - -// CHECK#4 -if (Number("2") !== 2) { - $ERROR('#4: Number("2") === 2'); -} - -// CHECK#5 -if (Number("+2") !== 2) { - $ERROR('#5: Number("+2") === 2'); -} - -// CHECK#6 -if (Number("-2") !== -2) { - $ERROR('#6: Number("-2") === -2'); -} - -// CHECK#7 -if (Number("3") !== 3) { - $ERROR('#7: Number("3") === 3'); -} - -// CHECK#8 -if (Number("+3") !== 3) { - $ERROR('#8: Number("+3") === 3'); -} - -// CHECK#9 -if (Number("-3") !== -3) { - $ERROR('#9: Number("-3") === -3'); -} - -// CHECK#10 -if (Number("4") !== 4) { - $ERROR('#10: Number("4") === 4'); -} - -// CHECK#11 -if (Number("+4") !== 4) { - $ERROR('#11: Number("+4") === 4'); -} - -// CHECK#12 -if (Number("-4") !== -4) { - $ERROR('#12: Number("-4") === -4'); -} - -// CHECK#13 -if (Number("5") !== 5) { - $ERROR('#13: Number("5") === 5'); -} - -// CHECK#14 -if (Number("+5") !== 5) { - $ERROR('#14: Number("+5") === 5'); -} - -// CHECK#15 -if (Number("-5") !== -5) { - $ERROR('#15: Number("-5") === -5'); -} - -// CHECK#16 -if (Number("6") !== 6) { - $ERROR('#16: Number("6") === 6'); -} - -// CHECK#17 -if (Number("+6") !== 6) { - $ERROR('#17: Number("+6") === 6'); -} - -// CHECK#18 -if (Number("-6") !== -6) { - $ERROR('#18: Number("-6") === -6'); -} - -// CHECK#19 -if (Number("7") !== 7) { - $ERROR('#19: Number("7") === 7'); -} - -// CHECK#20 -if (Number("+7") !== 7) { - $ERROR('#20: Number("+7") === 7'); -} - -// CHECK#21 -if (Number("-7") !== -7) { - $ERROR('#21: Number("-7") === -7'); -} - -// CHECK#22 -if (Number("8") !== 8) { - $ERROR('#22: Number("8") === 8'); -} - -// CHECK#23 -if (Number("+8") !== 8) { - $ERROR('#23: Number("+8") === 8'); -} - -// CHECK#24 -if (Number("-8") !== -8) { - $ERROR('#24: Number("-8") === -8'); -} - -// CHECK#25 -if (Number("9") !== 9) { - $ERROR('#25: Number("9") === 9'); -} - -// CHECK#26 -if (Number("+9") !== 9) { - $ERROR('#26: Number("+9") === 9'); -} - -// CHECK#27 -if (Number("-9") !== -9) { - $ERROR('#27: Number("-9") === -9'); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A5_T3.js b/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A5_T3.js deleted file mode 100644 index 09c4d2a15..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A5_T3.js +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.3.1_A5_T3; - * @section: 9.3.1, 15.7.1; - * @assertion: The MV of StrDecimalLiteral::: - StrUnsignedDecimalLiteral is the negative - * of the MV of StrUnsignedDecimalLiteral. (the negative of this 0 is also 0); - * @description: Compare Number('-' + 'any_number') with -Number('any_number'); -*/ - -function dynaString(s1, s2){ - return String(s1)+String(s2); -} - -// CHECK#1 -if (Number(dynaString("-", "0")) !== -Number("0")) { - $ERROR('#1: Number("-"+"0") === -Number("0")'); -} else { - // CHECK#2 - if (1/Number(dynaString("-", "0")) !== -1/Number("0")) { - $ERROR('#2: 1/Number("-"+"0") === -1/Number("0")'); - } -} - -// CHECK#3 -if (Number(dynaString("-Infi", "nity")) !== -Number("Infinity")) { - $ERROR('#3: Number("-Infi"+"nity") === -Number("Infinity")'); -} - -// CHECK#4 -if (Number(dynaString("-12345", "67890")) !== -Number("1234567890")) { - $ERROR('#4: Number("-12345"+"67890") === -Number("1234567890")'); -} - -// CHECK#5 -if (Number(dynaString("-1234.", "5678")) !== -Number("1234.5678")) { - $ERROR('#5: Number("-1234."+"5678") === -Number("1234.5678")'); -} - -// CHECK#6 -if (Number(dynaString("-1234.", "5678e90")) !== -Number("1234.5678e90")) { - $ERROR('#6: Number("-1234."+"5678e90") === -Number("1234.5678e90")'); -} - -// CHECK#7 -if (Number(dynaString("-1234.", "5678E90")) !== -Number("1234.5678E90")) { - $ERROR('#6: Number("-1234."+"5678E90") === -Number("1234.5678E90")'); -} - -// CHECK#8 -if (Number(dynaString("-1234.", "5678e-90")) !== -Number("1234.5678e-90")) { - $ERROR('#6: Number("-1234."+"5678e-90") === -Number("1234.5678e-90")'); -} - -// CHECK#9 -if (Number(dynaString("-1234.", "5678E-90")) !== -Number("1234.5678E-90")) { - $ERROR('#6: Number("-1234."+"5678E-90") === -Number("1234.5678E-90")'); -} - -// CHECK#10 -if (Number(dynaString("-Infi", "nity")) !== Number.NEGATIVE_INFINITY) { - $ERROR('#3: Number("-Infi"+"nity") === Number.NEGATIVE_INFINITY'); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A6_T1.js b/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A6_T1.js deleted file mode 100644 index d8aaf862a..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A6_T1.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.3.1_A6_T1; - * @section: 9.3.1, 15.7.1; - * @assertion: The MV of StrUnsignedDecimalLiteral::: Infinity is 1010000 - * (a value so large that it will round to +∞); - * @description: Compare Number('Infinity') with Number.POSITIVE_INFINITY, 10e10000, 10E10000 and Number("10e10000"); -*/ - -// CHECK#1 -if (Number("Infinity") !== Number.POSITIVE_INFINITY) { - $ERROR('#1: Number("Infinity") === Number.POSITIVE_INFINITY'); -} - -// CHECK#2 -if (Number("Infinity") !== 10e10000) { - $ERROR('#2: Number("Infinity") === 10e10000'); -} - -// CHECK#3 -if (Number("Infinity") !== 10E10000) { - $ERROR('#3: Number("Infinity") === 10E10000'); -} - -// CHECK#4 -if (Number("Infinity") !== Number("10e10000")) { - $ERROR('#4: Number("Infinity") === Number("10e10000")'); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A6_T2.js b/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A6_T2.js deleted file mode 100644 index 59aa4f56a..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A6_T2.js +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.3.1_A6_T2; - * @section: 9.3.1, 15.7.1; - * @assertion: The MV of StrUnsignedDecimalLiteral::: Infinity is 1010000 - * (a value so large that it will round to +∞); - * @description: Compare Number('Infi'+'nity') with Number.POSITIVE_INFINITY, 10e10000, 10E10000 and Number("10e10000"); -*/ - -function dynaString(s1, s2){ - return String(s1)+String(s2); -} - - -// CHECK#1 -if (Number(dynaString("Infi", "nity")) !== Number.POSITIVE_INFINITY) { - $ERROR('#1: Number("Infi"+"nity") === Number.POSITIVE_INFINITY'); -} - -// CHECK#2 -if (Number(dynaString("Infi", "nity")) !== 10e10000) { - $ERROR('#2: Number("Infi"+"nity") === 10e10000'); -} - -// CHECK#3 -if (Number(dynaString("Infi", "nity")) !== 10E10000) { - $ERROR('#3: Number("Infi"+"nity") === 10E10000'); -} - -// CHECK#4 -if (Number(dynaString("Infi", "nity")) !== Number("10e10000")) { - $ERROR('#4: Number("Infi"+"nity") === Number("10e10000")'); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A7.js b/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A7.js deleted file mode 100644 index e9aeb9a65..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A7.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.3.1_A7; - * @section: 9.3.1, 15.7.1; - * @assertion: The MV of StrUnsignedDecimalLiteral::: DecimalDigits. DecimalDigits - * is the MV of the first DecimalDigits plus the MV of the second DecimalDigits times - * 10-n, where n is the number of characters in the second DecimalDigits; - * @description: Compare Number('1234.5678') with Number('1234')+(+('5678')*1e-4); -*/ - -// CHECK#1 -if (Number("1234.5678") !== Number("1234")+(+("5678")*1e-4)) { - $ERROR('#1: Number("1234.5678") === Number("1234")+(+("5678")*1e-4)'); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A8.js b/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A8.js deleted file mode 100644 index 4e08141e4..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A8.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.3.1_A8; - * @section: 9.3.1, 15.7.1; - * @assertion: The MV of StrUnsignedDecimalLiteral::: DecimalDigits. ExponentPart - * is the MV of DecimalDigits times 10e , where e is the MV of ExponentPart; - * @description: Compare Number('1234e5') and Number('1234.e5') with Number('1234')*1e5; -*/ - -// CHECK#1 -if (Number("1234e5") !== Number("1234")*1e5) { - $ERROR('#1: Number("1234e5") === Number("1234")*1e5'); -} - -// CHECK#2 -if (Number("1234.e5") !== +("1234")*1e5) { - $ERROR('#2: Number("1234.e5") === +("1234")*1e5'); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A9.js b/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A9.js deleted file mode 100644 index 256133ec3..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/9.3.1_ToNumber_from_String/S9.3.1_A9.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.3.1_A9; - * @section: 9.3.1, 15.7.1; - * @assertion: The MV of StrUnsignedDecimalLiteral::: DecimalDigits. DecimalDigits ExponentPart - * is (the MV of the first DecimalDigits plus (the MV of the second DecimalDigits times - * 10-n)) times 10e, where n is the number - * of characters in the second DecimalDigits and e is the MV of ExponentPart; - * @description: Compare Number('1234.5678e9') with (Number('1234')+(Number('5678')*1e-4))*1e9, - * and +('1234.5678e-9') with (Number('1234')+(Number('5678')*1e-4))*1e-9; -*/ - -// CHECK#1 -if (Number("1234.5678e9") !== (Number("1234")+(Number("5678")*1e-4))*1e9) { - $ERROR('#1: Number("1234.5678e9") === (Number("1234")+(Number("5678")*1e-4))*1e9'); -} - -// CHECK#2 -if (+("1234.5678e-9") !== (Number("1234")+(Number("5678")*1e-4))*1e-9) { - $ERROR('#2: +("1234.5678e-9") === (Number("1234")+(Number("5678")*1e-4))*1e-9'); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/S9.3_A1_T1.js b/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/S9.3_A1_T1.js deleted file mode 100644 index 3ecf4f482..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/S9.3_A1_T1.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.3_A1_T1; - * @section: 9.3, 15.7.1; - * @assertion: Result of number conversion from undefined value is NaN; - * @description: Undefined convert to Number by explicit transformation; -*/ - -// CHECK#1 -if (isNaN(Number(undefined)) !== true) { - $ERROR('#1: Number(undefined) === Not-a-Number. Actual: ' + (Number(undefined))); -} - -// CHECK#2 -if (isNaN(Number(void 0)) !== true) { - $ERROR('#2: Number(void 0) === Not-a-Number. Actual: ' + (Number(void 0))); -} - -// CHECK#3 -if (isNaN(Number(eval("var x"))) !== true) { - $ERROR('#3: Number(eval("var x")) === Not-a-Number. Actual: ' + (Number(eval("var x")))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/S9.3_A1_T2.js b/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/S9.3_A1_T2.js deleted file mode 100644 index 93d906de9..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/S9.3_A1_T2.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.3_A1_T2; - * @section: 9.3, 11.6.1; - * @assertion: Result of number conversion from undefined value is NaN; - * @description: Undefined convert to Number by implicit transformation; -*/ - -// CHECK#1 -if (isNaN(+(undefined)) !== true) { - $ERROR('#1: +(undefined) === Not-a-Number. Actual: ' + (+(undefined))); -} - -// CHECK#2 -if (isNaN(+(void 0)) !== true) { - $ERROR('#2: +(void 0) === Not-a-Number. Actual: ' + (+(void 0))); -} - -// CHECK#3 -if (isNaN(+(eval("var x"))) !== true) { - $ERROR('#3: +(eval("var x")) === Not-a-Number. Actual: ' + (+(eval("var x")))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/S9.3_A2_T1.js b/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/S9.3_A2_T1.js deleted file mode 100644 index d570ad476..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/S9.3_A2_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.3_A2_T1; - * @section: 9.3, 15.7.1; - * @assertion: Result of number conversion from null value is +0; - * @description: null convert to Number by explicit transformation; - */ - -// CHECK #1 -if (Number(null) !== 0) { - $ERROR('#1.1: Number(null) === 0. Actual: ' + (Number(null))); -} else { - if (1/Number(null) !== Number.POSITIVE_INFINITY) { - $ERROR('#1.2: Number(null) === +0. Actual: -0'); - } -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/S9.3_A2_T2.js b/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/S9.3_A2_T2.js deleted file mode 100644 index b070680fa..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/S9.3_A2_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.3_A2_T2; - * @section: 9.3, 11.6.1; - * @assertion: Result of number conversion from null value is +0; - * @description: null convert to Number by implicit transformation; - */ - -// CHECK #1 -if (+(null) !== 0) { - $ERROR('#1.1: +(null) === 0. Actual: ' + (+(null))); -} else { - if (1/+(null) !== Number.POSITIVE_INFINITY) { - $ERROR('#1.2: +(null) === +0. Actual: -0'); - } -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/S9.3_A3_T1.js b/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/S9.3_A3_T1.js deleted file mode 100644 index ac06f0cdd..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/S9.3_A3_T1.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.3_A3_T1; - * @section: 9.3, 15.7.1; - * @assertion: Result of number conversion from boolean value is 1 if the argument is true, else is +0; - * @description: False and true convert to Number by explicit transformation; - */ - -// CHECK#1 -if (Number(false) !== +0) { - $ERROR('#1.1: Number(false) === 0. Actual: ' + (Number(false))); -} else { - if (1/Number(false) !== Number.POSITIVE_INFINITY) { - $ERROR('#1.2: Number(false) === +0. Actual: -0'); - } -} - -// CHECK#2 -if (Number(true) !== 1) { - $ERROR('#2: Number(true) === 1. Actual: ' + (Number(true))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/S9.3_A3_T2.js b/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/S9.3_A3_T2.js deleted file mode 100644 index 5ca55fc76..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/S9.3_A3_T2.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.3_A3_T2; - * @section: 9.3, 11.6.1; - * @assertion: Result of number conversion from boolean value is 1 if the argument is true, else is +0; - * @description: False and true convert to Number by implicit transformation; - */ - -// CHECK#1 -if (+(false) !== +0) { - $ERROR('#1.1: +(false) === 0. Actual: ' + (+(false))); -} else { - if (1/+(false) !== Number.POSITIVE_INFINITY) { - $ERROR('#1.2: +(false) === +0. Actual: -0'); - } -} - -// CHECK#2 -if (+(true) !== 1) { - $ERROR('#2: +(true) === 1. Actual: ' + (+(true))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/S9.3_A4.1_T1.js b/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/S9.3_A4.1_T1.js deleted file mode 100644 index 3fb8a9ef6..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/S9.3_A4.1_T1.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.3_A4.1_T1; - * @section: 9.3, 15.7.1; - * @assertion: Result of number conversion from number value equals to the input argument (no conversion); - * @description: Some numbers including Number.MAX_VALUE and Number.MIN_VALUE are converted to Number with explicit transformation; -*/ - -// CHECK#1 -if (Number(13) !== 13) { - $ERROR('#1: Number(13) === 13. Actual: ' + (Number(13))); -} - -// CHECK#2 -if (Number(-13) !== -13) { - $ERROR('#2: Number(-13) === -13. Actual: ' + (Number(-13))); -} - -// CHECK#3 -if (Number(1.3) !== 1.3) { - $ERROR('#3: Number(1.3) === 1.3. Actual: ' + (Number(1.3))); -} - -// CHECK#4 -if (Number(-1.3) !== -1.3) { - $ERROR('#4: Number(-1.3) === -1.3. Actual: ' + (Number(-1.3))); -} - -// CHECK#5 -if (Number(Number.MAX_VALUE) !== 1.7976931348623157e308) { - $ERROR('#5: Number(Number.MAX_VALUE) === 1.7976931348623157e308. Actual: ' + (Number(Number.MAX_VALUE))); -} - -// CHECK#6 -if (Number(Number.MIN_VALUE) !== 5e-324) { - $ERROR('#6: Number(Number.MIN_VALUE) === 5e-324. Actual: ' + (Number(Number.MIN_VALUE))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/S9.3_A4.1_T2.js b/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/S9.3_A4.1_T2.js deleted file mode 100644 index c8530e8e6..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/S9.3_A4.1_T2.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.3_A4.1_T2; - * @section: 9.3, 11.6.1; - * @assertion: Result of number conversion from number value equals to the input argument (no conversion); - * @description: Some numbers including Number.MAX_VALUE and Number.MIN_VALUE are converted to Number with implicit transformation; -*/ - -// CHECK#1 -if (+(13) !== 13) { - $ERROR('#1: +(13) === 13. Actual: ' + (+(13))); -} - -// CHECK#2 -if (+(-13) !== -13) { - $ERROR('#2: +(-13) === -13. Actual: ' + (+(-13))); -} - -// CHECK#3 -if (+(1.3) !== 1.3) { - $ERROR('#3: +(1.3) === 1.3. Actual: ' + (+(1.3))); -} - -// CHECK#4 -if (+(-1.3) !== -1.3) { - $ERROR('#4: +(-1.3) === -1.3. Actual: ' + (+(-1.3))); -} - -// CHECK#5 -if (+(Number.MAX_VALUE) !== 1.7976931348623157e308) { - $ERROR('#5: +(Number.MAX_VALUE) === 1.7976931348623157e308. Actual: ' + (+(Number.MAX_VALUE))); -} - -// CHECK#6 -if (+(Number.MIN_VALUE) !== 5e-324) { - $ERROR('#6: +(Number.MIN_VALUE) === 5e-324. Actual: ' + (+(Number.MIN_VALUE))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/S9.3_A4.2_T1.js b/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/S9.3_A4.2_T1.js deleted file mode 100644 index 277a439e1..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/S9.3_A4.2_T1.js +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.3_A4.2_T1; - * @section: 9.3, 15.7.1; - * @assertion: Result of number conversion from number value equals to the input argument (no conversion); - * @description: Number.NaN, +0, -0, Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY, - * Number.MAX_VALUE and Number.MIN_VALUE convert to Number by explicit transformation; - */ - -// CHECK#1 -if (isNaN(Number(Number.NaN)) !== true) { - $ERROR('#1: Number(NaN) === Not-a-Number. Actual: ' + (Number(NaN))); -} - -// CHECK#2 -if (Number(+0) !== +0) { - $ERROR('#2.1: Number(+0) === 0. Actual: ' + (Number(+0))); -} else { - if (1/Number(+0) !== Number.POSITIVE_INFINITY) { - $ERROR('#2.2: Number(+0) === +0. Actual: -0'); - } -} - -// CHECK#3 -if (Number(-0) !== -0) { - $ERROR('#3.1: Number(-0) === 0. Actual: ' + (Number(-0))); -} else { - if (1/Number(-0) !== Number.NEGATIVE_INFINITY) { - $ERROR('#3.2: Number(-0) === -0. Actual: +0'); - } -} - -// CHECK#4 -if (Number(Number.POSITIVE_INFINITY) !== Number.POSITIVE_INFINITY) { - $ERROR('#4: Number(+Infinity) === +Infinity. Actual: ' + (Number(+Infinity))); -} - -// CHECK#5 -if (Number(Number.NEGATIVE_INFINITY) !== Number.NEGATIVE_INFINITY) { - $ERROR('#5: Number(-Infinity) === -Infinity. Actual: ' + (Number(-Infinity))); -} - -// CHECK#6 -if (Number(Number.MAX_VALUE) !== Number.MAX_VALUE) { - $ERROR('#6: Number(Number.MAX_VALUE) === Number.MAX_VALUE. Actual: ' + (Number(Number.MAX_VALUE))); -} - -// CHECK#7 -if (Number(Number.MIN_VALUE) !== Number.MIN_VALUE) { - $ERROR('#7: Number(Number.MIN_VALUE) === Number.MIN_VALUE. Actual: ' + (Number(Number.MIN_VALUE))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/S9.3_A4.2_T2.js b/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/S9.3_A4.2_T2.js deleted file mode 100644 index 514eea777..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/S9.3_A4.2_T2.js +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.3_A4.2_T2; - * @section: 9.3, 11.6.1; - * @assertion: Result of number conversion from number value equals to the input argument (no conversion); - * @description: Number.NaN, +0, -0, Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY, - * Number.MAX_VALUE and Number.MIN_VALUE convert to Number by implicit transformation; - */ - -// CHECK#1 -if (isNaN(+(Number.NaN)) !== true) { - $ERROR('#1: +(NaN) === Not-a-Number. Actual: ' + (+(NaN))); -} - -// CHECK#2 -if (+(+0) !== +0) { - $ERROR('#2.1: +(+0) === 0. Actual: ' + (+(+0))); -} else { - if (1/+(+0) !== Number.POSITIVE_INFINITY) { - $ERROR('#2.2: +(+0) === +0. Actual: -0'); - } -} - -// CHECK#3 -if (+(-0) !== -0) { - $ERROR('#3.1: +(-0) === 0. Actual: ' + (+(-0))); -} else { - if (1/+(-0) !== Number.NEGATIVE_INFINITY) { - $ERROR('#3.2: +(-0) === -0. Actual: +0'); - } -} - -// CHECK#4 -if (+(Number.POSITIVE_INFINITY) !== Number.POSITIVE_INFINITY) { - $ERROR('#4: +(+Infinity) === +Infinity. Actual: ' + (+(+Infinity))); -} - -// CHECK#5 -if (+(Number.NEGATIVE_INFINITY) !== Number.NEGATIVE_INFINITY) { - $ERROR('#5: +(-Infinity) === -Infinity. Actual: ' + (+(-Infinity))); -} - -// CHECK#6 -if (+(Number.MAX_VALUE) !== Number.MAX_VALUE) { - $ERROR('#6: +(Number.MAX_VALUE) === Number.MAX_VALUE. Actual: ' + (+(Number.MAX_VALUE))); -} - -// CHECK#7 -if (+(Number.MIN_VALUE) !== Number.MIN_VALUE) { - $ERROR('#7: +(Number.MIN_VALUE) === Number.MIN_VALUE. Actual: ' + (+(Number.MIN_VALUE))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/S9.3_A5_T1.js b/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/S9.3_A5_T1.js deleted file mode 100644 index a6333165b..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/S9.3_A5_T1.js +++ /dev/null @@ -1,125 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.3_A5_T1; - * @section: 9.3, 15.7.1; - * @assertion: Result of number conversion from object value is the result - * of conversion from primitive value; - * @description: new Number(), new Number(0), new Number(Number.NaN), new Number(null), - * new Number(void 0) and others convert to Number by explicit transformation; -*/ - -// CHECK#1 -if (Number(new Number()) !== 0) { - $ERROR('#1: Number(new Number()) === 0. Actual: ' + (Number(new Number()))); -} - -// CHECK#2 -if (Number(new Number(0)) !== 0) { - $ERROR('#2: Number(new Number(0)) === 0. Actual: ' + (Number(new Number(0)))); -} - -// CHECK#3 -if (isNaN(Number(new Number(Number.NaN)) !== true)) { - $ERROR('#3: Number(new Number(Number.NaN)) === Not-a-Number. Actual: ' + (Number(new Number(Number.NaN)))); -} - -// CHECK#4 -if (Number(new Number(null)) !== 0) { - $ERROR('#4.1: Number(new Number(null)) === 0. Actual: ' + (Number(new Number(null)))); -} else { - if (1/Number(new Number(null)) !== Number.POSITIVE_INFINITY) { - $ERROR('#4.2: Number(new Number(null)) === +0. Actual: -0'); - } -} - -// CHECK#5 -if (isNaN(Number(new Number(void 0)) !== true)) { - $ERROR('#5: Number(new Number(void 0)) === Not-a-Number. Actual: ' + (Number(new Number(void 0)))); -} - -// CHECK#6 -if (Number(new Number(true)) !== 1) { - $ERROR('#6: Number(new Number(true)) === 1. Actual: ' + (Number(new Number(true)))); -} - -// CHECK#7 -if (Number(new Number(false)) !== +0) { - $ERROR('#7.1: Number(new Number(false)) === 0. Actual: ' + (Number(new Number(false)))); -} else { - if (1/Number(new Number(false)) !== Number.POSITIVE_INFINITY) { - $ERROR('#7.2: Number(new Number(false)) === +0. Actual: -0'); - } -} - -// CHECK#8 -if (Number(new Boolean(true)) !== 1) { - $ERROR('#8: Number(new Boolean(true)) === 1. Actual: ' + (Number(new Boolean(true)))); -} - -// CHECK#9 -if (Number(new Boolean(false)) !== +0) { - $ERROR('#9.1: Number(new Boolean(false)) === 0. Actual: ' + (Number(new Boolean(false)))); -} else { - if (1/Number(new Boolean(false)) !== Number.POSITIVE_INFINITY) { - $ERROR('#9.2: Number(new Boolean(false)) === +0. Actual: -0'); - } -} - -// CHECK#10 -if (isNaN(Number(new Array(2,4,8,16,32))) !== true) { - $ERROR('#10: Number(new Array(2,4,8,16,32)) === Not-a-Number. Actual: ' + (Number(new Array(2,4,8,16,32)))); -} - -// CHECK#11 -var myobj1 = { - ToNumber : function(){return 12345;}, - toString : function(){return "67890";}, - valueOf : function(){return "[object MyObj]";} - }; - -if (isNaN(Number(myobj1)) !== true){ - $ERROR("#11: Number(myobj1) calls ToPrimitive with hint Number. Actual: " + (Number(myobj1))); -} - -// CHECK#12 -var myobj2 = { - ToNumber : function(){return 12345;}, - toString : function(){return "67890";}, - valueOf : function(){return "9876543210";} - }; - -if (Number(myobj2) !== 9876543210){ - $ERROR("#12: Number(myobj2) calls ToPrimitive with hint Number. Exptected: 9876543210. Actual: " + (Number(myobj2))); -} - - -// CHECK#13 -var myobj3 = { - ToNumber : function(){return 12345;}, - toString : function(){return "[object MyObj]";} - }; - -if (isNaN(Number(myobj3)) !== true){ - $ERROR("#13: Number(myobj3) calls ToPrimitive with hint Number. Exptected: Not-a-Number. Actual: " + (Number(myobj3))); -} - -// CHECK#14 -var myobj4 = { - ToNumber : function(){return 12345;}, - toString : function(){return "67890";} - }; - -if (Number(myobj4) !== 67890){ - $ERROR("#14: Number(myobj4) calls ToPrimitive with hint Number. Exptected: 67890. Actual: " + (Number(myobj4))); -} - -// CHECK#15 -var myobj5 = { - ToNumber : function(){return 12345;} - }; - -if (isNaN(Number(myobj5)) !== true){ - $ERROR("#15: Number(myobj5) calls ToPrimitive with hint Number. Exptected: Not-a-Number. Actual: " + (Number(myobj5))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/S9.3_A5_T2.js b/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/S9.3_A5_T2.js deleted file mode 100644 index 539654e18..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.3_ToNumber/S9.3_A5_T2.js +++ /dev/null @@ -1,125 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.3_A5_T2; - * @section: 9.3, 11.6.1; - * @assertion: Result of number conversion from object value is the result - * of conversion from primitive value; - * @description: new Number(), new Number(0), new Number(Number.NaN), new Number(null), - * new Number(void 0) and others convert to Number by implicit transformation; -*/ - -// CHECK#1 -if (+(new Number()) !== 0) { - $ERROR('#1: +(new Number()) === 0. Actual: ' + (+(new Number()))); -} - -// CHECK#2 -if (+(new Number(0)) !== 0) { - $ERROR('#2: +(new Number(0)) === 0. Actual: ' + (+(new Number(0)))); -} - -// CHECK#3 -if (isNaN(+(new Number(Number.NaN)) !== true)) { - $ERROR('#3: +(new Number(Number.NaN)) === Not-a-Number. Actual: ' + (+(new Number(Number.NaN)))); -} - -// CHECK#4 -if (+(new Number(null)) !== 0) { - $ERROR('#4.1: +(new Number(null)) === 0. Actual: ' + (+(new Number(null)))); -} else { - if (1/+(new Number(null)) !== Number.POSITIVE_INFINITY) { - $ERROR('#4.2: +(new Number(null)) === +0. Actual: -0'); - } -} - -// CHECK#5 -if (isNaN(+(new Number(void 0)) !== true)) { - $ERROR('#5: +(new Number(void 0)) === Not-a-Number. Actual: ' + (+(new Number(void 0)))); -} - -// CHECK#6 -if (+(new Number(true)) !== 1) { - $ERROR('#6: +(new Number(true)) === 1. Actual: ' + (+(new Number(true)))); -} - -// CHECK#7 -if (+(new Number(false)) !== +0) { - $ERROR('#7.1: +(new Number(false)) === 0. Actual: ' + (+(new Number(false)))); -} else { - if (1/+(new Number(false)) !== Number.POSITIVE_INFINITY) { - $ERROR('#7.2: +(new Number(false)) === +0. Actual: -0'); - } -} - -// CHECK#8 -if (+(new Boolean(true)) !== 1) { - $ERROR('#8: +(new Boolean(true)) === 1. Actual: ' + (+(new Boolean(true)))); -} - -// CHECK#9 -if (+(new Boolean(false)) !== +0) { - $ERROR('#9.1: +(new Boolean(false)) === 0. Actual: ' + (+(new Boolean(false)))); -} else { - if (1/+(new Boolean(false)) !== Number.POSITIVE_INFINITY) { - $ERROR('#9.2: +(new Boolean(false)) === +0. Actual: -0'); - } -} - -// CHECK#10 -if (isNaN(+(new Array(2,4,8,16,32))) !== true) { - $ERROR('#10: +(new Array(2,4,8,16,32)) === Not-a-Number. Actual: ' + (+(new Array(2,4,8,16,32)))); -} - -// CHECK#11 -var myobj1 = { - ToNumber : function(){return 12345;}, - toString : function(){return "67890";}, - valueOf : function(){return "[object MyObj]";} - }; - -if (isNaN(+(myobj1)) !== true){ - $ERROR("#11: +(myobj1) calls ToPrimitive with hint +. Exptected: Not-a-Number. Actual: " + (+(myobj1))); -} - -// CHECK#12 -var myobj2 = { - ToNumber : function(){return 12345;}, - toString : function(){return "67890";}, - valueOf : function(){return "9876543210";} - }; - -if (+(myobj2) !== 9876543210){ - $ERROR("#12: +(myobj2) calls ToPrimitive with hint +. Exptected: 9876543210. Actual: " + (+(myobj2))); -} - - -// CHECK#13 -var myobj3 = { - ToNumber : function(){return 12345;}, - toString : function(){return "[object MyObj]";} - }; - -if (isNaN(+(myobj3)) !== true){ - $ERROR("#13: +(myobj3) calls ToPrimitive with hint +. Exptected: Not-a-Number. Actual: " + (+(myobj3))); -} - -// CHECK#14 -var myobj4 = { - ToNumber : function(){return 12345;}, - toString : function(){return "67890";} - }; - -if (+(myobj4) !== 67890){ - $ERROR("#14: +(myobj4) calls ToPrimitive with hint +. Exptected: 67890. Actual: " + (+(myobj4))); -} - -// CHECK#15 -var myobj5 = { - ToNumber : function(){return 12345;} - }; - -if (isNaN(+(myobj5)) !== true){ - $ERROR("#15: +(myobj5) calls ToPrimitive with hint +. Exptected: 12345. Actual: " + (+(myobj5))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.4_ToInteger/S9.4_A1.js b/tests/ES3/Conformance/09_Type_Conversion/9.4_ToInteger/S9.4_A1.js deleted file mode 100644 index 64c54f266..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.4_ToInteger/S9.4_A1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.4_A1; - * @section: 9.4, 15.5; - * @assertion: If ToNumber(value) is NaN, ToInteger(value) returns +0; - * @description: Check what position is defined by Number.NaN in string "abc": "abc".charAt(Number.NaN); -*/ - -// CHECK#1 -if ("abc".charAt(Number.NaN) !== "a") { - $ERROR('#1: "abc".charAt(Number.NaN) === "a". Actual: ' + ("abc".charAt(Number.NaN))); -} - -// CHECK#2 -if ("abc".charAt("x") !== "a") { - $ERROR('#2: "abc".charAt("x") === "a". Actual: ' + ("abc".charAt("x"))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.4_ToInteger/S9.4_A2.js b/tests/ES3/Conformance/09_Type_Conversion/9.4_ToInteger/S9.4_A2.js deleted file mode 100644 index e51bcdc9c..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.4_ToInteger/S9.4_A2.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.4_A2; - * @section: 9.4, 15.5; - * @assertion: If ToNumber(value) is +0, -0, +Infinity, or -Infinity, - * return ToNumber(value); - * @description: Check what position is defined by Number.NaN in string "abc": "abc".charAt(Number.NaN); -*/ - -// CHECK#1 -if ("abc".charAt(0.0) !== "a") { - $ERROR('#1: "abc".charAt(0.0) === "a". Actual: ' + ("abc".charAt(0.0))); -} - -// CHECK#2 -if ("abc".charAt(-0.0) !== "a") { - $ERROR('#2: "abc".charAt(-0.0) === "a". Actual: ' + ("abc".charAt(-0.0))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.4_ToInteger/S9.4_A3_T1.js b/tests/ES3/Conformance/09_Type_Conversion/9.4_ToInteger/S9.4_A3_T1.js deleted file mode 100644 index 050a540fc..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.4_ToInteger/S9.4_A3_T1.js +++ /dev/null @@ -1,82 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.4_A3_T1; - * @section: 9.4, 15.9; - * @assertion: Result of ToInteger(value) conversion is the result of computing - * sign(ToNumber(value)) * floor(abs(ToNumber(value))); - * @description: For testing constructor Date(Number) is used; -*/ - -// CHECK#1 -var d1 = new Date(6.54321); -if (d1.valueOf() !== 6) { - $ERROR('#1: var d1 = new Date(6.54321); d1.valueOf() === 6;'); -} - -// CHECK#2 -var d2 = new Date(-6.54321); -if (d2.valueOf() !== -6) { - $ERROR('#2: var d2 = new Date(-6.54321); d2.valueOf() === -6;'); -} - -// CHECK#3 -var d3 = new Date(6.54321e2); -if (d3.valueOf() !== 654) { - $ERROR('#3: var d3 = new Date(6.54321e2); d3.valueOf() === 654;'); -} - -// CHECK#4 -var d4 = new Date(-6.54321e2); -if (d4.valueOf() !== -654) { - $ERROR('#4: var d4 = new Date(-6.54321e2); d4.valueOf() === -654;'); -} - -// CHECK#5 -var d5 = new Date(0.654321e1); -if (d5.valueOf() !== 6) { - $ERROR('#5: var d5 = new Date(0.654321e1); d5.valueOf() === 6;'); -} - -// CHECK#6 -var d6 = new Date(-0.654321e1); -if (d6.valueOf() !== -6) { - $ERROR('#6: var d6 = new Date(-0.654321e1); d6.valueOf() === -6;'); -} - -// CHECK#7 -var d7 = new Date(true); -if (d7.valueOf() !== 1) { - $ERROR('#7: var d7 = new Date(true); d7.valueOf() === 1;'); -} - -// CHECK#8 -var d8 = new Date(false); -if (d8.valueOf() !== 0) { - $ERROR('#8: var d8 = new Date(true); d8.valueOf() === 0;'); -} - -// CHECK#9 -var d9 = new Date(1.23e15); -if (d9.valueOf() !== 1.23e15) { - $ERROR('#9: var d9 = new Date(1.23e15); d9.valueOf() === 1.23e15;'); -} - -// CHECK#10 -var d10 = new Date(-1.23e15); -if (d10.valueOf() !== -1.23e15) { - $ERROR('#10: var d10 = new Date(-1.23e15); d10.valueOf() === -1.23e15;'); -} - -// CHECK#11 -var d11 = new Date(1.23e-15); -if (d11.valueOf() !== 0) { - $ERROR('#11: var d11 = new Date(1.23e-15); d11.valueOf() === 0;'); -} - -// CHECK#12 -var d12 = new Date(-1.23e-15); -if (d12.valueOf() !== -0) { - $ERROR('#12: var d12 = new Date(-1.23e-15); d12.valueOf() === -0;'); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.4_ToInteger/S9.4_A3_T2.js b/tests/ES3/Conformance/09_Type_Conversion/9.4_ToInteger/S9.4_A3_T2.js deleted file mode 100644 index 729e07466..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.4_ToInteger/S9.4_A3_T2.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.4_A3_T2; - * @section: 9.4, 15.9; - * @assertion: Result of ToInteger(value) conversion is the result of computing - * sign(ToNumber(value)) * floor(abs(ToNumber(value))); - * @description: For testing constructor Date(NaN, Infinity, Infinity, +0 and -0) is used; -*/ - -// CHECK#1 -var d1 = new Date(Number.NaN); -if (!isNaN(d1.valueOf())) { - $ERROR('#1: var d1 = new Date(Number.NaN); d1.valueOf() === Number.NaN;'); -} - -// CHECK#2 -var d2 = new Date(Infinity); -if (!isNaN(d2.valueOf())) { - $ERROR('#2: var d2 = new Date(Infinity); d2.valueOf() === Number.NaN;'); -} - -// CHECK#3 -var d3 = new Date(-Infinity); -if (!isNaN(d3.valueOf())) { - $ERROR('#3: var d3 = new Date(-Infinity); d3.valueOf() === Number.NaN;'); -} - -// CHECK#4 -var d4 = new Date(0); -if (d4.valueOf() !== 0) { - $ERROR('#4: var d4 = new Date(0); d4.valueOf() === 0;'); -} - -// CHECK#5 -var d5 = new Date(-0); -if (d5.valueOf() !== -0) { - $ERROR('#5: var d5 = new Date(-0); d5.valueOf() === -0;'); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.5_ToInt32/S9.5_A1_T1.js b/tests/ES3/Conformance/09_Type_Conversion/9.5_ToInt32/S9.5_A1_T1.js deleted file mode 100644 index 6e6378a3e..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.5_ToInt32/S9.5_A1_T1.js +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.5_A1_T1; - * @section: 9.5, 11.7.1; - * @assertion: If value is NaN, +0, -0, +Infinity, or -Infinity, return +0; - * @description: For testing use operator <<0; -*/ - -// CHECK#1 -if ((Number.NaN << 0) !== +0) { - $ERROR('#1.1: (Number.NaN << 0) === 0. Actual: ' + ((Number.NaN << 0))); -} else if (1/(Number.NaN << 0) !== Number.POSITIVE_INFINITY) { - $ERROR('#1.2: (Number.NaN << 0) === +0. Actual: -0'); -} - -// CHECK#2 -if ((Number("abc") << 0) !== +0) { - $ERROR('#2.1: (Number("abc") << 0) === 0. Actual: ' + ((Number("abc") << 0))); -} else if (1/(0 << 0) !== Number.POSITIVE_INFINITY) { - $ERROR('#2.2: (0 << 0) === +0. Actual: -0'); -} - -// CHECK#3 -if ((0 << 0) !== +0) { - $ERROR('#3.1: (0 << 0) === 0. Actual: ' + ((0 << 0))); -} else if (1/(0 << 0) !== Number.POSITIVE_INFINITY) { - $ERROR('#3.2: (0 << 0) === +0. Actual: -0'); -} - -// CHECK#4 -if ((-0 << 0) !== +0) { - $ERROR("#4.1: (-0 << 0) === 0"); -} else if (1/(-0 << 0) !== Number.POSITIVE_INFINITY) { - $ERROR("#4.2: (-0 << 0) === +0. Actual: -0"); -} - -// CHECK#5 -if ((Number.POSITIVE_INFINITY << 0) !== +0) { - $ERROR('#5.1: (Number.POSITIVE_INFINITY << 0) === 0. Actual: ' + ((Number.POSITIVE_INFINITY << 0))); -} else if (1/(Number.POSITIVE_INFINITY << 0) !== Number.POSITIVE_INFINITY) { - $ERROR('#5.2: (Number.POSITIVE_INFINITY << 0) === +0. Actual: -0'); -} - -// CHECK#6 -if ((Number.NEGATIVE_INFINITY << 0) !== +0) { - $ERROR("#6.1: (Number.NEGATIVE_INFINITY << 0) === 0"); -} else if (1/(Number.NEGATIVE_INFINITY << 0) !== Number.POSITIVE_INFINITY) { - $ERROR("#6.2: (Number.NEGATIVE_INFINITY << 0) === +0. Actual: -0"); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.5_ToInt32/S9.5_A2.1_T1.js b/tests/ES3/Conformance/09_Type_Conversion/9.5_ToInt32/S9.5_A2.1_T1.js deleted file mode 100644 index f4ba74694..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.5_ToInt32/S9.5_A2.1_T1.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.5_A2.1_T1; - * @section: 9.5, 11.7.1; - * @assertion: ToInt32 returns values between -2^31 and 2^31-1; - * @description: Converting some numbers, which are in\outside of Int32 scopes, with <<0 operator; -*/ - -// CHECK#1 -if ((-2147483647 << 0) !== -2147483647) { - $ERROR('#1: (-2147483647 << 0) === -2147483647. Actual: ' + ((-2147483647 << 0))); -} - -// CHECK#2 -if ((-2147483648 << 0) !== -2147483648) { - $ERROR('#2: (-2147483648 << 0) === -2147483648. Actual: ' + ((-2147483648 << 0))); -} - -// CHECK#3 -if ((-2147483649 << 0) !== 2147483647) { - $ERROR('#3: (-2147483649 << 0) === 2147483647. Actual: ' + ((-2147483649 << 0))); -} - -// CHECK#4 -if ((-4294967296 << 0) !== 0) { - $ERROR('#4: (-4294967296 << 0) === 0. Actual: ' + ((-4294967296 << 0))); -} - -// CHECK#5 -if ((2147483646 << 0) !== 2147483646) { - $ERROR('#5: (2147483646 << 0) === 2147483646. Actual: ' + ((2147483646 << 0))); -} - -// CHECK#6 -if ((2147483647 << 0) !== 2147483647) { - $ERROR('#6: (2147483647 << 0) === 2147483647. Actual: ' + ((2147483647 << 0))); -} - -// CHECK#7 -if ((2147483648 << 0) !== -2147483648) { - $ERROR('#7: (2147483648 << 0) === -2147483648. Actual: ' + ((2147483648 << 0))); -} - -// CHECK#8 -if ((4294967296 << 0) !== 0) { - $ERROR('#8: (4294967296 << 0) === 0. Actual: ' + ((4294967296 << 0))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.5_ToInt32/S9.5_A2.1_T2.js b/tests/ES3/Conformance/09_Type_Conversion/9.5_ToInt32/S9.5_A2.1_T2.js deleted file mode 100644 index 4957124bf..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.5_ToInt32/S9.5_A2.1_T2.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.5_A2.1_T2; - * @section: 9.5, 11.4.8; - * @assertion: ToInt32 returns values between -2^31 and 2^31-1; - * @description: Converting some numbers, which are in\outside of Int32 scopes, with ~ operator; -*/ - -// CHECK#1 -if (~-2147483649 !== ~2147483647) { - $ERROR('#1: ~-2147483649 === ~2147483647'); -} - -// CHECK#2 -if (~-4294967296 !== ~0) { - $ERROR('#2: ~-4294967296 === ~0'); -} - -// CHECK#3 -if (~2147483648 !== ~-2147483648) { - $ERROR('#3: ~2147483648 === ~-2147483648'); -} - -// CHECK#4 -if (~4294967296 !== ~0) { - $ERROR('#4: ~4294967296 === ~0'); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.5_ToInt32/S9.5_A2.2_T1.js b/tests/ES3/Conformance/09_Type_Conversion/9.5_ToInt32/S9.5_A2.2_T1.js deleted file mode 100644 index f7d50f410..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.5_ToInt32/S9.5_A2.2_T1.js +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.5_A2.2_T1; - * @section: 9.5, 11.7.1; - * @assertion: Compute result modulo 2^32; - * @description: Use operator <<0; -*/ - -// CHECK#1 -if ((-2147483647 << 0) !== -2147483647) { - $ERROR('#1: (-2147483647 << 0) === -2147483647. Actual: ' + ((-2147483647 << 0))); -} - -// CHECK#2 -if ((-2147483648 << 0) !== -2147483648) { - $ERROR('#2: (-2147483648 << 0) === -2147483648. Actual: ' + ((-2147483648 << 0))); -} - -// CHECK#3 -if ((-2147483649 << 0) !== 2147483647) { - $ERROR('#3: (-2147483649 << 0) === 2147483647. Actual: ' + ((-2147483649 << 0))); -} - -// CHECK#4 -if ((4294967295 << 0) !== -1) { - $ERROR('#4: (4294967295 << 0) === -1. Actual: ' + ((4294967295 << 0))); -} - -// CHECK#5 -if ((4294967296 << 0) !== 0) { - $ERROR('#5: (4294967296 << 0) === 0. Actual: ' + ((4294967296 << 0))); -} - -// CHECK#6 -if ((4294967297 << 0) !== 1) { - $ERROR('#6: (4294967297 << 0) === 1. Actual: ' + ((4294967297 << 0))); -} - -// CHECK#7 -if ((-4294967295 << 0) !== 1) { - $ERROR('#7: (-4294967295 << 0) === 1. Actual: ' + ((-4294967295 << 0))); -} - -// CHECK#8 -if ((-4294967296 << 0) !== 0) { - $ERROR('#8: (-4294967296 << 0) === 0. Actual: ' + ((-4294967296 << 0))); -} - -// CHECK#9 -if ((-4294967297 << 0) !== -1) { - $ERROR('#9: (-4294967297 << 0) === -1. Actual: ' + ((-4294967297 << 0))); -} - -// CHECK#10 -if ((8589934591 << 0) !== -1) { - $ERROR('#10: (8589934591 << 0) === -1. Actual: ' + ((8589934591 << 0))); -} - -// CHECK#11 -if ((8589934592 << 0) !== 0) { - $ERROR('#11: (8589934592 << 0) === 0. Actual: ' + ((8589934592 << 0))); -} - -// CHECK#12 -if ((8589934593 << 0) !== 1) { - $ERROR('#12: (8589934593 << 0) === 1. Actual: ' + ((8589934593 << 0))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.5_ToInt32/S9.5_A2.2_T2.js b/tests/ES3/Conformance/09_Type_Conversion/9.5_ToInt32/S9.5_A2.2_T2.js deleted file mode 100644 index 385a0e196..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.5_ToInt32/S9.5_A2.2_T2.js +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.5_A2.2_T2; - * @section: 9.5, 11.4.8; - * @assertion: Compute result modulo 2^32; - * @description: Use operator ~; -*/ - -// CHECK#1 -if (~-2147483647 !== 2147483646) { - $ERROR('#1: ~-2147483647 === 2147483646)'); -} - -// CHECK#2 -if (~-2147483648 !== ~-2147483648) { - $ERROR('#2: ~-2147483648 ==== ~-2147483648)'); -} - -// CHECK#3 -if (~-2147483649 !== ~2147483647) { - $ERROR('#3: ~-2147483649 ==== ~2147483647)'); -} - -// CHECK#4 -if ((~4294967295 << 0) !== ~-1) { - $ERROR('#4: (~4294967295 << 0) === ~-1)'); -} - -// CHECK#5 -if ((~4294967296 << 0) !== ~0) { - $ERROR('#5: (~4294967296 << 0) === ~0)'); -} - -// CHECK#6 -if ((~4294967297 << 0) !== ~1) { - $ERROR('#6: (~4294967297 << 0) === ~1)'); -} - -// CHECK#7 -if ((~-4294967295 << 0) !== ~1) { - $ERROR('#7: (~-4294967295 << 0) === ~1)'); -} - -// CHECK#8 -if ((~-4294967296 << 0) !== ~0) { - $ERROR('#8: (~-4294967296 << 0) === ~0)'); -} - -// CHECK#9 -if ((~-4294967297 << 0) !== ~-1) { - $ERROR('#9: (~-4294967297 << 0) === ~-1)'); -} - -// CHECK#10 -if ((~8589934591 << 0) !== ~-1) { - $ERROR('#10: (~8589934591 << 0) === ~-1)'); -} - -// CHECK#11 -if ((~8589934592 << 0) !== ~0) { - $ERROR('#11: (~8589934592 << 0) === ~0)'); -} - -// CHECK#12 -if ((~8589934593 << 0) !== ~1) { - $ERROR('#12: (~8589934593 << 0) === ~1)'); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.5_ToInt32/S9.5_A2.3_T1.js b/tests/ES3/Conformance/09_Type_Conversion/9.5_ToInt32/S9.5_A2.3_T1.js deleted file mode 100644 index de1143441..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.5_ToInt32/S9.5_A2.3_T1.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.5_A2.3_T1; - * @section: 9.5, 11.7.1; - * @assertion: If result is greater than or equal to 2^31, return result -2^32; - * @description: Use operator <<0; -*/ - -// CHECK#1 -if ((2147483647 << 0) !== 2147483647) { - $ERROR('#1: (2147483647 << 0) === 2147483647. Actual: ' + ((2147483647 << 0))); -} - -// CHECK#2 -if ((2147483648 << 0) !== -2147483648) { - $ERROR('#2: (2147483648 << 0) === -2147483648. Actual: ' + ((2147483648 << 0))); -} - -// CHECK#3 -if ((2147483649 << 0) !== -2147483647) { - $ERROR('#3: (2147483649 << 0) === -2147483647. Actual: ' + ((2147483649 << 0))); -} - -// CHECK#4 -if ((4294967295 << 0) !== -1) { - $ERROR('#4: (4294967295 << 0) === -1. Actual: ' + ((4294967295 << 0))); -} - -// CHECK#5 -if ((4294967296 << 0) !== 0) { - $ERROR('#5: (4294967296 << 0) === 0. Actual: ' + ((4294967296 << 0))); -} - -// CHECK#6 -if ((4294967297 << 0) !== 1) { - $ERROR('#6: (4294967297 << 0) === 1. Actual: ' + ((4294967297 << 0))); -} - - diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.5_ToInt32/S9.5_A2.3_T2.js b/tests/ES3/Conformance/09_Type_Conversion/9.5_ToInt32/S9.5_A2.3_T2.js deleted file mode 100644 index 1ee2bc911..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.5_ToInt32/S9.5_A2.3_T2.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.5_A2.3_T2; - * @section: 9.5, 11.4.8; - * @assertion: If result is greater than or equal to 2^31, return result -2^32; - * @description: Use operator ~; -*/ - -// CHECK#1 -if (~2147483647 !== -2147483648) { - $ERROR('#1: ~2147483647 ==== -2147483648)'); -} - -// CHECK#2 -if (~2147483648 !== ~-2147483648) { - $ERROR('#2: ~2147483648 ==== ~-2147483648)'); -} - -// CHECK#3 -if (~2147483649 !== ~-2147483647) { - $ERROR('#3: ~2147483649 ==== ~-2147483647)'); -} - -// CHECK#4 -if (~4294967295 !== ~-1) { - $ERROR('#4: ~4294967295 ==== ~-1)'); -} - -// CHECK#5 -if (~4294967296 !== ~0) { - $ERROR('#5: ~4294967296 ==== ~0)'); -} - -// CHECK#6 -if (~4294967297 !== ~1) { - $ERROR('#6: ~4294967297 ==== ~1)'); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.5_ToInt32/S9.5_A3.1_T1.js b/tests/ES3/Conformance/09_Type_Conversion/9.5_ToInt32/S9.5_A3.1_T1.js deleted file mode 100644 index 0138ec4d6..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.5_ToInt32/S9.5_A3.1_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.5_A3.1_T1; - * @section: 9.5; - * @assertion: Operator uses ToNumber; - * @description: Type(x) is Boolean; -*/ - -// CHECK#1 -if ((new Boolean(true) << 0) !== 1) { - $ERROR('#1: (new Boolean(true) << 0) === 1. Actual: ' + ((new Boolean(true) << 0))); -} - -// CHECK#2 -if ((false << 0) !== 0) { - $ERROR('#2: (false << 0) === 0. Actual: ' + ((false << 0))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.5_ToInt32/S9.5_A3.1_T2.js b/tests/ES3/Conformance/09_Type_Conversion/9.5_ToInt32/S9.5_A3.1_T2.js deleted file mode 100644 index 1f53d67f3..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.5_ToInt32/S9.5_A3.1_T2.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.5_A3.1_T2; - * @section: 9.5; - * @assertion: Operator uses ToNumber; - * @description: Type(x) is Number; -*/ - -// CHECK#1 -if ((new Number(1) << 0) !== 1) { - $ERROR('#1: (new Number(1) << 0) === 1. Actual: ' + ((new Number(1) << 0))); -} - -// CHECK#2 -if ((-1.234 << 0) !== -1) { - $ERROR('#2: (-1.234 << 0) === -1. Actual: ' + ((-1.234 << 0))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.5_ToInt32/S9.5_A3.1_T3.js b/tests/ES3/Conformance/09_Type_Conversion/9.5_ToInt32/S9.5_A3.1_T3.js deleted file mode 100644 index 232b59603..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.5_ToInt32/S9.5_A3.1_T3.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.5_A3.1_T3; - * @section: 9.5; - * @assertion: Operator uses ToNumber; - * @description: Type(x) is String; -*/ - -// CHECK#1 -if ((new String(1) << 0) !== 1) { - $ERROR('#1: (new String(1) << 0) === 1. Actual: ' + ((new String(1) << 0))); -} - -// CHECK#2 -if (("-1.234" << 0) !== -1) { - $ERROR('#2: ("-1.234" << 0) === -1. Actual: ' + (("-1.234" << 0))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.5_ToInt32/S9.5_A3.1_T4.js b/tests/ES3/Conformance/09_Type_Conversion/9.5_ToInt32/S9.5_A3.1_T4.js deleted file mode 100644 index 1c1542545..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.5_ToInt32/S9.5_A3.1_T4.js +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.5_A3.1_T4; - * @section: 9.5; - * @assertion: Operator uses ToNumber; - * @description: Type(x) is Object; -*/ - -//CHECK#1 -var object = {valueOf: function() {return 1}}; -if (~object !== ~1) { - $ERROR('#1: var object = {valueOf: function() {return 1}}; ~object === ~1'); -} - -//CHECK#2 -var object = {valueOf: function() {return 1}, toString: function() {return 0}}; -if (~object !== ~1) { - $ERROR('#2: var object = {valueOf: function() {return 1}, toString: function() {return 0}}; ~object === ~1'); -} - -//CHECK#3 -var object = {valueOf: function() {return 1}, toString: function() {return {}}}; -if (~object !== ~1) { - $ERROR('#3: var object = {valueOf: function() {return 1}, toString: function() {return {}}}; ~object === ~1'); -} - -//CHECK#4 -try { - var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; - if (~object !== ~1) { - $ERROR('#4.1: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; ~object === ~1'); - } -} -catch (e) { - if (e === ~"error") { - $ERROR('#4.2: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; ~object not throw "error"'); - } else { - $ERROR('#4.3: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; ~object not throw Error. Actual: ' + (e)); - } -} - -//CHECK#5 -var object = {toString: function() {return 1}}; -if (~object !== ~1) { - $ERROR('#5: var object = {toString: function() {return 1}}; ~object === ~1'); -} - -//CHECK#6 -var object = {valueOf: function() {return {}}, toString: function() {return 1}} -if (~object !== ~1) { - $ERROR('#6: var object = {valueOf: function() {return {}}, toString: function() {return 1}}; ~object === ~1'); -} - -//CHECK#7 -try { - var object = {valueOf: function() {throw "error"}, toString: function() {return 1}}; - ~object; - $ERROR('#7.1: var object = {valueOf: function() {throw "error"}, toString: function() {return 1}}; ~object throw "error". Actual: ' + (~object)); -} -catch (e) { - if (e !== "error") { - $ERROR('#7.2: var object = {valueOf: function() {throw "error"}, toString: function() {return 1}}; ~object throw "error". Actual: ' + (e)); - } -} - -//CHECK#8 -try { - var object = {valueOf: function() {return {}}, toString: function() {return {}}}; - ~object; - $ERROR('#8.1: var object = {valueOf: function() {return {}}, toString: function() {return {}}}; ~object throw TypeError. Actual: ' + (~object)); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#8.2: var object = {valueOf: function() {return {}}, toString: function() {return {}}}; ~object throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.5_ToInt32/S9.5_A3.2_T1.js b/tests/ES3/Conformance/09_Type_Conversion/9.5_ToInt32/S9.5_A3.2_T1.js deleted file mode 100644 index 8beac1c72..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.5_ToInt32/S9.5_A3.2_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.5_A3.2_T1; - * @section: 9.5; - * @assertion: Operator uses floor, abs; - * @description: Use operator <<0; -*/ - -// CHECK#1 -if ((1.2345 << 0) !== 1) { - $ERROR('#1: (1.2345 << 0) === 1. Actual: ' + ((1.2345 << 0))); -} - -// CHECK#2 -if ((-5.4321 << 0) !== -5) { - $ERROR('#2: (-5.4321 << 0) === -5. Actual: ' + ((-5.4321 << 0))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.5_ToInt32/S9.5_A3.2_T2.js b/tests/ES3/Conformance/09_Type_Conversion/9.5_ToInt32/S9.5_A3.2_T2.js deleted file mode 100644 index 319e482df..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.5_ToInt32/S9.5_A3.2_T2.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.5_A3.2_T2; - * @section: 9.5; - * @assertion: Operator uses floor, abs; - * @description: Use operator ~; -*/ - -// CHECK#1 -if (~1.2345 !== ~1) { - $ERROR('#1: ~1.2345 === ~1)'); -} - -// CHECK#2 -if (~-5.4321 !== ~-5) { - $ERROR('#2: ~-5.4321 === ~-5)'); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.6_ToUint32/S9.6_A1.js b/tests/ES3/Conformance/09_Type_Conversion/9.6_ToUint32/S9.6_A1.js deleted file mode 100644 index 9b4496f0c..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.6_ToUint32/S9.6_A1.js +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.6_A1; - * @section: 9.6, 11.7.3; - * @assertion: If value is NaN, +0, -0, +Infinity, or -Infinity, return +0; - * @description: For testing use operator >>>0; -*/ - -// CHECK#1 -if ((Number.NaN >>> 0) !== +0) { - $ERROR('#1.1: (Number.NaN >>> 0) === 0. Actual: ' + ((Number.NaN >>> 0))); -} else if (1/(Number.NaN >>> 0) !== Number.POSITIVE_INFINITY) { - $ERROR('#1.2: (Number.NaN >>> 0) === +0. Actual: -0'); -} - -// CHECK#2 -if ((Number("abc") >>> 0) !== +0) { - $ERROR('#2.1: (Number("abc") >>> 0) === 0. Actual: ' + ((Number("abc") >>> 0))); -} else if (1/(0 >>> 0) !== Number.POSITIVE_INFINITY) { - $ERROR('#2.2: (0 >>> 0) === +0. Actual: -0'); -} - -// CHECK#3 -if ((0 >>> 0) !== +0) { - $ERROR('#3.1: (0 >>> 0) === 0. Actual: ' + ((0 >>> 0))); -} else if (1/(0 >>> 0) !== Number.POSITIVE_INFINITY) { - $ERROR('#3.2: (0 >>> 0) === +0. Actual: -0'); -} - -// CHECK#4 -if ((-0 >>> 0) !== +0) { - $ERROR("#4.1: (-0 >>> 0) === 0"); -} else if (1/(-0 >>> 0) !== Number.POSITIVE_INFINITY) { - $ERROR("#4.2: (-0 >>> 0) === +0. Actual: -0"); -} - -// CHECK#5 -if ((Number.POSITIVE_INFINITY >>> 0) !== +0) { - $ERROR('#5.1: (Number.POSITIVE_INFINITY >>> 0) === 0. Actual: ' + ((Number.POSITIVE_INFINITY >>> 0))); -} else if (1/(Number.POSITIVE_INFINITY >>> 0) !== Number.POSITIVE_INFINITY) { - $ERROR('#5.2: (Number.POSITIVE_INFINITY >>> 0) === +0. Actual: -0'); -} - -// CHECK#6 -if ((Number.NEGATIVE_INFINITY >>> 0) !== +0) { - $ERROR("#6.1: (Number.NEGATIVE_INFINITY >>> 0) === 0"); -} else if (1/(Number.NEGATIVE_INFINITY >>> 0) !== Number.POSITIVE_INFINITY) { - $ERROR("#6.2: (Number.NEGATIVE_INFINITY >>> 0) === +0. Actual: -0"); -} - - diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.6_ToUint32/S9.6_A2.1.js b/tests/ES3/Conformance/09_Type_Conversion/9.6_ToUint32/S9.6_A2.1.js deleted file mode 100644 index 06c476fdd..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.6_ToUint32/S9.6_A2.1.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.6_A2.1; - * @section: 9.6, 11.7.3; - * @assertion: ToUint32 returns values between 0 and 2^32-1; - * @description: Converting numbers, which are in\outside of Uint32 scopes, with >>>0 operator; -*/ - -// CHECK#1 -if ((0 >>> 0) !== 0) { - $ERROR('#1: (0 >>> 0) === 0. Actual: ' + ((0 >>> 0))); -} - -// CHECK#2 -if ((1 >>> 0) !== 1) { - $ERROR('#2: (1 >>> 0) === 1. Actual: ' + ((1 >>> 0))); -} - -// CHECK#3 -if ((-1 >>> 0) !== 4294967295) { - $ERROR('#3: (-1 >>> 0) === 4294967295. Actual: ' + ((-1 >>> 0))); -} - -// CHECK#4 -if ((4294967295 >>> 0) !== 4294967295) { - $ERROR('#4: (4294967295 >>> 0) === 4294967295. Actual: ' + ((4294967295 >>> 0))); -} - -// CHECK#5 -if ((4294967294 >>> 0) !== 4294967294) { - $ERROR('#5: (4294967294 >>> 0) === 4294967294. Actual: ' + ((4294967294 >>> 0))); -} - -// CHECK#6 -if ((4294967296 >>> 0) !== 0) { - $ERROR('#6: (4294967296 >>> 0) === 0. Actual: ' + ((4294967296 >>> 0))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.6_ToUint32/S9.6_A2.2.js b/tests/ES3/Conformance/09_Type_Conversion/9.6_ToUint32/S9.6_A2.2.js deleted file mode 100644 index 3e0ff3b52..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.6_ToUint32/S9.6_A2.2.js +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.6_A2.2; - * @section: 9.6, 11.7.3; - * @assertion: Compute result modulo 2^32; - * @description: Use operator >>>0; -*/ - -// CHECK#1 -if ((-2147483647 >>> 0) !== 2147483649) { - $ERROR('#1: (-2147483647 >>> 0) === 2147483649. Actual: ' + ((-2147483647 >>> 0))); -} - -// CHECK#2 -if ((-2147483648 >>> 0) !== 2147483648) { - $ERROR('#2: (-2147483648 >>> 0) === 2147483648. Actual: ' + ((-2147483648 >>> 0))); -} - -// CHECK#3 -if ((-2147483649 >>> 0) !== 2147483647) { - $ERROR('#3: (-2147483649 >>> 0) === 2147483647. Actual: ' + ((-2147483649 >>> 0))); -} - -// CHECK#4 -if ((-4294967295 >>> 0) !== 1) { - $ERROR('#4: (-4294967295 >>> 0) === 1. Actual: ' + ((-4294967295 >>> 0))); -} - -// CHECK#5 -if ((-4294967296 >>> 0) !== -0) { - $ERROR('#5: (-4294967296 >>> 0) === 0. Actual: ' + ((-4294967296 >>> 0))); -} - -// CHECK#6 -if ((-4294967297 >>> 0) !== 4294967295) { - $ERROR('#6: (-4294967297 >>> 0) === 4294967295. Actual: ' + ((-4294967297 >>> 0))); -} - -// CHECK#7 -if ((4294967295 >>> 0) !== 4294967295) { - $ERROR('#7: (4294967295 >>> 0) === 4294967295. Actual: ' + ((4294967295 >>> 0))); -} - -// CHECK#8 -if ((4294967296 >>> 0) !== 0) { - $ERROR('#8: (4294967296 >>> 0) === 0. Actual: ' + ((4294967296 >>> 0))); -} - -// CHECK#9 -if ((4294967297 >>> 0) !== 1) { - $ERROR('#9: (4294967297 >>> 0) === 1. Actual: ' + ((4294967297 >>> 0))); -} - -// CHECK#10 -if ((8589934591 >>> 0) !== 4294967295) { - $ERROR('#10: (8589934591 >>> 0) === 4294967295. Actual: ' + ((8589934591 >>> 0))); -} - -// CHECK#11 -if ((8589934592 >>> 0) !== 0) { - $ERROR('#11: (8589934592 >>> 0) === 0. Actual: ' + ((8589934592 >>> 0))); -} - -// CHECK#12 -if ((8589934593 >>> 0) !== 1) { - $ERROR('#12: (8589934593 >>> 0) === 1. Actual: ' + ((8589934593 >>> 0))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.6_ToUint32/S9.6_A3.1_T1.js b/tests/ES3/Conformance/09_Type_Conversion/9.6_ToUint32/S9.6_A3.1_T1.js deleted file mode 100644 index 5e723add4..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.6_ToUint32/S9.6_A3.1_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.6_A3.1_T1; - * @section: 9.6; - * @assertion: Operator uses ToNumber; - * @description: Type(x) is Boolean; -*/ - -// CHECK#1 -if ((new Boolean(true) >>> 0) !== 1) { - $ERROR('#1: (new Boolean(true) >>> 0) === 1. Actual: ' + ((new Boolean(true) >>> 0))); -} - -// CHECK#2 -if ((false >>> 0) !== 0) { - $ERROR('#2: (false >>> 0) === 0. Actual: ' + ((false >>> 0))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.6_ToUint32/S9.6_A3.1_T2.js b/tests/ES3/Conformance/09_Type_Conversion/9.6_ToUint32/S9.6_A3.1_T2.js deleted file mode 100644 index 518d9c148..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.6_ToUint32/S9.6_A3.1_T2.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.6_A3.1_T2; - * @section: 9.6; - * @assertion: Operator uses ToNumber; - * @description: Type(x) is Number; -*/ - -// CHECK#1 -if ((new Number(1) >>> 0) !== 1) { - $ERROR('#1: (new Number(1) >>> 0) === 1. Actual: ' + ((new Number(1) >>> 0))); -} - -// CHECK#2 -if ((-1.234 >>> 0) !== 4294967295) { - $ERROR('#2: (-1.234 >>> 0) === 4294967295. Actual: ' + ((-1.234 >>> 0))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.6_ToUint32/S9.6_A3.1_T3.js b/tests/ES3/Conformance/09_Type_Conversion/9.6_ToUint32/S9.6_A3.1_T3.js deleted file mode 100644 index 2fc5d9d6c..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.6_ToUint32/S9.6_A3.1_T3.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.6_A3.1_T3; - * @section: 9.6; - * @assertion: Operator uses ToNumber; - * @description: Type(x) is String; -*/ - -// CHECK#1 -if ((new String(1) >>> 0) !== 1) { - $ERROR('#1: (new String(1) >>> 0) === 1. Actual: ' + ((new String(1) >>> 0))); -} - -// CHECK#2 -if (("-1.234" >>> 0) !== 4294967295) { - $ERROR('#2: ("-1.234" >>> 0) === 4294967295. Actual: ' + (("-1.234" >>> 0))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.6_ToUint32/S9.6_A3.1_T4.js b/tests/ES3/Conformance/09_Type_Conversion/9.6_ToUint32/S9.6_A3.1_T4.js deleted file mode 100644 index 4929b3c31..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.6_ToUint32/S9.6_A3.1_T4.js +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.6_A3.1_T4; - * @section: 9.6; - * @assertion: Operator uses ToNumber; - * @description: Type(x) is Object; -*/ - -//CHECK#1 -var object = {valueOf: function() {return 1}}; -if ((object >>> 0) !== 1) { - $ERROR('#1: var object = {valueOf: function() {return 1}}; (object >>> 0) === 1. Actual: ' + ((object >>> 0))); -} - -//CHECK#2 -var object = {valueOf: function() {return 1}, toString: function() {return 0}}; -if ((object >>> 0) !== 1) { - $ERROR('#2: var object = {valueOf: function() {return 1}, toString: function() {return 0}}; (object >>> 0) === 1. Actual: ' + ((object >>> 0))); -} - -//CHECK#3 -var object = {valueOf: function() {return 1}, toString: function() {return {}}}; -if ((object >>> 0) !== 1) { - $ERROR('#3: var object = {valueOf: function() {return 1}, toString: function() {return {}}}; (object >>> 0) === 1. Actual: ' + ((object >>> 0))); -} - -//CHECK#4 -try { - var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; - if ((object >>> 0) !== 1) { - $ERROR('#4.1: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; (object >>> 0) === 1. Actual: ' + ((object >>> 0))); - } -} -catch (e) { - if (e === "error") { - $ERROR('#4.2: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; object not throw "error"'); - } else { - $ERROR('#4.3: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; object not throw Error. Actual: ' + (e)); - } -} - -//CHECK#5 -var object = {toString: function() {return 1}}; -if ((object >>> 0) !== 1) { - $ERROR('#5: var object = {toString: function() {return 1}}; (object >>> 0) === 1. Actual: ' + ((object >>> 0))); -} - -//CHECK#6 -var object = {valueOf: function() {return {}}, toString: function() {return 1}} -if ((object >>> 0) !== 1) { - $ERROR('#6: var object = {valueOf: function() {return {}}, toString: function() {return 1}}; (object >>> 0) === 1. Actual: ' + ((object >>> 0))); -} - -//CHECK#7 -try { - var object = {valueOf: function() {throw "error"}, toString: function() {return 1}}; - object >>> 0; - $ERROR('#7.1: var object = {valueOf: function() {throw "error"}, toString: function() {return 1}}; object throw "error". Actual: ' + (object >>> 0)); -} -catch (e) { - if (e !== "error") { - $ERROR('#7.2: var object = {valueOf: function() {throw "error"}, toString: function() {return 1}}; object throw "error". Actual: ' + (e)); - } -} - -//CHECK#8 -try { - var object = {valueOf: function() {return {}}, toString: function() {return {}}}; - object >>> 0; - $ERROR('#8.1: var object = {valueOf: function() {return {}}, toString: function() {return {}}}; object throw TypeError. Actual: ' + (object >>> 0)); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#8.2: var object = {valueOf: function() {return {}}, toString: function() {return {}}}; object throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.6_ToUint32/S9.6_A3.2_T1.js b/tests/ES3/Conformance/09_Type_Conversion/9.6_ToUint32/S9.6_A3.2_T1.js deleted file mode 100644 index 4c24e6ba2..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.6_ToUint32/S9.6_A3.2_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.6_A3.2_T1; - * @section: 9.6; - * @assertion: Operator uses floor, abs; - * @description: Use operator >>>0; -*/ - -// CHECK#1 -if ((1.2345 >>> 0) !== 1) { - $ERROR('#1: (1.2345 >>> 0) === 1. Actual: ' + ((1.2345 >>> 0))); -} - -// CHECK#2 -if ((-5.4321 >>> 0) !== 4294967291) { - $ERROR('#2: (-5.4321 >>> 0) === 4294967291. Actual: ' + ((-5.4321 >>> 0))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.7_ToUint16/S9.7_A1.js b/tests/ES3/Conformance/09_Type_Conversion/9.7_ToUint16/S9.7_A1.js deleted file mode 100644 index 2b4fa4a14..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.7_ToUint16/S9.7_A1.js +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.7_A1; - * @section: 9.7, 15.5.3.2, 15.5.4.5; - * @assertion: If value is NaN, +0, -0, +Infinity, or -Infinity, return +0; - * @description: For testing use String.fromCharCode(Number).charCodeAt(0) construction; -*/ - -// CHECK#1 -if (String.fromCharCode(Number.NaN).charCodeAt(0) !== +0) { - $ERROR('#1.1: String.fromCharCode(Number.NaN).charCodeAt(0) === 0. Actual: ' + (String.fromCharCode(Number.NaN).charCodeAt(0))); -} else if (1/String.fromCharCode(Number.NaN).charCodeAt(0) !== Number.POSITIVE_INFINITY) { - $ERROR('#1.2: String.fromCharCode(Number.NaN).charCodeAt(0) === +0. Actual: -0'); -} - -// CHECK#2 -if (String.fromCharCode(Number("abc")).charCodeAt(0) !== +0) { - $ERROR('#2.1: String.fromCharCode(Number("abc")).charCodeAt(0) === 0. Actual: ' + (String.fromCharCode(Number("abc")).charCodeAt(0))); -} else if (1/String.fromCharCode(0).charCodeAt(0) !== Number.POSITIVE_INFINITY) { - $ERROR('#2.2: String.fromCharCode(0).charCodeAt(0) === +0. Actual: -0'); -} - -// CHECK#3 -if (String.fromCharCode(0).charCodeAt(0) !== +0) { - $ERROR('#3.1: String.fromCharCode(0).charCodeAt(0) === 0. Actual: ' + (String.fromCharCode(0).charCodeAt(0))); -} else if (1/String.fromCharCode(0).charCodeAt(0) !== Number.POSITIVE_INFINITY) { - $ERROR('#3.2: String.fromCharCode(0).charCodeAt(0) === +0. Actual: -0'); -} - -// CHECK#4 -if (String.fromCharCode(-0).charCodeAt(0) !== +0) { - $ERROR("#4.1: String.fromCharCode(-0).charCodeAt(0) === +0"); -} else if (1/String.fromCharCode(-0).charCodeAt(0) !== Number.POSITIVE_INFINITY) { - $ERROR("#4.2: String.fromCharCode(-0).charCodeAt(0) === +0. Actual: -0"); -} - -// CHECK#5 -if (String.fromCharCode(Number.POSITIVE_INFINITY).charCodeAt(0) !== +0) { - $ERROR('#5.1: String.fromCharCode(Number.POSITIVE_INFINITY).charCodeAt(0) === 0. Actual: ' + (String.fromCharCode(Number.POSITIVE_INFINITY).charCodeAt(0))); -} else if (1/String.fromCharCode(Number.POSITIVE_INFINITY).charCodeAt(0) !== Number.POSITIVE_INFINITY) { - $ERROR('#5.2: String.fromCharCode(Number.POSITIVE_INFINITY).charCodeAt(0) === +0. Actual: -0'); -} - -// CHECK#6 -if (String.fromCharCode(Number.NEGATIVE_INFINITY).charCodeAt(0) !== +0) { - $ERROR("#6.1: String.fromCharCode(Number.NEGATIVE_INFINITY).charCodeAt(0) === +0"); -} else if (1/String.fromCharCode(Number.NEGATIVE_INFINITY).charCodeAt(0) !== Number.POSITIVE_INFINITY) { - $ERROR("#6.2: String.fromCharCode(Number.NEGATIVE_INFINITY).charCodeAt(0) === +0. Actual: -0"); -} - - diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.7_ToUint16/S9.7_A2.1.js b/tests/ES3/Conformance/09_Type_Conversion/9.7_ToUint16/S9.7_A2.1.js deleted file mode 100644 index 15d7d7e4b..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.7_ToUint16/S9.7_A2.1.js +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.7_A2.1; - * @section: 9.7, 11.7.3; - * @assertion: ToUint16 returns values between 0 and 2^16-1; - * @description: Converting numbers, which are in\outside of Uint16 scopes, with String.fromCharCode(Number).charCodeAt(0) construction; -*/ - -// CHECK#1 -if (String.fromCharCode(0).charCodeAt(0) !== 0) { - $ERROR('#1: String.fromCharCode(0).charCodeAt(0) === 0. Actual: ' + (String.fromCharCode(0).charCodeAt(0))); -} - -// CHECK#2 -if (String.fromCharCode(1).charCodeAt(0) !== 1) { - $ERROR('#2: String.fromCharCode(1).charCodeAt(0) === 1. Actual: ' + (String.fromCharCode(1).charCodeAt(0))); -} - -// CHECK#3 -if (String.fromCharCode(-1).charCodeAt(0) !== 65535) { - $ERROR('#3: String.fromCharCode(-1).charCodeAt(0) === 65535. Actual: ' + (String.fromCharCode(-1).charCodeAt(0))); -} - -// CHECK#4 -if (String.fromCharCode(65535).charCodeAt(0) !== 65535) { - $ERROR('#4: String.fromCharCode(65535).charCodeAt(0) === 65535. Actual: ' + (String.fromCharCode(65535).charCodeAt(0))); -} - -// CHECK#5 -if (String.fromCharCode(65534).charCodeAt(0) !== 65534) { - $ERROR('#5: String.fromCharCode(65534).charCodeAt(0) === 65534. Actual: ' + (String.fromCharCode(65534).charCodeAt(0))); -} - -// CHECK#6 -if (String.fromCharCode(65536).charCodeAt(0) !== 0) { - $ERROR('#6: String.fromCharCode(65536).charCodeAt(0) === 0. Actual: ' + (String.fromCharCode(65536).charCodeAt(0))); -} - -// CHECK#7 -if (String.fromCharCode(4294967295).charCodeAt(0) !== 65535) { - $ERROR('#7: String.fromCharCode(4294967295).charCodeAt(0) === 65535. Actual: ' + (String.fromCharCode(4294967295).charCodeAt(0))); -} - -// CHECK#8 -if (String.fromCharCode(4294967294).charCodeAt(0) !== 65534) { - $ERROR('#8: String.fromCharCode(4294967294).charCodeAt(0) === 65534. Actual: ' + (String.fromCharCode(4294967294).charCodeAt(0))); -} - -// CHECK#9 -if (String.fromCharCode(4294967296).charCodeAt(0) !== 0) { - $ERROR('#9: String.fromCharCode(4294967296).charCodeAt(0) === 0. Actual: ' + (String.fromCharCode(4294967296).charCodeAt(0))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.7_ToUint16/S9.7_A2.2.js b/tests/ES3/Conformance/09_Type_Conversion/9.7_ToUint16/S9.7_A2.2.js deleted file mode 100644 index c99d9be8e..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.7_ToUint16/S9.7_A2.2.js +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.7_A2.2; - * @section: 9.7, 11.7.3; - * @assertion: Compute result modulo 2^16; - * @description: For testing use String.fromCharCode(Number).charCodeAt(0) construction; -*/ - -// CHECK#1 -if (String.fromCharCode(-32767).charCodeAt(0) !== 32769) { - $ERROR('#1: String.fromCharCode(-32767).charCodeAt(0) === 32769. Actual: ' + (String.fromCharCode(-32767).charCodeAt(0))); -} - -// CHECK#2 -if (String.fromCharCode(-32768).charCodeAt(0) !== 32768) { - $ERROR('#2: String.fromCharCode(-32768).charCodeAt(0) === 32768. Actual: ' + (String.fromCharCode(-32768).charCodeAt(0))); -} - -// CHECK#3 -if (String.fromCharCode(-32769).charCodeAt(0) !== 32767) { - $ERROR('#3: String.fromCharCode(-32769).charCodeAt(0) === 32767. Actual: ' + (String.fromCharCode(-32769).charCodeAt(0))); -} - -// CHECK#4 -if (String.fromCharCode(-65535).charCodeAt(0) !== 1) { - $ERROR('#4: String.fromCharCode(-65535).charCodeAt(0) === 1. Actual: ' + (String.fromCharCode(-65535).charCodeAt(0))); -} - -// CHECK#5 -if (String.fromCharCode(-65536).charCodeAt(0) !== -0) { - $ERROR('#5: String.fromCharCode(-65536).charCodeAt(0) === 0. Actual: ' + (String.fromCharCode(-65536).charCodeAt(0))); -} - -// CHECK#6 -if (String.fromCharCode(-65537).charCodeAt(0) !== 65535) { - $ERROR('#6: String.fromCharCode(-65537).charCodeAt(0) === 65535. Actual: ' + (String.fromCharCode(-65537).charCodeAt(0))); -} - -// CHECK#7 -if (String.fromCharCode(65535).charCodeAt(0) !== 65535) { - $ERROR('#7: String.fromCharCode(65535).charCodeAt(0) === 65535. Actual: ' + (String.fromCharCode(65535).charCodeAt(0))); -} - -// CHECK#8 -if (String.fromCharCode(65536).charCodeAt(0) !== 0) { - $ERROR('#8: String.fromCharCode(65536).charCodeAt(0) === 0. Actual: ' + (String.fromCharCode(65536).charCodeAt(0))); -} - -// CHECK#9 -if (String.fromCharCode(65537).charCodeAt(0) !== 1) { - $ERROR('#9: String.fromCharCode(65537).charCodeAt(0) === 1. Actual: ' + (String.fromCharCode(65537).charCodeAt(0))); -} - -// CHECK#10 -if (String.fromCharCode(131071).charCodeAt(0) !== 65535) { - $ERROR('#10: String.fromCharCode(131071).charCodeAt(0) === 65535. Actual: ' + (String.fromCharCode(131071).charCodeAt(0))); -} - -// CHECK#11 -if (String.fromCharCode(131072).charCodeAt(0) !== 0) { - $ERROR('#11: String.fromCharCode(131072).charCodeAt(0) === 0. Actual: ' + (String.fromCharCode(131072).charCodeAt(0))); -} - -// CHECK#12 -if (String.fromCharCode(131073).charCodeAt(0) !== 1) { - $ERROR('#12: String.fromCharCode(131073).charCodeAt(0) === 1. Actual: ' + (String.fromCharCode(131073).charCodeAt(0))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.7_ToUint16/S9.7_A3.1_T1.js b/tests/ES3/Conformance/09_Type_Conversion/9.7_ToUint16/S9.7_A3.1_T1.js deleted file mode 100644 index 27a090881..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.7_ToUint16/S9.7_A3.1_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.7_A3.1_T1; - * @section: 9.7; - * @assertion: Operator uses ToNumber; - * @description: Type(x) is Boolean; -*/ - -// CHECK#1 -if (String.fromCharCode(new Boolean(true)).charCodeAt(0) !== 1) { - $ERROR('#1: String.fromCharCode(new Boolean(true)).charCodeAt(0) === 1. Actual: ' + (String.fromCharCode(new Boolean(true)).charCodeAt(0))); -} - -// CHECK#2 -if (String.fromCharCode(false).charCodeAt(0) !== 0) { - $ERROR('#2: String.fromCharCode(false).charCodeAt(0) === 0. Actual: ' + (String.fromCharCode(false).charCodeAt(0))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.7_ToUint16/S9.7_A3.1_T2.js b/tests/ES3/Conformance/09_Type_Conversion/9.7_ToUint16/S9.7_A3.1_T2.js deleted file mode 100644 index 1e3a0a743..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.7_ToUint16/S9.7_A3.1_T2.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.7_A3.1_T2; - * @section: 9.7; - * @assertion: Operator uses ToNumber; - * @description: Type(x) is Number; -*/ - -// CHECK#1 -if (String.fromCharCode(new Number(1)).charCodeAt(0) !== 1) { - $ERROR('#1: String.fromCharCode(new Number(1)).charCodeAt(0) === 1. Actual: ' + (String.fromCharCode(new Number(1)).charCodeAt(0))); -} - -// CHECK#2 -if (String.fromCharCode(-1.234).charCodeAt(0) !== 65535) { - $ERROR('#2: String.fromCharCode(-1.234).charCodeAt(0) === 65535. Actual: ' + (String.fromCharCode(-1.234).charCodeAt(0))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.7_ToUint16/S9.7_A3.1_T3.js b/tests/ES3/Conformance/09_Type_Conversion/9.7_ToUint16/S9.7_A3.1_T3.js deleted file mode 100644 index 60c2c4740..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.7_ToUint16/S9.7_A3.1_T3.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.7_A3.1_T3; - * @section: 9.7; - * @assertion: Operator uses ToNumber; - * @description: Type(x) is String; -*/ - -// CHECK#1 -if (String.fromCharCode(new String(1)).charCodeAt(0) !== 1) { - $ERROR('#1: String.fromCharCode(new String(1)).charCodeAt(0) === 1. Actual: ' + (String.fromCharCode(new String(1)).charCodeAt(0))); -} - -// CHECK#2 -if (String.fromCharCode("-1.234").charCodeAt(0) !== 65535) { - $ERROR('#2: String.fromCharCode("-1.234").charCodeAt(0) === 65535. Actual: ' + (String.fromCharCode("-1.234").charCodeAt(0))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.7_ToUint16/S9.7_A3.1_T4.js b/tests/ES3/Conformance/09_Type_Conversion/9.7_ToUint16/S9.7_A3.1_T4.js deleted file mode 100644 index da8610cd7..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.7_ToUint16/S9.7_A3.1_T4.js +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.7_A3.1_T4; - * @section: 9.7; - * @assertion: Operator uses ToNumber; - * @description: Type(x) is Object; -*/ - -//CHECK#1 -var object = {valueOf: function() {return 1}}; -if (String.fromCharCode(object).charCodeAt(0) !== 1) { - $ERROR('#1: var object = {valueOf: function() {return 1}}; String.fromCharCode(object).charCodeAt(0) === 1. Actual: ' + (String.fromCharCode(object).charCodeAt(0))); -} - -//CHECK#2 -var object = {valueOf: function() {return 1}, toString: function() {return 0}}; -if (String.fromCharCode(object).charCodeAt(0) !== 1) { - $ERROR('#2: var object = {valueOf: function() {return 1}, toString: function() {return 0}}; String.fromCharCode(object).charCodeAt(0) === 1. Actual: ' + (String.fromCharCode(object).charCodeAt(0))); -} - -//CHECK#3 -var object = {valueOf: function() {return 1}, toString: function() {return {}}}; -if (String.fromCharCode(object).charCodeAt(0) !== 1) { - $ERROR('#3: var object = {valueOf: function() {return 1}, toString: function() {return {}}}; String.fromCharCode(object).charCodeAt(0) === 1. Actual: ' + (String.fromCharCode(object).charCodeAt(0))); -} - -//CHECK#4 -try { - var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; - if (String.fromCharCode(object).charCodeAt(0) !== 1) { - $ERROR('#4.1: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; String.fromCharCode(object).charCodeAt(0) === 1. Actual: ' + (String.fromCharCode(object).charCodeAt(0))); - } -} -catch (e) { - if (e === "error") { - $ERROR('#4.2: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; object not throw "error"'); - } else { - $ERROR('#4.3: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; object not throw Error. Actual: ' + (e)); - } -} - -//CHECK#5 -var object = {toString: function() {return 1}}; -if (String.fromCharCode(object).charCodeAt(0) !== 1) { - $ERROR('#5: var object = {toString: function() {return 1}}; String.fromCharCode(object).charCodeAt(0) === 1. Actual: ' + (String.fromCharCode(object).charCodeAt(0))); -} - -//CHECK#6 -var object = {valueOf: function() {return {}}, toString: function() {return 1}} -if (String.fromCharCode(object).charCodeAt(0) !== 1) { - $ERROR('#6: var object = {valueOf: function() {return {}}, toString: function() {return 1}}; String.fromCharCode(object).charCodeAt(0) === 1. Actual: ' + (String.fromCharCode(object).charCodeAt(0))); -} - -//CHECK#7 -try { - var object = {valueOf: function() {throw "error"}, toString: function() {return 1}}; - object >>> 0; - $ERROR('#7.1: var object = {valueOf: function() {throw "error"}, toString: function() {return 1}}; object throw "error". Actual: ' + (object >>> 0)); -} -catch (e) { - if (e !== "error") { - $ERROR('#7.2: var object = {valueOf: function() {throw "error"}, toString: function() {return 1}}; object throw "error". Actual: ' + (e)); - } -} - -//CHECK#8 -try { - var object = {valueOf: function() {return {}}, toString: function() {return {}}}; - object >>> 0; - $ERROR('#8.1: var object = {valueOf: function() {return {}}, toString: function() {return {}}}; object throw TypeError. Actual: ' + (object >>> 0)); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#8.2: var object = {valueOf: function() {return {}}, toString: function() {return {}}}; object throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.7_ToUint16/S9.7_A3.2_T1.js b/tests/ES3/Conformance/09_Type_Conversion/9.7_ToUint16/S9.7_A3.2_T1.js deleted file mode 100644 index f0bc0e50f..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.7_ToUint16/S9.7_A3.2_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.7_A3.2_T1; - * @section: 9.7; - * @assertion: Operator uses floor, abs; - * @description: For testing use String.fromCharCode(Number).charCodeAt(0) construction; -*/ - -// CHECK#1 -if (String.fromCharCode(1.2345).charCodeAt(0) !== 1) { - $ERROR('#1: String.fromCharCode(1.2345).charCodeAt(0) === 1. Actual: ' + (String.fromCharCode(1.2345).charCodeAt(0))); -} - -// CHECK#2 -if (String.fromCharCode(-5.4321).charCodeAt(0) !== 65531) { - $ERROR('#2: String.fromCharCode(-5.4321).charCodeAt(0) === 65531. Actual: ' + (String.fromCharCode(-5.4321).charCodeAt(0))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.8_ToString/9.8.1_ToString_Applied_to_the_Number_Type/S9.8.1_A1.js b/tests/ES3/Conformance/09_Type_Conversion/9.8_ToString/9.8.1_ToString_Applied_to_the_Number_Type/S9.8.1_A1.js deleted file mode 100644 index 75549707d..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.8_ToString/9.8.1_ToString_Applied_to_the_Number_Type/S9.8.1_A1.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.8.1_A1; - * @section: 9.8.1; - * @assertion: If m is NaN, return the string "NaN"; - * @description: NaN convert to String by explicit transformation; -*/ - -// CHECK#1 -if (String(NaN) !== "NaN") { - $ERROR('#1: String(NaN) === Not-a-Number Actual: ' + (String(NaN))); -} - -// CHECK#2 -if (String(Number.NaN) !== "NaN") { - $ERROR('#2: String(Number.NaN) === Not-a-Number Actual: ' + (String(Number.NaN))); -} - -// CHECK#3 -if (String(Number("asasa")) !== "NaN") { - $ERROR('#3: String(Number("asasa")) === Not-a-Number Actual: ' + (String(Number("asasa")))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.8_ToString/9.8.1_ToString_Applied_to_the_Number_Type/S9.8.1_A10.js b/tests/ES3/Conformance/09_Type_Conversion/9.8_ToString/9.8.1_ToString_Applied_to_the_Number_Type/S9.8.1_A10.js deleted file mode 100644 index 13408bee6..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.8_ToString/9.8.1_ToString_Applied_to_the_Number_Type/S9.8.1_A10.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.8.1_A10; - * @section: 9.8.1; - * @assertion: Return the string consisting of the most significant - * digit of the decimal representation of s, followed by a decimal point '.', - * followed by the remaining k-1 digits of the decimal representation of s, - * followed by the lowercase character 'e', followed by a plus sign '+' or - * minus sign '-' according to whether n-1 is positive or negative, followed - * by the decimal representation of the integer abs(n-1) (with no leading zeros); - * @description: Various float numbers convert to String by explicit transformation; -*/ - -// CHECK#1 -if (String(1.2345) !== "1.2345") { - $ERROR('#1: String(1.2345) === "1.2345". Actual: ' + (String(1.2345))); -} - -// CHECK#2 -if (String(1.234567890) !== "1.23456789") { - $ERROR('#2: String(1.234567890) === "1.23456789". Actual: ' + (String(1.234567890))); -} - -// CHECK#3 -if (String(0.12345) !== "0.12345") { - $ERROR('#3: String(0.12345) === "0.12345". Actual: ' + (String(0.12345))); -} - -// CHECK#4 -if (String(.012345) !== "0.012345") { - $ERROR('#4: String(.012345) === "0.012345". Actual: ' + (String(.012345))); -} - -// CHECK#5 -if (String(.0012345) !== "0.0012345") { - $ERROR('#5: String(.0012345) === "0.0012345". Actual: ' + (String(.0012345))); -} - -// CHECK#6 -if (String(.00012345) !== "0.00012345") { - $ERROR('#6: String(.00012345) === "0.00012345". Actual: ' + (String(.00012345))); -} - -// CHECK#7 -if (String(.000012345) !== "0.000012345") { - $ERROR('#7: String(.000012345) === "0.000012345". Actual: ' + (String(.000012345))); -} - -// CHECK#8 -if (String(.0000012345) !== "0.0000012345") { - $ERROR('#8: String(.0000012345) === "0.0000012345". Actual: ' + (String(.0000012345))); -} - -// CHECK#9 -if (String(.00000012345) !== "1.2345e-7") { - $ERROR('#9: String(.00000012345) === "1.2345e-7". Actual: ' + (String(.00000012345))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.8_ToString/9.8.1_ToString_Applied_to_the_Number_Type/S9.8.1_A2.js b/tests/ES3/Conformance/09_Type_Conversion/9.8_ToString/9.8.1_ToString_Applied_to_the_Number_Type/S9.8.1_A2.js deleted file mode 100644 index 878e2ae4d..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.8_ToString/9.8.1_ToString_Applied_to_the_Number_Type/S9.8.1_A2.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.8.1_A2; - * @section: 9.8.1; - * @assertion: If m is +0 or -0, return the string "0"; - * @description: +0 and -0 convert to String by explicit transformation; -*/ - -// CHECK#1 -if (String(+0) !== "0") { - $ERROR('#1: String(+0) === "0". Actual: ' + (String(+0))); -} - -// CHECK#2 -if (String(-0) !== "0") { - $ERROR('#2: String(-0) === "0". Actual: ' + (String(-0))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.8_ToString/9.8.1_ToString_Applied_to_the_Number_Type/S9.8.1_A3.js b/tests/ES3/Conformance/09_Type_Conversion/9.8_ToString/9.8.1_ToString_Applied_to_the_Number_Type/S9.8.1_A3.js deleted file mode 100644 index 87666fc93..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.8_ToString/9.8.1_ToString_Applied_to_the_Number_Type/S9.8.1_A3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.8.1_A3; - * @section: 9.8.1; - * @assertion: If m is less than zero, return the string concatenation of the - * string "-" and ToString(-m); - * @description: -1234567890 convert to String by explicit transformation; -*/ - -// CHECK#1 -if (String(-1234567890) !== "-1234567890") { - $ERROR('#1: String(-1234567890) === "-1234567890". Actual: ' + (String(-1234567890))); -} - -// CHECK#2 -if ("-"+String(-(-1234567890)) !== "-1234567890") { - $ERROR('#2: "-"+String(-(-1234567890)) === "-1234567890". Actual: ' + ("-"+String(-(-1234567890)))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.8_ToString/9.8.1_ToString_Applied_to_the_Number_Type/S9.8.1_A4.js b/tests/ES3/Conformance/09_Type_Conversion/9.8_ToString/9.8.1_ToString_Applied_to_the_Number_Type/S9.8.1_A4.js deleted file mode 100644 index 2e3435f43..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.8_ToString/9.8.1_ToString_Applied_to_the_Number_Type/S9.8.1_A4.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.8.1_A4; - * @section: 9.8.1; - * @assertion: If m is infinity, return the string "Infinity"; - * @description: +/-Infinity convert to String by explicit transformation; -*/ - -// CHECK#1 -if (String(Infinity) !== "Infinity") { - $ERROR('#1: String(Infinity) === "Infinity". Actual: ' + (String(Infinity))); -} - -// CHECK#2 -if (String(Number.POSITIVE_INFINITY) !== "Infinity") { - $ERROR('#2: String(Number.POSITIVE_INFINITY) === "Infinity". Actual: ' + (String(Number.POSITIVE_INFINITY))); -} - -// CHECK#3 -if (String(-Infinity) !== "-Infinity") { - $ERROR('#3: String(-Infinity) === "-Infinity". Actual: ' + (String(-Infinity))); -} - -// CHECK#4 -if (String(Number.NEGATIVE_INFINITY) !== "-Infinity") { - $ERROR('#4: String(Number.NEGATIVE_INFINITY) === "-Infinity". Actual: ' + (String(Number.NEGATIVE_INFINITY))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.8_ToString/9.8.1_ToString_Applied_to_the_Number_Type/S9.8.1_A6.js b/tests/ES3/Conformance/09_Type_Conversion/9.8_ToString/9.8.1_ToString_Applied_to_the_Number_Type/S9.8.1_A6.js deleted file mode 100644 index 55d51fa0f..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.8_ToString/9.8.1_ToString_Applied_to_the_Number_Type/S9.8.1_A6.js +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.8.1_A6; - * @section: 9.8.1; - * @assertion: If 1 <= s < 1e21 or -1e21 s < -1, return the string - * consisting of the k digits of the decimal representation of s (in order, - * with no leading zeroes), followed by n-k occurrences of the character '0'; - * @description: Various integer numbers convert to String by explicit transformation; -*/ - -// CHECK#1 -if (String(1) !== "1") { - $ERROR('#1: String(1) === "1". Actual: ' + (String(1))); -} - -// CHECK#2 -if (String(10) !== "10") { - $ERROR('#2: String(10) === "10". Actual: ' + (String(10))); -} - -// CHECK#3 -if (String(100) !== "100") { - $ERROR('#3: String(100) === "100". Actual: ' + (String(100))); -} - -// CHECK#4 -if (String(100000000000000000000) !== "100000000000000000000") { - $ERROR('#4: String(100000000000000000000) === "100000000000000000000". Actual: ' + (String(100000000000000000000))); -} - -// CHECK#5 -if (String(1e20) !== "100000000000000000000") { - $ERROR('#5: String(1e20) === "100000000000000000000". Actual: ' + (String(1e20))); -} - -// CHECK#6 -if (String(12345) !== "12345") { - $ERROR('#6: String(12345) === "12345". Actual: ' + (String(12345))); -} - -// CHECK#7 -if (String(12345000) !== "12345000") { - $ERROR('#7: String(12345000) === "12345000". Actual: ' + (String(12345000))); -} - -// CHECK#8 -if (String(-1) !== "-1") { - $ERROR('#8: String(-1) === "-1". Actual: ' + (String(-1))); -} - -// CHECK#9 -if (String(-10) !== "-10") { - $ERROR('#9: String(-10) === "-10". Actual: ' + (String(-10))); -} - -// CHECK#10 -if (String(-100) !== "-100") { - $ERROR('#3: String(-100) === "-100". Actual: ' + (String(-100))); -} - -// CHECK#10 -if (String(-100000000000000000000) !== "-100000000000000000000") { - $ERROR('#10: String(-100000000000000000000) === "-100000000000000000000". Actual: ' + (String(-100000000000000000000))); -} - -// CHECK#11 -if (String(-1e20) !== "-100000000000000000000") { - $ERROR('#11: String(-1e20) === "-100000000000000000000". Actual: ' + (String(-1e20))); -} - -// CHECK#12 -if (String(-12345) !== "-12345") { - $ERROR('#12: String(-12345) === "-12345". Actual: ' + (String(-12345))); -} - -// CHECK#13 -if (String(-12345000) !== "-12345000") { - $ERROR('#13: String(-12345000) === "-12345000". Actual: ' + (String(-12345000))); -} - -// CHECK#14 -if (String(1E20) !== "100000000000000000000") { - $ERROR('#14: String(1E20) === "100000000000000000000". Actual: ' + (String(1E20))); -} - -// CHECK#15 -if (String(-1E20) !== "-100000000000000000000") { - $ERROR('#15: String(-1E20) === "-100000000000000000000". Actual: ' + (String(-1E20))); -} - diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.8_ToString/9.8.1_ToString_Applied_to_the_Number_Type/S9.8.1_A7.js b/tests/ES3/Conformance/09_Type_Conversion/9.8_ToString/9.8.1_ToString_Applied_to_the_Number_Type/S9.8.1_A7.js deleted file mode 100644 index 296326e8e..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.8_ToString/9.8.1_ToString_Applied_to_the_Number_Type/S9.8.1_A7.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.8.1_A7; - * @section: 9.8.1; - * @assertion: If 1 <= s < 1e21 or -1e21 s < -1 and s has a fractional - * component, return the string consisting of the most significant n digits of - * the decimal representation of s, followed by a decimal point '.', - * followed by the remaining k-n digits of the decimal representation of s; - * @description: 1.0000001 and -1.0000001 convert to String by explicit transformation; -*/ - -// CHECK#1 -if (String(1.0000001) !== "1.0000001") { - $ERROR('#1: String(1.0000001) === "1.0000001". Actual: ' + (String(1.0000001))); -} - -// CHECK#2 -if (String(-1.0000001) !== "-1.0000001") { - $ERROR('#2: String(-1.0000001) === "-1.0000001". Actual: ' + (String(-1.0000001))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.8_ToString/9.8.1_ToString_Applied_to_the_Number_Type/S9.8.1_A8.js b/tests/ES3/Conformance/09_Type_Conversion/9.8_ToString/9.8.1_ToString_Applied_to_the_Number_Type/S9.8.1_A8.js deleted file mode 100644 index 3f57113b2..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.8_ToString/9.8.1_ToString_Applied_to_the_Number_Type/S9.8.1_A8.js +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.8.1_A8; - * @section: 9.8.1; - * @assertion: If 1 > s > -1, and -6 < n <= 0, return the string consisting of the - * character '0', followed by a decimal point '.', followed by -n occurrences - * of the character '0', followed by the k digits of the decimal - * representation of s; - * @description: Various float numbers convert to String by explicit transformation; -*/ - -// CHECK#1 -if (String(0.1) !== "0.1") { - $ERROR('#1: String(0.1) === "0.1". Actual: ' + (String(0.1))); -} - -// CHECK#2 -if (String(0.000001) !== "0.000001") { - $ERROR('#2: String(0.000001) === "0.000001". Actual: ' + (String(0.000001))); -} - -// CHECK#3 -if (String(1e-6) !== "0.000001") { - $ERROR('#3: String(1e-6) === "0.000001". Actual: ' + (String(1e-6))); -} - -// CHECK#4 -if (String(1E-6) !== "0.000001") { - $ERROR('#4: String(1E-6) === "0.000001". Actual: ' + (String(1E-6))); -} - -// CHECK#5 -if (String(-0.1) !== "-0.1") { - $ERROR('#5: String(-0.1) === "-0.1". Actual: ' + (String(-0.1))); -} - -// CHECK#6 -if (String(-0.000001) !== "-0.000001") { - $ERROR('#6: String(-0.000001) === "-0.000001". Actual: ' + (String(-0.000001))); -} - -// CHECK#7 -if (String(-1e-6) !== "-0.000001") { - $ERROR('#7: String(-1e-6) === "0.000001". Actual: ' + (String(-1e-6))); -} - -// CHECK#8 -if (String(-1E-6) !== "-0.000001") { - $ERROR('#8: String(-1E-6) === "0.000001". Actual: ' + (String(-1E-6))); -} - diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.8_ToString/9.8.1_ToString_Applied_to_the_Number_Type/S9.8.1_A9_T1.js b/tests/ES3/Conformance/09_Type_Conversion/9.8_ToString/9.8.1_ToString_Applied_to_the_Number_Type/S9.8.1_A9_T1.js deleted file mode 100644 index f400b8996..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.8_ToString/9.8.1_ToString_Applied_to_the_Number_Type/S9.8.1_A9_T1.js +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.8.1_A9_T1; - * @section: 9.8.1; - * @assertion: Return the string consisting of the single digit of s, - * followed by lowercase character 'e', followed by a plus sign '+' or minus - * sign '-' according to whether n-1 is positive or negative, followed by the - * decimal representation of the integer abs(n-1) (with no leading zeros); - * @description: Various big numbers convert to String by explicit transformation; -*/ - -// CHECK#1 -if (String(1000000000000000000000) !== "1e+21") { - $ERROR('#1: String(1000000000000000000000) === "1e+21". Actual: ' + (String(1000000000000000000000))); -} - -// CHECK#2 -if (String(10000000000000000000000) !== "1e+22") { - $ERROR('#2: String(10000000000000000000000) === "1e+22". Actual: ' + (String(10000000000000000000000))); -} - -// CHECK#3 -if (String(1e21) !== "1e+21") { - $ERROR('#3: String(1e21) === "1e+21". Actual: ' + (String(1e21))); -} - -// CHECK#4 -if (String(1.0e22) !== "1e+22") { - $ERROR('#4: String(1.0e22) === "1e+22". Actual: ' + (String(1.0e22))); -} - -// CHECK#5 -if (String(1E21) !== "1e+21") { - $ERROR('#5: String(1E21) === "1e+21". Actual: ' + (String(1E21))); -} - -// CHECK#6 -if (String(1.0E22) !== "1e+22") { - $ERROR('#6: String(1.0E22) === "1e+22". Actual: ' + (String(1.0E22))); -} - -// CHECK#7 -if (String(-1000000000000000000000) !== "-1e+21") { - $ERROR('#7: String(-1000000000000000000000) === "-1e+21". Actual: ' + (String(-1000000000000000000000))); -} - -// CHECK#8 -if (String(-10000000000000000000000) !== "-1e+22") { - $ERROR('#8: String(-10000000000000000000000) === "-1e+22". Actual: ' + (String(-10000000000000000000000))); -} - -// CHECK#9 -if (String(-1e21) !== "-1e+21") { - $ERROR('#9: String(-1e21) === "-1e+21". Actual: ' + (String(-1e21))); -} - -// CHECK#10 -if (String(-1.0e22) !== "-1e+22") { - $ERROR('#10: String(-1.0e22) === "-1e+22". Actual: ' + (String(-1.0e22))); -} - -// CHECK#11 -if (String(-1E21) !== "-1e+21") { - $ERROR('#11: String(-1E21) === "-1e+21". Actual: ' + (String(-1E21))); -} - -// CHECK#12 -if (String(-1.0E22) !== "-1e+22") { - $ERROR('#12: String(-1.0E22) === "-1e+22". Actual: ' + (String(-1.0E22))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.8_ToString/9.8.1_ToString_Applied_to_the_Number_Type/S9.8.1_A9_T2.js b/tests/ES3/Conformance/09_Type_Conversion/9.8_ToString/9.8.1_ToString_Applied_to_the_Number_Type/S9.8.1_A9_T2.js deleted file mode 100644 index 7e62553b3..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.8_ToString/9.8.1_ToString_Applied_to_the_Number_Type/S9.8.1_A9_T2.js +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.8.1_A9_T2; - * @section: 9.8.1; - * @assertion: Return the string consisting of the single digit of s, - * followed by lowercase character 'e', followed by a plus sign '+' or minus - * sign '-' according to whether n-1 is positive or negative, followed by the - * decimal representation of the integer abs(n-1) (with no leading zeros); - * @description: Various float numbers with many zeros convert to String by explicit transformation; -*/ - -// CHECK#1 -if (String(0.0000001) !== "1e-7") { - $ERROR('#1: String(0.0000001) === "1e-7". Actual: ' + (String(0.0000001))); -} - -// CHECK#2 -if (String(0.000000000100000000000) !== "1e-10") { - $ERROR('#2: String(0.000000000100000000000) === "1e-10". Actual: ' + (String(0.000000000100000000000))); -} - -// CHECK#3 -if (String(1e-7) !== "1e-7") { - $ERROR('#3: String(1e-7) === "1e-7". Actual: ' + (String(1e-7))); -} - -// CHECK#4 -if (String(1.0e-10) !== "1e-10") { - $ERROR('#4: String(1.0e-10) === "1e-10". Actual: ' + (String(1.0e-10))); -} - -// CHECK#5 -if (String(1E-7) !== "1e-7") { - $ERROR('#5: String(1E-7) === "1e-7". Actual: ' + (String(1E-7))); -} - -// CHECK#6 -if (String(1.0E-10) !== "1e-10") { - $ERROR('#6: String(1.0E-10) === "1e-10". Actual: ' + (String(1.0E-10))); -} - -// CHECK#7 -if (String(-0.0000001) !== "-1e-7") { - $ERROR('#7: String(-0.0000001) === "1e-7". Actual: ' + (String(-0.0000001))); -} - -// CHECK#8 -if (String(-0.000000000100000000000) !== "-1e-10") { - $ERROR('#8: String(-0.000000000100000000000) === "1e-10". Actual: ' + (String(-0.000000000100000000000))); -} - -// CHECK#9 -if (String(-1e-7) !== "-1e-7") { - $ERROR('#9: String(-1e-7) === "-1e-7". Actual: ' + (String(-1e-7))); -} - -// CHECK#10 -if (String(-1.0e-10) !== "-1e-10") { - $ERROR('#10: String(-1.0e-10) === "-1e-10". Actual: ' + (String(-1.0e-10))); -} - -// CHECK#11 -if (String(-1E-7) !== "-1e-7") { - $ERROR('#11: String(-1E-7) === "-1e-7". Actual: ' + (String(-1E-7))); -} - -// CHECK#12 -if (String(-1.0E-10) !== "-1e-10") { - $ERROR('#12: String(-1.0E-10) === "-1e-10". Actual: ' + (String(-1.0E-10))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.8_ToString/S9.8_A1_T1.js b/tests/ES3/Conformance/09_Type_Conversion/9.8_ToString/S9.8_A1_T1.js deleted file mode 100644 index efdde7224..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.8_ToString/S9.8_A1_T1.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.8_A1_T1; - * @section: 9.8; - * @assertion: Result of ToString conversion from undefined value is "undefined"; - * @description: Undefined values is undefined, void 0 and eval("var x"). Use explicit transformation; -*/ - -// CHECK#1 -if (String(undefined) !== "undefined") { - $ERROR('#1: String(undefined) === "undefined". Actual: ' + (String(undefined))); -} - -// CHECK#2 -if (String(void 0) !== "undefined") { - $ERROR('#2: String(void 0) === "undefined". Actual: ' + (String(void 0))); -} - -// CHECK#3 -if (String(eval("var x")) !== "undefined") { - $ERROR('#3: String(eval("var x")) === "undefined" . Actual: ' + (String(eval("var x")))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.8_ToString/S9.8_A1_T2.js b/tests/ES3/Conformance/09_Type_Conversion/9.8_ToString/S9.8_A1_T2.js deleted file mode 100644 index d41b5f06d..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.8_ToString/S9.8_A1_T2.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.8_A1_T2; - * @section: 9.8; - * @assertion: Result of ToString conversion from undefined value is "undefined"; - * @description: Undefined values is undefined, void 0 and eval("var x"). Use implicit transformation; -*/ - -// CHECK#1 -if (undefined + "" !== "undefined") { - $ERROR('#1: undefined + "" === "undefined". Actual: ' + (undefined + "")); -} - -// CHECK#2 -if (void 0 + "" !== "undefined") { - $ERROR('#2: void 0 + "" === "undefined". Actual: ' + (void 0 + "")); -} - -// CHECK#3 -if (eval("var x") + "" !== "undefined") { - $ERROR('#3: eval("var x") + "" === "undefined". Actual: ' + (eval("var x") + "")); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.8_ToString/S9.8_A2_T1.js b/tests/ES3/Conformance/09_Type_Conversion/9.8_ToString/S9.8_A2_T1.js deleted file mode 100644 index bb8391afa..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.8_ToString/S9.8_A2_T1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.8_A2_T1; - * @section: 9.8; - * @assertion: Result of ToString conversion from null value is "null"; - * @description: null convert to String by explicit transformation; - */ - -// CHECK#1 -if (String(null) !== "null") { - $ERROR('#1: String(null) === "null". Actual: ' + (String(null))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.8_ToString/S9.8_A2_T2.js b/tests/ES3/Conformance/09_Type_Conversion/9.8_ToString/S9.8_A2_T2.js deleted file mode 100644 index 3c5f5cab4..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.8_ToString/S9.8_A2_T2.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.8_A2_T2; - * @section: 9.8; - * @assertion: Result of ToString conversion from null value is "null"; - * @description: null convert to String by implicit transformation; - */ - -// CHECK#1 -if (null + "" !== "null") { - $ERROR('#1: null + "" === "null". Actual: ' + (null + "")); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.8_ToString/S9.8_A3_T1.js b/tests/ES3/Conformance/09_Type_Conversion/9.8_ToString/S9.8_A3_T1.js deleted file mode 100644 index 7749ab0cf..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.8_ToString/S9.8_A3_T1.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.8_A3_T1; - * @section: 9.8; - * @assertion: Result of ToString conversion from boolean value is "true" if - * the argument is "true", else is "false"; - * @description: True and false convert to String by explicit transformation; - */ - -// CHECK#1 -if (String(false) !== "false") { - $ERROR('#1: String(false) === "false". Actual: ' + (String(false))); -} - -// CHECK#2 -if (String(true) !== "true") { - $ERROR('#2: String(true) === "true". Actual: ' + (String(true))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.8_ToString/S9.8_A3_T2.js b/tests/ES3/Conformance/09_Type_Conversion/9.8_ToString/S9.8_A3_T2.js deleted file mode 100644 index 668801c19..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.8_ToString/S9.8_A3_T2.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.8_A3_T2; - * @section: 9.8; - * @assertion: Result of ToString conversion from boolean value is "true" if - * the argument is "true", else is "false"; - * @description: True and false convert to String by implicit transformation; - */ - -// CHECK#1 -if (false + "" !== "false") { - $ERROR('#1: false + "" === "false". Actual: ' + (false + "")); -} - -// CHECK#2 -if (true + "" !== "true") { - $ERROR('#2: true + "" === "true". Actual: ' + (true + "")); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.8_ToString/S9.8_A4_T1.js b/tests/ES3/Conformance/09_Type_Conversion/9.8_ToString/S9.8_A4_T1.js deleted file mode 100644 index fd359ac12..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.8_ToString/S9.8_A4_T1.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.8_A4_T1; - * @section: 9.8; - * @assertion: Result of String conversion from string value is the input argument (no conversion); - * @description: Some strings convert to String with explicit transformation; -*/ - -// CHECK#1 -var x1 = "abc"; -if (String(x1) !== x1) { - $ERROR('#1: String("abc") === "abc". Actual: ' + (String("abc"))); -} - -// CHECK#2 -var x2 = "abc"; -if (typeof String(x2) !== typeof x2) { - $ERROR('#2: typeof String("abc") === "string". Actual: ' + (typeof String("abc"))); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.8_ToString/S9.8_A4_T2.js b/tests/ES3/Conformance/09_Type_Conversion/9.8_ToString/S9.8_A4_T2.js deleted file mode 100644 index 536fdd3c0..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.8_ToString/S9.8_A4_T2.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.8_A4_T2; - * @section: 9.8; - * @assertion: Result of String conversion from string value is the input argument (no conversion); - * @description: Some strings convert to String by implicit transformation; -*/ - -// CHECK#1 -var x1 = "abc"; -if (x1 + "" !== x1) { - $ERROR('#1: "abc" + "" === "abc". Actual: ' + ("abc" + "")); -} - -// CHECK#2 -var x2 = "abc"; -if (typeof x2 + "" !== typeof x2) { - $ERROR('#2: typeof "abc" + "" === "string". Actual: ' + (typeof "abc" + "")); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.8_ToString/S9.8_A5_T1.js b/tests/ES3/Conformance/09_Type_Conversion/9.8_ToString/S9.8_A5_T1.js deleted file mode 100644 index 4c678e157..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.8_ToString/S9.8_A5_T1.js +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.8_A5_T1; - * @section: 9.8; - * @assertion: Result of String conversion from Object value is conversion - * from primitive value; - * @description: Some objects convert to String by explicit transformation; -*/ - -// CHECK#1 -if (String(new Number()) !== "0") { - $ERROR('#1: String(new Number()) === "0". Actual: ' + (String(new Number()))); -} - -// CHECK#2 -if (String(new Number(0)) !== "0") { - $ERROR('#2: String(new Number(0)) === "0". Actual: ' + (String(new Number(0)))); -} - -// CHECK#3 -if (String(new Number(Number.NaN)) !== "NaN") { - $ERROR('#3: String(new Number(Number.NaN)) === Not-a-Number. Actual: ' + (String(new Number(Number.NaN)))); -} - -// CHECK#4 -if (String(new Number(null)) !== "0") { - $ERROR('#4: String(new Number(null)) === "0". Actual: ' + (String(new Number(null)))); -} - -// CHECK#5 -if (String(new Number(void 0)) !== "NaN") { - $ERROR('#5: String(new Number(void 0)) === Not-a-Number. Actual: ' + (String(new Number(void 0)))); -} - -// CHECK#6 -if (String(new Number(true)) !== "1") { - $ERROR('#6: String(new Number(true)) === "1". Actual: ' + (String(new Number(true)))); -} - -// CHECK#7 -if (String(new Number(false)) !== "0") { - $ERROR('#7: String(new Number(false)) === "0". Actual: ' + (String(new Number(false)))); -} - -// CHECK#8 -if (String(new Boolean(true)) !== "true") { - $ERROR('#8: String(new Boolean(true)) === "true". Actual: ' + (String(new Boolean(true)))); -} - -// CHECK#9 -if (String(new Boolean(false)) !== "false") { - $ERROR('#9: Number(new Boolean(false)) === "false". Actual: ' + (Number(new Boolean(false)))); -} - -// CHECK#10 -if (String(new Array(2,4,8,16,32)) !== "2,4,8,16,32") { - $ERROR('#10: String(new Array(2,4,8,16,32)) === "2,4,8,16,32". Actual: ' + (String(new Array(2,4,8,16,32)))); -} - -// CHECK#11 -var myobj1 = { - toNumber : function(){return 12345;}, - toString : function(){return 67890;}, - valueOf : function(){return "[object MyObj]";} - }; - -if (String(myobj1) !== "67890"){ - $ERROR("#11: String(myobj) calls ToPrimitive with hint String"); -} - -// CHECK#12 -var myobj2 = { - toNumber : function(){return 12345;}, - toString : function(){return {}}, - valueOf : function(){return "[object MyObj]";} - }; - -if (String(myobj2) !== "[object MyObj]"){ - $ERROR("#12: String(myobj) calls ToPrimitive with hint String"); -} - -// CHECK#13 -var myobj3 = { - toNumber : function(){return 12345;}, - valueOf : function(){return "[object MyObj]";} - }; - -if (String(myobj3) !== "[object Object]"){ - $ERROR("#13: String(myobj) calls ToPrimitive with hint String"); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.8_ToString/S9.8_A5_T2.js b/tests/ES3/Conformance/09_Type_Conversion/9.8_ToString/S9.8_A5_T2.js deleted file mode 100644 index dfdf0e597..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.8_ToString/S9.8_A5_T2.js +++ /dev/null @@ -1,91 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.8_A5_T2; - * @section: 9.8; - * @assertion: Result of String conversion from Object value is conversion - * from primitive value; - * @description: Some objects convert to String by implicit transformation; -*/ - -// CHECK#1 -if (new Number() + "" !== "0") { - $ERROR('#1: new Number() + "" === "0". Actual: ' + (new Number() + "")); -} - -// CHECK#2 -if (new Number(0) + "" !== "0") { - $ERROR('#2: new Number(0) + "" === "0". Actual: ' + (new Number(0) + "")); -} - -// CHECK#3 -if (new Number(Number.NaN) + "" !== "NaN") { - $ERROR('#3: new Number(Number.NaN) + "" === "NaN". Actual: ' + (new Number(Number.NaN) + "")); -} - -// CHECK#4 -if (new Number(null) + "" !== "0") { - $ERROR('#4: new Number(null) + "" === "0". Actual: ' + (new Number(null) + "")); -} - -// CHECK#5 -if (new Number(void 0) + "" !== "NaN") { - $ERROR('#5: new Number(void 0) + "" === "NaN. Actual: ' + (new Number(void 0) + "")); -} - -// CHECK#6 -if (new Number(true) + "" !== "1") { - $ERROR('#6: new Number(true) + "" === "1". Actual: ' + (new Number(true) + "")); -} - -// CHECK#7 -if (new Number(false) + "" !== "0") { - $ERROR('#7: new Number(false) + "" === "0". Actual: ' + (new Number(false) + "")); -} - -// CHECK#8 -if (new Boolean(true) + "" !== "true") { - $ERROR('#8: new Boolean(true) + "" === "true". Actual: ' + (new Boolean(true) + "")); -} - -// CHECK#9 -if (new Boolean(false) + "" !== "false") { - $ERROR('#9: Number(new Boolean(false)) === "false". Actual: ' + (Number(new Boolean(false)))); -} - -// CHECK#10 -if (new Array(2,4,8,16,32) + "" !== "2,4,8,16,32") { - $ERROR('#10: new Array(2,4,8,16,32) + "" === "2,4,8,16,32". Actual: ' + (new Array(2,4,8,16,32) + "")); -} - -// CHECK#11 -var myobj1 = { - toNumber : function(){return 12345;}, - toString : function(){return 67890;}, - valueOf : function(){return "[object MyObj]";} - }; - -if (myobj1 + "" !== "[object MyObj]"){ - $ERROR('#11: myobj1 + "" calls ToPrimitive with hint Number. Exptected: "[object MyObj]". Actual: ' + (myobj1 + "")); -} - -// CHECK#12 -var myobj2 = { - toNumber : function(){return 12345;}, - toString : function(){return 67890}, - valueOf : function(){return {}} - }; - -if (myobj2 + "" !== "67890"){ - $ERROR('#12: myobj2 + "" calls ToPrimitive with hint Number. Exptected: "67890". Actual: ' + (myobj2 + "")); -} - -// CHECK#13 -var myobj3 = { - toNumber : function(){return 12345;} - }; - -if (myobj3 + "" !== "[object Object]"){ - $ERROR('#13: myobj3 + "" calls ToPrimitive with hint Number. Exptected: "[object Object]". Actual: ' + (myobj3 + "")); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.9_ToObject/S9.9_A1.js b/tests/ES3/Conformance/09_Type_Conversion/9.9_ToObject/S9.9_A1.js deleted file mode 100644 index 0201c937a..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.9_ToObject/S9.9_A1.js +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.9_A1; - * @section: 9.9; - * @assertion: ToObject conversion from undefined value must throw TypeError; - * @description: Trying to convert undefined to Object; -*/ - -// CHECK#1 -try{ - undefined['foo']; - $ERROR('#1.1: undefined[\'foo\'] must throw TypeError. Actual: ' + (undefined['foo'])); -} -catch(e){ - if((e instanceof TypeError) !== true){ - $ERROR('#1.2: undefined[\'foo\'] must throw TypeError. Actual: ' + (e)); - } -} - -// CHECK#2 -try{ - with(undefined) x = 2; - $ERROR('#2.1: with(undefined) x = 2 must throw TypeError. Actual: x === ' + (x)); -} -catch(e){ - if((e instanceof TypeError) !== true){ - $ERROR('#2.2: with(undefined) x = 2 must throw TypeError. Actual: ' + (e)); - } -} - -// CHECK#3 -try{ - for(var y in undefined) y = 2; - $ERROR('#3.1: for(var y in undefined) y = 2 must throw TypeError. Actual: y === ' + (y)); -} -catch(e){ - if((e instanceof TypeError) !== true){ - $ERROR('#3.2: for(var y in undefined) y = 2 must throw TypeError. Actual: ' + (e)); - } -} - -// CHECK#4 -try{ - for(var z in this.foo) z = 2; - $ERROR('#4.1: for(var z in this.foo) z = 2 must throw TypeError. Actual: z === ' + (z)); -} -catch(e){ - if((e instanceof TzpeError) !== true){ - $ERROR('#4.2: for(var z in this.foo) z = 2 must throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.9_ToObject/S9.9_A2.js b/tests/ES3/Conformance/09_Type_Conversion/9.9_ToObject/S9.9_A2.js deleted file mode 100644 index e77682a35..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.9_ToObject/S9.9_A2.js +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.9_A2; - * @section: 9.9; - * @assertion: ToObject conversion from null value must throw TypeError; - * @description: Trying to convert null to Object; -*/ - -// CHECK#1 -try{ - null['foo']; - $ERROR('#1.1: null[\'foo\'] throw TypeError. Actual: ' + (null['foo'])); -} -catch(e){ - if((e instanceof TypeError) !== true){ - $ERROR('#1.2: null[\'foo\'] must throw TypeError. Actual: ' + (e)); - } -} - -// CHECK#2 -try{ - with(null) x = 2; - $ERROR('#2.1: with(null) x = 2 must throw TypeError. Actual: x === . Actual: ' + (x)); -} -catch(e){ - if((e instanceof TypeError) !== true){ - $ERROR('#2.2: with(null) x = 2 must throw TypeError. Actual: ' + (e)); - } -} - -// CHECK#3 -try{ - for(var y in null) y = 2; - $ERROR('#3.1: for(var y in null) y = 2 must throw TypeError. Actual: y === . Actual: ' + (y)); -} -catch(e){ - if((e instanceof TypeError) !== true){ - $ERROR('#3.2: for(var y in null) y = 2 must throw TypeError. Actual: ' + (e)); - } -} - -// CHECK#4 -try{ - for(var z in 'bbb'.match(/aaa/)) z = 2; - $ERROR('#4.1: for(var z in \'bbb\'.match(/aaa/)) z = 2 must throw TypeError. Actual: z === . Actual: ' + (z)); -} -catch(e){ - if((e instanceof TzpeError) !== true){ - $ERROR('#4.2: for(var z in \'bbb\'.match(/aaa/)) z = 2 must throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.9_ToObject/S9.9_A3.js b/tests/ES3/Conformance/09_Type_Conversion/9.9_ToObject/S9.9_A3.js deleted file mode 100644 index 3b7f9955f..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.9_ToObject/S9.9_A3.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.9_A3; - * @section: 9.9; - * @assertion: ToObject conversion from Boolean: create a new Boolean object - * whose [[value]] property is set to the value of the boolean; - * @description: Trying to convert from Boolean to Object; -*/ - -// CHECK#1 -if (Object(true).valueOf() !== true){ - $ERROR('#1: Object(true).valueOf() === true. Actual: ' + (Object(true).valueOf())); -} - -// CHECK#2 -if (typeof Object(true) !== "object"){ - $ERROR('#2: typeof Object(true) === "object". Actual: ' + (typeof Object(true))); -} - -// CHECK#3 -if (Object(true).constructor.prototype !== Boolean.prototype){ - $ERROR('#3: Object(true).constructor.prototype === Boolean.prototype. Actual: ' + (Object(true).constructor.prototype)); -} - -// CHECK#4 -if (Object(false).valueOf() !== false){ - $ERROR('#4: Object(false).valueOf() === false. Actual: ' + (Object(false).valueOf())); -} - -// CHECK#5 -if (typeof Object(false) !== "object"){ - $ERROR('#5: typeof Object(false) === "object". Actual: ' + (typeof Object(false))); -} - -// CHECK#6 -if (Object(false).constructor.prototype !== Boolean.prototype){ - $ERROR('#6: Object(false).constructor.prototype === Boolean.prototype. Actual: ' + (Object(false).constructor.prototype)); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.9_ToObject/S9.9_A4.js b/tests/ES3/Conformance/09_Type_Conversion/9.9_ToObject/S9.9_A4.js deleted file mode 100644 index ee573ffe7..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.9_ToObject/S9.9_A4.js +++ /dev/null @@ -1,177 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.9_A4; - * @section: 9.9; - * @assertion: ToObject conversion from Number: create a new Number object - * whose [[value]] property is set to the value of the number; - * @description: Converting from various numbers to Object; -*/ - -// CHECK#1 -if (Object(0).valueOf() !== 0){ - $ERROR('#1: Object(0).valueOf() === 0. Actual: ' + (Object(0).valueOf())); -} - -// CHECK#2 -if (typeof Object(0) !== "object"){ - $ERROR('#2: typeof Object(0) === "object". Actual: ' + (typeof Object(0))); -} - -// CHECK#3 -if (Object(0).constructor.prototype !== Number.prototype){ - $ERROR('#3: Object(0).constructor.prototype === Number.prototype. Actual: ' + (Object(0).constructor.prototype)); -} - -// CHECK#4 -if (Object(-0).valueOf() !== -0){ - $ERROR('#4.1: Object(-0).valueOf() === 0. Actual: ' + (Object(-0).valueOf())); -} else if (1/Object(-0).valueOf() !== Number.NEGATIVE_INFINITY) { - $ERROR('#4.2: Object(-0).valueOf() === -0. Actual: +0'); -} - -// CHECK#5 -if (typeof Object(-0) !== "object"){ - $ERROR('#5: typeof Object(-0) === "object". Actual: ' + (typeof Object(-0))); -} - -// CHECK#6 -if (Object(-0).constructor.prototype !== Number.prototype){ - $ERROR('#6: Object(-0).constructor.prototype === Number.prototype. Actual: ' + (Object(-0).constructor.prototype)); -} - -// CHECK#7 -if (Object(1).valueOf() !== 1){ - $ERROR('#7: Object(1).valueOf() === 1. Actual: ' + (Object(1).valueOf())); -} - -// CHECK#8 -if (typeof Object(1) !== "object"){ - $ERROR('#8: typeof Object(1) === "object". Actual: ' + (typeof Object(1))); -} - -// CHECK#9 -if (Object(1).constructor.prototype !== Number.prototype){ - $ERROR('#9: Object(1).constructor.prototype === Number.prototype. Actual: ' + (Object(1).constructor.prototype)); -} - -// CHECK#10 -if (Object(-1).valueOf() !== -1){ - $ERROR('#10: Object(-1).valueOf() === -1. Actual: ' + (Object(-1).valueOf())); -} - -// CHECK#11 -if (typeof Object(-1) !== "object"){ - $ERROR('#11: typeof Object(-1) === "object". Actual: ' + (typeof Object(-1))); -} - -// CHECK#12 -if (Object(-1).constructor.prototype !== Number.prototype){ - $ERROR('#12: Object(-1).constructor.prototype === Number.prototype. Actual: ' + (Object(-1).constructor.prototype)); -} - -// CHECK#13 -if (Object(Number.MIN_VALUE).valueOf() !== Number.MIN_VALUE){ - $ERROR('#13: Object(Number.MIN_VALUE).valueOf() === Number.MIN_VALUE. Actual: ' + (Object(Number.MIN_VALUE).valueOf())); -} - -// CHECK#14 -if (typeof Object(Number.MIN_VALUE) !== "object"){ - $ERROR('#14: typeof Object(Number.MIN_VALUE) === "object". Actual: ' + (typeof Object(Number.MIN_VALUE))); -} - -// CHECK#15 -if (Object(Number.MIN_VALUE).constructor.prototype !== Number.prototype){ - $ERROR('#15: Object(Number.MIN_VALUE).constructor.prototype === Number.prototype. Actual: ' + (Object(Number.MIN_VALUE).constructor.prototype)); -} - -// CHECK#16 -if (Object(Number.MAX_VALUE).valueOf() !== Number.MAX_VALUE){ - $ERROR('#16: Object(Number.MAX_VALUE).valueOf() === Number.MAX_VALUE. Actual: ' + (Object(Number.MAX_VALUE).valueOf())); -} - -// CHECK#17 -if (typeof Object(Number.MAX_VALUE) !== "object"){ - $ERROR('#17: typeof Object(Number.MAX_VALUE) === "object". Actual: ' + (typeof Object(Number.MAX_VALUE))); -} - -// CHECK#18 -if (Object(Number.MAX_VALUE).constructor.prototype !== Number.prototype){ - $ERROR('#18: Object(Number.MAX_VALUE).constructor.prototype === Number.prototype. Actual: ' + (Object(Number.MAX_VALUE).constructor.prototype)); -} - -// CHECK#19 -if (Object(Number.POSITIVE_INFINITY).valueOf() !== Number.POSITIVE_INFINITY){ - $ERROR('#19: Object(Number.POSITIVE_INFINITY).valueOf() === Number.POSITIVE_INFINITY. Actual: ' + (Object(Number.POSITIVE_INFINITY).valueOf())); -} - -// CHECK#20 -if (typeof Object(Number.POSITIVE_INFINITY) !== "object"){ - $ERROR('#20: typeof Object(Number.POSITIVE_INFINITY) === "object". Actual: ' + (typeof Object(Number.POSITIVE_INFINITY))); -} - -// CHECK#21 -if (Object(Number.POSITIVE_INFINITY).constructor.prototype !== Number.prototype){ - $ERROR('#21: Object(Number.POSITIVE_INFINITY).constructor.prototype === Number.prototype. Actual: ' + (Object(Number.POSITIVE_INFINITY).constructor.prototype)); -} - -// CHECK#22 -if (Object(Number.NEGATIVE_INFINITY).valueOf() !== Number.NEGATIVE_INFINITY){ - $ERROR('#22: Object(Number.NEGATIVE_INFINITY).valueOf() === Number.NEGATIVE_INFINITY. Actual: ' + (Object(Number.NEGATIVE_INFINITY).valueOf())); -} - -// CHECK#23 -if (typeof Object(Number.NEGATIVE_INFINITY) !== "object"){ - $ERROR('#23: typeof Object(Number.NEGATIVE_INFINITY) === "object". Actual: ' + (typeof Object(Number.NEGATIVE_INFINITY))); -} - -// CHECK#24 -if (Object(Number.NEGATIVE_INFINITY).constructor.prototype !== Number.prototype){ - $ERROR('#24: Object(Number.NEGATIVE_INFINITY).constructor.prototype === Number.prototype. Actual: ' + (Object(Number.NEGATIVE_INFINITY).constructor.prototype)); -} - -// CHECK#25 -if (isNaN(Object(Number.NaN).valueOf()) !== true){ - $ERROR('#25: Object(Number.NaN).valueOf() === Not-a-Number. Actual: ' + (Object(Number.NaN).valueOf())); -} - -// CHECK#26 -if (typeof Object(Number.NaN) !== "object"){ - $ERROR('#26: typeof Object(Number.NaN) === "object". Actual: ' + (typeof Object(Number.NaN))); -} - -// CHECK#27 -if (Object(Number.NaN).constructor.prototype !== Number.prototype){ - $ERROR('#27: Object(Number.NaN).constructor.prototype === Number.prototype. Actual: ' + (Object(Number.NaN).constructor.prototype)); -} - -// CHECK#28 -if (Object(1.2345).valueOf() !== 1.2345){ - $ERROR('#28: Object(1.2345).valueOf() === 1.2345. Actual: ' + (Object(1.2345).valueOf())); -} - -// CHECK#29 -if (typeof Object(1.2345) !== "object"){ - $ERROR('#29: typeof Object(1.2345) === "object". Actual: ' + (typeof Object(1.2345))); -} - -// CHECK#30 -if (Object(1.2345).constructor.prototype !== Number.prototype){ - $ERROR('#30: Object(1.2345).constructor.prototype === Number.prototype. Actual: ' + (Object(1.2345).constructor.prototype)); -} - -// CHECK#31 -if (Object(-1.2345).valueOf() !== -1.2345){ - $ERROR('#31: Object(-1.2345).valueOf() === -1.2345. Actual: ' + (Object(-1.2345).valueOf())); -} - -// CHECK#32 -if (typeof Object(-1.2345) !== "object"){ - $ERROR('#32: typeof Object(-1.2345) === "object". Actual: ' + (typeof Object(-1.2345))); -} - -// CHECK#33 -if (Object(-1.2345).constructor.prototype !== Number.prototype){ - $ERROR('#33: Object(-1.2345).constructor.prototype === Number.prototype. Actual: ' + (Object(-1.2345).constructor.prototype)); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.9_ToObject/S9.9_A5.js b/tests/ES3/Conformance/09_Type_Conversion/9.9_ToObject/S9.9_A5.js deleted file mode 100644 index 374f6d155..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.9_ToObject/S9.9_A5.js +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.9_A5; - * @section: 9.9; - * @assertion: ToObject conversion from String: create a new String object - * whose [[value]] property is set to the value of the string; - * @description: Converting from various strings to Object; -*/ - -// CHECK#1 -if (Object("some string").valueOf() !== "some string"){ - $ERROR('#1: Object("some string").valueOf() === "some string". Actual: ' + (Object("some string").valueOf())); -} - -// CHECK#2 -if (typeof Object("some string") !== "object"){ - $ERROR('#2: typeof Object("some string") === "object". Actual: ' + (typeof Object("some string"))); -} - -// CHECK#3 -if (Object("some string").constructor.prototype !== String.prototype){ - $ERROR('#3: Object("some string").constructor.prototype === String.prototype. Actual: ' + (Object("some string").constructor.prototype)); -} - -// CHECK#4 -if (Object("").valueOf() !== ""){ - $ERROR('#4: Object("").valueOf() === false. Actual: ' + (Object("").valueOf())); -} - -// CHECK#5 -if (typeof Object("") !== "object"){ - $ERROR('#5: typeof Object("") === "object". Actual: ' + (typeof Object(""))); -} - -// CHECK#6 -if (Object("").constructor.prototype !== String.prototype){ - $ERROR('#6: Object("").constructor.prototype === String.prototype. Actual: ' + (Object("").constructor.prototype)); -} - -// CHECK#7 -if (Object("\r\t\b\n\v\f").valueOf() !== "\r\t\b\n\v\f"){ - $ERROR('#7: Object("\\r\\t\\b\\n\\v\\f").valueOf() === false. Actual: ' + (Object("\r\t\b\n\v\f").valueOf())); -} - -// CHECK#8 -if (typeof Object("\r\t\b\n\v\f") !== "object"){ - $ERROR('#8: typeof Object("\\r\\t\\b\\n\\v\\f") === "object". Actual: ' + (typeof Object("\r\t\b\n\v\f"))); -} - -// CHECK#9 -if (Object("\r\t\b\n\v\f").constructor.prototype !== String.prototype){ - $ERROR('#9: Object("\\r\\t\\b\\n\\v\\f").constructor.prototype === String.prototype. Actual: ' + (Object("\r\t\b\n\v\f").constructor.prototype)); -} - -// CHECK#10 -if (Object(String(10)).valueOf() !== "10"){ - $ERROR('#10: Object(String(10)).valueOf() === false. Actual: ' + (Object(String(10)).valueOf())); -} - -// CHECK#11 -if (typeof Object(String(10)) !== "object"){ - $ERROR('#11: typeof Object(String(10)) === "object". Actual: ' + (typeof Object(String(10)))); -} - -// CHECK#12 -if (Object(String(10)).constructor.prototype !== String.prototype){ - $ERROR('#12: Object(String(10)).constructor.prototype === String.prototype. Actual: ' + (Object(String(10)).constructor.prototype)); -} diff --git a/tests/ES3/Conformance/09_Type_Conversion/9.9_ToObject/S9.9_A6.js b/tests/ES3/Conformance/09_Type_Conversion/9.9_ToObject/S9.9_A6.js deleted file mode 100644 index 15dfd8e62..000000000 --- a/tests/ES3/Conformance/09_Type_Conversion/9.9_ToObject/S9.9_A6.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S9.9_A6; - * @section: 9.9; - * @assertion: ToObject conversion from Object: The result is the input - * argument (no conversion); - * @description: Converting from Objects to Object; -*/ - -function MyObject( val ) { - this.value = val; - this.valueOf = function (){ return this.value; } -} - -var x = new MyObject(1); -var y = Object(x); - -// CHECK#1 -if (y.valueOf() !== x.valueOf()){ - $ERROR('#1: Object(obj).valueOf() === obj.valueOf(). Actual: ' + (Object(obj).valueOf())); -} - -// CHECK#2 -if (typeof y !== typeof x){ - $ERROR('#2: typeof Object(obj) === typeof obj. Actual: ' + (typeof Object(obj))); -} - -// CHECK#3 -if (y.constructor.prototype !== x.constructor.prototype){ - $ERROR('#3: Object(obj).constructor.prototype === obj.constructor.prototype. Actual: ' + (Object(obj).constructor.prototype)); -} - - -// CHECK#4 -if (y !== x){ - $ERROR('#4: Object(obj) === obj'); -} diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.3_Variable_Instantiation/S10.1.3_A1.js b/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.3_Variable_Instantiation/S10.1.3_A1.js deleted file mode 100644 index f2aa5c164..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.3_Variable_Instantiation/S10.1.3_A1.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.1.3_A1; - * @section: 10.1.3; - * @assertion: If the caller supplies fewer parameter values than there are - * formal parameters, the extra formal parameters have value undefined; - * @description: Calling function excluding a few parameters; -*/ - -//CHECK#1 -function f1(a, b){ - return (b === undefined); -} -if(!(f1(1, 2) === false)){ - $ERROR('#1: f1(1, 2) === false'); -} else if(!(f1(1) === true)){ - $ERROR('#1: f1(1) === true'); -} - -//CHECK#2 -function f2(a, b, c){ - return (b === undefined) && (c === undefined); -} -if(!(f2(1) === true)){ - $ERROR('#2: f2(1, 2) === true'); -} diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.3_Variable_Instantiation/S10.1.3_A2.js b/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.3_Variable_Instantiation/S10.1.3_A2.js deleted file mode 100644 index ff5c3ac61..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.3_Variable_Instantiation/S10.1.3_A2.js +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.1.3_A2; - * @section: 10.1.3; - * @assertion: If two or more formal parameters share the same name, hence - * the same property, the corresponding property is given the value that was - * supplied for the last parameter with this name; - * @description: Creating functions initialized with two or more formal parameters, which have the same name; -*/ - -//CHECK#1 -function f1(x, x) { - return x; -} -if(!(f1(1, 2) === 2)) { - $ERROR("#1: f1(1, 2) === 2"); -} - -//CHECK#2 -function f2(x, x, x){ - return x*x*x; -} -if(!(f2(1, 2, 3) === 27)){ - $ERROR("f2(1, 2, 3) === 27"); -} - -//CHECK#3 -function f3(x, x) { - return 'a' + x; -} -if(!(f3(1, 2) === 'a2')){ - $ERROR("#3: f3(1, 2) === 'a2'"); -} diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.3_Variable_Instantiation/S10.1.3_A3.js b/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.3_Variable_Instantiation/S10.1.3_A3.js deleted file mode 100644 index da923f14b..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.3_Variable_Instantiation/S10.1.3_A3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.1.3_A3; - * @section: 10.1.3; - * @assertion: If the value of this last parameter (which has the same - * name as some previous parameters do) was not supplied by the - * caller, the value of the corresponding property is undefined; - * @description: Creating functions with two or more formal parameters, - * that have the same name. Calling this function excluding a few last parameters; -*/ - -//CHECK#1 -function f1(x, a, b, x){ - return x; -} -if(!(f1(1, 2) === undefined)){ - $ERROR('#1: f1(1, 2) === undefined'); -} diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.3_Variable_Instantiation/S10.1.3_A4_T1.js b/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.3_Variable_Instantiation/S10.1.3_A4_T1.js deleted file mode 100644 index 7b5ce9cf4..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.3_Variable_Instantiation/S10.1.3_A4_T1.js +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.1.3_A4_T1; - * @section: 10.1.3; - * @assertion: Function declaration in function code - If the variable object - * already has a property with the name of Function Identifier, replace its - * value and attributes. Semantically, this step must follow the creation of - * FormalParameterList properties; - * @description: Checking existence of a function with passed parameter; -*/ - -//CHECK#1 -function f1(x){ - return x; - - function x(){ - return 7; - } -} -if(!(f1().constructor.prototype === Function.prototype)){ - $PRINT('#1: f1() returns function'); -} - -//CHECK#2 -function f2(x){ - return typeof x; - - function x(){ - return 7; - } -} -if(!(f2() === "function")){ - $PRINT('#2: f2() === "function"'); -} diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.3_Variable_Instantiation/S10.1.3_A4_T2.js b/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.3_Variable_Instantiation/S10.1.3_A4_T2.js deleted file mode 100644 index 9f0fcf281..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.3_Variable_Instantiation/S10.1.3_A4_T2.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.1.3_A4_T2; - * @section: 10.1.3; - * @assertion: Function declaration in function code - If the variable object - * already has a property with the name of Function Identifier, replace its - * value and attributes. Semantically, this step must follow the creation of - * FormalParameterList properties; - * @description: Checking existence of a function with declared variable; -*/ - -//CHECK#1 -function f1(){ - var x; - - return x; - - function x(){ - return 7; - } -} -if(!(f1().constructor.prototype === Function.prototype)){ - $PRINT('#1: f1() returns function'); -} - -//CHECK#2 -function f2(){ - var x; - - return typeof x; - - function x(){ - return 7; - } -} -if(!(f2() === "function")){ - $PRINT('#2: f2() === "function"'); -} diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.3_Variable_Instantiation/S10.1.3_A5.1_T1.js b/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.3_Variable_Instantiation/S10.1.3_A5.1_T1.js deleted file mode 100644 index a2a487e4e..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.3_Variable_Instantiation/S10.1.3_A5.1_T1.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.1.3_A5.1_T1; - * @section: 10.1.3; - * @assertion: For each VariableDeclaration or VariableDeclarationNoIn in the - * code, create a property of the variable object whose name is the Identifier - * in the VariableDeclaration or VariableDeclarationNoIn, whose value is - * undefined and whose attributes are determined by the type of code; - * @description: Checking variable existence only; -*/ - -//CHECK#1 -function f1(){ - var x; - - return typeof x; -} - -if(!(f1() === "undefined")){ - $PRINT('#1: f1() === "undefined"'); -} - -//CHECK#2 -function f2(){ - var x; - - return x; -} - -if(!(f2() === undefined)){ - $PRINT('#1: f2() === undefined'); -} diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.3_Variable_Instantiation/S10.1.3_A5.1_T2.js b/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.3_Variable_Instantiation/S10.1.3_A5.1_T2.js deleted file mode 100644 index 2325854d9..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.3_Variable_Instantiation/S10.1.3_A5.1_T2.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.1.3_A5.1_T2; - * @section: 10.1.3; - * @assertion: For each VariableDeclaration or VariableDeclarationNoIn in the - * code, create a property of the variable object whose name is the Identifier - * in the VariableDeclaration or VariableDeclarationNoIn, whose value is - * undefined and whose attributes are determined by the type of code; - * @description: Checking existence of the variable object property with formal parameter; -*/ - -//CHECK#1 -function f1(x){ - var x; - - return typeof x; -} - -if(!(f1() === "undefined")){ - $PRINT('#1: f1(1) === "undefined"'); -} - -//CHECK#2 -function f2(x){ - var x; - - return x; -} - -if(!(f2() === undefined)){ - $PRINT('#1: f2(1) === undefined'); -} diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.3_Variable_Instantiation/S10.1.3_A5.2_T1.js b/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.3_Variable_Instantiation/S10.1.3_A5.2_T1.js deleted file mode 100644 index f681058c8..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.3_Variable_Instantiation/S10.1.3_A5.2_T1.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.1.3_A5.2_T1; - * @section: 10.1.3; - * @assertion: If there is already a property of the variable object with the - * name of a declared variable, the value of the property and its attributes - * are not changed; - * @description: Checking existence of the variable object property with formal parameter; -*/ - -//CHECK#1 -function f1(x){ - var x; - - return typeof x; -} - -if(!(f1(1) === "number")){ - $PRINT('#1: f1(1) === "number"'); -} - -//CHECK#2 -function f2(x){ - var x; - - return x; -} - -if(!(f2(1) === 1)){ - $PRINT('#1: f2(1) === 1'); -} diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.4_Scope_Chain_and_Identifier_Resolution/S10.1.4_A1_T1.js b/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.4_Scope_Chain_and_Identifier_Resolution/S10.1.4_A1_T1.js deleted file mode 100644 index 9b3366270..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.4_Scope_Chain_and_Identifier_Resolution/S10.1.4_A1_T1.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.1.4_A1_T1; - * @section: 10.1.4; - * @assertion: Every execution context has associated with it a scope chain. - * A scope chain is a list of objects that are searched when evaluating an - * Identifier; - * @description: Checking scope chain containing function declarations; -*/ - -var x = 0; - -function f1(){ - var x = 1; - function f2(){ - return x; - }; - return f2(); -} - -if(!(f1() === 1)){ - $ERROR("#1: Scope chain disturbed"); -} diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.4_Scope_Chain_and_Identifier_Resolution/S10.1.4_A1_T2.js b/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.4_Scope_Chain_and_Identifier_Resolution/S10.1.4_A1_T2.js deleted file mode 100644 index b73e3467a..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.4_Scope_Chain_and_Identifier_Resolution/S10.1.4_A1_T2.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.1.4_A1_T2; - * @section: 10.1.4; - * @assertion: Every execution context has associated with it a scope chain. - * A scope chain is a list of objects that are searched when evaluating an - * Identifier; - * @description: Checking scope chain containing function declarations; -*/ - -var x = 0; - -function f1(){ - function f2(){ - return x; - }; - return f2(); -} - -if(!(f1() === 0)){ - $ERROR("#1: Scope chain disturbed"); -} diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.4_Scope_Chain_and_Identifier_Resolution/S10.1.4_A1_T3.js b/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.4_Scope_Chain_and_Identifier_Resolution/S10.1.4_A1_T3.js deleted file mode 100644 index 4d6e17dd1..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.4_Scope_Chain_and_Identifier_Resolution/S10.1.4_A1_T3.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.1.4_A1_T3; - * @section: 10.1.4; - * @assertion: Every execution context has associated with it a scope chain. - * A scope chain is a list of objects that are searched when evaluating an - * Identifier; - * @description: Checking scope chain containing function declarations; -*/ - -var x = 0; - -function f1(){ - function f2(){ - return x; - }; - return f2(); - - var x = 1; -} - -if(!(f1() === undefined)){ - $ERROR("#1: Scope chain disturbed"); -} - diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.4_Scope_Chain_and_Identifier_Resolution/S10.1.4_A1_T4.js b/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.4_Scope_Chain_and_Identifier_Resolution/S10.1.4_A1_T4.js deleted file mode 100644 index bbc27a27e..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.4_Scope_Chain_and_Identifier_Resolution/S10.1.4_A1_T4.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.1.4_A1_T4; - * @section: 10.1.4; - * @assertion: Every execution context has associated with it a scope chain. - * A scope chain is a list of objects that are searched when evaluating an - * Identifier; - * @description: Checking scope chain containing function declarations; -*/ - -var x = 0; - -function f1(){ - function f2(){ - return x; - }; - - var x = 1; - return f2(); -} - -if(!(f1() === 1)){ - $ERROR("#1: Scope chain disturbed"); -} diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.4_Scope_Chain_and_Identifier_Resolution/S10.1.4_A1_T5.js b/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.4_Scope_Chain_and_Identifier_Resolution/S10.1.4_A1_T5.js deleted file mode 100644 index 4374e9832..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.4_Scope_Chain_and_Identifier_Resolution/S10.1.4_A1_T5.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.1.4_A1_T5; - * @section: 10.1.4; - * @assertion: Every execution context has associated with it a scope chain. - * A scope chain is a list of objects that are searched when evaluating an - * Identifier; - * @description: Checking scope chain containing function declarations and "with"; -*/ - -var x = 0; - -var myObj = {x : "obj"}; - -function f1(){ - var x = 1; - function f2(){ - with(myObj){ - return x; - } - }; - return f2(); -} - -if(!(f1() === "obj")){ - $ERROR("#1: Scope chain disturbed"); -} diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.4_Scope_Chain_and_Identifier_Resolution/S10.1.4_A1_T6.js b/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.4_Scope_Chain_and_Identifier_Resolution/S10.1.4_A1_T6.js deleted file mode 100644 index 14f878114..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.4_Scope_Chain_and_Identifier_Resolution/S10.1.4_A1_T6.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.1.4_A1_T6; - * @section: 10.1.4; - * @assertion: Every execution context has associated with it a scope chain. - * A scope chain is a list of objects that are searched when evaluating an - * Identifier; - * @description: Checking scope chain containing function declarations and "with"; -*/ - -var x = 0; - -var myObj = {x : "obj"}; - -function f1(){ - function f2(){ - with(myObj){ - return x; - } - }; - return f2(); -} - -if(!(f1() === "obj")){ - $ERROR("#1: Scope chain disturbed"); -} diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.4_Scope_Chain_and_Identifier_Resolution/S10.1.4_A1_T7.js b/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.4_Scope_Chain_and_Identifier_Resolution/S10.1.4_A1_T7.js deleted file mode 100644 index 2edd0c379..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.4_Scope_Chain_and_Identifier_Resolution/S10.1.4_A1_T7.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.1.4_A1_T7; - * @section: 10.1.4; - * @assertion: Every execution context has associated with it a scope chain. - * A scope chain is a list of objects that are searched when evaluating an - * Identifier; - * @description: Checking scope chain containing function declarations and "with"; -*/ - -var x = 0; - -var myObj = {x : "obj"}; - -function f1(){ - function f2(){ - with(myObj){ - return x; - } - }; - return f2(); - - var x = 1; -} - -if(!(f1() === "obj")){ - $ERROR("#1: Scope chain disturbed"); -} diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.4_Scope_Chain_and_Identifier_Resolution/S10.1.4_A1_T8.js b/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.4_Scope_Chain_and_Identifier_Resolution/S10.1.4_A1_T8.js deleted file mode 100644 index 0286c468d..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.4_Scope_Chain_and_Identifier_Resolution/S10.1.4_A1_T8.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.1.4_A1_T8; - * @section: 10.1.4; - * @assertion: Every execution context has associated with it a scope chain. - * A scope chain is a list of objects that are searched when evaluating an - * Identifier; - * @description: Checking scope chain containing function declarations and "with"; -*/ - -var x = 0; - -var myObj = {x : "obj"}; - -function f1(){ - function f2(){ - with(myObj){ - return x; - } - }; - - var x = 1; - return f2(); -} - -if(!(f1() === "obj")){ - $ERROR("#1: Scope chain disturbed"); -} diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.4_Scope_Chain_and_Identifier_Resolution/S10.1.4_A1_T9.js b/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.4_Scope_Chain_and_Identifier_Resolution/S10.1.4_A1_T9.js deleted file mode 100644 index 173cb43da..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.4_Scope_Chain_and_Identifier_Resolution/S10.1.4_A1_T9.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.1.4_A1_T9; - * @section: 10.1.4; - * @assertion: Every execution context has associated with it a scope chain. - * A scope chain is a list of objects that are searched when evaluating an - * Identifier; - * @description: Checking scope chain containing function declarations and "with"; -*/ - -var x = 0; - -var myObj = {x : "obj"}; - -function f1(){ - with(myObj){ - return x; - } -} - -if(!(f1() === "obj")){ - $ERROR("#1: Scope chain disturbed"); -} diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A1.1_T1.js b/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A1.1_T1.js deleted file mode 100644 index 49db4a2e6..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A1.1_T1.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.1.5_A1.1_T1; - * @section: 10.1.5, 15.1; - * @assertion: Global object has properties such as built-in objects such as - * Math, String, Date, parseInt, etc; - * @description: Global execution context - Value Properties; -*/ - -//CHECK#1 -if ( NaN === null ) { - $ERROR("#1: NaN === null"); -} - -//CHECK#2 -if ( Infinity === null ) { - $ERROR("#2: Infinity === null"); -} - -//CHECK#3 -if ( undefined === null ) { - $ERROR("#3: undefined === null"); -} diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A1.1_T2.js b/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A1.1_T2.js deleted file mode 100644 index dccfa891c..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A1.1_T2.js +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.1.5_A1.1_T2; - * @section: 10.1.5, 15.1; - * @assertion: Global object has properties such as built-in objects such as - * Math, String, Date, parseInt, etc; - * @description: Global execution context - Function Properties; -*/ - -//CHECK#4 -if ( eval === null ) { - $ERROR("#4: eval === null"); -} - -//CHECK#5 -if ( parseInt === null ) { - $ERROR("#5: parseInt === null"); -} - -//CHECK#6 -if ( parseFloat === null ) { - $ERROR("#6: parseFloat === null"); -} - -//CHECK#7 -if ( isNaN === null ) { - $ERROR("#7: isNaN === null"); -} - -//CHECK#8 -if ( isFinite === null ) { - $ERROR("#8: isFinite === null"); -} - -//CHECK#9 -if ( decodeURI === null ) { - $ERROR("#9: decodeURI === null"); -} - -//CHECK#10 -if ( decodeURIComponent === null ) { - $ERROR("#10: decodeURIComponent === null"); -} - -//CHECK#11 -if ( encodeURI === null ) { - $ERROR("#11: encodeURI === null"); -} - -//CHECK#12 -if ( encodeURIComponent === null ) { - $ERROR("#12: encodeURIComponent === null"); -} diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A1.1_T3.js b/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A1.1_T3.js deleted file mode 100644 index 6f48b7d55..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A1.1_T3.js +++ /dev/null @@ -1,86 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.1.5_A1.1_T3; - * @section: 10.1.5, 15.1; - * @assertion: Global object has properties such as built-in objects such as - * Math, String, Date, parseInt, etc; - * @description: Global execution context - Constructor Properties; -*/ - -//CHECK#13 -if ( Object === null ) { - $ERROR("#13: Object === null"); -} - -//CHECK#14 -if ( Function === null ) { - $ERROR("#14: Function === null"); -} - -//CHECK#15 -if ( String === null ) { - $ERROR("#15: String === null"); -} - -//CHECK#16 -if ( Number === null ) { - $ERROR("#16: Number === null"); -} - -//CHECK#17 -if ( Array === null ) { - $ERROR("#17: Array === null"); -} - -//CHECK#18 -if ( Boolean === null ) { - $ERROR("#20: Boolean === null"); -} - -//CHECK#18 -if ( Date === null ) { - $ERROR("#18: Date === null"); -} - -//CHECK#19 -if ( RegExp === null ) { - $ERROR("#19: RegExp === null"); -} - -//CHECK#20 -if ( Error === null ) { - $ERROR("#20: Error === null"); -} - -//CHECK#21 -if ( EvalError === null ) { - $ERROR("#21: EvalError === null"); -} - -//CHECK#22 -if ( RangeError === null ) { - $ERROR("#22: RangeError === null"); -} - -//CHECK#23 -if ( ReferenceError === null ) { - $ERROR("#23: ReferenceError === null"); -} - -//CHECK#24 -if ( SyntaxError === null ) { - $ERROR("#24: SyntaxError === null"); -} - -//CHECK#25 -if ( TypeError === null ) { - $ERROR("#25: TypeError === null"); -} - -//CHECK#26 -if ( URIError === null ) { - $ERROR("#26: URIError === null"); -} - diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A1.1_T4.js b/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A1.1_T4.js deleted file mode 100644 index aecf44d86..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A1.1_T4.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.1.5_A1.1_T4; - * @section: 10.1.5, 15.1; - * @assertion: Global object has properties such as built-in objects such as - * Math, String, Date, parseInt, etc; - * @description: Global execution context - Other Properties; -*/ - -//CHECK#27 -if ( Math === null ) { - $ERROR("#27: Math === null"); -} diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A1.2_T1.js b/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A1.2_T1.js deleted file mode 100644 index e89b59215..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A1.2_T1.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.1.5_A1.2_T1; - * @section: 10.1.5, 15.1; - * @assertion: Global object has properties such as built-in objects such as - * Math, String, Date, parseInt, etc; - * @description: Function execution context - Value Properties; -*/ - -function test() { - //CHECK#1 - if ( NaN === null ) { - $ERROR("#1: NaN === null"); - } - - //CHECK#2 - if ( Infinity === null ) { - $ERROR("#2: Infinity === null"); - } - - //CHECK#3 - if ( undefined === null ) { - $ERROR("#3: undefined === null"); - } -} - -test(); diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A1.2_T2.js b/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A1.2_T2.js deleted file mode 100644 index 464a53267..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A1.2_T2.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.1.5_A1.2_T2; - * @section: 10.1.5, 15.1; - * @assertion: Global object has properties such as built-in objects such as - * Math, String, Date, parseInt, etc; - * @description: Function execution context - Function Properties; -*/ - -function test() { - //CHECK#4 - if ( eval === null ) { - $ERROR("#4: eval === null"); - } - - //CHECK#5 - if ( parseInt === null ) { - $ERROR("#5: parseInt === null"); - } - - //CHECK#6 - if ( parseFloat === null ) { - $ERROR("#6: parseFloat === null"); - } - - //CHECK#7 - if ( isNaN === null ) { - $ERROR("#7: isNaN === null"); - } - - //CHECK#8 - if ( isFinite === null ) { - $ERROR("#8: isFinite === null"); - } - - //CHECK#9 - if ( decodeURI === null ) { - $ERROR("#9: decodeURI === null"); - } - - //CHECK#10 - if ( decodeURIComponent === null ) { - $ERROR("#10: decodeURIComponent === null"); - } - - //CHECK#11 - if ( encodeURI === null ) { - $ERROR("#11: encodeURI === null"); - } - - //CHECK#12 - if ( encodeURIComponent === null ) { - $ERROR("#12: encodeURIComponent === null"); - } -} - -test(); diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A1.2_T3.js b/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A1.2_T3.js deleted file mode 100644 index 174752415..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A1.2_T3.js +++ /dev/null @@ -1,89 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.1.5_A1.2_T3; - * @section: 10.1.5, 15.1; - * @assertion: Global object has properties such as built-in objects such as - * Math, String, Date, parseInt, etc; - * @description: Function execution context - Constructor Properties; -*/ - -function test() { - //CHECK#13 - if ( Object === null ) { - $ERROR("#13: Object === null"); - } - - //CHECK#14 - if ( Function === null ) { - $ERROR("#14: Function === null"); - } - - //CHECK#15 - if ( String === null ) { - $ERROR("#15: String === null"); - } - - //CHECK#16 - if ( Number === null ) { - $ERROR("#16: Function === null"); - } - - //CHECK#17 - if ( Array === null ) { - $ERROR("#17: Array === null"); - } - - //CHECK#18 - if ( Boolean === null ) { - $ERROR("#20: Boolean === null"); - } - - //CHECK#18 - if ( Date === null ) { - $ERROR("#18: Date === null"); - } - - //CHECK#19 - if ( RegExp === null ) { - $ERROR("#19: RegExp === null"); - } - - //CHECK#20 - if ( Error === null ) { - $ERROR("#20: Error === null"); - } - - //CHECK#21 - if ( EvalError === null ) { - $ERROR("#21: EvalError === null"); - } - - //CHECK#22 - if ( RangeError === null ) { - $ERROR("#22: RangeError === null"); - } - - //CHECK#23 - if ( ReferenceError === null ) { - $ERROR("#23: ReferenceError === null"); - } - - //CHECK#24 - if ( SyntaxError === null ) { - $ERROR("#24: SyntaxError === null"); - } - - //CHECK#25 - if ( TypeError === null ) { - $ERROR("#25: TypeError === null"); - } - - //CHECK#26 - if ( URIError === null ) { - $ERROR("#26: URIError === null"); - } -} - -test(); diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A1.2_T4.js b/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A1.2_T4.js deleted file mode 100644 index bad81c43a..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A1.2_T4.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.1.5_A1.2_T4; - * @section: 10.1.5, 15.1; - * @assertion: Global object has properties such as built-in objects such as - * Math, String, Date, parseInt, etc; - * @description: Function execution context - Other Properties; -*/ - -function test() { - //CHECK#27 - if ( Math === null ) { - $ERROR("#27: Math === null"); - } -} - -test(); diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A1.3_T1.js b/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A1.3_T1.js deleted file mode 100644 index 20e07d349..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A1.3_T1.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.1.5_A1.3_T1; - * @section: 10.1.5, 15.1; - * @assertion: Global object has properties such as built-in objects such as - * Math, String, Date, parseInt, etc; - * @description: Eval execution context - Value Properties; -*/ - -var evalStr = -'//CHECK#1\n'+ -'if ( NaN === null ) {\n'+ -' $ERROR("#1: NaN === null");\n'+ -'}\n'+ - -'//CHECK#2\n'+ -'if ( Infinity === null ) {\n'+ -' $ERROR("#2: Infinity === null");\n'+ -'}\n'+ - -'//CHECK#3\n'+ -'if ( undefined === null ) {\n'+ -' $ERROR("#3: undefined === null");\n'+ -'}\n'+ -';\n'; - -eval(evalStr); diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A1.3_T2.js b/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A1.3_T2.js deleted file mode 100644 index 8925b29be..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A1.3_T2.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.1.5_A1.3_T2; - * @section: 10.1.5, 15.1; - * @assertion: Global object has properties such as built-in objects such as - * Math, String, Date, parseInt, etc; - * @description: Eval execution context - Function Properties; -*/ - -var evalStr = -'//CHECK#4\n'+ -'if ( eval === null ) {\n'+ -' $ERROR("#4: eval === null");\n'+ -'}\n'+ - -'//CHECK#5\n'+ -'if ( parseInt === null ) {\n'+ -' $ERROR("#5: parseInt === null");\n'+ -'}\n'+ - -'//CHECK#6\n'+ -'if ( parseFloat === null ) {\n'+ -' $ERROR("#6: parseFloat === null");\n'+ -'}\n'+ - -'//CHECK#7\n'+ -'if ( isNaN === null ) {\n'+ -' $ERROR("#7: isNaN === null");\n'+ -'}\n'+ - -'//CHECK#8\n'+ -'if ( isFinite === null ) {\n'+ -' $ERROR("#8: isFinite === null");\n'+ -'}\n'+ - -'//CHECK#9\n'+ -'if ( decodeURI === null ) {\n'+ -' $ERROR("#9: decodeURI === null");\n'+ -'}\n'+ - -'//CHECK#10\n'+ -'if ( decodeURIComponent === null ) {\n'+ -' $ERROR("#10: decodeURIComponent === null");\n'+ -'}\n'+ - -'//CHECK#11\n'+ -'if ( encodeURI === null ) {\n'+ -' $ERROR("#11: encodeURI === null");\n'+ -'}\n'+ - -'//CHECK#12\n'+ -'if ( encodeURIComponent === null ) {\n'+ -' $ERROR("#12: encodeURIComponent === null");\n'+ -'}\n'+ -';\n'; - -eval(evalStr); diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A1.3_T3.js b/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A1.3_T3.js deleted file mode 100644 index 050c8bfcf..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A1.3_T3.js +++ /dev/null @@ -1,89 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.1.5_A1.3_T3; - * @section: 10.1.5, 15.1; - * @assertion: Global object has properties such as built-in objects such as - * Math, String, Date, parseInt, etc; - * @description: Eval execution context - Constructor Properties; -*/ - -var evalStr = -'//CHECK#13\n'+ -'if ( Object === null ) {\n'+ -' $ERROR("#13: Object === null");\n'+ -'}\n'+ - -'//CHECK#14\n'+ -'if ( Function === null ) {\n'+ -' $ERROR("#14: Function === null");\n'+ -'}\n'+ - -'//CHECK#15\n'+ -'if ( String === null ) {\n'+ -' $ERROR("#15: String === null");\n'+ -'}\n'+ - -'//CHECK#16\n'+ -'if ( Number === null ) {\n'+ -' $ERROR("#16: Function === null");\n'+ -'}\n'+ - -'//CHECK#17\n'+ -'if ( Array === null ) {\n'+ -' $ERROR("#17: Array === null");\n'+ -'}\n'+ - -'//CHECK#18\n'+ -'if ( Boolean === null ) {\n'+ -' $ERROR("#20: Boolean === null");\n'+ -'}\n'+ - -'//CHECK#18\n'+ -'if ( Date === null ) {\n'+ -' $ERROR("#18: Date === null");\n'+ -'}\n'+ - -'//CHECK#19\n'+ -'if ( RegExp === null ) {\n'+ -' $ERROR("#19: RegExp === null");\n'+ -'}\n'+ - -'//CHECK#20\n'+ -'if ( Error === null ) {\n'+ -' $ERROR("#20: Error === null");\n'+ -'}\n'+ - -'//CHECK#21\n'+ -'if ( EvalError === null ) {\n'+ -' $ERROR("#21: EvalError === null");\n'+ -'}\n'+ - -'//CHECK#22\n'+ -'if ( RangeError === null ) {\n'+ -' $ERROR("#22: RangeError === null");\n'+ -'}\n'+ - -'//CHECK#23\n'+ -'if ( ReferenceError === null ) {\n'+ -' $ERROR("#23: ReferenceError === null");\n'+ -'}\n'+ - -'//CHECK#24\n'+ -'if ( SyntaxError === null ) {\n'+ -' $ERROR("#24: SyntaxError === null");\n'+ -'}\n'+ - -'//CHECK#25\n'+ -'if ( TypeError === null ) {\n'+ -' $ERROR("#25: TypeError === null");\n'+ -'}\n'+ - -'//CHECK#26\n'+ -'if ( URIError === null ) {\n'+ -' $ERROR("#26: URIError === null");\n'+ -'}\n'+ -';\n'; - -eval(evalStr); diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A1.3_T4.js b/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A1.3_T4.js deleted file mode 100644 index 62418aad3..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A1.3_T4.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.1.5_A1.3_T4; - * @section: 10.1.5, 15.1; - * @assertion: Global object has properties such as built-in objects such as - * Math, String, Date, parseInt, etc; - * @description: Eval execution context - Other Properties; -*/ - -var evalStr = -'//CHECK#27\n'+ -'if ( Math === null ) {\n'+ -' $ERROR("#27: Math === null");\n'+ -'}\n'+ -';\n'; - -eval(evalStr); diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A2.1_T1.js b/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A2.1_T1.js deleted file mode 100644 index caa0d1ba1..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A2.1_T1.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.1.5_A2.1_T1; - * @section: 10.1.5, 15.1; - * @assertion: Global object properties have attributes { DontEnum }; - * @description: Global execution context - Value Properties; -*/ - -//CHECK#1 -for (var x in this) { - if ( x === 'NaN' ) { - $ERROR("#1: 'NaN' have attribute DontEnum"); - } else if ( x === 'Infinity' ) { - $ERROR("#1: 'Infinity' have attribute DontEnum"); - } else if ( x === 'undefined' ) { - $ERROR("#1: 'undefined' have attribute DontEnum"); - } -} diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A2.1_T2.js b/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A2.1_T2.js deleted file mode 100644 index f9fb53f23..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A2.1_T2.js +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.1.5_A2.1_T2; - * @section: 10.1.5, 15.1; - * @assertion: Global object properties have attributes { DontEnum }; - * @description: Global execution context - Function Properties; -*/ - -//CHECK#1 -for (var x in this) { - if ( x === 'eval' ) { - $ERROR("#1: 'eval' have attribute DontEnum"); - } else if ( x === 'parseInt' ) { - $ERROR("#1: 'parseInt' have attribute DontEnum"); - } else if ( x === 'parseFloat' ) { - $ERROR("#1: 'parseFloat' have attribute DontEnum"); - } else if ( x === 'isNaN' ) { - $ERROR("#1: 'isNaN' have attribute DontEnum"); - } else if ( x === 'isFinite' ) { - $ERROR("#1: 'isFinite' have attribute DontEnum"); - } else if ( x === 'decodeURI' ) { - $ERROR("#1: 'decodeURI' have attribute DontEnum"); - } else if ( x === 'decodeURIComponent' ) { - $ERROR("#1: 'decodeURIComponent' have attribute DontEnum"); - } else if ( x === 'encodeURI' ) { - $ERROR("#1: 'encodeURI' have attribute DontEnum"); - } else if ( x === 'encodeURIComponent' ) { - $ERROR("#1: 'encodeURIComponent' have attribute DontEnum"); - } -} diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A2.1_T3.js b/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A2.1_T3.js deleted file mode 100644 index d341c9247..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A2.1_T3.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.1.5_A2.1_T3; - * @section: 10.1.5, 15.1; - * @assertion: Global object properties have attributes { DontEnum }; - * @description: Global execution context - Constructor Properties; -*/ - -//CHECK#1 -for (var x in this) { - if ( x === 'Object' ) { - $ERROR("#1: 'property 'Object' have attribute DontEnum"); - } else if ( x === 'Function') { - $ERROR("#1: 'Function' have attribute DontEnum"); - } else if ( x === 'String' ) { - $ERROR("#1: 'String' have attribute DontEnum"); - } else if ( x === 'Number' ) { - $ERROR("#1: 'Number' have attribute DontEnum"); - } else if ( x === 'Array' ) { - $ERROR("#1: 'Array' have attribute DontEnum"); - } else if ( x === 'Boolean' ) { - $ERROR("#1: 'Boolean' have attribute DontEnum"); - } else if ( x === 'Date' ) { - $ERROR("#1: 'Date' have attribute DontEnum"); - } else if ( x === 'RegExp' ) { - $ERROR("#1: 'RegExp' have attribute DontEnum"); - } else if ( x === 'Error' ) { - $ERROR("#1: 'Error' have attribute DontEnum"); - } else if ( x === 'EvalError' ) { - $ERROR("#1: 'EvalError' have attribute DontEnum"); - } else if ( x === 'RangeError' ) { - $ERROR("#1: 'RangeError' have attribute DontEnum"); - } else if ( x === 'ReferenceError' ) { - $ERROR("#1: 'ReferenceError' have attribute DontEnum"); - } else if ( x === 'SyntaxError' ) { - $ERROR("#1: 'SyntaxError' have attribute DontEnum"); - } else if ( x === 'TypeError' ) { - $ERROR("#1: 'TypeError' have attribute DontEnum"); - } else if ( x === 'URIError' ) { - $ERROR("#1: 'URIError' have attribute DontEnum"); - } -} diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A2.1_T4.js b/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A2.1_T4.js deleted file mode 100644 index d26b2c5ca..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A2.1_T4.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.1.5_A2.1_T4; - * @section: 10.1.5, 15.1; - * @assertion: Global object properties have attributes { DontEnum }; - * @description: Global execution context - Other Properties; -*/ - -//CHECK#1 -for (var x in this) { - if ( x === 'Math' ) { - $ERROR("#1: 'Math' have attribute DontEnum"); - } -} diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A2.2_T1.js b/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A2.2_T1.js deleted file mode 100644 index ab90dba4f..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A2.2_T1.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.1.5_A2.2_T1; - * @section: 10.1.5, 15.1; - * @assertion: Global object properties have attributes { DontEnum }; - * @description: Function execution context - Value Properties; -*/ - -function test() { - //CHECK#1 - for (var x in this) { - if ( x === 'NaN' ) { - $ERROR("#1: 'NaN' have attribute DontEnum"); - } else if ( x === 'Infinity' ) { - $ERROR("#1: 'Infinity' have attribute DontEnum"); - } else if ( x === 'undefined' ) { - $ERROR("#1: 'undefined' have attribute DontEnum"); - } - } -} - -test(); diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A2.2_T2.js b/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A2.2_T2.js deleted file mode 100644 index 115edc89c..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A2.2_T2.js +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.1.5_A2.2_T2; - * @section: 10.1.5, 15.1; - * @assertion: Global object properties have attributes { DontEnum }; - * @description: Function execution context - Function Properties; -*/ - -function test() { - //CHECK#1 - for (var x in this) { - if ( x === 'eval' ) { - $ERROR("#1: 'eval' have attribute DontEnum"); - } else if ( x === 'parseInt' ) { - $ERROR("#1: 'parseInt' have attribute DontEnum"); - } else if ( x === 'parseFloat' ) { - $ERROR("#1: 'parseFloat' have attribute DontEnum"); - } else if ( x === 'isNaN' ) { - $ERROR("#1: 'isNaN' have attribute DontEnum"); - } else if ( x === 'isFinite' ) { - $ERROR("#1: 'isFinite' have attribute DontEnum"); - } else if ( x === 'decodeURI' ) { - $ERROR("#1: 'decodeURI' have attribute DontEnum"); - } else if ( x === 'decodeURIComponent' ) { - $ERROR("#1: 'decodeURIComponent' have attribute DontEnum"); - } else if ( x === 'encodeURI' ) { - $ERROR("#1: 'encodeURI' have attribute DontEnum"); - } else if ( x === 'encodeURIComponent' ) { - $ERROR("#1: 'encodeURIComponent' have attribute DontEnum"); - } - } -} - -test(); diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A2.2_T3.js b/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A2.2_T3.js deleted file mode 100644 index c200c7488..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A2.2_T3.js +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.1.5_A2.2_T3; - * @section: 10.1.5, 15.1; - * @assertion: Global object properties have attributes { DontEnum }; - * @description: Function execution context - Constructor Properties; -*/ - -function test() { - //CHECK#1 - for (var x in this) { - if ( x === 'Object' ) { - $ERROR("#1: 'property 'Object' have attribute DontEnum"); - } else if ( x === 'Function') { - $ERROR("#1: 'Function' have attribute DontEnum"); - } else if ( x === 'String' ) { - $ERROR("#1: 'String' have attribute DontEnum"); - } else if ( x === 'Number' ) { - $ERROR("#1: 'Number' have attribute DontEnum"); - } else if ( x === 'Array' ) { - $ERROR("#1: 'Array' have attribute DontEnum"); - } else if ( x === 'Boolean' ) { - $ERROR("#1: 'Boolean' have attribute DontEnum"); - } else if ( x === 'Date' ) { - $ERROR("#1: 'Date' have attribute DontEnum"); - } else if ( x === 'RegExp' ) { - $ERROR("#1: 'RegExp' have attribute DontEnum"); - } else if ( x === 'Error' ) { - $ERROR("#1: 'Error' have attribute DontEnum"); - } else if ( x === 'EvalError' ) { - $ERROR("#1: 'EvalError' have attribute DontEnum"); - } else if ( x === 'RangeError' ) { - $ERROR("#1: 'RangeError' have attribute DontEnum"); - } else if ( x === 'ReferenceError' ) { - $ERROR("#1: 'ReferenceError' have attribute DontEnum"); - } else if ( x === 'SyntaxError' ) { - $ERROR("#1: 'SyntaxError' have attribute DontEnum"); - } else if ( x === 'TypeError' ) { - $ERROR("#1: 'TypeError' have attribute DontEnum"); - } else if ( x === 'URIError' ) { - $ERROR("#1: 'URIError' have attribute DontEnum"); - } - } -} - -test(); diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A2.2_T4.js b/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A2.2_T4.js deleted file mode 100644 index 0b1519040..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A2.2_T4.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.1.5_A2.2_T4; - * @section: 10.1.5, 15.1; - * @assertion: Global object properties have attributes { DontEnum }; - * @description: Function execution context - Other Properties; -*/ - -function test() { - //CHECK#1 - for (var x in this) { - if ( x === 'Math' ) { - $ERROR("#1: 'Math' have attribute DontEnum"); - } - } -} - -test(); diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A2.3_T1.js b/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A2.3_T1.js deleted file mode 100644 index c0979bada..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A2.3_T1.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.1.5_A2.3_T1; - * @section: 10.1.5, 15.1; - * @assertion: Global object properties have attributes { DontEnum }; - * @description: Global execution context - Value Properties; -*/ - -var evalStr = -'//CHECK#1\n'+ -'for (var x in this) {\n'+ -' if ( x === \'NaN\' ) {\n'+ -' $ERROR("#1: \'NaN\' have attribute DontEnum");\n'+ -' } else if ( x === \'Infinity\' ) {\n'+ -' $ERROR("#1: \'Infinity\' have attribute DontEnum");\n'+ -' } else if ( x === \'undefined\' ) {\n'+ -' $ERROR("#1: \'undefined\' have attribute DontEnum");\n'+ -' }\n'+ -'}\n'; - -eval(evalStr); diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A2.3_T2.js b/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A2.3_T2.js deleted file mode 100644 index 0bc4bbd63..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A2.3_T2.js +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.1.5_A2.3_T2; - * @section: 10.1.5, 15.1; - * @assertion: Global object properties have attributes { DontEnum }; - * @description: Global execution context - Function Properties; -*/ - -var evalStr = -'//CHECK#1\n'+ -'for (var x in this) {\n'+ -' if ( x === \'eval\' ) {\n'+ -' $ERROR("#1: \'eval\' have attribute DontEnum");\n'+ -' } else if ( x === \'parseInt\' ) {\n'+ -' $ERROR("#1: \'parseInt\' have attribute DontEnum");\n'+ -' } else if ( x === \'parseFloat\' ) {\n'+ -' $ERROR("#1: \'parseFloat\' have attribute DontEnum");\n'+ -' } else if ( x === \'isNaN\' ) {\n'+ -' $ERROR("#1: \'isNaN\' have attribute DontEnum");\n'+ -' } else if ( x === \'isFinite\' ) {\n'+ -' $ERROR("#1: \'isFinite\' have attribute DontEnum");\n'+ -' } else if ( x === \'decodeURI\' ) {\n'+ -' $ERROR("#1: \'decodeURI\' have attribute DontEnum");\n'+ -' } else if ( x === \'decodeURIComponent\' ) {\n'+ -' $ERROR("#1: \'decodeURIComponent\' have attribute DontEnum");\n'+ -' } else if ( x === \'encodeURI\' ) {\n'+ -' $ERROR("#1: \'encodeURI\' have attribute DontEnum");\n'+ -' } else if ( x === \'encodeURIComponent\' ) {\n'+ -' $ERROR("#1: \'encodeURIComponent\' have attribute DontEnum");\n'+ -' }\n'+ -'}\n'; - -eval(evalStr); diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A2.3_T3.js b/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A2.3_T3.js deleted file mode 100644 index aadefec4e..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A2.3_T3.js +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.1.5_A2.3_T3; - * @section: 10.1.5, 15.1; - * @assertion: Global object properties have attributes { DontEnum }; - * @description: Global execution context - Constructor Properties; -*/ - -var evalStr = -'//CHECK#1\n'+ -'for (var x in this) {\n'+ -' if ( x === \'Object\' ) {\n'+ -' $ERROR("#1: \'Object\' have attribute DontEnum");\n'+ -' } else if ( x === \'Function\') {\n'+ -' $ERROR("#1: \'Function\' have attribute DontEnum");\n'+ -' } else if ( x === \'String\' ) {\n'+ -' $ERROR("#1: \'String\' have attribute DontEnum");\n'+ -' } else if ( x === \'Number\' ) {\n'+ -' $ERROR("#1: \'Number\' have attribute DontEnum");\n'+ -' } else if ( x === \'Array\' ) {\n'+ -' $ERROR("#1: \'Array\' have attribute DontEnum");\n'+ -' } else if ( x === \'Boolean\' ) {\n'+ -' $ERROR("#1: \'Boolean\' have attribute DontEnum");\n'+ -' } else if ( x === \'Date\' ) {\n'+ -' $ERROR("#1: \'Date\' have attribute DontEnum");\n'+ -' } else if ( x === \'RegExp\' ) {\n'+ -' $ERROR("#1: \'RegExp\' have attribute DontEnum");\n'+ -' } else if ( x === \'Error\' ) {\n'+ -' $ERROR("#1: \'Error\' have attribute DontEnum");\n'+ -' } else if ( x === \'EvalError\' ) {\n'+ -' $ERROR("#1: \'EvalError\' have attribute DontEnum");\n'+ -' } else if ( x === \'RangeError\' ) {\n'+ -' $ERROR("#1: \'RangeError\' have attribute DontEnum");\n'+ -' } else if ( x === \'ReferenceError\' ) {\n'+ -' $ERROR("#1: \'ReferenceError\' have attribute DontEnum");\n'+ -' } else if ( x === \'SyntaxError\' ) {\n'+ -' $ERROR("#1: \'SyntaxError\' have attribute DontEnum");\n'+ -' } else if ( x === \'TypeError\' ) {\n'+ -' $ERROR("#1: \'TypeError\' have attribute DontEnum");\n'+ -' } else if ( x === \'URIError\' ) {\n'+ -' $ERROR("#1: \'URIError\' have attribute DontEnum");\n'+ -' }\n'+ -'}\n'; - -eval(evalStr); diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A2.3_T4.js b/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A2.3_T4.js deleted file mode 100644 index c74bcd02b..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.5_Global_Object/S10.1.5_A2.3_T4.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.1.5_A2.3_T4; - * @section: 10.1.5, 15.1; - * @assertion: Global object properties have attributes { DontEnum }; - * @description: Global execution context - Other Properties; -*/ - -var evalStr = -'//CHECK#1\n'+ -'for (var x in this) {\n'+ -' if ( x === \'Math\' ) {\n'+ -' $ERROR("#1: \'Math\' have attribute DontEnum");\n'+ -' }\n'+ -'}\n'; - -eval(evalStr); diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.8_Arguments_Object/S10.1.8_A1.js b/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.8_Arguments_Object/S10.1.8_A1.js deleted file mode 100644 index 030d57d74..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.8_Arguments_Object/S10.1.8_A1.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.1.8_A1; - * @section: 10.1.8; - * @assertion: When control enters an execution context for function code, - * an arguments object is created and initialised; - * @description: Executing function which uses arguments object; -*/ - -//CHECK#1 -function f1(){ - return arguments; -} - -try{ - var x = f1(); -} -catch(e){ - $ERROR("#1: arguments doesn't exists"); -} - -//CHECK#2 -var f2 = function(){ - return arguments; -} - -try{ - var x = f2(); -} -catch(e){ - $ERROR("#2: arguments doesn't exists"); -} diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.8_Arguments_Object/S10.1.8_A2.js b/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.8_Arguments_Object/S10.1.8_A2.js deleted file mode 100644 index ad12b57e2..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.8_Arguments_Object/S10.1.8_A2.js +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.1.8_A2; - * @section: 10.1.8; - * @assertion: The value of the internal [[Prototype]] property of the - * created arguments object is the original Object prototype object, the one - * that is the initial value of Object.prototype; - * @description: Checking arguments.constructor.prototype===Object.prototype; -*/ - -//CHECK#1 -function f1(){ - return arguments.constructor.prototype; -} -try{ - if(f1() !== Object.prototype){ - $ERROR('#1: arguments.constructor.prototype === Object.prototype'); - } -} -catch(e){ - $ERROR("#1: arguments doesn't exists"); -} - -//CHECK#2 -var f2 = function(){return arguments.constructor.prototype;}; -try{ - if(f2() !== Object.prototype){ - $ERROR('#2: arguments.constructor.prototype === Object.prototype'); - } -} -catch(e){ - $ERROR("#2: arguments doesn't exists"); -} diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.8_Arguments_Object/S10.1.8_A3_T1.js b/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.8_Arguments_Object/S10.1.8_A3_T1.js deleted file mode 100644 index 4b970d33d..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.8_Arguments_Object/S10.1.8_A3_T1.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.1.8_A3_T1; - * @section: 10.1.8; - * @assertion: A property is created with name callee with property - * attributes { DontEnum } and no others; - * @description: Checking existence of arguments.callee property; -*/ - -//CHECK#1 -function f1(){ - return arguments.hasOwnProperty("callee"); -} -try{ - if(f1() !== true){ - $ERROR("#1: arguments object doesn't contains property 'callee'"); - } -} -catch(e){ - $ERROR("#1: arguments object doesn't exists"); -} - -//CHECK#2 -var f2 = function(){return arguments.hasOwnProperty("callee");}; -try{ - if(f2() !== true){ - $ERROR("#2: arguments object doesn't contains property 'callee'"); - } -} -catch(e){ - $ERROR("#2: arguments object doesn't exists"); -} diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.8_Arguments_Object/S10.1.8_A3_T2.js b/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.8_Arguments_Object/S10.1.8_A3_T2.js deleted file mode 100644 index 3c1bf9af5..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.8_Arguments_Object/S10.1.8_A3_T2.js +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.1.8_A3_T2; - * @section: 10.1.8; - * @assertion: A property is created with name callee with property - * attributes { DontEnum } and no others; - * @description: Checking if enumerating the arguments.callee property fails; -*/ - -//CHECK#1 -function f1(){ - for(var x in arguments){ - if (x === "callee"){ - return false; - } - } - return true; -} - -try{ - if(!f1()){ - $ERROR("#1: A property callee don't have attribute { DontEnum }"); - } -} -catch(e){ - $ERROR("#1: arguments object don't exists"); -} - -//CHECK#2 -var f2 = function(){ - for(var x in arguments){ - if (x === "callee"){ - return false; - } - } - return true; -} - -try{ - if(!f2()){ - $ERROR("#2: A property callee don't have attribute { DontEnum }"); - } -} -catch(e){ - $ERROR("#2: arguments object don't exists"); -} diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.8_Arguments_Object/S10.1.8_A3_T3.js b/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.8_Arguments_Object/S10.1.8_A3_T3.js deleted file mode 100644 index 4f0da4090..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.8_Arguments_Object/S10.1.8_A3_T3.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.1.8_A3_T3; - * @section: 10.1.8; - * @assertion: A property is created with name callee with property - * attributes { DontEnum } and no others; - * @description: Checking if deleting arguments.callee property fails; -*/ - -//CHECK#1 -function f1(){ - return (delete arguments.callee); -} - -try{ - if(!f1()){ - $ERROR("#1: A property callee have attribute { DontDelete }"); - } -} -catch(e){ - $ERROR("#1: arguments object don't exists"); -} - -//CHECK#2 -var f2 = function(){ - return (delete arguments.callee); -} - -try{ - if(!f2()){ - $ERROR("#2: A property callee have attribute { DontDelete }"); - } -} -catch(e){ - $ERROR("#2: arguments object don't exists"); -} diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.8_Arguments_Object/S10.1.8_A3_T4.js b/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.8_Arguments_Object/S10.1.8_A3_T4.js deleted file mode 100644 index b125a58e2..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.8_Arguments_Object/S10.1.8_A3_T4.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.1.8_A3_T4; - * @section: 10.1.8; - * @assertion: A property is created with name callee with property - * attributes { DontEnum } and no others; - * @description: Overriding arguments.callee property; -*/ - -var str = "something different"; -//CHECK#1 -function f1(){ - arguments.callee = str; - return arguments; -} - -try{ - if(f1().callee !== str){ - $ERROR("#1: A property callee have attribute { ReadOnly }"); - } -} -catch(e){ - $ERROR("#1: arguments object don't exists"); -} - -//CHECK#2 -var f2 = function(){ - arguments.callee = str; - return arguments; - } -try{ - if(f2().callee !== str){ - $ERROR("#2: A property callee have attribute { ReadOnly }"); - } -} -catch(e){ - $ERROR("#2: arguments object don't exists"); -} diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.8_Arguments_Object/S10.1.8_A4.js b/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.8_Arguments_Object/S10.1.8_A4.js deleted file mode 100644 index 181d8d749..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.8_Arguments_Object/S10.1.8_A4.js +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.1.8_A4; - * @section: 10.1.8; - * @assertion: The initial value of the created property callee is the - * Function object being executed; - * @description: Checking that arguments.callee === function object; -*/ - -//CHECK#1 -function f1(){ - return arguments.callee; -} - -try{ - if(f1 !== f1()){ - $ERROR('#1: arguments.callee === f1'); - } -} -catch(e){ - $ERROR("#1: arguments object doesn't exists"); -} - -//CHECK#2 -var f2 = function(){return arguments.callee;}; - -try{ - if(f2 !== f2()){ - $ERROR('#2: arguments.callee === f2'); - } -} -catch(e){ - $ERROR("#1: arguments object doesn't exists"); -} diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.8_Arguments_Object/S10.1.8_A5_T1.js b/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.8_Arguments_Object/S10.1.8_A5_T1.js deleted file mode 100644 index 6b678821f..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.8_Arguments_Object/S10.1.8_A5_T1.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.1.8_A5_T1; - * @section: 10.1.8; - * @assertion: A property is created with name length with property - * attributes { DontEnum } and no others; - * @description: Checking existence of arguments.length property; -*/ - -//CHECK#1 -function f1(){ - return arguments.hasOwnProperty("length"); -} -try{ - if(f1() !== true){ - $ERROR("#1: arguments object doesn't contains property 'length'"); - } -} -catch(e){ - $ERROR("#1: arguments object doesn't exists"); -} - -//CHECK#2 -var f2 = function(){return arguments.hasOwnProperty("length");}; -try{ - if(f2() !== true){ - $ERROR("#2: arguments object doesn't contains property 'length'"); - } -} -catch(e){ - $ERROR("#2: arguments object doesn't exists"); -} diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.8_Arguments_Object/S10.1.8_A5_T2.js b/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.8_Arguments_Object/S10.1.8_A5_T2.js deleted file mode 100644 index 8a2556049..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.8_Arguments_Object/S10.1.8_A5_T2.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.1.8_A5_T2; - * @section: 10.1.8; - * @assertion: A property is created with name length with property - * attributes { DontEnum } and no others; - * @description: Checking if enumerating the arguments.length property fails; -*/ - - -//CHECK#1 -function f1(){ - for(var x in arguments){ - if (x === "length"){ - return false; - } - } - return true; -} - -try{ - if(!f1()){ - $ERROR("#1: A property length don't have attribute { DontEnum }"); - } -} -catch(e){ - $ERROR("#1: arguments object don't exists"); -} - -//CHECK#2 -var f2 = function(){ - for(var x in arguments){ - if (x === "length"){ - return false; - } - } - return true; -} - -try{ - if(!f2()){ - $ERROR("#2: A property length don't have attribute { DontEnum }"); - } -} -catch(e){ - $ERROR("#2: arguments object don't exists"); -} diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.8_Arguments_Object/S10.1.8_A5_T3.js b/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.8_Arguments_Object/S10.1.8_A5_T3.js deleted file mode 100644 index 2dc5c7b7e..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.8_Arguments_Object/S10.1.8_A5_T3.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.1.8_A5_T3; - * @section: 10.1.8; - * @assertion: A property is created with name length with property - * attributes { DontEnum } and no others; - * @description: Checking if deleting arguments.length property fails; -*/ - -//CHECK#1 -function f1(){ - return (delete arguments.length); -} - -try{ - if(!f1()){ - $ERROR("#1: A property length have attribute { DontDelete }"); - } -} -catch(e){ - $ERROR("#1: arguments object don't exists"); -} - -//CHECK#2 -var f2 = function(){ - return (delete arguments.length); -} - -try{ - if(!f2()){ - $ERROR("#2: A property length have attribute { DontDelete }"); - } -} -catch(e){ - $ERROR("#2: arguments object don't exists"); -} diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.8_Arguments_Object/S10.1.8_A5_T4.js b/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.8_Arguments_Object/S10.1.8_A5_T4.js deleted file mode 100644 index e3a66113a..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.8_Arguments_Object/S10.1.8_A5_T4.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.1.8_A5_T4; - * @section: 10.1.8; - * @assertion: A property is created with name length with property - * attributes { DontEnum } and no others; - * @description: Overriding arguments.length property; -*/ - -var str = "something different"; -//CHECK#1 -function f1(){ - arguments.length = str; - return arguments; -} - -try{ - if(f1().length !== str){ - $ERROR("#1: A property length have attribute { ReadOnly }"); - } -} -catch(e){ - $ERROR("#1: arguments object don't exists"); -} - -//CHECK#2 -var f2 = function(){ - arguments.length = str; - return arguments; - } -try{ - if(f2().length !== str){ - $ERROR("#2: A property length have attribute { ReadOnly }"); - } -} -catch(e){ - $ERROR("#2: arguments object don't exists"); -} diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.8_Arguments_Object/S10.1.8_A6.js b/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.8_Arguments_Object/S10.1.8_A6.js deleted file mode 100644 index e921368f1..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.8_Arguments_Object/S10.1.8_A6.js +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.1.8_A6; - * @section: 10.1.8; - * @assertion: The initial value of the created property length is the number - * of actual parameter values supplied by the caller; - * @description: Create function, that returned arguments.length; -*/ - -function f1(){ - return arguments.length; -} - -//CHECK#1 -if(!(f1() === 0)){ - $ERROR('#1: argument.length === 0'); -} - -//CHECK#2 -if(!(f1(0) === 1)){ - $ERROR('#2: argument.length === 1'); -} - -//CHECK#3 -if(!(f1(0, 1) === 2)){ - $ERROR('#3: argument.length === 2'); -} - -//CHECK#4 -if(!(f1(0, 1, 2) === 3)){ - $ERROR('#4: argument.length === 3'); -} - -//CHECK#5 -if(!(f1(0, 1, 2, 3) === 4)){ - $ERROR('#5: argument.length === 4'); -} - -var f2 = function(){return arguments.length;}; - -//CHECK#6 -if(!(f2() === 0)){ - $ERROR('#6: argument.length === 0'); -} - -//CHECK#7 -if(!(f2(0) === 1)){ - $ERROR('#7: argument.length === 1'); -} - -//CHECK#8 -if(!(f2(0, 1) === 2)){ - $ERROR('#8: argument.length === 2'); -} - -//CHECK#9 -if(!(f2(0, 1, 2) === 3)){ - $ERROR('#9: argument.length === 3'); -} - -//CHECK#10 -if(!(f2(0, 1, 2, 3) === 4)){ - $ERROR('#10: argument.length === 4'); -} diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.8_Arguments_Object/S10.1.8_A7.js b/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.8_Arguments_Object/S10.1.8_A7.js deleted file mode 100644 index 2c595596c..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/10.1.8_Arguments_Object/S10.1.8_A7.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.1.8_A7; - * @section: 10.1.8; - * @assertion: Get arguments of function; - * @description: Use property arguments; -*/ - -function f1() { - return arguments; -} - -//CHECK#1-5 -for(var i = 1; i < 5; i++){ -if (f1(1,2,3,4,5)[i] !== (i+1)) - $ERROR("#"+i+": Returning function's arguments work wrong, f1(1,2,3,4,5)["+i+"] !== "+(i+1)); -} diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/S10.1.1_A1_T1.js b/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/S10.1.1_A1_T1.js deleted file mode 100644 index 1fc260895..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/S10.1.1_A1_T1.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.1.1_A1_T1; - * @section: 10.1.1; - * @assertion: Program functions are defined in source text by a FunctionDeclaration or created dynamically either - * by using a FunctionExpression or by using the built-in Function object as a constructor; - * @description: Defining function by a FunctionDeclaration; -*/ - -//CHECK#1 -function f1(){ - return 1; -} -if(typeof(f1)!=="function") - $ERROR('#1: typeof(f1)!=="function"'); diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/S10.1.1_A1_T2.js b/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/S10.1.1_A1_T2.js deleted file mode 100644 index fff4572f4..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/S10.1.1_A1_T2.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.1.1_A1_T2; - * @section: 10.1.1; - * @assertion: Program functions are defined in source text by a FunctionDeclaration or created dynamically either - * by using a FunctionExpression or by using the built-in Function object as a constructor; - * @description: Creating function dynamically by using a FunctionExpression; -*/ - -//CHECK#1 -var x=function f1(){return 1;}(); -if(x!==1) - $ERROR('#1: Create function dynamically either by using a FunctionExpression'); diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/S10.1.1_A1_T3.js b/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/S10.1.1_A1_T3.js deleted file mode 100644 index 8570ed957..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/S10.1.1_A1_T3.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.1.1_A1_T3; - * @section: 10.1.1; - * @assertion: Program functions are defined in source text by a FunctionDeclaration or created dynamically either - * by using a FunctionExpression or by using the built-in Function object as a constructor; - * @description: Creating function dynamically by using the built-in Function object as a constructor; -*/ - -//CHECK#1 -var x=new function f1(){return 1;}; -if(typeof(x.constructor)!=="function") - $ERROR('#1: typeof(x.constructor)!=="function"'); diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/S10.1.1_A2_T1.js b/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/S10.1.1_A2_T1.js deleted file mode 100644 index 894043f40..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/S10.1.1_A2_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.1.1_A2_T1; - * @section: 10.1.1; - * @assertion: There are two types of Function objects. Internal functions - * are built-in objects of the language, such as parseInt and Math.exp; - * @description: Checking types of parseInt and Math.exp; -*/ - -//CHECK#1 -if(typeof(Math.exp)!=="function") - $ERROR('#1: typeof(Math.exp(10))!=="function" '+typeof(Math.exp())); - -//CHECK#2 -if(typeof(parseInt)!=="function") - $ERROR('#2: typeof(parseInt())!=="function" '+typeof(parseInt())); - diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/S10.1.6_A1_T1.js b/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/S10.1.6_A1_T1.js deleted file mode 100644 index f15b5715d..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/S10.1.6_A1_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.1.6_A1_T1; - * @section: 10.1.6; - * @assertion: The activation object is initialised with a property with name arguments and attributes {DontDelete}; - * @description: Checking ifdeleting function parameter is possible; -*/ - -//CHECK#1 -function f1(a){ - delete a; - return a; -} -if (f1(1) !== 1) - $ERROR('#1: Function parameter was deleted'); - diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/S10.1.6_A1_T2.js b/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/S10.1.6_A1_T2.js deleted file mode 100644 index b59480047..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/S10.1.6_A1_T2.js +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.1.6_A1_T2; - * @section: 10.1.6; - * @assertion: The activation object is initialised with a property with name arguments and attributes {DontDelete}; - * @description: Checking funtion which returns property "arguments"; -*/ - -var ARG_STRING = "value of the argument property"; - -function f1() { - this.constructor.prototype.arguments = ARG_STRING; - return arguments; -} - -//CHECK#1 -if ((new f1(1,2,3,4,5)).length !== 5) - $ERROR('#1: (new f1(1,2,3,4,5)).length===5, where f1 returns "arguments" that is set to "'+ ARG_STRING + '"'); - -//CHECK#2 -if ((new f1(1,2,3,4,5))[3] !== 4) - $ERROR('#2: (new f1(1,2,3,4,5))[3]===4, where f1 returns "arguments" that is set to "'+ ARG_STRING + '"'); - -//CHECK#3 -var x = new f1(1,2,3,4,5); -if (delete x[3] !== true) - $ERROR('#3.1: Function parameters have attribute {DontDelete}'); - -if (x[3] === 4) - $ERROR('#3.2: Function parameters have attribute {DontDelete}'); diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/S10.1.6_A1_T3.js b/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/S10.1.6_A1_T3.js deleted file mode 100644 index e6b754c41..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/S10.1.6_A1_T3.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.1.6_A1_T3; - * @section: 10.1.6; - * @assertion: The activation object is initialised with a property with name arguments and attributes {DontDelete}; - * @description: Checking function which returns "this"; -*/ - -function f1() { - if (delete arguments) { - $ERROR("#1: Function parameters have attribute {DontDelete}" + arguments); - } - return arguments; -} - -f1(); diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/S10.1.7_A1_T1.js b/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/S10.1.7_A1_T1.js deleted file mode 100644 index 60409325f..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.1_Definitions/S10.1.7_A1_T1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.1.7_A1_T1; - * @section: 10.1.7; - * @assertion: The this value associated with an executioncontext is immutable; - * @description: Checking if deleting "this" fails; -*/ - -//CHECK#1 -if (delete this !== true) - $ERROR('#1: The this value associated with an executioncontext is immutable. Actual: this was deleted'); - diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.1_Global_Code/S10.2.1_A1_T1.js b/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.1_Global_Code/S10.2.1_A1_T1.js deleted file mode 100644 index 52198e725..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.1_Global_Code/S10.2.1_A1_T1.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.2.1_A1_T1; - * @section: 10.2.1; - * @assertion: Variable instantiation is performed using the global object as - * the variable object and using property attributes { DontDelete }; - * @description: Checking if deleting variable x, that is defined as var x = 1, fails; -*/ - -var x = 1; - -if (this.x !== 1) { - $ERROR("#1: variable x is a property of global object"); -} - -if(delete this.x !== false){ - $ERROR("#2: variable x has property attribute DontDelete"); -} diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.1_Global_Code/S10.2.1_A1_T2.js b/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.1_Global_Code/S10.2.1_A1_T2.js deleted file mode 100644 index 5ec31f18f..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.1_Global_Code/S10.2.1_A1_T2.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.2.1_A1_T2; - * @section: 10.2.1; - * @assertion: Variable instantiation is performed using the global object as - * the variable object and using property attributes { DontDelete }; - * @description: Checking if deleting variable x, that is defined as x = 1, fails; -*/ - -x = 1; - -if (this.x !== 1) { - $ERROR("#1: variable x is a property of global object"); -} - -if(delete this.x !== true){ - $ERROR("#2: variable x has property attribute DontDelete"); -} diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code/S10.2.2_A1.1_T1.js b/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code/S10.2.2_A1.1_T1.js deleted file mode 100644 index d174b1b5d..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code/S10.2.2_A1.1_T1.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.2.2_A1.1_T1; - * @section: 10.2.2; - * @assertion: The scope chain is initialised to contain the same objects, - * in the same order, as the calling context's scope chain; - * @description: eval within global execution context; -*/ - -var i; -var j; -str1 = ''; -str2 = ''; -x = 1; -y = 2; - -for(i in this){ - str1+=i; -} - -eval('for(j in this){\nstr2+=j;\n}'); - -if(!(str1 === str2)){ - $ERROR("#1: scope chain must contain same objects in the same order as the calling context"); -} diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code/S10.2.2_A1.1_T10.js b/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code/S10.2.2_A1.1_T10.js deleted file mode 100644 index 8243b05dd..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code/S10.2.2_A1.1_T10.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.2.2_A1.1_T10; - * @section: 10.2.2; - * @assertion: The scope chain is initialised to contain the same objects, - * in the same order, as the calling context's scope chain; - * @description: eval within global execution context; -*/ - -var i; -var j; -str1 = ''; -str2 = ''; -var x = 1; -var y = 2; - -for(i in this){ - str1+=i; -} - -eval('for(j in this){\nstr2+=j;\n}'); - -if(!(str1 === str2)){ - $ERROR("#1: scope chain must contain same objects in the same order as the calling context"); -} diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code/S10.2.2_A1.1_T11.js b/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code/S10.2.2_A1.1_T11.js deleted file mode 100644 index 302fbc3b3..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code/S10.2.2_A1.1_T11.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.2.2_A1.1_T11; - * @section: 10.2.2; - * @assertion: The scope chain is initialised to contain the same objects, - * in the same order, as the calling context's scope chain; - * @description: eval within global execution context; -*/ - -var i; -var j; -str1 = ''; -str2 = ''; - -for(i in this){ - str1+=i; -} - -eval('for(j in this){\nstr2+=j;\n}'); - -if(!(str1 === str2)){ - $ERROR("#1: scope chain must contain same objects in the same order as the calling context"); -} - -this.x = 1; -this.y = 2; diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code/S10.2.2_A1.1_T2.js b/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code/S10.2.2_A1.1_T2.js deleted file mode 100644 index fdb02d921..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code/S10.2.2_A1.1_T2.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.2.2_A1.1_T2; - * @section: 10.2.2; - * @assertion: The scope chain is initialised to contain the same objects, - * in the same order, as the calling context's scope chain; - * @description: eval within global execution context; -*/ - -var i; -var j; -str1 = ''; -str2 = ''; - -for(i in this){ - str1+=i; -} - -eval('for(j in this){\nstr2+=j;\n}'); - -if(!(str1 === str2)){ - $ERROR("#1: scope chain must contain same objects in the same order as the calling context"); -} - -var x = 1; -var y = 2; diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code/S10.2.2_A1.1_T3.js b/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code/S10.2.2_A1.1_T3.js deleted file mode 100644 index c0be2c2b4..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code/S10.2.2_A1.1_T3.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.2.2_A1.1_T3; - * @section: 10.2.2; - * @assertion: The scope chain is initialised to contain the same objects, - * in the same order, as the calling context's scope chain; - * @description: eval within global execution context; -*/ - -var i; -var j; -str1 = ''; -str2 = ''; -this.x = 1; -this.y = 2; - -for(i in this){ - str1+=i; -} - -eval('for(j in this){\nstr2+=j;\n}'); - -if(!(str1 === str2)){ - $ERROR("#1: scope chain must contain same objects in the same order as the calling context"); -} diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code/S10.2.2_A1.1_T4.js b/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code/S10.2.2_A1.1_T4.js deleted file mode 100644 index eee21fc51..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code/S10.2.2_A1.1_T4.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.2.2_A1.1_T4; - * @section: 10.2.2; - * @assertion: The scope chain is initialised to contain the same objects, - * in the same order, as the calling context's scope chain; - * @description: eval within global execution context; -*/ - -var i; -var j; -str1 = ''; -str2 = ''; -x = 1; - -for(i in this){ - str1+=i; -} - -eval('for(j in this){\nstr2+=j;\n}'); - -if(!(str1 === str2)){ - $ERROR("#1: scope chain must contain same objects in the same order as the calling context"); -} - -y = 2; diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code/S10.2.2_A1.1_T5.js b/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code/S10.2.2_A1.1_T5.js deleted file mode 100644 index 79082fc33..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code/S10.2.2_A1.1_T5.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.2.2_A1.1_T5; - * @section: 10.2.2; - * @assertion: The scope chain is initialised to contain the same objects, - * in the same order, as the calling context's scope chain; - * @description: eval within global execution context; -*/ - -var i; -var j; -str1 = ''; -str2 = ''; -var x = 1; - -for(i in this){ - str1+=i; -} - -eval('for(j in this){\nstr2+=j;\n}'); - -if(!(str1 === str2)){ - $ERROR("#1: scope chain must contain same objects in the same order as the calling context"); -} - -var y = 2; diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code/S10.2.2_A1.1_T6.js b/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code/S10.2.2_A1.1_T6.js deleted file mode 100644 index 26bd87d7c..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code/S10.2.2_A1.1_T6.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.2.2_A1.1_T6; - * @section: 10.2.2; - * @assertion: The scope chain is initialised to contain the same objects, - * in the same order, as the calling context's scope chain; - * @description: eval within global execution context; -*/ - -var i; -var j; -str1 = ''; -str2 = ''; -this.x = 1; - -for(i in this){ - str1+=i; -} - -eval('for(j in this){\nstr2+=j;\n}'); - -if(!(str1 === str2)){ - $ERROR("#1: scope chain must contain same objects in the same order as the calling context"); -} - -this.y = 2; diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code/S10.2.2_A1.1_T7.js b/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code/S10.2.2_A1.1_T7.js deleted file mode 100644 index 5bb3be36a..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code/S10.2.2_A1.1_T7.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.2.2_A1.1_T7; - * @section: 10.2.2; - * @assertion: The scope chain is initialised to contain the same objects, - * in the same order, as the calling context's scope chain; - * @description: eval within global execution context; -*/ - -var i; -var j; -str1 = ''; -str2 = ''; -x = 1; - -for(i in this){ - str1+=i; -} - -eval('for(j in this){\nstr2+=j;\n}'); - -if(!(str1 === str2)){ - $ERROR("#1: scope chain must contain same objects in the same order as the calling context"); -} - -var y = 2; diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code/S10.2.2_A1.1_T8.js b/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code/S10.2.2_A1.1_T8.js deleted file mode 100644 index 52154c363..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code/S10.2.2_A1.1_T8.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.2.2_A1.1_T8; - * @section: 10.2.2; - * @assertion: The scope chain is initialised to contain the same objects, - * in the same order, as the calling context's scope chain; - * @description: eval within global execution context; -*/ - -var i; -var j; -str1 = ''; -str2 = ''; -this.x = 1; - -for(i in this){ - str1+=i; -} - -eval('for(j in this){\nstr2+=j;\n}'); - -if(!(str1 === str2)){ - $ERROR("#1: scope chain must contain same objects in the same order as the calling context"); -} - -var y = 2; diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code/S10.2.2_A1.1_T9.js b/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code/S10.2.2_A1.1_T9.js deleted file mode 100644 index 87ceef7e1..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code/S10.2.2_A1.1_T9.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.2.2_A1.1_T9; - * @section: 10.2.2; - * @assertion: The scope chain is initialised to contain the same objects, - * in the same order, as the calling context's scope chain; - * @description: eval within global execution context; -*/ - -var i; -var j; -str1 = ''; -str2 = ''; - -for(i in this){ - str1+=i; -} - -eval('for(j in this){\nstr2+=j;\n}'); - -if(!(str1 === str2)){ - $ERROR("#1: scope chain must contain same objects in the same order as the calling context"); -} - -x = 1; -y = 2; diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code/S10.2.2_A1.2_T1.js b/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code/S10.2.2_A1.2_T1.js deleted file mode 100644 index 33b9e6a77..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code/S10.2.2_A1.2_T1.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.2.2_A1.2_T1; - * @section: 10.2.2; - * @assertion: The scope chain is initialised to contain the same objects, - * in the same order, as the calling context's scope chain; - * @description: eval within global execution context; -*/ - -function f(){ - var i; - var j; - str1 = ''; - str2 = ''; - x = 1; - y = 2; - - for(i in this){ - str1+=i; - } - - eval('for(j in this){\nstr2+=j;\n}'); - return (str1 === str2); -} - -if(!f()){ - $ERROR("#1: scope chain must contain same objects in the same order as the calling context"); -} diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code/S10.2.2_A1.2_T10.js b/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code/S10.2.2_A1.2_T10.js deleted file mode 100644 index a0791a786..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code/S10.2.2_A1.2_T10.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.2.2_A1.2_T10; - * @section: 10.2.2; - * @assertion: The scope chain is initialised to contain the same objects, - * in the same order, as the calling context's scope chain; - * @description: eval within global execution context; -*/ - -function f(){ - var i; - var j; - str1 = ''; - str2 = ''; - var x = 1; - var y = 2; - - for(i in this){ - str1+=i; - } - - eval('for(j in this){\nstr2+=j;\n}'); - - return (str1 === str2); -} - -if(!f()){ - $ERROR("#1: scope chain must contain same objects in the same order as the calling context"); -} diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code/S10.2.2_A1.2_T11.js b/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code/S10.2.2_A1.2_T11.js deleted file mode 100644 index 20254f94a..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code/S10.2.2_A1.2_T11.js +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.2.2_A1.2_T11; - * @section: 10.2.2; - * @assertion: The scope chain is initialised to contain the same objects, - * in the same order, as the calling context's scope chain; - * @description: eval within global execution context; -*/ - -function f(){ - var i; - var j; - str1 = ''; - str2 = ''; - - for(i in this){ - str1+=i; - } - - eval('for(j in this){\nstr2+=j;\n}'); - - return (str1 === str2); - - this.x = 1; - this.y = 2; -} - -if(!f()){ - $ERROR("#1: scope chain must contain same objects in the same order as the calling context"); -} diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code/S10.2.2_A1.2_T2.js b/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code/S10.2.2_A1.2_T2.js deleted file mode 100644 index 06b36402d..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code/S10.2.2_A1.2_T2.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.2.2_A1.2_T2; - * @section: 10.2.2; - * @assertion: The scope chain is initialised to contain the same objects, - * in the same order, as the calling context's scope chain; - * @description: eval within global execution context; -*/ - -function f(){ - var i; - var j; - str1 = ''; - str2 = ''; - - for(i in this){ - str1+=i; - } - - eval('for(j in this){\nstr2+=j;\n}'); - - return (str1 === str2); - var x = 1; - var y = 2; -} - -if(!f()){ - $ERROR("#1: scope chain must contain same objects in the same order as the calling context"); -} diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code/S10.2.2_A1.2_T3.js b/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code/S10.2.2_A1.2_T3.js deleted file mode 100644 index 34e1d1291..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code/S10.2.2_A1.2_T3.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.2.2_A1.2_T3; - * @section: 10.2.2; - * @assertion: The scope chain is initialised to contain the same objects, - * in the same order, as the calling context's scope chain; - * @description: eval within global execution context; -*/ - -function f(){ - var i; - var j; - str1 = ''; - str2 = ''; - this.x = 1; - this.y = 2; - - for(i in this){ - str1+=i; - } - - eval('for(j in this){\nstr2+=j;\n}'); - - return (str1 === str2); -} - -if(!f()){ - $ERROR("#1: scope chain must contain same objects in the same order as the calling context"); -} diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code/S10.2.2_A1.2_T4.js b/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code/S10.2.2_A1.2_T4.js deleted file mode 100644 index c41fea7f4..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code/S10.2.2_A1.2_T4.js +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.2.2_A1.2_T4; - * @section: 10.2.2; - * @assertion: The scope chain is initialised to contain the same objects, - * in the same order, as the calling context's scope chain; - * @description: eval within global execution context; -*/ - -function f(){ - var i; - var j; - str1 = ''; - str2 = ''; - x = 1; - - for(i in this){ - str1+=i; - } - - eval('for(j in this){\nstr2+=j;\n}'); - - return (str1 === str2); - - y = 2; -} - -if(!f()){ - $ERROR("#1: scope chain must contain same objects in the same order as the calling context"); -} diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code/S10.2.2_A1.2_T5.js b/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code/S10.2.2_A1.2_T5.js deleted file mode 100644 index 153374b82..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code/S10.2.2_A1.2_T5.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.2.2_A1.2_T5; - * @section: 10.2.2; - * @assertion: The scope chain is initialised to contain the same objects, - * in the same order, as the calling context's scope chain; - * @description: eval within global execution context; -*/ - -function f(){ - var i; - var j; - str1 = ''; - str2 = ''; - var x = 1; - - for(i in this){ - str1+=i; - } - - eval('for(j in this){\nstr2+=j;\n}'); - - return (str1 === str2); - - var y = 2; -} - -if(!f()){ - $ERROR("#1: scope chain must contain same objects in the same order as the calling context"); -} - diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code/S10.2.2_A1.2_T6.js b/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code/S10.2.2_A1.2_T6.js deleted file mode 100644 index c8f34aa97..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code/S10.2.2_A1.2_T6.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.2.2_A1.2_T6; - * @section: 10.2.2; - * @assertion: The scope chain is initialised to contain the same objects, - * in the same order, as the calling context's scope chain; - * @description: eval within global execution context; -*/ - -function f(){ - var i; - var j; - str1 = ''; - str2 = ''; - this.x = 1; - - for(i in this){ - str1+=i; - } - - eval('for(j in this){\nstr2+=j;\n}'); - - return (str1 === str2); - - this.y = 2; -} - -if(!f()){ - $ERROR("#1: scope chain must contain same objects in the same order as the calling context"); -} - diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code/S10.2.2_A1.2_T7.js b/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code/S10.2.2_A1.2_T7.js deleted file mode 100644 index 13c9544f4..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code/S10.2.2_A1.2_T7.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.2.2_A1.2_T7; - * @section: 10.2.2; - * @assertion: The scope chain is initialised to contain the same objects, - * in the same order, as the calling context's scope chain; - * @description: eval within global execution context; -*/ - -function f(){ - var i; - var j; - str1 = ''; - str2 = ''; - x = 1; - - for(i in this){ - str1+=i; - } - - eval('for(j in this){\nstr2+=j;\n}'); - - return (str1 === str2); - - var y = 2; -} - -if(!f()){ - $ERROR("#1: scope chain must contain same objects in the same order as the calling context"); -} - - diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code/S10.2.2_A1.2_T8.js b/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code/S10.2.2_A1.2_T8.js deleted file mode 100644 index 073d1689c..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code/S10.2.2_A1.2_T8.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.2.2_A1.2_T8; - * @section: 10.2.2; - * @assertion: The scope chain is initialised to contain the same objects, - * in the same order, as the calling context's scope chain; - * @description: eval within global execution context; -*/ - -function f(){ - var i; - var j; - str1 = ''; - str2 = ''; - this.x = 1; - - for(i in this){ - str1+=i; - } - - eval('for(j in this){\nstr2+=j;\n}'); - - return (str1 === str2); - - var y = 2; -} - -if(!f()){ - $ERROR("#1: scope chain must contain same objects in the same order as the calling context"); -} - diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code/S10.2.2_A1.2_T9.js b/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code/S10.2.2_A1.2_T9.js deleted file mode 100644 index 568685266..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/10.2.2_Eval_Code/S10.2.2_A1.2_T9.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.2.2_A1.2_T9; - * @section: 10.2.2; - * @assertion: The scope chain is initialised to contain the same objects, - * in the same order, as the calling context's scope chain; - * @description: eval within global execution context; -*/ - -function f(){ - var i; - var j; - str1 = ''; - str2 = ''; - - for(i in this){ - str1+=i; - } - - eval('for(j in this){\nstr2+=j;\n}'); - - return (str1 === str2); - - x = 1; - y = 2; -} - -if(!f()){ - $ERROR("#1: scope chain must contain same objects in the same order as the calling context"); -} - diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/S10.2_A1.1_T1.js b/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/S10.2_A1.1_T1.js deleted file mode 100644 index cf100d15c..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/S10.2_A1.1_T1.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.2_A1.1_T1; - * @section: 10.2; - * @assertion: Every function call enters a new execution context; - * @description: Sequence of function calls; -*/ - -var y; - -function f(){ - var x; - - if(x === undefined) { - x = 0; - } else { - x = 1; - } - - return x; -} - -y = f(); -y = f(); - -if(!(y === 0)){ - $ERROR("#1: Sequenced function calls shares execution context"); -} diff --git a/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/S10.2_A1.1_T2.js b/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/S10.2_A1.1_T2.js deleted file mode 100644 index 46e0380e2..000000000 --- a/tests/ES3/Conformance/10_Execution_Contexts/10.2_Entering_An_Execution_Context/S10.2_A1.1_T2.js +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S10.2_A1.1_T2; - * @section: 10.2; - * @assertion: Every function call enters a new execution context; - * @description: Recursive function call; -*/ - -var y; - -function f(a){ - var x; - - if (a === 1) - return x; - else { - if(x === undefined) { - x = 0; - } else { - x = 1; - } - return f(1); - } -} - -y = f(0); - -if(!(y === undefined)){ - $ERROR("#1: Recursive function calls shares execution context"); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A1.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A1.js deleted file mode 100644 index 39a2df261..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A1.js +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.10.1_A1; -* @section: 11.10.1; -* @assertion: White Space and Line Terminator between BitwiseANDExpression and "&" or between "&" and EqualityExpression are allowed; -* @description: Checking uses eval; -*/ - -//CHECK#1 -if ((eval("1\u0009&\u00091")) !== 1) { - $ERROR('#1: (1\\u0009&\\u00091) === 1'); -} - -//CHECK#2 -if ((eval("1\u000B&\u000B1")) !== 1) { - $ERROR('#2: (1\\u000B&\\u000B1) === 1'); -} - -//CHECK#3 -if ((eval("1\u000C&\u000C1")) !== 1) { - $ERROR('#3: (1\\u000C&\\u000C1) === 1'); -} - -//CHECK#4 -if ((eval("1\u0020&\u00201")) !== 1) { - $ERROR('#4: (1\\u0020&\\u00201) === 1'); -} - -//CHECK#5 -if ((eval("1\u00A0&\u00A01")) !== 1) { - $ERROR('#5: (1\\u00A0&\\u00A01) === 1'); -} - -//CHECK#6 -if ((eval("1\u000A&\u000A1")) !== 1) { - $ERROR('#6: (1\\u000A&\\u000A1) === 1'); -} - -//CHECK#7 -if ((eval("1\u000D&\u000D1")) !== 1) { - $ERROR('#7: (1\\u000D&\\u000D1) === 1'); -} - -//CHECK#8 -if ((eval("1\u2028&\u20281")) !== 1) { - $ERROR('#8: (1\\u2028&\\u20281) === 1'); -} - -//CHECK#9 -if ((eval("1\u2029&\u20291")) !== 1) { - $ERROR('#9: (1\\u2029&\\u20291) === 1'); -} - - -//CHECK#10 -if ((eval("1\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029&\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20291")) !== 1) { - $ERROR('#10: (1\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029&\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20291) === 1'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A2.1_T1.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A2.1_T1.js deleted file mode 100644 index 0cb8479a8..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A2.1_T1.js +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.10.1_A2.1_T1; - * @section: 11.10.1; - * @assertion: Operator x & y uses GetValue; - * @description: Either Type is not Reference or GetBase is not null; -*/ - -//CHECK#1 -if ((1 & 1) !== 1) { - $ERROR('#1: (1 & 1) === 1. Actual: ' + ((1 & 1))); -} - -//CHECK#2 -var x = 1; -if ((x & 1) !== 1) { - $ERROR('#2: var x = 1; (x & 1) === 1. Actual: ' + ((x & 1))); -} - -//CHECK#3 -var y = 1; -if ((1 & y) !== 1) { - $ERROR('#3: var y = 1; (1 & y) === 1. Actual: ' + ((1 & y))); -} - -//CHECK#4 -var x = 1; -var y = 1; -if ((x & y) !== 1) { - $ERROR('#4: var x = 1; var y = 1; (x & y) === 1. Actual: ' + ((x & y))); -} - -//CHECK#5 -var objectx = new Object(); -var objecty = new Object(); -objectx.prop = 1; -objecty.prop = 1; -if ((objectx.prop & objecty.prop) !== 1) { - $ERROR('#5: var objectx = new Object(); var objecty = new Object(); objectx.prop = 1; objecty.prop = 1; (objectx.prop & objecty.prop) === 1. Actual: ' + ((objectx.prop & objecty.prop))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A2.1_T2.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A2.1_T2.js deleted file mode 100644 index 6863c2c8a..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A2.1_T2.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.10.1_A2.1_T2; - * @section: 11.10.1; - * @assertion: Operator x & y uses GetValue; - * @description: If GetBase(x) is null, throw ReferenceError; -*/ - -//CHECK#1 -try { - x & 1; - $ERROR('#1.1: x & 1 throw ReferenceError. Actual: ' + (x & 1)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: x & 1 throw ReferenceError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A2.1_T3.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A2.1_T3.js deleted file mode 100644 index fb06c6dc2..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A2.1_T3.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.10.1_A2.1_T3; - * @section: 11.10.1; - * @assertion: Operator x & y uses GetValue; - * @description: If GetBase(y) is null, throw ReferenceError; -*/ - -//CHECK#1 -try { - 1 & y; - $ERROR('#1.1: 1 & y throw ReferenceError. Actual: ' + (1 & y)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: 1 & y throw ReferenceError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A2.2_T1.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A2.2_T1.js deleted file mode 100644 index 5f1e0ab00..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A2.2_T1.js +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.10.1_A2.2_T1; - * @section: 11.10.1, 8.6.2.6; - * @assertion: Operator x & y uses [[Default Value]]; - * @description: If Type(value) is Object, evaluate ToPrimitive(value, Number); - */ - -//CHECK#1 -if (({valueOf: function() {return 1}} & 1) !== 1) { - $ERROR('#1: ({valueOf: function() {return 1}} & 1) === 1. Actual: ' + (({valueOf: function() {return 1}} & 1))); -} - -//CHECK#2 -if (({valueOf: function() {return 1}, toString: function() {return 0}} & 1) !== 1) { - $ERROR('#2: ({valueOf: function() {return 1}, toString: function() {return 0}} & 1) === 1. Actual: ' + (({valueOf: function() {return 1}, toString: function() {return 0}} & 1))); -} - -//CHECK#3 -if (({valueOf: function() {return 1}, toString: function() {return {}}} & 1) !== 1) { - $ERROR('#3: ({valueOf: function() {return 1}, toString: function() {return {}}} & 1) === 1. Actual: ' + (({valueOf: function() {return 1}, toString: function() {return {}}} & 1))); -} - -//CHECK#4 -try { - if (({valueOf: function() {return 1}, toString: function() {throw "error"}} & 1) !== 1) { - $ERROR('#4.1: ({valueOf: function() {return 1}, toString: function() {throw "error"}} & 1) === 1. Actual: ' + (({valueOf: function() {return 1}, toString: function() {throw "error"}} & 1))); - } -} -catch (e) { - if (e === "error") { - $ERROR('#4.2: ({valueOf: function() {return 1}, toString: function() {throw "error"}} & 1) not throw "error"'); - } else { - $ERROR('#4.3: ({valueOf: function() {return 1}, toString: function() {throw "error"}} & 1) not throw Error. Actual: ' + (e)); - } -} - -//CHECK#5 -if ((1 & {toString: function() {return 1}}) !== 1) { - $ERROR('#5.1: (1 & {toString: function() {return 1}}) === 1. Actual: ' + ((1 & {toString: function() {return 1}}))); -} - -//CHECK#6 -if ((1 & {valueOf: function() {return {}}, toString: function() {return 1}}) !== 1) { - $ERROR('#6: (1 & {valueOf: function() {return {}}, toString: function() {return 1}}) === 1. Actual: ' + ((1 & {valueOf: function() {return {}}, toString: function() {return 1}}))); -} - -//CHECK#7 -try { - 1 & {valueOf: function() {throw "error"}, toString: function() {return 1}}; - $ERROR('#7.1: 1 & {valueOf: function() {throw "error"}, toString: function() {return 1}} throw "error". Actual: ' + (1 & {valueOf: function() {throw "error"}, toString: function() {return 1}})); -} -catch (e) { - if (e !== "error") { - $ERROR('#7.2: 1 & {valueOf: function() {throw "error"}, toString: function() {return 1}} throw "error". Actual: ' + (e)); - } -} - -//CHECK#8 -try { - 1 & {valueOf: function() {return {}}, toString: function() {return {}}}; - $ERROR('#8.1: 1 & {valueOf: function() {return {}}, toString: function() {return {}}} throw TypeError. Actual: ' + (1 & {valueOf: function() {return {}}, toString: function() {return {}}})); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#8.2: 1 & {valueOf: function() {return {}}, toString: function() {return {}}} throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A2.3_T1.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A2.3_T1.js deleted file mode 100644 index 5d226b3a8..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A2.3_T1.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.10.1_A2.3_T1; - * @section: 11.10.1; - * @assertion: ToInt32(first expression) is called first, and then ToInt32(second expression); - * @description: Checking by using "throw"; -*/ - -//CHECK#1 -var x = { valueOf: function () { throw "x"; } }; -var y = { valueOf: function () { throw "y"; } }; -try { - x & y; - $ERROR('#1.1: var x = { valueOf: function () { throw "x"; } }; var y = { valueOf: function () { throw "y"; } }; x & y throw "x". Actual: ' + (x & y)); -} catch (e) { - if (e === "y") { - $ERROR('#1.2: ToInt32(first expression) is called first, and then ToInt32(second expression)'); - } else { - if (e !== "x") { - $ERROR('#1.3: var x = { valueOf: function () { throw "x"; } }; var y = { valueOf: function () { throw "y"; } }; x & y throw "x". Actual: ' + (e)); - } - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A2.4_T1.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A2.4_T1.js deleted file mode 100644 index 73bc10536..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A2.4_T1.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.10.1_A2.4_T1; - * @section: 11.10.1; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with "="; -*/ - -//CHECK#1 -var x = 0; -if (((x = 1) & x) !== 1) { - $ERROR('#1: var x = 0; ((x = 1) & x) === 1. Actual: ' + (((x = 1) & x))); -} - -//CHECK#2 -var x = 0; -if ((x & (x = 1)) !== 0) { - $ERROR('#2: var x = 0; (x & (x = 1)) === 0. Actual: ' + ((x & (x = 1)))); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A2.4_T2.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A2.4_T2.js deleted file mode 100644 index 44ad93487..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A2.4_T2.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.10.1_A2.4_T2; - * @section: 11.10.1; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with "throw"; -*/ - -//CHECK#1 -var x = function () { throw "x"; }; -var y = function () { throw "y"; }; -try { - x() & y(); - $ERROR('#1.1: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() & y() throw "x". Actual: ' + (x() & y())); -} catch (e) { - if (e === "y") { - $ERROR('#1.2: First expression is evaluated first, and then second expression'); - } else { - if (e !== "x") { - $ERROR('#1.3: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() & y() throw "x". Actual: ' + (e)); - } - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A2.4_T3.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A2.4_T3.js deleted file mode 100644 index 4abf60cc6..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A2.4_T3.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.10.1_A2.4_T3; - * @section: 11.10.1; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with undeclarated variables; -*/ - -//CHECK#1 -try { - x & (x = 1); - $ERROR('#1.1: x & (x = 1) throw ReferenceError. Actual: ' + (x & (x = 1))); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: x & (x = 1) throw ReferenceError. Actual: ' + (e)); - } -} - -//CHECK#2 -if (((y = 1) & y) !== 1) { - $ERROR('#2: ((y = 1) & y) === 1. Actual: ' + (((y = 1) & y))); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A3_T1.1.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A3_T1.1.js deleted file mode 100644 index 1153fa443..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A3_T1.1.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.10.1_A3_T1.1; - * @section: 11.10.1; - * @assertion: Operator x & y returns ToNumber(x) & ToNumber(y); - * @description: Type(x) and Type(y) are primitive boolean and Boolean object; - */ - -//CHECK#1 -if ((true & true) !== 1) { - $ERROR('#1: (true & true) === 1. Actual: ' + ((true & true))); -} - -//CHECK#2 -if ((new Boolean(true) & true) !== 1) { - $ERROR('#2: (new Boolean(true) & true) === 1. Actual: ' + ((new Boolean(true) & true))); -} - -//CHECK#3 -if ((true & new Boolean(true)) !== 1) { - $ERROR('#3: (true & new Boolean(true)) === 1. Actual: ' + ((true & new Boolean(true)))); -} - -//CHECK#4 -if ((new Boolean(true) & new Boolean(true)) !== 1) { - $ERROR('#4: (new Boolean(true) & new Boolean(true)) === 1. Actual: ' + ((new Boolean(true) & new Boolean(true)))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A3_T1.2.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A3_T1.2.js deleted file mode 100644 index 38d434616..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A3_T1.2.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.10.1_A3_T1.2; - * @section: 11.10.1; - * @assertion: Operator x & y returns ToNumber(x) & ToNumber(y); - * @description: Type(x) and Type(y) are primitive number and Number object; -*/ - -//CHECK#1 -if ((1 & 1) !== 1) { - $ERROR('#1: (1 & 1) === 1. Actual: ' + ((1 & 1))); -} - -//CHECK#2 -if ((new Number(1) & 1) !== 1) { - $ERROR('#2: (new Number(1) & 1) === 1. Actual: ' + ((new Number(1) & 1))); -} - -//CHECK#3 -if ((1 & new Number(1)) !== 1) { - $ERROR('#3: (1 & new Number(1)) === 1. Actual: ' + ((1 & new Number(1)))); -} - -//CHECK#4 -if ((new Number(1) & new Number(1)) !== 1) { - $ERROR('#4: (new Number(1) & new Number(1)) === 1. Actual: ' + ((new Number(1) & new Number(1)))); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A3_T1.3.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A3_T1.3.js deleted file mode 100644 index 67865a4c0..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A3_T1.3.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.10.1_A3_T1.3; - * @section: 11.10.1; - * @assertion: Operator x & y returns ToNumber(x) & ToNumber(y); - * @description: Type(x) and Type(y) are primitive string and String object; -*/ - -//CHECK#1 -if (("1" & "1") !== 1) { - $ERROR('#1: ("1" & "1") === 1. Actual: ' + (("1" & "1"))); -} - -//CHECK#2 -if ((new String("1") & "1") !== 1) { - $ERROR('#2: (new String("1") & "1") === 1. Actual: ' + ((new String("1") & "1"))); -} - -//CHECK#3 -if (("1" & new String("1")) !== 1) { - $ERROR('#3: ("1" & new String("1")) === 1. Actual: ' + (("1" & new String("1")))); -} - -//CHECK#4 -if ((new String("1") & new String("1")) !== 1) { - $ERROR('#4: (new String("1") & new String("1")) === 1. Actual: ' + ((new String("1") & new String("1")))); -} - -//CHECK#5 -if (("x" & "1") !== 0) { - $ERROR('#5: ("x" & "1") === 0. Actual: ' + (("x" & "1"))); -} - -//CHECK#6 -if (("1" & "x") !== 0) { - $ERROR('#6: ("1" & "x") === 0. Actual: ' + (("1" & "x"))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A3_T1.4.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A3_T1.4.js deleted file mode 100644 index 0b8ba8776..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A3_T1.4.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.10.1_A3_T1.4; - * @section: 11.10.1; - * @assertion: Operator x & y returns ToNumber(x) & ToNumber(y); - * @description: Type(x) and Type(y) are null and undefined; -*/ - -//CHECK#1 -if ((null & undefined) !== 0) { - $ERROR('#1: (null & undefined) === 0. Actual: ' + ((null & undefined))); -} - -//CHECK#2 -if ((undefined & null) !== 0) { - $ERROR('#2: (undefined & null) === 0. Actual: ' + ((undefined & null))); -} - -//CHECK#3 -if ((undefined & undefined) !== 0) { - $ERROR('#3: (undefined & undefined) === 0. Actual: ' + ((undefined & undefined))); -} - -//CHECK#4 -if ((null & null) !== 0) { - $ERROR('#4: (null & null) === 0. Actual: ' + ((null & null))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A3_T1.5.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A3_T1.5.js deleted file mode 100644 index 43820e22d..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A3_T1.5.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.10.1_A3_T1.5; - * @section: 11.10.1; - * @assertion: Operator x & y returns ToNumber(x) & ToNumber(y); - * @description: Type(x) and Type(y) are Object object and Function object; - */ - -//CHECK#1 -if (({} & function(){return 1}) !== 0) { - $ERROR('#1: ({} & function(){return 1}) === 0. Actual: ' + (({} & function(){return 1}))); -} - -//CHECK#2 -if ((function(){return 1} & {}) !== 0) { - $ERROR('#2: (function(){return 1} & {}) === 0. Actual: ' + ((function(){return 1} & {}))); -} - -//CHECK#3 -if ((function(){return 1} & function(){return 1}) !== 0) { - $ERROR('#3: (function(){return 1} & function(){return 1}) === 0. Actual: ' + ((function(){return 1} & function(){return 1}))); -} - -//CHECK#4 -if (({} & {}) !== 0) { - $ERROR('#4: ({} & {}) === 0. Actual: ' + (({} & {}))); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A3_T2.1.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A3_T2.1.js deleted file mode 100644 index 2955d2bdf..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A3_T2.1.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.10.1_A3_T2.1; - * @section: 11.10.1; - * @assertion: Operator x & y returns ToNumber(x) & ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Boolean (primitive and object); - */ - -//CHECK#1 -if ((true & 1) !== 1) { - $ERROR('#1: (true & 1) === 1. Actual: ' + ((true & 1))); -} - -//CHECK#2 -if ((1 & true) !== 1) { - $ERROR('#2: (1 & true) === 1. Actual: ' + ((1 & true))); -} - -//CHECK#3 -if ((new Boolean(true) & 1) !== 1) { - $ERROR('#3: (new Boolean(true) & 1) === 1. Actual: ' + ((new Boolean(true) & 1))); -} - -//CHECK#4 -if ((1 & new Boolean(true)) !== 1) { - $ERROR('#4: (1 & new Boolean(true)) === 1. Actual: ' + ((1 & new Boolean(true)))); -} - -//CHECK#5 -if ((true & new Number(1)) !== 1) { - $ERROR('#5: (true & new Number(1)) === 1. Actual: ' + ((true & new Number(1)))); -} - -//CHECK#6 -if ((new Number(1) & true) !== 1) { - $ERROR('#6: (new Number(1) & true) === 1. Actual: ' + ((new Number(1) & true))); -} - -//CHECK#7 -if ((new Boolean(true) & new Number(1)) !== 1) { - $ERROR('#7: (new Boolean(true) & new Number(1)) === 1. Actual: ' + ((new Boolean(true) & new Number(1)))); -} - -//CHECK#8 -if ((new Number(1) & new Boolean(true)) !== 1) { - $ERROR('#8: (new Number(1) & new Boolean(true)) === 1. Actual: ' + ((new Number(1) & new Boolean(true)))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A3_T2.2.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A3_T2.2.js deleted file mode 100644 index 92f7dc058..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A3_T2.2.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.10.1_A3_T2.2; - * @section: 11.10.1; - * @assertion: Operator x & y returns ToNumber(x) & ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and String (primitive and object); -*/ - -//CHECK#1 -if (("1" & 1) !== 1) { - $ERROR('#1: ("1" & 1) === 1. Actual: ' + (("1" & 1))); -} - -//CHECK#2 -if ((1 & "1") !== 1) { - $ERROR('#2: (1 & "1") === 1. Actual: ' + ((1 & "1"))); -} - -//CHECK#3 -if ((new String("1") & 1) !== 1) { - $ERROR('#3: (new String("1") & 1) === 1. Actual: ' + ((new String("1") & 1))); -} - -//CHECK#4 -if ((1 & new String("1")) !== 1) { - $ERROR('#4: (1 & new String("1")) === 1. Actual: ' + ((1 & new String("1")))); -} - -//CHECK#5 -if (("1" & new Number(1)) !== 1) { - $ERROR('#5: ("1" & new Number(1)) === 1. Actual: ' + (("1" & new Number(1)))); -} - -//CHECK#6 -if ((new Number(1) & "1") !== 1) { - $ERROR('#6: (new Number(1) & "1") === 1. Actual: ' + ((new Number(1) & "1"))); -} - -//CHECK#7 -if ((new String("1") & new Number(1)) !== 1) { - $ERROR('#7: (new String("1") & new Number(1)) === 1. Actual: ' + ((new String("1") & new Number(1)))); -} - -//CHECK#8 -if ((new Number(1) & new String("1")) !== 1) { - $ERROR('#8: (new Number(1) & new String("1")) === 1. Actual: ' + ((new Number(1) & new String("1")))); -} - -//CHECK#9 -if (("x" & 1) !== 0) { - $ERROR('#9: ("x" & 1) === 0. Actual: ' + (("x" & 1))); -} - -//CHECK#10 -if ((1 & "x") !== 0) { - $ERROR('#10: (1 & "x") === 0. Actual: ' + ((1 & "x"))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A3_T2.3.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A3_T2.3.js deleted file mode 100644 index 2e7acb90d..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A3_T2.3.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.10.1_A3_T2.3; - * @section: 11.10.1; - * @assertion: Operator x & y returns ToNumber(x) & ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Null; - */ - -//CHECK#1 -if ((1 & null) !== 0) { - $ERROR('#1: (1 & null) === 0. Actual: ' + ((1 & null))); -} - -//CHECK#2 -if ((null & 1) !== 0) { - $ERROR('#2: (null & 1) === 0. Actual: ' + ((null & 1))); -} - -//CHECK#3 -if ((new Number(1) & null) !== 0) { - $ERROR('#3: (new Number(1) & null) === 0. Actual: ' + ((new Number(1) & null))); -} - -//CHECK#4 -if ((null & new Number(1)) !== 0) { - $ERROR('#4: (null & new Number(1)) === 0. Actual: ' + ((null & new Number(1)))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A3_T2.4.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A3_T2.4.js deleted file mode 100644 index bf7529670..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A3_T2.4.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.10.1_A3_T2.4; - * @section: 11.10.1; - * @assertion: Operator x & y returns ToNumber(x) & ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Undefined; - */ - -//CHECK#1 -if ((1 & undefined) !== 0) { - $ERROR('#1: (1 & undefined) === 0. Actual: ' + ((1 & undefined))); -} - -//CHECK#2 -if ((undefined & 1) !== 0) { - $ERROR('#2: (undefined & 1) === 0. Actual: ' + ((undefined & 1))); -} - -//CHECK#3 -if ((new Number(1) & undefined) !== 0) { - $ERROR('#3: (new Number(1) & undefined) === 0. Actual: ' + ((new Number(1) & undefined))); -} - -//CHECK#4 -if ((undefined & new Number(1)) !== 0) { - $ERROR('#4: (undefined & new Number(1)) === 0. Actual: ' + ((undefined & new Number(1)))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A3_T2.5.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A3_T2.5.js deleted file mode 100644 index 6ec95b067..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A3_T2.5.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.10.1_A3_T2.5; - * @section: 11.10.1; - * @assertion: Operator x & y returns ToNumber(x) & ToNumber(y); - * @description: Type(x) us different from Type(y) and both types are String (primitive or object) or Boolean (primitive and object); -*/ - -//CHECK#1 -if ((true & "1") !== 1) { - $ERROR('#1: (true & "1") === 1. Actual: ' + ((true & "1"))); -} - -//CHECK#2 -if (("1" & true) !== 1) { - $ERROR('#2: ("1" & true) === 1. Actual: ' + (("1" & true))); -} - -//CHECK#3 -if ((new Boolean(true) & "1") !== 1) { - $ERROR('#3: (new Boolean(true) & "1") === 1. Actual: ' + ((new Boolean(true) & "1"))); -} - -//CHECK#4 -if (("1" & new Boolean(true)) !== 1) { - $ERROR('#4: ("1" & new Boolean(true)) === 1. Actual: ' + (("1" & new Boolean(true)))); -} - -//CHECK#5 -if ((true & new String("1")) !== 1) { - $ERROR('#5: (true & new String("1")) === 1. Actual: ' + ((true & new String("1")))); -} - -//CHECK#6 -if ((new String("1") & true) !== 1) { - $ERROR('#6: (new String("1") & true) === 1. Actual: ' + ((new String("1") & true))); -} - -//CHECK#7 -if ((new Boolean(true) & new String("1")) !== 1) { - $ERROR('#7: (new Boolean(true) & new String("1")) === 1. Actual: ' + ((new Boolean(true) & new String("1")))); -} - -//CHECK#8 -if ((new String("1") & new Boolean(true)) !== 1) { - $ERROR('#8: (new String("1") & new Boolean(true)) === 1. Actual: ' + ((new String("1") & new Boolean(true)))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A3_T2.6.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A3_T2.6.js deleted file mode 100644 index a9d0ac863..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A3_T2.6.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.10.1_A3_T2.6; - * @section: 11.10.1; - * @assertion: Operator x & y returns ToNumber(x) & ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between String (primitive or object) and Undefined; - */ - -//CHECK#1 -if (("1" & undefined) !== 0) { - $ERROR('#1: ("1" & undefined) === 0. Actual: ' + (("1" & undefined))); -} - -//CHECK#2 -if ((undefined & "1") !== 0) { - $ERROR('#2: (undefined & "1") === 0. Actual: ' + ((undefined & "1"))); -} - -//CHECK#3 -if ((new String("1") & undefined) !== 0) { - $ERROR('#3: (new String("1") & undefined) === 0. Actual: ' + ((new String("1") & undefined))); -} - -//CHECK#4 -if ((undefined & new String("1")) !== 0) { - $ERROR('#4: (undefined & new String("1")) === 0. Actual: ' + ((undefined & new String("1")))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A3_T2.7.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A3_T2.7.js deleted file mode 100644 index 83c8fc5fd..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A3_T2.7.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.10.1_A3_T2.7; - * @section: 11.10.1; - * @assertion: Operator x & y returns ToNumber(x) & ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between String (primitive or object) and Null; - */ - -//CHECK#1 -if (("1" & null) !== 0) { - $ERROR('#1: ("1" & null) === 0. Actual: ' + (("1" & null))); -} - -//CHECK#2 -if ((null & "1") !== 0) { - $ERROR('#2: (null & "1") === 0. Actual: ' + ((null & "1"))); -} - -//CHECK#3 -if ((new String("1") & null) !== 0) { - $ERROR('#3: (new String("1") & null) === 0. Actual: ' + ((new String("1") & null))); -} - -//CHECK#4 -if ((null & new String("1")) !== 0) { - $ERROR('#4: (null & new String("1")) === 0. Actual: ' + ((null & new String("1")))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A3_T2.8.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A3_T2.8.js deleted file mode 100644 index 24b70fff8..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A3_T2.8.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.10.1_A3_T2.8; - * @section: 11.10.1; - * @assertion: Operator x & y returns ToNumber(x) & ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Undefined; - */ - -//CHECK#1 -if ((true & undefined) !== 0) { - $ERROR('#1: (true & undefined) === 0. Actual: ' + ((true & undefined))); -} - -//CHECK#2 -if ((undefined & true) !== 0) { - $ERROR('#2: (undefined & true) === 0. Actual: ' + ((undefined & true))); -} - -//CHECK#3 -if ((new Boolean(true) & undefined) !== 0) { - $ERROR('#3: (new Boolean(true) & undefined) === 0. Actual: ' + ((new Boolean(true) & undefined))); -} - -//CHECK#4 -if ((undefined & new Boolean(true)) !== 0) { - $ERROR('#4: (undefined & new Boolean(true)) === 0. Actual: ' + ((undefined & new Boolean(true)))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A3_T2.9.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A3_T2.9.js deleted file mode 100644 index d90a0d253..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.1_AND_Operator/S11.10.1_A3_T2.9.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.10.1_A3_T2.9; - * @section: 11.10.1; - * @assertion: Operator x & y returns ToNumber(x) & ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Null; - */ - -//CHECK#1 -if ((true & null) !== 0) { - $ERROR('#1: (true & null) === 0. Actual: ' + ((true & null))); -} - -//CHECK#2 -if ((null & true) !== 0) { - $ERROR('#2: (null & true) === 0. Actual: ' + ((null & true))); -} - -//CHECK#3 -if ((new Boolean(true) & null) !== 0) { - $ERROR('#3: (new Boolean(true) & null) === 0. Actual: ' + ((new Boolean(true) & null))); -} - -//CHECK#4 -if ((null & new Boolean(true)) !== 0) { - $ERROR('#4: (null & new Boolean(true)) === 0. Actual: ' + ((null & new Boolean(true)))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A1.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A1.js deleted file mode 100644 index 92564d01f..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A1.js +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.10.2_A1; -* @section: 11.10.2; -* @assertion: White Space and Line Terminator between BitwiseXORExpression and "^" or between "^" and BitwiseANDExpression are allowed; -* @description: The check uses eval; -*/ - -//CHECK#1 -if ((eval("1\u0009^\u00091")) !== 0) { - $ERROR('#1: (1\\u0009^\\u00091) === 0'); -} - -//CHECK#2 -if ((eval("1\u000B^\u000B1")) !== 0) { - $ERROR('#2: (1\\u000B^\\u000B1) === 0'); -} - -//CHECK#3 -if ((eval("1\u000C^\u000C1")) !== 0) { - $ERROR('#3: (1\\u000C^\\u000C1) === 0'); -} - -//CHECK#4 -if ((eval("1\u0020^\u00201")) !== 0) { - $ERROR('#4: (1\\u0020^\\u00201) === 0'); -} - -//CHECK#5 -if ((eval("1\u00A0^\u00A01")) !== 0) { - $ERROR('#5: (1\\u00A0^\\u00A01) === 0'); -} - -//CHECK#6 -if ((eval("1\u000A^\u000A1")) !== 0) { - $ERROR('#6: (1\\u000A^\\u000A1) === 0'); -} - -//CHECK#7 -if ((eval("1\u000D^\u000D1")) !== 0) { - $ERROR('#7: (1\\u000D^\\u000D1) === 0'); -} - -//CHECK#8 -if ((eval("1\u2028^\u20281")) !== 0) { - $ERROR('#8: (1\\u2028^\\u20281) === 0'); -} - -//CHECK#9 -if ((eval("1\u2029^\u20291")) !== 0) { - $ERROR('#9: (1\\u2029^\\u20291) === 0'); -} - - -//CHECK#10 -if ((eval("1\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029^\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20291")) !== 0) { - $ERROR('#10: (1\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029^\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20291) === 0'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A2.1_T1.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A2.1_T1.js deleted file mode 100644 index 5fa165284..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A2.1_T1.js +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.10.2_A2.1_T1; - * @section: 11.10.2; - * @assertion: Operator x ^ y uses GetValue; - * @description: Either Type is not Reference or GetBase is not null; -*/ - -//CHECK#1 -if ((1 ^ 1) !== 0) { - $ERROR('#1: (1 ^ 1) === 0. Actual: ' + ((1 ^ 1))); -} - -//CHECK#2 -var x = 1; -if ((x ^ 1) !== 0) { - $ERROR('#2: var x = 1; (x ^ 1) === 0. Actual: ' + ((x ^ 1))); -} - -//CHECK#3 -var y = 1; -if ((1 ^ y) !== 0) { - $ERROR('#3: var y = 1; (1 ^ y) === 0. Actual: ' + ((1 ^ y))); -} - -//CHECK#4 -var x = 1; -var y = 1; -if ((x ^ y) !== 0) { - $ERROR('#4: var x = 1; var y = 1; (x ^ y) === 0. Actual: ' + ((x ^ y))); -} - -//CHECK#5 -var objectx = new Object(); -var objecty = new Object(); -objectx.prop = 1; -objecty.prop = 1; -if ((objectx.prop ^ objecty.prop) !== 0) { - $ERROR('#5: var objectx = new Object(); var objecty = new Object(); objectx.prop = 1; objecty.prop = 1; (objectx.prop ^ objecty.prop) === 0. Actual: ' + ((objectx.prop ^ objecty.prop))); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A2.1_T2.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A2.1_T2.js deleted file mode 100644 index cb735e892..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A2.1_T2.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.10.2_A2.1_T2; - * @section: 11.10.2; - * @assertion: Operator x ^ y uses GetValue; - * @description: If GetBase(x) is null, throw ReferenceError; -*/ - - -//CHECK#1 -try { - x ^ 1; - $ERROR('#1.1: x ^ 1 throw ReferenceError. Actual: ' + (x ^ 1)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: x ^ 1 throw ReferenceError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A2.1_T3.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A2.1_T3.js deleted file mode 100644 index c1dc39da4..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A2.1_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.10.2_A2.1_T3; - * @section: 11.10.2; - * @assertion: Operator x ^ y uses GetValue; - * @description: If GetBase(y) is null, throw ReferenceError; -*/ - -//CHECK#1 -try { - 1 ^ y; - $ERROR('#1.1: 1 ^ y throw ReferenceError. Actual: ' + (1 ^ y)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: 1 ^ y throw ReferenceError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A2.2_T1.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A2.2_T1.js deleted file mode 100644 index e81202462..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A2.2_T1.js +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.10.2_A2.2_T1; - * @section: 11.10.2, 8.6.2.6; - * @assertion: Operator x ^ y uses [[Default Value]]; - * @description: If Type(value) is Object, evaluate ToPrimitive(value, Number); - */ - - -//CHECK#1 -if (({valueOf: function() {return 1}} ^ 1) !== 0) { - $ERROR('#1: ({valueOf: function() {return 1}} ^ 1) === 0. Actual: ' + (({valueOf: function() {return 1}} ^ 1))); -} - -//CHECK#2 -if (({valueOf: function() {return 1}, toString: function() {return 0}} ^ 1) !== 0) { - $ERROR('#2: ({valueOf: function() {return 1}, toString: function() {return 0}} ^ 1) === 0. Actual: ' + (({valueOf: function() {return 1}, toString: function() {return 0}} ^ 1))); -} - -//CHECK#3 -if (({valueOf: function() {return 1}, toString: function() {return {}}} ^ 1) !== 0) { - $ERROR('#3: ({valueOf: function() {return 1}, toString: function() {return {}}} ^ 1) === 0. Actual: ' + (({valueOf: function() {return 1}, toString: function() {return {}}} ^ 1))); -} - -//CHECK#4 -try { - if (({valueOf: function() {return 1}, toString: function() {throw "error"}} ^ 1) !== 0) { - $ERROR('#4.1: ({valueOf: function() {return 1}, toString: function() {throw "error"}} ^ 1) === 0. Actual: ' + (({valueOf: function() {return 1}, toString: function() {throw "error"}} ^ 1))); - } -} -catch (e) { - if (e === "error") { - $ERROR('#4.2: ({valueOf: function() {return 1}, toString: function() {throw "error"}} ^ 1) not throw "error"'); - } else { - $ERROR('#4.3: ({valueOf: function() {return 1}, toString: function() {throw "error"}} ^ 1) not throw Error. Actual: ' + (e)); - } -} - -//CHECK#5 -if ((1 ^ {toString: function() {return 1}}) !== 0) { - $ERROR('#5: (1 ^ {toString: function() {return 1}}) === 0. Actual: ' + ((1 ^ {toString: function() {return 1}}))); -} - -//CHECK#6 -if ((1 ^ {valueOf: function() {return {}}, toString: function() {return 1}}) !== 0) { - $ERROR('#6: (1 ^ {valueOf: function() {return {}}, toString: function() {return 1}}) === 0. Actual: ' + ((1 ^ {valueOf: function() {return {}}, toString: function() {return 1}}))); -} - -//CHECK#7 -try { - 1 ^ {valueOf: function() {throw "error"}, toString: function() {return 1}}; - $ERROR('#7.1: 1 ^ {valueOf: function() {throw "error"}, toString: function() {return 1}} throw "error". Actual: ' + (1 ^ {valueOf: function() {throw "error"}, toString: function() {return 1}})); -} -catch (e) { - if (e !== "error") { - $ERROR('#7.2: 1 ^ {valueOf: function() {throw "error"}, toString: function() {return 1}} throw "error". Actual: ' + (e)); - } -} - -//CHECK#8 -try { - 1 ^ {valueOf: function() {return {}}, toString: function() {return {}}}; - $ERROR('#8.1: 1 ^ {valueOf: function() {return {}}, toString: function() {return {}}} throw TypeError. Actual: ' + (1 ^ {valueOf: function() {return {}}, toString: function() {return {}}})); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#8.2: 1 ^ {valueOf: function() {return {}}, toString: function() {return {}}} throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A2.3_T1.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A2.3_T1.js deleted file mode 100644 index 9f615d22d..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A2.3_T1.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.10.2_A2.3_T1; - * @section: 11.10.2; - * @assertion: ToInt32(first expression) is called first, and then ToInt32(second expression); - * @description: Checking with "throw"; -*/ - -//CHECK#1 -var x = { valueOf: function () { throw "x"; } }; -var y = { valueOf: function () { throw "y"; } }; -try { - x ^ y; - $ERROR('#1.1: var x = { valueOf: function () { throw "x"; } }; var y = { valueOf: function () { throw "y"; } }; x ^ y throw "x". Actual: ' + (x ^ y)); -} catch (e) { - if (e === "y") { - $ERROR('#1.2: ToInt32(first expression) is called first, and then ToInt32(second expression)'); - } else { - if (e !== "x") { - $ERROR('#1.3: var x = { valueOf: function () { throw "x"; } }; var y = { valueOf: function () { throw "y"; } }; x ^ y throw "x". Actual: ' + (e)); - } - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A2.4_T1.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A2.4_T1.js deleted file mode 100644 index 54fd2067f..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A2.4_T1.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.10.2_A2.4_T1; - * @section: 11.10.2; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with "="; -*/ - -//CHECK#1 -var x = 1; -if (((x = 0) ^ x) !== 0) { - $ERROR('#1: var x = 0; ((x = 1) ^ x) === 0. Actual: ' + (((x = 1) ^ x))); -} - -//CHECK#2 -var x = 0; -if ((x ^ (x = 1)) !== 1) { - $ERROR('#2: var x = 0; (x ^ (x = 1)) === 1. Actual: ' + ((x ^ (x = 1)))); -} - - diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A2.4_T2.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A2.4_T2.js deleted file mode 100644 index bf9bef30b..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A2.4_T2.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.10.2_A2.4_T2; - * @section: 11.10.2; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with "throw"; -*/ - -//CHECK#1 -var x = function () { throw "x"; }; -var y = function () { throw "y"; }; -try { - x() ^ y(); - $ERROR('#1.1: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() ^ y() throw "x". Actual: ' + (x() ^ y())); -} catch (e) { - if (e === "y") { - $ERROR('#1.2: First expression is evaluated first, and then second expression'); - } else { - if (e !== "x") { - $ERROR('#1.3: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() ^ y() throw "x". Actual: ' + (e)); - } - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A2.4_T3.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A2.4_T3.js deleted file mode 100644 index f6a9a4d61..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A2.4_T3.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.10.2_A2.4_T3; - * @section: 11.10.2; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with undeclarated variables; -*/ - -//CHECK#1 -try { - x ^ (x = 1); - $ERROR('#1.1: x ^ (x = 1) throw ReferenceError. Actual: ' + (x ^ (x = 1))); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: x ^ (x = 1) throw ReferenceError. Actual: ' + (e)); - } -} - -//CHECK#2 -if (((y = 1) ^ y) !== 0) { - $ERROR('#2: ((y = 1) ^ y) === 0. Actual: ' + (((y = 1) ^ y))); -} - - diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A3_T1.1.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A3_T1.1.js deleted file mode 100644 index 2816f2c1c..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A3_T1.1.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.10.2_A3_T1.1; - * @section: 11.10.2; - * @assertion: Operator x ^ y returns ToNumber(x) ^ ToNumber(y); - * @description: Type(x) and Type(y) are primitive boolean and Boolean object; - */ - -//CHECK#1 -if ((true ^ true) !== 0) { - $ERROR('#1: (true ^ true) === 0. Actual: ' + ((true ^ true))); -} - -//CHECK#2 -if ((new Boolean(true) ^ true) !== 0) { - $ERROR('#2: (new Boolean(true) ^ true) === 0. Actual: ' + ((new Boolean(true) ^ true))); -} - -//CHECK#3 -if ((true ^ new Boolean(true)) !== 0) { - $ERROR('#3: (true ^ new Boolean(true)) === 0. Actual: ' + ((true ^ new Boolean(true)))); -} - -//CHECK#4 -if ((new Boolean(true) ^ new Boolean(true)) !== 0) { - $ERROR('#4: (new Boolean(true) ^ new Boolean(true)) === 0. Actual: ' + ((new Boolean(true) ^ new Boolean(true)))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A3_T1.2.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A3_T1.2.js deleted file mode 100644 index bbda75d01..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A3_T1.2.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.10.2_A3_T1.2; - * @section: 11.10.2; - * @assertion: Operator x ^ y returns ToNumber(x) ^ ToNumber(y); - * @description: Type(x) and Type(y) are primitive number and Number object; -*/ - -//CHECK#1 -if ((1 ^ 1) !== 0) { - $ERROR('#1: (1 ^ 1) === 0. Actual: ' + ((1 ^ 1))); -} - -//CHECK#2 -if ((new Number(1) ^ 1) !== 0) { - $ERROR('#2: (new Number(1) ^ 1) === 0. Actual: ' + ((new Number(1) ^ 1))); -} - -//CHECK#3 -if ((1 ^ new Number(1)) !== 0) { - $ERROR('#3: (1 ^ new Number(1)) === 0. Actual: ' + ((1 ^ new Number(1)))); -} - -//CHECK#4 -if ((new Number(1) ^ new Number(1)) !== 0) { - $ERROR('#4: (new Number(1) ^ new Number(1)) === 0. Actual: ' + ((new Number(1) ^ new Number(1)))); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A3_T1.3.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A3_T1.3.js deleted file mode 100644 index 363dd5709..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A3_T1.3.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.10.2_A3_T1.3; - * @section: 11.10.2; - * @assertion: Operator x ^ y returns ToNumber(x) ^ ToNumber(y); - * @description: Type(x) and Type(y) are primitive string and String object; -*/ - -//CHECK#1 -if (("1" ^ "1") !== 0) { - $ERROR('#1: ("1" ^ "1") === 0. Actual: ' + (("1" ^ "1"))); -} - -//CHECK#2 -if ((new String("1") ^ "1") !== 0) { - $ERROR('#2: (new String("1") ^ "1") === 0. Actual: ' + ((new String("1") ^ "1"))); -} - -//CHECK#3 -if (("1" ^ new String("1")) !== 0) { - $ERROR('#3: ("1" ^ new String("1")) === 0. Actual: ' + (("1" ^ new String("1")))); -} - -//CHECK#4 -if ((new String("1") ^ new String("1")) !== 0) { - $ERROR('#4: (new String("1") ^ new String("1")) === 0. Actual: ' + ((new String("1") ^ new String("1")))); -} - -//CHECK#5 -if (("x" ^ "1") !== 1) { - $ERROR('#5: ("x" ^ "1") === 1. Actual: ' + (("x" ^ "1"))); -} - -//CHECK#6 -if (("1" ^ "x") !== 1) { - $ERROR('#6: ("1" ^ "x") === 1. Actual: ' + (("1" ^ "x"))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A3_T1.4.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A3_T1.4.js deleted file mode 100644 index aa7ada0ab..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A3_T1.4.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.10.2_A3_T1.4; - * @section: 11.10.2; - * @assertion: Operator x ^ y returns ToNumber(x) ^ ToNumber(y); - * @description: Type(x) and Type(y) are null and undefined; - */ - -//CHECK#1 -if ((null ^ undefined) !== 0) { - $ERROR('#1: (null ^ undefined) === 0. Actual: ' + ((null ^ undefined))); -} - -//CHECK#2 -if ((undefined ^ null) !== 0) { - $ERROR('#2: (undefined ^ null) === 0. Actual: ' + ((undefined ^ null))); -} - -//CHECK#3 -if ((undefined ^ undefined) !== 0) { - $ERROR('#3: (undefined ^ undefined) === 0. Actual: ' + ((undefined ^ undefined))); -} - -//CHECK#4 -if ((null ^ null) !== 0) { - $ERROR('#4: (null ^ null) === 0. Actual: ' + ((null ^ null))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A3_T1.5.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A3_T1.5.js deleted file mode 100644 index 27454bc22..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A3_T1.5.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.10.2_A3_T1.5; - * @section: 11.10.2; - * @assertion: Operator x ^ y returns ToNumber(x) ^ ToNumber(y); - * @description: Type(x) and Type(y) are Object object and Function object; - */ - -//CHECK#1 -if (({} ^ function(){return 1}) !== 0) { - $ERROR('#1: ({} ^ function(){return 1}) === 0. Actual: ' + (({} ^ function(){return 1}))); -} - -//CHECK#2 -if ((function(){return 1} ^ {}) !== 0) { - $ERROR('#2: (function(){return 1} ^ {}) === 0. Actual: ' + ((function(){return 1} ^ {}))); -} - -//CHECK#3 -if ((function(){return 1} ^ function(){return 1}) !== 0) { - $ERROR('#3: (function(){return 1} ^ function(){return 1}) === 0. Actual: ' + ((function(){return 1} ^ function(){return 1}))); -} - -//CHECK#4 -if (({} ^ {}) !== 0) { - $ERROR('#4: ({} ^ {}) === 0. Actual: ' + (({} ^ {}))); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A3_T2.1.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A3_T2.1.js deleted file mode 100644 index 714fd5589..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A3_T2.1.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.10.2_A3_T2.1; - * @section: 11.10.2; - * @assertion: Operator x ^ y returns ToNumber(x) ^ ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Boolean (primitive and object); - */ - -//CHECK#1 -if ((true ^ 1) !== 0) { - $ERROR('#1: (true ^ 1) === 0. Actual: ' + ((true ^ 1))); -} - -//CHECK#2 -if ((1 ^ true) !== 0) { - $ERROR('#2: (1 ^ true) === 0. Actual: ' + ((1 ^ true))); -} - -//CHECK#3 -if ((new Boolean(true) ^ 1) !== 0) { - $ERROR('#3: (new Boolean(true) ^ 1) === 0. Actual: ' + ((new Boolean(true) ^ 1))); -} - -//CHECK#4 -if ((1 ^ new Boolean(true)) !== 0) { - $ERROR('#4: (1 ^ new Boolean(true)) === 0. Actual: ' + ((1 ^ new Boolean(true)))); -} - -//CHECK#5 -if ((true ^ new Number(1)) !== 0) { - $ERROR('#5: (true ^ new Number(1)) === 0. Actual: ' + ((true ^ new Number(1)))); -} - -//CHECK#6 -if ((new Number(1) ^ true) !== 0) { - $ERROR('#6: (new Number(1) ^ true) === 0. Actual: ' + ((new Number(1) ^ true))); -} - -//CHECK#7 -if ((new Boolean(true) ^ new Number(1)) !== 0) { - $ERROR('#7: (new Boolean(true) ^ new Number(1)) === 0. Actual: ' + ((new Boolean(true) ^ new Number(1)))); -} - -//CHECK#8 -if ((new Number(1) ^ new Boolean(true)) !== 0) { - $ERROR('#8: (new Number(1) ^ new Boolean(true)) === 0. Actual: ' + ((new Number(1) ^ new Boolean(true)))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A3_T2.2.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A3_T2.2.js deleted file mode 100644 index 915be36d6..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A3_T2.2.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.10.2_A3_T2.2; - * @section: 11.10.2; - * @assertion: Operator x ^ y returns ToNumber(x) ^ ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and String (primitive and object); -*/ - -//CHECK#1 -if (("1" ^ 1) !== 0) { - $ERROR('#1: ("1" ^ 1) === 0. Actual: ' + (("1" ^ 1))); -} - -//CHECK#2 -if ((1 ^ "1") !== 0) { - $ERROR('#2: (1 ^ "1") === 0. Actual: ' + ((1 ^ "1"))); -} - -//CHECK#3 -if ((new String("1") ^ 1) !== 0) { - $ERROR('#3: (new String("1") ^ 1) === 0. Actual: ' + ((new String("1") ^ 1))); -} - -//CHECK#4 -if ((1 ^ new String("1")) !== 0) { - $ERROR('#4: (1 ^ new String("1")) === 0. Actual: ' + ((1 ^ new String("1")))); -} - -//CHECK#5 -if (("1" ^ new Number(1)) !== 0) { - $ERROR('#5: ("1" ^ new Number(1)) === 0. Actual: ' + (("1" ^ new Number(1)))); -} - -//CHECK#6 -if ((new Number(1) ^ "1") !== 0) { - $ERROR('#6: (new Number(1) ^ "1") === 0. Actual: ' + ((new Number(1) ^ "1"))); -} - -//CHECK#7 -if ((new String("1") ^ new Number(1)) !== 0) { - $ERROR('#7: (new String("1") ^ new Number(1)) === 0. Actual: ' + ((new String("1") ^ new Number(1)))); -} - -//CHECK#8 -if ((new Number(1) ^ new String("1")) !== 0) { - $ERROR('#8: (new Number(1) ^ new String("1")) === 0. Actual: ' + ((new Number(1) ^ new String("1")))); -} - -//CHECK#9 -if (("x" ^ 1) !== 1) { - $ERROR('#9: ("x" ^ 1) === 1. Actual: ' + (("x" ^ 1))); -} - -//CHECK#10 -if ((1 ^ "x") !== 1) { - $ERROR('#10: (1 ^ "x") === 1. Actual: ' + ((1 ^ "x"))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A3_T2.3.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A3_T2.3.js deleted file mode 100644 index 65f4f73df..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A3_T2.3.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.10.2_A3_T2.3; - * @section: 11.10.2; - * @assertion: Operator x ^ y returns ToNumber(x) ^ ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Null; - */ - -//CHECK#1 -if ((1 ^ null) !== 1) { - $ERROR('#1: (1 ^ null) === 1. Actual: ' + ((1 ^ null))); -} - -//CHECK#2 -if ((null ^ 1) !== 1) { - $ERROR('#2: (null ^ 1) === 1. Actual: ' + ((null ^ 1))); -} - -//CHECK#3 -if ((new Number(1) ^ null) !== 1) { - $ERROR('#3: (new Number(1) ^ null) === 1. Actual: ' + ((new Number(1) ^ null))); -} - -//CHECK#4 -if ((null ^ new Number(1)) !== 1) { - $ERROR('#4: (null ^ new Number(1)) === 1. Actual: ' + ((null ^ new Number(1)))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A3_T2.4.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A3_T2.4.js deleted file mode 100644 index 0e430b035..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A3_T2.4.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.10.2_A3_T2.4; - * @section: 11.10.2; - * @assertion: Operator x ^ y returns ToNumber(x) ^ ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Undefined; - */ - -//CHECK#1 -if ((1 ^ undefined) !== 1) { - $ERROR('#1: (1 ^ undefined) === 1. Actual: ' + ((1 ^ undefined))); -} - -//CHECK#2 -if ((undefined ^ 1) !== 1) { - $ERROR('#2: (undefined ^ 1) === 1. Actual: ' + ((undefined ^ 1))); -} - -//CHECK#3 -if ((new Number(1) ^ undefined) !== 1) { - $ERROR('#3: (new Number(1) ^ undefined) === 1. Actual: ' + ((new Number(1) ^ undefined))); -} - -//CHECK#4 -if ((undefined ^ new Number(1)) !== 1) { - $ERROR('#4: (undefined ^ new Number(1)) === 1. Actual: ' + ((undefined ^ new Number(1)))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A3_T2.5.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A3_T2.5.js deleted file mode 100644 index 1232df83e..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A3_T2.5.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.10.2_A3_T2.5; - * @section: 11.10.2; - * @assertion: Operator x ^ y returns ToNumber(x) ^ ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between String (primitive or object) and Boolean (primitive and object); -*/ - -//CHECK#1 -if ((true ^ "1") !== 0) { - $ERROR('#1: (true ^ "1") === 0. Actual: ' + ((true ^ "1"))); -} - -//CHECK#2 -if (("1" ^ true) !== 0) { - $ERROR('#2: ("1" ^ true) === 0. Actual: ' + (("1" ^ true))); -} - -//CHECK#3 -if ((new Boolean(true) ^ "1") !== 0) { - $ERROR('#3: (new Boolean(true) ^ "1") === 0. Actual: ' + ((new Boolean(true) ^ "1"))); -} - -//CHECK#4 -if (("1" ^ new Boolean(true)) !== 0) { - $ERROR('#4: ("1" ^ new Boolean(true)) === 0. Actual: ' + (("1" ^ new Boolean(true)))); -} - -//CHECK#5 -if ((true ^ new String("1")) !== 0) { - $ERROR('#5: (true ^ new String("1")) === 0. Actual: ' + ((true ^ new String("1")))); -} - -//CHECK#6 -if ((new String("1") ^ true) !== 0) { - $ERROR('#6: (new String("1") ^ true) === 0. Actual: ' + ((new String("1") ^ true))); -} - -//CHECK#7 -if ((new Boolean(true) ^ new String("1")) !== 0) { - $ERROR('#7: (new Boolean(true) ^ new String("1")) === 0. Actual: ' + ((new Boolean(true) ^ new String("1")))); -} - -//CHECK#8 -if ((new String("1") ^ new Boolean(true)) !== 0) { - $ERROR('#8: (new String("1") ^ new Boolean(true)) === 0. Actual: ' + ((new String("1") ^ new Boolean(true)))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A3_T2.6.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A3_T2.6.js deleted file mode 100644 index 1d6f0fc08..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A3_T2.6.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.10.2_A3_T2.6; - * @section: 11.10.2; - * @assertion: Operator x ^ y returns ToNumber(x) ^ ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between String (primitive or object) and Undefined; - */ - -//CHECK#1 -if (("1" ^ undefined) !== 1) { - $ERROR('#1: ("1" ^ undefined) === 1. Actual: ' + (("1" ^ undefined))); -} - -//CHECK#2 -if ((undefined ^ "1") !== 1) { - $ERROR('#2: (undefined ^ "1") === 1. Actual: ' + ((undefined ^ "1"))); -} - -//CHECK#3 -if ((new String("1") ^ undefined) !== 1) { - $ERROR('#3: (new String("1") ^ undefined) === 1. Actual: ' + ((new String("1") ^ undefined))); -} - -//CHECK#4 -if ((undefined ^ new String("1")) !== 1) { - $ERROR('#4: (undefined ^ new String("1")) === 1. Actual: ' + ((undefined ^ new String("1")))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A3_T2.7.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A3_T2.7.js deleted file mode 100644 index 18dca7f68..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A3_T2.7.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.10.2_A3_T2.7; - * @section: 11.10.2; - * @assertion: Operator x ^ y returns ToNumber(x) ^ ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between String (primitive or object) and Null; - */ - -//CHECK#1 -if (("1" ^ null) !== 1) { - $ERROR('#1: ("1" ^ null) === 1. Actual: ' + (("1" ^ null))); -} - -//CHECK#2 -if ((null ^ "1") !== 1) { - $ERROR('#2: (null ^ "1") === 1. Actual: ' + ((null ^ "1"))); -} - -//CHECK#3 -if ((new String("1") ^ null) !== 1) { - $ERROR('#3: (new String("1") ^ null) === 1. Actual: ' + ((new String("1") ^ null))); -} - -//CHECK#4 -if ((null ^ new String("1")) !== 1) { - $ERROR('#4: (null ^ new String("1")) === 1. Actual: ' + ((null ^ new String("1")))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A3_T2.8.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A3_T2.8.js deleted file mode 100644 index e24fc783c..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A3_T2.8.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.10.2_A3_T2.8; - * @section: 11.10.2; - * @assertion: Operator x ^ y returns ToNumber(x) ^ ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Undefined; - */ - -//CHECK#1 -if ((true ^ undefined) !== 1) { - $ERROR('#1: (true ^ undefined) === 1. Actual: ' + ((true ^ undefined))); -} - -//CHECK#2 -if ((undefined ^ true) !== 1) { - $ERROR('#2: (undefined ^ true) === 1. Actual: ' + ((undefined ^ true))); -} - -//CHECK#3 -if ((new Boolean(true) ^ undefined) !== 1) { - $ERROR('#3: (new Boolean(true) ^ undefined) === 1. Actual: ' + ((new Boolean(true) ^ undefined))); -} - -//CHECK#4 -if ((undefined ^ new Boolean(true)) !== 1) { - $ERROR('#4: (undefined ^ new Boolean(true)) === 1. Actual: ' + ((undefined ^ new Boolean(true)))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A3_T2.9.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A3_T2.9.js deleted file mode 100644 index 438c7a27e..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.2_XOR_Operator/S11.10.2_A3_T2.9.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.10.2_A3_T2.9; - * @section: 11.10.2; - * @assertion: Operator x ^ y returns ToNumber(x) ^ ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Null; - */ - -//CHECK#1 -if ((true ^ null) !== 1) { - $ERROR('#1: (true ^ null) === 1. Actual: ' + ((true ^ null))); -} - -//CHECK#2 -if ((null ^ true) !== 1) { - $ERROR('#2: (null ^ true) === 1. Actual: ' + ((null ^ true))); -} - -//CHECK#3 -if ((new Boolean(true) ^ null) !== 1) { - $ERROR('#3: (new Boolean(true) ^ null) === 1. Actual: ' + ((new Boolean(true) ^ null))); -} - -//CHECK#4 -if ((null ^ new Boolean(true)) !== 1) { - $ERROR('#4: (null ^ new Boolean(true)) === 1. Actual: ' + ((null ^ new Boolean(true)))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A1.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A1.js deleted file mode 100644 index ed3129958..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A1.js +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.10.3_A1; -* @section: 11.10.3; -* @assertion: White Space and Line Terminator between BitwiseORExpression and "|" or between "|" and BitwiseXORExpression are allowed; -* @description: Checking by using eval; -*/ - -//CHECK#1 -if ((eval("0\u0009|\u00091")) !== 1) { - $ERROR('#1: (0\\u0009|\\u00091) === 1'); -} - -//CHECK#2 -if ((eval("0\u000B|\u000B1")) !== 1) { - $ERROR('#2: (0\\u000B|\\u000B1) === 1'); -} - -//CHECK#3 -if ((eval("0\u000C|\u000C1")) !== 1) { - $ERROR('#3: (0\\u000C|\\u000C1) === 1'); -} - -//CHECK#4 -if ((eval("0\u0020|\u00201")) !== 1) { - $ERROR('#4: (0\\u0020|\\u00201) === 1'); -} - -//CHECK#5 -if ((eval("0\u00A0|\u00A01")) !== 1) { - $ERROR('#5: (0\\u00A0|\\u00A01) === 1'); -} - -//CHECK#6 -if ((eval("0\u000A|\u000A1")) !== 1) { - $ERROR('#6: (0\\u000A|\\u000A1) === 1'); -} - -//CHECK#7 -if ((eval("0\u000D|\u000D1")) !== 1) { - $ERROR('#7: (0\\u000D|\\u000D1) === 1'); -} - -//CHECK#8 -if ((eval("0\u2028|\u20281")) !== 1) { - $ERROR('#8: (0\\u2028|\\u20281) === 1'); -} - -//CHECK#9 -if ((eval("0\u2029|\u20291")) !== 1) { - $ERROR('#9: (0\\u2029|\\u20291) === 1'); -} - - -//CHECK#10 -if ((eval("0\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029|\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20291")) !== 1) { - $ERROR('#10: (0\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029|\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20291) === 1'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A2.1_T1.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A2.1_T1.js deleted file mode 100644 index 2b475cad3..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A2.1_T1.js +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.10.3_A2.1_T1; - * @section: 11.10.3; - * @assertion: Operator x | y uses GetValue; - * @description: Either Type is not Reference or GetBase is not null; -*/ - -//CHECK#1 -if ((1 | 0) !== 1) { - $ERROR('#1: (1 | 0) === 1. Actual: ' + ((1 | 0))); -} - -//CHECK#2 -var x = 1; -if ((x | 0) !== 1) { - $ERROR('#2: var x = 1; (x | 0) === 1. Actual: ' + ((x | 0))); -} - -//CHECK#3 -var y = 0; -if ((1 | y) !== 1) { - $ERROR('#3: var y = 0; (1 | y) === 1. Actual: ' + ((1 | y))); -} - -//CHECK#4 -var x = 1; -var y = 0; -if ((x | y) !== 1) { - $ERROR('#4: var x = 1; var y = 0; (x | y) === 1. Actual: ' + ((x | y))); -} - -//CHECK#5 -var objectx = new Object(); -var objecty = new Object(); -objectx.prop = 1; -objecty.prop = 0; -if ((objectx.prop | objecty.prop) !== 1) { - $ERROR('#5: var objectx = new Object(); var objecty = new Object(); objectx.prop = 1; objecty.prop = 0; (objectx.prop | objecty.prop) === 1. Actual: ' + ((objectx.prop | objecty.prop))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A2.1_T2.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A2.1_T2.js deleted file mode 100644 index 255be73ea..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A2.1_T2.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.10.3_A2.1_T2; - * @section: 11.10.3; - * @assertion: Operator x | y uses GetValue; - * @description: If GetBase(x) is null, throw ReferenceError; -*/ - -//CHECK#1 -try { - x | 1; - $ERROR('#1.1: x | 1 throw ReferenceError. Actual: ' + (x | 1)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: x | 1 throw ReferenceError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A2.1_T3.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A2.1_T3.js deleted file mode 100644 index dc797d9f6..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A2.1_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.10.3_A2.1_T3; - * @section: 11.10.3; - * @assertion: Operator x | y uses GetValue; - * @description: If GetBase(y) is null, throw ReferenceError; -*/ - -//CHECK#1 -try { - 1 | y; - $ERROR('#1.1: 1 | y throw ReferenceError. Actual: ' + (1 | y)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: 1 | y throw ReferenceError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A2.2_T1.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A2.2_T1.js deleted file mode 100644 index 7aa0c1e6c..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A2.2_T1.js +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.10.3_A2.2_T1; - * @section: 11.10.3, 8.6.2.6; - * @assertion: Operator x | y uses [[Default Value]]; - * @description: If Type(value) is Object, evaluate ToPrimitive(value, Number); - */ - -//CHECK#1 -if (({valueOf: function() {return 1}} | 0) !== 1) { - $ERROR('#1: ({valueOf: function() {return 1}} | 0) === 1. Actual: ' + (({valueOf: function() {return 1}} | 0))); -} - -//CHECK#2 -if (({valueOf: function() {return 1}, toString: function() {return 0}} | 0) !== 1) { - $ERROR('#2: ({valueOf: function() {return 1}, toString: function() {return 0}} | 0) === 1. Actual: ' + (({valueOf: function() {return 1}, toString: function() {return 0}} | 0))); -} - -//CHECK#3 -if (({valueOf: function() {return 1}, toString: function() {return {}}} | 0) !== 1) { - $ERROR('#3: ({valueOf: function() {return 1}, toString: function() {return {}}} | 0) === 1. Actual: ' + (({valueOf: function() {return 1}, toString: function() {return {}}} | 0))); -} - -//CHECK#4 -try { - if (({valueOf: function() {return 1}, toString: function() {throw "error"}} | 0) !== 1) { - $ERROR('#4.1: ({valueOf: function() {return 1}, toString: function() {throw "error"}} | 0) === 1. Actual: ' + (({valueOf: function() {return 1}, toString: function() {throw "error"}} | 0))); - } -} -catch (e) { - if (e === "error") { - $ERROR('#4.2: ({valueOf: function() {return 1}, toString: function() {throw "error"}} | 0) not throw "error"'); - } else { - $ERROR('#4.3: ({valueOf: function() {return 1}, toString: function() {throw "error"}} | 0) not throw Error. Actual: ' + (e)); - } -} - -//CHECK#5 -if ((0 | {toString: function() {return 1}}) !== 1) { - $ERROR('#5: (0 | {toString: function() {return 1}}) === 1. Actual: ' + ((0 | {toString: function() {return 1}}))); -} - -//CHECK#6 -if ((0 | {valueOf: function() {return {}}, toString: function() {return 1}}) !== 1) { - $ERROR('#6: (0 | {valueOf: function() {return {}}, toString: function() {return 1}}) === 1. Actual: ' + ((0 | {valueOf: function() {return {}}, toString: function() {return 1}}))); -} - -//CHECK#7 -try { - 0 | {valueOf: function() {throw "error"}, toString: function() {return 1}}; - $ERROR('#7.1: 0 | {valueOf: function() {throw "error"}, toString: function() {return 1}} throw "error". Actual: ' + (0 | {valueOf: function() {throw "error"}, toString: function() {return 1}})); -} -catch (e) { - if (e !== "error") { - $ERROR('#7.2: 0 | {valueOf: function() {throw "error"}, toString: function() {return 1}} throw "error". Actual: ' + (e)); - } -} - -//CHECK#8 -try { - 0 | {valueOf: function() {return {}}, toString: function() {return {}}}; - $ERROR('#8.1: 0 | {valueOf: function() {return {}}, toString: function() {return {}}} throw TypeError. Actual: ' + (0 | {valueOf: function() {return {}}, toString: function() {return {}}})); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#8.2: 0 | {valueOf: function() {return {}}, toString: function() {return {}}} throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A2.3_T1.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A2.3_T1.js deleted file mode 100644 index 725253588..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A2.3_T1.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.10.3_A2.3_T1; - * @section: 11.10.3; - * @assertion: ToInt32(first expression) is called first, and then ToInt32(second expression); - * @description: Checking with "throw"; -*/ - -//CHECK#1 -var x = { valueOf: function () { throw "x"; } }; -var y = { valueOf: function () { throw "y"; } }; -try { - x | y; - $ERROR('#1.1: var x = { valueOf: function () { throw "x"; } }; var y = { valueOf: function () { throw "y"; } }; x | y throw "x". Actual: ' + (x | y)); -} catch (e) { - if (e === "y") { - $ERROR('#1.2: ToInt32(first expression) is called first, and then ToInt32(second expression)'); - } else { - if (e !== "x") { - $ERROR('#1.3: var x = { valueOf: function () { throw "x"; } }; var y = { valueOf: function () { throw "y"; } }; x | y throw "x". Actual: ' + (e)); - } - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A2.4_T1.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A2.4_T1.js deleted file mode 100644 index cef7c2502..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A2.4_T1.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.10.3_A2.4_T1; - * @section: 11.10.3; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with "="; -*/ - -//CHECK#1 -var x = 1; -if (((x = 0) | x) !== 0) { - $ERROR('#1: var x = 1; ((x = 0) | x) === 0. Actual: ' + (((x = 0) | x))); -} - -//CHECK#2 -var x = 1; -if ((x | (x = 0)) !== 1) { - $ERROR('#2: var x = 1; (x | (x = 0)) === 1. Actual: ' + ((x | (x = 0)))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A2.4_T2.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A2.4_T2.js deleted file mode 100644 index a528b2d61..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A2.4_T2.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.10.3_A2.4_T2; - * @section: 11.10.3; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with "throw"; -*/ - -//CHECK#1 -var x = function () { throw "x"; }; -var y = function () { throw "y"; }; -try { - x() | y(); - $ERROR('#1.1: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() | y() throw "x". Actual: ' + (x() | y())); -} catch (e) { - if (e === "y") { - $ERROR('#1.2: First expression is evaluated first, and then second expression'); - } else { - if (e !== "x") { - $ERROR('#1.3: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() | y() throw "x". Actual: ' + (e)); - } - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A2.4_T3.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A2.4_T3.js deleted file mode 100644 index bd9b401a0..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A2.4_T3.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.10.3_A2.4_T3; - * @section: 11.10.3; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with undeclarated variables; -*/ - -//CHECK#1 -try { - x | (x = 1); - $ERROR('#1.1: x | (x = 1) throw ReferenceError. Actual: ' + (x | (x = 1))); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: x | (x = 1) throw ReferenceError. Actual: ' + (e)); - } -} - -//CHECK#2 -if (((y = 1) | y) !== 1) { - $ERROR('#2: ((y = 1) | y) === 1. Actual: ' + (((y = 1) | y))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A3_T1.1.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A3_T1.1.js deleted file mode 100644 index 9d651b232..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A3_T1.1.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.10.3_A3_T1.1; - * @section: 11.10.3; - * @assertion: Operator x | y returns ToNumber(x) | ToNumber(y); - * @description: Type(x) and Type(y) vary between primitive boolean and Boolean object; - */ - -//CHECK#1 -if ((true | true) !== 1) { - $ERROR('#1: (true | true) === 1. Actual: ' + ((true | true))); -} - -//CHECK#2 -if ((new Boolean(true) | true) !== 1) { - $ERROR('#2: (new Boolean(true) | true) === 1. Actual: ' + ((new Boolean(true) | true))); -} - -//CHECK#3 -if ((true | new Boolean(true)) !== 1) { - $ERROR('#3: (true | new Boolean(true)) === 1. Actual: ' + ((true | new Boolean(true)))); -} - -//CHECK#4 -if ((new Boolean(true) | new Boolean(true)) !== 1) { - $ERROR('#4: (new Boolean(true) | new Boolean(true)) === 1. Actual: ' + ((new Boolean(true) | new Boolean(true)))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A3_T1.2.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A3_T1.2.js deleted file mode 100644 index 1eb3d9851..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A3_T1.2.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.10.3_A3_T1.2; - * @section: 11.10.3; - * @assertion: Operator x | y returns ToNumber(x) | ToNumber(y); - * @description: Type(x) and Type(y) vary between primitive number and Number object; -*/ - -//CHECK#1 -if ((1 | 1) !== 1) { - $ERROR('#1: (1 | 1) === 1. Actual: ' + ((1 | 1))); -} - -//CHECK#2 -if ((new Number(1) | 1) !== 1) { - $ERROR('#2: (new Number(1) | 1) === 1. Actual: ' + ((new Number(1) | 1))); -} - -//CHECK#3 -if ((1 | new Number(1)) !== 1) { - $ERROR('#3: (1 | new Number(1)) === 1. Actual: ' + ((1 | new Number(1)))); -} - -//CHECK#4 -if ((new Number(1) | new Number(1)) !== 1) { - $ERROR('#4: (new Number(1) | new Number(1)) === 1. Actual: ' + ((new Number(1) | new Number(1)))); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A3_T1.3.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A3_T1.3.js deleted file mode 100644 index d754794d3..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A3_T1.3.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.10.3_A3_T1.3; - * @section: 11.10.3; - * @assertion: Operator x | y returns ToNumber(x) | ToNumber(y); - * @description: Type(x) and Type(y) vary between primitive string and String object; -*/ - -//CHECK#1 -if (("1" | "1") !== 1) { - $ERROR('#1: ("1" | "1") === 1. Actual: ' + (("1" | "1"))); -} - -//CHECK#2 -if ((new String("1") | "1") !== 1) { - $ERROR('#2: (new String("1") | "1") === 1. Actual: ' + ((new String("1") | "1"))); -} - -//CHECK#3 -if (("1" | new String("1")) !== 1) { - $ERROR('#3: ("1" | new String("1")) === 1. Actual: ' + (("1" | new String("1")))); -} - -//CHECK#4 -if ((new String("1") | new String("1")) !== 1) { - $ERROR('#4: (new String("1") | new String("1")) === 1. Actual: ' + ((new String("1") | new String("1")))); -} - -//CHECK#5 -if (("x" | "1") !== 1) { - $ERROR('#5: ("x" | "1") === 1. Actual: ' + (("x" | "1"))); -} - -//CHECK#6 -if (("1" | "x") !== 1) { - $ERROR('#6: ("1" | "x") === 1. Actual: ' + (("1" | "x"))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A3_T1.4.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A3_T1.4.js deleted file mode 100644 index 0aa619af9..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A3_T1.4.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.10.3_A3_T1.4; - * @section: 11.10.3; - * @assertion: Operator x | y returns ToNumber(x) | ToNumber(y); - * @description: Type(x) and Type(y) vary between Null and Undefined; - */ - -//CHECK#1 -if ((null | undefined) !== 0) { - $ERROR('#1: (null | undefined) === 0. Actual: ' + ((null | undefined))); -} - -//CHECK#2 -if ((undefined | null) !== 0) { - $ERROR('#2: (undefined | null) === 0. Actual: ' + ((undefined | null))); -} - -//CHECK#3 -if ((undefined | undefined) !== 0) { - $ERROR('#3: (undefined | undefined) === 0. Actual: ' + ((undefined | undefined))); -} - -//CHECK#4 -if ((null | null) !== 0) { - $ERROR('#4: (null | null) === 0. Actual: ' + ((null | null))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A3_T1.5.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A3_T1.5.js deleted file mode 100644 index 91f712790..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A3_T1.5.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.10.3_A3_T1.5; - * @section: 11.10.3; - * @assertion: Operator x | y returns ToNumber(x) | ToNumber(y); - * @description: Type(x) and Type(y) vary between Object object and Function object; - */ - -//CHECK#1 -if (({} | function(){return 1}) !== 0) { - $ERROR('#1: ({} | function(){return 1}) === 0. Actual: ' + (({} | function(){return 1}))); -} - -//CHECK#2 -if ((function(){return 1} | {}) !== 0) { - $ERROR('#2: (function(){return 1} | {}) === 0. Actual: ' + ((function(){return 1} | {}))); -} - -//CHECK#3 -if ((function(){return 1} | function(){return 1}) !== 0) { - $ERROR('#3: (function(){return 1} | function(){return 1}) === 0. Actual: ' + ((function(){return 1} | function(){return 1}))); -} - -//CHECK#4 -if (({} | {}) !== 0) { - $ERROR('#4: ({} | {}) === 0. Actual: ' + (({} | {}))); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A3_T2.1.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A3_T2.1.js deleted file mode 100644 index 770aba721..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A3_T2.1.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.10.3_A3_T2.1; - * @section: 11.10.3; - * @assertion: Operator x | y returns ToNumber(x) | ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Boolean (primitive and object); - */ - -//CHECK#1 -if ((true | 1) !== 1) { - $ERROR('#1: (true | 1) === 1. Actual: ' + ((true | 1))); -} - -//CHECK#2 -if ((1 | true) !== 1) { - $ERROR('#2: (1 | true) === 1. Actual: ' + ((1 | true))); -} - -//CHECK#3 -if ((new Boolean(true) | 1) !== 1) { - $ERROR('#3: (new Boolean(true) | 1) === 1. Actual: ' + ((new Boolean(true) | 1))); -} - -//CHECK#4 -if ((1 | new Boolean(true)) !== 1) { - $ERROR('#4: (1 | new Boolean(true)) === 1. Actual: ' + ((1 | new Boolean(true)))); -} - -//CHECK#5 -if ((true | new Number(1)) !== 1) { - $ERROR('#5: (true | new Number(1)) === 1. Actual: ' + ((true | new Number(1)))); -} - -//CHECK#6 -if ((new Number(1) | true) !== 1) { - $ERROR('#6: (new Number(1) | true) === 1. Actual: ' + ((new Number(1) | true))); -} - -//CHECK#7 -if ((new Boolean(true) | new Number(1)) !== 1) { - $ERROR('#7: (new Boolean(true) | new Number(1)) === 1. Actual: ' + ((new Boolean(true) | new Number(1)))); -} - -//CHECK#8 -if ((new Number(1) | new Boolean(true)) !== 1) { - $ERROR('#8: (new Number(1) | new Boolean(true)) === 1. Actual: ' + ((new Number(1) | new Boolean(true)))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A3_T2.2.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A3_T2.2.js deleted file mode 100644 index 33c5e40b3..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A3_T2.2.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.10.3_A3_T2.2; - * @section: 11.10.3; - * @assertion: Operator x | y returns ToNumber(x) | ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and String (primitive and object); -*/ - -//CHECK#1 -if (("1" | 1) !== 1) { - $ERROR('#1: ("1" | 1) === 1. Actual: ' + (("1" | 1))); -} - -//CHECK#2 -if ((1 | "1") !== 1) { - $ERROR('#2: (1 | "1") === 1. Actual: ' + ((1 | "1"))); -} - -//CHECK#3 -if ((new String("1") | 1) !== 1) { - $ERROR('#3: (new String("1") | 1) === 1. Actual: ' + ((new String("1") | 1))); -} - -//CHECK#4 -if ((1 | new String("1")) !== 1) { - $ERROR('#4: (1 | new String("1")) === 1. Actual: ' + ((1 | new String("1")))); -} - -//CHECK#5 -if (("1" | new Number(1)) !== 1) { - $ERROR('#5: ("1" | new Number(1)) === 1. Actual: ' + (("1" | new Number(1)))); -} - -//CHECK#6 -if ((new Number(1) | "1") !== 1) { - $ERROR('#6: (new Number(1) | "1") === 1. Actual: ' + ((new Number(1) | "1"))); -} - -//CHECK#7 -if ((new String("1") | new Number(1)) !== 1) { - $ERROR('#7: (new String("1") | new Number(1)) === 1. Actual: ' + ((new String("1") | new Number(1)))); -} - -//CHECK#8 -if ((new Number(1) | new String("1")) !== 1) { - $ERROR('#8: (new Number(1) | new String("1")) === 1. Actual: ' + ((new Number(1) | new String("1")))); -} - -//CHECK#9 -if (("x" | 1) !== 1) { - $ERROR('#9: ("x" | 1) === 1. Actual: ' + (("x" | 1))); -} - -//CHECK#10 -if ((1 | "x") !== 1) { - $ERROR('#10: (1 | "x") === 1. Actual: ' + ((1 | "x"))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A3_T2.3.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A3_T2.3.js deleted file mode 100644 index d581f0afa..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A3_T2.3.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.10.3_A3_T2.3; - * @section: 11.10.3; - * @assertion: Operator x | y returns ToNumber(x) | ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Null; - */ - -//CHECK#1 -if ((1 | null) !== 1) { - $ERROR('#1: (1 | null) === 1. Actual: ' + ((1 | null))); -} - -//CHECK#2 -if ((null | 1) !== 1) { - $ERROR('#2: (null | 1) === 1. Actual: ' + ((null | 1))); -} - -//CHECK#3 -if ((new Number(1) | null) !== 1) { - $ERROR('#3: (new Number(1) | null) === 1. Actual: ' + ((new Number(1) | null))); -} - -//CHECK#4 -if ((null | new Number(1)) !== 1) { - $ERROR('#4: (null | new Number(1)) === 1. Actual: ' + ((null | new Number(1)))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A3_T2.4.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A3_T2.4.js deleted file mode 100644 index f8608ff6a..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A3_T2.4.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.10.3_A3_T2.4; - * @section: 11.10.3; - * @assertion: Operator x | y returns ToNumber(x) | ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Undefined; - */ - -//CHECK#1 -if ((1 | undefined) !== 1) { - $ERROR('#1: (1 | undefined) === 1. Actual: ' + ((1 | undefined))); -} - -//CHECK#2 -if ((undefined | 1) !== 1) { - $ERROR('#2: (undefined | 1) === 1. Actual: ' + ((undefined | 1))); -} - -//CHECK#3 -if ((new Number(1) | undefined) !== 1) { - $ERROR('#3: (new Number(1) | undefined) === 1. Actual: ' + ((new Number(1) | undefined))); -} - -//CHECK#4 -if ((undefined | new Number(1)) !== 1) { - $ERROR('#4: (undefined | new Number(1)) === 1. Actual: ' + ((undefined | new Number(1)))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A3_T2.5.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A3_T2.5.js deleted file mode 100644 index 8c65d951f..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A3_T2.5.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.10.3_A3_T2.5; - * @section: 11.10.3; - * @assertion: Operator x | y returns ToNumber(x) | ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between String (primitive or object) and Boolean (primitive and object); -*/ - -//CHECK#1 -if ((true | "1") !== 1) { - $ERROR('#1: (true | "1") === 1. Actual: ' + ((true | "1"))); -} - -//CHECK#2 -if (("1" | true) !== 1) { - $ERROR('#2: ("1" | true) === 1. Actual: ' + (("1" | true))); -} - -//CHECK#3 -if ((new Boolean(true) | "1") !== 1) { - $ERROR('#3: (new Boolean(true) | "1") === 1. Actual: ' + ((new Boolean(true) | "1"))); -} - -//CHECK#4 -if (("1" | new Boolean(true)) !== 1) { - $ERROR('#4: ("1" | new Boolean(true)) === 1. Actual: ' + (("1" | new Boolean(true)))); -} - -//CHECK#5 -if ((true | new String("1")) !== 1) { - $ERROR('#5: (true | new String("1")) === 1. Actual: ' + ((true | new String("1")))); -} - -//CHECK#6 -if ((new String("1") | true) !== 1) { - $ERROR('#6: (new String("1") | true) === 1. Actual: ' + ((new String("1") | true))); -} - -//CHECK#7 -if ((new Boolean(true) | new String("1")) !== 1) { - $ERROR('#7: (new Boolean(true) | new String("1")) === 1. Actual: ' + ((new Boolean(true) | new String("1")))); -} - -//CHECK#8 -if ((new String("1") | new Boolean(true)) !== 1) { - $ERROR('#8: (new String("1") | new Boolean(true)) === 1. Actual: ' + ((new String("1") | new Boolean(true)))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A3_T2.6.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A3_T2.6.js deleted file mode 100644 index a5a04513f..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A3_T2.6.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.10.3_A3_T2.6; - * @section: 11.10.3; - * @assertion: Operator x | y returns ToNumber(x) | ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between String (primitive or object) and Undefined; - */ - -//CHECK#1 -if (("1" | undefined) !== 1) { - $ERROR('#1: ("1" | undefined) === 1. Actual: ' + (("1" | undefined))); -} - -//CHECK#2 -if ((undefined | "1") !== 1) { - $ERROR('#2: (undefined | "1") === 1. Actual: ' + ((undefined | "1"))); -} - -//CHECK#3 -if ((new String("1") | undefined) !== 1) { - $ERROR('#3: (new String("1") | undefined) === 1. Actual: ' + ((new String("1") | undefined))); -} - -//CHECK#4 -if ((undefined | new String("1")) !== 1) { - $ERROR('#4: (undefined | new String("1")) === 1. Actual: ' + ((undefined | new String("1")))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A3_T2.7.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A3_T2.7.js deleted file mode 100644 index 1f65aa0cb..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A3_T2.7.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.10.3_A3_T2.7; - * @section: 11.10.3; - * @assertion: Operator x | y returns ToNumber(x) | ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between String (primitive or object) and Null; - */ - -//CHECK#1 -if (("1" | null) !== 1) { - $ERROR('#1: ("1" | null) === 1. Actual: ' + (("1" | null))); -} - -//CHECK#2 -if ((null | "1") !== 1) { - $ERROR('#2: (null | "1") === 1. Actual: ' + ((null | "1"))); -} - -//CHECK#3 -if ((new String("1") | null) !== 1) { - $ERROR('#3: (new String("1") | null) === 1. Actual: ' + ((new String("1") | null))); -} - -//CHECK#4 -if ((null | new String("1")) !== 1) { - $ERROR('#4: (null | new String("1")) === 1. Actual: ' + ((null | new String("1")))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A3_T2.8.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A3_T2.8.js deleted file mode 100644 index 4cf9d8747..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A3_T2.8.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.10.3_A3_T2.8; - * @section: 11.10.3; - * @assertion: Operator x | y returns ToNumber(x) | ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Undefined; - */ - -//CHECK#1 -if ((true | undefined) !== 1) { - $ERROR('#1: (true | undefined) === 1. Actual: ' + ((true | undefined))); -} - -//CHECK#2 -if ((undefined | true) !== 1) { - $ERROR('#2: (undefined | true) === 1. Actual: ' + ((undefined | true))); -} - -//CHECK#3 -if ((new Boolean(true) | undefined) !== 1) { - $ERROR('#3: (new Boolean(true) | undefined) === 1. Actual: ' + ((new Boolean(true) | undefined))); -} - -//CHECK#4 -if ((undefined | new Boolean(true)) !== 1) { - $ERROR('#4: (undefined | new Boolean(true)) === 1. Actual: ' + ((undefined | new Boolean(true)))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A3_T2.9.js b/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A3_T2.9.js deleted file mode 100644 index 5d5b56fb1..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.10_Binary_Bitwise_Operators/11.10.3_OR_Operator/S11.10.3_A3_T2.9.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.10.3_A3_T2.9; - * @section: 11.10.3; - * @assertion: Operator x | y returns ToNumber(x) | ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Null; - */ - -//CHECK#1 -if ((true | null) !== 1) { - $ERROR('#1: (true | null) === 1. Actual: ' + ((true | null))); -} - -//CHECK#2 -if ((null | true) !== 1) { - $ERROR('#2: (null | true) === 1. Actual: ' + ((null | true))); -} - -//CHECK#3 -if ((new Boolean(true) | null) !== 1) { - $ERROR('#3: (new Boolean(true) | null) === 1. Actual: ' + ((new Boolean(true) | null))); -} - -//CHECK#4 -if ((null | new Boolean(true)) !== 1) { - $ERROR('#4: (null | new Boolean(true)) === 1. Actual: ' + ((null | new Boolean(true)))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.1_Logical_AND_Operator/S11.11.1_A1.js b/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.1_Logical_AND_Operator/S11.11.1_A1.js deleted file mode 100644 index 56331035c..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.1_Logical_AND_Operator/S11.11.1_A1.js +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.11.1_A1; -* @section: 11.11.1; -* @assertion: White Space and Line Terminator between LogicalANDExpression and "&&" or between "&&" and BitwiseORExpression are allowed; -* @description: Checking by using eval; -*/ - -//CHECK#1 -if ((eval("true\u0009&&\u0009true")) !== true) { - $ERROR('#1: (true\\u0009&&\\u0009true) === true'); -} - -//CHECK#2 -if ((eval("true\u000B&&\u000Btrue")) !== true) { - $ERROR('#2: (true\\u000B&&\\u000Btrue) === true'); -} - -//CHECK#3 -if ((eval("true\u000C&&\u000Ctrue")) !== true) { - $ERROR('#3: (true\\u000C&&\\u000Ctrue) === true'); -} - -//CHECK#4 -if ((eval("true\u0020&&\u0020true")) !== true) { - $ERROR('#4: (true\\u0020&&\\u0020true) === true'); -} - -//CHECK#5 -if ((eval("true\u00A0&&\u00A0true")) !== true) { - $ERROR('#5: (true\\u00A0&&\\u00A0true) === true'); -} - -//CHECK#6 -if ((eval("true\u000A&&\u000Atrue")) !== true) { - $ERROR('#6: (true\\u000A&&\\u000Atrue) === true'); -} - -//CHECK#7 -if ((eval("true\u000D&&\u000Dtrue")) !== true) { - $ERROR('#7: (true\\u000D&&\\u000Dtrue) === true'); -} - -//CHECK#8 -if ((eval("true\u2028&&\u2028true")) !== true) { - $ERROR('#8: (true\\u2028&&\\u2028true) === true'); -} - -//CHECK#9 -if ((eval("true\u2029&&\u2029true")) !== true) { - $ERROR('#9: (true\\u2029&&\\u2029true) === true'); -} - - -//CHECK#10 -if ((eval("true\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029&&\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029true")) !== true) { - $ERROR('#10: (true\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029&&\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029true) === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.1_Logical_AND_Operator/S11.11.1_A2.1_T1.js b/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.1_Logical_AND_Operator/S11.11.1_A2.1_T1.js deleted file mode 100644 index 16940f2cb..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.1_Logical_AND_Operator/S11.11.1_A2.1_T1.js +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.11.1_A2.1_T1; -* @section: 11.11.1, 8.7.1; -* @assertion: Operator x && y uses GetValue; -* @description: Either Type is not Reference or GetBase is not null; -*/ - -//CHECK#1 -if ((false && true) !== false) { - $ERROR('#1: (false && true) === false'); -} - -//CHECK#2 -if ((true && false) !== false) { - $ERROR('#2: (true && false) === false'); -} - -//CHECK#3 -var x = false; -if ((x && true) !== false) { - $ERROR('#3: var x = false; (x && true) === false'); -} - -//CHECK#4 -var y = new Boolean(false); -if ((true && y) !== y) { - $ERROR('#4: var y = new Boolean(false); (true && y) === y'); -} - -//CHECK#5 -var x = false; -var y = true; -if ((x && y) !== false) { - $ERROR('#5: var x = false; var y = true; (x && y) === false'); -} - -//CHECK#6 -var x = true; -var y = new Boolean(false); -if ((x && y) !== y) { - $ERROR('#6: var x = true; var y = new Boolean(false); (x && y) === y'); -} - -//CHECK#7 -var objectx = new Object(); -var objecty = new Object(); -objectx.prop = true; -objecty.prop = 1.1; -if ((objectx.prop && objecty.prop) !== objecty.prop) { - $ERROR('#7: var objectx = new Object(); var objecty = new Object(); objectx.prop = true; objecty.prop = 1; (objectx.prop && objecty.prop) === objecty.prop'); -} - -//CHECK#8 -var objectx = new Object(); -var objecty = new Object(); -objectx.prop = 0; -objecty.prop = true; -if ((objectx.prop && objecty.prop) !== objectx.prop) { - $ERROR('#8: var objectx = new Object(); var objecty = new Object(); objectx.prop = 0; objecty.prop = true; (objectx.prop && objecty.prop) === objectx.prop'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.1_Logical_AND_Operator/S11.11.1_A2.1_T2.js b/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.1_Logical_AND_Operator/S11.11.1_A2.1_T2.js deleted file mode 100644 index 68a1e2f54..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.1_Logical_AND_Operator/S11.11.1_A2.1_T2.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.11.1_A2.1_T2; -* @section: 11.11.1, 8.7.1; -* @assertion: Operator x && y uses GetValue; -* @description: If GetBase(x) is null, throw ReferenceError; -*/ - -//CHECK#1 -try { - x && true; - $ERROR('#1.1: x && true throw ReferenceError. Actual: ' + (x && true)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: x && true throw ReferenceError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.1_Logical_AND_Operator/S11.11.1_A2.1_T3.js b/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.1_Logical_AND_Operator/S11.11.1_A2.1_T3.js deleted file mode 100644 index 2293761cc..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.1_Logical_AND_Operator/S11.11.1_A2.1_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.11.1_A2.1_T3; -* @section: 11.11.1, 8.7.1; -* @assertion: Operator x && y uses GetValue; -* @description: If ToBoolean(x) is true and GetBase(y) is null, throw ReferenceError; -*/ - -//CHECK#1 -try { - true && y; - $ERROR('#1.1: true && y throw ReferenceError. Actual: ' + (true && y)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: true && y throw ReferenceError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.1_Logical_AND_Operator/S11.11.1_A2.1_T4.js b/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.1_Logical_AND_Operator/S11.11.1_A2.1_T4.js deleted file mode 100644 index 96378fd12..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.1_Logical_AND_Operator/S11.11.1_A2.1_T4.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.11.1_A2.1_T4; -* @section: 11.11.1, 8.7.1, 16; -* @assertion: Operator x && y uses GetValue; -* @description: If ToBoolean(x) is false and GetBase(y) is null, return false; -*/ - -//CHECK#1 -if ((false && x) !== false) { - $ERROR('#1: (false && x) === false'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.1_Logical_AND_Operator/S11.11.1_A2.4_T1.js b/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.1_Logical_AND_Operator/S11.11.1_A2.4_T1.js deleted file mode 100644 index d8f764904..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.1_Logical_AND_Operator/S11.11.1_A2.4_T1.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.11.1_A2.4_T1; - * @section: 11.11.1; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with "="; -*/ - -//CHECK#1 -var x = false; -if (((x = true) && x) !== true) { - $ERROR('#1: var x = false; ((x = true) && x) === true'); -} - -//CHECK#2 -var x = false; -if ((x && (x = true)) !== false) { - $ERROR('#2: var x = false; (x && (x = true)) === false'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.1_Logical_AND_Operator/S11.11.1_A2.4_T2.js b/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.1_Logical_AND_Operator/S11.11.1_A2.4_T2.js deleted file mode 100644 index 1e317d248..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.1_Logical_AND_Operator/S11.11.1_A2.4_T2.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.11.1_A2.4_T2; - * @section: 11.11.1; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with "throw"; -*/ - -//CHECK#1 -var x = function () { throw "x"; }; -var y = function () { throw "y"; }; -try { - x() && y(); - $ERROR('#1.1: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() && y() throw "x". Actual: ' + (x() && y())); -} catch (e) { - if (e === "y") { - $ERROR('#1.2: First expression is evaluated first, and then second expression'); - } else { - if (e !== "x") { - $ERROR('#1.3: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() && y() throw "x". Actual: ' + (e)); - } - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.1_Logical_AND_Operator/S11.11.1_A2.4_T3.js b/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.1_Logical_AND_Operator/S11.11.1_A2.4_T3.js deleted file mode 100644 index 2be5f21b6..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.1_Logical_AND_Operator/S11.11.1_A2.4_T3.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.11.1_A2.4_T3; - * @section: 11.11.1; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with undeclarated variables; -*/ - -//CHECK#1 -try { - x && (x = true); - $ERROR('#1.1: x && (x = true) throw ReferenceError. Actual: ' + (x && (x = true))); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: x && (x = true) throw ReferenceError. Actual: ' + (e)); - } -} - -//CHECK#2 -if (((y = true) && y) !== true) { - $ERROR('#2: ((y = true) && y) === true'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.1_Logical_AND_Operator/S11.11.1_A3_T1.js b/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.1_Logical_AND_Operator/S11.11.1_A3_T1.js deleted file mode 100644 index 4a93383fa..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.1_Logical_AND_Operator/S11.11.1_A3_T1.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.11.1_A3_T1; -* @section: 11.11.1; -* @assertion: If ToBoolean(x) is false, return x; -* @description: Type(x) is primitive boolean and Type(y) is changed between primitive boolean and Boolean object; -*/ - -//CHECK#1 -if ((false && true) !== false) { - $ERROR('#1: (false && true) === false'); -} - -//CHECK#2 -if ((false && false) !== false) { - $ERROR('#2: (false && false) === false'); -} - -//CHECK#3 -if ((false && new Boolean(true)) !== false) { - $ERROR('#3: (false && new Boolean(true)) === false'); -} - -//CHECK#4 -if ((false && new Boolean(false)) !== false) { - $ERROR('#4: (false && new Boolean(false)) === false'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.1_Logical_AND_Operator/S11.11.1_A3_T2.js b/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.1_Logical_AND_Operator/S11.11.1_A3_T2.js deleted file mode 100644 index 8eb71f0c1..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.1_Logical_AND_Operator/S11.11.1_A3_T2.js +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.11.1_A3_T2; - * @section: 11.11.1; - * @assertion: If ToBoolean(x) is false, return x; - * @description: Type(x) and Type(y) vary between primitive number and Number object; - */ - -//CHECK#1 -if ((-0 && -1) !== 0) { - $ERROR('#1.1: (-0 && -1) === 0'); -} else { - if ((1 / (-0 && -1)) !== Number.NEGATIVE_INFINITY) { - $ERROR('#1.2: (-0 && -1) === -0'); - } -} - -//CHECK#2 -if ((0 && new Number(-1)) !== 0) { - $ERROR('#2.1: (0 && new Number(-1)) === 0'); -} else { - if ((1 / (0 && new Number(-1))) !== Number.POSITIVE_INFINITY) { - $ERROR('#2.2: (0 && new Number(-1)) === +0'); - } -} - -//CHECK#3 -if ((isNaN(NaN && 1)) !== true) { - $ERROR('#3: (NaN && 1) === Not-a-Number'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.1_Logical_AND_Operator/S11.11.1_A3_T3.js b/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.1_Logical_AND_Operator/S11.11.1_A3_T3.js deleted file mode 100644 index ba5e4b2b5..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.1_Logical_AND_Operator/S11.11.1_A3_T3.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.11.1_A3_T3; -* @section: 11.11.1; -* @assertion: If ToBoolean(x) is false, return x; -* @description: Type(x) and Type(y) vary between primitive string and String object; -*/ - -//CHECK#1 -if (("" && "1") !== "") { - $ERROR('#1: ("" && "1") === ""'); -} - -//CHECK#2 -if (("" && new String("1")) !== "") { - $ERROR('#2: ("" && new String("1")) === ""'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.1_Logical_AND_Operator/S11.11.1_A3_T4.js b/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.1_Logical_AND_Operator/S11.11.1_A3_T4.js deleted file mode 100644 index cbb05d875..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.1_Logical_AND_Operator/S11.11.1_A3_T4.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.11.1_A3_T4; -* @section: 11.11.1; -* @assertion: If ToBoolean(x) is false, return x; -* @description: Type(x) or Type(y) is changed between null and undefined; -*/ - -//CHECK#1 -if ((undefined && true) !== undefined) { - $ERROR('#1: (undefined && true) === undefined'); -} - -//CHECK#2 -if ((null && false) !== null) { - $ERROR('#2: (null && false) === null'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.1_Logical_AND_Operator/S11.11.1_A4_T1.js b/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.1_Logical_AND_Operator/S11.11.1_A4_T1.js deleted file mode 100644 index 2858d5421..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.1_Logical_AND_Operator/S11.11.1_A4_T1.js +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.11.1_A4_T1; -* @section: 11.11.1; -* @assertion: If ToBoolean(x) is true, return y; -* @description: Type(x) and Type(y) vary between primitive boolean and Boolean object; -*/ - -//CHECK#1 -if ((true && true) !== true) { - $ERROR('#1: (true && true) === true'); -} - -//CHECK#2 -if ((true && false) !== false) { - $ERROR('#2: (true && false) === false'); -} - -//CHECK#3 -var y = new Boolean(true); -if ((new Boolean(true) && y) !== y) { - $ERROR('#3: (var y = new Boolean(true); (new Boolean(true) && y) === y'); -} - -//CHECK#4 -var y = new Boolean(false); -if ((new Boolean(true) && y) !== y) { - $ERROR('#4: (var y = new Boolean(false); (new Boolean(true) && y) === y'); -} - -//CHECK#5 -var y = new Boolean(true); -if ((new Boolean(false) && y) !== y) { - $ERROR('#5: (var y = new Boolean(true); (new Boolean(false) && y) === y'); -} - -//CHECK#6 -var y = new Boolean(false); -if ((new Boolean(false) && y) !== y) { - $ERROR('#6: (var y = new Boolean(false); (new Boolean(false) && y) === y'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.1_Logical_AND_Operator/S11.11.1_A4_T2.js b/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.1_Logical_AND_Operator/S11.11.1_A4_T2.js deleted file mode 100644 index 55b26f29e..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.1_Logical_AND_Operator/S11.11.1_A4_T2.js +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.11.1_A4_T2; -* @section: 11.11.1; -* @assertion: If ToBoolean(x) is true, return y; -* @description: Type(x) and Type(y) vary between primitive number and Number object; -*/ - -//CHECK#1 -if ((-1 && -0) !== 0) { - $ERROR('#1.1: (-1 && -0) === 0'); -} else { - if ((1 / (-1 && -0)) !== Number.NEGATIVE_INFINITY) { - $ERROR('#1.2: (-1 && -0) === -0'); - } -} - -//CHECK#2 -if ((-1 && 0) !== 0) { - $ERROR('#2.1: (-1 && 0) === 0'); -} else { - if ((1 / (-1 && 0)) !== Number.POSITIVE_INFINITY) { - $ERROR('#2.2: (-1 && 0) === +0'); - } -} - -//CHECK#3 -if ((isNaN(0.1 && NaN)) !== true) { - $ERROR('#3: (0.1 && NaN) === Not-a-Number'); -} - -//CHECK#4 -var y = new Number(0); -if ((new Number(-1) && y) !== y) { - $ERROR('#4: (var y = new Number(0); (new Number(-1) && y) === y'); -} - -//CHECK#5 -var y = new Number(NaN); -if ((new Number(0) && y) !== y) { - $ERROR('#5: (var y = new Number(NaN); (new Number(0) && y) === y'); -} - -//CHECK#6 -var y = new Number(-1); -if ((new Number(NaN) && y) !== y) { - $ERROR('#6: (var y = new Number(-1); (new Number(NaN) && y) === y'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.1_Logical_AND_Operator/S11.11.1_A4_T3.js b/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.1_Logical_AND_Operator/S11.11.1_A4_T3.js deleted file mode 100644 index faf87656a..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.1_Logical_AND_Operator/S11.11.1_A4_T3.js +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.11.1_A4_T3; -* @section: 11.11.1; -* @assertion: If ToBoolean(x) is true, return y; -* @description: Type(x) and Type(y) vary between primitive string and String object; -*/ - -//CHECK#1 -if (("0" && "-1") !== "-1") { - $ERROR('#-1: ("0" && "-1") === "-1"'); -} - -//CHECK#2 -if (("-1" && "x") !== "x") { - $ERROR('#2: ("-1" && "x") === "x"'); -} - -//CHECK#3 -var y = new String(-1); -if ((new String("-1") && y) !== y) { - $ERROR('#3: (var y = new String(-1); (new String("-1") && y) === y'); -} - -//CHECK#4 -var y = new String(NaN); -if ((new String("0") && y) !== y) { - $ERROR('#4: (var y = new String(NaN); (new String("0") && y) === y'); -} - -//CHECK#5 -var y = new String("-x"); -if ((new String("x") && y) !== y) { - $ERROR('#5: (var y = new String("-x"); (new String("x") && y) === y'); -} - -//CHECK#6 -var y = new String(-1); -if ((new String(NaN) && y) !== y) { - $ERROR('#6: (var y = new String(-1); (new String(NaN) && y) === y'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.1_Logical_AND_Operator/S11.11.1_A4_T4.js b/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.1_Logical_AND_Operator/S11.11.1_A4_T4.js deleted file mode 100644 index f6e66e7ca..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.1_Logical_AND_Operator/S11.11.1_A4_T4.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.11.1_A4_T4; -* @section: 11.11.1; -* @assertion: If ToBoolean(x) is true, return y; -* @description: Type(x) or Type(y) is changed between null and undefined; -*/ - -//CHECK#1 -if ((true && undefined) !== undefined) { - $ERROR('#1: (true && undefined) === undefined'); -} - -//CHECK#2 -if ((true && null) !== null) { - $ERROR('#2: (true && null) === null'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.2_Logical_OR_Operator/S11.11.2_A1.js b/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.2_Logical_OR_Operator/S11.11.2_A1.js deleted file mode 100644 index 243b6a399..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.2_Logical_OR_Operator/S11.11.2_A1.js +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.11.2_A1; -* @section: 11.11.2; -* @assertion: White Space and Line Terminator between LogicalORExpression and "||" or between "||" and LogicalANDExpression are allowed; -* @description: Checking by using eval; -*/ - -//CHECK#1 -if ((eval("false\u0009||\u0009true")) !== true) { - $ERROR('#1: (false\\u0009||\\u0009true) === true'); -} - -//CHECK#2 -if ((eval("false\u000B||\u000Btrue")) !== true) { - $ERROR('#2: (false\\u000B||\\u000Btrue) === true'); -} - -//CHECK#3 -if ((eval("false\u000C||\u000Ctrue")) !== true) { - $ERROR('#3: (false\\u000C||\\u000Ctrue) === true'); -} - -//CHECK#4 -if ((eval("false\u0020||\u0020true")) !== true) { - $ERROR('#4: (false\\u0020||\\u0020true) === true'); -} - -//CHECK#5 -if ((eval("false\u00A0||\u00A0true")) !== true) { - $ERROR('#5: (false\\u00A0||\\u00A0true) === true'); -} - -//CHECK#6 -if ((eval("false\u000A||\u000Atrue")) !== true) { - $ERROR('#6: (false\\u000A||\\u000Atrue) === true'); -} - -//CHECK#7 -if ((eval("false\u000D||\u000Dtrue")) !== true) { - $ERROR('#7: (false\\u000D||\\u000Dtrue) === true'); -} - -//CHECK#8 -if ((eval("false\u2028||\u2028true")) !== true) { - $ERROR('#8: (false\\u2028||\\u2028true) === true'); -} - -//CHECK#9 -if ((eval("false\u2029||\u2029true")) !== true) { - $ERROR('#9: (false\\u2029||\\u2029true) === true'); -} - - -//CHECK#10 -if ((eval("false\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029||\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029true")) !== true) { - $ERROR('#10: (false\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029||\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029true) === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.2_Logical_OR_Operator/S11.11.2_A2.1_T1.js b/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.2_Logical_OR_Operator/S11.11.2_A2.1_T1.js deleted file mode 100644 index 8e07263ab..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.2_Logical_OR_Operator/S11.11.2_A2.1_T1.js +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.11.2_A2.1_T1; -* @section: 11.11.2, 8.7.1; -* @assertion: Operator x || y uses GetValue; -* @description: Either Type is not Reference or GetBase is not null; -*/ - -//CHECK#1 -if ((true || false) !== true) { - $ERROR('#1: (true || false) === true'); -} - -//CHECK#2 -if ((false || true) !== true) { - $ERROR('#2: (false || true) === true'); -} - -//CHECK#3 -var x = new Boolean(false); -if ((x || true) !== x) { - $ERROR('#3: var x = Boolean(false); (x || true) === x'); -} - -//CHECK#4 -var y = new Boolean(true); -if ((false || y) !== y) { - $ERROR('#4: var y = Boolean(true); (false || y) === y'); -} - -//CHECK#5 -var x = new Boolean(false); -var y = new Boolean(true); -if ((x || y) !== x) { - $ERROR('#5: var x = new Boolean(false); var y = new Boolean(true); (x || y) === x'); -} - -//CHECK#6 -var x = false; -var y = new Boolean(true); -if ((x || y) !== y) { - $ERROR('#6: var x = false; var y = new Boolean(true); (x || y) === y'); -} - -//CHECK#7 -var objectx = new Object(); -var objecty = new Object(); -objectx.prop = false; -objecty.prop = 1.1; -if ((objectx.prop || objecty.prop) !== objecty.prop) { - $ERROR('#7: var objectx = new Object(); var objecty = new Object(); objectx.prop = false; objecty.prop = 1; (objectx.prop || objecty.prop) === objecty.prop'); -} - -//CHECK#8 -var objectx = new Object(); -var objecty = new Object(); -objectx.prop = 1.1; -objecty.prop = false; -if ((objectx.prop || objecty.prop) !== objectx.prop) { - $ERROR('#8: var objectx = new Object(); var objecty = new Object(); objectx.prop = 1.1; objecty.prop = false; (objectx.prop || objecty.prop) === objectx.prop'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.2_Logical_OR_Operator/S11.11.2_A2.1_T2.js b/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.2_Logical_OR_Operator/S11.11.2_A2.1_T2.js deleted file mode 100644 index e161582fe..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.2_Logical_OR_Operator/S11.11.2_A2.1_T2.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.11.2_A2.1_T2; -* @section: 11.11.2, 8.7.1; -* @assertion: Operator x || y uses GetValue; -* @description: If GetBase(x) is null, throw ReferenceError; -*/ - -//CHECK#1 -try { - x || true; - $ERROR('#1.1: x || true throw ReferenceError. Actual: ' + (x || true)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: x || true throw ReferenceError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.2_Logical_OR_Operator/S11.11.2_A2.1_T3.js b/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.2_Logical_OR_Operator/S11.11.2_A2.1_T3.js deleted file mode 100644 index 8e238c45d..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.2_Logical_OR_Operator/S11.11.2_A2.1_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.11.2_A2.1_T3; -* @section: 11.11.2, 8.7.1; -* @assertion: Operator x || y uses GetValue; -* @description: If ToBoolean(x) is false and GetBase(y) is null, throw ReferenceError; -*/ - -//CHECK#1 -try { - false || y; - $ERROR('#1.1: false || y throw ReferenceError. Actual: ' + (false || y)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: false || y throw ReferenceError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.2_Logical_OR_Operator/S11.11.2_A2.1_T4.js b/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.2_Logical_OR_Operator/S11.11.2_A2.1_T4.js deleted file mode 100644 index 7a9614879..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.2_Logical_OR_Operator/S11.11.2_A2.1_T4.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.11.2_A2.1_T4; -* @section: 11.11.2, 8.7.1, 16; -* @assertion: Operator x || y uses GetValue; -* @description: If ToBoolean(x) is true and GetBase(y) is null, return true; -*/ - -//CHECK#1 -if ((true || x) !== true) { - $ERROR('#1: (true || x) === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.2_Logical_OR_Operator/S11.11.2_A2.4_T1.js b/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.2_Logical_OR_Operator/S11.11.2_A2.4_T1.js deleted file mode 100644 index 5080e90af..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.2_Logical_OR_Operator/S11.11.2_A2.4_T1.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.11.2_A2.4_T1; - * @section: 11.11.2; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with "="; -*/ - -//CHECK#1 -var x = true; -if (((x = false) || x) !== false) { - $ERROR('#1: var x = true; ((x = false) || x) === false'); -} - -//CHECK#2 -var x = true; -if ((x || (x = false)) !== true) { - $ERROR('#2: var x = true; (x || (x = false)) === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.2_Logical_OR_Operator/S11.11.2_A2.4_T2.js b/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.2_Logical_OR_Operator/S11.11.2_A2.4_T2.js deleted file mode 100644 index 8aa181c25..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.2_Logical_OR_Operator/S11.11.2_A2.4_T2.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.11.2_A2.4_T2; - * @section: 11.11.2; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with "throw"; -*/ - -//CHECK#1 -var x = function () { throw "x"; }; -var y = function () { throw "y"; }; -try { - x() || y(); - $ERROR('#1.1: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() || y() throw "x". Actual: ' + (x() || y())); -} catch (e) { - if (e === "y") { - $ERROR('#1.2: First expression is evaluated first, and then second expression'); - } else { - if (e !== "x") { - $ERROR('#1.3: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() || y() throw "x". Actual: ' + (e)); - } - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.2_Logical_OR_Operator/S11.11.2_A2.4_T3.js b/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.2_Logical_OR_Operator/S11.11.2_A2.4_T3.js deleted file mode 100644 index 49f5a3949..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.2_Logical_OR_Operator/S11.11.2_A2.4_T3.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.11.2_A2.4_T3; - * @section: 11.11.2; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with undeclarated variables; -*/ - -//CHECK#1 -try { - x || (x = true); - $ERROR('#1.1: x || (x = true) throw ReferenceError. Actual: ' + (x || (x = true))); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: x || (x = true) throw ReferenceError. Actual: ' + (e)); - } -} - -//CHECK#2 -if (((y = true) || y) !== true) { - $ERROR('#2: ((y = true) || y) === true'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.2_Logical_OR_Operator/S11.11.2_A3_T1.js b/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.2_Logical_OR_Operator/S11.11.2_A3_T1.js deleted file mode 100644 index 7200f99d3..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.2_Logical_OR_Operator/S11.11.2_A3_T1.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.11.2_A3_T1; -* @section: 11.11.2; -* @assertion: If ToBoolean(x) is false, return y; -* @description: Type(x) and Type(y) vary between primitive boolean and Boolean object; -*/ - -//CHECK#1 -if ((false || true) !== true) { - $ERROR('#1: (false || true) === true'); -} - -//CHECK#2 -if ((false || false) !== false) { - $ERROR('#2: (false || false) === false'); -} - -//CHECK#3 -var y = new Boolean(true); -if ((false || y) !== y) { - $ERROR('#3: (var y = new Boolean(true); false || y) === y'); -} - -//CHECK#4 -var y = new Boolean(false); -if ((false || y) !== y) { - $ERROR('#4: (var y = new Boolean(false); false || y) === y'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.2_Logical_OR_Operator/S11.11.2_A3_T2.js b/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.2_Logical_OR_Operator/S11.11.2_A3_T2.js deleted file mode 100644 index 08f8cd4e8..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.2_Logical_OR_Operator/S11.11.2_A3_T2.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.11.2_A3_T2; - * @section: 11.11.2; - * @assertion: If ToBoolean(x) is false, return y; - * @description: Type(x) and Type(y) vary between primitive number and Number object; - */ - -//CHECK#1 -if ((0 || -0) !== 0) { - $ERROR('#1.1: (0 || -0) === 0'); -} else { - if ((1 / (0 || -0)) !== Number.NEGATIVE_INFINITY) { - $ERROR('#1.2: (0 || -0) === -0'); - } -} - -//CHECK#2 -if ((-0 || 0) !== 0) { - $ERROR('#2.1: (-0 || 0) === 0'); -} else { - if ((1 / (-0 || 0)) !== Number.POSITIVE_INFINITY) { - $ERROR('#2.2: (-0 || 0) === +0'); - } -} - -//CHECK#3 -var y = new Number(-1); -if ((0 || y) !== y) { - $ERROR('#3: (var y = new Number(-1); 0 || y) === y'); -} - -//CHECK#4 -var y = new Number(0); -if ((NaN || y) !== y) { - $ERROR('#4: (var y = new Number(0); NaN || y) === y'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.2_Logical_OR_Operator/S11.11.2_A3_T3.js b/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.2_Logical_OR_Operator/S11.11.2_A3_T3.js deleted file mode 100644 index 56a18ceff..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.2_Logical_OR_Operator/S11.11.2_A3_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.11.2_A3_T3; -* @section: 11.11.2; -* @assertion: If ToBoolean(x) is false, return y; -* @description: Type(x) and Type(y) vary between primitive string and String object; -*/ - -//CHECK#1 -if (("" || "1") !== "1") { - $ERROR('#1: ("" || "1") === "1"'); -} - -//CHECK#2 -var y = new String("1"); -if (("" || y) !== y) { - $ERROR('#2: (var y = new String("1"); "" || y) === y'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.2_Logical_OR_Operator/S11.11.2_A3_T4.js b/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.2_Logical_OR_Operator/S11.11.2_A3_T4.js deleted file mode 100644 index bf45e48ac..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.2_Logical_OR_Operator/S11.11.2_A3_T4.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.11.2_A3_T4; -* @section: 11.11.2; -* @assertion: If ToBoolean(x) is false, return y; -* @description: Type(x) or Type(y) is changed between null and undefined; -*/ - -//CHECK#1 -if ((false || undefined) !== undefined) { - $ERROR('#1: (false || undefined) === undefined'); -} - -//CHECK#2 -if ((false || null) !== null) { - $ERROR('#2: (false || null) === null'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.2_Logical_OR_Operator/S11.11.2_A4_T1.js b/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.2_Logical_OR_Operator/S11.11.2_A4_T1.js deleted file mode 100644 index c26fc64a8..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.2_Logical_OR_Operator/S11.11.2_A4_T1.js +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.11.2_A4_T1; -* @section: 11.11.2; -* @assertion: If ToBoolean(x) is true, return x; -* @description: Type(x) and Type(y) vary between primitive boolean and Boolean object; -*/ - -//CHECK#1 -if (((true || true)) !== true) { - $ERROR('#1: (true || true) === true'); -} - -//CHECK#2 -if ((true || false) !== true) { - $ERROR('#2: (true || false) === true'); -} - -//CHECK#3 -var x = new Boolean(true); -if ((x || new Boolean(true)) !== x) { - $ERROR('#3: (var x = new Boolean(true); (x || new Boolean(true)) === x'); -} - -//CHECK#4 -var x = new Boolean(true); -if ((x || new Boolean(false)) !== x) { - $ERROR('#4: (var x = new Boolean(true); (x || new Boolean(false)) === x'); -} - -//CHECK#5 -var x = new Boolean(false); -if ((x || new Boolean(true)) !== x) { - $ERROR('#5: (var x = new Boolean(false); (x || new Boolean(true)) === x'); -} - -//CHECK#6 -var x = new Boolean(false); -if ((x || new Boolean(false)) !== x) { - $ERROR('#6: (var x = new Boolean(false); (x || new Boolean(false)) === x'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.2_Logical_OR_Operator/S11.11.2_A4_T2.js b/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.2_Logical_OR_Operator/S11.11.2_A4_T2.js deleted file mode 100644 index 684e0e293..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.2_Logical_OR_Operator/S11.11.2_A4_T2.js +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.11.2_A4_T2; -* @section: 11.11.2; -* @assertion: If ToBoolean(x) is true, return x; -* @description: Type(x) and Type(y) vary between primitive number and Number object; -*/ - -//CHECK#1 -if ((-1 || 1) !== -1) { - $ERROR('#1: (-1 || 1) === -1'); -} - -//CHECK#2 -if ((1 || new Number(0)) !== 1) { - $ERROR('#2: (1 || new Number(0)) === 1'); -} - -//CHECK#3 -if ((-1 || NaN) !== -1) { - $ERROR('#3: (-1 || NaN) === -1'); -} - -//CHECK#4 -var x = new Number(-1); -if ((x || new Number(0)) !== x) { - $ERROR('#4: (var x = new Number(-1); (x || new Number(-1)) === x'); -} - -//CHECK#5 -var x = new Number(NaN); -if ((x || new Number(1)) !== x) { - $ERROR('#5: (var x = new Number(NaN); (x || new Number(1)) === x'); -} - -//CHECK#6 -var x = new Number(0); -if ((x || new Number(NaN)) !== x) { - $ERROR('#6: (var x = new Number(0); (x || new Number(NaN)) === x'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.2_Logical_OR_Operator/S11.11.2_A4_T3.js b/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.2_Logical_OR_Operator/S11.11.2_A4_T3.js deleted file mode 100644 index 247722d21..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.2_Logical_OR_Operator/S11.11.2_A4_T3.js +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.11.2_A4_T3; -* @section: 11.11.2; -* @assertion: If ToBoolean(x) is true, return x; -* @description: Type(x) and Type(y) vary between primitive string and String object; -*/ - -//CHECK#1 -if (("-1" || "1") !== "-1") { - $ERROR('#-1: ("-1" || "1") === "-1"'); -} - -//CHECK#2 -if (("-1" || "x") !== "-1") { - $ERROR('#2: ("-1" || "x") === "-1"'); -} - -//CHECK#3 -var x = new String("-1"); -if ((x || new String(-1)) !== x) { - $ERROR('#3: (var x = new String("-1"); (x || new String(-1)) === x'); -} - -//CHECK#4 -var x = new String(NaN); -if ((x || new String("1")) !== x) { - $ERROR('#4: (var x = new String(NaN); (x || new String("1")) === x'); -} - -//CHECK#5 -var x = new String("-x"); -if ((x || new String("x")) !== x) { - $ERROR('#5: (var x = new String("-x"); (x || new String("x")) === x'); -} - -//CHECK#6 -var x = new String(0); -if ((x || new String(NaN)) !== x) { - $ERROR('#6: (var x = new String(0); (x || new String(NaN)) === x'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.2_Logical_OR_Operator/S11.11.2_A4_T4.js b/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.2_Logical_OR_Operator/S11.11.2_A4_T4.js deleted file mode 100644 index 8658881ed..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.11_Binary_Logical_Operators/11.11.2_Logical_OR_Operator/S11.11.2_A4_T4.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.11.2_A4_T4; -* @section: 11.11.2; -* @assertion: If ToBoolean(x) is true, return x; -* @description: Type(x) or Type(y) vary between Null and Undefined; -*/ - -//CHECK#1 -if ((true || undefined) !== true) { - $ERROR('#1: (true || undefined) === true'); -} - -//CHECK#2 -if ((true || null) !== true) { - $ERROR('#2: (true || null) === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.12_Conditional_Operator/S11.12_A1.js b/tests/ES3/Conformance/11_Expressions/11.12_Conditional_Operator/S11.12_A1.js deleted file mode 100644 index 2e4d3f23a..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.12_Conditional_Operator/S11.12_A1.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.12_A1; -* @section: 11.12; -* @assertion: White Space and Line Terminator between LogicalORExpression and "?" or between "?" and AssignmentExpression or between AssignmentExpression and ":" or between ":" and AssignmentExpression are allowed; -* @description: Checking by using eval; -*/ - -//CHECK#1 -if ((eval("false\u0009?\u0009true\u0009:\u0009true")) !== true) { - $ERROR('#1: (false\\u0009?\\u0009true\\u0009:\\u0009true) === true'); -} - -//CHECK#2 -if ((eval("false\u000B?\u000Btrue\u000B:\u000Btrue")) !== true) { - $ERROR('#2: (false\\u000B?\\u000Btrue\\u000B:\\u000Btrue) === true'); -} - -//CHECK#3 -if ((eval("false\u000C?\u000Ctrue\u000C:\u000Ctrue")) !== true) { - $ERROR('#3: (false\\u000C?\\u000Ctrue\\u000C:\\u000Ctrue) === true'); -} - -//CHECK#4 -if ((eval("false\u0020?\u0020true\u0020:\u0020true")) !== true) { - $ERROR('#4: (false\\u0020?\\u0020true\\u0020:\\u0020true) === true'); -} - -//CHECK#5 -if ((eval("false\u00A0?\u00A0true\u00A0:\u00A0true")) !== true) { - $ERROR('#5: (false\\u00A0?\\u00A0true\\u00A0:\\u00A0true) === true'); -} - -//CHECK#6 -if ((eval("false\u000A?\u000Atrue\u000A:\u000Atrue")) !== true) { - $ERROR('#6: (false\\u000A?\\u000Atrue\\u000A:\\u000Atrue) === true'); -} - -//CHECK#7 -if ((eval("false\u000D?\u000Dtrue\u000D:\u000Dtrue")) !== true) { - $ERROR('#7: (false\\u000D?\\u000Dtrue\\u000D:\\u000Dtrue) === true'); -} - -//CHECK#8 -if ((eval("false\u2028?\u2028true\u2028:\u2028true")) !== true) { - $ERROR('#8: (false\\u2028?\\u2028true\\u2028:\\u2028true) === true'); -} - -//CHECK#9 -if ((eval("false\u2029?\u2029true\u2029:\u2029true")) !== true) { - $ERROR('#9: (false\\u2029?\\u2029true\\u2029:\\u2029true) === true'); -} - -//CHECK#10 -if ((eval("false\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029?\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029true\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029:\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029true")) !== true) { - $ERROR('#10: (false\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029?\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029true\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029:\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029true) === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.12_Conditional_Operator/S11.12_A2.1_T1.js b/tests/ES3/Conformance/11_Expressions/11.12_Conditional_Operator/S11.12_A2.1_T1.js deleted file mode 100644 index 9dd3fb29b..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.12_Conditional_Operator/S11.12_A2.1_T1.js +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.12_A2.1_T1; -* @section: 11.12, 8.7.1; -* @assertion: Operator x ? y : z uses GetValue; -* @description: Either Type is not Reference or GetBase is not null; -*/ - -//CHECK#1 -if ((true ? false : true) !== false) { - $ERROR('#1: (true ? false : true) === false'); -} - -//CHECK#2 -if ((false ? false : true) !== true) { - $ERROR('#2: (false ? false : true) === true'); -} - -//CHECK#3 -var x = new Boolean(true); -var y = new Boolean(false); -if ((x ? y : true) !== y) { - $ERROR('#3: var x = new Boolean(true); var y = new Boolean(false); (x ? y : true) === y'); -} - -//CHECK#4 -var z = new Boolean(true); -if ((false ? false : z) !== z) { - $ERROR('#4: var z = new Boolean(true); (false ? false : z) === z'); -} - -//CHECK#5 -var x = new Boolean(true); -var y = new Boolean(false); -var z = new Boolean(true); -if ((x ? y : z) !== y) { - $ERROR('#5: var x = new Boolean(true); var y = new Boolean(false); var z = new Boolean(true); (x ? y : z) === y'); -} - -//CHECK#6 -var x = false; -var y = new Boolean(false); -var z = new Boolean(true); -if ((x ? y : z) !== z) { - $ERROR('#6: var x = false; var y = new Boolean(false); var z = new Boolean(true); (x ? y : z) === z'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.12_Conditional_Operator/S11.12_A2.1_T2.js b/tests/ES3/Conformance/11_Expressions/11.12_Conditional_Operator/S11.12_A2.1_T2.js deleted file mode 100644 index c800904f8..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.12_Conditional_Operator/S11.12_A2.1_T2.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.12_A2.1_T2; -* @section: 11.12, 8.7.1; -* @assertion: Operator x ? y : z uses GetValue; -* @description: If GetBase(x) is null, throw ReferenceError; -*/ - -//CHECK#1 -try { - x ? true : false; - $ERROR('#1.1: x ? true : false throw ReferenceError. Actual: ' + (x ? true : false)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: x ? true : false throw ReferenceError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.12_Conditional_Operator/S11.12_A2.1_T3.js b/tests/ES3/Conformance/11_Expressions/11.12_Conditional_Operator/S11.12_A2.1_T3.js deleted file mode 100644 index 16d2e310b..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.12_Conditional_Operator/S11.12_A2.1_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.12_A2.1_T3; -* @section: 11.12, 8.7.1; -* @assertion: Operator x ? y : z uses GetValue; -* @description: If ToBoolean(x) is true and GetBase(y) is null, throw ReferenceError; -*/ - -//CHECK#1 -try { - true ? y : false; - $ERROR('#1.1: true ? y : false throw ReferenceError. Actual: ' + (true ? y : false)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: true ? y : false throw ReferenceError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.12_Conditional_Operator/S11.12_A2.1_T4.js b/tests/ES3/Conformance/11_Expressions/11.12_Conditional_Operator/S11.12_A2.1_T4.js deleted file mode 100644 index 44b969330..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.12_Conditional_Operator/S11.12_A2.1_T4.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.12_A2.1_T4; -* @section: 11.12, 8.7.1; -* @assertion: Operator x ? y : z uses GetValue; -* @description: If ToBoolean(x) is false and GetBase(z) is null, throw ReferenceError; -*/ - -//CHECK#1 -try { - false ? true : z; - $ERROR('#1.1: false ? true : z throw ReferenceError. Actual: ' + (false ? true : z)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: false ? true : z throw ReferenceError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.12_Conditional_Operator/S11.12_A2.1_T5.js b/tests/ES3/Conformance/11_Expressions/11.12_Conditional_Operator/S11.12_A2.1_T5.js deleted file mode 100644 index 17263398d..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.12_Conditional_Operator/S11.12_A2.1_T5.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.12_A2.1_T5; -* @section: 11.12, 8.7.1, 16; -* @assertion: Operator x ? y : z uses GetValue; -* @description: If ToBoolean(x) is true and GetBase(z) is null, return y; -*/ - -//CHECK#1 -var y = new Object(); -if ((true ? y : z) !== y) { - $ERROR('#1: var y = new Object(); (true ? y : z) === y'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.12_Conditional_Operator/S11.12_A2.1_T6.js b/tests/ES3/Conformance/11_Expressions/11.12_Conditional_Operator/S11.12_A2.1_T6.js deleted file mode 100644 index d4c4ff2b9..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.12_Conditional_Operator/S11.12_A2.1_T6.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.12_A2.1_T6; -* @section: 11.12, 8.7.1, 16; -* @assertion: Operator x ? y : z uses GetValue; -* @description: If ToBoolean(x) is false and GetBase(y) is null, return z; -*/ - -//CHECK#1 -var z = new Object(); -if ((false ? y : z) !== z) { - $ERROR('#1: var z = new Object(); (false ? y : z) === z'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.12_Conditional_Operator/S11.12_A3_T1.js b/tests/ES3/Conformance/11_Expressions/11.12_Conditional_Operator/S11.12_A3_T1.js deleted file mode 100644 index b3b02fa68..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.12_Conditional_Operator/S11.12_A3_T1.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.12_A3_T1; -* @section: 11.12; -* @assertion: If ToBoolean(x) is false, return z; -* @description: Type(y) and Type(z) are boolean primitives; -*/ - -//CHECK#1 -if ((false ? false : true) !== true) { - $ERROR('#1: (false ? false : true) === true'); -} - -//CHECK#2 -var z = new Boolean(true); -if ((false ? true : z) !== z) { - $ERROR('#2: (var y = new Boolean(true); (false ? true : z) === z'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.12_Conditional_Operator/S11.12_A3_T2.js b/tests/ES3/Conformance/11_Expressions/11.12_Conditional_Operator/S11.12_A3_T2.js deleted file mode 100644 index 3bfc4b563..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.12_Conditional_Operator/S11.12_A3_T2.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.12_A3_T2; - * @section: 11.12; - * @assertion: If ToBoolean(x) is false, return z; - * @description: Type(y) and Type(z) are number primitives; - */ - -//CHECK#1 -if ((0 ? 0 : 1) !== 1) { - $ERROR('#1: (0 ? 0 : 1) === 1'); -} - -//CHECK#2 -var z = new Number(1); -if ((0 ? 1 : z) !== z) { - $ERROR('#2: (var y = new Number(1); (0 ? 1 : z) === z'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.12_Conditional_Operator/S11.12_A3_T3.js b/tests/ES3/Conformance/11_Expressions/11.12_Conditional_Operator/S11.12_A3_T3.js deleted file mode 100644 index 45b2c5d0d..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.12_Conditional_Operator/S11.12_A3_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.12_A3_T3; -* @section: 11.12; -* @assertion: If ToBoolean(x) is false, return z; -* @description: Type(y) and Type(z) are string primitives; -*/ - -//CHECK#1 -if (("" ? "" : "1") !== "1") { - $ERROR('#1: ("" ? "" : "1") === "1"'); -} - -//CHECK#2 -var z = new String("1"); -if (("" ? "1" : z) !== z) { - $ERROR('#2: (var y = new String("1"); ("" ? "1" : z) === z'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.12_Conditional_Operator/S11.12_A3_T4.js b/tests/ES3/Conformance/11_Expressions/11.12_Conditional_Operator/S11.12_A3_T4.js deleted file mode 100644 index 747795e0d..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.12_Conditional_Operator/S11.12_A3_T4.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.12_A3_T4; -* @section: 11.12; -* @assertion: If ToBoolean(x) is false, return z; -* @description: Type(x) or Type(y) is changed between null and undefined; -*/ - -//CHECK#1 -if ((false ? true : undefined) !== undefined) { - $ERROR('#1: (false ? true : undefined) === undefined'); -} - -//CHECK#2 -if ((false ? true : null) !== null) { - $ERROR('#2: (false ? true : null) === null'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.12_Conditional_Operator/S11.12_A4_T1.js b/tests/ES3/Conformance/11_Expressions/11.12_Conditional_Operator/S11.12_A4_T1.js deleted file mode 100644 index 7c53a3ef6..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.12_Conditional_Operator/S11.12_A4_T1.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.12_A4_T1; -* @section: 11.12; -* @assertion: If ToBoolean(x) is true, return y; -* @description: Type(y) and Type(z) are boolean primitives; -*/ - -//CHECK#1 -if ((true ? false : true) !== false) { - $ERROR('#1: (true ? false : true) === false'); -} - -//CHECK#2 -var y = new Boolean(true); -if ((true ? y : false) !== y) { - $ERROR('#2: (var y = new Boolean(true); (true ? y : false) === y'); -} - -//CHECK#3 -var y = new Boolean(false); -if ((y ? y : true) !== y) { - $ERROR('#3: (var y = new Boolean(false); (y ? y : true) === y'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.12_Conditional_Operator/S11.12_A4_T2.js b/tests/ES3/Conformance/11_Expressions/11.12_Conditional_Operator/S11.12_A4_T2.js deleted file mode 100644 index 6c4624cfb..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.12_Conditional_Operator/S11.12_A4_T2.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.12_A4_T2; -* @section: 11.12; -* @assertion: If ToBoolean(x) is true, return y; -* @description: Type(y) and Type(z) are number primitives; -*/ - -//CHECK#1 -if ((1 ? 0 : 1) !== 0) { - $ERROR('#1: (1 ? 0 : 1) === 0'); -} - -//CHECK#2 -var y = new Number(1); -if ((1 ? y : 0) !== y) { - $ERROR('#2: (var y = new Number(1); (1 ? y : 0) === y'); -} - -//CHECK#3 -var y = new Number(NaN); -if ((y ? y : 1) !== y) { - $ERROR('#3: (var y = new Number(NaN); (y ? y : 1) === y'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.12_Conditional_Operator/S11.12_A4_T3.js b/tests/ES3/Conformance/11_Expressions/11.12_Conditional_Operator/S11.12_A4_T3.js deleted file mode 100644 index 450afd290..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.12_Conditional_Operator/S11.12_A4_T3.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.12_A4_T3; -* @section: 11.12; -* @assertion: If ToBoolean(x) is true, return y; -* @description: Type(y) and Type(z) are string primitives; -*/ - -//CHECK#1 -if (("1" ? "" : "1") !== "") { - $ERROR('#1: ("1" ? "" : "1") === ""'); -} - -//CHECK#2 -var y = new String("1"); -if (("1" ? y : "") !== y) { - $ERROR('#2: (var y = new String("1"); ("1" ? y : "") === y'); -} - -//CHECK#3 -var y = new String("y"); -if ((y ? y : "1") !== y) { - $ERROR('#3: (var y = new String("y"); (y ? y : "1") === y'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.12_Conditional_Operator/S11.12_A4_T4.js b/tests/ES3/Conformance/11_Expressions/11.12_Conditional_Operator/S11.12_A4_T4.js deleted file mode 100644 index 011126a5d..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.12_Conditional_Operator/S11.12_A4_T4.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.12_A4_T4; -* @section: 11.12; -* @assertion: If ToBoolean(x) is true, return y; -* @description: Type(x) or Type(y) is changed between null and undefined; -*/ - -//CHECK#1 -if ((true ? undefined : true) !== undefined) { - $ERROR('#1: (true ? undefined : true) === undefined'); -} - -//CHECK#2 -if ((true ? null : true) !== null) { - $ERROR('#2: (true ? null : true) === null'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.1_Simple_Assignment/S11.13.1_A1.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.1_Simple_Assignment/S11.13.1_A1.js deleted file mode 100644 index f0d31d204..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.1_Simple_Assignment/S11.13.1_A1.js +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.13.1_A1; -* @section: 11.13.1; -* @assertion: White Space and Line Terminator between LeftHandSideExpression and "=" or between "=" and AssignmentExpression are allowed; -* @description: Checking by using eval; -*/ - -//CHECK#1 -if ((eval("x\u0009=\u0009true")) !== true) { - $ERROR('#1: (x\\u0009=\\u0009true) === true'); -} - -//CHECK#2 -if ((eval("x\u000B=\u000Btrue")) !== true) { - $ERROR('#2: (x\\u000B=\\u000Btrue) === true'); -} - -//CHECK#3 -if ((eval("x\u000C=\u000Ctrue")) !== true) { - $ERROR('#3: (x\\u000C=\\u000Ctrue) === true'); -} - -//CHECK#4 -if ((eval("x\u0020=\u0020true")) !== true) { - $ERROR('#4: (x\\u0020=\\u0020true) === true'); -} - -//CHECK#5 -if ((eval("x\u00A0=\u00A0true")) !== true) { - $ERROR('#5: (x\\u00A0=\\u00A0true) === true'); -} - -//CHECK#6 -if ((eval("x\u000A=\u000Atrue")) !== true) { - $ERROR('#6: (x\\u000A=\\u000Atrue) === true'); -} - -//CHECK#7 -if ((eval("x\u000D=\u000Dtrue")) !== true) { - $ERROR('#7: (x\\u000D=\\u000Dtrue) === true'); -} - -//CHECK#8 -if ((eval("x\u2028=\u2028true")) !== true) { - $ERROR('#8: (x\\u2028=\\u2028true) === true'); -} - -//CHECK#9 -if ((eval("x\u2029=\u2029true")) !== true) { - $ERROR('#9: (x\\u2029=\\u2029true) === true'); -} - - -//CHECK#10 -if ((eval("x\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029=\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029true")) !== true) { - $ERROR('#10: (x\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029=\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029true) === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.1_Simple_Assignment/S11.13.1_A2.1_T1.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.1_Simple_Assignment/S11.13.1_A2.1_T1.js deleted file mode 100644 index ae8e978e4..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.1_Simple_Assignment/S11.13.1_A2.1_T1.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.1_A2.1_T1; - * @section: 11.13.1; - * @assertion: Operator x = y uses GetValue and PutValue; - * @description: Either AssigmentExpression is not Reference or GetBase is not null; -*/ - -//CHECK#1 -x = 1; -if (x !== 1) { - $ERROR('#1: x = 1; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -var x = 1; -if (x !== 1) { - $ERROR('#2: var x = 1; x === 1. Actual: ' + (x)); -} - -//CHECK#3 -y = 1; -x = y; -if (x !== 1) { - $ERROR('#3: y = 1; x = y; x === 1. Actual: ' + (x)); -} - -//CHECK#4 -var y = 1; -var x = y; -if (x !== 1) { - $ERROR('#4: var y = 1; var x = y; x === 1. Actual: ' + (x)); -} - -//CHECK#5 -var objectx = new Object(); -var objecty = new Object(); -objecty.prop = 1.1; -objectx.prop = objecty.prop; -if (objectx.prop !== objecty.prop) { - $ERROR('#5: var objectx = new Object(); var objecty = new Object(); objecty.prop = 1; objectx.prop = objecty.prop; objectx.prop === objecty.prop. Actual: ' + (objectx.prop)); -} else { - if (objectx === objecty) { - $ERROR('#5: var objectx = new Object(); var objecty = new Object(); objecty.prop = 1; objectx.prop = objecty.prop; objectx !== objecty'); - } -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.1_Simple_Assignment/S11.13.1_A2.1_T2.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.1_Simple_Assignment/S11.13.1_A2.1_T2.js deleted file mode 100644 index 3c8b7df6e..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.1_Simple_Assignment/S11.13.1_A2.1_T2.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.1_A2.1_T2; - * @section: 11.13.1; - * @assertion: Operator x = y uses GetValue and PutValue; - * @description: If GetBase(AssigmentExpression) is null, throw ReferenceError; -*/ - -//CHECK#1 -try { - x = y; - $ERROR('#1.1: x = y throw ReferenceError. Actual: ' + (x = y)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: x = y throw ReferenceError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.1_Simple_Assignment/S11.13.1_A2.1_T3.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.1_Simple_Assignment/S11.13.1_A2.1_T3.js deleted file mode 100644 index e427435b5..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.1_Simple_Assignment/S11.13.1_A2.1_T3.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.1_A2.1_T3; - * @section: 11.13.1, 16; - * @assertion: Operator x = y uses GetValue and PutValue; - * @description: If Type(LeftHandSideExpression) is not Reference, throw ReferenceError (or SyntaxError); -* @negative -*/ - -//CHECK#1 -try { - 1 = 1; - $ERROR('#1.1: 1 = 1 throw ReferenceError (or SyntaxError). Actual: ' + (1 = 1)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: 1 = 1 throw ReferenceError (or SyntaxError). Actual: ' + (e)); - } else { - 1 = 1; - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.1_Simple_Assignment/S11.13.1_A3.1.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.1_Simple_Assignment/S11.13.1_A3.1.js deleted file mode 100644 index 1d7dd4a8f..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.1_Simple_Assignment/S11.13.1_A3.1.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.1_A3.1; - * @section: 11.13.1; - * @assertion: Operator x = y PutValue(x, y); - * @description: Checking Expression and Variable statements; -*/ - -//CHECK#1 -var x = 1; -if (x !== 1) { - $ERROR('#1: var x = 1; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -y = 1; -if (y !== 1) { - $ERROR('#2: y = 1; y === 1. Actual: ' + (y)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.1_Simple_Assignment/S11.13.1_A3.2.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.1_Simple_Assignment/S11.13.1_A3.2.js deleted file mode 100644 index e03b08b21..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.1_Simple_Assignment/S11.13.1_A3.2.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.1_A3.2; - * @section: 11.13.1; - * @assertion: Operator x = y returns GetValue(y); - * @description: Checking Expression and Variable statements; -*/ - -//CHECK#1 -var x = 0; -if ((x = 1) !== 1) { - $ERROR('#1: var x = 0; (x = 1) === 1. Actual: ' + ((x = 1))); -} - -//CHECK#2 -x = 0; -if ((x = 1) !== 1) { - $ERROR('#2: x = 0; (x = 1) === 1. Actual: ' + ((x = 1))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.1_Simple_Assignment/S11.13.1_A4_T1.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.1_Simple_Assignment/S11.13.1_A4_T1.js deleted file mode 100644 index 3497dce04..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.1_Simple_Assignment/S11.13.1_A4_T1.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.1_A4_T1; - * @section: 11.13.1; - * @assertion: AssignmentExpression : LeftHandSideExpression = AssignmentExpression; - * @description: Syntax check; -*/ - -//CHECK#1 -x = x = 1; -if (x !== 1) { - $ERROR('#1: The expression x = x = 1 is the same x = (x = 1), not (x = x) = 1. Actual: ' + (x)); -} - - diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.1_Simple_Assignment/S11.13.1_A4_T2.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.1_Simple_Assignment/S11.13.1_A4_T2.js deleted file mode 100644 index 6692f6335..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.1_Simple_Assignment/S11.13.1_A4_T2.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.1_A4_T2; - * @section: 11.13.1; - * @assertion: AssignmentExpression : LeftHandSideExpression = AssignmentExpression; - * @description: Syntax check if "x = x" throws ReferenceError; -*/ - -//CHECK#1 -try { - x = x; - $ERROR('#1.1: x = x throw ReferenceError. Actual: ' + (x = x)); -} catch(e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: x = x throw ReferenceError. Actual: ' + (e)); - } -} - - diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A1_T1.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A1_T1.js deleted file mode 100644 index 49c929987..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A1_T1.js +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.13.2_A1_T1; -* @section: 11.13.2; -* @assertion: White Space and Line Terminator between LeftHandSideExpression and "@=" or between "@=" and AssignmentExpression are allowed; -* @description: Checking by using eval, check operator is x *= y; -*/ - -//CHECK#1 -x = -1; -if ((eval("x\u0009*=\u0009-1")) !== 1) { - $ERROR('#1: x = -1; (x\\u0009*=\\u0009-1) === 1'); -} - -//CHECK#2 -x = -1; -if ((eval("x\u000B*=\u000B-1")) !== 1) { - $ERROR('#2: x = -1; (x\\u000B*=\\u000B-1) === 1'); -} - -//CHECK#3 -x = -1; -if ((eval("x\u000C*=\u000C-1")) !== 1) { - $ERROR('#3: x = -1; (x\\u000C*=\\u000C-1) === 1'); -} - -//CHECK#4 -x = -1; -if ((eval("x\u0020*=\u0020-1")) !== 1) { - $ERROR('#4: x = -1; (x\\u0020*=\\u0020-1) === 1'); -} - -//CHECK#5 -x = -1; -if ((eval("x\u00A0*=\u00A0-1")) !== 1) { - $ERROR('#5: x = -1; (x\\u00A0*=\\u00A0-1) === 1'); -} - -//CHECK#6 -x = -1; -if ((eval("x\u000A*=\u000A-1")) !== 1) { - $ERROR('#6: x = -1; (x\\u000A*=\\u000A-1) === 1'); -} - -//CHECK#7 -x = -1; -if ((eval("x\u000D*=\u000D-1")) !== 1) { - $ERROR('#7: x = -1; (x\\u000D*=\\u000D-1) === 1'); -} - -//CHECK#8 -x = -1; -if ((eval("x\u2028*=\u2028-1")) !== 1) { - $ERROR('#8: x = -1; (x\\u2028*=\\u2028-1) === 1'); -} - -//CHECK#9 -x = -1; -if ((eval("x\u2029*=\u2029-1")) !== 1) { - $ERROR('#9: x = -1; (x\\u2029*=\\u2029-1) === 1'); -} - - -//CHECK#10 -x = -1; -if ((eval("x\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029*=\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029-1")) !== 1) { - $ERROR('#10: x = -1; (x\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029*=\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029-1) === 1'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A1_T10.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A1_T10.js deleted file mode 100644 index cbbee8049..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A1_T10.js +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.13.2_A1_T10; -* @section: 11.13.2; -* @assertion: White Space and Line Terminator between LeftHandSideExpression and "@=" or between "@=" and AssignmentExpression are allowed; -* @description: Checking by using eval, check operator is x ^= y; -*/ - -//CHECK#1 -x = 1; -if ((eval("x\u0009^=\u00091")) !== 0) { - $ERROR('#1: x = 1; (x\\u0009^=\\u00091) === 0'); -} - -//CHECK#2 -x = 1; -if ((eval("x\u000B^=\u000B1")) !== 0) { - $ERROR('#2: x = 1; (x\\u000B^=\\u000B1) === 0'); -} - -//CHECK#3 -x = 1; -if ((eval("x\u000C^=\u000C1")) !== 0) { - $ERROR('#3: x = 1; (x\\u000C^=\\u000C1) === 0'); -} - -//CHECK#4 -x = 1; -if ((eval("x\u0020^=\u00201")) !== 0) { - $ERROR('#4: x = 1; (x\\u0020^=\\u00201) === 0'); -} - -//CHECK#5 -x = 1; -if ((eval("x\u00A0^=\u00A01")) !== 0) { - $ERROR('#5: x = 1; (x\\u00A0^=\\u00A01) === 0'); -} - -//CHECK#6 -x = 1; -if ((eval("x\u000A^=\u000A1")) !== 0) { - $ERROR('#6: x = 1; (x\\u000A^=\\u000A1) === 0'); -} - -//CHECK#7 -x = 1; -if ((eval("x\u000D^=\u000D1")) !== 0) { - $ERROR('#7: x = 1; (x\\u000D^=\\u000D1) === 0'); -} - -//CHECK#8 -x = 1; -if ((eval("x\u2028^=\u20281")) !== 0) { - $ERROR('#8: x = 1; (x\\u2028^=\\u20281) === 0'); -} - -//CHECK#9 -x = 1; -if ((eval("x\u2029^=\u20291")) !== 0) { - $ERROR('#9: x = 1; (x\\u2029^=\\u20291) === 0'); -} - - -//CHECK#10 -x = 1; -if ((eval("x\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029^=\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20291")) !== 0) { - $ERROR('#10: x = 1; (x\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029^=\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20291) === 0'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A1_T11.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A1_T11.js deleted file mode 100644 index a3639e7aa..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A1_T11.js +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.13.2_A1_T11; -* @section: 11.13.2; -* @assertion: White Space and Line Terminator between LeftHandSideExpression and "@=" or between "@=" and AssignmentExpression are allowed; -* @description: Checking by using eval, check operator is x |= y; -*/ - -//CHECK#1 -x = 0; -if ((eval("x\u0009|=\u00091")) !== 1) { - $ERROR('#1: x = 0; (x\\u0009|=\\u00091) === 1'); -} - -//CHECK#2 -x = 0; -if ((eval("x\u000B|=\u000B1")) !== 1) { - $ERROR('#2: x = 0; (x\\u000B|=\\u000B1) === 1'); -} - -//CHECK#3 -x = 0; -if ((eval("x\u000C|=\u000C1")) !== 1) { - $ERROR('#3: x = 0; (x\\u000C|=\\u000C1) === 1'); -} - -//CHECK#4 -x = 0; -if ((eval("x\u0020|=\u00201")) !== 1) { - $ERROR('#4: x = 0; (x\\u0020|=\\u00201) === 1'); -} - -//CHECK#5 -x = 0; -if ((eval("x\u00A0|=\u00A01")) !== 1) { - $ERROR('#5: x = 0; (x\\u00A0|=\\u00A01) === 1'); -} - -//CHECK#6 -x = 0; -if ((eval("x\u000A|=\u000A1")) !== 1) { - $ERROR('#6: x = 0; (x\\u000A|=\\u000A1) === 1'); -} - -//CHECK#7 -x = 0; -if ((eval("x\u000D|=\u000D1")) !== 1) { - $ERROR('#7: x = 0; (x\\u000D|=\\u000D1) === 1'); -} - -//CHECK#8 -x = 0; -if ((eval("x\u2028|=\u20281")) !== 1) { - $ERROR('#8: x = 0; (x\\u2028|=\\u20281) === 1'); -} - -//CHECK#9 -x = 0; -if ((eval("x\u2029|=\u20291")) !== 1) { - $ERROR('#9: x = 0; (x\\u2029|=\\u20291) === 1'); -} - - -//CHECK#10 -x = 0; -if ((eval("x\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029|=\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20291")) !== 1) { - $ERROR('#10: x = 0; (x\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029|=\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20291) === 1'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A1_T2.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A1_T2.js deleted file mode 100644 index 75fde9ee4..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A1_T2.js +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.13.2_A1_T2; -* @section: 11.13.2; -* @assertion: White Space and Line Terminator between LeftHandSideExpression and "@=" or between "@=" and AssignmentExpression are allowed; -* @description: Checking by using eval, check operator is x /= y; -*/ - -//CHECK#1 -x = -1; -if ((eval("x\u0009/=\u0009-1")) !== 1) { - $ERROR('#1: x = -1; (x\\u0009/=\\u0009-1) === 1'); -} - -//CHECK#2 -x = -1; -if ((eval("x\u000B/=\u000B-1")) !== 1) { - $ERROR('#2: x = -1; (x\\u000B/=\\u000B-1) === 1'); -} - -//CHECK#3 -x = -1; -if ((eval("x\u000C/=\u000C-1")) !== 1) { - $ERROR('#3: x = -1; (x\\u000C/=\\u000C-1) === 1'); -} - -//CHECK#4 -x = -1; -if ((eval("x\u0020/=\u0020-1")) !== 1) { - $ERROR('#4: x = -1; (x\\u0020/=\\u0020-1) === 1'); -} - -//CHECK#5 -x = -1; -if ((eval("x\u00A0/=\u00A0-1")) !== 1) { - $ERROR('#5: x = -1; (x\\u00A0/=\\u00A0-1) === 1'); -} - -//CHECK#6 -x = -1; -if ((eval("x\u000A/=\u000A-1")) !== 1) { - $ERROR('#6: x = -1; (x\\u000A/=\\u000A-1) === 1'); -} - -//CHECK#7 -x = -1; -if ((eval("x\u000D/=\u000D-1")) !== 1) { - $ERROR('#7: x = -1; (x\\u000D/=\\u000D-1) === 1'); -} - -//CHECK#8 -x = -1; -if ((eval("x\u2028/=\u2028-1")) !== 1) { - $ERROR('#8: x = -1; (x\\u2028/=\\u2028-1) === 1'); -} - -//CHECK#9 -x = -1; -if ((eval("x\u2029/=\u2029-1")) !== 1) { - $ERROR('#9: x = -1; (x\\u2029/=\\u2029-1) === 1'); -} - - -//CHECK#10 -x = -1; -if ((eval("x\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029/=\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029-1")) !== 1) { - $ERROR('#10: x = -1; (x\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029/=\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029-1) === 1'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A1_T3.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A1_T3.js deleted file mode 100644 index 6b8381441..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A1_T3.js +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.13.2_A1_T3; -* @section: 11.13.2; -* @assertion: White Space and Line Terminator between LeftHandSideExpression and "@=" or between "@=" and AssignmentExpression are allowed; -* @description: Checking by using eval, check operator is x %= y; -*/ - -//CHECK#1 -x = -1; -if ((eval("x\u0009%=\u0009-1")) !== 0) { - $ERROR('#1: x = -1; (x\\u0009%=\\u0009-1) === 0'); -} - -//CHECK#2 -x = -1; -if ((eval("x\u000B%=\u000B-1")) !== 0) { - $ERROR('#2: x = -1; (x\\u000B%=\\u000B-1) === 0'); -} - -//CHECK#3 -x = -1; -if ((eval("x\u000C%=\u000C-1")) !== 0) { - $ERROR('#3: x = -1; (x\\u000C%=\\u000C-1) === 0'); -} - -//CHECK#4 -x = -1; -if ((eval("x\u0020%=\u0020-1")) !== 0) { - $ERROR('#4: x = -1; (x\\u0020%=\\u0020-1) === 0'); -} - -//CHECK#5 -x = -1; -if ((eval("x\u00A0%=\u00A0-1")) !== 0) { - $ERROR('#5: x = -1; (x\\u00A0%=\\u00A0-1) === 0'); -} - -//CHECK#6 -x = -1; -if ((eval("x\u000A%=\u000A-1")) !== 0) { - $ERROR('#6: x = -1; (x\\u000A%=\\u000A-1) === 0'); -} - -//CHECK#7 -x = -1; -if ((eval("x\u000D%=\u000D-1")) !== 0) { - $ERROR('#7: x = -1; (x\\u000D%=\\u000D-1) === 0'); -} - -//CHECK#8 -x = -1; -if ((eval("x\u2028%=\u2028-1")) !== 0) { - $ERROR('#8: x = -1; (x\\u2028%=\\u2028-1) === 0'); -} - -//CHECK#9 -x = -1; -if ((eval("x\u2029%=\u2029-1")) !== 0) { - $ERROR('#9: x = -1; (x\\u2029%=\\u2029-1) === 0'); -} - - -//CHECK#10 -x = -1; -if ((eval("x\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029%=\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029-1")) !== 0) { - $ERROR('#10: x = -1; (x\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029%=\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029-1) === 0'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A1_T4.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A1_T4.js deleted file mode 100644 index 8c31a7624..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A1_T4.js +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.13.2_A1_T4; -* @section: 11.13.2; -* @assertion: White Space and Line Terminator between LeftHandSideExpression and "@=" or between "@=" and AssignmentExpression are allowed; -* @description: Checking by using eval, check operator is x += y; -*/ - -//CHECK#1 -x = -1; -if ((eval("x\u0009+=\u0009-1")) !== -2) { - $ERROR('#1: x = -1; (x\\u0009+=\\u0009-1) === -2'); -} - -//CHECK#2 -x = -1; -if ((eval("x\u000B+=\u000B-1")) !== -2) { - $ERROR('#2: x = -1; (x\\u000B+=\\u000B-1) === -2'); -} - -//CHECK#3 -x = -1; -if ((eval("x\u000C+=\u000C-1")) !== -2) { - $ERROR('#3: x = -1; (x\\u000C+=\\u000C-1) === -2'); -} - -//CHECK#4 -x = -1; -if ((eval("x\u0020+=\u0020-1")) !== -2) { - $ERROR('#4: x = -1; (x\\u0020+=\\u0020-1) === -2'); -} - -//CHECK#5 -x = -1; -if ((eval("x\u00A0+=\u00A0-1")) !== -2) { - $ERROR('#5: x = -1; (x\\u00A0+=\\u00A0-1) === -2'); -} - -//CHECK#6 -x = -1; -if ((eval("x\u000A+=\u000A-1")) !== -2) { - $ERROR('#6: x = -1; (x\\u000A+=\\u000A-1) === -2'); -} - -//CHECK#7 -x = -1; -if ((eval("x\u000D+=\u000D-1")) !== -2) { - $ERROR('#7: x = -1; (x\\u000D+=\\u000D-1) === -2'); -} - -//CHECK#8 -x = -1; -if ((eval("x\u2028+=\u2028-1")) !== -2) { - $ERROR('#8: x = -1; (x\\u2028+=\\u2028-1) === -2'); -} - -//CHECK#9 -x = -1; -if ((eval("x\u2029+=\u2029-1")) !== -2) { - $ERROR('#9: x = -1; (x\\u2029+=\\u2029-1) === -2'); -} - - -//CHECK#10 -x = -1; -if ((eval("x\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029+=\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029-1")) !== -2) { - $ERROR('#10: x = -1; (x\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029+=\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029-1) === -2'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A1_T5.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A1_T5.js deleted file mode 100644 index 29acfef08..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A1_T5.js +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.13.2_A1_T5; -* @section: 11.13.2; -* @assertion: White Space and Line Terminator between LeftHandSideExpression and "@=" or between "@=" and AssignmentExpression are allowed; -* @description: Checking by using eval, check operator is x -= y; -*/ - -//CHECK#1 -x = -1; -if ((eval("x\u0009-=\u00091")) !== -2) { - $ERROR('#1: x = -1; (x\\u0009-=\\u00091) === -2'); -} - -//CHECK#2 -x = -1; -if ((eval("x\u000B-=\u000B1")) !== -2) { - $ERROR('#2: x = -1; (x\\u000B-=\\u000B1) === -2'); -} - -//CHECK#3 -x = -1; -if ((eval("x\u000C-=\u000C1")) !== -2) { - $ERROR('#3: x = -1; (x\\u000C-=\\u000C1) === -2'); -} - -//CHECK#4 -x = -1; -if ((eval("x\u0020-=\u00201")) !== -2) { - $ERROR('#4: x = -1; (x\\u0020-=\\u00201) === -2'); -} - -//CHECK#5 -x = -1; -if ((eval("x\u00A0-=\u00A01")) !== -2) { - $ERROR('#5: x = -1; (x\\u00A0-=\\u00A01) === -2'); -} - -//CHECK#6 -x = -1; -if ((eval("x\u000A-=\u000A1")) !== -2) { - $ERROR('#6: x = -1; (x\\u000A-=\\u000A1) === -2'); -} - -//CHECK#7 -x = -1; -if ((eval("x\u000D-=\u000D1")) !== -2) { - $ERROR('#7: x = -1; (x\\u000D-=\\u000D1) === -2'); -} - -//CHECK#8 -x = -1; -if ((eval("x\u2028-=\u20281")) !== -2) { - $ERROR('#8: x = -1; (x\\u2028-=\\u20281) === -2'); -} - -//CHECK#9 -x = -1; -if ((eval("x\u2029-=\u20291")) !== -2) { - $ERROR('#9: x = -1; (x\\u2029-=\\u20291) === -2'); -} - - -//CHECK#10 -x = -1; -if ((eval("x\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029-=\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20291")) !== -2) { - $ERROR('#10: x = -1; (x\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029-=\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20291) === -2'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A1_T6.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A1_T6.js deleted file mode 100644 index 64d79188b..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A1_T6.js +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.13.2_A1_T6; -* @section: 11.13.2; -* @assertion: White Space and Line Terminator between LeftHandSideExpression and "@=" or between "@=" and AssignmentExpression are allowed; -* @description: Checking by using eval, check operator is x <<= y; -*/ - -//CHECK#1 -x = 1; -if ((eval("x\u0009<<=\u00091")) !== 2) { - $ERROR('#1: x = 1; (x\\u0009<<=\\u00091) === 2'); -} - -//CHECK#2 -x = 1; -if ((eval("x\u000B<<=\u000B1")) !== 2) { - $ERROR('#2: x = 1; (x\\u000B<<=\\u000B1) === 2'); -} - -//CHECK#3 -x = 1; -if ((eval("x\u000C<<=\u000C1")) !== 2) { - $ERROR('#3: x = 1; (x\\u000C<<=\\u000C1) === 2'); -} - -//CHECK#4 -x = 1; -if ((eval("x\u0020<<=\u00201")) !== 2) { - $ERROR('#4: x = 1; (x\\u0020<<=\\u00201) === 2'); -} - -//CHECK#5 -x = 1; -if ((eval("x\u00A0<<=\u00A01")) !== 2) { - $ERROR('#5: x = 1; (x\\u00A0<<=\\u00A01) === 2'); -} - -//CHECK#6 -x = 1; -if ((eval("x\u000A<<=\u000A1")) !== 2) { - $ERROR('#6: x = 1; (x\\u000A<<=\\u000A1) === 2'); -} - -//CHECK#7 -x = 1; -if ((eval("x\u000D<<=\u000D1")) !== 2) { - $ERROR('#7: x = 1; (x\\u000D<<=\\u000D1) === 2'); -} - -//CHECK#8 -x = 1; -if ((eval("x\u2028<<=\u20281")) !== 2) { - $ERROR('#8: x = 1; (x\\u2028<<=\\u20281) === 2'); -} - -//CHECK#9 -x = 1; -if ((eval("x\u2029<<=\u20291")) !== 2) { - $ERROR('#9: x = 1; (x\\u2029<<=\\u20291) === 2'); -} - - -//CHECK#10 -x = 1; -if ((eval("x\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029<<=\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20291")) !== 2) { - $ERROR('#10: x = 1; (x\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029<<=\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20291) === 2'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A1_T7.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A1_T7.js deleted file mode 100644 index 9e66bc81f..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A1_T7.js +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.13.2_A1_T7; -* @section: 11.13.2; -* @assertion: White Space and Line Terminator between LeftHandSideExpression and "@=" or between "@=" and AssignmentExpression are allowed; -* @description: Checking by using eval, check operator is x >>= y; -*/ - -//CHECK#1 -x = 1; -if ((eval("x\u0009>>=\u00091")) !== 0) { - $ERROR('#1: x = 1; (x\\u0009>>=\\u00091) === 0'); -} - -//CHECK#2 -x = 1; -if ((eval("x\u000B>>=\u000B1")) !== 0) { - $ERROR('#2: x = 1; (x\\u000B>>=\\u000B1) === 0'); -} - -//CHECK#3 -x = 1; -if ((eval("x\u000C>>=\u000C1")) !== 0) { - $ERROR('#3: x = 1; (x\\u000C>>=\\u000C1) === 0'); -} - -//CHECK#4 -x = 1; -if ((eval("x\u0020>>=\u00201")) !== 0) { - $ERROR('#4: x = 1; (x\\u0020>>=\\u00201) === 0'); -} - -//CHECK#5 -x = 1; -if ((eval("x\u00A0>>=\u00A01")) !== 0) { - $ERROR('#5: x = 1; (x\\u00A0>>=\\u00A01) === 0'); -} - -//CHECK#6 -x = 1; -if ((eval("x\u000A>>=\u000A1")) !== 0) { - $ERROR('#6: x = 1; (x\\u000A>>=\\u000A1) === 0'); -} - -//CHECK#7 -x = 1; -if ((eval("x\u000D>>=\u000D1")) !== 0) { - $ERROR('#7: x = 1; (x\\u000D>>=\\u000D1) === 0'); -} - -//CHECK#8 -x = 1; -if ((eval("x\u2028>>=\u20281")) !== 0) { - $ERROR('#8: x = 1; (x\\u2028>>=\\u20281) === 0'); -} - -//CHECK#9 -x = 1; -if ((eval("x\u2029>>=\u20291")) !== 0) { - $ERROR('#9: x = 1; (x\\u2029>>=\\u20291) === 0'); -} - - -//CHECK#10 -x = 1; -if ((eval("x\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029>>=\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20291")) !== 0) { - $ERROR('#10: x = 1; (x\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029>>=\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20291) === 0'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A1_T8.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A1_T8.js deleted file mode 100644 index 4835d3d01..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A1_T8.js +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.13.2_A1_T8; -* @section: 11.13.2; -* @assertion: White Space and Line Terminator between LeftHandSideExpression and "@=" or between "@=" and AssignmentExpression are allowed; -* @description: Checking by using eval, check operator is x >>>= y; -*/ - -//CHECK#1 -x = 1; -if ((eval("x\u0009>>>=\u00091")) !== 0) { - $ERROR('#1: x = 1; (x\\u0009>>>=\\u00091) === 0'); -} - -//CHECK#2 -x = 1; -if ((eval("x\u000B>>>=\u000B1")) !== 0) { - $ERROR('#2: x = 1; (x\\u000B>>>=\\u000B1) === 0'); -} - -//CHECK#3 -x = 1; -if ((eval("x\u000C>>>=\u000C1")) !== 0) { - $ERROR('#3: x = 1; (x\\u000C>>>=\\u000C1) === 0'); -} - -//CHECK#4 -x = 1; -if ((eval("x\u0020>>>=\u00201")) !== 0) { - $ERROR('#4: x = 1; (x\\u0020>>>=\\u00201) === 0'); -} - -//CHECK#5 -x = 1; -if ((eval("x\u00A0>>>=\u00A01")) !== 0) { - $ERROR('#5: x = 1; (x\\u00A0>>>=\\u00A01) === 0'); -} - -//CHECK#6 -x = 1; -if ((eval("x\u000A>>>=\u000A1")) !== 0) { - $ERROR('#6: x = 1; (x\\u000A>>>=\\u000A1) === 0'); -} - -//CHECK#7 -x = 1; -if ((eval("x\u000D>>>=\u000D1")) !== 0) { - $ERROR('#7: x = 1; (x\\u000D>>>=\\u000D1) === 0'); -} - -//CHECK#8 -x = 1; -if ((eval("x\u2028>>>=\u20281")) !== 0) { - $ERROR('#8: x = 1; (x\\u2028>>>=\\u20281) === 0'); -} - -//CHECK#9 -x = 1; -if ((eval("x\u2029>>>=\u20291")) !== 0) { - $ERROR('#9: x = 1; (x\\u2029>>>=\\u20291) === 0'); -} - - -//CHECK#10 -x = 1; -if ((eval("x\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029>>>=\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20291")) !== 0) { - $ERROR('#10: x = 1; (x\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029>>>=\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20291) === 0'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A1_T9.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A1_T9.js deleted file mode 100644 index ee3413223..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A1_T9.js +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.13.2_A1_T9; -* @section: 11.13.2; -* @assertion: White Space and Line Terminator between LeftHandSideExpression and "@=" or between "@=" and AssignmentExpression are allowed; -* @description: Checking by using eval, check operator is x &= y; -*/ - -//CHECK#1 -x = 1; -if ((eval("x\u0009&=\u00091")) !== 1) { - $ERROR('#1: x = 1; (x\\u0009&=\\u00091) === 1'); -} - -//CHECK#2 -x = 1; -if ((eval("x\u000B&=\u000B1")) !== 1) { - $ERROR('#2: x = 1; (x\\u000B&=\\u000B1) === 1'); -} - -//CHECK#3 -x = 1; -if ((eval("x\u000C&=\u000C1")) !== 1) { - $ERROR('#3: x = 1; (x\\u000C&=\\u000C1) === 1'); -} - -//CHECK#4 -x = 1; -if ((eval("x\u0020&=\u00201")) !== 1) { - $ERROR('#4: x = 1; (x\\u0020&=\\u00201) === 1'); -} - -//CHECK#5 -x = 1; -if ((eval("x\u00A0&=\u00A01")) !== 1) { - $ERROR('#5: x = 1; (x\\u00A0&=\\u00A01) === 1'); -} - -//CHECK#6 -x = 1; -if ((eval("x\u000A&=\u000A1")) !== 1) { - $ERROR('#6: x = 1; (x\\u000A&=\\u000A1) === 1'); -} - -//CHECK#7 -x = 1; -if ((eval("x\u000D&=\u000D1")) !== 1) { - $ERROR('#7: x = 1; (x\\u000D&=\\u000D1) === 1'); -} - -//CHECK#8 -x = 1; -if ((eval("x\u2028&=\u20281")) !== 1) { - $ERROR('#8: x = 1; (x\\u2028&=\\u20281) === 1'); -} - -//CHECK#9 -x = 1; -if ((eval("x\u2029&=\u20291")) !== 1) { - $ERROR('#9: x = 1; (x\\u2029&=\\u20291) === 1'); -} - - -//CHECK#10 -x = 1; -if ((eval("x\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029&=\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20291")) !== 1) { - $ERROR('#10: x = 1; (x\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029&=\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20291) === 1'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T1.1.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T1.1.js deleted file mode 100644 index c06a6950d..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T1.1.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A2.1_T1.1; - * @section: 11.13.2; - * @assertion: Operator uses GetValue; - * @description: Either Type is not Reference or GetBase is not null, check opeartor is "x *= y"; -*/ - -//CHECK#1 -var x = 1; -var z = (x *= -1); -if (z !== -1) { - $ERROR('#1: var x = 1; var z = (x *= -1); z === -1. Actual: ' + (z)); -} - -//CHECK#2 -var x = 1; -var y = -1; -var z = (x *= y); -if (z !== -1) { - $ERROR('#2: var x = 1; var y = -1; var z = (x *= y); z === -1. Actual: ' + (z)); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T1.10.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T1.10.js deleted file mode 100644 index eb5c46ff3..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T1.10.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A2.1_T1.10; - * @section: 11.13.2; - * @assertion: Operator uses GetValue; - * @description: Either Type is not Reference or GetBase is not null, check opeartor is "x ^= y"; -*/ - -//CHECK#1 -var x = 1; -var z = (x ^= 1); -if (z !== 0) { - $ERROR('#1: var x = 1; var z = (x ^= 1); z === 0. Actual: ' + (z)); -} - -//CHECK#2 -var x = 1; -var y = 1; -var z = (x ^= y); -if (z !== 0) { - $ERROR('#2: var x = 1; var y = 1; var z = (x ^= y); z === 0. Actual: ' + (z)); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T1.11.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T1.11.js deleted file mode 100644 index 55af9fc77..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T1.11.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A2.1_T1.11; - * @section: 11.13.2; - * @assertion: Operator uses GetValue; - * @description: Either Type is not Reference or GetBase is not null, check opeartor is "x |= y"; -*/ - -//CHECK#1 -var x = 0; -var z = (x |= 1); -if (z !== 1) { - $ERROR('#1: var x = 0; var z = (x |= 1); z === 1. Actual: ' + (z)); -} - -//CHECK#2 -var x = 0; -var y = 1; -var z = (x |= y); -if (z !== 1) { - $ERROR('#2: var x = 0; var y = 1; var z = (x |= y); z === 1. Actual: ' + (z)); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T1.2.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T1.2.js deleted file mode 100644 index 3483945e5..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T1.2.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A2.1_T1.2; - * @section: 11.13.2; - * @assertion: Operator uses GetValue; - * @description: Either Type is not Reference or GetBase is not null, check opeartor is "x /= y"; -*/ - -//CHECK#1 -var x = 1; -var z = (x /= -1); -if (z !== -1) { - $ERROR('#1: var x = 1; var z = (x /= -1); z === -1. Actual: ' + (z)); -} - -//CHECK#2 -var x = 1; -var y = -1; -var z = (x /= y); -if (z !== -1) { - $ERROR('#2: var x = 1; var y = -1; var z = (x /= y); z === -1. Actual: ' + (z)); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T1.3.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T1.3.js deleted file mode 100644 index fd148ed24..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T1.3.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A2.1_T1.3; - * @section: 11.13.2; - * @assertion: Operator uses GetValue; - * @description: Either Type is not Reference or GetBase is not null, check opeartor is "x %= y"; -*/ - -//CHECK#1 -var x = -1; -var z = (x %= 2); -if (z !== -1) { - $ERROR('#1: var x = -1; var z = (x %= 2); z === -1. Actual: ' + (z)); -} - -//CHECK#2 -var x = -1; -var y = 2; -var z = (x %= y); -if (z !== -1) { - $ERROR('#2: var x = -1; var y = 2; var z = (x %= y); z === -1. Actual: ' + (z)); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T1.4.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T1.4.js deleted file mode 100644 index 776dbfdd5..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T1.4.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A2.1_T1.4; - * @section: 11.13.2; - * @assertion: Operator uses GetValue; - * @description: Either Type is not Reference or GetBase is not null, check opeartor is "x += y"; -*/ - -//CHECK#1 -var x = 1; -var z = (x += 1); -if (z !== 2) { - $ERROR('#1: var x = 1; var z = (x += 1); z === 2. Actual: ' + (z)); -} - -//CHECK#2 -var x = 1; -var y = 1; -var z = (x += y); -if (z !== 2) { - $ERROR('#2: var x = 1; var y = 1; var z = (x += y); z === 2. Actual: ' + (z)); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T1.5.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T1.5.js deleted file mode 100644 index 371f2462d..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T1.5.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A2.1_T1.5; - * @section: 11.13.2; - * @assertion: Operator uses GetValue; - * @description: Either Type is not Reference or GetBase is not null, check opeartor is "x -= y"; -*/ - -//CHECK#1 -var x = 1; -var z = (x -= 1); -if (z !== 0) { - $ERROR('#1: var x = 1; var z = (x -= 1); z === 0. Actual: ' + (z)); -} - -//CHECK#2 -var x = 1; -var y = 1; -var z = (x -= y); -if (z !== 0) { - $ERROR('#2: var x = 1; var y = 1; var z = (x -= y); z === 0. Actual: ' + (z)); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T1.6.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T1.6.js deleted file mode 100644 index 6ce2671d8..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T1.6.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A2.1_T1.6; - * @section: 11.13.2; - * @assertion: Operator uses GetValue; - * @description: Either Type is not Reference or GetBase is not null, check opeartor is "x <<= y"; -*/ - -//CHECK#1 -var x = 1; -var z = (x <<= 1); -if (z !== 2) { - $ERROR('#1: var x = 1; var z = (x <<= 1); z === 2. Actual: ' + (z)); -} - -//CHECK#2 -var x = 1; -var y = 1; -var z = (x <<= y); -if (z !== 2) { - $ERROR('#2: var x = 1; var y = 1; var z = (x <<= y); z === 2. Actual: ' + (z)); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T1.7.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T1.7.js deleted file mode 100644 index 24832642c..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T1.7.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A2.1_T1.7; - * @section: 11.13.2; - * @assertion: Operator uses GetValue; - * @description: Either Type is not Reference or GetBase is not null, check opeartor is "x >>= y"; -*/ - -//CHECK#1 -var x = 4; -var z = (x >>= 1); -if (z !== 2) { - $ERROR('#1: var x = 4; var z = (x >>= 1); z === 2. Actual: ' + (z)); -} - -//CHECK#2 -var x = 4; -var y = 1; -var z = (x >>= y); -if (z !== 2) { - $ERROR('#2: var x = 4; var y = 1; var z = (x >>= y); z === 2. Actual: ' + (z)); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T1.8.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T1.8.js deleted file mode 100644 index 614b5c6c3..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T1.8.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A2.1_T1.8; - * @section: 11.13.2; - * @assertion: Operator uses GetValue; - * @description: Either Type is not Reference or GetBase is not null, check opeartor is "x >>>= y"; -*/ - -//CHECK#1 -var x = 4; -var z = (x >>>= 1); -if (z !== 2) { - $ERROR('#1: var x = 4; var z = (x >>>= 1); z === 2. Actual: ' + (z)); -} - -//CHECK#2 -var x = 4; -var y = 1; -var z = (x >>>= y); -if (z !== 2) { - $ERROR('#2: var x = 4; var y = 1; var z = (x >>>= y); z === 2. Actual: ' + (z)); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T1.9.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T1.9.js deleted file mode 100644 index eaec2b218..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T1.9.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A2.1_T1.9; - * @section: 11.13.2; - * @assertion: Operator uses GetValue; - * @description: Either Type is not Reference or GetBase is not null, check opeartor is "x &= y"; -*/ - -//CHECK#1 -var x = 1; -var z = (x &= 1); -if (z !== 1) { - $ERROR('#1: var x = 1; var z = (x &= 1); z === 1. Actual: ' + (z)); -} - -//CHECK#2 -var x = 1; -var y = 1; -var z = (x &= y); -if (z !== 1) { - $ERROR('#2: var x = 1; var y = 1; var z = (x &= y); z === 1. Actual: ' + (z)); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T2.1.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T2.1.js deleted file mode 100644 index 1c01d09b5..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T2.1.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A2.1_T2.1; - * @section: 11.13.2; - * @assertion: Operator uses GetValue; - * @description: If GetBase(AssigmentExpression) is null, throw ReferenceError. Check operator is "x *= y"; -*/ - -//CHECK#1 -try { - var x = 1; - var z = (x *= y); - $ERROR('#1.1: var x = 1; x *= y throw ReferenceError. Actual: ' + (z)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: var x = 1; x *= y throw ReferenceError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T2.10.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T2.10.js deleted file mode 100644 index c876cd464..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T2.10.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A2.1_T2.10; - * @section: 11.13.2; - * @assertion: Operator uses GetValue; - * @description: If GetBase(AssigmentExpression) is null, throw ReferenceError. Check operator is "x ^= y"; -*/ - -//CHECK#1 -try { - var x = 1; - var z = (x ^= y); - $ERROR('#1.1: var x = 1; x ^= y throw ReferenceError. Actual: ' + (z)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: var x = 1; x ^= y throw ReferenceError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T2.11.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T2.11.js deleted file mode 100644 index 82f7c979d..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T2.11.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A2.1_T2.11; - * @section: 11.13.2; - * @assertion: Operator uses GetValue; - * @description: If GetBase(AssigmentExpression) is null, throw ReferenceError. Check operator is "x |= y"; -*/ - -//CHECK#1 -try { - var x = 1; - var z = (x |= y); - $ERROR('#1.1: var x = 1; x |= y throw ReferenceError. Actual: ' + (z)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: var x = 1; x |= y throw ReferenceError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T2.2.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T2.2.js deleted file mode 100644 index 80a072ded..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T2.2.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A2.1_T2.2; - * @section: 11.13.2; - * @assertion: Operator uses GetValue; - * @description: If GetBase(AssigmentExpression) is null, throw ReferenceError. Check operator is "x /= y"; -*/ - -//CHECK#1 -try { - var x = 1; - var z = (x /= y); - $ERROR('#1.1: var x = 1; x /= y throw ReferenceError. Actual: ' + (z)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: var x = 1; x /= y throw ReferenceError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T2.3.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T2.3.js deleted file mode 100644 index 27a5e4add..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T2.3.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A2.1_T2.3; - * @section: 11.13.2; - * @assertion: Operator uses GetValue; - * @description: If GetBase(AssigmentExpression) is null, throw ReferenceError. Check operator is "x %= y"; -*/ - -//CHECK#1 -try { - var x = 1; - var z = (x %= y); - $ERROR('#1.1: var x = 1; x %= y throw ReferenceError. Actual: ' + (z)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: var x = 1; x %= y throw ReferenceError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T2.4.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T2.4.js deleted file mode 100644 index 65b071b4d..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T2.4.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A2.1_T2.4; - * @section: 11.13.2; - * @assertion: Operator uses GetValue; - * @description: If GetBase(AssigmentExpression) is null, throw ReferenceError. Check operator is "x += y"; -*/ - -//CHECK#1 -try { - var x = 1; - var z = (x += y); - $ERROR('#1.1: var x = 1; x += y throw ReferenceError. Actual: ' + (z)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: var x = 1; x += y throw ReferenceError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T2.5.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T2.5.js deleted file mode 100644 index 2369768c8..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T2.5.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A2.1_T2.5; - * @section: 11.13.2; - * @assertion: Operator uses GetValue; - * @description: If GetBase(AssigmentExpression) is null, throw ReferenceError. Check operator is "x -= y"; -*/ - -//CHECK#1 -try { - var x = 1; - var z = (x -= y); - $ERROR('#1.1: var x = 1; x -= y throw ReferenceError. Actual: ' + (z)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: var x = 1; x -= y throw ReferenceError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T2.6.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T2.6.js deleted file mode 100644 index 61fb6afdf..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T2.6.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A2.1_T2.6; - * @section: 11.13.2; - * @assertion: Operator uses GetValue; - * @description: If GetBase(AssigmentExpression) is null, throw ReferenceError. Check operator is "x <<= y"; -*/ - -//CHECK#1 -try { - var x = 1; - var z = (x <<= y); - $ERROR('#1.1: var x = 1; x <<= y throw ReferenceError. Actual: ' + (z)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: var x = 1; x <<= y throw ReferenceError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T2.7.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T2.7.js deleted file mode 100644 index 11d468e2d..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T2.7.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A2.1_T2.7; - * @section: 11.13.2; - * @assertion: Operator uses GetValue; - * @description: If GetBase(AssigmentExpression) is null, throw ReferenceError. Check operator is "x >>= y"; -*/ - -//CHECK#1 -try { - var x = 1; - var z = (x >>= y); - $ERROR('#1.1: var x = 1; x >>= y throw ReferenceError. Actual: ' + (z)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: var x = 1; x >>= y throw ReferenceError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T2.8.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T2.8.js deleted file mode 100644 index 5f644d515..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T2.8.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A2.1_T2.8; - * @section: 11.13.2; - * @assertion: Operator uses GetValue; - * @description: If GetBase(AssigmentExpression) is null, throw ReferenceError. Check operator is "x >>>= y"; -*/ - -//CHECK#1 -try { - var x = 1; - var z = (x >>>= y); - $ERROR('#1.1: var x = 1; x >>>= y throw ReferenceError. Actual: ' + (z)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: var x = 1; x >>>= y throw ReferenceError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T2.9.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T2.9.js deleted file mode 100644 index 5514ae2f2..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T2.9.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A2.1_T2.9; - * @section: 11.13.2; - * @assertion: Operator uses GetValue; - * @description: If GetBase(AssigmentExpression) is null, throw ReferenceError. Check operator is "x &= y"; -*/ - -//CHECK#1 -try { - var x = 1; - var z = (x &= y); - $ERROR('#1.1: var x = 1; x &= y throw ReferenceError. Actual: ' + (z)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: var x = 1; x &= y throw ReferenceError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T3.1.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T3.1.js deleted file mode 100644 index 9fff16897..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T3.1.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A2.1_T3.1; - * @section: 11.13.2; - * @assertion: Operator uses GetValue; - * @description: If GetBase(LeftHandSideExpression) is null, throw ReferenceError. Check operator is "x *= y"; -*/ - -//CHECK#1 -try { - var z = (x *= 1); - $ERROR('#1.1: x *= 1 throw ReferenceError. Actual: ' + (z)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: x *= 1 throw ReferenceError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T3.10.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T3.10.js deleted file mode 100644 index 3bd20a14b..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T3.10.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A2.1_T3.10; - * @section: 11.13.2; - * @assertion: Operator uses GetValue; - * @description: If GetBase(LeftHandSideExpression) is null, throw ReferenceError. Check operator is "x ^= y"; -*/ - -//CHECK#1 -try { - var z = (x ^= 1); - $ERROR('#1.1: x ^= 1 throw ReferenceError. Actual: ' + (z)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: x ^= 1 throw ReferenceError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T3.11.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T3.11.js deleted file mode 100644 index 1eb4b3609..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T3.11.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A2.1_T3.11; - * @section: 11.13.2; - * @assertion: Operator uses GetValue; - * @description: If GetBase(LeftHandSideExpression) is null, throw ReferenceError. Check operator is "x |= y"; -*/ - -//CHECK#1 -try { - var z = (x |= 1); - $ERROR('#1.1: x |= 1 throw ReferenceError. Actual: ' + (z)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: x |= 1 throw ReferenceError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T3.2.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T3.2.js deleted file mode 100644 index 9670e3a11..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T3.2.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A2.1_T3.2; - * @section: 11.13.2; - * @assertion: Operator uses GetValue; - * @description: If GetBase(LeftHandSideExpression) is null, throw ReferenceError. Check operator is "x /= y"; -*/ - -//CHECK#1 -try { - var z = (x /= 1); - $ERROR('#1.1: x /= 1 throw ReferenceError. Actual: ' + (z)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: x /= 1 throw ReferenceError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T3.3.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T3.3.js deleted file mode 100644 index 37745fbc1..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T3.3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A2.1_T3.3; - * @section: 11.13.2; - * @assertion: Operator uses GetValue; - * @description: If GetBase(LeftHandSideExpression) is null, throw ReferenceError. Check operator is "x %= y"; -*/ - -//CHECK#1 -try { - var z = (x %= 1); - $ERROR('#1.1: x %= 1 throw ReferenceError. Actual: ' + (z)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: x %= 1 throw ReferenceError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T3.4.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T3.4.js deleted file mode 100644 index c021b0942..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T3.4.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A2.1_T3.4; - * @section: 11.13.2; - * @assertion: Operator uses GetValue; - * @description: If GetBase(LeftHandSideExpression) is null, throw ReferenceError. Check operator is "x += y"; -*/ - -//CHECK#1 -try { - var z = (x += 1); - $ERROR('#1.1: x += 1 throw ReferenceError. Actual: ' + (z)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: x += 1 throw ReferenceError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T3.5.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T3.5.js deleted file mode 100644 index cc01c0716..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T3.5.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A2.1_T3.5; - * @section: 11.13.2; - * @assertion: Operator uses GetValue; - * @description: If GetBase(LeftHandSideExpression) is null, throw ReferenceError. Check operator is "x -= y"; -*/ - -//CHECK#1 -try { - var z = (x -= 1); - $ERROR('#1.1: x -= 1 throw ReferenceError. Actual: ' + (z)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: x -= 1 throw ReferenceError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T3.6.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T3.6.js deleted file mode 100644 index fdd0c0dd9..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T3.6.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A2.1_T3.6; - * @section: 11.13.2; - * @assertion: Operator uses GetValue; - * @description: If GetBase(LeftHandSideExpression) is null, throw ReferenceError. Check operator is "x <<= y"; -*/ - -//CHECK#1 -try { - var z = (x <<= 1); - $ERROR('#1.1: x <<= 1 throw ReferenceError. Actual: ' + (z)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: x <<= 1 throw ReferenceError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T3.7.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T3.7.js deleted file mode 100644 index 870e774a3..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T3.7.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A2.1_T3.7; - * @section: 11.13.2; - * @assertion: Operator uses GetValue; - * @description: If GetBase(LeftHandSideExpression) is null, throw ReferenceError. Check operator is "x >>= y"; -*/ - -//CHECK#1 -try { - var z = (x >>= 1); - $ERROR('#1.1: x >>= 1 throw ReferenceError. Actual: ' + (z)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: x >>= 1 throw ReferenceError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T3.8.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T3.8.js deleted file mode 100644 index 162e7245a..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T3.8.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A2.1_T3.8; - * @section: 11.13.2; - * @assertion: Operator uses GetValue; - * @description: If GetBase(LeftHandSideExpression) is null, throw ReferenceError. Check operator is "x >>>= y"; -*/ - -//CHECK#1 -try { - var z = (x >>>= 1); - $ERROR('#1.1: x >>>= 1 throw ReferenceError. Actual: ' + (z)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: x >>>= 1 throw ReferenceError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T3.9.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T3.9.js deleted file mode 100644 index 704c63250..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.1_T3.9.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A2.1_T3.9; - * @section: 11.13.2; - * @assertion: Operator uses GetValue; - * @description: If GetBase(LeftHandSideExpression) is null, throw ReferenceError. Check operator is "x &= y"; -*/ - -//CHECK#1 -try { - var z = (x &= 1); - $ERROR('#1.1: x &= 1 throw ReferenceError. Actual: ' + (z)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: x &= 1 throw ReferenceError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.2_T1.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.2_T1.js deleted file mode 100644 index 12e694c59..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.2_T1.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A2.2_T1; - * @section: 11.13.2, 16; - * @assertion: Operator uses PutValue; - * @description: If Type(LeftHandSideExpression) is not Reference, throw ReferenceError (or SyntaxError). Check operator is "x *= y"; -* @negative -*/ - -//CHECK#1 -try { - var z = (1 *= 1); - $ERROR('#1.1: 1 *= 1 throw ReferenceError (or SyntaxError). Actual: ' + (z)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: 1 *= 1 throw ReferenceError (or SyntaxError). Actual: ' + (e)); - } else { - var z = (1 *= 1); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.2_T10.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.2_T10.js deleted file mode 100644 index a736ade20..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.2_T10.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A2.2_T10; - * @section: 11.13.2, 16; - * @assertion: Operator uses PutValue; - * @description: If Type(LeftHandSideExpression) is not Reference, throw ReferenceError (or SyntaxError). Check operator is "x ^= y"; -* @negative -*/ - -//CHECK#1 -try { - var z = (1 ^= 1); - $ERROR('#1.1: 1 ^= 1 throw ReferenceError (or SyntaxError). Actual: ' + (z)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: 1 ^= 1 throw ReferenceError (or SyntaxError). Actual: ' + (e)); - } else { - var z = (1 ^= 1); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.2_T11.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.2_T11.js deleted file mode 100644 index 00d29a582..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.2_T11.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A2.2_T11; - * @section: 11.13.2, 16; - * @assertion: Operator uses PutValue; - * @description: If Type(LeftHandSideExpression) is not Reference, throw ReferenceError (or SyntaxError). Check operator is "x |= y"; -* @negative -*/ - -//CHECK#1 -try { - var z = (1 |= 1); - $ERROR('#1.1: 1 |= 1 throw ReferenceError (or SyntaxError). Actual: ' + (z)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: 1 |= 1 throw ReferenceError (or SyntaxError). Actual: ' + (e)); - } else { - var z = (1 |= 1); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.2_T2.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.2_T2.js deleted file mode 100644 index cd2ddd8bd..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.2_T2.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A2.2_T2; - * @section: 11.13.2, 16; - * @assertion: Operator uses PutValue; - * @description: If Type(LeftHandSideExpression) is not Reference, throw ReferenceError (or SyntaxError). Check operator is "x /= y"; -* @negative -*/ - -//CHECK#1 -try { - var z = (1 /= 1); - $ERROR('#1.1: 1 /= 1 throw ReferenceError (or SyntaxError). Actual: ' + (z)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: 1 /= 1 throw ReferenceError (or SyntaxError). Actual: ' + (e)); - } else { - var z = (1 /= 1); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.2_T3.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.2_T3.js deleted file mode 100644 index a284ae157..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.2_T3.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A2.2_T3; - * @section: 11.13.2, 16; - * @assertion: Operator uses PutValue; - * @description: If Type(LeftHandSideExpression) is not Reference, throw ReferenceError (or SyntaxError). Check operator is "x %= y"; -* @negative -*/ - -//CHECK#1 -try { - var z = (1 %= 1); - $ERROR('#1.1: 1 %= 1 throw ReferenceError (or SyntaxError). Actual: ' + (z)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: 1 %= 1 throw ReferenceError (or SyntaxError). Actual: ' + (e)); - } else { - var z = (1 %= 1); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.2_T4.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.2_T4.js deleted file mode 100644 index 08e4e14ad..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.2_T4.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A2.2_T4; - * @section: 11.13.2, 16; - * @assertion: Operator uses PutValue; - * @description: If Type(LeftHandSideExpression) is not Reference, throw ReferenceError (or SyntaxError). Check operator is "x += y"; -* @negative -*/ - -//CHECK#1 -try { - var z = (1 += 1); - $ERROR('#1.1: 1 += 1 throw ReferenceError (or SyntaxError). Actual: ' + (z)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: 1 += 1 throw ReferenceError (or SyntaxError). Actual: ' + (e)); - } else { - var z = (1 += 1); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.2_T5.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.2_T5.js deleted file mode 100644 index 4e10590ab..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.2_T5.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A2.2_T5; - * @section: 11.13.2, 16; - * @assertion: Operator uses PutValue; - * @description: If Type(LeftHandSideExpression) is not Reference, throw ReferenceError (or SyntaxError). Check operator is "x -= y"; -* @negative -*/ - -//CHECK#1 -try { - var z = (1 -= 1); - $ERROR('#1.1: 1 -= 1 throw ReferenceError (or SyntaxError). Actual: ' + (z)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: 1 -= 1 throw ReferenceError (or SyntaxError). Actual: ' + (e)); - } else { - var z = (1 -= 1); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.2_T6.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.2_T6.js deleted file mode 100644 index 9fce0372e..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.2_T6.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A2.2_T6; - * @section: 11.13.2, 16; - * @assertion: Operator uses PutValue; - * @description: If Type(LeftHandSideExpression) is not Reference, throw ReferenceError (or SyntaxError). Check operator is "x <<= y"; -* @negative -*/ - -//CHECK#1 -try { - var z = (1 <<= 1); - $ERROR('#1.1: 1 <<= 1 throw ReferenceError (or SyntaxError). Actual: ' + (z)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: 1 <<= 1 throw ReferenceError (or SyntaxError). Actual: ' + (e)); - } else { - var z = (1 <<= 1); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.2_T7.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.2_T7.js deleted file mode 100644 index 9356b73d4..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.2_T7.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A2.2_T7; - * @section: 11.13.2, 16; - * @assertion: Operator uses PutValue; - * @description: If Type(LeftHandSideExpression) is not Reference, throw ReferenceError (or SyntaxError). Check operator is "x >>= y"; -* @negative -*/ - -//CHECK#1 -try { - var z = (1 >>= 1); - $ERROR('#1.1: 1 >>= 1 throw ReferenceError (or SyntaxError). Actual: ' + (z)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: 1 >>= 1 throw ReferenceError (or SyntaxError). Actual: ' + (e)); - } else { - var z = (1 >>= 1); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.2_T8.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.2_T8.js deleted file mode 100644 index 3c27b24f9..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.2_T8.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A2.2_T8; - * @section: 11.13.2, 16; - * @assertion: Operator uses PutValue; - * @description: If Type(LeftHandSideExpression) is not Reference, throw ReferenceError (or SyntaxError). Check operator is "x >>>= y"; -* @negative -*/ - -//CHECK#1 -try { - var z = (1 >>>= 1); - $ERROR('#1.1: 1 >>>= 1 throw ReferenceError (or SyntaxError). Actual: ' + (z)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: 1 >>>= 1 throw ReferenceError (or SyntaxError). Actual: ' + (e)); - } else { - var z = (1 >>>= 1); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.2_T9.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.2_T9.js deleted file mode 100644 index 0ac35ffea..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A2.2_T9.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A2.2_T9; - * @section: 11.13.2, 16; - * @assertion: Operator uses PutValue; - * @description: If Type(LeftHandSideExpression) is not Reference, throw ReferenceError (or SyntaxError). Check operator is "x &= y"; -* @negative -*/ - -//CHECK#1 -try { - var z = (1 &= 1); - $ERROR('#1.1: 1 &= 1 throw ReferenceError (or SyntaxError). Actual: ' + (z)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: 1 &= 1 throw ReferenceError (or SyntaxError). Actual: ' + (e)); - } else { - var z = (1 &= 1); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A3.1_T1.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A3.1_T1.js deleted file mode 100644 index 045da8110..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A3.1_T1.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A3.1_T1; - * @section: 11.13.2; - * @assertion: Operator x @= y uses PutValue(x, x @ y); - * @description: Checking Expression and Variable statements for x *= y; -*/ - -//CHECK#1 -var x = 1; -x *= -1; -if (x !== -1) { - $ERROR('#1: var x = 1; x *= -1; x === -1. Actual: ' + (x)); -} - -//CHECK#2 -y = 1; -y *= -1; -if (y !== -1) { - $ERROR('#2: y = 1; y *= -1; y === -1. Actual: ' + (y)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A3.1_T10.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A3.1_T10.js deleted file mode 100644 index 5ea0d2d3a..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A3.1_T10.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A3.1_T10; - * @section: 11.13.2; - * @assertion: Operator x @= y uses PutValue(x, x @ y); - * @description: Checking Expression and Variable statements for x ^= y; -*/ - -//CHECK#1 -var x = 0; -x ^= 1; -if (x !== 1) { - $ERROR('#1: var x = 0; x ^= 1; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -y = 1; -y ^= 0; -if (y !== 1) { - $ERROR('#2: y = 1; y ^= 0; y === 1. Actual: ' + (y)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A3.1_T11.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A3.1_T11.js deleted file mode 100644 index 542cd4fe3..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A3.1_T11.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A3.1_T11; - * @section: 11.13.2; - * @assertion: Operator x @= y uses PutValue(x, x @ y); - * @description: Checking Expression and Variable statements for x |= y; -*/ - -//CHECK#1 -var x = 0; -x |= 1; -if (x !== 1) { - $ERROR('#1: var x = 0; x |= 1; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -y = 1; -y |= 0; -if (y !== 1) { - $ERROR('#2: y = 1; y |= 0; y === 1. Actual: ' + (y)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A3.1_T2.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A3.1_T2.js deleted file mode 100644 index 679c295f5..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A3.1_T2.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A3.1_T2; - * @section: 11.13.2; - * @assertion: Operator x @= y uses PutValue(x, x @ y); - * @description: Checking Expression and Variable statements for x /= y; -*/ - -//CHECK#1 -var x = 1; -x /= -1; -if (x !== -1) { - $ERROR('#1: var x = 1; x /= -1; x === -1. Actual: ' + (x)); -} - -//CHECK#2 -y = 1; -y /= -1; -if (y !== -1) { - $ERROR('#2: y = 1; y /= -1; y === -1. Actual: ' + (y)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A3.1_T3.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A3.1_T3.js deleted file mode 100644 index cf65d0a05..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A3.1_T3.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A3.1_T3; - * @section: 11.13.2; - * @assertion: Operator x @= y uses PutValue(x, x @ y); - * @description: Checking Expression and Variable statements for x %= y; -*/ - -//CHECK#1 -var x = -1; -x %= 2; -if (x !== -1) { - $ERROR('#1: var x = -1; x %= 2; x === -1. Actual: ' + (x)); -} - -//CHECK#2 -y = -1; -y %= 2; -if (y !== -1) { - $ERROR('#2: y = -1; y %= 2; y === -1. Actual: ' + (y)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A3.1_T4.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A3.1_T4.js deleted file mode 100644 index 0cbcad1e5..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A3.1_T4.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A3.1_T4; - * @section: 11.13.2; - * @assertion: Operator x @= y uses PutValue(x, x @ y); - * @description: Checking Expression and Variable statements for x += y; -*/ - -//CHECK#1 -var x = 1; -x += 1; -if (x !== 2) { - $ERROR('#1: var x = 1; x += 1; x === 2. Actual: ' + (x)); -} - -//CHECK#2 -y = 1; -y += 1; -if (y !== 2) { - $ERROR('#2: y = 1; y += 1; y === 2. Actual: ' + (y)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A3.1_T5.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A3.1_T5.js deleted file mode 100644 index d84d38867..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A3.1_T5.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A3.1_T5; - * @section: 11.13.2; - * @assertion: Operator x @= y uses PutValue(x, x @ y); - * @description: Checking Expression and Variable statements for x -= y; -*/ - -//CHECK#1 -var x = -1; -x -= 1; -if (x !== -2) { - $ERROR('#1: var x = -1; x -= 1; x === -2. Actual: ' + (x)); -} - -//CHECK#2 -y = -1; -y -= 1; -if (y !== -2) { - $ERROR('#2: y = -1; y -= 1; y === -2. Actual: ' + (y)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A3.1_T6.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A3.1_T6.js deleted file mode 100644 index 70fd614fb..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A3.1_T6.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A3.1_T6; - * @section: 11.13.2; - * @assertion: Operator x @= y uses PutValue(x, x @ y); - * @description: Checking Expression and Variable statements for x <<= y; -*/ - -//CHECK#1 -var x = 1; -x <<= 1; -if (x !== 2) { - $ERROR('#1: var x = 1; x <<= 1; x === 2. Actual: ' + (x)); -} - -//CHECK#2 -y = 1; -y <<= 1; -if (y !== 2) { - $ERROR('#2: y = 1; y <<= 1; y === 2. Actual: ' + (y)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A3.1_T7.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A3.1_T7.js deleted file mode 100644 index d8bb6964d..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A3.1_T7.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A3.1_T7; - * @section: 11.13.2; - * @assertion: Operator x @= y uses PutValue(x, x @ y); - * @description: Checking Expression and Variable statements for x >>= y; -*/ - -//CHECK#1 -var x = 4; -x >>= 1; -if (x !== 2) { - $ERROR('#1: var x = 4; x >>= 1; x === 2. Actual: ' + (x)); -} - -//CHECK#2 -y = 4; -y >>= 1; -if (y !== 2) { - $ERROR('#2: y = 4; y >>= 1; y === 2. Actual: ' + (y)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A3.1_T8.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A3.1_T8.js deleted file mode 100644 index f43989be9..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A3.1_T8.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A3.1_T8; - * @section: 11.13.2; - * @assertion: Operator x @= y uses PutValue(x, x @ y); - * @description: Checking Expression and Variable statements for x >>>= y; -*/ - -//CHECK#1 -var x = 4; -x >>>= 1; -if (x !== 2) { - $ERROR('#1: var x = 4; x >>>= 1; x === 2. Actual: ' + (x)); -} - -//CHECK#2 -y = 4; -y >>>= 1; -if (y !== 2) { - $ERROR('#2: y = 4; y >>>= 1; y === 2. Actual: ' + (y)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A3.1_T9.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A3.1_T9.js deleted file mode 100644 index 6b8877e93..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A3.1_T9.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A3.1_T9; - * @section: 11.13.2; - * @assertion: Operator x @= y uses PutValue(x, x @ y); - * @description: Checking Expression and Variable statements for x &= y; -*/ - -//CHECK#1 -var x = 1; -x &= 1; -if (x !== 1) { - $ERROR('#1: var x = 1; x &= 1; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -y = 1; -y &= 1; -if (y !== 1) { - $ERROR('#2: y = 1; y &= 1; y === 1. Actual: ' + (y)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A3.2_T1.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A3.2_T1.js deleted file mode 100644 index bea8af649..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A3.2_T1.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A3.2_T1; - * @section: 11.13.2; - * @assertion: Operator x @= y returns x @ y; - * @description: Checking Expression and Variable statements for x *= y; -*/ - -//CHECK#1 -var x = 1; -var x1 = (x *= -1); -if (x1 !== -1) { - $ERROR('#1: var x = 1; var x1 = (x *= -1); x1 === -1. Actual: ' + (x1)); -} - -//CHECK#2 -y = 1; -y1 = (y *= -1); -if (y1 !== -1) { - $ERROR('#2: y = 1; y1 = (y *= -1); y1 === -1. Actual: ' + (y1)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A3.2_T10.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A3.2_T10.js deleted file mode 100644 index d956f4f32..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A3.2_T10.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A3.2_T10; - * @section: 11.13.2; - * @assertion: Operator x @= y returns x @ y; - * @description: Checking Expression and Variable statements for x ^= y; -*/ - -//CHECK#1 -var x = 0; -var x1 = (x ^= 1); -if (x1 !== 1) { - $ERROR('#1: var x = 0; var x1 = (x ^= 1); x1 === 1. Actual: ' + (x1)); -} - -//CHECK#2 -y = 1; -y1 = (y ^= 0); -if (y1 !== 1) { - $ERROR('#2: y = 1; y1 = (y ^= 0); y1 === 1. Actual: ' + (y1)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A3.2_T11.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A3.2_T11.js deleted file mode 100644 index f2031d604..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A3.2_T11.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A3.2_T11; - * @section: 11.13.2; - * @assertion: Operator x @= y returns x @ y; - * @description: Checking Expression and Variable statements for x |= y; -*/ - -//CHECK#1 -var x = 0; -var x1 = (x |= 1); -if (x1 !== 1) { - $ERROR('#1: var x = 0; var x1 = (x |= 1); x1 === 1. Actual: ' + (x1)); -} - -//CHECK#2 -y = 1; -y1 = (y |= 0); -if (y1 !== 1) { - $ERROR('#2: y = 1; y1 = (y |= 0); y1 === 1. Actual: ' + (y1)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A3.2_T2.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A3.2_T2.js deleted file mode 100644 index bf3e4281d..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A3.2_T2.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A3.2_T2; - * @section: 11.13.2; - * @assertion: Operator x @= y returns x @ y; - * @description: Checking Expression and Variable statements for x /= y; -*/ - -//CHECK#1 -var x = 1; -var x1 = (x /= -1); -if (x1 !== -1) { - $ERROR('#1: var x = 1; var x1 = (x /= -1); x1 === -1. Actual: ' + (x1)); -} - -//CHECK#2 -y = 1; -y1 = (y /= -1); -if (y1 !== -1) { - $ERROR('#2: y = 1; y1 = (y /= -1); y1 === -1. Actual: ' + (y1)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A3.2_T3.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A3.2_T3.js deleted file mode 100644 index 2a4ecc387..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A3.2_T3.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A3.2_T3; - * @section: 11.13.2; - * @assertion: Operator x @= y returns x @ y; - * @description: Checking Expression and Variable statements for x %= y; -*/ - -//CHECK#1 -var x = -1; -var x1 = (x %= 2); -if (x1 !== -1) { - $ERROR('#1: var x = -1; var x1 = (x %= 2); x1 === -1. Actual: ' + (x1)); -} - -//CHECK#2 -y = -1; -y1 = (y %= 2); -if (y1 !== -1) { - $ERROR('#2: y = -1; y1 = (y %= 2); y1 === -1. Actual: ' + (y1)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A3.2_T4.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A3.2_T4.js deleted file mode 100644 index 827c19773..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A3.2_T4.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A3.2_T4; - * @section: 11.13.2; - * @assertion: Operator x @= y returns x @ y; - * @description: Checking Expression and Variable statements for x += y; -*/ - -//CHECK#1 -var x = 1; -var x1 = (x += 1); -if (x1 !== 2) { - $ERROR('#1: var x = 1; var x1 = (x += 1); x1 === 2. Actual: ' + (x1)); -} - -//CHECK#2 -y = 1; -y1 = (y += 1); -if (y1 !== 2) { - $ERROR('#2: y = 1; y1 = (y += 1); y1 === 2. Actual: ' + (y1)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A3.2_T5.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A3.2_T5.js deleted file mode 100644 index d96373686..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A3.2_T5.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A3.2_T5; - * @section: 11.13.2; - * @assertion: Operator x @= y returns x @ y; - * @description: Checking Expression and Variable statements for x -= y; -*/ - -//CHECK#1 -var x = -1; -var x1 = (x -= 1); -if (x1 !== -2) { - $ERROR('#1: var x = -1; var x1 = (x -= 1); x1 === -2. Actual: ' + (x1)); -} - -//CHECK#2 -y = -1; -y1 = (y -= 1); -if (y1 !== -2) { - $ERROR('#2: y = -1; y1 = (y -= 1); y1 === -2. Actual: ' + (y1)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A3.2_T6.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A3.2_T6.js deleted file mode 100644 index 799bb4d38..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A3.2_T6.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A3.2_T6; - * @section: 11.13.2; - * @assertion: Operator x @= y returns x @ y; - * @description: Checking Expression and Variable statements for x <<= y; -*/ - -//CHECK#1 -var x = 1; -var x1 = (x <<= 1); -if (x1 !== 2) { - $ERROR('#1: var x = 1; var x1 = (x <<= 1); x1 === 2. Actual: ' + (x1)); -} - -//CHECK#2 -y = 1; -y1 = (y <<= 1); -if (y1 !== 2) { - $ERROR('#2: y = 1; y1 = (y <<= 1); y1 === 2. Actual: ' + (y1)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A3.2_T7.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A3.2_T7.js deleted file mode 100644 index 3d8efba58..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A3.2_T7.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A3.2_T7; - * @section: 11.13.2; - * @assertion: Operator x @= y returns x @ y; - * @description: Checking Expression and Variable statements for x >>= y; -*/ - -//CHECK#1 -var x = 4; -var x1 = (x >>= 1); -if (x1 !== 2) { - $ERROR('#1: var x = 4; var x1 = (x >>= 1); x1 === 2. Actual: ' + (x1)); -} - -//CHECK#2 -y = 4; -y1 = (y >>= 1); -if (y1 !== 2) { - $ERROR('#2: y = 4; y1 = (y >>= 1); y1 === 2. Actual: ' + (y1)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A3.2_T8.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A3.2_T8.js deleted file mode 100644 index e27708a3f..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A3.2_T8.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A3.2_T8; - * @section: 11.13.2; - * @assertion: Operator x @= y returns x @ y; - * @description: Checking Expression and Variable statements for x >>>= y; -*/ - -//CHECK#1 -var x = 4; -var x1 = (x >>>= 1); -if (x1 !== 2) { - $ERROR('#1: var x = 4; var x1 = (x >>>= 1); x1 === 2. Actual: ' + (x1)); -} - -//CHECK#2 -y = 4; -y1 = (y >>>= 1); -if (y1 !== 2) { - $ERROR('#2: y = 4; y1 = (y >>>= 1); y1 === 2. Actual: ' + (y1)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A3.2_T9.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A3.2_T9.js deleted file mode 100644 index 2cf6d4e78..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A3.2_T9.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A3.2_T9; - * @section: 11.13.2; - * @assertion: Operator x @= y returns x @ y; - * @description: Checking Expression and Variable statements for x &= y; -*/ - -//CHECK#1 -var x = 1; -var x1 = (x &= 1); -if (x1 !== 1) { - $ERROR('#1: var x = 1; var x1 = (x &= 1); x1 === 1. Actual: ' + (x1)); -} - -//CHECK#2 -y = 1; -y1 = (y &= 1); -if (y1 !== 1) { - $ERROR('#2: y = 1; y1 = (y &= 1); y1 === 1. Actual: ' + (y1)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.10_T1.1.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.10_T1.1.js deleted file mode 100644 index 73aaa2b52..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.10_T1.1.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.10_T1.1; - * @section: 11.13.2, 11.10.2; - * @assertion: The production x ^= y is the same as x = x ^ y; - * @description: Type(x) and Type(y) vary between primitive boolean and Boolean object; - */ - -//CHECK#1 -x = true; -x ^= true; -if (x !== 0) { - $ERROR('#1: x = true; x ^= true; x === 0. Actual: ' + (x)); -} - -//CHECK#2 -x = new Boolean(true); -x ^= true; -if (x !== 0) { - $ERROR('#2: x = new Boolean(true); x ^= true; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = true; -x ^= new Boolean(true); -if (x !== 0) { - $ERROR('#3: x = true; x ^= new Boolean(true); x === 0. Actual: ' + (x)); -} - -//CHECK#4 -x = new Boolean(true); -x ^= new Boolean(true); -if (x !== 0) { - $ERROR('#4: x = new Boolean(true); x ^= new Boolean(true); x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.10_T1.2.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.10_T1.2.js deleted file mode 100644 index d1684aded..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.10_T1.2.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.10_T1.2; - * @section: 11.13.2, 11.10.2; - * @assertion: The production x ^= y is the same as x = x ^ y; - * @description: Type(x) and Type(y) vary between primitive number and Number object; -*/ - -//CHECK#1 -x = 1; -x ^= 1; -if (x !== 0) { - $ERROR('#1: x = 1; x ^= 1; x === 0. Actual: ' + (x)); -} - -//CHECK#2 -x = new Number(1); -x ^= 1; -if (x !== 0) { - $ERROR('#2: x = new Number(1); x ^= 1; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = 1; -x ^= new Number(1); -if (x !== 0) { - $ERROR('#3: x = 1; x ^= new Number(1); x === 0. Actual: ' + (x)); -} - -//CHECK#4 -x = new Number(1); -x ^= new Number(1); -if (x !== 0) { - $ERROR('#4: x = new Number(1); x ^= new Number(1); x === 0. Actual: ' + (x)); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.10_T1.3.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.10_T1.3.js deleted file mode 100644 index a6fa846b3..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.10_T1.3.js +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.10_T1.3; - * @section: 11.13.2, 11.10.2; - * @assertion: The production x ^= y is the same as x = x ^ y; - * @description: Type(x) and Type(y) vary between primitive string and String object; -*/ - -//CHECK#1 -x = "1"; -x ^= "1"; -if (x !== 0) { - $ERROR('#1: x = "1"; x ^= "1"; x === 0. Actual: ' + (x)); -} - -//CHECK#2 -x = new String("1"); -x ^= "1"; -if (x !== 0) { - $ERROR('#2: x = new String("1"); x ^= "1"; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = "1"; -x ^= new String("1"); -if (x !== 0) { - $ERROR('#3: x = "1"; x ^= new String("1"); x === 0. Actual: ' + (x)); -} - -//CHECK#4 -x = new String("1"); -x ^= new String("1"); -if (x !== 0) { - $ERROR('#4: x = new String("1"); x ^= new String("1"); x === 0. Actual: ' + (x)); -} - -//CHECK#5 -x = "x"; -x ^= "1"; -if (x !== 1) { - $ERROR('#5: x = "x"; x ^= "1"; x === 1. Actual: ' + (x)); -} - -//CHECK#6 -x = "1"; -x ^= "x"; -if (x !== 1) { - $ERROR('#6: x = "1"; x ^= "x"; x === 1. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.10_T1.4.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.10_T1.4.js deleted file mode 100644 index 17a47f3ed..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.10_T1.4.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.10_T1.4; - * @section: 11.13.2, 11.10.2; - * @assertion: The production x ^= y is the same as x = x ^ y; - * @description: Type(x) and Type(y) vary between Null and Undefined; - */ - -//CHECK#1 -x = null; -x ^= undefined; -if (x !== 0) { - $ERROR('#1: x = null; x ^= undefined; x === 0. Actual: ' + (x)); -} - -//CHECK#2 -x = undefined; -x ^= null; -if (x !== 0) { - $ERROR('#2: x = undefined; x ^= null; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = undefined; -x ^= undefined; -if (x !== 0) { - $ERROR('#3: x = undefined; x ^= undefined; x === 0. Actual: ' + (x)); -} - -//CHECK#4 -x = null; -x ^= null; -if (x !== 0) { - $ERROR('#4: x = null; x ^= null; x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.10_T2.1.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.10_T2.1.js deleted file mode 100644 index 037f1f696..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.10_T2.1.js +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.10_T2.1; - * @section: 11.13.2, 11.10.2; - * @assertion: The production x ^= y is the same as x = x ^ y; - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Boolean (primitive and object); - */ - -//CHECK#1 -x = true; -x ^= 1; -if (x !== 0) { - $ERROR('#1: x = true; x ^= 1; x === 0. Actual: ' + (x)); -} - -//CHECK#2 -x = 1; -x ^= true; -if (x !== 0) { - $ERROR('#2: x = 1; x ^= true; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = new Boolean(true); -x ^= 1; -if (x !== 0) { - $ERROR('#3: x = new Boolean(true); x ^= 1; x === 0. Actual: ' + (x)); -} - -//CHECK#4 -x = 1; -x ^= new Boolean(true); -if (x !== 0) { - $ERROR('#4: x = 1; x ^= new Boolean(true); x === 0. Actual: ' + (x)); -} - -//CHECK#5 -x = true; -x ^= new Number(1); -if (x !== 0) { - $ERROR('#5: x = true; x ^= new Number(1); x === 0. Actual: ' + (x)); -} - -//CHECK#6 -x = new Number(1); -x ^= true; -if (x !== 0) { - $ERROR('#6: x = new Number(1); x ^= true; x === 0. Actual: ' + (x)); -} - -//CHECK#7 -x = new Boolean(true); -x ^= new Number(1); -if (x !== 0) { - $ERROR('#7: x = new Boolean(true); x ^= new Number(1); x === 0. Actual: ' + (x)); -} - -//CHECK#8 -x = new Number(1); -x ^= new Boolean(true); -if (x !== 0) { - $ERROR('#8: x = new Number(1); x ^= new Boolean(true); x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.10_T2.2.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.10_T2.2.js deleted file mode 100644 index 8627c9e9b..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.10_T2.2.js +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.10_T2.2; - * @section: 11.13.2, 11.10.2; - * @assertion: The production x ^= y is the same as x = x ^ y; - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and String (primitive and object); -*/ - -//CHECK#1 -x = "1"; -x ^= 1; -if (x !== 0) { - $ERROR('#1: x = "1"; x ^= 1; x === 0. Actual: ' + (x)); -} - -//CHECK#2 -x = 1; -x ^= "1"; -if (x !== 0) { - $ERROR('#2: x = 1; x ^= "1"; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = new String("1"); -x ^= 1; -if (x !== 0) { - $ERROR('#3: x = new String("1"); x ^= 1; x === 0. Actual: ' + (x)); -} - -//CHECK#4 -x = 1; -x ^= new String("1"); -if (x !== 0) { - $ERROR('#4: x = 1; x ^= new String("1"); x === 0. Actual: ' + (x)); -} - -//CHECK#5 -x = "1"; -x ^= new Number(1); -if (x !== 0) { - $ERROR('#5: x = "1"; x ^= new Number(1); x === 0. Actual: ' + (x)); -} - -//CHECK#6 -x = new Number(1); -x ^= "1"; -if (x !== 0) { - $ERROR('#6: x = new Number(1); x ^= "1"; x === 0. Actual: ' + (x)); -} - -//CHECK#7 -x = new String("1"); -x ^= new Number(1); -if (x !== 0) { - $ERROR('#7: x = new String("1"); x ^= new Number(1); x === 0. Actual: ' + (x)); -} - -//CHECK#8 -x = new Number(1); -x ^= new String("1"); -if (x !== 0) { - $ERROR('#8: x = new Number(1); x ^= new String("1"); x === 0. Actual: ' + (x)); -} - -//CHECK#9 -x = "x"; -x ^= 1; -if (x !== 1) { - $ERROR('#9: x = "x"; x ^= 1; x === 1. Actual: ' + (x)); -} - -//CHECK#10 -x = 1; -x ^= "x"; -if (x !== 1) { - $ERROR('#10: x = 1; x ^= "x"; x === 1. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.10_T2.3.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.10_T2.3.js deleted file mode 100644 index ea682bdd4..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.10_T2.3.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.10_T2.3; - * @section: 11.13.2, 11.10.2; - * @assertion: The production x ^= y is the same as x = x ^ y; - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Null; - */ - -//CHECK#1 -x = 1; -x ^= null; -if (x !== 1) { - $ERROR('#1: x = 1; x ^= null; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -x = null; -x ^= 1; -if (x !== 1) { - $ERROR('#2: x = null; x ^= 1; x === 1. Actual: ' + (x)); -} - -//CHECK#3 -x = new Number(1); -x ^= null; -if (x !== 1) { - $ERROR('#3: x = new Number(1); x ^= null; x === 1. Actual: ' + (x)); -} - -//CHECK#4 -x = null; -x ^= new Number(1); -if (x !== 1) { - $ERROR('#4: x = null; x ^= new Number(1); x === 1. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.10_T2.4.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.10_T2.4.js deleted file mode 100644 index 7d5ed27e9..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.10_T2.4.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.10_T2.4; - * @section: 11.13.2, 11.10.2; - * @assertion: The production x ^= y is the same as x = x ^ y; - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Undefined; - */ - -//CHECK#1 -x = 1; -x ^= undefined; -if (x !== 1) { - $ERROR('#1: x = 1; x ^= undefined; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -x = undefined; -x ^= 1; -if (x !== 1) { - $ERROR('#2: x = undefined; x ^= 1; x === 1. Actual: ' + (x)); -} - -//CHECK#3 -x = new Number(1); -x ^= undefined; -if (x !== 1) { - $ERROR('#3: x = new Number(1); x ^= undefined; x === 1. Actual: ' + (x)); -} - -//CHECK#4 -x = undefined; -x ^= new Number(1); -if (x !== 1) { - $ERROR('#4: x = undefined; x ^= new Number(1); x === 1. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.10_T2.5.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.10_T2.5.js deleted file mode 100644 index 49275a0e7..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.10_T2.5.js +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.10_T2.5; - * @section: 11.13.2, 11.10.2; - * @assertion: The production x ^= y is the same as x = x ^ y; - * @description: Type(x) is different from Type(y) and both types vary between String (primitive or object) and Boolean (primitive and object); -*/ - -//CHECK#1 -x = true; -x ^= "1"; -if (x !== 0) { - $ERROR('#1: x = true; x ^= "1"; x === 0. Actual: ' + (x)); -} - -//CHECK#2 -x = "1"; -x ^= true; -if (x !== 0) { - $ERROR('#2: x = "1"; x ^= true; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = new Boolean(true); -x ^= "1"; -if (x !== 0) { - $ERROR('#3: x = new Boolean(true); x ^= "1"; x === 0. Actual: ' + (x)); -} - -//CHECK#4 -x = "1"; -x ^= new Boolean(true); -if (x !== 0) { - $ERROR('#4: x = "1"; x ^= new Boolean(true); x === 0. Actual: ' + (x)); -} - -//CHECK#5 -x = true; -x ^= new String("1"); -if (x !== 0) { - $ERROR('#5: x = true; x ^= new String("1"); x === 0. Actual: ' + (x)); -} - -//CHECK#6 -x = new String("1"); -x ^= true; -if (x !== 0) { - $ERROR('#6: x = new String("1"); x ^= true; x === 0. Actual: ' + (x)); -} - -//CHECK#7 -x = new Boolean(true); -x ^= new String("1"); -if (x !== 0) { - $ERROR('#7: x = new Boolean(true); x ^= new String("1"); x === 0. Actual: ' + (x)); -} - -//CHECK#8 -x = new String("1"); -x ^= new Boolean(true); -if (x !== 0) { - $ERROR('#8: x = new String("1"); x ^= new Boolean(true); x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.10_T2.6.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.10_T2.6.js deleted file mode 100644 index c0e2e8750..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.10_T2.6.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.10_T2.6; - * @section: 11.13.2, 11.10.2; - * @assertion: The production x ^= y is the same as x = x ^ y; - * @description: Type(x) is different from Type(y) and both types vary between String (primitive or object) and Undefined; - */ - -//CHECK#1 -x = "1"; -x ^= undefined; -if (x !== 1) { - $ERROR('#1: x = "1"; x ^= undefined; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -x = undefined; -x ^= "1"; -if (x !== 1) { - $ERROR('#2: x = undefined; x ^= "1"; x === 1. Actual: ' + (x)); -} - -//CHECK#3 -x = new String("1"); -x ^= undefined; -if (x !== 1) { - $ERROR('#3: x = new String("1"); x ^= undefined; x === 1. Actual: ' + (x)); -} - -//CHECK#4 -x = undefined; -x ^= new String("1"); -if (x !== 1) { - $ERROR('#4: x = undefined; x ^= new String("1"); x === 1. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.10_T2.7.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.10_T2.7.js deleted file mode 100644 index 8302ff023..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.10_T2.7.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.10_T2.7; - * @section: 11.13.2, 11.10.2; - * @assertion: The production x ^= y is the same as x = x ^ y; - * @description: Type(x) is different from Type(y) and both types vary between String (primitive or object) and Null; - */ - -//CHECK#1 -x = "1"; -x ^= null; -if (x !== 1) { - $ERROR('#1: x = "1"; x ^= null; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -x = null; -x ^= "1"; -if (x !== 1) { - $ERROR('#2: x = null; x ^= "1"; x === 1. Actual: ' + (x)); -} - -//CHECK#3 -x = new String("1"); -x ^= null; -if (x !== 1) { - $ERROR('#3: x = new String("1"); x ^= null; x === 1. Actual: ' + (x)); -} - -//CHECK#4 -x = null; -x ^= new String("1"); -if (x !== 1) { - $ERROR('#4: x = null; x ^= new String("1"); x === 1. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.10_T2.8.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.10_T2.8.js deleted file mode 100644 index a32f87f27..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.10_T2.8.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.10_T2.8; - * @section: 11.13.2, 11.10.2; - * @assertion: The production x ^= y is the same as x = x ^ y; - * @description: Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Undefined; - */ - -//CHECK#1 -x = true; -x ^= undefined; -if (x !== 1) { - $ERROR('#1: x = true; x ^= undefined; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -x = undefined; -x ^= true; -if (x !== 1) { - $ERROR('#2: x = undefined; x ^= true; x === 1. Actual: ' + (x)); -} - -//CHECK#3 -x = new Boolean(true); -x ^= undefined; -if (x !== 1) { - $ERROR('#3: x = new Boolean(true); x ^= undefined; x === 1. Actual: ' + (x)); -} - -//CHECK#4 -x = undefined; -x ^= new Boolean(true); -if (x !== 1) { - $ERROR('#4: x = undefined; x ^= new Boolean(true); x === 1. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.10_T2.9.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.10_T2.9.js deleted file mode 100644 index a57c4572e..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.10_T2.9.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.10_T2.9; - * @section: 11.13.2, 11.10.2; - * @assertion: The production x ^= y is the same as x = x ^ y; - * @description: Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Null; - */ - -//CHECK#1 -x = true; -x ^= null; -if (x !== 1) { - $ERROR('#1: x = true; x ^= null; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -x = null; -x ^= true; -if (x !== 1) { - $ERROR('#2: x = null; x ^= true; x === 1. Actual: ' + (x)); -} - -//CHECK#3 -x = new Boolean(true); -x ^= null; -if (x !== 1) { - $ERROR('#3: x = new Boolean(true); x ^= null; x === 1. Actual: ' + (x)); -} - -//CHECK#4 -x = null; -x ^= new Boolean(true); -if (x !== 1) { - $ERROR('#4: x = null; x ^= new Boolean(true); x === 1. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.11_T1.1.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.11_T1.1.js deleted file mode 100644 index 587ba5bd9..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.11_T1.1.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.11_T1.1; - * @section: 11.13.2, 11.10.3; - * @assertion: The production x |= y is the same as x = x | y; - * @description: Type(x) and Type(y) vary between primitive boolean and Boolean object; - */ - -//CHECK#1 -x = true; -x |= true; -if (x !== 1) { - $ERROR('#1: x = true; x |= true; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -x = new Boolean(true); -x |= true; -if (x !== 1) { - $ERROR('#2: x = new Boolean(true); x |= true; x === 1. Actual: ' + (x)); -} - -//CHECK#3 -x = true; -x |= new Boolean(true); -if (x !== 1) { - $ERROR('#3: x = true; x |= new Boolean(true); x === 1. Actual: ' + (x)); -} - -//CHECK#4 -x = new Boolean(true); -x |= new Boolean(true); -if (x !== 1) { - $ERROR('#4: x = new Boolean(true); x |= new Boolean(true); x === 1. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.11_T1.2.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.11_T1.2.js deleted file mode 100644 index 83f5230f7..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.11_T1.2.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.11_T1.2; - * @section: 11.13.2, 11.10.3; - * @assertion: The production x |= y is the same as x = x | y; - * @description: Type(x) and Type(y) vary between primitive number and Number object; -*/ - -//CHECK#1 -x = 1; -x |= 1; -if (x !== 1) { - $ERROR('#1: x = 1; x |= 1; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -x = new Number(1); -x |= 1; -if (x !== 1) { - $ERROR('#2: x = new Number(1); x |= 1; x === 1. Actual: ' + (x)); -} - -//CHECK#3 -x = 1; -x |= new Number(1); -if (x !== 1) { - $ERROR('#3: x = 1; x |= new Number(1); x === 1. Actual: ' + (x)); -} - -//CHECK#4 -x = new Number(1); -x |= new Number(1); -if (x !== 1) { - $ERROR('#4: x = new Number(1); x |= new Number(1); x === 1. Actual: ' + (x)); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.11_T1.3.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.11_T1.3.js deleted file mode 100644 index 85461758c..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.11_T1.3.js +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.11_T1.3; - * @section: 11.13.2, 11.10.3; - * @assertion: The production x |= y is the same as x = x | y; - * @description: Type(x) and Type(y) vary between primitive string and String object; -*/ - -//CHECK#1 -x = "1"; -x |= "1"; -if (x !== 1) { - $ERROR('#1: x = "1"; x |= "1"; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -x = new String("1"); -x |= "1"; -if (x !== 1) { - $ERROR('#2: x = new String("1"); x |= "1"; x === 1. Actual: ' + (x)); -} - -//CHECK#3 -x = "1"; -x |= new String("1"); -if (x !== 1) { - $ERROR('#3: x = "1"; x |= new String("1"); x === 1. Actual: ' + (x)); -} - -//CHECK#4 -x = new String("1"); -x |= new String("1"); -if (x !== 1) { - $ERROR('#4: x = new String("1"); x |= new String("1"); x === 1. Actual: ' + (x)); -} - -//CHECK#5 -x = "x"; -x |= "1"; -if (x !== 1) { - $ERROR('#5: x = "x"; x |= "1"; x === 1. Actual: ' + (x)); -} - -//CHECK#6 -x = "1"; -x |= "x"; -if (x !== 1) { - $ERROR('#6: x = "1"; x |= "x"; x === 1. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.11_T1.4.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.11_T1.4.js deleted file mode 100644 index 60758ffd5..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.11_T1.4.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.11_T1.4; - * @section: 11.13.2, 11.10.3; - * @assertion: The production x |= y is the same as x = x | y; - * @description: Type(x) and Type(y) vary between Null and Undefined; - */ - -//CHECK#1 -x = null; -x |= undefined; -if (x !== 0) { - $ERROR('#1: x = null; x |= undefined; x === 0. Actual: ' + (x)); -} - -//CHECK#2 -x = undefined; -x |= null; -if (x !== 0) { - $ERROR('#2: x = undefined; x |= null; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = undefined; -x |= undefined; -if (x !== 0) { - $ERROR('#3: x = undefined; x |= undefined; x === 0. Actual: ' + (x)); -} - -//CHECK#4 -x = null; -x |= null; -if (x !== 0) { - $ERROR('#4: x = null; x |= null; x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.11_T2.1.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.11_T2.1.js deleted file mode 100644 index fb5b80a4d..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.11_T2.1.js +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.11_T2.1; - * @section: 11.13.2, 11.10.3; - * @assertion: The production x |= y is the same as x = x | y; - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Boolean (primitive and object); - */ - -//CHECK#1 -x = true; -x |= 1; -if (x !== 1) { - $ERROR('#1: x = true; x |= 1; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -x = 1; -x |= true; -if (x !== 1) { - $ERROR('#2: x = 1; x |= true; x === 1. Actual: ' + (x)); -} - -//CHECK#3 -x = new Boolean(true); -x |= 1; -if (x !== 1) { - $ERROR('#3: x = new Boolean(true); x |= 1; x === 1. Actual: ' + (x)); -} - -//CHECK#4 -x = 1; -x |= new Boolean(true); -if (x !== 1) { - $ERROR('#4: x = 1; x |= new Boolean(true); x === 1. Actual: ' + (x)); -} - -//CHECK#5 -x = true; -x |= new Number(1); -if (x !== 1) { - $ERROR('#5: x = true; x |= new Number(1); x === 1. Actual: ' + (x)); -} - -//CHECK#6 -x = new Number(1); -x |= true; -if (x !== 1) { - $ERROR('#6: x = new Number(1); x |= true; x === 1. Actual: ' + (x)); -} - -//CHECK#7 -x = new Boolean(true); -x |= new Number(1); -if (x !== 1) { - $ERROR('#7: x = new Boolean(true); x |= new Number(1); x === 1. Actual: ' + (x)); -} - -//CHECK#8 -x = new Number(1); -x |= new Boolean(true); -if (x !== 1) { - $ERROR('#8: x = new Number(1); x |= new Boolean(true); x === 1. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.11_T2.2.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.11_T2.2.js deleted file mode 100644 index 550a4d24d..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.11_T2.2.js +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.11_T2.2; - * @section: 11.13.2, 11.10.3; - * @assertion: The production x |= y is the same as x = x | y; - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and String (primitive and object); -*/ - -//CHECK#1 -x = "1"; -x |= 1; -if (x !== 1) { - $ERROR('#1: x = "1"; x |= 1; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -x = 1; -x |= "1"; -if (x !== 1) { - $ERROR('#2: x = 1; x |= "1"; x === 1. Actual: ' + (x)); -} - -//CHECK#3 -x = new String("1"); -x |= 1; -if (x !== 1) { - $ERROR('#3: x = new String("1"); x |= 1; x === 1. Actual: ' + (x)); -} - -//CHECK#4 -x = 1; -x |= new String("1"); -if (x !== 1) { - $ERROR('#4: x = 1; x |= new String("1"); x === 1. Actual: ' + (x)); -} - -//CHECK#5 -x = "1"; -x |= new Number(1); -if (x !== 1) { - $ERROR('#5: x = "1"; x |= new Number(1); x === 1. Actual: ' + (x)); -} - -//CHECK#6 -x = new Number(1); -x |= "1"; -if (x !== 1) { - $ERROR('#6: x = new Number(1); x |= "1"; x === 1. Actual: ' + (x)); -} - -//CHECK#7 -x = new String("1"); -x |= new Number(1); -if (x !== 1) { - $ERROR('#7: x = new String("1"); x |= new Number(1); x === 1. Actual: ' + (x)); -} - -//CHECK#8 -x = new Number(1); -x |= new String("1"); -if (x !== 1) { - $ERROR('#8: x = new Number(1); x |= new String("1"); x === 1. Actual: ' + (x)); -} - -//CHECK#9 -x = "x"; -x |= 1; -if (x !== 1) { - $ERROR('#9: x = "x"; x |= 1; x === 1. Actual: ' + (x)); -} - -//CHECK#10 -x = 1; -x |= "x"; -if (x !== 1) { - $ERROR('#10: x = 1; x |= "x"; x === 1. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.11_T2.3.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.11_T2.3.js deleted file mode 100644 index 12a8a1fc0..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.11_T2.3.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.11_T2.3; - * @section: 11.13.2, 11.10.3; - * @assertion: The production x |= y is the same as x = x | y; - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Null; - */ - -//CHECK#1 -x = 1; -x |= null; -if (x !== 1) { - $ERROR('#1: x = 1; x |= null; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -x = null; -x |= 1; -if (x !== 1) { - $ERROR('#2: x = null; x |= 1; x === 1. Actual: ' + (x)); -} - -//CHECK#3 -x = new Number(1); -x |= null; -if (x !== 1) { - $ERROR('#3: x = new Number(1); x |= null; x === 1. Actual: ' + (x)); -} - -//CHECK#4 -x = null; -x |= new Number(1); -if (x !== 1) { - $ERROR('#4: x = null; x |= new Number(1); x === 1. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.11_T2.4.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.11_T2.4.js deleted file mode 100644 index 952d9f95a..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.11_T2.4.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.11_T2.4; - * @section: 11.13.2, 11.10.3; - * @assertion: The production x |= y is the same as x = x | y; - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Undefined; - */ - -//CHECK#1 -x = 1; -x |= undefined; -if (x !== 1) { - $ERROR('#1: x = 1; x |= undefined; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -x = undefined; -x |= 1; -if (x !== 1) { - $ERROR('#2: x = undefined; x |= 1; x === 1. Actual: ' + (x)); -} - -//CHECK#3 -x = new Number(1); -x |= undefined; -if (x !== 1) { - $ERROR('#3: x = new Number(1); x |= undefined; x === 1. Actual: ' + (x)); -} - -//CHECK#4 -x = undefined; -x |= new Number(1); -if (x !== 1) { - $ERROR('#4: x = undefined; x |= new Number(1); x === 1. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.11_T2.5.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.11_T2.5.js deleted file mode 100644 index 1d653559a..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.11_T2.5.js +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.11_T2.5; - * @section: 11.13.2, 11.10.3; - * @assertion: The production x |= y is the same as x = x | y; - * @description: Type(x) is different from Type(y) and both types vary between String (primitive or object) and Boolean (primitive and object); -*/ - -//CHECK#1 -x = true; -x |= "1"; -if (x !== 1) { - $ERROR('#1: x = true; x |= "1"; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -x = "1"; -x |= true; -if (x !== 1) { - $ERROR('#2: x = "1"; x |= true; x === 1. Actual: ' + (x)); -} - -//CHECK#3 -x = new Boolean(true); -x |= "1"; -if (x !== 1) { - $ERROR('#3: x = new Boolean(true); x |= "1"; x === 1. Actual: ' + (x)); -} - -//CHECK#4 -x = "1"; -x |= new Boolean(true); -if (x !== 1) { - $ERROR('#4: x = "1"; x |= new Boolean(true); x === 1. Actual: ' + (x)); -} - -//CHECK#5 -x = true; -x |= new String("1"); -if (x !== 1) { - $ERROR('#5: x = true; x |= new String("1"); x === 1. Actual: ' + (x)); -} - -//CHECK#6 -x = new String("1"); -x |= true; -if (x !== 1) { - $ERROR('#6: x = new String("1"); x |= true; x === 1. Actual: ' + (x)); -} - -//CHECK#7 -x = new Boolean(true); -x |= new String("1"); -if (x !== 1) { - $ERROR('#7: x = new Boolean(true); x |= new String("1"); x === 1. Actual: ' + (x)); -} - -//CHECK#8 -x = new String("1"); -x |= new Boolean(true); -if (x !== 1) { - $ERROR('#8: x = new String("1"); x |= new Boolean(true); x === 1. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.11_T2.6.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.11_T2.6.js deleted file mode 100644 index 31bb5f809..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.11_T2.6.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.11_T2.6; - * @section: 11.13.2, 11.10.3; - * @assertion: The production x |= y is the same as x = x | y; - * @description: Type(x) is different from Type(y) and both types vary between String (primitive or object) and Undefined; - */ - -//CHECK#1 -x = "1"; -x |= undefined; -if (x !== 1) { - $ERROR('#1: x = "1"; x |= undefined; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -x = undefined; -x |= "1"; -if (x !== 1) { - $ERROR('#2: x = undefined; x |= "1"; x === 1. Actual: ' + (x)); -} - -//CHECK#3 -x = new String("1"); -x |= undefined; -if (x !== 1) { - $ERROR('#3: x = new String("1"); x |= undefined; x === 1. Actual: ' + (x)); -} - -//CHECK#4 -x = undefined; -x |= new String("1"); -if (x !== 1) { - $ERROR('#4: x = undefined; x |= new String("1"); x === 1. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.11_T2.7.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.11_T2.7.js deleted file mode 100644 index 2ff06002e..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.11_T2.7.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.11_T2.7; - * @section: 11.13.2, 11.10.3; - * @assertion: The production x |= y is the same as x = x | y; - * @description: Type(x) is different from Type(y) and both types vary between String (primitive or object) and Null; - */ - -//CHECK#1 -x = "1"; -x |= null; -if (x !== 1) { - $ERROR('#1: x = "1"; x |= null; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -x = null; -x |= "1"; -if (x !== 1) { - $ERROR('#2: x = null; x |= "1"; x === 1. Actual: ' + (x)); -} - -//CHECK#3 -x = new String("1"); -x |= null; -if (x !== 1) { - $ERROR('#3: x = new String("1"); x |= null; x === 1. Actual: ' + (x)); -} - -//CHECK#4 -x = null; -x |= new String("1"); -if (x !== 1) { - $ERROR('#4: x = null; x |= new String("1"); x === 1. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.11_T2.8.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.11_T2.8.js deleted file mode 100644 index a931ee049..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.11_T2.8.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.11_T2.8; - * @section: 11.13.2, 11.10.3; - * @assertion: The production x |= y is the same as x = x | y; - * @description: Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Undefined; - */ - -//CHECK#1 -x = true; -x |= undefined; -if (x !== 1) { - $ERROR('#1: x = true; x |= undefined; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -x = undefined; -x |= true; -if (x !== 1) { - $ERROR('#2: x = undefined; x |= true; x === 1. Actual: ' + (x)); -} - -//CHECK#3 -x = new Boolean(true); -x |= undefined; -if (x !== 1) { - $ERROR('#3: x = new Boolean(true); x |= undefined; x === 1. Actual: ' + (x)); -} - -//CHECK#4 -x = undefined; -x |= new Boolean(true); -if (x !== 1) { - $ERROR('#4: x = undefined; x |= new Boolean(true); x === 1. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.11_T2.9.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.11_T2.9.js deleted file mode 100644 index 3b550584b..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.11_T2.9.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.11_T2.9; - * @section: 11.13.2, 11.10.3; - * @assertion: The production x |= y is the same as x = x | y; - * @description: Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Null; - */ - -//CHECK#1 -x = true; -x |= null; -if (x !== 1) { - $ERROR('#1: x = true; x |= null; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -x = null; -x |= true; -if (x !== 1) { - $ERROR('#2: x = null; x |= true; x === 1. Actual: ' + (x)); -} - -//CHECK#3 -x = new Boolean(true); -x |= null; -if (x !== 1) { - $ERROR('#3: x = new Boolean(true); x |= null; x === 1. Actual: ' + (x)); -} - -//CHECK#4 -x = null; -x |= new Boolean(true); -if (x !== 1) { - $ERROR('#4: x = null; x |= new Boolean(true); x === 1. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.1_T1.1.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.1_T1.1.js deleted file mode 100644 index c04cab1e9..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.1_T1.1.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.1_T1.1; - * @section: 11.13.2, 11.5.1; - * @assertion: The production x *= y is the same as the production x = x * y; - * @description: Type(x) and Type(y) vary between primitive boolean and Boolean object; - */ - -//CHECK#1 -x = true; -x *= true; -if (x !== 1) { - $ERROR('#1: x = true; x *= true; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -x = new Boolean(true); -x *= true; -if (x !== 1) { - $ERROR('#2: x = new Boolean(true); x *= true; x === 1. Actual: ' + (x)); -} - -//CHECK#3 -x = true; -x *= new Boolean(true); -if (x !== 1) { - $ERROR('#3: x = true; x *= new Boolean(true); x === 1. Actual: ' + (x)); -} - -//CHECK#4 -x = new Boolean(true); -x *= new Boolean(true); -if (x !== 1) { - $ERROR('#4: x = new Boolean(true); x *= new Boolean(true); x === 1. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.1_T1.2.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.1_T1.2.js deleted file mode 100644 index f8e67ce24..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.1_T1.2.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.1_T1.2; - * @section: 11.13.2, 11.5.1; - * @assertion: The production x *= y is the same as the production x = x * y; - * @description: Type(x) and Type(y) vary between primitive number and Number object; -*/ - -//CHECK#1 -x = 1; -x *= 1; -if (x !== 1) { - $ERROR('#1: x = 1; x *= 1; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -x = new Number(1); -x *= 1; -if (x !== 1) { - $ERROR('#2: x = new Number(1); x *= 1; x === 1. Actual: ' + (x)); -} - -//CHECK#3 -x = 1; -x *= new Number(1); -if (x !== 1) { - $ERROR('#3: x = 1; x *= new Number(1); x === 1. Actual: ' + (x)); -} - -//CHECK#4 -x = new Number(1); -x *= new Number(1); -if (x !== 1) { - $ERROR('#4: x = new Number(1); x *= new Number(1); x === 1. Actual: ' + (x)); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.1_T1.3.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.1_T1.3.js deleted file mode 100644 index fcc001c37..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.1_T1.3.js +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.1_T1.3; - * @section: 11.13.2, 11.5.1; - * @assertion: The production x *= y is the same as the production x = x * y; - * @description: Type(x) and Type(y) vary between primitive string and String object; -*/ - -//CHECK#1 -x = "1"; -x *= "1"; -if (x !== 1) { - $ERROR('#1: x = "1"; x *= "1"; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -x = new String("1"); -x *= "1"; -if (x !== 1) { - $ERROR('#2: x = new String("1"); x *= "1"; x === 1. Actual: ' + (x)); -} - -//CHECK#3 -x = "1"; -x *= new String("1"); -if (x !== 1) { - $ERROR('#3: x = "1"; x *= new String("1"); x === 1. Actual: ' + (x)); -} - -//CHECK#4 -x = new String("1"); -x *= new String("1"); -if (x !== 1) { - $ERROR('#4: x = new String("1"); x *= new String("1"); x === 1. Actual: ' + (x)); -} - -//CHECK#5 -x = "x"; -x *= "1"; -if (isNaN(x) !== true) { - $ERROR('#5: x = "x"; x *= "1"; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#6 -x = "1"; -x *= "x"; -if (isNaN(x) !== true) { - $ERROR('#6: x = "1"; x *= "x"; x === Not-a-Number. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.1_T1.4.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.1_T1.4.js deleted file mode 100644 index 321a01086..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.1_T1.4.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.1_T1.4; - * @section: 11.13.2, 11.5.1; - * @assertion: The production x *= y is the same as the production x = x * y; - * @description: Type(x) and Type(y) vary between Null and Undefined; - */ - -//CHECK#1 -x = null; -x *= undefined; -if (isNaN(x) !== true) { - $ERROR('#1: x = null; x *= undefined; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#2 -x = undefined; -x *= null; -if (isNaN(x) !== true) { - $ERROR('#2: x = undefined; x *= null; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#3 -x = undefined; -x *= undefined; -if (isNaN(x) !== true) { - $ERROR('#3: x = undefined; x *= undefined; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#4 -x = null; -x *= null; -if (x !== 0) { - $ERROR('#4: x = null; x *= null; x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.1_T2.1.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.1_T2.1.js deleted file mode 100644 index 48e146f7a..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.1_T2.1.js +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.1_T2.1; - * @section: 11.13.2, 11.5.1; - * @assertion: The production x *= y is the same as the production x = x * y; - * @description: Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Number (primitive and object); - */ - -//CHECK#1 -x = true; -x *= 1; -if (x !== 1) { - $ERROR('#1: x = true; x *= 1; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -x = 1; -x *= true; -if (x !== 1) { - $ERROR('#2: x = 1; x *= true; x === 1. Actual: ' + (x)); -} - -//CHECK#3 -x = new Boolean(true); -x *= 1; -if (x !== 1) { - $ERROR('#3: x = new Boolean(true); x *= 1; x === 1. Actual: ' + (x)); -} - -//CHECK#4 -x = 1; -x *= new Boolean(true); -if (x !== 1) { - $ERROR('#4: x = 1; x *= new Boolean(true); x === 1. Actual: ' + (x)); -} - -//CHECK#5 -x = true; -x *= new Number(1); -if (x !== 1) { - $ERROR('#5: x = true; x *= new Number(1); x === 1. Actual: ' + (x)); -} - -//CHECK#6 -x = new Number(1); -x *= true; -if (x !== 1) { - $ERROR('#6: x = new Number(1); x *= true; x === 1. Actual: ' + (x)); -} - -//CHECK#7 -x = new Boolean(true); -x *= new Number(1); -if (x !== 1) { - $ERROR('#7: x = new Boolean(true); x *= new Number(1); x === 1. Actual: ' + (x)); -} - -//CHECK#8 -x = new Number(1); -x *= new Boolean(true); -if (x !== 1) { - $ERROR('#8: x = new Number(1); x *= new Boolean(true); x === 1. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.1_T2.2.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.1_T2.2.js deleted file mode 100644 index a22c75aef..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.1_T2.2.js +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.1_T2.2; - * @section: 11.13.2, 11.5.1; - * @assertion: The production x *= y is the same as the production x = x * y; - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and String (primitive and object); -*/ - -//CHECK#1 -x = "1"; -x *= 1; -if (x !== 1) { - $ERROR('#1: x = "1"; x *= 1; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -x = 1; -x *= "1"; -if (x !== 1) { - $ERROR('#2: x = 1; x *= "1"; x === 1. Actual: ' + (x)); -} - -//CHECK#3 -x = new String("1"); -x *= 1; -if (x !== 1) { - $ERROR('#3: x = new String("1"); x *= 1; x === 1. Actual: ' + (x)); -} - -//CHECK#4 -x = 1; -x *= new String("1"); -if (x !== 1) { - $ERROR('#4: x = 1; x *= new String("1"); x === 1. Actual: ' + (x)); -} - -//CHECK#5 -x = "1"; -x *= new Number(1); -if (x !== 1) { - $ERROR('#5: x = "1"; x *= new Number(1); x === 1. Actual: ' + (x)); -} - -//CHECK#6 -x = new Number(1); -x *= "1"; -if (x !== 1) { - $ERROR('#6: x = new Number(1); x *= "1"; x === 1. Actual: ' + (x)); -} - -//CHECK#7 -x = new String("1"); -x *= new Number(1); -if (x !== 1) { - $ERROR('#7: x = new String("1"); x *= new Number(1); x === 1. Actual: ' + (x)); -} - -//CHECK#8 -x = new Number(1); -x *= new String("1"); -if (x !== 1) { - $ERROR('#8: x = new Number(1); x *= new String("1"); x === 1. Actual: ' + (x)); -} - -//CHECK#9 -x = "x"; -x *= 1; -if (isNaN(x) !== true) { - $ERROR('#9: x = "x"; x *= 1; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#10 -x = 1; -x *= "x"; -if (isNaN(x) !== true) { - $ERROR('#10: x = 1; x *= "x"; x === Not-a-Number. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.1_T2.3.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.1_T2.3.js deleted file mode 100644 index a95f4c597..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.1_T2.3.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.1_T2.3; - * @section: 11.13.2, 11.5.1; - * @assertion: The production x *= y is the same as the production x = x * y; - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Null; - */ - -//CHECK#1 -x = 1; -x *= null; -if (x !== 0) { - $ERROR('#1: x = 1; x *= null; x === 0. Actual: ' + (x)); -} - -//CHECK#2 -x = null; -x *= 1; -if (x !== 0) { - $ERROR('#2: x = null; x *= 1; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = new Number(1); -x *= null; -if (x !== 0) { - $ERROR('#3: x = new Number(1); x *= null; x === 0. Actual: ' + (x)); -} - -//CHECK#4 -x = null; -x *= new Number(1); -if (x !== 0) { - $ERROR('#4: x = null; x *= new Number(1); x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.1_T2.4.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.1_T2.4.js deleted file mode 100644 index 8d13dab82..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.1_T2.4.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.1_T2.4; - * @section: 11.13.2, 11.5.1; - * @assertion: The production x *= y is the same as the production x = x * y; - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Undefined; - */ - -//CHECK#1 -x = 1; -x *= undefined; -if (isNaN(x) !== true) { - $ERROR('#1: x = 1; x *= undefined; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#2 -x = undefined; -x *= 1; -if (isNaN(x) !== true) { - $ERROR('#2: x = undefined; x *= 1; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#3 -x = new Number(1); -x *= undefined; -if (isNaN(x) !== true) { - $ERROR('#3: x = new Number(1); x *= undefined; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#4 -x = undefined; -x *= new Number(1); -if (isNaN(x) !== true) { - $ERROR('#4: x = undefined; x *= new Number(1); x === Not-a-Number. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.1_T2.5.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.1_T2.5.js deleted file mode 100644 index 140c59b56..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.1_T2.5.js +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.1_T2.5; - * @section: 11.13.2, 11.5.1; - * @assertion: The production x *= y is the same as the production x = x * y; - * @description: Type(x) is different from Type(y) and both types vary between String (primitive or object) amd Boolean (primitive and object); -*/ - -//CHECK#1 -x = true; -x *= "1"; -if (x !== 1) { - $ERROR('#1: x = true; x *= "1"; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -x = "1"; -x *= true; -if (x !== 1) { - $ERROR('#2: x = "1"; x *= true; x === 1. Actual: ' + (x)); -} - -//CHECK#3 -x = new Boolean(true); -x *= "1"; -if (x !== 1) { - $ERROR('#3: x = new Boolean(true); x *= "1"; x === 1. Actual: ' + (x)); -} - -//CHECK#4 -x = "1"; -x *= new Boolean(true); -if (x !== 1) { - $ERROR('#4: x = "1"; x *= new Boolean(true); x === 1. Actual: ' + (x)); -} - -//CHECK#5 -x = true; -x *= new String("1"); -if (x !== 1) { - $ERROR('#5: x = true; x *= new String("1"); x === 1. Actual: ' + (x)); -} - -//CHECK#6 -x = new String("1"); -x *= true; -if (x !== 1) { - $ERROR('#6: x = new String("1"); x *= true; x === 1. Actual: ' + (x)); -} - -//CHECK#7 -x = new Boolean(true); -x *= new String("1"); -if (x !== 1) { - $ERROR('#7: x = new Boolean(true); x *= new String("1"); x === 1. Actual: ' + (x)); -} - -//CHECK#8 -x = new String("1"); -x *= new Boolean(true); -if (x !== 1) { - $ERROR('#8: x = new String("1"); x *= new Boolean(true); x === 1. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.1_T2.6.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.1_T2.6.js deleted file mode 100644 index 8db139b50..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.1_T2.6.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.1_T2.6; - * @section: 11.13.2, 11.5.1; - * @assertion: The production x *= y is the same as the production x = x * y; - * @description: Type(x) is different from Type(y) and both types vary between primitive String (primitive or object) and Undefined; - */ - -//CHECK#1 -x = "1"; -x *= undefined; -if (isNaN(x) !== true) { - $ERROR('#1: x = "1"; x *= undefined; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#2 -x = undefined; -x *= "1"; -if (isNaN(x) !== true) { - $ERROR('#2: x = undefined; x *= "1"; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#3 -x = new String("1"); -x *= undefined; -if (isNaN(x) !== true) { - $ERROR('#3: x = new String("1"); x *= undefined; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#4 -x = undefined; -x *= new String("1"); -if (isNaN(x) !== true) { - $ERROR('#4: x = undefined; x *= new String("1"); x === Not-a-Number. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.1_T2.7.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.1_T2.7.js deleted file mode 100644 index a0a2f272f..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.1_T2.7.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.1_T2.7; - * @section: 11.13.2, 11.5.1; - * @assertion: The production x *= y is the same as the production x = x * y; - * @description: Type(x) is different from Type(y) and both types vary between String (primitive or object) and Null; - */ - -//CHECK#1 -x = "1"; -x *= null; -if (x !== 0) { - $ERROR('#1: x = "1"; x *= null; x === 0. Actual: ' + (x)); -} - -//CHECK#2 -x = null; -x *= "1"; -if (x !== 0) { - $ERROR('#2: x = null; x *= "1"; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = new String("1"); -x *= null; -if (x !== 0) { - $ERROR('#3: x = new String("1"); x *= null; x === 0. Actual: ' + (x)); -} - -//CHECK#4 -x = null; -x *= new String("1"); -if (x !== 0) { - $ERROR('#4: x = null; x *= new String("1"); x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.1_T2.8.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.1_T2.8.js deleted file mode 100644 index eb68dec8c..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.1_T2.8.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.1_T2.8; - * @section: 11.13.2, 11.5.1; - * @assertion: The production x *= y is the same as the production x = x * y; - * @description: Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Undefined; - */ - -//CHECK#1 -x = true; -x *= undefined; -if (isNaN(x) !== true) { - $ERROR('#1: x = true; x *= undefined; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#2 -x = undefined; -x *= true; -if (isNaN(x) !== true) { - $ERROR('#2: x = undefined; x *= true; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#3 -x = new Boolean(true); -x *= undefined; -if (isNaN(x) !== true) { - $ERROR('#3: x = new Boolean(true); x *= undefined; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#4 -x = undefined; -x *= new Boolean(true); -if (isNaN(x) !== true) { - $ERROR('#4: x = undefined; x *= new Boolean(true); x === Not-a-Number. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.1_T2.9.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.1_T2.9.js deleted file mode 100644 index 571277dd2..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.1_T2.9.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.1_T2.9; - * @section: 11.13.2, 11.5.1; - * @assertion: The production x *= y is the same as the production x = x * y; - * @description: Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Null; - */ - -//CHECK#1 -x = true; -x *= null; -if (x !== 0) { - $ERROR('#1: x = true; x *= null; x === 0. Actual: ' + (x)); -} - -//CHECK#2 -x = null; -x *= true; -if (x !== 0) { - $ERROR('#2: x = null; x *= true; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = new Boolean(true); -x *= null; -if (x !== 0) { - $ERROR('#3: x = new Boolean(true); x *= null; x === 0. Actual: ' + (x)); -} - -//CHECK#4 -x = null; -x *= new Boolean(true); -if (x !== 0) { - $ERROR('#4: x = null; x *= new Boolean(true); x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.2_T1.1.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.2_T1.1.js deleted file mode 100644 index a81965545..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.2_T1.1.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.2_T1.1; - * @section: 11.13.2, 11.5.2; - * @assertion: The production x /= y is the same as x = x / y; - * @description: Type(x) and Type(y) vary between primitive boolean and Boolean object; - */ - -//CHECK#1 -x = true; -x /= true; -if (x !== 1) { - $ERROR('#1: x = true; x /= true; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -x = new Boolean(true); -x /= true; -if (x !== 1) { - $ERROR('#2: x = new Boolean(true); x /= true; x === 1. Actual: ' + (x)); -} - -//CHECK#3 -x = true; -x /= new Boolean(true); -if (x !== 1) { - $ERROR('#3: x = true; x /= new Boolean(true); x === 1. Actual: ' + (x)); -} - -//CHECK#4 -x = new Boolean(true); -x /= new Boolean(true); -if (x !== 1) { - $ERROR('#4: x = new Boolean(true); x /= new Boolean(true); x === 1. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.2_T1.2.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.2_T1.2.js deleted file mode 100644 index ef50dab10..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.2_T1.2.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.2_T1.2; - * @section: 11.13.2, 11.5.2; - * @assertion: The production x /= y is the same as x = x / y; - * @description: Type(x) and Type(y) vary between primitive number and Number object; -*/ - -//CHECK#1 -x = 1; -x /= 1; -if (x !== 1) { - $ERROR('#1: x = 1; x /= 1; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -x = new Number(1); -x /= 1; -if (x !== 1) { - $ERROR('#2: x = new Number(1); x /= 1; x === 1. Actual: ' + (x)); -} - -//CHECK#3 -x = 1; -x /= new Number(1); -if (x !== 1) { - $ERROR('#3: x = 1; x /= new Number(1); x === 1. Actual: ' + (x)); -} - -//CHECK#4 -x = new Number(1); -x /= new Number(1); -if (x !== 1) { - $ERROR('#4: x = new Number(1); x /= new Number(1); x === 1. Actual: ' + (x)); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.2_T1.3.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.2_T1.3.js deleted file mode 100644 index 777168afc..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.2_T1.3.js +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.2_T1.3; - * @section: 11.13.2, 11.5.2; - * @assertion: The production x /= y is the same as x = x / y; - * @description: Type(x) and Type(y) vary between primitive string and String object; -*/ - -//CHECK#1 -x = "1"; -x /= "1"; -if (x !== 1) { - $ERROR('#1: x = "1"; x /= "1"; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -x = new String("1"); -x /= "1"; -if (x !== 1) { - $ERROR('#2: x = new String("1"); x /= "1"; x === 1. Actual: ' + (x)); -} - -//CHECK#3 -x = "1"; -x /= new String("1"); -if (x !== 1) { - $ERROR('#3: x = "1"; x /= new String("1"); x === 1. Actual: ' + (x)); -} - -//CHECK#4 -x = new String("1"); -x /= new String("1"); -if (x !== 1) { - $ERROR('#4: x = new String("1"); x /= new String("1"); x === 1. Actual: ' + (x)); -} - -//CHECK#5 -x = "x"; -x /= "1"; -if (isNaN(x) !== true) { - $ERROR('#5: x = "x"; x /= "1"; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#6 -x = "1"; -x /= "x"; -if (isNaN(x) !== true) { - $ERROR('#6: x = "1"; x /= "x"; x === Not-a-Number. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.2_T1.4.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.2_T1.4.js deleted file mode 100644 index d9869b6c8..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.2_T1.4.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.2_T1.4; - * @section: 11.13.2, 11.5.2; - * @assertion: The production x /= y is the same as x = x / y; - * @description: Type(x) and Type(y) vary between Null and Undefined; - */ - -//CHECK#1 -x = null; -x /= undefined; -if (isNaN(x) !== true) { - $ERROR('#1: x = null; x /= undefined; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#2 -x = undefined; -x /= null; -if (isNaN(x) !== true) { - $ERROR('#2: x = undefined; x /= null; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#3 -x = undefined; -x /= undefined; -if (isNaN(x) !== true) { - $ERROR('#3: x = undefined; x /= undefined; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#4 -x = null; -x /= null; -if (isNaN(x) !== true) { - $ERROR('#4: x = null; x /= null; x === Not-a-Number. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.2_T2.1.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.2_T2.1.js deleted file mode 100644 index 01927117f..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.2_T2.1.js +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.2_T2.1; - * @section: 11.13.2, 11.5.2; - * @assertion: The production x /= y is the same as x = x / y; - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Boolean (primitive and object); - */ - -//CHECK#1 -x = true; -x /= 1; -if (x !== 1) { - $ERROR('#1: x = true; x /= 1; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -x = 1; -x /= true; -if (x !== 1) { - $ERROR('#2: x = 1; x /= true; x === 1. Actual: ' + (x)); -} - -//CHECK#3 -x = new Boolean(true); -x /= 1; -if (x !== 1) { - $ERROR('#3: x = new Boolean(true); x /= 1; x === 1. Actual: ' + (x)); -} - -//CHECK#4 -x = 1; -x /= new Boolean(true); -if (x !== 1) { - $ERROR('#4: x = 1; x /= new Boolean(true); x === 1. Actual: ' + (x)); -} - -//CHECK#5 -x = true; -x /= new Number(1); -if (x !== 1) { - $ERROR('#5: x = true; x /= new Number(1); x === 1. Actual: ' + (x)); -} - -//CHECK#6 -x = new Number(1); -x /= true; -if (x !== 1) { - $ERROR('#6: x = new Number(1); x /= true; x === 1. Actual: ' + (x)); -} - -//CHECK#7 -x = new Boolean(true); -x /= new Number(1); -if (x !== 1) { - $ERROR('#7: x = new Boolean(true); x /= new Number(1); x === 1. Actual: ' + (x)); -} - -//CHECK#8 -x = new Number(1); -x /= new Boolean(true); -if (x !== 1) { - $ERROR('#8: x = new Number(1); x /= new Boolean(true); x === 1. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.2_T2.2.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.2_T2.2.js deleted file mode 100644 index 27bca2e1c..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.2_T2.2.js +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.2_T2.2; - * @section: 11.13.2, 11.5.2; - * @assertion: The production x /= y is the same as x = x / y; - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and String (primitive and object); -*/ - -//CHECK#1 -x = "1"; -x /= 1; -if (x !== 1) { - $ERROR('#1: x = "1"; x /= 1; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -x = 1; -x /= "1"; -if (x !== 1) { - $ERROR('#2: x = 1; x /= "1"; x === 1. Actual: ' + (x)); -} - -//CHECK#3 -x = new String("1"); -x /= 1; -if (x !== 1) { - $ERROR('#3: x = new String("1"); x /= 1; x === 1. Actual: ' + (x)); -} - -//CHECK#4 -x = 1; -x /= new String("1"); -if (x !== 1) { - $ERROR('#4: x = 1; x /= new String("1"); x === 1. Actual: ' + (x)); -} - -//CHECK#5 -x = "1"; -x /= new Number(1); -if (x !== 1) { - $ERROR('#5: x = "1"; x /= new Number(1); x === 1. Actual: ' + (x)); -} - -//CHECK#6 -x = new Number(1); -x /= "1"; -if (x !== 1) { - $ERROR('#6: x = new Number(1); x /= "1"; x === 1. Actual: ' + (x)); -} - -//CHECK#7 -x = new String("1"); -x /= new Number(1); -if (x !== 1) { - $ERROR('#7: x = new String("1"); x /= new Number(1); x === 1. Actual: ' + (x)); -} - -//CHECK#8 -x = new Number(1); -x /= new String("1"); -if (x !== 1) { - $ERROR('#8: x = new Number(1); x /= new String("1"); x === 1. Actual: ' + (x)); -} - -//CHECK#9 -x = "x"; -x /= 1; -if (isNaN(x) !== true) { - $ERROR('#9: x = "x"; x /= 1; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#10 -x = 1; -x /= "x"; -if (isNaN(x) !== true) { - $ERROR('#10: x = 1; x /= "x"; x === Not-a-Number. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.2_T2.3.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.2_T2.3.js deleted file mode 100644 index c3cfa4b89..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.2_T2.3.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.2_T2.3; - * @section: 11.13.2, 11.5.2; - * @assertion: The production x /= y is the same as x = x / y; - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Null; - */ - -//CHECK#1 -x = 1; -x /= null; -if (x !== Number.POSITIVE_INFINITY) { - $ERROR('#1: x = 1; x /= null; x === +Infinity. Actual: ' + (x)); -} - -//CHECK#2 -x = null; -x /= 1; -if (x !== 0) { - $ERROR('#2: x = null; x /= 1; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = new Number(1); -x /= null; -if (x !== Number.POSITIVE_INFINITY) { - $ERROR('#3: x = new Number(1); x /= null; x === +Infinity. Actual: ' + (x)); -} - -//CHECK#4 -x = null; -x /= new Number(1); -if (x !== 0) { - $ERROR('#4: x = null; x /= new Number(1); x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.2_T2.4.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.2_T2.4.js deleted file mode 100644 index 92a838a92..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.2_T2.4.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.2_T2.4; - * @section: 11.13.2, 11.5.2; - * @assertion: The production x /= y is the same as x = x / y; - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Undefined; - */ - -//CHECK#1 -x = 1; -x /= undefined; -if (isNaN(x) !== true) { - $ERROR('#1: x = 1; x /= undefined; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#2 -x = undefined; -x /= 1; -if (isNaN(x) !== true) { - $ERROR('#2: x = undefined; x /= 1; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#3 -x = new Number(1); -x /= undefined; -if (isNaN(x) !== true) { - $ERROR('#3: x = new Number(1); x /= undefined; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#4 -x = undefined; -x /= new Number(1); -if (isNaN(x) !== true) { - $ERROR('#4: x = undefined; x /= new Number(1); x === Not-a-Number. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.2_T2.5.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.2_T2.5.js deleted file mode 100644 index 35c75b3cb..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.2_T2.5.js +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.2_T2.5; - * @section: 11.13.2, 11.5.2; - * @assertion: The production x /= y is the same as x = x / y; - * @description: Type(x) is different from Type(y) and both types vary between String (primitive or object) and Boolean (primitive and object); -*/ - -//CHECK#1 -x = true; -x /= "1"; -if (x !== 1) { - $ERROR('#1: x = true; x /= "1"; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -x = "1"; -x /= true; -if (x !== 1) { - $ERROR('#2: x = "1"; x /= true; x === 1. Actual: ' + (x)); -} - -//CHECK#3 -x = new Boolean(true); -x /= "1"; -if (x !== 1) { - $ERROR('#3: x = new Boolean(true); x /= "1"; x === 1. Actual: ' + (x)); -} - -//CHECK#4 -x = "1"; -x /= new Boolean(true); -if (x !== 1) { - $ERROR('#4: x = "1"; x /= new Boolean(true); x === 1. Actual: ' + (x)); -} - -//CHECK#5 -x = true; -x /= new String("1"); -if (x !== 1) { - $ERROR('#5: x = true; x /= new String("1"); x === 1. Actual: ' + (x)); -} - -//CHECK#6 -x = new String("1"); -x /= true; -if (x !== 1) { - $ERROR('#6: x = new String("1"); x /= true; x === 1. Actual: ' + (x)); -} - -//CHECK#7 -x = new Boolean(true); -x /= new String("1"); -if (x !== 1) { - $ERROR('#7: x = new Boolean(true); x /= new String("1"); x === 1. Actual: ' + (x)); -} - -//CHECK#8 -x = new String("1"); -x /= new Boolean(true); -if (x !== 1) { - $ERROR('#8: x = new String("1"); x /= new Boolean(true); x === 1. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.2_T2.6.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.2_T2.6.js deleted file mode 100644 index 2322b5f3e..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.2_T2.6.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.2_T2.6; - * @section: 11.13.2, 11.5.2; - * @assertion: The production x /= y is the same as x = x / y; - * @description: Type(x) is different from Type(y) and both types vary between String (primitive or object) and Undefined; - */ - -//CHECK#1 -x = "1"; -x /= undefined; -if (isNaN(x) !== true) { - $ERROR('#1: x = "1"; x /= undefined; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#2 -x = undefined; -x /= "1"; -if (isNaN(x) !== true) { - $ERROR('#2: x = undefined; x /= "1"; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#3 -x = new String("1"); -x /= undefined; -if (isNaN(x) !== true) { - $ERROR('#3: x = new String("1"); x /= undefined; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#4 -x = undefined; -x /= new String("1"); -if (isNaN(x) !== true) { - $ERROR('#4: x = undefined; x /= new String("1"); x === Not-a-Number. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.2_T2.7.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.2_T2.7.js deleted file mode 100644 index eabc0c031..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.2_T2.7.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.2_T2.7; - * @section: 11.13.2, 11.5.2; - * @assertion: The production x /= y is the same as x = x / y; - * @description: Type(x) is different from Type(y) and both types vary between String (primitive or object) and Null; - */ - -//CHECK#1 -x = "1"; -x /= null; -if (x !== Number.POSITIVE_INFINITY) { - $ERROR('#1: x = "1"; x /= null; x === +Infinity. Actual: ' + (x)); -} - -//CHECK#2 -x = null; -x /= "1"; -if (x !== 0) { - $ERROR('#2: x = null; x /= "1"; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = new String("1"); -x /= null; -if (x !== Number.POSITIVE_INFINITY) { - $ERROR('#3: x = new String("1"); x /= null; x === +Infinity. Actual: ' + (x)); -} - -//CHECK#4 -x = null; -x /= new String("1"); -if (x !== 0) { - $ERROR('#4: x = null; x /= new String("1"); x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.2_T2.8.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.2_T2.8.js deleted file mode 100644 index 61525c493..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.2_T2.8.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.2_T2.8; - * @section: 11.13.2, 11.5.2; - * @assertion: The production x /= y is the same as x = x / y; - * @description: Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Undefined; - */ - -//CHECK#1 -x = true; -x /= undefined; -if (isNaN(x) !== true) { - $ERROR('#1: x = true; x /= undefined; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#2 -x = undefined; -x /= true; -if (isNaN(x) !== true) { - $ERROR('#2: x = undefined; x /= true; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#3 -x = new Boolean(true); -x /= undefined; -if (isNaN(x) !== true) { - $ERROR('#3: x = new Boolean(true); x /= undefined; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#4 -x = undefined; -x /= new Boolean(true); -if (isNaN(x) !== true) { - $ERROR('#4: x = undefined; x /= new Boolean(true); x === Not-a-Number. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.2_T2.9.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.2_T2.9.js deleted file mode 100644 index 8aec6395e..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.2_T2.9.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.2_T2.9; - * @section: 11.13.2, 11.5.2; - * @assertion: The production x /= y is the same as x = x / y; - * @description: Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Null; - */ - -//CHECK#1 -x = true; -x /= null; -if (x !== Number.POSITIVE_INFINITY) { - $ERROR('#1: x = true; x /= null; x === +Infinity. Actual: ' + (x)); -} - -//CHECK#2 -x = null; -x /= true; -if (x !== 0) { - $ERROR('#2: x = null; x /= true; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = new Boolean(true); -x /= null; -if (x !== Number.POSITIVE_INFINITY) { - $ERROR('#3: x = new Boolean(true); x /= null; x === +Infinity. Actual: ' + (x)); -} - -//CHECK#4 -x = null; -x /= new Boolean(true); -if (x !== 0) { - $ERROR('#4: x = null; x /= new Boolean(true); x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.3_T1.1.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.3_T1.1.js deleted file mode 100644 index 954fef612..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.3_T1.1.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.3_T1.1; - * @section: 11.13.2, 11.5.3; - * @assertion: The production x %= y is the same as x = x % y; - * @description: Type(x) and Type(y) vary between primitive boolean and Boolean object; - */ - -//CHECK#1 -x = true; -x %= true; -if (x !== 0) { - $ERROR('#1: x = true; x %= true; x === 0. Actual: ' + (x)); -} - -//CHECK#2 -x = new Boolean(true); -x %= true; -if (x !== 0) { - $ERROR('#2: x = new Boolean(true); x %= true; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = true; -x %= new Boolean(true); -if (x !== 0) { - $ERROR('#3: x = true; x %= new Boolean(true); x === 0. Actual: ' + (x)); -} - -//CHECK#4 -x = new Boolean(true); -x %= new Boolean(true); -if (x !== 0) { - $ERROR('#4: x = new Boolean(true); x %= new Boolean(true); x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.3_T1.2.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.3_T1.2.js deleted file mode 100644 index 7d56c91b1..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.3_T1.2.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.3_T1.2; - * @section: 11.13.2, 11.5.3; - * @assertion: The production x %= y is the same as x = x % y; - * @description: Type(x) and Type(y) vary between primitive number and Number object; -*/ - -//CHECK#1 -x = 1; -x %= 1; -if (x !== 0) { - $ERROR('#1: x = 1; x %= 1; x === 0. Actual: ' + (x)); -} - -//CHECK#2 -x = new Number(1); -x %= 1; -if (x !== 0) { - $ERROR('#2: x = new Number(1); x %= 1; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = 1; -x %= new Number(1); -if (x !== 0) { - $ERROR('#3: x = 1; x %= new Number(1); x === 0. Actual: ' + (x)); -} - -//CHECK#4 -x = new Number(1); -x %= new Number(1); -if (x !== 0) { - $ERROR('#4: x = new Number(1); x %= new Number(1); x === 0. Actual: ' + (x)); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.3_T1.3.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.3_T1.3.js deleted file mode 100644 index 7dd40a5ad..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.3_T1.3.js +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.3_T1.3; - * @section: 11.13.2, 11.5.3; - * @assertion: The production x %= y is the same as x = x % y; - * @description: Type(x) and Type(y) vary between primitive string and String object; -*/ - -//CHECK#1 -x = "1"; -x %= "1"; -if (x !== 0) { - $ERROR('#1: x = "1"; x %= "1"; x === 0. Actual: ' + (x)); -} - -//CHECK#2 -x = new String("1"); -x %= "1"; -if (x !== 0) { - $ERROR('#2: x = new String("1"); x %= "1"; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = "1"; -x %= new String("1"); -if (x !== 0) { - $ERROR('#3: x = "1"; x %= new String("1"); x === 0. Actual: ' + (x)); -} - -//CHECK#4 -x = new String("1"); -x %= new String("1"); -if (x !== 0) { - $ERROR('#4: x = new String("1"); x %= new String("1"); x === 0. Actual: ' + (x)); -} - -//CHECK#5 -x = "x"; -x %= "1"; -if (isNaN(x) !== true) { - $ERROR('#5: x = "x"; x %= "1"; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#6 -x = "1"; -x %= "x"; -if (isNaN(x) !== true) { - $ERROR('#6: x = "1"; x %= "x"; x === Not-a-Number. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.3_T1.4.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.3_T1.4.js deleted file mode 100644 index 52122533e..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.3_T1.4.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.3_T1.4; - * @section: 11.13.2, 11.5.3; - * @assertion: The production x %= y is the same as x = x % y; - * @description: Type(x) and Type(y) vary between Null and Undefined; - */ - -//CHECK#1 -x = null; -x %= undefined; -if (isNaN(x) !== true) { - $ERROR('#1: x = null; x %= undefined; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#2 -x = undefined; -x %= null; -if (isNaN(x) !== true) { - $ERROR('#2: x = undefined; x %= null; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#3 -x = undefined; -x %= undefined; -if (isNaN(x) !== true) { - $ERROR('#3: x = undefined; x %= undefined; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#4 -x = null; -x %= null; -if (isNaN(x) !== true) { - $ERROR('#4: x = null; x %= null; x === Not-a-Number. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.3_T2.1.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.3_T2.1.js deleted file mode 100644 index 982187c00..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.3_T2.1.js +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.3_T2.1; - * @section: 11.13.2, 11.5.3; - * @assertion: The production x %= y is the same as x = x % y; - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Boolean (primitive and object); -*/ - -//CHECK#1 -x = true; -x %= 1; -if (x !== 0) { - $ERROR('#1: x = true; x %= 1; x === 0. Actual: ' + (x)); -} - -//CHECK#2 -x = 1; -x %= true; -if (x !== 0) { - $ERROR('#2: x = 1; x %= true; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = new Boolean(true); -x %= 1; -if (x !== 0) { - $ERROR('#3: x = new Boolean(true); x %= 1; x === 0. Actual: ' + (x)); -} - -//CHECK#4 -x = 1; -x %= new Boolean(true); -if (x !== 0) { - $ERROR('#4: x = 1; x %= new Boolean(true); x === 0. Actual: ' + (x)); -} - -//CHECK#5 -x = true; -x %= new Number(1); -if (x !== 0) { - $ERROR('#5: x = true; x %= new Number(1); x === 0. Actual: ' + (x)); -} - -//CHECK#6 -x = new Number(1); -x %= true; -if (x !== 0) { - $ERROR('#6: x = new Number(1); x %= true; x === 0. Actual: ' + (x)); -} - -//CHECK#7 -x = new Boolean(true); -x %= new Number(1); -if (x !== 0) { - $ERROR('#7: x = new Boolean(true); x %= new Number(1); x === 0. Actual: ' + (x)); -} - -//CHECK#8 -x = new Number(1); -x %= new Boolean(true); -if (x !== 0) { - $ERROR('#8: x = new Number(1); x %= new Boolean(true); x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.3_T2.2.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.3_T2.2.js deleted file mode 100644 index 70b00e892..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.3_T2.2.js +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.3_T2.2; - * @section: 11.13.2, 11.5.3; - * @assertion: The production x %= y is the same as x = x % y; - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and String (primitive and object); -*/ - -//CHECK#1 -x = "1"; -x %= 1; -if (x !== 0) { - $ERROR('#1: x = "1"; x %= 1; x === 0. Actual: ' + (x)); -} - -//CHECK#2 -x = 1; -x %= "1"; -if (x !== 0) { - $ERROR('#2: x = 1; x %= "1"; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = new String("1"); -x %= 1; -if (x !== 0) { - $ERROR('#3: x = new String("1"); x %= 1; x === 0. Actual: ' + (x)); -} - -//CHECK#4 -x = 1; -x %= new String("1"); -if (x !== 0) { - $ERROR('#4: x = 1; x %= new String("1"); x === 0. Actual: ' + (x)); -} - -//CHECK#5 -x = "1"; -x %= new Number(1); -if (x !== 0) { - $ERROR('#5: x = "1"; x %= new Number(1); x === 0. Actual: ' + (x)); -} - -//CHECK#6 -x = new Number(1); -x %= "1"; -if (x !== 0) { - $ERROR('#6: x = new Number(1); x %= "1"; x === 0. Actual: ' + (x)); -} - -//CHECK#7 -x = new String("1"); -x %= new Number(1); -if (x !== 0) { - $ERROR('#7: x = new String("1"); x %= new Number(1); x === 0. Actual: ' + (x)); -} - -//CHECK#8 -x = new Number(1); -x %= new String("1"); -if (x !== 0) { - $ERROR('#8: x = new Number(1); x %= new String("1"); x === 0. Actual: ' + (x)); -} - -//CHECK#9 -x = "x"; -x %= 1; -if (isNaN(x) !== true) { - $ERROR('#9: x = "x"; x %= 1; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#10 -x = 1; -x %= "x"; -if (isNaN(x) !== true) { - $ERROR('#10: x = 1; x %= "x"; x === Not-a-Number. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.3_T2.3.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.3_T2.3.js deleted file mode 100644 index 8cc97f61e..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.3_T2.3.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.3_T2.3; - * @section: 11.13.2, 11.5.3; - * @assertion: The production x %= y is the same as x = x % y; - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Null; - */ - -//CHECK#1 -x = 1; -x %= null; -if (isNaN(x) !== true) { - $ERROR('#1: x = 1; x %= null; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#2 -x = null; -x %= 1; -if (x !== 0) { - $ERROR('#2: x = null; x %= 1; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = new Number(1); -x %= null; -if (isNaN(x) !== true) { - $ERROR('#3: x = new Number(1); x %= null; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#4 -x = null; -x %= new Number(1); -if (x !== 0) { - $ERROR('#4: x = null; x %= new Number(1); x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.3_T2.4.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.3_T2.4.js deleted file mode 100644 index 779ef3af4..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.3_T2.4.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.3_T2.4; - * @section: 11.13.2, 11.5.3; - * @assertion: The production x %= y is the same as x = x % y; - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Undefined; - */ - -//CHECK#1 -x = 1; -x %= undefined; -if (isNaN(x) !== true) { - $ERROR('#1: x = 1; x %= undefined; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#2 -x = undefined; -x %= 1; -if (isNaN(x) !== true) { - $ERROR('#2: x = undefined; x %= 1; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#3 -x = new Number(1); -x %= undefined; -if (isNaN(x) !== true) { - $ERROR('#3: x = new Number(1); x %= undefined; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#4 -x = undefined; -x %= new Number(1); -if (isNaN(x) !== true) { - $ERROR('#4: x = undefined; x %= new Number(1); x === Not-a-Number. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.3_T2.5.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.3_T2.5.js deleted file mode 100644 index 0032d59f8..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.3_T2.5.js +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.3_T2.5; - * @section: 11.13.2, 11.5.3; - * @assertion: The production x %= y is the same as x = x % y; - * @description: Type(x) is different from Type(y) and both types vary between String (primitive or object) and Boolean (primitive and object); -*/ - -//CHECK#1 -x = true; -x %= "1"; -if (x !== 0) { - $ERROR('#1: x = true; x %= "1"; x === 0. Actual: ' + (x)); -} - -//CHECK#2 -x = "1"; -x %= true; -if (x !== 0) { - $ERROR('#2: x = "1"; x %= true; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = new Boolean(true); -x %= "1"; -if (x !== 0) { - $ERROR('#3: x = new Boolean(true); x %= "1"; x === 0. Actual: ' + (x)); -} - -//CHECK#4 -x = "1"; -x %= new Boolean(true); -if (x !== 0) { - $ERROR('#4: x = "1"; x %= new Boolean(true); x === 0. Actual: ' + (x)); -} - -//CHECK#5 -x = true; -x %= new String("1"); -if (x !== 0) { - $ERROR('#5: x = true; x %= new String("1"); x === 0. Actual: ' + (x)); -} - -//CHECK#6 -x = new String("1"); -x %= true; -if (x !== 0) { - $ERROR('#6: x = new String("1"); x %= true; x === 0. Actual: ' + (x)); -} - -//CHECK#7 -x = new Boolean(true); -x %= new String("1"); -if (x !== 0) { - $ERROR('#7: x = new Boolean(true); x %= new String("1"); x === 0. Actual: ' + (x)); -} - -//CHECK#8 -x = new String("1"); -x %= new Boolean(true); -if (x !== 0) { - $ERROR('#8: x = new String("1"); x %= new Boolean(true); x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.3_T2.6.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.3_T2.6.js deleted file mode 100644 index e52994c5a..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.3_T2.6.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.3_T2.6; - * @section: 11.13.2, 11.5.3; - * @assertion: The production x %= y is the same as x = x % y; - * @description: Type(x) is different from Type(y) and both types vary between String (primitive or object) and Undefined; - */ - -//CHECK#1 -x = "1"; -x %= undefined; -if (isNaN(x) !== true) { - $ERROR('#1: x = "1"; x %= undefined; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#2 -x = undefined; -x %= "1"; -if (isNaN(x) !== true) { - $ERROR('#2: x = undefined; x %= "1"; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#3 -x = new String("1"); -x %= undefined; -if (isNaN(x) !== true) { - $ERROR('#3: x = new String("1"); x %= undefined; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#4 -x = undefined; -x %= new String("1"); -if (isNaN(x) !== true) { - $ERROR('#4: x = undefined; x %= new String("1"); x === Not-a-Number. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.3_T2.7.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.3_T2.7.js deleted file mode 100644 index 63d9e673e..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.3_T2.7.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.3_T2.7; - * @section: 11.13.2, 11.5.3; - * @assertion: The production x %= y is the same as x = x % y; - * @description: Type(x) is different from Type(y) and both types vary between String (primitive or object) and Null; - */ - -//CHECK#1 -x = "1"; -x %= null; -if (isNaN(x) !== true) { - $ERROR('#1: x = "1"; x %= null; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#2 -x = null; -x %= "1"; -if (x !== 0) { - $ERROR('#2: x = null; x %= "1"; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = new String("1"); -x %= null; -if (isNaN(x) !== true) { - $ERROR('#3: x = new String("1"); x %= null; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#4 -x = null; -x %= new String("1"); -if (x !== 0) { - $ERROR('#4: x = null; x %= new String("1"); x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.3_T2.8.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.3_T2.8.js deleted file mode 100644 index a484981a7..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.3_T2.8.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.3_T2.8; - * @section: 11.13.2, 11.5.3; - * @assertion: The production x %= y is the same as x = x % y; - * @description: Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Undefined; - */ - -//CHECK#1 -x = true; -x %= undefined; -if (isNaN(x) !== true) { - $ERROR('#1: x = true; x %= undefined; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#2 -x = undefined; -x %= true; -if (isNaN(x) !== true) { - $ERROR('#2: x = undefined; x %= true; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#3 -x = new Boolean(true); -x %= undefined; -if (isNaN(x) !== true) { - $ERROR('#3: x = new Boolean(true); x %= undefined; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#4 -x = undefined; -x %= new Boolean(true); -if (isNaN(x) !== true) { - $ERROR('#4: x = undefined; x %= new Boolean(true); x === Not-a-Number. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.3_T2.9.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.3_T2.9.js deleted file mode 100644 index 0870a79d9..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.3_T2.9.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.3_T2.9; - * @section: 11.13.2, 11.5.3; - * @assertion: The production x %= y is the same as x = x % y; - * @description: Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Null; - */ - -//CHECK#1 -x = true; -x %= null; -if (isNaN(x) !== true) { - $ERROR('#1: x = true; x %= null; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#2 -x = null; -x %= true; -if (x !== 0) { - $ERROR('#2: x = null; x %= true; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = new Boolean(true); -x %= null; -if (isNaN(x) !== true) { - $ERROR('#3: x = new Boolean(true); x %= null; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#4 -x = null; -x %= new Boolean(true); -if (x !== 0) { - $ERROR('#4: x = null; x %= new Boolean(true); x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.4_T1.1.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.4_T1.1.js deleted file mode 100644 index ce9ed5c42..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.4_T1.1.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.4_T1.1; - * @section: 11.13.2, 11.6.1; - * @assertion: The production x += y is the same as x = x + y; - * @description: Type(x) and Type(y) vary between primitive boolean and Boolean object; - */ - -//CHECK#1 -x = true; -x += true; -if (x !== 2) { - $ERROR('#1: x = true; x += true; x === 2. Actual: ' + (x)); -} - -//CHECK#2 -x = new Boolean(true); -x += true; -if (x !== 2) { - $ERROR('#2: x = new Boolean(true); x += true; x === 2. Actual: ' + (x)); -} - -//CHECK#3 -x = true; -x += new Boolean(true); -if (x !== 2) { - $ERROR('#3: x = true; x += new Boolean(true); x === 2. Actual: ' + (x)); -} - -//CHECK#4 -x = new Boolean(true); -x += new Boolean(true); -if (x !== 2) { - $ERROR('#4: x = new Boolean(true); x += new Boolean(true); x === 2. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.4_T1.2.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.4_T1.2.js deleted file mode 100644 index 549e6321e..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.4_T1.2.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.4_T1.2; - * @section: 11.13.2, 11.6.1; - * @assertion: The production x += y is the same as x = x + y; - * @description: Type(x) and Type(y) vary between primitive number and Number object; -*/ - -//CHECK#1 -x = 1; -x += 1; -if (x !== 2) { - $ERROR('#1: x = 1; x += 1; x === 2. Actual: ' + (x)); -} - -//CHECK#2 -x = new Number(1); -x += 1; -if (x !== 2) { - $ERROR('#2: x = new Number(1); x += 1; x === 2. Actual: ' + (x)); -} - -//CHECK#3 -x = 1; -x += new Number(1); -if (x !== 2) { - $ERROR('#3: x = 1; x += new Number(1); x === 2. Actual: ' + (x)); -} - -//CHECK#4 -x = new Number(1); -x += new Number(1); -if (x !== 2) { - $ERROR('#4: x = new Number(1); x += new Number(1); x === 2. Actual: ' + (x)); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.4_T1.3.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.4_T1.3.js deleted file mode 100644 index 6bf7dbc3c..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.4_T1.3.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.4_T1.3; - * @section: 11.13.2, 11.6.1; - * @assertion: The production x += y is the same as x = x + y; - * @description: Type(x) and Type(y) vary between Null and Undefined; - */ - -//CHECK#1 -x = null; -x += undefined; -if (isNaN(x) !== true) { - $ERROR('#1: x = null; x += undefined; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#2 -x = undefined; -x += null; -if (isNaN(x) !== true) { - $ERROR('#2: x = undefined; x += null; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#3 -x = undefined; -x += undefined; -if (isNaN(x) !== true) { - $ERROR('#3: x = undefined; x += undefined; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#4 -x = null; -x += null; -if (x !== 0) { - $ERROR('#4: x = null; x += null; x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.4_T1.4.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.4_T1.4.js deleted file mode 100644 index 778d4b039..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.4_T1.4.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.4_T1.4; - * @section: 11.13.2, 11.6.1; - * @assertion: The production x += y is the same as x = x + y; - * @description: Type(x) and Type(y) vary between primitive string and String object; -*/ - -//CHECK#1 -x = "1"; -x += "1"; -if (x !== "11") { - $ERROR('#1: x = "1"; x += "1"; x === "11". Actual: ' + (x)); -} - -//CHECK#2 -x = new String("1"); -x += "1"; -if (x !== "11") { - $ERROR('#2: x = new String("1"); x += "1"; x === "11". Actual: ' + (x)); -} - -//CHECK#3 -x = "1"; -x += new String("1"); -if (x !== "11") { - $ERROR('#3: x = "1"; x += new String("1"); x === "11". Actual: ' + (x)); -} - -//CHECK#4 -x = new String("1"); -x += new String("1"); -if (x !== "11") { - $ERROR('#4: x = new String("1"); x += new String("1"); x === "11". Actual: ' + (x)); -} - -//CHECK#5 -if ("x" + "1" !=="x1") { - $ERROR('#5: x = "x"; x += "1"; x === "x1". Actual: ' + (x)); -} - -//CHECK#6 -x = "1"; -x += "x"; -if (x !== "1x") { - $ERROR('#6: x = "1"; x += "x"; x === "1x". Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.4_T2.1.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.4_T2.1.js deleted file mode 100644 index 28b80f896..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.4_T2.1.js +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.4_T2.1; - * @section: 11.13.2, 11.6.1; - * @assertion: The production x += y is the same as x = x + y; - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Boolean (primitive and object); - */ - -//CHECK#1 -x = true; -x += 1; -if (x !== 2) { - $ERROR('#1: x = true; x += 1; x === 2. Actual: ' + (x)); -} - -//CHECK#2 -x = 1; -x += true; -if (x !== 2) { - $ERROR('#2: x = 1; x += true; x === 2. Actual: ' + (x)); -} - -//CHECK#3 -x = new Boolean(true); -x += 1; -if (x !== 2) { - $ERROR('#3: x = new Boolean(true); x += 1; x === 2. Actual: ' + (x)); -} - -//CHECK#4 -x = 1; -x += new Boolean(true); -if (x !== 2) { - $ERROR('#4: x = 1; x += new Boolean(true); x === 2. Actual: ' + (x)); -} - -//CHECK#5 -x = true; -x += new Number(1); -if (x !== 2) { - $ERROR('#5: x = true; x += new Number(1); x === 2. Actual: ' + (x)); -} - -//CHECK#6 -x = new Number(1); -x += true; -if (x !== 2) { - $ERROR('#6: x = new Number(1); x += true; x === 2. Actual: ' + (x)); -} - -//CHECK#7 -x = new Boolean(true); -x += new Number(1); -if (x !== 2) { - $ERROR('#7: x = new Boolean(true); x += new Number(1); x === 2. Actual: ' + (x)); -} - -//CHECK#8 -x = new Number(1); -x += new Boolean(true); -if (x !== 2) { - $ERROR('#8: x = new Number(1); x += new Boolean(true); x === 2. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.4_T2.2.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.4_T2.2.js deleted file mode 100644 index 19ac09329..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.4_T2.2.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.4_T2.2; - * @section: 11.13.2, 11.6.1; - * @assertion: The production x += y is the same as x = x + y; - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Null; - */ - -//CHECK#1 -x = 1; -x += null; -if (x !== 1) { - $ERROR('#1: x = 1; x += null; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -x = null; -x += 1; -if (x !== 1) { - $ERROR('#2: x = null; x += 1; x === 1. Actual: ' + (x)); -} - -//CHECK#3 -x = new Number(1); -x += null; -if (x !== 1) { - $ERROR('#3: x = new Number(1); x += null; x === 1. Actual: ' + (x)); -} - -//CHECK#4 -x = null; -x += new Number(1); -if (x !== 1) { - $ERROR('#4: x = null; x += new Number(1); x === 1. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.4_T2.3.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.4_T2.3.js deleted file mode 100644 index bf8b2eae9..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.4_T2.3.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.4_T2.3; - * @section: 11.13.2, 11.6.1; - * @assertion: The production x += y is the same as x = x + y; - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Undefined; - */ - -//CHECK#1 -x = 1; -x += undefined; -if (isNaN(x) !== true) { - $ERROR('#1: x = 1; x += undefined; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#2 -x = undefined; -x += 1; -if (isNaN(x) !== true) { - $ERROR('#2: x = undefined; x += 1; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#3 -x = new Number(1); -x += undefined; -if (isNaN(x) !== true) { - $ERROR('#3: x = new Number(1); x += undefined; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#4 -x = undefined; -x += new Number(1); -if (isNaN(x) !== true) { - $ERROR('#4: x = undefined; x += new Number(1); x === Not-a-Number. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.4_T2.4.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.4_T2.4.js deleted file mode 100644 index 41a35ad91..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.4_T2.4.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.4_T2.4; - * @section: 11.13.2, 11.6.1; - * @assertion: The production x += y is the same as x = x + y; - * @description: Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Undefined; - */ - -//CHECK#1 -x = true; -x += undefined; -if (isNaN(x) !== true) { - $ERROR('#1: x = true; x += undefined; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#2 -x = undefined; -x += true; -if (isNaN(x) !== true) { - $ERROR('#2: x = undefined; x += true; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#3 -x = new Boolean(true); -x += undefined; -if (isNaN(x) !== true) { - $ERROR('#3: x = new Boolean(true); x += undefined; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#4 -x = undefined; -x += new Boolean(true); -if (isNaN(x) !== true) { - $ERROR('#4: x = undefined; x += new Boolean(true); x === Not-a-Number. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.4_T2.5.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.4_T2.5.js deleted file mode 100644 index 5fe192ddf..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.4_T2.5.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.4_T2.5; - * @section: 11.13.2, 11.6.1; - * @assertion: The production x += y is the same as x = x + y; - * @description: Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Null; - */ - -//CHECK#1 -x = true; -x += null; -if (x !== 1) { - $ERROR('#1: x = true; x += null; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -x = null; -x += true; -if (x !== 1) { - $ERROR('#2: x = null; x += true; x === 1. Actual: ' + (x)); -} - -//CHECK#3 -x = new Boolean(true); -x += null; -if (x !== 1) { - $ERROR('#3: x = new Boolean(true); x += null; x === 1. Actual: ' + (x)); -} - -//CHECK#4 -x = null; -x += new Boolean(true); -if (x !== 1) { - $ERROR('#4: x = null; x += new Boolean(true); x === 1. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.4_T2.6.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.4_T2.6.js deleted file mode 100644 index 2c56cf4ec..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.4_T2.6.js +++ /dev/null @@ -1,77 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.4_T2.6; - * @section: 11.13.2, 11.6.1; - * @assertion: The production x += y is the same as x = x + y; - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and String (primitive and object); -*/ - -//CHECK#1 -x = "1"; -x += 1; -if (x !== "11") { - $ERROR('#1: x = "1"; x += 1; x === "11". Actual: ' + (x)); -} - -//CHECK#2 -x = 1; -x += "1"; -if (x !== "11") { - $ERROR('#2: x = 1; x += "1"; x === "11". Actual: ' + (x)); -} - -//CHECK#3 -x = new String("1"); -x += 1; -if (x !== "11") { - $ERROR('#3: x = new String("1"); x += 1; x === "11". Actual: ' + (x)); -} - -//CHECK#4 -x = 1; -x += new String("1"); -if (x !== "11") { - $ERROR('#4: x = 1; x += new String("1"); x === "11". Actual: ' + (x)); -} - -//CHECK#5 -x = "1"; -x += new Number(1); -if (x !== "11") { - $ERROR('#5: x = "1"; x += new Number(1); x === "11". Actual: ' + (x)); -} - -//CHECK#6 -x = new Number(1); -x += "1"; -if (x !== "11") { - $ERROR('#6: x = new Number(1); x += "1"; x === "11". Actual: ' + (x)); -} - -//CHECK#7 -x = new String("1"); -x += new Number(1); -if (x !== "11") { - $ERROR('#7: x = new String("1"); x += new Number(1); x === "11". Actual: ' + (x)); -} - -//CHECK#8 -x = new Number(1); -x += new String("1"); -if (x !== "11") { - $ERROR('#8: x = new Number(1); x += new String("1"); x === "11". Actual: ' + (x)); -} - -//CHECK#9 -if ("x" + 1 !=="x1") { - $ERROR('#9: x = "x"; x += 1; x === "x1". Actual: ' + (x)); -} - -//CHECK#10 -x = 1; -x += "x"; -if (x !== "1x") { - $ERROR('#10: x = 1; x += "x"; x === "1x". Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.4_T2.7.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.4_T2.7.js deleted file mode 100644 index 5ffb9b1db..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.4_T2.7.js +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.4_T2.7; - * @section: 11.13.2, 11.6.1; - * @assertion: The production x += y is the same as x = x + y; - * @description: Type(x) is different from Type(y) and both types vary between String (primitive or object) and Boolean (primitive and object); -*/ - -//CHECK#1 -x = true; -x += "1"; -if (x !== "true1") { - $ERROR('#1: x = true; x += "1"; x === "true1". Actual: ' + (x)); -} - -//CHECK#2 -x = "1"; -x += true; -if (x !== "1true") { - $ERROR('#2: x = "1"; x += true; x === "1true". Actual: ' + (x)); -} - -//CHECK#3 -x = new Boolean(true); -x += "1"; -if (x !== "true1") { - $ERROR('#3: x = new Boolean(true); x += "1"; x === "true1". Actual: ' + (x)); -} - -//CHECK#4 -x = "1"; -x += new Boolean(true); -if (x !== "1true") { - $ERROR('#4: x = "1"; x += new Boolean(true); x === "1true". Actual: ' + (x)); -} - -//CHECK#5 -x = true; -x += new String("1"); -if (x !== "true1") { - $ERROR('#5: x = true; x += new String("1"); x === "true1". Actual: ' + (x)); -} - -//CHECK#6 -x = new String("1"); -x += true; -if (x !== "1true") { - $ERROR('#6: x = new String("1"); x += true; x === "1true". Actual: ' + (x)); -} - -//CHECK#7 -x = new Boolean(true); -x += new String("1"); -if (x !== "true1") { - $ERROR('#7: x = new Boolean(true); x += new String("1"); x === "true1". Actual: ' + (x)); -} - -//CHECK#8 -x = new String("1"); -x += new Boolean(true); -if (x !== "1true") { - $ERROR('#8: x = new String("1"); x += new Boolean(true); x === "1true". Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.4_T2.8.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.4_T2.8.js deleted file mode 100644 index 4b47b57bc..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.4_T2.8.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.4_T2.8; - * @section: 11.13.2, 11.6.1; - * @assertion: The production x += y is the same as x = x + y; - * @description: Type(x) is different from Type(y) and both types vary between String (primitive or object) and Undefined; - */ - -//CHECK#1 -x = "1"; -x += undefined; -if (x !== "1undefined") { - $ERROR('#1: x = "1"; x += undefined; x === "1undefined". Actual: ' + (x)); -} - -//CHECK#2 -x = undefined; -x += "1"; -if (x !== "undefined1") { - $ERROR('#2: x = undefined; x += "1"; x === "undefined1". Actual: ' + (x)); -} - -//CHECK#3 -x = new String("1"); -x += undefined; -if (x !== "1undefined") { - $ERROR('#3: x = new String("1"); x += undefined; x === "1undefined". Actual: ' + (x)); -} - -//CHECK#4 -x = undefined; -x += new String("1"); -if (x !== "undefined1") { - $ERROR('#4: x = undefined; x += new String("1"); x === "undefined1". Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.4_T2.9.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.4_T2.9.js deleted file mode 100644 index cd7e884ea..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.4_T2.9.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.4_T2.9; - * @section: 11.13.2, 11.6.1; - * @assertion: The production x += y is the same as x = x + y; - * @description: Type(x) is different from Type(y) and both types vary between String (primitive or object) and Null; - */ - -//CHECK#1 -x = "1"; -x += null; -if (x !== "1null") { - $ERROR('#1: x = "1"; x += null; x === "1null". Actual: ' + (x)); -} - -//CHECK#2 -x = null; -x += "1"; -if (x !== "null1") { - $ERROR('#2: x = null; x += "1"; x === "null1". Actual: ' + (x)); -} - -//CHECK#3 -x = new String("1"); -x += null; -if (x !== "1null") { - $ERROR('#3: x = new String("1"); x += null; x === "1null". Actual: ' + (x)); -} - -//CHECK#4 -x = null; -x += new String("1"); -if (x !== "null1") { - $ERROR('#4: x = null; x += new String("1"); x === "null1". Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.5_T1.1.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.5_T1.1.js deleted file mode 100644 index 4cdb840e0..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.5_T1.1.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.5_T1.1; - * @section: 11.13.2, 11.6.2; - * @assertion: The production x -= y is the same as x = x - y; - * @description: Type(x) and Type(y) vary between primitive boolean and Boolean object; - */ - -//CHECK#1 -x = true; -x -= true; -if (x !== 0) { - $ERROR('#1: x = true; x -= true; x === 0. Actual: ' + (x)); -} - -//CHECK#2 -x = new Boolean(true); -x -= true; -if (x !== 0) { - $ERROR('#2: x = new Boolean(true); x -= true; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = true; -x -= new Boolean(true); -if (x !== 0) { - $ERROR('#3: x = true; x -= new Boolean(true); x === 0. Actual: ' + (x)); -} - -//CHECK#4 -x = new Boolean(true); -x -= new Boolean(true); -if (x !== 0) { - $ERROR('#4: x = new Boolean(true); x -= new Boolean(true); x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.5_T1.2.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.5_T1.2.js deleted file mode 100644 index a611daf66..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.5_T1.2.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.5_T1.2; - * @section: 11.13.2, 11.6.2; - * @assertion: The production x -= y is the same as x = x - y; - * @description: Type(x) and Type(y) vary between primitive number and Number object; -*/ - -//CHECK#1 -x = 1; -x -= 1; -if (x !== 0) { - $ERROR('#1: x = 1; x -= 1; x === 0. Actual: ' + (x)); -} - -//CHECK#2 -x = new Number(1); -x -= 1; -if (x !== 0) { - $ERROR('#2: x = new Number(1); x -= 1; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = 1; -x -= new Number(1); -if (x !== 0) { - $ERROR('#3: x = 1; x -= new Number(1); x === 0. Actual: ' + (x)); -} - -//CHECK#4 -x = new Number(1); -x -= new Number(1); -if (x !== 0) { - $ERROR('#4: x = new Number(1); x -= new Number(1); x === 0. Actual: ' + (x)); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.5_T1.3.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.5_T1.3.js deleted file mode 100644 index 2babc304f..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.5_T1.3.js +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.5_T1.3; - * @section: 11.13.2, 11.6.2; - * @assertion: The production x -= y is the same as x = x - y; - * @description: Type(x) and Type(y) vary between primitive string and String object; -*/ - -//CHECK#1 -x = "1"; -x -= "1"; -if (x !== 0) { - $ERROR('#1: x = "1"; x -= "1"; x === 0. Actual: ' + (x)); -} - -//CHECK#2 -x = new String("1"); -x -= "1"; -if (x !== 0) { - $ERROR('#2: x = new String("1"); x -= "1"; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = "1"; -x -= new String("1"); -if (x !== 0) { - $ERROR('#3: x = "1"; x -= new String("1"); x === 0. Actual: ' + (x)); -} - -//CHECK#4 -x = new String("1"); -x -= new String("1"); -if (x !== 0) { - $ERROR('#4: x = new String("1"); x -= new String("1"); x === 0. Actual: ' + (x)); -} - -//CHECK#5 -x = "x"; -x -= "1"; -if (isNaN(x) !== true) { - $ERROR('#5: x = "x"; x -= "1"; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#6 -x = "1"; -x -= "x"; -if (isNaN(x) !== true) { - $ERROR('#6: x = "1"; x -= "x"; x === Not-a-Number. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.5_T1.4.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.5_T1.4.js deleted file mode 100644 index c957e2fe9..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.5_T1.4.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.5_T1.4; - * @section: 11.13.2, 11.6.2; - * @assertion: The production x -= y is the same as x = x - y; - * @description: Type(x) and Type(y) vary between Null and Undefined; - */ - -//CHECK#1 -x = null; -x -= undefined; -if (isNaN(x) !== true) { - $ERROR('#1: x = null; x -= undefined; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#2 -x = undefined; -x -= null; -if (isNaN(x) !== true) { - $ERROR('#2: x = undefined; x -= null; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#3 -x = undefined; -x -= undefined; -if (isNaN(x) !== true) { - $ERROR('#3: x = undefined; x -= undefined; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#4 -x = null; -x -= null; -if (x !== 0) { - $ERROR('#4: x = null; x -= null; x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.5_T2.1.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.5_T2.1.js deleted file mode 100644 index 490a2e09d..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.5_T2.1.js +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.5_T2.1; - * @section: 11.13.2, 11.6.2; - * @assertion: The production x -= y is the same as x = x - y; - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Boolean (primitive and object); - */ - -//CHECK#1 -x = true; -x -= 1; -if (x !== 0) { - $ERROR('#1: x = true; x -= 1; x === 0. Actual: ' + (x)); -} - -//CHECK#2 -x = 1; -x -= true; -if (x !== 0) { - $ERROR('#2: x = 1; x -= true; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = new Boolean(true); -x -= 1; -if (x !== 0) { - $ERROR('#3: x = new Boolean(true); x -= 1; x === 0. Actual: ' + (x)); -} - -//CHECK#4 -x = 1; -x -= new Boolean(true); -if (x !== 0) { - $ERROR('#4: x = 1; x -= new Boolean(true); x === 0. Actual: ' + (x)); -} - -//CHECK#5 -x = true; -x -= new Number(1); -if (x !== 0) { - $ERROR('#5: x = true; x -= new Number(1); x === 0. Actual: ' + (x)); -} - -//CHECK#6 -x = new Number(1); -x -= true; -if (x !== 0) { - $ERROR('#6: x = new Number(1); x -= true; x === 0. Actual: ' + (x)); -} - -//CHECK#7 -x = new Boolean(true); -x -= new Number(1); -if (x !== 0) { - $ERROR('#7: x = new Boolean(true); x -= new Number(1); x === 0. Actual: ' + (x)); -} - -//CHECK#8 -x = new Number(1); -x -= new Boolean(true); -if (x !== 0) { - $ERROR('#8: x = new Number(1); x -= new Boolean(true); x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.5_T2.2.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.5_T2.2.js deleted file mode 100644 index 4657424dd..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.5_T2.2.js +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.5_T2.2; - * @section: 11.13.2, 11.6.2; - * @assertion: The production x -= y is the same as x = x - y; - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and String (primitive and object); -*/ - -//CHECK#1 -x = "1"; -x -= 1; -if (x !== 0) { - $ERROR('#1: x = "1"; x -= 1; x === 0. Actual: ' + (x)); -} - -//CHECK#2 -x = 1; -x -= "1"; -if (x !== 0) { - $ERROR('#2: x = 1; x -= "1"; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = new String("1"); -x -= 1; -if (x !== 0) { - $ERROR('#3: x = new String("1"); x -= 1; x === 0. Actual: ' + (x)); -} - -//CHECK#4 -x = 1; -x -= new String("1"); -if (x !== 0) { - $ERROR('#4: x = 1; x -= new String("1"); x === 0. Actual: ' + (x)); -} - -//CHECK#5 -x = "1"; -x -= new Number(1); -if (x !== 0) { - $ERROR('#5: x = "1"; x -= new Number(1); x === 0. Actual: ' + (x)); -} - -//CHECK#6 -x = new Number(1); -x -= "1"; -if (x !== 0) { - $ERROR('#6: x = new Number(1); x -= "1"; x === 0. Actual: ' + (x)); -} - -//CHECK#7 -x = new String("1"); -x -= new Number(1); -if (x !== 0) { - $ERROR('#7: x = new String("1"); x -= new Number(1); x === 0. Actual: ' + (x)); -} - -//CHECK#8 -x = new Number(1); -x -= new String("1"); -if (x !== 0) { - $ERROR('#8: x = new Number(1); x -= new String("1"); x === 0. Actual: ' + (x)); -} - -//CHECK#9 -x = "x"; -x -= 1; -if (isNaN(x) !== true) { - $ERROR('#9: x = "x"; x -= 1; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#10 -x = 1; -x -= "x"; -if (isNaN(x) !== true) { - $ERROR('#10: x = 1; x -= "x"; x === Not-a-Number. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.5_T2.3.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.5_T2.3.js deleted file mode 100644 index b7fcb35ff..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.5_T2.3.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.5_T2.3; - * @section: 11.13.2, 11.6.2; - * @assertion: The production x -= y is the same as x = x - y; - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Null; - */ - -//CHECK#1 -x = 1; -x -= null; -if (x !== 1) { - $ERROR('#1: x = 1; x -= null; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -x = null; -x -= 1; -if (x !== -1) { - $ERROR('#2: x = null; x -= 1; x === -1. Actual: ' + (x)); -} - -//CHECK#3 -x = new Number(1); -x -= null; -if (x !== 1) { - $ERROR('#3: x = new Number(1); x -= null; x === 1. Actual: ' + (x)); -} - -//CHECK#4 -x = null; -x -= new Number(1); -if (x !== -1) { - $ERROR('#4: x = null; x -= new Number(1); x === -1. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.5_T2.4.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.5_T2.4.js deleted file mode 100644 index df000b659..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.5_T2.4.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.5_T2.4; - * @section: 11.13.2, 11.6.2; - * @assertion: The production x -= y is the same as x = x - y; - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Undefined; - */ - -//CHECK#1 -x = 1; -x -= undefined; -if (isNaN(x) !== true) { - $ERROR('#1: x = 1; x -= undefined; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#2 -x = undefined; -x -= 1; -if (isNaN(x) !== true) { - $ERROR('#2: x = undefined; x -= 1; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#3 -x = new Number(1); -x -= undefined; -if (isNaN(x) !== true) { - $ERROR('#3: x = new Number(1); x -= undefined; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#4 -x = undefined; -x -= new Number(1); -if (isNaN(x) !== true) { - $ERROR('#4: x = undefined; x -= new Number(1); x === Not-a-Number. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.5_T2.5.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.5_T2.5.js deleted file mode 100644 index e44af16f2..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.5_T2.5.js +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.5_T2.5; - * @section: 11.13.2, 11.6.2; - * @assertion: The production x -= y is the same as x = x - y; - * @description: Type(x) is different from Type(y) and both types vary between String (primitive or object) and Boolean (primitive and object); -*/ - -//CHECK#1 -x = true; -x -= "1"; -if (x !== 0) { - $ERROR('#1: x = true; x -= "1"; x === 0. Actual: ' + (x)); -} - -//CHECK#2 -x = "1"; -x -= true; -if (x !== 0) { - $ERROR('#2: x = "1"; x -= true; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = new Boolean(true); -x -= "1"; -if (x !== 0) { - $ERROR('#3: x = new Boolean(true); x -= "1"; x === 0. Actual: ' + (x)); -} - -//CHECK#4 -x = "1"; -x -= new Boolean(true); -if (x !== 0) { - $ERROR('#4: x = "1"; x -= new Boolean(true); x === 0. Actual: ' + (x)); -} - -//CHECK#5 -x = true; -x -= new String("1"); -if (x !== 0) { - $ERROR('#5: x = true; x -= new String("1"); x === 0. Actual: ' + (x)); -} - -//CHECK#6 -x = new String("1"); -x -= true; -if (x !== 0) { - $ERROR('#6: x = new String("1"); x -= true; x === 0. Actual: ' + (x)); -} - -//CHECK#7 -x = new Boolean(true); -x -= new String("1"); -if (x !== 0) { - $ERROR('#7: x = new Boolean(true); x -= new String("1"); x === 0. Actual: ' + (x)); -} - -//CHECK#8 -x = new String("1"); -x -= new Boolean(true); -if (x !== 0) { - $ERROR('#8: x = new String("1"); x -= new Boolean(true); x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.5_T2.6.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.5_T2.6.js deleted file mode 100644 index 550ec15cc..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.5_T2.6.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.5_T2.6; - * @section: 11.13.2, 11.6.2; - * @assertion: The production x -= y is the same as x = x - y; - * @description: Type(x) is different from Type(y) and both types vary between String (primitive or object) and Undefined; - */ - -//CHECK#1 -x = "1"; -x -= undefined; -if (isNaN(x) !== true) { - $ERROR('#1: x = "1"; x -= undefined; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#2 -x = undefined; -x -= "1"; -if (isNaN(x) !== true) { - $ERROR('#2: x = undefined; x -= "1"; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#3 -x = new String("1"); -x -= undefined; -if (isNaN(x) !== true) { - $ERROR('#3: x = new String("1"); x -= undefined; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#4 -x = undefined; -x -= new String("1"); -if (isNaN(x) !== true) { - $ERROR('#4: x = undefined; x -= new String("1"); x === Not-a-Number. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.5_T2.7.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.5_T2.7.js deleted file mode 100644 index aa7e114fb..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.5_T2.7.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.5_T2.7; - * @section: 11.13.2, 11.6.2; - * @assertion: The production x -= y is the same as x = x - y; - * @description: Type(x) is different from Type(y) and both types vary between String (primitive or object) and Null; - */ - -//CHECK#1 -x = "1"; -x -= null; -if (x !== 1) { - $ERROR('#1: x = "1"; x -= null; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -x = null; -x -= "1"; -if (x !== -1) { - $ERROR('#2: x = null; x -= "1"; x === -1. Actual: ' + (x)); -} - -//CHECK#3 -x = new String("1"); -x -= null; -if (x !== 1) { - $ERROR('#3: x = new String("1"); x -= null; x === 1. Actual: ' + (x)); -} - -//CHECK#4 -x = null; -x -= new String("1"); -if (x !== -1) { - $ERROR('#4: x = null; x -= new String("1"); x === -1. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.5_T2.8.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.5_T2.8.js deleted file mode 100644 index 151491ade..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.5_T2.8.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.5_T2.8; - * @section: 11.13.2, 11.6.2; - * @assertion: The production x -= y is the same as x = x - y; - * @description: Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Undefined; - */ - -//CHECK#1 -x = true; -x -= undefined; -if (isNaN(x) !== true) { - $ERROR('#1: x = true; x -= undefined; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#2 -x = undefined; -x -= true; -if (isNaN(x) !== true) { - $ERROR('#2: x = undefined; x -= true; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#3 -x = new Boolean(true); -x -= undefined; -if (isNaN(x) !== true) { - $ERROR('#3: x = new Boolean(true); x -= undefined; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#4 -x = undefined; -x -= new Boolean(true); -if (isNaN(x) !== true) { - $ERROR('#4: x = undefined; x -= new Boolean(true); x === Not-a-Number. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.5_T2.9.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.5_T2.9.js deleted file mode 100644 index dffa8ae58..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.5_T2.9.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.5_T2.9; - * @section: 11.13.2, 11.6.2; - * @assertion: The production x -= y is the same as x = x - y; - * @description: Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Null; - */ - -//CHECK#1 -x = true; -x -= null; -if (x !== 1) { - $ERROR('#1: x = true; x -= null; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -x = null; -x -= true; -if (x !== -1) { - $ERROR('#2: x = null; x -= true; x === -1. Actual: ' + (x)); -} - -//CHECK#3 -x = new Boolean(true); -x -= null; -if (x !== 1) { - $ERROR('#3: x = new Boolean(true); x -= null; x === 1. Actual: ' + (x)); -} - -//CHECK#4 -x = null; -x -= new Boolean(true); -if (x !== -1) { - $ERROR('#4: x = null; x -= new Boolean(true); x === -1. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.6_T1.1.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.6_T1.1.js deleted file mode 100644 index 501212a2a..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.6_T1.1.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.6_T1.1; - * @section: 11.13.2, 11.7.1; - * @assertion: The production x <<= y is the same as x = x << y; - * @description: Type(x) and Type(y) vary between primitive boolean and Boolean object; -*/ - -//CHECK#1 -x = true; -x <<= true; -if (x !== 2) { - $ERROR('#1: x = true; x <<= true; x === 2. Actual: ' + (x)); -} - -//CHECK#2 -x = new Boolean(true); -x <<= true; -if (x !== 2) { - $ERROR('#2: x = new Boolean(true); x <<= true; x === 2. Actual: ' + (x)); -} - -//CHECK#3 -x = true; -x <<= new Boolean(true); -if (x !== 2) { - $ERROR('#3: x = true; x <<= new Boolean(true); x === 2. Actual: ' + (x)); -} - -//CHECK#4 -x = new Boolean(true); -x <<= new Boolean(true); -if (x !== 2) { - $ERROR('#4: x = new Boolean(true); x <<= new Boolean(true); x === 2. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.6_T1.2.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.6_T1.2.js deleted file mode 100644 index 04800f7f1..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.6_T1.2.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.6_T1.2; - * @section: 11.13.2, 11.7.1; - * @assertion: The production x <<= y is the same as x = x << y; - * @description: Type(x) and Type(y) vary between primitive number and Number object; -*/ - -//CHECK#1 -x = 1; -x <<= 1; -if (x !== 2) { - $ERROR('#1: x = 1; x <<= 1; x === 2. Actual: ' + (x)); -} - -//CHECK#2 -x = new Number(1); -x <<= 1; -if (x !== 2) { - $ERROR('#2: x = new Number(1); x <<= 1; x === 2. Actual: ' + (x)); -} - -//CHECK#3 -x = 1; -x <<= new Number(1); -if (x !== 2) { - $ERROR('#3: x = 1; x <<= new Number(1); x === 2. Actual: ' + (x)); -} - -//CHECK#4 -x = new Number(1); -x <<= new Number(1); -if (x !== 2) { - $ERROR('#4: x = new Number(1); x <<= new Number(1); x === 2. Actual: ' + (x)); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.6_T1.3.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.6_T1.3.js deleted file mode 100644 index 1a2355664..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.6_T1.3.js +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.6_T1.3; - * @section: 11.13.2, 11.7.1; - * @assertion: The production x <<= y is the same as x = x << y; - * @description: Type(x) and Type(y) vary between primitive string and String object; -*/ - -//CHECK#1 -x = "1"; -x <<= "1"; -if (x !== 2) { - $ERROR('#1: x = "1"; x <<= "1"; x === 2. Actual: ' + (x)); -} - -//CHECK#2 -x = new String("1"); -x <<= "1"; -if (x !== 2) { - $ERROR('#2: x = new String("1"); x <<= "1"; x === 2. Actual: ' + (x)); -} - -//CHECK#3 -x = "1"; -x <<= new String("1"); -if (x !== 2) { - $ERROR('#3: x = "1"; x <<= new String("1"); x === 2. Actual: ' + (x)); -} - -//CHECK#4 -x = new String("1"); -x <<= new String("1"); -if (x !== 2) { - $ERROR('#4: x = new String("1"); x <<= new String("1"); x === 2. Actual: ' + (x)); -} - -//CHECK#5 -x = "x"; -x <<= "1"; -if (x !== 0) { - $ERROR('#5: x = "x"; x <<= "1"; x === 0. Actual: ' + (x)); -} - -//CHECK#6 -x = "1"; -x <<= "x"; -if (x !== 1) { - $ERROR('#6: x = "1"; x <<= "x"; x === 1. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.6_T1.4.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.6_T1.4.js deleted file mode 100644 index 33a27854e..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.6_T1.4.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.6_T1.4; - * @section: 11.13.2, 11.7.1; - * @assertion: The production x <<= y is the same as x = x << y; - * @description: Type(x) and Type(y) vary between Null and Undefined; - */ - -//CHECK#1 -x = null; -x <<= undefined; -if (x !== 0) { - $ERROR('#1: x = null; x <<= undefined; x === 0. Actual: ' + (x)); -} - -//CHECK#2 -x = undefined; -x <<= null; -if (x !== 0) { - $ERROR('#2: x = undefined; x <<= null; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = undefined; -x <<= undefined; -if (x !== 0) { - $ERROR('#3: x = undefined; x <<= undefined; x === 0. Actual: ' + (x)); -} - -//CHECK#4 -x = null; -x <<= null; -if (x !== 0) { - $ERROR('#4: x = null; x <<= null; x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.6_T2.1.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.6_T2.1.js deleted file mode 100644 index 2e9c5103c..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.6_T2.1.js +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.6_T2.1; - * @section: 11.13.2, 11.7.1; - * @assertion: The production x <<= y is the same as x = x << y; - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Boolean (primitive and object); - */ - -//CHECK#1 -x = true; -x <<= 1; -if (x !== 2) { - $ERROR('#1: x = true; x <<= 1; x === 2. Actual: ' + (x)); -} - -//CHECK#2 -x = 1; -x <<= true; -if (x !== 2) { - $ERROR('#2: x = 1; x <<= true; x === 2. Actual: ' + (x)); -} - -//CHECK#3 -x = new Boolean(true); -x <<= 1; -if (x !== 2) { - $ERROR('#3: x = new Boolean(true); x <<= 1; x === 2. Actual: ' + (x)); -} - -//CHECK#4 -x = 1; -x <<= new Boolean(true); -if (x !== 2) { - $ERROR('#4: x = 1; x <<= new Boolean(true); x === 2. Actual: ' + (x)); -} - -//CHECK#5 -x = true; -x <<= new Number(1); -if (x !== 2) { - $ERROR('#5: x = true; x <<= new Number(1); x === 2. Actual: ' + (x)); -} - -//CHECK#6 -x = new Number(1); -x <<= true; -if (x !== 2) { - $ERROR('#6: x = new Number(1); x <<= true; x === 2. Actual: ' + (x)); -} - -//CHECK#7 -x = new Boolean(true); -x <<= new Number(1); -if (x !== 2) { - $ERROR('#7: x = new Boolean(true); x <<= new Number(1); x === 2. Actual: ' + (x)); -} - -//CHECK#8 -x = new Number(1); -x <<= new Boolean(true); -if (x !== 2) { - $ERROR('#8: x = new Number(1); x <<= new Boolean(true); x === 2. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.6_T2.2.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.6_T2.2.js deleted file mode 100644 index 1b16fc94c..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.6_T2.2.js +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.6_T2.2; - * @section: 11.13.2, 11.7.1; - * @assertion: The production x <<= y is the same as x = x << y; - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and String (primitive and object); -*/ - -//CHECK#1 -x = "1"; -x <<= 1; -if (x !== 2) { - $ERROR('#1: x = "1"; x <<= 1; x === 2. Actual: ' + (x)); -} - -//CHECK#2 -x = 1; -x <<= "1"; -if (x !== 2) { - $ERROR('#2: x = 1; x <<= "1"; x === 2. Actual: ' + (x)); -} - -//CHECK#3 -x = new String("1"); -x <<= 1; -if (x !== 2) { - $ERROR('#3: x = new String("1"); x <<= 1; x === 2. Actual: ' + (x)); -} - -//CHECK#4 -x = 1; -x <<= new String("1"); -if (x !== 2) { - $ERROR('#4: x = 1; x <<= new String("1"); x === 2. Actual: ' + (x)); -} - -//CHECK#5 -x = "1"; -x <<= new Number(1); -if (x !== 2) { - $ERROR('#5: x = "1"; x <<= new Number(1); x === 2. Actual: ' + (x)); -} - -//CHECK#6 -x = new Number(1); -x <<= "1"; -if (x !== 2) { - $ERROR('#6: x = new Number(1); x <<= "1"; x === 2. Actual: ' + (x)); -} - -//CHECK#7 -x = new String("1"); -x <<= new Number(1); -if (x !== 2) { - $ERROR('#7: x = new String("1"); x <<= new Number(1); x === 2. Actual: ' + (x)); -} - -//CHECK#8 -x = new Number(1); -x <<= new String("1"); -if (x !== 2) { - $ERROR('#8: x = new Number(1); x <<= new String("1"); x === 2. Actual: ' + (x)); -} - -//CHECK#9 -x = "x"; -x <<= 1; -if (x !== 0) { - $ERROR('#9: x = "x"; x <<= 1; x === 0. Actual: ' + (x)); -} - -//CHECK#10 -x = 1; -x <<= "x"; -if (x !== 1) { - $ERROR('#10: x = 1; x <<= "x"; x === 1. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.6_T2.3.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.6_T2.3.js deleted file mode 100644 index 7c5f17776..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.6_T2.3.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.6_T2.3; - * @section: 11.13.2, 11.7.1; - * @assertion: The production x <<= y is the same as x = x << y; - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Null; - */ - -//CHECK#1 -x = 1; -x <<= null; -if (x !== 1) { - $ERROR('#1: x = 1; x <<= null; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -x = null; -x <<= 1; -if (x !== 0) { - $ERROR('#2: x = null; x <<= 1; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = new Number(1); -x <<= null; -if (x !== 1) { - $ERROR('#3: x = new Number(1); x <<= null; x === 1. Actual: ' + (x)); -} - -//CHECK#4 -x = null; -x <<= new Number(1); -if (x !== 0) { - $ERROR('#4: x = null; x <<= new Number(1); x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.6_T2.4.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.6_T2.4.js deleted file mode 100644 index 3800ab525..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.6_T2.4.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.6_T2.4; - * @section: 11.13.2, 11.7.1; - * @assertion: The production x <<= y is the same as x = x << y; - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Undefined; - */ - -//CHECK#1 -x = 1; -x <<= undefined; -if (x !== 1) { - $ERROR('#1: x = 1; x <<= undefined; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -x = undefined; -x <<= 1; -if (x !== 0) { - $ERROR('#2: x = undefined; x <<= 1; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = new Number(1); -x <<= undefined; -if (x !== 1) { - $ERROR('#3: x = new Number(1); x <<= undefined; x === 1. Actual: ' + (x)); -} - -//CHECK#4 -x = undefined; -x <<= new Number(1); -if (x !== 0) { - $ERROR('#4: x = undefined; x <<= new Number(1); x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.6_T2.5.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.6_T2.5.js deleted file mode 100644 index 18deaaaf0..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.6_T2.5.js +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.6_T2.5; - * @section: 11.13.2, 11.7.1; - * @assertion: The production x <<= y is the same as x = x << y; - * @description: Type(x) is different from Type(y) and both types vary between String (primitive or object) and Boolean (primitive and object); -*/ - -//CHECK#1 -x = true; -x <<= "1"; -if (x !== 2) { - $ERROR('#1: x = true; x <<= "1"; x === 2. Actual: ' + (x)); -} - -//CHECK#2 -x = "1"; -x <<= true; -if (x !== 2) { - $ERROR('#2: x = "1"; x <<= true; x === 2. Actual: ' + (x)); -} - -//CHECK#3 -x = new Boolean(true); -x <<= "1"; -if (x !== 2) { - $ERROR('#3: x = new Boolean(true); x <<= "1"; x === 2. Actual: ' + (x)); -} - -//CHECK#4 -x = "1"; -x <<= new Boolean(true); -if (x !== 2) { - $ERROR('#4: x = "1"; x <<= new Boolean(true); x === 2. Actual: ' + (x)); -} - -//CHECK#5 -x = true; -x <<= new String("1"); -if (x !== 2) { - $ERROR('#5: x = true; x <<= new String("1"); x === 2. Actual: ' + (x)); -} - -//CHECK#6 -x = new String("1"); -x <<= true; -if (x !== 2) { - $ERROR('#6: x = new String("1"); x <<= true; x === 2. Actual: ' + (x)); -} - -//CHECK#7 -x = new Boolean(true); -x <<= new String("1"); -if (x !== 2) { - $ERROR('#7: x = new Boolean(true); x <<= new String("1"); x === 2. Actual: ' + (x)); -} - -//CHECK#8 -x = new String("1"); -x <<= new Boolean(true); -if (x !== 2) { - $ERROR('#8: x = new String("1"); x <<= new Boolean(true); x === 2. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.6_T2.6.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.6_T2.6.js deleted file mode 100644 index 1cc5a4447..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.6_T2.6.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.6_T2.6; - * @section: 11.13.2, 11.7.1; - * @assertion: The production x <<= y is the same as x = x << y; - * @description: Type(x) is different from Type(y) and both types vary between String (primitive or object) and Undefined; - */ - -//CHECK#1 -x = "1"; -x <<= undefined; -if (x !== 1) { - $ERROR('#1: x = "1"; x <<= undefined; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -x = undefined; -x <<= "1"; -if (x !== 0) { - $ERROR('#2: x = undefined; x <<= "1"; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = new String("1"); -x <<= undefined; -if (x !== 1) { - $ERROR('#3: x = new String("1"); x <<= undefined; x === 1. Actual: ' + (x)); -} - -//CHECK#4 -x = undefined; -x <<= new String("1"); -if (x !== 0) { - $ERROR('#4: x = undefined; x <<= new String("1"); x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.6_T2.7.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.6_T2.7.js deleted file mode 100644 index c52ad33ef..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.6_T2.7.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.6_T2.7; - * @section: 11.13.2, 11.7.1; - * @assertion: The production x <<= y is the same as x = x << y; - * @description: Type(x) is different from Type(y) and both types vary between String (primitive or object) and Null; - */ - -//CHECK#1 -x = "1"; -x <<= null; -if (x !== 1) { - $ERROR('#1: x = "1"; x <<= null; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -x = null; -x <<= "1"; -if (x !== 0) { - $ERROR('#2: x = null; x <<= "1"; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = new String("1"); -x <<= null; -if (x !== 1) { - $ERROR('#3: x = new String("1"); x <<= null; x === 1. Actual: ' + (x)); -} - -//CHECK#4 -x = null; -x <<= new String("1"); -if (x !== 0) { - $ERROR('#4: x = null; x <<= new String("1"); x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.6_T2.8.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.6_T2.8.js deleted file mode 100644 index f832c2a96..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.6_T2.8.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.6_T2.8; - * @section: 11.13.2, 11.7.1; - * @assertion: The production x <<= y is the same as x = x << y; - * @description: Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Undefined; - */ - -//CHECK#1 -x = true; -x <<= undefined; -if (x !== 1) { - $ERROR('#1: x = true; x <<= undefined; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -x = undefined; -x <<= true; -if (x !== 0) { - $ERROR('#2: x = undefined; x <<= true; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = new Boolean(true); -x <<= undefined; -if (x !== 1) { - $ERROR('#3: x = new Boolean(true); x <<= undefined; x === 1. Actual: ' + (x)); -} - -//CHECK#4 -x = undefined; -x <<= new Boolean(true); -if (x !== 0) { - $ERROR('#4: x = undefined; x <<= new Boolean(true); x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.6_T2.9.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.6_T2.9.js deleted file mode 100644 index 3bb99368a..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.6_T2.9.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.6_T2.9; - * @section: 11.13.2, 11.7.1; - * @assertion: The production x <<= y is the same as x = x << y; - * @description: Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Null; - */ - -//CHECK#1 -x = true; -x <<= null; -if (x !== 1) { - $ERROR('#1: x = true; x <<= null; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -x = null; -x <<= true; -if (x !== 0) { - $ERROR('#2: x = null; x <<= true; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = new Boolean(true); -x <<= null; -if (x !== 1) { - $ERROR('#3: x = new Boolean(true); x <<= null; x === 1. Actual: ' + (x)); -} - -//CHECK#4 -x = null; -x <<= new Boolean(true); -if (x !== 0) { - $ERROR('#4: x = null; x <<= new Boolean(true); x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.7_T1.1.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.7_T1.1.js deleted file mode 100644 index 71c200e37..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.7_T1.1.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.7_T1.1; - * @section: 11.13.2, 11.7.2; - * @assertion: The production x >>= y is the same as x = x >> y; - * @description: Type(x) and Type(y) vary between primitive boolean and Boolean object; - */ - -//CHECK#1 -x = true; -x >>= true; -if (x !== 0) { - $ERROR('#1: x = true; x >>= true; x === 0. Actual: ' + (x)); -} - -//CHECK#2 -x = new Boolean(true); -x >>= true; -if (x !== 0) { - $ERROR('#2: x = new Boolean(true); x >>= true; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = true; -x >>= new Boolean(true); -if (x !== 0) { - $ERROR('#3: x = true; x >>= new Boolean(true); x === 0. Actual: ' + (x)); -} - -//CHECK#4 -x = new Boolean(true); -x >>= new Boolean(true); -if (x !== 0) { - $ERROR('#4: x = new Boolean(true); x >>= new Boolean(true); x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.7_T1.2.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.7_T1.2.js deleted file mode 100644 index 7f8ef5536..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.7_T1.2.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.7_T1.2; - * @section: 11.13.2, 11.7.2; - * @assertion: The production x >>= y is the same as x = x >> y; - * @description: Type(x) and Type(y) vary between primitive number and Number object; -*/ - -//CHECK#1 -x = 1; -x >>= 1; -if (x !== 0) { - $ERROR('#1: x = 1; x >>= 1; x === 0. Actual: ' + (x)); -} - -//CHECK#2 -x = new Number(1); -x >>= 1; -if (x !== 0) { - $ERROR('#2: x = new Number(1); x >>= 1; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = 1; -x >>= new Number(1); -if (x !== 0) { - $ERROR('#3: x = 1; x >>= new Number(1); x === 0. Actual: ' + (x)); -} - -//CHECK#4 -x = new Number(1); -x >>= new Number(1); -if (x !== 0) { - $ERROR('#4: x = new Number(1); x >>= new Number(1); x === 0. Actual: ' + (x)); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.7_T1.3.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.7_T1.3.js deleted file mode 100644 index e8723881f..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.7_T1.3.js +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.7_T1.3; - * @section: 11.13.2, 11.7.2; - * @assertion: The production x >>= y is the same as x = x >> y; - * @description: Type(x) and Type(y) vary between primitive string and String object; -*/ - -//CHECK#1 -x = "1"; -x >>= "1"; -if (x !== 0) { - $ERROR('#1: x = "1"; x >>= "1"; x === 0. Actual: ' + (x)); -} - -//CHECK#2 -x = new String("1"); -x >>= "1"; -if (x !== 0) { - $ERROR('#2: x = new String("1"); x >>= "1"; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = "1"; -x >>= new String("1"); -if (x !== 0) { - $ERROR('#3: x = "1"; x >>= new String("1"); x === 0. Actual: ' + (x)); -} - -//CHECK#4 -x = new String("1"); -x >>= new String("1"); -if (x !== 0) { - $ERROR('#4: x = new String("1"); x >>= new String("1"); x === 0. Actual: ' + (x)); -} - -//CHECK#5 -x = "x"; -x >>= "1"; -if (x !== 0) { - $ERROR('#5: x = "x"; x >>= "1"; x === 0. Actual: ' + (x)); -} - -//CHECK#6 -x = "1"; -x >>= "x"; -if (x !== 1) { - $ERROR('#6: x = "1"; x >>= "x"; x === 1. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.7_T1.4.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.7_T1.4.js deleted file mode 100644 index f5551f185..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.7_T1.4.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.7_T1.4; - * @section: 11.13.2, 11.7.2; - * @assertion: The production x >>= y is the same as x = x >> y; - * @description: Type(x) and Type(y) vary between Null and Undefined; - */ - -//CHECK#1 -x = null; -x >>= undefined; -if (x !== 0) { - $ERROR('#1: x = null; x >>= undefined; x === 0. Actual: ' + (x)); -} - -//CHECK#2 -x = undefined; -x >>= null; -if (x !== 0) { - $ERROR('#2: x = undefined; x >>= null; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = undefined; -x >>= undefined; -if (x !== 0) { - $ERROR('#3: x = undefined; x >>= undefined; x === 0. Actual: ' + (x)); -} - -//CHECK#4 -x = null; -x >>= null; -if (x !== 0) { - $ERROR('#4: x = null; x >>= null; x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.7_T2.1.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.7_T2.1.js deleted file mode 100644 index 13b5ba2ca..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.7_T2.1.js +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.7_T2.1; - * @section: 11.13.2, 11.7.2; - * @assertion: The production x >>= y is the same as x = x >> y; - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Boolean (primitive and object); - */ - -//CHECK#1 -x = true; -x >>= 1; -if (x !== 0) { - $ERROR('#1: x = true; x >>= 1; x === 0. Actual: ' + (x)); -} - -//CHECK#2 -x = 1; -x >>= true; -if (x !== 0) { - $ERROR('#2: x = 1; x >>= true; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = new Boolean(true); -x >>= 1; -if (x !== 0) { - $ERROR('#3: x = new Boolean(true); x >>= 1; x === 0. Actual: ' + (x)); -} - -//CHECK#4 -x = 1; -x >>= new Boolean(true); -if (x !== 0) { - $ERROR('#4: x = 1; x >>= new Boolean(true); x === 0. Actual: ' + (x)); -} - -//CHECK#5 -x = true; -x >>= new Number(1); -if (x !== 0) { - $ERROR('#5: x = true; x >>= new Number(1); x === 0. Actual: ' + (x)); -} - -//CHECK#6 -x = new Number(1); -x >>= true; -if (x !== 0) { - $ERROR('#6: x = new Number(1); x >>= true; x === 0. Actual: ' + (x)); -} - -//CHECK#7 -x = new Boolean(true); -x >>= new Number(1); -if (x !== 0) { - $ERROR('#7: x = new Boolean(true); x >>= new Number(1); x === 0. Actual: ' + (x)); -} - -//CHECK#8 -x = new Number(1); -x >>= new Boolean(true); -if (x !== 0) { - $ERROR('#8: x = new Number(1); x >>= new Boolean(true); x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.7_T2.2.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.7_T2.2.js deleted file mode 100644 index c62c9395e..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.7_T2.2.js +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.7_T2.2; - * @section: 11.13.2, 11.7.2; - * @assertion: The production x >>= y is the same as x = x >> y; - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and String (primitive and object); -*/ - -//CHECK#1 -x = "1"; -x >>= 1; -if (x !== 0) { - $ERROR('#1: x = "1"; x >>= 1; x === 0. Actual: ' + (x)); -} - -//CHECK#2 -x = 1; -x >>= "1"; -if (x !== 0) { - $ERROR('#2: x = 1; x >>= "1"; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = new String("1"); -x >>= 1; -if (x !== 0) { - $ERROR('#3: x = new String("1"); x >>= 1; x === 0. Actual: ' + (x)); -} - -//CHECK#4 -x = 1; -x >>= new String("1"); -if (x !== 0) { - $ERROR('#4: x = 1; x >>= new String("1"); x === 0. Actual: ' + (x)); -} - -//CHECK#5 -x = "1"; -x >>= new Number(1); -if (x !== 0) { - $ERROR('#5: x = "1"; x >>= new Number(1); x === 0. Actual: ' + (x)); -} - -//CHECK#6 -x = new Number(1); -x >>= "1"; -if (x !== 0) { - $ERROR('#6: x = new Number(1); x >>= "1"; x === 0. Actual: ' + (x)); -} - -//CHECK#7 -x = new String("1"); -x >>= new Number(1); -if (x !== 0) { - $ERROR('#7: x = new String("1"); x >>= new Number(1); x === 0. Actual: ' + (x)); -} - -//CHECK#8 -x = new Number(1); -x >>= new String("1"); -if (x !== 0) { - $ERROR('#8: x = new Number(1); x >>= new String("1"); x === 0. Actual: ' + (x)); -} - -//CHECK#9 -x = "x"; -x >>= 1; -if (x !== 0) { - $ERROR('#9: x = "x"; x >>= 1; x === 0. Actual: ' + (x)); -} - -//CHECK#10 -x = 1; -x >>= "x"; -if (x !== 1) { - $ERROR('#10: x = 1; x >>= "x"; x === 1. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.7_T2.3.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.7_T2.3.js deleted file mode 100644 index bfd29a362..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.7_T2.3.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.7_T2.3; - * @section: 11.13.2, 11.7.2; - * @assertion: The production x >>= y is the same as x = x >> y; - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Null; - */ - -//CHECK#1 -x = 1; -x >>= null; -if (x !== 1) { - $ERROR('#1: x = 1; x >>= null; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -x = null; -x >>= 1; -if (x !== 0) { - $ERROR('#2: x = null; x >>= 1; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = new Number(1); -x >>= null; -if (x !== 1) { - $ERROR('#3: x = new Number(1); x >>= null; x === 1. Actual: ' + (x)); -} - -//CHECK#4 -x = null; -x >>= new Number(1); -if (x !== 0) { - $ERROR('#4: x = null; x >>= new Number(1); x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.7_T2.4.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.7_T2.4.js deleted file mode 100644 index 30cec32e3..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.7_T2.4.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.7_T2.4; - * @section: 11.13.2, 11.7.2; - * @assertion: The production x >>= y is the same as x = x >> y; - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Undefined; - */ - -//CHECK#1 -x = 1; -x >>= undefined; -if (x !== 1) { - $ERROR('#1: x = 1; x >>= undefined; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -x = undefined; -x >>= 1; -if (x !== 0) { - $ERROR('#2: x = undefined; x >>= 1; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = new Number(1); -x >>= undefined; -if (x !== 1) { - $ERROR('#3: x = new Number(1); x >>= undefined; x === 1. Actual: ' + (x)); -} - -//CHECK#4 -x = undefined; -x >>= new Number(1); -if (x !== 0) { - $ERROR('#4: x = undefined; x >>= new Number(1); x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.7_T2.5.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.7_T2.5.js deleted file mode 100644 index 1a8aaa499..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.7_T2.5.js +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.7_T2.5; - * @section: 11.13.2, 11.7.2; - * @assertion: The production x >>= y is the same as x = x >> y; - * @description: Type(x) is different from Type(y) and both types vary between String (primitive or object) and Boolean (primitive and object); -*/ - -//CHECK#1 -x = true; -x >>= "1"; -if (x !== 0) { - $ERROR('#1: x = true; x >>= "1"; x === 0. Actual: ' + (x)); -} - -//CHECK#2 -x = "1"; -x >>= true; -if (x !== 0) { - $ERROR('#2: x = "1"; x >>= true; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = new Boolean(true); -x >>= "1"; -if (x !== 0) { - $ERROR('#3: x = new Boolean(true); x >>= "1"; x === 0. Actual: ' + (x)); -} - -//CHECK#4 -x = "1"; -x >>= new Boolean(true); -if (x !== 0) { - $ERROR('#4: x = "1"; x >>= new Boolean(true); x === 0. Actual: ' + (x)); -} - -//CHECK#5 -x = true; -x >>= new String("1"); -if (x !== 0) { - $ERROR('#5: x = true; x >>= new String("1"); x === 0. Actual: ' + (x)); -} - -//CHECK#6 -x = new String("1"); -x >>= true; -if (x !== 0) { - $ERROR('#6: x = new String("1"); x >>= true; x === 0. Actual: ' + (x)); -} - -//CHECK#7 -x = new Boolean(true); -x >>= new String("1"); -if (x !== 0) { - $ERROR('#7: x = new Boolean(true); x >>= new String("1"); x === 0. Actual: ' + (x)); -} - -//CHECK#8 -x = new String("1"); -x >>= new Boolean(true); -if (x !== 0) { - $ERROR('#8: x = new String("1"); x >>= new Boolean(true); x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.7_T2.6.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.7_T2.6.js deleted file mode 100644 index 55fd43ea1..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.7_T2.6.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.7_T2.6; - * @section: 11.13.2, 11.7.2; - * @assertion: The production x >>= y is the same as x = x >> y; - * @description: Type(x) is different from Type(y) and both types vary between String (primitive or object) and Undefined; - */ - -//CHECK#1 -x = "1"; -x >>= undefined; -if (x !== 1) { - $ERROR('#1: x = "1"; x >>= undefined; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -x = undefined; -x >>= "1"; -if (x !== 0) { - $ERROR('#2: x = undefined; x >>= "1"; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = new String("1"); -x >>= undefined; -if (x !== 1) { - $ERROR('#3: x = new String("1"); x >>= undefined; x === 1. Actual: ' + (x)); -} - -//CHECK#4 -x = undefined; -x >>= new String("1"); -if (x !== 0) { - $ERROR('#4: x = undefined; x >>= new String("1"); x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.7_T2.7.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.7_T2.7.js deleted file mode 100644 index fd9f5958b..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.7_T2.7.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.7_T2.7; - * @section: 11.13.2, 11.7.2; - * @assertion: The production x >>= y is the same as x = x >> y; - * @description: Type(x) is different from Type(y) and both types vary between String (primitive or object) and Null; - */ - -//CHECK#1 -x = "1"; -x >>= null; -if (x !== 1) { - $ERROR('#1: x = "1"; x >>= null; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -x = null; -x >>= "1"; -if (x !== 0) { - $ERROR('#2: x = null; x >>= "1"; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = new String("1"); -x >>= null; -if (x !== 1) { - $ERROR('#3: x = new String("1"); x >>= null; x === 1. Actual: ' + (x)); -} - -//CHECK#4 -x = null; -x >>= new String("1"); -if (x !== 0) { - $ERROR('#4: x = null; x >>= new String("1"); x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.7_T2.8.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.7_T2.8.js deleted file mode 100644 index 750b7e95f..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.7_T2.8.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.7_T2.8; - * @section: 11.13.2, 11.7.2; - * @assertion: The production x >>= y is the same as x = x >> y; - * @description: Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Undefined; - */ - -//CHECK#1 -x = true; -x >>= undefined; -if (x !== 1) { - $ERROR('#1: x = true; x >>= undefined; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -x = undefined; -x >>= true; -if (x !== 0) { - $ERROR('#2: x = undefined; x >>= true; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = new Boolean(true); -x >>= undefined; -if (x !== 1) { - $ERROR('#3: x = new Boolean(true); x >>= undefined; x === 1. Actual: ' + (x)); -} - -//CHECK#4 -x = undefined; -x >>= new Boolean(true); -if (x !== 0) { - $ERROR('#4: x = undefined; x >>= new Boolean(true); x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.7_T2.9.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.7_T2.9.js deleted file mode 100644 index daeefb75b..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.7_T2.9.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.7_T2.9; - * @section: 11.13.2, 11.7.2; - * @assertion: The production x >>= y is the same as x = x >> y; - * @description: Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Null; - */ - -//CHECK#1 -x = true; -x >>= null; -if (x !== 1) { - $ERROR('#1: x = true; x >>= null; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -x = null; -x >>= true; -if (x !== 0) { - $ERROR('#2: x = null; x >>= true; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = new Boolean(true); -x >>= null; -if (x !== 1) { - $ERROR('#3: x = new Boolean(true); x >>= null; x === 1. Actual: ' + (x)); -} - -//CHECK#4 -x = null; -x >>= new Boolean(true); -if (x !== 0) { - $ERROR('#4: x = null; x >>= new Boolean(true); x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.8_T1.1.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.8_T1.1.js deleted file mode 100644 index 5e81122e8..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.8_T1.1.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.8_T1.1; - * @section: 11.13.2, 11.7.3; - * @assertion: The production x >>>= y is the same as x = x >>> y; - * @description: Type(x) and Type(y) vary between primitive boolean and Boolean object; - */ - -//CHECK#1 -x = true; -x >>>= true; -if (x !== 0) { - $ERROR('#1: x = true; x >>>= true; x === 0. Actual: ' + (x)); -} - -//CHECK#2 -x = new Boolean(true); -x >>>= true; -if (x !== 0) { - $ERROR('#2: x = new Boolean(true); x >>>= true; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = true; -x >>>= new Boolean(true); -if (x !== 0) { - $ERROR('#3: x = true; x >>>= new Boolean(true); x === 0. Actual: ' + (x)); -} - -//CHECK#4 -x = new Boolean(true); -x >>>= new Boolean(true); -if (x !== 0) { - $ERROR('#4: x = new Boolean(true); x >>>= new Boolean(true); x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.8_T1.2.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.8_T1.2.js deleted file mode 100644 index d03839cc5..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.8_T1.2.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.8_T1.2; - * @section: 11.13.2, 11.7.3; - * @assertion: The production x >>>= y is the same as x = x >>> y; - * @description: Type(x) and Type(y) vary between primitive number and Number object; -*/ - -//CHECK#1 -x = 1; -x >>>= 1; -if (x !== 0) { - $ERROR('#1: x = 1; x >>>= 1; x === 0. Actual: ' + (x)); -} - -//CHECK#2 -x = new Number(1); -x >>>= 1; -if (x !== 0) { - $ERROR('#2: x = new Number(1); x >>>= 1; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = 1; -x >>>= new Number(1); -if (x !== 0) { - $ERROR('#3: x = 1; x >>>= new Number(1); x === 0. Actual: ' + (x)); -} - -//CHECK#4 -x = new Number(1); -x >>>= new Number(1); -if (x !== 0) { - $ERROR('#4: x = new Number(1); x >>>= new Number(1); x === 0. Actual: ' + (x)); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.8_T1.3.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.8_T1.3.js deleted file mode 100644 index d0863ac95..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.8_T1.3.js +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.8_T1.3; - * @section: 11.13.2, 11.7.3; - * @assertion: The production x >>>= y is the same as x = x >>> y; - * @description: Type(x) and Type(y) vary between primitive string and String object; -*/ - -//CHECK#1 -x = "1"; -x >>>= "1"; -if (x !== 0) { - $ERROR('#1: x = "1"; x >>>= "1"; x === 0. Actual: ' + (x)); -} - -//CHECK#2 -x = new String("1"); -x >>>= "1"; -if (x !== 0) { - $ERROR('#2: x = new String("1"); x >>>= "1"; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = "1"; -x >>>= new String("1"); -if (x !== 0) { - $ERROR('#3: x = "1"; x >>>= new String("1"); x === 0. Actual: ' + (x)); -} - -//CHECK#4 -x = new String("1"); -x >>>= new String("1"); -if (x !== 0) { - $ERROR('#4: x = new String("1"); x >>>= new String("1"); x === 0. Actual: ' + (x)); -} - -//CHECK#5 -x = "x"; -x >>>= "1"; -if (x !== 0) { - $ERROR('#5: x = "x"; x >>>= "1"; x === 0. Actual: ' + (x)); -} - -//CHECK#6 -x = "1"; -x >>>= "x"; -if (x !== 1) { - $ERROR('#6: x = "1"; x >>>= "x"; x === 1. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.8_T1.4.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.8_T1.4.js deleted file mode 100644 index 86de3c341..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.8_T1.4.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.8_T1.4; - * @section: 11.13.2, 11.7.3; - * @assertion: The production x >>>= y is the same as x = x >>> y; - * @description: Type(x) and Type(y) vary between Null and Undefined; - */ - -//CHECK#1 -x = null; -x >>>= undefined; -if (x !== 0) { - $ERROR('#1: x = null; x >>>= undefined; x === 0. Actual: ' + (x)); -} - -//CHECK#2 -x = undefined; -x >>>= null; -if (x !== 0) { - $ERROR('#2: x = undefined; x >>>= null; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = undefined; -x >>>= undefined; -if (x !== 0) { - $ERROR('#3: x = undefined; x >>>= undefined; x === 0. Actual: ' + (x)); -} - -//CHECK#4 -x = null; -x >>>= null; -if (x !== 0) { - $ERROR('#4: x = null; x >>>= null; x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.8_T2.1.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.8_T2.1.js deleted file mode 100644 index f6f1ef510..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.8_T2.1.js +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.8_T2.1; - * @section: 11.13.2, 11.7.3; - * @assertion: The production x >>>= y is the same as x = x >>> y; - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Boolean (primitive and object); - */ - -//CHECK#1 -x = true; -x >>>= 1; -if (x !== 0) { - $ERROR('#1: x = true; x >>>= 1; x === 0. Actual: ' + (x)); -} - -//CHECK#2 -x = 1; -x >>>= true; -if (x !== 0) { - $ERROR('#2: x = 1; x >>>= true; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = new Boolean(true); -x >>>= 1; -if (x !== 0) { - $ERROR('#3: x = new Boolean(true); x >>>= 1; x === 0. Actual: ' + (x)); -} - -//CHECK#4 -x = 1; -x >>>= new Boolean(true); -if (x !== 0) { - $ERROR('#4: x = 1; x >>>= new Boolean(true); x === 0. Actual: ' + (x)); -} - -//CHECK#5 -x = true; -x >>>= new Number(1); -if (x !== 0) { - $ERROR('#5: x = true; x >>>= new Number(1); x === 0. Actual: ' + (x)); -} - -//CHECK#6 -x = new Number(1); -x >>>= true; -if (x !== 0) { - $ERROR('#6: x = new Number(1); x >>>= true; x === 0. Actual: ' + (x)); -} - -//CHECK#7 -x = new Boolean(true); -x >>>= new Number(1); -if (x !== 0) { - $ERROR('#7: x = new Boolean(true); x >>>= new Number(1); x === 0. Actual: ' + (x)); -} - -//CHECK#8 -x = new Number(1); -x >>>= new Boolean(true); -if (x !== 0) { - $ERROR('#8: x = new Number(1); x >>>= new Boolean(true); x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.8_T2.2.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.8_T2.2.js deleted file mode 100644 index 7745cd6a8..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.8_T2.2.js +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.8_T2.2; - * @section: 11.13.2, 11.7.3; - * @assertion: The production x >>>= y is the same as x = x >>> y; - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and String (primitive and object); -*/ - -//CHECK#1 -x = "1"; -x >>>= 1; -if (x !== 0) { - $ERROR('#1: x = "1"; x >>>= 1; x === 0. Actual: ' + (x)); -} - -//CHECK#2 -x = 1; -x >>>= "1"; -if (x !== 0) { - $ERROR('#2: x = 1; x >>>= "1"; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = new String("1"); -x >>>= 1; -if (x !== 0) { - $ERROR('#3: x = new String("1"); x >>>= 1; x === 0. Actual: ' + (x)); -} - -//CHECK#4 -x = 1; -x >>>= new String("1"); -if (x !== 0) { - $ERROR('#4: x = 1; x >>>= new String("1"); x === 0. Actual: ' + (x)); -} - -//CHECK#5 -x = "1"; -x >>>= new Number(1); -if (x !== 0) { - $ERROR('#5: x = "1"; x >>>= new Number(1); x === 0. Actual: ' + (x)); -} - -//CHECK#6 -x = new Number(1); -x >>>= "1"; -if (x !== 0) { - $ERROR('#6: x = new Number(1); x >>>= "1"; x === 0. Actual: ' + (x)); -} - -//CHECK#7 -x = new String("1"); -x >>>= new Number(1); -if (x !== 0) { - $ERROR('#7: x = new String("1"); x >>>= new Number(1); x === 0. Actual: ' + (x)); -} - -//CHECK#8 -x = new Number(1); -x >>>= new String("1"); -if (x !== 0) { - $ERROR('#8: x = new Number(1); x >>>= new String("1"); x === 0. Actual: ' + (x)); -} - -//CHECK#9 -x = "x"; -x >>>= 1; -if (x !== 0) { - $ERROR('#9: x = "x"; x >>>= 1; x === 0. Actual: ' + (x)); -} - -//CHECK#10 -x = 1; -x >>>= "x"; -if (x !== 1) { - $ERROR('#10: x = 1; x >>>= "x"; x === 1. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.8_T2.3.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.8_T2.3.js deleted file mode 100644 index 343154982..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.8_T2.3.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.8_T2.3; - * @section: 11.13.2, 11.7.3; - * @assertion: The production x >>>= y is the same as x = x >>> y; - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Null; - */ - -//CHECK#1 -x = 1; -x >>>= null; -if (x !== 1) { - $ERROR('#1: x = 1; x >>>= null; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -x = null; -x >>>= 1; -if (x !== 0) { - $ERROR('#2: x = null; x >>>= 1; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = new Number(1); -x >>>= null; -if (x !== 1) { - $ERROR('#3: x = new Number(1); x >>>= null; x === 1. Actual: ' + (x)); -} - -//CHECK#4 -x = null; -x >>>= new Number(1); -if (x !== 0) { - $ERROR('#4: x = null; x >>>= new Number(1); x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.8_T2.4.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.8_T2.4.js deleted file mode 100644 index d070f661a..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.8_T2.4.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.8_T2.4; - * @section: 11.13.2, 11.7.3; - * @assertion: The production x >>>= y is the same as x = x >>> y; - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Undefined; - */ - -//CHECK#1 -x = 1; -x >>>= undefined; -if (x !== 1) { - $ERROR('#1: x = 1; x >>>= undefined; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -x = undefined; -x >>>= 1; -if (x !== 0) { - $ERROR('#2: x = undefined; x >>>= 1; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = new Number(1); -x >>>= undefined; -if (x !== 1) { - $ERROR('#3: x = new Number(1); x >>>= undefined; x === 1. Actual: ' + (x)); -} - -//CHECK#4 -x = undefined; -x >>>= new Number(1); -if (x !== 0) { - $ERROR('#4: x = undefined; x >>>= new Number(1); x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.8_T2.5.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.8_T2.5.js deleted file mode 100644 index 71e1af5c6..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.8_T2.5.js +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.8_T2.5; - * @section: 11.13.2, 11.7.3; - * @assertion: The production x >>>= y is the same as x = x >>> y; - * @description: Type(x) is different from Type(y) and both types vary between String (primitive or object) and Boolean (primitive and object); -*/ - -//CHECK#1 -x = true; -x >>>= "1"; -if (x !== 0) { - $ERROR('#1: x = true; x >>>= "1"; x === 0. Actual: ' + (x)); -} - -//CHECK#2 -x = "1"; -x >>>= true; -if (x !== 0) { - $ERROR('#2: x = "1"; x >>>= true; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = new Boolean(true); -x >>>= "1"; -if (x !== 0) { - $ERROR('#3: x = new Boolean(true); x >>>= "1"; x === 0. Actual: ' + (x)); -} - -//CHECK#4 -x = "1"; -x >>>= new Boolean(true); -if (x !== 0) { - $ERROR('#4: x = "1"; x >>>= new Boolean(true); x === 0. Actual: ' + (x)); -} - -//CHECK#5 -x = true; -x >>>= new String("1"); -if (x !== 0) { - $ERROR('#5: x = true; x >>>= new String("1"); x === 0. Actual: ' + (x)); -} - -//CHECK#6 -x = new String("1"); -x >>>= true; -if (x !== 0) { - $ERROR('#6: x = new String("1"); x >>>= true; x === 0. Actual: ' + (x)); -} - -//CHECK#7 -x = new Boolean(true); -x >>>= new String("1"); -if (x !== 0) { - $ERROR('#7: x = new Boolean(true); x >>>= new String("1"); x === 0. Actual: ' + (x)); -} - -//CHECK#8 -x = new String("1"); -x >>>= new Boolean(true); -if (x !== 0) { - $ERROR('#8: x = new String("1"); x >>>= new Boolean(true); x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.8_T2.6.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.8_T2.6.js deleted file mode 100644 index 6517c4946..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.8_T2.6.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.8_T2.6; - * @section: 11.13.2, 11.7.3; - * @assertion: The production x >>>= y is the same as x = x >>> y; - * @description: Type(x) is different from Type(y) and both types vary between String (primitive or object) and Undefined; - */ - -//CHECK#1 -x = "1"; -x >>>= undefined; -if (x !== 1) { - $ERROR('#1: x = "1"; x >>>= undefined; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -x = undefined; -x >>>= "1"; -if (x !== 0) { - $ERROR('#2: x = undefined; x >>>= "1"; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = new String("1"); -x >>>= undefined; -if (x !== 1) { - $ERROR('#3: x = new String("1"); x >>>= undefined; x === 1. Actual: ' + (x)); -} - -//CHECK#4 -x = undefined; -x >>>= new String("1"); -if (x !== 0) { - $ERROR('#4: x = undefined; x >>>= new String("1"); x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.8_T2.7.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.8_T2.7.js deleted file mode 100644 index f836c0ced..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.8_T2.7.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.8_T2.7; - * @section: 11.13.2, 11.7.3; - * @assertion: The production x >>>= y is the same as x = x >>> y; - * @description: Type(x) is different from Type(y) and both types vary between String (primitive or object) and Null; - */ - -//CHECK#1 -x = "1"; -x >>>= null; -if (x !== 1) { - $ERROR('#1: x = "1"; x >>>= null; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -x = null; -x >>>= "1"; -if (x !== 0) { - $ERROR('#2: x = null; x >>>= "1"; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = new String("1"); -x >>>= null; -if (x !== 1) { - $ERROR('#3: x = new String("1"); x >>>= null; x === 1. Actual: ' + (x)); -} - -//CHECK#4 -x = null; -x >>>= new String("1"); -if (x !== 0) { - $ERROR('#4: x = null; x >>>= new String("1"); x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.8_T2.8.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.8_T2.8.js deleted file mode 100644 index 98835168b..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.8_T2.8.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.8_T2.8; - * @section: 11.13.2, 11.7.3; - * @assertion: The production x >>>= y is the same as x = x >>> y; - * @description: Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Undefined; - */ - -//CHECK#1 -x = true; -x >>>= undefined; -if (x !== 1) { - $ERROR('#1: x = true; x >>>= undefined; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -x = undefined; -x >>>= true; -if (x !== 0) { - $ERROR('#2: x = undefined; x >>>= true; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = new Boolean(true); -x >>>= undefined; -if (x !== 1) { - $ERROR('#3: x = new Boolean(true); x >>>= undefined; x === 1. Actual: ' + (x)); -} - -//CHECK#4 -x = undefined; -x >>>= new Boolean(true); -if (x !== 0) { - $ERROR('#4: x = undefined; x >>>= new Boolean(true); x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.8_T2.9.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.8_T2.9.js deleted file mode 100644 index 55b42c8c5..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.8_T2.9.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.8_T2.9; - * @section: 11.13.2, 11.7.3; - * @assertion: The production x >>>= y is the same as x = x >>> y; - * @description: Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Null; - */ - -//CHECK#1 -x = true; -x >>>= null; -if (x !== 1) { - $ERROR('#1: x = true; x >>>= null; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -x = null; -x >>>= true; -if (x !== 0) { - $ERROR('#2: x = null; x >>>= true; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = new Boolean(true); -x >>>= null; -if (x !== 1) { - $ERROR('#3: x = new Boolean(true); x >>>= null; x === 1. Actual: ' + (x)); -} - -//CHECK#4 -x = null; -x >>>= new Boolean(true); -if (x !== 0) { - $ERROR('#4: x = null; x >>>= new Boolean(true); x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.9_T1.1.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.9_T1.1.js deleted file mode 100644 index dd8f529e4..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.9_T1.1.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.9_T1.1; - * @section: 11.13.2, 11.10.1; - * @assertion: The production x &= y is the same as x = x & y; - * @description: Type(x) and Type(y) vary between primitive boolean and Boolean object; - */ - -//CHECK#1 -x = true; -x &= true; -if (x !== 1) { - $ERROR('#1: x = true; x &= true; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -x = new Boolean(true); -x &= true; -if (x !== 1) { - $ERROR('#2: x = new Boolean(true); x &= true; x === 1. Actual: ' + (x)); -} - -//CHECK#3 -x = true; -x &= new Boolean(true); -if (x !== 1) { - $ERROR('#3: x = true; x &= new Boolean(true); x === 1. Actual: ' + (x)); -} - -//CHECK#4 -x = new Boolean(true); -x &= new Boolean(true); -if (x !== 1) { - $ERROR('#4: x = new Boolean(true); x &= new Boolean(true); x === 1. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.9_T1.2.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.9_T1.2.js deleted file mode 100644 index 5074747ba..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.9_T1.2.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.9_T1.2; - * @section: 11.13.2, 11.10.1; - * @assertion: The production x &= y is the same as x = x & y; - * @description: Type(x) and Type(y) vary between primitive number and Number object; -*/ - -//CHECK#1 -x = 1; -x &= 1; -if (x !== 1) { - $ERROR('#1: x = 1; x &= 1; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -x = new Number(1); -x &= 1; -if (x !== 1) { - $ERROR('#2: x = new Number(1); x &= 1; x === 1. Actual: ' + (x)); -} - -//CHECK#3 -x = 1; -x &= new Number(1); -if (x !== 1) { - $ERROR('#3: x = 1; x &= new Number(1); x === 1. Actual: ' + (x)); -} - -//CHECK#4 -x = new Number(1); -x &= new Number(1); -if (x !== 1) { - $ERROR('#4: x = new Number(1); x &= new Number(1); x === 1. Actual: ' + (x)); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.9_T1.3.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.9_T1.3.js deleted file mode 100644 index e411f1844..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.9_T1.3.js +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.9_T1.3; - * @section: 11.13.2, 11.10.1; - * @assertion: The production x &= y is the same as x = x & y; - * @description: Type(x) and Type(y) vary between primitive string and String object; -*/ - -//CHECK#1 -x = "1"; -x &= "1"; -if (x !== 1) { - $ERROR('#1: x = "1"; x &= "1"; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -x = new String("1"); -x &= "1"; -if (x !== 1) { - $ERROR('#2: x = new String("1"); x &= "1"; x === 1. Actual: ' + (x)); -} - -//CHECK#3 -x = "1"; -x &= new String("1"); -if (x !== 1) { - $ERROR('#3: x = "1"; x &= new String("1"); x === 1. Actual: ' + (x)); -} - -//CHECK#4 -x = new String("1"); -x &= new String("1"); -if (x !== 1) { - $ERROR('#4: x = new String("1"); x &= new String("1"); x === 1. Actual: ' + (x)); -} - -//CHECK#5 -x = "x"; -x &= "1"; -if (x !== 0) { - $ERROR('#5: x = "x"; x &= "1"; x === 0. Actual: ' + (x)); -} - -//CHECK#6 -x = "1"; -x &= "x"; -if (x !== 0) { - $ERROR('#6: x = "1"; x &= "x"; x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.9_T1.4.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.9_T1.4.js deleted file mode 100644 index 803652d95..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.9_T1.4.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.9_T1.4; - * @section: 11.13.2, 11.10.1; - * @assertion: The production x &= y is the same as x = x & y; - * @description: Type(x) and Type(y) vary between Null and Undefined; -*/ - -//CHECK#1 -x = null; -x &= undefined; -if (x !== 0) { - $ERROR('#1: x = null; x &= undefined; x === 0. Actual: ' + (x)); -} - -//CHECK#2 -x = undefined; -x &= null; -if (x !== 0) { - $ERROR('#2: x = undefined; x &= null; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = undefined; -x &= undefined; -if (x !== 0) { - $ERROR('#3: x = undefined; x &= undefined; x === 0. Actual: ' + (x)); -} - -//CHECK#4 -x = null; -x &= null; -if (x !== 0) { - $ERROR('#4: x = null; x &= null; x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.9_T2.1.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.9_T2.1.js deleted file mode 100644 index 8ebad51d4..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.9_T2.1.js +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.9_T2.1; - * @section: 11.13.2, 11.10.1; - * @assertion: The production x &= y is the same as x = x & y; - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Boolean (primitive and object); - */ - -//CHECK#1 -x = true; -x &= 1; -if (x !== 1) { - $ERROR('#1: x = true; x &= 1; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -x = 1; -x &= true; -if (x !== 1) { - $ERROR('#2: x = 1; x &= true; x === 1. Actual: ' + (x)); -} - -//CHECK#3 -x = new Boolean(true); -x &= 1; -if (x !== 1) { - $ERROR('#3: x = new Boolean(true); x &= 1; x === 1. Actual: ' + (x)); -} - -//CHECK#4 -x = 1; -x &= new Boolean(true); -if (x !== 1) { - $ERROR('#4: x = 1; x &= new Boolean(true); x === 1. Actual: ' + (x)); -} - -//CHECK#5 -x = true; -x &= new Number(1); -if (x !== 1) { - $ERROR('#5: x = true; x &= new Number(1); x === 1. Actual: ' + (x)); -} - -//CHECK#6 -x = new Number(1); -x &= true; -if (x !== 1) { - $ERROR('#6: x = new Number(1); x &= true; x === 1. Actual: ' + (x)); -} - -//CHECK#7 -x = new Boolean(true); -x &= new Number(1); -if (x !== 1) { - $ERROR('#7: x = new Boolean(true); x &= new Number(1); x === 1. Actual: ' + (x)); -} - -//CHECK#8 -x = new Number(1); -x &= new Boolean(true); -if (x !== 1) { - $ERROR('#8: x = new Number(1); x &= new Boolean(true); x === 1. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.9_T2.2.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.9_T2.2.js deleted file mode 100644 index 4015289ea..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.9_T2.2.js +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.9_T2.2; - * @section: 11.13.2, 11.10.1; - * @assertion: The production x &= y is the same as x = x & y; - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and String (primitive and object); -*/ - -//CHECK#1 -x = "1"; -x &= 1; -if (x !== 1) { - $ERROR('#1: x = "1"; x &= 1; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -x = 1; -x &= "1"; -if (x !== 1) { - $ERROR('#2: x = 1; x &= "1"; x === 1. Actual: ' + (x)); -} - -//CHECK#3 -x = new String("1"); -x &= 1; -if (x !== 1) { - $ERROR('#3: x = new String("1"); x &= 1; x === 1. Actual: ' + (x)); -} - -//CHECK#4 -x = 1; -x &= new String("1"); -if (x !== 1) { - $ERROR('#4: x = 1; x &= new String("1"); x === 1. Actual: ' + (x)); -} - -//CHECK#5 -x = "1"; -x &= new Number(1); -if (x !== 1) { - $ERROR('#5: x = "1"; x &= new Number(1); x === 1. Actual: ' + (x)); -} - -//CHECK#6 -x = new Number(1); -x &= "1"; -if (x !== 1) { - $ERROR('#6: x = new Number(1); x &= "1"; x === 1. Actual: ' + (x)); -} - -//CHECK#7 -x = new String("1"); -x &= new Number(1); -if (x !== 1) { - $ERROR('#7: x = new String("1"); x &= new Number(1); x === 1. Actual: ' + (x)); -} - -//CHECK#8 -x = new Number(1); -x &= new String("1"); -if (x !== 1) { - $ERROR('#8: x = new Number(1); x &= new String("1"); x === 1. Actual: ' + (x)); -} - -//CHECK#9 -x = "x"; -x &= 1; -if (x !== 0) { - $ERROR('#9: x = "x"; x &= 1; x === 0. Actual: ' + (x)); -} - -//CHECK#10 -x = 1; -x &= "x"; -if (x !== 0) { - $ERROR('#10: x = 1; x &= "x"; x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.9_T2.3.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.9_T2.3.js deleted file mode 100644 index c5ee9f246..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.9_T2.3.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.9_T2.3; - * @section: 11.13.2, 11.10.1; - * @assertion: The production x &= y is the same as x = x & y; - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Null; - */ - -//CHECK#1 -x = 1; -x &= null; -if (x !== 0) { - $ERROR('#1: x = 1; x &= null; x === 0. Actual: ' + (x)); -} - -//CHECK#2 -x = null; -x &= 1; -if (x !== 0) { - $ERROR('#2: x = null; x &= 1; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = new Number(1); -x &= null; -if (x !== 0) { - $ERROR('#3: x = new Number(1); x &= null; x === 0. Actual: ' + (x)); -} - -//CHECK#4 -x = null; -x &= new Number(1); -if (x !== 0) { - $ERROR('#4: x = null; x &= new Number(1); x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.9_T2.4.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.9_T2.4.js deleted file mode 100644 index f56b75fe8..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.9_T2.4.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.9_T2.4; - * @section: 11.13.2, 11.10.1; - * @assertion: The production x &= y is the same as x = x & y; - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Undefined; - */ - -//CHECK#1 -x = 1; -x &= undefined; -if (x !== 0) { - $ERROR('#1: x = 1; x &= undefined; x === 0. Actual: ' + (x)); -} - -//CHECK#2 -x = undefined; -x &= 1; -if (x !== 0) { - $ERROR('#2: x = undefined; x &= 1; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = new Number(1); -x &= undefined; -if (x !== 0) { - $ERROR('#3: x = new Number(1); x &= undefined; x === 0. Actual: ' + (x)); -} - -//CHECK#4 -x = undefined; -x &= new Number(1); -if (x !== 0) { - $ERROR('#4: x = undefined; x &= new Number(1); x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.9_T2.5.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.9_T2.5.js deleted file mode 100644 index 15df5e80a..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.9_T2.5.js +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.9_T2.5; - * @section: 11.13.2, 11.10.1; - * @assertion: The production x &= y is the same as x = x & y; - * @description: Type(x) is different from Type(y) and both types vary between String (primitive or object) and Boolean (primitive and object); -*/ - -//CHECK#1 -x = true; -x &= "1"; -if (x !== 1) { - $ERROR('#1: x = true; x &= "1"; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -x = "1"; -x &= true; -if (x !== 1) { - $ERROR('#2: x = "1"; x &= true; x === 1. Actual: ' + (x)); -} - -//CHECK#3 -x = new Boolean(true); -x &= "1"; -if (x !== 1) { - $ERROR('#3: x = new Boolean(true); x &= "1"; x === 1. Actual: ' + (x)); -} - -//CHECK#4 -x = "1"; -x &= new Boolean(true); -if (x !== 1) { - $ERROR('#4: x = "1"; x &= new Boolean(true); x === 1. Actual: ' + (x)); -} - -//CHECK#5 -x = true; -x &= new String("1"); -if (x !== 1) { - $ERROR('#5: x = true; x &= new String("1"); x === 1. Actual: ' + (x)); -} - -//CHECK#6 -x = new String("1"); -x &= true; -if (x !== 1) { - $ERROR('#6: x = new String("1"); x &= true; x === 1. Actual: ' + (x)); -} - -//CHECK#7 -x = new Boolean(true); -x &= new String("1"); -if (x !== 1) { - $ERROR('#7: x = new Boolean(true); x &= new String("1"); x === 1. Actual: ' + (x)); -} - -//CHECK#8 -x = new String("1"); -x &= new Boolean(true); -if (x !== 1) { - $ERROR('#8: x = new String("1"); x &= new Boolean(true); x === 1. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.9_T2.6.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.9_T2.6.js deleted file mode 100644 index 7f0651882..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.9_T2.6.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.9_T2.6; - * @section: 11.13.2, 11.10.1; - * @assertion: The production x &= y is the same as x = x & y; - * @description: Type(x) is different from Type(y) and both types vary between String (primitive or object) and Undefined; - */ - -//CHECK#1 -x = "1"; -x &= undefined; -if (x !== 0) { - $ERROR('#1: x = "1"; x &= undefined; x === 0. Actual: ' + (x)); -} - -//CHECK#2 -x = undefined; -x &= "1"; -if (x !== 0) { - $ERROR('#2: x = undefined; x &= "1"; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = new String("1"); -x &= undefined; -if (x !== 0) { - $ERROR('#3: x = new String("1"); x &= undefined; x === 0. Actual: ' + (x)); -} - -//CHECK#4 -x = undefined; -x &= new String("1"); -if (x !== 0) { - $ERROR('#4: x = undefined; x &= new String("1"); x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.9_T2.7.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.9_T2.7.js deleted file mode 100644 index 21e1587a0..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.9_T2.7.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.9_T2.7; - * @section: 11.13.2, 11.10.1; - * @assertion: The production x &= y is the same as x = x & y; - * @description: Type(x) is different from Type(y) and both types vary between String (primitive or object) and Null; - */ - -//CHECK#1 -x = "1"; -x &= null; -if (x !== 0) { - $ERROR('#1: x = "1"; x &= null; x === 0. Actual: ' + (x)); -} - -//CHECK#2 -x = null; -x &= "1"; -if (x !== 0) { - $ERROR('#2: x = null; x &= "1"; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = new String("1"); -x &= null; -if (x !== 0) { - $ERROR('#3: x = new String("1"); x &= null; x === 0. Actual: ' + (x)); -} - -//CHECK#4 -x = null; -x &= new String("1"); -if (x !== 0) { - $ERROR('#4: x = null; x &= new String("1"); x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.9_T2.8.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.9_T2.8.js deleted file mode 100644 index 44eec8102..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.9_T2.8.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.9_T2.8; - * @section: 11.13.2, 11.10.1; - * @assertion: The production x &= y is the same as x = x & y; - * @description: Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Undefined; - */ - -//CHECK#1 -x = true; -x &= undefined; -if (x !== 0) { - $ERROR('#1: x = true; x &= undefined; x === 0. Actual: ' + (x)); -} - -//CHECK#2 -x = undefined; -x &= true; -if (x !== 0) { - $ERROR('#2: x = undefined; x &= true; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = new Boolean(true); -x &= undefined; -if (x !== 0) { - $ERROR('#3: x = new Boolean(true); x &= undefined; x === 0. Actual: ' + (x)); -} - -//CHECK#4 -x = undefined; -x &= new Boolean(true); -if (x !== 0) { - $ERROR('#4: x = undefined; x &= new Boolean(true); x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.9_T2.9.js b/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.9_T2.9.js deleted file mode 100644 index c02b8361a..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.13_Assignment_Operators/11.13.2_Compound_Assignment/S11.13.2_A4.9_T2.9.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_A4.9_T2.9; - * @section: 11.13.2, 11.10.1; - * @assertion: The production x &= y is the same as x = x & y; - * @description: Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Null; - */ - -//CHECK#1 -x = true; -x &= null; -if (x !== 0) { - $ERROR('#1: x = true; x &= null; x === 0. Actual: ' + (x)); -} - -//CHECK#2 -x = null; -x &= true; -if (x !== 0) { - $ERROR('#2: x = null; x &= true; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -x = new Boolean(true); -x &= null; -if (x !== 0) { - $ERROR('#3: x = new Boolean(true); x &= null; x === 0. Actual: ' + (x)); -} - -//CHECK#4 -x = null; -x &= new Boolean(true); -if (x !== 0) { - $ERROR('#4: x = null; x &= new Boolean(true); x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.14_Comma_Operator/S11.14_A1.js b/tests/ES3/Conformance/11_Expressions/11.14_Comma_Operator/S11.14_A1.js deleted file mode 100644 index 5ff5156fb..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.14_Comma_Operator/S11.14_A1.js +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.14_A1; -* @section: 11.14; -* @assertion: White Space and Line Terminator between Expression and , or between , and AssignmentExpression are allowed; -* @description: Checking by using eval; -*/ - -//CHECK#1 -if ((eval("false\u0009,\u0009true")) !== true) { - $ERROR('#1: (false\\u0009,\\u0009true) === true'); -} - -//CHECK#2 -if ((eval("false\u000B,\u000Btrue")) !== true) { - $ERROR('#2: (false\\u000B,\\u000Btrue) === true'); -} - -//CHECK#3 -if ((eval("false\u000C,\u000Ctrue")) !== true) { - $ERROR('#3: (false\\u000C,\\u000Ctrue) === true'); -} - -//CHECK#4 -if ((eval("false\u0020,\u0020true")) !== true) { - $ERROR('#4: (false\\u0020,\\u0020true) === true'); -} - -//CHECK#5 -if ((eval("false\u00A0,\u00A0true")) !== true) { - $ERROR('#5: (false\\u00A0,\\u00A0true) === true'); -} - -//CHECK#6 -if ((eval("false\u000A,\u000Atrue")) !== true) { - $ERROR('#6: (false\\u000A,\\u000Atrue) === true'); -} - -//CHECK#7 -if ((eval("false\u000D,\u000Dtrue")) !== true) { - $ERROR('#7: (false\\u000D,\\u000Dtrue) === true'); -} - -//CHECK#8 -if ((eval("false\u2028,\u2028true")) !== true) { - $ERROR('#8: (false\\u2028,\\u2028true) === true'); -} - -//CHECK#9 -if ((eval("false\u2029,\u2029true")) !== true) { - $ERROR('#9: (false\\u2029,\\u2029true) === true'); -} - - -//CHECK#10 -if ((eval("false\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029,\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029true")) !== true) { - $ERROR('#10: (false\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029,\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029true) === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.14_Comma_Operator/S11.14_A2.1_T1.js b/tests/ES3/Conformance/11_Expressions/11.14_Comma_Operator/S11.14_A2.1_T1.js deleted file mode 100644 index 604a35ff4..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.14_Comma_Operator/S11.14_A2.1_T1.js +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.14_A2.1_T1; - * @section: 11.14; - * @assertion: Operator uses GetValue; - * @description: Either Expression is not Reference or GetBase is not null; -*/ - -//CHECK#1 -if ((1,2) !== 2) { - $ERROR('#1: (1,2) === 2. Actual: ' + ((1,2))); -} - -//CHECK#2 -var x = 1; -if ((x, 2) !== 2) { - $ERROR('#2: var x = 1; (x, 2) === 2. Actual: ' + ((x, 2))); -} - -//CHECK#3 -var y = 2; -if ((1, y) !== 2) { - $ERROR('#3: var y = 2; (1, y) === 2. Actual: ' + ((1, y))); -} - -//CHECK#4 -var x = 1; -var y = 2; -if ((x, y) !== 2) { - $ERROR('#4: var x = 1; var y = 2; (x, y) === 2. Actual: ' + ((x, y))); -} - -//CHECK#5 -var x = 1; -if ((x, x) !== 1) { - $ERROR('#5: var x = 1; (x, x) === 1. Actual: ' + ((x, x))); -} - -//CHECK#6 -var objectx = new Object(); -var objecty = new Object(); -objectx.prop = true; -objecty.prop = 1.1; -if ((objectx.prop = false, objecty.prop) !== objecty.prop) { - $ERROR('#6: var objectx = new Object(); var objecty = new Object(); objectx.prop = true; objecty.prop = 1; (objectx.prop = false, objecty.prop) === objecty.prop. Actual: ' + ((objectx.prop = false, objecty.prop))); -} else { - if (objectx.prop !== false) { - $ERROR('#6: var objectx = new Object(); var objecty = new Object(); objectx.prop = true; objecty.prop = 1; objectx.prop = false, objecty.prop; objectx.prop === false'); - } -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.14_Comma_Operator/S11.14_A2.1_T2.js b/tests/ES3/Conformance/11_Expressions/11.14_Comma_Operator/S11.14_A2.1_T2.js deleted file mode 100644 index 20e8e187d..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.14_Comma_Operator/S11.14_A2.1_T2.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.14_A2.1_T2; -* @section: 11.14; -* @assertion: Operator uses GetValue; -* @description: If GetBase(Expression) is null, throw ReferenceError; -*/ - -//CHECK#1 -try { - x, 1; - $ERROR('#1.1: x, 1 throw ReferenceError. Actual: ' + (x, 1)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: x, 1 throw ReferenceError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.14_Comma_Operator/S11.14_A2.1_T3.js b/tests/ES3/Conformance/11_Expressions/11.14_Comma_Operator/S11.14_A2.1_T3.js deleted file mode 100644 index dc095e058..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.14_Comma_Operator/S11.14_A2.1_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.14_A2.1_T3; -* @section: 11.14; -* @assertion: Operator uses GetValue; -* @description: If GetBase(AssigmentExpression) is null, throw ReferenceError; -*/ - -//CHECK#1 -try { - 1, y; - $ERROR('#1.1: 1, y throw ReferenceError. Actual: ' + (1, y)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: 1, y throw ReferenceError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.14_Comma_Operator/S11.14_A3.js b/tests/ES3/Conformance/11_Expressions/11.14_Comma_Operator/S11.14_A3.js deleted file mode 100644 index 6d4a53ea4..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.14_Comma_Operator/S11.14_A3.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.14_A3; -* @section: 11.14; -* @assertion: Comma Operator evaluates all Expressions and returns the last of them; -* @description: Checking with "="; -*/ - -//CHECK#1 -var x = 0; -var y = 0; -var z = 0; -if ((x = 1, y = 2, z = 3) !== 3) { - $ERROR('#1: var x = 0; var y = 0; var z = 0; (x = 1, y = 2, z = 3) === 3. Actual: ' + ((x = 1, y = 2, z = 3))); -} - -var x = 0; -var y = 0; -var z = 0; -x = 1, y = 2, z = 3; - -//CHECK#2 -if (x !== 1) { - $ERROR('#2: var x = 0; var y = 0; var z = 0; x = 1, y = 2, z = 3; x === 1. Actual: ' + (x)); -} - -//CHECK#3 -if (y !== 2) { - $ERROR('#3: var x = 0; var y = 0; var z = 0; x = 1, y = 2, z = 3; y === 2. Actual: ' + (y)); -} - -//CHECK#4 -if (z !== 3) { - $ERROR('#4: var x = 0; var y = 0; var z = 0; x = 1, y = 2, z = 3; z === 3. Actual: ' + (z)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.1_The_this_Keyword/S11.1.1_A1.js b/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.1_The_this_Keyword/S11.1.1_A1.js deleted file mode 100644 index dc790988f..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.1_The_this_Keyword/S11.1.1_A1.js +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.1.1_A1; - * @section: 11.1.1; - * @assertion: The "this" is reserved word; - * @description: Checking if execution of "this=1" fails; - * @negative -*/ - -this = 1; diff --git a/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.1_The_this_Keyword/S11.1.1_A2.js b/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.1_The_this_Keyword/S11.1.1_A2.js deleted file mode 100644 index 0b8c7854d..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.1_The_this_Keyword/S11.1.1_A2.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.1.1_A2; - * @section: 11.1.1; - * @assertion: Being in global code, "this" and "eval("this")" return the global object; - * @description: Checking if execution of "this" and eval("this"), which are in global code, return the global object by using toString function; -*/ - -//CHECK#1 -if (this.toString() !== toString()) { - $ERROR('#1: this.toString() === toString(). Actual: ' + (this.toString())); -} - -//CHECK#2 -if (eval("this").toString() !== toString()) { - $ERROR('#2: eval("this").toString() === toString(). Actual: ' + (this.toString())); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.1_The_this_Keyword/S11.1.1_A3.1.js b/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.1_The_this_Keyword/S11.1.1_A3.1.js deleted file mode 100644 index 55b81eedc..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.1_The_this_Keyword/S11.1.1_A3.1.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.1.1_A3.1; - * @section: 11.1.1; - * @assertion: Being in function code, "this" and eval("this"), called as a functions, return the global object; - * @description: Creating function which returns "this" or eval("this"); -*/ - -//CHECK#1 -function MyFunction() {return this} -if (MyFunction() !== this) { - $ERROR('#1: function MyFunction() {return this} MyFunction() === this. Actual: ' + (MyFunction())); -} - -//CHECK#2 -function MyFunction() {return eval("this")} -if (MyFunction() !== this) { - $ERROR('#2: function MyFunction() {return eval("this")} MyFunction() === this. Actual: ' + (MyFunction())); -} - - diff --git a/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.1_The_this_Keyword/S11.1.1_A3.2.js b/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.1_The_this_Keyword/S11.1.1_A3.2.js deleted file mode 100644 index 888489b24..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.1_The_this_Keyword/S11.1.1_A3.2.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.1.1_A3.2; - * @section: 11.1.1; - * @assertion: Being in function code, "this" and eval("this"), called as a constructors, return the object; - * @description: Create function. It have property, that returned "this"; -*/ - -//CHECK#1 -function MyFunction() {this.THIS = this} -if ((new MyFunction()).THIS.toString() !== "[object Object]") { - $ERROR('#1: function MyFunction() {this.THIS = this} (new MyFunction()).THIS.toString() !== "[object Object]". Actual: ' + ((new MyFunction()).THIS.toString())); -} - -//CHECK#2 -function MyFunction() {this.THIS = eval("this")} -if ((new MyFunction()).THIS.toString() !== "[object Object]") { - $ERROR('#2: function MyFunction() {this.THIS = eval("this")} (new MyFunction()).THIS.toString() !== "[object Object]". Actual: ' + ((new MyFunction()).THIS.toString())); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.1_The_this_Keyword/S11.1.1_A4.1.js b/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.1_The_this_Keyword/S11.1.1_A4.1.js deleted file mode 100644 index b393237f6..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.1_The_this_Keyword/S11.1.1_A4.1.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.1.1_A4.1; - * @section: 11.1.1; - * @assertion: Being in anonymous code, "this" and eval("this"), called as a function, return the global object; - * @description: Creating function with new Function() constructor; -*/ - -//CHECK#1 -var MyFunction = new Function("return this"); -if (MyFunction() !== this) { - $ERROR('#1: var MyFunction = new Function("return this"); MyFunction() === this. Actual: ' + (MyFunction())); -} - -//CHECK#2 -var MyFunction = new Function("return eval(\'this\')"); -if (MyFunction() !== this) { - $ERROR('#2: var MyFunction = new Function("return eval(\'this\')"); MyFunction() === this. Actual: ' + (MyFunction())); -} - - diff --git a/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.1_The_this_Keyword/S11.1.1_A4.2.js b/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.1_The_this_Keyword/S11.1.1_A4.2.js deleted file mode 100644 index ddf3f81f6..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.1_The_this_Keyword/S11.1.1_A4.2.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.1.1_A4.2; - * @section: 11.1.1; - * @assertion: Being in anonymous code, "this" and eval("this"), called as a constructor, return the object; - * @description: Creating function by using new Function() constructor. It has the property, which returns "this"; -*/ - -//CHECK#1 -var MyFunction = new Function("this.THIS = this"); -var MyObject = new MyFunction(); -if (MyObject.THIS.toString() !== "[object Object]") { - $ERROR('#1: var MyFunction = new Function("this.THIS = this"); var MyObject = new MyFunction(); MyObject.THIS.toString() === "[object Object]". Actual: ' + (MyObject.THIS.toString())); -} - -//CHECK#2 -var MyFunction = new Function("this.THIS = eval(\'this\')"); -var MyObject = new MyFunction(); -if (MyObject.THIS.toString() !== "[object Object]") { - $ERROR('#2: var MyFunction = new Function("this.THIS = eval(\'this\')"); var MyObject = new MyFunction(); MyObject.THIS.toString() === "[object Object]". Actual: ' + (MyObject.THIS.toString())); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.2_Identifier_Reference/S11.1.2_A1_T1.js b/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.2_Identifier_Reference/S11.1.2_A1_T1.js deleted file mode 100644 index 259601464..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.2_Identifier_Reference/S11.1.2_A1_T1.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.1.2_A1_T1; - * @section: 11.1.2; - * @assertion: The result of evaluating an Identifier is always a value of type Reference; - * @description: Creating variables without defining it; -*/ - -//CHECK#1 -if (this.x !== undefined) { - $ERROR('#1: this.x === undefined. Actual: ' + (this.x)); -} - -//CHECK#2 -var object = new Object(); -if (object.prop !== undefined) { - $ERROR('#2: var object = new Object(); object.prop === undefined. Actual: ' + (object.prop)); -} - -//CHECK#3 -this.y++; -if (isNaN(y) !== true) { - $ERROR('#3: this.y++; y === Not-a-Number. Actual: ' + (y)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.2_Identifier_Reference/S11.1.2_A1_T2.js b/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.2_Identifier_Reference/S11.1.2_A1_T2.js deleted file mode 100644 index e64114330..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.2_Identifier_Reference/S11.1.2_A1_T2.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.1.2_A1_T2; - * @section: 11.1.2; - * @assertion: The result of evaluating an Identifier is always a value of type Reference; - * @description: Trying to generate ReferenceError; -*/ - -//CHECK#1 -try { - this.z; - z; - $ERROR('#1.1: this.z; z === undefined throw ReferenceError. Actual: ' + (z)); -} catch(e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: this.z; z === undefined throw ReferenceError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.4_Array_Initialiser/S11.1.4_A1.1.js b/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.4_Array_Initialiser/S11.1.4_A1.1.js deleted file mode 100644 index 1dee93826..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.4_Array_Initialiser/S11.1.4_A1.1.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.1.4_A1.1; -* @section: 11.1.4; -* @assertion: Evaluate the production ArrayLiteral: [ ]; -* @description: Checking various properties of the array defined with expression "var array = []"; -*/ - -var array = []; - -//CHECK#1 -if (typeof array !== "object") { - $ERROR('#1: var array = []; typeof array === "object". Actual: ' + (typeof array)); -} - -//CHECK#2 -if (array instanceof Array !== true) { - $ERROR('#2: var array = []; array instanceof Array === true'); -} - -//CHECK#3 -if (array.toString !== Array.prototype.toString) { - $ERROR('#3: var array = []; array.toString === Array.prototype.toString. Actual: ' + (array.toString)); -} - -//CHECK#4 -if (array.length !== 0) { - $ERROR('#4: var array = []; array.length === 0. Actual: ' + (array.length)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.4_Array_Initialiser/S11.1.4_A1.2.js b/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.4_Array_Initialiser/S11.1.4_A1.2.js deleted file mode 100644 index 5fe58b33f..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.4_Array_Initialiser/S11.1.4_A1.2.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.1.4_A1.2; -* @section: 11.1.4; -* @assertion: Evaluate the production ArrayLiteral: [ Elision ]; -* @description: Checking various properties the array defined with "var array = [,,,,,]"; -*/ - -var array = [,,,,,]; - -//CHECK#1 -if (typeof array !== "object") { - $ERROR('#1: var array = [,,,,,]; typeof array === "object". Actual: ' + (typeof array)); -} - -//CHECK#2 -if (array instanceof Array !== true) { - $ERROR('#2: var array = [,,,,,]; array instanceof Array === true'); -} - -//CHECK#3 -if (array.toString !== Array.prototype.toString) { - $ERROR('#3: var array = [,,,,,]; array.toString === Array.prototype.toString. Actual: ' + (array.toString)); -} - -//CHECK#4 -if (array.length !== 5) { - $ERROR('#4: var array = [,,,,,]; array.length === 5. Actual: ' + (array.length)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.4_Array_Initialiser/S11.1.4_A1.3.js b/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.4_Array_Initialiser/S11.1.4_A1.3.js deleted file mode 100644 index 6f85eaac1..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.4_Array_Initialiser/S11.1.4_A1.3.js +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.1.4_A1.3; -* @section: 11.1.4; -* @assertion: Evaluate the production ArrayLiteral: [ AssignmentExpression ]; -* @description: Checking various properteis and contents of the array defined with "var array = [1,2,3,4,5]"; -*/ - -var array = [1,2,3,4,5]; - -//CHECK#1 -if (typeof array !== "object") { - $ERROR('#1: var array = [1,2,3,4,5]; typeof array === "object". Actual: ' + (typeof array)); -} - -//CHECK#2 -if (array instanceof Array !== true) { - $ERROR('#2: var array = [1,2,3,4,5]; array instanceof Array === true'); -} - -//CHECK#3 -if (array.toString !== Array.prototype.toString) { - $ERROR('#3: var array = [1,2,3,4,5]; array.toString === Array.prototype.toString. Actual: ' + (array.toString)); -} - -//CHECK#4 -if (array.length !== 5) { - $ERROR('#4: var array = [1,2,3,4,5]; array.length === 5. Actual: ' + (array.length)); -} - -//CHECK#5 -if (array[0] !== 1) { - $ERROR('#5: var array = [1,2,3,4,5]; array[0] === 1. Actual: ' + (array[0])); -} - -//CHECK#6 -if (array[1] !== 2) { - $ERROR('#6: var array = [1,2,3,4,5]; array[1] === 2. Actual: ' + (array[1])); -} - -//CHECK#7 -if (array[2] !== 3) { - $ERROR('#7: var array = [1,2,3,4,5]; array[2] === 3. Actual: ' + (array[2])); -} - -//CHECK#8 -if (array[3] !== 4) { - $ERROR('#8: var array = [1,2,3,4,5]; array[3] === 4. Actual: ' + (array[3])); -} - -//CHECK#9 -if (array[4] !== 5) { - $ERROR('#9: var array = [1,2,3,4,5]; array[4] === 5. Actual: ' + (array[4])); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.4_Array_Initialiser/S11.1.4_A1.4.js b/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.4_Array_Initialiser/S11.1.4_A1.4.js deleted file mode 100644 index bad33531c..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.4_Array_Initialiser/S11.1.4_A1.4.js +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.1.4_A1.4; -* @section: 11.1.4; -* @assertion: Evaluate the production ArrayLiteral: [ Elision, AssignmentExpression ]; -* @description: Checking various properteis and content of the array defined with "var array = [,,,1,2]"; -*/ - -var array = [,,,1,2]; - -//CHECK#1 -if (typeof array !== "object") { - $ERROR('#1: var array = [,,,1,2]; typeof array === "object". Actual: ' + (typeof array)); -} - -//CHECK#2 -if (array instanceof Array !== true) { - $ERROR('#2: var array = [,,,1,2]; array instanceof Array === true'); -} - -//CHECK#3 -if (array.toString !== Array.prototype.toString) { - $ERROR('#3: var array = [,,,1,2]; array.toString === Array.prototype.toString. Actual: ' + (array.toString)); -} - -//CHECK#4 -if (array.length !== 5) { - $ERROR('#4: var array = [,,,1,2]; array.length === 5. Actual: ' + (array.length)); -} - -//CHECK#5 -if (array[0] !== undefined) { - $ERROR('#5: var array = [,,,1,2]; array[0] === undefined. Actual: ' + (array[0])); -} - -//CHECK#6 -if (array[1] !== undefined) { - $ERROR('#6: var array = [,,,1,2]; array[1] === undefined. Actual: ' + (array[1])); -} - -//CHECK#7 -if (array[2] !== undefined) { - $ERROR('#7: var array = [,,,1,2]; array[2] === undefined. Actual: ' + (array[2])); -} - -//CHECK#8 -if (array[3] !== 1) { - $ERROR('#8: var array = [,,,1,2]; array[3] === 1. Actual: ' + (array[3])); -} - -//CHECK#9 -if (array[4] !== 2) { - $ERROR('#9: var array = [,,,1,2]; array[4] === 2. Actual: ' + (array[4])); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.4_Array_Initialiser/S11.1.4_A1.5.js b/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.4_Array_Initialiser/S11.1.4_A1.5.js deleted file mode 100644 index 78a77f9b1..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.4_Array_Initialiser/S11.1.4_A1.5.js +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.1.4_A1.5; -* @section: 11.1.4; -* @assertion: Evaluate the production ArrayLiteral: [ AssignmentExpression, Elision ]; -* @description: Checking various properteis and contents of the array defined with "var array = [4,5,,,,]"; -*/ - -var array = [4,5,,,,]; - -//CHECK#1 -if (typeof array !== "object") { - $ERROR('#1: var array = [4,5,,,,]; typeof array === "object". Actual: ' + (typeof array)); -} - -//CHECK#2 -if (array instanceof Array !== true) { - $ERROR('#2: var array = [4,5,,,,]; array instanceof Array === true'); -} - -//CHECK#3 -if (array.toString !== Array.prototype.toString) { - $ERROR('#3: var array = [4,5,,,,]; array.toString === Array.prototype.toString. Actual: ' + (array.toString)); -} - -//CHECK#4 -if (array.length !== 5) { - $ERROR('#4: var array = [4,5,,,,]; array.length === 5. Actual: ' + (array.length)); -} - -//CHECK#5 -if (array[0] !== 4) { - $ERROR('#5: var array = [4,5,,,,]; array[0] === 4. Actual: ' + (array[0])); -} - -//CHECK#6 -if (array[1] !== 5) { - $ERROR('#6: var array = [4,5,,,,]; array[1] === 5. Actual: ' + (array[1])); -} - -//CHECK#7 -if (array[2] !== undefined) { - $ERROR('#7: var array = [4,5,,,,]; array[2] === undefined. Actual: ' + (array[2])); -} - -//CHECK#8 -if (array[3] !== undefined) { - $ERROR('#8: var array = [4,5,,,,]; array[3] === undefined. Actual: ' + (array[3])); -} - -//CHECK#9 -if (array[4] !== undefined) { - $ERROR('#9: var array = [4,5,,,,]; array[4] === undefined. Actual: ' + (array[4])); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.4_Array_Initialiser/S11.1.4_A1.6.js b/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.4_Array_Initialiser/S11.1.4_A1.6.js deleted file mode 100644 index d3bf2cbc6..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.4_Array_Initialiser/S11.1.4_A1.6.js +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.1.4_A1.6; -* @section: 11.1.4; -* @assertion: Evaluate the production ArrayLiteral: [ Elision, AssignmentExpression, Elision ]; -* @description: Checking various properteis and contents of the array defined with "var array = [,,3,,,]"; -*/ - -var array = [,,3,,,]; - -//CHECK#1 -if (typeof array !== "object") { - $ERROR('#1: var array = [,,3,,,]; typeof array === "object". Actual: ' + (typeof array)); -} - -//CHECK#2 -if (array instanceof Array !== true) { - $ERROR('#2: var array = [,,3,,,]; array instanceof Array === true'); -} - -//CHECK#3 -if (array.toString !== Array.prototype.toString) { - $ERROR('#3: var array = [,,3,,,]; array.toString === Array.prototype.toString. Actual: ' + (array.toString)); -} - -//CHECK#4 -if (array.length !== 5) { - $ERROR('#4: var array = [,,3,,,]; array.length === 5. Actual: ' + (array.length)); -} - -//CHECK#5 -if (array[0] !== undefined) { - $ERROR('#5: var array = [,,3,,,]; array[0] === undefined. Actual: ' + (array[0])); -} - -//CHECK#6 -if (array[1] !== undefined) { - $ERROR('#6: var array = [,,3,,,]; array[1] === undefined. Actual: ' + (array[1])); -} - -//CHECK#7 -if (array[2] !== 3) { - $ERROR('#7: var array = [,,3,,,]; array[2] === 3. Actual: ' + (array[2])); -} - -//CHECK#8 -if (array[3] !== undefined) { - $ERROR('#8: var array = [,,3,,,]; array[3] === undefined. Actual: ' + (array[3])); -} - -//CHECK#9 -if (array[4] !== undefined) { - $ERROR('#9: var array = [,,3,,,]; array[4] === undefined. Actual: ' + (array[4])); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.4_Array_Initialiser/S11.1.4_A1.7.js b/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.4_Array_Initialiser/S11.1.4_A1.7.js deleted file mode 100644 index c10e2fc7a..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.4_Array_Initialiser/S11.1.4_A1.7.js +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.1.4_A1.7; -* @section: 11.1.4; -* @assertion: Evaluate the production ArrayLiteral: [ AssignmentExpression, Elision, AssignmentExpression ]; -* @description: Checking various properteis and contents of the array defined with "var array = [1,2,,4,5]"; -*/ - -var array = [1,2,,4,5]; - -//CHECK#1 -if (typeof array !== "object") { - $ERROR('#1: var array = [1,2,,4,5]; typeof array === "object". Actual: ' + (typeof array)); -} - -//CHECK#2 -if (array instanceof Array !== true) { - $ERROR('#2: var array = [1,2,,4,5]; array instanceof Array === true'); -} - -//CHECK#3 -if (array.toString !== Array.prototype.toString) { - $ERROR('#3: var array = [1,2,,4,5]; array.toString === Array.prototype.toString. Actual: ' + (array.toString)); -} - -//CHECK#4 -if (array.length !== 5) { - $ERROR('#4: var array = [1,2,,4,5]; array.length === 5. Actual: ' + (array.length)); -} - -//CHECK#5 -if (array[0] !== 1) { - $ERROR('#5: var array = [1,2,,4,5]; array[0] === 1. Actual: ' + (array[0])); -} - -//CHECK#6 -if (array[1] !== 2) { - $ERROR('#6: var array = [1,2,,4,5]; array[1] === 2. Actual: ' + (array[1])); -} - -//CHECK#7 -if (array[2] !== undefined) { - $ERROR('#7: var array = [1,2,,4,5]; array[2] === undefined. Actual: ' + (array[2])); -} - -//CHECK#8 -if (array[3] !== 4) { - $ERROR('#8: var array = [1,2,,4,5]; array[3] === 4. Actual: ' + (array[3])); -} - -//CHECK#9 -if (array[4] !== 5) { - $ERROR('#9: var array = [1,2,,4,5]; array[4] === 5. Actual: ' + (array[4])); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.4_Array_Initialiser/S11.1.4_A2.js b/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.4_Array_Initialiser/S11.1.4_A2.js deleted file mode 100644 index ebdb09bbf..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.4_Array_Initialiser/S11.1.4_A2.js +++ /dev/null @@ -1,127 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.1.4_A2; -* @section: 11.1.4; -* @assertion: Create multi dimensional array; -* @description: Checking various properteis and contents of the arrya defined with "var array = [[1,2], [3], []]"; -*/ - -var array = [[1,2], [3], []]; - -//CHECK#1 -if (typeof array !== "object") { - $ERROR('#1: var array = [[1,2], [3], []]; typeof array === "object". Actual: ' + (typeof array)); -} - -//CHECK#2 -if (array instanceof Array !== true) { - $ERROR('#2: var array = [[1,2], [3], []]; array instanceof Array === true'); -} - -//CHECK#3 -if (array.toString !== Array.prototype.toString) { - $ERROR('#3: var array = [[1,2], [3], []]; array.toString === Array.prototype.toString. Actual: ' + (array.toString)); -} - -//CHECK#4 -if (array.length !== 3) { - $ERROR('#4: var array = [[1,2], [3], []]; array.length === 3. Actual: ' + (array.length)); -} - -var subarray = array[0]; - -//CHECK#5 -if (typeof subarray !== "object") { - $ERROR('#5: var array = [[1,2], [3], []]; var subarray = array[0]; typeof subarray === "object". Actual: ' + (typeof subarray)); -} - -//CHECK#6 -if (subarray instanceof Array !== true) { - $ERROR('#6: var array = [[1,2], [3], []]; var subarray = array[0]; subarray instanceof Array === true'); -} - -//CHECK#7 -if (subarray.toString !== Array.prototype.toString) { - $ERROR('#7: var array = [[1,2], [3], []]; var subarray = array[0]; subarray.toString === Array.prototype.toString. Actual: ' + (subarray.toString)); -} - -//CHECK#8 -if (subarray.length !== 2) { - $ERROR('#8: var array = [[1,2], [3], []]; var subarray = array[0]; subarray.length === 2. Actual: ' + (subarray.length)); -} - -//CHECK#9 -if (subarray[0] !== 1) { - $ERROR('#9: var array = [[1,2], [3], []]; var subarray = array[0]; subarray[0] === 1. Actual: ' + (subarray[0])); -} - -//CHECK#10 -if (subarray[1] !== 2) { - $ERROR('#10: var array = [[1,2], [3], []]; var subarray = array[1]; subarray[1] === 2. Actual: ' + (subarray[1])); -} - -var subarray = array[1]; - -//CHECK#11 -if (typeof subarray !== "object") { -$ERROR('#11: var array = [[1,2], [3], []]; var subarray = array[1]; typeof subarray === "object". Actual: ' + (typeof subarray)); -} - -//CHECK#12 -if (subarray instanceof Array !== true) { -$ERROR('#12: var array = [[1,2], [3], []]; var subarray = array[1]; subarray instanceof Array === true'); -} - -//CHECK#13 -if (subarray.toString !== Array.prototype.toString) { -$ERROR('#13: var array = [[1,2], [3], []]; var subarray = array[1]; subarray.toString === Array.prototype.toString. Actual: ' + (subarray.toString)); -} - -//CHECK#14 -if (subarray.length !== 1) { -$ERROR('#14: var array = [[1,2], [3], []]; var subarray = array[1]; subarray.length === 1. Actual: ' + (subarray.length)); -} - -//CHECK#15 -if (subarray[0] !== 3) { -$ERROR('#15: var array = [[1,2], [3], []]; var subarray = array[1]; subarray[0] === 3. Actual: ' + (subarray[0])); -} - -var subarray = array[2]; - -//CHECK#16 -if (typeof subarray !== "object") { -$ERROR('#16: var array = [[1,2], [3], []]; var subarray = array[2]; typeof subarray === "object". Actual: ' + (typeof subarray)); -} - -//CHECK#17 -if (subarray instanceof Array !== true) { -$ERROR('#17: var array = [[1,2], [3], []]; var subarray = array[2]; subarray instanceof Array === true'); -} - -//CHECK#18 -if (subarray.toString !== Array.prototype.toString) { -$ERROR('#18: var array = [[1,2], [3], []]; var subarray = array[2]; subarray.toString === Array.prototype.toString. Actual: ' + (subarray.toString)); -} - -//CHECK#19 -if (subarray.length !== 0) { -$ERROR('#19: var array = [[1,2], [3], []]; var subarray = array[2]; subarray.length === 0. Actual: ' + (subarray.length)); -} - -//CHECK#20 -if (array[0][0] !== 1) { - $ERROR('#20: var array = [[1,2], [3], []]; array[0][0] === 1. Actual: ' + (array[0][0])); -} - -//CHECK#21 -if (array[0][1] !== 2) { - $ERROR('#21: var array = [[1,2], [3], []]; array[0][1] === 2. Actual: ' + (array[0][1])); -} - -//CHECK#22 -if (array[1][0] !== 3) { - $ERROR('#722: var array = [[1,2], [3], []]; array[1][0] === 3. Actual: ' + (array[1][0])); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.5_Object_Initializer/S11.1.5_A1.1.js b/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.5_Object_Initializer/S11.1.5_A1.1.js deleted file mode 100644 index 6c30ee266..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.5_Object_Initializer/S11.1.5_A1.1.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.1.5_A1.1; -* @section: 11.1.5; -* @assertion: Evaluate the production ObjectLiteral: { }; -* @description: Checking various properteis of the object defined with "var object = {}"; -*/ - -var object = {}; - -//CHECK#1 -if (typeof object !== "object") { - $ERROR('#1: var object = {}; typeof object === "object". Actual: ' + (typeof object)); -} - -//CHECK#2 -if (object instanceof Object !== true) { - $ERROR('#2: var object = {}; object instanceof Object === true'); -} - -//CHECK#3 -if (object.toString !== Object.prototype.toString) { - $ERROR('#3: var object = {}; object.toString === Object.prototype.toString. Actual: ' + (object.toString)); -} - -//CHECK#4 -if (object.toString() !== "[object Object]") { - $ERROR('#4: var object = {}; object.toString === "[object Object]". Actual: ' + (object.toString)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.5_Object_Initializer/S11.1.5_A1.2.js b/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.5_Object_Initializer/S11.1.5_A1.2.js deleted file mode 100644 index 31bd73453..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.5_Object_Initializer/S11.1.5_A1.2.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.1.5_A1.2; -* @section: 11.1.5; -* @assertion: Evaluate the production ObjectLiteral: { NumericLiteral : AssignmentExpression}; -* @description: Checking various properteis and contents of the object defined with "var object = {1 : true}"; -*/ - -var object = {1 : true}; - -//CHECK#1 -if (typeof object !== "object") { - $ERROR('#1: var object = {1 : true}; typeof object === "object". Actual: ' + (typeof object)); -} - -//CHECK#2 -if (object instanceof Object !== true) { - $ERROR('#2: var object = {1 : true}; object instanceof Object === true'); -} - -//CHECK#3 -if (object.toString !== Object.prototype.toString) { - $ERROR('#3: var object = {1 : true}; object.toString === Object.prototype.toString. Actual: ' + (object.toString)); -} - -//CHECK#4 -if (object[1] !== true) { - $ERROR('#4: var object = {1 : true}; object[1] === true'); -} - -//CHECK#5 -if (object["1"] !== true) { - $ERROR('#5: var object = {1 : true}; object["1"] === true'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.5_Object_Initializer/S11.1.5_A1.3.js b/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.5_Object_Initializer/S11.1.5_A1.3.js deleted file mode 100644 index 28d9a0fbd..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.5_Object_Initializer/S11.1.5_A1.3.js +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.1.5_A1.3; -* @section: 11.1.5; -* @assertion: Evaluate the production ObjectLiteral: { StringLiteral : AssignmentExpression}; -* @description: Checking various properteis and contents of the object defined with "var object = {"x" : true}"; -*/ - -var object = {"x" : true}; - -//CHECK#1 -if (typeof object !== "object") { - $ERROR('#1: var object = {"x" : true}; typeof object === "object". Actual: ' + (typeof object)); -} - -//CHECK#2 -if (object instanceof Object !== true) { - $ERROR('#2: var object = {"x" : true}; object instanceof Object === true'); -} - -//CHECK#3 -if (object.toString !== Object.prototype.toString) { - $ERROR('#3: var object = {"x" : true}; object.toString === Object.prototype.toString. Actual: ' + (object.toString)); -} - -//CHECK#4 -if (object["x"] !== true) { - $ERROR('#4: var object = {"x" : true}; object["x"] === true'); -} - -//CHECK#5 -if (object.x !== true) { - $ERROR('#5: var object = {"x" : true}; object.x === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.5_Object_Initializer/S11.1.5_A1.4.js b/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.5_Object_Initializer/S11.1.5_A1.4.js deleted file mode 100644 index 77065a3be..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.5_Object_Initializer/S11.1.5_A1.4.js +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.1.5_A1.4; -* @section: 11.1.5; -* @assertion: Evaluate the production ObjectLiteral: { Identifier : AssignmentExpression}; -* @description: Checking various properteis and contents of the object defined with "var object = {prop : true}"; -*/ - -var object = {prop : true}; - -//CHECK#1 -if (typeof object !== "object") { - $ERROR('#1: var object = {prop : true}; typeof object === "object". Actual: ' + (typeof object)); -} - -//CHECK#2 -if (object instanceof Object !== true) { - $ERROR('#2: var object = {prop : true}; object instanceof Object === true'); -} - -//CHECK#3 -if (object.toString !== Object.prototype.toString) { - $ERROR('#3: var object = {prop : true}; object.toString === Object.prototype.toString. Actual: ' + (object.toString)); -} - -//CHECK#4 -if (object["prop"] !== true) { - $ERROR('#4: var object = {prop : true}; object["prop"] === true'); -} - -//CHECK#5 -if (object.prop !== true) { - $ERROR('#5: var object = {prop : true}; object.prop === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.5_Object_Initializer/S11.1.5_A2.js b/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.5_Object_Initializer/S11.1.5_A2.js deleted file mode 100644 index 7959ef1aa..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.5_Object_Initializer/S11.1.5_A2.js +++ /dev/null @@ -1,93 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.1.5_A2; -* @section: 11.1.5; -* @assertion: Evaluate the production ObjectLiteral: { PropertyName : AssignmentExpression }; -* @description: Creating property "prop" of various types(boolean, number and etc.); -*/ - -//CHECK#1 -var x = true; -var object = {prop : x}; -if (object.prop !== x) { - $ERROR('#1: var x = true; var object = {prop : x}; object.prop === x. Actual: ' + (object.prop)); -} - -//CHECK#2 -var x = new Boolean(true); -var object = {prop : x}; -if (object.prop !== x) { - $ERROR('#2: var x = new Boolean(true); var object = {prop : x}; object.prop === x. Actual: ' + (object.prop)); -} - -//CHECK#3 -var x = 1; -var object = {prop : x}; -if (object.prop !== x) { - $ERROR('#3: var x = 1; var object = {prop : x}; object.prop === x. Actual: ' + (object.prop)); -} - -//CHECK#4 -var x = new Number(1); -var object = {prop : x}; -if (object.prop !== x) { - $ERROR('#4: var x = new Number(1); var object = {prop : x}; object.prop === x. Actual: ' + (object.prop)); -} - -//CHECK#5 -var x = "1"; -var object = {prop : x}; -if (object.prop !== x) { - $ERROR('#5: var x = "1"; var object = {prop : x}; object.prop === x. Actual: ' + (object.prop)); -} - -//CHECK#6 -var x = new String(1); -var object = {prop : x}; -if (object.prop !== x) { - $ERROR('#6: var x = new String(1); var object = {prop : x}; object.prop === x. Actual: ' + (object.prop)); -} - -//CHECK#7 -var x = undefined; -var object = {prop : x}; -if (object.prop !== x) { - $ERROR('#7: var x = undefined; var object = {prop : x}; object.prop === x. Actual: ' + (object.prop)); -} - -//CHECK#8 -var x = null; -var object = {prop : x}; -if (object.prop !== x) { - $ERROR('#8: var x = null; var object = {prop : x}; object.prop === x. Actual: ' + (object.prop)); -} - -//CHECK#9 -var x = {}; -var object = {prop : x}; -if (object.prop !== x) { - $ERROR('#9: var x = {}; var object = {prop : x}; object.prop === x. Actual: ' + (object.prop)); -} - -//CHECK#10 -var x = [1,2]; -var object = {prop : x}; -if (object.prop !== x) { - $ERROR('#10: var x = [1,2]; var object = {prop : x}; object.prop === x. Actual: ' + (object.prop)); -} - -//CHECK#11 -var x = function() {}; -var object = {prop : x}; -if (object.prop !== x) { - $ERROR('#11: var x = function() {}; var object = {prop : x}; object.prop === x. Actual: ' + (object.prop)); -} - -//CHECK#12 -var x = this; -var object = {prop : x}; -if (object.prop !== x) { - $ERROR('#12: var x = this; var object = {prop : x}; object.prop === x. Actual: ' + (object.prop)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.5_Object_Initializer/S11.1.5_A3.js b/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.5_Object_Initializer/S11.1.5_A3.js deleted file mode 100644 index 89a844b63..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.5_Object_Initializer/S11.1.5_A3.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.1.5_A3; -* @section: 11.1.5; -* @assertion: Evaluate the production ObjectLiteral: { PropertyNameAndValueList }; -* @description: Creating the object defined with "var object = {0 : 1, "1" : "x", o : {}}"; -*/ - -var object = {0 : 1, "1" : "x", o : {}}; - -//CHECK#1 -if (object[0] !== 1) { - $ERROR('#1: var object = {0 : 1; "1" : "x"; o : {}}; object[0] === 1. Actual: ' + (object[0])); -} - -//CHECK#2 -if (object["1"] !== "x") { - $ERROR('#2: var object = {0 : 1; "1" : "x"; o : {}}; object["1"] === "x". Actual: ' + (object["1"])); -} - -//CHECK#3 -if (typeof object.o !== "object") { - $ERROR('#1: var object = {0 : 1; "1" : "x"; o : {}}; typeof object.o === "object". Actual: ' + (typeof object.o)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.5_Object_Initializer/S11.1.5_A4.1.js b/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.5_Object_Initializer/S11.1.5_A4.1.js deleted file mode 100644 index bda88873b..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.5_Object_Initializer/S11.1.5_A4.1.js +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.1.5_A4.1; -* @section: 11.1.5; -* @assertion: The PropertyName is not BooleanLiteral; -* @description: Checking if execution of "var object = {true : 1}" fails; -* @negative -*/ - -//CHECK#1 -var object = {true : 1}; diff --git a/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.5_Object_Initializer/S11.1.5_A4.2.js b/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.5_Object_Initializer/S11.1.5_A4.2.js deleted file mode 100644 index d2fbf4d1e..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.5_Object_Initializer/S11.1.5_A4.2.js +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.1.5_A4.2; -* @section: 11.1.5; -* @assertion: The PropertyName is not nullLiteral; -* @description: Checking if execution of "var object = {null : true}" fails; -* @negative -*/ - -//CHECK#1 -var object = {null : true}; diff --git a/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.5_Object_Initializer/S11.1.5_A4.3.js b/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.5_Object_Initializer/S11.1.5_A4.3.js deleted file mode 100644 index 639e41a45..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.5_Object_Initializer/S11.1.5_A4.3.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.1.5_A4.3; -* @section: 11.1.5; -* @assertion: The PropertyName is undefined, ToString(BooleanLiteral), ToString(nullLiteral); -* @description: Creating properties with following names: undefined, 'true', 'null'; -*/ - -//CHECK#1 -var object = {undefined : true}; -if (object.undefined !== true) { - $ERROR('#1: var object = {undefined : true}; object.undefined === true'); -} - -//CHECK#2 -var object = {undefined : true}; -if (object["undefined"] !== true) { - $ERROR('#2: var object = {undefined : true}; object["undefined"] === true'); -} - -//CHECK#3 -var object = {"true" : true}; -if (object["true"] !== true) { - $ERROR('#3: var object = {"true" : true}; object["true"] === true'); -} - -//CHECK#4 -var object = {"null" : true}; -if (object["null"] !== true) { - $ERROR('#4: var object = {"null" : true}; object["null"] === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.6_The_Grouping_Operator/S11.1.6_A1.js b/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.6_The_Grouping_Operator/S11.1.6_A1.js deleted file mode 100644 index 78c0e9d43..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.6_The_Grouping_Operator/S11.1.6_A1.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.1.6_A1; -* @section: 11.1.6, 7.2, 7.3; -* @assertion: White Space and Line Terminator inside "grouping" operator are allowed; -* @description: Inserting WhiteSpaces and LineTerminators into grouping operator. Eval is used; -*/ - -//CHECK#1 -if (eval("(\u00091\u0009)") !== 1) { - $ERROR('#1: (\\u00091\\u0009) === 1'); -} - -//CHECK#2 -if (eval("(\u000B1\u000B)") !== 1) { - $ERROR('#2: (\\u000B1\\u000B) === 1'); -} - -//CHECK#3 -if (eval("(\u000C1\u000C)") !== 1) { - $ERROR('#3: (\\u000C1\\u000C) === 1'); -} - -//CHECK#4 -if (eval("(\u00201\u0020)") !== 1) { - $ERROR('#4: (\\u00201\\u0020 === 1'); -} - -//CHECK#5 -if (eval("(\u00A01\u00A0)") !== 1) { - $ERROR('#5: (\\u00A01\\u00A0) === 1'); -} - -//CHECK#6 -if (eval("(\u000A1\u000A)") !== 1) { - $ERROR('#6: (\\u000A1\\u000A) === 1'); -} - -//CHECK#7 -if (eval("(\u000D1\u000D)") !== 1) { - $ERROR('#7: (\\u000D1\\u000D) === 1'); -} - -//CHECK#8 -if (eval("(\u20281\u2028)") !== 1) { - $ERROR('#8: (\\u20281\\u2028) === 1'); -} - -//CHECK#9 -if (eval("(\u20291\u2029)") !== 1) { - $ERROR('#9: (\\u20291\\u2029) === 1'); -} - -//CHECK#10 -if (eval("(\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20291\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029)") !== 1) { - $ERROR('#10: (\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20291\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029) === 1'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.6_The_Grouping_Operator/S11.1.6_A2.js b/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.6_The_Grouping_Operator/S11.1.6_A2.js deleted file mode 100644 index 23152e4b0..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.6_The_Grouping_Operator/S11.1.6_A2.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.1.6_A2; -* @section: 11.1.6; -* @assertion: "This" operator doesn't use GetValue. The operators "delete" and "typeof" can be applied to parenthesised expressions; -* @description: Applying "delete" and "typeof" operators to an undefined variable and a property of an object; -*/ - -//CHECK#1 -if (delete (x) !== true) { - $ERROR('#1: delete (x) === true'); -} - -//CHECK#2 -if (typeof (x) !== "undefined") { - $ERROR('#2: typeof (x) === "undefined". Actual: ' + (typeof (x))); -} - -var object = {}; -//CHECK#3 -if (delete (object.prop) !== true) { - $ERROR('#3: var object = {}; delete (object.prop) === true'); -} - -//CHECK#4 -if (typeof (object.prop) !== "undefined") { - $ERROR('#4: var object = {}; typeof (object.prop) === "undefined". Actual: ' + (typeof (object.prop))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.6_The_Grouping_Operator/S11.1.6_A3_T1.js b/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.6_The_Grouping_Operator/S11.1.6_A3_T1.js deleted file mode 100644 index 245c653ee..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.6_The_Grouping_Operator/S11.1.6_A3_T1.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.1.6_A3_T1; -* @section: 11.1.6; -* @assertion: "This" operator only evaluates Expression; -* @description: Applying grouping operator to Boolean; -*/ - -// Check for Boolean - -//CHECK#1 -if ((true) !== true) { - $ERROR('#1: (true) === true'); -} - -//CHECK#2 -var x = new Boolean(true); -if ((x) !== x) { - $ERROR('#2: var x = new Boolean(true); (x) === x. Actual: ' + ((x))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.6_The_Grouping_Operator/S11.1.6_A3_T2.js b/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.6_The_Grouping_Operator/S11.1.6_A3_T2.js deleted file mode 100644 index 3593f1563..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.6_The_Grouping_Operator/S11.1.6_A3_T2.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.1.6_A3_T2; -* @section: 11.1.6; -* @assertion: "This" operator only evaluates Expression; -* @description: Applying grouping operator to Number; -*/ - -//Check for Number - -//CHECK#1 -if ((1) !== 1) { - $ERROR('#1: (1) === 1. Actual: ' + ((1))); -} - -//CHECK#2 -var x = new Number(1); -if ((x) !== x) { - $ERROR('#2: var x = new Number(1); (x) === x. Actual: ' + ((x))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.6_The_Grouping_Operator/S11.1.6_A3_T3.js b/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.6_The_Grouping_Operator/S11.1.6_A3_T3.js deleted file mode 100644 index 9658c7616..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.6_The_Grouping_Operator/S11.1.6_A3_T3.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.1.6_A3_T3; -* @section: 11.1.6; -* @assertion: "This" operator only evaluates Expression; -* @description: Applying grouping operator to String; -*/ - -//Check for String - -//CHECK#1 -if (("1") !== "1") { - $ERROR('#1: ("1") === "1". Actual: ' + (("1"))); -} - -//CHECK#2 -if (("x") !== "x") { - $ERROR('#2: ("x") === "x". Actual: ' + (("x"))); -} - -//CHECK#3 -var x = new Number("1"); -if ((x) !== x) { - $ERROR('#3: var x = new Number("1"); (x) === x. Actual: ' + ((x))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.6_The_Grouping_Operator/S11.1.6_A3_T4.js b/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.6_The_Grouping_Operator/S11.1.6_A3_T4.js deleted file mode 100644 index 0387ed371..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.6_The_Grouping_Operator/S11.1.6_A3_T4.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.1.6_A3_T4; -* @section: 11.1.6; -* @assertion: "This" operator only evaluates Expression; -* @description: Applying grouping operator to undefined; -*/ - -//Check for undefined and null - -//CHECK#1 -if ((undefined) !== undefined) { - $ERROR('#1: (undefined) === undefined. Actual: ' + ((undefined))); -} - -//CHECK#2 -if ((void 0) !== void 0) { - $ERROR('#2: (void 0) === void 0. Actual: ' + ((void 0))); -} - -//CHECK#2 -if ((null) !== null) { - $ERROR('#2: (null) === null. Actual: ' + ((null))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.6_The_Grouping_Operator/S11.1.6_A3_T5.js b/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.6_The_Grouping_Operator/S11.1.6_A3_T5.js deleted file mode 100644 index 473673bf5..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.6_The_Grouping_Operator/S11.1.6_A3_T5.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.1.6_A3_T5; -* @section: 11.1.6; -* @assertion: "This" operator only evaluates Expression; -* @description: Using grouping operator in declaration of variables; -*/ - -//CHECK#1 -(x) = 1; -if (x !== 1) { - $ERROR('#1: (x) = 1; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -var y = 1; (y)++; ++(y); (y)--; --(y); -if (y !== 1) { - $ERROR('#2: var y = 1; (y)++; ++(y); (y)--; --(y); y === 1. Actual: ' + (y)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.6_The_Grouping_Operator/S11.1.6_A3_T6.js b/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.6_The_Grouping_Operator/S11.1.6_A3_T6.js deleted file mode 100644 index 3fa268af8..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.1_Primary_Expressions/11.1.6_The_Grouping_Operator/S11.1.6_A3_T6.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.1.6_A3_T6; -* @section: 11.1.6; -* @assertion: "This" operator only evaluates Expression; -* @description: Applying grouping operator to delete and typeof operators; -*/ - -//CHECK#1 -if (delete (x) !== true) { - $ERROR('#1: delete (x) === true'); -} - -//CHECK#2 -if (typeof (x) !== "undefined") { - $ERROR('#2: typeof (x) === "undefined". Actual: ' + (typeof (x))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.1_Property_Accessors/S11.2.1_A1.1.js b/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.1_Property_Accessors/S11.2.1_A1.1.js deleted file mode 100644 index cc4aeb058..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.1_Property_Accessors/S11.2.1_A1.1.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.2.1_A1.1; -* @section: 11.2.1, 7.2, 7.3; -* @assertion: White Space and Line Terminator between MemberExpression or CallExpression and "." and between "." and Identifier are allowed; -* @description: Checking by using eval; -*/ - -//CHECK#1 -if (eval("Number\u0009.\u0009POSITIVE_INFINITY") !== Number.POSITIVE_INFINITY) { - $ERROR('#1: Number\\u0009.\\u0009POSITIVE_INFINITY === Number.POSITIVE_INFINITY'); -} - -//CHECK#2 -if (eval("Number\u000B.\u000BPOSITIVE_INFINITY") !== Number.POSITIVE_INFINITY) { - $ERROR('#2: Number\\u000B.\\u000BPOSITIVE_INFINITY === Number.POSITIVE_INFINITY'); -} - -//CHECK#3 -if (eval("Number\u000C.\u000CPOSITIVE_INFINITY") !== Number.POSITIVE_INFINITY) { - $ERROR('#3: Number\\u000C.\\u000CPOSITIVE_INFINITY === Number.POSITIVE_INFINITY'); -} - -//CHECK#4 -if (eval("Number\u0020.\u0020POSITIVE_INFINITY") !== Number.POSITIVE_INFINITY) { - $ERROR('#4: Number\\u0020.\\u0020POSITIVE_INFINITY === Number.POSITIVE_INFINITY'); -} - -//CHECK#5 -if (eval("Number\u00A0.\u00A0POSITIVE_INFINITY") !== Number.POSITIVE_INFINITY) { - $ERROR('#5: Number\\u00A0.\\u00A0POSITIVE_INFINITY === Number.POSITIVE_INFINITY'); -} - -//CHECK#6 -if (eval("Number\u000A.\u000APOSITIVE_INFINITY") !== Number.POSITIVE_INFINITY) { - $ERROR('#6: Number\\u000A.\\u000APOSITIVE_INFINITY === Number.POSITIVE_INFINITY'); -} - -//CHECK#7 -if (eval("Number\u000D.\u000DPOSITIVE_INFINITY") !== Number.POSITIVE_INFINITY) { - $ERROR('#7: Number\\u000D.\\u000DPOSITIVE_INFINITY === Number.POSITIVE_INFINITY'); -} - -//CHECK#8 -if (eval("Number\u2028.\u2028POSITIVE_INFINITY") !== Number.POSITIVE_INFINITY) { - $ERROR('#8: Number\\u2028.\\u2028POSITIVE_INFINITY === Number.POSITIVE_INFINITY'); -} - -//CHECK#9 -if (eval("Number\u2029.\u2029POSITIVE_INFINITY") !== Number.POSITIVE_INFINITY) { - $ERROR('#9: Number\\u2029.\\u2029POSITIVE_INFINITY === Number.POSITIVE_INFINITY'); -} - -//CHECK#10 -if (eval("Number\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029.\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029POSITIVE_INFINITY") !== Number.POSITIVE_INFINITY) { - $ERROR('#10: Number\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029.\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029POSITIVE_INFINITY === Number.POSITIVE_INFINITY'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.1_Property_Accessors/S11.2.1_A1.2.js b/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.1_Property_Accessors/S11.2.1_A1.2.js deleted file mode 100644 index 3a8fb8fdd..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.1_Property_Accessors/S11.2.1_A1.2.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.2.1_A1.2; -* @section: 11.2.1, 7.2, 7.3; -* @assertion: White Space and Line Terminator between "[" and MemberExpression or CallExpression and between Identifier and "]" are allowed; -* @description: Checking by using eval; -*/ - -//CHECK#1 -if (eval('Number[\u0009"POSITIVE_INFINITY"\u0009]') !== Number.POSITIVE_INFINITY) { - $ERROR('#1: Number[\\u0009"POSITIVE_INFINITY"\\u0009] === Number.POSITIVE_INFINITY'); -} - -//CHECK#2 -if (eval('Number[\u000B"POSITIVE_INFINITY"\u000B]') !== Number.POSITIVE_INFINITY) { - $ERROR('#2: Number[\\u000B"POSITIVE_INFINITY"\\u000B] === Number.POSITIVE_INFINITY'); -} - -//CHECK#3 -if (eval('Number[\u000C"POSITIVE_INFINITY"\u000C]') !== Number.POSITIVE_INFINITY) { - $ERROR('#3: Number[\\u000C"POSITIVE_INFINITY"\\u000C] === Number.POSITIVE_INFINITY'); -} - -//CHECK#4 -if (eval('Number[\u0020"POSITIVE_INFINITY"\u0020]') !== Number.POSITIVE_INFINITY) { - $ERROR('#4: Number[\\u0020"POSITIVE_INFINITY"\\u0020] === Number.POSITIVE_INFINITY'); -} - -//CHECK#5 -if (eval('Number[\u00A0"POSITIVE_INFINITY"\u00A0]') !== Number.POSITIVE_INFINITY) { - $ERROR('#5: Number[\\u00A0"POSITIVE_INFINITY"\\u00A0] === Number.POSITIVE_INFINITY'); -} - -//CHECK#6 -if (eval('Number[\u000A"POSITIVE_INFINITY"\u000A]') !== Number.POSITIVE_INFINITY) { - $ERROR('#6: Number[\\u000A"POSITIVE_INFINITY"\\u000A] === Number.POSITIVE_INFINITY'); -} - -//CHECK#7 -if (eval('Number[\u000D"POSITIVE_INFINITY"\u000D]') !== Number.POSITIVE_INFINITY) { - $ERROR('#7: Number[\\u000D"POSITIVE_INFINITY"\\u000D] === Number.POSITIVE_INFINITY'); -} - -//CHECK#8 -if (eval('Number[\u2028"POSITIVE_INFINITY"\u2028]') !== Number.POSITIVE_INFINITY) { - $ERROR('#8: Number[\\u2028"POSITIVE_INFINITY"\\u2028] === Number.POSITIVE_INFINITY'); -} - -//CHECK#9 -if (eval('Number[\u2029"POSITIVE_INFINITY"\u2029]') !== Number.POSITIVE_INFINITY) { - $ERROR('#9: Number[\\u2029"POSITIVE_INFINITY"\\u2029] === Number.POSITIVE_INFINITY'); -} - -//CHECK#10 -if (eval('Number[\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029"POSITIVE_INFINITY"\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029]') !== Number.POSITIVE_INFINITY) { - $ERROR('#10: Number[\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029"POSITIVE_INFINITY"\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029] === Number.POSITIVE_INFINITY'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.1_Property_Accessors/S11.2.1_A2.js b/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.1_Property_Accessors/S11.2.1_A2.js deleted file mode 100644 index d0acf5d96..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.1_Property_Accessors/S11.2.1_A2.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.2.1_A2; -* @section: 11.2.1; -* @assertion: MemberExpression and CallExpression uses GetValue; -* @description: If GetBase(MemberExpression or CallExpression) is null, throw ReferenceError; -*/ - -//CHECK#1 -try { - object[1]; - $ERROR('#1.1: object[1] throw ReferenceError. Actual: ' + (object[1])); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: object[1] throw ReferenceError. Actual: ' + (e)); - } -} - -//CHECK#2 -try { - object.prop; - $ERROR('#2.1: object.prop throw ReferenceError. Actual: ' + (object.prop)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#2.2: object.prop throw ReferenceError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.1_Property_Accessors/S11.2.1_A3_T1.js b/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.1_Property_Accessors/S11.2.1_A3_T1.js deleted file mode 100644 index 2fba84dfb..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.1_Property_Accessors/S11.2.1_A3_T1.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.2.1_A3_T1; -* @section: 11.2.1, 9.9, 11.2.3, 15.6.4.2; -* @assertion: MemberExpression calls ToObject(MemberExpression) and ToString(Expression). CallExpression calls ToObject(CallExpression) and ToString(Expression); -* @description: Checking Boolean case; -*/ - -//CHECK#1 -if (true.toString() !== "true") { - $ERROR('#1: true.toString() === "true". Actual: ' + (true.toString())); -} - -//CHECK#2 -if (false["toString"]() !== "false") { - $ERROR('#2: false["toString"]() === "false". Actual: ' + (false["toString"]())); -} - -//CHECK#3 -if (new Boolean(true).toString() !== "true") { - $ERROR('#3: new Boolean(true).toString() === "true". Actual: ' + (new Boolean(true).toString())); -} - -//CHECK#4 -if (new Boolean(false)["toString"]() !== "false") { - $ERROR('#4: new Boolean(false)["toString"]() === "false". Actual: ' + (new Boolean(false)["toString"]())); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.1_Property_Accessors/S11.2.1_A3_T2.js b/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.1_Property_Accessors/S11.2.1_A3_T2.js deleted file mode 100644 index ffe3d28db..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.1_Property_Accessors/S11.2.1_A3_T2.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.2.1_A3_T2; -* @section: 11.2.1, 9.9, 11.2.3, 15.6.4.2; -* @assertion: MemberExpression calls ToObject(MemberExpression) and ToString(Expression). CallExpression calls ToObject(CallExpression) and ToString(Expression) -* @description: Checking Number case; -*/ - -//CHECK#1 -if (1..toString() !== "1") { - $ERROR('#1: 1..toString() === "1". Actual: ' + (1..toString())); -} - -//CHECK#2 -if (1.1.toFixed(5) !== "1.10000") { - $ERROR('#2: 1.1.toFixed(5) === "1.10000". Actual: ' + (1.1.toFixed(5))); -} - -//CHECK#3 -if (1["toString"]() !== "1") { - $ERROR('#3: 1["toString"]() === "1". Actual: ' + (1["toString"]())); -} - -//CHECK#4 -if (1.["toFixed"](5) !== "1.00000") { - $ERROR('#4: 1.["toFixed"](5) === "1.00000". Actual: ' + (1.["toFixed"](5))); -} - -//CHECK#5 -if (new Number(1).toString() !== "1") { - $ERROR('#5: new Number(1).toString() === "1". Actual: ' + (new Number(1).toString())); -} - -//CHECK#6 -if (new Number(1)["toFixed"](5) !== "1.00000") { - $ERROR('#6: new Number(1)["toFixed"](5) === "1.00000". Actual: ' + (new Number(1)["toFixed"](5))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.1_Property_Accessors/S11.2.1_A3_T3.js b/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.1_Property_Accessors/S11.2.1_A3_T3.js deleted file mode 100644 index 661d45fdc..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.1_Property_Accessors/S11.2.1_A3_T3.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.2.1_A3_T3; -* @section: 11.2.1, 9.9, 11.2.3, 15.6.4.2; -* @assertion: MemberExpression calls ToObject(MemberExpression) and ToString(Expression). CallExpression calls ToObject(CallExpression) and ToString(Expression) -* @description: Checking String case; -* -*/ - -//CHECK#1 -if ("abc123".charAt(5) !== "3") { - $ERROR('#1: "abc123".charAt(5) === "3". Actual: ' + ("abc123".charAt(5))); -} - -//CHECK#2 -if ("abc123"["charAt"](0) !== "a") { - $ERROR('#2: "abc123"["charAt"](0) === "a". Actual: ' + ("abc123"["charAt"](0))); -} - -//CHECK#3 -if ("abc123".length !== 6) { - $ERROR('#3: "abc123".length === 6. Actual: ' + ("abc123".length)); -} - -//CHECK#4 -if ("abc123"["length"] !== 6) { - $ERROR('#4: "abc123"["length"] === 6. Actual: ' + ("abc123"["length"])); -} - -//CHECK#5 -if (new String("abc123").length !== 6) { - $ERROR('#5: new String("abc123").length === 6. Actual: ' + (new String("abc123").length)); -} - -//CHECK#6 -if (new String("abc123")["charAt"](2) !== "c") { - $ERROR('#6: new String("abc123")["charAt"](2) === "c". Actual: ' + (new String("abc123")["charAt"](2))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.1_Property_Accessors/S11.2.1_A3_T4.js b/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.1_Property_Accessors/S11.2.1_A3_T4.js deleted file mode 100644 index d2c58c452..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.1_Property_Accessors/S11.2.1_A3_T4.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.2.1_A3_T4; -* @section: 11.2.1, 9.9, 11.2.3, 15.6.4.2; -* @assertion: MemberExpression calls ToObject(MemberExpression) and ToString(Expression). CallExpression calls ToObject(CallExpression) and ToString(Expression) -* @description: Checking "undefined" case; -*/ - -//CHECK#1 -try { - undefined.toString(); - $ERROR('#1.1: undefined.toString() throw TypeError. Actual: ' + (undefined.toString())); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1.2: undefined.toString() throw TypeError. Actual: ' + (e)); - } -} - -//CHECK#2 -try { - undefined["toString"](); - $ERROR('#2.1: undefined["toString"]() throw TypeError. Actual: ' + (undefined["toString"]())); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#2.2: undefined["toString"]() throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.1_Property_Accessors/S11.2.1_A3_T5.js b/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.1_Property_Accessors/S11.2.1_A3_T5.js deleted file mode 100644 index 9f6e6d89f..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.1_Property_Accessors/S11.2.1_A3_T5.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.2.1_A3_T5; -* @section: 11.2.1, 9.9, 11.2.3, 15.6.4.2; -* @assertion: MemberExpression calls ToObject(MemberExpression) and ToString(Expression). CallExpression calls ToObject(CallExpression) and ToString(Expression) -* @description: Checking "null" case; -*/ - -//CHECK#1 -try { - null.toString(); - $ERROR('#1.1: null.toString() throw TypeError. Actual: ' + (null.toString())); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1.2: null.toString() throw TypeError. Actual: ' + (e)); - } -} - -//CHECK#2 -try { - null["toString"](); - $ERROR('#2.1: null["toString"]() throw TypeError. Actual: ' + (null["toString"]())); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#2.2: null["toString"]() throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.1_Property_Accessors/S11.2.1_A4_T1.js b/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.1_Property_Accessors/S11.2.1_A4_T1.js deleted file mode 100644 index 6270eeb1c..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.1_Property_Accessors/S11.2.1_A4_T1.js +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.2.1_A4_T1; -* @section: 11.2.1; -* @assertion: Check type of various properties; -* @description: Checking properties of this object; -*/ - -//CHECK#1-32 -if (typeof (this.NaN) === "undefined") $ERROR('#1: typeof (this.NaN) !== "undefined"'); -if (typeof this['NaN'] === "undefined") $ERROR('#2: typeof this["NaN"] !== "undefined"'); -if (typeof this.Infinity === "undefined") $ERROR('#3: typeof this.Infinity !== "undefined"'); -if (typeof this['Infinity'] === "undefined") $ERROR('#4: typeof this["Infinity"] !== "undefined"'); -if (typeof this.parseInt === "undefined") $ERROR('#5: typeof this.parseInt !== "undefined"'); -if (typeof this['parseInt'] === "undefined") $ERROR('#6: typeof this["parseInt"] !== "undefined"'); -if (typeof this.parseFloat === "undefined") $ERROR('#7: typeof this.parseFloat !== "undefined"'); -if (typeof this['parseFloat'] === "undefined") $ERROR('#8: typeof this["parseFloat"] !== "undefined"'); -if (typeof this.escape === "undefined") $ERROR('#9: typeof this.escape !== "undefined"'); -if (typeof this['escape'] === "undefined") $ERROR('#10: typeof this["escape"] !== "undefined"'); -if (typeof this.unescape === "undefined") $ERROR('#11: typeof this.unescape !== "undefined"'); -if (typeof this['unescape'] === "undefined") $ERROR('#12: typeof this["unescape"] !== "undefined"'); -if (typeof this.isNaN === "undefined") $ERROR('#13: typeof this.isNaN !== "undefined"'); -if (typeof this['isNaN'] === "undefined") $ERROR('#14: typeof this["isNaN"] !== "undefined"'); -if (typeof this.isFinite === "undefined") $ERROR('#15: typeof this.isFinite !== "undefined"'); -if (typeof this['isFinite'] === "undefined") $ERROR('#16: typeof this["isFinite"] !== "undefined"'); -if (typeof this.Object === "undefined") $ERROR('#17: typeof this.Object !== "undefined"'); -if (typeof this['Object'] === "undefined") $ERROR('#18: typeof this["Object"] !== "undefined"'); -if (typeof this.Number === "undefined") $ERROR('#19: typeof this.Number !== "undefined"'); -if (typeof this['Number'] === "undefined") $ERROR('#20: typeof this["Number"] !== "undefined"'); -if (typeof this.Function === "undefined") $ERROR('#21: typeof this.Function !== "undefined"'); -if (typeof this['Function'] === "undefined") $ERROR('#22: typeof this["Function"] !== "undefined"'); -if (typeof this.Array === "undefined") $ERROR('#23: typeof this.Array !== "undefined"'); -if (typeof this['Array'] === "undefined") $ERROR('#24: typeof this["Array"] !== "undefined"'); -if (typeof this.String === "undefined") $ERROR('#25: typeof this.String !== "undefined"'); -if (typeof this['String'] === "undefined") $ERROR('#26: typeof this["String"] !== "undefined"'); -if (typeof this.Boolean === "undefined") $ERROR('#27: typeof this.Boolean !== "undefined"'); -if (typeof this['Boolean'] === "undefined") $ERROR('#28: typeof this["Boolean"] !== "undefined"'); -if (typeof this.Date === "undefined") $ERROR('#29: typeof this.Date !== "undefined"'); -if (typeof this['Date'] === "undefined") $ERROR('#30: typeof this["Date"] !== "undefined"'); -if (typeof this.Math === "undefined") $ERROR('#31: typeof this.Math !== "undefined"'); -if (typeof this['Math'] === "undefined") $ERROR('#32: typeof this["Math"] !== "undefined"'); diff --git a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.1_Property_Accessors/S11.2.1_A4_T2.js b/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.1_Property_Accessors/S11.2.1_A4_T2.js deleted file mode 100644 index cc99b0903..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.1_Property_Accessors/S11.2.1_A4_T2.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.2.1_A4_T2; -* @section: 11.2.1; -* @assertion: Check type of various properties; -* @description: Checking properties and methods of Object objects; -*/ - -//CHECK#1-8 -if (typeof Object.prototype !== "object") $ERROR('#1: typeof Object.prototype === "object". Actual: ' + (typeof Object.prototype )); -if (typeof Object['prototype'] !== "object") $ERROR('#2: typeof Object["prototype"] === "object". Actual: ' + (typeof Object["prototype"] )); -if (typeof Object.toString !== "function") $ERROR('#3: typeof Object.toString === "function". Actual: ' + (typeof Object.toString )); -if (typeof Object['toString'] !== "function") $ERROR('#4: typeof Object["toString"] === "function". Actual: ' + (typeof Object["toString"] )); -if (typeof Object.valueOf !== "function") $ERROR('#5: typeof Object.valueOf === "function". Actual: ' + (typeof Object.valueOf )); -if (typeof Object['valueOf'] !== "function") $ERROR('#6: typeof Object["valueOf"] === "function". Actual: ' + (typeof Object["valueOf"] )); -if (typeof Object.constructor !== "function") $ERROR('#7: typeof Object.constructor === "function". Actual: ' + (typeof Object.constructor )); -if (typeof Object['constructor'] !== "function") $ERROR('#8: typeof Object["constructor"] === "function". Actual: ' + (typeof Object["constructor"] )); diff --git a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.1_Property_Accessors/S11.2.1_A4_T3.js b/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.1_Property_Accessors/S11.2.1_A4_T3.js deleted file mode 100644 index 0661335f2..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.1_Property_Accessors/S11.2.1_A4_T3.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.2.1_A4_T3; -* @section: 11.2.1; -* @assertion: Check type of various properties; -* @description: Checking properties of the Function object; -*/ - -//CHECK#1-8 -if (typeof Function.prototype !== "function") $ERROR('#1: typeof Function.prototype === "function". Actual: ' + (typeof Function.prototype )); -if (typeof Function['prototype'] !== "function") $ERROR('#2: typeof Function["prototype"] === "function". Actual: ' + (typeof Function["prototype"] )); -if (typeof Function.prototype.toString !== "function") $ERROR('#3: typeof Function.prototype.toString === "function". Actual: ' + (typeof Function.prototype.toString )); -if (typeof Function.prototype['toString'] !== "function") $ERROR('#4: typeof Function.prototype["toString"] === "function". Actual: ' + (typeof Function.prototype["toString"] )); -if (typeof Function.prototype.length !== "number") $ERROR('#5: typeof Function.prototype.length === "number". Actual: ' + (typeof Function.prototype.length )); -if (typeof Function.prototype['length'] !== "number") $ERROR('#6: typeof Function.prototype["length"] === "number". Actual: ' + (typeof Function.prototype["length"] )); -if (typeof Function.prototype.valueOf !== "function") $ERROR('#7: typeof Function.prototype.valueOf === "function". Actual: ' + (typeof Function.prototype.valueOf )); -if (typeof Function.prototype['valueOf'] !== "function") $ERROR('#8: typeof Function.prototype["valueOf"] === "function". Actual: ' + (typeof Function.prototype["valueOf"] )); diff --git a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.1_Property_Accessors/S11.2.1_A4_T4.js b/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.1_Property_Accessors/S11.2.1_A4_T4.js deleted file mode 100644 index 36f4b2a08..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.1_Property_Accessors/S11.2.1_A4_T4.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.2.1_A4_T4; -* @section: 11.2.1; -* @assertion: Check type of various properties; -* @description: Checking properties of the Array object; -*/ - -//CHECK#1-8 -if (typeof Array.prototype !== "object") $ERROR('#1: typeof Array.prototype === "object". Actual: ' + (typeof Array.prototype )); -if (typeof Array['prototype'] !== "object") $ERROR('#2: typeof Array["prototype"] === "object". Actual: ' + (typeof Array["prototype"] )); -if (typeof Array.length !== "number") $ERROR('#3: typeof Array.length === "number". Actual: ' + (typeof Array.length )); -if (typeof Array['length'] !== "number") $ERROR('#4: typeof Array["length"] === "number". Actual: ' + (typeof Array["length"] )); -if (typeof Array.prototype.constructor !== "function") $ERROR('#5: typeof Array.prototype.constructor === "function". Actual: ' + (typeof Array.prototype.constructor )); -if (typeof Array.prototype['constructor'] !== "function") $ERROR('#6: typeof Array.prototype["constructor"] === "function". Actual: ' + (typeof Array.prototype["constructor"] )); -if (typeof Array.prototype.toString !== "function") $ERROR('#7: typeof Array.prototype.toString === "function". Actual: ' + (typeof Array.prototype.toString )); -if (typeof Array.prototype['toString'] !== "function") $ERROR('#8: typeof Array.prototype["toString"] === "function". Actual: ' + (typeof Array.prototype["toString"] )); -if (typeof Array.prototype.join !== "function") $ERROR('#9: typeof Array.prototype.join === "function". Actual: ' + (typeof Array.prototype.join )); -if (typeof Array.prototype['join'] !== "function") $ERROR('#10: typeof Array.prototype["join"] === "function". Actual: ' + (typeof Array.prototype["join"] )); -if (typeof Array.prototype.reverse !== "function") $ERROR('#11: typeof Array.prototype.reverse === "function". Actual: ' + (typeof Array.prototype.reverse )); -if (typeof Array.prototype['reverse'] !== "function") $ERROR('#12: typeof Array.prototype["reverse"] === "function". Actual: ' + (typeof Array.prototype["reverse"] )); -if (typeof Array.prototype.sort !== "function") $ERROR('#13: typeof Array.prototype.sort === "function". Actual: ' + (typeof Array.prototype.sort )); -if (typeof Array.prototype['sort'] !== "function") $ERROR('#14: typeof Array.prototype["sort"] === "function". Actual: ' + (typeof Array.prototype["sort"] )); - diff --git a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.1_Property_Accessors/S11.2.1_A4_T5.js b/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.1_Property_Accessors/S11.2.1_A4_T5.js deleted file mode 100644 index 1978fdb19..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.1_Property_Accessors/S11.2.1_A4_T5.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.2.1_A4_T5; -* @section: 11.2.1; -* @assertion: Check type of various properties; -* @description: Checking properties of the String object; -*/ - -//CHECK#1-28 -if (typeof String.prototype !== "object") $ERROR('#1: typeof String.prototype === "object". Actual: ' + (typeof String.prototype )); -if (typeof String['prototype'] !== "object") $ERROR('#2: typeof String["prototype"] === "object". Actual: ' + (typeof String["prototype"] )); -if (typeof String.fromCharCode !== "function") $ERROR('#3: typeof String.fromCharCode === "function". Actual: ' + (typeof String.fromCharCode )); -if (typeof String['fromCharCode'] !== "function") $ERROR('#4: typeof String["fromCharCode"] === "function". Actual: ' + (typeof String["fromCharCode"] )); -if (typeof String.prototype.toString !== "function") $ERROR('#5: typeof String.prototype.toString === "function". Actual: ' + (typeof String.prototype.toString )); -if (typeof String.prototype['toString'] !== "function") $ERROR('#6: typeof String.prototype["toString"] === "function". Actual: ' + (typeof String.prototype["toString"] )); -if (typeof String.prototype.constructor !== "function") $ERROR('#7: typeof String.prototype.constructor === "function". Actual: ' + (typeof String.prototype.constructor )); -if (typeof String.prototype['constructor'] !== "function") $ERROR('#8: typeof String.prototype["constructor"] === "function". Actual: ' + (typeof String.prototype["constructor"] )); -if (typeof String.prototype.valueOf !== "function") $ERROR('#9: typeof String.prototype.valueOf === "function". Actual: ' + (typeof String.prototype.valueOf )); -if (typeof String.prototype['valueOf'] !== "function") $ERROR('#10: typeof String.prototype["valueOf"] === "function". Actual: ' + (typeof String.prototype["valueOf"] )); -if (typeof String.prototype.charAt !== "function") $ERROR('#11: typeof String.prototype.charAt === "function". Actual: ' + (typeof String.prototype.charAt )); -if (typeof String.prototype['charAt'] !== "function") $ERROR('#12: typeof String.prototype["charAt"] === "function". Actual: ' + (typeof String.prototype["charAt"] )); -if (typeof String.prototype.charCodeAt !== "function") $ERROR('#13: typeof String.prototype.charCodeAt === "function". Actual: ' + (typeof String.prototype.charCodeAt )); -if (typeof String.prototype['charCodeAt'] !== "function") $ERROR('#14: typeof String.prototype["charCodeAt"] === "function". Actual: ' + (typeof String.prototype["charCodeAt"] )); -if (typeof String.prototype.indexOf !== "function") $ERROR('#15: typeof String.prototype.indexOf === "function". Actual: ' + (typeof String.prototype.indexOf )); -if (typeof String.prototype['indexOf'] !== "function") $ERROR('#16: typeof String.prototype["indexOf"] === "function". Actual: ' + (typeof String.prototype["indexOf"] )); -if (typeof String.prototype.lastIndexOf !== "function") $ERROR('#17: typeof String.prototype.lastIndexOf === "function". Actual: ' + (typeof String.prototype.lastIndexOf )); -if (typeof String.prototype['lastIndexOf'] !== "function") $ERROR('#18: typeof String.prototype["lastIndexOf"] === "function". Actual: ' + (typeof String.prototype["lastIndexOf"] )); -if (typeof String.prototype.split !== "function") $ERROR('#19: typeof String.prototype.split === "function". Actual: ' + (typeof String.prototype.split )); -if (typeof String.prototype['split'] !== "function") $ERROR('#20: typeof String.prototype["split"] === "function". Actual: ' + (typeof String.prototype["split"] )); -if (typeof String.prototype.substring !== "function") $ERROR('#21: typeof String.prototype.substring === "function". Actual: ' + (typeof String.prototype.substring )); -if (typeof String.prototype['substring'] !== "function") $ERROR('#22: typeof String.prototype["substring"] === "function". Actual: ' + (typeof String.prototype["substring"] )); -if (typeof String.prototype.toLowerCase !== "function") $ERROR('#23: typeof String.prototype.toLowerCase === "function". Actual: ' + (typeof String.prototype.toLowerCase )); -if (typeof String.prototype['toLowerCase'] !== "function") $ERROR('#24: typeof String.prototype["toLowerCase"] === "function". Actual: ' + (typeof String.prototype["toLowerCase"] )); -if (typeof String.prototype.toUpperCase !== "function") $ERROR('#25: typeof String.prototype.toUpperCase === "function". Actual: ' + (typeof String.prototype.toUpperCase )); -if (typeof String.prototype['toUpperCase'] !== "function") $ERROR('#26: typeof Array.prototype === "object". Actual: ' + (typeof Array.prototype )); -if (typeof String.prototype.length !== "number") $ERROR('#27: typeof String.prototype.length === "number". Actual: ' + (typeof String.prototype.length )); -if (typeof String.prototype['length'] !== "number") $ERROR('#28: typeof String.prototype["length"] === "number". Actual: ' + (typeof String.prototype["length"] )); - diff --git a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.1_Property_Accessors/S11.2.1_A4_T6.js b/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.1_Property_Accessors/S11.2.1_A4_T6.js deleted file mode 100644 index a185905e5..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.1_Property_Accessors/S11.2.1_A4_T6.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.2.1_A4_T6; -* @section: 11.2.1; -* @assertion: Check type of various properties; -* @description: Checking properties of the Boolean object; -*/ - -//CHECK#1-8 -if (typeof Boolean.prototype !== "object") $ERROR('#1: typeof Boolean.prototype === "object". Actual: ' + (typeof Boolean.prototype )); -if (typeof Boolean['prototype'] !== "object") $ERROR('#2: typeof Boolean["prototype"] === "object". Actual: ' + (typeof Boolean["prototype"] )); -if (typeof Boolean.constructor !== "function") $ERROR('#3: typeof Boolean.constructor === "function". Actual: ' + (typeof Boolean.constructor )); -if (typeof Boolean['constructor'] !== "function") $ERROR('#4: typeof Boolean["constructor"] === "function". Actual: ' + (typeof Boolean["constructor"] )); -if (typeof Boolean.prototype.valueOf !== "function") $ERROR('#5: typeof Boolean.prototype.valueOf === "function". Actual: ' + (typeof Boolean.prototype.valueOf )); -if (typeof Boolean.prototype['valueOf'] !== "function") $ERROR('#6: typeof Boolean.prototype["valueOf"] === "function". Actual: ' + (typeof Boolean.prototype["valueOf"] )); -if (typeof Boolean.prototype.toString !== "function") $ERROR('#7: typeof Boolean.prototype.toString === "function". Actual: ' + (typeof Boolean.prototype.toString )); -if (typeof Boolean.prototype['toString'] !== "function") $ERROR('#8: typeof Boolean.prototype["toString"] === "function". Actual: ' + (typeof Boolean.prototype["toString"] )); - diff --git a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.1_Property_Accessors/S11.2.1_A4_T7.js b/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.1_Property_Accessors/S11.2.1_A4_T7.js deleted file mode 100644 index 829323659..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.1_Property_Accessors/S11.2.1_A4_T7.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.2.1_A4_T7; -* @section: 11.2.1; -* @assertion: Check type of various properties; -* @description: Checking properties of the Number object; -*/ - -//CHECK#1-16 -if (typeof Number.MAX_VALUE !== "number") $ERROR('#1: typeof Number.MAX_VALUE === "number". Actual: ' + (typeof Number.MAX_VALUE )); -if (typeof Number['MAX_VALUE'] !== "number") $ERROR('#2: typeof Number["MAX_VALUE"] === "number". Actual: ' + (typeof Number["MAX_VALUE"] )); -if (typeof Number.MIN_VALUE !== "number") $ERROR('#3: typeof Number.MIN_VALUE === "number". Actual: ' + (typeof Number.MIN_VALUE )); -if (typeof Number['MIN_VALUE'] !== "number") $ERROR('#4: typeof Number["MIN_VALUE"] === "number". Actual: ' + (typeof Number["MIN_VALUE"] )); -if (typeof Number.NaN !== "number") $ERROR('#5: typeof Number.NaN === "number". Actual: ' + (typeof Number.NaN )); -if (typeof Number['NaN'] !== "number") $ERROR('#6: typeof Number["NaN"] === "number". Actual: ' + (typeof Number["NaN"] )); -if (typeof Number.NEGATIVE_INFINITY !== "number") $ERROR('#7: typeof Number.NEGATIVE_INFINITY === "number". Actual: ' + (typeof Number.NEGATIVE_INFINITY )); -if (typeof Number['NEGATIVE_INFINITY'] !== "number") $ERROR('#8: typeof Number["NEGATIVE_INFINITY"] === "number". Actual: ' + (typeof Number["NEGATIVE_INFINITY"] )); -if (typeof Number.POSITIVE_INFINITY !== "number") $ERROR('#9: typeof Number.POSITIVE_INFINITY === "number". Actual: ' + (typeof Number.POSITIVE_INFINITY )); -if (typeof Number['POSITIVE_INFINITY'] !== "number") $ERROR('#10: typeof Number["POSITIVE_INFINITY"] === "number". Actual: ' + (typeof Number["POSITIVE_INFINITY"] )); -if (typeof Number.prototype.toString !== "function") $ERROR('#11: typeof Number.prototype.toString === "function". Actual: ' + (typeof Number.prototype.toString )); -if (typeof Number.prototype['toString'] !== "function") $ERROR('#12: typeof Number.prototype["toString"] === "function". Actual: ' + (typeof Number.prototype["toString"] )); -if (typeof Number.prototype.constructor !== "function") $ERROR('#13: typeof Number.prototype.constructor === "function". Actual: ' + (typeof Number.prototype.constructor )); -if (typeof Number.prototype['constructor'] !== "function") $ERROR('#14: typeof Number.prototype["constructor"] === "function". Actual: ' + (typeof Number.prototype["constructor"] )); -if (typeof Number.prototype.valueOf !== "function") $ERROR('#15: typeof Number.prototype.valueOf === "function". Actual: ' + (typeof Number.prototype.valueOf )); -if (typeof Number.prototype['valueOf'] !== "function") $ERROR('#16: typeof Number.prototype["valueOf"] === "function". Actual: ' + (typeof Number.prototype["valueOf"] )); - - diff --git a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.1_Property_Accessors/S11.2.1_A4_T8.js b/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.1_Property_Accessors/S11.2.1_A4_T8.js deleted file mode 100644 index f8beae34a..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.1_Property_Accessors/S11.2.1_A4_T8.js +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.2.1_A4_T8; -* @section: 11.2.1; -* @assertion: Check type of various properties; -* @description: Checking properties of the Math Object; -*/ - -//CHECK#1-52 -if (typeof Math.E !== "number") $ERROR('#1: typeof Math.E === "number". Actual: ' + (typeof Math.E )); -if (typeof Math['E'] !== "number") $ERROR('#2: typeof Math["E"] === "number". Actual: ' + (typeof Math["E"] )); -if (typeof Math.LN10 !== "number") $ERROR('#3: typeof Math.LN10 === "number". Actual: ' + (typeof Math.LN10 )); -if (typeof Math['LN10'] !== "number") $ERROR('#4: typeof Math["LN10"] === "number". Actual: ' + (typeof Math["LN10"] )); -if (typeof Math.LN2 !== "number") $ERROR('#5: typeof Math.LN2 === "number". Actual: ' + (typeof Math.LN2 )); -if (typeof Math['LN2'] !== "number") $ERROR('#6: typeof Math["LN2"] === "number". Actual: ' + (typeof Math["LN2"] )); -if (typeof Math.LOG2E !== "number") $ERROR('#7: typeof Math.LOG2E === "number". Actual: ' + (typeof Math.LOG2E )); -if (typeof Math['LOG2E'] !== "number") $ERROR('#8: typeof Math["LOG2E"] === "number". Actual: ' + (typeof Math["LOG2E"] )); -if (typeof Math.LOG10E !== "number") $ERROR('#9: typeof Math.LOG10E === "number". Actual: ' + (typeof Math.LOG10E )); -if (typeof Math['LOG10E'] !== "number") $ERROR('#10: typeof Math["LOG10E"] === "number". Actual: ' + (typeof Math["LOG10E"] )); -if (typeof Math.PI !== "number") $ERROR('#11: typeof Math.PI === "number". Actual: ' + (typeof Math.PI )); -if (typeof Math['PI'] !== "number") $ERROR('#12: typeof Math["PI"] === "number". Actual: ' + (typeof Math["PI"] )); -if (typeof Math.SQRT1_2 !== "number") $ERROR('#13: typeof Math.SQRT1_2 === "number". Actual: ' + (typeof Math.SQRT1_2 )); -if (typeof Math['SQRT1_2'] !== "number") $ERROR('#14: typeof Math["SQRT1_2"] === "number". Actual: ' + (typeof Math["SQRT1_2"] )); -if (typeof Math.SQRT2 !== "number") $ERROR('#15: typeof Math.SQRT2 === "number". Actual: ' + (typeof Math.SQRT2 )); -if (typeof Math['SQRT2'] !== "number") $ERROR('#16: typeof Math["SQRT2"] === "number". Actual: ' + (typeof Math["SQRT2"] )); -if (typeof Math.abs !== "function") $ERROR('#17: typeof Math.abs === "function". Actual: ' + (typeof Math.abs )); -if (typeof Math['abs'] !== "function") $ERROR('#18: typeof Math["abs"] === "function". Actual: ' + (typeof Math["abs"] )); -if (typeof Math.acos !== "function") $ERROR('#19: typeof Math.acos === "function". Actual: ' + (typeof Math.acos )); -if (typeof Math['acos'] !== "function") $ERROR('#20: typeof Math["acos"] === "function". Actual: ' + (typeof Math["acos"] )); -if (typeof Math.asin !== "function") $ERROR('#21: typeof Math.asin === "function". Actual: ' + (typeof Math.asin )); -if (typeof Math['asin'] !== "function") $ERROR('#22: typeof Math["asin"] === "function". Actual: ' + (typeof Math["asin"] )); -if (typeof Math.atan !== "function") $ERROR('#23: typeof Math.atan === "function". Actual: ' + (typeof Math.atan )); -if (typeof Math['atan'] !== "function") $ERROR('#24: typeof Math["atan"] === "function". Actual: ' + (typeof Math["atan"] )); -if (typeof Math.atan2 !== "function") $ERROR('#25: typeof Math.atan2 === "function". Actual: ' + (typeof Math.atan2 )); -if (typeof Math['atan2'] !== "function") $ERROR('#26: typeof Math["atan2"] === "function". Actual: ' + (typeof Math["atan2"] )); -if (typeof Math.ceil !== "function") $ERROR('#27: typeof Math.ceil === "function". Actual: ' + (typeof Math.ceil )); -if (typeof Math['ceil'] !== "function") $ERROR('#28: typeof Math["ceil"] === "function". Actual: ' + (typeof Math["ceil"] )); -if (typeof Math.cos !== "function") $ERROR('#29: typeof Math.cos === "function". Actual: ' + (typeof Math.cos )); -if (typeof Math['cos'] !== "function") $ERROR('#30: typeof Math["cos"] === "function". Actual: ' + (typeof Math["cos"] )); -if (typeof Math.exp !== "function") $ERROR('#31: typeof Math.exp === "function". Actual: ' + (typeof Math.exp )); -if (typeof Math['exp'] !== "function") $ERROR('#32: typeof Math["exp"] === "function". Actual: ' + (typeof Math["exp"] )); -if (typeof Math.floor !== "function") $ERROR('#33: typeof Math.floor === "function". Actual: ' + (typeof Math.floor )); -if (typeof Math['floor'] !== "function") $ERROR('#34: typeof Math["floor"] === "function". Actual: ' + (typeof Math["floor"] )); -if (typeof Math.log !== "function") $ERROR('#35: typeof Math.log === "function". Actual: ' + (typeof Math.log )); -if (typeof Math['log'] !== "function") $ERROR('#36: typeof Math["log"] === "function". Actual: ' + (typeof Math["log"] )); -if (typeof Math.max !== "function") $ERROR('#37: typeof Math.max === "function". Actual: ' + (typeof Math.max )); -if (typeof Math['max'] !== "function") $ERROR('#38: typeof Math["max"] === "function". Actual: ' + (typeof Math["max"] )); -if (typeof Math.min !== "function") $ERROR('#39: typeof Math.min === "function". Actual: ' + (typeof Math.min )); -if (typeof Math['min'] !== "function") $ERROR('#40: typeof Math["min"] === "function". Actual: ' + (typeof Math["min"] )); -if (typeof Math.pow !== "function") $ERROR('#41: typeof Math.pow === "function". Actual: ' + (typeof Math.pow )); -if (typeof Math['pow'] !== "function") $ERROR('#42: typeof Math["pow"] === "function". Actual: ' + (typeof Math["pow"] )); -if (typeof Math.random !== "function") $ERROR('#43: typeof Math.random === "function". Actual: ' + (typeof Math.random )); -if (typeof Math['random'] !== "function") $ERROR('#44: typeof Math["random"] === "function". Actual: ' + (typeof Math["random"] )); -if (typeof Math.round !== "function") $ERROR('#45: typeof Math.round === "function". Actual: ' + (typeof Math.round )); -if (typeof Math['round'] !== "function") $ERROR('#46: typeof Math["round"] === "function". Actual: ' + (typeof Math["round"] )); -if (typeof Math.sin !== "function") $ERROR('#47: typeof Math.sin === "function". Actual: ' + (typeof Math.sin )); -if (typeof Math['sin'] !== "function") $ERROR('#48: typeof Math["sin"] === "function". Actual: ' + (typeof Math["sin"] )); -if (typeof Math.sqrt !== "function") $ERROR('#49: typeof Math.sqrt === "function". Actual: ' + (typeof Math.sqrt )); -if (typeof Math['sqrt'] !== "function") $ERROR('#50: typeof Math["sqrt"] === "function". Actual: ' + (typeof Math["sqrt"] )); -if (typeof Math.tan !== "function") $ERROR('#51: typeof Math.tan === "function". Actual: ' + (typeof Math.tan )); -if (typeof Math['tan'] !== "function") $ERROR('#52: typeof Math["tan"] === "function". Actual: ' + (typeof Math["tan"] )); - diff --git a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.1_Property_Accessors/S11.2.1_A4_T9.js b/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.1_Property_Accessors/S11.2.1_A4_T9.js deleted file mode 100644 index 68130741c..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.1_Property_Accessors/S11.2.1_A4_T9.js +++ /dev/null @@ -1,100 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.2.1_A4_T9; -* @section: 11.2.1; -* @assertion: Check type of various properties; -* @description: Checking properties of the Date object; -*/ - -//CHECK#1-86 -if (typeof Date.parse !== "function") $ERROR('#1: typeof Date.parse === "function". Actual: ' + (typeof Date.parse )); -if (typeof Date['parse'] !== "function") $ERROR('#2: typeof Date["parse"] === "function". Actual: ' + (typeof Date["parse"] )); -if (typeof Date.prototype !== "object") $ERROR('#3: typeof Date.prototype === "object". Actual: ' + (typeof Date.prototype )); -if (typeof Date['prototype'] !== "object") $ERROR('#4: typeof Date["prototype"] === "object". Actual: ' + (typeof Date["prototype"] )); -if (typeof Date.UTC !== "function") $ERROR('#5: typeof Date.UTC === "function". Actual: ' + (typeof Date.UTC )); -if (typeof Date['UTC'] !== "function") $ERROR('#6: typeof Date["UTC"] === "function". Actual: ' + (typeof Date["UTC"] )); -if (typeof Date.prototype.constructor !== "function") $ERROR('#7: typeof Date.prototype.constructor === "funvtion". Actual: ' + (typeof Date.prototype.constructor )); -if (typeof Date.prototype['constructor'] !== "function") $ERROR('#8: typeof Date.prototype["constructor"] === "function". Actual: ' + (typeof Date.prototype["constructor"] )); -if (typeof Date.prototype.toString !== "function") $ERROR('#9: typeof Date.prototype.toString === "function". Actual: ' + (typeof Date.prototype.toString )); -if (typeof Date.prototype['toString'] !== "function") $ERROR('#10: typeof Date.prototype["toString"] === "function". Actual: ' + (typeof Date.prototype["toString"] )); -if (typeof Date.prototype.valueOf !== "function") $ERROR('#11: typeof Date.prototype.valueOf === "function". Actual: ' + (typeof Date.prototype.valueOf )); -if (typeof Date.prototype['valueOf'] !== "function") $ERROR('#12: typeof Date.prototype["valueOf"] === "function". Actual: ' + (typeof Date.prototype["valueOf"] )); -if (typeof Date.prototype.getTime !== "function") $ERROR('#13: typeof Date.prototype.getTime === "function". Actual: ' + (typeof Date.prototype.getTime )); -if (typeof Date.prototype['getTime'] !== "function") $ERROR('#14: typeof Date.prototype["getTime"] === "function". Actual: ' + (typeof Date.prototype["getTime"] )); -if (typeof Date.prototype.getYear !== "function") $ERROR('#15: typeof Date.prototype.getYear === "function". Actual: ' + (typeof Date.prototype.getYear )); -if (typeof Date.prototype['getYear'] !== "function") $ERROR('#16: typeof Date.prototype["getYear"] === "function". Actual: ' + (typeof Date.prototype["getYear"] )); -if (typeof Date.prototype.getFullYear !== "function") $ERROR('#17: typeof Date.prototype.getFullYear === "function". Actual: ' + (typeof Date.prototype.getFullYear )); -if (typeof Date.prototype['getFullYear'] !== "function") $ERROR('#18: typeof Date.prototype["getFullYear"] === "function". Actual: ' + (typeof Date.prototype["getFullYear"] )); -if (typeof Date.prototype.getUTCFullYear !== "function") $ERROR('#19: typeof Date.prototype.getUTCFullYear === "function". Actual: ' + (typeof Date.prototype.getUTCFullYear )); -if (typeof Date.prototype['getUTCFullYear'] !== "function") $ERROR('#20: typeof Date.prototype["getUTCFullYear"] === "function". Actual: ' + (typeof Date.prototype["getUTCFullYear"] )); -if (typeof Date.prototype.getMonth !== "function") $ERROR('#21: typeof Date.prototype.getMonth === "function". Actual: ' + (typeof Date.prototype.getMonth )); -if (typeof Date.prototype['getMonth'] !== "function") $ERROR('#22: typeof Date.prototype["getMonth"] === "function". Actual: ' + (typeof Date.prototype["getMonth"] )); -if (typeof Date.prototype.getUTCMonth !== "function") $ERROR('#23: typeof Date.prototype.getUTCMonth === "function". Actual: ' + (typeof Date.prototype.getUTCMonth )); -if (typeof Date.prototype['getUTCMonth'] !== "function") $ERROR('#24: typeof Date.prototype["getUTCMonth"] === "function". Actual: ' + (typeof Date.prototype["getUTCMonth"] )); -if (typeof Date.prototype.getDate !== "function") $ERROR('#25: typeof Date.prototype.getDate === "function". Actual: ' + (typeof Date.prototype.getDate )); -if (typeof Date.prototype['getDate'] !== "function") $ERROR('#26: typeof Date.prototype["getDate"] === "function". Actual: ' + (typeof Date.prototype["getDate"] )); -if (typeof Date.prototype.getUTCDate !== "function") $ERROR('#27: typeof Date.prototype.getUTCDate === "function". Actual: ' + (typeof Date.prototype.getUTCDate )); -if (typeof Date.prototype['getUTCDate'] !== "function") $ERROR('#28: typeof Date.prototype["getUTCDate"] === "function". Actual: ' + (typeof Date.prototype["getUTCDate"] )); -if (typeof Date.prototype.getDay !== "function") $ERROR('#29: typeof Date.prototype.getDay === "function". Actual: ' + (typeof Date.prototype.getDay )); -if (typeof Date.prototype['getDay'] !== "function") $ERROR('#30: typeof Date.prototype["getDay"] === "function". Actual: ' + (typeof Date.prototype["getDay"] )); -if (typeof Date.prototype.getUTCDay !== "function") $ERROR('#31: typeof Date.prototype.getUTCDay === "function". Actual: ' + (typeof Date.prototype.getUTCDay )); -if (typeof Date.prototype['getUTCDay'] !== "function") $ERROR('#32: typeof Date.prototype["getUTCDay"] === "function". Actual: ' + (typeof Date.prototype["getUTCDay"] )); -if (typeof Date.prototype.getHours !== "function") $ERROR('#33: typeof Date.prototype.getHours === "function". Actual: ' + (typeof Date.prototype.getHours )); -if (typeof Date.prototype['getHours'] !== "function") $ERROR('#34: typeof Date.prototype["getHours"] === "function". Actual: ' + (typeof Date.prototype["getHours"] )); -if (typeof Date.prototype.getUTCHours !== "function") $ERROR('#35: typeof Date.prototype.getUTCHours === "function". Actual: ' + (typeof Date.prototype.getUTCHours )); -if (typeof Date.prototype['getUTCHours'] !== "function") $ERROR('#36: typeof Date.prototype["getUTCHours"] === "function". Actual: ' + (typeof Date.prototype["getUTCHours"] )); -if (typeof Date.prototype.getMinutes !== "function") $ERROR('#37: typeof Date.prototype.getMinutes === "function". Actual: ' + (typeof Date.prototype.getMinutes )); -if (typeof Date.prototype['getMinutes'] !== "function") $ERROR('#38: typeof Date.prototype["getMinutes"] === "function". Actual: ' + (typeof Date.prototype["getMinutes"] )); -if (typeof Date.prototype.getUTCMinutes !== "function") $ERROR('#39: typeof Date.prototype.getUTCMinutes === "function". Actual: ' + (typeof Date.prototype.getUTCMinutes )); -if (typeof Date.prototype['getUTCMinutes'] !== "function") $ERROR('#40: typeof Date.prototype["getUTCMinutes"] === "function". Actual: ' + (typeof Date.prototype["getUTCMinutes"] )); -if (typeof Date.prototype.getSeconds !== "function") $ERROR('#41: typeof Date.prototype.getSeconds === "function". Actual: ' + (typeof Date.prototype.getSeconds )); -if (typeof Date.prototype['getSeconds'] !== "function") $ERROR('#42: typeof Date.prototype["getSeconds"] === "function". Actual: ' + (typeof Date.prototype["getSeconds"] )); -if (typeof Date.prototype.getUTCSeconds !== "function") $ERROR('#43: typeof Date.prototype.getUTCSeconds === "function". Actual: ' + (typeof Date.prototype.getUTCSeconds )); -if (typeof Date.prototype['getUTCSeconds'] !== "function") $ERROR('#44: typeof Date.prototype["getUTCSeconds"] === "function". Actual: ' + (typeof Date.prototype["getUTCSeconds"] )); -if (typeof Date.prototype.getMilliseconds !== "function") $ERROR('#45: typeof Date.prototype.getMilliseconds === "function". Actual: ' + (typeof Date.prototype.getMilliseconds )); -if (typeof Date.prototype['getMilliseconds'] !== "function") $ERROR('#46: typeof Date.prototype["getMilliseconds"] === "function". Actual: ' + (typeof Date.prototype["getMilliseconds"] )); -if (typeof Date.prototype.getUTCMilliseconds !== "function") $ERROR('#47: typeof Date.prototype.getUTCMilliseconds === "function". Actual: ' + (typeof Date.prototype.getUTCMilliseconds )); -if (typeof Date.prototype['getUTCMilliseconds'] !== "function") $ERROR('#48: typeof Date.prototype["getUTCMilliseconds"] === "function". Actual: ' + (typeof Date.prototype["getUTCMilliseconds"] )); -if (typeof Date.prototype.setTime !== "function") $ERROR('#49: typeof Date.prototype.setTime === "function". Actual: ' + (typeof Date.prototype.setTime )); -if (typeof Date.prototype['setTime'] !== "function") $ERROR('#50: typeof Date.prototype["setTime"] === "function". Actual: ' + (typeof Date.prototype["setTime"] )); -if (typeof Date.prototype.setMilliseconds !== "function") $ERROR('#51: typeof Date.prototype.setMilliseconds === "function". Actual: ' + (typeof Date.prototype.setMilliseconds )); -if (typeof Date.prototype['setMilliseconds'] !== "function") $ERROR('#52: typeof Date.prototype["setMilliseconds"] === "function". Actual: ' + (typeof Date.prototype["setMilliseconds"] )); -if (typeof Date.prototype.setUTCMilliseconds !== "function") $ERROR('#53: typeof Date.prototype.setUTCMilliseconds === "function". Actual: ' + (typeof Date.prototype.setUTCMilliseconds )); -if (typeof Date.prototype['setUTCMilliseconds'] !== "function") $ERROR('#54: typeof Date.prototype["setUTCMilliseconds"] === "function". Actual: ' + (typeof Date.prototype["setUTCMilliseconds"] )); -if (typeof Date.prototype.setSeconds !== "function") $ERROR('#55: typeof Date.prototype.setSeconds === "function". Actual: ' + (typeof Date.prototype.setSeconds )); -if (typeof Date.prototype['setSeconds'] !== "function") $ERROR('#56: typeof Date.prototype["setSeconds"] === "function". Actual: ' + (typeof Date.prototype["setSeconds"] )); -if (typeof Date.prototype.setUTCSeconds !== "function") $ERROR('#57: typeof Date.prototype.setUTCSeconds === "function". Actual: ' + (typeof Date.prototype.setUTCSeconds )); -if (typeof Date.prototype['setUTCSeconds'] !== "function") $ERROR('#58: typeof Date.prototype["setUTCSeconds"] === "function". Actual: ' + (typeof Date.prototype["setUTCSeconds"] )); -if (typeof Date.prototype.setMinutes !== "function") $ERROR('#59: typeof Date.prototype.setMinutes === "function". Actual: ' + (typeof Date.prototype.setMinutes )); -if (typeof Date.prototype['setMinutes'] !== "function") $ERROR('#60: typeof Date.prototype["setMinutes"] === "function". Actual: ' + (typeof Date.prototype["setMinutes"] )); -if (typeof Date.prototype.setUTCMinutes !== "function") $ERROR('#61: typeof Date.prototype.setUTCMinutes === "function". Actual: ' + (typeof Date.prototype.setUTCMinutes )); -if (typeof Date.prototype['setUTCMinutes'] !== "function") $ERROR('#62: typeof Date.prototype["setUTCMinutes"] === "function". Actual: ' + (typeof Date.prototype["setUTCMinutes"] )); -if (typeof Date.prototype.setHours !== "function") $ERROR('#63: typeof Date.prototype.setHours === "function". Actual: ' + (typeof Date.prototype.setHours )); -if (typeof Date.prototype['setHours'] !== "function") $ERROR('#64: typeof Date.prototype["setHours"] === "function". Actual: ' + (typeof Date.prototype["setHours"] )); -if (typeof Date.prototype.setUTCHours !== "function") $ERROR('#65: typeof Date.prototype.setUTCHours === "function". Actual: ' + (typeof Date.prototype.setUTCHours )); -if (typeof Date.prototype['setUTCHours'] !== "function") $ERROR('#66: typeof Date.prototype["setUTCHours"] === "function". Actual: ' + (typeof Date.prototype["setUTCHours"] )); -if (typeof Date.prototype.setDate !== "function") $ERROR('#67: typeof Date.prototype.setDate === "function". Actual: ' + (typeof Date.prototype.setDate )); -if (typeof Date.prototype['setDate'] !== "function") $ERROR('#68: typeof Date.prototype["setDate"] === "function". Actual: ' + (typeof Date.prototype["setDate"] )); -if (typeof Date.prototype.setUTCDate !== "function") $ERROR('#69: typeof Date.prototype.setUTCDate === "function". Actual: ' + (typeof Date.prototype.setUTCDate )); -if (typeof Date.prototype['setUTCDate'] !== "function") $ERROR('#70: typeof Date.prototype["setUTCDate"] === "function". Actual: ' + (typeof Date.prototype["setUTCDate"] )); -if (typeof Date.prototype.setMonth !== "function") $ERROR('#71: typeof Date.prototype.setMonth === "function". Actual: ' + (typeof Date.prototype.setMonth )); -if (typeof Date.prototype['setMonth'] !== "function") $ERROR('#72: typeof Date.prototype["setMonth"] === "function". Actual: ' + (typeof Date.prototype["setMonth"] )); -if (typeof Date.prototype.setUTCMonth !== "function") $ERROR('#73: typeof Date.prototype.setUTCMonth === "function". Actual: ' + (typeof Date.prototype.setUTCMonth )); -if (typeof Date.prototype['setUTCMonth'] !== "function") $ERROR('#74: typeof Date.prototype["setUTCMonth"] === "function". Actual: ' + (typeof Date.prototype["setUTCMonth"] )); -if (typeof Date.prototype.setFullYear !== "function") $ERROR('#75: typeof Date.prototype.setFullYear === "function". Actual: ' + (typeof Date.prototype.setFullYear )); -if (typeof Date.prototype['setFullYear'] !== "function") $ERROR('#76: typeof Date.prototype["setFullYear"] === "function". Actual: ' + (typeof Date.prototype["setFullYear"] )); -if (typeof Date.prototype.setUTCFullYear !== "function") $ERROR('#77: typeof Date.prototype.setUTCFullYear === "function". Actual: ' + (typeof Date.prototype.setUTCFullYear )); -if (typeof Date.prototype['setUTCFullYear'] !== "function") $ERROR('#78: typeof Date.prototype["setUTCFullYear"] === "function". Actual: ' + (typeof Date.prototype["setUTCFullYear"] )); -if (typeof Date.prototype.setYear !== "function") $ERROR('#79: typeof Date.prototype.setYear === "function". Actual: ' + (typeof Date.prototype.setYear )); -if (typeof Date.prototype['setYear'] !== "function") $ERROR('#80: typeof Date.prototype["setYear"] === "function". Actual: ' + (typeof Date.prototype["setYear"] )); -if (typeof Date.prototype.toLocaleString !== "function") $ERROR('#81: typeof Date.prototype.toLocaleString === "function". Actual: ' + (typeof Date.prototype.toLocaleString )); -if (typeof Date.prototype['toLocaleString'] !== "function") $ERROR('#82: typeof Date.prototype["toLocaleString"] === "function". Actual: ' + (typeof Date.prototype["toLocaleString"] )); -if (typeof Date.prototype.toUTCString !== "function") $ERROR('#83: typeof Date.prototype.toUTCString === "function". Actual: ' + (typeof Date.prototype.toUTCString )); -if (typeof Date.prototype['toUTCString'] !== "function") $ERROR('#84: typeof Date.prototype["toUTCString"] === "function". Actual: ' + (typeof Date.prototype["toUTCString"] )); -if (typeof Date.prototype.toGMTString !== "function") $ERROR('#85: typeof Date.prototype.toGMTString === "function". Actual: ' + (typeof Date.prototype.toGMTString )); -if (typeof Date.prototype['toGMTString'] !== "function") $ERROR('#86: typeof Date.prototype["toGMTString"] === "function". Actual: ' + (typeof Date.prototype["toGMTString"] )); - - - diff --git a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.2_The_new_Operator/S11.2.2_A1.1.js b/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.2_The_new_Operator/S11.2.2_A1.1.js deleted file mode 100644 index c91374b44..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.2_The_new_Operator/S11.2.2_A1.1.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.2.2_A1.1; -* @section: 11.2.2, 7.2, 7.3; -* @assertion: White Space and Line Terminator between "new" and NewExpression are allowed; -* @description: Checking by using eval; -*/ - -//CHECK#1 -if (eval("new\u0009Number") != 0) { - $ERROR('#1: new\\u0009Number == 0'); -} - -//CHECK#2 -if (eval("new\u000BNumber") != 0) { - $ERROR('#2: new\\u000BNumber == 0'); -} - -//CHECK#3 -if (eval("new\u000CNumber") != 0) { - $ERROR('#3: new\\u000CNumber == 0'); -} - -//CHECK#4 -if (eval("new\u0020Number") != 0) { - $ERROR('#4: new\\u0020Number == 0'); -} - -//CHECK#5 -if (eval("new\u00A0Number") != 0) { - $ERROR('#5: new\\u00A0Number == 0'); -} - -//CHECK#6 -if (eval("new\u000ANumber") != 0) { - $ERROR('#6: new\\u000ANumber == 0'); -} - -//CHECK#7 -if (eval("new\u000DNumber") != 0) { - $ERROR('#7: new\\u000DNumber == 0'); -} - -//CHECK#8 -if (eval("new\u2028Number") != 0) { - $ERROR('#8: new\\u2028Number == 0'); -} - -//CHECK#9 -if (eval("new\u2029Number") != 0) { - $ERROR('#9: new\\u2029Number == 0'); -} - -//CHECK#10 -if (eval("new\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029Number") != 0) { - $ERROR('#10: new\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029Number == 0'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.2_The_new_Operator/S11.2.2_A1.2.js b/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.2_The_new_Operator/S11.2.2_A1.2.js deleted file mode 100644 index f8490a143..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.2_The_new_Operator/S11.2.2_A1.2.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.2.2_A1.2; -* @section: 11.2.2, 7.2, 7.3; -* @assertion: White Space and Line Terminator between "new" and MemberExpression are allowed; -* @description: Checking by using eval; -*/ - -//CHECK#1 -if (eval("new\u0009Number()") != 0) { - $ERROR('#1: new\\u0009Number == 0'); -} - -//CHECK#2 -if (eval("new\u000BNumber()") != 0) { - $ERROR('#2: new\\u000BNumber == 0'); -} - -//CHECK#3 -if (eval("new\u000CNumber()") != 0) { - $ERROR('#3: new\\u000CNumber == 0'); -} - -//CHECK#4 -if (eval("new\u0020Number()") != 0) { - $ERROR('#4: new\\u0020Number == 0'); -} - -//CHECK#5 -if (eval("new\u00A0Number()") != 0) { - $ERROR('#5: new\\u00A0Number == 0'); -} - -//CHECK#6 -if (eval("new\u000ANumber()") != 0) { - $ERROR('#6: new\\u000ANumber == 0'); -} - -//CHECK#7 -if (eval("new\u000DNumber()") != 0) { - $ERROR('#7: new\\u000DNumber == 0'); -} - -//CHECK#8 -if (eval("new\u2028Number()") != 0) { - $ERROR('#8: new\\u2028Number == 0'); -} - -//CHECK#9 -if (eval("new\u2029Number()") != 0) { - $ERROR('#9: new\\u2029Number == 0'); -} - -//CHECK#10 -if (eval("new\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029Number()") != 0) { - $ERROR('#10: new\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029Number == 0'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.2_The_new_Operator/S11.2.2_A2.js b/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.2_The_new_Operator/S11.2.2_A2.js deleted file mode 100644 index 29a859fe8..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.2_The_new_Operator/S11.2.2_A2.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.2.2_A2; -* @section: 11.2.2; -* @assertion: Operator "new" uses GetValue; -* @description: If GetBase(NewExpression) or GetBase(MemberExpression) is null, throw ReferenceError; -*/ - -//CHECK#1 -try { - new x; - $ERROR('#1.1: new x throw ReferenceError. Actual: ' + (new x)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: new x throw ReferenceError. Actual: ' + (e)); - } -} - -//CHECK#2 -try { - new x(); - $ERROR('#2: new x() throw ReferenceError'); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#2: new x() throw ReferenceError'); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.2_The_new_Operator/S11.2.2_A3_T1.js b/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.2_The_new_Operator/S11.2.2_A3_T1.js deleted file mode 100644 index b68d612e3..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.2_The_new_Operator/S11.2.2_A3_T1.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.2.2_A3_T1; -* @section: 11.2.2; -* @assertion: If Type(NewExpression) or Type(MemberExpression) is not Object, throw TypeError; -* @description: Checking boolean primitive case; -*/ - -//CHECK#1 -try { - new true; - $ERROR('#1: new true throw TypeError'); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1: new true throw TypeError'); - } -} - -//CHECK#2 -try { - var x = true; - new x; - $ERROR('#2: var x = true; new x throw TypeError'); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#2: var x = true; new x throw TypeError'); - } -} - -//CHECK#3 -try { - var x = true; - new x(); - $ERROR('#3: var x = true; new x() throw TypeError'); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#3: var x = true; new x() throw TypeError'); - } -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.2_The_new_Operator/S11.2.2_A3_T2.js b/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.2_The_new_Operator/S11.2.2_A3_T2.js deleted file mode 100644 index ec0af6515..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.2_The_new_Operator/S11.2.2_A3_T2.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.2.2_A3_T2; -* @section: 11.2.2; -* @assertion: If Type(NewExpression) or Type(MemberExpression) is not Object, throw TypeError; -* @description: Checking "number primitive" case; -*/ - -//CHECK#1 -try { - new 1; - $ERROR('#1: new 1 throw TypeError'); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1: new 1 throw TypeError'); - } -} - -//CHECK#2 -try { - var x = 1; - new x; - $ERROR('#2: var x = 1; new x throw TypeError'); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#2: var x = 1; new x throw TypeError'); - } -} - -//CHECK#3 -try { - var x = 1; - new x(); - $ERROR('#3: var x = 1; new x() throw TypeError'); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#3: var x = 1; new x() throw TypeError'); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.2_The_new_Operator/S11.2.2_A3_T3.js b/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.2_The_new_Operator/S11.2.2_A3_T3.js deleted file mode 100644 index a1329b9e2..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.2_The_new_Operator/S11.2.2_A3_T3.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.2.2_A3_T3; -* @section: 11.2.2; -* @assertion: If Type(NewExpression) or Type(MemberExpression) is not Object, throw TypeError; -* @description: Checking "string primitive" case; -*/ - -//CHECK#1 -try { - new 1; - $ERROR('#1: new "1" throw TypeError'); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1: new "1" throw TypeError'); - } -} - -//CHECK#2 -try { - var x = "1"; - new x; - $ERROR('#2: var x = "1"; new x throw TypeError'); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#2: var x = "1"; new x throw TypeError'); - } -} - -//CHECK#3 -try { - var x = "1"; - new x(); - $ERROR('#3: var x = "1"; new x() throw TypeError'); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#3: var x = "1"; new x() throw TypeError'); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.2_The_new_Operator/S11.2.2_A3_T4.js b/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.2_The_new_Operator/S11.2.2_A3_T4.js deleted file mode 100644 index d52006ebf..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.2_The_new_Operator/S11.2.2_A3_T4.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.2.2_A3_T4; -* @section: 11.2.2; -* @assertion: If Type(NewExpression) or Type(MemberExpression) is not Object, throw TypeError; -* @description: Checking "undefined" case; -*/ - -//CHECK#1 -try { - new undefined; - $ERROR('#1: new undefined throw TypeError'); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1: new undefined throw TypeError'); - } -} - -//CHECK#2 -try { - var x = undefined; - new x; - $ERROR('#2: var x = undefined; new x throw TypeError'); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#2: var x = undefined; new x throw TypeError'); - } -} - -//CHECK#3 -try { - var x = undefined; - new x(); - $ERROR('#3: var x = undefined; new x() throw TypeError'); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#3: var x = undefined; new x() throw TypeError'); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.2_The_new_Operator/S11.2.2_A3_T5.js b/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.2_The_new_Operator/S11.2.2_A3_T5.js deleted file mode 100644 index e3dd64090..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.2_The_new_Operator/S11.2.2_A3_T5.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.2.2_A3_T5; -* @section: 11.2.2; -* @assertion: If Type(NewExpression) or Type(MemberExpression) is not Object, throw TypeError; -* @description: Checking "null primitive" case; -*/ - -//CHECK#1 -try { - new null; - $ERROR('#1: new null throw TypeError'); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1: new null throw TypeError'); - } -} - -//CHECK#2 -try { - var x = null; - new x; - $ERROR('#2: var x = null; new x throw TypeError'); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#2: var x = null; new x throw TypeError'); - } -} - -//CHECK#3 -try { - var x = null; - new x(); - $ERROR('#3: var x = null; new x() throw TypeError'); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#3: var x = null; new x() throw TypeError'); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.2_The_new_Operator/S11.2.2_A4_T1.js b/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.2_The_new_Operator/S11.2.2_A4_T1.js deleted file mode 100644 index 0cc744c6f..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.2_The_new_Operator/S11.2.2_A4_T1.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.2.2_A4_T1; -* @section: 11.2.2; -* @assertion: If NewExpression or MemberExpression does not implement internal [[Construct]] method, throw TypeError; -* @description: Checking Boolean object case; -*/ - -//CHECK#1 -try { - new new Boolean(true); - $ERROR('#1: new new Boolean(true) throw TypeError'); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1: new new Boolean(true) throw TypeError'); - } -} - -//CHECK#2 -try { - var x = new Boolean(true); - new x; - $ERROR('#2: var x = new Boolean(true); new x throw TypeError'); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#2: var x = new Boolean(true); new x throw TypeError'); - } -} - -//CHECK#3 -try { - var x = new Boolean(true); - new x(); - $ERROR('#3: var x = new Boolean(true); new x() throw TypeError'); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#3: var x = new Boolean(true); new x() throw TypeError'); - } -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.2_The_new_Operator/S11.2.2_A4_T2.js b/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.2_The_new_Operator/S11.2.2_A4_T2.js deleted file mode 100644 index 6ff4f5319..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.2_The_new_Operator/S11.2.2_A4_T2.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.2.2_A4_T2; -* @section: 11.2.2; -* @assertion: If NewExpression or MemberExpression does not implement internal [[Construct]] method, throw TypeError; -* @description: Checking Number object case; -*/ - -//CHECK#1 -try { - new new Number(1); - $ERROR('#1: new new Number(1) throw TypeError'); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1: new new Number(1) throw TypeError'); - } -} - -//CHECK#2 -try { - var x = new Number(1); - new x; - $ERROR('#2: var x = new Number(1); new x throw TypeError'); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#2: var x = new Number(1); new x throw TypeError'); - } -} - -//CHECK#3 -try { - var x = new Number(1); - new x(); - $ERROR('#3: var x = new Number(1); new x() throw TypeError'); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#3: var x = new Number(1); new x() throw TypeError'); - } -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.2_The_new_Operator/S11.2.2_A4_T3.js b/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.2_The_new_Operator/S11.2.2_A4_T3.js deleted file mode 100644 index 5c79e5ead..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.2_The_new_Operator/S11.2.2_A4_T3.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.2.2_A4_T3; -* @section: 11.2.2; -* @assertion: If NewExpression or MemberExpression does not implement internal [[Construct]] method, throw TypeError; -* @description: Checking String object case; -*/ - -//CHECK#1 -try { - new new String("1"); - $ERROR('#1: new new String("1") throw TypeError'); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1: new new String("1") throw TypeError'); - } -} - -//CHECK#2 -try { - var x = new String("1"); - new x; - $ERROR('#2: var x = new String("1"); new x throw TypeError'); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#2: var x = new String("1"); new x throw TypeError'); - } -} - -//CHECK#3 -try { - var x = new String("1"); - new x(); - $ERROR('#3: var x = new String("1"); new x() throw TypeError'); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#3: var x = new String("1"); new x() throw TypeError'); - } -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.2_The_new_Operator/S11.2.2_A4_T4.js b/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.2_The_new_Operator/S11.2.2_A4_T4.js deleted file mode 100644 index 21a066a86..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.2_The_new_Operator/S11.2.2_A4_T4.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.2.2_A4_T4; -* @section: 11.2.2; -* @assertion: If NewExpression or MemberExpression does not implement internal [[Construct]] method, throw TypeError; -* @description: Checking Global object case; -*/ - -//CHECK#1 -try { - new this; - $ERROR('#1: new this throw TypeError'); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1: new this throw TypeError'); - } -} - -//CHECK#2 -try { - new this(); - $ERROR('#2: new this() throw TypeError'); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#2: new this() throw TypeError'); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.2_The_new_Operator/S11.2.2_A4_T5.js b/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.2_The_new_Operator/S11.2.2_A4_T5.js deleted file mode 100644 index 11ef6f01d..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.2_The_new_Operator/S11.2.2_A4_T5.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.2.2_A4_T5; -* @section: 11.2.2; -* @assertion: If NewExpression or MemberExpression does not implement internal [[Construct]] method, throw TypeError; -* @description: Checking Math object case; -*/ - -//CHECK#1 -try { - new Math; - $ERROR('#1: new Math throw TypeError'); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1: new Math throw TypeError'); - } -} - -//CHECK#2 -try { - new new Math(); - $ERROR('#2: new new Math() throw TypeError'); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#2: new new Math() throw TypeError'); - } -} - -//CHECK#3 -try { - var x = new Math(); - new x(); - $ERROR('#3: var x = new Math(); new x() throw TypeError'); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#3: var x = new Math(); new x() throw TypeError'); - } -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.3_Function_Calls/S11.2.3_A1.js b/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.3_Function_Calls/S11.2.3_A1.js deleted file mode 100644 index a6dfa4f63..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.3_Function_Calls/S11.2.3_A1.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.2.3_A1; -* @section: 11.2.3, 7.2, 7.3; -* @assertion: White Space and Line Terminator between MemberExpression and Arguments are allowed; -* @description: Checking by using eval; -*/ - -//CHECK#1 -if (eval("Number\u0009()") !== 0) { - $ERROR('#1: Number\\u0009() === 0'); -} - -//CHECK#2 -if (eval("Number\u000B()") !== 0) { - $ERROR('#2: Number\\u000B() === 0'); -} - -//CHECK#3 -if (eval("Number\u000C()") !== 0) { - $ERROR('#3: Number\\u000C() === 0'); -} - -//CHECK#4 -if (eval("Number\u0020()") !== 0) { - $ERROR('#4: Number\\u0020 === 0'); -} - -//CHECK#5 -if (eval("Number\u00A0()") !== 0) { - $ERROR('#5: Number\\u00A0() === 0'); -} - -//CHECK#6 -if (eval("Number\u000A()") !== 0) { - $ERROR('#6: Number\\u000A() === 0'); -} - -//CHECK#7 -if (eval("Number\u000D()") !== 0) { - $ERROR('#7: Number\\u000D() === 0'); -} - -//CHECK#8 -if (eval("Number\u2028()") !== 0) { - $ERROR('#8: Number\\u2028() === 0'); -} - -//CHECK#9 -if (eval("Number\u2029()") !== 0) { - $ERROR('#9: Number\\u2029() === 0'); -} - -//CHECK#10 -if (eval("Number\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029()") !== 0) { - $ERROR('#10: Number\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029() === 0'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.3_Function_Calls/S11.2.3_A2.js b/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.3_Function_Calls/S11.2.3_A2.js deleted file mode 100644 index 632cda30c..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.3_Function_Calls/S11.2.3_A2.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.2.3_A2; -* @section: 11.2.3; -* @assertion: CallExpression : MemberExpression Arguments uses GetValue; -* @description: If GetBase(MemberExpression) is null, throw ReferenceError; -*/ - -//CHECK#1 -try { - x(); - $ERROR('#1.1: x() throw ReferenceError. Actual: ' + (x())); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: x() throw ReferenceError. Actual: ' + (e)); - } -} - -//CHECK#2 -try { - x(1,2,3); - $ERROR('#2.1: x(1,2,3) throw ReferenceError. Actual: ' + (x(1,2,3))); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#2.2: x(1,2,3) throw ReferenceError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.3_Function_Calls/S11.2.3_A3_T1.js b/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.3_Function_Calls/S11.2.3_A3_T1.js deleted file mode 100644 index 57a5291cc..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.3_Function_Calls/S11.2.3_A3_T1.js +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.2.3_A3_T1; -* @section: 11.2.3; -* @assertion: If MemberExpression is not Object, throw TypeError; -* @description: Checking "boolean primitive" case; -*/ - -//CHECK#1 -try { - true(); - $ERROR('#1.1: true() throw TypeError. Actual: ' + (true())); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1.2: true() throw TypeError. Actual: ' + (e)); - } -} - -//CHECK#2 -try { - var x = true; - x(); - $ERROR('#2.1: var x = true; x() throw TypeError. Actual: ' + (x())) -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#2.2: var x = true; x() throw TypeError. Actual: ' + (e)) - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.3_Function_Calls/S11.2.3_A3_T2.js b/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.3_Function_Calls/S11.2.3_A3_T2.js deleted file mode 100644 index b8f9d2c5e..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.3_Function_Calls/S11.2.3_A3_T2.js +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.2.3_A3_T2; -* @section: 11.2.3; -* @assertion: If MemberExpression is not Object, throw TypeError; -* @description: Checking "number primitive" case; -*/ - -//CHECK#1 -try { - 1(); - $ERROR('#1.1: 1() throw TypeError. Actual: ' + (1())); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1.2: 1() throw TypeError. Actual: ' + (e)); - } -} - -//CHECK#2 -try { - var x = 1; - x(); - $ERROR('#2.1: var x = 1; x() throw TypeError. Actual: ' + (x())); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#2.2: var x = 1; x() throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.3_Function_Calls/S11.2.3_A3_T3.js b/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.3_Function_Calls/S11.2.3_A3_T3.js deleted file mode 100644 index 7f31df4d0..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.3_Function_Calls/S11.2.3_A3_T3.js +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.2.3_A3_T3; -* @section: 11.2.3; -* @assertion: If MemberExpression is not Object, throw TypeError; -* @description: Checking "string primitive" case; -*/ - -//CHECK#1 -try { - "1"(); - $ERROR('#1.1: "1"() throw TypeError. Actual: ' + ("1"())); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1.2: "1"() throw TypeError. Actual: ' + (e)); - } -} - -//CHECK#2 -try { - var x = "1"; - x(); - $ERROR('#2.1: var x = "1"; x() throw TypeError. Actual: ' + (x())); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#2.2: var x = "1"; x() throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.3_Function_Calls/S11.2.3_A3_T4.js b/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.3_Function_Calls/S11.2.3_A3_T4.js deleted file mode 100644 index eb392bc32..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.3_Function_Calls/S11.2.3_A3_T4.js +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.2.3_A3_T4; -* @section: 11.2.3; -* @assertion: If MemberExpression is not Object, throw TypeError; -* @description: Checking "undefined" case; -*/ - -//CHECK#1 -try { - undefined(); - $ERROR('#1.1: undefined() throw TypeError. Actual: ' + (e)); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1.2: undefined() throw TypeError. Actual: ' + (e)); - } -} - -//CHECK#2 -try { - var x = undefined; - x(); - $ERROR('#2.1: var x = undefined; x() throw TypeError. Actual: ' + (e)); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#2.2: var x = undefined; x() throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.3_Function_Calls/S11.2.3_A3_T5.js b/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.3_Function_Calls/S11.2.3_A3_T5.js deleted file mode 100644 index e281e2c52..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.3_Function_Calls/S11.2.3_A3_T5.js +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.2.3_A3_T5; -* @section: 11.2.3; -* @assertion: If MemberExpression is not Object, throw TypeError; -* @description: Checking "null" case; -*/ - -//CHECK#1 -try { - null(); - $ERROR('#1.1: null() throw TypeError. Actual: ' + (null())); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1.2: null() throw TypeError. Actual: ' + (e)); - } -} - -//CHECK#2 -try { - var x = null; - x(); - $ERROR('#2.1: var x = null; x() throw TypeError. Actual: ' + (x())); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#2.2: var x = null; x() throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.3_Function_Calls/S11.2.3_A4_T1.js b/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.3_Function_Calls/S11.2.3_A4_T1.js deleted file mode 100644 index 3d6889da2..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.3_Function_Calls/S11.2.3_A4_T1.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.2.3_A4_T1; -* @section: 11.2.3; -* @assertion: If MemberExpression does not implement the internal [[Call]] method, throw TypeError; -* @description: Checking Boolean object case; -*/ - -//CHECK#1 -try { - new Boolean(true)(); - $ERROR('#1.1: new Boolean(true)() throw TypeError. Actual: ' + (new Boolean(true)())); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1.2: new Boolean(true)() throw TypeError. Actual: ' + (e)); - } -} - -//CHECK#2 -try { - var x = new Boolean(true); - x(); - $ERROR('#2.1: var x = new Boolean(true); x() throw TypeError. Actual: ' + (x())); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#2.2: var x = new Boolean(true); x() throw TypeError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.3_Function_Calls/S11.2.3_A4_T2.js b/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.3_Function_Calls/S11.2.3_A4_T2.js deleted file mode 100644 index 3daf4be0f..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.3_Function_Calls/S11.2.3_A4_T2.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.2.3_A4_T2; -* @section: 11.2.3; -* @assertion: If MemberExpression does not implement the internal [[Call]] method, throw TypeError; -* @description: Checking Number object case; -*/ - -//CHECK#1 -try { - new Number(1)(); - $ERROR('#1.1: new Number(1)() throw TypeError. Actual: ' + (new Number(1)())); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1.2: new Number(1)() throw TypeError. Actual: ' + (e)); - } -} - -//CHECK#2 -try { - var x = new Number(1); - x(); - $ERROR('#2.1: var x = new Number(1); x() throw TypeError. Actual: ' + (x())); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#2.2: var x = new Number(1); x() throw TypeError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.3_Function_Calls/S11.2.3_A4_T3.js b/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.3_Function_Calls/S11.2.3_A4_T3.js deleted file mode 100644 index 240d913eb..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.3_Function_Calls/S11.2.3_A4_T3.js +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.2.3_A4_T3; -* @section: 11.2.3; -* @assertion: If MemberExpression does not implement the internal [[Call]] method, throw TypeError; -* @description: Checking String object case; -*/ - -//CHECK#1 -try { - new String("1")(); - $ERROR('#1.1: new String("1")() throw TypeError. Actual: ' + (new String("1")())); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1.2: new String("1")() throw TypeError. Actual: ' + (e)); - } -} - -//CHECK#2 -try { - var x = new String("1"); - x(); - $ERROR('#2.1: var x = new String("1"); x() throw TypeError. Actual: ' + (x())); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#2.2: var x = new String("1"); x() throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.3_Function_Calls/S11.2.3_A4_T4.js b/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.3_Function_Calls/S11.2.3_A4_T4.js deleted file mode 100644 index 65e142b1a..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.3_Function_Calls/S11.2.3_A4_T4.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.2.3_A4_T4; -* @section: 11.2.3; -* @assertion: If MemberExpression does not implement the internal [[Call]] method, throw TypeError; -* @description: Checking Global object case; -*/ - -//CHECK#1 -try { - this(); - $ERROR('#1.1: this() throw TypeError. Actual: ' + (this())); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1.2: this() throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.3_Function_Calls/S11.2.3_A4_T5.js b/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.3_Function_Calls/S11.2.3_A4_T5.js deleted file mode 100644 index 96effc8e2..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.3_Function_Calls/S11.2.3_A4_T5.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.2.3_A4_T5; -* @section: 11.2.3; -* @assertion: If MemberExpression does not implement the internal [[Call]] method, throw TypeError; -* @description: Checking Math object case; -*/ - -//CHECK#1 -try { - Math(); - $ERROR('#1.1: Math() throw TypeError. Actual: ' + (Math())); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1.2: Math() throw TypeError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.4_Argument_Lists/S11.2.4_A1.1_T1.js b/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.4_Argument_Lists/S11.2.4_A1.1_T1.js deleted file mode 100644 index f1cffef9e..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.4_Argument_Lists/S11.2.4_A1.1_T1.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.2.4_A1.1_T1; -* @section: 11.2.4, 11.2.3, 10.1.8; -* @assertion: Arguments : (); -* @description: Function is declared with no FormalParameterList; -*/ - -function f_arg() { - return arguments; -} - -//CHECK#1 -if (f_arg().length !== 0) { - $ERROR('#1: function f_arg() {return arguments;} f_arg().length === 0. Actual: ' + (f_arg().length)); -} - -//CHECK#2 -if (f_arg()[0] !== undefined) { - $ERROR('#2: function f_arg() {return arguments;} f_arg()[0] === undefined. Actual: ' + (f_arg()[0])); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.4_Argument_Lists/S11.2.4_A1.1_T2.js b/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.4_Argument_Lists/S11.2.4_A1.1_T2.js deleted file mode 100644 index 03e2fd0fb..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.4_Argument_Lists/S11.2.4_A1.1_T2.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.2.4_A1.1_T2; -* @section: 11.2.4, 11.2.3, 10.1.8; -* @assertion: Arguments : (); -* @description: Function is declared with FormalParameterList; -*/ - -function f_arg(x,y) { - return arguments; -} - -//CHECK#1 -if (f_arg().length !== 0) { - $ERROR('#1: function f_arg(x,y) {return arguments;} f_arg().length === 0. Actual: ' + (f_arg().length)); -} - -//CHECK#2 -if (f_arg()[0] !== undefined) { - $ERROR('#2: function f_arg(x,y) {return arguments;} f_arg()[0] === undefined. Actual: ' + (f_arg()[0])); -} - -//CHECK#3 -if (f_arg.length !== 2) { - $ERROR('#3: function f_arg(x,y) {return arguments;} f_arg.length === 2. Actual: ' + (f_arg.length)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.4_Argument_Lists/S11.2.4_A1.2_T1.js b/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.4_Argument_Lists/S11.2.4_A1.2_T1.js deleted file mode 100644 index f4417f376..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.4_Argument_Lists/S11.2.4_A1.2_T1.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.2.4_A1.2_T1; -* @section: 11.2.4, 11.2.3, 10.1.8; -* @assertion: Arguments : (ArgumentList); -* @description: Function is declared with no FormalParameterList; -*/ - -f_arg = function() { - return arguments; -} - -//CHECK#1 -if (f_arg(1,2,3).length !== 3) { - $ERROR('#1: f_arg = function()() {return arguments;} f_arg(1,2,3).length === 3. Actual: ' + (f_arg(1,2,3).length)); -} - -//CHECK#2 -if (f_arg(1,2,3)[0] !== 1) { - $ERROR('#1: f_arg = function()() {return arguments;} f_arg(1,2,3)[0] === 1. Actual: ' + (f_arg(1,2,3)[0])); -} - -//CHECK#3 -if (f_arg(1,2,3)[1] !== 2) { - $ERROR('#3: f_arg = function()() {return arguments;} f_arg(1,2,3)[1] === 2. Actual: ' + (f_arg(1,2,3)[1])); -} - -//CHECK#4 -if (f_arg(1,2,3)[2] !== 3) { - $ERROR('#4: f_arg = function()() {return arguments;} f_arg(1,2,3)[2] === 3. Actual: ' + (f_arg(1,2,3)[2])); -} - -//CHECK#5 -if (f_arg(1,2,3)[3] !== undefined) { - $ERROR('#5: f_arg = function()() {return arguments;} f_arg(1,2,3)[3] === undefined. Actual: ' + (f_arg(1,2,3)[3])); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.4_Argument_Lists/S11.2.4_A1.2_T2.js b/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.4_Argument_Lists/S11.2.4_A1.2_T2.js deleted file mode 100644 index ed9b24b23..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.4_Argument_Lists/S11.2.4_A1.2_T2.js +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.2.4_A1.2_T2; -* @section: 11.2.4, 11.2.3, 10.1.8; -* @assertion: Arguments : (ArgumentList); -* @description: Function is declared with FormalParameterList; -*/ - -f_arg = function(x,y) { - return arguments; -} - -//CHECK#1 -if (f_arg(1,2,3).length !== 3) { - $ERROR('#1: f_arg = function(x,y) {return arguments;} f_arg(1,2,3).length === 3. Actual: ' + (f_arg(1,2,3).length)); -} - -//CHECK#2 -if (f_arg(1)[0] !== 1) { - $ERROR('#1: f_arg = function(x,y) {return arguments;} f_arg(1)[0] === 1. Actual: ' + (f_arg(1)[0])); -} - -//CHECK#3 -if (f_arg(1,2)[1] !== 2) { - $ERROR('#3: f_arg = function(x,y) {return arguments;} f_arg(1,2)[1] === 2. Actual: ' + (f_arg(1,2)[1])); -} - -//CHECK#4 -if (f_arg(1,2,3)[2] !== 3) { - $ERROR('#4: f_arg = function(x,y) {return arguments;} f_arg(1,2,3)[2] === 3. Actual: ' + (f_arg(1,2,3)[2])); -} - -//CHECK#5 -if (f_arg(1,2,3)[3] !== undefined) { - $ERROR('#5: f_arg = function(x,y) {return arguments;} f_arg(1,2,3)[3] === undefined. Actual: ' + (f_arg(1,2,3)[3])); -} - -//CHECK#6 -if (f_arg.length !== 2) { - $ERROR('#6: f_arg = function(x,y) {return arguments;} f_arg.length === 2. Actual: ' + (f_arg.length)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.4_Argument_Lists/S11.2.4_A1.3_T1.js b/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.4_Argument_Lists/S11.2.4_A1.3_T1.js deleted file mode 100644 index 917854f14..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.4_Argument_Lists/S11.2.4_A1.3_T1.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.2.4_A1.3_T1; -* @section: 11.2.4, 11.2.3, 10.1.8; -* @assertion: Arguments : (ArgumentList : ArgumentList,, AssignmentExpression) is a bad syntax; -* @description: incorrect syntax; -* @negative; -*/ - -function f_arg() { -} - -f_arg(1,,2); diff --git a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.4_Argument_Lists/S11.2.4_A1.4_T1.js b/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.4_Argument_Lists/S11.2.4_A1.4_T1.js deleted file mode 100644 index c281410b4..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.4_Argument_Lists/S11.2.4_A1.4_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.2.4_A1.4_T1; -* @section: 11.2.4, 11.2.3, 10.1.8; -* @assertion: Arguments : (ArgumentList : ArgumentList, AssignmentExpression); -* @description: Return an internal list whose length is one greater than the -* length of ArgumentList and whose items are the items of ArgumentList, in order, -* followed at the end by GetValue(AssignmentExpression), which is the last item of -* the new list; -*/ - -function f_arg() { -} - -//CHECK#1 -f_arg(x=1,x); diff --git a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.4_Argument_Lists/S11.2.4_A1.4_T2.js b/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.4_Argument_Lists/S11.2.4_A1.4_T2.js deleted file mode 100644 index 76b6b41f9..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.4_Argument_Lists/S11.2.4_A1.4_T2.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.2.4_A1.4_T2; -* @section: 11.2.4, 11.2.3, 10.1.8; -* @assertion: Arguments : (ArgumentList : ArgumentList, AssignmentExpression); -* @description: Return an internal list whose length is one greater than the -* length of ArgumentList and whose items are the items of ArgumentList, in order, -* followed at the end by GetValue(AssignmentExpression), which is the last item of -* the new list; -*/ - -function f_arg() { -} - -//CHECK#1 -try { - f_arg(x,x=1); - $ERROR('#1.1: function f_arg() {} f_arg(x,x=1) throw ReferenceError. Actual: ' + (f_arg(x,x=1))); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: function f_arg() {} f_arg(x,x=1) throw ReferenceError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.4_Argument_Lists/S11.2.4_A1.4_T3.js b/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.4_Argument_Lists/S11.2.4_A1.4_T3.js deleted file mode 100644 index b435bf36f..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.4_Argument_Lists/S11.2.4_A1.4_T3.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.2.4_A1.4_T3; -* @section: 11.2.4, 11.2.3, 10.1.8; -* @assertion: Arguments : (ArgumentList : ArgumentList, AssignmentExpression); -* @description: Return an internal list whose length is one greater than the -* length of ArgumentList and whose items are the items of ArgumentList, in order, -* followed at the end by GetValue(AssignmentExpression), which is the last item of -* the new list; -*/ - -function f_arg(x,y,z) { - return z; -} - -//CHECK#1 -if (f_arg(x=1,y=x,x+y) !== 2) { - $ERROR('#1: function f_arg(x,y,z) {return z;} f_arg(x=1,y=x,x+y) === 2. Actual: ' + (f_arg(x=1,y=x,x+y))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.4_Argument_Lists/S11.2.4_A1.4_T4.js b/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.4_Argument_Lists/S11.2.4_A1.4_T4.js deleted file mode 100644 index ed47b4dbd..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.2_Left_Hand_Side_Expressions/11.2.4_Argument_Lists/S11.2.4_A1.4_T4.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.2.4_A1.4_T4; -* @section: 11.2.4, 11.2.3, 10.1.8; -* @assertion: Arguments : (ArgumentList : ArgumentList, AssignmentExpression); -* @description: Return an internal list whose length is one greater than the -* length of ArgumentList and whose items are the items of ArgumentList, in order, -* followed at the end by GetValue(AssignmentExpression), which is the last item of -* the new list; -*/ - -var x = function () { throw "x"; }; -var y = function () { throw "y"; }; - -function f_arg() { -} - -//CHECK#1 -try { - f_arg(x(),y()); - $ERROR('#1.1: var x = { valueOf: function () { throw "x"; } }; var y = { valueOf: function () { throw "y"; } }; function f_arg() {} f_arg(x(),y()) throw "x". Actual: ' + (f_arg(x(),y()))); -} -catch (e) { - if (e === "y") { - $ERROR('#1.2: First argument is evaluated first, and then second argument'); - } else { - if (e !== "x") { - $ERROR('#1.3: var x = { valueOf: function () { throw "x"; } }; var y = { valueOf: function () { throw "y"; } }; function f_arg() {} f_arg(x(),y()) throw "x". Actual: ' + (e)); - } - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.1_Postfix_Increment_Operator/S11.3.1_A1.1_T1.js b/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.1_Postfix_Increment_Operator/S11.3.1_A1.1_T1.js deleted file mode 100644 index 61ad35814..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.1_Postfix_Increment_Operator/S11.3.1_A1.1_T1.js +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.3.1_A1.1_T1; -* @section: 11.3.1, 11.6.3, 7.3; -* @assertion: Line Terminator between LeftHandSideExpression and "++" is not allowed; -* @description: Checking Line Feed; -* @negative -*/ - -//CHECK#1 -eval("var x = 1; x\u000A++"); diff --git a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.1_Postfix_Increment_Operator/S11.3.1_A1.1_T2.js b/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.1_Postfix_Increment_Operator/S11.3.1_A1.1_T2.js deleted file mode 100644 index 3d410bdba..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.1_Postfix_Increment_Operator/S11.3.1_A1.1_T2.js +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.3.1_A1.1_T2; -* @section: 11.3.1, 11.6.3, 7.3; -* @assertion: Line Terminator between LeftHandSideExpression and "++" is not allowed; -* @description: Carriage Return; -* @negative -*/ - -//CHECK#1 -eval("var x = 1; x\u000D++"); diff --git a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.1_Postfix_Increment_Operator/S11.3.1_A1.1_T3.js b/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.1_Postfix_Increment_Operator/S11.3.1_A1.1_T3.js deleted file mode 100644 index c1b62542d..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.1_Postfix_Increment_Operator/S11.3.1_A1.1_T3.js +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.3.1_A1.1_T3; -* @section: 11.3.1, 11.6.3, 7.3; -* @assertion: Line Terminator between LeftHandSideExpression and "++" is not allowed; -* @description: Checking Line Seprator; -* @negative -*/ - -//CHECK#1 -eval("var x = 1; x\u2028++"); diff --git a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.1_Postfix_Increment_Operator/S11.3.1_A1.1_T4.js b/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.1_Postfix_Increment_Operator/S11.3.1_A1.1_T4.js deleted file mode 100644 index f0ac9c409..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.1_Postfix_Increment_Operator/S11.3.1_A1.1_T4.js +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.3.1_A1.1_T4; -* @section: 11.3.1, 11.6.3, 7.3; -* @assertion: Line Terminator between LeftHandSideExpression and "++" is not allowed; -* @description: Checking Paragraph separator; -* @negative -*/ - -//CHECK#1 -eval("var x = 1; x\u2029++"); diff --git a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.1_Postfix_Increment_Operator/S11.3.1_A1.2_T1.js b/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.1_Postfix_Increment_Operator/S11.3.1_A1.2_T1.js deleted file mode 100644 index 7c8d8fe59..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.1_Postfix_Increment_Operator/S11.3.1_A1.2_T1.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.3.1_A1.2_T1; -* @section: 11.3.1, 11.6.3, 7.2; -* @assertion: White Space between LeftHandSideExpression and "++" are allowed; -* @description: Checking by using eval; -*/ - -//CHECK#1 -if (eval("var x = 0; x\u0009++; x") !== 1) { - $ERROR('#1: var x = 0; x\\u0009++; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -if (eval("var x = 0; x\u000B++; x") !== 1) { - $ERROR('#2: var x = 0; x\\u000B++; x === 1. Actual: ' + (x)); -} - -//CHECK#3 -if (eval("var x = 0; x\u000C++; x") !== 1) { - $ERROR('#3: var x = 0; x\\u000C++; x === 1. Actual: ' + (x)); -} - -//CHECK#4 -if (eval("var x = 0; x\u0020++; x") !== 1) { - $ERROR('#4: var x = 0; x\\u0020++; x === 1. Actual: ' + (x)); -} - -//CHECK#5 -if (eval("var x = 0; x\u00A0++; x") !== 1) { - $ERROR('#5: var x = 0; x\\u00A0++; x === 1. Actual: ' + (x)); -} - -//CHECK#6 -if (eval("var x = 0; x\u0009\u000B\u000C\u0020\u00A0++; x") !== 1) { - $ERROR('#6: var x = 0; x\\u0009\\u000B\\u000C\\u0020\\u00A0++; x === 1. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.1_Postfix_Increment_Operator/S11.3.1_A2.1_T1.js b/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.1_Postfix_Increment_Operator/S11.3.1_A2.1_T1.js deleted file mode 100644 index 4c99b4276..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.1_Postfix_Increment_Operator/S11.3.1_A2.1_T1.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.3.1_A2.1_T1; -* @section: 11.3.1, 11.6.3; -* @assertion: Operator x++ uses GetValue and PutValue; -* @description: Type(x) is Reference and GetBase(x) is not null; -*/ - -//CHECK#1 -var x = 1; -var y = x++; -if (y !== 1) { - $ERROR('#1: var x = 1; var y = x++; y === 1. Actual: ' + (y)); -} else { - if (x !== 1 + 1) { - $ERROR('#1: var x = 1; var y = x++; x === 1 + 1. Actual: ' + (x)); - } -} - -//CHECK#2 -this.x = 1; -var y = this.x++; -if (y !== 1) { - $ERROR('#2: this.x = 1; var y = this.x++; y === 1. Actual: ' + (y)); -} else { - if (this.x !== 1 + 1) { - $ERROR('#2: this.x = 1; var y = this.x++; this.x === 1 + 1. Actual: ' + (this.x)); - } -} - -//CHECK#3 -var object = new Object(); -object.prop = 1; -var y = object.prop++; -if (y !== 1) { - $ERROR('#3: var object = new Object(); object.prop = 1; var y = object.prop++; y === 1. Actual: ' + (y)); -} else { - if (this.x !== 1 + 1) { - $ERROR('#3: var object = new Object(); object.prop = 1; var y = object.prop++; object.prop === 1 + 1. Actual: ' + (object.prop)); - } -} - - diff --git a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.1_Postfix_Increment_Operator/S11.3.1_A2.1_T2.js b/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.1_Postfix_Increment_Operator/S11.3.1_A2.1_T2.js deleted file mode 100644 index 515c76360..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.1_Postfix_Increment_Operator/S11.3.1_A2.1_T2.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.3.1_A2.1_T2; -* @section: 11.3.1, 11.6.3; -* @assertion: Operator x++ uses GetValue and PutValue; -* @description: If GetBase(x) is null, throw ReferenceError; -*/ - -//CHECK#1 -try { - x++; - $ERROR('#1.1: x++ throw ReferenceError. Actual: ' + (x++)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: x++ throw ReferenceError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.1_Postfix_Increment_Operator/S11.3.1_A2.1_T3.js b/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.1_Postfix_Increment_Operator/S11.3.1_A2.1_T3.js deleted file mode 100644 index da562f347..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.1_Postfix_Increment_Operator/S11.3.1_A2.1_T3.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.3.1_A2.1_T3; -* @section: 11.3.1, 11.6.3; -* @assertion: Operator x++ uses GetValue and PutValue; -* @description: If Type(x) is not Reference, throw ReferenceError (or SyntaxError); -* @negative -*/ - -//CHECK#1 -try { - 1++; - $ERROR('#1.1: 1++ throw ReferenceError (or SyntaxError). Actual: ' + (1++)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: 1++ throw ReferenceError (or SyntaxError). Actual: ' + (e)); - } else { - 1++; - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.1_Postfix_Increment_Operator/S11.3.1_A2.2_T1.js b/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.1_Postfix_Increment_Operator/S11.3.1_A2.2_T1.js deleted file mode 100644 index 79d9372c8..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.1_Postfix_Increment_Operator/S11.3.1_A2.2_T1.js +++ /dev/null @@ -1,109 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.3.1_A2.2_T1; - * @section: 11.3.1, 8.6.2.6; - * @assertion: Operator x++ uses [[Default Value]]; - * @description: If Type(value) is Object, evaluate ToPrimitive(value, Number); - */ - -//CHECK#1 -var object = {valueOf: function() {return 1}}; -var y = object++; -if (y !== 1) { - $ERROR('#1: var object = {valueOf: function() {return 1}}; var y = object++; y === 1. Actual: ' + (y)); -} else { - if (object !== 1 + 1) { - $ERROR('#1: var object = {valueOf: function() {return 1}}; object++; object === 1 + 1. Actual: ' + (object)); - } -} - -//CHECK#2 -var object = {valueOf: function() {return 1}, toString: function() {return 0}}; -var y = object++; -if (y !== 1) { - $ERROR('#2: var object = {valueOf: function() {return 1}, toString: function() {return 0}}; var y = object++; y === 1. Actual: ' + (y)); -} else { - if (object !== 1 + 1) { - $ERROR('#2: var object = {valueOf: function() {return 1}, toString: function() {return 0}}; object++; object === 1 + 1. Actual: ' + (object)); - } -} - -//CHECK#3 -var object = {valueOf: function() {return 1}, toString: function() {return {}}}; -var y = object++; -if (y !== 1) { - $ERROR('#3: var object = {valueOf: function() {return 1}, toString: function() {return {}}}; var y = object++; y === 1. Actual: ' + (y)); -} else { - if (object !== 1 + 1) { - $ERROR('#3: var object = {valueOf: function() {return 1}, toString: function() {return {}}}; object++; object === 1 + 1. Actual: ' + (object)); - } -} - -//CHECK#4 -try { - var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; - var y = object++; - if (y !== 1) { - $ERROR('#4.1: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; var y = object++; y === 1. Actual: ' + (y)); - } else { - if (object !== 1 + 1) { - $ERROR('#4.2: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; object++; object === 1 + 1. Actual: ' + (object)); - } - } -} -catch (e) { - if (e === "error") { - $ERROR('#4.3: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; var y = object++; y not throw "error"'); - } else { - $ERROR('#4.4: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; var y = object++; y not throw Error. Actual: ' + (e)); - } -} - -//CHECK#5 -var object = {toString: function() {return 1}}; -var y = object++; -if (y !== 1) { - $ERROR('#5.1: var object = {toString: function() {return 1}}; var y = object++; y === 1. Actual: ' + (y)); -} else { - if (object !== 1 + 1) { - $ERROR('#5.2: var object = {toString: function() {return 1}}; object++; object === 1 + 1. Actual: ' + (object)); - } -} - - -//CHECK#6 -var object = {valueOf: function() {return {}}, toString: function() {return 1}} -var y = object++; -if (y !== 1) { - $ERROR('#6.1: var object = {valueOf: function() {return {}}, toString: function() {return 1}}; var y = object++; y === 1. Actual: ' + (y)); -} else { - if (object !== 1 + 1) { - $ERROR('#6.2: var object = {valueOf: function() {return {}}, toString: function() {return 1}}; object++; object === 1 + 1. Actual: ' + (object)); - } -} - -//CHECK#7 -try { - var object = {valueOf: function() {throw "error"}, toString: function() {return 1}}; - var y = object++; - $ERROR('#7.1: var object = {valueOf: function() {throw "error"}, toString: function() {return 1}}; object++ throw "error". Actual: ' + (y)); -} -catch (e) { - if (e !== "error") { - $ERROR('#7.2: var object = {valueOf: function() {throw "error"}, toString: function() {return 1}}; object++ throw "error". Actual: ' + (e)); - } -} - -//CHECK#8 -try { - var object = {valueOf: function() {return {}}, toString: function() {return {}}}; - var y = object++; - $ERROR('#8.1: var object = {valueOf: function() {return {}}, toString: function() {return {}}}; object++ throw TypeError. Actual: ' + (y)); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#8.2: var object = {valueOf: function() {return {}}, toString: function() {return {}}}; object++ throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.1_Postfix_Increment_Operator/S11.3.1_A3_T1.js b/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.1_Postfix_Increment_Operator/S11.3.1_A3_T1.js deleted file mode 100644 index d87bb767a..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.1_Postfix_Increment_Operator/S11.3.1_A3_T1.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.3.1_A3_T1; -* @section: 11.3.1, 11.6.3; -* @assertion: Operator x++ returns x = ToNumber(x) + 1; -* @description: Type(x) is boolean primitive or Boolean object; -*/ - -//CHECK#1 -var x = false; -x++; -if (x !== 0 + 1) { - $ERROR('#1: var x = false; x++; x === 0 + 1. Actual: ' + (x)); -} - -//CHECK#2 -var x = new Boolean(true); -x++; -if (x !== 1 + 1) { - $ERROR('#2: var x = new Boolean(true); x++; x === 1 + 1. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.1_Postfix_Increment_Operator/S11.3.1_A3_T2.js b/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.1_Postfix_Increment_Operator/S11.3.1_A3_T2.js deleted file mode 100644 index 1d309f0b5..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.1_Postfix_Increment_Operator/S11.3.1_A3_T2.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.3.1_A3_T2; -* @section: 11.3.1, 11.6.3; -* @assertion: Operator x++ returns x = ToNumber(x) + 1; -* @description: Type(x) is number primitive or Number object; -*/ - -//CHECK#1 -var x = 0.1; -x++; -if (x !== 0.1 + 1) { - $ERROR('#1: var x = 0.1; x++; x === 0.1 + 1. Actual: ' + (x)); -} - -//CHECK#2 -var x = new Number(-1.1); -x++; -if (x !== -1.1 + 1) { - $ERROR('#2: var x = new Number(-1.1); x++; x === -1.1 + 1. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.1_Postfix_Increment_Operator/S11.3.1_A3_T3.js b/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.1_Postfix_Increment_Operator/S11.3.1_A3_T3.js deleted file mode 100644 index f866f0a35..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.1_Postfix_Increment_Operator/S11.3.1_A3_T3.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.3.1_A3_T3; -* @section: 11.3.1, 11.6.3; -* @assertion: Operator x++ returns x = ToNumber(x) + 1; -* @description: Type(x) is string primitive or String object; -*/ - -//CHECK#1 -var x = "1"; -x++; -if (x !== 1 + 1) { - $ERROR('#1: var x = "1"; x++; x === 1 + 1. Actual: ' + (x)); -} - -//CHECK#2 -var x = "x"; -x++; -if (isNaN(x) !== true) { - $ERROR('#2: var x = "x"; x++; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#3 -var x = new Number("-1"); -x++; -if (x !== -1 + 1) { - $ERROR('#3: var x = new String("-1"); x++; x === -1 + 1. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.1_Postfix_Increment_Operator/S11.3.1_A3_T4.js b/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.1_Postfix_Increment_Operator/S11.3.1_A3_T4.js deleted file mode 100644 index 4d4813843..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.1_Postfix_Increment_Operator/S11.3.1_A3_T4.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.3.1_A3_T4; -* @section: 11.3.1, 11.6.3; -* @assertion: Operator x++ returns x = ToNumber(x) + 1; -* @description: Type(x) is undefined or null; -*/ - -//CHECK#1 -var x; -x++; -if (isNaN(x) !== true) { - $ERROR('#1: var x; x++; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#2 -var x = null; -x++; -if (x !== 1) { - $ERROR('#2: var x = null; x++; x === 1. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.1_Postfix_Increment_Operator/S11.3.1_A3_T5.js b/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.1_Postfix_Increment_Operator/S11.3.1_A3_T5.js deleted file mode 100644 index bda328004..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.1_Postfix_Increment_Operator/S11.3.1_A3_T5.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.3.1_A3_T5; -* @section: 11.3.1, 11.6.3; -* @assertion: Operator x++ returns x = ToNumber(x) + 1; -* @description: Type(x) is Object object or Function object; -*/ - -//CHECK#1 -var x = {}; -x++; -if (isNaN(x) !== true) { - $ERROR('#1: var x = {}; x++; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#2 -var x = function(){return 1}; -x++; -if (isNaN(x) !== true) { - $ERROR('#2: var x = function(){return 1}; x++; x === Not-a-Number. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.1_Postfix_Increment_Operator/S11.3.1_A4_T1.js b/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.1_Postfix_Increment_Operator/S11.3.1_A4_T1.js deleted file mode 100644 index 3d6589d7a..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.1_Postfix_Increment_Operator/S11.3.1_A4_T1.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.3.1_A4_T1; -* @section: 11.3.1, 11.6.3; -* @assertion: Operator x++ returns ToNumber(x); -* @description: Type(x) is boolean primitive or Boolean object; -*/ - -//CHECK#1 -var x = false; -var y = x++; -if (y !== 0) { - $ERROR('#1: var x = false; var y = x++; y === 0. Actual: ' + (y)); -} - -//CHECK#2 -var x = new Boolean(true); -var y = x++; -if (y !== 1) { - $ERROR('#2: var x = new Boolean(true); var y = x++; y === 1. Actual: ' + (y)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.1_Postfix_Increment_Operator/S11.3.1_A4_T2.js b/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.1_Postfix_Increment_Operator/S11.3.1_A4_T2.js deleted file mode 100644 index f684d11c0..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.1_Postfix_Increment_Operator/S11.3.1_A4_T2.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.3.1_A4_T2; -* @section: 11.3.1, 11.6.3; -* @assertion: Operator x++ returns ToNumber(x); -* @description: Type(x) is number primitive or Number object; -*/ - -//CHECK#1 -var x = -0.1; -var y = x++; -if (y !== -0.1) { - $ERROR('#1: var x = -0.1; var y = x++; y === -0.1. Actual: ' + (y)); -} - -//CHECK#2 -var x = new Number(1.1); -var y = x++; -if (y !== 1.1) { - $ERROR('#2: var x = new Number(1.1); var y = x++; y === 1.1. Actual: ' + (y)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.1_Postfix_Increment_Operator/S11.3.1_A4_T3.js b/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.1_Postfix_Increment_Operator/S11.3.1_A4_T3.js deleted file mode 100644 index 174eea146..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.1_Postfix_Increment_Operator/S11.3.1_A4_T3.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.3.1_A4_T3; -* @section: 11.3.1, 11.6.3; -* @assertion: Operator x++ returns ToNumber(x); -* @description: Type(x) is string primitive or String object; -*/ - -//CHECK#1 -var x = "1"; -var y = x++; -if (y !== 1) { - $ERROR('#1: var x = "1"; var y = x++; y === 1. Actual: ' + (y)); -} - -//CHECK#2 -var x = "x"; -var y = x++; -if (isNaN(y) !== true) { - $ERROR('#2: var x = "x"; var y = x++; y === Not-a-Number. Actual: ' + (y)); -} - -//CHECK#3 -var x = new String("-1"); -var y = x++; -if (y !== -1) { - $ERROR('#3: var x = new String("-1"); var y = x++; y === -1. Actual: ' + (y)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.1_Postfix_Increment_Operator/S11.3.1_A4_T4.js b/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.1_Postfix_Increment_Operator/S11.3.1_A4_T4.js deleted file mode 100644 index 2e06e82b7..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.1_Postfix_Increment_Operator/S11.3.1_A4_T4.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.3.1_A4_T4; -* @section: 11.3.1, 11.6.3; -* @assertion: Operator x++ returns ToNumber(x); -* @description: Type(x) is undefined or null; -*/ - -//CHECK#1 -var x; -var y = x++; -if (isNaN(y) !== true) { - $ERROR('#1: var x; var y = x++; y === Not-a-Number. Actual: ' + (y)); -} - -//CHECK#2 -var x = null; -var y = x++; -if (y !== 0) { - $ERROR('#2: var x = null; var y = x++; y === 0. Actual: ' + (y)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.1_Postfix_Increment_Operator/S11.3.1_A4_T5.js b/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.1_Postfix_Increment_Operator/S11.3.1_A4_T5.js deleted file mode 100644 index 99760c068..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.1_Postfix_Increment_Operator/S11.3.1_A4_T5.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.3.1_A4_T5; -* @section: 11.3.1, 11.6.3; -* @assertion: Operator x++ returns ToNumber(x); -* @description: Type(x) is Object object or Function object; -*/ - -//CHECK#1 -var x = {}; -var y = x++; -if (isNaN(y) !== true) { - $ERROR('#1: var x = {}; var y = x++; y === Not-a-Number. Actual: ' + (y)); -} - -//CHECK#2 -var x = function(){return 1}; -var y = x++; -if (isNaN(y) !== true) { - $ERROR('#2: var x = function(){return 1}; var y = x++; y === Not-a-Number. Actual: ' + (y)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.2_Postfix_Decrement_Operator/S11.3.2_A1.1_T1.js b/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.2_Postfix_Decrement_Operator/S11.3.2_A1.1_T1.js deleted file mode 100644 index 395b3ad4b..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.2_Postfix_Decrement_Operator/S11.3.2_A1.1_T1.js +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.3.2_A1.1_T1; -* @section: 11.3.2, 11.6.3, 7.3; -* @assertion: Line Terminator between LeftHandSideExpression and "--" is not allowed; -* @description: Checking Line Feed; -* @negative -*/ - -//CHECK#1 -eval("var x = 1; x\u000A--"); diff --git a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.2_Postfix_Decrement_Operator/S11.3.2_A1.1_T2.js b/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.2_Postfix_Decrement_Operator/S11.3.2_A1.1_T2.js deleted file mode 100644 index d8484e980..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.2_Postfix_Decrement_Operator/S11.3.2_A1.1_T2.js +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.3.2_A1.1_T2; -* @section: 11.3.2, 11.6.3, 7.3; -* @assertion: Line Terminator between LeftHandSideExpression and "--" is not allowed; -* @description: Checking Carriage Return; -* @negative -*/ - -//CHECK#1 -eval("var x = 1; x\u000D--"); diff --git a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.2_Postfix_Decrement_Operator/S11.3.2_A1.1_T3.js b/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.2_Postfix_Decrement_Operator/S11.3.2_A1.1_T3.js deleted file mode 100644 index 11116aee6..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.2_Postfix_Decrement_Operator/S11.3.2_A1.1_T3.js +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.3.2_A1.1_T3; -* @section: 11.3.2, 11.6.3, 7.3; -* @assertion: Line Terminator between LeftHandSideExpression and "--" is not allowed; -* @description: Checking Page separator; -* @negative -*/ - -//CHECK#1 -eval("var x = 1; x\u2028--"); diff --git a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.2_Postfix_Decrement_Operator/S11.3.2_A1.1_T4.js b/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.2_Postfix_Decrement_Operator/S11.3.2_A1.1_T4.js deleted file mode 100644 index 1363265a1..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.2_Postfix_Decrement_Operator/S11.3.2_A1.1_T4.js +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.3.2_A1.1_T4; -* @section: 11.3.2, 11.6.3, 7.3; -* @assertion: Line Terminator between LeftHandSideExpression and "--" is not allowed; -* @description: Checking Line separator; -* @negative -*/ - -//CHECK#1 -eval("var x = 1; x\u2029--"); diff --git a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.2_Postfix_Decrement_Operator/S11.3.2_A1.2_T1.js b/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.2_Postfix_Decrement_Operator/S11.3.2_A1.2_T1.js deleted file mode 100644 index 229ff6d91..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.2_Postfix_Decrement_Operator/S11.3.2_A1.2_T1.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.3.2_A1.2_T1; -* @section: 11.3.2, 11.6.3, 7.2; -* @assertion: White Space between LeftHandSideExpression and "--" are allowed; -* @description: Checking by using eval; -*/ - -//CHECK#1 -if (eval("var x = 0; x\u0009--; x") !== -1) { - $ERROR('#1: var x = 0; x\\u0009--; x === -1. Actual: ' + (x)); -} - -//CHECK#2 -if (eval("var x = 0; x\u000B--; x") !== -1) { - $ERROR('#2: var x = 0; x\\u000B--; x === -1. Actual: ' + (x)); -} - -//CHECK#3 -if (eval("var x = 0; x\u000C--; x") !== -1) { - $ERROR('#3: var x = 0; x\\u000C--; x === -1. Actual: ' + (x)); -} - -//CHECK#4 -if (eval("var x = 0; x\u0020--; x") !== -1) { - $ERROR('#4: var x = 0; x\\u0020--; x === -1. Actual: ' + (x)); -} - -//CHECK#5 -if (eval("var x = 0; x\u00A0--; x") !== -1) { - $ERROR('#5: var x = 0; x\\u00A0--; x === -1. Actual: ' + (x)); -} - -//CHECK#6 -if (eval("var x = 0; x\u0009\u000B\u000C\u0020\u00A0--; x") !== -1) { - $ERROR('#6: var x = 0; x\\u0009\\u000B\\u000C\\u0020\\u00A0--; x === -1. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.2_Postfix_Decrement_Operator/S11.3.2_A2.1_T1.js b/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.2_Postfix_Decrement_Operator/S11.3.2_A2.1_T1.js deleted file mode 100644 index f62066ae2..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.2_Postfix_Decrement_Operator/S11.3.2_A2.1_T1.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.3.2_A2.1_T1; -* @section: 11.3.2, 11.6.3; -* @assertion: Operator x-- uses GetValue and PutValue; -* @description: Type(x) is Reference and GetBase(x) is not null; -*/ - -//CHECK#1 -var x = 1; -if (x-- !== 1) { - $ERROR('#1: var x = 1; x-- === 1. Actual: ' + (x--)); -} else { - if (x !== 1 - 1) { - $ERROR('#1: var x = 1; x--; x === 1 - 1. Actual: ' + (x)); - } -} - -//CHECK#2 -this.x = 1; -if (this.x-- !== 1) { - $ERROR('#2: this.x = 1; this.x-- === 1. Actual: ' + (this.x--)); -} else { - if (this.x !== 1 - 1) { - $ERROR('#2: this.x = 1; this.x--; this.x === 1 - 1. Actual: ' + (this.x)); - } -} - -//CHECK#3 -var object = new Object(); -object.prop = 1; -if (object.prop-- !== 1) { - $ERROR('#3: var object = new Object(); object.prop = 1; object.prop-- === 1. Actual: ' + (object.prop--)); -} else { - if (this.x !== 1 - 1) { - $ERROR('#3: var object = new Object(); object.prop = 1; object.prop--; object.prop === 1 - 1. Actual: ' + (object.prop)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.2_Postfix_Decrement_Operator/S11.3.2_A2.1_T2.js b/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.2_Postfix_Decrement_Operator/S11.3.2_A2.1_T2.js deleted file mode 100644 index e276b1b65..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.2_Postfix_Decrement_Operator/S11.3.2_A2.1_T2.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.3.2_A2.1_T2; -* @section: 11.3.2, 11.6.3; -* @assertion: Operator x-- uses GetValue and PutValue; -* @description: If GetBase(x) is null, throw ReferenceError; -*/ - -//CHECK#1 -try { - x--; - $ERROR('#1.1: x-- throw ReferenceError. Actual: ' + (x--)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: x-- throw ReferenceError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.2_Postfix_Decrement_Operator/S11.3.2_A2.1_T3.js b/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.2_Postfix_Decrement_Operator/S11.3.2_A2.1_T3.js deleted file mode 100644 index d339dae92..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.2_Postfix_Decrement_Operator/S11.3.2_A2.1_T3.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.3.2_A2.1_T3; -* @section: 11.3.2, 11.6.3; -* @assertion: Operator x-- uses GetValue and PutValue; -* @description: If Type(x) is not Reference, throw ReferenceError (or SyntaxError); -* @negative -*/ - -//CHECK#1 -try { - 1--; - $ERROR('#1.1: 1-- throw ReferenceError (or SyntaxError). Actual: ' + (1--)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: 1-- throw ReferenceError (or SyntaxError). Actual: ' + (e)); - } else { - 1--; - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.2_Postfix_Decrement_Operator/S11.3.2_A2.2_T1.js b/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.2_Postfix_Decrement_Operator/S11.3.2_A2.2_T1.js deleted file mode 100644 index 76a136646..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.2_Postfix_Decrement_Operator/S11.3.2_A2.2_T1.js +++ /dev/null @@ -1,109 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.3.2_A2.2_T1; - * @section: 11.3.2, 8.6.2.6; - * @assertion: Operator x-- uses [[Default Value]]; - * @description: If Type(value) is Object, evaluate ToPrimitive(value, Number); - */ - -//CHECK#1 -var object = {valueOf: function() {return 1}}; -var y = object--; -if (y !== 1) { - $ERROR('#1: var object = {valueOf: function() {return 1}}; var y = object--; y === 1. Actual: ' + (y)); -} else { - if (object !== 1 - 1) { - $ERROR('#1: var object = {valueOf: function() {return 1}}; object--; object === 1 - 1. Actual: ' + (object)); - } -} - -//CHECK#2 -var object = {valueOf: function() {return 1}, toString: function() {return 0}}; -var y = object--; -if (y !== 1) { - $ERROR('#2: var object = {valueOf: function() {return 1}, toString: function() {return 0}}; var y = object--; y === 1. Actual: ' + (y)); -} else { - if (object !== 1 - 1) { - $ERROR('#2: var object = {valueOf: function() {return 1}, toString: function() {return 0}}; object--; object === 1 - 1. Actual: ' + (object)); - } -} - -//CHECK#3 -var object = {valueOf: function() {return 1}, toString: function() {return {}}}; -var y = object--; -if (y !== 1) { - $ERROR('#3: var object = {valueOf: function() {return 1}, toString: function() {return {}}}; var y = object--; y === 1. Actual: ' + (y)); -} else { - if (object !== 1 - 1) { - $ERROR('#3: var object = {valueOf: function() {return 1}, toString: function() {return {}}}; object--; object === 1 - 1. Actual: ' + (object)); - } -} - -//CHECK#4 -try { - var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; - var y = object--; - if (y !== 1) { - $ERROR('#4.1: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; var y = object--; y === 1. Actual: ' + (y)); - } else { - if (object !== 1 - 1) { - $ERROR('#4.2: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; object--; object === 1 - 1. Actual: ' + (object)); - } - } -} -catch (e) { - if (e === "error") { - $ERROR('#4.3: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; y not throw "error"'); - } else { - $ERROR('#4.4: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; y not throw Error. Actual: ' + (e)); - } -} - -//CHECK#5 -var object = {toString: function() {return 1}}; -var y = object--; -if (y !== 1) { - $ERROR('#5.1: var object = {toString: function() {return 1}}; var y = object--; y === 1. Actual: ' + (y)); -} else { - if (object !== 1 - 1) { - $ERROR('#5.2: var object = {toString: function() {return 1}}; object--; object === 1 - 1. Actual: ' + (object)); - } -} - - -//CHECK#6 -var object = {valueOf: function() {return {}}, toString: function() {return 1}} -var y = object--; -if (y !== 1) { - $ERROR('#6.1: var object = {valueOf: function() {return {}}, toString: function() {return 1}}; var y = object--; y === 1. Actual: ' + (y)); -} else { - if (object !== 1 - 1) { - $ERROR('#6.2: var object = {valueOf: function() {return {}}, toString: function() {return 1}}; object--; object === 1 - 1. Actual: ' + (object)); - } -} - -//CHECK#7 -try { - var object = {valueOf: function() {throw "error"}, toString: function() {return 1}}; - var y = object--; - $ERROR('#7.1: var object = {valueOf: function() {throw "error"}, toString: function() {return 1}}; object-- throw "error". Actual: ' + (y)); -} -catch (e) { - if (e !== "error") { - $ERROR('#7.2: var object = {valueOf: function() {throw "error"}, toString: function() {return 1}}; object-- throw "error". Actual: ' + (e)); - } -} - -//CHECK#8 -try { - var object = {valueOf: function() {return {}}, toString: function() {return {}}}; - var y = object--; - $ERROR('#8.1: var object = {valueOf: function() {return {}}, toString: function() {return {}}}; object-- throw TypeError. Actual: ' + (y)); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#8.2: var object = {valueOf: function() {return {}}, toString: function() {return {}}}; object-- throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.2_Postfix_Decrement_Operator/S11.3.2_A3_T1.js b/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.2_Postfix_Decrement_Operator/S11.3.2_A3_T1.js deleted file mode 100644 index d56359c5c..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.2_Postfix_Decrement_Operator/S11.3.2_A3_T1.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.3.2_A3_T1; -* @section: 11.3.2, 11.6.3; -* @assertion: Operator x-- returns x = ToNumber(x) - 1; -* @description: Type(x) is boolean primitive or Boolean object; -*/ - -//CHECK#1 -var x = true; -x--; -if (x !== 0) { - $ERROR('#1: var x = true; x--; x === 0. Actual: ' + (x)); -} - -//CHECK#2 -var x = new Boolean(false); -x--; -if (x !== 0 - 1) { - $ERROR('#2: var x = new Boolean(false); x--; x === 0 - 1. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.2_Postfix_Decrement_Operator/S11.3.2_A3_T2.js b/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.2_Postfix_Decrement_Operator/S11.3.2_A3_T2.js deleted file mode 100644 index 92ce85819..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.2_Postfix_Decrement_Operator/S11.3.2_A3_T2.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.3.2_A3_T2; -* @section: 11.3.2, 11.6.3; -* @assertion: Operator x-- returns x = ToNumber(x) - 1; -* @description: Type(x) is number primitive or Number object; -*/ - -//CHECK#1 -var x = 1.1; -x--; -if (x !== 1.1 - 1) { - $ERROR('#1: var x = 1.1; x--; x === 1.1 - 1. Actual: ' + (x)); -} - -//CHECK#2 -var x = new Number(-0.1); -x--; -if (x !== -0.1 - 1) { - $ERROR('#2: var x = new Number(-0.1); x--; x === -0.1 - 1. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.2_Postfix_Decrement_Operator/S11.3.2_A3_T3.js b/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.2_Postfix_Decrement_Operator/S11.3.2_A3_T3.js deleted file mode 100644 index 31141667c..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.2_Postfix_Decrement_Operator/S11.3.2_A3_T3.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.3.2_A3_T3; -* @section: 11.3.2, 11.6.3; -* @assertion: Operator x-- returns x = ToNumber(x) - 1; -* @description: Type(x) is string primitive or String object; -*/ - -//CHECK#1 -var x = "1"; -x--; -if (x !== 1 - 1) { - $ERROR('#1: var x = "1"; x--; x === 1 - 1. Actual: ' + (x)); -} - -//CHECK#2 -var x = "x"; -x--; -if (isNaN(x) !== true) { - $ERROR('#2: var x = "x"; x--; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#3 -var x = new Number("-1"); -x--; -if (x !== -1 - 1) { - $ERROR('#3: var x = new String("-1"); x--; x === -1 - 1. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.2_Postfix_Decrement_Operator/S11.3.2_A3_T4.js b/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.2_Postfix_Decrement_Operator/S11.3.2_A3_T4.js deleted file mode 100644 index f9269e559..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.2_Postfix_Decrement_Operator/S11.3.2_A3_T4.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.3.2_A3_T4; -* @section: 11.3.2, 11.6.3; -* @assertion: Operator x-- returns x = ToNumber(x) - 1; -* @description: Type(x) is undefined or null; -*/ - -//CHECK#1 -var x; -x--; -if (isNaN(x) !== true) { - $ERROR('#1: var x; x--; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#2 -var x = null; -x--; -if (x !== -1) { - $ERROR('#2: var x = null; x--; x === -1. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.2_Postfix_Decrement_Operator/S11.3.2_A3_T5.js b/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.2_Postfix_Decrement_Operator/S11.3.2_A3_T5.js deleted file mode 100644 index 57b7c44fc..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.2_Postfix_Decrement_Operator/S11.3.2_A3_T5.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.3.2_A3_T5; -* @section: 11.3.2, 11.6.3; -* @assertion: Operator x-- returns x = ToNumber(x) - 1; -* @description: Type(x) is Object object or Function object; -*/ - -//CHECK#1 -var x = {}; -x--; -if (isNaN(x) !== true) { - $ERROR('#1: var x = {}; x--; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#2 -var x = function(){return 1}; -x--; -if (isNaN(x) !== true) { - $ERROR('#2: var x = function(){return 1}; x--; x === Not-a-Number. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.2_Postfix_Decrement_Operator/S11.3.2_A4_T1.js b/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.2_Postfix_Decrement_Operator/S11.3.2_A4_T1.js deleted file mode 100644 index a39f21909..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.2_Postfix_Decrement_Operator/S11.3.2_A4_T1.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.3.2_A4_T1; -* @section: 11.3.2, 11.6.3; -* @assertion: Operator x-- returns ToNumber(x); -* @description: Type(x) is boolean primitive or Boolean object; -*/ - -//CHECK#1 -var x = true; -var y = x--; -if (y !== 1) { - $ERROR('#1: var x = true; var y = x--; y === 1. Actual: ' + (y)); -} - -//CHECK#2 -var x = new Boolean(false); -var y = x--; -if (y !== 0) { - $ERROR('#2: var x = new Boolean(false); var y = x--; y === 0. Actual: ' + (y)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.2_Postfix_Decrement_Operator/S11.3.2_A4_T2.js b/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.2_Postfix_Decrement_Operator/S11.3.2_A4_T2.js deleted file mode 100644 index 2bc4b06ce..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.2_Postfix_Decrement_Operator/S11.3.2_A4_T2.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.3.2_A4_T2; -* @section: 11.3.2, 11.6.3; -* @assertion: Operator x-- returns ToNumber(x); -* @description: Type(x) is number primitive or Number object; -*/ - -//CHECK#1 -var x = 1.1; -var y = x--; -if (y !== 1.1) { - $ERROR('#1: var x = 1.1; var y = x--; y === 1.1. Actual: ' + (y)); -} - -//CHECK#2 -var x = new Number(-0.1); -var y = x--; -if (y !== -0.1) { - $ERROR('#2: var x = new Number(-0.1); var y = x--; y === -0.1. Actual: ' + (y)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.2_Postfix_Decrement_Operator/S11.3.2_A4_T3.js b/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.2_Postfix_Decrement_Operator/S11.3.2_A4_T3.js deleted file mode 100644 index 29a7b0ce8..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.2_Postfix_Decrement_Operator/S11.3.2_A4_T3.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.3.2_A4_T3; -* @section: 11.3.2, 11.6.3; -* @assertion: Operator x-- returns ToNumber(x); -* @description: Type(x) is string primitive or String object; -*/ - -//CHECK#1 -var x = "1"; -var y = x--; -if (y !== 1) { - $ERROR('#1: var x = "1"; var y = x--; y === 1. Actual: ' + (y)); -} - -//CHECK#2 -var x = "x"; -var y = x--; -if (isNaN(y) !== true) { - $ERROR('#2: var x = "x"; var y = x--; y === Not-a-Number. Actual: ' + (y)); -} - -//CHECK#3 -var x = new String("-1"); -var y = x--; -if (y !== -1) { - $ERROR('#3: var x = new String("-1"); var y = x--; y === -1. Actual: ' + (y)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.2_Postfix_Decrement_Operator/S11.3.2_A4_T4.js b/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.2_Postfix_Decrement_Operator/S11.3.2_A4_T4.js deleted file mode 100644 index e86b6d7ab..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.2_Postfix_Decrement_Operator/S11.3.2_A4_T4.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.3.2_A4_T4; -* @section: 11.3.2, 11.6.3; -* @assertion: Operator x-- returns ToNumber(x); -* @description: If Type(x) is undefined or null; -*/ - -//CHECK#1 -var x; -var y = x--; -if (isNaN(y) !== true) { - $ERROR('#1: var x; var y = x--; y === Not-a-Number. Actual: ' + (y)); -} - -//CHECK#2 -var x = null; -var y = x--; -if (y !== 0) { - $ERROR('#2: var x = null; var y = x--; y === 0. Actual: ' + (y)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.2_Postfix_Decrement_Operator/S11.3.2_A4_T5.js b/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.2_Postfix_Decrement_Operator/S11.3.2_A4_T5.js deleted file mode 100644 index b1a630041..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.3_PostfixExpressions/11.3.2_Postfix_Decrement_Operator/S11.3.2_A4_T5.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.3.2_A4_T5; -* @section: 11.3.2, 11.6.3; -* @assertion: Operator x-- returns ToNumber(x); -* @description: Type(x) is Object object or Function object; -*/ - -//CHECK#1 -var x = {}; -var y = x--; -if (isNaN(y) !== true) { - $ERROR('#1: var x = {}; var y = x--; y === Not-a-Number. Actual: ' + (y)); -} - -//CHECK#2 -var x = function(){return 1}; -var y = x--; -if (isNaN(y) !== true) { - $ERROR('#2: var x = function(){return 1}; var y = x--; y === Not-a-Number. Actual: ' + (y)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.1_The_delete_Operator/S11.4.1_A1.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.1_The_delete_Operator/S11.4.1_A1.js deleted file mode 100644 index 2642e00e6..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.1_The_delete_Operator/S11.4.1_A1.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.1_A1; -* @section: 11.4.1; -* @assertion: White Space and Line Terminator between "delete" and UnaryExpression are allowed; -* @description: Checking by using eval; -*/ - -//CHECK#1 -if (eval("delete\u00090") !== true) { - $ERROR('#1: delete\\u00090 === true'); -} - -//CHECK#2 -if (eval("delete\u000B0") !== true) { - $ERROR('#2: delete\\u000B0 === true'); -} - -//CHECK#3 -if (eval("delete\u000C0") !== true) { - $ERROR('#3: delete\\u000C0 === true'); -} - -//CHECK#4 -if (eval("delete\u00200") !== true) { - $ERROR('#4: delete\\u00200 === true'); -} - -//CHECK#5 -if (eval("delete\u00A00") !== true) { - $ERROR('#5: delete\\u00A00 === true'); -} - -//CHECK#6 -if (eval("delete\u000A0") !== true) { - $ERROR('#6: delete\\u000A0 === true'); -} - -//CHECK#7 -if (eval("delete\u000D0") !== true) { - $ERROR('#7: delete\\u000D0 === true'); -} - -//CHECK#8 -if (eval("delete\u20280") !== true) { - $ERROR('#8: delete\\u20280 === true'); -} - -//CHECK#9 -if (eval("delete\u20290") !== true) { - $ERROR('#9: delete\\u20290 === true'); -} - -//CHECK#10 -if (eval("delete\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20290") !== true) { - $ERROR('#10: delete\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20290 === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.1_The_delete_Operator/S11.4.1_A2.1.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.1_The_delete_Operator/S11.4.1_A2.1.js deleted file mode 100644 index 3c960c972..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.1_The_delete_Operator/S11.4.1_A2.1.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.1_A2.1; -* @section: 11.4.1; -* @assertion: If Type(x) is not Reference, return true; -* @description: Checking primitive value and Object value cases; -*/ - -//CHECK#1 -if (delete 1 !== true) { - $ERROR('#1: delete 1 === true'); -} - -//CHECK#2 -if (delete new Object() !== true) { - $ERROR('#2: delete new Object() === true'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.1_The_delete_Operator/S11.4.1_A2.2_T1.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.1_The_delete_Operator/S11.4.1_A2.2_T1.js deleted file mode 100644 index 79b4f2997..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.1_The_delete_Operator/S11.4.1_A2.2_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.1_A2.2_T1; -* @section: 11.4.1; -* @assertion: If GetBase(x) doesn't have a property GetPropertyName(x), return true; -* @description: Checking undeclared variable case; -*/ - -//CHECK#1 -if (delete x !== true) { - $ERROR('#1: delete x === true'); -} - -//CHECK#2 -if (delete this.x !== true) { - $ERROR('#2: delete this.x === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.1_The_delete_Operator/S11.4.1_A2.2_T2.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.1_The_delete_Operator/S11.4.1_A2.2_T2.js deleted file mode 100644 index 75e30cbe3..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.1_The_delete_Operator/S11.4.1_A2.2_T2.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.1_A2.2_T2; -* @section: 11.4.1; -* @assertion: If GetBase(x) doesn't have a property GetPropertyName(x), return true; -* @description: Checking Object object and Function object cases; -*/ - -//CHECK#1 -function MyFunction(){} -var MyObject = new MyFunction(); -if (delete MyObject.prop !== true) { - $ERROR('#1: function MyFunction(){}; var MyObject = new MyFunction(); delete MyObject.prop === true'); -} - -//CHECK#2 -var MyObject = new Object(); -if (delete MyObject.prop !== true) { - $ERROR('#2: var MyObject = new Object(); delete MyObject.prop === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.1_The_delete_Operator/S11.4.1_A3.1.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.1_The_delete_Operator/S11.4.1_A3.1.js deleted file mode 100644 index ea3ab3753..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.1_The_delete_Operator/S11.4.1_A3.1.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.1_A3.1; -* @section: 11.4.1; -* @assertion: If the property has the DontDelete attribute, return false; -* @description: Checking declared variable; -*/ - -//CHECK#1 -var x = 1; -if (delete x !== false) { - $ERROR('#1: var x = 1; delete x === false'); -} - -//CHECK#2 -var y = 1; -if (delete this.y !== false) { - $ERROR('#2: var y = 1; delete this.y === false'); -} - -//CHECK#3 -function MyFunction(){}; -if (delete MyFunction !== false) { - $ERROR('#3: function MyFunction(){}; delete MyFunction === false'); -} - -//CHECK#4 -function MyFunction(){}; -var MyObject = new MyFunction(); -if (delete MyObject !== false) { - $ERROR('#4: function MyFunction(){}; var MyObject = new MyFunction(); delete MyObject === false'); -} - -//CHECK#5 -if (delete MyObject !== false) { - $ERROR('#5: function MyFunction(){}; var MyObject = new MyFunction(); delete MyObject === false'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.1_The_delete_Operator/S11.4.1_A3.2.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.1_The_delete_Operator/S11.4.1_A3.2.js deleted file mode 100644 index 16d7b94db..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.1_The_delete_Operator/S11.4.1_A3.2.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.1_A3.2; -* @section: 11.4.1; -* @assertion: If the property doesn't have the DontDelete attribute, return true; -* @description: Checking declared variable; -*/ - -//CHECK#1 -x = 1; -if (delete x !== true) { - $ERROR('#1: x = 1; delete x === true'); -} - -//CHECK#2 -function MyFunction(){}; -MyFunction.prop = 1; -if (delete MyFunction.prop !== true) { - $ERROR('#2: function MyFunction(){}; MyFunction.prop = 1; delete MyFunction.prop === true'); -} - -//CHECK#3 -function MyFunction(){}; -var MyObject = new MyFunction(); -MyObject.prop = 1; -if (delete MyObject.prop !== true) { - $ERROR('#3: function MyFunction(){}; var MyObject = new MyFunction(); MyFunction.prop = 1; delete MyObject.prop === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.1_The_delete_Operator/S11.4.1_A3.3.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.1_The_delete_Operator/S11.4.1_A3.3.js deleted file mode 100644 index 169310d5d..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.1_The_delete_Operator/S11.4.1_A3.3.js +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.1_A3.3; -* @section: 11.4.1; -* @assertion: If the property doesn't have the DontDelete attribute, remove the property; -* @description: Checking declared variable; -*/ - -//CHECK#1 -try { - x = 1; - delete x; - x; - $ERROR('#1: x = 1; delete x; x is not exist'); -} catch (e) { - if (e instanceof ReferenceError !== true) { - $ERROR('#1: x = 1; delete x; x is not exist'); - } -} - - -//CHECK#2 -function MyFunction(){}; -MyFunction.prop = 1; -delete MyFunction.prop; -if (MyFunction.prop !== undefined) { - $ERROR('#2: function MyFunction(){}; MyFunction.prop = 1; delete MyFunction.prop; MyFunction.prop === undefined. Actual: ' + (MyFunction.prop)); - -} - -//CHECK#3 -function MyFunction(){}; -var MyObjectVar = new MyFunction(); -MyObjectVar.prop = 1; -delete MyObjectVar.prop; -if (MyObjectVar.prop !== undefined) { - $ERROR('#3: function MyFunction(){}; var MyObjectVar = new MyFunction(); MyFunction.prop = 1; delete MyObjectVar.prop; MyObjectVar.prop === undefined. Actual: ' + (MyObjectVar.prop)); -} - -//CHECK#4 -if (delete MyObjectVar !== false) { - $ERROR('#4: function MyFunction(){}; var MyObjectVar = new MyFunction(); delete MyObjectVar === false'); -} - -//CHECK#5 -function MyFunction(){}; -MyObjectNotVar = new MyFunction(); -MyObjectNotVar.prop = 1; -delete MyObjectNotVar.prop; -if (MyObjectNotVar.prop !== undefined) { - $ERROR('#5: function MyFunction(){}; MyObjectNotVar = new MyFunction(); MyFunction.prop = 1; delete MyObjectNotVar.prop; MyObjectNotVar.prop === undefined. Actual: ' + (MyObjectNotVar.prop)); -} - -//CHECK#6 -if (delete MyObjectNotVar !== true) { - $ERROR('#6: function MyFunction(){}; var MyObjectNotVar = new MyFunction(); delete MyObjectNotVar === true'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.1_The_delete_Operator/S11.4.1_A4.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.1_The_delete_Operator/S11.4.1_A4.js deleted file mode 100644 index 83f5ce1d9..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.1_The_delete_Operator/S11.4.1_A4.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.1_A4; -* @section: 11.4.1; -* @assertion: "Delete" operator removes property, which is reference to the object, not the object; -* @description: Checking two reference by one object; -*/ - -//CHECK#1 -obj = new Object(); -ref = obj; -delete ref; -if (typeof obj !== "object") { - $ERROR('#1: obj = new Object(); ref = obj; delete ref; typeof obj === "object". Actual: ' + (typeof obj)); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.2_The_void_Operator/S11.4.2_A1.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.2_The_void_Operator/S11.4.2_A1.js deleted file mode 100644 index c299861ea..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.2_The_void_Operator/S11.4.2_A1.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.2_A1; -* @section: 11.4.2; -* @assertion: White Space and Line Terminator between "void" and UnaryExpression are allowed; -* @description: Checking by using eval; -*/ - -//CHECK#1 -if (eval("void\u00090") !== undefined) { - $ERROR('#1: void\\u00090 === undefined'); -} - -//CHECK#2 -if (eval("void\u000B0") !== undefined) { - $ERROR('#2: void\\u000B0 === undefined'); -} - -//CHECK#3 -if (eval("void\u000C0") !== undefined) { - $ERROR('#3: void\\u000C0 === undefined'); -} - -//CHECK#4 -if (eval("void\u00200") !== undefined) { - $ERROR('#4: void\\u00200 === undefined'); -} - -//CHECK#5 -if (eval("void\u00A00") !== undefined) { - $ERROR('#5: void\\u00A00 === undefined'); -} - -//CHECK#6 -if (eval("void\u000A0") !== undefined) { - $ERROR('#6: void\\u000A0 === undefined'); -} - -//CHECK#7 -if (eval("void\u000D0") !== undefined) { - $ERROR('#7: void\\u000D0 === undefined'); -} - -//CHECK#8 -if (eval("void\u20280") !== undefined) { - $ERROR('#8: void\\u20280 === undefined'); -} - -//CHECK#9 -if (eval("void\u20290") !== undefined) { - $ERROR('#9: void\\u20290 === undefined'); -} - -//CHECK#10 -if (eval("void\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20290") !== undefined) { - $ERROR('#10: void\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20290 === undefined'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.2_The_void_Operator/S11.4.2_A2_T1.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.2_The_void_Operator/S11.4.2_A2_T1.js deleted file mode 100644 index e668c4310..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.2_The_void_Operator/S11.4.2_A2_T1.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.2_A2_T1; -* @section: 11.4.2; -* @assertion: Operator "void" uses GetValue; -* @description: Either Type(x) is not Reference or GetBase(x) is not null; -*/ - -//CHECK#1 -if (void 0 !== undefined) { - $ERROR('#1: void 0 === undefined. Actual: ' + (void 0)); -} - -//CHECK#2 -var x = 0; -if (void x !== undefined) { - $ERROR('#2: var x = 0; void x === undefined. Actual: ' + (void x)); -} - -//CHECK#3 -var x = new Object(); -if (void x !== undefined) { - $ERROR('#3: var x = new Object(); void x === undefined. Actual: ' + (void x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.2_The_void_Operator/S11.4.2_A2_T2.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.2_The_void_Operator/S11.4.2_A2_T2.js deleted file mode 100644 index 8bc788ea8..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.2_The_void_Operator/S11.4.2_A2_T2.js +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.2_A2_T2; -* @section: 11.4.2; -* @assertion: Operator "void" uses GetValue; -* @description: If GetBase(x) is null, throw ReferenceError; -* @negative -*/ - -//CHECK#1 -void x; diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.2_The_void_Operator/S11.4.2_A4_T1.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.2_The_void_Operator/S11.4.2_A4_T1.js deleted file mode 100644 index 944854623..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.2_The_void_Operator/S11.4.2_A4_T1.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.2_A4_T1; -* @section: 11.4.2; -* @assertion: Operator "void" evaluates UnaryExpression and returns undefined; -* @description: Type(x) is boolean primitive or Boolean object; -*/ - -//CHECK#1 -var x = false; -if (void x !== undefined) { - $ERROR('#1: var x = false; void x === undefined. Actual: ' + (void x)); -} - -//CHECK#2 -var x = new Boolean(true); -if (void x !== undefined) { - $ERROR('#2: var x = new Boolean(true); void x === undefined. Actual: ' + (void x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.2_The_void_Operator/S11.4.2_A4_T2.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.2_The_void_Operator/S11.4.2_A4_T2.js deleted file mode 100644 index 5c2a33c54..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.2_The_void_Operator/S11.4.2_A4_T2.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.2_A4_T2; -* @section: 11.4.2; -* @assertion: Operator "void" evaluates UnaryExpression and returns undefined; -* @description: Type(x) is number primitive or Number object; -*/ - -//CHECK#1 -var x = 0.1; -if (void x !== undefined) { - $ERROR('#1: var x = 0.1; void x === undefined. Actual: ' + (void x)); -} - -//CHECK#2 -var x = new Number(-1.1); -if (void x !== undefined) { - $ERROR('#2: var x = new Number(-1.1); void x === undefined. Actual: ' + (void x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.2_The_void_Operator/S11.4.2_A4_T3.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.2_The_void_Operator/S11.4.2_A4_T3.js deleted file mode 100644 index 9e41f2c03..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.2_The_void_Operator/S11.4.2_A4_T3.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.2_A4_T3; -* @section: 11.4.2; -* @assertion: Operator "void" evaluates UnaryExpression and returns undefined; -* @description: Type(x) is string primitive of String object; -*/ - -//CHECK#1 -var x = "1"; -if (void x !== undefined) { - $ERROR('#1: var x = "1"; void x === undefined. Actual: ' + (void x)); -} - -//CHECK#2 -var x = "x"; -if (isNaN(void x) !== true) { - $ERROR('#2: var x = "x"; void x === undefined. Actual: ' + (void x)); -} - -//CHECK#3 -var x = new String("-1"); -if (void x !== undefined) { - $ERROR('#3: var x = new String("-1"); void x === undefined. Actual: ' + (void x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.2_The_void_Operator/S11.4.2_A4_T4.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.2_The_void_Operator/S11.4.2_A4_T4.js deleted file mode 100644 index db4d09672..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.2_The_void_Operator/S11.4.2_A4_T4.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.2_A4_T4; -* @section: 11.4.2; -* @assertion: Operator "void" evaluates UnaryExpression and returns undefined; -* @description: Type(x) is undefined or null; -*/ - -//CHECK#1 -var x; -if (isNaN(void x) !== true) { - $ERROR('#1: var x; void x === undefined. Actual: ' + (void x)); -} - -//CHECK#2 -var x = null; -if (void x !== undefined) { - $ERROR('#2: var x = null; void x === undefined. Actual: ' + (void x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.2_The_void_Operator/S11.4.2_A4_T5.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.2_The_void_Operator/S11.4.2_A4_T5.js deleted file mode 100644 index d2df4cbd9..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.2_The_void_Operator/S11.4.2_A4_T5.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.2_A4_T5; -* @section: 11.4.2; -* @assertion: Operator "void" evaluates UnaryExpression and returns undefined; -* @description: Type(x) is Object object or Function object; -*/ - -//CHECK#1 -var x = {}; -if (isNaN(void x) !== true) { - $ERROR('#1: var x = {}; void x === undefined. Actual: ' + (void x)); -} - -//CHECK#2 -var x = function(){return 1}; -if (isNaN(void x) !== true) { - $ERROR('#2: var x = function(){return 1}; void x === undefined. Actual: ' + (void x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.2_The_void_Operator/S11.4.2_A4_T6.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.2_The_void_Operator/S11.4.2_A4_T6.js deleted file mode 100644 index 1acd5848c..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.2_The_void_Operator/S11.4.2_A4_T6.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.2_A4_T6; -* @section: 11.4.2; -* @assertion: Operator "void" evaluates UnaryExpression and returns undefined; -* @description: Checking Simple Assignment operator; -*/ - -//CHECK#1 -var x = 0; -if (void (x = 1) !== undefined) { - $ERROR('#1: var x = 0; void (x = 1) === undefined. Actual: ' + (void (x = 1))); -} else { - if (x !== 1) { - $ERROR('#1: var x = 0; void (x = 1); x === 1. Actual: ' + (x)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.3_The_typeof_Operator/S11.4.3_A1.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.3_The_typeof_Operator/S11.4.3_A1.js deleted file mode 100644 index 141c2fa28..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.3_The_typeof_Operator/S11.4.3_A1.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.3_A1; -* @section: 11.4.3; -* @assertion: White Space and Line Terminator between "typeof" and UnaryExpression are allowed; -* @description: Checking by using eval; -*/ - -//CHECK#1 -if (eval("var x = 0; typeof\u0009x") !== "number") { - $ERROR('#1: var x = 0; typeof\\u0009x; x === "number". Actual: ' + (x)); -} - -//CHECK#2 -if (eval("var x = 0; typeof\u000Bx") !== "number") { - $ERROR('#2: var x = 0; typeof\\u000Bx; x === "number". Actual: ' + (x)); -} - -//CHECK#3 -if (eval("var x = 0; typeof\u000Cx") !== "number") { - $ERROR('#3: var x = 0; typeof\\u000Cx; x === "number". Actual: ' + (x)); -} - -//CHECK#4 -if (eval("var x = 0; typeof\u0020x") !== "number") { - $ERROR('#4: var x = 0; typeof\\u0020x; x === "number". Actual: ' + (x)); -} - -//CHECK#5 -if (eval("var x = 0; typeof\u00A0x") !== "number") { - $ERROR('#5: var x = 0; typeof\\u00A0x; x === "number". Actual: ' + (x)); -} - -//CHECK#6 -if (eval("var x = 0; typeof\u000Ax") !== "number") { - $ERROR('#6: var x = 0; typeof\\u000Ax; x === "number". Actual: ' + (x)); -} - -//CHECK#7 -if (eval("var x = 0; typeof\u000Dx") !== "number") { - $ERROR('#7: var x = 0; typeof\\u000Dx; x === "number". Actual: ' + (x)); -} - -//CHECK#8 -if (eval("var x = 0; typeof\u2028x") !== "number") { - $ERROR('#8: var x = 0; typeof\\u2028x; x === "number". Actual: ' + (x)); -} - -//CHECK#9 -if (eval("var x = 0; typeof\u2029x") !== "number") { - $ERROR('#9: var x = 0; typeof\\u2029x; x === "number". Actual: ' + (x)); -} - -//CHECK#10 -if (eval("var x = 0; typeof\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029x") !== "number") { - $ERROR('#10: var x = 0; typeof\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029x; x === "number". Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.3_The_typeof_Operator/S11.4.3_A2_T1.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.3_The_typeof_Operator/S11.4.3_A2_T1.js deleted file mode 100644 index e10b77101..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.3_The_typeof_Operator/S11.4.3_A2_T1.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.3_A2_T1; -* @section: 11.4.3; -* @assertion: Operator "typeof" uses GetValue; -* @description: Either Type(x) is not Reference or GetBase(x) is not null; -*/ - -//CHECK#1 -if (typeof 0 !== "number") { - $ERROR('#1: typeof 0 === "number". Actual: ' + (typeof 0)); -} - -//CHECK#2 -var x = 0; -if (typeof x !== "number") { - $ERROR('#2: typeof x === "number". Actual: ' + (typeof x)); -} - -//CHECK#3 -var x = new Object(); -if (typeof x !== "object") { - $ERROR('#3: var x = new Object(); typeof x === "object". Actual: ' + (typeof x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.3_The_typeof_Operator/S11.4.3_A2_T2.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.3_The_typeof_Operator/S11.4.3_A2_T2.js deleted file mode 100644 index a67f8bb7b..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.3_The_typeof_Operator/S11.4.3_A2_T2.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.3_A2_T2; -* @section: 11.4.3; -* @assertion: Operator "typeof" uses GetValue; -* @description: If GetBase(x) is null, return "undefined"; -*/ - -//CHECK#1 -if (typeof x !== "undefined") { - $ERROR('#1: typeof x === "undefined". Actual: ' + (typeof x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.3_The_typeof_Operator/S11.4.3_A3.1.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.3_The_typeof_Operator/S11.4.3_A3.1.js deleted file mode 100644 index 57f977aed..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.3_The_typeof_Operator/S11.4.3_A3.1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.3_A3.1; -* @section: 11.4.3; -* @assertion: Result of applying "typeof" operator to undefined is "undefined"; -* @description: typeof undefined === "undefined"; -*/ - -//CHECK#1 -if (typeof undefined !== "undefined") { - $ERROR('#1: typeof undefined === "undefined". Actual: ' + (typeof undefined)); -} - -//CHECK#2 -if (typeof void 0 !== "undefined") { - $ERROR('#2: typeof void 0 === "undefined". Actual: ' + (typeof void 0)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.3_The_typeof_Operator/S11.4.3_A3.2.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.3_The_typeof_Operator/S11.4.3_A3.2.js deleted file mode 100644 index fa9289780..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.3_The_typeof_Operator/S11.4.3_A3.2.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.3_A3.2; -* @section: 11.4.3; -* @assertion: Result of applying "typeof" operator to null is "object"; -* @description: typeof null === "object"; -*/ - -//CHECK#1 -if (typeof null !== "object") { - $ERROR('#1: typeof null === "object". Actual: ' + (typeof null)); -} - -//CHECK#2 -if (typeof RegExp("0").exec("1") !== "object") { - $ERROR('#2: typeof RegExp("0").exec("1") === "object". Actual: ' + (typeof RegExp("0").exec("1"))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.3_The_typeof_Operator/S11.4.3_A3.3.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.3_The_typeof_Operator/S11.4.3_A3.3.js deleted file mode 100644 index 69ae3ea68..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.3_The_typeof_Operator/S11.4.3_A3.3.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.3_A3.3; -* @section: 11.4.3; -* @assertion: Result of applying "typeof" operator to boolean is "boolean"; -* @description: typeof (boolean value) === "boolean"; -*/ - -//CHECK#1 -if (typeof true !== "boolean") { - $ERROR('#1: typeof true === "boolean". Actual: ' + (typeof true)); -} - -//CHECK#2 -if (typeof false !== "boolean") { - $ERROR('#2: typeof false === "boolean". Actual: ' + (typeof false)); -} - -//CHECK#3 -if (typeof !-1 !== "boolean") { - $ERROR('#3: typeof !-1 === "boolean". Actual: ' + (typeof !-1)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.3_The_typeof_Operator/S11.4.3_A3.4.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.3_The_typeof_Operator/S11.4.3_A3.4.js deleted file mode 100644 index 2eb59c509..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.3_The_typeof_Operator/S11.4.3_A3.4.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.3_A3.4; -* @section: 11.4.3; -* @assertion: Result of appying "typeof" operator to number is "number"; -* @description: typeof (number value) === "number"; -*/ - -//CHECK#1 -if (typeof 1 !== "number") { - $ERROR('#1: typeof 1 === "number". Actual: ' + (typeof 1)); -} - -//CHECK#2 -if (typeof Number.NaN !== "number") { - $ERROR('#2: typeof NaN === "number". Actual: ' + (typeof NaN)); -} - -//CHECK#3 -if (typeof Number.POSITIVE_INFINITY !== "number") { - $ERROR('#3: typeof Infinity === "number". Actual: ' + (typeof Infinity)); -} - -//CHECK#4 -if (typeof Number.NEGATIVE_INFINITY !== "number") { - $ERROR('#4: typeof -Infinity === "number". Actual: ' + (typeof -Infinity)); -} - -//CHECK#5 -if (typeof Math.PI !== "number") { - $ERROR('#5: typeof Math.PI === "number". Actual: ' + (typeof Math.PI)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.3_The_typeof_Operator/S11.4.3_A3.5.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.3_The_typeof_Operator/S11.4.3_A3.5.js deleted file mode 100644 index 4f16f8361..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.3_The_typeof_Operator/S11.4.3_A3.5.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.3_A3.5; -* @section: 11.4.3; -* @assertion: Result of appying "typeof" operator to string is "string"; -* @description: typeof (string value) === "string"; -*/ - -//CHECK#1 -if (typeof "1" !== "string") { - $ERROR('#1: typeof "1" === "string". Actual: ' + (typeof "1")); -} - -//CHECK#2 -if (typeof "NaN" !== "string") { - $ERROR('#2: typeof "NaN" === "string". Actual: ' + (typeof "NaN")); -} - -//CHECK#3 -if (typeof "Infinity" !== "string") { - $ERROR('#3: typeof "Infinity" === "string". Actual: ' + (typeof "Infinity")); -} - -//CHECK#4 -if (typeof "" !== "string") { - $ERROR('#4: typeof "" === "string". Actual: ' + (typeof "")); -} - -//CHECK#5 -if (typeof "true" !== "string") { - $ERROR('#5: typeof "true" === "string". Actual: ' + (typeof "true")); -} - -//CHECK#6 -if (typeof Date() !== "string") { - $ERROR('#6: typeof Date() === "string". Actual: ' + (typeof Date())); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.3_The_typeof_Operator/S11.4.3_A3.6.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.3_The_typeof_Operator/S11.4.3_A3.6.js deleted file mode 100644 index b01810f97..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.3_The_typeof_Operator/S11.4.3_A3.6.js +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.3_A3.6; -* @section: 11.4.3; -* @assertion: Result of applying "typeof" operator to the object that is native and doesn't implement [[Call]] is "object"; -* @description: typeof (object without [[Call]]) === "object"; -*/ - -//CHECK#1 -if (typeof this !== "object") { - $ERROR('#1: typeof this === "object". Actual: ' + (typeof this)); -} - -//CHECK#2 -if (typeof new Object() !== "object") { - $ERROR('#2: typeof new Object() === "object". Actual: ' + (typeof new Object())); -} - -//CHECK#3 -if (typeof new Array(1,2,3) !== "object") { - $ERROR('#3: typeof new Array(1,2,3) === "object". Actual: ' + (typeof new Array(1,2,3))); -} - -//CHECK#4 -if (typeof Array(1,2,3) !== "object") { - $ERROR('#4: typeof Array(1,2,3) === "object". Actual: ' + (typeof Array(1,2,3))); -} - -//CHECK#5 -if (typeof new String("x") !== "object") { - $ERROR('#5: typeof new String("x") === "object". Actual: ' + (typeof new String("x"))); -} - -//CHECK#6 -if (typeof new Boolean(true) !== "object") { - $ERROR('#6: typeof new Boolean(true) === "object". Actual: ' + (typeof new Boolean(true))); -} - -//CHECK#7 -if (typeof new Number(1) !== "object") { - $ERROR('#7: typeof new Number(1) === "object". Actual: ' + (typeof new Number(1))); -} - -//CHECK#8 -//The Math object does not have a [[Construct]] property; -//it is not possible to use the Math object as a constructor with the new operator. -//The Math object does not have a [[Call]] property; it is not possible to invoke the Math object as a object. -if (typeof Math !== "object") { - $ERROR('#8: typeof Math === "object". Actual: ' + (typeof Math)); -} - -//CHECK#9 -if (typeof new Date() !== "object") { - $ERROR('#9: typeof new Date() === "object". Actual: ' + (typeof new Date())); -} - -//CHECK#10 -if (typeof new Error() !== "object") { - $ERROR('#10: typeof new Error() === "object". Actual: ' + (typeof new Error())); -} - -//CHECK#11 -if (typeof new RegExp() !== "object") { - $ERROR('#11: typeof new RegExp() === "object". Actual: ' + (typeof new RegExp())); -} - -//CHECK#12 -if (typeof RegExp() !== "object") { - $ERROR('#12: typeof RegExp() === "object". Actual: ' + (typeof RegExp())); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.3_The_typeof_Operator/S11.4.3_A3.7.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.3_The_typeof_Operator/S11.4.3_A3.7.js deleted file mode 100644 index b6134679e..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.3_The_typeof_Operator/S11.4.3_A3.7.js +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.3_A3.7; -* @section: 11.4.3; -* @assertion: Result of applying "typeof" operator to the object that is native and implements [[Call]] is "function"; -* @description: typeof (object with [[Call]]) === "function"; -*/ - -//CHECK#1 -if (typeof new Function() !== "function") { - $ERROR('#1: typeof new Function() === "function". Actual: ' + (typeof new Function())); -} - -//CHECK#2 -if (typeof Function() !== "function") { - $ERROR('#2: typeof Function() === "function". Actual: ' + (typeof Function())); -} - -//CHECK#3 -if (typeof Object !== "function") { - $ERROR('#3: typeof Object === "function". Actual: ' + (typeof Object)); -} - -//CHECK#4 -if (typeof String !== "function") { - $ERROR('#4: typeof String === "function". Actual: ' + (typeof String)); -} - -//CHECK5 -if (typeof Boolean !== "function") { - $ERROR('#5: typeof Boolean === "function". Actual: ' + (typeof Boolean)); -} - -//CHECK#6 -if (typeof Number !== "function") { - $ERROR('#6: typeof Number === "function". Actual: ' + (typeof Number)); -} - -//CHECK#7 -if (typeof Date !== "function") { - $ERROR('#7: typeof Date === "function". Actual: ' + (typeof Date)); -} - -//CHECK#8 -if (typeof Error !== "function") { - $ERROR('#8: typeof Error === "function". Actual: ' + (typeof Error)); -} - -//CHECK#9 -if (typeof RegExp !== "function") { - $ERROR('#9: typeof RegExp === "function". Actual: ' + (typeof RegExp)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.4_Prefix_Increment_Operator/S11.4.4_A1.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.4_Prefix_Increment_Operator/S11.4.4_A1.js deleted file mode 100644 index edd8abd85..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.4_Prefix_Increment_Operator/S11.4.4_A1.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.4_A1; -* @section: 11.4.4, 11.6.3, 7.2, 7.3; -* @assertion: White Space and Line Terminator between "++" and UnaryExpression are allowed; -* @description: Checking by using eval; -*/ - -//CHECK#1 -if (eval("var x = 0; ++\u0009x") !== 1) { - $ERROR('#1: var x = 0; ++\\u0009x; x === 1. Actual: ' + (x)); -} - -//CHECK#2 -if (eval("var x = 0; ++\u000Bx") !== 1) { - $ERROR('#2: var x = 0; ++\\u000Bx; x === 1. Actual: ' + (x)); -} - -//CHECK#3 -if (eval("var x = 0; ++\u000Cx") !== 1) { - $ERROR('#3: var x = 0; ++\\u000Cx; x === 1. Actual: ' + (x)); -} - -//CHECK#4 -if (eval("var x = 0; ++\u0020x") !== 1) { - $ERROR('#4: var x = 0; ++\\u0020x; x === 1. Actual: ' + (x)); -} - -//CHECK#5 -if (eval("var x = 0; ++\u00A0x") !== 1) { - $ERROR('#5: var x = 0; ++\\u00A0x; x === 1. Actual: ' + (x)); -} - -//CHECK#6 -if (eval("var x = 0; ++\u000Ax") !== 1) { - $ERROR('#6: var x = 0; ++\\u000Ax; x === 1. Actual: ' + (x)); -} - -//CHECK#7 -if (eval("var x = 0; ++\u000Dx") !== 1) { - $ERROR('#7: var x = 0; ++\\u000Dx; x === 1. Actual: ' + (x)); -} - -//CHECK#8 -if (eval("var x = 0; ++\u2028x") !== 1) { - $ERROR('#8: var x = 0; ++\\u2028x; x === 1. Actual: ' + (x)); -} - -//CHECK#9 -if (eval("var x = 0; ++\u2029x") !== 1) { - $ERROR('#9: var x = 0; ++\\u2029x; x === 1. Actual: ' + (x)); -} - -//CHECK#10 -if (eval("var x = 0; ++\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029x") !== 1) { - $ERROR('#10: var x = 0; ++\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029x; x === 1. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.4_Prefix_Increment_Operator/S11.4.4_A2.1_T1.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.4_Prefix_Increment_Operator/S11.4.4_A2.1_T1.js deleted file mode 100644 index 34d2168dd..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.4_Prefix_Increment_Operator/S11.4.4_A2.1_T1.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.4_A2.1_T1; -* @section: 11.4.4, 11.6.3; -* @assertion: Operator ++x uses GetValue and PutValue; -* @description: Type(x) is Reference and GetBase(x) is not null; -*/ - -//CHECK#1 -var x = 1; -if (++x !== 1 + 1) { - $ERROR('#1: var x = 1; ++x === 1 + 1. Actual: ' + (++x)); -} else { - if (x !== 1 + 1) { - $ERROR('#1: var x = 1; ++x; x === 1 + 1. Actual: ' + (x)); - } -} - -//CHECK#2 -this.x = 1; -if (++this.x !== 1 + 1) { - $ERROR('#2: this.x = 1; ++this.x === 1 + 1. Actual: ' + (++this.x)); -} else { - if (this.x !== 1 + 1) { - $ERROR('#2: this.x = 1; ++this.x; this.x === 1 + 1. Actual: ' + (this.x)); - } -} - -//CHECK#3 -var object = new Object(); -object.prop = 1; -if (++object.prop !== 1 + 1) { - $ERROR('#3: var object = new Object(); object.prop = 1; ++object.prop === 1 + 1. Actual: ' + (++object.prop)); -} else { - if (this.x !== 1 + 1) { - $ERROR('#3: var object = new Object(); object.prop = 1; ++object.prop; object.prop === 1 + 1. Actual: ' + (object.prop)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.4_Prefix_Increment_Operator/S11.4.4_A2.1_T2.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.4_Prefix_Increment_Operator/S11.4.4_A2.1_T2.js deleted file mode 100644 index 4c951602c..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.4_Prefix_Increment_Operator/S11.4.4_A2.1_T2.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.4_A2.1_T2; -* @section: 11.4.4, 11.6.3; -* @assertion: Operator ++x uses GetValue and PutValue; -* @description: If GetBase(x) is null, throw ReferenceError; -*/ - -//CHECK#1 -try { - ++x; - $ERROR('#1.1: ++x throw ReferenceError. Actual: ' + (++x)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: ++x throw ReferenceError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.4_Prefix_Increment_Operator/S11.4.4_A2.1_T3.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.4_Prefix_Increment_Operator/S11.4.4_A2.1_T3.js deleted file mode 100644 index feffe6b60..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.4_Prefix_Increment_Operator/S11.4.4_A2.1_T3.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.4_A2.1_T3; -* @section: 11.4.4, 11.6.3; -* @assertion: Operator ++x uses GetValue and PutValue; -* @description: If Type(x) is not Reference, throw ReferenceError (or SyntaxError); -* @negative -*/ - -//CHECK#1 -try { - ++1; - $ERROR('#1.1: ++1 throw ReferenceError (or SyntaxError). Actual: ' + (++1)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: ++1 throw ReferenceError (or SyntaxError). Actual: ' + (e)); - } else { - ++1; - } -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.4_Prefix_Increment_Operator/S11.4.4_A2.2_T1.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.4_Prefix_Increment_Operator/S11.4.4_A2.2_T1.js deleted file mode 100644 index 6d0183284..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.4_Prefix_Increment_Operator/S11.4.4_A2.2_T1.js +++ /dev/null @@ -1,103 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.4.4_A2.2_T1; - * @section: 11.4.4, 8.6.2.6; - * @assertion: Operator ++x uses [[Default Value]]; - * @description: If Type(value) is Object, evaluate ToPrimitive(value, Number); - */ - -//CHECK#1 -var object = {valueOf: function() {return 1}}; -if (++object !== 1 + 1) { - $ERROR('#1: var object = {valueOf: function() {return 1}}; ++object === 1 + 1. Actual: ' + (++object)); -} else { - if (object !== 1 + 1) { - $ERROR('#1: var object = {valueOf: function() {return 1}}; ++object; object === 1 + 1. Actual: ' + (object)); - } -} - -//CHECK#2 -var object = {valueOf: function() {return 1}, toString: function() {return 0}}; -if (++object !== 1 + 1) { - $ERROR('#2: var object = {valueOf: function() {return 1}, toString: function() {return 0}}; ++object === 1 + 1. Actual: ' + (++object)); -} else { - if (object !== 1 + 1) { - $ERROR('#2: var object = {valueOf: function() {return 1}, toString: function() {return 0}}; ++object; object === 1 + 1. Actual: ' + (object)); - } -} - -//CHECK#3 -var object = {valueOf: function() {return 1}, toString: function() {return {}}}; -if (++object !== 1 + 1) { - $ERROR('#3: var object = {valueOf: function() {return 1}, toString: function() {return {}}}; ++object === 1 + 1. Actual: ' + (++object)); -} else { - if (object !== 1 + 1) { - $ERROR('#3: var object = {valueOf: function() {return 1}, toString: function() {return {}}}; ++object; object === 1 + 1. Actual: ' + (object)); - } -} - -//CHECK#4 -try { - var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; - if (++object !== 1 + 1) { - $ERROR('#4.1: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; ++object === 1 + 1. Actual: ' + (++object)); - } else { - if (object !== 1 + 1) { - $ERROR('#4.1: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; ++object; object === 1 + 1. Actual: ' + (object)); - } - } -} -catch (e) { - if (e === "error") { - $ERROR('#4.2: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; ++object not throw "error"'); - } else { - $ERROR('#4.3: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; ++object not throw Error. Actual: ' + (e)); - } -} - -//CHECK#5 -var object = {toString: function() {return 1}}; -if (++object !== 1 + 1) { - $ERROR('#5.1: var object = {toString: function() {return 1}}; ++object === 1 + 1. Actual: ' + (++object)); -} else { - if (object !== 1 + 1) { - $ERROR('#5.2: var object = {toString: function() {return 1}}; ++object; object === 1 + 1. Actual: ' + (object)); - } -} - - -//CHECK#6 -var object = {valueOf: function() {return {}}, toString: function() {return 1}} -if (++object !== 1 + 1) { - $ERROR('#6.1: var object = {valueOf: function() {return {}}, toString: function() {return 1}}; ++object === 1 + 1. Actual: ' + (++object)); -} else { - if (object !== 1 + 1) { - $ERROR('#6.2: var object = {valueOf: function() {return {}}, toString: function() {return 1}}; ++object; object === 1 + 1. Actual: ' + (object)); - } -} - -//CHECK#7 -try { - var object = {valueOf: function() {throw "error"}, toString: function() {return 1}}; - ++object; - $ERROR('#7.1: var object = {valueOf: function() {throw "error"}, toString: function() {return 1}}; ++object throw "error". Actual: ' + (++object)); -} -catch (e) { - if (e !== "error") { - $ERROR('#7.2: var object = {valueOf: function() {throw "error"}, toString: function() {return 1}}; ++object throw "error". Actual: ' + (e)); - } -} - -//CHECK#8 -try { - var object = {valueOf: function() {return {}}, toString: function() {return {}}}; - ++object; - $ERROR('#8.1: var object = {valueOf: function() {return {}}, toString: function() {return {}}}; ++object throw TypeError. Actual: ' + (++object)); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#8.2: var object = {valueOf: function() {return {}}, toString: function() {return {}}}; ++object throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.4_Prefix_Increment_Operator/S11.4.4_A3_T1.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.4_Prefix_Increment_Operator/S11.4.4_A3_T1.js deleted file mode 100644 index 738629610..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.4_Prefix_Increment_Operator/S11.4.4_A3_T1.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.4_A3_T1; -* @section: 11.4.4, 11.6.3; -* @assertion: Operator ++x returns x = ToNumber(x) + 1; -* @description: Type(x) is boolean primitive or Boolean object; -*/ - -//CHECK#1 -var x = false; -++x; -if (x !== 0 + 1) { - $ERROR('#1: var x = false; ++x; x === 0 + 1. Actual: ' + (x)); -} - -//CHECK#2 -var x = new Boolean(true); -++x; -if (x !== 1 + 1) { - $ERROR('#2: var x = new Boolean(true); ++x; x === 1 + 1. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.4_Prefix_Increment_Operator/S11.4.4_A3_T2.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.4_Prefix_Increment_Operator/S11.4.4_A3_T2.js deleted file mode 100644 index c3e89f381..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.4_Prefix_Increment_Operator/S11.4.4_A3_T2.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.4_A3_T2; -* @section: 11.4.4, 11.6.3; -* @assertion: Operator ++x returns x = ToNumber(x) + 1; -* @description: Type(x) is number primitive or Number object; -*/ - -//CHECK#1 -var x = 0.1; -++x; -if (x !== 0.1 + 1) { - $ERROR('#1: var x = 0.1; ++x; x === 0.1 + 1. Actual: ' + (x)); -} - -//CHECK#2 -var x = new Number(-1.1); -++x; -if (x !== -1.1 + 1) { - $ERROR('#2: var x = new Number(-1.1); ++x; x === -1.1 + 1. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.4_Prefix_Increment_Operator/S11.4.4_A3_T3.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.4_Prefix_Increment_Operator/S11.4.4_A3_T3.js deleted file mode 100644 index 50b298dd8..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.4_Prefix_Increment_Operator/S11.4.4_A3_T3.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.4_A3_T3; -* @section: 11.4.4, 11.6.3; -* @assertion: Operator ++x returns x = ToNumber(x) + 1; -* @description: Type(x) is string primitive or String object; -*/ - -//CHECK#1 -var x = "1"; -++x; -if (x !== 1 + 1) { - $ERROR('#1: var x = "1"; ++x; x === 1 + 1. Actual: ' + (x)); -} - -//CHECK#2 -var x = "x"; -++x; -if (isNaN(x) !== true) { - $ERROR('#2: var x = "x"; ++x; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#3 -var x = new Number("-1"); -++x; -if (x !== -1 + 1) { - $ERROR('#3: var x = new String("-1"); ++x; x === -1 + 1. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.4_Prefix_Increment_Operator/S11.4.4_A3_T4.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.4_Prefix_Increment_Operator/S11.4.4_A3_T4.js deleted file mode 100644 index 8b6f1c5ad..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.4_Prefix_Increment_Operator/S11.4.4_A3_T4.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.4_A3_T4; -* @section: 11.4.4, 11.6.3; -* @assertion: Operator ++x returns x = ToNumber(x) + 1; -* @description: Type(x) is undefined or null; -*/ - -//CHECK#1 -var x; -++x; -if (isNaN(x) !== true) { - $ERROR('#1: var x; ++x; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#2 -var x = null; -++x; -if (x !== 1) { - $ERROR('#2: var x = null; ++x; x === 1. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.4_Prefix_Increment_Operator/S11.4.4_A3_T5.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.4_Prefix_Increment_Operator/S11.4.4_A3_T5.js deleted file mode 100644 index c32f787ec..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.4_Prefix_Increment_Operator/S11.4.4_A3_T5.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.4_A3_T5; -* @section: 11.4.4, 11.6.3; -* @assertion: Operator ++x returns x = ToNumber(x) + 1; -* @description: Type(x) is Object object or Function object; -*/ - -//CHECK#1 -var x = {}; -++x; -if (isNaN(x) !== true) { - $ERROR('#1: var x = {}; ++x; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#2 -var x = function(){return 1}; -++x; -if (isNaN(x) !== true) { - $ERROR('#2: var x = function(){return 1}; ++x; x === Not-a-Number. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.4_Prefix_Increment_Operator/S11.4.4_A4_T1.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.4_Prefix_Increment_Operator/S11.4.4_A4_T1.js deleted file mode 100644 index 304fefe64..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.4_Prefix_Increment_Operator/S11.4.4_A4_T1.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.4_A4_T1; -* @section: 11.4.4, 11.6.3; -* @assertion: Operator ++x returns ToNumber(x) + 1; -* @description: Type(x) is boolean primitive or Boolean object; -*/ - -//CHECK#1 -var x = false; -if (++x !== 0 + 1) { - $ERROR('#1: var x = false; ++x === 0 + 1. Actual: ' + (++x)); -} - -//CHECK#2 -var x = new Boolean(true); -if (++x !== 1 + 1) { - $ERROR('#2: var x = new Boolean(true); ++x === 1 + 1. Actual: ' + (++x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.4_Prefix_Increment_Operator/S11.4.4_A4_T2.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.4_Prefix_Increment_Operator/S11.4.4_A4_T2.js deleted file mode 100644 index 5f406a602..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.4_Prefix_Increment_Operator/S11.4.4_A4_T2.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.4_A4_T2; -* @section: 11.4.4, 11.6.3; -* @assertion: Operator ++x returns ToNumber(x) + 1; -* @description: Type(x) is number primitive or Number object; -*/ - -//CHECK#1 -var x = 0.1; -if (++x !== 0.1 + 1) { - $ERROR('#1: var x = 0.1; ++x === 0.1 + 1. Actual: ' + (++x)); -} - -//CHECK#2 -var x = new Number(-1.1); -if (++x !== -1.1 + 1) { - $ERROR('#2: var x = new Number(-1.1); ++x === -1.1 + 1. Actual: ' + (++x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.4_Prefix_Increment_Operator/S11.4.4_A4_T3.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.4_Prefix_Increment_Operator/S11.4.4_A4_T3.js deleted file mode 100644 index 9d3a3c734..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.4_Prefix_Increment_Operator/S11.4.4_A4_T3.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.4_A4_T3; -* @section: 11.4.4, 11.6.3; -* @assertion: Operator ++x returns ToNumber(x) + 1; -* @description: Type(x) is string primitive or String object; -*/ - -//CHECK#1 -var x = "1"; -if (++x !== 1 + 1) { - $ERROR('#1: var x = "1"; ++x === 1 + 1. Actual: ' + (++x)); -} - -//CHECK#2 -var x = "x"; -if (isNaN(++x) !== true) { - $ERROR('#2: var x = "x"; ++x === Not-a-Number. Actual: ' + (++x)); -} - -//CHECK#3 -var x = new String("-1"); -if (++x !== -1 + 1) { - $ERROR('#3: var x = new String("-1"); ++x === -1 + 1. Actual: ' + (++x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.4_Prefix_Increment_Operator/S11.4.4_A4_T4.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.4_Prefix_Increment_Operator/S11.4.4_A4_T4.js deleted file mode 100644 index 19ec7fcf6..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.4_Prefix_Increment_Operator/S11.4.4_A4_T4.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.4_A4_T4; -* @section: 11.4.4, 11.6.3; -* @assertion: Operator ++x returns ToNumber(x) + 1; -* @description: Type(x) is undefined or null; -*/ - -//CHECK#1 -var x; -if (isNaN(++x) !== true) { - $ERROR('#1: var x; ++x === Not-a-Number. Actual: ' + (++x)); -} - -//CHECK#2 -var x = null; -if (++x !== 1) { - $ERROR('#2: var x = null; ++x === 1. Actual: ' + (++x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.4_Prefix_Increment_Operator/S11.4.4_A4_T5.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.4_Prefix_Increment_Operator/S11.4.4_A4_T5.js deleted file mode 100644 index dee44bfe4..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.4_Prefix_Increment_Operator/S11.4.4_A4_T5.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.4_A4_T5; -* @section: 11.4.4, 11.6.3; -* @assertion: Operator ++x returns ToNumber(x) + 1; -* @description: Type(x) is Object object or Function object; -*/ - -//CHECK#1 -var x = {}; -if (isNaN(++x) !== true) { - $ERROR('#1: var x = {}; ++x === Not-a-Number. Actual: ' + (++x)); -} - -//CHECK#2 -var x = function(){return 1}; -if (isNaN(++x) !== true) { - $ERROR('#2: var x = function(){return 1}; ++x === Not-a-Number. Actual: ' + (++x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.5_Prefix_Decrement_Operator/S11.4.5_A1.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.5_Prefix_Decrement_Operator/S11.4.5_A1.js deleted file mode 100644 index 0a3f512bc..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.5_Prefix_Decrement_Operator/S11.4.5_A1.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.5_A1; -* @section: 11.4.5, 11.6.3, 7.2, 7.3; -* @assertion: White Space and Line Terminator between "--" and UnaryExpression are allowed; -* @description: Checking by using eval; -*/ - -//CHECK#1 -if (eval("var x = 1; --\u0009x") !== 0) { - $ERROR('#1: var x = 1; --\\u0009x; x === 0. Actual: ' + (x)); -} - -//CHECK#2 -if (eval("var x = 1; --\u000Bx") !== 0) { - $ERROR('#2: var x = 1; --\\u000Bx; x === 0. Actual: ' + (x)); -} - -//CHECK#3 -if (eval("var x = 1; --\u000Cx") !== 0) { - $ERROR('#3: var x = 1; --\\u000Cx; x === 0. Actual: ' + (x)); -} - -//CHECK#4 -if (eval("var x = 1; --\u0020x") !== 0) { - $ERROR('#4: var x = 1; --\\u0020x; x === 0. Actual: ' + (x)); -} - -//CHECK#5 -if (eval("var x = 1; --\u00A0x") !== 0) { - $ERROR('#5: var x = 1; --\\u00A0x; x === 0. Actual: ' + (x)); -} - -//CHECK#6 -if (eval("var x = 1; --\u000Ax") !== 0) { - $ERROR('#6: var x = 1; --\\u000Ax; x === 0. Actual: ' + (x)); -} - -//CHECK#7 -if (eval("var x = 1; --\u000Dx") !== 0) { - $ERROR('#7: var x = 1; --\\u000Dx; x === 0. Actual: ' + (x)); -} - -//CHECK#8 -if (eval("var x = 1; --\u2028x") !== 0) { - $ERROR('#8: var x = 1; --\\u2028x; x === 0. Actual: ' + (x)); -} - -//CHECK#9 -if (eval("var x = 1; --\u2029x") !== 0) { - $ERROR('#9: var x = 1; --\\u2029x; x === 0. Actual: ' + (x)); -} - -//CHECK#10 -if (eval("var x = 1; --\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029x") !== 0) { - $ERROR('#10: var x = 1; --\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029x; x === 0. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.5_Prefix_Decrement_Operator/S11.4.5_A2.1_T1.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.5_Prefix_Decrement_Operator/S11.4.5_A2.1_T1.js deleted file mode 100644 index c22f7a592..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.5_Prefix_Decrement_Operator/S11.4.5_A2.1_T1.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.5_A2.1_T1; -* @section: 11.4.5, 11.6.3; -* @assertion: Operator --x uses GetValue and PutValue; -* @description: Type(x) is Reference and GetBase(x) is not null; -*/ - -//CHECK#1 -var x = 1; -if (--x !== 1 - 1) { - $ERROR('#1: var x = 1; --x === 1 - 1. Actual: ' + (--x)); -} else { - if (x !== 1 - 1) { - $ERROR('#1: var x = 1; --x; x === 1 - 1. Actual: ' + (x)); - } -} - -//CHECK#2 -this.x = 1; -if (--this.x !== 1 - 1) { - $ERROR('#2: this.x = 1; --this.x === 1 - 1. Actual: ' + (--this.x)); -} else { - if (this.x !== 1 - 1) { - $ERROR('#2: this.x = 1; --this.x; this.x === 1 - 1. Actual: ' + (this.x)); - } -} - -//CHECK#3 -var object = new Object(); -object.prop = 1; -if (--object.prop !== 1 - 1) { - $ERROR('#3: var object = new Object(); object.prop = 1; --object.prop === 1 - 1. Actual: ' + (--object.prop)); -} else { - if (this.x !== 1 - 1) { - $ERROR('#3: var object = new Object(); object.prop = 1; --object.prop; object.prop === 1 - 1. Actual: ' + (object.prop)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.5_Prefix_Decrement_Operator/S11.4.5_A2.1_T2.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.5_Prefix_Decrement_Operator/S11.4.5_A2.1_T2.js deleted file mode 100644 index 2b4e33646..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.5_Prefix_Decrement_Operator/S11.4.5_A2.1_T2.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.5_A2.1_T2; -* @section: 11.4.5, 11.6.3; -* @assertion: Operator --x uses GetValue and PutValue; -* @description: If GetBase(x) is null, throw ReferenceError; -*/ - -//CHECK#1 -try { - --x; - $ERROR('#1.1: --x throw ReferenceError. Actual: ' + (--x)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: --x throw ReferenceError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.5_Prefix_Decrement_Operator/S11.4.5_A2.1_T3.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.5_Prefix_Decrement_Operator/S11.4.5_A2.1_T3.js deleted file mode 100644 index 30901bae0..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.5_Prefix_Decrement_Operator/S11.4.5_A2.1_T3.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.5_A2.1_T3; -* @section: 11.4.5, 11.6.3; -* @assertion: Operator --x uses GetValue and PutValue; -* @description: If Type(x) is not Reference, throw ReferenceError (or SyntaxError); -* @negative -*/ - -//CHECK#1 -try { - --1; - $ERROR('#1.1: --1 throw ReferenceError (or SyntaxError). Actual: ' + (--1)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: --1 throw ReferenceError (or SyntaxError). Actual: ' + (e)); - } else { - --1; - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.5_Prefix_Decrement_Operator/S11.4.5_A2.2_T1.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.5_Prefix_Decrement_Operator/S11.4.5_A2.2_T1.js deleted file mode 100644 index 365ab2577..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.5_Prefix_Decrement_Operator/S11.4.5_A2.2_T1.js +++ /dev/null @@ -1,103 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.4.5_A2.2_T1; - * @section: 11.4.5, 8.6.2.6; - * @assertion: Operator --x uses [[Default Value]]; - * @description: If Type(value) is Object, evaluate ToPrimitive(value, Number); - */ - -//CHECK#1 -var object = {valueOf: function() {return 1}}; -if (--object !== 1 - 1) { - $ERROR('#1: var object = {valueOf: function() {return 1}}; --object === 1 - 1. Actual: ' + (--object)); -} else { - if (object !== 1 - 1) { - $ERROR('#1: var object = {valueOf: function() {return 1}}; --object; object === 1 - 1. Actual: ' + (object)); - } -} - -//CHECK#2 -var object = {valueOf: function() {return 1}, toString: function() {return 0}}; -if (--object !== 1 - 1) { - $ERROR('#2: var object = {valueOf: function() {return 1}, toString: function() {return 0}}; --object === 1 - 1. Actual: ' + (--object)); -} else { - if (object !== 1 - 1) { - $ERROR('#2: var object = {valueOf: function() {return 1}, toString: function() {return 0}}; --object; object === 1 - 1. Actual: ' + (object)); - } -} - -//CHECK#3 -var object = {valueOf: function() {return 1}, toString: function() {return {}}}; -if (--object !== 1 - 1) { - $ERROR('#3: var object = {valueOf: function() {return 1}, toString: function() {return {}}}; --object === 1 - 1. Actual: ' + (--object)); -} else { - if (object !== 1 - 1) { - $ERROR('#3: var object = {valueOf: function() {return 1}, toString: function() {return {}}}; --object; object === 1 - 1. Actual: ' + (object)); - } -} - -//CHECK#4 -try { - var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; - if (--object !== 1 - 1) { - $ERROR('#4.1: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; --object === 1 - 1. Actual: ' + (--object)); - } else { - if (object !== 1 - 1) { - $ERROR('#4.1: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; --object; object === 1 - 1. Actual: ' + (object)); - } - } -} -catch (e) { - if (e === "error") { - $ERROR('#4.2: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; --object not throw "error"'); - } else { - $ERROR('#4.3: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; --object not throw Error. Actual: ' + (e)); - } -} - -//CHECK#5 -var object = {toString: function() {return 1}}; -if (--object !== 1 - 1) { - $ERROR('#5.1: var object = {toString: function() {return 1}}; --object === 1 - 1. Actual: ' + (--object)); -} else { - if (object !== 1 - 1) { - $ERROR('#5.2: var object = {toString: function() {return 1}}; --object; object === 1 - 1. Actual: ' + (object)); - } -} - - -//CHECK#6 -var object = {valueOf: function() {return {}}, toString: function() {return 1}} -if (--object !== 1 - 1) { - $ERROR('#6.1: var object = {valueOf: function() {return {}}, toString: function() {return 1}}; --object === 1 - 1. Actual: ' + (--object)); -} else { - if (object !== 1 - 1) { - $ERROR('#6.2: var object = {valueOf: function() {return {}}, toString: function() {return 1}}; --object; object === 1 - 1. Actual: ' + (object)); - } -} - -//CHECK#7 -try { - var object = {valueOf: function() {throw "error"}, toString: function() {return 1}}; - --object; - $ERROR('#7.1: var object = {valueOf: function() {throw "error"}, toString: function() {return 1}}; --object throw "error". Actual: ' + (--object)); -} -catch (e) { - if (e !== "error") { - $ERROR('#7.2: var object = {valueOf: function() {throw "error"}, toString: function() {return 1}}; --object throw "error". Actual: ' + (e)); - } -} - -//CHECK#8 -try { - var object = {valueOf: function() {return {}}, toString: function() {return {}}}; - --object; - $ERROR('#8.1: var object = {valueOf: function() {return {}}, toString: function() {return {}}}; --object throw TypeError. Actual: ' + (--object)); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#8.2: var object = {valueOf: function() {return {}}, toString: function() {return {}}}; --object throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.5_Prefix_Decrement_Operator/S11.4.5_A3_T1.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.5_Prefix_Decrement_Operator/S11.4.5_A3_T1.js deleted file mode 100644 index 280c47a3c..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.5_Prefix_Decrement_Operator/S11.4.5_A3_T1.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.5_A3_T1; -* @section: 11.4.5, 11.6.3; -* @assertion: Operator --x returns x = ToNumber(x) - 1; -* @description: Type(x) is boolean primitive or Boolean object; -*/ - -//CHECK#1 -var x = true; ---x; -if (x !== 1 - 1) { - $ERROR('#1: var x = true; --x; x === 1 - 1. Actual: ' + (x)); -} - -//CHECK#2 -var x = new Boolean(false); ---x; -if (x !== 0 - 1) { - $ERROR('#2: var x = new Boolean(false); --x; x === 0 - 1. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.5_Prefix_Decrement_Operator/S11.4.5_A3_T2.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.5_Prefix_Decrement_Operator/S11.4.5_A3_T2.js deleted file mode 100644 index 06eb04ce7..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.5_Prefix_Decrement_Operator/S11.4.5_A3_T2.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.5_A3_T2; -* @section: 11.4.5, 11.6.3; -* @assertion: Operator --x returns x = ToNumber(x) - 1; -* @description: Type(x) is number primitive or Number object; -*/ - -//CHECK#1 -var x = 0.1; ---x; -if (x !== 0.1 - 1) { - $ERROR('#1: var x = 0.1; --x; x === 0.1 - 1. Actual: ' + (x)); -} - -//CHECK#2 -var x = new Number(-1.1); ---x; -if (x !== -1.1 - 1) { - $ERROR('#2: var x = new Number(-1.1); --x; x === -1.1 - 1. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.5_Prefix_Decrement_Operator/S11.4.5_A3_T3.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.5_Prefix_Decrement_Operator/S11.4.5_A3_T3.js deleted file mode 100644 index f5d7bd077..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.5_Prefix_Decrement_Operator/S11.4.5_A3_T3.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.5_A3_T3; -* @section: 11.4.5, 11.6.3; -* @assertion: Operator --x returns x = ToNumber(x) - 1; -* @description: Type(x) is primitive string or String object; -*/ - -//CHECK#1 -var x = "1"; ---x; -if (x !== 1 - 1) { - $ERROR('#1: var x = "1"; --x; x === 1 - 1. Actual: ' + (x)); -} - -//CHECK#2 -var x = "x"; ---x; -if (isNaN(x) !== true) { - $ERROR('#2: var x = "x"; --x; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#3 -var x = new Number("-1"); ---x; -if (x !== -1 - 1) { - $ERROR('#3: var x = new String("-1"); --x; x === -1 - 1. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.5_Prefix_Decrement_Operator/S11.4.5_A3_T4.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.5_Prefix_Decrement_Operator/S11.4.5_A3_T4.js deleted file mode 100644 index 60650b162..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.5_Prefix_Decrement_Operator/S11.4.5_A3_T4.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.5_A3_T4; -* @section: 11.4.5, 11.6.3; -* @assertion: Operator --x returns x = ToNumber(x) - 1; -* @description: Type(x) is undefined or null; -*/ - -//CHECK#1 -var x; ---x; -if (isNaN(x) !== true) { - $ERROR('#1: var x; --x; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#2 -var x = null; ---x; -if (x !== -1) { - $ERROR('#2: var x = null; --x; x === -1. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.5_Prefix_Decrement_Operator/S11.4.5_A3_T5.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.5_Prefix_Decrement_Operator/S11.4.5_A3_T5.js deleted file mode 100644 index 625aeb03d..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.5_Prefix_Decrement_Operator/S11.4.5_A3_T5.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.5_A3_T5; -* @section: 11.4.5, 11.6.3; -* @assertion: Operator --x returns x = ToNumber(x) - 1; -* @description: Type(x) is Object object or Function object; -*/ - -//CHECK#1 -var x = {}; ---x; -if (isNaN(x) !== true) { - $ERROR('#1: var x = {}; --x; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#2 -var x = function(){return 1}; ---x; -if (isNaN(x) !== true) { - $ERROR('#2: var x = function(){return 1}; --x; x === Not-a-Number. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.5_Prefix_Decrement_Operator/S11.4.5_A4_T1.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.5_Prefix_Decrement_Operator/S11.4.5_A4_T1.js deleted file mode 100644 index 108dc2cde..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.5_Prefix_Decrement_Operator/S11.4.5_A4_T1.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.5_A4_T1; -* @section: 11.4.5, 11.6.3; -* @assertion: Operator --x returns ToNumber(x) - 1; -* @description: Type(x) is boolean primitive or Boolean object; -*/ - -//CHECK#1 -var x = true; -if (--x !== 1 - 1) { - $ERROR('#1: var x = true; --x === 1 - 1. Actual: ' + (--x)); -} - -//CHECK#2 -var x = new Boolean(false); -if (--x !== 0 - 1) { - $ERROR('#2: var x = new Boolean(false); --x === 0 - 1. Actual: ' + (--x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.5_Prefix_Decrement_Operator/S11.4.5_A4_T2.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.5_Prefix_Decrement_Operator/S11.4.5_A4_T2.js deleted file mode 100644 index 55c8d1890..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.5_Prefix_Decrement_Operator/S11.4.5_A4_T2.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.5_A4_T2; -* @section: 11.4.5, 11.6.3; -* @assertion: Operator --x returns ToNumber(x) - 1; -* @description: Type(x) is number primitive or Number object; -*/ - -//CHECK#1 -var x = 0.1; -if (--x !== 0.1 - 1) { - $ERROR('#1: var x = 0.1; --x === 0.1 - 1. Actual: ' + (--x)); -} - -//CHECK#2 -var x = new Number(-1.1); -if (--x !== -1.1 - 1) { - $ERROR('#2: var x = new Number(-1.1); --x === -1.1- 1. Actual: ' + (--x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.5_Prefix_Decrement_Operator/S11.4.5_A4_T3.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.5_Prefix_Decrement_Operator/S11.4.5_A4_T3.js deleted file mode 100644 index dc33d235e..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.5_Prefix_Decrement_Operator/S11.4.5_A4_T3.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.5_A4_T3; -* @section: 11.4.5, 11.6.3; -* @assertion: Operator --x returns ToNumber(x) - 1; -* @description: Type(x) is string primitive or String object; -*/ - -//CHECK#1 -var x = "1"; -if (--x !== 1 - 1) { - $ERROR('#1: var x = "1"; --x === 1 - 1. Actual: ' + (--x)); -} - -//CHECK#2 -var x = "x"; -if (isNaN(--x) !== true) { - $ERROR('#2: var x = "x"; --x === Not-a-Number. Actual: ' + (--x)); -} - -//CHECK#3 -var x = new String("-1"); -if (--x !== -1 - 1) { - $ERROR('#3: var x = new String("-1"); --x === -1 - 1. Actual: ' + (--x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.5_Prefix_Decrement_Operator/S11.4.5_A4_T4.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.5_Prefix_Decrement_Operator/S11.4.5_A4_T4.js deleted file mode 100644 index d2286fa1c..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.5_Prefix_Decrement_Operator/S11.4.5_A4_T4.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.5_A4_T4; -* @section: 11.4.5, 11.6.3; -* @assertion: Operator --x returns ToNumber(x) - 1; -* @description: Type(x) is undefined or null; -*/ - - -//CHECK#1 -var x; -if (isNaN(--x) !== true) { - $ERROR('#1: var x; --x; x === Not-a-Number. Actual: ' + (x)); -} - -//CHECK#2 -var x = null; -if (--x !== -1) { - $ERROR('#2: var x = null; --x === -1. Actual: ' + (--x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.5_Prefix_Decrement_Operator/S11.4.5_A4_T5.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.5_Prefix_Decrement_Operator/S11.4.5_A4_T5.js deleted file mode 100644 index 53be1d0db..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.5_Prefix_Decrement_Operator/S11.4.5_A4_T5.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.5_A4_T5; -* @section: 11.4.5, 11.6.3; -* @assertion: Operator --x returns ToNumber(x) - 1; -* @description: Type(x) is Object object or Function object; -*/ - -//CHECK#1 -var x = {}; -if (isNaN(--x) !== true) { - $ERROR('#1: var x = {}; --x === Not-a-Number. Actual: ' + (--x)); -} - -//CHECK#2 -var x = function(){return 1}; -if (isNaN(--x) !== true) { - $ERROR('#2: var x = function(){return 1}; --x === Not-a-Number. Actual: ' + (--x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.6_Unary_plus_Operator/S11.4.6_A1.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.6_Unary_plus_Operator/S11.4.6_A1.js deleted file mode 100644 index aeb9636fc..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.6_Unary_plus_Operator/S11.4.6_A1.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.6_A1; -* @section: 11.4.6, 7.2, 7.3; -* @assertion: White Space and Line Terminator between "+" and UnaryExpression are allowed; -* @description: Checking by using eval; -*/ - -//CHECK#1 -if (eval("+\u00091") !== 1) { - $ERROR('#1: +\\u00091 === 1'); -} - -//CHECK#2 -if (eval("+\u000B1") !== 1) { - $ERROR('#2: +\\u000B1 === 1'); -} - -//CHECK#3 -if (eval("+\u000C1") !== 1) { - $ERROR('#3: +\\u000C1 === 1'); -} - -//CHECK#4 -if (eval("+\u00201") !== 1) { - $ERROR('#4: +\\u0020 === 1'); -} - -//CHECK#5 -if (eval("+\u00A01") !== 1) { - $ERROR('#5: +\\u00A01 === 1'); -} - -//CHECK#6 -if (eval("+\u000A1") !== 1) { - $ERROR('#6: +\\u000A1 === 1'); -} - -//CHECK#7 -if (eval("+\u000D1") !== 1) { - $ERROR('#7: +\\u000D1 === 1'); -} - -//CHECK#8 -if (eval("+\u20281") !== 1) { - $ERROR('#8: +\\u20281 === 1'); -} - -//CHECK#9 -if (eval("+\u20291") !== 1) { - $ERROR('#9: +\\u20291 === 1'); -} - -//CHECK#10 -if (eval("+\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20291") !== 1) { - $ERROR('#10: +\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20291 === 1'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.6_Unary_plus_Operator/S11.4.6_A2.1_T1.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.6_Unary_plus_Operator/S11.4.6_A2.1_T1.js deleted file mode 100644 index a703e0ff1..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.6_Unary_plus_Operator/S11.4.6_A2.1_T1.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.6_A2.1_T1; -* @section: 11.4.6; -* @assertion: Operator +x uses GetValue; -* @description: Either Type(x) is not Reference or GetBase(x) is not null; -*/ - -//CHECK#1 -if (+1 !== 1) { - $ERROR('#1: +1 === 1. Actual: ' + (+1)); -} - -//CHECK#2 -if (+(+1) !== 1) { - $ERROR('#2: +(+1) === -1. Actual: ' + (+(+1))); -} - -//CHECK#3 -var x = 1; -if (+x !== 1) { - $ERROR('#3: var x = +1; -x === 1. Actual: ' + (-x)); -} - -//CHECK#4 -var x = 1; -if (+(+x) !== 1) { - $ERROR('#4: var x = 1; +(+x) === 1. Actual: ' + (+(+x))); -} - -//CHECK#5 -var object = new Object(); -object.prop = 1; -if (+object.prop !== 1) { - $ERROR('#5: var object = new Object(); object.prop = 1; +object.prop === 1. Actual: ' + (+object.prop)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.6_Unary_plus_Operator/S11.4.6_A2.1_T2.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.6_Unary_plus_Operator/S11.4.6_A2.1_T2.js deleted file mode 100644 index befd6666c..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.6_Unary_plus_Operator/S11.4.6_A2.1_T2.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.6_A2.1_T2; -* @section: 11.4.6; -* @assertion: Operator +x uses GetValue; -* @description: If GetBase(x) is null, throw ReferenceError; -*/ - -//CHECK#1 -try { - +x; - $ERROR('#1.1: +x throw ReferenceError. Actual: ' + (+x)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: +x throw ReferenceError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.6_Unary_plus_Operator/S11.4.6_A2.2_T1.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.6_Unary_plus_Operator/S11.4.6_A2.2_T1.js deleted file mode 100644 index c6a9dabdd..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.6_Unary_plus_Operator/S11.4.6_A2.2_T1.js +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.4.6_A2.2_T1; - * @section: 11.4.6, 8.6.2.6; - * @assertion: Operator +x uses [[Default Value]]; - * @description: If Type(value) is Object, evaluate ToPrimitive(value, Number); - */ - -//CHECK#1 -var object = {valueOf: function() {return 1}}; -if (+object !== 1) { - $ERROR('#1: var object = {valueOf: function() {return 1}}; +object === 1. Actual: ' + (+object)); -} - -//CHECK#2 -var object = {valueOf: function() {return 1}, toString: function() {return 0}}; -if (+object !== 1) { - $ERROR('#2: var object = {valueOf: function() {return 1}, toString: function() {return 0}}; +object === 1. Actual: ' + (+object)); -} - -//CHECK#3 -var object = {valueOf: function() {return 1}, toString: function() {return {}}}; -if (+object !== 1) { - $ERROR('#3: var object = {valueOf: function() {return 1}, toString: function() {return {}}}; +object === 1. Actual: ' + (+object)); -} - -//CHECK#4 -try { - var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; - if (+object !== 1) { - $ERROR('#4.1: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; +object === 1. Actual: ' + (+object)); - } -} -catch (e) { - if (e === "error") { - $ERROR('#4.2: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; +object not throw "error"'); - } else { - $ERROR('#4.3: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; +object not throw Error. Actual: ' + (e)); - } -} - -//CHECK#5 -var object = {toString: function() {return 1}}; -if (+object !== 1) { - $ERROR('#5: var object = {toString: function() {return 1}}; +object === 1. Actual: ' + (+object)); -} - -//CHECK#6 -var object = {valueOf: function() {return {}}, toString: function() {return 1}} -if (+object !== 1) { - $ERROR('#6: var object = {valueOf: function() {return {}}, toString: function() {return 1}}; +object === 1. Actual: ' + (+object)); -} - -//CHECK#7 -try { - var object = {valueOf: function() {throw "error"}, toString: function() {return 1}}; - +object; - $ERROR('#7.1: var object = {valueOf: function() {throw "error"}, toString: function() {return 1}}; +object throw "error". Actual: ' + (+object)); -} -catch (e) { - if (e !== "error") { - $ERROR('#7.2: var object = {valueOf: function() {throw "error"}, toString: function() {return 1}}; +object throw "error". Actual: ' + (e)); - } -} - -//CHECK#8 -try { - var object = {valueOf: function() {return {}}, toString: function() {return {}}}; - +object; - $ERROR('#8.1: var object = {valueOf: function() {return {}}, toString: function() {return {}}}; +object throw TypeError. Actual: ' + (+object)); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#8.2: var object = {valueOf: function() {return {}}, toString: function() {return {}}}; +object throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.6_Unary_plus_Operator/S11.4.6_A3_T1.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.6_Unary_plus_Operator/S11.4.6_A3_T1.js deleted file mode 100644 index 35d2af330..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.6_Unary_plus_Operator/S11.4.6_A3_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.6_A3_T1; -* @section: 11.4.6; -* @assertion: Operator +x returns ToNumber(x); -* @description: Type(x) is boolean primitive or Boolean object; -*/ - -//CHECK#1 -if (+false !== 0) { - $ERROR('#1: +false === 0. Actual: ' + (+false)); -} - -//CHECK#2 -if (+new Boolean(true) !== 1) { - $ERROR('#2: +new Boolean(true) === 1. Actual: ' + (+new Boolean(true))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.6_Unary_plus_Operator/S11.4.6_A3_T2.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.6_Unary_plus_Operator/S11.4.6_A3_T2.js deleted file mode 100644 index 860f6e333..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.6_Unary_plus_Operator/S11.4.6_A3_T2.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.6_A3_T2; -* @section: 11.4.6; -* @assertion: Operator +x returns ToNumber(x); -* @description: Type(x) is number primitive or Number object; -*/ - -//CHECK#1 -if (+0.1 !== 0.1) { - $ERROR('#1: +0.1 === 0.1. Actual: ' + (+0.1)); -} - -//CHECK#2 -if (+new Number(-1.1) !== -1.1) { - $ERROR('#2: +new Number(-1.1) === -1.1. Actual: ' + (+new Number(-1.1))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.6_Unary_plus_Operator/S11.4.6_A3_T3.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.6_Unary_plus_Operator/S11.4.6_A3_T3.js deleted file mode 100644 index 40c2fa970..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.6_Unary_plus_Operator/S11.4.6_A3_T3.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.6_A3_T3; -* @section: 11.4.6; -* @assertion: Operator +x returns ToNumber(x); -* @description: Type(x) is string primitive or String object; -*/ - -//CHECK#1 -if (+"1" !== 1) { - $ERROR('#1: +"1" === 1. Actual: ' + (+"1")); -} - -//CHECK#2 -if (isNaN(+"x") !== true) { - $ERROR('#2: +"x" === Not-a-Number. Actual: ' + (+"x")); -} - -//CHECK#3 -if (+new Number("-1") !== -1) { - $ERROR('#3: +new String("-1") === -1. Actual: ' + (+new String("-1"))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.6_Unary_plus_Operator/S11.4.6_A3_T4.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.6_Unary_plus_Operator/S11.4.6_A3_T4.js deleted file mode 100644 index fa2f16602..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.6_Unary_plus_Operator/S11.4.6_A3_T4.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.6_A3_T4; -* @section: 11.4.6; -* @assertion: Operator +x returns ToNumber(x); -* @description: Type(x) is undefined or null; -*/ - -//CHECK#1 -if (isNaN(+void 0) !== true) { - $ERROR('#1: +void 0 === Not-a-Number. Actual: ' + (+void 0)); -} - -//CHECK#2 -if (+null !== 0) { - $ERROR('#2: +null === 0. Actual: ' + (+null)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.6_Unary_plus_Operator/S11.4.6_A3_T5.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.6_Unary_plus_Operator/S11.4.6_A3_T5.js deleted file mode 100644 index 78c89c941..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.6_Unary_plus_Operator/S11.4.6_A3_T5.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.6_A3_T5; -* @section: 11.4.6; -* @assertion: Operator +x returns ToNumber(x); -* @description: Type(x) is Object object or Function object; -*/ - -//CHECK#1 -if (isNaN(+{}) !== true) { - $ERROR('#1: +{} === Not-a-Number. Actual: ' + (+{})); -} - -//CHECK#2 -if (isNaN(+function(){return 1}) !== true) { - $ERROR('#2: +function(){return 1} === Not-a-Number. Actual: ' + (+function(){return 1})); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.7_Unary_minus_Operator/S11.4.7_A1.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.7_Unary_minus_Operator/S11.4.7_A1.js deleted file mode 100644 index 0951fa297..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.7_Unary_minus_Operator/S11.4.7_A1.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.7_A1; -* @section: 11.4.7, 7.2, 7.3; -* @assertion: White Space and Line Terminator between "-" and UnaryExpression are allowed; -* @description: Checking by using eval; -*/ - -//CHECK#1 -if (eval("-\u00091") !== -1) { - $ERROR('#1: -\\u00091 === -1'); -} - -//CHECK#2 -if (eval("-\u000B1") !== -1) { - $ERROR('#2: -\\u000B1 === -1'); -} - -//CHECK#3 -if (eval("-\u000C1") !== -1) { - $ERROR('#3: -\\u000C1 === -1'); -} - -//CHECK#4 -if (eval("-\u00201") !== -1) { - $ERROR('#4: -\\u0020 === -1'); -} - -//CHECK#5 -if (eval("-\u00A01") !== -1) { - $ERROR('#5: -\\u00A01 === -1'); -} - -//CHECK#6 -if (eval("-\u000A1") !== -1) { - $ERROR('#6: -\\u000A1 === -1'); -} - -//CHECK#7 -if (eval("-\u000D1") !== -1) { - $ERROR('#7: -\\u000D1 === -1'); -} - -//CHECK#8 -if (eval("-\u20281") !== -1) { - $ERROR('#8: -\\u20281 === -1'); -} - -//CHECK#9 -if (eval("-\u20291") !== -1) { - $ERROR('#9: -\\u20291 === -1'); -} - -//CHECK#10 -if (eval("-\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20291") !== -1) { - $ERROR('#10: -\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20291 === -1'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.7_Unary_minus_Operator/S11.4.7_A2.1_T1.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.7_Unary_minus_Operator/S11.4.7_A2.1_T1.js deleted file mode 100644 index 22a322348..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.7_Unary_minus_Operator/S11.4.7_A2.1_T1.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.7_A2.1_T1; -* @section: 11.4.7; -* @assertion: Operator -x uses GetValue; -* @description: Either Type(x) is not Reference or GetBase(x) is not null; -*/ - -//CHECK#1 -if (-1 !== -1) { - $ERROR('#1: -1 === -1. Actual: ' + (-1)); -} - -//CHECK#2 -if (-(-1) !== 1) { - $ERROR('#2: -(-1) === -1. Actual: ' + (-(-1))); -} - -//CHECK#3 -var x = -1; -if (-x !== 1) { - $ERROR('#3: var x = -1; -x === 1. Actual: ' + (-x)); -} - -//CHECK#4 -var x = -1; -if (-(-x) !== -1) { - $ERROR('#4: var x = -1; -(-x) === -1. Actual: ' + (-(-x))); -} - -//CHECK#5 -var object = new Object(); -object.prop = 1; -if (-object.prop !== -1) { - $ERROR('#5: var object = new Object(); object.prop = -1; -object.prop === -1. Actual: ' + (-object.prop)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.7_Unary_minus_Operator/S11.4.7_A2.1_T2.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.7_Unary_minus_Operator/S11.4.7_A2.1_T2.js deleted file mode 100644 index 6067d4078..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.7_Unary_minus_Operator/S11.4.7_A2.1_T2.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.7_A2.1_T2; -* @section: 11.4.7; -* @assertion: Operator -x uses GetValue; -* @description: If GetBase(x) is null, throw ReferenceError; -*/ - -//CHECK#1 -try { - -x; - $ERROR('#1.1: -x throw ReferenceError. Actual: ' + (-x)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: -x throw ReferenceError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.7_Unary_minus_Operator/S11.4.7_A2.2_T1.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.7_Unary_minus_Operator/S11.4.7_A2.2_T1.js deleted file mode 100644 index 62445055b..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.7_Unary_minus_Operator/S11.4.7_A2.2_T1.js +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.4.7_A2.2_T1; - * @section: 11.4.7, 8.6.2.6; - * @assertion: Operator -x uses [[Default Value]]; - * @description: If Type(value) is Object, evaluate ToPrimitive(value, Number); - */ - -//CHECK#1 -var object = {valueOf: function() {return -1}}; -if (-object !== 1) { - $ERROR('#1: var object = {valueOf: function() {return -1}}; -object === 1. Actual: ' + (-object)); -} - -//CHECK#2 -var object = {valueOf: function() {return -1}, toString: function() {return 0}}; -if (-object !== 1) { - $ERROR('#2: var object = {valueOf: function() {return -1}, toString: function() {return 0}}; -object === 1. Actual: ' + (-object)); -} - -//CHECK#3 -var object = {valueOf: function() {return -1}, toString: function() {return {}}}; -if (-object !== 1) { - $ERROR('#3: var object = {valueOf: function() {return -1}, toString: function() {return {}}}; -object === 1. Actual: ' + (-object)); -} - -//CHECK#4 -try { - var object = {valueOf: function() {return -1}, toString: function() {throw "error"}}; - if (-object !== 1) { - $ERROR('#4.1: var object = {valueOf: function() {return -1}, toString: function() {throw "error"}}; -object === 1. Actual: ' + (-object)); - } -} -catch (e) { - if (e === "error") { - $ERROR('#4.2: var object = {valueOf: function() {return -1}, toString: function() {throw "error"}}; -object not throw "error"'); - } else { - $ERROR('#4.3: var object = {valueOf: function() {return -1}, toString: function() {throw "error"}}; -object not throw Error. Actual: ' + (e)); - } -} - -//CHECK#5 -var object = {toString: function() {return -1}}; -if (-object !== 1) { - $ERROR('#5.1: var object = {toString: function() {return -1}}; -object === 1. Actual: ' + (-object)); -} - -//CHECK#6 -var object = {valueOf: function() {return {}}, toString: function() {return -1}} -if (-object !== 1) { - $ERROR('#6: var object = {valueOf: function() {return {}}, toString: function() {return -1}}; -object === 1. Actual: ' + (-object)); -} - -//CHECK#7 -try { - var object = {valueOf: function() {throw "error"}, toString: function() {return -1}}; - -object; - $ERROR('#7.1: var object = {valueOf: function() {throw "error"}, toString: function() {return -1}}; -object throw "error". Actual: ' + (-object)); -} -catch (e) { - if (e !== "error") { - $ERROR('#7.2: var object = {valueOf: function() {throw "error"}, toString: function() {return -1}}; -object throw "error". Actual: ' + (e)); - } -} - -//CHECK#8 -try { - var object = {valueOf: function() {return {}}, toString: function() {return {}}}; - -object; - $ERROR('#8.1: var object = {valueOf: function() {return {}}, toString: function() {return {}}}; -object throw TypeError. Actual: ' + (-object)); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#8.2: var object = {valueOf: function() {return {}}, toString: function() {return {}}}; -object throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.7_Unary_minus_Operator/S11.4.7_A3_T1.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.7_Unary_minus_Operator/S11.4.7_A3_T1.js deleted file mode 100644 index c988818da..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.7_Unary_minus_Operator/S11.4.7_A3_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.7_A3_T1; -* @section: 11.4.7; -* @assertion: Operator -x returns -ToNumber(x); -* @description: Type(x) is boolean primitive or Boolean object; -*/ - -//CHECK#1 -if (-false !== 0) { - $ERROR('#1: -false === 0. Actual: ' + (-false)); -} - -//CHECK#2 -if (-new Boolean(true) !== -1) { - $ERROR('#2: -new Boolean(true) === -1. Actual: ' + (-new Boolean(true))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.7_Unary_minus_Operator/S11.4.7_A3_T2.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.7_Unary_minus_Operator/S11.4.7_A3_T2.js deleted file mode 100644 index bf763effe..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.7_Unary_minus_Operator/S11.4.7_A3_T2.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.7_A3_T2; -* @section: 11.4.7; -* @assertion: Operator -x returns -ToNumber(x); -* @description: Type(x) is number primitive or Number object; -*/ - -//CHECK#1 -if (-(1) !== -1) { - $ERROR('#1: -(1) === -1. Actual: ' + (-(1))); -} - -//CHECK#2 -if (-new Number(-1) !== 1) { - $ERROR('#2: -new Number(-1) === 1. Actual: ' + (-new Number(-1))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.7_Unary_minus_Operator/S11.4.7_A3_T3.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.7_Unary_minus_Operator/S11.4.7_A3_T3.js deleted file mode 100644 index d6be7cc99..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.7_Unary_minus_Operator/S11.4.7_A3_T3.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.7_A3_T3; -* @section: 11.4.7; -* @assertion: Operator -x returns -ToNumber(x); -* @description: Type(x) is string primitive or String object; -*/ - -//CHECK#1 -if (-"1" !== -1) { - $ERROR('#1: -"1" === -1. Actual: ' + (-"1")); -} - -//CHECK#2 -if (isNaN(-"x") !== true) { - $ERROR('#2: -"x" === Not-a-Number. Actual: ' + (-"x")); -} - -//CHECK#3 -if (-new String("-1") !== 1) { - $ERROR('#3: -new String("-1") === 1. Actual: ' + (-new String("-1"))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.7_Unary_minus_Operator/S11.4.7_A3_T4.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.7_Unary_minus_Operator/S11.4.7_A3_T4.js deleted file mode 100644 index 1877387ed..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.7_Unary_minus_Operator/S11.4.7_A3_T4.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.7_A3_T4; -* @section: 11.4.7; -* @assertion: Operator -x returns -ToNumber(x); -* @description: Type(x) is undefined or null; -*/ - -//CHECK#1 -if (isNaN(-void 0) !== true) { - $ERROR('#1: +void 0 === Not-a-Number. Actual: ' + (+void 0)); -} - -//CHECK#2 -if (-null !== 0) { - $ERROR('#2: +null === 0. Actual: ' + (+null)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.7_Unary_minus_Operator/S11.4.7_A3_T5.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.7_Unary_minus_Operator/S11.4.7_A3_T5.js deleted file mode 100644 index 0a63fa917..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.7_Unary_minus_Operator/S11.4.7_A3_T5.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.7_A3_T5; -* @section: 11.4.7; -* @assertion: Operator -x returns -ToNumber(x); -* @description: Type(x) is Object object or Function object; -*/ - -//CHECK#1 -if (isNaN(-{}) !== true) { - $ERROR('#1: -{} === Not-a-Number. Actual: ' + (-{})); -} - -//CHECK#2 -if (isNaN(-function(){return 1}) !== true) { - $ERROR('#2: -function(){return 1} === Not-a-Number. Actual: ' + (-function(){return 1})); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.7_Unary_minus_Operator/S11.4.7_A4.1.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.7_Unary_minus_Operator/S11.4.7_A4.1.js deleted file mode 100644 index 6a1fa75c2..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.7_Unary_minus_Operator/S11.4.7_A4.1.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.7_A4.1; -* @section: 11.4.7; -* @assertion: If x is NaN, operator -x returns NaN; -* @description: Checking NaN; -*/ - -//CHECK#1 -if (isNaN(-NaN) !== true) { - $ERROR('#1: -NaN === Not-a-Number. Actual: ' + (-NaN)); -} - -//CHECK#2 -var x = NaN; -if (isNaN(-x) != true) { - $ERROR('#2: var x = NaN; -x === Not-a-Number. Actual: ' + (-x)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.7_Unary_minus_Operator/S11.4.7_A4.2.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.7_Unary_minus_Operator/S11.4.7_A4.2.js deleted file mode 100644 index 8a6bd8005..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.7_Unary_minus_Operator/S11.4.7_A4.2.js +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.7_A4.2; -* @section: 11.4.7; -* @assertion: Negating +0 produces -0, negating -0 produces +0; -* @description: Checking Infinity; -*/ - -//CHECK#1 -var x = 0; -x = -x; -if (x !== -0) { - $ERROR('#1.1: var x = 0; x = -x; x === 0. Actual: ' + (x)); -} else { - if (1/x !== Number.NEGATIVE_INFINITY) { - $ERROR('#1.2: var x = 0; x = -x; x === - 0. Actual: +0'); - } -} - -//CHECK#2 -var x = -0; -x = -x; -if (x !== 0) { - $ERROR('#2.1: var x = -0; x = -x; x === 0. Actual: ' + (x)); -} else { - if (1/x !== Number.POSITIVE_INFINITY) { - $ERROR('#2.2: var x = -0; x = -x; x === + 0. Actual: -0'); - } -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.8_Bitwise_NOT_Operator/S11.4.8_A1.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.8_Bitwise_NOT_Operator/S11.4.8_A1.js deleted file mode 100644 index d4dc1ead9..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.8_Bitwise_NOT_Operator/S11.4.8_A1.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.8_A1; -* @section: 11.4.8, 7.2, 7.3; -* @assertion: White Space and Line Terminator between "~" and UnaryExpression are allowed; -* @description: Checking by using eval; -*/ - -//CHECK#1 -if (eval("~\u00090") !== -1) { - $ERROR('#0: ~\\u00090 === -1'); -} - -//CHECK#2 -if (eval("~\u000B0") !== -1) { - $ERROR('#2: ~\\u000B0 === -1'); -} - -//CHECK#3 -if (eval("~\u000C0") !== -1) { - $ERROR('#3: ~\\u000C0 === -1'); -} - -//CHECK#4 -if (eval("~\u00200") !== -1) { - $ERROR('#4: ~\\u0020 === -1'); -} - -//CHECK#5 -if (eval("~\u00A00") !== -1) { - $ERROR('#5: ~\\u00A00 === -1'); -} - -//CHECK#6 -if (eval("~\u000A0") !== -1) { - $ERROR('#6: ~\\u000A0 === -1'); -} - -//CHECK#7 -if (eval("~\u000D0") !== -1) { - $ERROR('#7: ~\\u000D0 === -1'); -} - -//CHECK#8 -if (eval("~\u20280") !== -1) { - $ERROR('#8: ~\\u20280 === -1'); -} - -//CHECK#9 -if (eval("~\u20290") !== -1) { - $ERROR('#9: ~\\u20290 === -1'); -} - -//CHECK#10 -if (eval("~\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20290") !== -1) { - $ERROR('#10: ~\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20290 === -1'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.8_Bitwise_NOT_Operator/S11.4.8_A2.1_T1.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.8_Bitwise_NOT_Operator/S11.4.8_A2.1_T1.js deleted file mode 100644 index 39107ff07..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.8_Bitwise_NOT_Operator/S11.4.8_A2.1_T1.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.8_A2.1_T1; -* @section: 11.4.8; -* @assertion: Operator ~x uses GetValue; -* @description: Either Type(x) is not Reference or GetBase(x) is not null; -*/ - -//CHECK#1 -if (~0 !== -1) { - $ERROR('#1: ~0 === -1. Actual: ' + (~0)); -} - -//CHECK#2 -if (~(~0) !== 0) { - $ERROR('#2: ~(~0) === 0. Actual: ' + (~(~0))); -} - -//CHECK#3 -var x = 0; -if (~x !== -1) { - $ERROR('#3: var x = 0; ~x === -1. Actual: ' + (~x)); -} - -//CHECK#4 -var x = 0; -if (~(~x) !== 0) { - $ERROR('#4: var x = 0; ~(~x) === 0. Actual: ' + (~(~x))); -} - -//CHECK#5 -var object = new Object(); -object.prop = 0; -if (~object.prop !== -1) { - $ERROR('#5: var object = new Object(); object.prop = 0; ~object.prop === -1. Actual: ' + (~object.prop)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.8_Bitwise_NOT_Operator/S11.4.8_A2.1_T2.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.8_Bitwise_NOT_Operator/S11.4.8_A2.1_T2.js deleted file mode 100644 index c55ac7a4b..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.8_Bitwise_NOT_Operator/S11.4.8_A2.1_T2.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.8_A2.1_T2; -* @section: 11.4.8; -* @assertion: Operator ~x uses GetValue; -* @description: If GetBase(x) is null, throw ReferenceError; -*/ - -//CHECK#1 -try { - ~x; - $ERROR('#1.1: ~x throw ReferenceError. Actual: ' + (~x)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: ~x throw ReferenceError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.8_Bitwise_NOT_Operator/S11.4.8_A2.2_T1.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.8_Bitwise_NOT_Operator/S11.4.8_A2.2_T1.js deleted file mode 100644 index 03fff147a..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.8_Bitwise_NOT_Operator/S11.4.8_A2.2_T1.js +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.4.8_A2.2_T1; - * @section: 11.4.8, 8.6.2.6; - * @assertion: Operator ~x uses [[Default Value]]; - * @description: If Type(value) is Object, evaluate ToPrimitive(value, Number); - */ - -//CHECK#1 -var object = {valueOf: function() {return 1}}; -if (~object !== -2) { - $ERROR('#1: var object = {valueOf: function() {return 1}}; ~object === -2. Actual: ' + (~object)); -} - -//CHECK#2 -var object = {valueOf: function() {return 1}, toString: function() {return 0}}; -if (~object !== -2) { - $ERROR('#2: var object = {valueOf: function() {return 1}, toString: function() {return 0}}; ~object === -2. Actual: ' + (~object)); -} - -//CHECK#3 -var object = {valueOf: function() {return 1}, toString: function() {return {}}}; -if (~object !== -2) { - $ERROR('#3: var object = {valueOf: function() {return 1}, toString: function() {return {}}}; ~object === -2. Actual: ' + (~object)); -} - -//CHECK#4 -try { - var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; - if (~object !== -2) { - $ERROR('#4.1: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; ~object === -2. Actual: ' + (~object)); - } -} -catch (e) { - if (e === "error") { - $ERROR('#4.2: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; ~object not throw "error"'); - } else { - $ERROR('#4.3: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; ~object not throw Error. Actual: ' + (e)); - } -} - -//CHECK#5 -var object = {toString: function() {return 1}}; -if (~object !== -2) { - $ERROR('#5: var object = {toString: function() {return 1}}; ~object === -2. Actual: ' + (~object)); -} - -//CHECK#6 -var object = {valueOf: function() {return {}}, toString: function() {return 1}} -if (~object !== -2) { - $ERROR('#6: var object = {valueOf: function() {return {}}, toString: function() {return 1}}; ~object === -2. Actual: ' + (~object)); -} - -//CHECK#7 -try { - var object = {valueOf: function() {throw "error"}, toString: function() {return 1}}; - ~object; - $ERROR('#7.1: var object = {valueOf: function() {throw "error"}, toString: function() {return 1}}; ~object throw "error". Actual: ' + (~object)); -} -catch (e) { - if (e !== "error") { - $ERROR('#7.2: var object = {valueOf: function() {throw "error"}, toString: function() {return 1}}; ~object throw "error". Actual: ' + (e)); - } -} - -//CHECK#8 -try { - var object = {valueOf: function() {return {}}, toString: function() {return {}}}; - ~object; - $ERROR('#8.1: var object = {valueOf: function() {return {}}, toString: function() {return {}}}; ~object throw TypeError. Actual: ' + (~object)); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#8.2: var object = {valueOf: function() {return {}}, toString: function() {return {}}}; ~object throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.8_Bitwise_NOT_Operator/S11.4.8_A3_T1.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.8_Bitwise_NOT_Operator/S11.4.8_A3_T1.js deleted file mode 100644 index 6b7d15f22..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.8_Bitwise_NOT_Operator/S11.4.8_A3_T1.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.8_A3_T1; -* @section: 11.4.8; -* @assertion: Operator ~x returns ~ToInt32(x); -* @description: Type(x) is boolean primitive or Boolean object; -*/ - -//CHECK#1 -if (~false !== -1) { - $ERROR('#1: ~false === -1. Actual: ' + (~false)); -} - -//CHECK#2 -if (~new Boolean(true) !== -2) { - $ERROR('#2: ~new Boolean(true) === -2. Actual: ' + (~new Boolean(true))); -} - -//CHECK#3 -if (~new Boolean(false) !== -1) { - $ERROR('#3: ~new Boolean(false) === -1. Actual: ' + (~new Boolean(false))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.8_Bitwise_NOT_Operator/S11.4.8_A3_T2.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.8_Bitwise_NOT_Operator/S11.4.8_A3_T2.js deleted file mode 100644 index 9b6abb6bd..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.8_Bitwise_NOT_Operator/S11.4.8_A3_T2.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.8_A3_T2; -* @section: 11.4.8; -* @assertion: Operator ~x returns ~ToInt32(x); -* @description: Type(x) is number primitive or Number object; -*/ - -//CHECK#1 -if (~0.1 !== -1) { - $ERROR('#1: ~0.1 === -1. Actual: ' + (~0.1)); -} - -//CHECK#2 -if (~new Number(-0.1) !== -1) { - $ERROR('#2: ~new Number(-0.1) === -1. Actual: ' + (~new Number(-0.1))); -} - -//CHECK#3 -if (~NaN !== -1) { - $ERROR('#3: ~NaN === -1. Actual: ' + (~NaN)); -} - -//CHECK#4 -if (~new Number(NaN) !== -1) { - $ERROR('#4: ~new Number(NaN) === -1. Actual: ' + (~new Number(NaN))); -} - -//CHECK#5 -if (~1 !== -2) { - $ERROR('#5: ~1 === -2. Actual: ' + (~1)); -} - -//CHECK#6 -if (~new Number(-2) !== 1) { - $ERROR('#6: ~new Number(-2) === 1. Actual: ' + (~new Number(-2))); -} - -//CHECK#7 -if (~Infinity !== -1) { - $ERROR('#7: ~Infinity === -1. Actual: ' + (~Infinity)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.8_Bitwise_NOT_Operator/S11.4.8_A3_T3.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.8_Bitwise_NOT_Operator/S11.4.8_A3_T3.js deleted file mode 100644 index e17e797bd..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.8_Bitwise_NOT_Operator/S11.4.8_A3_T3.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.8_A3_T3; -* @section: 11.4.8; -* @assertion: Operator ~x returns ~ToInt32(x); -* @description: Type(x) is string primitive or String object; -*/ - -//CHECK#1 -if (~"1" !== -2) { - $ERROR('#1: ~"1" === -2. Actual: ' + (~"1")); -} - -//CHECK#2 -if (~new String("0") !== -1) { - $ERROR('#2: ~new String("0") === -1. Actual: ' + (~new String("0"))); -} - -//CHECK#3 -if (~"x" !== -1) { - $ERROR('#3: ~"x" === -1. Actual: ' + (~"x")); -} - -//CHECK#4 -if (~"" !== -1) { - $ERROR('#4: ~"" === -1. Actual: ' + (~"")); -} - -//CHECK#5 -if (~new String("-2") !== 1) { - $ERROR('#5: ~new String("-2") === 1. Actual: ' + (~new String("-2"))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.8_Bitwise_NOT_Operator/S11.4.8_A3_T4.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.8_Bitwise_NOT_Operator/S11.4.8_A3_T4.js deleted file mode 100644 index 8dd87158c..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.8_Bitwise_NOT_Operator/S11.4.8_A3_T4.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.8_A3_T4; -* @section: 11.4.8; -* @assertion: Operator ~x returns ~ToInt32(x); -* @description: Type(x) is undefined or null; -*/ - -//CHECK#1 -if (~void 0 !== -1) { - $ERROR('#1: ~void 0 === -1. Actual: ' + (~void 0)); -} - -//CHECK#2 -if (~null !== -1) { - $ERROR('#2: ~null === -1. Actual: ' + (~null)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.8_Bitwise_NOT_Operator/S11.4.8_A3_T5.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.8_Bitwise_NOT_Operator/S11.4.8_A3_T5.js deleted file mode 100644 index 0dc107d5d..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.8_Bitwise_NOT_Operator/S11.4.8_A3_T5.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.8_A3_T5; -* @section: 11.4.8; -* @assertion: Operator ~x returns ~ToInt32(x); -* @description: Type(x) is Object object or Function object; -*/ - -//CHECK#1 -if (~({}) !== -1) { - $ERROR('#1: ~({}) === -1. Actual: ' + (~({}))); -} - -//CHECK#2 -if (~(function(){return 1}) !== -1) { - $ERROR('#2: ~(function(){return 1}) === -1. Actual: ' + (~(function(){return 1}))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.9_Logical_NOT_Operator/S11.4.9_A1.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.9_Logical_NOT_Operator/S11.4.9_A1.js deleted file mode 100644 index 49803af79..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.9_Logical_NOT_Operator/S11.4.9_A1.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.9_A1; -* @section: 11.4.9, 7.2, 7.3; -* @assertion: White Space and Line Terminator between "!" and UnaryExpression are allowed; -* @description: Checking by using eval; -*/ - -//CHECK#1 -if (eval("!\u0009true") !== false) { - $ERROR('#true: !\\u0009true === false'); -} - -//CHECK#2 -if (eval("!\u000Btrue") !== false) { - $ERROR('#2: !\\u000Btrue === false'); -} - -//CHECK#3 -if (eval("!\u000Ctrue") !== false) { - $ERROR('#3: !\\u000Ctrue === false'); -} - -//CHECK#4 -if (eval("!\u0020true") !== false) { - $ERROR('#4: !\\u0020 === false'); -} - -//CHECK#5 -if (eval("!\u00A0true") !== false) { - $ERROR('#5: !\\u00A0true === false'); -} - -//CHECK#6 -if (eval("!\u000Atrue") !== false) { - $ERROR('#6: !\\u000Atrue === false'); -} - -//CHECK#7 -if (eval("!\u000Dtrue") !== false) { - $ERROR('#7: !\\u000Dtrue === false'); -} - -//CHECK#8 -if (eval("!\u2028true") !== false) { - $ERROR('#8: !\\u2028true === false'); -} - -//CHECK#9 -if (eval("!\u2029true") !== false) { - $ERROR('#9: !\\u2029true === false'); -} - -//CHECK#10 -if (eval("!\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029true") !== false) { - $ERROR('#10: !\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029true === false'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.9_Logical_NOT_Operator/S11.4.9_A2.1_T1.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.9_Logical_NOT_Operator/S11.4.9_A2.1_T1.js deleted file mode 100644 index f5a4cde73..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.9_Logical_NOT_Operator/S11.4.9_A2.1_T1.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.9_A2.1_T1; -* @section: 11.4.9; -* @assertion: Operator !x uses GetValue; -* @description: Either Type(x) is not Reference or GetBase(x) is not null; -*/ - -//CHECK#1 -if (!true !== false) { - $ERROR('#1: !true === false'); -} - -//CHECK#2 -if (!(!true) !== true) { - $ERROR('#2: !(!true) === true'); -} - -//CHECK#3 -var x = true; -if (!x !== false) { - $ERROR('#3: var x = true; !x === false'); -} - -//CHECK#4 -var x = true; -if (!(!x) !== true) { - $ERROR('#4: var x = true; !(!x) === true'); -} - -//CHECK#5 -var object = new Object(); -object.prop = true; -if (!object.prop !== false) { - $ERROR('#5: var object = new Object(); object.prop = true; !object.prop === false'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.9_Logical_NOT_Operator/S11.4.9_A2.1_T2.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.9_Logical_NOT_Operator/S11.4.9_A2.1_T2.js deleted file mode 100644 index dfa6ed469..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.9_Logical_NOT_Operator/S11.4.9_A2.1_T2.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.9_A2.1_T2; -* @section: 11.4.9; -* @assertion: Operator !x uses GetValue; -* @description: If GetBase(x) is null, throw ReferenceError; -*/ - -//CHECK#1 -try { - !x; - $ERROR('#1.1: !x throw ReferenceError. Actual: ' + (!x)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: !x throw ReferenceError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.9_Logical_NOT_Operator/S11.4.9_A2.2_T1.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.9_Logical_NOT_Operator/S11.4.9_A2.2_T1.js deleted file mode 100644 index dce742a7e..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.9_Logical_NOT_Operator/S11.4.9_A2.2_T1.js +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.4.9_A2.2_T1; - * @section: 11.4.9, 8.6.2.6; - * @assertion: Operator !x uses [[Default Value]]; - * @description: If Type(value) is Object, return false; - */ - -//CHECK#1 -var object = {valueOf: function() {return 1}}; -if (!object !== false) { - $ERROR('#1: var object = {valueOf: function() {return 1}}; !object === false. Actual: ' + (!object)); -} - -//CHECK#2 -var object = {valueOf: function() {return 1}, toString: function() {return 0}}; -if (!object !== false) { - $ERROR('#2: var object = {valueOf: function() {return 1}, toString: function() {return 0}}; !object === false. Actual: ' + (!object)); -} - -//CHECK#3 -var object = {valueOf: function() {return 1}, toString: function() {return {}}}; -if (!object !== false) { - $ERROR('#3: var object = {valueOf: function() {return 1}, toString: function() {return {}}}; !object === false. Actual: ' + (!object)); -} - -//CHECK#4 -var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; -if (!object !== false) { - $ERROR('#4: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; !object === false. Actual: ' + (!object)); -} - -//CHECK#5 -var object = {toString: function() {return 1}}; -if (!object !== false) { - $ERROR('#5: var object = {toString: function() {return 1}}; !object === false. Actual: ' + (!object)); -} - -//CHECK#6 -var object = {valueOf: function() {return {}}, toString: function() {return 1}} -if (!object !== false) { - $ERROR('#6: var object = {valueOf: function() {return {}}, toString: function() {return 1}}; !object === false. Actual: ' + (!object)); -} - -//CHECK#7 -var object = {valueOf: function() {throw "error"}, toString: function() {return 1}}; -if (!object !== false) { - $ERROR('#7: var object = {valueOf: function() {throw "error"}, toString: function() {return 1}}; !object === false. Actual: ' + (!object)); -} - -//CHECK#8 -var object = {valueOf: function() {return {}}, toString: function() {return {}}}; -if (!object !== false) { - $ERROR('#8: var object = {valueOf: function() {return {}}, toString: function() {return {}}}; !object === false. Actual: ' + (!object)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.9_Logical_NOT_Operator/S11.4.9_A3_T1.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.9_Logical_NOT_Operator/S11.4.9_A3_T1.js deleted file mode 100644 index 76b1284c8..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.9_Logical_NOT_Operator/S11.4.9_A3_T1.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.9_A3_T1; -* @section: 11.4.9; -* @assertion: Operator !x returns !ToBoolean(x); -* @description: Type(x) is boolean primitive or Boolean object; -*/ - -//CHECK#1 -if (!false !== true) { - $ERROR('#1: !false === true'); -} - -//CHECK#2 -if (!new Boolean(true) !== false) { - $ERROR('#2: !new Boolean(true) === false'); -} - -//CHECK#3 -if (!new Boolean(false) !== false) { - $ERROR('#3: !new Boolean(false) === false'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.9_Logical_NOT_Operator/S11.4.9_A3_T2.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.9_Logical_NOT_Operator/S11.4.9_A3_T2.js deleted file mode 100644 index 8a1ec70b6..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.9_Logical_NOT_Operator/S11.4.9_A3_T2.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.9_A3_T2; -* @section: 11.4.9; -* @assertion: Operator !x returns !ToBoolean(x); -* @description: Type(x) is number primitive or Number object; -*/ - -//CHECK#1 -if (!0.1 !== false) { - $ERROR('#1: !0.1 === false'); -} - -//CHECK#2 -if (!new Number(-0.1) !== false) { - $ERROR('#2: !new Number(-0.1) === false'); -} - -//CHECK#3 -if (!NaN !== true) { - $ERROR('#3: !NaN === true'); -} - -//CHECK#4 -if (!new Number(NaN) !== false) { - $ERROR('#4: !new Number(NaN) === false'); -} - -//CHECK#5 -if (!0 !== true) { - $ERROR('#5: !0 === true'); -} - -//CHECK#6 -if (!new Number(0) !== false) { - $ERROR('#6: !new Number(0) === false'); -} - -//CHECK#7 -if (!Infinity !== false) { - $ERROR('#7: !Infinity === false'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.9_Logical_NOT_Operator/S11.4.9_A3_T3.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.9_Logical_NOT_Operator/S11.4.9_A3_T3.js deleted file mode 100644 index b894c4d1e..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.9_Logical_NOT_Operator/S11.4.9_A3_T3.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.9_A3_T3; -* @section: 11.4.9; -* @assertion: Operator !x returns !ToBoolean(x); -* @description: Type(x) is string primitive or String object; -*/ - -//CHECK#1 -if (!"1" !== false) { - $ERROR('#1: !"1" === false'); -} - -//CHECK#2 -if (!new String("0") !== false) { - $ERROR('#2: !new String("0") === false'); -} - -//CHECK#3 -if (!"x" !== false) { - $ERROR('#3: !"x" === false'); -} - -//CHECK#4 -if (!"" !== true) { - $ERROR('#4: !"" === true'); -} - -//CHECK#5 -if (!new String("") !== false) { - $ERROR('#5: !new String("") === false'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.9_Logical_NOT_Operator/S11.4.9_A3_T4.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.9_Logical_NOT_Operator/S11.4.9_A3_T4.js deleted file mode 100644 index 8ff189aca..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.9_Logical_NOT_Operator/S11.4.9_A3_T4.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.9_A3_T4; -* @section: 11.4.9; -* @assertion: Operator !x returns !ToBoolean(x); -* @description: Type(x) is undefined or null; -*/ - -//CHECK#1 -if (!void 0 !== true) { - $ERROR('#1: !void 0 === true'); -} - -//CHECK#2 -if (!null !== true) { - $ERROR('#2: !null === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.9_Logical_NOT_Operator/S11.4.9_A3_T5.js b/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.9_Logical_NOT_Operator/S11.4.9_A3_T5.js deleted file mode 100644 index 6e484eab9..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.4_Unary_Operators/11.4.9_Logical_NOT_Operator/S11.4.9_A3_T5.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.4.9_A3_T5; -* @section: 11.4.9; -* @assertion: Operator !x returns !ToBoolean(x); -* @description: Type(x) is Object object or Function object; -*/ - -//CHECK#1 -if ((!{}) !== false) { - $ERROR('#1: !({}) === false'); -} - -//CHECK#2 -if (!(function(){return 1}) !== false) { - $ERROR('#2: !(function(){return 1}) === false'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A1.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A1.js deleted file mode 100644 index 00f5b1da0..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A1.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.5.1_A1; -* @section: 11.5.1, 7.2, 7.3; -* @assertion: White Space and Line Terminator between MultiplicativeExpression and "*" or between "*" and UnaryExpression are allowed; -* @description: Checking by using eval; -*/ - -//CHECK#1 -if (eval("1\u0009*\u00091") !== 1) { - $ERROR('#1: 1\\u0009*\\u00091 === 1'); -} - -//CHECK#2 -if (eval("1\u000B*\u000B1") !== 1) { - $ERROR('#2: 1\\u000B*\\u000B1 === 1'); -} - -//CHECK#3 -if (eval("1\u000C*\u000C1") !== 1) { - $ERROR('#3: 1\\u000C*\\u000C1 === 1'); -} - -//CHECK#4 -if (eval("1\u0020*\u00201") !== 1) { - $ERROR('#4: 1\\u0020*\\u00201 === 1'); -} - -//CHECK#5 -if (eval("1\u00A0*\u00A01") !== 1) { - $ERROR('#5: 1\\u00A0*\\u00A01 === 1'); -} - -//CHECK#6 -if (eval("1\u000A*\u000A1") !== 1) { - $ERROR('#6: 1\\u000A*\\u000A1 === 1'); -} - -//CHECK#7 -if (eval("1\u000D*\u000D1") !== 1) { - $ERROR('#7: 1\\u000D*\\u000D1 === 1'); -} - -//CHECK#8 -if (eval("1\u2028*\u20281") !== 1) { - $ERROR('#8: 1\\u2028*\\u20281 === 1'); -} - -//CHECK#9 -if (eval("1\u2029*\u20291") !== 1) { - $ERROR('#9: 1\\u2029*\\u20291 === 1'); -} - -//CHECK#10 -if (eval("1\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029*\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20291") !== 1) { - $ERROR('#10: 1\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029*\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20291 === 1'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A2.1_T1.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A2.1_T1.js deleted file mode 100644 index 0077525bd..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A2.1_T1.js +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.1_A2.1_T1; - * @section: 11.5.1; - * @assertion: Operator x * y uses GetValue; - * @description: Either Type is not Reference or GetBase is not null; -*/ - -//CHECK#1 -if (1 * 1 !== 1) { - $ERROR('#1: 1 * 1 === 1. Actual: ' + (1 * 1)); -} - -//CHECK#2 -var x = 1; -if (x * 1 !== 1) { - $ERROR('#2: var x = 1; x * 1 === 1. Actual: ' + (x * 1)); -} - -//CHECK#3 -var y = 1; -if (1 * y !== 1) { - $ERROR('#3: var y = 1; 1 * y === 1. Actual: ' + (1 * y)); -} - -//CHECK#4 -var x = 1; -var y = 1; -if (x * y !== 1) { - $ERROR('#4: var x = 1; var y = 1; x * y === 1. Actual: ' + (x * y)); -} - -//CHECK#5 -var objectx = new Object(); -var objecty = new Object(); -objectx.prop = 1; -objecty.prop = 1; -if (objectx.prop * objecty.prop !== 1) { - $ERROR('#5: var objectx = new Object(); var objecty = new Object(); objectx.prop = 1; objecty.prop = 1; objectx.prop * objecty.prop === 1. Actual: ' + (objectx.prop * objecty.prop)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A2.1_T2.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A2.1_T2.js deleted file mode 100644 index f7b55cafd..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A2.1_T2.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.1_A2.1_T2; - * @section: 11.5.1; - * @assertion: Operator x * y uses GetValue; - * @description: If GetBase(x) is null, throw ReferenceError; -*/ - -//CHECK#1 -try { - x * 1; - $ERROR('#1.1: x * 1 throw ReferenceError. Actual: ' + (x * 1)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: x * 1 throw ReferenceError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A2.1_T3.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A2.1_T3.js deleted file mode 100644 index 57b3d049c..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A2.1_T3.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.1_A2.1_T3; - * @section: 11.5.1; - * @assertion: Operator x * y uses GetValue; - * @description: If GetBase(y) is null, throw ReferenceError; -*/ - -//CHECK#1 -try { - 1 * y; - $ERROR('#1.1: 1 * y throw ReferenceError. Actual: ' + (1 * y)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: 1 * y throw ReferenceError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A2.2_T1.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A2.2_T1.js deleted file mode 100644 index 712271524..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A2.2_T1.js +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.1_A2.2_T1; - * @section: 11.5.1, 8.6.2.6; - * @assertion: Operator x * y uses [[Default Value]]; - * @description: If Type(value) is Object, evaluate ToPrimitive(value, Number); - */ - -//CHECK#1 -if ({valueOf: function() {return 1}} * 1 !== 1) { - $ERROR('#1: {valueOf: function() {return 1}} * 1 === 1. Actual: ' + ({valueOf: function() {return 1}} * 1)); -} - -//CHECK#2 -if ({valueOf: function() {return 1}, toString: function() {return 0}} * 1 !== 1) { - $ERROR('#2: {valueOf: function() {return 1}, toString: function() {return 0}} * 1 === 1. Actual: ' + ({valueOf: function() {return 1}, toString: function() {return 0}} * 1)); -} - -//CHECK#3 -if ({valueOf: function() {return 1}, toString: function() {return {}}} * 1 !== 1) { - $ERROR('#3: {valueOf: function() {return 1}, toString: function() {return {}}} * 1 === 1. Actual: ' + ({valueOf: function() {return 1}, toString: function() {return {}}} * 1)); -} - -//CHECK#4 -try { - if ({valueOf: function() {return 1}, toString: function() {throw "error"}} * 1 !== 1) { - $ERROR('#4.1: {valueOf: function() {return 1}, toString: function() {throw "error"}} * 1 === 1. Actual: ' + ({valueOf: function() {return 1}, toString: function() {throw "error"}} * 1)); - } -} -catch (e) { - if (e === "error") { - $ERROR('#4.2: {valueOf: function() {return 1}, toString: function() {throw "error"}} * 1 not throw "error"'); - } else { - $ERROR('#4.3: {valueOf: function() {return 1}, toString: function() {throw "error"}} * 1 not throw Error. Actual: ' + (e)); - } -} - -//CHECK#5 -if (1 * {toString: function() {return 1}} !== 1) { - $ERROR('#5: 1 * {toString: function() {return 1}} === 1. Actual: ' + (1 * {toString: function() {return 1}})); -} - -//CHECK#6 -if (1 * {valueOf: function() {return {}}, toString: function() {return 1}} !== 1) { - $ERROR('#6: 1 * {valueOf: function() {return {}}, toString: function() {return 1}} === 1. Actual: ' + (1 * {valueOf: function() {return {}}, toString: function() {return 1}})); -} - -//CHECK#7 -try { - 1 * {valueOf: function() {throw "error"}, toString: function() {return 1}}; - $ERROR('#7.1: 1 * {valueOf: function() {throw "error"}, toString: function() {return 1}} throw "error". Actual: ' + (1 * {valueOf: function() {throw "error"}, toString: function() {return 1}})); -} -catch (e) { - if (e !== "error") { - $ERROR('#7.2: 1 * {valueOf: function() {throw "error"}, toString: function() {return 1}} throw "error". Actual: ' + (e)); - } -} - -//CHECK#8 -try { - 1 * {valueOf: function() {return {}}, toString: function() {return {}}}; - $ERROR('#8.1: 1 * {valueOf: function() {return {}}, toString: function() {return {}}} throw TypeError. Actual: ' + (1 * {valueOf: function() {return {}}, toString: function() {return {}}})); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#8.2: 1 * {valueOf: function() {return {}}, toString: function() {return {}}} throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A2.3_T1.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A2.3_T1.js deleted file mode 100644 index c9a13f709..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A2.3_T1.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.1_A2.3_T1; - * @section: 11.5.1; - * @assertion: ToNumber(first expression) is called first, and then ToNumber(second expression); - * @description: Checking with "throw"; -*/ - -//CHECK#1 -var x = { valueOf: function () { throw "x"; } }; -var y = { valueOf: function () { throw "y"; } }; -try { - x * y; - $ERROR('#1.1: var x = { valueOf: function () { throw "x"; } }; var y = { valueOf: function () { throw "y"; } }; x * y throw "x". Actual: ' + (x * y)); -} catch (e) { - if (e === "y") { - $ERROR('#1.2: ToNumber(first expression) is called first, and then ToNumber(second expression)'); - } else { - if (e !== "x") { - $ERROR('#1.3: var x = { valueOf: function () { throw "x"; } }; var y = { valueOf: function () { throw "y"; } }; x * y throw "x". Actual: ' + (e)); - } - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A2.4_T1.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A2.4_T1.js deleted file mode 100644 index 541da82f8..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A2.4_T1.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.1_A2.4_T1; - * @section: 11.5.1; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with "="; -*/ - -//CHECK#1 -var x = 0; -if ((x = 1) * x !== 1) { - $ERROR('#1: var x = 0; (x = 1) * x === 1. Actual: ' + ((x = 1) * x)); -} - -//CHECK#2 -var x = 0; -if (x * (x = 1) !== 0) { - $ERROR('#2: var x = 0; x * (x = 1) === 0. Actual: ' + (x * (x = 1))); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A2.4_T2.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A2.4_T2.js deleted file mode 100644 index 7a4a9c244..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A2.4_T2.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.1_A2.4_T2; - * @section: 11.5.1; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with "throw" -*/ - -//CHECK#1 -var x = function () { throw "x"; }; -var y = function () { throw "y"; }; -try { - x() * y(); - $ERROR('#1.1: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() * y() throw "x". Actual: ' + (x() * y())); -} catch (e) { - if (e === "y") { - $ERROR('#1.2: First expression is evaluated first, and then second expression'); - } else { - if (e !== "x") { - $ERROR('#1.3: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() * y() throw "x". Actual: ' + (e)); - } - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A2.4_T3.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A2.4_T3.js deleted file mode 100644 index d7c618341..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A2.4_T3.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.1_A2.4_T3; - * @section: 11.5.1; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with undeclarated variables; -*/ - -//CHECK#1 -try { - x * (x = 1); - $ERROR('#1.1: x * (x = 1) throw ReferenceError. Actual: ' + (x * (x = 1))); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: x * (x = 1) throw ReferenceError. Actual: ' + (e)); - } -} - -//CHECK#2 -if ((y = 1) * y !== 1) { - $ERROR('#2: (y = 1) * y === 1. Actual: ' + ((y = 1) * y)); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A3_T1.1.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A3_T1.1.js deleted file mode 100644 index 8b4fffb14..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A3_T1.1.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.1_A3_T1.1; - * @section: 11.5.1; - * @assertion: Operator x * y returns ToNumber(x) * ToNumber(y); - * @description: Type(x) and Type(y) vary between primitive boolean and Boolean object; - */ - -//CHECK#1 -if (true * true !== 1) { - $ERROR('#1: true * true === 1. Actual: ' + (true * true)); -} - -//CHECK#2 -if (new Boolean(true) * true !== 1) { - $ERROR('#2: new Boolean(true) * true === 1. Actual: ' + (new Boolean(true) * true)); -} - -//CHECK#3 -if (true * new Boolean(true) !== 1) { - $ERROR('#3: true * new Boolean(true) === 1. Actual: ' + (true * new Boolean(true))); -} - -//CHECK#4 -if (new Boolean(true) * new Boolean(true) !== 1) { - $ERROR('#4: new Boolean(true) * new Boolean(true) === 1. Actual: ' + (new Boolean(true) * new Boolean(true))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A3_T1.2.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A3_T1.2.js deleted file mode 100644 index 4c37922a0..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A3_T1.2.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.1_A3_T1.2; - * @section: 11.5.1; - * @assertion: Operator x * y returns ToNumber(x) * ToNumber(y); - * @description: Type(x) and Type(y) vary between primitive number and Number object; -*/ - -//CHECK#1 -if (1 * 1 !== 1) { - $ERROR('#1: 1 * 1 === 1. Actual: ' + (1 * 1)); -} - -//CHECK#2 -if (new Number(1) * 1 !== 1) { - $ERROR('#2: new Number(1) * 1 === 1. Actual: ' + (new Number(1) * 1)); -} - -//CHECK#3 -if (1 * new Number(1) !== 1) { - $ERROR('#3: 1 * new Number(1) === 1. Actual: ' + (1 * new Number(1))); -} - -//CHECK#4 -if (new Number(1) * new Number(1) !== 1) { - $ERROR('#4: new Number(1) * new Number(1) === 1. Actual: ' + (new Number(1) * new Number(1))); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A3_T1.3.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A3_T1.3.js deleted file mode 100644 index e74258361..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A3_T1.3.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.1_A3_T1.3; - * @section: 11.5.1; - * @assertion: Operator x * y returns ToNumber(x) * ToNumber(y); - * @description: Type(x) and Type(y) vary between primitive string and String object; -*/ - -//CHECK#1 -if ("1" * "1" !== 1) { - $ERROR('#1: "1" * "1" === 1. Actual: ' + ("1" * "1")); -} - -//CHECK#2 -if (new String("1") * "1" !== 1) { - $ERROR('#2: new String("1") * "1" === 1. Actual: ' + (new String("1") * "1")); -} - -//CHECK#3 -if ("1" * new String("1") !== 1) { - $ERROR('#3: "1" * new String("1") === 1. Actual: ' + ("1" * new String("1"))); -} - -//CHECK#4 -if (new String("1") * new String("1") !== 1) { - $ERROR('#4: new String("1") * new String("1") === 1. Actual: ' + (new String("1") * new String("1"))); -} - -//CHECK#5 -if (isNaN("x" * "1") !== true) { - $ERROR('#5: "x" * "1" === Not-a-Number. Actual: ' + ("x" * "1")); -} - -//CHECK#6 -if (isNaN("1" * "x") !== true) { - $ERROR('#6: "1" * "x" === Not-a-Number. Actual: ' + ("1" * "x")); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A3_T1.4.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A3_T1.4.js deleted file mode 100644 index d014c08b9..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A3_T1.4.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.1_A3_T1.4; - * @section: 11.5.1; - * @assertion: Operator x * y returns ToNumber(x) * ToNumber(y); - * @description: Type(x) and Type(y) vary between Null and Undefined; - */ - -//CHECK#1 -if (isNaN(null * undefined) !== true) { - $ERROR('#1: null * undefined === Not-a-Number. Actual: ' + (null * undefined)); -} - -//CHECK#2 -if (isNaN(undefined * null) !== true) { - $ERROR('#2: undefined * null === Not-a-Number. Actual: ' + (undefined * null)); -} - -//CHECK#3 -if (isNaN(undefined * undefined) !== true) { - $ERROR('#3: undefined * undefined === Not-a-Number. Actual: ' + (undefined * undefined)); -} - -//CHECK#4 -if (null * null !== 0) { - $ERROR('#4: null * null === 0. Actual: ' + (null * null)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A3_T1.5.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A3_T1.5.js deleted file mode 100644 index 4f7b7271d..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A3_T1.5.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.1_A3_T1.5; - * @section: 11.5.1; - * @assertion: Operator x * y returns ToNumber(x) * ToNumber(y); - * @description: Type(x) and Type(y) vary between Object object and Function object; - */ - -//CHECK#1 -if (isNaN({} * function(){return 1}) !== true) { - $ERROR('#1: {} * function(){return 1} === Not-a-Number. Actual: ' + ({} * function(){return 1})); -} - -//CHECK#2 -if (isNaN(function(){return 1} * {}) !== true) { - $ERROR('#2: function(){return 1} * {} === Not-a-Number. Actual: ' + (function(){return 1} * {})); -} - -//CHECK#3 -if (isNaN(function(){return 1} * function(){return 1}) !== true) { - $ERROR('#3: function(){return 1} * function(){return 1} === Not-a-Number. Actual: ' + (function(){return 1} * function(){return 1})); -} - -//CHECK#4 -if (isNaN({} * {}) !== true) { - $ERROR('#4: {} * {} === Not-a-Number. Actual: ' + ({} * {})); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A3_T2.1.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A3_T2.1.js deleted file mode 100644 index 566f5d9c4..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A3_T2.1.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.1_A3_T2.1; - * @section: 11.5.1; - * @assertion: Operator x * y returns ToNumber(x) * ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Number (primitive and object); - */ - -//CHECK#1 -if (true * 1 !== 1) { - $ERROR('#1: true * 1 === 1. Actual: ' + (true * 1)); -} - -//CHECK#2 -if (1 * true !== 1) { - $ERROR('#2: 1 * true === 1. Actual: ' + (1 * true)); -} - -//CHECK#3 -if (new Boolean(true) * 1 !== 1) { - $ERROR('#3: new Boolean(true) * 1 === 1. Actual: ' + (new Boolean(true) * 1)); -} - -//CHECK#4 -if (1 * new Boolean(true) !== 1) { - $ERROR('#4: 1 * new Boolean(true) === 1. Actual: ' + (1 * new Boolean(true))); -} - -//CHECK#5 -if (true * new Number(1) !== 1) { - $ERROR('#5: true * new Number(1) === 1. Actual: ' + (true * new Number(1))); -} - -//CHECK#6 -if (new Number(1) * true !== 1) { - $ERROR('#6: new Number(1) * true === 1. Actual: ' + (new Number(1) * true)); -} - -//CHECK#7 -if (new Boolean(true) * new Number(1) !== 1) { - $ERROR('#7: new Boolean(true) * new Number(1) === 1. Actual: ' + (new Boolean(true) * new Number(1))); -} - -//CHECK#8 -if (new Number(1) * new Boolean(true) !== 1) { - $ERROR('#8: new Number(1) * new Boolean(true) === 1. Actual: ' + (new Number(1) * new Boolean(true))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A3_T2.2.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A3_T2.2.js deleted file mode 100644 index ed949b587..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A3_T2.2.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.1_A3_T2.2; - * @section: 11.5.1; - * @assertion: Operator x * y returns ToNumber(x) * ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and String (primitive and object); -*/ - -//CHECK#1 -if ("1" * 1 !== 1) { - $ERROR('#1: "1" * 1 === 1. Actual: ' + ("1" * 1)); -} - -//CHECK#2 -if (1 * "1" !== 1) { - $ERROR('#2: 1 * "1" === 1. Actual: ' + (1 * "1")); -} - -//CHECK#3 -if (new String("1") * 1 !== 1) { - $ERROR('#3: new String("1") * 1 === 1. Actual: ' + (new String("1") * 1)); -} - -//CHECK#4 -if (1 * new String("1") !== 1) { - $ERROR('#4: 1 * new String("1") === 1. Actual: ' + (1 * new String("1"))); -} - -//CHECK#5 -if ("1" * new Number(1) !== 1) { - $ERROR('#5: "1" * new Number(1) === 1. Actual: ' + ("1" * new Number(1))); -} - -//CHECK#6 -if (new Number(1) * "1" !== 1) { - $ERROR('#6: new Number(1) * "1" === 1. Actual: ' + (new Number(1) * "1")); -} - -//CHECK#7 -if (new String("1") * new Number(1) !== 1) { - $ERROR('#7: new String("1") * new Number(1) === 1. Actual: ' + (new String("1") * new Number(1))); -} - -//CHECK#8 -if (new Number(1) * new String("1") !== 1) { - $ERROR('#8: new Number(1) * new String("1") === 1. Actual: ' + (new Number(1) * new String("1"))); -} - -//CHECK#9 -if (isNaN("x" * 1) !== true) { - $ERROR('#9: "x" * 1 === Not-a-Number. Actual: ' + ("x" * 1)); -} - -//CHECK#10 -if (isNaN(1 * "x") !== true) { - $ERROR('#10: 1 * "x" === Not-a-Number. Actual: ' + (1 * "x")); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A3_T2.3.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A3_T2.3.js deleted file mode 100644 index 8c3d32145..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A3_T2.3.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.1_A3_T2.3; - * @section: 11.5.1; - * @assertion: Operator x * y returns ToNumber(x) * ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Null; - */ - -//CHECK#1 -if (1 * null !== 0) { - $ERROR('#1: 1 * null === 0. Actual: ' + (1 * null)); -} - -//CHECK#2 -if (null * 1 !== 0) { - $ERROR('#2: null * 1 === 0. Actual: ' + (null * 1)); -} - -//CHECK#3 -if (new Number(1) * null !== 0) { - $ERROR('#3: new Number(1) * null === 0. Actual: ' + (new Number(1) * null)); -} - -//CHECK#4 -if (null * new Number(1) !== 0) { - $ERROR('#4: null * new Number(1) === 0. Actual: ' + (null * new Number(1))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A3_T2.4.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A3_T2.4.js deleted file mode 100644 index 919fa516f..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A3_T2.4.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.1_A3_T2.4; - * @section: 11.5.1; - * @assertion: Operator x * y returns ToNumber(x) * ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Undefined; - */ - -//CHECK#1 -if (isNaN(1 * undefined) !== true) { - $ERROR('#1: 1 * undefined === Not-a-Number. Actual: ' + (1 * undefined)); -} - -//CHECK#2 -if (isNaN(undefined * 1) !== true) { - $ERROR('#2: undefined * 1 === Not-a-Number. Actual: ' + (undefined * 1)); -} - -//CHECK#3 -if (isNaN(new Number(1) * undefined) !== true) { - $ERROR('#3: new Number(1) * undefined === Not-a-Number. Actual: ' + (new Number(1) * undefined)); -} - -//CHECK#4 -if (isNaN(undefined * new Number(1)) !== true) { - $ERROR('#4: undefined * new Number(1) === Not-a-Number. Actual: ' + (undefined * new Number(1))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A3_T2.5.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A3_T2.5.js deleted file mode 100644 index b15f68b35..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A3_T2.5.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.1_A3_T2.5; - * @section: 11.5.1; - * @assertion: Operator x * y returns ToNumber(x) * ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between String (primitive or object) and Boolean (primitive and object); -*/ - -//CHECK#1 -if (true * "1" !== 1) { - $ERROR('#1: true * "1" === 1. Actual: ' + (true * "1")); -} - -//CHECK#2 -if ("1" * true !== 1) { - $ERROR('#2: "1" * true === 1. Actual: ' + ("1" * true)); -} - -//CHECK#3 -if (new Boolean(true) * "1" !== 1) { - $ERROR('#3: new Boolean(true) * "1" === 1. Actual: ' + (new Boolean(true) * "1")); -} - -//CHECK#4 -if ("1" * new Boolean(true) !== 1) { - $ERROR('#4: "1" * new Boolean(true) === 1. Actual: ' + ("1" * new Boolean(true))); -} - -//CHECK#5 -if (true * new String("1") !== 1) { - $ERROR('#5: true * new String("1") === 1. Actual: ' + (true * new String("1"))); -} - -//CHECK#6 -if (new String("1") * true !== 1) { - $ERROR('#6: new String("1") * true === 1. Actual: ' + (new String("1") * true)); -} - -//CHECK#7 -if (new Boolean(true) * new String("1") !== 1) { - $ERROR('#7: new Boolean(true) * new String("1") === 1. Actual: ' + (new Boolean(true) * new String("1"))); -} - -//CHECK#8 -if (new String("1") * new Boolean(true) !== 1) { - $ERROR('#8: new String("1") * new Boolean(true) === 1. Actual: ' + (new String("1") * new Boolean(true))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A3_T2.6.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A3_T2.6.js deleted file mode 100644 index 94d03ece2..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A3_T2.6.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.1_A3_T2.6; - * @section: 11.5.1; - * @assertion: Operator x * y returns ToNumber(x) * ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between primitive String (primitive or object) and Undefined; - */ - -//CHECK#1 -if (isNaN("1" * undefined) !== true) { - $ERROR('#1: "1" * undefined === Not-a-Number. Actual: ' + ("1" * undefined)); -} - -//CHECK#2 -if (isNaN(undefined * "1") !== true) { - $ERROR('#2: undefined * "1" === Not-a-Number. Actual: ' + (undefined * "1")); -} - -//CHECK#3 -if (isNaN(new String("1") * undefined) !== true) { - $ERROR('#3: new String("1") * undefined === Not-a-Number. Actual: ' + (new String("1") * undefined)); -} - -//CHECK#4 -if (isNaN(undefined * new String("1")) !== true) { - $ERROR('#4: undefined * new String("1") === Not-a-Number. Actual: ' + (undefined * new String("1"))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A3_T2.7.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A3_T2.7.js deleted file mode 100644 index d7df94cb7..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A3_T2.7.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.1_A3_T2.7; - * @section: 11.5.1; - * @assertion: Operator x * y returns ToNumber(x) * ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between String (primitive or object) and Null; - */ - -//CHECK#1 -if ("1" * null !== 0) { - $ERROR('#1: "1" * null === 0. Actual: ' + ("1" * null)); -} - -//CHECK#2 -if (null * "1" !== 0) { - $ERROR('#2: null * "1" === 0. Actual: ' + (null * "1")); -} - -//CHECK#3 -if (new String("1") * null !== 0) { - $ERROR('#3: new String("1") * null === 0. Actual: ' + (new String("1") * null)); -} - -//CHECK#4 -if (null * new String("1") !== 0) { - $ERROR('#4: null * new String("1") === 0. Actual: ' + (null * new String("1"))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A3_T2.8.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A3_T2.8.js deleted file mode 100644 index 11b1f6caf..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A3_T2.8.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.1_A3_T2.8; - * @section: 11.5.1; - * @assertion: Operator x * y returns ToNumber(x) * ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Undefined; - */ - -//CHECK#1 -if (isNaN(true * undefined) !== true) { - $ERROR('#1: true * undefined === Not-a-Number. Actual: ' + (true * undefined)); -} - -//CHECK#2 -if (isNaN(undefined * true) !== true) { - $ERROR('#2: undefined * true === Not-a-Number. Actual: ' + (undefined * true)); -} - -//CHECK#3 -if (isNaN(new Boolean(true) * undefined) !== true) { - $ERROR('#3: new Boolean(true) * undefined === Not-a-Number. Actual: ' + (new Boolean(true) * undefined)); -} - -//CHECK#4 -if (isNaN(undefined * new Boolean(true)) !== true) { - $ERROR('#4: undefined * new Boolean(true) === Not-a-Number. Actual: ' + (undefined * new Boolean(true))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A3_T2.9.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A3_T2.9.js deleted file mode 100644 index 481aa0bd2..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A3_T2.9.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.1_A3_T2.9; - * @section: 11.5.1; - * @assertion: Operator x * y returns ToNumber(x) * ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Null; - */ - -//CHECK#1 -if (true * null !== 0) { - $ERROR('#1: true * null === 0. Actual: ' + (true * null)); -} - -//CHECK#2 -if (null * true !== 0) { - $ERROR('#2: null * true === 0. Actual: ' + (null * true)); -} - -//CHECK#3 -if (new Boolean(true) * null !== 0) { - $ERROR('#3: new Boolean(true) * null === 0. Actual: ' + (new Boolean(true) * null)); -} - -//CHECK#4 -if (null * new Boolean(true) !== 0) { - $ERROR('#4: null * new Boolean(true) === 0. Actual: ' + (null * new Boolean(true))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A4_T1.1.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A4_T1.1.js deleted file mode 100644 index ad51bea98..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A4_T1.1.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.1_A4_T1.1; - * @section: 11.5.1; - * @assertion: The result of a floating-point multiplication is governed by the rules of IEEE 754 double-precision arithmetics; - * @description: If left operand is NaN, the result is NaN; - */ - -//CHECK#1 -if (isNaN(Number.NaN * Number.NaN) !== true) { - $ERROR('#1: NaN * NaN === Not-a-Number. Actual: ' + (NaN * NaN)); -} - -//CHECK#2 -if (isNaN(Number.NaN * +0) !== true) { - $ERROR('#2: NaN * +0 === Not-a-Number. Actual: ' + (NaN * +0)); -} - -//CHECK#3 -if (isNaN(Number.NaN * -0) !== true) { - $ERROR('#3: NaN * -0 === Not-a-Number. Actual: ' + (NaN * -0)); -} - -//CHECK#4 -if (isNaN(Number.NaN * Number.POSITIVE_INFINITY) !== true) { - $ERROR('#4: NaN * Infinity === Not-a-Number. Actual: ' + (NaN * Infinity)); -} - -//CHECK#5 -if (isNaN(Number.NaN * Number.NEGATIVE_INFINITY) !== true) { - $ERROR('#5: NaN * -Infinity === Not-a-Number. Actual: ' + (NaN * -Infinity)); -} - -//CHECK#6 -if (isNaN(Number.NaN * Number.MAX_VALUE) !== true) { - $ERROR('#6: NaN * Number.MAX_VALUE === Not-a-Number. Actual: ' + (NaN * Number.MAX_VALUE)); -} - -//CHECK#7 -if (isNaN(Number.NaN * Number.MIN_VALUE) !== true) { - $ERROR('#7: NaN * Number.MIN_VALUE === Not-a-Number. Actual: ' + (NaN * Number.MIN_VALUE)); -} - -//CHECK#8 -if (isNaN(Number.NaN * 1) !== true) { - $ERROR('#8: NaN * 1 === Not-a-Number. Actual: ' + (NaN * 1)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A4_T1.2.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A4_T1.2.js deleted file mode 100644 index 4c902c305..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A4_T1.2.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.1_A4_T1.2; - * @section: 11.5.1; - * @assertion: The result of a floating-point multiplication is governed by the rules of IEEE 754 double-precision arithmetics; - * @description: If right operand is NaN, the result is NaN; - */ - -//CHECK#1 -if (isNaN(Number.NaN * Number.NaN) !== true) { - $ERROR('#1: NaN * NaN === Not-a-Number. Actual: ' + (NaN * NaN)); -} - -//CHECK#2 -if (isNaN(+0 * Number.NaN) !== true) { - $ERROR('#2: +0 * NaN === Not-a-Number. Actual: ' + (+0 * NaN)); -} - -//CHECK#3 -if (isNaN(-0 * Number.NaN) !== true) { - $ERROR('#3: -0 * NaN === Not-a-Number. Actual: ' + (-0 * NaN)); -} - -//CHECK#4 -if (isNaN(Number.POSITIVE_INFINITY * Number.NaN) !== true) { - $ERROR('#4: Infinity * NaN === Not-a-Number. Actual: ' + (Infinity * NaN)); -} - -//CHECK#5 -if (isNaN(Number.NEGATIVE_INFINITY * Number.NaN) !== true) { - $ERROR('#5: -Infinity * NaN === Not-a-Number. Actual: ' + ( -Infinity * NaN)); -} - -//CHECK#6 -if (isNaN(Number.MAX_VALUE * Number.NaN) !== true) { - $ERROR('#6: Number.MAX_VALUE * NaN === Not-a-Number. Actual: ' + (Number.MAX_VALUE * NaN)); -} - -//CHECK#7 -if (isNaN(Number.MIN_VALUE * Number.NaN) !== true) { - $ERROR('#7: Number.MIN_VALUE * NaN === Not-a-Number. Actual: ' + (Number.MIN_VALUE * NaN)); -} - -//CHECK#8 -if (isNaN(1 * Number.NaN) !== true) { - $ERROR('#8: 1 * NaN === Not-a-Number. Actual: ' + (1 * NaN)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A4_T2.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A4_T2.js deleted file mode 100644 index 744ccb269..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A4_T2.js +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.1_A4_T2; - * @section: 11.5.1; - * @assertion: The result of a floating-point multiplication is governed by the rules of IEEE 754 double-precision arithmetics; - * @description: The sign of the result is positive if both operands have the same sign, negative if the operands have different signs; - */ - -//CHECK#1 -if (1 * 1 !== 1) { - $ERROR('#1: 1 * 1 === 1. Actual: ' + (1 * 1)); -} - -//CHECK#2 -if (1 * -1 !== -1) { - $ERROR('#2: 1 * -1 === -1. Actual: ' + (1 * -1)); -} - -//CHECK#3 -if (-1 * 1 !== -1) { - $ERROR('#3: -1 * 1 === -1. Actual: ' + (-1 * 1)); -} - -//CHECK#4 -if (-1 * -1 !== 1) { - $ERROR('#4: -1 * -1 === 1. Actual: ' + (-1 * -1)); -} - -//CHECK#5 -if (0 * 0 !== 0) { - $ERROR('#5.1: 0 * 0 === 0. Actual: ' + (0 * 0)); -} else { - if (1 / (0 * 0) !== Number.POSITIVE_INFINITY) { - $ERROR('#5.2: 0 * 0 === + 0. Actual: -0'); - } -} - -//CHECK#6 -if (0 * -0 !== -0) { - $ERROR('#6.1: 0 * -0 === 0. Actual: ' + (0 * -0)); -} else { - if (1 / (0 * -0) !== Number.NEGATIVE_INFINITY) { - $ERROR('#6.2: 0 * -0 === - 0. Actual: +0'); - } -} - -//CHECK#7 -if (-0 * 0 !== -0) { - $ERROR('#7.1: -0 * 0 === 0. Actual: ' + (-0 * 0)); -} else { - if (1 / (-0 * 0) !== Number.NEGATIVE_INFINITY) { - $ERROR('#7.2: -0 * 0 === - 0. Actual: +0'); - } -} - -//CHECK#8 -if (-0 * -0 !== 0) { - $ERROR('#8.1: -0 * -0 === 0. Actual: ' + (-0 * -0)); -} else { - if (1 / (-0 * -0) !== Number.POSITIVE_INFINITY) { - $ERROR('#8.2: 0 * -0 === - 0. Actual: +0'); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A4_T3.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A4_T3.js deleted file mode 100644 index 0d21ca573..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A4_T3.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.1_A4_T3; - * @section: 11.5.1; - * @assertion: The result of a floating-point multiplication is governed by the rules of IEEE 754 double-precision arithmetics; - * @description: Multiplication of an infinity by a zero results in NaN; - */ - -//CHECK#1 -if (isNaN(Number.NEGATIVE_INFINITY * 0) !== true) { - $ERROR('#1: Infinity * 0 === Not-a-Number. Actual: ' + (Infinity * 0)); -} - -//CHECK#2 -if (isNaN(-0 * Number.NEGATIVE_INFINITY) !== true) { - $ERROR('#2: -0 * -Infinity === Not-a-Number. Actual: ' + (-0 * -Infinity)); -} - -//CHECK#3 -if (isNaN(Number.POSITIVE_INFINITY * -0) !== true) { - $ERROR('#3: Infinity * -0 === Not-a-Number. Actual: ' + (Infinity * -0)); -} - -//CHECK#4 -if (isNaN(0 * Number.POSITIVE_INFINITY) !== true) { - $ERROR('#4: 0 * Infinity === Not-a-Number. Actual: ' + (0 * Infinity)); -} - -//CHECK#5 -if (isNaN(Number.NEGATIVE_INFINITY * -0) !== true) { - $ERROR('#5: Infinity * -0 === Not-a-Number. Actual: ' + (Infinity * -0)); -} - -//CHECK#6 -if (isNaN(0 * Number.NEGATIVE_INFINITY) !== true) { - $ERROR('#6: 0 * -Infinity === Not-a-Number. Actual: ' + (0 * -Infinity)); -} - -//CHECK#7 -if (isNaN(Number.POSITIVE_INFINITY * 0) !== true) { - $ERROR('#7: Infinity * 0 === Not-a-Number. Actual: ' + (Infinity * 0)); -} - -//CHECK#8 -if (isNaN(-0 * Number.POSITIVE_INFINITY) !== true) { - $ERROR('#8: -0 * Infinity === Not-a-Number. Actual: ' + (-0 * Infinity)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A4_T4.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A4_T4.js deleted file mode 100644 index cc7ddb81e..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A4_T4.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.1_A4_T4; - * @section: 11.5.1; - * @assertion: The result of a floating-point multiplication is governed by the rules of IEEE 754 double-precision arithmetics; - * @description: Multiplication of an infinity by an infinity results in an infinity of appropriate sign; - */ - -//CHECK#1 -if (Number.NEGATIVE_INFINITY * Number.NEGATIVE_INFINITY !== Number.POSITIVE_INFINITY) { - $ERROR('#1: -Infinity * -Infinity === Infinity. Actual: ' + (-Infinity * -Infinity)); -} - -//CHECK#2 -if (Number.POSITIVE_INFINITY * Number.POSITIVE_INFINITY !== Number.POSITIVE_INFINITY) { - $ERROR('#2: Infinity * Infinity === Infinity. Actual: ' + (Infinity * Infinity)); -} - -//CHECK#3 -if (Number.NEGATIVE_INFINITY * Number.POSITIVE_INFINITY !== Number.NEGATIVE_INFINITY) { - $ERROR('#3: -Infinity * Infinity === -Infinity. Actual: ' + (-Infinity * Infinity)); -} - -//CHECK#4 -if (Number.POSITIVE_INFINITY * Number.NEGATIVE_INFINITY !== Number.NEGATIVE_INFINITY) { - $ERROR('#4: Infinity * -Infinity === -Infinity. Actual: ' + (Infinity * -Infinity)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A4_T5.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A4_T5.js deleted file mode 100644 index 0e2017d47..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A4_T5.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.1_A4_T5; - * @section: 11.5.1; - * @assertion: The result of a floating-point multiplication is governed by the rules of IEEE 754 double-precision arithmetics; - * @description: Multiplication of an infinity by a finite non-zero value results in a signed infinity; - */ - -//CHECK#1 -if (Number.NEGATIVE_INFINITY * -1 !== Number.POSITIVE_INFINITY) { - $ERROR('#1: -Infinity * -1 === Infinity. Actual: ' + (-Infinity * -1)); -} - -//CHECK#2 -if (-1 * Number.NEGATIVE_INFINITY !== Number.POSITIVE_INFINITY) { - $ERROR('#2: -1 * -Infinity === Infinity. Actual: ' + (-1 * -Infinity)); -} - -//CHECK#3 -if (Number.POSITIVE_INFINITY * -1 !== Number.NEGATIVE_INFINITY) { - $ERROR('#3: Infinity * -1 === -Infinity. Actual: ' + (Infinity * -1)); -} - -//CHECK#4 -if (-1 * Number.POSITIVE_INFINITY !== Number.NEGATIVE_INFINITY) { - $ERROR('#4: -1 * Infinity === -Infinity. Actual: ' + (-1 * Infinity)); -} - -//CHECK#5 -if (Number.POSITIVE_INFINITY * Number.MAX_VALUE !== Number.POSITIVE_INFINITY) { - $ERROR('#5: Infinity * Number.MAX_VALUE === Infinity. Actual: ' + (Infinity * Number.MAX_VALUE)); -} - -//CHECK#6 -if (Number.POSITIVE_INFINITY * Number.MAX_VALUE !== Number.MAX_VALUE * Number.POSITIVE_INFINITY) { - $ERROR('#6: Infinity * Number.MAX_VALUE === Number.MAX_VALUE * Infinity. Actual: ' + (Infinity * Number.MAX_VALUE)); -} - -//CHECK#7 -if (Number.NEGATIVE_INFINITY * Number.MIN_VALUE !== Number.NEGATIVE_INFINITY) { - $ERROR('#7: -Infinity * Number.MIN_VALUE === -Infinity. Actual: ' + (-Infinity * Number.MIN_VALUE)); -} - -//CHECK#8 -if (Number.NEGATIVE_INFINITY * Number.MIN_VALUE !== Number.MIN_VALUE * Number.NEGATIVE_INFINITY) { - $ERROR('#8: -Infinity * Number.MIN_VALUE === Number.MIN_VALUE * -Infinity. Actual: ' + (-Infinity * Number.MIN_VALUE)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A4_T6.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A4_T6.js deleted file mode 100644 index a314b80fb..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A4_T6.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.1_A4_T6; - * @section: 11.5.1; - * @assertion: The result of a floating-point multiplication is governed by the rules of IEEE 754 double-precision arithmetics; - * @description: If the magnitude is too large to represent, the result is then an infinity of appropriate sign; - */ - -//CHECK#1 -if (Number.MAX_VALUE * 1.1 !== Number.POSITIVE_INFINITY) { - $ERROR('#1: Number.MAX_VALUE * 1.1 === Number.POSITIVE_INFINITY. Actual: ' + (Number.MAX_VALUE * 1.1)); -} - -//CHECK#2 -if (-1.1 * Number.MAX_VALUE !== Number.NEGATIVE_INFINITY) { - $ERROR('#2: -1.1 * Number.MAX_VALUE === Number.NEGATIVE_INFINITY. Actual: ' + (-1.1 * Number.MAX_VALUE)); -} - -//CHECK#3 -if (Number.MAX_VALUE * 1 !== Number.MAX_VALUE) { - $ERROR('#3: Number.MAX_VALUE * 1 === Number.MAX_VALUE. Actual: ' + (Number.MAX_VALUE * 1)); -} - -//CHECK#4 -if (-1 * Number.MAX_VALUE !== -Number.MAX_VALUE) { - $ERROR('#4: -1 * Number.MAX_VALUE === -Number.MAX_VALUE. Actual: ' + (-1 * Number.MAX_VALUE)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A4_T7.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A4_T7.js deleted file mode 100644 index 4f517eaf2..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A4_T7.js +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.1_A4_T7; - * @section: 11.5.1; - * @assertion: The result of a floating-point multiplication is governed by the rules of IEEE 754 double-precision arithmetics; - * @description: If the magnitude is too small to represent, the result is then a zero of appropriate sign; - */ - -//CHECK#1 -if (Number.MIN_VALUE * 0.1 !== 0) { - $ERROR('#1: Number.MIN_VALUE * 0.1 === 0. Actual: ' + (Number.MIN_VALUE * 0.1)); -} - -//CHECK#2 -if (-0.1 * Number.MIN_VALUE !== -0) { - $ERROR('#2.1: -0.1 * Number.MIN_VALUE === -0. Actual: ' + (-0.1 * Number.MIN_VALUE)); -} else { - if (1 / (-0.1 * Number.MIN_VALUE) !== Number.NEGATIVE_INFINITY) { - $ERROR('#2.2: -0.1 * Number.MIN_VALUE === -0. Actual: +0'); - } -} - -//CHECK#3 -if (Number.MIN_VALUE * 0.5 !== 0) { - $ERROR('#3: Number.MIN_VALUE * 0.5 === 0. Actual: ' + (Number.MIN_VALUE * 0.5)); -} - -//CHECK#4 -if (-0.5 * Number.MIN_VALUE !== -0) { - $ERROR('#4.1: -0.5 * Number.MIN_VALUE === -0. Actual: ' + (-0.5 * Number.MIN_VALUE)); -} else { - if (1 / (-0.5 * Number.MIN_VALUE) !== Number.NEGATIVE_INFINITY) { - $ERROR('#4.2: -0.5 * Number.MIN_VALUE === -0. Actual: +0'); - } -} - -//CHECK#5 -if (Number.MIN_VALUE * 0.51 !== Number.MIN_VALUE) { - $ERROR('#5: Number.MIN_VALUE * 0.51 === Number.MIN_VALUE. Actual: ' + (Number.MIN_VALUE * 0.51)); -} - -//CHECK#6 -if (-0.51 * Number.MIN_VALUE !== -Number.MIN_VALUE) { - $ERROR('#6: -0.51 * Number.MIN_VALUE === -Number.MIN_VALUE. Actual: ' + (-0.51 * Number.MIN_VALUE)); -} - -//CHECK#7 -if (Number.MIN_VALUE * 0.9 !== Number.MIN_VALUE) { - $ERROR('#7: Number.MIN_VALUE * 0.9 === Number.MIN_VALUE. Actual: ' + (Number.MIN_VALUE * 0.9)); -} - -//CHECK#8 -if (-0.9 * Number.MIN_VALUE !== -Number.MIN_VALUE) { - $ERROR('#8: -0.9 * Number.MIN_VALUE === -Number.MIN_VALUE. Actual: ' + (-0.9 * Number.MIN_VALUE)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A4_T8.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A4_T8.js deleted file mode 100644 index d3e466b7b..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.1_Applying_the_asterisk_Operator/S11.5.1_A4_T8.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.1_A4_T8; - * @section: 11.5.1; - * @assertion: The result of a floating-point multiplication is governed by the rules of IEEE 754 double-precision arithmetics; - * @description: Multiplication is not always associative (x * y * z is the same as (x * y) * z, not x * (y * z)); -*/ - -//CHECK#1 -if (Number.MAX_VALUE * 1.1 * 0.9 !== (Number.MAX_VALUE * 1.1) * 0.9) { - $ERROR('#1: Number.MAX_VALUE * 1.1 * 0.9 === (Number.MAX_VALUE * 1.1) * 0.9. Actual: ' + (Number.MAX_VALUE * 1.1 * 0.9)); -} - -//CHECK#2 -if ((Number.MAX_VALUE * 1.1) * 0.9 === Number.MAX_VALUE * (1.1 * 0.9)) { - $ERROR('#2: (Number.MAX_VALUE * 1.1) * 0.9 !== Number.MAX_VALUE * (1.1 * 0.9)'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A1.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A1.js deleted file mode 100644 index cec04d1ba..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A1.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.5.2_A1; -* @section: 11.5.2, 7.2, 7.3; -* @assertion: White Space and Line Terminator between MultiplicativeExpression and "/" or between "/" and UnaryExpression are allowed; -* @description: Checking by using eval; -*/ - -//CHECK#1 -if (eval("1\u0009/\u00091") !== 1) { - $ERROR('#1: 1\\u0009/\\u00091 === 1'); -} - -//CHECK#2 -if (eval("1\u000B/\u000B1") !== 1) { - $ERROR('#2: 1\\u000B/\\u000B1 === 1'); -} - -//CHECK#3 -if (eval("1\u000C/\u000C1") !== 1) { - $ERROR('#3: 1\\u000C/\\u000C1 === 1'); -} - -//CHECK#4 -if (eval("1\u0020/\u00201") !== 1) { - $ERROR('#4: 1\\u0020/\\u00201 === 1'); -} - -//CHECK#5 -if (eval("1\u00A0/\u00A01") !== 1) { - $ERROR('#5: 1\\u00A0/\\u00A01 === 1'); -} - -//CHECK#6 -if (eval("1\u000A/\u000A1") !== 1) { - $ERROR('#6: 1\\u000A/\\u000A1 === 1'); -} - -//CHECK#7 -if (eval("1\u000D/\u000D1") !== 1) { - $ERROR('#7: 1\\u000D/\\u000D1 === 1'); -} - -//CHECK#8 -if (eval("1\u2028/\u20281") !== 1) { - $ERROR('#8: 1\\u2028/\\u20281 === 1'); -} - -//CHECK#9 -if (eval("1\u2029/\u20291") !== 1) { - $ERROR('#9: 1\\u2029/\\u20291 === 1'); -} - -//CHECK#10 -if (eval("1\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029/\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20291") !== 1) { - $ERROR('#10: 1\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029/\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20291 === 1'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A2.1_T1.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A2.1_T1.js deleted file mode 100644 index d28d33b4e..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A2.1_T1.js +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.2_A2.1_T1; - * @section: 11.5.2; - * @assertion: Operator x / y uses GetValue; - * @description: Either Type is not Reference or GetBase is not null; -*/ - -//CHECK#1 -if (1 / 1 !== 1) { - $ERROR('#1: 1 / 1 === 1. Actual: ' + (1 / 1)); -} - -//CHECK#2 -var x = 1; -if (x / 1 !== 1) { - $ERROR('#2: var x = 1; x / 1 === 1. Actual: ' + (x / 1)); -} - -//CHECK#3 -var y = 1; -if (1 / y !== 1) { - $ERROR('#3: var y = 1; 1 / y === 1. Actual: ' + (1 / y)); -} - -//CHECK#4 -var x = 1; -var y = 1; -if (x / y !== 1) { - $ERROR('#4: var x = 1; var y = 1; x / y === 1. Actual: ' + (x / y)); -} - -//CHECK#5 -var objectx = new Object(); -var objecty = new Object(); -objectx.prop = 1; -objecty.prop = 1; -if (objectx.prop / objecty.prop !== 1) { - $ERROR('#5: var objectx = new Object(); var objecty = new Object(); objectx.prop = 1; objecty.prop = 1; objectx.prop / objecty.prop === 1. Actual: ' + (objectx.prop / objecty.prop)); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A2.1_T2.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A2.1_T2.js deleted file mode 100644 index bc8f3398f..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A2.1_T2.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.2_A2.1_T2; - * @section: 11.5.2; - * @assertion: Operator x / y uses GetValue; - * @description: If GetBase(x) is null, throw ReferenceError; -*/ - -//CHECK#1 -try { - x / 1; - $ERROR('#1.1: x / 1 throw ReferenceError. Actual: ' + (x / 1)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: x / 1 throw ReferenceError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A2.1_T3.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A2.1_T3.js deleted file mode 100644 index 60d0bfce1..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A2.1_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.2_A2.1_T3; - * @section: 11.5.2; - * @assertion: Operator x / y uses GetValue; - * @description: If GetBase(y) is null, throw ReferenceError; -*/ - -//CHECK#1 -try { - 1 / y; - $ERROR('#1.1: 1 / y throw ReferenceError. Actual: ' + (1 / y)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: 1 / y throw ReferenceError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A2.2_T1.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A2.2_T1.js deleted file mode 100644 index 67d88c198..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A2.2_T1.js +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.2_A2.2_T1; - * @section: 11.5.2, 8.6.2.6; - * @assertion: Operator x / y uses [[Default Value]]; - * @description: If Type(value) is Object, evaluate ToPrimitive(value, Number); - */ - -//CHECK#1 -if ({valueOf: function() {return 1}} / 1 !== 1) { - $ERROR('#1: {valueOf: function() {return 1}} / 1 === 1. Actual: ' + ({valueOf: function() {return 1}} / 1)); -} - -//CHECK#2 -if ({valueOf: function() {return 1}, toString: function() {return 0}} / 1 !== 1) { - $ERROR('#2: {valueOf: function() {return 1}, toString: function() {return 0}} / 1 === 1. Actual: ' + ({valueOf: function() {return 1}, toString: function() {return 0}} / 1)); -} - -//CHECK#3 -if ({valueOf: function() {return 1}, toString: function() {return {}}} / 1 !== 1) { - $ERROR('#3: {valueOf: function() {return 1}, toString: function() {return {}}} / 1 === 1. Actual: ' + ({valueOf: function() {return 1}, toString: function() {return {}}} / 1)); -} - -//CHECK#4 -try { - if ({valueOf: function() {return 1}, toString: function() {throw "error"}} / 1 !== 1) { - $ERROR('#4.1: {valueOf: function() {return 1}, toString: function() {throw "error"}} / 1 === 1. Actual: ' + ({valueOf: function() {return 1}, toString: function() {throw "error"}} / 1)); - } -} -catch (e) { - if (e === "error") { - $ERROR('#4.2: {valueOf: function() {return 1}, toString: function() {throw "error"}} / 1 not throw "error"'); - } else { - $ERROR('#4.3: {valueOf: function() {return 1}, toString: function() {throw "error"}} / 1 not throw Error. Actual: ' + (e)); - } -} - -//CHECK#5 -if (1 / {toString: function() {return 1}} !== 1) { - $ERROR('#5: 1 / {toString: function() {return 1}} === 1. Actual: ' + (1 / {toString: function() {return 1}})); -} - -//CHECK#6 -if (1 / {valueOf: function() {return {}}, toString: function() {return 1}} !== 1) { - $ERROR('#6: 1 / {valueOf: function() {return {}}, toString: function() {return 1}} === 1. Actual: ' + (1 / {valueOf: function() {return {}}, toString: function() {return 1}})); -} - -//CHECK#7 -try { - 1 / {valueOf: function() {throw "error"}, toString: function() {return 1}}; - $ERROR('#7.1: 1 / {valueOf: function() {throw "error"}, toString: function() {return 1}} throw "error". Actual: ' + (1 / {valueOf: function() {throw "error"}, toString: function() {return 1}})); -} -catch (e) { - if (e !== "error") { - $ERROR('#7.2: 1 / {valueOf: function() {throw "error"}, toString: function() {return 1}} throw "error". Actual: ' + (e)); - } -} - -//CHECK#8 -try { - 1 / {valueOf: function() {return {}}, toString: function() {return {}}}; - $ERROR('#8.1: 1 / {valueOf: function() {return {}}, toString: function() {return {}}} throw TypeError. Actual: ' + (1 / {valueOf: function() {return {}}, toString: function() {return {}}})); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#8.2: 1 / {valueOf: function() {return {}}, toString: function() {return {}}} throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A2.3_T1.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A2.3_T1.js deleted file mode 100644 index e45fb0014..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A2.3_T1.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.2_A2.3_T1; - * @section: 11.5.2; - * @assertion: ToNumber(first expression) is called first, and then ToNumber(second expression); - * @description: Checking with "throw"; -*/ - -//CHECK#1 -var x = { valueOf: function () { throw "x"; } }; -var y = { valueOf: function () { throw "y"; } }; -try { - x / y; - $ERROR('#1.1: var x = { valueOf: function () { throw "x"; } }; var y = { valueOf: function () { throw "y"; } }; x / y throw "x". Actual: ' + (x / y)); -} catch (e) { - if (e === "y") { - $ERROR('#1.2: ToNumber(first expression) is called first, and then ToNumber(second expression)'); - } else { - if (e !== "x") { - $ERROR('#1.3: var x = { valueOf: function () { throw "x"; } }; var y = { valueOf: function () { throw "y"; } }; x / y throw "x". Actual: ' + (e)); - } - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A2.4_T1.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A2.4_T1.js deleted file mode 100644 index 80d0cef8d..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A2.4_T1.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.2_A2.4_T1; - * @section: 11.5.2; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with "="; -*/ - -//CHECK#1 -var x = 0; -if ((x = 1) / x !== 1) { - $ERROR('#1: var x = 0; (x = 1) / x === 1. Actual: ' + ((x = 1) / x)); -} - -//CHECK#2 -var x = 0; -if (x / (x = 1) !== 0) { - $ERROR('#2: var x = 0; x / (x = 1) === 0. Actual: ' + (x / (x = 1))); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A2.4_T2.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A2.4_T2.js deleted file mode 100644 index db6854d76..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A2.4_T2.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.2_A2.4_T2; - * @section: 11.5.2; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with "throw"; -*/ - -//CHECK#1 -var x = function () { throw "x"; }; -var y = function () { throw "y"; }; -try { - x() / y(); - $ERROR('#1.1: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() / y() throw "x". Actual: ' + (x() / y())); -} catch (e) { - if (e === "y") { - $ERROR('#1.2: First expression is evaluated first, and then second expression'); - } else { - if (e !== "x") { - $ERROR('#1.3: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() / y() throw "x". Actual: ' + (e)); - } - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A2.4_T3.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A2.4_T3.js deleted file mode 100644 index 86b51ee92..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A2.4_T3.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.2_A2.4_T3; - * @section: 11.5.2; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with undeclarated variables; -*/ - -//CHECK#1 -try { - x / (x = 1); - $ERROR('#1.1: x / (x = 1) throw ReferenceError. Actual: ' + (x / (x = 1))); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: x / (x = 1) throw ReferenceError. Actual: ' + (e)); - } -} - -//CHECK#2 -if ((y = 1) / y !== 1) { - $ERROR('#2: (y = 1) / y === 1. Actual: ' + ((y = 1) / y)); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A3_T1.1.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A3_T1.1.js deleted file mode 100644 index 0ead4aea7..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A3_T1.1.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.2_A3_T1.1; - * @section: 11.5.2; - * @assertion: Operator x / y returns ToNumber(x) / ToNumber(y); - * @description: Type(x) and Type(y) vary between primitive boolean and Boolean object; - */ - -//CHECK#1 -if (true / true !== 1) { - $ERROR('#1: true / true === 1. Actual: ' + (true / true)); -} - -//CHECK#2 -if (new Boolean(true) / true !== 1) { - $ERROR('#2: new Boolean(true) / true === 1. Actual: ' + (new Boolean(true) / true)); -} - -//CHECK#3 -if (true / new Boolean(true) !== 1) { - $ERROR('#3: true / new Boolean(true) === 1. Actual: ' + (true / new Boolean(true))); -} - -//CHECK#4 -if (new Boolean(true) / new Boolean(true) !== 1) { - $ERROR('#4: new Boolean(true) / new Boolean(true) === 1. Actual: ' + (new Boolean(true) / new Boolean(true))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A3_T1.2.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A3_T1.2.js deleted file mode 100644 index f45544df2..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A3_T1.2.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.2_A3_T1.2; - * @section: 11.5.2; - * @assertion: Operator x / y returns ToNumber(x) / ToNumber(y); - * @description: Type(x) and Type(y) vary between primitive number and Number object; -*/ - -//CHECK#1 -if (1 / 1 !== 1) { - $ERROR('#1: 1 / 1 === 1. Actual: ' + (1 / 1)); -} - -//CHECK#2 -if (new Number(1) / 1 !== 1) { - $ERROR('#2: new Number(1) / 1 === 1. Actual: ' + (new Number(1) / 1)); -} - -//CHECK#3 -if (1 / new Number(1) !== 1) { - $ERROR('#3: 1 / new Number(1) === 1. Actual: ' + (1 / new Number(1))); -} - -//CHECK#4 -if (new Number(1) / new Number(1) !== 1) { - $ERROR('#4: new Number(1) / new Number(1) === 1. Actual: ' + (new Number(1) / new Number(1))); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A3_T1.3.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A3_T1.3.js deleted file mode 100644 index 16ec25a54..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A3_T1.3.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.2_A3_T1.3; - * @section: 11.5.2; - * @assertion: Operator x / y returns ToNumber(x) / ToNumber(y); - * @description: Type(x) and Type(y) vary between primitive string and String object; -*/ - -//CHECK#1 -if ("1" / "1" !== 1) { - $ERROR('#1: "1" / "1" === 1. Actual: ' + ("1" / "1")); -} - -//CHECK#2 -if (new String("1") / "1" !== 1) { - $ERROR('#2: new String("1") / "1" === 1. Actual: ' + (new String("1") / "1")); -} - -//CHECK#3 -if ("1" / new String("1") !== 1) { - $ERROR('#3: "1" / new String("1") === 1. Actual: ' + ("1" / new String("1"))); -} - -//CHECK#4 -if (new String("1") / new String("1") !== 1) { - $ERROR('#4: new String("1") / new String("1") === 1. Actual: ' + (new String("1") / new String("1"))); -} - -//CHECK#5 -if (isNaN("x" / "1") !== true) { - $ERROR('#5: "x" / "1" === Not-a-Number. Actual: ' + ("x" / "1")); -} - -//CHECK#6 -if (isNaN("1" / "x") !== true) { - $ERROR('#6: "1" / "x" === Not-a-Number. Actual: ' + ("1" / "x")); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A3_T1.4.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A3_T1.4.js deleted file mode 100644 index cb2b91f5e..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A3_T1.4.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.2_A3_T1.4; - * @section: 11.5.2; - * @assertion: Operator x / y returns ToNumber(x) / ToNumber(y); - * @description: Type(x) and Type(y) vary between Null and Undefined; - */ - -//CHECK#1 -if (isNaN(null / undefined) !== true) { - $ERROR('#1: null / undefined === Not-a-Number. Actual: ' + (null / undefined)); -} - -//CHECK#2 -if (isNaN(undefined / null) !== true) { - $ERROR('#2: undefined / null === Not-a-Number. Actual: ' + (undefined / null)); -} - -//CHECK#3 -if (isNaN(undefined / undefined) !== true) { - $ERROR('#3: undefined / undefined === Not-a-Number. Actual: ' + (undefined / undefined)); -} - -//CHECK#4 -if (isNaN(null / null) !== true) { - $ERROR('#4: null / null === Not-a-Number. Actual: ' + (null / null)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A3_T1.5.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A3_T1.5.js deleted file mode 100644 index a99519329..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A3_T1.5.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.2_A3_T1.5; - * @section: 11.5.2; - * @assertion: Operator x / y returns ToNumber(x) / ToNumber(y); - * @description: Type(x) and Type(y) vary between Object object and Function object; - */ - -//CHECK#1 -if (isNaN({} / function(){return 1}) !== true) { - $ERROR('#1: {} / function(){return 1} === Not-a-Number. Actual: ' + ({} / function(){return 1})); -} - -//CHECK#2 -if (isNaN(function(){return 1} / {}) !== true) { - $ERROR('#2: function(){return 1} / {} === Not-a-Number. Actual: ' + (function(){return 1} / {})); -} - -//CHECK#3 -if (isNaN(function(){return 1} / function(){return 1}) !== true) { - $ERROR('#3: function(){return 1} / function(){return 1} === Not-a-Number. Actual: ' + (function(){return 1} / function(){return 1})); -} - -//CHECK#4 -if (isNaN({} / {}) !== true) { - $ERROR('#4: {} / {} === Not-a-Number. Actual: ' + ({} / {})); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A3_T2.1.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A3_T2.1.js deleted file mode 100644 index cf2ef46fe..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A3_T2.1.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.2_A3_T2.1; - * @section: 11.5.2; - * @assertion: Operator x / y returns ToNumber(x) / ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Boolean (primitive and object); - */ - -//CHECK#1 -if (true / 1 !== 1) { - $ERROR('#1: true / 1 === 1. Actual: ' + (true / 1)); -} - -//CHECK#2 -if (1 / true !== 1) { - $ERROR('#2: 1 / true === 1. Actual: ' + (1 / true)); -} - -//CHECK#3 -if (new Boolean(true) / 1 !== 1) { - $ERROR('#3: new Boolean(true) / 1 === 1. Actual: ' + (new Boolean(true) / 1)); -} - -//CHECK#4 -if (1 / new Boolean(true) !== 1) { - $ERROR('#4: 1 / new Boolean(true) === 1. Actual: ' + (1 / new Boolean(true))); -} - -//CHECK#5 -if (true / new Number(1) !== 1) { - $ERROR('#5: true / new Number(1) === 1. Actual: ' + (true / new Number(1))); -} - -//CHECK#6 -if (new Number(1) / true !== 1) { - $ERROR('#6: new Number(1) / true === 1. Actual: ' + (new Number(1) / true)); -} - -//CHECK#7 -if (new Boolean(true) / new Number(1) !== 1) { - $ERROR('#7: new Boolean(true) / new Number(1) === 1. Actual: ' + (new Boolean(true) / new Number(1))); -} - -//CHECK#8 -if (new Number(1) / new Boolean(true) !== 1) { - $ERROR('#8: new Number(1) / new Boolean(true) === 1. Actual: ' + (new Number(1) / new Boolean(true))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A3_T2.2.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A3_T2.2.js deleted file mode 100644 index 48bb35e57..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A3_T2.2.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.2_A3_T2.2; - * @section: 11.5.2; - * @assertion: Operator x / y returns ToNumber(x) / ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and String (primitive and object); -*/ - -//CHECK#1 -if ("1" / 1 !== 1) { - $ERROR('#1: "1" / 1 === 1. Actual: ' + ("1" / 1)); -} - -//CHECK#2 -if (1 / "1" !== 1) { - $ERROR('#2: 1 / "1" === 1. Actual: ' + (1 / "1")); -} - -//CHECK#3 -if (new String("1") / 1 !== 1) { - $ERROR('#3: new String("1") / 1 === 1. Actual: ' + (new String("1") / 1)); -} - -//CHECK#4 -if (1 / new String("1") !== 1) { - $ERROR('#4: 1 / new String("1") === 1. Actual: ' + (1 / new String("1"))); -} - -//CHECK#5 -if ("1" / new Number(1) !== 1) { - $ERROR('#5: "1" / new Number(1) === 1. Actual: ' + ("1" / new Number(1))); -} - -//CHECK#6 -if (new Number(1) / "1" !== 1) { - $ERROR('#6: new Number(1) / "1" === 1. Actual: ' + (new Number(1) / "1")); -} - -//CHECK#7 -if (new String("1") / new Number(1) !== 1) { - $ERROR('#7: new String("1") / new Number(1) === 1. Actual: ' + (new String("1") / new Number(1))); -} - -//CHECK#8 -if (new Number(1) / new String("1") !== 1) { - $ERROR('#8: new Number(1) / new String("1") === 1. Actual: ' + (new Number(1) / new String("1"))); -} - -//CHECK#9 -if (isNaN("x" / 1) !== true) { - $ERROR('#9: "x" / 1 === Not-a-Number. Actual: ' + ("x" / 1)); -} - -//CHECK#10 -if (isNaN(1 / "x") !== true) { - $ERROR('#10: 1 / "x" === Not-a-Number. Actual: ' + (1 / "x")); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A3_T2.3.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A3_T2.3.js deleted file mode 100644 index e8c3aee1e..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A3_T2.3.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.2_A3_T2.3; - * @section: 11.5.2; - * @assertion: Operator x / y returns ToNumber(x) / ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Null; - */ - -//CHECK#1 -if (1 / null !== Number.POSITIVE_INFINITY) { - $ERROR('#1: 1 / null === +Infinity. Actual: ' + (1 / null)); -} - -//CHECK#2 -if (null / 1 !== 0) { - $ERROR('#2: null / 1 === 0. Actual: ' + (null / 1)); -} - -//CHECK#3 -if (new Number(1) / null !== Number.POSITIVE_INFINITY) { - $ERROR('#3: new Number(1) / null === +Infinity. Actual: ' + (new Number(1) / null)); -} - -//CHECK#4 -if (null / new Number(1) !== 0) { - $ERROR('#4: null / new Number(1) === 0. Actual: ' + (null / new Number(1))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A3_T2.4.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A3_T2.4.js deleted file mode 100644 index aabaabbea..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A3_T2.4.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.2_A3_T2.4; - * @section: 11.5.2; - * @assertion: Operator x / y returns ToNumber(x) / ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Undefined; - */ - -//CHECK#1 -if (isNaN(1 / undefined) !== true) { - $ERROR('#1: 1 / undefined === Not-a-Number. Actual: ' + (1 / undefined)); -} - -//CHECK#2 -if (isNaN(undefined / 1) !== true) { - $ERROR('#2: undefined / 1 === Not-a-Number. Actual: ' + (undefined / 1)); -} - -//CHECK#3 -if (isNaN(new Number(1) / undefined) !== true) { - $ERROR('#3: new Number(1) / undefined === Not-a-Number. Actual: ' + (new Number(1) / undefined)); -} - -//CHECK#4 -if (isNaN(undefined / new Number(1)) !== true) { - $ERROR('#4: undefined / new Number(1) === Not-a-Number. Actual: ' + (undefined / new Number(1))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A3_T2.5.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A3_T2.5.js deleted file mode 100644 index 2892d6da0..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A3_T2.5.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.2_A3_T2.5; - * @section: 11.5.2; - * @assertion: Operator x / y returns ToNumber(x) / ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between String (primitive or object) and Boolean (primitive and object); -*/ - -//CHECK#1 -if (true / "1" !== 1) { - $ERROR('#1: true / "1" === 1. Actual: ' + (true / "1")); -} - -//CHECK#2 -if ("1" / true !== 1) { - $ERROR('#2: "1" / true === 1. Actual: ' + ("1" / true)); -} - -//CHECK#3 -if (new Boolean(true) / "1" !== 1) { - $ERROR('#3: new Boolean(true) / "1" === 1. Actual: ' + (new Boolean(true) / "1")); -} - -//CHECK#4 -if ("1" / new Boolean(true) !== 1) { - $ERROR('#4: "1" / new Boolean(true) === 1. Actual: ' + ("1" / new Boolean(true))); -} - -//CHECK#5 -if (true / new String("1") !== 1) { - $ERROR('#5: true / new String("1") === 1. Actual: ' + (true / new String("1"))); -} - -//CHECK#6 -if (new String("1") / true !== 1) { - $ERROR('#6: new String("1") / true === 1. Actual: ' + (new String("1") / true)); -} - -//CHECK#7 -if (new Boolean(true) / new String("1") !== 1) { - $ERROR('#7: new Boolean(true) / new String("1") === 1. Actual: ' + (new Boolean(true) / new String("1"))); -} - -//CHECK#8 -if (new String("1") / new Boolean(true) !== 1) { - $ERROR('#8: new String("1") / new Boolean(true) === 1. Actual: ' + (new String("1") / new Boolean(true))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A3_T2.6.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A3_T2.6.js deleted file mode 100644 index 956adb308..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A3_T2.6.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.2_A3_T2.6; - * @section: 11.5.2; - * @assertion: Operator x / y returns ToNumber(x) / ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between String (primitive or object) and Undefined; - */ - -//CHECK#1 -if (isNaN("1" / undefined) !== true) { - $ERROR('#1: "1" / undefined === Not-a-Number. Actual: ' + ("1" / undefined)); -} - -//CHECK#2 -if (isNaN(undefined / "1") !== true) { - $ERROR('#2: undefined / "1" === Not-a-Number. Actual: ' + (undefined / "1")); -} - -//CHECK#3 -if (isNaN(new String("1") / undefined) !== true) { - $ERROR('#3: new String("1") / undefined === Not-a-Number. Actual: ' + (new String("1") / undefined)); -} - -//CHECK#4 -if (isNaN(undefined / new String("1")) !== true) { - $ERROR('#4: undefined / new String("1") === Not-a-Number. Actual: ' + (undefined / new String("1"))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A3_T2.7.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A3_T2.7.js deleted file mode 100644 index 5404e824a..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A3_T2.7.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.2_A3_T2.7; - * @section: 11.5.2; - * @assertion: Operator x / y returns ToNumber(x) / ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between String (primitive or object) and Null; - */ - -//CHECK#1 -if ("1" / null !== Number.POSITIVE_INFINITY) { - $ERROR('#1: "1" / null === +Infinity. Actual: ' + ("1" / null)); -} - -//CHECK#2 -if (null / "1" !== 0) { - $ERROR('#2: null / "1" === 0. Actual: ' + (null / "1")); -} - -//CHECK#3 -if (new String("1") / null !== Number.POSITIVE_INFINITY) { - $ERROR('#3: new String("1") / null === +Infinity. Actual: ' + (new String("1") / null)); -} - -//CHECK#4 -if (null / new String("1") !== 0) { - $ERROR('#4: null / new String("1") === 0. Actual: ' + (null / new String("1"))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A3_T2.8.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A3_T2.8.js deleted file mode 100644 index a3d235ba9..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A3_T2.8.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.2_A3_T2.8; - * @section: 11.5.2; - * @assertion: Operator x / y returns ToNumber(x) / ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Undefined; - */ - -//CHECK#1 -if (isNaN(true / undefined) !== true) { - $ERROR('#1: true / undefined === Not-a-Number. Actual: ' + (true / undefined)); -} - -//CHECK#2 -if (isNaN(undefined / true) !== true) { - $ERROR('#2: undefined / true === Not-a-Number. Actual: ' + (undefined / true)); -} - -//CHECK#3 -if (isNaN(new Boolean(true) / undefined) !== true) { - $ERROR('#3: new Boolean(true) / undefined === Not-a-Number. Actual: ' + (new Boolean(true) / undefined)); -} - -//CHECK#4 -if (isNaN(undefined / new Boolean(true)) !== true) { - $ERROR('#4: undefined / new Boolean(true) === Not-a-Number. Actual: ' + (undefined / new Boolean(true))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A3_T2.9.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A3_T2.9.js deleted file mode 100644 index a94ff7ada..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A3_T2.9.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.2_A3_T2.9; - * @section: 11.5.2; - * @assertion: Operator x / y returns ToNumber(x) / ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Null; - */ - -//CHECK#1 -if (true / null !== Number.POSITIVE_INFINITY) { - $ERROR('#1: true / null === +Infinity. Actual: ' + (true / null)); -} - -//CHECK#2 -if (null / true !== 0) { - $ERROR('#2: null / true === 0. Actual: ' + (null / true)); -} - -//CHECK#3 -if (new Boolean(true) / null !== Number.POSITIVE_INFINITY) { - $ERROR('#3: new Boolean(true) / null === +Infinity. Actual: ' + (new Boolean(true) / null)); -} - -//CHECK#4 -if (null / new Boolean(true) !== 0) { - $ERROR('#4: null / new Boolean(true) === 0. Actual: ' + (null / new Boolean(true))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A4_T1.1.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A4_T1.1.js deleted file mode 100644 index 80a938747..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A4_T1.1.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.2_A4_T1.1; - * @section: 11.5.2; - * @assertion: The result of division is determined by the specification of IEEE 754 arithmetics; - * @description: If left operand is NaN, the result is NaN; - */ - -//CHECK#1 -if (isNaN(Number.NaN / Number.NaN) !== true) { - $ERROR('#1: NaN / NaN === Not-a-Number. Actual: ' + (NaN / NaN)); -} - -//CHECK#2 -if (isNaN(Number.NaN / +0) !== true) { - $ERROR('#2: NaN / +0 === Not-a-Number. Actual: ' + (NaN / +0)); -} - -//CHECK#3 -if (isNaN(Number.NaN / -0) !== true) { - $ERROR('#3: NaN / -0 === Not-a-Number. Actual: ' + (NaN / -0)); -} - -//CHECK#4 -if (isNaN(Number.NaN / Number.POSITIVE_INFINITY) !== true) { - $ERROR('#4: NaN / Infinity === Not-a-Number. Actual: ' + (NaN / Infinity)); -} - -//CHECK#5 -if (isNaN(Number.NaN / Number.NEGATIVE_INFINITY) !== true) { - $ERROR('#5: NaN / -Infinity === Not-a-Number. Actual: ' + (NaN / -Infinity)); -} - -//CHECK#6 -if (isNaN(Number.NaN / Number.MAX_VALUE) !== true) { - $ERROR('#6: NaN / Number.MAX_VALUE === Not-a-Number. Actual: ' + (NaN / Number.MAX_VALUE)); -} - -//CHECK#7 -if (isNaN(Number.NaN / Number.MIN_VALUE) !== true) { - $ERROR('#7: NaN / Number.MIN_VALUE === Not-a-Number. Actual: ' + (NaN / Number.MIN_VALUE)); -} - -//CHECK#8 -if (isNaN(Number.NaN / 1) !== true) { - $ERROR('#8: NaN / 1 === Not-a-Number. Actual: ' + (NaN / 1)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A4_T1.2.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A4_T1.2.js deleted file mode 100644 index f4245b5d6..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A4_T1.2.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.2_A4_T1.2; - * @section: 11.5.2; - * @assertion: The result of division is determined by the specification of IEEE 754 arithmetics; - * @description: If right operand is NaN, the result is NaN; - */ - -//CHECK#1 -if (isNaN(Number.NaN / Number.NaN) !== true) { - $ERROR('#1: NaN / NaN === Not-a-Number. Actual: ' + (NaN / NaN)); -} - -//CHECK#2 -if (isNaN(+0 / Number.NaN) !== true) { - $ERROR('#2: +0 / NaN === Not-a-Number. Actual: ' + (+0 / NaN)); -} - -//CHECK#3 -if (isNaN(-0 / Number.NaN) !== true) { - $ERROR('#3: -0 / NaN === Not-a-Number. Actual: ' + (-0 / NaN)); -} - -//CHECK#4 -if (isNaN(Number.POSITIVE_INFINITY / Number.NaN) !== true) { - $ERROR('#4: Infinity / NaN === Not-a-Number. Actual: ' + (Infinity / NaN)); -} - -//CHECK#5 -if (isNaN(Number.NEGATIVE_INFINITY / Number.NaN) !== true) { - $ERROR('#5: -Infinity / NaN === Not-a-Number. Actual: ' + ( -Infinity / NaN)); -} - -//CHECK#6 -if (isNaN(Number.MAX_VALUE / Number.NaN) !== true) { - $ERROR('#6: Number.MAX_VALUE / NaN === Not-a-Number. Actual: ' + (Number.MAX_VALUE / NaN)); -} - -//CHECK#7 -if (isNaN(Number.MIN_VALUE / Number.NaN) !== true) { - $ERROR('#7: Number.MIN_VALUE / NaN === Not-a-Number. Actual: ' + (Number.MIN_VALUE / NaN)); -} - -//CHECK#8 -if (isNaN(1 / Number.NaN) !== true) { - $ERROR('#8: 1 / NaN === Not-a-Number. Actual: ' + (1 / NaN)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A4_T10.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A4_T10.js deleted file mode 100644 index 19c2d9dd0..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A4_T10.js +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.2_A4_T10; - * @section: 11.5.2; - * @assertion: The result of division is determined by the specification of IEEE 754 arithmetics; - * @description: If both operands are finite and nonzero, the quotient is computed and rounded using IEEE 754 round-to-nearest mode. - * If the magnitude is too small to represent, the result is then a zero of appropriate sign; - */ - -//CHECK#1 -if (Number.MIN_VALUE / 2.1 !== 0) { - $ERROR('#1: Number.MIN_VALUE / 2.1 === 0. Actual: ' + (Number.MIN_VALUE / 2.1)); -} - -//CHECK#2 -if (Number.MIN_VALUE / -2.1 !== -0) { - $ERROR('#2.1: Number.MIN_VALUE / -2.1 === 0. Actual: ' + (Number.MIN_VALUE / -2.1)); -} else { - if (1 / (Number.MIN_VALUE / -2.1) !== Number.NEGATIVE_INFINITY) { - $ERROR('#2.2: Number.MIN_VALUE / -2.1 === -0. Actual: +0'); - } -} - -//CHECK#3 -if (Number.MIN_VALUE / 2.0 !== 0) { - $ERROR('#3: Number.MIN_VALUE / 2.0 === 0. Actual: ' + (Number.MIN_VALUE / 2.0)); -} - -//CHECK#4 -if (Number.MIN_VALUE / -2.0 !== -0) { - $ERROR('#4.1: Number.MIN_VALUE / -2.0 === -0. Actual: ' + (Number.MIN_VALUE / -2.0)); -} else { - if (1 / (Number.MIN_VALUE / -2.0) !== Number.NEGATIVE_INFINITY) { - $ERROR('#4.2: Number.MIN_VALUE / -2.0 === -0. Actual: +0'); - } -} - -//CHECK#5 -if (Number.MIN_VALUE / 1.9 !== Number.MIN_VALUE) { - $ERROR('#5: Number.MIN_VALUE / 1.9 === Number.MIN_VALUE. Actual: ' + (Number.MIN_VALUE / 1.9)); -} - -//CHECK#6 -if (Number.MIN_VALUE / -1.9 !== -Number.MIN_VALUE) { - $ERROR('#6: Number.MIN_VALUE / -1.9 === -Number.MIN_VALUE. Actual: ' + (Number.MIN_VALUE / -1.9)); -} - -//CHECK#7 -if (Number.MIN_VALUE / 1.1 !== Number.MIN_VALUE) { - $ERROR('#7: Number.MIN_VALUE / 1.1 === Number.MIN_VALUE. Actual: ' + (Number.MIN_VALUE / 1.1)); -} - -//CHECK#8 -if (Number.MIN_VALUE / -1.1 !== -Number.MIN_VALUE) { - $ERROR('#8: Number.MIN_VALUE / -1.1 === -Number.MIN_VALUE. Actual: ' + (Number.MIN_VALUE / -1.1)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A4_T2.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A4_T2.js deleted file mode 100644 index 4310ba38d..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A4_T2.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.2_A4_T2; - * @section: 11.5.2; - * @assertion: The result of division is determined by the specification of IEEE 754 arithmetics; - * @description: The sign of the result is positive if both operands have the same sign, negative if the operands have different signs; - */ - -//CHECK#1 -if (1 / 1 !== 1) { - $ERROR('#1: 1 / 1 === 1. Actual: ' + (1 / 1)); -} - -//CHECK#2 -if (1 / -1 !== -1) { - $ERROR('#2: 1 / -1 === -1. Actual: ' + (1 / -1)); -} - -//CHECK#3 -if (-1 / 1 !== -1) { - $ERROR('#3: -1 / 1 === -1. Actual: ' + (-1 / 1)); -} - -//CHECK#4 -if (-1 / -1 !== 1) { - $ERROR('#4: -1 / -1 === 1. Actual: ' + (-1 / -1)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A4_T3.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A4_T3.js deleted file mode 100644 index dc6dbf221..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A4_T3.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.2_A4_T3; - * @section: 11.5.2; - * @assertion: The result of division is determined by the specification of IEEE 754 arithmetics; - * @description: Division of an infinity by a zero results in an infinity of appropriate sign; - */ - -//CHECK#1 -if (Number.NEGATIVE_INFINITY / 0 !== Number.NEGATIVE_INFINITY) { - $ERROR('#1: Infinity / 0 === Infinity. Actual: ' + (Infinity / 0)); -} - -//CHECK#2 -if (Number.NEGATIVE_INFINITY / -0 !== Number.POSITIVE_INFINITY) { - $ERROR('#2: -Infinity / -0 === Infinity. Actual: ' + (-Infinity / -0)); -} - -//CHECK#3 -if (Number.POSITIVE_INFINITY / 0 !== Number.POSITIVE_INFINITY) { - $ERROR('#3: Infinity / 0 === Infinity. Actual: ' + (Infinity / 0)); -} - -//CHECK#4 -if (Number.POSITIVE_INFINITY / -0 !== Number.NEGATIVE_INFINITY) { - $ERROR('#4: Infinity / -0 === -Infinity. Actual: ' + (Infinity / -0)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A4_T4.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A4_T4.js deleted file mode 100644 index 1a6182216..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A4_T4.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.2_A4_T4; - * @section: 11.5.2; - * @assertion: The result of division is determined by the specification of IEEE 754 arithmetics; - * @description: Division of an infinity by an infinity results in NaN; - */ - -//CHECK#1 -if (isNaN(Number.NEGATIVE_INFINITY / Number.NEGATIVE_INFINITY) !== true) { - $ERROR('#1: -Infinity / -Infinity === Not-a-Number. Actual: ' + (-Infinity / -Infinity)); -} - -//CHECK#2 -if (isNaN(Number.POSITIVE_INFINITY / Number.POSITIVE_INFINITY) !== true) { - $ERROR('#2: Infinity / Infinity === Not-a-Number. Actual: ' + (Infinity / Infinity)); -} - -//CHECK#3 -if (isNaN(Number.NEGATIVE_INFINITY / Number.POSITIVE_INFINITY) !== true) { - $ERROR('#3: -Infinity / Infinity === Not-a-Number. Actual: ' + (-Infinity / Infinity)); -} - -//CHECK#4 -if (isNaN(Number.POSITIVE_INFINITY / Number.NEGATIVE_INFINITY) !== true) { - $ERROR('#4: Infinity / -Infinity === Not-a-Number. Actual: ' + (Infinity / -Infinity)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A4_T5.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A4_T5.js deleted file mode 100644 index 6a7c8bee9..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A4_T5.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.2_A4_T5; - * @section: 11.5.2; - * @assertion: The result of division is determined by the specification of IEEE 754 arithmetics; - * @description: Division of an infinity by a finite non-zero value results in a signed infinity; - */ - -//CHECK#1 -if (Number.NEGATIVE_INFINITY / 1 !== Number.NEGATIVE_INFINITY) { - $ERROR('#1: -Infinity / 1 === -Infinity. Actual: ' + (-Infinity / 1)); -} - -//CHECK#2 -if (Number.NEGATIVE_INFINITY / -1 !== Number.POSITIVE_INFINITY) { - $ERROR('#2: -Infinity / -1 === Infinity. Actual: ' + (-Infinity / -1)); -} - -//CHECK#3 -if (Number.POSITIVE_INFINITY / 1 !== Number.POSITIVE_INFINITY) { - $ERROR('#3: Infinity / 1 === Infinity. Actual: ' + (Infinity / 1)); -} - -//CHECK#4 -if (Number.POSITIVE_INFINITY / -1 !== Number.NEGATIVE_INFINITY) { - $ERROR('#4: Infinity / -1 === -Infinity. Actual: ' + (Infinity / -1)); -} - -//CHECK#5 -if (Number.POSITIVE_INFINITY / -Number.MAX_VALUE !== Number.NEGATIVE_INFINITY) { - $ERROR('#5: Infinity / -Number.MAX_VALUE === -Infinity. Actual: ' + (Infinity / -Number.MAX_VALUE)); -} - -//CHECK#6 -if (Number.NEGATIVE_INFINITY / Number.MIN_VALUE !== Number.NEGATIVE_INFINITY) { - $ERROR('#6: -Infinity / Number.MIN_VALUE === -Infinity. Actual: ' + (-Infinity / Number.MIN_VALUE)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A4_T6.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A4_T6.js deleted file mode 100644 index f434ee651..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A4_T6.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.2_A4_T6; - * @section: 11.5.2; - * @assertion: The result of division is determined by the specification of IEEE 754 arithmetics; - * @description: Division of a finite value by an infinity results in zero of appropriate sign; - */ - -//CHECK#1 -if (1 / Number.NEGATIVE_INFINITY !== -0) { - $ERROR('#1.1: 1 / -Infinity === 0. Actual: ' + (1 / -Infinity)); -} else { - if (1 / (1 / Number.NEGATIVE_INFINITY) !== Number.NEGATIVE_INFINITY) { - $ERROR('#1.2: 1 / -Infinity === - 0. Actual: +0'); - } -} - -//CHECK#2 -if (-1 / Number.NEGATIVE_INFINITY !== +0) { - $ERROR('#2.1: -1 / -Infinity === 0. Actual: ' + (-1 / -Infinity)); -} else { - if (1 / (-1 / Number.NEGATIVE_INFINITY) !== Number.POSITIVE_INFINITY) { - $ERROR('#2.2: -1 / -Infinity === + 0. Actual: -0'); - } -} - -//CHECK#3 -if (1 / Number.POSITIVE_INFINITY !== +0) { - $ERROR('#3.1: 1 / Infinity === 0. Actual: ' + (1 / Infinity)); -} else { - if (1 / (1 / Number.POSITIVE_INFINITY) !== Number.POSITIVE_INFINITY) { - $ERROR('#3.2: 1 / Infinity === + 0. Actual: -0'); - } -} - -//CHECK#4 -if (-1 / Number.POSITIVE_INFINITY !== -0) { - $ERROR('#4.1: -1 / Infinity === 0. Actual: ' + (-1 / Infinity)); -} else { - if (1 / (-1 / Number.POSITIVE_INFINITY) !== Number.NEGATIVE_INFINITY) { - $ERROR('#4.2: -1 / Infinity === - 0. Actual: +0'); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A4_T7.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A4_T7.js deleted file mode 100644 index ca31703ca..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A4_T7.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.2_A4_T7; - * @section: 11.5.2; - * @assertion: The result of division is determined by the specification of IEEE 754 arithmetics; - * @description: Division of a zero by a zero results in NaN; - */ - -//CHECK#1 -if (isNaN(+0 / +0) !== true) { - $ERROR('#1: +0 / +0 === Not-a-Number. Actual: ' + (+0 / +0)); -} - -//CHECK#2 -if (isNaN(-0 / +0) !== true) { - $ERROR('#2: -0 / +0 === Not-a-Number. Actual: ' + (-0 / +0)); -} - -//CHECK#3 -if (isNaN(+0 / -0) !== true) { - $ERROR('#3: +0 / -0 === Not-a-Number. Actual: ' + (+0 / -0)); -} - -//CHECK#4 -if (isNaN(-0 / -0) !== true) { - $ERROR('#4: -0 / -0 === Not-a-Number. Actual: ' + (-0 / -0)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A4_T8.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A4_T8.js deleted file mode 100644 index dc036ef04..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A4_T8.js +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.2_A4_T8; - * @section: 11.5.2; - * @assertion: The result of division is determined by the specification of IEEE 754 arithmetics; - * @description: Division of a zero by any non-zero finite value -0 results in zero of appropriate sign; - */ - -//CHECK#1 -if (-0 / 1 !== -0) { - $ERROR('#1.1: -0 / 1 === 0. Actual: ' + (-0 / 1)); -} else { - if (1 / (-0 / 1) !== Number.NEGATIVE_INFINITY) { - $ERROR('#1.2: -0 / 1 === - 0. Actual: +0'); - } -} - -//CHECK#2 -if (-0 / -1 !== +0) { - $ERROR('#2.1: -0 / -1 === 0. Actual: ' + (-0 / -1)); -} else { - if (1 / (-0 / -1) !== Number.POSITIVE_INFINITY) { - $ERROR('#2.2: -0 / -1 === + 0. Actual: -0'); - } -} - -//CHECK#3 -if (+0 / 1 !== +0) { - $ERROR('#3.1: +0 / 1 === 0. Actual: ' + (+0 / 1)); -} else { - if (1 / (+0 / -1) !== Number.NEGATIVE_INFINITY) { - $ERROR('#3.2: +0 / -1 === + 0. Actual: -0'); - } -} - -//CHECK#4 -if (+0 / -1 !== -0) { - $ERROR('#4.1: +0 / -1 === 0. Actual: ' + (+0 / -1)); -} else { - if (1 / (+0 / -1) !== Number.NEGATIVE_INFINITY) { - $ERROR('#4.2: +0 / -1 === - 0. Actual: +0'); - } -} - -//CHECK#5 -if (+0 / -Number.MAX_VALUE !== -0) { - $ERROR('#5.1: 0 / -Number.MAX_VALUE === 0. Actual: ' + (0 / -Number.MAX_VALUE)); -} else { - if (1 / (+0 / -Number.MAX_VALUE) !== Number.NEGATIVE_INFINITY) { - $ERROR('#5.2: +0 / -Number.MAX_VALUE === - 0. Actual: +0'); - } -} - -//CHECK#6 -if (-0 / Number.MIN_VALUE !== -0) { - $ERROR('#6.1: -0 / Number.MIN_VALUE === 0. Actual: ' + (-0 / Number.MIN_VALUE)); -} else { - if (1 / (-0 / Number.MIN_VALUE) !== Number.NEGATIVE_INFINITY) { - $ERROR('#6.2: -0 / Number.MIN_VALUE === - 0. Actual: +0'); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A4_T9.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A4_T9.js deleted file mode 100644 index 2e50bf15b..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.2_Applying_the_slash_Operator/S11.5.2_A4_T9.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.2_A4_T9; - * @section: 11.5.2; - * @assertion: The result of division is determined by the specification of IEEE 754 arithmetics; - * @description: If the magnitude is too large to represent, the result is then an infinity of appropriate sign; - */ - -//CHECK#1 -if (Number.MAX_VALUE / 0.9 !== Number.POSITIVE_INFINITY) { - $ERROR('#1: Number.MAX_VALUE / 0.9 === Number.POSITIVE_INFINITY. Actual: ' + (Number.MAX_VALUE / 0.9)); -} - -//CHECK#2 -if (Number.MAX_VALUE / -0.9 !== Number.NEGATIVE_INFINITY) { - $ERROR('#2: Number.MAX_VALUE / -0.9 === Number.NEGATIVE_INFINITY. Actual: ' + (Number.MAX_VALUE / -0.9)); -} - -//CHECK#3 -if (Number.MAX_VALUE / 1 !== Number.MAX_VALUE) { - $ERROR('#3: Number.MAX_VALUE / 1 === Number.MAX_VALUE. Actual: ' + (Number.MAX_VALUE / 1)); -} - -//CHECK#4 -if (Number.MAX_VALUE / -1 !== -Number.MAX_VALUE) { - $ERROR('#4: Number.MAX_VALUE / -1 === -Number.MAX_VALUE. Actual: ' + (Number.MAX_VALUE / -1)); -} - -//CHECK#5 -if (Number.MAX_VALUE / (Number.MAX_VALUE / 0.9) === (Number.MAX_VALUE / Number.MAX_VALUE) / 0.9) { - $ERROR('#5: Number.MAX_VALUE / (Number.MAX_VALUE / 0.9) !== (Number.MAX_VALUE / Number.MAX_VALUE) / 0.9'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A1.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A1.js deleted file mode 100644 index a555ffb41..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A1.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.5.3_A1; -* @section: 11.5.3, 7.2, 7.3; -* @assertion: White Space and Line Terminator between MultiplicativeExpression and "%" or between "%" and UnaryExpression are allowed; -* @description: Checking by using eval; -*/ - -//CHECK#1 -if (eval("1\u0009%\u00091") !== 0) { - $ERROR('#1: 1\\u0009%\\u00091 === 0'); -} - -//CHECK#2 -if (eval("1\u000B%\u000B1") !== 0) { - $ERROR('#2: 1\\u000B%\\u000B1 === 0'); -} - -//CHECK#3 -if (eval("1\u000C%\u000C1") !== 0) { - $ERROR('#3: 1\\u000C%\\u000C1 === 0'); -} - -//CHECK#4 -if (eval("1\u0020%\u00201") !== 0) { - $ERROR('#4: 1\\u0020%\\u00201 === 0'); -} - -//CHECK#5 -if (eval("1\u00A0%\u00A01") !== 0) { - $ERROR('#5: 1\\u00A0%\\u00A01 === 0'); -} - -//CHECK#6 -if (eval("1\u000A%\u000A1") !== 0) { - $ERROR('#6: 1\\u000A%\\u000A1 === 0'); -} - -//CHECK#7 -if (eval("1\u000D%\u000D1") !== 0) { - $ERROR('#7: 1\\u000D%\\u000D1 === 0'); -} - -//CHECK#8 -if (eval("1\u2028%\u20281") !== 0) { - $ERROR('#8: 1\\u2028%\\u20281 === 0'); -} - -//CHECK#9 -if (eval("1\u2029%\u20291") !== 0) { - $ERROR('#9: 1\\u2029%\\u20291 === 0'); -} - -//CHECK#10 -if (eval("1\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029%\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20291") !== 0) { - $ERROR('#10: 1\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029%\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20291 === 0'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A2.1_T1.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A2.1_T1.js deleted file mode 100644 index 3b42f3937..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A2.1_T1.js +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.3_A2.1_T1; - * @section: 11.5.3; - * @assertion: Operator x % y uses GetValue; - * @description: Either Type is not Reference or GetBase is not null; -*/ - -//CHECK#1 -if (1 % 2 !== 1) { - $ERROR('#1: 1 % 2 === 1. Actual: ' + (1 % 2)); -} - -//CHECK#2 -var x = 1; -if (x % 2 !== 1) { - $ERROR('#2: var x = 1; x % 2 === 1. Actual: ' + (x % 2)); -} - -//CHECK#3 -var y = 2; -if (1 % y !== 1) { - $ERROR('#3: var y = 2; 1 % y === 1. Actual: ' + (1 % y)); -} - -//CHECK#4 -var x = 1; -var y = 2; -if (x % y !== 1) { - $ERROR('#4: var x = 1; var y = 2; x % y === 1. Actual: ' + (x % y)); -} - -//CHECK#5 -var objectx = new Object(); -var objecty = new Object(); -objectx.prop = 1; -objecty.prop = 2; -if (objectx.prop % objecty.prop !== 1) { - $ERROR('#5: var objectx = new Object(); var objecty = new Object(); objectx.prop = 1; objecty.prop = 2; objectx.prop % objecty.prop === 1. Actual: ' + (objectx.prop % objecty.prop)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A2.1_T2.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A2.1_T2.js deleted file mode 100644 index 9c6d191b9..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A2.1_T2.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.3_A2.1_T2; - * @section: 11.5.3; - * @assertion: Operator x % y uses GetValue; - * @description: If GetBase(x) is null, throw ReferenceError; -*/ - -//CHECK#1 -try { - x % 1; - $ERROR('#1.1: x % 1 throw ReferenceError. Actual: ' + (x % 1)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: x % 1 throw ReferenceError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A2.1_T3.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A2.1_T3.js deleted file mode 100644 index 4909c5c25..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A2.1_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.3_A2.1_T3; - * @section: 11.5.3; - * @assertion: Operator x % y uses GetValue; - * @description: If GetBase(y) is null, throw ReferenceError; -*/ - -//CHECK#1 -try { - 1 % y; - $ERROR('#1.1: 1 % y throw ReferenceError. Actual: ' + (1 % y)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: 1 % y throw ReferenceError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A2.2_T1.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A2.2_T1.js deleted file mode 100644 index 4a93da786..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A2.2_T1.js +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.3_A2.2_T1; - * @section: 11.5.3, 8.6.2.6; - * @assertion: Operator x % y uses [[Default Value]]; - * @description: If Type(value) is Object, evaluate ToPrimitive(value, Number); - */ - -//CHECK#1 -if ({valueOf: function() {return 1}} % 2 !== 1) { - $ERROR('#1: {valueOf: function() {return 1}} % 2 === 1. Actual: ' + ({valueOf: function() {return 1}} % 2)); -} - -//CHECK#2 -if ({valueOf: function() {return 1}, toString: function() {return 0}} % 2 !== 1) { - $ERROR('#2: {valueOf: function() {return 1}, toString: function() {return 0}} % 2 === 1. Actual: ' + ({valueOf: function() {return 1}, toString: function() {return 0}} % 2)); -} - -//CHECK#3 -if ({valueOf: function() {return 1}, toString: function() {return {}}} % 2 !== 1) { - $ERROR('#3: {valueOf: function() {return 1}, toString: function() {return {}}} % 2 === 1. Actual: ' + ({valueOf: function() {return 1}, toString: function() {return {}}} % 2)); -} - -//CHECK#4 -try { - if ({valueOf: function() {return 1}, toString: function() {throw "error"}} % 2 !== 1) { - $ERROR('#4.1: {valueOf: function() {return 1}, toString: function() {throw "error"}} % 2 === 1. Actual: ' + ({valueOf: function() {return 1}, toString: function() {throw "error"}} % 2)); - } -} -catch (e) { - if (e === "error") { - $ERROR('#4.2: {valueOf: function() {return 1}, toString: function() {throw "error"}} % 2 not throw "error"'); - } else { - $ERROR('#4.3: {valueOf: function() {return 1}, toString: function() {throw "error"}} % 2 not throw Error. Actual: ' + (e)); - } -} - -//CHECK#5 -if (1 % {toString: function() {return 2}} !== 1) { - $ERROR('#5: 1 % {toString: function() {return 2}} === 1. Actual: ' + (1 % {toString: function() {return 2}})); -} - -//CHECK#6 -if (1 % {valueOf: function() {return {}}, toString: function() {return 2}} !== 1) { - $ERROR('#6: 1 % {valueOf: function() {return {}}, toString: function() {return 2}} === 1. Actual: ' + (1 % {valueOf: function() {return {}}, toString: function() {return 2}})); -} - -//CHECK#7 -try { - 1 % {valueOf: function() {throw "error"}, toString: function() {return 2}}; - $ERROR('#7.1: 1 % {valueOf: function() {throw "error"}, toString: function() {return 2}} throw "error". Actual: ' + (1 % {valueOf: function() {throw "error"}, toString: function() {return 2}})); -} -catch (e) { - if (e !== "error") { - $ERROR('#7.2: 1 % {valueOf: function() {throw "error"}, toString: function() {return 2}} throw "error". Actual: ' + (e)); - } -} - -//CHECK#8 -try { - 1 % {valueOf: function() {return {}}, toString: function() {return {}}}; - $ERROR('#8.1: 1 % {valueOf: function() {return {}}, toString: function() {return {}}} throw TypeError. Actual: ' + (1 % {valueOf: function() {return {}}, toString: function() {return {}}})); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#8.2: 1 % {valueOf: function() {return {}}, toString: function() {return {}}} throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A2.3_T1.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A2.3_T1.js deleted file mode 100644 index 020b35aba..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A2.3_T1.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.3_A2.3_T1; - * @section: 11.5.3; - * @assertion: ToNumber(first expression) is called first, and then ToNumber(second expression); - * @description: Checking with "throw"; -*/ - -//CHECK#1 -var x = { valueOf: function () { throw "x"; } }; -var y = { valueOf: function () { throw "y"; } }; -try { - x % y; - $ERROR('#1.1: var x = { valueOf: function () { throw "x"; } }; var y = { valueOf: function () { throw "y"; } }; x % y throw "x". Actual: ' + (x % y)); -} catch (e) { - if (e === "y") { - $ERROR('#1.2: ToNumber(first expression) is called first, and then ToNumber(second expression)'); - } else { - if (e !== "x") { - $ERROR('#1.3: var x = { valueOf: function () { throw "x"; } }; var y = { valueOf: function () { throw "y"; } }; x % y throw "x". Actual: ' + (e)); - } - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A2.4_T1.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A2.4_T1.js deleted file mode 100644 index db2bd5ef9..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A2.4_T1.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.3_A2.4_T1; - * @section: 11.5.3; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with "="; -*/ - -//CHECK#1 -var x = 0; -if ((x = 1) % x !== 0) { - $ERROR('#1: var x = 0; (x = 1) % x === 0. Actual: ' + ((x = 1) % x)); -} - -//CHECK#2 -var x = 1; -if (x % (x = 2) !== 1) { - $ERROR('#2: var x = 1; x % (x = 2) === 1. Actual: ' + (x % (x = 2))); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A2.4_T2.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A2.4_T2.js deleted file mode 100644 index 32a86260f..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A2.4_T2.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.3_A2.4_T2; - * @section: 11.5.3; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with "throw"; -*/ - -//CHECK#1 -var x = function () { throw "x"; }; -var y = function () { throw "y"; }; -try { - x() % y(); - $ERROR('#1.1: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() % y() throw "x". Actual: ' + (x() % y())); -} catch (e) { - if (e === "y") { - $ERROR('#1.2: First expression is evaluated first, and then second expression'); - } else { - if (e !== "x") { - $ERROR('#1.3: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() % y() throw "x". Actual: ' + (e)); - } - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A2.4_T3.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A2.4_T3.js deleted file mode 100644 index dc8dbb05f..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A2.4_T3.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.3_A2.4_T3; - * @section: 11.5.3; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with undeclarated variables; -*/ - -//CHECK#1 -try { - x % (x = 1); - $ERROR('#1.1: x % (x = 1) throw ReferenceError. Actual: ' + (x % (x = 1))); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: x % (x = 1) throw ReferenceError. Actual: ' + (e)); - } -} - -//CHECK#2 -if ((y = 1) % y !== 0) { - $ERROR('#2: (y = 1) % y === 0. Actual: ' + ((y = 1) % y)); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A3_T1.1.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A3_T1.1.js deleted file mode 100644 index c84322135..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A3_T1.1.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.3_A3_T1.1; - * @section: 11.5.3; - * @assertion: Operator x % y returns ToNumber(x) % ToNumber(y); - * @description: Type(x) and Type(y) vary between primitive boolean and Boolean object; - */ - -//CHECK#1 -if (true % true !== 0) { - $ERROR('#1: true % true === 0. Actual: ' + (true % true)); -} - -//CHECK#2 -if (new Boolean(true) % true !== 0) { - $ERROR('#2: new Boolean(true) % true === 0. Actual: ' + (new Boolean(true) % true)); -} - -//CHECK#3 -if (true % new Boolean(true) !== 0) { - $ERROR('#3: true % new Boolean(true) === 0. Actual: ' + (true % new Boolean(true))); -} - -//CHECK#4 -if (new Boolean(true) % new Boolean(true) !== 0) { - $ERROR('#4: new Boolean(true) % new Boolean(true) === 0. Actual: ' + (new Boolean(true) % new Boolean(true))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A3_T1.2.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A3_T1.2.js deleted file mode 100644 index c9102d222..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A3_T1.2.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.3_A3_T1.2; - * @section: 11.5.3; - * @assertion: Operator x % y returns ToNumber(x) % ToNumber(y); - * @description: Type(x) and Type(y) vary between primitive number and Number object; -*/ - -//CHECK#1 -if (1 % 1 !== 0) { - $ERROR('#1: 1 % 1 === 0. Actual: ' + (1 % 1)); -} - -//CHECK#2 -if (new Number(1) % 1 !== 0) { - $ERROR('#2: new Number(1) % 1 === 0. Actual: ' + (new Number(1) % 1)); -} - -//CHECK#3 -if (1 % new Number(1) !== 0) { - $ERROR('#3: 1 % new Number(1) === 0. Actual: ' + (1 % new Number(1))); -} - -//CHECK#4 -if (new Number(1) % new Number(1) !== 0) { - $ERROR('#4: new Number(1) % new Number(1) === 0. Actual: ' + (new Number(1) % new Number(1))); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A3_T1.3.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A3_T1.3.js deleted file mode 100644 index 911b28a84..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A3_T1.3.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.3_A3_T1.3; - * @section: 11.5.3; - * @assertion: Operator x % y returns ToNumber(x) % ToNumber(y); - * @description: Type(x) and Type(y) vary between primitive string and String object; -*/ - -//CHECK#1 -if ("1" % "1" !== 0) { - $ERROR('#1: "1" % "1" === 0. Actual: ' + ("1" % "1")); -} - -//CHECK#2 -if (new String("1") % "1" !== 0) { - $ERROR('#2: new String("1") % "1" === 0. Actual: ' + (new String("1") % "1")); -} - -//CHECK#3 -if ("1" % new String("1") !== 0) { - $ERROR('#3: "1" % new String("1") === 0. Actual: ' + ("1" % new String("1"))); -} - -//CHECK#4 -if (new String("1") % new String("1") !== 0) { - $ERROR('#4: new String("1") % new String("1") === 0. Actual: ' + (new String("1") % new String("1"))); -} - -//CHECK#5 -if (isNaN("x" % "1") !== true) { - $ERROR('#5: "x" % "1" === Not-a-Number. Actual: ' + ("x" % "1")); -} - -//CHECK#6 -if (isNaN("1" % "x") !== true) { - $ERROR('#6: "1" % "x" === Not-a-Number. Actual: ' + ("1" % "x")); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A3_T1.4.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A3_T1.4.js deleted file mode 100644 index 52cfb6fe0..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A3_T1.4.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.3_A3_T1.4; - * @section: 11.5.3; - * @assertion: Operator x % y returns ToNumber(x) % ToNumber(y); - * @description: Type(x) and Type(y) vary between Null and Undefined; - */ - -//CHECK#1 -if (isNaN(null % undefined) !== true) { - $ERROR('#1: null % undefined === Not-a-Number. Actual: ' + (null % undefined)); -} - -//CHECK#2 -if (isNaN(undefined % null) !== true) { - $ERROR('#2: undefined % null === Not-a-Number. Actual: ' + (undefined % null)); -} - -//CHECK#3 -if (isNaN(undefined % undefined) !== true) { - $ERROR('#3: undefined % undefined === Not-a-Number. Actual: ' + (undefined % undefined)); -} - -//CHECK#4 -if (isNaN(null % null) !== true) { - $ERROR('#4: null % null === Not-a-Number. Actual: ' + (null % null)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A3_T1.5.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A3_T1.5.js deleted file mode 100644 index f92f72379..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A3_T1.5.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.3_A3_T1.5; - * @section: 11.5.3; - * @assertion: Operator x % y returns ToNumber(x) % ToNumber(y); - * @description: Type(x) and Type(y) vary between Object object and Function object; - */ - -//CHECK#1 -if (isNaN({} % function(){return 1}) !== true) { - $ERROR('#1: {} % function(){return 1} === Not-a-Number. Actual: ' + ({} % function(){return 1})); -} - -//CHECK#2 -if (isNaN(function(){return 1} % {}) !== true) { - $ERROR('#2: function(){return 1} % {} === Not-a-Number. Actual: ' + (function(){return 1} % {})); -} - -//CHECK#3 -if (isNaN(function(){return 1} % function(){return 1}) !== true) { - $ERROR('#3: function(){return 1} % function(){return 1} === Not-a-Number. Actual: ' + (function(){return 1} % function(){return 1})); -} - -//CHECK#4 -if (isNaN({} % {}) !== true) { - $ERROR('#4: {} % {} === Not-a-Number. Actual: ' + ({} % {})); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A3_T2.1.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A3_T2.1.js deleted file mode 100644 index cca4f1320..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A3_T2.1.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.3_A3_T2.1; - * @section: 11.5.3; - * @assertion: Operator x % y returns ToNumber(x) % ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Boolean (primitive and object); -*/ - -//CHECK#1 -if (true % 1 !== 0) { - $ERROR('#1: true % 1 === 0. Actual: ' + (true % 1)); -} - -//CHECK#2 -if (1 % true !== 0) { - $ERROR('#2: 1 % true === 0. Actual: ' + (1 % true)); -} - -//CHECK#3 -if (new Boolean(true) % 1 !== 0) { - $ERROR('#3: new Boolean(true) % 1 === 0. Actual: ' + (new Boolean(true) % 1)); -} - -//CHECK#4 -if (1 % new Boolean(true) !== 0) { - $ERROR('#4: 1 % new Boolean(true) === 0. Actual: ' + (1 % new Boolean(true))); -} - -//CHECK#5 -if (true % new Number(1) !== 0) { - $ERROR('#5: true % new Number(1) === 0. Actual: ' + (true % new Number(1))); -} - -//CHECK#6 -if (new Number(1) % true !== 0) { - $ERROR('#6: new Number(1) % true === 0. Actual: ' + (new Number(1) % true)); -} - -//CHECK#7 -if (new Boolean(true) % new Number(1) !== 0) { - $ERROR('#7: new Boolean(true) % new Number(1) === 0. Actual: ' + (new Boolean(true) % new Number(1))); -} - -//CHECK#8 -if (new Number(1) % new Boolean(true) !== 0) { - $ERROR('#8: new Number(1) % new Boolean(true) === 0. Actual: ' + (new Number(1) % new Boolean(true))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A3_T2.2.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A3_T2.2.js deleted file mode 100644 index 913ae9a87..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A3_T2.2.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.3_A3_T2.2; - * @section: 11.5.3; - * @assertion: Operator x % y returns ToNumber(x) % ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and String (primitive and object); -*/ - -//CHECK#1 -if ("1" % 1 !== 0) { - $ERROR('#1: "1" % 1 === 0. Actual: ' + ("1" % 1)); -} - -//CHECK#2 -if (1 % "1" !== 0) { - $ERROR('#2: 1 % "1" === 0. Actual: ' + (1 % "1")); -} - -//CHECK#3 -if (new String("1") % 1 !== 0) { - $ERROR('#3: new String("1") % 1 === 0. Actual: ' + (new String("1") % 1)); -} - -//CHECK#4 -if (1 % new String("1") !== 0) { - $ERROR('#4: 1 % new String("1") === 0. Actual: ' + (1 % new String("1"))); -} - -//CHECK#5 -if ("1" % new Number(1) !== 0) { - $ERROR('#5: "1" % new Number(1) === 0. Actual: ' + ("1" % new Number(1))); -} - -//CHECK#6 -if (new Number(1) % "1" !== 0) { - $ERROR('#6: new Number(1) % "1" === 0. Actual: ' + (new Number(1) % "1")); -} - -//CHECK#7 -if (new String("1") % new Number(1) !== 0) { - $ERROR('#7: new String("1") % new Number(1) === 0. Actual: ' + (new String("1") % new Number(1))); -} - -//CHECK#8 -if (new Number(1) % new String("1") !== 0) { - $ERROR('#8: new Number(1) % new String("1") === 0. Actual: ' + (new Number(1) % new String("1"))); -} - -//CHECK#9 -if (isNaN("x" % 1) !== true) { - $ERROR('#9: "x" % 1 === Not-a-Number. Actual: ' + ("x" % 1)); -} - -//CHECK#10 -if (isNaN(1 % "x") !== true) { - $ERROR('#10: 1 % "x" === Not-a-Number. Actual: ' + (1 % "x")); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A3_T2.3.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A3_T2.3.js deleted file mode 100644 index a9b9eb3b2..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A3_T2.3.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.3_A3_T2.3; - * @section: 11.5.3; - * @assertion: Operator x % y returns ToNumber(x) % ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Null; - */ - -//CHECK#1 -if (isNaN(1 % null) !== true) { - $ERROR('#1: 1 % null === Not-a-Number. Actual: ' + (1 % null)); -} - -//CHECK#2 -if (null % 1 !== 0) { - $ERROR('#2: null % 1 === 0. Actual: ' + (null % 1)); -} - -//CHECK#3 -if (isNaN(new Number(1) % null) !== true) { - $ERROR('#3: new Number(1) % null === Not-a-Number. Actual: ' + (new Number(1) % null)); -} - -//CHECK#4 -if (null % new Number(1) !== 0) { - $ERROR('#4: null % new Number(1) === 0. Actual: ' + (null % new Number(1))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A3_T2.4.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A3_T2.4.js deleted file mode 100644 index 3b9cc04ac..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A3_T2.4.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.3_A3_T2.4; - * @section: 11.5.3; - * @assertion: Operator x % y returns ToNumber(x) % ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Undefined; - */ - -//CHECK#1 -if (isNaN(1 % undefined) !== true) { - $ERROR('#1: 1 % undefined === Not-a-Number. Actual: ' + (1 % undefined)); -} - -//CHECK#2 -if (isNaN(undefined % 1) !== true) { - $ERROR('#2: undefined % 1 === Not-a-Number. Actual: ' + (undefined % 1)); -} - -//CHECK#3 -if (isNaN(new Number(1) % undefined) !== true) { - $ERROR('#3: new Number(1) % undefined === Not-a-Number. Actual: ' + (new Number(1) % undefined)); -} - -//CHECK#4 -if (isNaN(undefined % new Number(1)) !== true) { - $ERROR('#4: undefined % new Number(1) === Not-a-Number. Actual: ' + (undefined % new Number(1))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A3_T2.5.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A3_T2.5.js deleted file mode 100644 index 36384b748..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A3_T2.5.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.3_A3_T2.5; - * @section: 11.5.3; - * @assertion: Operator x % y returns ToNumber(x) % ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between String (primitive or object) and Boolean (primitive and object); -*/ - -//CHECK#1 -if (true % "1" !== 0) { - $ERROR('#1: true % "1" === 0. Actual: ' + (true % "1")); -} - -//CHECK#2 -if ("1" % true !== 0) { - $ERROR('#2: "1" % true === 0. Actual: ' + ("1" % true)); -} - -//CHECK#3 -if (new Boolean(true) % "1" !== 0) { - $ERROR('#3: new Boolean(true) % "1" === 0. Actual: ' + (new Boolean(true) % "1")); -} - -//CHECK#4 -if ("1" % new Boolean(true) !== 0) { - $ERROR('#4: "1" % new Boolean(true) === 0. Actual: ' + ("1" % new Boolean(true))); -} - -//CHECK#5 -if (true % new String("1") !== 0) { - $ERROR('#5: true % new String("1") === 0. Actual: ' + (true % new String("1"))); -} - -//CHECK#6 -if (new String("1") % true !== 0) { - $ERROR('#6: new String("1") % true === 0. Actual: ' + (new String("1") % true)); -} - -//CHECK#7 -if (new Boolean(true) % new String("1") !== 0) { - $ERROR('#7: new Boolean(true) % new String("1") === 0. Actual: ' + (new Boolean(true) % new String("1"))); -} - -//CHECK#8 -if (new String("1") % new Boolean(true) !== 0) { - $ERROR('#8: new String("1") % new Boolean(true) === 0. Actual: ' + (new String("1") % new Boolean(true))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A3_T2.6.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A3_T2.6.js deleted file mode 100644 index 7f68dd47c..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A3_T2.6.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.3_A3_T2.6; - * @section: 11.5.3; - * @assertion: Operator x % y returns ToNumber(x) % ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between String (primitive or object) and Undefined; - */ - -//CHECK#1 -if (isNaN("1" % undefined) !== true) { - $ERROR('#1: "1" % undefined === Not-a-Number. Actual: ' + ("1" % undefined)); -} - -//CHECK#2 -if (isNaN(undefined % "1") !== true) { - $ERROR('#2: undefined % "1" === Not-a-Number. Actual: ' + (undefined % "1")); -} - -//CHECK#3 -if (isNaN(new String("1") % undefined) !== true) { - $ERROR('#3: new String("1") % undefined === Not-a-Number. Actual: ' + (new String("1") % undefined)); -} - -//CHECK#4 -if (isNaN(undefined % new String("1")) !== true) { - $ERROR('#4: undefined % new String("1") === Not-a-Number. Actual: ' + (undefined % new String("1"))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A3_T2.7.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A3_T2.7.js deleted file mode 100644 index 2d1a269fe..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A3_T2.7.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.3_A3_T2.7; - * @section: 11.5.3; - * @assertion: Operator x % y returns ToNumber(x) % ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between String (primitive or object) and Null; - */ - -//CHECK#1 -if (isNaN("1" % null) !== true) { - $ERROR('#1: "1" % null === Not-a-Number. Actual: ' + ("1" % null)); -} - -//CHECK#2 -if (null % "1" !== 0) { - $ERROR('#2: null % "1" === 0. Actual: ' + (null % "1")); -} - -//CHECK#3 -if (isNaN(new String("1") % null) !== true) { - $ERROR('#3: new String("1") % null === Not-a-Number. Actual: ' + (new String("1") % null)); -} - -//CHECK#4 -if (null % new String("1") !== 0) { - $ERROR('#4: null % new String("1") === 0. Actual: ' + (null % new String("1"))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A3_T2.8.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A3_T2.8.js deleted file mode 100644 index 329ec0b55..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A3_T2.8.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.3_A3_T2.8; - * @section: 11.5.3; - * @assertion: Operator x % y returns ToNumber(x) % ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Undefined; - */ - -//CHECK#1 -if (isNaN(true % undefined) !== true) { - $ERROR('#1: true % undefined === Not-a-Number. Actual: ' + (true % undefined)); -} - -//CHECK#2 -if (isNaN(undefined % true) !== true) { - $ERROR('#2: undefined % true === Not-a-Number. Actual: ' + (undefined % true)); -} - -//CHECK#3 -if (isNaN(new Boolean(true) % undefined) !== true) { - $ERROR('#3: new Boolean(true) % undefined === Not-a-Number. Actual: ' + (new Boolean(true) % undefined)); -} - -//CHECK#4 -if (isNaN(undefined % new Boolean(true)) !== true) { - $ERROR('#4: undefined % new Boolean(true) === Not-a-Number. Actual: ' + (undefined % new Boolean(true))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A3_T2.9.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A3_T2.9.js deleted file mode 100644 index 60d429368..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A3_T2.9.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.3_A3_T2.9; - * @section: 11.5.3; - * @assertion: Operator x % y returns ToNumber(x) % ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Null; - */ - -//CHECK#1 -if (isNaN(true % null) !== true) { - $ERROR('#1: true % null === Not-a-Number. Actual: ' + (true % null)); -} - -//CHECK#2 -if (null % true !== 0) { - $ERROR('#2: null % true === 0. Actual: ' + (null % true)); -} - -//CHECK#3 -if (isNaN(new Boolean(true) % null) !== true) { - $ERROR('#3: new Boolean(true) % null === Not-a-Number. Actual: ' + (new Boolean(true) % null)); -} - -//CHECK#4 -if (null % new Boolean(true) !== 0) { - $ERROR('#4: null % new Boolean(true) === 0. Actual: ' + (null % new Boolean(true))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A4_T1.1.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A4_T1.1.js deleted file mode 100644 index a1c5de927..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A4_T1.1.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.3_A4_T1.1; - * @section: 11.5.3; - * @assertion: The result of a ECMAScript floating-point remainder operation is determined by the rules of IEEE arithmetics; - * @description: If either operand is NaN, the result is NaN; - */ - -//CHECK#1 -if (isNaN(Number.NaN % Number.NaN) !== true) { - $ERROR('#1: NaN % NaN === Not-a-Number. Actual: ' + (NaN % NaN)); -} - -//CHECK#2 -if (isNaN(Number.NaN % +0) !== true) { - $ERROR('#2: NaN % +0 === Not-a-Number. Actual: ' + (NaN % +0)); -} - -//CHECK#3 -if (isNaN(Number.NaN % -0) !== true) { - $ERROR('#3: NaN % -0 === Not-a-Number. Actual: ' + (NaN % -0)); -} - -//CHECK#4 -if (isNaN(Number.NaN % Number.POSITIVE_INFINITY) !== true) { - $ERROR('#4: NaN % Infinity === Not-a-Number. Actual: ' + (NaN % Infinity)); -} - -//CHECK#5 -if (isNaN(Number.NaN % Number.NEGATIVE_INFINITY) !== true) { - $ERROR('#5: NaN % -Infinity === Not-a-Number. Actual: ' + (NaN % -Infinity)); -} - -//CHECK#6 -if (isNaN(Number.NaN % Number.MAX_VALUE) !== true) { - $ERROR('#6: NaN % Number.MAX_VALUE === Not-a-Number. Actual: ' + (NaN % Number.MAX_VALUE)); -} - -//CHECK#7 -if (isNaN(Number.NaN % Number.MIN_VALUE) !== true) { - $ERROR('#7: NaN % Number.MIN_VALUE === Not-a-Number. Actual: ' + (NaN % Number.MIN_VALUE)); -} - -//CHECK#8 -if (isNaN(Number.NaN % 1) !== true) { - $ERROR('#8: NaN % 1 === Not-a-Number. Actual: ' + (NaN % 1)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A4_T1.2.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A4_T1.2.js deleted file mode 100644 index 4cf8777e0..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A4_T1.2.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.3_A4_T1.2; - * @section: 11.5.3; - * @assertion: The result of a ECMAScript floating-point remainder operation is determined by the rules of IEEE arithmetics; - * @description: If either operand is NaN, the result is NaN; - */ - -//CHECK#1 -if (isNaN(Number.NaN % Number.NaN) !== true) { - $ERROR('#1: NaN % NaN === Not-a-Number. Actual: ' + (NaN % NaN)); -} - -//CHECK#2 -if (isNaN(+0 % Number.NaN) !== true) { - $ERROR('#2: +0 % NaN === Not-a-Number. Actual: ' + (+0 % NaN)); -} - -//CHECK#3 -if (isNaN(-0 % Number.NaN) !== true) { - $ERROR('#3: -0 % NaN === Not-a-Number. Actual: ' + (-0 % NaN)); -} - -//CHECK#4 -if (isNaN(Number.POSITIVE_INFINITY % Number.NaN) !== true) { - $ERROR('#4: Infinity % NaN === Not-a-Number. Actual: ' + (Infinity % NaN)); -} - -//CHECK#5 -if (isNaN(Number.NEGATIVE_INFINITY % Number.NaN) !== true) { - $ERROR('#5: -Infinity % NaN === Not-a-Number. Actual: ' + ( -Infinity % NaN)); -} - -//CHECK#6 -if (isNaN(Number.MAX_VALUE % Number.NaN) !== true) { - $ERROR('#6: Number.MAX_VALUE % NaN === Not-a-Number. Actual: ' + (Number.MAX_VALUE % NaN)); -} - -//CHECK#7 -if (isNaN(Number.MIN_VALUE % Number.NaN) !== true) { - $ERROR('#7: Number.MIN_VALUE % NaN === Not-a-Number. Actual: ' + (Number.MIN_VALUE % NaN)); -} - -//CHECK#8 -if (isNaN(1 % Number.NaN) !== true) { - $ERROR('#8: 1 % NaN === Not-a-Number. Actual: ' + (1 % NaN)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A4_T2.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A4_T2.js deleted file mode 100644 index 8cd1a59e0..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A4_T2.js +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.3_A4_T2; - * @section: 11.5.3; - * @assertion: The result of a ECMAScript floating-point remainder operation is determined by the rules of IEEE arithmetics; - * @description: The sign of the finite non-zero value result equals the sign of the divided; - */ - -//CHECK#1 -if (1 % 1 !== 0) { - $ERROR('#1.1: 1 % 1 === 0. Actual: ' + (1 % 1)); -} else { - if (1 / (1 % 1) !== Number.POSITIVE_INFINITY) { - $ERROR('#1.2: 1 % 1 === + 0. Actual: -0'); - } -} - -//CHECK#2 -if (-1 % -1 !== -0) { - $ERROR('#2.1: -1 % -1 === 0. Actual: ' + (-1 % -1)); -} else { - if (1 / (-1 % -1) !== Number.NEGATIVE_INFINITY) { - $ERROR('#2.2: -1 % -1 === - 0. Actual: +0'); - } -} - -//CHECK#3 -if (-1 % 1 !== -0) { - $ERROR('#3.1: -1 % 1 === 0. Actual: ' + (-1 % 1)); -} else { - if (1 / (-1 % 1) !== Number.NEGATIVE_INFINITY) { - $ERROR('#3.2: -1 % 1 === - 0. Actual: +0'); - } -} - -//CHECK#4 -if (1 % -1 !== 0) { - $ERROR('#4.1: 1 % -1 === 0. Actual: ' + (1 % -1)); -} else { - if (1 / (1 % -1) !== Number.POSITIVE_INFINITY) { - $ERROR('#4.2: 1 % -1 === + 0. Actual: -0'); - } -} - -//CHECK#5 -if (101 % 51 !== 50) { - $ERROR('#5: 101 % 51 === 50. Actual: ' + (101 % 51)); -} - -//CHECK#6 -if (101 % -51 !== 50) { - $ERROR('#6: 101 % -51 === 50. Actual: ' + (101 % -51)); -} - -//CHECK#7 -if (-101 % 51 !== -50) { - $ERROR('#7: -101 % 51 === -50. Actual: ' + (-101 % 51)); -} - -//CHECK#8 -if (-101 % -51 !== -50) { - $ERROR('#8: -101 % -51 === -50. Actual: ' + (-101 % -51)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A4_T3.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A4_T3.js deleted file mode 100644 index e7fc9f3d2..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A4_T3.js +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.3_A4_T3; - * @section: 11.5.3; - * @assertion: The result of a ECMAScript floating-point remainder operation is determined by the rules of IEEE arithmetics; - * @description: If the dividend is an infinity results is NaN; - */ - -//CHECK#1 -if (isNaN(Number.NEGATIVE_INFINITY % Number.POSITIVE_INFINITY) !== true) { - $ERROR('#1: -Infinity % Infinity === Not-a-Number. Actual: ' + (-Infinity % Infinity)); -} - -//CHECK#2 -if (isNaN(Number.NEGATIVE_INFINITY % Number.NEGATIVE_INFINITY) !== true) { - $ERROR('#2: -Infinity % -Infinity === Not-a-Number. Actual: ' + (-Infinity % -Infinity)); -} - -//CHECK#3 -if (isNaN(Number.POSITIVE_INFINITY % Number.POSITIVE_INFINITY) !== true) { - $ERROR('#3: Infinity % Infinity === Not-a-Number. Actual: ' + (Infinity % Infinity)); -} - -//CHECK#4 -if (isNaN(Number.POSITIVE_INFINITY % Number.NEGATIVE_INFINITY) !== true) { - $ERROR('#4: Infinity % -Infinity === Not-a-Number. Actual: ' + (Infinity % -Infinity)); -} - -//CHECK#5 -if (isNaN(Number.NEGATIVE_INFINITY % 1) !== true) { - $ERROR('#5: Infinity % 1 === Not-a-Number. Actual: ' + (Infinity % 1)); -} - -//CHECK#6 -if (isNaN(Number.NEGATIVE_INFINITY % -1) !== true) { - $ERROR('#6: -Infinity % -1 === Not-a-Number. Actual: ' + (-Infinity % -1)); -} - -//CHECK#7 -if (isNaN(Number.POSITIVE_INFINITY % 1) !== true) { - $ERROR('#7: Infinity % 1 === Not-a-Number. Actual: ' + (Infinity % 1)); -} - -//CHECK#8 -if (isNaN(Number.POSITIVE_INFINITY % -1) !== true) { - $ERROR('#8: Infinity % -1 === Not-a-Number. Actual: ' + (Infinity % -1)); -} - -//CHECK#9 -if (isNaN(Number.NEGATIVE_INFINITY % Number.MAX_VALUE) !== true) { - $ERROR('#9: Infinity % Number.MAX_VALUE === Not-a-Number. Actual: ' + (Infinity % Number.MAX_VALUE)); -} - -//CHECK#10 -if (isNaN(Number.NEGATIVE_INFINITY % -Number.MAX_VALUE) !== true) { - $ERROR('#10: -Infinity % -Number.MAX_VALUE === Not-a-Number. Actual: ' + (-Infinity % -Number.MAX_VALUE)); -} - -//CHECK#11 -if (isNaN(Number.POSITIVE_INFINITY % Number.MAX_VALUE) !== true) { - $ERROR('#11: Infinity % Number.MAX_VALUE === Not-a-Number. Actual: ' + (Infinity % Number.MAX_VALUE)); -} - -//CHECK#12 -if (isNaN(Number.POSITIVE_INFINITY % -Number.MAX_VALUE) !== true) { - $ERROR('#12: Infinity % -Number.MAX_VALUE === Not-a-Number. Actual: ' + (Infinity % -Number.MAX_VALUE)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A4_T4.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A4_T4.js deleted file mode 100644 index f0405f3b8..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A4_T4.js +++ /dev/null @@ -1,89 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.3_A4_T4; - * @section: 11.5.3; - * @assertion: The result of a ECMAScript floating-point remainder operation is determined by the rules of IEEE arithmetics; - * @description: If the divisor is zero results is NaN; - */ - -//CHECK#1 -if (isNaN(-0 % 0) !== true) { - $ERROR('#1: -0 % 0 === Not-a-Number. Actual: ' + (-0 % 0)); -} - -//CHECK#2 -if (isNaN(-0 % -0) !== true) { - $ERROR('#2: -0 % -0 === Not-a-Number. Actual: ' + (-0 % -0)); -} - -//CHECK#3 -if (isNaN(0 % 0) !== true) { - $ERROR('#3: 0 % 0 === Not-a-Number. Actual: ' + (0 % 0)); -} - -//CHECK#4 -if (isNaN(0 % -0) !== true) { - $ERROR('#4: 0 % -0 === Not-a-Number. Actual: ' + (0 % -0)); -} - -//CHECK#5 -if (isNaN(-1 % 0) !== true) { - $ERROR('#5: 1 % 0 === Not-a-Number. Actual: ' + (1 % 0)); -} - -//CHECK#6 -if (isNaN(-1 % -0) !== true) { - $ERROR('#6: -1 % -0 === Not-a-Number. Actual: ' + (-1 % -0)); -} - -//CHECK#7 -if (isNaN(1 % 0) !== true) { - $ERROR('#7: 1 % 0 === Not-a-Number. Actual: ' + (1 % 0)); -} - -//CHECK#8 -if (isNaN(1 % -0) !== true) { - $ERROR('#8: 1 % -0 === Not-a-Number. Actual: ' + (1 % -0)); -} - -//CHECK#9 -if (isNaN(Number.NEGATIVE_INFINITY % 0) !== true) { - $ERROR('#9: Infinity % 0 === Not-a-Number. Actual: ' + (Infinity % 0)); -} - -//CHECK#10 -if (isNaN(Number.NEGATIVE_INFINITY % -0) !== true) { - $ERROR('#10: -Infinity % -0 === Not-a-Number. Actual: ' + (-Infinity % -0)); -} - -//CHECK#11 -if (isNaN(Number.POSITIVE_INFINITY % 0) !== true) { - $ERROR('#11: Infinity % 0 === Not-a-Number. Actual: ' + (Infinity % 0)); -} - -//CHECK#12 -if (isNaN(Number.POSITIVE_INFINITY % -0) !== true) { - $ERROR('#12: Infinity % -0 === Not-a-Number. Actual: ' + (Infinity % -0)); -} - -//CHECK#13 -if (isNaN(Number.MIN_VALUE % 0) !== true) { - $ERROR('#13: Number.MIN_VALUE % 0 === Not-a-Number. Actual: ' + (Number.MIN_VALUE % 0)); -} - -//CHECK#14 -if (isNaN(Number.MIN_VALUE % -0) !== true) { - $ERROR('#14: -Number.MIN_VALUE % -0 === Not-a-Number. Actual: ' + (-Number.MIN_VALUE % -0)); -} - -//CHECK#15 -if (isNaN(Number.MAX_VALUE % 0) !== true) { - $ERROR('#15: Number.MAX_VALUE % 0 === Not-a-Number. Actual: ' + (Number.MAX_VALUE % 0)); -} - -//CHECK#16 -if (isNaN(Number.MAX_VALUE % -0) !== true) { - $ERROR('#16: Number.MAX_VALUE % -0 === Not-a-Number. Actual: ' + (Number.MAX_VALUE % -0)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A4_T5.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A4_T5.js deleted file mode 100644 index c0b07dc11..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A4_T5.js +++ /dev/null @@ -1,103 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.3_A4_T5; - * @section: 11.5.3; - * @assertion: The result of a ECMAScript floating-point remainder operation is determined by the rules of IEEE arithmetics; - * @description: If dividend is finite and the divisor is an infinity, the result equals the dividend; - */ - -//CHECK#1 -if (1 % Number.NEGATIVE_INFINITY !== 1) { - $ERROR('#1: 1 % -Infinity === 1. Actual: ' + (1 % -Infinity)); -} -//CHECK#2 -if (1 % Number.POSITIVE_INFINITY !==1) { - $ERROR('#2: 1 % Infinity === 1. Actual: ' + (1 % Infinity)); -} - -//CHECK#3 -if (-1 % Number.POSITIVE_INFINITY !== -1) { - $ERROR('#3: -1 % Infinity === -1. Actual: ' + (-1 % Infinity)); -} - -//CHECK#4 -if (-1 % Number.NEGATIVE_INFINITY !== -1) { - $ERROR('#4: -1 % -Infinity === -1. Actual: ' + (-1 % -Infinity)); -} - -//CHECK#5 -if (0 % Number.POSITIVE_INFINITY !== 0) { - $ERROR('#5.1: 0 % Infinity === 0. Actual: ' + (0 % Infinity)); -} else { - if (1 / (0 % Number.POSITIVE_INFINITY) !== Number.POSITIVE_INFINITY) { - $ERROR('#5.2: 0 % Infinity === + 0. Actual: -0'); - } -} - -//CHECK#6 -if (0 % Number.NEGATIVE_INFINITY !== 0) { - $ERROR('#6.1: 0 % -Infinity === 0. Actual: ' + (0 % -Infinity)); -} else { - if (1 / (0 % Number.NEGATIVE_INFINITY) !== Number.POSITIVE_INFINITY) { - $ERROR('#6.2: 0 % -Infinity === + 0. Actual: -0'); - } -} - -//CHECK#7 -if (-0 % Number.POSITIVE_INFINITY !== -0) { - $ERROR('#7.1: -0 % Infinity === 0. Actual: ' + (-0 % Infinity)); -} else { - if (1 / (-0 % Number.POSITIVE_INFINITY) !== Number.NEGATIVE_INFINITY) { - $ERROR('#7.2: -0 % Infinity === - 0. Actual: +0'); - } -} - -//CHECK#8 -if (-0 % Number.NEGATIVE_INFINITY !== -0) { - $ERROR('#8.1: -0 % -Infinity === 0. Actual: ' + (-0 % -Infinity)); -} else { - if (1 / (-0 % Number.NEGATIVE_INFINITY) !== Number.NEGATIVE_INFINITY) { - $ERROR('#8.2: -0 % -Infinity === - 0. Actual: +0'); - } -} - -//CHECK#9 -if (Number.MAX_VALUE % Number.NEGATIVE_INFINITY !== Number.MAX_VALUE) { - $ERROR('#9: Number.MAX_VALUE % -Infinity === Number.MAX_VALUE. Actual: ' + (Number.MAX_VALUE % -Infinity)); -} - -//CHECK#10 -if (Number.MAX_VALUE % Number.POSITIVE_INFINITY !== Number.MAX_VALUE) { - $ERROR('#10: Number.MAX_VALUE % Infinity === Number.MAX_VALUE. Actual: ' + (Number.MAX_VALUE % Infinity)); -} - -//CHECK#11 -if (-Number.MAX_VALUE % Number.POSITIVE_INFINITY !== -Number.MAX_VALUE) { - $ERROR('#11: -Number.MAX_VALUE % Infinity === -Number.MAX_VALUE. Actual: ' + (-Number.MAX_VALUE % Infinity)); -} - -//CHECK#12 -if (-Number.MAX_VALUE % Number.NEGATIVE_INFINITY !== -Number.MAX_VALUE) { - $ERROR('#12: -Number.MAX_VALUE % -Infinity === -Number.MAX_VALUE. Actual: ' + (-Number.MAX_VALUE % -Infinity)); -} - -//CHECK#13 -if (Number.MIN_VALUE % Number.NEGATIVE_INFINITY !== Number.MIN_VALUE) { - $ERROR('#13: Number.MIN_VALUE % -Infinity === Number.MIN_VALUE. Actual: ' + (Number.MIN_VALUE % -Infinity)); -} -//CHECK#14 -if (Number.MIN_VALUE % Number.POSITIVE_INFINITY !== Number.MIN_VALUE) { - $ERROR('#14: Number.MIN_VALUE % Infinity === Number.MIN_VALUE. Actual: ' + (Number.MIN_VALUE % Infinity)); -} - -//CHECK#15 -if (-Number.MIN_VALUE % Number.POSITIVE_INFINITY !== -Number.MIN_VALUE) { - $ERROR('#15: -Number.MIN_VALUE % Infinity === -Number.MIN_VALUE. Actual: ' + (-Number.MIN_VALUE % Infinity)); -} - -//CHECK#16 -if (-Number.MIN_VALUE % Number.NEGATIVE_INFINITY !== -Number.MIN_VALUE) { - $ERROR('#16: -Number.MIN_VALUE % -Infinity === -Number.MIN_VALUE. Actual: ' + (-Number.MIN_VALUE % -Infinity)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A4_T6.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A4_T6.js deleted file mode 100644 index f6cd50a4d..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A4_T6.js +++ /dev/null @@ -1,81 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.3_A4_T6; - * @section: 11.5.3; - * @assertion: The result of a ECMAScript floating-point remainder operation is determined by the rules of IEEE arithmetics; - * @description: If dividend is a zero and the divisor is nonzero finite, the result equals the dividend; - */ - -//CHECK#1 -if (0 % 1 !== 0) { - $ERROR('#1.1: 0 % 1 === 0. Actual: ' + (0 % 1)); -} else { - if (1 / (0 % 1) !== Number.POSITIVE_INFINITY) { - $ERROR('#1.2: 0 % 1 === + 0. Actual: -0'); - } -} - -//CHECK#2 -if (0 % -1 !== 0) { - $ERROR('#2.1: 0 % -1 === 0. Actual: ' + (0 % -1)); -} else { - if (1 / (0 % -1) !== Number.POSITIVE_INFINITY) { - $ERROR('#2.2: 0 % -1 === + 0. Actual: -0'); - } -} - -//CHECK#3 -if (-0 % 1 !== -0) { - $ERROR('#3.1: -0 % 1 === 0. Actual: ' + (-0 % 1)); -} else { - if (1 / (-0 % 1) !== Number.NEGATIVE_INFINITY) { - $ERROR('#3.2: -0 % 1 === - 0. Actual: +0'); - } -} - -//CHECK#4 -if (-0 % -1 !== -0) { - $ERROR('#4.1: -0 % -1 === 0. Actual: ' + (-0 % -1)); -} else { - if (1 / (-0 % -1) !== Number.NEGATIVE_INFINITY) { - $ERROR('#4.2: 0 % -1 === - 0. Actual: +0'); - } -} - -//CHECK#5 -if (0 % Number.MAX_VALUE !== 0) { - $ERROR('#5.1: 0 % Number.MAX_VALUE === 0. Actual: ' + (0 % Number.MAX_VALUE)); -} else { - if (1 / (0 % Number.MAX_VALUE) !== Number.POSITIVE_INFINITY) { - $ERROR('#5.2: 0 % Number.MAX_VALUE === + 0. Actual: -0'); - } -} - -//CHECK#6 -if (0 % Number.MIN_VALUE !== 0) { - $ERROR('#6.1: 0 % Number.MIN_VALUE === 0. Actual: ' + (0 % Number.MIN_VALUE)); -} else { - if (1 / (0 % Number.MIN_VALUE) !== Number.POSITIVE_INFINITY) { - $ERROR('#6.2: 0 % Number.MIN_VALUE === + 0. Actual: -0'); - } -} - -//CHECK#7 -if (-0 % Number.MAX_VALUE !== -0) { - $ERROR('#7.1: -0 % Number.MAX_VALUE === 0. Actual: ' + (-0 % Number.MAX_VALUE)); -} else { - if (1 / (-0 % Number.MAX_VALUE) !== Number.NEGATIVE_INFINITY) { - $ERROR('#7.2: -0 % Number.MAX_VALUE === - 0. Actual: +0'); - } -} - -//CHECK#8 -if (-0 % Number.MIN_VALUE !== -0) { - $ERROR('#8.1: -0 % Number.MIN_VALUE === 0. Actual: ' + (-0 % Number.MIN_VALUE)); -} else { - if (1 / (-0 % Number.MIN_VALUE) !== Number.NEGATIVE_INFINITY) { - $ERROR('#8.2: 0 % Number.MIN_VALUE === - 0. Actual: +0'); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A4_T7.js b/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A4_T7.js deleted file mode 100644 index c754f3d88..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.5_Multiplicative_Operators/11.5.3_Applying_the_percent_Operator/S11.5.3_A4_T7.js +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.5.3_A4_T7; - * @section: 11.5.3, 15.8.2.9; - * @assertion: The result of a ECMAScript floating-point remainder operation is determined by the rules of IEEE arithmetics; - * @description: If operands neither an infinity, nor a zero, nor NaN, return x - truncate(x / y) * y; - */ - -function truncate(x) { - if (x > 0) { - return Math.floor(x); - } else { - return Math.ceil(x); - } -} - -//CHECK#1 -x = 1.3; -y = 1.1; -if (x % y !== 0.19999999999999996) { - $ERROR('#1: x = 1.3; y = 1.1; x % y === 0.19999999999999996. Actual: ' + (x % y)); -} - -//CHECK#2 -x = -1.3; -y = 1.1; -if (x % y !== -0.19999999999999996) { - $ERROR('#2: x = -1.3; y = 1.1; x % y === -0.19999999999999996. Actual: ' + (x % y)); -} - -//CHECK#3 -x = 1.3; -y = -1.1; -if (x % y !== 0.19999999999999996) { - $ERROR('#3: x = 1.3; y = -1.1; x % y === 0.19999999999999996. Actual: ' + (x % y)); -} - -//CHECK#4 -x = -1.3; -y = -1.1; -if (x % y !== -0.19999999999999996) { - $ERROR('#4: x = -1.3; y = -1.1; x % y === -0.19999999999999996. Actual: ' + (x % y)); -} - -//CHECK#5 -x = 1.3; -y = 1.1; -if (x % y !== x - truncate(x / y) * y) { - $ERROR('#5: x = 1.3; y = 1.1; x % y === x - truncate(x / y) * y. Actual: ' + (x % y)); -} - -//CHECK#6 -x = -1.3; -y = 1.1; -if (x % y !== x - truncate(x / y) * y) { - $ERROR('#6: x = -1.3; y = 1.1; x % y === x - truncate(x / y) * y. Actual: ' + (x % y)); -} - -//CHECK#7 -x = 1.3; -y = -1.1; -if (x % y !== x - truncate(x / y) * y) { - $ERROR('#7: x = 1.3; y = -1.1; x % y === x - truncate(x / y) * y. Actual: ' + (x % y)); -} - -//CHECK#8 -x = -1.3; -y = -1.1; -if (x % y !== x - truncate(x / y) * y) { - $ERROR('#8: x = -1.3; y = -1.1; x % y === x - truncate(x / y) * y. Actual: ' + (x % y)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A1.js b/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A1.js deleted file mode 100644 index 0f0d752ab..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A1.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.6.1_A1; -* @section: 11.6.1, 7.2, 7.3; -* @assertion: White Space and Line Terminator between AdditiveExpression and "+" or between "+" and MultiplicativeExpression are allowed; -* @description: Checking by using eval; -*/ - -//CHECK#1 -if (eval("1\u0009+\u00091") !== 2) { - $ERROR('#1: 1\\u0009+\\u00091 === 2'); -} - -//CHECK#2 -if (eval("1\u000B+\u000B1") !== 2) { - $ERROR('#2: 1\\u000B+\\u000B1 === 2'); -} - -//CHECK#3 -if (eval("1\u000C+\u000C1") !== 2) { - $ERROR('#3: 1\\u000C+\\u000C1 === 2'); -} - -//CHECK#4 -if (eval("1\u0020+\u00201") !== 2) { - $ERROR('#4: 1\\u0020+\\u00201 === 2'); -} - -//CHECK#5 -if (eval("1\u00A0+\u00A01") !== 2) { - $ERROR('#5: 1\\u00A0+\\u00A01 === 2'); -} - -//CHECK#6 -if (eval("1\u000A+\u000A1") !== 2) { - $ERROR('#6: 1\\u000A+\\u000A1 === 2'); -} - -//CHECK#7 -if (eval("1\u000D+\u000D1") !== 2) { - $ERROR('#7: 1\\u000D+\\u000D1 === 2'); -} - -//CHECK#8 -if (eval("1\u2028+\u20281") !== 2) { - $ERROR('#8: 1\\u2028+\\u20281 === 2'); -} - -//CHECK#9 -if (eval("1\u2029+\u20291") !== 2) { - $ERROR('#9: 1\\u2029+\\u20291 === 2'); -} - -//CHECK#10 -if (eval("1\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029+\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20291") !== 2) { - $ERROR('#10: 1\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029+\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20291 === 2'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A2.1_T1.js b/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A2.1_T1.js deleted file mode 100644 index 90fbe3360..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A2.1_T1.js +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.6.1_A2.1_T1; -* @section: 11.6.1; -* @assertion: Operator x + y uses GetValue; -* @description: Either Type is not Reference or GetBase is not null; -*/ - -//CHECK#1 -if (1 + 1 !== 2) { - $ERROR('#1: 1 + 1 === 2. Actual: ' + (1 + 1)); -} - -//CHECK#2 -var x = 1; -if (x + 1 !== 2) { - $ERROR('#2: var x = 1; x + 1 === 2. Actual: ' + (x + 1)); -} - -//CHECK#3 -var y = 1; -if (1 + y !== 2) { - $ERROR('#3: var y = 1; 1 + y === 2. Actual: ' + (1 + y)); -} - -//CHECK#4 -var x = 1; -var y = 1; -if (x + y !== 2) { - $ERROR('#4: var x = 1; var y = 1; x + y === 2. Actual: ' + (x + y)); -} - -//CHECK#5 -var objectx = new Object(); -var objecty = new Object(); -objectx.prop = 1; -objecty.prop = 1; -if (objectx.prop + objecty.prop !== 2) { - $ERROR('#5: var objectx = new Object(); var objecty = new Object(); objectx.prop = 1; objecty.prop = 1; objectx.prop + objecty.prop === 2. Actual: ' + (objectx.prop + objecty.prop)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A2.1_T2.js b/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A2.1_T2.js deleted file mode 100644 index e75f2b349..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A2.1_T2.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.6.1_A2.1_T2; - * @section: 11.6.1; - * @assertion: Operator x + y uses GetValue; - * @description: If GetBase(x) is null, throw ReferenceError; -*/ - -//CHECK#1 -try { - x + 1; - $ERROR('#1.1: x + 1 throw ReferenceError. Actual: ' + (x + 1)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: x + 1 throw ReferenceError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A2.1_T3.js b/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A2.1_T3.js deleted file mode 100644 index 07420f526..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A2.1_T3.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.6.1_A2.1_T3; - * @section: 11.6.1; - * @assertion: Operator x + y uses GetValue; - * @description: If GetBase(y) is null, throw ReferenceError; -*/ - -//CHECK#1 -try { - 1 + y; - $ERROR('#1.1: 1 + y throw ReferenceError. Actual: ' + (1 + y)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: 1 + y throw ReferenceError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A2.2_T1.js b/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A2.2_T1.js deleted file mode 100644 index acab2aa43..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A2.2_T1.js +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.6.1_A2.2_T1; - * @section: 11.6.1, 8.6.2.6; - * @assertion: Operator x + y uses [[Default Value]]; - * @description: If Type(value) is Object, evaluate ToPrimitive(value, Number); - */ - -//CHECK#1 -if ({valueOf: function() {return 1}} + 1 !== 2) { - $ERROR('#1: {valueOf: function() {return 1}} + 1 === 2. Actual: ' + ({valueOf: function() {return 1}} + 1)); -} - -//CHECK#2 -if ({valueOf: function() {return 1}, toString: function() {return 0}} + 1 !== 2) { - $ERROR('#2: {valueOf: function() {return 1}, toString: function() {return 0}} + 1 === 2. Actual: ' + ({valueOf: function() {return 1}, toString: function() {return 0}} + 1)); -} - -//CHECK#3 -if ({valueOf: function() {return 1}, toString: function() {return {}}} + 1 !== 2) { - $ERROR('#3: {valueOf: function() {return 1}, toString: function() {return {}}} + 1 === 2. Actual: ' + ({valueOf: function() {return 1}, toString: function() {return {}}} + 1)); -} - -//CHECK#4 -try { - if ({valueOf: function() {return 1}, toString: function() {throw "error"}} + 1 !== 2) { - $ERROR('#4.1: {valueOf: function() {return 1}, toString: function() {throw "error"}} + 1 === 2. Actual: ' + ({valueOf: function() {return 1}, toString: function() {throw "error"}} + 1)); - } -} -catch (e) { - if (e === "error") { - $ERROR('#4.2: {valueOf: function() {return 1}, toString: function() {throw "error"}} + 1 not throw "error"'); - } else { - $ERROR('#4.3: {valueOf: function() {return 1}, toString: function() {throw "error"}} + 1 not throw Error. Actual: ' + (e)); - } -} - -//CHECK#5 -if (1 + {toString: function() {return 1}} !== 2) { - $ERROR('#5: 1 + {toString: function() {return 1}} === 2. Actual: ' + (1 + {toString: function() {return 1}})); -} - -//CHECK#6 -if (1 + {valueOf: function() {return {}}, toString: function() {return 1}} !== 2) { - $ERROR('#6: 1 + {valueOf: function() {return {}}, toString: function() {return 1}} === 2. Actual: ' + (1 + {valueOf: function() {return {}}, toString: function() {return 1}})); -} - -//CHECK#7 -try { - 1 + {valueOf: function() {throw "error"}, toString: function() {return 1}}; - $ERROR('#7.1: 1 + {valueOf: function() {throw "error"}, toString: function() {return 1}} throw "error". Actual: ' + (1 + {valueOf: function() {throw "error"}, toString: function() {return 1}})); -} -catch (e) { - if (e !== "error") { - $ERROR('#7.2: 1 + {valueOf: function() {throw "error"}, toString: function() {return 1}} throw "error". Actual: ' + (e)); - } -} - -//CHECK#8 -try { - 1 + {valueOf: function() {return {}}, toString: function() {return {}}}; - $ERROR('#8.1: 1 + {valueOf: function() {return {}}, toString: function() {return {}}} throw TypeError. Actual: ' + (1 + {valueOf: function() {return {}}, toString: function() {return {}}})); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#8.2: 1 + {valueOf: function() {return {}}, toString: function() {return {}}} throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A2.2_T2.js b/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A2.2_T2.js deleted file mode 100644 index 9e85b5b9e..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A2.2_T2.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.6.1_A2.2_T2; -* @section: 11.6.1, 8.6.2.6; - * @assertion: Operator x + y uses [[Default Value]]; - * @description: If Type(value) is Date object, evaluate ToPrimitive(value, String); - */ - -//CHECK#1 -var date = new Date(); -if (date + date !== date.toString() + date.toString()) { - $ERROR('#1: var date = new Date(); date + date === date.toString() + date.toString(). Actual: ' + (date + date)); -} - -//CHECK#2 -var date = new Date(); -if (date + 0 !== date.toString() + "0") { - $ERROR('#2: var date = new Date(); date + 0 === date.toString() + "0". Actual: ' + (date + 0)); -} - -//CHECK#3 -var date = new Date(); -if (date + true !== date.toString() + "true") { - $ERROR('#3: var date = new Date(); date + true === date.toString() + "true". Actual: ' + (date + true)); -} - -//CHECK#4 -var date = new Date(); -if (date + new Object() !== date.toString() + "[object Object]") { - $ERROR('#4: var date = new Date(); date + new Object() === date.toString() + "[object Object]". Actual: ' + (date + new Object())); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A2.2_T3.js b/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A2.2_T3.js deleted file mode 100644 index 744770a78..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A2.2_T3.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.6.1_A2.2_T3; - * @section: 11.6.1, 8.6.2.6; - * @assertion: Operator x + y uses [[Default Value]]; - * @description: If Type(value) is Function, evaluate ToPrimitive(value, Number); - */ - -//CHECK#1 -function f1(){ - return 0; -} -if (f1 + 1 !== f1.toString() + 1) { - $ERROR('#1: function f1() {return 0;}; f1 + 1 === f1.toString() + 1'); -} - -//CHECK#2 -function f2(){ - return 0; -} -f2.valueOf = function() {return 1;}; -if (1 + f2 !== 1 + 1) { - $ERROR('#2: f1unction f2() {return 0;} f2.valueOf = function() {return 1;}; 1 + f2 === 1 + 1. Actual: ' + (1 + f2)); -} - -//CHECK#3 -function f3(){ - return 0; -} -f3.toString = function() {return 1;}; -if (1 + f3 !== 1 + 1) { - $ERROR('#3: f1unction f3() {return 0;} f3.toString() = function() {return 1;}; 1 + f3 === 1 + 1. Actual: ' + (1 + f3)); -} - -//CHECK#4 -function f4(){ - return 0; -} -f4.valueOf = function() {return -1;}; -f4.toString = function() {return 1;}; -if (f4 + 1 !== 1 - 1) { - $ERROR('#4: f1unction f4() {return 0;}; f2.valueOf = function() {return -1;}; f4.toString() = function() {return 1;}; f4 + 1 === 1 - 1. Actual: ' + (f4 + 1)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A2.3_T1.js b/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A2.3_T1.js deleted file mode 100644 index ad38b3def..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A2.3_T1.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.6.1_A2.3_T1; - * @section: 11.6.1; - * @assertion: ToNumber(first expression) is called first, and then ToNumber(second expression); - * @description: Checking with "throw"; -*/ - -//CHECK#1 -var x = { valueOf: function () { throw "x"; } }; -var y = { valueOf: function () { throw "y"; } }; -try { - x + y; - $ERROR('#1.1: var x = { valueOf: function () { throw "x"; } }; var y = { valueOf: function () { throw "y"; } }; x + y throw "x". Actual: ' + (x + y)); -} catch (e) { - if (e === "y") { - $ERROR('#1.2: ToNumber(first expression) is called first, and then ToNumber(second expression)'); - } else { - if (e !== "x") { - $ERROR('#1.3: var x = { valueOf: function () { throw "x"; } }; var y = { valueOf: function () { throw "y"; } }; x + y throw "x". Actual: ' + (e)); - } - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A2.4_T1.js b/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A2.4_T1.js deleted file mode 100644 index 1e1a9c021..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A2.4_T1.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.6.1_A2.4_T1; - * @section: 11.6.1; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with "="; -*/ - -//CHECK#1 -var x = 0; -if ((x = 1) + x !== 2) { - $ERROR('#1: var x = 0; (x = 1) + x === 2. Actual: ' + ((x = 1) + x)); -} - -//CHECK#2 -var x = 0; -if (x + (x = 1) !== 1) { - $ERROR('#2: var x = 0; x + (x = 1) === 1. Actual: ' + (x + (x = 1))); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A2.4_T2.js b/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A2.4_T2.js deleted file mode 100644 index de6cec880..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A2.4_T2.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.6.1_A2.4_T2; - * @section: 11.6.1; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with "throw"; -*/ - -//CHECK#1 -var x = function () { throw "x"; }; -var y = function () { throw "y"; }; -try { - x() + y(); - $ERROR('#1.1: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() + y() throw "x". Actual: ' + (x() + y())); -} catch (e) { - if (e === "y") { - $ERROR('#1.2: First expression is evaluated first, and then second expression'); - } else { - if (e !== "x") { - $ERROR('#1.3: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() + y() throw "x". Actual: ' + (e)); - } - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A2.4_T3.js b/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A2.4_T3.js deleted file mode 100644 index 5c0b13d80..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A2.4_T3.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.6.1_A2.4_T3; - * @section: 11.6.1; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with undeclarated variables; -*/ - -//CHECK#1 -try { - x + (x = 1); - $ERROR('#1.1: x + (x = 1) throw ReferenceError. Actual: ' + (x + (x = 1))); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: x + (x = 1) throw ReferenceError. Actual: ' + (e)); - } -} - -//CHECK#2 -if ((y = 1) + y !== 2) { - $ERROR('#2: (y = 1) + y === 2. Actual: ' + ((y = 1) + y)); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A3.1_T1.1.js b/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A3.1_T1.1.js deleted file mode 100644 index 36b90550f..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A3.1_T1.1.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.6.1_A3.1_T1.1; - * @section: 11.6.1; - * @assertion: If Type(Primitive(x)) is not String and Type(Primitive(y)) is not String, then operator x + y returns ToNumber(x) + ToNumber(y); - * @description: Type(Primitive(x)) and Type(Primitive(y)) vary between primitive boolean and Boolean object; - */ - -//CHECK#1 -if (true + true !== 2) { - $ERROR('#1: true + true === 2. Actual: ' + (true + true)); -} - -//CHECK#2 -if (new Boolean(true) + true !== 2) { - $ERROR('#2: new Boolean(true) + true === 2. Actual: ' + (new Boolean(true) + true)); -} - -//CHECK#3 -if (true + new Boolean(true) !== 2) { - $ERROR('#3: true + new Boolean(true) === 2. Actual: ' + (true + new Boolean(true))); -} - -//CHECK#4 -if (new Boolean(true) + new Boolean(true) !== 2) { - $ERROR('#4: new Boolean(true) + new Boolean(true) === 2. Actual: ' + (new Boolean(true) + new Boolean(true))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A3.1_T1.2.js b/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A3.1_T1.2.js deleted file mode 100644 index 0fb156c6d..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A3.1_T1.2.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.6.1_A3.1_T1.2; - * @section: 11.6.1; - * @assertion: If Type(Primitive(x)) is not String and Type(Primitive(y)) is not String, then operator x + y returns ToNumber(x) + ToNumber(y); - * @description: Type(Primitive(x)) and Type(Primitive(y)) vary between primitive number and Number object; -*/ - -//CHECK#1 -if (1 + 1 !== 2) { - $ERROR('#1: 1 + 1 === 2. Actual: ' + (1 + 1)); -} - -//CHECK#2 -if (new Number(1) + 1 !== 2) { - $ERROR('#2: new Number(1) + 1 === 2. Actual: ' + (new Number(1) + 1)); -} - -//CHECK#3 -if (1 + new Number(1) !== 2) { - $ERROR('#3: 1 + new Number(1) === 2. Actual: ' + (1 + new Number(1))); -} - -//CHECK#4 -if (new Number(1) + new Number(1) !== 2) { - $ERROR('#4: new Number(1) + new Number(1) === 2. Actual: ' + (new Number(1) + new Number(1))); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A3.1_T1.3.js b/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A3.1_T1.3.js deleted file mode 100644 index bd9329203..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A3.1_T1.3.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.6.1_A3.1_T1.3; - * @section: 11.6.1; - * @assertion: If Type(Primitive(x)) is not String and Type(Primitive(y)) is not String, then operator x + y returns ToNumber(x) + ToNumber(y); - * @description: Type(Primitive(x)) and Type(Primitive(y)) vary between Null and Undefined; - */ - -//CHECK#1 -if (isNaN(null + undefined) !== true) { - $ERROR('#1: null + undefined === Not-a-Number. Actual: ' + (null + undefined)); -} - -//CHECK#2 -if (isNaN(undefined + null) !== true) { - $ERROR('#2: undefined + null === Not-a-Number. Actual: ' + (undefined + null)); -} - -//CHECK#3 -if (isNaN(undefined + undefined) !== true) { - $ERROR('#3: undefined + undefined === Not-a-Number. Actual: ' + (undefined + undefined)); -} - -//CHECK#4 -if (null + null !== 0) { - $ERROR('#4: null + null === 0. Actual: ' + (null + null)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A3.1_T2.1.js b/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A3.1_T2.1.js deleted file mode 100644 index 402508ab4..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A3.1_T2.1.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.6.1_A3.1_T2.1; - * @section: 11.6.1; - * @assertion: If Type(Primitive(x)) is not String and Type(Primitive(y)) is not String, then operator x + y returns ToNumber(x) + ToNumber(y); - * @description: Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between Number (primitive or object) or Boolean (primitive and object); - */ - -//CHECK#1 -if (true + 1 !== 2) { - $ERROR('#1: true + 1 === 2. Actual: ' + (true + 1)); -} - -//CHECK#2 -if (1 + true !== 2) { - $ERROR('#2: 1 + true === 2. Actual: ' + (1 + true)); -} - -//CHECK#3 -if (new Boolean(true) + 1 !== 2) { - $ERROR('#3: new Boolean(true) + 1 === 2. Actual: ' + (new Boolean(true) + 1)); -} - -//CHECK#4 -if (1 + new Boolean(true) !== 2) { - $ERROR('#4: 1 + new Boolean(true) === 2. Actual: ' + (1 + new Boolean(true))); -} - -//CHECK#5 -if (true + new Number(1) !== 2) { - $ERROR('#5: true + new Number(1) === 2. Actual: ' + (true + new Number(1))); -} - -//CHECK#6 -if (new Number(1) + true !== 2) { - $ERROR('#6: new Number(1) + true === 2. Actual: ' + (new Number(1) + true)); -} - -//CHECK#7 -if (new Boolean(true) + new Number(1) !== 2) { - $ERROR('#7: new Boolean(true) + new Number(1) === 2. Actual: ' + (new Boolean(true) + new Number(1))); -} - -//CHECK#8 -if (new Number(1) + new Boolean(true) !== 2) { - $ERROR('#8: new Number(1) + new Boolean(true) === 2. Actual: ' + (new Number(1) + new Boolean(true))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A3.1_T2.2.js b/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A3.1_T2.2.js deleted file mode 100644 index 437ca4806..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A3.1_T2.2.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.6.1_A3.1_T2.2; - * @section: 11.6.1; - * @assertion: If Type(Primitive(x)) is not String and Type(Primitive(y)) is not String, then operator x + y returns ToNumber(x) + ToNumber(y); - * @description: Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between Number (primitive or object) and Null; - */ - -//CHECK#1 -if (1 + null !== 1) { - $ERROR('#1: 1 + null === 1. Actual: ' + (1 + null)); -} - -//CHECK#2 -if (null + 1 !== 1) { - $ERROR('#2: null + 1 === 1. Actual: ' + (null + 1)); -} - -//CHECK#3 -if (new Number(1) + null !== 1) { - $ERROR('#3: new Number(1) + null === 1. Actual: ' + (new Number(1) + null)); -} - -//CHECK#4 -if (null + new Number(1) !== 1) { - $ERROR('#4: null + new Number(1) === 1. Actual: ' + (null + new Number(1))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A3.1_T2.3.js b/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A3.1_T2.3.js deleted file mode 100644 index 7a237be23..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A3.1_T2.3.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.6.1_A3.1_T2.3; - * @section: 11.6.1; - * @assertion: If Type(Primitive(x)) is not String and Type(Primitive(y)) is not String, then operator x + y returns ToNumber(x) + ToNumber(y); - * @description: Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between Number (primitive or object) and Undefined; - */ - -//CHECK#1 -if (isNaN(1 + undefined) !== true) { - $ERROR('#1: 1 + undefined === Not-a-Number. Actual: ' + (1 + undefined)); -} - -//CHECK#2 -if (isNaN(undefined + 1) !== true) { - $ERROR('#2: undefined + 1 === Not-a-Number. Actual: ' + (undefined + 1)); -} - -//CHECK#3 -if (isNaN(new Number(1) + undefined) !== true) { - $ERROR('#3: new Number(1) + undefined === Not-a-Number. Actual: ' + (new Number(1) + undefined)); -} - -//CHECK#4 -if (isNaN(undefined + new Number(1)) !== true) { - $ERROR('#4: undefined + new Number(1) === Not-a-Number. Actual: ' + (undefined + new Number(1))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A3.1_T2.4.js b/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A3.1_T2.4.js deleted file mode 100644 index 7463f6892..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A3.1_T2.4.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.6.1_A3.1_T2.4; - * @section: 11.6.1; - * @assertion: If Type(Primitive(x)) is not String and Type(Primitive(y)) is not String, then operator x + y returns ToNumber(x) + ToNumber(y); - * @description: Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between Boolean (primitive or object) and Undefined; - */ - -//CHECK#1 -if (isNaN(true + undefined) !== true) { - $ERROR('#1: true + undefined === Not-a-Number. Actual: ' + (true + undefined)); -} - -//CHECK#2 -if (isNaN(undefined + true) !== true) { - $ERROR('#2: undefined + true === Not-a-Number. Actual: ' + (undefined + true)); -} - -//CHECK#3 -if (isNaN(new Boolean(true) + undefined) !== true) { - $ERROR('#3: new Boolean(true) + undefined === Not-a-Number. Actual: ' + (new Boolean(true) + undefined)); -} - -//CHECK#4 -if (isNaN(undefined + new Boolean(true)) !== true) { - $ERROR('#4: undefined + new Boolean(true) === Not-a-Number. Actual: ' + (undefined + new Boolean(true))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A3.1_T2.5.js b/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A3.1_T2.5.js deleted file mode 100644 index 2b2bb841b..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A3.1_T2.5.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.6.1_A3.1_T2.5; - * @section: 11.6.1; - * @assertion: If Type(Primitive(x)) is not String and Type(Primitive(y)) is not String, then operator x + y returns ToNumber(x) + ToNumber(y); - * @description: Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between Boolean (primitive or object) and Null; - */ - -//CHECK#1 -if (true + null !== 1) { - $ERROR('#1: true + null === 1. Actual: ' + (true + null)); -} - -//CHECK#2 -if (null + true !== 1) { - $ERROR('#2: null + true === 1. Actual: ' + (null + true)); -} - -//CHECK#3 -if (new Boolean(true) + null !== 1) { - $ERROR('#3: new Boolean(true) + null === 1. Actual: ' + (new Boolean(true) + null)); -} - -//CHECK#4 -if (null + new Boolean(true) !== 1) { - $ERROR('#4: null + new Boolean(true) === 1. Actual: ' + (null + new Boolean(true))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A3.2_T1.1.js b/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A3.2_T1.1.js deleted file mode 100644 index a3fc5912c..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A3.2_T1.1.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.6.1_A3.2_T1.1; - * @section: 11.6.1; - * @assertion: If Type(Primitive(x)) is String or Type(Primitive(y)) is String, then operator x + y returns the result of concatenating ToString(x) followed by ToString(y); - * @description: Type(Primitive(x)) and Type(Primitive(y)) vary between primitive string and String object; -*/ - -//CHECK#1 -if ("1" + "1" !== "11") { - $ERROR('#1: "1" + "1" === "11". Actual: ' + ("1" + "1")); -} - -//CHECK#2 -if (new String("1") + "1" !== "11") { - $ERROR('#2: new String("1") + "1" === "11". Actual: ' + (new String("1") + "1")); -} - -//CHECK#3 -if ("1" + new String("1") !== "11") { - $ERROR('#3: "1" + new String("1") === "11". Actual: ' + ("1" + new String("1"))); -} - -//CHECK#4 -if (new String("1") + new String("1") !== "11") { - $ERROR('#4: new String("1") + new String("1") === "11". Actual: ' + (new String("1") + new String("1"))); -} - -//CHECK#5 -if ("x" + "1" !=="x1") { - $ERROR('#5: "x" + "1" === "x1". Actual: ' + ("x" + "1")); -} - -//CHECK#6 -if ("1" + "x" !== "1x") { - $ERROR('#6: "1" + "x" === "1x". Actual: ' + ("1" + "x")); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A3.2_T1.2.js b/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A3.2_T1.2.js deleted file mode 100644 index 25e998102..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A3.2_T1.2.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.6.1_A3.2_T1.2; - * @section: 11.6.1; - * @assertion: If Type(Primitive(x)) is String or Type(Primitive(y)) is String, then operator x + y returns the result of concatenating ToString(x) followed by ToString(y); - * @description: Type(Primitive(x)) and Type(Primitive(y)) vary between Object object and Function object; - */ - -//CHECK#1 -if (({} + function(){return 1}) !== ({}.toString() + function(){return 1}.toString())) { - $ERROR('#1: ({} + function(){return 1}) === ({}.toString() + function(){return 1}.toString()). Actual: ' + (({} + function(){return 1}))); -} - -//CHECK#2 -if ((function(){return 1} + {}) !== (function(){return 1}.toString() + {}.toString())) { - $ERROR('#2: (function(){return 1} + {}) === (function(){return 1}.toString() + {}.toString()). Actual: ' + ((function(){return 1} + {}))); -} - -//CHECK#3 -if ((function(){return 1} + function(){return 1}) !== (function(){return 1}.toString() + function(){return 1}.toString())) { - $ERROR('#3: (function(){return 1} + function(){return 1}) === (function(){return 1}.toString() + function(){return 1}.toString()). Actual: ' + ((function(){return 1} + function(){return 1}))); -} - -//CHECK#4 -if (({} + {}) !== ({}.toString() + {}.toString())) { - $ERROR('#4: ({} + {}) === ({}.toString() + {}.toString()). Actual: ' + (({} + {}))); -} - - diff --git a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A3.2_T2.1.js b/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A3.2_T2.1.js deleted file mode 100644 index 222795da5..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A3.2_T2.1.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.6.1_A3.2_T2.1; - * @section: 11.6.1; - * @assertion: If Type(Primitive(x)) is String or Type(Primitive(y)) is String, then operator x + y returns the result of concatenating ToString(x) followed by ToString(y); - * @description: Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between Number (primitive or object) and String (primitive and object); -*/ - -//CHECK#1 -if ("1" + 1 !== "11") { - $ERROR('#1: "1" + 1 === "11". Actual: ' + ("1" + 1)); -} - -//CHECK#2 -if (1 + "1" !== "11") { - $ERROR('#2: 1 + "1" === "11". Actual: ' + (1 + "1")); -} - -//CHECK#3 -if (new String("1") + 1 !== "11") { - $ERROR('#3: new String("1") + 1 === "11". Actual: ' + (new String("1") + 1)); -} - -//CHECK#4 -if (1 + new String("1") !== "11") { - $ERROR('#4: 1 + new String("1") === "11". Actual: ' + (1 + new String("1"))); -} - -//CHECK#5 -if ("1" + new Number(1) !== "11") { - $ERROR('#5: "1" + new Number(1) === "11". Actual: ' + ("1" + new Number(1))); -} - -//CHECK#6 -if (new Number(1) + "1" !== "11") { - $ERROR('#6: new Number(1) + "1" === "11". Actual: ' + (new Number(1) + "1")); -} - -//CHECK#7 -if (new String("1") + new Number(1) !== "11") { - $ERROR('#7: new String("1") + new Number(1) === "11". Actual: ' + (new String("1") + new Number(1))); -} - -//CHECK#8 -if (new Number(1) + new String("1") !== "11") { - $ERROR('#8: new Number(1) + new String("1") === "11". Actual: ' + (new Number(1) + new String("1"))); -} - -//CHECK#9 -if ("x" + 1 !=="x1") { - $ERROR('#9: "x" + 1 === "x1". Actual: ' + ("x" + 1)); -} - -//CHECK#10 -if (1 + "x" !== "1x") { - $ERROR('#10: 1 + "x" === "1x". Actual: ' + (1 + "x")); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A3.2_T2.2.js b/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A3.2_T2.2.js deleted file mode 100644 index 5eccb0147..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A3.2_T2.2.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.6.1_A3.2_T2.2; - * @section: 11.6.1; - * @assertion: If Type(Primitive(x)) is String or Type(Primitive(y)) is String, then operator x + y returns the result of concatenating ToString(x) followed by ToString(y); - * @description: Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between String (primitive or object) and Boolean (primitive and object); -*/ - -//CHECK#1 -if (true + "1" !== "true1") { - $ERROR('#1: true + "1" === "true1". Actual: ' + (true + "1")); -} - -//CHECK#2 -if ("1" + true !== "1true") { - $ERROR('#2: "1" + true === "1true". Actual: ' + ("1" + true)); -} - -//CHECK#3 -if (new Boolean(true) + "1" !== "true1") { - $ERROR('#3: new Boolean(true) + "1" === "true1". Actual: ' + (new Boolean(true) + "1")); -} - -//CHECK#4 -if ("1" + new Boolean(true) !== "1true") { - $ERROR('#4: "1" + new Boolean(true) === "1true". Actual: ' + ("1" + new Boolean(true))); -} - -//CHECK#5 -if (true + new String("1") !== "true1") { - $ERROR('#5: true + new String("1") === "true1". Actual: ' + (true + new String("1"))); -} - -//CHECK#6 -if (new String("1") + true !== "1true") { - $ERROR('#6: new String("1") + true === "1true". Actual: ' + (new String("1") + true)); -} - -//CHECK#7 -if (new Boolean(true) + new String("1") !== "true1") { - $ERROR('#7: new Boolean(true) + new String("1") === "true1". Actual: ' + (new Boolean(true) + new String("1"))); -} - -//CHECK#8 -if (new String("1") + new Boolean(true) !== "1true") { - $ERROR('#8: new String("1") + new Boolean(true) === "1true". Actual: ' + (new String("1") + new Boolean(true))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A3.2_T2.3.js b/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A3.2_T2.3.js deleted file mode 100644 index ecfca9fec..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A3.2_T2.3.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.6.1_A3.2_T2.3; - * @section: 11.6.1; - * @assertion: If Type(Primitive(x)) is String or Type(Primitive(y)) is String, then operator x + y returns the result of concatenating ToString(x) followed by ToString(y); - * @description: Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between String (primitive or object) and Undefined; - */ - -//CHECK#1 -if ("1" + undefined !== "1undefined") { - $ERROR('#1: "1" + undefined === "1undefined". Actual: ' + ("1" + undefined)); -} - -//CHECK#2 -if (undefined + "1" !== "undefined1") { - $ERROR('#2: undefined + "1" === "undefined1". Actual: ' + (undefined + "1")); -} - -//CHECK#3 -if (new String("1") + undefined !== "1undefined") { - $ERROR('#3: new String("1") + undefined === "1undefined". Actual: ' + (new String("1") + undefined)); -} - -//CHECK#4 -if (undefined + new String("1") !== "undefined1") { - $ERROR('#4: undefined + new String("1") === "undefined1". Actual: ' + (undefined + new String("1"))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A3.2_T2.4.js b/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A3.2_T2.4.js deleted file mode 100644 index 45bbeca3b..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A3.2_T2.4.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.6.1_A3.2_T2.4; - * @section: 11.6.1; - * @assertion: If Type(Primitive(x)) is String or Type(Primitive(y)) is String, then operator x + y returns the result of concatenating ToString(x) followed by ToString(y); - * @description: Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between String (primitive or object) and Null; - */ - -//CHECK#1 -if ("1" + null !== "1null") { - $ERROR('#1: "1" + null === "1null". Actual: ' + ("1" + null)); -} - -//CHECK#2 -if (null + "1" !== "null1") { - $ERROR('#2: null + "1" === "null1". Actual: ' + (null + "1")); -} - -//CHECK#3 -if (new String("1") + null !== "1null") { - $ERROR('#3: new String("1") + null === "1null". Actual: ' + (new String("1") + null)); -} - -//CHECK#4 -if (null + new String("1") !== "null1") { - $ERROR('#4: null + new String("1") === "null1". Actual: ' + (null + new String("1"))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A4_T1.js b/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A4_T1.js deleted file mode 100644 index cd3fe70cd..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A4_T1.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.6.1_A4_T1; -* @section: 11.6.1, 11.6.3; -* @assertion: The result of an addition is determined using the rules of IEEE 754 double-precision arithmetics; -* @description: If either operand is NaN, the result is NaN; -*/ - -//CHECK#1 -if (isNaN(Number.NaN + 1) !== true ) { - $ERROR('#1: NaN + 1 === Not-a-Number. Actual: ' + (NaN + 1)); -} - -//CHECK#2 -if (isNaN(1 + Number.NaN) !== true ) { - $ERROR('#2: 1 + NaN === Not-a-Number. Actual: ' + (1 + NaN)); -} - -//CHECK#3 -if (isNaN(Number.NaN + Number.POSITIVE_INFINITY) !== true ) { - $ERROR('#3: NaN + Infinity === Not-a-Number. Actual: ' + (NaN + Infinity)); -} - -//CHECK#4 -if (isNaN(Number.POSITIVE_INFINITY + Number.NaN) !== true ) { - $ERROR('#4: Infinity + NaN === Not-a-Number. Actual: ' + (Infinity + NaN)); -} - -//CHECK#5 -if (isNaN(Number.NaN + Number.NEGATIVE_INFINITY) !== true ) { - $ERROR('#5: NaN + Infinity === Not-a-Number. Actual: ' + (NaN + Infinity)); -} - -//CHECK#6 -if (isNaN(Number.NEGATIVE_INFINITY + Number.NaN) !== true ) { - $ERROR('#6: Infinity + NaN === Not-a-Number. Actual: ' + (Infinity + NaN)); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A4_T2.js b/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A4_T2.js deleted file mode 100644 index f00c331f5..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A4_T2.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.6.1_A4_T2; -* @section: 11.6.1, 11.6.3; -* @assertion: The result of an addition is determined using the rules of IEEE 754 double-precision arithmetics; -* @description: The sum of two infinities of opposite sign is NaN; -*/ - -//CHECK#1 -if (isNaN(Number.POSITIVE_INFINITY + Number.NEGATIVE_INFINITY) !== true ) { - $ERROR('#1: Infinity + -Infinity === Not-a-Number. Actual: ' + (Infinity + -Infinity)); -} - -//CHECK#2 -if (isNaN(Number.NEGATIVE_INFINITY + Number.POSITIVE_INFINITY) !== true ) { - $ERROR('#2: -Infinity + Infinity === Not-a-Number. Actual: ' + (-Infinity + Infinity)); -} - - - diff --git a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A4_T3.js b/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A4_T3.js deleted file mode 100644 index afa294b97..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A4_T3.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.6.1_A4_T3; -* @section: 11.6.1, 11.6.3; -* @assertion: The result of an addition is determined using the rules of IEEE 754 double-precision arithmetics; -* @description: The sum of two infinities of the same sign is the infinity of that sign; -*/ - -//CHECK#1 -if (Number.POSITIVE_INFINITY + Number.POSITIVE_INFINITY !== Number.POSITIVE_INFINITY ) { - $ERROR('#1: Infinity + Infinity === Infinity. Actual: ' + (Infinity + Infinity)); -} - -//CHECK#2 -if (Number.NEGATIVE_INFINITY + Number.NEGATIVE_INFINITY !== Number.NEGATIVE_INFINITY ) { - $ERROR('#2: -Infinity + -Infinity === -Infinity. Actual: ' + (-Infinity + -Infinity)); -} - - - diff --git a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A4_T4.js b/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A4_T4.js deleted file mode 100644 index 5fa1f813a..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A4_T4.js +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.6.1_A4_T4; -* @section: 11.6.1, 11.6.3; -* @assertion: The result of an addition is determined using the rules of IEEE 754 double-precision arithmetics; -* @description: The sum of an infinity and a finite value is equal to the infinite operand; -*/ - -//CHECK#1 -if (Number.POSITIVE_INFINITY + 1 !== Number.POSITIVE_INFINITY ) { - $ERROR('#1: Infinity + 1 === Infinity. Actual: ' + (Infinity + 1)); -} - -//CHECK#2 -if (-1 + Number.POSITIVE_INFINITY !== Number.POSITIVE_INFINITY ) { - $ERROR('#2: -1 + Infinity === Infinity. Actual: ' + (-1 + Infinity)); -} - -//CHECK#3 -if (Number.NEGATIVE_INFINITY + 1 !== Number.NEGATIVE_INFINITY ) { - $ERROR('#3: -Infinity + 1 === -Infinity. Actual: ' + (-Infinity + 1)); -} - -//CHECK#4 -if (-1 + Number.NEGATIVE_INFINITY !== Number.NEGATIVE_INFINITY ) { - $ERROR('#4: -1 + -Infinity === -Infinity. Actual: ' + (-1 + -Infinity)); -} - -//CHECK#5 -if (Number.POSITIVE_INFINITY + Number.MAX_VALUE !== Number.POSITIVE_INFINITY ) { - $ERROR('#5: Infinity + Number.MAX_VALUE === Infinity. Actual: ' + (Infinity + Number.MAX_VALUE)); -} - -//CHECK#6 -if (-Number.MAX_VALUE + Number.POSITIVE_INFINITY !== Number.POSITIVE_INFINITY ) { - $ERROR('#6: -Number.MAX_VALUE + Infinity === Infinity. Actual: ' + (-Number.MAX_VALUE + Infinity)); -} - -//CHECK#7 -if (Number.NEGATIVE_INFINITY + Number.MAX_VALUE !== Number.NEGATIVE_INFINITY ) { - $ERROR('#7: -Infinity + Number.MAX_VALUE === -Infinity. Actual: ' + (-Infinity + Number.MAX_VALUE)); -} - -//CHECK#8 -if (-Number.MAX_VALUE + Number.NEGATIVE_INFINITY !== Number.NEGATIVE_INFINITY ) { - $ERROR('#8: -Number.MAX_VALUE + -Infinity === -Infinity. Actual: ' + (-Number.MAX_VALUE + -Infinity)); -} - - - diff --git a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A4_T5.js b/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A4_T5.js deleted file mode 100644 index 56288f585..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A4_T5.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.6.1_A4_T5; -* @section: 11.6.1, 11.6.3; -* @assertion: The result of an addition is determined using the rules of IEEE 754 double-precision arithmetics; -* @description: The sum of two negative zeros is -0. The sum of two positive zeros, or of two zeros of opposite sign is +0; -*/ - -//CHECK#1 -if (-0 + -0 !== -0 ) { - $ERROR('#1.1: -0 + -0 === 0. Actual: ' + (-0 + -0)); -} else { - if (1 / (-0 + -0) !== Number.NEGATIVE_INFINITY) { - $ERROR('#1.1: -0 + -0 === - 0. Actual: +0'); - } -} - -//CHECK#2 -if (0 + -0 !== 0 ) { - $ERROR('#2.1: 0 + -0 === 0. Actual: ' + (0 + -0)); -} else { - if (1 / (0 + -0) !== Number.POSITIVE_INFINITY) { - $ERROR('#2.2: 0 + -0 === + 0. Actual: -0'); - } -} - -//CHECK#3 -if (-0 + 0 !== 0 ) { - $ERROR('#3.1: -0 + 0 === 0. Actual: ' + (-0 + 0)); -} else { - if (1 / (-0 + 0) !== Number.POSITIVE_INFINITY) { - $ERROR('#3.2: -0 + 0 === + 0. Actual: -0'); - } -} - -//CHECK#4 -if (0 + 0 !== 0 ) { - $ERROR('#4.1: 0 + 0 === 0. Actual: ' + (0 + 0)); -} else { - if (1 / (0 + 0) !== Number.POSITIVE_INFINITY) { - $ERROR('#4.2: 0 + 0 === + 0. Actual: -0'); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A4_T6.js b/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A4_T6.js deleted file mode 100644 index 63c4b9aae..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A4_T6.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.6.1_A4_T6; -* @section: 11.6.1, 11.6.3; -* @assertion: The result of an addition is determined using the rules of IEEE 754 double-precision arithmetics; -* @description: The sum of a zero and a nonzero finite value is equal to the nonzero operand; -*/ - -//CHECK#1 -if (1 + -0 !== 1 ) { - $ERROR('#1: 1 + -0 === 1. Actual: ' + (1 + -0)); -} - -//CHECK#2 -if (1 + 0 !== 1 ) { - $ERROR('#2: 1 + 0 === 1. Actual: ' + (1 + 0)); -} - -//CHECK#3 -if (-0 + 1 !== 1 ) { - $ERROR('#3: -0 + 1 === 1. Actual: ' + (-0 + 1)); -} - -//CHECK#4 -if (0 + 1 !== 1 ) { - $ERROR('#4: 0 + 1 === 1. Actual: ' + (0 + 1)); -} - -//CHECK#5 -if (Number.MAX_VALUE + -0 !== Number.MAX_VALUE ) { - $ERROR('#5: Number.MAX_VALUE + -0 === Number.MAX_VALUE. Actual: ' + (Number.MAX_VALUE + -0)); -} - -//CHECK#6 -if (Number.MAX_VALUE + 0 !== Number.MAX_VALUE ) { - $ERROR('#6: Number.MAX_VALUE + 0 === Number.MAX_VALUE. Actual: ' + (Number.MAX_VALUE + 0)); -} - -//CHECK#7 -if (-0 + Number.MIN_VALUE !== Number.MIN_VALUE ) { - $ERROR('#7: -0 + Number.MIN_VALUE === Number.MIN_VALUE. Actual: ' + (-0 + Number.MIN_VALUE)); -} - -//CHECK#8 -if (0 + Number.MIN_VALUE !== Number.MIN_VALUE ) { - $ERROR('#8: 0 + Number.MIN_VALUE === Number.MIN_VALUE. Actual: ' + (0 + Number.MIN_VALUE)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A4_T7.js b/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A4_T7.js deleted file mode 100644 index af20120e7..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A4_T7.js +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.6.1_A4_T7; -* @section: 11.6.1, 11.6.3; -* @assertion: The result of an addition is determined using the rules of IEEE 754 double-precision arithmetics; -* @description: The sum of two nonzero finite values of the same magnitude and opposite sign is +0; -*/ - -//CHECK#1 -if (-Number.MIN_VALUE + Number.MIN_VALUE !== +0) { - $ERROR('#1.1: -Number.MIN_VALUE + Number.MIN_VALUE === 0. Actual: ' + (-Number.MIN_VALUE + Number.MIN_VALUE)); -} else { - if (1 / (-Number.MIN_VALUE + Number.MIN_VALUE) !== Number.POSITIVE_INFINITY) { - $ERROR('#1.2: -Number.MIN_VALUE + Number.MIN_VALUE === + 0. Actual: -0'); - } -} - -//CHECK#2 -if (-Number.MAX_VALUE + Number.MAX_VALUE !== +0) { - $ERROR('#2.1: -Number.MAX_VALUE + Number.MAX_VALUE === 0. Actual: ' + (-Number.MAX_VALUE + Number.MAX_VALUE)); -} else { - if (1 / (-Number.MAX_VALUE + Number.MAX_VALUE) !== Number.POSITIVE_INFINITY) { - $ERROR('#2.2: -Number.MAX_VALUE + Number.MAX_VALUE === + 0. Actual: -0'); - } -} - -//CHECK#3 -if (-1 / Number.MAX_VALUE + 1 / Number.MAX_VALUE !== +0) { - $ERROR('#3.1: -1 / Number.MAX_VALUE + 1 / Number.MAX_VALUE === 0. Actual: ' + (-1 / Number.MAX_VALUE + 1 / Number.MAX_VALUE)); -} else { - if (1 / (-1 / Number.MAX_VALUE + 1 / Number.MAX_VALUE) !== Number.POSITIVE_INFINITY) { - $ERROR('#3.2: -1 / Number.MAX_VALUE + 1 / Number.MAX_VALUE === + 0. Actual: -0'); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A4_T8.js b/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A4_T8.js deleted file mode 100644 index a06760096..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A4_T8.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.6.1_A4_T8; -* @section: 11.6.1, 11.6.3; -* @assertion: The result of an addition is determined using the rules of IEEE 754 double-precision arithmetics; -* @description: If the magnitude is too large to represent, the operation overflows and the result is then an infinity of appropriate sign; -*/ - -//CHECK#1 -if (Number.MAX_VALUE + Number.MAX_VALUE !== Number.POSITIVE_INFINITY) { - $ERROR('#1: Number.MAX_VALUE + Number.MAX_VALUE === Number.POSITIVE_INFINITY. Actual: ' + (Number.MAX_VALUE + Number.MAX_VALUE)); -} - -//CHECK#2 -if (-Number.MAX_VALUE - Number.MAX_VALUE !== Number.NEGATIVE_INFINITY) { - $ERROR('#2: -Number.MAX_VALUE - Number.MAX_VALUE === Number.NEGATIVE_INFINITY. Actual: ' + (-Number.MAX_VALUE - Number.MAX_VALUE)); -} - -//CHECK#3 -if (1e+308 + 1e+308 !== Number.POSITIVE_INFINITY) { - $ERROR('#3: 1e+308 + 1e+308 === Number.POSITIVE_INFINITY. Actual: ' + (1e+308 + 1e+308)); -} - -//CHECK#4 -if (-8.99e+307 - 8.99e+307 !== Number.NEGATIVE_INFINITY) { - $ERROR('#4: -8.99e+307 - 8.99e+307 === Number.NEGATIVE_INFINITY. Actual: ' + (-8.99e+307 - 8.99e+307)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A4_T9.js b/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A4_T9.js deleted file mode 100644 index 8008a8792..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.1_The_Addition_operator/S11.6.1_A4_T9.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.6.1_A4_T9; - * @section: 11.6.1, 11.6.3; - * @assertion: The result of an addition is determined using the rules of IEEE 754 double-precision arithmetics; - * @description: The addition operator is not always associative ( x + y + z is the same (x + y) + z, not x + (y + z)); -*/ - -//CHECK#1 -if (-Number.MAX_VALUE + Number.MAX_VALUE + Number.MAX_VALUE !== (-Number.MAX_VALUE + Number.MAX_VALUE) + Number.MAX_VALUE) { - $ERROR('#1: -Number.MAX_VALUE + Number.MAX_VALUE + Number.MAX_VALUE === (-Number.MAX_VALUE + Number.MAX_VALUE) + Number.MAX_VALUE. Actual: ' + (-Number.MAX_VALUE + Number.MAX_VALUE + Number.MAX_VALUE)); -} - -//CHECK#2 -if ((-Number.MAX_VALUE + Number.MAX_VALUE) + Number.MAX_VALUE === -Number.MAX_VALUE + (Number.MAX_VALUE + Number.MAX_VALUE)) { - $ERROR('#2: (-Number.MAX_VALUE + Number.MAX_VALUE) + Number.MAX_VALUE === -Number.MAX_VALUE + (Number.MAX_VALUE + Number.MAX_VALUE). Actual: ' + ((-Number.MAX_VALUE + Number.MAX_VALUE) + Number.MAX_VALUE)); -} - -//CHECK#3 -if ("1" + 1 + 1 !== ("1" + 1) + 1) { - $ERROR('#3: "1" + 1 + 1 === ("1" + 1) + 1. Actual: ' + ("1" + 1 + 1)); -} - -//CHECK#4 -if (("1" + 1) + 1 === "1" + (1 + 1)) { - $ERROR('#4: ("1" + 1) + 1 !== "1" + (1 + 1)'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A1.js b/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A1.js deleted file mode 100644 index 944a09d1a..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A1.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.6.2_A1; -* @section: 11.6.2, 7.2, 7.3; -* @assertion: White Space and Line Terminator between AdditiveExpression and "-" or between "-" and MultiplicativeExpression are allowed; -* @description: Checking by using eval; -*/ - -//CHECK#1 -if (eval("1\u0009-\u00091") !== 0) { - $ERROR('#1: 1\\u0009-\\u00091 === 0'); -} - -//CHECK#2 -if (eval("1\u000B-\u000B1") !== 0) { - $ERROR('#2: 1\\u000B-\\u000B1 === 0'); -} - -//CHECK#3 -if (eval("1\u000C-\u000C1") !== 0) { - $ERROR('#3: 1\\u000C-\\u000C1 === 0'); -} - -//CHECK#4 -if (eval("1\u0020-\u00201") !== 0) { - $ERROR('#4: 1\\u0020-\\u00201 === 0'); -} - -//CHECK#5 -if (eval("1\u00A0-\u00A01") !== 0) { - $ERROR('#5: 1\\u00A0-\\u00A01 === 0'); -} - -//CHECK#6 -if (eval("1\u000A-\u000A1") !== 0) { - $ERROR('#6: 1\\u000A-\\u000A1 === 0'); -} - -//CHECK#7 -if (eval("1\u000D-\u000D1") !== 0) { - $ERROR('#7: 1\\u000D-\\u000D1 === 0'); -} - -//CHECK#8 -if (eval("1\u2028-\u20281") !== 0) { - $ERROR('#8: 1\\u2028-\\u20281 === 0'); -} - -//CHECK#9 -if (eval("1\u2029-\u20291") !== 0) { - $ERROR('#9: 1\\u2029-\\u20291 === 0'); -} - -//CHECK#10 -if (eval("1\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029-\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20291") !== 0) { - $ERROR('#10: 1\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029-\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20291 === 0'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A2.1_T1.js b/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A2.1_T1.js deleted file mode 100644 index a8ea8e7b6..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A2.1_T1.js +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.6.2_A2.1_T1; -* @section: 11.6.2; -* @assertion: Operator x - y uses GetValue; -* @description: Either Type is not Reference or GetBase is not null; -*/ - -//CHECK#1 -if (1 - 1 !== 0) { - $ERROR('#1: 1 - 1 === 0. Actual: ' + (1 - 1)); -} - -//CHECK#2 -var x = 1; -if (x - 1 !== 0) { - $ERROR('#2: var x = 1; x - 1 === 0. Actual: ' + (x - 1)); -} - -//CHECK#3 -var y = 1; -if (1 - y !== 0) { - $ERROR('#3: var y = 1; 1 - y === 0. Actual: ' + (1 - y)); -} - -//CHECK#4 -var x = 1; -var y = 1; -if (x - y !== 0) { - $ERROR('#4: var x = 1; var y = 1; x - y === 0. Actual: ' + (x - y)); -} - -//CHECK#5 -var objectx = new Object(); -var objecty = new Object(); -objectx.prop = 1; -objecty.prop = 1; -if (objectx.prop - objecty.prop !== 0) { - $ERROR('#5: var objectx = new Object(); var objecty = new Object(); objectx.prop = 1; objecty.prop = 1; objectx.prop - objecty.prop === 0. Actual: ' + (objectx.prop - objecty.prop)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A2.1_T2.js b/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A2.1_T2.js deleted file mode 100644 index de0dad9e9..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A2.1_T2.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.6.2_A2.1_T2; - * @section: 11.6.2; - * @assertion: Operator x - y uses GetValue; - * @description: If GetBase(x) is null, throw ReferenceError; -*/ - -//CHECK#1 -try { - x - 1; - $ERROR('#1.1: x - 1 throw ReferenceError. Actual: ' + (x - 1)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: x - 1 throw ReferenceError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A2.1_T3.js b/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A2.1_T3.js deleted file mode 100644 index 3e92c1cb4..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A2.1_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.6.2_A2.1_T3; - * @section: 11.6.2; - * @assertion: Operator x - y uses GetValue; - * @description: If GetBase(y) is null, throw ReferenceError; -*/ - -//CHECK#1 -try { - 1 - y; - $ERROR('#1.1: 1 - y throw ReferenceError. Actual: ' + (1 - y)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: 1 - y throw ReferenceError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A2.2_T1.js b/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A2.2_T1.js deleted file mode 100644 index 4119ce6f3..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A2.2_T1.js +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.6.2_A2.2_T1; - * @section: 11.6.2, 8.6.2.6; - * @assertion: Operator x - y uses [[Default Value]]; - * @description: If Type(value) is Object, evaluate ToPrimitive(value, Number); - */ - -//CHECK#1 -if ({valueOf: function() {return 1}} - 1 !== 0) { - $ERROR('#1: {valueOf: function() {return 1}} - 1 === 0. Actual: ' + ({valueOf: function() {return 1}} - 1)); -} - -//CHECK#2 -if ({valueOf: function() {return 1}, toString: function() {return 0}} - 1 !== 0) { - $ERROR('#2: {valueOf: function() {return 1}, toString: function() {return 0}} - 1 === 0. Actual: ' + ({valueOf: function() {return 1}, toString: function() {return 0}} - 1)); -} - -//CHECK#3 -if ({valueOf: function() {return 1}, toString: function() {return {}}} - 1 !== 0) { - $ERROR('#3: {valueOf: function() {return 1}, toString: function() {return {}}} - 1 === 0. Actual: ' + ({valueOf: function() {return 1}, toString: function() {return {}}} - 1)); -} - -//CHECK#4 -try { - if ({valueOf: function() {return 1}, toString: function() {throw "error"}} - 1 !== 0) { - $ERROR('#4.1: {valueOf: function() {return 1}, toString: function() {throw "error"}} - 1 === 0. Actual: ' + ({valueOf: function() {return 1}, toString: function() {throw "error"}} - 1)); - } -} -catch (e) { - if (e === "error") { - $ERROR('#4.2: {valueOf: function() {return 1}, toString: function() {throw "error"}} - 1 not throw "error"'); - } else { - $ERROR('#4.3: {valueOf: function() {return 1}, toString: function() {throw "error"}} - 1 not throw Error. Actual: ' + (e)); - } -} - -//CHECK#5 -if (1 - {toString: function() {return 1}} !== 0) { - $ERROR('#5: 1 - {toString: function() {return 1}} === 0. Actual: ' + (1 - {toString: function() {return 1}})); -} - -//CHECK#6 -if (1 - {valueOf: function() {return {}}, toString: function() {return 1}} !== 0) { - $ERROR('#6: 1 - {valueOf: function() {return {}}, toString: function() {return 1}} === 0. Actual: ' + (1 - {valueOf: function() {return {}}, toString: function() {return 1}})); -} - -//CHECK#7 -try { - 1 - {valueOf: function() {throw "error"}, toString: function() {return 1}}; - $ERROR('#7.1: 1 - {valueOf: function() {throw "error"}, toString: function() {return 1}} throw "error". Actual: ' + (1 - {valueOf: function() {throw "error"}, toString: function() {return 1}})); -} -catch (e) { - if (e !== "error") { - $ERROR('#7.2: 1 - {valueOf: function() {throw "error"}, toString: function() {return 1}} throw "error". Actual: ' + (e)); - } -} - -//CHECK#8 -try { - 1 - {valueOf: function() {return {}}, toString: function() {return {}}}; - $ERROR('#8.1: 1 - {valueOf: function() {return {}}, toString: function() {return {}}} throw TypeError. Actual: ' + (1 - {valueOf: function() {return {}}, toString: function() {return {}}})); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#8.2: 1 - {valueOf: function() {return {}}, toString: function() {return {}}} throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A2.3_T1.js b/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A2.3_T1.js deleted file mode 100644 index f54f5dd55..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A2.3_T1.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.6.2_A2.3_T1; - * @section: 11.6.2; - * @assertion: ToNumber(first expression) is called first, and then ToNumber(second expression); - * @description: Checking with "throw"; -*/ - -//CHECK#1 -var x = { valueOf: function () { throw "x"; } }; -var y = { valueOf: function () { throw "y"; } }; -try { - x - y; - $ERROR('#1.1: var x = { valueOf: function () { throw "x"; } }; var y = { valueOf: function () { throw "y"; } }; x - y throw "x". Actual: ' + (x - y)); -} catch (e) { - if (e === "y") { - $ERROR('#1.2: ToNumber(first expression) is called first, and then ToNumber(second expression)'); - } else { - if (e !== "x") { - $ERROR('#1.3: var x = { valueOf: function () { throw "x"; } }; var y = { valueOf: function () { throw "y"; } }; x - y throw "x". Actual: ' + (e)); - } - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A2.4_T1.js b/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A2.4_T1.js deleted file mode 100644 index fc4671655..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A2.4_T1.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.6.2_A2.4_T1; - * @section: 11.6.2; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with "="; -*/ - -//CHECK#1 -var x = 0; -if ((x = 1) - x !== 0) { - $ERROR('#1: var x = 0; (x = 1) - x === 0. Actual: ' + ((x = 1) - x)); -} - -//CHECK#2 -var x = 0; -if (x - (x = 1) !== -1) { - $ERROR('#2: var x = 0; x - (x = 1) === -1. Actual: ' + (x - (x = 1))); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A2.4_T2.js b/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A2.4_T2.js deleted file mode 100644 index 985a2b555..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A2.4_T2.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.6.2_A2.4_T2; - * @section: 11.6.2; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with "throw"; -*/ - -//CHECK#1 -var x = function () { throw "x"; }; -var y = function () { throw "y"; }; -try { - x() - y(); - $ERROR('#1.1: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() - y() throw "x". Actual: ' + (x() - y())); -} catch (e) { - if (e === "y") { - $ERROR('#1.2: First expression is evaluated first, and then second expression'); - } else { - if (e !== "x") { - $ERROR('#1.3: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() - y() throw "x". Actual: ' + (e)); - } - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A2.4_T3.js b/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A2.4_T3.js deleted file mode 100644 index bf6f225c6..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A2.4_T3.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.6.2_A2.4_T3; - * @section: 11.6.2; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with undeclarated variables; -*/ - -//CHECK#1 -try { - x - (x = 1); - $ERROR('#1.1: x - (x = 1) throw ReferenceError. Actual: ' + (x - (x = 1))); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: x - (x = 1) throw ReferenceError. Actual: ' + (e)); - } -} - -//CHECK#2 -if ((y = 1) - y !== 0) { - $ERROR('#2: (y = 1) - y === 0. Actual: ' + ((y = 1) - y)); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A3_T1.1.js b/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A3_T1.1.js deleted file mode 100644 index b85066541..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A3_T1.1.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.6.2_A3_T1.1; - * @section: 11.6.2; - * @assertion: Operator x - y returns ToNumber(x) - ToNumber(y); - * @description: Type(x) and Type(y) vary between primitive boolean and Boolean object; - */ - -//CHECK#1 -if (true - true !== 0) { - $ERROR('#1: true - true === 0. Actual: ' + (true - true)); -} - -//CHECK#2 -if (new Boolean(true) - true !== 0) { - $ERROR('#2: new Boolean(true) - true === 0. Actual: ' + (new Boolean(true) - true)); -} - -//CHECK#3 -if (true - new Boolean(true) !== 0) { - $ERROR('#3: true - new Boolean(true) === 0. Actual: ' + (true - new Boolean(true))); -} - -//CHECK#4 -if (new Boolean(true) - new Boolean(true) !== 0) { - $ERROR('#4: new Boolean(true) - new Boolean(true) === 0. Actual: ' + (new Boolean(true) - new Boolean(true))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A3_T1.2.js b/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A3_T1.2.js deleted file mode 100644 index 7977c03db..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A3_T1.2.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.6.2_A3_T1.2; - * @section: 11.6.2; - * @assertion: Operator x - y returns ToNumber(x) - ToNumber(y); - * @description: Type(x) and Type(y) vary between primitive number and Number object; -*/ - -//CHECK#1 -if (1 - 1 !== 0) { - $ERROR('#1: 1 - 1 === 0. Actual: ' + (1 - 1)); -} - -//CHECK#2 -if (new Number(1) - 1 !== 0) { - $ERROR('#2: new Number(1) - 1 === 0. Actual: ' + (new Number(1) - 1)); -} - -//CHECK#3 -if (1 - new Number(1) !== 0) { - $ERROR('#3: 1 - new Number(1) === 0. Actual: ' + (1 - new Number(1))); -} - -//CHECK#4 -if (new Number(1) - new Number(1) !== 0) { - $ERROR('#4: new Number(1) - new Number(1) === 0. Actual: ' + (new Number(1) - new Number(1))); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A3_T1.3.js b/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A3_T1.3.js deleted file mode 100644 index 0b62c8f7f..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A3_T1.3.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.6.2_A3_T1.3; - * @section: 11.6.2; - * @assertion: Operator x - y returns ToNumber(x) - ToNumber(y); - * @description: Type(x) and Type(y) vary between primitive string and String object; -*/ - -//CHECK#1 -if ("1" - "1" !== 0) { - $ERROR('#1: "1" - "1" === 0. Actual: ' + ("1" - "1")); -} - -//CHECK#2 -if (new String("1") - "1" !== 0) { - $ERROR('#2: new String("1") - "1" === 0. Actual: ' + (new String("1") - "1")); -} - -//CHECK#3 -if ("1" - new String("1") !== 0) { - $ERROR('#3: "1" - new String("1") === 0. Actual: ' + ("1" - new String("1"))); -} - -//CHECK#4 -if (new String("1") - new String("1") !== 0) { - $ERROR('#4: new String("1") - new String("1") === 0. Actual: ' + (new String("1") - new String("1"))); -} - -//CHECK#5 -if (isNaN("x" - "1") !== true) { - $ERROR('#5: "x" - "1" === Not-a-Number. Actual: ' + ("x" - "1")); -} - -//CHECK#6 -if (isNaN("1" - "x") !== true) { - $ERROR('#6: "1" - "x" === Not-a-Number. Actual: ' + ("1" - "x")); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A3_T1.4.js b/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A3_T1.4.js deleted file mode 100644 index 7236464c2..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A3_T1.4.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.6.2_A3_T1.4; - * @section: 11.6.2; - * @assertion: Operator x - y returns ToNumber(x) - ToNumber(y); - * @description: Type(x) and Type(y) vary between Null and Undefined; - */ - -//CHECK#1 -if (isNaN(null - undefined) !== true) { - $ERROR('#1: null - undefined === Not-a-Number. Actual: ' + (null - undefined)); -} - -//CHECK#2 -if (isNaN(undefined - null) !== true) { - $ERROR('#2: undefined - null === Not-a-Number. Actual: ' + (undefined - null)); -} - -//CHECK#3 -if (isNaN(undefined - undefined) !== true) { - $ERROR('#3: undefined - undefined === Not-a-Number. Actual: ' + (undefined - undefined)); -} - -//CHECK#4 -if (null - null !== 0) { - $ERROR('#4: null - null === 0. Actual: ' + (null - null)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A3_T1.5.js b/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A3_T1.5.js deleted file mode 100644 index e8d040b7b..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A3_T1.5.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.6.2_A3_T1.5; - * @section: 11.6.2; - * @assertion: Operator x - y returns ToNumber(x) - ToNumber(y); - * @description: Type(x) and Type(y) vary between Object object and Function object; - */ - -//CHECK#1 -if (isNaN({} - function(){return 1}) !== true) { - $ERROR('#1: {} - function(){return 1} === Not-a-Number. Actual: ' + ({} - function(){return 1})); -} - -//CHECK#2 -if (isNaN(function(){return 1} - {}) !== true) { - $ERROR('#2: function(){return 1} - {} === Not-a-Number. Actual: ' + (function(){return 1} - {})); -} - -//CHECK#3 -if (isNaN(function(){return 1} - function(){return 1}) !== true) { - $ERROR('#3: function(){return 1} - function(){return 1} === Not-a-Number. Actual: ' + (function(){return 1} - function(){return 1})); -} - -//CHECK#4 -if (isNaN({} - {}) !== true) { - $ERROR('#4: {} - {} === Not-a-Number. Actual: ' + ({} - {})); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A3_T2.1.js b/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A3_T2.1.js deleted file mode 100644 index 624e1a7ce..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A3_T2.1.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.6.2_A3_T2.1; - * @section: 11.6.2; - * @assertion: Operator x - y returns ToNumber(x) - ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Boolean (primitive and object); - */ - -//CHECK#1 -if (true - 1 !== 0) { - $ERROR('#1: true - 1 === 0. Actual: ' + (true - 1)); -} - -//CHECK#2 -if (1 - true !== 0) { - $ERROR('#2: 1 - true === 0. Actual: ' + (1 - true)); -} - -//CHECK#3 -if (new Boolean(true) - 1 !== 0) { - $ERROR('#3: new Boolean(true) - 1 === 0. Actual: ' + (new Boolean(true) - 1)); -} - -//CHECK#4 -if (1 - new Boolean(true) !== 0) { - $ERROR('#4: 1 - new Boolean(true) === 0. Actual: ' + (1 - new Boolean(true))); -} - -//CHECK#5 -if (true - new Number(1) !== 0) { - $ERROR('#5: true - new Number(1) === 0. Actual: ' + (true - new Number(1))); -} - -//CHECK#6 -if (new Number(1) - true !== 0) { - $ERROR('#6: new Number(1) - true === 0. Actual: ' + (new Number(1) - true)); -} - -//CHECK#7 -if (new Boolean(true) - new Number(1) !== 0) { - $ERROR('#7: new Boolean(true) - new Number(1) === 0. Actual: ' + (new Boolean(true) - new Number(1))); -} - -//CHECK#8 -if (new Number(1) - new Boolean(true) !== 0) { - $ERROR('#8: new Number(1) - new Boolean(true) === 0. Actual: ' + (new Number(1) - new Boolean(true))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A3_T2.2.js b/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A3_T2.2.js deleted file mode 100644 index d5a026d37..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A3_T2.2.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.6.2_A3_T2.2; - * @section: 11.6.2; - * @assertion: Operator x - y returns ToNumber(x) - ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and String (primitive and object); -*/ - -//CHECK#1 -if ("1" - 1 !== 0) { - $ERROR('#1: "1" - 1 === 0. Actual: ' + ("1" - 1)); -} - -//CHECK#2 -if (1 - "1" !== 0) { - $ERROR('#2: 1 - "1" === 0. Actual: ' + (1 - "1")); -} - -//CHECK#3 -if (new String("1") - 1 !== 0) { - $ERROR('#3: new String("1") - 1 === 0. Actual: ' + (new String("1") - 1)); -} - -//CHECK#4 -if (1 - new String("1") !== 0) { - $ERROR('#4: 1 - new String("1") === 0. Actual: ' + (1 - new String("1"))); -} - -//CHECK#5 -if ("1" - new Number(1) !== 0) { - $ERROR('#5: "1" - new Number(1) === 0. Actual: ' + ("1" - new Number(1))); -} - -//CHECK#6 -if (new Number(1) - "1" !== 0) { - $ERROR('#6: new Number(1) - "1" === 0. Actual: ' + (new Number(1) - "1")); -} - -//CHECK#7 -if (new String("1") - new Number(1) !== 0) { - $ERROR('#7: new String("1") - new Number(1) === 0. Actual: ' + (new String("1") - new Number(1))); -} - -//CHECK#8 -if (new Number(1) - new String("1") !== 0) { - $ERROR('#8: new Number(1) - new String("1") === 0. Actual: ' + (new Number(1) - new String("1"))); -} - -//CHECK#9 -if (isNaN("x" - 1) !== true) { - $ERROR('#9: "x" - 1 === Not-a-Number. Actual: ' + ("x" - 1)); -} - -//CHECK#10 -if (isNaN(1 - "x") !== true) { - $ERROR('#10: 1 - "x" === Not-a-Number. Actual: ' + (1 - "x")); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A3_T2.3.js b/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A3_T2.3.js deleted file mode 100644 index a1685d0d8..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A3_T2.3.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.6.2_A3_T2.3; - * @section: 11.6.2; - * @assertion: Operator x - y returns ToNumber(x) - ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Null; - */ - -//CHECK#1 -if (1 - null !== 1) { - $ERROR('#1: 1 - null === 1. Actual: ' + (1 - null)); -} - -//CHECK#2 -if (null - 1 !== -1) { - $ERROR('#2: null - 1 === -1. Actual: ' + (null - 1)); -} - -//CHECK#3 -if (new Number(1) - null !== 1) { - $ERROR('#3: new Number(1) - null === 1. Actual: ' + (new Number(1) - null)); -} - -//CHECK#4 -if (null - new Number(1) !== -1) { - $ERROR('#4: null - new Number(1) === -1. Actual: ' + (null - new Number(1))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A3_T2.4.js b/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A3_T2.4.js deleted file mode 100644 index 52cde424a..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A3_T2.4.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.6.2_A3_T2.4; - * @section: 11.6.2; - * @assertion: Operator x - y returns ToNumber(x) - ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Undefined; - */ - -//CHECK#1 -if (isNaN(1 - undefined) !== true) { - $ERROR('#1: 1 - undefined === Not-a-Number. Actual: ' + (1 - undefined)); -} - -//CHECK#2 -if (isNaN(undefined - 1) !== true) { - $ERROR('#2: undefined - 1 === Not-a-Number. Actual: ' + (undefined - 1)); -} - -//CHECK#3 -if (isNaN(new Number(1) - undefined) !== true) { - $ERROR('#3: new Number(1) - undefined === Not-a-Number. Actual: ' + (new Number(1) - undefined)); -} - -//CHECK#4 -if (isNaN(undefined - new Number(1)) !== true) { - $ERROR('#4: undefined - new Number(1) === Not-a-Number. Actual: ' + (undefined - new Number(1))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A3_T2.5.js b/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A3_T2.5.js deleted file mode 100644 index 15020de67..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A3_T2.5.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.6.2_A3_T2.5; - * @section: 11.6.2; - * @assertion: Operator x - y returns ToNumber(x) - ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between String (primitive or object) and Boolean (primitive and object); -*/ - -//CHECK#1 -if (true - "1" !== 0) { - $ERROR('#1: true - "1" === 0. Actual: ' + (true - "1")); -} - -//CHECK#2 -if ("1" - true !== 0) { - $ERROR('#2: "1" - true === 0. Actual: ' + ("1" - true)); -} - -//CHECK#3 -if (new Boolean(true) - "1" !== 0) { - $ERROR('#3: new Boolean(true) - "1" === 0. Actual: ' + (new Boolean(true) - "1")); -} - -//CHECK#4 -if ("1" - new Boolean(true) !== 0) { - $ERROR('#4: "1" - new Boolean(true) === 0. Actual: ' + ("1" - new Boolean(true))); -} - -//CHECK#5 -if (true - new String("1") !== 0) { - $ERROR('#5: true - new String("1") === 0. Actual: ' + (true - new String("1"))); -} - -//CHECK#6 -if (new String("1") - true !== 0) { - $ERROR('#6: new String("1") - true === 0. Actual: ' + (new String("1") - true)); -} - -//CHECK#7 -if (new Boolean(true) - new String("1") !== 0) { - $ERROR('#7: new Boolean(true) - new String("1") === 0. Actual: ' + (new Boolean(true) - new String("1"))); -} - -//CHECK#8 -if (new String("1") - new Boolean(true) !== 0) { - $ERROR('#8: new String("1") - new Boolean(true) === 0. Actual: ' + (new String("1") - new Boolean(true))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A3_T2.6.js b/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A3_T2.6.js deleted file mode 100644 index 95230265a..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A3_T2.6.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.6.2_A3_T2.6; - * @section: 11.6.2; - * @assertion: Operator x - y returns ToNumber(x) - ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between String (primitive or object) and Undefined; - */ - -//CHECK#1 -if (isNaN("1" - undefined) !== true) { - $ERROR('#1: "1" - undefined === Not-a-Number. Actual: ' + ("1" - undefined)); -} - -//CHECK#2 -if (isNaN(undefined - "1") !== true) { - $ERROR('#2: undefined - "1" === Not-a-Number. Actual: ' + (undefined - "1")); -} - -//CHECK#3 -if (isNaN(new String("1") - undefined) !== true) { - $ERROR('#3: new String("1") - undefined === Not-a-Number. Actual: ' + (new String("1") - undefined)); -} - -//CHECK#4 -if (isNaN(undefined - new String("1")) !== true) { - $ERROR('#4: undefined - new String("1") === Not-a-Number. Actual: ' + (undefined - new String("1"))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A3_T2.7.js b/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A3_T2.7.js deleted file mode 100644 index 9810bdf00..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A3_T2.7.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.6.2_A3_T2.7; - * @section: 11.6.2; - * @assertion: Operator x - y returns ToNumber(x) - ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between String (primitive or object) and Null; - */ - -//CHECK#1 -if ("1" - null !== 1) { - $ERROR('#1: "1" - null === 1. Actual: ' + ("1" - null)); -} - -//CHECK#2 -if (null - "1" !== -1) { - $ERROR('#2: null - "1" === -1. Actual: ' + (null - "1")); -} - -//CHECK#3 -if (new String("1") - null !== 1) { - $ERROR('#3: new String("1") - null === 1. Actual: ' + (new String("1") - null)); -} - -//CHECK#4 -if (null - new String("1") !== -1) { - $ERROR('#4: null - new String("1") === -1. Actual: ' + (null - new String("1"))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A3_T2.8.js b/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A3_T2.8.js deleted file mode 100644 index a21ef92c9..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A3_T2.8.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.6.2_A3_T2.8; - * @section: 11.6.2; - * @assertion: Operator x - y returns ToNumber(x) - ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Undefined; - */ - -//CHECK#1 -if (isNaN(true - undefined) !== true) { - $ERROR('#1: true - undefined === Not-a-Number. Actual: ' + (true - undefined)); -} - -//CHECK#2 -if (isNaN(undefined - true) !== true) { - $ERROR('#2: undefined - true === Not-a-Number. Actual: ' + (undefined - true)); -} - -//CHECK#3 -if (isNaN(new Boolean(true) - undefined) !== true) { - $ERROR('#3: new Boolean(true) - undefined === Not-a-Number. Actual: ' + (new Boolean(true) - undefined)); -} - -//CHECK#4 -if (isNaN(undefined - new Boolean(true)) !== true) { - $ERROR('#4: undefined - new Boolean(true) === Not-a-Number. Actual: ' + (undefined - new Boolean(true))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A3_T2.9.js b/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A3_T2.9.js deleted file mode 100644 index 4a26e959c..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A3_T2.9.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.6.2_A3_T2.9; - * @section: 11.6.2; - * @assertion: Operator x - y returns ToNumber(x) - ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Null; - */ - -//CHECK#1 -if (true - null !== 1) { - $ERROR('#1: true - null === 1. Actual: ' + (true - null)); -} - -//CHECK#2 -if (null - true !== -1) { - $ERROR('#2: null - true === -1. Actual: ' + (null - true)); -} - -//CHECK#3 -if (new Boolean(true) - null !== 1) { - $ERROR('#3: new Boolean(true) - null === 1. Actual: ' + (new Boolean(true) - null)); -} - -//CHECK#4 -if (null - new Boolean(true) !== -1) { - $ERROR('#4: null - new Boolean(true) === -1. Actual: ' + (null - new Boolean(true))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A4_T1.js b/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A4_T1.js deleted file mode 100644 index 9f0118c11..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A4_T1.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.6.2_A4_T1; -* @section: 11.6.2, 11.6.3; -* @assertion: Operator x - y produces the same result as x + (-y); -* @description: If either operand is NaN, the result is NaN; -*/ - -//CHECK#1 -if (isNaN(Number.NaN - 1) !== true ) { - $ERROR('#1: NaN - 1 === Not-a-Number. Actual: ' + (NaN - 1)); -} - -//CHECK#2 -if (isNaN(1 - Number.NaN) !== true ) { - $ERROR('#2: 1 - NaN === Not-a-Number. Actual: ' + (1 - NaN)); -} - -//CHECK#3 -if (isNaN(Number.NaN - Number.POSITIVE_INFINITY) !== true ) { - $ERROR('#3: NaN - Infinity === Not-a-Number. Actual: ' + (NaN - Infinity)); -} - -//CHECK#4 -if (isNaN(Number.POSITIVE_INFINITY - Number.NaN) !== true ) { - $ERROR('#4: Infinity - NaN === Not-a-Number. Actual: ' + (Infinity - NaN)); -} - -//CHECK#5 -if (isNaN(Number.NaN - Number.NEGATIVE_INFINITY) !== true ) { - $ERROR('#5: NaN - Infinity === Not-a-Number. Actual: ' + (NaN - Infinity)); -} - -//CHECK#6 -if (isNaN(Number.NEGATIVE_INFINITY - Number.NaN) !== true ) { - $ERROR('#6: Infinity - NaN === Not-a-Number. Actual: ' + (Infinity - NaN)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A4_T2.js b/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A4_T2.js deleted file mode 100644 index ca62b01e9..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A4_T2.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.6.2_A4_T2; -* @section: 11.6.2, 11.6.3; -* @assertion: Operator x - y produces the same result as x + (-y); -* @description: The difference of two infinities of opposite sign is the infinity of minuend sign; -*/ - -//CHECK#1 -if (Number.POSITIVE_INFINITY - Number.NEGATIVE_INFINITY !== Number.POSITIVE_INFINITY ) { - $ERROR('#1: Infinity - -Infinity === Infinity. Actual: ' + (Infinity - -Infinity)); -} - -//CHECK#2 -if (Number.NEGATIVE_INFINITY - Number.POSITIVE_INFINITY !== Number.NEGATIVE_INFINITY ) { - $ERROR('#2: -Infinity - Infinity === -Infinity. Actual: ' + (-Infinity - Infinity)); -} - - - diff --git a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A4_T3.js b/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A4_T3.js deleted file mode 100644 index 968c3f290..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A4_T3.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.6.2_A4_T3; -* @section: 11.6.2, 11.6.3; -* @assertion: Operator x - y produces the same result as x + (-y); -* @description: The difference of two infinities of the same sign is NaN; -*/ - -//CHECK#1 -if (isNaN(Number.POSITIVE_INFINITY - Number.POSITIVE_INFINITY) !== true ) { - $ERROR('#1: Infinity - Infinity === Not-a-Number. Actual: ' + (Infinity - Infinity)); -} - -//CHECK#2 -if (isNaN(Number.NEGATIVE_INFINITY - Number.NEGATIVE_INFINITY) !== true ) { - $ERROR('#2: -Infinity - -Infinity === Not-a-Number. Actual: ' + (-Infinity - -Infinity)); -} - - - diff --git a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A4_T4.js b/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A4_T4.js deleted file mode 100644 index 16fe4b375..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A4_T4.js +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.6.2_A4_T4; -* @section: 11.6.2, 11.6.3; -* @assertion: Operator x - y produces the same result as x + (-y); -* @description: The difference of an infinity and a finite value is equal to infinity of appropriate sign; -*/ - -//CHECK#1 -if (Number.POSITIVE_INFINITY - 1 !== Number.POSITIVE_INFINITY ) { - $ERROR('#1: Infinity - 1 === Infinity. Actual: ' + (Infinity - 1)); -} - -//CHECK#2 -if (-1 - Number.POSITIVE_INFINITY !== Number.NEGATIVE_INFINITY ) { - $ERROR('#2: -1 - Infinity === -Infinity. Actual: ' + (-1 - Infinity)); -} - -//CHECK#3 -if (Number.NEGATIVE_INFINITY - 1 !== Number.NEGATIVE_INFINITY ) { - $ERROR('#3: -Infinity - 1 === -Infinity. Actual: ' + (-Infinity - 1)); -} - -//CHECK#4 -if (-1 - Number.NEGATIVE_INFINITY !== Number.POSITIVE_INFINITY ) { - $ERROR('#4: -1 - -Infinity === Infinity. Actual: ' + (-1 - -Infinity)); -} - -//CHECK#5 -if (Number.POSITIVE_INFINITY - Number.MAX_VALUE !== Number.POSITIVE_INFINITY ) { - $ERROR('#5: Infinity - Number.MAX_VALUE === Infinity. Actual: ' + (Infinity - Number.MAX_VALUE)); -} - -//CHECK#6 -if (-Number.MAX_VALUE - Number.POSITIVE_INFINITY !== Number.NEGATIVE_INFINITY ) { - $ERROR('#6: -Number.MAX_VALUE - Infinity === I-nfinity. Actual: ' + (-Number.MAX_VALUE - Infinity)); -} - -//CHECK#7 -if (Number.NEGATIVE_INFINITY - Number.MAX_VALUE !== Number.NEGATIVE_INFINITY ) { - $ERROR('#7: -Infinity - Number.MAX_VALUE === -Infinity. Actual: ' + (-Infinity - Number.MAX_VALUE)); -} - -//CHECK#8 -if (-Number.MAX_VALUE - Number.NEGATIVE_INFINITY !== Number.POSITIVE_INFINITY ) { - $ERROR('#8: -Number.MAX_VALUE - -Infinity === Infinity. Actual: ' + (-Number.MAX_VALUE - -Infinity)); -} - - - diff --git a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A4_T5.js b/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A4_T5.js deleted file mode 100644 index 322cec98e..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A4_T5.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.6.2_A4_T5; -* @section: 11.6.2, 11.6.3; -* @assertion: Operator x - y produces the same result as x + (-y); -* @description: Using the rule of sum of two zeroes and the fact that a - b = a + (-b); -*/ - -//CHECK#1 -if (-0 - -0 !== 0 ) { - $ERROR('#1.1: -0 - -0 === 0. Actual: ' + (-0 - -0)); -} else { - if (1 / (-0 - -0) !== Number.POSITIVE_INFINITY) { - $ERROR('#1.2: -0 - -0 === + 0. Actual: -0'); - } -} - -//CHECK#2 -if (0 - -0 !== 0 ) { - $ERROR('#2.1: 0 - -0 === 0. Actual: ' + (0 - -0)); -} else { - if (1 / (0 - -0) !== Number.POSITIVE_INFINITY) { - $ERROR('#2.2: 0 - -0 === + 0. Actual: -0'); - } -} - -//CHECK#3 -if (-0 - 0 !== -0 ) { - $ERROR('#3.1: -0 - 0 === 0. Actual: ' + (-0 - 0)); -} else { - if (1 / (-0 - 0) !== Number.NEGATIVE_INFINITY) { - $ERROR('#3.2: -0 - 0 === - 0. Actual: +0'); - } -} - -//CHECK#4 -if (0 - 0 !== 0 ) { - $ERROR('#4.1: 0 - 0 === 0. Actual: ' + (0 - 0)); -} else { - if (1 / (0 - 0) !== Number.POSITIVE_INFINITY) { - $ERROR('#4.2: 0 - 0 === + 0. Actual: -0'); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A4_T6.js b/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A4_T6.js deleted file mode 100644 index 63a31c2b1..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A4_T6.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.6.2_A4_T6; -* @section: 11.6.2, 11.6.3; -* @assertion: Operator x - y produces the same result as x + (-y); -* @description: Using the rule of sum of a zero and a nonzero finite value and the fact that a - b = a + (-b); -*/ - -//CHECK#1 -if (1 - -0 !== 1 ) { - $ERROR('#1: 1 - -0 === 1. Actual: ' + (1 - -0)); -} - -//CHECK#2 -if (1 - 0 !== 1 ) { - $ERROR('#2: 1 - 0 === 1. Actual: ' + (1 - 0)); -} - -//CHECK#3 -if (-0 - 1 !== -1 ) { - $ERROR('#3: -0 - 1 === -1. Actual: ' + (-0 - 1)); -} - -//CHECK#4 -if (0 - 1 !== -1 ) { - $ERROR('#4: 0 - 1 === -1. Actual: ' + (0 - 1)); -} - -//CHECK#5 -if (Number.MAX_VALUE - -0 !== Number.MAX_VALUE ) { - $ERROR('#5: Number.MAX_VALUE - -0 === Number.MAX_VALUE. Actual: ' + (Number.MAX_VALUE - -0)); -} - -//CHECK#6 -if (Number.MAX_VALUE - 0 !== Number.MAX_VALUE ) { - $ERROR('#6: Number.MAX_VALUE - 0 === Number.MAX_VALUE. Actual: ' + (Number.MAX_VALUE - 0)); -} - -//CHECK#7 -if (-0 - Number.MIN_VALUE !== -Number.MIN_VALUE ) { - $ERROR('#7: -0 - Number.MIN_VALUE === -Number.MIN_VALUE. Actual: ' + (-0 - Number.MIN_VALUE)); -} - -//CHECK#8 -if (0 - Number.MIN_VALUE !== -Number.MIN_VALUE ) { - $ERROR('#8: 0 - Number.MIN_VALUE === -Number.MIN_VALUE. Actual: ' + (0 - Number.MIN_VALUE)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A4_T7.js b/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A4_T7.js deleted file mode 100644 index 274474cc7..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A4_T7.js +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.6.2_A4_T7; -* @section: 11.6.2, 11.6.3; -* @assertion: Operator x - y produces the same result as x + (-y); -* @description: The mathematical difference of two nonzero finite values of the same magnitude and same sign is +0; -*/ - -//CHECK#1 -if (Number.MIN_VALUE - Number.MIN_VALUE !== +0) { - $ERROR('#1.1: Number.MIN_VALUE - Number.MIN_VALUE === 0. Actual: ' + (Number.MIN_VALUE - Number.MIN_VALUE)); -} else { - if (1 / (Number.MIN_VALUE - Number.MIN_VALUE) !== Number.POSITIVE_INFINITY) { - $ERROR('#1.2: Number.MIN_VALUE - Number.MIN_VALUE === + 0. Actual: -0'); - } -} - -//CHECK#2 -if (-Number.MAX_VALUE - -Number.MAX_VALUE !== +0) { - $ERROR('#2.2: -Number.MAX_VALUE - -Number.MAX_VALUE === 0. Actual: ' + (-Number.MAX_VALUE - -Number.MAX_VALUE)); -} else { - if (1 / (-Number.MAX_VALUE - -Number.MAX_VALUE) !== Number.POSITIVE_INFINITY) { - $ERROR('#2.1: -Number.MAX_VALUE - -Number.MAX_VALUE === + 0. Actual: -0'); - } -} - -//CHECK#3 -if (1 / Number.MAX_VALUE - 1 / Number.MAX_VALUE !== +0) { - $ERROR('#3.1: 1 / Number.MAX_VALUE - 1 / Number.MAX_VALUE === 0. Actual: ' + (1 / Number.MAX_VALUE - 1 / Number.MAX_VALUE)); -} else { - if (1 / (1 / Number.MAX_VALUE - 1 / Number.MAX_VALUE) !== Number.POSITIVE_INFINITY) { - $ERROR('#3.2: 1 / Number.MAX_VALUE - 1 / Number.MAX_VALUE === + 0. Actual: -0'); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A4_T8.js b/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A4_T8.js deleted file mode 100644 index e25ae9409..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.6_Additive_Operators/11.6.2_The_Subtraction_operator/S11.6.2_A4_T8.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.6.2_A4_T8; -* @section: 11.6.2, 11.6.3; -* @assertion: Operator x - y produces the same result as x + (-y); -* @description: If the magnitude is too large to represent, the operation overflows and the result is then an infinity of appropriate sign; -*/ - -//CHECK#1 -if (Number.MAX_VALUE - -Number.MAX_VALUE !== Number.POSITIVE_INFINITY) { - $ERROR('#1: Number.MAX_VALUE - -Number.MAX_VALUE === Number.POSITIVE_INFINITY. Actual: ' + (Number.MAX_VALUE - -Number.MAX_VALUE)); -} - -//CHECK#2 -if (-Number.MAX_VALUE - Number.MAX_VALUE !== Number.NEGATIVE_INFINITY) { - $ERROR('#2: -Number.MAX_VALUE - umber.MAX_VALUE === Number.NEGATIVE_INFINITY. Actual: ' + (-Number.MAX_VALUE - umber.MAX_VALUE)); -} - -//CHECK#3 -if (1e+308 - -1e+308 !== Number.POSITIVE_INFINITY) { - $ERROR('#3: 1e+308 - -1e+308 === Number.POSITIVE_INFINITY. Actual: ' + (1e+308 - -1e+308)); -} - -//CHECK#4 -if (-8.99e+307 - 8.99e+307 !== Number.NEGATIVE_INFINITY) { - $ERROR('#4: -8.99e+307 - 8.99e+307 === Number.NEGATIVE_INFINITY. Actual: ' + (-8.99e+307 - 8.99e+307)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A1.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A1.js deleted file mode 100644 index 554e2e5e8..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A1.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.7.1_A1; -* @section: 11.7.1, 7.2, 7.3; -* @assertion: White Space and Line Terminator between ShiftExpression and "<<" or between "<<" and AdditiveExpression are allowed; -* @description: Checking by using eval; -*/ - -//CHECK#1 -if (eval("1\u0009<<\u00091") !== 2) { - $ERROR('#1: 1\\u0009<<\\u00091 === 2'); -} - -//CHECK#2 -if (eval("1\u000B<<\u000B1") !== 2) { - $ERROR('#2: 1\\u000B<<\\u000B1 === 2'); -} - -//CHECK#3 -if (eval("1\u000C<<\u000C1") !== 2) { - $ERROR('#3: 1\\u000C<<\\u000C1 === 2'); -} - -//CHECK#4 -if (eval("1\u0020<<\u00201") !== 2) { - $ERROR('#4: 1\\u0020<<\\u00201 === 2'); -} - -//CHECK#5 -if (eval("1\u00A0<<\u00A01") !== 2) { - $ERROR('#5: 1\\u00A0<<\\u00A01 === 2'); -} - -//CHECK#6 -if (eval("1\u000A<<\u000A1") !== 2) { - $ERROR('#6: 1\\u000A<<\\u000A1 === 2'); -} - -//CHECK#7 -if (eval("1\u000D<<\u000D1") !== 2) { - $ERROR('#7: 1\\u000D<<\\u000D1 === 2'); -} - -//CHECK#8 -if (eval("1\u2028<<\u20281") !== 2) { - $ERROR('#8: 1\\u2028<<\\u20281 === 2'); -} - -//CHECK#9 -if (eval("1\u2029<<\u20291") !== 2) { - $ERROR('#9: 1\\u2029<<\\u20291 === 2'); -} - -//CHECK#10 -if (eval("1\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029<<\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20291") !== 2) { - $ERROR('#10: 1\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029<<\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20291 === 2'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A2.1_T1.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A2.1_T1.js deleted file mode 100644 index 577a25ec3..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A2.1_T1.js +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.7.1_A2.1_T1; -* @section: 11.7.1; -* @assertion: Operator x << y uses GetValue; -* @description: Either Type is not Reference or GetBase is not null; -*/ - -//CHECK#1 -if (2 << 1 !== 4) { - $ERROR('#1: 2 << 1 === 4. Actual: ' + (2 << 1)); -} - -//CHECK#2 -var x = 2; -if (x << 1 !== 4) { - $ERROR('#2: var x = 2; x << 1 === 4. Actual: ' + (x << 1)); -} - -//CHECK#3 -var y = 1; -if (2 << y !== 4) { - $ERROR('#3: var y = 2; 2 << y === 4. Actual: ' + (2 << y)); -} - -//CHECK#4 -var x = 2; -var y = 1; -if (x << y !== 4) { - $ERROR('#4: var x = 2; var y = 1; x << y === 4. Actual: ' + (x << y)); -} - -//CHECK#5 -var objectx = new Object(); -var objecty = new Object(); -objectx.prop = 2; -objecty.prop = 1; -if (objectx.prop << objecty.prop !== 4) { - $ERROR('#5: var objectx = new Object(); var objecty = new Object(); objectx.prop = 2; objecty.prop = 1; objectx.prop << objecty.prop === 4. Actual: ' + (objectx.prop << objecty.prop)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A2.1_T2.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A2.1_T2.js deleted file mode 100644 index 01f44084c..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A2.1_T2.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.1_A2.1_T2; - * @section: 11.7.1; - * @assertion: Operator x << y uses GetValue; - * @description: If GetBase(x) is null, throw ReferenceError; -*/ - -//CHECK#1 -try { - x << 1; - $ERROR('#1.1: x << 1 throw ReferenceError. Actual: ' + (x << 1)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: x << 1 throw ReferenceError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A2.1_T3.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A2.1_T3.js deleted file mode 100644 index 2171f918a..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A2.1_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.1_A2.1_T3; - * @section: 11.7.1; - * @assertion: Operator x << y uses GetValue; - * @description: If GetBase(y) is null, throw ReferenceError; -*/ - -//CHECK#1 -try { - 1 << y; - $ERROR('#1.1: 1 << y throw ReferenceError. Actual: ' + (1 << y)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: 1 << y throw ReferenceError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A2.2_T1.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A2.2_T1.js deleted file mode 100644 index bbfd50414..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A2.2_T1.js +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.1_A2.2_T1; - * @section: 11.7.1, 8.6.2.6; - * @assertion: Operator x << y uses [[Default Value]]; - * @description: If Type(value) is Object, evaluate ToPrimitive(value, Number); - */ - -//CHECK#1 -if ({valueOf: function() {return 1}} << 1 !== 2) { - $ERROR('#1: {valueOf: function() {return 1}} << 1 === 2. Actual: ' + ({valueOf: function() {return 1}} << 1)); -} - -//CHECK#2 -if ({valueOf: function() {return 1}, toString: function() {return 0}} << 1 !== 2) { - $ERROR('#2: {valueOf: function() {return 1}, toString: function() {return 0}} << 1 === 2. Actual: ' + ({valueOf: function() {return 1}, toString: function() {return 0}} << 1)); -} - -//CHECK#3 -if ({valueOf: function() {return 1}, toString: function() {return {}}} << 1 !== 2) { - $ERROR('#3: {valueOf: function() {return 1}, toString: function() {return {}}} << 1 === 2. Actual: ' + ({valueOf: function() {return 1}, toString: function() {return {}}} << 1)); -} - -//CHECK#4 -try { - if ({valueOf: function() {return 1}, toString: function() {throw "error"}} << 1 !== 2) { - $ERROR('#4.1: {valueOf: function() {return 1}, toString: function() {throw "error"}} << 1 === 2. Actual: ' + ({valueOf: function() {return 1}, toString: function() {throw "error"}} << 1)); - } -} -catch (e) { - if (e === "error") { - $ERROR('#4.2: {valueOf: function() {return 1}, toString: function() {throw "error"}} << 1 not throw "error"'); - } else { - $ERROR('#4.3: {valueOf: function() {return 1}, toString: function() {throw "error"}} << 1 not throw Error. Actual: ' + (e)); - } -} - -//CHECK#5 -if (1 << {toString: function() {return 1}} !== 2) { - $ERROR('#5: 1 << {toString: function() {return 1}} === 2. Actual: ' + (1 << {toString: function() {return 1}})); -} - -//CHECK#6 -if (1 << {valueOf: function() {return {}}, toString: function() {return 1}} !== 2) { - $ERROR('#6: 1 << {valueOf: function() {return {}}, toString: function() {return 1}} === 2. Actual: ' + (1 << {valueOf: function() {return {}}, toString: function() {return 1}})); -} - -//CHECK#7 -try { - 1 << {valueOf: function() {throw "error"}, toString: function() {return 1}}; - $ERROR('#7.1: 1 << {valueOf: function() {throw "error"}, toString: function() {return 1}} throw "error". Actual: ' + (1 << {valueOf: function() {throw "error"}, toString: function() {return 1}})); -} -catch (e) { - if (e !== "error") { - $ERROR('#7.2: 1 << {valueOf: function() {throw "error"}, toString: function() {return 1}} throw "error". Actual: ' + (e)); - } -} - -//CHECK#8 -try { - 1 << {valueOf: function() {return {}}, toString: function() {return {}}}; - $ERROR('#8.1: 1 << {valueOf: function() {return {}}, toString: function() {return {}}} throw TypeError. Actual: ' + (1 << {valueOf: function() {return {}}, toString: function() {return {}}})); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#8.2: 1 << {valueOf: function() {return {}}, toString: function() {return {}}} throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A2.3_T1.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A2.3_T1.js deleted file mode 100644 index 5f321028b..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A2.3_T1.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.1_A2.3_T1; - * @section: 11.7.1; - * @assertion: ToNumber(first expression) is called first, and then ToNumber(second expression); - * @description: Checking with "throw"; -*/ - -//CHECK#1 -var x = { valueOf: function () { throw "x"; } }; -var y = { valueOf: function () { throw "y"; } }; -try { - x << y; - $ERROR('#1.1: var x = { valueOf: function () { throw "x"; } }; var y = { valueOf: function () { throw "y"; } }; x << y throw "x". Actual: ' + (x << y)); -} catch (e) { - if (e === "y") { - $ERROR('#1.2: ToNumber(first expression) is called first, and then ToNumber(second expression)'); - } else { - if (e !== "x") { - $ERROR('#1.3: var x = { valueOf: function () { throw "x"; } }; var y = { valueOf: function () { throw "y"; } }; x << y throw "x". Actual: ' + (e)); - } - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A2.4_T1.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A2.4_T1.js deleted file mode 100644 index 4f1396fdd..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A2.4_T1.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.1_A2.4_T1; - * @section: 11.7.1; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with "="; -*/ - -//CHECK#1 -var x = 0; -if ((x = 1) << x !== 2) { - $ERROR('#1: var x = 0; (x = 1) << x === 2. Actual: ' + ((x = 1) << x)); -} - -//CHECK#2 -var x = 0; -if (x << (x = 1) !== 0) { - $ERROR('#2: var x = 0; x << (x = 1) === 0. Actual: ' + (x << (x = 1))); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A2.4_T2.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A2.4_T2.js deleted file mode 100644 index f69382802..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A2.4_T2.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.1_A2.4_T2; - * @section: 11.7.1; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with "throw"; -*/ - -//CHECK#1 -var x = function () { throw "x"; }; -var y = function () { throw "y"; }; -try { - x() << y(); - $ERROR('#1.1: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() << y() throw "x". Actual: ' + (x() << y())); -} catch (e) { - if (e === "y") { - $ERROR('#1.2: First expression is evaluated first, and then second expression'); - } else { - if (e !== "x") { - $ERROR('#1.3: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() << y() throw "x". Actual: ' + (e)); - } - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A2.4_T3.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A2.4_T3.js deleted file mode 100644 index daf77026c..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A2.4_T3.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.1_A2.4_T3; - * @section: 11.7.1; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with undeclarated variables; -*/ - -//CHECK#1 -try { - x << (x = 1); - $ERROR('#1.1: x << (x = 1) throw ReferenceError. Actual: ' + (x << (x = 1))); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: x << (x = 1) throw ReferenceError. Actual: ' + (e)); - } -} - -//CHECK#2 -if ((y = 1) << y !== 2) { - $ERROR('#2: (y = 1) << y === 2. Actual: ' + ((y = 1) << y)); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A3_T1.1.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A3_T1.1.js deleted file mode 100644 index 1e6aef1c0..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A3_T1.1.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.1_A3_T1.1; - * @section: 11.7.1; - * @assertion: Operator x << y returns ToNumber(x) << ToNumber(y); - * @description: Type(x) and Type(y) vary between primitive boolean and Boolean object; -*/ - -//CHECK#1 -if (true << true !== 2) { - $ERROR('#1: true << true === 2. Actual: ' + (true << true)); -} - -//CHECK#2 -if (new Boolean(true) << true !== 2) { - $ERROR('#2: new Boolean(true) << true === 2. Actual: ' + (new Boolean(true) << true)); -} - -//CHECK#3 -if (true << new Boolean(true) !== 2) { - $ERROR('#3: true << new Boolean(true) === 2. Actual: ' + (true << new Boolean(true))); -} - -//CHECK#4 -if (new Boolean(true) << new Boolean(true) !== 2) { - $ERROR('#4: new Boolean(true) << new Boolean(true) === 2. Actual: ' + (new Boolean(true) << new Boolean(true))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A3_T1.2.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A3_T1.2.js deleted file mode 100644 index a6c61c1fa..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A3_T1.2.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.1_A3_T1.2; - * @section: 11.7.1; - * @assertion: Operator x << y returns ToNumber(x) << ToNumber(y); - * @description: Type(x) and Type(y) vary between primitive number and Number object; -*/ - -//CHECK#1 -if (1 << 1 !== 2) { - $ERROR('#1: 1 << 1 === 2. Actual: ' + (1 << 1)); -} - -//CHECK#2 -if (new Number(1) << 1 !== 2) { - $ERROR('#2: new Number(1) << 1 === 2. Actual: ' + (new Number(1) << 1)); -} - -//CHECK#3 -if (1 << new Number(1) !== 2) { - $ERROR('#3: 1 << new Number(1) === 2. Actual: ' + (1 << new Number(1))); -} - -//CHECK#4 -if (new Number(1) << new Number(1) !== 2) { - $ERROR('#4: new Number(1) << new Number(1) === 2. Actual: ' + (new Number(1) << new Number(1))); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A3_T1.3.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A3_T1.3.js deleted file mode 100644 index 82e40f90b..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A3_T1.3.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.1_A3_T1.3; - * @section: 11.7.1; - * @assertion: Operator x << y returns ToNumber(x) << ToNumber(y); - * @description: Type(x) and Type(y) vary between primitive string and String object; -*/ - -//CHECK#1 -if ("1" << "1" !== 2) { - $ERROR('#1: "1" << "1" === 2. Actual: ' + ("1" << "1")); -} - -//CHECK#2 -if (new String("1") << "1" !== 2) { - $ERROR('#2: new String("1") << "1" === 2. Actual: ' + (new String("1") << "1")); -} - -//CHECK#3 -if ("1" << new String("1") !== 2) { - $ERROR('#3: "1" << new String("1") === 2. Actual: ' + ("1" << new String("1"))); -} - -//CHECK#4 -if (new String("1") << new String("1") !== 2) { - $ERROR('#4: new String("1") << new String("1") === 2. Actual: ' + (new String("1") << new String("1"))); -} - -//CHECK#5 -if ("x" << "1" !== 0) { - $ERROR('#5: "x" << "1" === 0. Actual: ' + ("x" << "1")); -} - -//CHECK#6 -if ("1" << "x" !== 1) { - $ERROR('#6: "1" << "x" === 1. Actual: ' + ("1" << "x")); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A3_T1.4.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A3_T1.4.js deleted file mode 100644 index 0c3ca8ad2..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A3_T1.4.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.1_A3_T1.4; - * @section: 11.7.1; - * @assertion: Operator x << y returns ToNumber(x) << ToNumber(y); - * @description: Type(x) and Type(y) vary between Null and Undefined; - */ - -//CHECK#1 -if (null << undefined !== 0) { - $ERROR('#1: null << undefined === 0. Actual: ' + (null << undefined)); -} - -//CHECK#2 -if (undefined << null !== 0) { - $ERROR('#2: undefined << null === 0. Actual: ' + (undefined << null)); -} - -//CHECK#3 -if (undefined << undefined !== 0) { - $ERROR('#3: undefined << undefined === 0. Actual: ' + (undefined << undefined)); -} - -//CHECK#4 -if (null << null !== 0) { - $ERROR('#4: null << null === 0. Actual: ' + (null << null)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A3_T1.5.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A3_T1.5.js deleted file mode 100644 index 7a6f1590f..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A3_T1.5.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.1_A3_T1.5; - * @section: 11.7.1; - * @assertion: Operator x << y returns ToNumber(x) << ToNumber(y); - * @description: Type(x) and Type(y) vary between Object object and Function object; - */ - -//CHECK#1 -if (({} << function(){return 1}) !== 0) { - $ERROR('#1: ({} << function(){return 1}) === 0. Actual: ' + (({} << function(){return 1}))); -} - -//CHECK#2 -if ((function(){return 1} << {}) !== 0) { - $ERROR('#2: (function(){return 1} << {}) === 0. Actual: ' + ((function(){return 1} << {}))); -} - -//CHECK#3 -if ((function(){return 1} << function(){return 1}) !== 0) { - $ERROR('#3: (function(){return 1} << function(){return 1}) === 0. Actual: ' + ((function(){return 1} << function(){return 1}))); -} - -//CHECK#4 -if (({} << {}) !== 0) { - $ERROR('#4: ({} << {}) === 0. Actual: ' + (({} << {}))); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A3_T2.1.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A3_T2.1.js deleted file mode 100644 index 69549badc..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A3_T2.1.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.1_A3_T2.1; - * @section: 11.7.1; - * @assertion: Operator x << y returns ToNumber(x) << ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Boolean (primitive and object); - */ - -//CHECK#1 -if (true << 1 !== 2) { - $ERROR('#1: true << 1 === 2. Actual: ' + (true << 1)); -} - -//CHECK#2 -if (1 << true !== 2) { - $ERROR('#2: 1 << true === 2. Actual: ' + (1 << true)); -} - -//CHECK#3 -if (new Boolean(true) << 1 !== 2) { - $ERROR('#3: new Boolean(true) << 1 === 2. Actual: ' + (new Boolean(true) << 1)); -} - -//CHECK#4 -if (1 << new Boolean(true) !== 2) { - $ERROR('#4: 1 << new Boolean(true) === 2. Actual: ' + (1 << new Boolean(true))); -} - -//CHECK#5 -if (true << new Number(1) !== 2) { - $ERROR('#5: true << new Number(1) === 2. Actual: ' + (true << new Number(1))); -} - -//CHECK#6 -if (new Number(1) << true !== 2) { - $ERROR('#6: new Number(1) << true === 2. Actual: ' + (new Number(1) << true)); -} - -//CHECK#7 -if (new Boolean(true) << new Number(1) !== 2) { - $ERROR('#7: new Boolean(true) << new Number(1) === 2. Actual: ' + (new Boolean(true) << new Number(1))); -} - -//CHECK#8 -if (new Number(1) << new Boolean(true) !== 2) { - $ERROR('#8: new Number(1) << new Boolean(true) === 2. Actual: ' + (new Number(1) << new Boolean(true))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A3_T2.2.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A3_T2.2.js deleted file mode 100644 index 222347321..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A3_T2.2.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.1_A3_T2.2; - * @section: 11.7.1; - * @assertion: Operator x << y returns ToNumber(x) << ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and String (primitive and object); -*/ - -//CHECK#1 -if ("1" << 1 !== 2) { - $ERROR('#1: "1" << 1 === 2. Actual: ' + ("1" << 1)); -} - -//CHECK#2 -if (1 << "1" !== 2) { - $ERROR('#2: 1 << "1" === 2. Actual: ' + (1 << "1")); -} - -//CHECK#3 -if (new String("1") << 1 !== 2) { - $ERROR('#3: new String("1") << 1 === 2. Actual: ' + (new String("1") << 1)); -} - -//CHECK#4 -if (1 << new String("1") !== 2) { - $ERROR('#4: 1 << new String("1") === 2. Actual: ' + (1 << new String("1"))); -} - -//CHECK#5 -if ("1" << new Number(1) !== 2) { - $ERROR('#5: "1" << new Number(1) === 2. Actual: ' + ("1" << new Number(1))); -} - -//CHECK#6 -if (new Number(1) << "1" !== 2) { - $ERROR('#6: new Number(1) << "1" === 2. Actual: ' + (new Number(1) << "1")); -} - -//CHECK#7 -if (new String("1") << new Number(1) !== 2) { - $ERROR('#7: new String("1") << new Number(1) === 2. Actual: ' + (new String("1") << new Number(1))); -} - -//CHECK#8 -if (new Number(1) << new String("1") !== 2) { - $ERROR('#8: new Number(1) << new String("1") === 2. Actual: ' + (new Number(1) << new String("1"))); -} - -//CHECK#9 -if ("x" << 1 !== 0) { - $ERROR('#9: "x" << 1 === 0. Actual: ' + ("x" << 1)); -} - -//CHECK#10 -if (1 << "x" !== 1) { - $ERROR('#10: 1 << "x" === 1. Actual: ' + (1 << "x")); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A3_T2.3.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A3_T2.3.js deleted file mode 100644 index 3737cba0e..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A3_T2.3.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.1_A3_T2.3; - * @section: 11.7.1; - * @assertion: Operator x << y returns ToNumber(x) << ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Null; - */ - -//CHECK#1 -if (1 << null !== 1) { - $ERROR('#1: 1 << null === 1. Actual: ' + (1 << null)); -} - -//CHECK#2 -if (null << 1 !== 0) { - $ERROR('#2: null << 1 === 0. Actual: ' + (null << 1)); -} - -//CHECK#3 -if (new Number(1) << null !== 1) { - $ERROR('#3: new Number(1) << null === 1. Actual: ' + (new Number(1) << null)); -} - -//CHECK#4 -if (null << new Number(1) !== 0) { - $ERROR('#4: null << new Number(1) === 0. Actual: ' + (null << new Number(1))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A3_T2.4.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A3_T2.4.js deleted file mode 100644 index f3f965d7d..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A3_T2.4.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.1_A3_T2.4; - * @section: 11.7.1; - * @assertion: Operator x << y returns ToNumber(x) << ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Undefined; - */ - -//CHECK#1 -if (1 << undefined !== 1) { - $ERROR('#1: 1 << undefined === 1. Actual: ' + (1 << undefined)); -} - -//CHECK#2 -if (undefined << 1 !== 0) { - $ERROR('#2: undefined << 1 === 0. Actual: ' + (undefined << 1)); -} - -//CHECK#3 -if (new Number(1) << undefined !== 1) { - $ERROR('#3: new Number(1) << undefined === 1. Actual: ' + (new Number(1) << undefined)); -} - -//CHECK#4 -if (undefined << new Number(1) !== 0) { - $ERROR('#4: undefined << new Number(1) === 0. Actual: ' + (undefined << new Number(1))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A3_T2.5.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A3_T2.5.js deleted file mode 100644 index f1efe3410..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A3_T2.5.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.1_A3_T2.5; - * @section: 11.7.1; - * @assertion: Operator x << y returns ToNumber(x) << ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between String (primitive or object) or Boolean (primitive and object); -*/ - -//CHECK#1 -if (true << "1" !== 2) { - $ERROR('#1: true << "1" === 2. Actual: ' + (true << "1")); -} - -//CHECK#2 -if ("1" << true !== 2) { - $ERROR('#2: "1" << true === 2. Actual: ' + ("1" << true)); -} - -//CHECK#3 -if (new Boolean(true) << "1" !== 2) { - $ERROR('#3: new Boolean(true) << "1" === 2. Actual: ' + (new Boolean(true) << "1")); -} - -//CHECK#4 -if ("1" << new Boolean(true) !== 2) { - $ERROR('#4: "1" << new Boolean(true) === 2. Actual: ' + ("1" << new Boolean(true))); -} - -//CHECK#5 -if (true << new String("1") !== 2) { - $ERROR('#5: true << new String("1") === 2. Actual: ' + (true << new String("1"))); -} - -//CHECK#6 -if (new String("1") << true !== 2) { - $ERROR('#6: new String("1") << true === 2. Actual: ' + (new String("1") << true)); -} - -//CHECK#7 -if (new Boolean(true) << new String("1") !== 2) { - $ERROR('#7: new Boolean(true) << new String("1") === 2. Actual: ' + (new Boolean(true) << new String("1"))); -} - -//CHECK#8 -if (new String("1") << new Boolean(true) !== 2) { - $ERROR('#8: new String("1") << new Boolean(true) === 2. Actual: ' + (new String("1") << new Boolean(true))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A3_T2.6.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A3_T2.6.js deleted file mode 100644 index e1111d7c9..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A3_T2.6.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.1_A3_T2.6; - * @section: 11.7.1; - * @assertion: Operator x << y returns ToNumber(x) << ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between String (primitive or object) and Undefined; - */ - -//CHECK#1 -if ("1" << undefined !== 1) { - $ERROR('#1: "1" << undefined === 1. Actual: ' + ("1" << undefined)); -} - -//CHECK#2 -if (undefined << "1" !== 0) { - $ERROR('#2: undefined << "1" === 0. Actual: ' + (undefined << "1")); -} - -//CHECK#3 -if (new String("1") << undefined !== 1) { - $ERROR('#3: new String("1") << undefined === 1. Actual: ' + (new String("1") << undefined)); -} - -//CHECK#4 -if (undefined << new String("1") !== 0) { - $ERROR('#4: undefined << new String("1") === 0. Actual: ' + (undefined << new String("1"))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A3_T2.7.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A3_T2.7.js deleted file mode 100644 index b7b0cebc7..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A3_T2.7.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.1_A3_T2.7; - * @section: 11.7.1; - * @assertion: Operator x << y returns ToNumber(x) << ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between String (primitive or object) and Null; - */ - -//CHECK#1 -if ("1" << null !== 1) { - $ERROR('#1: "1" << null === 1. Actual: ' + ("1" << null)); -} - -//CHECK#2 -if (null << "1" !== 0) { - $ERROR('#2: null << "1" === 0. Actual: ' + (null << "1")); -} - -//CHECK#3 -if (new String("1") << null !== 1) { - $ERROR('#3: new String("1") << null === 1. Actual: ' + (new String("1") << null)); -} - -//CHECK#4 -if (null << new String("1") !== 0) { - $ERROR('#4: null << new String("1") === 0. Actual: ' + (null << new String("1"))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A3_T2.8.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A3_T2.8.js deleted file mode 100644 index 8b5728949..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A3_T2.8.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.1_A3_T2.8; - * @section: 11.7.1; - * @assertion: Operator x << y returns ToNumber(x) << ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Undefined; - */ - -//CHECK#1 -if (true << undefined !== 1) { - $ERROR('#1: true << undefined === 1. Actual: ' + (true << undefined)); -} - -//CHECK#2 -if (undefined << true !== 0) { - $ERROR('#2: undefined << true === 0. Actual: ' + (undefined << true)); -} - -//CHECK#3 -if (new Boolean(true) << undefined !== 1) { - $ERROR('#3: new Boolean(true) << undefined === 1. Actual: ' + (new Boolean(true) << undefined)); -} - -//CHECK#4 -if (undefined << new Boolean(true) !== 0) { - $ERROR('#4: undefined << new Boolean(true) === 0. Actual: ' + (undefined << new Boolean(true))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A3_T2.9.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A3_T2.9.js deleted file mode 100644 index 2d7ad7913..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A3_T2.9.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.1_A3_T2.9; - * @section: 11.7.1; - * @assertion: Operator x << y returns ToNumber(x) << ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Null; - */ - -//CHECK#1 -if (true << null !== 1) { - $ERROR('#1: true << null === 1. Actual: ' + (true << null)); -} - -//CHECK#2 -if (null << true !== 0) { - $ERROR('#2: null << true === 0. Actual: ' + (null << true)); -} - -//CHECK#3 -if (new Boolean(true) << null !== 1) { - $ERROR('#3: new Boolean(true) << null === 1. Actual: ' + (new Boolean(true) << null)); -} - -//CHECK#4 -if (null << new Boolean(true) !== 0) { - $ERROR('#4: null << new Boolean(true) === 0. Actual: ' + (null << new Boolean(true))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A4_T1.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A4_T1.js deleted file mode 100644 index bd16822e2..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A4_T1.js +++ /dev/null @@ -1,2570 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.1_A4_T1; - * @section: 11.7.1; - * @assertion: Check operator x << y in distinct points; - * @description: ShiftExpression = -2^n, n = 0...15; - */ - -//CHECK - -if (-1 << 0 !== -1) { - $ERROR('#1: -1 << 0 === -1. Actual: ' + (-1 << 0)); -} - - -if (-2 << 0 !== -2) { - $ERROR('#2: -2 << 0 === -2. Actual: ' + (-2 << 0)); -} - - -if (-4 << 0 !== -4) { - $ERROR('#3: -4 << 0 === -4. Actual: ' + (-4 << 0)); -} - - -if (-8 << 0 !== -8) { - $ERROR('#4: -8 << 0 === -8. Actual: ' + (-8 << 0)); -} - - -if (-16 << 0 !== -16) { - $ERROR('#5: -16 << 0 === -16. Actual: ' + (-16 << 0)); -} - - -if (-32 << 0 !== -32) { - $ERROR('#6: -32 << 0 === -32. Actual: ' + (-32 << 0)); -} - - -if (-64 << 0 !== -64) { - $ERROR('#7: -64 << 0 === -64. Actual: ' + (-64 << 0)); -} - - -if (-128 << 0 !== -128) { - $ERROR('#8: -128 << 0 === -128. Actual: ' + (-128 << 0)); -} - - -if (-256 << 0 !== -256) { - $ERROR('#9: -256 << 0 === -256. Actual: ' + (-256 << 0)); -} - - -if (-512 << 0 !== -512) { - $ERROR('#10: -512 << 0 === -512. Actual: ' + (-512 << 0)); -} - - -if (-1024 << 0 !== -1024) { - $ERROR('#11: -1024 << 0 === -1024. Actual: ' + (-1024 << 0)); -} - - -if (-2048 << 0 !== -2048) { - $ERROR('#12: -2048 << 0 === -2048. Actual: ' + (-2048 << 0)); -} - - -if (-4096 << 0 !== -4096) { - $ERROR('#13: -4096 << 0 === -4096. Actual: ' + (-4096 << 0)); -} - - -if (-8192 << 0 !== -8192) { - $ERROR('#14: -8192 << 0 === -8192. Actual: ' + (-8192 << 0)); -} - - -if (-16384 << 0 !== -16384) { - $ERROR('#15: -16384 << 0 === -16384. Actual: ' + (-16384 << 0)); -} - - -if (-32768 << 0 !== -32768) { - $ERROR('#16: -32768 << 0 === -32768. Actual: ' + (-32768 << 0)); -} - - -if (-65536 << 0 !== -65536) { - $ERROR('#17: -65536 << 0 === -65536. Actual: ' + (-65536 << 0)); -} - - -if (-131072 << 0 !== -131072) { - $ERROR('#18: -131072 << 0 === -131072. Actual: ' + (-131072 << 0)); -} - - -if (-262144 << 0 !== -262144) { - $ERROR('#19: -262144 << 0 === -262144. Actual: ' + (-262144 << 0)); -} - - -if (-524288 << 0 !== -524288) { - $ERROR('#20: -524288 << 0 === -524288. Actual: ' + (-524288 << 0)); -} - - -if (-1048576 << 0 !== -1048576) { - $ERROR('#21: -1048576 << 0 === -1048576. Actual: ' + (-1048576 << 0)); -} - - -if (-2097152 << 0 !== -2097152) { - $ERROR('#22: -2097152 << 0 === -2097152. Actual: ' + (-2097152 << 0)); -} - - -if (-4194304 << 0 !== -4194304) { - $ERROR('#23: -4194304 << 0 === -4194304. Actual: ' + (-4194304 << 0)); -} - - -if (-8388608 << 0 !== -8388608) { - $ERROR('#24: -8388608 << 0 === -8388608. Actual: ' + (-8388608 << 0)); -} - - -if (-16777216 << 0 !== -16777216) { - $ERROR('#25: -16777216 << 0 === -16777216. Actual: ' + (-16777216 << 0)); -} - - -if (-33554432 << 0 !== -33554432) { - $ERROR('#26: -33554432 << 0 === -33554432. Actual: ' + (-33554432 << 0)); -} - - -if (-67108864 << 0 !== -67108864) { - $ERROR('#27: -67108864 << 0 === -67108864. Actual: ' + (-67108864 << 0)); -} - - -if (-134217728 << 0 !== -134217728) { - $ERROR('#28: -134217728 << 0 === -134217728. Actual: ' + (-134217728 << 0)); -} - - -if (-268435456 << 0 !== -268435456) { - $ERROR('#29: -268435456 << 0 === -268435456. Actual: ' + (-268435456 << 0)); -} - - -if (-536870912 << 0 !== -536870912) { - $ERROR('#30: -536870912 << 0 === -536870912. Actual: ' + (-536870912 << 0)); -} - - -if (-1073741824 << 0 !== -1073741824) { - $ERROR('#31: -1073741824 << 0 === -1073741824. Actual: ' + (-1073741824 << 0)); -} - - -if (-2147483648 << 0 !== -2147483648) { - $ERROR('#32: -2147483648 << 0 === -2147483648. Actual: ' + (-2147483648 << 0)); -} - - -if (-1 << 1 !== -2) { - $ERROR('#33: -1 << 1 === -2. Actual: ' + (-1 << 1)); -} - - -if (-2 << 1 !== -4) { - $ERROR('#34: -2 << 1 === -4. Actual: ' + (-2 << 1)); -} - - -if (-4 << 1 !== -8) { - $ERROR('#35: -4 << 1 === -8. Actual: ' + (-4 << 1)); -} - - -if (-8 << 1 !== -16) { - $ERROR('#36: -8 << 1 === -16. Actual: ' + (-8 << 1)); -} - - -if (-16 << 1 !== -32) { - $ERROR('#37: -16 << 1 === -32. Actual: ' + (-16 << 1)); -} - - -if (-32 << 1 !== -64) { - $ERROR('#38: -32 << 1 === -64. Actual: ' + (-32 << 1)); -} - - -if (-64 << 1 !== -128) { - $ERROR('#39: -64 << 1 === -128. Actual: ' + (-64 << 1)); -} - - -if (-128 << 1 !== -256) { - $ERROR('#40: -128 << 1 === -256. Actual: ' + (-128 << 1)); -} - - -if (-256 << 1 !== -512) { - $ERROR('#41: -256 << 1 === -512. Actual: ' + (-256 << 1)); -} - - -if (-512 << 1 !== -1024) { - $ERROR('#42: -512 << 1 === -1024. Actual: ' + (-512 << 1)); -} - - -if (-1024 << 1 !== -2048) { - $ERROR('#43: -1024 << 1 === -2048. Actual: ' + (-1024 << 1)); -} - - -if (-2048 << 1 !== -4096) { - $ERROR('#44: -2048 << 1 === -4096. Actual: ' + (-2048 << 1)); -} - - -if (-4096 << 1 !== -8192) { - $ERROR('#45: -4096 << 1 === -8192. Actual: ' + (-4096 << 1)); -} - - -if (-8192 << 1 !== -16384) { - $ERROR('#46: -8192 << 1 === -16384. Actual: ' + (-8192 << 1)); -} - - -if (-16384 << 1 !== -32768) { - $ERROR('#47: -16384 << 1 === -32768. Actual: ' + (-16384 << 1)); -} - - -if (-32768 << 1 !== -65536) { - $ERROR('#48: -32768 << 1 === -65536. Actual: ' + (-32768 << 1)); -} - - -if (-65536 << 1 !== -131072) { - $ERROR('#49: -65536 << 1 === -131072. Actual: ' + (-65536 << 1)); -} - - -if (-131072 << 1 !== -262144) { - $ERROR('#50: -131072 << 1 === -262144. Actual: ' + (-131072 << 1)); -} - - -if (-262144 << 1 !== -524288) { - $ERROR('#51: -262144 << 1 === -524288. Actual: ' + (-262144 << 1)); -} - - -if (-524288 << 1 !== -1048576) { - $ERROR('#52: -524288 << 1 === -1048576. Actual: ' + (-524288 << 1)); -} - - -if (-1048576 << 1 !== -2097152) { - $ERROR('#53: -1048576 << 1 === -2097152. Actual: ' + (-1048576 << 1)); -} - - -if (-2097152 << 1 !== -4194304) { - $ERROR('#54: -2097152 << 1 === -4194304. Actual: ' + (-2097152 << 1)); -} - - -if (-4194304 << 1 !== -8388608) { - $ERROR('#55: -4194304 << 1 === -8388608. Actual: ' + (-4194304 << 1)); -} - - -if (-8388608 << 1 !== -16777216) { - $ERROR('#56: -8388608 << 1 === -16777216. Actual: ' + (-8388608 << 1)); -} - - -if (-16777216 << 1 !== -33554432) { - $ERROR('#57: -16777216 << 1 === -33554432. Actual: ' + (-16777216 << 1)); -} - - -if (-33554432 << 1 !== -67108864) { - $ERROR('#58: -33554432 << 1 === -67108864. Actual: ' + (-33554432 << 1)); -} - - -if (-67108864 << 1 !== -134217728) { - $ERROR('#59: -67108864 << 1 === -134217728. Actual: ' + (-67108864 << 1)); -} - - -if (-134217728 << 1 !== -268435456) { - $ERROR('#60: -134217728 << 1 === -268435456. Actual: ' + (-134217728 << 1)); -} - - -if (-268435456 << 1 !== -536870912) { - $ERROR('#61: -268435456 << 1 === -536870912. Actual: ' + (-268435456 << 1)); -} - - -if (-536870912 << 1 !== -1073741824) { - $ERROR('#62: -536870912 << 1 === -1073741824. Actual: ' + (-536870912 << 1)); -} - - -if (-1073741824 << 1 !== -2147483648) { - $ERROR('#63: -1073741824 << 1 === -2147483648. Actual: ' + (-1073741824 << 1)); -} - - -if (-2147483648 << 1 !== 0) { - $ERROR('#64: -2147483648 << 1 === 0. Actual: ' + (-2147483648 << 1)); -} - - -if (-1 << 2 !== -4) { - $ERROR('#65: -1 << 2 === -4. Actual: ' + (-1 << 2)); -} - - -if (-2 << 2 !== -8) { - $ERROR('#66: -2 << 2 === -8. Actual: ' + (-2 << 2)); -} - - -if (-4 << 2 !== -16) { - $ERROR('#67: -4 << 2 === -16. Actual: ' + (-4 << 2)); -} - - -if (-8 << 2 !== -32) { - $ERROR('#68: -8 << 2 === -32. Actual: ' + (-8 << 2)); -} - - -if (-16 << 2 !== -64) { - $ERROR('#69: -16 << 2 === -64. Actual: ' + (-16 << 2)); -} - - -if (-32 << 2 !== -128) { - $ERROR('#70: -32 << 2 === -128. Actual: ' + (-32 << 2)); -} - - -if (-64 << 2 !== -256) { - $ERROR('#71: -64 << 2 === -256. Actual: ' + (-64 << 2)); -} - - -if (-128 << 2 !== -512) { - $ERROR('#72: -128 << 2 === -512. Actual: ' + (-128 << 2)); -} - - -if (-256 << 2 !== -1024) { - $ERROR('#73: -256 << 2 === -1024. Actual: ' + (-256 << 2)); -} - - -if (-512 << 2 !== -2048) { - $ERROR('#74: -512 << 2 === -2048. Actual: ' + (-512 << 2)); -} - - -if (-1024 << 2 !== -4096) { - $ERROR('#75: -1024 << 2 === -4096. Actual: ' + (-1024 << 2)); -} - - -if (-2048 << 2 !== -8192) { - $ERROR('#76: -2048 << 2 === -8192. Actual: ' + (-2048 << 2)); -} - - -if (-4096 << 2 !== -16384) { - $ERROR('#77: -4096 << 2 === -16384. Actual: ' + (-4096 << 2)); -} - - -if (-8192 << 2 !== -32768) { - $ERROR('#78: -8192 << 2 === -32768. Actual: ' + (-8192 << 2)); -} - - -if (-16384 << 2 !== -65536) { - $ERROR('#79: -16384 << 2 === -65536. Actual: ' + (-16384 << 2)); -} - - -if (-32768 << 2 !== -131072) { - $ERROR('#80: -32768 << 2 === -131072. Actual: ' + (-32768 << 2)); -} - - -if (-65536 << 2 !== -262144) { - $ERROR('#81: -65536 << 2 === -262144. Actual: ' + (-65536 << 2)); -} - - -if (-131072 << 2 !== -524288) { - $ERROR('#82: -131072 << 2 === -524288. Actual: ' + (-131072 << 2)); -} - - -if (-262144 << 2 !== -1048576) { - $ERROR('#83: -262144 << 2 === -1048576. Actual: ' + (-262144 << 2)); -} - - -if (-524288 << 2 !== -2097152) { - $ERROR('#84: -524288 << 2 === -2097152. Actual: ' + (-524288 << 2)); -} - - -if (-1048576 << 2 !== -4194304) { - $ERROR('#85: -1048576 << 2 === -4194304. Actual: ' + (-1048576 << 2)); -} - - -if (-2097152 << 2 !== -8388608) { - $ERROR('#86: -2097152 << 2 === -8388608. Actual: ' + (-2097152 << 2)); -} - - -if (-4194304 << 2 !== -16777216) { - $ERROR('#87: -4194304 << 2 === -16777216. Actual: ' + (-4194304 << 2)); -} - - -if (-8388608 << 2 !== -33554432) { - $ERROR('#88: -8388608 << 2 === -33554432. Actual: ' + (-8388608 << 2)); -} - - -if (-16777216 << 2 !== -67108864) { - $ERROR('#89: -16777216 << 2 === -67108864. Actual: ' + (-16777216 << 2)); -} - - -if (-33554432 << 2 !== -134217728) { - $ERROR('#90: -33554432 << 2 === -134217728. Actual: ' + (-33554432 << 2)); -} - - -if (-67108864 << 2 !== -268435456) { - $ERROR('#91: -67108864 << 2 === -268435456. Actual: ' + (-67108864 << 2)); -} - - -if (-134217728 << 2 !== -536870912) { - $ERROR('#92: -134217728 << 2 === -536870912. Actual: ' + (-134217728 << 2)); -} - - -if (-268435456 << 2 !== -1073741824) { - $ERROR('#93: -268435456 << 2 === -1073741824. Actual: ' + (-268435456 << 2)); -} - - -if (-536870912 << 2 !== -2147483648) { - $ERROR('#94: -536870912 << 2 === -2147483648. Actual: ' + (-536870912 << 2)); -} - - -if (-1073741824 << 2 !== 0) { - $ERROR('#95: -1073741824 << 2 === 0. Actual: ' + (-1073741824 << 2)); -} - - -if (-2147483648 << 2 !== 0) { - $ERROR('#96: -2147483648 << 2 === 0. Actual: ' + (-2147483648 << 2)); -} - - -if (-1 << 3 !== -8) { - $ERROR('#97: -1 << 3 === -8. Actual: ' + (-1 << 3)); -} - - -if (-2 << 3 !== -16) { - $ERROR('#98: -2 << 3 === -16. Actual: ' + (-2 << 3)); -} - - -if (-4 << 3 !== -32) { - $ERROR('#99: -4 << 3 === -32. Actual: ' + (-4 << 3)); -} - - -if (-8 << 3 !== -64) { - $ERROR('#100: -8 << 3 === -64. Actual: ' + (-8 << 3)); -} - - -if (-16 << 3 !== -128) { - $ERROR('#101: -16 << 3 === -128. Actual: ' + (-16 << 3)); -} - - -if (-32 << 3 !== -256) { - $ERROR('#102: -32 << 3 === -256. Actual: ' + (-32 << 3)); -} - - -if (-64 << 3 !== -512) { - $ERROR('#103: -64 << 3 === -512. Actual: ' + (-64 << 3)); -} - - -if (-128 << 3 !== -1024) { - $ERROR('#104: -128 << 3 === -1024. Actual: ' + (-128 << 3)); -} - - -if (-256 << 3 !== -2048) { - $ERROR('#105: -256 << 3 === -2048. Actual: ' + (-256 << 3)); -} - - -if (-512 << 3 !== -4096) { - $ERROR('#106: -512 << 3 === -4096. Actual: ' + (-512 << 3)); -} - - -if (-1024 << 3 !== -8192) { - $ERROR('#107: -1024 << 3 === -8192. Actual: ' + (-1024 << 3)); -} - - -if (-2048 << 3 !== -16384) { - $ERROR('#108: -2048 << 3 === -16384. Actual: ' + (-2048 << 3)); -} - - -if (-4096 << 3 !== -32768) { - $ERROR('#109: -4096 << 3 === -32768. Actual: ' + (-4096 << 3)); -} - - -if (-8192 << 3 !== -65536) { - $ERROR('#110: -8192 << 3 === -65536. Actual: ' + (-8192 << 3)); -} - - -if (-16384 << 3 !== -131072) { - $ERROR('#111: -16384 << 3 === -131072. Actual: ' + (-16384 << 3)); -} - - -if (-32768 << 3 !== -262144) { - $ERROR('#112: -32768 << 3 === -262144. Actual: ' + (-32768 << 3)); -} - - -if (-65536 << 3 !== -524288) { - $ERROR('#113: -65536 << 3 === -524288. Actual: ' + (-65536 << 3)); -} - - -if (-131072 << 3 !== -1048576) { - $ERROR('#114: -131072 << 3 === -1048576. Actual: ' + (-131072 << 3)); -} - - -if (-262144 << 3 !== -2097152) { - $ERROR('#115: -262144 << 3 === -2097152. Actual: ' + (-262144 << 3)); -} - - -if (-524288 << 3 !== -4194304) { - $ERROR('#116: -524288 << 3 === -4194304. Actual: ' + (-524288 << 3)); -} - - -if (-1048576 << 3 !== -8388608) { - $ERROR('#117: -1048576 << 3 === -8388608. Actual: ' + (-1048576 << 3)); -} - - -if (-2097152 << 3 !== -16777216) { - $ERROR('#118: -2097152 << 3 === -16777216. Actual: ' + (-2097152 << 3)); -} - - -if (-4194304 << 3 !== -33554432) { - $ERROR('#119: -4194304 << 3 === -33554432. Actual: ' + (-4194304 << 3)); -} - - -if (-8388608 << 3 !== -67108864) { - $ERROR('#120: -8388608 << 3 === -67108864. Actual: ' + (-8388608 << 3)); -} - - -if (-16777216 << 3 !== -134217728) { - $ERROR('#121: -16777216 << 3 === -134217728. Actual: ' + (-16777216 << 3)); -} - - -if (-33554432 << 3 !== -268435456) { - $ERROR('#122: -33554432 << 3 === -268435456. Actual: ' + (-33554432 << 3)); -} - - -if (-67108864 << 3 !== -536870912) { - $ERROR('#123: -67108864 << 3 === -536870912. Actual: ' + (-67108864 << 3)); -} - - -if (-134217728 << 3 !== -1073741824) { - $ERROR('#124: -134217728 << 3 === -1073741824. Actual: ' + (-134217728 << 3)); -} - - -if (-268435456 << 3 !== -2147483648) { - $ERROR('#125: -268435456 << 3 === -2147483648. Actual: ' + (-268435456 << 3)); -} - - -if (-536870912 << 3 !== 0) { - $ERROR('#126: -536870912 << 3 === 0. Actual: ' + (-536870912 << 3)); -} - - -if (-1073741824 << 3 !== 0) { - $ERROR('#127: -1073741824 << 3 === 0. Actual: ' + (-1073741824 << 3)); -} - - -if (-2147483648 << 3 !== 0) { - $ERROR('#128: -2147483648 << 3 === 0. Actual: ' + (-2147483648 << 3)); -} - - -if (-1 << 4 !== -16) { - $ERROR('#129: -1 << 4 === -16. Actual: ' + (-1 << 4)); -} - - -if (-2 << 4 !== -32) { - $ERROR('#130: -2 << 4 === -32. Actual: ' + (-2 << 4)); -} - - -if (-4 << 4 !== -64) { - $ERROR('#131: -4 << 4 === -64. Actual: ' + (-4 << 4)); -} - - -if (-8 << 4 !== -128) { - $ERROR('#132: -8 << 4 === -128. Actual: ' + (-8 << 4)); -} - - -if (-16 << 4 !== -256) { - $ERROR('#133: -16 << 4 === -256. Actual: ' + (-16 << 4)); -} - - -if (-32 << 4 !== -512) { - $ERROR('#134: -32 << 4 === -512. Actual: ' + (-32 << 4)); -} - - -if (-64 << 4 !== -1024) { - $ERROR('#135: -64 << 4 === -1024. Actual: ' + (-64 << 4)); -} - - -if (-128 << 4 !== -2048) { - $ERROR('#136: -128 << 4 === -2048. Actual: ' + (-128 << 4)); -} - - -if (-256 << 4 !== -4096) { - $ERROR('#137: -256 << 4 === -4096. Actual: ' + (-256 << 4)); -} - - -if (-512 << 4 !== -8192) { - $ERROR('#138: -512 << 4 === -8192. Actual: ' + (-512 << 4)); -} - - -if (-1024 << 4 !== -16384) { - $ERROR('#139: -1024 << 4 === -16384. Actual: ' + (-1024 << 4)); -} - - -if (-2048 << 4 !== -32768) { - $ERROR('#140: -2048 << 4 === -32768. Actual: ' + (-2048 << 4)); -} - - -if (-4096 << 4 !== -65536) { - $ERROR('#141: -4096 << 4 === -65536. Actual: ' + (-4096 << 4)); -} - - -if (-8192 << 4 !== -131072) { - $ERROR('#142: -8192 << 4 === -131072. Actual: ' + (-8192 << 4)); -} - - -if (-16384 << 4 !== -262144) { - $ERROR('#143: -16384 << 4 === -262144. Actual: ' + (-16384 << 4)); -} - - -if (-32768 << 4 !== -524288) { - $ERROR('#144: -32768 << 4 === -524288. Actual: ' + (-32768 << 4)); -} - - -if (-65536 << 4 !== -1048576) { - $ERROR('#145: -65536 << 4 === -1048576. Actual: ' + (-65536 << 4)); -} - - -if (-131072 << 4 !== -2097152) { - $ERROR('#146: -131072 << 4 === -2097152. Actual: ' + (-131072 << 4)); -} - - -if (-262144 << 4 !== -4194304) { - $ERROR('#147: -262144 << 4 === -4194304. Actual: ' + (-262144 << 4)); -} - - -if (-524288 << 4 !== -8388608) { - $ERROR('#148: -524288 << 4 === -8388608. Actual: ' + (-524288 << 4)); -} - - -if (-1048576 << 4 !== -16777216) { - $ERROR('#149: -1048576 << 4 === -16777216. Actual: ' + (-1048576 << 4)); -} - - -if (-2097152 << 4 !== -33554432) { - $ERROR('#150: -2097152 << 4 === -33554432. Actual: ' + (-2097152 << 4)); -} - - -if (-4194304 << 4 !== -67108864) { - $ERROR('#151: -4194304 << 4 === -67108864. Actual: ' + (-4194304 << 4)); -} - - -if (-8388608 << 4 !== -134217728) { - $ERROR('#152: -8388608 << 4 === -134217728. Actual: ' + (-8388608 << 4)); -} - - -if (-16777216 << 4 !== -268435456) { - $ERROR('#153: -16777216 << 4 === -268435456. Actual: ' + (-16777216 << 4)); -} - - -if (-33554432 << 4 !== -536870912) { - $ERROR('#154: -33554432 << 4 === -536870912. Actual: ' + (-33554432 << 4)); -} - - -if (-67108864 << 4 !== -1073741824) { - $ERROR('#155: -67108864 << 4 === -1073741824. Actual: ' + (-67108864 << 4)); -} - - -if (-134217728 << 4 !== -2147483648) { - $ERROR('#156: -134217728 << 4 === -2147483648. Actual: ' + (-134217728 << 4)); -} - - -if (-268435456 << 4 !== 0) { - $ERROR('#157: -268435456 << 4 === 0. Actual: ' + (-268435456 << 4)); -} - - -if (-536870912 << 4 !== 0) { - $ERROR('#158: -536870912 << 4 === 0. Actual: ' + (-536870912 << 4)); -} - - -if (-1073741824 << 4 !== 0) { - $ERROR('#159: -1073741824 << 4 === 0. Actual: ' + (-1073741824 << 4)); -} - - -if (-2147483648 << 4 !== 0) { - $ERROR('#160: -2147483648 << 4 === 0. Actual: ' + (-2147483648 << 4)); -} - - -if (-1 << 5 !== -32) { - $ERROR('#161: -1 << 5 === -32. Actual: ' + (-1 << 5)); -} - - -if (-2 << 5 !== -64) { - $ERROR('#162: -2 << 5 === -64. Actual: ' + (-2 << 5)); -} - - -if (-4 << 5 !== -128) { - $ERROR('#163: -4 << 5 === -128. Actual: ' + (-4 << 5)); -} - - -if (-8 << 5 !== -256) { - $ERROR('#164: -8 << 5 === -256. Actual: ' + (-8 << 5)); -} - - -if (-16 << 5 !== -512) { - $ERROR('#165: -16 << 5 === -512. Actual: ' + (-16 << 5)); -} - - -if (-32 << 5 !== -1024) { - $ERROR('#166: -32 << 5 === -1024. Actual: ' + (-32 << 5)); -} - - -if (-64 << 5 !== -2048) { - $ERROR('#167: -64 << 5 === -2048. Actual: ' + (-64 << 5)); -} - - -if (-128 << 5 !== -4096) { - $ERROR('#168: -128 << 5 === -4096. Actual: ' + (-128 << 5)); -} - - -if (-256 << 5 !== -8192) { - $ERROR('#169: -256 << 5 === -8192. Actual: ' + (-256 << 5)); -} - - -if (-512 << 5 !== -16384) { - $ERROR('#170: -512 << 5 === -16384. Actual: ' + (-512 << 5)); -} - - -if (-1024 << 5 !== -32768) { - $ERROR('#171: -1024 << 5 === -32768. Actual: ' + (-1024 << 5)); -} - - -if (-2048 << 5 !== -65536) { - $ERROR('#172: -2048 << 5 === -65536. Actual: ' + (-2048 << 5)); -} - - -if (-4096 << 5 !== -131072) { - $ERROR('#173: -4096 << 5 === -131072. Actual: ' + (-4096 << 5)); -} - - -if (-8192 << 5 !== -262144) { - $ERROR('#174: -8192 << 5 === -262144. Actual: ' + (-8192 << 5)); -} - - -if (-16384 << 5 !== -524288) { - $ERROR('#175: -16384 << 5 === -524288. Actual: ' + (-16384 << 5)); -} - - -if (-32768 << 5 !== -1048576) { - $ERROR('#176: -32768 << 5 === -1048576. Actual: ' + (-32768 << 5)); -} - - -if (-65536 << 5 !== -2097152) { - $ERROR('#177: -65536 << 5 === -2097152. Actual: ' + (-65536 << 5)); -} - - -if (-131072 << 5 !== -4194304) { - $ERROR('#178: -131072 << 5 === -4194304. Actual: ' + (-131072 << 5)); -} - - -if (-262144 << 5 !== -8388608) { - $ERROR('#179: -262144 << 5 === -8388608. Actual: ' + (-262144 << 5)); -} - - -if (-524288 << 5 !== -16777216) { - $ERROR('#180: -524288 << 5 === -16777216. Actual: ' + (-524288 << 5)); -} - - -if (-1048576 << 5 !== -33554432) { - $ERROR('#181: -1048576 << 5 === -33554432. Actual: ' + (-1048576 << 5)); -} - - -if (-2097152 << 5 !== -67108864) { - $ERROR('#182: -2097152 << 5 === -67108864. Actual: ' + (-2097152 << 5)); -} - - -if (-4194304 << 5 !== -134217728) { - $ERROR('#183: -4194304 << 5 === -134217728. Actual: ' + (-4194304 << 5)); -} - - -if (-8388608 << 5 !== -268435456) { - $ERROR('#184: -8388608 << 5 === -268435456. Actual: ' + (-8388608 << 5)); -} - - -if (-16777216 << 5 !== -536870912) { - $ERROR('#185: -16777216 << 5 === -536870912. Actual: ' + (-16777216 << 5)); -} - - -if (-33554432 << 5 !== -1073741824) { - $ERROR('#186: -33554432 << 5 === -1073741824. Actual: ' + (-33554432 << 5)); -} - - -if (-67108864 << 5 !== -2147483648) { - $ERROR('#187: -67108864 << 5 === -2147483648. Actual: ' + (-67108864 << 5)); -} - - -if (-134217728 << 5 !== 0) { - $ERROR('#188: -134217728 << 5 === 0. Actual: ' + (-134217728 << 5)); -} - - -if (-268435456 << 5 !== 0) { - $ERROR('#189: -268435456 << 5 === 0. Actual: ' + (-268435456 << 5)); -} - - -if (-536870912 << 5 !== 0) { - $ERROR('#190: -536870912 << 5 === 0. Actual: ' + (-536870912 << 5)); -} - - -if (-1073741824 << 5 !== 0) { - $ERROR('#191: -1073741824 << 5 === 0. Actual: ' + (-1073741824 << 5)); -} - - -if (-2147483648 << 5 !== 0) { - $ERROR('#192: -2147483648 << 5 === 0. Actual: ' + (-2147483648 << 5)); -} - - -if (-1 << 6 !== -64) { - $ERROR('#193: -1 << 6 === -64. Actual: ' + (-1 << 6)); -} - - -if (-2 << 6 !== -128) { - $ERROR('#194: -2 << 6 === -128. Actual: ' + (-2 << 6)); -} - - -if (-4 << 6 !== -256) { - $ERROR('#195: -4 << 6 === -256. Actual: ' + (-4 << 6)); -} - - -if (-8 << 6 !== -512) { - $ERROR('#196: -8 << 6 === -512. Actual: ' + (-8 << 6)); -} - - -if (-16 << 6 !== -1024) { - $ERROR('#197: -16 << 6 === -1024. Actual: ' + (-16 << 6)); -} - - -if (-32 << 6 !== -2048) { - $ERROR('#198: -32 << 6 === -2048. Actual: ' + (-32 << 6)); -} - - -if (-64 << 6 !== -4096) { - $ERROR('#199: -64 << 6 === -4096. Actual: ' + (-64 << 6)); -} - - -if (-128 << 6 !== -8192) { - $ERROR('#200: -128 << 6 === -8192. Actual: ' + (-128 << 6)); -} - - -if (-256 << 6 !== -16384) { - $ERROR('#201: -256 << 6 === -16384. Actual: ' + (-256 << 6)); -} - - -if (-512 << 6 !== -32768) { - $ERROR('#202: -512 << 6 === -32768. Actual: ' + (-512 << 6)); -} - - -if (-1024 << 6 !== -65536) { - $ERROR('#203: -1024 << 6 === -65536. Actual: ' + (-1024 << 6)); -} - - -if (-2048 << 6 !== -131072) { - $ERROR('#204: -2048 << 6 === -131072. Actual: ' + (-2048 << 6)); -} - - -if (-4096 << 6 !== -262144) { - $ERROR('#205: -4096 << 6 === -262144. Actual: ' + (-4096 << 6)); -} - - -if (-8192 << 6 !== -524288) { - $ERROR('#206: -8192 << 6 === -524288. Actual: ' + (-8192 << 6)); -} - - -if (-16384 << 6 !== -1048576) { - $ERROR('#207: -16384 << 6 === -1048576. Actual: ' + (-16384 << 6)); -} - - -if (-32768 << 6 !== -2097152) { - $ERROR('#208: -32768 << 6 === -2097152. Actual: ' + (-32768 << 6)); -} - - -if (-65536 << 6 !== -4194304) { - $ERROR('#209: -65536 << 6 === -4194304. Actual: ' + (-65536 << 6)); -} - - -if (-131072 << 6 !== -8388608) { - $ERROR('#210: -131072 << 6 === -8388608. Actual: ' + (-131072 << 6)); -} - - -if (-262144 << 6 !== -16777216) { - $ERROR('#211: -262144 << 6 === -16777216. Actual: ' + (-262144 << 6)); -} - - -if (-524288 << 6 !== -33554432) { - $ERROR('#212: -524288 << 6 === -33554432. Actual: ' + (-524288 << 6)); -} - - -if (-1048576 << 6 !== -67108864) { - $ERROR('#213: -1048576 << 6 === -67108864. Actual: ' + (-1048576 << 6)); -} - - -if (-2097152 << 6 !== -134217728) { - $ERROR('#214: -2097152 << 6 === -134217728. Actual: ' + (-2097152 << 6)); -} - - -if (-4194304 << 6 !== -268435456) { - $ERROR('#215: -4194304 << 6 === -268435456. Actual: ' + (-4194304 << 6)); -} - - -if (-8388608 << 6 !== -536870912) { - $ERROR('#216: -8388608 << 6 === -536870912. Actual: ' + (-8388608 << 6)); -} - - -if (-16777216 << 6 !== -1073741824) { - $ERROR('#217: -16777216 << 6 === -1073741824. Actual: ' + (-16777216 << 6)); -} - - -if (-33554432 << 6 !== -2147483648) { - $ERROR('#218: -33554432 << 6 === -2147483648. Actual: ' + (-33554432 << 6)); -} - - -if (-67108864 << 6 !== 0) { - $ERROR('#219: -67108864 << 6 === 0. Actual: ' + (-67108864 << 6)); -} - - -if (-134217728 << 6 !== 0) { - $ERROR('#220: -134217728 << 6 === 0. Actual: ' + (-134217728 << 6)); -} - - -if (-268435456 << 6 !== 0) { - $ERROR('#221: -268435456 << 6 === 0. Actual: ' + (-268435456 << 6)); -} - - -if (-536870912 << 6 !== 0) { - $ERROR('#222: -536870912 << 6 === 0. Actual: ' + (-536870912 << 6)); -} - - -if (-1073741824 << 6 !== 0) { - $ERROR('#223: -1073741824 << 6 === 0. Actual: ' + (-1073741824 << 6)); -} - - -if (-2147483648 << 6 !== 0) { - $ERROR('#224: -2147483648 << 6 === 0. Actual: ' + (-2147483648 << 6)); -} - - -if (-1 << 7 !== -128) { - $ERROR('#225: -1 << 7 === -128. Actual: ' + (-1 << 7)); -} - - -if (-2 << 7 !== -256) { - $ERROR('#226: -2 << 7 === -256. Actual: ' + (-2 << 7)); -} - - -if (-4 << 7 !== -512) { - $ERROR('#227: -4 << 7 === -512. Actual: ' + (-4 << 7)); -} - - -if (-8 << 7 !== -1024) { - $ERROR('#228: -8 << 7 === -1024. Actual: ' + (-8 << 7)); -} - - -if (-16 << 7 !== -2048) { - $ERROR('#229: -16 << 7 === -2048. Actual: ' + (-16 << 7)); -} - - -if (-32 << 7 !== -4096) { - $ERROR('#230: -32 << 7 === -4096. Actual: ' + (-32 << 7)); -} - - -if (-64 << 7 !== -8192) { - $ERROR('#231: -64 << 7 === -8192. Actual: ' + (-64 << 7)); -} - - -if (-128 << 7 !== -16384) { - $ERROR('#232: -128 << 7 === -16384. Actual: ' + (-128 << 7)); -} - - -if (-256 << 7 !== -32768) { - $ERROR('#233: -256 << 7 === -32768. Actual: ' + (-256 << 7)); -} - - -if (-512 << 7 !== -65536) { - $ERROR('#234: -512 << 7 === -65536. Actual: ' + (-512 << 7)); -} - - -if (-1024 << 7 !== -131072) { - $ERROR('#235: -1024 << 7 === -131072. Actual: ' + (-1024 << 7)); -} - - -if (-2048 << 7 !== -262144) { - $ERROR('#236: -2048 << 7 === -262144. Actual: ' + (-2048 << 7)); -} - - -if (-4096 << 7 !== -524288) { - $ERROR('#237: -4096 << 7 === -524288. Actual: ' + (-4096 << 7)); -} - - -if (-8192 << 7 !== -1048576) { - $ERROR('#238: -8192 << 7 === -1048576. Actual: ' + (-8192 << 7)); -} - - -if (-16384 << 7 !== -2097152) { - $ERROR('#239: -16384 << 7 === -2097152. Actual: ' + (-16384 << 7)); -} - - -if (-32768 << 7 !== -4194304) { - $ERROR('#240: -32768 << 7 === -4194304. Actual: ' + (-32768 << 7)); -} - - -if (-65536 << 7 !== -8388608) { - $ERROR('#241: -65536 << 7 === -8388608. Actual: ' + (-65536 << 7)); -} - - -if (-131072 << 7 !== -16777216) { - $ERROR('#242: -131072 << 7 === -16777216. Actual: ' + (-131072 << 7)); -} - - -if (-262144 << 7 !== -33554432) { - $ERROR('#243: -262144 << 7 === -33554432. Actual: ' + (-262144 << 7)); -} - - -if (-524288 << 7 !== -67108864) { - $ERROR('#244: -524288 << 7 === -67108864. Actual: ' + (-524288 << 7)); -} - - -if (-1048576 << 7 !== -134217728) { - $ERROR('#245: -1048576 << 7 === -134217728. Actual: ' + (-1048576 << 7)); -} - - -if (-2097152 << 7 !== -268435456) { - $ERROR('#246: -2097152 << 7 === -268435456. Actual: ' + (-2097152 << 7)); -} - - -if (-4194304 << 7 !== -536870912) { - $ERROR('#247: -4194304 << 7 === -536870912. Actual: ' + (-4194304 << 7)); -} - - -if (-8388608 << 7 !== -1073741824) { - $ERROR('#248: -8388608 << 7 === -1073741824. Actual: ' + (-8388608 << 7)); -} - - -if (-16777216 << 7 !== -2147483648) { - $ERROR('#249: -16777216 << 7 === -2147483648. Actual: ' + (-16777216 << 7)); -} - - -if (-33554432 << 7 !== 0) { - $ERROR('#250: -33554432 << 7 === 0. Actual: ' + (-33554432 << 7)); -} - - -if (-67108864 << 7 !== 0) { - $ERROR('#251: -67108864 << 7 === 0. Actual: ' + (-67108864 << 7)); -} - - -if (-134217728 << 7 !== 0) { - $ERROR('#252: -134217728 << 7 === 0. Actual: ' + (-134217728 << 7)); -} - - -if (-268435456 << 7 !== 0) { - $ERROR('#253: -268435456 << 7 === 0. Actual: ' + (-268435456 << 7)); -} - - -if (-536870912 << 7 !== 0) { - $ERROR('#254: -536870912 << 7 === 0. Actual: ' + (-536870912 << 7)); -} - - -if (-1073741824 << 7 !== 0) { - $ERROR('#255: -1073741824 << 7 === 0. Actual: ' + (-1073741824 << 7)); -} - - -if (-2147483648 << 7 !== 0) { - $ERROR('#256: -2147483648 << 7 === 0. Actual: ' + (-2147483648 << 7)); -} - - -if (-1 << 8 !== -256) { - $ERROR('#257: -1 << 8 === -256. Actual: ' + (-1 << 8)); -} - - -if (-2 << 8 !== -512) { - $ERROR('#258: -2 << 8 === -512. Actual: ' + (-2 << 8)); -} - - -if (-4 << 8 !== -1024) { - $ERROR('#259: -4 << 8 === -1024. Actual: ' + (-4 << 8)); -} - - -if (-8 << 8 !== -2048) { - $ERROR('#260: -8 << 8 === -2048. Actual: ' + (-8 << 8)); -} - - -if (-16 << 8 !== -4096) { - $ERROR('#261: -16 << 8 === -4096. Actual: ' + (-16 << 8)); -} - - -if (-32 << 8 !== -8192) { - $ERROR('#262: -32 << 8 === -8192. Actual: ' + (-32 << 8)); -} - - -if (-64 << 8 !== -16384) { - $ERROR('#263: -64 << 8 === -16384. Actual: ' + (-64 << 8)); -} - - -if (-128 << 8 !== -32768) { - $ERROR('#264: -128 << 8 === -32768. Actual: ' + (-128 << 8)); -} - - -if (-256 << 8 !== -65536) { - $ERROR('#265: -256 << 8 === -65536. Actual: ' + (-256 << 8)); -} - - -if (-512 << 8 !== -131072) { - $ERROR('#266: -512 << 8 === -131072. Actual: ' + (-512 << 8)); -} - - -if (-1024 << 8 !== -262144) { - $ERROR('#267: -1024 << 8 === -262144. Actual: ' + (-1024 << 8)); -} - - -if (-2048 << 8 !== -524288) { - $ERROR('#268: -2048 << 8 === -524288. Actual: ' + (-2048 << 8)); -} - - -if (-4096 << 8 !== -1048576) { - $ERROR('#269: -4096 << 8 === -1048576. Actual: ' + (-4096 << 8)); -} - - -if (-8192 << 8 !== -2097152) { - $ERROR('#270: -8192 << 8 === -2097152. Actual: ' + (-8192 << 8)); -} - - -if (-16384 << 8 !== -4194304) { - $ERROR('#271: -16384 << 8 === -4194304. Actual: ' + (-16384 << 8)); -} - - -if (-32768 << 8 !== -8388608) { - $ERROR('#272: -32768 << 8 === -8388608. Actual: ' + (-32768 << 8)); -} - - -if (-65536 << 8 !== -16777216) { - $ERROR('#273: -65536 << 8 === -16777216. Actual: ' + (-65536 << 8)); -} - - -if (-131072 << 8 !== -33554432) { - $ERROR('#274: -131072 << 8 === -33554432. Actual: ' + (-131072 << 8)); -} - - -if (-262144 << 8 !== -67108864) { - $ERROR('#275: -262144 << 8 === -67108864. Actual: ' + (-262144 << 8)); -} - - -if (-524288 << 8 !== -134217728) { - $ERROR('#276: -524288 << 8 === -134217728. Actual: ' + (-524288 << 8)); -} - - -if (-1048576 << 8 !== -268435456) { - $ERROR('#277: -1048576 << 8 === -268435456. Actual: ' + (-1048576 << 8)); -} - - -if (-2097152 << 8 !== -536870912) { - $ERROR('#278: -2097152 << 8 === -536870912. Actual: ' + (-2097152 << 8)); -} - - -if (-4194304 << 8 !== -1073741824) { - $ERROR('#279: -4194304 << 8 === -1073741824. Actual: ' + (-4194304 << 8)); -} - - -if (-8388608 << 8 !== -2147483648) { - $ERROR('#280: -8388608 << 8 === -2147483648. Actual: ' + (-8388608 << 8)); -} - - -if (-16777216 << 8 !== 0) { - $ERROR('#281: -16777216 << 8 === 0. Actual: ' + (-16777216 << 8)); -} - - -if (-33554432 << 8 !== 0) { - $ERROR('#282: -33554432 << 8 === 0. Actual: ' + (-33554432 << 8)); -} - - -if (-67108864 << 8 !== 0) { - $ERROR('#283: -67108864 << 8 === 0. Actual: ' + (-67108864 << 8)); -} - - -if (-134217728 << 8 !== 0) { - $ERROR('#284: -134217728 << 8 === 0. Actual: ' + (-134217728 << 8)); -} - - -if (-268435456 << 8 !== 0) { - $ERROR('#285: -268435456 << 8 === 0. Actual: ' + (-268435456 << 8)); -} - - -if (-536870912 << 8 !== 0) { - $ERROR('#286: -536870912 << 8 === 0. Actual: ' + (-536870912 << 8)); -} - - -if (-1073741824 << 8 !== 0) { - $ERROR('#287: -1073741824 << 8 === 0. Actual: ' + (-1073741824 << 8)); -} - - -if (-2147483648 << 8 !== 0) { - $ERROR('#288: -2147483648 << 8 === 0. Actual: ' + (-2147483648 << 8)); -} - - -if (-1 << 9 !== -512) { - $ERROR('#289: -1 << 9 === -512. Actual: ' + (-1 << 9)); -} - - -if (-2 << 9 !== -1024) { - $ERROR('#290: -2 << 9 === -1024. Actual: ' + (-2 << 9)); -} - - -if (-4 << 9 !== -2048) { - $ERROR('#291: -4 << 9 === -2048. Actual: ' + (-4 << 9)); -} - - -if (-8 << 9 !== -4096) { - $ERROR('#292: -8 << 9 === -4096. Actual: ' + (-8 << 9)); -} - - -if (-16 << 9 !== -8192) { - $ERROR('#293: -16 << 9 === -8192. Actual: ' + (-16 << 9)); -} - - -if (-32 << 9 !== -16384) { - $ERROR('#294: -32 << 9 === -16384. Actual: ' + (-32 << 9)); -} - - -if (-64 << 9 !== -32768) { - $ERROR('#295: -64 << 9 === -32768. Actual: ' + (-64 << 9)); -} - - -if (-128 << 9 !== -65536) { - $ERROR('#296: -128 << 9 === -65536. Actual: ' + (-128 << 9)); -} - - -if (-256 << 9 !== -131072) { - $ERROR('#297: -256 << 9 === -131072. Actual: ' + (-256 << 9)); -} - - -if (-512 << 9 !== -262144) { - $ERROR('#298: -512 << 9 === -262144. Actual: ' + (-512 << 9)); -} - - -if (-1024 << 9 !== -524288) { - $ERROR('#299: -1024 << 9 === -524288. Actual: ' + (-1024 << 9)); -} - - -if (-2048 << 9 !== -1048576) { - $ERROR('#300: -2048 << 9 === -1048576. Actual: ' + (-2048 << 9)); -} - - -if (-4096 << 9 !== -2097152) { - $ERROR('#301: -4096 << 9 === -2097152. Actual: ' + (-4096 << 9)); -} - - -if (-8192 << 9 !== -4194304) { - $ERROR('#302: -8192 << 9 === -4194304. Actual: ' + (-8192 << 9)); -} - - -if (-16384 << 9 !== -8388608) { - $ERROR('#303: -16384 << 9 === -8388608. Actual: ' + (-16384 << 9)); -} - - -if (-32768 << 9 !== -16777216) { - $ERROR('#304: -32768 << 9 === -16777216. Actual: ' + (-32768 << 9)); -} - - -if (-65536 << 9 !== -33554432) { - $ERROR('#305: -65536 << 9 === -33554432. Actual: ' + (-65536 << 9)); -} - - -if (-131072 << 9 !== -67108864) { - $ERROR('#306: -131072 << 9 === -67108864. Actual: ' + (-131072 << 9)); -} - - -if (-262144 << 9 !== -134217728) { - $ERROR('#307: -262144 << 9 === -134217728. Actual: ' + (-262144 << 9)); -} - - -if (-524288 << 9 !== -268435456) { - $ERROR('#308: -524288 << 9 === -268435456. Actual: ' + (-524288 << 9)); -} - - -if (-1048576 << 9 !== -536870912) { - $ERROR('#309: -1048576 << 9 === -536870912. Actual: ' + (-1048576 << 9)); -} - - -if (-2097152 << 9 !== -1073741824) { - $ERROR('#310: -2097152 << 9 === -1073741824. Actual: ' + (-2097152 << 9)); -} - - -if (-4194304 << 9 !== -2147483648) { - $ERROR('#311: -4194304 << 9 === -2147483648. Actual: ' + (-4194304 << 9)); -} - - -if (-8388608 << 9 !== 0) { - $ERROR('#312: -8388608 << 9 === 0. Actual: ' + (-8388608 << 9)); -} - - -if (-16777216 << 9 !== 0) { - $ERROR('#313: -16777216 << 9 === 0. Actual: ' + (-16777216 << 9)); -} - - -if (-33554432 << 9 !== 0) { - $ERROR('#314: -33554432 << 9 === 0. Actual: ' + (-33554432 << 9)); -} - - -if (-67108864 << 9 !== 0) { - $ERROR('#315: -67108864 << 9 === 0. Actual: ' + (-67108864 << 9)); -} - - -if (-134217728 << 9 !== 0) { - $ERROR('#316: -134217728 << 9 === 0. Actual: ' + (-134217728 << 9)); -} - - -if (-268435456 << 9 !== 0) { - $ERROR('#317: -268435456 << 9 === 0. Actual: ' + (-268435456 << 9)); -} - - -if (-536870912 << 9 !== 0) { - $ERROR('#318: -536870912 << 9 === 0. Actual: ' + (-536870912 << 9)); -} - - -if (-1073741824 << 9 !== 0) { - $ERROR('#319: -1073741824 << 9 === 0. Actual: ' + (-1073741824 << 9)); -} - - -if (-2147483648 << 9 !== 0) { - $ERROR('#320: -2147483648 << 9 === 0. Actual: ' + (-2147483648 << 9)); -} - - -if (-1 << 10 !== -1024) { - $ERROR('#321: -1 << 10 === -1024. Actual: ' + (-1 << 10)); -} - - -if (-2 << 10 !== -2048) { - $ERROR('#322: -2 << 10 === -2048. Actual: ' + (-2 << 10)); -} - - -if (-4 << 10 !== -4096) { - $ERROR('#323: -4 << 10 === -4096. Actual: ' + (-4 << 10)); -} - - -if (-8 << 10 !== -8192) { - $ERROR('#324: -8 << 10 === -8192. Actual: ' + (-8 << 10)); -} - - -if (-16 << 10 !== -16384) { - $ERROR('#325: -16 << 10 === -16384. Actual: ' + (-16 << 10)); -} - - -if (-32 << 10 !== -32768) { - $ERROR('#326: -32 << 10 === -32768. Actual: ' + (-32 << 10)); -} - - -if (-64 << 10 !== -65536) { - $ERROR('#327: -64 << 10 === -65536. Actual: ' + (-64 << 10)); -} - - -if (-128 << 10 !== -131072) { - $ERROR('#328: -128 << 10 === -131072. Actual: ' + (-128 << 10)); -} - - -if (-256 << 10 !== -262144) { - $ERROR('#329: -256 << 10 === -262144. Actual: ' + (-256 << 10)); -} - - -if (-512 << 10 !== -524288) { - $ERROR('#330: -512 << 10 === -524288. Actual: ' + (-512 << 10)); -} - - -if (-1024 << 10 !== -1048576) { - $ERROR('#331: -1024 << 10 === -1048576. Actual: ' + (-1024 << 10)); -} - - -if (-2048 << 10 !== -2097152) { - $ERROR('#332: -2048 << 10 === -2097152. Actual: ' + (-2048 << 10)); -} - - -if (-4096 << 10 !== -4194304) { - $ERROR('#333: -4096 << 10 === -4194304. Actual: ' + (-4096 << 10)); -} - - -if (-8192 << 10 !== -8388608) { - $ERROR('#334: -8192 << 10 === -8388608. Actual: ' + (-8192 << 10)); -} - - -if (-16384 << 10 !== -16777216) { - $ERROR('#335: -16384 << 10 === -16777216. Actual: ' + (-16384 << 10)); -} - - -if (-32768 << 10 !== -33554432) { - $ERROR('#336: -32768 << 10 === -33554432. Actual: ' + (-32768 << 10)); -} - - -if (-65536 << 10 !== -67108864) { - $ERROR('#337: -65536 << 10 === -67108864. Actual: ' + (-65536 << 10)); -} - - -if (-131072 << 10 !== -134217728) { - $ERROR('#338: -131072 << 10 === -134217728. Actual: ' + (-131072 << 10)); -} - - -if (-262144 << 10 !== -268435456) { - $ERROR('#339: -262144 << 10 === -268435456. Actual: ' + (-262144 << 10)); -} - - -if (-524288 << 10 !== -536870912) { - $ERROR('#340: -524288 << 10 === -536870912. Actual: ' + (-524288 << 10)); -} - - -if (-1048576 << 10 !== -1073741824) { - $ERROR('#341: -1048576 << 10 === -1073741824. Actual: ' + (-1048576 << 10)); -} - - -if (-2097152 << 10 !== -2147483648) { - $ERROR('#342: -2097152 << 10 === -2147483648. Actual: ' + (-2097152 << 10)); -} - - -if (-4194304 << 10 !== 0) { - $ERROR('#343: -4194304 << 10 === 0. Actual: ' + (-4194304 << 10)); -} - - -if (-8388608 << 10 !== 0) { - $ERROR('#344: -8388608 << 10 === 0. Actual: ' + (-8388608 << 10)); -} - - -if (-16777216 << 10 !== 0) { - $ERROR('#345: -16777216 << 10 === 0. Actual: ' + (-16777216 << 10)); -} - - -if (-33554432 << 10 !== 0) { - $ERROR('#346: -33554432 << 10 === 0. Actual: ' + (-33554432 << 10)); -} - - -if (-67108864 << 10 !== 0) { - $ERROR('#347: -67108864 << 10 === 0. Actual: ' + (-67108864 << 10)); -} - - -if (-134217728 << 10 !== 0) { - $ERROR('#348: -134217728 << 10 === 0. Actual: ' + (-134217728 << 10)); -} - - -if (-268435456 << 10 !== 0) { - $ERROR('#349: -268435456 << 10 === 0. Actual: ' + (-268435456 << 10)); -} - - -if (-536870912 << 10 !== 0) { - $ERROR('#350: -536870912 << 10 === 0. Actual: ' + (-536870912 << 10)); -} - - -if (-1073741824 << 10 !== 0) { - $ERROR('#351: -1073741824 << 10 === 0. Actual: ' + (-1073741824 << 10)); -} - - -if (-2147483648 << 10 !== 0) { - $ERROR('#352: -2147483648 << 10 === 0. Actual: ' + (-2147483648 << 10)); -} - - -if (-1 << 11 !== -2048) { - $ERROR('#353: -1 << 11 === -2048. Actual: ' + (-1 << 11)); -} - - -if (-2 << 11 !== -4096) { - $ERROR('#354: -2 << 11 === -4096. Actual: ' + (-2 << 11)); -} - - -if (-4 << 11 !== -8192) { - $ERROR('#355: -4 << 11 === -8192. Actual: ' + (-4 << 11)); -} - - -if (-8 << 11 !== -16384) { - $ERROR('#356: -8 << 11 === -16384. Actual: ' + (-8 << 11)); -} - - -if (-16 << 11 !== -32768) { - $ERROR('#357: -16 << 11 === -32768. Actual: ' + (-16 << 11)); -} - - -if (-32 << 11 !== -65536) { - $ERROR('#358: -32 << 11 === -65536. Actual: ' + (-32 << 11)); -} - - -if (-64 << 11 !== -131072) { - $ERROR('#359: -64 << 11 === -131072. Actual: ' + (-64 << 11)); -} - - -if (-128 << 11 !== -262144) { - $ERROR('#360: -128 << 11 === -262144. Actual: ' + (-128 << 11)); -} - - -if (-256 << 11 !== -524288) { - $ERROR('#361: -256 << 11 === -524288. Actual: ' + (-256 << 11)); -} - - -if (-512 << 11 !== -1048576) { - $ERROR('#362: -512 << 11 === -1048576. Actual: ' + (-512 << 11)); -} - - -if (-1024 << 11 !== -2097152) { - $ERROR('#363: -1024 << 11 === -2097152. Actual: ' + (-1024 << 11)); -} - - -if (-2048 << 11 !== -4194304) { - $ERROR('#364: -2048 << 11 === -4194304. Actual: ' + (-2048 << 11)); -} - - -if (-4096 << 11 !== -8388608) { - $ERROR('#365: -4096 << 11 === -8388608. Actual: ' + (-4096 << 11)); -} - - -if (-8192 << 11 !== -16777216) { - $ERROR('#366: -8192 << 11 === -16777216. Actual: ' + (-8192 << 11)); -} - - -if (-16384 << 11 !== -33554432) { - $ERROR('#367: -16384 << 11 === -33554432. Actual: ' + (-16384 << 11)); -} - - -if (-32768 << 11 !== -67108864) { - $ERROR('#368: -32768 << 11 === -67108864. Actual: ' + (-32768 << 11)); -} - - -if (-65536 << 11 !== -134217728) { - $ERROR('#369: -65536 << 11 === -134217728. Actual: ' + (-65536 << 11)); -} - - -if (-131072 << 11 !== -268435456) { - $ERROR('#370: -131072 << 11 === -268435456. Actual: ' + (-131072 << 11)); -} - - -if (-262144 << 11 !== -536870912) { - $ERROR('#371: -262144 << 11 === -536870912. Actual: ' + (-262144 << 11)); -} - - -if (-524288 << 11 !== -1073741824) { - $ERROR('#372: -524288 << 11 === -1073741824. Actual: ' + (-524288 << 11)); -} - - -if (-1048576 << 11 !== -2147483648) { - $ERROR('#373: -1048576 << 11 === -2147483648. Actual: ' + (-1048576 << 11)); -} - - -if (-2097152 << 11 !== 0) { - $ERROR('#374: -2097152 << 11 === 0. Actual: ' + (-2097152 << 11)); -} - - -if (-4194304 << 11 !== 0) { - $ERROR('#375: -4194304 << 11 === 0. Actual: ' + (-4194304 << 11)); -} - - -if (-8388608 << 11 !== 0) { - $ERROR('#376: -8388608 << 11 === 0. Actual: ' + (-8388608 << 11)); -} - - -if (-16777216 << 11 !== 0) { - $ERROR('#377: -16777216 << 11 === 0. Actual: ' + (-16777216 << 11)); -} - - -if (-33554432 << 11 !== 0) { - $ERROR('#378: -33554432 << 11 === 0. Actual: ' + (-33554432 << 11)); -} - - -if (-67108864 << 11 !== 0) { - $ERROR('#379: -67108864 << 11 === 0. Actual: ' + (-67108864 << 11)); -} - - -if (-134217728 << 11 !== 0) { - $ERROR('#380: -134217728 << 11 === 0. Actual: ' + (-134217728 << 11)); -} - - -if (-268435456 << 11 !== 0) { - $ERROR('#381: -268435456 << 11 === 0. Actual: ' + (-268435456 << 11)); -} - - -if (-536870912 << 11 !== 0) { - $ERROR('#382: -536870912 << 11 === 0. Actual: ' + (-536870912 << 11)); -} - - -if (-1073741824 << 11 !== 0) { - $ERROR('#383: -1073741824 << 11 === 0. Actual: ' + (-1073741824 << 11)); -} - - -if (-2147483648 << 11 !== 0) { - $ERROR('#384: -2147483648 << 11 === 0. Actual: ' + (-2147483648 << 11)); -} - - -if (-1 << 12 !== -4096) { - $ERROR('#385: -1 << 12 === -4096. Actual: ' + (-1 << 12)); -} - - -if (-2 << 12 !== -8192) { - $ERROR('#386: -2 << 12 === -8192. Actual: ' + (-2 << 12)); -} - - -if (-4 << 12 !== -16384) { - $ERROR('#387: -4 << 12 === -16384. Actual: ' + (-4 << 12)); -} - - -if (-8 << 12 !== -32768) { - $ERROR('#388: -8 << 12 === -32768. Actual: ' + (-8 << 12)); -} - - -if (-16 << 12 !== -65536) { - $ERROR('#389: -16 << 12 === -65536. Actual: ' + (-16 << 12)); -} - - -if (-32 << 12 !== -131072) { - $ERROR('#390: -32 << 12 === -131072. Actual: ' + (-32 << 12)); -} - - -if (-64 << 12 !== -262144) { - $ERROR('#391: -64 << 12 === -262144. Actual: ' + (-64 << 12)); -} - - -if (-128 << 12 !== -524288) { - $ERROR('#392: -128 << 12 === -524288. Actual: ' + (-128 << 12)); -} - - -if (-256 << 12 !== -1048576) { - $ERROR('#393: -256 << 12 === -1048576. Actual: ' + (-256 << 12)); -} - - -if (-512 << 12 !== -2097152) { - $ERROR('#394: -512 << 12 === -2097152. Actual: ' + (-512 << 12)); -} - - -if (-1024 << 12 !== -4194304) { - $ERROR('#395: -1024 << 12 === -4194304. Actual: ' + (-1024 << 12)); -} - - -if (-2048 << 12 !== -8388608) { - $ERROR('#396: -2048 << 12 === -8388608. Actual: ' + (-2048 << 12)); -} - - -if (-4096 << 12 !== -16777216) { - $ERROR('#397: -4096 << 12 === -16777216. Actual: ' + (-4096 << 12)); -} - - -if (-8192 << 12 !== -33554432) { - $ERROR('#398: -8192 << 12 === -33554432. Actual: ' + (-8192 << 12)); -} - - -if (-16384 << 12 !== -67108864) { - $ERROR('#399: -16384 << 12 === -67108864. Actual: ' + (-16384 << 12)); -} - - -if (-32768 << 12 !== -134217728) { - $ERROR('#400: -32768 << 12 === -134217728. Actual: ' + (-32768 << 12)); -} - - -if (-65536 << 12 !== -268435456) { - $ERROR('#401: -65536 << 12 === -268435456. Actual: ' + (-65536 << 12)); -} - - -if (-131072 << 12 !== -536870912) { - $ERROR('#402: -131072 << 12 === -536870912. Actual: ' + (-131072 << 12)); -} - - -if (-262144 << 12 !== -1073741824) { - $ERROR('#403: -262144 << 12 === -1073741824. Actual: ' + (-262144 << 12)); -} - - -if (-524288 << 12 !== -2147483648) { - $ERROR('#404: -524288 << 12 === -2147483648. Actual: ' + (-524288 << 12)); -} - - -if (-1048576 << 12 !== 0) { - $ERROR('#405: -1048576 << 12 === 0. Actual: ' + (-1048576 << 12)); -} - - -if (-2097152 << 12 !== 0) { - $ERROR('#406: -2097152 << 12 === 0. Actual: ' + (-2097152 << 12)); -} - - -if (-4194304 << 12 !== 0) { - $ERROR('#407: -4194304 << 12 === 0. Actual: ' + (-4194304 << 12)); -} - - -if (-8388608 << 12 !== 0) { - $ERROR('#408: -8388608 << 12 === 0. Actual: ' + (-8388608 << 12)); -} - - -if (-16777216 << 12 !== 0) { - $ERROR('#409: -16777216 << 12 === 0. Actual: ' + (-16777216 << 12)); -} - - -if (-33554432 << 12 !== 0) { - $ERROR('#410: -33554432 << 12 === 0. Actual: ' + (-33554432 << 12)); -} - - -if (-67108864 << 12 !== 0) { - $ERROR('#411: -67108864 << 12 === 0. Actual: ' + (-67108864 << 12)); -} - - -if (-134217728 << 12 !== 0) { - $ERROR('#412: -134217728 << 12 === 0. Actual: ' + (-134217728 << 12)); -} - - -if (-268435456 << 12 !== 0) { - $ERROR('#413: -268435456 << 12 === 0. Actual: ' + (-268435456 << 12)); -} - - -if (-536870912 << 12 !== 0) { - $ERROR('#414: -536870912 << 12 === 0. Actual: ' + (-536870912 << 12)); -} - - -if (-1073741824 << 12 !== 0) { - $ERROR('#415: -1073741824 << 12 === 0. Actual: ' + (-1073741824 << 12)); -} - - -if (-2147483648 << 12 !== 0) { - $ERROR('#416: -2147483648 << 12 === 0. Actual: ' + (-2147483648 << 12)); -} - - -if (-1 << 13 !== -8192) { - $ERROR('#417: -1 << 13 === -8192. Actual: ' + (-1 << 13)); -} - - -if (-2 << 13 !== -16384) { - $ERROR('#418: -2 << 13 === -16384. Actual: ' + (-2 << 13)); -} - - -if (-4 << 13 !== -32768) { - $ERROR('#419: -4 << 13 === -32768. Actual: ' + (-4 << 13)); -} - - -if (-8 << 13 !== -65536) { - $ERROR('#420: -8 << 13 === -65536. Actual: ' + (-8 << 13)); -} - - -if (-16 << 13 !== -131072) { - $ERROR('#421: -16 << 13 === -131072. Actual: ' + (-16 << 13)); -} - - -if (-32 << 13 !== -262144) { - $ERROR('#422: -32 << 13 === -262144. Actual: ' + (-32 << 13)); -} - - -if (-64 << 13 !== -524288) { - $ERROR('#423: -64 << 13 === -524288. Actual: ' + (-64 << 13)); -} - - -if (-128 << 13 !== -1048576) { - $ERROR('#424: -128 << 13 === -1048576. Actual: ' + (-128 << 13)); -} - - -if (-256 << 13 !== -2097152) { - $ERROR('#425: -256 << 13 === -2097152. Actual: ' + (-256 << 13)); -} - - -if (-512 << 13 !== -4194304) { - $ERROR('#426: -512 << 13 === -4194304. Actual: ' + (-512 << 13)); -} - - -if (-1024 << 13 !== -8388608) { - $ERROR('#427: -1024 << 13 === -8388608. Actual: ' + (-1024 << 13)); -} - - -if (-2048 << 13 !== -16777216) { - $ERROR('#428: -2048 << 13 === -16777216. Actual: ' + (-2048 << 13)); -} - - -if (-4096 << 13 !== -33554432) { - $ERROR('#429: -4096 << 13 === -33554432. Actual: ' + (-4096 << 13)); -} - - -if (-8192 << 13 !== -67108864) { - $ERROR('#430: -8192 << 13 === -67108864. Actual: ' + (-8192 << 13)); -} - - -if (-16384 << 13 !== -134217728) { - $ERROR('#431: -16384 << 13 === -134217728. Actual: ' + (-16384 << 13)); -} - - -if (-32768 << 13 !== -268435456) { - $ERROR('#432: -32768 << 13 === -268435456. Actual: ' + (-32768 << 13)); -} - - -if (-65536 << 13 !== -536870912) { - $ERROR('#433: -65536 << 13 === -536870912. Actual: ' + (-65536 << 13)); -} - - -if (-131072 << 13 !== -1073741824) { - $ERROR('#434: -131072 << 13 === -1073741824. Actual: ' + (-131072 << 13)); -} - - -if (-262144 << 13 !== -2147483648) { - $ERROR('#435: -262144 << 13 === -2147483648. Actual: ' + (-262144 << 13)); -} - - -if (-524288 << 13 !== 0) { - $ERROR('#436: -524288 << 13 === 0. Actual: ' + (-524288 << 13)); -} - - -if (-1048576 << 13 !== 0) { - $ERROR('#437: -1048576 << 13 === 0. Actual: ' + (-1048576 << 13)); -} - - -if (-2097152 << 13 !== 0) { - $ERROR('#438: -2097152 << 13 === 0. Actual: ' + (-2097152 << 13)); -} - - -if (-4194304 << 13 !== 0) { - $ERROR('#439: -4194304 << 13 === 0. Actual: ' + (-4194304 << 13)); -} - - -if (-8388608 << 13 !== 0) { - $ERROR('#440: -8388608 << 13 === 0. Actual: ' + (-8388608 << 13)); -} - - -if (-16777216 << 13 !== 0) { - $ERROR('#441: -16777216 << 13 === 0. Actual: ' + (-16777216 << 13)); -} - - -if (-33554432 << 13 !== 0) { - $ERROR('#442: -33554432 << 13 === 0. Actual: ' + (-33554432 << 13)); -} - - -if (-67108864 << 13 !== 0) { - $ERROR('#443: -67108864 << 13 === 0. Actual: ' + (-67108864 << 13)); -} - - -if (-134217728 << 13 !== 0) { - $ERROR('#444: -134217728 << 13 === 0. Actual: ' + (-134217728 << 13)); -} - - -if (-268435456 << 13 !== 0) { - $ERROR('#445: -268435456 << 13 === 0. Actual: ' + (-268435456 << 13)); -} - - -if (-536870912 << 13 !== 0) { - $ERROR('#446: -536870912 << 13 === 0. Actual: ' + (-536870912 << 13)); -} - - -if (-1073741824 << 13 !== 0) { - $ERROR('#447: -1073741824 << 13 === 0. Actual: ' + (-1073741824 << 13)); -} - - -if (-2147483648 << 13 !== 0) { - $ERROR('#448: -2147483648 << 13 === 0. Actual: ' + (-2147483648 << 13)); -} - - -if (-1 << 14 !== -16384) { - $ERROR('#449: -1 << 14 === -16384. Actual: ' + (-1 << 14)); -} - - -if (-2 << 14 !== -32768) { - $ERROR('#450: -2 << 14 === -32768. Actual: ' + (-2 << 14)); -} - - -if (-4 << 14 !== -65536) { - $ERROR('#451: -4 << 14 === -65536. Actual: ' + (-4 << 14)); -} - - -if (-8 << 14 !== -131072) { - $ERROR('#452: -8 << 14 === -131072. Actual: ' + (-8 << 14)); -} - - -if (-16 << 14 !== -262144) { - $ERROR('#453: -16 << 14 === -262144. Actual: ' + (-16 << 14)); -} - - -if (-32 << 14 !== -524288) { - $ERROR('#454: -32 << 14 === -524288. Actual: ' + (-32 << 14)); -} - - -if (-64 << 14 !== -1048576) { - $ERROR('#455: -64 << 14 === -1048576. Actual: ' + (-64 << 14)); -} - - -if (-128 << 14 !== -2097152) { - $ERROR('#456: -128 << 14 === -2097152. Actual: ' + (-128 << 14)); -} - - -if (-256 << 14 !== -4194304) { - $ERROR('#457: -256 << 14 === -4194304. Actual: ' + (-256 << 14)); -} - - -if (-512 << 14 !== -8388608) { - $ERROR('#458: -512 << 14 === -8388608. Actual: ' + (-512 << 14)); -} - - -if (-1024 << 14 !== -16777216) { - $ERROR('#459: -1024 << 14 === -16777216. Actual: ' + (-1024 << 14)); -} - - -if (-2048 << 14 !== -33554432) { - $ERROR('#460: -2048 << 14 === -33554432. Actual: ' + (-2048 << 14)); -} - - -if (-4096 << 14 !== -67108864) { - $ERROR('#461: -4096 << 14 === -67108864. Actual: ' + (-4096 << 14)); -} - - -if (-8192 << 14 !== -134217728) { - $ERROR('#462: -8192 << 14 === -134217728. Actual: ' + (-8192 << 14)); -} - - -if (-16384 << 14 !== -268435456) { - $ERROR('#463: -16384 << 14 === -268435456. Actual: ' + (-16384 << 14)); -} - - -if (-32768 << 14 !== -536870912) { - $ERROR('#464: -32768 << 14 === -536870912. Actual: ' + (-32768 << 14)); -} - - -if (-65536 << 14 !== -1073741824) { - $ERROR('#465: -65536 << 14 === -1073741824. Actual: ' + (-65536 << 14)); -} - - -if (-131072 << 14 !== -2147483648) { - $ERROR('#466: -131072 << 14 === -2147483648. Actual: ' + (-131072 << 14)); -} - - -if (-262144 << 14 !== 0) { - $ERROR('#467: -262144 << 14 === 0. Actual: ' + (-262144 << 14)); -} - - -if (-524288 << 14 !== 0) { - $ERROR('#468: -524288 << 14 === 0. Actual: ' + (-524288 << 14)); -} - - -if (-1048576 << 14 !== 0) { - $ERROR('#469: -1048576 << 14 === 0. Actual: ' + (-1048576 << 14)); -} - - -if (-2097152 << 14 !== 0) { - $ERROR('#470: -2097152 << 14 === 0. Actual: ' + (-2097152 << 14)); -} - - -if (-4194304 << 14 !== 0) { - $ERROR('#471: -4194304 << 14 === 0. Actual: ' + (-4194304 << 14)); -} - - -if (-8388608 << 14 !== 0) { - $ERROR('#472: -8388608 << 14 === 0. Actual: ' + (-8388608 << 14)); -} - - -if (-16777216 << 14 !== 0) { - $ERROR('#473: -16777216 << 14 === 0. Actual: ' + (-16777216 << 14)); -} - - -if (-33554432 << 14 !== 0) { - $ERROR('#474: -33554432 << 14 === 0. Actual: ' + (-33554432 << 14)); -} - - -if (-67108864 << 14 !== 0) { - $ERROR('#475: -67108864 << 14 === 0. Actual: ' + (-67108864 << 14)); -} - - -if (-134217728 << 14 !== 0) { - $ERROR('#476: -134217728 << 14 === 0. Actual: ' + (-134217728 << 14)); -} - - -if (-268435456 << 14 !== 0) { - $ERROR('#477: -268435456 << 14 === 0. Actual: ' + (-268435456 << 14)); -} - - -if (-536870912 << 14 !== 0) { - $ERROR('#478: -536870912 << 14 === 0. Actual: ' + (-536870912 << 14)); -} - - -if (-1073741824 << 14 !== 0) { - $ERROR('#479: -1073741824 << 14 === 0. Actual: ' + (-1073741824 << 14)); -} - - -if (-2147483648 << 14 !== 0) { - $ERROR('#480: -2147483648 << 14 === 0. Actual: ' + (-2147483648 << 14)); -} - - -if (-1 << 15 !== -32768) { - $ERROR('#481: -1 << 15 === -32768. Actual: ' + (-1 << 15)); -} - - -if (-2 << 15 !== -65536) { - $ERROR('#482: -2 << 15 === -65536. Actual: ' + (-2 << 15)); -} - - -if (-4 << 15 !== -131072) { - $ERROR('#483: -4 << 15 === -131072. Actual: ' + (-4 << 15)); -} - - -if (-8 << 15 !== -262144) { - $ERROR('#484: -8 << 15 === -262144. Actual: ' + (-8 << 15)); -} - - -if (-16 << 15 !== -524288) { - $ERROR('#485: -16 << 15 === -524288. Actual: ' + (-16 << 15)); -} - - -if (-32 << 15 !== -1048576) { - $ERROR('#486: -32 << 15 === -1048576. Actual: ' + (-32 << 15)); -} - - -if (-64 << 15 !== -2097152) { - $ERROR('#487: -64 << 15 === -2097152. Actual: ' + (-64 << 15)); -} - - -if (-128 << 15 !== -4194304) { - $ERROR('#488: -128 << 15 === -4194304. Actual: ' + (-128 << 15)); -} - - -if (-256 << 15 !== -8388608) { - $ERROR('#489: -256 << 15 === -8388608. Actual: ' + (-256 << 15)); -} - - -if (-512 << 15 !== -16777216) { - $ERROR('#490: -512 << 15 === -16777216. Actual: ' + (-512 << 15)); -} - - -if (-1024 << 15 !== -33554432) { - $ERROR('#491: -1024 << 15 === -33554432. Actual: ' + (-1024 << 15)); -} - - -if (-2048 << 15 !== -67108864) { - $ERROR('#492: -2048 << 15 === -67108864. Actual: ' + (-2048 << 15)); -} - - -if (-4096 << 15 !== -134217728) { - $ERROR('#493: -4096 << 15 === -134217728. Actual: ' + (-4096 << 15)); -} - - -if (-8192 << 15 !== -268435456) { - $ERROR('#494: -8192 << 15 === -268435456. Actual: ' + (-8192 << 15)); -} - - -if (-16384 << 15 !== -536870912) { - $ERROR('#495: -16384 << 15 === -536870912. Actual: ' + (-16384 << 15)); -} - - -if (-32768 << 15 !== -1073741824) { - $ERROR('#496: -32768 << 15 === -1073741824. Actual: ' + (-32768 << 15)); -} - - -if (-65536 << 15 !== -2147483648) { - $ERROR('#497: -65536 << 15 === -2147483648. Actual: ' + (-65536 << 15)); -} - - -if (-131072 << 15 !== 0) { - $ERROR('#498: -131072 << 15 === 0. Actual: ' + (-131072 << 15)); -} - - -if (-262144 << 15 !== 0) { - $ERROR('#499: -262144 << 15 === 0. Actual: ' + (-262144 << 15)); -} - - -if (-524288 << 15 !== 0) { - $ERROR('#500: -524288 << 15 === 0. Actual: ' + (-524288 << 15)); -} - - -if (-1048576 << 15 !== 0) { - $ERROR('#501: -1048576 << 15 === 0. Actual: ' + (-1048576 << 15)); -} - - -if (-2097152 << 15 !== 0) { - $ERROR('#502: -2097152 << 15 === 0. Actual: ' + (-2097152 << 15)); -} - - -if (-4194304 << 15 !== 0) { - $ERROR('#503: -4194304 << 15 === 0. Actual: ' + (-4194304 << 15)); -} - - -if (-8388608 << 15 !== 0) { - $ERROR('#504: -8388608 << 15 === 0. Actual: ' + (-8388608 << 15)); -} - - -if (-16777216 << 15 !== 0) { - $ERROR('#505: -16777216 << 15 === 0. Actual: ' + (-16777216 << 15)); -} - - -if (-33554432 << 15 !== 0) { - $ERROR('#506: -33554432 << 15 === 0. Actual: ' + (-33554432 << 15)); -} - - -if (-67108864 << 15 !== 0) { - $ERROR('#507: -67108864 << 15 === 0. Actual: ' + (-67108864 << 15)); -} - - -if (-134217728 << 15 !== 0) { - $ERROR('#508: -134217728 << 15 === 0. Actual: ' + (-134217728 << 15)); -} - - -if (-268435456 << 15 !== 0) { - $ERROR('#509: -268435456 << 15 === 0. Actual: ' + (-268435456 << 15)); -} - - -if (-536870912 << 15 !== 0) { - $ERROR('#510: -536870912 << 15 === 0. Actual: ' + (-536870912 << 15)); -} - - -if (-1073741824 << 15 !== 0) { - $ERROR('#511: -1073741824 << 15 === 0. Actual: ' + (-1073741824 << 15)); -} - - -if (-2147483648 << 15 !== 0) { - $ERROR('#512: -2147483648 << 15 === 0. Actual: ' + (-2147483648 << 15)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A4_T2.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A4_T2.js deleted file mode 100644 index 373dc5cbf..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A4_T2.js +++ /dev/null @@ -1,2571 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.1_A4_T2; - * @section: 11.7.1; - * @assertion: Check operator x << y in distinct points; - * @description: ShiftExpression = 2^n - 1, n = 16...31; - */ - -//CHECK - -if (-1 << 16 !== -65536) { - $ERROR('#513: -1 << 16 === -65536. Actual: ' + (-1 << 16)); -} - - -if (-2 << 16 !== -131072) { - $ERROR('#514: -2 << 16 === -131072. Actual: ' + (-2 << 16)); -} - - -if (-4 << 16 !== -262144) { - $ERROR('#515: -4 << 16 === -262144. Actual: ' + (-4 << 16)); -} - - -if (-8 << 16 !== -524288) { - $ERROR('#516: -8 << 16 === -524288. Actual: ' + (-8 << 16)); -} - - -if (-16 << 16 !== -1048576) { - $ERROR('#517: -16 << 16 === -1048576. Actual: ' + (-16 << 16)); -} - - -if (-32 << 16 !== -2097152) { - $ERROR('#518: -32 << 16 === -2097152. Actual: ' + (-32 << 16)); -} - - -if (-64 << 16 !== -4194304) { - $ERROR('#519: -64 << 16 === -4194304. Actual: ' + (-64 << 16)); -} - - -if (-128 << 16 !== -8388608) { - $ERROR('#520: -128 << 16 === -8388608. Actual: ' + (-128 << 16)); -} - - -if (-256 << 16 !== -16777216) { - $ERROR('#521: -256 << 16 === -16777216. Actual: ' + (-256 << 16)); -} - - -if (-512 << 16 !== -33554432) { - $ERROR('#522: -512 << 16 === -33554432. Actual: ' + (-512 << 16)); -} - - -if (-1024 << 16 !== -67108864) { - $ERROR('#523: -1024 << 16 === -67108864. Actual: ' + (-1024 << 16)); -} - - -if (-2048 << 16 !== -134217728) { - $ERROR('#524: -2048 << 16 === -134217728. Actual: ' + (-2048 << 16)); -} - - -if (-4096 << 16 !== -268435456) { - $ERROR('#525: -4096 << 16 === -268435456. Actual: ' + (-4096 << 16)); -} - - -if (-8192 << 16 !== -536870912) { - $ERROR('#526: -8192 << 16 === -536870912. Actual: ' + (-8192 << 16)); -} - - -if (-16384 << 16 !== -1073741824) { - $ERROR('#527: -16384 << 16 === -1073741824. Actual: ' + (-16384 << 16)); -} - - -if (-32768 << 16 !== -2147483648) { - $ERROR('#528: -32768 << 16 === -2147483648. Actual: ' + (-32768 << 16)); -} - - -if (-65536 << 16 !== 0) { - $ERROR('#529: -65536 << 16 === 0. Actual: ' + (-65536 << 16)); -} - - -if (-131072 << 16 !== 0) { - $ERROR('#530: -131072 << 16 === 0. Actual: ' + (-131072 << 16)); -} - - -if (-262144 << 16 !== 0) { - $ERROR('#531: -262144 << 16 === 0. Actual: ' + (-262144 << 16)); -} - - -if (-524288 << 16 !== 0) { - $ERROR('#532: -524288 << 16 === 0. Actual: ' + (-524288 << 16)); -} - - -if (-1048576 << 16 !== 0) { - $ERROR('#533: -1048576 << 16 === 0. Actual: ' + (-1048576 << 16)); -} - - -if (-2097152 << 16 !== 0) { - $ERROR('#534: -2097152 << 16 === 0. Actual: ' + (-2097152 << 16)); -} - - -if (-4194304 << 16 !== 0) { - $ERROR('#535: -4194304 << 16 === 0. Actual: ' + (-4194304 << 16)); -} - - -if (-8388608 << 16 !== 0) { - $ERROR('#536: -8388608 << 16 === 0. Actual: ' + (-8388608 << 16)); -} - - -if (-16777216 << 16 !== 0) { - $ERROR('#537: -16777216 << 16 === 0. Actual: ' + (-16777216 << 16)); -} - - -if (-33554432 << 16 !== 0) { - $ERROR('#538: -33554432 << 16 === 0. Actual: ' + (-33554432 << 16)); -} - - -if (-67108864 << 16 !== 0) { - $ERROR('#539: -67108864 << 16 === 0. Actual: ' + (-67108864 << 16)); -} - - -if (-134217728 << 16 !== 0) { - $ERROR('#540: -134217728 << 16 === 0. Actual: ' + (-134217728 << 16)); -} - - -if (-268435456 << 16 !== 0) { - $ERROR('#541: -268435456 << 16 === 0. Actual: ' + (-268435456 << 16)); -} - - -if (-536870912 << 16 !== 0) { - $ERROR('#542: -536870912 << 16 === 0. Actual: ' + (-536870912 << 16)); -} - - -if (-1073741824 << 16 !== 0) { - $ERROR('#543: -1073741824 << 16 === 0. Actual: ' + (-1073741824 << 16)); -} - - -if (-2147483648 << 16 !== 0) { - $ERROR('#544: -2147483648 << 16 === 0. Actual: ' + (-2147483648 << 16)); -} - - -if (-1 << 17 !== -131072) { - $ERROR('#545: -1 << 17 === -131072. Actual: ' + (-1 << 17)); -} - - -if (-2 << 17 !== -262144) { - $ERROR('#546: -2 << 17 === -262144. Actual: ' + (-2 << 17)); -} - - -if (-4 << 17 !== -524288) { - $ERROR('#547: -4 << 17 === -524288. Actual: ' + (-4 << 17)); -} - - -if (-8 << 17 !== -1048576) { - $ERROR('#548: -8 << 17 === -1048576. Actual: ' + (-8 << 17)); -} - - -if (-16 << 17 !== -2097152) { - $ERROR('#549: -16 << 17 === -2097152. Actual: ' + (-16 << 17)); -} - - -if (-32 << 17 !== -4194304) { - $ERROR('#550: -32 << 17 === -4194304. Actual: ' + (-32 << 17)); -} - - -if (-64 << 17 !== -8388608) { - $ERROR('#551: -64 << 17 === -8388608. Actual: ' + (-64 << 17)); -} - - -if (-128 << 17 !== -16777216) { - $ERROR('#552: -128 << 17 === -16777216. Actual: ' + (-128 << 17)); -} - - -if (-256 << 17 !== -33554432) { - $ERROR('#553: -256 << 17 === -33554432. Actual: ' + (-256 << 17)); -} - - -if (-512 << 17 !== -67108864) { - $ERROR('#554: -512 << 17 === -67108864. Actual: ' + (-512 << 17)); -} - - -if (-1024 << 17 !== -134217728) { - $ERROR('#555: -1024 << 17 === -134217728. Actual: ' + (-1024 << 17)); -} - - -if (-2048 << 17 !== -268435456) { - $ERROR('#556: -2048 << 17 === -268435456. Actual: ' + (-2048 << 17)); -} - - -if (-4096 << 17 !== -536870912) { - $ERROR('#557: -4096 << 17 === -536870912. Actual: ' + (-4096 << 17)); -} - - -if (-8192 << 17 !== -1073741824) { - $ERROR('#558: -8192 << 17 === -1073741824. Actual: ' + (-8192 << 17)); -} - - -if (-16384 << 17 !== -2147483648) { - $ERROR('#559: -16384 << 17 === -2147483648. Actual: ' + (-16384 << 17)); -} - - -if (-32768 << 17 !== 0) { - $ERROR('#560: -32768 << 17 === 0. Actual: ' + (-32768 << 17)); -} - - -if (-65536 << 17 !== 0) { - $ERROR('#561: -65536 << 17 === 0. Actual: ' + (-65536 << 17)); -} - - -if (-131072 << 17 !== 0) { - $ERROR('#562: -131072 << 17 === 0. Actual: ' + (-131072 << 17)); -} - - -if (-262144 << 17 !== 0) { - $ERROR('#563: -262144 << 17 === 0. Actual: ' + (-262144 << 17)); -} - - -if (-524288 << 17 !== 0) { - $ERROR('#564: -524288 << 17 === 0. Actual: ' + (-524288 << 17)); -} - - -if (-1048576 << 17 !== 0) { - $ERROR('#565: -1048576 << 17 === 0. Actual: ' + (-1048576 << 17)); -} - - -if (-2097152 << 17 !== 0) { - $ERROR('#566: -2097152 << 17 === 0. Actual: ' + (-2097152 << 17)); -} - - -if (-4194304 << 17 !== 0) { - $ERROR('#567: -4194304 << 17 === 0. Actual: ' + (-4194304 << 17)); -} - - -if (-8388608 << 17 !== 0) { - $ERROR('#568: -8388608 << 17 === 0. Actual: ' + (-8388608 << 17)); -} - - -if (-16777216 << 17 !== 0) { - $ERROR('#569: -16777216 << 17 === 0. Actual: ' + (-16777216 << 17)); -} - - -if (-33554432 << 17 !== 0) { - $ERROR('#570: -33554432 << 17 === 0. Actual: ' + (-33554432 << 17)); -} - - -if (-67108864 << 17 !== 0) { - $ERROR('#571: -67108864 << 17 === 0. Actual: ' + (-67108864 << 17)); -} - - -if (-134217728 << 17 !== 0) { - $ERROR('#572: -134217728 << 17 === 0. Actual: ' + (-134217728 << 17)); -} - - -if (-268435456 << 17 !== 0) { - $ERROR('#573: -268435456 << 17 === 0. Actual: ' + (-268435456 << 17)); -} - - -if (-536870912 << 17 !== 0) { - $ERROR('#574: -536870912 << 17 === 0. Actual: ' + (-536870912 << 17)); -} - - -if (-1073741824 << 17 !== 0) { - $ERROR('#575: -1073741824 << 17 === 0. Actual: ' + (-1073741824 << 17)); -} - - -if (-2147483648 << 17 !== 0) { - $ERROR('#576: -2147483648 << 17 === 0. Actual: ' + (-2147483648 << 17)); -} - - -if (-1 << 18 !== -262144) { - $ERROR('#577: -1 << 18 === -262144. Actual: ' + (-1 << 18)); -} - - -if (-2 << 18 !== -524288) { - $ERROR('#578: -2 << 18 === -524288. Actual: ' + (-2 << 18)); -} - - -if (-4 << 18 !== -1048576) { - $ERROR('#579: -4 << 18 === -1048576. Actual: ' + (-4 << 18)); -} - - -if (-8 << 18 !== -2097152) { - $ERROR('#580: -8 << 18 === -2097152. Actual: ' + (-8 << 18)); -} - - -if (-16 << 18 !== -4194304) { - $ERROR('#581: -16 << 18 === -4194304. Actual: ' + (-16 << 18)); -} - - -if (-32 << 18 !== -8388608) { - $ERROR('#582: -32 << 18 === -8388608. Actual: ' + (-32 << 18)); -} - - -if (-64 << 18 !== -16777216) { - $ERROR('#583: -64 << 18 === -16777216. Actual: ' + (-64 << 18)); -} - - -if (-128 << 18 !== -33554432) { - $ERROR('#584: -128 << 18 === -33554432. Actual: ' + (-128 << 18)); -} - - -if (-256 << 18 !== -67108864) { - $ERROR('#585: -256 << 18 === -67108864. Actual: ' + (-256 << 18)); -} - - -if (-512 << 18 !== -134217728) { - $ERROR('#586: -512 << 18 === -134217728. Actual: ' + (-512 << 18)); -} - - -if (-1024 << 18 !== -268435456) { - $ERROR('#587: -1024 << 18 === -268435456. Actual: ' + (-1024 << 18)); -} - - -if (-2048 << 18 !== -536870912) { - $ERROR('#588: -2048 << 18 === -536870912. Actual: ' + (-2048 << 18)); -} - - -if (-4096 << 18 !== -1073741824) { - $ERROR('#589: -4096 << 18 === -1073741824. Actual: ' + (-4096 << 18)); -} - - -if (-8192 << 18 !== -2147483648) { - $ERROR('#590: -8192 << 18 === -2147483648. Actual: ' + (-8192 << 18)); -} - - -if (-16384 << 18 !== 0) { - $ERROR('#591: -16384 << 18 === 0. Actual: ' + (-16384 << 18)); -} - - -if (-32768 << 18 !== 0) { - $ERROR('#592: -32768 << 18 === 0. Actual: ' + (-32768 << 18)); -} - - -if (-65536 << 18 !== 0) { - $ERROR('#593: -65536 << 18 === 0. Actual: ' + (-65536 << 18)); -} - - -if (-131072 << 18 !== 0) { - $ERROR('#594: -131072 << 18 === 0. Actual: ' + (-131072 << 18)); -} - - -if (-262144 << 18 !== 0) { - $ERROR('#595: -262144 << 18 === 0. Actual: ' + (-262144 << 18)); -} - - -if (-524288 << 18 !== 0) { - $ERROR('#596: -524288 << 18 === 0. Actual: ' + (-524288 << 18)); -} - - -if (-1048576 << 18 !== 0) { - $ERROR('#597: -1048576 << 18 === 0. Actual: ' + (-1048576 << 18)); -} - - -if (-2097152 << 18 !== 0) { - $ERROR('#598: -2097152 << 18 === 0. Actual: ' + (-2097152 << 18)); -} - - -if (-4194304 << 18 !== 0) { - $ERROR('#599: -4194304 << 18 === 0. Actual: ' + (-4194304 << 18)); -} - - -if (-8388608 << 18 !== 0) { - $ERROR('#600: -8388608 << 18 === 0. Actual: ' + (-8388608 << 18)); -} - - -if (-16777216 << 18 !== 0) { - $ERROR('#601: -16777216 << 18 === 0. Actual: ' + (-16777216 << 18)); -} - - -if (-33554432 << 18 !== 0) { - $ERROR('#602: -33554432 << 18 === 0. Actual: ' + (-33554432 << 18)); -} - - -if (-67108864 << 18 !== 0) { - $ERROR('#603: -67108864 << 18 === 0. Actual: ' + (-67108864 << 18)); -} - - -if (-134217728 << 18 !== 0) { - $ERROR('#604: -134217728 << 18 === 0. Actual: ' + (-134217728 << 18)); -} - - -if (-268435456 << 18 !== 0) { - $ERROR('#605: -268435456 << 18 === 0. Actual: ' + (-268435456 << 18)); -} - - -if (-536870912 << 18 !== 0) { - $ERROR('#606: -536870912 << 18 === 0. Actual: ' + (-536870912 << 18)); -} - - -if (-1073741824 << 18 !== 0) { - $ERROR('#607: -1073741824 << 18 === 0. Actual: ' + (-1073741824 << 18)); -} - - -if (-2147483648 << 18 !== 0) { - $ERROR('#608: -2147483648 << 18 === 0. Actual: ' + (-2147483648 << 18)); -} - - -if (-1 << 19 !== -524288) { - $ERROR('#609: -1 << 19 === -524288. Actual: ' + (-1 << 19)); -} - - -if (-2 << 19 !== -1048576) { - $ERROR('#610: -2 << 19 === -1048576. Actual: ' + (-2 << 19)); -} - - -if (-4 << 19 !== -2097152) { - $ERROR('#611: -4 << 19 === -2097152. Actual: ' + (-4 << 19)); -} - - -if (-8 << 19 !== -4194304) { - $ERROR('#612: -8 << 19 === -4194304. Actual: ' + (-8 << 19)); -} - - -if (-16 << 19 !== -8388608) { - $ERROR('#613: -16 << 19 === -8388608. Actual: ' + (-16 << 19)); -} - - -if (-32 << 19 !== -16777216) { - $ERROR('#614: -32 << 19 === -16777216. Actual: ' + (-32 << 19)); -} - - -if (-64 << 19 !== -33554432) { - $ERROR('#615: -64 << 19 === -33554432. Actual: ' + (-64 << 19)); -} - - -if (-128 << 19 !== -67108864) { - $ERROR('#616: -128 << 19 === -67108864. Actual: ' + (-128 << 19)); -} - - -if (-256 << 19 !== -134217728) { - $ERROR('#617: -256 << 19 === -134217728. Actual: ' + (-256 << 19)); -} - - -if (-512 << 19 !== -268435456) { - $ERROR('#618: -512 << 19 === -268435456. Actual: ' + (-512 << 19)); -} - - -if (-1024 << 19 !== -536870912) { - $ERROR('#619: -1024 << 19 === -536870912. Actual: ' + (-1024 << 19)); -} - - -if (-2048 << 19 !== -1073741824) { - $ERROR('#620: -2048 << 19 === -1073741824. Actual: ' + (-2048 << 19)); -} - - -if (-4096 << 19 !== -2147483648) { - $ERROR('#621: -4096 << 19 === -2147483648. Actual: ' + (-4096 << 19)); -} - - -if (-8192 << 19 !== 0) { - $ERROR('#622: -8192 << 19 === 0. Actual: ' + (-8192 << 19)); -} - - -if (-16384 << 19 !== 0) { - $ERROR('#623: -16384 << 19 === 0. Actual: ' + (-16384 << 19)); -} - - -if (-32768 << 19 !== 0) { - $ERROR('#624: -32768 << 19 === 0. Actual: ' + (-32768 << 19)); -} - - -if (-65536 << 19 !== 0) { - $ERROR('#625: -65536 << 19 === 0. Actual: ' + (-65536 << 19)); -} - - -if (-131072 << 19 !== 0) { - $ERROR('#626: -131072 << 19 === 0. Actual: ' + (-131072 << 19)); -} - - -if (-262144 << 19 !== 0) { - $ERROR('#627: -262144 << 19 === 0. Actual: ' + (-262144 << 19)); -} - - -if (-524288 << 19 !== 0) { - $ERROR('#628: -524288 << 19 === 0. Actual: ' + (-524288 << 19)); -} - - -if (-1048576 << 19 !== 0) { - $ERROR('#629: -1048576 << 19 === 0. Actual: ' + (-1048576 << 19)); -} - - -if (-2097152 << 19 !== 0) { - $ERROR('#630: -2097152 << 19 === 0. Actual: ' + (-2097152 << 19)); -} - - -if (-4194304 << 19 !== 0) { - $ERROR('#631: -4194304 << 19 === 0. Actual: ' + (-4194304 << 19)); -} - - -if (-8388608 << 19 !== 0) { - $ERROR('#632: -8388608 << 19 === 0. Actual: ' + (-8388608 << 19)); -} - - -if (-16777216 << 19 !== 0) { - $ERROR('#633: -16777216 << 19 === 0. Actual: ' + (-16777216 << 19)); -} - - -if (-33554432 << 19 !== 0) { - $ERROR('#634: -33554432 << 19 === 0. Actual: ' + (-33554432 << 19)); -} - - -if (-67108864 << 19 !== 0) { - $ERROR('#635: -67108864 << 19 === 0. Actual: ' + (-67108864 << 19)); -} - - -if (-134217728 << 19 !== 0) { - $ERROR('#636: -134217728 << 19 === 0. Actual: ' + (-134217728 << 19)); -} - - -if (-268435456 << 19 !== 0) { - $ERROR('#637: -268435456 << 19 === 0. Actual: ' + (-268435456 << 19)); -} - - -if (-536870912 << 19 !== 0) { - $ERROR('#638: -536870912 << 19 === 0. Actual: ' + (-536870912 << 19)); -} - - -if (-1073741824 << 19 !== 0) { - $ERROR('#639: -1073741824 << 19 === 0. Actual: ' + (-1073741824 << 19)); -} - - -if (-2147483648 << 19 !== 0) { - $ERROR('#640: -2147483648 << 19 === 0. Actual: ' + (-2147483648 << 19)); -} - - -if (-1 << 20 !== -1048576) { - $ERROR('#641: -1 << 20 === -1048576. Actual: ' + (-1 << 20)); -} - - -if (-2 << 20 !== -2097152) { - $ERROR('#642: -2 << 20 === -2097152. Actual: ' + (-2 << 20)); -} - - -if (-4 << 20 !== -4194304) { - $ERROR('#643: -4 << 20 === -4194304. Actual: ' + (-4 << 20)); -} - - -if (-8 << 20 !== -8388608) { - $ERROR('#644: -8 << 20 === -8388608. Actual: ' + (-8 << 20)); -} - - -if (-16 << 20 !== -16777216) { - $ERROR('#645: -16 << 20 === -16777216. Actual: ' + (-16 << 20)); -} - - -if (-32 << 20 !== -33554432) { - $ERROR('#646: -32 << 20 === -33554432. Actual: ' + (-32 << 20)); -} - - -if (-64 << 20 !== -67108864) { - $ERROR('#647: -64 << 20 === -67108864. Actual: ' + (-64 << 20)); -} - - -if (-128 << 20 !== -134217728) { - $ERROR('#648: -128 << 20 === -134217728. Actual: ' + (-128 << 20)); -} - - -if (-256 << 20 !== -268435456) { - $ERROR('#649: -256 << 20 === -268435456. Actual: ' + (-256 << 20)); -} - - -if (-512 << 20 !== -536870912) { - $ERROR('#650: -512 << 20 === -536870912. Actual: ' + (-512 << 20)); -} - - -if (-1024 << 20 !== -1073741824) { - $ERROR('#651: -1024 << 20 === -1073741824. Actual: ' + (-1024 << 20)); -} - - -if (-2048 << 20 !== -2147483648) { - $ERROR('#652: -2048 << 20 === -2147483648. Actual: ' + (-2048 << 20)); -} - - -if (-4096 << 20 !== 0) { - $ERROR('#653: -4096 << 20 === 0. Actual: ' + (-4096 << 20)); -} - - -if (-8192 << 20 !== 0) { - $ERROR('#654: -8192 << 20 === 0. Actual: ' + (-8192 << 20)); -} - - -if (-16384 << 20 !== 0) { - $ERROR('#655: -16384 << 20 === 0. Actual: ' + (-16384 << 20)); -} - - -if (-32768 << 20 !== 0) { - $ERROR('#656: -32768 << 20 === 0. Actual: ' + (-32768 << 20)); -} - - -if (-65536 << 20 !== 0) { - $ERROR('#657: -65536 << 20 === 0. Actual: ' + (-65536 << 20)); -} - - -if (-131072 << 20 !== 0) { - $ERROR('#658: -131072 << 20 === 0. Actual: ' + (-131072 << 20)); -} - - -if (-262144 << 20 !== 0) { - $ERROR('#659: -262144 << 20 === 0. Actual: ' + (-262144 << 20)); -} - - -if (-524288 << 20 !== 0) { - $ERROR('#660: -524288 << 20 === 0. Actual: ' + (-524288 << 20)); -} - - -if (-1048576 << 20 !== 0) { - $ERROR('#661: -1048576 << 20 === 0. Actual: ' + (-1048576 << 20)); -} - - -if (-2097152 << 20 !== 0) { - $ERROR('#662: -2097152 << 20 === 0. Actual: ' + (-2097152 << 20)); -} - - -if (-4194304 << 20 !== 0) { - $ERROR('#663: -4194304 << 20 === 0. Actual: ' + (-4194304 << 20)); -} - - -if (-8388608 << 20 !== 0) { - $ERROR('#664: -8388608 << 20 === 0. Actual: ' + (-8388608 << 20)); -} - - -if (-16777216 << 20 !== 0) { - $ERROR('#665: -16777216 << 20 === 0. Actual: ' + (-16777216 << 20)); -} - - -if (-33554432 << 20 !== 0) { - $ERROR('#666: -33554432 << 20 === 0. Actual: ' + (-33554432 << 20)); -} - - -if (-67108864 << 20 !== 0) { - $ERROR('#667: -67108864 << 20 === 0. Actual: ' + (-67108864 << 20)); -} - - -if (-134217728 << 20 !== 0) { - $ERROR('#668: -134217728 << 20 === 0. Actual: ' + (-134217728 << 20)); -} - - -if (-268435456 << 20 !== 0) { - $ERROR('#669: -268435456 << 20 === 0. Actual: ' + (-268435456 << 20)); -} - - -if (-536870912 << 20 !== 0) { - $ERROR('#670: -536870912 << 20 === 0. Actual: ' + (-536870912 << 20)); -} - - -if (-1073741824 << 20 !== 0) { - $ERROR('#671: -1073741824 << 20 === 0. Actual: ' + (-1073741824 << 20)); -} - - -if (-2147483648 << 20 !== 0) { - $ERROR('#672: -2147483648 << 20 === 0. Actual: ' + (-2147483648 << 20)); -} - - -if (-1 << 21 !== -2097152) { - $ERROR('#673: -1 << 21 === -2097152. Actual: ' + (-1 << 21)); -} - - -if (-2 << 21 !== -4194304) { - $ERROR('#674: -2 << 21 === -4194304. Actual: ' + (-2 << 21)); -} - - -if (-4 << 21 !== -8388608) { - $ERROR('#675: -4 << 21 === -8388608. Actual: ' + (-4 << 21)); -} - - -if (-8 << 21 !== -16777216) { - $ERROR('#676: -8 << 21 === -16777216. Actual: ' + (-8 << 21)); -} - - -if (-16 << 21 !== -33554432) { - $ERROR('#677: -16 << 21 === -33554432. Actual: ' + (-16 << 21)); -} - - -if (-32 << 21 !== -67108864) { - $ERROR('#678: -32 << 21 === -67108864. Actual: ' + (-32 << 21)); -} - - -if (-64 << 21 !== -134217728) { - $ERROR('#679: -64 << 21 === -134217728. Actual: ' + (-64 << 21)); -} - - -if (-128 << 21 !== -268435456) { - $ERROR('#680: -128 << 21 === -268435456. Actual: ' + (-128 << 21)); -} - - -if (-256 << 21 !== -536870912) { - $ERROR('#681: -256 << 21 === -536870912. Actual: ' + (-256 << 21)); -} - - -if (-512 << 21 !== -1073741824) { - $ERROR('#682: -512 << 21 === -1073741824. Actual: ' + (-512 << 21)); -} - - -if (-1024 << 21 !== -2147483648) { - $ERROR('#683: -1024 << 21 === -2147483648. Actual: ' + (-1024 << 21)); -} - - -if (-2048 << 21 !== 0) { - $ERROR('#684: -2048 << 21 === 0. Actual: ' + (-2048 << 21)); -} - - -if (-4096 << 21 !== 0) { - $ERROR('#685: -4096 << 21 === 0. Actual: ' + (-4096 << 21)); -} - - -if (-8192 << 21 !== 0) { - $ERROR('#686: -8192 << 21 === 0. Actual: ' + (-8192 << 21)); -} - - -if (-16384 << 21 !== 0) { - $ERROR('#687: -16384 << 21 === 0. Actual: ' + (-16384 << 21)); -} - - -if (-32768 << 21 !== 0) { - $ERROR('#688: -32768 << 21 === 0. Actual: ' + (-32768 << 21)); -} - - -if (-65536 << 21 !== 0) { - $ERROR('#689: -65536 << 21 === 0. Actual: ' + (-65536 << 21)); -} - - -if (-131072 << 21 !== 0) { - $ERROR('#690: -131072 << 21 === 0. Actual: ' + (-131072 << 21)); -} - - -if (-262144 << 21 !== 0) { - $ERROR('#691: -262144 << 21 === 0. Actual: ' + (-262144 << 21)); -} - - -if (-524288 << 21 !== 0) { - $ERROR('#692: -524288 << 21 === 0. Actual: ' + (-524288 << 21)); -} - - -if (-1048576 << 21 !== 0) { - $ERROR('#693: -1048576 << 21 === 0. Actual: ' + (-1048576 << 21)); -} - - -if (-2097152 << 21 !== 0) { - $ERROR('#694: -2097152 << 21 === 0. Actual: ' + (-2097152 << 21)); -} - - -if (-4194304 << 21 !== 0) { - $ERROR('#695: -4194304 << 21 === 0. Actual: ' + (-4194304 << 21)); -} - - -if (-8388608 << 21 !== 0) { - $ERROR('#696: -8388608 << 21 === 0. Actual: ' + (-8388608 << 21)); -} - - -if (-16777216 << 21 !== 0) { - $ERROR('#697: -16777216 << 21 === 0. Actual: ' + (-16777216 << 21)); -} - - -if (-33554432 << 21 !== 0) { - $ERROR('#698: -33554432 << 21 === 0. Actual: ' + (-33554432 << 21)); -} - - -if (-67108864 << 21 !== 0) { - $ERROR('#699: -67108864 << 21 === 0. Actual: ' + (-67108864 << 21)); -} - - -if (-134217728 << 21 !== 0) { - $ERROR('#700: -134217728 << 21 === 0. Actual: ' + (-134217728 << 21)); -} - - -if (-268435456 << 21 !== 0) { - $ERROR('#701: -268435456 << 21 === 0. Actual: ' + (-268435456 << 21)); -} - - -if (-536870912 << 21 !== 0) { - $ERROR('#702: -536870912 << 21 === 0. Actual: ' + (-536870912 << 21)); -} - - -if (-1073741824 << 21 !== 0) { - $ERROR('#703: -1073741824 << 21 === 0. Actual: ' + (-1073741824 << 21)); -} - - -if (-2147483648 << 21 !== 0) { - $ERROR('#704: -2147483648 << 21 === 0. Actual: ' + (-2147483648 << 21)); -} - - -if (-1 << 22 !== -4194304) { - $ERROR('#705: -1 << 22 === -4194304. Actual: ' + (-1 << 22)); -} - - -if (-2 << 22 !== -8388608) { - $ERROR('#706: -2 << 22 === -8388608. Actual: ' + (-2 << 22)); -} - - -if (-4 << 22 !== -16777216) { - $ERROR('#707: -4 << 22 === -16777216. Actual: ' + (-4 << 22)); -} - - -if (-8 << 22 !== -33554432) { - $ERROR('#708: -8 << 22 === -33554432. Actual: ' + (-8 << 22)); -} - - -if (-16 << 22 !== -67108864) { - $ERROR('#709: -16 << 22 === -67108864. Actual: ' + (-16 << 22)); -} - - -if (-32 << 22 !== -134217728) { - $ERROR('#710: -32 << 22 === -134217728. Actual: ' + (-32 << 22)); -} - - -if (-64 << 22 !== -268435456) { - $ERROR('#711: -64 << 22 === -268435456. Actual: ' + (-64 << 22)); -} - - -if (-128 << 22 !== -536870912) { - $ERROR('#712: -128 << 22 === -536870912. Actual: ' + (-128 << 22)); -} - - -if (-256 << 22 !== -1073741824) { - $ERROR('#713: -256 << 22 === -1073741824. Actual: ' + (-256 << 22)); -} - - -if (-512 << 22 !== -2147483648) { - $ERROR('#714: -512 << 22 === -2147483648. Actual: ' + (-512 << 22)); -} - - -if (-1024 << 22 !== 0) { - $ERROR('#715: -1024 << 22 === 0. Actual: ' + (-1024 << 22)); -} - - -if (-2048 << 22 !== 0) { - $ERROR('#716: -2048 << 22 === 0. Actual: ' + (-2048 << 22)); -} - - -if (-4096 << 22 !== 0) { - $ERROR('#717: -4096 << 22 === 0. Actual: ' + (-4096 << 22)); -} - - -if (-8192 << 22 !== 0) { - $ERROR('#718: -8192 << 22 === 0. Actual: ' + (-8192 << 22)); -} - - -if (-16384 << 22 !== 0) { - $ERROR('#719: -16384 << 22 === 0. Actual: ' + (-16384 << 22)); -} - - -if (-32768 << 22 !== 0) { - $ERROR('#720: -32768 << 22 === 0. Actual: ' + (-32768 << 22)); -} - - -if (-65536 << 22 !== 0) { - $ERROR('#721: -65536 << 22 === 0. Actual: ' + (-65536 << 22)); -} - - -if (-131072 << 22 !== 0) { - $ERROR('#722: -131072 << 22 === 0. Actual: ' + (-131072 << 22)); -} - - -if (-262144 << 22 !== 0) { - $ERROR('#723: -262144 << 22 === 0. Actual: ' + (-262144 << 22)); -} - - -if (-524288 << 22 !== 0) { - $ERROR('#724: -524288 << 22 === 0. Actual: ' + (-524288 << 22)); -} - - -if (-1048576 << 22 !== 0) { - $ERROR('#725: -1048576 << 22 === 0. Actual: ' + (-1048576 << 22)); -} - - -if (-2097152 << 22 !== 0) { - $ERROR('#726: -2097152 << 22 === 0. Actual: ' + (-2097152 << 22)); -} - - -if (-4194304 << 22 !== 0) { - $ERROR('#727: -4194304 << 22 === 0. Actual: ' + (-4194304 << 22)); -} - - -if (-8388608 << 22 !== 0) { - $ERROR('#728: -8388608 << 22 === 0. Actual: ' + (-8388608 << 22)); -} - - -if (-16777216 << 22 !== 0) { - $ERROR('#729: -16777216 << 22 === 0. Actual: ' + (-16777216 << 22)); -} - - -if (-33554432 << 22 !== 0) { - $ERROR('#730: -33554432 << 22 === 0. Actual: ' + (-33554432 << 22)); -} - - -if (-67108864 << 22 !== 0) { - $ERROR('#731: -67108864 << 22 === 0. Actual: ' + (-67108864 << 22)); -} - - -if (-134217728 << 22 !== 0) { - $ERROR('#732: -134217728 << 22 === 0. Actual: ' + (-134217728 << 22)); -} - - -if (-268435456 << 22 !== 0) { - $ERROR('#733: -268435456 << 22 === 0. Actual: ' + (-268435456 << 22)); -} - - -if (-536870912 << 22 !== 0) { - $ERROR('#734: -536870912 << 22 === 0. Actual: ' + (-536870912 << 22)); -} - - -if (-1073741824 << 22 !== 0) { - $ERROR('#735: -1073741824 << 22 === 0. Actual: ' + (-1073741824 << 22)); -} - - -if (-2147483648 << 22 !== 0) { - $ERROR('#736: -2147483648 << 22 === 0. Actual: ' + (-2147483648 << 22)); -} - - -if (-1 << 23 !== -8388608) { - $ERROR('#737: -1 << 23 === -8388608. Actual: ' + (-1 << 23)); -} - - -if (-2 << 23 !== -16777216) { - $ERROR('#738: -2 << 23 === -16777216. Actual: ' + (-2 << 23)); -} - - -if (-4 << 23 !== -33554432) { - $ERROR('#739: -4 << 23 === -33554432. Actual: ' + (-4 << 23)); -} - - -if (-8 << 23 !== -67108864) { - $ERROR('#740: -8 << 23 === -67108864. Actual: ' + (-8 << 23)); -} - - -if (-16 << 23 !== -134217728) { - $ERROR('#741: -16 << 23 === -134217728. Actual: ' + (-16 << 23)); -} - - -if (-32 << 23 !== -268435456) { - $ERROR('#742: -32 << 23 === -268435456. Actual: ' + (-32 << 23)); -} - - -if (-64 << 23 !== -536870912) { - $ERROR('#743: -64 << 23 === -536870912. Actual: ' + (-64 << 23)); -} - - -if (-128 << 23 !== -1073741824) { - $ERROR('#744: -128 << 23 === -1073741824. Actual: ' + (-128 << 23)); -} - - -if (-256 << 23 !== -2147483648) { - $ERROR('#745: -256 << 23 === -2147483648. Actual: ' + (-256 << 23)); -} - - -if (-512 << 23 !== 0) { - $ERROR('#746: -512 << 23 === 0. Actual: ' + (-512 << 23)); -} - - -if (-1024 << 23 !== 0) { - $ERROR('#747: -1024 << 23 === 0. Actual: ' + (-1024 << 23)); -} - - -if (-2048 << 23 !== 0) { - $ERROR('#748: -2048 << 23 === 0. Actual: ' + (-2048 << 23)); -} - - -if (-4096 << 23 !== 0) { - $ERROR('#749: -4096 << 23 === 0. Actual: ' + (-4096 << 23)); -} - - -if (-8192 << 23 !== 0) { - $ERROR('#750: -8192 << 23 === 0. Actual: ' + (-8192 << 23)); -} - - -if (-16384 << 23 !== 0) { - $ERROR('#751: -16384 << 23 === 0. Actual: ' + (-16384 << 23)); -} - - -if (-32768 << 23 !== 0) { - $ERROR('#752: -32768 << 23 === 0. Actual: ' + (-32768 << 23)); -} - - -if (-65536 << 23 !== 0) { - $ERROR('#753: -65536 << 23 === 0. Actual: ' + (-65536 << 23)); -} - - -if (-131072 << 23 !== 0) { - $ERROR('#754: -131072 << 23 === 0. Actual: ' + (-131072 << 23)); -} - - -if (-262144 << 23 !== 0) { - $ERROR('#755: -262144 << 23 === 0. Actual: ' + (-262144 << 23)); -} - - -if (-524288 << 23 !== 0) { - $ERROR('#756: -524288 << 23 === 0. Actual: ' + (-524288 << 23)); -} - - -if (-1048576 << 23 !== 0) { - $ERROR('#757: -1048576 << 23 === 0. Actual: ' + (-1048576 << 23)); -} - - -if (-2097152 << 23 !== 0) { - $ERROR('#758: -2097152 << 23 === 0. Actual: ' + (-2097152 << 23)); -} - - -if (-4194304 << 23 !== 0) { - $ERROR('#759: -4194304 << 23 === 0. Actual: ' + (-4194304 << 23)); -} - - -if (-8388608 << 23 !== 0) { - $ERROR('#760: -8388608 << 23 === 0. Actual: ' + (-8388608 << 23)); -} - - -if (-16777216 << 23 !== 0) { - $ERROR('#761: -16777216 << 23 === 0. Actual: ' + (-16777216 << 23)); -} - - -if (-33554432 << 23 !== 0) { - $ERROR('#762: -33554432 << 23 === 0. Actual: ' + (-33554432 << 23)); -} - - -if (-67108864 << 23 !== 0) { - $ERROR('#763: -67108864 << 23 === 0. Actual: ' + (-67108864 << 23)); -} - - -if (-134217728 << 23 !== 0) { - $ERROR('#764: -134217728 << 23 === 0. Actual: ' + (-134217728 << 23)); -} - - -if (-268435456 << 23 !== 0) { - $ERROR('#765: -268435456 << 23 === 0. Actual: ' + (-268435456 << 23)); -} - - -if (-536870912 << 23 !== 0) { - $ERROR('#766: -536870912 << 23 === 0. Actual: ' + (-536870912 << 23)); -} - - -if (-1073741824 << 23 !== 0) { - $ERROR('#767: -1073741824 << 23 === 0. Actual: ' + (-1073741824 << 23)); -} - - -if (-2147483648 << 23 !== 0) { - $ERROR('#768: -2147483648 << 23 === 0. Actual: ' + (-2147483648 << 23)); -} - - -if (-1 << 24 !== -16777216) { - $ERROR('#769: -1 << 24 === -16777216. Actual: ' + (-1 << 24)); -} - - -if (-2 << 24 !== -33554432) { - $ERROR('#770: -2 << 24 === -33554432. Actual: ' + (-2 << 24)); -} - - -if (-4 << 24 !== -67108864) { - $ERROR('#771: -4 << 24 === -67108864. Actual: ' + (-4 << 24)); -} - - -if (-8 << 24 !== -134217728) { - $ERROR('#772: -8 << 24 === -134217728. Actual: ' + (-8 << 24)); -} - - -if (-16 << 24 !== -268435456) { - $ERROR('#773: -16 << 24 === -268435456. Actual: ' + (-16 << 24)); -} - - -if (-32 << 24 !== -536870912) { - $ERROR('#774: -32 << 24 === -536870912. Actual: ' + (-32 << 24)); -} - - -if (-64 << 24 !== -1073741824) { - $ERROR('#775: -64 << 24 === -1073741824. Actual: ' + (-64 << 24)); -} - - -if (-128 << 24 !== -2147483648) { - $ERROR('#776: -128 << 24 === -2147483648. Actual: ' + (-128 << 24)); -} - - -if (-256 << 24 !== 0) { - $ERROR('#777: -256 << 24 === 0. Actual: ' + (-256 << 24)); -} - - -if (-512 << 24 !== 0) { - $ERROR('#778: -512 << 24 === 0. Actual: ' + (-512 << 24)); -} - - -if (-1024 << 24 !== 0) { - $ERROR('#779: -1024 << 24 === 0. Actual: ' + (-1024 << 24)); -} - - -if (-2048 << 24 !== 0) { - $ERROR('#780: -2048 << 24 === 0. Actual: ' + (-2048 << 24)); -} - - -if (-4096 << 24 !== 0) { - $ERROR('#781: -4096 << 24 === 0. Actual: ' + (-4096 << 24)); -} - - -if (-8192 << 24 !== 0) { - $ERROR('#782: -8192 << 24 === 0. Actual: ' + (-8192 << 24)); -} - - -if (-16384 << 24 !== 0) { - $ERROR('#783: -16384 << 24 === 0. Actual: ' + (-16384 << 24)); -} - - -if (-32768 << 24 !== 0) { - $ERROR('#784: -32768 << 24 === 0. Actual: ' + (-32768 << 24)); -} - - -if (-65536 << 24 !== 0) { - $ERROR('#785: -65536 << 24 === 0. Actual: ' + (-65536 << 24)); -} - - -if (-131072 << 24 !== 0) { - $ERROR('#786: -131072 << 24 === 0. Actual: ' + (-131072 << 24)); -} - - -if (-262144 << 24 !== 0) { - $ERROR('#787: -262144 << 24 === 0. Actual: ' + (-262144 << 24)); -} - - -if (-524288 << 24 !== 0) { - $ERROR('#788: -524288 << 24 === 0. Actual: ' + (-524288 << 24)); -} - - -if (-1048576 << 24 !== 0) { - $ERROR('#789: -1048576 << 24 === 0. Actual: ' + (-1048576 << 24)); -} - - -if (-2097152 << 24 !== 0) { - $ERROR('#790: -2097152 << 24 === 0. Actual: ' + (-2097152 << 24)); -} - - -if (-4194304 << 24 !== 0) { - $ERROR('#791: -4194304 << 24 === 0. Actual: ' + (-4194304 << 24)); -} - - -if (-8388608 << 24 !== 0) { - $ERROR('#792: -8388608 << 24 === 0. Actual: ' + (-8388608 << 24)); -} - - -if (-16777216 << 24 !== 0) { - $ERROR('#793: -16777216 << 24 === 0. Actual: ' + (-16777216 << 24)); -} - - -if (-33554432 << 24 !== 0) { - $ERROR('#794: -33554432 << 24 === 0. Actual: ' + (-33554432 << 24)); -} - - -if (-67108864 << 24 !== 0) { - $ERROR('#795: -67108864 << 24 === 0. Actual: ' + (-67108864 << 24)); -} - - -if (-134217728 << 24 !== 0) { - $ERROR('#796: -134217728 << 24 === 0. Actual: ' + (-134217728 << 24)); -} - - -if (-268435456 << 24 !== 0) { - $ERROR('#797: -268435456 << 24 === 0. Actual: ' + (-268435456 << 24)); -} - - -if (-536870912 << 24 !== 0) { - $ERROR('#798: -536870912 << 24 === 0. Actual: ' + (-536870912 << 24)); -} - - -if (-1073741824 << 24 !== 0) { - $ERROR('#799: -1073741824 << 24 === 0. Actual: ' + (-1073741824 << 24)); -} - - -if (-2147483648 << 24 !== 0) { - $ERROR('#800: -2147483648 << 24 === 0. Actual: ' + (-2147483648 << 24)); -} - - -if (-1 << 25 !== -33554432) { - $ERROR('#801: -1 << 25 === -33554432. Actual: ' + (-1 << 25)); -} - - -if (-2 << 25 !== -67108864) { - $ERROR('#802: -2 << 25 === -67108864. Actual: ' + (-2 << 25)); -} - - -if (-4 << 25 !== -134217728) { - $ERROR('#803: -4 << 25 === -134217728. Actual: ' + (-4 << 25)); -} - - -if (-8 << 25 !== -268435456) { - $ERROR('#804: -8 << 25 === -268435456. Actual: ' + (-8 << 25)); -} - - -if (-16 << 25 !== -536870912) { - $ERROR('#805: -16 << 25 === -536870912. Actual: ' + (-16 << 25)); -} - - -if (-32 << 25 !== -1073741824) { - $ERROR('#806: -32 << 25 === -1073741824. Actual: ' + (-32 << 25)); -} - - -if (-64 << 25 !== -2147483648) { - $ERROR('#807: -64 << 25 === -2147483648. Actual: ' + (-64 << 25)); -} - - -if (-128 << 25 !== 0) { - $ERROR('#808: -128 << 25 === 0. Actual: ' + (-128 << 25)); -} - - -if (-256 << 25 !== 0) { - $ERROR('#809: -256 << 25 === 0. Actual: ' + (-256 << 25)); -} - - -if (-512 << 25 !== 0) { - $ERROR('#810: -512 << 25 === 0. Actual: ' + (-512 << 25)); -} - - -if (-1024 << 25 !== 0) { - $ERROR('#811: -1024 << 25 === 0. Actual: ' + (-1024 << 25)); -} - - -if (-2048 << 25 !== 0) { - $ERROR('#812: -2048 << 25 === 0. Actual: ' + (-2048 << 25)); -} - - -if (-4096 << 25 !== 0) { - $ERROR('#813: -4096 << 25 === 0. Actual: ' + (-4096 << 25)); -} - - -if (-8192 << 25 !== 0) { - $ERROR('#814: -8192 << 25 === 0. Actual: ' + (-8192 << 25)); -} - - -if (-16384 << 25 !== 0) { - $ERROR('#815: -16384 << 25 === 0. Actual: ' + (-16384 << 25)); -} - - -if (-32768 << 25 !== 0) { - $ERROR('#816: -32768 << 25 === 0. Actual: ' + (-32768 << 25)); -} - - -if (-65536 << 25 !== 0) { - $ERROR('#817: -65536 << 25 === 0. Actual: ' + (-65536 << 25)); -} - - -if (-131072 << 25 !== 0) { - $ERROR('#818: -131072 << 25 === 0. Actual: ' + (-131072 << 25)); -} - - -if (-262144 << 25 !== 0) { - $ERROR('#819: -262144 << 25 === 0. Actual: ' + (-262144 << 25)); -} - - -if (-524288 << 25 !== 0) { - $ERROR('#820: -524288 << 25 === 0. Actual: ' + (-524288 << 25)); -} - - -if (-1048576 << 25 !== 0) { - $ERROR('#821: -1048576 << 25 === 0. Actual: ' + (-1048576 << 25)); -} - - -if (-2097152 << 25 !== 0) { - $ERROR('#822: -2097152 << 25 === 0. Actual: ' + (-2097152 << 25)); -} - - -if (-4194304 << 25 !== 0) { - $ERROR('#823: -4194304 << 25 === 0. Actual: ' + (-4194304 << 25)); -} - - -if (-8388608 << 25 !== 0) { - $ERROR('#824: -8388608 << 25 === 0. Actual: ' + (-8388608 << 25)); -} - - -if (-16777216 << 25 !== 0) { - $ERROR('#825: -16777216 << 25 === 0. Actual: ' + (-16777216 << 25)); -} - - -if (-33554432 << 25 !== 0) { - $ERROR('#826: -33554432 << 25 === 0. Actual: ' + (-33554432 << 25)); -} - - -if (-67108864 << 25 !== 0) { - $ERROR('#827: -67108864 << 25 === 0. Actual: ' + (-67108864 << 25)); -} - - -if (-134217728 << 25 !== 0) { - $ERROR('#828: -134217728 << 25 === 0. Actual: ' + (-134217728 << 25)); -} - - -if (-268435456 << 25 !== 0) { - $ERROR('#829: -268435456 << 25 === 0. Actual: ' + (-268435456 << 25)); -} - - -if (-536870912 << 25 !== 0) { - $ERROR('#830: -536870912 << 25 === 0. Actual: ' + (-536870912 << 25)); -} - - -if (-1073741824 << 25 !== 0) { - $ERROR('#831: -1073741824 << 25 === 0. Actual: ' + (-1073741824 << 25)); -} - - -if (-2147483648 << 25 !== 0) { - $ERROR('#832: -2147483648 << 25 === 0. Actual: ' + (-2147483648 << 25)); -} - - -if (-1 << 26 !== -67108864) { - $ERROR('#833: -1 << 26 === -67108864. Actual: ' + (-1 << 26)); -} - - -if (-2 << 26 !== -134217728) { - $ERROR('#834: -2 << 26 === -134217728. Actual: ' + (-2 << 26)); -} - - -if (-4 << 26 !== -268435456) { - $ERROR('#835: -4 << 26 === -268435456. Actual: ' + (-4 << 26)); -} - - -if (-8 << 26 !== -536870912) { - $ERROR('#836: -8 << 26 === -536870912. Actual: ' + (-8 << 26)); -} - - -if (-16 << 26 !== -1073741824) { - $ERROR('#837: -16 << 26 === -1073741824. Actual: ' + (-16 << 26)); -} - - -if (-32 << 26 !== -2147483648) { - $ERROR('#838: -32 << 26 === -2147483648. Actual: ' + (-32 << 26)); -} - - -if (-64 << 26 !== 0) { - $ERROR('#839: -64 << 26 === 0. Actual: ' + (-64 << 26)); -} - - -if (-128 << 26 !== 0) { - $ERROR('#840: -128 << 26 === 0. Actual: ' + (-128 << 26)); -} - - -if (-256 << 26 !== 0) { - $ERROR('#841: -256 << 26 === 0. Actual: ' + (-256 << 26)); -} - - -if (-512 << 26 !== 0) { - $ERROR('#842: -512 << 26 === 0. Actual: ' + (-512 << 26)); -} - - -if (-1024 << 26 !== 0) { - $ERROR('#843: -1024 << 26 === 0. Actual: ' + (-1024 << 26)); -} - - -if (-2048 << 26 !== 0) { - $ERROR('#844: -2048 << 26 === 0. Actual: ' + (-2048 << 26)); -} - - -if (-4096 << 26 !== 0) { - $ERROR('#845: -4096 << 26 === 0. Actual: ' + (-4096 << 26)); -} - - -if (-8192 << 26 !== 0) { - $ERROR('#846: -8192 << 26 === 0. Actual: ' + (-8192 << 26)); -} - - -if (-16384 << 26 !== 0) { - $ERROR('#847: -16384 << 26 === 0. Actual: ' + (-16384 << 26)); -} - - -if (-32768 << 26 !== 0) { - $ERROR('#848: -32768 << 26 === 0. Actual: ' + (-32768 << 26)); -} - - -if (-65536 << 26 !== 0) { - $ERROR('#849: -65536 << 26 === 0. Actual: ' + (-65536 << 26)); -} - - -if (-131072 << 26 !== 0) { - $ERROR('#850: -131072 << 26 === 0. Actual: ' + (-131072 << 26)); -} - - -if (-262144 << 26 !== 0) { - $ERROR('#851: -262144 << 26 === 0. Actual: ' + (-262144 << 26)); -} - - -if (-524288 << 26 !== 0) { - $ERROR('#852: -524288 << 26 === 0. Actual: ' + (-524288 << 26)); -} - - -if (-1048576 << 26 !== 0) { - $ERROR('#853: -1048576 << 26 === 0. Actual: ' + (-1048576 << 26)); -} - - -if (-2097152 << 26 !== 0) { - $ERROR('#854: -2097152 << 26 === 0. Actual: ' + (-2097152 << 26)); -} - - -if (-4194304 << 26 !== 0) { - $ERROR('#855: -4194304 << 26 === 0. Actual: ' + (-4194304 << 26)); -} - - -if (-8388608 << 26 !== 0) { - $ERROR('#856: -8388608 << 26 === 0. Actual: ' + (-8388608 << 26)); -} - - -if (-16777216 << 26 !== 0) { - $ERROR('#857: -16777216 << 26 === 0. Actual: ' + (-16777216 << 26)); -} - - -if (-33554432 << 26 !== 0) { - $ERROR('#858: -33554432 << 26 === 0. Actual: ' + (-33554432 << 26)); -} - - -if (-67108864 << 26 !== 0) { - $ERROR('#859: -67108864 << 26 === 0. Actual: ' + (-67108864 << 26)); -} - - -if (-134217728 << 26 !== 0) { - $ERROR('#860: -134217728 << 26 === 0. Actual: ' + (-134217728 << 26)); -} - - -if (-268435456 << 26 !== 0) { - $ERROR('#861: -268435456 << 26 === 0. Actual: ' + (-268435456 << 26)); -} - - -if (-536870912 << 26 !== 0) { - $ERROR('#862: -536870912 << 26 === 0. Actual: ' + (-536870912 << 26)); -} - - -if (-1073741824 << 26 !== 0) { - $ERROR('#863: -1073741824 << 26 === 0. Actual: ' + (-1073741824 << 26)); -} - - -if (-2147483648 << 26 !== 0) { - $ERROR('#864: -2147483648 << 26 === 0. Actual: ' + (-2147483648 << 26)); -} - - -if (-1 << 27 !== -134217728) { - $ERROR('#865: -1 << 27 === -134217728. Actual: ' + (-1 << 27)); -} - - -if (-2 << 27 !== -268435456) { - $ERROR('#866: -2 << 27 === -268435456. Actual: ' + (-2 << 27)); -} - - -if (-4 << 27 !== -536870912) { - $ERROR('#867: -4 << 27 === -536870912. Actual: ' + (-4 << 27)); -} - - -if (-8 << 27 !== -1073741824) { - $ERROR('#868: -8 << 27 === -1073741824. Actual: ' + (-8 << 27)); -} - - -if (-16 << 27 !== -2147483648) { - $ERROR('#869: -16 << 27 === -2147483648. Actual: ' + (-16 << 27)); -} - - -if (-32 << 27 !== 0) { - $ERROR('#870: -32 << 27 === 0. Actual: ' + (-32 << 27)); -} - - -if (-64 << 27 !== 0) { - $ERROR('#871: -64 << 27 === 0. Actual: ' + (-64 << 27)); -} - - -if (-128 << 27 !== 0) { - $ERROR('#872: -128 << 27 === 0. Actual: ' + (-128 << 27)); -} - - -if (-256 << 27 !== 0) { - $ERROR('#873: -256 << 27 === 0. Actual: ' + (-256 << 27)); -} - - -if (-512 << 27 !== 0) { - $ERROR('#874: -512 << 27 === 0. Actual: ' + (-512 << 27)); -} - - -if (-1024 << 27 !== 0) { - $ERROR('#875: -1024 << 27 === 0. Actual: ' + (-1024 << 27)); -} - - -if (-2048 << 27 !== 0) { - $ERROR('#876: -2048 << 27 === 0. Actual: ' + (-2048 << 27)); -} - - -if (-4096 << 27 !== 0) { - $ERROR('#877: -4096 << 27 === 0. Actual: ' + (-4096 << 27)); -} - - -if (-8192 << 27 !== 0) { - $ERROR('#878: -8192 << 27 === 0. Actual: ' + (-8192 << 27)); -} - - -if (-16384 << 27 !== 0) { - $ERROR('#879: -16384 << 27 === 0. Actual: ' + (-16384 << 27)); -} - - -if (-32768 << 27 !== 0) { - $ERROR('#880: -32768 << 27 === 0. Actual: ' + (-32768 << 27)); -} - - -if (-65536 << 27 !== 0) { - $ERROR('#881: -65536 << 27 === 0. Actual: ' + (-65536 << 27)); -} - - -if (-131072 << 27 !== 0) { - $ERROR('#882: -131072 << 27 === 0. Actual: ' + (-131072 << 27)); -} - - -if (-262144 << 27 !== 0) { - $ERROR('#883: -262144 << 27 === 0. Actual: ' + (-262144 << 27)); -} - - -if (-524288 << 27 !== 0) { - $ERROR('#884: -524288 << 27 === 0. Actual: ' + (-524288 << 27)); -} - - -if (-1048576 << 27 !== 0) { - $ERROR('#885: -1048576 << 27 === 0. Actual: ' + (-1048576 << 27)); -} - - -if (-2097152 << 27 !== 0) { - $ERROR('#886: -2097152 << 27 === 0. Actual: ' + (-2097152 << 27)); -} - - -if (-4194304 << 27 !== 0) { - $ERROR('#887: -4194304 << 27 === 0. Actual: ' + (-4194304 << 27)); -} - - -if (-8388608 << 27 !== 0) { - $ERROR('#888: -8388608 << 27 === 0. Actual: ' + (-8388608 << 27)); -} - - -if (-16777216 << 27 !== 0) { - $ERROR('#889: -16777216 << 27 === 0. Actual: ' + (-16777216 << 27)); -} - - -if (-33554432 << 27 !== 0) { - $ERROR('#890: -33554432 << 27 === 0. Actual: ' + (-33554432 << 27)); -} - - -if (-67108864 << 27 !== 0) { - $ERROR('#891: -67108864 << 27 === 0. Actual: ' + (-67108864 << 27)); -} - - -if (-134217728 << 27 !== 0) { - $ERROR('#892: -134217728 << 27 === 0. Actual: ' + (-134217728 << 27)); -} - - -if (-268435456 << 27 !== 0) { - $ERROR('#893: -268435456 << 27 === 0. Actual: ' + (-268435456 << 27)); -} - - -if (-536870912 << 27 !== 0) { - $ERROR('#894: -536870912 << 27 === 0. Actual: ' + (-536870912 << 27)); -} - - -if (-1073741824 << 27 !== 0) { - $ERROR('#895: -1073741824 << 27 === 0. Actual: ' + (-1073741824 << 27)); -} - - -if (-2147483648 << 27 !== 0) { - $ERROR('#896: -2147483648 << 27 === 0. Actual: ' + (-2147483648 << 27)); -} - - -if (-1 << 28 !== -268435456) { - $ERROR('#897: -1 << 28 === -268435456. Actual: ' + (-1 << 28)); -} - - -if (-2 << 28 !== -536870912) { - $ERROR('#898: -2 << 28 === -536870912. Actual: ' + (-2 << 28)); -} - - -if (-4 << 28 !== -1073741824) { - $ERROR('#899: -4 << 28 === -1073741824. Actual: ' + (-4 << 28)); -} - - -if (-8 << 28 !== -2147483648) { - $ERROR('#900: -8 << 28 === -2147483648. Actual: ' + (-8 << 28)); -} - - -if (-16 << 28 !== 0) { - $ERROR('#901: -16 << 28 === 0. Actual: ' + (-16 << 28)); -} - - -if (-32 << 28 !== 0) { - $ERROR('#902: -32 << 28 === 0. Actual: ' + (-32 << 28)); -} - - -if (-64 << 28 !== 0) { - $ERROR('#903: -64 << 28 === 0. Actual: ' + (-64 << 28)); -} - - -if (-128 << 28 !== 0) { - $ERROR('#904: -128 << 28 === 0. Actual: ' + (-128 << 28)); -} - - -if (-256 << 28 !== 0) { - $ERROR('#905: -256 << 28 === 0. Actual: ' + (-256 << 28)); -} - - -if (-512 << 28 !== 0) { - $ERROR('#906: -512 << 28 === 0. Actual: ' + (-512 << 28)); -} - - -if (-1024 << 28 !== 0) { - $ERROR('#907: -1024 << 28 === 0. Actual: ' + (-1024 << 28)); -} - - -if (-2048 << 28 !== 0) { - $ERROR('#908: -2048 << 28 === 0. Actual: ' + (-2048 << 28)); -} - - -if (-4096 << 28 !== 0) { - $ERROR('#909: -4096 << 28 === 0. Actual: ' + (-4096 << 28)); -} - - -if (-8192 << 28 !== 0) { - $ERROR('#910: -8192 << 28 === 0. Actual: ' + (-8192 << 28)); -} - - -if (-16384 << 28 !== 0) { - $ERROR('#911: -16384 << 28 === 0. Actual: ' + (-16384 << 28)); -} - - -if (-32768 << 28 !== 0) { - $ERROR('#912: -32768 << 28 === 0. Actual: ' + (-32768 << 28)); -} - - -if (-65536 << 28 !== 0) { - $ERROR('#913: -65536 << 28 === 0. Actual: ' + (-65536 << 28)); -} - - -if (-131072 << 28 !== 0) { - $ERROR('#914: -131072 << 28 === 0. Actual: ' + (-131072 << 28)); -} - - -if (-262144 << 28 !== 0) { - $ERROR('#915: -262144 << 28 === 0. Actual: ' + (-262144 << 28)); -} - - -if (-524288 << 28 !== 0) { - $ERROR('#916: -524288 << 28 === 0. Actual: ' + (-524288 << 28)); -} - - -if (-1048576 << 28 !== 0) { - $ERROR('#917: -1048576 << 28 === 0. Actual: ' + (-1048576 << 28)); -} - - -if (-2097152 << 28 !== 0) { - $ERROR('#918: -2097152 << 28 === 0. Actual: ' + (-2097152 << 28)); -} - - -if (-4194304 << 28 !== 0) { - $ERROR('#919: -4194304 << 28 === 0. Actual: ' + (-4194304 << 28)); -} - - -if (-8388608 << 28 !== 0) { - $ERROR('#920: -8388608 << 28 === 0. Actual: ' + (-8388608 << 28)); -} - - -if (-16777216 << 28 !== 0) { - $ERROR('#921: -16777216 << 28 === 0. Actual: ' + (-16777216 << 28)); -} - - -if (-33554432 << 28 !== 0) { - $ERROR('#922: -33554432 << 28 === 0. Actual: ' + (-33554432 << 28)); -} - - -if (-67108864 << 28 !== 0) { - $ERROR('#923: -67108864 << 28 === 0. Actual: ' + (-67108864 << 28)); -} - - -if (-134217728 << 28 !== 0) { - $ERROR('#924: -134217728 << 28 === 0. Actual: ' + (-134217728 << 28)); -} - - -if (-268435456 << 28 !== 0) { - $ERROR('#925: -268435456 << 28 === 0. Actual: ' + (-268435456 << 28)); -} - - -if (-536870912 << 28 !== 0) { - $ERROR('#926: -536870912 << 28 === 0. Actual: ' + (-536870912 << 28)); -} - - -if (-1073741824 << 28 !== 0) { - $ERROR('#927: -1073741824 << 28 === 0. Actual: ' + (-1073741824 << 28)); -} - - -if (-2147483648 << 28 !== 0) { - $ERROR('#928: -2147483648 << 28 === 0. Actual: ' + (-2147483648 << 28)); -} - - -if (-1 << 29 !== -536870912) { - $ERROR('#929: -1 << 29 === -536870912. Actual: ' + (-1 << 29)); -} - - -if (-2 << 29 !== -1073741824) { - $ERROR('#930: -2 << 29 === -1073741824. Actual: ' + (-2 << 29)); -} - - -if (-4 << 29 !== -2147483648) { - $ERROR('#931: -4 << 29 === -2147483648. Actual: ' + (-4 << 29)); -} - - -if (-8 << 29 !== 0) { - $ERROR('#932: -8 << 29 === 0. Actual: ' + (-8 << 29)); -} - - -if (-16 << 29 !== 0) { - $ERROR('#933: -16 << 29 === 0. Actual: ' + (-16 << 29)); -} - - -if (-32 << 29 !== 0) { - $ERROR('#934: -32 << 29 === 0. Actual: ' + (-32 << 29)); -} - - -if (-64 << 29 !== 0) { - $ERROR('#935: -64 << 29 === 0. Actual: ' + (-64 << 29)); -} - - -if (-128 << 29 !== 0) { - $ERROR('#936: -128 << 29 === 0. Actual: ' + (-128 << 29)); -} - - -if (-256 << 29 !== 0) { - $ERROR('#937: -256 << 29 === 0. Actual: ' + (-256 << 29)); -} - - -if (-512 << 29 !== 0) { - $ERROR('#938: -512 << 29 === 0. Actual: ' + (-512 << 29)); -} - - -if (-1024 << 29 !== 0) { - $ERROR('#939: -1024 << 29 === 0. Actual: ' + (-1024 << 29)); -} - - -if (-2048 << 29 !== 0) { - $ERROR('#940: -2048 << 29 === 0. Actual: ' + (-2048 << 29)); -} - - -if (-4096 << 29 !== 0) { - $ERROR('#941: -4096 << 29 === 0. Actual: ' + (-4096 << 29)); -} - - -if (-8192 << 29 !== 0) { - $ERROR('#942: -8192 << 29 === 0. Actual: ' + (-8192 << 29)); -} - - -if (-16384 << 29 !== 0) { - $ERROR('#943: -16384 << 29 === 0. Actual: ' + (-16384 << 29)); -} - - -if (-32768 << 29 !== 0) { - $ERROR('#944: -32768 << 29 === 0. Actual: ' + (-32768 << 29)); -} - - -if (-65536 << 29 !== 0) { - $ERROR('#945: -65536 << 29 === 0. Actual: ' + (-65536 << 29)); -} - - -if (-131072 << 29 !== 0) { - $ERROR('#946: -131072 << 29 === 0. Actual: ' + (-131072 << 29)); -} - - -if (-262144 << 29 !== 0) { - $ERROR('#947: -262144 << 29 === 0. Actual: ' + (-262144 << 29)); -} - - -if (-524288 << 29 !== 0) { - $ERROR('#948: -524288 << 29 === 0. Actual: ' + (-524288 << 29)); -} - - -if (-1048576 << 29 !== 0) { - $ERROR('#949: -1048576 << 29 === 0. Actual: ' + (-1048576 << 29)); -} - - -if (-2097152 << 29 !== 0) { - $ERROR('#950: -2097152 << 29 === 0. Actual: ' + (-2097152 << 29)); -} - - -if (-4194304 << 29 !== 0) { - $ERROR('#951: -4194304 << 29 === 0. Actual: ' + (-4194304 << 29)); -} - - -if (-8388608 << 29 !== 0) { - $ERROR('#952: -8388608 << 29 === 0. Actual: ' + (-8388608 << 29)); -} - - -if (-16777216 << 29 !== 0) { - $ERROR('#953: -16777216 << 29 === 0. Actual: ' + (-16777216 << 29)); -} - - -if (-33554432 << 29 !== 0) { - $ERROR('#954: -33554432 << 29 === 0. Actual: ' + (-33554432 << 29)); -} - - -if (-67108864 << 29 !== 0) { - $ERROR('#955: -67108864 << 29 === 0. Actual: ' + (-67108864 << 29)); -} - - -if (-134217728 << 29 !== 0) { - $ERROR('#956: -134217728 << 29 === 0. Actual: ' + (-134217728 << 29)); -} - - -if (-268435456 << 29 !== 0) { - $ERROR('#957: -268435456 << 29 === 0. Actual: ' + (-268435456 << 29)); -} - - -if (-536870912 << 29 !== 0) { - $ERROR('#958: -536870912 << 29 === 0. Actual: ' + (-536870912 << 29)); -} - - -if (-1073741824 << 29 !== 0) { - $ERROR('#959: -1073741824 << 29 === 0. Actual: ' + (-1073741824 << 29)); -} - - -if (-2147483648 << 29 !== 0) { - $ERROR('#960: -2147483648 << 29 === 0. Actual: ' + (-2147483648 << 29)); -} - - -if (-1 << 30 !== -1073741824) { - $ERROR('#961: -1 << 30 === -1073741824. Actual: ' + (-1 << 30)); -} - - -if (-2 << 30 !== -2147483648) { - $ERROR('#962: -2 << 30 === -2147483648. Actual: ' + (-2 << 30)); -} - - -if (-4 << 30 !== 0) { - $ERROR('#963: -4 << 30 === 0. Actual: ' + (-4 << 30)); -} - - -if (-8 << 30 !== 0) { - $ERROR('#964: -8 << 30 === 0. Actual: ' + (-8 << 30)); -} - - -if (-16 << 30 !== 0) { - $ERROR('#965: -16 << 30 === 0. Actual: ' + (-16 << 30)); -} - - -if (-32 << 30 !== 0) { - $ERROR('#966: -32 << 30 === 0. Actual: ' + (-32 << 30)); -} - - -if (-64 << 30 !== 0) { - $ERROR('#967: -64 << 30 === 0. Actual: ' + (-64 << 30)); -} - - -if (-128 << 30 !== 0) { - $ERROR('#968: -128 << 30 === 0. Actual: ' + (-128 << 30)); -} - - -if (-256 << 30 !== 0) { - $ERROR('#969: -256 << 30 === 0. Actual: ' + (-256 << 30)); -} - - -if (-512 << 30 !== 0) { - $ERROR('#970: -512 << 30 === 0. Actual: ' + (-512 << 30)); -} - - -if (-1024 << 30 !== 0) { - $ERROR('#971: -1024 << 30 === 0. Actual: ' + (-1024 << 30)); -} - - -if (-2048 << 30 !== 0) { - $ERROR('#972: -2048 << 30 === 0. Actual: ' + (-2048 << 30)); -} - - -if (-4096 << 30 !== 0) { - $ERROR('#973: -4096 << 30 === 0. Actual: ' + (-4096 << 30)); -} - - -if (-8192 << 30 !== 0) { - $ERROR('#974: -8192 << 30 === 0. Actual: ' + (-8192 << 30)); -} - - -if (-16384 << 30 !== 0) { - $ERROR('#975: -16384 << 30 === 0. Actual: ' + (-16384 << 30)); -} - - -if (-32768 << 30 !== 0) { - $ERROR('#976: -32768 << 30 === 0. Actual: ' + (-32768 << 30)); -} - - -if (-65536 << 30 !== 0) { - $ERROR('#977: -65536 << 30 === 0. Actual: ' + (-65536 << 30)); -} - - -if (-131072 << 30 !== 0) { - $ERROR('#978: -131072 << 30 === 0. Actual: ' + (-131072 << 30)); -} - - -if (-262144 << 30 !== 0) { - $ERROR('#979: -262144 << 30 === 0. Actual: ' + (-262144 << 30)); -} - - -if (-524288 << 30 !== 0) { - $ERROR('#980: -524288 << 30 === 0. Actual: ' + (-524288 << 30)); -} - - -if (-1048576 << 30 !== 0) { - $ERROR('#981: -1048576 << 30 === 0. Actual: ' + (-1048576 << 30)); -} - - -if (-2097152 << 30 !== 0) { - $ERROR('#982: -2097152 << 30 === 0. Actual: ' + (-2097152 << 30)); -} - - -if (-4194304 << 30 !== 0) { - $ERROR('#983: -4194304 << 30 === 0. Actual: ' + (-4194304 << 30)); -} - - -if (-8388608 << 30 !== 0) { - $ERROR('#984: -8388608 << 30 === 0. Actual: ' + (-8388608 << 30)); -} - - -if (-16777216 << 30 !== 0) { - $ERROR('#985: -16777216 << 30 === 0. Actual: ' + (-16777216 << 30)); -} - - -if (-33554432 << 30 !== 0) { - $ERROR('#986: -33554432 << 30 === 0. Actual: ' + (-33554432 << 30)); -} - - -if (-67108864 << 30 !== 0) { - $ERROR('#987: -67108864 << 30 === 0. Actual: ' + (-67108864 << 30)); -} - - -if (-134217728 << 30 !== 0) { - $ERROR('#988: -134217728 << 30 === 0. Actual: ' + (-134217728 << 30)); -} - - -if (-268435456 << 30 !== 0) { - $ERROR('#989: -268435456 << 30 === 0. Actual: ' + (-268435456 << 30)); -} - - -if (-536870912 << 30 !== 0) { - $ERROR('#990: -536870912 << 30 === 0. Actual: ' + (-536870912 << 30)); -} - - -if (-1073741824 << 30 !== 0) { - $ERROR('#991: -1073741824 << 30 === 0. Actual: ' + (-1073741824 << 30)); -} - - -if (-2147483648 << 30 !== 0) { - $ERROR('#992: -2147483648 << 30 === 0. Actual: ' + (-2147483648 << 30)); -} - - -if (-1 << 31 !== -2147483648) { - $ERROR('#993: -1 << 31 === -2147483648. Actual: ' + (-1 << 31)); -} - - -if (-2 << 31 !== 0) { - $ERROR('#994: -2 << 31 === 0. Actual: ' + (-2 << 31)); -} - - -if (-4 << 31 !== 0) { - $ERROR('#995: -4 << 31 === 0. Actual: ' + (-4 << 31)); -} - - -if (-8 << 31 !== 0) { - $ERROR('#996: -8 << 31 === 0. Actual: ' + (-8 << 31)); -} - - -if (-16 << 31 !== 0) { - $ERROR('#997: -16 << 31 === 0. Actual: ' + (-16 << 31)); -} - - -if (-32 << 31 !== 0) { - $ERROR('#998: -32 << 31 === 0. Actual: ' + (-32 << 31)); -} - - -if (-64 << 31 !== 0) { - $ERROR('#999: -64 << 31 === 0. Actual: ' + (-64 << 31)); -} - - -if (-128 << 31 !== 0) { - $ERROR('#1000: -128 << 31 === 0. Actual: ' + (-128 << 31)); -} - - -if (-256 << 31 !== 0) { - $ERROR('#1001: -256 << 31 === 0. Actual: ' + (-256 << 31)); -} - - -if (-512 << 31 !== 0) { - $ERROR('#1002: -512 << 31 === 0. Actual: ' + (-512 << 31)); -} - - -if (-1024 << 31 !== 0) { - $ERROR('#1003: -1024 << 31 === 0. Actual: ' + (-1024 << 31)); -} - - -if (-2048 << 31 !== 0) { - $ERROR('#1004: -2048 << 31 === 0. Actual: ' + (-2048 << 31)); -} - - -if (-4096 << 31 !== 0) { - $ERROR('#1005: -4096 << 31 === 0. Actual: ' + (-4096 << 31)); -} - - -if (-8192 << 31 !== 0) { - $ERROR('#1006: -8192 << 31 === 0. Actual: ' + (-8192 << 31)); -} - - -if (-16384 << 31 !== 0) { - $ERROR('#1007: -16384 << 31 === 0. Actual: ' + (-16384 << 31)); -} - - -if (-32768 << 31 !== 0) { - $ERROR('#1008: -32768 << 31 === 0. Actual: ' + (-32768 << 31)); -} - - -if (-65536 << 31 !== 0) { - $ERROR('#1009: -65536 << 31 === 0. Actual: ' + (-65536 << 31)); -} - - -if (-131072 << 31 !== 0) { - $ERROR('#1010: -131072 << 31 === 0. Actual: ' + (-131072 << 31)); -} - - -if (-262144 << 31 !== 0) { - $ERROR('#1011: -262144 << 31 === 0. Actual: ' + (-262144 << 31)); -} - - -if (-524288 << 31 !== 0) { - $ERROR('#1012: -524288 << 31 === 0. Actual: ' + (-524288 << 31)); -} - - -if (-1048576 << 31 !== 0) { - $ERROR('#1013: -1048576 << 31 === 0. Actual: ' + (-1048576 << 31)); -} - - -if (-2097152 << 31 !== 0) { - $ERROR('#1014: -2097152 << 31 === 0. Actual: ' + (-2097152 << 31)); -} - - -if (-4194304 << 31 !== 0) { - $ERROR('#1015: -4194304 << 31 === 0. Actual: ' + (-4194304 << 31)); -} - - -if (-8388608 << 31 !== 0) { - $ERROR('#1016: -8388608 << 31 === 0. Actual: ' + (-8388608 << 31)); -} - - -if (-16777216 << 31 !== 0) { - $ERROR('#1017: -16777216 << 31 === 0. Actual: ' + (-16777216 << 31)); -} - - -if (-33554432 << 31 !== 0) { - $ERROR('#1018: -33554432 << 31 === 0. Actual: ' + (-33554432 << 31)); -} - - -if (-67108864 << 31 !== 0) { - $ERROR('#1019: -67108864 << 31 === 0. Actual: ' + (-67108864 << 31)); -} - - -if (-134217728 << 31 !== 0) { - $ERROR('#1020: -134217728 << 31 === 0. Actual: ' + (-134217728 << 31)); -} - - -if (-268435456 << 31 !== 0) { - $ERROR('#1021: -268435456 << 31 === 0. Actual: ' + (-268435456 << 31)); -} - - -if (-536870912 << 31 !== 0) { - $ERROR('#1022: -536870912 << 31 === 0. Actual: ' + (-536870912 << 31)); -} - - -if (-1073741824 << 31 !== 0) { - $ERROR('#1023: -1073741824 << 31 === 0. Actual: ' + (-1073741824 << 31)); -} - - -if (-2147483648 << 31 !== 0) { - $ERROR('#1024: -2147483648 << 31 === 0. Actual: ' + (-2147483648 << 31)); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A4_T3.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A4_T3.js deleted file mode 100644 index 21bad729a..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A4_T3.js +++ /dev/null @@ -1,2570 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.1_A4_T3; - * @section: 11.7.1; - * @assertion: Check operator x << y in distinct points; - * @description: ShiftExpression = 2^n - 1, n = 0...15; - */ - -//CHECK - -if (0 << 0 !== 0) { - $ERROR('#1: 0 << 0 === 0. Actual: ' + (0 << 0)); -} - - -if (1 << 0 !== 1) { - $ERROR('#2: 1 << 0 === 1. Actual: ' + (1 << 0)); -} - - -if (3 << 0 !== 3) { - $ERROR('#3: 3 << 0 === 3. Actual: ' + (3 << 0)); -} - - -if (7 << 0 !== 7) { - $ERROR('#4: 7 << 0 === 7. Actual: ' + (7 << 0)); -} - - -if (15 << 0 !== 15) { - $ERROR('#5: 15 << 0 === 15. Actual: ' + (15 << 0)); -} - - -if (31 << 0 !== 31) { - $ERROR('#6: 31 << 0 === 31. Actual: ' + (31 << 0)); -} - - -if (63 << 0 !== 63) { - $ERROR('#7: 63 << 0 === 63. Actual: ' + (63 << 0)); -} - - -if (127 << 0 !== 127) { - $ERROR('#8: 127 << 0 === 127. Actual: ' + (127 << 0)); -} - - -if (255 << 0 !== 255) { - $ERROR('#9: 255 << 0 === 255. Actual: ' + (255 << 0)); -} - - -if (511 << 0 !== 511) { - $ERROR('#10: 511 << 0 === 511. Actual: ' + (511 << 0)); -} - - -if (1023 << 0 !== 1023) { - $ERROR('#11: 1023 << 0 === 1023. Actual: ' + (1023 << 0)); -} - - -if (2047 << 0 !== 2047) { - $ERROR('#12: 2047 << 0 === 2047. Actual: ' + (2047 << 0)); -} - - -if (4095 << 0 !== 4095) { - $ERROR('#13: 4095 << 0 === 4095. Actual: ' + (4095 << 0)); -} - - -if (8191 << 0 !== 8191) { - $ERROR('#14: 8191 << 0 === 8191. Actual: ' + (8191 << 0)); -} - - -if (16383 << 0 !== 16383) { - $ERROR('#15: 16383 << 0 === 16383. Actual: ' + (16383 << 0)); -} - - -if (32767 << 0 !== 32767) { - $ERROR('#16: 32767 << 0 === 32767. Actual: ' + (32767 << 0)); -} - - -if (65535 << 0 !== 65535) { - $ERROR('#17: 65535 << 0 === 65535. Actual: ' + (65535 << 0)); -} - - -if (131071 << 0 !== 131071) { - $ERROR('#18: 131071 << 0 === 131071. Actual: ' + (131071 << 0)); -} - - -if (262143 << 0 !== 262143) { - $ERROR('#19: 262143 << 0 === 262143. Actual: ' + (262143 << 0)); -} - - -if (524287 << 0 !== 524287) { - $ERROR('#20: 524287 << 0 === 524287. Actual: ' + (524287 << 0)); -} - - -if (1048575 << 0 !== 1048575) { - $ERROR('#21: 1048575 << 0 === 1048575. Actual: ' + (1048575 << 0)); -} - - -if (2097151 << 0 !== 2097151) { - $ERROR('#22: 2097151 << 0 === 2097151. Actual: ' + (2097151 << 0)); -} - - -if (4194303 << 0 !== 4194303) { - $ERROR('#23: 4194303 << 0 === 4194303. Actual: ' + (4194303 << 0)); -} - - -if (8388607 << 0 !== 8388607) { - $ERROR('#24: 8388607 << 0 === 8388607. Actual: ' + (8388607 << 0)); -} - - -if (16777215 << 0 !== 16777215) { - $ERROR('#25: 16777215 << 0 === 16777215. Actual: ' + (16777215 << 0)); -} - - -if (33554431 << 0 !== 33554431) { - $ERROR('#26: 33554431 << 0 === 33554431. Actual: ' + (33554431 << 0)); -} - - -if (67108863 << 0 !== 67108863) { - $ERROR('#27: 67108863 << 0 === 67108863. Actual: ' + (67108863 << 0)); -} - - -if (134217727 << 0 !== 134217727) { - $ERROR('#28: 134217727 << 0 === 134217727. Actual: ' + (134217727 << 0)); -} - - -if (268435455 << 0 !== 268435455) { - $ERROR('#29: 268435455 << 0 === 268435455. Actual: ' + (268435455 << 0)); -} - - -if (536870911 << 0 !== 536870911) { - $ERROR('#30: 536870911 << 0 === 536870911. Actual: ' + (536870911 << 0)); -} - - -if (1073741823 << 0 !== 1073741823) { - $ERROR('#31: 1073741823 << 0 === 1073741823. Actual: ' + (1073741823 << 0)); -} - - -if (2147483647 << 0 !== 2147483647) { - $ERROR('#32: 2147483647 << 0 === 2147483647. Actual: ' + (2147483647 << 0)); -} - - -if (0 << 1 !== 0) { - $ERROR('#33: 0 << 1 === 0. Actual: ' + (0 << 1)); -} - - -if (1 << 1 !== 2) { - $ERROR('#34: 1 << 1 === 2. Actual: ' + (1 << 1)); -} - - -if (3 << 1 !== 6) { - $ERROR('#35: 3 << 1 === 6. Actual: ' + (3 << 1)); -} - - -if (7 << 1 !== 14) { - $ERROR('#36: 7 << 1 === 14. Actual: ' + (7 << 1)); -} - - -if (15 << 1 !== 30) { - $ERROR('#37: 15 << 1 === 30. Actual: ' + (15 << 1)); -} - - -if (31 << 1 !== 62) { - $ERROR('#38: 31 << 1 === 62. Actual: ' + (31 << 1)); -} - - -if (63 << 1 !== 126) { - $ERROR('#39: 63 << 1 === 126. Actual: ' + (63 << 1)); -} - - -if (127 << 1 !== 254) { - $ERROR('#40: 127 << 1 === 254. Actual: ' + (127 << 1)); -} - - -if (255 << 1 !== 510) { - $ERROR('#41: 255 << 1 === 510. Actual: ' + (255 << 1)); -} - - -if (511 << 1 !== 1022) { - $ERROR('#42: 511 << 1 === 1022. Actual: ' + (511 << 1)); -} - - -if (1023 << 1 !== 2046) { - $ERROR('#43: 1023 << 1 === 2046. Actual: ' + (1023 << 1)); -} - - -if (2047 << 1 !== 4094) { - $ERROR('#44: 2047 << 1 === 4094. Actual: ' + (2047 << 1)); -} - - -if (4095 << 1 !== 8190) { - $ERROR('#45: 4095 << 1 === 8190. Actual: ' + (4095 << 1)); -} - - -if (8191 << 1 !== 16382) { - $ERROR('#46: 8191 << 1 === 16382. Actual: ' + (8191 << 1)); -} - - -if (16383 << 1 !== 32766) { - $ERROR('#47: 16383 << 1 === 32766. Actual: ' + (16383 << 1)); -} - - -if (32767 << 1 !== 65534) { - $ERROR('#48: 32767 << 1 === 65534. Actual: ' + (32767 << 1)); -} - - -if (65535 << 1 !== 131070) { - $ERROR('#49: 65535 << 1 === 131070. Actual: ' + (65535 << 1)); -} - - -if (131071 << 1 !== 262142) { - $ERROR('#50: 131071 << 1 === 262142. Actual: ' + (131071 << 1)); -} - - -if (262143 << 1 !== 524286) { - $ERROR('#51: 262143 << 1 === 524286. Actual: ' + (262143 << 1)); -} - - -if (524287 << 1 !== 1048574) { - $ERROR('#52: 524287 << 1 === 1048574. Actual: ' + (524287 << 1)); -} - - -if (1048575 << 1 !== 2097150) { - $ERROR('#53: 1048575 << 1 === 2097150. Actual: ' + (1048575 << 1)); -} - - -if (2097151 << 1 !== 4194302) { - $ERROR('#54: 2097151 << 1 === 4194302. Actual: ' + (2097151 << 1)); -} - - -if (4194303 << 1 !== 8388606) { - $ERROR('#55: 4194303 << 1 === 8388606. Actual: ' + (4194303 << 1)); -} - - -if (8388607 << 1 !== 16777214) { - $ERROR('#56: 8388607 << 1 === 16777214. Actual: ' + (8388607 << 1)); -} - - -if (16777215 << 1 !== 33554430) { - $ERROR('#57: 16777215 << 1 === 33554430. Actual: ' + (16777215 << 1)); -} - - -if (33554431 << 1 !== 67108862) { - $ERROR('#58: 33554431 << 1 === 67108862. Actual: ' + (33554431 << 1)); -} - - -if (67108863 << 1 !== 134217726) { - $ERROR('#59: 67108863 << 1 === 134217726. Actual: ' + (67108863 << 1)); -} - - -if (134217727 << 1 !== 268435454) { - $ERROR('#60: 134217727 << 1 === 268435454. Actual: ' + (134217727 << 1)); -} - - -if (268435455 << 1 !== 536870910) { - $ERROR('#61: 268435455 << 1 === 536870910. Actual: ' + (268435455 << 1)); -} - - -if (536870911 << 1 !== 1073741822) { - $ERROR('#62: 536870911 << 1 === 1073741822. Actual: ' + (536870911 << 1)); -} - - -if (1073741823 << 1 !== 2147483646) { - $ERROR('#63: 1073741823 << 1 === 2147483646. Actual: ' + (1073741823 << 1)); -} - - -if (2147483647 << 1 !== -2) { - $ERROR('#64: 2147483647 << 1 === -2. Actual: ' + (2147483647 << 1)); -} - - -if (0 << 2 !== 0) { - $ERROR('#65: 0 << 2 === 0. Actual: ' + (0 << 2)); -} - - -if (1 << 2 !== 4) { - $ERROR('#66: 1 << 2 === 4. Actual: ' + (1 << 2)); -} - - -if (3 << 2 !== 12) { - $ERROR('#67: 3 << 2 === 12. Actual: ' + (3 << 2)); -} - - -if (7 << 2 !== 28) { - $ERROR('#68: 7 << 2 === 28. Actual: ' + (7 << 2)); -} - - -if (15 << 2 !== 60) { - $ERROR('#69: 15 << 2 === 60. Actual: ' + (15 << 2)); -} - - -if (31 << 2 !== 124) { - $ERROR('#70: 31 << 2 === 124. Actual: ' + (31 << 2)); -} - - -if (63 << 2 !== 252) { - $ERROR('#71: 63 << 2 === 252. Actual: ' + (63 << 2)); -} - - -if (127 << 2 !== 508) { - $ERROR('#72: 127 << 2 === 508. Actual: ' + (127 << 2)); -} - - -if (255 << 2 !== 1020) { - $ERROR('#73: 255 << 2 === 1020. Actual: ' + (255 << 2)); -} - - -if (511 << 2 !== 2044) { - $ERROR('#74: 511 << 2 === 2044. Actual: ' + (511 << 2)); -} - - -if (1023 << 2 !== 4092) { - $ERROR('#75: 1023 << 2 === 4092. Actual: ' + (1023 << 2)); -} - - -if (2047 << 2 !== 8188) { - $ERROR('#76: 2047 << 2 === 8188. Actual: ' + (2047 << 2)); -} - - -if (4095 << 2 !== 16380) { - $ERROR('#77: 4095 << 2 === 16380. Actual: ' + (4095 << 2)); -} - - -if (8191 << 2 !== 32764) { - $ERROR('#78: 8191 << 2 === 32764. Actual: ' + (8191 << 2)); -} - - -if (16383 << 2 !== 65532) { - $ERROR('#79: 16383 << 2 === 65532. Actual: ' + (16383 << 2)); -} - - -if (32767 << 2 !== 131068) { - $ERROR('#80: 32767 << 2 === 131068. Actual: ' + (32767 << 2)); -} - - -if (65535 << 2 !== 262140) { - $ERROR('#81: 65535 << 2 === 262140. Actual: ' + (65535 << 2)); -} - - -if (131071 << 2 !== 524284) { - $ERROR('#82: 131071 << 2 === 524284. Actual: ' + (131071 << 2)); -} - - -if (262143 << 2 !== 1048572) { - $ERROR('#83: 262143 << 2 === 1048572. Actual: ' + (262143 << 2)); -} - - -if (524287 << 2 !== 2097148) { - $ERROR('#84: 524287 << 2 === 2097148. Actual: ' + (524287 << 2)); -} - - -if (1048575 << 2 !== 4194300) { - $ERROR('#85: 1048575 << 2 === 4194300. Actual: ' + (1048575 << 2)); -} - - -if (2097151 << 2 !== 8388604) { - $ERROR('#86: 2097151 << 2 === 8388604. Actual: ' + (2097151 << 2)); -} - - -if (4194303 << 2 !== 16777212) { - $ERROR('#87: 4194303 << 2 === 16777212. Actual: ' + (4194303 << 2)); -} - - -if (8388607 << 2 !== 33554428) { - $ERROR('#88: 8388607 << 2 === 33554428. Actual: ' + (8388607 << 2)); -} - - -if (16777215 << 2 !== 67108860) { - $ERROR('#89: 16777215 << 2 === 67108860. Actual: ' + (16777215 << 2)); -} - - -if (33554431 << 2 !== 134217724) { - $ERROR('#90: 33554431 << 2 === 134217724. Actual: ' + (33554431 << 2)); -} - - -if (67108863 << 2 !== 268435452) { - $ERROR('#91: 67108863 << 2 === 268435452. Actual: ' + (67108863 << 2)); -} - - -if (134217727 << 2 !== 536870908) { - $ERROR('#92: 134217727 << 2 === 536870908. Actual: ' + (134217727 << 2)); -} - - -if (268435455 << 2 !== 1073741820) { - $ERROR('#93: 268435455 << 2 === 1073741820. Actual: ' + (268435455 << 2)); -} - - -if (536870911 << 2 !== 2147483644) { - $ERROR('#94: 536870911 << 2 === 2147483644. Actual: ' + (536870911 << 2)); -} - - -if (1073741823 << 2 !== -4) { - $ERROR('#95: 1073741823 << 2 === -4. Actual: ' + (1073741823 << 2)); -} - - -if (2147483647 << 2 !== -4) { - $ERROR('#96: 2147483647 << 2 === -4. Actual: ' + (2147483647 << 2)); -} - - -if (0 << 3 !== 0) { - $ERROR('#97: 0 << 3 === 0. Actual: ' + (0 << 3)); -} - - -if (1 << 3 !== 8) { - $ERROR('#98: 1 << 3 === 8. Actual: ' + (1 << 3)); -} - - -if (3 << 3 !== 24) { - $ERROR('#99: 3 << 3 === 24. Actual: ' + (3 << 3)); -} - - -if (7 << 3 !== 56) { - $ERROR('#100: 7 << 3 === 56. Actual: ' + (7 << 3)); -} - - -if (15 << 3 !== 120) { - $ERROR('#101: 15 << 3 === 120. Actual: ' + (15 << 3)); -} - - -if (31 << 3 !== 248) { - $ERROR('#102: 31 << 3 === 248. Actual: ' + (31 << 3)); -} - - -if (63 << 3 !== 504) { - $ERROR('#103: 63 << 3 === 504. Actual: ' + (63 << 3)); -} - - -if (127 << 3 !== 1016) { - $ERROR('#104: 127 << 3 === 1016. Actual: ' + (127 << 3)); -} - - -if (255 << 3 !== 2040) { - $ERROR('#105: 255 << 3 === 2040. Actual: ' + (255 << 3)); -} - - -if (511 << 3 !== 4088) { - $ERROR('#106: 511 << 3 === 4088. Actual: ' + (511 << 3)); -} - - -if (1023 << 3 !== 8184) { - $ERROR('#107: 1023 << 3 === 8184. Actual: ' + (1023 << 3)); -} - - -if (2047 << 3 !== 16376) { - $ERROR('#108: 2047 << 3 === 16376. Actual: ' + (2047 << 3)); -} - - -if (4095 << 3 !== 32760) { - $ERROR('#109: 4095 << 3 === 32760. Actual: ' + (4095 << 3)); -} - - -if (8191 << 3 !== 65528) { - $ERROR('#110: 8191 << 3 === 65528. Actual: ' + (8191 << 3)); -} - - -if (16383 << 3 !== 131064) { - $ERROR('#111: 16383 << 3 === 131064. Actual: ' + (16383 << 3)); -} - - -if (32767 << 3 !== 262136) { - $ERROR('#112: 32767 << 3 === 262136. Actual: ' + (32767 << 3)); -} - - -if (65535 << 3 !== 524280) { - $ERROR('#113: 65535 << 3 === 524280. Actual: ' + (65535 << 3)); -} - - -if (131071 << 3 !== 1048568) { - $ERROR('#114: 131071 << 3 === 1048568. Actual: ' + (131071 << 3)); -} - - -if (262143 << 3 !== 2097144) { - $ERROR('#115: 262143 << 3 === 2097144. Actual: ' + (262143 << 3)); -} - - -if (524287 << 3 !== 4194296) { - $ERROR('#116: 524287 << 3 === 4194296. Actual: ' + (524287 << 3)); -} - - -if (1048575 << 3 !== 8388600) { - $ERROR('#117: 1048575 << 3 === 8388600. Actual: ' + (1048575 << 3)); -} - - -if (2097151 << 3 !== 16777208) { - $ERROR('#118: 2097151 << 3 === 16777208. Actual: ' + (2097151 << 3)); -} - - -if (4194303 << 3 !== 33554424) { - $ERROR('#119: 4194303 << 3 === 33554424. Actual: ' + (4194303 << 3)); -} - - -if (8388607 << 3 !== 67108856) { - $ERROR('#120: 8388607 << 3 === 67108856. Actual: ' + (8388607 << 3)); -} - - -if (16777215 << 3 !== 134217720) { - $ERROR('#121: 16777215 << 3 === 134217720. Actual: ' + (16777215 << 3)); -} - - -if (33554431 << 3 !== 268435448) { - $ERROR('#122: 33554431 << 3 === 268435448. Actual: ' + (33554431 << 3)); -} - - -if (67108863 << 3 !== 536870904) { - $ERROR('#123: 67108863 << 3 === 536870904. Actual: ' + (67108863 << 3)); -} - - -if (134217727 << 3 !== 1073741816) { - $ERROR('#124: 134217727 << 3 === 1073741816. Actual: ' + (134217727 << 3)); -} - - -if (268435455 << 3 !== 2147483640) { - $ERROR('#125: 268435455 << 3 === 2147483640. Actual: ' + (268435455 << 3)); -} - - -if (536870911 << 3 !== -8) { - $ERROR('#126: 536870911 << 3 === -8. Actual: ' + (536870911 << 3)); -} - - -if (1073741823 << 3 !== -8) { - $ERROR('#127: 1073741823 << 3 === -8. Actual: ' + (1073741823 << 3)); -} - - -if (2147483647 << 3 !== -8) { - $ERROR('#128: 2147483647 << 3 === -8. Actual: ' + (2147483647 << 3)); -} - - -if (0 << 4 !== 0) { - $ERROR('#129: 0 << 4 === 0. Actual: ' + (0 << 4)); -} - - -if (1 << 4 !== 16) { - $ERROR('#130: 1 << 4 === 16. Actual: ' + (1 << 4)); -} - - -if (3 << 4 !== 48) { - $ERROR('#131: 3 << 4 === 48. Actual: ' + (3 << 4)); -} - - -if (7 << 4 !== 112) { - $ERROR('#132: 7 << 4 === 112. Actual: ' + (7 << 4)); -} - - -if (15 << 4 !== 240) { - $ERROR('#133: 15 << 4 === 240. Actual: ' + (15 << 4)); -} - - -if (31 << 4 !== 496) { - $ERROR('#134: 31 << 4 === 496. Actual: ' + (31 << 4)); -} - - -if (63 << 4 !== 1008) { - $ERROR('#135: 63 << 4 === 1008. Actual: ' + (63 << 4)); -} - - -if (127 << 4 !== 2032) { - $ERROR('#136: 127 << 4 === 2032. Actual: ' + (127 << 4)); -} - - -if (255 << 4 !== 4080) { - $ERROR('#137: 255 << 4 === 4080. Actual: ' + (255 << 4)); -} - - -if (511 << 4 !== 8176) { - $ERROR('#138: 511 << 4 === 8176. Actual: ' + (511 << 4)); -} - - -if (1023 << 4 !== 16368) { - $ERROR('#139: 1023 << 4 === 16368. Actual: ' + (1023 << 4)); -} - - -if (2047 << 4 !== 32752) { - $ERROR('#140: 2047 << 4 === 32752. Actual: ' + (2047 << 4)); -} - - -if (4095 << 4 !== 65520) { - $ERROR('#141: 4095 << 4 === 65520. Actual: ' + (4095 << 4)); -} - - -if (8191 << 4 !== 131056) { - $ERROR('#142: 8191 << 4 === 131056. Actual: ' + (8191 << 4)); -} - - -if (16383 << 4 !== 262128) { - $ERROR('#143: 16383 << 4 === 262128. Actual: ' + (16383 << 4)); -} - - -if (32767 << 4 !== 524272) { - $ERROR('#144: 32767 << 4 === 524272. Actual: ' + (32767 << 4)); -} - - -if (65535 << 4 !== 1048560) { - $ERROR('#145: 65535 << 4 === 1048560. Actual: ' + (65535 << 4)); -} - - -if (131071 << 4 !== 2097136) { - $ERROR('#146: 131071 << 4 === 2097136. Actual: ' + (131071 << 4)); -} - - -if (262143 << 4 !== 4194288) { - $ERROR('#147: 262143 << 4 === 4194288. Actual: ' + (262143 << 4)); -} - - -if (524287 << 4 !== 8388592) { - $ERROR('#148: 524287 << 4 === 8388592. Actual: ' + (524287 << 4)); -} - - -if (1048575 << 4 !== 16777200) { - $ERROR('#149: 1048575 << 4 === 16777200. Actual: ' + (1048575 << 4)); -} - - -if (2097151 << 4 !== 33554416) { - $ERROR('#150: 2097151 << 4 === 33554416. Actual: ' + (2097151 << 4)); -} - - -if (4194303 << 4 !== 67108848) { - $ERROR('#151: 4194303 << 4 === 67108848. Actual: ' + (4194303 << 4)); -} - - -if (8388607 << 4 !== 134217712) { - $ERROR('#152: 8388607 << 4 === 134217712. Actual: ' + (8388607 << 4)); -} - - -if (16777215 << 4 !== 268435440) { - $ERROR('#153: 16777215 << 4 === 268435440. Actual: ' + (16777215 << 4)); -} - - -if (33554431 << 4 !== 536870896) { - $ERROR('#154: 33554431 << 4 === 536870896. Actual: ' + (33554431 << 4)); -} - - -if (67108863 << 4 !== 1073741808) { - $ERROR('#155: 67108863 << 4 === 1073741808. Actual: ' + (67108863 << 4)); -} - - -if (134217727 << 4 !== 2147483632) { - $ERROR('#156: 134217727 << 4 === 2147483632. Actual: ' + (134217727 << 4)); -} - - -if (268435455 << 4 !== -16) { - $ERROR('#157: 268435455 << 4 === -16. Actual: ' + (268435455 << 4)); -} - - -if (536870911 << 4 !== -16) { - $ERROR('#158: 536870911 << 4 === -16. Actual: ' + (536870911 << 4)); -} - - -if (1073741823 << 4 !== -16) { - $ERROR('#159: 1073741823 << 4 === -16. Actual: ' + (1073741823 << 4)); -} - - -if (2147483647 << 4 !== -16) { - $ERROR('#160: 2147483647 << 4 === -16. Actual: ' + (2147483647 << 4)); -} - - -if (0 << 5 !== 0) { - $ERROR('#161: 0 << 5 === 0. Actual: ' + (0 << 5)); -} - - -if (1 << 5 !== 32) { - $ERROR('#162: 1 << 5 === 32. Actual: ' + (1 << 5)); -} - - -if (3 << 5 !== 96) { - $ERROR('#163: 3 << 5 === 96. Actual: ' + (3 << 5)); -} - - -if (7 << 5 !== 224) { - $ERROR('#164: 7 << 5 === 224. Actual: ' + (7 << 5)); -} - - -if (15 << 5 !== 480) { - $ERROR('#165: 15 << 5 === 480. Actual: ' + (15 << 5)); -} - - -if (31 << 5 !== 992) { - $ERROR('#166: 31 << 5 === 992. Actual: ' + (31 << 5)); -} - - -if (63 << 5 !== 2016) { - $ERROR('#167: 63 << 5 === 2016. Actual: ' + (63 << 5)); -} - - -if (127 << 5 !== 4064) { - $ERROR('#168: 127 << 5 === 4064. Actual: ' + (127 << 5)); -} - - -if (255 << 5 !== 8160) { - $ERROR('#169: 255 << 5 === 8160. Actual: ' + (255 << 5)); -} - - -if (511 << 5 !== 16352) { - $ERROR('#170: 511 << 5 === 16352. Actual: ' + (511 << 5)); -} - - -if (1023 << 5 !== 32736) { - $ERROR('#171: 1023 << 5 === 32736. Actual: ' + (1023 << 5)); -} - - -if (2047 << 5 !== 65504) { - $ERROR('#172: 2047 << 5 === 65504. Actual: ' + (2047 << 5)); -} - - -if (4095 << 5 !== 131040) { - $ERROR('#173: 4095 << 5 === 131040. Actual: ' + (4095 << 5)); -} - - -if (8191 << 5 !== 262112) { - $ERROR('#174: 8191 << 5 === 262112. Actual: ' + (8191 << 5)); -} - - -if (16383 << 5 !== 524256) { - $ERROR('#175: 16383 << 5 === 524256. Actual: ' + (16383 << 5)); -} - - -if (32767 << 5 !== 1048544) { - $ERROR('#176: 32767 << 5 === 1048544. Actual: ' + (32767 << 5)); -} - - -if (65535 << 5 !== 2097120) { - $ERROR('#177: 65535 << 5 === 2097120. Actual: ' + (65535 << 5)); -} - - -if (131071 << 5 !== 4194272) { - $ERROR('#178: 131071 << 5 === 4194272. Actual: ' + (131071 << 5)); -} - - -if (262143 << 5 !== 8388576) { - $ERROR('#179: 262143 << 5 === 8388576. Actual: ' + (262143 << 5)); -} - - -if (524287 << 5 !== 16777184) { - $ERROR('#180: 524287 << 5 === 16777184. Actual: ' + (524287 << 5)); -} - - -if (1048575 << 5 !== 33554400) { - $ERROR('#181: 1048575 << 5 === 33554400. Actual: ' + (1048575 << 5)); -} - - -if (2097151 << 5 !== 67108832) { - $ERROR('#182: 2097151 << 5 === 67108832. Actual: ' + (2097151 << 5)); -} - - -if (4194303 << 5 !== 134217696) { - $ERROR('#183: 4194303 << 5 === 134217696. Actual: ' + (4194303 << 5)); -} - - -if (8388607 << 5 !== 268435424) { - $ERROR('#184: 8388607 << 5 === 268435424. Actual: ' + (8388607 << 5)); -} - - -if (16777215 << 5 !== 536870880) { - $ERROR('#185: 16777215 << 5 === 536870880. Actual: ' + (16777215 << 5)); -} - - -if (33554431 << 5 !== 1073741792) { - $ERROR('#186: 33554431 << 5 === 1073741792. Actual: ' + (33554431 << 5)); -} - - -if (67108863 << 5 !== 2147483616) { - $ERROR('#187: 67108863 << 5 === 2147483616. Actual: ' + (67108863 << 5)); -} - - -if (134217727 << 5 !== -32) { - $ERROR('#188: 134217727 << 5 === -32. Actual: ' + (134217727 << 5)); -} - - -if (268435455 << 5 !== -32) { - $ERROR('#189: 268435455 << 5 === -32. Actual: ' + (268435455 << 5)); -} - - -if (536870911 << 5 !== -32) { - $ERROR('#190: 536870911 << 5 === -32. Actual: ' + (536870911 << 5)); -} - - -if (1073741823 << 5 !== -32) { - $ERROR('#191: 1073741823 << 5 === -32. Actual: ' + (1073741823 << 5)); -} - - -if (2147483647 << 5 !== -32) { - $ERROR('#192: 2147483647 << 5 === -32. Actual: ' + (2147483647 << 5)); -} - - -if (0 << 6 !== 0) { - $ERROR('#193: 0 << 6 === 0. Actual: ' + (0 << 6)); -} - - -if (1 << 6 !== 64) { - $ERROR('#194: 1 << 6 === 64. Actual: ' + (1 << 6)); -} - - -if (3 << 6 !== 192) { - $ERROR('#195: 3 << 6 === 192. Actual: ' + (3 << 6)); -} - - -if (7 << 6 !== 448) { - $ERROR('#196: 7 << 6 === 448. Actual: ' + (7 << 6)); -} - - -if (15 << 6 !== 960) { - $ERROR('#197: 15 << 6 === 960. Actual: ' + (15 << 6)); -} - - -if (31 << 6 !== 1984) { - $ERROR('#198: 31 << 6 === 1984. Actual: ' + (31 << 6)); -} - - -if (63 << 6 !== 4032) { - $ERROR('#199: 63 << 6 === 4032. Actual: ' + (63 << 6)); -} - - -if (127 << 6 !== 8128) { - $ERROR('#200: 127 << 6 === 8128. Actual: ' + (127 << 6)); -} - - -if (255 << 6 !== 16320) { - $ERROR('#201: 255 << 6 === 16320. Actual: ' + (255 << 6)); -} - - -if (511 << 6 !== 32704) { - $ERROR('#202: 511 << 6 === 32704. Actual: ' + (511 << 6)); -} - - -if (1023 << 6 !== 65472) { - $ERROR('#203: 1023 << 6 === 65472. Actual: ' + (1023 << 6)); -} - - -if (2047 << 6 !== 131008) { - $ERROR('#204: 2047 << 6 === 131008. Actual: ' + (2047 << 6)); -} - - -if (4095 << 6 !== 262080) { - $ERROR('#205: 4095 << 6 === 262080. Actual: ' + (4095 << 6)); -} - - -if (8191 << 6 !== 524224) { - $ERROR('#206: 8191 << 6 === 524224. Actual: ' + (8191 << 6)); -} - - -if (16383 << 6 !== 1048512) { - $ERROR('#207: 16383 << 6 === 1048512. Actual: ' + (16383 << 6)); -} - - -if (32767 << 6 !== 2097088) { - $ERROR('#208: 32767 << 6 === 2097088. Actual: ' + (32767 << 6)); -} - - -if (65535 << 6 !== 4194240) { - $ERROR('#209: 65535 << 6 === 4194240. Actual: ' + (65535 << 6)); -} - - -if (131071 << 6 !== 8388544) { - $ERROR('#210: 131071 << 6 === 8388544. Actual: ' + (131071 << 6)); -} - - -if (262143 << 6 !== 16777152) { - $ERROR('#211: 262143 << 6 === 16777152. Actual: ' + (262143 << 6)); -} - - -if (524287 << 6 !== 33554368) { - $ERROR('#212: 524287 << 6 === 33554368. Actual: ' + (524287 << 6)); -} - - -if (1048575 << 6 !== 67108800) { - $ERROR('#213: 1048575 << 6 === 67108800. Actual: ' + (1048575 << 6)); -} - - -if (2097151 << 6 !== 134217664) { - $ERROR('#214: 2097151 << 6 === 134217664. Actual: ' + (2097151 << 6)); -} - - -if (4194303 << 6 !== 268435392) { - $ERROR('#215: 4194303 << 6 === 268435392. Actual: ' + (4194303 << 6)); -} - - -if (8388607 << 6 !== 536870848) { - $ERROR('#216: 8388607 << 6 === 536870848. Actual: ' + (8388607 << 6)); -} - - -if (16777215 << 6 !== 1073741760) { - $ERROR('#217: 16777215 << 6 === 1073741760. Actual: ' + (16777215 << 6)); -} - - -if (33554431 << 6 !== 2147483584) { - $ERROR('#218: 33554431 << 6 === 2147483584. Actual: ' + (33554431 << 6)); -} - - -if (67108863 << 6 !== -64) { - $ERROR('#219: 67108863 << 6 === -64. Actual: ' + (67108863 << 6)); -} - - -if (134217727 << 6 !== -64) { - $ERROR('#220: 134217727 << 6 === -64. Actual: ' + (134217727 << 6)); -} - - -if (268435455 << 6 !== -64) { - $ERROR('#221: 268435455 << 6 === -64. Actual: ' + (268435455 << 6)); -} - - -if (536870911 << 6 !== -64) { - $ERROR('#222: 536870911 << 6 === -64. Actual: ' + (536870911 << 6)); -} - - -if (1073741823 << 6 !== -64) { - $ERROR('#223: 1073741823 << 6 === -64. Actual: ' + (1073741823 << 6)); -} - - -if (2147483647 << 6 !== -64) { - $ERROR('#224: 2147483647 << 6 === -64. Actual: ' + (2147483647 << 6)); -} - - -if (0 << 7 !== 0) { - $ERROR('#225: 0 << 7 === 0. Actual: ' + (0 << 7)); -} - - -if (1 << 7 !== 128) { - $ERROR('#226: 1 << 7 === 128. Actual: ' + (1 << 7)); -} - - -if (3 << 7 !== 384) { - $ERROR('#227: 3 << 7 === 384. Actual: ' + (3 << 7)); -} - - -if (7 << 7 !== 896) { - $ERROR('#228: 7 << 7 === 896. Actual: ' + (7 << 7)); -} - - -if (15 << 7 !== 1920) { - $ERROR('#229: 15 << 7 === 1920. Actual: ' + (15 << 7)); -} - - -if (31 << 7 !== 3968) { - $ERROR('#230: 31 << 7 === 3968. Actual: ' + (31 << 7)); -} - - -if (63 << 7 !== 8064) { - $ERROR('#231: 63 << 7 === 8064. Actual: ' + (63 << 7)); -} - - -if (127 << 7 !== 16256) { - $ERROR('#232: 127 << 7 === 16256. Actual: ' + (127 << 7)); -} - - -if (255 << 7 !== 32640) { - $ERROR('#233: 255 << 7 === 32640. Actual: ' + (255 << 7)); -} - - -if (511 << 7 !== 65408) { - $ERROR('#234: 511 << 7 === 65408. Actual: ' + (511 << 7)); -} - - -if (1023 << 7 !== 130944) { - $ERROR('#235: 1023 << 7 === 130944. Actual: ' + (1023 << 7)); -} - - -if (2047 << 7 !== 262016) { - $ERROR('#236: 2047 << 7 === 262016. Actual: ' + (2047 << 7)); -} - - -if (4095 << 7 !== 524160) { - $ERROR('#237: 4095 << 7 === 524160. Actual: ' + (4095 << 7)); -} - - -if (8191 << 7 !== 1048448) { - $ERROR('#238: 8191 << 7 === 1048448. Actual: ' + (8191 << 7)); -} - - -if (16383 << 7 !== 2097024) { - $ERROR('#239: 16383 << 7 === 2097024. Actual: ' + (16383 << 7)); -} - - -if (32767 << 7 !== 4194176) { - $ERROR('#240: 32767 << 7 === 4194176. Actual: ' + (32767 << 7)); -} - - -if (65535 << 7 !== 8388480) { - $ERROR('#241: 65535 << 7 === 8388480. Actual: ' + (65535 << 7)); -} - - -if (131071 << 7 !== 16777088) { - $ERROR('#242: 131071 << 7 === 16777088. Actual: ' + (131071 << 7)); -} - - -if (262143 << 7 !== 33554304) { - $ERROR('#243: 262143 << 7 === 33554304. Actual: ' + (262143 << 7)); -} - - -if (524287 << 7 !== 67108736) { - $ERROR('#244: 524287 << 7 === 67108736. Actual: ' + (524287 << 7)); -} - - -if (1048575 << 7 !== 134217600) { - $ERROR('#245: 1048575 << 7 === 134217600. Actual: ' + (1048575 << 7)); -} - - -if (2097151 << 7 !== 268435328) { - $ERROR('#246: 2097151 << 7 === 268435328. Actual: ' + (2097151 << 7)); -} - - -if (4194303 << 7 !== 536870784) { - $ERROR('#247: 4194303 << 7 === 536870784. Actual: ' + (4194303 << 7)); -} - - -if (8388607 << 7 !== 1073741696) { - $ERROR('#248: 8388607 << 7 === 1073741696. Actual: ' + (8388607 << 7)); -} - - -if (16777215 << 7 !== 2147483520) { - $ERROR('#249: 16777215 << 7 === 2147483520. Actual: ' + (16777215 << 7)); -} - - -if (33554431 << 7 !== -128) { - $ERROR('#250: 33554431 << 7 === -128. Actual: ' + (33554431 << 7)); -} - - -if (67108863 << 7 !== -128) { - $ERROR('#251: 67108863 << 7 === -128. Actual: ' + (67108863 << 7)); -} - - -if (134217727 << 7 !== -128) { - $ERROR('#252: 134217727 << 7 === -128. Actual: ' + (134217727 << 7)); -} - - -if (268435455 << 7 !== -128) { - $ERROR('#253: 268435455 << 7 === -128. Actual: ' + (268435455 << 7)); -} - - -if (536870911 << 7 !== -128) { - $ERROR('#254: 536870911 << 7 === -128. Actual: ' + (536870911 << 7)); -} - - -if (1073741823 << 7 !== -128) { - $ERROR('#255: 1073741823 << 7 === -128. Actual: ' + (1073741823 << 7)); -} - - -if (2147483647 << 7 !== -128) { - $ERROR('#256: 2147483647 << 7 === -128. Actual: ' + (2147483647 << 7)); -} - - -if (0 << 8 !== 0) { - $ERROR('#257: 0 << 8 === 0. Actual: ' + (0 << 8)); -} - - -if (1 << 8 !== 256) { - $ERROR('#258: 1 << 8 === 256. Actual: ' + (1 << 8)); -} - - -if (3 << 8 !== 768) { - $ERROR('#259: 3 << 8 === 768. Actual: ' + (3 << 8)); -} - - -if (7 << 8 !== 1792) { - $ERROR('#260: 7 << 8 === 1792. Actual: ' + (7 << 8)); -} - - -if (15 << 8 !== 3840) { - $ERROR('#261: 15 << 8 === 3840. Actual: ' + (15 << 8)); -} - - -if (31 << 8 !== 7936) { - $ERROR('#262: 31 << 8 === 7936. Actual: ' + (31 << 8)); -} - - -if (63 << 8 !== 16128) { - $ERROR('#263: 63 << 8 === 16128. Actual: ' + (63 << 8)); -} - - -if (127 << 8 !== 32512) { - $ERROR('#264: 127 << 8 === 32512. Actual: ' + (127 << 8)); -} - - -if (255 << 8 !== 65280) { - $ERROR('#265: 255 << 8 === 65280. Actual: ' + (255 << 8)); -} - - -if (511 << 8 !== 130816) { - $ERROR('#266: 511 << 8 === 130816. Actual: ' + (511 << 8)); -} - - -if (1023 << 8 !== 261888) { - $ERROR('#267: 1023 << 8 === 261888. Actual: ' + (1023 << 8)); -} - - -if (2047 << 8 !== 524032) { - $ERROR('#268: 2047 << 8 === 524032. Actual: ' + (2047 << 8)); -} - - -if (4095 << 8 !== 1048320) { - $ERROR('#269: 4095 << 8 === 1048320. Actual: ' + (4095 << 8)); -} - - -if (8191 << 8 !== 2096896) { - $ERROR('#270: 8191 << 8 === 2096896. Actual: ' + (8191 << 8)); -} - - -if (16383 << 8 !== 4194048) { - $ERROR('#271: 16383 << 8 === 4194048. Actual: ' + (16383 << 8)); -} - - -if (32767 << 8 !== 8388352) { - $ERROR('#272: 32767 << 8 === 8388352. Actual: ' + (32767 << 8)); -} - - -if (65535 << 8 !== 16776960) { - $ERROR('#273: 65535 << 8 === 16776960. Actual: ' + (65535 << 8)); -} - - -if (131071 << 8 !== 33554176) { - $ERROR('#274: 131071 << 8 === 33554176. Actual: ' + (131071 << 8)); -} - - -if (262143 << 8 !== 67108608) { - $ERROR('#275: 262143 << 8 === 67108608. Actual: ' + (262143 << 8)); -} - - -if (524287 << 8 !== 134217472) { - $ERROR('#276: 524287 << 8 === 134217472. Actual: ' + (524287 << 8)); -} - - -if (1048575 << 8 !== 268435200) { - $ERROR('#277: 1048575 << 8 === 268435200. Actual: ' + (1048575 << 8)); -} - - -if (2097151 << 8 !== 536870656) { - $ERROR('#278: 2097151 << 8 === 536870656. Actual: ' + (2097151 << 8)); -} - - -if (4194303 << 8 !== 1073741568) { - $ERROR('#279: 4194303 << 8 === 1073741568. Actual: ' + (4194303 << 8)); -} - - -if (8388607 << 8 !== 2147483392) { - $ERROR('#280: 8388607 << 8 === 2147483392. Actual: ' + (8388607 << 8)); -} - - -if (16777215 << 8 !== -256) { - $ERROR('#281: 16777215 << 8 === -256. Actual: ' + (16777215 << 8)); -} - - -if (33554431 << 8 !== -256) { - $ERROR('#282: 33554431 << 8 === -256. Actual: ' + (33554431 << 8)); -} - - -if (67108863 << 8 !== -256) { - $ERROR('#283: 67108863 << 8 === -256. Actual: ' + (67108863 << 8)); -} - - -if (134217727 << 8 !== -256) { - $ERROR('#284: 134217727 << 8 === -256. Actual: ' + (134217727 << 8)); -} - - -if (268435455 << 8 !== -256) { - $ERROR('#285: 268435455 << 8 === -256. Actual: ' + (268435455 << 8)); -} - - -if (536870911 << 8 !== -256) { - $ERROR('#286: 536870911 << 8 === -256. Actual: ' + (536870911 << 8)); -} - - -if (1073741823 << 8 !== -256) { - $ERROR('#287: 1073741823 << 8 === -256. Actual: ' + (1073741823 << 8)); -} - - -if (2147483647 << 8 !== -256) { - $ERROR('#288: 2147483647 << 8 === -256. Actual: ' + (2147483647 << 8)); -} - - -if (0 << 9 !== 0) { - $ERROR('#289: 0 << 9 === 0. Actual: ' + (0 << 9)); -} - - -if (1 << 9 !== 512) { - $ERROR('#290: 1 << 9 === 512. Actual: ' + (1 << 9)); -} - - -if (3 << 9 !== 1536) { - $ERROR('#291: 3 << 9 === 1536. Actual: ' + (3 << 9)); -} - - -if (7 << 9 !== 3584) { - $ERROR('#292: 7 << 9 === 3584. Actual: ' + (7 << 9)); -} - - -if (15 << 9 !== 7680) { - $ERROR('#293: 15 << 9 === 7680. Actual: ' + (15 << 9)); -} - - -if (31 << 9 !== 15872) { - $ERROR('#294: 31 << 9 === 15872. Actual: ' + (31 << 9)); -} - - -if (63 << 9 !== 32256) { - $ERROR('#295: 63 << 9 === 32256. Actual: ' + (63 << 9)); -} - - -if (127 << 9 !== 65024) { - $ERROR('#296: 127 << 9 === 65024. Actual: ' + (127 << 9)); -} - - -if (255 << 9 !== 130560) { - $ERROR('#297: 255 << 9 === 130560. Actual: ' + (255 << 9)); -} - - -if (511 << 9 !== 261632) { - $ERROR('#298: 511 << 9 === 261632. Actual: ' + (511 << 9)); -} - - -if (1023 << 9 !== 523776) { - $ERROR('#299: 1023 << 9 === 523776. Actual: ' + (1023 << 9)); -} - - -if (2047 << 9 !== 1048064) { - $ERROR('#300: 2047 << 9 === 1048064. Actual: ' + (2047 << 9)); -} - - -if (4095 << 9 !== 2096640) { - $ERROR('#301: 4095 << 9 === 2096640. Actual: ' + (4095 << 9)); -} - - -if (8191 << 9 !== 4193792) { - $ERROR('#302: 8191 << 9 === 4193792. Actual: ' + (8191 << 9)); -} - - -if (16383 << 9 !== 8388096) { - $ERROR('#303: 16383 << 9 === 8388096. Actual: ' + (16383 << 9)); -} - - -if (32767 << 9 !== 16776704) { - $ERROR('#304: 32767 << 9 === 16776704. Actual: ' + (32767 << 9)); -} - - -if (65535 << 9 !== 33553920) { - $ERROR('#305: 65535 << 9 === 33553920. Actual: ' + (65535 << 9)); -} - - -if (131071 << 9 !== 67108352) { - $ERROR('#306: 131071 << 9 === 67108352. Actual: ' + (131071 << 9)); -} - - -if (262143 << 9 !== 134217216) { - $ERROR('#307: 262143 << 9 === 134217216. Actual: ' + (262143 << 9)); -} - - -if (524287 << 9 !== 268434944) { - $ERROR('#308: 524287 << 9 === 268434944. Actual: ' + (524287 << 9)); -} - - -if (1048575 << 9 !== 536870400) { - $ERROR('#309: 1048575 << 9 === 536870400. Actual: ' + (1048575 << 9)); -} - - -if (2097151 << 9 !== 1073741312) { - $ERROR('#310: 2097151 << 9 === 1073741312. Actual: ' + (2097151 << 9)); -} - - -if (4194303 << 9 !== 2147483136) { - $ERROR('#311: 4194303 << 9 === 2147483136. Actual: ' + (4194303 << 9)); -} - - -if (8388607 << 9 !== -512) { - $ERROR('#312: 8388607 << 9 === -512. Actual: ' + (8388607 << 9)); -} - - -if (16777215 << 9 !== -512) { - $ERROR('#313: 16777215 << 9 === -512. Actual: ' + (16777215 << 9)); -} - - -if (33554431 << 9 !== -512) { - $ERROR('#314: 33554431 << 9 === -512. Actual: ' + (33554431 << 9)); -} - - -if (67108863 << 9 !== -512) { - $ERROR('#315: 67108863 << 9 === -512. Actual: ' + (67108863 << 9)); -} - - -if (134217727 << 9 !== -512) { - $ERROR('#316: 134217727 << 9 === -512. Actual: ' + (134217727 << 9)); -} - - -if (268435455 << 9 !== -512) { - $ERROR('#317: 268435455 << 9 === -512. Actual: ' + (268435455 << 9)); -} - - -if (536870911 << 9 !== -512) { - $ERROR('#318: 536870911 << 9 === -512. Actual: ' + (536870911 << 9)); -} - - -if (1073741823 << 9 !== -512) { - $ERROR('#319: 1073741823 << 9 === -512. Actual: ' + (1073741823 << 9)); -} - - -if (2147483647 << 9 !== -512) { - $ERROR('#320: 2147483647 << 9 === -512. Actual: ' + (2147483647 << 9)); -} - - -if (0 << 10 !== 0) { - $ERROR('#321: 0 << 10 === 0. Actual: ' + (0 << 10)); -} - - -if (1 << 10 !== 1024) { - $ERROR('#322: 1 << 10 === 1024. Actual: ' + (1 << 10)); -} - - -if (3 << 10 !== 3072) { - $ERROR('#323: 3 << 10 === 3072. Actual: ' + (3 << 10)); -} - - -if (7 << 10 !== 7168) { - $ERROR('#324: 7 << 10 === 7168. Actual: ' + (7 << 10)); -} - - -if (15 << 10 !== 15360) { - $ERROR('#325: 15 << 10 === 15360. Actual: ' + (15 << 10)); -} - - -if (31 << 10 !== 31744) { - $ERROR('#326: 31 << 10 === 31744. Actual: ' + (31 << 10)); -} - - -if (63 << 10 !== 64512) { - $ERROR('#327: 63 << 10 === 64512. Actual: ' + (63 << 10)); -} - - -if (127 << 10 !== 130048) { - $ERROR('#328: 127 << 10 === 130048. Actual: ' + (127 << 10)); -} - - -if (255 << 10 !== 261120) { - $ERROR('#329: 255 << 10 === 261120. Actual: ' + (255 << 10)); -} - - -if (511 << 10 !== 523264) { - $ERROR('#330: 511 << 10 === 523264. Actual: ' + (511 << 10)); -} - - -if (1023 << 10 !== 1047552) { - $ERROR('#331: 1023 << 10 === 1047552. Actual: ' + (1023 << 10)); -} - - -if (2047 << 10 !== 2096128) { - $ERROR('#332: 2047 << 10 === 2096128. Actual: ' + (2047 << 10)); -} - - -if (4095 << 10 !== 4193280) { - $ERROR('#333: 4095 << 10 === 4193280. Actual: ' + (4095 << 10)); -} - - -if (8191 << 10 !== 8387584) { - $ERROR('#334: 8191 << 10 === 8387584. Actual: ' + (8191 << 10)); -} - - -if (16383 << 10 !== 16776192) { - $ERROR('#335: 16383 << 10 === 16776192. Actual: ' + (16383 << 10)); -} - - -if (32767 << 10 !== 33553408) { - $ERROR('#336: 32767 << 10 === 33553408. Actual: ' + (32767 << 10)); -} - - -if (65535 << 10 !== 67107840) { - $ERROR('#337: 65535 << 10 === 67107840. Actual: ' + (65535 << 10)); -} - - -if (131071 << 10 !== 134216704) { - $ERROR('#338: 131071 << 10 === 134216704. Actual: ' + (131071 << 10)); -} - - -if (262143 << 10 !== 268434432) { - $ERROR('#339: 262143 << 10 === 268434432. Actual: ' + (262143 << 10)); -} - - -if (524287 << 10 !== 536869888) { - $ERROR('#340: 524287 << 10 === 536869888. Actual: ' + (524287 << 10)); -} - - -if (1048575 << 10 !== 1073740800) { - $ERROR('#341: 1048575 << 10 === 1073740800. Actual: ' + (1048575 << 10)); -} - - -if (2097151 << 10 !== 2147482624) { - $ERROR('#342: 2097151 << 10 === 2147482624. Actual: ' + (2097151 << 10)); -} - - -if (4194303 << 10 !== -1024) { - $ERROR('#343: 4194303 << 10 === -1024. Actual: ' + (4194303 << 10)); -} - - -if (8388607 << 10 !== -1024) { - $ERROR('#344: 8388607 << 10 === -1024. Actual: ' + (8388607 << 10)); -} - - -if (16777215 << 10 !== -1024) { - $ERROR('#345: 16777215 << 10 === -1024. Actual: ' + (16777215 << 10)); -} - - -if (33554431 << 10 !== -1024) { - $ERROR('#346: 33554431 << 10 === -1024. Actual: ' + (33554431 << 10)); -} - - -if (67108863 << 10 !== -1024) { - $ERROR('#347: 67108863 << 10 === -1024. Actual: ' + (67108863 << 10)); -} - - -if (134217727 << 10 !== -1024) { - $ERROR('#348: 134217727 << 10 === -1024. Actual: ' + (134217727 << 10)); -} - - -if (268435455 << 10 !== -1024) { - $ERROR('#349: 268435455 << 10 === -1024. Actual: ' + (268435455 << 10)); -} - - -if (536870911 << 10 !== -1024) { - $ERROR('#350: 536870911 << 10 === -1024. Actual: ' + (536870911 << 10)); -} - - -if (1073741823 << 10 !== -1024) { - $ERROR('#351: 1073741823 << 10 === -1024. Actual: ' + (1073741823 << 10)); -} - - -if (2147483647 << 10 !== -1024) { - $ERROR('#352: 2147483647 << 10 === -1024. Actual: ' + (2147483647 << 10)); -} - - -if (0 << 11 !== 0) { - $ERROR('#353: 0 << 11 === 0. Actual: ' + (0 << 11)); -} - - -if (1 << 11 !== 2048) { - $ERROR('#354: 1 << 11 === 2048. Actual: ' + (1 << 11)); -} - - -if (3 << 11 !== 6144) { - $ERROR('#355: 3 << 11 === 6144. Actual: ' + (3 << 11)); -} - - -if (7 << 11 !== 14336) { - $ERROR('#356: 7 << 11 === 14336. Actual: ' + (7 << 11)); -} - - -if (15 << 11 !== 30720) { - $ERROR('#357: 15 << 11 === 30720. Actual: ' + (15 << 11)); -} - - -if (31 << 11 !== 63488) { - $ERROR('#358: 31 << 11 === 63488. Actual: ' + (31 << 11)); -} - - -if (63 << 11 !== 129024) { - $ERROR('#359: 63 << 11 === 129024. Actual: ' + (63 << 11)); -} - - -if (127 << 11 !== 260096) { - $ERROR('#360: 127 << 11 === 260096. Actual: ' + (127 << 11)); -} - - -if (255 << 11 !== 522240) { - $ERROR('#361: 255 << 11 === 522240. Actual: ' + (255 << 11)); -} - - -if (511 << 11 !== 1046528) { - $ERROR('#362: 511 << 11 === 1046528. Actual: ' + (511 << 11)); -} - - -if (1023 << 11 !== 2095104) { - $ERROR('#363: 1023 << 11 === 2095104. Actual: ' + (1023 << 11)); -} - - -if (2047 << 11 !== 4192256) { - $ERROR('#364: 2047 << 11 === 4192256. Actual: ' + (2047 << 11)); -} - - -if (4095 << 11 !== 8386560) { - $ERROR('#365: 4095 << 11 === 8386560. Actual: ' + (4095 << 11)); -} - - -if (8191 << 11 !== 16775168) { - $ERROR('#366: 8191 << 11 === 16775168. Actual: ' + (8191 << 11)); -} - - -if (16383 << 11 !== 33552384) { - $ERROR('#367: 16383 << 11 === 33552384. Actual: ' + (16383 << 11)); -} - - -if (32767 << 11 !== 67106816) { - $ERROR('#368: 32767 << 11 === 67106816. Actual: ' + (32767 << 11)); -} - - -if (65535 << 11 !== 134215680) { - $ERROR('#369: 65535 << 11 === 134215680. Actual: ' + (65535 << 11)); -} - - -if (131071 << 11 !== 268433408) { - $ERROR('#370: 131071 << 11 === 268433408. Actual: ' + (131071 << 11)); -} - - -if (262143 << 11 !== 536868864) { - $ERROR('#371: 262143 << 11 === 536868864. Actual: ' + (262143 << 11)); -} - - -if (524287 << 11 !== 1073739776) { - $ERROR('#372: 524287 << 11 === 1073739776. Actual: ' + (524287 << 11)); -} - - -if (1048575 << 11 !== 2147481600) { - $ERROR('#373: 1048575 << 11 === 2147481600. Actual: ' + (1048575 << 11)); -} - - -if (2097151 << 11 !== -2048) { - $ERROR('#374: 2097151 << 11 === -2048. Actual: ' + (2097151 << 11)); -} - - -if (4194303 << 11 !== -2048) { - $ERROR('#375: 4194303 << 11 === -2048. Actual: ' + (4194303 << 11)); -} - - -if (8388607 << 11 !== -2048) { - $ERROR('#376: 8388607 << 11 === -2048. Actual: ' + (8388607 << 11)); -} - - -if (16777215 << 11 !== -2048) { - $ERROR('#377: 16777215 << 11 === -2048. Actual: ' + (16777215 << 11)); -} - - -if (33554431 << 11 !== -2048) { - $ERROR('#378: 33554431 << 11 === -2048. Actual: ' + (33554431 << 11)); -} - - -if (67108863 << 11 !== -2048) { - $ERROR('#379: 67108863 << 11 === -2048. Actual: ' + (67108863 << 11)); -} - - -if (134217727 << 11 !== -2048) { - $ERROR('#380: 134217727 << 11 === -2048. Actual: ' + (134217727 << 11)); -} - - -if (268435455 << 11 !== -2048) { - $ERROR('#381: 268435455 << 11 === -2048. Actual: ' + (268435455 << 11)); -} - - -if (536870911 << 11 !== -2048) { - $ERROR('#382: 536870911 << 11 === -2048. Actual: ' + (536870911 << 11)); -} - - -if (1073741823 << 11 !== -2048) { - $ERROR('#383: 1073741823 << 11 === -2048. Actual: ' + (1073741823 << 11)); -} - - -if (2147483647 << 11 !== -2048) { - $ERROR('#384: 2147483647 << 11 === -2048. Actual: ' + (2147483647 << 11)); -} - - -if (0 << 12 !== 0) { - $ERROR('#385: 0 << 12 === 0. Actual: ' + (0 << 12)); -} - - -if (1 << 12 !== 4096) { - $ERROR('#386: 1 << 12 === 4096. Actual: ' + (1 << 12)); -} - - -if (3 << 12 !== 12288) { - $ERROR('#387: 3 << 12 === 12288. Actual: ' + (3 << 12)); -} - - -if (7 << 12 !== 28672) { - $ERROR('#388: 7 << 12 === 28672. Actual: ' + (7 << 12)); -} - - -if (15 << 12 !== 61440) { - $ERROR('#389: 15 << 12 === 61440. Actual: ' + (15 << 12)); -} - - -if (31 << 12 !== 126976) { - $ERROR('#390: 31 << 12 === 126976. Actual: ' + (31 << 12)); -} - - -if (63 << 12 !== 258048) { - $ERROR('#391: 63 << 12 === 258048. Actual: ' + (63 << 12)); -} - - -if (127 << 12 !== 520192) { - $ERROR('#392: 127 << 12 === 520192. Actual: ' + (127 << 12)); -} - - -if (255 << 12 !== 1044480) { - $ERROR('#393: 255 << 12 === 1044480. Actual: ' + (255 << 12)); -} - - -if (511 << 12 !== 2093056) { - $ERROR('#394: 511 << 12 === 2093056. Actual: ' + (511 << 12)); -} - - -if (1023 << 12 !== 4190208) { - $ERROR('#395: 1023 << 12 === 4190208. Actual: ' + (1023 << 12)); -} - - -if (2047 << 12 !== 8384512) { - $ERROR('#396: 2047 << 12 === 8384512. Actual: ' + (2047 << 12)); -} - - -if (4095 << 12 !== 16773120) { - $ERROR('#397: 4095 << 12 === 16773120. Actual: ' + (4095 << 12)); -} - - -if (8191 << 12 !== 33550336) { - $ERROR('#398: 8191 << 12 === 33550336. Actual: ' + (8191 << 12)); -} - - -if (16383 << 12 !== 67104768) { - $ERROR('#399: 16383 << 12 === 67104768. Actual: ' + (16383 << 12)); -} - - -if (32767 << 12 !== 134213632) { - $ERROR('#400: 32767 << 12 === 134213632. Actual: ' + (32767 << 12)); -} - - -if (65535 << 12 !== 268431360) { - $ERROR('#401: 65535 << 12 === 268431360. Actual: ' + (65535 << 12)); -} - - -if (131071 << 12 !== 536866816) { - $ERROR('#402: 131071 << 12 === 536866816. Actual: ' + (131071 << 12)); -} - - -if (262143 << 12 !== 1073737728) { - $ERROR('#403: 262143 << 12 === 1073737728. Actual: ' + (262143 << 12)); -} - - -if (524287 << 12 !== 2147479552) { - $ERROR('#404: 524287 << 12 === 2147479552. Actual: ' + (524287 << 12)); -} - - -if (1048575 << 12 !== -4096) { - $ERROR('#405: 1048575 << 12 === -4096. Actual: ' + (1048575 << 12)); -} - - -if (2097151 << 12 !== -4096) { - $ERROR('#406: 2097151 << 12 === -4096. Actual: ' + (2097151 << 12)); -} - - -if (4194303 << 12 !== -4096) { - $ERROR('#407: 4194303 << 12 === -4096. Actual: ' + (4194303 << 12)); -} - - -if (8388607 << 12 !== -4096) { - $ERROR('#408: 8388607 << 12 === -4096. Actual: ' + (8388607 << 12)); -} - - -if (16777215 << 12 !== -4096) { - $ERROR('#409: 16777215 << 12 === -4096. Actual: ' + (16777215 << 12)); -} - - -if (33554431 << 12 !== -4096) { - $ERROR('#410: 33554431 << 12 === -4096. Actual: ' + (33554431 << 12)); -} - - -if (67108863 << 12 !== -4096) { - $ERROR('#411: 67108863 << 12 === -4096. Actual: ' + (67108863 << 12)); -} - - -if (134217727 << 12 !== -4096) { - $ERROR('#412: 134217727 << 12 === -4096. Actual: ' + (134217727 << 12)); -} - - -if (268435455 << 12 !== -4096) { - $ERROR('#413: 268435455 << 12 === -4096. Actual: ' + (268435455 << 12)); -} - - -if (536870911 << 12 !== -4096) { - $ERROR('#414: 536870911 << 12 === -4096. Actual: ' + (536870911 << 12)); -} - - -if (1073741823 << 12 !== -4096) { - $ERROR('#415: 1073741823 << 12 === -4096. Actual: ' + (1073741823 << 12)); -} - - -if (2147483647 << 12 !== -4096) { - $ERROR('#416: 2147483647 << 12 === -4096. Actual: ' + (2147483647 << 12)); -} - - -if (0 << 13 !== 0) { - $ERROR('#417: 0 << 13 === 0. Actual: ' + (0 << 13)); -} - - -if (1 << 13 !== 8192) { - $ERROR('#418: 1 << 13 === 8192. Actual: ' + (1 << 13)); -} - - -if (3 << 13 !== 24576) { - $ERROR('#419: 3 << 13 === 24576. Actual: ' + (3 << 13)); -} - - -if (7 << 13 !== 57344) { - $ERROR('#420: 7 << 13 === 57344. Actual: ' + (7 << 13)); -} - - -if (15 << 13 !== 122880) { - $ERROR('#421: 15 << 13 === 122880. Actual: ' + (15 << 13)); -} - - -if (31 << 13 !== 253952) { - $ERROR('#422: 31 << 13 === 253952. Actual: ' + (31 << 13)); -} - - -if (63 << 13 !== 516096) { - $ERROR('#423: 63 << 13 === 516096. Actual: ' + (63 << 13)); -} - - -if (127 << 13 !== 1040384) { - $ERROR('#424: 127 << 13 === 1040384. Actual: ' + (127 << 13)); -} - - -if (255 << 13 !== 2088960) { - $ERROR('#425: 255 << 13 === 2088960. Actual: ' + (255 << 13)); -} - - -if (511 << 13 !== 4186112) { - $ERROR('#426: 511 << 13 === 4186112. Actual: ' + (511 << 13)); -} - - -if (1023 << 13 !== 8380416) { - $ERROR('#427: 1023 << 13 === 8380416. Actual: ' + (1023 << 13)); -} - - -if (2047 << 13 !== 16769024) { - $ERROR('#428: 2047 << 13 === 16769024. Actual: ' + (2047 << 13)); -} - - -if (4095 << 13 !== 33546240) { - $ERROR('#429: 4095 << 13 === 33546240. Actual: ' + (4095 << 13)); -} - - -if (8191 << 13 !== 67100672) { - $ERROR('#430: 8191 << 13 === 67100672. Actual: ' + (8191 << 13)); -} - - -if (16383 << 13 !== 134209536) { - $ERROR('#431: 16383 << 13 === 134209536. Actual: ' + (16383 << 13)); -} - - -if (32767 << 13 !== 268427264) { - $ERROR('#432: 32767 << 13 === 268427264. Actual: ' + (32767 << 13)); -} - - -if (65535 << 13 !== 536862720) { - $ERROR('#433: 65535 << 13 === 536862720. Actual: ' + (65535 << 13)); -} - - -if (131071 << 13 !== 1073733632) { - $ERROR('#434: 131071 << 13 === 1073733632. Actual: ' + (131071 << 13)); -} - - -if (262143 << 13 !== 2147475456) { - $ERROR('#435: 262143 << 13 === 2147475456. Actual: ' + (262143 << 13)); -} - - -if (524287 << 13 !== -8192) { - $ERROR('#436: 524287 << 13 === -8192. Actual: ' + (524287 << 13)); -} - - -if (1048575 << 13 !== -8192) { - $ERROR('#437: 1048575 << 13 === -8192. Actual: ' + (1048575 << 13)); -} - - -if (2097151 << 13 !== -8192) { - $ERROR('#438: 2097151 << 13 === -8192. Actual: ' + (2097151 << 13)); -} - - -if (4194303 << 13 !== -8192) { - $ERROR('#439: 4194303 << 13 === -8192. Actual: ' + (4194303 << 13)); -} - - -if (8388607 << 13 !== -8192) { - $ERROR('#440: 8388607 << 13 === -8192. Actual: ' + (8388607 << 13)); -} - - -if (16777215 << 13 !== -8192) { - $ERROR('#441: 16777215 << 13 === -8192. Actual: ' + (16777215 << 13)); -} - - -if (33554431 << 13 !== -8192) { - $ERROR('#442: 33554431 << 13 === -8192. Actual: ' + (33554431 << 13)); -} - - -if (67108863 << 13 !== -8192) { - $ERROR('#443: 67108863 << 13 === -8192. Actual: ' + (67108863 << 13)); -} - - -if (134217727 << 13 !== -8192) { - $ERROR('#444: 134217727 << 13 === -8192. Actual: ' + (134217727 << 13)); -} - - -if (268435455 << 13 !== -8192) { - $ERROR('#445: 268435455 << 13 === -8192. Actual: ' + (268435455 << 13)); -} - - -if (536870911 << 13 !== -8192) { - $ERROR('#446: 536870911 << 13 === -8192. Actual: ' + (536870911 << 13)); -} - - -if (1073741823 << 13 !== -8192) { - $ERROR('#447: 1073741823 << 13 === -8192. Actual: ' + (1073741823 << 13)); -} - - -if (2147483647 << 13 !== -8192) { - $ERROR('#448: 2147483647 << 13 === -8192. Actual: ' + (2147483647 << 13)); -} - - -if (0 << 14 !== 0) { - $ERROR('#449: 0 << 14 === 0. Actual: ' + (0 << 14)); -} - - -if (1 << 14 !== 16384) { - $ERROR('#450: 1 << 14 === 16384. Actual: ' + (1 << 14)); -} - - -if (3 << 14 !== 49152) { - $ERROR('#451: 3 << 14 === 49152. Actual: ' + (3 << 14)); -} - - -if (7 << 14 !== 114688) { - $ERROR('#452: 7 << 14 === 114688. Actual: ' + (7 << 14)); -} - - -if (15 << 14 !== 245760) { - $ERROR('#453: 15 << 14 === 245760. Actual: ' + (15 << 14)); -} - - -if (31 << 14 !== 507904) { - $ERROR('#454: 31 << 14 === 507904. Actual: ' + (31 << 14)); -} - - -if (63 << 14 !== 1032192) { - $ERROR('#455: 63 << 14 === 1032192. Actual: ' + (63 << 14)); -} - - -if (127 << 14 !== 2080768) { - $ERROR('#456: 127 << 14 === 2080768. Actual: ' + (127 << 14)); -} - - -if (255 << 14 !== 4177920) { - $ERROR('#457: 255 << 14 === 4177920. Actual: ' + (255 << 14)); -} - - -if (511 << 14 !== 8372224) { - $ERROR('#458: 511 << 14 === 8372224. Actual: ' + (511 << 14)); -} - - -if (1023 << 14 !== 16760832) { - $ERROR('#459: 1023 << 14 === 16760832. Actual: ' + (1023 << 14)); -} - - -if (2047 << 14 !== 33538048) { - $ERROR('#460: 2047 << 14 === 33538048. Actual: ' + (2047 << 14)); -} - - -if (4095 << 14 !== 67092480) { - $ERROR('#461: 4095 << 14 === 67092480. Actual: ' + (4095 << 14)); -} - - -if (8191 << 14 !== 134201344) { - $ERROR('#462: 8191 << 14 === 134201344. Actual: ' + (8191 << 14)); -} - - -if (16383 << 14 !== 268419072) { - $ERROR('#463: 16383 << 14 === 268419072. Actual: ' + (16383 << 14)); -} - - -if (32767 << 14 !== 536854528) { - $ERROR('#464: 32767 << 14 === 536854528. Actual: ' + (32767 << 14)); -} - - -if (65535 << 14 !== 1073725440) { - $ERROR('#465: 65535 << 14 === 1073725440. Actual: ' + (65535 << 14)); -} - - -if (131071 << 14 !== 2147467264) { - $ERROR('#466: 131071 << 14 === 2147467264. Actual: ' + (131071 << 14)); -} - - -if (262143 << 14 !== -16384) { - $ERROR('#467: 262143 << 14 === -16384. Actual: ' + (262143 << 14)); -} - - -if (524287 << 14 !== -16384) { - $ERROR('#468: 524287 << 14 === -16384. Actual: ' + (524287 << 14)); -} - - -if (1048575 << 14 !== -16384) { - $ERROR('#469: 1048575 << 14 === -16384. Actual: ' + (1048575 << 14)); -} - - -if (2097151 << 14 !== -16384) { - $ERROR('#470: 2097151 << 14 === -16384. Actual: ' + (2097151 << 14)); -} - - -if (4194303 << 14 !== -16384) { - $ERROR('#471: 4194303 << 14 === -16384. Actual: ' + (4194303 << 14)); -} - - -if (8388607 << 14 !== -16384) { - $ERROR('#472: 8388607 << 14 === -16384. Actual: ' + (8388607 << 14)); -} - - -if (16777215 << 14 !== -16384) { - $ERROR('#473: 16777215 << 14 === -16384. Actual: ' + (16777215 << 14)); -} - - -if (33554431 << 14 !== -16384) { - $ERROR('#474: 33554431 << 14 === -16384. Actual: ' + (33554431 << 14)); -} - - -if (67108863 << 14 !== -16384) { - $ERROR('#475: 67108863 << 14 === -16384. Actual: ' + (67108863 << 14)); -} - - -if (134217727 << 14 !== -16384) { - $ERROR('#476: 134217727 << 14 === -16384. Actual: ' + (134217727 << 14)); -} - - -if (268435455 << 14 !== -16384) { - $ERROR('#477: 268435455 << 14 === -16384. Actual: ' + (268435455 << 14)); -} - - -if (536870911 << 14 !== -16384) { - $ERROR('#478: 536870911 << 14 === -16384. Actual: ' + (536870911 << 14)); -} - - -if (1073741823 << 14 !== -16384) { - $ERROR('#479: 1073741823 << 14 === -16384. Actual: ' + (1073741823 << 14)); -} - - -if (2147483647 << 14 !== -16384) { - $ERROR('#480: 2147483647 << 14 === -16384. Actual: ' + (2147483647 << 14)); -} - - -if (0 << 15 !== 0) { - $ERROR('#481: 0 << 15 === 0. Actual: ' + (0 << 15)); -} - - -if (1 << 15 !== 32768) { - $ERROR('#482: 1 << 15 === 32768. Actual: ' + (1 << 15)); -} - - -if (3 << 15 !== 98304) { - $ERROR('#483: 3 << 15 === 98304. Actual: ' + (3 << 15)); -} - - -if (7 << 15 !== 229376) { - $ERROR('#484: 7 << 15 === 229376. Actual: ' + (7 << 15)); -} - - -if (15 << 15 !== 491520) { - $ERROR('#485: 15 << 15 === 491520. Actual: ' + (15 << 15)); -} - - -if (31 << 15 !== 1015808) { - $ERROR('#486: 31 << 15 === 1015808. Actual: ' + (31 << 15)); -} - - -if (63 << 15 !== 2064384) { - $ERROR('#487: 63 << 15 === 2064384. Actual: ' + (63 << 15)); -} - - -if (127 << 15 !== 4161536) { - $ERROR('#488: 127 << 15 === 4161536. Actual: ' + (127 << 15)); -} - - -if (255 << 15 !== 8355840) { - $ERROR('#489: 255 << 15 === 8355840. Actual: ' + (255 << 15)); -} - - -if (511 << 15 !== 16744448) { - $ERROR('#490: 511 << 15 === 16744448. Actual: ' + (511 << 15)); -} - - -if (1023 << 15 !== 33521664) { - $ERROR('#491: 1023 << 15 === 33521664. Actual: ' + (1023 << 15)); -} - - -if (2047 << 15 !== 67076096) { - $ERROR('#492: 2047 << 15 === 67076096. Actual: ' + (2047 << 15)); -} - - -if (4095 << 15 !== 134184960) { - $ERROR('#493: 4095 << 15 === 134184960. Actual: ' + (4095 << 15)); -} - - -if (8191 << 15 !== 268402688) { - $ERROR('#494: 8191 << 15 === 268402688. Actual: ' + (8191 << 15)); -} - - -if (16383 << 15 !== 536838144) { - $ERROR('#495: 16383 << 15 === 536838144. Actual: ' + (16383 << 15)); -} - - -if (32767 << 15 !== 1073709056) { - $ERROR('#496: 32767 << 15 === 1073709056. Actual: ' + (32767 << 15)); -} - - -if (65535 << 15 !== 2147450880) { - $ERROR('#497: 65535 << 15 === 2147450880. Actual: ' + (65535 << 15)); -} - - -if (131071 << 15 !== -32768) { - $ERROR('#498: 131071 << 15 === -32768. Actual: ' + (131071 << 15)); -} - - -if (262143 << 15 !== -32768) { - $ERROR('#499: 262143 << 15 === -32768. Actual: ' + (262143 << 15)); -} - - -if (524287 << 15 !== -32768) { - $ERROR('#500: 524287 << 15 === -32768. Actual: ' + (524287 << 15)); -} - - -if (1048575 << 15 !== -32768) { - $ERROR('#501: 1048575 << 15 === -32768. Actual: ' + (1048575 << 15)); -} - - -if (2097151 << 15 !== -32768) { - $ERROR('#502: 2097151 << 15 === -32768. Actual: ' + (2097151 << 15)); -} - - -if (4194303 << 15 !== -32768) { - $ERROR('#503: 4194303 << 15 === -32768. Actual: ' + (4194303 << 15)); -} - - -if (8388607 << 15 !== -32768) { - $ERROR('#504: 8388607 << 15 === -32768. Actual: ' + (8388607 << 15)); -} - - -if (16777215 << 15 !== -32768) { - $ERROR('#505: 16777215 << 15 === -32768. Actual: ' + (16777215 << 15)); -} - - -if (33554431 << 15 !== -32768) { - $ERROR('#506: 33554431 << 15 === -32768. Actual: ' + (33554431 << 15)); -} - - -if (67108863 << 15 !== -32768) { - $ERROR('#507: 67108863 << 15 === -32768. Actual: ' + (67108863 << 15)); -} - - -if (134217727 << 15 !== -32768) { - $ERROR('#508: 134217727 << 15 === -32768. Actual: ' + (134217727 << 15)); -} - - -if (268435455 << 15 !== -32768) { - $ERROR('#509: 268435455 << 15 === -32768. Actual: ' + (268435455 << 15)); -} - - -if (536870911 << 15 !== -32768) { - $ERROR('#510: 536870911 << 15 === -32768. Actual: ' + (536870911 << 15)); -} - - -if (1073741823 << 15 !== -32768) { - $ERROR('#511: 1073741823 << 15 === -32768. Actual: ' + (1073741823 << 15)); -} - - -if (2147483647 << 15 !== -32768) { - $ERROR('#512: 2147483647 << 15 === -32768. Actual: ' + (2147483647 << 15)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A4_T4.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A4_T4.js deleted file mode 100644 index 93fbaf6dc..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A4_T4.js +++ /dev/null @@ -1,2570 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.1_A4_T4; - * @section: 11.7.1; - * @assertion: Check operator x << y in distinct points; - * @description: ShiftExpression = 2^n - 1, n = 16...31; - */ - -//CHECK - -if (0 << 16 !== 0) { - $ERROR('#513: 0 << 16 === 0. Actual: ' + (0 << 16)); -} - - -if (1 << 16 !== 65536) { - $ERROR('#514: 1 << 16 === 65536. Actual: ' + (1 << 16)); -} - - -if (3 << 16 !== 196608) { - $ERROR('#515: 3 << 16 === 196608. Actual: ' + (3 << 16)); -} - - -if (7 << 16 !== 458752) { - $ERROR('#516: 7 << 16 === 458752. Actual: ' + (7 << 16)); -} - - -if (15 << 16 !== 983040) { - $ERROR('#517: 15 << 16 === 983040. Actual: ' + (15 << 16)); -} - - -if (31 << 16 !== 2031616) { - $ERROR('#518: 31 << 16 === 2031616. Actual: ' + (31 << 16)); -} - - -if (63 << 16 !== 4128768) { - $ERROR('#519: 63 << 16 === 4128768. Actual: ' + (63 << 16)); -} - - -if (127 << 16 !== 8323072) { - $ERROR('#520: 127 << 16 === 8323072. Actual: ' + (127 << 16)); -} - - -if (255 << 16 !== 16711680) { - $ERROR('#521: 255 << 16 === 16711680. Actual: ' + (255 << 16)); -} - - -if (511 << 16 !== 33488896) { - $ERROR('#522: 511 << 16 === 33488896. Actual: ' + (511 << 16)); -} - - -if (1023 << 16 !== 67043328) { - $ERROR('#523: 1023 << 16 === 67043328. Actual: ' + (1023 << 16)); -} - - -if (2047 << 16 !== 134152192) { - $ERROR('#524: 2047 << 16 === 134152192. Actual: ' + (2047 << 16)); -} - - -if (4095 << 16 !== 268369920) { - $ERROR('#525: 4095 << 16 === 268369920. Actual: ' + (4095 << 16)); -} - - -if (8191 << 16 !== 536805376) { - $ERROR('#526: 8191 << 16 === 536805376. Actual: ' + (8191 << 16)); -} - - -if (16383 << 16 !== 1073676288) { - $ERROR('#527: 16383 << 16 === 1073676288. Actual: ' + (16383 << 16)); -} - - -if (32767 << 16 !== 2147418112) { - $ERROR('#528: 32767 << 16 === 2147418112. Actual: ' + (32767 << 16)); -} - - -if (65535 << 16 !== -65536) { - $ERROR('#529: 65535 << 16 === -65536. Actual: ' + (65535 << 16)); -} - - -if (131071 << 16 !== -65536) { - $ERROR('#530: 131071 << 16 === -65536. Actual: ' + (131071 << 16)); -} - - -if (262143 << 16 !== -65536) { - $ERROR('#531: 262143 << 16 === -65536. Actual: ' + (262143 << 16)); -} - - -if (524287 << 16 !== -65536) { - $ERROR('#532: 524287 << 16 === -65536. Actual: ' + (524287 << 16)); -} - - -if (1048575 << 16 !== -65536) { - $ERROR('#533: 1048575 << 16 === -65536. Actual: ' + (1048575 << 16)); -} - - -if (2097151 << 16 !== -65536) { - $ERROR('#534: 2097151 << 16 === -65536. Actual: ' + (2097151 << 16)); -} - - -if (4194303 << 16 !== -65536) { - $ERROR('#535: 4194303 << 16 === -65536. Actual: ' + (4194303 << 16)); -} - - -if (8388607 << 16 !== -65536) { - $ERROR('#536: 8388607 << 16 === -65536. Actual: ' + (8388607 << 16)); -} - - -if (16777215 << 16 !== -65536) { - $ERROR('#537: 16777215 << 16 === -65536. Actual: ' + (16777215 << 16)); -} - - -if (33554431 << 16 !== -65536) { - $ERROR('#538: 33554431 << 16 === -65536. Actual: ' + (33554431 << 16)); -} - - -if (67108863 << 16 !== -65536) { - $ERROR('#539: 67108863 << 16 === -65536. Actual: ' + (67108863 << 16)); -} - - -if (134217727 << 16 !== -65536) { - $ERROR('#540: 134217727 << 16 === -65536. Actual: ' + (134217727 << 16)); -} - - -if (268435455 << 16 !== -65536) { - $ERROR('#541: 268435455 << 16 === -65536. Actual: ' + (268435455 << 16)); -} - - -if (536870911 << 16 !== -65536) { - $ERROR('#542: 536870911 << 16 === -65536. Actual: ' + (536870911 << 16)); -} - - -if (1073741823 << 16 !== -65536) { - $ERROR('#543: 1073741823 << 16 === -65536. Actual: ' + (1073741823 << 16)); -} - - -if (2147483647 << 16 !== -65536) { - $ERROR('#544: 2147483647 << 16 === -65536. Actual: ' + (2147483647 << 16)); -} - - -if (0 << 17 !== 0) { - $ERROR('#545: 0 << 17 === 0. Actual: ' + (0 << 17)); -} - - -if (1 << 17 !== 131072) { - $ERROR('#546: 1 << 17 === 131072. Actual: ' + (1 << 17)); -} - - -if (3 << 17 !== 393216) { - $ERROR('#547: 3 << 17 === 393216. Actual: ' + (3 << 17)); -} - - -if (7 << 17 !== 917504) { - $ERROR('#548: 7 << 17 === 917504. Actual: ' + (7 << 17)); -} - - -if (15 << 17 !== 1966080) { - $ERROR('#549: 15 << 17 === 1966080. Actual: ' + (15 << 17)); -} - - -if (31 << 17 !== 4063232) { - $ERROR('#550: 31 << 17 === 4063232. Actual: ' + (31 << 17)); -} - - -if (63 << 17 !== 8257536) { - $ERROR('#551: 63 << 17 === 8257536. Actual: ' + (63 << 17)); -} - - -if (127 << 17 !== 16646144) { - $ERROR('#552: 127 << 17 === 16646144. Actual: ' + (127 << 17)); -} - - -if (255 << 17 !== 33423360) { - $ERROR('#553: 255 << 17 === 33423360. Actual: ' + (255 << 17)); -} - - -if (511 << 17 !== 66977792) { - $ERROR('#554: 511 << 17 === 66977792. Actual: ' + (511 << 17)); -} - - -if (1023 << 17 !== 134086656) { - $ERROR('#555: 1023 << 17 === 134086656. Actual: ' + (1023 << 17)); -} - - -if (2047 << 17 !== 268304384) { - $ERROR('#556: 2047 << 17 === 268304384. Actual: ' + (2047 << 17)); -} - - -if (4095 << 17 !== 536739840) { - $ERROR('#557: 4095 << 17 === 536739840. Actual: ' + (4095 << 17)); -} - - -if (8191 << 17 !== 1073610752) { - $ERROR('#558: 8191 << 17 === 1073610752. Actual: ' + (8191 << 17)); -} - - -if (16383 << 17 !== 2147352576) { - $ERROR('#559: 16383 << 17 === 2147352576. Actual: ' + (16383 << 17)); -} - - -if (32767 << 17 !== -131072) { - $ERROR('#560: 32767 << 17 === -131072. Actual: ' + (32767 << 17)); -} - - -if (65535 << 17 !== -131072) { - $ERROR('#561: 65535 << 17 === -131072. Actual: ' + (65535 << 17)); -} - - -if (131071 << 17 !== -131072) { - $ERROR('#562: 131071 << 17 === -131072. Actual: ' + (131071 << 17)); -} - - -if (262143 << 17 !== -131072) { - $ERROR('#563: 262143 << 17 === -131072. Actual: ' + (262143 << 17)); -} - - -if (524287 << 17 !== -131072) { - $ERROR('#564: 524287 << 17 === -131072. Actual: ' + (524287 << 17)); -} - - -if (1048575 << 17 !== -131072) { - $ERROR('#565: 1048575 << 17 === -131072. Actual: ' + (1048575 << 17)); -} - - -if (2097151 << 17 !== -131072) { - $ERROR('#566: 2097151 << 17 === -131072. Actual: ' + (2097151 << 17)); -} - - -if (4194303 << 17 !== -131072) { - $ERROR('#567: 4194303 << 17 === -131072. Actual: ' + (4194303 << 17)); -} - - -if (8388607 << 17 !== -131072) { - $ERROR('#568: 8388607 << 17 === -131072. Actual: ' + (8388607 << 17)); -} - - -if (16777215 << 17 !== -131072) { - $ERROR('#569: 16777215 << 17 === -131072. Actual: ' + (16777215 << 17)); -} - - -if (33554431 << 17 !== -131072) { - $ERROR('#570: 33554431 << 17 === -131072. Actual: ' + (33554431 << 17)); -} - - -if (67108863 << 17 !== -131072) { - $ERROR('#571: 67108863 << 17 === -131072. Actual: ' + (67108863 << 17)); -} - - -if (134217727 << 17 !== -131072) { - $ERROR('#572: 134217727 << 17 === -131072. Actual: ' + (134217727 << 17)); -} - - -if (268435455 << 17 !== -131072) { - $ERROR('#573: 268435455 << 17 === -131072. Actual: ' + (268435455 << 17)); -} - - -if (536870911 << 17 !== -131072) { - $ERROR('#574: 536870911 << 17 === -131072. Actual: ' + (536870911 << 17)); -} - - -if (1073741823 << 17 !== -131072) { - $ERROR('#575: 1073741823 << 17 === -131072. Actual: ' + (1073741823 << 17)); -} - - -if (2147483647 << 17 !== -131072) { - $ERROR('#576: 2147483647 << 17 === -131072. Actual: ' + (2147483647 << 17)); -} - - -if (0 << 18 !== 0) { - $ERROR('#577: 0 << 18 === 0. Actual: ' + (0 << 18)); -} - - -if (1 << 18 !== 262144) { - $ERROR('#578: 1 << 18 === 262144. Actual: ' + (1 << 18)); -} - - -if (3 << 18 !== 786432) { - $ERROR('#579: 3 << 18 === 786432. Actual: ' + (3 << 18)); -} - - -if (7 << 18 !== 1835008) { - $ERROR('#580: 7 << 18 === 1835008. Actual: ' + (7 << 18)); -} - - -if (15 << 18 !== 3932160) { - $ERROR('#581: 15 << 18 === 3932160. Actual: ' + (15 << 18)); -} - - -if (31 << 18 !== 8126464) { - $ERROR('#582: 31 << 18 === 8126464. Actual: ' + (31 << 18)); -} - - -if (63 << 18 !== 16515072) { - $ERROR('#583: 63 << 18 === 16515072. Actual: ' + (63 << 18)); -} - - -if (127 << 18 !== 33292288) { - $ERROR('#584: 127 << 18 === 33292288. Actual: ' + (127 << 18)); -} - - -if (255 << 18 !== 66846720) { - $ERROR('#585: 255 << 18 === 66846720. Actual: ' + (255 << 18)); -} - - -if (511 << 18 !== 133955584) { - $ERROR('#586: 511 << 18 === 133955584. Actual: ' + (511 << 18)); -} - - -if (1023 << 18 !== 268173312) { - $ERROR('#587: 1023 << 18 === 268173312. Actual: ' + (1023 << 18)); -} - - -if (2047 << 18 !== 536608768) { - $ERROR('#588: 2047 << 18 === 536608768. Actual: ' + (2047 << 18)); -} - - -if (4095 << 18 !== 1073479680) { - $ERROR('#589: 4095 << 18 === 1073479680. Actual: ' + (4095 << 18)); -} - - -if (8191 << 18 !== 2147221504) { - $ERROR('#590: 8191 << 18 === 2147221504. Actual: ' + (8191 << 18)); -} - - -if (16383 << 18 !== -262144) { - $ERROR('#591: 16383 << 18 === -262144. Actual: ' + (16383 << 18)); -} - - -if (32767 << 18 !== -262144) { - $ERROR('#592: 32767 << 18 === -262144. Actual: ' + (32767 << 18)); -} - - -if (65535 << 18 !== -262144) { - $ERROR('#593: 65535 << 18 === -262144. Actual: ' + (65535 << 18)); -} - - -if (131071 << 18 !== -262144) { - $ERROR('#594: 131071 << 18 === -262144. Actual: ' + (131071 << 18)); -} - - -if (262143 << 18 !== -262144) { - $ERROR('#595: 262143 << 18 === -262144. Actual: ' + (262143 << 18)); -} - - -if (524287 << 18 !== -262144) { - $ERROR('#596: 524287 << 18 === -262144. Actual: ' + (524287 << 18)); -} - - -if (1048575 << 18 !== -262144) { - $ERROR('#597: 1048575 << 18 === -262144. Actual: ' + (1048575 << 18)); -} - - -if (2097151 << 18 !== -262144) { - $ERROR('#598: 2097151 << 18 === -262144. Actual: ' + (2097151 << 18)); -} - - -if (4194303 << 18 !== -262144) { - $ERROR('#599: 4194303 << 18 === -262144. Actual: ' + (4194303 << 18)); -} - - -if (8388607 << 18 !== -262144) { - $ERROR('#600: 8388607 << 18 === -262144. Actual: ' + (8388607 << 18)); -} - - -if (16777215 << 18 !== -262144) { - $ERROR('#601: 16777215 << 18 === -262144. Actual: ' + (16777215 << 18)); -} - - -if (33554431 << 18 !== -262144) { - $ERROR('#602: 33554431 << 18 === -262144. Actual: ' + (33554431 << 18)); -} - - -if (67108863 << 18 !== -262144) { - $ERROR('#603: 67108863 << 18 === -262144. Actual: ' + (67108863 << 18)); -} - - -if (134217727 << 18 !== -262144) { - $ERROR('#604: 134217727 << 18 === -262144. Actual: ' + (134217727 << 18)); -} - - -if (268435455 << 18 !== -262144) { - $ERROR('#605: 268435455 << 18 === -262144. Actual: ' + (268435455 << 18)); -} - - -if (536870911 << 18 !== -262144) { - $ERROR('#606: 536870911 << 18 === -262144. Actual: ' + (536870911 << 18)); -} - - -if (1073741823 << 18 !== -262144) { - $ERROR('#607: 1073741823 << 18 === -262144. Actual: ' + (1073741823 << 18)); -} - - -if (2147483647 << 18 !== -262144) { - $ERROR('#608: 2147483647 << 18 === -262144. Actual: ' + (2147483647 << 18)); -} - - -if (0 << 19 !== 0) { - $ERROR('#609: 0 << 19 === 0. Actual: ' + (0 << 19)); -} - - -if (1 << 19 !== 524288) { - $ERROR('#610: 1 << 19 === 524288. Actual: ' + (1 << 19)); -} - - -if (3 << 19 !== 1572864) { - $ERROR('#611: 3 << 19 === 1572864. Actual: ' + (3 << 19)); -} - - -if (7 << 19 !== 3670016) { - $ERROR('#612: 7 << 19 === 3670016. Actual: ' + (7 << 19)); -} - - -if (15 << 19 !== 7864320) { - $ERROR('#613: 15 << 19 === 7864320. Actual: ' + (15 << 19)); -} - - -if (31 << 19 !== 16252928) { - $ERROR('#614: 31 << 19 === 16252928. Actual: ' + (31 << 19)); -} - - -if (63 << 19 !== 33030144) { - $ERROR('#615: 63 << 19 === 33030144. Actual: ' + (63 << 19)); -} - - -if (127 << 19 !== 66584576) { - $ERROR('#616: 127 << 19 === 66584576. Actual: ' + (127 << 19)); -} - - -if (255 << 19 !== 133693440) { - $ERROR('#617: 255 << 19 === 133693440. Actual: ' + (255 << 19)); -} - - -if (511 << 19 !== 267911168) { - $ERROR('#618: 511 << 19 === 267911168. Actual: ' + (511 << 19)); -} - - -if (1023 << 19 !== 536346624) { - $ERROR('#619: 1023 << 19 === 536346624. Actual: ' + (1023 << 19)); -} - - -if (2047 << 19 !== 1073217536) { - $ERROR('#620: 2047 << 19 === 1073217536. Actual: ' + (2047 << 19)); -} - - -if (4095 << 19 !== 2146959360) { - $ERROR('#621: 4095 << 19 === 2146959360. Actual: ' + (4095 << 19)); -} - - -if (8191 << 19 !== -524288) { - $ERROR('#622: 8191 << 19 === -524288. Actual: ' + (8191 << 19)); -} - - -if (16383 << 19 !== -524288) { - $ERROR('#623: 16383 << 19 === -524288. Actual: ' + (16383 << 19)); -} - - -if (32767 << 19 !== -524288) { - $ERROR('#624: 32767 << 19 === -524288. Actual: ' + (32767 << 19)); -} - - -if (65535 << 19 !== -524288) { - $ERROR('#625: 65535 << 19 === -524288. Actual: ' + (65535 << 19)); -} - - -if (131071 << 19 !== -524288) { - $ERROR('#626: 131071 << 19 === -524288. Actual: ' + (131071 << 19)); -} - - -if (262143 << 19 !== -524288) { - $ERROR('#627: 262143 << 19 === -524288. Actual: ' + (262143 << 19)); -} - - -if (524287 << 19 !== -524288) { - $ERROR('#628: 524287 << 19 === -524288. Actual: ' + (524287 << 19)); -} - - -if (1048575 << 19 !== -524288) { - $ERROR('#629: 1048575 << 19 === -524288. Actual: ' + (1048575 << 19)); -} - - -if (2097151 << 19 !== -524288) { - $ERROR('#630: 2097151 << 19 === -524288. Actual: ' + (2097151 << 19)); -} - - -if (4194303 << 19 !== -524288) { - $ERROR('#631: 4194303 << 19 === -524288. Actual: ' + (4194303 << 19)); -} - - -if (8388607 << 19 !== -524288) { - $ERROR('#632: 8388607 << 19 === -524288. Actual: ' + (8388607 << 19)); -} - - -if (16777215 << 19 !== -524288) { - $ERROR('#633: 16777215 << 19 === -524288. Actual: ' + (16777215 << 19)); -} - - -if (33554431 << 19 !== -524288) { - $ERROR('#634: 33554431 << 19 === -524288. Actual: ' + (33554431 << 19)); -} - - -if (67108863 << 19 !== -524288) { - $ERROR('#635: 67108863 << 19 === -524288. Actual: ' + (67108863 << 19)); -} - - -if (134217727 << 19 !== -524288) { - $ERROR('#636: 134217727 << 19 === -524288. Actual: ' + (134217727 << 19)); -} - - -if (268435455 << 19 !== -524288) { - $ERROR('#637: 268435455 << 19 === -524288. Actual: ' + (268435455 << 19)); -} - - -if (536870911 << 19 !== -524288) { - $ERROR('#638: 536870911 << 19 === -524288. Actual: ' + (536870911 << 19)); -} - - -if (1073741823 << 19 !== -524288) { - $ERROR('#639: 1073741823 << 19 === -524288. Actual: ' + (1073741823 << 19)); -} - - -if (2147483647 << 19 !== -524288) { - $ERROR('#640: 2147483647 << 19 === -524288. Actual: ' + (2147483647 << 19)); -} - - -if (0 << 20 !== 0) { - $ERROR('#641: 0 << 20 === 0. Actual: ' + (0 << 20)); -} - - -if (1 << 20 !== 1048576) { - $ERROR('#642: 1 << 20 === 1048576. Actual: ' + (1 << 20)); -} - - -if (3 << 20 !== 3145728) { - $ERROR('#643: 3 << 20 === 3145728. Actual: ' + (3 << 20)); -} - - -if (7 << 20 !== 7340032) { - $ERROR('#644: 7 << 20 === 7340032. Actual: ' + (7 << 20)); -} - - -if (15 << 20 !== 15728640) { - $ERROR('#645: 15 << 20 === 15728640. Actual: ' + (15 << 20)); -} - - -if (31 << 20 !== 32505856) { - $ERROR('#646: 31 << 20 === 32505856. Actual: ' + (31 << 20)); -} - - -if (63 << 20 !== 66060288) { - $ERROR('#647: 63 << 20 === 66060288. Actual: ' + (63 << 20)); -} - - -if (127 << 20 !== 133169152) { - $ERROR('#648: 127 << 20 === 133169152. Actual: ' + (127 << 20)); -} - - -if (255 << 20 !== 267386880) { - $ERROR('#649: 255 << 20 === 267386880. Actual: ' + (255 << 20)); -} - - -if (511 << 20 !== 535822336) { - $ERROR('#650: 511 << 20 === 535822336. Actual: ' + (511 << 20)); -} - - -if (1023 << 20 !== 1072693248) { - $ERROR('#651: 1023 << 20 === 1072693248. Actual: ' + (1023 << 20)); -} - - -if (2047 << 20 !== 2146435072) { - $ERROR('#652: 2047 << 20 === 2146435072. Actual: ' + (2047 << 20)); -} - - -if (4095 << 20 !== -1048576) { - $ERROR('#653: 4095 << 20 === -1048576. Actual: ' + (4095 << 20)); -} - - -if (8191 << 20 !== -1048576) { - $ERROR('#654: 8191 << 20 === -1048576. Actual: ' + (8191 << 20)); -} - - -if (16383 << 20 !== -1048576) { - $ERROR('#655: 16383 << 20 === -1048576. Actual: ' + (16383 << 20)); -} - - -if (32767 << 20 !== -1048576) { - $ERROR('#656: 32767 << 20 === -1048576. Actual: ' + (32767 << 20)); -} - - -if (65535 << 20 !== -1048576) { - $ERROR('#657: 65535 << 20 === -1048576. Actual: ' + (65535 << 20)); -} - - -if (131071 << 20 !== -1048576) { - $ERROR('#658: 131071 << 20 === -1048576. Actual: ' + (131071 << 20)); -} - - -if (262143 << 20 !== -1048576) { - $ERROR('#659: 262143 << 20 === -1048576. Actual: ' + (262143 << 20)); -} - - -if (524287 << 20 !== -1048576) { - $ERROR('#660: 524287 << 20 === -1048576. Actual: ' + (524287 << 20)); -} - - -if (1048575 << 20 !== -1048576) { - $ERROR('#661: 1048575 << 20 === -1048576. Actual: ' + (1048575 << 20)); -} - - -if (2097151 << 20 !== -1048576) { - $ERROR('#662: 2097151 << 20 === -1048576. Actual: ' + (2097151 << 20)); -} - - -if (4194303 << 20 !== -1048576) { - $ERROR('#663: 4194303 << 20 === -1048576. Actual: ' + (4194303 << 20)); -} - - -if (8388607 << 20 !== -1048576) { - $ERROR('#664: 8388607 << 20 === -1048576. Actual: ' + (8388607 << 20)); -} - - -if (16777215 << 20 !== -1048576) { - $ERROR('#665: 16777215 << 20 === -1048576. Actual: ' + (16777215 << 20)); -} - - -if (33554431 << 20 !== -1048576) { - $ERROR('#666: 33554431 << 20 === -1048576. Actual: ' + (33554431 << 20)); -} - - -if (67108863 << 20 !== -1048576) { - $ERROR('#667: 67108863 << 20 === -1048576. Actual: ' + (67108863 << 20)); -} - - -if (134217727 << 20 !== -1048576) { - $ERROR('#668: 134217727 << 20 === -1048576. Actual: ' + (134217727 << 20)); -} - - -if (268435455 << 20 !== -1048576) { - $ERROR('#669: 268435455 << 20 === -1048576. Actual: ' + (268435455 << 20)); -} - - -if (536870911 << 20 !== -1048576) { - $ERROR('#670: 536870911 << 20 === -1048576. Actual: ' + (536870911 << 20)); -} - - -if (1073741823 << 20 !== -1048576) { - $ERROR('#671: 1073741823 << 20 === -1048576. Actual: ' + (1073741823 << 20)); -} - - -if (2147483647 << 20 !== -1048576) { - $ERROR('#672: 2147483647 << 20 === -1048576. Actual: ' + (2147483647 << 20)); -} - - -if (0 << 21 !== 0) { - $ERROR('#673: 0 << 21 === 0. Actual: ' + (0 << 21)); -} - - -if (1 << 21 !== 2097152) { - $ERROR('#674: 1 << 21 === 2097152. Actual: ' + (1 << 21)); -} - - -if (3 << 21 !== 6291456) { - $ERROR('#675: 3 << 21 === 6291456. Actual: ' + (3 << 21)); -} - - -if (7 << 21 !== 14680064) { - $ERROR('#676: 7 << 21 === 14680064. Actual: ' + (7 << 21)); -} - - -if (15 << 21 !== 31457280) { - $ERROR('#677: 15 << 21 === 31457280. Actual: ' + (15 << 21)); -} - - -if (31 << 21 !== 65011712) { - $ERROR('#678: 31 << 21 === 65011712. Actual: ' + (31 << 21)); -} - - -if (63 << 21 !== 132120576) { - $ERROR('#679: 63 << 21 === 132120576. Actual: ' + (63 << 21)); -} - - -if (127 << 21 !== 266338304) { - $ERROR('#680: 127 << 21 === 266338304. Actual: ' + (127 << 21)); -} - - -if (255 << 21 !== 534773760) { - $ERROR('#681: 255 << 21 === 534773760. Actual: ' + (255 << 21)); -} - - -if (511 << 21 !== 1071644672) { - $ERROR('#682: 511 << 21 === 1071644672. Actual: ' + (511 << 21)); -} - - -if (1023 << 21 !== 2145386496) { - $ERROR('#683: 1023 << 21 === 2145386496. Actual: ' + (1023 << 21)); -} - - -if (2047 << 21 !== -2097152) { - $ERROR('#684: 2047 << 21 === -2097152. Actual: ' + (2047 << 21)); -} - - -if (4095 << 21 !== -2097152) { - $ERROR('#685: 4095 << 21 === -2097152. Actual: ' + (4095 << 21)); -} - - -if (8191 << 21 !== -2097152) { - $ERROR('#686: 8191 << 21 === -2097152. Actual: ' + (8191 << 21)); -} - - -if (16383 << 21 !== -2097152) { - $ERROR('#687: 16383 << 21 === -2097152. Actual: ' + (16383 << 21)); -} - - -if (32767 << 21 !== -2097152) { - $ERROR('#688: 32767 << 21 === -2097152. Actual: ' + (32767 << 21)); -} - - -if (65535 << 21 !== -2097152) { - $ERROR('#689: 65535 << 21 === -2097152. Actual: ' + (65535 << 21)); -} - - -if (131071 << 21 !== -2097152) { - $ERROR('#690: 131071 << 21 === -2097152. Actual: ' + (131071 << 21)); -} - - -if (262143 << 21 !== -2097152) { - $ERROR('#691: 262143 << 21 === -2097152. Actual: ' + (262143 << 21)); -} - - -if (524287 << 21 !== -2097152) { - $ERROR('#692: 524287 << 21 === -2097152. Actual: ' + (524287 << 21)); -} - - -if (1048575 << 21 !== -2097152) { - $ERROR('#693: 1048575 << 21 === -2097152. Actual: ' + (1048575 << 21)); -} - - -if (2097151 << 21 !== -2097152) { - $ERROR('#694: 2097151 << 21 === -2097152. Actual: ' + (2097151 << 21)); -} - - -if (4194303 << 21 !== -2097152) { - $ERROR('#695: 4194303 << 21 === -2097152. Actual: ' + (4194303 << 21)); -} - - -if (8388607 << 21 !== -2097152) { - $ERROR('#696: 8388607 << 21 === -2097152. Actual: ' + (8388607 << 21)); -} - - -if (16777215 << 21 !== -2097152) { - $ERROR('#697: 16777215 << 21 === -2097152. Actual: ' + (16777215 << 21)); -} - - -if (33554431 << 21 !== -2097152) { - $ERROR('#698: 33554431 << 21 === -2097152. Actual: ' + (33554431 << 21)); -} - - -if (67108863 << 21 !== -2097152) { - $ERROR('#699: 67108863 << 21 === -2097152. Actual: ' + (67108863 << 21)); -} - - -if (134217727 << 21 !== -2097152) { - $ERROR('#700: 134217727 << 21 === -2097152. Actual: ' + (134217727 << 21)); -} - - -if (268435455 << 21 !== -2097152) { - $ERROR('#701: 268435455 << 21 === -2097152. Actual: ' + (268435455 << 21)); -} - - -if (536870911 << 21 !== -2097152) { - $ERROR('#702: 536870911 << 21 === -2097152. Actual: ' + (536870911 << 21)); -} - - -if (1073741823 << 21 !== -2097152) { - $ERROR('#703: 1073741823 << 21 === -2097152. Actual: ' + (1073741823 << 21)); -} - - -if (2147483647 << 21 !== -2097152) { - $ERROR('#704: 2147483647 << 21 === -2097152. Actual: ' + (2147483647 << 21)); -} - - -if (0 << 22 !== 0) { - $ERROR('#705: 0 << 22 === 0. Actual: ' + (0 << 22)); -} - - -if (1 << 22 !== 4194304) { - $ERROR('#706: 1 << 22 === 4194304. Actual: ' + (1 << 22)); -} - - -if (3 << 22 !== 12582912) { - $ERROR('#707: 3 << 22 === 12582912. Actual: ' + (3 << 22)); -} - - -if (7 << 22 !== 29360128) { - $ERROR('#708: 7 << 22 === 29360128. Actual: ' + (7 << 22)); -} - - -if (15 << 22 !== 62914560) { - $ERROR('#709: 15 << 22 === 62914560. Actual: ' + (15 << 22)); -} - - -if (31 << 22 !== 130023424) { - $ERROR('#710: 31 << 22 === 130023424. Actual: ' + (31 << 22)); -} - - -if (63 << 22 !== 264241152) { - $ERROR('#711: 63 << 22 === 264241152. Actual: ' + (63 << 22)); -} - - -if (127 << 22 !== 532676608) { - $ERROR('#712: 127 << 22 === 532676608. Actual: ' + (127 << 22)); -} - - -if (255 << 22 !== 1069547520) { - $ERROR('#713: 255 << 22 === 1069547520. Actual: ' + (255 << 22)); -} - - -if (511 << 22 !== 2143289344) { - $ERROR('#714: 511 << 22 === 2143289344. Actual: ' + (511 << 22)); -} - - -if (1023 << 22 !== -4194304) { - $ERROR('#715: 1023 << 22 === -4194304. Actual: ' + (1023 << 22)); -} - - -if (2047 << 22 !== -4194304) { - $ERROR('#716: 2047 << 22 === -4194304. Actual: ' + (2047 << 22)); -} - - -if (4095 << 22 !== -4194304) { - $ERROR('#717: 4095 << 22 === -4194304. Actual: ' + (4095 << 22)); -} - - -if (8191 << 22 !== -4194304) { - $ERROR('#718: 8191 << 22 === -4194304. Actual: ' + (8191 << 22)); -} - - -if (16383 << 22 !== -4194304) { - $ERROR('#719: 16383 << 22 === -4194304. Actual: ' + (16383 << 22)); -} - - -if (32767 << 22 !== -4194304) { - $ERROR('#720: 32767 << 22 === -4194304. Actual: ' + (32767 << 22)); -} - - -if (65535 << 22 !== -4194304) { - $ERROR('#721: 65535 << 22 === -4194304. Actual: ' + (65535 << 22)); -} - - -if (131071 << 22 !== -4194304) { - $ERROR('#722: 131071 << 22 === -4194304. Actual: ' + (131071 << 22)); -} - - -if (262143 << 22 !== -4194304) { - $ERROR('#723: 262143 << 22 === -4194304. Actual: ' + (262143 << 22)); -} - - -if (524287 << 22 !== -4194304) { - $ERROR('#724: 524287 << 22 === -4194304. Actual: ' + (524287 << 22)); -} - - -if (1048575 << 22 !== -4194304) { - $ERROR('#725: 1048575 << 22 === -4194304. Actual: ' + (1048575 << 22)); -} - - -if (2097151 << 22 !== -4194304) { - $ERROR('#726: 2097151 << 22 === -4194304. Actual: ' + (2097151 << 22)); -} - - -if (4194303 << 22 !== -4194304) { - $ERROR('#727: 4194303 << 22 === -4194304. Actual: ' + (4194303 << 22)); -} - - -if (8388607 << 22 !== -4194304) { - $ERROR('#728: 8388607 << 22 === -4194304. Actual: ' + (8388607 << 22)); -} - - -if (16777215 << 22 !== -4194304) { - $ERROR('#729: 16777215 << 22 === -4194304. Actual: ' + (16777215 << 22)); -} - - -if (33554431 << 22 !== -4194304) { - $ERROR('#730: 33554431 << 22 === -4194304. Actual: ' + (33554431 << 22)); -} - - -if (67108863 << 22 !== -4194304) { - $ERROR('#731: 67108863 << 22 === -4194304. Actual: ' + (67108863 << 22)); -} - - -if (134217727 << 22 !== -4194304) { - $ERROR('#732: 134217727 << 22 === -4194304. Actual: ' + (134217727 << 22)); -} - - -if (268435455 << 22 !== -4194304) { - $ERROR('#733: 268435455 << 22 === -4194304. Actual: ' + (268435455 << 22)); -} - - -if (536870911 << 22 !== -4194304) { - $ERROR('#734: 536870911 << 22 === -4194304. Actual: ' + (536870911 << 22)); -} - - -if (1073741823 << 22 !== -4194304) { - $ERROR('#735: 1073741823 << 22 === -4194304. Actual: ' + (1073741823 << 22)); -} - - -if (2147483647 << 22 !== -4194304) { - $ERROR('#736: 2147483647 << 22 === -4194304. Actual: ' + (2147483647 << 22)); -} - - -if (0 << 23 !== 0) { - $ERROR('#737: 0 << 23 === 0. Actual: ' + (0 << 23)); -} - - -if (1 << 23 !== 8388608) { - $ERROR('#738: 1 << 23 === 8388608. Actual: ' + (1 << 23)); -} - - -if (3 << 23 !== 25165824) { - $ERROR('#739: 3 << 23 === 25165824. Actual: ' + (3 << 23)); -} - - -if (7 << 23 !== 58720256) { - $ERROR('#740: 7 << 23 === 58720256. Actual: ' + (7 << 23)); -} - - -if (15 << 23 !== 125829120) { - $ERROR('#741: 15 << 23 === 125829120. Actual: ' + (15 << 23)); -} - - -if (31 << 23 !== 260046848) { - $ERROR('#742: 31 << 23 === 260046848. Actual: ' + (31 << 23)); -} - - -if (63 << 23 !== 528482304) { - $ERROR('#743: 63 << 23 === 528482304. Actual: ' + (63 << 23)); -} - - -if (127 << 23 !== 1065353216) { - $ERROR('#744: 127 << 23 === 1065353216. Actual: ' + (127 << 23)); -} - - -if (255 << 23 !== 2139095040) { - $ERROR('#745: 255 << 23 === 2139095040. Actual: ' + (255 << 23)); -} - - -if (511 << 23 !== -8388608) { - $ERROR('#746: 511 << 23 === -8388608. Actual: ' + (511 << 23)); -} - - -if (1023 << 23 !== -8388608) { - $ERROR('#747: 1023 << 23 === -8388608. Actual: ' + (1023 << 23)); -} - - -if (2047 << 23 !== -8388608) { - $ERROR('#748: 2047 << 23 === -8388608. Actual: ' + (2047 << 23)); -} - - -if (4095 << 23 !== -8388608) { - $ERROR('#749: 4095 << 23 === -8388608. Actual: ' + (4095 << 23)); -} - - -if (8191 << 23 !== -8388608) { - $ERROR('#750: 8191 << 23 === -8388608. Actual: ' + (8191 << 23)); -} - - -if (16383 << 23 !== -8388608) { - $ERROR('#751: 16383 << 23 === -8388608. Actual: ' + (16383 << 23)); -} - - -if (32767 << 23 !== -8388608) { - $ERROR('#752: 32767 << 23 === -8388608. Actual: ' + (32767 << 23)); -} - - -if (65535 << 23 !== -8388608) { - $ERROR('#753: 65535 << 23 === -8388608. Actual: ' + (65535 << 23)); -} - - -if (131071 << 23 !== -8388608) { - $ERROR('#754: 131071 << 23 === -8388608. Actual: ' + (131071 << 23)); -} - - -if (262143 << 23 !== -8388608) { - $ERROR('#755: 262143 << 23 === -8388608. Actual: ' + (262143 << 23)); -} - - -if (524287 << 23 !== -8388608) { - $ERROR('#756: 524287 << 23 === -8388608. Actual: ' + (524287 << 23)); -} - - -if (1048575 << 23 !== -8388608) { - $ERROR('#757: 1048575 << 23 === -8388608. Actual: ' + (1048575 << 23)); -} - - -if (2097151 << 23 !== -8388608) { - $ERROR('#758: 2097151 << 23 === -8388608. Actual: ' + (2097151 << 23)); -} - - -if (4194303 << 23 !== -8388608) { - $ERROR('#759: 4194303 << 23 === -8388608. Actual: ' + (4194303 << 23)); -} - - -if (8388607 << 23 !== -8388608) { - $ERROR('#760: 8388607 << 23 === -8388608. Actual: ' + (8388607 << 23)); -} - - -if (16777215 << 23 !== -8388608) { - $ERROR('#761: 16777215 << 23 === -8388608. Actual: ' + (16777215 << 23)); -} - - -if (33554431 << 23 !== -8388608) { - $ERROR('#762: 33554431 << 23 === -8388608. Actual: ' + (33554431 << 23)); -} - - -if (67108863 << 23 !== -8388608) { - $ERROR('#763: 67108863 << 23 === -8388608. Actual: ' + (67108863 << 23)); -} - - -if (134217727 << 23 !== -8388608) { - $ERROR('#764: 134217727 << 23 === -8388608. Actual: ' + (134217727 << 23)); -} - - -if (268435455 << 23 !== -8388608) { - $ERROR('#765: 268435455 << 23 === -8388608. Actual: ' + (268435455 << 23)); -} - - -if (536870911 << 23 !== -8388608) { - $ERROR('#766: 536870911 << 23 === -8388608. Actual: ' + (536870911 << 23)); -} - - -if (1073741823 << 23 !== -8388608) { - $ERROR('#767: 1073741823 << 23 === -8388608. Actual: ' + (1073741823 << 23)); -} - - -if (2147483647 << 23 !== -8388608) { - $ERROR('#768: 2147483647 << 23 === -8388608. Actual: ' + (2147483647 << 23)); -} - - -if (0 << 24 !== 0) { - $ERROR('#769: 0 << 24 === 0. Actual: ' + (0 << 24)); -} - - -if (1 << 24 !== 16777216) { - $ERROR('#770: 1 << 24 === 16777216. Actual: ' + (1 << 24)); -} - - -if (3 << 24 !== 50331648) { - $ERROR('#771: 3 << 24 === 50331648. Actual: ' + (3 << 24)); -} - - -if (7 << 24 !== 117440512) { - $ERROR('#772: 7 << 24 === 117440512. Actual: ' + (7 << 24)); -} - - -if (15 << 24 !== 251658240) { - $ERROR('#773: 15 << 24 === 251658240. Actual: ' + (15 << 24)); -} - - -if (31 << 24 !== 520093696) { - $ERROR('#774: 31 << 24 === 520093696. Actual: ' + (31 << 24)); -} - - -if (63 << 24 !== 1056964608) { - $ERROR('#775: 63 << 24 === 1056964608. Actual: ' + (63 << 24)); -} - - -if (127 << 24 !== 2130706432) { - $ERROR('#776: 127 << 24 === 2130706432. Actual: ' + (127 << 24)); -} - - -if (255 << 24 !== -16777216) { - $ERROR('#777: 255 << 24 === -16777216. Actual: ' + (255 << 24)); -} - - -if (511 << 24 !== -16777216) { - $ERROR('#778: 511 << 24 === -16777216. Actual: ' + (511 << 24)); -} - - -if (1023 << 24 !== -16777216) { - $ERROR('#779: 1023 << 24 === -16777216. Actual: ' + (1023 << 24)); -} - - -if (2047 << 24 !== -16777216) { - $ERROR('#780: 2047 << 24 === -16777216. Actual: ' + (2047 << 24)); -} - - -if (4095 << 24 !== -16777216) { - $ERROR('#781: 4095 << 24 === -16777216. Actual: ' + (4095 << 24)); -} - - -if (8191 << 24 !== -16777216) { - $ERROR('#782: 8191 << 24 === -16777216. Actual: ' + (8191 << 24)); -} - - -if (16383 << 24 !== -16777216) { - $ERROR('#783: 16383 << 24 === -16777216. Actual: ' + (16383 << 24)); -} - - -if (32767 << 24 !== -16777216) { - $ERROR('#784: 32767 << 24 === -16777216. Actual: ' + (32767 << 24)); -} - - -if (65535 << 24 !== -16777216) { - $ERROR('#785: 65535 << 24 === -16777216. Actual: ' + (65535 << 24)); -} - - -if (131071 << 24 !== -16777216) { - $ERROR('#786: 131071 << 24 === -16777216. Actual: ' + (131071 << 24)); -} - - -if (262143 << 24 !== -16777216) { - $ERROR('#787: 262143 << 24 === -16777216. Actual: ' + (262143 << 24)); -} - - -if (524287 << 24 !== -16777216) { - $ERROR('#788: 524287 << 24 === -16777216. Actual: ' + (524287 << 24)); -} - - -if (1048575 << 24 !== -16777216) { - $ERROR('#789: 1048575 << 24 === -16777216. Actual: ' + (1048575 << 24)); -} - - -if (2097151 << 24 !== -16777216) { - $ERROR('#790: 2097151 << 24 === -16777216. Actual: ' + (2097151 << 24)); -} - - -if (4194303 << 24 !== -16777216) { - $ERROR('#791: 4194303 << 24 === -16777216. Actual: ' + (4194303 << 24)); -} - - -if (8388607 << 24 !== -16777216) { - $ERROR('#792: 8388607 << 24 === -16777216. Actual: ' + (8388607 << 24)); -} - - -if (16777215 << 24 !== -16777216) { - $ERROR('#793: 16777215 << 24 === -16777216. Actual: ' + (16777215 << 24)); -} - - -if (33554431 << 24 !== -16777216) { - $ERROR('#794: 33554431 << 24 === -16777216. Actual: ' + (33554431 << 24)); -} - - -if (67108863 << 24 !== -16777216) { - $ERROR('#795: 67108863 << 24 === -16777216. Actual: ' + (67108863 << 24)); -} - - -if (134217727 << 24 !== -16777216) { - $ERROR('#796: 134217727 << 24 === -16777216. Actual: ' + (134217727 << 24)); -} - - -if (268435455 << 24 !== -16777216) { - $ERROR('#797: 268435455 << 24 === -16777216. Actual: ' + (268435455 << 24)); -} - - -if (536870911 << 24 !== -16777216) { - $ERROR('#798: 536870911 << 24 === -16777216. Actual: ' + (536870911 << 24)); -} - - -if (1073741823 << 24 !== -16777216) { - $ERROR('#799: 1073741823 << 24 === -16777216. Actual: ' + (1073741823 << 24)); -} - - -if (2147483647 << 24 !== -16777216) { - $ERROR('#800: 2147483647 << 24 === -16777216. Actual: ' + (2147483647 << 24)); -} - - -if (0 << 25 !== 0) { - $ERROR('#801: 0 << 25 === 0. Actual: ' + (0 << 25)); -} - - -if (1 << 25 !== 33554432) { - $ERROR('#802: 1 << 25 === 33554432. Actual: ' + (1 << 25)); -} - - -if (3 << 25 !== 100663296) { - $ERROR('#803: 3 << 25 === 100663296. Actual: ' + (3 << 25)); -} - - -if (7 << 25 !== 234881024) { - $ERROR('#804: 7 << 25 === 234881024. Actual: ' + (7 << 25)); -} - - -if (15 << 25 !== 503316480) { - $ERROR('#805: 15 << 25 === 503316480. Actual: ' + (15 << 25)); -} - - -if (31 << 25 !== 1040187392) { - $ERROR('#806: 31 << 25 === 1040187392. Actual: ' + (31 << 25)); -} - - -if (63 << 25 !== 2113929216) { - $ERROR('#807: 63 << 25 === 2113929216. Actual: ' + (63 << 25)); -} - - -if (127 << 25 !== -33554432) { - $ERROR('#808: 127 << 25 === -33554432. Actual: ' + (127 << 25)); -} - - -if (255 << 25 !== -33554432) { - $ERROR('#809: 255 << 25 === -33554432. Actual: ' + (255 << 25)); -} - - -if (511 << 25 !== -33554432) { - $ERROR('#810: 511 << 25 === -33554432. Actual: ' + (511 << 25)); -} - - -if (1023 << 25 !== -33554432) { - $ERROR('#811: 1023 << 25 === -33554432. Actual: ' + (1023 << 25)); -} - - -if (2047 << 25 !== -33554432) { - $ERROR('#812: 2047 << 25 === -33554432. Actual: ' + (2047 << 25)); -} - - -if (4095 << 25 !== -33554432) { - $ERROR('#813: 4095 << 25 === -33554432. Actual: ' + (4095 << 25)); -} - - -if (8191 << 25 !== -33554432) { - $ERROR('#814: 8191 << 25 === -33554432. Actual: ' + (8191 << 25)); -} - - -if (16383 << 25 !== -33554432) { - $ERROR('#815: 16383 << 25 === -33554432. Actual: ' + (16383 << 25)); -} - - -if (32767 << 25 !== -33554432) { - $ERROR('#816: 32767 << 25 === -33554432. Actual: ' + (32767 << 25)); -} - - -if (65535 << 25 !== -33554432) { - $ERROR('#817: 65535 << 25 === -33554432. Actual: ' + (65535 << 25)); -} - - -if (131071 << 25 !== -33554432) { - $ERROR('#818: 131071 << 25 === -33554432. Actual: ' + (131071 << 25)); -} - - -if (262143 << 25 !== -33554432) { - $ERROR('#819: 262143 << 25 === -33554432. Actual: ' + (262143 << 25)); -} - - -if (524287 << 25 !== -33554432) { - $ERROR('#820: 524287 << 25 === -33554432. Actual: ' + (524287 << 25)); -} - - -if (1048575 << 25 !== -33554432) { - $ERROR('#821: 1048575 << 25 === -33554432. Actual: ' + (1048575 << 25)); -} - - -if (2097151 << 25 !== -33554432) { - $ERROR('#822: 2097151 << 25 === -33554432. Actual: ' + (2097151 << 25)); -} - - -if (4194303 << 25 !== -33554432) { - $ERROR('#823: 4194303 << 25 === -33554432. Actual: ' + (4194303 << 25)); -} - - -if (8388607 << 25 !== -33554432) { - $ERROR('#824: 8388607 << 25 === -33554432. Actual: ' + (8388607 << 25)); -} - - -if (16777215 << 25 !== -33554432) { - $ERROR('#825: 16777215 << 25 === -33554432. Actual: ' + (16777215 << 25)); -} - - -if (33554431 << 25 !== -33554432) { - $ERROR('#826: 33554431 << 25 === -33554432. Actual: ' + (33554431 << 25)); -} - - -if (67108863 << 25 !== -33554432) { - $ERROR('#827: 67108863 << 25 === -33554432. Actual: ' + (67108863 << 25)); -} - - -if (134217727 << 25 !== -33554432) { - $ERROR('#828: 134217727 << 25 === -33554432. Actual: ' + (134217727 << 25)); -} - - -if (268435455 << 25 !== -33554432) { - $ERROR('#829: 268435455 << 25 === -33554432. Actual: ' + (268435455 << 25)); -} - - -if (536870911 << 25 !== -33554432) { - $ERROR('#830: 536870911 << 25 === -33554432. Actual: ' + (536870911 << 25)); -} - - -if (1073741823 << 25 !== -33554432) { - $ERROR('#831: 1073741823 << 25 === -33554432. Actual: ' + (1073741823 << 25)); -} - - -if (2147483647 << 25 !== -33554432) { - $ERROR('#832: 2147483647 << 25 === -33554432. Actual: ' + (2147483647 << 25)); -} - - -if (0 << 26 !== 0) { - $ERROR('#833: 0 << 26 === 0. Actual: ' + (0 << 26)); -} - - -if (1 << 26 !== 67108864) { - $ERROR('#834: 1 << 26 === 67108864. Actual: ' + (1 << 26)); -} - - -if (3 << 26 !== 201326592) { - $ERROR('#835: 3 << 26 === 201326592. Actual: ' + (3 << 26)); -} - - -if (7 << 26 !== 469762048) { - $ERROR('#836: 7 << 26 === 469762048. Actual: ' + (7 << 26)); -} - - -if (15 << 26 !== 1006632960) { - $ERROR('#837: 15 << 26 === 1006632960. Actual: ' + (15 << 26)); -} - - -if (31 << 26 !== 2080374784) { - $ERROR('#838: 31 << 26 === 2080374784. Actual: ' + (31 << 26)); -} - - -if (63 << 26 !== -67108864) { - $ERROR('#839: 63 << 26 === -67108864. Actual: ' + (63 << 26)); -} - - -if (127 << 26 !== -67108864) { - $ERROR('#840: 127 << 26 === -67108864. Actual: ' + (127 << 26)); -} - - -if (255 << 26 !== -67108864) { - $ERROR('#841: 255 << 26 === -67108864. Actual: ' + (255 << 26)); -} - - -if (511 << 26 !== -67108864) { - $ERROR('#842: 511 << 26 === -67108864. Actual: ' + (511 << 26)); -} - - -if (1023 << 26 !== -67108864) { - $ERROR('#843: 1023 << 26 === -67108864. Actual: ' + (1023 << 26)); -} - - -if (2047 << 26 !== -67108864) { - $ERROR('#844: 2047 << 26 === -67108864. Actual: ' + (2047 << 26)); -} - - -if (4095 << 26 !== -67108864) { - $ERROR('#845: 4095 << 26 === -67108864. Actual: ' + (4095 << 26)); -} - - -if (8191 << 26 !== -67108864) { - $ERROR('#846: 8191 << 26 === -67108864. Actual: ' + (8191 << 26)); -} - - -if (16383 << 26 !== -67108864) { - $ERROR('#847: 16383 << 26 === -67108864. Actual: ' + (16383 << 26)); -} - - -if (32767 << 26 !== -67108864) { - $ERROR('#848: 32767 << 26 === -67108864. Actual: ' + (32767 << 26)); -} - - -if (65535 << 26 !== -67108864) { - $ERROR('#849: 65535 << 26 === -67108864. Actual: ' + (65535 << 26)); -} - - -if (131071 << 26 !== -67108864) { - $ERROR('#850: 131071 << 26 === -67108864. Actual: ' + (131071 << 26)); -} - - -if (262143 << 26 !== -67108864) { - $ERROR('#851: 262143 << 26 === -67108864. Actual: ' + (262143 << 26)); -} - - -if (524287 << 26 !== -67108864) { - $ERROR('#852: 524287 << 26 === -67108864. Actual: ' + (524287 << 26)); -} - - -if (1048575 << 26 !== -67108864) { - $ERROR('#853: 1048575 << 26 === -67108864. Actual: ' + (1048575 << 26)); -} - - -if (2097151 << 26 !== -67108864) { - $ERROR('#854: 2097151 << 26 === -67108864. Actual: ' + (2097151 << 26)); -} - - -if (4194303 << 26 !== -67108864) { - $ERROR('#855: 4194303 << 26 === -67108864. Actual: ' + (4194303 << 26)); -} - - -if (8388607 << 26 !== -67108864) { - $ERROR('#856: 8388607 << 26 === -67108864. Actual: ' + (8388607 << 26)); -} - - -if (16777215 << 26 !== -67108864) { - $ERROR('#857: 16777215 << 26 === -67108864. Actual: ' + (16777215 << 26)); -} - - -if (33554431 << 26 !== -67108864) { - $ERROR('#858: 33554431 << 26 === -67108864. Actual: ' + (33554431 << 26)); -} - - -if (67108863 << 26 !== -67108864) { - $ERROR('#859: 67108863 << 26 === -67108864. Actual: ' + (67108863 << 26)); -} - - -if (134217727 << 26 !== -67108864) { - $ERROR('#860: 134217727 << 26 === -67108864. Actual: ' + (134217727 << 26)); -} - - -if (268435455 << 26 !== -67108864) { - $ERROR('#861: 268435455 << 26 === -67108864. Actual: ' + (268435455 << 26)); -} - - -if (536870911 << 26 !== -67108864) { - $ERROR('#862: 536870911 << 26 === -67108864. Actual: ' + (536870911 << 26)); -} - - -if (1073741823 << 26 !== -67108864) { - $ERROR('#863: 1073741823 << 26 === -67108864. Actual: ' + (1073741823 << 26)); -} - - -if (2147483647 << 26 !== -67108864) { - $ERROR('#864: 2147483647 << 26 === -67108864. Actual: ' + (2147483647 << 26)); -} - - -if (0 << 27 !== 0) { - $ERROR('#865: 0 << 27 === 0. Actual: ' + (0 << 27)); -} - - -if (1 << 27 !== 134217728) { - $ERROR('#866: 1 << 27 === 134217728. Actual: ' + (1 << 27)); -} - - -if (3 << 27 !== 402653184) { - $ERROR('#867: 3 << 27 === 402653184. Actual: ' + (3 << 27)); -} - - -if (7 << 27 !== 939524096) { - $ERROR('#868: 7 << 27 === 939524096. Actual: ' + (7 << 27)); -} - - -if (15 << 27 !== 2013265920) { - $ERROR('#869: 15 << 27 === 2013265920. Actual: ' + (15 << 27)); -} - - -if (31 << 27 !== -134217728) { - $ERROR('#870: 31 << 27 === -134217728. Actual: ' + (31 << 27)); -} - - -if (63 << 27 !== -134217728) { - $ERROR('#871: 63 << 27 === -134217728. Actual: ' + (63 << 27)); -} - - -if (127 << 27 !== -134217728) { - $ERROR('#872: 127 << 27 === -134217728. Actual: ' + (127 << 27)); -} - - -if (255 << 27 !== -134217728) { - $ERROR('#873: 255 << 27 === -134217728. Actual: ' + (255 << 27)); -} - - -if (511 << 27 !== -134217728) { - $ERROR('#874: 511 << 27 === -134217728. Actual: ' + (511 << 27)); -} - - -if (1023 << 27 !== -134217728) { - $ERROR('#875: 1023 << 27 === -134217728. Actual: ' + (1023 << 27)); -} - - -if (2047 << 27 !== -134217728) { - $ERROR('#876: 2047 << 27 === -134217728. Actual: ' + (2047 << 27)); -} - - -if (4095 << 27 !== -134217728) { - $ERROR('#877: 4095 << 27 === -134217728. Actual: ' + (4095 << 27)); -} - - -if (8191 << 27 !== -134217728) { - $ERROR('#878: 8191 << 27 === -134217728. Actual: ' + (8191 << 27)); -} - - -if (16383 << 27 !== -134217728) { - $ERROR('#879: 16383 << 27 === -134217728. Actual: ' + (16383 << 27)); -} - - -if (32767 << 27 !== -134217728) { - $ERROR('#880: 32767 << 27 === -134217728. Actual: ' + (32767 << 27)); -} - - -if (65535 << 27 !== -134217728) { - $ERROR('#881: 65535 << 27 === -134217728. Actual: ' + (65535 << 27)); -} - - -if (131071 << 27 !== -134217728) { - $ERROR('#882: 131071 << 27 === -134217728. Actual: ' + (131071 << 27)); -} - - -if (262143 << 27 !== -134217728) { - $ERROR('#883: 262143 << 27 === -134217728. Actual: ' + (262143 << 27)); -} - - -if (524287 << 27 !== -134217728) { - $ERROR('#884: 524287 << 27 === -134217728. Actual: ' + (524287 << 27)); -} - - -if (1048575 << 27 !== -134217728) { - $ERROR('#885: 1048575 << 27 === -134217728. Actual: ' + (1048575 << 27)); -} - - -if (2097151 << 27 !== -134217728) { - $ERROR('#886: 2097151 << 27 === -134217728. Actual: ' + (2097151 << 27)); -} - - -if (4194303 << 27 !== -134217728) { - $ERROR('#887: 4194303 << 27 === -134217728. Actual: ' + (4194303 << 27)); -} - - -if (8388607 << 27 !== -134217728) { - $ERROR('#888: 8388607 << 27 === -134217728. Actual: ' + (8388607 << 27)); -} - - -if (16777215 << 27 !== -134217728) { - $ERROR('#889: 16777215 << 27 === -134217728. Actual: ' + (16777215 << 27)); -} - - -if (33554431 << 27 !== -134217728) { - $ERROR('#890: 33554431 << 27 === -134217728. Actual: ' + (33554431 << 27)); -} - - -if (67108863 << 27 !== -134217728) { - $ERROR('#891: 67108863 << 27 === -134217728. Actual: ' + (67108863 << 27)); -} - - -if (134217727 << 27 !== -134217728) { - $ERROR('#892: 134217727 << 27 === -134217728. Actual: ' + (134217727 << 27)); -} - - -if (268435455 << 27 !== -134217728) { - $ERROR('#893: 268435455 << 27 === -134217728. Actual: ' + (268435455 << 27)); -} - - -if (536870911 << 27 !== -134217728) { - $ERROR('#894: 536870911 << 27 === -134217728. Actual: ' + (536870911 << 27)); -} - - -if (1073741823 << 27 !== -134217728) { - $ERROR('#895: 1073741823 << 27 === -134217728. Actual: ' + (1073741823 << 27)); -} - - -if (2147483647 << 27 !== -134217728) { - $ERROR('#896: 2147483647 << 27 === -134217728. Actual: ' + (2147483647 << 27)); -} - - -if (0 << 28 !== 0) { - $ERROR('#897: 0 << 28 === 0. Actual: ' + (0 << 28)); -} - - -if (1 << 28 !== 268435456) { - $ERROR('#898: 1 << 28 === 268435456. Actual: ' + (1 << 28)); -} - - -if (3 << 28 !== 805306368) { - $ERROR('#899: 3 << 28 === 805306368. Actual: ' + (3 << 28)); -} - - -if (7 << 28 !== 1879048192) { - $ERROR('#900: 7 << 28 === 1879048192. Actual: ' + (7 << 28)); -} - - -if (15 << 28 !== -268435456) { - $ERROR('#901: 15 << 28 === -268435456. Actual: ' + (15 << 28)); -} - - -if (31 << 28 !== -268435456) { - $ERROR('#902: 31 << 28 === -268435456. Actual: ' + (31 << 28)); -} - - -if (63 << 28 !== -268435456) { - $ERROR('#903: 63 << 28 === -268435456. Actual: ' + (63 << 28)); -} - - -if (127 << 28 !== -268435456) { - $ERROR('#904: 127 << 28 === -268435456. Actual: ' + (127 << 28)); -} - - -if (255 << 28 !== -268435456) { - $ERROR('#905: 255 << 28 === -268435456. Actual: ' + (255 << 28)); -} - - -if (511 << 28 !== -268435456) { - $ERROR('#906: 511 << 28 === -268435456. Actual: ' + (511 << 28)); -} - - -if (1023 << 28 !== -268435456) { - $ERROR('#907: 1023 << 28 === -268435456. Actual: ' + (1023 << 28)); -} - - -if (2047 << 28 !== -268435456) { - $ERROR('#908: 2047 << 28 === -268435456. Actual: ' + (2047 << 28)); -} - - -if (4095 << 28 !== -268435456) { - $ERROR('#909: 4095 << 28 === -268435456. Actual: ' + (4095 << 28)); -} - - -if (8191 << 28 !== -268435456) { - $ERROR('#910: 8191 << 28 === -268435456. Actual: ' + (8191 << 28)); -} - - -if (16383 << 28 !== -268435456) { - $ERROR('#911: 16383 << 28 === -268435456. Actual: ' + (16383 << 28)); -} - - -if (32767 << 28 !== -268435456) { - $ERROR('#912: 32767 << 28 === -268435456. Actual: ' + (32767 << 28)); -} - - -if (65535 << 28 !== -268435456) { - $ERROR('#913: 65535 << 28 === -268435456. Actual: ' + (65535 << 28)); -} - - -if (131071 << 28 !== -268435456) { - $ERROR('#914: 131071 << 28 === -268435456. Actual: ' + (131071 << 28)); -} - - -if (262143 << 28 !== -268435456) { - $ERROR('#915: 262143 << 28 === -268435456. Actual: ' + (262143 << 28)); -} - - -if (524287 << 28 !== -268435456) { - $ERROR('#916: 524287 << 28 === -268435456. Actual: ' + (524287 << 28)); -} - - -if (1048575 << 28 !== -268435456) { - $ERROR('#917: 1048575 << 28 === -268435456. Actual: ' + (1048575 << 28)); -} - - -if (2097151 << 28 !== -268435456) { - $ERROR('#918: 2097151 << 28 === -268435456. Actual: ' + (2097151 << 28)); -} - - -if (4194303 << 28 !== -268435456) { - $ERROR('#919: 4194303 << 28 === -268435456. Actual: ' + (4194303 << 28)); -} - - -if (8388607 << 28 !== -268435456) { - $ERROR('#920: 8388607 << 28 === -268435456. Actual: ' + (8388607 << 28)); -} - - -if (16777215 << 28 !== -268435456) { - $ERROR('#921: 16777215 << 28 === -268435456. Actual: ' + (16777215 << 28)); -} - - -if (33554431 << 28 !== -268435456) { - $ERROR('#922: 33554431 << 28 === -268435456. Actual: ' + (33554431 << 28)); -} - - -if (67108863 << 28 !== -268435456) { - $ERROR('#923: 67108863 << 28 === -268435456. Actual: ' + (67108863 << 28)); -} - - -if (134217727 << 28 !== -268435456) { - $ERROR('#924: 134217727 << 28 === -268435456. Actual: ' + (134217727 << 28)); -} - - -if (268435455 << 28 !== -268435456) { - $ERROR('#925: 268435455 << 28 === -268435456. Actual: ' + (268435455 << 28)); -} - - -if (536870911 << 28 !== -268435456) { - $ERROR('#926: 536870911 << 28 === -268435456. Actual: ' + (536870911 << 28)); -} - - -if (1073741823 << 28 !== -268435456) { - $ERROR('#927: 1073741823 << 28 === -268435456. Actual: ' + (1073741823 << 28)); -} - - -if (2147483647 << 28 !== -268435456) { - $ERROR('#928: 2147483647 << 28 === -268435456. Actual: ' + (2147483647 << 28)); -} - - -if (0 << 29 !== 0) { - $ERROR('#929: 0 << 29 === 0. Actual: ' + (0 << 29)); -} - - -if (1 << 29 !== 536870912) { - $ERROR('#930: 1 << 29 === 536870912. Actual: ' + (1 << 29)); -} - - -if (3 << 29 !== 1610612736) { - $ERROR('#931: 3 << 29 === 1610612736. Actual: ' + (3 << 29)); -} - - -if (7 << 29 !== -536870912) { - $ERROR('#932: 7 << 29 === -536870912. Actual: ' + (7 << 29)); -} - - -if (15 << 29 !== -536870912) { - $ERROR('#933: 15 << 29 === -536870912. Actual: ' + (15 << 29)); -} - - -if (31 << 29 !== -536870912) { - $ERROR('#934: 31 << 29 === -536870912. Actual: ' + (31 << 29)); -} - - -if (63 << 29 !== -536870912) { - $ERROR('#935: 63 << 29 === -536870912. Actual: ' + (63 << 29)); -} - - -if (127 << 29 !== -536870912) { - $ERROR('#936: 127 << 29 === -536870912. Actual: ' + (127 << 29)); -} - - -if (255 << 29 !== -536870912) { - $ERROR('#937: 255 << 29 === -536870912. Actual: ' + (255 << 29)); -} - - -if (511 << 29 !== -536870912) { - $ERROR('#938: 511 << 29 === -536870912. Actual: ' + (511 << 29)); -} - - -if (1023 << 29 !== -536870912) { - $ERROR('#939: 1023 << 29 === -536870912. Actual: ' + (1023 << 29)); -} - - -if (2047 << 29 !== -536870912) { - $ERROR('#940: 2047 << 29 === -536870912. Actual: ' + (2047 << 29)); -} - - -if (4095 << 29 !== -536870912) { - $ERROR('#941: 4095 << 29 === -536870912. Actual: ' + (4095 << 29)); -} - - -if (8191 << 29 !== -536870912) { - $ERROR('#942: 8191 << 29 === -536870912. Actual: ' + (8191 << 29)); -} - - -if (16383 << 29 !== -536870912) { - $ERROR('#943: 16383 << 29 === -536870912. Actual: ' + (16383 << 29)); -} - - -if (32767 << 29 !== -536870912) { - $ERROR('#944: 32767 << 29 === -536870912. Actual: ' + (32767 << 29)); -} - - -if (65535 << 29 !== -536870912) { - $ERROR('#945: 65535 << 29 === -536870912. Actual: ' + (65535 << 29)); -} - - -if (131071 << 29 !== -536870912) { - $ERROR('#946: 131071 << 29 === -536870912. Actual: ' + (131071 << 29)); -} - - -if (262143 << 29 !== -536870912) { - $ERROR('#947: 262143 << 29 === -536870912. Actual: ' + (262143 << 29)); -} - - -if (524287 << 29 !== -536870912) { - $ERROR('#948: 524287 << 29 === -536870912. Actual: ' + (524287 << 29)); -} - - -if (1048575 << 29 !== -536870912) { - $ERROR('#949: 1048575 << 29 === -536870912. Actual: ' + (1048575 << 29)); -} - - -if (2097151 << 29 !== -536870912) { - $ERROR('#950: 2097151 << 29 === -536870912. Actual: ' + (2097151 << 29)); -} - - -if (4194303 << 29 !== -536870912) { - $ERROR('#951: 4194303 << 29 === -536870912. Actual: ' + (4194303 << 29)); -} - - -if (8388607 << 29 !== -536870912) { - $ERROR('#952: 8388607 << 29 === -536870912. Actual: ' + (8388607 << 29)); -} - - -if (16777215 << 29 !== -536870912) { - $ERROR('#953: 16777215 << 29 === -536870912. Actual: ' + (16777215 << 29)); -} - - -if (33554431 << 29 !== -536870912) { - $ERROR('#954: 33554431 << 29 === -536870912. Actual: ' + (33554431 << 29)); -} - - -if (67108863 << 29 !== -536870912) { - $ERROR('#955: 67108863 << 29 === -536870912. Actual: ' + (67108863 << 29)); -} - - -if (134217727 << 29 !== -536870912) { - $ERROR('#956: 134217727 << 29 === -536870912. Actual: ' + (134217727 << 29)); -} - - -if (268435455 << 29 !== -536870912) { - $ERROR('#957: 268435455 << 29 === -536870912. Actual: ' + (268435455 << 29)); -} - - -if (536870911 << 29 !== -536870912) { - $ERROR('#958: 536870911 << 29 === -536870912. Actual: ' + (536870911 << 29)); -} - - -if (1073741823 << 29 !== -536870912) { - $ERROR('#959: 1073741823 << 29 === -536870912. Actual: ' + (1073741823 << 29)); -} - - -if (2147483647 << 29 !== -536870912) { - $ERROR('#960: 2147483647 << 29 === -536870912. Actual: ' + (2147483647 << 29)); -} - - -if (0 << 30 !== 0) { - $ERROR('#961: 0 << 30 === 0. Actual: ' + (0 << 30)); -} - - -if (1 << 30 !== 1073741824) { - $ERROR('#962: 1 << 30 === 1073741824. Actual: ' + (1 << 30)); -} - - -if (3 << 30 !== -1073741824) { - $ERROR('#963: 3 << 30 === -1073741824. Actual: ' + (3 << 30)); -} - - -if (7 << 30 !== -1073741824) { - $ERROR('#964: 7 << 30 === -1073741824. Actual: ' + (7 << 30)); -} - - -if (15 << 30 !== -1073741824) { - $ERROR('#965: 15 << 30 === -1073741824. Actual: ' + (15 << 30)); -} - - -if (31 << 30 !== -1073741824) { - $ERROR('#966: 31 << 30 === -1073741824. Actual: ' + (31 << 30)); -} - - -if (63 << 30 !== -1073741824) { - $ERROR('#967: 63 << 30 === -1073741824. Actual: ' + (63 << 30)); -} - - -if (127 << 30 !== -1073741824) { - $ERROR('#968: 127 << 30 === -1073741824. Actual: ' + (127 << 30)); -} - - -if (255 << 30 !== -1073741824) { - $ERROR('#969: 255 << 30 === -1073741824. Actual: ' + (255 << 30)); -} - - -if (511 << 30 !== -1073741824) { - $ERROR('#970: 511 << 30 === -1073741824. Actual: ' + (511 << 30)); -} - - -if (1023 << 30 !== -1073741824) { - $ERROR('#971: 1023 << 30 === -1073741824. Actual: ' + (1023 << 30)); -} - - -if (2047 << 30 !== -1073741824) { - $ERROR('#972: 2047 << 30 === -1073741824. Actual: ' + (2047 << 30)); -} - - -if (4095 << 30 !== -1073741824) { - $ERROR('#973: 4095 << 30 === -1073741824. Actual: ' + (4095 << 30)); -} - - -if (8191 << 30 !== -1073741824) { - $ERROR('#974: 8191 << 30 === -1073741824. Actual: ' + (8191 << 30)); -} - - -if (16383 << 30 !== -1073741824) { - $ERROR('#975: 16383 << 30 === -1073741824. Actual: ' + (16383 << 30)); -} - - -if (32767 << 30 !== -1073741824) { - $ERROR('#976: 32767 << 30 === -1073741824. Actual: ' + (32767 << 30)); -} - - -if (65535 << 30 !== -1073741824) { - $ERROR('#977: 65535 << 30 === -1073741824. Actual: ' + (65535 << 30)); -} - - -if (131071 << 30 !== -1073741824) { - $ERROR('#978: 131071 << 30 === -1073741824. Actual: ' + (131071 << 30)); -} - - -if (262143 << 30 !== -1073741824) { - $ERROR('#979: 262143 << 30 === -1073741824. Actual: ' + (262143 << 30)); -} - - -if (524287 << 30 !== -1073741824) { - $ERROR('#980: 524287 << 30 === -1073741824. Actual: ' + (524287 << 30)); -} - - -if (1048575 << 30 !== -1073741824) { - $ERROR('#981: 1048575 << 30 === -1073741824. Actual: ' + (1048575 << 30)); -} - - -if (2097151 << 30 !== -1073741824) { - $ERROR('#982: 2097151 << 30 === -1073741824. Actual: ' + (2097151 << 30)); -} - - -if (4194303 << 30 !== -1073741824) { - $ERROR('#983: 4194303 << 30 === -1073741824. Actual: ' + (4194303 << 30)); -} - - -if (8388607 << 30 !== -1073741824) { - $ERROR('#984: 8388607 << 30 === -1073741824. Actual: ' + (8388607 << 30)); -} - - -if (16777215 << 30 !== -1073741824) { - $ERROR('#985: 16777215 << 30 === -1073741824. Actual: ' + (16777215 << 30)); -} - - -if (33554431 << 30 !== -1073741824) { - $ERROR('#986: 33554431 << 30 === -1073741824. Actual: ' + (33554431 << 30)); -} - - -if (67108863 << 30 !== -1073741824) { - $ERROR('#987: 67108863 << 30 === -1073741824. Actual: ' + (67108863 << 30)); -} - - -if (134217727 << 30 !== -1073741824) { - $ERROR('#988: 134217727 << 30 === -1073741824. Actual: ' + (134217727 << 30)); -} - - -if (268435455 << 30 !== -1073741824) { - $ERROR('#989: 268435455 << 30 === -1073741824. Actual: ' + (268435455 << 30)); -} - - -if (536870911 << 30 !== -1073741824) { - $ERROR('#990: 536870911 << 30 === -1073741824. Actual: ' + (536870911 << 30)); -} - - -if (1073741823 << 30 !== -1073741824) { - $ERROR('#991: 1073741823 << 30 === -1073741824. Actual: ' + (1073741823 << 30)); -} - - -if (2147483647 << 30 !== -1073741824) { - $ERROR('#992: 2147483647 << 30 === -1073741824. Actual: ' + (2147483647 << 30)); -} - - -if (0 << 31 !== 0) { - $ERROR('#993: 0 << 31 === 0. Actual: ' + (0 << 31)); -} - - -if (1 << 31 !== -2147483648) { - $ERROR('#994: 1 << 31 === -2147483648. Actual: ' + (1 << 31)); -} - - -if (3 << 31 !== -2147483648) { - $ERROR('#995: 3 << 31 === -2147483648. Actual: ' + (3 << 31)); -} - - -if (7 << 31 !== -2147483648) { - $ERROR('#996: 7 << 31 === -2147483648. Actual: ' + (7 << 31)); -} - - -if (15 << 31 !== -2147483648) { - $ERROR('#997: 15 << 31 === -2147483648. Actual: ' + (15 << 31)); -} - - -if (31 << 31 !== -2147483648) { - $ERROR('#998: 31 << 31 === -2147483648. Actual: ' + (31 << 31)); -} - - -if (63 << 31 !== -2147483648) { - $ERROR('#999: 63 << 31 === -2147483648. Actual: ' + (63 << 31)); -} - - -if (127 << 31 !== -2147483648) { - $ERROR('#1000: 127 << 31 === -2147483648. Actual: ' + (127 << 31)); -} - - -if (255 << 31 !== -2147483648) { - $ERROR('#1001: 255 << 31 === -2147483648. Actual: ' + (255 << 31)); -} - - -if (511 << 31 !== -2147483648) { - $ERROR('#1002: 511 << 31 === -2147483648. Actual: ' + (511 << 31)); -} - - -if (1023 << 31 !== -2147483648) { - $ERROR('#1003: 1023 << 31 === -2147483648. Actual: ' + (1023 << 31)); -} - - -if (2047 << 31 !== -2147483648) { - $ERROR('#1004: 2047 << 31 === -2147483648. Actual: ' + (2047 << 31)); -} - - -if (4095 << 31 !== -2147483648) { - $ERROR('#1005: 4095 << 31 === -2147483648. Actual: ' + (4095 << 31)); -} - - -if (8191 << 31 !== -2147483648) { - $ERROR('#1006: 8191 << 31 === -2147483648. Actual: ' + (8191 << 31)); -} - - -if (16383 << 31 !== -2147483648) { - $ERROR('#1007: 16383 << 31 === -2147483648. Actual: ' + (16383 << 31)); -} - - -if (32767 << 31 !== -2147483648) { - $ERROR('#1008: 32767 << 31 === -2147483648. Actual: ' + (32767 << 31)); -} - - -if (65535 << 31 !== -2147483648) { - $ERROR('#1009: 65535 << 31 === -2147483648. Actual: ' + (65535 << 31)); -} - - -if (131071 << 31 !== -2147483648) { - $ERROR('#1010: 131071 << 31 === -2147483648. Actual: ' + (131071 << 31)); -} - - -if (262143 << 31 !== -2147483648) { - $ERROR('#1011: 262143 << 31 === -2147483648. Actual: ' + (262143 << 31)); -} - - -if (524287 << 31 !== -2147483648) { - $ERROR('#1012: 524287 << 31 === -2147483648. Actual: ' + (524287 << 31)); -} - - -if (1048575 << 31 !== -2147483648) { - $ERROR('#1013: 1048575 << 31 === -2147483648. Actual: ' + (1048575 << 31)); -} - - -if (2097151 << 31 !== -2147483648) { - $ERROR('#1014: 2097151 << 31 === -2147483648. Actual: ' + (2097151 << 31)); -} - - -if (4194303 << 31 !== -2147483648) { - $ERROR('#1015: 4194303 << 31 === -2147483648. Actual: ' + (4194303 << 31)); -} - - -if (8388607 << 31 !== -2147483648) { - $ERROR('#1016: 8388607 << 31 === -2147483648. Actual: ' + (8388607 << 31)); -} - - -if (16777215 << 31 !== -2147483648) { - $ERROR('#1017: 16777215 << 31 === -2147483648. Actual: ' + (16777215 << 31)); -} - - -if (33554431 << 31 !== -2147483648) { - $ERROR('#1018: 33554431 << 31 === -2147483648. Actual: ' + (33554431 << 31)); -} - - -if (67108863 << 31 !== -2147483648) { - $ERROR('#1019: 67108863 << 31 === -2147483648. Actual: ' + (67108863 << 31)); -} - - -if (134217727 << 31 !== -2147483648) { - $ERROR('#1020: 134217727 << 31 === -2147483648. Actual: ' + (134217727 << 31)); -} - - -if (268435455 << 31 !== -2147483648) { - $ERROR('#1021: 268435455 << 31 === -2147483648. Actual: ' + (268435455 << 31)); -} - - -if (536870911 << 31 !== -2147483648) { - $ERROR('#1022: 536870911 << 31 === -2147483648. Actual: ' + (536870911 << 31)); -} - - -if (1073741823 << 31 !== -2147483648) { - $ERROR('#1023: 1073741823 << 31 === -2147483648. Actual: ' + (1073741823 << 31)); -} - - -if (2147483647 << 31 !== -2147483648) { - $ERROR('#1024: 2147483647 << 31 === -2147483648. Actual: ' + (2147483647 << 31)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A5.1_T1.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A5.1_T1.js deleted file mode 100644 index c619eee1a..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A5.1_T1.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.1_A5.1_T1; - * @section: 11.7.1, 9.5; - * @assertion: Operator x << y uses ToInt32(ShiftExpression); - * @description: Checking boundary points; - */ - -//CHECK#1 -if (2147483648.1 << 0 !== -2147483648) { - $ERROR('#1: 2147483648.1 << 0 === -2147483648. Actual: ' + (2147483648.1 << 0)); -} - -//CHECK#2 -if (4294967296.1 << 0 !== 0) { - $ERROR('#2: 4294967296.1 << 0 === 0. Actual: ' + (4294967296.1 << 0)); -} - -//CHECK#3 -if (6442450944.1 << 0 !== -2147483648) { - $ERROR('#3: 6442450944.1 << 0 === -2147483648. Actual: ' + (6442450944.1 << 0)); -} - -//CHECK#4 -if (4294967295.1 << 0 !== -1) { - $ERROR('#4: 4294967295.1 << 0 === -1. Actual: ' + (4294967295.1 << 0)); -} - -//CHECK#5 -if (6442450943.1 << 0 !== 2147483647) { - $ERROR('#5: 6442450943.1 << 0 === 2147483647. Actual: ' + (6442450943.1 << 0)); -} - -//CHECK#6 -if (-2147483649.1 << 0 !== 2147483647) { - $ERROR('#6: -2147483649.1 << 0 === 2147483647. Actual: ' + (-2147483649.1 << 0)); -} - -//CHECK#7 -if (-4294967297.1 << 0 !== -1) { - $ERROR('#7: -4294967297.1 << 0 === -1. Actual: ' + (-4294967297.1 << 0)); -} - -//CHECK#8 -if (-6442450945.1 << 0 !== 2147483647) { - $ERROR('#8: -6442450945.1 << 0 === 2147483647. Actual: ' + (-6442450945.1 << 0)); -} - -//CHECK#9 -if (-4294967296.1 << 0 !== 0) { - $ERROR('#9: -4294967296.1 << 0 === 0 . Actual: ' + (-4294967296.1 << 0)); -} - -//CHECK#10 -if (-6442450944.1 << 0 !== -2147483648) { - $ERROR('#10: -6442450944.1 << 0 === -2147483648. Actual: ' + (-6442450944.1 << 0)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A5.2_T1.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A5.2_T1.js deleted file mode 100644 index 5ae6d18f7..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.1_The_Left_shift_Operator/S11.7.1_A5.2_T1.js +++ /dev/null @@ -1,329 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.1_A5.2_T1; - * @section: 11.7.1, 9.5; - * @assertion: Operator x << y uses ToUint32(AdditiveExpression) & 31; - * @description: Checking distinct points; - */ - -//CHECK#1 -if (1 << -32.1 !== 1) { - $ERROR('#1: 1 << -32.1 === 1. Actual: ' + (1 << -32.1)); -} - -//CHECK#2 -if (1 << -31.1 !== 2) { - $ERROR('#2: 1 << -31.1 === 2. Actual: ' + (1 << -31.1)); -} - -//CHECK#3 -if (1 << -30.1 !== 4) { - $ERROR('#3: 1 << -30.1 === 4. Actual: ' + (1 << -30.1)); -} - -//CHECK#4 -if (1 << -29.1 !== 8) { - $ERROR('#4: 1 << -29.1 === 8. Actual: ' + (1 << -29.1)); -} - -//CHECK#5 -if (1 << -28.1 !== 16) { - $ERROR('#5: 1 << -28.1 === 16. Actual: ' + (1 << -28.1)); -} - -//CHECK#6 -if (1 << -27.1 !== 32) { - $ERROR('#6: 1 << -27.1 === 32. Actual: ' + (1 << -27.1)); -} - -//CHECK#7 -if (1 << -26.1 !== 64) { - $ERROR('#7: 1 << -26.1 === 64. Actual: ' + (1 << -26.1)); -} - -//CHECK#8 -if (1 << -25.1 !== 128) { - $ERROR('#8: 1 << -25.1 === 128. Actual: ' + (1 << -25.1)); -} - -//CHECK#9 -if (1 << -24.1 !== 256) { - $ERROR('#9: 1 << -24.1 === 256. Actual: ' + (1 << -24.1)); -} - -//CHECK#10 -if (1 << -23.1 !== 512) { - $ERROR('#10: 1 << -23.1 === 512. Actual: ' + (1 << -23.1)); -} - -//CHECK#11 -if (1 << -22.1 !== 1024) { - $ERROR('#11: 1 << -22.1 === 1024. Actual: ' + (1 << -22.1)); -} - -//CHECK#12 -if (1 << -21.1 !== 2048) { - $ERROR('#12: 1 << -21.1 === 2048. Actual: ' + (1 << -21.1)); -} - -//CHECK#13 -if (1 << -20.1 !== 4096) { - $ERROR('#13: 1 << -20.1 === 4096. Actual: ' + (1 << -20.1)); -} - -//CHECK#14 -if (1 << -19.1 !== 8192) { - $ERROR('#14: 1 << -19.1 === 8192. Actual: ' + (1 << -19.1)); -} - -//CHECK#15 -if (1 << -18.1 !== 16384) { - $ERROR('#15: 1 << -18.1 === 16384. Actual: ' + (1 << -18.1)); -} - -//CHECK#16 -if (1 << -17.1 !== 32768) { - $ERROR('#16: 1 << -17.1 === 32768. Actual: ' + (1 << -17.1)); -} - -//CHECK#17 -if (1 << -16.1 !== 65536) { - $ERROR('#17: 1 << -16.1 === 65536. Actual: ' + (1 << -16.1)); -} - -//CHECK#18 -if (1 << -15.1 !== 131072) { - $ERROR('#18: 1 << -15.1 === 131072. Actual: ' + (1 << -15.1)); -} - -//CHECK#19 -if (1 << -14.1 !== 262144) { - $ERROR('#19: 1 << -14.1 === 262144. Actual: ' + (1 << -14.1)); -} - -//CHECK#20 -if (1 << -13.1 !== 524288) { - $ERROR('#20: 1 << -13.1 === 524288. Actual: ' + (1 << -13.1)); -} - -//CHECK#21 -if (1 << -12.1 !== 1048576) { - $ERROR('#21: 1 << -12.1 === 1048576. Actual: ' + (1 << -12.1)); -} - -//CHECK#22 -if (1 << -11.1 !== 2097152) { - $ERROR('#22: 1 << -11.1 === 2097152. Actual: ' + (1 << -11.1)); -} - -//CHECK#23 -if (1 << -10.1 !== 4194304) { - $ERROR('#23: 1 << -10.1 === 4194304. Actual: ' + (1 << -10.1)); -} - -//CHECK#24 -if (1 << -9.1 !== 8388608) { - $ERROR('#24: 1 << -9.1 === 8388608. Actual: ' + (1 << -9.1)); -} - -//CHECK#25 -if (1 << -8.1 !== 16777216) { - $ERROR('#25: 1 << -8.1 === 16777216. Actual: ' + (1 << -8.1)); -} - -//CHECK#26 -if (1 << -7.1 !== 33554432) { - $ERROR('#26: 1 << -7.1 === 33554432. Actual: ' + (1 << -7.1)); -} - -//CHECK#27 -if (1 << -6.1 !== 67108864) { - $ERROR('#27: 1 << -6.1 === 67108864. Actual: ' + (1 << -6.1)); -} - -//CHECK#28 -if (1 << -5.1 !== 134217728) { - $ERROR('#28: 1 << -5.1 === 134217728. Actual: ' + (1 << -5.1)); -} - -//CHECK#29 -if (1 << -4.1 !== 268435456) { - $ERROR('#29: 1 << -4.1 === 268435456. Actual: ' + (1 << -4.1)); -} - -//CHECK#30 -if (1 << -3.1 !== 536870912) { - $ERROR('#30: 1 << -3.1 === 536870912. Actual: ' + (1 << -3.1)); -} - -//CHECK#31 -if (1 << -2.1 !== 1073741824) { - $ERROR('#31: 1 << -2.1 === 1073741824. Actual: ' + (1 << -2.1)); -} - -//CHECK#32 -if (1 << -1.1 !== -2147483648) { - $ERROR('#32: 1 << -1.1 === -2147483648. Actual: ' + (1 << -1.1)); -} - -//CHECK#33 -if (1 << 32.1 !== 1) { - $ERROR('#33: 1 << 32.1 === 1. Actual: ' + (1 << 32.1)); -} - -//CHECK#34 -if (1 << 33.1 !== 2) { - $ERROR('#34: 1 << 33.1 === 2. Actual: ' + (1 << 33.1)); -} - -//CHECK#35 -if (1 << 34.1 !== 4) { - $ERROR('#35: 1 << 34.1 === 4. Actual: ' + (1 << 34.1)); -} - -//CHECK#36 -if (1 << 35.1 !== 8) { - $ERROR('#36: 1 << 35.1 === 8. Actual: ' + (1 << 35.1)); -} - -//CHECK#37 -if (1 << 36.1 !== 16) { - $ERROR('#37: 1 << 36.1 === 16. Actual: ' + (1 << 36.1)); -} - -//CHECK#38 -if (1 << 37.1 !== 32) { - $ERROR('#38: 1 << 37.1 === 32. Actual: ' + (1 << 37.1)); -} - -//CHECK#39 -if (1 << 38.1 !== 64) { - $ERROR('#39: 1 << 38.1 === 64. Actual: ' + (1 << 38.1)); -} - -//CHECK#40 -if (1 << 39.1 !== 128) { - $ERROR('#40: 1 << 39.1 === 128. Actual: ' + (1 << 39.1)); -} - -//CHECK#41 -if (1 << 40.1 !== 256) { - $ERROR('#41: 1 << 40.1 === 256. Actual: ' + (1 << 40.1)); -} - -//CHECK#42 -if (1 << 41.1 !== 512) { - $ERROR('#42: 1 << 41.1 === 512. Actual: ' + (1 << 41.1)); -} - -//CHECK#43 -if (1 << 42.1 !== 1024) { - $ERROR('#43: 1 << 42.1 === 1024. Actual: ' + (1 << 42.1)); -} - -//CHECK#44 -if (1 << 43.1 !== 2048) { - $ERROR('#44: 1 << 43.1 === 2048. Actual: ' + (1 << 43.1)); -} - -//CHECK#45 -if (1 << 44.1 !== 4096) { - $ERROR('#45: 1 << 44.1 === 4096. Actual: ' + (1 << 44.1)); -} - -//CHECK#46 -if (1 << 45.1 !== 8192) { - $ERROR('#46: 1 << 45.1 === 8192. Actual: ' + (1 << 45.1)); -} - -//CHECK#47 -if (1 << 46.1 !== 16384) { - $ERROR('#47: 1 << 46.1 === 16384. Actual: ' + (1 << 46.1)); -} - -//CHECK#48 -if (1 << 47.1 !== 32768) { - $ERROR('#48: 1 << 47.1 === 32768. Actual: ' + (1 << 47.1)); -} - -//CHECK#49 -if (1 << 48.1 !== 65536) { - $ERROR('#49: 1 << 48.1 === 65536. Actual: ' + (1 << 48.1)); -} - -//CHECK#50 -if (1 << 49.1 !== 131072) { - $ERROR('#50: 1 << 49.1 === 131072. Actual: ' + (1 << 49.1)); -} - -//CHECK#51 -if (1 << 50.1 !== 262144) { - $ERROR('#51: 1 << 50.1 === 262144. Actual: ' + (1 << 50.1)); -} - -//CHECK#52 -if (1 << 51.1 !== 524288) { - $ERROR('#52: 1 << 51.1 === 524288. Actual: ' + (1 << 51.1)); -} - -//CHECK#53 -if (1 << 52.1 !== 1048576) { - $ERROR('#53: 1 << 52.1 === 1048576. Actual: ' + (1 << 52.1)); -} - -//CHECK#54 -if (1 << 53.1 !== 2097152) { - $ERROR('#54: 1 << 53.1 === 2097152. Actual: ' + (1 << 53.1)); -} - -//CHECK#55 -if (1 << 54.1 !== 4194304) { - $ERROR('#55: 1 << 54.1 === 4194304. Actual: ' + (1 << 54.1)); -} - -//CHECK#56 -if (1 << 55.1 !== 8388608) { - $ERROR('#56: 1 << 55.1 === 8388608. Actual: ' + (1 << 55.1)); -} - -//CHECK#57 -if (1 << 56.1 !== 16777216) { - $ERROR('#57: 1 << 56.1 === 16777216. Actual: ' + (1 << 56.1)); -} - -//CHECK#58 -if (1 << 57.1 !== 33554432) { - $ERROR('#58: 1 << 57.1 === 33554432. Actual: ' + (1 << 57.1)); -} - -//CHECK#59 -if (1 << 58.1 !== 67108864) { - $ERROR('#59: 1 << 58.1 === 67108864. Actual: ' + (1 << 58.1)); -} - -//CHECK#60 -if (1 << 59.1 !== 134217728) { - $ERROR('#60: 1 << 59.1 === 134217728. Actual: ' + (1 << 59.1)); -} - -//CHECK#61 -if (1 << 60.1 !== 268435456) { - $ERROR('#61: 1 << 60.1 === 268435456. Actual: ' + (1 << 60.1)); -} - -//CHECK#62 -if (1 << 61.1 !== 536870912) { - $ERROR('#62: 1 << 61.1 === 536870912. Actual: ' + (1 << 61.1)); -} - -//CHECK#63 -if (1 << 62.1 !== 1073741824) { - $ERROR('#63: 1 << 62.1 === 1073741824. Actual: ' + (1 << 62.1)); -} - -//CHECK#64 -if (1 << 63.1 !== -2147483648) { - $ERROR('#64: 1 << 63.1 === -2147483648. Actual: ' + (1 << 63.1)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A1.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A1.js deleted file mode 100644 index 238775f7c..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A1.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.7.2_A1; -* @section: 11.7.2, 7.2, 7.3; -* @assertion: White Space and Line Terminator between ShiftExpression and ">>" or between ">>" and AdditiveExpression are allowed; -* @description: Checking by using eval; -*/ - -//CHECK#1 -if (eval("-4\u0009>>\u00091") !== -2) { - $ERROR('#1: -4\\u0009>>\\u00091 === -2'); -} - -//CHECK#2 -if (eval("-4\u000B>>\u000B1") !== -2) { - $ERROR('#2: -4\\u000B>>\\u000B1 === -2'); -} - -//CHECK#3 -if (eval("-4\u000C>>\u000C1") !== -2) { - $ERROR('#3: -4\\u000C>>\\u000C1 === -2'); -} - -//CHECK#4 -if (eval("-4\u0020>>\u00201") !== -2) { - $ERROR('#4: -4\\u0020>>\\u00201 === -2'); -} - -//CHECK#5 -if (eval("-4\u00A0>>\u00A01") !== -2) { - $ERROR('#5: -4\\u00A0>>\\u00A01 === -2'); -} - -//CHECK#6 -if (eval("-4\u000A>>\u000A1") !== -2) { - $ERROR('#6: -4\\u000A>>\\u000A1 === -2'); -} - -//CHECK#7 -if (eval("-4\u000D>>\u000D1") !== -2) { - $ERROR('#7: -4\\u000D>>\\u000D1 === -2'); -} - -//CHECK#8 -if (eval("-4\u2028>>\u20281") !== -2) { - $ERROR('#8: -4\\u2028>>\\u20281 === -2'); -} - -//CHECK#9 -if (eval("-4\u2029>>\u20291") !== -2) { - $ERROR('#9: -4\\u2029>>\\u20291 === -2'); -} - -//CHECK#10 -if (eval("-4\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029>>\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20291") !== -2) { - $ERROR('#10: -4\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029>>\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20291 === -2'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A2.1_T1.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A2.1_T1.js deleted file mode 100644 index 1469a5261..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A2.1_T1.js +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.7.2_A2.1_T1; -* @section: 11.7.2; -* @assertion: Operator x >> y uses GetValue; -* @description: Either Type is not Reference or GetBase is not null; -*/ - -//CHECK#1 -if (-4 >> 1 !== -2) { - $ERROR('#1: -4 >> 1 === -2. Actual: ' + (-4 >> 1)); -} - -//CHECK#2 -var x = -4; -if (x >> 1 !== -2) { - $ERROR('#2: var x = -4; x >> 1 === -2. Actual: ' + (x >> 1)); -} - -//CHECK#3 -var y = 1; -if (-4 >> y !== -2) { - $ERROR('#3: var y = 1; -4 >> y === -2. Actual: ' + (-4 >> y)); -} - -//CHECK#4 -var x = -4; -var y = 1; -if (x >> y !== -2) { - $ERROR('#4: var x = -4; var y = 1; x >> y === -2. Actual: ' + (x >> y)); -} - -//CHECK#5 -var objectx = new Object(); -var objecty = new Object(); -objectx.prop = -4; -objecty.prop = 1; -if (objectx.prop >> objecty.prop !== -2) { - $ERROR('#5: var objectx = new Object(); var objecty = new Object(); objectx.prop = -4; objecty.prop = 1; objectx.prop >> objecty.prop === -2. Actual: ' + (objectx.prop >> objecty.prop)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A2.1_T2.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A2.1_T2.js deleted file mode 100644 index 58ca08fa8..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A2.1_T2.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.2_A2.1_T2; - * @section: 11.7.2; - * @assertion: Operator x >> y uses GetValue; - * @description: If GetBase(x) is null, throw ReferenceError; -*/ - -//CHECK#1 -try { - x >> 1; - $ERROR('#1.1: x >> 1 throw ReferenceError. Actual: ' + (x >> 1)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: x >> 1 throw ReferenceError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A2.1_T3.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A2.1_T3.js deleted file mode 100644 index 9ac3aa0bf..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A2.1_T3.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.2_A2.1_T3; - * @section: 11.7.2; - * @assertion: Operator x >> y uses GetValue; - * @description: If GetBase(y) is null, throw ReferenceError; -*/ - -//CHECK#1 -try { - 1 >> y; - $ERROR('#1.1: 1 >> y throw ReferenceError. Actual: ' + (1 >> y)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: 1 >> y throw ReferenceError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A2.2_T1.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A2.2_T1.js deleted file mode 100644 index 646f92798..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A2.2_T1.js +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.2_A2.2_T1; - * @section: 11.7.2, 8.6.2.6; - * @assertion: Operator x >> y uses [[Default Value]]; - * @description: If Type(value) is Object, evaluate ToPrimitive(value, Number); - */ - -//CHECK#1 -if ({valueOf: function() {return -4}} >> 1 !== -2) { - $ERROR('#1: {valueOf: function() {return -4}} >> 1 === -2. Actual: ' + ({valueOf: function() {return -4}} >> 1)); -} - -//CHECK#2 -if ({valueOf: function() {return -4}, toString: function() {return 0}} >> 1 !== -2) { - $ERROR('#2: {valueOf: function() {return -4}, toString: function() {return 0}} >> 1 === -2. Actual: ' + ({valueOf: function() {return -4}, toString: function() {return 0}} >> 1)); -} - -//CHECK#3 -if ({valueOf: function() {return -4}, toString: function() {return {}}} >> 1 !== -2) { - $ERROR('#3: {valueOf: function() {return -4}, toString: function() {return {}}} >> 1 === -2. Actual: ' + ({valueOf: function() {return -4}, toString: function() {return {}}} >> 1)); -} - -//CHECK#4 -try { - if ({valueOf: function() {return -4}, toString: function() {throw "error"}} >> 1 !== -2) { - $ERROR('#4.1: {valueOf: function() {return -4}, toString: function() {throw "error"}} >> 1 === -2. Actual: ' + ({valueOf: function() {return -4}, toString: function() {throw "error"}} >> 1)); - } -} -catch (e) { - if (e === "error") { - $ERROR('#4.2: {valueOf: function() {return -4}, toString: function() {throw "error"}} >> 1 not throw "error"'); - } else { - $ERROR('#4.3: {valueOf: function() {return -4}, toString: function() {throw "error"}} >> 1 not throw Error. Actual: ' + (e)); - } -} - -//CHECK#5 -if (-4 >> {toString: function() {return 1}} !== -2) { - $ERROR('#5: -4 >> {toString: function() {return 1}} === -2. Actual: ' + (-4 >> {toString: function() {return 1}})); -} - -//CHECK#6 -if (-4 >> {valueOf: function() {return {}}, toString: function() {return 1}} !== -2) { - $ERROR('#6: -4 >> {valueOf: function() {return {}}, toString: function() {return 1}} === -2. Actual: ' + (-4 >> {valueOf: function() {return {}}, toString: function() {return 1}})); -} - -//CHECK#7 -try { - -4 >> {valueOf: function() {throw "error"}, toString: function() {return 1}}; - $ERROR('#7.1: -4 >> {valueOf: function() {throw "error"}, toString: function() {return 1}} throw "error". Actual: ' + (-4 >> {valueOf: function() {throw "error"}, toString: function() {return 1}})); -} -catch (e) { - if (e !== "error") { - $ERROR('#7.2: -4 >> {valueOf: function() {throw "error"}, toString: function() {return 1}} throw "error". Actual: ' + (e)); - } -} - -//CHECK#8 -try { - -4 >> {valueOf: function() {return {}}, toString: function() {return {}}}; - $ERROR('#8.1: -4 >> {valueOf: function() {return {}}, toString: function() {return {}}} throw TypeError. Actual: ' + (-4 >> {valueOf: function() {return {}}, toString: function() {return {}}})); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#8.2: -4 >> {valueOf: function() {return {}}, toString: function() {return {}}} throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A2.3_T1.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A2.3_T1.js deleted file mode 100644 index fba3668e8..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A2.3_T1.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.2_A2.3_T1; - * @section: 11.7.2; - * @assertion: ToNumber(first expression) is called first, and then ToNumber(second expression); - * @description: Checking with "throw"; -*/ - -//CHECK#1 -var x = { valueOf: function () { throw "x"; } }; -var y = { valueOf: function () { throw "y"; } }; -try { - x >> y; - $ERROR('#1.1: var x = { valueOf: function () { throw "x"; } }; var y = { valueOf: function () { throw "y"; } }; x >> y throw "x". Actual: ' + (x >> y)); -} catch (e) { - if (e === "y") { - $ERROR('#1.2: ToNumber(first expression) is called first, and then ToNumber(second expression)'); - } else { - if (e !== "x") { - $ERROR('#1.3: var x = { valueOf: function () { throw "x"; } }; var y = { valueOf: function () { throw "y"; } }; x >> y throw "x". Actual: ' + (e)); - } - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A2.4_T1.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A2.4_T1.js deleted file mode 100644 index 2a70c67ab..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A2.4_T1.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.2_A2.4_T1; - * @section: 11.7.2; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with "="; -*/ - -//CHECK#1 -var x = 0; -if ((x = 1) >> x !== 0) { - $ERROR('#1: var x = 0; (x = 1) >> x === 0. Actual: ' + ((x = 1) >> x)); -} - -//CHECK#2 -var x = -4; -if (x >> (x = 1) !== -2) { - $ERROR('#2: var x = -4; x >> (x = 1) === -2. Actual: ' + (x >> (x = 1))); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A2.4_T2.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A2.4_T2.js deleted file mode 100644 index 4168d109d..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A2.4_T2.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.2_A2.4_T2; - * @section: 11.7.2; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with "throw"; -*/ - -//CHECK#1 -var x = function () { throw "x"; }; -var y = function () { throw "y"; }; -try { - x() >> y(); - $ERROR('#1.1: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() >> y() throw "x". Actual: ' + (x() >> y())); -} catch (e) { - if (e === "y") { - $ERROR('#1.2: First expression is evaluated first, and then second expression'); - } else { - if (e !== "x") { - $ERROR('#1.3: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() >> y() throw "x". Actual: ' + (e)); - } - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A2.4_T3.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A2.4_T3.js deleted file mode 100644 index b426d1f7f..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A2.4_T3.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.2_A2.4_T3; - * @section: 11.7.2; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with undeclarated variables; -*/ - -//CHECK#1 -try { - x >> (x = 1); - $ERROR('#1.1: x >> (x = 1) throw ReferenceError. Actual: ' + (x >> (x = 1))); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: x >> (x = 1) throw ReferenceError. Actual: ' + (e)); - } -} - -//CHECK#2 -if ((y = 1) >> y !== 0) { - $ERROR('#2: (y = 1) >> y === 0. Actual: ' + ((y = 1) >> y)); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A3_T1.1.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A3_T1.1.js deleted file mode 100644 index 18a22e690..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A3_T1.1.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.2_A3_T1.1; - * @section: 11.7.2; - * @assertion: Operator x >> y returns ToNumber(x) >> ToNumber(y); - * @description: Type(x) and Type(y) vary between primitive boolean and Boolean object; - */ - -//CHECK#1 -if (true >> true !== 0) { - $ERROR('#1: true >> true === 0. Actual: ' + (true >> true)); -} - -//CHECK#2 -if (new Boolean(true) >> true !== 0) { - $ERROR('#2: new Boolean(true) >> true === 0. Actual: ' + (new Boolean(true) >> true)); -} - -//CHECK#3 -if (true >> new Boolean(true) !== 0) { - $ERROR('#3: true >> new Boolean(true) === 0. Actual: ' + (true >> new Boolean(true))); -} - -//CHECK#4 -if (new Boolean(true) >> new Boolean(true) !== 0) { - $ERROR('#4: new Boolean(true) >> new Boolean(true) === 0. Actual: ' + (new Boolean(true) >> new Boolean(true))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A3_T1.2.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A3_T1.2.js deleted file mode 100644 index 8385d7509..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A3_T1.2.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.2_A3_T1.2; - * @section: 11.7.2; - * @assertion: Operator x >> y returns ToNumber(x) >> ToNumber(y); - * @description: Type(x) and Type(y) vary between primitive number and Number object; -*/ - -//CHECK#1 -if (1 >> 1 !== 0) { - $ERROR('#1: 1 >> 1 === 0. Actual: ' + (1 >> 1)); -} - -//CHECK#2 -if (new Number(1) >> 1 !== 0) { - $ERROR('#2: new Number(1) >> 1 === 0. Actual: ' + (new Number(1) >> 1)); -} - -//CHECK#3 -if (1 >> new Number(1) !== 0) { - $ERROR('#3: 1 >> new Number(1) === 0. Actual: ' + (1 >> new Number(1))); -} - -//CHECK#4 -if (new Number(1) >> new Number(1) !== 0) { - $ERROR('#4: new Number(1) >> new Number(1) === 0. Actual: ' + (new Number(1) >> new Number(1))); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A3_T1.3.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A3_T1.3.js deleted file mode 100644 index 690d27e5e..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A3_T1.3.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.2_A3_T1.3; - * @section: 11.7.2; - * @assertion: Operator x >> y returns ToNumber(x) >> ToNumber(y); - * @description: Type(x) and Type(y) vary between primitive string and String object; -*/ - -//CHECK#1 -if ("1" >> "1" !== 0) { - $ERROR('#1: "1" >> "1" === 0. Actual: ' + ("1" >> "1")); -} - -//CHECK#2 -if (new String("1") >> "1" !== 0) { - $ERROR('#2: new String("1") >> "1" === 0. Actual: ' + (new String("1") >> "1")); -} - -//CHECK#3 -if ("1" >> new String("1") !== 0) { - $ERROR('#3: "1" >> new String("1") === 0. Actual: ' + ("1" >> new String("1"))); -} - -//CHECK#4 -if (new String("1") >> new String("1") !== 0) { - $ERROR('#4: new String("1") >> new String("1") === 0. Actual: ' + (new String("1") >> new String("1"))); -} - -//CHECK#5 -if ("x" >> "1" !== 0) { - $ERROR('#5: "x" >> "1" === 0. Actual: ' + ("x" >> "1")); -} - -//CHECK#6 -if ("1" >> "x" !== 1) { - $ERROR('#6: "1" >> "x" === 1. Actual: ' + ("1" >> "x")); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A3_T1.4.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A3_T1.4.js deleted file mode 100644 index ba2d5ccbe..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A3_T1.4.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.2_A3_T1.4; - * @section: 11.7.2; - * @assertion: Operator x >> y returns ToNumber(x) >> ToNumber(y); - * @description: Type(x) and Type(y) vary between Null and Undefined; - */ - -//CHECK#1 -if (null >> undefined !== 0) { - $ERROR('#1: null >> undefined === 0. Actual: ' + (null >> undefined)); -} - -//CHECK#2 -if (undefined >> null !== 0) { - $ERROR('#2: undefined >> null === 0. Actual: ' + (undefined >> null)); -} - -//CHECK#3 -if (undefined >> undefined !== 0) { - $ERROR('#3: undefined >> undefined === 0. Actual: ' + (undefined >> undefined)); -} - -//CHECK#4 -if (null >> null !== 0) { - $ERROR('#4: null >> null === 0. Actual: ' + (null >> null)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A3_T1.5.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A3_T1.5.js deleted file mode 100644 index 134e3bf5d..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A3_T1.5.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.2_A3_T1.5; - * @section: 11.7.2; - * @assertion: Operator x >> y returns ToNumber(x) >> ToNumber(y); - * @description: Type(x) and Type(y) vary between Object object and Function object; - */ - -//CHECK#1 -if (({} >> function(){return 1}) !== 0) { - $ERROR('#1: ({} >> function(){return 1}) === 0. Actual: ' + (({} >> function(){return 1}))); -} - -//CHECK#2 -if ((function(){return 1} >> {}) !== 0) { - $ERROR('#2: (function(){return 1} >> {}) === 0. Actual: ' + ((function(){return 1} >> {}))); -} - -//CHECK#3 -if ((function(){return 1} >> function(){return 1}) !== 0) { - $ERROR('#3: (function(){return 1} >> function(){return 1}) === 0. Actual: ' + ((function(){return 1} >> function(){return 1}))); -} - -//CHECK#4 -if (({} >> {}) !== 0) { - $ERROR('#4: ({} >> {}) === 0. Actual: ' + (({} >> {}))); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A3_T2.1.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A3_T2.1.js deleted file mode 100644 index 10f291659..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A3_T2.1.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.2_A3_T2.1; - * @section: 11.7.2; - * @assertion: Operator x >> y returns ToNumber(x) >> ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Boolean (primitive and object); - */ - -//CHECK#1 -if (true >> 1 !== 0) { - $ERROR('#1: true >> 1 === 0. Actual: ' + (true >> 1)); -} - -//CHECK#2 -if (1 >> true !== 0) { - $ERROR('#2: 1 >> true === 0. Actual: ' + (1 >> true)); -} - -//CHECK#3 -if (new Boolean(true) >> 1 !== 0) { - $ERROR('#3: new Boolean(true) >> 1 === 0. Actual: ' + (new Boolean(true) >> 1)); -} - -//CHECK#4 -if (1 >> new Boolean(true) !== 0) { - $ERROR('#4: 1 >> new Boolean(true) === 0. Actual: ' + (1 >> new Boolean(true))); -} - -//CHECK#5 -if (true >> new Number(1) !== 0) { - $ERROR('#5: true >> new Number(1) === 0. Actual: ' + (true >> new Number(1))); -} - -//CHECK#6 -if (new Number(1) >> true !== 0) { - $ERROR('#6: new Number(1) >> true === 0. Actual: ' + (new Number(1) >> true)); -} - -//CHECK#7 -if (new Boolean(true) >> new Number(1) !== 0) { - $ERROR('#7: new Boolean(true) >> new Number(1) === 0. Actual: ' + (new Boolean(true) >> new Number(1))); -} - -//CHECK#8 -if (new Number(1) >> new Boolean(true) !== 0) { - $ERROR('#8: new Number(1) >> new Boolean(true) === 0. Actual: ' + (new Number(1) >> new Boolean(true))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A3_T2.2.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A3_T2.2.js deleted file mode 100644 index 7a2078ebc..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A3_T2.2.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.2_A3_T2.2; - * @section: 11.7.2; - * @assertion: Operator x >> y returns ToNumber(x) >> ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and String (primitive and object); -*/ - -//CHECK#1 -if ("1" >> 1 !== 0) { - $ERROR('#1: "1" >> 1 === 0. Actual: ' + ("1" >> 1)); -} - -//CHECK#2 -if (1 >> "1" !== 0) { - $ERROR('#2: 1 >> "1" === 0. Actual: ' + (1 >> "1")); -} - -//CHECK#3 -if (new String("1") >> 1 !== 0) { - $ERROR('#3: new String("1") >> 1 === 0. Actual: ' + (new String("1") >> 1)); -} - -//CHECK#4 -if (1 >> new String("1") !== 0) { - $ERROR('#4: 1 >> new String("1") === 0. Actual: ' + (1 >> new String("1"))); -} - -//CHECK#5 -if ("1" >> new Number(1) !== 0) { - $ERROR('#5: "1" >> new Number(1) === 0. Actual: ' + ("1" >> new Number(1))); -} - -//CHECK#6 -if (new Number(1) >> "1" !== 0) { - $ERROR('#6: new Number(1) >> "1" === 0. Actual: ' + (new Number(1) >> "1")); -} - -//CHECK#7 -if (new String("1") >> new Number(1) !== 0) { - $ERROR('#7: new String("1") >> new Number(1) === 0. Actual: ' + (new String("1") >> new Number(1))); -} - -//CHECK#8 -if (new Number(1) >> new String("1") !== 0) { - $ERROR('#8: new Number(1) >> new String("1") === 0. Actual: ' + (new Number(1) >> new String("1"))); -} - -//CHECK#9 -if ("x" >> 1 !== 0) { - $ERROR('#9: "x" >> 1 === 0. Actual: ' + ("x" >> 1)); -} - -//CHECK#10 -if (1 >> "x" !== 1) { - $ERROR('#10: 1 >> "x" === 1. Actual: ' + (1 >> "x")); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A3_T2.3.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A3_T2.3.js deleted file mode 100644 index 0b148f33d..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A3_T2.3.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.2_A3_T2.3; - * @section: 11.7.2; - * @assertion: Operator x >> y returns ToNumber(x) >> ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Null; - */ - -//CHECK#1 -if (1 >> null !== 1) { - $ERROR('#1: 1 >> null === 1. Actual: ' + (1 >> null)); -} - -//CHECK#2 -if (null >> 1 !== 0) { - $ERROR('#2: null >> 1 === 0. Actual: ' + (null >> 1)); -} - -//CHECK#3 -if (new Number(1) >> null !== 1) { - $ERROR('#3: new Number(1) >> null === 1. Actual: ' + (new Number(1) >> null)); -} - -//CHECK#4 -if (null >> new Number(1) !== 0) { - $ERROR('#4: null >> new Number(1) === 0. Actual: ' + (null >> new Number(1))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A3_T2.4.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A3_T2.4.js deleted file mode 100644 index f7f461f66..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A3_T2.4.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.2_A3_T2.4; - * @section: 11.7.2; - * @assertion: Operator x >> y returns ToNumber(x) >> ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Undefined; - */ - -//CHECK#1 -if (1 >> undefined !== 1) { - $ERROR('#1: 1 >> undefined === 1. Actual: ' + (1 >> undefined)); -} - -//CHECK#2 -if (undefined >> 1 !== 0) { - $ERROR('#2: undefined >> 1 === 0. Actual: ' + (undefined >> 1)); -} - -//CHECK#3 -if (new Number(1) >> undefined !== 1) { - $ERROR('#3: new Number(1) >> undefined === 1. Actual: ' + (new Number(1) >> undefined)); -} - -//CHECK#4 -if (undefined >> new Number(1) !== 0) { - $ERROR('#4: undefined >> new Number(1) === 0. Actual: ' + (undefined >> new Number(1))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A3_T2.5.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A3_T2.5.js deleted file mode 100644 index 6c5d897be..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A3_T2.5.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.2_A3_T2.5; - * @section: 11.7.2; - * @assertion: Operator x >> y returns ToNumber(x) >> ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between String (primitive or object) and Boolean (primitive and object); -*/ - -//CHECK#1 -if (true >> "1" !== 0) { - $ERROR('#1: true >> "1" === 0. Actual: ' + (true >> "1")); -} - -//CHECK#2 -if ("1" >> true !== 0) { - $ERROR('#2: "1" >> true === 0. Actual: ' + ("1" >> true)); -} - -//CHECK#3 -if (new Boolean(true) >> "1" !== 0) { - $ERROR('#3: new Boolean(true) >> "1" === 0. Actual: ' + (new Boolean(true) >> "1")); -} - -//CHECK#4 -if ("1" >> new Boolean(true) !== 0) { - $ERROR('#4: "1" >> new Boolean(true) === 0. Actual: ' + ("1" >> new Boolean(true))); -} - -//CHECK#5 -if (true >> new String("1") !== 0) { - $ERROR('#5: true >> new String("1") === 0. Actual: ' + (true >> new String("1"))); -} - -//CHECK#6 -if (new String("1") >> true !== 0) { - $ERROR('#6: new String("1") >> true === 0. Actual: ' + (new String("1") >> true)); -} - -//CHECK#7 -if (new Boolean(true) >> new String("1") !== 0) { - $ERROR('#7: new Boolean(true) >> new String("1") === 0. Actual: ' + (new Boolean(true) >> new String("1"))); -} - -//CHECK#8 -if (new String("1") >> new Boolean(true) !== 0) { - $ERROR('#8: new String("1") >> new Boolean(true) === 0. Actual: ' + (new String("1") >> new Boolean(true))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A3_T2.6.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A3_T2.6.js deleted file mode 100644 index 567d6b773..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A3_T2.6.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.2_A3_T2.6; - * @section: 11.7.2; - * @assertion: Operator x >> y returns ToNumber(x) >> ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between String (primitive or object) and Undefined; - */ - -//CHECK#1 -if ("1" >> undefined !== 1) { - $ERROR('#1: "1" >> undefined === 1. Actual: ' + ("1" >> undefined)); -} - -//CHECK#2 -if (undefined >> "1" !== 0) { - $ERROR('#2: undefined >> "1" === 0. Actual: ' + (undefined >> "1")); -} - -//CHECK#3 -if (new String("1") >> undefined !== 1) { - $ERROR('#3: new String("1") >> undefined === 1. Actual: ' + (new String("1") >> undefined)); -} - -//CHECK#4 -if (undefined >> new String("1") !== 0) { - $ERROR('#4: undefined >> new String("1") === 0. Actual: ' + (undefined >> new String("1"))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A3_T2.7.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A3_T2.7.js deleted file mode 100644 index 5e254c66b..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A3_T2.7.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.2_A3_T2.7; - * @section: 11.7.2; - * @assertion: Operator x >> y returns ToNumber(x) >> ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between String (primitive or object) and Null; - */ - -//CHECK#1 -if ("1" >> null !== 1) { - $ERROR('#1: "1" >> null === 1. Actual: ' + ("1" >> null)); -} - -//CHECK#2 -if (null >> "1" !== 0) { - $ERROR('#2: null >> "1" === 0. Actual: ' + (null >> "1")); -} - -//CHECK#3 -if (new String("1") >> null !== 1) { - $ERROR('#3: new String("1") >> null === 1. Actual: ' + (new String("1") >> null)); -} - -//CHECK#4 -if (null >> new String("1") !== 0) { - $ERROR('#4: null >> new String("1") === 0. Actual: ' + (null >> new String("1"))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A3_T2.8.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A3_T2.8.js deleted file mode 100644 index 7f37aa219..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A3_T2.8.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.2_A3_T2.8; - * @section: 11.7.2; - * @assertion: Operator x >> y returns ToNumber(x) >> ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Undefined; - */ - -//CHECK#1 -if (true >> undefined !== 1) { - $ERROR('#1: true >> undefined === 1. Actual: ' + (true >> undefined)); -} - -//CHECK#2 -if (undefined >> true !== 0) { - $ERROR('#2: undefined >> true === 0. Actual: ' + (undefined >> true)); -} - -//CHECK#3 -if (new Boolean(true) >> undefined !== 1) { - $ERROR('#3: new Boolean(true) >> undefined === 1. Actual: ' + (new Boolean(true) >> undefined)); -} - -//CHECK#4 -if (undefined >> new Boolean(true) !== 0) { - $ERROR('#4: undefined >> new Boolean(true) === 0. Actual: ' + (undefined >> new Boolean(true))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A3_T2.9.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A3_T2.9.js deleted file mode 100644 index 733306fba..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A3_T2.9.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.2_A3_T2.9; - * @section: 11.7.2; - * @assertion: Operator x >> y returns ToNumber(x) >> ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Null; - */ - -//CHECK#1 -if (true >> null !== 1) { - $ERROR('#1: true >> null === 1. Actual: ' + (true >> null)); -} - -//CHECK#2 -if (null >> true !== 0) { - $ERROR('#2: null >> true === 0. Actual: ' + (null >> true)); -} - -//CHECK#3 -if (new Boolean(true) >> null !== 1) { - $ERROR('#3: new Boolean(true) >> null === 1. Actual: ' + (new Boolean(true) >> null)); -} - -//CHECK#4 -if (null >> new Boolean(true) !== 0) { - $ERROR('#4: null >> new Boolean(true) === 0. Actual: ' + (null >> new Boolean(true))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A4_T1.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A4_T1.js deleted file mode 100644 index 1369a8649..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A4_T1.js +++ /dev/null @@ -1,2570 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.2_A4_T1; - * @section: 11.7.2; - * @assertion: Check x >> y operator in distinct points; - * @description: ShiftExpression = -2^n, n = 0...15; - */ - -//CHECK - -if (-1 >> 0 !== -1) { - $ERROR('#1: -1 >> 0 === -1. Actual: ' + (-1 >> 0)); -} - - -if (-2 >> 0 !== -2) { - $ERROR('#2: -2 >> 0 === -2. Actual: ' + (-2 >> 0)); -} - - -if (-4 >> 0 !== -4) { - $ERROR('#3: -4 >> 0 === -4. Actual: ' + (-4 >> 0)); -} - - -if (-8 >> 0 !== -8) { - $ERROR('#4: -8 >> 0 === -8. Actual: ' + (-8 >> 0)); -} - - -if (-16 >> 0 !== -16) { - $ERROR('#5: -16 >> 0 === -16. Actual: ' + (-16 >> 0)); -} - - -if (-32 >> 0 !== -32) { - $ERROR('#6: -32 >> 0 === -32. Actual: ' + (-32 >> 0)); -} - - -if (-64 >> 0 !== -64) { - $ERROR('#7: -64 >> 0 === -64. Actual: ' + (-64 >> 0)); -} - - -if (-128 >> 0 !== -128) { - $ERROR('#8: -128 >> 0 === -128. Actual: ' + (-128 >> 0)); -} - - -if (-256 >> 0 !== -256) { - $ERROR('#9: -256 >> 0 === -256. Actual: ' + (-256 >> 0)); -} - - -if (-512 >> 0 !== -512) { - $ERROR('#10: -512 >> 0 === -512. Actual: ' + (-512 >> 0)); -} - - -if (-1024 >> 0 !== -1024) { - $ERROR('#11: -1024 >> 0 === -1024. Actual: ' + (-1024 >> 0)); -} - - -if (-2048 >> 0 !== -2048) { - $ERROR('#12: -2048 >> 0 === -2048. Actual: ' + (-2048 >> 0)); -} - - -if (-4096 >> 0 !== -4096) { - $ERROR('#13: -4096 >> 0 === -4096. Actual: ' + (-4096 >> 0)); -} - - -if (-8192 >> 0 !== -8192) { - $ERROR('#14: -8192 >> 0 === -8192. Actual: ' + (-8192 >> 0)); -} - - -if (-16384 >> 0 !== -16384) { - $ERROR('#15: -16384 >> 0 === -16384. Actual: ' + (-16384 >> 0)); -} - - -if (-32768 >> 0 !== -32768) { - $ERROR('#16: -32768 >> 0 === -32768. Actual: ' + (-32768 >> 0)); -} - - -if (-65536 >> 0 !== -65536) { - $ERROR('#17: -65536 >> 0 === -65536. Actual: ' + (-65536 >> 0)); -} - - -if (-131072 >> 0 !== -131072) { - $ERROR('#18: -131072 >> 0 === -131072. Actual: ' + (-131072 >> 0)); -} - - -if (-262144 >> 0 !== -262144) { - $ERROR('#19: -262144 >> 0 === -262144. Actual: ' + (-262144 >> 0)); -} - - -if (-524288 >> 0 !== -524288) { - $ERROR('#20: -524288 >> 0 === -524288. Actual: ' + (-524288 >> 0)); -} - - -if (-1048576 >> 0 !== -1048576) { - $ERROR('#21: -1048576 >> 0 === -1048576. Actual: ' + (-1048576 >> 0)); -} - - -if (-2097152 >> 0 !== -2097152) { - $ERROR('#22: -2097152 >> 0 === -2097152. Actual: ' + (-2097152 >> 0)); -} - - -if (-4194304 >> 0 !== -4194304) { - $ERROR('#23: -4194304 >> 0 === -4194304. Actual: ' + (-4194304 >> 0)); -} - - -if (-8388608 >> 0 !== -8388608) { - $ERROR('#24: -8388608 >> 0 === -8388608. Actual: ' + (-8388608 >> 0)); -} - - -if (-16777216 >> 0 !== -16777216) { - $ERROR('#25: -16777216 >> 0 === -16777216. Actual: ' + (-16777216 >> 0)); -} - - -if (-33554432 >> 0 !== -33554432) { - $ERROR('#26: -33554432 >> 0 === -33554432. Actual: ' + (-33554432 >> 0)); -} - - -if (-67108864 >> 0 !== -67108864) { - $ERROR('#27: -67108864 >> 0 === -67108864. Actual: ' + (-67108864 >> 0)); -} - - -if (-134217728 >> 0 !== -134217728) { - $ERROR('#28: -134217728 >> 0 === -134217728. Actual: ' + (-134217728 >> 0)); -} - - -if (-268435456 >> 0 !== -268435456) { - $ERROR('#29: -268435456 >> 0 === -268435456. Actual: ' + (-268435456 >> 0)); -} - - -if (-536870912 >> 0 !== -536870912) { - $ERROR('#30: -536870912 >> 0 === -536870912. Actual: ' + (-536870912 >> 0)); -} - - -if (-1073741824 >> 0 !== -1073741824) { - $ERROR('#31: -1073741824 >> 0 === -1073741824. Actual: ' + (-1073741824 >> 0)); -} - - -if (-2147483648 >> 0 !== -2147483648) { - $ERROR('#32: -2147483648 >> 0 === -2147483648. Actual: ' + (-2147483648 >> 0)); -} - - -if (-1 >> 1 !== -1) { - $ERROR('#33: -1 >> 1 === -1. Actual: ' + (-1 >> 1)); -} - - -if (-2 >> 1 !== -1) { - $ERROR('#34: -2 >> 1 === -1. Actual: ' + (-2 >> 1)); -} - - -if (-4 >> 1 !== -2) { - $ERROR('#35: -4 >> 1 === -2. Actual: ' + (-4 >> 1)); -} - - -if (-8 >> 1 !== -4) { - $ERROR('#36: -8 >> 1 === -4. Actual: ' + (-8 >> 1)); -} - - -if (-16 >> 1 !== -8) { - $ERROR('#37: -16 >> 1 === -8. Actual: ' + (-16 >> 1)); -} - - -if (-32 >> 1 !== -16) { - $ERROR('#38: -32 >> 1 === -16. Actual: ' + (-32 >> 1)); -} - - -if (-64 >> 1 !== -32) { - $ERROR('#39: -64 >> 1 === -32. Actual: ' + (-64 >> 1)); -} - - -if (-128 >> 1 !== -64) { - $ERROR('#40: -128 >> 1 === -64. Actual: ' + (-128 >> 1)); -} - - -if (-256 >> 1 !== -128) { - $ERROR('#41: -256 >> 1 === -128. Actual: ' + (-256 >> 1)); -} - - -if (-512 >> 1 !== -256) { - $ERROR('#42: -512 >> 1 === -256. Actual: ' + (-512 >> 1)); -} - - -if (-1024 >> 1 !== -512) { - $ERROR('#43: -1024 >> 1 === -512. Actual: ' + (-1024 >> 1)); -} - - -if (-2048 >> 1 !== -1024) { - $ERROR('#44: -2048 >> 1 === -1024. Actual: ' + (-2048 >> 1)); -} - - -if (-4096 >> 1 !== -2048) { - $ERROR('#45: -4096 >> 1 === -2048. Actual: ' + (-4096 >> 1)); -} - - -if (-8192 >> 1 !== -4096) { - $ERROR('#46: -8192 >> 1 === -4096. Actual: ' + (-8192 >> 1)); -} - - -if (-16384 >> 1 !== -8192) { - $ERROR('#47: -16384 >> 1 === -8192. Actual: ' + (-16384 >> 1)); -} - - -if (-32768 >> 1 !== -16384) { - $ERROR('#48: -32768 >> 1 === -16384. Actual: ' + (-32768 >> 1)); -} - - -if (-65536 >> 1 !== -32768) { - $ERROR('#49: -65536 >> 1 === -32768. Actual: ' + (-65536 >> 1)); -} - - -if (-131072 >> 1 !== -65536) { - $ERROR('#50: -131072 >> 1 === -65536. Actual: ' + (-131072 >> 1)); -} - - -if (-262144 >> 1 !== -131072) { - $ERROR('#51: -262144 >> 1 === -131072. Actual: ' + (-262144 >> 1)); -} - - -if (-524288 >> 1 !== -262144) { - $ERROR('#52: -524288 >> 1 === -262144. Actual: ' + (-524288 >> 1)); -} - - -if (-1048576 >> 1 !== -524288) { - $ERROR('#53: -1048576 >> 1 === -524288. Actual: ' + (-1048576 >> 1)); -} - - -if (-2097152 >> 1 !== -1048576) { - $ERROR('#54: -2097152 >> 1 === -1048576. Actual: ' + (-2097152 >> 1)); -} - - -if (-4194304 >> 1 !== -2097152) { - $ERROR('#55: -4194304 >> 1 === -2097152. Actual: ' + (-4194304 >> 1)); -} - - -if (-8388608 >> 1 !== -4194304) { - $ERROR('#56: -8388608 >> 1 === -4194304. Actual: ' + (-8388608 >> 1)); -} - - -if (-16777216 >> 1 !== -8388608) { - $ERROR('#57: -16777216 >> 1 === -8388608. Actual: ' + (-16777216 >> 1)); -} - - -if (-33554432 >> 1 !== -16777216) { - $ERROR('#58: -33554432 >> 1 === -16777216. Actual: ' + (-33554432 >> 1)); -} - - -if (-67108864 >> 1 !== -33554432) { - $ERROR('#59: -67108864 >> 1 === -33554432. Actual: ' + (-67108864 >> 1)); -} - - -if (-134217728 >> 1 !== -67108864) { - $ERROR('#60: -134217728 >> 1 === -67108864. Actual: ' + (-134217728 >> 1)); -} - - -if (-268435456 >> 1 !== -134217728) { - $ERROR('#61: -268435456 >> 1 === -134217728. Actual: ' + (-268435456 >> 1)); -} - - -if (-536870912 >> 1 !== -268435456) { - $ERROR('#62: -536870912 >> 1 === -268435456. Actual: ' + (-536870912 >> 1)); -} - - -if (-1073741824 >> 1 !== -536870912) { - $ERROR('#63: -1073741824 >> 1 === -536870912. Actual: ' + (-1073741824 >> 1)); -} - - -if (-2147483648 >> 1 !== -1073741824) { - $ERROR('#64: -2147483648 >> 1 === -1073741824. Actual: ' + (-2147483648 >> 1)); -} - - -if (-1 >> 2 !== -1) { - $ERROR('#65: -1 >> 2 === -1. Actual: ' + (-1 >> 2)); -} - - -if (-2 >> 2 !== -1) { - $ERROR('#66: -2 >> 2 === -1. Actual: ' + (-2 >> 2)); -} - - -if (-4 >> 2 !== -1) { - $ERROR('#67: -4 >> 2 === -1. Actual: ' + (-4 >> 2)); -} - - -if (-8 >> 2 !== -2) { - $ERROR('#68: -8 >> 2 === -2. Actual: ' + (-8 >> 2)); -} - - -if (-16 >> 2 !== -4) { - $ERROR('#69: -16 >> 2 === -4. Actual: ' + (-16 >> 2)); -} - - -if (-32 >> 2 !== -8) { - $ERROR('#70: -32 >> 2 === -8. Actual: ' + (-32 >> 2)); -} - - -if (-64 >> 2 !== -16) { - $ERROR('#71: -64 >> 2 === -16. Actual: ' + (-64 >> 2)); -} - - -if (-128 >> 2 !== -32) { - $ERROR('#72: -128 >> 2 === -32. Actual: ' + (-128 >> 2)); -} - - -if (-256 >> 2 !== -64) { - $ERROR('#73: -256 >> 2 === -64. Actual: ' + (-256 >> 2)); -} - - -if (-512 >> 2 !== -128) { - $ERROR('#74: -512 >> 2 === -128. Actual: ' + (-512 >> 2)); -} - - -if (-1024 >> 2 !== -256) { - $ERROR('#75: -1024 >> 2 === -256. Actual: ' + (-1024 >> 2)); -} - - -if (-2048 >> 2 !== -512) { - $ERROR('#76: -2048 >> 2 === -512. Actual: ' + (-2048 >> 2)); -} - - -if (-4096 >> 2 !== -1024) { - $ERROR('#77: -4096 >> 2 === -1024. Actual: ' + (-4096 >> 2)); -} - - -if (-8192 >> 2 !== -2048) { - $ERROR('#78: -8192 >> 2 === -2048. Actual: ' + (-8192 >> 2)); -} - - -if (-16384 >> 2 !== -4096) { - $ERROR('#79: -16384 >> 2 === -4096. Actual: ' + (-16384 >> 2)); -} - - -if (-32768 >> 2 !== -8192) { - $ERROR('#80: -32768 >> 2 === -8192. Actual: ' + (-32768 >> 2)); -} - - -if (-65536 >> 2 !== -16384) { - $ERROR('#81: -65536 >> 2 === -16384. Actual: ' + (-65536 >> 2)); -} - - -if (-131072 >> 2 !== -32768) { - $ERROR('#82: -131072 >> 2 === -32768. Actual: ' + (-131072 >> 2)); -} - - -if (-262144 >> 2 !== -65536) { - $ERROR('#83: -262144 >> 2 === -65536. Actual: ' + (-262144 >> 2)); -} - - -if (-524288 >> 2 !== -131072) { - $ERROR('#84: -524288 >> 2 === -131072. Actual: ' + (-524288 >> 2)); -} - - -if (-1048576 >> 2 !== -262144) { - $ERROR('#85: -1048576 >> 2 === -262144. Actual: ' + (-1048576 >> 2)); -} - - -if (-2097152 >> 2 !== -524288) { - $ERROR('#86: -2097152 >> 2 === -524288. Actual: ' + (-2097152 >> 2)); -} - - -if (-4194304 >> 2 !== -1048576) { - $ERROR('#87: -4194304 >> 2 === -1048576. Actual: ' + (-4194304 >> 2)); -} - - -if (-8388608 >> 2 !== -2097152) { - $ERROR('#88: -8388608 >> 2 === -2097152. Actual: ' + (-8388608 >> 2)); -} - - -if (-16777216 >> 2 !== -4194304) { - $ERROR('#89: -16777216 >> 2 === -4194304. Actual: ' + (-16777216 >> 2)); -} - - -if (-33554432 >> 2 !== -8388608) { - $ERROR('#90: -33554432 >> 2 === -8388608. Actual: ' + (-33554432 >> 2)); -} - - -if (-67108864 >> 2 !== -16777216) { - $ERROR('#91: -67108864 >> 2 === -16777216. Actual: ' + (-67108864 >> 2)); -} - - -if (-134217728 >> 2 !== -33554432) { - $ERROR('#92: -134217728 >> 2 === -33554432. Actual: ' + (-134217728 >> 2)); -} - - -if (-268435456 >> 2 !== -67108864) { - $ERROR('#93: -268435456 >> 2 === -67108864. Actual: ' + (-268435456 >> 2)); -} - - -if (-536870912 >> 2 !== -134217728) { - $ERROR('#94: -536870912 >> 2 === -134217728. Actual: ' + (-536870912 >> 2)); -} - - -if (-1073741824 >> 2 !== -268435456) { - $ERROR('#95: -1073741824 >> 2 === -268435456. Actual: ' + (-1073741824 >> 2)); -} - - -if (-2147483648 >> 2 !== -536870912) { - $ERROR('#96: -2147483648 >> 2 === -536870912. Actual: ' + (-2147483648 >> 2)); -} - - -if (-1 >> 3 !== -1) { - $ERROR('#97: -1 >> 3 === -1. Actual: ' + (-1 >> 3)); -} - - -if (-2 >> 3 !== -1) { - $ERROR('#98: -2 >> 3 === -1. Actual: ' + (-2 >> 3)); -} - - -if (-4 >> 3 !== -1) { - $ERROR('#99: -4 >> 3 === -1. Actual: ' + (-4 >> 3)); -} - - -if (-8 >> 3 !== -1) { - $ERROR('#100: -8 >> 3 === -1. Actual: ' + (-8 >> 3)); -} - - -if (-16 >> 3 !== -2) { - $ERROR('#101: -16 >> 3 === -2. Actual: ' + (-16 >> 3)); -} - - -if (-32 >> 3 !== -4) { - $ERROR('#102: -32 >> 3 === -4. Actual: ' + (-32 >> 3)); -} - - -if (-64 >> 3 !== -8) { - $ERROR('#103: -64 >> 3 === -8. Actual: ' + (-64 >> 3)); -} - - -if (-128 >> 3 !== -16) { - $ERROR('#104: -128 >> 3 === -16. Actual: ' + (-128 >> 3)); -} - - -if (-256 >> 3 !== -32) { - $ERROR('#105: -256 >> 3 === -32. Actual: ' + (-256 >> 3)); -} - - -if (-512 >> 3 !== -64) { - $ERROR('#106: -512 >> 3 === -64. Actual: ' + (-512 >> 3)); -} - - -if (-1024 >> 3 !== -128) { - $ERROR('#107: -1024 >> 3 === -128. Actual: ' + (-1024 >> 3)); -} - - -if (-2048 >> 3 !== -256) { - $ERROR('#108: -2048 >> 3 === -256. Actual: ' + (-2048 >> 3)); -} - - -if (-4096 >> 3 !== -512) { - $ERROR('#109: -4096 >> 3 === -512. Actual: ' + (-4096 >> 3)); -} - - -if (-8192 >> 3 !== -1024) { - $ERROR('#110: -8192 >> 3 === -1024. Actual: ' + (-8192 >> 3)); -} - - -if (-16384 >> 3 !== -2048) { - $ERROR('#111: -16384 >> 3 === -2048. Actual: ' + (-16384 >> 3)); -} - - -if (-32768 >> 3 !== -4096) { - $ERROR('#112: -32768 >> 3 === -4096. Actual: ' + (-32768 >> 3)); -} - - -if (-65536 >> 3 !== -8192) { - $ERROR('#113: -65536 >> 3 === -8192. Actual: ' + (-65536 >> 3)); -} - - -if (-131072 >> 3 !== -16384) { - $ERROR('#114: -131072 >> 3 === -16384. Actual: ' + (-131072 >> 3)); -} - - -if (-262144 >> 3 !== -32768) { - $ERROR('#115: -262144 >> 3 === -32768. Actual: ' + (-262144 >> 3)); -} - - -if (-524288 >> 3 !== -65536) { - $ERROR('#116: -524288 >> 3 === -65536. Actual: ' + (-524288 >> 3)); -} - - -if (-1048576 >> 3 !== -131072) { - $ERROR('#117: -1048576 >> 3 === -131072. Actual: ' + (-1048576 >> 3)); -} - - -if (-2097152 >> 3 !== -262144) { - $ERROR('#118: -2097152 >> 3 === -262144. Actual: ' + (-2097152 >> 3)); -} - - -if (-4194304 >> 3 !== -524288) { - $ERROR('#119: -4194304 >> 3 === -524288. Actual: ' + (-4194304 >> 3)); -} - - -if (-8388608 >> 3 !== -1048576) { - $ERROR('#120: -8388608 >> 3 === -1048576. Actual: ' + (-8388608 >> 3)); -} - - -if (-16777216 >> 3 !== -2097152) { - $ERROR('#121: -16777216 >> 3 === -2097152. Actual: ' + (-16777216 >> 3)); -} - - -if (-33554432 >> 3 !== -4194304) { - $ERROR('#122: -33554432 >> 3 === -4194304. Actual: ' + (-33554432 >> 3)); -} - - -if (-67108864 >> 3 !== -8388608) { - $ERROR('#123: -67108864 >> 3 === -8388608. Actual: ' + (-67108864 >> 3)); -} - - -if (-134217728 >> 3 !== -16777216) { - $ERROR('#124: -134217728 >> 3 === -16777216. Actual: ' + (-134217728 >> 3)); -} - - -if (-268435456 >> 3 !== -33554432) { - $ERROR('#125: -268435456 >> 3 === -33554432. Actual: ' + (-268435456 >> 3)); -} - - -if (-536870912 >> 3 !== -67108864) { - $ERROR('#126: -536870912 >> 3 === -67108864. Actual: ' + (-536870912 >> 3)); -} - - -if (-1073741824 >> 3 !== -134217728) { - $ERROR('#127: -1073741824 >> 3 === -134217728. Actual: ' + (-1073741824 >> 3)); -} - - -if (-2147483648 >> 3 !== -268435456) { - $ERROR('#128: -2147483648 >> 3 === -268435456. Actual: ' + (-2147483648 >> 3)); -} - - -if (-1 >> 4 !== -1) { - $ERROR('#129: -1 >> 4 === -1. Actual: ' + (-1 >> 4)); -} - - -if (-2 >> 4 !== -1) { - $ERROR('#130: -2 >> 4 === -1. Actual: ' + (-2 >> 4)); -} - - -if (-4 >> 4 !== -1) { - $ERROR('#131: -4 >> 4 === -1. Actual: ' + (-4 >> 4)); -} - - -if (-8 >> 4 !== -1) { - $ERROR('#132: -8 >> 4 === -1. Actual: ' + (-8 >> 4)); -} - - -if (-16 >> 4 !== -1) { - $ERROR('#133: -16 >> 4 === -1. Actual: ' + (-16 >> 4)); -} - - -if (-32 >> 4 !== -2) { - $ERROR('#134: -32 >> 4 === -2. Actual: ' + (-32 >> 4)); -} - - -if (-64 >> 4 !== -4) { - $ERROR('#135: -64 >> 4 === -4. Actual: ' + (-64 >> 4)); -} - - -if (-128 >> 4 !== -8) { - $ERROR('#136: -128 >> 4 === -8. Actual: ' + (-128 >> 4)); -} - - -if (-256 >> 4 !== -16) { - $ERROR('#137: -256 >> 4 === -16. Actual: ' + (-256 >> 4)); -} - - -if (-512 >> 4 !== -32) { - $ERROR('#138: -512 >> 4 === -32. Actual: ' + (-512 >> 4)); -} - - -if (-1024 >> 4 !== -64) { - $ERROR('#139: -1024 >> 4 === -64. Actual: ' + (-1024 >> 4)); -} - - -if (-2048 >> 4 !== -128) { - $ERROR('#140: -2048 >> 4 === -128. Actual: ' + (-2048 >> 4)); -} - - -if (-4096 >> 4 !== -256) { - $ERROR('#141: -4096 >> 4 === -256. Actual: ' + (-4096 >> 4)); -} - - -if (-8192 >> 4 !== -512) { - $ERROR('#142: -8192 >> 4 === -512. Actual: ' + (-8192 >> 4)); -} - - -if (-16384 >> 4 !== -1024) { - $ERROR('#143: -16384 >> 4 === -1024. Actual: ' + (-16384 >> 4)); -} - - -if (-32768 >> 4 !== -2048) { - $ERROR('#144: -32768 >> 4 === -2048. Actual: ' + (-32768 >> 4)); -} - - -if (-65536 >> 4 !== -4096) { - $ERROR('#145: -65536 >> 4 === -4096. Actual: ' + (-65536 >> 4)); -} - - -if (-131072 >> 4 !== -8192) { - $ERROR('#146: -131072 >> 4 === -8192. Actual: ' + (-131072 >> 4)); -} - - -if (-262144 >> 4 !== -16384) { - $ERROR('#147: -262144 >> 4 === -16384. Actual: ' + (-262144 >> 4)); -} - - -if (-524288 >> 4 !== -32768) { - $ERROR('#148: -524288 >> 4 === -32768. Actual: ' + (-524288 >> 4)); -} - - -if (-1048576 >> 4 !== -65536) { - $ERROR('#149: -1048576 >> 4 === -65536. Actual: ' + (-1048576 >> 4)); -} - - -if (-2097152 >> 4 !== -131072) { - $ERROR('#150: -2097152 >> 4 === -131072. Actual: ' + (-2097152 >> 4)); -} - - -if (-4194304 >> 4 !== -262144) { - $ERROR('#151: -4194304 >> 4 === -262144. Actual: ' + (-4194304 >> 4)); -} - - -if (-8388608 >> 4 !== -524288) { - $ERROR('#152: -8388608 >> 4 === -524288. Actual: ' + (-8388608 >> 4)); -} - - -if (-16777216 >> 4 !== -1048576) { - $ERROR('#153: -16777216 >> 4 === -1048576. Actual: ' + (-16777216 >> 4)); -} - - -if (-33554432 >> 4 !== -2097152) { - $ERROR('#154: -33554432 >> 4 === -2097152. Actual: ' + (-33554432 >> 4)); -} - - -if (-67108864 >> 4 !== -4194304) { - $ERROR('#155: -67108864 >> 4 === -4194304. Actual: ' + (-67108864 >> 4)); -} - - -if (-134217728 >> 4 !== -8388608) { - $ERROR('#156: -134217728 >> 4 === -8388608. Actual: ' + (-134217728 >> 4)); -} - - -if (-268435456 >> 4 !== -16777216) { - $ERROR('#157: -268435456 >> 4 === -16777216. Actual: ' + (-268435456 >> 4)); -} - - -if (-536870912 >> 4 !== -33554432) { - $ERROR('#158: -536870912 >> 4 === -33554432. Actual: ' + (-536870912 >> 4)); -} - - -if (-1073741824 >> 4 !== -67108864) { - $ERROR('#159: -1073741824 >> 4 === -67108864. Actual: ' + (-1073741824 >> 4)); -} - - -if (-2147483648 >> 4 !== -134217728) { - $ERROR('#160: -2147483648 >> 4 === -134217728. Actual: ' + (-2147483648 >> 4)); -} - - -if (-1 >> 5 !== -1) { - $ERROR('#161: -1 >> 5 === -1. Actual: ' + (-1 >> 5)); -} - - -if (-2 >> 5 !== -1) { - $ERROR('#162: -2 >> 5 === -1. Actual: ' + (-2 >> 5)); -} - - -if (-4 >> 5 !== -1) { - $ERROR('#163: -4 >> 5 === -1. Actual: ' + (-4 >> 5)); -} - - -if (-8 >> 5 !== -1) { - $ERROR('#164: -8 >> 5 === -1. Actual: ' + (-8 >> 5)); -} - - -if (-16 >> 5 !== -1) { - $ERROR('#165: -16 >> 5 === -1. Actual: ' + (-16 >> 5)); -} - - -if (-32 >> 5 !== -1) { - $ERROR('#166: -32 >> 5 === -1. Actual: ' + (-32 >> 5)); -} - - -if (-64 >> 5 !== -2) { - $ERROR('#167: -64 >> 5 === -2. Actual: ' + (-64 >> 5)); -} - - -if (-128 >> 5 !== -4) { - $ERROR('#168: -128 >> 5 === -4. Actual: ' + (-128 >> 5)); -} - - -if (-256 >> 5 !== -8) { - $ERROR('#169: -256 >> 5 === -8. Actual: ' + (-256 >> 5)); -} - - -if (-512 >> 5 !== -16) { - $ERROR('#170: -512 >> 5 === -16. Actual: ' + (-512 >> 5)); -} - - -if (-1024 >> 5 !== -32) { - $ERROR('#171: -1024 >> 5 === -32. Actual: ' + (-1024 >> 5)); -} - - -if (-2048 >> 5 !== -64) { - $ERROR('#172: -2048 >> 5 === -64. Actual: ' + (-2048 >> 5)); -} - - -if (-4096 >> 5 !== -128) { - $ERROR('#173: -4096 >> 5 === -128. Actual: ' + (-4096 >> 5)); -} - - -if (-8192 >> 5 !== -256) { - $ERROR('#174: -8192 >> 5 === -256. Actual: ' + (-8192 >> 5)); -} - - -if (-16384 >> 5 !== -512) { - $ERROR('#175: -16384 >> 5 === -512. Actual: ' + (-16384 >> 5)); -} - - -if (-32768 >> 5 !== -1024) { - $ERROR('#176: -32768 >> 5 === -1024. Actual: ' + (-32768 >> 5)); -} - - -if (-65536 >> 5 !== -2048) { - $ERROR('#177: -65536 >> 5 === -2048. Actual: ' + (-65536 >> 5)); -} - - -if (-131072 >> 5 !== -4096) { - $ERROR('#178: -131072 >> 5 === -4096. Actual: ' + (-131072 >> 5)); -} - - -if (-262144 >> 5 !== -8192) { - $ERROR('#179: -262144 >> 5 === -8192. Actual: ' + (-262144 >> 5)); -} - - -if (-524288 >> 5 !== -16384) { - $ERROR('#180: -524288 >> 5 === -16384. Actual: ' + (-524288 >> 5)); -} - - -if (-1048576 >> 5 !== -32768) { - $ERROR('#181: -1048576 >> 5 === -32768. Actual: ' + (-1048576 >> 5)); -} - - -if (-2097152 >> 5 !== -65536) { - $ERROR('#182: -2097152 >> 5 === -65536. Actual: ' + (-2097152 >> 5)); -} - - -if (-4194304 >> 5 !== -131072) { - $ERROR('#183: -4194304 >> 5 === -131072. Actual: ' + (-4194304 >> 5)); -} - - -if (-8388608 >> 5 !== -262144) { - $ERROR('#184: -8388608 >> 5 === -262144. Actual: ' + (-8388608 >> 5)); -} - - -if (-16777216 >> 5 !== -524288) { - $ERROR('#185: -16777216 >> 5 === -524288. Actual: ' + (-16777216 >> 5)); -} - - -if (-33554432 >> 5 !== -1048576) { - $ERROR('#186: -33554432 >> 5 === -1048576. Actual: ' + (-33554432 >> 5)); -} - - -if (-67108864 >> 5 !== -2097152) { - $ERROR('#187: -67108864 >> 5 === -2097152. Actual: ' + (-67108864 >> 5)); -} - - -if (-134217728 >> 5 !== -4194304) { - $ERROR('#188: -134217728 >> 5 === -4194304. Actual: ' + (-134217728 >> 5)); -} - - -if (-268435456 >> 5 !== -8388608) { - $ERROR('#189: -268435456 >> 5 === -8388608. Actual: ' + (-268435456 >> 5)); -} - - -if (-536870912 >> 5 !== -16777216) { - $ERROR('#190: -536870912 >> 5 === -16777216. Actual: ' + (-536870912 >> 5)); -} - - -if (-1073741824 >> 5 !== -33554432) { - $ERROR('#191: -1073741824 >> 5 === -33554432. Actual: ' + (-1073741824 >> 5)); -} - - -if (-2147483648 >> 5 !== -67108864) { - $ERROR('#192: -2147483648 >> 5 === -67108864. Actual: ' + (-2147483648 >> 5)); -} - - -if (-1 >> 6 !== -1) { - $ERROR('#193: -1 >> 6 === -1. Actual: ' + (-1 >> 6)); -} - - -if (-2 >> 6 !== -1) { - $ERROR('#194: -2 >> 6 === -1. Actual: ' + (-2 >> 6)); -} - - -if (-4 >> 6 !== -1) { - $ERROR('#195: -4 >> 6 === -1. Actual: ' + (-4 >> 6)); -} - - -if (-8 >> 6 !== -1) { - $ERROR('#196: -8 >> 6 === -1. Actual: ' + (-8 >> 6)); -} - - -if (-16 >> 6 !== -1) { - $ERROR('#197: -16 >> 6 === -1. Actual: ' + (-16 >> 6)); -} - - -if (-32 >> 6 !== -1) { - $ERROR('#198: -32 >> 6 === -1. Actual: ' + (-32 >> 6)); -} - - -if (-64 >> 6 !== -1) { - $ERROR('#199: -64 >> 6 === -1. Actual: ' + (-64 >> 6)); -} - - -if (-128 >> 6 !== -2) { - $ERROR('#200: -128 >> 6 === -2. Actual: ' + (-128 >> 6)); -} - - -if (-256 >> 6 !== -4) { - $ERROR('#201: -256 >> 6 === -4. Actual: ' + (-256 >> 6)); -} - - -if (-512 >> 6 !== -8) { - $ERROR('#202: -512 >> 6 === -8. Actual: ' + (-512 >> 6)); -} - - -if (-1024 >> 6 !== -16) { - $ERROR('#203: -1024 >> 6 === -16. Actual: ' + (-1024 >> 6)); -} - - -if (-2048 >> 6 !== -32) { - $ERROR('#204: -2048 >> 6 === -32. Actual: ' + (-2048 >> 6)); -} - - -if (-4096 >> 6 !== -64) { - $ERROR('#205: -4096 >> 6 === -64. Actual: ' + (-4096 >> 6)); -} - - -if (-8192 >> 6 !== -128) { - $ERROR('#206: -8192 >> 6 === -128. Actual: ' + (-8192 >> 6)); -} - - -if (-16384 >> 6 !== -256) { - $ERROR('#207: -16384 >> 6 === -256. Actual: ' + (-16384 >> 6)); -} - - -if (-32768 >> 6 !== -512) { - $ERROR('#208: -32768 >> 6 === -512. Actual: ' + (-32768 >> 6)); -} - - -if (-65536 >> 6 !== -1024) { - $ERROR('#209: -65536 >> 6 === -1024. Actual: ' + (-65536 >> 6)); -} - - -if (-131072 >> 6 !== -2048) { - $ERROR('#210: -131072 >> 6 === -2048. Actual: ' + (-131072 >> 6)); -} - - -if (-262144 >> 6 !== -4096) { - $ERROR('#211: -262144 >> 6 === -4096. Actual: ' + (-262144 >> 6)); -} - - -if (-524288 >> 6 !== -8192) { - $ERROR('#212: -524288 >> 6 === -8192. Actual: ' + (-524288 >> 6)); -} - - -if (-1048576 >> 6 !== -16384) { - $ERROR('#213: -1048576 >> 6 === -16384. Actual: ' + (-1048576 >> 6)); -} - - -if (-2097152 >> 6 !== -32768) { - $ERROR('#214: -2097152 >> 6 === -32768. Actual: ' + (-2097152 >> 6)); -} - - -if (-4194304 >> 6 !== -65536) { - $ERROR('#215: -4194304 >> 6 === -65536. Actual: ' + (-4194304 >> 6)); -} - - -if (-8388608 >> 6 !== -131072) { - $ERROR('#216: -8388608 >> 6 === -131072. Actual: ' + (-8388608 >> 6)); -} - - -if (-16777216 >> 6 !== -262144) { - $ERROR('#217: -16777216 >> 6 === -262144. Actual: ' + (-16777216 >> 6)); -} - - -if (-33554432 >> 6 !== -524288) { - $ERROR('#218: -33554432 >> 6 === -524288. Actual: ' + (-33554432 >> 6)); -} - - -if (-67108864 >> 6 !== -1048576) { - $ERROR('#219: -67108864 >> 6 === -1048576. Actual: ' + (-67108864 >> 6)); -} - - -if (-134217728 >> 6 !== -2097152) { - $ERROR('#220: -134217728 >> 6 === -2097152. Actual: ' + (-134217728 >> 6)); -} - - -if (-268435456 >> 6 !== -4194304) { - $ERROR('#221: -268435456 >> 6 === -4194304. Actual: ' + (-268435456 >> 6)); -} - - -if (-536870912 >> 6 !== -8388608) { - $ERROR('#222: -536870912 >> 6 === -8388608. Actual: ' + (-536870912 >> 6)); -} - - -if (-1073741824 >> 6 !== -16777216) { - $ERROR('#223: -1073741824 >> 6 === -16777216. Actual: ' + (-1073741824 >> 6)); -} - - -if (-2147483648 >> 6 !== -33554432) { - $ERROR('#224: -2147483648 >> 6 === -33554432. Actual: ' + (-2147483648 >> 6)); -} - - -if (-1 >> 7 !== -1) { - $ERROR('#225: -1 >> 7 === -1. Actual: ' + (-1 >> 7)); -} - - -if (-2 >> 7 !== -1) { - $ERROR('#226: -2 >> 7 === -1. Actual: ' + (-2 >> 7)); -} - - -if (-4 >> 7 !== -1) { - $ERROR('#227: -4 >> 7 === -1. Actual: ' + (-4 >> 7)); -} - - -if (-8 >> 7 !== -1) { - $ERROR('#228: -8 >> 7 === -1. Actual: ' + (-8 >> 7)); -} - - -if (-16 >> 7 !== -1) { - $ERROR('#229: -16 >> 7 === -1. Actual: ' + (-16 >> 7)); -} - - -if (-32 >> 7 !== -1) { - $ERROR('#230: -32 >> 7 === -1. Actual: ' + (-32 >> 7)); -} - - -if (-64 >> 7 !== -1) { - $ERROR('#231: -64 >> 7 === -1. Actual: ' + (-64 >> 7)); -} - - -if (-128 >> 7 !== -1) { - $ERROR('#232: -128 >> 7 === -1. Actual: ' + (-128 >> 7)); -} - - -if (-256 >> 7 !== -2) { - $ERROR('#233: -256 >> 7 === -2. Actual: ' + (-256 >> 7)); -} - - -if (-512 >> 7 !== -4) { - $ERROR('#234: -512 >> 7 === -4. Actual: ' + (-512 >> 7)); -} - - -if (-1024 >> 7 !== -8) { - $ERROR('#235: -1024 >> 7 === -8. Actual: ' + (-1024 >> 7)); -} - - -if (-2048 >> 7 !== -16) { - $ERROR('#236: -2048 >> 7 === -16. Actual: ' + (-2048 >> 7)); -} - - -if (-4096 >> 7 !== -32) { - $ERROR('#237: -4096 >> 7 === -32. Actual: ' + (-4096 >> 7)); -} - - -if (-8192 >> 7 !== -64) { - $ERROR('#238: -8192 >> 7 === -64. Actual: ' + (-8192 >> 7)); -} - - -if (-16384 >> 7 !== -128) { - $ERROR('#239: -16384 >> 7 === -128. Actual: ' + (-16384 >> 7)); -} - - -if (-32768 >> 7 !== -256) { - $ERROR('#240: -32768 >> 7 === -256. Actual: ' + (-32768 >> 7)); -} - - -if (-65536 >> 7 !== -512) { - $ERROR('#241: -65536 >> 7 === -512. Actual: ' + (-65536 >> 7)); -} - - -if (-131072 >> 7 !== -1024) { - $ERROR('#242: -131072 >> 7 === -1024. Actual: ' + (-131072 >> 7)); -} - - -if (-262144 >> 7 !== -2048) { - $ERROR('#243: -262144 >> 7 === -2048. Actual: ' + (-262144 >> 7)); -} - - -if (-524288 >> 7 !== -4096) { - $ERROR('#244: -524288 >> 7 === -4096. Actual: ' + (-524288 >> 7)); -} - - -if (-1048576 >> 7 !== -8192) { - $ERROR('#245: -1048576 >> 7 === -8192. Actual: ' + (-1048576 >> 7)); -} - - -if (-2097152 >> 7 !== -16384) { - $ERROR('#246: -2097152 >> 7 === -16384. Actual: ' + (-2097152 >> 7)); -} - - -if (-4194304 >> 7 !== -32768) { - $ERROR('#247: -4194304 >> 7 === -32768. Actual: ' + (-4194304 >> 7)); -} - - -if (-8388608 >> 7 !== -65536) { - $ERROR('#248: -8388608 >> 7 === -65536. Actual: ' + (-8388608 >> 7)); -} - - -if (-16777216 >> 7 !== -131072) { - $ERROR('#249: -16777216 >> 7 === -131072. Actual: ' + (-16777216 >> 7)); -} - - -if (-33554432 >> 7 !== -262144) { - $ERROR('#250: -33554432 >> 7 === -262144. Actual: ' + (-33554432 >> 7)); -} - - -if (-67108864 >> 7 !== -524288) { - $ERROR('#251: -67108864 >> 7 === -524288. Actual: ' + (-67108864 >> 7)); -} - - -if (-134217728 >> 7 !== -1048576) { - $ERROR('#252: -134217728 >> 7 === -1048576. Actual: ' + (-134217728 >> 7)); -} - - -if (-268435456 >> 7 !== -2097152) { - $ERROR('#253: -268435456 >> 7 === -2097152. Actual: ' + (-268435456 >> 7)); -} - - -if (-536870912 >> 7 !== -4194304) { - $ERROR('#254: -536870912 >> 7 === -4194304. Actual: ' + (-536870912 >> 7)); -} - - -if (-1073741824 >> 7 !== -8388608) { - $ERROR('#255: -1073741824 >> 7 === -8388608. Actual: ' + (-1073741824 >> 7)); -} - - -if (-2147483648 >> 7 !== -16777216) { - $ERROR('#256: -2147483648 >> 7 === -16777216. Actual: ' + (-2147483648 >> 7)); -} - - -if (-1 >> 8 !== -1) { - $ERROR('#257: -1 >> 8 === -1. Actual: ' + (-1 >> 8)); -} - - -if (-2 >> 8 !== -1) { - $ERROR('#258: -2 >> 8 === -1. Actual: ' + (-2 >> 8)); -} - - -if (-4 >> 8 !== -1) { - $ERROR('#259: -4 >> 8 === -1. Actual: ' + (-4 >> 8)); -} - - -if (-8 >> 8 !== -1) { - $ERROR('#260: -8 >> 8 === -1. Actual: ' + (-8 >> 8)); -} - - -if (-16 >> 8 !== -1) { - $ERROR('#261: -16 >> 8 === -1. Actual: ' + (-16 >> 8)); -} - - -if (-32 >> 8 !== -1) { - $ERROR('#262: -32 >> 8 === -1. Actual: ' + (-32 >> 8)); -} - - -if (-64 >> 8 !== -1) { - $ERROR('#263: -64 >> 8 === -1. Actual: ' + (-64 >> 8)); -} - - -if (-128 >> 8 !== -1) { - $ERROR('#264: -128 >> 8 === -1. Actual: ' + (-128 >> 8)); -} - - -if (-256 >> 8 !== -1) { - $ERROR('#265: -256 >> 8 === -1. Actual: ' + (-256 >> 8)); -} - - -if (-512 >> 8 !== -2) { - $ERROR('#266: -512 >> 8 === -2. Actual: ' + (-512 >> 8)); -} - - -if (-1024 >> 8 !== -4) { - $ERROR('#267: -1024 >> 8 === -4. Actual: ' + (-1024 >> 8)); -} - - -if (-2048 >> 8 !== -8) { - $ERROR('#268: -2048 >> 8 === -8. Actual: ' + (-2048 >> 8)); -} - - -if (-4096 >> 8 !== -16) { - $ERROR('#269: -4096 >> 8 === -16. Actual: ' + (-4096 >> 8)); -} - - -if (-8192 >> 8 !== -32) { - $ERROR('#270: -8192 >> 8 === -32. Actual: ' + (-8192 >> 8)); -} - - -if (-16384 >> 8 !== -64) { - $ERROR('#271: -16384 >> 8 === -64. Actual: ' + (-16384 >> 8)); -} - - -if (-32768 >> 8 !== -128) { - $ERROR('#272: -32768 >> 8 === -128. Actual: ' + (-32768 >> 8)); -} - - -if (-65536 >> 8 !== -256) { - $ERROR('#273: -65536 >> 8 === -256. Actual: ' + (-65536 >> 8)); -} - - -if (-131072 >> 8 !== -512) { - $ERROR('#274: -131072 >> 8 === -512. Actual: ' + (-131072 >> 8)); -} - - -if (-262144 >> 8 !== -1024) { - $ERROR('#275: -262144 >> 8 === -1024. Actual: ' + (-262144 >> 8)); -} - - -if (-524288 >> 8 !== -2048) { - $ERROR('#276: -524288 >> 8 === -2048. Actual: ' + (-524288 >> 8)); -} - - -if (-1048576 >> 8 !== -4096) { - $ERROR('#277: -1048576 >> 8 === -4096. Actual: ' + (-1048576 >> 8)); -} - - -if (-2097152 >> 8 !== -8192) { - $ERROR('#278: -2097152 >> 8 === -8192. Actual: ' + (-2097152 >> 8)); -} - - -if (-4194304 >> 8 !== -16384) { - $ERROR('#279: -4194304 >> 8 === -16384. Actual: ' + (-4194304 >> 8)); -} - - -if (-8388608 >> 8 !== -32768) { - $ERROR('#280: -8388608 >> 8 === -32768. Actual: ' + (-8388608 >> 8)); -} - - -if (-16777216 >> 8 !== -65536) { - $ERROR('#281: -16777216 >> 8 === -65536. Actual: ' + (-16777216 >> 8)); -} - - -if (-33554432 >> 8 !== -131072) { - $ERROR('#282: -33554432 >> 8 === -131072. Actual: ' + (-33554432 >> 8)); -} - - -if (-67108864 >> 8 !== -262144) { - $ERROR('#283: -67108864 >> 8 === -262144. Actual: ' + (-67108864 >> 8)); -} - - -if (-134217728 >> 8 !== -524288) { - $ERROR('#284: -134217728 >> 8 === -524288. Actual: ' + (-134217728 >> 8)); -} - - -if (-268435456 >> 8 !== -1048576) { - $ERROR('#285: -268435456 >> 8 === -1048576. Actual: ' + (-268435456 >> 8)); -} - - -if (-536870912 >> 8 !== -2097152) { - $ERROR('#286: -536870912 >> 8 === -2097152. Actual: ' + (-536870912 >> 8)); -} - - -if (-1073741824 >> 8 !== -4194304) { - $ERROR('#287: -1073741824 >> 8 === -4194304. Actual: ' + (-1073741824 >> 8)); -} - - -if (-2147483648 >> 8 !== -8388608) { - $ERROR('#288: -2147483648 >> 8 === -8388608. Actual: ' + (-2147483648 >> 8)); -} - - -if (-1 >> 9 !== -1) { - $ERROR('#289: -1 >> 9 === -1. Actual: ' + (-1 >> 9)); -} - - -if (-2 >> 9 !== -1) { - $ERROR('#290: -2 >> 9 === -1. Actual: ' + (-2 >> 9)); -} - - -if (-4 >> 9 !== -1) { - $ERROR('#291: -4 >> 9 === -1. Actual: ' + (-4 >> 9)); -} - - -if (-8 >> 9 !== -1) { - $ERROR('#292: -8 >> 9 === -1. Actual: ' + (-8 >> 9)); -} - - -if (-16 >> 9 !== -1) { - $ERROR('#293: -16 >> 9 === -1. Actual: ' + (-16 >> 9)); -} - - -if (-32 >> 9 !== -1) { - $ERROR('#294: -32 >> 9 === -1. Actual: ' + (-32 >> 9)); -} - - -if (-64 >> 9 !== -1) { - $ERROR('#295: -64 >> 9 === -1. Actual: ' + (-64 >> 9)); -} - - -if (-128 >> 9 !== -1) { - $ERROR('#296: -128 >> 9 === -1. Actual: ' + (-128 >> 9)); -} - - -if (-256 >> 9 !== -1) { - $ERROR('#297: -256 >> 9 === -1. Actual: ' + (-256 >> 9)); -} - - -if (-512 >> 9 !== -1) { - $ERROR('#298: -512 >> 9 === -1. Actual: ' + (-512 >> 9)); -} - - -if (-1024 >> 9 !== -2) { - $ERROR('#299: -1024 >> 9 === -2. Actual: ' + (-1024 >> 9)); -} - - -if (-2048 >> 9 !== -4) { - $ERROR('#300: -2048 >> 9 === -4. Actual: ' + (-2048 >> 9)); -} - - -if (-4096 >> 9 !== -8) { - $ERROR('#301: -4096 >> 9 === -8. Actual: ' + (-4096 >> 9)); -} - - -if (-8192 >> 9 !== -16) { - $ERROR('#302: -8192 >> 9 === -16. Actual: ' + (-8192 >> 9)); -} - - -if (-16384 >> 9 !== -32) { - $ERROR('#303: -16384 >> 9 === -32. Actual: ' + (-16384 >> 9)); -} - - -if (-32768 >> 9 !== -64) { - $ERROR('#304: -32768 >> 9 === -64. Actual: ' + (-32768 >> 9)); -} - - -if (-65536 >> 9 !== -128) { - $ERROR('#305: -65536 >> 9 === -128. Actual: ' + (-65536 >> 9)); -} - - -if (-131072 >> 9 !== -256) { - $ERROR('#306: -131072 >> 9 === -256. Actual: ' + (-131072 >> 9)); -} - - -if (-262144 >> 9 !== -512) { - $ERROR('#307: -262144 >> 9 === -512. Actual: ' + (-262144 >> 9)); -} - - -if (-524288 >> 9 !== -1024) { - $ERROR('#308: -524288 >> 9 === -1024. Actual: ' + (-524288 >> 9)); -} - - -if (-1048576 >> 9 !== -2048) { - $ERROR('#309: -1048576 >> 9 === -2048. Actual: ' + (-1048576 >> 9)); -} - - -if (-2097152 >> 9 !== -4096) { - $ERROR('#310: -2097152 >> 9 === -4096. Actual: ' + (-2097152 >> 9)); -} - - -if (-4194304 >> 9 !== -8192) { - $ERROR('#311: -4194304 >> 9 === -8192. Actual: ' + (-4194304 >> 9)); -} - - -if (-8388608 >> 9 !== -16384) { - $ERROR('#312: -8388608 >> 9 === -16384. Actual: ' + (-8388608 >> 9)); -} - - -if (-16777216 >> 9 !== -32768) { - $ERROR('#313: -16777216 >> 9 === -32768. Actual: ' + (-16777216 >> 9)); -} - - -if (-33554432 >> 9 !== -65536) { - $ERROR('#314: -33554432 >> 9 === -65536. Actual: ' + (-33554432 >> 9)); -} - - -if (-67108864 >> 9 !== -131072) { - $ERROR('#315: -67108864 >> 9 === -131072. Actual: ' + (-67108864 >> 9)); -} - - -if (-134217728 >> 9 !== -262144) { - $ERROR('#316: -134217728 >> 9 === -262144. Actual: ' + (-134217728 >> 9)); -} - - -if (-268435456 >> 9 !== -524288) { - $ERROR('#317: -268435456 >> 9 === -524288. Actual: ' + (-268435456 >> 9)); -} - - -if (-536870912 >> 9 !== -1048576) { - $ERROR('#318: -536870912 >> 9 === -1048576. Actual: ' + (-536870912 >> 9)); -} - - -if (-1073741824 >> 9 !== -2097152) { - $ERROR('#319: -1073741824 >> 9 === -2097152. Actual: ' + (-1073741824 >> 9)); -} - - -if (-2147483648 >> 9 !== -4194304) { - $ERROR('#320: -2147483648 >> 9 === -4194304. Actual: ' + (-2147483648 >> 9)); -} - - -if (-1 >> 10 !== -1) { - $ERROR('#321: -1 >> 10 === -1. Actual: ' + (-1 >> 10)); -} - - -if (-2 >> 10 !== -1) { - $ERROR('#322: -2 >> 10 === -1. Actual: ' + (-2 >> 10)); -} - - -if (-4 >> 10 !== -1) { - $ERROR('#323: -4 >> 10 === -1. Actual: ' + (-4 >> 10)); -} - - -if (-8 >> 10 !== -1) { - $ERROR('#324: -8 >> 10 === -1. Actual: ' + (-8 >> 10)); -} - - -if (-16 >> 10 !== -1) { - $ERROR('#325: -16 >> 10 === -1. Actual: ' + (-16 >> 10)); -} - - -if (-32 >> 10 !== -1) { - $ERROR('#326: -32 >> 10 === -1. Actual: ' + (-32 >> 10)); -} - - -if (-64 >> 10 !== -1) { - $ERROR('#327: -64 >> 10 === -1. Actual: ' + (-64 >> 10)); -} - - -if (-128 >> 10 !== -1) { - $ERROR('#328: -128 >> 10 === -1. Actual: ' + (-128 >> 10)); -} - - -if (-256 >> 10 !== -1) { - $ERROR('#329: -256 >> 10 === -1. Actual: ' + (-256 >> 10)); -} - - -if (-512 >> 10 !== -1) { - $ERROR('#330: -512 >> 10 === -1. Actual: ' + (-512 >> 10)); -} - - -if (-1024 >> 10 !== -1) { - $ERROR('#331: -1024 >> 10 === -1. Actual: ' + (-1024 >> 10)); -} - - -if (-2048 >> 10 !== -2) { - $ERROR('#332: -2048 >> 10 === -2. Actual: ' + (-2048 >> 10)); -} - - -if (-4096 >> 10 !== -4) { - $ERROR('#333: -4096 >> 10 === -4. Actual: ' + (-4096 >> 10)); -} - - -if (-8192 >> 10 !== -8) { - $ERROR('#334: -8192 >> 10 === -8. Actual: ' + (-8192 >> 10)); -} - - -if (-16384 >> 10 !== -16) { - $ERROR('#335: -16384 >> 10 === -16. Actual: ' + (-16384 >> 10)); -} - - -if (-32768 >> 10 !== -32) { - $ERROR('#336: -32768 >> 10 === -32. Actual: ' + (-32768 >> 10)); -} - - -if (-65536 >> 10 !== -64) { - $ERROR('#337: -65536 >> 10 === -64. Actual: ' + (-65536 >> 10)); -} - - -if (-131072 >> 10 !== -128) { - $ERROR('#338: -131072 >> 10 === -128. Actual: ' + (-131072 >> 10)); -} - - -if (-262144 >> 10 !== -256) { - $ERROR('#339: -262144 >> 10 === -256. Actual: ' + (-262144 >> 10)); -} - - -if (-524288 >> 10 !== -512) { - $ERROR('#340: -524288 >> 10 === -512. Actual: ' + (-524288 >> 10)); -} - - -if (-1048576 >> 10 !== -1024) { - $ERROR('#341: -1048576 >> 10 === -1024. Actual: ' + (-1048576 >> 10)); -} - - -if (-2097152 >> 10 !== -2048) { - $ERROR('#342: -2097152 >> 10 === -2048. Actual: ' + (-2097152 >> 10)); -} - - -if (-4194304 >> 10 !== -4096) { - $ERROR('#343: -4194304 >> 10 === -4096. Actual: ' + (-4194304 >> 10)); -} - - -if (-8388608 >> 10 !== -8192) { - $ERROR('#344: -8388608 >> 10 === -8192. Actual: ' + (-8388608 >> 10)); -} - - -if (-16777216 >> 10 !== -16384) { - $ERROR('#345: -16777216 >> 10 === -16384. Actual: ' + (-16777216 >> 10)); -} - - -if (-33554432 >> 10 !== -32768) { - $ERROR('#346: -33554432 >> 10 === -32768. Actual: ' + (-33554432 >> 10)); -} - - -if (-67108864 >> 10 !== -65536) { - $ERROR('#347: -67108864 >> 10 === -65536. Actual: ' + (-67108864 >> 10)); -} - - -if (-134217728 >> 10 !== -131072) { - $ERROR('#348: -134217728 >> 10 === -131072. Actual: ' + (-134217728 >> 10)); -} - - -if (-268435456 >> 10 !== -262144) { - $ERROR('#349: -268435456 >> 10 === -262144. Actual: ' + (-268435456 >> 10)); -} - - -if (-536870912 >> 10 !== -524288) { - $ERROR('#350: -536870912 >> 10 === -524288. Actual: ' + (-536870912 >> 10)); -} - - -if (-1073741824 >> 10 !== -1048576) { - $ERROR('#351: -1073741824 >> 10 === -1048576. Actual: ' + (-1073741824 >> 10)); -} - - -if (-2147483648 >> 10 !== -2097152) { - $ERROR('#352: -2147483648 >> 10 === -2097152. Actual: ' + (-2147483648 >> 10)); -} - - -if (-1 >> 11 !== -1) { - $ERROR('#353: -1 >> 11 === -1. Actual: ' + (-1 >> 11)); -} - - -if (-2 >> 11 !== -1) { - $ERROR('#354: -2 >> 11 === -1. Actual: ' + (-2 >> 11)); -} - - -if (-4 >> 11 !== -1) { - $ERROR('#355: -4 >> 11 === -1. Actual: ' + (-4 >> 11)); -} - - -if (-8 >> 11 !== -1) { - $ERROR('#356: -8 >> 11 === -1. Actual: ' + (-8 >> 11)); -} - - -if (-16 >> 11 !== -1) { - $ERROR('#357: -16 >> 11 === -1. Actual: ' + (-16 >> 11)); -} - - -if (-32 >> 11 !== -1) { - $ERROR('#358: -32 >> 11 === -1. Actual: ' + (-32 >> 11)); -} - - -if (-64 >> 11 !== -1) { - $ERROR('#359: -64 >> 11 === -1. Actual: ' + (-64 >> 11)); -} - - -if (-128 >> 11 !== -1) { - $ERROR('#360: -128 >> 11 === -1. Actual: ' + (-128 >> 11)); -} - - -if (-256 >> 11 !== -1) { - $ERROR('#361: -256 >> 11 === -1. Actual: ' + (-256 >> 11)); -} - - -if (-512 >> 11 !== -1) { - $ERROR('#362: -512 >> 11 === -1. Actual: ' + (-512 >> 11)); -} - - -if (-1024 >> 11 !== -1) { - $ERROR('#363: -1024 >> 11 === -1. Actual: ' + (-1024 >> 11)); -} - - -if (-2048 >> 11 !== -1) { - $ERROR('#364: -2048 >> 11 === -1. Actual: ' + (-2048 >> 11)); -} - - -if (-4096 >> 11 !== -2) { - $ERROR('#365: -4096 >> 11 === -2. Actual: ' + (-4096 >> 11)); -} - - -if (-8192 >> 11 !== -4) { - $ERROR('#366: -8192 >> 11 === -4. Actual: ' + (-8192 >> 11)); -} - - -if (-16384 >> 11 !== -8) { - $ERROR('#367: -16384 >> 11 === -8. Actual: ' + (-16384 >> 11)); -} - - -if (-32768 >> 11 !== -16) { - $ERROR('#368: -32768 >> 11 === -16. Actual: ' + (-32768 >> 11)); -} - - -if (-65536 >> 11 !== -32) { - $ERROR('#369: -65536 >> 11 === -32. Actual: ' + (-65536 >> 11)); -} - - -if (-131072 >> 11 !== -64) { - $ERROR('#370: -131072 >> 11 === -64. Actual: ' + (-131072 >> 11)); -} - - -if (-262144 >> 11 !== -128) { - $ERROR('#371: -262144 >> 11 === -128. Actual: ' + (-262144 >> 11)); -} - - -if (-524288 >> 11 !== -256) { - $ERROR('#372: -524288 >> 11 === -256. Actual: ' + (-524288 >> 11)); -} - - -if (-1048576 >> 11 !== -512) { - $ERROR('#373: -1048576 >> 11 === -512. Actual: ' + (-1048576 >> 11)); -} - - -if (-2097152 >> 11 !== -1024) { - $ERROR('#374: -2097152 >> 11 === -1024. Actual: ' + (-2097152 >> 11)); -} - - -if (-4194304 >> 11 !== -2048) { - $ERROR('#375: -4194304 >> 11 === -2048. Actual: ' + (-4194304 >> 11)); -} - - -if (-8388608 >> 11 !== -4096) { - $ERROR('#376: -8388608 >> 11 === -4096. Actual: ' + (-8388608 >> 11)); -} - - -if (-16777216 >> 11 !== -8192) { - $ERROR('#377: -16777216 >> 11 === -8192. Actual: ' + (-16777216 >> 11)); -} - - -if (-33554432 >> 11 !== -16384) { - $ERROR('#378: -33554432 >> 11 === -16384. Actual: ' + (-33554432 >> 11)); -} - - -if (-67108864 >> 11 !== -32768) { - $ERROR('#379: -67108864 >> 11 === -32768. Actual: ' + (-67108864 >> 11)); -} - - -if (-134217728 >> 11 !== -65536) { - $ERROR('#380: -134217728 >> 11 === -65536. Actual: ' + (-134217728 >> 11)); -} - - -if (-268435456 >> 11 !== -131072) { - $ERROR('#381: -268435456 >> 11 === -131072. Actual: ' + (-268435456 >> 11)); -} - - -if (-536870912 >> 11 !== -262144) { - $ERROR('#382: -536870912 >> 11 === -262144. Actual: ' + (-536870912 >> 11)); -} - - -if (-1073741824 >> 11 !== -524288) { - $ERROR('#383: -1073741824 >> 11 === -524288. Actual: ' + (-1073741824 >> 11)); -} - - -if (-2147483648 >> 11 !== -1048576) { - $ERROR('#384: -2147483648 >> 11 === -1048576. Actual: ' + (-2147483648 >> 11)); -} - - -if (-1 >> 12 !== -1) { - $ERROR('#385: -1 >> 12 === -1. Actual: ' + (-1 >> 12)); -} - - -if (-2 >> 12 !== -1) { - $ERROR('#386: -2 >> 12 === -1. Actual: ' + (-2 >> 12)); -} - - -if (-4 >> 12 !== -1) { - $ERROR('#387: -4 >> 12 === -1. Actual: ' + (-4 >> 12)); -} - - -if (-8 >> 12 !== -1) { - $ERROR('#388: -8 >> 12 === -1. Actual: ' + (-8 >> 12)); -} - - -if (-16 >> 12 !== -1) { - $ERROR('#389: -16 >> 12 === -1. Actual: ' + (-16 >> 12)); -} - - -if (-32 >> 12 !== -1) { - $ERROR('#390: -32 >> 12 === -1. Actual: ' + (-32 >> 12)); -} - - -if (-64 >> 12 !== -1) { - $ERROR('#391: -64 >> 12 === -1. Actual: ' + (-64 >> 12)); -} - - -if (-128 >> 12 !== -1) { - $ERROR('#392: -128 >> 12 === -1. Actual: ' + (-128 >> 12)); -} - - -if (-256 >> 12 !== -1) { - $ERROR('#393: -256 >> 12 === -1. Actual: ' + (-256 >> 12)); -} - - -if (-512 >> 12 !== -1) { - $ERROR('#394: -512 >> 12 === -1. Actual: ' + (-512 >> 12)); -} - - -if (-1024 >> 12 !== -1) { - $ERROR('#395: -1024 >> 12 === -1. Actual: ' + (-1024 >> 12)); -} - - -if (-2048 >> 12 !== -1) { - $ERROR('#396: -2048 >> 12 === -1. Actual: ' + (-2048 >> 12)); -} - - -if (-4096 >> 12 !== -1) { - $ERROR('#397: -4096 >> 12 === -1. Actual: ' + (-4096 >> 12)); -} - - -if (-8192 >> 12 !== -2) { - $ERROR('#398: -8192 >> 12 === -2. Actual: ' + (-8192 >> 12)); -} - - -if (-16384 >> 12 !== -4) { - $ERROR('#399: -16384 >> 12 === -4. Actual: ' + (-16384 >> 12)); -} - - -if (-32768 >> 12 !== -8) { - $ERROR('#400: -32768 >> 12 === -8. Actual: ' + (-32768 >> 12)); -} - - -if (-65536 >> 12 !== -16) { - $ERROR('#401: -65536 >> 12 === -16. Actual: ' + (-65536 >> 12)); -} - - -if (-131072 >> 12 !== -32) { - $ERROR('#402: -131072 >> 12 === -32. Actual: ' + (-131072 >> 12)); -} - - -if (-262144 >> 12 !== -64) { - $ERROR('#403: -262144 >> 12 === -64. Actual: ' + (-262144 >> 12)); -} - - -if (-524288 >> 12 !== -128) { - $ERROR('#404: -524288 >> 12 === -128. Actual: ' + (-524288 >> 12)); -} - - -if (-1048576 >> 12 !== -256) { - $ERROR('#405: -1048576 >> 12 === -256. Actual: ' + (-1048576 >> 12)); -} - - -if (-2097152 >> 12 !== -512) { - $ERROR('#406: -2097152 >> 12 === -512. Actual: ' + (-2097152 >> 12)); -} - - -if (-4194304 >> 12 !== -1024) { - $ERROR('#407: -4194304 >> 12 === -1024. Actual: ' + (-4194304 >> 12)); -} - - -if (-8388608 >> 12 !== -2048) { - $ERROR('#408: -8388608 >> 12 === -2048. Actual: ' + (-8388608 >> 12)); -} - - -if (-16777216 >> 12 !== -4096) { - $ERROR('#409: -16777216 >> 12 === -4096. Actual: ' + (-16777216 >> 12)); -} - - -if (-33554432 >> 12 !== -8192) { - $ERROR('#410: -33554432 >> 12 === -8192. Actual: ' + (-33554432 >> 12)); -} - - -if (-67108864 >> 12 !== -16384) { - $ERROR('#411: -67108864 >> 12 === -16384. Actual: ' + (-67108864 >> 12)); -} - - -if (-134217728 >> 12 !== -32768) { - $ERROR('#412: -134217728 >> 12 === -32768. Actual: ' + (-134217728 >> 12)); -} - - -if (-268435456 >> 12 !== -65536) { - $ERROR('#413: -268435456 >> 12 === -65536. Actual: ' + (-268435456 >> 12)); -} - - -if (-536870912 >> 12 !== -131072) { - $ERROR('#414: -536870912 >> 12 === -131072. Actual: ' + (-536870912 >> 12)); -} - - -if (-1073741824 >> 12 !== -262144) { - $ERROR('#415: -1073741824 >> 12 === -262144. Actual: ' + (-1073741824 >> 12)); -} - - -if (-2147483648 >> 12 !== -524288) { - $ERROR('#416: -2147483648 >> 12 === -524288. Actual: ' + (-2147483648 >> 12)); -} - - -if (-1 >> 13 !== -1) { - $ERROR('#417: -1 >> 13 === -1. Actual: ' + (-1 >> 13)); -} - - -if (-2 >> 13 !== -1) { - $ERROR('#418: -2 >> 13 === -1. Actual: ' + (-2 >> 13)); -} - - -if (-4 >> 13 !== -1) { - $ERROR('#419: -4 >> 13 === -1. Actual: ' + (-4 >> 13)); -} - - -if (-8 >> 13 !== -1) { - $ERROR('#420: -8 >> 13 === -1. Actual: ' + (-8 >> 13)); -} - - -if (-16 >> 13 !== -1) { - $ERROR('#421: -16 >> 13 === -1. Actual: ' + (-16 >> 13)); -} - - -if (-32 >> 13 !== -1) { - $ERROR('#422: -32 >> 13 === -1. Actual: ' + (-32 >> 13)); -} - - -if (-64 >> 13 !== -1) { - $ERROR('#423: -64 >> 13 === -1. Actual: ' + (-64 >> 13)); -} - - -if (-128 >> 13 !== -1) { - $ERROR('#424: -128 >> 13 === -1. Actual: ' + (-128 >> 13)); -} - - -if (-256 >> 13 !== -1) { - $ERROR('#425: -256 >> 13 === -1. Actual: ' + (-256 >> 13)); -} - - -if (-512 >> 13 !== -1) { - $ERROR('#426: -512 >> 13 === -1. Actual: ' + (-512 >> 13)); -} - - -if (-1024 >> 13 !== -1) { - $ERROR('#427: -1024 >> 13 === -1. Actual: ' + (-1024 >> 13)); -} - - -if (-2048 >> 13 !== -1) { - $ERROR('#428: -2048 >> 13 === -1. Actual: ' + (-2048 >> 13)); -} - - -if (-4096 >> 13 !== -1) { - $ERROR('#429: -4096 >> 13 === -1. Actual: ' + (-4096 >> 13)); -} - - -if (-8192 >> 13 !== -1) { - $ERROR('#430: -8192 >> 13 === -1. Actual: ' + (-8192 >> 13)); -} - - -if (-16384 >> 13 !== -2) { - $ERROR('#431: -16384 >> 13 === -2. Actual: ' + (-16384 >> 13)); -} - - -if (-32768 >> 13 !== -4) { - $ERROR('#432: -32768 >> 13 === -4. Actual: ' + (-32768 >> 13)); -} - - -if (-65536 >> 13 !== -8) { - $ERROR('#433: -65536 >> 13 === -8. Actual: ' + (-65536 >> 13)); -} - - -if (-131072 >> 13 !== -16) { - $ERROR('#434: -131072 >> 13 === -16. Actual: ' + (-131072 >> 13)); -} - - -if (-262144 >> 13 !== -32) { - $ERROR('#435: -262144 >> 13 === -32. Actual: ' + (-262144 >> 13)); -} - - -if (-524288 >> 13 !== -64) { - $ERROR('#436: -524288 >> 13 === -64. Actual: ' + (-524288 >> 13)); -} - - -if (-1048576 >> 13 !== -128) { - $ERROR('#437: -1048576 >> 13 === -128. Actual: ' + (-1048576 >> 13)); -} - - -if (-2097152 >> 13 !== -256) { - $ERROR('#438: -2097152 >> 13 === -256. Actual: ' + (-2097152 >> 13)); -} - - -if (-4194304 >> 13 !== -512) { - $ERROR('#439: -4194304 >> 13 === -512. Actual: ' + (-4194304 >> 13)); -} - - -if (-8388608 >> 13 !== -1024) { - $ERROR('#440: -8388608 >> 13 === -1024. Actual: ' + (-8388608 >> 13)); -} - - -if (-16777216 >> 13 !== -2048) { - $ERROR('#441: -16777216 >> 13 === -2048. Actual: ' + (-16777216 >> 13)); -} - - -if (-33554432 >> 13 !== -4096) { - $ERROR('#442: -33554432 >> 13 === -4096. Actual: ' + (-33554432 >> 13)); -} - - -if (-67108864 >> 13 !== -8192) { - $ERROR('#443: -67108864 >> 13 === -8192. Actual: ' + (-67108864 >> 13)); -} - - -if (-134217728 >> 13 !== -16384) { - $ERROR('#444: -134217728 >> 13 === -16384. Actual: ' + (-134217728 >> 13)); -} - - -if (-268435456 >> 13 !== -32768) { - $ERROR('#445: -268435456 >> 13 === -32768. Actual: ' + (-268435456 >> 13)); -} - - -if (-536870912 >> 13 !== -65536) { - $ERROR('#446: -536870912 >> 13 === -65536. Actual: ' + (-536870912 >> 13)); -} - - -if (-1073741824 >> 13 !== -131072) { - $ERROR('#447: -1073741824 >> 13 === -131072. Actual: ' + (-1073741824 >> 13)); -} - - -if (-2147483648 >> 13 !== -262144) { - $ERROR('#448: -2147483648 >> 13 === -262144. Actual: ' + (-2147483648 >> 13)); -} - - -if (-1 >> 14 !== -1) { - $ERROR('#449: -1 >> 14 === -1. Actual: ' + (-1 >> 14)); -} - - -if (-2 >> 14 !== -1) { - $ERROR('#450: -2 >> 14 === -1. Actual: ' + (-2 >> 14)); -} - - -if (-4 >> 14 !== -1) { - $ERROR('#451: -4 >> 14 === -1. Actual: ' + (-4 >> 14)); -} - - -if (-8 >> 14 !== -1) { - $ERROR('#452: -8 >> 14 === -1. Actual: ' + (-8 >> 14)); -} - - -if (-16 >> 14 !== -1) { - $ERROR('#453: -16 >> 14 === -1. Actual: ' + (-16 >> 14)); -} - - -if (-32 >> 14 !== -1) { - $ERROR('#454: -32 >> 14 === -1. Actual: ' + (-32 >> 14)); -} - - -if (-64 >> 14 !== -1) { - $ERROR('#455: -64 >> 14 === -1. Actual: ' + (-64 >> 14)); -} - - -if (-128 >> 14 !== -1) { - $ERROR('#456: -128 >> 14 === -1. Actual: ' + (-128 >> 14)); -} - - -if (-256 >> 14 !== -1) { - $ERROR('#457: -256 >> 14 === -1. Actual: ' + (-256 >> 14)); -} - - -if (-512 >> 14 !== -1) { - $ERROR('#458: -512 >> 14 === -1. Actual: ' + (-512 >> 14)); -} - - -if (-1024 >> 14 !== -1) { - $ERROR('#459: -1024 >> 14 === -1. Actual: ' + (-1024 >> 14)); -} - - -if (-2048 >> 14 !== -1) { - $ERROR('#460: -2048 >> 14 === -1. Actual: ' + (-2048 >> 14)); -} - - -if (-4096 >> 14 !== -1) { - $ERROR('#461: -4096 >> 14 === -1. Actual: ' + (-4096 >> 14)); -} - - -if (-8192 >> 14 !== -1) { - $ERROR('#462: -8192 >> 14 === -1. Actual: ' + (-8192 >> 14)); -} - - -if (-16384 >> 14 !== -1) { - $ERROR('#463: -16384 >> 14 === -1. Actual: ' + (-16384 >> 14)); -} - - -if (-32768 >> 14 !== -2) { - $ERROR('#464: -32768 >> 14 === -2. Actual: ' + (-32768 >> 14)); -} - - -if (-65536 >> 14 !== -4) { - $ERROR('#465: -65536 >> 14 === -4. Actual: ' + (-65536 >> 14)); -} - - -if (-131072 >> 14 !== -8) { - $ERROR('#466: -131072 >> 14 === -8. Actual: ' + (-131072 >> 14)); -} - - -if (-262144 >> 14 !== -16) { - $ERROR('#467: -262144 >> 14 === -16. Actual: ' + (-262144 >> 14)); -} - - -if (-524288 >> 14 !== -32) { - $ERROR('#468: -524288 >> 14 === -32. Actual: ' + (-524288 >> 14)); -} - - -if (-1048576 >> 14 !== -64) { - $ERROR('#469: -1048576 >> 14 === -64. Actual: ' + (-1048576 >> 14)); -} - - -if (-2097152 >> 14 !== -128) { - $ERROR('#470: -2097152 >> 14 === -128. Actual: ' + (-2097152 >> 14)); -} - - -if (-4194304 >> 14 !== -256) { - $ERROR('#471: -4194304 >> 14 === -256. Actual: ' + (-4194304 >> 14)); -} - - -if (-8388608 >> 14 !== -512) { - $ERROR('#472: -8388608 >> 14 === -512. Actual: ' + (-8388608 >> 14)); -} - - -if (-16777216 >> 14 !== -1024) { - $ERROR('#473: -16777216 >> 14 === -1024. Actual: ' + (-16777216 >> 14)); -} - - -if (-33554432 >> 14 !== -2048) { - $ERROR('#474: -33554432 >> 14 === -2048. Actual: ' + (-33554432 >> 14)); -} - - -if (-67108864 >> 14 !== -4096) { - $ERROR('#475: -67108864 >> 14 === -4096. Actual: ' + (-67108864 >> 14)); -} - - -if (-134217728 >> 14 !== -8192) { - $ERROR('#476: -134217728 >> 14 === -8192. Actual: ' + (-134217728 >> 14)); -} - - -if (-268435456 >> 14 !== -16384) { - $ERROR('#477: -268435456 >> 14 === -16384. Actual: ' + (-268435456 >> 14)); -} - - -if (-536870912 >> 14 !== -32768) { - $ERROR('#478: -536870912 >> 14 === -32768. Actual: ' + (-536870912 >> 14)); -} - - -if (-1073741824 >> 14 !== -65536) { - $ERROR('#479: -1073741824 >> 14 === -65536. Actual: ' + (-1073741824 >> 14)); -} - - -if (-2147483648 >> 14 !== -131072) { - $ERROR('#480: -2147483648 >> 14 === -131072. Actual: ' + (-2147483648 >> 14)); -} - - -if (-1 >> 15 !== -1) { - $ERROR('#481: -1 >> 15 === -1. Actual: ' + (-1 >> 15)); -} - - -if (-2 >> 15 !== -1) { - $ERROR('#482: -2 >> 15 === -1. Actual: ' + (-2 >> 15)); -} - - -if (-4 >> 15 !== -1) { - $ERROR('#483: -4 >> 15 === -1. Actual: ' + (-4 >> 15)); -} - - -if (-8 >> 15 !== -1) { - $ERROR('#484: -8 >> 15 === -1. Actual: ' + (-8 >> 15)); -} - - -if (-16 >> 15 !== -1) { - $ERROR('#485: -16 >> 15 === -1. Actual: ' + (-16 >> 15)); -} - - -if (-32 >> 15 !== -1) { - $ERROR('#486: -32 >> 15 === -1. Actual: ' + (-32 >> 15)); -} - - -if (-64 >> 15 !== -1) { - $ERROR('#487: -64 >> 15 === -1. Actual: ' + (-64 >> 15)); -} - - -if (-128 >> 15 !== -1) { - $ERROR('#488: -128 >> 15 === -1. Actual: ' + (-128 >> 15)); -} - - -if (-256 >> 15 !== -1) { - $ERROR('#489: -256 >> 15 === -1. Actual: ' + (-256 >> 15)); -} - - -if (-512 >> 15 !== -1) { - $ERROR('#490: -512 >> 15 === -1. Actual: ' + (-512 >> 15)); -} - - -if (-1024 >> 15 !== -1) { - $ERROR('#491: -1024 >> 15 === -1. Actual: ' + (-1024 >> 15)); -} - - -if (-2048 >> 15 !== -1) { - $ERROR('#492: -2048 >> 15 === -1. Actual: ' + (-2048 >> 15)); -} - - -if (-4096 >> 15 !== -1) { - $ERROR('#493: -4096 >> 15 === -1. Actual: ' + (-4096 >> 15)); -} - - -if (-8192 >> 15 !== -1) { - $ERROR('#494: -8192 >> 15 === -1. Actual: ' + (-8192 >> 15)); -} - - -if (-16384 >> 15 !== -1) { - $ERROR('#495: -16384 >> 15 === -1. Actual: ' + (-16384 >> 15)); -} - - -if (-32768 >> 15 !== -1) { - $ERROR('#496: -32768 >> 15 === -1. Actual: ' + (-32768 >> 15)); -} - - -if (-65536 >> 15 !== -2) { - $ERROR('#497: -65536 >> 15 === -2. Actual: ' + (-65536 >> 15)); -} - - -if (-131072 >> 15 !== -4) { - $ERROR('#498: -131072 >> 15 === -4. Actual: ' + (-131072 >> 15)); -} - - -if (-262144 >> 15 !== -8) { - $ERROR('#499: -262144 >> 15 === -8. Actual: ' + (-262144 >> 15)); -} - - -if (-524288 >> 15 !== -16) { - $ERROR('#500: -524288 >> 15 === -16. Actual: ' + (-524288 >> 15)); -} - - -if (-1048576 >> 15 !== -32) { - $ERROR('#501: -1048576 >> 15 === -32. Actual: ' + (-1048576 >> 15)); -} - - -if (-2097152 >> 15 !== -64) { - $ERROR('#502: -2097152 >> 15 === -64. Actual: ' + (-2097152 >> 15)); -} - - -if (-4194304 >> 15 !== -128) { - $ERROR('#503: -4194304 >> 15 === -128. Actual: ' + (-4194304 >> 15)); -} - - -if (-8388608 >> 15 !== -256) { - $ERROR('#504: -8388608 >> 15 === -256. Actual: ' + (-8388608 >> 15)); -} - - -if (-16777216 >> 15 !== -512) { - $ERROR('#505: -16777216 >> 15 === -512. Actual: ' + (-16777216 >> 15)); -} - - -if (-33554432 >> 15 !== -1024) { - $ERROR('#506: -33554432 >> 15 === -1024. Actual: ' + (-33554432 >> 15)); -} - - -if (-67108864 >> 15 !== -2048) { - $ERROR('#507: -67108864 >> 15 === -2048. Actual: ' + (-67108864 >> 15)); -} - - -if (-134217728 >> 15 !== -4096) { - $ERROR('#508: -134217728 >> 15 === -4096. Actual: ' + (-134217728 >> 15)); -} - - -if (-268435456 >> 15 !== -8192) { - $ERROR('#509: -268435456 >> 15 === -8192. Actual: ' + (-268435456 >> 15)); -} - - -if (-536870912 >> 15 !== -16384) { - $ERROR('#510: -536870912 >> 15 === -16384. Actual: ' + (-536870912 >> 15)); -} - - -if (-1073741824 >> 15 !== -32768) { - $ERROR('#511: -1073741824 >> 15 === -32768. Actual: ' + (-1073741824 >> 15)); -} - - -if (-2147483648 >> 15 !== -65536) { - $ERROR('#512: -2147483648 >> 15 === -65536. Actual: ' + (-2147483648 >> 15)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A4_T2.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A4_T2.js deleted file mode 100644 index 77fbfb2c8..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A4_T2.js +++ /dev/null @@ -1,2570 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.2_A4_T2; - * @section: 11.7.2; - * @assertion: Check x >> y operator in distinct points; - * @description: ShiftExpression = 2^n - 1, n = 16...31; - */ - -//CHECK - -if (-1 >> 16 !== -1) { - $ERROR('#513: -1 >> 16 === -1. Actual: ' + (-1 >> 16)); -} - - -if (-2 >> 16 !== -1) { - $ERROR('#514: -2 >> 16 === -1. Actual: ' + (-2 >> 16)); -} - - -if (-4 >> 16 !== -1) { - $ERROR('#515: -4 >> 16 === -1. Actual: ' + (-4 >> 16)); -} - - -if (-8 >> 16 !== -1) { - $ERROR('#516: -8 >> 16 === -1. Actual: ' + (-8 >> 16)); -} - - -if (-16 >> 16 !== -1) { - $ERROR('#517: -16 >> 16 === -1. Actual: ' + (-16 >> 16)); -} - - -if (-32 >> 16 !== -1) { - $ERROR('#518: -32 >> 16 === -1. Actual: ' + (-32 >> 16)); -} - - -if (-64 >> 16 !== -1) { - $ERROR('#519: -64 >> 16 === -1. Actual: ' + (-64 >> 16)); -} - - -if (-128 >> 16 !== -1) { - $ERROR('#520: -128 >> 16 === -1. Actual: ' + (-128 >> 16)); -} - - -if (-256 >> 16 !== -1) { - $ERROR('#521: -256 >> 16 === -1. Actual: ' + (-256 >> 16)); -} - - -if (-512 >> 16 !== -1) { - $ERROR('#522: -512 >> 16 === -1. Actual: ' + (-512 >> 16)); -} - - -if (-1024 >> 16 !== -1) { - $ERROR('#523: -1024 >> 16 === -1. Actual: ' + (-1024 >> 16)); -} - - -if (-2048 >> 16 !== -1) { - $ERROR('#524: -2048 >> 16 === -1. Actual: ' + (-2048 >> 16)); -} - - -if (-4096 >> 16 !== -1) { - $ERROR('#525: -4096 >> 16 === -1. Actual: ' + (-4096 >> 16)); -} - - -if (-8192 >> 16 !== -1) { - $ERROR('#526: -8192 >> 16 === -1. Actual: ' + (-8192 >> 16)); -} - - -if (-16384 >> 16 !== -1) { - $ERROR('#527: -16384 >> 16 === -1. Actual: ' + (-16384 >> 16)); -} - - -if (-32768 >> 16 !== -1) { - $ERROR('#528: -32768 >> 16 === -1. Actual: ' + (-32768 >> 16)); -} - - -if (-65536 >> 16 !== -1) { - $ERROR('#529: -65536 >> 16 === -1. Actual: ' + (-65536 >> 16)); -} - - -if (-131072 >> 16 !== -2) { - $ERROR('#530: -131072 >> 16 === -2. Actual: ' + (-131072 >> 16)); -} - - -if (-262144 >> 16 !== -4) { - $ERROR('#531: -262144 >> 16 === -4. Actual: ' + (-262144 >> 16)); -} - - -if (-524288 >> 16 !== -8) { - $ERROR('#532: -524288 >> 16 === -8. Actual: ' + (-524288 >> 16)); -} - - -if (-1048576 >> 16 !== -16) { - $ERROR('#533: -1048576 >> 16 === -16. Actual: ' + (-1048576 >> 16)); -} - - -if (-2097152 >> 16 !== -32) { - $ERROR('#534: -2097152 >> 16 === -32. Actual: ' + (-2097152 >> 16)); -} - - -if (-4194304 >> 16 !== -64) { - $ERROR('#535: -4194304 >> 16 === -64. Actual: ' + (-4194304 >> 16)); -} - - -if (-8388608 >> 16 !== -128) { - $ERROR('#536: -8388608 >> 16 === -128. Actual: ' + (-8388608 >> 16)); -} - - -if (-16777216 >> 16 !== -256) { - $ERROR('#537: -16777216 >> 16 === -256. Actual: ' + (-16777216 >> 16)); -} - - -if (-33554432 >> 16 !== -512) { - $ERROR('#538: -33554432 >> 16 === -512. Actual: ' + (-33554432 >> 16)); -} - - -if (-67108864 >> 16 !== -1024) { - $ERROR('#539: -67108864 >> 16 === -1024. Actual: ' + (-67108864 >> 16)); -} - - -if (-134217728 >> 16 !== -2048) { - $ERROR('#540: -134217728 >> 16 === -2048. Actual: ' + (-134217728 >> 16)); -} - - -if (-268435456 >> 16 !== -4096) { - $ERROR('#541: -268435456 >> 16 === -4096. Actual: ' + (-268435456 >> 16)); -} - - -if (-536870912 >> 16 !== -8192) { - $ERROR('#542: -536870912 >> 16 === -8192. Actual: ' + (-536870912 >> 16)); -} - - -if (-1073741824 >> 16 !== -16384) { - $ERROR('#543: -1073741824 >> 16 === -16384. Actual: ' + (-1073741824 >> 16)); -} - - -if (-2147483648 >> 16 !== -32768) { - $ERROR('#544: -2147483648 >> 16 === -32768. Actual: ' + (-2147483648 >> 16)); -} - - -if (-1 >> 17 !== -1) { - $ERROR('#545: -1 >> 17 === -1. Actual: ' + (-1 >> 17)); -} - - -if (-2 >> 17 !== -1) { - $ERROR('#546: -2 >> 17 === -1. Actual: ' + (-2 >> 17)); -} - - -if (-4 >> 17 !== -1) { - $ERROR('#547: -4 >> 17 === -1. Actual: ' + (-4 >> 17)); -} - - -if (-8 >> 17 !== -1) { - $ERROR('#548: -8 >> 17 === -1. Actual: ' + (-8 >> 17)); -} - - -if (-16 >> 17 !== -1) { - $ERROR('#549: -16 >> 17 === -1. Actual: ' + (-16 >> 17)); -} - - -if (-32 >> 17 !== -1) { - $ERROR('#550: -32 >> 17 === -1. Actual: ' + (-32 >> 17)); -} - - -if (-64 >> 17 !== -1) { - $ERROR('#551: -64 >> 17 === -1. Actual: ' + (-64 >> 17)); -} - - -if (-128 >> 17 !== -1) { - $ERROR('#552: -128 >> 17 === -1. Actual: ' + (-128 >> 17)); -} - - -if (-256 >> 17 !== -1) { - $ERROR('#553: -256 >> 17 === -1. Actual: ' + (-256 >> 17)); -} - - -if (-512 >> 17 !== -1) { - $ERROR('#554: -512 >> 17 === -1. Actual: ' + (-512 >> 17)); -} - - -if (-1024 >> 17 !== -1) { - $ERROR('#555: -1024 >> 17 === -1. Actual: ' + (-1024 >> 17)); -} - - -if (-2048 >> 17 !== -1) { - $ERROR('#556: -2048 >> 17 === -1. Actual: ' + (-2048 >> 17)); -} - - -if (-4096 >> 17 !== -1) { - $ERROR('#557: -4096 >> 17 === -1. Actual: ' + (-4096 >> 17)); -} - - -if (-8192 >> 17 !== -1) { - $ERROR('#558: -8192 >> 17 === -1. Actual: ' + (-8192 >> 17)); -} - - -if (-16384 >> 17 !== -1) { - $ERROR('#559: -16384 >> 17 === -1. Actual: ' + (-16384 >> 17)); -} - - -if (-32768 >> 17 !== -1) { - $ERROR('#560: -32768 >> 17 === -1. Actual: ' + (-32768 >> 17)); -} - - -if (-65536 >> 17 !== -1) { - $ERROR('#561: -65536 >> 17 === -1. Actual: ' + (-65536 >> 17)); -} - - -if (-131072 >> 17 !== -1) { - $ERROR('#562: -131072 >> 17 === -1. Actual: ' + (-131072 >> 17)); -} - - -if (-262144 >> 17 !== -2) { - $ERROR('#563: -262144 >> 17 === -2. Actual: ' + (-262144 >> 17)); -} - - -if (-524288 >> 17 !== -4) { - $ERROR('#564: -524288 >> 17 === -4. Actual: ' + (-524288 >> 17)); -} - - -if (-1048576 >> 17 !== -8) { - $ERROR('#565: -1048576 >> 17 === -8. Actual: ' + (-1048576 >> 17)); -} - - -if (-2097152 >> 17 !== -16) { - $ERROR('#566: -2097152 >> 17 === -16. Actual: ' + (-2097152 >> 17)); -} - - -if (-4194304 >> 17 !== -32) { - $ERROR('#567: -4194304 >> 17 === -32. Actual: ' + (-4194304 >> 17)); -} - - -if (-8388608 >> 17 !== -64) { - $ERROR('#568: -8388608 >> 17 === -64. Actual: ' + (-8388608 >> 17)); -} - - -if (-16777216 >> 17 !== -128) { - $ERROR('#569: -16777216 >> 17 === -128. Actual: ' + (-16777216 >> 17)); -} - - -if (-33554432 >> 17 !== -256) { - $ERROR('#570: -33554432 >> 17 === -256. Actual: ' + (-33554432 >> 17)); -} - - -if (-67108864 >> 17 !== -512) { - $ERROR('#571: -67108864 >> 17 === -512. Actual: ' + (-67108864 >> 17)); -} - - -if (-134217728 >> 17 !== -1024) { - $ERROR('#572: -134217728 >> 17 === -1024. Actual: ' + (-134217728 >> 17)); -} - - -if (-268435456 >> 17 !== -2048) { - $ERROR('#573: -268435456 >> 17 === -2048. Actual: ' + (-268435456 >> 17)); -} - - -if (-536870912 >> 17 !== -4096) { - $ERROR('#574: -536870912 >> 17 === -4096. Actual: ' + (-536870912 >> 17)); -} - - -if (-1073741824 >> 17 !== -8192) { - $ERROR('#575: -1073741824 >> 17 === -8192. Actual: ' + (-1073741824 >> 17)); -} - - -if (-2147483648 >> 17 !== -16384) { - $ERROR('#576: -2147483648 >> 17 === -16384. Actual: ' + (-2147483648 >> 17)); -} - - -if (-1 >> 18 !== -1) { - $ERROR('#577: -1 >> 18 === -1. Actual: ' + (-1 >> 18)); -} - - -if (-2 >> 18 !== -1) { - $ERROR('#578: -2 >> 18 === -1. Actual: ' + (-2 >> 18)); -} - - -if (-4 >> 18 !== -1) { - $ERROR('#579: -4 >> 18 === -1. Actual: ' + (-4 >> 18)); -} - - -if (-8 >> 18 !== -1) { - $ERROR('#580: -8 >> 18 === -1. Actual: ' + (-8 >> 18)); -} - - -if (-16 >> 18 !== -1) { - $ERROR('#581: -16 >> 18 === -1. Actual: ' + (-16 >> 18)); -} - - -if (-32 >> 18 !== -1) { - $ERROR('#582: -32 >> 18 === -1. Actual: ' + (-32 >> 18)); -} - - -if (-64 >> 18 !== -1) { - $ERROR('#583: -64 >> 18 === -1. Actual: ' + (-64 >> 18)); -} - - -if (-128 >> 18 !== -1) { - $ERROR('#584: -128 >> 18 === -1. Actual: ' + (-128 >> 18)); -} - - -if (-256 >> 18 !== -1) { - $ERROR('#585: -256 >> 18 === -1. Actual: ' + (-256 >> 18)); -} - - -if (-512 >> 18 !== -1) { - $ERROR('#586: -512 >> 18 === -1. Actual: ' + (-512 >> 18)); -} - - -if (-1024 >> 18 !== -1) { - $ERROR('#587: -1024 >> 18 === -1. Actual: ' + (-1024 >> 18)); -} - - -if (-2048 >> 18 !== -1) { - $ERROR('#588: -2048 >> 18 === -1. Actual: ' + (-2048 >> 18)); -} - - -if (-4096 >> 18 !== -1) { - $ERROR('#589: -4096 >> 18 === -1. Actual: ' + (-4096 >> 18)); -} - - -if (-8192 >> 18 !== -1) { - $ERROR('#590: -8192 >> 18 === -1. Actual: ' + (-8192 >> 18)); -} - - -if (-16384 >> 18 !== -1) { - $ERROR('#591: -16384 >> 18 === -1. Actual: ' + (-16384 >> 18)); -} - - -if (-32768 >> 18 !== -1) { - $ERROR('#592: -32768 >> 18 === -1. Actual: ' + (-32768 >> 18)); -} - - -if (-65536 >> 18 !== -1) { - $ERROR('#593: -65536 >> 18 === -1. Actual: ' + (-65536 >> 18)); -} - - -if (-131072 >> 18 !== -1) { - $ERROR('#594: -131072 >> 18 === -1. Actual: ' + (-131072 >> 18)); -} - - -if (-262144 >> 18 !== -1) { - $ERROR('#595: -262144 >> 18 === -1. Actual: ' + (-262144 >> 18)); -} - - -if (-524288 >> 18 !== -2) { - $ERROR('#596: -524288 >> 18 === -2. Actual: ' + (-524288 >> 18)); -} - - -if (-1048576 >> 18 !== -4) { - $ERROR('#597: -1048576 >> 18 === -4. Actual: ' + (-1048576 >> 18)); -} - - -if (-2097152 >> 18 !== -8) { - $ERROR('#598: -2097152 >> 18 === -8. Actual: ' + (-2097152 >> 18)); -} - - -if (-4194304 >> 18 !== -16) { - $ERROR('#599: -4194304 >> 18 === -16. Actual: ' + (-4194304 >> 18)); -} - - -if (-8388608 >> 18 !== -32) { - $ERROR('#600: -8388608 >> 18 === -32. Actual: ' + (-8388608 >> 18)); -} - - -if (-16777216 >> 18 !== -64) { - $ERROR('#601: -16777216 >> 18 === -64. Actual: ' + (-16777216 >> 18)); -} - - -if (-33554432 >> 18 !== -128) { - $ERROR('#602: -33554432 >> 18 === -128. Actual: ' + (-33554432 >> 18)); -} - - -if (-67108864 >> 18 !== -256) { - $ERROR('#603: -67108864 >> 18 === -256. Actual: ' + (-67108864 >> 18)); -} - - -if (-134217728 >> 18 !== -512) { - $ERROR('#604: -134217728 >> 18 === -512. Actual: ' + (-134217728 >> 18)); -} - - -if (-268435456 >> 18 !== -1024) { - $ERROR('#605: -268435456 >> 18 === -1024. Actual: ' + (-268435456 >> 18)); -} - - -if (-536870912 >> 18 !== -2048) { - $ERROR('#606: -536870912 >> 18 === -2048. Actual: ' + (-536870912 >> 18)); -} - - -if (-1073741824 >> 18 !== -4096) { - $ERROR('#607: -1073741824 >> 18 === -4096. Actual: ' + (-1073741824 >> 18)); -} - - -if (-2147483648 >> 18 !== -8192) { - $ERROR('#608: -2147483648 >> 18 === -8192. Actual: ' + (-2147483648 >> 18)); -} - - -if (-1 >> 19 !== -1) { - $ERROR('#609: -1 >> 19 === -1. Actual: ' + (-1 >> 19)); -} - - -if (-2 >> 19 !== -1) { - $ERROR('#610: -2 >> 19 === -1. Actual: ' + (-2 >> 19)); -} - - -if (-4 >> 19 !== -1) { - $ERROR('#611: -4 >> 19 === -1. Actual: ' + (-4 >> 19)); -} - - -if (-8 >> 19 !== -1) { - $ERROR('#612: -8 >> 19 === -1. Actual: ' + (-8 >> 19)); -} - - -if (-16 >> 19 !== -1) { - $ERROR('#613: -16 >> 19 === -1. Actual: ' + (-16 >> 19)); -} - - -if (-32 >> 19 !== -1) { - $ERROR('#614: -32 >> 19 === -1. Actual: ' + (-32 >> 19)); -} - - -if (-64 >> 19 !== -1) { - $ERROR('#615: -64 >> 19 === -1. Actual: ' + (-64 >> 19)); -} - - -if (-128 >> 19 !== -1) { - $ERROR('#616: -128 >> 19 === -1. Actual: ' + (-128 >> 19)); -} - - -if (-256 >> 19 !== -1) { - $ERROR('#617: -256 >> 19 === -1. Actual: ' + (-256 >> 19)); -} - - -if (-512 >> 19 !== -1) { - $ERROR('#618: -512 >> 19 === -1. Actual: ' + (-512 >> 19)); -} - - -if (-1024 >> 19 !== -1) { - $ERROR('#619: -1024 >> 19 === -1. Actual: ' + (-1024 >> 19)); -} - - -if (-2048 >> 19 !== -1) { - $ERROR('#620: -2048 >> 19 === -1. Actual: ' + (-2048 >> 19)); -} - - -if (-4096 >> 19 !== -1) { - $ERROR('#621: -4096 >> 19 === -1. Actual: ' + (-4096 >> 19)); -} - - -if (-8192 >> 19 !== -1) { - $ERROR('#622: -8192 >> 19 === -1. Actual: ' + (-8192 >> 19)); -} - - -if (-16384 >> 19 !== -1) { - $ERROR('#623: -16384 >> 19 === -1. Actual: ' + (-16384 >> 19)); -} - - -if (-32768 >> 19 !== -1) { - $ERROR('#624: -32768 >> 19 === -1. Actual: ' + (-32768 >> 19)); -} - - -if (-65536 >> 19 !== -1) { - $ERROR('#625: -65536 >> 19 === -1. Actual: ' + (-65536 >> 19)); -} - - -if (-131072 >> 19 !== -1) { - $ERROR('#626: -131072 >> 19 === -1. Actual: ' + (-131072 >> 19)); -} - - -if (-262144 >> 19 !== -1) { - $ERROR('#627: -262144 >> 19 === -1. Actual: ' + (-262144 >> 19)); -} - - -if (-524288 >> 19 !== -1) { - $ERROR('#628: -524288 >> 19 === -1. Actual: ' + (-524288 >> 19)); -} - - -if (-1048576 >> 19 !== -2) { - $ERROR('#629: -1048576 >> 19 === -2. Actual: ' + (-1048576 >> 19)); -} - - -if (-2097152 >> 19 !== -4) { - $ERROR('#630: -2097152 >> 19 === -4. Actual: ' + (-2097152 >> 19)); -} - - -if (-4194304 >> 19 !== -8) { - $ERROR('#631: -4194304 >> 19 === -8. Actual: ' + (-4194304 >> 19)); -} - - -if (-8388608 >> 19 !== -16) { - $ERROR('#632: -8388608 >> 19 === -16. Actual: ' + (-8388608 >> 19)); -} - - -if (-16777216 >> 19 !== -32) { - $ERROR('#633: -16777216 >> 19 === -32. Actual: ' + (-16777216 >> 19)); -} - - -if (-33554432 >> 19 !== -64) { - $ERROR('#634: -33554432 >> 19 === -64. Actual: ' + (-33554432 >> 19)); -} - - -if (-67108864 >> 19 !== -128) { - $ERROR('#635: -67108864 >> 19 === -128. Actual: ' + (-67108864 >> 19)); -} - - -if (-134217728 >> 19 !== -256) { - $ERROR('#636: -134217728 >> 19 === -256. Actual: ' + (-134217728 >> 19)); -} - - -if (-268435456 >> 19 !== -512) { - $ERROR('#637: -268435456 >> 19 === -512. Actual: ' + (-268435456 >> 19)); -} - - -if (-536870912 >> 19 !== -1024) { - $ERROR('#638: -536870912 >> 19 === -1024. Actual: ' + (-536870912 >> 19)); -} - - -if (-1073741824 >> 19 !== -2048) { - $ERROR('#639: -1073741824 >> 19 === -2048. Actual: ' + (-1073741824 >> 19)); -} - - -if (-2147483648 >> 19 !== -4096) { - $ERROR('#640: -2147483648 >> 19 === -4096. Actual: ' + (-2147483648 >> 19)); -} - - -if (-1 >> 20 !== -1) { - $ERROR('#641: -1 >> 20 === -1. Actual: ' + (-1 >> 20)); -} - - -if (-2 >> 20 !== -1) { - $ERROR('#642: -2 >> 20 === -1. Actual: ' + (-2 >> 20)); -} - - -if (-4 >> 20 !== -1) { - $ERROR('#643: -4 >> 20 === -1. Actual: ' + (-4 >> 20)); -} - - -if (-8 >> 20 !== -1) { - $ERROR('#644: -8 >> 20 === -1. Actual: ' + (-8 >> 20)); -} - - -if (-16 >> 20 !== -1) { - $ERROR('#645: -16 >> 20 === -1. Actual: ' + (-16 >> 20)); -} - - -if (-32 >> 20 !== -1) { - $ERROR('#646: -32 >> 20 === -1. Actual: ' + (-32 >> 20)); -} - - -if (-64 >> 20 !== -1) { - $ERROR('#647: -64 >> 20 === -1. Actual: ' + (-64 >> 20)); -} - - -if (-128 >> 20 !== -1) { - $ERROR('#648: -128 >> 20 === -1. Actual: ' + (-128 >> 20)); -} - - -if (-256 >> 20 !== -1) { - $ERROR('#649: -256 >> 20 === -1. Actual: ' + (-256 >> 20)); -} - - -if (-512 >> 20 !== -1) { - $ERROR('#650: -512 >> 20 === -1. Actual: ' + (-512 >> 20)); -} - - -if (-1024 >> 20 !== -1) { - $ERROR('#651: -1024 >> 20 === -1. Actual: ' + (-1024 >> 20)); -} - - -if (-2048 >> 20 !== -1) { - $ERROR('#652: -2048 >> 20 === -1. Actual: ' + (-2048 >> 20)); -} - - -if (-4096 >> 20 !== -1) { - $ERROR('#653: -4096 >> 20 === -1. Actual: ' + (-4096 >> 20)); -} - - -if (-8192 >> 20 !== -1) { - $ERROR('#654: -8192 >> 20 === -1. Actual: ' + (-8192 >> 20)); -} - - -if (-16384 >> 20 !== -1) { - $ERROR('#655: -16384 >> 20 === -1. Actual: ' + (-16384 >> 20)); -} - - -if (-32768 >> 20 !== -1) { - $ERROR('#656: -32768 >> 20 === -1. Actual: ' + (-32768 >> 20)); -} - - -if (-65536 >> 20 !== -1) { - $ERROR('#657: -65536 >> 20 === -1. Actual: ' + (-65536 >> 20)); -} - - -if (-131072 >> 20 !== -1) { - $ERROR('#658: -131072 >> 20 === -1. Actual: ' + (-131072 >> 20)); -} - - -if (-262144 >> 20 !== -1) { - $ERROR('#659: -262144 >> 20 === -1. Actual: ' + (-262144 >> 20)); -} - - -if (-524288 >> 20 !== -1) { - $ERROR('#660: -524288 >> 20 === -1. Actual: ' + (-524288 >> 20)); -} - - -if (-1048576 >> 20 !== -1) { - $ERROR('#661: -1048576 >> 20 === -1. Actual: ' + (-1048576 >> 20)); -} - - -if (-2097152 >> 20 !== -2) { - $ERROR('#662: -2097152 >> 20 === -2. Actual: ' + (-2097152 >> 20)); -} - - -if (-4194304 >> 20 !== -4) { - $ERROR('#663: -4194304 >> 20 === -4. Actual: ' + (-4194304 >> 20)); -} - - -if (-8388608 >> 20 !== -8) { - $ERROR('#664: -8388608 >> 20 === -8. Actual: ' + (-8388608 >> 20)); -} - - -if (-16777216 >> 20 !== -16) { - $ERROR('#665: -16777216 >> 20 === -16. Actual: ' + (-16777216 >> 20)); -} - - -if (-33554432 >> 20 !== -32) { - $ERROR('#666: -33554432 >> 20 === -32. Actual: ' + (-33554432 >> 20)); -} - - -if (-67108864 >> 20 !== -64) { - $ERROR('#667: -67108864 >> 20 === -64. Actual: ' + (-67108864 >> 20)); -} - - -if (-134217728 >> 20 !== -128) { - $ERROR('#668: -134217728 >> 20 === -128. Actual: ' + (-134217728 >> 20)); -} - - -if (-268435456 >> 20 !== -256) { - $ERROR('#669: -268435456 >> 20 === -256. Actual: ' + (-268435456 >> 20)); -} - - -if (-536870912 >> 20 !== -512) { - $ERROR('#670: -536870912 >> 20 === -512. Actual: ' + (-536870912 >> 20)); -} - - -if (-1073741824 >> 20 !== -1024) { - $ERROR('#671: -1073741824 >> 20 === -1024. Actual: ' + (-1073741824 >> 20)); -} - - -if (-2147483648 >> 20 !== -2048) { - $ERROR('#672: -2147483648 >> 20 === -2048. Actual: ' + (-2147483648 >> 20)); -} - - -if (-1 >> 21 !== -1) { - $ERROR('#673: -1 >> 21 === -1. Actual: ' + (-1 >> 21)); -} - - -if (-2 >> 21 !== -1) { - $ERROR('#674: -2 >> 21 === -1. Actual: ' + (-2 >> 21)); -} - - -if (-4 >> 21 !== -1) { - $ERROR('#675: -4 >> 21 === -1. Actual: ' + (-4 >> 21)); -} - - -if (-8 >> 21 !== -1) { - $ERROR('#676: -8 >> 21 === -1. Actual: ' + (-8 >> 21)); -} - - -if (-16 >> 21 !== -1) { - $ERROR('#677: -16 >> 21 === -1. Actual: ' + (-16 >> 21)); -} - - -if (-32 >> 21 !== -1) { - $ERROR('#678: -32 >> 21 === -1. Actual: ' + (-32 >> 21)); -} - - -if (-64 >> 21 !== -1) { - $ERROR('#679: -64 >> 21 === -1. Actual: ' + (-64 >> 21)); -} - - -if (-128 >> 21 !== -1) { - $ERROR('#680: -128 >> 21 === -1. Actual: ' + (-128 >> 21)); -} - - -if (-256 >> 21 !== -1) { - $ERROR('#681: -256 >> 21 === -1. Actual: ' + (-256 >> 21)); -} - - -if (-512 >> 21 !== -1) { - $ERROR('#682: -512 >> 21 === -1. Actual: ' + (-512 >> 21)); -} - - -if (-1024 >> 21 !== -1) { - $ERROR('#683: -1024 >> 21 === -1. Actual: ' + (-1024 >> 21)); -} - - -if (-2048 >> 21 !== -1) { - $ERROR('#684: -2048 >> 21 === -1. Actual: ' + (-2048 >> 21)); -} - - -if (-4096 >> 21 !== -1) { - $ERROR('#685: -4096 >> 21 === -1. Actual: ' + (-4096 >> 21)); -} - - -if (-8192 >> 21 !== -1) { - $ERROR('#686: -8192 >> 21 === -1. Actual: ' + (-8192 >> 21)); -} - - -if (-16384 >> 21 !== -1) { - $ERROR('#687: -16384 >> 21 === -1. Actual: ' + (-16384 >> 21)); -} - - -if (-32768 >> 21 !== -1) { - $ERROR('#688: -32768 >> 21 === -1. Actual: ' + (-32768 >> 21)); -} - - -if (-65536 >> 21 !== -1) { - $ERROR('#689: -65536 >> 21 === -1. Actual: ' + (-65536 >> 21)); -} - - -if (-131072 >> 21 !== -1) { - $ERROR('#690: -131072 >> 21 === -1. Actual: ' + (-131072 >> 21)); -} - - -if (-262144 >> 21 !== -1) { - $ERROR('#691: -262144 >> 21 === -1. Actual: ' + (-262144 >> 21)); -} - - -if (-524288 >> 21 !== -1) { - $ERROR('#692: -524288 >> 21 === -1. Actual: ' + (-524288 >> 21)); -} - - -if (-1048576 >> 21 !== -1) { - $ERROR('#693: -1048576 >> 21 === -1. Actual: ' + (-1048576 >> 21)); -} - - -if (-2097152 >> 21 !== -1) { - $ERROR('#694: -2097152 >> 21 === -1. Actual: ' + (-2097152 >> 21)); -} - - -if (-4194304 >> 21 !== -2) { - $ERROR('#695: -4194304 >> 21 === -2. Actual: ' + (-4194304 >> 21)); -} - - -if (-8388608 >> 21 !== -4) { - $ERROR('#696: -8388608 >> 21 === -4. Actual: ' + (-8388608 >> 21)); -} - - -if (-16777216 >> 21 !== -8) { - $ERROR('#697: -16777216 >> 21 === -8. Actual: ' + (-16777216 >> 21)); -} - - -if (-33554432 >> 21 !== -16) { - $ERROR('#698: -33554432 >> 21 === -16. Actual: ' + (-33554432 >> 21)); -} - - -if (-67108864 >> 21 !== -32) { - $ERROR('#699: -67108864 >> 21 === -32. Actual: ' + (-67108864 >> 21)); -} - - -if (-134217728 >> 21 !== -64) { - $ERROR('#700: -134217728 >> 21 === -64. Actual: ' + (-134217728 >> 21)); -} - - -if (-268435456 >> 21 !== -128) { - $ERROR('#701: -268435456 >> 21 === -128. Actual: ' + (-268435456 >> 21)); -} - - -if (-536870912 >> 21 !== -256) { - $ERROR('#702: -536870912 >> 21 === -256. Actual: ' + (-536870912 >> 21)); -} - - -if (-1073741824 >> 21 !== -512) { - $ERROR('#703: -1073741824 >> 21 === -512. Actual: ' + (-1073741824 >> 21)); -} - - -if (-2147483648 >> 21 !== -1024) { - $ERROR('#704: -2147483648 >> 21 === -1024. Actual: ' + (-2147483648 >> 21)); -} - - -if (-1 >> 22 !== -1) { - $ERROR('#705: -1 >> 22 === -1. Actual: ' + (-1 >> 22)); -} - - -if (-2 >> 22 !== -1) { - $ERROR('#706: -2 >> 22 === -1. Actual: ' + (-2 >> 22)); -} - - -if (-4 >> 22 !== -1) { - $ERROR('#707: -4 >> 22 === -1. Actual: ' + (-4 >> 22)); -} - - -if (-8 >> 22 !== -1) { - $ERROR('#708: -8 >> 22 === -1. Actual: ' + (-8 >> 22)); -} - - -if (-16 >> 22 !== -1) { - $ERROR('#709: -16 >> 22 === -1. Actual: ' + (-16 >> 22)); -} - - -if (-32 >> 22 !== -1) { - $ERROR('#710: -32 >> 22 === -1. Actual: ' + (-32 >> 22)); -} - - -if (-64 >> 22 !== -1) { - $ERROR('#711: -64 >> 22 === -1. Actual: ' + (-64 >> 22)); -} - - -if (-128 >> 22 !== -1) { - $ERROR('#712: -128 >> 22 === -1. Actual: ' + (-128 >> 22)); -} - - -if (-256 >> 22 !== -1) { - $ERROR('#713: -256 >> 22 === -1. Actual: ' + (-256 >> 22)); -} - - -if (-512 >> 22 !== -1) { - $ERROR('#714: -512 >> 22 === -1. Actual: ' + (-512 >> 22)); -} - - -if (-1024 >> 22 !== -1) { - $ERROR('#715: -1024 >> 22 === -1. Actual: ' + (-1024 >> 22)); -} - - -if (-2048 >> 22 !== -1) { - $ERROR('#716: -2048 >> 22 === -1. Actual: ' + (-2048 >> 22)); -} - - -if (-4096 >> 22 !== -1) { - $ERROR('#717: -4096 >> 22 === -1. Actual: ' + (-4096 >> 22)); -} - - -if (-8192 >> 22 !== -1) { - $ERROR('#718: -8192 >> 22 === -1. Actual: ' + (-8192 >> 22)); -} - - -if (-16384 >> 22 !== -1) { - $ERROR('#719: -16384 >> 22 === -1. Actual: ' + (-16384 >> 22)); -} - - -if (-32768 >> 22 !== -1) { - $ERROR('#720: -32768 >> 22 === -1. Actual: ' + (-32768 >> 22)); -} - - -if (-65536 >> 22 !== -1) { - $ERROR('#721: -65536 >> 22 === -1. Actual: ' + (-65536 >> 22)); -} - - -if (-131072 >> 22 !== -1) { - $ERROR('#722: -131072 >> 22 === -1. Actual: ' + (-131072 >> 22)); -} - - -if (-262144 >> 22 !== -1) { - $ERROR('#723: -262144 >> 22 === -1. Actual: ' + (-262144 >> 22)); -} - - -if (-524288 >> 22 !== -1) { - $ERROR('#724: -524288 >> 22 === -1. Actual: ' + (-524288 >> 22)); -} - - -if (-1048576 >> 22 !== -1) { - $ERROR('#725: -1048576 >> 22 === -1. Actual: ' + (-1048576 >> 22)); -} - - -if (-2097152 >> 22 !== -1) { - $ERROR('#726: -2097152 >> 22 === -1. Actual: ' + (-2097152 >> 22)); -} - - -if (-4194304 >> 22 !== -1) { - $ERROR('#727: -4194304 >> 22 === -1. Actual: ' + (-4194304 >> 22)); -} - - -if (-8388608 >> 22 !== -2) { - $ERROR('#728: -8388608 >> 22 === -2. Actual: ' + (-8388608 >> 22)); -} - - -if (-16777216 >> 22 !== -4) { - $ERROR('#729: -16777216 >> 22 === -4. Actual: ' + (-16777216 >> 22)); -} - - -if (-33554432 >> 22 !== -8) { - $ERROR('#730: -33554432 >> 22 === -8. Actual: ' + (-33554432 >> 22)); -} - - -if (-67108864 >> 22 !== -16) { - $ERROR('#731: -67108864 >> 22 === -16. Actual: ' + (-67108864 >> 22)); -} - - -if (-134217728 >> 22 !== -32) { - $ERROR('#732: -134217728 >> 22 === -32. Actual: ' + (-134217728 >> 22)); -} - - -if (-268435456 >> 22 !== -64) { - $ERROR('#733: -268435456 >> 22 === -64. Actual: ' + (-268435456 >> 22)); -} - - -if (-536870912 >> 22 !== -128) { - $ERROR('#734: -536870912 >> 22 === -128. Actual: ' + (-536870912 >> 22)); -} - - -if (-1073741824 >> 22 !== -256) { - $ERROR('#735: -1073741824 >> 22 === -256. Actual: ' + (-1073741824 >> 22)); -} - - -if (-2147483648 >> 22 !== -512) { - $ERROR('#736: -2147483648 >> 22 === -512. Actual: ' + (-2147483648 >> 22)); -} - - -if (-1 >> 23 !== -1) { - $ERROR('#737: -1 >> 23 === -1. Actual: ' + (-1 >> 23)); -} - - -if (-2 >> 23 !== -1) { - $ERROR('#738: -2 >> 23 === -1. Actual: ' + (-2 >> 23)); -} - - -if (-4 >> 23 !== -1) { - $ERROR('#739: -4 >> 23 === -1. Actual: ' + (-4 >> 23)); -} - - -if (-8 >> 23 !== -1) { - $ERROR('#740: -8 >> 23 === -1. Actual: ' + (-8 >> 23)); -} - - -if (-16 >> 23 !== -1) { - $ERROR('#741: -16 >> 23 === -1. Actual: ' + (-16 >> 23)); -} - - -if (-32 >> 23 !== -1) { - $ERROR('#742: -32 >> 23 === -1. Actual: ' + (-32 >> 23)); -} - - -if (-64 >> 23 !== -1) { - $ERROR('#743: -64 >> 23 === -1. Actual: ' + (-64 >> 23)); -} - - -if (-128 >> 23 !== -1) { - $ERROR('#744: -128 >> 23 === -1. Actual: ' + (-128 >> 23)); -} - - -if (-256 >> 23 !== -1) { - $ERROR('#745: -256 >> 23 === -1. Actual: ' + (-256 >> 23)); -} - - -if (-512 >> 23 !== -1) { - $ERROR('#746: -512 >> 23 === -1. Actual: ' + (-512 >> 23)); -} - - -if (-1024 >> 23 !== -1) { - $ERROR('#747: -1024 >> 23 === -1. Actual: ' + (-1024 >> 23)); -} - - -if (-2048 >> 23 !== -1) { - $ERROR('#748: -2048 >> 23 === -1. Actual: ' + (-2048 >> 23)); -} - - -if (-4096 >> 23 !== -1) { - $ERROR('#749: -4096 >> 23 === -1. Actual: ' + (-4096 >> 23)); -} - - -if (-8192 >> 23 !== -1) { - $ERROR('#750: -8192 >> 23 === -1. Actual: ' + (-8192 >> 23)); -} - - -if (-16384 >> 23 !== -1) { - $ERROR('#751: -16384 >> 23 === -1. Actual: ' + (-16384 >> 23)); -} - - -if (-32768 >> 23 !== -1) { - $ERROR('#752: -32768 >> 23 === -1. Actual: ' + (-32768 >> 23)); -} - - -if (-65536 >> 23 !== -1) { - $ERROR('#753: -65536 >> 23 === -1. Actual: ' + (-65536 >> 23)); -} - - -if (-131072 >> 23 !== -1) { - $ERROR('#754: -131072 >> 23 === -1. Actual: ' + (-131072 >> 23)); -} - - -if (-262144 >> 23 !== -1) { - $ERROR('#755: -262144 >> 23 === -1. Actual: ' + (-262144 >> 23)); -} - - -if (-524288 >> 23 !== -1) { - $ERROR('#756: -524288 >> 23 === -1. Actual: ' + (-524288 >> 23)); -} - - -if (-1048576 >> 23 !== -1) { - $ERROR('#757: -1048576 >> 23 === -1. Actual: ' + (-1048576 >> 23)); -} - - -if (-2097152 >> 23 !== -1) { - $ERROR('#758: -2097152 >> 23 === -1. Actual: ' + (-2097152 >> 23)); -} - - -if (-4194304 >> 23 !== -1) { - $ERROR('#759: -4194304 >> 23 === -1. Actual: ' + (-4194304 >> 23)); -} - - -if (-8388608 >> 23 !== -1) { - $ERROR('#760: -8388608 >> 23 === -1. Actual: ' + (-8388608 >> 23)); -} - - -if (-16777216 >> 23 !== -2) { - $ERROR('#761: -16777216 >> 23 === -2. Actual: ' + (-16777216 >> 23)); -} - - -if (-33554432 >> 23 !== -4) { - $ERROR('#762: -33554432 >> 23 === -4. Actual: ' + (-33554432 >> 23)); -} - - -if (-67108864 >> 23 !== -8) { - $ERROR('#763: -67108864 >> 23 === -8. Actual: ' + (-67108864 >> 23)); -} - - -if (-134217728 >> 23 !== -16) { - $ERROR('#764: -134217728 >> 23 === -16. Actual: ' + (-134217728 >> 23)); -} - - -if (-268435456 >> 23 !== -32) { - $ERROR('#765: -268435456 >> 23 === -32. Actual: ' + (-268435456 >> 23)); -} - - -if (-536870912 >> 23 !== -64) { - $ERROR('#766: -536870912 >> 23 === -64. Actual: ' + (-536870912 >> 23)); -} - - -if (-1073741824 >> 23 !== -128) { - $ERROR('#767: -1073741824 >> 23 === -128. Actual: ' + (-1073741824 >> 23)); -} - - -if (-2147483648 >> 23 !== -256) { - $ERROR('#768: -2147483648 >> 23 === -256. Actual: ' + (-2147483648 >> 23)); -} - - -if (-1 >> 24 !== -1) { - $ERROR('#769: -1 >> 24 === -1. Actual: ' + (-1 >> 24)); -} - - -if (-2 >> 24 !== -1) { - $ERROR('#770: -2 >> 24 === -1. Actual: ' + (-2 >> 24)); -} - - -if (-4 >> 24 !== -1) { - $ERROR('#771: -4 >> 24 === -1. Actual: ' + (-4 >> 24)); -} - - -if (-8 >> 24 !== -1) { - $ERROR('#772: -8 >> 24 === -1. Actual: ' + (-8 >> 24)); -} - - -if (-16 >> 24 !== -1) { - $ERROR('#773: -16 >> 24 === -1. Actual: ' + (-16 >> 24)); -} - - -if (-32 >> 24 !== -1) { - $ERROR('#774: -32 >> 24 === -1. Actual: ' + (-32 >> 24)); -} - - -if (-64 >> 24 !== -1) { - $ERROR('#775: -64 >> 24 === -1. Actual: ' + (-64 >> 24)); -} - - -if (-128 >> 24 !== -1) { - $ERROR('#776: -128 >> 24 === -1. Actual: ' + (-128 >> 24)); -} - - -if (-256 >> 24 !== -1) { - $ERROR('#777: -256 >> 24 === -1. Actual: ' + (-256 >> 24)); -} - - -if (-512 >> 24 !== -1) { - $ERROR('#778: -512 >> 24 === -1. Actual: ' + (-512 >> 24)); -} - - -if (-1024 >> 24 !== -1) { - $ERROR('#779: -1024 >> 24 === -1. Actual: ' + (-1024 >> 24)); -} - - -if (-2048 >> 24 !== -1) { - $ERROR('#780: -2048 >> 24 === -1. Actual: ' + (-2048 >> 24)); -} - - -if (-4096 >> 24 !== -1) { - $ERROR('#781: -4096 >> 24 === -1. Actual: ' + (-4096 >> 24)); -} - - -if (-8192 >> 24 !== -1) { - $ERROR('#782: -8192 >> 24 === -1. Actual: ' + (-8192 >> 24)); -} - - -if (-16384 >> 24 !== -1) { - $ERROR('#783: -16384 >> 24 === -1. Actual: ' + (-16384 >> 24)); -} - - -if (-32768 >> 24 !== -1) { - $ERROR('#784: -32768 >> 24 === -1. Actual: ' + (-32768 >> 24)); -} - - -if (-65536 >> 24 !== -1) { - $ERROR('#785: -65536 >> 24 === -1. Actual: ' + (-65536 >> 24)); -} - - -if (-131072 >> 24 !== -1) { - $ERROR('#786: -131072 >> 24 === -1. Actual: ' + (-131072 >> 24)); -} - - -if (-262144 >> 24 !== -1) { - $ERROR('#787: -262144 >> 24 === -1. Actual: ' + (-262144 >> 24)); -} - - -if (-524288 >> 24 !== -1) { - $ERROR('#788: -524288 >> 24 === -1. Actual: ' + (-524288 >> 24)); -} - - -if (-1048576 >> 24 !== -1) { - $ERROR('#789: -1048576 >> 24 === -1. Actual: ' + (-1048576 >> 24)); -} - - -if (-2097152 >> 24 !== -1) { - $ERROR('#790: -2097152 >> 24 === -1. Actual: ' + (-2097152 >> 24)); -} - - -if (-4194304 >> 24 !== -1) { - $ERROR('#791: -4194304 >> 24 === -1. Actual: ' + (-4194304 >> 24)); -} - - -if (-8388608 >> 24 !== -1) { - $ERROR('#792: -8388608 >> 24 === -1. Actual: ' + (-8388608 >> 24)); -} - - -if (-16777216 >> 24 !== -1) { - $ERROR('#793: -16777216 >> 24 === -1. Actual: ' + (-16777216 >> 24)); -} - - -if (-33554432 >> 24 !== -2) { - $ERROR('#794: -33554432 >> 24 === -2. Actual: ' + (-33554432 >> 24)); -} - - -if (-67108864 >> 24 !== -4) { - $ERROR('#795: -67108864 >> 24 === -4. Actual: ' + (-67108864 >> 24)); -} - - -if (-134217728 >> 24 !== -8) { - $ERROR('#796: -134217728 >> 24 === -8. Actual: ' + (-134217728 >> 24)); -} - - -if (-268435456 >> 24 !== -16) { - $ERROR('#797: -268435456 >> 24 === -16. Actual: ' + (-268435456 >> 24)); -} - - -if (-536870912 >> 24 !== -32) { - $ERROR('#798: -536870912 >> 24 === -32. Actual: ' + (-536870912 >> 24)); -} - - -if (-1073741824 >> 24 !== -64) { - $ERROR('#799: -1073741824 >> 24 === -64. Actual: ' + (-1073741824 >> 24)); -} - - -if (-2147483648 >> 24 !== -128) { - $ERROR('#800: -2147483648 >> 24 === -128. Actual: ' + (-2147483648 >> 24)); -} - - -if (-1 >> 25 !== -1) { - $ERROR('#801: -1 >> 25 === -1. Actual: ' + (-1 >> 25)); -} - - -if (-2 >> 25 !== -1) { - $ERROR('#802: -2 >> 25 === -1. Actual: ' + (-2 >> 25)); -} - - -if (-4 >> 25 !== -1) { - $ERROR('#803: -4 >> 25 === -1. Actual: ' + (-4 >> 25)); -} - - -if (-8 >> 25 !== -1) { - $ERROR('#804: -8 >> 25 === -1. Actual: ' + (-8 >> 25)); -} - - -if (-16 >> 25 !== -1) { - $ERROR('#805: -16 >> 25 === -1. Actual: ' + (-16 >> 25)); -} - - -if (-32 >> 25 !== -1) { - $ERROR('#806: -32 >> 25 === -1. Actual: ' + (-32 >> 25)); -} - - -if (-64 >> 25 !== -1) { - $ERROR('#807: -64 >> 25 === -1. Actual: ' + (-64 >> 25)); -} - - -if (-128 >> 25 !== -1) { - $ERROR('#808: -128 >> 25 === -1. Actual: ' + (-128 >> 25)); -} - - -if (-256 >> 25 !== -1) { - $ERROR('#809: -256 >> 25 === -1. Actual: ' + (-256 >> 25)); -} - - -if (-512 >> 25 !== -1) { - $ERROR('#810: -512 >> 25 === -1. Actual: ' + (-512 >> 25)); -} - - -if (-1024 >> 25 !== -1) { - $ERROR('#811: -1024 >> 25 === -1. Actual: ' + (-1024 >> 25)); -} - - -if (-2048 >> 25 !== -1) { - $ERROR('#812: -2048 >> 25 === -1. Actual: ' + (-2048 >> 25)); -} - - -if (-4096 >> 25 !== -1) { - $ERROR('#813: -4096 >> 25 === -1. Actual: ' + (-4096 >> 25)); -} - - -if (-8192 >> 25 !== -1) { - $ERROR('#814: -8192 >> 25 === -1. Actual: ' + (-8192 >> 25)); -} - - -if (-16384 >> 25 !== -1) { - $ERROR('#815: -16384 >> 25 === -1. Actual: ' + (-16384 >> 25)); -} - - -if (-32768 >> 25 !== -1) { - $ERROR('#816: -32768 >> 25 === -1. Actual: ' + (-32768 >> 25)); -} - - -if (-65536 >> 25 !== -1) { - $ERROR('#817: -65536 >> 25 === -1. Actual: ' + (-65536 >> 25)); -} - - -if (-131072 >> 25 !== -1) { - $ERROR('#818: -131072 >> 25 === -1. Actual: ' + (-131072 >> 25)); -} - - -if (-262144 >> 25 !== -1) { - $ERROR('#819: -262144 >> 25 === -1. Actual: ' + (-262144 >> 25)); -} - - -if (-524288 >> 25 !== -1) { - $ERROR('#820: -524288 >> 25 === -1. Actual: ' + (-524288 >> 25)); -} - - -if (-1048576 >> 25 !== -1) { - $ERROR('#821: -1048576 >> 25 === -1. Actual: ' + (-1048576 >> 25)); -} - - -if (-2097152 >> 25 !== -1) { - $ERROR('#822: -2097152 >> 25 === -1. Actual: ' + (-2097152 >> 25)); -} - - -if (-4194304 >> 25 !== -1) { - $ERROR('#823: -4194304 >> 25 === -1. Actual: ' + (-4194304 >> 25)); -} - - -if (-8388608 >> 25 !== -1) { - $ERROR('#824: -8388608 >> 25 === -1. Actual: ' + (-8388608 >> 25)); -} - - -if (-16777216 >> 25 !== -1) { - $ERROR('#825: -16777216 >> 25 === -1. Actual: ' + (-16777216 >> 25)); -} - - -if (-33554432 >> 25 !== -1) { - $ERROR('#826: -33554432 >> 25 === -1. Actual: ' + (-33554432 >> 25)); -} - - -if (-67108864 >> 25 !== -2) { - $ERROR('#827: -67108864 >> 25 === -2. Actual: ' + (-67108864 >> 25)); -} - - -if (-134217728 >> 25 !== -4) { - $ERROR('#828: -134217728 >> 25 === -4. Actual: ' + (-134217728 >> 25)); -} - - -if (-268435456 >> 25 !== -8) { - $ERROR('#829: -268435456 >> 25 === -8. Actual: ' + (-268435456 >> 25)); -} - - -if (-536870912 >> 25 !== -16) { - $ERROR('#830: -536870912 >> 25 === -16. Actual: ' + (-536870912 >> 25)); -} - - -if (-1073741824 >> 25 !== -32) { - $ERROR('#831: -1073741824 >> 25 === -32. Actual: ' + (-1073741824 >> 25)); -} - - -if (-2147483648 >> 25 !== -64) { - $ERROR('#832: -2147483648 >> 25 === -64. Actual: ' + (-2147483648 >> 25)); -} - - -if (-1 >> 26 !== -1) { - $ERROR('#833: -1 >> 26 === -1. Actual: ' + (-1 >> 26)); -} - - -if (-2 >> 26 !== -1) { - $ERROR('#834: -2 >> 26 === -1. Actual: ' + (-2 >> 26)); -} - - -if (-4 >> 26 !== -1) { - $ERROR('#835: -4 >> 26 === -1. Actual: ' + (-4 >> 26)); -} - - -if (-8 >> 26 !== -1) { - $ERROR('#836: -8 >> 26 === -1. Actual: ' + (-8 >> 26)); -} - - -if (-16 >> 26 !== -1) { - $ERROR('#837: -16 >> 26 === -1. Actual: ' + (-16 >> 26)); -} - - -if (-32 >> 26 !== -1) { - $ERROR('#838: -32 >> 26 === -1. Actual: ' + (-32 >> 26)); -} - - -if (-64 >> 26 !== -1) { - $ERROR('#839: -64 >> 26 === -1. Actual: ' + (-64 >> 26)); -} - - -if (-128 >> 26 !== -1) { - $ERROR('#840: -128 >> 26 === -1. Actual: ' + (-128 >> 26)); -} - - -if (-256 >> 26 !== -1) { - $ERROR('#841: -256 >> 26 === -1. Actual: ' + (-256 >> 26)); -} - - -if (-512 >> 26 !== -1) { - $ERROR('#842: -512 >> 26 === -1. Actual: ' + (-512 >> 26)); -} - - -if (-1024 >> 26 !== -1) { - $ERROR('#843: -1024 >> 26 === -1. Actual: ' + (-1024 >> 26)); -} - - -if (-2048 >> 26 !== -1) { - $ERROR('#844: -2048 >> 26 === -1. Actual: ' + (-2048 >> 26)); -} - - -if (-4096 >> 26 !== -1) { - $ERROR('#845: -4096 >> 26 === -1. Actual: ' + (-4096 >> 26)); -} - - -if (-8192 >> 26 !== -1) { - $ERROR('#846: -8192 >> 26 === -1. Actual: ' + (-8192 >> 26)); -} - - -if (-16384 >> 26 !== -1) { - $ERROR('#847: -16384 >> 26 === -1. Actual: ' + (-16384 >> 26)); -} - - -if (-32768 >> 26 !== -1) { - $ERROR('#848: -32768 >> 26 === -1. Actual: ' + (-32768 >> 26)); -} - - -if (-65536 >> 26 !== -1) { - $ERROR('#849: -65536 >> 26 === -1. Actual: ' + (-65536 >> 26)); -} - - -if (-131072 >> 26 !== -1) { - $ERROR('#850: -131072 >> 26 === -1. Actual: ' + (-131072 >> 26)); -} - - -if (-262144 >> 26 !== -1) { - $ERROR('#851: -262144 >> 26 === -1. Actual: ' + (-262144 >> 26)); -} - - -if (-524288 >> 26 !== -1) { - $ERROR('#852: -524288 >> 26 === -1. Actual: ' + (-524288 >> 26)); -} - - -if (-1048576 >> 26 !== -1) { - $ERROR('#853: -1048576 >> 26 === -1. Actual: ' + (-1048576 >> 26)); -} - - -if (-2097152 >> 26 !== -1) { - $ERROR('#854: -2097152 >> 26 === -1. Actual: ' + (-2097152 >> 26)); -} - - -if (-4194304 >> 26 !== -1) { - $ERROR('#855: -4194304 >> 26 === -1. Actual: ' + (-4194304 >> 26)); -} - - -if (-8388608 >> 26 !== -1) { - $ERROR('#856: -8388608 >> 26 === -1. Actual: ' + (-8388608 >> 26)); -} - - -if (-16777216 >> 26 !== -1) { - $ERROR('#857: -16777216 >> 26 === -1. Actual: ' + (-16777216 >> 26)); -} - - -if (-33554432 >> 26 !== -1) { - $ERROR('#858: -33554432 >> 26 === -1. Actual: ' + (-33554432 >> 26)); -} - - -if (-67108864 >> 26 !== -1) { - $ERROR('#859: -67108864 >> 26 === -1. Actual: ' + (-67108864 >> 26)); -} - - -if (-134217728 >> 26 !== -2) { - $ERROR('#860: -134217728 >> 26 === -2. Actual: ' + (-134217728 >> 26)); -} - - -if (-268435456 >> 26 !== -4) { - $ERROR('#861: -268435456 >> 26 === -4. Actual: ' + (-268435456 >> 26)); -} - - -if (-536870912 >> 26 !== -8) { - $ERROR('#862: -536870912 >> 26 === -8. Actual: ' + (-536870912 >> 26)); -} - - -if (-1073741824 >> 26 !== -16) { - $ERROR('#863: -1073741824 >> 26 === -16. Actual: ' + (-1073741824 >> 26)); -} - - -if (-2147483648 >> 26 !== -32) { - $ERROR('#864: -2147483648 >> 26 === -32. Actual: ' + (-2147483648 >> 26)); -} - - -if (-1 >> 27 !== -1) { - $ERROR('#865: -1 >> 27 === -1. Actual: ' + (-1 >> 27)); -} - - -if (-2 >> 27 !== -1) { - $ERROR('#866: -2 >> 27 === -1. Actual: ' + (-2 >> 27)); -} - - -if (-4 >> 27 !== -1) { - $ERROR('#867: -4 >> 27 === -1. Actual: ' + (-4 >> 27)); -} - - -if (-8 >> 27 !== -1) { - $ERROR('#868: -8 >> 27 === -1. Actual: ' + (-8 >> 27)); -} - - -if (-16 >> 27 !== -1) { - $ERROR('#869: -16 >> 27 === -1. Actual: ' + (-16 >> 27)); -} - - -if (-32 >> 27 !== -1) { - $ERROR('#870: -32 >> 27 === -1. Actual: ' + (-32 >> 27)); -} - - -if (-64 >> 27 !== -1) { - $ERROR('#871: -64 >> 27 === -1. Actual: ' + (-64 >> 27)); -} - - -if (-128 >> 27 !== -1) { - $ERROR('#872: -128 >> 27 === -1. Actual: ' + (-128 >> 27)); -} - - -if (-256 >> 27 !== -1) { - $ERROR('#873: -256 >> 27 === -1. Actual: ' + (-256 >> 27)); -} - - -if (-512 >> 27 !== -1) { - $ERROR('#874: -512 >> 27 === -1. Actual: ' + (-512 >> 27)); -} - - -if (-1024 >> 27 !== -1) { - $ERROR('#875: -1024 >> 27 === -1. Actual: ' + (-1024 >> 27)); -} - - -if (-2048 >> 27 !== -1) { - $ERROR('#876: -2048 >> 27 === -1. Actual: ' + (-2048 >> 27)); -} - - -if (-4096 >> 27 !== -1) { - $ERROR('#877: -4096 >> 27 === -1. Actual: ' + (-4096 >> 27)); -} - - -if (-8192 >> 27 !== -1) { - $ERROR('#878: -8192 >> 27 === -1. Actual: ' + (-8192 >> 27)); -} - - -if (-16384 >> 27 !== -1) { - $ERROR('#879: -16384 >> 27 === -1. Actual: ' + (-16384 >> 27)); -} - - -if (-32768 >> 27 !== -1) { - $ERROR('#880: -32768 >> 27 === -1. Actual: ' + (-32768 >> 27)); -} - - -if (-65536 >> 27 !== -1) { - $ERROR('#881: -65536 >> 27 === -1. Actual: ' + (-65536 >> 27)); -} - - -if (-131072 >> 27 !== -1) { - $ERROR('#882: -131072 >> 27 === -1. Actual: ' + (-131072 >> 27)); -} - - -if (-262144 >> 27 !== -1) { - $ERROR('#883: -262144 >> 27 === -1. Actual: ' + (-262144 >> 27)); -} - - -if (-524288 >> 27 !== -1) { - $ERROR('#884: -524288 >> 27 === -1. Actual: ' + (-524288 >> 27)); -} - - -if (-1048576 >> 27 !== -1) { - $ERROR('#885: -1048576 >> 27 === -1. Actual: ' + (-1048576 >> 27)); -} - - -if (-2097152 >> 27 !== -1) { - $ERROR('#886: -2097152 >> 27 === -1. Actual: ' + (-2097152 >> 27)); -} - - -if (-4194304 >> 27 !== -1) { - $ERROR('#887: -4194304 >> 27 === -1. Actual: ' + (-4194304 >> 27)); -} - - -if (-8388608 >> 27 !== -1) { - $ERROR('#888: -8388608 >> 27 === -1. Actual: ' + (-8388608 >> 27)); -} - - -if (-16777216 >> 27 !== -1) { - $ERROR('#889: -16777216 >> 27 === -1. Actual: ' + (-16777216 >> 27)); -} - - -if (-33554432 >> 27 !== -1) { - $ERROR('#890: -33554432 >> 27 === -1. Actual: ' + (-33554432 >> 27)); -} - - -if (-67108864 >> 27 !== -1) { - $ERROR('#891: -67108864 >> 27 === -1. Actual: ' + (-67108864 >> 27)); -} - - -if (-134217728 >> 27 !== -1) { - $ERROR('#892: -134217728 >> 27 === -1. Actual: ' + (-134217728 >> 27)); -} - - -if (-268435456 >> 27 !== -2) { - $ERROR('#893: -268435456 >> 27 === -2. Actual: ' + (-268435456 >> 27)); -} - - -if (-536870912 >> 27 !== -4) { - $ERROR('#894: -536870912 >> 27 === -4. Actual: ' + (-536870912 >> 27)); -} - - -if (-1073741824 >> 27 !== -8) { - $ERROR('#895: -1073741824 >> 27 === -8. Actual: ' + (-1073741824 >> 27)); -} - - -if (-2147483648 >> 27 !== -16) { - $ERROR('#896: -2147483648 >> 27 === -16. Actual: ' + (-2147483648 >> 27)); -} - - -if (-1 >> 28 !== -1) { - $ERROR('#897: -1 >> 28 === -1. Actual: ' + (-1 >> 28)); -} - - -if (-2 >> 28 !== -1) { - $ERROR('#898: -2 >> 28 === -1. Actual: ' + (-2 >> 28)); -} - - -if (-4 >> 28 !== -1) { - $ERROR('#899: -4 >> 28 === -1. Actual: ' + (-4 >> 28)); -} - - -if (-8 >> 28 !== -1) { - $ERROR('#900: -8 >> 28 === -1. Actual: ' + (-8 >> 28)); -} - - -if (-16 >> 28 !== -1) { - $ERROR('#901: -16 >> 28 === -1. Actual: ' + (-16 >> 28)); -} - - -if (-32 >> 28 !== -1) { - $ERROR('#902: -32 >> 28 === -1. Actual: ' + (-32 >> 28)); -} - - -if (-64 >> 28 !== -1) { - $ERROR('#903: -64 >> 28 === -1. Actual: ' + (-64 >> 28)); -} - - -if (-128 >> 28 !== -1) { - $ERROR('#904: -128 >> 28 === -1. Actual: ' + (-128 >> 28)); -} - - -if (-256 >> 28 !== -1) { - $ERROR('#905: -256 >> 28 === -1. Actual: ' + (-256 >> 28)); -} - - -if (-512 >> 28 !== -1) { - $ERROR('#906: -512 >> 28 === -1. Actual: ' + (-512 >> 28)); -} - - -if (-1024 >> 28 !== -1) { - $ERROR('#907: -1024 >> 28 === -1. Actual: ' + (-1024 >> 28)); -} - - -if (-2048 >> 28 !== -1) { - $ERROR('#908: -2048 >> 28 === -1. Actual: ' + (-2048 >> 28)); -} - - -if (-4096 >> 28 !== -1) { - $ERROR('#909: -4096 >> 28 === -1. Actual: ' + (-4096 >> 28)); -} - - -if (-8192 >> 28 !== -1) { - $ERROR('#910: -8192 >> 28 === -1. Actual: ' + (-8192 >> 28)); -} - - -if (-16384 >> 28 !== -1) { - $ERROR('#911: -16384 >> 28 === -1. Actual: ' + (-16384 >> 28)); -} - - -if (-32768 >> 28 !== -1) { - $ERROR('#912: -32768 >> 28 === -1. Actual: ' + (-32768 >> 28)); -} - - -if (-65536 >> 28 !== -1) { - $ERROR('#913: -65536 >> 28 === -1. Actual: ' + (-65536 >> 28)); -} - - -if (-131072 >> 28 !== -1) { - $ERROR('#914: -131072 >> 28 === -1. Actual: ' + (-131072 >> 28)); -} - - -if (-262144 >> 28 !== -1) { - $ERROR('#915: -262144 >> 28 === -1. Actual: ' + (-262144 >> 28)); -} - - -if (-524288 >> 28 !== -1) { - $ERROR('#916: -524288 >> 28 === -1. Actual: ' + (-524288 >> 28)); -} - - -if (-1048576 >> 28 !== -1) { - $ERROR('#917: -1048576 >> 28 === -1. Actual: ' + (-1048576 >> 28)); -} - - -if (-2097152 >> 28 !== -1) { - $ERROR('#918: -2097152 >> 28 === -1. Actual: ' + (-2097152 >> 28)); -} - - -if (-4194304 >> 28 !== -1) { - $ERROR('#919: -4194304 >> 28 === -1. Actual: ' + (-4194304 >> 28)); -} - - -if (-8388608 >> 28 !== -1) { - $ERROR('#920: -8388608 >> 28 === -1. Actual: ' + (-8388608 >> 28)); -} - - -if (-16777216 >> 28 !== -1) { - $ERROR('#921: -16777216 >> 28 === -1. Actual: ' + (-16777216 >> 28)); -} - - -if (-33554432 >> 28 !== -1) { - $ERROR('#922: -33554432 >> 28 === -1. Actual: ' + (-33554432 >> 28)); -} - - -if (-67108864 >> 28 !== -1) { - $ERROR('#923: -67108864 >> 28 === -1. Actual: ' + (-67108864 >> 28)); -} - - -if (-134217728 >> 28 !== -1) { - $ERROR('#924: -134217728 >> 28 === -1. Actual: ' + (-134217728 >> 28)); -} - - -if (-268435456 >> 28 !== -1) { - $ERROR('#925: -268435456 >> 28 === -1. Actual: ' + (-268435456 >> 28)); -} - - -if (-536870912 >> 28 !== -2) { - $ERROR('#926: -536870912 >> 28 === -2. Actual: ' + (-536870912 >> 28)); -} - - -if (-1073741824 >> 28 !== -4) { - $ERROR('#927: -1073741824 >> 28 === -4. Actual: ' + (-1073741824 >> 28)); -} - - -if (-2147483648 >> 28 !== -8) { - $ERROR('#928: -2147483648 >> 28 === -8. Actual: ' + (-2147483648 >> 28)); -} - - -if (-1 >> 29 !== -1) { - $ERROR('#929: -1 >> 29 === -1. Actual: ' + (-1 >> 29)); -} - - -if (-2 >> 29 !== -1) { - $ERROR('#930: -2 >> 29 === -1. Actual: ' + (-2 >> 29)); -} - - -if (-4 >> 29 !== -1) { - $ERROR('#931: -4 >> 29 === -1. Actual: ' + (-4 >> 29)); -} - - -if (-8 >> 29 !== -1) { - $ERROR('#932: -8 >> 29 === -1. Actual: ' + (-8 >> 29)); -} - - -if (-16 >> 29 !== -1) { - $ERROR('#933: -16 >> 29 === -1. Actual: ' + (-16 >> 29)); -} - - -if (-32 >> 29 !== -1) { - $ERROR('#934: -32 >> 29 === -1. Actual: ' + (-32 >> 29)); -} - - -if (-64 >> 29 !== -1) { - $ERROR('#935: -64 >> 29 === -1. Actual: ' + (-64 >> 29)); -} - - -if (-128 >> 29 !== -1) { - $ERROR('#936: -128 >> 29 === -1. Actual: ' + (-128 >> 29)); -} - - -if (-256 >> 29 !== -1) { - $ERROR('#937: -256 >> 29 === -1. Actual: ' + (-256 >> 29)); -} - - -if (-512 >> 29 !== -1) { - $ERROR('#938: -512 >> 29 === -1. Actual: ' + (-512 >> 29)); -} - - -if (-1024 >> 29 !== -1) { - $ERROR('#939: -1024 >> 29 === -1. Actual: ' + (-1024 >> 29)); -} - - -if (-2048 >> 29 !== -1) { - $ERROR('#940: -2048 >> 29 === -1. Actual: ' + (-2048 >> 29)); -} - - -if (-4096 >> 29 !== -1) { - $ERROR('#941: -4096 >> 29 === -1. Actual: ' + (-4096 >> 29)); -} - - -if (-8192 >> 29 !== -1) { - $ERROR('#942: -8192 >> 29 === -1. Actual: ' + (-8192 >> 29)); -} - - -if (-16384 >> 29 !== -1) { - $ERROR('#943: -16384 >> 29 === -1. Actual: ' + (-16384 >> 29)); -} - - -if (-32768 >> 29 !== -1) { - $ERROR('#944: -32768 >> 29 === -1. Actual: ' + (-32768 >> 29)); -} - - -if (-65536 >> 29 !== -1) { - $ERROR('#945: -65536 >> 29 === -1. Actual: ' + (-65536 >> 29)); -} - - -if (-131072 >> 29 !== -1) { - $ERROR('#946: -131072 >> 29 === -1. Actual: ' + (-131072 >> 29)); -} - - -if (-262144 >> 29 !== -1) { - $ERROR('#947: -262144 >> 29 === -1. Actual: ' + (-262144 >> 29)); -} - - -if (-524288 >> 29 !== -1) { - $ERROR('#948: -524288 >> 29 === -1. Actual: ' + (-524288 >> 29)); -} - - -if (-1048576 >> 29 !== -1) { - $ERROR('#949: -1048576 >> 29 === -1. Actual: ' + (-1048576 >> 29)); -} - - -if (-2097152 >> 29 !== -1) { - $ERROR('#950: -2097152 >> 29 === -1. Actual: ' + (-2097152 >> 29)); -} - - -if (-4194304 >> 29 !== -1) { - $ERROR('#951: -4194304 >> 29 === -1. Actual: ' + (-4194304 >> 29)); -} - - -if (-8388608 >> 29 !== -1) { - $ERROR('#952: -8388608 >> 29 === -1. Actual: ' + (-8388608 >> 29)); -} - - -if (-16777216 >> 29 !== -1) { - $ERROR('#953: -16777216 >> 29 === -1. Actual: ' + (-16777216 >> 29)); -} - - -if (-33554432 >> 29 !== -1) { - $ERROR('#954: -33554432 >> 29 === -1. Actual: ' + (-33554432 >> 29)); -} - - -if (-67108864 >> 29 !== -1) { - $ERROR('#955: -67108864 >> 29 === -1. Actual: ' + (-67108864 >> 29)); -} - - -if (-134217728 >> 29 !== -1) { - $ERROR('#956: -134217728 >> 29 === -1. Actual: ' + (-134217728 >> 29)); -} - - -if (-268435456 >> 29 !== -1) { - $ERROR('#957: -268435456 >> 29 === -1. Actual: ' + (-268435456 >> 29)); -} - - -if (-536870912 >> 29 !== -1) { - $ERROR('#958: -536870912 >> 29 === -1. Actual: ' + (-536870912 >> 29)); -} - - -if (-1073741824 >> 29 !== -2) { - $ERROR('#959: -1073741824 >> 29 === -2. Actual: ' + (-1073741824 >> 29)); -} - - -if (-2147483648 >> 29 !== -4) { - $ERROR('#960: -2147483648 >> 29 === -4. Actual: ' + (-2147483648 >> 29)); -} - - -if (-1 >> 30 !== -1) { - $ERROR('#961: -1 >> 30 === -1. Actual: ' + (-1 >> 30)); -} - - -if (-2 >> 30 !== -1) { - $ERROR('#962: -2 >> 30 === -1. Actual: ' + (-2 >> 30)); -} - - -if (-4 >> 30 !== -1) { - $ERROR('#963: -4 >> 30 === -1. Actual: ' + (-4 >> 30)); -} - - -if (-8 >> 30 !== -1) { - $ERROR('#964: -8 >> 30 === -1. Actual: ' + (-8 >> 30)); -} - - -if (-16 >> 30 !== -1) { - $ERROR('#965: -16 >> 30 === -1. Actual: ' + (-16 >> 30)); -} - - -if (-32 >> 30 !== -1) { - $ERROR('#966: -32 >> 30 === -1. Actual: ' + (-32 >> 30)); -} - - -if (-64 >> 30 !== -1) { - $ERROR('#967: -64 >> 30 === -1. Actual: ' + (-64 >> 30)); -} - - -if (-128 >> 30 !== -1) { - $ERROR('#968: -128 >> 30 === -1. Actual: ' + (-128 >> 30)); -} - - -if (-256 >> 30 !== -1) { - $ERROR('#969: -256 >> 30 === -1. Actual: ' + (-256 >> 30)); -} - - -if (-512 >> 30 !== -1) { - $ERROR('#970: -512 >> 30 === -1. Actual: ' + (-512 >> 30)); -} - - -if (-1024 >> 30 !== -1) { - $ERROR('#971: -1024 >> 30 === -1. Actual: ' + (-1024 >> 30)); -} - - -if (-2048 >> 30 !== -1) { - $ERROR('#972: -2048 >> 30 === -1. Actual: ' + (-2048 >> 30)); -} - - -if (-4096 >> 30 !== -1) { - $ERROR('#973: -4096 >> 30 === -1. Actual: ' + (-4096 >> 30)); -} - - -if (-8192 >> 30 !== -1) { - $ERROR('#974: -8192 >> 30 === -1. Actual: ' + (-8192 >> 30)); -} - - -if (-16384 >> 30 !== -1) { - $ERROR('#975: -16384 >> 30 === -1. Actual: ' + (-16384 >> 30)); -} - - -if (-32768 >> 30 !== -1) { - $ERROR('#976: -32768 >> 30 === -1. Actual: ' + (-32768 >> 30)); -} - - -if (-65536 >> 30 !== -1) { - $ERROR('#977: -65536 >> 30 === -1. Actual: ' + (-65536 >> 30)); -} - - -if (-131072 >> 30 !== -1) { - $ERROR('#978: -131072 >> 30 === -1. Actual: ' + (-131072 >> 30)); -} - - -if (-262144 >> 30 !== -1) { - $ERROR('#979: -262144 >> 30 === -1. Actual: ' + (-262144 >> 30)); -} - - -if (-524288 >> 30 !== -1) { - $ERROR('#980: -524288 >> 30 === -1. Actual: ' + (-524288 >> 30)); -} - - -if (-1048576 >> 30 !== -1) { - $ERROR('#981: -1048576 >> 30 === -1. Actual: ' + (-1048576 >> 30)); -} - - -if (-2097152 >> 30 !== -1) { - $ERROR('#982: -2097152 >> 30 === -1. Actual: ' + (-2097152 >> 30)); -} - - -if (-4194304 >> 30 !== -1) { - $ERROR('#983: -4194304 >> 30 === -1. Actual: ' + (-4194304 >> 30)); -} - - -if (-8388608 >> 30 !== -1) { - $ERROR('#984: -8388608 >> 30 === -1. Actual: ' + (-8388608 >> 30)); -} - - -if (-16777216 >> 30 !== -1) { - $ERROR('#985: -16777216 >> 30 === -1. Actual: ' + (-16777216 >> 30)); -} - - -if (-33554432 >> 30 !== -1) { - $ERROR('#986: -33554432 >> 30 === -1. Actual: ' + (-33554432 >> 30)); -} - - -if (-67108864 >> 30 !== -1) { - $ERROR('#987: -67108864 >> 30 === -1. Actual: ' + (-67108864 >> 30)); -} - - -if (-134217728 >> 30 !== -1) { - $ERROR('#988: -134217728 >> 30 === -1. Actual: ' + (-134217728 >> 30)); -} - - -if (-268435456 >> 30 !== -1) { - $ERROR('#989: -268435456 >> 30 === -1. Actual: ' + (-268435456 >> 30)); -} - - -if (-536870912 >> 30 !== -1) { - $ERROR('#990: -536870912 >> 30 === -1. Actual: ' + (-536870912 >> 30)); -} - - -if (-1073741824 >> 30 !== -1) { - $ERROR('#991: -1073741824 >> 30 === -1. Actual: ' + (-1073741824 >> 30)); -} - - -if (-2147483648 >> 30 !== -2) { - $ERROR('#992: -2147483648 >> 30 === -2. Actual: ' + (-2147483648 >> 30)); -} - - -if (-1 >> 31 !== -1) { - $ERROR('#993: -1 >> 31 === -1. Actual: ' + (-1 >> 31)); -} - - -if (-2 >> 31 !== -1) { - $ERROR('#994: -2 >> 31 === -1. Actual: ' + (-2 >> 31)); -} - - -if (-4 >> 31 !== -1) { - $ERROR('#995: -4 >> 31 === -1. Actual: ' + (-4 >> 31)); -} - - -if (-8 >> 31 !== -1) { - $ERROR('#996: -8 >> 31 === -1. Actual: ' + (-8 >> 31)); -} - - -if (-16 >> 31 !== -1) { - $ERROR('#997: -16 >> 31 === -1. Actual: ' + (-16 >> 31)); -} - - -if (-32 >> 31 !== -1) { - $ERROR('#998: -32 >> 31 === -1. Actual: ' + (-32 >> 31)); -} - - -if (-64 >> 31 !== -1) { - $ERROR('#999: -64 >> 31 === -1. Actual: ' + (-64 >> 31)); -} - - -if (-128 >> 31 !== -1) { - $ERROR('#1000: -128 >> 31 === -1. Actual: ' + (-128 >> 31)); -} - - -if (-256 >> 31 !== -1) { - $ERROR('#1001: -256 >> 31 === -1. Actual: ' + (-256 >> 31)); -} - - -if (-512 >> 31 !== -1) { - $ERROR('#1002: -512 >> 31 === -1. Actual: ' + (-512 >> 31)); -} - - -if (-1024 >> 31 !== -1) { - $ERROR('#1003: -1024 >> 31 === -1. Actual: ' + (-1024 >> 31)); -} - - -if (-2048 >> 31 !== -1) { - $ERROR('#1004: -2048 >> 31 === -1. Actual: ' + (-2048 >> 31)); -} - - -if (-4096 >> 31 !== -1) { - $ERROR('#1005: -4096 >> 31 === -1. Actual: ' + (-4096 >> 31)); -} - - -if (-8192 >> 31 !== -1) { - $ERROR('#1006: -8192 >> 31 === -1. Actual: ' + (-8192 >> 31)); -} - - -if (-16384 >> 31 !== -1) { - $ERROR('#1007: -16384 >> 31 === -1. Actual: ' + (-16384 >> 31)); -} - - -if (-32768 >> 31 !== -1) { - $ERROR('#1008: -32768 >> 31 === -1. Actual: ' + (-32768 >> 31)); -} - - -if (-65536 >> 31 !== -1) { - $ERROR('#1009: -65536 >> 31 === -1. Actual: ' + (-65536 >> 31)); -} - - -if (-131072 >> 31 !== -1) { - $ERROR('#1010: -131072 >> 31 === -1. Actual: ' + (-131072 >> 31)); -} - - -if (-262144 >> 31 !== -1) { - $ERROR('#1011: -262144 >> 31 === -1. Actual: ' + (-262144 >> 31)); -} - - -if (-524288 >> 31 !== -1) { - $ERROR('#1012: -524288 >> 31 === -1. Actual: ' + (-524288 >> 31)); -} - - -if (-1048576 >> 31 !== -1) { - $ERROR('#1013: -1048576 >> 31 === -1. Actual: ' + (-1048576 >> 31)); -} - - -if (-2097152 >> 31 !== -1) { - $ERROR('#1014: -2097152 >> 31 === -1. Actual: ' + (-2097152 >> 31)); -} - - -if (-4194304 >> 31 !== -1) { - $ERROR('#1015: -4194304 >> 31 === -1. Actual: ' + (-4194304 >> 31)); -} - - -if (-8388608 >> 31 !== -1) { - $ERROR('#1016: -8388608 >> 31 === -1. Actual: ' + (-8388608 >> 31)); -} - - -if (-16777216 >> 31 !== -1) { - $ERROR('#1017: -16777216 >> 31 === -1. Actual: ' + (-16777216 >> 31)); -} - - -if (-33554432 >> 31 !== -1) { - $ERROR('#1018: -33554432 >> 31 === -1. Actual: ' + (-33554432 >> 31)); -} - - -if (-67108864 >> 31 !== -1) { - $ERROR('#1019: -67108864 >> 31 === -1. Actual: ' + (-67108864 >> 31)); -} - - -if (-134217728 >> 31 !== -1) { - $ERROR('#1020: -134217728 >> 31 === -1. Actual: ' + (-134217728 >> 31)); -} - - -if (-268435456 >> 31 !== -1) { - $ERROR('#1021: -268435456 >> 31 === -1. Actual: ' + (-268435456 >> 31)); -} - - -if (-536870912 >> 31 !== -1) { - $ERROR('#1022: -536870912 >> 31 === -1. Actual: ' + (-536870912 >> 31)); -} - - -if (-1073741824 >> 31 !== -1) { - $ERROR('#1023: -1073741824 >> 31 === -1. Actual: ' + (-1073741824 >> 31)); -} - - -if (-2147483648 >> 31 !== -1) { - $ERROR('#1024: -2147483648 >> 31 === -1. Actual: ' + (-2147483648 >> 31)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A4_T3.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A4_T3.js deleted file mode 100644 index a64be3de7..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A4_T3.js +++ /dev/null @@ -1,2570 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.2_A4_T3; - * @section: 11.7.2; - * @assertion: Check x >> y operator in distinct points; - * @description: ShiftExpression = 2^n - 1, n = 0...15; - */ - -//CHECK - -if (0 >> 0 !== 0) { - $ERROR('#1: 0 >> 0 === 0. Actual: ' + (0 >> 0)); -} - - -if (1 >> 0 !== 1) { - $ERROR('#2: 1 >> 0 === 1. Actual: ' + (1 >> 0)); -} - - -if (3 >> 0 !== 3) { - $ERROR('#3: 3 >> 0 === 3. Actual: ' + (3 >> 0)); -} - - -if (7 >> 0 !== 7) { - $ERROR('#4: 7 >> 0 === 7. Actual: ' + (7 >> 0)); -} - - -if (15 >> 0 !== 15) { - $ERROR('#5: 15 >> 0 === 15. Actual: ' + (15 >> 0)); -} - - -if (31 >> 0 !== 31) { - $ERROR('#6: 31 >> 0 === 31. Actual: ' + (31 >> 0)); -} - - -if (63 >> 0 !== 63) { - $ERROR('#7: 63 >> 0 === 63. Actual: ' + (63 >> 0)); -} - - -if (127 >> 0 !== 127) { - $ERROR('#8: 127 >> 0 === 127. Actual: ' + (127 >> 0)); -} - - -if (255 >> 0 !== 255) { - $ERROR('#9: 255 >> 0 === 255. Actual: ' + (255 >> 0)); -} - - -if (511 >> 0 !== 511) { - $ERROR('#10: 511 >> 0 === 511. Actual: ' + (511 >> 0)); -} - - -if (1023 >> 0 !== 1023) { - $ERROR('#11: 1023 >> 0 === 1023. Actual: ' + (1023 >> 0)); -} - - -if (2047 >> 0 !== 2047) { - $ERROR('#12: 2047 >> 0 === 2047. Actual: ' + (2047 >> 0)); -} - - -if (4095 >> 0 !== 4095) { - $ERROR('#13: 4095 >> 0 === 4095. Actual: ' + (4095 >> 0)); -} - - -if (8191 >> 0 !== 8191) { - $ERROR('#14: 8191 >> 0 === 8191. Actual: ' + (8191 >> 0)); -} - - -if (16383 >> 0 !== 16383) { - $ERROR('#15: 16383 >> 0 === 16383. Actual: ' + (16383 >> 0)); -} - - -if (32767 >> 0 !== 32767) { - $ERROR('#16: 32767 >> 0 === 32767. Actual: ' + (32767 >> 0)); -} - - -if (65535 >> 0 !== 65535) { - $ERROR('#17: 65535 >> 0 === 65535. Actual: ' + (65535 >> 0)); -} - - -if (131071 >> 0 !== 131071) { - $ERROR('#18: 131071 >> 0 === 131071. Actual: ' + (131071 >> 0)); -} - - -if (262143 >> 0 !== 262143) { - $ERROR('#19: 262143 >> 0 === 262143. Actual: ' + (262143 >> 0)); -} - - -if (524287 >> 0 !== 524287) { - $ERROR('#20: 524287 >> 0 === 524287. Actual: ' + (524287 >> 0)); -} - - -if (1048575 >> 0 !== 1048575) { - $ERROR('#21: 1048575 >> 0 === 1048575. Actual: ' + (1048575 >> 0)); -} - - -if (2097151 >> 0 !== 2097151) { - $ERROR('#22: 2097151 >> 0 === 2097151. Actual: ' + (2097151 >> 0)); -} - - -if (4194303 >> 0 !== 4194303) { - $ERROR('#23: 4194303 >> 0 === 4194303. Actual: ' + (4194303 >> 0)); -} - - -if (8388607 >> 0 !== 8388607) { - $ERROR('#24: 8388607 >> 0 === 8388607. Actual: ' + (8388607 >> 0)); -} - - -if (16777215 >> 0 !== 16777215) { - $ERROR('#25: 16777215 >> 0 === 16777215. Actual: ' + (16777215 >> 0)); -} - - -if (33554431 >> 0 !== 33554431) { - $ERROR('#26: 33554431 >> 0 === 33554431. Actual: ' + (33554431 >> 0)); -} - - -if (67108863 >> 0 !== 67108863) { - $ERROR('#27: 67108863 >> 0 === 67108863. Actual: ' + (67108863 >> 0)); -} - - -if (134217727 >> 0 !== 134217727) { - $ERROR('#28: 134217727 >> 0 === 134217727. Actual: ' + (134217727 >> 0)); -} - - -if (268435455 >> 0 !== 268435455) { - $ERROR('#29: 268435455 >> 0 === 268435455. Actual: ' + (268435455 >> 0)); -} - - -if (536870911 >> 0 !== 536870911) { - $ERROR('#30: 536870911 >> 0 === 536870911. Actual: ' + (536870911 >> 0)); -} - - -if (1073741823 >> 0 !== 1073741823) { - $ERROR('#31: 1073741823 >> 0 === 1073741823. Actual: ' + (1073741823 >> 0)); -} - - -if (2147483647 >> 0 !== 2147483647) { - $ERROR('#32: 2147483647 >> 0 === 2147483647. Actual: ' + (2147483647 >> 0)); -} - - -if (0 >> 1 !== 0) { - $ERROR('#33: 0 >> 1 === 0. Actual: ' + (0 >> 1)); -} - - -if (1 >> 1 !== 0) { - $ERROR('#34: 1 >> 1 === 0. Actual: ' + (1 >> 1)); -} - - -if (3 >> 1 !== 1) { - $ERROR('#35: 3 >> 1 === 1. Actual: ' + (3 >> 1)); -} - - -if (7 >> 1 !== 3) { - $ERROR('#36: 7 >> 1 === 3. Actual: ' + (7 >> 1)); -} - - -if (15 >> 1 !== 7) { - $ERROR('#37: 15 >> 1 === 7. Actual: ' + (15 >> 1)); -} - - -if (31 >> 1 !== 15) { - $ERROR('#38: 31 >> 1 === 15. Actual: ' + (31 >> 1)); -} - - -if (63 >> 1 !== 31) { - $ERROR('#39: 63 >> 1 === 31. Actual: ' + (63 >> 1)); -} - - -if (127 >> 1 !== 63) { - $ERROR('#40: 127 >> 1 === 63. Actual: ' + (127 >> 1)); -} - - -if (255 >> 1 !== 127) { - $ERROR('#41: 255 >> 1 === 127. Actual: ' + (255 >> 1)); -} - - -if (511 >> 1 !== 255) { - $ERROR('#42: 511 >> 1 === 255. Actual: ' + (511 >> 1)); -} - - -if (1023 >> 1 !== 511) { - $ERROR('#43: 1023 >> 1 === 511. Actual: ' + (1023 >> 1)); -} - - -if (2047 >> 1 !== 1023) { - $ERROR('#44: 2047 >> 1 === 1023. Actual: ' + (2047 >> 1)); -} - - -if (4095 >> 1 !== 2047) { - $ERROR('#45: 4095 >> 1 === 2047. Actual: ' + (4095 >> 1)); -} - - -if (8191 >> 1 !== 4095) { - $ERROR('#46: 8191 >> 1 === 4095. Actual: ' + (8191 >> 1)); -} - - -if (16383 >> 1 !== 8191) { - $ERROR('#47: 16383 >> 1 === 8191. Actual: ' + (16383 >> 1)); -} - - -if (32767 >> 1 !== 16383) { - $ERROR('#48: 32767 >> 1 === 16383. Actual: ' + (32767 >> 1)); -} - - -if (65535 >> 1 !== 32767) { - $ERROR('#49: 65535 >> 1 === 32767. Actual: ' + (65535 >> 1)); -} - - -if (131071 >> 1 !== 65535) { - $ERROR('#50: 131071 >> 1 === 65535. Actual: ' + (131071 >> 1)); -} - - -if (262143 >> 1 !== 131071) { - $ERROR('#51: 262143 >> 1 === 131071. Actual: ' + (262143 >> 1)); -} - - -if (524287 >> 1 !== 262143) { - $ERROR('#52: 524287 >> 1 === 262143. Actual: ' + (524287 >> 1)); -} - - -if (1048575 >> 1 !== 524287) { - $ERROR('#53: 1048575 >> 1 === 524287. Actual: ' + (1048575 >> 1)); -} - - -if (2097151 >> 1 !== 1048575) { - $ERROR('#54: 2097151 >> 1 === 1048575. Actual: ' + (2097151 >> 1)); -} - - -if (4194303 >> 1 !== 2097151) { - $ERROR('#55: 4194303 >> 1 === 2097151. Actual: ' + (4194303 >> 1)); -} - - -if (8388607 >> 1 !== 4194303) { - $ERROR('#56: 8388607 >> 1 === 4194303. Actual: ' + (8388607 >> 1)); -} - - -if (16777215 >> 1 !== 8388607) { - $ERROR('#57: 16777215 >> 1 === 8388607. Actual: ' + (16777215 >> 1)); -} - - -if (33554431 >> 1 !== 16777215) { - $ERROR('#58: 33554431 >> 1 === 16777215. Actual: ' + (33554431 >> 1)); -} - - -if (67108863 >> 1 !== 33554431) { - $ERROR('#59: 67108863 >> 1 === 33554431. Actual: ' + (67108863 >> 1)); -} - - -if (134217727 >> 1 !== 67108863) { - $ERROR('#60: 134217727 >> 1 === 67108863. Actual: ' + (134217727 >> 1)); -} - - -if (268435455 >> 1 !== 134217727) { - $ERROR('#61: 268435455 >> 1 === 134217727. Actual: ' + (268435455 >> 1)); -} - - -if (536870911 >> 1 !== 268435455) { - $ERROR('#62: 536870911 >> 1 === 268435455. Actual: ' + (536870911 >> 1)); -} - - -if (1073741823 >> 1 !== 536870911) { - $ERROR('#63: 1073741823 >> 1 === 536870911. Actual: ' + (1073741823 >> 1)); -} - - -if (2147483647 >> 1 !== 1073741823) { - $ERROR('#64: 2147483647 >> 1 === 1073741823. Actual: ' + (2147483647 >> 1)); -} - - -if (0 >> 2 !== 0) { - $ERROR('#65: 0 >> 2 === 0. Actual: ' + (0 >> 2)); -} - - -if (1 >> 2 !== 0) { - $ERROR('#66: 1 >> 2 === 0. Actual: ' + (1 >> 2)); -} - - -if (3 >> 2 !== 0) { - $ERROR('#67: 3 >> 2 === 0. Actual: ' + (3 >> 2)); -} - - -if (7 >> 2 !== 1) { - $ERROR('#68: 7 >> 2 === 1. Actual: ' + (7 >> 2)); -} - - -if (15 >> 2 !== 3) { - $ERROR('#69: 15 >> 2 === 3. Actual: ' + (15 >> 2)); -} - - -if (31 >> 2 !== 7) { - $ERROR('#70: 31 >> 2 === 7. Actual: ' + (31 >> 2)); -} - - -if (63 >> 2 !== 15) { - $ERROR('#71: 63 >> 2 === 15. Actual: ' + (63 >> 2)); -} - - -if (127 >> 2 !== 31) { - $ERROR('#72: 127 >> 2 === 31. Actual: ' + (127 >> 2)); -} - - -if (255 >> 2 !== 63) { - $ERROR('#73: 255 >> 2 === 63. Actual: ' + (255 >> 2)); -} - - -if (511 >> 2 !== 127) { - $ERROR('#74: 511 >> 2 === 127. Actual: ' + (511 >> 2)); -} - - -if (1023 >> 2 !== 255) { - $ERROR('#75: 1023 >> 2 === 255. Actual: ' + (1023 >> 2)); -} - - -if (2047 >> 2 !== 511) { - $ERROR('#76: 2047 >> 2 === 511. Actual: ' + (2047 >> 2)); -} - - -if (4095 >> 2 !== 1023) { - $ERROR('#77: 4095 >> 2 === 1023. Actual: ' + (4095 >> 2)); -} - - -if (8191 >> 2 !== 2047) { - $ERROR('#78: 8191 >> 2 === 2047. Actual: ' + (8191 >> 2)); -} - - -if (16383 >> 2 !== 4095) { - $ERROR('#79: 16383 >> 2 === 4095. Actual: ' + (16383 >> 2)); -} - - -if (32767 >> 2 !== 8191) { - $ERROR('#80: 32767 >> 2 === 8191. Actual: ' + (32767 >> 2)); -} - - -if (65535 >> 2 !== 16383) { - $ERROR('#81: 65535 >> 2 === 16383. Actual: ' + (65535 >> 2)); -} - - -if (131071 >> 2 !== 32767) { - $ERROR('#82: 131071 >> 2 === 32767. Actual: ' + (131071 >> 2)); -} - - -if (262143 >> 2 !== 65535) { - $ERROR('#83: 262143 >> 2 === 65535. Actual: ' + (262143 >> 2)); -} - - -if (524287 >> 2 !== 131071) { - $ERROR('#84: 524287 >> 2 === 131071. Actual: ' + (524287 >> 2)); -} - - -if (1048575 >> 2 !== 262143) { - $ERROR('#85: 1048575 >> 2 === 262143. Actual: ' + (1048575 >> 2)); -} - - -if (2097151 >> 2 !== 524287) { - $ERROR('#86: 2097151 >> 2 === 524287. Actual: ' + (2097151 >> 2)); -} - - -if (4194303 >> 2 !== 1048575) { - $ERROR('#87: 4194303 >> 2 === 1048575. Actual: ' + (4194303 >> 2)); -} - - -if (8388607 >> 2 !== 2097151) { - $ERROR('#88: 8388607 >> 2 === 2097151. Actual: ' + (8388607 >> 2)); -} - - -if (16777215 >> 2 !== 4194303) { - $ERROR('#89: 16777215 >> 2 === 4194303. Actual: ' + (16777215 >> 2)); -} - - -if (33554431 >> 2 !== 8388607) { - $ERROR('#90: 33554431 >> 2 === 8388607. Actual: ' + (33554431 >> 2)); -} - - -if (67108863 >> 2 !== 16777215) { - $ERROR('#91: 67108863 >> 2 === 16777215. Actual: ' + (67108863 >> 2)); -} - - -if (134217727 >> 2 !== 33554431) { - $ERROR('#92: 134217727 >> 2 === 33554431. Actual: ' + (134217727 >> 2)); -} - - -if (268435455 >> 2 !== 67108863) { - $ERROR('#93: 268435455 >> 2 === 67108863. Actual: ' + (268435455 >> 2)); -} - - -if (536870911 >> 2 !== 134217727) { - $ERROR('#94: 536870911 >> 2 === 134217727. Actual: ' + (536870911 >> 2)); -} - - -if (1073741823 >> 2 !== 268435455) { - $ERROR('#95: 1073741823 >> 2 === 268435455. Actual: ' + (1073741823 >> 2)); -} - - -if (2147483647 >> 2 !== 536870911) { - $ERROR('#96: 2147483647 >> 2 === 536870911. Actual: ' + (2147483647 >> 2)); -} - - -if (0 >> 3 !== 0) { - $ERROR('#97: 0 >> 3 === 0. Actual: ' + (0 >> 3)); -} - - -if (1 >> 3 !== 0) { - $ERROR('#98: 1 >> 3 === 0. Actual: ' + (1 >> 3)); -} - - -if (3 >> 3 !== 0) { - $ERROR('#99: 3 >> 3 === 0. Actual: ' + (3 >> 3)); -} - - -if (7 >> 3 !== 0) { - $ERROR('#100: 7 >> 3 === 0. Actual: ' + (7 >> 3)); -} - - -if (15 >> 3 !== 1) { - $ERROR('#101: 15 >> 3 === 1. Actual: ' + (15 >> 3)); -} - - -if (31 >> 3 !== 3) { - $ERROR('#102: 31 >> 3 === 3. Actual: ' + (31 >> 3)); -} - - -if (63 >> 3 !== 7) { - $ERROR('#103: 63 >> 3 === 7. Actual: ' + (63 >> 3)); -} - - -if (127 >> 3 !== 15) { - $ERROR('#104: 127 >> 3 === 15. Actual: ' + (127 >> 3)); -} - - -if (255 >> 3 !== 31) { - $ERROR('#105: 255 >> 3 === 31. Actual: ' + (255 >> 3)); -} - - -if (511 >> 3 !== 63) { - $ERROR('#106: 511 >> 3 === 63. Actual: ' + (511 >> 3)); -} - - -if (1023 >> 3 !== 127) { - $ERROR('#107: 1023 >> 3 === 127. Actual: ' + (1023 >> 3)); -} - - -if (2047 >> 3 !== 255) { - $ERROR('#108: 2047 >> 3 === 255. Actual: ' + (2047 >> 3)); -} - - -if (4095 >> 3 !== 511) { - $ERROR('#109: 4095 >> 3 === 511. Actual: ' + (4095 >> 3)); -} - - -if (8191 >> 3 !== 1023) { - $ERROR('#110: 8191 >> 3 === 1023. Actual: ' + (8191 >> 3)); -} - - -if (16383 >> 3 !== 2047) { - $ERROR('#111: 16383 >> 3 === 2047. Actual: ' + (16383 >> 3)); -} - - -if (32767 >> 3 !== 4095) { - $ERROR('#112: 32767 >> 3 === 4095. Actual: ' + (32767 >> 3)); -} - - -if (65535 >> 3 !== 8191) { - $ERROR('#113: 65535 >> 3 === 8191. Actual: ' + (65535 >> 3)); -} - - -if (131071 >> 3 !== 16383) { - $ERROR('#114: 131071 >> 3 === 16383. Actual: ' + (131071 >> 3)); -} - - -if (262143 >> 3 !== 32767) { - $ERROR('#115: 262143 >> 3 === 32767. Actual: ' + (262143 >> 3)); -} - - -if (524287 >> 3 !== 65535) { - $ERROR('#116: 524287 >> 3 === 65535. Actual: ' + (524287 >> 3)); -} - - -if (1048575 >> 3 !== 131071) { - $ERROR('#117: 1048575 >> 3 === 131071. Actual: ' + (1048575 >> 3)); -} - - -if (2097151 >> 3 !== 262143) { - $ERROR('#118: 2097151 >> 3 === 262143. Actual: ' + (2097151 >> 3)); -} - - -if (4194303 >> 3 !== 524287) { - $ERROR('#119: 4194303 >> 3 === 524287. Actual: ' + (4194303 >> 3)); -} - - -if (8388607 >> 3 !== 1048575) { - $ERROR('#120: 8388607 >> 3 === 1048575. Actual: ' + (8388607 >> 3)); -} - - -if (16777215 >> 3 !== 2097151) { - $ERROR('#121: 16777215 >> 3 === 2097151. Actual: ' + (16777215 >> 3)); -} - - -if (33554431 >> 3 !== 4194303) { - $ERROR('#122: 33554431 >> 3 === 4194303. Actual: ' + (33554431 >> 3)); -} - - -if (67108863 >> 3 !== 8388607) { - $ERROR('#123: 67108863 >> 3 === 8388607. Actual: ' + (67108863 >> 3)); -} - - -if (134217727 >> 3 !== 16777215) { - $ERROR('#124: 134217727 >> 3 === 16777215. Actual: ' + (134217727 >> 3)); -} - - -if (268435455 >> 3 !== 33554431) { - $ERROR('#125: 268435455 >> 3 === 33554431. Actual: ' + (268435455 >> 3)); -} - - -if (536870911 >> 3 !== 67108863) { - $ERROR('#126: 536870911 >> 3 === 67108863. Actual: ' + (536870911 >> 3)); -} - - -if (1073741823 >> 3 !== 134217727) { - $ERROR('#127: 1073741823 >> 3 === 134217727. Actual: ' + (1073741823 >> 3)); -} - - -if (2147483647 >> 3 !== 268435455) { - $ERROR('#128: 2147483647 >> 3 === 268435455. Actual: ' + (2147483647 >> 3)); -} - - -if (0 >> 4 !== 0) { - $ERROR('#129: 0 >> 4 === 0. Actual: ' + (0 >> 4)); -} - - -if (1 >> 4 !== 0) { - $ERROR('#130: 1 >> 4 === 0. Actual: ' + (1 >> 4)); -} - - -if (3 >> 4 !== 0) { - $ERROR('#131: 3 >> 4 === 0. Actual: ' + (3 >> 4)); -} - - -if (7 >> 4 !== 0) { - $ERROR('#132: 7 >> 4 === 0. Actual: ' + (7 >> 4)); -} - - -if (15 >> 4 !== 0) { - $ERROR('#133: 15 >> 4 === 0. Actual: ' + (15 >> 4)); -} - - -if (31 >> 4 !== 1) { - $ERROR('#134: 31 >> 4 === 1. Actual: ' + (31 >> 4)); -} - - -if (63 >> 4 !== 3) { - $ERROR('#135: 63 >> 4 === 3. Actual: ' + (63 >> 4)); -} - - -if (127 >> 4 !== 7) { - $ERROR('#136: 127 >> 4 === 7. Actual: ' + (127 >> 4)); -} - - -if (255 >> 4 !== 15) { - $ERROR('#137: 255 >> 4 === 15. Actual: ' + (255 >> 4)); -} - - -if (511 >> 4 !== 31) { - $ERROR('#138: 511 >> 4 === 31. Actual: ' + (511 >> 4)); -} - - -if (1023 >> 4 !== 63) { - $ERROR('#139: 1023 >> 4 === 63. Actual: ' + (1023 >> 4)); -} - - -if (2047 >> 4 !== 127) { - $ERROR('#140: 2047 >> 4 === 127. Actual: ' + (2047 >> 4)); -} - - -if (4095 >> 4 !== 255) { - $ERROR('#141: 4095 >> 4 === 255. Actual: ' + (4095 >> 4)); -} - - -if (8191 >> 4 !== 511) { - $ERROR('#142: 8191 >> 4 === 511. Actual: ' + (8191 >> 4)); -} - - -if (16383 >> 4 !== 1023) { - $ERROR('#143: 16383 >> 4 === 1023. Actual: ' + (16383 >> 4)); -} - - -if (32767 >> 4 !== 2047) { - $ERROR('#144: 32767 >> 4 === 2047. Actual: ' + (32767 >> 4)); -} - - -if (65535 >> 4 !== 4095) { - $ERROR('#145: 65535 >> 4 === 4095. Actual: ' + (65535 >> 4)); -} - - -if (131071 >> 4 !== 8191) { - $ERROR('#146: 131071 >> 4 === 8191. Actual: ' + (131071 >> 4)); -} - - -if (262143 >> 4 !== 16383) { - $ERROR('#147: 262143 >> 4 === 16383. Actual: ' + (262143 >> 4)); -} - - -if (524287 >> 4 !== 32767) { - $ERROR('#148: 524287 >> 4 === 32767. Actual: ' + (524287 >> 4)); -} - - -if (1048575 >> 4 !== 65535) { - $ERROR('#149: 1048575 >> 4 === 65535. Actual: ' + (1048575 >> 4)); -} - - -if (2097151 >> 4 !== 131071) { - $ERROR('#150: 2097151 >> 4 === 131071. Actual: ' + (2097151 >> 4)); -} - - -if (4194303 >> 4 !== 262143) { - $ERROR('#151: 4194303 >> 4 === 262143. Actual: ' + (4194303 >> 4)); -} - - -if (8388607 >> 4 !== 524287) { - $ERROR('#152: 8388607 >> 4 === 524287. Actual: ' + (8388607 >> 4)); -} - - -if (16777215 >> 4 !== 1048575) { - $ERROR('#153: 16777215 >> 4 === 1048575. Actual: ' + (16777215 >> 4)); -} - - -if (33554431 >> 4 !== 2097151) { - $ERROR('#154: 33554431 >> 4 === 2097151. Actual: ' + (33554431 >> 4)); -} - - -if (67108863 >> 4 !== 4194303) { - $ERROR('#155: 67108863 >> 4 === 4194303. Actual: ' + (67108863 >> 4)); -} - - -if (134217727 >> 4 !== 8388607) { - $ERROR('#156: 134217727 >> 4 === 8388607. Actual: ' + (134217727 >> 4)); -} - - -if (268435455 >> 4 !== 16777215) { - $ERROR('#157: 268435455 >> 4 === 16777215. Actual: ' + (268435455 >> 4)); -} - - -if (536870911 >> 4 !== 33554431) { - $ERROR('#158: 536870911 >> 4 === 33554431. Actual: ' + (536870911 >> 4)); -} - - -if (1073741823 >> 4 !== 67108863) { - $ERROR('#159: 1073741823 >> 4 === 67108863. Actual: ' + (1073741823 >> 4)); -} - - -if (2147483647 >> 4 !== 134217727) { - $ERROR('#160: 2147483647 >> 4 === 134217727. Actual: ' + (2147483647 >> 4)); -} - - -if (0 >> 5 !== 0) { - $ERROR('#161: 0 >> 5 === 0. Actual: ' + (0 >> 5)); -} - - -if (1 >> 5 !== 0) { - $ERROR('#162: 1 >> 5 === 0. Actual: ' + (1 >> 5)); -} - - -if (3 >> 5 !== 0) { - $ERROR('#163: 3 >> 5 === 0. Actual: ' + (3 >> 5)); -} - - -if (7 >> 5 !== 0) { - $ERROR('#164: 7 >> 5 === 0. Actual: ' + (7 >> 5)); -} - - -if (15 >> 5 !== 0) { - $ERROR('#165: 15 >> 5 === 0. Actual: ' + (15 >> 5)); -} - - -if (31 >> 5 !== 0) { - $ERROR('#166: 31 >> 5 === 0. Actual: ' + (31 >> 5)); -} - - -if (63 >> 5 !== 1) { - $ERROR('#167: 63 >> 5 === 1. Actual: ' + (63 >> 5)); -} - - -if (127 >> 5 !== 3) { - $ERROR('#168: 127 >> 5 === 3. Actual: ' + (127 >> 5)); -} - - -if (255 >> 5 !== 7) { - $ERROR('#169: 255 >> 5 === 7. Actual: ' + (255 >> 5)); -} - - -if (511 >> 5 !== 15) { - $ERROR('#170: 511 >> 5 === 15. Actual: ' + (511 >> 5)); -} - - -if (1023 >> 5 !== 31) { - $ERROR('#171: 1023 >> 5 === 31. Actual: ' + (1023 >> 5)); -} - - -if (2047 >> 5 !== 63) { - $ERROR('#172: 2047 >> 5 === 63. Actual: ' + (2047 >> 5)); -} - - -if (4095 >> 5 !== 127) { - $ERROR('#173: 4095 >> 5 === 127. Actual: ' + (4095 >> 5)); -} - - -if (8191 >> 5 !== 255) { - $ERROR('#174: 8191 >> 5 === 255. Actual: ' + (8191 >> 5)); -} - - -if (16383 >> 5 !== 511) { - $ERROR('#175: 16383 >> 5 === 511. Actual: ' + (16383 >> 5)); -} - - -if (32767 >> 5 !== 1023) { - $ERROR('#176: 32767 >> 5 === 1023. Actual: ' + (32767 >> 5)); -} - - -if (65535 >> 5 !== 2047) { - $ERROR('#177: 65535 >> 5 === 2047. Actual: ' + (65535 >> 5)); -} - - -if (131071 >> 5 !== 4095) { - $ERROR('#178: 131071 >> 5 === 4095. Actual: ' + (131071 >> 5)); -} - - -if (262143 >> 5 !== 8191) { - $ERROR('#179: 262143 >> 5 === 8191. Actual: ' + (262143 >> 5)); -} - - -if (524287 >> 5 !== 16383) { - $ERROR('#180: 524287 >> 5 === 16383. Actual: ' + (524287 >> 5)); -} - - -if (1048575 >> 5 !== 32767) { - $ERROR('#181: 1048575 >> 5 === 32767. Actual: ' + (1048575 >> 5)); -} - - -if (2097151 >> 5 !== 65535) { - $ERROR('#182: 2097151 >> 5 === 65535. Actual: ' + (2097151 >> 5)); -} - - -if (4194303 >> 5 !== 131071) { - $ERROR('#183: 4194303 >> 5 === 131071. Actual: ' + (4194303 >> 5)); -} - - -if (8388607 >> 5 !== 262143) { - $ERROR('#184: 8388607 >> 5 === 262143. Actual: ' + (8388607 >> 5)); -} - - -if (16777215 >> 5 !== 524287) { - $ERROR('#185: 16777215 >> 5 === 524287. Actual: ' + (16777215 >> 5)); -} - - -if (33554431 >> 5 !== 1048575) { - $ERROR('#186: 33554431 >> 5 === 1048575. Actual: ' + (33554431 >> 5)); -} - - -if (67108863 >> 5 !== 2097151) { - $ERROR('#187: 67108863 >> 5 === 2097151. Actual: ' + (67108863 >> 5)); -} - - -if (134217727 >> 5 !== 4194303) { - $ERROR('#188: 134217727 >> 5 === 4194303. Actual: ' + (134217727 >> 5)); -} - - -if (268435455 >> 5 !== 8388607) { - $ERROR('#189: 268435455 >> 5 === 8388607. Actual: ' + (268435455 >> 5)); -} - - -if (536870911 >> 5 !== 16777215) { - $ERROR('#190: 536870911 >> 5 === 16777215. Actual: ' + (536870911 >> 5)); -} - - -if (1073741823 >> 5 !== 33554431) { - $ERROR('#191: 1073741823 >> 5 === 33554431. Actual: ' + (1073741823 >> 5)); -} - - -if (2147483647 >> 5 !== 67108863) { - $ERROR('#192: 2147483647 >> 5 === 67108863. Actual: ' + (2147483647 >> 5)); -} - - -if (0 >> 6 !== 0) { - $ERROR('#193: 0 >> 6 === 0. Actual: ' + (0 >> 6)); -} - - -if (1 >> 6 !== 0) { - $ERROR('#194: 1 >> 6 === 0. Actual: ' + (1 >> 6)); -} - - -if (3 >> 6 !== 0) { - $ERROR('#195: 3 >> 6 === 0. Actual: ' + (3 >> 6)); -} - - -if (7 >> 6 !== 0) { - $ERROR('#196: 7 >> 6 === 0. Actual: ' + (7 >> 6)); -} - - -if (15 >> 6 !== 0) { - $ERROR('#197: 15 >> 6 === 0. Actual: ' + (15 >> 6)); -} - - -if (31 >> 6 !== 0) { - $ERROR('#198: 31 >> 6 === 0. Actual: ' + (31 >> 6)); -} - - -if (63 >> 6 !== 0) { - $ERROR('#199: 63 >> 6 === 0. Actual: ' + (63 >> 6)); -} - - -if (127 >> 6 !== 1) { - $ERROR('#200: 127 >> 6 === 1. Actual: ' + (127 >> 6)); -} - - -if (255 >> 6 !== 3) { - $ERROR('#201: 255 >> 6 === 3. Actual: ' + (255 >> 6)); -} - - -if (511 >> 6 !== 7) { - $ERROR('#202: 511 >> 6 === 7. Actual: ' + (511 >> 6)); -} - - -if (1023 >> 6 !== 15) { - $ERROR('#203: 1023 >> 6 === 15. Actual: ' + (1023 >> 6)); -} - - -if (2047 >> 6 !== 31) { - $ERROR('#204: 2047 >> 6 === 31. Actual: ' + (2047 >> 6)); -} - - -if (4095 >> 6 !== 63) { - $ERROR('#205: 4095 >> 6 === 63. Actual: ' + (4095 >> 6)); -} - - -if (8191 >> 6 !== 127) { - $ERROR('#206: 8191 >> 6 === 127. Actual: ' + (8191 >> 6)); -} - - -if (16383 >> 6 !== 255) { - $ERROR('#207: 16383 >> 6 === 255. Actual: ' + (16383 >> 6)); -} - - -if (32767 >> 6 !== 511) { - $ERROR('#208: 32767 >> 6 === 511. Actual: ' + (32767 >> 6)); -} - - -if (65535 >> 6 !== 1023) { - $ERROR('#209: 65535 >> 6 === 1023. Actual: ' + (65535 >> 6)); -} - - -if (131071 >> 6 !== 2047) { - $ERROR('#210: 131071 >> 6 === 2047. Actual: ' + (131071 >> 6)); -} - - -if (262143 >> 6 !== 4095) { - $ERROR('#211: 262143 >> 6 === 4095. Actual: ' + (262143 >> 6)); -} - - -if (524287 >> 6 !== 8191) { - $ERROR('#212: 524287 >> 6 === 8191. Actual: ' + (524287 >> 6)); -} - - -if (1048575 >> 6 !== 16383) { - $ERROR('#213: 1048575 >> 6 === 16383. Actual: ' + (1048575 >> 6)); -} - - -if (2097151 >> 6 !== 32767) { - $ERROR('#214: 2097151 >> 6 === 32767. Actual: ' + (2097151 >> 6)); -} - - -if (4194303 >> 6 !== 65535) { - $ERROR('#215: 4194303 >> 6 === 65535. Actual: ' + (4194303 >> 6)); -} - - -if (8388607 >> 6 !== 131071) { - $ERROR('#216: 8388607 >> 6 === 131071. Actual: ' + (8388607 >> 6)); -} - - -if (16777215 >> 6 !== 262143) { - $ERROR('#217: 16777215 >> 6 === 262143. Actual: ' + (16777215 >> 6)); -} - - -if (33554431 >> 6 !== 524287) { - $ERROR('#218: 33554431 >> 6 === 524287. Actual: ' + (33554431 >> 6)); -} - - -if (67108863 >> 6 !== 1048575) { - $ERROR('#219: 67108863 >> 6 === 1048575. Actual: ' + (67108863 >> 6)); -} - - -if (134217727 >> 6 !== 2097151) { - $ERROR('#220: 134217727 >> 6 === 2097151. Actual: ' + (134217727 >> 6)); -} - - -if (268435455 >> 6 !== 4194303) { - $ERROR('#221: 268435455 >> 6 === 4194303. Actual: ' + (268435455 >> 6)); -} - - -if (536870911 >> 6 !== 8388607) { - $ERROR('#222: 536870911 >> 6 === 8388607. Actual: ' + (536870911 >> 6)); -} - - -if (1073741823 >> 6 !== 16777215) { - $ERROR('#223: 1073741823 >> 6 === 16777215. Actual: ' + (1073741823 >> 6)); -} - - -if (2147483647 >> 6 !== 33554431) { - $ERROR('#224: 2147483647 >> 6 === 33554431. Actual: ' + (2147483647 >> 6)); -} - - -if (0 >> 7 !== 0) { - $ERROR('#225: 0 >> 7 === 0. Actual: ' + (0 >> 7)); -} - - -if (1 >> 7 !== 0) { - $ERROR('#226: 1 >> 7 === 0. Actual: ' + (1 >> 7)); -} - - -if (3 >> 7 !== 0) { - $ERROR('#227: 3 >> 7 === 0. Actual: ' + (3 >> 7)); -} - - -if (7 >> 7 !== 0) { - $ERROR('#228: 7 >> 7 === 0. Actual: ' + (7 >> 7)); -} - - -if (15 >> 7 !== 0) { - $ERROR('#229: 15 >> 7 === 0. Actual: ' + (15 >> 7)); -} - - -if (31 >> 7 !== 0) { - $ERROR('#230: 31 >> 7 === 0. Actual: ' + (31 >> 7)); -} - - -if (63 >> 7 !== 0) { - $ERROR('#231: 63 >> 7 === 0. Actual: ' + (63 >> 7)); -} - - -if (127 >> 7 !== 0) { - $ERROR('#232: 127 >> 7 === 0. Actual: ' + (127 >> 7)); -} - - -if (255 >> 7 !== 1) { - $ERROR('#233: 255 >> 7 === 1. Actual: ' + (255 >> 7)); -} - - -if (511 >> 7 !== 3) { - $ERROR('#234: 511 >> 7 === 3. Actual: ' + (511 >> 7)); -} - - -if (1023 >> 7 !== 7) { - $ERROR('#235: 1023 >> 7 === 7. Actual: ' + (1023 >> 7)); -} - - -if (2047 >> 7 !== 15) { - $ERROR('#236: 2047 >> 7 === 15. Actual: ' + (2047 >> 7)); -} - - -if (4095 >> 7 !== 31) { - $ERROR('#237: 4095 >> 7 === 31. Actual: ' + (4095 >> 7)); -} - - -if (8191 >> 7 !== 63) { - $ERROR('#238: 8191 >> 7 === 63. Actual: ' + (8191 >> 7)); -} - - -if (16383 >> 7 !== 127) { - $ERROR('#239: 16383 >> 7 === 127. Actual: ' + (16383 >> 7)); -} - - -if (32767 >> 7 !== 255) { - $ERROR('#240: 32767 >> 7 === 255. Actual: ' + (32767 >> 7)); -} - - -if (65535 >> 7 !== 511) { - $ERROR('#241: 65535 >> 7 === 511. Actual: ' + (65535 >> 7)); -} - - -if (131071 >> 7 !== 1023) { - $ERROR('#242: 131071 >> 7 === 1023. Actual: ' + (131071 >> 7)); -} - - -if (262143 >> 7 !== 2047) { - $ERROR('#243: 262143 >> 7 === 2047. Actual: ' + (262143 >> 7)); -} - - -if (524287 >> 7 !== 4095) { - $ERROR('#244: 524287 >> 7 === 4095. Actual: ' + (524287 >> 7)); -} - - -if (1048575 >> 7 !== 8191) { - $ERROR('#245: 1048575 >> 7 === 8191. Actual: ' + (1048575 >> 7)); -} - - -if (2097151 >> 7 !== 16383) { - $ERROR('#246: 2097151 >> 7 === 16383. Actual: ' + (2097151 >> 7)); -} - - -if (4194303 >> 7 !== 32767) { - $ERROR('#247: 4194303 >> 7 === 32767. Actual: ' + (4194303 >> 7)); -} - - -if (8388607 >> 7 !== 65535) { - $ERROR('#248: 8388607 >> 7 === 65535. Actual: ' + (8388607 >> 7)); -} - - -if (16777215 >> 7 !== 131071) { - $ERROR('#249: 16777215 >> 7 === 131071. Actual: ' + (16777215 >> 7)); -} - - -if (33554431 >> 7 !== 262143) { - $ERROR('#250: 33554431 >> 7 === 262143. Actual: ' + (33554431 >> 7)); -} - - -if (67108863 >> 7 !== 524287) { - $ERROR('#251: 67108863 >> 7 === 524287. Actual: ' + (67108863 >> 7)); -} - - -if (134217727 >> 7 !== 1048575) { - $ERROR('#252: 134217727 >> 7 === 1048575. Actual: ' + (134217727 >> 7)); -} - - -if (268435455 >> 7 !== 2097151) { - $ERROR('#253: 268435455 >> 7 === 2097151. Actual: ' + (268435455 >> 7)); -} - - -if (536870911 >> 7 !== 4194303) { - $ERROR('#254: 536870911 >> 7 === 4194303. Actual: ' + (536870911 >> 7)); -} - - -if (1073741823 >> 7 !== 8388607) { - $ERROR('#255: 1073741823 >> 7 === 8388607. Actual: ' + (1073741823 >> 7)); -} - - -if (2147483647 >> 7 !== 16777215) { - $ERROR('#256: 2147483647 >> 7 === 16777215. Actual: ' + (2147483647 >> 7)); -} - - -if (0 >> 8 !== 0) { - $ERROR('#257: 0 >> 8 === 0. Actual: ' + (0 >> 8)); -} - - -if (1 >> 8 !== 0) { - $ERROR('#258: 1 >> 8 === 0. Actual: ' + (1 >> 8)); -} - - -if (3 >> 8 !== 0) { - $ERROR('#259: 3 >> 8 === 0. Actual: ' + (3 >> 8)); -} - - -if (7 >> 8 !== 0) { - $ERROR('#260: 7 >> 8 === 0. Actual: ' + (7 >> 8)); -} - - -if (15 >> 8 !== 0) { - $ERROR('#261: 15 >> 8 === 0. Actual: ' + (15 >> 8)); -} - - -if (31 >> 8 !== 0) { - $ERROR('#262: 31 >> 8 === 0. Actual: ' + (31 >> 8)); -} - - -if (63 >> 8 !== 0) { - $ERROR('#263: 63 >> 8 === 0. Actual: ' + (63 >> 8)); -} - - -if (127 >> 8 !== 0) { - $ERROR('#264: 127 >> 8 === 0. Actual: ' + (127 >> 8)); -} - - -if (255 >> 8 !== 0) { - $ERROR('#265: 255 >> 8 === 0. Actual: ' + (255 >> 8)); -} - - -if (511 >> 8 !== 1) { - $ERROR('#266: 511 >> 8 === 1. Actual: ' + (511 >> 8)); -} - - -if (1023 >> 8 !== 3) { - $ERROR('#267: 1023 >> 8 === 3. Actual: ' + (1023 >> 8)); -} - - -if (2047 >> 8 !== 7) { - $ERROR('#268: 2047 >> 8 === 7. Actual: ' + (2047 >> 8)); -} - - -if (4095 >> 8 !== 15) { - $ERROR('#269: 4095 >> 8 === 15. Actual: ' + (4095 >> 8)); -} - - -if (8191 >> 8 !== 31) { - $ERROR('#270: 8191 >> 8 === 31. Actual: ' + (8191 >> 8)); -} - - -if (16383 >> 8 !== 63) { - $ERROR('#271: 16383 >> 8 === 63. Actual: ' + (16383 >> 8)); -} - - -if (32767 >> 8 !== 127) { - $ERROR('#272: 32767 >> 8 === 127. Actual: ' + (32767 >> 8)); -} - - -if (65535 >> 8 !== 255) { - $ERROR('#273: 65535 >> 8 === 255. Actual: ' + (65535 >> 8)); -} - - -if (131071 >> 8 !== 511) { - $ERROR('#274: 131071 >> 8 === 511. Actual: ' + (131071 >> 8)); -} - - -if (262143 >> 8 !== 1023) { - $ERROR('#275: 262143 >> 8 === 1023. Actual: ' + (262143 >> 8)); -} - - -if (524287 >> 8 !== 2047) { - $ERROR('#276: 524287 >> 8 === 2047. Actual: ' + (524287 >> 8)); -} - - -if (1048575 >> 8 !== 4095) { - $ERROR('#277: 1048575 >> 8 === 4095. Actual: ' + (1048575 >> 8)); -} - - -if (2097151 >> 8 !== 8191) { - $ERROR('#278: 2097151 >> 8 === 8191. Actual: ' + (2097151 >> 8)); -} - - -if (4194303 >> 8 !== 16383) { - $ERROR('#279: 4194303 >> 8 === 16383. Actual: ' + (4194303 >> 8)); -} - - -if (8388607 >> 8 !== 32767) { - $ERROR('#280: 8388607 >> 8 === 32767. Actual: ' + (8388607 >> 8)); -} - - -if (16777215 >> 8 !== 65535) { - $ERROR('#281: 16777215 >> 8 === 65535. Actual: ' + (16777215 >> 8)); -} - - -if (33554431 >> 8 !== 131071) { - $ERROR('#282: 33554431 >> 8 === 131071. Actual: ' + (33554431 >> 8)); -} - - -if (67108863 >> 8 !== 262143) { - $ERROR('#283: 67108863 >> 8 === 262143. Actual: ' + (67108863 >> 8)); -} - - -if (134217727 >> 8 !== 524287) { - $ERROR('#284: 134217727 >> 8 === 524287. Actual: ' + (134217727 >> 8)); -} - - -if (268435455 >> 8 !== 1048575) { - $ERROR('#285: 268435455 >> 8 === 1048575. Actual: ' + (268435455 >> 8)); -} - - -if (536870911 >> 8 !== 2097151) { - $ERROR('#286: 536870911 >> 8 === 2097151. Actual: ' + (536870911 >> 8)); -} - - -if (1073741823 >> 8 !== 4194303) { - $ERROR('#287: 1073741823 >> 8 === 4194303. Actual: ' + (1073741823 >> 8)); -} - - -if (2147483647 >> 8 !== 8388607) { - $ERROR('#288: 2147483647 >> 8 === 8388607. Actual: ' + (2147483647 >> 8)); -} - - -if (0 >> 9 !== 0) { - $ERROR('#289: 0 >> 9 === 0. Actual: ' + (0 >> 9)); -} - - -if (1 >> 9 !== 0) { - $ERROR('#290: 1 >> 9 === 0. Actual: ' + (1 >> 9)); -} - - -if (3 >> 9 !== 0) { - $ERROR('#291: 3 >> 9 === 0. Actual: ' + (3 >> 9)); -} - - -if (7 >> 9 !== 0) { - $ERROR('#292: 7 >> 9 === 0. Actual: ' + (7 >> 9)); -} - - -if (15 >> 9 !== 0) { - $ERROR('#293: 15 >> 9 === 0. Actual: ' + (15 >> 9)); -} - - -if (31 >> 9 !== 0) { - $ERROR('#294: 31 >> 9 === 0. Actual: ' + (31 >> 9)); -} - - -if (63 >> 9 !== 0) { - $ERROR('#295: 63 >> 9 === 0. Actual: ' + (63 >> 9)); -} - - -if (127 >> 9 !== 0) { - $ERROR('#296: 127 >> 9 === 0. Actual: ' + (127 >> 9)); -} - - -if (255 >> 9 !== 0) { - $ERROR('#297: 255 >> 9 === 0. Actual: ' + (255 >> 9)); -} - - -if (511 >> 9 !== 0) { - $ERROR('#298: 511 >> 9 === 0. Actual: ' + (511 >> 9)); -} - - -if (1023 >> 9 !== 1) { - $ERROR('#299: 1023 >> 9 === 1. Actual: ' + (1023 >> 9)); -} - - -if (2047 >> 9 !== 3) { - $ERROR('#300: 2047 >> 9 === 3. Actual: ' + (2047 >> 9)); -} - - -if (4095 >> 9 !== 7) { - $ERROR('#301: 4095 >> 9 === 7. Actual: ' + (4095 >> 9)); -} - - -if (8191 >> 9 !== 15) { - $ERROR('#302: 8191 >> 9 === 15. Actual: ' + (8191 >> 9)); -} - - -if (16383 >> 9 !== 31) { - $ERROR('#303: 16383 >> 9 === 31. Actual: ' + (16383 >> 9)); -} - - -if (32767 >> 9 !== 63) { - $ERROR('#304: 32767 >> 9 === 63. Actual: ' + (32767 >> 9)); -} - - -if (65535 >> 9 !== 127) { - $ERROR('#305: 65535 >> 9 === 127. Actual: ' + (65535 >> 9)); -} - - -if (131071 >> 9 !== 255) { - $ERROR('#306: 131071 >> 9 === 255. Actual: ' + (131071 >> 9)); -} - - -if (262143 >> 9 !== 511) { - $ERROR('#307: 262143 >> 9 === 511. Actual: ' + (262143 >> 9)); -} - - -if (524287 >> 9 !== 1023) { - $ERROR('#308: 524287 >> 9 === 1023. Actual: ' + (524287 >> 9)); -} - - -if (1048575 >> 9 !== 2047) { - $ERROR('#309: 1048575 >> 9 === 2047. Actual: ' + (1048575 >> 9)); -} - - -if (2097151 >> 9 !== 4095) { - $ERROR('#310: 2097151 >> 9 === 4095. Actual: ' + (2097151 >> 9)); -} - - -if (4194303 >> 9 !== 8191) { - $ERROR('#311: 4194303 >> 9 === 8191. Actual: ' + (4194303 >> 9)); -} - - -if (8388607 >> 9 !== 16383) { - $ERROR('#312: 8388607 >> 9 === 16383. Actual: ' + (8388607 >> 9)); -} - - -if (16777215 >> 9 !== 32767) { - $ERROR('#313: 16777215 >> 9 === 32767. Actual: ' + (16777215 >> 9)); -} - - -if (33554431 >> 9 !== 65535) { - $ERROR('#314: 33554431 >> 9 === 65535. Actual: ' + (33554431 >> 9)); -} - - -if (67108863 >> 9 !== 131071) { - $ERROR('#315: 67108863 >> 9 === 131071. Actual: ' + (67108863 >> 9)); -} - - -if (134217727 >> 9 !== 262143) { - $ERROR('#316: 134217727 >> 9 === 262143. Actual: ' + (134217727 >> 9)); -} - - -if (268435455 >> 9 !== 524287) { - $ERROR('#317: 268435455 >> 9 === 524287. Actual: ' + (268435455 >> 9)); -} - - -if (536870911 >> 9 !== 1048575) { - $ERROR('#318: 536870911 >> 9 === 1048575. Actual: ' + (536870911 >> 9)); -} - - -if (1073741823 >> 9 !== 2097151) { - $ERROR('#319: 1073741823 >> 9 === 2097151. Actual: ' + (1073741823 >> 9)); -} - - -if (2147483647 >> 9 !== 4194303) { - $ERROR('#320: 2147483647 >> 9 === 4194303. Actual: ' + (2147483647 >> 9)); -} - - -if (0 >> 10 !== 0) { - $ERROR('#321: 0 >> 10 === 0. Actual: ' + (0 >> 10)); -} - - -if (1 >> 10 !== 0) { - $ERROR('#322: 1 >> 10 === 0. Actual: ' + (1 >> 10)); -} - - -if (3 >> 10 !== 0) { - $ERROR('#323: 3 >> 10 === 0. Actual: ' + (3 >> 10)); -} - - -if (7 >> 10 !== 0) { - $ERROR('#324: 7 >> 10 === 0. Actual: ' + (7 >> 10)); -} - - -if (15 >> 10 !== 0) { - $ERROR('#325: 15 >> 10 === 0. Actual: ' + (15 >> 10)); -} - - -if (31 >> 10 !== 0) { - $ERROR('#326: 31 >> 10 === 0. Actual: ' + (31 >> 10)); -} - - -if (63 >> 10 !== 0) { - $ERROR('#327: 63 >> 10 === 0. Actual: ' + (63 >> 10)); -} - - -if (127 >> 10 !== 0) { - $ERROR('#328: 127 >> 10 === 0. Actual: ' + (127 >> 10)); -} - - -if (255 >> 10 !== 0) { - $ERROR('#329: 255 >> 10 === 0. Actual: ' + (255 >> 10)); -} - - -if (511 >> 10 !== 0) { - $ERROR('#330: 511 >> 10 === 0. Actual: ' + (511 >> 10)); -} - - -if (1023 >> 10 !== 0) { - $ERROR('#331: 1023 >> 10 === 0. Actual: ' + (1023 >> 10)); -} - - -if (2047 >> 10 !== 1) { - $ERROR('#332: 2047 >> 10 === 1. Actual: ' + (2047 >> 10)); -} - - -if (4095 >> 10 !== 3) { - $ERROR('#333: 4095 >> 10 === 3. Actual: ' + (4095 >> 10)); -} - - -if (8191 >> 10 !== 7) { - $ERROR('#334: 8191 >> 10 === 7. Actual: ' + (8191 >> 10)); -} - - -if (16383 >> 10 !== 15) { - $ERROR('#335: 16383 >> 10 === 15. Actual: ' + (16383 >> 10)); -} - - -if (32767 >> 10 !== 31) { - $ERROR('#336: 32767 >> 10 === 31. Actual: ' + (32767 >> 10)); -} - - -if (65535 >> 10 !== 63) { - $ERROR('#337: 65535 >> 10 === 63. Actual: ' + (65535 >> 10)); -} - - -if (131071 >> 10 !== 127) { - $ERROR('#338: 131071 >> 10 === 127. Actual: ' + (131071 >> 10)); -} - - -if (262143 >> 10 !== 255) { - $ERROR('#339: 262143 >> 10 === 255. Actual: ' + (262143 >> 10)); -} - - -if (524287 >> 10 !== 511) { - $ERROR('#340: 524287 >> 10 === 511. Actual: ' + (524287 >> 10)); -} - - -if (1048575 >> 10 !== 1023) { - $ERROR('#341: 1048575 >> 10 === 1023. Actual: ' + (1048575 >> 10)); -} - - -if (2097151 >> 10 !== 2047) { - $ERROR('#342: 2097151 >> 10 === 2047. Actual: ' + (2097151 >> 10)); -} - - -if (4194303 >> 10 !== 4095) { - $ERROR('#343: 4194303 >> 10 === 4095. Actual: ' + (4194303 >> 10)); -} - - -if (8388607 >> 10 !== 8191) { - $ERROR('#344: 8388607 >> 10 === 8191. Actual: ' + (8388607 >> 10)); -} - - -if (16777215 >> 10 !== 16383) { - $ERROR('#345: 16777215 >> 10 === 16383. Actual: ' + (16777215 >> 10)); -} - - -if (33554431 >> 10 !== 32767) { - $ERROR('#346: 33554431 >> 10 === 32767. Actual: ' + (33554431 >> 10)); -} - - -if (67108863 >> 10 !== 65535) { - $ERROR('#347: 67108863 >> 10 === 65535. Actual: ' + (67108863 >> 10)); -} - - -if (134217727 >> 10 !== 131071) { - $ERROR('#348: 134217727 >> 10 === 131071. Actual: ' + (134217727 >> 10)); -} - - -if (268435455 >> 10 !== 262143) { - $ERROR('#349: 268435455 >> 10 === 262143. Actual: ' + (268435455 >> 10)); -} - - -if (536870911 >> 10 !== 524287) { - $ERROR('#350: 536870911 >> 10 === 524287. Actual: ' + (536870911 >> 10)); -} - - -if (1073741823 >> 10 !== 1048575) { - $ERROR('#351: 1073741823 >> 10 === 1048575. Actual: ' + (1073741823 >> 10)); -} - - -if (2147483647 >> 10 !== 2097151) { - $ERROR('#352: 2147483647 >> 10 === 2097151. Actual: ' + (2147483647 >> 10)); -} - - -if (0 >> 11 !== 0) { - $ERROR('#353: 0 >> 11 === 0. Actual: ' + (0 >> 11)); -} - - -if (1 >> 11 !== 0) { - $ERROR('#354: 1 >> 11 === 0. Actual: ' + (1 >> 11)); -} - - -if (3 >> 11 !== 0) { - $ERROR('#355: 3 >> 11 === 0. Actual: ' + (3 >> 11)); -} - - -if (7 >> 11 !== 0) { - $ERROR('#356: 7 >> 11 === 0. Actual: ' + (7 >> 11)); -} - - -if (15 >> 11 !== 0) { - $ERROR('#357: 15 >> 11 === 0. Actual: ' + (15 >> 11)); -} - - -if (31 >> 11 !== 0) { - $ERROR('#358: 31 >> 11 === 0. Actual: ' + (31 >> 11)); -} - - -if (63 >> 11 !== 0) { - $ERROR('#359: 63 >> 11 === 0. Actual: ' + (63 >> 11)); -} - - -if (127 >> 11 !== 0) { - $ERROR('#360: 127 >> 11 === 0. Actual: ' + (127 >> 11)); -} - - -if (255 >> 11 !== 0) { - $ERROR('#361: 255 >> 11 === 0. Actual: ' + (255 >> 11)); -} - - -if (511 >> 11 !== 0) { - $ERROR('#362: 511 >> 11 === 0. Actual: ' + (511 >> 11)); -} - - -if (1023 >> 11 !== 0) { - $ERROR('#363: 1023 >> 11 === 0. Actual: ' + (1023 >> 11)); -} - - -if (2047 >> 11 !== 0) { - $ERROR('#364: 2047 >> 11 === 0. Actual: ' + (2047 >> 11)); -} - - -if (4095 >> 11 !== 1) { - $ERROR('#365: 4095 >> 11 === 1. Actual: ' + (4095 >> 11)); -} - - -if (8191 >> 11 !== 3) { - $ERROR('#366: 8191 >> 11 === 3. Actual: ' + (8191 >> 11)); -} - - -if (16383 >> 11 !== 7) { - $ERROR('#367: 16383 >> 11 === 7. Actual: ' + (16383 >> 11)); -} - - -if (32767 >> 11 !== 15) { - $ERROR('#368: 32767 >> 11 === 15. Actual: ' + (32767 >> 11)); -} - - -if (65535 >> 11 !== 31) { - $ERROR('#369: 65535 >> 11 === 31. Actual: ' + (65535 >> 11)); -} - - -if (131071 >> 11 !== 63) { - $ERROR('#370: 131071 >> 11 === 63. Actual: ' + (131071 >> 11)); -} - - -if (262143 >> 11 !== 127) { - $ERROR('#371: 262143 >> 11 === 127. Actual: ' + (262143 >> 11)); -} - - -if (524287 >> 11 !== 255) { - $ERROR('#372: 524287 >> 11 === 255. Actual: ' + (524287 >> 11)); -} - - -if (1048575 >> 11 !== 511) { - $ERROR('#373: 1048575 >> 11 === 511. Actual: ' + (1048575 >> 11)); -} - - -if (2097151 >> 11 !== 1023) { - $ERROR('#374: 2097151 >> 11 === 1023. Actual: ' + (2097151 >> 11)); -} - - -if (4194303 >> 11 !== 2047) { - $ERROR('#375: 4194303 >> 11 === 2047. Actual: ' + (4194303 >> 11)); -} - - -if (8388607 >> 11 !== 4095) { - $ERROR('#376: 8388607 >> 11 === 4095. Actual: ' + (8388607 >> 11)); -} - - -if (16777215 >> 11 !== 8191) { - $ERROR('#377: 16777215 >> 11 === 8191. Actual: ' + (16777215 >> 11)); -} - - -if (33554431 >> 11 !== 16383) { - $ERROR('#378: 33554431 >> 11 === 16383. Actual: ' + (33554431 >> 11)); -} - - -if (67108863 >> 11 !== 32767) { - $ERROR('#379: 67108863 >> 11 === 32767. Actual: ' + (67108863 >> 11)); -} - - -if (134217727 >> 11 !== 65535) { - $ERROR('#380: 134217727 >> 11 === 65535. Actual: ' + (134217727 >> 11)); -} - - -if (268435455 >> 11 !== 131071) { - $ERROR('#381: 268435455 >> 11 === 131071. Actual: ' + (268435455 >> 11)); -} - - -if (536870911 >> 11 !== 262143) { - $ERROR('#382: 536870911 >> 11 === 262143. Actual: ' + (536870911 >> 11)); -} - - -if (1073741823 >> 11 !== 524287) { - $ERROR('#383: 1073741823 >> 11 === 524287. Actual: ' + (1073741823 >> 11)); -} - - -if (2147483647 >> 11 !== 1048575) { - $ERROR('#384: 2147483647 >> 11 === 1048575. Actual: ' + (2147483647 >> 11)); -} - - -if (0 >> 12 !== 0) { - $ERROR('#385: 0 >> 12 === 0. Actual: ' + (0 >> 12)); -} - - -if (1 >> 12 !== 0) { - $ERROR('#386: 1 >> 12 === 0. Actual: ' + (1 >> 12)); -} - - -if (3 >> 12 !== 0) { - $ERROR('#387: 3 >> 12 === 0. Actual: ' + (3 >> 12)); -} - - -if (7 >> 12 !== 0) { - $ERROR('#388: 7 >> 12 === 0. Actual: ' + (7 >> 12)); -} - - -if (15 >> 12 !== 0) { - $ERROR('#389: 15 >> 12 === 0. Actual: ' + (15 >> 12)); -} - - -if (31 >> 12 !== 0) { - $ERROR('#390: 31 >> 12 === 0. Actual: ' + (31 >> 12)); -} - - -if (63 >> 12 !== 0) { - $ERROR('#391: 63 >> 12 === 0. Actual: ' + (63 >> 12)); -} - - -if (127 >> 12 !== 0) { - $ERROR('#392: 127 >> 12 === 0. Actual: ' + (127 >> 12)); -} - - -if (255 >> 12 !== 0) { - $ERROR('#393: 255 >> 12 === 0. Actual: ' + (255 >> 12)); -} - - -if (511 >> 12 !== 0) { - $ERROR('#394: 511 >> 12 === 0. Actual: ' + (511 >> 12)); -} - - -if (1023 >> 12 !== 0) { - $ERROR('#395: 1023 >> 12 === 0. Actual: ' + (1023 >> 12)); -} - - -if (2047 >> 12 !== 0) { - $ERROR('#396: 2047 >> 12 === 0. Actual: ' + (2047 >> 12)); -} - - -if (4095 >> 12 !== 0) { - $ERROR('#397: 4095 >> 12 === 0. Actual: ' + (4095 >> 12)); -} - - -if (8191 >> 12 !== 1) { - $ERROR('#398: 8191 >> 12 === 1. Actual: ' + (8191 >> 12)); -} - - -if (16383 >> 12 !== 3) { - $ERROR('#399: 16383 >> 12 === 3. Actual: ' + (16383 >> 12)); -} - - -if (32767 >> 12 !== 7) { - $ERROR('#400: 32767 >> 12 === 7. Actual: ' + (32767 >> 12)); -} - - -if (65535 >> 12 !== 15) { - $ERROR('#401: 65535 >> 12 === 15. Actual: ' + (65535 >> 12)); -} - - -if (131071 >> 12 !== 31) { - $ERROR('#402: 131071 >> 12 === 31. Actual: ' + (131071 >> 12)); -} - - -if (262143 >> 12 !== 63) { - $ERROR('#403: 262143 >> 12 === 63. Actual: ' + (262143 >> 12)); -} - - -if (524287 >> 12 !== 127) { - $ERROR('#404: 524287 >> 12 === 127. Actual: ' + (524287 >> 12)); -} - - -if (1048575 >> 12 !== 255) { - $ERROR('#405: 1048575 >> 12 === 255. Actual: ' + (1048575 >> 12)); -} - - -if (2097151 >> 12 !== 511) { - $ERROR('#406: 2097151 >> 12 === 511. Actual: ' + (2097151 >> 12)); -} - - -if (4194303 >> 12 !== 1023) { - $ERROR('#407: 4194303 >> 12 === 1023. Actual: ' + (4194303 >> 12)); -} - - -if (8388607 >> 12 !== 2047) { - $ERROR('#408: 8388607 >> 12 === 2047. Actual: ' + (8388607 >> 12)); -} - - -if (16777215 >> 12 !== 4095) { - $ERROR('#409: 16777215 >> 12 === 4095. Actual: ' + (16777215 >> 12)); -} - - -if (33554431 >> 12 !== 8191) { - $ERROR('#410: 33554431 >> 12 === 8191. Actual: ' + (33554431 >> 12)); -} - - -if (67108863 >> 12 !== 16383) { - $ERROR('#411: 67108863 >> 12 === 16383. Actual: ' + (67108863 >> 12)); -} - - -if (134217727 >> 12 !== 32767) { - $ERROR('#412: 134217727 >> 12 === 32767. Actual: ' + (134217727 >> 12)); -} - - -if (268435455 >> 12 !== 65535) { - $ERROR('#413: 268435455 >> 12 === 65535. Actual: ' + (268435455 >> 12)); -} - - -if (536870911 >> 12 !== 131071) { - $ERROR('#414: 536870911 >> 12 === 131071. Actual: ' + (536870911 >> 12)); -} - - -if (1073741823 >> 12 !== 262143) { - $ERROR('#415: 1073741823 >> 12 === 262143. Actual: ' + (1073741823 >> 12)); -} - - -if (2147483647 >> 12 !== 524287) { - $ERROR('#416: 2147483647 >> 12 === 524287. Actual: ' + (2147483647 >> 12)); -} - - -if (0 >> 13 !== 0) { - $ERROR('#417: 0 >> 13 === 0. Actual: ' + (0 >> 13)); -} - - -if (1 >> 13 !== 0) { - $ERROR('#418: 1 >> 13 === 0. Actual: ' + (1 >> 13)); -} - - -if (3 >> 13 !== 0) { - $ERROR('#419: 3 >> 13 === 0. Actual: ' + (3 >> 13)); -} - - -if (7 >> 13 !== 0) { - $ERROR('#420: 7 >> 13 === 0. Actual: ' + (7 >> 13)); -} - - -if (15 >> 13 !== 0) { - $ERROR('#421: 15 >> 13 === 0. Actual: ' + (15 >> 13)); -} - - -if (31 >> 13 !== 0) { - $ERROR('#422: 31 >> 13 === 0. Actual: ' + (31 >> 13)); -} - - -if (63 >> 13 !== 0) { - $ERROR('#423: 63 >> 13 === 0. Actual: ' + (63 >> 13)); -} - - -if (127 >> 13 !== 0) { - $ERROR('#424: 127 >> 13 === 0. Actual: ' + (127 >> 13)); -} - - -if (255 >> 13 !== 0) { - $ERROR('#425: 255 >> 13 === 0. Actual: ' + (255 >> 13)); -} - - -if (511 >> 13 !== 0) { - $ERROR('#426: 511 >> 13 === 0. Actual: ' + (511 >> 13)); -} - - -if (1023 >> 13 !== 0) { - $ERROR('#427: 1023 >> 13 === 0. Actual: ' + (1023 >> 13)); -} - - -if (2047 >> 13 !== 0) { - $ERROR('#428: 2047 >> 13 === 0. Actual: ' + (2047 >> 13)); -} - - -if (4095 >> 13 !== 0) { - $ERROR('#429: 4095 >> 13 === 0. Actual: ' + (4095 >> 13)); -} - - -if (8191 >> 13 !== 0) { - $ERROR('#430: 8191 >> 13 === 0. Actual: ' + (8191 >> 13)); -} - - -if (16383 >> 13 !== 1) { - $ERROR('#431: 16383 >> 13 === 1. Actual: ' + (16383 >> 13)); -} - - -if (32767 >> 13 !== 3) { - $ERROR('#432: 32767 >> 13 === 3. Actual: ' + (32767 >> 13)); -} - - -if (65535 >> 13 !== 7) { - $ERROR('#433: 65535 >> 13 === 7. Actual: ' + (65535 >> 13)); -} - - -if (131071 >> 13 !== 15) { - $ERROR('#434: 131071 >> 13 === 15. Actual: ' + (131071 >> 13)); -} - - -if (262143 >> 13 !== 31) { - $ERROR('#435: 262143 >> 13 === 31. Actual: ' + (262143 >> 13)); -} - - -if (524287 >> 13 !== 63) { - $ERROR('#436: 524287 >> 13 === 63. Actual: ' + (524287 >> 13)); -} - - -if (1048575 >> 13 !== 127) { - $ERROR('#437: 1048575 >> 13 === 127. Actual: ' + (1048575 >> 13)); -} - - -if (2097151 >> 13 !== 255) { - $ERROR('#438: 2097151 >> 13 === 255. Actual: ' + (2097151 >> 13)); -} - - -if (4194303 >> 13 !== 511) { - $ERROR('#439: 4194303 >> 13 === 511. Actual: ' + (4194303 >> 13)); -} - - -if (8388607 >> 13 !== 1023) { - $ERROR('#440: 8388607 >> 13 === 1023. Actual: ' + (8388607 >> 13)); -} - - -if (16777215 >> 13 !== 2047) { - $ERROR('#441: 16777215 >> 13 === 2047. Actual: ' + (16777215 >> 13)); -} - - -if (33554431 >> 13 !== 4095) { - $ERROR('#442: 33554431 >> 13 === 4095. Actual: ' + (33554431 >> 13)); -} - - -if (67108863 >> 13 !== 8191) { - $ERROR('#443: 67108863 >> 13 === 8191. Actual: ' + (67108863 >> 13)); -} - - -if (134217727 >> 13 !== 16383) { - $ERROR('#444: 134217727 >> 13 === 16383. Actual: ' + (134217727 >> 13)); -} - - -if (268435455 >> 13 !== 32767) { - $ERROR('#445: 268435455 >> 13 === 32767. Actual: ' + (268435455 >> 13)); -} - - -if (536870911 >> 13 !== 65535) { - $ERROR('#446: 536870911 >> 13 === 65535. Actual: ' + (536870911 >> 13)); -} - - -if (1073741823 >> 13 !== 131071) { - $ERROR('#447: 1073741823 >> 13 === 131071. Actual: ' + (1073741823 >> 13)); -} - - -if (2147483647 >> 13 !== 262143) { - $ERROR('#448: 2147483647 >> 13 === 262143. Actual: ' + (2147483647 >> 13)); -} - - -if (0 >> 14 !== 0) { - $ERROR('#449: 0 >> 14 === 0. Actual: ' + (0 >> 14)); -} - - -if (1 >> 14 !== 0) { - $ERROR('#450: 1 >> 14 === 0. Actual: ' + (1 >> 14)); -} - - -if (3 >> 14 !== 0) { - $ERROR('#451: 3 >> 14 === 0. Actual: ' + (3 >> 14)); -} - - -if (7 >> 14 !== 0) { - $ERROR('#452: 7 >> 14 === 0. Actual: ' + (7 >> 14)); -} - - -if (15 >> 14 !== 0) { - $ERROR('#453: 15 >> 14 === 0. Actual: ' + (15 >> 14)); -} - - -if (31 >> 14 !== 0) { - $ERROR('#454: 31 >> 14 === 0. Actual: ' + (31 >> 14)); -} - - -if (63 >> 14 !== 0) { - $ERROR('#455: 63 >> 14 === 0. Actual: ' + (63 >> 14)); -} - - -if (127 >> 14 !== 0) { - $ERROR('#456: 127 >> 14 === 0. Actual: ' + (127 >> 14)); -} - - -if (255 >> 14 !== 0) { - $ERROR('#457: 255 >> 14 === 0. Actual: ' + (255 >> 14)); -} - - -if (511 >> 14 !== 0) { - $ERROR('#458: 511 >> 14 === 0. Actual: ' + (511 >> 14)); -} - - -if (1023 >> 14 !== 0) { - $ERROR('#459: 1023 >> 14 === 0. Actual: ' + (1023 >> 14)); -} - - -if (2047 >> 14 !== 0) { - $ERROR('#460: 2047 >> 14 === 0. Actual: ' + (2047 >> 14)); -} - - -if (4095 >> 14 !== 0) { - $ERROR('#461: 4095 >> 14 === 0. Actual: ' + (4095 >> 14)); -} - - -if (8191 >> 14 !== 0) { - $ERROR('#462: 8191 >> 14 === 0. Actual: ' + (8191 >> 14)); -} - - -if (16383 >> 14 !== 0) { - $ERROR('#463: 16383 >> 14 === 0. Actual: ' + (16383 >> 14)); -} - - -if (32767 >> 14 !== 1) { - $ERROR('#464: 32767 >> 14 === 1. Actual: ' + (32767 >> 14)); -} - - -if (65535 >> 14 !== 3) { - $ERROR('#465: 65535 >> 14 === 3. Actual: ' + (65535 >> 14)); -} - - -if (131071 >> 14 !== 7) { - $ERROR('#466: 131071 >> 14 === 7. Actual: ' + (131071 >> 14)); -} - - -if (262143 >> 14 !== 15) { - $ERROR('#467: 262143 >> 14 === 15. Actual: ' + (262143 >> 14)); -} - - -if (524287 >> 14 !== 31) { - $ERROR('#468: 524287 >> 14 === 31. Actual: ' + (524287 >> 14)); -} - - -if (1048575 >> 14 !== 63) { - $ERROR('#469: 1048575 >> 14 === 63. Actual: ' + (1048575 >> 14)); -} - - -if (2097151 >> 14 !== 127) { - $ERROR('#470: 2097151 >> 14 === 127. Actual: ' + (2097151 >> 14)); -} - - -if (4194303 >> 14 !== 255) { - $ERROR('#471: 4194303 >> 14 === 255. Actual: ' + (4194303 >> 14)); -} - - -if (8388607 >> 14 !== 511) { - $ERROR('#472: 8388607 >> 14 === 511. Actual: ' + (8388607 >> 14)); -} - - -if (16777215 >> 14 !== 1023) { - $ERROR('#473: 16777215 >> 14 === 1023. Actual: ' + (16777215 >> 14)); -} - - -if (33554431 >> 14 !== 2047) { - $ERROR('#474: 33554431 >> 14 === 2047. Actual: ' + (33554431 >> 14)); -} - - -if (67108863 >> 14 !== 4095) { - $ERROR('#475: 67108863 >> 14 === 4095. Actual: ' + (67108863 >> 14)); -} - - -if (134217727 >> 14 !== 8191) { - $ERROR('#476: 134217727 >> 14 === 8191. Actual: ' + (134217727 >> 14)); -} - - -if (268435455 >> 14 !== 16383) { - $ERROR('#477: 268435455 >> 14 === 16383. Actual: ' + (268435455 >> 14)); -} - - -if (536870911 >> 14 !== 32767) { - $ERROR('#478: 536870911 >> 14 === 32767. Actual: ' + (536870911 >> 14)); -} - - -if (1073741823 >> 14 !== 65535) { - $ERROR('#479: 1073741823 >> 14 === 65535. Actual: ' + (1073741823 >> 14)); -} - - -if (2147483647 >> 14 !== 131071) { - $ERROR('#480: 2147483647 >> 14 === 131071. Actual: ' + (2147483647 >> 14)); -} - - -if (0 >> 15 !== 0) { - $ERROR('#481: 0 >> 15 === 0. Actual: ' + (0 >> 15)); -} - - -if (1 >> 15 !== 0) { - $ERROR('#482: 1 >> 15 === 0. Actual: ' + (1 >> 15)); -} - - -if (3 >> 15 !== 0) { - $ERROR('#483: 3 >> 15 === 0. Actual: ' + (3 >> 15)); -} - - -if (7 >> 15 !== 0) { - $ERROR('#484: 7 >> 15 === 0. Actual: ' + (7 >> 15)); -} - - -if (15 >> 15 !== 0) { - $ERROR('#485: 15 >> 15 === 0. Actual: ' + (15 >> 15)); -} - - -if (31 >> 15 !== 0) { - $ERROR('#486: 31 >> 15 === 0. Actual: ' + (31 >> 15)); -} - - -if (63 >> 15 !== 0) { - $ERROR('#487: 63 >> 15 === 0. Actual: ' + (63 >> 15)); -} - - -if (127 >> 15 !== 0) { - $ERROR('#488: 127 >> 15 === 0. Actual: ' + (127 >> 15)); -} - - -if (255 >> 15 !== 0) { - $ERROR('#489: 255 >> 15 === 0. Actual: ' + (255 >> 15)); -} - - -if (511 >> 15 !== 0) { - $ERROR('#490: 511 >> 15 === 0. Actual: ' + (511 >> 15)); -} - - -if (1023 >> 15 !== 0) { - $ERROR('#491: 1023 >> 15 === 0. Actual: ' + (1023 >> 15)); -} - - -if (2047 >> 15 !== 0) { - $ERROR('#492: 2047 >> 15 === 0. Actual: ' + (2047 >> 15)); -} - - -if (4095 >> 15 !== 0) { - $ERROR('#493: 4095 >> 15 === 0. Actual: ' + (4095 >> 15)); -} - - -if (8191 >> 15 !== 0) { - $ERROR('#494: 8191 >> 15 === 0. Actual: ' + (8191 >> 15)); -} - - -if (16383 >> 15 !== 0) { - $ERROR('#495: 16383 >> 15 === 0. Actual: ' + (16383 >> 15)); -} - - -if (32767 >> 15 !== 0) { - $ERROR('#496: 32767 >> 15 === 0. Actual: ' + (32767 >> 15)); -} - - -if (65535 >> 15 !== 1) { - $ERROR('#497: 65535 >> 15 === 1. Actual: ' + (65535 >> 15)); -} - - -if (131071 >> 15 !== 3) { - $ERROR('#498: 131071 >> 15 === 3. Actual: ' + (131071 >> 15)); -} - - -if (262143 >> 15 !== 7) { - $ERROR('#499: 262143 >> 15 === 7. Actual: ' + (262143 >> 15)); -} - - -if (524287 >> 15 !== 15) { - $ERROR('#500: 524287 >> 15 === 15. Actual: ' + (524287 >> 15)); -} - - -if (1048575 >> 15 !== 31) { - $ERROR('#501: 1048575 >> 15 === 31. Actual: ' + (1048575 >> 15)); -} - - -if (2097151 >> 15 !== 63) { - $ERROR('#502: 2097151 >> 15 === 63. Actual: ' + (2097151 >> 15)); -} - - -if (4194303 >> 15 !== 127) { - $ERROR('#503: 4194303 >> 15 === 127. Actual: ' + (4194303 >> 15)); -} - - -if (8388607 >> 15 !== 255) { - $ERROR('#504: 8388607 >> 15 === 255. Actual: ' + (8388607 >> 15)); -} - - -if (16777215 >> 15 !== 511) { - $ERROR('#505: 16777215 >> 15 === 511. Actual: ' + (16777215 >> 15)); -} - - -if (33554431 >> 15 !== 1023) { - $ERROR('#506: 33554431 >> 15 === 1023. Actual: ' + (33554431 >> 15)); -} - - -if (67108863 >> 15 !== 2047) { - $ERROR('#507: 67108863 >> 15 === 2047. Actual: ' + (67108863 >> 15)); -} - - -if (134217727 >> 15 !== 4095) { - $ERROR('#508: 134217727 >> 15 === 4095. Actual: ' + (134217727 >> 15)); -} - - -if (268435455 >> 15 !== 8191) { - $ERROR('#509: 268435455 >> 15 === 8191. Actual: ' + (268435455 >> 15)); -} - - -if (536870911 >> 15 !== 16383) { - $ERROR('#510: 536870911 >> 15 === 16383. Actual: ' + (536870911 >> 15)); -} - - -if (1073741823 >> 15 !== 32767) { - $ERROR('#511: 1073741823 >> 15 === 32767. Actual: ' + (1073741823 >> 15)); -} - - -if (2147483647 >> 15 !== 65535) { - $ERROR('#512: 2147483647 >> 15 === 65535. Actual: ' + (2147483647 >> 15)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A4_T4.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A4_T4.js deleted file mode 100644 index 04c473a1f..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A4_T4.js +++ /dev/null @@ -1,2565 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.2_A4_T4; - * @section: 11.7.2; - * @assertion: Check x >> y operator in distinct points; - * @description: ShiftExpression = 2^n - 1, n = 16...31; - */ - -//CHECK - -if (0 >> 16 !== 0) { - $ERROR('#513: 0 >> 16 === 0. Actual: ' + (0 >> 16)); -} - - -if (1 >> 16 !== 0) { - $ERROR('#514: 1 >> 16 === 0. Actual: ' + (1 >> 16)); -} - - -if (3 >> 16 !== 0) { - $ERROR('#515: 3 >> 16 === 0. Actual: ' + (3 >> 16)); -} - - -if (7 >> 16 !== 0) { - $ERROR('#516: 7 >> 16 === 0. Actual: ' + (7 >> 16)); -} - - -if (15 >> 16 !== 0) { - $ERROR('#517: 15 >> 16 === 0. Actual: ' + (15 >> 16)); -} - - -if (31 >> 16 !== 0) { - $ERROR('#518: 31 >> 16 === 0. Actual: ' + (31 >> 16)); -} - - -if (63 >> 16 !== 0) { - $ERROR('#519: 63 >> 16 === 0. Actual: ' + (63 >> 16)); -} - - -if (127 >> 16 !== 0) { - $ERROR('#520: 127 >> 16 === 0. Actual: ' + (127 >> 16)); -} - - -if (255 >> 16 !== 0) { - $ERROR('#521: 255 >> 16 === 0. Actual: ' + (255 >> 16)); -} - - -if (511 >> 16 !== 0) { - $ERROR('#522: 511 >> 16 === 0. Actual: ' + (511 >> 16)); -} - - -if (1023 >> 16 !== 0) { - $ERROR('#523: 1023 >> 16 === 0. Actual: ' + (1023 >> 16)); -} - - -if (2047 >> 16 !== 0) { - $ERROR('#524: 2047 >> 16 === 0. Actual: ' + (2047 >> 16)); -} - - -if (4095 >> 16 !== 0) { - $ERROR('#525: 4095 >> 16 === 0. Actual: ' + (4095 >> 16)); -} - - -if (8191 >> 16 !== 0) { - $ERROR('#526: 8191 >> 16 === 0. Actual: ' + (8191 >> 16)); -} - - -if (16383 >> 16 !== 0) { - $ERROR('#527: 16383 >> 16 === 0. Actual: ' + (16383 >> 16)); -} - - -if (32767 >> 16 !== 0) { - $ERROR('#528: 32767 >> 16 === 0. Actual: ' + (32767 >> 16)); -} - - -if (65535 >> 16 !== 0) { - $ERROR('#529: 65535 >> 16 === 0. Actual: ' + (65535 >> 16)); -} - - -if (131071 >> 16 !== 1) { - $ERROR('#530: 131071 >> 16 === 1. Actual: ' + (131071 >> 16)); -} - - -if (262143 >> 16 !== 3) { - $ERROR('#531: 262143 >> 16 === 3. Actual: ' + (262143 >> 16)); -} - - -if (524287 >> 16 !== 7) { - $ERROR('#532: 524287 >> 16 === 7. Actual: ' + (524287 >> 16)); -} - - -if (1048575 >> 16 !== 15) { - $ERROR('#533: 1048575 >> 16 === 15. Actual: ' + (1048575 >> 16)); -} - - -if (2097151 >> 16 !== 31) { - $ERROR('#534: 2097151 >> 16 === 31. Actual: ' + (2097151 >> 16)); -} - - -if (4194303 >> 16 !== 63) { - $ERROR('#535: 4194303 >> 16 === 63. Actual: ' + (4194303 >> 16)); -} - - -if (8388607 >> 16 !== 127) { - $ERROR('#536: 8388607 >> 16 === 127. Actual: ' + (8388607 >> 16)); -} - - -if (16777215 >> 16 !== 255) { - $ERROR('#537: 16777215 >> 16 === 255. Actual: ' + (16777215 >> 16)); -} - - -if (33554431 >> 16 !== 511) { - $ERROR('#538: 33554431 >> 16 === 511. Actual: ' + (33554431 >> 16)); -} - - -if (67108863 >> 16 !== 1023) { - $ERROR('#539: 67108863 >> 16 === 1023. Actual: ' + (67108863 >> 16)); -} - - -if (134217727 >> 16 !== 2047) { - $ERROR('#540: 134217727 >> 16 === 2047. Actual: ' + (134217727 >> 16)); -} - - -if (268435455 >> 16 !== 4095) { - $ERROR('#541: 268435455 >> 16 === 4095. Actual: ' + (268435455 >> 16)); -} - - -if (536870911 >> 16 !== 8191) { - $ERROR('#542: 536870911 >> 16 === 8191. Actual: ' + (536870911 >> 16)); -} - - -if (1073741823 >> 16 !== 16383) { - $ERROR('#543: 1073741823 >> 16 === 16383. Actual: ' + (1073741823 >> 16)); -} - - -if (2147483647 >> 16 !== 32767) { - $ERROR('#544: 2147483647 >> 16 === 32767. Actual: ' + (2147483647 >> 16)); -} - - -if (0 >> 17 !== 0) { - $ERROR('#545: 0 >> 17 === 0. Actual: ' + (0 >> 17)); -} - - -if (1 >> 17 !== 0) { - $ERROR('#546: 1 >> 17 === 0. Actual: ' + (1 >> 17)); -} - - -if (3 >> 17 !== 0) { - $ERROR('#547: 3 >> 17 === 0. Actual: ' + (3 >> 17)); -} - - -if (7 >> 17 !== 0) { - $ERROR('#548: 7 >> 17 === 0. Actual: ' + (7 >> 17)); -} - - -if (15 >> 17 !== 0) { - $ERROR('#549: 15 >> 17 === 0. Actual: ' + (15 >> 17)); -} - - -if (31 >> 17 !== 0) { - $ERROR('#550: 31 >> 17 === 0. Actual: ' + (31 >> 17)); -} - - -if (63 >> 17 !== 0) { - $ERROR('#551: 63 >> 17 === 0. Actual: ' + (63 >> 17)); -} - - -if (127 >> 17 !== 0) { - $ERROR('#552: 127 >> 17 === 0. Actual: ' + (127 >> 17)); -} - - -if (255 >> 17 !== 0) { - $ERROR('#553: 255 >> 17 === 0. Actual: ' + (255 >> 17)); -} - - -if (511 >> 17 !== 0) { - $ERROR('#554: 511 >> 17 === 0. Actual: ' + (511 >> 17)); -} - - -if (1023 >> 17 !== 0) { - $ERROR('#555: 1023 >> 17 === 0. Actual: ' + (1023 >> 17)); -} - - -if (2047 >> 17 !== 0) { - $ERROR('#556: 2047 >> 17 === 0. Actual: ' + (2047 >> 17)); -} - - -if (4095 >> 17 !== 0) { - $ERROR('#557: 4095 >> 17 === 0. Actual: ' + (4095 >> 17)); -} - - -if (8191 >> 17 !== 0) { - $ERROR('#558: 8191 >> 17 === 0. Actual: ' + (8191 >> 17)); -} - - -if (16383 >> 17 !== 0) { - $ERROR('#559: 16383 >> 17 === 0. Actual: ' + (16383 >> 17)); -} - - -if (32767 >> 17 !== 0) { - $ERROR('#560: 32767 >> 17 === 0. Actual: ' + (32767 >> 17)); -} - - -if (65535 >> 17 !== 0) { - $ERROR('#561: 65535 >> 17 === 0. Actual: ' + (65535 >> 17)); -} - - -if (131071 >> 17 !== 0) { - $ERROR('#562: 131071 >> 17 === 0. Actual: ' + (131071 >> 17)); -} - - -if (262143 >> 17 !== 1) { - $ERROR('#563: 262143 >> 17 === 1. Actual: ' + (262143 >> 17)); -} - - -if (524287 >> 17 !== 3) { - $ERROR('#564: 524287 >> 17 === 3. Actual: ' + (524287 >> 17)); -} - - -if (1048575 >> 17 !== 7) { - $ERROR('#565: 1048575 >> 17 === 7. Actual: ' + (1048575 >> 17)); -} - - -if (2097151 >> 17 !== 15) { - $ERROR('#566: 2097151 >> 17 === 15. Actual: ' + (2097151 >> 17)); -} - - -if (4194303 >> 17 !== 31) { - $ERROR('#567: 4194303 >> 17 === 31. Actual: ' + (4194303 >> 17)); -} - - -if (8388607 >> 17 !== 63) { - $ERROR('#568: 8388607 >> 17 === 63. Actual: ' + (8388607 >> 17)); -} - - -if (16777215 >> 17 !== 127) { - $ERROR('#569: 16777215 >> 17 === 127. Actual: ' + (16777215 >> 17)); -} - - -if (33554431 >> 17 !== 255) { - $ERROR('#570: 33554431 >> 17 === 255. Actual: ' + (33554431 >> 17)); -} - - -if (67108863 >> 17 !== 511) { - $ERROR('#571: 67108863 >> 17 === 511. Actual: ' + (67108863 >> 17)); -} - - -if (134217727 >> 17 !== 1023) { - $ERROR('#572: 134217727 >> 17 === 1023. Actual: ' + (134217727 >> 17)); -} - - -if (268435455 >> 17 !== 2047) { - $ERROR('#573: 268435455 >> 17 === 2047. Actual: ' + (268435455 >> 17)); -} - - -if (536870911 >> 17 !== 4095) { - $ERROR('#574: 536870911 >> 17 === 4095. Actual: ' + (536870911 >> 17)); -} - - -if (1073741823 >> 17 !== 8191) { - $ERROR('#575: 1073741823 >> 17 === 8191. Actual: ' + (1073741823 >> 17)); -} - - -if (2147483647 >> 17 !== 16383) { - $ERROR('#576: 2147483647 >> 17 === 16383. Actual: ' + (2147483647 >> 17)); -} - - -if (0 >> 18 !== 0) { - $ERROR('#577: 0 >> 18 === 0. Actual: ' + (0 >> 18)); -} - - -if (1 >> 18 !== 0) { - $ERROR('#578: 1 >> 18 === 0. Actual: ' + (1 >> 18)); -} - - -if (3 >> 18 !== 0) { - $ERROR('#579: 3 >> 18 === 0. Actual: ' + (3 >> 18)); -} - - -if (7 >> 18 !== 0) { - $ERROR('#580: 7 >> 18 === 0. Actual: ' + (7 >> 18)); -} - - -if (15 >> 18 !== 0) { - $ERROR('#581: 15 >> 18 === 0. Actual: ' + (15 >> 18)); -} - - -if (31 >> 18 !== 0) { - $ERROR('#582: 31 >> 18 === 0. Actual: ' + (31 >> 18)); -} - - -if (63 >> 18 !== 0) { - $ERROR('#583: 63 >> 18 === 0. Actual: ' + (63 >> 18)); -} - - -if (127 >> 18 !== 0) { - $ERROR('#584: 127 >> 18 === 0. Actual: ' + (127 >> 18)); -} - - -if (255 >> 18 !== 0) { - $ERROR('#585: 255 >> 18 === 0. Actual: ' + (255 >> 18)); -} - - -if (511 >> 18 !== 0) { - $ERROR('#586: 511 >> 18 === 0. Actual: ' + (511 >> 18)); -} - - -if (1023 >> 18 !== 0) { - $ERROR('#587: 1023 >> 18 === 0. Actual: ' + (1023 >> 18)); -} - - -if (2047 >> 18 !== 0) { - $ERROR('#588: 2047 >> 18 === 0. Actual: ' + (2047 >> 18)); -} - - -if (4095 >> 18 !== 0) { - $ERROR('#589: 4095 >> 18 === 0. Actual: ' + (4095 >> 18)); -} - - -if (8191 >> 18 !== 0) { - $ERROR('#590: 8191 >> 18 === 0. Actual: ' + (8191 >> 18)); -} - - -if (16383 >> 18 !== 0) { - $ERROR('#591: 16383 >> 18 === 0. Actual: ' + (16383 >> 18)); -} - - -if (32767 >> 18 !== 0) { - $ERROR('#592: 32767 >> 18 === 0. Actual: ' + (32767 >> 18)); -} - - -if (65535 >> 18 !== 0) { - $ERROR('#593: 65535 >> 18 === 0. Actual: ' + (65535 >> 18)); -} - - -if (131071 >> 18 !== 0) { - $ERROR('#594: 131071 >> 18 === 0. Actual: ' + (131071 >> 18)); -} - - -if (262143 >> 18 !== 0) { - $ERROR('#595: 262143 >> 18 === 0. Actual: ' + (262143 >> 18)); -} - - -if (524287 >> 18 !== 1) { - $ERROR('#596: 524287 >> 18 === 1. Actual: ' + (524287 >> 18)); -} - - -if (1048575 >> 18 !== 3) { - $ERROR('#597: 1048575 >> 18 === 3. Actual: ' + (1048575 >> 18)); -} - - -if (2097151 >> 18 !== 7) { - $ERROR('#598: 2097151 >> 18 === 7. Actual: ' + (2097151 >> 18)); -} - - -if (4194303 >> 18 !== 15) { - $ERROR('#599: 4194303 >> 18 === 15. Actual: ' + (4194303 >> 18)); -} - - -if (8388607 >> 18 !== 31) { - $ERROR('#600: 8388607 >> 18 === 31. Actual: ' + (8388607 >> 18)); -} - - -if (16777215 >> 18 !== 63) { - $ERROR('#601: 16777215 >> 18 === 63. Actual: ' + (16777215 >> 18)); -} - - -if (33554431 >> 18 !== 127) { - $ERROR('#602: 33554431 >> 18 === 127. Actual: ' + (33554431 >> 18)); -} - - -if (67108863 >> 18 !== 255) { - $ERROR('#603: 67108863 >> 18 === 255. Actual: ' + (67108863 >> 18)); -} - - -if (134217727 >> 18 !== 511) { - $ERROR('#604: 134217727 >> 18 === 511. Actual: ' + (134217727 >> 18)); -} - - -if (268435455 >> 18 !== 1023) { - $ERROR('#605: 268435455 >> 18 === 1023. Actual: ' + (268435455 >> 18)); -} - - -if (536870911 >> 18 !== 2047) { - $ERROR('#606: 536870911 >> 18 === 2047. Actual: ' + (536870911 >> 18)); -} - - -if (1073741823 >> 18 !== 4095) { - $ERROR('#607: 1073741823 >> 18 === 4095. Actual: ' + (1073741823 >> 18)); -} - - -if (2147483647 >> 18 !== 8191) { - $ERROR('#608: 2147483647 >> 18 === 8191. Actual: ' + (2147483647 >> 18)); -} - - -if (0 >> 19 !== 0) { - $ERROR('#609: 0 >> 19 === 0. Actual: ' + (0 >> 19)); -} - - -if (1 >> 19 !== 0) { - $ERROR('#610: 1 >> 19 === 0. Actual: ' + (1 >> 19)); -} - - -if (3 >> 19 !== 0) { - $ERROR('#611: 3 >> 19 === 0. Actual: ' + (3 >> 19)); -} - - -if (7 >> 19 !== 0) { - $ERROR('#612: 7 >> 19 === 0. Actual: ' + (7 >> 19)); -} - - -if (15 >> 19 !== 0) { - $ERROR('#613: 15 >> 19 === 0. Actual: ' + (15 >> 19)); -} - - -if (31 >> 19 !== 0) { - $ERROR('#614: 31 >> 19 === 0. Actual: ' + (31 >> 19)); -} - - -if (63 >> 19 !== 0) { - $ERROR('#615: 63 >> 19 === 0. Actual: ' + (63 >> 19)); -} - - -if (127 >> 19 !== 0) { - $ERROR('#616: 127 >> 19 === 0. Actual: ' + (127 >> 19)); -} - - -if (255 >> 19 !== 0) { - $ERROR('#617: 255 >> 19 === 0. Actual: ' + (255 >> 19)); -} - - -if (511 >> 19 !== 0) { - $ERROR('#618: 511 >> 19 === 0. Actual: ' + (511 >> 19)); -} - - -if (1023 >> 19 !== 0) { - $ERROR('#619: 1023 >> 19 === 0. Actual: ' + (1023 >> 19)); -} - - -if (2047 >> 19 !== 0) { - $ERROR('#620: 2047 >> 19 === 0. Actual: ' + (2047 >> 19)); -} - - -if (4095 >> 19 !== 0) { - $ERROR('#621: 4095 >> 19 === 0. Actual: ' + (4095 >> 19)); -} - - -if (8191 >> 19 !== 0) { - $ERROR('#622: 8191 >> 19 === 0. Actual: ' + (8191 >> 19)); -} - - -if (16383 >> 19 !== 0) { - $ERROR('#623: 16383 >> 19 === 0. Actual: ' + (16383 >> 19)); -} - - -if (32767 >> 19 !== 0) { - $ERROR('#624: 32767 >> 19 === 0. Actual: ' + (32767 >> 19)); -} - - -if (65535 >> 19 !== 0) { - $ERROR('#625: 65535 >> 19 === 0. Actual: ' + (65535 >> 19)); -} - - -if (131071 >> 19 !== 0) { - $ERROR('#626: 131071 >> 19 === 0. Actual: ' + (131071 >> 19)); -} - - -if (262143 >> 19 !== 0) { - $ERROR('#627: 262143 >> 19 === 0. Actual: ' + (262143 >> 19)); -} - - -if (524287 >> 19 !== 0) { - $ERROR('#628: 524287 >> 19 === 0. Actual: ' + (524287 >> 19)); -} - - -if (1048575 >> 19 !== 1) { - $ERROR('#629: 1048575 >> 19 === 1. Actual: ' + (1048575 >> 19)); -} - - -if (2097151 >> 19 !== 3) { - $ERROR('#630: 2097151 >> 19 === 3. Actual: ' + (2097151 >> 19)); -} - - -if (4194303 >> 19 !== 7) { - $ERROR('#631: 4194303 >> 19 === 7. Actual: ' + (4194303 >> 19)); -} - - -if (8388607 >> 19 !== 15) { - $ERROR('#632: 8388607 >> 19 === 15. Actual: ' + (8388607 >> 19)); -} - - -if (16777215 >> 19 !== 31) { - $ERROR('#633: 16777215 >> 19 === 31. Actual: ' + (16777215 >> 19)); -} - - -if (33554431 >> 19 !== 63) { - $ERROR('#634: 33554431 >> 19 === 63. Actual: ' + (33554431 >> 19)); -} - - -if (67108863 >> 19 !== 127) { - $ERROR('#635: 67108863 >> 19 === 127. Actual: ' + (67108863 >> 19)); -} - - -if (134217727 >> 19 !== 255) { - $ERROR('#636: 134217727 >> 19 === 255. Actual: ' + (134217727 >> 19)); -} - - -if (268435455 >> 19 !== 511) { - $ERROR('#637: 268435455 >> 19 === 511. Actual: ' + (268435455 >> 19)); -} - - -if (536870911 >> 19 !== 1023) { - $ERROR('#638: 536870911 >> 19 === 1023. Actual: ' + (536870911 >> 19)); -} - - -if (1073741823 >> 19 !== 2047) { - $ERROR('#639: 1073741823 >> 19 === 2047. Actual: ' + (1073741823 >> 19)); -} - - -if (2147483647 >> 19 !== 4095) { - $ERROR('#640: 2147483647 >> 19 === 4095. Actual: ' + (2147483647 >> 19)); -} - - -if (0 >> 20 !== 0) { - $ERROR('#641: 0 >> 20 === 0. Actual: ' + (0 >> 20)); -} - - -if (1 >> 20 !== 0) { - $ERROR('#642: 1 >> 20 === 0. Actual: ' + (1 >> 20)); -} - - -if (3 >> 20 !== 0) { - $ERROR('#643: 3 >> 20 === 0. Actual: ' + (3 >> 20)); -} - - -if (7 >> 20 !== 0) { - $ERROR('#644: 7 >> 20 === 0. Actual: ' + (7 >> 20)); -} - - -if (15 >> 20 !== 0) { - $ERROR('#645: 15 >> 20 === 0. Actual: ' + (15 >> 20)); -} - - -if (31 >> 20 !== 0) { - $ERROR('#646: 31 >> 20 === 0. Actual: ' + (31 >> 20)); -} - - -if (63 >> 20 !== 0) { - $ERROR('#647: 63 >> 20 === 0. Actual: ' + (63 >> 20)); -} - - -if (127 >> 20 !== 0) { - $ERROR('#648: 127 >> 20 === 0. Actual: ' + (127 >> 20)); -} - - -if (255 >> 20 !== 0) { - $ERROR('#649: 255 >> 20 === 0. Actual: ' + (255 >> 20)); -} - - -if (511 >> 20 !== 0) { - $ERROR('#650: 511 >> 20 === 0. Actual: ' + (511 >> 20)); -} - - -if (1023 >> 20 !== 0) { - $ERROR('#651: 1023 >> 20 === 0. Actual: ' + (1023 >> 20)); -} - - -if (2047 >> 20 !== 0) { - $ERROR('#652: 2047 >> 20 === 0. Actual: ' + (2047 >> 20)); -} - - -if (4095 >> 20 !== 0) { - $ERROR('#653: 4095 >> 20 === 0. Actual: ' + (4095 >> 20)); -} - - -if (8191 >> 20 !== 0) { - $ERROR('#654: 8191 >> 20 === 0. Actual: ' + (8191 >> 20)); -} - - -if (16383 >> 20 !== 0) { - $ERROR('#655: 16383 >> 20 === 0. Actual: ' + (16383 >> 20)); -} - - -if (32767 >> 20 !== 0) { - $ERROR('#656: 32767 >> 20 === 0. Actual: ' + (32767 >> 20)); -} - - -if (65535 >> 20 !== 0) { - $ERROR('#657: 65535 >> 20 === 0. Actual: ' + (65535 >> 20)); -} - - -if (131071 >> 20 !== 0) { - $ERROR('#658: 131071 >> 20 === 0. Actual: ' + (131071 >> 20)); -} - - -if (262143 >> 20 !== 0) { - $ERROR('#659: 262143 >> 20 === 0. Actual: ' + (262143 >> 20)); -} - - -if (524287 >> 20 !== 0) { - $ERROR('#660: 524287 >> 20 === 0. Actual: ' + (524287 >> 20)); -} - - -if (1048575 >> 20 !== 0) { - $ERROR('#661: 1048575 >> 20 === 0. Actual: ' + (1048575 >> 20)); -} - - -if (2097151 >> 20 !== 1) { - $ERROR('#662: 2097151 >> 20 === 1. Actual: ' + (2097151 >> 20)); -} - - -if (4194303 >> 20 !== 3) { - $ERROR('#663: 4194303 >> 20 === 3. Actual: ' + (4194303 >> 20)); -} - - -if (8388607 >> 20 !== 7) { - $ERROR('#664: 8388607 >> 20 === 7. Actual: ' + (8388607 >> 20)); -} - - -if (16777215 >> 20 !== 15) { - $ERROR('#665: 16777215 >> 20 === 15. Actual: ' + (16777215 >> 20)); -} - - -if (33554431 >> 20 !== 31) { - $ERROR('#666: 33554431 >> 20 === 31. Actual: ' + (33554431 >> 20)); -} - - -if (67108863 >> 20 !== 63) { - $ERROR('#667: 67108863 >> 20 === 63. Actual: ' + (67108863 >> 20)); -} - - -if (134217727 >> 20 !== 127) { - $ERROR('#668: 134217727 >> 20 === 127. Actual: ' + (134217727 >> 20)); -} - - -if (268435455 >> 20 !== 255) { - $ERROR('#669: 268435455 >> 20 === 255. Actual: ' + (268435455 >> 20)); -} - - -if (536870911 >> 20 !== 511) { - $ERROR('#670: 536870911 >> 20 === 511. Actual: ' + (536870911 >> 20)); -} - - -if (1073741823 >> 20 !== 1023) { - $ERROR('#671: 1073741823 >> 20 === 1023. Actual: ' + (1073741823 >> 20)); -} - - -if (2147483647 >> 20 !== 2047) { - $ERROR('#672: 2147483647 >> 20 === 2047. Actual: ' + (2147483647 >> 20)); -} - - -if (0 >> 21 !== 0) { - $ERROR('#673: 0 >> 21 === 0. Actual: ' + (0 >> 21)); -} - - -if (1 >> 21 !== 0) { - $ERROR('#674: 1 >> 21 === 0. Actual: ' + (1 >> 21)); -} - - -if (3 >> 21 !== 0) { - $ERROR('#675: 3 >> 21 === 0. Actual: ' + (3 >> 21)); -} - - -if (7 >> 21 !== 0) { - $ERROR('#676: 7 >> 21 === 0. Actual: ' + (7 >> 21)); -} - - -if (15 >> 21 !== 0) { - $ERROR('#677: 15 >> 21 === 0. Actual: ' + (15 >> 21)); -} - - -if (31 >> 21 !== 0) { - $ERROR('#678: 31 >> 21 === 0. Actual: ' + (31 >> 21)); -} - - -if (63 >> 21 !== 0) { - $ERROR('#679: 63 >> 21 === 0. Actual: ' + (63 >> 21)); -} - - -if (127 >> 21 !== 0) { - $ERROR('#680: 127 >> 21 === 0. Actual: ' + (127 >> 21)); -} - - -if (255 >> 21 !== 0) { - $ERROR('#681: 255 >> 21 === 0. Actual: ' + (255 >> 21)); -} - - -if (511 >> 21 !== 0) { - $ERROR('#682: 511 >> 21 === 0. Actual: ' + (511 >> 21)); -} - - -if (1023 >> 21 !== 0) { - $ERROR('#683: 1023 >> 21 === 0. Actual: ' + (1023 >> 21)); -} - - -if (2047 >> 21 !== 0) { - $ERROR('#684: 2047 >> 21 === 0. Actual: ' + (2047 >> 21)); -} - - -if (4095 >> 21 !== 0) { - $ERROR('#685: 4095 >> 21 === 0. Actual: ' + (4095 >> 21)); -} - - -if (8191 >> 21 !== 0) { - $ERROR('#686: 8191 >> 21 === 0. Actual: ' + (8191 >> 21)); -} - - -if (16383 >> 21 !== 0) { - $ERROR('#687: 16383 >> 21 === 0. Actual: ' + (16383 >> 21)); -} - - -if (32767 >> 21 !== 0) { - $ERROR('#688: 32767 >> 21 === 0. Actual: ' + (32767 >> 21)); -} - - -if (65535 >> 21 !== 0) { - $ERROR('#689: 65535 >> 21 === 0. Actual: ' + (65535 >> 21)); -} - - -if (131071 >> 21 !== 0) { - $ERROR('#690: 131071 >> 21 === 0. Actual: ' + (131071 >> 21)); -} - - -if (262143 >> 21 !== 0) { - $ERROR('#691: 262143 >> 21 === 0. Actual: ' + (262143 >> 21)); -} - - -if (524287 >> 21 !== 0) { - $ERROR('#692: 524287 >> 21 === 0. Actual: ' + (524287 >> 21)); -} - - -if (1048575 >> 21 !== 0) { - $ERROR('#693: 1048575 >> 21 === 0. Actual: ' + (1048575 >> 21)); -} - - -if (2097151 >> 21 !== 0) { - $ERROR('#694: 2097151 >> 21 === 0. Actual: ' + (2097151 >> 21)); -} - - -if (4194303 >> 21 !== 1) { - $ERROR('#695: 4194303 >> 21 === 1. Actual: ' + (4194303 >> 21)); -} - - -if (8388607 >> 21 !== 3) { - $ERROR('#696: 8388607 >> 21 === 3. Actual: ' + (8388607 >> 21)); -} - - -if (16777215 >> 21 !== 7) { - $ERROR('#697: 16777215 >> 21 === 7. Actual: ' + (16777215 >> 21)); -} - - -if (33554431 >> 21 !== 15) { - $ERROR('#698: 33554431 >> 21 === 15. Actual: ' + (33554431 >> 21)); -} - - -if (67108863 >> 21 !== 31) { - $ERROR('#699: 67108863 >> 21 === 31. Actual: ' + (67108863 >> 21)); -} - - -if (134217727 >> 21 !== 63) { - $ERROR('#700: 134217727 >> 21 === 63. Actual: ' + (134217727 >> 21)); -} - - -if (268435455 >> 21 !== 127) { - $ERROR('#701: 268435455 >> 21 === 127. Actual: ' + (268435455 >> 21)); -} - - -if (536870911 >> 21 !== 255) { - $ERROR('#702: 536870911 >> 21 === 255. Actual: ' + (536870911 >> 21)); -} - - -if (1073741823 >> 21 !== 511) { - $ERROR('#703: 1073741823 >> 21 === 511. Actual: ' + (1073741823 >> 21)); -} - - -if (2147483647 >> 21 !== 1023) { - $ERROR('#704: 2147483647 >> 21 === 1023. Actual: ' + (2147483647 >> 21)); -} - - -if (0 >> 22 !== 0) { - $ERROR('#705: 0 >> 22 === 0. Actual: ' + (0 >> 22)); -} - - -if (1 >> 22 !== 0) { - $ERROR('#706: 1 >> 22 === 0. Actual: ' + (1 >> 22)); -} - - -if (3 >> 22 !== 0) { - $ERROR('#707: 3 >> 22 === 0. Actual: ' + (3 >> 22)); -} - - -if (7 >> 22 !== 0) { - $ERROR('#708: 7 >> 22 === 0. Actual: ' + (7 >> 22)); -} - - -if (15 >> 22 !== 0) { - $ERROR('#709: 15 >> 22 === 0. Actual: ' + (15 >> 22)); -} - - -if (31 >> 22 !== 0) { - $ERROR('#710: 31 >> 22 === 0. Actual: ' + (31 >> 22)); -} - - -if (63 >> 22 !== 0) { - $ERROR('#711: 63 >> 22 === 0. Actual: ' + (63 >> 22)); -} - - -if (127 >> 22 !== 0) { - $ERROR('#712: 127 >> 22 === 0. Actual: ' + (127 >> 22)); -} - - -if (255 >> 22 !== 0) { - $ERROR('#713: 255 >> 22 === 0. Actual: ' + (255 >> 22)); -} - - -if (511 >> 22 !== 0) { - $ERROR('#714: 511 >> 22 === 0. Actual: ' + (511 >> 22)); -} - - -if (1023 >> 22 !== 0) { - $ERROR('#715: 1023 >> 22 === 0. Actual: ' + (1023 >> 22)); -} - - -if (2047 >> 22 !== 0) { - $ERROR('#716: 2047 >> 22 === 0. Actual: ' + (2047 >> 22)); -} - - -if (4095 >> 22 !== 0) { - $ERROR('#717: 4095 >> 22 === 0. Actual: ' + (4095 >> 22)); -} - - -if (8191 >> 22 !== 0) { - $ERROR('#718: 8191 >> 22 === 0. Actual: ' + (8191 >> 22)); -} - - -if (16383 >> 22 !== 0) { - $ERROR('#719: 16383 >> 22 === 0. Actual: ' + (16383 >> 22)); -} - - -if (32767 >> 22 !== 0) { - $ERROR('#720: 32767 >> 22 === 0. Actual: ' + (32767 >> 22)); -} - - -if (65535 >> 22 !== 0) { - $ERROR('#721: 65535 >> 22 === 0. Actual: ' + (65535 >> 22)); -} - - -if (131071 >> 22 !== 0) { - $ERROR('#722: 131071 >> 22 === 0. Actual: ' + (131071 >> 22)); -} - - -if (262143 >> 22 !== 0) { - $ERROR('#723: 262143 >> 22 === 0. Actual: ' + (262143 >> 22)); -} - - -if (524287 >> 22 !== 0) { - $ERROR('#724: 524287 >> 22 === 0. Actual: ' + (524287 >> 22)); -} - - -if (1048575 >> 22 !== 0) { - $ERROR('#725: 1048575 >> 22 === 0. Actual: ' + (1048575 >> 22)); -} - - -if (2097151 >> 22 !== 0) { - $ERROR('#726: 2097151 >> 22 === 0. Actual: ' + (2097151 >> 22)); -} - - -if (4194303 >> 22 !== 0) { - $ERROR('#727: 4194303 >> 22 === 0. Actual: ' + (4194303 >> 22)); -} - - -if (8388607 >> 22 !== 1) { - $ERROR('#728: 8388607 >> 22 === 1. Actual: ' + (8388607 >> 22)); -} - - -if (16777215 >> 22 !== 3) { - $ERROR('#729: 16777215 >> 22 === 3. Actual: ' + (16777215 >> 22)); -} - - -if (33554431 >> 22 !== 7) { - $ERROR('#730: 33554431 >> 22 === 7. Actual: ' + (33554431 >> 22)); -} - - -if (67108863 >> 22 !== 15) { - $ERROR('#731: 67108863 >> 22 === 15. Actual: ' + (67108863 >> 22)); -} - - -if (134217727 >> 22 !== 31) { - $ERROR('#732: 134217727 >> 22 === 31. Actual: ' + (134217727 >> 22)); -} - - -if (268435455 >> 22 !== 63) { - $ERROR('#733: 268435455 >> 22 === 63. Actual: ' + (268435455 >> 22)); -} - - -if (536870911 >> 22 !== 127) { - $ERROR('#734: 536870911 >> 22 === 127. Actual: ' + (536870911 >> 22)); -} - - -if (1073741823 >> 22 !== 255) { - $ERROR('#735: 1073741823 >> 22 === 255. Actual: ' + (1073741823 >> 22)); -} - - -if (2147483647 >> 22 !== 511) { - $ERROR('#736: 2147483647 >> 22 === 511. Actual: ' + (2147483647 >> 22)); -} - - -if (0 >> 23 !== 0) { - $ERROR('#737: 0 >> 23 === 0. Actual: ' + (0 >> 23)); -} - - -if (1 >> 23 !== 0) { - $ERROR('#738: 1 >> 23 === 0. Actual: ' + (1 >> 23)); -} - - -if (3 >> 23 !== 0) { - $ERROR('#739: 3 >> 23 === 0. Actual: ' + (3 >> 23)); -} - - -if (7 >> 23 !== 0) { - $ERROR('#740: 7 >> 23 === 0. Actual: ' + (7 >> 23)); -} - - -if (15 >> 23 !== 0) { - $ERROR('#741: 15 >> 23 === 0. Actual: ' + (15 >> 23)); -} - - -if (31 >> 23 !== 0) { - $ERROR('#742: 31 >> 23 === 0. Actual: ' + (31 >> 23)); -} - - -if (63 >> 23 !== 0) { - $ERROR('#743: 63 >> 23 === 0. Actual: ' + (63 >> 23)); -} - - -if (127 >> 23 !== 0) { - $ERROR('#744: 127 >> 23 === 0. Actual: ' + (127 >> 23)); -} - - -if (255 >> 23 !== 0) { - $ERROR('#745: 255 >> 23 === 0. Actual: ' + (255 >> 23)); -} - - -if (511 >> 23 !== 0) { - $ERROR('#746: 511 >> 23 === 0. Actual: ' + (511 >> 23)); -} - - -if (1023 >> 23 !== 0) { - $ERROR('#747: 1023 >> 23 === 0. Actual: ' + (1023 >> 23)); -} - - -if (2047 >> 23 !== 0) { - $ERROR('#748: 2047 >> 23 === 0. Actual: ' + (2047 >> 23)); -} - - -if (4095 >> 23 !== 0) { - $ERROR('#749: 4095 >> 23 === 0. Actual: ' + (4095 >> 23)); -} - - -if (8191 >> 23 !== 0) { - $ERROR('#750: 8191 >> 23 === 0. Actual: ' + (8191 >> 23)); -} - - -if (16383 >> 23 !== 0) { - $ERROR('#751: 16383 >> 23 === 0. Actual: ' + (16383 >> 23)); -} - - -if (32767 >> 23 !== 0) { - $ERROR('#752: 32767 >> 23 === 0. Actual: ' + (32767 >> 23)); -} - - -if (65535 >> 23 !== 0) { - $ERROR('#753: 65535 >> 23 === 0. Actual: ' + (65535 >> 23)); -} - - -if (131071 >> 23 !== 0) { - $ERROR('#754: 131071 >> 23 === 0. Actual: ' + (131071 >> 23)); -} - - -if (262143 >> 23 !== 0) { - $ERROR('#755: 262143 >> 23 === 0. Actual: ' + (262143 >> 23)); -} - - -if (524287 >> 23 !== 0) { - $ERROR('#756: 524287 >> 23 === 0. Actual: ' + (524287 >> 23)); -} - - -if (1048575 >> 23 !== 0) { - $ERROR('#757: 1048575 >> 23 === 0. Actual: ' + (1048575 >> 23)); -} - - -if (2097151 >> 23 !== 0) { - $ERROR('#758: 2097151 >> 23 === 0. Actual: ' + (2097151 >> 23)); -} - - -if (4194303 >> 23 !== 0) { - $ERROR('#759: 4194303 >> 23 === 0. Actual: ' + (4194303 >> 23)); -} - - -if (8388607 >> 23 !== 0) { - $ERROR('#760: 8388607 >> 23 === 0. Actual: ' + (8388607 >> 23)); -} - - -if (16777215 >> 23 !== 1) { - $ERROR('#761: 16777215 >> 23 === 1. Actual: ' + (16777215 >> 23)); -} - - -if (33554431 >> 23 !== 3) { - $ERROR('#762: 33554431 >> 23 === 3. Actual: ' + (33554431 >> 23)); -} - - -if (67108863 >> 23 !== 7) { - $ERROR('#763: 67108863 >> 23 === 7. Actual: ' + (67108863 >> 23)); -} - - -if (134217727 >> 23 !== 15) { - $ERROR('#764: 134217727 >> 23 === 15. Actual: ' + (134217727 >> 23)); -} - - -if (268435455 >> 23 !== 31) { - $ERROR('#765: 268435455 >> 23 === 31. Actual: ' + (268435455 >> 23)); -} - - -if (536870911 >> 23 !== 63) { - $ERROR('#766: 536870911 >> 23 === 63. Actual: ' + (536870911 >> 23)); -} - - -if (1073741823 >> 23 !== 127) { - $ERROR('#767: 1073741823 >> 23 === 127. Actual: ' + (1073741823 >> 23)); -} - - -if (2147483647 >> 23 !== 255) { - $ERROR('#768: 2147483647 >> 23 === 255. Actual: ' + (2147483647 >> 23)); -} - - -if (0 >> 24 !== 0) { - $ERROR('#769: 0 >> 24 === 0. Actual: ' + (0 >> 24)); -} - - -if (1 >> 24 !== 0) { - $ERROR('#770: 1 >> 24 === 0. Actual: ' + (1 >> 24)); -} - - -if (3 >> 24 !== 0) { - $ERROR('#771: 3 >> 24 === 0. Actual: ' + (3 >> 24)); -} - - -if (7 >> 24 !== 0) { - $ERROR('#772: 7 >> 24 === 0. Actual: ' + (7 >> 24)); -} - - -if (15 >> 24 !== 0) { - $ERROR('#773: 15 >> 24 === 0. Actual: ' + (15 >> 24)); -} - - -if (31 >> 24 !== 0) { - $ERROR('#774: 31 >> 24 === 0. Actual: ' + (31 >> 24)); -} - - -if (63 >> 24 !== 0) { - $ERROR('#775: 63 >> 24 === 0. Actual: ' + (63 >> 24)); -} - - -if (127 >> 24 !== 0) { - $ERROR('#776: 127 >> 24 === 0. Actual: ' + (127 >> 24)); -} - - -if (255 >> 24 !== 0) { - $ERROR('#777: 255 >> 24 === 0. Actual: ' + (255 >> 24)); -} - - -if (511 >> 24 !== 0) { - $ERROR('#778: 511 >> 24 === 0. Actual: ' + (511 >> 24)); -} - - -if (1023 >> 24 !== 0) { - $ERROR('#779: 1023 >> 24 === 0. Actual: ' + (1023 >> 24)); -} - - -if (2047 >> 24 !== 0) { - $ERROR('#780: 2047 >> 24 === 0. Actual: ' + (2047 >> 24)); -} - - -if (4095 >> 24 !== 0) { - $ERROR('#781: 4095 >> 24 === 0. Actual: ' + (4095 >> 24)); -} - - -if (8191 >> 24 !== 0) { - $ERROR('#782: 8191 >> 24 === 0. Actual: ' + (8191 >> 24)); -} - - -if (16383 >> 24 !== 0) { - $ERROR('#783: 16383 >> 24 === 0. Actual: ' + (16383 >> 24)); -} - - -if (32767 >> 24 !== 0) { - $ERROR('#784: 32767 >> 24 === 0. Actual: ' + (32767 >> 24)); -} - - -if (65535 >> 24 !== 0) { - $ERROR('#785: 65535 >> 24 === 0. Actual: ' + (65535 >> 24)); -} - - -if (131071 >> 24 !== 0) { - $ERROR('#786: 131071 >> 24 === 0. Actual: ' + (131071 >> 24)); -} - - -if (262143 >> 24 !== 0) { - $ERROR('#787: 262143 >> 24 === 0. Actual: ' + (262143 >> 24)); -} - - -if (524287 >> 24 !== 0) { - $ERROR('#788: 524287 >> 24 === 0. Actual: ' + (524287 >> 24)); -} - - -if (1048575 >> 24 !== 0) { - $ERROR('#789: 1048575 >> 24 === 0. Actual: ' + (1048575 >> 24)); -} - - -if (2097151 >> 24 !== 0) { - $ERROR('#790: 2097151 >> 24 === 0. Actual: ' + (2097151 >> 24)); -} - - -if (4194303 >> 24 !== 0) { - $ERROR('#791: 4194303 >> 24 === 0. Actual: ' + (4194303 >> 24)); -} - - -if (8388607 >> 24 !== 0) { - $ERROR('#792: 8388607 >> 24 === 0. Actual: ' + (8388607 >> 24)); -} - - -if (16777215 >> 24 !== 0) { - $ERROR('#793: 16777215 >> 24 === 0. Actual: ' + (16777215 >> 24)); -} - - -if (33554431 >> 24 !== 1) { - $ERROR('#794: 33554431 >> 24 === 1. Actual: ' + (33554431 >> 24)); -} - - -if (67108863 >> 24 !== 3) { - $ERROR('#795: 67108863 >> 24 === 3. Actual: ' + (67108863 >> 24)); -} - - -if (134217727 >> 24 !== 7) { - $ERROR('#796: 134217727 >> 24 === 7. Actual: ' + (134217727 >> 24)); -} - - -if (268435455 >> 24 !== 15) { - $ERROR('#797: 268435455 >> 24 === 15. Actual: ' + (268435455 >> 24)); -} - - -if (536870911 >> 24 !== 31) { - $ERROR('#798: 536870911 >> 24 === 31. Actual: ' + (536870911 >> 24)); -} - - -if (1073741823 >> 24 !== 63) { - $ERROR('#799: 1073741823 >> 24 === 63. Actual: ' + (1073741823 >> 24)); -} - - -if (2147483647 >> 24 !== 127) { - $ERROR('#800: 2147483647 >> 24 === 127. Actual: ' + (2147483647 >> 24)); -} - - -if (0 >> 25 !== 0) { - $ERROR('#801: 0 >> 25 === 0. Actual: ' + (0 >> 25)); -} - - -if (1 >> 25 !== 0) { - $ERROR('#802: 1 >> 25 === 0. Actual: ' + (1 >> 25)); -} - - -if (3 >> 25 !== 0) { - $ERROR('#803: 3 >> 25 === 0. Actual: ' + (3 >> 25)); -} - - -if (7 >> 25 !== 0) { - $ERROR('#804: 7 >> 25 === 0. Actual: ' + (7 >> 25)); -} - - -if (15 >> 25 !== 0) { - $ERROR('#805: 15 >> 25 === 0. Actual: ' + (15 >> 25)); -} - - -if (31 >> 25 !== 0) { - $ERROR('#806: 31 >> 25 === 0. Actual: ' + (31 >> 25)); -} - - -if (63 >> 25 !== 0) { - $ERROR('#807: 63 >> 25 === 0. Actual: ' + (63 >> 25)); -} - - -if (127 >> 25 !== 0) { - $ERROR('#808: 127 >> 25 === 0. Actual: ' + (127 >> 25)); -} - - -if (255 >> 25 !== 0) { - $ERROR('#809: 255 >> 25 === 0. Actual: ' + (255 >> 25)); -} - - -if (511 >> 25 !== 0) { - $ERROR('#810: 511 >> 25 === 0. Actual: ' + (511 >> 25)); -} - - -if (1023 >> 25 !== 0) { - $ERROR('#811: 1023 >> 25 === 0. Actual: ' + (1023 >> 25)); -} - - -if (2047 >> 25 !== 0) { - $ERROR('#812: 2047 >> 25 === 0. Actual: ' + (2047 >> 25)); -} - - -if (4095 >> 25 !== 0) { - $ERROR('#813: 4095 >> 25 === 0. Actual: ' + (4095 >> 25)); -} - - -if (8191 >> 25 !== 0) { - $ERROR('#814: 8191 >> 25 === 0. Actual: ' + (8191 >> 25)); -} - - -if (16383 >> 25 !== 0) { - $ERROR('#815: 16383 >> 25 === 0. Actual: ' + (16383 >> 25)); -} - - -if (32767 >> 25 !== 0) { - $ERROR('#816: 32767 >> 25 === 0. Actual: ' + (32767 >> 25)); -} - - -if (65535 >> 25 !== 0) { - $ERROR('#817: 65535 >> 25 === 0. Actual: ' + (65535 >> 25)); -} - - -if (131071 >> 25 !== 0) { - $ERROR('#818: 131071 >> 25 === 0. Actual: ' + (131071 >> 25)); -} - - -if (262143 >> 25 !== 0) { - $ERROR('#819: 262143 >> 25 === 0. Actual: ' + (262143 >> 25)); -} - - -if (524287 >> 25 !== 0) { - $ERROR('#820: 524287 >> 25 === 0. Actual: ' + (524287 >> 25)); -} - - -if (1048575 >> 25 !== 0) { - $ERROR('#821: 1048575 >> 25 === 0. Actual: ' + (1048575 >> 25)); -} - - -if (2097151 >> 25 !== 0) { - $ERROR('#822: 2097151 >> 25 === 0. Actual: ' + (2097151 >> 25)); -} - - -if (4194303 >> 25 !== 0) { - $ERROR('#823: 4194303 >> 25 === 0. Actual: ' + (4194303 >> 25)); -} - - -if (8388607 >> 25 !== 0) { - $ERROR('#824: 8388607 >> 25 === 0. Actual: ' + (8388607 >> 25)); -} - - -if (16777215 >> 25 !== 0) { - $ERROR('#825: 16777215 >> 25 === 0. Actual: ' + (16777215 >> 25)); -} - - -if (33554431 >> 25 !== 0) { - $ERROR('#826: 33554431 >> 25 === 0. Actual: ' + (33554431 >> 25)); -} - - -if (67108863 >> 25 !== 1) { - $ERROR('#827: 67108863 >> 25 === 1. Actual: ' + (67108863 >> 25)); -} - - -if (134217727 >> 25 !== 3) { - $ERROR('#828: 134217727 >> 25 === 3. Actual: ' + (134217727 >> 25)); -} - - -if (268435455 >> 25 !== 7) { - $ERROR('#829: 268435455 >> 25 === 7. Actual: ' + (268435455 >> 25)); -} - - -if (536870911 >> 25 !== 15) { - $ERROR('#830: 536870911 >> 25 === 15. Actual: ' + (536870911 >> 25)); -} - - -if (1073741823 >> 25 !== 31) { - $ERROR('#831: 1073741823 >> 25 === 31. Actual: ' + (1073741823 >> 25)); -} - - -if (2147483647 >> 25 !== 63) { - $ERROR('#832: 2147483647 >> 25 === 63. Actual: ' + (2147483647 >> 25)); -} - - -if (0 >> 26 !== 0) { - $ERROR('#833: 0 >> 26 === 0. Actual: ' + (0 >> 26)); -} - - -if (1 >> 26 !== 0) { - $ERROR('#834: 1 >> 26 === 0. Actual: ' + (1 >> 26)); -} - - -if (3 >> 26 !== 0) { - $ERROR('#835: 3 >> 26 === 0. Actual: ' + (3 >> 26)); -} - - -if (7 >> 26 !== 0) { - $ERROR('#836: 7 >> 26 === 0. Actual: ' + (7 >> 26)); -} - - -if (15 >> 26 !== 0) { - $ERROR('#837: 15 >> 26 === 0. Actual: ' + (15 >> 26)); -} - - -if (31 >> 26 !== 0) { - $ERROR('#838: 31 >> 26 === 0. Actual: ' + (31 >> 26)); -} - - -if (63 >> 26 !== 0) { - $ERROR('#839: 63 >> 26 === 0. Actual: ' + (63 >> 26)); -} - - -if (127 >> 26 !== 0) { - $ERROR('#840: 127 >> 26 === 0. Actual: ' + (127 >> 26)); -} - - -if (255 >> 26 !== 0) { - $ERROR('#841: 255 >> 26 === 0. Actual: ' + (255 >> 26)); -} - - -if (511 >> 26 !== 0) { - $ERROR('#842: 511 >> 26 === 0. Actual: ' + (511 >> 26)); -} - - -if (1023 >> 26 !== 0) { - $ERROR('#843: 1023 >> 26 === 0. Actual: ' + (1023 >> 26)); -} - - -if (2047 >> 26 !== 0) { - $ERROR('#844: 2047 >> 26 === 0. Actual: ' + (2047 >> 26)); -} - - -if (4095 >> 26 !== 0) { - $ERROR('#845: 4095 >> 26 === 0. Actual: ' + (4095 >> 26)); -} - - -if (8191 >> 26 !== 0) { - $ERROR('#846: 8191 >> 26 === 0. Actual: ' + (8191 >> 26)); -} - - -if (16383 >> 26 !== 0) { - $ERROR('#847: 16383 >> 26 === 0. Actual: ' + (16383 >> 26)); -} - - -if (32767 >> 26 !== 0) { - $ERROR('#848: 32767 >> 26 === 0. Actual: ' + (32767 >> 26)); -} - - -if (65535 >> 26 !== 0) { - $ERROR('#849: 65535 >> 26 === 0. Actual: ' + (65535 >> 26)); -} - - -if (131071 >> 26 !== 0) { - $ERROR('#850: 131071 >> 26 === 0. Actual: ' + (131071 >> 26)); -} - - -if (262143 >> 26 !== 0) { - $ERROR('#851: 262143 >> 26 === 0. Actual: ' + (262143 >> 26)); -} - - -if (524287 >> 26 !== 0) { - $ERROR('#852: 524287 >> 26 === 0. Actual: ' + (524287 >> 26)); -} - - -if (1048575 >> 26 !== 0) { - $ERROR('#853: 1048575 >> 26 === 0. Actual: ' + (1048575 >> 26)); -} - - -if (2097151 >> 26 !== 0) { - $ERROR('#854: 2097151 >> 26 === 0. Actual: ' + (2097151 >> 26)); -} - - -if (4194303 >> 26 !== 0) { - $ERROR('#855: 4194303 >> 26 === 0. Actual: ' + (4194303 >> 26)); -} - - -if (8388607 >> 26 !== 0) { - $ERROR('#856: 8388607 >> 26 === 0. Actual: ' + (8388607 >> 26)); -} - - -if (16777215 >> 26 !== 0) { - $ERROR('#857: 16777215 >> 26 === 0. Actual: ' + (16777215 >> 26)); -} - - -if (33554431 >> 26 !== 0) { - $ERROR('#858: 33554431 >> 26 === 0. Actual: ' + (33554431 >> 26)); -} - - -if (67108863 >> 26 !== 0) { - $ERROR('#859: 67108863 >> 26 === 0. Actual: ' + (67108863 >> 26)); -} - - -if (134217727 >> 26 !== 1) { - $ERROR('#860: 134217727 >> 26 === 1. Actual: ' + (134217727 >> 26)); -} - - -if (268435455 >> 26 !== 3) { - $ERROR('#861: 268435455 >> 26 === 3. Actual: ' + (268435455 >> 26)); -} - - -if (536870911 >> 26 !== 7) { - $ERROR('#862: 536870911 >> 26 === 7. Actual: ' + (536870911 >> 26)); -} - - -if (1073741823 >> 26 !== 15) { - $ERROR('#863: 1073741823 >> 26 === 15. Actual: ' + (1073741823 >> 26)); -} - - -if (2147483647 >> 26 !== 31) { - $ERROR('#864: 2147483647 >> 26 === 31. Actual: ' + (2147483647 >> 26)); -} - - -if (0 >> 27 !== 0) { - $ERROR('#865: 0 >> 27 === 0. Actual: ' + (0 >> 27)); -} - - -if (1 >> 27 !== 0) { - $ERROR('#866: 1 >> 27 === 0. Actual: ' + (1 >> 27)); -} - - -if (3 >> 27 !== 0) { - $ERROR('#867: 3 >> 27 === 0. Actual: ' + (3 >> 27)); -} - - -if (7 >> 27 !== 0) { - $ERROR('#868: 7 >> 27 === 0. Actual: ' + (7 >> 27)); -} - - -if (15 >> 27 !== 0) { - $ERROR('#869: 15 >> 27 === 0. Actual: ' + (15 >> 27)); -} - - -if (31 >> 27 !== 0) { - $ERROR('#870: 31 >> 27 === 0. Actual: ' + (31 >> 27)); -} - - -if (63 >> 27 !== 0) { - $ERROR('#871: 63 >> 27 === 0. Actual: ' + (63 >> 27)); -} - - -if (127 >> 27 !== 0) { - $ERROR('#872: 127 >> 27 === 0. Actual: ' + (127 >> 27)); -} - - -if (255 >> 27 !== 0) { - $ERROR('#873: 255 >> 27 === 0. Actual: ' + (255 >> 27)); -} - - -if (511 >> 27 !== 0) { - $ERROR('#874: 511 >> 27 === 0. Actual: ' + (511 >> 27)); -} - - -if (1023 >> 27 !== 0) { - $ERROR('#875: 1023 >> 27 === 0. Actual: ' + (1023 >> 27)); -} - - -if (2047 >> 27 !== 0) { - $ERROR('#876: 2047 >> 27 === 0. Actual: ' + (2047 >> 27)); -} - - -if (4095 >> 27 !== 0) { - $ERROR('#877: 4095 >> 27 === 0. Actual: ' + (4095 >> 27)); -} - - -if (8191 >> 27 !== 0) { - $ERROR('#878: 8191 >> 27 === 0. Actual: ' + (8191 >> 27)); -} - - -if (16383 >> 27 !== 0) { - $ERROR('#879: 16383 >> 27 === 0. Actual: ' + (16383 >> 27)); -} - - -if (32767 >> 27 !== 0) { - $ERROR('#880: 32767 >> 27 === 0. Actual: ' + (32767 >> 27)); -} - - -if (65535 >> 27 !== 0) { - $ERROR('#881: 65535 >> 27 === 0. Actual: ' + (65535 >> 27)); -} - - -if (131071 >> 27 !== 0) { - $ERROR('#882: 131071 >> 27 === 0. Actual: ' + (131071 >> 27)); -} - - -if (262143 >> 27 !== 0) { - $ERROR('#883: 262143 >> 27 === 0. Actual: ' + (262143 >> 27)); -} - - -if (524287 >> 27 !== 0) { - $ERROR('#884: 524287 >> 27 === 0. Actual: ' + (524287 >> 27)); -} - - -if (1048575 >> 27 !== 0) { - $ERROR('#885: 1048575 >> 27 === 0. Actual: ' + (1048575 >> 27)); -} - - -if (2097151 >> 27 !== 0) { - $ERROR('#886: 2097151 >> 27 === 0. Actual: ' + (2097151 >> 27)); -} - - -if (4194303 >> 27 !== 0) { - $ERROR('#887: 4194303 >> 27 === 0. Actual: ' + (4194303 >> 27)); -} - - -if (8388607 >> 27 !== 0) { - $ERROR('#888: 8388607 >> 27 === 0. Actual: ' + (8388607 >> 27)); -} - - -if (16777215 >> 27 !== 0) { - $ERROR('#889: 16777215 >> 27 === 0. Actual: ' + (16777215 >> 27)); -} - - -if (33554431 >> 27 !== 0) { - $ERROR('#890: 33554431 >> 27 === 0. Actual: ' + (33554431 >> 27)); -} - - -if (67108863 >> 27 !== 0) { - $ERROR('#891: 67108863 >> 27 === 0. Actual: ' + (67108863 >> 27)); -} - - -if (134217727 >> 27 !== 0) { - $ERROR('#892: 134217727 >> 27 === 0. Actual: ' + (134217727 >> 27)); -} - - -if (268435455 >> 27 !== 1) { - $ERROR('#893: 268435455 >> 27 === 1. Actual: ' + (268435455 >> 27)); -} - - -if (536870911 >> 27 !== 3) { - $ERROR('#894: 536870911 >> 27 === 3. Actual: ' + (536870911 >> 27)); -} - - -if (1073741823 >> 27 !== 7) { - $ERROR('#895: 1073741823 >> 27 === 7. Actual: ' + (1073741823 >> 27)); -} - - -if (2147483647 >> 27 !== 15) { - $ERROR('#896: 2147483647 >> 27 === 15. Actual: ' + (2147483647 >> 27)); -} - - -if (0 >> 28 !== 0) { - $ERROR('#897: 0 >> 28 === 0. Actual: ' + (0 >> 28)); -} - - -if (1 >> 28 !== 0) { - $ERROR('#898: 1 >> 28 === 0. Actual: ' + (1 >> 28)); -} - - -if (3 >> 28 !== 0) { - $ERROR('#899: 3 >> 28 === 0. Actual: ' + (3 >> 28)); -} - - -if (7 >> 28 !== 0) { - $ERROR('#900: 7 >> 28 === 0. Actual: ' + (7 >> 28)); -} - - -if (15 >> 28 !== 0) { - $ERROR('#901: 15 >> 28 === 0. Actual: ' + (15 >> 28)); -} - - -if (31 >> 28 !== 0) { - $ERROR('#902: 31 >> 28 === 0. Actual: ' + (31 >> 28)); -} - - -if (63 >> 28 !== 0) { - $ERROR('#903: 63 >> 28 === 0. Actual: ' + (63 >> 28)); -} - - -if (127 >> 28 !== 0) { - $ERROR('#904: 127 >> 28 === 0. Actual: ' + (127 >> 28)); -} - - -if (255 >> 28 !== 0) { - $ERROR('#905: 255 >> 28 === 0. Actual: ' + (255 >> 28)); -} - - -if (511 >> 28 !== 0) { - $ERROR('#906: 511 >> 28 === 0. Actual: ' + (511 >> 28)); -} - - -if (1023 >> 28 !== 0) { - $ERROR('#907: 1023 >> 28 === 0. Actual: ' + (1023 >> 28)); -} - - -if (2047 >> 28 !== 0) { - $ERROR('#908: 2047 >> 28 === 0. Actual: ' + (2047 >> 28)); -} - - -if (4095 >> 28 !== 0) { - $ERROR('#909: 4095 >> 28 === 0. Actual: ' + (4095 >> 28)); -} - - -if (8191 >> 28 !== 0) { - $ERROR('#910: 8191 >> 28 === 0. Actual: ' + (8191 >> 28)); -} - - -if (16383 >> 28 !== 0) { - $ERROR('#911: 16383 >> 28 === 0. Actual: ' + (16383 >> 28)); -} - - -if (32767 >> 28 !== 0) { - $ERROR('#912: 32767 >> 28 === 0. Actual: ' + (32767 >> 28)); -} - - -if (65535 >> 28 !== 0) { - $ERROR('#913: 65535 >> 28 === 0. Actual: ' + (65535 >> 28)); -} - - -if (131071 >> 28 !== 0) { - $ERROR('#914: 131071 >> 28 === 0. Actual: ' + (131071 >> 28)); -} - - -if (262143 >> 28 !== 0) { - $ERROR('#915: 262143 >> 28 === 0. Actual: ' + (262143 >> 28)); -} - - -if (524287 >> 28 !== 0) { - $ERROR('#916: 524287 >> 28 === 0. Actual: ' + (524287 >> 28)); -} - - -if (1048575 >> 28 !== 0) { - $ERROR('#917: 1048575 >> 28 === 0. Actual: ' + (1048575 >> 28)); -} - - -if (2097151 >> 28 !== 0) { - $ERROR('#918: 2097151 >> 28 === 0. Actual: ' + (2097151 >> 28)); -} - - -if (4194303 >> 28 !== 0) { - $ERROR('#919: 4194303 >> 28 === 0. Actual: ' + (4194303 >> 28)); -} - - -if (8388607 >> 28 !== 0) { - $ERROR('#920: 8388607 >> 28 === 0. Actual: ' + (8388607 >> 28)); -} - - -if (16777215 >> 28 !== 0) { - $ERROR('#921: 16777215 >> 28 === 0. Actual: ' + (16777215 >> 28)); -} - - -if (33554431 >> 28 !== 0) { - $ERROR('#922: 33554431 >> 28 === 0. Actual: ' + (33554431 >> 28)); -} - - -if (67108863 >> 28 !== 0) { - $ERROR('#923: 67108863 >> 28 === 0. Actual: ' + (67108863 >> 28)); -} - - -if (134217727 >> 28 !== 0) { - $ERROR('#924: 134217727 >> 28 === 0. Actual: ' + (134217727 >> 28)); -} - - -if (268435455 >> 28 !== 0) { - $ERROR('#925: 268435455 >> 28 === 0. Actual: ' + (268435455 >> 28)); -} - - -if (536870911 >> 28 !== 1) { - $ERROR('#926: 536870911 >> 28 === 1. Actual: ' + (536870911 >> 28)); -} - - -if (1073741823 >> 28 !== 3) { - $ERROR('#927: 1073741823 >> 28 === 3. Actual: ' + (1073741823 >> 28)); -} - - -if (2147483647 >> 28 !== 7) { - $ERROR('#928: 2147483647 >> 28 === 7. Actual: ' + (2147483647 >> 28)); -} - - -if (0 >> 29 !== 0) { - $ERROR('#929: 0 >> 29 === 0. Actual: ' + (0 >> 29)); -} - - -if (1 >> 29 !== 0) { - $ERROR('#930: 1 >> 29 === 0. Actual: ' + (1 >> 29)); -} - - -if (3 >> 29 !== 0) { - $ERROR('#931: 3 >> 29 === 0. Actual: ' + (3 >> 29)); -} - - -if (7 >> 29 !== 0) { - $ERROR('#932: 7 >> 29 === 0. Actual: ' + (7 >> 29)); -} - - -if (15 >> 29 !== 0) { - $ERROR('#933: 15 >> 29 === 0. Actual: ' + (15 >> 29)); -} - - -if (31 >> 29 !== 0) { - $ERROR('#934: 31 >> 29 === 0. Actual: ' + (31 >> 29)); -} - - -if (63 >> 29 !== 0) { - $ERROR('#935: 63 >> 29 === 0. Actual: ' + (63 >> 29)); -} - - -if (127 >> 29 !== 0) { - $ERROR('#936: 127 >> 29 === 0. Actual: ' + (127 >> 29)); -} - - -if (255 >> 29 !== 0) { - $ERROR('#937: 255 >> 29 === 0. Actual: ' + (255 >> 29)); -} - - -if (511 >> 29 !== 0) { - $ERROR('#938: 511 >> 29 === 0. Actual: ' + (511 >> 29)); -} - - -if (1023 >> 29 !== 0) { - $ERROR('#939: 1023 >> 29 === 0. Actual: ' + (1023 >> 29)); -} - - -if (2047 >> 29 !== 0) { - $ERROR('#940: 2047 >> 29 === 0. Actual: ' + (2047 >> 29)); -} - - -if (4095 >> 29 !== 0) { - $ERROR('#941: 4095 >> 29 === 0. Actual: ' + (4095 >> 29)); -} - - -if (8191 >> 29 !== 0) { - $ERROR('#942: 8191 >> 29 === 0. Actual: ' + (8191 >> 29)); -} - - -if (16383 >> 29 !== 0) { - $ERROR('#943: 16383 >> 29 === 0. Actual: ' + (16383 >> 29)); -} - - -if (32767 >> 29 !== 0) { - $ERROR('#944: 32767 >> 29 === 0. Actual: ' + (32767 >> 29)); -} - - -if (65535 >> 29 !== 0) { - $ERROR('#945: 65535 >> 29 === 0. Actual: ' + (65535 >> 29)); -} - - -if (131071 >> 29 !== 0) { - $ERROR('#946: 131071 >> 29 === 0. Actual: ' + (131071 >> 29)); -} - - -if (262143 >> 29 !== 0) { - $ERROR('#947: 262143 >> 29 === 0. Actual: ' + (262143 >> 29)); -} - - -if (524287 >> 29 !== 0) { - $ERROR('#948: 524287 >> 29 === 0. Actual: ' + (524287 >> 29)); -} - - -if (1048575 >> 29 !== 0) { - $ERROR('#949: 1048575 >> 29 === 0. Actual: ' + (1048575 >> 29)); -} - - -if (2097151 >> 29 !== 0) { - $ERROR('#950: 2097151 >> 29 === 0. Actual: ' + (2097151 >> 29)); -} - - -if (4194303 >> 29 !== 0) { - $ERROR('#951: 4194303 >> 29 === 0. Actual: ' + (4194303 >> 29)); -} - - -if (8388607 >> 29 !== 0) { - $ERROR('#952: 8388607 >> 29 === 0. Actual: ' + (8388607 >> 29)); -} - - -if (16777215 >> 29 !== 0) { - $ERROR('#953: 16777215 >> 29 === 0. Actual: ' + (16777215 >> 29)); -} - - -if (33554431 >> 29 !== 0) { - $ERROR('#954: 33554431 >> 29 === 0. Actual: ' + (33554431 >> 29)); -} - - -if (67108863 >> 29 !== 0) { - $ERROR('#955: 67108863 >> 29 === 0. Actual: ' + (67108863 >> 29)); -} - - -if (134217727 >> 29 !== 0) { - $ERROR('#956: 134217727 >> 29 === 0. Actual: ' + (134217727 >> 29)); -} - - -if (268435455 >> 29 !== 0) { - $ERROR('#957: 268435455 >> 29 === 0. Actual: ' + (268435455 >> 29)); -} - - -if (536870911 >> 29 !== 0) { - $ERROR('#958: 536870911 >> 29 === 0. Actual: ' + (536870911 >> 29)); -} - - -if (1073741823 >> 29 !== 1) { - $ERROR('#959: 1073741823 >> 29 === 1. Actual: ' + (1073741823 >> 29)); -} - - -if (2147483647 >> 29 !== 3) { - $ERROR('#960: 2147483647 >> 29 === 3. Actual: ' + (2147483647 >> 29)); -} - - -if (0 >> 30 !== 0) { - $ERROR('#961: 0 >> 30 === 0. Actual: ' + (0 >> 30)); -} - - -if (1 >> 30 !== 0) { - $ERROR('#962: 1 >> 30 === 0. Actual: ' + (1 >> 30)); -} - - -if (3 >> 30 !== 0) { - $ERROR('#963: 3 >> 30 === 0. Actual: ' + (3 >> 30)); -} - - -if (7 >> 30 !== 0) { - $ERROR('#964: 7 >> 30 === 0. Actual: ' + (7 >> 30)); -} - - -if (15 >> 30 !== 0) { - $ERROR('#965: 15 >> 30 === 0. Actual: ' + (15 >> 30)); -} - - -if (31 >> 30 !== 0) { - $ERROR('#966: 31 >> 30 === 0. Actual: ' + (31 >> 30)); -} - - -if (63 >> 30 !== 0) { - $ERROR('#967: 63 >> 30 === 0. Actual: ' + (63 >> 30)); -} - - -if (127 >> 30 !== 0) { - $ERROR('#968: 127 >> 30 === 0. Actual: ' + (127 >> 30)); -} - - -if (255 >> 30 !== 0) { - $ERROR('#969: 255 >> 30 === 0. Actual: ' + (255 >> 30)); -} - - -if (511 >> 30 !== 0) { - $ERROR('#970: 511 >> 30 === 0. Actual: ' + (511 >> 30)); -} - - -if (1023 >> 30 !== 0) { - $ERROR('#971: 1023 >> 30 === 0. Actual: ' + (1023 >> 30)); -} - - -if (2047 >> 30 !== 0) { - $ERROR('#972: 2047 >> 30 === 0. Actual: ' + (2047 >> 30)); -} - - -if (4095 >> 30 !== 0) { - $ERROR('#973: 4095 >> 30 === 0. Actual: ' + (4095 >> 30)); -} - - -if (8191 >> 30 !== 0) { - $ERROR('#974: 8191 >> 30 === 0. Actual: ' + (8191 >> 30)); -} - - -if (16383 >> 30 !== 0) { - $ERROR('#975: 16383 >> 30 === 0. Actual: ' + (16383 >> 30)); -} - - -if (32767 >> 30 !== 0) { - $ERROR('#976: 32767 >> 30 === 0. Actual: ' + (32767 >> 30)); -} - - -if (65535 >> 30 !== 0) { - $ERROR('#977: 65535 >> 30 === 0. Actual: ' + (65535 >> 30)); -} - - -if (131071 >> 30 !== 0) { - $ERROR('#978: 131071 >> 30 === 0. Actual: ' + (131071 >> 30)); -} - - -if (262143 >> 30 !== 0) { - $ERROR('#979: 262143 >> 30 === 0. Actual: ' + (262143 >> 30)); -} - - -if (524287 >> 30 !== 0) { - $ERROR('#980: 524287 >> 30 === 0. Actual: ' + (524287 >> 30)); -} - - -if (1048575 >> 30 !== 0) { - $ERROR('#981: 1048575 >> 30 === 0. Actual: ' + (1048575 >> 30)); -} - - -if (2097151 >> 30 !== 0) { - $ERROR('#982: 2097151 >> 30 === 0. Actual: ' + (2097151 >> 30)); -} - - -if (4194303 >> 30 !== 0) { - $ERROR('#983: 4194303 >> 30 === 0. Actual: ' + (4194303 >> 30)); -} - - -if (8388607 >> 30 !== 0) { - $ERROR('#984: 8388607 >> 30 === 0. Actual: ' + (8388607 >> 30)); -} - - -if (16777215 >> 30 !== 0) { - $ERROR('#985: 16777215 >> 30 === 0. Actual: ' + (16777215 >> 30)); -} - - -if (33554431 >> 30 !== 0) { - $ERROR('#986: 33554431 >> 30 === 0. Actual: ' + (33554431 >> 30)); -} - - -if (67108863 >> 30 !== 0) { - $ERROR('#987: 67108863 >> 30 === 0. Actual: ' + (67108863 >> 30)); -} - - -if (134217727 >> 30 !== 0) { - $ERROR('#988: 134217727 >> 30 === 0. Actual: ' + (134217727 >> 30)); -} - - -if (268435455 >> 30 !== 0) { - $ERROR('#989: 268435455 >> 30 === 0. Actual: ' + (268435455 >> 30)); -} - - -if (536870911 >> 30 !== 0) { - $ERROR('#990: 536870911 >> 30 === 0. Actual: ' + (536870911 >> 30)); -} - - -if (1073741823 >> 30 !== 0) { - $ERROR('#991: 1073741823 >> 30 === 0. Actual: ' + (1073741823 >> 30)); -} - - -if (2147483647 >> 30 !== 1) { - $ERROR('#992: 2147483647 >> 30 === 1. Actual: ' + (2147483647 >> 30)); -} - - -if (0 >> 31 !== 0) { - $ERROR('#993: 0 >> 31 === 0. Actual: ' + (0 >> 31)); -} - - -if (1 >> 31 !== 0) { - $ERROR('#994: 1 >> 31 === 0. Actual: ' + (1 >> 31)); -} - - -if (3 >> 31 !== 0) { - $ERROR('#995: 3 >> 31 === 0. Actual: ' + (3 >> 31)); -} - - -if (7 >> 31 !== 0) { - $ERROR('#996: 7 >> 31 === 0. Actual: ' + (7 >> 31)); -} - - -if (15 >> 31 !== 0) { - $ERROR('#997: 15 >> 31 === 0. Actual: ' + (15 >> 31)); -} - - -if (31 >> 31 !== 0) { - $ERROR('#998: 31 >> 31 === 0. Actual: ' + (31 >> 31)); -} - - -if (63 >> 31 !== 0) { - $ERROR('#999: 63 >> 31 === 0. Actual: ' + (63 >> 31)); -} - - -if (127 >> 31 !== 0) { - $ERROR('#1000: 127 >> 31 === 0. Actual: ' + (127 >> 31)); -} - - -if (255 >> 31 !== 0) { - $ERROR('#1001: 255 >> 31 === 0. Actual: ' + (255 >> 31)); -} - - -if (511 >> 31 !== 0) { - $ERROR('#1002: 511 >> 31 === 0. Actual: ' + (511 >> 31)); -} - - -if (1023 >> 31 !== 0) { - $ERROR('#1003: 1023 >> 31 === 0. Actual: ' + (1023 >> 31)); -} - - -if (2047 >> 31 !== 0) { - $ERROR('#1004: 2047 >> 31 === 0. Actual: ' + (2047 >> 31)); -} - - -if (4095 >> 31 !== 0) { - $ERROR('#1005: 4095 >> 31 === 0. Actual: ' + (4095 >> 31)); -} - - -if (8191 >> 31 !== 0) { - $ERROR('#1006: 8191 >> 31 === 0. Actual: ' + (8191 >> 31)); -} - - -if (16383 >> 31 !== 0) { - $ERROR('#1007: 16383 >> 31 === 0. Actual: ' + (16383 >> 31)); -} - - -if (32767 >> 31 !== 0) { - $ERROR('#1008: 32767 >> 31 === 0. Actual: ' + (32767 >> 31)); -} - - -if (65535 >> 31 !== 0) { - $ERROR('#1009: 65535 >> 31 === 0. Actual: ' + (65535 >> 31)); -} - - -if (131071 >> 31 !== 0) { - $ERROR('#1010: 131071 >> 31 === 0. Actual: ' + (131071 >> 31)); -} - - -if (262143 >> 31 !== 0) { - $ERROR('#1011: 262143 >> 31 === 0. Actual: ' + (262143 >> 31)); -} - - -if (524287 >> 31 !== 0) { - $ERROR('#1012: 524287 >> 31 === 0. Actual: ' + (524287 >> 31)); -} - - -if (1048575 >> 31 !== 0) { - $ERROR('#1013: 1048575 >> 31 === 0. Actual: ' + (1048575 >> 31)); -} - - -if (2097151 >> 31 !== 0) { - $ERROR('#1014: 2097151 >> 31 === 0. Actual: ' + (2097151 >> 31)); -} - - -if (4194303 >> 31 !== 0) { - $ERROR('#1015: 4194303 >> 31 === 0. Actual: ' + (4194303 >> 31)); -} - - -if (8388607 >> 31 !== 0) { - $ERROR('#1016: 8388607 >> 31 === 0. Actual: ' + (8388607 >> 31)); -} - - -if (16777215 >> 31 !== 0) { - $ERROR('#1017: 16777215 >> 31 === 0. Actual: ' + (16777215 >> 31)); -} - - -if (33554431 >> 31 !== 0) { - $ERROR('#1018: 33554431 >> 31 === 0. Actual: ' + (33554431 >> 31)); -} - - -if (67108863 >> 31 !== 0) { - $ERROR('#1019: 67108863 >> 31 === 0. Actual: ' + (67108863 >> 31)); -} - - -if (134217727 >> 31 !== 0) { - $ERROR('#1020: 134217727 >> 31 === 0. Actual: ' + (134217727 >> 31)); -} - - -if (268435455 >> 31 !== 0) { - $ERROR('#1021: 268435455 >> 31 === 0. Actual: ' + (268435455 >> 31)); -} - - -if (536870911 >> 31 !== 0) { - $ERROR('#1022: 536870911 >> 31 === 0. Actual: ' + (536870911 >> 31)); -} - - -if (1073741823 >> 31 !== 0) { - $ERROR('#1023: 1073741823 >> 31 === 0. Actual: ' + (1073741823 >> 31)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A5.1_T1.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A5.1_T1.js deleted file mode 100644 index f3e7ce045..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A5.1_T1.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.2_A5.1_T1; - * @section: 11.7.2, 9.5; - * @assertion: Operator x >> y uses ToInt32(ShiftExpression); - * @description: Checking boundary points; - */ - -//CHECK#1 -if (2147483648.1 >> 0 !== -2147483648) { - $ERROR('#1: 2147483648.1 >> 0 === -2147483648. Actual: ' + (2147483648.1 >> 0)); -} - -//CHECK#2 -if (4294967296.1 >> 0 !== 0) { - $ERROR('#2: 4294967296.1 >> 0 === 0. Actual: ' + (4294967296.1 >> 0)); -} - -//CHECK#3 -if (6442450944.1 >> 0 !== -2147483648) { - $ERROR('#3: 6442450944.1 >> 0 === -2147483648. Actual: ' + (6442450944.1 >> 0)); -} - -//CHECK#4 -if (4294967295.1 >> 0 !== -1) { - $ERROR('#4: 4294967295.1 >> 0 === -1. Actual: ' + (4294967295.1 >> 0)); -} - -//CHECK#5 -if (6442450943.1 >> 0 !== 2147483647) { - $ERROR('#5: 6442450943.1 >> 0 === 2147483647. Actual: ' + (6442450943.1 >> 0)); -} - -//CHECK#6 -if (-2147483649.1 >> 0 !== 2147483647) { - $ERROR('#6: -2147483649.1 >> 0 === 2147483647. Actual: ' + (-2147483649.1 >> 0)); -} - -//CHECK#7 -if (-4294967297.1 >> 0 !== -1) { - $ERROR('#7: -4294967297.1 >> 0 === -1. Actual: ' + (-4294967297.1 >> 0)); -} - -//CHECK#8 -if (-6442450945.1 >> 0 !== 2147483647) { - $ERROR('#8: -6442450945.1 >> 0 === 2147483647. Actual: ' + (-6442450945.1 >> 0)); -} - -//CHECK#9 -if (-4294967296.1 >> 0 !== 0) { - $ERROR('#9: -4294967296.1 >> 0 === 0 . Actual: ' + (-4294967296.1 >> 0)); -} - -//CHECK#10 -if (-6442450944.1 >> 0 !== -2147483648) { - $ERROR('#10: -6442450944.1 >> 0 === -2147483648. Actual: ' + (-6442450944.1 >> 0)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A5.2_T1.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A5.2_T1.js deleted file mode 100644 index 3c0d7f991..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.2_The_Sign_Left_shift_Operator/S11.7.2_A5.2_T1.js +++ /dev/null @@ -1,329 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.2_A5.2_T1; - * @section: 11.7.2, 9.5; - * @assertion: Operator x >> y uses ToUint32(AdditiveExpression) & 31; - * @description: Checking distinct points; - */ - -//CHECK#1 -if (2147483647 >> -32.1 !== 2147483647) { - $ERROR('#1: 2147483647 >> -32.1 === 2147483647. Actual: ' + (2147483647 >> -32.1)); -} - -//CHECK#2 -if (2147483647 >> -31.1 !== 1073741823) { - $ERROR('#2: 2147483647 >> -31.1 === 1073741823. Actual: ' + (2147483647 >> -31.1)); -} - -//CHECK#3 -if (2147483647 >> -30.1 !== 536870911) { - $ERROR('#3: 2147483647 >> -30.1 === 536870911. Actual: ' + (2147483647 >> -30.1)); -} - -//CHECK#4 -if (2147483647 >> -29.1 !== 268435455) { - $ERROR('#4: 2147483647 >> -29.1 === 268435455. Actual: ' + (2147483647 >> -29.1)); -} - -//CHECK#5 -if (2147483647 >> -28.1 !== 134217727) { - $ERROR('#5: 2147483647 >> -28.1 === 134217727. Actual: ' + (2147483647 >> -28.1)); -} - -//CHECK#6 -if (2147483647 >> -27.1 !== 67108863) { - $ERROR('#6: 2147483647 >> -27.1 === 67108863. Actual: ' + (2147483647 >> -27.1)); -} - -//CHECK#7 -if (2147483647 >> -26.1 !== 33554431) { - $ERROR('#7: 2147483647 >> -26.1 === 33554431. Actual: ' + (2147483647 >> -26.1)); -} - -//CHECK#8 -if (2147483647 >> -25.1 !== 16777215) { - $ERROR('#8: 2147483647 >> -25.1 === 16777215. Actual: ' + (2147483647 >> -25.1)); -} - -//CHECK#9 -if (2147483647 >> -24.1 !== 8388607) { - $ERROR('#9: 2147483647 >> -24.1 === 8388607. Actual: ' + (2147483647 >> -24.1)); -} - -//CHECK#10 -if (2147483647 >> -23.1 !== 4194303) { - $ERROR('#10: 2147483647 >> -23.1 === 4194303. Actual: ' + (2147483647 >> -23.1)); -} - -//CHECK#11 -if (2147483647 >> -22.1 !== 2097151) { - $ERROR('#11: 2147483647 >> -22.1 === 2097151. Actual: ' + (2147483647 >> -22.1)); -} - -//CHECK#12 -if (2147483647 >> -21.1 !== 1048575) { - $ERROR('#12: 2147483647 >> -21.1 === 1048575. Actual: ' + (2147483647 >> -21.1)); -} - -//CHECK#13 -if (2147483647 >> -20.1 !== 524287) { - $ERROR('#13: 2147483647 >> -20.1 === 524287. Actual: ' + (2147483647 >> -20.1)); -} - -//CHECK#14 -if (2147483647 >> -19.1 !== 262143) { - $ERROR('#14: 2147483647 >> -19.1 === 262143. Actual: ' + (2147483647 >> -19.1)); -} - -//CHECK#15 -if (2147483647 >> -18.1 !== 131071) { - $ERROR('#15: 2147483647 >> -18.1 === 131071. Actual: ' + (2147483647 >> -18.1)); -} - -//CHECK#16 -if (2147483647 >> -17.1 !== 65535) { - $ERROR('#16: 2147483647 >> -17.1 === 65535. Actual: ' + (2147483647 >> -17.1)); -} - -//CHECK#17 -if (2147483647 >> -16.1 !== 32767) { - $ERROR('#17: 2147483647 >> -16.1 === 32767. Actual: ' + (2147483647 >> -16.1)); -} - -//CHECK#18 -if (2147483647 >> -15.1 !== 16383) { - $ERROR('#18: 2147483647 >> -15.1 === 16383. Actual: ' + (2147483647 >> -15.1)); -} - -//CHECK#19 -if (2147483647 >> -14.1 !== 8191) { - $ERROR('#19: 2147483647 >> -14.1 === 8191. Actual: ' + (2147483647 >> -14.1)); -} - -//CHECK#20 -if (2147483647 >> -13.1 !== 4095) { - $ERROR('#20: 2147483647 >> -13.1 === 4095. Actual: ' + (2147483647 >> -13.1)); -} - -//CHECK#21 -if (2147483647 >> -12.1 !== 2047) { - $ERROR('#21: 2147483647 >> -12.1 === 2047. Actual: ' + (2147483647 >> -12.1)); -} - -//CHECK#22 -if (2147483647 >> -11.1 !== 1023) { - $ERROR('#22: 2147483647 >> -11.1 === 1023. Actual: ' + (2147483647 >> -11.1)); -} - -//CHECK#23 -if (2147483647 >> -10.1 !== 511) { - $ERROR('#23: 2147483647 >> -10.1 === 511. Actual: ' + (2147483647 >> -10.1)); -} - -//CHECK#24 -if (2147483647 >> -9.1 !== 255) { - $ERROR('#24: 2147483647 >> -9.1 === 255. Actual: ' + (2147483647 >> -9.1)); -} - -//CHECK#25 -if (2147483647 >> -8.1 !== 127) { - $ERROR('#25: 2147483647 >> -8.1 === 127. Actual: ' + (2147483647 >> -8.1)); -} - -//CHECK#26 -if (2147483647 >> -7.1 !== 63) { - $ERROR('#26: 2147483647 >> -7.1 === 63. Actual: ' + (2147483647 >> -7.1)); -} - -//CHECK#27 -if (2147483647 >> -6.1 !== 31) { - $ERROR('#27: 2147483647 >> -6.1 === 31. Actual: ' + (2147483647 >> -6.1)); -} - -//CHECK#28 -if (2147483647 >> -5.1 !== 15) { - $ERROR('#28: 2147483647 >> -5.1 === 15. Actual: ' + (2147483647 >> -5.1)); -} - -//CHECK#29 -if (2147483647 >> -4.1 !== 7) { - $ERROR('#29: 2147483647 >> -4.1 === 7. Actual: ' + (2147483647 >> -4.1)); -} - -//CHECK#30 -if (2147483647 >> -3.1 !== 3) { - $ERROR('#30: 2147483647 >> -3.1 === 3. Actual: ' + (2147483647 >> -3.1)); -} - -//CHECK#31 -if (2147483647 >> -2.1 !== 1) { - $ERROR('#31: 2147483647 >> -2.1 === 1. Actual: ' + (2147483647 >> -2.1)); -} - -//CHECK#32 -if (2147483647 >> -1.1 !== 0) { - $ERROR('#32: 2147483647 >> -1.1 === 0. Actual: ' + (2147483647 >> -1.1)); -} - -//CHECK#33 -if (2147483647 >> 32.1 !== 2147483647) { - $ERROR('#33: 2147483647 >> 32.1 === 2147483647. Actual: ' + (2147483647 >> 32.1)); -} - -//CHECK#34 -if (2147483647 >> 33.1 !== 1073741823) { - $ERROR('#34: 2147483647 >> 33.1 === 1073741823. Actual: ' + (2147483647 >> 33.1)); -} - -//CHECK#35 -if (2147483647 >> 34.1 !== 536870911) { - $ERROR('#35: 2147483647 >> 34.1 === 536870911. Actual: ' + (2147483647 >> 34.1)); -} - -//CHECK#36 -if (2147483647 >> 35.1 !== 268435455) { - $ERROR('#36: 2147483647 >> 35.1 === 268435455. Actual: ' + (2147483647 >> 35.1)); -} - -//CHECK#37 -if (2147483647 >> 36.1 !== 134217727) { - $ERROR('#37: 2147483647 >> 36.1 === 134217727. Actual: ' + (2147483647 >> 36.1)); -} - -//CHECK#38 -if (2147483647 >> 37.1 !== 67108863) { - $ERROR('#38: 2147483647 >> 37.1 === 67108863. Actual: ' + (2147483647 >> 37.1)); -} - -//CHECK#39 -if (2147483647 >> 38.1 !== 33554431) { - $ERROR('#39: 2147483647 >> 38.1 === 33554431. Actual: ' + (2147483647 >> 38.1)); -} - -//CHECK#40 -if (2147483647 >> 39.1 !== 16777215) { - $ERROR('#40: 2147483647 >> 39.1 === 16777215. Actual: ' + (2147483647 >> 39.1)); -} - -//CHECK#41 -if (2147483647 >> 40.1 !== 8388607) { - $ERROR('#41: 2147483647 >> 40.1 === 8388607. Actual: ' + (2147483647 >> 40.1)); -} - -//CHECK#42 -if (2147483647 >> 41.1 !== 4194303) { - $ERROR('#42: 2147483647 >> 41.1 === 4194303. Actual: ' + (2147483647 >> 41.1)); -} - -//CHECK#43 -if (2147483647 >> 42.1 !== 2097151) { - $ERROR('#43: 2147483647 >> 42.1 === 2097151. Actual: ' + (2147483647 >> 42.1)); -} - -//CHECK#44 -if (2147483647 >> 43.1 !== 1048575) { - $ERROR('#44: 2147483647 >> 43.1 === 1048575. Actual: ' + (2147483647 >> 43.1)); -} - -//CHECK#45 -if (2147483647 >> 44.1 !== 524287) { - $ERROR('#45: 2147483647 >> 44.1 === 524287. Actual: ' + (2147483647 >> 44.1)); -} - -//CHECK#46 -if (2147483647 >> 45.1 !== 262143) { - $ERROR('#46: 2147483647 >> 45.1 === 262143. Actual: ' + (2147483647 >> 45.1)); -} - -//CHECK#47 -if (2147483647 >> 46.1 !== 131071) { - $ERROR('#47: 2147483647 >> 46.1 === 131071. Actual: ' + (2147483647 >> 46.1)); -} - -//CHECK#48 -if (2147483647 >> 47.1 !== 65535) { - $ERROR('#48: 2147483647 >> 47.1 === 65535. Actual: ' + (2147483647 >> 47.1)); -} - -//CHECK#49 -if (2147483647 >> 48.1 !== 32767) { - $ERROR('#49: 2147483647 >> 48.1 === 32767. Actual: ' + (2147483647 >> 48.1)); -} - -//CHECK#50 -if (2147483647 >> 49.1 !== 16383) { - $ERROR('#50: 2147483647 >> 49.1 === 16383. Actual: ' + (2147483647 >> 49.1)); -} - -//CHECK#51 -if (2147483647 >> 50.1 !== 8191) { - $ERROR('#51: 2147483647 >> 50.1 === 8191. Actual: ' + (2147483647 >> 50.1)); -} - -//CHECK#52 -if (2147483647 >> 51.1 !== 4095) { - $ERROR('#52: 2147483647 >> 51.1 === 4095. Actual: ' + (2147483647 >> 51.1)); -} - -//CHECK#53 -if (2147483647 >> 52.1 !== 2047) { - $ERROR('#53: 2147483647 >> 52.1 === 2047. Actual: ' + (2147483647 >> 52.1)); -} - -//CHECK#54 -if (2147483647 >> 53.1 !== 1023) { - $ERROR('#54: 2147483647 >> 53.1 === 1023. Actual: ' + (2147483647 >> 53.1)); -} - -//CHECK#55 -if (2147483647 >> 54.1 !== 511) { - $ERROR('#55: 2147483647 >> 54.1 === 511. Actual: ' + (2147483647 >> 54.1)); -} - -//CHECK#56 -if (2147483647 >> 55.1 !== 255) { - $ERROR('#56: 2147483647 >> 55.1 === 255. Actual: ' + (2147483647 >> 55.1)); -} - -//CHECK#57 -if (2147483647 >> 56.1 !== 127) { - $ERROR('#57: 2147483647 >> 56.1 === 127. Actual: ' + (2147483647 >> 56.1)); -} - -//CHECK#58 -if (2147483647 >> 57.1 !== 63) { - $ERROR('#58: 2147483647 >> 57.1 === 63. Actual: ' + (2147483647 >> 57.1)); -} - -//CHECK#59 -if (2147483647 >> 58.1 !== 31) { - $ERROR('#59: 2147483647 >> 58.1 === 31. Actual: ' + (2147483647 >> 58.1)); -} - -//CHECK#60 -if (2147483647 >> 59.1 !== 15) { - $ERROR('#60: 2147483647 >> 59.1 === 15. Actual: ' + (2147483647 >> 59.1)); -} - -//CHECK#61 -if (2147483647 >> 60.1 !== 7) { - $ERROR('#61: 2147483647 >> 60.1 === 7. Actual: ' + (2147483647 >> 60.1)); -} - -//CHECK#62 -if (2147483647 >> 61.1 !== 3) { - $ERROR('#62: 2147483647 >> 61.1 === 3. Actual: ' + (2147483647 >> 61.1)); -} - -//CHECK#63 -if (2147483647 >> 62.1 !== 1) { - $ERROR('#63: 2147483647 >> 62.1 === 1. Actual: ' + (2147483647 >> 62.1)); -} - -//CHECK#64 -if (2147483647 >> 63.1 !== 0) { - $ERROR('#64: 2147483647 >> 63.1 === 0. Actual: ' + (2147483647 >> 63.1)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A1.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A1.js deleted file mode 100644 index f59aa722f..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A1.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.7.3_A1; -* @section: 11.7.3, 7.2, 7.3; -* @assertion: White Space and Line Terminator between ShiftExpression and ">>>" or between ">>>" and AdditiveExpression are allowed; -* @description: Checking by using eval -*/ - -//CHECK#1 -if (eval("-4\u0009>>>\u00091") !== 2147483646) { - $ERROR('#1: -4\\u0009>>>\\u00091 === 2147483646'); -} - -//CHECK#2 -if (eval("-4\u000B>>>\u000B1") !== 2147483646) { - $ERROR('#2: -4\\u000B>>>\\u000B1 === 2147483646'); -} - -//CHECK#3 -if (eval("-4\u000C>>>\u000C1") !== 2147483646) { - $ERROR('#3: -4\\u000C>>>\\u000C1 === 2147483646'); -} - -//CHECK#4 -if (eval("-4\u0020>>>\u00201") !== 2147483646) { - $ERROR('#4: -4\\u0020>>>\\u00201 === 2147483646'); -} - -//CHECK#5 -if (eval("-4\u00A0>>>\u00A01") !== 2147483646) { - $ERROR('#5: -4\\u00A0>>>\\u00A01 === 2147483646'); -} - -//CHECK#6 -if (eval("-4\u000A>>>\u000A1") !== 2147483646) { - $ERROR('#6: -4\\u000A>>>\\u000A1 === 2147483646'); -} - -//CHECK#7 -if (eval("-4\u000D>>>\u000D1") !== 2147483646) { - $ERROR('#7: -4\\u000D>>>\\u000D1 === 2147483646'); -} - -//CHECK#8 -if (eval("-4\u2028>>>\u20281") !== 2147483646) { - $ERROR('#8: -4\\u2028>>>\\u20281 === 2147483646'); -} - -//CHECK#9 -if (eval("-4\u2029>>>\u20291") !== 2147483646) { - $ERROR('#9: -4\\u2029>>>\\u20291 === 2147483646'); -} - -//CHECK#10 -if (eval("-4\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029>>>\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20291") !== 2147483646) { - $ERROR('#10: -4\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029>>>\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20291 === 2147483646'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A2.1_T1.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A2.1_T1.js deleted file mode 100644 index 075e1a282..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A2.1_T1.js +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.7.3_A2.1_T1; -* @section: 11.7.3; -* @assertion: Operator x >>> y uses GetValue; -* @description: Either Type is not Reference or GetBase is not null; -*/ - -//CHECK#1 -if (-4 >>> 1 !== 2147483646) { - $ERROR('#1: -4 >>> 1 === 2147483646. Actual: ' + (-4 >>> 1)); -} - -//CHECK#2 -var x = -4; -if (x >>> 1 !== 2147483646) { - $ERROR('#2: var x = -4; x >>> 1 === 2147483646. Actual: ' + (x >>> 1)); -} - -//CHECK#3 -var y = 1; -if (-4 >>> y !== 2147483646) { - $ERROR('#3: var y = 1; -4 >>> y === 2147483646. Actual: ' + (-4 >>> y)); -} - -//CHECK#4 -var x = -4; -var y = 1; -if (x >>> y !== 2147483646) { - $ERROR('#4: var x = -4; var y = 1; x >>> y === 2147483646. Actual: ' + (x >>> y)); -} - -//CHECK#5 -var objectx = new Object(); -var objecty = new Object(); -objectx.prop = -4; -objecty.prop = 1; -if (objectx.prop >>> objecty.prop !== 2147483646) { - $ERROR('#5: var objectx = new Object(); var objecty = new Object(); objectx.prop = -4; objecty.prop = 1; objectx.prop >>> objecty.prop === 2147483646. Actual: ' + (objectx.prop >>> objecty.prop)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A2.1_T2.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A2.1_T2.js deleted file mode 100644 index b1354c32d..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A2.1_T2.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.3_A2.1_T2; - * @section: 11.7.3; - * @assertion: Operator x >>> y uses GetValue; - * @description: If GetBase(x) is null, throw ReferenceError; -*/ - -//CHECK#1 -try { - x >>> 1; - $ERROR('#1.1: x >>> 1 throw ReferenceError. Actual: ' + (x >>> 1)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: x >>> 1 throw ReferenceError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A2.1_T3.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A2.1_T3.js deleted file mode 100644 index 09f29ba3b..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A2.1_T3.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.3_A2.1_T3; - * @section: 11.7.3; - * @assertion: Operator x >>> y uses GetValue; - * @description: If GetBase(y) is null, throw ReferenceError; -*/ - -//CHECK#1 -try { - 1 >>> y; - $ERROR('#1.1: 1 >>> y throw ReferenceError. Actual: ' + (1 >>> y)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: 1 >>> y throw ReferenceError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A2.2_T1.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A2.2_T1.js deleted file mode 100644 index c88f41662..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A2.2_T1.js +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.3_A2.2_T1; - * @section: 11.7.3, 8.6.2.6; - * @assertion: Operator x >>> y uses [[Default Value]]; - * @description: If Type(value) is Object, evaluate ToPrimitive(value, Number); - */ - -//CHECK#1 -if ({valueOf: function() {return -4}} >>> 1 !== 2147483646) { - $ERROR('#1: {valueOf: function() {return -4}} >>> 1 === 2147483646. Actual: ' + ({valueOf: function() {return -4}} >>> 1)); -} - -//CHECK#2 -if ({valueOf: function() {return -4}, toString: function() {return 0}} >>> 1 !== 2147483646) { - $ERROR('#2: {valueOf: function() {return -4}, toString: function() {return 0}} >>> 1 === 2147483646. Actual: ' + ({valueOf: function() {return -4}, toString: function() {return 0}} >>> 1)); -} - -//CHECK#3 -if ({valueOf: function() {return -4}, toString: function() {return {}}} >>> 1 !== 2147483646) { - $ERROR('#3: {valueOf: function() {return -4}, toString: function() {return {}}} >>> 1 === 2147483646. Actual: ' + ({valueOf: function() {return -4}, toString: function() {return {}}} >>> 1)); -} - -//CHECK#4 -try { - if ({valueOf: function() {return -4}, toString: function() {throw "error"}} >>> 1 !== 2147483646) { - $ERROR('#4.1: {valueOf: function() {return -4}, toString: function() {throw "error"}} >>> 1 === 2147483646. Actual: ' + ({valueOf: function() {return -4}, toString: function() {throw "error"}} >>> 1)); - } -} -catch (e) { - if (e === "error") { - $ERROR('#4.2: {valueOf: function() {return -4}, toString: function() {throw "error"}} >>> 1 not throw "error"'); - } else { - $ERROR('#4.3: {valueOf: function() {return -4}, toString: function() {throw "error"}} >>> 1 not throw Error. Actual: ' + (e)); - } -} - -//CHECK#5 -if (-4 >>> {toString: function() {return 1}} !== 2147483646) { - $ERROR('#5: -4 >>> {toString: function() {return 1}} === 2147483646. Actual: ' + (-4 >>> {toString: function() {return 1}})); -} - -//CHECK#6 -if (-4 >>> {valueOf: function() {return {}}, toString: function() {return 1}} !== 2147483646) { - $ERROR('#6: -4 >>> {valueOf: function() {return {}}, toString: function() {return 1}} === 2147483646. Actual: ' + (-4 >>> {valueOf: function() {return {}}, toString: function() {return 1}})); -} - -//CHECK#7 -try { - -4 >>> {valueOf: function() {throw "error"}, toString: function() {return 1}}; - $ERROR('#7.1: -4 >>> {valueOf: function() {throw "error"}, toString: function() {return 1}} throw "error". Actual: ' + (-4 >>> {valueOf: function() {throw "error"}, toString: function() {return 1}})); -} -catch (e) { - if (e !== "error") { - $ERROR('#7.2: -4 >>> {valueOf: function() {throw "error"}, toString: function() {return 1}} throw "error". Actual: ' + (e)); - } -} - -//CHECK#8 -try { - -4 >>> {valueOf: function() {return {}}, toString: function() {return {}}}; - $ERROR('#8.1: -4 >>> {valueOf: function() {return {}}, toString: function() {return {}}} throw TypeError. Actual: ' + (e)); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#8.2: -4 >>> {valueOf: function() {return {}}, toString: function() {return {}}} throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A2.3_T1.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A2.3_T1.js deleted file mode 100644 index b60590eac..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A2.3_T1.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.3_A2.3_T1; - * @section: 11.7.3; - * @assertion: ToNumber(first expression) is called first, and then ToNumber(second expression); - * @description: Checking with "throw"; -*/ - -//CHECK#1 -var x = { valueOf: function () { throw "x"; } }; -var y = { valueOf: function () { throw "y"; } }; -try { - x >>> y; - $ERROR('#1.1: var x = { valueOf: function () { throw "x"; } }; var y = { valueOf: function () { throw "y"; } }; x >>> y throw "x". Actual: ' + (x >>> y)); -} catch (e) { - if (e === "y") { - $ERROR('#1.2: ToNumber(first expression) is called first, and then ToNumber(second expression)'); - } else { - if (e !== "x") { - $ERROR('#1.3: var x = { valueOf: function () { throw "x"; } }; var y = { valueOf: function () { throw "y"; } }; x >>> y throw "x". Actual: ' + (e)); - } - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A2.4_T1.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A2.4_T1.js deleted file mode 100644 index 4014efe38..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A2.4_T1.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.3_A2.4_T1; - * @section: 11.7.3; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with "="; -*/ - -//CHECK#1 -var x = 0; -if ((x = 1) >>> x !== 0) { - $ERROR('#1: var x = 0; (x = 1) >>> x === 0. Actual: ' + ((x = 1) >>> x)); -} - -//CHECK#2 -var x = -4; -if (x >>> (x = 1) !== 2147483646) { - $ERROR('#2: var x = -4; x >>> (x = 1) === 2147483646. Actual: ' + (x >>> (x = 1))); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A2.4_T2.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A2.4_T2.js deleted file mode 100644 index bd3f75524..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A2.4_T2.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.3_A2.4_T2; - * @section: 11.7.3; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with "throw"; -*/ - -//CHECK#1 -var x = function () { throw "x"; }; -var y = function () { throw "y"; }; -try { - x() >>> y(); - $ERROR('#1.1: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() >>> y() throw "x". Actual: ' + (x() >>> y())); -} catch (e) { - if (e === "y") { - $ERROR('#1.2: First expression is evaluated first, and then second expression'); - } else { - if (e !== "x") { - $ERROR('#1.3: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() >>> y() throw "x". Actual: ' + (e)); - } - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A2.4_T3.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A2.4_T3.js deleted file mode 100644 index 400103ea7..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A2.4_T3.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.3_A2.4_T3; - * @section: 11.7.3; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with undeclarated variables; -*/ - -//CHECK#1 -try { - x >>> (x = 1); - $ERROR('#1.1: x >>> (x = 1) throw ReferenceError. Actual: ' + (x >>> (x = 1))); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: x >>> (x = 1) throw ReferenceError. Actual: ' + (e)); - } -} - -//CHECK#2 -if ((y = 1) >>> y !== 0) { - $ERROR('#2: (y = 1) >>> y === 0. Actual: ' + ((y = 1) >>> y)); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A3_T1.1.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A3_T1.1.js deleted file mode 100644 index a785bf055..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A3_T1.1.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.3_A3_T1.1; - * @section: 11.7.3; - * @assertion: Operator x >>> y returns ToNumber(x) >>> ToNumber(y); - * @description: Type(x) and Type(y) vary between primitive boolean and Boolean object; - */ - -//CHECK#1 -if (true >>> true !== 0) { - $ERROR('#1: true >>> true === 0. Actual: ' + (true >>> true)); -} - -//CHECK#2 -if (new Boolean(true) >>> true !== 0) { - $ERROR('#2: new Boolean(true) >>> true === 0. Actual: ' + (new Boolean(true) >>> true)); -} - -//CHECK#3 -if (true >>> new Boolean(true) !== 0) { - $ERROR('#3: true >>> new Boolean(true) === 0. Actual: ' + (true >>> new Boolean(true))); -} - -//CHECK#4 -if (new Boolean(true) >>> new Boolean(true) !== 0) { - $ERROR('#4: new Boolean(true) >>> new Boolean(true) === 0. Actual: ' + (new Boolean(true) >>> new Boolean(true))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A3_T1.2.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A3_T1.2.js deleted file mode 100644 index 77022415a..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A3_T1.2.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.3_A3_T1.2; - * @section: 11.7.3; - * @assertion: Operator x >>> y returns ToNumber(x) >>> ToNumber(y); - * @description: Type(x) and Type(y) vary between primitive number and Number object; -*/ - -//CHECK#1 -if (1 >>> 1 !== 0) { - $ERROR('#1: 1 >>> 1 === 0. Actual: ' + (1 >>> 1)); -} - -//CHECK#2 -if (new Number(1) >>> 1 !== 0) { - $ERROR('#2: new Number(1) >>> 1 === 0. Actual: ' + (new Number(1) >>> 1)); -} - -//CHECK#3 -if (1 >>> new Number(1) !== 0) { - $ERROR('#3: 1 >>> new Number(1) === 0. Actual: ' + (1 >>> new Number(1))); -} - -//CHECK#4 -if (new Number(1) >>> new Number(1) !== 0) { - $ERROR('#4: new Number(1) >>> new Number(1) === 0. Actual: ' + (new Number(1) >>> new Number(1))); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A3_T1.3.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A3_T1.3.js deleted file mode 100644 index feba982d9..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A3_T1.3.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.3_A3_T1.3; - * @section: 11.7.3; - * @assertion: Operator x >>> y returns ToNumber(x) >>> ToNumber(y); - * @description: Type(x) and Type(y) vary between primitive string and String object; -*/ - -//CHECK#1 -if ("1" >>> "1" !== 0) { - $ERROR('#1: "1" >>> "1" === 0. Actual: ' + ("1" >>> "1")); -} - -//CHECK#2 -if (new String("1") >>> "1" !== 0) { - $ERROR('#2: new String("1") >>> "1" === 0. Actual: ' + (new String("1") >>> "1")); -} - -//CHECK#3 -if ("1" >>> new String("1") !== 0) { - $ERROR('#3: "1" >>> new String("1") === 0. Actual: ' + ("1" >>> new String("1"))); -} - -//CHECK#4 -if (new String("1") >>> new String("1") !== 0) { - $ERROR('#4: new String("1") >>> new String("1") === 0. Actual: ' + (new String("1") >>> new String("1"))); -} - -//CHECK#5 -if ("x" >>> "1" !== 0) { - $ERROR('#5: "x" >>> "1" === 0. Actual: ' + ("x" >>> "1")); -} - -//CHECK#6 -if ("1" >>> "x" !== 1) { - $ERROR('#6: "1" >>> "x" === 1. Actual: ' + ("1" >>> "x")); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A3_T1.4.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A3_T1.4.js deleted file mode 100644 index 8e3ceacfb..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A3_T1.4.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.3_A3_T1.4; - * @section: 11.7.3; - * @assertion: Operator x >>> y returns ToNumber(x) >>> ToNumber(y); - * @description: Type(x) and Type(y) vary between Null and Undefined; - */ - -//CHECK#1 -if (null >>> undefined !== 0) { - $ERROR('#1: null >>> undefined === 0. Actual: ' + (null >>> undefined)); -} - -//CHECK#2 -if (undefined >>> null !== 0) { - $ERROR('#2: undefined >>> null === 0. Actual: ' + (undefined >>> null)); -} - -//CHECK#3 -if (undefined >>> undefined !== 0) { - $ERROR('#3: undefined >>> undefined === 0. Actual: ' + (undefined >>> undefined)); -} - -//CHECK#4 -if (null >>> null !== 0) { - $ERROR('#4: null >>> null === 0. Actual: ' + (null >>> null)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A3_T1.5.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A3_T1.5.js deleted file mode 100644 index 8780eab28..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A3_T1.5.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.3_A3_T1.5; - * @section: 11.7.3; - * @assertion: Operator x >>> y returns ToNumber(x) >>> ToNumber(y); - * @description: Type(x) and Type(y) vary between Object object and Function object; - */ - -//CHECK#1 -if (({} >>> function(){return 1}) !== 0) { - $ERROR('#1: ({} >>> function(){return 1}) === 0. Actual: ' + (({} >>> function(){return 1}))); -} - -//CHECK#2 -if ((function(){return 1} >>> {}) !== 0) { - $ERROR('#2: (function(){return 1} >>> {}) === 0. Actual: ' + ((function(){return 1} >>> {}))); -} - -//CHECK#3 -if ((function(){return 1} >>> function(){return 1}) !== 0) { - $ERROR('#3: (function(){return 1} >>> function(){return 1}) === 0. Actual: ' + ((function(){return 1} >>> function(){return 1}))); -} - -//CHECK#4 -if (({} >>> {}) !== 0) { - $ERROR('#4: ({} >>> {}) === 0. Actual: ' + (({} >>> {}))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A3_T2.1.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A3_T2.1.js deleted file mode 100644 index 5666891af..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A3_T2.1.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.3_A3_T2.1; - * @section: 11.7.3; - * @assertion: Operator x >>> y returns ToNumber(x) >>> ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Boolean (primitive and object); - */ - -//CHECK#1 -if (true >>> 1 !== 0) { - $ERROR('#1: true >>> 1 === 0. Actual: ' + (true >>> 1)); -} - -//CHECK#2 -if (1 >>> true !== 0) { - $ERROR('#2: 1 >>> true === 0. Actual: ' + (1 >>> true)); -} - -//CHECK#3 -if (new Boolean(true) >>> 1 !== 0) { - $ERROR('#3: new Boolean(true) >>> 1 === 0. Actual: ' + (new Boolean(true) >>> 1)); -} - -//CHECK#4 -if (1 >>> new Boolean(true) !== 0) { - $ERROR('#4: 1 >>> new Boolean(true) === 0. Actual: ' + (1 >>> new Boolean(true))); -} - -//CHECK#5 -if (true >>> new Number(1) !== 0) { - $ERROR('#5: true >>> new Number(1) === 0. Actual: ' + (true >>> new Number(1))); -} - -//CHECK#6 -if (new Number(1) >>> true !== 0) { - $ERROR('#6: new Number(1) >>> true === 0. Actual: ' + (new Number(1) >>> true)); -} - -//CHECK#7 -if (new Boolean(true) >>> new Number(1) !== 0) { - $ERROR('#7: new Boolean(true) >>> new Number(1) === 0. Actual: ' + (new Boolean(true) >>> new Number(1))); -} - -//CHECK#8 -if (new Number(1) >>> new Boolean(true) !== 0) { - $ERROR('#8: new Number(1) >>> new Boolean(true) === 0. Actual: ' + (new Number(1) >>> new Boolean(true))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A3_T2.2.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A3_T2.2.js deleted file mode 100644 index f678ae1c5..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A3_T2.2.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.3_A3_T2.2; - * @section: 11.7.3; - * @assertion: Operator x >>> y returns ToNumber(x) >>> ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and String (primitive and object); -*/ - -//CHECK#1 -if ("1" >>> 1 !== 0) { - $ERROR('#1: "1" >>> 1 === 0. Actual: ' + ("1" >>> 1)); -} - -//CHECK#2 -if (1 >>> "1" !== 0) { - $ERROR('#2: 1 >>> "1" === 0. Actual: ' + (1 >>> "1")); -} - -//CHECK#3 -if (new String("1") >>> 1 !== 0) { - $ERROR('#3: new String("1") >>> 1 === 0. Actual: ' + (new String("1") >>> 1)); -} - -//CHECK#4 -if (1 >>> new String("1") !== 0) { - $ERROR('#4: 1 >>> new String("1") === 0. Actual: ' + (1 >>> new String("1"))); -} - -//CHECK#5 -if ("1" >>> new Number(1) !== 0) { - $ERROR('#5: "1" >>> new Number(1) === 0. Actual: ' + ("1" >>> new Number(1))); -} - -//CHECK#6 -if (new Number(1) >>> "1" !== 0) { - $ERROR('#6: new Number(1) >>> "1" === 0. Actual: ' + (new Number(1) >>> "1")); -} - -//CHECK#7 -if (new String("1") >>> new Number(1) !== 0) { - $ERROR('#7: new String("1") >>> new Number(1) === 0. Actual: ' + (new String("1") >>> new Number(1))); -} - -//CHECK#8 -if (new Number(1) >>> new String("1") !== 0) { - $ERROR('#8: new Number(1) >>> new String("1") === 0. Actual: ' + (new Number(1) >>> new String("1"))); -} - -//CHECK#9 -if ("x" >>> 1 !== 0) { - $ERROR('#9: "x" >>> 1 === 0. Actual: ' + ("x" >>> 1)); -} - -//CHECK#10 -if (1 >>> "x" !== 1) { - $ERROR('#10: 1 >>> "x" === 1. Actual: ' + (1 >>> "x")); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A3_T2.3.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A3_T2.3.js deleted file mode 100644 index 3feb75745..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A3_T2.3.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.3_A3_T2.3; - * @section: 11.7.3; - * @assertion: Operator x >>> y returns ToNumber(x) >>> ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Null; - */ - -//CHECK#1 -if (1 >>> null !== 1) { - $ERROR('#1: 1 >>> null === 1. Actual: ' + (1 >>> null)); -} - -//CHECK#2 -if (null >>> 1 !== 0) { - $ERROR('#2: null >>> 1 === 0. Actual: ' + (null >>> 1)); -} - -//CHECK#3 -if (new Number(1) >>> null !== 1) { - $ERROR('#3: new Number(1) >>> null === 1. Actual: ' + (new Number(1) >>> null)); -} - -//CHECK#4 -if (null >>> new Number(1) !== 0) { - $ERROR('#4: null >>> new Number(1) === 0. Actual: ' + (null >>> new Number(1))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A3_T2.4.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A3_T2.4.js deleted file mode 100644 index 3dfb4d20e..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A3_T2.4.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.3_A3_T2.4; - * @section: 11.7.3; - * @assertion: Operator x >>> y returns ToNumber(x) >>> ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between Number (primitive or object) and Undefined; - */ - -//CHECK#1 -if (1 >>> undefined !== 1) { - $ERROR('#1: 1 >>> undefined === 1. Actual: ' + (1 >>> undefined)); -} - -//CHECK#2 -if (undefined >>> 1 !== 0) { - $ERROR('#2: undefined >>> 1 === 0. Actual: ' + (undefined >>> 1)); -} - -//CHECK#3 -if (new Number(1) >>> undefined !== 1) { - $ERROR('#3: new Number(1) >>> undefined === 1. Actual: ' + (new Number(1) >>> undefined)); -} - -//CHECK#4 -if (undefined >>> new Number(1) !== 0) { - $ERROR('#4: undefined >>> new Number(1) === 0. Actual: ' + (undefined >>> new Number(1))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A3_T2.5.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A3_T2.5.js deleted file mode 100644 index 662d7711d..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A3_T2.5.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.3_A3_T2.5; - * @section: 11.7.3; - * @assertion: Operator x >>> y returns ToNumber(x) >>> ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between String (primitive or object) and Boolean (primitive and object); -*/ - -//CHECK#1 -if (true >>> "1" !== 0) { - $ERROR('#1: true >>> "1" === 0. Actual: ' + (true >>> "1")); -} - -//CHECK#2 -if ("1" >>> true !== 0) { - $ERROR('#2: "1" >>> true === 0. Actual: ' + ("1" >>> true)); -} - -//CHECK#3 -if (new Boolean(true) >>> "1" !== 0) { - $ERROR('#3: new Boolean(true) >>> "1" === 0. Actual: ' + (new Boolean(true) >>> "1")); -} - -//CHECK#4 -if ("1" >>> new Boolean(true) !== 0) { - $ERROR('#4: "1" >>> new Boolean(true) === 0. Actual: ' + ("1" >>> new Boolean(true))); -} - -//CHECK#5 -if (true >>> new String("1") !== 0) { - $ERROR('#5: true >>> new String("1") === 0. Actual: ' + (true >>> new String("1"))); -} - -//CHECK#6 -if (new String("1") >>> true !== 0) { - $ERROR('#6: new String("1") >>> true === 0. Actual: ' + (new String("1") >>> true)); -} - -//CHECK#7 -if (new Boolean(true) >>> new String("1") !== 0) { - $ERROR('#7: new Boolean(true) >>> new String("1") === 0. Actual: ' + (new Boolean(true) >>> new String("1"))); -} - -//CHECK#8 -if (new String("1") >>> new Boolean(true) !== 0) { - $ERROR('#8: new String("1") >>> new Boolean(true) === 0. Actual: ' + (new String("1") >>> new Boolean(true))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A3_T2.6.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A3_T2.6.js deleted file mode 100644 index 8b57bb11a..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A3_T2.6.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.3_A3_T2.6; - * @section: 11.7.3; - * @assertion: Operator x >>> y returns ToNumber(x) >>> ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between String (primitive or object) and Undefined; - */ - -//CHECK#1 -if ("1" >>> undefined !== 1) { - $ERROR('#1: "1" >>> undefined === 1. Actual: ' + ("1" >>> undefined)); -} - -//CHECK#2 -if (undefined >>> "1" !== 0) { - $ERROR('#2: undefined >>> "1" === 0. Actual: ' + (undefined >>> "1")); -} - -//CHECK#3 -if (new String("1") >>> undefined !== 1) { - $ERROR('#3: new String("1") >>> undefined === 1. Actual: ' + (new String("1") >>> undefined)); -} - -//CHECK#4 -if (undefined >>> new String("1") !== 0) { - $ERROR('#4: undefined >>> new String("1") === 0. Actual: ' + (undefined >>> new String("1"))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A3_T2.7.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A3_T2.7.js deleted file mode 100644 index e63910e1d..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A3_T2.7.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.3_A3_T2.7; - * @section: 11.7.3; - * @assertion: Operator x >>> y returns ToNumber(x) >>> ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between String (primitive or object) and Null; - */ - -//CHECK#1 -if ("1" >>> null !== 1) { - $ERROR('#1: "1" >>> null === 1. Actual: ' + ("1" >>> null)); -} - -//CHECK#2 -if (null >>> "1" !== 0) { - $ERROR('#2: null >>> "1" === 0. Actual: ' + (null >>> "1")); -} - -//CHECK#3 -if (new String("1") >>> null !== 1) { - $ERROR('#3: new String("1") >>> null === 1. Actual: ' + (new String("1") >>> null)); -} - -//CHECK#4 -if (null >>> new String("1") !== 0) { - $ERROR('#4: null >>> new String("1") === 0. Actual: ' + (null >>> new String("1"))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A3_T2.8.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A3_T2.8.js deleted file mode 100644 index 8671cc64c..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A3_T2.8.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.3_A3_T2.8; - * @section: 11.7.3; - * @assertion: Operator x >>> y returns ToNumber(x) >>> ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Undefined; - */ - -//CHECK#1 -if (true >>> undefined !== 1) { - $ERROR('#1: true >>> undefined === 1. Actual: ' + (true >>> undefined)); -} - -//CHECK#2 -if (undefined >>> true !== 0) { - $ERROR('#2: undefined >>> true === 0. Actual: ' + (undefined >>> true)); -} - -//CHECK#3 -if (new Boolean(true) >>> undefined !== 1) { - $ERROR('#3: new Boolean(true) >>> undefined === 1. Actual: ' + (new Boolean(true) >>> undefined)); -} - -//CHECK#4 -if (undefined >>> new Boolean(true) !== 0) { - $ERROR('#4: undefined >>> new Boolean(true) === 0. Actual: ' + (undefined >>> new Boolean(true))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A3_T2.9.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A3_T2.9.js deleted file mode 100644 index c1e7d433d..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A3_T2.9.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.3_A3_T2.9; - * @section: 11.7.3; - * @assertion: Operator x >>> y returns ToNumber(x) >>> ToNumber(y); - * @description: Type(x) is different from Type(y) and both types vary between Boolean (primitive or object) and Null; - */ - -//CHECK#1 -if (true >>> null !== 1) { - $ERROR('#1: true >>> null === 1. Actual: ' + (true >>> null)); -} - -//CHECK#2 -if (null >>> true !== 0) { - $ERROR('#2: null >>> true === 0. Actual: ' + (null >>> true)); -} - -//CHECK#3 -if (new Boolean(true) >>> null !== 1) { - $ERROR('#3: new Boolean(true) >>> null === 1. Actual: ' + (new Boolean(true) >>> null)); -} - -//CHECK#4 -if (null >>> new Boolean(true) !== 0) { - $ERROR('#4: null >>> new Boolean(true) === 0. Actual: ' + (null >>> new Boolean(true))); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A4_T1.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A4_T1.js deleted file mode 100644 index 3cfadb9a5..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A4_T1.js +++ /dev/null @@ -1,2570 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.3_A4_T1; - * @section: 11.7.3; - * @assertion: Check operator x >>> y in distinct points; - * @description: ShiftExpression = 2^n, n = 0...15; - */ - -//CHECK - -if (1 >>> 0 !== 1) { - $ERROR('#1: 1 >>> 0 === 1. Actual: ' + (1 >>> 0)); -} - - -if (2 >>> 0 !== 2) { - $ERROR('#2: 2 >>> 0 === 2. Actual: ' + (2 >>> 0)); -} - - -if (4 >>> 0 !== 4) { - $ERROR('#3: 4 >>> 0 === 4. Actual: ' + (4 >>> 0)); -} - - -if (8 >>> 0 !== 8) { - $ERROR('#4: 8 >>> 0 === 8. Actual: ' + (8 >>> 0)); -} - - -if (16 >>> 0 !== 16) { - $ERROR('#5: 16 >>> 0 === 16. Actual: ' + (16 >>> 0)); -} - - -if (32 >>> 0 !== 32) { - $ERROR('#6: 32 >>> 0 === 32. Actual: ' + (32 >>> 0)); -} - - -if (64 >>> 0 !== 64) { - $ERROR('#7: 64 >>> 0 === 64. Actual: ' + (64 >>> 0)); -} - - -if (128 >>> 0 !== 128) { - $ERROR('#8: 128 >>> 0 === 128. Actual: ' + (128 >>> 0)); -} - - -if (256 >>> 0 !== 256) { - $ERROR('#9: 256 >>> 0 === 256. Actual: ' + (256 >>> 0)); -} - - -if (512 >>> 0 !== 512) { - $ERROR('#10: 512 >>> 0 === 512. Actual: ' + (512 >>> 0)); -} - - -if (1024 >>> 0 !== 1024) { - $ERROR('#11: 1024 >>> 0 === 1024. Actual: ' + (1024 >>> 0)); -} - - -if (2048 >>> 0 !== 2048) { - $ERROR('#12: 2048 >>> 0 === 2048. Actual: ' + (2048 >>> 0)); -} - - -if (4096 >>> 0 !== 4096) { - $ERROR('#13: 4096 >>> 0 === 4096. Actual: ' + (4096 >>> 0)); -} - - -if (8192 >>> 0 !== 8192) { - $ERROR('#14: 8192 >>> 0 === 8192. Actual: ' + (8192 >>> 0)); -} - - -if (16384 >>> 0 !== 16384) { - $ERROR('#15: 16384 >>> 0 === 16384. Actual: ' + (16384 >>> 0)); -} - - -if (32768 >>> 0 !== 32768) { - $ERROR('#16: 32768 >>> 0 === 32768. Actual: ' + (32768 >>> 0)); -} - - -if (65536 >>> 0 !== 65536) { - $ERROR('#17: 65536 >>> 0 === 65536. Actual: ' + (65536 >>> 0)); -} - - -if (131072 >>> 0 !== 131072) { - $ERROR('#18: 131072 >>> 0 === 131072. Actual: ' + (131072 >>> 0)); -} - - -if (262144 >>> 0 !== 262144) { - $ERROR('#19: 262144 >>> 0 === 262144. Actual: ' + (262144 >>> 0)); -} - - -if (524288 >>> 0 !== 524288) { - $ERROR('#20: 524288 >>> 0 === 524288. Actual: ' + (524288 >>> 0)); -} - - -if (1048576 >>> 0 !== 1048576) { - $ERROR('#21: 1048576 >>> 0 === 1048576. Actual: ' + (1048576 >>> 0)); -} - - -if (2097152 >>> 0 !== 2097152) { - $ERROR('#22: 2097152 >>> 0 === 2097152. Actual: ' + (2097152 >>> 0)); -} - - -if (4194304 >>> 0 !== 4194304) { - $ERROR('#23: 4194304 >>> 0 === 4194304. Actual: ' + (4194304 >>> 0)); -} - - -if (8388608 >>> 0 !== 8388608) { - $ERROR('#24: 8388608 >>> 0 === 8388608. Actual: ' + (8388608 >>> 0)); -} - - -if (16777216 >>> 0 !== 16777216) { - $ERROR('#25: 16777216 >>> 0 === 16777216. Actual: ' + (16777216 >>> 0)); -} - - -if (33554432 >>> 0 !== 33554432) { - $ERROR('#26: 33554432 >>> 0 === 33554432. Actual: ' + (33554432 >>> 0)); -} - - -if (67108864 >>> 0 !== 67108864) { - $ERROR('#27: 67108864 >>> 0 === 67108864. Actual: ' + (67108864 >>> 0)); -} - - -if (134217728 >>> 0 !== 134217728) { - $ERROR('#28: 134217728 >>> 0 === 134217728. Actual: ' + (134217728 >>> 0)); -} - - -if (268435456 >>> 0 !== 268435456) { - $ERROR('#29: 268435456 >>> 0 === 268435456. Actual: ' + (268435456 >>> 0)); -} - - -if (536870912 >>> 0 !== 536870912) { - $ERROR('#30: 536870912 >>> 0 === 536870912. Actual: ' + (536870912 >>> 0)); -} - - -if (1073741824 >>> 0 !== 1073741824) { - $ERROR('#31: 1073741824 >>> 0 === 1073741824. Actual: ' + (1073741824 >>> 0)); -} - - -if (2147483648 >>> 0 !== 2147483648) { - $ERROR('#32: 2147483648 >>> 0 === 2147483648. Actual: ' + (2147483648 >>> 0)); -} - - -if (1 >>> 1 !== 0) { - $ERROR('#33: 1 >>> 1 === 0. Actual: ' + (1 >>> 1)); -} - - -if (2 >>> 1 !== 1) { - $ERROR('#34: 2 >>> 1 === 1. Actual: ' + (2 >>> 1)); -} - - -if (4 >>> 1 !== 2) { - $ERROR('#35: 4 >>> 1 === 2. Actual: ' + (4 >>> 1)); -} - - -if (8 >>> 1 !== 4) { - $ERROR('#36: 8 >>> 1 === 4. Actual: ' + (8 >>> 1)); -} - - -if (16 >>> 1 !== 8) { - $ERROR('#37: 16 >>> 1 === 8. Actual: ' + (16 >>> 1)); -} - - -if (32 >>> 1 !== 16) { - $ERROR('#38: 32 >>> 1 === 16. Actual: ' + (32 >>> 1)); -} - - -if (64 >>> 1 !== 32) { - $ERROR('#39: 64 >>> 1 === 32. Actual: ' + (64 >>> 1)); -} - - -if (128 >>> 1 !== 64) { - $ERROR('#40: 128 >>> 1 === 64. Actual: ' + (128 >>> 1)); -} - - -if (256 >>> 1 !== 128) { - $ERROR('#41: 256 >>> 1 === 128. Actual: ' + (256 >>> 1)); -} - - -if (512 >>> 1 !== 256) { - $ERROR('#42: 512 >>> 1 === 256. Actual: ' + (512 >>> 1)); -} - - -if (1024 >>> 1 !== 512) { - $ERROR('#43: 1024 >>> 1 === 512. Actual: ' + (1024 >>> 1)); -} - - -if (2048 >>> 1 !== 1024) { - $ERROR('#44: 2048 >>> 1 === 1024. Actual: ' + (2048 >>> 1)); -} - - -if (4096 >>> 1 !== 2048) { - $ERROR('#45: 4096 >>> 1 === 2048. Actual: ' + (4096 >>> 1)); -} - - -if (8192 >>> 1 !== 4096) { - $ERROR('#46: 8192 >>> 1 === 4096. Actual: ' + (8192 >>> 1)); -} - - -if (16384 >>> 1 !== 8192) { - $ERROR('#47: 16384 >>> 1 === 8192. Actual: ' + (16384 >>> 1)); -} - - -if (32768 >>> 1 !== 16384) { - $ERROR('#48: 32768 >>> 1 === 16384. Actual: ' + (32768 >>> 1)); -} - - -if (65536 >>> 1 !== 32768) { - $ERROR('#49: 65536 >>> 1 === 32768. Actual: ' + (65536 >>> 1)); -} - - -if (131072 >>> 1 !== 65536) { - $ERROR('#50: 131072 >>> 1 === 65536. Actual: ' + (131072 >>> 1)); -} - - -if (262144 >>> 1 !== 131072) { - $ERROR('#51: 262144 >>> 1 === 131072. Actual: ' + (262144 >>> 1)); -} - - -if (524288 >>> 1 !== 262144) { - $ERROR('#52: 524288 >>> 1 === 262144. Actual: ' + (524288 >>> 1)); -} - - -if (1048576 >>> 1 !== 524288) { - $ERROR('#53: 1048576 >>> 1 === 524288. Actual: ' + (1048576 >>> 1)); -} - - -if (2097152 >>> 1 !== 1048576) { - $ERROR('#54: 2097152 >>> 1 === 1048576. Actual: ' + (2097152 >>> 1)); -} - - -if (4194304 >>> 1 !== 2097152) { - $ERROR('#55: 4194304 >>> 1 === 2097152. Actual: ' + (4194304 >>> 1)); -} - - -if (8388608 >>> 1 !== 4194304) { - $ERROR('#56: 8388608 >>> 1 === 4194304. Actual: ' + (8388608 >>> 1)); -} - - -if (16777216 >>> 1 !== 8388608) { - $ERROR('#57: 16777216 >>> 1 === 8388608. Actual: ' + (16777216 >>> 1)); -} - - -if (33554432 >>> 1 !== 16777216) { - $ERROR('#58: 33554432 >>> 1 === 16777216. Actual: ' + (33554432 >>> 1)); -} - - -if (67108864 >>> 1 !== 33554432) { - $ERROR('#59: 67108864 >>> 1 === 33554432. Actual: ' + (67108864 >>> 1)); -} - - -if (134217728 >>> 1 !== 67108864) { - $ERROR('#60: 134217728 >>> 1 === 67108864. Actual: ' + (134217728 >>> 1)); -} - - -if (268435456 >>> 1 !== 134217728) { - $ERROR('#61: 268435456 >>> 1 === 134217728. Actual: ' + (268435456 >>> 1)); -} - - -if (536870912 >>> 1 !== 268435456) { - $ERROR('#62: 536870912 >>> 1 === 268435456. Actual: ' + (536870912 >>> 1)); -} - - -if (1073741824 >>> 1 !== 536870912) { - $ERROR('#63: 1073741824 >>> 1 === 536870912. Actual: ' + (1073741824 >>> 1)); -} - - -if (2147483648 >>> 1 !== 1073741824) { - $ERROR('#64: 2147483648 >>> 1 === 1073741824. Actual: ' + (2147483648 >>> 1)); -} - - -if (1 >>> 2 !== 0) { - $ERROR('#65: 1 >>> 2 === 0. Actual: ' + (1 >>> 2)); -} - - -if (2 >>> 2 !== 0) { - $ERROR('#66: 2 >>> 2 === 0. Actual: ' + (2 >>> 2)); -} - - -if (4 >>> 2 !== 1) { - $ERROR('#67: 4 >>> 2 === 1. Actual: ' + (4 >>> 2)); -} - - -if (8 >>> 2 !== 2) { - $ERROR('#68: 8 >>> 2 === 2. Actual: ' + (8 >>> 2)); -} - - -if (16 >>> 2 !== 4) { - $ERROR('#69: 16 >>> 2 === 4. Actual: ' + (16 >>> 2)); -} - - -if (32 >>> 2 !== 8) { - $ERROR('#70: 32 >>> 2 === 8. Actual: ' + (32 >>> 2)); -} - - -if (64 >>> 2 !== 16) { - $ERROR('#71: 64 >>> 2 === 16. Actual: ' + (64 >>> 2)); -} - - -if (128 >>> 2 !== 32) { - $ERROR('#72: 128 >>> 2 === 32. Actual: ' + (128 >>> 2)); -} - - -if (256 >>> 2 !== 64) { - $ERROR('#73: 256 >>> 2 === 64. Actual: ' + (256 >>> 2)); -} - - -if (512 >>> 2 !== 128) { - $ERROR('#74: 512 >>> 2 === 128. Actual: ' + (512 >>> 2)); -} - - -if (1024 >>> 2 !== 256) { - $ERROR('#75: 1024 >>> 2 === 256. Actual: ' + (1024 >>> 2)); -} - - -if (2048 >>> 2 !== 512) { - $ERROR('#76: 2048 >>> 2 === 512. Actual: ' + (2048 >>> 2)); -} - - -if (4096 >>> 2 !== 1024) { - $ERROR('#77: 4096 >>> 2 === 1024. Actual: ' + (4096 >>> 2)); -} - - -if (8192 >>> 2 !== 2048) { - $ERROR('#78: 8192 >>> 2 === 2048. Actual: ' + (8192 >>> 2)); -} - - -if (16384 >>> 2 !== 4096) { - $ERROR('#79: 16384 >>> 2 === 4096. Actual: ' + (16384 >>> 2)); -} - - -if (32768 >>> 2 !== 8192) { - $ERROR('#80: 32768 >>> 2 === 8192. Actual: ' + (32768 >>> 2)); -} - - -if (65536 >>> 2 !== 16384) { - $ERROR('#81: 65536 >>> 2 === 16384. Actual: ' + (65536 >>> 2)); -} - - -if (131072 >>> 2 !== 32768) { - $ERROR('#82: 131072 >>> 2 === 32768. Actual: ' + (131072 >>> 2)); -} - - -if (262144 >>> 2 !== 65536) { - $ERROR('#83: 262144 >>> 2 === 65536. Actual: ' + (262144 >>> 2)); -} - - -if (524288 >>> 2 !== 131072) { - $ERROR('#84: 524288 >>> 2 === 131072. Actual: ' + (524288 >>> 2)); -} - - -if (1048576 >>> 2 !== 262144) { - $ERROR('#85: 1048576 >>> 2 === 262144. Actual: ' + (1048576 >>> 2)); -} - - -if (2097152 >>> 2 !== 524288) { - $ERROR('#86: 2097152 >>> 2 === 524288. Actual: ' + (2097152 >>> 2)); -} - - -if (4194304 >>> 2 !== 1048576) { - $ERROR('#87: 4194304 >>> 2 === 1048576. Actual: ' + (4194304 >>> 2)); -} - - -if (8388608 >>> 2 !== 2097152) { - $ERROR('#88: 8388608 >>> 2 === 2097152. Actual: ' + (8388608 >>> 2)); -} - - -if (16777216 >>> 2 !== 4194304) { - $ERROR('#89: 16777216 >>> 2 === 4194304. Actual: ' + (16777216 >>> 2)); -} - - -if (33554432 >>> 2 !== 8388608) { - $ERROR('#90: 33554432 >>> 2 === 8388608. Actual: ' + (33554432 >>> 2)); -} - - -if (67108864 >>> 2 !== 16777216) { - $ERROR('#91: 67108864 >>> 2 === 16777216. Actual: ' + (67108864 >>> 2)); -} - - -if (134217728 >>> 2 !== 33554432) { - $ERROR('#92: 134217728 >>> 2 === 33554432. Actual: ' + (134217728 >>> 2)); -} - - -if (268435456 >>> 2 !== 67108864) { - $ERROR('#93: 268435456 >>> 2 === 67108864. Actual: ' + (268435456 >>> 2)); -} - - -if (536870912 >>> 2 !== 134217728) { - $ERROR('#94: 536870912 >>> 2 === 134217728. Actual: ' + (536870912 >>> 2)); -} - - -if (1073741824 >>> 2 !== 268435456) { - $ERROR('#95: 1073741824 >>> 2 === 268435456. Actual: ' + (1073741824 >>> 2)); -} - - -if (2147483648 >>> 2 !== 536870912) { - $ERROR('#96: 2147483648 >>> 2 === 536870912. Actual: ' + (2147483648 >>> 2)); -} - - -if (1 >>> 3 !== 0) { - $ERROR('#97: 1 >>> 3 === 0. Actual: ' + (1 >>> 3)); -} - - -if (2 >>> 3 !== 0) { - $ERROR('#98: 2 >>> 3 === 0. Actual: ' + (2 >>> 3)); -} - - -if (4 >>> 3 !== 0) { - $ERROR('#99: 4 >>> 3 === 0. Actual: ' + (4 >>> 3)); -} - - -if (8 >>> 3 !== 1) { - $ERROR('#100: 8 >>> 3 === 1. Actual: ' + (8 >>> 3)); -} - - -if (16 >>> 3 !== 2) { - $ERROR('#101: 16 >>> 3 === 2. Actual: ' + (16 >>> 3)); -} - - -if (32 >>> 3 !== 4) { - $ERROR('#102: 32 >>> 3 === 4. Actual: ' + (32 >>> 3)); -} - - -if (64 >>> 3 !== 8) { - $ERROR('#103: 64 >>> 3 === 8. Actual: ' + (64 >>> 3)); -} - - -if (128 >>> 3 !== 16) { - $ERROR('#104: 128 >>> 3 === 16. Actual: ' + (128 >>> 3)); -} - - -if (256 >>> 3 !== 32) { - $ERROR('#105: 256 >>> 3 === 32. Actual: ' + (256 >>> 3)); -} - - -if (512 >>> 3 !== 64) { - $ERROR('#106: 512 >>> 3 === 64. Actual: ' + (512 >>> 3)); -} - - -if (1024 >>> 3 !== 128) { - $ERROR('#107: 1024 >>> 3 === 128. Actual: ' + (1024 >>> 3)); -} - - -if (2048 >>> 3 !== 256) { - $ERROR('#108: 2048 >>> 3 === 256. Actual: ' + (2048 >>> 3)); -} - - -if (4096 >>> 3 !== 512) { - $ERROR('#109: 4096 >>> 3 === 512. Actual: ' + (4096 >>> 3)); -} - - -if (8192 >>> 3 !== 1024) { - $ERROR('#110: 8192 >>> 3 === 1024. Actual: ' + (8192 >>> 3)); -} - - -if (16384 >>> 3 !== 2048) { - $ERROR('#111: 16384 >>> 3 === 2048. Actual: ' + (16384 >>> 3)); -} - - -if (32768 >>> 3 !== 4096) { - $ERROR('#112: 32768 >>> 3 === 4096. Actual: ' + (32768 >>> 3)); -} - - -if (65536 >>> 3 !== 8192) { - $ERROR('#113: 65536 >>> 3 === 8192. Actual: ' + (65536 >>> 3)); -} - - -if (131072 >>> 3 !== 16384) { - $ERROR('#114: 131072 >>> 3 === 16384. Actual: ' + (131072 >>> 3)); -} - - -if (262144 >>> 3 !== 32768) { - $ERROR('#115: 262144 >>> 3 === 32768. Actual: ' + (262144 >>> 3)); -} - - -if (524288 >>> 3 !== 65536) { - $ERROR('#116: 524288 >>> 3 === 65536. Actual: ' + (524288 >>> 3)); -} - - -if (1048576 >>> 3 !== 131072) { - $ERROR('#117: 1048576 >>> 3 === 131072. Actual: ' + (1048576 >>> 3)); -} - - -if (2097152 >>> 3 !== 262144) { - $ERROR('#118: 2097152 >>> 3 === 262144. Actual: ' + (2097152 >>> 3)); -} - - -if (4194304 >>> 3 !== 524288) { - $ERROR('#119: 4194304 >>> 3 === 524288. Actual: ' + (4194304 >>> 3)); -} - - -if (8388608 >>> 3 !== 1048576) { - $ERROR('#120: 8388608 >>> 3 === 1048576. Actual: ' + (8388608 >>> 3)); -} - - -if (16777216 >>> 3 !== 2097152) { - $ERROR('#121: 16777216 >>> 3 === 2097152. Actual: ' + (16777216 >>> 3)); -} - - -if (33554432 >>> 3 !== 4194304) { - $ERROR('#122: 33554432 >>> 3 === 4194304. Actual: ' + (33554432 >>> 3)); -} - - -if (67108864 >>> 3 !== 8388608) { - $ERROR('#123: 67108864 >>> 3 === 8388608. Actual: ' + (67108864 >>> 3)); -} - - -if (134217728 >>> 3 !== 16777216) { - $ERROR('#124: 134217728 >>> 3 === 16777216. Actual: ' + (134217728 >>> 3)); -} - - -if (268435456 >>> 3 !== 33554432) { - $ERROR('#125: 268435456 >>> 3 === 33554432. Actual: ' + (268435456 >>> 3)); -} - - -if (536870912 >>> 3 !== 67108864) { - $ERROR('#126: 536870912 >>> 3 === 67108864. Actual: ' + (536870912 >>> 3)); -} - - -if (1073741824 >>> 3 !== 134217728) { - $ERROR('#127: 1073741824 >>> 3 === 134217728. Actual: ' + (1073741824 >>> 3)); -} - - -if (2147483648 >>> 3 !== 268435456) { - $ERROR('#128: 2147483648 >>> 3 === 268435456. Actual: ' + (2147483648 >>> 3)); -} - - -if (1 >>> 4 !== 0) { - $ERROR('#129: 1 >>> 4 === 0. Actual: ' + (1 >>> 4)); -} - - -if (2 >>> 4 !== 0) { - $ERROR('#130: 2 >>> 4 === 0. Actual: ' + (2 >>> 4)); -} - - -if (4 >>> 4 !== 0) { - $ERROR('#131: 4 >>> 4 === 0. Actual: ' + (4 >>> 4)); -} - - -if (8 >>> 4 !== 0) { - $ERROR('#132: 8 >>> 4 === 0. Actual: ' + (8 >>> 4)); -} - - -if (16 >>> 4 !== 1) { - $ERROR('#133: 16 >>> 4 === 1. Actual: ' + (16 >>> 4)); -} - - -if (32 >>> 4 !== 2) { - $ERROR('#134: 32 >>> 4 === 2. Actual: ' + (32 >>> 4)); -} - - -if (64 >>> 4 !== 4) { - $ERROR('#135: 64 >>> 4 === 4. Actual: ' + (64 >>> 4)); -} - - -if (128 >>> 4 !== 8) { - $ERROR('#136: 128 >>> 4 === 8. Actual: ' + (128 >>> 4)); -} - - -if (256 >>> 4 !== 16) { - $ERROR('#137: 256 >>> 4 === 16. Actual: ' + (256 >>> 4)); -} - - -if (512 >>> 4 !== 32) { - $ERROR('#138: 512 >>> 4 === 32. Actual: ' + (512 >>> 4)); -} - - -if (1024 >>> 4 !== 64) { - $ERROR('#139: 1024 >>> 4 === 64. Actual: ' + (1024 >>> 4)); -} - - -if (2048 >>> 4 !== 128) { - $ERROR('#140: 2048 >>> 4 === 128. Actual: ' + (2048 >>> 4)); -} - - -if (4096 >>> 4 !== 256) { - $ERROR('#141: 4096 >>> 4 === 256. Actual: ' + (4096 >>> 4)); -} - - -if (8192 >>> 4 !== 512) { - $ERROR('#142: 8192 >>> 4 === 512. Actual: ' + (8192 >>> 4)); -} - - -if (16384 >>> 4 !== 1024) { - $ERROR('#143: 16384 >>> 4 === 1024. Actual: ' + (16384 >>> 4)); -} - - -if (32768 >>> 4 !== 2048) { - $ERROR('#144: 32768 >>> 4 === 2048. Actual: ' + (32768 >>> 4)); -} - - -if (65536 >>> 4 !== 4096) { - $ERROR('#145: 65536 >>> 4 === 4096. Actual: ' + (65536 >>> 4)); -} - - -if (131072 >>> 4 !== 8192) { - $ERROR('#146: 131072 >>> 4 === 8192. Actual: ' + (131072 >>> 4)); -} - - -if (262144 >>> 4 !== 16384) { - $ERROR('#147: 262144 >>> 4 === 16384. Actual: ' + (262144 >>> 4)); -} - - -if (524288 >>> 4 !== 32768) { - $ERROR('#148: 524288 >>> 4 === 32768. Actual: ' + (524288 >>> 4)); -} - - -if (1048576 >>> 4 !== 65536) { - $ERROR('#149: 1048576 >>> 4 === 65536. Actual: ' + (1048576 >>> 4)); -} - - -if (2097152 >>> 4 !== 131072) { - $ERROR('#150: 2097152 >>> 4 === 131072. Actual: ' + (2097152 >>> 4)); -} - - -if (4194304 >>> 4 !== 262144) { - $ERROR('#151: 4194304 >>> 4 === 262144. Actual: ' + (4194304 >>> 4)); -} - - -if (8388608 >>> 4 !== 524288) { - $ERROR('#152: 8388608 >>> 4 === 524288. Actual: ' + (8388608 >>> 4)); -} - - -if (16777216 >>> 4 !== 1048576) { - $ERROR('#153: 16777216 >>> 4 === 1048576. Actual: ' + (16777216 >>> 4)); -} - - -if (33554432 >>> 4 !== 2097152) { - $ERROR('#154: 33554432 >>> 4 === 2097152. Actual: ' + (33554432 >>> 4)); -} - - -if (67108864 >>> 4 !== 4194304) { - $ERROR('#155: 67108864 >>> 4 === 4194304. Actual: ' + (67108864 >>> 4)); -} - - -if (134217728 >>> 4 !== 8388608) { - $ERROR('#156: 134217728 >>> 4 === 8388608. Actual: ' + (134217728 >>> 4)); -} - - -if (268435456 >>> 4 !== 16777216) { - $ERROR('#157: 268435456 >>> 4 === 16777216. Actual: ' + (268435456 >>> 4)); -} - - -if (536870912 >>> 4 !== 33554432) { - $ERROR('#158: 536870912 >>> 4 === 33554432. Actual: ' + (536870912 >>> 4)); -} - - -if (1073741824 >>> 4 !== 67108864) { - $ERROR('#159: 1073741824 >>> 4 === 67108864. Actual: ' + (1073741824 >>> 4)); -} - - -if (2147483648 >>> 4 !== 134217728) { - $ERROR('#160: 2147483648 >>> 4 === 134217728. Actual: ' + (2147483648 >>> 4)); -} - - -if (1 >>> 5 !== 0) { - $ERROR('#161: 1 >>> 5 === 0. Actual: ' + (1 >>> 5)); -} - - -if (2 >>> 5 !== 0) { - $ERROR('#162: 2 >>> 5 === 0. Actual: ' + (2 >>> 5)); -} - - -if (4 >>> 5 !== 0) { - $ERROR('#163: 4 >>> 5 === 0. Actual: ' + (4 >>> 5)); -} - - -if (8 >>> 5 !== 0) { - $ERROR('#164: 8 >>> 5 === 0. Actual: ' + (8 >>> 5)); -} - - -if (16 >>> 5 !== 0) { - $ERROR('#165: 16 >>> 5 === 0. Actual: ' + (16 >>> 5)); -} - - -if (32 >>> 5 !== 1) { - $ERROR('#166: 32 >>> 5 === 1. Actual: ' + (32 >>> 5)); -} - - -if (64 >>> 5 !== 2) { - $ERROR('#167: 64 >>> 5 === 2. Actual: ' + (64 >>> 5)); -} - - -if (128 >>> 5 !== 4) { - $ERROR('#168: 128 >>> 5 === 4. Actual: ' + (128 >>> 5)); -} - - -if (256 >>> 5 !== 8) { - $ERROR('#169: 256 >>> 5 === 8. Actual: ' + (256 >>> 5)); -} - - -if (512 >>> 5 !== 16) { - $ERROR('#170: 512 >>> 5 === 16. Actual: ' + (512 >>> 5)); -} - - -if (1024 >>> 5 !== 32) { - $ERROR('#171: 1024 >>> 5 === 32. Actual: ' + (1024 >>> 5)); -} - - -if (2048 >>> 5 !== 64) { - $ERROR('#172: 2048 >>> 5 === 64. Actual: ' + (2048 >>> 5)); -} - - -if (4096 >>> 5 !== 128) { - $ERROR('#173: 4096 >>> 5 === 128. Actual: ' + (4096 >>> 5)); -} - - -if (8192 >>> 5 !== 256) { - $ERROR('#174: 8192 >>> 5 === 256. Actual: ' + (8192 >>> 5)); -} - - -if (16384 >>> 5 !== 512) { - $ERROR('#175: 16384 >>> 5 === 512. Actual: ' + (16384 >>> 5)); -} - - -if (32768 >>> 5 !== 1024) { - $ERROR('#176: 32768 >>> 5 === 1024. Actual: ' + (32768 >>> 5)); -} - - -if (65536 >>> 5 !== 2048) { - $ERROR('#177: 65536 >>> 5 === 2048. Actual: ' + (65536 >>> 5)); -} - - -if (131072 >>> 5 !== 4096) { - $ERROR('#178: 131072 >>> 5 === 4096. Actual: ' + (131072 >>> 5)); -} - - -if (262144 >>> 5 !== 8192) { - $ERROR('#179: 262144 >>> 5 === 8192. Actual: ' + (262144 >>> 5)); -} - - -if (524288 >>> 5 !== 16384) { - $ERROR('#180: 524288 >>> 5 === 16384. Actual: ' + (524288 >>> 5)); -} - - -if (1048576 >>> 5 !== 32768) { - $ERROR('#181: 1048576 >>> 5 === 32768. Actual: ' + (1048576 >>> 5)); -} - - -if (2097152 >>> 5 !== 65536) { - $ERROR('#182: 2097152 >>> 5 === 65536. Actual: ' + (2097152 >>> 5)); -} - - -if (4194304 >>> 5 !== 131072) { - $ERROR('#183: 4194304 >>> 5 === 131072. Actual: ' + (4194304 >>> 5)); -} - - -if (8388608 >>> 5 !== 262144) { - $ERROR('#184: 8388608 >>> 5 === 262144. Actual: ' + (8388608 >>> 5)); -} - - -if (16777216 >>> 5 !== 524288) { - $ERROR('#185: 16777216 >>> 5 === 524288. Actual: ' + (16777216 >>> 5)); -} - - -if (33554432 >>> 5 !== 1048576) { - $ERROR('#186: 33554432 >>> 5 === 1048576. Actual: ' + (33554432 >>> 5)); -} - - -if (67108864 >>> 5 !== 2097152) { - $ERROR('#187: 67108864 >>> 5 === 2097152. Actual: ' + (67108864 >>> 5)); -} - - -if (134217728 >>> 5 !== 4194304) { - $ERROR('#188: 134217728 >>> 5 === 4194304. Actual: ' + (134217728 >>> 5)); -} - - -if (268435456 >>> 5 !== 8388608) { - $ERROR('#189: 268435456 >>> 5 === 8388608. Actual: ' + (268435456 >>> 5)); -} - - -if (536870912 >>> 5 !== 16777216) { - $ERROR('#190: 536870912 >>> 5 === 16777216. Actual: ' + (536870912 >>> 5)); -} - - -if (1073741824 >>> 5 !== 33554432) { - $ERROR('#191: 1073741824 >>> 5 === 33554432. Actual: ' + (1073741824 >>> 5)); -} - - -if (2147483648 >>> 5 !== 67108864) { - $ERROR('#192: 2147483648 >>> 5 === 67108864. Actual: ' + (2147483648 >>> 5)); -} - - -if (1 >>> 6 !== 0) { - $ERROR('#193: 1 >>> 6 === 0. Actual: ' + (1 >>> 6)); -} - - -if (2 >>> 6 !== 0) { - $ERROR('#194: 2 >>> 6 === 0. Actual: ' + (2 >>> 6)); -} - - -if (4 >>> 6 !== 0) { - $ERROR('#195: 4 >>> 6 === 0. Actual: ' + (4 >>> 6)); -} - - -if (8 >>> 6 !== 0) { - $ERROR('#196: 8 >>> 6 === 0. Actual: ' + (8 >>> 6)); -} - - -if (16 >>> 6 !== 0) { - $ERROR('#197: 16 >>> 6 === 0. Actual: ' + (16 >>> 6)); -} - - -if (32 >>> 6 !== 0) { - $ERROR('#198: 32 >>> 6 === 0. Actual: ' + (32 >>> 6)); -} - - -if (64 >>> 6 !== 1) { - $ERROR('#199: 64 >>> 6 === 1. Actual: ' + (64 >>> 6)); -} - - -if (128 >>> 6 !== 2) { - $ERROR('#200: 128 >>> 6 === 2. Actual: ' + (128 >>> 6)); -} - - -if (256 >>> 6 !== 4) { - $ERROR('#201: 256 >>> 6 === 4. Actual: ' + (256 >>> 6)); -} - - -if (512 >>> 6 !== 8) { - $ERROR('#202: 512 >>> 6 === 8. Actual: ' + (512 >>> 6)); -} - - -if (1024 >>> 6 !== 16) { - $ERROR('#203: 1024 >>> 6 === 16. Actual: ' + (1024 >>> 6)); -} - - -if (2048 >>> 6 !== 32) { - $ERROR('#204: 2048 >>> 6 === 32. Actual: ' + (2048 >>> 6)); -} - - -if (4096 >>> 6 !== 64) { - $ERROR('#205: 4096 >>> 6 === 64. Actual: ' + (4096 >>> 6)); -} - - -if (8192 >>> 6 !== 128) { - $ERROR('#206: 8192 >>> 6 === 128. Actual: ' + (8192 >>> 6)); -} - - -if (16384 >>> 6 !== 256) { - $ERROR('#207: 16384 >>> 6 === 256. Actual: ' + (16384 >>> 6)); -} - - -if (32768 >>> 6 !== 512) { - $ERROR('#208: 32768 >>> 6 === 512. Actual: ' + (32768 >>> 6)); -} - - -if (65536 >>> 6 !== 1024) { - $ERROR('#209: 65536 >>> 6 === 1024. Actual: ' + (65536 >>> 6)); -} - - -if (131072 >>> 6 !== 2048) { - $ERROR('#210: 131072 >>> 6 === 2048. Actual: ' + (131072 >>> 6)); -} - - -if (262144 >>> 6 !== 4096) { - $ERROR('#211: 262144 >>> 6 === 4096. Actual: ' + (262144 >>> 6)); -} - - -if (524288 >>> 6 !== 8192) { - $ERROR('#212: 524288 >>> 6 === 8192. Actual: ' + (524288 >>> 6)); -} - - -if (1048576 >>> 6 !== 16384) { - $ERROR('#213: 1048576 >>> 6 === 16384. Actual: ' + (1048576 >>> 6)); -} - - -if (2097152 >>> 6 !== 32768) { - $ERROR('#214: 2097152 >>> 6 === 32768. Actual: ' + (2097152 >>> 6)); -} - - -if (4194304 >>> 6 !== 65536) { - $ERROR('#215: 4194304 >>> 6 === 65536. Actual: ' + (4194304 >>> 6)); -} - - -if (8388608 >>> 6 !== 131072) { - $ERROR('#216: 8388608 >>> 6 === 131072. Actual: ' + (8388608 >>> 6)); -} - - -if (16777216 >>> 6 !== 262144) { - $ERROR('#217: 16777216 >>> 6 === 262144. Actual: ' + (16777216 >>> 6)); -} - - -if (33554432 >>> 6 !== 524288) { - $ERROR('#218: 33554432 >>> 6 === 524288. Actual: ' + (33554432 >>> 6)); -} - - -if (67108864 >>> 6 !== 1048576) { - $ERROR('#219: 67108864 >>> 6 === 1048576. Actual: ' + (67108864 >>> 6)); -} - - -if (134217728 >>> 6 !== 2097152) { - $ERROR('#220: 134217728 >>> 6 === 2097152. Actual: ' + (134217728 >>> 6)); -} - - -if (268435456 >>> 6 !== 4194304) { - $ERROR('#221: 268435456 >>> 6 === 4194304. Actual: ' + (268435456 >>> 6)); -} - - -if (536870912 >>> 6 !== 8388608) { - $ERROR('#222: 536870912 >>> 6 === 8388608. Actual: ' + (536870912 >>> 6)); -} - - -if (1073741824 >>> 6 !== 16777216) { - $ERROR('#223: 1073741824 >>> 6 === 16777216. Actual: ' + (1073741824 >>> 6)); -} - - -if (2147483648 >>> 6 !== 33554432) { - $ERROR('#224: 2147483648 >>> 6 === 33554432. Actual: ' + (2147483648 >>> 6)); -} - - -if (1 >>> 7 !== 0) { - $ERROR('#225: 1 >>> 7 === 0. Actual: ' + (1 >>> 7)); -} - - -if (2 >>> 7 !== 0) { - $ERROR('#226: 2 >>> 7 === 0. Actual: ' + (2 >>> 7)); -} - - -if (4 >>> 7 !== 0) { - $ERROR('#227: 4 >>> 7 === 0. Actual: ' + (4 >>> 7)); -} - - -if (8 >>> 7 !== 0) { - $ERROR('#228: 8 >>> 7 === 0. Actual: ' + (8 >>> 7)); -} - - -if (16 >>> 7 !== 0) { - $ERROR('#229: 16 >>> 7 === 0. Actual: ' + (16 >>> 7)); -} - - -if (32 >>> 7 !== 0) { - $ERROR('#230: 32 >>> 7 === 0. Actual: ' + (32 >>> 7)); -} - - -if (64 >>> 7 !== 0) { - $ERROR('#231: 64 >>> 7 === 0. Actual: ' + (64 >>> 7)); -} - - -if (128 >>> 7 !== 1) { - $ERROR('#232: 128 >>> 7 === 1. Actual: ' + (128 >>> 7)); -} - - -if (256 >>> 7 !== 2) { - $ERROR('#233: 256 >>> 7 === 2. Actual: ' + (256 >>> 7)); -} - - -if (512 >>> 7 !== 4) { - $ERROR('#234: 512 >>> 7 === 4. Actual: ' + (512 >>> 7)); -} - - -if (1024 >>> 7 !== 8) { - $ERROR('#235: 1024 >>> 7 === 8. Actual: ' + (1024 >>> 7)); -} - - -if (2048 >>> 7 !== 16) { - $ERROR('#236: 2048 >>> 7 === 16. Actual: ' + (2048 >>> 7)); -} - - -if (4096 >>> 7 !== 32) { - $ERROR('#237: 4096 >>> 7 === 32. Actual: ' + (4096 >>> 7)); -} - - -if (8192 >>> 7 !== 64) { - $ERROR('#238: 8192 >>> 7 === 64. Actual: ' + (8192 >>> 7)); -} - - -if (16384 >>> 7 !== 128) { - $ERROR('#239: 16384 >>> 7 === 128. Actual: ' + (16384 >>> 7)); -} - - -if (32768 >>> 7 !== 256) { - $ERROR('#240: 32768 >>> 7 === 256. Actual: ' + (32768 >>> 7)); -} - - -if (65536 >>> 7 !== 512) { - $ERROR('#241: 65536 >>> 7 === 512. Actual: ' + (65536 >>> 7)); -} - - -if (131072 >>> 7 !== 1024) { - $ERROR('#242: 131072 >>> 7 === 1024. Actual: ' + (131072 >>> 7)); -} - - -if (262144 >>> 7 !== 2048) { - $ERROR('#243: 262144 >>> 7 === 2048. Actual: ' + (262144 >>> 7)); -} - - -if (524288 >>> 7 !== 4096) { - $ERROR('#244: 524288 >>> 7 === 4096. Actual: ' + (524288 >>> 7)); -} - - -if (1048576 >>> 7 !== 8192) { - $ERROR('#245: 1048576 >>> 7 === 8192. Actual: ' + (1048576 >>> 7)); -} - - -if (2097152 >>> 7 !== 16384) { - $ERROR('#246: 2097152 >>> 7 === 16384. Actual: ' + (2097152 >>> 7)); -} - - -if (4194304 >>> 7 !== 32768) { - $ERROR('#247: 4194304 >>> 7 === 32768. Actual: ' + (4194304 >>> 7)); -} - - -if (8388608 >>> 7 !== 65536) { - $ERROR('#248: 8388608 >>> 7 === 65536. Actual: ' + (8388608 >>> 7)); -} - - -if (16777216 >>> 7 !== 131072) { - $ERROR('#249: 16777216 >>> 7 === 131072. Actual: ' + (16777216 >>> 7)); -} - - -if (33554432 >>> 7 !== 262144) { - $ERROR('#250: 33554432 >>> 7 === 262144. Actual: ' + (33554432 >>> 7)); -} - - -if (67108864 >>> 7 !== 524288) { - $ERROR('#251: 67108864 >>> 7 === 524288. Actual: ' + (67108864 >>> 7)); -} - - -if (134217728 >>> 7 !== 1048576) { - $ERROR('#252: 134217728 >>> 7 === 1048576. Actual: ' + (134217728 >>> 7)); -} - - -if (268435456 >>> 7 !== 2097152) { - $ERROR('#253: 268435456 >>> 7 === 2097152. Actual: ' + (268435456 >>> 7)); -} - - -if (536870912 >>> 7 !== 4194304) { - $ERROR('#254: 536870912 >>> 7 === 4194304. Actual: ' + (536870912 >>> 7)); -} - - -if (1073741824 >>> 7 !== 8388608) { - $ERROR('#255: 1073741824 >>> 7 === 8388608. Actual: ' + (1073741824 >>> 7)); -} - - -if (2147483648 >>> 7 !== 16777216) { - $ERROR('#256: 2147483648 >>> 7 === 16777216. Actual: ' + (2147483648 >>> 7)); -} - - -if (1 >>> 8 !== 0) { - $ERROR('#257: 1 >>> 8 === 0. Actual: ' + (1 >>> 8)); -} - - -if (2 >>> 8 !== 0) { - $ERROR('#258: 2 >>> 8 === 0. Actual: ' + (2 >>> 8)); -} - - -if (4 >>> 8 !== 0) { - $ERROR('#259: 4 >>> 8 === 0. Actual: ' + (4 >>> 8)); -} - - -if (8 >>> 8 !== 0) { - $ERROR('#260: 8 >>> 8 === 0. Actual: ' + (8 >>> 8)); -} - - -if (16 >>> 8 !== 0) { - $ERROR('#261: 16 >>> 8 === 0. Actual: ' + (16 >>> 8)); -} - - -if (32 >>> 8 !== 0) { - $ERROR('#262: 32 >>> 8 === 0. Actual: ' + (32 >>> 8)); -} - - -if (64 >>> 8 !== 0) { - $ERROR('#263: 64 >>> 8 === 0. Actual: ' + (64 >>> 8)); -} - - -if (128 >>> 8 !== 0) { - $ERROR('#264: 128 >>> 8 === 0. Actual: ' + (128 >>> 8)); -} - - -if (256 >>> 8 !== 1) { - $ERROR('#265: 256 >>> 8 === 1. Actual: ' + (256 >>> 8)); -} - - -if (512 >>> 8 !== 2) { - $ERROR('#266: 512 >>> 8 === 2. Actual: ' + (512 >>> 8)); -} - - -if (1024 >>> 8 !== 4) { - $ERROR('#267: 1024 >>> 8 === 4. Actual: ' + (1024 >>> 8)); -} - - -if (2048 >>> 8 !== 8) { - $ERROR('#268: 2048 >>> 8 === 8. Actual: ' + (2048 >>> 8)); -} - - -if (4096 >>> 8 !== 16) { - $ERROR('#269: 4096 >>> 8 === 16. Actual: ' + (4096 >>> 8)); -} - - -if (8192 >>> 8 !== 32) { - $ERROR('#270: 8192 >>> 8 === 32. Actual: ' + (8192 >>> 8)); -} - - -if (16384 >>> 8 !== 64) { - $ERROR('#271: 16384 >>> 8 === 64. Actual: ' + (16384 >>> 8)); -} - - -if (32768 >>> 8 !== 128) { - $ERROR('#272: 32768 >>> 8 === 128. Actual: ' + (32768 >>> 8)); -} - - -if (65536 >>> 8 !== 256) { - $ERROR('#273: 65536 >>> 8 === 256. Actual: ' + (65536 >>> 8)); -} - - -if (131072 >>> 8 !== 512) { - $ERROR('#274: 131072 >>> 8 === 512. Actual: ' + (131072 >>> 8)); -} - - -if (262144 >>> 8 !== 1024) { - $ERROR('#275: 262144 >>> 8 === 1024. Actual: ' + (262144 >>> 8)); -} - - -if (524288 >>> 8 !== 2048) { - $ERROR('#276: 524288 >>> 8 === 2048. Actual: ' + (524288 >>> 8)); -} - - -if (1048576 >>> 8 !== 4096) { - $ERROR('#277: 1048576 >>> 8 === 4096. Actual: ' + (1048576 >>> 8)); -} - - -if (2097152 >>> 8 !== 8192) { - $ERROR('#278: 2097152 >>> 8 === 8192. Actual: ' + (2097152 >>> 8)); -} - - -if (4194304 >>> 8 !== 16384) { - $ERROR('#279: 4194304 >>> 8 === 16384. Actual: ' + (4194304 >>> 8)); -} - - -if (8388608 >>> 8 !== 32768) { - $ERROR('#280: 8388608 >>> 8 === 32768. Actual: ' + (8388608 >>> 8)); -} - - -if (16777216 >>> 8 !== 65536) { - $ERROR('#281: 16777216 >>> 8 === 65536. Actual: ' + (16777216 >>> 8)); -} - - -if (33554432 >>> 8 !== 131072) { - $ERROR('#282: 33554432 >>> 8 === 131072. Actual: ' + (33554432 >>> 8)); -} - - -if (67108864 >>> 8 !== 262144) { - $ERROR('#283: 67108864 >>> 8 === 262144. Actual: ' + (67108864 >>> 8)); -} - - -if (134217728 >>> 8 !== 524288) { - $ERROR('#284: 134217728 >>> 8 === 524288. Actual: ' + (134217728 >>> 8)); -} - - -if (268435456 >>> 8 !== 1048576) { - $ERROR('#285: 268435456 >>> 8 === 1048576. Actual: ' + (268435456 >>> 8)); -} - - -if (536870912 >>> 8 !== 2097152) { - $ERROR('#286: 536870912 >>> 8 === 2097152. Actual: ' + (536870912 >>> 8)); -} - - -if (1073741824 >>> 8 !== 4194304) { - $ERROR('#287: 1073741824 >>> 8 === 4194304. Actual: ' + (1073741824 >>> 8)); -} - - -if (2147483648 >>> 8 !== 8388608) { - $ERROR('#288: 2147483648 >>> 8 === 8388608. Actual: ' + (2147483648 >>> 8)); -} - - -if (1 >>> 9 !== 0) { - $ERROR('#289: 1 >>> 9 === 0. Actual: ' + (1 >>> 9)); -} - - -if (2 >>> 9 !== 0) { - $ERROR('#290: 2 >>> 9 === 0. Actual: ' + (2 >>> 9)); -} - - -if (4 >>> 9 !== 0) { - $ERROR('#291: 4 >>> 9 === 0. Actual: ' + (4 >>> 9)); -} - - -if (8 >>> 9 !== 0) { - $ERROR('#292: 8 >>> 9 === 0. Actual: ' + (8 >>> 9)); -} - - -if (16 >>> 9 !== 0) { - $ERROR('#293: 16 >>> 9 === 0. Actual: ' + (16 >>> 9)); -} - - -if (32 >>> 9 !== 0) { - $ERROR('#294: 32 >>> 9 === 0. Actual: ' + (32 >>> 9)); -} - - -if (64 >>> 9 !== 0) { - $ERROR('#295: 64 >>> 9 === 0. Actual: ' + (64 >>> 9)); -} - - -if (128 >>> 9 !== 0) { - $ERROR('#296: 128 >>> 9 === 0. Actual: ' + (128 >>> 9)); -} - - -if (256 >>> 9 !== 0) { - $ERROR('#297: 256 >>> 9 === 0. Actual: ' + (256 >>> 9)); -} - - -if (512 >>> 9 !== 1) { - $ERROR('#298: 512 >>> 9 === 1. Actual: ' + (512 >>> 9)); -} - - -if (1024 >>> 9 !== 2) { - $ERROR('#299: 1024 >>> 9 === 2. Actual: ' + (1024 >>> 9)); -} - - -if (2048 >>> 9 !== 4) { - $ERROR('#300: 2048 >>> 9 === 4. Actual: ' + (2048 >>> 9)); -} - - -if (4096 >>> 9 !== 8) { - $ERROR('#301: 4096 >>> 9 === 8. Actual: ' + (4096 >>> 9)); -} - - -if (8192 >>> 9 !== 16) { - $ERROR('#302: 8192 >>> 9 === 16. Actual: ' + (8192 >>> 9)); -} - - -if (16384 >>> 9 !== 32) { - $ERROR('#303: 16384 >>> 9 === 32. Actual: ' + (16384 >>> 9)); -} - - -if (32768 >>> 9 !== 64) { - $ERROR('#304: 32768 >>> 9 === 64. Actual: ' + (32768 >>> 9)); -} - - -if (65536 >>> 9 !== 128) { - $ERROR('#305: 65536 >>> 9 === 128. Actual: ' + (65536 >>> 9)); -} - - -if (131072 >>> 9 !== 256) { - $ERROR('#306: 131072 >>> 9 === 256. Actual: ' + (131072 >>> 9)); -} - - -if (262144 >>> 9 !== 512) { - $ERROR('#307: 262144 >>> 9 === 512. Actual: ' + (262144 >>> 9)); -} - - -if (524288 >>> 9 !== 1024) { - $ERROR('#308: 524288 >>> 9 === 1024. Actual: ' + (524288 >>> 9)); -} - - -if (1048576 >>> 9 !== 2048) { - $ERROR('#309: 1048576 >>> 9 === 2048. Actual: ' + (1048576 >>> 9)); -} - - -if (2097152 >>> 9 !== 4096) { - $ERROR('#310: 2097152 >>> 9 === 4096. Actual: ' + (2097152 >>> 9)); -} - - -if (4194304 >>> 9 !== 8192) { - $ERROR('#311: 4194304 >>> 9 === 8192. Actual: ' + (4194304 >>> 9)); -} - - -if (8388608 >>> 9 !== 16384) { - $ERROR('#312: 8388608 >>> 9 === 16384. Actual: ' + (8388608 >>> 9)); -} - - -if (16777216 >>> 9 !== 32768) { - $ERROR('#313: 16777216 >>> 9 === 32768. Actual: ' + (16777216 >>> 9)); -} - - -if (33554432 >>> 9 !== 65536) { - $ERROR('#314: 33554432 >>> 9 === 65536. Actual: ' + (33554432 >>> 9)); -} - - -if (67108864 >>> 9 !== 131072) { - $ERROR('#315: 67108864 >>> 9 === 131072. Actual: ' + (67108864 >>> 9)); -} - - -if (134217728 >>> 9 !== 262144) { - $ERROR('#316: 134217728 >>> 9 === 262144. Actual: ' + (134217728 >>> 9)); -} - - -if (268435456 >>> 9 !== 524288) { - $ERROR('#317: 268435456 >>> 9 === 524288. Actual: ' + (268435456 >>> 9)); -} - - -if (536870912 >>> 9 !== 1048576) { - $ERROR('#318: 536870912 >>> 9 === 1048576. Actual: ' + (536870912 >>> 9)); -} - - -if (1073741824 >>> 9 !== 2097152) { - $ERROR('#319: 1073741824 >>> 9 === 2097152. Actual: ' + (1073741824 >>> 9)); -} - - -if (2147483648 >>> 9 !== 4194304) { - $ERROR('#320: 2147483648 >>> 9 === 4194304. Actual: ' + (2147483648 >>> 9)); -} - - -if (1 >>> 10 !== 0) { - $ERROR('#321: 1 >>> 10 === 0. Actual: ' + (1 >>> 10)); -} - - -if (2 >>> 10 !== 0) { - $ERROR('#322: 2 >>> 10 === 0. Actual: ' + (2 >>> 10)); -} - - -if (4 >>> 10 !== 0) { - $ERROR('#323: 4 >>> 10 === 0. Actual: ' + (4 >>> 10)); -} - - -if (8 >>> 10 !== 0) { - $ERROR('#324: 8 >>> 10 === 0. Actual: ' + (8 >>> 10)); -} - - -if (16 >>> 10 !== 0) { - $ERROR('#325: 16 >>> 10 === 0. Actual: ' + (16 >>> 10)); -} - - -if (32 >>> 10 !== 0) { - $ERROR('#326: 32 >>> 10 === 0. Actual: ' + (32 >>> 10)); -} - - -if (64 >>> 10 !== 0) { - $ERROR('#327: 64 >>> 10 === 0. Actual: ' + (64 >>> 10)); -} - - -if (128 >>> 10 !== 0) { - $ERROR('#328: 128 >>> 10 === 0. Actual: ' + (128 >>> 10)); -} - - -if (256 >>> 10 !== 0) { - $ERROR('#329: 256 >>> 10 === 0. Actual: ' + (256 >>> 10)); -} - - -if (512 >>> 10 !== 0) { - $ERROR('#330: 512 >>> 10 === 0. Actual: ' + (512 >>> 10)); -} - - -if (1024 >>> 10 !== 1) { - $ERROR('#331: 1024 >>> 10 === 1. Actual: ' + (1024 >>> 10)); -} - - -if (2048 >>> 10 !== 2) { - $ERROR('#332: 2048 >>> 10 === 2. Actual: ' + (2048 >>> 10)); -} - - -if (4096 >>> 10 !== 4) { - $ERROR('#333: 4096 >>> 10 === 4. Actual: ' + (4096 >>> 10)); -} - - -if (8192 >>> 10 !== 8) { - $ERROR('#334: 8192 >>> 10 === 8. Actual: ' + (8192 >>> 10)); -} - - -if (16384 >>> 10 !== 16) { - $ERROR('#335: 16384 >>> 10 === 16. Actual: ' + (16384 >>> 10)); -} - - -if (32768 >>> 10 !== 32) { - $ERROR('#336: 32768 >>> 10 === 32. Actual: ' + (32768 >>> 10)); -} - - -if (65536 >>> 10 !== 64) { - $ERROR('#337: 65536 >>> 10 === 64. Actual: ' + (65536 >>> 10)); -} - - -if (131072 >>> 10 !== 128) { - $ERROR('#338: 131072 >>> 10 === 128. Actual: ' + (131072 >>> 10)); -} - - -if (262144 >>> 10 !== 256) { - $ERROR('#339: 262144 >>> 10 === 256. Actual: ' + (262144 >>> 10)); -} - - -if (524288 >>> 10 !== 512) { - $ERROR('#340: 524288 >>> 10 === 512. Actual: ' + (524288 >>> 10)); -} - - -if (1048576 >>> 10 !== 1024) { - $ERROR('#341: 1048576 >>> 10 === 1024. Actual: ' + (1048576 >>> 10)); -} - - -if (2097152 >>> 10 !== 2048) { - $ERROR('#342: 2097152 >>> 10 === 2048. Actual: ' + (2097152 >>> 10)); -} - - -if (4194304 >>> 10 !== 4096) { - $ERROR('#343: 4194304 >>> 10 === 4096. Actual: ' + (4194304 >>> 10)); -} - - -if (8388608 >>> 10 !== 8192) { - $ERROR('#344: 8388608 >>> 10 === 8192. Actual: ' + (8388608 >>> 10)); -} - - -if (16777216 >>> 10 !== 16384) { - $ERROR('#345: 16777216 >>> 10 === 16384. Actual: ' + (16777216 >>> 10)); -} - - -if (33554432 >>> 10 !== 32768) { - $ERROR('#346: 33554432 >>> 10 === 32768. Actual: ' + (33554432 >>> 10)); -} - - -if (67108864 >>> 10 !== 65536) { - $ERROR('#347: 67108864 >>> 10 === 65536. Actual: ' + (67108864 >>> 10)); -} - - -if (134217728 >>> 10 !== 131072) { - $ERROR('#348: 134217728 >>> 10 === 131072. Actual: ' + (134217728 >>> 10)); -} - - -if (268435456 >>> 10 !== 262144) { - $ERROR('#349: 268435456 >>> 10 === 262144. Actual: ' + (268435456 >>> 10)); -} - - -if (536870912 >>> 10 !== 524288) { - $ERROR('#350: 536870912 >>> 10 === 524288. Actual: ' + (536870912 >>> 10)); -} - - -if (1073741824 >>> 10 !== 1048576) { - $ERROR('#351: 1073741824 >>> 10 === 1048576. Actual: ' + (1073741824 >>> 10)); -} - - -if (2147483648 >>> 10 !== 2097152) { - $ERROR('#352: 2147483648 >>> 10 === 2097152. Actual: ' + (2147483648 >>> 10)); -} - - -if (1 >>> 11 !== 0) { - $ERROR('#353: 1 >>> 11 === 0. Actual: ' + (1 >>> 11)); -} - - -if (2 >>> 11 !== 0) { - $ERROR('#354: 2 >>> 11 === 0. Actual: ' + (2 >>> 11)); -} - - -if (4 >>> 11 !== 0) { - $ERROR('#355: 4 >>> 11 === 0. Actual: ' + (4 >>> 11)); -} - - -if (8 >>> 11 !== 0) { - $ERROR('#356: 8 >>> 11 === 0. Actual: ' + (8 >>> 11)); -} - - -if (16 >>> 11 !== 0) { - $ERROR('#357: 16 >>> 11 === 0. Actual: ' + (16 >>> 11)); -} - - -if (32 >>> 11 !== 0) { - $ERROR('#358: 32 >>> 11 === 0. Actual: ' + (32 >>> 11)); -} - - -if (64 >>> 11 !== 0) { - $ERROR('#359: 64 >>> 11 === 0. Actual: ' + (64 >>> 11)); -} - - -if (128 >>> 11 !== 0) { - $ERROR('#360: 128 >>> 11 === 0. Actual: ' + (128 >>> 11)); -} - - -if (256 >>> 11 !== 0) { - $ERROR('#361: 256 >>> 11 === 0. Actual: ' + (256 >>> 11)); -} - - -if (512 >>> 11 !== 0) { - $ERROR('#362: 512 >>> 11 === 0. Actual: ' + (512 >>> 11)); -} - - -if (1024 >>> 11 !== 0) { - $ERROR('#363: 1024 >>> 11 === 0. Actual: ' + (1024 >>> 11)); -} - - -if (2048 >>> 11 !== 1) { - $ERROR('#364: 2048 >>> 11 === 1. Actual: ' + (2048 >>> 11)); -} - - -if (4096 >>> 11 !== 2) { - $ERROR('#365: 4096 >>> 11 === 2. Actual: ' + (4096 >>> 11)); -} - - -if (8192 >>> 11 !== 4) { - $ERROR('#366: 8192 >>> 11 === 4. Actual: ' + (8192 >>> 11)); -} - - -if (16384 >>> 11 !== 8) { - $ERROR('#367: 16384 >>> 11 === 8. Actual: ' + (16384 >>> 11)); -} - - -if (32768 >>> 11 !== 16) { - $ERROR('#368: 32768 >>> 11 === 16. Actual: ' + (32768 >>> 11)); -} - - -if (65536 >>> 11 !== 32) { - $ERROR('#369: 65536 >>> 11 === 32. Actual: ' + (65536 >>> 11)); -} - - -if (131072 >>> 11 !== 64) { - $ERROR('#370: 131072 >>> 11 === 64. Actual: ' + (131072 >>> 11)); -} - - -if (262144 >>> 11 !== 128) { - $ERROR('#371: 262144 >>> 11 === 128. Actual: ' + (262144 >>> 11)); -} - - -if (524288 >>> 11 !== 256) { - $ERROR('#372: 524288 >>> 11 === 256. Actual: ' + (524288 >>> 11)); -} - - -if (1048576 >>> 11 !== 512) { - $ERROR('#373: 1048576 >>> 11 === 512. Actual: ' + (1048576 >>> 11)); -} - - -if (2097152 >>> 11 !== 1024) { - $ERROR('#374: 2097152 >>> 11 === 1024. Actual: ' + (2097152 >>> 11)); -} - - -if (4194304 >>> 11 !== 2048) { - $ERROR('#375: 4194304 >>> 11 === 2048. Actual: ' + (4194304 >>> 11)); -} - - -if (8388608 >>> 11 !== 4096) { - $ERROR('#376: 8388608 >>> 11 === 4096. Actual: ' + (8388608 >>> 11)); -} - - -if (16777216 >>> 11 !== 8192) { - $ERROR('#377: 16777216 >>> 11 === 8192. Actual: ' + (16777216 >>> 11)); -} - - -if (33554432 >>> 11 !== 16384) { - $ERROR('#378: 33554432 >>> 11 === 16384. Actual: ' + (33554432 >>> 11)); -} - - -if (67108864 >>> 11 !== 32768) { - $ERROR('#379: 67108864 >>> 11 === 32768. Actual: ' + (67108864 >>> 11)); -} - - -if (134217728 >>> 11 !== 65536) { - $ERROR('#380: 134217728 >>> 11 === 65536. Actual: ' + (134217728 >>> 11)); -} - - -if (268435456 >>> 11 !== 131072) { - $ERROR('#381: 268435456 >>> 11 === 131072. Actual: ' + (268435456 >>> 11)); -} - - -if (536870912 >>> 11 !== 262144) { - $ERROR('#382: 536870912 >>> 11 === 262144. Actual: ' + (536870912 >>> 11)); -} - - -if (1073741824 >>> 11 !== 524288) { - $ERROR('#383: 1073741824 >>> 11 === 524288. Actual: ' + (1073741824 >>> 11)); -} - - -if (2147483648 >>> 11 !== 1048576) { - $ERROR('#384: 2147483648 >>> 11 === 1048576. Actual: ' + (2147483648 >>> 11)); -} - - -if (1 >>> 12 !== 0) { - $ERROR('#385: 1 >>> 12 === 0. Actual: ' + (1 >>> 12)); -} - - -if (2 >>> 12 !== 0) { - $ERROR('#386: 2 >>> 12 === 0. Actual: ' + (2 >>> 12)); -} - - -if (4 >>> 12 !== 0) { - $ERROR('#387: 4 >>> 12 === 0. Actual: ' + (4 >>> 12)); -} - - -if (8 >>> 12 !== 0) { - $ERROR('#388: 8 >>> 12 === 0. Actual: ' + (8 >>> 12)); -} - - -if (16 >>> 12 !== 0) { - $ERROR('#389: 16 >>> 12 === 0. Actual: ' + (16 >>> 12)); -} - - -if (32 >>> 12 !== 0) { - $ERROR('#390: 32 >>> 12 === 0. Actual: ' + (32 >>> 12)); -} - - -if (64 >>> 12 !== 0) { - $ERROR('#391: 64 >>> 12 === 0. Actual: ' + (64 >>> 12)); -} - - -if (128 >>> 12 !== 0) { - $ERROR('#392: 128 >>> 12 === 0. Actual: ' + (128 >>> 12)); -} - - -if (256 >>> 12 !== 0) { - $ERROR('#393: 256 >>> 12 === 0. Actual: ' + (256 >>> 12)); -} - - -if (512 >>> 12 !== 0) { - $ERROR('#394: 512 >>> 12 === 0. Actual: ' + (512 >>> 12)); -} - - -if (1024 >>> 12 !== 0) { - $ERROR('#395: 1024 >>> 12 === 0. Actual: ' + (1024 >>> 12)); -} - - -if (2048 >>> 12 !== 0) { - $ERROR('#396: 2048 >>> 12 === 0. Actual: ' + (2048 >>> 12)); -} - - -if (4096 >>> 12 !== 1) { - $ERROR('#397: 4096 >>> 12 === 1. Actual: ' + (4096 >>> 12)); -} - - -if (8192 >>> 12 !== 2) { - $ERROR('#398: 8192 >>> 12 === 2. Actual: ' + (8192 >>> 12)); -} - - -if (16384 >>> 12 !== 4) { - $ERROR('#399: 16384 >>> 12 === 4. Actual: ' + (16384 >>> 12)); -} - - -if (32768 >>> 12 !== 8) { - $ERROR('#400: 32768 >>> 12 === 8. Actual: ' + (32768 >>> 12)); -} - - -if (65536 >>> 12 !== 16) { - $ERROR('#401: 65536 >>> 12 === 16. Actual: ' + (65536 >>> 12)); -} - - -if (131072 >>> 12 !== 32) { - $ERROR('#402: 131072 >>> 12 === 32. Actual: ' + (131072 >>> 12)); -} - - -if (262144 >>> 12 !== 64) { - $ERROR('#403: 262144 >>> 12 === 64. Actual: ' + (262144 >>> 12)); -} - - -if (524288 >>> 12 !== 128) { - $ERROR('#404: 524288 >>> 12 === 128. Actual: ' + (524288 >>> 12)); -} - - -if (1048576 >>> 12 !== 256) { - $ERROR('#405: 1048576 >>> 12 === 256. Actual: ' + (1048576 >>> 12)); -} - - -if (2097152 >>> 12 !== 512) { - $ERROR('#406: 2097152 >>> 12 === 512. Actual: ' + (2097152 >>> 12)); -} - - -if (4194304 >>> 12 !== 1024) { - $ERROR('#407: 4194304 >>> 12 === 1024. Actual: ' + (4194304 >>> 12)); -} - - -if (8388608 >>> 12 !== 2048) { - $ERROR('#408: 8388608 >>> 12 === 2048. Actual: ' + (8388608 >>> 12)); -} - - -if (16777216 >>> 12 !== 4096) { - $ERROR('#409: 16777216 >>> 12 === 4096. Actual: ' + (16777216 >>> 12)); -} - - -if (33554432 >>> 12 !== 8192) { - $ERROR('#410: 33554432 >>> 12 === 8192. Actual: ' + (33554432 >>> 12)); -} - - -if (67108864 >>> 12 !== 16384) { - $ERROR('#411: 67108864 >>> 12 === 16384. Actual: ' + (67108864 >>> 12)); -} - - -if (134217728 >>> 12 !== 32768) { - $ERROR('#412: 134217728 >>> 12 === 32768. Actual: ' + (134217728 >>> 12)); -} - - -if (268435456 >>> 12 !== 65536) { - $ERROR('#413: 268435456 >>> 12 === 65536. Actual: ' + (268435456 >>> 12)); -} - - -if (536870912 >>> 12 !== 131072) { - $ERROR('#414: 536870912 >>> 12 === 131072. Actual: ' + (536870912 >>> 12)); -} - - -if (1073741824 >>> 12 !== 262144) { - $ERROR('#415: 1073741824 >>> 12 === 262144. Actual: ' + (1073741824 >>> 12)); -} - - -if (2147483648 >>> 12 !== 524288) { - $ERROR('#416: 2147483648 >>> 12 === 524288. Actual: ' + (2147483648 >>> 12)); -} - - -if (1 >>> 13 !== 0) { - $ERROR('#417: 1 >>> 13 === 0. Actual: ' + (1 >>> 13)); -} - - -if (2 >>> 13 !== 0) { - $ERROR('#418: 2 >>> 13 === 0. Actual: ' + (2 >>> 13)); -} - - -if (4 >>> 13 !== 0) { - $ERROR('#419: 4 >>> 13 === 0. Actual: ' + (4 >>> 13)); -} - - -if (8 >>> 13 !== 0) { - $ERROR('#420: 8 >>> 13 === 0. Actual: ' + (8 >>> 13)); -} - - -if (16 >>> 13 !== 0) { - $ERROR('#421: 16 >>> 13 === 0. Actual: ' + (16 >>> 13)); -} - - -if (32 >>> 13 !== 0) { - $ERROR('#422: 32 >>> 13 === 0. Actual: ' + (32 >>> 13)); -} - - -if (64 >>> 13 !== 0) { - $ERROR('#423: 64 >>> 13 === 0. Actual: ' + (64 >>> 13)); -} - - -if (128 >>> 13 !== 0) { - $ERROR('#424: 128 >>> 13 === 0. Actual: ' + (128 >>> 13)); -} - - -if (256 >>> 13 !== 0) { - $ERROR('#425: 256 >>> 13 === 0. Actual: ' + (256 >>> 13)); -} - - -if (512 >>> 13 !== 0) { - $ERROR('#426: 512 >>> 13 === 0. Actual: ' + (512 >>> 13)); -} - - -if (1024 >>> 13 !== 0) { - $ERROR('#427: 1024 >>> 13 === 0. Actual: ' + (1024 >>> 13)); -} - - -if (2048 >>> 13 !== 0) { - $ERROR('#428: 2048 >>> 13 === 0. Actual: ' + (2048 >>> 13)); -} - - -if (4096 >>> 13 !== 0) { - $ERROR('#429: 4096 >>> 13 === 0. Actual: ' + (4096 >>> 13)); -} - - -if (8192 >>> 13 !== 1) { - $ERROR('#430: 8192 >>> 13 === 1. Actual: ' + (8192 >>> 13)); -} - - -if (16384 >>> 13 !== 2) { - $ERROR('#431: 16384 >>> 13 === 2. Actual: ' + (16384 >>> 13)); -} - - -if (32768 >>> 13 !== 4) { - $ERROR('#432: 32768 >>> 13 === 4. Actual: ' + (32768 >>> 13)); -} - - -if (65536 >>> 13 !== 8) { - $ERROR('#433: 65536 >>> 13 === 8. Actual: ' + (65536 >>> 13)); -} - - -if (131072 >>> 13 !== 16) { - $ERROR('#434: 131072 >>> 13 === 16. Actual: ' + (131072 >>> 13)); -} - - -if (262144 >>> 13 !== 32) { - $ERROR('#435: 262144 >>> 13 === 32. Actual: ' + (262144 >>> 13)); -} - - -if (524288 >>> 13 !== 64) { - $ERROR('#436: 524288 >>> 13 === 64. Actual: ' + (524288 >>> 13)); -} - - -if (1048576 >>> 13 !== 128) { - $ERROR('#437: 1048576 >>> 13 === 128. Actual: ' + (1048576 >>> 13)); -} - - -if (2097152 >>> 13 !== 256) { - $ERROR('#438: 2097152 >>> 13 === 256. Actual: ' + (2097152 >>> 13)); -} - - -if (4194304 >>> 13 !== 512) { - $ERROR('#439: 4194304 >>> 13 === 512. Actual: ' + (4194304 >>> 13)); -} - - -if (8388608 >>> 13 !== 1024) { - $ERROR('#440: 8388608 >>> 13 === 1024. Actual: ' + (8388608 >>> 13)); -} - - -if (16777216 >>> 13 !== 2048) { - $ERROR('#441: 16777216 >>> 13 === 2048. Actual: ' + (16777216 >>> 13)); -} - - -if (33554432 >>> 13 !== 4096) { - $ERROR('#442: 33554432 >>> 13 === 4096. Actual: ' + (33554432 >>> 13)); -} - - -if (67108864 >>> 13 !== 8192) { - $ERROR('#443: 67108864 >>> 13 === 8192. Actual: ' + (67108864 >>> 13)); -} - - -if (134217728 >>> 13 !== 16384) { - $ERROR('#444: 134217728 >>> 13 === 16384. Actual: ' + (134217728 >>> 13)); -} - - -if (268435456 >>> 13 !== 32768) { - $ERROR('#445: 268435456 >>> 13 === 32768. Actual: ' + (268435456 >>> 13)); -} - - -if (536870912 >>> 13 !== 65536) { - $ERROR('#446: 536870912 >>> 13 === 65536. Actual: ' + (536870912 >>> 13)); -} - - -if (1073741824 >>> 13 !== 131072) { - $ERROR('#447: 1073741824 >>> 13 === 131072. Actual: ' + (1073741824 >>> 13)); -} - - -if (2147483648 >>> 13 !== 262144) { - $ERROR('#448: 2147483648 >>> 13 === 262144. Actual: ' + (2147483648 >>> 13)); -} - - -if (1 >>> 14 !== 0) { - $ERROR('#449: 1 >>> 14 === 0. Actual: ' + (1 >>> 14)); -} - - -if (2 >>> 14 !== 0) { - $ERROR('#450: 2 >>> 14 === 0. Actual: ' + (2 >>> 14)); -} - - -if (4 >>> 14 !== 0) { - $ERROR('#451: 4 >>> 14 === 0. Actual: ' + (4 >>> 14)); -} - - -if (8 >>> 14 !== 0) { - $ERROR('#452: 8 >>> 14 === 0. Actual: ' + (8 >>> 14)); -} - - -if (16 >>> 14 !== 0) { - $ERROR('#453: 16 >>> 14 === 0. Actual: ' + (16 >>> 14)); -} - - -if (32 >>> 14 !== 0) { - $ERROR('#454: 32 >>> 14 === 0. Actual: ' + (32 >>> 14)); -} - - -if (64 >>> 14 !== 0) { - $ERROR('#455: 64 >>> 14 === 0. Actual: ' + (64 >>> 14)); -} - - -if (128 >>> 14 !== 0) { - $ERROR('#456: 128 >>> 14 === 0. Actual: ' + (128 >>> 14)); -} - - -if (256 >>> 14 !== 0) { - $ERROR('#457: 256 >>> 14 === 0. Actual: ' + (256 >>> 14)); -} - - -if (512 >>> 14 !== 0) { - $ERROR('#458: 512 >>> 14 === 0. Actual: ' + (512 >>> 14)); -} - - -if (1024 >>> 14 !== 0) { - $ERROR('#459: 1024 >>> 14 === 0. Actual: ' + (1024 >>> 14)); -} - - -if (2048 >>> 14 !== 0) { - $ERROR('#460: 2048 >>> 14 === 0. Actual: ' + (2048 >>> 14)); -} - - -if (4096 >>> 14 !== 0) { - $ERROR('#461: 4096 >>> 14 === 0. Actual: ' + (4096 >>> 14)); -} - - -if (8192 >>> 14 !== 0) { - $ERROR('#462: 8192 >>> 14 === 0. Actual: ' + (8192 >>> 14)); -} - - -if (16384 >>> 14 !== 1) { - $ERROR('#463: 16384 >>> 14 === 1. Actual: ' + (16384 >>> 14)); -} - - -if (32768 >>> 14 !== 2) { - $ERROR('#464: 32768 >>> 14 === 2. Actual: ' + (32768 >>> 14)); -} - - -if (65536 >>> 14 !== 4) { - $ERROR('#465: 65536 >>> 14 === 4. Actual: ' + (65536 >>> 14)); -} - - -if (131072 >>> 14 !== 8) { - $ERROR('#466: 131072 >>> 14 === 8. Actual: ' + (131072 >>> 14)); -} - - -if (262144 >>> 14 !== 16) { - $ERROR('#467: 262144 >>> 14 === 16. Actual: ' + (262144 >>> 14)); -} - - -if (524288 >>> 14 !== 32) { - $ERROR('#468: 524288 >>> 14 === 32. Actual: ' + (524288 >>> 14)); -} - - -if (1048576 >>> 14 !== 64) { - $ERROR('#469: 1048576 >>> 14 === 64. Actual: ' + (1048576 >>> 14)); -} - - -if (2097152 >>> 14 !== 128) { - $ERROR('#470: 2097152 >>> 14 === 128. Actual: ' + (2097152 >>> 14)); -} - - -if (4194304 >>> 14 !== 256) { - $ERROR('#471: 4194304 >>> 14 === 256. Actual: ' + (4194304 >>> 14)); -} - - -if (8388608 >>> 14 !== 512) { - $ERROR('#472: 8388608 >>> 14 === 512. Actual: ' + (8388608 >>> 14)); -} - - -if (16777216 >>> 14 !== 1024) { - $ERROR('#473: 16777216 >>> 14 === 1024. Actual: ' + (16777216 >>> 14)); -} - - -if (33554432 >>> 14 !== 2048) { - $ERROR('#474: 33554432 >>> 14 === 2048. Actual: ' + (33554432 >>> 14)); -} - - -if (67108864 >>> 14 !== 4096) { - $ERROR('#475: 67108864 >>> 14 === 4096. Actual: ' + (67108864 >>> 14)); -} - - -if (134217728 >>> 14 !== 8192) { - $ERROR('#476: 134217728 >>> 14 === 8192. Actual: ' + (134217728 >>> 14)); -} - - -if (268435456 >>> 14 !== 16384) { - $ERROR('#477: 268435456 >>> 14 === 16384. Actual: ' + (268435456 >>> 14)); -} - - -if (536870912 >>> 14 !== 32768) { - $ERROR('#478: 536870912 >>> 14 === 32768. Actual: ' + (536870912 >>> 14)); -} - - -if (1073741824 >>> 14 !== 65536) { - $ERROR('#479: 1073741824 >>> 14 === 65536. Actual: ' + (1073741824 >>> 14)); -} - - -if (2147483648 >>> 14 !== 131072) { - $ERROR('#480: 2147483648 >>> 14 === 131072. Actual: ' + (2147483648 >>> 14)); -} - - -if (1 >>> 15 !== 0) { - $ERROR('#481: 1 >>> 15 === 0. Actual: ' + (1 >>> 15)); -} - - -if (2 >>> 15 !== 0) { - $ERROR('#482: 2 >>> 15 === 0. Actual: ' + (2 >>> 15)); -} - - -if (4 >>> 15 !== 0) { - $ERROR('#483: 4 >>> 15 === 0. Actual: ' + (4 >>> 15)); -} - - -if (8 >>> 15 !== 0) { - $ERROR('#484: 8 >>> 15 === 0. Actual: ' + (8 >>> 15)); -} - - -if (16 >>> 15 !== 0) { - $ERROR('#485: 16 >>> 15 === 0. Actual: ' + (16 >>> 15)); -} - - -if (32 >>> 15 !== 0) { - $ERROR('#486: 32 >>> 15 === 0. Actual: ' + (32 >>> 15)); -} - - -if (64 >>> 15 !== 0) { - $ERROR('#487: 64 >>> 15 === 0. Actual: ' + (64 >>> 15)); -} - - -if (128 >>> 15 !== 0) { - $ERROR('#488: 128 >>> 15 === 0. Actual: ' + (128 >>> 15)); -} - - -if (256 >>> 15 !== 0) { - $ERROR('#489: 256 >>> 15 === 0. Actual: ' + (256 >>> 15)); -} - - -if (512 >>> 15 !== 0) { - $ERROR('#490: 512 >>> 15 === 0. Actual: ' + (512 >>> 15)); -} - - -if (1024 >>> 15 !== 0) { - $ERROR('#491: 1024 >>> 15 === 0. Actual: ' + (1024 >>> 15)); -} - - -if (2048 >>> 15 !== 0) { - $ERROR('#492: 2048 >>> 15 === 0. Actual: ' + (2048 >>> 15)); -} - - -if (4096 >>> 15 !== 0) { - $ERROR('#493: 4096 >>> 15 === 0. Actual: ' + (4096 >>> 15)); -} - - -if (8192 >>> 15 !== 0) { - $ERROR('#494: 8192 >>> 15 === 0. Actual: ' + (8192 >>> 15)); -} - - -if (16384 >>> 15 !== 0) { - $ERROR('#495: 16384 >>> 15 === 0. Actual: ' + (16384 >>> 15)); -} - - -if (32768 >>> 15 !== 1) { - $ERROR('#496: 32768 >>> 15 === 1. Actual: ' + (32768 >>> 15)); -} - - -if (65536 >>> 15 !== 2) { - $ERROR('#497: 65536 >>> 15 === 2. Actual: ' + (65536 >>> 15)); -} - - -if (131072 >>> 15 !== 4) { - $ERROR('#498: 131072 >>> 15 === 4. Actual: ' + (131072 >>> 15)); -} - - -if (262144 >>> 15 !== 8) { - $ERROR('#499: 262144 >>> 15 === 8. Actual: ' + (262144 >>> 15)); -} - - -if (524288 >>> 15 !== 16) { - $ERROR('#500: 524288 >>> 15 === 16. Actual: ' + (524288 >>> 15)); -} - - -if (1048576 >>> 15 !== 32) { - $ERROR('#501: 1048576 >>> 15 === 32. Actual: ' + (1048576 >>> 15)); -} - - -if (2097152 >>> 15 !== 64) { - $ERROR('#502: 2097152 >>> 15 === 64. Actual: ' + (2097152 >>> 15)); -} - - -if (4194304 >>> 15 !== 128) { - $ERROR('#503: 4194304 >>> 15 === 128. Actual: ' + (4194304 >>> 15)); -} - - -if (8388608 >>> 15 !== 256) { - $ERROR('#504: 8388608 >>> 15 === 256. Actual: ' + (8388608 >>> 15)); -} - - -if (16777216 >>> 15 !== 512) { - $ERROR('#505: 16777216 >>> 15 === 512. Actual: ' + (16777216 >>> 15)); -} - - -if (33554432 >>> 15 !== 1024) { - $ERROR('#506: 33554432 >>> 15 === 1024. Actual: ' + (33554432 >>> 15)); -} - - -if (67108864 >>> 15 !== 2048) { - $ERROR('#507: 67108864 >>> 15 === 2048. Actual: ' + (67108864 >>> 15)); -} - - -if (134217728 >>> 15 !== 4096) { - $ERROR('#508: 134217728 >>> 15 === 4096. Actual: ' + (134217728 >>> 15)); -} - - -if (268435456 >>> 15 !== 8192) { - $ERROR('#509: 268435456 >>> 15 === 8192. Actual: ' + (268435456 >>> 15)); -} - - -if (536870912 >>> 15 !== 16384) { - $ERROR('#510: 536870912 >>> 15 === 16384. Actual: ' + (536870912 >>> 15)); -} - - -if (1073741824 >>> 15 !== 32768) { - $ERROR('#511: 1073741824 >>> 15 === 32768. Actual: ' + (1073741824 >>> 15)); -} - - -if (2147483648 >>> 15 !== 65536) { - $ERROR('#512: 2147483648 >>> 15 === 65536. Actual: ' + (2147483648 >>> 15)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A4_T2.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A4_T2.js deleted file mode 100644 index 4203c7d92..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A4_T2.js +++ /dev/null @@ -1,2570 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.3_A4_T2; - * @section: 11.7.3; - * @assertion: Check operator x >>> y in distinct points; - * @description: ShiftExpression = 2^n - 1, n = 16...31; - */ - -//CHECK - -if (1 >>> 16 !== 0) { - $ERROR('#513: 1 >>> 16 === 0. Actual: ' + (1 >>> 16)); -} - - -if (2 >>> 16 !== 0) { - $ERROR('#514: 2 >>> 16 === 0. Actual: ' + (2 >>> 16)); -} - - -if (4 >>> 16 !== 0) { - $ERROR('#515: 4 >>> 16 === 0. Actual: ' + (4 >>> 16)); -} - - -if (8 >>> 16 !== 0) { - $ERROR('#516: 8 >>> 16 === 0. Actual: ' + (8 >>> 16)); -} - - -if (16 >>> 16 !== 0) { - $ERROR('#517: 16 >>> 16 === 0. Actual: ' + (16 >>> 16)); -} - - -if (32 >>> 16 !== 0) { - $ERROR('#518: 32 >>> 16 === 0. Actual: ' + (32 >>> 16)); -} - - -if (64 >>> 16 !== 0) { - $ERROR('#519: 64 >>> 16 === 0. Actual: ' + (64 >>> 16)); -} - - -if (128 >>> 16 !== 0) { - $ERROR('#520: 128 >>> 16 === 0. Actual: ' + (128 >>> 16)); -} - - -if (256 >>> 16 !== 0) { - $ERROR('#521: 256 >>> 16 === 0. Actual: ' + (256 >>> 16)); -} - - -if (512 >>> 16 !== 0) { - $ERROR('#522: 512 >>> 16 === 0. Actual: ' + (512 >>> 16)); -} - - -if (1024 >>> 16 !== 0) { - $ERROR('#523: 1024 >>> 16 === 0. Actual: ' + (1024 >>> 16)); -} - - -if (2048 >>> 16 !== 0) { - $ERROR('#524: 2048 >>> 16 === 0. Actual: ' + (2048 >>> 16)); -} - - -if (4096 >>> 16 !== 0) { - $ERROR('#525: 4096 >>> 16 === 0. Actual: ' + (4096 >>> 16)); -} - - -if (8192 >>> 16 !== 0) { - $ERROR('#526: 8192 >>> 16 === 0. Actual: ' + (8192 >>> 16)); -} - - -if (16384 >>> 16 !== 0) { - $ERROR('#527: 16384 >>> 16 === 0. Actual: ' + (16384 >>> 16)); -} - - -if (32768 >>> 16 !== 0) { - $ERROR('#528: 32768 >>> 16 === 0. Actual: ' + (32768 >>> 16)); -} - - -if (65536 >>> 16 !== 1) { - $ERROR('#529: 65536 >>> 16 === 1. Actual: ' + (65536 >>> 16)); -} - - -if (131072 >>> 16 !== 2) { - $ERROR('#530: 131072 >>> 16 === 2. Actual: ' + (131072 >>> 16)); -} - - -if (262144 >>> 16 !== 4) { - $ERROR('#531: 262144 >>> 16 === 4. Actual: ' + (262144 >>> 16)); -} - - -if (524288 >>> 16 !== 8) { - $ERROR('#532: 524288 >>> 16 === 8. Actual: ' + (524288 >>> 16)); -} - - -if (1048576 >>> 16 !== 16) { - $ERROR('#533: 1048576 >>> 16 === 16. Actual: ' + (1048576 >>> 16)); -} - - -if (2097152 >>> 16 !== 32) { - $ERROR('#534: 2097152 >>> 16 === 32. Actual: ' + (2097152 >>> 16)); -} - - -if (4194304 >>> 16 !== 64) { - $ERROR('#535: 4194304 >>> 16 === 64. Actual: ' + (4194304 >>> 16)); -} - - -if (8388608 >>> 16 !== 128) { - $ERROR('#536: 8388608 >>> 16 === 128. Actual: ' + (8388608 >>> 16)); -} - - -if (16777216 >>> 16 !== 256) { - $ERROR('#537: 16777216 >>> 16 === 256. Actual: ' + (16777216 >>> 16)); -} - - -if (33554432 >>> 16 !== 512) { - $ERROR('#538: 33554432 >>> 16 === 512. Actual: ' + (33554432 >>> 16)); -} - - -if (67108864 >>> 16 !== 1024) { - $ERROR('#539: 67108864 >>> 16 === 1024. Actual: ' + (67108864 >>> 16)); -} - - -if (134217728 >>> 16 !== 2048) { - $ERROR('#540: 134217728 >>> 16 === 2048. Actual: ' + (134217728 >>> 16)); -} - - -if (268435456 >>> 16 !== 4096) { - $ERROR('#541: 268435456 >>> 16 === 4096. Actual: ' + (268435456 >>> 16)); -} - - -if (536870912 >>> 16 !== 8192) { - $ERROR('#542: 536870912 >>> 16 === 8192. Actual: ' + (536870912 >>> 16)); -} - - -if (1073741824 >>> 16 !== 16384) { - $ERROR('#543: 1073741824 >>> 16 === 16384. Actual: ' + (1073741824 >>> 16)); -} - - -if (2147483648 >>> 16 !== 32768) { - $ERROR('#544: 2147483648 >>> 16 === 32768. Actual: ' + (2147483648 >>> 16)); -} - - -if (1 >>> 17 !== 0) { - $ERROR('#545: 1 >>> 17 === 0. Actual: ' + (1 >>> 17)); -} - - -if (2 >>> 17 !== 0) { - $ERROR('#546: 2 >>> 17 === 0. Actual: ' + (2 >>> 17)); -} - - -if (4 >>> 17 !== 0) { - $ERROR('#547: 4 >>> 17 === 0. Actual: ' + (4 >>> 17)); -} - - -if (8 >>> 17 !== 0) { - $ERROR('#548: 8 >>> 17 === 0. Actual: ' + (8 >>> 17)); -} - - -if (16 >>> 17 !== 0) { - $ERROR('#549: 16 >>> 17 === 0. Actual: ' + (16 >>> 17)); -} - - -if (32 >>> 17 !== 0) { - $ERROR('#550: 32 >>> 17 === 0. Actual: ' + (32 >>> 17)); -} - - -if (64 >>> 17 !== 0) { - $ERROR('#551: 64 >>> 17 === 0. Actual: ' + (64 >>> 17)); -} - - -if (128 >>> 17 !== 0) { - $ERROR('#552: 128 >>> 17 === 0. Actual: ' + (128 >>> 17)); -} - - -if (256 >>> 17 !== 0) { - $ERROR('#553: 256 >>> 17 === 0. Actual: ' + (256 >>> 17)); -} - - -if (512 >>> 17 !== 0) { - $ERROR('#554: 512 >>> 17 === 0. Actual: ' + (512 >>> 17)); -} - - -if (1024 >>> 17 !== 0) { - $ERROR('#555: 1024 >>> 17 === 0. Actual: ' + (1024 >>> 17)); -} - - -if (2048 >>> 17 !== 0) { - $ERROR('#556: 2048 >>> 17 === 0. Actual: ' + (2048 >>> 17)); -} - - -if (4096 >>> 17 !== 0) { - $ERROR('#557: 4096 >>> 17 === 0. Actual: ' + (4096 >>> 17)); -} - - -if (8192 >>> 17 !== 0) { - $ERROR('#558: 8192 >>> 17 === 0. Actual: ' + (8192 >>> 17)); -} - - -if (16384 >>> 17 !== 0) { - $ERROR('#559: 16384 >>> 17 === 0. Actual: ' + (16384 >>> 17)); -} - - -if (32768 >>> 17 !== 0) { - $ERROR('#560: 32768 >>> 17 === 0. Actual: ' + (32768 >>> 17)); -} - - -if (65536 >>> 17 !== 0) { - $ERROR('#561: 65536 >>> 17 === 0. Actual: ' + (65536 >>> 17)); -} - - -if (131072 >>> 17 !== 1) { - $ERROR('#562: 131072 >>> 17 === 1. Actual: ' + (131072 >>> 17)); -} - - -if (262144 >>> 17 !== 2) { - $ERROR('#563: 262144 >>> 17 === 2. Actual: ' + (262144 >>> 17)); -} - - -if (524288 >>> 17 !== 4) { - $ERROR('#564: 524288 >>> 17 === 4. Actual: ' + (524288 >>> 17)); -} - - -if (1048576 >>> 17 !== 8) { - $ERROR('#565: 1048576 >>> 17 === 8. Actual: ' + (1048576 >>> 17)); -} - - -if (2097152 >>> 17 !== 16) { - $ERROR('#566: 2097152 >>> 17 === 16. Actual: ' + (2097152 >>> 17)); -} - - -if (4194304 >>> 17 !== 32) { - $ERROR('#567: 4194304 >>> 17 === 32. Actual: ' + (4194304 >>> 17)); -} - - -if (8388608 >>> 17 !== 64) { - $ERROR('#568: 8388608 >>> 17 === 64. Actual: ' + (8388608 >>> 17)); -} - - -if (16777216 >>> 17 !== 128) { - $ERROR('#569: 16777216 >>> 17 === 128. Actual: ' + (16777216 >>> 17)); -} - - -if (33554432 >>> 17 !== 256) { - $ERROR('#570: 33554432 >>> 17 === 256. Actual: ' + (33554432 >>> 17)); -} - - -if (67108864 >>> 17 !== 512) { - $ERROR('#571: 67108864 >>> 17 === 512. Actual: ' + (67108864 >>> 17)); -} - - -if (134217728 >>> 17 !== 1024) { - $ERROR('#572: 134217728 >>> 17 === 1024. Actual: ' + (134217728 >>> 17)); -} - - -if (268435456 >>> 17 !== 2048) { - $ERROR('#573: 268435456 >>> 17 === 2048. Actual: ' + (268435456 >>> 17)); -} - - -if (536870912 >>> 17 !== 4096) { - $ERROR('#574: 536870912 >>> 17 === 4096. Actual: ' + (536870912 >>> 17)); -} - - -if (1073741824 >>> 17 !== 8192) { - $ERROR('#575: 1073741824 >>> 17 === 8192. Actual: ' + (1073741824 >>> 17)); -} - - -if (2147483648 >>> 17 !== 16384) { - $ERROR('#576: 2147483648 >>> 17 === 16384. Actual: ' + (2147483648 >>> 17)); -} - - -if (1 >>> 18 !== 0) { - $ERROR('#577: 1 >>> 18 === 0. Actual: ' + (1 >>> 18)); -} - - -if (2 >>> 18 !== 0) { - $ERROR('#578: 2 >>> 18 === 0. Actual: ' + (2 >>> 18)); -} - - -if (4 >>> 18 !== 0) { - $ERROR('#579: 4 >>> 18 === 0. Actual: ' + (4 >>> 18)); -} - - -if (8 >>> 18 !== 0) { - $ERROR('#580: 8 >>> 18 === 0. Actual: ' + (8 >>> 18)); -} - - -if (16 >>> 18 !== 0) { - $ERROR('#581: 16 >>> 18 === 0. Actual: ' + (16 >>> 18)); -} - - -if (32 >>> 18 !== 0) { - $ERROR('#582: 32 >>> 18 === 0. Actual: ' + (32 >>> 18)); -} - - -if (64 >>> 18 !== 0) { - $ERROR('#583: 64 >>> 18 === 0. Actual: ' + (64 >>> 18)); -} - - -if (128 >>> 18 !== 0) { - $ERROR('#584: 128 >>> 18 === 0. Actual: ' + (128 >>> 18)); -} - - -if (256 >>> 18 !== 0) { - $ERROR('#585: 256 >>> 18 === 0. Actual: ' + (256 >>> 18)); -} - - -if (512 >>> 18 !== 0) { - $ERROR('#586: 512 >>> 18 === 0. Actual: ' + (512 >>> 18)); -} - - -if (1024 >>> 18 !== 0) { - $ERROR('#587: 1024 >>> 18 === 0. Actual: ' + (1024 >>> 18)); -} - - -if (2048 >>> 18 !== 0) { - $ERROR('#588: 2048 >>> 18 === 0. Actual: ' + (2048 >>> 18)); -} - - -if (4096 >>> 18 !== 0) { - $ERROR('#589: 4096 >>> 18 === 0. Actual: ' + (4096 >>> 18)); -} - - -if (8192 >>> 18 !== 0) { - $ERROR('#590: 8192 >>> 18 === 0. Actual: ' + (8192 >>> 18)); -} - - -if (16384 >>> 18 !== 0) { - $ERROR('#591: 16384 >>> 18 === 0. Actual: ' + (16384 >>> 18)); -} - - -if (32768 >>> 18 !== 0) { - $ERROR('#592: 32768 >>> 18 === 0. Actual: ' + (32768 >>> 18)); -} - - -if (65536 >>> 18 !== 0) { - $ERROR('#593: 65536 >>> 18 === 0. Actual: ' + (65536 >>> 18)); -} - - -if (131072 >>> 18 !== 0) { - $ERROR('#594: 131072 >>> 18 === 0. Actual: ' + (131072 >>> 18)); -} - - -if (262144 >>> 18 !== 1) { - $ERROR('#595: 262144 >>> 18 === 1. Actual: ' + (262144 >>> 18)); -} - - -if (524288 >>> 18 !== 2) { - $ERROR('#596: 524288 >>> 18 === 2. Actual: ' + (524288 >>> 18)); -} - - -if (1048576 >>> 18 !== 4) { - $ERROR('#597: 1048576 >>> 18 === 4. Actual: ' + (1048576 >>> 18)); -} - - -if (2097152 >>> 18 !== 8) { - $ERROR('#598: 2097152 >>> 18 === 8. Actual: ' + (2097152 >>> 18)); -} - - -if (4194304 >>> 18 !== 16) { - $ERROR('#599: 4194304 >>> 18 === 16. Actual: ' + (4194304 >>> 18)); -} - - -if (8388608 >>> 18 !== 32) { - $ERROR('#600: 8388608 >>> 18 === 32. Actual: ' + (8388608 >>> 18)); -} - - -if (16777216 >>> 18 !== 64) { - $ERROR('#601: 16777216 >>> 18 === 64. Actual: ' + (16777216 >>> 18)); -} - - -if (33554432 >>> 18 !== 128) { - $ERROR('#602: 33554432 >>> 18 === 128. Actual: ' + (33554432 >>> 18)); -} - - -if (67108864 >>> 18 !== 256) { - $ERROR('#603: 67108864 >>> 18 === 256. Actual: ' + (67108864 >>> 18)); -} - - -if (134217728 >>> 18 !== 512) { - $ERROR('#604: 134217728 >>> 18 === 512. Actual: ' + (134217728 >>> 18)); -} - - -if (268435456 >>> 18 !== 1024) { - $ERROR('#605: 268435456 >>> 18 === 1024. Actual: ' + (268435456 >>> 18)); -} - - -if (536870912 >>> 18 !== 2048) { - $ERROR('#606: 536870912 >>> 18 === 2048. Actual: ' + (536870912 >>> 18)); -} - - -if (1073741824 >>> 18 !== 4096) { - $ERROR('#607: 1073741824 >>> 18 === 4096. Actual: ' + (1073741824 >>> 18)); -} - - -if (2147483648 >>> 18 !== 8192) { - $ERROR('#608: 2147483648 >>> 18 === 8192. Actual: ' + (2147483648 >>> 18)); -} - - -if (1 >>> 19 !== 0) { - $ERROR('#609: 1 >>> 19 === 0. Actual: ' + (1 >>> 19)); -} - - -if (2 >>> 19 !== 0) { - $ERROR('#610: 2 >>> 19 === 0. Actual: ' + (2 >>> 19)); -} - - -if (4 >>> 19 !== 0) { - $ERROR('#611: 4 >>> 19 === 0. Actual: ' + (4 >>> 19)); -} - - -if (8 >>> 19 !== 0) { - $ERROR('#612: 8 >>> 19 === 0. Actual: ' + (8 >>> 19)); -} - - -if (16 >>> 19 !== 0) { - $ERROR('#613: 16 >>> 19 === 0. Actual: ' + (16 >>> 19)); -} - - -if (32 >>> 19 !== 0) { - $ERROR('#614: 32 >>> 19 === 0. Actual: ' + (32 >>> 19)); -} - - -if (64 >>> 19 !== 0) { - $ERROR('#615: 64 >>> 19 === 0. Actual: ' + (64 >>> 19)); -} - - -if (128 >>> 19 !== 0) { - $ERROR('#616: 128 >>> 19 === 0. Actual: ' + (128 >>> 19)); -} - - -if (256 >>> 19 !== 0) { - $ERROR('#617: 256 >>> 19 === 0. Actual: ' + (256 >>> 19)); -} - - -if (512 >>> 19 !== 0) { - $ERROR('#618: 512 >>> 19 === 0. Actual: ' + (512 >>> 19)); -} - - -if (1024 >>> 19 !== 0) { - $ERROR('#619: 1024 >>> 19 === 0. Actual: ' + (1024 >>> 19)); -} - - -if (2048 >>> 19 !== 0) { - $ERROR('#620: 2048 >>> 19 === 0. Actual: ' + (2048 >>> 19)); -} - - -if (4096 >>> 19 !== 0) { - $ERROR('#621: 4096 >>> 19 === 0. Actual: ' + (4096 >>> 19)); -} - - -if (8192 >>> 19 !== 0) { - $ERROR('#622: 8192 >>> 19 === 0. Actual: ' + (8192 >>> 19)); -} - - -if (16384 >>> 19 !== 0) { - $ERROR('#623: 16384 >>> 19 === 0. Actual: ' + (16384 >>> 19)); -} - - -if (32768 >>> 19 !== 0) { - $ERROR('#624: 32768 >>> 19 === 0. Actual: ' + (32768 >>> 19)); -} - - -if (65536 >>> 19 !== 0) { - $ERROR('#625: 65536 >>> 19 === 0. Actual: ' + (65536 >>> 19)); -} - - -if (131072 >>> 19 !== 0) { - $ERROR('#626: 131072 >>> 19 === 0. Actual: ' + (131072 >>> 19)); -} - - -if (262144 >>> 19 !== 0) { - $ERROR('#627: 262144 >>> 19 === 0. Actual: ' + (262144 >>> 19)); -} - - -if (524288 >>> 19 !== 1) { - $ERROR('#628: 524288 >>> 19 === 1. Actual: ' + (524288 >>> 19)); -} - - -if (1048576 >>> 19 !== 2) { - $ERROR('#629: 1048576 >>> 19 === 2. Actual: ' + (1048576 >>> 19)); -} - - -if (2097152 >>> 19 !== 4) { - $ERROR('#630: 2097152 >>> 19 === 4. Actual: ' + (2097152 >>> 19)); -} - - -if (4194304 >>> 19 !== 8) { - $ERROR('#631: 4194304 >>> 19 === 8. Actual: ' + (4194304 >>> 19)); -} - - -if (8388608 >>> 19 !== 16) { - $ERROR('#632: 8388608 >>> 19 === 16. Actual: ' + (8388608 >>> 19)); -} - - -if (16777216 >>> 19 !== 32) { - $ERROR('#633: 16777216 >>> 19 === 32. Actual: ' + (16777216 >>> 19)); -} - - -if (33554432 >>> 19 !== 64) { - $ERROR('#634: 33554432 >>> 19 === 64. Actual: ' + (33554432 >>> 19)); -} - - -if (67108864 >>> 19 !== 128) { - $ERROR('#635: 67108864 >>> 19 === 128. Actual: ' + (67108864 >>> 19)); -} - - -if (134217728 >>> 19 !== 256) { - $ERROR('#636: 134217728 >>> 19 === 256. Actual: ' + (134217728 >>> 19)); -} - - -if (268435456 >>> 19 !== 512) { - $ERROR('#637: 268435456 >>> 19 === 512. Actual: ' + (268435456 >>> 19)); -} - - -if (536870912 >>> 19 !== 1024) { - $ERROR('#638: 536870912 >>> 19 === 1024. Actual: ' + (536870912 >>> 19)); -} - - -if (1073741824 >>> 19 !== 2048) { - $ERROR('#639: 1073741824 >>> 19 === 2048. Actual: ' + (1073741824 >>> 19)); -} - - -if (2147483648 >>> 19 !== 4096) { - $ERROR('#640: 2147483648 >>> 19 === 4096. Actual: ' + (2147483648 >>> 19)); -} - - -if (1 >>> 20 !== 0) { - $ERROR('#641: 1 >>> 20 === 0. Actual: ' + (1 >>> 20)); -} - - -if (2 >>> 20 !== 0) { - $ERROR('#642: 2 >>> 20 === 0. Actual: ' + (2 >>> 20)); -} - - -if (4 >>> 20 !== 0) { - $ERROR('#643: 4 >>> 20 === 0. Actual: ' + (4 >>> 20)); -} - - -if (8 >>> 20 !== 0) { - $ERROR('#644: 8 >>> 20 === 0. Actual: ' + (8 >>> 20)); -} - - -if (16 >>> 20 !== 0) { - $ERROR('#645: 16 >>> 20 === 0. Actual: ' + (16 >>> 20)); -} - - -if (32 >>> 20 !== 0) { - $ERROR('#646: 32 >>> 20 === 0. Actual: ' + (32 >>> 20)); -} - - -if (64 >>> 20 !== 0) { - $ERROR('#647: 64 >>> 20 === 0. Actual: ' + (64 >>> 20)); -} - - -if (128 >>> 20 !== 0) { - $ERROR('#648: 128 >>> 20 === 0. Actual: ' + (128 >>> 20)); -} - - -if (256 >>> 20 !== 0) { - $ERROR('#649: 256 >>> 20 === 0. Actual: ' + (256 >>> 20)); -} - - -if (512 >>> 20 !== 0) { - $ERROR('#650: 512 >>> 20 === 0. Actual: ' + (512 >>> 20)); -} - - -if (1024 >>> 20 !== 0) { - $ERROR('#651: 1024 >>> 20 === 0. Actual: ' + (1024 >>> 20)); -} - - -if (2048 >>> 20 !== 0) { - $ERROR('#652: 2048 >>> 20 === 0. Actual: ' + (2048 >>> 20)); -} - - -if (4096 >>> 20 !== 0) { - $ERROR('#653: 4096 >>> 20 === 0. Actual: ' + (4096 >>> 20)); -} - - -if (8192 >>> 20 !== 0) { - $ERROR('#654: 8192 >>> 20 === 0. Actual: ' + (8192 >>> 20)); -} - - -if (16384 >>> 20 !== 0) { - $ERROR('#655: 16384 >>> 20 === 0. Actual: ' + (16384 >>> 20)); -} - - -if (32768 >>> 20 !== 0) { - $ERROR('#656: 32768 >>> 20 === 0. Actual: ' + (32768 >>> 20)); -} - - -if (65536 >>> 20 !== 0) { - $ERROR('#657: 65536 >>> 20 === 0. Actual: ' + (65536 >>> 20)); -} - - -if (131072 >>> 20 !== 0) { - $ERROR('#658: 131072 >>> 20 === 0. Actual: ' + (131072 >>> 20)); -} - - -if (262144 >>> 20 !== 0) { - $ERROR('#659: 262144 >>> 20 === 0. Actual: ' + (262144 >>> 20)); -} - - -if (524288 >>> 20 !== 0) { - $ERROR('#660: 524288 >>> 20 === 0. Actual: ' + (524288 >>> 20)); -} - - -if (1048576 >>> 20 !== 1) { - $ERROR('#661: 1048576 >>> 20 === 1. Actual: ' + (1048576 >>> 20)); -} - - -if (2097152 >>> 20 !== 2) { - $ERROR('#662: 2097152 >>> 20 === 2. Actual: ' + (2097152 >>> 20)); -} - - -if (4194304 >>> 20 !== 4) { - $ERROR('#663: 4194304 >>> 20 === 4. Actual: ' + (4194304 >>> 20)); -} - - -if (8388608 >>> 20 !== 8) { - $ERROR('#664: 8388608 >>> 20 === 8. Actual: ' + (8388608 >>> 20)); -} - - -if (16777216 >>> 20 !== 16) { - $ERROR('#665: 16777216 >>> 20 === 16. Actual: ' + (16777216 >>> 20)); -} - - -if (33554432 >>> 20 !== 32) { - $ERROR('#666: 33554432 >>> 20 === 32. Actual: ' + (33554432 >>> 20)); -} - - -if (67108864 >>> 20 !== 64) { - $ERROR('#667: 67108864 >>> 20 === 64. Actual: ' + (67108864 >>> 20)); -} - - -if (134217728 >>> 20 !== 128) { - $ERROR('#668: 134217728 >>> 20 === 128. Actual: ' + (134217728 >>> 20)); -} - - -if (268435456 >>> 20 !== 256) { - $ERROR('#669: 268435456 >>> 20 === 256. Actual: ' + (268435456 >>> 20)); -} - - -if (536870912 >>> 20 !== 512) { - $ERROR('#670: 536870912 >>> 20 === 512. Actual: ' + (536870912 >>> 20)); -} - - -if (1073741824 >>> 20 !== 1024) { - $ERROR('#671: 1073741824 >>> 20 === 1024. Actual: ' + (1073741824 >>> 20)); -} - - -if (2147483648 >>> 20 !== 2048) { - $ERROR('#672: 2147483648 >>> 20 === 2048. Actual: ' + (2147483648 >>> 20)); -} - - -if (1 >>> 21 !== 0) { - $ERROR('#673: 1 >>> 21 === 0. Actual: ' + (1 >>> 21)); -} - - -if (2 >>> 21 !== 0) { - $ERROR('#674: 2 >>> 21 === 0. Actual: ' + (2 >>> 21)); -} - - -if (4 >>> 21 !== 0) { - $ERROR('#675: 4 >>> 21 === 0. Actual: ' + (4 >>> 21)); -} - - -if (8 >>> 21 !== 0) { - $ERROR('#676: 8 >>> 21 === 0. Actual: ' + (8 >>> 21)); -} - - -if (16 >>> 21 !== 0) { - $ERROR('#677: 16 >>> 21 === 0. Actual: ' + (16 >>> 21)); -} - - -if (32 >>> 21 !== 0) { - $ERROR('#678: 32 >>> 21 === 0. Actual: ' + (32 >>> 21)); -} - - -if (64 >>> 21 !== 0) { - $ERROR('#679: 64 >>> 21 === 0. Actual: ' + (64 >>> 21)); -} - - -if (128 >>> 21 !== 0) { - $ERROR('#680: 128 >>> 21 === 0. Actual: ' + (128 >>> 21)); -} - - -if (256 >>> 21 !== 0) { - $ERROR('#681: 256 >>> 21 === 0. Actual: ' + (256 >>> 21)); -} - - -if (512 >>> 21 !== 0) { - $ERROR('#682: 512 >>> 21 === 0. Actual: ' + (512 >>> 21)); -} - - -if (1024 >>> 21 !== 0) { - $ERROR('#683: 1024 >>> 21 === 0. Actual: ' + (1024 >>> 21)); -} - - -if (2048 >>> 21 !== 0) { - $ERROR('#684: 2048 >>> 21 === 0. Actual: ' + (2048 >>> 21)); -} - - -if (4096 >>> 21 !== 0) { - $ERROR('#685: 4096 >>> 21 === 0. Actual: ' + (4096 >>> 21)); -} - - -if (8192 >>> 21 !== 0) { - $ERROR('#686: 8192 >>> 21 === 0. Actual: ' + (8192 >>> 21)); -} - - -if (16384 >>> 21 !== 0) { - $ERROR('#687: 16384 >>> 21 === 0. Actual: ' + (16384 >>> 21)); -} - - -if (32768 >>> 21 !== 0) { - $ERROR('#688: 32768 >>> 21 === 0. Actual: ' + (32768 >>> 21)); -} - - -if (65536 >>> 21 !== 0) { - $ERROR('#689: 65536 >>> 21 === 0. Actual: ' + (65536 >>> 21)); -} - - -if (131072 >>> 21 !== 0) { - $ERROR('#690: 131072 >>> 21 === 0. Actual: ' + (131072 >>> 21)); -} - - -if (262144 >>> 21 !== 0) { - $ERROR('#691: 262144 >>> 21 === 0. Actual: ' + (262144 >>> 21)); -} - - -if (524288 >>> 21 !== 0) { - $ERROR('#692: 524288 >>> 21 === 0. Actual: ' + (524288 >>> 21)); -} - - -if (1048576 >>> 21 !== 0) { - $ERROR('#693: 1048576 >>> 21 === 0. Actual: ' + (1048576 >>> 21)); -} - - -if (2097152 >>> 21 !== 1) { - $ERROR('#694: 2097152 >>> 21 === 1. Actual: ' + (2097152 >>> 21)); -} - - -if (4194304 >>> 21 !== 2) { - $ERROR('#695: 4194304 >>> 21 === 2. Actual: ' + (4194304 >>> 21)); -} - - -if (8388608 >>> 21 !== 4) { - $ERROR('#696: 8388608 >>> 21 === 4. Actual: ' + (8388608 >>> 21)); -} - - -if (16777216 >>> 21 !== 8) { - $ERROR('#697: 16777216 >>> 21 === 8. Actual: ' + (16777216 >>> 21)); -} - - -if (33554432 >>> 21 !== 16) { - $ERROR('#698: 33554432 >>> 21 === 16. Actual: ' + (33554432 >>> 21)); -} - - -if (67108864 >>> 21 !== 32) { - $ERROR('#699: 67108864 >>> 21 === 32. Actual: ' + (67108864 >>> 21)); -} - - -if (134217728 >>> 21 !== 64) { - $ERROR('#700: 134217728 >>> 21 === 64. Actual: ' + (134217728 >>> 21)); -} - - -if (268435456 >>> 21 !== 128) { - $ERROR('#701: 268435456 >>> 21 === 128. Actual: ' + (268435456 >>> 21)); -} - - -if (536870912 >>> 21 !== 256) { - $ERROR('#702: 536870912 >>> 21 === 256. Actual: ' + (536870912 >>> 21)); -} - - -if (1073741824 >>> 21 !== 512) { - $ERROR('#703: 1073741824 >>> 21 === 512. Actual: ' + (1073741824 >>> 21)); -} - - -if (2147483648 >>> 21 !== 1024) { - $ERROR('#704: 2147483648 >>> 21 === 1024. Actual: ' + (2147483648 >>> 21)); -} - - -if (1 >>> 22 !== 0) { - $ERROR('#705: 1 >>> 22 === 0. Actual: ' + (1 >>> 22)); -} - - -if (2 >>> 22 !== 0) { - $ERROR('#706: 2 >>> 22 === 0. Actual: ' + (2 >>> 22)); -} - - -if (4 >>> 22 !== 0) { - $ERROR('#707: 4 >>> 22 === 0. Actual: ' + (4 >>> 22)); -} - - -if (8 >>> 22 !== 0) { - $ERROR('#708: 8 >>> 22 === 0. Actual: ' + (8 >>> 22)); -} - - -if (16 >>> 22 !== 0) { - $ERROR('#709: 16 >>> 22 === 0. Actual: ' + (16 >>> 22)); -} - - -if (32 >>> 22 !== 0) { - $ERROR('#710: 32 >>> 22 === 0. Actual: ' + (32 >>> 22)); -} - - -if (64 >>> 22 !== 0) { - $ERROR('#711: 64 >>> 22 === 0. Actual: ' + (64 >>> 22)); -} - - -if (128 >>> 22 !== 0) { - $ERROR('#712: 128 >>> 22 === 0. Actual: ' + (128 >>> 22)); -} - - -if (256 >>> 22 !== 0) { - $ERROR('#713: 256 >>> 22 === 0. Actual: ' + (256 >>> 22)); -} - - -if (512 >>> 22 !== 0) { - $ERROR('#714: 512 >>> 22 === 0. Actual: ' + (512 >>> 22)); -} - - -if (1024 >>> 22 !== 0) { - $ERROR('#715: 1024 >>> 22 === 0. Actual: ' + (1024 >>> 22)); -} - - -if (2048 >>> 22 !== 0) { - $ERROR('#716: 2048 >>> 22 === 0. Actual: ' + (2048 >>> 22)); -} - - -if (4096 >>> 22 !== 0) { - $ERROR('#717: 4096 >>> 22 === 0. Actual: ' + (4096 >>> 22)); -} - - -if (8192 >>> 22 !== 0) { - $ERROR('#718: 8192 >>> 22 === 0. Actual: ' + (8192 >>> 22)); -} - - -if (16384 >>> 22 !== 0) { - $ERROR('#719: 16384 >>> 22 === 0. Actual: ' + (16384 >>> 22)); -} - - -if (32768 >>> 22 !== 0) { - $ERROR('#720: 32768 >>> 22 === 0. Actual: ' + (32768 >>> 22)); -} - - -if (65536 >>> 22 !== 0) { - $ERROR('#721: 65536 >>> 22 === 0. Actual: ' + (65536 >>> 22)); -} - - -if (131072 >>> 22 !== 0) { - $ERROR('#722: 131072 >>> 22 === 0. Actual: ' + (131072 >>> 22)); -} - - -if (262144 >>> 22 !== 0) { - $ERROR('#723: 262144 >>> 22 === 0. Actual: ' + (262144 >>> 22)); -} - - -if (524288 >>> 22 !== 0) { - $ERROR('#724: 524288 >>> 22 === 0. Actual: ' + (524288 >>> 22)); -} - - -if (1048576 >>> 22 !== 0) { - $ERROR('#725: 1048576 >>> 22 === 0. Actual: ' + (1048576 >>> 22)); -} - - -if (2097152 >>> 22 !== 0) { - $ERROR('#726: 2097152 >>> 22 === 0. Actual: ' + (2097152 >>> 22)); -} - - -if (4194304 >>> 22 !== 1) { - $ERROR('#727: 4194304 >>> 22 === 1. Actual: ' + (4194304 >>> 22)); -} - - -if (8388608 >>> 22 !== 2) { - $ERROR('#728: 8388608 >>> 22 === 2. Actual: ' + (8388608 >>> 22)); -} - - -if (16777216 >>> 22 !== 4) { - $ERROR('#729: 16777216 >>> 22 === 4. Actual: ' + (16777216 >>> 22)); -} - - -if (33554432 >>> 22 !== 8) { - $ERROR('#730: 33554432 >>> 22 === 8. Actual: ' + (33554432 >>> 22)); -} - - -if (67108864 >>> 22 !== 16) { - $ERROR('#731: 67108864 >>> 22 === 16. Actual: ' + (67108864 >>> 22)); -} - - -if (134217728 >>> 22 !== 32) { - $ERROR('#732: 134217728 >>> 22 === 32. Actual: ' + (134217728 >>> 22)); -} - - -if (268435456 >>> 22 !== 64) { - $ERROR('#733: 268435456 >>> 22 === 64. Actual: ' + (268435456 >>> 22)); -} - - -if (536870912 >>> 22 !== 128) { - $ERROR('#734: 536870912 >>> 22 === 128. Actual: ' + (536870912 >>> 22)); -} - - -if (1073741824 >>> 22 !== 256) { - $ERROR('#735: 1073741824 >>> 22 === 256. Actual: ' + (1073741824 >>> 22)); -} - - -if (2147483648 >>> 22 !== 512) { - $ERROR('#736: 2147483648 >>> 22 === 512. Actual: ' + (2147483648 >>> 22)); -} - - -if (1 >>> 23 !== 0) { - $ERROR('#737: 1 >>> 23 === 0. Actual: ' + (1 >>> 23)); -} - - -if (2 >>> 23 !== 0) { - $ERROR('#738: 2 >>> 23 === 0. Actual: ' + (2 >>> 23)); -} - - -if (4 >>> 23 !== 0) { - $ERROR('#739: 4 >>> 23 === 0. Actual: ' + (4 >>> 23)); -} - - -if (8 >>> 23 !== 0) { - $ERROR('#740: 8 >>> 23 === 0. Actual: ' + (8 >>> 23)); -} - - -if (16 >>> 23 !== 0) { - $ERROR('#741: 16 >>> 23 === 0. Actual: ' + (16 >>> 23)); -} - - -if (32 >>> 23 !== 0) { - $ERROR('#742: 32 >>> 23 === 0. Actual: ' + (32 >>> 23)); -} - - -if (64 >>> 23 !== 0) { - $ERROR('#743: 64 >>> 23 === 0. Actual: ' + (64 >>> 23)); -} - - -if (128 >>> 23 !== 0) { - $ERROR('#744: 128 >>> 23 === 0. Actual: ' + (128 >>> 23)); -} - - -if (256 >>> 23 !== 0) { - $ERROR('#745: 256 >>> 23 === 0. Actual: ' + (256 >>> 23)); -} - - -if (512 >>> 23 !== 0) { - $ERROR('#746: 512 >>> 23 === 0. Actual: ' + (512 >>> 23)); -} - - -if (1024 >>> 23 !== 0) { - $ERROR('#747: 1024 >>> 23 === 0. Actual: ' + (1024 >>> 23)); -} - - -if (2048 >>> 23 !== 0) { - $ERROR('#748: 2048 >>> 23 === 0. Actual: ' + (2048 >>> 23)); -} - - -if (4096 >>> 23 !== 0) { - $ERROR('#749: 4096 >>> 23 === 0. Actual: ' + (4096 >>> 23)); -} - - -if (8192 >>> 23 !== 0) { - $ERROR('#750: 8192 >>> 23 === 0. Actual: ' + (8192 >>> 23)); -} - - -if (16384 >>> 23 !== 0) { - $ERROR('#751: 16384 >>> 23 === 0. Actual: ' + (16384 >>> 23)); -} - - -if (32768 >>> 23 !== 0) { - $ERROR('#752: 32768 >>> 23 === 0. Actual: ' + (32768 >>> 23)); -} - - -if (65536 >>> 23 !== 0) { - $ERROR('#753: 65536 >>> 23 === 0. Actual: ' + (65536 >>> 23)); -} - - -if (131072 >>> 23 !== 0) { - $ERROR('#754: 131072 >>> 23 === 0. Actual: ' + (131072 >>> 23)); -} - - -if (262144 >>> 23 !== 0) { - $ERROR('#755: 262144 >>> 23 === 0. Actual: ' + (262144 >>> 23)); -} - - -if (524288 >>> 23 !== 0) { - $ERROR('#756: 524288 >>> 23 === 0. Actual: ' + (524288 >>> 23)); -} - - -if (1048576 >>> 23 !== 0) { - $ERROR('#757: 1048576 >>> 23 === 0. Actual: ' + (1048576 >>> 23)); -} - - -if (2097152 >>> 23 !== 0) { - $ERROR('#758: 2097152 >>> 23 === 0. Actual: ' + (2097152 >>> 23)); -} - - -if (4194304 >>> 23 !== 0) { - $ERROR('#759: 4194304 >>> 23 === 0. Actual: ' + (4194304 >>> 23)); -} - - -if (8388608 >>> 23 !== 1) { - $ERROR('#760: 8388608 >>> 23 === 1. Actual: ' + (8388608 >>> 23)); -} - - -if (16777216 >>> 23 !== 2) { - $ERROR('#761: 16777216 >>> 23 === 2. Actual: ' + (16777216 >>> 23)); -} - - -if (33554432 >>> 23 !== 4) { - $ERROR('#762: 33554432 >>> 23 === 4. Actual: ' + (33554432 >>> 23)); -} - - -if (67108864 >>> 23 !== 8) { - $ERROR('#763: 67108864 >>> 23 === 8. Actual: ' + (67108864 >>> 23)); -} - - -if (134217728 >>> 23 !== 16) { - $ERROR('#764: 134217728 >>> 23 === 16. Actual: ' + (134217728 >>> 23)); -} - - -if (268435456 >>> 23 !== 32) { - $ERROR('#765: 268435456 >>> 23 === 32. Actual: ' + (268435456 >>> 23)); -} - - -if (536870912 >>> 23 !== 64) { - $ERROR('#766: 536870912 >>> 23 === 64. Actual: ' + (536870912 >>> 23)); -} - - -if (1073741824 >>> 23 !== 128) { - $ERROR('#767: 1073741824 >>> 23 === 128. Actual: ' + (1073741824 >>> 23)); -} - - -if (2147483648 >>> 23 !== 256) { - $ERROR('#768: 2147483648 >>> 23 === 256. Actual: ' + (2147483648 >>> 23)); -} - - -if (1 >>> 24 !== 0) { - $ERROR('#769: 1 >>> 24 === 0. Actual: ' + (1 >>> 24)); -} - - -if (2 >>> 24 !== 0) { - $ERROR('#770: 2 >>> 24 === 0. Actual: ' + (2 >>> 24)); -} - - -if (4 >>> 24 !== 0) { - $ERROR('#771: 4 >>> 24 === 0. Actual: ' + (4 >>> 24)); -} - - -if (8 >>> 24 !== 0) { - $ERROR('#772: 8 >>> 24 === 0. Actual: ' + (8 >>> 24)); -} - - -if (16 >>> 24 !== 0) { - $ERROR('#773: 16 >>> 24 === 0. Actual: ' + (16 >>> 24)); -} - - -if (32 >>> 24 !== 0) { - $ERROR('#774: 32 >>> 24 === 0. Actual: ' + (32 >>> 24)); -} - - -if (64 >>> 24 !== 0) { - $ERROR('#775: 64 >>> 24 === 0. Actual: ' + (64 >>> 24)); -} - - -if (128 >>> 24 !== 0) { - $ERROR('#776: 128 >>> 24 === 0. Actual: ' + (128 >>> 24)); -} - - -if (256 >>> 24 !== 0) { - $ERROR('#777: 256 >>> 24 === 0. Actual: ' + (256 >>> 24)); -} - - -if (512 >>> 24 !== 0) { - $ERROR('#778: 512 >>> 24 === 0. Actual: ' + (512 >>> 24)); -} - - -if (1024 >>> 24 !== 0) { - $ERROR('#779: 1024 >>> 24 === 0. Actual: ' + (1024 >>> 24)); -} - - -if (2048 >>> 24 !== 0) { - $ERROR('#780: 2048 >>> 24 === 0. Actual: ' + (2048 >>> 24)); -} - - -if (4096 >>> 24 !== 0) { - $ERROR('#781: 4096 >>> 24 === 0. Actual: ' + (4096 >>> 24)); -} - - -if (8192 >>> 24 !== 0) { - $ERROR('#782: 8192 >>> 24 === 0. Actual: ' + (8192 >>> 24)); -} - - -if (16384 >>> 24 !== 0) { - $ERROR('#783: 16384 >>> 24 === 0. Actual: ' + (16384 >>> 24)); -} - - -if (32768 >>> 24 !== 0) { - $ERROR('#784: 32768 >>> 24 === 0. Actual: ' + (32768 >>> 24)); -} - - -if (65536 >>> 24 !== 0) { - $ERROR('#785: 65536 >>> 24 === 0. Actual: ' + (65536 >>> 24)); -} - - -if (131072 >>> 24 !== 0) { - $ERROR('#786: 131072 >>> 24 === 0. Actual: ' + (131072 >>> 24)); -} - - -if (262144 >>> 24 !== 0) { - $ERROR('#787: 262144 >>> 24 === 0. Actual: ' + (262144 >>> 24)); -} - - -if (524288 >>> 24 !== 0) { - $ERROR('#788: 524288 >>> 24 === 0. Actual: ' + (524288 >>> 24)); -} - - -if (1048576 >>> 24 !== 0) { - $ERROR('#789: 1048576 >>> 24 === 0. Actual: ' + (1048576 >>> 24)); -} - - -if (2097152 >>> 24 !== 0) { - $ERROR('#790: 2097152 >>> 24 === 0. Actual: ' + (2097152 >>> 24)); -} - - -if (4194304 >>> 24 !== 0) { - $ERROR('#791: 4194304 >>> 24 === 0. Actual: ' + (4194304 >>> 24)); -} - - -if (8388608 >>> 24 !== 0) { - $ERROR('#792: 8388608 >>> 24 === 0. Actual: ' + (8388608 >>> 24)); -} - - -if (16777216 >>> 24 !== 1) { - $ERROR('#793: 16777216 >>> 24 === 1. Actual: ' + (16777216 >>> 24)); -} - - -if (33554432 >>> 24 !== 2) { - $ERROR('#794: 33554432 >>> 24 === 2. Actual: ' + (33554432 >>> 24)); -} - - -if (67108864 >>> 24 !== 4) { - $ERROR('#795: 67108864 >>> 24 === 4. Actual: ' + (67108864 >>> 24)); -} - - -if (134217728 >>> 24 !== 8) { - $ERROR('#796: 134217728 >>> 24 === 8. Actual: ' + (134217728 >>> 24)); -} - - -if (268435456 >>> 24 !== 16) { - $ERROR('#797: 268435456 >>> 24 === 16. Actual: ' + (268435456 >>> 24)); -} - - -if (536870912 >>> 24 !== 32) { - $ERROR('#798: 536870912 >>> 24 === 32. Actual: ' + (536870912 >>> 24)); -} - - -if (1073741824 >>> 24 !== 64) { - $ERROR('#799: 1073741824 >>> 24 === 64. Actual: ' + (1073741824 >>> 24)); -} - - -if (2147483648 >>> 24 !== 128) { - $ERROR('#800: 2147483648 >>> 24 === 128. Actual: ' + (2147483648 >>> 24)); -} - - -if (1 >>> 25 !== 0) { - $ERROR('#801: 1 >>> 25 === 0. Actual: ' + (1 >>> 25)); -} - - -if (2 >>> 25 !== 0) { - $ERROR('#802: 2 >>> 25 === 0. Actual: ' + (2 >>> 25)); -} - - -if (4 >>> 25 !== 0) { - $ERROR('#803: 4 >>> 25 === 0. Actual: ' + (4 >>> 25)); -} - - -if (8 >>> 25 !== 0) { - $ERROR('#804: 8 >>> 25 === 0. Actual: ' + (8 >>> 25)); -} - - -if (16 >>> 25 !== 0) { - $ERROR('#805: 16 >>> 25 === 0. Actual: ' + (16 >>> 25)); -} - - -if (32 >>> 25 !== 0) { - $ERROR('#806: 32 >>> 25 === 0. Actual: ' + (32 >>> 25)); -} - - -if (64 >>> 25 !== 0) { - $ERROR('#807: 64 >>> 25 === 0. Actual: ' + (64 >>> 25)); -} - - -if (128 >>> 25 !== 0) { - $ERROR('#808: 128 >>> 25 === 0. Actual: ' + (128 >>> 25)); -} - - -if (256 >>> 25 !== 0) { - $ERROR('#809: 256 >>> 25 === 0. Actual: ' + (256 >>> 25)); -} - - -if (512 >>> 25 !== 0) { - $ERROR('#810: 512 >>> 25 === 0. Actual: ' + (512 >>> 25)); -} - - -if (1024 >>> 25 !== 0) { - $ERROR('#811: 1024 >>> 25 === 0. Actual: ' + (1024 >>> 25)); -} - - -if (2048 >>> 25 !== 0) { - $ERROR('#812: 2048 >>> 25 === 0. Actual: ' + (2048 >>> 25)); -} - - -if (4096 >>> 25 !== 0) { - $ERROR('#813: 4096 >>> 25 === 0. Actual: ' + (4096 >>> 25)); -} - - -if (8192 >>> 25 !== 0) { - $ERROR('#814: 8192 >>> 25 === 0. Actual: ' + (8192 >>> 25)); -} - - -if (16384 >>> 25 !== 0) { - $ERROR('#815: 16384 >>> 25 === 0. Actual: ' + (16384 >>> 25)); -} - - -if (32768 >>> 25 !== 0) { - $ERROR('#816: 32768 >>> 25 === 0. Actual: ' + (32768 >>> 25)); -} - - -if (65536 >>> 25 !== 0) { - $ERROR('#817: 65536 >>> 25 === 0. Actual: ' + (65536 >>> 25)); -} - - -if (131072 >>> 25 !== 0) { - $ERROR('#818: 131072 >>> 25 === 0. Actual: ' + (131072 >>> 25)); -} - - -if (262144 >>> 25 !== 0) { - $ERROR('#819: 262144 >>> 25 === 0. Actual: ' + (262144 >>> 25)); -} - - -if (524288 >>> 25 !== 0) { - $ERROR('#820: 524288 >>> 25 === 0. Actual: ' + (524288 >>> 25)); -} - - -if (1048576 >>> 25 !== 0) { - $ERROR('#821: 1048576 >>> 25 === 0. Actual: ' + (1048576 >>> 25)); -} - - -if (2097152 >>> 25 !== 0) { - $ERROR('#822: 2097152 >>> 25 === 0. Actual: ' + (2097152 >>> 25)); -} - - -if (4194304 >>> 25 !== 0) { - $ERROR('#823: 4194304 >>> 25 === 0. Actual: ' + (4194304 >>> 25)); -} - - -if (8388608 >>> 25 !== 0) { - $ERROR('#824: 8388608 >>> 25 === 0. Actual: ' + (8388608 >>> 25)); -} - - -if (16777216 >>> 25 !== 0) { - $ERROR('#825: 16777216 >>> 25 === 0. Actual: ' + (16777216 >>> 25)); -} - - -if (33554432 >>> 25 !== 1) { - $ERROR('#826: 33554432 >>> 25 === 1. Actual: ' + (33554432 >>> 25)); -} - - -if (67108864 >>> 25 !== 2) { - $ERROR('#827: 67108864 >>> 25 === 2. Actual: ' + (67108864 >>> 25)); -} - - -if (134217728 >>> 25 !== 4) { - $ERROR('#828: 134217728 >>> 25 === 4. Actual: ' + (134217728 >>> 25)); -} - - -if (268435456 >>> 25 !== 8) { - $ERROR('#829: 268435456 >>> 25 === 8. Actual: ' + (268435456 >>> 25)); -} - - -if (536870912 >>> 25 !== 16) { - $ERROR('#830: 536870912 >>> 25 === 16. Actual: ' + (536870912 >>> 25)); -} - - -if (1073741824 >>> 25 !== 32) { - $ERROR('#831: 1073741824 >>> 25 === 32. Actual: ' + (1073741824 >>> 25)); -} - - -if (2147483648 >>> 25 !== 64) { - $ERROR('#832: 2147483648 >>> 25 === 64. Actual: ' + (2147483648 >>> 25)); -} - - -if (1 >>> 26 !== 0) { - $ERROR('#833: 1 >>> 26 === 0. Actual: ' + (1 >>> 26)); -} - - -if (2 >>> 26 !== 0) { - $ERROR('#834: 2 >>> 26 === 0. Actual: ' + (2 >>> 26)); -} - - -if (4 >>> 26 !== 0) { - $ERROR('#835: 4 >>> 26 === 0. Actual: ' + (4 >>> 26)); -} - - -if (8 >>> 26 !== 0) { - $ERROR('#836: 8 >>> 26 === 0. Actual: ' + (8 >>> 26)); -} - - -if (16 >>> 26 !== 0) { - $ERROR('#837: 16 >>> 26 === 0. Actual: ' + (16 >>> 26)); -} - - -if (32 >>> 26 !== 0) { - $ERROR('#838: 32 >>> 26 === 0. Actual: ' + (32 >>> 26)); -} - - -if (64 >>> 26 !== 0) { - $ERROR('#839: 64 >>> 26 === 0. Actual: ' + (64 >>> 26)); -} - - -if (128 >>> 26 !== 0) { - $ERROR('#840: 128 >>> 26 === 0. Actual: ' + (128 >>> 26)); -} - - -if (256 >>> 26 !== 0) { - $ERROR('#841: 256 >>> 26 === 0. Actual: ' + (256 >>> 26)); -} - - -if (512 >>> 26 !== 0) { - $ERROR('#842: 512 >>> 26 === 0. Actual: ' + (512 >>> 26)); -} - - -if (1024 >>> 26 !== 0) { - $ERROR('#843: 1024 >>> 26 === 0. Actual: ' + (1024 >>> 26)); -} - - -if (2048 >>> 26 !== 0) { - $ERROR('#844: 2048 >>> 26 === 0. Actual: ' + (2048 >>> 26)); -} - - -if (4096 >>> 26 !== 0) { - $ERROR('#845: 4096 >>> 26 === 0. Actual: ' + (4096 >>> 26)); -} - - -if (8192 >>> 26 !== 0) { - $ERROR('#846: 8192 >>> 26 === 0. Actual: ' + (8192 >>> 26)); -} - - -if (16384 >>> 26 !== 0) { - $ERROR('#847: 16384 >>> 26 === 0. Actual: ' + (16384 >>> 26)); -} - - -if (32768 >>> 26 !== 0) { - $ERROR('#848: 32768 >>> 26 === 0. Actual: ' + (32768 >>> 26)); -} - - -if (65536 >>> 26 !== 0) { - $ERROR('#849: 65536 >>> 26 === 0. Actual: ' + (65536 >>> 26)); -} - - -if (131072 >>> 26 !== 0) { - $ERROR('#850: 131072 >>> 26 === 0. Actual: ' + (131072 >>> 26)); -} - - -if (262144 >>> 26 !== 0) { - $ERROR('#851: 262144 >>> 26 === 0. Actual: ' + (262144 >>> 26)); -} - - -if (524288 >>> 26 !== 0) { - $ERROR('#852: 524288 >>> 26 === 0. Actual: ' + (524288 >>> 26)); -} - - -if (1048576 >>> 26 !== 0) { - $ERROR('#853: 1048576 >>> 26 === 0. Actual: ' + (1048576 >>> 26)); -} - - -if (2097152 >>> 26 !== 0) { - $ERROR('#854: 2097152 >>> 26 === 0. Actual: ' + (2097152 >>> 26)); -} - - -if (4194304 >>> 26 !== 0) { - $ERROR('#855: 4194304 >>> 26 === 0. Actual: ' + (4194304 >>> 26)); -} - - -if (8388608 >>> 26 !== 0) { - $ERROR('#856: 8388608 >>> 26 === 0. Actual: ' + (8388608 >>> 26)); -} - - -if (16777216 >>> 26 !== 0) { - $ERROR('#857: 16777216 >>> 26 === 0. Actual: ' + (16777216 >>> 26)); -} - - -if (33554432 >>> 26 !== 0) { - $ERROR('#858: 33554432 >>> 26 === 0. Actual: ' + (33554432 >>> 26)); -} - - -if (67108864 >>> 26 !== 1) { - $ERROR('#859: 67108864 >>> 26 === 1. Actual: ' + (67108864 >>> 26)); -} - - -if (134217728 >>> 26 !== 2) { - $ERROR('#860: 134217728 >>> 26 === 2. Actual: ' + (134217728 >>> 26)); -} - - -if (268435456 >>> 26 !== 4) { - $ERROR('#861: 268435456 >>> 26 === 4. Actual: ' + (268435456 >>> 26)); -} - - -if (536870912 >>> 26 !== 8) { - $ERROR('#862: 536870912 >>> 26 === 8. Actual: ' + (536870912 >>> 26)); -} - - -if (1073741824 >>> 26 !== 16) { - $ERROR('#863: 1073741824 >>> 26 === 16. Actual: ' + (1073741824 >>> 26)); -} - - -if (2147483648 >>> 26 !== 32) { - $ERROR('#864: 2147483648 >>> 26 === 32. Actual: ' + (2147483648 >>> 26)); -} - - -if (1 >>> 27 !== 0) { - $ERROR('#865: 1 >>> 27 === 0. Actual: ' + (1 >>> 27)); -} - - -if (2 >>> 27 !== 0) { - $ERROR('#866: 2 >>> 27 === 0. Actual: ' + (2 >>> 27)); -} - - -if (4 >>> 27 !== 0) { - $ERROR('#867: 4 >>> 27 === 0. Actual: ' + (4 >>> 27)); -} - - -if (8 >>> 27 !== 0) { - $ERROR('#868: 8 >>> 27 === 0. Actual: ' + (8 >>> 27)); -} - - -if (16 >>> 27 !== 0) { - $ERROR('#869: 16 >>> 27 === 0. Actual: ' + (16 >>> 27)); -} - - -if (32 >>> 27 !== 0) { - $ERROR('#870: 32 >>> 27 === 0. Actual: ' + (32 >>> 27)); -} - - -if (64 >>> 27 !== 0) { - $ERROR('#871: 64 >>> 27 === 0. Actual: ' + (64 >>> 27)); -} - - -if (128 >>> 27 !== 0) { - $ERROR('#872: 128 >>> 27 === 0. Actual: ' + (128 >>> 27)); -} - - -if (256 >>> 27 !== 0) { - $ERROR('#873: 256 >>> 27 === 0. Actual: ' + (256 >>> 27)); -} - - -if (512 >>> 27 !== 0) { - $ERROR('#874: 512 >>> 27 === 0. Actual: ' + (512 >>> 27)); -} - - -if (1024 >>> 27 !== 0) { - $ERROR('#875: 1024 >>> 27 === 0. Actual: ' + (1024 >>> 27)); -} - - -if (2048 >>> 27 !== 0) { - $ERROR('#876: 2048 >>> 27 === 0. Actual: ' + (2048 >>> 27)); -} - - -if (4096 >>> 27 !== 0) { - $ERROR('#877: 4096 >>> 27 === 0. Actual: ' + (4096 >>> 27)); -} - - -if (8192 >>> 27 !== 0) { - $ERROR('#878: 8192 >>> 27 === 0. Actual: ' + (8192 >>> 27)); -} - - -if (16384 >>> 27 !== 0) { - $ERROR('#879: 16384 >>> 27 === 0. Actual: ' + (16384 >>> 27)); -} - - -if (32768 >>> 27 !== 0) { - $ERROR('#880: 32768 >>> 27 === 0. Actual: ' + (32768 >>> 27)); -} - - -if (65536 >>> 27 !== 0) { - $ERROR('#881: 65536 >>> 27 === 0. Actual: ' + (65536 >>> 27)); -} - - -if (131072 >>> 27 !== 0) { - $ERROR('#882: 131072 >>> 27 === 0. Actual: ' + (131072 >>> 27)); -} - - -if (262144 >>> 27 !== 0) { - $ERROR('#883: 262144 >>> 27 === 0. Actual: ' + (262144 >>> 27)); -} - - -if (524288 >>> 27 !== 0) { - $ERROR('#884: 524288 >>> 27 === 0. Actual: ' + (524288 >>> 27)); -} - - -if (1048576 >>> 27 !== 0) { - $ERROR('#885: 1048576 >>> 27 === 0. Actual: ' + (1048576 >>> 27)); -} - - -if (2097152 >>> 27 !== 0) { - $ERROR('#886: 2097152 >>> 27 === 0. Actual: ' + (2097152 >>> 27)); -} - - -if (4194304 >>> 27 !== 0) { - $ERROR('#887: 4194304 >>> 27 === 0. Actual: ' + (4194304 >>> 27)); -} - - -if (8388608 >>> 27 !== 0) { - $ERROR('#888: 8388608 >>> 27 === 0. Actual: ' + (8388608 >>> 27)); -} - - -if (16777216 >>> 27 !== 0) { - $ERROR('#889: 16777216 >>> 27 === 0. Actual: ' + (16777216 >>> 27)); -} - - -if (33554432 >>> 27 !== 0) { - $ERROR('#890: 33554432 >>> 27 === 0. Actual: ' + (33554432 >>> 27)); -} - - -if (67108864 >>> 27 !== 0) { - $ERROR('#891: 67108864 >>> 27 === 0. Actual: ' + (67108864 >>> 27)); -} - - -if (134217728 >>> 27 !== 1) { - $ERROR('#892: 134217728 >>> 27 === 1. Actual: ' + (134217728 >>> 27)); -} - - -if (268435456 >>> 27 !== 2) { - $ERROR('#893: 268435456 >>> 27 === 2. Actual: ' + (268435456 >>> 27)); -} - - -if (536870912 >>> 27 !== 4) { - $ERROR('#894: 536870912 >>> 27 === 4. Actual: ' + (536870912 >>> 27)); -} - - -if (1073741824 >>> 27 !== 8) { - $ERROR('#895: 1073741824 >>> 27 === 8. Actual: ' + (1073741824 >>> 27)); -} - - -if (2147483648 >>> 27 !== 16) { - $ERROR('#896: 2147483648 >>> 27 === 16. Actual: ' + (2147483648 >>> 27)); -} - - -if (1 >>> 28 !== 0) { - $ERROR('#897: 1 >>> 28 === 0. Actual: ' + (1 >>> 28)); -} - - -if (2 >>> 28 !== 0) { - $ERROR('#898: 2 >>> 28 === 0. Actual: ' + (2 >>> 28)); -} - - -if (4 >>> 28 !== 0) { - $ERROR('#899: 4 >>> 28 === 0. Actual: ' + (4 >>> 28)); -} - - -if (8 >>> 28 !== 0) { - $ERROR('#900: 8 >>> 28 === 0. Actual: ' + (8 >>> 28)); -} - - -if (16 >>> 28 !== 0) { - $ERROR('#901: 16 >>> 28 === 0. Actual: ' + (16 >>> 28)); -} - - -if (32 >>> 28 !== 0) { - $ERROR('#902: 32 >>> 28 === 0. Actual: ' + (32 >>> 28)); -} - - -if (64 >>> 28 !== 0) { - $ERROR('#903: 64 >>> 28 === 0. Actual: ' + (64 >>> 28)); -} - - -if (128 >>> 28 !== 0) { - $ERROR('#904: 128 >>> 28 === 0. Actual: ' + (128 >>> 28)); -} - - -if (256 >>> 28 !== 0) { - $ERROR('#905: 256 >>> 28 === 0. Actual: ' + (256 >>> 28)); -} - - -if (512 >>> 28 !== 0) { - $ERROR('#906: 512 >>> 28 === 0. Actual: ' + (512 >>> 28)); -} - - -if (1024 >>> 28 !== 0) { - $ERROR('#907: 1024 >>> 28 === 0. Actual: ' + (1024 >>> 28)); -} - - -if (2048 >>> 28 !== 0) { - $ERROR('#908: 2048 >>> 28 === 0. Actual: ' + (2048 >>> 28)); -} - - -if (4096 >>> 28 !== 0) { - $ERROR('#909: 4096 >>> 28 === 0. Actual: ' + (4096 >>> 28)); -} - - -if (8192 >>> 28 !== 0) { - $ERROR('#910: 8192 >>> 28 === 0. Actual: ' + (8192 >>> 28)); -} - - -if (16384 >>> 28 !== 0) { - $ERROR('#911: 16384 >>> 28 === 0. Actual: ' + (16384 >>> 28)); -} - - -if (32768 >>> 28 !== 0) { - $ERROR('#912: 32768 >>> 28 === 0. Actual: ' + (32768 >>> 28)); -} - - -if (65536 >>> 28 !== 0) { - $ERROR('#913: 65536 >>> 28 === 0. Actual: ' + (65536 >>> 28)); -} - - -if (131072 >>> 28 !== 0) { - $ERROR('#914: 131072 >>> 28 === 0. Actual: ' + (131072 >>> 28)); -} - - -if (262144 >>> 28 !== 0) { - $ERROR('#915: 262144 >>> 28 === 0. Actual: ' + (262144 >>> 28)); -} - - -if (524288 >>> 28 !== 0) { - $ERROR('#916: 524288 >>> 28 === 0. Actual: ' + (524288 >>> 28)); -} - - -if (1048576 >>> 28 !== 0) { - $ERROR('#917: 1048576 >>> 28 === 0. Actual: ' + (1048576 >>> 28)); -} - - -if (2097152 >>> 28 !== 0) { - $ERROR('#918: 2097152 >>> 28 === 0. Actual: ' + (2097152 >>> 28)); -} - - -if (4194304 >>> 28 !== 0) { - $ERROR('#919: 4194304 >>> 28 === 0. Actual: ' + (4194304 >>> 28)); -} - - -if (8388608 >>> 28 !== 0) { - $ERROR('#920: 8388608 >>> 28 === 0. Actual: ' + (8388608 >>> 28)); -} - - -if (16777216 >>> 28 !== 0) { - $ERROR('#921: 16777216 >>> 28 === 0. Actual: ' + (16777216 >>> 28)); -} - - -if (33554432 >>> 28 !== 0) { - $ERROR('#922: 33554432 >>> 28 === 0. Actual: ' + (33554432 >>> 28)); -} - - -if (67108864 >>> 28 !== 0) { - $ERROR('#923: 67108864 >>> 28 === 0. Actual: ' + (67108864 >>> 28)); -} - - -if (134217728 >>> 28 !== 0) { - $ERROR('#924: 134217728 >>> 28 === 0. Actual: ' + (134217728 >>> 28)); -} - - -if (268435456 >>> 28 !== 1) { - $ERROR('#925: 268435456 >>> 28 === 1. Actual: ' + (268435456 >>> 28)); -} - - -if (536870912 >>> 28 !== 2) { - $ERROR('#926: 536870912 >>> 28 === 2. Actual: ' + (536870912 >>> 28)); -} - - -if (1073741824 >>> 28 !== 4) { - $ERROR('#927: 1073741824 >>> 28 === 4. Actual: ' + (1073741824 >>> 28)); -} - - -if (2147483648 >>> 28 !== 8) { - $ERROR('#928: 2147483648 >>> 28 === 8. Actual: ' + (2147483648 >>> 28)); -} - - -if (1 >>> 29 !== 0) { - $ERROR('#929: 1 >>> 29 === 0. Actual: ' + (1 >>> 29)); -} - - -if (2 >>> 29 !== 0) { - $ERROR('#930: 2 >>> 29 === 0. Actual: ' + (2 >>> 29)); -} - - -if (4 >>> 29 !== 0) { - $ERROR('#931: 4 >>> 29 === 0. Actual: ' + (4 >>> 29)); -} - - -if (8 >>> 29 !== 0) { - $ERROR('#932: 8 >>> 29 === 0. Actual: ' + (8 >>> 29)); -} - - -if (16 >>> 29 !== 0) { - $ERROR('#933: 16 >>> 29 === 0. Actual: ' + (16 >>> 29)); -} - - -if (32 >>> 29 !== 0) { - $ERROR('#934: 32 >>> 29 === 0. Actual: ' + (32 >>> 29)); -} - - -if (64 >>> 29 !== 0) { - $ERROR('#935: 64 >>> 29 === 0. Actual: ' + (64 >>> 29)); -} - - -if (128 >>> 29 !== 0) { - $ERROR('#936: 128 >>> 29 === 0. Actual: ' + (128 >>> 29)); -} - - -if (256 >>> 29 !== 0) { - $ERROR('#937: 256 >>> 29 === 0. Actual: ' + (256 >>> 29)); -} - - -if (512 >>> 29 !== 0) { - $ERROR('#938: 512 >>> 29 === 0. Actual: ' + (512 >>> 29)); -} - - -if (1024 >>> 29 !== 0) { - $ERROR('#939: 1024 >>> 29 === 0. Actual: ' + (1024 >>> 29)); -} - - -if (2048 >>> 29 !== 0) { - $ERROR('#940: 2048 >>> 29 === 0. Actual: ' + (2048 >>> 29)); -} - - -if (4096 >>> 29 !== 0) { - $ERROR('#941: 4096 >>> 29 === 0. Actual: ' + (4096 >>> 29)); -} - - -if (8192 >>> 29 !== 0) { - $ERROR('#942: 8192 >>> 29 === 0. Actual: ' + (8192 >>> 29)); -} - - -if (16384 >>> 29 !== 0) { - $ERROR('#943: 16384 >>> 29 === 0. Actual: ' + (16384 >>> 29)); -} - - -if (32768 >>> 29 !== 0) { - $ERROR('#944: 32768 >>> 29 === 0. Actual: ' + (32768 >>> 29)); -} - - -if (65536 >>> 29 !== 0) { - $ERROR('#945: 65536 >>> 29 === 0. Actual: ' + (65536 >>> 29)); -} - - -if (131072 >>> 29 !== 0) { - $ERROR('#946: 131072 >>> 29 === 0. Actual: ' + (131072 >>> 29)); -} - - -if (262144 >>> 29 !== 0) { - $ERROR('#947: 262144 >>> 29 === 0. Actual: ' + (262144 >>> 29)); -} - - -if (524288 >>> 29 !== 0) { - $ERROR('#948: 524288 >>> 29 === 0. Actual: ' + (524288 >>> 29)); -} - - -if (1048576 >>> 29 !== 0) { - $ERROR('#949: 1048576 >>> 29 === 0. Actual: ' + (1048576 >>> 29)); -} - - -if (2097152 >>> 29 !== 0) { - $ERROR('#950: 2097152 >>> 29 === 0. Actual: ' + (2097152 >>> 29)); -} - - -if (4194304 >>> 29 !== 0) { - $ERROR('#951: 4194304 >>> 29 === 0. Actual: ' + (4194304 >>> 29)); -} - - -if (8388608 >>> 29 !== 0) { - $ERROR('#952: 8388608 >>> 29 === 0. Actual: ' + (8388608 >>> 29)); -} - - -if (16777216 >>> 29 !== 0) { - $ERROR('#953: 16777216 >>> 29 === 0. Actual: ' + (16777216 >>> 29)); -} - - -if (33554432 >>> 29 !== 0) { - $ERROR('#954: 33554432 >>> 29 === 0. Actual: ' + (33554432 >>> 29)); -} - - -if (67108864 >>> 29 !== 0) { - $ERROR('#955: 67108864 >>> 29 === 0. Actual: ' + (67108864 >>> 29)); -} - - -if (134217728 >>> 29 !== 0) { - $ERROR('#956: 134217728 >>> 29 === 0. Actual: ' + (134217728 >>> 29)); -} - - -if (268435456 >>> 29 !== 0) { - $ERROR('#957: 268435456 >>> 29 === 0. Actual: ' + (268435456 >>> 29)); -} - - -if (536870912 >>> 29 !== 1) { - $ERROR('#958: 536870912 >>> 29 === 1. Actual: ' + (536870912 >>> 29)); -} - - -if (1073741824 >>> 29 !== 2) { - $ERROR('#959: 1073741824 >>> 29 === 2. Actual: ' + (1073741824 >>> 29)); -} - - -if (2147483648 >>> 29 !== 4) { - $ERROR('#960: 2147483648 >>> 29 === 4. Actual: ' + (2147483648 >>> 29)); -} - - -if (1 >>> 30 !== 0) { - $ERROR('#961: 1 >>> 30 === 0. Actual: ' + (1 >>> 30)); -} - - -if (2 >>> 30 !== 0) { - $ERROR('#962: 2 >>> 30 === 0. Actual: ' + (2 >>> 30)); -} - - -if (4 >>> 30 !== 0) { - $ERROR('#963: 4 >>> 30 === 0. Actual: ' + (4 >>> 30)); -} - - -if (8 >>> 30 !== 0) { - $ERROR('#964: 8 >>> 30 === 0. Actual: ' + (8 >>> 30)); -} - - -if (16 >>> 30 !== 0) { - $ERROR('#965: 16 >>> 30 === 0. Actual: ' + (16 >>> 30)); -} - - -if (32 >>> 30 !== 0) { - $ERROR('#966: 32 >>> 30 === 0. Actual: ' + (32 >>> 30)); -} - - -if (64 >>> 30 !== 0) { - $ERROR('#967: 64 >>> 30 === 0. Actual: ' + (64 >>> 30)); -} - - -if (128 >>> 30 !== 0) { - $ERROR('#968: 128 >>> 30 === 0. Actual: ' + (128 >>> 30)); -} - - -if (256 >>> 30 !== 0) { - $ERROR('#969: 256 >>> 30 === 0. Actual: ' + (256 >>> 30)); -} - - -if (512 >>> 30 !== 0) { - $ERROR('#970: 512 >>> 30 === 0. Actual: ' + (512 >>> 30)); -} - - -if (1024 >>> 30 !== 0) { - $ERROR('#971: 1024 >>> 30 === 0. Actual: ' + (1024 >>> 30)); -} - - -if (2048 >>> 30 !== 0) { - $ERROR('#972: 2048 >>> 30 === 0. Actual: ' + (2048 >>> 30)); -} - - -if (4096 >>> 30 !== 0) { - $ERROR('#973: 4096 >>> 30 === 0. Actual: ' + (4096 >>> 30)); -} - - -if (8192 >>> 30 !== 0) { - $ERROR('#974: 8192 >>> 30 === 0. Actual: ' + (8192 >>> 30)); -} - - -if (16384 >>> 30 !== 0) { - $ERROR('#975: 16384 >>> 30 === 0. Actual: ' + (16384 >>> 30)); -} - - -if (32768 >>> 30 !== 0) { - $ERROR('#976: 32768 >>> 30 === 0. Actual: ' + (32768 >>> 30)); -} - - -if (65536 >>> 30 !== 0) { - $ERROR('#977: 65536 >>> 30 === 0. Actual: ' + (65536 >>> 30)); -} - - -if (131072 >>> 30 !== 0) { - $ERROR('#978: 131072 >>> 30 === 0. Actual: ' + (131072 >>> 30)); -} - - -if (262144 >>> 30 !== 0) { - $ERROR('#979: 262144 >>> 30 === 0. Actual: ' + (262144 >>> 30)); -} - - -if (524288 >>> 30 !== 0) { - $ERROR('#980: 524288 >>> 30 === 0. Actual: ' + (524288 >>> 30)); -} - - -if (1048576 >>> 30 !== 0) { - $ERROR('#981: 1048576 >>> 30 === 0. Actual: ' + (1048576 >>> 30)); -} - - -if (2097152 >>> 30 !== 0) { - $ERROR('#982: 2097152 >>> 30 === 0. Actual: ' + (2097152 >>> 30)); -} - - -if (4194304 >>> 30 !== 0) { - $ERROR('#983: 4194304 >>> 30 === 0. Actual: ' + (4194304 >>> 30)); -} - - -if (8388608 >>> 30 !== 0) { - $ERROR('#984: 8388608 >>> 30 === 0. Actual: ' + (8388608 >>> 30)); -} - - -if (16777216 >>> 30 !== 0) { - $ERROR('#985: 16777216 >>> 30 === 0. Actual: ' + (16777216 >>> 30)); -} - - -if (33554432 >>> 30 !== 0) { - $ERROR('#986: 33554432 >>> 30 === 0. Actual: ' + (33554432 >>> 30)); -} - - -if (67108864 >>> 30 !== 0) { - $ERROR('#987: 67108864 >>> 30 === 0. Actual: ' + (67108864 >>> 30)); -} - - -if (134217728 >>> 30 !== 0) { - $ERROR('#988: 134217728 >>> 30 === 0. Actual: ' + (134217728 >>> 30)); -} - - -if (268435456 >>> 30 !== 0) { - $ERROR('#989: 268435456 >>> 30 === 0. Actual: ' + (268435456 >>> 30)); -} - - -if (536870912 >>> 30 !== 0) { - $ERROR('#990: 536870912 >>> 30 === 0. Actual: ' + (536870912 >>> 30)); -} - - -if (1073741824 >>> 30 !== 1) { - $ERROR('#991: 1073741824 >>> 30 === 1. Actual: ' + (1073741824 >>> 30)); -} - - -if (2147483648 >>> 30 !== 2) { - $ERROR('#992: 2147483648 >>> 30 === 2. Actual: ' + (2147483648 >>> 30)); -} - - -if (1 >>> 31 !== 0) { - $ERROR('#993: 1 >>> 31 === 0. Actual: ' + (1 >>> 31)); -} - - -if (2 >>> 31 !== 0) { - $ERROR('#994: 2 >>> 31 === 0. Actual: ' + (2 >>> 31)); -} - - -if (4 >>> 31 !== 0) { - $ERROR('#995: 4 >>> 31 === 0. Actual: ' + (4 >>> 31)); -} - - -if (8 >>> 31 !== 0) { - $ERROR('#996: 8 >>> 31 === 0. Actual: ' + (8 >>> 31)); -} - - -if (16 >>> 31 !== 0) { - $ERROR('#997: 16 >>> 31 === 0. Actual: ' + (16 >>> 31)); -} - - -if (32 >>> 31 !== 0) { - $ERROR('#998: 32 >>> 31 === 0. Actual: ' + (32 >>> 31)); -} - - -if (64 >>> 31 !== 0) { - $ERROR('#999: 64 >>> 31 === 0. Actual: ' + (64 >>> 31)); -} - - -if (128 >>> 31 !== 0) { - $ERROR('#1000: 128 >>> 31 === 0. Actual: ' + (128 >>> 31)); -} - - -if (256 >>> 31 !== 0) { - $ERROR('#1001: 256 >>> 31 === 0. Actual: ' + (256 >>> 31)); -} - - -if (512 >>> 31 !== 0) { - $ERROR('#1002: 512 >>> 31 === 0. Actual: ' + (512 >>> 31)); -} - - -if (1024 >>> 31 !== 0) { - $ERROR('#1003: 1024 >>> 31 === 0. Actual: ' + (1024 >>> 31)); -} - - -if (2048 >>> 31 !== 0) { - $ERROR('#1004: 2048 >>> 31 === 0. Actual: ' + (2048 >>> 31)); -} - - -if (4096 >>> 31 !== 0) { - $ERROR('#1005: 4096 >>> 31 === 0. Actual: ' + (4096 >>> 31)); -} - - -if (8192 >>> 31 !== 0) { - $ERROR('#1006: 8192 >>> 31 === 0. Actual: ' + (8192 >>> 31)); -} - - -if (16384 >>> 31 !== 0) { - $ERROR('#1007: 16384 >>> 31 === 0. Actual: ' + (16384 >>> 31)); -} - - -if (32768 >>> 31 !== 0) { - $ERROR('#1008: 32768 >>> 31 === 0. Actual: ' + (32768 >>> 31)); -} - - -if (65536 >>> 31 !== 0) { - $ERROR('#1009: 65536 >>> 31 === 0. Actual: ' + (65536 >>> 31)); -} - - -if (131072 >>> 31 !== 0) { - $ERROR('#1010: 131072 >>> 31 === 0. Actual: ' + (131072 >>> 31)); -} - - -if (262144 >>> 31 !== 0) { - $ERROR('#1011: 262144 >>> 31 === 0. Actual: ' + (262144 >>> 31)); -} - - -if (524288 >>> 31 !== 0) { - $ERROR('#1012: 524288 >>> 31 === 0. Actual: ' + (524288 >>> 31)); -} - - -if (1048576 >>> 31 !== 0) { - $ERROR('#1013: 1048576 >>> 31 === 0. Actual: ' + (1048576 >>> 31)); -} - - -if (2097152 >>> 31 !== 0) { - $ERROR('#1014: 2097152 >>> 31 === 0. Actual: ' + (2097152 >>> 31)); -} - - -if (4194304 >>> 31 !== 0) { - $ERROR('#1015: 4194304 >>> 31 === 0. Actual: ' + (4194304 >>> 31)); -} - - -if (8388608 >>> 31 !== 0) { - $ERROR('#1016: 8388608 >>> 31 === 0. Actual: ' + (8388608 >>> 31)); -} - - -if (16777216 >>> 31 !== 0) { - $ERROR('#1017: 16777216 >>> 31 === 0. Actual: ' + (16777216 >>> 31)); -} - - -if (33554432 >>> 31 !== 0) { - $ERROR('#1018: 33554432 >>> 31 === 0. Actual: ' + (33554432 >>> 31)); -} - - -if (67108864 >>> 31 !== 0) { - $ERROR('#1019: 67108864 >>> 31 === 0. Actual: ' + (67108864 >>> 31)); -} - - -if (134217728 >>> 31 !== 0) { - $ERROR('#1020: 134217728 >>> 31 === 0. Actual: ' + (134217728 >>> 31)); -} - - -if (268435456 >>> 31 !== 0) { - $ERROR('#1021: 268435456 >>> 31 === 0. Actual: ' + (268435456 >>> 31)); -} - - -if (536870912 >>> 31 !== 0) { - $ERROR('#1022: 536870912 >>> 31 === 0. Actual: ' + (536870912 >>> 31)); -} - - -if (1073741824 >>> 31 !== 0) { - $ERROR('#1023: 1073741824 >>> 31 === 0. Actual: ' + (1073741824 >>> 31)); -} - - -if (2147483648 >>> 31 !== 1) { - $ERROR('#1024: 2147483648 >>> 31 === 1. Actual: ' + (2147483648 >>> 31)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A4_T3.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A4_T3.js deleted file mode 100644 index 93d12d714..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A4_T3.js +++ /dev/null @@ -1,2650 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.3_A4_T3; - * @section: 11.7.3; - * @assertion: Check operator x >>> y in distinct points; - * @description: ShiftExpression = 2^n - 1, n = 0...15; - */ - -//CHECK - -if (0 >>> 0 !== 0) { - $ERROR('#1: 0 >>> 0 === 0. Actual: ' + (0 >>> 0)); -} - - -if (1 >>> 0 !== 1) { - $ERROR('#2: 1 >>> 0 === 1. Actual: ' + (1 >>> 0)); -} - - -if (3 >>> 0 !== 3) { - $ERROR('#3: 3 >>> 0 === 3. Actual: ' + (3 >>> 0)); -} - - -if (7 >>> 0 !== 7) { - $ERROR('#4: 7 >>> 0 === 7. Actual: ' + (7 >>> 0)); -} - - -if (15 >>> 0 !== 15) { - $ERROR('#5: 15 >>> 0 === 15. Actual: ' + (15 >>> 0)); -} - - -if (31 >>> 0 !== 31) { - $ERROR('#6: 31 >>> 0 === 31. Actual: ' + (31 >>> 0)); -} - - -if (63 >>> 0 !== 63) { - $ERROR('#7: 63 >>> 0 === 63. Actual: ' + (63 >>> 0)); -} - - -if (127 >>> 0 !== 127) { - $ERROR('#8: 127 >>> 0 === 127. Actual: ' + (127 >>> 0)); -} - - -if (255 >>> 0 !== 255) { - $ERROR('#9: 255 >>> 0 === 255. Actual: ' + (255 >>> 0)); -} - - -if (511 >>> 0 !== 511) { - $ERROR('#10: 511 >>> 0 === 511. Actual: ' + (511 >>> 0)); -} - - -if (1023 >>> 0 !== 1023) { - $ERROR('#11: 1023 >>> 0 === 1023. Actual: ' + (1023 >>> 0)); -} - - -if (2047 >>> 0 !== 2047) { - $ERROR('#12: 2047 >>> 0 === 2047. Actual: ' + (2047 >>> 0)); -} - - -if (4095 >>> 0 !== 4095) { - $ERROR('#13: 4095 >>> 0 === 4095. Actual: ' + (4095 >>> 0)); -} - - -if (8191 >>> 0 !== 8191) { - $ERROR('#14: 8191 >>> 0 === 8191. Actual: ' + (8191 >>> 0)); -} - - -if (16383 >>> 0 !== 16383) { - $ERROR('#15: 16383 >>> 0 === 16383. Actual: ' + (16383 >>> 0)); -} - - -if (32767 >>> 0 !== 32767) { - $ERROR('#16: 32767 >>> 0 === 32767. Actual: ' + (32767 >>> 0)); -} - - -if (65535 >>> 0 !== 65535) { - $ERROR('#17: 65535 >>> 0 === 65535. Actual: ' + (65535 >>> 0)); -} - - -if (131071 >>> 0 !== 131071) { - $ERROR('#18: 131071 >>> 0 === 131071. Actual: ' + (131071 >>> 0)); -} - - -if (262143 >>> 0 !== 262143) { - $ERROR('#19: 262143 >>> 0 === 262143. Actual: ' + (262143 >>> 0)); -} - - -if (524287 >>> 0 !== 524287) { - $ERROR('#20: 524287 >>> 0 === 524287. Actual: ' + (524287 >>> 0)); -} - - -if (1048575 >>> 0 !== 1048575) { - $ERROR('#21: 1048575 >>> 0 === 1048575. Actual: ' + (1048575 >>> 0)); -} - - -if (2097151 >>> 0 !== 2097151) { - $ERROR('#22: 2097151 >>> 0 === 2097151. Actual: ' + (2097151 >>> 0)); -} - - -if (4194303 >>> 0 !== 4194303) { - $ERROR('#23: 4194303 >>> 0 === 4194303. Actual: ' + (4194303 >>> 0)); -} - - -if (8388607 >>> 0 !== 8388607) { - $ERROR('#24: 8388607 >>> 0 === 8388607. Actual: ' + (8388607 >>> 0)); -} - - -if (16777215 >>> 0 !== 16777215) { - $ERROR('#25: 16777215 >>> 0 === 16777215. Actual: ' + (16777215 >>> 0)); -} - - -if (33554431 >>> 0 !== 33554431) { - $ERROR('#26: 33554431 >>> 0 === 33554431. Actual: ' + (33554431 >>> 0)); -} - - -if (67108863 >>> 0 !== 67108863) { - $ERROR('#27: 67108863 >>> 0 === 67108863. Actual: ' + (67108863 >>> 0)); -} - - -if (134217727 >>> 0 !== 134217727) { - $ERROR('#28: 134217727 >>> 0 === 134217727. Actual: ' + (134217727 >>> 0)); -} - - -if (268435455 >>> 0 !== 268435455) { - $ERROR('#29: 268435455 >>> 0 === 268435455. Actual: ' + (268435455 >>> 0)); -} - - -if (536870911 >>> 0 !== 536870911) { - $ERROR('#30: 536870911 >>> 0 === 536870911. Actual: ' + (536870911 >>> 0)); -} - - -if (1073741823 >>> 0 !== 1073741823) { - $ERROR('#31: 1073741823 >>> 0 === 1073741823. Actual: ' + (1073741823 >>> 0)); -} - - -if (2147483647 >>> 0 !== 2147483647) { - $ERROR('#32: 2147483647 >>> 0 === 2147483647. Actual: ' + (2147483647 >>> 0)); -} - - -if (4294967295 >>> 0 !== 4294967295) { - $ERROR('#33: 4294967295 >>> 0 === 4294967295. Actual: ' + (4294967295 >>> 0)); -} - - -if (0 >>> 1 !== 0) { - $ERROR('#34: 0 >>> 1 === 0. Actual: ' + (0 >>> 1)); -} - - -if (1 >>> 1 !== 0) { - $ERROR('#35: 1 >>> 1 === 0. Actual: ' + (1 >>> 1)); -} - - -if (3 >>> 1 !== 1) { - $ERROR('#36: 3 >>> 1 === 1. Actual: ' + (3 >>> 1)); -} - - -if (7 >>> 1 !== 3) { - $ERROR('#37: 7 >>> 1 === 3. Actual: ' + (7 >>> 1)); -} - - -if (15 >>> 1 !== 7) { - $ERROR('#38: 15 >>> 1 === 7. Actual: ' + (15 >>> 1)); -} - - -if (31 >>> 1 !== 15) { - $ERROR('#39: 31 >>> 1 === 15. Actual: ' + (31 >>> 1)); -} - - -if (63 >>> 1 !== 31) { - $ERROR('#40: 63 >>> 1 === 31. Actual: ' + (63 >>> 1)); -} - - -if (127 >>> 1 !== 63) { - $ERROR('#41: 127 >>> 1 === 63. Actual: ' + (127 >>> 1)); -} - - -if (255 >>> 1 !== 127) { - $ERROR('#42: 255 >>> 1 === 127. Actual: ' + (255 >>> 1)); -} - - -if (511 >>> 1 !== 255) { - $ERROR('#43: 511 >>> 1 === 255. Actual: ' + (511 >>> 1)); -} - - -if (1023 >>> 1 !== 511) { - $ERROR('#44: 1023 >>> 1 === 511. Actual: ' + (1023 >>> 1)); -} - - -if (2047 >>> 1 !== 1023) { - $ERROR('#45: 2047 >>> 1 === 1023. Actual: ' + (2047 >>> 1)); -} - - -if (4095 >>> 1 !== 2047) { - $ERROR('#46: 4095 >>> 1 === 2047. Actual: ' + (4095 >>> 1)); -} - - -if (8191 >>> 1 !== 4095) { - $ERROR('#47: 8191 >>> 1 === 4095. Actual: ' + (8191 >>> 1)); -} - - -if (16383 >>> 1 !== 8191) { - $ERROR('#48: 16383 >>> 1 === 8191. Actual: ' + (16383 >>> 1)); -} - - -if (32767 >>> 1 !== 16383) { - $ERROR('#49: 32767 >>> 1 === 16383. Actual: ' + (32767 >>> 1)); -} - - -if (65535 >>> 1 !== 32767) { - $ERROR('#50: 65535 >>> 1 === 32767. Actual: ' + (65535 >>> 1)); -} - - -if (131071 >>> 1 !== 65535) { - $ERROR('#51: 131071 >>> 1 === 65535. Actual: ' + (131071 >>> 1)); -} - - -if (262143 >>> 1 !== 131071) { - $ERROR('#52: 262143 >>> 1 === 131071. Actual: ' + (262143 >>> 1)); -} - - -if (524287 >>> 1 !== 262143) { - $ERROR('#53: 524287 >>> 1 === 262143. Actual: ' + (524287 >>> 1)); -} - - -if (1048575 >>> 1 !== 524287) { - $ERROR('#54: 1048575 >>> 1 === 524287. Actual: ' + (1048575 >>> 1)); -} - - -if (2097151 >>> 1 !== 1048575) { - $ERROR('#55: 2097151 >>> 1 === 1048575. Actual: ' + (2097151 >>> 1)); -} - - -if (4194303 >>> 1 !== 2097151) { - $ERROR('#56: 4194303 >>> 1 === 2097151. Actual: ' + (4194303 >>> 1)); -} - - -if (8388607 >>> 1 !== 4194303) { - $ERROR('#57: 8388607 >>> 1 === 4194303. Actual: ' + (8388607 >>> 1)); -} - - -if (16777215 >>> 1 !== 8388607) { - $ERROR('#58: 16777215 >>> 1 === 8388607. Actual: ' + (16777215 >>> 1)); -} - - -if (33554431 >>> 1 !== 16777215) { - $ERROR('#59: 33554431 >>> 1 === 16777215. Actual: ' + (33554431 >>> 1)); -} - - -if (67108863 >>> 1 !== 33554431) { - $ERROR('#60: 67108863 >>> 1 === 33554431. Actual: ' + (67108863 >>> 1)); -} - - -if (134217727 >>> 1 !== 67108863) { - $ERROR('#61: 134217727 >>> 1 === 67108863. Actual: ' + (134217727 >>> 1)); -} - - -if (268435455 >>> 1 !== 134217727) { - $ERROR('#62: 268435455 >>> 1 === 134217727. Actual: ' + (268435455 >>> 1)); -} - - -if (536870911 >>> 1 !== 268435455) { - $ERROR('#63: 536870911 >>> 1 === 268435455. Actual: ' + (536870911 >>> 1)); -} - - -if (1073741823 >>> 1 !== 536870911) { - $ERROR('#64: 1073741823 >>> 1 === 536870911. Actual: ' + (1073741823 >>> 1)); -} - - -if (2147483647 >>> 1 !== 1073741823) { - $ERROR('#65: 2147483647 >>> 1 === 1073741823. Actual: ' + (2147483647 >>> 1)); -} - - -if (4294967295 >>> 1 !== 2147483647) { - $ERROR('#66: 4294967295 >>> 1 === 2147483647. Actual: ' + (4294967295 >>> 1)); -} - - -if (0 >>> 2 !== 0) { - $ERROR('#67: 0 >>> 2 === 0. Actual: ' + (0 >>> 2)); -} - - -if (1 >>> 2 !== 0) { - $ERROR('#68: 1 >>> 2 === 0. Actual: ' + (1 >>> 2)); -} - - -if (3 >>> 2 !== 0) { - $ERROR('#69: 3 >>> 2 === 0. Actual: ' + (3 >>> 2)); -} - - -if (7 >>> 2 !== 1) { - $ERROR('#70: 7 >>> 2 === 1. Actual: ' + (7 >>> 2)); -} - - -if (15 >>> 2 !== 3) { - $ERROR('#71: 15 >>> 2 === 3. Actual: ' + (15 >>> 2)); -} - - -if (31 >>> 2 !== 7) { - $ERROR('#72: 31 >>> 2 === 7. Actual: ' + (31 >>> 2)); -} - - -if (63 >>> 2 !== 15) { - $ERROR('#73: 63 >>> 2 === 15. Actual: ' + (63 >>> 2)); -} - - -if (127 >>> 2 !== 31) { - $ERROR('#74: 127 >>> 2 === 31. Actual: ' + (127 >>> 2)); -} - - -if (255 >>> 2 !== 63) { - $ERROR('#75: 255 >>> 2 === 63. Actual: ' + (255 >>> 2)); -} - - -if (511 >>> 2 !== 127) { - $ERROR('#76: 511 >>> 2 === 127. Actual: ' + (511 >>> 2)); -} - - -if (1023 >>> 2 !== 255) { - $ERROR('#77: 1023 >>> 2 === 255. Actual: ' + (1023 >>> 2)); -} - - -if (2047 >>> 2 !== 511) { - $ERROR('#78: 2047 >>> 2 === 511. Actual: ' + (2047 >>> 2)); -} - - -if (4095 >>> 2 !== 1023) { - $ERROR('#79: 4095 >>> 2 === 1023. Actual: ' + (4095 >>> 2)); -} - - -if (8191 >>> 2 !== 2047) { - $ERROR('#80: 8191 >>> 2 === 2047. Actual: ' + (8191 >>> 2)); -} - - -if (16383 >>> 2 !== 4095) { - $ERROR('#81: 16383 >>> 2 === 4095. Actual: ' + (16383 >>> 2)); -} - - -if (32767 >>> 2 !== 8191) { - $ERROR('#82: 32767 >>> 2 === 8191. Actual: ' + (32767 >>> 2)); -} - - -if (65535 >>> 2 !== 16383) { - $ERROR('#83: 65535 >>> 2 === 16383. Actual: ' + (65535 >>> 2)); -} - - -if (131071 >>> 2 !== 32767) { - $ERROR('#84: 131071 >>> 2 === 32767. Actual: ' + (131071 >>> 2)); -} - - -if (262143 >>> 2 !== 65535) { - $ERROR('#85: 262143 >>> 2 === 65535. Actual: ' + (262143 >>> 2)); -} - - -if (524287 >>> 2 !== 131071) { - $ERROR('#86: 524287 >>> 2 === 131071. Actual: ' + (524287 >>> 2)); -} - - -if (1048575 >>> 2 !== 262143) { - $ERROR('#87: 1048575 >>> 2 === 262143. Actual: ' + (1048575 >>> 2)); -} - - -if (2097151 >>> 2 !== 524287) { - $ERROR('#88: 2097151 >>> 2 === 524287. Actual: ' + (2097151 >>> 2)); -} - - -if (4194303 >>> 2 !== 1048575) { - $ERROR('#89: 4194303 >>> 2 === 1048575. Actual: ' + (4194303 >>> 2)); -} - - -if (8388607 >>> 2 !== 2097151) { - $ERROR('#90: 8388607 >>> 2 === 2097151. Actual: ' + (8388607 >>> 2)); -} - - -if (16777215 >>> 2 !== 4194303) { - $ERROR('#91: 16777215 >>> 2 === 4194303. Actual: ' + (16777215 >>> 2)); -} - - -if (33554431 >>> 2 !== 8388607) { - $ERROR('#92: 33554431 >>> 2 === 8388607. Actual: ' + (33554431 >>> 2)); -} - - -if (67108863 >>> 2 !== 16777215) { - $ERROR('#93: 67108863 >>> 2 === 16777215. Actual: ' + (67108863 >>> 2)); -} - - -if (134217727 >>> 2 !== 33554431) { - $ERROR('#94: 134217727 >>> 2 === 33554431. Actual: ' + (134217727 >>> 2)); -} - - -if (268435455 >>> 2 !== 67108863) { - $ERROR('#95: 268435455 >>> 2 === 67108863. Actual: ' + (268435455 >>> 2)); -} - - -if (536870911 >>> 2 !== 134217727) { - $ERROR('#96: 536870911 >>> 2 === 134217727. Actual: ' + (536870911 >>> 2)); -} - - -if (1073741823 >>> 2 !== 268435455) { - $ERROR('#97: 1073741823 >>> 2 === 268435455. Actual: ' + (1073741823 >>> 2)); -} - - -if (2147483647 >>> 2 !== 536870911) { - $ERROR('#98: 2147483647 >>> 2 === 536870911. Actual: ' + (2147483647 >>> 2)); -} - - -if (4294967295 >>> 2 !== 1073741823) { - $ERROR('#99: 4294967295 >>> 2 === 1073741823. Actual: ' + (4294967295 >>> 2)); -} - - -if (0 >>> 3 !== 0) { - $ERROR('#100: 0 >>> 3 === 0. Actual: ' + (0 >>> 3)); -} - - -if (1 >>> 3 !== 0) { - $ERROR('#101: 1 >>> 3 === 0. Actual: ' + (1 >>> 3)); -} - - -if (3 >>> 3 !== 0) { - $ERROR('#102: 3 >>> 3 === 0. Actual: ' + (3 >>> 3)); -} - - -if (7 >>> 3 !== 0) { - $ERROR('#103: 7 >>> 3 === 0. Actual: ' + (7 >>> 3)); -} - - -if (15 >>> 3 !== 1) { - $ERROR('#104: 15 >>> 3 === 1. Actual: ' + (15 >>> 3)); -} - - -if (31 >>> 3 !== 3) { - $ERROR('#105: 31 >>> 3 === 3. Actual: ' + (31 >>> 3)); -} - - -if (63 >>> 3 !== 7) { - $ERROR('#106: 63 >>> 3 === 7. Actual: ' + (63 >>> 3)); -} - - -if (127 >>> 3 !== 15) { - $ERROR('#107: 127 >>> 3 === 15. Actual: ' + (127 >>> 3)); -} - - -if (255 >>> 3 !== 31) { - $ERROR('#108: 255 >>> 3 === 31. Actual: ' + (255 >>> 3)); -} - - -if (511 >>> 3 !== 63) { - $ERROR('#109: 511 >>> 3 === 63. Actual: ' + (511 >>> 3)); -} - - -if (1023 >>> 3 !== 127) { - $ERROR('#110: 1023 >>> 3 === 127. Actual: ' + (1023 >>> 3)); -} - - -if (2047 >>> 3 !== 255) { - $ERROR('#111: 2047 >>> 3 === 255. Actual: ' + (2047 >>> 3)); -} - - -if (4095 >>> 3 !== 511) { - $ERROR('#112: 4095 >>> 3 === 511. Actual: ' + (4095 >>> 3)); -} - - -if (8191 >>> 3 !== 1023) { - $ERROR('#113: 8191 >>> 3 === 1023. Actual: ' + (8191 >>> 3)); -} - - -if (16383 >>> 3 !== 2047) { - $ERROR('#114: 16383 >>> 3 === 2047. Actual: ' + (16383 >>> 3)); -} - - -if (32767 >>> 3 !== 4095) { - $ERROR('#115: 32767 >>> 3 === 4095. Actual: ' + (32767 >>> 3)); -} - - -if (65535 >>> 3 !== 8191) { - $ERROR('#116: 65535 >>> 3 === 8191. Actual: ' + (65535 >>> 3)); -} - - -if (131071 >>> 3 !== 16383) { - $ERROR('#117: 131071 >>> 3 === 16383. Actual: ' + (131071 >>> 3)); -} - - -if (262143 >>> 3 !== 32767) { - $ERROR('#118: 262143 >>> 3 === 32767. Actual: ' + (262143 >>> 3)); -} - - -if (524287 >>> 3 !== 65535) { - $ERROR('#119: 524287 >>> 3 === 65535. Actual: ' + (524287 >>> 3)); -} - - -if (1048575 >>> 3 !== 131071) { - $ERROR('#120: 1048575 >>> 3 === 131071. Actual: ' + (1048575 >>> 3)); -} - - -if (2097151 >>> 3 !== 262143) { - $ERROR('#121: 2097151 >>> 3 === 262143. Actual: ' + (2097151 >>> 3)); -} - - -if (4194303 >>> 3 !== 524287) { - $ERROR('#122: 4194303 >>> 3 === 524287. Actual: ' + (4194303 >>> 3)); -} - - -if (8388607 >>> 3 !== 1048575) { - $ERROR('#123: 8388607 >>> 3 === 1048575. Actual: ' + (8388607 >>> 3)); -} - - -if (16777215 >>> 3 !== 2097151) { - $ERROR('#124: 16777215 >>> 3 === 2097151. Actual: ' + (16777215 >>> 3)); -} - - -if (33554431 >>> 3 !== 4194303) { - $ERROR('#125: 33554431 >>> 3 === 4194303. Actual: ' + (33554431 >>> 3)); -} - - -if (67108863 >>> 3 !== 8388607) { - $ERROR('#126: 67108863 >>> 3 === 8388607. Actual: ' + (67108863 >>> 3)); -} - - -if (134217727 >>> 3 !== 16777215) { - $ERROR('#127: 134217727 >>> 3 === 16777215. Actual: ' + (134217727 >>> 3)); -} - - -if (268435455 >>> 3 !== 33554431) { - $ERROR('#128: 268435455 >>> 3 === 33554431. Actual: ' + (268435455 >>> 3)); -} - - -if (536870911 >>> 3 !== 67108863) { - $ERROR('#129: 536870911 >>> 3 === 67108863. Actual: ' + (536870911 >>> 3)); -} - - -if (1073741823 >>> 3 !== 134217727) { - $ERROR('#130: 1073741823 >>> 3 === 134217727. Actual: ' + (1073741823 >>> 3)); -} - - -if (2147483647 >>> 3 !== 268435455) { - $ERROR('#131: 2147483647 >>> 3 === 268435455. Actual: ' + (2147483647 >>> 3)); -} - - -if (4294967295 >>> 3 !== 536870911) { - $ERROR('#132: 4294967295 >>> 3 === 536870911. Actual: ' + (4294967295 >>> 3)); -} - - -if (0 >>> 4 !== 0) { - $ERROR('#133: 0 >>> 4 === 0. Actual: ' + (0 >>> 4)); -} - - -if (1 >>> 4 !== 0) { - $ERROR('#134: 1 >>> 4 === 0. Actual: ' + (1 >>> 4)); -} - - -if (3 >>> 4 !== 0) { - $ERROR('#135: 3 >>> 4 === 0. Actual: ' + (3 >>> 4)); -} - - -if (7 >>> 4 !== 0) { - $ERROR('#136: 7 >>> 4 === 0. Actual: ' + (7 >>> 4)); -} - - -if (15 >>> 4 !== 0) { - $ERROR('#137: 15 >>> 4 === 0. Actual: ' + (15 >>> 4)); -} - - -if (31 >>> 4 !== 1) { - $ERROR('#138: 31 >>> 4 === 1. Actual: ' + (31 >>> 4)); -} - - -if (63 >>> 4 !== 3) { - $ERROR('#139: 63 >>> 4 === 3. Actual: ' + (63 >>> 4)); -} - - -if (127 >>> 4 !== 7) { - $ERROR('#140: 127 >>> 4 === 7. Actual: ' + (127 >>> 4)); -} - - -if (255 >>> 4 !== 15) { - $ERROR('#141: 255 >>> 4 === 15. Actual: ' + (255 >>> 4)); -} - - -if (511 >>> 4 !== 31) { - $ERROR('#142: 511 >>> 4 === 31. Actual: ' + (511 >>> 4)); -} - - -if (1023 >>> 4 !== 63) { - $ERROR('#143: 1023 >>> 4 === 63. Actual: ' + (1023 >>> 4)); -} - - -if (2047 >>> 4 !== 127) { - $ERROR('#144: 2047 >>> 4 === 127. Actual: ' + (2047 >>> 4)); -} - - -if (4095 >>> 4 !== 255) { - $ERROR('#145: 4095 >>> 4 === 255. Actual: ' + (4095 >>> 4)); -} - - -if (8191 >>> 4 !== 511) { - $ERROR('#146: 8191 >>> 4 === 511. Actual: ' + (8191 >>> 4)); -} - - -if (16383 >>> 4 !== 1023) { - $ERROR('#147: 16383 >>> 4 === 1023. Actual: ' + (16383 >>> 4)); -} - - -if (32767 >>> 4 !== 2047) { - $ERROR('#148: 32767 >>> 4 === 2047. Actual: ' + (32767 >>> 4)); -} - - -if (65535 >>> 4 !== 4095) { - $ERROR('#149: 65535 >>> 4 === 4095. Actual: ' + (65535 >>> 4)); -} - - -if (131071 >>> 4 !== 8191) { - $ERROR('#150: 131071 >>> 4 === 8191. Actual: ' + (131071 >>> 4)); -} - - -if (262143 >>> 4 !== 16383) { - $ERROR('#151: 262143 >>> 4 === 16383. Actual: ' + (262143 >>> 4)); -} - - -if (524287 >>> 4 !== 32767) { - $ERROR('#152: 524287 >>> 4 === 32767. Actual: ' + (524287 >>> 4)); -} - - -if (1048575 >>> 4 !== 65535) { - $ERROR('#153: 1048575 >>> 4 === 65535. Actual: ' + (1048575 >>> 4)); -} - - -if (2097151 >>> 4 !== 131071) { - $ERROR('#154: 2097151 >>> 4 === 131071. Actual: ' + (2097151 >>> 4)); -} - - -if (4194303 >>> 4 !== 262143) { - $ERROR('#155: 4194303 >>> 4 === 262143. Actual: ' + (4194303 >>> 4)); -} - - -if (8388607 >>> 4 !== 524287) { - $ERROR('#156: 8388607 >>> 4 === 524287. Actual: ' + (8388607 >>> 4)); -} - - -if (16777215 >>> 4 !== 1048575) { - $ERROR('#157: 16777215 >>> 4 === 1048575. Actual: ' + (16777215 >>> 4)); -} - - -if (33554431 >>> 4 !== 2097151) { - $ERROR('#158: 33554431 >>> 4 === 2097151. Actual: ' + (33554431 >>> 4)); -} - - -if (67108863 >>> 4 !== 4194303) { - $ERROR('#159: 67108863 >>> 4 === 4194303. Actual: ' + (67108863 >>> 4)); -} - - -if (134217727 >>> 4 !== 8388607) { - $ERROR('#160: 134217727 >>> 4 === 8388607. Actual: ' + (134217727 >>> 4)); -} - - -if (268435455 >>> 4 !== 16777215) { - $ERROR('#161: 268435455 >>> 4 === 16777215. Actual: ' + (268435455 >>> 4)); -} - - -if (536870911 >>> 4 !== 33554431) { - $ERROR('#162: 536870911 >>> 4 === 33554431. Actual: ' + (536870911 >>> 4)); -} - - -if (1073741823 >>> 4 !== 67108863) { - $ERROR('#163: 1073741823 >>> 4 === 67108863. Actual: ' + (1073741823 >>> 4)); -} - - -if (2147483647 >>> 4 !== 134217727) { - $ERROR('#164: 2147483647 >>> 4 === 134217727. Actual: ' + (2147483647 >>> 4)); -} - - -if (4294967295 >>> 4 !== 268435455) { - $ERROR('#165: 4294967295 >>> 4 === 268435455. Actual: ' + (4294967295 >>> 4)); -} - - -if (0 >>> 5 !== 0) { - $ERROR('#166: 0 >>> 5 === 0. Actual: ' + (0 >>> 5)); -} - - -if (1 >>> 5 !== 0) { - $ERROR('#167: 1 >>> 5 === 0. Actual: ' + (1 >>> 5)); -} - - -if (3 >>> 5 !== 0) { - $ERROR('#168: 3 >>> 5 === 0. Actual: ' + (3 >>> 5)); -} - - -if (7 >>> 5 !== 0) { - $ERROR('#169: 7 >>> 5 === 0. Actual: ' + (7 >>> 5)); -} - - -if (15 >>> 5 !== 0) { - $ERROR('#170: 15 >>> 5 === 0. Actual: ' + (15 >>> 5)); -} - - -if (31 >>> 5 !== 0) { - $ERROR('#171: 31 >>> 5 === 0. Actual: ' + (31 >>> 5)); -} - - -if (63 >>> 5 !== 1) { - $ERROR('#172: 63 >>> 5 === 1. Actual: ' + (63 >>> 5)); -} - - -if (127 >>> 5 !== 3) { - $ERROR('#173: 127 >>> 5 === 3. Actual: ' + (127 >>> 5)); -} - - -if (255 >>> 5 !== 7) { - $ERROR('#174: 255 >>> 5 === 7. Actual: ' + (255 >>> 5)); -} - - -if (511 >>> 5 !== 15) { - $ERROR('#175: 511 >>> 5 === 15. Actual: ' + (511 >>> 5)); -} - - -if (1023 >>> 5 !== 31) { - $ERROR('#176: 1023 >>> 5 === 31. Actual: ' + (1023 >>> 5)); -} - - -if (2047 >>> 5 !== 63) { - $ERROR('#177: 2047 >>> 5 === 63. Actual: ' + (2047 >>> 5)); -} - - -if (4095 >>> 5 !== 127) { - $ERROR('#178: 4095 >>> 5 === 127. Actual: ' + (4095 >>> 5)); -} - - -if (8191 >>> 5 !== 255) { - $ERROR('#179: 8191 >>> 5 === 255. Actual: ' + (8191 >>> 5)); -} - - -if (16383 >>> 5 !== 511) { - $ERROR('#180: 16383 >>> 5 === 511. Actual: ' + (16383 >>> 5)); -} - - -if (32767 >>> 5 !== 1023) { - $ERROR('#181: 32767 >>> 5 === 1023. Actual: ' + (32767 >>> 5)); -} - - -if (65535 >>> 5 !== 2047) { - $ERROR('#182: 65535 >>> 5 === 2047. Actual: ' + (65535 >>> 5)); -} - - -if (131071 >>> 5 !== 4095) { - $ERROR('#183: 131071 >>> 5 === 4095. Actual: ' + (131071 >>> 5)); -} - - -if (262143 >>> 5 !== 8191) { - $ERROR('#184: 262143 >>> 5 === 8191. Actual: ' + (262143 >>> 5)); -} - - -if (524287 >>> 5 !== 16383) { - $ERROR('#185: 524287 >>> 5 === 16383. Actual: ' + (524287 >>> 5)); -} - - -if (1048575 >>> 5 !== 32767) { - $ERROR('#186: 1048575 >>> 5 === 32767. Actual: ' + (1048575 >>> 5)); -} - - -if (2097151 >>> 5 !== 65535) { - $ERROR('#187: 2097151 >>> 5 === 65535. Actual: ' + (2097151 >>> 5)); -} - - -if (4194303 >>> 5 !== 131071) { - $ERROR('#188: 4194303 >>> 5 === 131071. Actual: ' + (4194303 >>> 5)); -} - - -if (8388607 >>> 5 !== 262143) { - $ERROR('#189: 8388607 >>> 5 === 262143. Actual: ' + (8388607 >>> 5)); -} - - -if (16777215 >>> 5 !== 524287) { - $ERROR('#190: 16777215 >>> 5 === 524287. Actual: ' + (16777215 >>> 5)); -} - - -if (33554431 >>> 5 !== 1048575) { - $ERROR('#191: 33554431 >>> 5 === 1048575. Actual: ' + (33554431 >>> 5)); -} - - -if (67108863 >>> 5 !== 2097151) { - $ERROR('#192: 67108863 >>> 5 === 2097151. Actual: ' + (67108863 >>> 5)); -} - - -if (134217727 >>> 5 !== 4194303) { - $ERROR('#193: 134217727 >>> 5 === 4194303. Actual: ' + (134217727 >>> 5)); -} - - -if (268435455 >>> 5 !== 8388607) { - $ERROR('#194: 268435455 >>> 5 === 8388607. Actual: ' + (268435455 >>> 5)); -} - - -if (536870911 >>> 5 !== 16777215) { - $ERROR('#195: 536870911 >>> 5 === 16777215. Actual: ' + (536870911 >>> 5)); -} - - -if (1073741823 >>> 5 !== 33554431) { - $ERROR('#196: 1073741823 >>> 5 === 33554431. Actual: ' + (1073741823 >>> 5)); -} - - -if (2147483647 >>> 5 !== 67108863) { - $ERROR('#197: 2147483647 >>> 5 === 67108863. Actual: ' + (2147483647 >>> 5)); -} - - -if (4294967295 >>> 5 !== 134217727) { - $ERROR('#198: 4294967295 >>> 5 === 134217727. Actual: ' + (4294967295 >>> 5)); -} - - -if (0 >>> 6 !== 0) { - $ERROR('#199: 0 >>> 6 === 0. Actual: ' + (0 >>> 6)); -} - - -if (1 >>> 6 !== 0) { - $ERROR('#200: 1 >>> 6 === 0. Actual: ' + (1 >>> 6)); -} - - -if (3 >>> 6 !== 0) { - $ERROR('#201: 3 >>> 6 === 0. Actual: ' + (3 >>> 6)); -} - - -if (7 >>> 6 !== 0) { - $ERROR('#202: 7 >>> 6 === 0. Actual: ' + (7 >>> 6)); -} - - -if (15 >>> 6 !== 0) { - $ERROR('#203: 15 >>> 6 === 0. Actual: ' + (15 >>> 6)); -} - - -if (31 >>> 6 !== 0) { - $ERROR('#204: 31 >>> 6 === 0. Actual: ' + (31 >>> 6)); -} - - -if (63 >>> 6 !== 0) { - $ERROR('#205: 63 >>> 6 === 0. Actual: ' + (63 >>> 6)); -} - - -if (127 >>> 6 !== 1) { - $ERROR('#206: 127 >>> 6 === 1. Actual: ' + (127 >>> 6)); -} - - -if (255 >>> 6 !== 3) { - $ERROR('#207: 255 >>> 6 === 3. Actual: ' + (255 >>> 6)); -} - - -if (511 >>> 6 !== 7) { - $ERROR('#208: 511 >>> 6 === 7. Actual: ' + (511 >>> 6)); -} - - -if (1023 >>> 6 !== 15) { - $ERROR('#209: 1023 >>> 6 === 15. Actual: ' + (1023 >>> 6)); -} - - -if (2047 >>> 6 !== 31) { - $ERROR('#210: 2047 >>> 6 === 31. Actual: ' + (2047 >>> 6)); -} - - -if (4095 >>> 6 !== 63) { - $ERROR('#211: 4095 >>> 6 === 63. Actual: ' + (4095 >>> 6)); -} - - -if (8191 >>> 6 !== 127) { - $ERROR('#212: 8191 >>> 6 === 127. Actual: ' + (8191 >>> 6)); -} - - -if (16383 >>> 6 !== 255) { - $ERROR('#213: 16383 >>> 6 === 255. Actual: ' + (16383 >>> 6)); -} - - -if (32767 >>> 6 !== 511) { - $ERROR('#214: 32767 >>> 6 === 511. Actual: ' + (32767 >>> 6)); -} - - -if (65535 >>> 6 !== 1023) { - $ERROR('#215: 65535 >>> 6 === 1023. Actual: ' + (65535 >>> 6)); -} - - -if (131071 >>> 6 !== 2047) { - $ERROR('#216: 131071 >>> 6 === 2047. Actual: ' + (131071 >>> 6)); -} - - -if (262143 >>> 6 !== 4095) { - $ERROR('#217: 262143 >>> 6 === 4095. Actual: ' + (262143 >>> 6)); -} - - -if (524287 >>> 6 !== 8191) { - $ERROR('#218: 524287 >>> 6 === 8191. Actual: ' + (524287 >>> 6)); -} - - -if (1048575 >>> 6 !== 16383) { - $ERROR('#219: 1048575 >>> 6 === 16383. Actual: ' + (1048575 >>> 6)); -} - - -if (2097151 >>> 6 !== 32767) { - $ERROR('#220: 2097151 >>> 6 === 32767. Actual: ' + (2097151 >>> 6)); -} - - -if (4194303 >>> 6 !== 65535) { - $ERROR('#221: 4194303 >>> 6 === 65535. Actual: ' + (4194303 >>> 6)); -} - - -if (8388607 >>> 6 !== 131071) { - $ERROR('#222: 8388607 >>> 6 === 131071. Actual: ' + (8388607 >>> 6)); -} - - -if (16777215 >>> 6 !== 262143) { - $ERROR('#223: 16777215 >>> 6 === 262143. Actual: ' + (16777215 >>> 6)); -} - - -if (33554431 >>> 6 !== 524287) { - $ERROR('#224: 33554431 >>> 6 === 524287. Actual: ' + (33554431 >>> 6)); -} - - -if (67108863 >>> 6 !== 1048575) { - $ERROR('#225: 67108863 >>> 6 === 1048575. Actual: ' + (67108863 >>> 6)); -} - - -if (134217727 >>> 6 !== 2097151) { - $ERROR('#226: 134217727 >>> 6 === 2097151. Actual: ' + (134217727 >>> 6)); -} - - -if (268435455 >>> 6 !== 4194303) { - $ERROR('#227: 268435455 >>> 6 === 4194303. Actual: ' + (268435455 >>> 6)); -} - - -if (536870911 >>> 6 !== 8388607) { - $ERROR('#228: 536870911 >>> 6 === 8388607. Actual: ' + (536870911 >>> 6)); -} - - -if (1073741823 >>> 6 !== 16777215) { - $ERROR('#229: 1073741823 >>> 6 === 16777215. Actual: ' + (1073741823 >>> 6)); -} - - -if (2147483647 >>> 6 !== 33554431) { - $ERROR('#230: 2147483647 >>> 6 === 33554431. Actual: ' + (2147483647 >>> 6)); -} - - -if (4294967295 >>> 6 !== 67108863) { - $ERROR('#231: 4294967295 >>> 6 === 67108863. Actual: ' + (4294967295 >>> 6)); -} - - -if (0 >>> 7 !== 0) { - $ERROR('#232: 0 >>> 7 === 0. Actual: ' + (0 >>> 7)); -} - - -if (1 >>> 7 !== 0) { - $ERROR('#233: 1 >>> 7 === 0. Actual: ' + (1 >>> 7)); -} - - -if (3 >>> 7 !== 0) { - $ERROR('#234: 3 >>> 7 === 0. Actual: ' + (3 >>> 7)); -} - - -if (7 >>> 7 !== 0) { - $ERROR('#235: 7 >>> 7 === 0. Actual: ' + (7 >>> 7)); -} - - -if (15 >>> 7 !== 0) { - $ERROR('#236: 15 >>> 7 === 0. Actual: ' + (15 >>> 7)); -} - - -if (31 >>> 7 !== 0) { - $ERROR('#237: 31 >>> 7 === 0. Actual: ' + (31 >>> 7)); -} - - -if (63 >>> 7 !== 0) { - $ERROR('#238: 63 >>> 7 === 0. Actual: ' + (63 >>> 7)); -} - - -if (127 >>> 7 !== 0) { - $ERROR('#239: 127 >>> 7 === 0. Actual: ' + (127 >>> 7)); -} - - -if (255 >>> 7 !== 1) { - $ERROR('#240: 255 >>> 7 === 1. Actual: ' + (255 >>> 7)); -} - - -if (511 >>> 7 !== 3) { - $ERROR('#241: 511 >>> 7 === 3. Actual: ' + (511 >>> 7)); -} - - -if (1023 >>> 7 !== 7) { - $ERROR('#242: 1023 >>> 7 === 7. Actual: ' + (1023 >>> 7)); -} - - -if (2047 >>> 7 !== 15) { - $ERROR('#243: 2047 >>> 7 === 15. Actual: ' + (2047 >>> 7)); -} - - -if (4095 >>> 7 !== 31) { - $ERROR('#244: 4095 >>> 7 === 31. Actual: ' + (4095 >>> 7)); -} - - -if (8191 >>> 7 !== 63) { - $ERROR('#245: 8191 >>> 7 === 63. Actual: ' + (8191 >>> 7)); -} - - -if (16383 >>> 7 !== 127) { - $ERROR('#246: 16383 >>> 7 === 127. Actual: ' + (16383 >>> 7)); -} - - -if (32767 >>> 7 !== 255) { - $ERROR('#247: 32767 >>> 7 === 255. Actual: ' + (32767 >>> 7)); -} - - -if (65535 >>> 7 !== 511) { - $ERROR('#248: 65535 >>> 7 === 511. Actual: ' + (65535 >>> 7)); -} - - -if (131071 >>> 7 !== 1023) { - $ERROR('#249: 131071 >>> 7 === 1023. Actual: ' + (131071 >>> 7)); -} - - -if (262143 >>> 7 !== 2047) { - $ERROR('#250: 262143 >>> 7 === 2047. Actual: ' + (262143 >>> 7)); -} - - -if (524287 >>> 7 !== 4095) { - $ERROR('#251: 524287 >>> 7 === 4095. Actual: ' + (524287 >>> 7)); -} - - -if (1048575 >>> 7 !== 8191) { - $ERROR('#252: 1048575 >>> 7 === 8191. Actual: ' + (1048575 >>> 7)); -} - - -if (2097151 >>> 7 !== 16383) { - $ERROR('#253: 2097151 >>> 7 === 16383. Actual: ' + (2097151 >>> 7)); -} - - -if (4194303 >>> 7 !== 32767) { - $ERROR('#254: 4194303 >>> 7 === 32767. Actual: ' + (4194303 >>> 7)); -} - - -if (8388607 >>> 7 !== 65535) { - $ERROR('#255: 8388607 >>> 7 === 65535. Actual: ' + (8388607 >>> 7)); -} - - -if (16777215 >>> 7 !== 131071) { - $ERROR('#256: 16777215 >>> 7 === 131071. Actual: ' + (16777215 >>> 7)); -} - - -if (33554431 >>> 7 !== 262143) { - $ERROR('#257: 33554431 >>> 7 === 262143. Actual: ' + (33554431 >>> 7)); -} - - -if (67108863 >>> 7 !== 524287) { - $ERROR('#258: 67108863 >>> 7 === 524287. Actual: ' + (67108863 >>> 7)); -} - - -if (134217727 >>> 7 !== 1048575) { - $ERROR('#259: 134217727 >>> 7 === 1048575. Actual: ' + (134217727 >>> 7)); -} - - -if (268435455 >>> 7 !== 2097151) { - $ERROR('#260: 268435455 >>> 7 === 2097151. Actual: ' + (268435455 >>> 7)); -} - - -if (536870911 >>> 7 !== 4194303) { - $ERROR('#261: 536870911 >>> 7 === 4194303. Actual: ' + (536870911 >>> 7)); -} - - -if (1073741823 >>> 7 !== 8388607) { - $ERROR('#262: 1073741823 >>> 7 === 8388607. Actual: ' + (1073741823 >>> 7)); -} - - -if (2147483647 >>> 7 !== 16777215) { - $ERROR('#263: 2147483647 >>> 7 === 16777215. Actual: ' + (2147483647 >>> 7)); -} - - -if (4294967295 >>> 7 !== 33554431) { - $ERROR('#264: 4294967295 >>> 7 === 33554431. Actual: ' + (4294967295 >>> 7)); -} - - -if (0 >>> 8 !== 0) { - $ERROR('#265: 0 >>> 8 === 0. Actual: ' + (0 >>> 8)); -} - - -if (1 >>> 8 !== 0) { - $ERROR('#266: 1 >>> 8 === 0. Actual: ' + (1 >>> 8)); -} - - -if (3 >>> 8 !== 0) { - $ERROR('#267: 3 >>> 8 === 0. Actual: ' + (3 >>> 8)); -} - - -if (7 >>> 8 !== 0) { - $ERROR('#268: 7 >>> 8 === 0. Actual: ' + (7 >>> 8)); -} - - -if (15 >>> 8 !== 0) { - $ERROR('#269: 15 >>> 8 === 0. Actual: ' + (15 >>> 8)); -} - - -if (31 >>> 8 !== 0) { - $ERROR('#270: 31 >>> 8 === 0. Actual: ' + (31 >>> 8)); -} - - -if (63 >>> 8 !== 0) { - $ERROR('#271: 63 >>> 8 === 0. Actual: ' + (63 >>> 8)); -} - - -if (127 >>> 8 !== 0) { - $ERROR('#272: 127 >>> 8 === 0. Actual: ' + (127 >>> 8)); -} - - -if (255 >>> 8 !== 0) { - $ERROR('#273: 255 >>> 8 === 0. Actual: ' + (255 >>> 8)); -} - - -if (511 >>> 8 !== 1) { - $ERROR('#274: 511 >>> 8 === 1. Actual: ' + (511 >>> 8)); -} - - -if (1023 >>> 8 !== 3) { - $ERROR('#275: 1023 >>> 8 === 3. Actual: ' + (1023 >>> 8)); -} - - -if (2047 >>> 8 !== 7) { - $ERROR('#276: 2047 >>> 8 === 7. Actual: ' + (2047 >>> 8)); -} - - -if (4095 >>> 8 !== 15) { - $ERROR('#277: 4095 >>> 8 === 15. Actual: ' + (4095 >>> 8)); -} - - -if (8191 >>> 8 !== 31) { - $ERROR('#278: 8191 >>> 8 === 31. Actual: ' + (8191 >>> 8)); -} - - -if (16383 >>> 8 !== 63) { - $ERROR('#279: 16383 >>> 8 === 63. Actual: ' + (16383 >>> 8)); -} - - -if (32767 >>> 8 !== 127) { - $ERROR('#280: 32767 >>> 8 === 127. Actual: ' + (32767 >>> 8)); -} - - -if (65535 >>> 8 !== 255) { - $ERROR('#281: 65535 >>> 8 === 255. Actual: ' + (65535 >>> 8)); -} - - -if (131071 >>> 8 !== 511) { - $ERROR('#282: 131071 >>> 8 === 511. Actual: ' + (131071 >>> 8)); -} - - -if (262143 >>> 8 !== 1023) { - $ERROR('#283: 262143 >>> 8 === 1023. Actual: ' + (262143 >>> 8)); -} - - -if (524287 >>> 8 !== 2047) { - $ERROR('#284: 524287 >>> 8 === 2047. Actual: ' + (524287 >>> 8)); -} - - -if (1048575 >>> 8 !== 4095) { - $ERROR('#285: 1048575 >>> 8 === 4095. Actual: ' + (1048575 >>> 8)); -} - - -if (2097151 >>> 8 !== 8191) { - $ERROR('#286: 2097151 >>> 8 === 8191. Actual: ' + (2097151 >>> 8)); -} - - -if (4194303 >>> 8 !== 16383) { - $ERROR('#287: 4194303 >>> 8 === 16383. Actual: ' + (4194303 >>> 8)); -} - - -if (8388607 >>> 8 !== 32767) { - $ERROR('#288: 8388607 >>> 8 === 32767. Actual: ' + (8388607 >>> 8)); -} - - -if (16777215 >>> 8 !== 65535) { - $ERROR('#289: 16777215 >>> 8 === 65535. Actual: ' + (16777215 >>> 8)); -} - - -if (33554431 >>> 8 !== 131071) { - $ERROR('#290: 33554431 >>> 8 === 131071. Actual: ' + (33554431 >>> 8)); -} - - -if (67108863 >>> 8 !== 262143) { - $ERROR('#291: 67108863 >>> 8 === 262143. Actual: ' + (67108863 >>> 8)); -} - - -if (134217727 >>> 8 !== 524287) { - $ERROR('#292: 134217727 >>> 8 === 524287. Actual: ' + (134217727 >>> 8)); -} - - -if (268435455 >>> 8 !== 1048575) { - $ERROR('#293: 268435455 >>> 8 === 1048575. Actual: ' + (268435455 >>> 8)); -} - - -if (536870911 >>> 8 !== 2097151) { - $ERROR('#294: 536870911 >>> 8 === 2097151. Actual: ' + (536870911 >>> 8)); -} - - -if (1073741823 >>> 8 !== 4194303) { - $ERROR('#295: 1073741823 >>> 8 === 4194303. Actual: ' + (1073741823 >>> 8)); -} - - -if (2147483647 >>> 8 !== 8388607) { - $ERROR('#296: 2147483647 >>> 8 === 8388607. Actual: ' + (2147483647 >>> 8)); -} - - -if (4294967295 >>> 8 !== 16777215) { - $ERROR('#297: 4294967295 >>> 8 === 16777215. Actual: ' + (4294967295 >>> 8)); -} - - -if (0 >>> 9 !== 0) { - $ERROR('#298: 0 >>> 9 === 0. Actual: ' + (0 >>> 9)); -} - - -if (1 >>> 9 !== 0) { - $ERROR('#299: 1 >>> 9 === 0. Actual: ' + (1 >>> 9)); -} - - -if (3 >>> 9 !== 0) { - $ERROR('#300: 3 >>> 9 === 0. Actual: ' + (3 >>> 9)); -} - - -if (7 >>> 9 !== 0) { - $ERROR('#301: 7 >>> 9 === 0. Actual: ' + (7 >>> 9)); -} - - -if (15 >>> 9 !== 0) { - $ERROR('#302: 15 >>> 9 === 0. Actual: ' + (15 >>> 9)); -} - - -if (31 >>> 9 !== 0) { - $ERROR('#303: 31 >>> 9 === 0. Actual: ' + (31 >>> 9)); -} - - -if (63 >>> 9 !== 0) { - $ERROR('#304: 63 >>> 9 === 0. Actual: ' + (63 >>> 9)); -} - - -if (127 >>> 9 !== 0) { - $ERROR('#305: 127 >>> 9 === 0. Actual: ' + (127 >>> 9)); -} - - -if (255 >>> 9 !== 0) { - $ERROR('#306: 255 >>> 9 === 0. Actual: ' + (255 >>> 9)); -} - - -if (511 >>> 9 !== 0) { - $ERROR('#307: 511 >>> 9 === 0. Actual: ' + (511 >>> 9)); -} - - -if (1023 >>> 9 !== 1) { - $ERROR('#308: 1023 >>> 9 === 1. Actual: ' + (1023 >>> 9)); -} - - -if (2047 >>> 9 !== 3) { - $ERROR('#309: 2047 >>> 9 === 3. Actual: ' + (2047 >>> 9)); -} - - -if (4095 >>> 9 !== 7) { - $ERROR('#310: 4095 >>> 9 === 7. Actual: ' + (4095 >>> 9)); -} - - -if (8191 >>> 9 !== 15) { - $ERROR('#311: 8191 >>> 9 === 15. Actual: ' + (8191 >>> 9)); -} - - -if (16383 >>> 9 !== 31) { - $ERROR('#312: 16383 >>> 9 === 31. Actual: ' + (16383 >>> 9)); -} - - -if (32767 >>> 9 !== 63) { - $ERROR('#313: 32767 >>> 9 === 63. Actual: ' + (32767 >>> 9)); -} - - -if (65535 >>> 9 !== 127) { - $ERROR('#314: 65535 >>> 9 === 127. Actual: ' + (65535 >>> 9)); -} - - -if (131071 >>> 9 !== 255) { - $ERROR('#315: 131071 >>> 9 === 255. Actual: ' + (131071 >>> 9)); -} - - -if (262143 >>> 9 !== 511) { - $ERROR('#316: 262143 >>> 9 === 511. Actual: ' + (262143 >>> 9)); -} - - -if (524287 >>> 9 !== 1023) { - $ERROR('#317: 524287 >>> 9 === 1023. Actual: ' + (524287 >>> 9)); -} - - -if (1048575 >>> 9 !== 2047) { - $ERROR('#318: 1048575 >>> 9 === 2047. Actual: ' + (1048575 >>> 9)); -} - - -if (2097151 >>> 9 !== 4095) { - $ERROR('#319: 2097151 >>> 9 === 4095. Actual: ' + (2097151 >>> 9)); -} - - -if (4194303 >>> 9 !== 8191) { - $ERROR('#320: 4194303 >>> 9 === 8191. Actual: ' + (4194303 >>> 9)); -} - - -if (8388607 >>> 9 !== 16383) { - $ERROR('#321: 8388607 >>> 9 === 16383. Actual: ' + (8388607 >>> 9)); -} - - -if (16777215 >>> 9 !== 32767) { - $ERROR('#322: 16777215 >>> 9 === 32767. Actual: ' + (16777215 >>> 9)); -} - - -if (33554431 >>> 9 !== 65535) { - $ERROR('#323: 33554431 >>> 9 === 65535. Actual: ' + (33554431 >>> 9)); -} - - -if (67108863 >>> 9 !== 131071) { - $ERROR('#324: 67108863 >>> 9 === 131071. Actual: ' + (67108863 >>> 9)); -} - - -if (134217727 >>> 9 !== 262143) { - $ERROR('#325: 134217727 >>> 9 === 262143. Actual: ' + (134217727 >>> 9)); -} - - -if (268435455 >>> 9 !== 524287) { - $ERROR('#326: 268435455 >>> 9 === 524287. Actual: ' + (268435455 >>> 9)); -} - - -if (536870911 >>> 9 !== 1048575) { - $ERROR('#327: 536870911 >>> 9 === 1048575. Actual: ' + (536870911 >>> 9)); -} - - -if (1073741823 >>> 9 !== 2097151) { - $ERROR('#328: 1073741823 >>> 9 === 2097151. Actual: ' + (1073741823 >>> 9)); -} - - -if (2147483647 >>> 9 !== 4194303) { - $ERROR('#329: 2147483647 >>> 9 === 4194303. Actual: ' + (2147483647 >>> 9)); -} - - -if (4294967295 >>> 9 !== 8388607) { - $ERROR('#330: 4294967295 >>> 9 === 8388607. Actual: ' + (4294967295 >>> 9)); -} - - -if (0 >>> 10 !== 0) { - $ERROR('#331: 0 >>> 10 === 0. Actual: ' + (0 >>> 10)); -} - - -if (1 >>> 10 !== 0) { - $ERROR('#332: 1 >>> 10 === 0. Actual: ' + (1 >>> 10)); -} - - -if (3 >>> 10 !== 0) { - $ERROR('#333: 3 >>> 10 === 0. Actual: ' + (3 >>> 10)); -} - - -if (7 >>> 10 !== 0) { - $ERROR('#334: 7 >>> 10 === 0. Actual: ' + (7 >>> 10)); -} - - -if (15 >>> 10 !== 0) { - $ERROR('#335: 15 >>> 10 === 0. Actual: ' + (15 >>> 10)); -} - - -if (31 >>> 10 !== 0) { - $ERROR('#336: 31 >>> 10 === 0. Actual: ' + (31 >>> 10)); -} - - -if (63 >>> 10 !== 0) { - $ERROR('#337: 63 >>> 10 === 0. Actual: ' + (63 >>> 10)); -} - - -if (127 >>> 10 !== 0) { - $ERROR('#338: 127 >>> 10 === 0. Actual: ' + (127 >>> 10)); -} - - -if (255 >>> 10 !== 0) { - $ERROR('#339: 255 >>> 10 === 0. Actual: ' + (255 >>> 10)); -} - - -if (511 >>> 10 !== 0) { - $ERROR('#340: 511 >>> 10 === 0. Actual: ' + (511 >>> 10)); -} - - -if (1023 >>> 10 !== 0) { - $ERROR('#341: 1023 >>> 10 === 0. Actual: ' + (1023 >>> 10)); -} - - -if (2047 >>> 10 !== 1) { - $ERROR('#342: 2047 >>> 10 === 1. Actual: ' + (2047 >>> 10)); -} - - -if (4095 >>> 10 !== 3) { - $ERROR('#343: 4095 >>> 10 === 3. Actual: ' + (4095 >>> 10)); -} - - -if (8191 >>> 10 !== 7) { - $ERROR('#344: 8191 >>> 10 === 7. Actual: ' + (8191 >>> 10)); -} - - -if (16383 >>> 10 !== 15) { - $ERROR('#345: 16383 >>> 10 === 15. Actual: ' + (16383 >>> 10)); -} - - -if (32767 >>> 10 !== 31) { - $ERROR('#346: 32767 >>> 10 === 31. Actual: ' + (32767 >>> 10)); -} - - -if (65535 >>> 10 !== 63) { - $ERROR('#347: 65535 >>> 10 === 63. Actual: ' + (65535 >>> 10)); -} - - -if (131071 >>> 10 !== 127) { - $ERROR('#348: 131071 >>> 10 === 127. Actual: ' + (131071 >>> 10)); -} - - -if (262143 >>> 10 !== 255) { - $ERROR('#349: 262143 >>> 10 === 255. Actual: ' + (262143 >>> 10)); -} - - -if (524287 >>> 10 !== 511) { - $ERROR('#350: 524287 >>> 10 === 511. Actual: ' + (524287 >>> 10)); -} - - -if (1048575 >>> 10 !== 1023) { - $ERROR('#351: 1048575 >>> 10 === 1023. Actual: ' + (1048575 >>> 10)); -} - - -if (2097151 >>> 10 !== 2047) { - $ERROR('#352: 2097151 >>> 10 === 2047. Actual: ' + (2097151 >>> 10)); -} - - -if (4194303 >>> 10 !== 4095) { - $ERROR('#353: 4194303 >>> 10 === 4095. Actual: ' + (4194303 >>> 10)); -} - - -if (8388607 >>> 10 !== 8191) { - $ERROR('#354: 8388607 >>> 10 === 8191. Actual: ' + (8388607 >>> 10)); -} - - -if (16777215 >>> 10 !== 16383) { - $ERROR('#355: 16777215 >>> 10 === 16383. Actual: ' + (16777215 >>> 10)); -} - - -if (33554431 >>> 10 !== 32767) { - $ERROR('#356: 33554431 >>> 10 === 32767. Actual: ' + (33554431 >>> 10)); -} - - -if (67108863 >>> 10 !== 65535) { - $ERROR('#357: 67108863 >>> 10 === 65535. Actual: ' + (67108863 >>> 10)); -} - - -if (134217727 >>> 10 !== 131071) { - $ERROR('#358: 134217727 >>> 10 === 131071. Actual: ' + (134217727 >>> 10)); -} - - -if (268435455 >>> 10 !== 262143) { - $ERROR('#359: 268435455 >>> 10 === 262143. Actual: ' + (268435455 >>> 10)); -} - - -if (536870911 >>> 10 !== 524287) { - $ERROR('#360: 536870911 >>> 10 === 524287. Actual: ' + (536870911 >>> 10)); -} - - -if (1073741823 >>> 10 !== 1048575) { - $ERROR('#361: 1073741823 >>> 10 === 1048575. Actual: ' + (1073741823 >>> 10)); -} - - -if (2147483647 >>> 10 !== 2097151) { - $ERROR('#362: 2147483647 >>> 10 === 2097151. Actual: ' + (2147483647 >>> 10)); -} - - -if (4294967295 >>> 10 !== 4194303) { - $ERROR('#363: 4294967295 >>> 10 === 4194303. Actual: ' + (4294967295 >>> 10)); -} - - -if (0 >>> 11 !== 0) { - $ERROR('#364: 0 >>> 11 === 0. Actual: ' + (0 >>> 11)); -} - - -if (1 >>> 11 !== 0) { - $ERROR('#365: 1 >>> 11 === 0. Actual: ' + (1 >>> 11)); -} - - -if (3 >>> 11 !== 0) { - $ERROR('#366: 3 >>> 11 === 0. Actual: ' + (3 >>> 11)); -} - - -if (7 >>> 11 !== 0) { - $ERROR('#367: 7 >>> 11 === 0. Actual: ' + (7 >>> 11)); -} - - -if (15 >>> 11 !== 0) { - $ERROR('#368: 15 >>> 11 === 0. Actual: ' + (15 >>> 11)); -} - - -if (31 >>> 11 !== 0) { - $ERROR('#369: 31 >>> 11 === 0. Actual: ' + (31 >>> 11)); -} - - -if (63 >>> 11 !== 0) { - $ERROR('#370: 63 >>> 11 === 0. Actual: ' + (63 >>> 11)); -} - - -if (127 >>> 11 !== 0) { - $ERROR('#371: 127 >>> 11 === 0. Actual: ' + (127 >>> 11)); -} - - -if (255 >>> 11 !== 0) { - $ERROR('#372: 255 >>> 11 === 0. Actual: ' + (255 >>> 11)); -} - - -if (511 >>> 11 !== 0) { - $ERROR('#373: 511 >>> 11 === 0. Actual: ' + (511 >>> 11)); -} - - -if (1023 >>> 11 !== 0) { - $ERROR('#374: 1023 >>> 11 === 0. Actual: ' + (1023 >>> 11)); -} - - -if (2047 >>> 11 !== 0) { - $ERROR('#375: 2047 >>> 11 === 0. Actual: ' + (2047 >>> 11)); -} - - -if (4095 >>> 11 !== 1) { - $ERROR('#376: 4095 >>> 11 === 1. Actual: ' + (4095 >>> 11)); -} - - -if (8191 >>> 11 !== 3) { - $ERROR('#377: 8191 >>> 11 === 3. Actual: ' + (8191 >>> 11)); -} - - -if (16383 >>> 11 !== 7) { - $ERROR('#378: 16383 >>> 11 === 7. Actual: ' + (16383 >>> 11)); -} - - -if (32767 >>> 11 !== 15) { - $ERROR('#379: 32767 >>> 11 === 15. Actual: ' + (32767 >>> 11)); -} - - -if (65535 >>> 11 !== 31) { - $ERROR('#380: 65535 >>> 11 === 31. Actual: ' + (65535 >>> 11)); -} - - -if (131071 >>> 11 !== 63) { - $ERROR('#381: 131071 >>> 11 === 63. Actual: ' + (131071 >>> 11)); -} - - -if (262143 >>> 11 !== 127) { - $ERROR('#382: 262143 >>> 11 === 127. Actual: ' + (262143 >>> 11)); -} - - -if (524287 >>> 11 !== 255) { - $ERROR('#383: 524287 >>> 11 === 255. Actual: ' + (524287 >>> 11)); -} - - -if (1048575 >>> 11 !== 511) { - $ERROR('#384: 1048575 >>> 11 === 511. Actual: ' + (1048575 >>> 11)); -} - - -if (2097151 >>> 11 !== 1023) { - $ERROR('#385: 2097151 >>> 11 === 1023. Actual: ' + (2097151 >>> 11)); -} - - -if (4194303 >>> 11 !== 2047) { - $ERROR('#386: 4194303 >>> 11 === 2047. Actual: ' + (4194303 >>> 11)); -} - - -if (8388607 >>> 11 !== 4095) { - $ERROR('#387: 8388607 >>> 11 === 4095. Actual: ' + (8388607 >>> 11)); -} - - -if (16777215 >>> 11 !== 8191) { - $ERROR('#388: 16777215 >>> 11 === 8191. Actual: ' + (16777215 >>> 11)); -} - - -if (33554431 >>> 11 !== 16383) { - $ERROR('#389: 33554431 >>> 11 === 16383. Actual: ' + (33554431 >>> 11)); -} - - -if (67108863 >>> 11 !== 32767) { - $ERROR('#390: 67108863 >>> 11 === 32767. Actual: ' + (67108863 >>> 11)); -} - - -if (134217727 >>> 11 !== 65535) { - $ERROR('#391: 134217727 >>> 11 === 65535. Actual: ' + (134217727 >>> 11)); -} - - -if (268435455 >>> 11 !== 131071) { - $ERROR('#392: 268435455 >>> 11 === 131071. Actual: ' + (268435455 >>> 11)); -} - - -if (536870911 >>> 11 !== 262143) { - $ERROR('#393: 536870911 >>> 11 === 262143. Actual: ' + (536870911 >>> 11)); -} - - -if (1073741823 >>> 11 !== 524287) { - $ERROR('#394: 1073741823 >>> 11 === 524287. Actual: ' + (1073741823 >>> 11)); -} - - -if (2147483647 >>> 11 !== 1048575) { - $ERROR('#395: 2147483647 >>> 11 === 1048575. Actual: ' + (2147483647 >>> 11)); -} - - -if (4294967295 >>> 11 !== 2097151) { - $ERROR('#396: 4294967295 >>> 11 === 2097151. Actual: ' + (4294967295 >>> 11)); -} - - -if (0 >>> 12 !== 0) { - $ERROR('#397: 0 >>> 12 === 0. Actual: ' + (0 >>> 12)); -} - - -if (1 >>> 12 !== 0) { - $ERROR('#398: 1 >>> 12 === 0. Actual: ' + (1 >>> 12)); -} - - -if (3 >>> 12 !== 0) { - $ERROR('#399: 3 >>> 12 === 0. Actual: ' + (3 >>> 12)); -} - - -if (7 >>> 12 !== 0) { - $ERROR('#400: 7 >>> 12 === 0. Actual: ' + (7 >>> 12)); -} - - -if (15 >>> 12 !== 0) { - $ERROR('#401: 15 >>> 12 === 0. Actual: ' + (15 >>> 12)); -} - - -if (31 >>> 12 !== 0) { - $ERROR('#402: 31 >>> 12 === 0. Actual: ' + (31 >>> 12)); -} - - -if (63 >>> 12 !== 0) { - $ERROR('#403: 63 >>> 12 === 0. Actual: ' + (63 >>> 12)); -} - - -if (127 >>> 12 !== 0) { - $ERROR('#404: 127 >>> 12 === 0. Actual: ' + (127 >>> 12)); -} - - -if (255 >>> 12 !== 0) { - $ERROR('#405: 255 >>> 12 === 0. Actual: ' + (255 >>> 12)); -} - - -if (511 >>> 12 !== 0) { - $ERROR('#406: 511 >>> 12 === 0. Actual: ' + (511 >>> 12)); -} - - -if (1023 >>> 12 !== 0) { - $ERROR('#407: 1023 >>> 12 === 0. Actual: ' + (1023 >>> 12)); -} - - -if (2047 >>> 12 !== 0) { - $ERROR('#408: 2047 >>> 12 === 0. Actual: ' + (2047 >>> 12)); -} - - -if (4095 >>> 12 !== 0) { - $ERROR('#409: 4095 >>> 12 === 0. Actual: ' + (4095 >>> 12)); -} - - -if (8191 >>> 12 !== 1) { - $ERROR('#410: 8191 >>> 12 === 1. Actual: ' + (8191 >>> 12)); -} - - -if (16383 >>> 12 !== 3) { - $ERROR('#411: 16383 >>> 12 === 3. Actual: ' + (16383 >>> 12)); -} - - -if (32767 >>> 12 !== 7) { - $ERROR('#412: 32767 >>> 12 === 7. Actual: ' + (32767 >>> 12)); -} - - -if (65535 >>> 12 !== 15) { - $ERROR('#413: 65535 >>> 12 === 15. Actual: ' + (65535 >>> 12)); -} - - -if (131071 >>> 12 !== 31) { - $ERROR('#414: 131071 >>> 12 === 31. Actual: ' + (131071 >>> 12)); -} - - -if (262143 >>> 12 !== 63) { - $ERROR('#415: 262143 >>> 12 === 63. Actual: ' + (262143 >>> 12)); -} - - -if (524287 >>> 12 !== 127) { - $ERROR('#416: 524287 >>> 12 === 127. Actual: ' + (524287 >>> 12)); -} - - -if (1048575 >>> 12 !== 255) { - $ERROR('#417: 1048575 >>> 12 === 255. Actual: ' + (1048575 >>> 12)); -} - - -if (2097151 >>> 12 !== 511) { - $ERROR('#418: 2097151 >>> 12 === 511. Actual: ' + (2097151 >>> 12)); -} - - -if (4194303 >>> 12 !== 1023) { - $ERROR('#419: 4194303 >>> 12 === 1023. Actual: ' + (4194303 >>> 12)); -} - - -if (8388607 >>> 12 !== 2047) { - $ERROR('#420: 8388607 >>> 12 === 2047. Actual: ' + (8388607 >>> 12)); -} - - -if (16777215 >>> 12 !== 4095) { - $ERROR('#421: 16777215 >>> 12 === 4095. Actual: ' + (16777215 >>> 12)); -} - - -if (33554431 >>> 12 !== 8191) { - $ERROR('#422: 33554431 >>> 12 === 8191. Actual: ' + (33554431 >>> 12)); -} - - -if (67108863 >>> 12 !== 16383) { - $ERROR('#423: 67108863 >>> 12 === 16383. Actual: ' + (67108863 >>> 12)); -} - - -if (134217727 >>> 12 !== 32767) { - $ERROR('#424: 134217727 >>> 12 === 32767. Actual: ' + (134217727 >>> 12)); -} - - -if (268435455 >>> 12 !== 65535) { - $ERROR('#425: 268435455 >>> 12 === 65535. Actual: ' + (268435455 >>> 12)); -} - - -if (536870911 >>> 12 !== 131071) { - $ERROR('#426: 536870911 >>> 12 === 131071. Actual: ' + (536870911 >>> 12)); -} - - -if (1073741823 >>> 12 !== 262143) { - $ERROR('#427: 1073741823 >>> 12 === 262143. Actual: ' + (1073741823 >>> 12)); -} - - -if (2147483647 >>> 12 !== 524287) { - $ERROR('#428: 2147483647 >>> 12 === 524287. Actual: ' + (2147483647 >>> 12)); -} - - -if (4294967295 >>> 12 !== 1048575) { - $ERROR('#429: 4294967295 >>> 12 === 1048575. Actual: ' + (4294967295 >>> 12)); -} - - -if (0 >>> 13 !== 0) { - $ERROR('#430: 0 >>> 13 === 0. Actual: ' + (0 >>> 13)); -} - - -if (1 >>> 13 !== 0) { - $ERROR('#431: 1 >>> 13 === 0. Actual: ' + (1 >>> 13)); -} - - -if (3 >>> 13 !== 0) { - $ERROR('#432: 3 >>> 13 === 0. Actual: ' + (3 >>> 13)); -} - - -if (7 >>> 13 !== 0) { - $ERROR('#433: 7 >>> 13 === 0. Actual: ' + (7 >>> 13)); -} - - -if (15 >>> 13 !== 0) { - $ERROR('#434: 15 >>> 13 === 0. Actual: ' + (15 >>> 13)); -} - - -if (31 >>> 13 !== 0) { - $ERROR('#435: 31 >>> 13 === 0. Actual: ' + (31 >>> 13)); -} - - -if (63 >>> 13 !== 0) { - $ERROR('#436: 63 >>> 13 === 0. Actual: ' + (63 >>> 13)); -} - - -if (127 >>> 13 !== 0) { - $ERROR('#437: 127 >>> 13 === 0. Actual: ' + (127 >>> 13)); -} - - -if (255 >>> 13 !== 0) { - $ERROR('#438: 255 >>> 13 === 0. Actual: ' + (255 >>> 13)); -} - - -if (511 >>> 13 !== 0) { - $ERROR('#439: 511 >>> 13 === 0. Actual: ' + (511 >>> 13)); -} - - -if (1023 >>> 13 !== 0) { - $ERROR('#440: 1023 >>> 13 === 0. Actual: ' + (1023 >>> 13)); -} - - -if (2047 >>> 13 !== 0) { - $ERROR('#441: 2047 >>> 13 === 0. Actual: ' + (2047 >>> 13)); -} - - -if (4095 >>> 13 !== 0) { - $ERROR('#442: 4095 >>> 13 === 0. Actual: ' + (4095 >>> 13)); -} - - -if (8191 >>> 13 !== 0) { - $ERROR('#443: 8191 >>> 13 === 0. Actual: ' + (8191 >>> 13)); -} - - -if (16383 >>> 13 !== 1) { - $ERROR('#444: 16383 >>> 13 === 1. Actual: ' + (16383 >>> 13)); -} - - -if (32767 >>> 13 !== 3) { - $ERROR('#445: 32767 >>> 13 === 3. Actual: ' + (32767 >>> 13)); -} - - -if (65535 >>> 13 !== 7) { - $ERROR('#446: 65535 >>> 13 === 7. Actual: ' + (65535 >>> 13)); -} - - -if (131071 >>> 13 !== 15) { - $ERROR('#447: 131071 >>> 13 === 15. Actual: ' + (131071 >>> 13)); -} - - -if (262143 >>> 13 !== 31) { - $ERROR('#448: 262143 >>> 13 === 31. Actual: ' + (262143 >>> 13)); -} - - -if (524287 >>> 13 !== 63) { - $ERROR('#449: 524287 >>> 13 === 63. Actual: ' + (524287 >>> 13)); -} - - -if (1048575 >>> 13 !== 127) { - $ERROR('#450: 1048575 >>> 13 === 127. Actual: ' + (1048575 >>> 13)); -} - - -if (2097151 >>> 13 !== 255) { - $ERROR('#451: 2097151 >>> 13 === 255. Actual: ' + (2097151 >>> 13)); -} - - -if (4194303 >>> 13 !== 511) { - $ERROR('#452: 4194303 >>> 13 === 511. Actual: ' + (4194303 >>> 13)); -} - - -if (8388607 >>> 13 !== 1023) { - $ERROR('#453: 8388607 >>> 13 === 1023. Actual: ' + (8388607 >>> 13)); -} - - -if (16777215 >>> 13 !== 2047) { - $ERROR('#454: 16777215 >>> 13 === 2047. Actual: ' + (16777215 >>> 13)); -} - - -if (33554431 >>> 13 !== 4095) { - $ERROR('#455: 33554431 >>> 13 === 4095. Actual: ' + (33554431 >>> 13)); -} - - -if (67108863 >>> 13 !== 8191) { - $ERROR('#456: 67108863 >>> 13 === 8191. Actual: ' + (67108863 >>> 13)); -} - - -if (134217727 >>> 13 !== 16383) { - $ERROR('#457: 134217727 >>> 13 === 16383. Actual: ' + (134217727 >>> 13)); -} - - -if (268435455 >>> 13 !== 32767) { - $ERROR('#458: 268435455 >>> 13 === 32767. Actual: ' + (268435455 >>> 13)); -} - - -if (536870911 >>> 13 !== 65535) { - $ERROR('#459: 536870911 >>> 13 === 65535. Actual: ' + (536870911 >>> 13)); -} - - -if (1073741823 >>> 13 !== 131071) { - $ERROR('#460: 1073741823 >>> 13 === 131071. Actual: ' + (1073741823 >>> 13)); -} - - -if (2147483647 >>> 13 !== 262143) { - $ERROR('#461: 2147483647 >>> 13 === 262143. Actual: ' + (2147483647 >>> 13)); -} - - -if (4294967295 >>> 13 !== 524287) { - $ERROR('#462: 4294967295 >>> 13 === 524287. Actual: ' + (4294967295 >>> 13)); -} - - -if (0 >>> 14 !== 0) { - $ERROR('#463: 0 >>> 14 === 0. Actual: ' + (0 >>> 14)); -} - - -if (1 >>> 14 !== 0) { - $ERROR('#464: 1 >>> 14 === 0. Actual: ' + (1 >>> 14)); -} - - -if (3 >>> 14 !== 0) { - $ERROR('#465: 3 >>> 14 === 0. Actual: ' + (3 >>> 14)); -} - - -if (7 >>> 14 !== 0) { - $ERROR('#466: 7 >>> 14 === 0. Actual: ' + (7 >>> 14)); -} - - -if (15 >>> 14 !== 0) { - $ERROR('#467: 15 >>> 14 === 0. Actual: ' + (15 >>> 14)); -} - - -if (31 >>> 14 !== 0) { - $ERROR('#468: 31 >>> 14 === 0. Actual: ' + (31 >>> 14)); -} - - -if (63 >>> 14 !== 0) { - $ERROR('#469: 63 >>> 14 === 0. Actual: ' + (63 >>> 14)); -} - - -if (127 >>> 14 !== 0) { - $ERROR('#470: 127 >>> 14 === 0. Actual: ' + (127 >>> 14)); -} - - -if (255 >>> 14 !== 0) { - $ERROR('#471: 255 >>> 14 === 0. Actual: ' + (255 >>> 14)); -} - - -if (511 >>> 14 !== 0) { - $ERROR('#472: 511 >>> 14 === 0. Actual: ' + (511 >>> 14)); -} - - -if (1023 >>> 14 !== 0) { - $ERROR('#473: 1023 >>> 14 === 0. Actual: ' + (1023 >>> 14)); -} - - -if (2047 >>> 14 !== 0) { - $ERROR('#474: 2047 >>> 14 === 0. Actual: ' + (2047 >>> 14)); -} - - -if (4095 >>> 14 !== 0) { - $ERROR('#475: 4095 >>> 14 === 0. Actual: ' + (4095 >>> 14)); -} - - -if (8191 >>> 14 !== 0) { - $ERROR('#476: 8191 >>> 14 === 0. Actual: ' + (8191 >>> 14)); -} - - -if (16383 >>> 14 !== 0) { - $ERROR('#477: 16383 >>> 14 === 0. Actual: ' + (16383 >>> 14)); -} - - -if (32767 >>> 14 !== 1) { - $ERROR('#478: 32767 >>> 14 === 1. Actual: ' + (32767 >>> 14)); -} - - -if (65535 >>> 14 !== 3) { - $ERROR('#479: 65535 >>> 14 === 3. Actual: ' + (65535 >>> 14)); -} - - -if (131071 >>> 14 !== 7) { - $ERROR('#480: 131071 >>> 14 === 7. Actual: ' + (131071 >>> 14)); -} - - -if (262143 >>> 14 !== 15) { - $ERROR('#481: 262143 >>> 14 === 15. Actual: ' + (262143 >>> 14)); -} - - -if (524287 >>> 14 !== 31) { - $ERROR('#482: 524287 >>> 14 === 31. Actual: ' + (524287 >>> 14)); -} - - -if (1048575 >>> 14 !== 63) { - $ERROR('#483: 1048575 >>> 14 === 63. Actual: ' + (1048575 >>> 14)); -} - - -if (2097151 >>> 14 !== 127) { - $ERROR('#484: 2097151 >>> 14 === 127. Actual: ' + (2097151 >>> 14)); -} - - -if (4194303 >>> 14 !== 255) { - $ERROR('#485: 4194303 >>> 14 === 255. Actual: ' + (4194303 >>> 14)); -} - - -if (8388607 >>> 14 !== 511) { - $ERROR('#486: 8388607 >>> 14 === 511. Actual: ' + (8388607 >>> 14)); -} - - -if (16777215 >>> 14 !== 1023) { - $ERROR('#487: 16777215 >>> 14 === 1023. Actual: ' + (16777215 >>> 14)); -} - - -if (33554431 >>> 14 !== 2047) { - $ERROR('#488: 33554431 >>> 14 === 2047. Actual: ' + (33554431 >>> 14)); -} - - -if (67108863 >>> 14 !== 4095) { - $ERROR('#489: 67108863 >>> 14 === 4095. Actual: ' + (67108863 >>> 14)); -} - - -if (134217727 >>> 14 !== 8191) { - $ERROR('#490: 134217727 >>> 14 === 8191. Actual: ' + (134217727 >>> 14)); -} - - -if (268435455 >>> 14 !== 16383) { - $ERROR('#491: 268435455 >>> 14 === 16383. Actual: ' + (268435455 >>> 14)); -} - - -if (536870911 >>> 14 !== 32767) { - $ERROR('#492: 536870911 >>> 14 === 32767. Actual: ' + (536870911 >>> 14)); -} - - -if (1073741823 >>> 14 !== 65535) { - $ERROR('#493: 1073741823 >>> 14 === 65535. Actual: ' + (1073741823 >>> 14)); -} - - -if (2147483647 >>> 14 !== 131071) { - $ERROR('#494: 2147483647 >>> 14 === 131071. Actual: ' + (2147483647 >>> 14)); -} - - -if (4294967295 >>> 14 !== 262143) { - $ERROR('#495: 4294967295 >>> 14 === 262143. Actual: ' + (4294967295 >>> 14)); -} - - -if (0 >>> 15 !== 0) { - $ERROR('#496: 0 >>> 15 === 0. Actual: ' + (0 >>> 15)); -} - - -if (1 >>> 15 !== 0) { - $ERROR('#497: 1 >>> 15 === 0. Actual: ' + (1 >>> 15)); -} - - -if (3 >>> 15 !== 0) { - $ERROR('#498: 3 >>> 15 === 0. Actual: ' + (3 >>> 15)); -} - - -if (7 >>> 15 !== 0) { - $ERROR('#499: 7 >>> 15 === 0. Actual: ' + (7 >>> 15)); -} - - -if (15 >>> 15 !== 0) { - $ERROR('#500: 15 >>> 15 === 0. Actual: ' + (15 >>> 15)); -} - - -if (31 >>> 15 !== 0) { - $ERROR('#501: 31 >>> 15 === 0. Actual: ' + (31 >>> 15)); -} - - -if (63 >>> 15 !== 0) { - $ERROR('#502: 63 >>> 15 === 0. Actual: ' + (63 >>> 15)); -} - - -if (127 >>> 15 !== 0) { - $ERROR('#503: 127 >>> 15 === 0. Actual: ' + (127 >>> 15)); -} - - -if (255 >>> 15 !== 0) { - $ERROR('#504: 255 >>> 15 === 0. Actual: ' + (255 >>> 15)); -} - - -if (511 >>> 15 !== 0) { - $ERROR('#505: 511 >>> 15 === 0. Actual: ' + (511 >>> 15)); -} - - -if (1023 >>> 15 !== 0) { - $ERROR('#506: 1023 >>> 15 === 0. Actual: ' + (1023 >>> 15)); -} - - -if (2047 >>> 15 !== 0) { - $ERROR('#507: 2047 >>> 15 === 0. Actual: ' + (2047 >>> 15)); -} - - -if (4095 >>> 15 !== 0) { - $ERROR('#508: 4095 >>> 15 === 0. Actual: ' + (4095 >>> 15)); -} - - -if (8191 >>> 15 !== 0) { - $ERROR('#509: 8191 >>> 15 === 0. Actual: ' + (8191 >>> 15)); -} - - -if (16383 >>> 15 !== 0) { - $ERROR('#510: 16383 >>> 15 === 0. Actual: ' + (16383 >>> 15)); -} - - -if (32767 >>> 15 !== 0) { - $ERROR('#511: 32767 >>> 15 === 0. Actual: ' + (32767 >>> 15)); -} - - -if (65535 >>> 15 !== 1) { - $ERROR('#512: 65535 >>> 15 === 1. Actual: ' + (65535 >>> 15)); -} - - -if (131071 >>> 15 !== 3) { - $ERROR('#513: 131071 >>> 15 === 3. Actual: ' + (131071 >>> 15)); -} - - -if (262143 >>> 15 !== 7) { - $ERROR('#514: 262143 >>> 15 === 7. Actual: ' + (262143 >>> 15)); -} - - -if (524287 >>> 15 !== 15) { - $ERROR('#515: 524287 >>> 15 === 15. Actual: ' + (524287 >>> 15)); -} - - -if (1048575 >>> 15 !== 31) { - $ERROR('#516: 1048575 >>> 15 === 31. Actual: ' + (1048575 >>> 15)); -} - - -if (2097151 >>> 15 !== 63) { - $ERROR('#517: 2097151 >>> 15 === 63. Actual: ' + (2097151 >>> 15)); -} - - -if (4194303 >>> 15 !== 127) { - $ERROR('#518: 4194303 >>> 15 === 127. Actual: ' + (4194303 >>> 15)); -} - - -if (8388607 >>> 15 !== 255) { - $ERROR('#519: 8388607 >>> 15 === 255. Actual: ' + (8388607 >>> 15)); -} - - -if (16777215 >>> 15 !== 511) { - $ERROR('#520: 16777215 >>> 15 === 511. Actual: ' + (16777215 >>> 15)); -} - - -if (33554431 >>> 15 !== 1023) { - $ERROR('#521: 33554431 >>> 15 === 1023. Actual: ' + (33554431 >>> 15)); -} - - -if (67108863 >>> 15 !== 2047) { - $ERROR('#522: 67108863 >>> 15 === 2047. Actual: ' + (67108863 >>> 15)); -} - - -if (134217727 >>> 15 !== 4095) { - $ERROR('#523: 134217727 >>> 15 === 4095. Actual: ' + (134217727 >>> 15)); -} - - -if (268435455 >>> 15 !== 8191) { - $ERROR('#524: 268435455 >>> 15 === 8191. Actual: ' + (268435455 >>> 15)); -} - - -if (536870911 >>> 15 !== 16383) { - $ERROR('#525: 536870911 >>> 15 === 16383. Actual: ' + (536870911 >>> 15)); -} - - -if (1073741823 >>> 15 !== 32767) { - $ERROR('#526: 1073741823 >>> 15 === 32767. Actual: ' + (1073741823 >>> 15)); -} - - -if (2147483647 >>> 15 !== 65535) { - $ERROR('#527: 2147483647 >>> 15 === 65535. Actual: ' + (2147483647 >>> 15)); -} - - -if (4294967295 >>> 15 !== 131071) { - $ERROR('#528: 4294967295 >>> 15 === 131071. Actual: ' + (4294967295 >>> 15)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A4_T4.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A4_T4.js deleted file mode 100644 index ae9e8f18c..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A4_T4.js +++ /dev/null @@ -1,2650 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.3_A4_T4; - * @section: 11.7.3; - * @assertion: Check operator x >>> y in distinct points; - * @description: ShiftExpression = 2^n - 1, n = 16...31; - */ - -//CHECK - -if (0 >>> 16 !== 0) { - $ERROR('#529: 0 >>> 16 === 0. Actual: ' + (0 >>> 16)); -} - - -if (1 >>> 16 !== 0) { - $ERROR('#530: 1 >>> 16 === 0. Actual: ' + (1 >>> 16)); -} - - -if (3 >>> 16 !== 0) { - $ERROR('#531: 3 >>> 16 === 0. Actual: ' + (3 >>> 16)); -} - - -if (7 >>> 16 !== 0) { - $ERROR('#532: 7 >>> 16 === 0. Actual: ' + (7 >>> 16)); -} - - -if (15 >>> 16 !== 0) { - $ERROR('#533: 15 >>> 16 === 0. Actual: ' + (15 >>> 16)); -} - - -if (31 >>> 16 !== 0) { - $ERROR('#534: 31 >>> 16 === 0. Actual: ' + (31 >>> 16)); -} - - -if (63 >>> 16 !== 0) { - $ERROR('#535: 63 >>> 16 === 0. Actual: ' + (63 >>> 16)); -} - - -if (127 >>> 16 !== 0) { - $ERROR('#536: 127 >>> 16 === 0. Actual: ' + (127 >>> 16)); -} - - -if (255 >>> 16 !== 0) { - $ERROR('#537: 255 >>> 16 === 0. Actual: ' + (255 >>> 16)); -} - - -if (511 >>> 16 !== 0) { - $ERROR('#538: 511 >>> 16 === 0. Actual: ' + (511 >>> 16)); -} - - -if (1023 >>> 16 !== 0) { - $ERROR('#539: 1023 >>> 16 === 0. Actual: ' + (1023 >>> 16)); -} - - -if (2047 >>> 16 !== 0) { - $ERROR('#540: 2047 >>> 16 === 0. Actual: ' + (2047 >>> 16)); -} - - -if (4095 >>> 16 !== 0) { - $ERROR('#541: 4095 >>> 16 === 0. Actual: ' + (4095 >>> 16)); -} - - -if (8191 >>> 16 !== 0) { - $ERROR('#542: 8191 >>> 16 === 0. Actual: ' + (8191 >>> 16)); -} - - -if (16383 >>> 16 !== 0) { - $ERROR('#543: 16383 >>> 16 === 0. Actual: ' + (16383 >>> 16)); -} - - -if (32767 >>> 16 !== 0) { - $ERROR('#544: 32767 >>> 16 === 0. Actual: ' + (32767 >>> 16)); -} - - -if (65535 >>> 16 !== 0) { - $ERROR('#545: 65535 >>> 16 === 0. Actual: ' + (65535 >>> 16)); -} - - -if (131071 >>> 16 !== 1) { - $ERROR('#546: 131071 >>> 16 === 1. Actual: ' + (131071 >>> 16)); -} - - -if (262143 >>> 16 !== 3) { - $ERROR('#547: 262143 >>> 16 === 3. Actual: ' + (262143 >>> 16)); -} - - -if (524287 >>> 16 !== 7) { - $ERROR('#548: 524287 >>> 16 === 7. Actual: ' + (524287 >>> 16)); -} - - -if (1048575 >>> 16 !== 15) { - $ERROR('#549: 1048575 >>> 16 === 15. Actual: ' + (1048575 >>> 16)); -} - - -if (2097151 >>> 16 !== 31) { - $ERROR('#550: 2097151 >>> 16 === 31. Actual: ' + (2097151 >>> 16)); -} - - -if (4194303 >>> 16 !== 63) { - $ERROR('#551: 4194303 >>> 16 === 63. Actual: ' + (4194303 >>> 16)); -} - - -if (8388607 >>> 16 !== 127) { - $ERROR('#552: 8388607 >>> 16 === 127. Actual: ' + (8388607 >>> 16)); -} - - -if (16777215 >>> 16 !== 255) { - $ERROR('#553: 16777215 >>> 16 === 255. Actual: ' + (16777215 >>> 16)); -} - - -if (33554431 >>> 16 !== 511) { - $ERROR('#554: 33554431 >>> 16 === 511. Actual: ' + (33554431 >>> 16)); -} - - -if (67108863 >>> 16 !== 1023) { - $ERROR('#555: 67108863 >>> 16 === 1023. Actual: ' + (67108863 >>> 16)); -} - - -if (134217727 >>> 16 !== 2047) { - $ERROR('#556: 134217727 >>> 16 === 2047. Actual: ' + (134217727 >>> 16)); -} - - -if (268435455 >>> 16 !== 4095) { - $ERROR('#557: 268435455 >>> 16 === 4095. Actual: ' + (268435455 >>> 16)); -} - - -if (536870911 >>> 16 !== 8191) { - $ERROR('#558: 536870911 >>> 16 === 8191. Actual: ' + (536870911 >>> 16)); -} - - -if (1073741823 >>> 16 !== 16383) { - $ERROR('#559: 1073741823 >>> 16 === 16383. Actual: ' + (1073741823 >>> 16)); -} - - -if (2147483647 >>> 16 !== 32767) { - $ERROR('#560: 2147483647 >>> 16 === 32767. Actual: ' + (2147483647 >>> 16)); -} - - -if (4294967295 >>> 16 !== 65535) { - $ERROR('#561: 4294967295 >>> 16 === 65535. Actual: ' + (4294967295 >>> 16)); -} - - -if (0 >>> 17 !== 0) { - $ERROR('#562: 0 >>> 17 === 0. Actual: ' + (0 >>> 17)); -} - - -if (1 >>> 17 !== 0) { - $ERROR('#563: 1 >>> 17 === 0. Actual: ' + (1 >>> 17)); -} - - -if (3 >>> 17 !== 0) { - $ERROR('#564: 3 >>> 17 === 0. Actual: ' + (3 >>> 17)); -} - - -if (7 >>> 17 !== 0) { - $ERROR('#565: 7 >>> 17 === 0. Actual: ' + (7 >>> 17)); -} - - -if (15 >>> 17 !== 0) { - $ERROR('#566: 15 >>> 17 === 0. Actual: ' + (15 >>> 17)); -} - - -if (31 >>> 17 !== 0) { - $ERROR('#567: 31 >>> 17 === 0. Actual: ' + (31 >>> 17)); -} - - -if (63 >>> 17 !== 0) { - $ERROR('#568: 63 >>> 17 === 0. Actual: ' + (63 >>> 17)); -} - - -if (127 >>> 17 !== 0) { - $ERROR('#569: 127 >>> 17 === 0. Actual: ' + (127 >>> 17)); -} - - -if (255 >>> 17 !== 0) { - $ERROR('#570: 255 >>> 17 === 0. Actual: ' + (255 >>> 17)); -} - - -if (511 >>> 17 !== 0) { - $ERROR('#571: 511 >>> 17 === 0. Actual: ' + (511 >>> 17)); -} - - -if (1023 >>> 17 !== 0) { - $ERROR('#572: 1023 >>> 17 === 0. Actual: ' + (1023 >>> 17)); -} - - -if (2047 >>> 17 !== 0) { - $ERROR('#573: 2047 >>> 17 === 0. Actual: ' + (2047 >>> 17)); -} - - -if (4095 >>> 17 !== 0) { - $ERROR('#574: 4095 >>> 17 === 0. Actual: ' + (4095 >>> 17)); -} - - -if (8191 >>> 17 !== 0) { - $ERROR('#575: 8191 >>> 17 === 0. Actual: ' + (8191 >>> 17)); -} - - -if (16383 >>> 17 !== 0) { - $ERROR('#576: 16383 >>> 17 === 0. Actual: ' + (16383 >>> 17)); -} - - -if (32767 >>> 17 !== 0) { - $ERROR('#577: 32767 >>> 17 === 0. Actual: ' + (32767 >>> 17)); -} - - -if (65535 >>> 17 !== 0) { - $ERROR('#578: 65535 >>> 17 === 0. Actual: ' + (65535 >>> 17)); -} - - -if (131071 >>> 17 !== 0) { - $ERROR('#579: 131071 >>> 17 === 0. Actual: ' + (131071 >>> 17)); -} - - -if (262143 >>> 17 !== 1) { - $ERROR('#580: 262143 >>> 17 === 1. Actual: ' + (262143 >>> 17)); -} - - -if (524287 >>> 17 !== 3) { - $ERROR('#581: 524287 >>> 17 === 3. Actual: ' + (524287 >>> 17)); -} - - -if (1048575 >>> 17 !== 7) { - $ERROR('#582: 1048575 >>> 17 === 7. Actual: ' + (1048575 >>> 17)); -} - - -if (2097151 >>> 17 !== 15) { - $ERROR('#583: 2097151 >>> 17 === 15. Actual: ' + (2097151 >>> 17)); -} - - -if (4194303 >>> 17 !== 31) { - $ERROR('#584: 4194303 >>> 17 === 31. Actual: ' + (4194303 >>> 17)); -} - - -if (8388607 >>> 17 !== 63) { - $ERROR('#585: 8388607 >>> 17 === 63. Actual: ' + (8388607 >>> 17)); -} - - -if (16777215 >>> 17 !== 127) { - $ERROR('#586: 16777215 >>> 17 === 127. Actual: ' + (16777215 >>> 17)); -} - - -if (33554431 >>> 17 !== 255) { - $ERROR('#587: 33554431 >>> 17 === 255. Actual: ' + (33554431 >>> 17)); -} - - -if (67108863 >>> 17 !== 511) { - $ERROR('#588: 67108863 >>> 17 === 511. Actual: ' + (67108863 >>> 17)); -} - - -if (134217727 >>> 17 !== 1023) { - $ERROR('#589: 134217727 >>> 17 === 1023. Actual: ' + (134217727 >>> 17)); -} - - -if (268435455 >>> 17 !== 2047) { - $ERROR('#590: 268435455 >>> 17 === 2047. Actual: ' + (268435455 >>> 17)); -} - - -if (536870911 >>> 17 !== 4095) { - $ERROR('#591: 536870911 >>> 17 === 4095. Actual: ' + (536870911 >>> 17)); -} - - -if (1073741823 >>> 17 !== 8191) { - $ERROR('#592: 1073741823 >>> 17 === 8191. Actual: ' + (1073741823 >>> 17)); -} - - -if (2147483647 >>> 17 !== 16383) { - $ERROR('#593: 2147483647 >>> 17 === 16383. Actual: ' + (2147483647 >>> 17)); -} - - -if (4294967295 >>> 17 !== 32767) { - $ERROR('#594: 4294967295 >>> 17 === 32767. Actual: ' + (4294967295 >>> 17)); -} - - -if (0 >>> 18 !== 0) { - $ERROR('#595: 0 >>> 18 === 0. Actual: ' + (0 >>> 18)); -} - - -if (1 >>> 18 !== 0) { - $ERROR('#596: 1 >>> 18 === 0. Actual: ' + (1 >>> 18)); -} - - -if (3 >>> 18 !== 0) { - $ERROR('#597: 3 >>> 18 === 0. Actual: ' + (3 >>> 18)); -} - - -if (7 >>> 18 !== 0) { - $ERROR('#598: 7 >>> 18 === 0. Actual: ' + (7 >>> 18)); -} - - -if (15 >>> 18 !== 0) { - $ERROR('#599: 15 >>> 18 === 0. Actual: ' + (15 >>> 18)); -} - - -if (31 >>> 18 !== 0) { - $ERROR('#600: 31 >>> 18 === 0. Actual: ' + (31 >>> 18)); -} - - -if (63 >>> 18 !== 0) { - $ERROR('#601: 63 >>> 18 === 0. Actual: ' + (63 >>> 18)); -} - - -if (127 >>> 18 !== 0) { - $ERROR('#602: 127 >>> 18 === 0. Actual: ' + (127 >>> 18)); -} - - -if (255 >>> 18 !== 0) { - $ERROR('#603: 255 >>> 18 === 0. Actual: ' + (255 >>> 18)); -} - - -if (511 >>> 18 !== 0) { - $ERROR('#604: 511 >>> 18 === 0. Actual: ' + (511 >>> 18)); -} - - -if (1023 >>> 18 !== 0) { - $ERROR('#605: 1023 >>> 18 === 0. Actual: ' + (1023 >>> 18)); -} - - -if (2047 >>> 18 !== 0) { - $ERROR('#606: 2047 >>> 18 === 0. Actual: ' + (2047 >>> 18)); -} - - -if (4095 >>> 18 !== 0) { - $ERROR('#607: 4095 >>> 18 === 0. Actual: ' + (4095 >>> 18)); -} - - -if (8191 >>> 18 !== 0) { - $ERROR('#608: 8191 >>> 18 === 0. Actual: ' + (8191 >>> 18)); -} - - -if (16383 >>> 18 !== 0) { - $ERROR('#609: 16383 >>> 18 === 0. Actual: ' + (16383 >>> 18)); -} - - -if (32767 >>> 18 !== 0) { - $ERROR('#610: 32767 >>> 18 === 0. Actual: ' + (32767 >>> 18)); -} - - -if (65535 >>> 18 !== 0) { - $ERROR('#611: 65535 >>> 18 === 0. Actual: ' + (65535 >>> 18)); -} - - -if (131071 >>> 18 !== 0) { - $ERROR('#612: 131071 >>> 18 === 0. Actual: ' + (131071 >>> 18)); -} - - -if (262143 >>> 18 !== 0) { - $ERROR('#613: 262143 >>> 18 === 0. Actual: ' + (262143 >>> 18)); -} - - -if (524287 >>> 18 !== 1) { - $ERROR('#614: 524287 >>> 18 === 1. Actual: ' + (524287 >>> 18)); -} - - -if (1048575 >>> 18 !== 3) { - $ERROR('#615: 1048575 >>> 18 === 3. Actual: ' + (1048575 >>> 18)); -} - - -if (2097151 >>> 18 !== 7) { - $ERROR('#616: 2097151 >>> 18 === 7. Actual: ' + (2097151 >>> 18)); -} - - -if (4194303 >>> 18 !== 15) { - $ERROR('#617: 4194303 >>> 18 === 15. Actual: ' + (4194303 >>> 18)); -} - - -if (8388607 >>> 18 !== 31) { - $ERROR('#618: 8388607 >>> 18 === 31. Actual: ' + (8388607 >>> 18)); -} - - -if (16777215 >>> 18 !== 63) { - $ERROR('#619: 16777215 >>> 18 === 63. Actual: ' + (16777215 >>> 18)); -} - - -if (33554431 >>> 18 !== 127) { - $ERROR('#620: 33554431 >>> 18 === 127. Actual: ' + (33554431 >>> 18)); -} - - -if (67108863 >>> 18 !== 255) { - $ERROR('#621: 67108863 >>> 18 === 255. Actual: ' + (67108863 >>> 18)); -} - - -if (134217727 >>> 18 !== 511) { - $ERROR('#622: 134217727 >>> 18 === 511. Actual: ' + (134217727 >>> 18)); -} - - -if (268435455 >>> 18 !== 1023) { - $ERROR('#623: 268435455 >>> 18 === 1023. Actual: ' + (268435455 >>> 18)); -} - - -if (536870911 >>> 18 !== 2047) { - $ERROR('#624: 536870911 >>> 18 === 2047. Actual: ' + (536870911 >>> 18)); -} - - -if (1073741823 >>> 18 !== 4095) { - $ERROR('#625: 1073741823 >>> 18 === 4095. Actual: ' + (1073741823 >>> 18)); -} - - -if (2147483647 >>> 18 !== 8191) { - $ERROR('#626: 2147483647 >>> 18 === 8191. Actual: ' + (2147483647 >>> 18)); -} - - -if (4294967295 >>> 18 !== 16383) { - $ERROR('#627: 4294967295 >>> 18 === 16383. Actual: ' + (4294967295 >>> 18)); -} - - -if (0 >>> 19 !== 0) { - $ERROR('#628: 0 >>> 19 === 0. Actual: ' + (0 >>> 19)); -} - - -if (1 >>> 19 !== 0) { - $ERROR('#629: 1 >>> 19 === 0. Actual: ' + (1 >>> 19)); -} - - -if (3 >>> 19 !== 0) { - $ERROR('#630: 3 >>> 19 === 0. Actual: ' + (3 >>> 19)); -} - - -if (7 >>> 19 !== 0) { - $ERROR('#631: 7 >>> 19 === 0. Actual: ' + (7 >>> 19)); -} - - -if (15 >>> 19 !== 0) { - $ERROR('#632: 15 >>> 19 === 0. Actual: ' + (15 >>> 19)); -} - - -if (31 >>> 19 !== 0) { - $ERROR('#633: 31 >>> 19 === 0. Actual: ' + (31 >>> 19)); -} - - -if (63 >>> 19 !== 0) { - $ERROR('#634: 63 >>> 19 === 0. Actual: ' + (63 >>> 19)); -} - - -if (127 >>> 19 !== 0) { - $ERROR('#635: 127 >>> 19 === 0. Actual: ' + (127 >>> 19)); -} - - -if (255 >>> 19 !== 0) { - $ERROR('#636: 255 >>> 19 === 0. Actual: ' + (255 >>> 19)); -} - - -if (511 >>> 19 !== 0) { - $ERROR('#637: 511 >>> 19 === 0. Actual: ' + (511 >>> 19)); -} - - -if (1023 >>> 19 !== 0) { - $ERROR('#638: 1023 >>> 19 === 0. Actual: ' + (1023 >>> 19)); -} - - -if (2047 >>> 19 !== 0) { - $ERROR('#639: 2047 >>> 19 === 0. Actual: ' + (2047 >>> 19)); -} - - -if (4095 >>> 19 !== 0) { - $ERROR('#640: 4095 >>> 19 === 0. Actual: ' + (4095 >>> 19)); -} - - -if (8191 >>> 19 !== 0) { - $ERROR('#641: 8191 >>> 19 === 0. Actual: ' + (8191 >>> 19)); -} - - -if (16383 >>> 19 !== 0) { - $ERROR('#642: 16383 >>> 19 === 0. Actual: ' + (16383 >>> 19)); -} - - -if (32767 >>> 19 !== 0) { - $ERROR('#643: 32767 >>> 19 === 0. Actual: ' + (32767 >>> 19)); -} - - -if (65535 >>> 19 !== 0) { - $ERROR('#644: 65535 >>> 19 === 0. Actual: ' + (65535 >>> 19)); -} - - -if (131071 >>> 19 !== 0) { - $ERROR('#645: 131071 >>> 19 === 0. Actual: ' + (131071 >>> 19)); -} - - -if (262143 >>> 19 !== 0) { - $ERROR('#646: 262143 >>> 19 === 0. Actual: ' + (262143 >>> 19)); -} - - -if (524287 >>> 19 !== 0) { - $ERROR('#647: 524287 >>> 19 === 0. Actual: ' + (524287 >>> 19)); -} - - -if (1048575 >>> 19 !== 1) { - $ERROR('#648: 1048575 >>> 19 === 1. Actual: ' + (1048575 >>> 19)); -} - - -if (2097151 >>> 19 !== 3) { - $ERROR('#649: 2097151 >>> 19 === 3. Actual: ' + (2097151 >>> 19)); -} - - -if (4194303 >>> 19 !== 7) { - $ERROR('#650: 4194303 >>> 19 === 7. Actual: ' + (4194303 >>> 19)); -} - - -if (8388607 >>> 19 !== 15) { - $ERROR('#651: 8388607 >>> 19 === 15. Actual: ' + (8388607 >>> 19)); -} - - -if (16777215 >>> 19 !== 31) { - $ERROR('#652: 16777215 >>> 19 === 31. Actual: ' + (16777215 >>> 19)); -} - - -if (33554431 >>> 19 !== 63) { - $ERROR('#653: 33554431 >>> 19 === 63. Actual: ' + (33554431 >>> 19)); -} - - -if (67108863 >>> 19 !== 127) { - $ERROR('#654: 67108863 >>> 19 === 127. Actual: ' + (67108863 >>> 19)); -} - - -if (134217727 >>> 19 !== 255) { - $ERROR('#655: 134217727 >>> 19 === 255. Actual: ' + (134217727 >>> 19)); -} - - -if (268435455 >>> 19 !== 511) { - $ERROR('#656: 268435455 >>> 19 === 511. Actual: ' + (268435455 >>> 19)); -} - - -if (536870911 >>> 19 !== 1023) { - $ERROR('#657: 536870911 >>> 19 === 1023. Actual: ' + (536870911 >>> 19)); -} - - -if (1073741823 >>> 19 !== 2047) { - $ERROR('#658: 1073741823 >>> 19 === 2047. Actual: ' + (1073741823 >>> 19)); -} - - -if (2147483647 >>> 19 !== 4095) { - $ERROR('#659: 2147483647 >>> 19 === 4095. Actual: ' + (2147483647 >>> 19)); -} - - -if (4294967295 >>> 19 !== 8191) { - $ERROR('#660: 4294967295 >>> 19 === 8191. Actual: ' + (4294967295 >>> 19)); -} - - -if (0 >>> 20 !== 0) { - $ERROR('#661: 0 >>> 20 === 0. Actual: ' + (0 >>> 20)); -} - - -if (1 >>> 20 !== 0) { - $ERROR('#662: 1 >>> 20 === 0. Actual: ' + (1 >>> 20)); -} - - -if (3 >>> 20 !== 0) { - $ERROR('#663: 3 >>> 20 === 0. Actual: ' + (3 >>> 20)); -} - - -if (7 >>> 20 !== 0) { - $ERROR('#664: 7 >>> 20 === 0. Actual: ' + (7 >>> 20)); -} - - -if (15 >>> 20 !== 0) { - $ERROR('#665: 15 >>> 20 === 0. Actual: ' + (15 >>> 20)); -} - - -if (31 >>> 20 !== 0) { - $ERROR('#666: 31 >>> 20 === 0. Actual: ' + (31 >>> 20)); -} - - -if (63 >>> 20 !== 0) { - $ERROR('#667: 63 >>> 20 === 0. Actual: ' + (63 >>> 20)); -} - - -if (127 >>> 20 !== 0) { - $ERROR('#668: 127 >>> 20 === 0. Actual: ' + (127 >>> 20)); -} - - -if (255 >>> 20 !== 0) { - $ERROR('#669: 255 >>> 20 === 0. Actual: ' + (255 >>> 20)); -} - - -if (511 >>> 20 !== 0) { - $ERROR('#670: 511 >>> 20 === 0. Actual: ' + (511 >>> 20)); -} - - -if (1023 >>> 20 !== 0) { - $ERROR('#671: 1023 >>> 20 === 0. Actual: ' + (1023 >>> 20)); -} - - -if (2047 >>> 20 !== 0) { - $ERROR('#672: 2047 >>> 20 === 0. Actual: ' + (2047 >>> 20)); -} - - -if (4095 >>> 20 !== 0) { - $ERROR('#673: 4095 >>> 20 === 0. Actual: ' + (4095 >>> 20)); -} - - -if (8191 >>> 20 !== 0) { - $ERROR('#674: 8191 >>> 20 === 0. Actual: ' + (8191 >>> 20)); -} - - -if (16383 >>> 20 !== 0) { - $ERROR('#675: 16383 >>> 20 === 0. Actual: ' + (16383 >>> 20)); -} - - -if (32767 >>> 20 !== 0) { - $ERROR('#676: 32767 >>> 20 === 0. Actual: ' + (32767 >>> 20)); -} - - -if (65535 >>> 20 !== 0) { - $ERROR('#677: 65535 >>> 20 === 0. Actual: ' + (65535 >>> 20)); -} - - -if (131071 >>> 20 !== 0) { - $ERROR('#678: 131071 >>> 20 === 0. Actual: ' + (131071 >>> 20)); -} - - -if (262143 >>> 20 !== 0) { - $ERROR('#679: 262143 >>> 20 === 0. Actual: ' + (262143 >>> 20)); -} - - -if (524287 >>> 20 !== 0) { - $ERROR('#680: 524287 >>> 20 === 0. Actual: ' + (524287 >>> 20)); -} - - -if (1048575 >>> 20 !== 0) { - $ERROR('#681: 1048575 >>> 20 === 0. Actual: ' + (1048575 >>> 20)); -} - - -if (2097151 >>> 20 !== 1) { - $ERROR('#682: 2097151 >>> 20 === 1. Actual: ' + (2097151 >>> 20)); -} - - -if (4194303 >>> 20 !== 3) { - $ERROR('#683: 4194303 >>> 20 === 3. Actual: ' + (4194303 >>> 20)); -} - - -if (8388607 >>> 20 !== 7) { - $ERROR('#684: 8388607 >>> 20 === 7. Actual: ' + (8388607 >>> 20)); -} - - -if (16777215 >>> 20 !== 15) { - $ERROR('#685: 16777215 >>> 20 === 15. Actual: ' + (16777215 >>> 20)); -} - - -if (33554431 >>> 20 !== 31) { - $ERROR('#686: 33554431 >>> 20 === 31. Actual: ' + (33554431 >>> 20)); -} - - -if (67108863 >>> 20 !== 63) { - $ERROR('#687: 67108863 >>> 20 === 63. Actual: ' + (67108863 >>> 20)); -} - - -if (134217727 >>> 20 !== 127) { - $ERROR('#688: 134217727 >>> 20 === 127. Actual: ' + (134217727 >>> 20)); -} - - -if (268435455 >>> 20 !== 255) { - $ERROR('#689: 268435455 >>> 20 === 255. Actual: ' + (268435455 >>> 20)); -} - - -if (536870911 >>> 20 !== 511) { - $ERROR('#690: 536870911 >>> 20 === 511. Actual: ' + (536870911 >>> 20)); -} - - -if (1073741823 >>> 20 !== 1023) { - $ERROR('#691: 1073741823 >>> 20 === 1023. Actual: ' + (1073741823 >>> 20)); -} - - -if (2147483647 >>> 20 !== 2047) { - $ERROR('#692: 2147483647 >>> 20 === 2047. Actual: ' + (2147483647 >>> 20)); -} - - -if (4294967295 >>> 20 !== 4095) { - $ERROR('#693: 4294967295 >>> 20 === 4095. Actual: ' + (4294967295 >>> 20)); -} - - -if (0 >>> 21 !== 0) { - $ERROR('#694: 0 >>> 21 === 0. Actual: ' + (0 >>> 21)); -} - - -if (1 >>> 21 !== 0) { - $ERROR('#695: 1 >>> 21 === 0. Actual: ' + (1 >>> 21)); -} - - -if (3 >>> 21 !== 0) { - $ERROR('#696: 3 >>> 21 === 0. Actual: ' + (3 >>> 21)); -} - - -if (7 >>> 21 !== 0) { - $ERROR('#697: 7 >>> 21 === 0. Actual: ' + (7 >>> 21)); -} - - -if (15 >>> 21 !== 0) { - $ERROR('#698: 15 >>> 21 === 0. Actual: ' + (15 >>> 21)); -} - - -if (31 >>> 21 !== 0) { - $ERROR('#699: 31 >>> 21 === 0. Actual: ' + (31 >>> 21)); -} - - -if (63 >>> 21 !== 0) { - $ERROR('#700: 63 >>> 21 === 0. Actual: ' + (63 >>> 21)); -} - - -if (127 >>> 21 !== 0) { - $ERROR('#701: 127 >>> 21 === 0. Actual: ' + (127 >>> 21)); -} - - -if (255 >>> 21 !== 0) { - $ERROR('#702: 255 >>> 21 === 0. Actual: ' + (255 >>> 21)); -} - - -if (511 >>> 21 !== 0) { - $ERROR('#703: 511 >>> 21 === 0. Actual: ' + (511 >>> 21)); -} - - -if (1023 >>> 21 !== 0) { - $ERROR('#704: 1023 >>> 21 === 0. Actual: ' + (1023 >>> 21)); -} - - -if (2047 >>> 21 !== 0) { - $ERROR('#705: 2047 >>> 21 === 0. Actual: ' + (2047 >>> 21)); -} - - -if (4095 >>> 21 !== 0) { - $ERROR('#706: 4095 >>> 21 === 0. Actual: ' + (4095 >>> 21)); -} - - -if (8191 >>> 21 !== 0) { - $ERROR('#707: 8191 >>> 21 === 0. Actual: ' + (8191 >>> 21)); -} - - -if (16383 >>> 21 !== 0) { - $ERROR('#708: 16383 >>> 21 === 0. Actual: ' + (16383 >>> 21)); -} - - -if (32767 >>> 21 !== 0) { - $ERROR('#709: 32767 >>> 21 === 0. Actual: ' + (32767 >>> 21)); -} - - -if (65535 >>> 21 !== 0) { - $ERROR('#710: 65535 >>> 21 === 0. Actual: ' + (65535 >>> 21)); -} - - -if (131071 >>> 21 !== 0) { - $ERROR('#711: 131071 >>> 21 === 0. Actual: ' + (131071 >>> 21)); -} - - -if (262143 >>> 21 !== 0) { - $ERROR('#712: 262143 >>> 21 === 0. Actual: ' + (262143 >>> 21)); -} - - -if (524287 >>> 21 !== 0) { - $ERROR('#713: 524287 >>> 21 === 0. Actual: ' + (524287 >>> 21)); -} - - -if (1048575 >>> 21 !== 0) { - $ERROR('#714: 1048575 >>> 21 === 0. Actual: ' + (1048575 >>> 21)); -} - - -if (2097151 >>> 21 !== 0) { - $ERROR('#715: 2097151 >>> 21 === 0. Actual: ' + (2097151 >>> 21)); -} - - -if (4194303 >>> 21 !== 1) { - $ERROR('#716: 4194303 >>> 21 === 1. Actual: ' + (4194303 >>> 21)); -} - - -if (8388607 >>> 21 !== 3) { - $ERROR('#717: 8388607 >>> 21 === 3. Actual: ' + (8388607 >>> 21)); -} - - -if (16777215 >>> 21 !== 7) { - $ERROR('#718: 16777215 >>> 21 === 7. Actual: ' + (16777215 >>> 21)); -} - - -if (33554431 >>> 21 !== 15) { - $ERROR('#719: 33554431 >>> 21 === 15. Actual: ' + (33554431 >>> 21)); -} - - -if (67108863 >>> 21 !== 31) { - $ERROR('#720: 67108863 >>> 21 === 31. Actual: ' + (67108863 >>> 21)); -} - - -if (134217727 >>> 21 !== 63) { - $ERROR('#721: 134217727 >>> 21 === 63. Actual: ' + (134217727 >>> 21)); -} - - -if (268435455 >>> 21 !== 127) { - $ERROR('#722: 268435455 >>> 21 === 127. Actual: ' + (268435455 >>> 21)); -} - - -if (536870911 >>> 21 !== 255) { - $ERROR('#723: 536870911 >>> 21 === 255. Actual: ' + (536870911 >>> 21)); -} - - -if (1073741823 >>> 21 !== 511) { - $ERROR('#724: 1073741823 >>> 21 === 511. Actual: ' + (1073741823 >>> 21)); -} - - -if (2147483647 >>> 21 !== 1023) { - $ERROR('#725: 2147483647 >>> 21 === 1023. Actual: ' + (2147483647 >>> 21)); -} - - -if (4294967295 >>> 21 !== 2047) { - $ERROR('#726: 4294967295 >>> 21 === 2047. Actual: ' + (4294967295 >>> 21)); -} - - -if (0 >>> 22 !== 0) { - $ERROR('#727: 0 >>> 22 === 0. Actual: ' + (0 >>> 22)); -} - - -if (1 >>> 22 !== 0) { - $ERROR('#728: 1 >>> 22 === 0. Actual: ' + (1 >>> 22)); -} - - -if (3 >>> 22 !== 0) { - $ERROR('#729: 3 >>> 22 === 0. Actual: ' + (3 >>> 22)); -} - - -if (7 >>> 22 !== 0) { - $ERROR('#730: 7 >>> 22 === 0. Actual: ' + (7 >>> 22)); -} - - -if (15 >>> 22 !== 0) { - $ERROR('#731: 15 >>> 22 === 0. Actual: ' + (15 >>> 22)); -} - - -if (31 >>> 22 !== 0) { - $ERROR('#732: 31 >>> 22 === 0. Actual: ' + (31 >>> 22)); -} - - -if (63 >>> 22 !== 0) { - $ERROR('#733: 63 >>> 22 === 0. Actual: ' + (63 >>> 22)); -} - - -if (127 >>> 22 !== 0) { - $ERROR('#734: 127 >>> 22 === 0. Actual: ' + (127 >>> 22)); -} - - -if (255 >>> 22 !== 0) { - $ERROR('#735: 255 >>> 22 === 0. Actual: ' + (255 >>> 22)); -} - - -if (511 >>> 22 !== 0) { - $ERROR('#736: 511 >>> 22 === 0. Actual: ' + (511 >>> 22)); -} - - -if (1023 >>> 22 !== 0) { - $ERROR('#737: 1023 >>> 22 === 0. Actual: ' + (1023 >>> 22)); -} - - -if (2047 >>> 22 !== 0) { - $ERROR('#738: 2047 >>> 22 === 0. Actual: ' + (2047 >>> 22)); -} - - -if (4095 >>> 22 !== 0) { - $ERROR('#739: 4095 >>> 22 === 0. Actual: ' + (4095 >>> 22)); -} - - -if (8191 >>> 22 !== 0) { - $ERROR('#740: 8191 >>> 22 === 0. Actual: ' + (8191 >>> 22)); -} - - -if (16383 >>> 22 !== 0) { - $ERROR('#741: 16383 >>> 22 === 0. Actual: ' + (16383 >>> 22)); -} - - -if (32767 >>> 22 !== 0) { - $ERROR('#742: 32767 >>> 22 === 0. Actual: ' + (32767 >>> 22)); -} - - -if (65535 >>> 22 !== 0) { - $ERROR('#743: 65535 >>> 22 === 0. Actual: ' + (65535 >>> 22)); -} - - -if (131071 >>> 22 !== 0) { - $ERROR('#744: 131071 >>> 22 === 0. Actual: ' + (131071 >>> 22)); -} - - -if (262143 >>> 22 !== 0) { - $ERROR('#745: 262143 >>> 22 === 0. Actual: ' + (262143 >>> 22)); -} - - -if (524287 >>> 22 !== 0) { - $ERROR('#746: 524287 >>> 22 === 0. Actual: ' + (524287 >>> 22)); -} - - -if (1048575 >>> 22 !== 0) { - $ERROR('#747: 1048575 >>> 22 === 0. Actual: ' + (1048575 >>> 22)); -} - - -if (2097151 >>> 22 !== 0) { - $ERROR('#748: 2097151 >>> 22 === 0. Actual: ' + (2097151 >>> 22)); -} - - -if (4194303 >>> 22 !== 0) { - $ERROR('#749: 4194303 >>> 22 === 0. Actual: ' + (4194303 >>> 22)); -} - - -if (8388607 >>> 22 !== 1) { - $ERROR('#750: 8388607 >>> 22 === 1. Actual: ' + (8388607 >>> 22)); -} - - -if (16777215 >>> 22 !== 3) { - $ERROR('#751: 16777215 >>> 22 === 3. Actual: ' + (16777215 >>> 22)); -} - - -if (33554431 >>> 22 !== 7) { - $ERROR('#752: 33554431 >>> 22 === 7. Actual: ' + (33554431 >>> 22)); -} - - -if (67108863 >>> 22 !== 15) { - $ERROR('#753: 67108863 >>> 22 === 15. Actual: ' + (67108863 >>> 22)); -} - - -if (134217727 >>> 22 !== 31) { - $ERROR('#754: 134217727 >>> 22 === 31. Actual: ' + (134217727 >>> 22)); -} - - -if (268435455 >>> 22 !== 63) { - $ERROR('#755: 268435455 >>> 22 === 63. Actual: ' + (268435455 >>> 22)); -} - - -if (536870911 >>> 22 !== 127) { - $ERROR('#756: 536870911 >>> 22 === 127. Actual: ' + (536870911 >>> 22)); -} - - -if (1073741823 >>> 22 !== 255) { - $ERROR('#757: 1073741823 >>> 22 === 255. Actual: ' + (1073741823 >>> 22)); -} - - -if (2147483647 >>> 22 !== 511) { - $ERROR('#758: 2147483647 >>> 22 === 511. Actual: ' + (2147483647 >>> 22)); -} - - -if (4294967295 >>> 22 !== 1023) { - $ERROR('#759: 4294967295 >>> 22 === 1023. Actual: ' + (4294967295 >>> 22)); -} - - -if (0 >>> 23 !== 0) { - $ERROR('#760: 0 >>> 23 === 0. Actual: ' + (0 >>> 23)); -} - - -if (1 >>> 23 !== 0) { - $ERROR('#761: 1 >>> 23 === 0. Actual: ' + (1 >>> 23)); -} - - -if (3 >>> 23 !== 0) { - $ERROR('#762: 3 >>> 23 === 0. Actual: ' + (3 >>> 23)); -} - - -if (7 >>> 23 !== 0) { - $ERROR('#763: 7 >>> 23 === 0. Actual: ' + (7 >>> 23)); -} - - -if (15 >>> 23 !== 0) { - $ERROR('#764: 15 >>> 23 === 0. Actual: ' + (15 >>> 23)); -} - - -if (31 >>> 23 !== 0) { - $ERROR('#765: 31 >>> 23 === 0. Actual: ' + (31 >>> 23)); -} - - -if (63 >>> 23 !== 0) { - $ERROR('#766: 63 >>> 23 === 0. Actual: ' + (63 >>> 23)); -} - - -if (127 >>> 23 !== 0) { - $ERROR('#767: 127 >>> 23 === 0. Actual: ' + (127 >>> 23)); -} - - -if (255 >>> 23 !== 0) { - $ERROR('#768: 255 >>> 23 === 0. Actual: ' + (255 >>> 23)); -} - - -if (511 >>> 23 !== 0) { - $ERROR('#769: 511 >>> 23 === 0. Actual: ' + (511 >>> 23)); -} - - -if (1023 >>> 23 !== 0) { - $ERROR('#770: 1023 >>> 23 === 0. Actual: ' + (1023 >>> 23)); -} - - -if (2047 >>> 23 !== 0) { - $ERROR('#771: 2047 >>> 23 === 0. Actual: ' + (2047 >>> 23)); -} - - -if (4095 >>> 23 !== 0) { - $ERROR('#772: 4095 >>> 23 === 0. Actual: ' + (4095 >>> 23)); -} - - -if (8191 >>> 23 !== 0) { - $ERROR('#773: 8191 >>> 23 === 0. Actual: ' + (8191 >>> 23)); -} - - -if (16383 >>> 23 !== 0) { - $ERROR('#774: 16383 >>> 23 === 0. Actual: ' + (16383 >>> 23)); -} - - -if (32767 >>> 23 !== 0) { - $ERROR('#775: 32767 >>> 23 === 0. Actual: ' + (32767 >>> 23)); -} - - -if (65535 >>> 23 !== 0) { - $ERROR('#776: 65535 >>> 23 === 0. Actual: ' + (65535 >>> 23)); -} - - -if (131071 >>> 23 !== 0) { - $ERROR('#777: 131071 >>> 23 === 0. Actual: ' + (131071 >>> 23)); -} - - -if (262143 >>> 23 !== 0) { - $ERROR('#778: 262143 >>> 23 === 0. Actual: ' + (262143 >>> 23)); -} - - -if (524287 >>> 23 !== 0) { - $ERROR('#779: 524287 >>> 23 === 0. Actual: ' + (524287 >>> 23)); -} - - -if (1048575 >>> 23 !== 0) { - $ERROR('#780: 1048575 >>> 23 === 0. Actual: ' + (1048575 >>> 23)); -} - - -if (2097151 >>> 23 !== 0) { - $ERROR('#781: 2097151 >>> 23 === 0. Actual: ' + (2097151 >>> 23)); -} - - -if (4194303 >>> 23 !== 0) { - $ERROR('#782: 4194303 >>> 23 === 0. Actual: ' + (4194303 >>> 23)); -} - - -if (8388607 >>> 23 !== 0) { - $ERROR('#783: 8388607 >>> 23 === 0. Actual: ' + (8388607 >>> 23)); -} - - -if (16777215 >>> 23 !== 1) { - $ERROR('#784: 16777215 >>> 23 === 1. Actual: ' + (16777215 >>> 23)); -} - - -if (33554431 >>> 23 !== 3) { - $ERROR('#785: 33554431 >>> 23 === 3. Actual: ' + (33554431 >>> 23)); -} - - -if (67108863 >>> 23 !== 7) { - $ERROR('#786: 67108863 >>> 23 === 7. Actual: ' + (67108863 >>> 23)); -} - - -if (134217727 >>> 23 !== 15) { - $ERROR('#787: 134217727 >>> 23 === 15. Actual: ' + (134217727 >>> 23)); -} - - -if (268435455 >>> 23 !== 31) { - $ERROR('#788: 268435455 >>> 23 === 31. Actual: ' + (268435455 >>> 23)); -} - - -if (536870911 >>> 23 !== 63) { - $ERROR('#789: 536870911 >>> 23 === 63. Actual: ' + (536870911 >>> 23)); -} - - -if (1073741823 >>> 23 !== 127) { - $ERROR('#790: 1073741823 >>> 23 === 127. Actual: ' + (1073741823 >>> 23)); -} - - -if (2147483647 >>> 23 !== 255) { - $ERROR('#791: 2147483647 >>> 23 === 255. Actual: ' + (2147483647 >>> 23)); -} - - -if (4294967295 >>> 23 !== 511) { - $ERROR('#792: 4294967295 >>> 23 === 511. Actual: ' + (4294967295 >>> 23)); -} - - -if (0 >>> 24 !== 0) { - $ERROR('#793: 0 >>> 24 === 0. Actual: ' + (0 >>> 24)); -} - - -if (1 >>> 24 !== 0) { - $ERROR('#794: 1 >>> 24 === 0. Actual: ' + (1 >>> 24)); -} - - -if (3 >>> 24 !== 0) { - $ERROR('#795: 3 >>> 24 === 0. Actual: ' + (3 >>> 24)); -} - - -if (7 >>> 24 !== 0) { - $ERROR('#796: 7 >>> 24 === 0. Actual: ' + (7 >>> 24)); -} - - -if (15 >>> 24 !== 0) { - $ERROR('#797: 15 >>> 24 === 0. Actual: ' + (15 >>> 24)); -} - - -if (31 >>> 24 !== 0) { - $ERROR('#798: 31 >>> 24 === 0. Actual: ' + (31 >>> 24)); -} - - -if (63 >>> 24 !== 0) { - $ERROR('#799: 63 >>> 24 === 0. Actual: ' + (63 >>> 24)); -} - - -if (127 >>> 24 !== 0) { - $ERROR('#800: 127 >>> 24 === 0. Actual: ' + (127 >>> 24)); -} - - -if (255 >>> 24 !== 0) { - $ERROR('#801: 255 >>> 24 === 0. Actual: ' + (255 >>> 24)); -} - - -if (511 >>> 24 !== 0) { - $ERROR('#802: 511 >>> 24 === 0. Actual: ' + (511 >>> 24)); -} - - -if (1023 >>> 24 !== 0) { - $ERROR('#803: 1023 >>> 24 === 0. Actual: ' + (1023 >>> 24)); -} - - -if (2047 >>> 24 !== 0) { - $ERROR('#804: 2047 >>> 24 === 0. Actual: ' + (2047 >>> 24)); -} - - -if (4095 >>> 24 !== 0) { - $ERROR('#805: 4095 >>> 24 === 0. Actual: ' + (4095 >>> 24)); -} - - -if (8191 >>> 24 !== 0) { - $ERROR('#806: 8191 >>> 24 === 0. Actual: ' + (8191 >>> 24)); -} - - -if (16383 >>> 24 !== 0) { - $ERROR('#807: 16383 >>> 24 === 0. Actual: ' + (16383 >>> 24)); -} - - -if (32767 >>> 24 !== 0) { - $ERROR('#808: 32767 >>> 24 === 0. Actual: ' + (32767 >>> 24)); -} - - -if (65535 >>> 24 !== 0) { - $ERROR('#809: 65535 >>> 24 === 0. Actual: ' + (65535 >>> 24)); -} - - -if (131071 >>> 24 !== 0) { - $ERROR('#810: 131071 >>> 24 === 0. Actual: ' + (131071 >>> 24)); -} - - -if (262143 >>> 24 !== 0) { - $ERROR('#811: 262143 >>> 24 === 0. Actual: ' + (262143 >>> 24)); -} - - -if (524287 >>> 24 !== 0) { - $ERROR('#812: 524287 >>> 24 === 0. Actual: ' + (524287 >>> 24)); -} - - -if (1048575 >>> 24 !== 0) { - $ERROR('#813: 1048575 >>> 24 === 0. Actual: ' + (1048575 >>> 24)); -} - - -if (2097151 >>> 24 !== 0) { - $ERROR('#814: 2097151 >>> 24 === 0. Actual: ' + (2097151 >>> 24)); -} - - -if (4194303 >>> 24 !== 0) { - $ERROR('#815: 4194303 >>> 24 === 0. Actual: ' + (4194303 >>> 24)); -} - - -if (8388607 >>> 24 !== 0) { - $ERROR('#816: 8388607 >>> 24 === 0. Actual: ' + (8388607 >>> 24)); -} - - -if (16777215 >>> 24 !== 0) { - $ERROR('#817: 16777215 >>> 24 === 0. Actual: ' + (16777215 >>> 24)); -} - - -if (33554431 >>> 24 !== 1) { - $ERROR('#818: 33554431 >>> 24 === 1. Actual: ' + (33554431 >>> 24)); -} - - -if (67108863 >>> 24 !== 3) { - $ERROR('#819: 67108863 >>> 24 === 3. Actual: ' + (67108863 >>> 24)); -} - - -if (134217727 >>> 24 !== 7) { - $ERROR('#820: 134217727 >>> 24 === 7. Actual: ' + (134217727 >>> 24)); -} - - -if (268435455 >>> 24 !== 15) { - $ERROR('#821: 268435455 >>> 24 === 15. Actual: ' + (268435455 >>> 24)); -} - - -if (536870911 >>> 24 !== 31) { - $ERROR('#822: 536870911 >>> 24 === 31. Actual: ' + (536870911 >>> 24)); -} - - -if (1073741823 >>> 24 !== 63) { - $ERROR('#823: 1073741823 >>> 24 === 63. Actual: ' + (1073741823 >>> 24)); -} - - -if (2147483647 >>> 24 !== 127) { - $ERROR('#824: 2147483647 >>> 24 === 127. Actual: ' + (2147483647 >>> 24)); -} - - -if (4294967295 >>> 24 !== 255) { - $ERROR('#825: 4294967295 >>> 24 === 255. Actual: ' + (4294967295 >>> 24)); -} - - -if (0 >>> 25 !== 0) { - $ERROR('#826: 0 >>> 25 === 0. Actual: ' + (0 >>> 25)); -} - - -if (1 >>> 25 !== 0) { - $ERROR('#827: 1 >>> 25 === 0. Actual: ' + (1 >>> 25)); -} - - -if (3 >>> 25 !== 0) { - $ERROR('#828: 3 >>> 25 === 0. Actual: ' + (3 >>> 25)); -} - - -if (7 >>> 25 !== 0) { - $ERROR('#829: 7 >>> 25 === 0. Actual: ' + (7 >>> 25)); -} - - -if (15 >>> 25 !== 0) { - $ERROR('#830: 15 >>> 25 === 0. Actual: ' + (15 >>> 25)); -} - - -if (31 >>> 25 !== 0) { - $ERROR('#831: 31 >>> 25 === 0. Actual: ' + (31 >>> 25)); -} - - -if (63 >>> 25 !== 0) { - $ERROR('#832: 63 >>> 25 === 0. Actual: ' + (63 >>> 25)); -} - - -if (127 >>> 25 !== 0) { - $ERROR('#833: 127 >>> 25 === 0. Actual: ' + (127 >>> 25)); -} - - -if (255 >>> 25 !== 0) { - $ERROR('#834: 255 >>> 25 === 0. Actual: ' + (255 >>> 25)); -} - - -if (511 >>> 25 !== 0) { - $ERROR('#835: 511 >>> 25 === 0. Actual: ' + (511 >>> 25)); -} - - -if (1023 >>> 25 !== 0) { - $ERROR('#836: 1023 >>> 25 === 0. Actual: ' + (1023 >>> 25)); -} - - -if (2047 >>> 25 !== 0) { - $ERROR('#837: 2047 >>> 25 === 0. Actual: ' + (2047 >>> 25)); -} - - -if (4095 >>> 25 !== 0) { - $ERROR('#838: 4095 >>> 25 === 0. Actual: ' + (4095 >>> 25)); -} - - -if (8191 >>> 25 !== 0) { - $ERROR('#839: 8191 >>> 25 === 0. Actual: ' + (8191 >>> 25)); -} - - -if (16383 >>> 25 !== 0) { - $ERROR('#840: 16383 >>> 25 === 0. Actual: ' + (16383 >>> 25)); -} - - -if (32767 >>> 25 !== 0) { - $ERROR('#841: 32767 >>> 25 === 0. Actual: ' + (32767 >>> 25)); -} - - -if (65535 >>> 25 !== 0) { - $ERROR('#842: 65535 >>> 25 === 0. Actual: ' + (65535 >>> 25)); -} - - -if (131071 >>> 25 !== 0) { - $ERROR('#843: 131071 >>> 25 === 0. Actual: ' + (131071 >>> 25)); -} - - -if (262143 >>> 25 !== 0) { - $ERROR('#844: 262143 >>> 25 === 0. Actual: ' + (262143 >>> 25)); -} - - -if (524287 >>> 25 !== 0) { - $ERROR('#845: 524287 >>> 25 === 0. Actual: ' + (524287 >>> 25)); -} - - -if (1048575 >>> 25 !== 0) { - $ERROR('#846: 1048575 >>> 25 === 0. Actual: ' + (1048575 >>> 25)); -} - - -if (2097151 >>> 25 !== 0) { - $ERROR('#847: 2097151 >>> 25 === 0. Actual: ' + (2097151 >>> 25)); -} - - -if (4194303 >>> 25 !== 0) { - $ERROR('#848: 4194303 >>> 25 === 0. Actual: ' + (4194303 >>> 25)); -} - - -if (8388607 >>> 25 !== 0) { - $ERROR('#849: 8388607 >>> 25 === 0. Actual: ' + (8388607 >>> 25)); -} - - -if (16777215 >>> 25 !== 0) { - $ERROR('#850: 16777215 >>> 25 === 0. Actual: ' + (16777215 >>> 25)); -} - - -if (33554431 >>> 25 !== 0) { - $ERROR('#851: 33554431 >>> 25 === 0. Actual: ' + (33554431 >>> 25)); -} - - -if (67108863 >>> 25 !== 1) { - $ERROR('#852: 67108863 >>> 25 === 1. Actual: ' + (67108863 >>> 25)); -} - - -if (134217727 >>> 25 !== 3) { - $ERROR('#853: 134217727 >>> 25 === 3. Actual: ' + (134217727 >>> 25)); -} - - -if (268435455 >>> 25 !== 7) { - $ERROR('#854: 268435455 >>> 25 === 7. Actual: ' + (268435455 >>> 25)); -} - - -if (536870911 >>> 25 !== 15) { - $ERROR('#855: 536870911 >>> 25 === 15. Actual: ' + (536870911 >>> 25)); -} - - -if (1073741823 >>> 25 !== 31) { - $ERROR('#856: 1073741823 >>> 25 === 31. Actual: ' + (1073741823 >>> 25)); -} - - -if (2147483647 >>> 25 !== 63) { - $ERROR('#857: 2147483647 >>> 25 === 63. Actual: ' + (2147483647 >>> 25)); -} - - -if (4294967295 >>> 25 !== 127) { - $ERROR('#858: 4294967295 >>> 25 === 127. Actual: ' + (4294967295 >>> 25)); -} - - -if (0 >>> 26 !== 0) { - $ERROR('#859: 0 >>> 26 === 0. Actual: ' + (0 >>> 26)); -} - - -if (1 >>> 26 !== 0) { - $ERROR('#860: 1 >>> 26 === 0. Actual: ' + (1 >>> 26)); -} - - -if (3 >>> 26 !== 0) { - $ERROR('#861: 3 >>> 26 === 0. Actual: ' + (3 >>> 26)); -} - - -if (7 >>> 26 !== 0) { - $ERROR('#862: 7 >>> 26 === 0. Actual: ' + (7 >>> 26)); -} - - -if (15 >>> 26 !== 0) { - $ERROR('#863: 15 >>> 26 === 0. Actual: ' + (15 >>> 26)); -} - - -if (31 >>> 26 !== 0) { - $ERROR('#864: 31 >>> 26 === 0. Actual: ' + (31 >>> 26)); -} - - -if (63 >>> 26 !== 0) { - $ERROR('#865: 63 >>> 26 === 0. Actual: ' + (63 >>> 26)); -} - - -if (127 >>> 26 !== 0) { - $ERROR('#866: 127 >>> 26 === 0. Actual: ' + (127 >>> 26)); -} - - -if (255 >>> 26 !== 0) { - $ERROR('#867: 255 >>> 26 === 0. Actual: ' + (255 >>> 26)); -} - - -if (511 >>> 26 !== 0) { - $ERROR('#868: 511 >>> 26 === 0. Actual: ' + (511 >>> 26)); -} - - -if (1023 >>> 26 !== 0) { - $ERROR('#869: 1023 >>> 26 === 0. Actual: ' + (1023 >>> 26)); -} - - -if (2047 >>> 26 !== 0) { - $ERROR('#870: 2047 >>> 26 === 0. Actual: ' + (2047 >>> 26)); -} - - -if (4095 >>> 26 !== 0) { - $ERROR('#871: 4095 >>> 26 === 0. Actual: ' + (4095 >>> 26)); -} - - -if (8191 >>> 26 !== 0) { - $ERROR('#872: 8191 >>> 26 === 0. Actual: ' + (8191 >>> 26)); -} - - -if (16383 >>> 26 !== 0) { - $ERROR('#873: 16383 >>> 26 === 0. Actual: ' + (16383 >>> 26)); -} - - -if (32767 >>> 26 !== 0) { - $ERROR('#874: 32767 >>> 26 === 0. Actual: ' + (32767 >>> 26)); -} - - -if (65535 >>> 26 !== 0) { - $ERROR('#875: 65535 >>> 26 === 0. Actual: ' + (65535 >>> 26)); -} - - -if (131071 >>> 26 !== 0) { - $ERROR('#876: 131071 >>> 26 === 0. Actual: ' + (131071 >>> 26)); -} - - -if (262143 >>> 26 !== 0) { - $ERROR('#877: 262143 >>> 26 === 0. Actual: ' + (262143 >>> 26)); -} - - -if (524287 >>> 26 !== 0) { - $ERROR('#878: 524287 >>> 26 === 0. Actual: ' + (524287 >>> 26)); -} - - -if (1048575 >>> 26 !== 0) { - $ERROR('#879: 1048575 >>> 26 === 0. Actual: ' + (1048575 >>> 26)); -} - - -if (2097151 >>> 26 !== 0) { - $ERROR('#880: 2097151 >>> 26 === 0. Actual: ' + (2097151 >>> 26)); -} - - -if (4194303 >>> 26 !== 0) { - $ERROR('#881: 4194303 >>> 26 === 0. Actual: ' + (4194303 >>> 26)); -} - - -if (8388607 >>> 26 !== 0) { - $ERROR('#882: 8388607 >>> 26 === 0. Actual: ' + (8388607 >>> 26)); -} - - -if (16777215 >>> 26 !== 0) { - $ERROR('#883: 16777215 >>> 26 === 0. Actual: ' + (16777215 >>> 26)); -} - - -if (33554431 >>> 26 !== 0) { - $ERROR('#884: 33554431 >>> 26 === 0. Actual: ' + (33554431 >>> 26)); -} - - -if (67108863 >>> 26 !== 0) { - $ERROR('#885: 67108863 >>> 26 === 0. Actual: ' + (67108863 >>> 26)); -} - - -if (134217727 >>> 26 !== 1) { - $ERROR('#886: 134217727 >>> 26 === 1. Actual: ' + (134217727 >>> 26)); -} - - -if (268435455 >>> 26 !== 3) { - $ERROR('#887: 268435455 >>> 26 === 3. Actual: ' + (268435455 >>> 26)); -} - - -if (536870911 >>> 26 !== 7) { - $ERROR('#888: 536870911 >>> 26 === 7. Actual: ' + (536870911 >>> 26)); -} - - -if (1073741823 >>> 26 !== 15) { - $ERROR('#889: 1073741823 >>> 26 === 15. Actual: ' + (1073741823 >>> 26)); -} - - -if (2147483647 >>> 26 !== 31) { - $ERROR('#890: 2147483647 >>> 26 === 31. Actual: ' + (2147483647 >>> 26)); -} - - -if (4294967295 >>> 26 !== 63) { - $ERROR('#891: 4294967295 >>> 26 === 63. Actual: ' + (4294967295 >>> 26)); -} - - -if (0 >>> 27 !== 0) { - $ERROR('#892: 0 >>> 27 === 0. Actual: ' + (0 >>> 27)); -} - - -if (1 >>> 27 !== 0) { - $ERROR('#893: 1 >>> 27 === 0. Actual: ' + (1 >>> 27)); -} - - -if (3 >>> 27 !== 0) { - $ERROR('#894: 3 >>> 27 === 0. Actual: ' + (3 >>> 27)); -} - - -if (7 >>> 27 !== 0) { - $ERROR('#895: 7 >>> 27 === 0. Actual: ' + (7 >>> 27)); -} - - -if (15 >>> 27 !== 0) { - $ERROR('#896: 15 >>> 27 === 0. Actual: ' + (15 >>> 27)); -} - - -if (31 >>> 27 !== 0) { - $ERROR('#897: 31 >>> 27 === 0. Actual: ' + (31 >>> 27)); -} - - -if (63 >>> 27 !== 0) { - $ERROR('#898: 63 >>> 27 === 0. Actual: ' + (63 >>> 27)); -} - - -if (127 >>> 27 !== 0) { - $ERROR('#899: 127 >>> 27 === 0. Actual: ' + (127 >>> 27)); -} - - -if (255 >>> 27 !== 0) { - $ERROR('#900: 255 >>> 27 === 0. Actual: ' + (255 >>> 27)); -} - - -if (511 >>> 27 !== 0) { - $ERROR('#901: 511 >>> 27 === 0. Actual: ' + (511 >>> 27)); -} - - -if (1023 >>> 27 !== 0) { - $ERROR('#902: 1023 >>> 27 === 0. Actual: ' + (1023 >>> 27)); -} - - -if (2047 >>> 27 !== 0) { - $ERROR('#903: 2047 >>> 27 === 0. Actual: ' + (2047 >>> 27)); -} - - -if (4095 >>> 27 !== 0) { - $ERROR('#904: 4095 >>> 27 === 0. Actual: ' + (4095 >>> 27)); -} - - -if (8191 >>> 27 !== 0) { - $ERROR('#905: 8191 >>> 27 === 0. Actual: ' + (8191 >>> 27)); -} - - -if (16383 >>> 27 !== 0) { - $ERROR('#906: 16383 >>> 27 === 0. Actual: ' + (16383 >>> 27)); -} - - -if (32767 >>> 27 !== 0) { - $ERROR('#907: 32767 >>> 27 === 0. Actual: ' + (32767 >>> 27)); -} - - -if (65535 >>> 27 !== 0) { - $ERROR('#908: 65535 >>> 27 === 0. Actual: ' + (65535 >>> 27)); -} - - -if (131071 >>> 27 !== 0) { - $ERROR('#909: 131071 >>> 27 === 0. Actual: ' + (131071 >>> 27)); -} - - -if (262143 >>> 27 !== 0) { - $ERROR('#910: 262143 >>> 27 === 0. Actual: ' + (262143 >>> 27)); -} - - -if (524287 >>> 27 !== 0) { - $ERROR('#911: 524287 >>> 27 === 0. Actual: ' + (524287 >>> 27)); -} - - -if (1048575 >>> 27 !== 0) { - $ERROR('#912: 1048575 >>> 27 === 0. Actual: ' + (1048575 >>> 27)); -} - - -if (2097151 >>> 27 !== 0) { - $ERROR('#913: 2097151 >>> 27 === 0. Actual: ' + (2097151 >>> 27)); -} - - -if (4194303 >>> 27 !== 0) { - $ERROR('#914: 4194303 >>> 27 === 0. Actual: ' + (4194303 >>> 27)); -} - - -if (8388607 >>> 27 !== 0) { - $ERROR('#915: 8388607 >>> 27 === 0. Actual: ' + (8388607 >>> 27)); -} - - -if (16777215 >>> 27 !== 0) { - $ERROR('#916: 16777215 >>> 27 === 0. Actual: ' + (16777215 >>> 27)); -} - - -if (33554431 >>> 27 !== 0) { - $ERROR('#917: 33554431 >>> 27 === 0. Actual: ' + (33554431 >>> 27)); -} - - -if (67108863 >>> 27 !== 0) { - $ERROR('#918: 67108863 >>> 27 === 0. Actual: ' + (67108863 >>> 27)); -} - - -if (134217727 >>> 27 !== 0) { - $ERROR('#919: 134217727 >>> 27 === 0. Actual: ' + (134217727 >>> 27)); -} - - -if (268435455 >>> 27 !== 1) { - $ERROR('#920: 268435455 >>> 27 === 1. Actual: ' + (268435455 >>> 27)); -} - - -if (536870911 >>> 27 !== 3) { - $ERROR('#921: 536870911 >>> 27 === 3. Actual: ' + (536870911 >>> 27)); -} - - -if (1073741823 >>> 27 !== 7) { - $ERROR('#922: 1073741823 >>> 27 === 7. Actual: ' + (1073741823 >>> 27)); -} - - -if (2147483647 >>> 27 !== 15) { - $ERROR('#923: 2147483647 >>> 27 === 15. Actual: ' + (2147483647 >>> 27)); -} - - -if (4294967295 >>> 27 !== 31) { - $ERROR('#924: 4294967295 >>> 27 === 31. Actual: ' + (4294967295 >>> 27)); -} - - -if (0 >>> 28 !== 0) { - $ERROR('#925: 0 >>> 28 === 0. Actual: ' + (0 >>> 28)); -} - - -if (1 >>> 28 !== 0) { - $ERROR('#926: 1 >>> 28 === 0. Actual: ' + (1 >>> 28)); -} - - -if (3 >>> 28 !== 0) { - $ERROR('#927: 3 >>> 28 === 0. Actual: ' + (3 >>> 28)); -} - - -if (7 >>> 28 !== 0) { - $ERROR('#928: 7 >>> 28 === 0. Actual: ' + (7 >>> 28)); -} - - -if (15 >>> 28 !== 0) { - $ERROR('#929: 15 >>> 28 === 0. Actual: ' + (15 >>> 28)); -} - - -if (31 >>> 28 !== 0) { - $ERROR('#930: 31 >>> 28 === 0. Actual: ' + (31 >>> 28)); -} - - -if (63 >>> 28 !== 0) { - $ERROR('#931: 63 >>> 28 === 0. Actual: ' + (63 >>> 28)); -} - - -if (127 >>> 28 !== 0) { - $ERROR('#932: 127 >>> 28 === 0. Actual: ' + (127 >>> 28)); -} - - -if (255 >>> 28 !== 0) { - $ERROR('#933: 255 >>> 28 === 0. Actual: ' + (255 >>> 28)); -} - - -if (511 >>> 28 !== 0) { - $ERROR('#934: 511 >>> 28 === 0. Actual: ' + (511 >>> 28)); -} - - -if (1023 >>> 28 !== 0) { - $ERROR('#935: 1023 >>> 28 === 0. Actual: ' + (1023 >>> 28)); -} - - -if (2047 >>> 28 !== 0) { - $ERROR('#936: 2047 >>> 28 === 0. Actual: ' + (2047 >>> 28)); -} - - -if (4095 >>> 28 !== 0) { - $ERROR('#937: 4095 >>> 28 === 0. Actual: ' + (4095 >>> 28)); -} - - -if (8191 >>> 28 !== 0) { - $ERROR('#938: 8191 >>> 28 === 0. Actual: ' + (8191 >>> 28)); -} - - -if (16383 >>> 28 !== 0) { - $ERROR('#939: 16383 >>> 28 === 0. Actual: ' + (16383 >>> 28)); -} - - -if (32767 >>> 28 !== 0) { - $ERROR('#940: 32767 >>> 28 === 0. Actual: ' + (32767 >>> 28)); -} - - -if (65535 >>> 28 !== 0) { - $ERROR('#941: 65535 >>> 28 === 0. Actual: ' + (65535 >>> 28)); -} - - -if (131071 >>> 28 !== 0) { - $ERROR('#942: 131071 >>> 28 === 0. Actual: ' + (131071 >>> 28)); -} - - -if (262143 >>> 28 !== 0) { - $ERROR('#943: 262143 >>> 28 === 0. Actual: ' + (262143 >>> 28)); -} - - -if (524287 >>> 28 !== 0) { - $ERROR('#944: 524287 >>> 28 === 0. Actual: ' + (524287 >>> 28)); -} - - -if (1048575 >>> 28 !== 0) { - $ERROR('#945: 1048575 >>> 28 === 0. Actual: ' + (1048575 >>> 28)); -} - - -if (2097151 >>> 28 !== 0) { - $ERROR('#946: 2097151 >>> 28 === 0. Actual: ' + (2097151 >>> 28)); -} - - -if (4194303 >>> 28 !== 0) { - $ERROR('#947: 4194303 >>> 28 === 0. Actual: ' + (4194303 >>> 28)); -} - - -if (8388607 >>> 28 !== 0) { - $ERROR('#948: 8388607 >>> 28 === 0. Actual: ' + (8388607 >>> 28)); -} - - -if (16777215 >>> 28 !== 0) { - $ERROR('#949: 16777215 >>> 28 === 0. Actual: ' + (16777215 >>> 28)); -} - - -if (33554431 >>> 28 !== 0) { - $ERROR('#950: 33554431 >>> 28 === 0. Actual: ' + (33554431 >>> 28)); -} - - -if (67108863 >>> 28 !== 0) { - $ERROR('#951: 67108863 >>> 28 === 0. Actual: ' + (67108863 >>> 28)); -} - - -if (134217727 >>> 28 !== 0) { - $ERROR('#952: 134217727 >>> 28 === 0. Actual: ' + (134217727 >>> 28)); -} - - -if (268435455 >>> 28 !== 0) { - $ERROR('#953: 268435455 >>> 28 === 0. Actual: ' + (268435455 >>> 28)); -} - - -if (536870911 >>> 28 !== 1) { - $ERROR('#954: 536870911 >>> 28 === 1. Actual: ' + (536870911 >>> 28)); -} - - -if (1073741823 >>> 28 !== 3) { - $ERROR('#955: 1073741823 >>> 28 === 3. Actual: ' + (1073741823 >>> 28)); -} - - -if (2147483647 >>> 28 !== 7) { - $ERROR('#956: 2147483647 >>> 28 === 7. Actual: ' + (2147483647 >>> 28)); -} - - -if (4294967295 >>> 28 !== 15) { - $ERROR('#957: 4294967295 >>> 28 === 15. Actual: ' + (4294967295 >>> 28)); -} - - -if (0 >>> 29 !== 0) { - $ERROR('#958: 0 >>> 29 === 0. Actual: ' + (0 >>> 29)); -} - - -if (1 >>> 29 !== 0) { - $ERROR('#959: 1 >>> 29 === 0. Actual: ' + (1 >>> 29)); -} - - -if (3 >>> 29 !== 0) { - $ERROR('#960: 3 >>> 29 === 0. Actual: ' + (3 >>> 29)); -} - - -if (7 >>> 29 !== 0) { - $ERROR('#961: 7 >>> 29 === 0. Actual: ' + (7 >>> 29)); -} - - -if (15 >>> 29 !== 0) { - $ERROR('#962: 15 >>> 29 === 0. Actual: ' + (15 >>> 29)); -} - - -if (31 >>> 29 !== 0) { - $ERROR('#963: 31 >>> 29 === 0. Actual: ' + (31 >>> 29)); -} - - -if (63 >>> 29 !== 0) { - $ERROR('#964: 63 >>> 29 === 0. Actual: ' + (63 >>> 29)); -} - - -if (127 >>> 29 !== 0) { - $ERROR('#965: 127 >>> 29 === 0. Actual: ' + (127 >>> 29)); -} - - -if (255 >>> 29 !== 0) { - $ERROR('#966: 255 >>> 29 === 0. Actual: ' + (255 >>> 29)); -} - - -if (511 >>> 29 !== 0) { - $ERROR('#967: 511 >>> 29 === 0. Actual: ' + (511 >>> 29)); -} - - -if (1023 >>> 29 !== 0) { - $ERROR('#968: 1023 >>> 29 === 0. Actual: ' + (1023 >>> 29)); -} - - -if (2047 >>> 29 !== 0) { - $ERROR('#969: 2047 >>> 29 === 0. Actual: ' + (2047 >>> 29)); -} - - -if (4095 >>> 29 !== 0) { - $ERROR('#970: 4095 >>> 29 === 0. Actual: ' + (4095 >>> 29)); -} - - -if (8191 >>> 29 !== 0) { - $ERROR('#971: 8191 >>> 29 === 0. Actual: ' + (8191 >>> 29)); -} - - -if (16383 >>> 29 !== 0) { - $ERROR('#972: 16383 >>> 29 === 0. Actual: ' + (16383 >>> 29)); -} - - -if (32767 >>> 29 !== 0) { - $ERROR('#973: 32767 >>> 29 === 0. Actual: ' + (32767 >>> 29)); -} - - -if (65535 >>> 29 !== 0) { - $ERROR('#974: 65535 >>> 29 === 0. Actual: ' + (65535 >>> 29)); -} - - -if (131071 >>> 29 !== 0) { - $ERROR('#975: 131071 >>> 29 === 0. Actual: ' + (131071 >>> 29)); -} - - -if (262143 >>> 29 !== 0) { - $ERROR('#976: 262143 >>> 29 === 0. Actual: ' + (262143 >>> 29)); -} - - -if (524287 >>> 29 !== 0) { - $ERROR('#977: 524287 >>> 29 === 0. Actual: ' + (524287 >>> 29)); -} - - -if (1048575 >>> 29 !== 0) { - $ERROR('#978: 1048575 >>> 29 === 0. Actual: ' + (1048575 >>> 29)); -} - - -if (2097151 >>> 29 !== 0) { - $ERROR('#979: 2097151 >>> 29 === 0. Actual: ' + (2097151 >>> 29)); -} - - -if (4194303 >>> 29 !== 0) { - $ERROR('#980: 4194303 >>> 29 === 0. Actual: ' + (4194303 >>> 29)); -} - - -if (8388607 >>> 29 !== 0) { - $ERROR('#981: 8388607 >>> 29 === 0. Actual: ' + (8388607 >>> 29)); -} - - -if (16777215 >>> 29 !== 0) { - $ERROR('#982: 16777215 >>> 29 === 0. Actual: ' + (16777215 >>> 29)); -} - - -if (33554431 >>> 29 !== 0) { - $ERROR('#983: 33554431 >>> 29 === 0. Actual: ' + (33554431 >>> 29)); -} - - -if (67108863 >>> 29 !== 0) { - $ERROR('#984: 67108863 >>> 29 === 0. Actual: ' + (67108863 >>> 29)); -} - - -if (134217727 >>> 29 !== 0) { - $ERROR('#985: 134217727 >>> 29 === 0. Actual: ' + (134217727 >>> 29)); -} - - -if (268435455 >>> 29 !== 0) { - $ERROR('#986: 268435455 >>> 29 === 0. Actual: ' + (268435455 >>> 29)); -} - - -if (536870911 >>> 29 !== 0) { - $ERROR('#987: 536870911 >>> 29 === 0. Actual: ' + (536870911 >>> 29)); -} - - -if (1073741823 >>> 29 !== 1) { - $ERROR('#988: 1073741823 >>> 29 === 1. Actual: ' + (1073741823 >>> 29)); -} - - -if (2147483647 >>> 29 !== 3) { - $ERROR('#989: 2147483647 >>> 29 === 3. Actual: ' + (2147483647 >>> 29)); -} - - -if (4294967295 >>> 29 !== 7) { - $ERROR('#990: 4294967295 >>> 29 === 7. Actual: ' + (4294967295 >>> 29)); -} - - -if (0 >>> 30 !== 0) { - $ERROR('#991: 0 >>> 30 === 0. Actual: ' + (0 >>> 30)); -} - - -if (1 >>> 30 !== 0) { - $ERROR('#992: 1 >>> 30 === 0. Actual: ' + (1 >>> 30)); -} - - -if (3 >>> 30 !== 0) { - $ERROR('#993: 3 >>> 30 === 0. Actual: ' + (3 >>> 30)); -} - - -if (7 >>> 30 !== 0) { - $ERROR('#994: 7 >>> 30 === 0. Actual: ' + (7 >>> 30)); -} - - -if (15 >>> 30 !== 0) { - $ERROR('#995: 15 >>> 30 === 0. Actual: ' + (15 >>> 30)); -} - - -if (31 >>> 30 !== 0) { - $ERROR('#996: 31 >>> 30 === 0. Actual: ' + (31 >>> 30)); -} - - -if (63 >>> 30 !== 0) { - $ERROR('#997: 63 >>> 30 === 0. Actual: ' + (63 >>> 30)); -} - - -if (127 >>> 30 !== 0) { - $ERROR('#998: 127 >>> 30 === 0. Actual: ' + (127 >>> 30)); -} - - -if (255 >>> 30 !== 0) { - $ERROR('#999: 255 >>> 30 === 0. Actual: ' + (255 >>> 30)); -} - - -if (511 >>> 30 !== 0) { - $ERROR('#1000: 511 >>> 30 === 0. Actual: ' + (511 >>> 30)); -} - - -if (1023 >>> 30 !== 0) { - $ERROR('#1001: 1023 >>> 30 === 0. Actual: ' + (1023 >>> 30)); -} - - -if (2047 >>> 30 !== 0) { - $ERROR('#1002: 2047 >>> 30 === 0. Actual: ' + (2047 >>> 30)); -} - - -if (4095 >>> 30 !== 0) { - $ERROR('#1003: 4095 >>> 30 === 0. Actual: ' + (4095 >>> 30)); -} - - -if (8191 >>> 30 !== 0) { - $ERROR('#1004: 8191 >>> 30 === 0. Actual: ' + (8191 >>> 30)); -} - - -if (16383 >>> 30 !== 0) { - $ERROR('#1005: 16383 >>> 30 === 0. Actual: ' + (16383 >>> 30)); -} - - -if (32767 >>> 30 !== 0) { - $ERROR('#1006: 32767 >>> 30 === 0. Actual: ' + (32767 >>> 30)); -} - - -if (65535 >>> 30 !== 0) { - $ERROR('#1007: 65535 >>> 30 === 0. Actual: ' + (65535 >>> 30)); -} - - -if (131071 >>> 30 !== 0) { - $ERROR('#1008: 131071 >>> 30 === 0. Actual: ' + (131071 >>> 30)); -} - - -if (262143 >>> 30 !== 0) { - $ERROR('#1009: 262143 >>> 30 === 0. Actual: ' + (262143 >>> 30)); -} - - -if (524287 >>> 30 !== 0) { - $ERROR('#1010: 524287 >>> 30 === 0. Actual: ' + (524287 >>> 30)); -} - - -if (1048575 >>> 30 !== 0) { - $ERROR('#1011: 1048575 >>> 30 === 0. Actual: ' + (1048575 >>> 30)); -} - - -if (2097151 >>> 30 !== 0) { - $ERROR('#1012: 2097151 >>> 30 === 0. Actual: ' + (2097151 >>> 30)); -} - - -if (4194303 >>> 30 !== 0) { - $ERROR('#1013: 4194303 >>> 30 === 0. Actual: ' + (4194303 >>> 30)); -} - - -if (8388607 >>> 30 !== 0) { - $ERROR('#1014: 8388607 >>> 30 === 0. Actual: ' + (8388607 >>> 30)); -} - - -if (16777215 >>> 30 !== 0) { - $ERROR('#1015: 16777215 >>> 30 === 0. Actual: ' + (16777215 >>> 30)); -} - - -if (33554431 >>> 30 !== 0) { - $ERROR('#1016: 33554431 >>> 30 === 0. Actual: ' + (33554431 >>> 30)); -} - - -if (67108863 >>> 30 !== 0) { - $ERROR('#1017: 67108863 >>> 30 === 0. Actual: ' + (67108863 >>> 30)); -} - - -if (134217727 >>> 30 !== 0) { - $ERROR('#1018: 134217727 >>> 30 === 0. Actual: ' + (134217727 >>> 30)); -} - - -if (268435455 >>> 30 !== 0) { - $ERROR('#1019: 268435455 >>> 30 === 0. Actual: ' + (268435455 >>> 30)); -} - - -if (536870911 >>> 30 !== 0) { - $ERROR('#1020: 536870911 >>> 30 === 0. Actual: ' + (536870911 >>> 30)); -} - - -if (1073741823 >>> 30 !== 0) { - $ERROR('#1021: 1073741823 >>> 30 === 0. Actual: ' + (1073741823 >>> 30)); -} - - -if (2147483647 >>> 30 !== 1) { - $ERROR('#1022: 2147483647 >>> 30 === 1. Actual: ' + (2147483647 >>> 30)); -} - - -if (4294967295 >>> 30 !== 3) { - $ERROR('#1023: 4294967295 >>> 30 === 3. Actual: ' + (4294967295 >>> 30)); -} - - -if (0 >>> 31 !== 0) { - $ERROR('#1024: 0 >>> 31 === 0. Actual: ' + (0 >>> 31)); -} - - -if (1 >>> 31 !== 0) { - $ERROR('#1025: 1 >>> 31 === 0. Actual: ' + (1 >>> 31)); -} - - -if (3 >>> 31 !== 0) { - $ERROR('#1026: 3 >>> 31 === 0. Actual: ' + (3 >>> 31)); -} - - -if (7 >>> 31 !== 0) { - $ERROR('#1027: 7 >>> 31 === 0. Actual: ' + (7 >>> 31)); -} - - -if (15 >>> 31 !== 0) { - $ERROR('#1028: 15 >>> 31 === 0. Actual: ' + (15 >>> 31)); -} - - -if (31 >>> 31 !== 0) { - $ERROR('#1029: 31 >>> 31 === 0. Actual: ' + (31 >>> 31)); -} - - -if (63 >>> 31 !== 0) { - $ERROR('#1030: 63 >>> 31 === 0. Actual: ' + (63 >>> 31)); -} - - -if (127 >>> 31 !== 0) { - $ERROR('#1031: 127 >>> 31 === 0. Actual: ' + (127 >>> 31)); -} - - -if (255 >>> 31 !== 0) { - $ERROR('#1032: 255 >>> 31 === 0. Actual: ' + (255 >>> 31)); -} - - -if (511 >>> 31 !== 0) { - $ERROR('#1033: 511 >>> 31 === 0. Actual: ' + (511 >>> 31)); -} - - -if (1023 >>> 31 !== 0) { - $ERROR('#1034: 1023 >>> 31 === 0. Actual: ' + (1023 >>> 31)); -} - - -if (2047 >>> 31 !== 0) { - $ERROR('#1035: 2047 >>> 31 === 0. Actual: ' + (2047 >>> 31)); -} - - -if (4095 >>> 31 !== 0) { - $ERROR('#1036: 4095 >>> 31 === 0. Actual: ' + (4095 >>> 31)); -} - - -if (8191 >>> 31 !== 0) { - $ERROR('#1037: 8191 >>> 31 === 0. Actual: ' + (8191 >>> 31)); -} - - -if (16383 >>> 31 !== 0) { - $ERROR('#1038: 16383 >>> 31 === 0. Actual: ' + (16383 >>> 31)); -} - - -if (32767 >>> 31 !== 0) { - $ERROR('#1039: 32767 >>> 31 === 0. Actual: ' + (32767 >>> 31)); -} - - -if (65535 >>> 31 !== 0) { - $ERROR('#1040: 65535 >>> 31 === 0. Actual: ' + (65535 >>> 31)); -} - - -if (131071 >>> 31 !== 0) { - $ERROR('#1041: 131071 >>> 31 === 0. Actual: ' + (131071 >>> 31)); -} - - -if (262143 >>> 31 !== 0) { - $ERROR('#1042: 262143 >>> 31 === 0. Actual: ' + (262143 >>> 31)); -} - - -if (524287 >>> 31 !== 0) { - $ERROR('#1043: 524287 >>> 31 === 0. Actual: ' + (524287 >>> 31)); -} - - -if (1048575 >>> 31 !== 0) { - $ERROR('#1044: 1048575 >>> 31 === 0. Actual: ' + (1048575 >>> 31)); -} - - -if (2097151 >>> 31 !== 0) { - $ERROR('#1045: 2097151 >>> 31 === 0. Actual: ' + (2097151 >>> 31)); -} - - -if (4194303 >>> 31 !== 0) { - $ERROR('#1046: 4194303 >>> 31 === 0. Actual: ' + (4194303 >>> 31)); -} - - -if (8388607 >>> 31 !== 0) { - $ERROR('#1047: 8388607 >>> 31 === 0. Actual: ' + (8388607 >>> 31)); -} - - -if (16777215 >>> 31 !== 0) { - $ERROR('#1048: 16777215 >>> 31 === 0. Actual: ' + (16777215 >>> 31)); -} - - -if (33554431 >>> 31 !== 0) { - $ERROR('#1049: 33554431 >>> 31 === 0. Actual: ' + (33554431 >>> 31)); -} - - -if (67108863 >>> 31 !== 0) { - $ERROR('#1050: 67108863 >>> 31 === 0. Actual: ' + (67108863 >>> 31)); -} - - -if (134217727 >>> 31 !== 0) { - $ERROR('#1051: 134217727 >>> 31 === 0. Actual: ' + (134217727 >>> 31)); -} - - -if (268435455 >>> 31 !== 0) { - $ERROR('#1052: 268435455 >>> 31 === 0. Actual: ' + (268435455 >>> 31)); -} - - -if (536870911 >>> 31 !== 0) { - $ERROR('#1053: 536870911 >>> 31 === 0. Actual: ' + (536870911 >>> 31)); -} - - -if (1073741823 >>> 31 !== 0) { - $ERROR('#1054: 1073741823 >>> 31 === 0. Actual: ' + (1073741823 >>> 31)); -} - - -if (2147483647 >>> 31 !== 0) { - $ERROR('#1055: 2147483647 >>> 31 === 0. Actual: ' + (2147483647 >>> 31)); -} - - -if (4294967295 >>> 31 !== 1) { - $ERROR('#1056: 4294967295 >>> 31 === 1. Actual: ' + (4294967295 >>> 31)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A5.1_T1.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A5.1_T1.js deleted file mode 100644 index cb3547ad4..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A5.1_T1.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.3_A5.1_T1; - * @section: 11.7.3, 9.5; - * @assertion: Operator x >>> y uses ToUint32(ShiftExpression); - * @description: Checking boundary points; - */ - -//CHECK#1 -if (2147483648.1 >>> 0 !== 2147483648) { - $ERROR('#1: 2147483648.1 >>> 0 === 2147483648. Actual: ' + (2147483648.1 >>> 0)); -} - -//CHECK#2 -if (4294967296.1 >>> 0 !== 0) { - $ERROR('#2: 4294967296.1 >>> 0 === 0. Actual: ' + (4294967296.1 >>> 0)); -} - -//CHECK#3 -if (6442450944.1 >>> 0 !== 2147483648) { - $ERROR('#3: 6442450944.1 >>> 0 === 2147483648. Actual: ' + (6442450944.1 >>> 0)); -} - -//CHECK#4 -if (4294967295.1 >>> 0 !== 4294967295) { - $ERROR('#4: 4294967295.1 >>> 0 === 4294967295. Actual: ' + (4294967295.1 >>> 0)); -} - -//CHECK#5 -if (6442450943.1 >>> 0 !== 2147483647) { - $ERROR('#5: 6442450943.1 >>> 0 === 2147483647. Actual: ' + (6442450943.1 >>> 0)); -} - -//CHECK#6 -if (-2147483649.1 >>> 0 !== 2147483647) { - $ERROR('#6: -2147483649.1 >>> 0 === 2147483647. Actual: ' + (-2147483649.1 >>> 0)); -} - -//CHECK#7 -if (-4294967297.1 >>> 0 !== 4294967295) { - $ERROR('#7: -4294967297.1 >>> 0 === 4294967295. Actual: ' + (-4294967297.1 >>> 0)); -} - -//CHECK#8 -if (-6442450945.1 >>> 0 !== 2147483647) { - $ERROR('#8: -6442450945.1 >>> 0 === 2147483647. Actual: ' + (-6442450945.1 >>> 0)); -} - -//CHECK#9 -if (-4294967296.1 >>> 0 !== 0) { - $ERROR('#9: -4294967296.1 >>> 0 === 0 . Actual: ' + (-4294967296.1 >>> 0)); -} - -//CHECK#10 -if (-6442450944.1 >>> 0 !== 2147483648) { - $ERROR('#10: -6442450944.1 >>> 0 === 2147483648. Actual: ' + (-6442450944.1 >>> 0)); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A5.2_T1.js b/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A5.2_T1.js deleted file mode 100644 index 8a17bca20..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.7_Bitwise_Shift_Operators/11.7.3_The_Unsigned_Right_Shift_Operator/S11.7.3_A5.2_T1.js +++ /dev/null @@ -1,330 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.7.3_A5.2_T1; - * @section: 11.7.3, 9.5; - * @assertion: Operator x >>> y uses ToUint32(AdditiveExpression) & 31; - * @description: Checking distinct points; - */ - -//CHECK#1 -if (4294967295 >>> -32.1 !== 4294967295) { - $ERROR('#1: 4294967295 >>> -32.1 === 4294967295. Actual: ' + (4294967295 >>> -32.1)); -} - -//CHECK#2 -if (4294967295 >>> -31.1 !== 2147483647) { - $ERROR('#2: 4294967295 >>> -31.1 === 2147483647. Actual: ' + (4294967295 >>> -31.1)); -} - -//CHECK#3 -if (4294967295 >>> -30.1 !== 1073741823) { - $ERROR('#3: 4294967295 >>> -30.1 === 1073741823. Actual: ' + (4294967295 >>> -30.1)); -} - -//CHECK#4 -if (4294967295 >>> -29.1 !== 536870911) { - $ERROR('#4: 4294967295 >>> -29.1 === 536870911. Actual: ' + (4294967295 >>> -29.1)); -} - -//CHECK#5 -if (4294967295 >>> -28.1 !== 268435455) { - $ERROR('#5: 4294967295 >>> -28.1 === 268435455. Actual: ' + (4294967295 >>> -28.1)); -} - -//CHECK#6 -if (4294967295 >>> -27.1 !== 134217727) { - $ERROR('#6: 4294967295 >>> -27.1 === 134217727. Actual: ' + (4294967295 >>> -27.1)); -} - -//CHECK#7 -if (4294967295 >>> -26.1 !== 67108863) { - $ERROR('#7: 4294967295 >>> -26.1 === 67108863. Actual: ' + (4294967295 >>> -26.1)); -} - -//CHECK#8 -if (4294967295 >>> -25.1 !== 33554431) { - $ERROR('#8: 4294967295 >>> -25.1 === 33554431. Actual: ' + (4294967295 >>> -25.1)); -} - -//CHECK#9 -if (4294967295 >>> -24.1 !== 16777215) { - $ERROR('#9: 4294967295 >>> -24.1 === 16777215. Actual: ' + (4294967295 >>> -24.1)); -} - -//CHECK#10 -if (4294967295 >>> -23.1 !== 8388607) { - $ERROR('#10: 4294967295 >>> -23.1 === 8388607. Actual: ' + (4294967295 >>> -23.1)); -} - -//CHECK#11 -if (4294967295 >>> -22.1 !== 4194303) { - $ERROR('#11: 4294967295 >>> -22.1 === 4194303. Actual: ' + (4294967295 >>> -22.1)); -} - -//CHECK#12 -if (4294967295 >>> -21.1 !== 2097151) { - $ERROR('#12: 4294967295 >>> -21.1 === 2097151. Actual: ' + (4294967295 >>> -21.1)); -} - -//CHECK#13 -if (4294967295 >>> -20.1 !== 1048575) { - $ERROR('#13: 4294967295 >>> -20.1 === 1048575. Actual: ' + (4294967295 >>> -20.1)); -} - -//CHECK#14 -if (4294967295 >>> -19.1 !== 524287) { - $ERROR('#14: 4294967295 >>> -19.1 === 524287. Actual: ' + (4294967295 >>> -19.1)); -} - -//CHECK#15 -if (4294967295 >>> -18.1 !== 262143) { - $ERROR('#15: 4294967295 >>> -18.1 === 262143. Actual: ' + (4294967295 >>> -18.1)); -} - -//CHECK#16 -if (4294967295 >>> -17.1 !== 131071) { - $ERROR('#16: 4294967295 >>> -17.1 === 131071. Actual: ' + (4294967295 >>> -17.1)); -} - -//CHECK#17 -if (4294967295 >>> -16.1 !== 65535) { - $ERROR('#17: 4294967295 >>> -16.1 === 65535. Actual: ' + (4294967295 >>> -16.1)); -} - -//CHECK#18 -if (4294967295 >>> -15.1 !== 32767) { - $ERROR('#18: 4294967295 >>> -15.1 === 32767. Actual: ' + (4294967295 >>> -15.1)); -} - -//CHECK#19 -if (4294967295 >>> -14.1 !== 16383) { - $ERROR('#19: 4294967295 >>> -14.1 === 16383. Actual: ' + (4294967295 >>> -14.1)); -} - -//CHECK#20 -if (4294967295 >>> -13.1 !== 8191) { - $ERROR('#20: 4294967295 >>> -13.1 === 8191. Actual: ' + (4294967295 >>> -13.1)); -} - -//CHECK#21 -if (4294967295 >>> -12.1 !== 4095) { - $ERROR('#21: 4294967295 >>> -12.1 === 4095. Actual: ' + (4294967295 >>> -12.1)); -} - -//CHECK#22 -if (4294967295 >>> -11.1 !== 2047) { - $ERROR('#22: 4294967295 >>> -11.1 === 2047. Actual: ' + (4294967295 >>> -11.1)); -} - -//CHECK#23 -if (4294967295 >>> -10.1 !== 1023) { - $ERROR('#23: 4294967295 >>> -10.1 === 1023. Actual: ' + (4294967295 >>> -10.1)); -} - -//CHECK#24 -if (4294967295 >>> -9.1 !== 511) { - $ERROR('#24: 4294967295 >>> -9.1 === 511. Actual: ' + (4294967295 >>> -9.1)); -} - -//CHECK#25 -if (4294967295 >>> -8.1 !== 255) { - $ERROR('#25: 4294967295 >>> -8.1 === 255. Actual: ' + (4294967295 >>> -8.1)); -} - -//CHECK#26 -if (4294967295 >>> -7.1 !== 127) { - $ERROR('#26: 4294967295 >>> -7.1 === 127. Actual: ' + (4294967295 >>> -7.1)); -} - -//CHECK#27 -if (4294967295 >>> -6.1 !== 63) { - $ERROR('#27: 4294967295 >>> -6.1 === 63. Actual: ' + (4294967295 >>> -6.1)); -} - -//CHECK#28 -if (4294967295 >>> -5.1 !== 31) { - $ERROR('#28: 4294967295 >>> -5.1 === 31. Actual: ' + (4294967295 >>> -5.1)); -} - -//CHECK#29 -if (4294967295 >>> -4.1 !== 15) { - $ERROR('#29: 4294967295 >>> -4.1 === 15. Actual: ' + (4294967295 >>> -4.1)); -} - -//CHECK#30 -if (4294967295 >>> -3.1 !== 7) { - $ERROR('#30: 4294967295 >>> -3.1 === 7. Actual: ' + (4294967295 >>> -3.1)); -} - -//CHECK#31 -if (4294967295 >>> -2.1 !== 3) { - $ERROR('#31: 4294967295 >>> -2.1 === 3. Actual: ' + (4294967295 >>> -2.1)); -} - -//CHECK#32 -if (4294967295 >>> -1.1 !== 1) { - $ERROR('#32: 4294967295 >>> -1.1 === 1. Actual: ' + (4294967295 >>> -1.1)); -} - -//CHECK#33 -if (4294967295 >>> 32.1 !== 4294967295) { - $ERROR('#33: 4294967295 >>> 32.1 === 4294967295. Actual: ' + (4294967295 >>> 32.1)); -} - -//CHECK#34 -if (4294967295 >>> 33.1 !== 2147483647) { - $ERROR('#34: 4294967295 >>> 33.1 === 2147483647. Actual: ' + (4294967295 >>> 33.1)); -} - -//CHECK#35 -if (4294967295 >>> 34.1 !== 1073741823) { - $ERROR('#35: 4294967295 >>> 34.1 === 1073741823. Actual: ' + (4294967295 >>> 34.1)); -} - -//CHECK#36 -if (4294967295 >>> 35.1 !== 536870911) { - $ERROR('#36: 4294967295 >>> 35.1 === 536870911. Actual: ' + (4294967295 >>> 35.1)); -} - -//CHECK#37 -if (4294967295 >>> 36.1 !== 268435455) { - $ERROR('#37: 4294967295 >>> 36.1 === 268435455. Actual: ' + (4294967295 >>> 36.1)); -} - -//CHECK#38 -if (4294967295 >>> 37.1 !== 134217727) { - $ERROR('#38: 4294967295 >>> 37.1 === 134217727. Actual: ' + (4294967295 >>> 37.1)); -} - -//CHECK#39 -if (4294967295 >>> 38.1 !== 67108863) { - $ERROR('#39: 4294967295 >>> 38.1 === 67108863. Actual: ' + (4294967295 >>> 38.1)); -} - -//CHECK#40 -if (4294967295 >>> 39.1 !== 33554431) { - $ERROR('#40: 4294967295 >>> 39.1 === 33554431. Actual: ' + (4294967295 >>> 39.1)); -} - -//CHECK#41 -if (4294967295 >>> 40.1 !== 16777215) { - $ERROR('#41: 4294967295 >>> 40.1 === 16777215. Actual: ' + (4294967295 >>> 40.1)); -} - -//CHECK#42 -if (4294967295 >>> 41.1 !== 8388607) { - $ERROR('#42: 4294967295 >>> 41.1 === 8388607. Actual: ' + (4294967295 >>> 41.1)); -} - -//CHECK#43 -if (4294967295 >>> 42.1 !== 4194303) { - $ERROR('#43: 4294967295 >>> 42.1 === 4194303. Actual: ' + (4294967295 >>> 42.1)); -} - -//CHECK#44 -if (4294967295 >>> 43.1 !== 2097151) { - $ERROR('#44: 4294967295 >>> 43.1 === 2097151. Actual: ' + (4294967295 >>> 43.1)); -} - -//CHECK#45 -if (4294967295 >>> 44.1 !== 1048575) { - $ERROR('#45: 4294967295 >>> 44.1 === 1048575. Actual: ' + (4294967295 >>> 44.1)); -} - -//CHECK#46 -if (4294967295 >>> 45.1 !== 524287) { - $ERROR('#46: 4294967295 >>> 45.1 === 524287. Actual: ' + (4294967295 >>> 45.1)); -} - -//CHECK#47 -if (4294967295 >>> 46.1 !== 262143) { - $ERROR('#47: 4294967295 >>> 46.1 === 262143. Actual: ' + (4294967295 >>> 46.1)); -} - -//CHECK#48 -if (4294967295 >>> 47.1 !== 131071) { - $ERROR('#48: 4294967295 >>> 47.1 === 131071. Actual: ' + (4294967295 >>> 47.1)); -} - -//CHECK#49 -if (4294967295 >>> 48.1 !== 65535) { - $ERROR('#49: 4294967295 >>> 48.1 === 65535. Actual: ' + (4294967295 >>> 48.1)); -} - -//CHECK#50 -if (4294967295 >>> 49.1 !== 32767) { - $ERROR('#50: 4294967295 >>> 49.1 === 32767. Actual: ' + (4294967295 >>> 49.1)); -} - -//CHECK#51 -if (4294967295 >>> 50.1 !== 16383) { - $ERROR('#51: 4294967295 >>> 50.1 === 16383. Actual: ' + (4294967295 >>> 50.1)); -} - -//CHECK#52 -if (4294967295 >>> 51.1 !== 8191) { - $ERROR('#52: 4294967295 >>> 51.1 === 8191. Actual: ' + (4294967295 >>> 51.1)); -} - -//CHECK#53 -if (4294967295 >>> 52.1 !== 4095) { - $ERROR('#53: 4294967295 >>> 52.1 === 4095. Actual: ' + (4294967295 >>> 52.1)); -} - -//CHECK#54 -if (4294967295 >>> 53.1 !== 2047) { - $ERROR('#54: 4294967295 >>> 53.1 === 2047. Actual: ' + (4294967295 >>> 53.1)); -} - -//CHECK#55 -if (4294967295 >>> 54.1 !== 1023) { - $ERROR('#55: 4294967295 >>> 54.1 === 1023. Actual: ' + (4294967295 >>> 54.1)); -} - -//CHECK#56 -if (4294967295 >>> 55.1 !== 511) { - $ERROR('#56: 4294967295 >>> 55.1 === 511. Actual: ' + (4294967295 >>> 55.1)); -} - -//CHECK#57 -if (4294967295 >>> 56.1 !== 255) { - $ERROR('#57: 4294967295 >>> 56.1 === 255. Actual: ' + (4294967295 >>> 56.1)); -} - -//CHECK#58 -if (4294967295 >>> 57.1 !== 127) { - $ERROR('#58: 4294967295 >>> 57.1 === 127. Actual: ' + (4294967295 >>> 57.1)); -} - -//CHECK#59 -if (4294967295 >>> 58.1 !== 63) { - $ERROR('#59: 4294967295 >>> 58.1 === 63. Actual: ' + (4294967295 >>> 58.1)); -} - -//CHECK#60 -if (4294967295 >>> 59.1 !== 31) { - $ERROR('#60: 4294967295 >>> 59.1 === 31. Actual: ' + (4294967295 >>> 59.1)); -} - -//CHECK#61 -if (4294967295 >>> 60.1 !== 15) { - $ERROR('#61: 4294967295 >>> 60.1 === 15. Actual: ' + (4294967295 >>> 60.1)); -} - -//CHECK#62 -if (4294967295 >>> 61.1 !== 7) { - $ERROR('#62: 4294967295 >>> 61.1 === 7. Actual: ' + (4294967295 >>> 61.1)); -} - -//CHECK#63 -if (4294967295 >>> 62.1 !== 3) { - $ERROR('#63: 4294967295 >>> 62.1 === 3. Actual: ' + (4294967295 >>> 62.1)); -} - -//CHECK#64 -if (4294967295 >>> 63.1 !== 1) { - $ERROR('#64: 4294967295 >>> 63.1 === 1. Actual: ' + (4294967295 >>> 63.1)); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A1.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A1.js deleted file mode 100644 index 85b40a593..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A1.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.1_A1; -* @section: 11.8.1, 7.2, 7.3; -* @assertion: White Space and Line Terminator between RelationalExpression and "<" or between "<" and ShiftExpression are allowed; -* @description: Checking by using eval; -*/ - -//CHECK#1 -if (eval("0\u0009<\u00091") !== true) { - $ERROR('#1: (0\\u0009<\\u00091) === true'); -} - -//CHECK#2 -if (eval("0\u000B<\u000B1") !== true) { - $ERROR('#2: (0\\u000B<\\u000B1) === true'); -} - -//CHECK#3 -if (eval("0\u000C<\u000C1") !== true) { - $ERROR('#3: (0\\u000C<\\u000C1) === true'); -} - -//CHECK#4 -if (eval("0\u0020<\u00201") !== true) { - $ERROR('#4: (0\\u0020<\\u00201) === true'); -} - -//CHECK#5 -if (eval("0\u00A0<\u00A01") !== true) { - $ERROR('#5: (0\\u00A0<\\u00A01) === true'); -} - -//CHECK#6 -if (eval("0\u000A<\u000A1") !== true) { - $ERROR('#6: (0\\u000A<\\u000A1) === true'); -} - -//CHECK#7 -if (eval("0\u000D<\u000D1") !== true) { - $ERROR('#7: (0\\u000D<\\u000D1) === true'); -} - -//CHECK#8 -if (eval("0\u2028<\u20281") !== true) { - $ERROR('#8: (0\\u2028<\\u20281) === true'); -} - -//CHECK#9 -if (eval("0\u2029<\u20291") !== true) { - $ERROR('#9: (0\\u2029<\\u20291) === true'); -} - -//CHECK#10 -if (eval("0\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029<\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20291") !== true) { - $ERROR('#10: (0\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029<\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20291) === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A2.1_T1.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A2.1_T1.js deleted file mode 100644 index 1bae3554b..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A2.1_T1.js +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.1_A2.1_T1; -* @section: 11.8.1, 11.8.5; -* @assertion: Operator x < y uses GetValue; -* @description: Either Type is not Reference or GetBase is not null; -*/ - -//CHECK#1 -if (1 < 2 !== true) { - $ERROR('#1: 1 < 2 === true'); -} - -//CHECK#2 -var x = 1; -if (x < 2 !== true) { - $ERROR('#2: var x = 1; x < 2 === true'); -} - -//CHECK#3 -var y = 2; -if (1 < y !== true) { - $ERROR('#3: var y = 2; 1 < y === true'); -} - -//CHECK#4 -var x = 1; -var y = 2; -if (x < y !== true) { - $ERROR('#4: var x = 1; var y = 2; x < y === true'); -} - -//CHECK#5 -var objectx = new Object(); -var objecty = new Object(); -objectx.prop = 1; -objecty.prop = 2; -if (objectx.prop < objecty.prop !== true) { - $ERROR('#5: var objectx = new Object(); var objecty = new Object(); objectx.prop = 1; objecty.prop = 2; objectx.prop < objecty.prop === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A2.1_T2.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A2.1_T2.js deleted file mode 100644 index 9f80a2086..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A2.1_T2.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.1_A2.1_T2; - * @section: 11.8.1, 11.8.5; - * @assertion: Operator x < y uses GetValue; - * @description: If GetBase(x) is null, throw ReferenceError; -*/ - -//CHECK#1 -try { - x < 1; - $ERROR('#1.1: x < 1 throw ReferenceError. Actual: ' + (x < 1)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: x < 1 throw ReferenceError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A2.1_T3.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A2.1_T3.js deleted file mode 100644 index b910103d9..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A2.1_T3.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.1_A2.1_T3; - * @section: 11.8.1, 11.8.5; - * @assertion: Operator x < y uses GetValue; - * @description: If GetBase(y) is null, throw ReferenceError; -*/ - -//CHECK#1 -try { - 1 < y; - $ERROR('#1.1: 1 < y throw ReferenceError. Actual: ' + (1 < y)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: 1 < y throw ReferenceError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A2.2_T1.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A2.2_T1.js deleted file mode 100644 index 4e30f6530..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A2.2_T1.js +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.1_A2.2_T1; - * @section: 11.8.1, 8.6.2.6; - * @assertion: Operator x < y uses [[Default Value]]; - * @description: If Type(value) is Object, evaluate ToPrimitive(value, Number); - */ - -//CHECK#1 -if ({valueOf: function() {return 0}} < 1 !== true) { - $ERROR('#1: {valueOf: function() {return 1}} < 1 === true. Actual: ' + ({valueOf: function() {return 1}} < 1)); -} - -//CHECK#2 -if ({valueOf: function() {return 0}, toString: function() {return 2}} < 1 !== true) { - $ERROR('#2: {valueOf: function() {return 1}, toString: function() {return 0}} < 1 === true. Actual: ' + ({valueOf: function() {return 1}, toString: function() {return 0}} < 1)); -} - -//CHECK#3 -if ({valueOf: function() {return 0}, toString: function() {return {}}} < 1 !== true) { - $ERROR('#3: {valueOf: function() {return 1}, toString: function() {return {}}} < 1 === true. Actual: ' + ({valueOf: function() {return 1}, toString: function() {return {}}} < 1)); -} - -//CHECK#4 -try { - if ({valueOf: function() {return 0}, toString: function() {throw "error"}} < 1 !== true) { - $ERROR('#4.1: {valueOf: function() {return 1}, toString: function() {throw "error"}} < 1 === true. Actual: ' + ({valueOf: function() {return 1}, toString: function() {throw "error"}} < 1)); - } -} -catch (e) { - if (e === "error") { - $ERROR('#4.2: {valueOf: function() {return 0}, toString: function() {throw "error"}} < 1 not throw "error"'); - } else { - $ERROR('#4.3: {valueOf: function() {return 0}, toString: function() {throw "error"}} < 1 not throw Error. Actual: ' + (e)); - } -} - -//CHECK#5 -if (1 < {toString: function() {return 2}} !== true) { - $ERROR('#5: 1 < {toString: function() {return 2}} === true. Actual: ' + (1 < {toString: function() {return 2}})); -} - -//CHECK#6 -if (1 < {valueOf: function() {return {}}, toString: function() {return 2}} !== true) { - $ERROR('#6: 1 < {valueOf: function() {return {}}, toString: function() {return 2}} === true. Actual: ' + (1 < {valueOf: function() {return {}}, toString: function() {return 2}})); -} - -//CHECK#7 -try { - 1 < {valueOf: function() {throw "error"}, toString: function() {return 2}}; - $ERROR('#7.1: 1 < {valueOf: function() {throw "error"}, toString: function() {return 2}} throw "error". Actual: ' + (1 < {valueOf: function() {throw "error"}, toString: function() {return 2}})); -} -catch (e) { - if (e !== "error") { - $ERROR('#7.2: 1 < {valueOf: function() {throw "error"}, toString: function() {return 2}} throw "error". Actual: ' + (e)); - } -} - -//CHECK#8 -try { - 1 < {valueOf: function() {return {}}, toString: function() {return {}}}; - $ERROR('#8.1: 1 < {valueOf: function() {return {}}, toString: function() {return {}}} throw TypeError. Actual: ' + (1 < {valueOf: function() {return {}}, toString: function() {return {}}})); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#8.2: 1 < {valueOf: function() {return {}}, toString: function() {return {}}} throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A2.3_T1.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A2.3_T1.js deleted file mode 100644 index 46c9c52d7..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A2.3_T1.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.1_A2.3_T1; - * @section: 11.8.1; - * @assertion: ToNumber(first expression) is called first, and then ToNumber(second expression); - * @description: Checking with "throw"; -*/ - -//CHECK#1 -var x = { valueOf: function () { throw "x"; } }; -var y = { valueOf: function () { throw "y"; } }; -try { - x < y; - $ERROR('#1.1: var x = { valueOf: function () { throw "x"; } }; var y = { valueOf: function () { throw "y"; } }; x < y throw "x". Actual: ' + (x < y)); -} catch (e) { - if (e === "y") { - $ERROR('#1.2: ToNumber(first expression) is called first, and then ToNumber(second expression)'); - } else { - if (e !== "x") { - $ERROR('#1.3: var x = { valueOf: function () { throw "x"; } }; var y = { valueOf: function () { throw "y"; } }; x < y throw "x". Actual: ' + (e)); - } - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A2.4_T1.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A2.4_T1.js deleted file mode 100644 index 8427bb10e..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A2.4_T1.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.1_A2.4_T1; - * @section: 11.8.1; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with "="; -*/ - -//CHECK#1 -var x = 1; -if ((x = 0) < x !== false) { - $ERROR('#1: var x = 1; (x = 0) < x === false'); -} - -//CHECK#2 -var x = 0; -if (x < (x = 1) !== true) { - $ERROR('#2: var x = 0; x < (x = 1) === true'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A2.4_T2.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A2.4_T2.js deleted file mode 100644 index 65d2141eb..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A2.4_T2.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.1_A2.4_T2; - * @section: 11.8.1; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with "throw"; -*/ - -//CHECK#1 -var x = function () { throw "x"; }; -var y = function () { throw "y"; }; -try { - x() < y(); - $ERROR('#1.1: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() < y() throw "x". Actual: ' + (x() < y())); -} catch (e) { - if (e === "y") { - $ERROR('#1.2: First expression is evaluated first, and then second expression'); - } else { - if (e !== "x") { - $ERROR('#1.3: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() < y() throw "x". Actual: ' + (e)); - } - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A2.4_T3.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A2.4_T3.js deleted file mode 100644 index dd03a26a0..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A2.4_T3.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.1_A2.4_T3; - * @section: 11.8.1; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with undeclarated variables; -*/ - -//CHECK#1 -try { - x < (x = 1); - $ERROR('#1.1: x < (x = 1) throw ReferenceError. Actual: ' + (x < (x = 1))); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: x < (x = 1) throw ReferenceError. Actual: ' + (e)); - } -} - -//CHECK#2 -if ((y = 1) < y !== false) { - $ERROR('#2: (y = 1) < y === false'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A3.1_T1.1.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A3.1_T1.1.js deleted file mode 100644 index b24177cbf..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A3.1_T1.1.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.1_A3.1_T1.1; - * @section: 11.8.1; - * @assertion: If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x < y returns ToNumber(x) < ToNumber(y); - * @description: Type(Primitive(x)) and Type(Primitive(y)) vary between primitive boolean and Boolean object; - */ - -//CHECK#1 -if (true < true !== false) { - $ERROR('#1: true < true === false'); -} - -//CHECK#2 -if (new Boolean(true) < true !== false) { - $ERROR('#2: new Boolean(true) < true === false'); -} - -//CHECK#3 -if (true < new Boolean(true) !== false) { - $ERROR('#3: true < new Boolean(true) === false'); -} - -//CHECK#4 -if (new Boolean(true) < new Boolean(true) !== false) { - $ERROR('#4: new Boolean(true) < new Boolean(true) === false'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A3.1_T1.2.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A3.1_T1.2.js deleted file mode 100644 index d924aa166..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A3.1_T1.2.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.1_A3.1_T1.2; - * @section: 11.8.1; - * @assertion: If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x < y returns ToNumber(x) < ToNumber(y); - * @description: Type(Primitive(x)) and Type(Primitive(y)) vary between primitive number and Number object; -*/ - -//CHECK#1 -if (1 < 1 !== false) { - $ERROR('#1: 1 < 1 === false'); -} - -//CHECK#2 -if (new Number(1) < 1 !== false) { - $ERROR('#2: new Number(1) < 1 === false'); -} - -//CHECK#3 -if (1 < new Number(1) !== false) { - $ERROR('#3: 1 < new Number(1) === false'); -} - -//CHECK#4 -if (new Number(1) < new Number(1) !== false) { - $ERROR('#4: new Number(1) < new Number(1) === false'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A3.1_T1.3.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A3.1_T1.3.js deleted file mode 100644 index fff96eba4..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A3.1_T1.3.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.1_A3.1_T1.3; - * @section: 11.8.1; - * @assertion: If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x < y returns ToNumber(x) < ToNumber(y); - * @description: Type(Primitive(x)) and Type(Primitive(y)) vary between Null and Undefined; - */ - -//CHECK#1 -if (null < undefined !== false) { - $ERROR('#1: null < undefined === false'); -} - -//CHECK#2 -if (undefined < null !== false) { - $ERROR('#2: undefined < null === false'); -} - -//CHECK#3 -if (undefined < undefined !== false) { - $ERROR('#3: undefined < undefined === false'); -} - -//CHECK#4 -if (null < null !== false) { - $ERROR('#4: null < null === false'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A3.1_T2.1.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A3.1_T2.1.js deleted file mode 100644 index 812fb63a2..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A3.1_T2.1.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.1_A3.1_T2.1; - * @section: 11.8.1; - * @assertion: If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x < y returns ToNumber(x) < ToNumber(y); - * @description: Type(Primitive(x)) is different from Type(Primitive(y)) and both types are Number (primitive or object) or Boolean (primitive and object); - */ - -//CHECK#1 -if (true < 1 !== false) { - $ERROR('#1: true < 1 === false'); -} - -//CHECK#2 -if (1 < true !== false) { - $ERROR('#2: 1 < true === false'); -} - -//CHECK#3 -if (new Boolean(true) < 1 !== false) { - $ERROR('#3: new Boolean(true) < 1 === false'); -} - -//CHECK#4 -if (1 < new Boolean(true) !== false) { - $ERROR('#4: 1 < new Boolean(true) === false'); -} - -//CHECK#5 -if (true < new Number(1) !== false) { - $ERROR('#5: true < new Number(1) === false'); -} - -//CHECK#6 -if (new Number(1) < true !== false) { - $ERROR('#6: new Number(1) < true === false'); -} - -//CHECK#7 -if (new Boolean(true) < new Number(1) !== false) { - $ERROR('#7: new Boolean(true) < new Number(1) === false'); -} - -//CHECK#8 -if (new Number(1) < new Boolean(true) !== false) { - $ERROR('#8: new Number(1) < new Boolean(true) === false'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A3.1_T2.2.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A3.1_T2.2.js deleted file mode 100644 index 78fef1158..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A3.1_T2.2.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.1_A3.1_T2.2; - * @section: 11.8.1; - * @assertion: If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x < y returns ToNumber(x) < ToNumber(y); - * @description: Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between Number (primitive or object) and String (primitive and object); -*/ - -//CHECK#1 -if ("1" < 1 !== false) { - $ERROR('#1: "1" < 1 === false'); -} - -//CHECK#2 -if (1 < "1" !== false) { - $ERROR('#2: 1 < "1" === false'); -} - -//CHECK#3 -if (new String("1") < 1 !== false) { - $ERROR('#3: new String("1") < 1 === false'); -} - -//CHECK#4 -if (1 < new String("1") !== false) { - $ERROR('#4: 1 < new String("1") === false'); -} - -//CHECK#5 -if ("1" < new Number(1) !== false) { - $ERROR('#5: "1" < new Number(1) === false'); -} - -//CHECK#6 -if (new Number(1) < "1" !== false) { - $ERROR('#6: new Number(1) < "1" === false'); -} - -//CHECK#7 -if (new String("1") < new Number(1) !== false) { - $ERROR('#7: new String("1") < new Number(1) === false'); -} - -//CHECK#8 -if (new Number(1) < new String("1") !== false) { - $ERROR('#8: new Number(1) < new String("1") === false'); -} - -//CHECK#9 -if ("x" < 1 !== false) { - $ERROR('#9: "x" < 1 === false'); -} - -//CHECK#10 -if (1 < "x" !== false) { - $ERROR('#10: 1 < "x" === false'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A3.1_T2.3.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A3.1_T2.3.js deleted file mode 100644 index 278bfefb7..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A3.1_T2.3.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.1_A3.1_T2.3; - * @section: 11.8.1; - * @assertion: If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x < y returns ToNumber(x) < ToNumber(y); - * @description: Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between Number (primitive or object) and Null; - */ - -//CHECK#1 -if (1 < null !== false) { - $ERROR('#1: 1 < null === false'); -} - -//CHECK#2 -if (null < 1 !== true) { - $ERROR('#2: null < 1 === true'); -} - -//CHECK#3 -if (new Number(1) < null !== false) { - $ERROR('#3: new Number(1) < null === false'); -} - -//CHECK#4 -if (null < new Number(1) !== true) { - $ERROR('#4: null < new Number(1) === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A3.1_T2.4.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A3.1_T2.4.js deleted file mode 100644 index d33c4c52d..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A3.1_T2.4.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.1_A3.1_T2.4; - * @section: 11.8.1; - * @assertion: If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x < y returns ToNumber(x) < ToNumber(y); - * @description: Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between Number (primitive or object) and Undefined; - */ - -//CHECK#1 -if (1 < undefined !== false) { - $ERROR('#1: 1 < undefined === false'); -} - -//CHECK#2 -if (undefined < 1 !== false) { - $ERROR('#2: undefined < 1 === false'); -} - -//CHECK#3 -if (new Number(1) < undefined !== false) { - $ERROR('#3: new Number(1) < undefined === false'); -} - -//CHECK#4 -if (undefined < new Number(1) !== false) { - $ERROR('#4: undefined < new Number(1) === false'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A3.1_T2.5.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A3.1_T2.5.js deleted file mode 100644 index 569aa8f22..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A3.1_T2.5.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.1_A3.1_T2.5; - * @section: 11.8.1; - * @assertion: If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x < y returns ToNumber(x) < ToNumber(y); - * @description: Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between String (primitive or object) and Boolean (primitive and object); -*/ - -//CHECK#1 -if (true < "1" !== false) { - $ERROR('#1: true < "1" === false'); -} - -//CHECK#2 -if ("1" < true !== false) { - $ERROR('#2: "1" < true === false'); -} - -//CHECK#3 -if (new Boolean(true) < "1" !== false) { - $ERROR('#3: new Boolean(true) < "1" === false'); -} - -//CHECK#4 -if ("1" < new Boolean(true) !== false) { - $ERROR('#4: "1" < new Boolean(true) === false'); -} - -//CHECK#5 -if (true < new String("1") !== false) { - $ERROR('#5: true < new String("1") === false'); -} - -//CHECK#6 -if (new String("1") < true !== false) { - $ERROR('#6: new String("1") < true === false'); -} - -//CHECK#7 -if (new Boolean(true) < new String("1") !== false) { - $ERROR('#7: new Boolean(true) < new String("1") === false'); -} - -//CHECK#8 -if (new String("1") < new Boolean(true) !== false) { - $ERROR('#8: new String("1") < new Boolean(true) === false'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A3.1_T2.6.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A3.1_T2.6.js deleted file mode 100644 index 8eb8c4d68..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A3.1_T2.6.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.1_A3.1_T2.6; - * @section: 11.8.1; - * @assertion: If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x < y returns ToNumber(x) < ToNumber(y); - * @description: Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between String (primitive or object) and Undefined; - */ - -//CHECK#1 -if ("1" < undefined !== false) { - $ERROR('#1: "1" < undefined === false'); -} - -//CHECK#2 -if (undefined < "1" !== false) { - $ERROR('#2: undefined < "1" === false'); -} - -//CHECK#3 -if (new String("1") < undefined !== false) { - $ERROR('#3: new String("1") < undefined === false'); -} - -//CHECK#4 -if (undefined < new String("1") !== false) { - $ERROR('#4: undefined < new String("1") === false'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A3.1_T2.7.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A3.1_T2.7.js deleted file mode 100644 index 6ecab8f71..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A3.1_T2.7.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.1_A3.1_T2.7; - * @section: 11.8.1; - * @assertion: If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x < y returns ToNumber(x) < ToNumber(y); - * @description: Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between String (primitive or object) and Null; - */ - -//CHECK#1 -if ("1" < null !== false) { - $ERROR('#1: "1" < null === false'); -} - -//CHECK#2 -if (null < "1" !== true) { - $ERROR('#2: null < "1" === true'); -} - -//CHECK#3 -if (new String("1") < null !== false) { - $ERROR('#3: new String("1") < null === false'); -} - -//CHECK#4 -if (null < new String("1") !== true) { - $ERROR('#4: null < new String("1") === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A3.1_T2.8.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A3.1_T2.8.js deleted file mode 100644 index 0a250d3c6..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A3.1_T2.8.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.1_A3.1_T2.8; - * @section: 11.8.1; - * @assertion: If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x < y returns ToNumber(x) < ToNumber(y); - * @description: Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between Boolean (primitive or object) and Undefined; - */ - -//CHECK#1 -if (true < undefined !== false) { - $ERROR('#1: true < undefined === false'); -} - -//CHECK#2 -if (undefined < true !== false) { - $ERROR('#2: undefined < true === false'); -} - -//CHECK#3 -if (new Boolean(true) < undefined !== false) { - $ERROR('#3: new Boolean(true) < undefined === false'); -} - -//CHECK#4 -if (undefined < new Boolean(true) !== false) { - $ERROR('#4: undefined < new Boolean(true) === false'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A3.1_T2.9.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A3.1_T2.9.js deleted file mode 100644 index e67f97428..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A3.1_T2.9.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.1_A3.1_T2.9; - * @section: 11.8.1; - * @assertion: If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x < y returns ToNumber(x) < ToNumber(y); - * @description: Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between Boolean (primitive or object) and Null; - */ - -//CHECK#1 -if (true < null !== false) { - $ERROR('#1: true < null === false'); -} - -//CHECK#2 -if (null < true !== true) { - $ERROR('#2: null < true === true'); -} - -//CHECK#3 -if (new Boolean(true) < null !== false) { - $ERROR('#3: new Boolean(true) < null === false'); -} - -//CHECK#4 -if (null < new Boolean(true) !== true) { - $ERROR('#4: null < new Boolean(true) === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A3.2_T1.1.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A3.2_T1.1.js deleted file mode 100644 index 8be0500e6..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A3.2_T1.1.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.1_A3.2_T1.1; - * @section: 11.8.1; - * @assertion: Operator x < y returns ToString(x) < ToString(y), if Type(Primitive(x)) is String and Type(Primitive(y)) is String; - * @description: Type(Primitive(x)) and Type(Primitive(y)) vary between primitive string and String object; -*/ - -//CHECK#1 -if ("1" < "1" !== false) { - $ERROR('#1: "1" < "1" === false'); -} - -//CHECK#2 -if (new String("1") < "1" !== false) { - $ERROR('#2: new String("1") < "1" === false'); -} - -//CHECK#3 -if ("1" < new String("1") !== false) { - $ERROR('#3: "1" < new String("1") === false'); -} - -//CHECK#4 -if (new String("1") < new String("1") !== false) { - $ERROR('#4: new String("1") < new String("1") === false'); -} - -//CHECK#5 -if ("x" < "1" !== false) { - $ERROR('#5: "x" < "1" === false'); -} - -//CHECK#6 -if ("1" < "x" !== true) { - $ERROR('#6: "1" < "x" === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A3.2_T1.2.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A3.2_T1.2.js deleted file mode 100644 index 16a52aa26..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A3.2_T1.2.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.1_A3.2_T1.2; - * @section: 11.8.1; - * @assertion: Operator x < y returns ToString(x) < ToString(y), if Type(Primitive(x)) is String and Type(Primitive(y)) is String; - * @description: Type(Primitive(x)) and Type(Primitive(y)) vary between Object object and Function object; - */ - -//CHECK#1 -if (({} < function(){return 1}) !== ({}.toString() < function(){return 1}.toString())) { - $ERROR('#1: ({} < function(){return 1}) === ({}.toString() < function(){return 1}.toString())'); -} - -//CHECK#2 -if ((function(){return 1} < {}) !== (function(){return 1}.toString() < {}.toString())) { - $ERROR('#2: (function(){return 1} < {}) === (function(){return 1}.toString() < {}.toString())'); -} - -//CHECK#3 -if ((function(){return 1} < function(){return 1}) !== (function(){return 1}.toString() < function(){return 1}.toString())) { - $ERROR('#3: (function(){return 1} < function(){return 1}) === (function(){return 1}.toString() < function(){return 1}.toString())'); -} - -//CHECK#4 -if (({} < {}) !== ({}.toString() < {}.toString())) { - $ERROR('#4: ({} < {}) === ({}.toString() < {}.toString())'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A4.1.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A4.1.js deleted file mode 100644 index b6a0847b0..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A4.1.js +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.1_A4.1; -* @section: 11.8.1, 11.8.5; -* @assertion: If x is NaN, return false (if result in 11.8.5 is undefined, return false); -* @description: y is number primitive; -*/ - -//CHECK#1 -if ((Number.NaN < 0) !== false) { - $ERROR('#1: (NaN < 0) === false'); -} - -//CHECK#2 -if ((Number.NaN < 1.1) !== false) { - $ERROR('#2: (NaN < 1.1) === false'); -} - -//CHECK#3 -if ((Number.NaN < -1.1) !== false) { - $ERROR('#3: (NaN < -1.1) === false'); -} - -//CHECK#4 -if ((Number.NaN < Number.NaN) !== false) { - $ERROR('#4: (NaN < NaN) === false'); -} - -//CHECK#5 -if ((Number.NaN < Number.POSITIVE_INFINITY) !== false) { - $ERROR('#5: (NaN < +Infinity) === false'); -} - -//CHECK#6 -if ((Number.NaN < Number.NEGATIVE_INFINITY) !== false) { - $ERROR('#6: (NaN < -Infinity) === false'); -} - -//CHECK#7 -if ((Number.NaN < Number.MAX_VALUE) !== false) { - $ERROR('#7: (NaN < Number.MAX_VALUE) === false'); -} - -//CHECK#8 -if ((Number.NaN < Number.MIN_VALUE) !== false) { - $ERROR('#8: (NaN < Number.MIN_VALUE) === false'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A4.10.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A4.10.js deleted file mode 100644 index 5949774ec..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A4.10.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.1_A4.10; -* @section: 11.8.1, 11.8.5; -* @assertion: If y is a prefix of x, return false; -* @description: x and y are string primitives; -*/ - -//CHECK#1 -if (("x" < "x") !== false) { - $ERROR('#1: ("x" < "x") === false'); -} - -//CHECK#2 -if (("x" < "") !== false) { - $ERROR('#2: ("x" < "") === false'); -} - -//CHECK#3 -if (("abcd" < "ab") !== false) { - $ERROR('#3: ("abcd" < ab") === false'); -} - -//CHECK#4 -if (("abc\u0064" < "abcd") !== false) { - $ERROR('#4: ("abc\\u0064" < abcd") === false'); -} - -//CHECK#5 -if (("x" + "y" < "x") !== false) { - $ERROR('#5: ("x" + "y" < "x") === false'); -} - -//CHECK#6 -var x = "x"; -if ((x + "y" < x) !== false) { - $ERROR('#6: var x = "x"; (x + "y" < x) === false'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A4.11.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A4.11.js deleted file mode 100644 index d0942f293..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A4.11.js +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.1_A4.11; -* @section: 11.8.1, 11.8.5; -* @assertion: If x is a prefix of y and x !== y, return true; -* @description: x and y are string primitives; -*/ - -//CHECK#1 -if (("x" < "x ") !== true) { - $ERROR('#1: ("x" < "x ") === true'); -} - -//CHECK#2 -if (("" < "x") !== true) { - $ERROR('#2: ("" < "x") === true'); -} - -//CHECK#3 -if (("ab" < "abcd") !== true) { - $ERROR('#3: ("ab" < abcd") === true'); -} - -//CHECK#4 -if (("abcd" < "abc\u0064") !== false) { - $ERROR('#4: ("abcd" < abc\\u0064") === false'); -} - -//CHECK#5 -if (("x" < "x" + "y") !== true) { - $ERROR('#5: ("x" < "x" + "y") === true'); -} - -//CHECK#6 -var x = "x"; -if ((x < x + "y") !== true) { - $ERROR('#6: var x = "x"; (x < x + "y") === true'); -} - -//CHECK#7 -if (("a\u0000" < "a\u0000a") !== true) { - $ERROR('#7: ("a\\u0000" < "a\\u0000a") === true'); -} - -//CHECK#8 -if (("x" < " x") !== false) { - $ERROR('#8: ("x" < " x") === false'); -} - - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A4.12_T1.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A4.12_T1.js deleted file mode 100644 index 7a751c628..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A4.12_T1.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.1_A4.12_T1; -* @section: 11.8.1, 11.8.5; -* @assertion: If neither x, nor y is a prefix of each other, returned result of strings comparison applies a simple lexicographic ordering to the sequences of code point value values; -* @description: x and y are string primitives; -*/ - -//CHECK#1 -if (("xx" < "xy") !== true) { - $ERROR('#1: ("xx" < "xy") === true'); -} - -//CHECK#2 -if (("xy" < "xx") !== false) { - $ERROR('#2: ("xy" < "xx") === false'); -} - -//CHECK#3 -if (("x" < "y") !== true) { - $ERROR('#3: ("x" < y") === true'); -} - -//CHECK#4 -if (("aab" < "aba") !== true) { - $ERROR('#4: ("aab" < aba") === true'); -} - -//CHECK#5 -if (("\u0061\u0061\u0061\u0062" < "\u0061\u0061\u0061\u0061") !== false) { - $ERROR('#5: ("\\u0061\\u0061\\u0061\\u0062" < \\u0061\\u0061\\u0061\\u0061") === false'); -} - -//CHECK#6 -if (("a\u0000a" < "a\u0000b") !== true) { - $ERROR('#6: ("a\\u0000a" < "a\\u0000b") === true'); -} - -//CHECK#7 -if (("aB" < "aa") !== true) { - $ERROR('#7: ("aB" < aa") === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A4.12_T2.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A4.12_T2.js deleted file mode 100644 index e473f00e6..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A4.12_T2.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.1_A4.12_T2; -* @section: 11.8.1, 11.8.5; -* @assertion: If neither x, nor y is a prefix of each other, returned result of strings comparison applies a simple lexicographic ordering to the sequences of code point value values; -* @description: x and y are string primitives; -*/ - -//CHECK#1 -if (("0" < "x") !== true) { - $ERROR('#1: ("0" < "x") !== true'); -} - -//CHECK#2 -if (("-" < "0") !== true) { - $ERROR('#2: ("-" < "0") !== true'); -} - -//CHECK#3 -if (("." < "0") !== true) { - $ERROR('#3: ("." < "0") !== true'); -} - -//CHECK#4 -if (("+" < "-") !== true) { - $ERROR('#4: ("+" < "-") !== true'); -} - -//CHECK#5 -if (("-0" < "-1") !== true) { - $ERROR('#5: ("-0" < "-1") !== true'); -} - -//CHECK#6 -if (("+1" < "-1") !== true) { - $ERROR('#6: ("+1" < "-1") !== true'); -} - -//CHECK#7 -if (("1" < "1e-10") !== true) { -$ERROR('#7: ("1" < "1e-10") !== true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A4.2.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A4.2.js deleted file mode 100644 index b9d99d474..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A4.2.js +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.1_A4.2; -* @section: 11.8.1, 11.8.5; -* @assertion: If y is NaN, return false (if result in 11.8.5 is undefined, return false); -* @description: x is number primitive; -*/ - -//CHECK#1 -if ((0 < Number.NaN) !== false) { - $ERROR('#1: (0 < NaN) === false'); -} - -//CHECK#2 -if ((1.1 < Number.NaN) !== false) { - $ERROR('#2: (1.1 < NaN) === false'); -} - -//CHECK#3 -if ((-1.1 < Number.NaN) !== false) { - $ERROR('#3: (-1.1 < NaN) === false'); -} - -//CHECK#4 -if ((Number.NaN < Number.NaN) !== false) { - $ERROR('#4: (NaN < NaN) === false'); -} - -//CHECK#5 -if ((Number.POSITIVE_INFINITY < Number.NaN) !== false) { - $ERROR('#5: (+Infinity < NaN) === false'); -} - -//CHECK#6 -if ((Number.NEGATIVE_INFINITY < Number.NaN) !== false) { - $ERROR('#6: (-Infinity < NaN) === false'); -} - -//CHECK#7 -if ((Number.MAX_VALUE < Number.NaN) !== false) { - $ERROR('#7: (Number.MAX_VALUE < NaN) === false'); -} - -//CHECK#8 -if ((Number.MIN_VALUE < Number.NaN) !== false) { - $ERROR('#8: (Number.MIN_VALUE < NaN) === false'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A4.3.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A4.3.js deleted file mode 100644 index d7fd23ccd..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A4.3.js +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.1_A4.3; -* @section: 11.8.1, 11.8.5; -* @assertion: If x and y are the same number value, return false; -* @description: x and y are number primitives; -*/ - -//CHECK#1 -if ((1 < 1) !== false) { - $ERROR('#1: (1 < 1) === false'); -} - -//CHECK#2 -if ((1.1 < 1.1) !== false) { - $ERROR('#2: (1.1 < 1.1) === false'); -} - -//CHECK#3 -if ((-1.1 < -1.1) !== false) { - $ERROR('#3: (-1.1 < -1.1) === false'); -} - -//CHECK#4 -if ((Number.NEGATIVE_INFINITY < Number.NEGATIVE_INFINITY) !== false) { - $ERROR('#4: (-Infinity < -Infinity) === false'); -} - -//CHECK#5 -if ((Number.POSITIVE_INFINITY < Number.POSITIVE_INFINITY) !== false) { - $ERROR('#5: (+Infinity < +Infinity) === false'); -} - -//CHECK#6 -if ((Number.MAX_VALUE < Number.MAX_VALUE) !== false) { - $ERROR('#6: (Number.MAX_VALUE < Number.MAX_VALUE) === false'); -} - -//CHECK#7 -if ((Number.MIN_VALUE < Number.MIN_VALUE) !== false) { - $ERROR('#7: (Number.MIN_VALUE < Number.MIN_VALUE) === false'); -} - - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A4.4.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A4.4.js deleted file mode 100644 index fc8048fce..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A4.4.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.1_A4.4; -* @section: 11.8.1, 11.8.5; -* @assertion: If x and y are +0 and -0, return false; -* @description: Checking all combinations; -*/ - -//CHECK#1 -if ((0 < 0) !== false) { - $ERROR('#1: (0 < 0) === false'); -} - -//CHECK#2 -if ((-0 < -0) !== false) { - $ERROR('#2: (-0 < -0) === false'); -} - -//CHECK#3 -if ((+0 < -0) !== false) { - $ERROR('#3: (+0 < -0) === false'); -} - -//CHECK#4 -if ((-0 < +0) !== false) { - $ERROR('#4: (-0 < +0) === false'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A4.5.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A4.5.js deleted file mode 100644 index 07b13e6f4..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A4.5.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.1_A4.5; -* @section: 11.8.1, 11.8.5; -* @assertion: If x is +Infinity, return false; -* @description: y is number primitive; -*/ - -//CHECK#1 -if ((Number.POSITIVE_INFINITY < 0) !== false) { - $ERROR('#1: (+Infinity < 0) === false'); -} - -//CHECK#2 -if ((Number.POSITIVE_INFINITY < 1.1) !== false) { - $ERROR('#2: (+Infinity < 1.1) === false'); -} - -//CHECK#3 -if ((Number.POSITIVE_INFINITY < -1.1) !== false) { - $ERROR('#3: (+Infinity < -1.1) === false'); -} - -//CHECK#4 -if ((Number.POSITIVE_INFINITY < Number.NEGATIVE_INFINITY) !== false) { - $ERROR('#4: (+Infinity < -Infinity) === false'); -} - -//CHECK#5 -if ((Number.POSITIVE_INFINITY < Number.MAX_VALUE) !== false) { - $ERROR('#5: (+Infinity < Number.MAX_VALUE) === false'); -} - -//CHECK#6 -if ((Number.POSITIVE_INFINITY < Number.MIN_VALUE) !== false) { - $ERROR('#6: (+Infinity < Number.MIN_VALUE) === false'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A4.6.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A4.6.js deleted file mode 100644 index 13073be10..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A4.6.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.1_A4.6; -* @section: 11.8.1, 11.8.5; -* @assertion: If y is +Infinity and x !== y, return true; -* @description: x is number primitive; -*/ - -//CHECK#1 -if ((0 < Number.POSITIVE_INFINITY) !== true) { - $ERROR('#1: (0 < +Infinity) === true'); -} - -//CHECK#2 -if ((1.1 < Number.POSITIVE_INFINITY) !== true) { - $ERROR('#2: (1.1 < +Infinity) === true'); -} - -//CHECK#3 -if ((-1.1 < Number.POSITIVE_INFINITY) !== true) { - $ERROR('#3: (-1.1 < +Infinity) === true'); -} - -//CHECK#4 -if ((Number.NEGATIVE_INFINITY < Number.POSITIVE_INFINITY) !== true) { - $ERROR('#4: (-Infinity < +Infinity) === true'); -} - -//CHECK#5 -if ((Number.MAX_VALUE < Number.POSITIVE_INFINITY) !== true) { - $ERROR('#5: (Number.MAX_VALUE < +Infinity) === true'); -} - -//CHECK#6 -if ((Number.MIN_VALUE < Number.POSITIVE_INFINITY) !== true) { - $ERROR('#6: (Number.MIN_VALUE < +Infinity) === true'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A4.7.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A4.7.js deleted file mode 100644 index f1a8b6be7..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A4.7.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.1_A4.7; -* @section: 11.8.1, 11.8.5; -* @assertion: If x is -Infinity and x !== y, return true; -* @description: y is number primitive; -*/ - -//CHECK#1 -if ((Number.NEGATIVE_INFINITY < 0) !== true) { - $ERROR('#1: (-Infinity < 0) === true'); -} - -//CHECK#2 -if ((Number.NEGATIVE_INFINITY < 1.1) !== true) { - $ERROR('#2: (-Infinity < 1.1) === true'); -} - -//CHECK#3 -if ((Number.NEGATIVE_INFINITY < -1.1) !== true) { - $ERROR('#3: (-Infinity < -1.1) === true'); -} - -//CHECK#4 -if ((Number.NEGATIVE_INFINITY < Number.POSITIVE_INFINITY) !== true) { - $ERROR('#4: (-Infinity < +Infinity) === true'); -} - -//CHECK#5 -if ((Number.NEGATIVE_INFINITY < Number.MAX_VALUE) !== true) { - $ERROR('#5: (-Infinity < Number.MAX_VALUE) === true'); -} - -//CHECK#6 -if ((Number.NEGATIVE_INFINITY < Number.MIN_VALUE) !== true) { - $ERROR('#6: (-Infinity < Number.MIN_VALUE) === true'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A4.8.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A4.8.js deleted file mode 100644 index dc4e00379..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A4.8.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.1_A4.8; -* @section: 11.8.1, 11.8.5; -* @assertion: If y is -Infinity, return false; -* @description: x is number primitive; -*/ - -//CHECK#1 -if ((0 < Number.NEGATIVE_INFINITY) !== false) { - $ERROR('#1: (0 < -Infinity) === false'); -} - -//CHECK#2 -if ((1.1 < Number.NEGATIVE_INFINITY) !== false) { - $ERROR('#2: (1.1 < -Infinity) === false'); -} - -//CHECK#3 -if ((-1.1 < Number.NEGATIVE_INFINITY) !== false) { - $ERROR('#3: (-1.1 < -Infinity) === false'); -} - -//CHECK#4 -if ((Number.POSITIVE_INFINITY < Number.NEGATIVE_INFINITY) !== false) { - $ERROR('#4: (+Infinity < -Infinity) === false'); -} - -//CHECK#5 -if ((Number.MAX_VALUE < Number.NEGATIVE_INFINITY) !== false) { - $ERROR('#5: (Number.MAX_VALUE < -Infinity) === false'); -} - -//CHECK#6 -if ((Number.MIN_VALUE < Number.NEGATIVE_INFINITY) !== false) { - $ERROR('#6: (Number.MIN_VALUE < -Infinity) === false'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A4.9.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A4.9.js deleted file mode 100644 index 7aa63bfff..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.1_The_Less_than_Operator/S11.8.1_A4.9.js +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.1_A4.9; -* @section: 11.8.1, 11.8.5; -* @assertion: If x is less than y and these values are both finite non-zero, return true; otherwise, return false; -* @description: x and y are number primitives; -*/ - -//CHECK#1 -if ((1.1 < 1) !== false) { - $ERROR('#1: (1.1 < 1) === false'); -} - -//CHECK#2 -if ((1 < 1.1) !== true) { - $ERROR('#2: (1 < 1.1) === true'); -} - -//CHECK#3 -if ((-1.1 < -1) !== true) { - $ERROR('#3: (-1.1 < -1) === true'); -} - -//CHECK#4 -if ((-1 < -1.1) !== false) { - $ERROR('#4: (-1 < -1.1) === false'); -} - -//CHECK#5 -if ((0 < 0.1) !== true) { - $ERROR('#5: (0 < 0.1) === true'); -} - -//CHECK#6 -if ((-0.1 < 0) !== true) { - $ERROR('#6: (-0.1 < 0) === true'); -} - -//CHECK#7 -if ((Number.MAX_VALUE/2 < Number.MAX_VALUE) !== true) { - $ERROR('#7: (Number.MAX_VALUE/2 < Number.MAX_VALUE) === true'); -} - -//CHECK#8 -if ((Number.MIN_VALUE < Number.MIN_VALUE*2) !== true) { - $ERROR('#8: (Number.MIN_VALUE < Number.MIN_VALUE*2) === true'); -} - - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A1.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A1.js deleted file mode 100644 index b0ea8fe91..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A1.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.2_A1; -* @section: 11.8.2, 7.2, 7.3; -* @assertion: White Space and Line Terminator between RelationalExpression and ">" or ">" and ShiftExpression are allowed; -* @description: Checking by using eval; -*/ - -//CHECK#1 -if (eval("0\u0009>\u00091") !== false) { - $ERROR('#1: 0\\u0009>\\u00091) === false'); -} - -//CHECK#2 -if (eval("0\u000B>\u000B1") !== false) { - $ERROR('#2: 0\\u000B>\\u000B1) === false'); -} - -//CHECK#3 -if (eval("0\u000C>\u000C1") !== false) { - $ERROR('#3: (0\\u000C>\\u000C1) === false'); -} - -//CHECK#4 -if (eval("0\u0020>\u00201") !== false) { - $ERROR('#4: (0\\u0020>\\u00201) === false'); -} - -//CHECK#5 -if (eval("0\u00A0>\u00A01") !== false) { - $ERROR('#5: (0\\u00A0>\\u00A01) === false'); -} - -//CHECK#6 -if (eval("0\u000A>\u000A1") !== false) { - $ERROR('#6: (0\\u000A>\\u000A1) === false'); -} - -//CHECK#7 -if (eval("0\u000D>\u000D1") !== false) { - $ERROR('#7: (0\\u000D>\\u000D1) === false'); -} - -//CHECK#8 -if (eval("0\u2028>\u20281") !== false) { - $ERROR('#8: (0\\u2028>\\u20281) === false'); -} - -//CHECK#9 -if (eval("0\u2029>\u20291") !== false) { - $ERROR('#9: (0\\u2029>\\u20291) === false'); -} - -//CHECK#10 -if (eval("1\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029>=\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20291") !== true) { - $ERROR('#10: (1\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029>=\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20291) === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A2.1_T1.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A2.1_T1.js deleted file mode 100644 index 1e6e0ba8c..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A2.1_T1.js +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.2_A2.1_T1; -* @section: 11.8.2, 11.8.5; -* @assertion: Operator x > y uses GetValue; -* @description: Either Type is not Reference or GetBase is not null; -*/ - -//CHECK#1 -if (2 > 1 !== true) { - $ERROR('#1: 2 > 1 === true'); -} - -//CHECK#2 -var x = 2; -if (x > 1 !== true) { - $ERROR('#2: var x = 2; x > 1 === true'); -} - -//CHECK#3 -var y = 1; -if (2 > y !== true) { - $ERROR('#3: var y = 1; 2 > y === true'); -} - -//CHECK#4 -var x = 2; -var y = 1; -if (x > y !== true) { - $ERROR('#4: var x = 2; var y = 1; x > y === true'); -} - -//CHECK#5 -var objectx = new Object(); -var objecty = new Object(); -objectx.prop = 2; -objecty.prop = 1; -if (objectx.prop > objecty.prop !== true) { - $ERROR('#5: var objectx = new Object(); var objecty = new Object(); objectx.prop = 2; objecty.prop = 1; objectx.prop > objecty.prop === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A2.1_T2.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A2.1_T2.js deleted file mode 100644 index 173eab055..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A2.1_T2.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.2_A2.1_T2; - * @section: 11.8.2, 11.8.5; - * @assertion: Operator x > y uses GetValue; - * @description: If GetBase(x) is null, throw ReferenceError; -*/ - -//CHECK#1 -try { - x > 1; - $ERROR('#1.1: x > 1 throw ReferenceError. Actual: ' + (x > 1)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: x > 1 throw ReferenceError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A2.1_T3.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A2.1_T3.js deleted file mode 100644 index b80115a6c..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A2.1_T3.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.2_A2.1_T3; - * @section: 11.8.2, 11.8.5; - * @assertion: Operator x > y uses GetValue; - * @description: If GetBase(y) is null, throw ReferenceError; -*/ - -//CHECK#1 -try { - 1 > y; - $ERROR('#1.1: 1 > y throw ReferenceError. Actual: ' + (1 > y)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: 1 > y throw ReferenceError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A2.2_T1.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A2.2_T1.js deleted file mode 100644 index ebf1b0eba..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A2.2_T1.js +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.2_A2.2_T1; - * @section: 11.8.2, 8.6.2.6; - * @assertion: Operator x > y uses [[Default Value]]; - * @description: If Type(value) is Object, evaluate ToPrimitive(value, Number); - */ - -//CHECK#1 -if ({valueOf: function() {return 2}} > 1 !== true) { - $ERROR('#1: {valueOf: function() {return 1}} > 1 === true. Actual: ' + ({valueOf: function() {return 1}} > 1)); -} - -//CHECK#2 -if ({valueOf: function() {return 2}, toString: function() {return 0}} > 1 !== true) { - $ERROR('#2: {valueOf: function() {return 1}, toString: function() {return 2}} > 1 === true. Actual: ' + ({valueOf: function() {return 1}, toString: function() {return 2}} > 1)); -} - -//CHECK#3 -if ({valueOf: function() {return 2}, toString: function() {return {}}} > 1 !== true) { - $ERROR('#3: {valueOf: function() {return 1}, toString: function() {return {}}} > 1 === true. Actual: ' + ({valueOf: function() {return 1}, toString: function() {return {}}} > 1)); -} - -//CHECK#4 -try { - if ({valueOf: function() {return 2}, toString: function() {throw "error"}} > 1 !== true) { - $ERROR('#4.1: {valueOf: function() {return 1}, toString: function() {throw "error"}} > 1 === true. Actual: ' + ({valueOf: function() {return 1}, toString: function() {throw "error"}} > 1)); - } -} -catch (e) { - if (e === "error") { - $ERROR('#4.2: {valueOf: function() {return 2}, toString: function() {throw "error"}} > 1 not throw "error"'); - } else { - $ERROR('#4.3: {valueOf: function() {return 2}, toString: function() {throw "error"}} > 1 not throw Error. Actual: ' + (e)); - } -} - -//CHECK#5 -if (1 > {toString: function() {return 0}} !== true) { - $ERROR('#5: 1 > {toString: function() {return 0}} === true. Actual: ' + (1 > {toString: function() {return 0}})); -} - -//CHECK#6 -if (1 > {valueOf: function() {return {}}, toString: function() {return 0}} !== true) { - $ERROR('#6: 1 > {valueOf: function() {return {}}, toString: function() {return 0}} === true. Actual: ' + (1 > {valueOf: function() {return {}}, toString: function() {return 0}})); -} - -//CHECK#7 -try { - 1 > {valueOf: function() {throw "error"}, toString: function() {return 0}}; - $ERROR('#7.1: 1 > {valueOf: function() {throw "error"}, toString: function() {return 0}} throw "error". Actual: ' + (1 > {valueOf: function() {throw "error"}, toString: function() {return 0}})); -} -catch (e) { - if (e !== "error") { - $ERROR('#7.2: 1 > {valueOf: function() {throw "error"}, toString: function() {return 0}} throw "error". Actual: ' + (e)); - } -} - -//CHECK#8 -try { - 1 > {valueOf: function() {return {}}, toString: function() {return {}}}; - $ERROR('#8.1: 1 > {valueOf: function() {return {}}, toString: function() {return {}}} throw TypeError. Actual: ' + (1 > {valueOf: function() {return {}}, toString: function() {return {}}})); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#8.2: 1 > {valueOf: function() {return {}}, toString: function() {return {}}} throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A2.3_T1.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A2.3_T1.js deleted file mode 100644 index a3d91e2cf..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A2.3_T1.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.2_A2.3_T1; - * @section: 11.8.2; - * @assertion: ToNumber(second expression) is called first, and then ToNumber(first expression); - * @description: Checking with "throw"; -*/ - -//CHECK#1 -var x = { valueOf: function () { throw "x"; } }; -var y = { valueOf: function () { throw "y"; } }; -try { - x > y; - $ERROR('#1.1: var x = { valueOf: function () { throw "x"; } }; var y = { valueOf: function () { throw "y"; } }; x > y throw "y". Actual: ' + (x > y)); -} catch (e) { - if (e === "x") { - $ERROR('#1.2: ToNumber(second expression) is called first, and then ToNumber(first expression)'); - } else { - if (e !== "y") { - $ERROR('#1.3: var x = { valueOf: function () { throw "x"; } }; var y = { valueOf: function () { throw "y"; } }; x > y throw "y". Actual: ' + (e)); - } - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A2.4_T1.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A2.4_T1.js deleted file mode 100644 index 4a8414f98..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A2.4_T1.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.2_A2.4_T1; - * @section: 11.8.2; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with "="; -*/ - -//CHECK#1 -var x = 0; -if ((x = 1) > x !== false) { - $ERROR('#1: var x = 0; (x = 1) > x === false'); -} - -//CHECK#2 -var x = 1; -if (x > (x = 0) !== true) { - $ERROR('#2: var x = 1; x > (x = 0) === true'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A2.4_T2.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A2.4_T2.js deleted file mode 100644 index 062a0690d..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A2.4_T2.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.2_A2.4_T2; - * @section: 11.8.2; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with "throw"; -*/ - -//CHECK#1 -var x = function () { throw "x"; }; -var y = function () { throw "y"; }; -try { - x() > y(); - $ERROR('#1.1: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() > y() throw "x". Actual: ' + (x() > y())); -} catch (e) { - if (e === "y") { - $ERROR('#1.2: First expression is evaluated first, and then second expression'); - } else { - if (e !== "x") { - $ERROR('#1.3: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() > y() throw "x". Actual: ' + (e)); - } - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A2.4_T3.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A2.4_T3.js deleted file mode 100644 index 0c6df429e..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A2.4_T3.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.2_A2.4_T3; - * @section: 11.8.2; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with undeclarated variables; -*/ - -//CHECK#1 -try { - x > (x = 1); - $ERROR('#1.1: x > (x = 1) throw ReferenceError. Actual: ' + (x > (x = 1))); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: x > (x = 1) throw ReferenceError. Actual: ' + (e)); - } -} - -//CHECK#2 -if ((y = 1) > y !== false) { - $ERROR('#2: (y = 1) > y === false'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A3.1_T1.1.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A3.1_T1.1.js deleted file mode 100644 index d61e4c0bd..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A3.1_T1.1.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.2_A3.1_T1.1; - * @section: 11.8.2; - * @assertion: If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x > y returns ToNumber(x) > ToNumber(y); - * @description: Type(Primitive(x)) and Type(Primitive(y)) vary between primitive boolean and Boolean object; - */ - -//CHECK#1 -if (true > true !== false) { - $ERROR('#1: true > true === false'); -} - -//CHECK#2 -if (new Boolean(true) > true !== false) { - $ERROR('#2: new Boolean(true) > true === false'); -} - -//CHECK#3 -if (true > new Boolean(true) !== false) { - $ERROR('#3: true > new Boolean(true) === false'); -} - -//CHECK#4 -if (new Boolean(true) > new Boolean(true) !== false) { - $ERROR('#4: new Boolean(true) > new Boolean(true) === false'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A3.1_T1.2.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A3.1_T1.2.js deleted file mode 100644 index bd9490f2d..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A3.1_T1.2.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.2_A3.1_T1.2; - * @section: 11.8.2; - * @assertion: If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x > y returns ToNumber(x) > ToNumber(y); - * @description: Type(Primitive(x)) and Type(Primitive(y)) vary between primitive number and Number object; -*/ - -//CHECK#1 -if (1 > 1 !== false) { - $ERROR('#1: 1 > 1 === false'); -} - -//CHECK#2 -if (new Number(1) > 1 !== false) { - $ERROR('#2: new Number(1) > 1 === false'); -} - -//CHECK#3 -if (1 > new Number(1) !== false) { - $ERROR('#3: 1 > new Number(1) === false'); -} - -//CHECK#4 -if (new Number(1) > new Number(1) !== false) { - $ERROR('#4: new Number(1) > new Number(1) === false'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A3.1_T1.3.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A3.1_T1.3.js deleted file mode 100644 index acbdaa1bd..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A3.1_T1.3.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.2_A3.1_T1.3; - * @section: 11.8.2; - * @assertion: If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x > y returns ToNumber(x) > ToNumber(y); - * @description: Type(Primitive(x)) and Type(Primitive(y)) vary between Null and Undefined; - */ - -//CHECK#1 -if (null > undefined !== false) { - $ERROR('#1: null > undefined === false'); -} - -//CHECK#2 -if (undefined > null !== false) { - $ERROR('#2: undefined > null === false'); -} - -//CHECK#3 -if (undefined > undefined !== false) { - $ERROR('#3: undefined > undefined === false'); -} - -//CHECK#4 -if (null > null !== false) { - $ERROR('#4: null > null === false'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A3.1_T2.1.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A3.1_T2.1.js deleted file mode 100644 index 27fd050e2..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A3.1_T2.1.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.2_A3.1_T2.1; - * @section: 11.8.2; - * @assertion: If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x > y returns ToNumber(x) > ToNumber(y); - * @description: Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between Number (primitive or object) and Boolean (primitive and object); - */ - -//CHECK#1 -if (true > 1 !== false) { - $ERROR('#1: true > 1 === false'); -} - -//CHECK#2 -if (1 > true !== false) { - $ERROR('#2: 1 > true === false'); -} - -//CHECK#3 -if (new Boolean(true) > 1 !== false) { - $ERROR('#3: new Boolean(true) > 1 === false'); -} - -//CHECK#4 -if (1 > new Boolean(true) !== false) { - $ERROR('#4: 1 > new Boolean(true) === false'); -} - -//CHECK#5 -if (true > new Number(1) !== false) { - $ERROR('#5: true > new Number(1) === false'); -} - -//CHECK#6 -if (new Number(1) > true !== false) { - $ERROR('#6: new Number(1) > true === false'); -} - -//CHECK#7 -if (new Boolean(true) > new Number(1) !== false) { - $ERROR('#7: new Boolean(true) > new Number(1) === false'); -} - -//CHECK#8 -if (new Number(1) > new Boolean(true) !== false) { - $ERROR('#8: new Number(1) > new Boolean(true) === false'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A3.1_T2.2.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A3.1_T2.2.js deleted file mode 100644 index 3d5b95451..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A3.1_T2.2.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.2_A3.1_T2.2; - * @section: 11.8.2; - * @assertion: If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x > y returns ToNumber(x) > ToNumber(y); - * @description: Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between Number (primitive or object) and String (primitive and object); -*/ - -//CHECK#1 -if ("1" > 1 !== false) { - $ERROR('#1: "1" > 1 === false'); -} - -//CHECK#2 -if (1 > "1" !== false) { - $ERROR('#2: 1 > "1" === false'); -} - -//CHECK#3 -if (new String("1") > 1 !== false) { - $ERROR('#3: new String("1") > 1 === false'); -} - -//CHECK#4 -if (1 > new String("1") !== false) { - $ERROR('#4: 1 > new String("1") === false'); -} - -//CHECK#5 -if ("1" > new Number(1) !== false) { - $ERROR('#5: "1" > new Number(1) === false'); -} - -//CHECK#6 -if (new Number(1) > "1" !== false) { - $ERROR('#6: new Number(1) > "1" === false'); -} - -//CHECK#7 -if (new String("1") > new Number(1) !== false) { - $ERROR('#7: new String("1") > new Number(1) === false'); -} - -//CHECK#8 -if (new Number(1) > new String("1") !== false) { - $ERROR('#8: new Number(1) > new String("1") === false'); -} - -//CHECK#9 -if ("x" > 1 !== false) { - $ERROR('#9: "x" > 1 === false'); -} - -//CHECK#10 -if (1 > "x" !== false) { - $ERROR('#10: 1 > "x" === false'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A3.1_T2.3.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A3.1_T2.3.js deleted file mode 100644 index b02dda0aa..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A3.1_T2.3.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.2_A3.1_T2.3; - * @section: 11.8.2; - * @assertion: If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x > y returns ToNumber(x) > ToNumber(y); - * @description: Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between Number (primitive or object) and Null; - */ - -//CHECK#1 -if (1 > null !== true) { - $ERROR('#1: 1 > null === true'); -} - -//CHECK#2 -if (null > 1 !== false) { - $ERROR('#2: null > 1 === false'); -} - -//CHECK#3 -if (new Number(1) > null !== true) { - $ERROR('#3: new Number(1) > null === true'); -} - -//CHECK#4 -if (null > new Number(1) !== false) { - $ERROR('#4: null > new Number(1) === false'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A3.1_T2.4.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A3.1_T2.4.js deleted file mode 100644 index 584be1496..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A3.1_T2.4.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.2_A3.1_T2.4; - * @section: 11.8.2; - * @assertion: If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x > y returns ToNumber(x) > ToNumber(y); - * @description: Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between Number (primitive or object) and Undefined; - */ - -//CHECK#1 -if (1 > undefined !== false) { - $ERROR('#1: 1 > undefined === false'); -} - -//CHECK#2 -if (undefined > 1 !== false) { - $ERROR('#2: undefined > 1 === false'); -} - -//CHECK#3 -if (new Number(1) > undefined !== false) { - $ERROR('#3: new Number(1) > undefined === false'); -} - -//CHECK#4 -if (undefined > new Number(1) !== false) { - $ERROR('#4: undefined > new Number(1) === false'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A3.1_T2.5.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A3.1_T2.5.js deleted file mode 100644 index ea806dc2f..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A3.1_T2.5.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.2_A3.1_T2.5; - * @section: 11.8.2; - * @assertion: If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x > y returns ToNumber(x) > ToNumber(y); - * @description: Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between String (primitive or object) and Boolean (primitive and object); -*/ - -//CHECK#1 -if (true > "1" !== false) { - $ERROR('#1: true > "1" === false'); -} - -//CHECK#2 -if ("1" > true !== false) { - $ERROR('#2: "1" > true === false'); -} - -//CHECK#3 -if (new Boolean(true) > "1" !== false) { - $ERROR('#3: new Boolean(true) > "1" === false'); -} - -//CHECK#4 -if ("1" > new Boolean(true) !== false) { - $ERROR('#4: "1" > new Boolean(true) === false'); -} - -//CHECK#5 -if (true > new String("1") !== false) { - $ERROR('#5: true > new String("1") === false'); -} - -//CHECK#6 -if (new String("1") > true !== false) { - $ERROR('#6: new String("1") > true === false'); -} - -//CHECK#7 -if (new Boolean(true) > new String("1") !== false) { - $ERROR('#7: new Boolean(true) > new String("1") === false'); -} - -//CHECK#8 -if (new String("1") > new Boolean(true) !== false) { - $ERROR('#8: new String("1") > new Boolean(true) === false'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A3.1_T2.6.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A3.1_T2.6.js deleted file mode 100644 index c00a727a5..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A3.1_T2.6.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.2_A3.1_T2.6; - * @section: 11.8.2; - * @assertion: If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x > y returns ToNumber(x) > ToNumber(y); - * @description: Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between String (primitive or object) and Undefined; - */ - -//CHECK#1 -if ("1" > undefined !== false) { - $ERROR('#1: "1" > undefined === false'); -} - -//CHECK#2 -if (undefined > "1" !== false) { - $ERROR('#2: undefined > "1" === false'); -} - -//CHECK#3 -if (new String("1") > undefined !== false) { - $ERROR('#3: new String("1") > undefined === false'); -} - -//CHECK#4 -if (undefined > new String("1") !== false) { - $ERROR('#4: undefined > new String("1") === false'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A3.1_T2.7.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A3.1_T2.7.js deleted file mode 100644 index cc6d5b374..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A3.1_T2.7.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.2_A3.1_T2.7; - * @section: 11.8.2; - * @assertion: If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x > y returns ToNumber(x) > ToNumber(y); - * @description: Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between String (primitive or object) and Null; - */ - -//CHECK#1 -if ("1" > null !== true) { - $ERROR('#1: "1" > null === true'); -} - -//CHECK#2 -if (null > "1" !== false) { - $ERROR('#2: null > "1" === false'); -} - -//CHECK#3 -if (new String("1") > null !== true) { - $ERROR('#3: new String("1") > null === true'); -} - -//CHECK#4 -if (null > new String("1") !== false) { - $ERROR('#4: null > new String("1") === false'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A3.1_T2.8.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A3.1_T2.8.js deleted file mode 100644 index 090c77504..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A3.1_T2.8.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.2_A3.1_T2.8; - * @section: 11.8.2; - * @assertion: If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x > y returns ToNumber(x) > ToNumber(y); - * @description: Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between Boolean (primitive or object) and Undefined; - */ - -//CHECK#1 -if (true > undefined !== false) { - $ERROR('#1: true > undefined === false'); -} - -//CHECK#2 -if (undefined > true !== false) { - $ERROR('#2: undefined > true === false'); -} - -//CHECK#3 -if (new Boolean(true) > undefined !== false) { - $ERROR('#3: new Boolean(true) > undefined === false'); -} - -//CHECK#4 -if (undefined > new Boolean(true) !== false) { - $ERROR('#4: undefined > new Boolean(true) === false'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A3.1_T2.9.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A3.1_T2.9.js deleted file mode 100644 index abe87c639..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A3.1_T2.9.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.2_A3.1_T2.9; - * @section: 11.8.2; - * @assertion: If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x > y returns ToNumber(x) > ToNumber(y); - * @description: Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between Boolean (primitive or object) and Null; - */ - -//CHECK#1 -if (true > null !== true) { - $ERROR('#1: true > null === true'); -} - -//CHECK#2 -if (null > true !== false) { - $ERROR('#2: null > true === false'); -} - -//CHECK#3 -if (new Boolean(true) > null !== true) { - $ERROR('#3: new Boolean(true) > null === true'); -} - -//CHECK#4 -if (null > new Boolean(true) !== false) { - $ERROR('#4: null > new Boolean(true) === false'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A3.2_T1.1.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A3.2_T1.1.js deleted file mode 100644 index d2ff7bf33..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A3.2_T1.1.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.2_A3.2_T1.1; - * @section: 11.8.2; - * @assertion: If Type(Primitive(x)) is String and Type(Primitive(y)) is String, then operator x > y returns ToString(x) > ToString(y); - * @description: Type(Primitive(x)) and Type(Primitive(y)) vary between primitive string and String object; -*/ - -//CHECK#1 -if ("1" > "1" !== false) { - $ERROR('#1: "1" > "1" === false'); -} - -//CHECK#2 -if (new String("1") > "1" !== false) { - $ERROR('#2: new String("1") > "1" === false'); -} - -//CHECK#3 -if ("1" > new String("1") !== false) { - $ERROR('#3: "1" > new String("1") === false'); -} - -//CHECK#4 -if (new String("1") > new String("1") !== false) { - $ERROR('#4: new String("1") > new String("1") === false'); -} - -//CHECK#5 -if ("x" > "1" !== true) { - $ERROR('#5: "x" > "1" === true'); -} - -//CHECK#6 -if ("1" > "x" !== false) { - $ERROR('#6: "1" > "x" === false'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A3.2_T1.2.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A3.2_T1.2.js deleted file mode 100644 index c9ebb0215..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A3.2_T1.2.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.2_A3.2_T1.2; - * @section: 11.8.2; - * @assertion: If Type(Primitive(x)) is String and Type(Primitive(y)) is String, then operator x > y returns ToString(x) > ToString(y); - * @description: Type(Primitive(x)) and Type(Primitive(y)) vary between Object object and Function object; - */ - -//CHECK#1 -if (({} > function(){return 1}) !== ({}.toString() > function(){return 1}.toString())) { - $ERROR('#1: ({} > function(){return 1}) === ({}.toString() > function(){return 1}.toString())'); -} - -//CHECK#2 -if ((function(){return 1} > {}) !== (function(){return 1}.toString() > {}.toString())) { - $ERROR('#2: (function(){return 1} > {}) === (function(){return 1}.toString() > {}.toString())'); -} - -//CHECK#3 -if ((function(){return 1} > function(){return 1}) !== (function(){return 1}.toString() > function(){return 1}.toString())) { - $ERROR('#3: (function(){return 1} > function(){return 1}) === (function(){return 1}.toString() > function(){return 1}.toString())'); -} - -//CHECK#4 -if (({} > {}) !== ({}.toString() > {}.toString())) { - $ERROR('#4: ({} > {}) === ({}.toString() > {}.toString())'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A4.1.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A4.1.js deleted file mode 100644 index e7d69fbe0..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A4.1.js +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.2_A4.1; -* @section: 11.8.2, 11.8.5; -* @assertion: If x is NaN, return false (if result in 11.8.5 is undefined, return false); -* @description: y is number primitive; -*/ - -//CHECK#1 -if ((Number.NaN > 0) !== false) { - $ERROR('#1: (NaN > 0) === false'); -} - -//CHECK#2 -if ((Number.NaN > 1.1) !== false) { - $ERROR('#2: (NaN > 1.1) === false'); -} - -//CHECK#3 -if ((Number.NaN > -1.1) !== false) { - $ERROR('#3: (NaN > -1.1) === false'); -} - -//CHECK#4 -if ((Number.NaN > Number.NaN) !== false) { - $ERROR('#4: (NaN > NaN) === false'); -} - -//CHECK#5 -if ((Number.NaN > Number.POSITIVE_INFINITY) !== false) { - $ERROR('#5: (NaN > +Infinity) === false'); -} - -//CHECK#6 -if ((Number.NaN > Number.NEGATIVE_INFINITY) !== false) { - $ERROR('#6: (NaN > -Infinity) === false'); -} - -//CHECK#7 -if ((Number.NaN > Number.MAX_VALUE) !== false) { - $ERROR('#7: (NaN > Number.MAX_VALUE) === false'); -} - -//CHECK#8 -if ((Number.NaN > Number.MIN_VALUE) !== false) { - $ERROR('#8: (NaN > Number.MIN_VALUE) === false'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A4.10.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A4.10.js deleted file mode 100644 index 155e78398..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A4.10.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.2_A4.10; -* @section: 11.8.2, 11.8.5; -* @assertion: If x is a prefix of y, return false; -* @description: x and y are string primitives; -*/ - -//CHECK#1 -if (("x" > "x") !== false) { - $ERROR('#1: ("x" > "x") === false'); -} - -//CHECK#2 -if (("" > "x") !== false) { - $ERROR('#2: ("" > "x") === false'); -} - -//CHECK#3 -if (("ab" > "abcd") !== false) { - $ERROR('#3: ("ab" > abcd") === false'); -} - -//CHECK#4 -if (("abcd" > "abc\u0064") !== false) { - $ERROR('#4: ("abcd" > abc\\u0064") === false'); -} - -//CHECK#5 -if (("x" > "x" + "y") !== false) { - $ERROR('#5: ("x" > "x" + "y") === false'); -} - -//CHECK#6 -var x = "x"; -if ((x > x + "y") !== false) { - $ERROR('#6: var x = "x"; (x > x + "y") === false'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A4.11.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A4.11.js deleted file mode 100644 index a5ebd3e36..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A4.11.js +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.2_A4.11; -* @section: 11.8.2, 11.8.5; -* @assertion: If y is a prefix of x and x !== y, return true; -* @description: x and y are string primitives; -*/ - -//CHECK#1 -if (("x " > "x") !== true) { - $ERROR('#1: ("x " > "x") === true'); -} - -//CHECK#2 -if (("x" > "") !== true) { - $ERROR('#2: ("x" > "") === true'); -} - -//CHECK#3 -if (("abcd" > "ab") !== true) { - $ERROR('#3: ("abcd" > ab") === true'); -} - -//CHECK#4 -if (("abc\u0064" > "abcd") !== false) { - $ERROR('#4: ("abc\\u0064" > abc") === false'); -} - -//CHECK#5 -if (("x" + "y" > "x") !== true) { - $ERROR('#5: ("x" + "y" > "x") === true'); -} - -//CHECK#6 -var x = "x"; -if ((x + 'y' > x) !== true) { - $ERROR('#6: var x = "x"; (x + "y" > x) === true'); -} - -//CHECK#7 -if (("a\u0000a" > "a\u0000") !== true) { - $ERROR('#7: ("a\\u0000a" > "a\\u0000") === true'); -} - -//CHECK#8 -if ((" x" > "x") !== false) { - $ERROR('#8: (" x" > "x") === false'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A4.12_T1.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A4.12_T1.js deleted file mode 100644 index cd8d393ca..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A4.12_T1.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.2_A4.12_T1; -* @section: 11.8.2, 11.8.5; -* @assertion: If neither x, nor y is a prefix of each other, returned result of strings comparison applies a simple lexicographic ordering to the sequences of code point value values; -* @description: x and y are string primitives; -*/ - -//CHECK#1 -if (("xy" > "xx") !== true) { - $ERROR('#1: ("xy" > "xx") === true'); -} - -//CHECK#2 -if (("xx" > "xy") !== false) { - $ERROR('#2: ("xx" > "xy") === false'); -} - -//CHECK#3 -if (("y" > "x") !== true) { - $ERROR('#3: ("y" > "x") === true'); -} - -//CHECK#4 -if (("aba" > "aab") !== true) { - $ERROR('#4: ("aba" > aab") === true'); -} - -//CHECK#5 -if (("\u0061\u0061\u0061\u0061" > "\u0061\u0061\u0061\u0062") !== false) { - $ERROR('#5: ("\\u0061\\u0061\\u0061\\u0061" > \\u0061\\u0061\\u0061\\u0062") === false'); -} - -//CHECK#6 -if (("a\u0000b" > "a\u0000a") !== true) { - $ERROR('#6: ("a\\u0000b" > "a\\u0000a") === true'); -} - -//CHECK#7 -if (("aa" > "aB") !== true) { - $ERROR('#7: ("aa" > aB") === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A4.12_T2.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A4.12_T2.js deleted file mode 100644 index 4ca285a7e..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A4.12_T2.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.2_A4.12_T2; -* @section: 11.8.2, 11.8.5; -* @assertion: If neither x, nor y is a prefix of each other, returned result of strings comparison applies a simple lexicographic ordering to the sequences of code point value values; -* @description: x and y are string primitives; -*/ - -//CHECK#1 -if (("x" > "0") !== true) { - $ERROR('#1: ("x" > "0") !== true'); -} - -//CHECK#2 -if (("0" > "-") !== true) { - $ERROR('#2: ("0" > "-") !== true'); -} - -//CHECK#3 -if (("0" > ".") !== true) { - $ERROR('#3: ("0" > ".") !== true'); -} - -//CHECK#4 -if (("-" > "+") !== true) { - $ERROR('#4: ("-" > "+") !== true'); -} - -//CHECK#5 -if (("-1" > "-0") !== true) { - $ERROR('#5: ("-1" > "-0") !== true'); -} - -//CHECK#6 -if (("-1" > "+1") !== true) { - $ERROR('#6: ("-1" > "+1") !== true'); -} - -//CHECK#7 -if (("1e-10" > "1") !== true) { -$ERROR('#7: ("1e-10" > "1") !== true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A4.2.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A4.2.js deleted file mode 100644 index 1419dc125..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A4.2.js +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.2_A4.2; -* @section: 11.8.2, 11.8.5; -* @assertion: If y is NaN, return false (if result in 11.8.5 is undefined, return false); -* @description: x is number primitive; -*/ - -//CHECK#1 -if ((0 > Number.NaN) !== false) { - $ERROR('#1: (0 > NaN) === false'); -} - -//CHECK#2 -if ((1.1 > Number.NaN) !== false) { - $ERROR('#2: (1.1 > NaN) === false'); -} - -//CHECK#3 -if ((-1.1 > Number.NaN) !== false) { - $ERROR('#3: (-1.1 > NaN) === false'); -} - -//CHECK#4 -if ((Number.NaN > Number.NaN) !== false) { - $ERROR('#4: (NaN > NaN) === false'); -} - -//CHECK#5 -if ((Number.POSITIVE_INFINITY > Number.NaN) !== false) { - $ERROR('#5: (+Infinity > NaN) === false'); -} - -//CHECK#6 -if ((Number.NEGATIVE_INFINITY > Number.NaN) !== false) { - $ERROR('#6: (-Infinity > NaN) === false'); -} - -//CHECK#7 -if ((Number.MAX_VALUE > Number.NaN) !== false) { - $ERROR('#7: (Number.MAX_VALUE > NaN) === false'); -} - -//CHECK#8 -if ((Number.MIN_VALUE > Number.NaN) !== false) { - $ERROR('#8: (Number.MIN_VALUE > NaN) === false'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A4.3.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A4.3.js deleted file mode 100644 index 8cbec29cf..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A4.3.js +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.2_A4.3; -* @section: 11.8.2, 11.8.5; -* @assertion: If x and y are the same number value, return false; -* @description: x and y are number primitives; -*/ - -//CHECK#1 -if ((1 > 1) !== false) { - $ERROR('#1: (1 > 1) === false'); -} - -//CHECK#2 -if ((1.1 > 1.1) !== false) { - $ERROR('#2: (1.1 > 1.1) === false'); -} - -//CHECK#3 -if ((-1.1 > -1.1) !== false) { - $ERROR('#3: (-1.1 > -1.1) === false'); -} - -//CHECK#4 -if ((Number.NEGATIVE_INFINITY > Number.NEGATIVE_INFINITY) !== false) { - $ERROR('#4: (-Infinity > -Infinity) === false'); -} - -//CHECK#5 -if ((Number.POSITIVE_INFINITY > Number.POSITIVE_INFINITY) !== false) { - $ERROR('#5: (+Infinity > +Infinity) === false'); -} - -//CHECK#6 -if ((Number.MAX_VALUE > Number.MAX_VALUE) !== false) { - $ERROR('#6: (Number.MAX_VALUE > Number.MAX_VALUE) === false'); -} - -//CHECK#7 -if ((Number.MIN_VALUE > Number.MIN_VALUE) !== false) { - $ERROR('#7: (Number.MIN_VALUE > Number.MIN_VALUE) === false'); -} - - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A4.4.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A4.4.js deleted file mode 100644 index 5998df7d0..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A4.4.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.2_A4.4; -* @section: 11.8.2, 11.8.5; -* @assertion: If either variable x or y is +0 and the other is -0, return false; -* @description: Checking all combinations; -*/ - -//CHECK#1 -if ((0 > 0) !== false) { - $ERROR('#1: (0 > 0) === false'); -} - -//CHECK#2 -if ((-0 > -0) !== false) { - $ERROR('#2: (-0 > -0) === false'); -} - -//CHECK#3 -if ((+0 > -0) !== false) { - $ERROR('#3: (+0 > -0) === false'); -} - -//CHECK#4 -if ((-0 > +0) !== false) { - $ERROR('#4: (-0 > +0) === false'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A4.5.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A4.5.js deleted file mode 100644 index 41c24a1b5..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A4.5.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.2_A4.5; -* @section: 11.8.2, 11.8.5; -* @assertion: If x is +Infinity and x !== y, return true; -* @description: y is number primitive; -*/ - -//CHECK#1 -if ((Number.POSITIVE_INFINITY > 0) !== true) { - $ERROR('#1: (+Infinity > 0) === true'); -} - -//CHECK#2 -if ((Number.POSITIVE_INFINITY > 1.1) !== true) { - $ERROR('#2: (+Infinity > 1.1) === true'); -} - -//CHECK#3 -if ((Number.POSITIVE_INFINITY > -1.1) !== true) { - $ERROR('#3: (+Infinity > -1.1) === true'); -} - -//CHECK#4 -if ((Number.POSITIVE_INFINITY > Number.NEGATIVE_INFINITY) !== true) { - $ERROR('#4: (+Infinity > -Infinity) === true'); -} - -//CHECK#5 -if ((Number.POSITIVE_INFINITY > Number.MAX_VALUE) !== true) { - $ERROR('#5: (+Infinity > Number.MAX_VALUE) === true'); -} - -//CHECK#6 -if ((Number.POSITIVE_INFINITY > Number.MIN_VALUE) !== true) { - $ERROR('#6: (+Infinity > Number.MIN_VALUE) === true'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A4.6.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A4.6.js deleted file mode 100644 index 0477f3d8f..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A4.6.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.2_A4.6; -* @section: 11.8.2, 11.8.5; -* @assertion: If y is +Infinity, return false; -* @description: x is number primitive; -*/ - -//CHECK#1 -if ((0 > Number.POSITIVE_INFINITY) !== false) { - $ERROR('#1: (0 > +Infinity) === false'); -} - -//CHECK#2 -if ((1.1 > Number.POSITIVE_INFINITY) !== false) { - $ERROR('#2: (1.1 > +Infinity) === false'); -} - -//CHECK#3 -if ((-1.1 > Number.POSITIVE_INFINITY) !== false) { - $ERROR('#3: (-1.1 > +Infinity) === false'); -} - -//CHECK#4 -if ((Number.NEGATIVE_INFINITY > Number.POSITIVE_INFINITY) !== false) { - $ERROR('#4: (-Infinity > +Infinity) === false'); -} - -//CHECK#5 -if ((Number.MAX_VALUE > Number.POSITIVE_INFINITY) !== false) { - $ERROR('#5: (Number.MAX_VALUE > +Infinity) === false'); -} - -//CHECK#6 -if ((Number.MIN_VALUE > Number.POSITIVE_INFINITY) !== false) { - $ERROR('#6: (Number.MIN_VALUE > +Infinity) === false'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A4.7.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A4.7.js deleted file mode 100644 index 0aec46a2f..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A4.7.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.2_A4.7; -* @section: 11.8.2, 11.8.5; -* @assertion: If x is -Infinity, return false; -* @description: y is number primitive; -*/ - -//CHECK#1 -if ((Number.NEGATIVE_INFINITY > 0) !== false) { - $ERROR('#1: (-Infinity > 0) === false'); -} - -//CHECK#2 -if ((Number.NEGATIVE_INFINITY > 1.1) !== false) { - $ERROR('#2: (-Infinity > 1.1) === false'); -} - -//CHECK#3 -if ((Number.NEGATIVE_INFINITY > -1.1) !== false) { - $ERROR('#3: (-Infinity > -1.1) === false'); -} - -//CHECK#4 -if ((Number.NEGATIVE_INFINITY > Number.POSITIVE_INFINITY) !== false) { - $ERROR('#4: (-Infinity > +Infinity) === false'); -} - -//CHECK#5 -if ((Number.NEGATIVE_INFINITY > Number.MAX_VALUE) !== false) { - $ERROR('#5: (-Infinity > Number.MAX_VALUE) === false'); -} - -//CHECK#6 -if ((Number.NEGATIVE_INFINITY > Number.MIN_VALUE) !== false) { - $ERROR('#6: (-Infinity > Number.MIN_VALUE) === false'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A4.8.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A4.8.js deleted file mode 100644 index df8d8c421..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A4.8.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.2_A4.8; -* @section: 11.8.2, 11.8.5; -* @assertion: If y is -Infinity and x !== y, return true; -* @description: x is number primitive; -*/ - -//CHECK#1 -if ((0 > Number.NEGATIVE_INFINITY) !== true) { - $ERROR('#1: (0 > -Infinity) === true'); -} - -//CHECK#2 -if ((1.1 > Number.NEGATIVE_INFINITY) !== true) { - $ERROR('#2: (1.1 > -Infinity) === true'); -} - -//CHECK#3 -if ((-1.1 > Number.NEGATIVE_INFINITY) !== true) { - $ERROR('#3: (-1.1 > -Infinity) === true'); -} - -//CHECK#4 -if ((Number.POSITIVE_INFINITY > Number.NEGATIVE_INFINITY) !== true) { - $ERROR('#4: (+Infinity > -Infinity) === true'); -} - -//CHECK#5 -if ((Number.MAX_VALUE > Number.NEGATIVE_INFINITY) !== true) { - $ERROR('#5: (Number.MAX_VALUE > -Infinity) === true'); -} - -//CHECK#6 -if ((Number.MIN_VALUE > Number.NEGATIVE_INFINITY) !== true) { - $ERROR('#6: (Number.MIN_VALUE > -Infinity) === true'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A4.9.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A4.9.js deleted file mode 100644 index c2b192cd9..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.2_The_Greater_than_Operator/S11.8.2_A4.9.js +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.2_A4.9; -* @section: 11.8.2, 11.8.5; -* @assertion: If is x greater than y and these values are both finite non-zero, return true; otherwise, return false; -* @description: x and y are number primitives; -*/ - -//CHECK#1 -if ((1 > 1.1) !== false) { - $ERROR('#1: (1 > 1.1) === false'); -} - -//CHECK#2 -if ((1.1 > 1) !== true) { - $ERROR('#2: (1.1 > 1) === true'); -} - -//CHECK#3 -if ((-1 > -1.1) !== true) { - $ERROR('#3: (-1 > -1.1) === true'); -} - -//CHECK#4 -if ((-1.1 > -1) !== false) { - $ERROR('#4: (-1.1 > -1) === false'); -} - -//CHECK#5 -if ((0.1 > 0) !== true) { - $ERROR('#5: (0.1 > 0) === true'); -} - -//CHECK#6 -if ((0 > -0.1) !== true) { - $ERROR('#6: (0 > -0.1) === true'); -} - -//CHECK#7 -if ((Number.MAX_VALUE > Number.MAX_VALUE/2) !== true) { - $ERROR('#7: (Number.MAX_VALUE > Number.MAX_VALUE/2) === true'); -} - -//CHECK#8 -if ((Number.MIN_VALUE*2 > Number.MIN_VALUE) !== true) { - $ERROR('#8: (Number.MIN_VALUE*2 > Number.MIN_VALUE) === true'); -} - - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A1.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A1.js deleted file mode 100644 index d440e0935..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A1.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.3_A1; -* @section: 11.8.3, 7.2, 7.3; -* @assertion: White Space and Line Terminator between RelationalExpression and "<=" or between "<=" and ShiftExpression are allowed; -* @description: Checking by using eval; -*/ - -//CHECK#1 -if (eval("1\u0009<=\u00091") !== true) { - $ERROR('#1: (1\\u0009<=\\u00091) === true'); -} - -//CHECK#2 -if (eval("1\u000B<=\u000B1") !== true) { - $ERROR('#2: (1\\u000B<=\\u000B1) === true'); -} - -//CHECK#3 -if (eval("1\u000C<=\u000C1") !== true) { - $ERROR('#3: (1\\u000C<=\\u000C1) === true'); -} - -//CHECK#4 -if (eval("1\u0020<=\u00201") !== true) { - $ERROR('#4: (1\\u0020<=\\u00201) === true'); -} - -//CHECK#5 -if (eval("1\u00A0<=\u00A01") !== true) { - $ERROR('#5: (1\\u00A0<=\\u00A01) === true'); -} - -//CHECK#6 -if (eval("1\u000A<=\u000A1") !== true) { - $ERROR('#6: (1\\u000A<=\\u000A1) === true'); -} - -//CHECK#7 -if (eval("1\u000D<=\u000D1") !== true) { - $ERROR('#7: (1\\u000D<=\\u000D1) === true'); -} - -//CHECK#8 -if (eval("1\u2028<=\u20281") !== true) { - $ERROR('#8: (1\\u2028<=\\u20281) === true'); -} - -//CHECK#9 -if (eval("1\u2029<=\u20291") !== true) { - $ERROR('#9: (1\\u2029<=\\u20291) === true'); -} - -//CHECK#10 -if (eval("1\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029>\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20290") !== true) { - $ERROR('#10: (1\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029>\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20290) === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A2.1_T1.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A2.1_T1.js deleted file mode 100644 index c80563b2c..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A2.1_T1.js +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.3_A2.1_T1; -* @section: 11.8.3, 11.8.5; -* @assertion: Operator x <= y uses GetValue; -* @description: Either Type is not Reference or GetBase is not null; -*/ - -//CHECK#1 -if (1 <= 1 !== true) { - $ERROR('#1: 1 <= 1 === true'); -} - -//CHECK#2 -var x = 1; -if (x <= 1 !== true) { - $ERROR('#2: var x = 1; x <= 1 === true'); -} - -//CHECK#3 -var y = 1; -if (1 <= y !== true) { - $ERROR('#3: var y = 1; 1 <= y === true'); -} - -//CHECK#4 -var x = 1; -var y = 1; -if (x <= y !== true) { - $ERROR('#4: var x = 1; var y = 1; x <= y === true'); -} - -//CHECK#5 -var objectx = new Object(); -var objecty = new Object(); -objectx.prop = 1; -objecty.prop = 1; -if (objectx.prop <= objecty.prop !== true) { - $ERROR('#5: var objectx = new Object(); var objecty = new Object(); objectx.prop = 1; objecty.prop = 1; objectx.prop <= objecty.prop === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A2.1_T2.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A2.1_T2.js deleted file mode 100644 index b7bb57e89..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A2.1_T2.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.3_A2.1_T2; - * @section: 11.8.3, 11.8.5; - * @assertion: Operator x <= y uses GetValue; - * @description: If GetBase(x) is null, throw ReferenceError; -*/ - -//CHECK#1 -try { - x <= 1; - $ERROR('#1.1: x <= 1 throw ReferenceError. Actual: ' + (x <= 1)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: x <= 1 throw ReferenceError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A2.1_T3.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A2.1_T3.js deleted file mode 100644 index fbb266ec1..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A2.1_T3.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.3_A2.1_T3; - * @section: 11.8.3, 11.8.5; - * @assertion: Operator x <= y uses GetValue; - * @description: If GetBase(y) is null, throw ReferenceError; -*/ - -//CHECK#1 -try { - 1 <= y; - $ERROR('#1.1: 1 <= y throw ReferenceError. Actual: ' + (1 <= y)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: 1 <= y throw ReferenceError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A2.2_T1.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A2.2_T1.js deleted file mode 100644 index dc85f4908..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A2.2_T1.js +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.3_A2.2_T1; - * @section: 11.8.3, 8.6.2.6; - * @assertion: Operator x <= y uses [[Default Value]]; - * @description: If Type(value) is Object, evaluate ToPrimitive(value, Number); - */ - -//CHECK#1 -if ({valueOf: function() {return 0}} <= 1 !== true) { - $ERROR('#1: {valueOf: function() {return 1}} <= 1 === true. Actual: ' + ({valueOf: function() {return 1}} <= 1)); -} - -//CHECK#2 -if ({valueOf: function() {return 0}, toString: function() {return 2}} <= 1 !== true) { - $ERROR('#2: {valueOf: function() {return 1}, toString: function() {return 0}} <= 1 === true. Actual: ' + ({valueOf: function() {return 1}, toString: function() {return 0}} <= 1)); -} - -//CHECK#3 -if ({valueOf: function() {return 0}, toString: function() {return {}}} <= 1 !== true) { - $ERROR('#3: {valueOf: function() {return 1}, toString: function() {return {}}} <= 1 === true. Actual: ' + ({valueOf: function() {return 1}, toString: function() {return {}}} <= 1)); -} - -//CHECK#4 -try { - if ({valueOf: function() {return 0}, toString: function() {throw "error"}} <= 1 !== true) { - $ERROR('#4.1: {valueOf: function() {return 1}, toString: function() {throw "error"}} <= 1 === true. Actual: ' + ({valueOf: function() {return 1}, toString: function() {throw "error"}} <= 1)); - } -} -catch (e) { - if (e === "error") { - $ERROR('#4.2: {valueOf: function() {return 0}, toString: function() {throw "error"}} <= 1 not throw "error"'); - } else { - $ERROR('#4.3: {valueOf: function() {return 0}, toString: function() {throw "error"}} <= 1 not throw Error. Actual: ' + (e)); - } -} - -//CHECK#5 -if (1 <= {toString: function() {return 2}} !== true) { - $ERROR('#5: 1 <= {toString: function() {return 2}} === true. Actual: ' + (1 <= {toString: function() {return 2}})); -} - -//CHECK#6 -if (1 <= {valueOf: function() {return {}}, toString: function() {return 2}} !== true) { - $ERROR('#6: 1 <= {valueOf: function() {return {}}, toString: function() {return 2}} === true. Actual: ' + (1 <= {valueOf: function() {return {}}, toString: function() {return 2}})); -} - -//CHECK#7 -try { - 1 <= {valueOf: function() {throw "error"}, toString: function() {return 2}}; - $ERROR('#7.1: 1 <= {valueOf: function() {throw "error"}, toString: function() {return 2}} throw "error". Actual: ' + (1 <= {valueOf: function() {throw "error"}, toString: function() {return 2}})); -} -catch (e) { - if (e !== "error") { - $ERROR('#7.2: 1 <= {valueOf: function() {throw "error"}, toString: function() {return 2}} throw "error". Actual: ' + (e)); - } -} - -//CHECK#8 -try { - 1 <= {valueOf: function() {return {}}, toString: function() {return {}}}; - $ERROR('#8.1: 1 <= {valueOf: function() {return {}}, toString: function() {return {}}} throw TypeError. Actual: ' + (1 <= {valueOf: function() {return {}}, toString: function() {return {}}})); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#8.2: 1 <= {valueOf: function() {return {}}, toString: function() {return {}}} throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A2.3_T1.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A2.3_T1.js deleted file mode 100644 index 9658773e3..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A2.3_T1.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.3_A2.3_T1; - * @section: 11.8.3; - * @assertion: ToNumber(second expression) is called first, and then ToNumber(first expression); - * @description: Checking with "throw"; -*/ - -//CHECK#1 -var x = { valueOf: function () { throw "x"; } }; -var y = { valueOf: function () { throw "y"; } }; -try { - x <= y; - $ERROR('#1.1: var x = { valueOf: function () { throw "x"; } }; var y = { valueOf: function () { throw "y"; } }; x <= y throw "y". Actual: ' + (x <= y)); -} catch (e) { - if (e === "x") { - $ERROR('#1.2: ToNumber(second expression) is called first, and then ToNumber(first expression)'); - } else { - if (e !== "y") { - $ERROR('#1.3: var x = { valueOf: function () { throw "x"; } }; var y = { valueOf: function () { throw "y"; } }; x <= y throw "y". Actual: ' + (e)); - } - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A2.4_T1.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A2.4_T1.js deleted file mode 100644 index 4d767dc02..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A2.4_T1.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.3_A2.4_T1; - * @section: 11.8.3; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with "="; -*/ - -//CHECK#1 -var x = 0; -if ((x = 1) <= x !== true) { - $ERROR('#1: var x = 0; (x = 1) <= x === true'); -} - -//CHECK#2 -var x = 1; -if (x <= (x = 0) !== false) { - $ERROR('#2: var x = 1; x <= (x = 0) === false'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A2.4_T2.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A2.4_T2.js deleted file mode 100644 index 7c1890301..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A2.4_T2.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.3_A2.4_T2; - * @section: 11.8.3; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with "throw"; -*/ - -//CHECK#1 -var x = function () { throw "x"; }; -var y = function () { throw "y"; }; -try { - x() <= y(); - $ERROR('#1.1: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() <= y() throw "x". Actual: ' + (x() <= y())); -} catch (e) { - if (e === "y") { - $ERROR('#1.2: First expression is evaluated first, and then second expression'); - } else { - if (e !== "x") { - $ERROR('#1.3: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() <= y() throw "x". Actual: ' + (e)); - } - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A2.4_T3.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A2.4_T3.js deleted file mode 100644 index ede9323aa..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A2.4_T3.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.3_A2.4_T3; - * @section: 11.8.3; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with undeclarated variables; -*/ - -//CHECK#1 -try { - x <= (x = 1); - $ERROR('#1.1: x <= (x = 1) throw ReferenceError. Actual: ' + (x <= (x = 1))); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: x <= (x = 1) throw ReferenceError. Actual: ' + (e)); - } -} - -//CHECK#2 -if ((y = 1) <= y !== true) { - $ERROR('#2: (y = 1) <= y === true'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A3.1_T1.1.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A3.1_T1.1.js deleted file mode 100644 index 416964ccf..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A3.1_T1.1.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.3_A3.1_T1.1; - * @section: 11.8.3; - * @assertion: Operator x <= y returns ToNumber(x) <= ToNumber(y), if Type(Primitive(x)) is not String or Type(Primitive(y)) is not String; - * @description: Type(Primitive(x)) and Type(Primitive(y)) vary between primitive boolean and Boolean object; - */ - -//CHECK#1 -if (true <= true !== true) { - $ERROR('#1: true <= true === true'); -} - -//CHECK#2 -if (new Boolean(true) <= true !== true) { - $ERROR('#2: new Boolean(true) <= true === true'); -} - -//CHECK#3 -if (true <= new Boolean(true) !== true) { - $ERROR('#3: true <= new Boolean(true) === true'); -} - -//CHECK#4 -if (new Boolean(true) <= new Boolean(true) !== true) { - $ERROR('#4: new Boolean(true) <= new Boolean(true) === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A3.1_T1.2.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A3.1_T1.2.js deleted file mode 100644 index 0df36ffa9..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A3.1_T1.2.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.3_A3.1_T1.2; - * @section: 11.8.3; - * @assertion: Operator x <= y returns ToNumber(x) <= ToNumber(y), if Type(Primitive(x)) is not String or Type(Primitive(y)) is not String; - * @description: Type(Primitive(x)) and Type(Primitive(y)) vary between primitive number and Number object; -*/ - -//CHECK#1 -if (1 <= 1 !== true) { - $ERROR('#1: 1 <= 1 === true'); -} - -//CHECK#2 -if (new Number(1) <= 1 !== true) { - $ERROR('#2: new Number(1) <= 1 === true'); -} - -//CHECK#3 -if (1 <= new Number(1) !== true) { - $ERROR('#3: 1 <= new Number(1) === true'); -} - -//CHECK#4 -if (new Number(1) <= new Number(1) !== true) { - $ERROR('#4: new Number(1) <= new Number(1) === true'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A3.1_T1.3.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A3.1_T1.3.js deleted file mode 100644 index 01eed6a06..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A3.1_T1.3.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.3_A3.1_T1.3; - * @section: 11.8.3; - * @assertion: Operator x <= y returns ToNumber(x) <= ToNumber(y), if Type(Primitive(x)) is not String or Type(Primitive(y)) is not String; - * @description: Type(Primitive(x)) and Type(Primitive(y)) vary between Null and Undefined; - */ - -//CHECK#1 -if (null <= undefined !== false) { - $ERROR('#1: null <= undefined === false'); -} - -//CHECK#2 -if (undefined <= null !== false) { - $ERROR('#2: undefined <= null === false'); -} - -//CHECK#3 -if (undefined <= undefined !== false) { - $ERROR('#3: undefined <= undefined === false'); -} - -//CHECK#4 -if (null <= null !== true) { - $ERROR('#4: null <= null === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A3.1_T2.1.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A3.1_T2.1.js deleted file mode 100644 index 00cfb73a9..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A3.1_T2.1.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.3_A3.1_T2.1; - * @section: 11.8.3; - * @assertion: Operator x <= y returns ToNumber(x) <= ToNumber(y), if Type(Primitive(x)) is not String or Type(Primitive(y)) is not String; - * @description: Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between Number (primitive or object) and Boolean (primitive and object); - */ - -//CHECK#1 -if (true <= 1 !== true) { - $ERROR('#1: true <= 1 === true'); -} - -//CHECK#2 -if (1 <= true !== true) { - $ERROR('#2: 1 <= true === true'); -} - -//CHECK#3 -if (new Boolean(true) <= 1 !== true) { - $ERROR('#3: new Boolean(true) <= 1 === true'); -} - -//CHECK#4 -if (1 <= new Boolean(true) !== true) { - $ERROR('#4: 1 <= new Boolean(true) === true'); -} - -//CHECK#5 -if (true <= new Number(1) !== true) { - $ERROR('#5: true <= new Number(1) === true'); -} - -//CHECK#6 -if (new Number(1) <= true !== true) { - $ERROR('#6: new Number(1) <= true === true'); -} - -//CHECK#7 -if (new Boolean(true) <= new Number(1) !== true) { - $ERROR('#7: new Boolean(true) <= new Number(1) === true'); -} - -//CHECK#8 -if (new Number(1) <= new Boolean(true) !== true) { - $ERROR('#8: new Number(1) <= new Boolean(true) === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A3.1_T2.2.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A3.1_T2.2.js deleted file mode 100644 index c2c55fe99..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A3.1_T2.2.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.3_A3.1_T2.2; - * @section: 11.8.3; - * @assertion: Operator x <= y returns ToNumber(x) <= ToNumber(y), if Type(Primitive(x)) is not String or Type(Primitive(y)) is not String; - * @description: Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between Number (primitive or object) and String (primitive and object); -*/ - -//CHECK#1 -if ("1" <= 1 !== true) { - $ERROR('#1: "1" <= 1 === true'); -} - -//CHECK#2 -if (1 <= "1" !== true) { - $ERROR('#2: 1 <= "1" === true'); -} - -//CHECK#3 -if (new String("1") <= 1 !== true) { - $ERROR('#3: new String("1") <= 1 === true'); -} - -//CHECK#4 -if (1 <= new String("1") !== true) { - $ERROR('#4: 1 <= new String("1") === true'); -} - -//CHECK#5 -if ("1" <= new Number(1) !== true) { - $ERROR('#5: "1" <= new Number(1) === true'); -} - -//CHECK#6 -if (new Number(1) <= "1" !== true) { - $ERROR('#6: new Number(1) <= "1" === true'); -} - -//CHECK#7 -if (new String("1") <= new Number(1) !== true) { - $ERROR('#7: new String("1") <= new Number(1) === true'); -} - -//CHECK#8 -if (new Number(1) <= new String("1") !== true) { - $ERROR('#8: new Number(1) <= new String("1") === true'); -} - -//CHECK#9 -if ("x" <= 1 !== false) { - $ERROR('#9: "x" <= 1 === false'); -} - -//CHECK#10 -if (1 <= "x" !== false) { - $ERROR('#10: 1 <= "x" === false'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A3.1_T2.3.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A3.1_T2.3.js deleted file mode 100644 index 4cd0b2a2b..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A3.1_T2.3.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.3_A3.1_T2.3; - * @section: 11.8.3; - * @assertion: Operator x <= y returns ToNumber(x) <= ToNumber(y), if Type(Primitive(x)) is not String or Type(Primitive(y)) is not String; - * @description: Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between Number (primitive or object) and Null; - */ - -//CHECK#1 -if (1 <= null !== false) { - $ERROR('#1: 1 <= null === false'); -} - -//CHECK#2 -if (null <= 1 !== true) { - $ERROR('#2: null <= 1 === true'); -} - -//CHECK#3 -if (new Number(1) <= null !== false) { - $ERROR('#3: new Number(1) <= null === false'); -} - -//CHECK#4 -if (null <= new Number(1) !== true) { - $ERROR('#4: null <= new Number(1) === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A3.1_T2.4.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A3.1_T2.4.js deleted file mode 100644 index bbdc03588..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A3.1_T2.4.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.3_A3.1_T2.4; - * @section: 11.8.3; - * @assertion: Operator x <= y returns ToNumber(x) <= ToNumber(y), if Type(Primitive(x)) is not String or Type(Primitive(y)) is not String; - * @description: Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between Number (primitive or object) and Undefined; - */ - -//CHECK#1 -if (1 <= undefined !== false) { - $ERROR('#1: 1 <= undefined === false'); -} - -//CHECK#2 -if (undefined <= 1 !== false) { - $ERROR('#2: undefined <= 1 === false'); -} - -//CHECK#3 -if (new Number(1) <= undefined !== false) { - $ERROR('#3: new Number(1) <= undefined === false'); -} - -//CHECK#4 -if (undefined <= new Number(1) !== false) { - $ERROR('#4: undefined <= new Number(1) === false'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A3.1_T2.5.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A3.1_T2.5.js deleted file mode 100644 index 1666a6742..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A3.1_T2.5.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.3_A3.1_T2.5; - * @section: 11.8.3; - * @assertion: Operator x <= y returns ToNumber(x) <= ToNumber(y), if Type(Primitive(x)) is not String or Type(Primitive(y)) is not String; - * @description: Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between String (primitive or object) and Boolean (primitive and object); -*/ - -//CHECK#1 -if (true <= "1" !== true) { - $ERROR('#1: true <= "1" === true'); -} - -//CHECK#2 -if ("1" <= true !== true) { - $ERROR('#2: "1" <= true === true'); -} - -//CHECK#3 -if (new Boolean(true) <= "1" !== true) { - $ERROR('#3: new Boolean(true) <= "1" === true'); -} - -//CHECK#4 -if ("1" <= new Boolean(true) !== true) { - $ERROR('#4: "1" <= new Boolean(true) === true'); -} - -//CHECK#5 -if (true <= new String("1") !== true) { - $ERROR('#5: true <= new String("1") === true'); -} - -//CHECK#6 -if (new String("1") <= true !== true) { - $ERROR('#6: new String("1") <= true === true'); -} - -//CHECK#7 -if (new Boolean(true) <= new String("1") !== true) { - $ERROR('#7: new Boolean(true) <= new String("1") === true'); -} - -//CHECK#8 -if (new String("1") <= new Boolean(true) !== true) { - $ERROR('#8: new String("1") <= new Boolean(true) === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A3.1_T2.6.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A3.1_T2.6.js deleted file mode 100644 index d28c3ba53..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A3.1_T2.6.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.3_A3.1_T2.6; - * @section: 11.8.3; - * @assertion: Operator x <= y returns ToNumber(x) <= ToNumber(y), if Type(Primitive(x)) is not String or Type(Primitive(y)) is not String; - * @description: Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between String (primitive or object) and Undefined; - */ - -//CHECK#1 -if ("1" <= undefined !== false) { - $ERROR('#1: "1" <= undefined === false'); -} - -//CHECK#2 -if (undefined <= "1" !== false) { - $ERROR('#2: undefined <= "1" === false'); -} - -//CHECK#3 -if (new String("1") <= undefined !== false) { - $ERROR('#3: new String("1") <= undefined === false'); -} - -//CHECK#4 -if (undefined <= new String("1") !== false) { - $ERROR('#4: undefined <= new String("1") === false'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A3.1_T2.7.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A3.1_T2.7.js deleted file mode 100644 index e6b96451e..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A3.1_T2.7.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.3_A3.1_T2.7; - * @section: 11.8.3; - * @assertion: Operator x <= y returns ToNumber(x) <= ToNumber(y), if Type(Primitive(x)) is not String or Type(Primitive(y)) is not String; - * @description: Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between String (primitive or object) and Null; - */ - -//CHECK#1 -if ("1" <= null !== false) { - $ERROR('#1: "1" <= null === false'); -} - -//CHECK#2 -if (null <= "1" !== true) { - $ERROR('#2: null <= "1" === true'); -} - -//CHECK#3 -if (new String("1") <= null !== false) { - $ERROR('#3: new String("1") <= null === false'); -} - -//CHECK#4 -if (null <= new String("1") !== true) { - $ERROR('#4: null <= new String("1") === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A3.1_T2.8.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A3.1_T2.8.js deleted file mode 100644 index bdbc28959..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A3.1_T2.8.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.3_A3.1_T2.8; - * @section: 11.8.3; - * @assertion: Operator x <= y returns ToNumber(x) <= ToNumber(y), if Type(Primitive(x)) is not String or Type(Primitive(y)) is not String; - * @description: Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between Boolean (primitive or object) and Undefined; - */ - -//CHECK#1 -if (true <= undefined !== false) { - $ERROR('#1: true <= undefined === false'); -} - -//CHECK#2 -if (undefined <= true !== false) { - $ERROR('#2: undefined <= true === false'); -} - -//CHECK#3 -if (new Boolean(true) <= undefined !== false) { - $ERROR('#3: new Boolean(true) <= undefined === false'); -} - -//CHECK#4 -if (undefined <= new Boolean(true) !== false) { - $ERROR('#4: undefined <= new Boolean(true) === false'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A3.1_T2.9.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A3.1_T2.9.js deleted file mode 100644 index 8e54c2931..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A3.1_T2.9.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.3_A3.1_T2.9; - * @section: 11.8.3; - * @assertion: Operator x <= y returns ToNumber(x) <= ToNumber(y), if Type(Primitive(x)) is not String or Type(Primitive(y)) is not String; - * @description: Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between Boolean (primitive or object) and Null; - */ - -//CHECK#1 -if (true <= null !== false) { - $ERROR('#1: true <= null === false'); -} - -//CHECK#2 -if (null <= true !== true) { - $ERROR('#2: null <= true === true'); -} - -//CHECK#3 -if (new Boolean(true) <= null !== false) { - $ERROR('#3: new Boolean(true) <= null === false'); -} - -//CHECK#4 -if (null <= new Boolean(true) !== true) { - $ERROR('#4: null <= new Boolean(true) === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A3.2_T1.1.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A3.2_T1.1.js deleted file mode 100644 index 5125d8d2c..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A3.2_T1.1.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.3_A3.2_T1.1; - * @section: 11.8.3; - * @assertion: Operator x <= y returns ToString(x) <= ToString(y), if Type(Primitive(x)) is String and Type(Primitive(y)) is String; - * @description: Type(Primitive(x)) and Type(Primitive(y)) vary between primitive string and String object; -*/ - -//CHECK#1 -if ("1" <= "1" !== true) { - $ERROR('#1: "1" <= "1" === true'); -} - -//CHECK#2 -if (new String("1") <= "1" !== true) { - $ERROR('#2: new String("1") <= "1" === true'); -} - -//CHECK#3 -if ("1" <= new String("1") !== true) { - $ERROR('#3: "1" <= new String("1") === true'); -} - -//CHECK#4 -if (new String("1") <= new String("1") !== true) { - $ERROR('#4: new String("1") <= new String("1") === true'); -} - -//CHECK#5 -if ("x" <= "1" !== false) { - $ERROR('#5: "x" <= "1" === false'); -} - -//CHECK#6 -if ("1" <= "x" !== true) { - $ERROR('#6: "1" <= "x" === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A3.2_T1.2.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A3.2_T1.2.js deleted file mode 100644 index e1691a13b..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A3.2_T1.2.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.3_A3.2_T1.2; - * @section: 11.8.3; - * @assertion: Operator x <= y returns ToString(x) <= ToString(y), if Type(Primitive(x)) is String and Type(Primitive(y)) is String; - * @description: Type(Primitive(x)) and Type(Primitive(y)) vary between Object object and Function object; - */ - -//CHECK#1 -if (({} <= function(){return 1}) !== ({}.toString() <= function(){return 1}.toString())) { - $ERROR('#1: ({} <= function(){return 1}) === ({}.toString() <= function(){return 1}.toString())'); -} - -//CHECK#2 -if ((function(){return 1} <= {}) !== (function(){return 1}.toString() <= {}.toString())) { - $ERROR('#2: (function(){return 1} <= {}) === (function(){return 1}.toString() <= {}.toString())'); -} - -//CHECK#3 -if ((function(){return 1} <= function(){return 1}) !== (function(){return 1}.toString() <= function(){return 1}.toString())) { - $ERROR('#3: (function(){return 1} <= function(){return 1}) === (function(){return 1}.toString() <= function(){return 1}.toString())'); -} - -//CHECK#4 -if (({} <= {}) !== ({}.toString() <= {}.toString())) { - $ERROR('#4: ({} <= {}) === ({}.toString() <= {}.toString())'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A4.1.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A4.1.js deleted file mode 100644 index 4cffbd13b..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A4.1.js +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.3_A4.1; -* @section: 11.8.3, 11.8.5; -* @assertion: If x is NaN, return false (if result in 11.8.5 is undefined, return false); -* @description: y is number primitive; -*/ - -//CHECK#1 -if ((Number.NaN <= 0) !== false) { - $ERROR('#1: (NaN <= 0) === false'); -} - -//CHECK#2 -if ((Number.NaN <= 1.1) !== false) { - $ERROR('#2: (NaN <= 1.1) === false'); -} - -//CHECK#3 -if ((Number.NaN <= -1.1) !== false) { - $ERROR('#3: (NaN <= -1.1) === false'); -} - -//CHECK#4 -if ((Number.NaN <= Number.NaN) !== false) { - $ERROR('#4: (NaN <= NaN) === false'); -} - -//CHECK#5 -if ((Number.NaN <= Number.POSITIVE_INFINITY) !== false) { - $ERROR('#5: (NaN <= +Infinity) === false'); -} - -//CHECK#6 -if ((Number.NaN <= Number.NEGATIVE_INFINITY) !== false) { - $ERROR('#6: (NaN <= -Infinity) === false'); -} - -//CHECK#7 -if ((Number.NaN <= Number.MAX_VALUE) !== false) { - $ERROR('#7: (NaN <= Number.MAX_VALUE) === false'); -} - -//CHECK#8 -if ((Number.NaN <= Number.MIN_VALUE) !== false) { - $ERROR('#8: (NaN <= Number.MIN_VALUE) === false'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A4.10.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A4.10.js deleted file mode 100644 index c00afb1fe..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A4.10.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.3_A4.10; -* @section: 11.8.3, 11.8.5; -* @assertion: If y is a prefix of x and x !== y, return false; -* @description: x and y are string primitives; -*/ - -//CHECK#1 -if (("x " <= "x") !== false) { - $ERROR('#1: ("x " <= "x") === false'); -} - -//CHECK#2 -if (("x" <= "") !== false) { - $ERROR('#2: ("x" <= "") === false'); -} - -//CHECK#3 -if (("abcd" <= "ab") !== false) { - $ERROR('#3: ("abcd" <= ab") === false'); -} - -//CHECK#4 -if (("abc\u0064" <= "abcd") !== true) { - $ERROR('#4: ("abc\\u0064" <= abcd") === true'); -} - -//CHECK#5 -if (("x" + "y" <= "x") !== false) { - $ERROR('#5: ("x" + "y" <= "x") === false'); -} - -//CHECK#6 -var x = "x"; -if ((x + 'y' <= x) !== false) { - $ERROR('#6: var x = "x"; (x + "y" <= x) === false'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A4.11.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A4.11.js deleted file mode 100644 index 0931d3963..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A4.11.js +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.3_A4.11; -* @section: 11.8.3, 11.8.5; -* @assertion: If x is a prefix of y, return true; -* @description: x and y are string primitives; -*/ - -//CHECK#1 -if (("x" <= "x") !== true) { - $ERROR('#1: ("x" <= "x") === true'); -} - -//CHECK#2 -if (("" <= "x") !== true) { - $ERROR('#2: ("" <= "x") === true'); -} - -//CHECK#3 -if (("ab" <= "abcd") !== true) { - $ERROR('#3: ("ab" <= abcd") === true'); -} - -//CHECK#4 -if (("abcd" <= "abc\u0064") !== true) { - $ERROR('#4: ("abcd" <= abc\\u0064") === true'); -} - -//CHECK#5 -if (("x" <= "x" + "y") !== true) { - $ERROR('#5: ("x" <= "x" + "y") === true'); -} - -//CHECK#6 -var x = "x"; -if ((x <= x + "y") !== true) { - $ERROR('#6: var x = "x"; (x <= x + "y") === true'); -} - -//CHECK#7 -if (("a\u0000" <= "a\u0000a") !== true) { - $ERROR('#7: ("a\\u0000" <= "a\\u0000a") === true'); -} - -//CHECK#8 -if (("x" <= " x") !== false) { - $ERROR('#8: ("x" <= " x") === false'); -} - - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A4.12_T1.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A4.12_T1.js deleted file mode 100644 index dbf3f6997..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A4.12_T1.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.3_A4.12_T1; -* @section: 11.8.3, 11.8.5; -* @assertion: If neither x, nor y is a prefix of each other, returned result of strings comparison applies a simple lexicographic ordering to the sequences of code point value values; -* @description: x and y are string primitives; -*/ - -//CHECK#1 -if (("xx" <= "xy") !== true) { - $ERROR('#1: ("xx" <= "xy") === true'); -} - -//CHECK#2 -if (("xy" <= "xx") !== false) { - $ERROR('#2: ("xy" <= "xx") === false'); -} - -//CHECK#3 -if (("x" <= "y") !== true) { - $ERROR('#3: ("x" <= y") === true'); -} - -//CHECK#4 -if (("aab" <= "aba") !== true) { - $ERROR('#4: ("aab" <= aba") === true'); -} - -//CHECK#5 -if (("\u0061\u0061\u0061\u0062" <= "\u0061\u0061\u0061\u0061") !== false) { - $ERROR('#5: ("\\u0061\\u0061\\u0061\\u0062" <= \\u0061\\u0061\\u0061\\u0061") === false'); -} - -//CHECK#6 -if (("a\u0000a" <= "a\u0000b") !== true) { - $ERROR('#6: ("a\\u0000a" <= "a\\u0000b") === true'); -} - -//CHECK#7 -if (("aB" <= "aa") !== true) { - $ERROR('#7: ("aB" <= aa") === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A4.12_T2.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A4.12_T2.js deleted file mode 100644 index af86e980c..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A4.12_T2.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.3_A4.12_T2; -* @section: 11.8.3, 11.8.5; -* @assertion: If neither x, nor y is a prefix of each other, returned result of strings comparison applies a simple lexicographic ordering to the sequences of code point value values; -* @description: x and y are string primitives; -*/ - -//CHECK#1 -if (("0" <= "x") !== true) { - $ERROR('#1: ("0" <= "x") !== true'); -} - -//CHECK#2 -if (("-" <= "0") !== true) { - $ERROR('#2: ("-" <= "0") !== true'); -} - -//CHECK#3 -if (("." <= "0") !== true) { - $ERROR('#3: ("." <= "0") !== true'); -} - -//CHECK#4 -if (("+" <= "-") !== true) { - $ERROR('#4: ("+" <= "-") !== true'); -} - -//CHECK#5 -if (("-0" <= "-1") !== true) { - $ERROR('#5: ("-0" <= "-1") !== true'); -} - -//CHECK#6 -if (("+1" <= "-1") !== true) { - $ERROR('#6: ("+1" <= "-1") !== true'); -} - -//CHECK#7 -if (("1" <= "1e-10") !== true) { -$ERROR('#7: ("1" <= "1e-10") !== true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A4.2.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A4.2.js deleted file mode 100644 index c35d5a8cb..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A4.2.js +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.3_A4.2; -* @section: 11.8.3, 11.8.5; -* @assertion: If y is NaN, return false (if result in 11.8.5 is undefined, return false); -* @description: x is number primitive; -*/ - -//CHECK#1 -if ((0 <= Number.NaN) !== false) { - $ERROR('#1: (0 <= NaN) === false'); -} - -//CHECK#2 -if ((1.1 <= Number.NaN) !== false) { - $ERROR('#2: (1.1 <= NaN) === false'); -} - -//CHECK#3 -if ((-1.1 <= Number.NaN) !== false) { - $ERROR('#3: (-1.1 <= NaN) === false'); -} - -//CHECK#4 -if ((Number.NaN <= Number.NaN) !== false) { - $ERROR('#4: (NaN <= NaN) === false'); -} - -//CHECK#5 -if ((Number.POSITIVE_INFINITY <= Number.NaN) !== false) { - $ERROR('#5: (+Infinity <= NaN) === false'); -} - -//CHECK#6 -if ((Number.NEGATIVE_INFINITY <= Number.NaN) !== false) { - $ERROR('#6: (-Infinity <= NaN) === false'); -} - -//CHECK#7 -if ((Number.MAX_VALUE <= Number.NaN) !== false) { - $ERROR('#7: (Number.MAX_VALUE <= NaN) === false'); -} - -//CHECK#8 -if ((Number.MIN_VALUE <= Number.NaN) !== false) { - $ERROR('#8: (Number.MIN_VALUE <= NaN) === false'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A4.3.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A4.3.js deleted file mode 100644 index 178b67d18..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A4.3.js +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.3_A4.3; -* @section: 11.8.3, 11.8.5; -* @assertion: If x and y are the same number value, return true; -* @description: x and y are number primitives; -*/ - -//CHECK#1 -if ((1 <= 1) !== true) { - $ERROR('#1: (1 <= 1) === true'); -} - -//CHECK#2 -if ((1.1 <= 1.1) !== true) { - $ERROR('#2: (1.1 <= 1.1) === true'); -} - -//CHECK#3 -if ((-1.1 <= -1.1) !== true) { - $ERROR('#3: (-1.1 <= -1.1) === true'); -} - -//CHECK#4 -if ((Number.NEGATIVE_INFINITY <= Number.NEGATIVE_INFINITY) !== true) { - $ERROR('#4: (-Infinity <= -Infinity) === true'); -} - -//CHECK#5 -if ((Number.POSITIVE_INFINITY <= Number.POSITIVE_INFINITY) !== true) { - $ERROR('#5: (+Infinity <= +Infinity) === true'); -} - -//CHECK#6 -if ((Number.MAX_VALUE <= Number.MAX_VALUE) !== true) { - $ERROR('#6: (Number.MAX_VALUE <= Number.MAX_VALUE) === true'); -} - -//CHECK#7 -if ((Number.MIN_VALUE <= Number.MIN_VALUE) !== true) { - $ERROR('#7: (Number.MIN_VALUE <= Number.MIN_VALUE) === true'); -} - - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A4.4.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A4.4.js deleted file mode 100644 index 05a810ccd..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A4.4.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.3_A4.4; -* @section: 11.8.3, 11.8.5; -* @assertion: If either x or y is +0 and the other is -0, return true; -* @description: Checking all combinations; -*/ - -//CHECK#1 -if ((0 <= 0) !== true) { - $ERROR('#1: (0 <= 0) === true'); -} - -//CHECK#2 -if ((-0 <= -0) !== true) { - $ERROR('#2: (-0 <= -0) === true'); -} - -//CHECK#3 -if ((+0 <= -0) !== true) { - $ERROR('#3: (+0 <= -0) === true'); -} - -//CHECK#4 -if ((-0 <= +0) !== true) { - $ERROR('#4: (-0 <= +0) === true'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A4.5.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A4.5.js deleted file mode 100644 index edf1b850e..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A4.5.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.3_A4.5; -* @section: 11.8.3, 11.8.5; -* @assertion: If x is +Infinity and x !== y, return false; -* @description: y is number primitive; -*/ - -//CHECK#1 -if ((Number.POSITIVE_INFINITY <= 0) !== false) { - $ERROR('#1: (+Infinity <= 0) === false'); -} - -//CHECK#2 -if ((Number.POSITIVE_INFINITY <= 1.1) !== false) { - $ERROR('#2: (+Infinity <= 1.1) === false'); -} - -//CHECK#3 -if ((Number.POSITIVE_INFINITY <= -1.1) !== false) { - $ERROR('#3: (+Infinity <= -1.1) === false'); -} - -//CHECK#4 -if ((Number.POSITIVE_INFINITY <= Number.NEGATIVE_INFINITY) !== false) { - $ERROR('#4: (+Infinity <= -Infinity) === false'); -} - -//CHECK#5 -if ((Number.POSITIVE_INFINITY <= Number.MAX_VALUE) !== false) { - $ERROR('#5: (+Infinity <= Number.MAX_VALUE) === false'); -} - -//CHECK#6 -if ((Number.POSITIVE_INFINITY <= Number.MIN_VALUE) !== false) { - $ERROR('#6: (+Infinity <= Number.MIN_VALUE) === false'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A4.6.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A4.6.js deleted file mode 100644 index bfa210542..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A4.6.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.3_A4.6; -* @section: 11.8.3, 11.8.5; -* @assertion: If y is +Infinity and x !== y, return true; -* @description: x is number primitive; -*/ - -//CHECK#1 -if ((0 <= Number.POSITIVE_INFINITY) !== true) { - $ERROR('#1: (0 <= +Infinity) === true'); -} - -//CHECK#2 -if ((1.1 <= Number.POSITIVE_INFINITY) !== true) { - $ERROR('#2: (1.1 <= +Infinity) === true'); -} - -//CHECK#3 -if ((-1.1 <= Number.POSITIVE_INFINITY) !== true) { - $ERROR('#3: (-1.1 <= +Infinity) === true'); -} - -//CHECK#4 -if ((Number.NEGATIVE_INFINITY <= Number.POSITIVE_INFINITY) !== true) { - $ERROR('#4: (-Infinity <= +Infinity) === true'); -} - -//CHECK#5 -if ((Number.MAX_VALUE <= Number.POSITIVE_INFINITY) !== true) { - $ERROR('#5: (Number.MAX_VALUE <= +Infinity) === true'); -} - -//CHECK#6 -if ((Number.MIN_VALUE <= Number.POSITIVE_INFINITY) !== true) { - $ERROR('#6: (Number.MIN_VALUE <= +Infinity) === true'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A4.7.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A4.7.js deleted file mode 100644 index dd05f8dd2..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A4.7.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.3_A4.7; -* @section: 11.8.3, 11.8.5; -* @assertion: If x is -Infinity, return true; -* @description: y is number primitive; -*/ - -//CHECK#1 -if ((Number.NEGATIVE_INFINITY <= 0) !== true) { - $ERROR('#1: (-Infinity <= 0) === true'); -} - -//CHECK#2 -if ((Number.NEGATIVE_INFINITY <= 1.1) !== true) { - $ERROR('#2: (-Infinity <= 1.1) === true'); -} - -//CHECK#3 -if ((Number.NEGATIVE_INFINITY <= -1.1) !== true) { - $ERROR('#3: (-Infinity <= -1.1) === true'); -} - -//CHECK#4 -if ((Number.NEGATIVE_INFINITY <= Number.POSITIVE_INFINITY) !== true) { - $ERROR('#4: (-Infinity <= +Infinity) === true'); -} - -//CHECK#5 -if ((Number.NEGATIVE_INFINITY <= Number.MAX_VALUE) !== true) { - $ERROR('#5: (-Infinity <= Number.MAX_VALUE) === true'); -} - -//CHECK#6 -if ((Number.NEGATIVE_INFINITY <= Number.MIN_VALUE) !== true) { - $ERROR('#6: (-Infinity <= Number.MIN_VALUE) === true'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A4.8.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A4.8.js deleted file mode 100644 index 074b872f7..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A4.8.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.3_A4.8; -* @section: 11.8.3, 11.8.5; -* @assertion: If y is -Infinity and x !== y, return false; -* @description: x is number primitive; -*/ - -//CHECK#1 -if ((0 <= Number.NEGATIVE_INFINITY) !== false) { - $ERROR('#1: (0 <= -Infinity) === false'); -} - -//CHECK#2 -if ((1.1 <= Number.NEGATIVE_INFINITY) !== false) { - $ERROR('#2: (1.1 <= -Infinity) === false'); -} - -//CHECK#3 -if ((-1.1 <= Number.NEGATIVE_INFINITY) !== false) { - $ERROR('#3: (-1.1 <= -Infinity) === false'); -} - -//CHECK#4 -if ((Number.POSITIVE_INFINITY <= Number.NEGATIVE_INFINITY) !== false) { - $ERROR('#4: (+Infinity <= -Infinity) === false'); -} - -//CHECK#5 -if ((Number.MAX_VALUE <= Number.NEGATIVE_INFINITY) !== false) { - $ERROR('#5: (Number.MAX_VALUE <= -Infinity) === false'); -} - -//CHECK#6 -if ((Number.MIN_VALUE <= Number.NEGATIVE_INFINITY) !== false) { - $ERROR('#6: (Number.MIN_VALUE <= -Infinity) === false'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A4.9.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A4.9.js deleted file mode 100644 index b87947fd4..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.3_The_Less_than_or_equal_Operator/S11.8.3_A4.9.js +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.3_A4.9; -* @section: 11.8.3, 11.8.5; -* @assertion: If x is less or equal than y and these values are both finite non-zero, return true; otherwise, return false; -* @description: x and y are number primitives; -*/ - -//CHECK#1 -if ((1.1 <= 1) !== false) { - $ERROR('#1: (1.1 <= 1) === false'); -} - -//CHECK#2 -if ((1 <= 1.1) !== true) { - $ERROR('#2: (1 <= 1.1) === true'); -} - -//CHECK#3 -if ((-1.1 <= -1) !== true) { - $ERROR('#3: (-1.1 <= -1) === true'); -} - -//CHECK#4 -if ((-1 <= -1.1) !== false) { - $ERROR('#4: (-1 <= -1.1) === false'); -} - -//CHECK#5 -if ((0 <= 0.1) !== true) { - $ERROR('#5: (0 <= 0.1) === true'); -} - -//CHECK#6 -if ((-0.1 <= 0) !== true) { - $ERROR('#6: (-0.1 <= 0) === true'); -} - -//CHECK#7 -if ((Number.MAX_VALUE/2 <= Number.MAX_VALUE) !== true) { - $ERROR('#7: (Number.MAX_VALUE/2 <= Number.MAX_VALUE) === true'); -} - -//CHECK#8 -if ((Number.MIN_VALUE <= Number.MIN_VALUE*2) !== true) { - $ERROR('#8: (Number.MIN_VALUE <= Number.MIN_VALUE*2) === true'); -} - - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A1.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A1.js deleted file mode 100644 index 9403e0073..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A1.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.4_A1; -* @section: 11.8.4, 7.2, 7.3; -* @assertion: White Space and Line Terminator between RelationalExpression and "=>" or "=>" and ShiftExpression are allowed; -* @description: Checking by using eval; -*/ - -//CHECK#1 -if (eval("1\u0009>=\u00091") !== true) { - $ERROR('#1: (1\\u0009>=\\u00091) === true'); -} - -//CHECK#2 -if (eval("1\u000B>=\u000B1") !== true) { - $ERROR('#2: (1\\u000B>=\\u000B1) === true'); -} - -//CHECK#3 -if (eval("1\u000C>=\u000C1") !== true) { - $ERROR('#3: (1\\u000C>=\\u000C1) === true'); -} - -//CHECK#4 -if (eval("1\u0020>=\u00201") !== true) { - $ERROR('#4: (1\\u0020>=\\u00201) === true'); -} - -//CHECK#5 -if (eval("1\u00A0>=\u00A01") !== true) { - $ERROR('#5: (1\\u00A0>=\\u00A01) === true'); -} - -//CHECK#6 -if (eval("1\u000A>=\u000A1") !== true) { - $ERROR('#6: (1\\u000A>=\\u000A1) === true'); -} - -//CHECK#7 -if (eval("1\u000D>=\u000D1") !== true) { - $ERROR('#7: (1\\u000D>=\\u000D1) === true'); -} - -//CHECK#8 -if (eval("1\u2028>=\u20281") !== true) { - $ERROR('#8: (1\\u2028>=\\u20281) === true'); -} - -//CHECK#9 -if (eval("1\u2029>=\u20291") !== true) { - $ERROR('#9: (1\\u2029>=\\u20291) === true'); -} - -//CHECK#10 -if (eval("1\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029>=\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20291") !== true) { - $ERROR('#10: (1\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029>=\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20291) === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A2.1_T1.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A2.1_T1.js deleted file mode 100644 index 9451db9e1..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A2.1_T1.js +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.4_A2.1_T1; -* @section: 11.8.4, 11.8.5; -* @assertion: Operator x >= y uses GetValue; -* @description: Either Type is not Reference or GetBase is not null; -*/ - -//CHECK#1 -if (1 >= 1 !== true) { - $ERROR('#1: 1 >= 1 === true'); -} - -//CHECK#2 -var x = 1; -if (x >= 1 !== true) { - $ERROR('#2: var x = 1; x >= 1 === true'); -} - -//CHECK#3 -var y = 1; -if (1 >= y !== true) { - $ERROR('#3: var y = 1; 1 >= y === true'); -} - -//CHECK#4 -var x = 1; -var y = 1; -if (x >= y !== true) { - $ERROR('#4: var x = 1; var y = 1; x >= y === true'); -} - -//CHECK#5 -var objectx = new Object(); -var objecty = new Object(); -objectx.prop = 1; -objecty.prop = 1; -if (objectx.prop >= objecty.prop !== true) { - $ERROR('#5: var objectx = new Object(); var objecty = new Object(); objectx.prop = 1; objecty.prop = 1; objectx.prop >= objecty.prop === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A2.1_T2.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A2.1_T2.js deleted file mode 100644 index fbd86a0d4..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A2.1_T2.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.4_A2.1_T2; - * @section: 11.8.4, 11.8.5; - * @assertion: Operator x >= y uses GetValue; - * @description: If GetBase(x) is null, throw ReferenceError; -*/ - -//CHECK#1 -try { - x >= 1; - $ERROR('#1.1: x >= 1 throw ReferenceError. Actual: ' + (x >= 1)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: x >= 1 throw ReferenceError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A2.1_T3.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A2.1_T3.js deleted file mode 100644 index 1be8779f0..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A2.1_T3.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.4_A2.1_T3; - * @section: 11.8.4, 11.8.5; - * @assertion: Operator x >= y uses GetValue; - * @description: If GetBase(y) is null, throw ReferenceError; -*/ - -//CHECK#1 -try { - 1 >= y; - $ERROR('#1.1: 1 >= y throw ReferenceError. Actual: ' + (1 >= y)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: 1 >= y throw ReferenceError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A2.2_T1.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A2.2_T1.js deleted file mode 100644 index 762957595..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A2.2_T1.js +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.4_A2.2_T1; - * @section: 11.8.4, 8.6.2.6; - * @assertion: Operator x >= y uses [[Default Value]]; - * @description: If Type(value) is Object, evaluate ToPrimitive(value, Number); - */ - -//CHECK#1 -if ({valueOf: function() {return 2}} >= 1 !== true) { - $ERROR('#1: {valueOf: function() {return 1}} >= 1 === true. Actual: ' + ({valueOf: function() {return 1}} >= 1)); -} - -//CHECK#2 -if ({valueOf: function() {return 2}, toString: function() {return 0}} >= 1 !== true) { - $ERROR('#2: {valueOf: function() {return 1}, toString: function() {return 2}} >= 1 === true. Actual: ' + ({valueOf: function() {return 1}, toString: function() {return 2}} >= 1)); -} - -//CHECK#3 -if ({valueOf: function() {return 2}, toString: function() {return {}}} >= 1 !== true) { - $ERROR('#3: {valueOf: function() {return 1}, toString: function() {return {}}} >= 1 === true. Actual: ' + ({valueOf: function() {return 1}, toString: function() {return {}}} >= 1)); -} - -//CHECK#4 -try { - if ({valueOf: function() {return 2}, toString: function() {throw "error"}} >= 1 !== true) { - $ERROR('#4.1: {valueOf: function() {return 1}, toString: function() {throw "error"}} >= 1 === true. Actual: ' + ({valueOf: function() {return 1}, toString: function() {throw "error"}} >= 1)); - } -} -catch (e) { - if (e === "error") { - $ERROR('#4.2: {valueOf: function() {return 2}, toString: function() {throw "error"}} >= 1 not throw "error"'); - } else { - $ERROR('#4.3: {valueOf: function() {return 2}, toString: function() {throw "error"}} >= 1 not throw Error. Actual: ' + (e)); - } -} - -//CHECK#5 -if (1 >= {toString: function() {return 0}} !== true) { - $ERROR('#5: 1 >= {toString: function() {return 0}} === true. Actual: ' + (1 >= {toString: function() {return 0}})); -} - -//CHECK#6 -if (1 >= {valueOf: function() {return {}}, toString: function() {return 0}} !== true) { - $ERROR('#6: 1 >= {valueOf: function() {return {}}, toString: function() {return 0}} === true. Actual: ' + (1 >= {valueOf: function() {return {}}, toString: function() {return 0}})); -} - -//CHECK#7 -try { - 1 >= {valueOf: function() {throw "error"}, toString: function() {return 0}}; - $ERROR('#7.1: 1 >= {valueOf: function() {throw "error"}, toString: function() {return 0}} throw "error". Actual: ' + (1 >= {valueOf: function() {throw "error"}, toString: function() {return 0}})); -} -catch (e) { - if (e !== "error") { - $ERROR('#7.2: 1 >= {valueOf: function() {throw "error"}, toString: function() {return 0}} throw "error". Actual: ' + (e)); - } -} - -//CHECK#8 -try { - 1 >= {valueOf: function() {return {}}, toString: function() {return {}}}; - $ERROR('#8.1: 1 >= {valueOf: function() {return {}}, toString: function() {return {}}} throw TypeError. Actual: ' + (1 >= {valueOf: function() {return {}}, toString: function() {return {}}})); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#8.2: 1 >= {valueOf: function() {return {}}, toString: function() {return {}}} throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A2.3_T1.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A2.3_T1.js deleted file mode 100644 index a3ee44f9b..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A2.3_T1.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.4_A2.3_T1; - * @section: 11.8.4; - * @assertion: ToNumber(first expression) is called first, and then ToNumber(second expression); - * @description: Checking with "throw"; -*/ - -//CHECK#1 -var x = { valueOf: function () { throw "x"; } }; -var y = { valueOf: function () { throw "y"; } }; -try { - x >= y; - $ERROR('#1.1: var x = { valueOf: function () { throw "x"; } }; var y = { valueOf: function () { throw "y"; } }; x >= y throw "x". Actual: ' + (x >= y)); -} catch (e) { - if (e === "y") { - $ERROR('#1.2: ToNumber(first expression) is called first, and then ToNumber(second expression)'); - } else { - if (e !== "x") { - $ERROR('#1.3: var x = { valueOf: function () { throw "x"; } }; var y = { valueOf: function () { throw "y"; } }; x >= y throw "x". Actual: ' + (e)); - } - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A2.4_T1.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A2.4_T1.js deleted file mode 100644 index b0e9c1cc9..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A2.4_T1.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.4_A2.4_T1; - * @section: 11.8.4; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with "="; -*/ - -//CHECK#1 -var x = 1; -if ((x = 0) >= x !== true) { - $ERROR('#1: var x = 1; (x = 0) >= x === true'); -} - -//CHECK#2 -var x = 0; -if (x >= (x = 1) !== false) { - $ERROR('#2: var x = 0; x >= (x = 1) === false'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A2.4_T2.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A2.4_T2.js deleted file mode 100644 index 11250f560..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A2.4_T2.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.4_A2.4_T2; - * @section: 11.8.4; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with "throw"; -*/ - -//CHECK#1 -var x = function () { throw "x"; }; -var y = function () { throw "y"; }; -try { - x() >= y(); - $ERROR('#1.1: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() >= y() throw "x". Actual: ' + (x() >= y())); -} catch (e) { - if (e === "y") { - $ERROR('#1.2: First expression is evaluated first, and then second expression'); - } else { - if (e !== "x") { - $ERROR('#1.3: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() >= y() throw "x". Actual: ' + (e)); - } - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A2.4_T3.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A2.4_T3.js deleted file mode 100644 index 57016dfb1..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A2.4_T3.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.4_A2.4_T3; - * @section: 11.8.4; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with undeclarated variables; -*/ - -//CHECK#1 -try { - x >= (x = 1); - $ERROR('#1.1: x >= (x = 1) throw ReferenceError. Actual: ' + (x >= (x = 1))); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: x >= (x = 1) throw ReferenceError. Actual: ' + (e)); - } -} - -//CHECK#2 -if ((y = 1) >= y !== true) { - $ERROR('#2: (y = 1) >= y === true'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A3.1_T1.1.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A3.1_T1.1.js deleted file mode 100644 index 30bff4796..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A3.1_T1.1.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.4_A3.1_T1.1; - * @section: 11.8.4; - * @assertion: If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x >= y returns ToNumber(x) >= ToNumber(y); - * @description: Type(Primitive(x)) and Type(Primitive(y)) vary between primitive boolean and Boolean object; - */ - -//CHECK#1 -if (true >= true !== true) { - $ERROR('#1: true >= true === true'); -} - -//CHECK#2 -if (new Boolean(true) >= true !== true) { - $ERROR('#2: new Boolean(true) >= true === true'); -} - -//CHECK#3 -if (true >= new Boolean(true) !== true) { - $ERROR('#3: true >= new Boolean(true) === true'); -} - -//CHECK#4 -if (new Boolean(true) >= new Boolean(true) !== true) { - $ERROR('#4: new Boolean(true) >= new Boolean(true) === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A3.1_T1.2.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A3.1_T1.2.js deleted file mode 100644 index 77e44b155..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A3.1_T1.2.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.4_A3.1_T1.2; - * @section: 11.8.4; - * @assertion: If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x >= y returns ToNumber(x) >= ToNumber(y); - * @description: Type(Primitive(x)) and Type(Primitive(y)) vary between primitive number and Number object; -*/ - -//CHECK#1 -if (1 >= 1 !== true) { - $ERROR('#1: 1 >= 1 === true'); -} - -//CHECK#2 -if (new Number(1) >= 1 !== true) { - $ERROR('#2: new Number(1) >= 1 === true'); -} - -//CHECK#3 -if (1 >= new Number(1) !== true) { - $ERROR('#3: 1 >= new Number(1) === true'); -} - -//CHECK#4 -if (new Number(1) >= new Number(1) !== true) { - $ERROR('#4: new Number(1) >= new Number(1) === true'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A3.1_T1.3.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A3.1_T1.3.js deleted file mode 100644 index f3977baf1..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A3.1_T1.3.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.4_A3.1_T1.3; - * @section: 11.8.4; - * @assertion: If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x >= y returns ToNumber(x) >= ToNumber(y); - * @description: Type(Primitive(x)) and Type(Primitive(y)) vary between Null and Undefined; - */ - -//CHECK#1 -if (null >= undefined !== false) { - $ERROR('#1: null >= undefined === false'); -} - -//CHECK#2 -if (undefined >= null !== false) { - $ERROR('#2: undefined >= null === false'); -} - -//CHECK#3 -if (undefined >= undefined !== false) { - $ERROR('#3: undefined >= undefined === false'); -} - -//CHECK#4 -if (null >= null !== true) { - $ERROR('#4: null >= null === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A3.1_T2.1.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A3.1_T2.1.js deleted file mode 100644 index 4e8f97587..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A3.1_T2.1.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.4_A3.1_T2.1; - * @section: 11.8.4; - * @assertion: If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x >= y returns ToNumber(x) >= ToNumber(y); - * @description: Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between Number (primitive or object) and Boolean (primitive and object); - */ - -//CHECK#1 -if (true >= 1 !== true) { - $ERROR('#1: true >= 1 === true'); -} - -//CHECK#2 -if (1 >= true !== true) { - $ERROR('#2: 1 >= true === true'); -} - -//CHECK#3 -if (new Boolean(true) >= 1 !== true) { - $ERROR('#3: new Boolean(true) >= 1 === true'); -} - -//CHECK#4 -if (1 >= new Boolean(true) !== true) { - $ERROR('#4: 1 >= new Boolean(true) === true'); -} - -//CHECK#5 -if (true >= new Number(1) !== true) { - $ERROR('#5: true >= new Number(1) === true'); -} - -//CHECK#6 -if (new Number(1) >= true !== true) { - $ERROR('#6: new Number(1) >= true === true'); -} - -//CHECK#7 -if (new Boolean(true) >= new Number(1) !== true) { - $ERROR('#7: new Boolean(true) >= new Number(1) === true'); -} - -//CHECK#8 -if (new Number(1) >= new Boolean(true) !== true) { - $ERROR('#8: new Number(1) >= new Boolean(true) === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A3.1_T2.2.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A3.1_T2.2.js deleted file mode 100644 index d93a54e8b..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A3.1_T2.2.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.4_A3.1_T2.2; - * @section: 11.8.4; - * @assertion: If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x >= y returns ToNumber(x) >= ToNumber(y); - * @description: Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between Number (primitive or object) and String (primitive and object); -*/ - -//CHECK#1 -if ("1" >= 1 !== true) { - $ERROR('#1: "1" >= 1 === true'); -} - -//CHECK#2 -if (1 >= "1" !== true) { - $ERROR('#2: 1 >= "1" === true'); -} - -//CHECK#3 -if (new String("1") >= 1 !== true) { - $ERROR('#3: new String("1") >= 1 === true'); -} - -//CHECK#4 -if (1 >= new String("1") !== true) { - $ERROR('#4: 1 >= new String("1") === true'); -} - -//CHECK#5 -if ("1" >= new Number(1) !== true) { - $ERROR('#5: "1" >= new Number(1) === true'); -} - -//CHECK#6 -if (new Number(1) >= "1" !== true) { - $ERROR('#6: new Number(1) >= "1" === true'); -} - -//CHECK#7 -if (new String("1") >= new Number(1) !== true) { - $ERROR('#7: new String("1") >= new Number(1) === true'); -} - -//CHECK#8 -if (new Number(1) >= new String("1") !== true) { - $ERROR('#8: new Number(1) >= new String("1") === true'); -} - -//CHECK#9 -if ("x" >= 1 !== false) { - $ERROR('#9: "x" >= 1 === false'); -} - -//CHECK#10 -if (1 >= "x" !== false) { - $ERROR('#10: 1 >= "x" === false'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A3.1_T2.3.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A3.1_T2.3.js deleted file mode 100644 index 3975f680f..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A3.1_T2.3.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.4_A3.1_T2.3; - * @section: 11.8.4; - * @assertion: If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x >= y returns ToNumber(x) >= ToNumber(y); - * @description: Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between Number (primitive or object) and Null; - */ - -//CHECK#1 -if (1 >= null !== true) { - $ERROR('#1: 1 >= null === true'); -} - -//CHECK#2 -if (null >= 1 !== false) { - $ERROR('#2: null >= 1 === false'); -} - -//CHECK#3 -if (new Number(1) >= null !== true) { - $ERROR('#3: new Number(1) >= null === true'); -} - -//CHECK#4 -if (null >= new Number(1) !== false) { - $ERROR('#4: null >= new Number(1) === false'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A3.1_T2.4.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A3.1_T2.4.js deleted file mode 100644 index b860593ce..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A3.1_T2.4.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.4_A3.1_T2.4; - * @section: 11.8.4; - * @assertion: If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x >= y returns ToNumber(x) >= ToNumber(y); - * @description: Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between Number (primitive or object) and Undefined; - */ - -//CHECK#1 -if (1 >= undefined !== false) { - $ERROR('#1: 1 >= undefined === false'); -} - -//CHECK#2 -if (undefined >= 1 !== false) { - $ERROR('#2: undefined >= 1 === false'); -} - -//CHECK#3 -if (new Number(1) >= undefined !== false) { - $ERROR('#3: new Number(1) >= undefined === false'); -} - -//CHECK#4 -if (undefined >= new Number(1) !== false) { - $ERROR('#4: undefined >= new Number(1) === false'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A3.1_T2.5.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A3.1_T2.5.js deleted file mode 100644 index 10de8929c..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A3.1_T2.5.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.4_A3.1_T2.5; - * @section: 11.8.4; - * @assertion: If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x >= y returns ToNumber(x) >= ToNumber(y); - * @description: Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between String (primitive or object) and Boolean (primitive and object); -*/ - -//CHECK#1 -if (true >= "1" !== true) { - $ERROR('#1: true >= "1" === true'); -} - -//CHECK#2 -if ("1" >= true !== true) { - $ERROR('#2: "1" >= true === true'); -} - -//CHECK#3 -if (new Boolean(true) >= "1" !== true) { - $ERROR('#3: new Boolean(true) >= "1" === true'); -} - -//CHECK#4 -if ("1" >= new Boolean(true) !== true) { - $ERROR('#4: "1" >= new Boolean(true) === true'); -} - -//CHECK#5 -if (true >= new String("1") !== true) { - $ERROR('#5: true >= new String("1") === true'); -} - -//CHECK#6 -if (new String("1") >= true !== true) { - $ERROR('#6: new String("1") >= true === true'); -} - -//CHECK#7 -if (new Boolean(true) >= new String("1") !== true) { - $ERROR('#7: new Boolean(true) >= new String("1") === true'); -} - -//CHECK#8 -if (new String("1") >= new Boolean(true) !== true) { - $ERROR('#8: new String("1") >= new Boolean(true) === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A3.1_T2.6.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A3.1_T2.6.js deleted file mode 100644 index d1633e1eb..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A3.1_T2.6.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.4_A3.1_T2.6; - * @section: 11.8.4; - * @assertion: If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x >= y returns ToNumber(x) >= ToNumber(y); - * @description: Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between String (primitive or object) and Undefined; - */ - -//CHECK#1 -if ("1" >= undefined !== false) { - $ERROR('#1: "1" >= undefined === false'); -} - -//CHECK#2 -if (undefined >= "1" !== false) { - $ERROR('#2: undefined >= "1" === false'); -} - -//CHECK#3 -if (new String("1") >= undefined !== false) { - $ERROR('#3: new String("1") >= undefined === false'); -} - -//CHECK#4 -if (undefined >= new String("1") !== false) { - $ERROR('#4: undefined >= new String("1") === false'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A3.1_T2.7.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A3.1_T2.7.js deleted file mode 100644 index a4ef97ee0..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A3.1_T2.7.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.4_A3.1_T2.7; - * @section: 11.8.4; - * @assertion: If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x >= y returns ToNumber(x) >= ToNumber(y); - * @description: Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between String (primitive or object) and Null; - */ - -//CHECK#1 -if ("1" >= null !== true) { - $ERROR('#1: "1" >= null === true'); -} - -//CHECK#2 -if (null >= "1" !== false) { - $ERROR('#2: null >= "1" === false'); -} - -//CHECK#3 -if (new String("1") >= null !== true) { - $ERROR('#3: new String("1") >= null === true'); -} - -//CHECK#4 -if (null >= new String("1") !== false) { - $ERROR('#4: null >= new String("1") === false'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A3.1_T2.8.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A3.1_T2.8.js deleted file mode 100644 index eee04b22e..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A3.1_T2.8.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.4_A3.1_T2.8; - * @section: 11.8.4; - * @assertion: If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x >= y returns ToNumber(x) >= ToNumber(y); - * @description: Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between Boolean (primitive or object) and Undefined; - */ - -//CHECK#1 -if (true >= undefined !== false) { - $ERROR('#1: true >= undefined === false'); -} - -//CHECK#2 -if (undefined >= true !== false) { - $ERROR('#2: undefined >= true === false'); -} - -//CHECK#3 -if (new Boolean(true) >= undefined !== false) { - $ERROR('#3: new Boolean(true) >= undefined === false'); -} - -//CHECK#4 -if (undefined >= new Boolean(true) !== false) { - $ERROR('#4: undefined >= new Boolean(true) === false'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A3.1_T2.9.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A3.1_T2.9.js deleted file mode 100644 index 041ab7b00..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A3.1_T2.9.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.4_A3.1_T2.9; - * @section: 11.8.4; - * @assertion: If Type(Primitive(x)) is not String or Type(Primitive(y)) is not String, then operator x >= y returns ToNumber(x) >= ToNumber(y); - * @description: Type(Primitive(x)) is different from Type(Primitive(y)) and both types vary between Boolean (primitive or object) and Null; - */ - -//CHECK#1 -if (true >= null !== true) { - $ERROR('#1: true >= null === true'); -} - -//CHECK#2 -if (null >= true !== false) { - $ERROR('#2: null >= true === false'); -} - -//CHECK#3 -if (new Boolean(true) >= null !== true) { - $ERROR('#3: new Boolean(true) >= null === true'); -} - -//CHECK#4 -if (null >= new Boolean(true) !== false) { - $ERROR('#4: null >= new Boolean(true) === false'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A3.2_T1.1.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A3.2_T1.1.js deleted file mode 100644 index 8dad32cf8..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A3.2_T1.1.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.4_A3.2_T1.1; - * @section: 11.8.4; - * @assertion: Operator x >= y returns ToString(x) >= ToString(y), if Type(Primitive(x)) is String and Type(Primitive(y)) is String; - * @description: Type(Primitive(x)) and Type(Primitive(y)) vary between primitive string and String object; -*/ - -//CHECK#1 -if ("1" >= "1" !== true) { - $ERROR('#1: "1" >= "1" === true'); -} - -//CHECK#2 -if (new String("1") >= "1" !== true) { - $ERROR('#2: new String("1") >= "1" === true'); -} - -//CHECK#3 -if ("1" >= new String("1") !== true) { - $ERROR('#3: "1" >= new String("1") === true'); -} - -//CHECK#4 -if (new String("1") >= new String("1") !== true) { - $ERROR('#4: new String("1") >= new String("1") === true'); -} - -//CHECK#5 -if ("x" >= "1" !== true) { - $ERROR('#5: "x" >= "1" === true'); -} - -//CHECK#6 -if ("1" >= "x" !== false) { - $ERROR('#6: "1" >= "x" === false'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A3.2_T1.2.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A3.2_T1.2.js deleted file mode 100644 index 9b5503612..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A3.2_T1.2.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.4_A3.2_T1.2; - * @section: 11.8.4; - * @assertion: Operator x >= y returns ToString(x) >= ToString(y), if Type(Primitive(x)) is String and Type(Primitive(y)) is String; - * @description: Type(Primitive(x)) and Type(Primitive(y)) vary between Object object and Function object; - */ - -//CHECK#1 -if (({} >= function(){return 1}) !== ({}.toString() >= function(){return 1}.toString())) { - $ERROR('#1: ({} >= function(){return 1}) === ({}.toString() >= function(){return 1}.toString())'); -} - -//CHECK#2 -if ((function(){return 1} >= {}) !== (function(){return 1}.toString() >= {}.toString())) { - $ERROR('#2: (function(){return 1} >= {}) === (function(){return 1}.toString() >= {}.toString())'); -} - -//CHECK#3 -if ((function(){return 1} >= function(){return 1}) !== (function(){return 1}.toString() >= function(){return 1}.toString())) { - $ERROR('#3: (function(){return 1} >= function(){return 1}) === (function(){return 1}.toString() >= function(){return 1}.toString())'); -} - -//CHECK#4 -if (({} >= {}) !== ({}.toString() >= {}.toString())) { - $ERROR('#4: ({} >= {}) === ({}.toString() >= {}.toString())'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A4.1.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A4.1.js deleted file mode 100644 index 8cae53768..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A4.1.js +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.4_A4.1; -* @section: 11.8.4, 11.8.5; -* @assertion: If x is NaN, return false (if result in 11.8.5 is undefined, return false); -* @description: y is number primitive; -*/ - -//CHECK#1 -if ((Number.NaN >= 0) !== false) { - $ERROR('#1: (NaN >= 0) === false'); -} - -//CHECK#2 -if ((Number.NaN >= 1.1) !== false) { - $ERROR('#2: (NaN >= 1.1) === false'); -} - -//CHECK#3 -if ((Number.NaN >= -1.1) !== false) { - $ERROR('#3: (NaN >= -1.1) === false'); -} - -//CHECK#4 -if ((Number.NaN >= Number.NaN) !== false) { - $ERROR('#4: (NaN >= NaN) === false'); -} - -//CHECK#5 -if ((Number.NaN >= Number.POSITIVE_INFINITY) !== false) { - $ERROR('#5: (NaN >= +Infinity) === false'); -} - -//CHECK#6 -if ((Number.NaN >= Number.NEGATIVE_INFINITY) !== false) { - $ERROR('#6: (NaN >= -Infinity) === false'); -} - -//CHECK#7 -if ((Number.NaN >= Number.MAX_VALUE) !== false) { - $ERROR('#7: (NaN >= Number.MAX_VALUE) === false'); -} - -//CHECK#8 -if ((Number.NaN >= Number.MIN_VALUE) !== false) { - $ERROR('#8: (NaN >= Number.MIN_VALUE) === false'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A4.10.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A4.10.js deleted file mode 100644 index e754ddece..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A4.10.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.4_A4.10; -* @section: 11.8.4, 11.8.5; -* @assertion: If x is a prefix of y and x !== y, return false; -* @description: x and y are string primitives; -*/ - -//CHECK#1 -if (("x" >= "x ") !== false) { - $ERROR('#1: ("x" >= "x ") === false'); -} - -//CHECK#2 -if (("" >= "x") !== false) { - $ERROR('#2: ("" >= "x") === false'); -} - -//CHECK#3 -if (("ab" >= "abcd") !== false) { - $ERROR('#3: ("ab" >= abcd") === false'); -} - -//CHECK#4 -if (("abcd" >= "abc\u0064") !== true) { - $ERROR('#4: ("abcd" >= abc\\u0064") === true'); -} - -//CHECK#5 -if (("x" >= "x" + "y") !== false) { - $ERROR('#5: ("x" >= "x" + "y") === false'); -} - -//CHECK#6 -var x = "x"; -if ((x >= x + "y") !== false) { - $ERROR('#6: var x = "x"; (x >= x + "y") === false'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A4.11.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A4.11.js deleted file mode 100644 index fa80b90eb..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A4.11.js +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.4_A4.11; -* @section: 11.8.4, 11.8.5; -* @assertion: If y is a prefix of x, return true; -* @description: x and y are string primitives; -*/ - -//CHECK#1 -if (("x" >= "x") !== true) { - $ERROR('#1: ("x" >= "x") === true'); -} - -//CHECK#2 -if (("x" >= "") !== true) { - $ERROR('#2: ("x" >= "") === true'); -} - -//CHECK#3 -if (("abcd" >= "ab") !== true) { - $ERROR('#3: ("abcd" >= ab") === true'); -} - -//CHECK#4 -if (("abc\u0064" >= "abcd") !== true) { - $ERROR('#4: ("abc\\u0064" >= abc") === true'); -} - -//CHECK#5 -if (("x" + "y" >= "x") !== true) { - $ERROR('#5: ("x" + "y" >= "x") === true'); -} - -//CHECK#6 -var x = "x"; -if ((x + 'y' >= x) !== true) { - $ERROR('#6: var x = "x"; (x + "y" >= x) === true'); -} - -//CHECK#7 -if (("a\u0000a" >= "a\u0000") !== true) { - $ERROR('#7: ("a\\u0000a" >= "a\\u0000") === true'); -} - -//CHECK#8 -if ((" x" >= "x") !== false) { - $ERROR('#8: (" x" >= "x") === false'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A4.12_T1.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A4.12_T1.js deleted file mode 100644 index 676adedd2..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A4.12_T1.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.4_A4.12_T1; -* @section: 11.8.4, 11.8.5; -* @assertion: If neither x, nor y is a prefix of each other, returned result of strings comparison applies a simple lexicographic ordering to the sequences of code point value values; -* @description: x and y are string primitives; -*/ - -//CHECK#1 -if (("xy" >= "xx") !== true) { - $ERROR('#1: ("xy" >= "xx") === true'); -} - -//CHECK#2 -if (("xx" >= "xy") !== false) { - $ERROR('#2: ("xx" >= "xy") === false'); -} - -//CHECK#3 -if (("y" >= "x") !== true) { - $ERROR('#3: ("y" >= "x") === true'); -} - -//CHECK#4 -if (("aba" >= "aab") !== true) { - $ERROR('#4: ("aba" >= aab") === true'); -} - -//CHECK#5 -if (("\u0061\u0061\u0061\u0061" >= "\u0061\u0061\u0061\u0062") !== false) { - $ERROR('#5: ("\\u0061\\u0061\\u0061\\u0061" >= \\u0061\\u0061\\u0061\\u0062") === false'); -} - -//CHECK#6 -if (("a\u0000b" >= "a\u0000a") !== true) { - $ERROR('#6: ("a\\u0000b" >= "a\\u0000a") === true'); -} - -//CHECK#7 -if (("aa" >= "aB") !== true) { - $ERROR('#7: ("aa" >= aB") === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A4.12_T2.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A4.12_T2.js deleted file mode 100644 index 014924451..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A4.12_T2.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.4_A4.12_T2; -* @section: 11.8.4, 11.8.5; -* @assertion: If neither x, nor y is a prefix of each other, returned result of strings comparison applies a simple lexicographic ordering to the sequences of code point value values; -* @description: x and y are string primitives; -*/ - -//CHECK#1 -if (("x" >= "0") !== true) { - $ERROR('#1: ("x" >= "0") !== true'); -} - -//CHECK#2 -if (("0" >= "-") !== true) { - $ERROR('#2: ("0" >= "-") !== true'); -} - -//CHECK#3 -if (("0" >= ".") !== true) { - $ERROR('#3: ("0" >= ".") !== true'); -} - -//CHECK#4 -if (("-" >= "+") !== true) { - $ERROR('#4: ("-" >= "+") !== true'); -} - -//CHECK#5 -if (("-1" >= "-0") !== true) { - $ERROR('#5: ("-1" >= "-0") !== true'); -} - -//CHECK#6 -if (("-1" >= "+1") !== true) { - $ERROR('#6: ("-1" >= "+1") !== true'); -} - -//CHECK#7 -if (("1e-10" >= "1") !== true) { -$ERROR('#7: ("1e-10" >= "1") !== true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A4.2.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A4.2.js deleted file mode 100644 index 0881d92f3..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A4.2.js +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.4_A4.2; -* @section: 11.8.4, 11.8.5; -* @assertion: If y is NaN, return false (if result in 11.8.5 is undefined, return false); -* @description: x is number primitive; -*/ - -//CHECK#1 -if ((0 >= Number.NaN) !== false) { - $ERROR('#1: (0 >= NaN) === false'); -} - -//CHECK#2 -if ((1.1 >= Number.NaN) !== false) { - $ERROR('#2: (1.1 >= NaN) === false'); -} - -//CHECK#3 -if ((-1.1 >= Number.NaN) !== false) { - $ERROR('#3: (-1.1 >= NaN) === false'); -} - -//CHECK#4 -if ((Number.NaN >= Number.NaN) !== false) { - $ERROR('#4: (NaN >= NaN) === false'); -} - -//CHECK#5 -if ((Number.POSITIVE_INFINITY >= Number.NaN) !== false) { - $ERROR('#5: (+Infinity >= NaN) === false'); -} - -//CHECK#6 -if ((Number.NEGATIVE_INFINITY >= Number.NaN) !== false) { - $ERROR('#6: (-Infinity >= NaN) === false'); -} - -//CHECK#7 -if ((Number.MAX_VALUE >= Number.NaN) !== false) { - $ERROR('#7: (Number.MAX_VALUE >= NaN) === false'); -} - -//CHECK#8 -if ((Number.MIN_VALUE >= Number.NaN) !== false) { - $ERROR('#8: (Number.MIN_VALUE >= NaN) === false'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A4.3.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A4.3.js deleted file mode 100644 index 556c1337c..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A4.3.js +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.4_A4.3; -* @section: 11.8.4, 11.8.5; -* @assertion: If x and y are the same number value, return true; -* @description: x and y are number primitives; -*/ - -//CHECK#1 -if ((1 >= 1) !== true) { - $ERROR('#1: (1 >= 1) === true'); -} - -//CHECK#2 -if ((1.1 >= 1.1) !== true) { - $ERROR('#2: (1.1 >= 1.1) === true'); -} - -//CHECK#3 -if ((-1.1 >= -1.1) !== true) { - $ERROR('#3: (-1.1 >= -1.1) === true'); -} - -//CHECK#4 -if ((Number.NEGATIVE_INFINITY >= Number.NEGATIVE_INFINITY) !== true) { - $ERROR('#4: (-Infinity >= -Infinity) === true'); -} - -//CHECK#5 -if ((Number.POSITIVE_INFINITY >= Number.POSITIVE_INFINITY) !== true) { - $ERROR('#5: (+Infinity >= +Infinity) === true'); -} - -//CHECK#6 -if ((Number.MAX_VALUE >= Number.MAX_VALUE) !== true) { - $ERROR('#6: (Number.MAX_VALUE >= Number.MAX_VALUE) === true'); -} - -//CHECK#7 -if ((Number.MIN_VALUE >= Number.MIN_VALUE) !== true) { - $ERROR('#7: (Number.MIN_VALUE >= Number.MIN_VALUE) === true'); -} - - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A4.4.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A4.4.js deleted file mode 100644 index f5694a6af..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A4.4.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.4_A4.4; -* @section: 11.8.4, 11.8.5; -* @assertion: If either x or y is +0 and the other is -0, return true; -* @description: Checking all combinations; -*/ - -//CHECK#1 -if ((0 >= 0) !== true) { - $ERROR('#1: (0 >= 0) === true'); -} - -//CHECK#2 -if ((-0 >= -0) !== true) { - $ERROR('#2: (-0 >= -0) === true'); -} - -//CHECK#3 -if ((+0 >= -0) !== true) { - $ERROR('#3: (+0 >= -0) === true'); -} - -//CHECK#4 -if ((-0 >= +0) !== true) { - $ERROR('#4: (-0 >= +0) === true'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A4.5.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A4.5.js deleted file mode 100644 index 1ae107c95..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A4.5.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.4_A4.5; -* @section: 11.8.4, 11.8.5; -* @assertion: If x is +Infinity, return true; -* @description: y is number primitive; -*/ - -//CHECK#1 -if ((Number.POSITIVE_INFINITY >= 0) !== true) { - $ERROR('#1: (+Infinity >= 0) === true'); -} - -//CHECK#2 -if ((Number.POSITIVE_INFINITY >= 1.1) !== true) { - $ERROR('#2: (+Infinity >= 1.1) === true'); -} - -//CHECK#3 -if ((Number.POSITIVE_INFINITY >= -1.1) !== true) { - $ERROR('#3: (+Infinity >= -1.1) === true'); -} - -//CHECK#4 -if ((Number.POSITIVE_INFINITY >= Number.NEGATIVE_INFINITY) !== true) { - $ERROR('#4: (+Infinity >= -Infinity) === true'); -} - -//CHECK#5 -if ((Number.POSITIVE_INFINITY >= Number.MAX_VALUE) !== true) { - $ERROR('#5: (+Infinity >= Number.MAX_VALUE) === true'); -} - -//CHECK#6 -if ((Number.POSITIVE_INFINITY >= Number.MIN_VALUE) !== true) { - $ERROR('#6: (+Infinity >= Number.MIN_VALUE) === true'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A4.6.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A4.6.js deleted file mode 100644 index 6c0fdcd7a..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A4.6.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.4_A4.6; -* @section: 11.8.4, 11.8.5; -* @assertion: If y is +Infinity and x !== y, return false; -* @description: x is number primitive; -*/ - -//CHECK#1 -if ((0 >= Number.POSITIVE_INFINITY) !== false) { - $ERROR('#1: (0 >= +Infinity) === false'); -} - -//CHECK#2 -if ((1.1 >= Number.POSITIVE_INFINITY) !== false) { - $ERROR('#2: (1.1 >= +Infinity) === false'); -} - -//CHECK#3 -if ((-1.1 >= Number.POSITIVE_INFINITY) !== false) { - $ERROR('#3: (-1.1 >= +Infinity) === false'); -} - -//CHECK#4 -if ((Number.NEGATIVE_INFINITY >= Number.POSITIVE_INFINITY) !== false) { - $ERROR('#4: (-Infinity >= +Infinity) === false'); -} - -//CHECK#5 -if ((Number.MAX_VALUE >= Number.POSITIVE_INFINITY) !== false) { - $ERROR('#5: (Number.MAX_VALUE >= +Infinity) === false'); -} - -//CHECK#6 -if ((Number.MIN_VALUE >= Number.POSITIVE_INFINITY) !== false) { - $ERROR('#6: (Number.MIN_VALUE >= +Infinity) === false'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A4.7.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A4.7.js deleted file mode 100644 index 295a20ce7..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A4.7.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.4_A4.7; -* @section: 11.8.4, 11.8.5; -* @assertion: If x is -Infinity and x !== y, return false; -* @description: y is number primitive; -*/ - -//CHECK#1 -if ((Number.NEGATIVE_INFINITY >= 0) !== false) { - $ERROR('#1: (-Infinity >= 0) === false'); -} - -//CHECK#2 -if ((Number.NEGATIVE_INFINITY >= 1.1) !== false) { - $ERROR('#2: (-Infinity >= 1.1) === false'); -} - -//CHECK#3 -if ((Number.NEGATIVE_INFINITY >= -1.1) !== false) { - $ERROR('#3: (-Infinity >= -1.1) === false'); -} - -//CHECK#4 -if ((Number.NEGATIVE_INFINITY >= Number.POSITIVE_INFINITY) !== false) { - $ERROR('#4: (-Infinity >= +Infinity) === false'); -} - -//CHECK#5 -if ((Number.NEGATIVE_INFINITY >= Number.MAX_VALUE) !== false) { - $ERROR('#5: (-Infinity >= Number.MAX_VALUE) === false'); -} - -//CHECK#6 -if ((Number.NEGATIVE_INFINITY >= Number.MIN_VALUE) !== false) { - $ERROR('#6: (-Infinity >= Number.MIN_VALUE) === false'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A4.8.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A4.8.js deleted file mode 100644 index ccf85a8ba..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A4.8.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.4_A4.8; -* @section: 11.8.4, 11.8.5; -* @assertion: If y is -Infinity, return true; -* @description: x is number primitive; -*/ - -//CHECK#1 -if ((0 >= Number.NEGATIVE_INFINITY) !== true) { - $ERROR('#1: (0 >= -Infinity) === true'); -} - -//CHECK#2 -if ((1.1 >= Number.NEGATIVE_INFINITY) !== true) { - $ERROR('#2: (1.1 >= -Infinity) === true'); -} - -//CHECK#3 -if ((-1.1 >= Number.NEGATIVE_INFINITY) !== true) { - $ERROR('#3: (-1.1 >= -Infinity) === true'); -} - -//CHECK#4 -if ((Number.POSITIVE_INFINITY >= Number.NEGATIVE_INFINITY) !== true) { - $ERROR('#4: (+Infinity >= -Infinity) === true'); -} - -//CHECK#5 -if ((Number.MAX_VALUE >= Number.NEGATIVE_INFINITY) !== true) { - $ERROR('#5: (Number.MAX_VALUE >= -Infinity) === true'); -} - -//CHECK#6 -if ((Number.MIN_VALUE >= Number.NEGATIVE_INFINITY) !== true) { - $ERROR('#6: (Number.MIN_VALUE >= -Infinity) === true'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A4.9.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A4.9.js deleted file mode 100644 index c612324e2..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.4_The_Grater_than_or_equal_Operator/S11.8.4_A4.9.js +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.4_A4.9; -* @section: 11.8.4, 11.8.5; -* @assertion: If x is greater or equal than y and these values are both finite non-zero, return true; otherwise, return false; -* @description: x and y are number primitives; -*/ - -//CHECK#1 -if ((1 >= 1.1) !== false) { - $ERROR('#1: (1 >= 1.1) === false'); -} - -//CHECK#2 -if ((1.1 >= 1) !== true) { - $ERROR('#2: (1.1 >= 1) === true'); -} - -//CHECK#3 -if ((-1 >= -1.1) !== true) { - $ERROR('#3: (-1 >= -1.1) === true'); -} - -//CHECK#4 -if ((-1.1 >= -1) !== false) { - $ERROR('#4: (-1.1 >= -1) === false'); -} - -//CHECK#5 -if ((0.1 >= 0) !== true) { - $ERROR('#5: (0.1 >= 0) === true'); -} - -//CHECK#6 -if ((0 >= -0.1) !== true) { - $ERROR('#6: (0 >= -0.1) === true'); -} - -//CHECK#7 -if ((Number.MAX_VALUE >= Number.MAX_VALUE/2) !== true) { - $ERROR('#7: (Number.MAX_VALUE >= Number.MAX_VALUE/2) === true'); -} - -//CHECK#8 -if ((Number.MIN_VALUE*2 >= Number.MIN_VALUE) !== true) { - $ERROR('#8: (Number.MIN_VALUE*2 >= Number.MIN_VALUE) === true'); -} - - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.6_The_instanceof_operator/S11.8.6_A1.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.6_The_instanceof_operator/S11.8.6_A1.js deleted file mode 100644 index bae86c92f..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.6_The_instanceof_operator/S11.8.6_A1.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.6_A1; -* @section: 11.8.6, 7.2, 7.3; -* @assertion: White Space and Line Terminator between RelationalExpression and "instanceof" and between "instanceof" and ShiftExpression are allowed; -* @description: Checking by using eval; -*/ - -//CHECK#1 -if (eval("({})\u0009instanceof\u0009Object") !== true) { - $ERROR('#1: ({})\\u0009instanceof\\u0009Object === true'); -} - -//CHECK#2 -if (eval("({})\u000Binstanceof\u000BObject") !== true) { - $ERROR('#2: ({})\\u000Binstanceof\\u000BObject === true'); -} - -//CHECK#3 -if (eval("({})\u000Cinstanceof\u000CObject") !== true) { - $ERROR('#3: ({})\\u000Cinstanceof\\u000CObject === true'); -} - -//CHECK#4 -if (eval("({})\u0020instanceof\u0020Object") !== true) { - $ERROR('#4: ({})\\u0020instanceof\\u0020Object === true'); -} - -//CHECK#5 -if (eval("({})\u00A0instanceof\u00A0Object") !== true) { - $ERROR('#5: ({})\\u00A0instanceof\\u00A0Object === true'); -} - -//CHECK#6 -if (eval("({})\u000Ainstanceof\u000AObject") !== true) { - $ERROR('#6: ({})\\u000Ainstanceof\\u000AObject === true'); -} - -//CHECK#7 -if (eval("({})\u000Dinstanceof\u000DObject") !== true) { - $ERROR('#7: ({})\\u000Dinstanceof\\u000DObject === true'); -} - -//CHECK#8 -if (eval("({})\u2028instanceof\u2028Object") !== true) { - $ERROR('#8: ({})\\u2028instanceof\\u2028Object === true'); -} - -//CHECK#9 -if (eval("({})\u2029instanceof\u2029Object") !== true) { - $ERROR('#9: ({})\\u2029instanceof\\u2029Object === true'); -} - -//CHECK#10 -if (eval("({})\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029instanceof\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029Object") !== true) { - $ERROR('#10: ({})\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029instanceof\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029Object === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.6_The_instanceof_operator/S11.8.6_A2.1_T1.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.6_The_instanceof_operator/S11.8.6_A2.1_T1.js deleted file mode 100644 index 7cf637264..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.6_The_instanceof_operator/S11.8.6_A2.1_T1.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.6_A2.1_T1; - * @section: 11.8.6; - * @assertion: Operator "instanceof" uses GetValue; - * @description: Either Expression is not Reference or GetBase is not null; -*/ - -//CHECK#1 -if (({}) instanceof Object !== true) { - $ERROR('#1: ({}) instanceof Object === true'); -} - -//CHECK#2 -var object = {}; -if (object instanceof Object !== true) { - $ERROR('#2: var object = {}; object instanceof Object === true'); -} - -//CHECK#3 -var OBJECT = Object; -if (({}) instanceof OBJECT !== true) { - $ERROR('#3: var OBJECT = Object; ({}) instanceof OBJECT === true'); -} - -//CHECK#4 -var object = {}; -var OBJECT = Object; -if (object instanceof OBJECT !== true) { - $ERROR('#4: var object = {}; var OBJECT = Object; object instanceof OBJECT === true'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.6_The_instanceof_operator/S11.8.6_A2.1_T2.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.6_The_instanceof_operator/S11.8.6_A2.1_T2.js deleted file mode 100644 index 74da3f4e4..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.6_The_instanceof_operator/S11.8.6_A2.1_T2.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.6_A2.1_T2; -* @section: 11.8.6; -* @assertion: Operator "instanceof" uses GetValue; -* @description: If GetBase(RelationalExpression) is null, throw ReferenceError; -*/ - -//CHECK#1 -try { - object instanceof Object; - $ERROR('#1.1: object instanceof Object throw ReferenceError. Actual: ' + (object instanceof Object)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: object instanceof Object throw ReferenceError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.6_The_instanceof_operator/S11.8.6_A2.1_T3.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.6_The_instanceof_operator/S11.8.6_A2.1_T3.js deleted file mode 100644 index 87352bc41..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.6_The_instanceof_operator/S11.8.6_A2.1_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.6_A2.1_T3; -* @section: 11.8.6; -* @assertion: Operator "instanceof" uses GetValue; -* @description: If GetBase(ShiftExpression) is null, throw ReferenceError; -*/ - -//CHECK#1 -try { - ({}) instanceof OBJECT; - $ERROR('#1.1: ({}) instanceof OBJECT throw ReferenceError. Actual: ' + (({}) instanceof OBJECT)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: ({}) instanceof OBJECT throw ReferenceError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.6_The_instanceof_operator/S11.8.6_A2.4_T1.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.6_The_instanceof_operator/S11.8.6_A2.4_T1.js deleted file mode 100644 index d285ad028..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.6_The_instanceof_operator/S11.8.6_A2.4_T1.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.6_A2.4_T1; - * @section: 11.8.6; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with "="; -*/ - -//CHECK#1 -var OBJECT = 0; -if ((OBJECT = Object, {}) instanceof OBJECT !== true) { - $ERROR('#1: var OBJECT = 0; (OBJECT = Object, {}) instanceof OBJECT === true'); -} - -//CHECK#2 -var object = {}; -if (object instanceof (object = 0, Object) !== true) { - $ERROR('#2: var object = {}; object instanceof (object = 0, Object) === true'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.6_The_instanceof_operator/S11.8.6_A2.4_T2.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.6_The_instanceof_operator/S11.8.6_A2.4_T2.js deleted file mode 100644 index 33292f527..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.6_The_instanceof_operator/S11.8.6_A2.4_T2.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.6_A2.4_T2; - * @section: 11.8.6; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with "throw"; -*/ - -//CHECK#1 -var x = function () { throw "x"; }; -var y = function () { throw "y"; }; -try { - x() instanceof y(); - $ERROR('#1.1: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() instanceof y() throw "x". Actual: ' + (x() instanceof y())); -} catch (e) { - if (e === "y") { - $ERROR('#1.2: First expression is evaluated first, and then second expression'); - } else { - if (e !== "x") { - $ERROR('#1.3: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() instanceof y() throw "x". Actual: ' + (e)); - } - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.6_The_instanceof_operator/S11.8.6_A2.4_T3.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.6_The_instanceof_operator/S11.8.6_A2.4_T3.js deleted file mode 100644 index a30e58164..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.6_The_instanceof_operator/S11.8.6_A2.4_T3.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.6_A2.4_T3; - * @section: 11.8.6; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with undeclarated variables; -*/ - -//CHECK#1 -try { - object instanceof (object = {}, Object); - $ERROR('#1.1: object instanceof (object = {}, Object) throw ReferenceError. Actual: ' + (object instanceof (object = {}, Object))); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: object instanceof (object = {}, Object) throw ReferenceError. Actual: ' + (e)); - } -} - -//CHECK#2 -if ((OBJECT = Object, {}) instanceof OBJECT !== true) { - $ERROR('#2: (OBJECT = Object, {}) instanceof OBJECT !== true'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.6_The_instanceof_operator/S11.8.6_A3.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.6_The_instanceof_operator/S11.8.6_A3.js deleted file mode 100644 index e7d2a2107..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.6_The_instanceof_operator/S11.8.6_A3.js +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.6_A3; -* @section: 11.8.6; -* @assertion: If ShiftExpression is not an object, throw TypeError; -* @description: Checking all the types of primitives; -*/ - -//CHECK#1 -try { - true instanceof true; - $ERROR('#1: true instanceof true throw TypeError'); -} -catch (e) { - if (e instanceof TypeError !== true) { - $ERROR('#1: true instanceof true throw TypeError'); - } -} - -//CHECK#2 -try { - 1 instanceof 1; - $ERROR('#2: 1 instanceof 1 throw TypeError'); -} -catch (e) { - if (e instanceof TypeError !== true) { - $ERROR('#2: 1 instanceof 1 throw TypeError'); - } -} - -//CHECK#3 -try { - "string" instanceof "string"; - $ERROR('#3: "string" instanceof "string" throw TypeError'); -} -catch (e) { - if (e instanceof TypeError !== true) { - $ERROR('#3: "string" instanceof "string" throw TypeError'); - } -} - -//CHECK#4 -try { - undefined instanceof undefined; - $ERROR('#4: undefined instanceof undefined throw TypeError'); -} -catch (e) { - if (e instanceof TypeError !== true) { - $ERROR('#4: undefined instanceof undefined throw TypeError'); - } -} - -//CHECK#5 -try { - null instanceof null; - $ERROR('#5: null instanceof null throw TypeError'); -} -catch (e) { - if (e instanceof TypeError !== true) { - $ERROR('#5: null instanceof null throw TypeError'); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.6_The_instanceof_operator/S11.8.6_A4_T1.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.6_The_instanceof_operator/S11.8.6_A4_T1.js deleted file mode 100644 index 16d69f904..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.6_The_instanceof_operator/S11.8.6_A4_T1.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.6_A4_T1; -* @section: 11.8.6; -* @assertion: Only constructor call (with "new" keyword) makes instance; -* @description: Checking Boolean case; -*/ - -//CHECK#1 -if (false instanceof Boolean) { - $ERROR('#1: false is not instanceof Boolean'); -} - -//CHECK#2 -if (Boolean(false) instanceof Boolean) { - $ERROR('#2: Boolean(false) is not instanceof Boolean'); -} - -//CHECK#3 -if (new Boolean instanceof Boolean !== true) { - $ERROR('#3: new Boolean instanceof Boolean'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.6_The_instanceof_operator/S11.8.6_A4_T2.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.6_The_instanceof_operator/S11.8.6_A4_T2.js deleted file mode 100644 index cc4f50454..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.6_The_instanceof_operator/S11.8.6_A4_T2.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.6_A4_T2; -* @section: 11.8.6; -* @assertion: Only constructor call (with "new" keyword) makes instance; -* @description: Checking Number case; -*/ - -//CHECK#1 -if (0 instanceof Number) { - $ERROR('#1: 0 is not instanceof Number'); -} - -//CHECK#2 -if (Number(0) instanceof Number) { - $ERROR('#2: Number(0) is not instanceof Number'); -} - -//CHECK#3 -if (new Number instanceof Number !== true) { - $ERROR('#3: new Number instanceof Number'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.6_The_instanceof_operator/S11.8.6_A4_T3.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.6_The_instanceof_operator/S11.8.6_A4_T3.js deleted file mode 100644 index 035120958..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.6_The_instanceof_operator/S11.8.6_A4_T3.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.6_A4_T3; -* @section: 11.8.6; -* @assertion: Only constructor call (with "new" keyword) makes instance; -* @description: Checking String case; -*/ - -//CHECK#1 -if ("" instanceof String) { - $ERROR('#1: "" is not instanceof String'); -} - -//CHECK#2 -if (String("") instanceof String) { - $ERROR('#2: String("") is not instanceof String'); -} - -//CHECK#3 -if (new String instanceof String !== true) { - $ERROR('#3: new String instanceof String'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.6_The_instanceof_operator/S11.8.6_A5_T1.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.6_The_instanceof_operator/S11.8.6_A5_T1.js deleted file mode 100644 index 4e139a9c7..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.6_The_instanceof_operator/S11.8.6_A5_T1.js +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.6_A5_T1; -* @section: 11.8.6; -* @assertion: TypeError is subclass of Error from instanceof operator point of view; -* @description: Checking Error case; -*/ - -var __err = new Error; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!(__err instanceof Error)) { - $ERROR('#1: TypeError is subclass of Error from instanceof operator poit of view'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__err instanceof TypeError) { - $ERROR('#2: TypeError is subclass of Error from instanceof operator poit of view'); -} -// -////////////////////////////////////////////////////////////////////////////// - -var err__ = Error('failed'); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (!(err__ instanceof Error)) { - $ERROR('#3: TypeError is subclass of Error from instanceof operator poit of view'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (err__ instanceof TypeError) { - $ERROR('#4: TypeError is subclass of Error from instanceof operator poit of view'); -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.6_The_instanceof_operator/S11.8.6_A5_T2.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.6_The_instanceof_operator/S11.8.6_A5_T2.js deleted file mode 100644 index 3896a1c01..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.6_The_instanceof_operator/S11.8.6_A5_T2.js +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.6_A5_T2; -* @section: 11.8.6; -* @assertion: TypeError is subclass of Error from instanceof operator point of view; -* @description: Checking TypeError case; -*/ - -var __t__err = new TypeError; - -//CHECK#1 -if (!(__t__err instanceof Error)) { - $ERROR('#1: TypeError is subclass of Error from instanceof operator poit of view'); -} - -//CHECK#2 -if (!(__t__err instanceof TypeError)) { - $ERROR('#2: TypeError is subclass of Error from instanceof operator poit of view'); -} - -////////////////////////////////////////////////////////////////////////////// -var err__t__ = TypeError('failed'); - -//CHECK#3 -if (!(err__t__ instanceof Error)) { - $ERROR('#3: TypeError is subclass of Error from instanceof operator poit of view'); -} - -//CHECK#4 -if (!(err__t__ instanceof TypeError)) { - $ERROR('#4: TypeError is subclass of Error from instanceof operator poit of view'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.6_The_instanceof_operator/S11.8.6_A6_T1.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.6_The_instanceof_operator/S11.8.6_A6_T1.js deleted file mode 100644 index 330bf01ce..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.6_The_instanceof_operator/S11.8.6_A6_T1.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.6_A6_T1; -* @section: 11.8.6; -* @assertion: Only Function objects implement [[HasInstance]] and can be proper ShiftExpression for the "instanceof" operator consequently -* @description: Checking "this" case; -*/ - -//CHECK#1 -try{ - ({}) instanceof this; - $ERROR('#1: Only Function objects implement [[HasInstance]] and consequently can be proper ShiftExpression for The instanceof operator'); -} -catch(e){ - if (e instanceof TypeError !== true) { - $ERROR('#1: Only Function objects implement [[HasInstance]] and consequently can be proper ShiftExpression for The instanceof operator'); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.6_The_instanceof_operator/S11.8.6_A6_T2.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.6_The_instanceof_operator/S11.8.6_A6_T2.js deleted file mode 100644 index 9575f673f..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.6_The_instanceof_operator/S11.8.6_A6_T2.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.6_A6_T2; -* @section: 11.8.6; -* @assertion: Only Function objects implement [[HasInstance]] and can be proper ShiftExpression for the "instanceof" operator consequently; -* @description: Checking Math case; -*/ - -//CHECK#1 -try{ - 1 instanceof Math; - $ERROR('#1: 1 instanceof Math throw TypeError'); -} -catch(e){ - if (e instanceof TypeError !== true) { - $ERROR('#1: 1 instanceof Math throw TypeError'); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.6_The_instanceof_operator/S11.8.6_A6_T3.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.6_The_instanceof_operator/S11.8.6_A6_T3.js deleted file mode 100644 index 40184d2a6..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.6_The_instanceof_operator/S11.8.6_A6_T3.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.6_A6_T3; -* @section: 11.8.6; -* @assertion: Only Function objects implement [[HasInstance]] and can be proper ShiftExpression for the "instanceof" operator consequently; -* @description: Checking if RelationalExpression is function; -*/ - -function MyFunct(){return 0}; - -//CHECK#1 -if (MyFunct instanceof MyFunct){ - $ERROR('#1 function MyFunct(){return 0}; MyFunct instanceof MyFunct === false'); -} - -//CHECK#2 -if (MyFunct instanceof Function !== true){ - $ERROR('#2 function MyFunct(){return 0}; MyFunct instanceof Function === true'); -} - -//CHECK#3 -if (MyFunct instanceof Object !== true){ - $ERROR('#3 function MyFunct(){return 0}; MyFunct instanceof Object === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.6_The_instanceof_operator/S11.8.6_A6_T4.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.6_The_instanceof_operator/S11.8.6_A6_T4.js deleted file mode 100644 index be183635b..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.6_The_instanceof_operator/S11.8.6_A6_T4.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.6_A6_T4; -* @section: 11.8.6; -* @assertion: Only Function objects implement [[HasInstance]] and can be proper ShiftExpression for the "instanceof" operator consequently; -* @description: Checking if RelationalExpression is object; -*/ - -MyFunct = function(){}; -__my__funct = new MyFunct; - - -//CHECK#1 -if (!(__my__funct instanceof MyFunct)){ - $ERROR('#1 Only Function objects implement [[HasInstance]] and consequently can be proper ShiftExpression for The instanceof operator'); -} - -//CHECK#2 -if (__my__funct instanceof Function){ - $ERROR('#2 Only Function objects implement [[HasInstance]] and consequently can be proper ShiftExpression for The instanceof operator'); -} - -//CHECK#3 -if (!(__my__funct instanceof Object)){ - $ERROR('#3 Only Function objects implement [[HasInstance]] and consequently can be proper ShiftExpression for The instanceof operator'); -} - -//CHECK#4 -try{ - __my__funct instanceof __my__funct; - $ERROR('#4 Only Function objects implement [[HasInstance]] and consequently can be proper ShiftExpression for The instanceof operator'); -} -catch(e){ - if (e instanceof TypeError !== true) { - $ERROR('#4 Only Function objects implement [[HasInstance]] and consequently can be proper ShiftExpression for The instanceof operator'); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.6_The_instanceof_operator/S11.8.6_A7_T1.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.6_The_instanceof_operator/S11.8.6_A7_T1.js deleted file mode 100644 index 7bd2f0041..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.6_The_instanceof_operator/S11.8.6_A7_T1.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.6_A7_T1; -* @section: 11.8.6; -* @assertion: When "instanceof" returns true it means that GetValue(RelationalExpression) is constructed with ShiftExpression; -* @description: Checking Object object; -*/ - -var __obj={}; - -//CHECK#1 -if (!(__obj instanceof Object)) { - $ERROR('#1: If instanceof returns true then GetValue(RelationalExpression) was constructed with ShiftExpression'); -} - -//CHECK#2 -if (__obj.constructor !== Object) { - $ERROR('#2: If instanceof returns true then GetValue(RelationalExpression) was constructed with ShiftExpression'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.6_The_instanceof_operator/S11.8.6_A7_T2.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.6_The_instanceof_operator/S11.8.6_A7_T2.js deleted file mode 100644 index 143fa5c11..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.6_The_instanceof_operator/S11.8.6_A7_T2.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.6_A7_T2; -* @section: 11.8.6; -* @assertion: When "instanceof" returns true it means that GetValue(RelationalExpression) is constructed with ShiftExpression; -* @description: Checking Array object; -*/ - -var __arr=[]; - -//CHECK#1 -if (!(__arr instanceof Array)) { - $ERROR('#1: If instanceof returns true then GetValue(RelationalExpression) was constructed with ShiftExpression'); -} - -//CHECK#2 -if (__arr.constructor !== Array) { - $ERROR('#2: If instanceof returns true then GetValue(RelationalExpression) was constructed with ShiftExpression'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.6_The_instanceof_operator/S11.8.6_A7_T3.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.6_The_instanceof_operator/S11.8.6_A7_T3.js deleted file mode 100644 index 01b877567..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.6_The_instanceof_operator/S11.8.6_A7_T3.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.6_A7_T3; -* @section: 11.8.6; -* @assertion: When "instanceof" returns true it means that GetValue(RelationalExpression) is constructed with ShiftExpression; -* @description: Checking Function object; -*/ - -var __func = new Function; - -//CHECK#1 -if (!(__func instanceof Function)) { - $ERROR('#1: If instanceof returns true then GetValue(RelationalExpression) was constructed with ShiftExpression'); -} - -//CHECK#2 -if (__func.constructor !== Function) { - $ERROR('#2: If instanceof returns true then GetValue(RelationalExpression) was constructed with ShiftExpression'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.7_The_in_operator/S11.8.7_A1.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.7_The_in_operator/S11.8.7_A1.js deleted file mode 100644 index 91d445af3..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.7_The_in_operator/S11.8.7_A1.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.7_A1; -* @section: 11.8.7, 7.2, 7.3; -* @assertion: White Space and Line Terminator between RelationalExpression and "in" and between "in" and ShiftExpression are allowed; -* @description: Checking by using eval; -*/ - -//CHECK#1 -if (eval("'MAX_VALUE'\u0009in\u0009Number") !== true) { - $ERROR('#1: "MAX_VALUE"\\u0009in\\u0009Number === true'); -} - -//CHECK#2 -if (eval("'MAX_VALUE'\u000Bin\u000BNumber") !== true) { - $ERROR('#2: "MAX_VALUE"\\u000Bin\\u000BNumber === true'); -} - -//CHECK#3 -if (eval("'MAX_VALUE'\u000Cin\u000CNumber") !== true) { - $ERROR('#3: "MAX_VALUE"\\u000Cin\\u000CNumber === true'); -} - -//CHECK#4 -if (eval("'MAX_VALUE'\u0020in\u0020Number") !== true) { - $ERROR('#4: "MAX_VALUE"\\u0020in\\u0020Number === true'); -} - -//CHECK#5 -if (eval("'MAX_VALUE'\u00A0in\u00A0Number") !== true) { - $ERROR('#5: "MAX_VALUE"\\u00A0in\\u00A0Number === true'); -} - -//CHECK#6 -if (eval("'MAX_VALUE'\u000Ain\u000ANumber") !== true) { - $ERROR('#6: "MAX_VALUE"\\u000Ain\\u000ANumber === true'); -} - -//CHECK#7 -if (eval("'MAX_VALUE'\u000Din\u000DNumber") !== true) { - $ERROR('#7: "MAX_VALUE"\\u000Din\\u000DNumber === true'); -} - -//CHECK#8 -if (eval("'MAX_VALUE'\u2028in\u2028Number") !== true) { - $ERROR('#8: "MAX_VALUE"\\u2028in\\u2028Number === true'); -} - -//CHECK#9 -if (eval("'MAX_VALUE'\u2029in\u2029Number") !== true) { - $ERROR('#9: "MAX_VALUE"\\u2029in\\u2029Number === true'); -} - -//CHECK#10 -if (eval("'MAX_VALUE'\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029in\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029Number") !== true) { - $ERROR('#10: "MAX_VALUE"\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029in\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029Number === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.7_The_in_operator/S11.8.7_A2.1_T1.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.7_The_in_operator/S11.8.7_A2.1_T1.js deleted file mode 100644 index e16410e7f..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.7_The_in_operator/S11.8.7_A2.1_T1.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.7_A2.1_T1; - * @section: 11.8.7; - * @assertion: Operator "in" uses GetValue; - * @description: Either Expression is not Reference or GetBase is not null; -*/ - -//CHECK#1 -if ("MAX_VALUE" in Number !== true) { - $ERROR('#1: "MAX_VALUE" in Number === true'); -} - -//CHECK#2 -var x = "MAX_VALUE"; -if (x in Number !== true) { - $ERROR('#2: var x = "MAX_VALUE"; x in Number === true'); -} - -//CHECK#3 -var y = Number; -if ("MAX_VALUE" in y !== true) { - $ERROR('#3: var y = Number; "MAX_VALUE" in y === true'); -} - -//CHECK#4 -var x = "MAX_VALUE"; -var y = Number; -if (x in y !== true) { - $ERROR('#4: var x = "MAX_VALUE"; var y = Number; x in y === true'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.7_The_in_operator/S11.8.7_A2.1_T2.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.7_The_in_operator/S11.8.7_A2.1_T2.js deleted file mode 100644 index 8c5b353b0..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.7_The_in_operator/S11.8.7_A2.1_T2.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.7_A2.1_T2; -* @section: 11.8.7; -* @assertion: Operator "in" uses GetValue; -* @description: If GetBase(RelationalExpression) is null, throw ReferenceError; -*/ - -//CHECK#1 -try { - MAX_VALUE in Number; - $ERROR('#1.1: MAX_VALUE in Number throw ReferenceError. Actual: ' + (MAX_VALUE in Number)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: MAX_VALUE in Number throw ReferenceError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.7_The_in_operator/S11.8.7_A2.1_T3.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.7_The_in_operator/S11.8.7_A2.1_T3.js deleted file mode 100644 index b08ff3cc1..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.7_The_in_operator/S11.8.7_A2.1_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.7_A2.1_T3; -* @section: 11.8.7; -* @assertion: Operator "in" uses GetValue; -* @description: If GetBase(ShiftExpression) is null, throw ReferenceError; -*/ - -//CHECK#1 -try { - "MAX_VALUE" in NUMBER; - $ERROR('#1.1: "MAX_VALUE" in NUMBER throw ReferenceError. Actual: ' + ("MAX_VALUE" in NUMBER)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: "MAX_VALUE" in NUMBER throw ReferenceError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.7_The_in_operator/S11.8.7_A2.4_T1.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.7_The_in_operator/S11.8.7_A2.4_T1.js deleted file mode 100644 index 8f874ed6e..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.7_The_in_operator/S11.8.7_A2.4_T1.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.7_A2.4_T1; - * @section: 11.8.7; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with "="; -*/ - -//CHECK#1 -var NUMBER = 0; -if ((NUMBER = Number, "MAX_VALUE") in NUMBER !== true) { - $ERROR('#1: var NUMBER = 0; (NUMBER = Number, "MAX_VALUE") in NUMBER === true'); -} - -//CHECK#2 -var max_value = "MAX_VALUE"; -if (max_value in (max_value = "none", Number) !== true) { - $ERROR('#2: var max_value = "MAX_VALUE"; max_value in (max_value = "none", Number) === true'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.7_The_in_operator/S11.8.7_A2.4_T2.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.7_The_in_operator/S11.8.7_A2.4_T2.js deleted file mode 100644 index 1f1e645f3..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.7_The_in_operator/S11.8.7_A2.4_T2.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.7_A2.4_T2; - * @section: 11.8.7; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with "throw"; -*/ - -//CHECK#1 -var x = function () { throw "x"; }; -var y = function () { throw "y"; }; -try { - x() in y(); - $ERROR('#1.1: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() in y() throw "x". Actual: ' + (x() in y())); -} catch (e) { - if (e === "y") { - $ERROR('#1.2: First expression is evaluated first, and then second expression'); - } else { - if (e !== "x") { - $ERROR('#1.3: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() in y() throw "x". Actual: ' + (e)); - } - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.7_The_in_operator/S11.8.7_A2.4_T3.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.7_The_in_operator/S11.8.7_A2.4_T3.js deleted file mode 100644 index 42e63d81f..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.7_The_in_operator/S11.8.7_A2.4_T3.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.8.7_A2.4_T3; - * @section: 11.8.7; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with undeclarated variables; -*/ - -//CHECK#1 -try { - max_value in (max_value = "MAX_VALUE", Number); - $ERROR('#1.1: max_value in (max_value = "MAX_VALUE", Number) throw ReferenceError. Actual: ' + (max_value in (max_value = "MAX_VALUE", Number))); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: max_value in (max_value = "MAX_VALUE", Number) throw ReferenceError. Actual: ' + (e)); - } -} - -//CHECK#2 -if ((NUMBER = Number, "MAX_VALUE") in NUMBER !== true) { - $ERROR('#2: (NUMBER = Number, "MAX_VALUE") in NUMBER !== true'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.7_The_in_operator/S11.8.7_A3.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.7_The_in_operator/S11.8.7_A3.js deleted file mode 100644 index 47996cb5e..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.7_The_in_operator/S11.8.7_A3.js +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.7_A3; -* @section: 11.8.7; -* @assertion: If ShiftExpression is not an object, throw TypeError; -* @description: Checking all the types of primitives; -*/ - -//CHECK#1 -try { - "toString" in true; - $ERROR('#1: "toString" in true throw TypeError'); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1: "toString" in true throw TypeError'); - } -} - -//CHECK#2 -try { - "MAX_VALUE" in 1; - $ERROR('#2: "MAX_VALUE" in 1 throw TypeError'); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#2: "MAX_VALUE" in 1 throw TypeError'); - } -} - -//CHECK#3 -try { - "length" in "string"; - $ERROR('#3: "length" in "string" throw TypeError'); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#3: "length" in "string" throw TypeError'); - } -} - -//CHECK#4 -try { - "toString" in undefined; - $ERROR('#4: "toString" in undefined throw TypeError'); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#4: "toString" in undefined throw TypeError'); - } -} - -//CHECK#5 -try { - "toString" in null; - $ERROR('#5: "toString" in null throw TypeError'); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#5: "toString" in null throw TypeError'); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.7_The_in_operator/S11.8.7_A4.js b/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.7_The_in_operator/S11.8.7_A4.js deleted file mode 100644 index 7f92b44fc..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.8_Relational_Operators/11.8.7_The_in_operator/S11.8.7_A4.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.8.7_A4; -* @section: 11.8.7, 9.8; -* @assertion: Operator "in" calls ToString(ShiftExpression); -* @description: Checking ToString coversion;; -*/ - -//CHECK#1 -var object = {}; -object["true"] = 1; -if (true in object !== "true" in object) { - $ERROR('#1: "var object = {}; object["true"] = 1; true in object === "true" in object'); -} - -//CHECK#2 -var object = {}; -object.Infinity = 1; -if (Infinity in object !== "Infinity" in object) { - $ERROR('#2: "var object = {}; object.Infinity = 1; Infinity in object === "Infinity" in object'); -} - -//CHECK#4 -var object = {}; -object.undefined = 1; -if (undefined in object !== "undefined" in object) { - $ERROR('#4: "var object = {}; object.undefined = 1; undefined in object === "undefined" in object'); -} - -//CHECK#5 -var object = {}; -object["null"] = 1; -if (null in object !== "null" in object) { - $ERROR('#5: "var object = {}; object["null"] = 1; null in object === "null" in object'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A1.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A1.js deleted file mode 100644 index 637f50ef9..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A1.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.9.1_A1; -* @section: 11.9.1, 7.2, 7.3; -* @assertion: White Space and Line Terminator between EqualityExpression and "==" or between "==" and RelationalExpression are allowed; -* @description: Checking by using eval; -*/ - -//CHECK#1 -if (eval("true\u0009==\u00091") !== true) { - $ERROR('#1: (true\\u0009==\\u00091) === true'); -} - -//CHECK#2 -if (eval("true\u000B==\u000B1") !== true) { - $ERROR('#2: (true\\u000B==\\u000B1) === true'); -} - -//CHECK#3 -if (eval("true\u000C==\u000C1") !== true) { - $ERROR('#3: (true\\u000C==\\u000C1) === true'); -} - -//CHECK#4 -if (eval("true\u0020==\u00201") !== true) { - $ERROR('#4: (true\\u0020==\\u00201) === true'); -} - -//CHECK#5 -if (eval("true\u00A0==\u00A01") !== true) { - $ERROR('#5: (true\\u00A0==\\u00A01) === true'); -} - -//CHECK#6 -if (eval("true\u000A==\u000A1") !== true) { - $ERROR('#6: (true\\u000A==\\u000A1) === true'); -} - -//CHECK#7 -if (eval("true\u000D==\u000D1") !== true) { - $ERROR('#7: (true\\u000D==\\u000D1) === true'); -} - -//CHECK#8 -if (eval("true\u2028==\u20281") !== true) { - $ERROR('#8: (true\\u2028==\\u20281) === true'); -} - -//CHECK#9 -if (eval("true\u2029==\u20291") !== true) { - $ERROR('#9: (true\\u2029==\\u20291) === true'); -} - -//CHECK#10 -if (eval("true\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029==\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20291") !== true) { - $ERROR('#10: (true\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029==\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20291) === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A2.1_T1.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A2.1_T1.js deleted file mode 100644 index 8a751c0b3..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A2.1_T1.js +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.1_A2.1_T1; - * @section: 11.9.1; - * @assertion: Operator x == y uses GetValue; - * @description: Either Type is not Reference or GetBase is not null; -*/ - -//CHECK#1 -if ((1 == 1) !== true) { - $ERROR('#1: (1 == 1) === true'); -} - -//CHECK#2 -var x = 1; -if ((x == 1) !== true) { - $ERROR('#2: var x = 1; (x == 1) === true'); -} - -//CHECK#3 -var y = 1; -if ((1 == y) !== true) { - $ERROR('#3: var y = 1; (1 == y) === true'); -} - -//CHECK#4 -var x = 1; -var y = 1; -if ((x == y) !== true) { - $ERROR('#4: var x = 1; var y = 1; (x == y) === true'); -} - -//CHECK#5 -var objectx = new Object(); -var objecty = new Object(); -objectx.prop = 1; -objecty.prop = 1; -if ((objectx.prop == objecty.prop) !== true) { - $ERROR('#5: var objectx = new Object(); var objecty = new Object(); objectx.prop = 1; objecty.prop = 1; (objectx.prop == objecty.prop) === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A2.1_T2.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A2.1_T2.js deleted file mode 100644 index e631cf4a0..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A2.1_T2.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.1_A2.1_T2; - * @section: 11.9.1; - * @assertion: Operator x == y uses GetValue; - * @description: If GetBase(x) is null, throw ReferenceError; -*/ - -//CHECK#1 -try { - x == 1; - $ERROR('#1.1: x == 1 throw ReferenceError. Actual: ' + (x == 1)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: x == 1 throw ReferenceError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A2.1_T3.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A2.1_T3.js deleted file mode 100644 index 87dfd3630..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A2.1_T3.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.1_A2.1_T3; - * @section: 11.9.1; - * @assertion: Operator x == y uses GetValue; - * @description: If GetBase(y) is null, throw ReferenceError; -*/ - -//CHECK#1 -try { - 1 == y; - $ERROR('#1.1: 1 == y throw ReferenceError. Actual: ' + (1 == y)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: 1 == y throw ReferenceError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A2.4_T1.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A2.4_T1.js deleted file mode 100644 index e712df117..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A2.4_T1.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.1_A2.4_T1; - * @section: 11.9.1; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with "="; -*/ - -//CHECK#1 -var x = 0; -if (((x = 1) == x) !== true) { - $ERROR('#1: var x = 0; ((x = 1) == x) === true'); -} - -//CHECK#2 -var x = 0; -if ((x == (x = 1)) !== false) { - $ERROR('#2: var x = 0; (x == (x = 1)) === false'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A2.4_T2.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A2.4_T2.js deleted file mode 100644 index 7f9642a5f..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A2.4_T2.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.1_A2.4_T2; - * @section: 11.9.1; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with "throw"; -*/ - -//CHECK#1 -var x = function () { throw "x"; }; -var y = function () { throw "y"; }; -try { - x() == y(); - $ERROR('#1.1: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() == y() throw "x". Actual: ' + (x() == y())); -} catch (e) { - if (e === "y") { - $ERROR('#1.2: First expression is evaluated first, and then second expression'); - } else { - if (e !== "x") { - $ERROR('#1.3: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() == y() throw "x". Actual: ' + (e)); - } - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A2.4_T3.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A2.4_T3.js deleted file mode 100644 index ee4f3cc27..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A2.4_T3.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.1_A2.4_T3; - * @section: 11.9.1; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with undeclarated variables; -*/ - -//CHECK#1 -try { - x == (x = 1); - $ERROR('#1.1: x == (x = 1) throw ReferenceError. Actual: ' + (x == (x = 1))); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: x == (x = 1) throw ReferenceError. Actual: ' + (e)); - } -} - -//CHECK#2 -if (((y = 1) == y) !== true) { - $ERROR('#2: ((y = 1) == y) === true'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A3.1.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A3.1.js deleted file mode 100644 index c9ca2a415..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A3.1.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.1_A3.1; - * @section: 11.9.1, 11.9.3; - * @assertion: Return true, if x and y are both true or both false; otherwise, return false; - * @description: x and y are boolean primitives; - */ - -//CHECK#1 -if ((true == true) !== true) { - $ERROR('#1: (true == true) === true'); -} - -//CHECK#2 -if ((false == false) !== true) { - $ERROR('#2: (false == false) === true'); -} - -//CHECK#3 -if ((true == false) !== false) { - $ERROR('#3: (true == false) === false'); -} - -//CHECK#4 -if ((false == true) !== false) { - $ERROR('#4: (false == true) === false'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A3.2.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A3.2.js deleted file mode 100644 index 9306cefd8..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A3.2.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.1_A3.2; - * @section: 11.9.1, 11.9.3; - * @assertion: If Type(x) is Boolean and Type(y) is Number, - * return the result of comparison ToNumber(x) == y; - * @description: x is primitive boolean, y is primitive number; - */ - -//CHECK#1 -if ((true == 1) !== true) { - $ERROR('#1: (true == 1) === true'); -} - -//CHECK#2 -if ((false == "0") !== true) { - $ERROR('#2: (false == "0") === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A3.3.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A3.3.js deleted file mode 100644 index 2548c4b2e..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A3.3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.1_A3.3; - * @section: 11.9.1, 11.9.3; - * @assertion: If Type(y) is Number and Type(y) is Boolean, - * return the result of comparison x == ToNumber(y); - * @description: x is primitive number, y is primitive boolean; - */ - -//CHECK#1 -if ((0 == false) !== true) { - $ERROR('#1: (0 == false) === true'); -} - -//CHECK#2 -if (("1" == true) !== true) { - $ERROR('#2: ("1" == true) === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A4.1_T1.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A4.1_T1.js deleted file mode 100644 index 16e798bb1..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A4.1_T1.js +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.1_A4.1_T1; - * @section: 11.9.1, 11.9.3; - * @assertion: If x or y is NaN, return false; - * @description: x is NaN; -*/ - -//CHECK#1 -if ((Number.NaN == true) !== false) { - $ERROR('#1: (NaN == true) === false'); -} - -//CHECK#2 -if ((Number.NaN == 1) !== false) { - $ERROR('#2: (NaN == 1) === false'); -} - -//CHECK#3 -if ((Number.NaN == Number.NaN) !== false) { - $ERROR('#3: (NaN == NaN) === false'); -} - -//CHECK#4 -if ((Number.NaN == Number.POSITIVE_INFINITY) !== false) { - $ERROR('#4: (NaN == +Infinity) === false'); -} - -//CHECK#5 -if ((Number.NaN == Number.NEGATIVE_INFINITY) !== false) { - $ERROR('#5: (NaN == -Infinity) === false'); -} - -//CHECK#6 -if ((Number.NaN == Number.MAX_VALUE) !== false) { - $ERROR('#6: (NaN == Number.MAX_VALUE) === false'); -} - -//CHECK#7 -if ((Number.NaN == Number.MIN_VALUE) !== false) { - $ERROR('#7: (NaN == Number.MIN_VALUE) === false'); -} - -//CHECK#8 -if ((Number.NaN == "string") !== false) { - $ERROR('#8: (NaN == "string") === false'); -} - -//CHECK#9 -if ((Number.NaN == new Object()) !== false) { - $ERROR('#9: (NaN == new Object()) === false'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A4.1_T2.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A4.1_T2.js deleted file mode 100644 index 78d0dd8be..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A4.1_T2.js +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.1_A4.1_T2; - * @section: 11.9.1, 11.9.3; - * @assertion: If x or y is NaN, return false; - * @description: y is NaN; -*/ - -//CHECK#1 -if ((true == Number.NaN) !== false) { - $ERROR('#1: (true == NaN) === false'); -} - -//CHECK#2 -if ((-1 == Number.NaN) !== false) { - $ERROR('#2: (-1 == NaN) === false'); -} - -//CHECK#3 -if ((Number.NaN == Number.NaN) !== false) { - $ERROR('#3: (NaN == NaN) === false'); -} - -//CHECK#4 -if ((Number.POSITIVE_INFINITY == Number.NaN) !== false) { - $ERROR('#4: (+Infinity == NaN) === false'); -} - -//CHECK#5 -if ((Number.NEGATIVE_INFINITY == Number.NaN) !== false) { - $ERROR('#5: (-Infinity == NaN) === false'); -} - -//CHECK#6 -if ((Number.MAX_VALUE == Number.NaN) !== false) { - $ERROR('#6: (Number.MAX_VALUE == NaN) === false'); -} - -//CHECK#7 -if ((Number.MIN_VALUE == Number.NaN) !== false) { - $ERROR('#7: (Number.MIN_VALUE == NaN) === false'); -} - -//CHECK#8 -if (("string" == Number.NaN) !== false) { - $ERROR('#8: ("string" == NaN) === false'); -} - -//CHECK#9 -if ((new Object() == Number.NaN) !== false) { - $ERROR('#9: (new Object() == NaN) === false'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A4.2.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A4.2.js deleted file mode 100644 index 303505e0d..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A4.2.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.1_A4.2; - * @section: 11.9.1, 11.9.3; - * @assertion: If x is +0(-0) and y is -0(+0), return true; - * @description: Checking all combinations; -*/ - -//CHECK#1 -if ((+0 == -0) !== true) { - $ERROR('#1: (+0 == -0) === true'); -} - -//CHECK#2 -if ((-0 == +0) !== true) { - $ERROR('#2: (-0 == +0) === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A4.3.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A4.3.js deleted file mode 100644 index 5ed26d722..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A4.3.js +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.1_A4.3; - * @section: 11.9.1, 11.9.3; - * @assertion: Type(x) and Type(y) are Number-s minus NaN, +0, -0. - * Return true, if x is the same number value as y; otherwise, return false; - * @description: x and y are primitive numbers; -*/ - -//CHECK#1 -if ((Number.POSITIVE_INFINITY == Number.POSITIVE_INFINITY) !== true) { - $ERROR('#1: (+Infinity == +Infinity) === true'); -} - -//CHECK#2 -if ((Number.NEGATIVE_INFINITY == Number.NEGATIVE_INFINITY) !== true) { - $ERROR('#2: (-Infinity == -Infinity) === true'); -} - -//CHECK#3 -if ((Number.POSITIVE_INFINITY == -Number.NEGATIVE_INFINITY) !== true) { - $ERROR('#3: (+Infinity == -(-Infinity)) === true'); -} - -//CHECK#4 -if ((1 == 0.999999999999) !== false) { - $ERROR('#4: (1 == 0.999999999999) === false'); -} - -//CHECK#5 -if ((1.0 == 1) !== true) { - $ERROR('#5: (1.0 == 1) === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A5.1.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A5.1.js deleted file mode 100644 index 6e2c34006..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A5.1.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.1_A5.1; - * @section: 11.9.1, 11.9.3; - * @assertion: Type(x) and Type(y) are String-s. - * Return true, if x and y are exactly the same sequence of characters; otherwise, return false; - * @description: x and y are primitive string; - */ - -//CHECK#1 -if (("" == "") !== true) { - $ERROR('#1: ("" == "") === true'); -} - -//CHECK#2 -if ((" " == " ") !== true) { - $ERROR('#2: " (" == " ") === true'); -} - -//CHECK#3 -if ((" " == "") !== false) { - $ERROR('#3: " (" == "") === false'); -} - -//CHECK#4 -if (("string" == "string") !== true) { - $ERROR('#4: ("string" == "string") === true'); -} - -//CHECK#5 -if ((" string" == "string ") !== false) { - $ERROR('#5: (" string" == "string ") === false'); -} - -//CHECK#6 -if (("1.0" == "1") !== false) { - $ERROR('#6: ("1.0" == "1") === false'); -} - -//CHECK#7 -if (("0xff" == "255") !== false) { - $ERROR('#7: ("0xff" == "255") === false'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A5.2.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A5.2.js deleted file mode 100644 index c9357227e..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A5.2.js +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.1_A5.2; - * @section: 11.9.1, 11.9.3; - * @assertion: If Type(x) is Number and Type(y) is String, - * return the result of comparison x == ToNumber(y); - * @description: x is primitive number, y is primitive string; - */ - -//CHECK#1 -if ((1 == "1") !== true) { - $ERROR('#1: (1 == "1") === true'); -} - -//CHECK#2 -if ((1.100 == "+1.10") !== true) { - $ERROR('#2: (1.100 == "+1.10") === true'); -} - -//CHECK#3 -if ((1 == "true") !== false) { - $ERROR('#3: (1 == "true") === false'); -} - -//CHECK#4 -if ((255 == "0xff") !== true) { - $ERROR('#4: (255 == "0xff") === true'); -} - -//CHECK#5 -if ((0 == "") !== true) { - $ERROR('#5: (0 == "") === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A5.3.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A5.3.js deleted file mode 100644 index c947908e9..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A5.3.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.1_A5.3; - * @section: 11.9.1, 11.9.3; - * @assertion: If Type(x) is String and Type(y) is Number, - * return the result of comparison ToNumber(x) == y; - * @description: x is primitive string, y is primitive number; - */ - -//CHECK#1 -if (("-1" == -1) !== true) { - $ERROR('#1: ("-1" == -1) === true'); -} - -//CHECK#2 -if (("-1.100" == -1.10) !== true) { - $ERROR('#2: ("-1.100" == -1.10) === true'); -} - -//CHECK#3 -if (("false" == 0) !== false) { - $ERROR('#3: ("false" == 0) === false'); -} - -//CHECK#4 -if (("5e-324" == 5e-324) !== true) { - $ERROR('#4: ("5e-324" == 5e-324) === true'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A6.1.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A6.1.js deleted file mode 100644 index 6d59e89b6..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A6.1.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.1_A6.1; - * @section: 11.9.1, 11.9.3; - * @assertion: If Type(x) as well as Type(y) is undefined or null, return true; - * @description: Checking all combinations; -*/ - -//CHECK#1 -if ((undefined == undefined) !== true) { - $ERROR('#1: (undefined == undefined) === true'); -} - -//CHECK#2 -if ((void 0 == undefined) !== true) { - $ERROR('#2: (void 0 == undefined) === true'); -} - -//CHECK#3 -if ((undefined == eval("var x")) !== true) { - $ERROR('#3: (undefined == eval("var x")) === true'); -} - -//CHECK#4 -if ((undefined == null) !== true) { - $ERROR('#4: (undefined == null) === true'); -} - -//CHECK#5 -if ((null == void 0) !== true) { - $ERROR('#5: (null == void 0) === true'); -} - -//CHECK#6 -if ((null == null) !== true) { - $ERROR('#6: (null == null) === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A6.2_T1.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A6.2_T1.js deleted file mode 100644 index 2d8e77275..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A6.2_T1.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.1_A6.2_T1; - * @section: 11.9.1, 11.9.3; - * @assertion: If one expression is undefined or null and another is not, return false; - * @description: x is null or undefined, y is not; -*/ - -//CHECK#1 -if ((undefined == true) !== false) { - $ERROR('#1: (undefined == true) === false'); -} - -//CHECK#2 -if ((undefined == 0) !== false) { - $ERROR('#2: (undefined == 0) === false'); -} - -//CHECK#3 -if ((undefined == "undefined") !== false) { - $ERROR('#3: (undefined == "undefined") === false'); -} - -//CHECK#4 -if ((undefined == {}) !== false) { - $ERROR('#4: (undefined == {}) === false'); -} - -//CHECK#5 -if ((null == false) !== false) { - $ERROR('#5: (null == false) === false'); -} - -//CHECK#6 -if ((null == 0) !== false) { - $ERROR('#6: (null == 0) === false'); -} - -//CHECK#7 -if ((null == "null") !== false) { - $ERROR('#7: (null == "null") === false'); -} - -//CHECK#8 -if ((null == {}) !== false) { - $ERROR('#8: (null == {}) === false'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A6.2_T2.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A6.2_T2.js deleted file mode 100644 index f0de41ae1..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A6.2_T2.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.1_A6.2_T2; - * @section: 11.9.1, 11.9.3; -* @assertion: If one expression is undefined or null and another is not, return false; - * @description: y is null or undefined, x is not; -*/ - -//CHECK#1 -if ((false == undefined) !== false) { - $ERROR('#1: (false == undefined) === false'); -} - -//CHECK#2 -if ((Number.NaN == undefined) !== false) { - $ERROR('#2: (Number.NaN == undefined) === false'); -} - -//CHECK#3 -if (("undefined" == undefined) !== false) { - $ERROR('#3: ("undefined" == undefined) === false'); -} - -//CHECK#4 -if (({} == undefined) !== false) { - $ERROR('#4: ({} == undefined) === false'); -} - -//CHECK#5 -if ((false == null) !== false) { - $ERROR('#5: (false == null) === false'); -} - -//CHECK#6 -if ((0 == null) !== false) { - $ERROR('#6: (0 == null) === false'); -} - -//CHECK#7 -if (("null" == null) !== false) { - $ERROR('#7: ("null" == null) === false'); -} - -//CHECK#8 -if (({} == null) !== false) { - $ERROR('#8: ({} == null) === false'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A7.1.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A7.1.js deleted file mode 100644 index f416f2ea9..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A7.1.js +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.1_A7.1; - * @section: 11.9.1, 11.9.3; - * @assertion: Type(x) and Type(y) are Object-s. - * Return true, if x and y are references to the same Object; otherwise, return false; - * @description: Checking Boolean object, Number object, String object, Object object; - */ - -//CHECK#1 -if ((new Boolean(true) == new Boolean(true)) !== false) { - $ERROR('#1: (new Boolean(true) == new Boolean(true)) === false'); -} - -//CHECK#2 -if ((new Number(1) == new Number(1)) !== false) { - $ERROR('#2: (new Number(1) == new Number(1)) === false'); -} - -//CHECK#3 -if ((new String("x") == new String("x")) !== false) { - $ERROR('#3: (new String("x") == new String("x")) === false'); -} - -//CHECK#4 -if ((new Object() == new Object()) !== false) { - $ERROR('#4: (new Object() == new Object()) === false'); -} - -//CHECK#5 -x = {}; -y = x; -if ((x == y) !== true) { - $ERROR('#5: x = {}; y = x; (x == y) === true'); -} - -//CHECK#6 -if ((new Boolean(true) == new Number(1)) !== false) { - $ERROR('#6 (new Boolean(true) == new Number(1)) === false'); -} - -//CHECK#7 -if ((new Number(1) == new String("1")) !== false) { - $ERROR('#7: (new Number(1) == new String("1")) === false'); -} - -//CHECK#8 -if ((new String("1") == new Boolean(true)) !== false) { - $ERROR('#8: (new String("x") == new Boolean(true)) === false'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A7.2.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A7.2.js deleted file mode 100644 index dabd9d1f9..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A7.2.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.1_A7.2; - * @section: 11.9.1, 11.9.3; - * @assertion: If Type(x) is Object and Type(y) is Boolean, - * return ToPrimitive(x) == y; - * @description: x is object, y is primitive boolean; -*/ - -//CHECK#1 -if ((new Boolean(true) == true) !== true) { - $ERROR('#1: (new Boolean(true) == true) === true'); -} - -//CHECK#2 -if ((new Number(1) == true) !== true) { - $ERROR('#2: (new Number(1) == true) === true'); -} - -//CHECK#3 -if ((new String("1") == true) !== true) { - $ERROR('#3: (new String("1") == true) === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A7.3.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A7.3.js deleted file mode 100644 index efc959768..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A7.3.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.1_A7.3; - * @section: 11.9.1, 11.9.3; - * @assertion: If Type(x) is Boolean and Type(y) is Object, - * return x == ToPrimitive(y); - * @description: y is object, x is primitive boolean; - */ - -//CHECK#1 -if ((true == new Boolean(true)) !== true) { - $ERROR('#1: (true == new Boolean(true)) === true'); -} - -//CHECK#2 -if ((true == new Number(1)) !== true) { - $ERROR('#2: (true == new Number(1)) === true'); -} - -//CHECK#3 -if ((true == new String("+1")) !== true) { - $ERROR('#3: (true == new String("+1")) === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A7.4.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A7.4.js deleted file mode 100644 index 229fe3859..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A7.4.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.1_A7.4; - * @section: 11.9.1, 11.9.3; - * @assertion: If Type(x) is Object and Type(y) is Number, - * return ToPrimitive(x) == y; - * @description: x is object, y is primitive number; -*/ - -//CHECK#1 -if ((new Boolean(true) == 1) !== true) { - $ERROR('#1: (new Boolean(true) == 1) === true'); -} - -//CHECK#2 -if ((new Number(-1) == -1) !== true) { - $ERROR('#2: (new Number(-1) == -1) === true'); -} - -//CHECK#3 -if ((new String("-1") == -1) !== true) { - $ERROR('#3: (new String("-1") == -1) === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A7.5.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A7.5.js deleted file mode 100644 index e87efbf77..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A7.5.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.1_A7.5; - * @section: 11.9.1, 11.9.3; - * @assertion: If Type(x) is Number and Type(y) is Object, - * return x == ToPrimitive(y); - * @description: y is object, x is primitive number; - */ - -//CHECK#1 -if ((1 == new Boolean(true)) !== true) { - $ERROR('#1: (1 == new Boolean(true)) === true'); -} - -//CHECK#2 -if ((-1 == new Number(-1)) !== true) { - $ERROR('#2: (-1 == new Number(-1)) === true'); -} - -//CHECK#3 -if ((-1 == new String("-1")) !== true) { - $ERROR('#3: (-1 == new String("-1")) === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A7.6.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A7.6.js deleted file mode 100644 index 092a50f5d..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A7.6.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.1_A7.6; - * @section: 11.9.1, 11.9.3; - * @assertion: If Type(x) is Object and Type(y) is String, - * return ToPrimitive(x) == y; - * @description: x is object, y is primitive string; - */ - -//CHECK#1 -if ((new Boolean(true) == "1") !== true) { - $ERROR('#1: (new Boolean(true) == "1") === true'); -} - -//CHECK#2 -if ((new Number(-1) == "-1") !== true) { - $ERROR('#2: (new Number(-1) == "-1") === true'); -} - -//CHECK#3 -if ((new String("x") == "x") !== true) { - $ERROR('#3: (new String("x") == "x") === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A7.7.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A7.7.js deleted file mode 100644 index 77d8d4847..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A7.7.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.1_A7.7; - * @section: 11.9.1, 11.9.3; - * @assertion: If Type(x) is String and Type(y) is Object, - * return x == ToPrimitive(y); - * @description: y is object, x is primitive string; - */ - -//CHECK#1 -if (("1" == new Boolean(true)) !== true) { - $ERROR('#1: ("1" == new Boolean(true)) === true'); -} - -//CHECK#2 -if (("-1" == new Number(-1)) !== true) { - $ERROR('#2: ("-1" == new Number(-1)) === true'); -} - -//CHECK#3 -if (("x" == new String("x")) !== true) { - $ERROR('#3: ("x" == new String("x")) === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A7.8.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A7.8.js deleted file mode 100644 index 586f09748..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A7.8.js +++ /dev/null @@ -1,75 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.1_A7.8; - * @section: 11.9.1, 11.9.3; - * @assertion: If Type(x) is Object and Type(y) is primitive type, - * return ToPrimitive(x) == y; - * @description: x is object, y is primtitive; - */ - -//CHECK#1 -if (({valueOf: function() {return 1}} == true) !== true) { - $ERROR('#1: ({valueOf: function() {return 1}} == true) === true'); -} - -//CHECK#2 -if (({valueOf: function() {return 1}, toString: function() {return 0}} == 1) !== true) { - $ERROR('#2: ({valueOf: function() {return 1}, toString: function() {return 0}} == 1) === true'); -} - -//CHECK#3 -if (({valueOf: function() {return 1}, toString: function() {return {}}} == "+1") !== true) { - $ERROR('#3: ({valueOf: function() {return 1}, toString: function() {return {}}} == "+1") === true'); -} - -//CHECK#4 -try { - if (({valueOf: function() {return "+1"}, toString: function() {throw "error"}} == true) !== true) { - $ERROR('#4.1: ({valueOf: function() {return "+1"}, toString: function() {throw "error"}} == true) === true'); - } -} -catch (e) { - if (e === "error") { - $ERROR('#4.2: ({valueOf: function() {return "+1"}, toString: function() {throw "error"}} == true) not throw "error"'); - } else { - $ERROR('#4.3: ({valueOf: function() {return "+1"}, toString: function() {throw "error"}} == true) not throw Error. Actual: ' + (e)); - } -} - -//CHECK#5 -if (({toString: function() {return "+1"}} == 1) !== true) { - $ERROR('#5: ({toString: function() {return "+1"}} == 1) === true'); -} - -//CHECK#6 -if (({valueOf: function() {return {}}, toString: function() {return "+1"}} == "1") !== false) { - $ERROR('#6.1: ({valueOf: function() {return {}}, toString: function() {return "+1"}} == "1") === false'); -} else { - if (({valueOf: function() {return {}}, toString: function() {return "+1"}} == "+1") !== true) { - $ERROR('#6.2: ({valueOf: function() {return {}}, toString: function() {return "+1"}} == "+1") === true'); - } -} - -//CHECK#7 -try { - ({valueOf: function() {throw "error"}, toString: function() {return 1}} == 1); - $ERROR('#7.1: ({valueOf: function() {throw "error"}, toString: function() {return 1}} == 1) throw "error". Actual: ' + (({valueOf: function() {throw "error"}, toString: function() {return 1}} == 1))); -} -catch (e) { - if (e !== "error") { - $ERROR('#7.2: ({valueOf: function() {throw "error"}, toString: function() {return 1}} == 1) throw "error". Actual: ' + (e)); - } -} - -//CHECK#8 -try { - ({valueOf: function() {return {}}, toString: function() {return {}}} == 1); - $ERROR('#8.1: ({valueOf: function() {return {}}, toString: function() {return {}}} == 1) throw TypeError. Actual: ' + (({valueOf: function() {return {}}, toString: function() {return {}}} == 1))); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#8.2: ({valueOf: function() {return {}}, toString: function() {return {}}} == 1) throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A7.9.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A7.9.js deleted file mode 100644 index d20fdb5a5..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.1_The_Equals_Operator/S11.9.1_A7.9.js +++ /dev/null @@ -1,75 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.1_A7.9; - * @section: 11.9.1, 11.9.3; - * @assertion: If Type(x) is primitive type and Type(y) is Object, - * return x == ToPrimitive(y); - * @description: y is object, x is primtitive; - */ - -//CHECK#1 -if ((true == {valueOf: function() {return 1}}) !== true) { - $ERROR('#1: (true == {valueOf: function() {return 1}}) === true'); -} - -//CHECK#2 -if ((1 == {valueOf: function() {return 1}, toString: function() {return 0}}) !== true) { - $ERROR('#2: (1 == {valueOf: function() {return 1}, toString: function() {return 0}}) === true'); -} - -//CHECK#3 -if (("+1" == {valueOf: function() {return 1}, toString: function() {return {}}}) !== true) { - $ERROR('#3: ("+1" == {valueOf: function() {return 1}, toString: function() {return {}}}) === true'); -} - -//CHECK#4 -try { - if ((true == {valueOf: function() {return "+1"}, toString: function() {throw "error"}}) !== true) { - $ERROR('#4.1: (true == {valueOf: function() {return "+1"}, toString: function() {throw "error"}}) === true'); - } -} -catch (e) { - if (e === "error") { - $ERROR('#4.2: (true == {valueOf: function() {return "+1"}, toString: function() {throw "error"}}) not throw "error"'); - } else { - $ERROR('#4.3: (true == {valueOf: function() {return "+1"}, toString: function() {throw "error"}}) not throw Error. Actual: ' + (e)); - } -} - -//CHECK#5 -if ((1 == {toString: function() {return "+1"}}) !== true) { - $ERROR('#5: (1 == {toString: function() {return "+1"}}) === true'); -} - -//CHECK#6 -if (("1" == {valueOf: function() {return {}}, toString: function() {return "+1"}}) !== false) { - $ERROR('#6.1: ("1" == {valueOf: function() {return {}}, toString: function() {return "+1"}}) === false'); -} else { - if (("+1" == {valueOf: function() {return {}}, toString: function() {return "+1"}}) !== true) { - $ERROR('#6.2: ("+1" == {valueOf: function() {return {}}, toString: function() {return "+1"}}) === true'); - } -} - -//CHECK#7 -try { - (1 == {valueOf: function() {throw "error"}, toString: function() {return 1}}); - $ERROR('#7.1: (1 == {valueOf: function() {throw "error"}, toString: function() {return 1}}) throw "error". Actual: ' + ((1 == {valueOf: function() {throw "error"}, toString: function() {return 1}}))); -} -catch (e) { - if (e !== "error") { - $ERROR('#7.2: (1 == {valueOf: function() {throw "error"}, toString: function() {return 1}}) throw "error". Actual: ' + (e)); - } -} - -//CHECK#8 -try { - (1 == {valueOf: function() {return {}}, toString: function() {return {}}}); - $ERROR('#8.1: (1 == {valueOf: function() {return {}}, toString: function() {return {}}}) throw TypeError. Actual: ' + ((1 == {valueOf: function() {return {}}, toString: function() {return {}}}))); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#8.2: (1 == {valueOf: function() {return {}}, toString: function() {return {}}}) throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A1.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A1.js deleted file mode 100644 index b28112e40..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A1.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.9.2_A1; -* @section: 11.9.2, 7.2, 7.3; -* @assertion: White Space and Line Terminator between EqualityExpression and "!=" or between "!=" and RelationalExpression are allowed; -* @description: Checking by using eval; -*/ - -//CHECK#1 -if (eval("true\u0009!=\u00091") !== false) { - $ERROR('#1: (true\\u0009!=\\u00091) === false'); -} - -//CHECK#2 -if (eval("true\u000B!=\u000B1") !== false) { - $ERROR('#2: (true\\u000B!=\\u000B1) === false'); -} - -//CHECK#3 -if (eval("true\u000C!=\u000C1") !== false) { - $ERROR('#3: (true\\u000C!=\\u000C1) === false'); -} - -//CHECK#4 -if (eval("true\u0020!=\u00201") !== false) { - $ERROR('#4: (true\\u0020!=\\u00201) === false'); -} - -//CHECK#5 -if (eval("true\u00A0!=\u00A01") !== false) { - $ERROR('#5: (true\\u00A0!=\\u00A01) === false'); -} - -//CHECK#6 -if (eval("true\u000A!=\u000A1") !== false) { - $ERROR('#6: (true\\u000A!=\\u000A1) === false'); -} - -//CHECK#7 -if (eval("true\u000D!=\u000D1") !== false) { - $ERROR('#7: (true\\u000D!=\\u000D1) === false'); -} - -//CHECK#8 -if (eval("true\u2028!=\u20281") !== false) { - $ERROR('#8: (true\\u2028!=\\u20281) === false'); -} - -//CHECK#9 -if (eval("true\u2029!=\u20291") !== false) { - $ERROR('#9: (true\\u2029!=\\u20291) === false'); -} - -//CHECK#10 -if (eval("true\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029!=\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20291") !== false) { - $ERROR('#10: (true\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029!=\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20291) === false'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A2.1_T1.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A2.1_T1.js deleted file mode 100644 index ad4d6d0b4..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A2.1_T1.js +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.2_A2.1_T1; - * @section: 11.9.2; - * @assertion: Operator x != y uses GetValue; - * @description: Either Type is not Reference or GetBase is not null; -*/ - -//CHECK#1 -if ((1 != 1) !== false) { - $ERROR('#1: (1 != 1) === false'); -} - -//CHECK#2 -var x = 1; -if ((x != 1) !== false) { - $ERROR('#2: var x = 1; (x != 1) === false'); -} - -//CHECK#3 -var y = 1; -if ((1 != y) !== false) { - $ERROR('#3: var y = 1; (1 != y) === false'); -} - -//CHECK#4 -var x = 1; -var y = 1; -if ((x != y) !== false) { - $ERROR('#4: var x = 1; var y = 1; (x != y) === false'); -} - -//CHECK#5 -var objectx = new Object(); -var objecty = new Object(); -objectx.prop = 1; -objecty.prop = 1; -if ((objectx.prop != objecty.prop) !== false) { - $ERROR('#5: var objectx = new Object(); var objecty = new Object(); objectx.prop = 1; objecty.prop = 1; (objectx.prop != objecty.prop) === false'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A2.1_T2.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A2.1_T2.js deleted file mode 100644 index bc78732e0..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A2.1_T2.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.2_A2.1_T2; - * @section: 11.9.2; - * @assertion: Operator x != y uses GetValue; - * @description: If GetBase(x) is null, throw ReferenceError; -*/ - -//CHECK#1 -try { - x != 1; - $ERROR('#1.1: x != 1 throw ReferenceError. Actual: ' + (x != 1)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: x != 1 throw ReferenceError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A2.1_T3.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A2.1_T3.js deleted file mode 100644 index 353978e37..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A2.1_T3.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.2_A2.1_T3; - * @section: 11.9.2; - * @assertion: Operator x != y uses GetValue; - * @description: If GetBase(y) is null, throw ReferenceError; -*/ - -//CHECK#1 -try { - 1 != y; - $ERROR('#1: 1 != y throw ReferenceError'); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: 1 != y throw ReferenceError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A2.4_T1.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A2.4_T1.js deleted file mode 100644 index 513caef75..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A2.4_T1.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.2_A2.4_T1; - * @section: 11.9.2; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with "="; -*/ - -//CHECK#1 -var x = 0; -if (((x = 1) != x) !== false) { - $ERROR('#1: var x = 0; ((x = 1) != x) === false'); -} - -//CHECK#2 -var x = 0; -if ((x != (x = 1)) !== true) { - $ERROR('#2: var x = 0; (x != (x = 1)) === true'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A2.4_T2.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A2.4_T2.js deleted file mode 100644 index 2f86f3785..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A2.4_T2.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.2_A2.4_T2; - * @section: 11.9.2; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with "throw"; -*/ - -//CHECK#1 -var x = function () { throw "x"; }; -var y = function () { throw "y"; }; -try { - x() != y(); - $ERROR('#1.1: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() != y() throw "x". Actual: ' + (x() != y())); -} catch (e) { - if (e === "y") { - $ERROR('#1.2: First expression is evaluated first, and then second expression'); - } else { - if (e !== "x") { - $ERROR('#1.3: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() != y() throw "x". Actual: ' + (e)); - } - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A2.4_T3.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A2.4_T3.js deleted file mode 100644 index 519b668dc..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A2.4_T3.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.2_A2.4_T3; - * @section: 11.9.2; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with undeclarated variables; -*/ - -//CHECK#1 -try { - x != (x = 1); - $ERROR('#1.1: x != (x = 1) throw ReferenceError. Actual: ' + (x != (x = 1))); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: x != (x = 1) throw ReferenceError. Actual: ' + (e)); - } -} - -//CHECK#2 -if (((y = 1) != y) !== false) { - $ERROR('#2: ((y = 1) != y) === false'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A3.1.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A3.1.js deleted file mode 100644 index 330be229c..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A3.1.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.2_A3.1; - * @section: 11.9.2, 11.9.3; - * @assertion: Return false, if x and y are both true or both false; otherwise, return true; - * @description: x and y are boolean primitives; - */ - -//CHECK#1 -if ((true != true) !== false) { - $ERROR('#1: (true != true) === false'); -} - -//CHECK#2 -if ((false != false) !== false) { - $ERROR('#2: (false != false) === false'); -} - -//CHECK#3 -if ((true != false) !== true) { - $ERROR('#3: (true != false) === true'); -} - -//CHECK#4 -if ((false != true) !== true) { - $ERROR('#4: (false != true) === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A3.2.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A3.2.js deleted file mode 100644 index 1b76cf1f4..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A3.2.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.2_A3.2; - * @section: 11.9.2, 11.9.3; - * @assertion: If Type(x) is Boolean and Type(y) is Number, - * return the result of comparison ToNumber(x) != y; - * @description: x is primitive boolean, y is primitive number; - */ - -//CHECK#1 -if ((true != 1) !== false) { - $ERROR('#1: (true != 1) === false'); -} - -//CHECK#2 -if ((false != "0") !== false) { - $ERROR('#2: (false != "0") === false'); -} - -//CHECK#3 -if ((true != new Boolean(true)) !== false) { - $ERROR('#3: (true != new Boolean(true)) === false'); -} - -//CHECK#4 -if ((true != {valueOf: function () {return 1}}) !== false) { - $ERROR('#4: (true != {valueOf: function () {return 1}}) === false'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A3.3.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A3.3.js deleted file mode 100644 index 383ecd18a..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A3.3.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.2_A3.3; - * @section: 11.9.2, 11.9.3; - * @assertion: If Type(y) is Number and Type(y) is Boolean, - * return the result of comparison x != ToNumber(y); - * @description: x is primitive number, y is primitive boolean; - */ - -//CHECK#1 -if ((0 != false) !== false) { - $ERROR('#1: (0 != false) === false'); -} - -//CHECK#2 -if (("1" != true) !== false) { - $ERROR('#2: ("1" != true) === false'); -} - -//CHECK#3 -if ((new Boolean(false) != false) !== false) { - $ERROR('#3: (new Boolean(false) != false) === false'); -} - -//CHECK#4 -if (({valueOf: function () {return "0"}} != false) !== false) { - $ERROR('#4: ({valueOf: function () {return "0"}} != false) === false'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A4.1_T1.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A4.1_T1.js deleted file mode 100644 index 86d36429c..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A4.1_T1.js +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.2_A4.1_T1; - * @section: 11.9.2, 11.9.3; - * @assertion: If x or y is NaN, return true; - * @description: x is NaN; -*/ - -//CHECK#1 -if ((Number.NaN != true) !== true) { - $ERROR('#1: (NaN != true) === true'); -} - -//CHECK#2 -if ((Number.NaN != 1) !== true) { - $ERROR('#2: (NaN != 1) === true'); -} - -//CHECK#3 -if ((Number.NaN != Number.NaN) !== true) { - $ERROR('#3: (NaN != NaN) === true'); -} - -//CHECK#4 -if ((Number.NaN != Number.POSITIVE_INFINITY) !== true) { - $ERROR('#4: (NaN != +Infinity) === true'); -} - -//CHECK#5 -if ((Number.NaN != Number.NEGATIVE_INFINITY) !== true) { - $ERROR('#5: (NaN != -Infinity) === true'); -} - -//CHECK#6 -if ((Number.NaN != Number.MAX_VALUE) !== true) { - $ERROR('#6: (NaN != Number.MAX_VALUE) === true'); -} - -//CHECK#7 -if ((Number.NaN != Number.MIN_VALUE) !== true) { - $ERROR('#7: (NaN != Number.MIN_VALUE) === true'); -} - -//CHECK#8 -if ((Number.NaN != "string") !== true) { - $ERROR('#8: (NaN != "string") === true'); -} - -//CHECK#9 -if ((Number.NaN != new Object()) !== true) { - $ERROR('#9: (NaN != new Object()) === true'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A4.1_T2.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A4.1_T2.js deleted file mode 100644 index e0dd5081a..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A4.1_T2.js +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.2_A4.1_T2; - * @section: 11.9.2, 11.9.3; - * @assertion: If x or y is NaN, return true; - * @description: y is NaN; -*/ - -//CHECK#1 -if ((true != Number.NaN) !== true) { - $ERROR('#1: (true != NaN) === true'); -} - -//CHECK#2 -if ((-1 != Number.NaN) !== true) { - $ERROR('#2: (-1 != NaN) === true'); -} - -//CHECK#3 -if ((Number.NaN != Number.NaN) !== true) { - $ERROR('#3: (NaN != NaN) === true'); -} - -//CHECK#4 -if ((Number.POSITIVE_INFINITY != Number.NaN) !== true) { - $ERROR('#4: (+Infinity != NaN) === true'); -} - -//CHECK#5 -if ((Number.NEGATIVE_INFINITY != Number.NaN) !== true) { - $ERROR('#5: (-Infinity != NaN) === true'); -} - -//CHECK#6 -if ((Number.MAX_VALUE != Number.NaN) !== true) { - $ERROR('#6: (Number.MAX_VALUE != NaN) === true'); -} - -//CHECK#7 -if ((Number.MIN_VALUE != Number.NaN) !== true) { - $ERROR('#7: (Number.MIN_VALUE != NaN) === true'); -} - -//CHECK#8 -if (("string" != Number.NaN) !== true) { - $ERROR('#8: ("string" != NaN) === true'); -} - -//CHECK#9 -if ((new Object() != Number.NaN) !== true) { - $ERROR('#9: (new Object() != NaN) === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A4.2.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A4.2.js deleted file mode 100644 index 78a6f0c4b..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A4.2.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.2_A4.2; - * @section: 11.9.2, 11.9.3; - * @assertion: If x is +0(-0) and y is -0(+0), return false; - * @description: Checking all combinations; -*/ - -//CHECK#1 -if ((+0 != -0) !== false) { - $ERROR('#1: (+0 != -0) === false'); -} - -//CHECK#2 -if ((-0 != +0) !== false) { - $ERROR('#2: (-0 != +0) === false'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A4.3.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A4.3.js deleted file mode 100644 index 51e9e6d6d..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A4.3.js +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.2_A4.3; - * @section: 11.9.2, 11.9.3; - * @assertion: Type(x) and Type(y) are Number-s minus NaN, +0, -0. - * Return false, if x is the same number value as y; otherwise, return true; - * @description: x and y are primitive numbers; -*/ - -//CHECK#1 -if ((Number.POSITIVE_INFINITY != Number.POSITIVE_INFINITY) !== false) { - $ERROR('#1: (+Infinity != +Infinity) === false'); -} - -//CHECK#2 -if ((Number.NEGATIVE_INFINITY != Number.NEGATIVE_INFINITY) !== false) { - $ERROR('#2: (-Infinity != -Infinity) === false'); -} - -//CHECK#3 -if ((Number.POSITIVE_INFINITY != -Number.NEGATIVE_INFINITY) !== false) { - $ERROR('#3: (+Infinity != -(-Infinity)) === false'); -} - -//CHECK#4 -if ((1 != 0.999999999999) !== true) { - $ERROR('#4: (1 != 0.999999999999) === true'); -} - -//CHECK#5 -if ((1.0 != 1) !== false) { - $ERROR('#5: (1.0 != 1) === false'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A5.1.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A5.1.js deleted file mode 100644 index a33364a20..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A5.1.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.2_A5.1; - * @section: 11.9.2, 11.9.3; - * @assertion: Type(x) and Type(y) are String-s. - * Return true, if x and y are exactly the same sequence of characters; otherwise, return false; - * @description: x and y are primitive strings; - */ - -//CHECK#1 -if (("" != "") !== false) { - $ERROR('#1: ("" != "") === false'); -} - -//CHECK#2 -if ((" " != " ") !== false) { - $ERROR('#2: " (" != " ") === false'); -} - -//CHECK#3 -if ((" " != "") !== true) { - $ERROR('#3: " (" != "") === true'); -} - -//CHECK#4 -if (("string" != "string") !== false) { - $ERROR('#4: ("string" != "string") === false'); -} - -//CHECK#5 -if ((" string" != "string ") !== true) { - $ERROR('#5: (" string" != "string ") === true'); -} - -//CHECK#6 -if (("1.0" != "1") !== true) { - $ERROR('#6: ("1.0" != "1") === true'); -} - -//CHECK#7 -if (("0xff" != "255") !== true) { - $ERROR('#7: ("0xff" != "255") === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A5.2.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A5.2.js deleted file mode 100644 index 81efe0521..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A5.2.js +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.2_A5.2; - * @section: 11.9.2, 11.9.3; - * @assertion: If Type(x) is Number and Type(y) is String, - * return the result of comparison x != ToNumber(y); - * @description: x is primitive number, y is primitive string; - */ - -//CHECK#1 -if ((1 != "1") !== false) { - $ERROR('#1: (1 != "1") === false'); -} - -//CHECK#2 -if ((1.100 != "+1.10") !== false) { - $ERROR('#2: (1.100 != "+1.10") === false'); -} - -//CHECK#3 -if ((1 != "true") !== true) { - $ERROR('#3: (1 != "true") === true'); -} - -//CHECK#4 -if ((255 != "0xff") !== false) { - $ERROR('#4: (255 != "0xff") === false'); -} - -//CHECK#5 -if ((0 != "") !== false) { - $ERROR('#5: (0 != "") === false'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A5.3.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A5.3.js deleted file mode 100644 index d2b9f8802..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A5.3.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.2_A5.3; - * @section: 11.9.2, 11.9.3; - * @assertion: If Type(x) is String and Type(y) is Number, - * return the result of comparison ToNumber(x) != y; - * @description: x is primitive string, y is primitive number; - */ - -//CHECK#1 -if (("-1" != -1) !== false) { - $ERROR('#1: ("-1" != -1) === false'); -} - -//CHECK#2 -if (("-1.100" != -1.10) !== false) { - $ERROR('#2: ("-1.100" != -1.10) === false'); -} - -//CHECK#3 -if (("false" != 0) !== true) { - $ERROR('#3: ("false" != 0) === true'); -} - -//CHECK#4 -if (("5e-324" != 5e-324) !== false) { - $ERROR('#4: ("5e-324" != 5e-324) === false'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A6.1.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A6.1.js deleted file mode 100644 index b1eff0595..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A6.1.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.2_A6.1; - * @section: 11.9.2, 11.9.3; - * @assertion: If Type(x) as well as Type(y) is Undefined or Null, return true; - * @description: Checking all combinations; -*/ - -//CHECK#1 -if ((undefined != undefined) !== false) { - $ERROR('#1: (undefined != undefined) === false'); -} - -//CHECK#2 -if ((void 0 != undefined) !== false) { - $ERROR('#2: (void 0 != undefined) === false'); -} - -//CHECK#3 -if ((undefined != eval("var x")) !== false) { - $ERROR('#3: (undefined != eval("var x")) === false'); -} - -//CHECK#4 -if ((undefined != null) !== false) { - $ERROR('#4: (undefined != null) === false'); -} - -//CHECK#5 -if ((null != void 0) !== false) { - $ERROR('#5: (null != void 0) === false'); -} - -//CHECK#6 -if ((null != null) !== false) { - $ERROR('#6: (null != null) === false'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A6.2_T1.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A6.2_T1.js deleted file mode 100644 index 77459322f..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A6.2_T1.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.2_A6.2_T1; - * @section: 11.9.2, 11.9.3; - * @assertion: If one expression is undefined or null and another is not, return false; - * @description: x is null or undefined, y is not; -*/ - -//CHECK#1 -if ((undefined != true) !== true) { - $ERROR('#1: (undefined != true) === true'); -} - -//CHECK#2 -if ((undefined != 0) !== true) { - $ERROR('#2: (undefined != 0) === true'); -} - -//CHECK#3 -if ((undefined != "undefined") !== true) { - $ERROR('#3: (undefined != "undefined") === true'); -} - -//CHECK#4 -if ((undefined != {}) !== true) { - $ERROR('#4: (undefined != {}) === true'); -} - -//CHECK#5 -if ((null != false) !== true) { - $ERROR('#5: (null != false) === true'); -} - -//CHECK#6 -if ((null != 0) !== true) { - $ERROR('#6: (null != 0) === true'); -} - -//CHECK#7 -if ((null != "null") !== true) { - $ERROR('#7: (null != "null") === true'); -} - -//CHECK#8 -if ((null != {}) !== true) { - $ERROR('#8: (null != {}) === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A6.2_T2.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A6.2_T2.js deleted file mode 100644 index 7d4df946e..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A6.2_T2.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.2_A6.2_T2; - * @section: 11.9.2, 11.9.3; - * @assertion: If one expression is undefined or null and another is not, return false; - * @description: y is null or undefined, x is not; -*/ - -//CHECK#1 -if ((false != undefined) !== true) { - $ERROR('#1: (false != undefined) === true'); -} - -//CHECK#2 -if ((Number.NaN != undefined) !== true) { - $ERROR('#2: (Number.NaN != undefined) === true'); -} - -//CHECK#3 -if (("undefined" != undefined) !== true) { - $ERROR('#3: ("undefined" != undefined) === true'); -} - -//CHECK#4 -if (({} != undefined) !== true) { - $ERROR('#4: ({} != undefined) === true'); -} - -//CHECK#5 -if ((false != null) !== true) { - $ERROR('#5: (false != null) === true'); -} - -//CHECK#6 -if ((0 != null) !== true) { - $ERROR('#6: (0 != null) === true'); -} - -//CHECK#7 -if (("null" != null) !== true) { - $ERROR('#7: ("null" != null) === true'); -} - -//CHECK#8 -if (({} != null) !== true) { - $ERROR('#8: ({} != null) === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A7.1.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A7.1.js deleted file mode 100644 index daa9218fd..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A7.1.js +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.2_A7.1; - * @section: 11.9.2, 11.9.3; - * @assertion: Type(x) and Type(y) are Object-s. - * Return true, if x and y are references to the same Object; otherwise, return false; - * @description: Checking Boolean object, Number object, String object, Object object; - */ - -//CHECK#1 -if ((new Boolean(true) != new Boolean(true)) !== true) { - $ERROR('#1: (new Boolean(true) != new Boolean(true)) === true'); -} - -//CHECK#2 -if ((new Number(1) != new Number(1)) !== true) { - $ERROR('#2: (new Number(1) != new Number(1)) === true'); -} - -//CHECK#3 -if ((new String("x") != new String("x")) !== true) { - $ERROR('#3: (new String("x") != new String("x")) === true'); -} - -//CHECK#4 -if ((new Object() != new Object()) !== true) { - $ERROR('#4: (new Object() != new Object()) === true'); -} - -//CHECK#5 -x = {}; -y = x; -if ((x != y) !== false) { - $ERROR('#5: x = {}; y = x; (x != y) === false'); -} - -//CHECK#6 -if ((new Boolean(true) != new Number(1)) !== true) { - $ERROR('#6 (new Boolean(true) != new Number(1)) === true'); -} - -//CHECK#7 -if ((new Number(1) != new String("1")) !== true) { - $ERROR('#7: (new Number(1) != new String("1")) === true'); -} - -//CHECK#8 -if ((new String("1") != new Boolean(true)) !== true) { - $ERROR('#8: (new String("x") != new Boolean(true)) === true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A7.2.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A7.2.js deleted file mode 100644 index cc60a640a..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A7.2.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.2_A7.2; - * @section: 11.9.2, 11.9.3; - * @assertion: If Type(x) is Object and Type(y) is Boolean, - * return ToPrimitive(x) != y; - * @description: x is object, y is primitive boolean; -*/ - -//CHECK#1 -if ((new Boolean(true) != true) !== false) { - $ERROR('#1: (new Boolean(true) != true) === false'); -} - -//CHECK#2 -if ((new Number(1) != true) !== false) { - $ERROR('#2: (new Number(1) != true) === false'); -} - -//CHECK#3 -if ((new String("1") != true) !== false) { - $ERROR('#3: (new String("1") != true) === false'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A7.3.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A7.3.js deleted file mode 100644 index 90449b38c..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A7.3.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.2_A7.3; - * @section: 11.9.2, 11.9.3; - * @assertion: If Type(x) is Boolean and Type(y) is Object, - * return x != ToPrimitive(y); - * @description: y is object, x is primitive boolean; - */ - -//CHECK#1 -if ((true != new Boolean(true)) !== false) { - $ERROR('#1: (true != new Boolean(true)) === false'); -} - -//CHECK#2 -if ((true != new Number(1)) !== false) { - $ERROR('#2: (true != new Number(1)) === false'); -} - -//CHECK#3 -if ((true != new String("+1")) !== false) { - $ERROR('#3: (true != new String("+1")) === false'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A7.4.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A7.4.js deleted file mode 100644 index 59f178672..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A7.4.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.2_A7.4; - * @section: 11.9.2, 11.9.3; - * @assertion: If Type(x) is Object and Type(y) is Number, - * return ToPrimitive(x) != y; - * @description: x is object, y is primitive number; -*/ - -//CHECK#1 -if ((new Boolean(true) != 1) !== false) { - $ERROR('#1: (new Boolean(true) != 1) === false'); -} - -//CHECK#2 -if ((new Number(-1) != -1) !== false) { - $ERROR('#2: (new Number(-1) != -1) === false'); -} - -//CHECK#3 -if ((new String("-1") != -1) !== false) { - $ERROR('#3: (new String("-1") != -1) === false'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A7.5.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A7.5.js deleted file mode 100644 index fc587b166..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A7.5.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.2_A7.5; - * @section: 11.9.2, 11.9.3; - * @assertion: If Type(x) is Number and Type(y) is Object, - * return x != ToPrimitive(y); - * @description: y is object, x is primitive number; - */ - -//CHECK#1 -if ((1 != new Boolean(true)) !== false) { - $ERROR('#1: (1 != new Boolean(true)) === false'); -} - -//CHECK#2 -if ((-1 != new Number(-1)) !== false) { - $ERROR('#2: (-1 != new Number(-1)) === false'); -} - -//CHECK#3 -if ((-1 != new String("-1")) !== false) { - $ERROR('#3: (-1 != new String("-1")) === false'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A7.6.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A7.6.js deleted file mode 100644 index d9d9566b6..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A7.6.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.2_A7.6; - * @section: 11.9.2, 11.9.3; - * @assertion: If Type(x) is Object and Type(y) is String, - * return ToPrimitive(x) != y; - * @description: x is object, y is primitive string; - */ - -//CHECK#1 -if ((new Boolean(true) != "1") !== false) { - $ERROR('#1: (new Boolean(true) != "1") === false'); -} - -//CHECK#2 -if ((new Number(-1) != "-1") !== false) { - $ERROR('#2: (new Number(-1) != "-1") === false'); -} - -//CHECK#3 -if ((new String("x") != "x") !== false) { - $ERROR('#3: (new String("x") != "x") === false'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A7.7.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A7.7.js deleted file mode 100644 index 56a8d5b52..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A7.7.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.2_A7.7; - * @section: 11.9.2, 11.9.3; - * @assertion: If Type(x) is String and Type(y) is Object, - * return x != ToPrimitive(y); - * @description: y is object, x is primitive string; - */ - -//CHECK#1 -if (("1" != new Boolean(true)) !== false) { - $ERROR('#1: ("1" != new Boolean(true)) === false'); -} - -//CHECK#2 -if (("-1" != new Number(-1)) !== false) { - $ERROR('#2: ("-1" != new Number(-1)) === false'); -} - -//CHECK#3 -if (("x" != new String("x")) !== false) { - $ERROR('#3: ("x" != new String("x")) === false'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A7.8.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A7.8.js deleted file mode 100644 index 0e2521ab5..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A7.8.js +++ /dev/null @@ -1,75 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.2_A7.8; - * @section: 11.9.2, 11.9.3; - * @assertion: If Type(x) is Object and Type(y) is primitive type, - * return ToPrimitive(x) != y; - * @description: x is object, y is primtitive; - */ - -//CHECK#1 -if ((true != {valueOf: function() {return 1}}) !== false) { - $ERROR('#1: (true != {valueOf: function() {return 1}}) === false'); -} - -//CHECK#2 -if ((1 != {valueOf: function() {return 1}, toString: function() {return 0}}) !== false) { - $ERROR('#2: (1 != {valueOf: function() {return 1}, toString: function() {return 0}}) === false'); -} - -//CHECK#3 -if (("+1" != {valueOf: function() {return 1}, toString: function() {return {}}}) !== false) { - $ERROR('#3: ("+1" != {valueOf: function() {return 1}, toString: function() {return {}}}) === false'); -} - -//CHECK#4 -try { - if ((true != {valueOf: function() {return "+1"}, toString: function() {throw "error"}}) !== false) { - $ERROR('#4.1: (true != {valueOf: function() {return "+1"}, toString: function() {throw "error"}}) === false'); - } -} -catch (e) { - if (e === "error") { - $ERROR('#4.2: (true != {valueOf: function() {return "+1"}, toString: function() {throw "error"}}) not throw "error"'); - } else { - $ERROR('#4.3: (true != {valueOf: function() {return "+1"}, toString: function() {throw "error"}}) not throw Error. Actual: ' + (e)); - } -} - -//CHECK#5 -if ((1 != {toString: function() {return "+1"}}) !== false) { - $ERROR('#5: (1 != {toString: function() {return "+1"}}) === false'); -} - -//CHECK#6 -if (("1" != {valueOf: function() {return {}}, toString: function() {return "+1"}}) !== true) { - $ERROR('#6.1: ("1" != {valueOf: function() {return {}}, toString: function() {return "+1"}}) === true'); -} else { - if (("+1" != {valueOf: function() {return {}}, toString: function() {return "+1"}}) !== false) { - $ERROR('#6.2: ("+1" != {valueOf: function() {return {}}, toString: function() {return "+1"}}) === false'); - } -} - -//CHECK#7 -try { - (1 != {valueOf: function() {throw "error"}, toString: function() {return 1}}); - $ERROR('#7: (1 != {valueOf: function() {throw "error"}, toString: function() {return 1}}) throw "error"'); -} -catch (e) { - if (e !== "error") { - $ERROR('#7: (1 != {valueOf: function() {throw "error"}, toString: function() {return 1}}) throw "error"'); - } -} - -//CHECK#8 -try { - (1 != {valueOf: function() {return {}}, toString: function() {return {}}}); - $ERROR('#8: (1 != {valueOf: function() {return {}}, toString: function() {return {}}}) throw TypeError'); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#8: (1 != {valueOf: function() {return {}}, toString: function() {return {}}}) throw TypeError'); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A7.9.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A7.9.js deleted file mode 100644 index 6b91adb63..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.2_The_Does_not_equals_Operator/S11.9.2_A7.9.js +++ /dev/null @@ -1,75 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.2_A7.9; - * @section: 11.9.2, 11.9.3; - * @assertion: If Type(x) is primitive type and Type(y) is Object, - * return x != ToPrimitive(y); - * @description: y is object, x is primtitive; - */ - -//CHECK#1 -if (({valueOf: function() {return 1}} != true) !== false) { - $ERROR('#1: ({valueOf: function() {return 1}} != true) === false'); -} - -//CHECK#2 -if (({valueOf: function() {return 1}, toString: function() {return 0}} != 1) !== false) { - $ERROR('#2: ({valueOf: function() {return 1}, toString: function() {return 0}} != 1) === false'); -} - -//CHECK#3 -if (({valueOf: function() {return 1}, toString: function() {return {}}} != "+1") !== false) { - $ERROR('#3: ({valueOf: function() {return 1}, toString: function() {return {}}} != "+1") === false'); -} - -//CHECK#4 -try { - if (({valueOf: function() {return "+1"}, toString: function() {throw "error"}} != true) !== false) { - $ERROR('#4.1: ({valueOf: function() {return "+1"}, toString: function() {throw "error"}} != true) === false'); - } -} -catch (e) { - if (e === "error") { - $ERROR('#4.2: ({valueOf: function() {return "+1"}, toString: function() {throw "error"}} != true) not throw "error"'); - } else { - $ERROR('#4.3: ({valueOf: function() {return "+1"}, toString: function() {throw "error"}} != true) not throw Error. Actual: ' + (e)); - } -} - -//CHECK#5 -if (({toString: function() {return "+1"}} != 1) !== false) { - $ERROR('#5: ({toString: function() {return "+1"}} != 1) === false'); -} - -//CHECK#6 -if (({valueOf: function() {return {}}, toString: function() {return "+1"}} != "1") !== true) { - $ERROR('#6.1: ({valueOf: function() {return {}}, toString: function() {return "+1"}} != "1") === true'); -} else { - if (({valueOf: function() {return {}}, toString: function() {return "+1"}} != "+1") !== false) { - $ERROR('#6.2: ({valueOf: function() {return {}}, toString: function() {return "+1"}} != "+1") === false'); - } -} - -//CHECK#7 -try { - ({valueOf: function() {throw "error"}, toString: function() {return 1}} != 1); - $ERROR('#7.1: ({valueOf: function() {throw "error"}, toString: function() {return 1}} != 1) throw "error". Actual: ' + (({valueOf: function() {throw "error"}, toString: function() {return 1}} != 1))); -} -catch (e) { - if (e !== "error") { - $ERROR('#7.2: ({valueOf: function() {throw "error"}, toString: function() {return 1}} != 1) throw "error". Actual: ' + (e)); - } -} - -//CHECK#8 -try { - ({valueOf: function() {return {}}, toString: function() {return {}}} != 1); - $ERROR('#8.1: ({valueOf: function() {return {}}, toString: function() {return {}}} != 1) throw TypeError. Actual: ' + (({valueOf: function() {return {}}, toString: function() {return {}}} != 1))); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#8.2: ({valueOf: function() {return {}}, toString: function() {return {}}} != 1) throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.4_The_Strict_Equals_Operator/S11.9.4_A1.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.4_The_Strict_Equals_Operator/S11.9.4_A1.js deleted file mode 100644 index 67fb026a8..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.4_The_Strict_Equals_Operator/S11.9.4_A1.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.4_A1; - * @section: 11.9.4, 7.2, 7.3; - * @assertion: White Space and Line Terminator between EqualityExpression and "===" or between "===" and RelationalExpression are allowed; - * @description: Checking by using eval; -*/ - -//CHECK#1 -if (!(eval("1\u0009===\u00091"))) { - $ERROR('#1: 1\\u0009===\\u00091'); -} - -//CHECK#2 -if (!(eval("1\u000B===\u000B1"))) { - $ERROR('#2: 1\\u000B===\\u000B1'); -} - -//CHECK#3 -if (!(eval("1\u000C===\u000C1"))) { - $ERROR('#3: 1\\u000C===\\u000C1'); -} - -//CHECK#4 -if (!(eval("1\u0020===\u00201"))) { - $ERROR('#4: 1\\u0020===\\u00201'); -} - -//CHECK#5 -if (!(eval("1\u00A0===\u00A01"))) { - $ERROR('#5: 1\\u00A0===\\u00A01'); -} - -//CHECK#6 -if (!(eval("1\u000A===\u000A1"))) { - $ERROR('#6: 1\\u000A===\\u000A1'); -} - -//CHECK#7 -if (!(eval("1\u000D===\u000D1"))) { - $ERROR('#7: 1\\u000D===\\u000D1'); -} - -//CHECK#8 -if (!(eval("1\u2028===\u20281"))) { - $ERROR('#8: 1\\u2028===\\u20281'); -} - -//CHECK#9 -if (!(eval("1\u2029===\u20291"))) { - $ERROR('#9: 1\\u2029===\\u20291'); -} - -//CHECK#10 -if (!(eval("1\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029===\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20291"))) { - $ERROR('#10: 1\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029===\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20291'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.4_The_Strict_Equals_Operator/S11.9.4_A2.1_T1.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.4_The_Strict_Equals_Operator/S11.9.4_A2.1_T1.js deleted file mode 100644 index 2c5a6d258..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.4_The_Strict_Equals_Operator/S11.9.4_A2.1_T1.js +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.4_A2.1_T1; - * @section: 11.9.4; - * @assertion: Operator x === y uses GetValue; - * @description: Either Type is not Reference or GetBase is not null; -*/ - -//CHECK#1 -if (!(1 === 1)) { - $ERROR('#1: 1 === 1'); -} - -//CHECK#2 -var x = 1; -if (!(x === 1)) { - $ERROR('#2: var x = 1; x === 1'); -} - -//CHECK#3 -var y = 1; -if (!(1 === y)) { - $ERROR('#3: var y = 1; 1 === y'); -} - -//CHECK#4 -var x = 1; -var y = 1; -if (!(x === y)) { - $ERROR('#4: var x = 1; var y = 1; x === y'); -} - -//CHECK#5 -var objectx = new Object(); -var objecty = new Object(); -objectx.prop = 1; -objecty.prop = 1; -if (!(objectx.prop === objecty.prop)) { - $ERROR('#5: var objectx = new Object(); var objecty = new Object(); objectx.prop = 1; objecty.prop = 1; objectx.prop === objecty.prop'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.4_The_Strict_Equals_Operator/S11.9.4_A2.1_T2.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.4_The_Strict_Equals_Operator/S11.9.4_A2.1_T2.js deleted file mode 100644 index 4f134f56b..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.4_The_Strict_Equals_Operator/S11.9.4_A2.1_T2.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.4_A2.1_T2; - * @section: 11.9.4; - * @assertion: Operator x === y uses GetValue; - * @description: If GetBase(x) is null, throw ReferenceError; -*/ - -//CHECK#1 -try { - x === 1; - $ERROR('#1.1: x === 1 throw ReferenceError. Actual: ' + (x === 1)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: x === 1 throw ReferenceError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.4_The_Strict_Equals_Operator/S11.9.4_A2.1_T3.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.4_The_Strict_Equals_Operator/S11.9.4_A2.1_T3.js deleted file mode 100644 index 143989d2f..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.4_The_Strict_Equals_Operator/S11.9.4_A2.1_T3.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.4_A2.1_T3; - * @section: 11.9.4; - * @assertion: Operator x === y uses GetValue; - * @description: If GetBase(y) is null, throw ReferenceError; -*/ - -//CHECK#1 -try { - 1 === y; - $ERROR('#1.1: 1 === y throw ReferenceError. Actual: ' + (1 === y)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: 1 === y throw ReferenceError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.4_The_Strict_Equals_Operator/S11.9.4_A2.4_T1.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.4_The_Strict_Equals_Operator/S11.9.4_A2.4_T1.js deleted file mode 100644 index aecbd9e18..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.4_The_Strict_Equals_Operator/S11.9.4_A2.4_T1.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.4_A2.4_T1; - * @section: 11.9.4; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with "="; -*/ - -//CHECK#1 -var x = 0; -if (!((x = 1) === x)) { - $ERROR('#1: var x = 0; (x = 1) === x'); -} - -//CHECK#2 -var x = 0; -if (x === (x = 1)) { - $ERROR('#2: var x = 0; x !== (x = 1)'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.4_The_Strict_Equals_Operator/S11.9.4_A2.4_T2.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.4_The_Strict_Equals_Operator/S11.9.4_A2.4_T2.js deleted file mode 100644 index cc7ffabf2..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.4_The_Strict_Equals_Operator/S11.9.4_A2.4_T2.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.4_A2.4_T2; - * @section: 11.9.4; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with "throw"; -*/ - -//CHECK#1 -var x = function () { throw "x"; }; -var y = function () { throw "y"; }; -try { - x() === y(); - $ERROR('#1.1: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() === y() throw "x". Actual: ' + (x() === y())); -} catch (e) { - if (e === "y") { - $ERROR('#1.2: First expression is evaluated first, and then second expression'); - } else { - if (!(e === "x")) { - $ERROR('#1.3: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() === y() throw "x". Actual: ' + (e)); - } - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.4_The_Strict_Equals_Operator/S11.9.4_A2.4_T3.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.4_The_Strict_Equals_Operator/S11.9.4_A2.4_T3.js deleted file mode 100644 index 106fa5bcb..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.4_The_Strict_Equals_Operator/S11.9.4_A2.4_T3.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.4_A2.4_T3; - * @section: 11.9.4; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with undeclarated variables; -*/ - -//CHECK#1 -try { - x === (x = 1); - $ERROR('#1.1: x === (x = 1) throw ReferenceError. Actual: ' + (x === (x = 1))); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: x === (x = 1) throw ReferenceError. Actual: ' + (e)); - } -} - -//CHECK#2 -if (!((y = 1) === y)) { - $ERROR('#2: (y = 1) === y'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.4_The_Strict_Equals_Operator/S11.9.4_A3.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.4_The_Strict_Equals_Operator/S11.9.4_A3.js deleted file mode 100644 index eae3e555d..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.4_The_Strict_Equals_Operator/S11.9.4_A3.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.4_A3; - * @section: 11.9.4, 11.9.6; - * @assertion: Type(x) and Type(y) are Boolean-s. - * Return true, if x and y are both true and both false; otherwise, return false; - * @description: x and y are primitive booleans; - */ - -//CHECK#1 -if (!(true === true)) { - $ERROR('#1: true === true'); -} - -//CHECK#2 -if (!(false === false)) { - $ERROR('#2: false === false'); -} - -//CHECK#3 -if (true === false) { - $ERROR('#3: true !== false'); -} - -//CHECK#4 -if (false === true) { - $ERROR('#4: false !== true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.4_The_Strict_Equals_Operator/S11.9.4_A4.1_T1.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.4_The_Strict_Equals_Operator/S11.9.4_A4.1_T1.js deleted file mode 100644 index 191771ee1..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.4_The_Strict_Equals_Operator/S11.9.4_A4.1_T1.js +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.4_A4.1_T1; - * @section: 11.9.4, 11.9.6; - * @assertion: If x or y is NaN, return false; - * @description: x is NaN; -*/ - -//CHECK#1 -if (Number.NaN === true) { - $ERROR('#1: NaN !== true'); -} - -//CHECK#2 -if (Number.NaN === 1) { - $ERROR('#2: NaN !== 1'); -} - -//CHECK#3 -if (Number.NaN === Number.NaN) { - $ERROR('#3: NaN !== NaN'); -} - -//CHECK#4 -if (Number.NaN === Number.POSITIVE_INFINITY) { - $ERROR('#4: NaN !== +Infinity'); -} - -//CHECK#5 -if (Number.NaN === Number.NEGATIVE_INFINITY) { - $ERROR('#5: NaN !== -Infinity'); -} - -//CHECK#6 -if (Number.NaN === Number.MAX_VALUE) { - $ERROR('#6: NaN !== Number.MAX_VALUE'); -} - -//CHECK#7 -if (Number.NaN === Number.MIN_VALUE) { - $ERROR('#7: NaN !== Number.MIN_VALUE'); -} - -//CHECK#8 -if (Number.NaN === "string") { - $ERROR('#8: NaN !== "string"'); -} - -//CHECK#9 -if (Number.NaN === new Object()) { - $ERROR('#9: NaN !== new Object()'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.4_The_Strict_Equals_Operator/S11.9.4_A4.1_T2.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.4_The_Strict_Equals_Operator/S11.9.4_A4.1_T2.js deleted file mode 100644 index b0d8358c8..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.4_The_Strict_Equals_Operator/S11.9.4_A4.1_T2.js +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.4_A4.1_T2; - * @section: 11.9.4, 11.9.6; - * @assertion: If x or y is NaN, return false; - * @description: y is NaN; -*/ - -//CHECK#1 -if (true === Number.NaN) { - $ERROR('#1: true !== NaN'); -} - -//CHECK#2 -if (-1 === Number.NaN) { - $ERROR('#2: -1 !== NaN'); -} - -//CHECK#3 -if (Number.NaN === Number.NaN) { - $ERROR('#3: NaN !== NaN'); -} - -//CHECK#4 -if (Number.POSITIVE_INFINITY === Number.NaN) { - $ERROR('#4: +Infinity !== NaN'); -} - -//CHECK#5 -if (Number.NEGATIVE_INFINITY === Number.NaN) { - $ERROR('#5: -Infinity !== NaN'); -} - -//CHECK#6 -if (Number.MAX_VALUE === Number.NaN) { - $ERROR('#6: Number.MAX_VALUE !== NaN'); -} - -//CHECK#7 -if (Number.MIN_VALUE === Number.NaN) { - $ERROR('#7: Number.MIN_VALUE !== NaN'); -} - -//CHECK#8 -if ("string" === Number.NaN) { - $ERROR('#8: "string" !== NaN'); -} - -//CHECK#9 -if (new Object() === Number.NaN) { - $ERROR('#9: new Object() !== NaN'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.4_The_Strict_Equals_Operator/S11.9.4_A4.2.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.4_The_Strict_Equals_Operator/S11.9.4_A4.2.js deleted file mode 100644 index d9c5a3c7b..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.4_The_Strict_Equals_Operator/S11.9.4_A4.2.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.4_A4.2; - * @section: 11.9.4, 11.9.6; - * @assertion: If x is +0(-0) and y is -0(+0), return true; - * @description: Checking all combinations; -*/ - -//CHECK#1 -if (!(+0 === -0)) { - $ERROR('#1: +0 === -0'); -} - -//CHECK#2 -if (!(-0 === +0)) { - $ERROR('#2: -0 === +0'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.4_The_Strict_Equals_Operator/S11.9.4_A4.3.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.4_The_Strict_Equals_Operator/S11.9.4_A4.3.js deleted file mode 100644 index f3cec65bc..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.4_The_Strict_Equals_Operator/S11.9.4_A4.3.js +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.4_A4.3; - * @section: 11.9.4, 11.9.6; - * @assertion: Type(x) and Type(y) are Number-s minus NaN, +0, -0. - * Return true, if x is the same number value as y; otherwise, return false; - * @description: x and y are primitive numbers; -*/ - -//CHECK#1 -if (!(Number.POSITIVE_INFINITY === Number.POSITIVE_INFINITY)) { - $ERROR('#1: +Infinity === +Infinity'); -} - -//CHECK#2 -if (!(Number.NEGATIVE_INFINITY === Number.NEGATIVE_INFINITY)) { - $ERROR('#2: -Infinity === -Infinity'); -} - -//CHECK#3 -if (!(13 === 13)) { - $ERROR('#3: 13 === 13'); -} - -//CHECK#4 -if (!(-13 === -13)) { - $ERROR('#4: -13 === -13'); -} - -//CHECK#5 -if (!(1.3 === 1.3)) { - $ERROR('#5: 1.3 === 1.3'); -} - -//CHECK#6 -if (!(-1.3 === -1.3)) { - $ERROR('#6: -1.3 === -1.3'); -} - -//CHECK#7 -if (!(Number.POSITIVE_INFINITY === -Number.NEGATIVE_INFINITY)) { - $ERROR('#7: +Infinity === -(-Infinity)'); -} - -//CHECK#8 -if (1 === 0.999999999999) { - $ERROR('#8: 1 !== 0.999999999999'); -} - -//CHECK#9 -if (!(1.0 === 1)) { - $ERROR('#9: 1.0 === 1'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.4_The_Strict_Equals_Operator/S11.9.4_A5.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.4_The_Strict_Equals_Operator/S11.9.4_A5.js deleted file mode 100644 index 77ea8f4ef..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.4_The_Strict_Equals_Operator/S11.9.4_A5.js +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.4_A5; - * @section: 11.9.4, 11.9.6; - * @assertion: Type(x) and Type(y) are String-s. - * Return true, if x and y are exactly the same sequence of characters; otherwise, return false; - * @description: x and y are primitive strings; - */ - -//CHECK#1 -if (!("" === "")) { - $ERROR('#1: "" === ""'); -} - -//CHECK#2 -if (!(" " === " ")) { - $ERROR('#2: " " === " "'); -} - -//CHECK#3 -if (!("string" === "string")) { - $ERROR('#3: "string" === "string"'); -} - -//CHECK#4 -if (" string" === "string ") { - $ERROR('#4: " string" !== "string "'); -} - -//CHECK#5 -if ("1.0" === "1") { - $ERROR('#5: "1.0" !== "1"'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.4_The_Strict_Equals_Operator/S11.9.4_A6.1.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.4_The_Strict_Equals_Operator/S11.9.4_A6.1.js deleted file mode 100644 index 46aed6b96..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.4_The_Strict_Equals_Operator/S11.9.4_A6.1.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.4_A6.1; - * @section: 11.9.4, 11.9.6; - * @assertion: If Type(x) and Type(y) are Undefined-s, return true; - * @description: void 0, eval("var x") is undefined; -*/ - -//CHECK#1 -if (!(undefined === undefined)) { - $ERROR('#1: undefined === undefined'); -} - -//CHECK#2 -if (!(void 0 === undefined)) { - $ERROR('#2: void 0 === undefined'); -} - -//CHECK#3 -if (!(undefined === eval("var x"))) { - $ERROR('#3: undefined === eval("var x")'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.4_The_Strict_Equals_Operator/S11.9.4_A6.2.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.4_The_Strict_Equals_Operator/S11.9.4_A6.2.js deleted file mode 100644 index c08658e89..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.4_The_Strict_Equals_Operator/S11.9.4_A6.2.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.4_A6.2; - * @section: 11.9.4, 11.9.6; - * @assertion: If Type(x) and Type(y) are Null-s, return true; - * @description: null === null; -*/ - -//CHECK#1 -if (!(null === null)) { - $ERROR('#1: null === null'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.4_The_Strict_Equals_Operator/S11.9.4_A7.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.4_The_Strict_Equals_Operator/S11.9.4_A7.js deleted file mode 100644 index 6414908d1..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.4_The_Strict_Equals_Operator/S11.9.4_A7.js +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.4_A7; - * @section: 11.9.4, 11.9.6; - * @assertion: Type(x) and Type(y) are Object-s. - * Return true, if x and y are references to the same Object; otherwise, return false; - * @description: Checking Boolean object, Number object, String object, Object object; - */ - -//CHECK#1 -if (new Object() === new Object()) { - $ERROR('#1: new Object() !== new Object()'); -} - -//CHECK#2 -if (new Object(true) === new Object(true)) { - $ERROR('#2: new Object() !== new Object()'); -} - -//CHECK#3 -if (new Object(false) === new Object(false)) { - $ERROR('#3: new Object() !== new Object()'); -} - -//CHECK#4 -if (new Object(+0) === new Object(-0)) { - $ERROR('#4: new Object(+0) !== new Object(-0)'); -} - -//CHECK#5 -x = {}; -y = x; -if (!(x === y)) { - $ERROR('#5: x = {}; y = x; x === y'); -} - -//CHECK#6 -if (new Boolean(true) === new Number(1)) { - $ERROR('#6 new Boolean(true) === new Number(1)'); -} - -//CHECK#7 -if (new Number(1) === new String("1")) { - $ERROR('#7: new Number(1) === new String("1")'); -} - -//CHECK#8 -if (new String("1") === new Boolean(true)) { - $ERROR('#8: new String("x") === new Boolean(true)'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.4_The_Strict_Equals_Operator/S11.9.4_A8_T1.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.4_The_Strict_Equals_Operator/S11.9.4_A8_T1.js deleted file mode 100644 index 480009b30..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.4_The_Strict_Equals_Operator/S11.9.4_A8_T1.js +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.4_A8_T1; - * @section: 11.9.4, 11.9.6; - * @assertion: If Type(x) is different from Type(y), return false; - * @description: x or y is primitive boolean; -*/ - -//CHECK#1 -if (true === new Boolean(true)) { - $ERROR('#1: true !== new Number(true)'); -} - -//CHECK#2 -if (true === 1) { - $ERROR('#2: true !== 1'); -} - -//CHECK#3 -if (true === new Number(true)) { - $ERROR('#3: true !== new Number(true)'); -} - -//CHECK#4 -if (true === "1") { - $ERROR('#4: true !== "1"'); -} - -//CHECK#5 -if (true === new String(true)) { - $ERROR('#5: true !== new String(true)'); -} - -//CHECK#6 -if (new Boolean(false) === false) { - $ERROR('#6: new Number(false) !== false'); -} - -//CHECK#7 -if (0 === false) { - $ERROR('#7: 0 !== false'); -} - -//CHECK#8 -if (new Number(false) === false) { - $ERROR('#8: new Number(false) !== false'); -} - -//CHECK#9 -if ("0" === false) { - $ERROR('#9: "0" !== false'); -} - -//CHECK#10 -if (false === new String(false)) { - $ERROR('#10: false !== new String(false)'); -} - -//CHECK#11 -if (true === {valueOf: function () {return true}}) { - $ERROR('#11: true === {valueOf: function () {return true}}'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.4_The_Strict_Equals_Operator/S11.9.4_A8_T2.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.4_The_Strict_Equals_Operator/S11.9.4_A8_T2.js deleted file mode 100644 index bce65a4dd..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.4_The_Strict_Equals_Operator/S11.9.4_A8_T2.js +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.4_A8_T2; - * @section: 11.9.4, 11.9.6; - * @assertion: If Type(x) is different from Type(y), return false; - * @description: x or y is primitive number; -*/ - -//CHECK#1 -if (1 === new Number(1)) { - $ERROR('#1: 1 !== new Number(1)'); -} - -//CHECK#2 -if (1 === true) { - $ERROR('#2: 1 !== true'); -} - -//CHECK#3 -if (1 === new Boolean(1)) { - $ERROR('#3: 1 !== new Boolean(1)'); -} - -//CHECK#4 -if (1 === "1") { - $ERROR('#4: 1 !== "1"'); -} - -//CHECK#5 -if (1 === new String(1)) { - $ERROR('#5: 1 !== new String(1)'); -} - -//CHECK#6 -if (new Number(0) === 0) { - $ERROR('#6: new Number(0) !== 0'); -} - -//CHECK#7 -if (false === 0) { - $ERROR('#7: false !== 0'); -} - -//CHECK#8 -if (new Boolean(0) === 0) { - $ERROR('#8: new Boolean(0) !== 0'); -} - -//CHECK#9 -if ("0" === 0) { - $ERROR('#9: "0" !== 0'); -} - -//CHECK#10 -if (new String(0) === 0) { - $ERROR('#10: new String(0) !== 0'); -} - -//CHECK#11 -if (1 === {valueOf: function () {return 1}}) { - $ERROR('#11: 1 === {valueOf: function () {return 1}}'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.4_The_Strict_Equals_Operator/S11.9.4_A8_T3.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.4_The_Strict_Equals_Operator/S11.9.4_A8_T3.js deleted file mode 100644 index f9447ec9a..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.4_The_Strict_Equals_Operator/S11.9.4_A8_T3.js +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.4_A8_T3; - * @section: 11.9.4, 11.9.6; - * @assertion: If Type(x) is different from Type(y), return false; - * @description: x or y is primitive string; -*/ - -//CHECK#1 -if ("1" === new String("1")) { - $ERROR('#1: "1" !== new String("1")'); -} - -//CHECK#2 -if ("1" === true) { - $ERROR('#2: "1" !== true'); -} - -//CHECK#3 -if ("1" === new Boolean("1")) { - $ERROR('#3: "1" !== new Boolean("1")'); -} - -//CHECK#4 -if ("1" === 1) { - $ERROR('#4: "1" === 1'); -} - -//CHECK#5 -if ("1" === new Number("1")) { - $ERROR('#5: "1" === new Number("1")'); -} - -//CHECK#6 -if (new String(false) === false) { - $ERROR('#6: new Number(false) !== false'); -} - -//CHECK#7 -if (false === "0") { - $ERROR('#7: false !== "0"'); -} - -//CHECK#8 -if ("0" === new Boolean("0")) { - $ERROR('#8: "0" !== new Boolean("0")'); -} - -//CHECK#9 -if (false === 0) { - $ERROR('#9: false !== 0'); -} - -//CHECK#10 -if (false === new Number(false)) { - $ERROR('#10: false !== new Number(false)'); -} - -//CHECK#11 -if ("1" === {valueOf: function () {return "1"}}) { - $ERROR('#11: "1" === {valueOf: function () {return "1"}}'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.4_The_Strict_Equals_Operator/S11.9.4_A8_T4.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.4_The_Strict_Equals_Operator/S11.9.4_A8_T4.js deleted file mode 100644 index 66800f24c..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.4_The_Strict_Equals_Operator/S11.9.4_A8_T4.js +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.4_A8_T4; - * @section: 11.9.4, 11.9.6; - * @assertion: If Type(x) is different from Type(y), return false; - * @description: x or y is null or undefined; -*/ - -//CHECK#1 -if (undefined === null) { - $ERROR('#1: undefined !== null'); -} - -//CHECK#2 -if (null === undefined) { - $ERROR('#2: null !== undefined'); -} - -//CHECK#3 -if (null === 0) { - $ERROR('#3: null !== 0'); -} - -//CHECK#4 -if (0 === null) { - $ERROR('#4: 0 !== null'); -} - -//CHECK#5 -if (null === false) { - $ERROR('#5: null !== false'); -} - -//CHECK#6 -if (false === null) { - $ERROR('#6: false !== null'); -} - -//CHECK#7 -if (undefined === false) { - $ERROR('#7: undefined !== false'); -} - -//CHECK#8 -if (false === undefined) { - $ERROR('#8: false !== undefined'); -} - -//CHECK#9 -if (null === new Object()) { - $ERROR('#9: null !== new Object()'); -} - -//CHECK#10 -if (new Object() === null) { - $ERROR('#10: new Object() !== null'); -} - -//CHECK#11 -if (null === "null") { - $ERROR('#11: null !== "null"'); -} - -//CHECK#12 -if ("null" === null) { - $ERROR('#12: "null" !== null'); -} - -//CHECK#13 -if (undefined === "undefined") { - $ERROR('#13: undefined !== "undefined"'); -} - -//CHECK#14 -if ("undefined" === undefined) { - $ERROR('#14: "undefined" !== undefined'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.4_The_Strict_Equals_Operator/S11.9.4_A8_T5.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.4_The_Strict_Equals_Operator/S11.9.4_A8_T5.js deleted file mode 100644 index ef3e8bbd1..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.4_The_Strict_Equals_Operator/S11.9.4_A8_T5.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.4_A8_T5; - * @section: 11.9.4, 11.9.6; - * @assertion: If Type(x) is different from Type(y), return false; - * @description: Checking with such x and y that either x or y is primitive string and the other is primitive number; -*/ - -//CHECK#1 -try { - throw 1; -} catch(e) { - if (e === "1") { - $ERROR('#1: throw 1 !== "1"'); - } -} - -//CHECK#2 -try { - throw "1"; -} catch(e) { - if (1 === e) { - $ERROR('#2: 1 !== throw "1"'); - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.5_The_Strict_Does_not_equals_Operator/S11.9.5_A1.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.5_The_Strict_Does_not_equals_Operator/S11.9.5_A1.js deleted file mode 100644 index b0997e8da..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.5_The_Strict_Does_not_equals_Operator/S11.9.5_A1.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S11.9.5_A1; -* @section: 11.9.5, 7.2, 7.3; -* @assertion: White Space and Line Terminator between EqualityExpression and "!==" or between "!==" and RelationalExpression are allowed; -* @description: Checking by using eval; -*/ - -//CHECK#1 -if (eval("1\u0009!==\u00091")) { - $ERROR('#1: 1\\u0009!==\\u00091'); -} - -//CHECK#2 -if (eval("1\u000B!==\u000B1")) { - $ERROR('#2: 1\\u000B!==\\u000B1'); -} - -//CHECK#3 -if (eval("1\u000C!==\u000C1")) { - $ERROR('#3: 1\\u000C!==\\u000C1'); -} - -//CHECK#4 -if (eval("1\u0020!==\u00201")) { - $ERROR('#4: 1\\u0020!==\\u00201'); -} - -//CHECK#5 -if (eval("1\u00A0!==\u00A01")) { - $ERROR('#5: 1\\u00A0!==\\u00A01'); -} - -//CHECK#6 -if (eval("1\u000A!==\u000A1")) { - $ERROR('#6: 1\\u000A!==\\u000A1'); -} - -//CHECK#7 -if (eval("1\u000D!==\u000D1")) { - $ERROR('#7: 1\\u000D!==\\u000D1'); -} - -//CHECK#8 -if (eval("1\u2028!==\u20281")) { - $ERROR('#8: 1\\u2028!==\\u20281'); -} - -//CHECK#9 -if (eval("1\u2029!==\u20291")) { - $ERROR('#9: 1\\u2029!==\\u20291'); -} - -//CHECK#10 -if (eval("1\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029!==\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u20291")) { - $ERROR('#10: 1\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029!==\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u20291'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.5_The_Strict_Does_not_equals_Operator/S11.9.5_A2.1_T1.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.5_The_Strict_Does_not_equals_Operator/S11.9.5_A2.1_T1.js deleted file mode 100644 index f815bfaf5..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.5_The_Strict_Does_not_equals_Operator/S11.9.5_A2.1_T1.js +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.5_A2.1_T1; - * @section: 11.9.5; - * @assertion: Operator x !== y uses GetValue; - * @description: Either Type is not Reference or GetBase is not null; -*/ - -//CHECK#1 -if (1 !== 1) { - $ERROR('#1: 1 === 1'); -} - -//CHECK#2 -var x = 1; -if (x !== 1) { - $ERROR('#2: var x = 1; x === 1'); -} - -//CHECK#3 -var y = 1; -if (1 !== y) { - $ERROR('#3: var y = 1; 1 === y'); -} - -//CHECK#4 -var x = 1; -var y = 1; -if (x !== y) { - $ERROR('#4: var x = 1; var y = 1; x === y'); -} - -//CHECK#5 -var objectx = new Object(); -var objecty = new Object(); -objectx.prop = 1; -objecty.prop = 1; -if (objectx.prop !== objecty.prop) { - $ERROR('#5: var objectx = new Object(); var objecty = new Object(); objectx.prop = 1; objecty.prop = 1; objectx.prop === objecty.prop'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.5_The_Strict_Does_not_equals_Operator/S11.9.5_A2.1_T2.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.5_The_Strict_Does_not_equals_Operator/S11.9.5_A2.1_T2.js deleted file mode 100644 index 050585621..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.5_The_Strict_Does_not_equals_Operator/S11.9.5_A2.1_T2.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.5_A2.1_T2; - * @section: 11.9.5; - * @assertion: Operator x !== y uses GetValue; - * @description: If GetBase(x) is null, throw ReferenceError; -*/ - -//CHECK#1 -try { - x !== 1; - $ERROR('#1.1: x !== 1 throw ReferenceError. Actual: ' + (x !== 1)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: x !== 1 throw ReferenceError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.5_The_Strict_Does_not_equals_Operator/S11.9.5_A2.1_T3.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.5_The_Strict_Does_not_equals_Operator/S11.9.5_A2.1_T3.js deleted file mode 100644 index 25f372a9f..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.5_The_Strict_Does_not_equals_Operator/S11.9.5_A2.1_T3.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.5_A2.1_T3; - * @section: 11.9.5; - * @assertion: Operator x !== y uses GetValue; - * @description: If GetBase(y) is null, throw ReferenceError; -*/ - -//CHECK#1 -try { - 1 !== y; - $ERROR('#1.1: 1 !== y throw ReferenceError. Actual: ' + (1 !== y)); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: 1 !== y throw ReferenceError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.5_The_Strict_Does_not_equals_Operator/S11.9.5_A2.4_T1.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.5_The_Strict_Does_not_equals_Operator/S11.9.5_A2.4_T1.js deleted file mode 100644 index 6e54ab64b..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.5_The_Strict_Does_not_equals_Operator/S11.9.5_A2.4_T1.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.5_A2.4_T1; - * @section: 11.9.5; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with "="; -*/ - -//CHECK#1 -var x = 0; -if ((x = 1) !== x) { - $ERROR('#1: var x = 0; (x = 1) === x'); -} - -//CHECK#2 -var x = 0; -if (!(x !== (x = 1))) { - $ERROR('#2: var x = 0; x !== (x = 1)'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.5_The_Strict_Does_not_equals_Operator/S11.9.5_A2.4_T2.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.5_The_Strict_Does_not_equals_Operator/S11.9.5_A2.4_T2.js deleted file mode 100644 index cd6055d65..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.5_The_Strict_Does_not_equals_Operator/S11.9.5_A2.4_T2.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.5_A2.4_T2; - * @section: 11.9.5; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking with "throw"; -*/ - -//CHECK#1 -var x = function () { throw "x"; }; -var y = function () { throw "y"; }; -try { - x() !== y(); - $ERROR('#1.1: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() !== y() throw "x". Actual: ' + (x() !== y())); -} catch (e) { - if (!(e !== "y")) { - $ERROR('#1.2: First expression is evaluated first, and then second expression'); - } else { - if (e !== "x") { - $ERROR('#1.3: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() !== y() throw "x". Actual: ' + (e)); - } - } -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.5_The_Strict_Does_not_equals_Operator/S11.9.5_A2.4_T3.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.5_The_Strict_Does_not_equals_Operator/S11.9.5_A2.4_T3.js deleted file mode 100644 index 18492f179..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.5_The_Strict_Does_not_equals_Operator/S11.9.5_A2.4_T3.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.5_A2.4_T3; - * @section: 11.9.5; - * @assertion: First expression is evaluated first, and then second expression; - * @description: Checking undeclarated variables; -*/ - -//CHECK#1 -try { - x !== (x = 1); - $ERROR('#1.1: x !== (x = 1) throw ReferenceError. Actual: ' + (x !== (x = 1))); -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1.2: x !== (x = 1) throw ReferenceError. Actual: ' + (e)); - } -} - -//CHECK#2 -if ((y = 1) !== y) { - $ERROR('#2: (y = 1) === y'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.5_The_Strict_Does_not_equals_Operator/S11.9.5_A3.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.5_The_Strict_Does_not_equals_Operator/S11.9.5_A3.js deleted file mode 100644 index fca518099..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.5_The_Strict_Does_not_equals_Operator/S11.9.5_A3.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.5_A3; - * @section: 11.9.5, 11.9.6; - * @assertion: Type(x) and Type(y) are Boolean-s. - * Return false, if x and y are both true or both false; otherwise, return true; - * @description: x and y are primitive booleans; - */ - -//CHECK#1 -if (true !== true) { - $ERROR('#1: true === true'); -} - -//CHECK#2 -if (false !== false) { - $ERROR('#2: false === false'); -} - -//CHECK#3 -if (!(true !== false)) { - $ERROR('#3: true !== false'); -} - -//CHECK#4 -if (!(false !== true)) { - $ERROR('#4: false !== true'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.5_The_Strict_Does_not_equals_Operator/S11.9.5_A4.1_T1.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.5_The_Strict_Does_not_equals_Operator/S11.9.5_A4.1_T1.js deleted file mode 100644 index c6d2f70d9..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.5_The_Strict_Does_not_equals_Operator/S11.9.5_A4.1_T1.js +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.5_A4.1_T1; - * @section: 11.9.5, 11.9.6; - * @assertion: If x or y is NaN, return true; - * @description: x is NaN; -*/ - -//CHECK#1 -if (!(Number.NaN !== true)) { - $ERROR('#1: NaN !== true'); -} - -//CHECK#2 -if (!(Number.NaN !== 1)) { - $ERROR('#2: NaN !== 1'); -} - -//CHECK#3 -if (!(Number.NaN !== Number.NaN)) { - $ERROR('#3: NaN !== NaN'); -} - -//CHECK#4 -if (!(Number.NaN !== Number.POSITIVE_INFINITY)) { - $ERROR('#4: NaN !== +Infinity'); -} - -//CHECK#5 -if (!(Number.NaN !== Number.NEGATIVE_INFINITY)) { - $ERROR('#5: NaN !== -Infinity'); -} - -//CHECK#6 -if (!(Number.NaN !== Number.MAX_VALUE)) { - $ERROR('#6: NaN !== Number.MAX_VALUE'); -} - -//CHECK#7 -if (!(Number.NaN !== Number.MIN_VALUE)) { - $ERROR('#7: NaN !== Number.MIN_VALUE'); -} - -//CHECK#8 -if (!(Number.NaN !== "string")) { - $ERROR('#8: NaN !== "string"'); -} - -//CHECK#9 -if (!(Number.NaN !== new Object())) { - $ERROR('#9: NaN !== new Object()'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.5_The_Strict_Does_not_equals_Operator/S11.9.5_A4.1_T2.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.5_The_Strict_Does_not_equals_Operator/S11.9.5_A4.1_T2.js deleted file mode 100644 index 1917a9a32..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.5_The_Strict_Does_not_equals_Operator/S11.9.5_A4.1_T2.js +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.5_A4.1_T2; - * @section: 11.9.5, 11.9.6; - * @assertion: If x or y is NaN, return true; - * @description: y is NaN; -*/ - -//CHECK#1 -if (!(true !== Number.NaN)) { - $ERROR('#1: true !== NaN'); -} - -//CHECK#2 -if (!(-1 !== Number.NaN)) { - $ERROR('#2: -1 !== NaN'); -} - -//CHECK#3 -if (!(Number.NaN !== Number.NaN)) { - $ERROR('#3: NaN !== NaN'); -} - -//CHECK#4 -if (!(Number.POSITIVE_INFINITY !== Number.NaN)) { - $ERROR('#4: +Infinity !== NaN'); -} - -//CHECK#5 -if (!(Number.NEGATIVE_INFINITY !== Number.NaN)) { - $ERROR('#5: -Infinity !== NaN'); -} - -//CHECK#6 -if (!(Number.MAX_VALUE !== Number.NaN)) { - $ERROR('#6: Number.MAX_VALUE !== NaN'); -} - -//CHECK#7 -if (!(Number.MIN_VALUE !== Number.NaN)) { - $ERROR('#7: Number.MIN_VALUE !== NaN'); -} - -//CHECK#8 -if (!("string" !== Number.NaN)) { - $ERROR('#8: "string" !== NaN'); -} - -//CHECK#9 -if (!(new Object() !== Number.NaN)) { - $ERROR('#9: new Object() !== NaN'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.5_The_Strict_Does_not_equals_Operator/S11.9.5_A4.2.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.5_The_Strict_Does_not_equals_Operator/S11.9.5_A4.2.js deleted file mode 100644 index ff0b4ef47..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.5_The_Strict_Does_not_equals_Operator/S11.9.5_A4.2.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.5_A4.2; - * @section: 11.9.5, 11.9.6; - * @assertion: If x is +0(-0) and y is -0(+0), return false; - * @description: Checking all combinations; -*/ - -//CHECK#1 -if (+0 !== -0) { - $ERROR('#1: +0 === -0'); -} - -//CHECK#2 -if (-0 !== +0) { - $ERROR('#2: -0 === +0'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.5_The_Strict_Does_not_equals_Operator/S11.9.5_A4.3.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.5_The_Strict_Does_not_equals_Operator/S11.9.5_A4.3.js deleted file mode 100644 index 8d98f1d1b..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.5_The_Strict_Does_not_equals_Operator/S11.9.5_A4.3.js +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.5_A4.3; - * @section: 11.9.5, 11.9.6; - * @assertion: Type(x) and Type(y) are Number-s minus NaN, +0, -0. - * Return false, if x is the same number value as y; otherwise, return true; - * @description: x and y are primitive numbers; -*/ - -//CHECK#1 -if (Number.POSITIVE_INFINITY !== Number.POSITIVE_INFINITY) { - $ERROR('#1: +Infinity === +Infinity'); -} - -//CHECK#2 -if (Number.NEGATIVE_INFINITY !== Number.NEGATIVE_INFINITY) { - $ERROR('#2: -Infinity === -Infinity'); -} - -//CHECK#3 -if (13 !== 13) { - $ERROR('#3: 13 === 13'); -} - -//CHECK#4 -if (-13 !== -13) { - $ERROR('#4: -13 === -13'); -} - -//CHECK#5 -if (1.3 !== 1.3) { - $ERROR('#5: 1.3 === 1.3'); -} - -//CHECK#6 -if (-1.3 !== -1.3) { - $ERROR('#6: -1.3 === -1.3'); -} - -//CHECK#7 -if (Number.POSITIVE_INFINITY !== -Number.NEGATIVE_INFINITY) { - $ERROR('#7: +Infinity === -(-Infinity)'); -} - -//CHECK#8 -if (!(1 !== 0.999999999999)) { - $ERROR('#8: 1 !== 0.999999999999'); -} - -//CHECK#9 -if (1.0 !== 1) { - $ERROR('#9: 1.0 === 1'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.5_The_Strict_Does_not_equals_Operator/S11.9.5_A5.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.5_The_Strict_Does_not_equals_Operator/S11.9.5_A5.js deleted file mode 100644 index d042e90d1..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.5_The_Strict_Does_not_equals_Operator/S11.9.5_A5.js +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.5_A5; - * @section: 11.9.5, 11.9.6; - * @assertion: Type(x) and Type(y) are String-s. - * Return false, if x and y are exactly the same sequence of characters; otherwise, return true; - * @description: x and y are primitive strings; - */ - -//CHECK#1 -if ("" !== "") { - $ERROR('#1: "" === ""'); -} - -//CHECK#2 -if (" " !== " ") { - $ERROR('#2: " " === " "'); -} - -//CHECK#3 -if ("string" !== "string") { - $ERROR('#3: "string" === "string"'); -} - -//CHECK#4 -if (!(" string" !== "string ")) { - $ERROR('#4: " string" !== "string "'); -} - -//CHECK#5 -if (!("1.0" !== "1")) { - $ERROR('#5: "1.0" !== "1"'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.5_The_Strict_Does_not_equals_Operator/S11.9.5_A6.1.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.5_The_Strict_Does_not_equals_Operator/S11.9.5_A6.1.js deleted file mode 100644 index 8785131cf..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.5_The_Strict_Does_not_equals_Operator/S11.9.5_A6.1.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.5_A6.1; - * @section: 11.9.5, 11.9.6; - * @assertion: If Type(x) and Type(y) are Undefined-s, return false; - * @description: void 0, eval("var x") is undefined; -*/ - -//CHECK#1 -if (undefined !== undefined) { - $ERROR('#1: undefined === undefined'); -} - -//CHECK#2 -if (void 0 !== undefined) { - $ERROR('#2: void 0 === undefined'); -} - -//CHECK#3 -if (undefined !== eval("var x")) { - $ERROR('#3: undefined === eval("var x")'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.5_The_Strict_Does_not_equals_Operator/S11.9.5_A6.2.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.5_The_Strict_Does_not_equals_Operator/S11.9.5_A6.2.js deleted file mode 100644 index 407d49339..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.5_The_Strict_Does_not_equals_Operator/S11.9.5_A6.2.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.5_A6.2; - * @section: 11.9.5, 11.9.6; - * @assertion: If Type(x) and Type(y) are Null-s, return false; - * @description: null === null; -*/ - -//CHECK#1 -if (null !== null) { - $ERROR('#1: null === null'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.5_The_Strict_Does_not_equals_Operator/S11.9.5_A7.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.5_The_Strict_Does_not_equals_Operator/S11.9.5_A7.js deleted file mode 100644 index f31dfd011..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.5_The_Strict_Does_not_equals_Operator/S11.9.5_A7.js +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.5_A7; - * @section: 11.9.5, 11.9.6; - * @assertion: Type(x) and Type(y) are Object-s. - * Return false, if x and y are references to the same Object; otherwise, return true; - * @description: Checking Boolean object, Number object, String object, Object object; - */ - -//CHECK#1 -if (!(new Object() !== new Object())) { - $ERROR('#1: new Object() !== new Object()'); -} - -//CHECK#2 -if (!(new Object(true) !== new Object(true))) { - $ERROR('#2: new Object() !== new Object()'); -} - -//CHECK#3 -if (!(new Object(false) !== new Object(false))) { - $ERROR('#3: new Object() !== new Object()'); -} - -//CHECK#4 -if (!(new Object(+0) !== new Object(-0))) { - $ERROR('#4: new Object(+0) !== new Object(-0)'); -} - -//CHECK#5 -x = {}; -y = x; -if (x !== y) { - $ERROR('#5: x = {}; y = x; x === y'); -} - -//CHECK#6 -if (!(new Boolean(true) !== new Number(1))) { - $ERROR('#6 new Boolean(true) !== new Number(1)'); -} - -//CHECK#7 -if (!(new Number(1) !== new String("1"))) { - $ERROR('#7: new Number(1) !== new String("1")'); -} - -//CHECK#8 -if (!(new String("1") !== new Boolean(true))) { - $ERROR('#8: new String("x") !== new Boolean(true)'); -} - - diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.5_The_Strict_Does_not_equals_Operator/S11.9.5_A8_T1.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.5_The_Strict_Does_not_equals_Operator/S11.9.5_A8_T1.js deleted file mode 100644 index 0374f3aad..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.5_The_Strict_Does_not_equals_Operator/S11.9.5_A8_T1.js +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.5_A8_T1; - * @section: 11.9.5, 11.9.6; - * @assertion: If Type(x) is different from Type(y), return true; - * @description: x or y is primitive boolean; -*/ - -//CHECK#1 -if (!(true !== new Boolean(true))) { - $ERROR('#1: true !== new Number(true)'); -} - -//CHECK#2 -if (!(true !== 1)) { - $ERROR('#2: true !== 1'); -} - -//CHECK#3 -if (!(true !== new Number(true))) { - $ERROR('#3: true !== new Number(true)'); -} - -//CHECK#4 -if (!(true !== "1")) { - $ERROR('#4: true !== "1"'); -} - -//CHECK#5 -if (!(true !== new String(true))) { - $ERROR('#5: true !== new String(true)'); -} - -//CHECK#6 -if (!(new Boolean(false) !== false)) { - $ERROR('#6: new Number(false) !== false'); -} - -//CHECK#7 -if (!(0 !== false)) { - $ERROR('#7: 0 !== false'); -} - -//CHECK#8 -if (!(new Number(false) !== false)) { - $ERROR('#8: new Number(false) !== false'); -} - -//CHECK#9 -if (!("0" !== false)) { - $ERROR('#9: "0" !== false'); -} - -//CHECK#10 -if (!(false !== new String(false))) { - $ERROR('#10: false !== new String(false)'); -} - -//CHECK#11 -if (!(true !== {valueOf: function () {return true}})) { - $ERROR('#11: true !== {valueOf: function () {return true}}'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.5_The_Strict_Does_not_equals_Operator/S11.9.5_A8_T2.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.5_The_Strict_Does_not_equals_Operator/S11.9.5_A8_T2.js deleted file mode 100644 index 4f8d6419f..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.5_The_Strict_Does_not_equals_Operator/S11.9.5_A8_T2.js +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.5_A8_T2; - * @section: 11.9.5, 11.9.6; - * @assertion: If Type(x) is different from Type(y), return true; - * @description: x or y is primitive number; -*/ - -//CHECK#1 -if (!(1 !== new Number(1))) { - $ERROR('#1: 1 !== new Number(1)'); -} - -//CHECK#2 -if (!(1 !== true)) { - $ERROR('#2: 1 !== true'); -} - -//CHECK#3 -if (!(1 !== new Boolean(1))) { - $ERROR('#3: 1 !== new Boolean(1)'); -} - -//CHECK#4 -if (!(1 !== "1")) { - $ERROR('#4: 1 !== "1"'); -} - -//CHECK#5 -if (!(1 !== new String(1))) { - $ERROR('#5: 1 !== new String(1)'); -} - -//CHECK#6 -if (!(new Number(0) !== 0)) { - $ERROR('#6: new Number(0) !== 0'); -} - -//CHECK#7 -if (!(false !== 0)) { - $ERROR('#7: false !== 0'); -} - -//CHECK#8 -if (!(new Boolean(0) !== 0)) { - $ERROR('#8: new Boolean(0) !== 0'); -} - -//CHECK#9 -if (!("0" !== 0)) { - $ERROR('#9: "0" !== 0'); -} - -//CHECK#10 -if (!(new String(0) !== 0)) { - $ERROR('#10: new String(0) !== 0'); -} - -//CHECK#11 -if (!(1 !== {valueOf: function () {return 1}})) { - $ERROR('#11: 1 !== {valueOf: function () {return 1}}'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.5_The_Strict_Does_not_equals_Operator/S11.9.5_A8_T3.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.5_The_Strict_Does_not_equals_Operator/S11.9.5_A8_T3.js deleted file mode 100644 index 6f7ba6bf9..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.5_The_Strict_Does_not_equals_Operator/S11.9.5_A8_T3.js +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.5_A8_T3; - * @section: 11.9.5, 11.9.6; - * @assertion: If Type(x) is different from Type(y), return true; - * @description: x or y is primitive string; -*/ - -//CHECK#1 -if (!("1" !== new String("1"))) { - $ERROR('#1: "1" !== new String("1")'); -} - -//CHECK#2 -if (!("1" !== true)) { - $ERROR('#2: "1" !== true'); -} - -//CHECK#3 -if (!("1" !== new Boolean("1"))) { - $ERROR('#3: "1" !== new Boolean("1")'); -} - -//CHECK#4 -if (!("1" !== 1)) { - $ERROR('#4: "1" === 1'); -} - -//CHECK#5 -if (!("1" !== new Number("1"))) { - $ERROR('#5: "1" === new Number("1")'); -} - -//CHECK#6 -if (!(new String(false) !== false)) { - $ERROR('#6: new Number(false) !== false'); -} - -//CHECK#7 -if (!(false !== "0")) { - $ERROR('#7: false !== "0"'); -} - -//CHECK#8 -if (!("0" !== new Boolean("0"))) { - $ERROR('#8: "0" !== new Boolean("0")'); -} - -//CHECK#9 -if (!(false !== 0)) { - $ERROR('#9: false !== 0'); -} - -//CHECK#10 -if (!(false !== new Number(false))) { - $ERROR('#10: false !== new Number(false)'); -} - -//CHECK#11 -if (!("1" !== {valueOf: function () {return "1"}})) { - $ERROR('#11: "1" !== {valueOf: function () {return "1"}}'); -} - diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.5_The_Strict_Does_not_equals_Operator/S11.9.5_A8_T4.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.5_The_Strict_Does_not_equals_Operator/S11.9.5_A8_T4.js deleted file mode 100644 index 74c58f83e..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.5_The_Strict_Does_not_equals_Operator/S11.9.5_A8_T4.js +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.5_A8_T4; - * @section: 11.9.5, 11.9.6; - * @assertion: If Type(x) is different from Type(y), return true; - * @description: x or y is null or undefined; -*/ - -//CHECK#1 -if (!(undefined !== null)) { - $ERROR('#1: undefined !== null'); -} - -//CHECK#2 -if (!(null !== undefined)) { - $ERROR('#2: null !== undefined'); -} - -//CHECK#3 -if (!(null !== 0)) { - $ERROR('#3: null !== 0'); -} - -//CHECK#4 -if (!(0 !== null)) { - $ERROR('#4: 0 !== null'); -} - -//CHECK#5 -if (!(null !== false)) { - $ERROR('#5: null !== false'); -} - -//CHECK#6 -if (!(false !== null)) { - $ERROR('#6: false !== null'); -} - -//CHECK#7 -if (!(undefined !== false)) { - $ERROR('#7: undefined !== false'); -} - -//CHECK#8 -if (!(false !== undefined)) { - $ERROR('#8: false !== undefined'); -} - -//CHECK#9 -if (!(null !== new Object())) { - $ERROR('#9: null !== new Object()'); -} - -//CHECK#10 -if (!(new Object() !== null)) { - $ERROR('#10: new Object() !== null'); -} - -//CHECK#11 -if (!(null !== "null")) { - $ERROR('#11: null !== "null"'); -} - -//CHECK#12 -if (!("null" !== null)) { - $ERROR('#12: "null" !== null'); -} - -//CHECK#13 -if (!(undefined !== "undefined")) { - $ERROR('#13: undefined !== "undefined"'); -} - -//CHECK#14 -if (!("undefined" !== undefined)) { - $ERROR('#14: "undefined" !== undefined'); -} diff --git a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.5_The_Strict_Does_not_equals_Operator/S11.9.5_A8_T5.js b/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.5_The_Strict_Does_not_equals_Operator/S11.9.5_A8_T5.js deleted file mode 100644 index b8be977d9..000000000 --- a/tests/ES3/Conformance/11_Expressions/11.9_Equality_Operators/11.9.5_The_Strict_Does_not_equals_Operator/S11.9.5_A8_T5.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.9.5_A8_T5; - * @section: 11.9.5, 11.9.6; - * @assertion: If Type(x) is different from Type(y), return true; - * @description: Checking such x and y that either x or y is primitive string and the other is primitive number; -*/ - -//CHECK#1 -try { - throw 1; -} catch(e) { - if (!(e !== "1")) { - $ERROR('#1: throw 1 !== "1"'); - } -} - -//CHECK#2 -try { - throw "1"; -} catch(e) { - if (!(1 !== e)) { - $ERROR('#2: 1 !== throw "1"'); - } -} diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.10_T1.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.10_T1.js deleted file mode 100644 index 379d01565..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.10_T1.js +++ /dev/null @@ -1,136 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A1.10_T1; - * @section: 12.10; - * @assertion: The with statement adds a computed object to the front of the - * scope chain of the current execution context; - * @description: Using interation statement within "with" statement leading to normal completion; - */ -this.p1 = 1; -this.p2 = 2; -this.p3 = 3; -var result = "result"; -var myObj = {p1: 'a', - p2: 'b', - p3: 'c', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';}, - parseInt : function(){return 'obj_parseInt';}, - NaN : 'obj_NaN', - Infinity : 'obj_Infinity', - eval : function(){return 'obj_eval';}, - parseFloat : function(){return 'obj_parseFloat';}, - isNaN : function(){return 'obj_isNaN';}, - isFinite : function(){return 'obj_isFinite';} -} -var del; -var st_p1 = "p1"; -var st_p2 = "p2"; -var st_p3 = "p3"; -var st_parseInt = "parseInt"; -var st_NaN = "NaN"; -var st_Infinity = "Infinity"; -var st_eval = "eval"; -var st_parseFloat = "parseFloat"; -var st_isNaN = "isNaN"; -var st_isFinite = "isFinite"; - -with(myObj){ - do{ - st_p1 = p1; - st_p2 = p2; - st_p3 = p3; - st_parseInt = parseInt; - st_NaN = NaN; - st_Infinity = Infinity; - st_eval = eval; - st_parseFloat = parseFloat; - st_isNaN = isNaN; - st_isFinite = isFinite; - p1 = 'x1'; - this.p2 = 'x2'; - del = delete p3; - var p4 = 'x4'; - p5 = 'x5'; - var value = 'value'; - } - while(false); -} - -if(!(p1 === 1)){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} - -if(!(p2 === "x2")){ - $ERROR('#2: p2 === "x2". Actual: p2 ==='+ p2 ); -} - -if(!(p3 === 3)){ - $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 ); -} - -if(!(p4 === "x4")){ - $ERROR('#4: p4 === "x4". Actual: p4 ==='+ p4 ); -} - -if(!(p5 === "x5")){ - $ERROR('#5: p5 === "x5". Actual: p5 ==='+ p5 ); -} - -if(!(myObj.p1 === "x1")){ - $ERROR('#6: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 ); -} - -if(!(myObj.p2 === "b")){ - $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 ); -} - -if(!(myObj.p3 === undefined)){ - $ERROR('#8: myObj.p3 === undefined. Actual: myObj.p3 ==='+ myObj.p3 ); -} - -if(!(myObj.p4 === undefined)){ - $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 ); -} - -if(!(myObj.p5 === undefined)){ - $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 ); -} - -if(!(st_parseInt !== parseInt)){ - $ERROR('#11: myObj.parseInt !== parseInt'); -} - -if(!(st_NaN === "obj_NaN")){ - $ERROR('#12: myObj.NaN !== NaN'); -} - -if(!(st_Infinity !== Infinity)){ - $ERROR('#13: myObj.Infinity !== Infinity'); -} - -if(!(st_eval !== eval)){ - $ERROR('#14: myObj.eval !== eval'); -} - -if(!(st_parseFloat !== parseFloat)){ - $ERROR('#15: myObj.parseFloat !== parseFloat'); -} - -if(!(st_isNaN !== isNaN)){ - $ERROR('#16: myObj.isNaN !== isNaN'); -} - -if(!(st_isFinite !== isFinite)){ - $ERROR('#17: myObj.isFinite !== isFinite'); -} - -if(!(value === undefined)){ - $ERROR('#18: value === undefined. Actual: value ==='+ value ); -} - -if(!(myObj.value === "value")){ - $ERROR('#19: myObj.value === "value". Actual: myObj.value ==='+ myObj.value ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.10_T2.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.10_T2.js deleted file mode 100644 index 167e228a5..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.10_T2.js +++ /dev/null @@ -1,145 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A1.10_T2; - * @section: 12.10; - * @assertion: The with statement adds a computed object to the front of the - * scope chain of the current execution context; - * @description: Using iteration statement within "with" statement leading to completion by exception - */ -this.p1 = 1; -this.p2 = 2; -this.p3 = 3; -var result = "result"; -var myObj = {p1: 'a', - p2: 'b', - p3: 'c', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';}, - parseInt : function(){return 'obj_parseInt';}, - NaN : 'obj_NaN', - Infinity : 'obj_Infinity', - eval : function(){return 'obj_eval';}, - parseFloat : function(){return 'obj_parseFloat';}, - isNaN : function(){return 'obj_isNaN';}, - isFinite : function(){return 'obj_isFinite';} -} -var del; -var st_p1 = "p1"; -var st_p2 = "p2"; -var st_p3 = "p3"; -var st_parseInt = "parseInt"; -var st_NaN = "NaN"; -var st_Infinity = "Infinity"; -var st_eval = "eval"; -var st_parseFloat = "parseFloat"; -var st_isNaN = "isNaN"; -var st_isFinite = "isFinite"; - -try { - with(myObj){ - do{ - st_p1 = p1; - st_p2 = p2; - st_p3 = p3; - st_parseInt = parseInt; - st_NaN = NaN; - st_Infinity = Infinity; - st_eval = eval; - st_parseFloat = parseFloat; - st_isNaN = isNaN; - st_isFinite = isFinite; - p1 = 'x1'; - this.p2 = 'x2'; - del = delete p3; - var p4 = 'x4'; - p5 = 'x5'; - var value = 'value'; - throw value; - } - while(false); - } -} catch(e){ - result = e; -} - -if(!(result === "value")){ - $ERROR('#0: result === "value". Actual: result ==='+ result ); -} - -if(!(p1 === 1)){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} - -if(!(p2 === "x2")){ - $ERROR('#2: p2 === "x2". Actual: p2 ==='+ p2 ); -} - -if(!(p3 === 3)){ - $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 ); -} - -if(!(p4 === "x4")){ - $ERROR('#4: p4 === "x4". Actual: p4 ==='+ p4 ); -} - -if(!(p5 === "x5")){ - $ERROR('#5: p5 === "x5". Actual: p5 ==='+ p5 ); -} - -if(!(myObj.p1 === "x1")){ - $ERROR('#6: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 ); -} - -if(!(myObj.p2 === "b")){ - $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 ); -} - -if(!(myObj.p3 === undefined)){ - $ERROR('#8: myObj.p3 === undefined. Actual: myObj.p3 ==='+ myObj.p3 ); -} - -if(!(myObj.p4 === undefined)){ - $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 ); -} - -if(!(myObj.p5 === undefined)){ - $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 ); -} - -if(!(st_parseInt !== parseInt)){ - $ERROR('#11: myObj.parseInt !== parseInt'); -} - -if(!(st_NaN === "obj_NaN")){ - $ERROR('#12: myObj.NaN !== NaN'); -} - -if(!(st_Infinity !== Infinity)){ - $ERROR('#13: myObj.Infinity !== Infinity'); -} - -if(!(st_eval !== eval)){ - $ERROR('#14: myObj.eval !== eval'); -} - -if(!(st_parseFloat !== parseFloat)){ - $ERROR('#15: myObj.parseFloat !== parseFloat'); -} - -if(!(st_isNaN !== isNaN)){ - $ERROR('#16: myObj.isNaN !== isNaN'); -} - -if(!(st_isFinite !== isFinite)){ - $ERROR('#17: myObj.isFinite !== isFinite'); -} - -if(!(value === undefined)){ - $ERROR('#18: value === undefined. Actual: value ==='+ value ); -} - -if(!(myObj.value === "value")){ - $ERROR('#19: myObj.value === "value". Actual: myObj.value ==='+ myObj.value ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.10_T3.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.10_T3.js deleted file mode 100644 index 038effe63..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.10_T3.js +++ /dev/null @@ -1,148 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A1.10_T3; - * @section: 12.10; - * @assertion: The with statement adds a computed object to the front of the - * scope chain of the current execution context; - * @description: Using iteration statment withing "with" statement leading to completion by exception - * iteration statement inside with statement - exception completion; - */ -this.p1 = 1; -this.p2 = 2; -this.p3 = 3; -var result = "result"; -var myObj = {p1: 'a', - p2: 'b', - p3: 'c', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';}, - parseInt : function(){return 'obj_parseInt';}, - NaN : 'obj_NaN', - Infinity : 'obj_Infinity', - eval : function(){return 'obj_eval';}, - parseFloat : function(){return 'obj_parseFloat';}, - isNaN : function(){return 'obj_isNaN';}, - isFinite : function(){return 'obj_isFinite';} -} -var del; -var st_p1 = "p1"; -var st_p2 = "p2"; -var st_p3 = "p3"; -var st_parseInt = "parseInt"; -var st_NaN = "NaN"; -var st_Infinity = "Infinity"; -var st_eval = "eval"; -var st_parseFloat = "parseFloat"; -var st_isNaN = "isNaN"; -var st_isFinite = "isFinite"; - -try { - with(myObj){ - do{ - throw value; - st_p1 = p1; - st_p2 = p2; - st_p3 = p3; - st_parseInt = parseInt; - st_NaN = NaN; - st_Infinity = Infinity; - st_eval = eval; - st_parseFloat = parseFloat; - st_isNaN = isNaN; - st_isFinite = isFinite; - p1 = 'x1'; - this.p2 = 'x2'; - del = delete p3; - var p4 = 'x4'; - p5 = 'x5'; - var value = 'value'; - } - while(false); - } -} catch(e){ - result = e; -} - -if(!(result === "myObj_value")){ - $ERROR('#0: result === "myObj_value". Actual: result ==='+ result ); -} - -if(!(p1 === 1)){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} - -if(!(p2 === 2)){ - $ERROR('#2: p2 === 2. Actual: p2 ==='+ p2 ); -} - -if(!(p3 === 3)){ - $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 ); -} - -if(!(p4 === undefined)){ - $ERROR('#4: p4 === undefined. Actual: p4 ==='+ p4 ); -} - -try { - p5; - $ERROR('#5: p5 is not defined'); -} catch(e) { -} - -if(!(myObj.p1 === "a")){ - $ERROR('#6: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 ); -} - -if(!(myObj.p2 === "b")){ - $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 ); -} - -if(!(myObj.p3 === "c")){ - $ERROR('#8: myObj.p3 === "c". Actual: myObj.p3 ==='+ myObj.p3 ); -} - -if(!(myObj.p4 === undefined)){ - $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 ); -} - -if(!(myObj.p5 === undefined)){ - $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 ); -} - -if(!(st_parseInt === "parseInt")){ - $ERROR('#11: myObj.parseInt === "parseInt". Actual: myObj.parseInt ==='+ myObj.parseInt ); -} - -if(!(st_NaN === "NaN")){ - $ERROR('#12: st_NaN === "NaN". Actual: st_NaN ==='+ st_NaN ); -} - -if(!(st_Infinity === "Infinity")){ - $ERROR('#13: st_Infinity === "Infinity". Actual: st_Infinity ==='+ st_Infinity ); -} - -if(!(st_eval === "eval")){ - $ERROR('#14: st_eval === "eval". Actual: st_eval ==='+ st_eval ); -} - -if(!(st_parseFloat === "parseFloat")){ - $ERROR('#15: st_parseFloat === "parseFloat". Actual: st_parseFloat ==='+ st_parseFloat ); -} - -if(!(st_isNaN === "isNaN")){ - $ERROR('#16: st_isNaN === "isNaN". Actual: st_isNaN ==='+ st_isNaN ); -} - -if(!(st_isFinite === "isFinite")){ - $ERROR('#17: st_isFinite === "isFinite". Actual: st_isFinite ==='+ st_isFinite ); -} - -if(!(value === undefined)){ - $ERROR('#18: value === undefined. Actual: value ==='+ value ); -} - -if(!(myObj.value === "myObj_value")){ - $ERROR('#19: myObj.value === "myObj_value". Actual: myObj.value ==='+ myObj.value ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.10_T4.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.10_T4.js deleted file mode 100644 index 8283a4a94..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.10_T4.js +++ /dev/null @@ -1,138 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A1.10_T4; - * @section: 12.10; - * @assertion: The with statement adds a computed object to the front of the - * scope chain of the current execution context; - * @description: Using iteration statement witthin "with" staement leading to completion by break - * iteration statement inside with statement - break completion; - */ -this.p1 = 1; -this.p2 = 2; -this.p3 = 3; -var result = "result"; -var myObj = {p1: 'a', - p2: 'b', - p3: 'c', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';}, - parseInt : function(){return 'obj_parseInt';}, - NaN : 'obj_NaN', - Infinity : 'obj_Infinity', - eval : function(){return 'obj_eval';}, - parseFloat : function(){return 'obj_parseFloat';}, - isNaN : function(){return 'obj_isNaN';}, - isFinite : function(){return 'obj_isFinite';} -} -var del; -var st_p1 = "p1"; -var st_p2 = "p2"; -var st_p3 = "p3"; -var st_parseInt = "parseInt"; -var st_NaN = "NaN"; -var st_Infinity = "Infinity"; -var st_eval = "eval"; -var st_parseFloat = "parseFloat"; -var st_isNaN = "isNaN"; -var st_isFinite = "isFinite"; - -with(myObj){ - do{ - st_p1 = p1; - st_p2 = p2; - st_p3 = p3; - st_parseInt = parseInt; - st_NaN = NaN; - st_Infinity = Infinity; - st_eval = eval; - st_parseFloat = parseFloat; - st_isNaN = isNaN; - st_isFinite = isFinite; - p1 = 'x1'; - this.p2 = 'x2'; - del = delete p3; - var p4 = 'x4'; - p5 = 'x5'; - var value = 'value'; - break; - } - while(false); -} - -if(!(p1 === 1)){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} - -if(!(p2 === "x2")){ - $ERROR('#2: p2 === "x2". Actual: p2 ==='+ p2 ); -} - -if(!(p3 === 3)){ - $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 ); -} - -if(!(p4 === "x4")){ - $ERROR('#4: p4 === "x4". Actual: p4 ==='+ p4 ); -} - -if(!(p5 === "x5")){ - $ERROR('#5: p5 === "x5". Actual: p5 ==='+ p5 ); -} - -if(!(myObj.p1 === "x1")){ - $ERROR('#6: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 ); -} - -if(!(myObj.p2 === "b")){ - $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 ); -} - -if(!(myObj.p3 === undefined)){ - $ERROR('#8: myObj.p3 === undefined. Actual: myObj.p3 ==='+ myObj.p3 ); -} - -if(!(myObj.p4 === undefined)){ - $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 ); -} - -if(!(myObj.p5 === undefined)){ - $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 ); -} - -if(!(st_parseInt !== parseInt)){ - $ERROR('#11: myObj.parseInt !== parseInt'); -} - -if(!(st_NaN === "obj_NaN")){ - $ERROR('#12: myObj.NaN !== NaN'); -} - -if(!(st_Infinity !== Infinity)){ - $ERROR('#13: myObj.Infinity !== Infinity'); -} - -if(!(st_eval !== eval)){ - $ERROR('#14: myObj.eval !== eval'); -} - -if(!(st_parseFloat !== parseFloat)){ - $ERROR('#15: myObj.parseFloat !== parseFloat'); -} - -if(!(st_isNaN !== isNaN)){ - $ERROR('#16: myObj.isNaN !== isNaN'); -} - -if(!(st_isFinite !== isFinite)){ - $ERROR('#17: myObj.isFinite !== isFinite'); -} - -if(!(value === undefined)){ - $ERROR('#18: value === undefined. Actual: value ==='+ value ); -} - -if(!(myObj.value === "value")){ - $ERROR('#19: myObj.value === "value". Actual: myObj.value ==='+ myObj.value ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.10_T5.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.10_T5.js deleted file mode 100644 index f114b2ac1..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.10_T5.js +++ /dev/null @@ -1,139 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A1.10_T5; - * @section: 12.10; - * @assertion: The with statement adds a computed object to the front of the - * scope chain of the current execution context; - * @description: Using iteration statement within "with" statement leading to completion by break - */ -this.p1 = 1; -this.p2 = 2; -this.p3 = 3; -var result = "result"; -var myObj = {p1: 'a', - p2: 'b', - p3: 'c', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';}, - parseInt : function(){return 'obj_parseInt';}, - NaN : 'obj_NaN', - Infinity : 'obj_Infinity', - eval : function(){return 'obj_eval';}, - parseFloat : function(){return 'obj_parseFloat';}, - isNaN : function(){return 'obj_isNaN';}, - isFinite : function(){return 'obj_isFinite';} -} -var del; -var st_p1 = "p1"; -var st_p2 = "p2"; -var st_p3 = "p3"; -var st_parseInt = "parseInt"; -var st_NaN = "NaN"; -var st_Infinity = "Infinity"; -var st_eval = "eval"; -var st_parseFloat = "parseFloat"; -var st_isNaN = "isNaN"; -var st_isFinite = "isFinite"; - -with(myObj){ - do{ - break; - st_p1 = p1; - st_p2 = p2; - st_p3 = p3; - st_parseInt = parseInt; - st_NaN = NaN; - st_Infinity = Infinity; - st_eval = eval; - st_parseFloat = parseFloat; - st_isNaN = isNaN; - st_isFinite = isFinite; - p1 = 'x1'; - this.p2 = 'x2'; - del = delete p3; - var p4 = 'x4'; - p5 = 'x5'; - var value = 'value'; - } - while(false); -} - -if(!(p1 === 1)){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} - -if(!(p2 === 2)){ - $ERROR('#2: p2 === 2. Actual: p2 ==='+ p2 ); -} - -if(!(p3 === 3)){ - $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 ); -} - -if(!(p4 === undefined)){ - $ERROR('#4: p4 === undefined. Actual: p4 ==='+ p4 ); -} - -try { - p5; - $ERROR('#5: p5 is not defined'); -} catch(e) { -} - -if(!(myObj.p1 === "a")){ - $ERROR('#6: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 ); -} - -if(!(myObj.p2 === "b")){ - $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 ); -} - -if(!(myObj.p3 === "c")){ - $ERROR('#8: myObj.p3 === "c". Actual: myObj.p3 ==='+ myObj.p3 ); -} - -if(!(myObj.p4 === undefined)){ - $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 ); -} - -if(!(myObj.p5 === undefined)){ - $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 ); -} - -if(!(st_parseInt === "parseInt")){ - $ERROR('#11: myObj.parseInt === "parseInt". Actual: myObj.parseInt ==='+ myObj.parseInt ); -} - -if(!(st_NaN === "NaN")){ - $ERROR('#12: st_NaN === "NaN". Actual: st_NaN ==='+ st_NaN ); -} - -if(!(st_Infinity === "Infinity")){ - $ERROR('#13: st_Infinity === "Infinity". Actual: st_Infinity ==='+ st_Infinity ); -} - -if(!(st_eval === "eval")){ - $ERROR('#14: st_eval === "eval". Actual: st_eval ==='+ st_eval ); -} - -if(!(st_parseFloat === "parseFloat")){ - $ERROR('#15: st_parseFloat === "parseFloat". Actual: st_parseFloat ==='+ st_parseFloat ); -} - -if(!(st_isNaN === "isNaN")){ - $ERROR('#16: st_isNaN === "isNaN". Actual: st_isNaN ==='+ st_isNaN ); -} - -if(!(st_isFinite === "isFinite")){ - $ERROR('#17: st_isFinite === "isFinite". Actual: st_isFinite ==='+ st_isFinite ); -} - -if(!(value === undefined)){ - $ERROR('#18: value === undefined. Actual: value ==='+ value ); -} - -if(!(myObj.value === "myObj_value")){ - $ERROR('#19: myObj.value === "myObj_value". Actual: myObj.value ==='+ myObj.value ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.11_T1.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.11_T1.js deleted file mode 100644 index c78bcd0d5..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.11_T1.js +++ /dev/null @@ -1,144 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A1.11_T1; - * @section: 12.10; - * @assertion: The with statement adds a computed object to the front of the - * scope chain of the current execution context; - * @description: Calling a function within "with" statement declared without the statement, leading to normal completion; - */ -this.p1 = 1; -this.p2 = 2; -this.p3 = 3; -var result = "result"; -var myObj = {p1: 'a', - p2: 'b', - p3: 'c', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';}, - parseInt : function(){return 'obj_parseInt';}, - NaN : 'obj_NaN', - Infinity : 'obj_Infinity', - eval : function(){return 'obj_eval';}, - parseFloat : function(){return 'obj_parseFloat';}, - isNaN : function(){return 'obj_isNaN';}, - isFinite : function(){return 'obj_isFinite';} -} -var del; -var st_p1 = "p1"; -var st_p2 = "p2"; -var st_p3 = "p3"; -var st_parseInt = "parseInt"; -var st_NaN = "NaN"; -var st_Infinity = "Infinity"; -var st_eval = "eval"; -var st_parseFloat = "parseFloat"; -var st_isNaN = "isNaN"; -var st_isFinite = "isFinite"; - -var f = function(){ - st_p1 = p1; - st_p2 = p2; - st_p3 = p3; - st_parseInt = parseInt; - st_NaN = NaN; - st_Infinity = Infinity; - st_eval = eval; - st_parseFloat = parseFloat; - st_isNaN = isNaN; - st_isFinite = isFinite; - p1 = 'x1'; - this.p2 = 'x2'; - del = delete p3; - var p4 = 'x4'; - p5 = 'x5'; - var value = 'value'; -} - -with(myObj){ - f(); -} - -if(!(p1 === "x1")){ - $ERROR('#1: p1 === "x1". Actual: p1 ==='+ p1 ); -} - -if(!(p2 === "x2")){ - $ERROR('#2: p2 === "x2". Actual: p2 ==='+ p2 ); -} - -try{ - p3; - $ERROR('#3: p3 is nod defined'); -} -catch(e){ -} - -try { - p4; - $ERROR('#4: p4 is not defined'); -} catch(e) { -} - -if(!(p5 === "x5")){ - $ERROR('#5: p5 === "x5". Actual: p5 ==='+ p5 ); -} - -if(!(myObj.p1 === "a")){ - $ERROR('#6: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 ); -} - -if(!(myObj.p2 === "b")){ - $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 ); -} - -if(!(myObj.p3 === "c")){ - $ERROR('#8: myObj.p3 === "c". Actual: myObj.p3 ==='+ myObj.p3 ); -} - -if(!(myObj.p4 === undefined)){ - $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 ); -} - -if(!(myObj.p5 === undefined)){ - $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 ); -} - -if(!(st_parseInt === parseInt)){ - $ERROR('#11: st_parseInt === parseInt. Actual: st_parseInt ==='+ st_parseInt ); -} - -if(!isNaN(st_NaN)){ - $ERROR('#12: st_NaN === NaN. Actual: st_NaN ==='+ st_NaN ); -} - -if(!(st_Infinity === Infinity)){ - $ERROR('#13: st_Infinity === Infinity. Actual: st_Infinity ==='+ st_Infinity ); -} - -if(!(st_eval === eval)){ - $ERROR('#14: st_eval === eval. Actual: st_eval ==='+ st_eval ); -} - -if(!(st_parseFloat === parseFloat)){ - $ERROR('#15: st_parseFloat === parseFloat. Actual: st_parseFloat ==='+ st_parseFloat ); -} - -if(!(st_isNaN === isNaN)){ - $ERROR('#16: st_isNaN === isNaN. Actual: st_isNaN ==='+ st_isNaN ); -} - -if(!(st_isFinite === isFinite)){ - $ERROR('#17: st_isFinite === isFinite. Actual: st_isFinite ==='+ st_isFinite ); -} - -try { - value; - $ERROR('#18: value is not defined'); -} catch(e) { -} - -if(!(myObj.value === "myObj_value")){ - $ERROR('#19: myObj.value === "myObj_value". Actual: myObj.value ==='+ myObj.value ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.11_T2.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.11_T2.js deleted file mode 100644 index 34aa5775c..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.11_T2.js +++ /dev/null @@ -1,149 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A1.11_T2; - * @section: 12.10; - * @assertion: The with statement adds a computed object to the front of the - * scope chain of the current execution context; - * @description: Calling a function within "with" statement declared without the statement, leading to normal completion by "return"; - */ -this.p1 = 1; -this.p2 = 2; -this.p3 = 3; -var result = "result"; -var myObj = {p1: 'a', - p2: 'b', - p3: 'c', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';}, - parseInt : function(){return 'obj_parseInt';}, - NaN : 'obj_NaN', - Infinity : 'obj_Infinity', - eval : function(){return 'obj_eval';}, - parseFloat : function(){return 'obj_parseFloat';}, - isNaN : function(){return 'obj_isNaN';}, - isFinite : function(){return 'obj_isFinite';} -} -var del; -var st_p1 = "p1"; -var st_p2 = "p2"; -var st_p3 = "p3"; -var st_parseInt = "parseInt"; -var st_NaN = "NaN"; -var st_Infinity = "Infinity"; -var st_eval = "eval"; -var st_parseFloat = "parseFloat"; -var st_isNaN = "isNaN"; -var st_isFinite = "isFinite"; - -var f = function(){ - st_p1 = p1; - st_p2 = p2; - st_p3 = p3; - st_parseInt = parseInt; - st_NaN = NaN; - st_Infinity = Infinity; - st_eval = eval; - st_parseFloat = parseFloat; - st_isNaN = isNaN; - st_isFinite = isFinite; - p1 = 'x1'; - this.p2 = 'x2'; - del = delete p3; - var p4 = 'x4'; - p5 = 'x5'; - var value = 'value'; - return value; -} - -with(myObj){ - result = f(); -} - -if(!(result === "value")){ - $ERROR('#0: result === "value". Actual: result ==='+ result ); -} - -if(!(p1 === "x1")){ - $ERROR('#1: p1 === "x1". Actual: p1 ==='+ p1 ); -} - -if(!(p2 === "x2")){ - $ERROR('#2: p2 === "x2". Actual: p2 ==='+ p2 ); -} - -try{ - p3; - $ERROR('#3: p3 is nod defined'); -} -catch(e){ -} - -try { - p4; - $ERROR('#4: p4 is not defined'); -} catch(e) { -} - -if(!(p5 === "x5")){ - $ERROR('#5: p5 === "x5". Actual: p5 ==='+ p5 ); -} - -if(!(myObj.p1 === "a")){ - $ERROR('#6: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 ); -} - -if(!(myObj.p2 === "b")){ - $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 ); -} - -if(!(myObj.p3 === "c")){ - $ERROR('#8: myObj.p3 === "c". Actual: myObj.p3 ==='+ myObj.p3 ); -} - -if(!(myObj.p4 === undefined)){ - $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 ); -} - -if(!(myObj.p5 === undefined)){ - $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 ); -} - -if(!(st_parseInt === parseInt)){ - $ERROR('#11: st_parseInt === parseInt. Actual: st_parseInt ==='+ st_parseInt ); -} - -if(!isNaN(st_NaN)){ - $ERROR('#12: st_NaN === NaN. Actual: st_NaN ==='+ st_NaN ); -} - -if(!(st_Infinity === Infinity)){ - $ERROR('#13: st_Infinity === Infinity. Actual: st_Infinity ==='+ st_Infinity ); -} - -if(!(st_eval === eval)){ - $ERROR('#14: st_eval === eval. Actual: st_eval ==='+ st_eval ); -} - -if(!(st_parseFloat === parseFloat)){ - $ERROR('#15: st_parseFloat === parseFloat. Actual: st_parseFloat ==='+ st_parseFloat ); -} - -if(!(st_isNaN === isNaN)){ - $ERROR('#16: st_isNaN === isNaN. Actual: st_isNaN ==='+ st_isNaN ); -} - -if(!(st_isFinite === isFinite)){ - $ERROR('#17: st_isFinite === isFinite. Actual: st_isFinite ==='+ st_isFinite ); -} - -try { - value; - $ERROR('#18: value is not defined'); -} catch(e) { -} - -if(!(myObj.value === "myObj_value")){ - $ERROR('#19: myObj.value === "myObj_value". Actual: myObj.value ==='+ myObj.value ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.11_T3.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.11_T3.js deleted file mode 100644 index e1d5a34bc..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.11_T3.js +++ /dev/null @@ -1,149 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A1.11_T3; - * @section: 12.10; - * @assertion: The with statement adds a computed object to the front of the - * scope chain of the current execution context; - * @description: Calling a function within "with" statement declared without the statement, leading to normal completion by "return"; - */ -this.p1 = 1; -this.p2 = 2; -this.p3 = 3; -var result = "result"; -var myObj = {p1: 'a', - p2: 'b', - p3: 'c', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';}, - parseInt : function(){return 'obj_parseInt';}, - NaN : 'obj_NaN', - Infinity : 'obj_Infinity', - eval : function(){return 'obj_eval';}, - parseFloat : function(){return 'obj_parseFloat';}, - isNaN : function(){return 'obj_isNaN';}, - isFinite : function(){return 'obj_isFinite';} -} -var del; -var st_p1 = "p1"; -var st_p2 = "p2"; -var st_p3 = "p3"; -var st_parseInt = "parseInt"; -var st_NaN = "NaN"; -var st_Infinity = "Infinity"; -var st_eval = "eval"; -var st_parseFloat = "parseFloat"; -var st_isNaN = "isNaN"; -var st_isFinite = "isFinite"; - -var f = function(){ - return value; - st_p1 = p1; - st_p2 = p2; - st_p3 = p3; - st_parseInt = parseInt; - st_NaN = NaN; - st_Infinity = Infinity; - st_eval = eval; - st_parseFloat = parseFloat; - st_isNaN = isNaN; - st_isFinite = isFinite; - p1 = 'x1'; - this.p2 = 'x2'; - del = delete p3; - var p4 = 'x4'; - p5 = 'x5'; - var value = 'value'; -} - -with(myObj){ - result = f(); -} - -if(!(result === undefined)){ - $ERROR('#0: result === undefined. Actual: result ==='+ result ); -} - -if(!(p1 === 1)){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} - -if(!(p2 === 2)){ - $ERROR('#2: p2 === 2. Actual: p2 ==='+ p2 ); -} - -if(!(p3 === 3)){ - $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 ); -} - -try{ - p4; - $ERROR('#4: p4 doesn\'t exists'); -} -catch(e){ -} - -try { - p5; - $ERROR('#5: p5 is not defined'); -} catch(e) { -} - -if(!(myObj.p1 === "a")){ - $ERROR('#6: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 ); -} - -if(!(myObj.p2 === "b")){ - $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 ); -} - -if(!(myObj.p3 === "c")){ - $ERROR('#8: myObj.p3 === "c". Actual: myObj.p3 ==='+ myObj.p3 ); -} - -if(!(myObj.p4 === undefined)){ - $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 ); -} - -if(!(myObj.p5 === undefined)){ - $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 ); -} - -if(!(st_parseInt === "parseInt")){ - $ERROR('#11: myObj.parseInt === "parseInt". Actual: myObj.parseInt ==='+ myObj.parseInt ); -} - -if(!(st_NaN === "NaN")){ - $ERROR('#12: st_NaN === "NaN". Actual: st_NaN ==='+ st_NaN ); -} - -if(!(st_Infinity === "Infinity")){ - $ERROR('#13: st_Infinity === "Infinity". Actual: st_Infinity ==='+ st_Infinity ); -} - -if(!(st_eval === "eval")){ - $ERROR('#14: st_eval === "eval". Actual: st_eval ==='+ st_eval ); -} - -if(!(st_parseFloat === "parseFloat")){ - $ERROR('#15: st_parseFloat === "parseFloat". Actual: st_parseFloat ==='+ st_parseFloat ); -} - -if(!(st_isNaN === "isNaN")){ - $ERROR('#16: st_isNaN === "isNaN". Actual: st_isNaN ==='+ st_isNaN ); -} - -if(!(st_isFinite === "isFinite")){ - $ERROR('#17: st_isFinite === "isFinite". Actual: st_isFinite ==='+ st_isFinite ); -} - -try { - value; - $ERROR('#18: value is not defined'); -} catch(e) { -} - -if(!(myObj.value === "myObj_value")){ - $ERROR('#19: myObj.value === "myObj_value". Actual: myObj.value ==='+ myObj.value ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.11_T4.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.11_T4.js deleted file mode 100644 index 9ea7f8494..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.11_T4.js +++ /dev/null @@ -1,152 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A1.11_T4; - * @section: 12.10; - * @assertion: The with statement adds a computed object to the front of the - * scope chain of the current execution context; - * @description: Calling a function within "with" statement declared without the statement, leading to completion by exception; - */ -this.p1 = 1; -this.p2 = 2; -this.p3 = 3; -var result = "result"; -var myObj = {p1: 'a', - p2: 'b', - p3: 'c', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';}, - parseInt : function(){return 'obj_parseInt';}, - NaN : 'obj_NaN', - Infinity : 'obj_Infinity', - eval : function(){return 'obj_eval';}, - parseFloat : function(){return 'obj_parseFloat';}, - isNaN : function(){return 'obj_isNaN';}, - isFinite : function(){return 'obj_isFinite';} -} -var del; -var st_p1 = "p1"; -var st_p2 = "p2"; -var st_p3 = "p3"; -var st_parseInt = "parseInt"; -var st_NaN = "NaN"; -var st_Infinity = "Infinity"; -var st_eval = "eval"; -var st_parseFloat = "parseFloat"; -var st_isNaN = "isNaN"; -var st_isFinite = "isFinite"; - -try { - var f = function(){ - st_p1 = p1; - st_p2 = p2; - st_p3 = p3; - st_parseInt = parseInt; - st_NaN = NaN; - st_Infinity = Infinity; - st_eval = eval; - st_parseFloat = parseFloat; - st_isNaN = isNaN; - st_isFinite = isFinite; - p1 = 'x1'; - this.p2 = 'x2'; - del = delete p3; - var p4 = 'x4'; - p5 = 'x5'; - var value = 'value'; - throw value; - } - with(myObj){ - f(); - } -} catch(e){ - result = e; -} - -if(!(result === "value")){ - $ERROR('#0: result === "value". Actual: result ==='+ result ); -} - -if(!(p1 === "x1")){ - $ERROR('#1: p1 === "x1". Actual: p1 ==='+ p1 ); -} - -if(!(p2 === "x2")){ - $ERROR('#2: p2 === "x2". Actual: p2 ==='+ p2 ); -} - -try{ - p3; - $ERROR('#3: p3 is nod defined'); -} -catch(e){ -} - -try { - p4; - $ERROR('#4: p4 is not defined'); -} catch(e) { -} - -if(!(p5 === "x5")){ - $ERROR('#5: p5 === "x5". Actual: p5 ==='+ p5 ); -} - -if(!(myObj.p1 === "a")){ - $ERROR('#6: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 ); -} - -if(!(myObj.p2 === "b")){ - $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 ); -} - -if(!(myObj.p3 === "c")){ - $ERROR('#8: myObj.p3 === "c". Actual: myObj.p3 ==='+ myObj.p3 ); -} - -if(!(myObj.p4 === undefined)){ - $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 ); -} - -if(!(myObj.p5 === undefined)){ - $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 ); -} - -if(!(st_parseInt === parseInt)){ - $ERROR('#11: st_parseInt === parseInt. Actual: st_parseInt ==='+ st_parseInt ); -} - -if(!isNaN(st_NaN)){ - $ERROR('#12: st_NaN === NaN. Actual: st_NaN ==='+ st_NaN ); -} - -if(!(st_Infinity === Infinity)){ - $ERROR('#13: st_Infinity === Infinity. Actual: st_Infinity ==='+ st_Infinity ); -} - -if(!(st_eval === eval)){ - $ERROR('#14: st_eval === eval. Actual: st_eval ==='+ st_eval ); -} - -if(!(st_parseFloat === parseFloat)){ - $ERROR('#15: st_parseFloat === parseFloat. Actual: st_parseFloat ==='+ st_parseFloat ); -} - -if(!(st_isNaN === isNaN)){ - $ERROR('#16: st_isNaN === isNaN. Actual: st_isNaN ==='+ st_isNaN ); -} - -if(!(st_isFinite === isFinite)){ - $ERROR('#17: st_isFinite === isFinite. Actual: st_isFinite ==='+ st_isFinite ); -} - -try { - value; - $ERROR('#18: value is not defined'); -} catch(e) { -} - -if(!(myObj.value === "myObj_value")){ - $ERROR('#19: myObj.value === "myObj_value". Actual: myObj.value ==='+ myObj.value ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.11_T5.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.11_T5.js deleted file mode 100644 index 9dcbe1f04..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.11_T5.js +++ /dev/null @@ -1,152 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A1.11_T5; - * @section: 12.10; - * @assertion: The with statement adds a computed object to the front of the - * scope chain of the current execution context; - * @description: Calling a function within "with" statement declared without the statement, leading to completion by exception; - */ -this.p1 = 1; -this.p2 = 2; -this.p3 = 3; -var result = "result"; -var myObj = {p1: 'a', - p2: 'b', - p3: 'c', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';}, - parseInt : function(){return 'obj_parseInt';}, - NaN : 'obj_NaN', - Infinity : 'obj_Infinity', - eval : function(){return 'obj_eval';}, - parseFloat : function(){return 'obj_parseFloat';}, - isNaN : function(){return 'obj_isNaN';}, - isFinite : function(){return 'obj_isFinite';} -} -var del; -var st_p1 = "p1"; -var st_p2 = "p2"; -var st_p3 = "p3"; -var st_parseInt = "parseInt"; -var st_NaN = "NaN"; -var st_Infinity = "Infinity"; -var st_eval = "eval"; -var st_parseFloat = "parseFloat"; -var st_isNaN = "isNaN"; -var st_isFinite = "isFinite"; - -try { - var f = function(){ - throw value; - st_p1 = p1; - st_p2 = p2; - st_p3 = p3; - st_parseInt = parseInt; - st_NaN = NaN; - st_Infinity = Infinity; - st_eval = eval; - st_parseFloat = parseFloat; - st_isNaN = isNaN; - st_isFinite = isFinite; - p1 = 'x1'; - this.p2 = 'x2'; - del = delete p3; - var p4 = 'x4'; - p5 = 'x5'; - var value = 'value'; - } - with(myObj){ - f(); - } -} catch(e){ - result = e; -} - -if(!(result === undefined)){ - $ERROR('#0: result === undefined. Actual: result ==='+ result ); -} - -if(!(p1 === 1)){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} - -if(!(p2 === 2)){ - $ERROR('#2: p2 === 2. Actual: p2 ==='+ p2 ); -} - -if(!(p3 === 3)){ - $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 ); -} - -try{ - p4; - $ERROR('#4: p4 doesn\'t exists'); -} -catch(e){ -} - -try { - p5; - $ERROR('#5: p5 is not defined'); -} catch(e) { -} - -if(!(myObj.p1 === "a")){ - $ERROR('#6: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 ); -} - -if(!(myObj.p2 === "b")){ - $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 ); -} - -if(!(myObj.p3 === "c")){ - $ERROR('#8: myObj.p3 === "c". Actual: myObj.p3 ==='+ myObj.p3 ); -} - -if(!(myObj.p4 === undefined)){ - $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 ); -} - -if(!(myObj.p5 === undefined)){ - $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 ); -} - -if(!(st_parseInt === "parseInt")){ - $ERROR('#11: myObj.parseInt === "parseInt". Actual: myObj.parseInt ==='+ myObj.parseInt ); -} - -if(!(st_NaN === "NaN")){ - $ERROR('#12: st_NaN === "NaN". Actual: st_NaN ==='+ st_NaN ); -} - -if(!(st_Infinity === "Infinity")){ - $ERROR('#13: st_Infinity === "Infinity". Actual: st_Infinity ==='+ st_Infinity ); -} - -if(!(st_eval === "eval")){ - $ERROR('#14: st_eval === "eval". Actual: st_eval ==='+ st_eval ); -} - -if(!(st_parseFloat === "parseFloat")){ - $ERROR('#15: st_parseFloat === "parseFloat". Actual: st_parseFloat ==='+ st_parseFloat ); -} - -if(!(st_isNaN === "isNaN")){ - $ERROR('#16: st_isNaN === "isNaN". Actual: st_isNaN ==='+ st_isNaN ); -} - -if(!(st_isFinite === "isFinite")){ - $ERROR('#17: st_isFinite === "isFinite". Actual: st_isFinite ==='+ st_isFinite ); -} - -try { - value; - $ERROR('#18: value is not defined'); -} catch(e) { -} - -if(!(myObj.value === "myObj_value")){ - $ERROR('#19: myObj.value === "myObj_value". Actual: myObj.value ==='+ myObj.value ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.12_T1.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.12_T1.js deleted file mode 100644 index 1f8e68cc4..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.12_T1.js +++ /dev/null @@ -1,141 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A1.12_T1; - * @section: 12.10; - * @assertion: The with statement adds a computed object to the front of the - * scope chain of the current execution context; - * @description: Calling a function without "with" statement declared within the statement, leading to normal completion; - */ -this.p1 = 1; -this.p2 = 2; -this.p3 = 3; -var result = "result"; -var myObj = {p1: 'a', - p2: 'b', - p3: 'c', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';}, - parseInt : function(){return 'obj_parseInt';}, - NaN : 'obj_NaN', - Infinity : 'obj_Infinity', - eval : function(){return 'obj_eval';}, - parseFloat : function(){return 'obj_parseFloat';}, - isNaN : function(){return 'obj_isNaN';}, - isFinite : function(){return 'obj_isFinite';} -} -var del; -var st_p1 = "p1"; -var st_p2 = "p2"; -var st_p3 = "p3"; -var st_parseInt = "parseInt"; -var st_NaN = "NaN"; -var st_Infinity = "Infinity"; -var st_eval = "eval"; -var st_parseFloat = "parseFloat"; -var st_isNaN = "isNaN"; -var st_isFinite = "isFinite"; - -with(myObj){ - var f = function(){ - st_p1 = p1; - st_p2 = p2; - st_p3 = p3; - st_parseInt = parseInt; - st_NaN = NaN; - st_Infinity = Infinity; - st_eval = eval; - st_parseFloat = parseFloat; - st_isNaN = isNaN; - st_isFinite = isFinite; - p1 = 'x1'; - this.p2 = 'x2'; - del = delete p3; - var p4 = 'x4'; - p5 = 'x5'; - var value = 'value'; - } -} -f(); - -if(!(p1 === 1)){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} - -if(!(p2 === "x2")){ - $ERROR('#2: p2 === "x2". Actual: p2 ==='+ p2 ); -} - -if(!(p3 === 3)){ - $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 ); -} - -try{ - p4; - $ERROR('#4: p4 doesn\'t exists'); -} -catch(e){ -} - -if(!(p5 === "x5")){ - $ERROR('#5: p5 === "x5". Actual: p5 ==='+ p5 ); -} - -if(!(myObj.p1 === "x1")){ - $ERROR('#6: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 ); -} - -if(!(myObj.p2 === "b")){ - $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 ); -} - -if(!(myObj.p3 === undefined)){ - $ERROR('#8: myObj.p3 === undefined. Actual: myObj.p3 ==='+ myObj.p3 ); -} - -if(!(myObj.p4 === undefined)){ - $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 ); -} - -if(!(myObj.p5 === undefined)){ - $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 ); -} - -if(!(st_parseInt !== parseInt)){ - $ERROR('#11: myObj.parseInt !== parseInt'); -} - -if(!(st_NaN === "obj_NaN")){ - $ERROR('#12: myObj.NaN !== NaN'); -} - -if(!(st_Infinity !== Infinity)){ - $ERROR('#13: myObj.Infinity !== Infinity'); -} - -if(!(st_eval !== eval)){ - $ERROR('#14: myObj.eval !== eval'); -} - -if(!(st_parseFloat !== parseFloat)){ - $ERROR('#15: myObj.parseFloat !== parseFloat'); -} - -if(!(st_isNaN !== isNaN)){ - $ERROR('#16: myObj.isNaN !== isNaN'); -} - -if(!(st_isFinite !== isFinite)){ - $ERROR('#17: myObj.isFinite !== isFinite'); -} - -try { - value; - $ERROR('#18: value is not defined'); -} catch(e) { -} - -if(!(myObj.value === "myObj_value")){ - $ERROR('#19: myObj.value === "myObj_value". Actual: myObj.value ==='+ myObj.value ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.12_T2.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.12_T2.js deleted file mode 100644 index 7819e2df1..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.12_T2.js +++ /dev/null @@ -1,147 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A1.12_T2; - * @section: 12.10; - * @assertion: The with statement adds a computed object to the front of the - * scope chain of the current execution context; - * @description: Calling a function without "with" statement declared within the statement, leading to normal completion by "return"; - */ -this.p1 = 1; -this.p2 = 2; -this.p3 = 3; -var result = "result"; -var myObj = {p1: 'a', - p2: 'b', - p3: 'c', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';}, - parseInt : function(){return 'obj_parseInt';}, - NaN : 'obj_NaN', - Infinity : 'obj_Infinity', - eval : function(){return 'obj_eval';}, - parseFloat : function(){return 'obj_parseFloat';}, - isNaN : function(){return 'obj_isNaN';}, - isFinite : function(){return 'obj_isFinite';} -} -var del; -var st_p1 = "p1"; -var st_p2 = "p2"; -var st_p3 = "p3"; -var st_parseInt = "parseInt"; -var st_NaN = "NaN"; -var st_Infinity = "Infinity"; -var st_eval = "eval"; -var st_parseFloat = "parseFloat"; -var st_isNaN = "isNaN"; -var st_isFinite = "isFinite"; - -with(myObj){ - var f = function(){ - st_p1 = p1; - st_p2 = p2; - st_p3 = p3; - st_parseInt = parseInt; - st_NaN = NaN; - st_Infinity = Infinity; - st_eval = eval; - st_parseFloat = parseFloat; - st_isNaN = isNaN; - st_isFinite = isFinite; - p1 = 'x1'; - this.p2 = 'x2'; - del = delete p3; - var p4 = 'x4'; - p5 = 'x5'; - var value = 'value'; - return value; - } -} -result = f(); - -if(!(result === "value")){ - $ERROR('#0: result === "value". Actual: result ==='+ result ); -} - -if(!(p1 === 1)){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} - -if(!(p2 === "x2")){ - $ERROR('#2: p2 === "x2". Actual: p2 ==='+ p2 ); -} - -if(!(p3 === 3)){ - $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 ); -} - -try{ - p4; - $ERROR('#4: p4 doesn\'t exists'); -} -catch(e){ -} - -if(!(p5 === "x5")){ - $ERROR('#5: p5 === "x5". Actual: p5 ==='+ p5 ); -} - -if(!(myObj.p1 === "x1")){ - $ERROR('#6: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 ); -} - -if(!(myObj.p2 === "b")){ - $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 ); -} - -if(!(myObj.p3 === undefined)){ - $ERROR('#8: myObj.p3 === undefined. Actual: myObj.p3 ==='+ myObj.p3 ); -} - -if(!(myObj.p4 === undefined)){ - $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 ); -} - -if(!(myObj.p5 === undefined)){ - $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 ); -} - -if(!(st_parseInt !== parseInt)){ - $ERROR('#11: myObj.parseInt !== parseInt'); -} - -if(!(st_NaN === "obj_NaN")){ - $ERROR('#12: myObj.NaN !== NaN'); -} - -if(!(st_Infinity !== Infinity)){ - $ERROR('#13: myObj.Infinity !== Infinity'); -} - -if(!(st_eval !== eval)){ - $ERROR('#14: myObj.eval !== eval'); -} - -if(!(st_parseFloat !== parseFloat)){ - $ERROR('#15: myObj.parseFloat !== parseFloat'); -} - -if(!(st_isNaN !== isNaN)){ - $ERROR('#16: myObj.isNaN !== isNaN'); -} - -if(!(st_isFinite !== isFinite)){ - $ERROR('#17: myObj.isFinite !== isFinite'); -} - -try{ - value; - $ERROR('#18: value is not defined'); -} -catch(e){ -} - -if(!(myObj.value === "myObj_value")){ - $ERROR('#19: myObj.value === "myObj_value". Actual: myObj.value ==='+ myObj.value ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.12_T3.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.12_T3.js deleted file mode 100644 index 11e4195cb..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.12_T3.js +++ /dev/null @@ -1,149 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A1.12_T3; - * @section: 12.10; - * @assertion: The with statement adds a computed object to the front of the - * scope chain of the current execution context; - * @description: Calling a function without "with" statement declared within the statement, leading to normal completion by "return"; - */ -this.p1 = 1; -this.p2 = 2; -this.p3 = 3; -var result = "result"; -var myObj = {p1: 'a', - p2: 'b', - p3: 'c', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';}, - parseInt : function(){return 'obj_parseInt';}, - NaN : 'obj_NaN', - Infinity : 'obj_Infinity', - eval : function(){return 'obj_eval';}, - parseFloat : function(){return 'obj_parseFloat';}, - isNaN : function(){return 'obj_isNaN';}, - isFinite : function(){return 'obj_isFinite';} -} -var del; -var st_p1 = "p1"; -var st_p2 = "p2"; -var st_p3 = "p3"; -var st_parseInt = "parseInt"; -var st_NaN = "NaN"; -var st_Infinity = "Infinity"; -var st_eval = "eval"; -var st_parseFloat = "parseFloat"; -var st_isNaN = "isNaN"; -var st_isFinite = "isFinite"; - -with(myObj){ - var f = function(){ - return value; - st_p1 = p1; - st_p2 = p2; - st_p3 = p3; - st_parseInt = parseInt; - st_NaN = NaN; - st_Infinity = Infinity; - st_eval = eval; - st_parseFloat = parseFloat; - st_isNaN = isNaN; - st_isFinite = isFinite; - p1 = 'x1'; - this.p2 = 'x2'; - del = delete p3; - var p4 = 'x4'; - p5 = 'x5'; - var value = 'value'; - } -} -result = f(); - -if(!(result === undefined)){ - $ERROR('#0: result === undefined. Actual: result ==='+ result ); -} - -if(!(p1 === 1)){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} - -if(!(p2 === 2)){ - $ERROR('#2: p2 === 2. Actual: p2 ==='+ p2 ); -} - -if(!(p3 === 3)){ - $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 ); -} - -try { - p4; - $ERROR('#4: p4 is not defined'); -} catch(e) { -} - -try { - p5; - $ERROR('#5: p5 is not defined'); -} catch(e) { -} - -if(!(myObj.p1 === "a")){ - $ERROR('#6: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 ); -} - -if(!(myObj.p2 === "b")){ - $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 ); -} - -if(!(myObj.p3 === "c")){ - $ERROR('#8: myObj.p3 === "c". Actual: myObj.p3 ==='+ myObj.p3 ); -} - -if(!(myObj.p4 === undefined)){ - $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 ); -} - -if(!(myObj.p5 === undefined)){ - $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 ); -} - -if(!(st_parseInt === "parseInt")){ - $ERROR('#11: myObj.parseInt === "parseInt". Actual: myObj.parseInt ==='+ myObj.parseInt ); -} - -if(!(st_NaN === "NaN")){ - $ERROR('#12: st_NaN === "NaN". Actual: st_NaN ==='+ st_NaN ); -} - -if(!(st_Infinity === "Infinity")){ - $ERROR('#13: st_Infinity === "Infinity". Actual: st_Infinity ==='+ st_Infinity ); -} - -if(!(st_eval === "eval")){ - $ERROR('#14: st_eval === "eval". Actual: st_eval ==='+ st_eval ); -} - -if(!(st_parseFloat === "parseFloat")){ - $ERROR('#15: st_parseFloat === "parseFloat". Actual: st_parseFloat ==='+ st_parseFloat ); -} - -if(!(st_isNaN === "isNaN")){ - $ERROR('#16: st_isNaN === "isNaN". Actual: st_isNaN ==='+ st_isNaN ); -} - -if(!(st_isFinite === "isFinite")){ - $ERROR('#17: st_isFinite === "isFinite". Actual: st_isFinite ==='+ st_isFinite ); -} - -try{ - value; - $ERROR('#18: value is not defined'); -} -catch(e){ -} - -if(!(myObj.value === "myObj_value")){ - $ERROR('#19: myObj.value === "myObj_value". Actual: myObj.value ==='+ myObj.value ); -} - diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.12_T4.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.12_T4.js deleted file mode 100644 index 5ec77e41a..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.12_T4.js +++ /dev/null @@ -1,149 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A1.12_T4; - * @section: 12.10; - * @assertion: The with statement adds a computed object to the front of the - * scope chain of the current execution context; - * @description: Calling a function without "with" statement declared within the statement, leading to completion by exception; - */ -this.p1 = 1; -this.p2 = 2; -this.p3 = 3; -var result = "result"; -var myObj = {p1: 'a', - p2: 'b', - p3: 'c', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';}, - parseInt : function(){return 'obj_parseInt';}, - NaN : 'obj_NaN', - Infinity : 'obj_Infinity', - eval : function(){return 'obj_eval';}, - parseFloat : function(){return 'obj_parseFloat';}, - isNaN : function(){return 'obj_isNaN';}, - isFinite : function(){return 'obj_isFinite';} -} -var del; -var st_p1 = "p1"; -var st_p2 = "p2"; -var st_p3 = "p3"; -var st_parseInt = "parseInt"; -var st_NaN = "NaN"; -var st_Infinity = "Infinity"; -var st_eval = "eval"; -var st_parseFloat = "parseFloat"; -var st_isNaN = "isNaN"; -var st_isFinite = "isFinite"; - -try { - with(myObj){ - var f = function(){ - st_p1 = p1; - st_p2 = p2; - st_p3 = p3; - st_parseInt = parseInt; - st_NaN = NaN; - st_Infinity = Infinity; - st_eval = eval; - st_parseFloat = parseFloat; - st_isNaN = isNaN; - st_isFinite = isFinite; - p1 = 'x1'; - this.p2 = 'x2'; - del = delete p3; - var p4 = 'x4'; - p5 = 'x5'; - var value = 'value'; - throw value; - } - } - f(); -} catch(e){ - result = e; -} - -if(!(result === "value")){ - $ERROR('#0: result === "value". Actual: result ==='+ result ); -} - -if(!(p1 === 1)){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} - -if(!(p2 === "x2")){ - $ERROR('#2: p2 === "x2". Actual: p2 ==='+ p2 ); -} - -if(!(p3 === 3)){ - $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 ); -} - -try { - p4; - $ERROR('#4: p4 is not defined'); -} catch(e) { -} - -if(!(p5 === "x5")){ - $ERROR('#5: p5 === "x5". Actual: p5 ==='+ p5 ); -} - -if(!(myObj.p1 === "x1")){ - $ERROR('#6: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 ); -} - -if(!(myObj.p2 === "b")){ - $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 ); -} - -if(!(myObj.p3 === undefined)){ - $ERROR('#8: myObj.p3 === undefined. Actual: myObj.p3 ==='+ myObj.p3 ); -} - -if(!(myObj.p4 === undefined)){ - $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 ); -} - -if(!(myObj.p5 === undefined)){ - $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 ); -} - -if(!(st_parseInt !== parseInt)){ - $ERROR('#11: myObj.parseInt !== parseInt'); -} - -if(!(st_NaN === "obj_NaN")){ - $ERROR('#12: myObj.NaN !== NaN'); -} - -if(!(st_Infinity !== Infinity)){ - $ERROR('#13: myObj.Infinity !== Infinity'); -} - -if(!(st_eval !== eval)){ - $ERROR('#14: myObj.eval !== eval'); -} - -if(!(st_parseFloat !== parseFloat)){ - $ERROR('#15: myObj.parseFloat !== parseFloat'); -} - -if(!(st_isNaN !== isNaN)){ - $ERROR('#16: myObj.isNaN !== isNaN'); -} - -if(!(st_isFinite !== isFinite)){ - $ERROR('#17: myObj.isFinite !== isFinite'); -} - -try { - value; - $ERROR('#18: value is not defined'); -} catch(e) { -} - -if(!(myObj.value === "myObj_value")){ - $ERROR('#19: myObj.value === "myObj_value". Actual: myObj.value ==='+ myObj.value ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.12_T5.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.12_T5.js deleted file mode 100644 index 8a9914388..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.12_T5.js +++ /dev/null @@ -1,153 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A1.12_T5; - * @section: 12.10; - * @assertion: The with statement adds a computed object to the front of the - * scope chain of the current execution context; - * @description: Calling a function without "with" statement declared within the statement, leading to completion by exception; - */ -this.p1 = 1; -this.p2 = 2; -this.p3 = 3; -var result = "result"; -var myObj = {p1: 'a', - p2: 'b', - p3: 'c', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';}, - parseInt : function(){return 'obj_parseInt';}, - NaN : 'obj_NaN', - Infinity : 'obj_Infinity', - eval : function(){return 'obj_eval';}, - parseFloat : function(){return 'obj_parseFloat';}, - isNaN : function(){return 'obj_isNaN';}, - isFinite : function(){return 'obj_isFinite';} -} -var del; -var st_p1 = "p1"; -var st_p2 = "p2"; -var st_p3 = "p3"; -var st_parseInt = "parseInt"; -var st_NaN = "NaN"; -var st_Infinity = "Infinity"; -var st_eval = "eval"; -var st_parseFloat = "parseFloat"; -var st_isNaN = "isNaN"; -var st_isFinite = "isFinite"; - -try { - with(myObj){ - var f = function(){ - throw value; - st_p1 = p1; - st_p2 = p2; - st_p3 = p3; - st_parseInt = parseInt; - st_NaN = NaN; - st_Infinity = Infinity; - st_eval = eval; - st_parseFloat = parseFloat; - st_isNaN = isNaN; - st_isFinite = isFinite; - p1 = 'x1'; - this.p2 = 'x2'; - del = delete p3; - var p4 = 'x4'; - p5 = 'x5'; - var value = 'value'; - } - } - f(); -} catch(e){ - result = e; -} - -if(!(result === undefined)){ - $ERROR('#0: result === undefined. Actual: result ==='+ result ); -} - -if(!(p1 === 1)){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} - -if(!(p2 === 2)){ - $ERROR('#2: p2 === 2. Actual: p2 ==='+ p2 ); -} - -if(!(p3 === 3)){ - $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 ); -} - -try { - p4; - $ERROR('#4: p4 is not defined'); -} catch(e) { -} - -try { - p5; - $ERROR('#5: p5 is not defined'); -} catch(e) { -} - -if(!(myObj.p1 === "a")){ - $ERROR('#6: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 ); -} - -if(!(myObj.p2 === "b")){ - $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 ); -} - -if(!(myObj.p3 === "c")){ - $ERROR('#8: myObj.p3 === "c". Actual: myObj.p3 ==='+ myObj.p3 ); -} - -if(!(myObj.p4 === undefined)){ - $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 ); -} - -if(!(myObj.p5 === undefined)){ - $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 ); -} - -if(!(st_parseInt === "parseInt")){ - $ERROR('#11: myObj.parseInt === "parseInt". Actual: myObj.parseInt ==='+ myObj.parseInt ); -} - -if(!(st_NaN === "NaN")){ - $ERROR('#12: st_NaN === "NaN". Actual: st_NaN ==='+ st_NaN ); -} - -if(!(st_Infinity === "Infinity")){ - $ERROR('#13: st_Infinity === "Infinity". Actual: st_Infinity ==='+ st_Infinity ); -} - -if(!(st_eval === "eval")){ - $ERROR('#14: st_eval === "eval". Actual: st_eval ==='+ st_eval ); -} - -if(!(st_parseFloat === "parseFloat")){ - $ERROR('#15: st_parseFloat === "parseFloat". Actual: st_parseFloat ==='+ st_parseFloat ); -} - -if(!(st_isNaN === "isNaN")){ - $ERROR('#16: st_isNaN === "isNaN". Actual: st_isNaN ==='+ st_isNaN ); -} - -if(!(st_isFinite === "isFinite")){ - $ERROR('#17: st_isFinite === "isFinite". Actual: st_isFinite ==='+ st_isFinite ); -} - -try{ - value; - $ERROR('#18: value is not defined'); -} -catch(e){ -} - -if(!(myObj.value === "myObj_value")){ - $ERROR('#19: myObj.value === "myObj_value". Actual: myObj.value ==='+ myObj.value ); -} - diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.1_T1.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.1_T1.js deleted file mode 100644 index 07106be87..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.1_T1.js +++ /dev/null @@ -1,133 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A1.1_T1; - * @section: 12.10; - * @assertion: The with statement adds a computed object to the front of the - * scope chain of the current execution context; - * @description: Using "with" inside of global context leading to normal completion; - */ -this.p1 = 1; -this.p2 = 2; -this.p3 = 3; -var result = "result"; -var myObj = {p1: 'a', - p2: 'b', - p3: 'c', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';}, - parseInt : function(){return 'obj_parseInt';}, - NaN : 'obj_NaN', - Infinity : 'obj_Infinity', - eval : function(){return 'obj_eval';}, - parseFloat : function(){return 'obj_parseFloat';}, - isNaN : function(){return 'obj_isNaN';}, - isFinite : function(){return 'obj_isFinite';} -} -var del; -var st_p1 = "p1"; -var st_p2 = "p2"; -var st_p3 = "p3"; -var st_parseInt = "parseInt"; -var st_NaN = "NaN"; -var st_Infinity = "Infinity"; -var st_eval = "eval"; -var st_parseFloat = "parseFloat"; -var st_isNaN = "isNaN"; -var st_isFinite = "isFinite"; - -with(myObj){ - st_p1 = p1; - st_p2 = p2; - st_p3 = p3; - st_parseInt = parseInt; - st_NaN = NaN; - st_Infinity = Infinity; - st_eval = eval; - st_parseFloat = parseFloat; - st_isNaN = isNaN; - st_isFinite = isFinite; - p1 = 'x1'; - this.p2 = 'x2'; - del = delete p3; - var p4 = 'x4'; - p5 = 'x5'; - var value = 'value'; -} - -if(!(p1 === 1)){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} - -if(!(p2 === "x2")){ - $ERROR('#2: p2 === "x2". Actual: p2 ==='+ p2 ); -} - -if(!(p3 === 3)){ - $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 ); -} - -if(!(p4 === "x4")){ - $ERROR('#4: p4 === "x4". Actual: p4 ==='+ p4 ); -} - -if(!(p5 === "x5")){ - $ERROR('#5: p5 === "x5". Actual: p5 ==='+ p5 ); -} - -if(!(myObj.p1 === "x1")){ - $ERROR('#6: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 ); -} - -if(!(myObj.p2 === "b")){ - $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 ); -} - -if(!(myObj.p3 === undefined)){ - $ERROR('#8: myObj.p3 === undefined. Actual: myObj.p3 ==='+ myObj.p3 ); -} - -if(!(myObj.p4 === undefined)){ - $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 ); -} - -if(!(myObj.p5 === undefined)){ - $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 ); -} - -if(!(st_parseInt !== parseInt)){ - $ERROR('#11: myObj.parseInt !== parseInt'); -} - -if(!(st_NaN === "obj_NaN")){ - $ERROR('#12: myObj.NaN !== NaN'); -} - -if(!(st_Infinity !== Infinity)){ - $ERROR('#13: myObj.Infinity !== Infinity'); -} - -if(!(st_eval !== eval)){ - $ERROR('#14: myObj.eval !== eval'); -} - -if(!(st_parseFloat !== parseFloat)){ - $ERROR('#15: myObj.parseFloat !== parseFloat'); -} - -if(!(st_isNaN !== isNaN)){ - $ERROR('#16: myObj.isNaN !== isNaN'); -} - -if(!(st_isFinite !== isFinite)){ - $ERROR('#17: myObj.isFinite !== isFinite'); -} - -if(!(value === undefined)){ - $ERROR('#18: value === undefined. Actual: value ==='+ value ); -} - -if(!(myObj.value === "value")){ - $ERROR('#19: myObj.value === "value". Actual: myObj.value ==='+ myObj.value ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.1_T2.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.1_T2.js deleted file mode 100644 index e38546799..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.1_T2.js +++ /dev/null @@ -1,142 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A1.1_T2; - * @section: 12.10; - * @assertion: The with statement adds a computed object to the front of the - * scope chain of the current execution context; - * @description: Using "with" inside of global context leading to completion by exception; - */ -this.p1 = 1; -this.p2 = 2; -this.p3 = 3; -var result = "result"; -var myObj = {p1: 'a', - p2: 'b', - p3: 'c', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';}, - parseInt : function(){return 'obj_parseInt';}, - NaN : 'obj_NaN', - Infinity : 'obj_Infinity', - eval : function(){return 'obj_eval';}, - parseFloat : function(){return 'obj_parseFloat';}, - isNaN : function(){return 'obj_isNaN';}, - isFinite : function(){return 'obj_isFinite';} -} -var del; -var st_p1 = "p1"; -var st_p2 = "p2"; -var st_p3 = "p3"; -var st_parseInt = "parseInt"; -var st_NaN = "NaN"; -var st_Infinity = "Infinity"; -var st_eval = "eval"; -var st_parseFloat = "parseFloat"; -var st_isNaN = "isNaN"; -var st_isFinite = "isFinite"; - -try { - with(myObj){ - st_p1 = p1; - st_p2 = p2; - st_p3 = p3; - st_parseInt = parseInt; - st_NaN = NaN; - st_Infinity = Infinity; - st_eval = eval; - st_parseFloat = parseFloat; - st_isNaN = isNaN; - st_isFinite = isFinite; - p1 = 'x1'; - this.p2 = 'x2'; - del = delete p3; - var p4 = 'x4'; - p5 = 'x5'; - var value = 'value'; - throw value; - } -} catch(e){ - result = e; -} - -if(!(result === "value")){ - $ERROR('#0: result === "value". Actual: result ==='+ result ); -} - -if(!(p1 === 1)){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} - -if(!(p2 === "x2")){ - $ERROR('#2: p2 === "x2". Actual: p2 ==='+ p2 ); -} - -if(!(p3 === 3)){ - $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 ); -} - -if(!(p4 === "x4")){ - $ERROR('#4: p4 === "x4". Actual: p4 ==='+ p4 ); -} - -if(!(p5 === "x5")){ - $ERROR('#5: p5 === "x5". Actual: p5 ==='+ p5 ); -} - -if(!(myObj.p1 === "x1")){ - $ERROR('#6: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 ); -} - -if(!(myObj.p2 === "b")){ - $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 ); -} - -if(!(myObj.p3 === undefined)){ - $ERROR('#8: myObj.p3 === undefined. Actual: myObj.p3 ==='+ myObj.p3 ); -} - -if(!(myObj.p4 === undefined)){ - $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 ); -} - -if(!(myObj.p5 === undefined)){ - $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 ); -} - -if(!(st_parseInt !== parseInt)){ - $ERROR('#11: myObj.parseInt !== parseInt'); -} - -if(!(st_NaN === "obj_NaN")){ - $ERROR('#12: myObj.NaN !== NaN'); -} - -if(!(st_Infinity !== Infinity)){ - $ERROR('#13: myObj.Infinity !== Infinity'); -} - -if(!(st_eval !== eval)){ - $ERROR('#14: myObj.eval !== eval'); -} - -if(!(st_parseFloat !== parseFloat)){ - $ERROR('#15: myObj.parseFloat !== parseFloat'); -} - -if(!(st_isNaN !== isNaN)){ - $ERROR('#16: myObj.isNaN !== isNaN'); -} - -if(!(st_isFinite !== isFinite)){ - $ERROR('#17: myObj.isFinite !== isFinite'); -} - -if(!(value === undefined)){ - $ERROR('#18: value === undefined. Actual: value ==='+ value ); -} - -if(!(myObj.value === "value")){ - $ERROR('#19: myObj.value === "value". Actual: myObj.value ==='+ myObj.value ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.1_T3.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.1_T3.js deleted file mode 100644 index 6c90bda62..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.1_T3.js +++ /dev/null @@ -1,144 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A1.1_T3; - * @section: 12.10; - * @assertion: The with statement adds a computed object to the front of the - * scope chain of the current execution context; - * @description: Using "with" inside of global context leading to completion by exception; - */ -this.p1 = 1; -this.p2 = 2; -this.p3 = 3; -var result = "result"; -var myObj = {p1: 'a', - p2: 'b', - p3: 'c', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';}, - parseInt : function(){return 'obj_parseInt';}, - NaN : 'obj_NaN', - Infinity : 'obj_Infinity', - eval : function(){return 'obj_eval';}, - parseFloat : function(){return 'obj_parseFloat';}, - isNaN : function(){return 'obj_isNaN';}, - isFinite : function(){return 'obj_isFinite';} -} -var del; -var st_p1 = "p1"; -var st_p2 = "p2"; -var st_p3 = "p3"; -var st_parseInt = "parseInt"; -var st_NaN = "NaN"; -var st_Infinity = "Infinity"; -var st_eval = "eval"; -var st_parseFloat = "parseFloat"; -var st_isNaN = "isNaN"; -var st_isFinite = "isFinite"; - -try { - with(myObj){ - throw value; - st_p1 = p1; - st_p2 = p2; - st_p3 = p3; - st_parseInt = parseInt; - st_NaN = NaN; - st_Infinity = Infinity; - st_eval = eval; - st_parseFloat = parseFloat; - st_isNaN = isNaN; - st_isFinite = isFinite; - p1 = 'x1'; - this.p2 = 'x2'; - del = delete p3; - var p4 = 'x4'; - p5 = 'x5'; - var value = 'value'; - } -} catch(e){ - result = e; -} - -if(!(result === "myObj_value")){ - $ERROR('#0: result === "myObj_value". Actual: result ==='+ result ); -} - -if(!(p1 === 1)){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} - -if(!(p2 === 2)){ - $ERROR('#2: p2 === 2. Actual: p2 ==='+ p2 ); -} - -if(!(p3 === 3)){ - $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 ); -} - -if(!(p4 === undefined)){ - $ERROR('#4: p4 === undefined. Actual: p4 ==='+ p4 ); -} - -try { - p5; - $ERROR('#5: p5 is not defined'); -} catch(e) { -} - -if(!(myObj.p1 === "a")){ - $ERROR('#6: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 ); -} - -if(!(myObj.p2 === "b")){ - $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 ); -} - -if(!(myObj.p3 === "c")){ - $ERROR('#8: myObj.p3 === "c". Actual: myObj.p3 ==='+ myObj.p3 ); -} - -if(!(myObj.p4 === undefined)){ - $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 ); -} - -if(!(myObj.p5 === undefined)){ - $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 ); -} - -if(!(st_parseInt === "parseInt")){ - $ERROR('#11: myObj.parseInt === "parseInt". Actual: myObj.parseInt ==='+ myObj.parseInt ); -} - -if(!(st_NaN === "NaN")){ - $ERROR('#12: st_NaN === "NaN". Actual: st_NaN ==='+ st_NaN ); -} - -if(!(st_Infinity === "Infinity")){ - $ERROR('#13: st_Infinity === "Infinity". Actual: st_Infinity ==='+ st_Infinity ); -} - -if(!(st_eval === "eval")){ - $ERROR('#14: st_eval === "eval". Actual: st_eval ==='+ st_eval ); -} - -if(!(st_parseFloat === "parseFloat")){ - $ERROR('#15: st_parseFloat === "parseFloat". Actual: st_parseFloat ==='+ st_parseFloat ); -} - -if(!(st_isNaN === "isNaN")){ - $ERROR('#16: st_isNaN === "isNaN". Actual: st_isNaN ==='+ st_isNaN ); -} - -if(!(st_isFinite === "isFinite")){ - $ERROR('#17: st_isFinite === "isFinite". Actual: st_isFinite ==='+ st_isFinite ); -} - -if(!(value === undefined)){ - $ERROR('#18: value === undefined. Actual: value ==='+ value ); -} - -if(!(myObj.value === "myObj_value")){ - $ERROR('#19: myObj.value === "myObj_value". Actual: myObj.value ==='+ myObj.value ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.2_T1.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.2_T1.js deleted file mode 100644 index b846d65ec..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.2_T1.js +++ /dev/null @@ -1,141 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A1.2_T1; - * @section: 12.10; - * @assertion: The with statement adds a computed object to the front of the - * scope chain of the current execution context; - * @description: Calling a function without "with" statement when the statement itself is declared within the function declaration, leading to normal completion; - */ -this.p1 = 1; -this.p2 = 2; -this.p3 = 3; -var result = "result"; -var myObj = {p1: 'a', - p2: 'b', - p3: 'c', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';}, - parseInt : function(){return 'obj_parseInt';}, - NaN : 'obj_NaN', - Infinity : 'obj_Infinity', - eval : function(){return 'obj_eval';}, - parseFloat : function(){return 'obj_parseFloat';}, - isNaN : function(){return 'obj_isNaN';}, - isFinite : function(){return 'obj_isFinite';} -} -var del; -var st_p1 = "p1"; -var st_p2 = "p2"; -var st_p3 = "p3"; -var st_parseInt = "parseInt"; -var st_NaN = "NaN"; -var st_Infinity = "Infinity"; -var st_eval = "eval"; -var st_parseFloat = "parseFloat"; -var st_isNaN = "isNaN"; -var st_isFinite = "isFinite"; - -var f = function(){ - with(myObj){ - st_p1 = p1; - st_p2 = p2; - st_p3 = p3; - st_parseInt = parseInt; - st_NaN = NaN; - st_Infinity = Infinity; - st_eval = eval; - st_parseFloat = parseFloat; - st_isNaN = isNaN; - st_isFinite = isFinite; - p1 = 'x1'; - this.p2 = 'x2'; - del = delete p3; - var p4 = 'x4'; - p5 = 'x5'; - var value = 'value'; - } -} -f(); - -if(!(p1 === 1)){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} - -if(!(p2 === "x2")){ - $ERROR('#2: p2 === "x2". Actual: p2 ==='+ p2 ); -} - -if(!(p3 === 3)){ - $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 ); -} - -try { - p4; - $ERROR('#4: p4 is not defined'); -} catch(e) { -} - -if(!(p5 === "x5")){ - $ERROR('#5: p5 === "x5". Actual: p5 ==='+ p5 ); -} - -if(!(myObj.p1 === "x1")){ - $ERROR('#6: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 ); -} - -if(!(myObj.p2 === "b")){ - $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 ); -} - -if(!(myObj.p3 === undefined)){ - $ERROR('#8: myObj.p3 === undefined. Actual: myObj.p3 ==='+ myObj.p3 ); -} - -if(!(myObj.p4 === undefined)){ - $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 ); -} - -if(!(myObj.p5 === undefined)){ - $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 ); -} - -if(!(st_parseInt !== parseInt)){ - $ERROR('#11: myObj.parseInt !== parseInt'); -} - -if(!(st_NaN === "obj_NaN")){ - $ERROR('#12: myObj.NaN !== NaN'); -} - -if(!(st_Infinity !== Infinity)){ - $ERROR('#13: myObj.Infinity !== Infinity'); -} - -if(!(st_eval !== eval)){ - $ERROR('#14: myObj.eval !== eval'); -} - -if(!(st_parseFloat !== parseFloat)){ - $ERROR('#15: myObj.parseFloat !== parseFloat'); -} - -if(!(st_isNaN !== isNaN)){ - $ERROR('#16: myObj.isNaN !== isNaN'); -} - -if(!(st_isFinite !== isFinite)){ - $ERROR('#17: myObj.isFinite !== isFinite'); -} - -try{ - value; - $ERROR('#18: value is not defined'); -} -catch(e){ -} - -if(!(myObj.value === "value")){ - $ERROR('#19: myObj.value === "value". Actual: myObj.value ==='+ myObj.value ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.2_T2.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.2_T2.js deleted file mode 100644 index 25eab3157..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.2_T2.js +++ /dev/null @@ -1,146 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A1.2_T2; - * @section: 12.10; - * @assertion: The with statement adds a computed object to the front of the - * scope chain of the current execution context; - * @description: Calling a function without "with" statement when the statement itself is declared within the function declaration, leading to normal completion by "return"; - */ -this.p1 = 1; -this.p2 = 2; -this.p3 = 3; -var result = "result"; -var myObj = {p1: 'a', - p2: 'b', - p3: 'c', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';}, - parseInt : function(){return 'obj_parseInt';}, - NaN : 'obj_NaN', - Infinity : 'obj_Infinity', - eval : function(){return 'obj_eval';}, - parseFloat : function(){return 'obj_parseFloat';}, - isNaN : function(){return 'obj_isNaN';}, - isFinite : function(){return 'obj_isFinite';} -} -var del; -var st_p1 = "p1"; -var st_p2 = "p2"; -var st_p3 = "p3"; -var st_parseInt = "parseInt"; -var st_NaN = "NaN"; -var st_Infinity = "Infinity"; -var st_eval = "eval"; -var st_parseFloat = "parseFloat"; -var st_isNaN = "isNaN"; -var st_isFinite = "isFinite"; - -var f = function(){ - with(myObj){ - st_p1 = p1; - st_p2 = p2; - st_p3 = p3; - st_parseInt = parseInt; - st_NaN = NaN; - st_Infinity = Infinity; - st_eval = eval; - st_parseFloat = parseFloat; - st_isNaN = isNaN; - st_isFinite = isFinite; - p1 = 'x1'; - this.p2 = 'x2'; - del = delete p3; - var p4 = 'x4'; - p5 = 'x5'; - var value = 'value'; - return value; - } -} -result = f(); - -if(!(result === "value")){ - $ERROR('#0: result === "value". Actual: result ==='+ result ); -} - -if(!(p1 === 1)){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} - -if(!(p2 === "x2")){ - $ERROR('#2: p2 === "x2". Actual: p2 ==='+ p2 ); -} - -if(!(p3 === 3)){ - $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 ); -} - -try { - p4; - $ERROR('#4: p4 is not defined'); -} catch(e) { -} - -if(!(p5 === "x5")){ - $ERROR('#5: p5 === "x5". Actual: p5 ==='+ p5 ); -} - -if(!(myObj.p1 === "x1")){ - $ERROR('#6: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 ); -} - -if(!(myObj.p2 === "b")){ - $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 ); -} - -if(!(myObj.p3 === undefined)){ - $ERROR('#8: myObj.p3 === undefined. Actual: myObj.p3 ==='+ myObj.p3 ); -} - -if(!(myObj.p4 === undefined)){ - $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 ); -} - -if(!(myObj.p5 === undefined)){ - $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 ); -} - -if(!(st_parseInt !== parseInt)){ - $ERROR('#11: myObj.parseInt !== parseInt'); -} - -if(!(st_NaN === "obj_NaN")){ - $ERROR('#12: myObj.NaN !== NaN'); -} - -if(!(st_Infinity !== Infinity)){ - $ERROR('#13: myObj.Infinity !== Infinity'); -} - -if(!(st_eval !== eval)){ - $ERROR('#14: myObj.eval !== eval'); -} - -if(!(st_parseFloat !== parseFloat)){ - $ERROR('#15: myObj.parseFloat !== parseFloat'); -} - -if(!(st_isNaN !== isNaN)){ - $ERROR('#16: myObj.isNaN !== isNaN'); -} - -if(!(st_isFinite !== isFinite)){ - $ERROR('#17: myObj.isFinite !== isFinite'); -} - -try{ - value; - $ERROR('#18: value is not defined'); -} -catch(e){ -} - -if(!(myObj.value === "value")){ - $ERROR('#19: myObj.value === "value". Actual: myObj.value ==='+ myObj.value ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.2_T3.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.2_T3.js deleted file mode 100644 index f0a29e7e7..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.2_T3.js +++ /dev/null @@ -1,149 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A1.2_T3; - * @section: 12.10; - * @assertion: The with statement adds a computed object to the front of the - * scope chain of the current execution context; - * @description: Calling a function without "with" statement when the statement itself is declared within the function declaration, leading to normal completion by "return"; - */ -this.p1 = 1; -this.p2 = 2; -this.p3 = 3; -var result = "result"; -var myObj = {p1: 'a', - p2: 'b', - p3: 'c', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';}, - parseInt : function(){return 'obj_parseInt';}, - NaN : 'obj_NaN', - Infinity : 'obj_Infinity', - eval : function(){return 'obj_eval';}, - parseFloat : function(){return 'obj_parseFloat';}, - isNaN : function(){return 'obj_isNaN';}, - isFinite : function(){return 'obj_isFinite';} -} -var del; -var st_p1 = "p1"; -var st_p2 = "p2"; -var st_p3 = "p3"; -var st_parseInt = "parseInt"; -var st_NaN = "NaN"; -var st_Infinity = "Infinity"; -var st_eval = "eval"; -var st_parseFloat = "parseFloat"; -var st_isNaN = "isNaN"; -var st_isFinite = "isFinite"; - -var f = function(){ - with(myObj){ - return value; - st_p1 = p1; - st_p2 = p2; - st_p3 = p3; - st_parseInt = parseInt; - st_NaN = NaN; - st_Infinity = Infinity; - st_eval = eval; - st_parseFloat = parseFloat; - st_isNaN = isNaN; - st_isFinite = isFinite; - p1 = 'x1'; - this.p2 = 'x2'; - del = delete p3; - var p4 = 'x4'; - p5 = 'x5'; - var value = 'value'; - } -} -result = f(); - -if(!(result === "myObj_value")){ - $ERROR('#0: result === "myObj_value". Actual: result ==='+ result ); -} - -if(!(p1 === 1)){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} - -if(!(p2 === 2)){ - $ERROR('#2: p2 === 2. Actual: p2 ==='+ p2 ); -} - -if(!(p3 === 3)){ - $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 ); -} - -try { - p4; - $ERROR('#4: p4 is not defined'); -} catch(e) { -} - -try { - p5; - $ERROR('#5: p5 is not defined'); -} catch(e) { -} - -if(!(myObj.p1 === "a")){ - $ERROR('#6: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 ); -} - -if(!(myObj.p2 === "b")){ - $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 ); -} - -if(!(myObj.p3 === "c")){ - $ERROR('#8: myObj.p3 === "c". Actual: myObj.p3 ==='+ myObj.p3 ); -} - -if(!(myObj.p4 === undefined)){ - $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 ); -} - -if(!(myObj.p5 === undefined)){ - $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 ); -} - -if(!(st_parseInt === "parseInt")){ - $ERROR('#11: myObj.parseInt === "parseInt". Actual: myObj.parseInt ==='+ myObj.parseInt ); -} - -if(!(st_NaN === "NaN")){ - $ERROR('#12: st_NaN === "NaN". Actual: st_NaN ==='+ st_NaN ); -} - -if(!(st_Infinity === "Infinity")){ - $ERROR('#13: st_Infinity === "Infinity". Actual: st_Infinity ==='+ st_Infinity ); -} - -if(!(st_eval === "eval")){ - $ERROR('#14: st_eval === "eval". Actual: st_eval ==='+ st_eval ); -} - -if(!(st_parseFloat === "parseFloat")){ - $ERROR('#15: st_parseFloat === "parseFloat". Actual: st_parseFloat ==='+ st_parseFloat ); -} - -if(!(st_isNaN === "isNaN")){ - $ERROR('#16: st_isNaN === "isNaN". Actual: st_isNaN ==='+ st_isNaN ); -} - -if(!(st_isFinite === "isFinite")){ - $ERROR('#17: st_isFinite === "isFinite". Actual: st_isFinite ==='+ st_isFinite ); -} - -try{ - value; - $ERROR('#18: value is not defined'); -} -catch(e){ -} - -if(!(myObj.value === "myObj_value")){ - $ERROR('#19: myObj.value === "myObj_value". Actual: myObj.value ==='+ myObj.value ); -} - diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.2_T4.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.2_T4.js deleted file mode 100644 index d554200cf..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.2_T4.js +++ /dev/null @@ -1,150 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A1.2_T4; - * @section: 12.10; - * @assertion: The with statement adds a computed object to the front of the - * scope chain of the current execution context; - * @description: Calling a function without "with" statement when the statement itself is declared within the function declaration, leading to completion by exception; - */ -this.p1 = 1; -this.p2 = 2; -this.p3 = 3; -var result = "result"; -var myObj = {p1: 'a', - p2: 'b', - p3: 'c', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';}, - parseInt : function(){return 'obj_parseInt';}, - NaN : 'obj_NaN', - Infinity : 'obj_Infinity', - eval : function(){return 'obj_eval';}, - parseFloat : function(){return 'obj_parseFloat';}, - isNaN : function(){return 'obj_isNaN';}, - isFinite : function(){return 'obj_isFinite';} -} -var del; -var st_p1 = "p1"; -var st_p2 = "p2"; -var st_p3 = "p3"; -var st_parseInt = "parseInt"; -var st_NaN = "NaN"; -var st_Infinity = "Infinity"; -var st_eval = "eval"; -var st_parseFloat = "parseFloat"; -var st_isNaN = "isNaN"; -var st_isFinite = "isFinite"; - -try { - var f = function(){ - with(myObj){ - st_p1 = p1; - st_p2 = p2; - st_p3 = p3; - st_parseInt = parseInt; - st_NaN = NaN; - st_Infinity = Infinity; - st_eval = eval; - st_parseFloat = parseFloat; - st_isNaN = isNaN; - st_isFinite = isFinite; - p1 = 'x1'; - this.p2 = 'x2'; - del = delete p3; - var p4 = 'x4'; - p5 = 'x5'; - var value = 'value'; - throw value; - } - } - f(); -} catch(e){ - result = e; -} - -if(!(result === "value")){ - $ERROR('#0: result === "value". Actual: result ==='+ result ); -} - -if(!(p1 === 1)){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} - -if(!(p2 === "x2")){ - $ERROR('#2: p2 === "x2". Actual: p2 ==='+ p2 ); -} - -if(!(p3 === 3)){ - $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 ); -} - -try { - p4; - $ERROR('#4: p4 is not defined'); -} catch(e) { -} - -if(!(p5 === "x5")){ - $ERROR('#5: p5 === "x5". Actual: p5 ==='+ p5 ); -} - -if(!(myObj.p1 === "x1")){ - $ERROR('#6: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 ); -} - -if(!(myObj.p2 === "b")){ - $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 ); -} - -if(!(myObj.p3 === undefined)){ - $ERROR('#8: myObj.p3 === undefined. Actual: myObj.p3 ==='+ myObj.p3 ); -} - -if(!(myObj.p4 === undefined)){ - $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 ); -} - -if(!(myObj.p5 === undefined)){ - $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 ); -} - -if(!(st_parseInt !== parseInt)){ - $ERROR('#11: myObj.parseInt !== parseInt'); -} - -if(!(st_NaN === "obj_NaN")){ - $ERROR('#12: myObj.NaN !== NaN'); -} - -if(!(st_Infinity !== Infinity)){ - $ERROR('#13: myObj.Infinity !== Infinity'); -} - -if(!(st_eval !== eval)){ - $ERROR('#14: myObj.eval !== eval'); -} - -if(!(st_parseFloat !== parseFloat)){ - $ERROR('#15: myObj.parseFloat !== parseFloat'); -} - -if(!(st_isNaN !== isNaN)){ - $ERROR('#16: myObj.isNaN !== isNaN'); -} - -if(!(st_isFinite !== isFinite)){ - $ERROR('#17: myObj.isFinite !== isFinite'); -} - -try{ - value; - $ERROR('#18: value is not defined'); -} -catch(e){ -} - -if(!(myObj.value === "value")){ - $ERROR('#19: myObj.value === "value". Actual: myObj.value ==='+ myObj.value ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.2_T5.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.2_T5.js deleted file mode 100644 index dea5e7afb..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.2_T5.js +++ /dev/null @@ -1,148 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A1.2_T5; - * @section: 12.10; - * @assertion: The with statement adds a computed object to the front of the - * scope chain of the current execution context; - * @description: Calling a function without "with" statement when the statement itself is declared within the function declaration, leading to completion by exception; - */ -this.p1 = 1; -this.p2 = 2; -this.p3 = 3; -var result = "result"; -var myObj = {p1: 'a', - p2: 'b', - p3: 'c', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';}, - parseInt : function(){return 'obj_parseInt';}, - NaN : 'obj_NaN', - Infinity : 'obj_Infinity', - eval : function(){return 'obj_eval';}, - parseFloat : function(){return 'obj_parseFloat';}, - isNaN : function(){return 'obj_isNaN';}, - isFinite : function(){return 'obj_isFinite';} -} -var del; -var st_p1 = "p1"; -var st_p2 = "p2"; -var st_p3 = "p3"; -var st_parseInt = "parseInt"; -var st_NaN = "NaN"; -var st_Infinity = "Infinity"; -var st_eval = "eval"; -var st_parseFloat = "parseFloat"; -var st_isNaN = "isNaN"; -var st_isFinite = "isFinite"; - -try { - var f = function(){ - with(myObj){ - throw value; - st_p1 = p1; - st_p2 = p2; - st_p3 = p3; - st_parseInt = parseInt; - st_NaN = NaN; - st_Infinity = Infinity; - st_eval = eval; - st_parseFloat = parseFloat; - st_isNaN = isNaN; - st_isFinite = isFinite; - p1 = 'x1'; - this.p2 = 'x2'; - del = delete p3; - var p4 = 'x4'; - p5 = 'x5'; - var value = 'value'; - } - } - f(); -} catch(e){ - result = e; -} - -if(!(result === "myObj_value")){ - $ERROR('#0: result === "myObj_value". Actual: result ==='+ result ); -} - -if(!(p2 === 2)){ - $ERROR('#2: p2 === 2. Actual: p2 ==='+ p2 ); -} - -if(!(p3 === 3)){ - $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 ); -} - -try { - p4; - $ERROR('#4: p4 is not defined'); -} catch(e) { -} - -try { - p5; - $ERROR('#5: p5 is not defined'); -} catch(e) { -} - -if(!(myObj.p1 === "a")){ - $ERROR('#6: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 ); -} - -if(!(myObj.p2 === "b")){ - $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 ); -} - -if(!(myObj.p3 === "c")){ - $ERROR('#8: myObj.p3 === "c". Actual: myObj.p3 ==='+ myObj.p3 ); -} - -if(!(myObj.p4 === undefined)){ - $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 ); -} - -if(!(myObj.p5 === undefined)){ - $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 ); -} - -if(!(st_parseInt === "parseInt")){ - $ERROR('#11: myObj.parseInt === "parseInt". Actual: myObj.parseInt ==='+ myObj.parseInt ); -} - -if(!(st_NaN === "NaN")){ - $ERROR('#12: st_NaN === "NaN". Actual: st_NaN ==='+ st_NaN ); -} - -if(!(st_Infinity === "Infinity")){ - $ERROR('#13: st_Infinity === "Infinity". Actual: st_Infinity ==='+ st_Infinity ); -} - -if(!(st_eval === "eval")){ - $ERROR('#14: st_eval === "eval". Actual: st_eval ==='+ st_eval ); -} - -if(!(st_parseFloat === "parseFloat")){ - $ERROR('#15: st_parseFloat === "parseFloat". Actual: st_parseFloat ==='+ st_parseFloat ); -} - -if(!(st_isNaN === "isNaN")){ - $ERROR('#16: st_isNaN === "isNaN". Actual: st_isNaN ==='+ st_isNaN ); -} - -if(!(st_isFinite === "isFinite")){ - $ERROR('#17: st_isFinite === "isFinite". Actual: st_isFinite ==='+ st_isFinite ); -} - -try{ - value; - $ERROR('#18: value is not defined'); -} -catch(e){ -} - -if(!(myObj.value === "myObj_value")){ - $ERROR('#19: myObj.value === "myObj_value". Actual: myObj.value ==='+ myObj.value ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.3_T1.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.3_T1.js deleted file mode 100644 index 4ad525b6f..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.3_T1.js +++ /dev/null @@ -1,141 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A1.3_T1; - * @section: 12.10; - * @assertion: The with statement adds a computed object to the front of the - * scope chain of the current execution context; - * @description: Using "with" statement within function constructor, leading to normal completition; - */ -this.p1 = 1; -this.p2 = 2; -this.p3 = 3; -var result = "result"; -var myObj = {p1: 'a', - p2: 'b', - p3: 'c', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';}, - parseInt : function(){return 'obj_parseInt';}, - NaN : 'obj_NaN', - Infinity : 'obj_Infinity', - eval : function(){return 'obj_eval';}, - parseFloat : function(){return 'obj_parseFloat';}, - isNaN : function(){return 'obj_isNaN';}, - isFinite : function(){return 'obj_isFinite';} -} -var del; -var st_p1 = "p1"; -var st_p2 = "p2"; -var st_p3 = "p3"; -var st_parseInt = "parseInt"; -var st_NaN = "NaN"; -var st_Infinity = "Infinity"; -var st_eval = "eval"; -var st_parseFloat = "parseFloat"; -var st_isNaN = "isNaN"; -var st_isFinite = "isFinite"; - -var f = function(){ - with(myObj){ - st_p1 = p1; - st_p2 = p2; - st_p3 = p3; - st_parseInt = parseInt; - st_NaN = NaN; - st_Infinity = Infinity; - st_eval = eval; - st_parseFloat = parseFloat; - st_isNaN = isNaN; - st_isFinite = isFinite; - p1 = 'x1'; - this.p2 = 'x2'; - del = delete p3; - var p4 = 'x4'; - p5 = 'x5'; - var value = 'value'; - } -} -var obj = new f(); - -if(!(p1 === 1)){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} - -if(!(p2 === 2)){ - $ERROR('#2: p2 === 2. Actual: p2 ==='+ p2 ); -} - -if(!(p3 === 3)){ - $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 ); -} - -try { - p4; - $ERROR('#4: p4 is not defined'); -} catch(e) { -} - -if(!(p5 === "x5")){ - $ERROR('#5: p5 === "x5". Actual: p5 ==='+ p5 ); -} - -if(!(myObj.p1 === "x1")){ - $ERROR('#6: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 ); -} - -if(!(myObj.p2 === "b")){ - $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 ); -} - -if(!(myObj.p3 === undefined)){ - $ERROR('#8: myObj.p3 === undefined. Actual: myObj.p3 ==='+ myObj.p3 ); -} - -if(!(myObj.p4 === undefined)){ - $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 ); -} - -if(!(myObj.p5 === undefined)){ - $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 ); -} - -if(!(st_parseInt !== parseInt)){ - $ERROR('#11: myObj.parseInt !== parseInt'); -} - -if(!(st_NaN === "obj_NaN")){ - $ERROR('#12: myObj.NaN !== NaN'); -} - -if(!(st_Infinity !== Infinity)){ - $ERROR('#13: myObj.Infinity !== Infinity'); -} - -if(!(st_eval !== eval)){ - $ERROR('#14: myObj.eval !== eval'); -} - -if(!(st_parseFloat !== parseFloat)){ - $ERROR('#15: myObj.parseFloat !== parseFloat'); -} - -if(!(st_isNaN !== isNaN)){ - $ERROR('#16: myObj.isNaN !== isNaN'); -} - -if(!(st_isFinite !== isFinite)){ - $ERROR('#17: myObj.isFinite !== isFinite'); -} - -try{ - value; - $ERROR('#18: value is not defined'); -} -catch(e){ -} - -if(!(myObj.value === "value")){ - $ERROR('#19: myObj.value === "value". Actual: myObj.value ==='+ myObj.value ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.3_T2.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.3_T2.js deleted file mode 100644 index 1cecb769d..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.3_T2.js +++ /dev/null @@ -1,142 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A1.3_T2; - * @section: 12.10; - * @assertion: The with statement adds a computed object to the front of the - * scope chain of the current execution context; - * @description: Using "with" statement within function constructor, leading to normal completition by "return"; - */ -this.p1 = 1; -this.p2 = 2; -this.p3 = 3; -var result = "result"; -var myObj = {p1: 'a', - p2: 'b', - p3: 'c', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';}, - parseInt : function(){return 'obj_parseInt';}, - NaN : 'obj_NaN', - Infinity : 'obj_Infinity', - eval : function(){return 'obj_eval';}, - parseFloat : function(){return 'obj_parseFloat';}, - isNaN : function(){return 'obj_isNaN';}, - isFinite : function(){return 'obj_isFinite';} -} -var del; -var st_p1 = "p1"; -var st_p2 = "p2"; -var st_p3 = "p3"; -var st_parseInt = "parseInt"; -var st_NaN = "NaN"; -var st_Infinity = "Infinity"; -var st_eval = "eval"; -var st_parseFloat = "parseFloat"; -var st_isNaN = "isNaN"; -var st_isFinite = "isFinite"; - -var f = function(){ - with(myObj){ - st_p1 = p1; - st_p2 = p2; - st_p3 = p3; - st_parseInt = parseInt; - st_NaN = NaN; - st_Infinity = Infinity; - st_eval = eval; - st_parseFloat = parseFloat; - st_isNaN = isNaN; - st_isFinite = isFinite; - p1 = 'x1'; - this.p2 = 'x2'; - del = delete p3; - var p4 = 'x4'; - p5 = 'x5'; - var value = 'value'; - return value; - } -} -var obj = new f(); - -if(!(p1 === 1)){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} - -if(!(p2 === 2)){ - $ERROR('#2: p2 === 2. Actual: p2 ==='+ p2 ); -} - -if(!(p3 === 3)){ - $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 ); -} - -try { - p4; - $ERROR('#4: p4 is not defined'); -} catch(e) { -} - -if(!(p5 === "x5")){ - $ERROR('#5: p5 === "x5". Actual: p5 ==='+ p5 ); -} - -if(!(myObj.p1 === "x1")){ - $ERROR('#6: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 ); -} - -if(!(myObj.p2 === "b")){ - $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 ); -} - -if(!(myObj.p3 === undefined)){ - $ERROR('#8: myObj.p3 === undefined. Actual: myObj.p3 ==='+ myObj.p3 ); -} - -if(!(myObj.p4 === undefined)){ - $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 ); -} - -if(!(myObj.p5 === undefined)){ - $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 ); -} - -if(!(st_parseInt !== parseInt)){ - $ERROR('#11: myObj.parseInt !== parseInt'); -} - -if(!(st_NaN === "obj_NaN")){ - $ERROR('#12: myObj.NaN !== NaN'); -} - -if(!(st_Infinity !== Infinity)){ - $ERROR('#13: myObj.Infinity !== Infinity'); -} - -if(!(st_eval !== eval)){ - $ERROR('#14: myObj.eval !== eval'); -} - -if(!(st_parseFloat !== parseFloat)){ - $ERROR('#15: myObj.parseFloat !== parseFloat'); -} - -if(!(st_isNaN !== isNaN)){ - $ERROR('#16: myObj.isNaN !== isNaN'); -} - -if(!(st_isFinite !== isFinite)){ - $ERROR('#17: myObj.isFinite !== isFinite'); -} - -try{ - value; - $ERROR('#18: value is not defined'); -} -catch(e){ -} - -if(!(myObj.value === "value")){ - $ERROR('#19: myObj.value === "value". Actual: myObj.value ==='+ myObj.value ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.3_T3.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.3_T3.js deleted file mode 100644 index 786ac38ef..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.3_T3.js +++ /dev/null @@ -1,145 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A1.3_T3; - * @section: 12.10; - * @assertion: The with statement adds a computed object to the front of the - * scope chain of the current execution context; - * @description: Using "with" statement within function constructor, leading to normal completition by "return"; - */ -this.p1 = 1; -this.p2 = 2; -this.p3 = 3; -var result = "result"; -var myObj = {p1: 'a', - p2: 'b', - p3: 'c', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';}, - parseInt : function(){return 'obj_parseInt';}, - NaN : 'obj_NaN', - Infinity : 'obj_Infinity', - eval : function(){return 'obj_eval';}, - parseFloat : function(){return 'obj_parseFloat';}, - isNaN : function(){return 'obj_isNaN';}, - isFinite : function(){return 'obj_isFinite';} -} -var del; -var st_p1 = "p1"; -var st_p2 = "p2"; -var st_p3 = "p3"; -var st_parseInt = "parseInt"; -var st_NaN = "NaN"; -var st_Infinity = "Infinity"; -var st_eval = "eval"; -var st_parseFloat = "parseFloat"; -var st_isNaN = "isNaN"; -var st_isFinite = "isFinite"; - -var f = function(){ - with(myObj){ - return value; - st_p1 = p1; - st_p2 = p2; - st_p3 = p3; - st_parseInt = parseInt; - st_NaN = NaN; - st_Infinity = Infinity; - st_eval = eval; - st_parseFloat = parseFloat; - st_isNaN = isNaN; - st_isFinite = isFinite; - p1 = 'x1'; - this.p2 = 'x2'; - del = delete p3; - var p4 = 'x4'; - p5 = 'x5'; - var value = 'value'; - } -} -var obj = new f(); - -if(!(p1 === 1)){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} - -if(!(p2 === 2)){ - $ERROR('#2: p2 === 2. Actual: p2 ==='+ p2 ); -} - -if(!(p3 === 3)){ - $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 ); -} - -try { - p4; - $ERROR('#4: p4 is not defined'); -} catch(e) { -} - -try { - p5; - $ERROR('#5: p5 is not defined'); -} catch(e) { -} - -if(!(myObj.p1 === "a")){ - $ERROR('#6: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 ); -} - -if(!(myObj.p2 === "b")){ - $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 ); -} - -if(!(myObj.p3 === "c")){ - $ERROR('#8: myObj.p3 === "c". Actual: myObj.p3 ==='+ myObj.p3 ); -} - -if(!(myObj.p4 === undefined)){ - $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 ); -} - -if(!(myObj.p5 === undefined)){ - $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 ); -} - -if(!(st_parseInt === "parseInt")){ - $ERROR('#11: myObj.parseInt === "parseInt". Actual: myObj.parseInt ==='+ myObj.parseInt ); -} - -if(!(st_NaN === "NaN")){ - $ERROR('#12: st_NaN === "NaN". Actual: st_NaN ==='+ st_NaN ); -} - -if(!(st_Infinity === "Infinity")){ - $ERROR('#13: st_Infinity === "Infinity". Actual: st_Infinity ==='+ st_Infinity ); -} - -if(!(st_eval === "eval")){ - $ERROR('#14: st_eval === "eval". Actual: st_eval ==='+ st_eval ); -} - -if(!(st_parseFloat === "parseFloat")){ - $ERROR('#15: st_parseFloat === "parseFloat". Actual: st_parseFloat ==='+ st_parseFloat ); -} - -if(!(st_isNaN === "isNaN")){ - $ERROR('#16: st_isNaN === "isNaN". Actual: st_isNaN ==='+ st_isNaN ); -} - -if(!(st_isFinite === "isFinite")){ - $ERROR('#17: st_isFinite === "isFinite". Actual: st_isFinite ==='+ st_isFinite ); -} - -try{ - value; - $ERROR('#18: value is not defined'); -} -catch(e){ -} - -if(!(myObj.value === "myObj_value")){ - $ERROR('#19: myObj.value === "myObj_value". Actual: myObj.value ==='+ myObj.value ); -} - diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.3_T4.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.3_T4.js deleted file mode 100644 index 45c8c7028..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.3_T4.js +++ /dev/null @@ -1,146 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A1.3_T4; - * @section: 12.10; - * @assertion: The with statement adds a computed object to the front of the - * scope chain of the current execution context; - * @description: Using "with" statement within function constructor, leading to completition by exception; - */ -this.p1 = 1; -this.p2 = 2; -this.p3 = 3; -var result = "result"; -var myObj = {p1: 'a', - p2: 'b', - p3: 'c', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';}, - parseInt : function(){return 'obj_parseInt';}, - NaN : 'obj_NaN', - Infinity : 'obj_Infinity', - eval : function(){return 'obj_eval';}, - parseFloat : function(){return 'obj_parseFloat';}, - isNaN : function(){return 'obj_isNaN';}, - isFinite : function(){return 'obj_isFinite';} -} -var del; -var st_p1 = "p1"; -var st_p2 = "p2"; -var st_p3 = "p3"; -var st_parseInt = "parseInt"; -var st_NaN = "NaN"; -var st_Infinity = "Infinity"; -var st_eval = "eval"; -var st_parseFloat = "parseFloat"; -var st_isNaN = "isNaN"; -var st_isFinite = "isFinite"; - -try { - var f = function(){ - with(myObj){ - st_p1 = p1; - st_p2 = p2; - st_p3 = p3; - st_parseInt = parseInt; - st_NaN = NaN; - st_Infinity = Infinity; - st_eval = eval; - st_parseFloat = parseFloat; - st_isNaN = isNaN; - st_isFinite = isFinite; - p1 = 'x1'; - this.p2 = 'x2'; - del = delete p3; - var p4 = 'x4'; - p5 = 'x5'; - var value = 'value'; - throw value; - } - } - var obj = new f(); -} catch(e){ - result = e; -} - -if(!(result === "value")){ - $ERROR('#0: result === "value". Actual: result ==='+ result ); -} - -if(!(p1 === 1)){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} - -if(!(p2 === 2)){ - $ERROR('#2: p2 === 2. Actual: p2 ==='+ p2 ); -} - -try { - p4; - $ERROR('#4: p4 is not defined'); -} catch(e) { -} - -if(!(p5 === "x5")){ - $ERROR('#5: p5 === "x5". Actual: p5 ==='+ p5 ); -} - -if(!(myObj.p1 === "x1")){ - $ERROR('#6: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 ); -} - -if(!(myObj.p2 === "b")){ - $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 ); -} - -if(!(myObj.p3 === undefined)){ - $ERROR('#8: myObj.p3 === undefined. Actual: myObj.p3 ==='+ myObj.p3 ); -} - -if(!(myObj.p4 === undefined)){ - $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 ); -} - -if(!(myObj.p5 === undefined)){ - $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 ); -} - -if(!(st_parseInt !== parseInt)){ - $ERROR('#11: myObj.parseInt !== parseInt'); -} - -if(!(st_NaN === "obj_NaN")){ - $ERROR('#12: myObj.NaN !== NaN'); -} - -if(!(st_Infinity !== Infinity)){ - $ERROR('#13: myObj.Infinity !== Infinity'); -} - -if(!(st_eval !== eval)){ - $ERROR('#14: myObj.eval !== eval'); -} - -if(!(st_parseFloat !== parseFloat)){ - $ERROR('#15: myObj.parseFloat !== parseFloat'); -} - -if(!(st_isNaN !== isNaN)){ - $ERROR('#16: myObj.isNaN !== isNaN'); -} - -if(!(st_isFinite !== isFinite)){ - $ERROR('#17: myObj.isFinite !== isFinite'); -} - -try{ - value; - $ERROR('#18: value is not defined'); -} -catch(e){ -} - -if(!(myObj.value === "value")){ - $ERROR('#19: myObj.value === "value". Actual: myObj.value ==='+ myObj.value ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.3_T5.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.3_T5.js deleted file mode 100644 index be63a80df..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.3_T5.js +++ /dev/null @@ -1,153 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A1.3_T5; - * @section: 12.10; - * @assertion: The with statement adds a computed object to the front of the - * scope chain of the current execution context; - * @description: Using "with" statement within function constructor, leading to completition by exception; - */ -this.p1 = 1; -this.p2 = 2; -this.p3 = 3; -var result = "result"; -var myObj = {p1: 'a', - p2: 'b', - p3: 'c', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';}, - parseInt : function(){return 'obj_parseInt';}, - NaN : 'obj_NaN', - Infinity : 'obj_Infinity', - eval : function(){return 'obj_eval';}, - parseFloat : function(){return 'obj_parseFloat';}, - isNaN : function(){return 'obj_isNaN';}, - isFinite : function(){return 'obj_isFinite';} -} -var del; -var st_p1 = "p1"; -var st_p2 = "p2"; -var st_p3 = "p3"; -var st_parseInt = "parseInt"; -var st_NaN = "NaN"; -var st_Infinity = "Infinity"; -var st_eval = "eval"; -var st_parseFloat = "parseFloat"; -var st_isNaN = "isNaN"; -var st_isFinite = "isFinite"; - -try { - var f = function(){ - with(myObj){ - throw value; - st_p1 = p1; - st_p2 = p2; - st_p3 = p3; - st_parseInt = parseInt; - st_NaN = NaN; - st_Infinity = Infinity; - st_eval = eval; - st_parseFloat = parseFloat; - st_isNaN = isNaN; - st_isFinite = isFinite; - p1 = 'x1'; - this.p2 = 'x2'; - del = delete p3; - var p4 = 'x4'; - p5 = 'x5'; - var value = 'value'; - } - } - var obj = new f(); -} catch(e){ - result = e; -} - -if(!(result === "myObj_value")){ - $ERROR('#0: result === "myObj_value". Actual: result ==='+ result ); -} - -if(!(p1 === 1)){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} - -if(!(p2 === 2)){ - $ERROR('#2: p2 === 2. Actual: p2 ==='+ p2 ); -} - -if(!(p3 === 3)){ - $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 ); -} - -try { - p4; - $ERROR('#4: p4 is not defined'); -} catch(e) { -} - -try { - p5; - $ERROR('#5: p5 is not defined'); -} catch(e) { -} - -if(!(myObj.p1 === "a")){ - $ERROR('#6: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 ); -} - -if(!(myObj.p2 === "b")){ - $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 ); -} - -if(!(myObj.p3 === "c")){ - $ERROR('#8: myObj.p3 === "c". Actual: myObj.p3 ==='+ myObj.p3 ); -} - -if(!(myObj.p4 === undefined)){ - $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 ); -} - -if(!(myObj.p5 === undefined)){ - $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 ); -} - -if(!(st_parseInt === "parseInt")){ - $ERROR('#11: myObj.parseInt === "parseInt". Actual: myObj.parseInt ==='+ myObj.parseInt ); -} - -if(!(st_NaN === "NaN")){ - $ERROR('#12: st_NaN === "NaN". Actual: st_NaN ==='+ st_NaN ); -} - -if(!(st_Infinity === "Infinity")){ - $ERROR('#13: st_Infinity === "Infinity". Actual: st_Infinity ==='+ st_Infinity ); -} - -if(!(st_eval === "eval")){ - $ERROR('#14: st_eval === "eval". Actual: st_eval ==='+ st_eval ); -} - -if(!(st_parseFloat === "parseFloat")){ - $ERROR('#15: st_parseFloat === "parseFloat". Actual: st_parseFloat ==='+ st_parseFloat ); -} - -if(!(st_isNaN === "isNaN")){ - $ERROR('#16: st_isNaN === "isNaN". Actual: st_isNaN ==='+ st_isNaN ); -} - -if(!(st_isFinite === "isFinite")){ - $ERROR('#17: st_isFinite === "isFinite". Actual: st_isFinite ==='+ st_isFinite ); -} - -try{ - value; - $ERROR('#18: value is not defined'); -} -catch(e){ -} - -if(!(myObj.value === "myObj_value")){ - $ERROR('#19: myObj.value === "myObj_value". Actual: myObj.value ==='+ myObj.value ); -} - diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.4_T1.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.4_T1.js deleted file mode 100644 index 0ceda3c4c..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.4_T1.js +++ /dev/null @@ -1,136 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A1.4_T1; - * @section: 12.10; - * @assertion: The with statement adds a computed object to the front of the - * scope chain of the current execution context; - * @description: Using "with" statement within iteration statement, leading to normal completion; - */ -this.p1 = 1; -this.p2 = 2; -this.p3 = 3; -var result = "result"; -var myObj = {p1: 'a', - p2: 'b', - p3: 'c', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';}, - parseInt : function(){return 'obj_parseInt';}, - NaN : 'obj_NaN', - Infinity : 'obj_Infinity', - eval : function(){return 'obj_eval';}, - parseFloat : function(){return 'obj_parseFloat';}, - isNaN : function(){return 'obj_isNaN';}, - isFinite : function(){return 'obj_isFinite';} -} -var del; -var st_p1 = "p1"; -var st_p2 = "p2"; -var st_p3 = "p3"; -var st_parseInt = "parseInt"; -var st_NaN = "NaN"; -var st_Infinity = "Infinity"; -var st_eval = "eval"; -var st_parseFloat = "parseFloat"; -var st_isNaN = "isNaN"; -var st_isFinite = "isFinite"; - -do{ - with(myObj){ - st_p1 = p1; - st_p2 = p2; - st_p3 = p3; - st_parseInt = parseInt; - st_NaN = NaN; - st_Infinity = Infinity; - st_eval = eval; - st_parseFloat = parseFloat; - st_isNaN = isNaN; - st_isFinite = isFinite; - p1 = 'x1'; - this.p2 = 'x2'; - del = delete p3; - var p4 = 'x4'; - p5 = 'x5'; - var value = 'value'; - } -} -while(false); - -if(!(p1 === 1)){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} - -if(!(p2 === "x2")){ - $ERROR('#2: p2 === "x2". Actual: p2 ==='+ p2 ); -} - -if(!(p3 === 3)){ - $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 ); -} - -if(!(p4 === "x4")){ - $ERROR('#4: p4 === "x4". Actual: p4 ==='+ p4 ); -} - -if(!(p5 === "x5")){ - $ERROR('#5: p5 === "x5". Actual: p5 ==='+ p5 ); -} - -if(!(myObj.p1 === "x1")){ - $ERROR('#6: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 ); -} - -if(!(myObj.p2 === "b")){ - $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 ); -} - -if(!(myObj.p3 === undefined)){ - $ERROR('#8: myObj.p3 === undefined. Actual: myObj.p3 ==='+ myObj.p3 ); -} - -if(!(myObj.p4 === undefined)){ - $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 ); -} - -if(!(myObj.p5 === undefined)){ - $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 ); -} - -if(!(st_parseInt !== parseInt)){ - $ERROR('#11: myObj.parseInt !== parseInt'); -} - -if(!(st_NaN === "obj_NaN")){ - $ERROR('#12: myObj.NaN !== NaN'); -} - -if(!(st_Infinity !== Infinity)){ - $ERROR('#13: myObj.Infinity !== Infinity'); -} - -if(!(st_eval !== eval)){ - $ERROR('#14: myObj.eval !== eval'); -} - -if(!(st_parseFloat !== parseFloat)){ - $ERROR('#15: myObj.parseFloat !== parseFloat'); -} - -if(!(st_isNaN !== isNaN)){ - $ERROR('#16: myObj.isNaN !== isNaN'); -} - -if(!(st_isFinite !== isFinite)){ - $ERROR('#17: myObj.isFinite !== isFinite'); -} - -if(!(value === undefined)){ - $ERROR('#18: value === undefined. Actual: value ==='+ value ); -} - -if(!(myObj.value === "value")){ - $ERROR('#19: myObj.value === "value". Actual: myObj.value ==='+ myObj.value ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.4_T2.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.4_T2.js deleted file mode 100644 index 191bdba0a..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.4_T2.js +++ /dev/null @@ -1,145 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A1.4_T2; - * @section: 12.10; - * @assertion: The with statement adds a computed object to the front of the - * scope chain of the current execution context; - * @description: Using "with" statement within iteration statement, leading to completion by exception; - */ -this.p1 = 1; -this.p2 = 2; -this.p3 = 3; -var result = "result"; -var myObj = {p1: 'a', - p2: 'b', - p3: 'c', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';}, - parseInt : function(){return 'obj_parseInt';}, - NaN : 'obj_NaN', - Infinity : 'obj_Infinity', - eval : function(){return 'obj_eval';}, - parseFloat : function(){return 'obj_parseFloat';}, - isNaN : function(){return 'obj_isNaN';}, - isFinite : function(){return 'obj_isFinite';} -} -var del; -var st_p1 = "p1"; -var st_p2 = "p2"; -var st_p3 = "p3"; -var st_parseInt = "parseInt"; -var st_NaN = "NaN"; -var st_Infinity = "Infinity"; -var st_eval = "eval"; -var st_parseFloat = "parseFloat"; -var st_isNaN = "isNaN"; -var st_isFinite = "isFinite"; - -try { - do{ - with(myObj){ - st_p1 = p1; - st_p2 = p2; - st_p3 = p3; - st_parseInt = parseInt; - st_NaN = NaN; - st_Infinity = Infinity; - st_eval = eval; - st_parseFloat = parseFloat; - st_isNaN = isNaN; - st_isFinite = isFinite; - p1 = 'x1'; - this.p2 = 'x2'; - del = delete p3; - var p4 = 'x4'; - p5 = 'x5'; - var value = 'value'; - throw value; - } - } - while(false); -} catch(e){ - result = e; -} - -if(!(result === "value")){ - $ERROR('#0: result === "value". Actual: result ==='+ result ); -} - -if(!(p1 === 1)){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} - -if(!(p2 === "x2")){ - $ERROR('#2: p2 === "x2". Actual: p2 ==='+ p2 ); -} - -if(!(p3 === 3)){ - $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 ); -} - -if(!(p4 === "x4")){ - $ERROR('#4: p4 === "x4". Actual: p4 ==='+ p4 ); -} - -if(!(p5 === "x5")){ - $ERROR('#5: p5 === "x5". Actual: p5 ==='+ p5 ); -} - -if(!(myObj.p1 === "x1")){ - $ERROR('#6: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 ); -} - -if(!(myObj.p2 === "b")){ - $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 ); -} - -if(!(myObj.p3 === undefined)){ - $ERROR('#8: myObj.p3 === undefined. Actual: myObj.p3 ==='+ myObj.p3 ); -} - -if(!(myObj.p4 === undefined)){ - $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 ); -} - -if(!(myObj.p5 === undefined)){ - $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 ); -} - -if(!(st_parseInt !== parseInt)){ - $ERROR('#11: myObj.parseInt !== parseInt'); -} - -if(!(st_NaN === "obj_NaN")){ - $ERROR('#12: myObj.NaN !== NaN'); -} - -if(!(st_Infinity !== Infinity)){ - $ERROR('#13: myObj.Infinity !== Infinity'); -} - -if(!(st_eval !== eval)){ - $ERROR('#14: myObj.eval !== eval'); -} - -if(!(st_parseFloat !== parseFloat)){ - $ERROR('#15: myObj.parseFloat !== parseFloat'); -} - -if(!(st_isNaN !== isNaN)){ - $ERROR('#16: myObj.isNaN !== isNaN'); -} - -if(!(st_isFinite !== isFinite)){ - $ERROR('#17: myObj.isFinite !== isFinite'); -} - -if(!(value === undefined)){ - $ERROR('#18: value === undefined. Actual: value ==='+ value ); -} - -if(!(myObj.value === "value")){ - $ERROR('#19: myObj.value === "value". Actual: myObj.value ==='+ myObj.value ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.4_T3.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.4_T3.js deleted file mode 100644 index 6f86fc19e..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.4_T3.js +++ /dev/null @@ -1,147 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A1.4_T3; - * @section: 12.10; - * @assertion: The with statement adds a computed object to the front of the - * scope chain of the current execution context; - * @description: Using "with" statement within iteration statement, leading to completion by exception; - */ -this.p1 = 1; -this.p2 = 2; -this.p3 = 3; -var result = "result"; -var myObj = {p1: 'a', - p2: 'b', - p3: 'c', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';}, - parseInt : function(){return 'obj_parseInt';}, - NaN : 'obj_NaN', - Infinity : 'obj_Infinity', - eval : function(){return 'obj_eval';}, - parseFloat : function(){return 'obj_parseFloat';}, - isNaN : function(){return 'obj_isNaN';}, - isFinite : function(){return 'obj_isFinite';} -} -var del; -var st_p1 = "p1"; -var st_p2 = "p2"; -var st_p3 = "p3"; -var st_parseInt = "parseInt"; -var st_NaN = "NaN"; -var st_Infinity = "Infinity"; -var st_eval = "eval"; -var st_parseFloat = "parseFloat"; -var st_isNaN = "isNaN"; -var st_isFinite = "isFinite"; - -try { - do{ - with(myObj){ - throw value; - st_p1 = p1; - st_p2 = p2; - st_p3 = p3; - st_parseInt = parseInt; - st_NaN = NaN; - st_Infinity = Infinity; - st_eval = eval; - st_parseFloat = parseFloat; - st_isNaN = isNaN; - st_isFinite = isFinite; - p1 = 'x1'; - this.p2 = 'x2'; - del = delete p3; - var p4 = 'x4'; - p5 = 'x5'; - var value = 'value'; - } - } - while(false); -} catch(e){ - result = e; -} - -if(!(result === "myObj_value")){ - $ERROR('#0: result === "myObj_value". Actual: result ==='+ result ); -} - -if(!(p1 === 1)){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} - -if(!(p2 === 2)){ - $ERROR('#2: p2 === 2. Actual: p2 ==='+ p2 ); -} - -if(!(p3 === 3)){ - $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 ); -} - -if(!(p4 === undefined)){ - $ERROR('#4: p4 === undefined. Actual: p4 ==='+ p4 ); -} - -try { - p5; - $ERROR('#5: p5 is not defined'); -} catch(e) { -} - -if(!(myObj.p1 === "a")){ - $ERROR('#6: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 ); -} - -if(!(myObj.p2 === "b")){ - $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 ); -} - -if(!(myObj.p3 === "c")){ - $ERROR('#8: myObj.p3 === "c". Actual: myObj.p3 ==='+ myObj.p3 ); -} - -if(!(myObj.p4 === undefined)){ - $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 ); -} - -if(!(myObj.p5 === undefined)){ - $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 ); -} - -if(!(st_parseInt === "parseInt")){ - $ERROR('#11: myObj.parseInt === "parseInt". Actual: myObj.parseInt ==='+ myObj.parseInt ); -} - -if(!(st_NaN === "NaN")){ - $ERROR('#12: st_NaN === "NaN". Actual: st_NaN ==='+ st_NaN ); -} - -if(!(st_Infinity === "Infinity")){ - $ERROR('#13: st_Infinity === "Infinity". Actual: st_Infinity ==='+ st_Infinity ); -} - -if(!(st_eval === "eval")){ - $ERROR('#14: st_eval === "eval". Actual: st_eval ==='+ st_eval ); -} - -if(!(st_parseFloat === "parseFloat")){ - $ERROR('#15: st_parseFloat === "parseFloat". Actual: st_parseFloat ==='+ st_parseFloat ); -} - -if(!(st_isNaN === "isNaN")){ - $ERROR('#16: st_isNaN === "isNaN". Actual: st_isNaN ==='+ st_isNaN ); -} - -if(!(st_isFinite === "isFinite")){ - $ERROR('#17: st_isFinite === "isFinite". Actual: st_isFinite ==='+ st_isFinite ); -} - -if(!(value === undefined)){ - $ERROR('#18: value === undefined. Actual: value ==='+ value ); -} - -if(!(myObj.value === "myObj_value")){ - $ERROR('#19: myObj.value === "myObj_value". Actual: myObj.value ==='+ myObj.value ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.4_T4.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.4_T4.js deleted file mode 100644 index 5ac5c9c80..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.4_T4.js +++ /dev/null @@ -1,137 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A1.4_T4; - * @section: 12.10; - * @assertion: The with statement adds a computed object to the front of the - * scope chain of the current execution context; - * @description: Using "with" statement within iteration statement, leading to completion by break; - */ -this.p1 = 1; -this.p2 = 2; -this.p3 = 3; -var result = "result"; -var myObj = {p1: 'a', - p2: 'b', - p3: 'c', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';}, - parseInt : function(){return 'obj_parseInt';}, - NaN : 'obj_NaN', - Infinity : 'obj_Infinity', - eval : function(){return 'obj_eval';}, - parseFloat : function(){return 'obj_parseFloat';}, - isNaN : function(){return 'obj_isNaN';}, - isFinite : function(){return 'obj_isFinite';} -} -var del; -var st_p1 = "p1"; -var st_p2 = "p2"; -var st_p3 = "p3"; -var st_parseInt = "parseInt"; -var st_NaN = "NaN"; -var st_Infinity = "Infinity"; -var st_eval = "eval"; -var st_parseFloat = "parseFloat"; -var st_isNaN = "isNaN"; -var st_isFinite = "isFinite"; - -do{ - with(myObj){ - st_p1 = p1; - st_p2 = p2; - st_p3 = p3; - st_parseInt = parseInt; - st_NaN = NaN; - st_Infinity = Infinity; - st_eval = eval; - st_parseFloat = parseFloat; - st_isNaN = isNaN; - st_isFinite = isFinite; - p1 = 'x1'; - this.p2 = 'x2'; - del = delete p3; - var p4 = 'x4'; - p5 = 'x5'; - var value = 'value'; - break; - } -} -while(false); - -if(!(p1 === 1)){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} - -if(!(p2 === "x2")){ - $ERROR('#2: p2 === "x2". Actual: p2 ==='+ p2 ); -} - -if(!(p3 === 3)){ - $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 ); -} - -if(!(p4 === "x4")){ - $ERROR('#4: p4 === "x4". Actual: p4 ==='+ p4 ); -} - -if(!(p5 === "x5")){ - $ERROR('#5: p5 === "x5". Actual: p5 ==='+ p5 ); -} - -if(!(myObj.p1 === "x1")){ - $ERROR('#6: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 ); -} - -if(!(myObj.p2 === "b")){ - $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 ); -} - -if(!(myObj.p3 === undefined)){ - $ERROR('#8: myObj.p3 === undefined. Actual: myObj.p3 ==='+ myObj.p3 ); -} - -if(!(myObj.p4 === undefined)){ - $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 ); -} - -if(!(myObj.p5 === undefined)){ - $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 ); -} - -if(!(st_parseInt !== parseInt)){ - $ERROR('#11: myObj.parseInt !== parseInt'); -} - -if(!(st_NaN === "obj_NaN")){ - $ERROR('#12: myObj.NaN !== NaN'); -} - -if(!(st_Infinity !== Infinity)){ - $ERROR('#13: myObj.Infinity !== Infinity'); -} - -if(!(st_eval !== eval)){ - $ERROR('#14: myObj.eval !== eval'); -} - -if(!(st_parseFloat !== parseFloat)){ - $ERROR('#15: myObj.parseFloat !== parseFloat'); -} - -if(!(st_isNaN !== isNaN)){ - $ERROR('#16: myObj.isNaN !== isNaN'); -} - -if(!(st_isFinite !== isFinite)){ - $ERROR('#17: myObj.isFinite !== isFinite'); -} - -if(!(value === undefined)){ - $ERROR('#18: value === undefined. Actual: value ==='+ value ); -} - -if(!(myObj.value === "value")){ - $ERROR('#19: myObj.value === "value". Actual: myObj.value ==='+ myObj.value ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.4_T5.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.4_T5.js deleted file mode 100644 index f1952667e..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.4_T5.js +++ /dev/null @@ -1,139 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A1.4_T5; - * @section: 12.10; - * @assertion: The with statement adds a computed object to the front of the - * scope chain of the current execution context; - * @description: Using "with" statement within iteration statement, leading to completion by break; - */ -this.p1 = 1; -this.p2 = 2; -this.p3 = 3; -var result = "result"; -var myObj = {p1: 'a', - p2: 'b', - p3: 'c', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';}, - parseInt : function(){return 'obj_parseInt';}, - NaN : 'obj_NaN', - Infinity : 'obj_Infinity', - eval : function(){return 'obj_eval';}, - parseFloat : function(){return 'obj_parseFloat';}, - isNaN : function(){return 'obj_isNaN';}, - isFinite : function(){return 'obj_isFinite';} -} -var del; -var st_p1 = "p1"; -var st_p2 = "p2"; -var st_p3 = "p3"; -var st_parseInt = "parseInt"; -var st_NaN = "NaN"; -var st_Infinity = "Infinity"; -var st_eval = "eval"; -var st_parseFloat = "parseFloat"; -var st_isNaN = "isNaN"; -var st_isFinite = "isFinite"; - -do{ - with(myObj){ - break; - st_p1 = p1; - st_p2 = p2; - st_p3 = p3; - st_parseInt = parseInt; - st_NaN = NaN; - st_Infinity = Infinity; - st_eval = eval; - st_parseFloat = parseFloat; - st_isNaN = isNaN; - st_isFinite = isFinite; - p1 = 'x1'; - this.p2 = 'x2'; - del = delete p3; - var p4 = 'x4'; - p5 = 'x5'; - var value = 'value'; - } -} -while(false); - -if(!(p1 === 1)){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} - -if(!(p2 === 2)){ - $ERROR('#2: p2 === 2. Actual: p2 ==='+ p2 ); -} - -if(!(p3 === 3)){ - $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 ); -} - -if(!(p4 === undefined)){ - $ERROR('#4: p4 ===undefined. Actual: p4 ==='+ p4 ); -} - -try { - p5; - $ERROR('#5: p5 is not defined'); -} catch(e) { -} - -if(!(myObj.p1 === "a")){ - $ERROR('#6: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 ); -} - -if(!(myObj.p2 === "b")){ - $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 ); -} - -if(!(myObj.p3 === "c")){ - $ERROR('#8: myObj.p3 === "c". Actual: myObj.p3 ==='+ myObj.p3 ); -} - -if(!(myObj.p4 === undefined)){ - $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 ); -} - -if(!(myObj.p5 === undefined)){ - $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 ); -} - -if(!(st_parseInt === "parseInt")){ - $ERROR('#11: myObj.parseInt === "parseInt". Actual: myObj.parseInt ==='+ myObj.parseInt ); -} - -if(!(st_NaN === "NaN")){ - $ERROR('#12: st_NaN === "NaN". Actual: st_NaN ==='+ st_NaN ); -} - -if(!(st_Infinity === "Infinity")){ - $ERROR('#13: st_Infinity === "Infinity". Actual: st_Infinity ==='+ st_Infinity ); -} - -if(!(st_eval === "eval")){ - $ERROR('#14: st_eval === "eval". Actual: st_eval ==='+ st_eval ); -} - -if(!(st_parseFloat === "parseFloat")){ - $ERROR('#15: st_parseFloat === "parseFloat". Actual: st_parseFloat ==='+ st_parseFloat ); -} - -if(!(st_isNaN === "isNaN")){ - $ERROR('#16: st_isNaN === "isNaN". Actual: st_isNaN ==='+ st_isNaN ); -} - -if(!(st_isFinite === "isFinite")){ - $ERROR('#17: st_isFinite === "isFinite". Actual: st_isFinite ==='+ st_isFinite ); -} - -if(!(value === undefined)){ - $ERROR('#18: value === undefined. Actual: value ==='+ value ); -} - -if(!(myObj.value === "myObj_value")){ - $ERROR('#19: myObj.value === "myObj_value". Actual: myObj.value ==='+ myObj.value ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.5_T1.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.5_T1.js deleted file mode 100644 index d881c2398..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.5_T1.js +++ /dev/null @@ -1,141 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A1.5_T1; - * @section: 12.10; - * @assertion: The with statement adds a computed object to the front of the - * scope chain of the current execution context; - * @description: Using "with" statement within "for-in" statement, leading to normal completion; - */ -this.p1 = 1; -this.p2 = 2; -this.p3 = 3; -var result = "result"; -var myObj = {p1: 'a', - p2: 'b', - p3: 'c', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';}, - parseInt : function(){return 'obj_parseInt';}, - NaN : 'obj_NaN', - Infinity : 'obj_Infinity', - eval : function(){return 'obj_eval';}, - parseFloat : function(){return 'obj_parseFloat';}, - isNaN : function(){return 'obj_isNaN';}, - isFinite : function(){return 'obj_isFinite';} -} -var del; -var st_p1 = "p1"; -var st_p2 = "p2"; -var st_p3 = "p3"; -var st_parseInt = "parseInt"; -var st_NaN = "NaN"; -var st_Infinity = "Infinity"; -var st_eval = "eval"; -var st_parseFloat = "parseFloat"; -var st_isNaN = "isNaN"; -var st_isFinite = "isFinite"; - -for(var prop in myObj){ - with(myObj){ - if(prop === 'p1') { - st_p1 = p1; - p1 = 'x1'; - } - if(prop === 'p2') { - st_p2 = p2; - this.p2 = 'x2'; - } - if(prop === 'p3') { - st_p3 = p3; - del = delete p3; - } - if(prop === 'parseInt') st_parseInt = parseInt; - if(prop === 'NaN') st_NaN = NaN; - if(prop === 'Infinity') st_Infinity = Infinity; - if(prop === 'eval') st_eval = eval; - if(prop === 'parseFloat') st_parseFloat = parseFloat; - if(prop === 'isNaN') st_isNaN = isNaN; - if(prop === 'isFinite') st_isFinite = isFinite; - var p4 = 'x4'; - p5 = 'x5'; - var value = 'value'; - } -} - -if(!(p1 === 1)){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} - -if(!(p2 === "x2")){ - $ERROR('#2: p2 === "x2". Actual: p2 ==='+ p2 ); -} - -if(!(p3 === 3)){ - $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 ); -} - -if(!(p4 === "x4")){ - $ERROR('#4: p4 === "x4". Actual: p4 ==='+ p4 ); -} - -if(!(p5 === "x5")){ - $ERROR('#5: p5 === "x5". Actual: p5 ==='+ p5 ); -} - -if(!(myObj.p1 === "x1")){ - $ERROR('#6: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 ); -} - -if(!(myObj.p2 === "b")){ - $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 ); -} - -if(!(myObj.p3 === undefined)){ - $ERROR('#8: myObj.p3 === undefined. Actual: myObj.p3 ==='+ myObj.p3 ); -} - -if(!(myObj.p4 === undefined)){ - $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 ); -} - -if(!(myObj.p5 === undefined)){ - $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 ); -} - -if(!(st_parseInt !== parseInt)){ - $ERROR('#11: myObj.parseInt !== parseInt'); -} - -if(!(st_NaN === "obj_NaN")){ - $ERROR('#12: myObj.NaN !== NaN'); -} - -if(!(st_Infinity !== Infinity)){ - $ERROR('#13: myObj.Infinity !== Infinity'); -} - -if(!(st_eval !== eval)){ - $ERROR('#14: myObj.eval !== eval'); -} - -if(!(st_parseFloat !== parseFloat)){ - $ERROR('#15: myObj.parseFloat !== parseFloat'); -} - -if(!(st_isNaN !== isNaN)){ - $ERROR('#16: myObj.isNaN !== isNaN'); -} - -if(!(st_isFinite !== isFinite)){ - $ERROR('#17: myObj.isFinite !== isFinite'); -} - -if(!(value === undefined)){ - $ERROR('#18: value === undefined. Actual: value ==='+ value ); -} - -if(!(myObj.value === "value")){ - $ERROR('#19: myObj.value === "value". Actual: myObj.value ==='+ myObj.value ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.5_T2.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.5_T2.js deleted file mode 100644 index 8a72e5858..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.5_T2.js +++ /dev/null @@ -1,144 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A1.5_T2; - * @section: 12.10; - * @assertion: The with statement adds a computed object to the front of the - * scope chain of the current execution context; - * @description: Using "with" statement within "for-in" statement, leading to completion by exception; - */ -this.p1 = 1; -this.p2 = 2; -this.p3 = 3; -var result = "result"; -var myObj = {p1: 'a', - p2: 'b', - p3: 'c', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';}, - parseInt : function(){return 'obj_parseInt';}, - NaN : 'obj_NaN', - Infinity : 'obj_Infinity', - eval : function(){return 'obj_eval';}, - parseFloat : function(){return 'obj_parseFloat';}, - isNaN : function(){return 'obj_isNaN';}, - isFinite : function(){return 'obj_isFinite';} -} -var del; -var st_p1 = "p1"; -var st_p2 = "p2"; -var st_p3 = "p3"; -var st_parseInt = "parseInt"; -var st_NaN = "NaN"; -var st_Infinity = "Infinity"; -var st_eval = "eval"; -var st_parseFloat = "parseFloat"; -var st_isNaN = "isNaN"; -var st_isFinite = "isFinite"; - -try { - for(var prop in myObj){ - with(myObj){ - st_p1 = p1; - p1 = 'x1'; - st_p2 = p2; - this.p2 = 'x2'; - st_p3 = p3; - del = delete p3; - st_parseInt = parseInt; - st_NaN = NaN; - st_Infinity = Infinity; - st_eval = eval; - st_parseFloat = parseFloat; - st_isNaN = isNaN; - st_isFinite = isFinite; - var p4 = 'x4'; - p5 = 'x5'; - var value = 'value'; - throw value; - } - } -} catch(e){ - result = e; -} - -if(!(result === "value")){ - $ERROR('#0: result === "value". Actual: result ==='+ result ); -} - -if(!(p1 === 1)){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} - -if(!(p2 === "x2")){ - $ERROR('#2: p2 === "x2". Actual: p2 ==='+ p2 ); -} - -if(!(p3 === 3)){ - $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 ); -} - -if(!(p4 === "x4")){ - $ERROR('#4: p4 === "x4". Actual: p4 ==='+ p4 ); -} - -if(!(p5 === "x5")){ - $ERROR('#5: p5 === "x5". Actual: p5 ==='+ p5 ); -} - -if(!(myObj.p1 === "x1")){ - $ERROR('#6: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 ); -} - -if(!(myObj.p2 === "b")){ - $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 ); -} - -if(!(myObj.p3 === undefined)){ - $ERROR('#8: myObj.p3 === undefined. Actual: myObj.p3 ==='+ myObj.p3 ); -} - -if(!(myObj.p4 === undefined)){ - $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 ); -} - -if(!(myObj.p5 === undefined)){ - $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 ); -} - -if(!(st_parseInt !== parseInt)){ - $ERROR('#11: myObj.parseInt !== parseInt'); -} - -if(!(st_NaN === "obj_NaN")){ - $ERROR('#12: myObj.NaN !== NaN'); -} - -if(!(st_Infinity !== Infinity)){ - $ERROR('#13: myObj.Infinity !== Infinity'); -} - -if(!(st_eval !== eval)){ - $ERROR('#14: myObj.eval !== eval'); -} - -if(!(st_parseFloat !== parseFloat)){ - $ERROR('#15: myObj.parseFloat !== parseFloat'); -} - -if(!(st_isNaN !== isNaN)){ - $ERROR('#16: myObj.isNaN !== isNaN'); -} - -if(!(st_isFinite !== isFinite)){ - $ERROR('#17: myObj.isFinite !== isFinite'); -} - -if(!(value === undefined)){ - $ERROR('#18: value === undefined. Actual: value ==='+ value ); -} - -if(!(myObj.value === "value")){ - $ERROR('#19: myObj.value === "value". Actual: myObj.value ==='+ myObj.value ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.5_T3.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.5_T3.js deleted file mode 100644 index 1aea6130c..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.5_T3.js +++ /dev/null @@ -1,152 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A1.5_T3; - * @section: 12.10; - * @assertion: The with statement adds a computed object to the front of the - * scope chain of the current execution context; - * @description: Using "with" statement within "for-in" statement, leading to completion by exception; - */ -this.p1 = 1; -this.p2 = 2; -this.p3 = 3; -var result = "result"; -var myObj = {p1: 'a', - p2: 'b', - p3: 'c', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';}, - parseInt : function(){return 'obj_parseInt';}, - NaN : 'obj_NaN', - Infinity : 'obj_Infinity', - eval : function(){return 'obj_eval';}, - parseFloat : function(){return 'obj_parseFloat';}, - isNaN : function(){return 'obj_isNaN';}, - isFinite : function(){return 'obj_isFinite';} -} -var del; -var st_p1 = "p1"; -var st_p2 = "p2"; -var st_p3 = "p3"; -var st_parseInt = "parseInt"; -var st_NaN = "NaN"; -var st_Infinity = "Infinity"; -var st_eval = "eval"; -var st_parseFloat = "parseFloat"; -var st_isNaN = "isNaN"; -var st_isFinite = "isFinite"; - -try { - for(var prop in myObj){ - with(myObj){ - throw value; - if(prop === 'p1') { - st_p1 = p1; - p1 = 'x1'; - } - if(prop === 'p2') { - st_p2 = p2; - this.p2 = 'x2'; - } - if(prop === 'p3') { - st_p3 = p3; - del = delete p3; - } - if(prop === 'parseInt') st_parseInt = parseInt; - if(prop === 'NaN') st_NaN = NaN; - if(prop === 'Infinity') st_Infinity = Infinity; - if(prop === 'eval') st_eval = eval; - if(prop === 'parseFloat') st_parseFloat = parseFloat; - if(prop === 'isNaN') st_isNaN = isNaN; - if(prop === 'isFinite') st_isFinite = isFinite; - var p4 = 'x4'; - p5 = 'x5'; - var value = 'value'; - } - } -} catch(e){ - result = e; -} - -if(!(result === "myObj_value")){ - $ERROR('#0: result === "myObj_value". Actual: result ==='+ result ); -} - -if(!(p1 === 1)){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} - -if(!(p2 === 2)){ - $ERROR('#2: p2 === 2. Actual: p2 ==='+ p2 ); -} - -if(!(p3 === 3)){ - $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 ); -} - -if(!(p4 === undefined)){ - $ERROR('#4: p4 === undefined. Actual: p4 ==='+ p4 ); -} - -try { - p5; - $ERROR('#5: p5 is not defined'); -} catch(e) { -} - -if(!(myObj.p1 === "a")){ - $ERROR('#6: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 ); -} - -if(!(myObj.p2 === "b")){ - $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 ); -} - -if(!(myObj.p3 === "c")){ - $ERROR('#8: myObj.p3 === "c". Actual: myObj.p3 ==='+ myObj.p3 ); -} - -if(!(myObj.p4 === undefined)){ - $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 ); -} - -if(!(myObj.p5 === undefined)){ - $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 ); -} - -if(!(st_parseInt === "parseInt")){ - $ERROR('#11: myObj.parseInt === "parseInt". Actual: myObj.parseInt ==='+ myObj.parseInt ); -} - -if(!(st_NaN === "NaN")){ - $ERROR('#12: st_NaN === "NaN". Actual: st_NaN ==='+ st_NaN ); -} - -if(!(st_Infinity === "Infinity")){ - $ERROR('#13: st_Infinity === "Infinity". Actual: st_Infinity ==='+ st_Infinity ); -} - -if(!(st_eval === "eval")){ - $ERROR('#14: st_eval === "eval". Actual: st_eval ==='+ st_eval ); -} - -if(!(st_parseFloat === "parseFloat")){ - $ERROR('#15: st_parseFloat === "parseFloat". Actual: st_parseFloat ==='+ st_parseFloat ); -} - -if(!(st_isNaN === "isNaN")){ - $ERROR('#16: st_isNaN === "isNaN". Actual: st_isNaN ==='+ st_isNaN ); -} - -if(!(st_isFinite === "isFinite")){ - $ERROR('#17: st_isFinite === "isFinite". Actual: st_isFinite ==='+ st_isFinite ); -} - -if(!(value === undefined)){ - $ERROR('#18: value === undefined. Actual: value ==='+ value ); -} - -if(!(myObj.value === "myObj_value")){ - $ERROR('#19: myObj.value === "myObj_value". Actual: myObj.value ==='+ myObj.value ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.5_T4.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.5_T4.js deleted file mode 100644 index c4585d174..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.5_T4.js +++ /dev/null @@ -1,136 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A1.5_T4; - * @section: 12.10; - * @assertion: The with statement adds a computed object to the front of the - * scope chain of the current execution context; - * @description: Using "with" statement within "for-in" statement, leading to completion by break; - */ -this.p1 = 1; -this.p2 = 2; -this.p3 = 3; -var result = "result"; -var myObj = {p1: 'a', - p2: 'b', - p3: 'c', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';}, - parseInt : function(){return 'obj_parseInt';}, - NaN : 'obj_NaN', - Infinity : 'obj_Infinity', - eval : function(){return 'obj_eval';}, - parseFloat : function(){return 'obj_parseFloat';}, - isNaN : function(){return 'obj_isNaN';}, - isFinite : function(){return 'obj_isFinite';} -} -var del; -var st_p1 = "p1"; -var st_p2 = "p2"; -var st_p3 = "p3"; -var st_parseInt = "parseInt"; -var st_NaN = "NaN"; -var st_Infinity = "Infinity"; -var st_eval = "eval"; -var st_parseFloat = "parseFloat"; -var st_isNaN = "isNaN"; -var st_isFinite = "isFinite"; - -for(var prop in myObj){ - with(myObj){ - st_p1 = p1; - p1 = 'x1'; - st_p2 = p2; - this.p2 = 'x2'; - st_p3 = p3; - del = delete p3; - st_parseInt = parseInt; - st_NaN = NaN; - st_Infinity = Infinity; - st_eval = eval; - st_parseFloat = parseFloat; - st_isNaN = isNaN; - st_isFinite = isFinite; - var p4 = 'x4'; - p5 = 'x5'; - var value = 'value'; - break; - } -} - -if(!(p1 === 1)){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} - -if(!(p2 === "x2")){ - $ERROR('#2: p2 === "x2". Actual: p2 ==='+ p2 ); -} - -if(!(p3 === 3)){ - $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 ); -} - -if(!(p4 === "x4")){ - $ERROR('#4: p4 === "x4". Actual: p4 ==='+ p4 ); -} - -if(!(p5 === "x5")){ - $ERROR('#5: p5 === "x5". Actual: p5 ==='+ p5 ); -} - -if(!(myObj.p1 === "x1")){ - $ERROR('#6: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 ); -} - -if(!(myObj.p2 === "b")){ - $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 ); -} - -if(!(myObj.p3 === undefined)){ - $ERROR('#8: myObj.p3 === undefined. Actual: myObj.p3 ==='+ myObj.p3 ); -} - -if(!(myObj.p4 === undefined)){ - $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 ); -} - -if(!(myObj.p5 === undefined)){ - $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 ); -} - -if(!(st_parseInt !== parseInt)){ - $ERROR('#11: myObj.parseInt !== parseInt'); -} - -if(!(st_NaN === "obj_NaN")){ - $ERROR('#12: myObj.NaN !== NaN'); -} - -if(!(st_Infinity !== Infinity)){ - $ERROR('#13: myObj.Infinity !== Infinity'); -} - -if(!(st_eval !== eval)){ - $ERROR('#14: myObj.eval !== eval'); -} - -if(!(st_parseFloat !== parseFloat)){ - $ERROR('#15: myObj.parseFloat !== parseFloat'); -} - -if(!(st_isNaN !== isNaN)){ - $ERROR('#16: myObj.isNaN !== isNaN'); -} - -if(!(st_isFinite !== isFinite)){ - $ERROR('#17: myObj.isFinite !== isFinite'); -} - -if(!(value === undefined)){ - $ERROR('#18: value === undefined. Actual: value ==='+ value ); -} - -if(!(myObj.value === "value")){ - $ERROR('#19: myObj.value === "value". Actual: myObj.value ==='+ myObj.value ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.5_T5.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.5_T5.js deleted file mode 100644 index 519f3ccff..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.5_T5.js +++ /dev/null @@ -1,144 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A1.5_T5; - * @section: 12.10; - * @assertion: The with statement adds a computed object to the front of the - * scope chain of the current execution context; - * @description: Using "with" statement within "for-in" statement, leading to completion by break; - */ -this.p1 = 1; -this.p2 = 2; -this.p3 = 3; -var result = "result"; -var myObj = {p1: 'a', - p2: 'b', - p3: 'c', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';}, - parseInt : function(){return 'obj_parseInt';}, - NaN : 'obj_NaN', - Infinity : 'obj_Infinity', - eval : function(){return 'obj_eval';}, - parseFloat : function(){return 'obj_parseFloat';}, - isNaN : function(){return 'obj_isNaN';}, - isFinite : function(){return 'obj_isFinite';} -} -var del; -var st_p1 = "p1"; -var st_p2 = "p2"; -var st_p3 = "p3"; -var st_parseInt = "parseInt"; -var st_NaN = "NaN"; -var st_Infinity = "Infinity"; -var st_eval = "eval"; -var st_parseFloat = "parseFloat"; -var st_isNaN = "isNaN"; -var st_isFinite = "isFinite"; - -for(var prop in myObj){ - with(myObj){ - break; - if(prop === 'p1') { - st_p1 = p1; - p1 = 'x1'; - } - if(prop === 'p2') { - st_p2 = p2; - this.p2 = 'x2'; - } - if(prop === 'p3') { - st_p3 = p3; - del = delete p3; - } - if(prop === 'parseInt') st_parseInt = parseInt; - if(prop === 'NaN') st_NaN = NaN; - if(prop === 'Infinity') st_Infinity = Infinity; - if(prop === 'eval') st_eval = eval; - if(prop === 'parseFloat') st_parseFloat = parseFloat; - if(prop === 'isNaN') st_isNaN = isNaN; - if(prop === 'isFinite') st_isFinite = isFinite; - var p4 = 'x4'; - p5 = 'x5'; - var value = 'value'; - } -} - -if(!(p1 === 1)){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} - -if(!(p2 === 2)){ - $ERROR('#2: p2 === 2. Actual: p2 ==='+ p2 ); -} - -if(!(p3 === 3)){ - $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 ); -} - -if(!(p4 === undefined)){ - $ERROR('#4: p4 === undefined. Actual: p4 ==='+ p4 ); -} - -try { - p5; - $ERROR('#5: p5 is not defined'); -} catch(e) { -} - -if(!(myObj.p1 === "a")){ - $ERROR('#6: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 ); -} - -if(!(myObj.p2 === "b")){ - $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 ); -} - -if(!(myObj.p3 === "c")){ - $ERROR('#8: myObj.p3 === "c". Actual: myObj.p3 ==='+ myObj.p3 ); -} - -if(!(myObj.p4 === undefined)){ - $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 ); -} - -if(!(myObj.p5 === undefined)){ - $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 ); -} - -if(!(st_parseInt === "parseInt")){ - $ERROR('#11: myObj.parseInt === "parseInt". Actual: myObj.parseInt ==='+ myObj.parseInt ); -} - -if(!(st_NaN === "NaN")){ - $ERROR('#12: st_NaN === "NaN". Actual: st_NaN ==='+ st_NaN ); -} - -if(!(st_Infinity === "Infinity")){ - $ERROR('#13: st_Infinity === "Infinity". Actual: st_Infinity ==='+ st_Infinity ); -} - -if(!(st_eval === "eval")){ - $ERROR('#14: st_eval === "eval". Actual: st_eval ==='+ st_eval ); -} - -if(!(st_parseFloat === "parseFloat")){ - $ERROR('#15: st_parseFloat === "parseFloat". Actual: st_parseFloat ==='+ st_parseFloat ); -} - -if(!(st_isNaN === "isNaN")){ - $ERROR('#16: st_isNaN === "isNaN". Actual: st_isNaN ==='+ st_isNaN ); -} - -if(!(st_isFinite === "isFinite")){ - $ERROR('#17: st_isFinite === "isFinite". Actual: st_isFinite ==='+ st_isFinite ); -} - -if(!(value === undefined)){ - $ERROR('#18: value === undefined. Actual: value ==='+ value ); -} - -if(!(myObj.value === "myObj_value")){ - $ERROR('#19: myObj.value === "myObj_value". Actual: myObj.value ==='+ myObj.value ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.6_T1.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.6_T1.js deleted file mode 100644 index 555a6a480..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.6_T1.js +++ /dev/null @@ -1,135 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A1.6_T1; - * @section: 12.10; - * @assertion: The with statement adds a computed object to the front of the - * scope chain of the current execution context; - * @description: Using "with" statement within another "with" statement, leading to normal completion; - */ -this.p1 = 1; -this.p2 = 2; -this.p3 = 3; -var result = "result"; -var myObj = {p1: 'a', - p2: 'b', - p3: 'c', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';}, - parseInt : function(){return 'obj_parseInt';}, - NaN : 'obj_NaN', - Infinity : 'obj_Infinity', - eval : function(){return 'obj_eval';}, - parseFloat : function(){return 'obj_parseFloat';}, - isNaN : function(){return 'obj_isNaN';}, - isFinite : function(){return 'obj_isFinite';} -} -var del; -var st_p1 = "p1"; -var st_p2 = "p2"; -var st_p3 = "p3"; -var st_parseInt = "parseInt"; -var st_NaN = "NaN"; -var st_Infinity = "Infinity"; -var st_eval = "eval"; -var st_parseFloat = "parseFloat"; -var st_isNaN = "isNaN"; -var st_isFinite = "isFinite"; - -with(myObj){ - with(myObj){ - st_p1 = p1; - st_p2 = p2; - st_p3 = p3; - st_parseInt = parseInt; - st_NaN = NaN; - st_Infinity = Infinity; - st_eval = eval; - st_parseFloat = parseFloat; - st_isNaN = isNaN; - st_isFinite = isFinite; - p1 = 'x1'; - this.p2 = 'x2'; - del = delete p3; - var p4 = 'x4'; - p5 = 'x5'; - var value = 'value'; - } -} - -if(!(p1 === 1)){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} - -if(!(p2 === "x2")){ - $ERROR('#2: p2 === "x2". Actual: p2 ==='+ p2 ); -} - -if(!(p3 === 3)){ - $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 ); -} - -if(!(p4 === "x4")){ - $ERROR('#4: p4 === "x4". Actual: p4 ==='+ p4 ); -} - -if(!(p5 === "x5")){ - $ERROR('#5: p5 === "x5". Actual: p5 ==='+ p5 ); -} - -if(!(myObj.p1 === "x1")){ - $ERROR('#6: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 ); -} - -if(!(myObj.p2 === "b")){ - $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 ); -} - -if(!(myObj.p3 === undefined)){ - $ERROR('#8: myObj.p3 === undefined. Actual: myObj.p3 ==='+ myObj.p3 ); -} - -if(!(myObj.p4 === undefined)){ - $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 ); -} - -if(!(myObj.p5 === undefined)){ - $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 ); -} - -if(!(st_parseInt !== parseInt)){ - $ERROR('#11: myObj.parseInt !== parseInt'); -} - -if(!(st_NaN === "obj_NaN")){ - $ERROR('#12: myObj.NaN !== NaN'); -} - -if(!(st_Infinity !== Infinity)){ - $ERROR('#13: myObj.Infinity !== Infinity'); -} - -if(!(st_eval !== eval)){ - $ERROR('#14: myObj.eval !== eval'); -} - -if(!(st_parseFloat !== parseFloat)){ - $ERROR('#15: myObj.parseFloat !== parseFloat'); -} - -if(!(st_isNaN !== isNaN)){ - $ERROR('#16: myObj.isNaN !== isNaN'); -} - -if(!(st_isFinite !== isFinite)){ - $ERROR('#17: myObj.isFinite !== isFinite'); -} - -if(!(value === undefined)){ - $ERROR('#18: value === undefined. Actual: value ==='+ value ); -} - -if(!(myObj.value === "value")){ - $ERROR('#19: myObj.value === "value". Actual: myObj.value ==='+ myObj.value ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.6_T2.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.6_T2.js deleted file mode 100644 index bde26b65c..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.6_T2.js +++ /dev/null @@ -1,144 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A1.6_T2; - * @section: 12.10; - * @assertion: The with statement adds a computed object to the front of the - * scope chain of the current execution context; - * @description: Using "with" statement within another "with" statement, leading to completion by exception; - */ -this.p1 = 1; -this.p2 = 2; -this.p3 = 3; -var result = "result"; -var myObj = {p1: 'a', - p2: 'b', - p3: 'c', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';}, - parseInt : function(){return 'obj_parseInt';}, - NaN : 'obj_NaN', - Infinity : 'obj_Infinity', - eval : function(){return 'obj_eval';}, - parseFloat : function(){return 'obj_parseFloat';}, - isNaN : function(){return 'obj_isNaN';}, - isFinite : function(){return 'obj_isFinite';} -} -var del; -var st_p1 = "p1"; -var st_p2 = "p2"; -var st_p3 = "p3"; -var st_parseInt = "parseInt"; -var st_NaN = "NaN"; -var st_Infinity = "Infinity"; -var st_eval = "eval"; -var st_parseFloat = "parseFloat"; -var st_isNaN = "isNaN"; -var st_isFinite = "isFinite"; - -try { - with(myObj){ - with(myObj){ - st_p1 = p1; - st_p2 = p2; - st_p3 = p3; - st_parseInt = parseInt; - st_NaN = NaN; - st_Infinity = Infinity; - st_eval = eval; - st_parseFloat = parseFloat; - st_isNaN = isNaN; - st_isFinite = isFinite; - p1 = 'x1'; - this.p2 = 'x2'; - del = delete p3; - var p4 = 'x4'; - p5 = 'x5'; - var value = 'value'; - throw value; - } - } -} catch(e){ - result = e; -} - -if(!(result === "value")){ - $ERROR('#0: result === "value". Actual: result ==='+ result ); -} - -if(!(p1 === 1)){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} - -if(!(p2 === "x2")){ - $ERROR('#2: p2 === "x2". Actual: p2 ==='+ p2 ); -} - -if(!(p3 === 3)){ - $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 ); -} - -if(!(p4 === "x4")){ - $ERROR('#4: p4 === "x4". Actual: p4 ==='+ p4 ); -} - -if(!(p5 === "x5")){ - $ERROR('#5: p5 === "x5". Actual: p5 ==='+ p5 ); -} - -if(!(myObj.p1 === "x1")){ - $ERROR('#6: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 ); -} - -if(!(myObj.p2 === "b")){ - $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 ); -} - -if(!(myObj.p3 === undefined)){ - $ERROR('#8: myObj.p3 === undefined. Actual: myObj.p3 ==='+ myObj.p3 ); -} - -if(!(myObj.p4 === undefined)){ - $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 ); -} - -if(!(myObj.p5 === undefined)){ - $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 ); -} - -if(!(st_parseInt !== parseInt)){ - $ERROR('#11: myObj.parseInt !== parseInt'); -} - -if(!(st_NaN === "obj_NaN")){ - $ERROR('#12: myObj.NaN !== NaN'); -} - -if(!(st_Infinity !== Infinity)){ - $ERROR('#13: myObj.Infinity !== Infinity'); -} - -if(!(st_eval !== eval)){ - $ERROR('#14: myObj.eval !== eval'); -} - -if(!(st_parseFloat !== parseFloat)){ - $ERROR('#15: myObj.parseFloat !== parseFloat'); -} - -if(!(st_isNaN !== isNaN)){ - $ERROR('#16: myObj.isNaN !== isNaN'); -} - -if(!(st_isFinite !== isFinite)){ - $ERROR('#17: myObj.isFinite !== isFinite'); -} - -if(!(value === undefined)){ - $ERROR('#18: value === undefined. Actual: value ==='+ value ); -} - -if(!(myObj.value === "value")){ - $ERROR('#19: myObj.value === "value". Actual: myObj.value ==='+ myObj.value ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.6_T3.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.6_T3.js deleted file mode 100644 index 04ee2db1f..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.6_T3.js +++ /dev/null @@ -1,146 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A1.6_T3; - * @section: 12.10; - * @assertion: The with statement adds a computed object to the front of the - * scope chain of the current execution context; - * @description: Using "with" statement within another "with" statement, leading to completion by exception; - */ -this.p1 = 1; -this.p2 = 2; -this.p3 = 3; -var result = "result"; -var myObj = {p1: 'a', - p2: 'b', - p3: 'c', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';}, - parseInt : function(){return 'obj_parseInt';}, - NaN : 'obj_NaN', - Infinity : 'obj_Infinity', - eval : function(){return 'obj_eval';}, - parseFloat : function(){return 'obj_parseFloat';}, - isNaN : function(){return 'obj_isNaN';}, - isFinite : function(){return 'obj_isFinite';} -} -var del; -var st_p1 = "p1"; -var st_p2 = "p2"; -var st_p3 = "p3"; -var st_parseInt = "parseInt"; -var st_NaN = "NaN"; -var st_Infinity = "Infinity"; -var st_eval = "eval"; -var st_parseFloat = "parseFloat"; -var st_isNaN = "isNaN"; -var st_isFinite = "isFinite"; - -try { - with(myObj){ - with(myObj){ - throw value; - st_p1 = p1; - st_p2 = p2; - st_p3 = p3; - st_parseInt = parseInt; - st_NaN = NaN; - st_Infinity = Infinity; - st_eval = eval; - st_parseFloat = parseFloat; - st_isNaN = isNaN; - st_isFinite = isFinite; - p1 = 'x1'; - this.p2 = 'x2'; - del = delete p3; - var p4 = 'x4'; - p5 = 'x5'; - var value = 'value'; - } - } -} catch(e){ - result = e; -} - -if(!(result === "myObj_value")){ - $ERROR('#0: result === "myObj_value". Actual: result ==='+ result ); -} - -if(!(p1 === 1)){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} - -if(!(p2 === 2)){ - $ERROR('#2: p2 === 2. Actual: p2 ==='+ p2 ); -} - -if(!(p3 === 3)){ - $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 ); -} - -if(!(p4 === undefined)){ - $ERROR('#4: p4 === undefined. Actual: p4 ==='+ p4 ); -} - -try { - p5; - $ERROR('#5: p5 is not defined'); -} catch(e) { -} - -if(!(myObj.p1 === "a")){ - $ERROR('#6: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 ); -} - -if(!(myObj.p2 === "b")){ - $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 ); -} - -if(!(myObj.p3 === "c")){ - $ERROR('#8: myObj.p3 === "c". Actual: myObj.p3 ==='+ myObj.p3 ); -} - -if(!(myObj.p4 === undefined)){ - $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 ); -} - -if(!(myObj.p5 === undefined)){ - $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 ); -} - -if(!(st_parseInt === "parseInt")){ - $ERROR('#11: myObj.parseInt === "parseInt". Actual: myObj.parseInt ==='+ myObj.parseInt ); -} - -if(!(st_NaN === "NaN")){ - $ERROR('#12: st_NaN === "NaN". Actual: st_NaN ==='+ st_NaN ); -} - -if(!(st_Infinity === "Infinity")){ - $ERROR('#13: st_Infinity === "Infinity". Actual: st_Infinity ==='+ st_Infinity ); -} - -if(!(st_eval === "eval")){ - $ERROR('#14: st_eval === "eval". Actual: st_eval ==='+ st_eval ); -} - -if(!(st_parseFloat === "parseFloat")){ - $ERROR('#15: st_parseFloat === "parseFloat". Actual: st_parseFloat ==='+ st_parseFloat ); -} - -if(!(st_isNaN === "isNaN")){ - $ERROR('#16: st_isNaN === "isNaN". Actual: st_isNaN ==='+ st_isNaN ); -} - -if(!(st_isFinite === "isFinite")){ - $ERROR('#17: st_isFinite === "isFinite". Actual: st_isFinite ==='+ st_isFinite ); -} - -if(!(value === undefined)){ - $ERROR('#18: value === undefined. Actual: value ==='+ value ); -} - -if(!(myObj.value === "myObj_value")){ - $ERROR('#19: myObj.value === "myObj_value". Actual: myObj.value ==='+ myObj.value ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.7_T1.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.7_T1.js deleted file mode 100644 index bb503fab5..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.7_T1.js +++ /dev/null @@ -1,141 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A1.7_T1; - * @section: 12.10; - * @assertion: The with statement adds a computed object to the front of the - * scope chain of the current execution context; - * @description: Calling a function within "with" statement declared within the statement, leading to normal completion; - */ -this.p1 = 1; -this.p2 = 2; -this.p3 = 3; -var result = "result"; -var myObj = {p1: 'a', - p2: 'b', - p3: 'c', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';}, - parseInt : function(){return 'obj_parseInt';}, - NaN : 'obj_NaN', - Infinity : 'obj_Infinity', - eval : function(){return 'obj_eval';}, - parseFloat : function(){return 'obj_parseFloat';}, - isNaN : function(){return 'obj_isNaN';}, - isFinite : function(){return 'obj_isFinite';} -} -var del; -var st_p1 = "p1"; -var st_p2 = "p2"; -var st_p3 = "p3"; -var st_parseInt = "parseInt"; -var st_NaN = "NaN"; -var st_Infinity = "Infinity"; -var st_eval = "eval"; -var st_parseFloat = "parseFloat"; -var st_isNaN = "isNaN"; -var st_isFinite = "isFinite"; - -with(myObj){ - var f = function(){ - st_p1 = p1; - st_p2 = p2; - st_p3 = p3; - st_parseInt = parseInt; - st_NaN = NaN; - st_Infinity = Infinity; - st_eval = eval; - st_parseFloat = parseFloat; - st_isNaN = isNaN; - st_isFinite = isFinite; - p1 = 'x1'; - this.p2 = 'x2'; - del = delete p3; - var p4 = 'x4'; - p5 = 'x5'; - var value = 'value'; - } - f(); -} - -if(!(p1 === 1)){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} - -if(!(p2 === "x2")){ - $ERROR('#2: p2 === "x2". Actual: p2 ==='+ p2 ); -} - -if(!(p3 === 3)){ - $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 ); -} - -try { - p4; - $ERROR('#4: p4 is not defined'); -} catch(e) { -} - -if(!(p5 === "x5")){ - $ERROR('#5: p5 === "x5". Actual: p5 ==='+ p5 ); -} - -if(!(myObj.p1 === "x1")){ - $ERROR('#6: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 ); -} - -if(!(myObj.p2 === "b")){ - $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 ); -} - -if(!(myObj.p3 === undefined)){ - $ERROR('#8: myObj.p3 === undefined. Actual: myObj.p3 ==='+ myObj.p3 ); -} - -if(!(myObj.p4 === undefined)){ - $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 ); -} - -if(!(myObj.p5 === undefined)){ - $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 ); -} - -if(!(st_parseInt !== parseInt)){ - $ERROR('#11: myObj.parseInt !== parseInt'); -} - -if(!(st_NaN === "obj_NaN")){ - $ERROR('#12: myObj.NaN !== NaN'); -} - -if(!(st_Infinity !== Infinity)){ - $ERROR('#13: myObj.Infinity !== Infinity'); -} - -if(!(st_eval !== eval)){ - $ERROR('#14: myObj.eval !== eval'); -} - -if(!(st_parseFloat !== parseFloat)){ - $ERROR('#15: myObj.parseFloat !== parseFloat'); -} - -if(!(st_isNaN !== isNaN)){ - $ERROR('#16: myObj.isNaN !== isNaN'); -} - -if(!(st_isFinite !== isFinite)){ - $ERROR('#17: myObj.isFinite !== isFinite'); -} - -try{ - value; - $ERROR('#18: value is not defined'); -} -catch(e){ -} - -if(!(myObj.value === "myObj_value")){ - $ERROR('#19: myObj.value === "myObj_value". Actual: myObj.value ==='+ myObj.value ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.7_T2.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.7_T2.js deleted file mode 100644 index 01149ac7f..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.7_T2.js +++ /dev/null @@ -1,146 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A1.7_T2; - * @section: 12.10; - * @assertion: The with statement adds a computed object to the front of the - * scope chain of the current execution context; - * @description: Calling a function within "with" statement declared within the statement, leading to normal completion by "return"; - */ -this.p1 = 1; -this.p2 = 2; -this.p3 = 3; -var result = "result"; -var myObj = {p1: 'a', - p2: 'b', - p3: 'c', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';}, - parseInt : function(){return 'obj_parseInt';}, - NaN : 'obj_NaN', - Infinity : 'obj_Infinity', - eval : function(){return 'obj_eval';}, - parseFloat : function(){return 'obj_parseFloat';}, - isNaN : function(){return 'obj_isNaN';}, - isFinite : function(){return 'obj_isFinite';} -} -var del; -var st_p1 = "p1"; -var st_p2 = "p2"; -var st_p3 = "p3"; -var st_parseInt = "parseInt"; -var st_NaN = "NaN"; -var st_Infinity = "Infinity"; -var st_eval = "eval"; -var st_parseFloat = "parseFloat"; -var st_isNaN = "isNaN"; -var st_isFinite = "isFinite"; - -with(myObj){ - var f = function(){ - st_p1 = p1; - st_p2 = p2; - st_p3 = p3; - st_parseInt = parseInt; - st_NaN = NaN; - st_Infinity = Infinity; - st_eval = eval; - st_parseFloat = parseFloat; - st_isNaN = isNaN; - st_isFinite = isFinite; - p1 = 'x1'; - this.p2 = 'x2'; - del = delete p3; - var p4 = 'x4'; - p5 = 'x5'; - var value = 'value'; - return value; - } - result = f(); -} - -if(!(result === "value")){ - $ERROR('#0: result === "value". Actual: result ==='+ result ); -} - -if(!(p1 === 1)){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} - -if(!(p2 === "x2")){ - $ERROR('#2: p2 === "x2". Actual: p2 ==='+ p2 ); -} - -if(!(p3 === 3)){ - $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 ); -} - -try { - p4; - $ERROR('#4: p4 is not defined'); -} catch(e) { -} - -if(!(p5 === "x5")){ - $ERROR('#5: p5 === "x5". Actual: p5 ==='+ p5 ); -} - -if(!(myObj.p1 === "x1")){ - $ERROR('#6: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 ); -} - -if(!(myObj.p2 === "b")){ - $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 ); -} - -if(!(myObj.p3 === undefined)){ - $ERROR('#8: myObj.p3 === undefined. Actual: myObj.p3 ==='+ myObj.p3 ); -} - -if(!(myObj.p4 === undefined)){ - $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 ); -} - -if(!(myObj.p5 === undefined)){ - $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 ); -} - -if(!(st_parseInt !== parseInt)){ - $ERROR('#11: myObj.parseInt !== parseInt'); -} - -if(!(st_NaN === "obj_NaN")){ - $ERROR('#12: myObj.NaN !== NaN'); -} - -if(!(st_Infinity !== Infinity)){ - $ERROR('#13: myObj.Infinity !== Infinity'); -} - -if(!(st_eval !== eval)){ - $ERROR('#14: myObj.eval !== eval'); -} - -if(!(st_parseFloat !== parseFloat)){ - $ERROR('#15: myObj.parseFloat !== parseFloat'); -} - -if(!(st_isNaN !== isNaN)){ - $ERROR('#16: myObj.isNaN !== isNaN'); -} - -if(!(st_isFinite !== isFinite)){ - $ERROR('#17: myObj.isFinite !== isFinite'); -} - -try{ - value; - $ERROR('#18: value is not defined'); -} -catch(e){ -} - -if(!(myObj.value === "myObj_value")){ - $ERROR('#19: myObj.value === "myObj_value". Actual: myObj.value ==='+ myObj.value ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.7_T3.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.7_T3.js deleted file mode 100644 index c12610f22..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.7_T3.js +++ /dev/null @@ -1,148 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A1.7_T3; - * @section: 12.10; - * @assertion: The with statement adds a computed object to the front of the - * scope chain of the current execution context; - * @description: Calling a function within "with" statement declared within the statement, leading to normal completion by "return"; - */ -this.p1 = 1; -this.p2 = 2; -this.p3 = 3; -var result = "result"; -var myObj = {p1: 'a', - p2: 'b', - p3: 'c', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';}, - parseInt : function(){return 'obj_parseInt';}, - NaN : 'obj_NaN', - Infinity : 'obj_Infinity', - eval : function(){return 'obj_eval';}, - parseFloat : function(){return 'obj_parseFloat';}, - isNaN : function(){return 'obj_isNaN';}, - isFinite : function(){return 'obj_isFinite';} -} -var del; -var st_p1 = "p1"; -var st_p2 = "p2"; -var st_p3 = "p3"; -var st_parseInt = "parseInt"; -var st_NaN = "NaN"; -var st_Infinity = "Infinity"; -var st_eval = "eval"; -var st_parseFloat = "parseFloat"; -var st_isNaN = "isNaN"; -var st_isFinite = "isFinite"; - -with(myObj){ - var f = function(){ - return value; - st_p1 = p1; - st_p2 = p2; - st_p3 = p3; - st_parseInt = parseInt; - st_NaN = NaN; - st_Infinity = Infinity; - st_eval = eval; - st_parseFloat = parseFloat; - st_isNaN = isNaN; - st_isFinite = isFinite; - p1 = 'x1'; - this.p2 = 'x2'; - del = delete p3; - var p4 = 'x4'; - p5 = 'x5'; - var value = 'value'; - } - result = f(); -} - -if(!(result === undefined)){ - $ERROR('#0: result === undefined. Actual: result ==='+ result ); -} - -if(!(p1 === 1)){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} - -if(!(p2 === 2)){ - $ERROR('#2: p2 === 2. Actual: p2 ==='+ p2 ); -} - -if(!(p3 === 3)){ - $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 ); -} - -try { - p4; - $ERROR('#4: p4 is not defined'); -} catch(e) { -} - -try { - p5; - $ERROR('#5: p5 is not defined'); -} catch(e) { -} - -if(!(myObj.p1 === "a")){ - $ERROR('#6: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 ); -} - -if(!(myObj.p2 === "b")){ - $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 ); -} - -if(!(myObj.p3 === "c")){ - $ERROR('#8: myObj.p3 === "c". Actual: myObj.p3 ==='+ myObj.p3 ); -} - -if(!(myObj.p4 === undefined)){ - $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 ); -} - -if(!(myObj.p5 === undefined)){ - $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 ); -} - -if(!(st_parseInt === "parseInt")){ - $ERROR('#11: myObj.parseInt === "parseInt". Actual: myObj.parseInt ==='+ myObj.parseInt ); -} - -if(!(st_NaN === "NaN")){ - $ERROR('#12: st_NaN === "NaN". Actual: st_NaN ==='+ st_NaN ); -} - -if(!(st_Infinity === "Infinity")){ - $ERROR('#13: st_Infinity === "Infinity". Actual: st_Infinity ==='+ st_Infinity ); -} - -if(!(st_eval === "eval")){ - $ERROR('#14: st_eval === "eval". Actual: st_eval ==='+ st_eval ); -} - -if(!(st_parseFloat === "parseFloat")){ - $ERROR('#15: st_parseFloat === "parseFloat". Actual: st_parseFloat ==='+ st_parseFloat ); -} - -if(!(st_isNaN === "isNaN")){ - $ERROR('#16: st_isNaN === "isNaN". Actual: st_isNaN ==='+ st_isNaN ); -} - -if(!(st_isFinite === "isFinite")){ - $ERROR('#17: st_isFinite === "isFinite". Actual: st_isFinite ==='+ st_isFinite ); -} - -try{ - value; - $ERROR('#18: value is not defined'); -} -catch(e){ -} - -if(!(myObj.value === "myObj_value")){ - $ERROR('#19: myObj.value === "myObj_value". Actual: myObj.value ==='+ myObj.value ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.7_T4.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.7_T4.js deleted file mode 100644 index d1ab16d78..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.7_T4.js +++ /dev/null @@ -1,150 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A1.7_T4; - * @section: 12.10; - * @assertion: The with statement adds a computed object to the front of the - * scope chain of the current execution context; - * @description: Calling a function within "with" statement declared within the statement, leading to completion by exception; - */ -this.p1 = 1; -this.p2 = 2; -this.p3 = 3; -var result = "result"; -var myObj = {p1: 'a', - p2: 'b', - p3: 'c', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';}, - parseInt : function(){return 'obj_parseInt';}, - NaN : 'obj_NaN', - Infinity : 'obj_Infinity', - eval : function(){return 'obj_eval';}, - parseFloat : function(){return 'obj_parseFloat';}, - isNaN : function(){return 'obj_isNaN';}, - isFinite : function(){return 'obj_isFinite';} -} -var del; -var st_p1 = "p1"; -var st_p2 = "p2"; -var st_p3 = "p3"; -var st_parseInt = "parseInt"; -var st_NaN = "NaN"; -var st_Infinity = "Infinity"; -var st_eval = "eval"; -var st_parseFloat = "parseFloat"; -var st_isNaN = "isNaN"; -var st_isFinite = "isFinite"; - -try { - with(myObj){ - var f = function(){ - st_p1 = p1; - st_p2 = p2; - st_p3 = p3; - st_parseInt = parseInt; - st_NaN = NaN; - st_Infinity = Infinity; - st_eval = eval; - st_parseFloat = parseFloat; - st_isNaN = isNaN; - st_isFinite = isFinite; - p1 = 'x1'; - this.p2 = 'x2'; - del = delete p3; - var p4 = 'x4'; - p5 = 'x5'; - var value = 'value'; - throw value; - } - f(); - } -} catch(e){ - result = e; -} - -if(!(result === "value")){ - $ERROR('#0: result === "value". Actual: result ==='+ result ); -} - -if(!(p1 === 1)){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} - -if(!(p2 === "x2")){ - $ERROR('#2: p2 === "x2". Actual: p2 ==='+ p2 ); -} - -if(!(p3 === 3)){ - $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 ); -} - -try { - p4; - $ERROR('#4: p4 is not defined'); -} catch(e) { -} - -if(!(p5 === "x5")){ - $ERROR('#5: p5 === "x5". Actual: p5 ==='+ p5 ); -} - -if(!(myObj.p1 === "x1")){ - $ERROR('#6: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 ); -} - -if(!(myObj.p2 === "b")){ - $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 ); -} - -if(!(myObj.p3 === undefined)){ - $ERROR('#8: myObj.p3 === undefined. Actual: myObj.p3 ==='+ myObj.p3 ); -} - -if(!(myObj.p4 === undefined)){ - $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 ); -} - -if(!(myObj.p5 === undefined)){ - $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 ); -} - -if(!(st_parseInt !== parseInt)){ - $ERROR('#11: myObj.parseInt !== parseInt'); -} - -if(!(st_NaN === "obj_NaN")){ - $ERROR('#12: myObj.NaN !== NaN'); -} - -if(!(st_Infinity !== Infinity)){ - $ERROR('#13: myObj.Infinity !== Infinity'); -} - -if(!(st_eval !== eval)){ - $ERROR('#14: myObj.eval !== eval'); -} - -if(!(st_parseFloat !== parseFloat)){ - $ERROR('#15: myObj.parseFloat !== parseFloat'); -} - -if(!(st_isNaN !== isNaN)){ - $ERROR('#16: myObj.isNaN !== isNaN'); -} - -if(!(st_isFinite !== isFinite)){ - $ERROR('#17: myObj.isFinite !== isFinite'); -} - -try{ - value; - $ERROR('#18: value is not defined'); -} -catch(e){ -} - -if(!(myObj.value === "myObj_value")){ - $ERROR('#19: myObj.value === "myObj_value". Actual: myObj.value ==='+ myObj.value ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.7_T5.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.7_T5.js deleted file mode 100644 index 7b4cef72c..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.7_T5.js +++ /dev/null @@ -1,152 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A1.7_T5; - * @section: 12.10; - * @assertion: The with statement adds a computed object to the front of the - * scope chain of the current execution context; - * @description: Calling a function within "with" statement declared within the statement, leading to completion by exception; - */ -this.p1 = 1; -this.p2 = 2; -this.p3 = 3; -var result = "result"; -var myObj = {p1: 'a', - p2: 'b', - p3: 'c', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';}, - parseInt : function(){return 'obj_parseInt';}, - NaN : 'obj_NaN', - Infinity : 'obj_Infinity', - eval : function(){return 'obj_eval';}, - parseFloat : function(){return 'obj_parseFloat';}, - isNaN : function(){return 'obj_isNaN';}, - isFinite : function(){return 'obj_isFinite';} -} -var del; -var st_p1 = "p1"; -var st_p2 = "p2"; -var st_p3 = "p3"; -var st_parseInt = "parseInt"; -var st_NaN = "NaN"; -var st_Infinity = "Infinity"; -var st_eval = "eval"; -var st_parseFloat = "parseFloat"; -var st_isNaN = "isNaN"; -var st_isFinite = "isFinite"; - -try { - with(myObj){ - var f = function(){ - throw value; - st_p1 = p1; - st_p2 = p2; - st_p3 = p3; - st_parseInt = parseInt; - st_NaN = NaN; - st_Infinity = Infinity; - st_eval = eval; - st_parseFloat = parseFloat; - st_isNaN = isNaN; - st_isFinite = isFinite; - p1 = 'x1'; - this.p2 = 'x2'; - del = delete p3; - var p4 = 'x4'; - p5 = 'x5'; - var value = 'value'; - } - f(); - } -} catch(e){ - result = e; -} - -if(!(result === undefined)){ - $ERROR('#0: result === undefined. Actual: result ==='+ result ); -} - -if(!(p1 === 1)){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} - -if(!(p2 === 2)){ - $ERROR('#2: p2 === 2. Actual: p2 ==='+ p2 ); -} - -if(!(p3 === 3)){ - $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 ); -} - -try { - p4; - $ERROR('#4: p4 is not defined'); -} catch(e) { -} - -try { - p5; - $ERROR('#5: p5 is not defined'); -} catch(e) { -} - -if(!(myObj.p1 === "a")){ - $ERROR('#6: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 ); -} - -if(!(myObj.p2 === "b")){ - $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 ); -} - -if(!(myObj.p3 === "c")){ - $ERROR('#8: myObj.p3 === "c". Actual: myObj.p3 ==='+ myObj.p3 ); -} - -if(!(myObj.p4 === undefined)){ - $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 ); -} - -if(!(myObj.p5 === undefined)){ - $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 ); -} - -if(!(st_parseInt === "parseInt")){ - $ERROR('#11: myObj.parseInt === "parseInt". Actual: myObj.parseInt ==='+ myObj.parseInt ); -} - -if(!(st_NaN === "NaN")){ - $ERROR('#12: st_NaN === "NaN". Actual: st_NaN ==='+ st_NaN ); -} - -if(!(st_Infinity === "Infinity")){ - $ERROR('#13: st_Infinity === "Infinity". Actual: st_Infinity ==='+ st_Infinity ); -} - -if(!(st_eval === "eval")){ - $ERROR('#14: st_eval === "eval". Actual: st_eval ==='+ st_eval ); -} - -if(!(st_parseFloat === "parseFloat")){ - $ERROR('#15: st_parseFloat === "parseFloat". Actual: st_parseFloat ==='+ st_parseFloat ); -} - -if(!(st_isNaN === "isNaN")){ - $ERROR('#16: st_isNaN === "isNaN". Actual: st_isNaN ==='+ st_isNaN ); -} - -if(!(st_isFinite === "isFinite")){ - $ERROR('#17: st_isFinite === "isFinite". Actual: st_isFinite ==='+ st_isFinite ); -} - -try{ - value; - $ERROR('#18: value is not defined'); -} -catch(e){ -} - -if(!(myObj.value === "myObj_value")){ - $ERROR('#19: myObj.value === "myObj_value". Actual: myObj.value ==='+ myObj.value ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.8_T1.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.8_T1.js deleted file mode 100644 index 79f3500ce..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.8_T1.js +++ /dev/null @@ -1,141 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A1.8_T1; - * @section: 12.10; - * @assertion: The with statement adds a computed object to the front of the - * scope chain of the current execution context; - * @description: Declaring function constructor within "with" statement, leading to normal completion; - */ -this.p1 = 1; -this.p2 = 2; -this.p3 = 3; -var result = "result"; -var myObj = {p1: 'a', - p2: 'b', - p3: 'c', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';}, - parseInt : function(){return 'obj_parseInt';}, - NaN : 'obj_NaN', - Infinity : 'obj_Infinity', - eval : function(){return 'obj_eval';}, - parseFloat : function(){return 'obj_parseFloat';}, - isNaN : function(){return 'obj_isNaN';}, - isFinite : function(){return 'obj_isFinite';} -} -var del; -var st_p1 = "p1"; -var st_p2 = "p2"; -var st_p3 = "p3"; -var st_parseInt = "parseInt"; -var st_NaN = "NaN"; -var st_Infinity = "Infinity"; -var st_eval = "eval"; -var st_parseFloat = "parseFloat"; -var st_isNaN = "isNaN"; -var st_isFinite = "isFinite"; - -with(myObj){ - var f = function(){ - st_p1 = p1; - st_p2 = p2; - st_p3 = p3; - st_parseInt = parseInt; - st_NaN = NaN; - st_Infinity = Infinity; - st_eval = eval; - st_parseFloat = parseFloat; - st_isNaN = isNaN; - st_isFinite = isFinite; - p1 = 'x1'; - this.p2 = 'x2'; - del = delete p3; - var p4 = 'x4'; - p5 = 'x5'; - var value = 'value'; - } - var obj = new f(); -} - -if(!(p1 === 1)){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} - -if(!(p2 === 2)){ - $ERROR('#2: p2 === 2. Actual: p2 ==='+ p2 ); -} - -if(!(p3 === 3)){ - $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 ); -} - -try { - p4; - $ERROR('#4: p4 is not defined'); -} catch(e) { -} - -if(!(p5 === "x5")){ - $ERROR('#5: p5 === "x5". Actual: p5 ==='+ p5 ); -} - -if(!(myObj.p1 === "x1")){ - $ERROR('#6: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 ); -} - -if(!(myObj.p2 === "b")){ - $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 ); -} - -if(!(myObj.p3 === undefined)){ - $ERROR('#8: myObj.p3 === undefined. Actual: myObj.p3 ==='+ myObj.p3 ); -} - -if(!(myObj.p4 === undefined)){ - $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 ); -} - -if(!(myObj.p5 === undefined)){ - $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 ); -} - -if(!(st_parseInt !== parseInt)){ - $ERROR('#11: myObj.parseInt !== parseInt'); -} - -if(!(st_NaN === "obj_NaN")){ - $ERROR('#12: myObj.NaN !== NaN'); -} - -if(!(st_Infinity !== Infinity)){ - $ERROR('#13: myObj.Infinity !== Infinity'); -} - -if(!(st_eval !== eval)){ - $ERROR('#14: myObj.eval !== eval'); -} - -if(!(st_parseFloat !== parseFloat)){ - $ERROR('#15: myObj.parseFloat !== parseFloat'); -} - -if(!(st_isNaN !== isNaN)){ - $ERROR('#16: myObj.isNaN !== isNaN'); -} - -if(!(st_isFinite !== isFinite)){ - $ERROR('#17: myObj.isFinite !== isFinite'); -} - -try{ - value; - $ERROR('#18: value is not defined'); -} -catch(e){ -} - -if(!(myObj.value === "myObj_value")){ - $ERROR('#19: myObj.value === "myObj_value". Actual: myObj.value ==='+ myObj.value ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.8_T2.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.8_T2.js deleted file mode 100644 index 140de2587..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.8_T2.js +++ /dev/null @@ -1,141 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A1.8_T2; - * @section: 12.10; - * @assertion: The with statement adds a computed object to the front of the - * scope chain of the current execution context; - * @description: Declaring function constructor within "with" statement, leading to normal completion by "return"; - */ -this.p1 = 1; -this.p2 = 2; -this.p3 = 3; -var result = "result"; -var myObj = {p1: 'a', - p2: 'b', - p3: 'c', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';}, - parseInt : function(){return 'obj_parseInt';}, - NaN : 'obj_NaN', - Infinity : 'obj_Infinity', - eval : function(){return 'obj_eval';}, - parseFloat : function(){return 'obj_parseFloat';}, - isNaN : function(){return 'obj_isNaN';}, - isFinite : function(){return 'obj_isFinite';} -} -var del; -var st_p1 = "p1"; -var st_p2 = "p2"; -var st_p3 = "p3"; -var st_parseInt = "parseInt"; -var st_NaN = "NaN"; -var st_Infinity = "Infinity"; -var st_eval = "eval"; -var st_parseFloat = "parseFloat"; -var st_isNaN = "isNaN"; -var st_isFinite = "isFinite"; - -with(myObj){ - var f = function(){ - st_p1 = p1; - st_p2 = p2; - st_p3 = p3; - st_parseInt = parseInt; - st_NaN = NaN; - st_Infinity = Infinity; - st_eval = eval; - st_parseFloat = parseFloat; - st_isNaN = isNaN; - st_isFinite = isFinite; - p1 = 'x1'; - this.p2 = 'x2'; - del = delete p3; - var p4 = 'x4'; - p5 = 'x5'; - var value = 'value'; - return value; - } - var obj = new f(); -} - -if(!(p1 === 1)){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} - -if(!(p2 === 2)){ - $ERROR('#2: p2 === 2. Actual: p2 ==='+ p2 ); -} - -if(!(p3 === 3)){ - $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 ); -} -try { - p4; - $ERROR('#4: p4 is not defined'); -} catch(e) { -} - -if(!(p5 === "x5")){ - $ERROR('#5: p5 === "x5". Actual: p5 ==='+ p5 ); -} - -if(!(myObj.p1 === "x1")){ - $ERROR('#6: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 ); -} - -if(!(myObj.p2 === "b")){ - $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 ); -} - -if(!(myObj.p3 === undefined)){ - $ERROR('#8: myObj.p3 === undefined. Actual: myObj.p3 ==='+ myObj.p3 ); -} - -if(!(myObj.p4 === undefined)){ - $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 ); -} - -if(!(myObj.p5 === undefined)){ - $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 ); -} - -if(!(st_parseInt !== parseInt)){ - $ERROR('#11: myObj.parseInt !== parseInt'); -} - -if(!(st_NaN === "obj_NaN")){ - $ERROR('#12: myObj.NaN !== NaN'); -} - -if(!(st_Infinity !== Infinity)){ - $ERROR('#13: myObj.Infinity !== Infinity'); -} - -if(!(st_eval !== eval)){ - $ERROR('#14: myObj.eval !== eval'); -} - -if(!(st_parseFloat !== parseFloat)){ - $ERROR('#15: myObj.parseFloat !== parseFloat'); -} - -if(!(st_isNaN !== isNaN)){ - $ERROR('#16: myObj.isNaN !== isNaN'); -} - -if(!(st_isFinite !== isFinite)){ - $ERROR('#17: myObj.isFinite !== isFinite'); -} - -try{ - value; - $ERROR('#18: value is not defined'); -} -catch(e){ -} - -if(!(myObj.value === "myObj_value")){ - $ERROR('#19: myObj.value === "myObj_value". Actual: myObj.value ==='+ myObj.value ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.8_T3.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.8_T3.js deleted file mode 100644 index ae9530bb0..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.8_T3.js +++ /dev/null @@ -1,144 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A1.8_T3; - * @section: 12.10; - * @assertion: The with statement adds a computed object to the front of the - * scope chain of the current execution context; - * @description: Declaring function constructor within "with" statement, leading to normal completion by "return"; - */ -this.p1 = 1; -this.p2 = 2; -this.p3 = 3; -var result = "result"; -var myObj = {p1: 'a', - p2: 'b', - p3: 'c', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';}, - parseInt : function(){return 'obj_parseInt';}, - NaN : 'obj_NaN', - Infinity : 'obj_Infinity', - eval : function(){return 'obj_eval';}, - parseFloat : function(){return 'obj_parseFloat';}, - isNaN : function(){return 'obj_isNaN';}, - isFinite : function(){return 'obj_isFinite';} -} -var del; -var st_p1 = "p1"; -var st_p2 = "p2"; -var st_p3 = "p3"; -var st_parseInt = "parseInt"; -var st_NaN = "NaN"; -var st_Infinity = "Infinity"; -var st_eval = "eval"; -var st_parseFloat = "parseFloat"; -var st_isNaN = "isNaN"; -var st_isFinite = "isFinite"; - -with(myObj){ - var f = function(){ - return value; - st_p1 = p1; - st_p2 = p2; - st_p3 = p3; - st_parseInt = parseInt; - st_NaN = NaN; - st_Infinity = Infinity; - st_eval = eval; - st_parseFloat = parseFloat; - st_isNaN = isNaN; - st_isFinite = isFinite; - p1 = 'x1'; - this.p2 = 'x2'; - del = delete p3; - var p4 = 'x4'; - p5 = 'x5'; - var value = 'value'; - } - var obj = new f(); -} - -if(!(p1 === 1)){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} - -if(!(p2 === 2)){ - $ERROR('#2: p2 === 2. Actual: p2 ==='+ p2 ); -} - -if(!(p3 === 3)){ - $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 ); -} - -try { - p4; - $ERROR('#4: p4 is not defined'); -} catch(e) { -} - -try { - p5; - $ERROR('#5: p5 is not defined'); -} catch(e) { -} - -if(!(myObj.p1 === "a")){ - $ERROR('#6: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 ); -} - -if(!(myObj.p2 === "b")){ - $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 ); -} - -if(!(myObj.p3 === "c")){ - $ERROR('#8: myObj.p3 === "c". Actual: myObj.p3 ==='+ myObj.p3 ); -} - -if(!(myObj.p4 === undefined)){ - $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 ); -} - -if(!(myObj.p5 === undefined)){ - $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 ); -} - -if(!(st_parseInt === "parseInt")){ - $ERROR('#11: myObj.parseInt === "parseInt". Actual: myObj.parseInt ==='+ myObj.parseInt ); -} - -if(!(st_NaN === "NaN")){ - $ERROR('#12: st_NaN === "NaN". Actual: st_NaN ==='+ st_NaN ); -} - -if(!(st_Infinity === "Infinity")){ - $ERROR('#13: st_Infinity === "Infinity". Actual: st_Infinity ==='+ st_Infinity ); -} - -if(!(st_eval === "eval")){ - $ERROR('#14: st_eval === "eval". Actual: st_eval ==='+ st_eval ); -} - -if(!(st_parseFloat === "parseFloat")){ - $ERROR('#15: st_parseFloat === "parseFloat". Actual: st_parseFloat ==='+ st_parseFloat ); -} - -if(!(st_isNaN === "isNaN")){ - $ERROR('#16: st_isNaN === "isNaN". Actual: st_isNaN ==='+ st_isNaN ); -} - -if(!(st_isFinite === "isFinite")){ - $ERROR('#17: st_isFinite === "isFinite". Actual: st_isFinite ==='+ st_isFinite ); -} - -try{ - value; - $ERROR('#18: value is not defined'); -} -catch(e){ -} - -if(!(myObj.value === "myObj_value")){ - $ERROR('#19: myObj.value === "myObj_value". Actual: myObj.value ==='+ myObj.value ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.8_T4.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.8_T4.js deleted file mode 100644 index 3762d23c4..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.8_T4.js +++ /dev/null @@ -1,149 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A1.8_T4; - * @section: 12.10; - * @assertion: The with statement adds a computed object to the front of the - * scope chain of the current execution context; - * @description: Declaring function constructor within "with" statement, leading to completion by exception; - */ -this.p1 = 1; -this.p2 = 2; -this.p3 = 3; -var result = "result"; -var myObj = {p1: 'a', - p2: 'b', - p3: 'c', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';}, - parseInt : function(){return 'obj_parseInt';}, - NaN : 'obj_NaN', - Infinity : 'obj_Infinity', - eval : function(){return 'obj_eval';}, - parseFloat : function(){return 'obj_parseFloat';}, - isNaN : function(){return 'obj_isNaN';}, - isFinite : function(){return 'obj_isFinite';} -} -var del; -var st_p1 = "p1"; -var st_p2 = "p2"; -var st_p3 = "p3"; -var st_parseInt = "parseInt"; -var st_NaN = "NaN"; -var st_Infinity = "Infinity"; -var st_eval = "eval"; -var st_parseFloat = "parseFloat"; -var st_isNaN = "isNaN"; -var st_isFinite = "isFinite"; - -try { - with(myObj){ - var f = function(){ - st_p1 = p1; - st_p2 = p2; - st_p3 = p3; - st_parseInt = parseInt; - st_NaN = NaN; - st_Infinity = Infinity; - st_eval = eval; - st_parseFloat = parseFloat; - st_isNaN = isNaN; - st_isFinite = isFinite; - p1 = 'x1'; - this.p2 = 'x2'; - del = delete p3; - var p4 = 'x4'; - p5 = 'x5'; - var value = 'value'; - throw value; - } - var obj = new f(); - } -} catch(e){ - result = e; -} - -if(!(result === "value")){ - $ERROR('#0: result === "value". Actual: result ==='+ result ); -} - -if(!(p1 === 1)){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} - -if(!(p2 === 2)){ - $ERROR('#2: p2 === 2. Actual: p2 ==='+ p2 ); -} - -if(!(p3 === 3)){ - $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 ); -} -try { - p4; - $ERROR('#4: p4 is not defined'); -} catch(e) { -} - -if(!(p5 === "x5")){ - $ERROR('#5: p5 === "x5". Actual: p5 ==='+ p5 ); -} - -if(!(myObj.p1 === "x1")){ - $ERROR('#6: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 ); -} - -if(!(myObj.p2 === "b")){ - $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 ); -} - -if(!(myObj.p3 === undefined)){ - $ERROR('#8: myObj.p3 === undefined. Actual: myObj.p3 ==='+ myObj.p3 ); -} - -if(!(myObj.p4 === undefined)){ - $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 ); -} - -if(!(myObj.p5 === undefined)){ - $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 ); -} - -if(!(st_parseInt !== parseInt)){ - $ERROR('#11: myObj.parseInt !== parseInt'); -} - -if(!(st_NaN === "obj_NaN")){ - $ERROR('#12: myObj.NaN !== NaN'); -} - -if(!(st_Infinity !== Infinity)){ - $ERROR('#13: myObj.Infinity !== Infinity'); -} - -if(!(st_eval !== eval)){ - $ERROR('#14: myObj.eval !== eval'); -} - -if(!(st_parseFloat !== parseFloat)){ - $ERROR('#15: myObj.parseFloat !== parseFloat'); -} - -if(!(st_isNaN !== isNaN)){ - $ERROR('#16: myObj.isNaN !== isNaN'); -} - -if(!(st_isFinite !== isFinite)){ - $ERROR('#17: myObj.isFinite !== isFinite'); -} - -try{ - value; - $ERROR('#18: value is not defined'); -} -catch(e){ -} - -if(!(myObj.value === "myObj_value")){ - $ERROR('#19: myObj.value === "myObj_value". Actual: myObj.value ==='+ myObj.value ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.8_T5.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.8_T5.js deleted file mode 100644 index 9d832becf..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.8_T5.js +++ /dev/null @@ -1,152 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A1.8_T5; - * @section: 12.10; - * @assertion: The with statement adds a computed object to the front of the - * scope chain of the current execution context; - * @description: Declaring function constructor within "with" statement, leading to completion by exception; - */ -this.p1 = 1; -this.p2 = 2; -this.p3 = 3; -var result = "result"; -var myObj = {p1: 'a', - p2: 'b', - p3: 'c', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';}, - parseInt : function(){return 'obj_parseInt';}, - NaN : 'obj_NaN', - Infinity : 'obj_Infinity', - eval : function(){return 'obj_eval';}, - parseFloat : function(){return 'obj_parseFloat';}, - isNaN : function(){return 'obj_isNaN';}, - isFinite : function(){return 'obj_isFinite';} -} -var del; -var st_p1 = "p1"; -var st_p2 = "p2"; -var st_p3 = "p3"; -var st_parseInt = "parseInt"; -var st_NaN = "NaN"; -var st_Infinity = "Infinity"; -var st_eval = "eval"; -var st_parseFloat = "parseFloat"; -var st_isNaN = "isNaN"; -var st_isFinite = "isFinite"; - -try { - with(myObj){ - var f = function(){ - throw value; - st_p1 = p1; - st_p2 = p2; - st_p3 = p3; - st_parseInt = parseInt; - st_NaN = NaN; - st_Infinity = Infinity; - st_eval = eval; - st_parseFloat = parseFloat; - st_isNaN = isNaN; - st_isFinite = isFinite; - p1 = 'x1'; - this.p2 = 'x2'; - del = delete p3; - var p4 = 'x4'; - p5 = 'x5'; - var value = 'value'; - } - var obj = new f(); - } -} catch(e){ - result = e; -} - -if(!(result === undefined)){ - $ERROR('#0: result === undefined. Actual: result ==='+ result ); -} - -if(!(p1 === 1)){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} - -if(!(p2 === 2)){ - $ERROR('#2: p2 === 2. Actual: p2 ==='+ p2 ); -} - -if(!(p3 === 3)){ - $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 ); -} - -try { - p4; - $ERROR('#4: p4 is not defined'); -} catch(e) { -} - -try { - p5; - $ERROR('#5: p5 is not defined'); -} catch(e) { -} - -if(!(myObj.p1 === "a")){ - $ERROR('#6: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 ); -} - -if(!(myObj.p2 === "b")){ - $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 ); -} - -if(!(myObj.p3 === "c")){ - $ERROR('#8: myObj.p3 === "c". Actual: myObj.p3 ==='+ myObj.p3 ); -} - -if(!(myObj.p4 === undefined)){ - $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 ); -} - -if(!(myObj.p5 === undefined)){ - $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 ); -} - -if(!(st_parseInt === "parseInt")){ - $ERROR('#11: myObj.parseInt === "parseInt". Actual: myObj.parseInt ==='+ myObj.parseInt ); -} - -if(!(st_NaN === "NaN")){ - $ERROR('#12: st_NaN === "NaN". Actual: st_NaN ==='+ st_NaN ); -} - -if(!(st_Infinity === "Infinity")){ - $ERROR('#13: st_Infinity === "Infinity". Actual: st_Infinity ==='+ st_Infinity ); -} - -if(!(st_eval === "eval")){ - $ERROR('#14: st_eval === "eval". Actual: st_eval ==='+ st_eval ); -} - -if(!(st_parseFloat === "parseFloat")){ - $ERROR('#15: st_parseFloat === "parseFloat". Actual: st_parseFloat ==='+ st_parseFloat ); -} - -if(!(st_isNaN === "isNaN")){ - $ERROR('#16: st_isNaN === "isNaN". Actual: st_isNaN ==='+ st_isNaN ); -} - -if(!(st_isFinite === "isFinite")){ - $ERROR('#17: st_isFinite === "isFinite". Actual: st_isFinite ==='+ st_isFinite ); -} - -try{ - value; - $ERROR('#18: value is not defined'); -} -catch(e){ -} - -if(!(myObj.value === "myObj_value")){ - $ERROR('#19: myObj.value === "myObj_value". Actual: myObj.value ==='+ myObj.value ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.9_T1.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.9_T1.js deleted file mode 100644 index d9ed8fe08..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.9_T1.js +++ /dev/null @@ -1,141 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A1.9_T1; - * @section: 12.10; - * @assertion: The with statement adds a computed object to the front of the - * scope chain of the current execution context; - * @description: Using "for-in" statement within "with" statement, leading to normal completion; - */ -this.p1 = 1; -this.p2 = 2; -this.p3 = 3; -var result = "result"; -var myObj = {p1: 'a', - p2: 'b', - p3: 'c', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';}, - parseInt : function(){return 'obj_parseInt';}, - NaN : 'obj_NaN', - Infinity : 'obj_Infinity', - eval : function(){return 'obj_eval';}, - parseFloat : function(){return 'obj_parseFloat';}, - isNaN : function(){return 'obj_isNaN';}, - isFinite : function(){return 'obj_isFinite';} -} -var del; -var st_p1 = "p1"; -var st_p2 = "p2"; -var st_p3 = "p3"; -var st_parseInt = "parseInt"; -var st_NaN = "NaN"; -var st_Infinity = "Infinity"; -var st_eval = "eval"; -var st_parseFloat = "parseFloat"; -var st_isNaN = "isNaN"; -var st_isFinite = "isFinite"; - -with(myObj){ - for(var prop in myObj){ - if(prop === 'p1') { - st_p1 = p1; - p1 = 'x1'; - } - if(prop === 'p2') { - st_p2 = p2; - this.p2 = 'x2'; - } - if(prop === 'p3') { - st_p3 = p3; - del = delete p3; - } - if(prop === 'parseInt') st_parseInt = parseInt; - if(prop === 'NaN') st_NaN = NaN; - if(prop === 'Infinity') st_Infinity = Infinity; - if(prop === 'eval') st_eval = eval; - if(prop === 'parseFloat') st_parseFloat = parseFloat; - if(prop === 'isNaN') st_isNaN = isNaN; - if(prop === 'isFinite') st_isFinite = isFinite; - var p4 = 'x4'; - p5 = 'x5'; - var value = 'value'; - } -} - -if(!(p1 === 1)){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} - -if(!(p2 === "x2")){ - $ERROR('#2: p2 === "x2". Actual: p2 ==='+ p2 ); -} - -if(!(p3 === 3)){ - $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 ); -} - -if(!(p4 === "x4")){ - $ERROR('#4: p4 === "x4". Actual: p4 ==='+ p4 ); -} - -if(!(p5 === "x5")){ - $ERROR('#5: p5 === "x5". Actual: p5 ==='+ p5 ); -} - -if(!(myObj.p1 === "x1")){ - $ERROR('#6: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 ); -} - -if(!(myObj.p2 === "b")){ - $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 ); -} - -if(!(myObj.p3 === undefined)){ - $ERROR('#8: myObj.p3 === undefined. Actual: myObj.p3 ==='+ myObj.p3 ); -} - -if(!(myObj.p4 === undefined)){ - $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 ); -} - -if(!(myObj.p5 === undefined)){ - $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 ); -} - -if(!(st_parseInt !== parseInt)){ - $ERROR('#11: myObj.parseInt !== parseInt'); -} - -if(!(st_NaN === "obj_NaN")){ - $ERROR('#12: myObj.NaN !== NaN'); -} - -if(!(st_Infinity !== Infinity)){ - $ERROR('#13: myObj.Infinity !== Infinity'); -} - -if(!(st_eval !== eval)){ - $ERROR('#14: myObj.eval !== eval'); -} - -if(!(st_parseFloat !== parseFloat)){ - $ERROR('#15: myObj.parseFloat !== parseFloat'); -} - -if(!(st_isNaN !== isNaN)){ - $ERROR('#16: myObj.isNaN !== isNaN'); -} - -if(!(st_isFinite !== isFinite)){ - $ERROR('#17: myObj.isFinite !== isFinite'); -} - -if(!(value === undefined)){ - $ERROR('#18: value === undefined. Actual: value ==='+ value ); -} - -if(!(myObj.value === "value")){ - $ERROR('#19: myObj.value === "value". Actual: myObj.value ==='+ myObj.value ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.9_T2.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.9_T2.js deleted file mode 100644 index c71cdf16d..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.9_T2.js +++ /dev/null @@ -1,136 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A1.9_T2; - * @section: 12.10; - * @assertion: The with statement adds a computed object to the front of the - * scope chain of the current execution context; - * @description: Using "for-in" statement within "with" statement, leading to completion by break; - */ -this.p1 = 1; -this.p2 = 2; -this.p3 = 3; -var result = "result"; -var myObj = {p1: 'a', - p2: 'b', - p3: 'c', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';}, - parseInt : function(){return 'obj_parseInt';}, - NaN : 'obj_NaN', - Infinity : 'obj_Infinity', - eval : function(){return 'obj_eval';}, - parseFloat : function(){return 'obj_parseFloat';}, - isNaN : function(){return 'obj_isNaN';}, - isFinite : function(){return 'obj_isFinite';} -} -var del; -var st_p1 = "p1"; -var st_p2 = "p2"; -var st_p3 = "p3"; -var st_parseInt = "parseInt"; -var st_NaN = "NaN"; -var st_Infinity = "Infinity"; -var st_eval = "eval"; -var st_parseFloat = "parseFloat"; -var st_isNaN = "isNaN"; -var st_isFinite = "isFinite"; - -with(myObj){ - for(var prop in myObj){ - st_p1 = p1; - p1 = 'x1'; - st_p2 = p2; - this.p2 = 'x2'; - st_p3 = p3; - del = delete p3; - st_parseInt = parseInt; - st_NaN = NaN; - st_Infinity = Infinity; - st_eval = eval; - st_parseFloat = parseFloat; - st_isNaN = isNaN; - st_isFinite = isFinite; - var p4 = 'x4'; - p5 = 'x5'; - var value = 'value'; - break; - } -} - -if(!(p1 === 1)){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} - -if(!(p2 === "x2")){ - $ERROR('#2: p2 === "x2". Actual: p2 ==='+ p2 ); -} - -if(!(p3 === 3)){ - $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 ); -} - -if(!(p4 === "x4")){ - $ERROR('#4: p4 === "x4". Actual: p4 ==='+ p4 ); -} - -if(!(p5 === "x5")){ - $ERROR('#5: p5 === "x5". Actual: p5 ==='+ p5 ); -} - -if(!(myObj.p1 === "x1")){ - $ERROR('#6: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 ); -} - -if(!(myObj.p2 === "b")){ - $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 ); -} - -if(!(myObj.p3 === undefined)){ - $ERROR('#8: myObj.p3 === undefined. Actual: myObj.p3 ==='+ myObj.p3 ); -} - -if(!(myObj.p4 === undefined)){ - $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 ); -} - -if(!(myObj.p5 === undefined)){ - $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 ); -} - -if(!(st_parseInt !== parseInt)){ - $ERROR('#11: myObj.parseInt !== parseInt'); -} - -if(!(st_NaN === "obj_NaN")){ - $ERROR('#12: myObj.NaN !== NaN'); -} - -if(!(st_Infinity !== Infinity)){ - $ERROR('#13: myObj.Infinity !== Infinity'); -} - -if(!(st_eval !== eval)){ - $ERROR('#14: myObj.eval !== eval'); -} - -if(!(st_parseFloat !== parseFloat)){ - $ERROR('#15: myObj.parseFloat !== parseFloat'); -} - -if(!(st_isNaN !== isNaN)){ - $ERROR('#16: myObj.isNaN !== isNaN'); -} - -if(!(st_isFinite !== isFinite)){ - $ERROR('#17: myObj.isFinite !== isFinite'); -} - -if(!(value === undefined)){ - $ERROR('#18: value === undefined. Actual: value ==='+ value ); -} - -if(!(myObj.value === "value")){ - $ERROR('#19: myObj.value === "value". Actual: myObj.value ==='+ myObj.value ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.9_T3.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.9_T3.js deleted file mode 100644 index e9a0d589c..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A1.9_T3.js +++ /dev/null @@ -1,144 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A1.9_T3; - * @section: 12.10; - * @assertion: The with statement adds a computed object to the front of the - * scope chain of the current execution context; - * @description: Using "for-in" statement within "with" statement, leading to completion by break; - */ -this.p1 = 1; -this.p2 = 2; -this.p3 = 3; -var result = "result"; -var myObj = {p1: 'a', - p2: 'b', - p3: 'c', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';}, - parseInt : function(){return 'obj_parseInt';}, - NaN : 'obj_NaN', - Infinity : 'obj_Infinity', - eval : function(){return 'obj_eval';}, - parseFloat : function(){return 'obj_parseFloat';}, - isNaN : function(){return 'obj_isNaN';}, - isFinite : function(){return 'obj_isFinite';} -} -var del; -var st_p1 = "p1"; -var st_p2 = "p2"; -var st_p3 = "p3"; -var st_parseInt = "parseInt"; -var st_NaN = "NaN"; -var st_Infinity = "Infinity"; -var st_eval = "eval"; -var st_parseFloat = "parseFloat"; -var st_isNaN = "isNaN"; -var st_isFinite = "isFinite"; - -with(myObj){ - for(var prop in myObj){ - break; - if(prop === 'p1') { - st_p1 = p1; - p1 = 'x1'; - } - if(prop === 'p2') { - st_p2 = p2; - this.p2 = 'x2'; - } - if(prop === 'p3') { - st_p3 = p3; - del = delete p3; - } - if(prop === 'parseInt') st_parseInt = parseInt; - if(prop === 'NaN') st_NaN = NaN; - if(prop === 'Infinity') st_Infinity = Infinity; - if(prop === 'eval') st_eval = eval; - if(prop === 'parseFloat') st_parseFloat = parseFloat; - if(prop === 'isNaN') st_isNaN = isNaN; - if(prop === 'isFinite') st_isFinite = isFinite; - var p4 = 'x4'; - p5 = 'x5'; - var value = 'value'; - } -} - -if(!(p1 === 1)){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} - -if(!(p2 === 2)){ - $ERROR('#2: p2 === 2. Actual: p2 ==='+ p2 ); -} - -if(!(p3 === 3)){ - $ERROR('#3: p3 === 3. Actual: p3 ==='+ p3 ); -} - -if(!(p4 === undefined)){ - $ERROR('#4: p4 === undefined. Actual: p4 ==='+ p4 ); -} - -try { - p5; - $ERROR('#5: p5 is not defined'); -} catch(e) { -} - -if(!(myObj.p1 === "a")){ - $ERROR('#6: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 ); -} - -if(!(myObj.p2 === "b")){ - $ERROR('#7: myObj.p2 === "b". Actual: myObj.p2 ==='+ myObj.p2 ); -} - -if(!(myObj.p3 === "c")){ - $ERROR('#8: myObj.p3 === "c". Actual: myObj.p3 ==='+ myObj.p3 ); -} - -if(!(myObj.p4 === undefined)){ - $ERROR('#9: myObj.p4 === undefined. Actual: myObj.p4 ==='+ myObj.p4 ); -} - -if(!(myObj.p5 === undefined)){ - $ERROR('#10: myObj.p5 === undefined. Actual: myObj.p5 ==='+ myObj.p5 ); -} - -if(!(st_parseInt === "parseInt")){ - $ERROR('#11: myObj.parseInt === "parseInt". Actual: myObj.parseInt ==='+ myObj.parseInt ); -} - -if(!(st_NaN === "NaN")){ - $ERROR('#12: st_NaN === "NaN". Actual: st_NaN ==='+ st_NaN ); -} - -if(!(st_Infinity === "Infinity")){ - $ERROR('#13: st_Infinity === "Infinity". Actual: st_Infinity ==='+ st_Infinity ); -} - -if(!(st_eval === "eval")){ - $ERROR('#14: st_eval === "eval". Actual: st_eval ==='+ st_eval ); -} - -if(!(st_parseFloat === "parseFloat")){ - $ERROR('#15: st_parseFloat === "parseFloat". Actual: st_parseFloat ==='+ st_parseFloat ); -} - -if(!(st_isNaN === "isNaN")){ - $ERROR('#16: st_isNaN === "isNaN". Actual: st_isNaN ==='+ st_isNaN ); -} - -if(!(st_isFinite === "isFinite")){ - $ERROR('#17: st_isFinite === "isFinite". Actual: st_isFinite ==='+ st_isFinite ); -} - -if(!(value === undefined)){ - $ERROR('#18: value === undefined. Actual: value ==='+ value ); -} - -if(!(myObj.value === "myObj_value")){ - $ERROR('#19: myObj.value === "myObj_value". Actual: myObj.value ==='+ myObj.value ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.10_T1.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.10_T1.js deleted file mode 100644 index 74e97afab..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.10_T1.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A3.10_T1; - * @section: 12.10; - * @assertion: No matter how control leaves the embedded 'Statement', - * the scope chain is always restored to its former state; - * @description: Using iteration statement within "with" statement, leading to normal completion; - */ - -this.p1 = 1; - -var result = "result"; - -var myObj = { - p1: 'a', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';} -} - -with(myObj){ - do{ - p1 = 'x1'; - } while(false); -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if(p1 !== 1){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if(myObj.p1 !== "x1"){ - $ERROR('#2: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - - - diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.10_T2.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.10_T2.js deleted file mode 100644 index 6f454fad2..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.10_T2.js +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A3.10_T2; - * @section: 12.10; - * @assertion: No matter how control leaves the embedded 'Statement', - * the scope chain is always restored to its former state; - * @description: Using iteration statement within "with" statement, leading completion by exception; - */ - -this.p1 = 1; - -var result = "result"; - -var myObj = { - p1: 'a', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';} -} - -try { - with(myObj){ - do{ - p1 = 'x1'; - throw value; - } while(false); - } -} catch(e){ - result = p1; -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if(result !== 1){ - $ERROR('#1: result === 1. Actual: result ==='+ result ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if(p1 !== 1){ - $ERROR('#2: p1 === 1. Actual: p1 ==='+ p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if(myObj.p1 !== "x1"){ - $ERROR('#3: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.10_T3.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.10_T3.js deleted file mode 100644 index 50210d884..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.10_T3.js +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A3.10_T3; - * @section: 12.10; - * @assertion: No matter how control leaves the embedded 'Statement', - * the scope chain is always restored to its former state; - * @description: Using iteration statement within "with" statement, leading completion by exception; - */ - -this.p1 = 1; - -var result = "result"; - -var myObj = { - p1: 'a', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';} -} - -try { - with(myObj){ - do{ - throw value; - p1 = 'x1'; - } while(false); - } -} catch(e){ - result = p1; -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if(result !== 1){ - $ERROR('#1: result === 1. Actual: result ==='+ result ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if(p1 !== 1){ - $ERROR('#2: p1 === 1. Actual: p1 ==='+ p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if(myObj.p1 !== "a"){ - $ERROR('#3: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.10_T4.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.10_T4.js deleted file mode 100644 index 975032e8e..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.10_T4.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A3.10_T4; - * @section: 12.10; - * @assertion: No matter how control leaves the embedded 'Statement', - * the scope chain is always restored to its former state; - * @description: Using iteration statement within "with" statement, leading completion be break; - */ - -this.p1 = 1; - -var result = "result"; - -var myObj = { - p1: 'a', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';} -} - -with(myObj){ - do{ - p1 = 'x1'; - break; - } while(false); -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if(p1 !== 1){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if(myObj.p1 !== "x1"){ - $ERROR('#2: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - - diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.10_T5.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.10_T5.js deleted file mode 100644 index b4fe3335d..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.10_T5.js +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A3.10_T5; - * @section: 12.10; - * @assertion: No matter how control leaves the embedded 'Statement', - * the scope chain is always restored to its former state; - * @description: Using iteration statement within "with" statement, leading completion be break; - */ - -this.p1 = 1; - -var result = "result"; - -var myObj = { - p1: 'a', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';} -} - -with(myObj){ - do{ - break; - p1 = 'x1'; - } while(false); -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if(p1 !== 1){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if(myObj.p1 !== "a"){ - $ERROR('#2: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.11_T1.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.11_T1.js deleted file mode 100644 index a6d84ab32..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.11_T1.js +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A3.11_T1; - * @section: 12.10; - * @assertion: No matter how control leaves the embedded 'Statement', - * the scope chain is always restored to its former state; - * @description: Calling a function within "with" statement declared without the statement, leading to normal completion; - */ -this.p1 = 1; -var result = "result"; -var myObj = {p1: 'a', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';} -} - -var f = function(){ - p1 = 'x1'; -} - -with(myObj){ - f(); -} - -if(!(p1 === "x1")){ - $ERROR('#1: p1 === "x1". Actual: p1 ==='+ p1 ); -} - -if(!(myObj.p1 === "a")){ - $ERROR('#2: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.11_T2.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.11_T2.js deleted file mode 100644 index f3da1dcd4..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.11_T2.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A3.11_T2; - * @section: 12.10; - * @assertion: No matter how control leaves the embedded 'Statement', - * the scope chain is always restored to its former state; - * @description: Calling a function within "with" statement declared without the statement, leading to normal completion by "return"; - */ -this.p1 = 1; -var result = "result"; -var value = "value"; -var myObj = {p1: 'a', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';} -} - -var f = function(){ - p1 = 'x1'; - return value; -} - -with(myObj){ - result = f(); -} - -if(!(p1 === "x1")){ - $ERROR('#1: p1 === "x1". Actual: p1 ==='+ p1 ); -} - -if(!(myObj.p1 === "a")){ - $ERROR('#2: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 ); -} - -if(!(result === "value")){ - $ERROR('#3: result === "value". Actual: result ==='+ result ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.11_T3.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.11_T3.js deleted file mode 100644 index 67b8d43a7..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.11_T3.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A3.11_T3; - * @section: 12.10; - * @assertion: No matter how control leaves the embedded 'Statement', - * the scope chain is always restored to its former state; - * @description: Calling a function within "with" statement declared without the statement, leading to normal completion by "return"; - */ -this.p1 = 1; -var result = "result"; -var value = "value"; -var myObj = {p1: 'a', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';} -} - -var f = function(){ - return value; - p1 = 'x1'; -} - -with(myObj){ - result = f(); -} - -if(!(p1 === 1)){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} - -if(!(myObj.p1 === "a")){ - $ERROR('#2: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 ); -} - -if(!(result === "value")){ - $ERROR('#3: result === "value". Actual: result ==='+ result ); -} - diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.11_T4.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.11_T4.js deleted file mode 100644 index 3bb280bce..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.11_T4.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A3.11_T4; - * @section: 12.10; - * @assertion: No matter how control leaves the embedded 'Statement', - * the scope chain is always restored to its former state; - * @description: Calling a function within "with" statement declared without the statement, leading to completion by exception; - */ -this.p1 = 1; -var result = "result"; -var value = "value"; -var myObj = {p1: 'a', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';} -} - -try { - var f = function(){ - p1 = 'x1'; - throw value; - } - - with(myObj){ - f(); - } -} catch(e){ - result = e; -} - -if(!(p1 === "x1")){ - $ERROR('#1: p1 === "x1". Actual: p1 ==='+ p1 ); -} - -if(!(myObj.p1 === "a")){ - $ERROR('#2: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 ); -} - -if(!(result === "value")){ - $ERROR('#3: result === "value". Actual: result ==='+ result ); -} - - diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.11_T5.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.11_T5.js deleted file mode 100644 index d0883b511..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.11_T5.js +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A3.11_T5; - * @section: 12.10; - * @assertion: No matter how control leaves the embedded 'Statement', - * the scope chain is always restored to its former state; - * @description: Calling a function within "with" statement declared without the statement, leading to completion by exception; - */ -this.p1 = 1; -var result = "result"; -var value = "value"; -var myObj = {p1: 'a', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';} -} - -try { - var f = function(){ - throw value; - p1 = 'x1'; - } - with(myObj){ - f(); - } -} catch(e){ - result = e; -} - -if(!(p1 === 1)){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} - -if(!(myObj.p1 === "a")){ - $ERROR('#2: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 ); -} - -if(!(result === "value")){ - $ERROR('#3: result === "value". Actual: result ==='+ result ); -} - diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.12_T1.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.12_T1.js deleted file mode 100644 index ccd22db8c..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.12_T1.js +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A3.12_T1; - * @section: 12.10; - * @assertion: No matter how control leaves the embedded 'Statement', - * the scope chain is always restored to its former state; - * @description: Calling a function without "with" statement declared within the statement, leading to normal completion; - */ -this.p1 = 1; -var result = "result"; -var myObj = {p1: 'a', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';} -} - -with(myObj){ - var f = function(){ - p1 = 'x1'; - } -} - -f(); - -if(!(p1 === 1)){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} - -if(!(myObj.p1 === "x1")){ - $ERROR('#2: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.12_T2.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.12_T2.js deleted file mode 100644 index 9de90b8a0..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.12_T2.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A3.12_T2; - * @section: 12.10; - * @assertion: No matter how control leaves the embedded 'Statement', - * the scope chain is always restored to its former state; - * @description: Calling a function without "with" statement declared within the statement, leading to normal completion by "return"; - */ -this.p1 = 1; -var result = "result"; -var value = "value"; -var myObj = {p1: 'a', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';} -} - -with(myObj){ - var f = function(){ - p1 = 'x1' - return value; - } -} - -result = f(); - -if(!(p1 === 1)){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} - -if(!(myObj.p1 === "x1")){ - $ERROR('#2: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 ); -} - -if(!(result === "myObj_value")){ - $ERROR('#3: result === "myObj_value". Actual: result ==='+ result ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.12_T3.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.12_T3.js deleted file mode 100644 index 0625e7c3e..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.12_T3.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A3.12_T3; - * @section: 12.10; - * @assertion: No matter how control leaves the embedded 'Statement', - * the scope chain is always restored to its former state; - * @description: Calling a function without "with" statement declared within the statement, leading to normal completion by "return"; - */ -this.p1 = 1; -var result = "result"; -var value = "value"; -var myObj = {p1: 'a', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';} -} - -with(myObj){ - var f = function(){ - return value; - p1 = 'x1'; - } -} -result = f(); - -if(!(p1 === 1)){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} - -if(!(myObj.p1 === "a")){ - $ERROR('#2: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 ); -} - -if(!(result === "myObj_value")){ - $ERROR('#3: result === "myObj_value". Actual: result ==='+ result ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.12_T4.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.12_T4.js deleted file mode 100644 index c9d2f8e0b..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.12_T4.js +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A3.12_T4; - * @section: 12.10; - * @assertion: No matter how control leaves the embedded 'Statement', - * the scope chain is always restored to its former state; - * @description: Calling a function without "with" statement declared within the statement, leading to completion by exception; - */ -this.p1 = 1; -var result = "result"; -var value = "value"; -var myObj = {p1: 'a', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';} -} - -try { - with(myObj){ - var f = function(){ - p1 = 'x1'; - throw value; - } - } - f(); -} catch(e){ - result = e; -} - -if(!(p1 === 1)){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} - -if(!(myObj.p1 === "x1")){ - $ERROR('#2: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 ); -} - -if(!(result === "myObj_value")){ - $ERROR('#3: result === "myObj_value". Actual: result ==='+ result ); -} - diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.12_T5.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.12_T5.js deleted file mode 100644 index 102d2569f..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.12_T5.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A3.12_T5; - * @section: 12.10; - * @assertion: No matter how control leaves the embedded 'Statement', - * the scope chain is always restored to its former state; - * @description: Calling a function without "with" statement declared within the statement, leading to completion by exception; - */ -this.p1 = 1; -var result = "result"; -var value = "value"; -var myObj = {p1: 'a', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';} -} - -try { - with(myObj){ - var f = function(){ - throw value; - p1 = 'x1'; - } - } - f(); -} catch(e){ - result = e; -} - -if(!(p1 === 1)){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} - -if(!(myObj.p1 === "a")){ - $ERROR('#2: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 ); -} - -if(!(result === "myObj_value")){ - $ERROR('#3: result === "myObj_value". Actual: result ==='+ result ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.1_T1.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.1_T1.js deleted file mode 100644 index bca101cc4..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.1_T1.js +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A3.1_T1; - * @section: 12.10; - * @assertion: No matter how control leaves the embedded 'Statement', - * the scope chain is always restored to its former state; - * @description: Using "with" statement within global context - normal completion; - */ - -this.p1 = 1; - -var result = "result"; - -var myObj = { - p1: 'a', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';} -} - - -with(myObj){ - p1 = 'x1'; -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if(p1 !== 1){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if(myObj.p1 !== "x1"){ - $ERROR('#2: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - - diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.1_T2.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.1_T2.js deleted file mode 100644 index 9e3047519..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.1_T2.js +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A3.1_T2; - * @section: 12.10; - * @assertion: No matter how control leaves the embedded 'Statement', - * the scope chain is always restored to its former state; - * @description: Using "with" statement within global context, leading to completion by exception; - */ - -this.p1 = 1; - -var result = "result"; - -var myObj = { - p1: 'a', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';} -} - -try { - - with(myObj){ - - p1 = 'x1' - throw value; - - } -} catch(e){ - result = p1; -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if(result !== 1){ - $ERROR('#1: result === 1. Actual: result ==='+ result ); -} -// -////////////////////////////////////////////////////////////////////////////// - - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if(p1 !== 1){ - $ERROR('#2: p1 === 1. Actual: p1 ==='+ p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (myObj.p1 !== "x1") { - $ERROR('#3: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.1_T3.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.1_T3.js deleted file mode 100644 index a8ed998ec..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.1_T3.js +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A3.1_T3; - * @section: 12.10; - * @assertion: No matter how control leaves the embedded 'Statement', - * the scope chain is always restored to its former state; - * @description: Using "with" statement within global context, leading to completion by exception; - */ -this.p1 = 1; -var result = "result"; -var myObj = {p1: 'a', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';} -} - -try { - - with(myObj){ - - throw value; - p1 = 'x1' - } -} catch(e){ - result = p1; -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if(!(result === 1)){ - $ERROR('#1: result === 1. Actual: result ==='+ result ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if(!(p1 === 1)){ - $ERROR('#2: p1 === 1. Actual: p1 ==='+ p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if(!(myObj.p1 === "a")){ - $ERROR('#3: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - - - - diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.2_T1.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.2_T1.js deleted file mode 100644 index 119878ab4..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.2_T1.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A3.2_T1; - * @section: 12.10; - * @assertion: No matter how control leaves the embedded 'Statement', - * the scope chain is always restored to its former state; - * @description: Declaring "with" statement within a function body, leading to normal completion; - */ - -this.p1 = 1; - -var result = "result"; - -var myObj = { - p1: 'a', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';} -} - -var f = function(){ - with(myObj){ - p1 = 'x1'; - } -} - -f(); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if(p1 !== 1){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if(myObj.p1 !== "x1"){ - $ERROR('#2: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.2_T2.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.2_T2.js deleted file mode 100644 index 6fff5bdee..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.2_T2.js +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A3.2_T2; - * @section: 12.10; - * @assertion: No matter how control leaves the embedded 'Statement', - * the scope chain is always restored to its former state; - * @description: Declaring "with" statement within a function body, leading to normal completion by "return"; - */ - -this.p1 = 1; - -var result = "result"; - -var myObj = { - p1: 'a', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';} -} - -var f = function(){ - with(myObj){ - p1 = 'x1'; - return value; - } -}; - -f(); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if(p1 !== 1){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if(myObj.p1 !== "x1"){ - $ERROR('#1: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - - diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.2_T3.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.2_T3.js deleted file mode 100644 index 349c61d3b..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.2_T3.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A3.2_T3; - * @section: 12.10; - * @assertion: No matter how control leaves the embedded 'Statement', - * the scope chain is always restored to its former state; - * @description: Declaring "with" statement within a function body, leading to normal completion by "return"; - */ - -this.p1 = 1; - -var result = "result"; - -var myObj = { - p1: 'a', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';} -} - -var f = function(){ - with(myObj){ - return value; - p1 = 'x1'; - } -}; - -f(); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if(p1 !== 1){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if(myObj.p1 !== "a"){ - $ERROR('#2: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.2_T4.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.2_T4.js deleted file mode 100644 index a9cf64142..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.2_T4.js +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A3.2_T4; - * @section: 12.10; - * @assertion: No matter how control leaves the embedded 'Statement', - * the scope chain is always restored to its former state; - * @description: Declaring "with" statement within a function body, leading to completion by exception; - */ - -this.p1 = 1; - -var result = "result"; - -var myObj = { - p1: 'a', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';} -} - -try { - var f = function(){ - with(myObj){ - p1 = 'x1'; - throw value; - } - }; - - f(); -} catch(e){ - result = p1; -} - - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if(result !== 1){ - $ERROR('#1: result === 1. Actual: result ==='+ result ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if(p1 !== 1){ - $ERROR('#2: p1 === 1. Actual: p1 ==='+ p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if(myObj.p1 !== "x1"){ - $ERROR('#3: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.2_T5.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.2_T5.js deleted file mode 100644 index 7acd876db..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.2_T5.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A3.2_T5; - * @section: 12.10; - * @assertion: No matter how control leaves the embedded 'Statement', - * the scope chain is always restored to its former state; - * @description: Declaring "with" statement within a function body, leading to completion by exception; - */ - -this.p1 = 1; - -var result = "result"; - -var myObj = { - p1: 'a', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';} -}; - -try { - var f = function(){ - with(myObj){ - throw value; - p1 = 'x1'; - } - }; - f(); -} catch(e){ - result = p1; -} - - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if(result !== 1){ - $ERROR('#1: result === 1. Actual: result ==='+ result ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if(p1 !== 1){ - $ERROR('#2: p1 === 1. Actual: p1 ==='+ p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if(myObj.p1 !== "a"){ - $ERROR('#3: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - - - - diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.3_T1.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.3_T1.js deleted file mode 100644 index d49106811..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.3_T1.js +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A3.3_T1; - * @section: 12.10; - * @assertion: No matter how control leaves the embedded 'Statement', - * the scope chain is always restored to its former state; - * @description: Declaring "with" statement within a function constructor, leading to normal completion; - */ - -this.p1 = 1; - -var result = "result"; - -var myObj = { - p1: 'a', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';} -} - -function __FACTORY(){ - with(myObj){ - p1 = 'x1'; - } -} - -var obj = new __FACTORY(); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if(p1 !== 1){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if(myObj.p1 !== "x1"){ - $ERROR('#2: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - - diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.3_T2.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.3_T2.js deleted file mode 100644 index 7ba8c4ef6..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.3_T2.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A3.3_T2; - * @section: 12.10; - * @assertion: No matter how control leaves the embedded 'Statement', - * the scope chain is always restored to its former state; - * @description: Declaring "with" statement within a function constructor, leading to normal completion by "return"; - */ - -this.p1 = 1; - -var result = "result"; - -var myObj = { - p1: 'a', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';} -} - -function __FACTORY(){ - with(myObj){ - p1 = 'x1'; - return value; - } -} - -var obj = new __FACTORY; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if(p1 !== 1){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if(myObj.p1 !== "x1"){ - $ERROR('#2: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.3_T3.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.3_T3.js deleted file mode 100644 index debaeff8d..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.3_T3.js +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A3.3_T3; - * @section: 12.10; - * @assertion: No matter how control leaves the embedded 'Statement', - * the scope chain is always restored to its former state; - * @description: Declaring "with" statement within a function constructor, leading to normal completion by "return"; - */ - -this.p1 = 1; - -var result = "result"; - -var myObj = { - p1: 'a', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';} -} - -function __FACTORY(){ - with(myObj){ - return value; - p1 = 'x1'; - } -} - -var obj = new __FACTORY; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if(p1 !== 1){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if(myObj.p1 !== "a"){ - $ERROR('#2: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - - diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.3_T4.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.3_T4.js deleted file mode 100644 index 8685d8e42..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.3_T4.js +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A3.3_T4; - * @section: 12.10; - * @assertion: No matter how control leaves the embedded 'Statement', - * the scope chain is always restored to its former state; - * @description: Declaring "with" statement within a function constructor, leading to completion by exception; - */ - -this.p1 = 1; - -var result = "result"; - -var myObj = { - p1: 'a', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';} -} - -try { - function __FACTORY(){ - with(myObj){ - p1 = 'x1'; - throw value; - } - } - var obj = new __FACTORY(); -} catch(e){ - result = p1; -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if(result !== 1){ - $ERROR('#1: result === 1. Actual: result ==='+ result ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if(p1 !== 1){ - $ERROR('#2: p1 === 1. Actual: p1 ==='+ p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if(myObj.p1 !== "x1"){ - $ERROR('#3: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.3_T5.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.3_T5.js deleted file mode 100644 index b49416ae6..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.3_T5.js +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A3.3_T5; - * @section: 12.10; - * @assertion: No matter how control leaves the embedded 'Statement', - * the scope chain is always restored to its former state; - * @description: Declaring "with" statement within a function constructor, leading to completion by exception; - */ - -this.p1 = 1; - -var result = "result"; - -var myObj = { - p1: 'a', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';} -} - -try { - function __FACTORY(){ - with(myObj){ - throw value; - p1 = 'x1'; - } - } - var obj = new __FACTORY(); -} catch(e){ - result = p1; -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if(result !== 1){ - $ERROR('#1: result === 1. Actual: result ==='+ result ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if(p1 !== 1){ - $ERROR('#2: p1 === 1. Actual: p1 ==='+ p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if(myObj.p1 !== "a"){ - $ERROR('#3: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.4_T1.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.4_T1.js deleted file mode 100644 index dead2ba32..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.4_T1.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A3.4_T1; - * @section: 12.10; - * @assertion: No matter how control leaves the embedded 'Statement', - * the scope chain is always restored to its former state; - * @description: Using "with" statement within iteration statement, leading to normal completion; - */ - -this.p1 = 1; - -var result = "result"; - -var myObj = { - p1: 'a', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';} -} - -do { - with(myObj){ - p1 = 'x1'; - } -} while(false); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if(p1 !== 1){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if(myObj.p1 !== "x1"){ - $ERROR('#2: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - - diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.4_T2.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.4_T2.js deleted file mode 100644 index a4e3a0831..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.4_T2.js +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A3.4_T2; - * @section: 12.10; - * @assertion: No matter how control leaves the embedded 'Statement', - * the scope chain is always restored to its former state; - * @description: Using "with" statement within iteration statement, leading to completion by exception; - */ - -this.p1 = 1; - -var result = "result"; - -var myObj = { - p1: 'a', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';} -} - -try { - do{ - with(myObj){ - p1 = 'x1'; - throw value; - } - } while(false); -} catch(e){ - result = p1; -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if(result !== 1){ - $ERROR('#1: result === 1. Actual: result ==='+ result ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if(p1 !== 1){ - $ERROR('#2: p1 === 1. Actual: p1 ==='+ p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if(myObj.p1 !== "x1"){ - $ERROR('#3: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.4_T3.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.4_T3.js deleted file mode 100644 index 1324b7e84..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.4_T3.js +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A3.4_T3; - * @section: 12.10; - * @assertion: No matter how control leaves the embedded 'Statement', - * the scope chain is always restored to its former state; - * @description: Using "with" statement within iteration statement, leading to completion by exception; - */ - -this.p1 = 1; - -var result = "result"; - -var myObj = { - p1: 'a', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';} -} - -try { - do{ - with(myObj){ - throw value; - p1 = 'x1'; - } - } while(false); -} catch(e){ - result = p1; -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if(result !== 1){ - $ERROR('#1: result === 1. Actual: result ==='+ result ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if(p1 !== 1){ - $ERROR('#2: p1 === 1. Actual: p1 ==='+ p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if(myObj.p1 !== "a"){ - $ERROR('#3: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.4_T4.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.4_T4.js deleted file mode 100644 index 8c0447672..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.4_T4.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A3.4_T4; - * @section: 12.10; - * @assertion: No matter how control leaves the embedded 'Statement', - * the scope chain is always restored to its former state; - * @description: Using "with" statement within iteration statement, leading to completion by break; - */ - -this.p1 = 1; - -var result = "result"; - -var myObj = { - p1: 'a', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';} -} - -do { - with(myObj){ - p1 = 'x1'; - break; - } -} while(false); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if(p1 !== 1){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if(myObj.p1 !== "x1"){ - $ERROR('#2: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - - diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.4_T5.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.4_T5.js deleted file mode 100644 index e237de702..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.4_T5.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A3.4_T5; - * @section: 12.10; - * @assertion: No matter how control leaves the embedded 'Statement', - * the scope chain is always restored to its former state; - * @description: Using "with" statement within iteration statement, leading to completion by break; - */ - -this.p1 = 1; - -var result = "result"; - -var myObj = { - p1: 'a', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';} -} - -do { - with(myObj){ - break; - p1 = 'x1'; - } -} while(false); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if(p1 !== 1){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if(myObj.p1 !== "a"){ - $ERROR('#2: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - - diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.5_T1.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.5_T1.js deleted file mode 100644 index 2d920a824..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.5_T1.js +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A3.5_T1; - * @section: 12.10; - * @assertion: No matter how control leaves the embedded 'Statement', - * the scope chain is always restored to its former state; - * @description: Using "with" statement within "for-in" statement, leading to normal completion; - */ - -this.p1 = 1; - -var result = "result"; - -var myObj = { - p1: 'a', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';} -} - -for(var prop in myObj){ - with(myObj){ - p1 = 'x1'; - } -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if(p1 !== 1){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if(myObj.p1 !== "x1"){ - $ERROR('#2: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.5_T2.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.5_T2.js deleted file mode 100644 index 1480d6f47..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.5_T2.js +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A3.5_T2; - * @section: 12.10; - * @assertion: No matter how control leaves the embedded 'Statement', - * the scope chain is always restored to its former state; - * @description: Using "with" statement within "for-in" statement, leading to completion by exception; - */ - -this.p1 = 1; - -var result = "result"; - -var myObj = { - p1: 'a', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';} -} - -try { - for(var prop in myObj){ - with(myObj){ - p1 = 'x1'; - throw value; - } - } -} catch(e){ - result = p1; -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if(result !== 1){ - $ERROR('#1: result === 1. Actual: result ==='+ result ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if(p1 !== 1){ - $ERROR('#2: p1 === 1. Actual: p1 ==='+ p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if(myObj.p1 !== "x1"){ - $ERROR('#3: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.5_T3.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.5_T3.js deleted file mode 100644 index 74a080ccb..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.5_T3.js +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A3.5_T3; - * @section: 12.10; - * @assertion: No matter how control leaves the embedded 'Statement', - * the scope chain is always restored to its former state; - * @description: Using "with" statement within "for-in" statement, leading to completion by exception; - */ - -this.p1 = 1; - -var result = "result"; - -var myObj = { - p1: 'a', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';} -} - -try { - for(var prop in myObj){ - with(myObj){ - throw value; - p1 = 'x1'; - } - } -} catch(e){ - result = p1; -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if(result !== 1){ - $ERROR('#1: result === 1. Actual: result ==='+ result ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if(p1 !== 1){ - $ERROR('#2: p1 === 1. Actual: p1 ==='+ p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if(myObj.p1 !== "a"){ - $ERROR('#3: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.5_T4.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.5_T4.js deleted file mode 100644 index 454297589..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.5_T4.js +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A3.5_T4; - * @section: 12.10; - * @assertion: No matter how control leaves the embedded 'Statement', - * the scope chain is always restored to its former state; - * @description: Using "with" statement within "for-in" statement, leading to completion by break; - */ - -this.p1 = 1; - -var result = "result"; - -var myObj = { - p1: 'a', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';} -} - -for(var prop in myObj){ - with(myObj){ - p1 = 'x1'; - break; - } -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if(p1 !== 1){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if(myObj.p1 !== "x1"){ - $ERROR('#2: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.5_T5.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.5_T5.js deleted file mode 100644 index 4140e28fa..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.5_T5.js +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A3.5_T5; - * @section: 12.10; - * @assertion: No matter how control leaves the embedded 'Statement', - * the scope chain is always restored to its former state; - * @description: Using "with" statement within "for-in" statement, leading to completion by break; - */ - -this.p1 = 1; - -var result = "result"; - -var myObj = { - p1: 'a', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';} -} - -for(var prop in myObj){ - with(myObj){ - break; - p1 = 'x1'; - } -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if(p1 !== 1){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if(myObj.p1 !== "a"){ - $ERROR('#1: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - - - diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.6_T1.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.6_T1.js deleted file mode 100644 index 96108a6f7..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.6_T1.js +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A3.6_T1; - * @section: 12.10; - * @assertion: No matter how control leaves the embedded 'Statement', - * the scope chain is always restored to its former state; - * @description: Using "with" statement within another "with" statement, leading to normal completion; - */ - -this.p1 = 1; - -var result = "result"; - -var myObj = { - p1: 'a', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';} -} - -var theirObj = { - p1: true, - value: 'theirObj_value', - valueOf : function(){return 'thr_valueOf';} -} - -with(myObj){ - with(theirObj){ - p1 = 'x1'; - } -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if(p1 !== 1){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if(myObj.p1 !== "a"){ - $ERROR('#2: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if(theirObj.p1 !== "x1"){ - $ERROR('#3: theirObj.p1 === "x1". Actual: theirObj.p1 ==='+ theirObj.p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - - diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.6_T2.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.6_T2.js deleted file mode 100644 index faa29e835..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.6_T2.js +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A3.6_T2; - * @section: 12.10; - * @assertion: No matter how control leaves the embedded 'Statement', - * the scope chain is always restored to its former state; - * @description: Using "with" statement within another "with" statement, leading to completion by exception; - */ - -this.p1 = 1; - -var result = "result"; - -var myObj = { - p1: 'a', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';} -} - -var theirObj = { - p1: true, - value: 'theirObj_value', - valueOf : function(){return 'thr_valueOf';} -} - - -try { - with(myObj){ - with(theirObj){ - p1 = 'x1'; - throw value; - } - } -} catch(e){ - result = p1; -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if(p1 !== 1){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if(myObj.p1 !== "a"){ - $ERROR('#2: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if(theirObj.p1 !== "x1"){ - $ERROR('#3: theirObj.p1 === "x1". Actual: theirObj.p1 ==='+ theirObj.p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.6_T3.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.6_T3.js deleted file mode 100644 index 479776227..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.6_T3.js +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A3.6_T3; - * @section: 12.10; - * @assertion: No matter how control leaves the embedded 'Statement', - * the scope chain is always restored to its former state; - * @description: Using "with" statement within another "with" statement, leading to completion by exception; - */ - -this.p1 = 1; - -var result = "result"; - -var myObj = { - p1: 'a', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';} -} - -var theirObj = { - p1: true, - value: 'theirObj_value', - valueOf : function(){return 'thr_valueOf';} -} - - -try { - with(myObj){ - with(theirObj){ - throw value; - p1 = 'x1'; - - } - } -} catch(e){ - result = p1; -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if(p1 !== 1){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if(myObj.p1 !== "a"){ - $ERROR('#2: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if(theirObj.p1 !== true){ - $ERROR('#3: theirObj.p1 === true. Actual: theirObj.p1 ==='+ theirObj.p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.7_T1.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.7_T1.js deleted file mode 100644 index 77af36f69..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.7_T1.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A3.7_T1; - * @section: 12.10; - * @assertion: No matter how control leaves the embedded 'Statement', - * the scope chain is always restored to its former state; - * @description: Declaring and calling a function within "with" statement, leading to normal completion; - */ - -this.p1 = 1; - -var result = "result"; - -var myObj = { - p1: 'a', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';} -} - -with(myObj){ - (function(){ - p1 = 'x1'; - })(); -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if(p1 !== 1){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if(myObj.p1 !== "x1"){ - $ERROR('#2: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - - diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.7_T2.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.7_T2.js deleted file mode 100644 index ad2c8a8d8..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.7_T2.js +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A3.7_T2; - * @section: 12.10; - * @assertion: No matter how control leaves the embedded 'Statement', - * the scope chain is always restored to its former state; - * @description: Declaring and calling a function within "with" statement, leading to normal completion by "return"; - */ - -this.p1 = 1; - -var result = "result"; - -var myObj = { - p1: 'a', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';} -} - -with(myObj){ - result=(function(){ - p1 = 'x1'; - return value; - })(); -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if(p1 !== 1){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if(result !== "myObj_value"){ - $ERROR('#2: result === "myObj_value". Actual: result ==='+ result ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if(myObj.p1 !== "x1"){ - $ERROR('#3: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - - diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.7_T3.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.7_T3.js deleted file mode 100644 index ee853c756..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.7_T3.js +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A3.7_T3; - * @section: 12.10; - * @assertion: No matter how control leaves the embedded 'Statement', - * the scope chain is always restored to its former state; - * @description: Declaring and calling a function within "with" statement, leading to normal completion by "return"; - */ - -this.p1 = 1; - -var result = "result"; - -var myObj = { - p1: 'a', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';} -} - -with(myObj){ - result=(function(){ - return value; - p1 = 'x1'; - })(); -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if(p1 !== 1){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if(result !== 'myObj_value'){ - $ERROR('#2: result === \'myObj_value\'. Actual: result ==='+ result ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if(myObj.p1 !== "a"){ - $ERROR('#3: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.7_T4.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.7_T4.js deleted file mode 100644 index baf097f21..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.7_T4.js +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A3.7_T4; - * @section: 12.10; - * @assertion: No matter how control leaves the embedded 'Statement', - * the scope chain is always restored to its former state; - * @description: Declaring and calling a function within "with" statement, leading to completion by exception; - */ - -this.p1 = 1; - -var result = "result"; - -var myObj = { - p1: 'a', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';} -} - -try { - with(myObj){ - (function (){ - p1 = 'x1'; - throw value; - })(); - } -} catch(e){ - result = p1; -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if(result !== 1){ - $ERROR('#1: result === 1. Actual: result ==='+ result ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if(p1 !== 1){ - $ERROR('#2: p1 === 1. Actual: p1 ==='+ p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if(myObj.p1 !== "x1"){ - $ERROR('#3: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.7_T5.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.7_T5.js deleted file mode 100644 index ce83fdd97..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.7_T5.js +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A3.7_T5; - * @section: 12.10; - * @assertion: No matter how control leaves the embedded 'Statement', - * the scope chain is always restored to its former state; - * @description: Declaring and calling a function within "with" statement, leading to completion by exception; - */ - -this.p1 = 1; - -var result = "result"; - -var myObj = { - p1: 'a', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';} -} - -try { - with(myObj){ - (function f(){ - throw value; - p1 = 'x1'; - })(); - } -} catch(e){ - result = p1; -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if(result !== 1){ - $ERROR('#1: result === 1. Actual: result ==='+ result ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if(p1 !== 1){ - $ERROR('#2: p1 === 1. Actual: p1 ==='+ p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if(myObj.p1 !== "a"){ - $ERROR('#3: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.8_T1.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.8_T1.js deleted file mode 100644 index 682860749..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.8_T1.js +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A3.8_T1; - * @section: 12.10; - * @assertion: No matter how control leaves the embedded 'Statement', - * the scope chain is always restored to its former state; - * @description: Declaring function constructor within "with" statement, leading to normal completion; - */ - -this.p1 = 1; - -var result = "result"; - -var myObj = { - p1: 'a', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';} -} - -with(myObj){ - var __FACTORY = function(){ - p1 = 'x1'; - } - var obj = new __FACTORY; -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if(p1 !== 1){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if(myObj.p1 !== "x1"){ - $ERROR('#2: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.8_T2.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.8_T2.js deleted file mode 100644 index 799ab94c5..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.8_T2.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A3.8_T2; - * @section: 12.10; - * @assertion: No matter how control leaves the embedded 'Statement', - * the scope chain is always restored to its former state; - * @description: Declaring function constructor within "with" statement, leading to normal completion by "return"; - */ - -this.p1 = 1; - -var result = "result"; - -var myObj = { - p1: 'a', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';} -} - -with(myObj){ - var __FACTORY = function(){ - p1 = 'x1'; - return value; - } - var obj = new __FACTORY; -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if(p1 !== 1){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if(myObj.p1 !== "x1"){ - $ERROR('#2: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.8_T3.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.8_T3.js deleted file mode 100644 index 5687ca263..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.8_T3.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A3.8_T3; - * @section: 12.10; - * @assertion: No matter how control leaves the embedded 'Statement', - * the scope chain is always restored to its former state; - * @description: Declaring function constructor within "with" statement, leading to normal completion by "return"; - */ - -this.p1 = 1; - -var result = "result"; - -var myObj = { - p1: 'a', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';} -} - -with(myObj){ - var __FACTORY = function(){ - return value; - p1 = 'x1'; - } - var obj = new __FACTORY; -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if(p1 !== 1){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if(myObj.p1 !== "a"){ - $ERROR('#2: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.8_T4.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.8_T4.js deleted file mode 100644 index d4f27470a..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.8_T4.js +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A3.8_T4; - * @section: 12.10; - * @assertion: No matter how control leaves the embedded 'Statement', - * the scope chain is always restored to its former state; - * @description: Declaring function constructor within "with" statement, leading to completion by exception; - */ - -this.p1 = 1; - -var result = "result"; - -var myObj = { - p1: 'a', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';} -} - -try { - with(myObj){ - var __FACTORY = function(){ - p1 = 'x1'; - throw value; - } - var obj = new __FACTORY; - } -} catch(e){ - result = p1; -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if(result !== 1){ - $ERROR('#1: result === 1. Actual: result ==='+ result ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if(p1 !== 1){ - $ERROR('#2: p1 === 1. Actual: p1 ==='+ p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if(myObj.p1 !== "x1"){ - $ERROR('#3: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.8_T5.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.8_T5.js deleted file mode 100644 index d79e35297..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.8_T5.js +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A3.8_T5; - * @section: 12.10; - * @assertion: No matter how control leaves the embedded 'Statement', - * the scope chain is always restored to its former state; - * @description: Declaring function constructor within "with" statement, leading to completion by exception; - */ - -this.p1 = 1; - -var result = "result"; - -var myObj = { - p1: 'a', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';} -} - -try { - with(myObj){ - var __FACTORY = function(){ - throw value; - p1 = 'x1'; - } - var obj = new __FACTORY; - } -} catch(e){ - result = p1; -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if(result !== 1){ - $ERROR('#1: result === 1. Actual: result ==='+ result ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if(p1 !== 1){ - $ERROR('#2: p1 === 1. Actual: p1 ==='+ p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if(myObj.p1 !== "a"){ - $ERROR('#3: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.9_T1.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.9_T1.js deleted file mode 100644 index f83abda97..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.9_T1.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A3.9_T1; - * @section: 12.10; - * @assertion: No matter how control leaves the embedded 'Statement', - * the scope chain is always restored to its former state; - * @description: Using "for-in" statement within "with" statement, leading to normal completion; - */ - -this.p1 = 1; - -var result = "result"; - -var myObj = { - p1: 'a', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';} -} - -with(myObj){ - for(var prop in myObj){ - p1 = 'x1'; - } -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if(p1 !== 1){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if(myObj.p1 !== "x1"){ - $ERROR('#2: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - - diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.9_T2.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.9_T2.js deleted file mode 100644 index a68929a93..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.9_T2.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A3.9_T2; - * @section: 12.10; - * @assertion: No matter how control leaves the embedded 'Statement', - * the scope chain is always restored to its former state; - * @description: Using "for-in" statement within "with" statement, leading to completion by break; - */ - -this.p1 = 1; - -var result = "result"; - -var myObj = { - p1: 'a', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';} -} - -with(myObj){ - for(var prop in myObj){ - p1 = 'x1'; - break; - } -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if(p1 !== 1){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if(myObj.p1 !== "x1"){ - $ERROR('#2: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.9_T3.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.9_T3.js deleted file mode 100644 index 0277f6578..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A3.9_T3.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A3.9_T3; - * @section: 12.10; - * @assertion: No matter how control leaves the embedded 'Statement', - * the scope chain is always restored to its former state; - * @description: Using "for-in" statement within "with" statement, leading to completion by break; - */ - -this.p1 = 1; - -var result = "result"; - -var myObj = { - p1: 'a', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';} -} - -with(myObj){ - for(var prop in myObj){ - break; - p1 = 'x1'; - } -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if(p1 !== 1){ - $ERROR('#1: p1 === 1. Actual: p1 ==='+ p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if(myObj.p1 !== "a"){ - $ERROR('#2: myObj.p1 === "a". Actual: myObj.p1 ==='+ myObj.p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A4_T1.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A4_T1.js deleted file mode 100644 index aeff69093..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A4_T1.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A4_T1; - * @section: 12.10; - * @assertion: Changing property using "eval" statement containing "with" statement; - * @description: Changing string property; - */ - -this.p1 = 1; -var myObj = { - p1: 'a', -} -eval("with(myObj){p1='b'}"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if(myObj.p1 !== 'b'){ - $ERROR('#1: myObj.p1 === "b". Actual: myObj.p1 ==='+ myObj.p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if(myObj.p1 === 1){ - $ERROR('#2: myObj.p1 !== 1'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A4_T2.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A4_T2.js deleted file mode 100644 index 9dbaeca46..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A4_T2.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A4_T2; - * @section: 12.10; - * @assertion: Changing property using "eval" statement containing "with" statement; - * @description: Changing number property; - */ - -this.p1 = 'a'; -var myObj = { - p1: 1, -} -eval("with(myObj){p1=2}"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if(myObj.p1 !== 2){ - $ERROR('#1: myObj.p1 === 2. Actual: myObj.p1 ==='+ myObj.p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if(myObj.p1 === 'a'){ - $ERROR('#2: myObj.p1 !== \'a\''); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A4_T3.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A4_T3.js deleted file mode 100644 index 36981949a..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A4_T3.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A4_T3; - * @section: 12.10; - * @assertion: Changing property using "eval" statement containing "with" statement; - * @description: Changing boolean property; - */ - -this.p1 = 'a'; -var myObj = { - p1: true, -} -eval("with(myObj){p1=false}"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if(myObj.p1 !== false){ - $ERROR('#1: myObj.p1 === false. Actual: myObj.p1 ==='+ myObj.p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if(myObj.p1 === 'a'){ - $ERROR('#2: myObj.p1 !== \'a\''); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A4_T4.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A4_T4.js deleted file mode 100644 index d9070c61e..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A4_T4.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A4_T4; - * @section: 12.10; - * @assertion: Changing property using "eval" statement containing "with" statement; - * @description: Changing object property; - */ - -this.p1 = 'a'; -var myObj = { - p1: {a:"hello"}, -} -eval("with(myObj){p1={b:'hi'}}"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if(myObj.p1.a === "hello"){ - $ERROR('#1: myObj.p1.a !== "hello"'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if(myObj.p1.b !== "hi"){ - $ERROR('#2: myObj.p1.b === "hi". Actual: myObj.p1.b ==='+ myObj.p1.b ); -} -// -////////////////////////////////////////////////////////////////////////////// - - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if(myObj.p1 === 'a'){ - $ERROR('#3: myObj.p1 !== \'a\''); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A4_T5.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A4_T5.js deleted file mode 100644 index 7a4a1cd29..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A4_T5.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A4_T5; - * @section: 12.10; - * @assertion: Changing property using "eval" statement containing "with" statement; - * @description: Changing array property; - */ - -this.p1 = 'a'; -var myObj = { - p1: [1,2,3], -} -eval("with(myObj){p1=[3,2,1]}"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if(myObj.p1[2] !== 1){ - $ERROR('#1: myObj.p1[2] === 1. Actual: myObj.p1[2] ==='+ myObj.p1[2] ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if(myObj.p1 === 'a'){ - $ERROR('#2: myObj.p1 !== \'a\''); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A4_T6.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A4_T6.js deleted file mode 100644 index c44ab6d73..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A4_T6.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A4_T6; - * @section: 12.10; - * @assertion: Changing property using "eval" statement containing "with" statement; - * @description: Changing function property; - */ - -this.p1 = 'a'; -var myObj = { - p1: function(){return 0;}, -} -eval("with(myObj){p1=function(){return 1;}}"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if(myObj.p1() !== 1){ - $ERROR('#1: myObj.p1 === 1. Actual: myObj.p1 ==='+ myObj.p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if(myObj.p1 === 'a'){ - $ERROR('#2: myObj.p1 !== \'a\''); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A5_T1.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A5_T1.js deleted file mode 100644 index ff03ba902..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A5_T1.js +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A5_T1; - * @section: 12.10; - * @assertion: Deleting property using "eval" statement containing "with" statement; - * @description: Deleting string property; - */ - -this.p1 = 1; -var myObj = { - p1: 'a', - del:false -} -eval("with(myObj){del = delete p1}"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if(myObj.p1 === 'a'){ - $ERROR('#1: myObj.p1 !== "a"'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if(myObj.p1 !== undefined){ - $ERROR('#2: myObj.p1 === undefined. Actual: myObj.p1 ==='+ myObj.p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if(myObj.del !== true){ - $ERROR('#3: myObj.del === true. Actual: myObj.del ==='+ myObj.del ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if(myObj.p1 === 1){ - $ERROR('#4: myObj.p1 !== 1'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A5_T2.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A5_T2.js deleted file mode 100644 index ae85d1ef3..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A5_T2.js +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A5_T2; - * @section: 12.10; - * @assertion: Deleting property using "eval" statement containing "with" statement; - * @description: Deleting number property; - */ - -this.p1 = 'a'; -var myObj = { - p1: 1, - del:false -} -eval("with(myObj){del = delete p1}"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if(myObj.p1 === 1){ - $ERROR('#1: myObj.p1 !== 1'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if(myObj.p1 !== undefined){ - $ERROR('#2: myObj.p1 === undefined . Actual: myObj.p1 ==='+ myObj.p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if(myObj.del !== true){ - $ERROR('#3: myObj.del === true. Actual: myObj.del ===. Actual: myObj.del ==='+ myObj.del +myObj.del); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if(myObj.p1 === 'a'){ - $ERROR('#4: myObj.p1 !== \'a\''); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A5_T3.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A5_T3.js deleted file mode 100644 index c0feb9ceb..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A5_T3.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A5_T3; - * @section: 12.10; - * @assertion: Deleting property using "eval" statement containing "with" statement; - * @description: Deleting boolean property; - */ - -this.p1 = 'a'; -var myObj = { - p1: true, - del:false -} - -eval("with(myObj){del = delete p1}"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if(myObj.p1 === true){ - $ERROR('#1: myObj.p1 !== true '); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if(myObj.p1 !== undefined){ - $ERROR('#2: myObj.p1 === undefined . Actual: myObj.p1 ==='+ myObj.p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if(myObj.del !== true){ - $ERROR('#3: myObj.del === true . Actual: myObj.del ==='+ myObj.del ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if(myObj.p1 === 'a'){ - $ERROR('#4: myObj.p1 !== \'a\''); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A5_T4.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A5_T4.js deleted file mode 100644 index 2fd7d72cd..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A5_T4.js +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A5_T4; - * @section: 12.10; - * @assertion: Deleting property using "eval" statement containing "with" statement; - * @description: Deleting object property; - */ - -this.p1 = 'a'; -var myObj = { - p1: {a:"hello"}, - del:false -} -eval("with(myObj){del = delete p1}"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try{ -if(myObj.p1.a === "hello"){ - $ERROR('#1: myObj.p1.a !== "hello" '); -} -}catch(e){var x=1}; -if(x !== 1){ - $ERROR('#1: x === 1. Actual: x ==='+ x ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if(myObj.p1 !== undefined){ - $ERROR('#2: myObj.p1 === undefined . Actual: myObj.p1 ==='+ myObj.p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if(myObj.del !== true){ - $ERROR('#3: myObj.del === true . Actual: myObj.del ==='+ myObj.del ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if(myObj.p1 === 'a'){ - $ERROR('#4: myObj.p1 !== \'a\''); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A5_T5.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A5_T5.js deleted file mode 100644 index 472c7ea51..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A5_T5.js +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A5_T5; - * @section: 12.10; - * @assertion: Deleting property using "eval" statement containing "with" statement; - * @description: Deleting array property; - */ - -this.p1 = 'a'; -var myObj = { - p1: [1,2,3], - del:false -} -eval("with(myObj){del = delete p1}"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try{ -if(myObj.p1[2] === 3){ - $ERROR('#1: myObj.p1[2] !== 3 '); -} -}catch(e){var x=1}; -if(x !== 1){ - $ERROR('#1: x === 1. Actual: x ==='+ x ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if(myObj.p1 !== undefined){ - $ERROR('#2: myObj.p1 === undefined . Actual: myObj.p1 ==='+ myObj.p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if(myObj.del !== true){ - $ERROR('#3: myObj.del === true . Actual: myObj.del ==='+ myObj.del ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if(myObj.p1 === 'a'){ - $ERROR('#4: myObj.p1 !== \'a\''); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A5_T6.js b/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A5_T6.js deleted file mode 100644 index 1b0d9cac1..000000000 --- a/tests/ES3/Conformance/12_Statement/12.10_The_with_Statement/S12.10_A5_T6.js +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.10_A5_T6; - * @section: 12.10; - * @assertion: Deleting property using "eval" statement containing "with" statement; - * @description: Deleting function property; - */ - -this.p1 = 'a'; -var myObj = { - p1: function(){return 0;}, - del:false -} -eval("with(myObj){del = delete p1}"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try{ -if(myObj.p1() === 0){ - $ERROR('#1: myObj.p1() !== 0 '); -} -}catch(e){var x=1}; -if(x !== 1){ - $ERROR('#1: x === 1. Actual: x ==='+ x ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if(myObj.p1 !== undefined){ - $ERROR('#2: myObj.p1 === undefined . Actual: myObj.p1 ==='+ myObj.p1 ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if(myObj.del !== true){ - $ERROR('#3: myObj.del === true . Actual: myObj.del ==='+ myObj.del ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if(myObj.p1 === 'a'){ - $ERROR('#4: myObj.p1 !== \'a\''); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.11_The_switch_Statement/S12.11_A1_T1.js b/tests/ES3/Conformance/12_Statement/12.11_The_switch_Statement/S12.11_A1_T1.js deleted file mode 100644 index 6e9432bcc..000000000 --- a/tests/ES3/Conformance/12_Statement/12.11_The_switch_Statement/S12.11_A1_T1.js +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.11_A1_T1; - * @section: 12.11; - * @assertion: If Result.type is break and Result.target is in the current - * label set, return (normal, Result.value, empty); - * @description: Simple test using switch statement; -*/ - -function SwitchTest(value){ - var result = 0; - - switch(value) { - case 0: - result += 2; - case 1: - result += 4; - break; - case 2: - result += 8; - case 3: - result += 16; - default: - result += 32; - break; - case 4: - result += 64; - } - - return result; -} - -if(!(SwitchTest(0) === 6)){ - $ERROR("#1: SwitchTest(0) === 6. Actual: SwitchTest(0) ==="+ SwitchTest(0) ); -} - -if(!(SwitchTest(1) === 4)){ - $ERROR("#2: SwitchTest(1) === 4. Actual: SwitchTest(1) ==="+ SwitchTest(1) ); -} - -if(!(SwitchTest(2) === 56)){ - $ERROR("#3: SwitchTest(2) === 56. Actual: SwitchTest(2) ==="+ SwitchTest(2) ); -} - -if(!(SwitchTest(3) === 48)){ - $ERROR("#4: SwitchTest(3) === 48. Actual: SwitchTest(3) ==="+ SwitchTest(3) ); -} - -if(!(SwitchTest(4) === 64)){ - $ERROR("#5: SwitchTest(4) === 64. Actual: SwitchTest(4) ==="+ SwitchTest(4) ); -} - -if(!(SwitchTest(true) === 32)){ - $ERROR("#6: SwitchTest(true) === 32. Actual: SwitchTest(true) ==="+ SwitchTest(true) ); -} - -if(!(SwitchTest(false) === 32)){ - $ERROR("#7: SwitchTest(false) === 32. Actual: SwitchTest(false) ==="+ SwitchTest(false) ); -} - -if(!(SwitchTest(null) === 32)){ - $ERROR("#8: SwitchTest(null) === 32. Actual: SwitchTest(null) ==="+ SwitchTest(null) ); -} - -if(!(SwitchTest(void 0) === 32)){ - $ERROR("#9: SwitchTest(void 0) === 32. Actual: SwitchTest(void 0) ==="+ SwitchTest(void 0) ); -} - -if(!(SwitchTest('0') === 32)){ - $ERROR("#10: SwitchTest('0') === 32. Actual: SwitchTest('0') ==="+ SwitchTest('0') ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.11_The_switch_Statement/S12.11_A1_T2.js b/tests/ES3/Conformance/12_Statement/12.11_The_switch_Statement/S12.11_A1_T2.js deleted file mode 100644 index 7bcc32d6c..000000000 --- a/tests/ES3/Conformance/12_Statement/12.11_The_switch_Statement/S12.11_A1_T2.js +++ /dev/null @@ -1,87 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.11_A1_T2; - * @section: 12.11; - * @assertion: If Result.type is break and Result.target is in the current - * label set, return (normal, Result.value, empty); - * @description: Switch with different types of variables; -*/ - -var x = new Number(2); - -function SwitchTest(value){ - var result = 0; - - switch(value) { - case 0: - result += 2; - case '1': - result += 4; - break; - case new Number(2): - result += 8; - case 3: - result += 16; - default: - result += 32; - break; - case 4: - result += 64; - break; - case x: - result += 128; - break; - case 0: - result += 256; - case 1: - result += 512; - } - - return result; -} - -if(!(SwitchTest(0) === 6)){ - $ERROR("#1: SwitchTest(0) === 6. Actual: SwitchTest(0) ==="+ SwitchTest(0) ); -} - -if(!(SwitchTest(1) === 512)){ - $ERROR("#2: SwitchTest(1) === 512. Actual: SwitchTest(1) ==="+ SwitchTest(1) ); -} - -if(!(SwitchTest(2) === 32)){ - $ERROR("#3: SwitchTest(2) === 32. Actual: SwitchTest(2) ==="+ SwitchTest(2) ); -} - -if(!(SwitchTest(3) === 48)){ - $ERROR("#4: SwitchTest(3) === 48. Actual: SwitchTest(3) ==="+ SwitchTest(3) ); -} - -if(!(SwitchTest(4) === 64)){ - $ERROR("#5: SwitchTest(4) === 64. Actual: SwitchTest(4) ==="+ SwitchTest(4) ); -} - -if(!(SwitchTest(true) === 32)){ - $ERROR("#6: SwitchTest(true) === 32. Actual: SwitchTest(true) ==="+ SwitchTest(true) ); -} - -if(!(SwitchTest(false) === 32)){ - $ERROR("#7: SwitchTest(false) === 32. Actual: SwitchTest(false) ==="+ SwitchTest(false) ); -} - -if(!(SwitchTest(null) === 32)){ - $ERROR("#8: SwitchTest(null) === 32. Actual: SwitchTest(null) ==="+ SwitchTest(null) ); -} - -if(!(SwitchTest(void 0) === 32)){ - $ERROR("#9: SwitchTest(void 0) === 32. Actual: SwitchTest(void 0) ==="+ SwitchTest(void 0) ); -} - -if(!(SwitchTest('0') === 32)){ - $ERROR("#10: SwitchTest('0') === 32. Actual: SwitchTest('0') ==="+ SwitchTest('0') ); -} - -if(!(SwitchTest(x) === 128)){ - $ERROR("#10: SwitchTest(x) === 128. Actual: SwitchTest(x) ==="+ SwitchTest(x) ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.11_The_switch_Statement/S12.11_A1_T3.js b/tests/ES3/Conformance/12_Statement/12.11_The_switch_Statement/S12.11_A1_T3.js deleted file mode 100644 index bf500dc4e..000000000 --- a/tests/ES3/Conformance/12_Statement/12.11_The_switch_Statement/S12.11_A1_T3.js +++ /dev/null @@ -1,91 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.11_A1_T3; - * @section: 12.11; - * @assertion: If Result.type is break and Result.target is in the current - * label set, return (normal, Result.value, empty); - * @description: Using case with null, NaN, Infinity; -*/ - -function SwitchTest(value){ - var result = 0; - - switch(value) { - case 0: - result += 2; - case 1: - result += 4; - break; - case 2: - result += 8; - case 3: - result += 16; - default: - result += 32; - break; - case null: - result += 64; - case NaN: - result += 128; - break; - case Infinity: - result += 256; - case 2+3: - result += 512; - break; - case undefined: - result += 1024; - } - - return result; -} - -if(!(SwitchTest(0) === 6)){ - $ERROR("#1: SwitchTest(0) === 6. Actual: SwitchTest(0) ==="+ SwitchTest(0) ); -} - -if(!(SwitchTest(1) === 4)){ - $ERROR("#2: SwitchTest(1) === 4. Actual: SwitchTest(1) ==="+ SwitchTest(1) ); -} - -if(!(SwitchTest(2) === 56)){ - $ERROR("#3: SwitchTest(2) === 56. Actual: SwitchTest(2) ==="+ SwitchTest(2) ); -} - -if(!(SwitchTest(3) === 48)){ - $ERROR("#4: SwitchTest(3) === 48. Actual: SwitchTest(3) ==="+ SwitchTest(3) ); -} - -if(!(SwitchTest(4) === 32)){ - $ERROR("#5: SwitchTest(4) === 32. Actual: SwitchTest(4) ==="+ SwitchTest(4) ); -} - -if(!(SwitchTest(5) === 512)){ - $ERROR("#5: SwitchTest(5) === 512. Actual: SwitchTest(5) ==="+ SwitchTest(5) ); -} - -if(!(SwitchTest(true) === 32)){ - $ERROR("#6: SwitchTest(true) === 32. Actual: SwitchTest(true) ==="+ SwitchTest(true) ); -} - -if(!(SwitchTest(false) === 32)){ - $ERROR("#7: SwitchTest(false) === 32. Actual: SwitchTest(false) ==="+ SwitchTest(false) ); -} - -if(!(SwitchTest(null) === 192)){ - $ERROR("#8: SwitchTest(null) === 192. Actual: SwitchTest(null) ==="+ SwitchTest(null) ); -} - -if(!(SwitchTest(void 0) === 1024)){ - $ERROR("#9: SwitchTest(void 0) === 1024. Actual: SwitchTest(void 0) ==="+ SwitchTest(void 0) ); -} - -if(!(SwitchTest(NaN) === 32)){ - $ERROR("#10: SwitchTest(NaN) === 32. Actual: SwitchTest(NaN) ==="+ SwitchTest(NaN) ); -} - -if(!(SwitchTest(Infinity) === 768)){ - $ERROR("#10: SwitchTest(NaN) === 768. Actual: SwitchTest(NaN) ==="+ SwitchTest(NaN) ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.11_The_switch_Statement/S12.11_A1_T4.js b/tests/ES3/Conformance/12_Statement/12.11_The_switch_Statement/S12.11_A1_T4.js deleted file mode 100644 index e16208ead..000000000 --- a/tests/ES3/Conformance/12_Statement/12.11_The_switch_Statement/S12.11_A1_T4.js +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.11_A1_T4; - * @section: 12.11; - * @assertion: If Result.type is break and Result.target is in the current - * label set, return (normal, Result.value, empty); - * @description: Using case with isNaN and isNaN(value); -*/ - -function SwitchTest(value){ - var result = 0; - - switch(value) { - case 0: - result += 2; - case 1: - result += 4; - break; - case 2: - result += 8; - case isNaN(value): - result += 16; - default: - result += 32; - break; - case null: - result += 64; - case isNaN: - result += 128; - break; - case Infinity: - result += 256; - case 2+3: - result += 512; - break; - case undefined: - result += 1024; - } - - return result; -} - -if(!(SwitchTest(eval('Number(false)')) === 6)){ - $ERROR("#1: SwitchTest(0) === 6. Actual: SwitchTest(0) ==="+ SwitchTest(0) ); -} - -if(!(SwitchTest(parseInt) === 32)){ - $ERROR("#2: SwitchTest(parseInt) === 32. Actual: SwitchTest(parseInt) ==="+ SwitchTest(parseInt) ); -} - -if(!(SwitchTest(isNaN) === 128)){ - $ERROR("#3: SwitchTest(isNaN) === 128. Actual: SwitchTest(isNaN) ==="+ SwitchTest(isNaN) ); -} - -if(!(SwitchTest(true) === 32)){ - $ERROR("#6: SwitchTest(true) === 32. Actual: SwitchTest(true) ==="+ SwitchTest(true) ); -} - -if(!(SwitchTest(false) === 48)){ - $ERROR("#7: SwitchTest(false) === 48. Actual: SwitchTest(false) ==="+ SwitchTest(false) ); -} - -if(!(SwitchTest(null) === 192)){ - $ERROR("#8: SwitchTest(null) === 192. Actual: SwitchTest(null) ==="+ SwitchTest(null) ); -} - -if(!(SwitchTest(void 0) === 1024)){ - $ERROR("#9: SwitchTest(void 0) === 1024. Actual: SwitchTest(void 0) ==="+ SwitchTest(void 0) ); -} - -if(!(SwitchTest(NaN) === 32)){ - $ERROR("#10: SwitchTest(NaN) === 32. Actual: SwitchTest(NaN) ==="+ SwitchTest(NaN) ); -} - -if(!(SwitchTest(Infinity) === 768)){ - $ERROR("#10: SwitchTest(NaN) === 768. Actual: SwitchTest(NaN) ==="+ SwitchTest(NaN) ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.11_The_switch_Statement/S12.11_A2_T1.js b/tests/ES3/Conformance/12_Statement/12.11_The_switch_Statement/S12.11_A2_T1.js deleted file mode 100644 index a49811116..000000000 --- a/tests/ES3/Conformance/12_Statement/12.11_The_switch_Statement/S12.11_A2_T1.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.11_A2_T1; - * @section: 12.11; - * @assertion: There can be only one DefaultClause; - * @description: Duplicate DefaultClause; - * @negative; -*/ - -function SwitchTest(value){ - var result = 0; - - switch(value) { - case 0: - result += 2; - default: - result += 32; - break; - default: - result += 32; - break; - } - - return result; -} - -var x = SwitchTest(0); diff --git a/tests/ES3/Conformance/12_Statement/12.11_The_switch_Statement/S12.11_A3_T1.js b/tests/ES3/Conformance/12_Statement/12.11_The_switch_Statement/S12.11_A3_T1.js deleted file mode 100644 index 475cbcf2c..000000000 --- a/tests/ES3/Conformance/12_Statement/12.11_The_switch_Statement/S12.11_A3_T1.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.11_A3_T1; - * @section: 12.11; - * @assertion: Syntax constructions of switch statement; - * @description: Checking if execution of "switch() {}" fails; - * @negative; -*/ - -function SwitchTest(value){ - var result = 0; - - switch() { - case 0: - result += 2; - default: - result += 32; - break; - } - - return result; -} - -var x = SwitchTest(0); diff --git a/tests/ES3/Conformance/12_Statement/12.11_The_switch_Statement/S12.11_A3_T2.js b/tests/ES3/Conformance/12_Statement/12.11_The_switch_Statement/S12.11_A3_T2.js deleted file mode 100644 index d4d8c0e93..000000000 --- a/tests/ES3/Conformance/12_Statement/12.11_The_switch_Statement/S12.11_A3_T2.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.11_A3_T2; - * @section: 12.11; - * @assertion: Syntax constructions of switch statement; - * @description: Checking if execution of "switch {}" fails; - * @negative; -*/ - -function SwitchTest(value){ - var result = 0; - - switch { - case 0: - result += 2; - default: - result += 32; - break; - } - - return result; -} - -var x = SwitchTest(0); diff --git a/tests/ES3/Conformance/12_Statement/12.11_The_switch_Statement/S12.11_A3_T3.js b/tests/ES3/Conformance/12_Statement/12.11_The_switch_Statement/S12.11_A3_T3.js deleted file mode 100644 index 2c0982971..000000000 --- a/tests/ES3/Conformance/12_Statement/12.11_The_switch_Statement/S12.11_A3_T3.js +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.11_A3_T3; - * @section: 12.11; - * @assertion: Syntax constructions of switch statement; - * @description: Checking if execution of "switch(value)" fails; - * @negative; -*/ - -switch(value); diff --git a/tests/ES3/Conformance/12_Statement/12.11_The_switch_Statement/S12.11_A3_T4.js b/tests/ES3/Conformance/12_Statement/12.11_The_switch_Statement/S12.11_A3_T4.js deleted file mode 100644 index 7f022d653..000000000 --- a/tests/ES3/Conformance/12_Statement/12.11_The_switch_Statement/S12.11_A3_T4.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.11_A3_T4; - * @section: 12.11; - * @assertion: Syntax constructions of switch statement; - * @description: Using "case" that has no Expresson after it. "CaseClause: case Expression : [StatementList]"; - * @negative; -*/ - -function SwitchTest(value){ - var result = 0; - - switch(value) { - case: - result += 2; - default: - result += 32; - break; - } - - return result; -} - -var x = SwitchTest(0); diff --git a/tests/ES3/Conformance/12_Statement/12.11_The_switch_Statement/S12.11_A3_T5.js b/tests/ES3/Conformance/12_Statement/12.11_The_switch_Statement/S12.11_A3_T5.js deleted file mode 100644 index eba1868ec..000000000 --- a/tests/ES3/Conformance/12_Statement/12.11_The_switch_Statement/S12.11_A3_T5.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.11_A3_T5; - * @section: 12.11; - * @assertion: Syntax constructions of switch statement; - * @description: Introducing statement not followed by "case" keyword; - * @negative; -*/ - -function SwitchTest(value){ - var result = 0; - - switch(value) { - result =2; - case 0: - result += 2; - default: - result += 32; - break; - } - - return result; -} - -var x = SwitchTest(0); diff --git a/tests/ES3/Conformance/12_Statement/12.11_The_switch_Statement/S12.11_A4_T1.js b/tests/ES3/Conformance/12_Statement/12.11_The_switch_Statement/S12.11_A4_T1.js deleted file mode 100644 index b7fbd2a82..000000000 --- a/tests/ES3/Conformance/12_Statement/12.11_The_switch_Statement/S12.11_A4_T1.js +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.11_A4_T1; - * @section: 12.11; - * @assertion: Embedded syntax constructions of switch statement; - * @description: Nesting one "switch" statement into StatementList of the other's; -*/ - -function SwitchTest(value){ - var result = 0; - - switch(value) { - case 0: - switch(value) { - case 0: - result += 3; - break; - default: - result += 32; - break; - } - result *= 2; - break; - result=3; - default: - result += 32; - break; - } - return result; -} - -var x = SwitchTest(0); -if(x!==6) $ERROR("#1: SwitchTest(0) === 6. Actual: SwitchTest(0) ==="+ SwitchTest(0) ); diff --git a/tests/ES3/Conformance/12_Statement/12.12_Labelled_Statements/S12.12_A1_T1.js b/tests/ES3/Conformance/12_Statement/12.12_Labelled_Statements/S12.12_A1_T1.js deleted file mode 100644 index 724921c93..000000000 --- a/tests/ES3/Conformance/12_Statement/12.12_Labelled_Statements/S12.12_A1_T1.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.12_A1_T1; - * @section: 12.12; - * @assertion: Labelled statements are only used in conjunction with labelled - * break and continue statements; - * @description: Checking if labelled break works. See continue and break sections; -*/ - -var object = {p1: 1, p2: 1}; -var result = 0; -lbl: for(var i in object){ - result += object[i]; - break lbl; -} - -if(!(result === 1)){ - $ERROR("'break label' should break execution of labelled iteration statement"); -} diff --git a/tests/ES3/Conformance/12_Statement/12.13_The_throw_statement/S12.13_A1.js b/tests/ES3/Conformance/12_Statement/12.13_The_throw_statement/S12.13_A1.js deleted file mode 100644 index be310e00d..000000000 --- a/tests/ES3/Conformance/12_Statement/12.13_The_throw_statement/S12.13_A1.js +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.13_A1; - * @section: 12.13; - * @assertion: Sanity test for throw statement; - * @description: Trying to throw exception with "throw"; - * @negative; - */ - -throw "error"; diff --git a/tests/ES3/Conformance/12_Statement/12.13_The_throw_statement/S12.13_A2_T1.js b/tests/ES3/Conformance/12_Statement/12.13_The_throw_statement/S12.13_A2_T1.js deleted file mode 100644 index b017454aa..000000000 --- a/tests/ES3/Conformance/12_Statement/12.13_The_throw_statement/S12.13_A2_T1.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.13_A2_T1; - * @section: 12.13; - * @assertion: "throw Expression" returns (throw, GetValue(Result(1)), empty), where 1 evaluates Expression; - * @description: Throwing undefined; - */ - -// CHECK#1 -try{ - throw undefined; -} -catch(e){ - if (e!==undefined) $ERROR('#1: Exception === undefined. Actual: Exception ==='+ e ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.13_The_throw_statement/S12.13_A2_T2.js b/tests/ES3/Conformance/12_Statement/12.13_The_throw_statement/S12.13_A2_T2.js deleted file mode 100644 index d0dfd9318..000000000 --- a/tests/ES3/Conformance/12_Statement/12.13_The_throw_statement/S12.13_A2_T2.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.13_A2_T2; - * @section: 12.13; - * @assertion: "throw Expression" returns (throw, GetValue(Result(1)), empty), where 1 evaluates Expression; - * @description: Throwing null; - */ - -// CHECK#1 -try{ - throw null; -} -catch(e){ - if (e!==null) $ERROR('#1: Exception === null. Actual: Exception ==='+ e ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.13_The_throw_statement/S12.13_A2_T3.js b/tests/ES3/Conformance/12_Statement/12.13_The_throw_statement/S12.13_A2_T3.js deleted file mode 100644 index 537e0bedf..000000000 --- a/tests/ES3/Conformance/12_Statement/12.13_The_throw_statement/S12.13_A2_T3.js +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.13_A2_T3; - * @section: 12.13; - * @assertion: "throw Expression" returns (throw, GetValue(Result(1)), empty), where 1 evaluates Expression; - * @description: Throwing boolean; - */ - -// CHECK#1 -try{ - throw true; -} -catch(e){ - if (e!==true) $ERROR('#1: Exception ===true. Actual: Exception ==='+ e ); -} - -// CHECK#2 -try{ - throw false; -} -catch(e){ - if (e!==false) $ERROR('#2: Exception ===false. Actual: Exception ==='+ e ); -} - -// CHECK#3 -var b=false; -try{ - throw b; -} -catch(e){ - if (e!==false) $ERROR('#3: Exception ===false. Actual: Exception ==='+ e ); -} - -// CHECK#4 -var b=true; -try{ - throw b; -} -catch(e){ - if (e!==true) $ERROR('#4: Exception ===true. Actual: Exception ==='+ e ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.13_The_throw_statement/S12.13_A2_T4.js b/tests/ES3/Conformance/12_Statement/12.13_The_throw_statement/S12.13_A2_T4.js deleted file mode 100644 index 2f70a0ce0..000000000 --- a/tests/ES3/Conformance/12_Statement/12.13_The_throw_statement/S12.13_A2_T4.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.13_A2_T4; - * @section: 12.13; - * @assertion: "throw Expression" returns (throw, GetValue(Result(1)), empty), where 1 evaluates Expression; - * @description: Throwing string; - */ - -// CHECK#1 -try{ - throw "exception #1"; -} -catch(e){ - if (e!=="exception #1") $ERROR('#1: Exception ==="exception #1". Actual: Exception ==='+ e ); -} - -// CHECK#2 -var b="exception #1"; -try{ - throw b; -} -catch(e){ - if (e!=="exception #1") $ERROR('#2: Exception ==="exception #1". Actual: Exception ==='+ e ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.13_The_throw_statement/S12.13_A2_T5.js b/tests/ES3/Conformance/12_Statement/12.13_The_throw_statement/S12.13_A2_T5.js deleted file mode 100644 index 56ce263d2..000000000 --- a/tests/ES3/Conformance/12_Statement/12.13_The_throw_statement/S12.13_A2_T5.js +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.13_A2_T5; - * @section: 12.13; - * @assertion: "throw Expression" returns (throw, GetValue(Result(1)), empty), where 1 evaluates Expression; - * @description: Throwing number; - */ - -// CHECK#1 -try{ - throw 13; -} -catch(e){ - if (e!==13) $ERROR('#1: Exception ===13. Actual: Exception ==='+ e ); -} - -// CHECK#2 -var b=13; -try{ - throw b; -} -catch(e){ - if (e!==13) $ERROR('#2: Exception ===13. Actual: Exception ==='+ e ); -} - -// CHECK#3 -try{ - throw 2.13; -} -catch(e){ - if (e!==2.13) $ERROR('#3: Exception ===2.13. Actual: Exception ==='+ e ); -} - -// CHECK#4 -try{ - throw NaN; -} -catch(e){ - if (!isNaN(e)) $ERROR('#4: Exception is NaN'); -} - -// CHECK#5 -try{ - throw +Infinity; -} -catch(e){ - if (e!==+Infinity) $ERROR('#5: Exception ===+Infinity. Actual: Exception ==='+ e ); -} - -// CHECK#6 -try{ - throw -Infinity; -} -catch(e){ - if (e!==-Infinity) $ERROR('#6: Exception ===-Infinity. Actual: Exception ==='+ e ); -} - -// CHECK#7 -try{ - throw +0; -} -catch(e){ - if (e!==+0) $ERROR('#7: Exception ===+0. Actual: Exception ==='+ e ); -} - -// CHECK#8 -try{ - throw -0; -} -catch(e){ - if (e!==-0) $ERROR('#8: Exception ===-0. Actual: Exception ==='+ e ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.13_The_throw_statement/S12.13_A2_T6.js b/tests/ES3/Conformance/12_Statement/12.13_The_throw_statement/S12.13_A2_T6.js deleted file mode 100644 index 1c9c8ce6c..000000000 --- a/tests/ES3/Conformance/12_Statement/12.13_The_throw_statement/S12.13_A2_T6.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.13_A2_T6; - * @section: 12.13; - * @assertion: "throw Expression" returns (throw, GetValue(Result(1)), empty), where 1 evaluates Expression; - * @description: Throwing object; - */ - -var myObj = {p1: 'a', - p2: 'b', - p3: 'c', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';}, - parseInt : function(){return 'obj_parseInt';}, - NaN : 'obj_NaN', - Infinity : 'obj_Infinity', - eval : function(){return 'obj_eval';}, - parseFloat : function(){return 'obj_parseFloat';}, - isNaN : function(){return 'obj_isNaN';}, - isFinite : function(){return 'obj_isFinite';}, - i:7 -} - -try{ - throw myObj; -} -catch(e){ -// CHECK#1 - if (e.p1!=="a") $ERROR('#1: e.p1 === "a". Actual: e.p1 ==='+ e.p1 ); -// CHECK#2 - if (e.value!=='myObj_value') $ERROR('#2: e.p1 === \'myObj_value\'. Actual: e.p1 ==='+ e.p1 ); -// CHECK#3 - if (e.eval()!=='obj_eval') $ERROR('#3: e.p1 === \'obj_eval\'. Actual: e.p1 ==='+ e.p1 ); -} - -// CHECK#4 -myObj.i=6 -try{ - throw myObj; -} -catch(e){} -if (myObj.i!==6) $ERROR('#4: Handling of catch must be correct'); diff --git a/tests/ES3/Conformance/12_Statement/12.13_The_throw_statement/S12.13_A2_T7.js b/tests/ES3/Conformance/12_Statement/12.13_The_throw_statement/S12.13_A2_T7.js deleted file mode 100644 index a6464faef..000000000 --- a/tests/ES3/Conformance/12_Statement/12.13_The_throw_statement/S12.13_A2_T7.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.13_A2_T7; - * @section: 12.13; - * @assertion: "throw Expression" returns (throw, GetValue(Result(1)), empty), where 1 evaluates Expression; - * @description: Throwing Array; - */ - -var mycars = new Array(); -mycars[0] = "Saab"; -mycars[1] = "Volvo"; -mycars[2] = "BMW"; - -var mycars2 = new Array(); -mycars2[0] = "Mercedes"; -mycars2[1] = "Jeep"; -mycars2[2] = "Suzuki"; - -// CHECK#1 -try{ - throw mycars; -} -catch(e){ - for (var i=0;i<3;i++){ - if (e[i]!==mycars[i]) $ERROR('#1.'+i+': Exception['+i+'] === mycars['+i+']. Actual: Exception['+i+'] ==='+ e[i] ); - } -} diff --git a/tests/ES3/Conformance/12_Statement/12.13_The_throw_statement/S12.13_A3_T1.js b/tests/ES3/Conformance/12_Statement/12.13_The_throw_statement/S12.13_A3_T1.js deleted file mode 100644 index bc420d5c2..000000000 --- a/tests/ES3/Conformance/12_Statement/12.13_The_throw_statement/S12.13_A3_T1.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.13_A3_T1; - * @section: 12.13; - * @assertion: 1. Evaluate Expression; - * @description: Evaluating boolean expression; - */ - -// CHECK#1 -var b=true; -try{ - throw b&&false; -} -catch(e){ - if (e!==false) $ERROR('#1: Exception === false(operaton &&). Actual: Exception ==='+ e ); -} - -// CHECK#2 -var b=true; -try{ - throw b||false; -} -catch(e){ - if (e!==true) $ERROR('#2: Exception === true(operaton ||). Actual: Exception ==='+ e ); -} - -// CHECK#3 -try{ - throw !false; -} -catch(e){ - if (e!==true) $ERROR('#3: Exception === true(operaton !). Actual: Exception ==='+ e ); -} - -// CHECK#4 -var b=true; -try{ - throw !(b&&false); -} -catch(e){ - if (e!==true) $ERROR('#4: Exception === true(operaton &&). Actual: Exception ==='+ e ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.13_The_throw_statement/S12.13_A3_T2.js b/tests/ES3/Conformance/12_Statement/12.13_The_throw_statement/S12.13_A3_T2.js deleted file mode 100644 index 4dbf33d0c..000000000 --- a/tests/ES3/Conformance/12_Statement/12.13_The_throw_statement/S12.13_A3_T2.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.13_A3_T2; - * @section: 12.13; - * @assertion: 1. Evaluate Expression; - * @description: Evaluating string expression; - */ - -// CHECK#1 -try{ - throw "exception"+" #1"; -} -catch(e){ - if (e!=="exception #1") $ERROR('#1: Exception === "exception #1"(operaton +). Actual: Exception ==='+ e ); -} - -// CHECK#2 -var b="exception" -var a=" #1"; -try{ - throw b+a; -} -catch(e){ - if (e!=="exception #1") $ERROR('#2: Exception === "exception #1"(operaton +). Actual: Exception ==='+ e ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.13_The_throw_statement/S12.13_A3_T3.js b/tests/ES3/Conformance/12_Statement/12.13_The_throw_statement/S12.13_A3_T3.js deleted file mode 100644 index f2a60cab8..000000000 --- a/tests/ES3/Conformance/12_Statement/12.13_The_throw_statement/S12.13_A3_T3.js +++ /dev/null @@ -1,91 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.13_A3_T3; - * @section: 12.13; - * @assertion: 1. Evaluate Expression; - * @description: Evaluating number expression; - */ - -// CHECK#1 -try{ - throw 10+3; -} -catch(e){ - if (e!==13) $ERROR('#1: Exception ===13(operaton +). Actual: Exception ==='+ e); -} - -// CHECK#2 -var b=10; -var a=3; -try{ - throw a+b; -} -catch(e){ - if (e!==13) $ERROR('#2: Exception ===13(operaton +). Actual: Exception ==='+ e); -} - -// CHECK#3 -try{ - throw 3.15-1.02; -} -catch(e){ - if (e!==2.13) $ERROR('#3: Exception ===2.13(operaton -). Actual: Exception ==='+ e); -} - -// CHECK#4 -try{ - throw 2*2; -} -catch(e){ - if (e!==4) $ERROR('#4: Exception ===4(operaton *). Actual: Exception ==='+ e); -} - -// CHECK#5 -try{ - throw 1+Infinity; -} -catch(e){ - if (e!==+Infinity) $ERROR('#5: Exception ===+Infinity(operaton +). Actual: Exception ==='+ e); -} - -// CHECK#6 -try{ - throw 1-Infinity; -} -catch(e){ - if (e!==-Infinity) $ERROR('#6: Exception ===-Infinity(operaton -). Actual: Exception ==='+ e); -} - -// CHECK#7 -try{ - throw 10/5; -} -catch(e){ - if (e!==2) $ERROR('#7: Exception ===2(operaton /). Actual: Exception ==='+ e); -} - -// CHECK#8 -try{ - throw 8>>2; -} -catch(e){ - if (e!==2) $ERROR('#8: Exception ===2(operaton >>). Actual: Exception ==='+ e); -} - -// CHECK#9 -try{ - throw 2<<2; -} -catch(e){ - if (e!==8) $ERROR('#9: Exception ===8(operaton <<). Actual: Exception ==='+ e); -} - -// CHECK#10 -try{ - throw 123%100; -} -catch(e){ - if (e!==23) $ERROR('#10: Exception ===23(operaton %). Actual: Exception ==='+ e); -} diff --git a/tests/ES3/Conformance/12_Statement/12.13_The_throw_statement/S12.13_A3_T4.js b/tests/ES3/Conformance/12_Statement/12.13_The_throw_statement/S12.13_A3_T4.js deleted file mode 100644 index ed0204eac..000000000 --- a/tests/ES3/Conformance/12_Statement/12.13_The_throw_statement/S12.13_A3_T4.js +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.13_A3_T4; - * @section: 12.13; - * @assertion: 1. Evaluate Expression; - * @description: Evaluating array expression; - */ - -var mycars = new Array(); -mycars[0] = "Saab"; -mycars[1] = "Volvo"; -mycars[2] = "BMW"; - -var mycars2 = new Array(); -mycars2[0] = "Mercedes"; -mycars2[1] = "Jeep"; -mycars2[2] = "Suzuki"; - -// CHECK#1 -try{ - throw mycars.concat(mycars2); -} -catch(e){ - for (var i=0;i<3;i++){ - if (e[i]!==mycars[i]) $ERROR('#1.'+i+': Exception['+i+']===mycars['+i+'](operation .concat). Actual: Exception['+i+']==='+ e[i] ); - } - for (var i=3;i<6;i++){ - if (e[i]!==mycars2[i-3]) $ERROR('#1.'+i+': Exception['+i+']===mycars2['+(i-3)+'](operation .concat). Actual: Exception['+i+']==='+ e[i] ); - } -} - -// CHECK#2 -try{ - throw new Array("Mercedes","Jeep","Suzuki"); -} -catch(e){ - for (var i=0;i<3;i++){ - if (e[i]!==mycars2[i]) $ERROR('#2.'+i+': Exception['+i+']===mycars2['+i+'](operation new). Actual: Exception['+i+']==='+ e[i] ); - } -} - -// CHECK#3 -try{ - throw mycars.concat(new Array("Mercedes","Jeep","Suzuki")); -} -catch(e){ - for (var i=0;i<3;i++){ - if (e[i]!==mycars[i]) $ERROR('#3.'+i+': Exception['+i+']===mycars['+i+'](operation .concat(new)). Actual: Exception['+i+']==='+ e[i] ); - } - for (var i=3;i<6;i++){ - if (e[i]!==mycars2[i-3]) $ERROR('#3.'+i+': Exception['+i+']===mycars2['+(i-3)+'](operation .concat(new)). Actual: Exception['+i+']==='+ e[i] ); - } -} diff --git a/tests/ES3/Conformance/12_Statement/12.13_The_throw_statement/S12.13_A3_T5.js b/tests/ES3/Conformance/12_Statement/12.13_The_throw_statement/S12.13_A3_T5.js deleted file mode 100644 index c64f4387e..000000000 --- a/tests/ES3/Conformance/12_Statement/12.13_The_throw_statement/S12.13_A3_T5.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.13_A3_T5; - * @section: 12.13; - * @assertion: 1. Evaluate Expression; - * @description: Evaluating equation expression; - */ - -// CHECK#1 -var a=true; -var b=false; -try{ - throw ((a&&(!b))?"exception":" #1"); -} -catch(e){ - if (e!=="exception") $ERROR('#1: Exception ==="exception"(operaton ? , ). Actual: Exception ==='+e ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.13_The_throw_statement/S12.13_A3_T6.js b/tests/ES3/Conformance/12_Statement/12.13_The_throw_statement/S12.13_A3_T6.js deleted file mode 100644 index 88bc25518..000000000 --- a/tests/ES3/Conformance/12_Statement/12.13_The_throw_statement/S12.13_A3_T6.js +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.13_A3_T6; - * @section: 12.13; - * @assertion: 1. Evaluate Expression; - * @description: Evaluating functions; - */ - -// CHECK#1 -var i=0; -function adding1(){ - i++; - return 1; -} -try{ - throw (adding1()); -} -catch(e){ - if (e!==1) $ERROR('#1: Exception ===1. Actual: Exception ==='+ e); -} - -// CHECK#2 -var i=0; -function adding2(){ - i++; - return i; -} -try{ - throw adding2(); -} -catch(e){} -if (i!==1) $ERROR('#2: i===1. Actual: i==='+ i); - -// CHECK#3 -var i=0; -function adding3(){ - i++; -} -try{ - throw adding3(); -} -catch(e){} -if (i!==1) $ERROR('#3: i===1. Actual: i==='+i); - -// CHECK#4 -function adding4(i){ - i++; - return i; -} -try{ - throw (adding4(1)); -} -catch(e){ - if (e!==2) $ERROR('#4: Exception ===2. Actual: Exception ==='+ e); -} diff --git a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A1.js b/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A1.js deleted file mode 100644 index be1377005..000000000 --- a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A1.js +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.14_A1; - * @section: 12.14; - * @assertion: The production TryStatement : try Block Catch is evaluated as follows: 2. If Result(1).type is not throw, return Result(1); - * @description: Executing TryStatement : try Block Catch. The statements doesn't cause actual exceptions; - */ - -// CHECK#1 -try { - var x=0; -} -catch (e) { - $ERROR('#1: If Result(1).type is not throw, return Result(1). Actual: 4 Return(Result(3))'); -} - -// CHECK#2 -var c1=0; -try{ - var x1=1; -} -finally -{ - c1=1; -} -if(x1!==1){ - $ERROR('#2.1: "try" block must be evaluated. Actual: try Block has not been evaluated'); -} -if (c1!==1){ - $ERROR('#2.2: "finally" block must be evaluated. Actual: finally Block has not been evaluated'); -} - -// CHECK#3 -var c2=0; -try{ - var x2=1; -} -catch(e){ - $ERROR('#3.1: If Result(1).type is not throw, return Result(1). Actual: 4 Return(Result(3))'); -} -finally{ - c2=1; -} -if(x2!==1){ - $ERROR('#3.2: "try" block must be evaluated. Actual: try Block has not been evaluated'); -} -if (c2!==1){ - $ERROR('#3.3: "finally" block must be evaluated. Actual: finally Block has not been evaluated'); -} diff --git a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A10_T1.js b/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A10_T1.js deleted file mode 100644 index bc083cae9..000000000 --- a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A10_T1.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.14_A10_T1; - * @section: 12.14; - * @assertion: Using "try" with "catch" or "finally" statement within/without a "while" statement; - * @description: Throwing exception while executing iteration statement placed into try Block; - */ - -// CHECK#1 -var i=0; -try{ -while(i<10){ - if(i===5) throw i; - i++; -} -} -catch(e){ - if(e!==5)$ERROR('#1: Exception === 5. Actual: Exception ==='+ e ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A10_T2.js b/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A10_T2.js deleted file mode 100644 index 083cc9b4b..000000000 --- a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A10_T2.js +++ /dev/null @@ -1,115 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.14_A10_T2; - * @section: 12.14; - * @assertion: Using "try" with "catch" or "finally" statement within/without a "while" statement; - * @description: Try statement inside loop, where use continue loop; - */ - -// CHECK#1 -var c1=0,fin=0; -while(c1<2){ - try{ - c1+=1; - continue; - } - catch(er1){} - finally{ - fin=1; - } - fin=-1; -}; -if(fin!==1){ - $ERROR('#1: "finally" block must be evaluated at "try{continue} catch finally" construction'); -} - -// CHECK#2 -var c2=0,fin2=0; -while(c2<2){ - try{ - throw "ex1"; - } - catch(er1){ - c2+=1; - continue; - } - finally{ - fin2=1; - } - fin2=-1; -} -if(fin2!==1){ - $ERROR('#2: "finally" block must be evaluated at "try catch{continue} finally" construction'); -} - -// CHECK#3 -var c3=0,fin3=0; -while(c3<2){ - try{ - throw "ex1"; - } - catch(er1){ - c3+=1; - } - finally{ - fin3=1; - continue; - } - fin3=0; -} -if(fin3!==1){ - $ERROR('#3: "finally" block must be evaluated at "try catch finally{continue}" construction'); -} - -// CHECK#4 -var c4=0,fin4=0; -while(c4<2){ - try{ - c4+=1; - continue; - } - finally{ - fin4=1; - } - fin4=-1; -}; -if(fin4!==1){ - $ERROR('#4: "finally" block must be evaluated at "try{continue} finally" construction'); -} - -// CHECK#5 -var c5=0; -while(c5<2){ - try{ - throw "ex1"; - } - catch(er1){ - c5+=1; - continue; - } -} -if(c5!==2){ - $ERROR('#5: "try catch{continue}" must work correctly'); -} - -// CHECK#6 -var c6=0,fin6=0; -while(c6<2){ - try{ - c6+=1; - throw "ex1" - } - finally{ - fin6=1; - continue; - } - fin6=-1; -} -if(fin6!==1){ - $ERROR('#6.1: "finally" block must be evaluated'); -} -if(c6!==2){ - $ERROR('#6.2: "try finally{continue}" must work correctly'); -} diff --git a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A10_T3.js b/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A10_T3.js deleted file mode 100644 index 7bf95fd30..000000000 --- a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A10_T3.js +++ /dev/null @@ -1,150 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.14_A10_T3; - * @section: 12.14; - * @assertion: Using "try" with "catch" or "finally" statement within/without a "while" statement; - * @description: Try statement inside loop, where use break; - */ - -// CHECK#1 -var c1=0,fin=0; -while(c1<2){ - try{ - c1+=1; - break; - } - catch(er1){} - finally{ - fin=1; - } - fin=-1; - c1+=2; -} -if(fin!==1){ - $ERROR('#1.1: "finally" block must be evaluated'); -} -if(c1!==1){ - $ERROR('#1.2: "try{break}catch finally" must work correctly'); -} - -// CHECK#2 -var c2=0,fin2=0; -while(c2<2){ - try{ - throw "ex1"; - } - catch(er1){ - c2+=1; - break; - } - finally{ - fin2=1; - } - c2+=2; - fin2=-1; -} -if(fin2!==1){ - $ERROR('#2.1: "finally" block must be evaluated'); -} -if(c2!==1){ - $ERROR('#2.2: "try catch{break} finally" must work correctly'); -} - -// CHECK#3 -var c3=0,fin3=0; -while(c3<2){ - try{ - throw "ex1"; - } - catch(er1){ - c3+=1; - } - finally{ - fin3=1; - break; - } - c3+=2; - fin3=0; -} -if(fin3!==1){ - $ERROR('#3.1: "finally" block must be evaluated'); -} -if(c3!==1){ - $ERROR('#3.2: "try catch finally{break}" must work correctly'); -} - -// CHECK#4 -var c4=0,fin4=0; -while(c4<2){ - try{ - c4+=1; - break; - } - finally{ - fin4=1; - } - fin4=-1; - c4+=2; -} -if(fin4!==1){ - $ERROR('#4.1: "finally" block must be evaluated'); -} -if(c4!==1){ - $ERROR('#4.2: "try{break} finally" must work correctly'); -} - -// CHECK#5 -var c5=0; -while(c5<2){ - try{ - throw "ex1"; - } - catch(er1){ - break; - } -} -if(c5!==0){ - $ERROR('#5: "try catch{break}" must work correctly'); -} - -// CHECK#6 -var c6=0; -while(c6<2){ - try{ - c6+=1; - break; - } - catch(er1){} - c6+=2; -} -if(c6!==1){ - $ERROR('#6: "try{break} catch" must work correctly'); -} - -// CHECK#7 -var c7=0,fin7=0; -try{ - while(c7<2){ - try{ - c7+=1; - throw "ex1"; - } - finally{ - fin7=1; - break; - } - fin7=-1; - c7+=2; - } -} -catch(ex1){ - c7=10; -} -if(fin7!==1){ - $ERROR('#7.1: "finally" block must be evaluated'); -} -if(c7!==1){ - $ERROR('#7.2: "try finally{break}" must work correctly'); -} diff --git a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A10_T4.js b/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A10_T4.js deleted file mode 100644 index 1f0e49e7e..000000000 --- a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A10_T4.js +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.14_A10_T4; - * @section: 12.14; - * @assertion: Using "try" with "catch" or "finally" statement within/without a "while" statement; - * @description: Try statement inside loop, where combinate using break and continue; - */ - -// CHECK#1 -var c1=0,fin=0; -while(c1<2){ - try{ - c1+=1; - break; - } - catch(er1){} - finally{ - fin=1; - continue; - } - fin=-1; - c1+=2; -} -if(fin!==1){ - $ERROR('#1.1: "finally" block must be evaluated'); -} -if(c1!==2){ - $ERROR('#1.2: "try{break} catch finally{continue}" must work correctly'); -} - -// CHECK#2 -var c2=0,fin2=0; -while(c2<2){ - try{ - throw "ex1"; - } - catch(er1){ - c2+=1; - break; - } - finally{ - fin2=1; - continue; - } - c2+=2; - fin2=-1; -} -if(fin2!==1){ - $ERROR('#2.1: "finally" block must be evaluated'); -} -if(c2!==2){ - $ERROR('#2.2: "try catch{break} finally{continue} must work correctly'); -} diff --git a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A10_T5.js b/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A10_T5.js deleted file mode 100644 index a9f152725..000000000 --- a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A10_T5.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.14_A10_T5; - * @section: 12.14; - * @assertion: Using "try" with "catch" or "finally" statement within/without a "while" statement; - * @description: Throw some exceptions from different place of loop body; - */ - -// CHECK#1 -var c=0, i=0; -var fin=0; -while(i<10){ - i+=1; - try{ - if(c===0){ - throw "ex1"; - $ERROR('#1.1: throw "ex1" lead to throwing exception'); - } - c+=2; - if(c===1){ - throw "ex2"; - $ERROR('#1.2: throw "ex2" lead to throwing exception'); - } - } - catch(er1){ - c-=1; - continue; - $ERROR('#1.3: "try catch{continue} finally" must work correctly'); - } - finally{ - fin+=1; - } -} -if(fin!==10){ - $ERROR('#1.4: "finally" block must be evaluated'); -} diff --git a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A11_T1.js b/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A11_T1.js deleted file mode 100644 index 0722243c5..000000000 --- a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A11_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.14_A11_T1; - * @section: 12.14; - * @assertion: Using "try" with "catch" or "finally" statement within/without a "for" statement; - * @description: Loop inside try Block, where throw exception; - */ - -// CHECK#1 -try{ - for(var i=0;i<10;i++){ - if(i===5) throw i; - } -} -catch(e){ - if(e!==5)$ERROR('#1: Exception === 5. Actual: Exception ==='+ e ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A11_T2.js b/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A11_T2.js deleted file mode 100644 index 07847e5de..000000000 --- a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A11_T2.js +++ /dev/null @@ -1,122 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.14_A11_T2; - * @section: 12.14; - * @assertion: Using "try" with "catch" or "finally" statement within/without a "for" statement; - * @description: Try statement inside loop, where use continue loop; - */ - -// CHECK#1 -var fin=0; -for(var i=0;i<5;i++){ - try{ - i+=1; - continue; - } - catch(er1){} - finally{ - fin=1; - } - fin=-1; -} -if(fin!==1){ - $ERROR('#1: "finally" block must be evaluated at "try{continue} catch finally" construction'); -} - -// CHECK#2 -var c2=0,fin2=0; -for(var i=0;i<5;i++){ - try{ - throw "ex1"; - } - catch(er1){ - c2+=1; - continue; - } - finally{ - fin2=1; - } - fin2=-1; -} -if(fin2!==1){ - $ERROR('#2.1: "finally" block must be evaluated'); -} -if(c2!==5){ - $ERROR('#2.1: "try catch{continue} finally" must work correctly'); -} - -// CHECK#3 -var c3=0,fin3=0; -for(var i=0;i<5;i++){ - try{ - throw "ex1"; - } - catch(er1){ - c3+=1; - } - finally{ - fin3=1; - continue; - } - fin3=0; -} -if(fin3!==1){ - $ERROR('#3.1: "finally" block must be evaluated'); -} -if(c3!==5){ - $ERROR('#3.2: "try catch finally{continue}" must work correctly'); -} - -// CHECK#4 -var fin=0; -for(var i=0;i<5;i++){ - try{ - i+=1; - continue; - } - finally{ - fin=1; - } - fin=-1; -}; -if(fin!==1){ - $ERROR('#4: "finally" block must be evaluated at "try{continue} finally" construction'); -} - -// CHECK#5 -var c5=0; -for(var c5=0;c5<10;){ - try{ - throw "ex1"; - } - catch(er1){ - c5+=1; - continue; - } - c5+=12; -}; -if(c5!==10){ - $ERROR('#5: "try catch{continue} must work correctly'); -} - -// CHECK#6 -var c6=0,fin6=0; -for(var c6=0;c6<10;){ - try{ - c6+=1; - throw "ex1" - } - finally{ - fin6=1; - continue; - } - fin6=-1; -}; -if(fin6!==1){ - $ERROR('#6.1: "finally" block must be evaluated'); -} -if(c6!==10){ - $ERROR('#6.2: "try finally{continue}" must work correctly'); -} diff --git a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A11_T3.js b/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A11_T3.js deleted file mode 100644 index dc4444c7c..000000000 --- a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A11_T3.js +++ /dev/null @@ -1,149 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.14_A11_T3; - * @section: 12.14; - * @assertion: Using "try" with "catch" or "finally" statement within/without a "for" statement; - * @description: Try statement inside loop, where use break; - */ - -// CHECK#1 -var c1=0,fin=0; -for(var i=0;i<5;i++){ - try{ - c1+=1; - break; - } - catch(er1){} - finally{ - fin=1; - } - fin=-1; - c1+=2; -}; -if(fin!==1){ - $ERROR('#1.1: "finally" block must be evaluated'); -} -if(c1!==1){ - $ERROR('#1.2: "try{break}catch finally" must work correctly'); -} - -// CHECK#2 -var c2=0,fin2=0; -for(var i=0;i<5;i++){ - try{ - throw "ex1"; - } - catch(er1){ - c2+=1; - break; - } - finally{ - fin2=1; - } - c2+=2; - fin2=-1; -}; -if(fin2!==1){ - $ERROR('#2.1: "finally" block must be evaluated'); -} -if(c2!==1){ - $ERROR('#2.2: "try catch{break} finally" must work correctly'); -} - -// CHECK#3 -var c3=0,fin3=0; -for(var i=0;i<5;i++){ - try{ - throw "ex1"; - } - catch(er1){ - c3+=1; - } - finally{ - fin3=1; - break; - } - c3+=2; - fin3=0; -}; -if(fin3!==1){ - $ERROR('#3.1: "finally" block must be evaluated'); -} -if(c3!==1){ - $ERROR('#3.2: "try catch finally{break}" must work correctly'); -} - -// CHECK#4 -var c4=0,fin4=0; -for(var i=0;i<5;i++){ - try{ - c4+=1; - break; - } - finally{ - fin4=1; - } - fin4=-1; - c4+=2; -}; -if(fin4!==1){ - $ERROR('#4.1: "finally" block must be evaluated'); -} -if(c4!==1){ - $ERROR('#4.2: "try{break} finally" must work correctly'); -} - -// CHECK#5 -for(var i=0;i<5;i++){ - try{ - throw "ex1"; - } - catch(er1){ - break; - } -}; -if(i!==0){ - $ERROR('#5: "try catch{break}" must work correctly'); -} - -// CHECK#6 -var c6=0; -for(var c6=0;c6<5;){ - try{ - c6+=1; - break; - } - catch(er1){} - c6+=2; -}; -if(c6!==1){ - $ERROR('#6: "try{break} catch" must work correctly'); -} - -// CHECK#7 -var c7=0,fin7=0; -try{ - for(var c7=0;c7<5;){ - try{ - c7+=1; - throw "ex1"; - } - finally{ - fin7=1; - break; - } - fin7=-1; - c7+=2; - } -} -catch(ex1){ - c7=10; -} -if(fin7!==1){ - $ERROR('#7.1: "finally" block must be evaluated'); -} -if(c7!==1){ - $ERROR('#7.2: "try finally{break}" must work correctly'); -} diff --git a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A11_T4.js b/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A11_T4.js deleted file mode 100644 index 25934836f..000000000 --- a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A11_T4.js +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.14_A11_T4; - * @section: 12.14; - * @assertion: Using "try" with "catch" or "finally" statement within/without a "for" statement; - * @description: Try statement inside loop, where combinate using break and continue; - */ - -// CHECK#1 -var c1=0,fin=0; -for(var i=0;i<5;i++){ - try{ - c1+=1; - break; - } - catch(er1){} - finally{ - fin=1; - continue; - } - fin=-1; - c1+=2; -} -if(fin!==1){ - $ERROR('#1.1: "finally" block must be evaluated'); -} -if(c1!==5){ - $ERROR('#1.2: "try{break} catch finally{continue}" must work correctly'); -} - -// CHECK#2 -var c2=0,fin2=0; -for(var i=0;i<5;i++){ - try{ - throw "ex1"; - } - catch(er1){ - c2+=1; - break; - } - finally{ - fin2=1; - continue; - } - c2+=2; - fin2=-1; -} -if(fin2!==1){ - $ERROR('#2.1: "finally" block must be evaluated'); -} -if(c2!==5){ - $ERROR('#2.2: "try catch{break} finally{continue}" must work correctly'); -} diff --git a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A12_T1.js b/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A12_T1.js deleted file mode 100644 index 14c7cb41a..000000000 --- a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A12_T1.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.14_A12_T1; - * @section: 12.14; - * @assertion: Using "try" with "catch" or "finally" statement within/without a "for-in" statement; - * @description: Loop inside try Block, where throw exception; - */ - -var x; -var mycars = new Array(); -mycars[0] = "Saab"; -mycars[1] = "Volvo"; -mycars[2] = "BMW"; - -// CHECK#1 -try{ - for (x in mycars){ - if (mycars[x]==="BMW") throw "ex"; - } -} -catch(e){ - if(e!=="ex")$ERROR('#1: Exception ==="ex". Actual: Exception ==='+ e ); -} - - diff --git a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A12_T2.js b/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A12_T2.js deleted file mode 100644 index 9d97197fb..000000000 --- a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A12_T2.js +++ /dev/null @@ -1,131 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.14_A12_T2; - * @section: 12.14; - * @assertion: Using "try" with "catch" or "finally" statement within/without a "for-in" statement; - * @description: Try statement inside loop, where use continue loop; - */ - -var x; -var mycars = new Array(); -mycars[0] = "Saab"; -mycars[1] = "Volvo"; -mycars[2] = "BMW"; - -// CHECK#1 -var fin=0; -var i=0; -for (x in mycars){ - try{ - i+=1; - continue; - } - catch(er1){} - finally{ - fin=1; - } - fin=-1; -} -if(fin!==1){ - $ERROR('#1.1: "finally" block must be evaluated'); -} -if(i!==3){ - $ERROR('#1.2: "try{continue} catch finally" must work correctly'); -} - -// CHECK#2 -var c2=0,fin2=0; -for (x in mycars){ - try{ - throw "ex1"; - } - catch(er1){ - c2+=1; - continue; - } - finally{ - fin2=1; - } - fin2=-1; -} -if(fin2!==1){ - $ERROR('#2.1: "finally" block must be evaluated'); -} -if(c2!==3){ - $ERROR('#2.1: "try catch{continue} finally" must work correctly'); -} - -// CHECK#3 -var c3=0,fin3=0; -for (x in mycars){ - try{ - throw "ex1"; - } - catch(er1){ - c3+=1; - } - finally{ - fin3=1; - continue; - } - fin3=0; -} -if(c3!==3){ - $ERROR('#3.1: "finally" block must be evaluated'); -} -if(fin3!==1){ - $ERROR('#3.2: "try catch finally{continue}" must work correctly'); -} - -// CHECK#4 -var fin=0; -for (x in mycars){ - try{ - continue; - } - finally{ - fin=1; - } - fin=-1; -} -if(fin!==1){ - $ERROR('#4: "finally" block must be evaluated at "try{continue} finally" construction'); -} - -// CHECK#5 -var c5=0; -for (x in mycars){ - try{ - throw "ex1"; - } - catch(er1){ - c5+=1; - continue; - } - c5+=12; -} -if(c5!==3){ - $ERROR('#5: "try catch{continue}" must work correctly'); -} - -// CHECK#6 -var c6=0,fin6=0; -for (x in mycars){ - try{ - c6+=1; - throw "ex1"; - } - finally{ - fin6=1; - continue; - } - fin6=-1; -} -if(fin6!==1){ - $ERROR('#6.1: "finally" block must be evaluated'); -} -if(c6!==3){ - $ERROR('#6.2: "try finally{continue}" must work correctly'); -} diff --git a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A12_T3.js b/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A12_T3.js deleted file mode 100644 index e4749adbe..000000000 --- a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A12_T3.js +++ /dev/null @@ -1,161 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.14_A12_T3; - * @section: 12.14; - * @assertion: Using "try" with "catch" or "finally" statement within/without a "for-in" statement; - * @description: Try statement inside loop, where use break; - */ - -var x; -var mycars = new Array(); -mycars[0] = "Saab"; -mycars[1] = "Volvo"; -mycars[2] = "BMW"; - -// CHECK#1 -var c1=0,fin=0; -for (x in mycars){ - try{ - c1+=1; - break; - } - catch(er1){ - c1+=1; - } - finally{ - fin=1; - } - fin=-1; - c1+=2; -}; -if(fin!==1){ - $ERROR('#1.1: "finally" block must be evaluated'); -} -if(c1!==1){ - $ERROR('#1.2: "try{break}catch finally" must work correctly'); -} - -// CHECK#2 -var c2=0,fin2=0; -for (x in mycars){ - try{ - throw "ex1"; - } - catch(er1){ - c2+=1; - break; - } - finally{ - fin2=1; - } - c2+=2; - fin2=-1; -} -if(fin2!==1){ - $ERROR('#2.1: "finally" block must be evaluated'); -} -if(c2!==1){ - $ERROR('#2.2: "try catch{break} finally" must work correctly'); -} - -// CHECK#3 -var c3=0,fin3=0; -for (x in mycars){ - try{ - throw "ex1"; - } - catch(er1){ - c3+=1; - } - finally{ - fin3=1; - break; - } - c3+=2; - fin3=0; -} -if(fin3!==1){ - $ERROR('#3.1: "finally" block must be evaluated'); -} -if(c3!==1){ - $ERROR('#3.2: "try catch finally{break}" must work correctly'); -} - -// CHECK#4 -var c4=0,fin4=0; -for (x in mycars){ - try{ - c4+=1; - break; - } - finally{ - fin4=1; - } - fin4=-1; - c4+=2; -} -if(fin4!==1){ - $ERROR('#4.1: "finally" block must be evaluated'); -} -if(c4!==1){ - $ERROR('#4.2: "try{break} finally" must work correctly'); -} - -// CHECK#5 -var c5=0; -for (x in mycars){ - try{ - throw "ex1"; - c5++; - } - catch(er1){ - break; - c5++; - } - c5++; -} -if(c5!==0){ - $ERROR('#5: "try catch{break}" must work correctly'); -} - -// CHECK#6 -var c6=0; -for (x in mycars){ - try{ - c6+=1; - break; - } - catch(er1){} - c6+=2; -} -if(c6!==1){ - $ERROR('#6: "try{break} catch" must work correctly'); -} - -// CHECK#7 -var c7=0,fin7=0; -try{ - for (x in mycars){ - try{ - c7+=1; - throw "ex1"; - } - finally{ - fin7=1; - break; - } - fin7=-1; - c7+=2; - } -} -catch(ex1){ - c7=10; -} -if(fin7!==1){ - $ERROR('#7.1: "finally" block must be evaluated'); -} -if(c7!==1){ - $ERROR('#7.2: "try finally{break}" must work correctly'); -} diff --git a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A12_T4.js b/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A12_T4.js deleted file mode 100644 index 07c979fde..000000000 --- a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A12_T4.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.14_A12_T4; - * @section: 12.14; - * @assertion: Using "try" with "catch" or "finally" statement within/without a "for-in" statement; - * @description: Try statement inside loop, where combinate using break and continue; - */ - -var x; -var mycars = new Array(); -mycars[0] = "Saab"; -mycars[1] = "Volvo"; -mycars[2] = "BMW"; - -// CHECK#1 -var c1=0,fin=0; -for (x in mycars){ - try{ - c1+=1; - break; - } - catch(er1){} - finally{ - fin=1; - continue; - } - fin=-1; - c1+=2; -} -if(fin!==1){ - $ERROR('#1.1: "finally" block must be evaluated'); -} -if(c1!==3){ - $ERROR('#1.2: "try{break} catch finally{continue}" must work correctly'); -} - -// CHECK#2 -var c2=0,fin2=0; -for (x in mycars){ - try{ - throw "ex1"; - } - catch(er1){ - c2+=1; - break; - } - finally{ - fin2=1; - continue; - } - c2+=2; - fin2=-1; -} -if(fin2!==1){ - $ERROR('#2.1: "finally" block must be evaluated'); -} -if(c2!==3){ - $ERROR('#2.2: "try catch{break} finally{continue}" must work correctly'); -} diff --git a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A13_T1.js b/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A13_T1.js deleted file mode 100644 index 7535db7f0..000000000 --- a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A13_T1.js +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.14_A13_T1; - * @section: 12.14; - * @assertion: Using "try" with "catch" or "finally" statement with a "return" statement; - * @description: Using try/catch syntax construction; - */ - -// CHECK#1 -function myFunction1(){ - try{ - return 1; - } - catch(err){ - $ERROR('#1.1: "return 1" inside function does not lead to throwing exception'); - return 0; - } - return 2; -} -var x1=myFunction1(); -if(x1!==1){ - $ERROR('#1.2: x1===1. Actual: x1==='+x1); -} - -// CHECK#2 -function myFunction2(){ - try{ - throw "exc"; - return 1; - }catch(err){ - return 2; - } - return 3; -} -var x2=myFunction2(); -if (x2!==2){ - $ERROR('#2: x2===2. Actual: x2==='+x2); -} - -// CHECK#3 -function myFunction3(){ - try{ - return someValue; - }catch(err){ - return 1; - } - return 2; -} -var x3=myFunction3(); -if (x3!==1){ - $ERROR('#3: x3===1. Actual: x3==='+x3); -} - -// CHECK#4 -function myFunction4(){ - try{ - throw "ex1"; - return 1; - }catch(err){ - throw "ex2" - return 0; - } - return 2; -} -try{ - var x4=myFunction4(); - $ERROR('#4.1: Throwing exception inside function lead to throwing exception outside this function'); -} -catch(e){ - if(e==="ex1"){ - $ERROR('#4.2: Exception !=="ex1". Actual: catch previous exception'); - } - if(e!=="ex2"){ - $ERROR('#4.3: Exception ==="ex2". Actual: Exception ==='+ e ); - } -} diff --git a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A13_T2.js b/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A13_T2.js deleted file mode 100644 index 53ae98fe2..000000000 --- a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A13_T2.js +++ /dev/null @@ -1,181 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.14_A13_T2; - * @section: 12.14; - * @assertion: Using "try" with "catch" or "finally" statement with a "return" statement; - * @description: Using try/finally syntax construction; - */ - -// CHECK#1 -var c1=0; -function myFunction1(){ - try{ - return 1; - }finally{ - c1=1; - } - return 2; -} -var x1=myFunction1(); -if(x1!==1){ - $ERROR('#1.1: x1===1. Actual: x1==='+x1); -} -if (c1!==1){ - $ERROR('#1.2: "finally" block must be evaluated'); -} - -// CHECK#2 -var c2=0; -function myFunction2(){ - try{ - throw "exc"; - return 1; - }finally{ - c2=1; - } - return 2; -} -try{ - var x2=myFunction2(); - $ERROR('#2.1: Throwing exception inside function lead to throwing exception outside this function'); -} -catch(e){ - if (c2!==1){ - $ERROR('#2.2: "finally" block must be evaluated'); - } -} - -// CHECK#3 -var c3=0; -function myFunction3(){ - try{ - return someValue; - }finally{ - c3=1; - } - return 2; -} -try{ - var x3=myFunction3(); - $ERROR('#3.1: Throwing exception inside function lead to throwing exception outside this function'); -} -catch(e){ - if (c3!==1){ - $ERROR('#3.2: "finally" block must be evaluated'); - } -} - -// CHECK#4 -var c4=0; -function myFunction4(){ - try{ - return 1; - }finally{ - c4=1; - throw "exc"; - return 0; - } - return 2; -} -try{ - var x4=myFunction4(); - $ERROR('#4.2: Throwing exception inside function lead to throwing exception outside this function'); -} -catch(e){ - if (c4!==1){ - $ERROR('#4.3: "finally" block must be evaluated'); - } -} - -// CHECK#5 -var c5=0; -function myFunction5(){ - try{ - return 1; - }finally{ - c5=1; - return someValue; - return 0; - } - return 2; -} -try{ - var x5=myFunction5(); - $ERROR('#5.2: Throwing exception inside function lead to throwing exception outside this function'); -} -catch(e){ - if (c5!==1){ - $ERROR('#5.3: "finally" block must be evaluated'); - } -} - -// CHECK#6 -var c6=0; -function myFunction6(){ - try{ - throw "ex1"; - return 1; - }finally{ - c6=1; - throw "ex2"; - return 2; - } - return 3; -} -try{ - var x6=myFunction6(); - $ERROR('#6.1: Throwing exception inside function lead to throwing exception outside this function'); -} -catch(e){ - if(e==="ex1"){ - $ERROR('#6.2: Exception !=="ex1". Actual: catch previous exception'); - } - if(e!=="ex2"){ - $ERROR('#6.3: Exception !=="ex1". Actual: '+e); - } - if (c6!==1){ - $ERROR('#6.4: "finally" block must be evaluated'); - } -} - -// CHECK#7 -var c7=0; -function myFunction7(){ - try{ - return 1; - }finally{ - c7=1; - return 2; - } - return 3; -} -var x7=myFunction7(); -if(x7!==2){ - $ERROR('#7.1: "catch" block must be evaluated'); -} -if (c7!==1){ - $ERROR('#7.2: "finally" block must be evaluated'); -} - -// CHECK#8 -var c8=0; -function myFunction8(){ - try{ - throw "ex1"; - }finally{ - c8=1; - return 2; - } - return 3; -} -try{ - var x8=myFunction8(); -} -catch(ex1){ - c8=10; -} -if (c8!==1){ - $ERROR('#8: "finally" block must be evaluated'); -} diff --git a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A13_T3.js b/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A13_T3.js deleted file mode 100644 index bc64ecf3b..000000000 --- a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A13_T3.js +++ /dev/null @@ -1,185 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.14_A13_T3; - * @section: 12.14; - * @assertion: Using "try" with "catch" or "finally" statement with a "return" statement; - * @description: Using try/catch/finally syntax construction; - */ - -// CHECK#1 -var c1=0; -function myFunction1(){ - try{ - return 1; - }catch(err){ - $ERROR('#1.1: "return 1" inside function does not lead to throwing exception'); - return 0; - }finally{ - c1=1; - } - return 2; -} -var x1=myFunction1(); -if(x1!==1){ - $ERROR('#1.3: x1===1. Actual: x1==='+x1); -} -if (c1!==1){ - $ERROR('#1.4: "finally" block must be evaluated'); -} - -// CHECK#2 -var c2=0; -function myFunction2(){ - try{ - throw "exc"; - return 1; - }catch(err){ - return 0; - }finally{ - c2=1; - } - return 2; -} -var x2=myFunction2(); -if (c2!==1){ - $ERROR('#2.1: "finally" block must be evaluated'); -} -if (x2!==0){ - $ERROR('#2.2: x2===0. Actual: x2==='+x2); -} - -// CHECK#3 -var c3=0; -function myFunction3(){ - try{ - return someValue; - }catch(err){ - return 1; - }finally{ - c3=1; - } - return 2; -} -var x3=myFunction3(); -if (c3!==1){ - $ERROR('#3.1: "finally" block must be evaluated'); -} -if (x3!==1){ - $ERROR('#3.2: x3===1. Actual: x3==='+x3); -} - -// CHECK#4 -var c4=0; -function myFunction4(){ - try{ - throw "ex1"; - return 1; - }catch(err){ - throw "ex2" - return 0; - }finally{ - c4=1; - } - return 2; -} -try{ - var x4=myFunction4(); - $ERROR('#4.1: Throwing exception inside function lead to throwing exception outside this function'); -} -catch(e){ - if(e==="ex1"){ - $ERROR('#4.2: Exception !== "ex1". Actual: catch previous exception'); - } - if(e!=="ex2"){ - $ERROR('#4.3: Exception === "ex2". Actual: Exception ==='+ e ); - } - if (c4!==1){ - $ERROR('#4.4: "finally" block must be evaluated'); - } -} - -// CHECK#5 -var c5=0; -function myFunction5(){ - try{ - throw "ex1"; - return 1; - }catch(err){ - return 0; - }finally{ - c5=1; - throw "ex2"; - } - return 2; -} -try{ - var x5=myFunction5(); - $ERROR('#5.1: Throwing exception inside function lead to throwing exception outside this function'); -} -catch(e){ - if(e==="ex1"){ - $ERROR('#5.2: Exception !== "ex1". Actual: catch previous exception'); - } - if(e!=="ex2"){ - $ERROR('#5.3: Exception === "ex2". Actual: Exception ==='+ e ); - } - if (c5!==1){ - $ERROR('#5.4: "finally" block must be evaluated'); - } -} - -// CHECK#6 -var c6=0; -function myFunction6(){ - try{ - throw "ex1"; - return 1; - }catch(err){ - throw "ex2"; - return 0; - }finally{ - c6=1; - throw "ex3"; - } - return 2; -} -try{ - var x6=myFunction6(); - $ERROR('#6.1: Throwing exception inside function lead to throwing exception outside this function'); -} -catch(e){ - if(e==="ex1"){ - $ERROR('#6.2: Exception !== "ex1". Actual: catch previous exception'); - } - if(e==="ex2"){ - $ERROR('#6.3: Exception !== "ex2". Actual: catch previous exception'); - } - if(e!=="ex3"){ - $ERROR('#6.4: Exception === "ex3". Actual: Exception ==='+ e ); - } - if(c6!==1) $ERROR('#6.5: "finally" block must be evaluated'); -} - -// CHECK#7 -var c7=0; -function myFunction7(){ - try{ - throw "ex1"; - return 1; - }catch(err){ - throw "ex2"; - return 0; - }finally{ - c7=1; - return 2; - } - return 3; -} -try{ - var x7=myFunction7(); - if(x7!==2) $ERROR('#7.1: x7===2. Actual: x7==='+x7); -} -catch(e){} -if(c7!==1) $ERROR('#7.2: "finally" block must be evaluated'); diff --git a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A14.js b/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A14.js deleted file mode 100644 index f9b39088f..000000000 --- a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A14.js +++ /dev/null @@ -1,77 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.14_A14; - * @section: 12.14; - * @assertion: Using "try" with "catch" or "finally" statement within/without a "with" statement; - * @description: Using try/catch/finally in With and With in try/catch/finally; - */ - -var myObj = {p1: 'a', - p2: 'b', - p3: 'c', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';}, - parseInt : function(){return 'obj_parseInt';}, - NaN : 'obj_NaN', - Infinity : 'obj_Infinity', - eval : function(){return 'obj_eval';}, - parseFloat : function(){return 'obj_parseFloat';}, - isNaN : function(){return 'obj_isNaN';}, - isFinite : function(){return 'obj_isFinite';} -} - -// CHECK#1 -try{ - with(myObj){ - throw "ex"; - } -} -catch(e){ - if (e!=="ex") $ERROR('#1: Exception ==="ex". Actual: Exception ==='+ e ); -} - -// CHECK#2 -with(myObj){ - try{ - throw p1; - } - catch(e){ - if (e!=="a") $ERROR('#2.1: Exception ==="a". Actual: Exception ==='+ e ); - p1='pass'; - } -} -if(myObj.p1!=='pass') $ERROR('#2.2: "throw p1" lead to throwing exception'); - -// CHECK#3 -with(myObj){ - try{ - p1='fail'; - throw p2; - } - catch(e){ - if (e!=="b") $ERROR('#3.1: Exception ==="b". Actual: Exception ==='+ e ); - p1='pass'; - } - finally{ - p2='pass'; - } -} -if(myObj.p1!=='pass') $ERROR('#3.2: "throw p2" lead to throwing exception'); -if(myObj.p2!=='pass') $ERROR('#3.3: "finally" block must be evaluated'); - -// CHECK#4 -myObj.p1='fail'; -try{ - with(myObj){ - try{ - throw p3; - } - finally{ - p1='pass'; - } - } -} -catch(e){} -if(myObj.p1!=='pass') $ERROR('#4: "finally" block must be evaluated'); diff --git a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A15.js b/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A15.js deleted file mode 100644 index 60087fb5e..000000000 --- a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A15.js +++ /dev/null @@ -1,91 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.14_A15; - * @section: 12.14; - * @assertion: Using "try" with "catch" or "finally" statement within/without a "switch" statement; - * @description: Insert try/catch/finally to switch statement; - */ - -// CHECK#1 -function SwitchTest1(value){ - var result = 0; - try{ - switch(value) { - case 1: - result += 4; - throw result; - break; - default: - result += 32; - break; - case 4: - result += 64; - throw "ex"; - } - return result; - } - catch(e){ - if ((value===1)&&(e!==4)) $ERROR('#1.1: Exception ===4. Actual: Exception ==='+ e ); - if ((value===4)&&(e!=="ex")) $ERROR('#1.2: Exception ==="ex". Actual: Exception ==='+ e ); - } - finally{ - return result; - } -} -if (SwitchTest1(1)!==4) $ERROR('#1.3: SwitchTest1(1)===4. Actual: SwitchTest1(1)==='+ SwitchTest1(1) ); -if (SwitchTest1(4)!==64) $ERROR('#1.4: SwitchTest1(4)===64. Actual: SwitchTest1(4)==='+ SwitchTest1(4) ); - -// CHECK#2 -var c2=0; -function SwitchTest2(value){ - var result = 0; - switch(value) { - case 0: - try{ - result += 2; - break; - } - finally{ - c2=1; - } - case 1: - result += 4; - break; - default: - result += 32; - break; - } - return result; -} -if (SwitchTest2(1)!==4) $ERROR('#2.1: SwitchTest1(1)===4. Actual: SwitchTest1(1)==='+ SwitchTest1(1) ); -if (c2===1) $ERROR('#2.2: Evaluate finally block'); -if (SwitchTest2(0)!==2) $ERROR('#2.3: SwitchTest1(0)===2. Actual: SwitchTest1(0)==='+ SwitchTest1(0) ); -if (c2!==1) $ERROR('#2.4: "finally" block must be evaluated'); - -// CHECK#3 -function SwitchTest3(value){ - var result = 0; - switch(value) { - case 0: - try{ - result += 2; - throw "ex"; - } - finally{ - break; - } - default: - result += 32; - break; - } - return result; -} -try{ - var x3=SwitchTest3(0); - if (x3!==2) $ERROR('#3.1: x3===2. Actual: x3==='+x3); -} -catch(e){ - $ERROR('#3.2: Catching exception inside function does not lead to throwing exception outside this function'); -} diff --git a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A16_T1.js b/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A16_T1.js deleted file mode 100644 index 4fefdd726..000000000 --- a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A16_T1.js +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.14_A16_T1; - * @section: 12.14; - * @assertion: TryStatement: "try Block Catch" or "try Block Finally" or "try Block Catch Finally"; - * @description: Checking if pure "try" syntax construction passes; - * @negative - */ - -// CHECK#1 -try diff --git a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A16_T10.js b/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A16_T10.js deleted file mode 100644 index f9f7cd60a..000000000 --- a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A16_T10.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.14_A16_T10; - * @section: 12.14; - * @assertion: TryStatement: "try Block Catch" or "try Block Finally" or "try Block Catch Finally"; - * @description: Catch: "catch (Identifier ) Block"; - * @negative - */ - -// CHECK#1 -try{} -catch(){} -finally{} - - diff --git a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A16_T11.js b/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A16_T11.js deleted file mode 100644 index 32c33b382..000000000 --- a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A16_T11.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.14_A16_T11; - * @section: 12.14; - * @assertion: TryStatement: "try Block Catch" or "try Block Finally" or "try Block Catch Finally"; - * @description: Catch and Finally are placed into the Block of "try" (whitle expected outside); - * @negative - */ - -// CHECK#1 -try{ - { - } - catch(e){} - finally{} -} - diff --git a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A16_T12.js b/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A16_T12.js deleted file mode 100644 index 61693d517..000000000 --- a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A16_T12.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.14_A16_T12; - * @section: 12.14; - * @assertion: TryStatement: "try Block Catch" or "try Block Finally" or "try Block Catch Finally"; - * @description: Embedded "try" statements followed by two "catch" statements; - * @negative - */ - -// CHECK#1 -try -{ - try - { - } -} -catch(e1){} -catch(e2){} - - diff --git a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A16_T13.js b/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A16_T13.js deleted file mode 100644 index ff38025e2..000000000 --- a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A16_T13.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.14_A16_T13; - * @section: 12.14; - * @assertion: TryStatement: "try Block Catch" or "try Block Finally" or "try Block Catch Finally"; - * @description: Catch: "catch (Identifier ) Block". Checking if execution of "22" passes at the place of Identifier of "catch"; - * @negative - */ - -// CHECK#1 -try -{ -} -catch("22") -{ -} - - - diff --git a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A16_T14.js b/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A16_T14.js deleted file mode 100644 index 31bb1d66e..000000000 --- a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A16_T14.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.14_A16_T14; - * @section: 12.14; - * @assertion: TryStatement: "try Block Catch" or "try Block Finally" or "try Block Catch Finally"; - * @description: Checking if passing argument to "try" statement fails; - * @negative - */ - -// CHECK#1 -try(e1){ -} -catch(e){} - - - diff --git a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A16_T15.js b/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A16_T15.js deleted file mode 100644 index 0c5441749..000000000 --- a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A16_T15.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.14_A16_T15; - * @section: 12.14; - * @assertion: TryStatement: "try Block Catch" or "try Block Finally" or "try Block Catch Finally"; - * @description: Finally: "finally Block". Checking if passing argument to "try" statement fails; - * @negative - */ - -// CHECK#1 -try{ -} -finally(e){} - - - - diff --git a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A16_T2.js b/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A16_T2.js deleted file mode 100644 index 1f9deb436..000000000 --- a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A16_T2.js +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.14_A16_T2; - * @section: 12.14; - * @assertion: TryStatement: "try Block Catch" or "try Block Finally" or "try Block Catch Finally"; - * @description: Checking if execution of "catch" with no "try" fails; - * @negative - */ - -// CHECK#1 -catch diff --git a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A16_T3.js b/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A16_T3.js deleted file mode 100644 index 09db8002d..000000000 --- a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A16_T3.js +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.14_A16_T3; - * @section: 12.14; - * @assertion: TryStatement: "try Block Catch" or "try Block Finally" or "try Block Catch Finally"; - * @description: Checking if execution of "finally" with no "try" fails; - * @negative - */ - -// CHECK#1 -finally diff --git a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A16_T4.js b/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A16_T4.js deleted file mode 100644 index 7d0a3b089..000000000 --- a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A16_T4.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.14_A16_T4; - * @section: 12.14; - * @assertion: TryStatement: "try Block Catch" or "try Block Finally" or "try Block Catch Finally"; - * @description: Catch: "catch (Identifier ) Block". Checking if execution of "catch" that takes no arguments fails; - * @negative - */ - -// CHECK#1 -try{} -catch{} diff --git a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A16_T5.js b/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A16_T5.js deleted file mode 100644 index 067dd0539..000000000 --- a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A16_T5.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.14_A16_T5; - * @section: 12.14; - * @assertion: TryStatement: "try Block Catch" or "try Block Finally" or "try Block Catch Finally"; - * @description: Catch: "catch (Identifier ) Block". Checking if execution of "catch" with no Block fails; - * @negative - */ - -// CHECK#1 -try{} -catch() diff --git a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A16_T6.js b/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A16_T6.js deleted file mode 100644 index c29bd071a..000000000 --- a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A16_T6.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.14_A16_T6; - * @section: 12.14, 12.1; - * @assertion: TryStatement: "try Block Catch" or "try Block Finally" or "try Block Catch Finally"; - * @description: Block: "{ StatementList }". Checking if execution of "try{ catch{}{}" fails; - * @negative - */ - -// CHECK#1 -try{ -catch(){} diff --git a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A16_T7.js b/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A16_T7.js deleted file mode 100644 index b18356355..000000000 --- a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A16_T7.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.14_A16_T7; - * @section: 12.14, 12.1; - * @assertion: TryStatement: "try Block Catch" or "try Block Finally" or "try Block Catch Finally"; - * @description: Block: "{ StatementList }". Checking if execution of "try{} catch(){" fails; - * @negative - */ - -// CHECK#1 -try{} -catch(){ - diff --git a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A16_T8.js b/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A16_T8.js deleted file mode 100644 index 53af6e95b..000000000 --- a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A16_T8.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.14_A16_T8; - * @section: 12.14, 12.1; - * @assertion: TryStatement: "try Block Catch" or "try Block Finally" or "try Block Catch Finally"; - * @description: Block: "{ StatementList }". Catch: "catch (Identifier ) Block". Checking if execution of "try{} catch(){finally{}" fails; - * @negative - */ - -// CHECK#1 -try{} -catch(){ -finally{} - - diff --git a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A16_T9.js b/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A16_T9.js deleted file mode 100644 index c2a031a37..000000000 --- a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A16_T9.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.14_A16_T9; - * @section: 12.14; - * @assertion: TryStatement: "try Block Catch" or "try Block Finally" or "try Block Catch Finally"; - * @description: Checking if execution of "catch(){} finally{}" fails; - * @negative - */ - -// CHECK#1 -catch(){} -finally{} - - diff --git a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A17.js b/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A17.js deleted file mode 100644 index 3b5ff12ff..000000000 --- a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A17.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.14_A17; - * @section: 12.14; - * @assertion: Using "try" with "catch" or "finally" statement in a constructor; - * @description: Creating exceptions within constructor; - */ - -var i=1; -function Integer( value, exception ) { - try{ - this.value = checkValue( value ); - if(exception) $ERROR('#'+i+'.1: Must be exception'); - } - catch(e){ - this.value = e.toString(); - if(!exception) $ERROR('#'+i+'.2: Don`t must be exception'); - } - i++; -} - -function checkValue(value){ - if(Math.floor(value)!=value||isNaN(value)){ - throw (INVALID_INTEGER_VALUE +": " + value); - } - else{ - return value; - } -} - -// CHECK#1 -new Integer(13, false); -// CHECK#2 -new Integer(NaN, true); -// CHECK#3 -new Integer(0, false); -// CHECK#4 -new Integer(Infinity, false); -// CHECK#5 -new Integer(-1.23, true); -// CHECK#6 -new Integer(Math.LN2, true); diff --git a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A18_T1.js b/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A18_T1.js deleted file mode 100644 index d31249a05..000000000 --- a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A18_T1.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.14_A18_T1; - * @section: 12.14, 12.13; - * @assertion: Catching objects with try/catch/finally statement; - * @description: Catching undefined; - */ - -// CHECK#1 -try{ - throw undefined; -} -catch(e){ - if (e!==undefined) $ERROR('#1: Exception === undefined. Actual: '+e); -} diff --git a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A18_T2.js b/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A18_T2.js deleted file mode 100644 index 985c79a52..000000000 --- a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A18_T2.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.14_A18_T2; - * @section: 12.14, 12.13; - * @assertion: Catching objects with try/catch/finally statement; - * @description: Catching null; - */ - -// CHECK#1 -try{ - throw null; -} -catch(e){ - if (e!==null) $ERROR('#1: Exception ===null. Actual: '+e); -} diff --git a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A18_T3.js b/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A18_T3.js deleted file mode 100644 index edd42501e..000000000 --- a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A18_T3.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.14_A18_T3; - * @section: 12.14, 12.13; - * @assertion: Catching objects with try/catch/finally statement; - * @description: Catching boolean; - */ - -// CHECK#1 -try{ - throw true; -} -catch(e){ - if (e!==true) $ERROR('#1: Exception ===true. Actual: Exception ==='+ e ); -} - -// CHECK#2 -try{ - throw false; -} -catch(e){ - if (e!==false) $ERROR('#2: Exception ===false. Actual: Exception ==='+ e ); -} - -// CHECK#3 -var b=false; -try{ - throw b; -} -catch(e){ - if (e!==false) $ERROR('#3: Exception ===false. Actual: Exception ==='+ e ); -} - -// CHECK#4 -var b=true; -try{ - throw b; -} -catch(e){ - if (e!==true) $ERROR('#4: Exception ===true. Actual: Exception ==='+ e ); -} - -// CHECK#5 -var b=true; -try{ - throw b&&false; -} -catch(e){ - if (e!==false) $ERROR('#5: Exception ===false. Actual: Exception ==='+ e ); -} - -// CHECK#5 -var b=true; -try{ - throw b||false; -} -catch(e){ - if (e!==true) $ERROR('#6: Exception ===true. Actual: Exception ==='+ e ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A18_T4.js b/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A18_T4.js deleted file mode 100644 index d3f76e83b..000000000 --- a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A18_T4.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.14_A18_T4; - * @section: 12.14, 12.13; - * @assertion: Catching objects with try/catch/finally statement; - * @description: Catching string; - */ - -// CHECK#1 -try{ - throw "exception #1"; -} -catch(e){ - if (e!=="exception #1") $ERROR('#1: Exception ==="exception #1". Actual: Exception ==='+ e ); -} - -// CHECK#2 -try{ - throw "exception"+" #1"; -} -catch(e){ - if (e!=="exception #1") $ERROR('#2: Exception ==="exception #1". Actual: Exception ==='+ e ); -} - -// CHECK#3 -var b="exception #1"; -try{ - throw b; -} -catch(e){ - if (e!=="exception #1") $ERROR('#3: Exception ==="exception #1". Actual: Exception ==='+ e ); -} - -// CHECK#4 -var a="exception"; -var b=" #1"; -try{ - throw a+b; -} -catch(e){ - if (e!=="exception #1") $ERROR('#4: Exception ==="exception #1". Actual: Exception ==='+ e ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A18_T5.js b/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A18_T5.js deleted file mode 100644 index 699c88ce3..000000000 --- a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A18_T5.js +++ /dev/null @@ -1,101 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.14_A18_T5; - * @section: 12.14, 12.13; - * @assertion: Catching objects with try/catch/finally statement; - * @description: Catching Number; - */ - -// CHECK#1 -try{ - throw 13; -} -catch(e){ - if (e!==13) $ERROR('#1: Exception ===13. Actual: Exception ==='+ e ); -} - -// CHECK#2 -try{ - throw 10+3; -} -catch(e){ - if (e!==13) $ERROR('#2: Exception ===13. Actual: Exception ==='+ e ); -} - -// CHECK#3 -var b=13; -try{ - throw b; -} -catch(e){ - if (e!==13) $ERROR('#3: Exception ===13. Actual: Exception ==='+ e ); -} - -// CHECK#4 -var a=3; -var b=10; -try{ - throw a+b; -} -catch(e){ - if (e!==13) $ERROR('#4: Exception ===13. Actual: Exception ==='+ e ); -} - -// CHECK#5 -try{ - throw 2.13; -} -catch(e){ - if (e!==2.13) $ERROR('#5: Exception ===2.13. Actual: Exception ==='+ e ); -} - -// CHECK#6 -var ex=2/3; -try{ - throw 2/3; -} -catch(e){ - if (e!==ex) $ERROR('#6: Exception ===2/3. Actual: Exception ==='+ e ); -} - -// CHECK#7 -try{ - throw NaN; -} -catch(e){ - if (!isNaN(e)) $ERROR('#7: Exception is NaN'); -} - -// CHECK#8 -try{ - throw +Infinity; -} -catch(e){ - if (e!==+Infinity) $ERROR('#8: Exception ===+Infinity. Actual: Exception ==='+ e ); -} - -// CHECK#9 -try{ - throw -Infinity; -} -catch(e){ - if (e!==-Infinity) $ERROR('#9: Exception ===-Infinity. Actual: Exception ==='+ e ); -} - -// CHECK#10 -try{ - throw +0; -} -catch(e){ - if (e!==+0) $ERROR('#10: Exception ===+0. Actual: Exception ==='+ e ); -} - -// CHECK#11 -try{ - throw -0; -} -catch(e){ - if (e!==-0) $ERROR('#11: Exception ===-0. Actual: Exception ==='+ e ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A18_T6.js b/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A18_T6.js deleted file mode 100644 index 3f21bdf42..000000000 --- a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A18_T6.js +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.14_A18_T6; - * @section: 12.14, 12.13; - * @assertion: Catching objects with try/catch/finally statement; - * @description: Catching Object; - */ -var myObj = {p1: 'a', - p2: 'b', - p3: 'c', - value: 'myObj_value', - valueOf : function(){return 'obj_valueOf';}, - parseInt : function(){return 'obj_parseInt';}, - NaN : 'obj_NaN', - Infinity : 'obj_Infinity', - eval : function(){return 'obj_eval';}, - parseFloat : function(){return 'obj_parseFloat';}, - isNaN : function(){return 'obj_isNaN';}, - isFinite : function(){return 'obj_isFinite';}, - i:7, -} - -try{ - throw myObj; -} -catch(e){ -// CHECK#1 - if (e.p1!=="a") $ERROR('#1: e.p1==="a". Actual: e.p1==='+ e.p1 ); -// CHECK#2 - if (e.value!=='myObj_value') $ERROR('#2: e.value===\'myObj_value\'. Actual: e.value==='+ e.value ); -// CHECK#3 - if (e.eval()!=='obj_eval') $ERROR('#3: e.eval()===\'obj_eval\'. Actual: e.eval()==='+ e.eval() ); -} - -// CHECK#4 -myObj.i=6; -try{ - throw myObj; -} -catch(e){} -if (myObj.i!==6) $ERROR('#4: Handling of catch must be correct'); - -// CHECK#5 -myObj.i=6; -try{ - throw myObj; -} -catch(e){ - e.i=10; -} -if (myObj.i!==10) $ERROR('#5: Handling of catch must be correct'); diff --git a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A18_T7.js b/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A18_T7.js deleted file mode 100644 index b66fbac9a..000000000 --- a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A18_T7.js +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.14_A18_T7; - * @section: 12.14, 12.13; - * @assertion: Catching objects with try/catch/finally statement; - * @description: Catching Array; - */ - -var mycars = new Array(); -mycars[0] = "Saab"; -mycars[1] = "Volvo"; -mycars[2] = "BMW"; - -var mycars2 = new Array(); -mycars2[0] = "Mercedes"; -mycars2[1] = "Jeep"; -mycars2[2] = "Suzuki"; - -// CHECK#1 -try{ - throw mycars; -} -catch(e){ - for (var i=0;i<3;i++){ - if (e[i]!==mycars[i]) $ERROR('#1.'+i+': Exception['+i+']===mycars['+i+']. Actual: Exception['+i+']==='+ e[i] ); - } -} - -// CHECK#2 -try{ - throw mycars.concat(mycars2); -} -catch(e){ - for (var i=0;i<3;i++){ - if (e[i]!==mycars[i]) $ERROR('#2.'+i+': Exception['+i+']===mycars['+i+']. Actual: Exception['+i+']==='+ e[i] ); - } - for (var i=3;i<6;i++){ - if (e[i]!==mycars2[i-3]) $ERROR('#2.'+i+': Exception['+i+']===mycars2['+i+']. Actual: Exception['+i+']==='+ e[i] ); - } -} - -// CHECK#3 -try{ - throw new Array("Mercedes","Jeep","Suzuki"); -} -catch(e){ - for (var i=0;i<3;i++){ - if (e[i]!==mycars2[i]) $ERROR('#3.'+i+': Exception['+i+']===mycars2['+i+']. Actual: Exception['+i+']==='+ e[i]); - } -} - -// CHECK#4 -try{ - throw mycars.concat(new Array("Mercedes","Jeep","Suzuki")); -} -catch(e){ - for (var i=0;i<3;i++){ - if (e[i]!==mycars[i]) $ERROR('#4.'+i+': Exception['+i+']===mycars['+i+']. Actual: Exception['+i+']==='+ e[i] ); - } - for (var i=3;i<6;i++){ - if (e[i]!==mycars2[i-3]) $ERROR('#4.'+i+': Exception['+i+']===mycars2['+(i-3)+']. Actual: Exception['+i+']==='+ e[i]); - } -} diff --git a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A19_T1.js b/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A19_T1.js deleted file mode 100644 index 80a07116a..000000000 --- a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A19_T1.js +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.14_A19_T1; - * @section: 12.14, 15.11, 16; - * @assertion: Catching system exceptions of different types with try statement; - * @description: Testing try/catch syntax construction; - */ - -// CHECK#1 -try{ - throw (Error("hello")); -} -catch(e){ - if (e.toString()!=="Error: hello") $ERROR('#1: Exception.toString()==="Error: hello". Actual: Exception is '+e); -} - -// CHECK#2 -try{ - throw (new Error("hello")); -} -catch(e){ - if (e.toString()!=="Error: hello") $ERROR('#2: Exception.toString()==="Error: hello". Actual: Exception is '+e); -} - -// CHECK#3 -var c3=0; -try{ - throw EvalError(1); -} -catch(e){ - if (e.toString()!=="EvalError: 1") $ERROR('#3: Exception.toString()==="EvalError: 1". Actual: Exception is '+e); -} - -// CHECK#4 -try{ - throw RangeError(1); -} -catch(e){ - if (e.toString()!=="RangeError: 1") $ERROR('#4: Exception.toString()==="RangeError: 1". Actual: Exception is '+e); -} - -// CHECK#5 -try{ - throw ReferenceError(1); -} -catch(e){ - if (e.toString()!=="ReferenceError: 1") $ERROR('#5: Exception.toString()==="ReferenceError: 1". Actual: Exception is '+e); -} - -// CHECK#6 -var c6=0; -try{ - throw TypeError(1); -} -catch(e){ - if (e.toString()!=="TypeError: 1") $ERROR('#6: Exception.toString()==="TypeError: 1". Actual: Exception is '+e); -} - -// CHECK#7 -try{ - throw URIError("message", "fileName", "1"); -} -catch(e){ - if (e.toString()!=="URIError: message") $ERROR('#7: Exception.toString()==="URIError: message". Actual: Exception is '+e); -} diff --git a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A19_T2.js b/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A19_T2.js deleted file mode 100644 index c1ff03c8d..000000000 --- a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A19_T2.js +++ /dev/null @@ -1,101 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.14_A19_T2; - * @section: 12.14; - * @assertion: Catching system exceptions of different types with try statement; - * @description: Testing try/catch/finally syntax construction; - */ - -var fin=0; -// CHECK#1 -try{ - throw (Error("hello")); -} -catch(e){ - if (e.toString()!=="Error: hello") $ERROR('#1.1: Exception.toString()==="Error: hello". Actual: Exception is '+e); -} -finally{ - fin=1; -} -if (fin!==1) $ERROR('#1.2: "finally" block must be evaluated'); - -// CHECK#2 -fin=0; -try{ - throw (new Error("hello")); -} -catch(e){ - if (e.toString()!=="Error: hello") $ERROR('#2.1: Exception.toString()==="Error: hello". Actual: Exception is '+e); -} -finally{ - fin=1; -} -if (fin!==1) $ERROR('#2.2: "finally" block must be evaluated'); - -// CHECK#3 -fin=0; -var c3=0; -try{ - throw EvalError(1); -} -catch(e){ - if (e.toString()!=="EvalError: 1") $ERROR('#3.1: Exception.toString()==="EvalError: 1". Actual: Exception is '+e); -} -finally{ - fin=1; -} -if (fin!==1) $ERROR('#3.2: "finally" block must be evaluated'); - -// CHECK#4 -fin=0; -try{ - throw RangeError(1); -} -catch(e){ - if (e.toString()!=="RangeError: 1") $ERROR('#4.1: Exception.toString()==="RangeError: 1". Actual: Exception is '+e); -} -finally{ - fin=1; -} -if (fin!==1) $ERROR('#4.2: "finally" block must be evaluated'); - -// CHECK#5 -fin=0; -try{ - throw ReferenceError(1); -} -catch(e){ - if (e.toString()!=="ReferenceError: 1") $ERROR('#5.1: Exception.toString()==="ReferenceError: 1". Actual: Exception is '+e); -} -finally{ - fin=1; -} -if (fin!==1) $ERROR('#5.2: "finally" block must be evaluated'); - -// CHECK#6 -fin=0; -try{ - throw TypeError(1); -} -catch(e){ - if (e.toString()!=="TypeError: 1") $ERROR('#6.1: Exception.toString()==="TypeError: 1". Actual: Exception is '+e); -} -finally{ - fin=1; -} -if (fin!==1) $ERROR('#6.2: "finally" block must be evaluated'); - -// CHECK#7 -fin=0; -try{ - throw URIError("message", "fileName", "1"); -} -catch(e){ - if (e.toString()!=="URIError: message") $ERROR('#7.1: Exception.toString()==="URIError: message". Actual: Exception is '+e); -} -finally{ - fin=1; -} -if (fin!==1) $ERROR('#7.2: "finally" block must be evaluated'); diff --git a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A2.js b/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A2.js deleted file mode 100644 index 83b637fe5..000000000 --- a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A2.js +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.14_A2; - * @section: 12.14; - * @assertion: Throwing exception with "throw" and catching it with "try" statement; - * @description: Checking if execution of "catch" catches an exception thrown with "throw"; - */ - -// CHECK#1 -try { - throw "catchme"; - $ERROR('#1: throw "catchme" lead to throwing exception'); -} -catch(e){} - -// CHECK#2 -var c2=0; -try{ - try{ - throw "exc"; - $ERROR('#2.1: throw "exc" lead to throwing exception'); - }finally{ - c2=1; - } -} -catch(e){ - if (c2!==1){ - $ERROR('#2.2: "finally" block must be evaluated'); - } -} - -// CHECK#3 -var c3=0; -try{ - throw "exc"; - $ERROR('#3.1: throw "exc" lead to throwing exception'); -} -catch(err){ - var x3=1; -} -finally{ - c3=1; -} -if (x3!==1){ - $ERROR('#3.2: "catch" block must be evaluated'); -} -if (c3!==1){ - $ERROR('#3.3: "finally" block must be evaluated'); -} diff --git a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A3.js b/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A3.js deleted file mode 100644 index 0d69b28b6..000000000 --- a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A3.js +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.14_A3; - * @section: 12.14; - * @assertion: Catching system exception with "try" statement; - * @description: Checking if execution of "catch" catches system exceptions; - */ - -// CHECK#1 -try{ - y; - $ERROR('#1: "y" lead to throwing exception'); -} -catch(e){} - -// CHECK#2 -var c2=0; -try{ - try{ - someValue; - $ERROR('#3.1: "someValues" lead to throwing exception'); - } - finally{ - c2=1; - } -} -catch(e){ - if (c2!==1){ - $ERROR('#3.2: "finally" block must be evaluated'); - } -} - -// CHECK#3 -var c3=0,x3=0; -try{ - x3=someValue; - $ERROR('#3.1: "x3=someValues" lead to throwing exception'); -} -catch(err){ - x3=1; -} -finally{ - c3=1; -} -if (x3!==1){ - $ERROR('#3.2: "catch" block must be evaluated'); -} -if (c3!==1){ - $ERROR('#3.3: "finally" block must be evaluated'); -} diff --git a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A4.js b/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A4.js deleted file mode 100644 index 96ff264b5..000000000 --- a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A4.js +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.14_A4; - * @section: 12.14; - * @assertion: Sanity test for "catch(Indetifier) statement"; - * @description: Checking if deleting an exception fails; - */ - -// CHECK#1 -try { - throw "catchme"; - $ERROR('#1.1: throw "catchme" lead to throwing exception'); -} -catch (e) { - if (delete e){ - $ERROR('#1.2: Exception has DontDelete property'); - } - if (e!=="catchme") { - $ERROR('#1.3: Exception === "catchme". Actual: Exception ==='+ e ); - } -} - -// CHECK#2 -try { - throw "catchme"; - $ERROR('#2.1: throw "catchme" lead to throwing exception'); -} -catch(e){} -try{ - e; - $ERROR('#2.2: Deleting catching exception after ending "catch" block'); -} -catch(err){} diff --git a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A5.js b/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A5.js deleted file mode 100644 index 5be0e3786..000000000 --- a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A5.js +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.14_A5; - * @section: 12.14; - * @assertion: The production TryStatement: "try Block Finally" and the production TryStatement: "try Block Catch Finally"; - * @description: Checking "catch" catches the Identifier in appropriate way; - */ - -// CHECK#1 -try { - throw "catchme"; - throw "dontcatchme"; - $ERROR('#1.1: throw "catchme" lead to throwing exception'); -} -catch (e) { - if(e==="dontcatchme"){ - $ERROR('#1.2: Exception !== "dontcatchme"'); - } - if (e!=="catchme") { - $ERROR('#1.3: Exception === "catchme". Actual: Exception ==='+ e ); - } -} - -// CHECK#2 -function SwitchTest1(value){ - var result = 0; - try{ - switch(value) { - case 1: - result += 4; - throw result; - break; - case 4: - result += 64; - throw "ex"; - } - return result; - } - catch(e){ - if ((value===1)&&(e!==4)) $ERROR('#2.1: Exception === 4. Actual: '+e); - if ((value===4)&&(e!=="ex"))$ERROR('#2.2: Exception === "ex". Actual: '+e); - } - finally{ - return result; - } -} -if (SwitchTest1(1)!==4) $ERROR('#2.3: "finally" block must be evaluated'); -if (SwitchTest1(4)!==64)$ERROR('#2.4: "finally" block must be evaluated'); diff --git a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A6.js b/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A6.js deleted file mode 100644 index fbdb4287d..000000000 --- a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A6.js +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.14_A6; - * @section: 12.14; - * @assertion: The production TryStatement: "try Block Catch Finally"; - * @description: Executing sequence of "try" statements, using counters with varying values within; - */ - -// CHECK#1 -var c1=0; -try { - c1+=1; - y; - $ERROR('#1.1: "y" lead to throwing exception'); -} -catch (e) { - c1*=2; -} -if (c1!==2){ - $ERROR('#1.2: Sequence evaluation of commands try/catch is 1. try, 2. catch'); -} - -// CHECK#2 -var c2=0; -try{ - c2+=1; -} -finally{ - c2*=2; -} -if (c2!==2){ - $ERROR('#2: Sequence evaluation of commands try/finally is 1. try, 2. finally'); -} - -// CHECK#3 -var c3=0; -try{ - c3=1; - z; -} -catch(err){ - c3*=2; -} -finally{ - c3+=1; -} -if (c3!==3){ - $ERROR('#3: Sequence evaluation of commands try/catch/finally(with exception) is 1. try, 2. catch, 3. finally'); -} - -// CHECK#4 -var c4=0; -try{ - c4=1; -} -catch(err){ - c4*=3; -} -finally{ - c4+=1; -} -if (c4!==2){ - $ERROR('#4: Sequence evaluation of commands try/catch/finally(without exception) is 1. try, 2. finally'); -} diff --git a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A7_T1.js b/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A7_T1.js deleted file mode 100644 index b6b2609a3..000000000 --- a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A7_T1.js +++ /dev/null @@ -1,137 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.14_A7_T1; - * @section: 12.14; - * @assertion: Evaluating the nested productions TryStatement; - * @description: Checking if the production of nested TryStatement statements evaluates correct; - */ - -// CHECK#1 -try{ - try{ - throw "ex2"; - } - catch(er2){ - if (er2!=="ex2") - $ERROR('#1.1: Exception === "ex2". Actual: Exception ==='+ e ); - throw "ex1"; - } - } - catch(er1){ - if (er1!=="ex1") $ERROR('#1.2: Exception === "ex1". Actual: '+er1); - if (er1==="ex2") $ERROR('#1.3: Exception !== "ex2". Actual: catch previous embedded exception'); -} - -// CHECK#2 -try{ - throw "ex1"; -} -catch(er1){ - try{ - throw "ex2"; - } - catch(er1){ - if (er1==="ex1") $ERROR('#2.1: Exception !== "ex1". Actual: catch previous catching exception'); - if (er1!=="ex2") $ERROR('#2.2: Exception === "ex2". Actual: Exception ==='+ er1 ); - } - if (er1!=="ex1") $ERROR('#2.3: Exception === "ex1". Actual: Exception ==='+ er1 ); - if (er1==="ex2") $ERROR('#2.4: Exception !== "ex2". Actual: catch previous catching exception'); -} - -// CHECK#3 -try{ - throw "ex1"; -} -catch(er1){ - if (er1!=="ex1") $ERROR('#3.1: Exception ==="ex1". Actual: Exception ==='+ er1 ); -} -finally{ - try{ - throw "ex2"; - } - catch(er1){ - if (er1==="ex1") $ERROR('#3.2: Exception !=="ex1". Actual: catch previous embedded exception'); - if (er1!=="ex2") $ERROR('#3.3: Exception ==="ex2". Actual: Exception ==='+ er1 ); - } -} - -// CHECK#4 -var c4=0; -try{ - throw "ex1"; -} -catch(er1){ - try{ - throw "ex2"; - } - catch(er1){ - if (er1==="ex1") $ERROR('#4.1: Exception !=="ex1". Actual: catch previous catching exception'); - if (er1!=="ex2") $ERROR('#4.2: Exception ==="ex2". Actual: Exception ==='+ er1 ); - } - if (er1!=="ex1") $ERROR('#4.3: Exception ==="ex1". Actual: Exception ==='+ er1 ); - if (er1==="ex2") $ERROR('#4.4: Exception !=="ex2". Actual: Catch previous embedded exception'); -} -finally{ - c4=1; -} -if (c4!==1) $ERROR('#4.5: "finally" block must be evaluated'); - -// CHECK#5 -var c5=0; -try{ - try{ - throw "ex2"; - } - catch(er1){ - if (er1!=="ex2") $ERROR('#5.1: Exception ==="ex2". Actual: Exception ==='+ er1 ); - } - throw "ex1"; -} -catch(er1){ - if (er1!=="ex1") $ERROR('#5.2: Exception ==="ex1". Actual: Exception ==='+ er1 ); - if (er1==="ex2") $ERROR('#5.3: Exception !=="ex2". Actual: catch previous embedded exception'); -} -finally{ - c5=1; -} -if (c5!==1) $ERROR('#5.4: "finally" block must be evaluated'); - -// CHECK#6 -var c6=0; -try{ - try{ - throw "ex1"; - } - catch(er1){ - if (er1!=="ex1") $ERROR('#6.1: Exception ==="ex1". Actual: Exception ==='+ er1 ); - } -} -finally{ - c6=1; -} -if (c6!==1) $ERROR('#6.2: "finally" block must be evaluated'); - -// CHECK#7 -var c7=0; -try{ - try{ - throw "ex1"; - } - finally{ - try{ - c7=1; - throw "ex2"; - } - catch(er1){ - if (er1!=="ex2") $ERROR('#7.1: Exception ==="ex2". Actual: Exception ==='+ er1 ); - if (er1==="ex1") $ERROR('#7.2: Exception !=="ex1". Actual: catch previous embedded exception'); - c7++; - } - } -} -catch(er1){ - if (er1!=="ex1") $ERROR('#7.3: Exception ==="ex1". Actual: Exception ==='+ er1 ); -} -if (c7!==2) $ERROR('#7.4: "finally" block must be evaluated'); diff --git a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A7_T2.js b/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A7_T2.js deleted file mode 100644 index aba1d046f..000000000 --- a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A7_T2.js +++ /dev/null @@ -1,151 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.14_A7_T2; - * @section: 12.14; - * @assertion: Evaluating the nested productions TryStatement; - * @description: Checking if the production of nested TryStatement statements evaluates correct; - */ - -// CHECK#1 -try{ - try{ - throw "ex2"; - } - finally{ - throw "ex1"; - } -} -catch(er1){ - if (er1!=="ex1") $ERROR('#1.2: Exception === "ex1". Actual: Exception ==='+er1 ); - if (er1==="ex2") $ERROR('#1.3: Exception !== "ex2". Actual: catch previous embedded exception'); -} - -// CHECK#2 -try{ - try{ - throw "ex1"; - } - catch(er1){ - if (er1!=="ex1") $ERROR('#2.1: Exception === "ex1". Actual: Exception ==='+er1 ); - try{ - throw "ex2"; - } - finally{ - throw "ex3"; - } - $ERROR('#2.2: throw "ex1" lead to throwing exception'); - } -} -catch(er1){ - if (er1!=="ex3") $ERROR('#2.3: Exception === "ex3". Actual: Exception ==='+er1 ); -} - -// CHECK#3 -try{ - try{ - throw "ex1"; - } - catch(er1){ - if (er1!=="ex1") $ERROR('#3.1: Exception === "ex1". Actual: Exception ==='+er1 ); - } - finally{ - try{ - throw "ex2"; - } - finally{ - throw "ex3"; - } - } -} -catch(er1){ - if (er1!=="ex3") $ERROR('#3.2: Exception === "ex3". Actual: Exception ==='+er1 ); -} - -// CHECK#4 -var c4=0; -try{ - try{ - throw "ex1"; - } - catch(er1){ - if (er1!=="ex1") $ERROR('#4.1: Exception === "ex1". Actual: Exception ==='+er1 ); - try{ - throw "ex2"; - } - finally{ - throw "ex3"; - } - } - finally{ - c4=1; - } -} -catch(er1){ - if (er1!=="ex3") $ERROR('#4.2: Exception === "ex3". Actual: Exception ==='+er1 ); -} -if (c4!==1) $ERROR('#4.3: "finally" block must be evaluated'); - -// CHECK#5 -var c5=0; -try{ - try{ - throw "ex2"; - } - finally{ - throw "ex3"; - } - throw "ex1"; -} -catch(er1){ - if (er1!=="ex3") $ERROR('#5.1: Exception === "ex3". Actual: Exception ==='+er1 ); - if (er1==="ex2") $ERROR('#5.2: Exception !== "ex2". Actual: catch previous embedded exception'); - if (er1==="ex1") $ERROR('#5.3: Exception !=="ex1". Actual: catch previous embedded exception'); -} -finally{ - c5=1; -} -if (c5!==1) $ERROR('#5.4: "finally" block must be evaluated'); - -// CHECK#6 -var c6=0; -try{ - try{ - try{ - throw "ex1"; - } - finally{ - throw "ex2"; - } - } - finally{ - c6=1; - } -} -catch(er1){ - if (er1!=="ex2") $ERROR('#6.1: Exception === "ex2". Actual: Exception ==='+er1 ); -} -if (c6!==1) $ERROR('#6.2: "finally" block must be evaluated'); - -// CHECK#7 -var c7=0; -try{ - try{ - throw "ex1"; - } - finally{ - try{ - c7=1; - throw "ex2"; - } - finally{ - c7++; - throw "ex3"; - } - } -} -catch(er1){ - if (er1!=="ex3") $ERROR('#7.1: Exception === "ex3". Actual: Exception ==='+er1 ); -} -if (c7!==2) $ERROR('#7.2: Embedded "try/finally" blocks must be evaluated'); diff --git a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A7_T3.js b/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A7_T3.js deleted file mode 100644 index 986cddd0e..000000000 --- a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A7_T3.js +++ /dev/null @@ -1,168 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.14_A7_T3; - * @section: 12.14; - * @assertion: Evaluating the nested productions TryStatement; - * @description: Checking if the production of nested TryStatement statements evaluates correct; - */ - -// CHECK#1 -try{ - try{ - throw "ex2"; - } - catch(er2){ - if (er2!=="ex2") $ERROR('#1.1: Exception === "ex2". Actual: Exception ==='+er2); - throw "ex1"; - } - finally{ - throw "ex3"; - } -} -catch(er1){ - if (er1!=="ex3") $ERROR('#1.2: Exception === "ex3". Actual: Exception ==='+er1); - if (er1==="ex2") $ERROR('#1.3: Exception !=="ex2". Actual: catch previous catched exception'); - if (er1==="ex1") $ERROR('#1.4: Exception !=="ex1". Actual: catch previous embedded exception'); -} - -// CHECK#2 -var c2=0; -try{ - throw "ex1"; -} -catch(er1){ - try{ - throw "ex2"; - } - catch(er1){ - if (er1==="ex1") $ERROR('#2.1: Exception !=="ex1". Actual: catch previous catched exception'); - if (er1!=="ex2") $ERROR('#2.2: Exception === "ex2". Actual: Exception ==='+er1); - } - finally{ - c2=1; - } - if (er1!=="ex1") $ERROR('#2.3: Exception === "ex1". Actual: Exception ==='+er1); - if (er1==="ex2") $ERROR('#2.4: Exception !== "ex2". Actual: catch previous embedded exception'); -} -if (c2!==1) $ERROR('#2.5: "finally" block must be evaluated'); - -// CHECK#3 -var c3=0; -try{ - throw "ex1"; -} -catch(er1){ - if (er1!=="ex1") $ERROR('#3.1: Exception === "ex1". Actual: Exception ==='+er1); -} -finally{ - try{ - throw "ex2"; - } - catch(er1){ - if (er1==="ex1") $ERROR('#3.2: Exception !=="ex1". Actual: catch previous catched exception'); - if (er1!=="ex2") $ERROR('#3.3: Exception === "ex2". Actual: Exception ==='+er1); - } - finally{ - c3=1; - } -} -if (c3!==1) $ERROR('#3.4: "finally" block must be evaluated'); - -// CHECK#4 -var c4=0; -try{ - try{ - throw "ex1"; - } - catch(er1){ - try{ - throw "ex2"; - } - catch(er1){ - if (er1==="ex1") $ERROR('#4.1: Exception !=="ex2". Actual: catch previous catched exception'); - if (er1!=="ex2") $ERROR('#4.2: Exception === "ex2". Actual: Exception ==='+er1); - } - finally{ - c4=2; - throw "ex3"; - } - if (er1!=="ex1") $ERROR('#4.3: Exception === "ex2". Actual: Exception ==='+er1); - if (er1==="ex2") $ERROR('#4.4: Exception !=="ex2". Actual: catch previous catched exception'); - if (er1==="ex3") $ERROR('#4.5: Exception !=="ex3". Actual: Catch previous embedded exception'); - } - finally{ - c4*=2; - } -} -catch(er1){} -if (c4!==4) $ERROR('#4.6: "finally" block must be evaluated'); - -// CHECK#5 -var c5=0; -try{ - try{ - throw "ex2"; - } - catch(er1){ - if (er1!=="ex2") $ERROR('#5.1: Exception === "ex2". Actual: Exception ==='+er1); - } - finally{ - throw "ex3"; - } - throw "ex1"; -} -catch(er1){ - if (er1!=="ex3") $ERROR('#5.2: Exception === "ex3". Actual: Exception ==='+er1); - if (er1==="ex2") $ERROR('#5.3: Exception !=="ex2". Actual: catch previous catched exception'); - if (er1==="ex1") $ERROR('#5.4: Exception !=="ex1". Actual: catch previous embedded exception'); -} -finally{ - c5=1; -} -if (c5!==1) $ERROR('#5.5: "finally" block must be evaluated'); - -// CHECK#6 -var c6=0; -try{ - try{ - throw "ex1"; - } - catch(er1){ - if (er1!=="ex1") $ERROR('#6.1: Exception === "ex1". Actual: Exception ==='+er1); - } - finally{ - c6=2; - } -} -finally{ - c6*=2; -} -if (c6!==4) $ERROR('#6.2: "finally" block must be evaluated'); - -// CHECK#7 -var c7=0; -try{ - try{ - throw "ex1"; - } - finally{ - try{ - c7=1; - throw "ex2"; - } - catch(er1){ - if (er1!=="ex2") $ERROR('#7.1: Exception === "ex2". Actual: Exception ==='+er1); - if (er1==="ex1") $ERROR('#7.2: Exception !=="ex2". Actual: catch previous catched exception'); - c7++; - } - finally{ - c7*=2; - } - } -} -catch(er1){ - if (er1!=="ex1") $ERROR('#7.3: Exception === "ex1". Actual: Exception ==='+er1); -} -if (c7!==4) $ERROR('#7.4: "finally" block must be evaluated'); diff --git a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A8.js b/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A8.js deleted file mode 100644 index 70773f9fa..000000000 --- a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A8.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.14_A8; - * @section: 12.14; - * @assertion: "try" with "catch" or "finally" statement within/without an "if" statement; - * @description: Throwing exception within an "if" statement; - */ - -// CHECK#1 -var c1=1; -try{ - if(c1===1){ - throw "ex1"; - $ERROR('#1.1: throw "ex1" lead to throwing exception'); - } - $ERROR('#1.2: throw "ex1" inside the "if" statement lead to throwing exception'); -} -catch(er1){ - if (er1!=="ex1") $ERROR('#1.3: Exception ==="ex1". Actual: Exception ==='+er1); -} - -// CHECK#2 -var c2=1; -if(c2===1){ - try{ - throw "ex1"; - $ERROR('#2.1: throw "ex1" lead to throwing exception'); - } - catch(er1){ - if(er1!="ex1") $ERROR('#2.2: Exception ==="ex1". Actual: Exception ==='+er1); - } -} diff --git a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A9_T1.js b/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A9_T1.js deleted file mode 100644 index fdc80da99..000000000 --- a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A9_T1.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.14_A9_T1; - * @section: 12.14; - * @assertion: "try" with "catch" or "finally" statement within/without an "do while" statement; - * @description: Loop within a "try" Block, from where exception is thrown; - */ - -// CHECK#1 -var i=0; -try{ - do{ - if(i===5) throw i; - i++; - } - while(i<10); -} -catch(e){ - if(e!==5)$ERROR('#1: Exception ===5. Actual: Exception ==='+ e ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A9_T2.js b/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A9_T2.js deleted file mode 100644 index 343a24161..000000000 --- a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A9_T2.js +++ /dev/null @@ -1,121 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.14_A9_T2; - * @section: 12.14; - * @assertion: "try" with "catch" or "finally" statement within/without an "do while" statement; - * @description: "try" statement within a loop, the statement contains "continue" statement; - */ - -// CHECK#1 -var c1=0,fin=0; -do{ - try{ - c1+=1; - continue; - } - catch(er1){} - finally{ - fin=1; - } - fin=-1; -} -while(c1<2); -if(fin!==1){ - $ERROR('#1: "finally" block must be evaluated at "try{continue} catch finally" construction'); -} - -// CHECK#2 -var c2=0,fin2=0; -do{ - try{ - throw "ex1"; - } - catch(er1){ - c2+=1; - continue; - } - finally{ - fin2=1; - } - fin2=-1; -} -while(c2<2); -if(fin2!==1){ - $ERROR('#2: "finally" block must be evaluated at "try catch{continue} finally" construction'); -} - -// CHECK#3 -var c3=0,fin3=0; -do{ - try{ - throw "ex1"; - } - catch(er1){ - c3+=1; - } - finally{ - fin3=1; - continue; - } - fin3=0; -} -while(c3<2); -if(fin3!==1){ - $ERROR('#3: "finally" block must be evaluated at "try catch finally{continue}" construction'); -} - -// CHECK#4 -var c4=0,fin4=0; -do{ - try{ - c4+=1; - continue; - } - finally{ - fin4=1; - } - fin4=-1; -} -while(c4<2); -if(fin4!==1){ - $ERROR('#4: "finally" block must be evaluated at "try{continue} finally" construction'); -} - -// CHECK#5 -var c5=0; -do{ - try{ - throw "ex1"; - } - catch(er1){ - c5+=1; - continue; - } -} -while(c5<2); -if(c5!==2){ - $ERROR('#5: "try catch{continue}" must work correctly'); -} - -// CHECK#6 -var c6=0,fin6=0; -do{ - try{ - c6+=1; - throw "ex1" - } - finally{ - fin6=1; - continue; - } - fin6=-1; -} -while(c6<2); -if(fin6!==1){ - $ERROR('#6.1: "finally" block must be evaluated'); -} -if(c6!==2){ - $ERROR('#6.2: "try finally{continue}" must work correctly'); -} diff --git a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A9_T3.js b/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A9_T3.js deleted file mode 100644 index 0fdf97307..000000000 --- a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A9_T3.js +++ /dev/null @@ -1,157 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.14_A9_T3; - * @section: 12.14; - * @assertion: "try" with "catch" or "finally" statement within/without an "do while" statement; - * @description: "try" statement within a loop, the statement contains "break" statement; - */ - -// CHECK#1 -var c1=0,fin=0; -do{ - try{ - c1+=1; - break; - } - catch(er1){} - finally{ - fin=1; - } - fin=-1; - c1+=2; -} -while(c1<2); -if(fin!==1){ - $ERROR('#1.1: "finally" block must be evaluated'); -} -if(c1!==1){ - $ERROR('#1.2: "try{break}catch finally" must work correctly'); -} - -// CHECK#2 -var c2=0,fin2=0; -do{ - try{ - throw "ex1"; - } - catch(er1){ - c2+=1; - break; - } - finally{ - fin2=1; - } - c2+=2; - fin2=-1; -} -while(c2<2); -if(fin2!==1){ - $ERROR('#2.1: "finally" block must be evaluated'); -} -if(c2!==1){ - $ERROR('#2.2: "try catch{break} finally" must work correctly'); -} - -// CHECK#3 -var c3=0,fin3=0; -do{ - try{ - throw "ex1"; - } - catch(er1){ - c3+=1; - } - finally{ - fin3=1; - break; - } - c3+=2; - fin3=0; -} -while(c3<2); -if(fin3!==1){ - $ERROR('#3.1: "finally" block must be evaluated'); -} -if(c3!==1){ - $ERROR('#3.2: "try catch finally{break}" must work correctly'); -} - -// CHECK#4 -var c4=0,fin4=0; -do{ - try{ - c4+=1; - break; - } - finally{ - fin4=1; - } - fin4=-1; - c4+=2; -} -while(c4<2); -if(fin4!==1){ - $ERROR('#4.1: "finally" block must be evaluated'); -} -if(c4!==1){ - $ERROR('#4.2: "try{break} finally" must work correctly'); -} - -// CHECK#5 -var c5=0; -do{ - try{ - throw "ex1"; - } - catch(er1){ - break; - } -} -while(c5<2); -if(c5!==0){ - $ERROR('#5: "try catch{break}" must work correctly'); -} - -// CHECK#6 -var c6=0; -do{ - try{ - c6+=1; - break; - } - catch(er1){} - c6+=2; -} -while(c6<2); -if(c6!==1){ - $ERROR('#6: "try{break} catch" must work correctly'); -} - -// CHECK#7 -var c7=0,fin7=0; -try{ - do{ - try{ - c7+=1; - throw "ex1"; - } - finally{ - fin7=1; - break; - } - fin7=-1; - c7+=2; - } - while(c7<2); -} -catch(ex1){ - c7=10; -} -if(fin7!==1){ - $ERROR('#7.1: "finally" block must be evaluated'); -} -if(c7!==1){ - $ERROR('#7.2: try finally{break} error'); -} diff --git a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A9_T4.js b/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A9_T4.js deleted file mode 100644 index 72fbc4436..000000000 --- a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A9_T4.js +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.14_A9_T4; - * @section: 12.14; - * @assertion: "try" with "catch" or "finally" statement within/without an "do while" statement; - * @description: "try" statement within a loop, the statement contains "continue" and "break" statements; - */ - -// CHECK#1 -var c1=0,fin=0; -do{ - try{ - c1+=1; - break; - } - catch(er1){} - finally{ - fin=1; - continue; - } - fin=-1; - c1+=2; -} -while(c1<2); -if(fin!==1){ - $ERROR('#1.1: "finally" block must be evaluated'); -} -if(c1!==2){ - $ERROR('#1.2: "try{break} catch finally{continue}" must work correctly'); -} - -// CHECK#2 -var c2=0,fin2=0; -do{ - try{ - throw "ex1"; - } - catch(er1){ - c2+=1; - break; - } - finally{ - fin2=1; - continue; - } - c2+=2; - fin2=-1; -} -while(c2<2); -if(fin2!==1){ - $ERROR('#2.1: "finally" block must be evaluated'); -} -if(c2!==2){ - $ERROR('#2.2: "try catch{break} finally{continue}" must work correctly'); -} diff --git a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A9_T5.js b/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A9_T5.js deleted file mode 100644 index 1aaa65ad5..000000000 --- a/tests/ES3/Conformance/12_Statement/12.14_The_try_Statement/S12.14_A9_T5.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.14_A9_T5; - * @section: 12.14; - * @assertion: "try" with "catch" or "finally" statement within/without an "do while" statement; - * @description: Checking if exceptions are thrown correctly from wherever of loop body; - */ - - -// CHECK#1 -var c=0, i=0; -var fin=0; -do{ - i+=1; - try{ - if(c===0){ - throw "ex1"; - $ERROR('#1.1: throw "ex1" lead to throwing exception'); - } - c+=2; - if(c===1){ - throw "ex2"; - $ERROR('#1.2: throw "ex2" lead to throwing exception'); - } - } - catch(er1){ - c-=1; - continue; - $ERROR('#1.3: "try catch{continue} finally" must work correctly'); - } - finally{ - fin+=1; - } -} -while(i<10); -if(fin!==10){ - $ERROR('#1.4: "finally" block must be evaluated'); -} - diff --git a/tests/ES3/Conformance/12_Statement/12.1_Block/S12.1_A1.js b/tests/ES3/Conformance/12_Statement/12.1_Block/S12.1_A1.js deleted file mode 100644 index ce1c5eb0c..000000000 --- a/tests/ES3/Conformance/12_Statement/12.1_Block/S12.1_A1.js +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.1_A1; -* @section: 12.1; -* @assertion: The production Block { } can't contain function declaration; -* @description: Trying to declare function at the Block statement; -* @negative; -*/ -{ - function __func(){} -} diff --git a/tests/ES3/Conformance/12_Statement/12.1_Block/S12.1_A2.js b/tests/ES3/Conformance/12_Statement/12.1_Block/S12.1_A2.js deleted file mode 100644 index bfe3e1e37..000000000 --- a/tests/ES3/Conformance/12_Statement/12.1_Block/S12.1_A2.js +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.1_A2; -* @section: 12.1; -* @assertion: The production StatementList Statement is evaluated as follows -* 1. Evaluate Statement. -* 2. If an exception was thrown, return (throw, V, empty) where V is the exception; -* @description: Throwing exception within a Block; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try { - x(); - $ERROR('#1: "x()" lead to throwing exception'); -} catch (e) { - $PRINT(e.message); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -try { - throw "catchme"; - $ERROR('#2: throw "catchme" lead to throwing exception'); -} catch (e) { - if (e!=="catchme") { - $ERROR('#2.1: Exception === "catchme". Actual: Exception ==='+ e ); - } -} - -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.1_Block/S12.1_A4_T1.js b/tests/ES3/Conformance/12_Statement/12.1_Block/S12.1_A4_T1.js deleted file mode 100644 index 40e155826..000000000 --- a/tests/ES3/Conformance/12_Statement/12.1_Block/S12.1_A4_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.1_A4_T1; -* @section: 12.1; -* @assertion: The production Block can't be inside of expression; -* @description: Checking if execution of "y={__func}()" fails; -* @negative; -*/ - -function __func(){}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -y={__func}(); -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.1_Block/S12.1_A4_T2.js b/tests/ES3/Conformance/12_Statement/12.1_Block/S12.1_A4_T2.js deleted file mode 100644 index 95bccaf05..000000000 --- a/tests/ES3/Conformance/12_Statement/12.1_Block/S12.1_A4_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.1_A4_T2; -* @section: 12.1; -* @assertion: The production Block can't be inside of expression; -* @description: Checking if execution of "y={x}" fails; -* @negative; -*/ - -x=1; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -y={x}; -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.1_Block/S12.1_A5.js b/tests/ES3/Conformance/12_Statement/12.1_Block/S12.1_A5.js deleted file mode 100644 index 94a236751..000000000 --- a/tests/ES3/Conformance/12_Statement/12.1_Block/S12.1_A5.js +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.1_A5; -* @section: 12.1; -* @assertion: StatementList: StatementList Statement inside the Block is evaluated from left to right; -* @description: Throwing exceptions within embedded/sequence Blocks; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try { - throw 1; - throw 2; - throw 3; - $ERROR('1.1: throw 1 lead to throwing exception'); -} catch (e) { - if (e!==1) { - $ERROR('#1.2: Exception === 1. Actual: Exception ==='+ e); - } -} -//////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -try { - { - throw 1; - throw 2; - } - throw 3; - $ERROR('#2.1: throw 1 lead to throwing exception'); -} catch (e) { - if (e!==1) { - $ERROR('#2.2: Exception === 1. Actual: Exception ==='+ e); - } -} -//////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -try { - throw 1; - { - throw 2; - throw 3; - } - $ERROR('#3.1: throw 1 lead to throwing exception'); -} catch (e) { - if (e!==1) { - $ERROR('#3.2: Exception === 1. Actual: Exception ==='+ e); - } -} -//////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/12_Statement/12.2_Variable_Statement/S12.2_A1.js b/tests/ES3/Conformance/12_Statement/12.2_Variable_Statement/S12.2_A1.js deleted file mode 100644 index 3dfb7f792..000000000 --- a/tests/ES3/Conformance/12_Statement/12.2_Variable_Statement/S12.2_A1.js +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.2_A1; -* @section: 12.2; -* @assertion: Variables are created when the program is entered. Variables are initialised to "undefined" -* when created. A variable with an Initialiser is assigned the value of its AssignmentExpression when the -* VariableStatement is executed, not when the variable is created; -* @description: Creating variables after entering the execution scope; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try { - __x = __x; - __y = __x ? "good fellow" : "liar"; // __y assigned to "liar" since __x undefined - __z = __z === __x ? 1 : 0; // __z assigned to 1 since both __x and __z are undefined -} catch (e) { - $ERROR('#1: Using declarated variable before it declaration is admitted'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -try{ - __something__undefined = __something__undefined; - $ERROR('#2: "__something__undefined = __something__undefined" lead to throwing exception'); -} catch(e){ - $PRINT(e.message); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if ((__y !== "liar")&(__z !== 1)) { - $ERROR('#3: (__y === "liar") and (__z === 1). Actual: __y ==='+__y+' and __z ==='+__z ); -} -// -////////////////////////////////////////////////////////////////////////////// - -var __x, __y = true, __z = __y ? "smeagol" : "golum"; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (!__y&!(__z = "smeagol")) { - $ERROR('#4: A variable with an Initialiser is assigned the value of its AssignmentExpression when the VariableStatement is executed'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.2_Variable_Statement/S12.2_A10.js b/tests/ES3/Conformance/12_Statement/12.2_Variable_Statement/S12.2_A10.js deleted file mode 100644 index 85516e7c5..000000000 --- a/tests/ES3/Conformance/12_Statement/12.2_Variable_Statement/S12.2_A10.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.2_A10; -* @section: 12.2; -* @assertion: "var" statement within "for" statement is allowed; -* @description: Declaring variable within a "for" IterationStatement; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try { - __ind=__ind; -} catch (e) { - $ERROR('#1: var inside "for" is admitted '+e.message); -} -// -////////////////////////////////////////////////////////////////////////////// - -for (var __ind;;){ - break; -} diff --git a/tests/ES3/Conformance/12_Statement/12.2_Variable_Statement/S12.2_A11.js b/tests/ES3/Conformance/12_Statement/12.2_Variable_Statement/S12.2_A11.js deleted file mode 100644 index a011f166c..000000000 --- a/tests/ES3/Conformance/12_Statement/12.2_Variable_Statement/S12.2_A11.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.2_A11; -* @section: 12.2; -* @assertion: When using property attributes, {ReadOnly} is not used; -* @description: Changing variable value using property attributes; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -this['__declared__var'] = "baloon"; -if (this['__declared__var'] !== "baloon") { - $ERROR('#1: this[\'__declared__var\'] === "baloon". Actual: this[\'__declared__var\'] ==='+ this['__declared__var'] ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__declared__var !== "baloon") { - $ERROR('#2: __declared__var === "baloon". Actual: __declared__var ==='+ __declared__var ); -} -// -////////////////////////////////////////////////////////////////////////////// - -var __declared__var; diff --git a/tests/ES3/Conformance/12_Statement/12.2_Variable_Statement/S12.2_A12.js b/tests/ES3/Conformance/12_Statement/12.2_Variable_Statement/S12.2_A12.js deleted file mode 100644 index 8f76e5a6d..000000000 --- a/tests/ES3/Conformance/12_Statement/12.2_Variable_Statement/S12.2_A12.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.2_A12; -* @section: 12.2; -* @assertion: VariableDeclaration within "do-while" loop is allowed; -* @description: Declaring variable within "do-while" statement; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try { - x=x; -} catch (e) { - $ERROR('#1: Declaration variable inside "do-while" statement is admitted'); -} -// -////////////////////////////////////////////////////////////////////////////// - -do var x; while (false); diff --git a/tests/ES3/Conformance/12_Statement/12.2_Variable_Statement/S12.2_A2.js b/tests/ES3/Conformance/12_Statement/12.2_Variable_Statement/S12.2_A2.js deleted file mode 100644 index c51ad25ec..000000000 --- a/tests/ES3/Conformance/12_Statement/12.2_Variable_Statement/S12.2_A2.js +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.2_A2; -* @section: 12.2; -* @assertion: Variables are defined with global scope (that is, they are created as members of the global object, as described in 10.1.3) using property attributes { DontDelete}; -* @description: Checking if deleting global variables that have the attributes {DontDelete} fails; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (delete(__variable)) { - $ERROR('#1: delete(__variable)===false'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (delete(this["__variable"])) { - $ERROR('#2: delete(this["__variable"])===false'); -} -// -////////////////////////////////////////////////////////////////////////////// - - -var __variable; -var __variable = "defined"; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (delete(__variable) | delete(this["__variable"])) { - $ERROR('#3: (delete(__variable) | delete(this["__variable"]))===false' ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if ((__variable !== "defined")|(this["__variable"] !=="defined")) { - $ERROR('#4: __variable === "defined" and this["__variable"] ==="defined"'); -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/12_Statement/12.2_Variable_Statement/S12.2_A3.js b/tests/ES3/Conformance/12_Statement/12.2_Variable_Statement/S12.2_A3.js deleted file mode 100644 index 5f0e4bfbf..000000000 --- a/tests/ES3/Conformance/12_Statement/12.2_Variable_Statement/S12.2_A3.js +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.2_A3; -* @section: 12.2; -* @assertion: FunctionDeclaration produces a new scope; -* @description: Using Global scope and Function scope together; -*/ - -var __var = "OUT"; - -(function(){ - var __var ="IN"; - (function(){__var = "INNER_SPACE";})(); - (function(){var __var = "INNER_SUN";})(); - ////////////////////////////////////////////////////////////////////////////// - //CHECK#1 - if (__var !== "INNER_SPACE") { - $ERROR('#1: __var === "INNER_SPACE". Actual: __var ==='+ __var ); - } - // - ////////////////////////////////////////////////////////////////////////////// -})(); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__var !== "OUT") { - $ERROR('#2: __var === "OUT". Actual: __var ==='+ __var ); -} -// -////////////////////////////////////////////////////////////////////////////// - - -(function(){ - __var ="IN"; - (function(){__var = "INNERED"})(); - (function(){var __var = "INNAGER"})(); - ////////////////////////////////////////////////////////////////////////////// - //CHECK#3 - if (__var!=="INNERED") { - $ERROR('#3: __var==="INNERED". Actual: __var==='+ __var ); - } - // - ////////////////////////////////////////////////////////////////////////////// -})(); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (__var!=="INNERED") { - $ERROR('#4: __var==="INNERED". Actual: __var==='+ __var ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.2_Variable_Statement/S12.2_A4.js b/tests/ES3/Conformance/12_Statement/12.2_Variable_Statement/S12.2_A4.js deleted file mode 100644 index 7a93d7403..000000000 --- a/tests/ES3/Conformance/12_Statement/12.2_Variable_Statement/S12.2_A4.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.2_A4; -* @section: 12.2; -* @assertion: Unicode characters in variable Identifier are allowed; -* @description: Create and use unicode characters in variable Identifier; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try { - __var=__var; -} catch (e) { - $ERROR('#1: Unicode characters in variable Identifier allowed'); -} -// -////////////////////////////////////////////////////////////////////////////// - -var \u005f\u005f\u0076\u0061\u0072 = 1; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__var !== 1) { - $ERROR('#2: __var === 1. Actual: __var ==='+ __var ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.2_Variable_Statement/S12.2_A5.js b/tests/ES3/Conformance/12_Statement/12.2_Variable_Statement/S12.2_A5.js deleted file mode 100644 index 0943ff5bc..000000000 --- a/tests/ES3/Conformance/12_Statement/12.2_Variable_Statement/S12.2_A5.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.2_A5; -* @section: 12.2; -* @assertion: VariableDeclaration within Eval statement is initialized as the program reaches the eval statement; -* @description: Executing eval("var x"); -*/ -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try{ - x=x; - $ERROR('#1: "x=x" lead to throwing exception'); -}catch(e){ - $PRINT(e.message); -}; -// -////////////////////////////////////////////////////////////////////////////// - -eval("var x"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -try{ - x=x; -}catch(e){ - $ERROR('#2: VariableDeclaration inside Eval statement is initialized when program reaches the eval statement '+e.message); -}; -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.2_Variable_Statement/S12.2_A6_T1.js b/tests/ES3/Conformance/12_Statement/12.2_Variable_Statement/S12.2_A6_T1.js deleted file mode 100644 index 066e946a0..000000000 --- a/tests/ES3/Conformance/12_Statement/12.2_Variable_Statement/S12.2_A6_T1.js +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.2_A6_T1; -* @section: 12.2; -* @assertion: VariableDeclaration within "try-catch" statement is allowed; -* @description: Declaring variable within "try-catch" statement; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try{ - intry__var=intry__var; -}catch(e){ - $ERROR('#1: Variable declaration inside "try" block is admitted'); -}; -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -try{ - incatch__var=incatch__var; -}catch(e){ - $ERROR('#2: Variable declaration inside "catch" block is admitted'); -}; -// -////////////////////////////////////////////////////////////////////////////// - -try{ - var intry__var; -}catch(e){ - var incatch__var; -}; diff --git a/tests/ES3/Conformance/12_Statement/12.2_Variable_Statement/S12.2_A6_T2.js b/tests/ES3/Conformance/12_Statement/12.2_Variable_Statement/S12.2_A6_T2.js deleted file mode 100644 index d0eef8190..000000000 --- a/tests/ES3/Conformance/12_Statement/12.2_Variable_Statement/S12.2_A6_T2.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.2_A6_T2; -* @section: 12.2; -* @assertion: VariableDeclaration within "try-catch" statement is allowed; -* @description: Declaring variables within "try-catch" statement; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try{ - intry__intry__var=intry__intry__var; - intry__incatch__var=intry__incatch__var; - incatch__intry__var=incatch__intry__var; - incatch__incatch__var=incatch__incatch__var; -}catch(e){ - $ERROR('#1: Variable declaration inside "try-catch" block is admitted'); -}; -// -////////////////////////////////////////////////////////////////////////////// - -try{ - try { - var intry__intry__var; - } catch (e) { - var intry__incatch__var; - } -}catch(e){ - try { - var incatch__intry__var; - } catch (e) { - var incatch__incatch__var; - } - -}; diff --git a/tests/ES3/Conformance/12_Statement/12.2_Variable_Statement/S12.2_A7.js b/tests/ES3/Conformance/12_Statement/12.2_Variable_Statement/S12.2_A7.js deleted file mode 100644 index 5cfa65f78..000000000 --- a/tests/ES3/Conformance/12_Statement/12.2_Variable_Statement/S12.2_A7.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.2_A7; -* @section: 12.2; -* @assertion: VariableDeclaration within "for" statement is allowed; -* @description: Declaring variable within "for" statement; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try{ - infor_var = infor_var; -}catch(e){ - $ERROR('#1: Variable declaration inside "for" loop is admitted'); -}; -// -////////////////////////////////////////////////////////////////////////////// - -for (;;){ - break; - var infor_var; -} diff --git a/tests/ES3/Conformance/12_Statement/12.2_Variable_Statement/S12.2_A8_T1.js b/tests/ES3/Conformance/12_Statement/12.2_Variable_Statement/S12.2_A8_T1.js deleted file mode 100644 index c9990a961..000000000 --- a/tests/ES3/Conformance/12_Statement/12.2_Variable_Statement/S12.2_A8_T1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.2_A8_T1; -* @section: 12.2; -* @assertion: Only AssignmentExpression is admitted when variable is initialized; -* @description: Checking if execution of "var x += 1" fails; -* @negative; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -var x += 1; -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.2_Variable_Statement/S12.2_A8_T2.js b/tests/ES3/Conformance/12_Statement/12.2_Variable_Statement/S12.2_A8_T2.js deleted file mode 100644 index 25a140926..000000000 --- a/tests/ES3/Conformance/12_Statement/12.2_Variable_Statement/S12.2_A8_T2.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.2_A8_T2; -* @section: 12.2; -* @assertion: Only AssignmentExpression is admitted when variable is initialized; -* @description: Checking if execution of "var x | true" fails; -* @negative; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -var x | true; -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.2_Variable_Statement/S12.2_A8_T3.js b/tests/ES3/Conformance/12_Statement/12.2_Variable_Statement/S12.2_A8_T3.js deleted file mode 100644 index 1873eacb8..000000000 --- a/tests/ES3/Conformance/12_Statement/12.2_Variable_Statement/S12.2_A8_T3.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.2_A8_T3; -* @section: 12.2; -* @assertion: Only AssignmentExpression is admitted when variable is initialized; -* @description: Checking if execution of "var x && 1" fails; -* @negative; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -var x && 1; -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.2_Variable_Statement/S12.2_A8_T4.js b/tests/ES3/Conformance/12_Statement/12.2_Variable_Statement/S12.2_A8_T4.js deleted file mode 100644 index e7a2a5f93..000000000 --- a/tests/ES3/Conformance/12_Statement/12.2_Variable_Statement/S12.2_A8_T4.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.2_A8_T4; -* @section: 12.2; -* @assertion: Only AssignmentExpression is admitted when variable is initialized; -* @description: Checking if execution of "var x++" fails; -* @negative; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -var x++; -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.2_Variable_Statement/S12.2_A8_T5.js b/tests/ES3/Conformance/12_Statement/12.2_Variable_Statement/S12.2_A8_T5.js deleted file mode 100644 index b03b1bb28..000000000 --- a/tests/ES3/Conformance/12_Statement/12.2_Variable_Statement/S12.2_A8_T5.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.2_A8_T5; -* @section: 12.2; -* @assertion: Only AssignmentExpression is admitted when variable is initialized; -* @description: Checking if execution of "var --x" fails; -* @negative; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -var --x; -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.2_Variable_Statement/S12.2_A8_T6.js b/tests/ES3/Conformance/12_Statement/12.2_Variable_Statement/S12.2_A8_T6.js deleted file mode 100644 index 7244cab65..000000000 --- a/tests/ES3/Conformance/12_Statement/12.2_Variable_Statement/S12.2_A8_T6.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.2_A8_T6; -* @section: 12.2; -* @assertion: Only AssignmentExpression is admitted when variable is initialized; -* @description: Checking if execution of "var x*1" fails; -* @negative; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -var x*1; -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/12_Statement/12.2_Variable_Statement/S12.2_A8_T7.js b/tests/ES3/Conformance/12_Statement/12.2_Variable_Statement/S12.2_A8_T7.js deleted file mode 100644 index bb579d3b5..000000000 --- a/tests/ES3/Conformance/12_Statement/12.2_Variable_Statement/S12.2_A8_T7.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.2_A8_T7; -* @section: 12.2; -* @assertion: Only AssignmentExpression is admitted when variable is initialized; -* @description: Checking if execution of "var x>>1" fails; -* @negative; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -var x>>1; -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/12_Statement/12.2_Variable_Statement/S12.2_A8_T8.js b/tests/ES3/Conformance/12_Statement/12.2_Variable_Statement/S12.2_A8_T8.js deleted file mode 100644 index f6a468c86..000000000 --- a/tests/ES3/Conformance/12_Statement/12.2_Variable_Statement/S12.2_A8_T8.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.2_A8_T8; -* @section: 12.2; -* @assertion: Only AssignmentExpression is admitted when variable is initialized; -* @description: Checking if execution of "var x in __arr" fails; -* @negative; -*/ - -__arr = []; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -var x in __arr; -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/12_Statement/12.2_Variable_Statement/S12.2_A9.js b/tests/ES3/Conformance/12_Statement/12.2_Variable_Statement/S12.2_A9.js deleted file mode 100644 index 2dae7e7ae..000000000 --- a/tests/ES3/Conformance/12_Statement/12.2_Variable_Statement/S12.2_A9.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.2_A9; -* @section: 12.2; -* @assertion: When using property attributes, {DontEnum} is not used; -* @description: Enumerating property attributes of "this" and then searching for the declared variable; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -for (__prop in this){ - if (__prop === "__declared__var") - enumed=true; -} -if (!(enumed)) { - $ERROR('#1: When using property attributes, {DontEnum} not used'); -} -// -////////////////////////////////////////////////////////////////////////////// - -var __declared__var; diff --git a/tests/ES3/Conformance/12_Statement/12.3_Empty_Statement/S12.3_A1.js b/tests/ES3/Conformance/12_Statement/12.3_Empty_Statement/S12.3_A1.js deleted file mode 100644 index 50a307246..000000000 --- a/tests/ES3/Conformance/12_Statement/12.3_Empty_Statement/S12.3_A1.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.3_A1; -* @section: 12.3; -* @assertion: The production EmptyStatement ; is evaluated as follows Return (normal, empty, empty); -* @description: Using EmptyStatement ;; -*/ - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;;;;; ;;;;;; ;; ;; ;;;;;; ;;;;;;;; ;; ;; ;;;;; -;;;;; ;; ;;;; ;;;; ;; ;; ;; ;; ;; ;;;;; -;;;;; ;;;; ;; ;;;; ;; ;;;;;; ;; ;;;; ;;;;; -;;;;; ;; ;; ;; ;; ;; ;; ;; ;;;;; -;;;;; ;;;;;; ;; ;; ;; ;; ;; ;;;;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; diff --git a/tests/ES3/Conformance/12_Statement/12.4_Expression_Statement/S12.4_A1.js b/tests/ES3/Conformance/12_Statement/12.4_Expression_Statement/S12.4_A1.js deleted file mode 100644 index 7d15abbb0..000000000 --- a/tests/ES3/Conformance/12_Statement/12.4_Expression_Statement/S12.4_A1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.4_A1; -* @section: 12.4; -* @assertion: An ExpressionStatement can not start with the function keyword because that might make it ambiguous with a FunctionDeclaration; -* @description: Checking if execution of "function(){}()" fails; -* @negative; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -function(){}(); -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.4_Expression_Statement/S12.4_A2_T1.js b/tests/ES3/Conformance/12_Statement/12.4_Expression_Statement/S12.4_A2_T1.js deleted file mode 100644 index 1309c226e..000000000 --- a/tests/ES3/Conformance/12_Statement/12.4_Expression_Statement/S12.4_A2_T1.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.4_A2_T1; -* @section: 12.4; -* @assertion: The production ExpressionStatement : [lookahead \notin {{, function}] Expression; is evaluated as follows: -* 1. Evaluate Expression. -* 2. Call GetValue(Result(1)). -* 3. Return (normal, Result(2), empty); -* @description: Checking by using eval "(eval("x+1+x==1"))"; -*/ - -x=1; - -__evaluated = eval("x+1+x==1"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__evaluated !== false) { - $ERROR('#1: __evaluated === false. Actual: __evaluated ==='+ __evaluated ); -} -// -////////////////////////////////////////////////////////////////////////////// - -__evaluated = eval("1+1+1==1"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__evaluated !== false) { - $ERROR('#2: __evaluated === false. Actual: __evaluated ==='+ __evaluated ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.4_Expression_Statement/S12.4_A2_T2.js b/tests/ES3/Conformance/12_Statement/12.4_Expression_Statement/S12.4_A2_T2.js deleted file mode 100644 index 0628fe559..000000000 --- a/tests/ES3/Conformance/12_Statement/12.4_Expression_Statement/S12.4_A2_T2.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.4_A2_T2; -* @section: 12.4; -* @assertion: The production ExpressionStatement : [lookahead \notin {{, function}] Expression; is evaluated as follows: -* 1. Evaluate Expression. -* 2. Call GetValue(Result(1)). -* 3. Return (normal, Result(2), empty); -* @description: Checking by using eval(eval(x), where x is any string); -*/ - -x="5+1|0===0"; - -__evaluated = eval(x); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__evaluated !== 7) { - $ERROR('#1: __evaluated === 7. Actual: __evaluated ==='+ __evaluated ); -} -// -////////////////////////////////////////////////////////////////////////////// - -__evaluated = eval("2*"+x+">-1"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__evaluated !== 11) { - $ERROR('#2: __evaluated === 11. Actual: __evaluated ==='+ __evaluated ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A1.1_T1.js b/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A1.1_T1.js deleted file mode 100644 index ff85fa84f..000000000 --- a/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A1.1_T1.js +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.5_A1.1_T1; -* @section: 12.5; -* @assertion: 0, null, undefined, false, empty string, NaN in expression is evaluated to false; -* @description: Using "if" without "else" construction; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 - -if(0) - $ERROR('#1: 0 in expression is evaluated to false '); -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if(false) - $ERROR('#2: false in expression is evaluated to false '); -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if(null) - $ERROR('#3: null in expression is evaluated to false '); -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if(undefined) - $ERROR('#4: undefined in expression is evaluated to false '); -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#5 -if("") - $ERROR('#5: empty string in expression is evaluated to false '); -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#6 -if(NaN) - $ERROR('#5: NaN in expression is evaluated to false '); -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A1.1_T2.js b/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A1.1_T2.js deleted file mode 100644 index 0a4207d9d..000000000 --- a/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A1.1_T2.js +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.5_A1.1_T2; -* @section: 12.5; -* @assertion: 0, null, undefined, false, empty string, NaN in expression is evaluated to false; -* @description: Using "if/else" construction; -*/ - -var c=0; -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if(0) - $ERROR('#1.1: 0 in expression is evaluated to false '); -else - c++; -if (c!=1) $ERROR('#1.2: else branch don`t execute'); -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if(false) - $ERROR('#2.1: false in expression is evaluated to false '); -else - c++; -if (c!=2) $ERROR('#2.2: else branch don`t execute'); -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if(null) - $ERROR('#3.1: null in expression is evaluated to false '); -else - c++; -if (c!=3) $ERROR('#3.2: else branch don`t execute'); -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if(undefined) - $ERROR('#4.1: undefined in expression is evaluated to false '); -else - c++; -if (c!=4) $ERROR('#4.2: else branch don`t execute'); -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#5 -if("") - $ERROR('#5.1: empty string in expression is evaluated to false '); -else - c++; -if (c!=5) $ERROR('#5.2: else branch don`t execute'); -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#6 -if(NaN) - $ERROR('#6.1: NaN in expression is evaluated to false '); -else - c++; -if (c!=6) $ERROR('#6.2: else branch don`t execute'); -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A1.2_T1.js b/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A1.2_T1.js deleted file mode 100644 index aed99c549..000000000 --- a/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A1.2_T1.js +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.5_A1.2_T1; -* @section: 12.5; -* @assertion: 1, true, non-empty string and others in expression is evaluated to true when using operator "new"; -* @description: Using "if" without "else" construction; -*/ -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if(!(new Number(1))) - $ERROR('#1: new 1 in expression is evaluated to true'); -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if(!(new Boolean(true))) - $ERROR('#2: new true in expression is evaluated to true'); -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if(!(new String("1"))) - $ERROR('#3: new "1" in expression is evaluated to true'); -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if(!(new String("A"))) - $ERROR('#4: new "A" in expression is evaluated to true'); -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#5 -if(!(new Boolean(false))) - $ERROR('#2: new false in expression is evaluated to true '); -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#6 -if(!(new Number(NaN))) - $ERROR('#6: new NaN in expression is evaluated to true '); -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#7 -if(!(new Number(null))) - $ERROR('#7: new null in expression is evaluated to true '); -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#8 -if(!(new String(undefined))) - $ERROR('#8: new undefined in expression is evaluated to true '); -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#9 -if(!(new String(""))) - $ERROR('#9: new empty string in expression is evaluated to true '); -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A1.2_T2.js b/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A1.2_T2.js deleted file mode 100644 index c7b07179d..000000000 --- a/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A1.2_T2.js +++ /dev/null @@ -1,100 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.5_A1.2_T2; -* @section: 12.5; -* @assertion: 1, true, non-empty string and others in expression is evaluated to true when using operator "new"; -* @description: Using "if/else" construction; -*/ - -var c=0; -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if(!(new Number(1))) - $ERROR('#1.1: new 1 in expression is evaluated to true'); -else - c++; -if (c!=1) $ERROR('#1.2: else branch don`t execute'); -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if(!(new Boolean(true))) - $ERROR('#2.1: new true in expression is evaluated to true'); -else - c++; -if (c!=2) $ERROR('#2.2: else branch don`t execute'); -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if(!(new String("1"))) - $ERROR('#3.1: new "1" in expression is evaluated to true'); -else - c++; -if (c!=3) $ERROR('#3.2: else branch don`t execute'); -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if(!(new String("A"))) - $ERROR('#4.1: new "A" in expression is evaluated to true'); -else - c++; -if (c!=4) $ERROR('#4.2: else branch don`t execute'); -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#5 -if(!(new Boolean(false))) - $ERROR('#5.1: new false in expression is evaluated to true '); -else - c++; -if (c!=5) $ERROR('#5.2: else branch don`t execute'); -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#6 -if(!(new Number(NaN))) - $ERROR('#6.1: new NaN in expression is evaluated to true '); -else - c++; -if (c!=6) $ERROR('#6.2: else branch don`t execute'); -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#7 -if(!(new Number(null))) - $ERROR('#7.1: new null in expression is evaluated to true '); -else - c++; -if (c!=7) $ERROR('#7.2: else branch don`t execute'); -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#8 -if(!(new String(undefined))) - $ERROR('#8.1: new undefined in expression is evaluated to true '); -else - c++; -if (c!=8) $ERROR('#8.2: else branch don`t execute'); -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#9 -if(!(new String(""))) - $ERROR('#9.1: new empty string in expression is evaluated to true '); -else - c++; -if (c!=9) $ERROR('#9.2: else branch don`t execute'); -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A10_T1.js b/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A10_T1.js deleted file mode 100644 index bc714d2f8..000000000 --- a/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A10_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.5_A10_T1; -* @section: 12.5; -* @assertion: Function expession inside the "if" expression is allowed; -* @description: Using function expession(function __func(){return 0;}) inside the "if" expression ; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK# -if(function __func(){return 0;}){ - ; -}else { - $ERROR('#1: Function expession inside the "if" expression is allowed'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A10_T2.js b/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A10_T2.js deleted file mode 100644 index 11e90e851..000000000 --- a/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A10_T2.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.5_A10_T2; -* @section: 12.5; -* @assertion: Function expession inside the "if" expression is allowed; -* @description: Using function expession "function __func(){return 0;}()" within "if" expression; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK# -if(function __func(){return 0;}()){ - $ERROR('#1: Function expession inside the if expression is allowed'); -}else { - ; -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A11.js b/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A11.js deleted file mode 100644 index 5b537369f..000000000 --- a/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A11.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.5_A11; -* @section: 12.5; -* @assertion: {} within the "if" expression is not allowed; -* @description: Checking if execution of "if({1})" fails; -* @negative; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK# -if({1}) - { - ; - }else - { - ; - } -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A12_T1.js b/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A12_T1.js deleted file mode 100644 index f3e5e86a9..000000000 --- a/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A12_T1.js +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.5_A12_T1; -* @section: 12.5; -* @assertion: Embedded "if/else" constructions are allowed; -* @description: Using embedded "if/else" into "if/else" constructions; -*/ - -//CHECK# 1 -if(true) - if (false) - $ERROR('#1.1: At embedded "if/else" constructions engine must select right branches'); - else - ; -else - if (true) - $ERROR('#1.2: At embedded "if/else" constructions engine must select right branches'); - else - $ERROR('#1.3: At embedded "if/else" constructions engine must select right branches'); - -//CHECK# 2 -if(true) - if (true) - ; - else - $ERROR('#2.1: At embedded "if/else" constructions engine must select right branches'); -else - if (true) - $ERROR('#2.2: At embedded "if/else" constructions engine must select right branches'); - else - $ERROR('#2.3: At embedded "if/else" constructions engine must select right branches'); - -//CHECK# 3 -if(false) - if (true) - $ERROR('#3.1: At embedded "if/else" constructions engine must select right branches'); - else - $ERROR('#3.2: At embedded "if/else" constructions engine must select right branches'); -else - if (true) - ; - else - $ERROR('#3.3: At embedded "if/else" constructions engine must select right branches'); - -//CHECK# 4 -if(false) - if (true) - $ERROR('#4.1: At embedded "if/else" constructions engine must select right branches'); - else - $ERROR('#4.2: At embedded "if/else" constructions engine must select right branches'); -else - if (false) - $ERROR('#4.3: At embedded "if/else" constructions engine must select right branches'); - else - ; diff --git a/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A12_T2.js b/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A12_T2.js deleted file mode 100644 index a4d020030..000000000 --- a/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A12_T2.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.5_A12_T2; -* @section: 12.5; -* @assertion: Embedded "if/else" constructions are allowed; -* @description: Using embedded "if" into "if/else" constructions; -*/ - -//CHECK# 1 -if(true){ - if (false) - $ERROR('#1.1: At embedded "if/else" constructions engine must select right branches'); -} -else{ - if (true) - $ERROR('#1.2: At embedded "if/else" constructions engine must select right branches'); -} - -//CHECK# 2 -if(true){ - if (true) - ; -} -else{ - if (true) - $ERROR('#2.2: At embedded "if/else" constructions engine must select right branches'); -} - -//CHECK# 3 -if(false){ - if (true) - $ERROR('#3.1: At embedded "if/else" constructions engine must select right branches'); -} -else{ - if (true) - ; -} - -//CHECK# 4 -if(false){ - if (true) - $ERROR('#4.1: At embedded "if/else" constructions engine must select right branches'); -} -else{ - if (false) - $ERROR('#4.3: At embedded "if/else" constructions engine must select right branches'); -} diff --git a/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A12_T3.js b/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A12_T3.js deleted file mode 100644 index cc91974b8..000000000 --- a/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A12_T3.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.5_A12_T3; -* @section: 12.5; -* @assertion: Embedded "if/else" constructions are allowed; -* @description: Using embedded "if/else" into "if" without "else" constructions; -*/ - -//CHECK# 1 -if(true) - if (false) - $ERROR('#1.1: At embedded "if/else" constructions engine must select right branches'); - else - ; - -//CHECK# 2 -if(true) - if (true) - ; - else - $ERROR('#2.1: At embedded "if/else" constructions engine must select right branches'); - -//CHECK# 3 -if(false) - if (true) - $ERROR('#3.1: At embedded "if/else" constructions engine must select right branches'); - else - $ERROR('#3.2: At embedded "if/else" constructions engine must select right branches'); - -//CHECK# 4 -if(false) - if (true) - $ERROR('#4.1: At embedded "if/else" constructions engine must select right branches'); - else - $ERROR('#4.2: At embedded "if/else" constructions engine must select right branches'); diff --git a/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A12_T4.js b/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A12_T4.js deleted file mode 100644 index 6880ebaed..000000000 --- a/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A12_T4.js +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.5_A12_T4; -* @section: 12.5; -* @assertion: Embedded "if/else" constructions are allowed; -* @description: Using embedded "if" into "if" constructions; -*/ - -//CHECK# 1 -if(true) - if (false) - $ERROR('#1.1: At embedded "if/else" constructions engine must select right branches'); - -//CHECK# 2 -var c=0; -if(true) - if (true) - c=2; -if (c!==2) - $ERROR('#2: At embedded "if/else" constructions engine must select right branches'); - -//CHECK# 3 -if(false) - if (true) - $ERROR('#3.1: At embedded "if/else" constructions engine must select right branches'); - -//CHECK# 4 -if(false) - if (true) - $ERROR('#4.1: At embedded "if/else" constructions engine must select right branches'); diff --git a/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A1_T1.js b/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A1_T1.js deleted file mode 100644 index 1ed297216..000000000 --- a/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A1_T1.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.5_A1_T1; -* @section: 12.5; -* @assertion: 1, true, non-empty string in expression is evaluated to true; -* @description: Using "if" without "else" construction; -*/ -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if(!(1)) - $ERROR('#1: 1 in expression is evaluated to true'); -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if(!(true)) - $ERROR('#2: true in expression is evaluated to true'); -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if(!("1")) - $ERROR('#3: "1" in expression is evaluated to true'); -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if(!("A")) - $ERROR('#4: "A" in expression is evaluated to true'); -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A1_T2.js b/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A1_T2.js deleted file mode 100644 index c07c94bf7..000000000 --- a/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A1_T2.js +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.5_A1_T2; -* @section: 12.5; -* @assertion: 1, true, non-empty string in expression is evaluated to true; -* @description: Using "if/else" construction; -*/ - -var c=0; -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if(!(1)) - $ERROR('#1.1: 1 in expression is evaluated to true'); -else - c++; -if (c!=1) $ERROR('#1.2: else branch don`t execute'); -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if(!(true)) - $ERROR('#2.1: true in expression is evaluated to true'); -else - c++; -if (c!=2) $ERROR('#2.2: else branch don`t execute'); -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if(!("1")) - $ERROR('#3.1: "1" in expression is evaluated to true'); -else - c++; -if (c!=3) $ERROR('#3.2: else branch don`t execute'); -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if(!("A")) - $ERROR('#4.1: "A" in expression is evaluated to true'); -else - c++; -if (c!=4) $ERROR('#4.2: else branch don`t execute'); -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A2.js b/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A2.js deleted file mode 100644 index 39cce3eaf..000000000 --- a/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A2.js +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.5_A2; -* @section: 12.5; -* @assertion: In the "if" Statement eval in Expression is admitted; -* @description: Checking by using eval "eval("true")"; -* @negative; -*/ - -if (eval("true")) $FAIL('#1: In the "if" Statement eval as Expression is admitted'); diff --git a/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A3.js b/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A3.js deleted file mode 100644 index 44f751989..000000000 --- a/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A3.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.5_A3; -* @section: 12.5; -* @assertion: When the production "IfStatement: if ( Expression ) Statement else Statement" is evaluated, Expression is evaluated first; -* @description: The Expression is "(function(){throw 1})()"; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try { - if ((function(){throw 1})()) abracadabra -} catch (e) { - if (e !== 1) { - $ERROR('#1: Exception === 1. Actual: Exception ==='+ e); - } -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -try { - if ((function(){throw 1})()) abracadabra; else blablachat; -} catch (e) { - if (e !== 1) { - $ERROR('#2: Exception === 1. Actual: Exception ==='+ e); - } -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A4.js b/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A4.js deleted file mode 100644 index ff3d6c9f3..000000000 --- a/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A4.js +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.5_A4; -* @section: 12.5; -* @assertion: When the production "IfStatement: if ( Expression ) Statement else Statement" is evaluated, Statement(s) is(are) evaluated second; -* @description: The first statement is "(function(){throw "instatement"})()"; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try { - if (true) (function(){throw "instatement"})(); - $FAIL("#1 failed") -} catch (e) { - if (e !== "instatement") { - $ERROR('#1: Exception === "instatement". Actual: Exception ==='+ e); - } -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -try { - if (false) (function(){throw "truebranch"})(); (function(){throw "missbranch"})(); - $FAIL("#2 failed") -} catch (e) { - if (e !== "missbranch") { - $ERROR('#2: Exception === "missbranch". Actual: Exception ==='+ e); - } -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A5.js b/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A5.js deleted file mode 100644 index 9bb131cec..000000000 --- a/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A5.js +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.5_A5; -* @section: 12.5; -* @assertion: FunctionDeclaration inside the "if" Expression is evaluated as true and function will not be declarated; -* @description: The "if" Expression is "function __func(){throw "FunctionExpression";}"; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try { - __func=__func; - $ERROR('#1: "__func=__func" lead to throwing exception'); -} catch (e) { - ; -} -// -////////////////////////////////////////////////////////////////////////////// - - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -try { - if(function __func(){throw "FunctionExpression";}) (function(){throw "TrueBranch"})(); else (function(){"MissBranch"})(); -} catch (e) { - if (e !== "TrueBranch") { - $ERROR('#2: Exception ==="TrueBranch". Actual: Exception ==='+ e); - } -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -try { - __func=__func; - $ERROR('#3: "__func=__func" lead to throwing exception'); -} catch (e) { - ; -} -// -////////////////////////////////////////////////////////////////////////////// - - - diff --git a/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A6_T1.js b/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A6_T1.js deleted file mode 100644 index 847de9f66..000000000 --- a/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A6_T1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.5_A6_T1; -* @section: 12.5; -* @assertion: In the If statement expression must be enclosed in braces; -* @description: Checking if execution of "if true" fails; -* @negative; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if true; -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A6_T2.js b/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A6_T2.js deleted file mode 100644 index 1a96746a7..000000000 --- a/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A6_T2.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.5_A6_T2; -* @section: 12.5; -* @assertion: In the If statement expression must be enclosed in braces; -* @description: Checking if execution of "if false" fails; -* @negative; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if false; -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A7.js b/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A7.js deleted file mode 100644 index c27483e86..000000000 --- a/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A7.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.5_A7; -* @section: 12.5; -* @assertion: In the "if" statement empty statement is allowed and is evaluated to "undefined"; -* @description: Checking by using eval "eval("if(1);"))"; -*/ - - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try { - __evaluated = eval("if(1);"); - if (__evaluated !== undefined) { - $ERROR('#1: __evaluated === undefined. Actual: __evaluated ==='+ __evaluated ); - } - -} catch (e) { - $ERROR('#1.1: "__evaluated = eval("if(1);")" does not lead to throwing exception'); - -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A8.js b/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A8.js deleted file mode 100644 index 9668ca363..000000000 --- a/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A8.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.5_A8; -* @section: 12.5; -* @assertion: In the "if" Statement empty expression is not allowed; -* @description: Checking if execution of "if()" fails; -* @negative; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if(); -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A9_T1.js b/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A9_T1.js deleted file mode 100644 index a22fc11c2..000000000 --- a/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A9_T1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.5_A9_T1; -* @section: 12.5; -* @assertion: Function declaration within an "if" statement is not allowed; -* @description: Declaring function within an "if" statement; -* @negative; -*/ - -if (true) { - function __func(){}; -} else { - function __func(){}; -} diff --git a/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A9_T2.js b/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A9_T2.js deleted file mode 100644 index 72fffae94..000000000 --- a/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A9_T2.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.5_A9_T2; -* @section: 12.5; -* @assertion: Function declaration within an "if" statement is not allowed; -* @description: Declaring function within and "if" that is declared within the function call; -* @negative; -*/ - -(function(){ - -if (true) { - function __func(){}; -} else { - function __func(){}; -} - -})(); diff --git a/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A9_T3.js b/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A9_T3.js deleted file mode 100644 index f6c7aa616..000000000 --- a/tests/ES3/Conformance/12_Statement/12.5_The_if_Statement/S12.5_A9_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.5_A9_T3; -* @section: 12.5; -* @assertion: Function declaration within an "if" statement is not allowed; -* @description: Declaring function within an "if" statement that is declared within the function declaration; -* @negative; -*/ - -function(){ - -if (true) { - function __func(){}; -} else { - function __func(){}; -} - -}; diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A1.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A1.js deleted file mode 100644 index 7e603dc15..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A1.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.1_A1; -* @section: 12.6.1; -* @assertion: When the production "do Statement while ( Expression )" is evaluated, Statement is evaluated first; -* @description: Evaluating various Expressions; -*/ - -do __in__do=1; while ( false ); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__in__do!==1) { - $ERROR('#1: false evaluates to false'); -} -// -////////////////////////////////////////////////////////////////////////////// - -do __in__do=2; while ( 0 ); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__in__do!==2) { - $ERROR('#2: 0 evaluates to false'); -} -// -////////////////////////////////////////////////////////////////////////////// - -do __in__do=3; while ( "" ); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__in__do!==3) { - $ERROR('#3: "" evaluates to false'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A10.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A10.js deleted file mode 100644 index cfde1eab4..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A10.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.1_A10; -* @section: 12.6.1, 13; -* @assertion: FunctionExpression within a "do-while" statement is allowed, but no function with the given name will appear in the global context; -* @description: Also this a test on FunctionExpression; -*/ - -var check = 0; -do { - if(typeof(f) === "function"){ - check = -1; - break; - } else { - check = 1; - break; - } -} while(function f(){}); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (check !== 1) { - $ERROR('#1: FunctionExpression within a "do-while" statement is allowed, but no function with the given name will appear in the global context'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A11.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A11.js deleted file mode 100644 index 965524f40..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A11.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.1_A11; -* @section: 12.6.1; -* @assertion: Block "{}" in a "do-while" Expression is evaluated to true; -* @description: Checking if execution of "do {} while({})" passes; -*/ - -do { - var __in__do=1; - if(__in__do)break; -} while({}); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__in__do !== 1) { - $ERROR('#1: "{}" in do-while expression evaluates to true'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A12.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A12.js deleted file mode 100644 index c47400ca4..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A12.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.1_A12; -* @section: 12.6.1; -* @assertion: Any statement within "do-while" construction must be a compound; -* @description: Checking if execution of "do var x=1; var y =2; while (0)" fails; -* @negative; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -do var x=1; var y =2; while (0); -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A13_T1.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A13_T1.js deleted file mode 100644 index ac7bb5f8c..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A13_T1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.1_A13_T1; -* @section: 12.6.1, 13; -* @assertion: FunctionDeclaration within a "do-while" Block is not allowed; -* @description: Declaring function within a "do-while" loop; -* @negative; -*/ - -do{ - function __func(){}; -} while(0); diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A13_T2.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A13_T2.js deleted file mode 100644 index 8f75c01b1..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A13_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.1_A13_T2; -* @section: 12.6.1, 13; -* @assertion: FunctionDeclaration within a "do-while" Block is not allowed; -* @description: Declaring a function within a "do-while" loop that is within a function call; -* @negative; -*/ - -(function(){ - -do{ - function __func(){}; -}while(0); - -})(); diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A13_T3.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A13_T3.js deleted file mode 100644 index 35c94b10a..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A13_T3.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.1_A13_T3; -* @section: 12.6.1, 13; -* @assertion: FunctionDeclaration within a "do-while" Block is not allowed; -* @description: Declaring a function within a "do-while" loop that is within a function declaration itself; -* @negative; -*/ - -function(){ - -do{ - function __func(){}; -}while(0); - -}; diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A14_T1.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A14_T1.js deleted file mode 100644 index 81261187d..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A14_T1.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.1_A14_T1; -* @section: 12.6.1, 13; -* @assertion: FunctionExpression within a "do-while" Expression is allowed; -* @description: Using FunctionExpression "function __func(){return 0;}" as an Expression; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK# -do{ - var __reached = 1; - break; -}while(function __func(){return 0;}); -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__reached !== 1) { - $ERROR('#2: function expession inside of do-while expression is allowed'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A14_T2.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A14_T2.js deleted file mode 100644 index e02bc250a..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A14_T2.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.1_A14_T2; -* @section: 12.6.1; -* @assertion: FunctionExpression within a "do-while" Expression is allowed; -* @description: Using FunctionExpression "function __func(){return 0;}()" as an Expression; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK# -do{ - var __reached = 1; - break; -}while(function __func(){return 0;}()); -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__reached !== 1) { - $ERROR('#2: function expession inside of do-while expression is allowed'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A15.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A15.js deleted file mode 100644 index 4c34d8a1d..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A15.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.1_A15; -* @section: 12.6.1; -* @assertion: Block within a "do-while" Expression is not allowed; -* @description: Using "{0}" Block as an Expression; -* @negative; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK# -do{ - ; -}while({0}); -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A2.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A2.js deleted file mode 100644 index 0d15c34b9..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A2.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.1_A2; -* @section: 12.6.1; -* @assertion: While evaluating "do Statement while ( Expression )", Statement is evaluated first and only after it is done Expression is checked; -* @description: Evaluating Statement with error Expression; -*/ - -try { - do __in__do = "reached"; while (abbracadabra); - $ERROR('#1: \'do __in__do = "reached"; while (abbracadabra)\' lead to throwing exception'); -} catch (e) {} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__in__do !== "reached") { - $ERROR('#1.1: __in__do === "reached". Actual: __in__do ==='+ __in__do ); -} -// -////////////////////////////////////////////////////////////////////////////// - - diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A3.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A3.js deleted file mode 100644 index a949f53ea..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A3.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.1_A3; -* @section: 12.6.1; -* @assertion: When the production "do Statement while ( Expression )" is evaluated, then (normal, V, empty) is returned; -* @description: Using eval "eval("do __in__do=1; while (false)")"; -*/ - -__evaluated = eval("do __in__do=1; while (false)"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK# -if (__in__do !== 1) { - $ERROR('#1: __in__do === 1. Actual: __in__do ==='+ __in__do ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__evaluated !== 1) { - $ERROR('#2: __evaluated === 1. Actual: __evaluated ==='+ __evaluated ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A4_T1.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A4_T1.js deleted file mode 100644 index 5f7d4db29..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A4_T1.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.1_A4_T1; -* @section: 12.6.1, 12.8; -* @assertion: "break" within a "do-while" Statement is allowed and performed as described in 12.8; -* @description: Using "break" within a "do-while" loop; -*/ - -do { - __in__do__before__break="reached"; - break; - __in__do__after__break="where am i"; -} while(2===1); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__in__do__before__break !== "reached") { - $ERROR('#1: __in__do__before__break === "reached". Actual: __in__do__before__break ==='+ __in__do__before__break ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (typeof __in__do__after__break !== "undefined") { - $ERROR('#2: typeof __in__do__after__break === "undefined". Actual: typeof __in__do__after__break ==='+ typeof __in__do__after__break ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A4_T2.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A4_T2.js deleted file mode 100644 index 07a25c78d..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A4_T2.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.1_A4_T2; -* @section: 12.6.1, 12.8; -* @assertion: "break" within a "do-while" Statement is allowed and performed as described in 12.8; -* @description: "break" and VariableDeclaration within a "do-while" statement; -*/ - -do_out : do { - var __in__do__before__break="black"; - do_in : do { - var __in__do__IN__before__break="hole"; - break do_in; - var __in__do__IN__after__break="sun"; - } while (0); - var __in__do__after__break="won't you come"; -} while(2==1); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!(__in__do__before__break&&__in__do__IN__before__break&&!__in__do__IN__after__break&&__in__do__after__break)) { - $ERROR('#1: (__in__do__before__break&&__in__do__IN__before__break&&!__in__do__IN__after__break&&__in__do__after__break)===true. Actual: (__in__do__before__break&&__in__do__IN__before__break&&!__in__do__IN__after__break&&__in__do__after__break)==='+ (__in__do__before__break&&__in__do__IN__before__break&&!__in__do__IN__after__break&&__in__do__after__break) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A4_T3.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A4_T3.js deleted file mode 100644 index e80351a70..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A4_T3.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.1_A4_T3; -* @section: 12.6.1, 12.2, 12.8; -* @assertion: "break" within a "do-while" Statement is allowed and performed as described in 12.8; -* @description: "break" and VariableDeclaration within a "do-while" statement; -*/ - -do_out : do { - var __in__do__before__break="once"; - do_in : do { - var __in__do__IN__before__break="in"; - break do_out; - var __in__do__IN__after__break="the"; - } while (0); - var __in__do__after__break="lifetime"; -} while(2===1); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!(__in__do__before__break&&__in__do__IN__before__break&&!__in__do__IN__after__break&&!__in__do__after__break)) { - $ERROR('#1: (__in__do__before__break&&__in__do__IN__before__break&&!__in__do__IN__after__break&&!__in__do__after__break)===true. Actual: (__in__do__before__break&&__in__do__IN__before__break&&!__in__do__IN__after__break&&!__in__do__after__break)==='+ (__in__do__before__break&&__in__do__IN__before__break&&!__in__do__IN__after__break&&!__in__do__after__break) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A4_T4.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A4_T4.js deleted file mode 100644 index ba5cc9503..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A4_T4.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.1_A4_T4; -* @section: 12.6.1, 12.8; -* @assertion: "break" within a "do-while" Statement is allowed and performed as described in 12.8; -* @description: "break" and VariableDeclaration within a "do-while" statement; -*/ - -do_out : do { - var __in__do__before__break="reached"; - do_in : do { - var __in__do__IN__before__break="reached"; - break; - var __in__do__IN__after__break="where am i"; - } while (0); - var __in__do__after__break="where am i"; -} while(2===1); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!(__in__do__before__break&&__in__do__IN__before__break&&!__in__do__IN__after__break&&__in__do__after__break)) { - $ERROR('#1: (__in__do__before__break&&__in__do__IN__before__break&&!__in__do__IN__after__break&&__in__do__after__break)===true. Actual: (__in__do__before__break&&__in__do__IN__before__break&&!__in__do__IN__after__break&&__in__do__after__break)==='+ (__in__do__before__break&&__in__do__IN__before__break&&!__in__do__IN__after__break&&__in__do__after__break) ); -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A4_T5.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A4_T5.js deleted file mode 100644 index 15b078cd0..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A4_T5.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.1_A4_T5; -* @section: 12.6.1, 12.8; -* @assertion: "break" within a "do-while" Statement is allowed and performed as described in 12.8; -* @description: Using labeled "break" in order to continue a loop; -*/ - -//CHECK#1 -var i=0; -woohoo:{ - do{ - i++; - if ( ! (i < 10) ) { - break woohoo; - $ERROR('#1.1: "break woohoo" must break loop'); - } - } while ( true ); - if (i!==10) $ERROR('#1.2: i===10. Actual: i==='+ i ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A5.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A5.js deleted file mode 100644 index a333d9f7a..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A5.js +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.1_A5; -* @section: 12.6.1; -* @assertion: After "do-while" is broken, (normal, V, empty) is returned; -* @description: Using eval; -*/ - -__evaluated = eval("do {__in__do__before__break=1; break; __in__do__after__break=2;} while(0)"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__in__do__before__break !== 1) { - $ERROR('#1: __in__do__before__break === 1. Actual: __in__do__before__break ==='+ __in__do__before__break ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (typeof __in__do__after__break !== "undefined") { - $ERROR('#2: typeof __in__do__after__break === "undefined". Actual: typeof __in__do__after__break ==='+ typeof __in__do__after__break ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__evaluated !== 1) { - $ERROR('#3: __evaluated === 1. Actual: __evaluated ==='+ __evaluated ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A6_T1.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A6_T1.js deleted file mode 100644 index 5ec9340a3..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A6_T1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.1_A6_T1; -* @section: 12.6.1; -* @assertion: Expression in "do-while" IterationStatement is bracketed with braces; -* @description: Checking if execution of "do{} while 1" fails; -* @negative; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -do break; while 1; -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A6_T2.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A6_T2.js deleted file mode 100644 index f385f1a04..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A6_T2.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.1_A6_T2; -* @section: 12.6.1; -* @assertion: Expression in "do-while" IterationStatement is bracketed with braces; -* @description: Checking if execution of "do{} while 0" fails; -* @negative; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -do break; while 0; -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A6_T3.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A6_T3.js deleted file mode 100644 index d5d136704..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A6_T3.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.1_A6_T3; -* @section: 12.6.1; -* @assertion: Expression in "do-while" IterationStatement is bracketed with braces; -* @description: Checking if execution of "do{}while true" fails; -* @negative; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -do break; while true; -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A6_T4.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A6_T4.js deleted file mode 100644 index 14add62bf..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A6_T4.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.1_A6_T4; -* @section: 12.6.1; -* @assertion: Expression in "do-while" IterationStatement is bracketed with braces; -* @description: Checking if execution of "do{}while false" fails; -* @negative; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -do break; while false; -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A6_T5.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A6_T5.js deleted file mode 100644 index f2fca45b4..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A6_T5.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.1_A6_T5; -* @section: 12.6.1; -* @assertion: Expression in "do-while" IterationStatement is bracketed with braces; -* @description: Checking if execution of "do{}while ''" fails; -* @negative; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -do break; while ''; -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A6_T6.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A6_T6.js deleted file mode 100644 index 51f58e8db..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A6_T6.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.1_A6_T6; -* @section: 12.6.1; -* @assertion: Expression in "do-while" IterationStatement is bracketed with braces; -* @description: Checking if execution of "do{}while 'hood'" fails; -* @negative; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -do break; while 'hood'; -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A7.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A7.js deleted file mode 100644 index 2d2276c53..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A7.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.1_A7; -* @section: 12.6.1; -* @assertion: The "do-while" Statement is evaluted according to 12.6.1 and returns (normal, V, empty); -* @description: Using eval; -*/ - -var __condition=0 - -__evaluated = eval("do eval(\"__condition++\"); while (__condition<5)"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__condition !== 5) { - $ERROR('#1: The "do-while" statement is evaluted according to the Standard '); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__evaluated !== 4) { - $ERROR('#2: The "do-while" statement returns (normal, V, empty)'); -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A8.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A8.js deleted file mode 100644 index 5378fc43a..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A8.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.1_A8; -* @section: 12.6.1; -* @assertion: "continue" statement within a "do-while" Statement is allowed; -* @description: Using eval; -*/ - -var __condition = 0, __odds=0; - -__evaluated = eval("do { __condition++; if (((''+__condition/2).split('.')).length>1) continue; __odds++;} while(__condition < 10)"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__odds !== 5) { - $ERROR('#1: __odds === 5. Actual: __odds ==='+ __odds ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__evaluated !== 4) { - $ERROR('#2: __evaluated === 4. Actual: __evaluated ==='+ __evaluated ); -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A9.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A9.js deleted file mode 100644 index 7a9d3692c..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.1_The_do_while_Statement/S12.6.1_A9.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.1_A9; -* @section: 12.6.1; -* @assertion: "do-while" Statement is evaluated without syntax checks; -* @description: Throwing system exception whithin a "do-while" loop; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try { - do { - var x = 1; - abaracadabara; - } while(0); - $ERROR('#1: "abbracadabra" lead to throwing exception'); - -} catch (e) {} - -if (x !== 1) { - $ERROR('#1.1: x === 1. Actual: x ==='+ x ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A1.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A1.js deleted file mode 100644 index a40bc3546..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A1.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.2_A1; -* @section: 12.6.2; -* @assertion: Expression from "while" IterationStatement is evaluated first; "false", "0", "null", "undefined" and "empty" strings used as the Expression are evaluated to "false"; -* @description: Evaluating various Expressions; -*/ - -var __in__do; - -while ( false ) __in__do=1; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__in__do !== undefined) { - $ERROR('#1: false evaluates to false'); -} -// -////////////////////////////////////////////////////////////////////////////// - -while ( 0 ) __in__do=2; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__in__do !== undefined) { - $ERROR('#2: 0 evaluates to false'); -} -// -////////////////////////////////////////////////////////////////////////////// - -while ( "" ) __in__do=3; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__in__do !== undefined) { - $ERROR('#3: empty string evaluates to false'); -} -// -////////////////////////////////////////////////////////////////////////////// - -while ( null ) __in__do=4; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (__in__do !== undefined) { - $ERROR('#4: null evaluates to false'); -} -// -////////////////////////////////////////////////////////////////////////////// - -while ( undefined ) __in__do=35; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#5 -if (__in__do !== undefined) { - $ERROR('#5: undefined evaluates to false'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A10.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A10.js deleted file mode 100644 index 61b68d29f..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A10.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.2_A10; -* @section: 12.6.2, 13.2; -* @assertion: FunctionExpression within a "while" IterationStatement is allowed, but no function with the given name will appear in the global context; -* @description: Testing FunctionExpression too; -*/ - -var check=0; -while(function f(){}){ - if(typeof(f) === "function") { - check = -1; - break; - } else { - check = 1; - break; - } -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (check !== 1) { - $ERROR('#1: FunctionExpression inside while construction expression allowed but function not declare'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A11.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A11.js deleted file mode 100644 index e7339f535..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A11.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.2_A11; -* @section: 12.6.2; -* @assertion: "{}" Block within a "while" Expression is evaluated to true; -* @description: Checking if execution of "while({}){}" passes; -*/ - -while({}){ - var __in__do=1; - if(__in__do)break; -}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__in__do !== 1) { - $ERROR('#1: "{}" in while expression evaluates to true'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A13_T1.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A13_T1.js deleted file mode 100644 index 450ef8456..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A13_T1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.2_A13_T1; -* @section: 12.6.2; -* @assertion: FunctionDeclaration within a "while" Statement is not allowed; -* @description: Checking if declaring a function within a "while" Statement leads to an exception; -* @negative; -*/ - -while(0){ - function __func(){}; -}; diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A13_T2.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A13_T2.js deleted file mode 100644 index 9a33659f7..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A13_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.2_A13_T2; -* @section: 12.6.2; -* @assertion: FunctionDeclaration within a "while" Statement is not allowed; -* @description: Checking if declaring a function within a "while" Statement that is in a function call leads to an exception; -* @negative; -*/ - -(function(){ - -while(0){ - function __func(){}; -}; - -})(); diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A13_T3.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A13_T3.js deleted file mode 100644 index 355c76c44..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A13_T3.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.2_A13_T3; -* @section: 12.6.2; -* @assertion: FunctionDeclaration within a "while" Statement is not allowed; -* @description: Checking if declaring a function within a "while" Statement that is in a function body leads to an exception; -* @negative; -*/ - -function(){ - -while(0){ - function __func(){}; -}; - -}; diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A14_T1.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A14_T1.js deleted file mode 100644 index 8f754fd29..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A14_T1.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.2_A14_T1; -* @section: 12.6.2; -* @assertion: FunctionExpression within a "while" Expression is allowed; -* @description: Using "function __func(){return 0;}" as an Expression; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK# -while(function __func(){return 0;}){ - var __reached = 1; - break; -}; -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__reached !== 1) { - $ERROR('#2: function expression inside of while expression is allowed'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A14_T2.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A14_T2.js deleted file mode 100644 index 2dcd72b4c..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A14_T2.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.2_A14_T2; -* @section: 12.6.2; -* @assertion: FunctionExpression within a "while" Expression is allowed; -* @description: Using function call as an Expression; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK# -while(function __func(){return 1;}()){ - var __reached = 1; - break; -}; -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__reached !== 1) { - $ERROR('#2: function expression inside of while expression is allowed'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A15.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A15.js deleted file mode 100644 index ceb42f28d..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A15.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.2_A15; -* @section: 12.6.2; -* @assertion: Block within a "while" Expression is not allowed; -* @description: Expression is "{0}"; -* @negative; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK# -while({1}){ - break ; -}; -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A2.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A2.js deleted file mode 100644 index d7c60b066..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A2.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.2_A2; -* @section: 12.6.2; -* @assertion: While evaluating The production IterationStatement: "while ( Expression ) Statement", Expression is evaluated first; -* @description: Evaluating Statement with error Expression; -*/ - -try { - while ((function(){throw 1})()) __in__while = "reached"; - $ERROR('#1: \'while ((function(){throw 1})()) __in__while = "reached"\' lead to throwing exception'); -} catch (e) { - if (e !== 1) { - $ERROR('#1: Exception === 1. Actual: Exception ==='+e); - } -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __in__while !== "undefined") { - $ERROR('#1.1: typeof __in__while === "undefined". Actual: typeof __in__while ==='+typeof __in__while); -} -// -////////////////////////////////////////////////////////////////////////////// - - diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A3.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A3.js deleted file mode 100644 index 50c04cd5e..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A3.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.2_A3; -* @section: 12.6.2; -* @assertion: When "while" IterationStatement is evaluated, (normal, V, empty) is returned; -* @description: Using eval; -*/ - -var __in__do; - -__evaluated = eval("while (false) __in__do=1;"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK# -if (__in__do !== undefined) { - $ERROR('#1: __in__do === undefined. Actual: __in__do ==='+ __in__do ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__evaluated !== undefined) { - $ERROR('#2: __evaluated === undefined. Actual: __evaluated ==='+ __evaluated ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A4_T1.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A4_T1.js deleted file mode 100644 index a3c9f473c..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A4_T1.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.2_A4_T1; -* @section: 12.6.2, 12.8; -* @assertion: "break" within a "while" Statement is allowed and performed as described in 12.8; -* @description: "break" within a "while" Statement; -*/ - -while(1===1){ - __in__do__before__break="reached"; - break; - __in__do__after__break="where am i"; -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__in__do__before__break !== "reached") { - $ERROR('#1: __in__do__before__break === "reached". Actual: __in__do__before__break ==='+ __in__do__before__break ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (typeof __in__do__after__break !== "undefined") { - $ERROR('#2: typeof __in__do__after__break === "undefined". Actual: typeof __in__do__after__break ==='+ typeof __in__do__after__break ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A4_T2.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A4_T2.js deleted file mode 100644 index 05f086b8a..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A4_T2.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.2_A4_T2; -* @section: 12.6.2; -* @assertion: "break" within a "while" Statement is allowed and performed as described in 12.8; -* @description: "break" and VariableDeclaration within a "while" Statement; -*/ - -do_out : while(1===1) { - if (__in__do__before__break) break; - var __in__do__before__break="black"; - do_in : while (1) { - var __in__do__IN__before__break="hole"; - break do_in; - var __in__do__IN__after__break="sun"; - } ; - var __in__do__after__break="won't you come"; -}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!(__in__do__before__break&&__in__do__IN__before__break&&!__in__do__IN__after__break&&__in__do__after__break)) { - $ERROR('#1: Break inside do-while is allowed as its described at standard'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A4_T3.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A4_T3.js deleted file mode 100644 index 14a480c97..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A4_T3.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.2_A4_T3; -* @section: 12.6.2, 12.2; -* @assertion: "break" within a "while" Statement is allowed and performed as described in 12.8; -* @description: "break" and VariableDeclaration within a "while" Statement; -*/ - -do_out : while(1===1) { - if (__in__do__before__break) break; - var __in__do__before__break="once"; - do_in : while (1) { - var __in__do__IN__before__break="in"; - break do_out; - var __in__do__IN__after__break="the"; - } ; - var __in__do__after__break="lifetime"; -} ; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!(__in__do__before__break&&__in__do__IN__before__break&&!__in__do__IN__after__break&&!__in__do__after__break)) { - $ERROR('#1: Break inside do-while is allowed as its described at standard'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A4_T4.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A4_T4.js deleted file mode 100644 index 22dc89e43..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A4_T4.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.2_A4_T4; -* @section: 12.6.2; -* @assertion: "break" within a "while" Statement is allowed and performed as described in 12.8; -* @description: "break" and VariableDeclaration within a "while" Statement; -*/ - -do_out : while(1===1) { - if(__in__do__before__break)break; - var __in__do__before__break="can't"; - do_in : while (1) { - var __in__do__IN__before__break="get"; - break; - var __in__do__IN__after__break="no"; - } ; - var __in__do__after__break="Satisfaction"; -} ; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!(__in__do__before__break&&__in__do__IN__before__break&&!__in__do__IN__after__break&&__in__do__after__break)) { - $ERROR('#1: Break inside do-while is allowed as its described at standard'); -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A4_T5.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A4_T5.js deleted file mode 100644 index f60561de7..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A4_T5.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.2_A4_T5; -* @section: 12.6.2; -* @assertion: "break" within a "while" Statement is allowed and performed as described in 12.8; -* @description: Using labeled "break" in order to continue a "while" loop; -*/ - -//CHECK#1 -var i=0; -woohoo:{ - while(true){ - i++; - if ( ! (i < 10) ) { - break woohoo; - $ERROR('#1.1: "break woohoo" must break loop'); - } - } - if (i!==10) $ERROR('#1.2: i===10. Actual: i==='+ i ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A5.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A5.js deleted file mode 100644 index 32584229f..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A5.js +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.2_A5; -* @section: 12.6.2; -* @assertion: While using "while" within an eval statement, source "break" is allowed and (normal, V, empty) is returned; -* @description: Using eval; -*/ - -__evaluated = eval("while(1) {__in__do__before__break=1; break; __in__do__after__break=2;}"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__in__do__before__break !== 1) { - $ERROR('#1: __in__do__before__break === 1. Actual: __in__do__before__break ==='+ __in__do__before__break ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (typeof __in__do__after__break !== "undefined") { - $ERROR('#2: typeof __in__do__after__break === "undefined". Actual: typeof __in__do__after__break ==='+ typeof __in__do__after__break ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__evaluated !== 1) { - $ERROR('#3: __evaluated === 1. Actual: __evaluated ==='+ __evaluated ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A6_T1.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A6_T1.js deleted file mode 100644 index 3745a65c3..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A6_T1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.2_A6_T1; -* @section: 12.6.2; -* @assertion: Expression in "while" IterationStatement is bracketed with braces; -* @description: Checking if execution of "while 1 break" fails; -* @negative; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -while 1 break; -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A6_T2.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A6_T2.js deleted file mode 100644 index edc09800a..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A6_T2.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.2_A6_T2; -* @section: 12.6.2; -* @assertion: Expression in "while" IterationStatement is bracketed with braces; -* @description: Checking if execution of "while 0 break" fails; -* @negative; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -while 0 break; -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A6_T3.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A6_T3.js deleted file mode 100644 index 291eceb00..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A6_T3.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.2_A6_T3; -* @section: 12.6.2; -* @assertion: Expression in "while" IterationStatement is bracketed with braces; -* @description: Checking if execution of "while true break" fails; -* @negative; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -while true break; -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A6_T4.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A6_T4.js deleted file mode 100644 index b283fa3a2..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A6_T4.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.2_A6_T4; -* @section: 12.6.2; -* @assertion: Expression in "while" IterationStatement is bracketed with braces; -* @description: Checking if execution of "while false break" fails; -* @negative; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -while false break; -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A6_T5.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A6_T5.js deleted file mode 100644 index 3e6609daf..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A6_T5.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.2_A6_T5; -* @section: 12.6.2; -* @assertion: Expression in "while" IterationStatement is bracketed with braces; -* @description: Checking if execution of "while '' break" fails; -* @negative; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -while '' break; -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A6_T6.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A6_T6.js deleted file mode 100644 index b3325633f..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A6_T6.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.2_A6_T6; -* @section: 12.6.2; -* @assertion: Expression in "while" IterationStatement is bracketed with braces; -* @description: Checking if execution of "while 'hood' break" fails; -* @negative; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -while 'hood' break; -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A7.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A7.js deleted file mode 100644 index 643d34538..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A7.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.2_A7; -* @section: 12.6.2; -* @assertion: The "while" Statement is evaluted according to 12.6.2 and returns (normal, V, empty); -* @description: using eval; -*/ - -var __condition=0 - -__evaluated = eval("while (__condition<5) eval(\"__condition++\");"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__condition !== 5) { - $ERROR('#1: The "while" statement is evaluated as described in the Standard'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__evaluated !== 4) { - $ERROR('#2: The "while" statement returns (normal, V, empty)'); -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A8.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A8.js deleted file mode 100644 index b87ddfce6..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A8.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.2_A8; -* @section: 12.6.2; -* @assertion: "continue" statement within a "while" Statement is allowed; -* @description: using eval; -*/ - -var __condition = 0, __odds=0; - -__evaluated = eval("while(__condition < 10) { __condition++; if (((''+__condition/2).split('.')).length>1) continue; __odds++;}"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__odds !== 5) { - $ERROR('#1: __odds === 5. Actual: __odds ==='+ __odds ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__evaluated !== 4) { - $ERROR('#2: __evaluated === 4. Actual: __evaluated ==='+ __evaluated ); -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A9.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A9.js deleted file mode 100644 index 17ea92f2e..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.2_The_while_statement/S12.6.2_A9.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.2_A9; -* @section: 12.6.2; -* @assertion: "while" Statement is evaluated without syntax checks; -* @description: Throwing system exception inside "while" loop; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try { - while(x!=1) { - var x = 1; - abaracadabara; - }; - $ERROR('#1: "abbracadabra" lead to throwing exception'); - -} catch (e) {} - -if (x !== 1) { - $ERROR('#1.1: while statement evaluates as is, without syntax checks'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A1.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A1.js deleted file mode 100644 index 2d75c69c1..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A1.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.3_A1; -* @section: 12.6.3; -* @assertion: The "for {;;}" for Statement with empty expressions is allowed and leads to performing an infinite loop; -* @description: Breaking an infinite loop by throwing exception; -*/ -var __in__for = 0; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try { - for (;;){ - //__in__for++; - if(++__in__for>100)throw 1; -} -} catch (e) { - if (e !== 1) { - $ERROR('#1: for {;;} is admitted and leads to infinite loop'); - } -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__in__for !== 101) { - $ERROR('#2: __in__for === 101. Actual: __in__for ==='+ __in__for ); -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A10.1.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A10.1.js deleted file mode 100644 index b49105566..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A10.1.js +++ /dev/null @@ -1,110 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.3_A10.1; -* @section: 12.6.3; -* @assertion: Nested "var-loops" nine blocks depth is evaluated properly; -* @description: Checking if executing nested "var-loops" nine blocks depth is evaluated properly; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try { - __in__deepest__loop=__in__deepest__loop; -} catch (e) { - $ERROR('#1: "__in__deepest__loop=__in__deepest__loop" does not lead to throwing exception'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -try { - index0=index0; -} catch (e) { - $ERROR('#2: "index0=index0" does not lead to throwing exception'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -try { - index1=index1; -} catch (e) { - $ERROR('#3: "index1=index1" does not lead to throwing exception'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -try { - index4=index4; -} catch (e) { - $ERROR('#4: "index4=index4" does not lead to throwing exception'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#5 -try { - index5=index5; -} catch (e) { - $ERROR('#4: "index5=index5" does not lead to throwing exception'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#6 -try { - index7=index7; -} catch (e) { - $ERROR('#6: "index7=index7" does not lead to throwing exception'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#7 -try { - index8=index8; -} catch (e) { - $ERROR('#7: "index8=index8" does not lead to throwing exception'); -} -// -////////////////////////////////////////////////////////////////////////////// - -__str=""; - -for( var index0=0; index0<=1; index0++) { - for(var index1=0; index1<=index0; index1++) { - for( index2=0; index2<=index1; index2++) { - for( index3=0; index3<=index2; index3++) { - for(var index4=0; index4<=index3; index4++) { - for(var index5=0; index5<=index4; index5++) { - for( index6=0; index6<=index5; index6++) { - for(var index7=0; index7<=index6; index7++) { - for(var index8=0; index8<=index1; index8++) { - var __in__deepest__loop; - __str+=""+index0+index1+index2+index3+index4+index5+index6+index7+index8+'\n'; - } - } - } - } - } - } - } - } -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__str!== "000000000\n100000000\n110000000\n110000001\n111000000\n111000001\n111100000\n111100001\n111110000\n111110001\n111111000\n111111001\n111111100\n111111101\n111111110\n111111111\n") { - $ERROR('#2: __str === "000000000\\n100000000\\n110000000\\n110000001\\n111000000\\n111000001\\n111100000\\n111100001\\n111110000\\n111110001\\n111111000\\n111111001\\n111111100\\n111111101\\n111111110\\n111111111\\n". Actual: __str ==='+ __str ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A10.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A10.js deleted file mode 100644 index 2548489ee..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A10.js +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.3_A10; -* @section: 12.6.3; -* @assertion: Nested "var-loops" nine blocks depth is evaluated properly; -* @description: Checking if executing nested "var-loops" nine blocks depth is evaluated properly; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK# -try { - __in__deepest__loop=__in__deepest__loop; -} catch (e) { - $ERROR('#1: "__in__deepest__loop=__in__deepest__loop" does not lead to throwing exception'); -} -// -////////////////////////////////////////////////////////////////////////////// - -__str=""; - -for( index0=0; index0<=1; index0++) { - for( index1=0; index1<=index0; index1++) { - for( index2=0; index2<=index1; index2++) { - for( index3=0; index3<=index2; index3++) { - for( index4=0; index4<=index3; index4++) { - for( index5=0; index5<=index4; index5++) { - for( index6=0; index6<=index5; index6++) { - for( index7=0; index7<=index6; index7++) { - for( index8=0; index8<=index1; index8++) { - var __in__deepest__loop; - __str+=""+index0+index1+index2+index3+index4+index5+index6+index7+index8+'\n'; - } - } - } - } - } - } - } - } -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__str!== "000000000\n100000000\n110000000\n110000001\n111000000\n111000001\n111100000\n111100001\n111110000\n111110001\n111111000\n111111001\n111111100\n111111101\n111111110\n111111111\n") { - $ERROR('#2: __str === "000000000\\n100000000\\n110000000\\n110000001\\n111000000\\n111000001\\n111100000\\n111100001\\n111110000\\n111110001\\n111111000\\n111111001\\n111111100\\n111111101\\n111111110\\n111111111\\n". Actual: __str ==='+ __str ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A11.1_T1.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A11.1_T1.js deleted file mode 100644 index ec4db06db..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A11.1_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.3_A11.1_T1; -* @section: 12.6.3; -* @assertion: If (Evaluate Statement).type is "continue" and (Evaluate Statement).target is in the current label set, iteration of labeled "var-loop" breaks; -* @description: Using "continue" in order to continue a loop; -*/ -__str="" - -for(var index=0; index<10; index+=1) { - if (index<5)continue; - __str+=index; -} - -if (__str!=="56789") { - $ERROR('#1: __str === "56789". Actual: __str ==='+ __str ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A11.1_T2.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A11.1_T2.js deleted file mode 100644 index b6654593c..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A11.1_T2.js +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.3_A11.1_T2; -* @section: 12.6.3; -* @assertion: If (Evaluate Statement).type is "continue" and (Evaluate Statement).target is in the current label set, iteration of labeled "var-loop" breaks; -* @description: Embedded loops; -*/ - -__str=""; - -outer : for(var index=0; index<4; index+=1) { - nested : for(var index_n=0; index_n<=index; index_n++) { - if (index*index_n == 6)continue nested; - __str+=""+index+index_n; - } -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__str !== "001011202122303133") { - $ERROR('#1: __str === "001011202122303133". Actual: __str ==='+ __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -__str=""; - -outer : for(var index=0; index<4; index+=1) { - nested : for(var index_n=0; index_n<=index; index_n++) { - if (index*index_n == 6)continue outer; - __str+=""+index+index_n; - } -} -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__str !== "0010112021223031") { - $ERROR('#2: __str === "0010112021223031". Actual: __str ==='+ __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -__str=""; - -outer : for(var index=0; index<4; index+=1) { - nested : for(var index_n=0; index_n<=index; index_n++) { - if (index*index_n == 6)continue ; - __str+=""+index+index_n; - } -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__str !== "001011202122303133") { - $ERROR('#3: __str === "001011202122303133". Actual: __str ==='+ __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - - - diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A11.1_T3.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A11.1_T3.js deleted file mode 100644 index 7b54ec8f8..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A11.1_T3.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.3_A11.1_T3; -* @section: 12.6.3; -* @assertion: If (Evaluate Statement).type is "continue" and (Evaluate Statement).target is in the current label set, iteration of labeled "var-loop" breaks; -* @description: Trying to continue non-existent label; -* @negative; -*/ - -__str=""; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -outer:for(var index=0;index<4;index+=1){ - nested:for(var index_n=0;index_n<=index;index_n++){ - if(index*index_n == 6)continue nonexist; - __str+=""+index+index_n; - } -} -// -////////////////////////////////////////////////////////////////////////////// - - - diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A11_T1.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A11_T1.js deleted file mode 100644 index dfad4ec90..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A11_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.3_A11_T1; -* @section: 12.6.3; -* @assertion: If (Evaluate Statement).type is "continue" and (Evaluate Statement).target is in the current label set, iteration of labeled loop breaks; -* @description: Simple test of continue loop with using "continue"; -*/ -__str="" - -for(index=0; index<10; index+=1) { - if (index<5)continue; - __str+=index; -} - -if (__str!=="56789") { - $ERROR('#1: __str === "56789". Actual: __str ==='+ __str ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A11_T2.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A11_T2.js deleted file mode 100644 index 5657f2ed8..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A11_T2.js +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.3_A11_T2; -* @section: 12.6.3; -* @assertion: If (Evaluate Statement).type is "continue" and (Evaluate Statement).target is in the current label set, iteration of labeled loop breaks; -* @description: Embedded loops; -*/ - -__str=""; - -outer : for(index=0; index<4; index+=1) { - nested : for(index_n=0; index_n<=index; index_n++) { - if (index*index_n == 6)continue nested; - __str+=""+index+index_n; - } -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__str !== "001011202122303133") { - $ERROR('#1: __str === "001011202122303133". Actual: __str ==='+ __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -__str=""; - -outer : for(index=0; index<4; index+=1) { - nested : for(index_n=0; index_n<=index; index_n++) { - if (index*index_n == 6)continue outer; - __str+=""+index+index_n; - } -} -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__str !== "0010112021223031") { - $ERROR('#2: __str === "0010112021223031". Actual: __str ==='+ __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -__str=""; - -outer : for(index=0; index<4; index+=1) { - nested : for(index_n=0; index_n<=index; index_n++) { - if (index*index_n == 6)continue ; - __str+=""+index+index_n; - } -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__str !== "001011202122303133") { - $ERROR('#3: __str === "001011202122303133". Actual: __str ==='+ __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - - - diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A11_T3.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A11_T3.js deleted file mode 100644 index 7bfec8231..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A11_T3.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.3_A11_T3; -* @section: 12.6.3; -* @assertion: If (Evaluate Statement).type is "continue" and (Evaluate Statement).target is in the current label set, iteration of labeled loop breaks; -* @description: Trying to continue non-existent label; -* @negative; -*/ - -__str=""; - -////////////////////////////////////////////////////////////////////////////// -//CHECK# -outer:for(index=0;index<4;index+=1){ - nested:for(index_n=0;index_n<=index;index_n++){ - if(index*index_n == 6)continue nonexist; - __str+=""+index+index_n; - } -} -// -////////////////////////////////////////////////////////////////////////////// - - - diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A12.1_T1.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A12.1_T1.js deleted file mode 100644 index b65e699a3..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A12.1_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.3_A12.1_T1; -* @section: 12.6.3; -* @assertion: If (Evaluate Statement).type is "break" and (Evaluate Statement).target is in the current label set, (normal, (Evaluate Statement), empty) is returned while evaluating a "var-loop"; -* @description: Breaking a loop with "break"; -*/ -__str="" - -for(var index=0; index<10; index+=1) { - if (index>5)break; - __str+=index; -} - -if (__str!=="012345") { - $ERROR('#1: __str === "012345". Actual: __str ==='+ __str ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A12.1_T2.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A12.1_T2.js deleted file mode 100644 index 861ad63d5..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A12.1_T2.js +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.3_A12.1_T2; -* @section: 12.6.3; -* @assertion: If (Evaluate Statement).type is "break" and (Evaluate Statement).target is in the current label set, (normal, (Evaluate Statement), empty) is returned while evaluating a "var-loop"; -* @description: Embedded loops; -*/ - -__str=""; - -outer : for(var index=0; index<4; index+=1) { - nested : for(var index_n=0; index_n<=index; index_n++) { - if (index*index_n >= 4)break nested; - __str+=""+index+index_n; - } -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__str !== "00101120213031") { - $ERROR('#1: __str === "00101120213031". Actual: __str ==='+ __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -__str=""; - -outer : for(var index=0; index<4; index+=1) { - nested : for(var index_n=0; index_n<=index; index_n++) { - if (index*index_n >= 4)break outer; - __str+=""+index+index_n; - } -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__str !== "0010112021") { - $ERROR('#2: __str === "0010112021". Actual: __str ==='+ __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -__str=""; - -outer : for(var index=0; index<4; index+=1) { - nested : for(var index_n=0; index_n<=index; index_n++) { - if (index*index_n >= 4)break ; - __str+=""+index+index_n; - } -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__str !== "00101120213031") { - $ERROR('#3: __str === "00101120213031". Actual: __str ==='+ __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - - - diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A12.1_T3.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A12.1_T3.js deleted file mode 100644 index ce159e5c6..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A12.1_T3.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.3_A12.1_T3; -* @section: 12.6.3; -* @assertion: If (Evaluate Statement).type is "break" and (Evaluate Statement).target is in the current label set, (normal, (Evaluate Statement), empty) is returned while evaluating a "var-loop"; -* @description: Trying to break non-existent label; -* @negative; -*/ - -__str=""; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -outer:for(var index=0;index<4;index+=1){ - nested:for(var index_n=0;index_n<=index;index_n++){ - if(index*index_n >= 4)break nonexist; - __str+=""+index+index_n; - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A12_T1.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A12_T1.js deleted file mode 100644 index c5933fe19..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A12_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.3_A12_T1; -* @section: 12.6.3; -* @assertion: If (Evaluate Statement).type is "break" and (Evaluate Statement).target is in the current label set, (normal, (Evaluate Statement), empty) is returned while evaluating a loop; -* @description: Breaking a loop with "break"; -*/ -__str="" - -for(index=0; index<10; index+=1) { - if (index>5)break; - __str+=index; -} - -if (__str!=="012345") { - $ERROR('#1:__str === "012345". Actual: __str ==='+__str ); -} diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A12_T2.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A12_T2.js deleted file mode 100644 index 38b79a552..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A12_T2.js +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.3_A12_T2; -* @section: 12.6.3; -* @assertion: If (Evaluate Statement).type is "break" and (Evaluate Statement).target is in the current label set, (normal, (Evaluate Statement), empty) is returned while evaluating a loop; -* @description: Embedded loops; -*/ - -__str=""; - -outer : for(index=0; index<4; index+=1) { - nested : for(index_n=0; index_n<=index; index_n++) { - if (index*index_n >= 4)break nested; - __str+=""+index+index_n; - } -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__str !== "00101120213031") { - $ERROR('#1: __str === "00101120213031". Actual: __str ==='+ __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -__str=""; - -outer : for(index=0; index<4; index+=1) { - nested : for(index_n=0; index_n<=index; index_n++) { - if (index*index_n >= 4)break outer; - __str+=""+index+index_n; - } -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__str !== "0010112021") { - $ERROR('#2: __str === "0010112021". Actual: __str ==='+ __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -__str=""; - -outer : for(index=0; index<4; index+=1) { - nested : for(index_n=0; index_n<=index; index_n++) { - if (index*index_n >= 4)break ; - __str+=""+index+index_n; - } -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__str !== "00101120213031") { - $ERROR('#3: __str === "00101120213031". Actual: __str ==='+ __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - - - diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A12_T3.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A12_T3.js deleted file mode 100644 index 6c5cb096b..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A12_T3.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.3_A12_T3; -* @section: 12.6.3; -* @assertion: If (Evaluate Statement).type is "break" and (Evaluate Statement).target is in the current label set, (normal, (Evaluate Statement), empty) is returned while evaluating a loop; -* @description: Trying to break non-existent label; -* @negative; -*/ - -__str=""; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -outer:for(index=0;index<4;index+=1){ - nested:for(index_n=0;index_n<=index;index_n++){ - if(index*index_n >= 4)break nonexist; - __str+=""+index+index_n; - } -}; -// -////////////////////////////////////////////////////////////////////////////// - - - diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A13.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A13.js deleted file mode 100644 index c1a29a61f..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A13.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.3_A13; -* @section: 12.6.3; -* @assertion: VariableDeclaration in "var VariableDeclarationListNoIn" of for IterationStatement is allowed; -* @description: Declaring variable in "for" ExpressionNoIn; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try { - index = index; -} catch (e) { - $ERROR('#1: VariableDeclaration in "var VariableDeclarationListNoIn" of for IterationStatement is allowed'); -} -// -////////////////////////////////////////////////////////////////////////////// - - -for(var index=0; index<6; index++) { - ; -} diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A14.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A14.js deleted file mode 100644 index e7175d1b6..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A14.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.3_A14; -* @section: 12.6.3; -* @assertion: The production IterationStatement: "for (var VariableDeclarationListNoIn; Expression; Expression) Statement"; -* @description: Using +,*,/, as the second Expression; -*/ - -//CHECK#1 -for(var i=0;i<10;i++){} -if (i!==10) $ERROR('#1: i === 10. Actual: i ==='+ i ); - -//CHECK#2 -var j=0; -for(var i=1;i<10;i*=2){ - j++; -} -if (i!==16) $ERROR('#2.1: i === 16. Actual: i ==='+ i ); -if (j!==4) $ERROR('#2.2: j === 4. Actual: j ==='+ j ); - -//CHECK#3 -var j=0; -for(var i=16;i>1;i=i/2){ - j++; -} -if (i!==1) $ERROR('#3.1: i === 1. Actual: i ==='+ i ); -if (j!==4) $ERROR('#3.2: j === 4. Actual: j ==='+ j ); - -//CHECK#4 -var j=0; -for(var i=10;i>1;i--){ - j++; -} -if (i!==1) $ERROR('#4.1: i === 1. Actual: i ==='+ i ); -if (j!==9) $ERROR('#4.2: j === 9. Actual: j ==='+ j ); - -//CHECK#5 -var j=0; -for(var i=2;i<10;i*=i){ - j++; -} -if (i!==16) $ERROR('#5.1: i === 16. Actual: i ==='+ i ); -if (j!==2) $ERROR('#5.2: j === 2. Actual: j ==='+ j ); diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A15.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A15.js deleted file mode 100644 index dc1f1334a..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A15.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.3_A15; -* @section: 12.6.3; -* @assertion: The production IterationStatement: "for (var VariableDeclarationListNoIn; Expression; Expression) Statement"; -* @description: Statement must be evaluated before second Expression is evaluated; -*/ - -//CHECK#1 -for(var i=0;i<10;i++){ - i*=2; - break; -} -if (i!==0) $ERROR('#1: i === 0. Actual: i ==='+ i ); - -//CHECK#2 -for(var i=0;i<10;i++){ - i*=2; - if (i===3) $ERROR('#2: i !== 3'); -} - diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A2.1.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A2.1.js deleted file mode 100644 index fe918cf41..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A2.1.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.3_A2.1; -* @section: 12.6.3; -* @assertion: While evaluating "for (ExpressionNoIn ; ; Expression) Statement", Statement is evaulated first; -* @description: Using "(function(){throw "NoInExpression"})()" as ExpressionNoIn; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try { - for((function(){throw "NoInExpression"})(); ;(function(){throw "SecondExpression"})()) { - throw "Statement"; - } - $ERROR('#1: (function(){throw "NoInExpression"})() lead to throwing exception'); -} catch (e) { - if (e !== "NoInExpression") { - $ERROR('#2: When for (ExpressionNoIn ; ; Expression) Statement is evaluated NoInExpression evaluates first'); - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A2.2.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A2.2.js deleted file mode 100644 index cb86f7c6e..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A2.2.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.3_A2.2; -* @section: 12.6.3; -* @assertion: While evaluating "for (ExpressionNoIn;;) Statement", Statement is evaulated first; -* @description: Using "(function(){throw "NoInExpression"})()" as ExpressionNoIn; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try { - for((function(){throw "NoInExpression"})();;) { - throw "Statement"; - } - $ERROR('#1: (function(){throw "NoInExpression"})() lead to throwing exception'); -} catch (e) { - if (e !== "NoInExpression") { - $ERROR('#1: When for (ExpressionNoIn ; ; ) Statement is evaluated NoInExpression evaluates first'); - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A2.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A2.js deleted file mode 100644 index 4a11b60e9..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A2.js +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.3_A2; -* @section: 12.6.3; -* @assertion: While evaluating "for (ExpressionNoIn; Expression; Expression) Statement", ExpressionNoIn is evaulated first; -* @description: Using "(function(){throw "NoInExpression"})()" as ExpressionNoIn; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try { - for((function(){throw "NoInExpression";})(); (function(){throw "FirstExpression";})(); (function(){throw "SecondExpression";})()) { - var in_for = "reached"; - } - $ERROR('#1: (function(){throw "NoInExpression";})() lead to throwing exception'); -} catch (e) { - if (e !== "NoInExpression") { - $ERROR('#1: When for (ExpressionNoIn ; Expression ; Expression) Statement is evaluated ExpressionNoIn evaluates first'); - } -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (in_for !== undefined) { - $ERROR('#2: in_for === undefined. Actual: in_for ==='+ in_for ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A3.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A3.js deleted file mode 100644 index eca306838..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A3.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.3_A3; -* @section: 12.6.3; -* @assertion: While evaluating "for (ExpressionNoIn; FirstExpression; SecondExpression) Statement", ExpressionNoIn is evaulated first, FirstExpressoin is evaluated second; -* @description: Using "(function(){throw "FirstExpression"})()" as FirstExpression; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try { - for((function(){__in__NotInExpression__ = "checked";__in__NotInExpression__2 = "passed";})(); (function(){throw "FirstExpression"})(); (function(){throw "SecondExpression"})()) { - __in__for="reached"; - } - $ERROR('#1: (function(){throw "SecondExpression"} lead to throwing exception'); -} catch (e) { - if (e !== "FirstExpression") { - $ERROR('#1: When for (ExpressionNoIn ; FirstExpression ; SecondExpression) Statement is evaluated first evaluates ExpressionNoIn then FirstExpression'); - } -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if ((__in__NotInExpression__ !== "checked")&(__in__NotInExpression__2!=="passed")) { - $ERROR('#2: (__in__NotInExpression__ === "checked")&(__in__NotInExpression__2==="passed")'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (typeof __in__for !== "undefined") { - $ERROR('#3: typeof __in__for === "undefined". Actual: typeof __in__for ==='+ typeof __in__for ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A4.1.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A4.1.js deleted file mode 100644 index d58a2c5c0..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A4.1.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.3_A4.1; -* @section: 12.6.3; -* @assertion: "in"-expression is not allowed as a ExpressionNoIn in "for (ExpressionNoIn; FirstExpression; SecondExpression) Statement" IterationStatement; -* @description: Checking if execution of "for (var a in arr;1;){}" fails; -* @negative; -*/ - -arr = [1,2,3,4,5]; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -for (var a in arr;1;){ - break; -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A4_T1.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A4_T1.js deleted file mode 100644 index 5edc7abc4..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A4_T1.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.3_A4_T1; -* @section: 12.6.3; -* @assertion: "in"-expression is not allowed as a ExpressionNoIn in "for (ExpressionNoIn; FirstExpression; SecondExpression) Statement" IterationStatement; -* @description: Checking if execution of "for (a in arr;1;){}" fails; -* @negative; -*/ - -arr = [1,2,3,4,5]; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -for (a in arr;1;){ - break; -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A4_T2.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A4_T2.js deleted file mode 100644 index 9efa95ab3..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A4_T2.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.3_A4_T2; -* @section: 12.6.3; -* @assertion: "in"-expression is not allowed as a ExpressionNoIn in "for (ExpressionNoIn; FirstExpression; SecondExpression) Statement" IterationStatement; -* @description: Checking if execution of "for (1 in arr;1;){}" fails; -* @negative; -*/ - -arr = [1,2,3,4,5]; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -for(1 in arr;1;) { - break; -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A5.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A5.js deleted file mode 100644 index b83bcd6ee..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A5.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.3_A5; -* @section: 12.6.3; -* @assertion: "in"-expression wrapped into "eval" statement is allowed as a ExpressionNoIn in "for (ExpressionNoIn; FirstExpression; SecondExpression) Statement" IterationStatement; -* @description: Using eval "for(eval("i in arr");1;)"; -*/ - -arr = [1,2,3,4,5]; -i = 1; -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try { - for(eval("i in arr");1;) {break;}; -} catch (e) { - $ERROR('#1.1: for(eval("i in arr");1;) {break;}; does not lead to throwing exception'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -try { - for(eval("var i = 1 in arr");1;) {break;}; -} catch (e) { - $ERROR('#2.1: for(eval("var i = 1 in arr");1;) {break;}; does not lead to throwing exception'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -try { - for(eval("1 in arr");1;) {break;}; -} catch (e) { - $ERROR('#3.1: for(eval("1 in arr");1;) {break;}; does not lead to throwing exception'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A6.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A6.js deleted file mode 100644 index b3f3b8140..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A6.js +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.3_A6; -* @section: 12.6.3; -* @assertion: While evaluating "for ( ; ; Expression) Statement", Statement is evaluated first and then Expression is evaluated; -* @description: Using "(function(){throw "SecondExpression";})()" as an Expression; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try { - for(;;(function(){throw "SecondExpression";})()){ - var __in__for = "reached"; - } - $ERROR('#1: (function(){throw "SecondExpression"}() lead to throwing exception'); -} catch (e) { - if (e !== "SecondExpression") { - $ERROR('#1: When for ( ; ; Expression) Statement is evaluated Statement evaluates first then Expression evaluates'); - } -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__in__for !== "reached") { - $ERROR('#2: __in__for === "reached". Actual: __in__for ==='+ __in__for ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A7.1_T1.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A7.1_T1.js deleted file mode 100644 index 6e16d3751..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A7.1_T1.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.3_A7.1_T1; -* @section: 12.6.3; -* @assertion: Only three expressions and two semicolons in "for(with var)" braces are allowed. -* Appearing of for (ExpressionNoIn_opt ; Expression_opt ; Expression_opt; Expression_opt; Expression_opt;) statement leads to SyntaxError; -* @description: Checking if execution of "for(var index=0; index<10; index++; index--)" fails; -* @negative; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -for(var index=0; index<10; index++; index--); -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A7.1_T2.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A7.1_T2.js deleted file mode 100644 index 99e250cda..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A7.1_T2.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.3_A7.1_T2; -* @section: 12.6.3; -* @assertion: Only three expressions and two semicolons in "for(with var)" braces are allowed. -* Appearing of for (ExpressionNoIn_opt ; Expression_opt ; Expression_opt; Expression_opt; Expression_opt;) statement leads to SyntaxError; -* @description: Checking if execution of "for(var index=0; index<10; index+=4; index++; index--)" fails ; -* @negative; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -for(var index=0; index<10; index+=4; index++; index--) ; -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A7_T1.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A7_T1.js deleted file mode 100644 index 10773f81c..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A7_T1.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.3_A7_T1; -* @section: 12.6.3; -* @assertion: Only three expressions and two semicolons in "for" braces are allowed. -* Appearing of for (ExpressionNoIn_opt ; Expression_opt ; Expression_opt; Expression_opt; Expression_opt;) statement leads to SyntaxError; -* @description: Checking if execution of "for(index=0; index<10; index++; index--)" fails; -* @negative; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -for(index=0; index<10; index++; index--) ; -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A7_T2.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A7_T2.js deleted file mode 100644 index fe0909232..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A7_T2.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.3_A7_T2; -* @section: 12.6.3; -* @assertion: Only three expressions and two semicolons in "for" braces are allowed. -* Appearing of for (ExpressionNoIn_opt ; Expression_opt ; Expression_opt; Expression_opt; Expression_opt;) statement leads to SyntaxError; -* @description: Checking if execution of "for(index=0; index<10; index+=4; index++; index--)" fails ; -* @negative; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -for(index=0; index<10; index+=4; index++; index--) ; -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A8.1_T1.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A8.1_T1.js deleted file mode 100644 index 9f41bbabc..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A8.1_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.3_A8.1_T1; -* @section: 12.6.3; -* @assertion: Blocks within "for(with var)" braces are not allowed; -* @description: Checking if execution of "for(var index=0; index<100; {index++; index*2;}) { arr.add(""+index);}" fails; -* @negative; -*/ - -var arr = []; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -for(var index=0; index<100; {index++; index*2;}) { arr.add(""+index);}; -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A8.1_T2.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A8.1_T2.js deleted file mode 100644 index 0a0b3bb75..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A8.1_T2.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.3_A8.1_T2; -* @section: 12.6.3; -* @assertion: Blocks within "for(with var)" braces are not allowed; -* @description: Checking if execution of "for(var index=0; {index++;index<100;}; index*2;) { arr.add(""+index);}" fails; -* @negative; -*/ - -var arr = []; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -for(var index=0; {index++;index<100;}; index*2;) { arr.add(""+index);}; -// -////////////////////////////////////////////////////////////////////////////// - - - diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A8.1_T3.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A8.1_T3.js deleted file mode 100644 index 1d69bbf1a..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A8.1_T3.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.3_A8.1_T3; -* @section: 12.6.3; -* @assertion: Blocks within "for(with var)" braces are not allowed; -* @description: Checking if execution of "for({var index=0; index+=1;} index++<=10; index*2;) { arr.add(""+index);}" fails; -* @negative; -*/ - -var arr = []; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -for({var index=0; index+=1;} index++<=10; index*2;) { arr.add(""+index);}; -// -////////////////////////////////////////////////////////////////////////////// - - - diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A8_T1.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A8_T1.js deleted file mode 100644 index cf797bc5f..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A8_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.3_A8_T1; -* @section: 12.6.3; -* @assertion: Blocks within "for" braces are not allowed; -* @description: Checking if execution of "for(index=0; index<100; {index++; index*2;}) { arr.add(""+index);}" fails; -* @negative; -*/ - -var arr = []; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -for(index=0; index<100; {index++; index*2;}) { arr.add(""+index);}; -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A8_T2.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A8_T2.js deleted file mode 100644 index 48ae1831f..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A8_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.3_A8_T2; -* @section: 12.6.3; -* @assertion: Blocks within "for" braces are not allowed; -* @description: Checking if execution of "for(index=0; {index++;index<100;}; index*2;) { arr.add(""+index);}" fails; -* @negative; -*/ - -var arr = []; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -for(index=0; {index++;index<100;}; index*2;) { arr.add(""+index);}; -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A8_T3.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A8_T3.js deleted file mode 100644 index 0009790e9..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A8_T3.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.3_A8_T3; -* @section: 12.6.3; -* @assertion: Blocks within "for" braces are not allowed; -* @description: Checking if execution of "for({index=0; index+=1;} index++<=10; index*2;) { arr.add(""+index);}" fails; -* @negative; -*/ - -var arr = []; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -for({index=0; index+=1;} index++<=10; index*2;) { arr.add(""+index);}; -// -////////////////////////////////////////////////////////////////////////////// - - - diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A9.1.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A9.1.js deleted file mode 100644 index 2a9598766..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A9.1.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.3_A9.1; -* @section: 12.6.3; -* @assertion: The result of evaluating "for( ExpNoIn;Exp;Exp)" loop is returning (normal, evalValue, empty); -* @description: Using eval; -*/ - -supreme=5; - -////////////////////////////////////////////////////////////////////////////// -//CHECK# -try { - var __evaluated = eval("for(count=0;;) {if (count===supreme)break;else count++; }"); - if (__evaluated !== 4) { - $ERROR('#1: __evaluated === 4. Actual: __evaluated ==='+ __evaluated ); - } -} catch (e) { - $ERROR('#1: var __evaluated = eval("for(count=0;;) {if (count===supreme)break;else count++; }"); does not lead to throwing exception'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A9.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A9.js deleted file mode 100644 index 6bc4b9149..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.3_The_for_Statement/S12.6.3_A9.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.3_A9; -* @section: 12.6.3; -* @assertion: The result of evaluating "for(var ExpNoIn;Exp;Exp)" loop is returning (normal, evalValue, empty); -* @description: Using eval; -*/ - -supreme=5; - -////////////////////////////////////////////////////////////////////////////// -//CHECK# -try { - var __evaluated = eval("for(var count=0;;) {if (count===supreme)break;else count++; }"); - if (__evaluated !== 4) { - $ERROR('#1: __evaluated === 4. Actual: __evaluated ==='+ __evaluated ); - } -} catch (e) { - $ERROR('#1: var __evaluated = eval("for(var count=0;;) {if (count===supreme)break;else count++; }"); does not lead to throwing exception'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.4_The_for_in_Statement/S12.6.4_A1.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.4_The_for_in_Statement/S12.6.4_A1.js deleted file mode 100644 index 3d4213e94..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.4_The_for_in_Statement/S12.6.4_A1.js +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.4_A1; -* @section: 12.6.4; -* @assertion: "for(key in undefined)" Statement is allowed; -* @description: Checking if execution of "for(key in undefined)" passes; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try { - for(__key in undefined){ - var key=__key; - }; -} catch (e) { - $ERROR('#1: "for(key in undefined){}" does not lead to throwing exception'); -} -// -////////////////////////////////////////////////////////////////////////////// - - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (key!==undefined) { - $ERROR('#2: key === undefined. Actual: key === '+key); -} -// -////////////////////////////////////////////////////////////////////////////// - - diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.4_The_for_in_Statement/S12.6.4_A13_T1.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.4_The_for_in_Statement/S12.6.4_A13_T1.js deleted file mode 100644 index 93dbedc7f..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.4_The_for_in_Statement/S12.6.4_A13_T1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.4_A13_T1; -* @section: 12.6.4; -* @assertion: FunctionDeclaration within a "for-in" Statement is not allowed; -* @description: Declaring function within a "for-in" Statement; -* @negative; -*/ - -for(x in this){ - function __func(){}; -}; diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.4_The_for_in_Statement/S12.6.4_A13_T2.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.4_The_for_in_Statement/S12.6.4_A13_T2.js deleted file mode 100644 index c18f21a82..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.4_The_for_in_Statement/S12.6.4_A13_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.4_A13_T2; -* @section: 12.6.4; -* @assertion: FunctionDeclaration within a "for-in" Statement is not allowed; -* @description: Declaring function within a "for-in" Statement that is within a function call; -* @negative; -*/ - -(function(){ - -for(x in this){ - function __func(){}; -}; - -})(); diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.4_The_for_in_Statement/S12.6.4_A13_T3.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.4_The_for_in_Statement/S12.6.4_A13_T3.js deleted file mode 100644 index 16a0cdcba..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.4_The_for_in_Statement/S12.6.4_A13_T3.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.4_A13_T3; -* @section: 12.6.4; -* @assertion: FunctionDeclaration within a "for-in" Statement is not allowed; -* @description: Declaring function within a "for-in" Statement that is within function declaration; -* @negative; -*/ - -function(){ - -for(x in this){ - function __func(){}; -}; - -}; diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.4_The_for_in_Statement/S12.6.4_A14_T1.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.4_The_for_in_Statement/S12.6.4_A14_T1.js deleted file mode 100644 index 8d6cbba07..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.4_The_for_in_Statement/S12.6.4_A14_T1.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.4_A14_T1; -* @section: 12.6.4; -* @assertion: FunctionExpession within a "for-in" Expression is allowed; -* @description: Using "function __func(){return 0;}" as Expession; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK# -for(x in function __func(){return 0;}){ - if (x=="prototype") - var __reached = 1; -}; -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__reached !== 1) { - $ERROR('#2: function expession inside of for-in expression is allowed'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.4_The_for_in_Statement/S12.6.4_A14_T2.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.4_The_for_in_Statement/S12.6.4_A14_T2.js deleted file mode 100644 index c8770a059..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.4_The_for_in_Statement/S12.6.4_A14_T2.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.4_A14_T2; -* @section: 12.6.4; -* @assertion: FunctionExpession within a "for-in" Expression is allowed; -* @description: Using "function __func(){return {a:1};}()" as Expession; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK# -for(x in function __func(){return {a:1};}()){ - var __reached = x; -}; -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__reached !== "a") { - $ERROR('#2: function expession inside of for-in expression allowed'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.4_The_for_in_Statement/S12.6.4_A15.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.4_The_for_in_Statement/S12.6.4_A15.js deleted file mode 100644 index b0fb4431b..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.4_The_for_in_Statement/S12.6.4_A15.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.4_A15; -* @section: 12.6.4; -* @assertion: Block within a "for-in" Expression is not allowed; -* @description: Using block within "for-in" Expression; -* @negative; -*/ -var __arr=[1,2,3]; - -////////////////////////////////////////////////////////////////////////////// -//CHECK# -for(x in {__arr}){ - break ; -}; -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.4_The_for_in_Statement/S12.6.4_A2.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.4_The_for_in_Statement/S12.6.4_A2.js deleted file mode 100644 index 13981efe8..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.4_The_for_in_Statement/S12.6.4_A2.js +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.4_A2; -* @section: 12.6.4; -* @assertion: "for(key in null)" Expression is allowed; -* @description: Checking if execution of "for(key in null)" passes; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK# -try { - for(__key in null){ - var key=__key; - }; -} catch (e) { - $ERROR('#1: "for(__key in null){}" does not lead to throwing exception'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (key!==undefined) { - $ERROR('#2: key === undefined. Actual: key ==='+key); -} -// -////////////////////////////////////////////////////////////////////////////// - - - diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.4_The_for_in_Statement/S12.6.4_A3.1.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.4_The_for_in_Statement/S12.6.4_A3.1.js deleted file mode 100644 index 01b65dadd..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.4_The_for_in_Statement/S12.6.4_A3.1.js +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.4_A3.1; -* @section: 12.6.4; -* @assertion: The production IterationStatement: "for (var VariableDeclarationNoIn in Expression) Statement"; -* @description: Using an array as an Expression is appropriate. Here Expression is an array of numbers; -*/ - -__str=""; - -__evaluated = eval("for(var ind in (arr=[2,1,4,3]))__str+=arr[ind]"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__evaluated !== __str) { - $ERROR('#1: __evaluated === __str. Actual: __evaluated ==='+ __evaluated ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (!( (__str.indexOf("2")!==-1)&&(__str.indexOf("1")!==-1)&&(__str.indexOf("4")!==-1)&&(__str.indexOf("3")!==-1) )) { - $ERROR('#2: (__str.indexOf("2")!==-1)&&(__str.indexOf("1")!==-1)&&(__str.indexOf("4")!==-1)&&(__str.indexOf("3")!==-1)'); -} -// -////////////////////////////////////////////////////////////////////////////// - - - diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.4_The_for_in_Statement/S12.6.4_A3.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.4_The_for_in_Statement/S12.6.4_A3.js deleted file mode 100644 index 391ec6b57..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.4_The_for_in_Statement/S12.6.4_A3.js +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.4_A3; -* @section: 12.6.4; -* @assertion: The production IterationStatement: "for (var VariableDeclarationNoIn in Expression) Statement"; -* @description: Using an array as an Expression is appropriate. Here Expression is an array of numbers. Eval is used; -*/ - -__str=""; - -__evaluated = eval("for(ind in (arr=[2,1,4,3]))__str+=arr[ind]"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__evaluated !== __str) { - $ERROR('#1: __evaluated === __str. Actual: __evaluated ==='+ __evaluated ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (!( (__str.indexOf("2")!==-1)&&(__str.indexOf("1")!==-1)&&(__str.indexOf("4")!==-1)&&(__str.indexOf("3")!==-1) )) { - $ERROR('#2: (__str.indexOf("2")!==-1)&&(__str.indexOf("1")!==-1)&&(__str.indexOf("4")!==-1)&&(__str.indexOf("3")!==-1)'); -} -// -////////////////////////////////////////////////////////////////////////////// - - - diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.4_The_for_in_Statement/S12.6.4_A4.1.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.4_The_for_in_Statement/S12.6.4_A4.1.js deleted file mode 100644 index 8466cf1e7..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.4_The_for_in_Statement/S12.6.4_A4.1.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.4_A4.1; -* @section: 12.6.4; -* @assertion: The production IterationStatement: "for (var VariableDeclarationNoIn in Expression) Statement"; -* @description: Using Object as an Expression is appropriate. Eval is used; -*/ - -__str=""; - -__evaluated = eval("for(var ind in (hash={2:'b',1:'a',4:'d',3:'c'}))__str+=hash[ind]"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if ( !( (__evaluated.indexOf("a")!==-1)& (__evaluated.indexOf("b")!==-1)& (__evaluated.indexOf("c")!==-1)&(__evaluated.indexOf("d")!==-1) ) ) { - $ERROR('#1: (__evaluated.indexOf("a")!==-1)& (__evaluated.indexOf("b")!==-1)& (__evaluated.indexOf("c")!==-1)&(__evaluated.indexOf("d")!==-1)'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__str !== __evaluated) { - $ERROR('#2: __str === __evaluated. Actual: __str ==='+ __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - - - - diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.4_The_for_in_Statement/S12.6.4_A4.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.4_The_for_in_Statement/S12.6.4_A4.js deleted file mode 100644 index 06b7ce12b..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.4_The_for_in_Statement/S12.6.4_A4.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.4_A4; -* @section: 12.6.4; -* @assertion: The production IterationStatement: "for (var VariableDeclarationNoIn in Expression) Statement"; -* @description: Using Object as an Expression is appropriate. Eval is used; -*/ - -__str=""; - -__evaluated = eval("for(ind in (hash={2:'b',1:'a',4:'d',3:'c'}))__str+=hash[ind]"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if ( !( (__evaluated.indexOf("a")!==-1)& (__evaluated.indexOf("b")!==-1)& (__evaluated.indexOf("c")!==-1)&(__evaluated.indexOf("d")!==-1) ) ) { - $ERROR('#1: (__evaluated.indexOf("a")!==-1)& (__evaluated.indexOf("b")!==-1)& (__evaluated.indexOf("c")!==-1)&(__evaluated.indexOf("d")!==-1)'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__str !== __evaluated) { - $ERROR('#2: __str === __evaluated. Actual: __str ==='+ __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - - - - diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.4_The_for_in_Statement/S12.6.4_A5.1.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.4_The_for_in_Statement/S12.6.4_A5.1.js deleted file mode 100644 index 8820bd92a..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.4_The_for_in_Statement/S12.6.4_A5.1.js +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.4_A5.1; -* @section: 12.6.4; -* @assertion: The production IterationStatement: "for (var VariableDeclarationNoIn in Expression) Statement"; -* @description: Using hierarchical Object as an Expression is appropriate. The depth is two; -*/ - - - -__hash__map={a:{aa:1,ab:2,ac:3,ad:4},b:{ba:1,bb:2,bc:3,bd:4},c:{ca:1,cb:2,cc:3,cd:4},d:{da:1,db:2,dc:3,dd:4}}; - -__arr = ""; - -for(var __key in __hash__map){ - for (var __ind in __hash__map[__key]){ - __arr+=("" + __ind + __hash__map[__key][__ind]); - } -} - -if(!( -(__arr.indexOf("aa1")!==-1)& -(__arr.indexOf("ab2")!==-1)& -(__arr.indexOf("ac3")!==-1)& -(__arr.indexOf("ad4")!==-1)& -(__arr.indexOf("ba1")!==-1)& -(__arr.indexOf("bb2")!==-1)& -(__arr.indexOf("bc3")!==-1)& -(__arr.indexOf("bd4")!==-1)& -(__arr.indexOf("ca1")!==-1)& -(__arr.indexOf("cb2")!==-1)& -(__arr.indexOf("cc3")!==-1)& -(__arr.indexOf("cd4")!==-1)& -(__arr.indexOf("da1")!==-1)& -(__arr.indexOf("db2")!==-1)& -(__arr.indexOf("dc3")!==-1)& -(__arr.indexOf("dd4")!==-1) -)) $ERROR('#1: The nested for-in Statement applied to hierarchial object works properly as described in the Standard'); - - - diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.4_The_for_in_Statement/S12.6.4_A5.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.4_The_for_in_Statement/S12.6.4_A5.js deleted file mode 100644 index fc7483caa..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.4_The_for_in_Statement/S12.6.4_A5.js +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.4_A5; -* @section: 12.6.4; -* @assertion: The production IterationStatement: "for (var VariableDeclarationNoIn in Expression) Statement"; -* @description: Using hierarchical Object as an Expression is appropriate. The depth is two; -*/ - - - -__hash__map={a:{aa:1,ab:2,ac:3,ad:4},b:{ba:1,bb:2,bc:3,bd:4},c:{ca:1,cb:2,cc:3,cd:4},d:{da:1,db:2,dc:3,dd:4}}; - -__arr = ""; - -for(__key in __hash__map){ - for (__ind in __hash__map[__key]){ - __arr+=("" + __ind + __hash__map[__key][__ind]); - } -} - -if(!( -(__arr.indexOf("aa1")!==-1)& -(__arr.indexOf("ab2")!==-1)& -(__arr.indexOf("ac3")!==-1)& -(__arr.indexOf("ad4")!==-1)& -(__arr.indexOf("ba1")!==-1)& -(__arr.indexOf("bb2")!==-1)& -(__arr.indexOf("bc3")!==-1)& -(__arr.indexOf("bd4")!==-1)& -(__arr.indexOf("ca1")!==-1)& -(__arr.indexOf("cb2")!==-1)& -(__arr.indexOf("cc3")!==-1)& -(__arr.indexOf("cd4")!==-1)& -(__arr.indexOf("da1")!==-1)& -(__arr.indexOf("db2")!==-1)& -(__arr.indexOf("dc3")!==-1)& -(__arr.indexOf("dd4")!==-1) -)) $ERROR('#1: The nested for-in Statement applied to hierarchial object works properly as described in the Standard'); - - - diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.4_The_for_in_Statement/S12.6.4_A6.1.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.4_The_for_in_Statement/S12.6.4_A6.1.js deleted file mode 100644 index 66ba609da..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.4_The_for_in_Statement/S12.6.4_A6.1.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.4_A6.1; -* @section: 12.6.4; -* @assertion: The production IterationStatement: "for (var VariableDeclarationNoIn in Expression) Statement"; -* @description: Using Object with custom prototype as an Expression is appropriate. The prototype is "{feat:2,hint:"protohint"}"; -*/ - -function FACTORY(){this.prop=1;this.hint="hinted"}; - -FACTORY.prototype = {feat:2,hint:"protohint"}; - -var __instance = new FACTORY; - -__accum=""; - -for (var key in __instance){ - __accum+=(key + __instance[key]); -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!((__accum.indexOf("prop1")!==-1)&&(__accum.indexOf("feat2")!==-1)&&(__accum.indexOf("hinthinted")!==-1))) { - $ERROR('#1: (__accum.indexOf("prop1")!==-1)&&(__accum.indexOf("feat2")!==-1)&&(__accum.indexOf("hinthinted")!==-1)'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__accum.indexOf("hintprotohint")!==-1) { - $ERROR('#2: __accum.indexOf("hintprotohint") === -1. Actual: __accum.indexOf("hintprotohint") ==='+ __accum.indexOf("hintprotohint") ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.4_The_for_in_Statement/S12.6.4_A6.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.4_The_for_in_Statement/S12.6.4_A6.js deleted file mode 100644 index cc5017fcd..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.4_The_for_in_Statement/S12.6.4_A6.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.4_A6; -* @section: 12.6.4; -* @assertion: The production IterationStatement: "for (var VariableDeclarationNoIn in Expression) Statement"; -* @description: Using Object with custom prototype as an Expression is appropriate. The prototype is "{feat:2,hint:"protohint"}"; -*/ - -function FACTORY(){this.prop=1;this.hint="hinted"}; - -FACTORY.prototype = {feat:2,hint:"protohint"}; - -var __instance = new FACTORY; - -__accum=""; - -for (key in __instance){ - __accum+=(key + __instance[key]); -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!((__accum.indexOf("prop1")!==-1)&&(__accum.indexOf("feat2")!==-1)&&(__accum.indexOf("hinthinted")!==-1))) { - $ERROR('#1: (__accum.indexOf("prop1")!==-1)&&(__accum.indexOf("feat2")!==-1)&&(__accum.indexOf("hinthinted")!==-1)'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__accum.indexOf("hintprotohint")!==-1) { - $ERROR('#2: __accum.indexOf("hintprotohint") === -1. Actual: __accum.indexOf("hintprotohint") ==='+ __accum.indexOf("hintprotohint") ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.4_The_for_in_Statement/S12.6.4_A7_T1.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.4_The_for_in_Statement/S12.6.4_A7_T1.js deleted file mode 100644 index 85ab69761..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.4_The_for_in_Statement/S12.6.4_A7_T1.js +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.4_A7_T1; -* @section: 12.6.4; -* @assertion: Properties of the object being enumerated may be deleted during enumeration; -* @description: Checking "for (LeftHandSideExpression in Expression) Statement" case; -*/ - -__obj={aa:1,ba:2,ca:3}; - -__accum=""; - -for (__key in __obj){ - - erasator_T_1000(__obj,"b"); - - __accum+=(__key+__obj[__key]); - -} - - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!((__accum.indexOf("aa1")!==-1)&&(__accum.indexOf("ca3")!==-1))) { - $ERROR('#1: (__accum.indexOf("aa1")!==-1)&&(__accum.indexOf("ca3")!==-1)'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__accum.indexOf("ba2")!==-1) { - $ERROR('#2: __accum.indexOf("ba2") === -1. Actual: __accum.indexOf("ba2") ==='+ __accum.indexOf("ba2") ); -} -// -////////////////////////////////////////////////////////////////////////////// - - -// erasator is the hash map terminator -function erasator_T_1000(hash_map, charactr){ - for (key in hash_map){ - if (key.indexOf(charactr)===0) { - delete hash_map[key]; - }; - } -} diff --git a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.4_The_for_in_Statement/S12.6.4_A7_T2.js b/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.4_The_for_in_Statement/S12.6.4_A7_T2.js deleted file mode 100644 index 7a961149d..000000000 --- a/tests/ES3/Conformance/12_Statement/12.6_Iteration_Statements/12.6.4_The_for_in_Statement/S12.6.4_A7_T2.js +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.4_A7_T2; -* @section: 12.6.4; -* @assertion: Properties of the object being enumerated may be deleted during enumeration; -* @description: Checking "for (var VariableDeclarationNoIn in Expression) Statement" case; -*/ - -__obj={aa:1,ba:2,ca:3}; - -__accum=""; - -for (var __key in __obj){ - - erasator_T_1000(__obj,"b"); - - __accum+=(__key+__obj[__key]); - -} - - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!((__accum.indexOf("aa1")!==-1)&&(__accum.indexOf("ca3")!==-1))) { - $ERROR('#1: (__accum.indexOf("aa1")!==-1)&&(__accum.indexOf("ca3")!==-1)'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__accum.indexOf("ba2")!==-1) { - $ERROR('#2: __accum.indexOf("ba2") === -1. Actual: __accum.indexOf("ba2") ==='+ __accum.indexOf("ba2") ); -} -// -////////////////////////////////////////////////////////////////////////////// - - -// erasator is the hash map terminator -function erasator_T_1000(hash_map, charactr){ - for (key in hash_map){ - if (key.indexOf(charactr)===0) { - delete hash_map[key]; - }; - } -} diff --git a/tests/ES3/Conformance/12_Statement/12.7_The_continue_Statement/S12.7_A1_T1.js b/tests/ES3/Conformance/12_Statement/12.7_The_continue_Statement/S12.7_A1_T1.js deleted file mode 100644 index 31ffe8f01..000000000 --- a/tests/ES3/Conformance/12_Statement/12.7_The_continue_Statement/S12.7_A1_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.7_A1_T1; -* @section: 12.7; -* @assertion: Appearing of continue without an IterationStatement leads to syntax error; -* @description: Checking if execution of single "continue" without any IterationStatement fails; -* @negative; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -var x=1; -continue; -var y=2; -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.7_The_continue_Statement/S12.7_A1_T2.js b/tests/ES3/Conformance/12_Statement/12.7_The_continue_Statement/S12.7_A1_T2.js deleted file mode 100644 index 2524f112f..000000000 --- a/tests/ES3/Conformance/12_Statement/12.7_The_continue_Statement/S12.7_A1_T2.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.7_A1_T2; -* @section: 12.7; -* @assertion: Appearing of continue without an IterationStatement leads to syntax error; -* @description: Checking if single "continue" with Label but without any IterationStatement fails; -* @negative; -*/ - -LABEL : x=3.14; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -var x=1; -continue LABEL; -var y=2; -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.7_The_continue_Statement/S12.7_A1_T3.js b/tests/ES3/Conformance/12_Statement/12.7_The_continue_Statement/S12.7_A1_T3.js deleted file mode 100644 index 3ccd9902a..000000000 --- a/tests/ES3/Conformance/12_Statement/12.7_The_continue_Statement/S12.7_A1_T3.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.7_A1_T3; -* @section: 12.7; -* @assertion: Appearing of continue without an IterationStatement leads to syntax error; -* @description: Checking if laballed "continue" with no IterationStatement, placed into a block, fails; -* @negative; -*/ - -LABEL : x=3.14; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -{ - var x=1; - continue LABEL; - var y=2; -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.7_The_continue_Statement/S12.7_A1_T4.js b/tests/ES3/Conformance/12_Statement/12.7_The_continue_Statement/S12.7_A1_T4.js deleted file mode 100644 index fbde0367c..000000000 --- a/tests/ES3/Conformance/12_Statement/12.7_The_continue_Statement/S12.7_A1_T4.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.7_A1_T4; -* @section: 12.7; -* @assertion: Appearing of continue without an IterationStatement leads to syntax error; -* @description: Checking if execution of "continue" with no IterationStatement, placed into a block, fails; -* @negative; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -{ - var x=1; - continue; - var y=2; -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/12_Statement/12.7_The_continue_Statement/S12.7_A2.js b/tests/ES3/Conformance/12_Statement/12.7_The_continue_Statement/S12.7_A2.js deleted file mode 100644 index 2621bec70..000000000 --- a/tests/ES3/Conformance/12_Statement/12.7_The_continue_Statement/S12.7_A2.js +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.7_A2; -* @section: 12.7; -* @assertion: Since LineTerminator between "continue" and Identifier is not allowed, "continue" is evaluated without label; -* @description: Checking by using eval, inserting LineTerminator between continue and Identifier; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try{ - eval("FOR1 : for(var i=1;i<2;i++){FOR1NESTED : for(var j=1;j<2;j++) { continue\u000AFOR1; } while(0);}"); - if (j!==2) { - $ERROR('#1: Since LineTerminator(U-000A) between continue and Identifier not allowed continue evaluates without label'); - } -} catch(e){ - $ERROR('#1.1: eval("FOR1 : for(var i=1;i<2;i++){FOR1NESTED : for(var j=1;j<2;j++) { continue\\u000AFOR1; } while(0);}") does not lead to throwing exception'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -try{ - eval("FOR2 : for(var i=1;i<2;i++){FOR2NESTED : for(var j=1;j<2;j++) { continue\u000DFOR2; } while(0);}"); - if (j!==2) { - $ERROR('#2: Since LineTerminator(U-000D) between continue and Identifier not allowed continue evaluates without label'); - } -} catch(e){ - $ERROR('#2.1: eval("FOR2 : for(var i=1;i<2;i++){FOR2NESTED : for(var j=1;j<2;j++) { continue\\u000DFOR2; } while(0);}") does not lead to throwing exception'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -try{ - eval("FOR3 : for(var i=1;i<2;i++){FOR3NESTED : for(var j=1;j<2;j++) { continue\u2028FOR3; } while(0);}"); - if (j!==2) { - $ERROR('#3: Since LineTerminator(U-2028) between continue and Identifier not allowed continue evaluates without label'); - } -} catch(e){ - $ERROR('#3.1: eval("FOR3 : for(var i=1;i<2;i++){FOR3NESTED : for(var j=1;j<2;j++) { continue\\u2028FOR3; } while(0);}") does not lead to throwing exception'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -try{ - eval("FOR4 : for(var i=1;i<2;i++){FOR4NESTED : for(var j=1;j<2;j++) { continue\u2029FOR4; } while(0);}"); - if (j!==2) { - $ERROR('#4: Since LineTerminator(U-2029) between continue and Identifier not allowed continue evaluates without label'); - } -} catch(e){ - $ERROR('#4.1: eval("FOR4 : for(var i=1;i<2;i++){FOR4NESTED : for(var j=1;j<2;j++) { continue\\u2029FOR4; } while(0);}"); does not lead to throwing exception'); -} -// -////////////////////////////////////////////////////////////////////////////// - - diff --git a/tests/ES3/Conformance/12_Statement/12.7_The_continue_Statement/S12.7_A3.js b/tests/ES3/Conformance/12_Statement/12.7_The_continue_Statement/S12.7_A3.js deleted file mode 100644 index b6c2d45de..000000000 --- a/tests/ES3/Conformance/12_Statement/12.7_The_continue_Statement/S12.7_A3.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.7_A3; -* @section: 12.7; -* @assertion: When "continue Identifier" is evaluated (continue, empty, empty) is returned; -* @description: Simple using continue without Identifier and labeled loop; -*/ - -LABEL_OUT : var x=0, y=0; - -LABEL_DO_LOOP : do { - LABEL_IN : x=2; - continue ; - LABEL_IN_2 : var y=2; - - function IN_DO_FUNC(){} -} while(0); - -LABEL_ANOTHER_LOOP : do { - ; -} while(0); - -function OUT_FUNC(){} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if ((x!==2)&&(y!==0)) { - $ERROR('#1: x === 2 and y === 0. Actual: x ==='+x+' and y ==='+ y ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.7_The_continue_Statement/S12.7_A4_T1.js b/tests/ES3/Conformance/12_Statement/12.7_The_continue_Statement/S12.7_A4_T1.js deleted file mode 100644 index 388b578e5..000000000 --- a/tests/ES3/Conformance/12_Statement/12.7_The_continue_Statement/S12.7_A4_T1.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.7_A4_T1; -* @section: 12.7; -* @assertion: When "continue Identifier" is evaluated (continue, empty, Identifier) is returned; -* @description: Simple using continue Identifier construction; -*/ - -LABEL_OUT : var x=0, y=0; - -LABEL_DO_LOOP : do { - LABEL_IN : x++; - if(x===10)break; - continue LABEL_DO_LOOP; - LABEL_IN_2 : y++; - - function IN_DO_FUNC(){} -} while(0); - -LABEL_ANOTHER_LOOP : do { - ; -} while(0); - -function OUT_FUNC(){} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if ((x!==1)&&(y!==0)) { - $ERROR('#1: x===1 and y === 0. Actual: x==='+x+' and y ==='+y); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.7_The_continue_Statement/S12.7_A4_T2.js b/tests/ES3/Conformance/12_Statement/12.7_The_continue_Statement/S12.7_A4_T2.js deleted file mode 100644 index 7b5e3c2e0..000000000 --- a/tests/ES3/Conformance/12_Statement/12.7_The_continue_Statement/S12.7_A4_T2.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.7_A4_T2; -* @section: 12.7; -* @assertion: When "continue Identifier" is evaluated (continue, empty, Identifier) is returned; -* @description: Using embedded and labeled loops, continue to nested loop; -*/ - -LABEL_OUT : var x=0, y=0, xx=0, yy=0; - -LABEL_DO_LOOP : do { - LABEL_IN : x++; - if(x===10)break; - LABEL_NESTED_LOOP : do { - LABEL_IN_NESTED : xx++; - if(xx===10)break; - continue LABEL_NESTED_LOOP; - LABEL_IN_NESTED_2 : yy++; - } while (0); - - LABEL_IN_2 : y++; - - function IN_DO_FUNC(){} -} while(0); - -LABEL_ANOTHER_LOOP : do { - ; -} while(0); - -function OUT_FUNC(){} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if ((x!==1)&&(y!==1)&&(xx!==1)&(yy!==0)) { - $ERROR('#1: (x===1) and (y===1) and (xx===1) and (yy===0). Actual: x==='+x+' and y==='+y+' and xx==='+xx+' and yy==='+yy ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.7_The_continue_Statement/S12.7_A4_T3.js b/tests/ES3/Conformance/12_Statement/12.7_The_continue_Statement/S12.7_A4_T3.js deleted file mode 100644 index b10ddd079..000000000 --- a/tests/ES3/Conformance/12_Statement/12.7_The_continue_Statement/S12.7_A4_T3.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.7_A4_T3; -* @section: 12.7; -* @assertion: When "continue Identifier" is evaluated (continue, empty, Identifier) is returned; -* @description: Using embedded and labeled loops, continue to outer loop; -*/ - -LABEL_OUT : var x=0, y=0, xx=0, yy=0; - -LABEL_DO_LOOP : do { - LABEL_IN : x++; - if(x===10)break; - LABEL_NESTED_LOOP : do { - LABEL_IN_NESTED : xx++; - if(xx===10)break; - continue LABEL_DO_LOOP; - LABEL_IN_NESTED_2 : yy++; - } while (0); - - LABEL_IN_2 : y++; - - function IN_DO_FUNC(){} -} while(0); - -LABEL_ANOTHER_LOOP : do { - ; -} while(0); - -function OUT_FUNC(){} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if ((x!==1)&&(y!==0)&&(xx!==1)&(yy!==0)) { - $ERROR('#1: (x===1) and (y===0) and (xx===1) and (yy===0). Actual: x==='+x+' and y==='+y+' and xx==='+xx+' and yy==='+yy ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.7_The_continue_Statement/S12.7_A5_T1.js b/tests/ES3/Conformance/12_Statement/12.7_The_continue_Statement/S12.7_A5_T1.js deleted file mode 100644 index 45788a280..000000000 --- a/tests/ES3/Conformance/12_Statement/12.7_The_continue_Statement/S12.7_A5_T1.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.7_A5_T1; -* @section: 12.7; -* @assertion: When "continue Identifier" is evaluated Identifier must be label in the label set of an enclosing (but not crossing function boundaries) IterationStatement; -* @description: Trying to continue another labeled loop; -* @negative; -*/ - -LABEL_OUT : var x=0, y=0; -LABEL_DO_LOOP : do { - LABEL_IN : x++; - if(x===10)break; - continue LABEL_ANOTHER_LOOP; - LABEL_IN_2 : y++; - function IN_DO_FUNC(){} -} while(0); - -LABEL_ANOTHER_LOOP : do { - ; -} while(0); - -function OUT_FUNC(){} diff --git a/tests/ES3/Conformance/12_Statement/12.7_The_continue_Statement/S12.7_A5_T2.js b/tests/ES3/Conformance/12_Statement/12.7_The_continue_Statement/S12.7_A5_T2.js deleted file mode 100644 index a9e5225af..000000000 --- a/tests/ES3/Conformance/12_Statement/12.7_The_continue_Statement/S12.7_A5_T2.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.7_A5_T2; -* @section: 12.7; -* @assertion: When "continue Identifier" is evaluated Identifier must be label in the label set of an enclosing (but not crossing function boundaries) IterationStatement; -* @description: Identifier is a function name; -* @negative; -*/ - -LABEL_OUT : var x=0, y=0; -LABEL_DO_LOOP : do { - LABEL_IN : x++; - if(x===10)break; - continue IN_DO_FUNC; - LABEL_IN_2 : y++; - function IN_DO_FUNC(){} -} while(0); - -LABEL_ANOTHER_LOOP : do { - ; -} while(0); - -function OUT_FUNC(){}; diff --git a/tests/ES3/Conformance/12_Statement/12.7_The_continue_Statement/S12.7_A5_T3.js b/tests/ES3/Conformance/12_Statement/12.7_The_continue_Statement/S12.7_A5_T3.js deleted file mode 100644 index a9052bd83..000000000 --- a/tests/ES3/Conformance/12_Statement/12.7_The_continue_Statement/S12.7_A5_T3.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.7_A5_T3; -* @section: 12.7; -* @assertion: When "continue Identifier" is evaluated Identifier must be label in the label set of an enclosing (but not crossing function boundaries) IterationStatement; -* @description: Identifier is within loop label; -* @negative; -*/ - -LABEL_OUT : var x=0, y=0; - -LABEL_DO_LOOP : do { - LABEL_IN : x++; - if(x===10)break; - continue LABEL_IN; - LABEL_IN_2 : y++; - function IN_DO_FUNC(){} -} while(0); - -LABEL_ANOTHER_LOOP : do { - ; -} while(0); - -function OUT_FUNC(){} diff --git a/tests/ES3/Conformance/12_Statement/12.7_The_continue_Statement/S12.7_A6.js b/tests/ES3/Conformance/12_Statement/12.7_The_continue_Statement/S12.7_A6.js deleted file mode 100644 index 572315869..000000000 --- a/tests/ES3/Conformance/12_Statement/12.7_The_continue_Statement/S12.7_A6.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.7_A6; -* @section: 12.7; -* @assertion: Appearing of "continue" within a function call that is within an IterationStatement yields SyntaxError; -* @description: Using labaled "continue Identifier" within a function body; -* @negative; -*/ - -var x=0,y=0; - -LABEL1 : do { - x++; - (function(){continue LABEL1;})(); - y++; -} while(0); diff --git a/tests/ES3/Conformance/12_Statement/12.7_The_continue_Statement/S12.7_A7.js b/tests/ES3/Conformance/12_Statement/12.7_The_continue_Statement/S12.7_A7.js deleted file mode 100644 index ee74e11b7..000000000 --- a/tests/ES3/Conformance/12_Statement/12.7_The_continue_Statement/S12.7_A7.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.7_A7; -* @section: 12.7; -* @assertion: Appearing of continue within eval statement that is within an IterationStatement yields SyntaxError; -* @description: Using eval "eval("continue LABEL1")"; -*/ - -var x=0,y=0; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try{ - LABEL1 : do { - x++; - eval("continue LABEL1"); - y++; - } while(0); - $ERROR('#1: eval("continue LABEL1") does not lead to throwing exception'); -} catch(e){ - if(!(e instanceof SyntaxError)){ - $ERROR("1.1: Appearing of continue within eval statement inside of IterationStatement yields SyntaxError"); - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.7_The_continue_Statement/S12.7_A8_T1.js b/tests/ES3/Conformance/12_Statement/12.7_The_continue_Statement/S12.7_A8_T1.js deleted file mode 100644 index 4432553b4..000000000 --- a/tests/ES3/Conformance/12_Statement/12.7_The_continue_Statement/S12.7_A8_T1.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.7_A8_T1; -* @section: 12.7; -* @assertion: Appearing of "continue" within a "try/catch" Block yields SyntaxError; -* @description: Checking if execution of "continue Identifier" within catch Block fails; -* @negative; -*/ - -var x=0,y=0; - -try{ - LABEL1 : do { - x++; - throw "gonna leave it"; - y++; - } while(0); - $ERROR('#1: throw "gonna leave it" lead to throwing exception'); -} catch(e){ - continue LABEL2; - LABEL2 : do { - x++; - y++; - } while(0); -}; diff --git a/tests/ES3/Conformance/12_Statement/12.7_The_continue_Statement/S12.7_A8_T2.js b/tests/ES3/Conformance/12_Statement/12.7_The_continue_Statement/S12.7_A8_T2.js deleted file mode 100644 index 9fc2d1c07..000000000 --- a/tests/ES3/Conformance/12_Statement/12.7_The_continue_Statement/S12.7_A8_T2.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.7_A8_T2; -* @section: 12.7; -* @assertion: Appearing of "continue" within a "try/catch" Block yields SyntaxError; -* @description: Checking if execution of "continue" within catch Block fails; -* @negative; -*/ - -var x=0,y=0; - -try{ - LABEL1 : do { - x++; - throw "gonna leave it"; - y++; - } while(0); - $ERROR('#1: throw "gonna leave it" lead to throwing exception'); -} catch(e){ - continue; - LABEL2 : do { - x++; - y++; - } while(0); -}; diff --git a/tests/ES3/Conformance/12_Statement/12.7_The_continue_Statement/S12.7_A9_T1.js b/tests/ES3/Conformance/12_Statement/12.7_The_continue_Statement/S12.7_A9_T1.js deleted file mode 100644 index 857196ab1..000000000 --- a/tests/ES3/Conformance/12_Statement/12.7_The_continue_Statement/S12.7_A9_T1.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.7_A9_T1; -* @section: 12.7; -* @assertion: Continue inside of try-catch nested in a loop is allowed; -* @description: Using "continue Identifier" within catch Block that is within a loop; -*/ - -var x=0,y=0; - -(function(){ -FOR : for(;;){ - try{ - x++; - if(x===10)return; - throw 1; - } catch(e){ - continue FOR; - } -} -})(); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (x!==10) { - $ERROR('#1: Continue inside of try-catch nested in loop is allowed'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.7_The_continue_Statement/S12.7_A9_T2.js b/tests/ES3/Conformance/12_Statement/12.7_The_continue_Statement/S12.7_A9_T2.js deleted file mode 100644 index 34dfdf6fd..000000000 --- a/tests/ES3/Conformance/12_Statement/12.7_The_continue_Statement/S12.7_A9_T2.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.7_A9_T2; -* @section: 12.7; -* @assertion: Continue inside of try-catch nested in a loop is allowed; -* @description: Using "continue" within catch Block that is within a loop; -*/ - -var x=0,y=0; - -(function(){ -FOR : for(;;){ - try{ - x++; - if(x===10)return; - throw 1; - } catch(e){ - continue; - } -} -})(); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (x!==10) { - $ERROR('#1: Continue inside of try-catch nested in loop is allowed'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.8_The_break_Statement/S12.8_A1_T1.js b/tests/ES3/Conformance/12_Statement/12.8_The_break_Statement/S12.8_A1_T1.js deleted file mode 100644 index 2c062fe30..000000000 --- a/tests/ES3/Conformance/12_Statement/12.8_The_break_Statement/S12.8_A1_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.8_A1_T1; -* @section: 12.8; -* @assertion: Appearing of break without an IterationStatement leads to syntax error; -* @description: Checking if break statement with no loop fails; -* @negative; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -var x=1; -break; -var y=2; -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.8_The_break_Statement/S12.8_A1_T2.js b/tests/ES3/Conformance/12_Statement/12.8_The_break_Statement/S12.8_A1_T2.js deleted file mode 100644 index 1736e724e..000000000 --- a/tests/ES3/Conformance/12_Statement/12.8_The_break_Statement/S12.8_A1_T2.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.8_A1_T2; -* @section: 12.8; -* @assertion: Appearing of break without an IterationStatement leads to syntax error; -* @description: Checking if break Identifier with no loop fails; -* @negative; -*/ - -LABEL : x=3.14; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -var x=1; -break LABEL; -var y=2; -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.8_The_break_Statement/S12.8_A1_T3.js b/tests/ES3/Conformance/12_Statement/12.8_The_break_Statement/S12.8_A1_T3.js deleted file mode 100644 index 1e9c923bf..000000000 --- a/tests/ES3/Conformance/12_Statement/12.8_The_break_Statement/S12.8_A1_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.8_A1_T3; -* @section: 12.8; -* @assertion: Appearing of break without an IterationStatement leads to syntax error; -* @description: Checking if break statement with no loop, placed into a block, fails; -* @negative; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -{ - var x=1; - break; - var y=2; -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.8_The_break_Statement/S12.8_A1_T4.js b/tests/ES3/Conformance/12_Statement/12.8_The_break_Statement/S12.8_A1_T4.js deleted file mode 100644 index ed8a5fae3..000000000 --- a/tests/ES3/Conformance/12_Statement/12.8_The_break_Statement/S12.8_A1_T4.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.8_A1_T4; -* @section: 12.8; -* @assertion: Appearing of break without an IterationStatement leads to syntax error; -* @description: Checking if break Identifier with no loop, placed into a block, fails; -* @negative; -*/ - -LABEL : x=3.14; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -{ - var x=1; - break LABEL; - var y=2; -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.8_The_break_Statement/S12.8_A2.js b/tests/ES3/Conformance/12_Statement/12.8_The_break_Statement/S12.8_A2.js deleted file mode 100644 index 87e21e8a2..000000000 --- a/tests/ES3/Conformance/12_Statement/12.8_The_break_Statement/S12.8_A2.js +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.8_A2; -* @section: 12.8; -* @assertion: Since LineTerminator between "break" and Identifier is not allowed, "break" is evaluated without label; -* @description: Checking by using eval, inserting LineTerminator between break and Identifier; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try{ - eval("FOR1 : for(var i=1;i<2;i++){ LABEL1 : do {var x =1;break\u000AFOR1;var y=2;} while(0);}"); - if (i!==2) { - $ERROR('#1: Since LineTerminator(U-000A) between break and Identifier not allowed break evaluates without label'); - } -} catch(e){ - $ERROR('#1.1: eval("FOR1 : for(var i=1;i<2;i++){ LABEL1 : do {var x =1;break\\u000AFOR1;var y=2;} while(0);}") does not lead to throwing exception'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -try{ - eval("FOR2 : for(var i=1;i<2;i++){ LABEL2 : do {var x =1;break\u000DFOR2;var y=2;} while(0);}"); - if (i!==2) { - $ERROR('#2: Since LineTerminator(U-000D) between break and Identifier not allowed break evaluates without label'); - } -} catch(e){ - $ERROR('#2.1: eval("FOR2 : for(var i=1;i<2;i++){ LABEL2 : do {var x =1;break\\u000DFOR2;var y=2;} while(0);}") does not lead to throwing exception'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -try{ - eval("FOR3 : for(var i=1;i<2;i++){ LABEL3 : do {var x =1;break\u2028FOR3;var y=2;} while(0);}"); - if (i!==2) { - $ERROR('#3: Since LineTerminator(U-2028) between break and Identifier not allowed break evaluates without label'); - } -} catch(e){ - $ERROR('#3.1: eval("FOR3 : for(var i=1;i<2;i++){ LABEL3 : do {var x =1;break\\u2028FOR3;var y=2;} while(0);}") does not lead to throwing exception'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -try{ - eval("FOR4 : for(var i=1;i<2;i++){ LABEL4 : do {var x =1;break\u2029FOR4;var y=2;} while(0);}"); - if (i!==2) { - $ERROR('#4: Since LineTerminator(U-2029) between break and Identifier not allowed break evaluates without label'); - } -} catch(e){ - $ERROR('#4.1: eval("FOR4 : for(var i=1;i<2;i++){ LABEL4 : do {var x =1;break\\u2029FOR4;var y=2;} while(0);}") does not lead to throwing exception'); -} -// -////////////////////////////////////////////////////////////////////////////// - - diff --git a/tests/ES3/Conformance/12_Statement/12.8_The_break_Statement/S12.8_A3.js b/tests/ES3/Conformance/12_Statement/12.8_The_break_Statement/S12.8_A3.js deleted file mode 100644 index 0e05eddbe..000000000 --- a/tests/ES3/Conformance/12_Statement/12.8_The_break_Statement/S12.8_A3.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.8_A3; -* @section: 12.8; -* @assertion: When "break" is evaluated, (break, empty, empty) is returned; -* @description: Using "break" without Identifier within labeled loop; -*/ - -LABEL_OUT : var x=0, y=0; - -LABEL_DO_LOOP : do { - LABEL_IN : x=2; - break ; - LABEL_IN_2 : var y=2; - - function IN_DO_FUNC(){} -} while(0); - -LABEL_ANOTHER_LOOP : do { - ; -} while(0); - -function OUT_FUNC(){} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if ((x!==2)&&(y!==0)) { - $ERROR('#1: x === 2 and y === 0. Actual: x ==='+x+' and y ==='+y); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.8_The_break_Statement/S12.8_A4_T1.js b/tests/ES3/Conformance/12_Statement/12.8_The_break_Statement/S12.8_A4_T1.js deleted file mode 100644 index b5af5dad2..000000000 --- a/tests/ES3/Conformance/12_Statement/12.8_The_break_Statement/S12.8_A4_T1.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.8_A4_T1; -* @section: 12.8; -* @assertion: When "break Identifier" is evaluated, (break, empty, Identifier) is returned; -* @description: Using "break Identifier" within labaeled loop; -*/ - -LABEL_OUT : var x=0, y=0; -(function(){ -LABEL_DO_LOOP : do { - LABEL_IN : x++; - if(x===10)return; - break LABEL_DO_LOOP; - LABEL_IN_2 : y++; - - function IN_DO_FUNC(){} -} while(0); - -LABEL_ANOTHER_LOOP : do { - ; -} while(0); - -function OUT_FUNC(){} -})(); -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if ((x!==1)&&(y!==0)) { - $ERROR('#1: x === 1 and y === 0. Actual: x === '+x+' and y ==='+ y ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.8_The_break_Statement/S12.8_A4_T2.js b/tests/ES3/Conformance/12_Statement/12.8_The_break_Statement/S12.8_A4_T2.js deleted file mode 100644 index f44f1588a..000000000 --- a/tests/ES3/Conformance/12_Statement/12.8_The_break_Statement/S12.8_A4_T2.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.8_A4_T2; -* @section: 12.8; -* @assertion: When "break Identifier" is evaluated, (break, empty, Identifier) is returned; -* @description: Using embedded and labeled loops, breaking to nested loop; -*/ - -LABEL_OUT : var x=0, y=0, xx=0, yy=0; -(function(){ -LABEL_DO_LOOP : do { - LABEL_IN : x++; - if(x===10)return; - LABEL_NESTED_LOOP : do { - LABEL_IN_NESTED : xx++; - if(xx===10)return; - break LABEL_NESTED_LOOP; - LABEL_IN_NESTED_2 : yy++; - } while (0); - - LABEL_IN_2 : y++; - - function IN_DO_FUNC(){} -} while(0); - -LABEL_ANOTHER_LOOP : do { - ; -} while(0); - -function OUT_FUNC(){} -})(); -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if ((x!==1)&&(y!==1)&&(xx!==1)&(yy!==0)) { - $ERROR('#1: x === 1 and y === 1 and xx === 1 and yy === 0. Actual: x==='+x+' and y==='+y+' and xx==='+xx+' and yy==='+yy ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.8_The_break_Statement/S12.8_A4_T3.js b/tests/ES3/Conformance/12_Statement/12.8_The_break_Statement/S12.8_A4_T3.js deleted file mode 100644 index 1f4d77daa..000000000 --- a/tests/ES3/Conformance/12_Statement/12.8_The_break_Statement/S12.8_A4_T3.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.8_A4_T3; -* @section: 12.8; -* @assertion: When "break Identifier" is evaluated, (break, empty, Identifier) is returned; -* @description: Using embedded and labeled loops, breaking to outer loop; -*/ - -LABEL_OUT : var x=0, y=0, xx=0, yy=0; -(function(){ -LABEL_DO_LOOP : do { - LABEL_IN : x++; - if(x===10)return; - LABEL_NESTED_LOOP : do { - LABEL_IN_NESTED : xx++; - if(xx===10)return; - break LABEL_DO_LOOP; - LABEL_IN_NESTED_2 : yy++; - } while (0); - - LABEL_IN_2 : y++; - - function IN_DO_FUNC(){} -} while(0); - -LABEL_ANOTHER_LOOP : do { - ; -} while(0); - -function OUT_FUNC(){} -})(); -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if ((x!==1)&&(y!==0)&&(xx!==1)&(yy!==0)) { - $ERROR('#1: x === 1 and y === 0 and xx === 1 and yy === 0. Actual: x==='+x+' and y==='+y+' and xx==='+xx+' and yy==='+yy ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.8_The_break_Statement/S12.8_A5_T1.js b/tests/ES3/Conformance/12_Statement/12.8_The_break_Statement/S12.8_A5_T1.js deleted file mode 100644 index 4fe11a40f..000000000 --- a/tests/ES3/Conformance/12_Statement/12.8_The_break_Statement/S12.8_A5_T1.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.8_A5_T1; -* @section: 12.8; -* @assertion: Identifier must be label in the label set of an enclosing (but not crossing function boundaries) IterationStatement; -* @description: Checking if breaking another labeled loop fails; -* @negative; -*/ - -(function(){ - LABEL_OUT : var x=0, y=0; - LABEL_DO_LOOP : do { - LABEL_IN : x++; - if(x===10) - return; - break LABEL_ANOTHER_LOOP; - LABEL_IN_2 : y++; - function IN_DO_FUNC(){} - } while(0); - - LABEL_ANOTHER_LOOP : do { - ; - } while(0); - - function OUT_FUNC(){} -})(); diff --git a/tests/ES3/Conformance/12_Statement/12.8_The_break_Statement/S12.8_A5_T2.js b/tests/ES3/Conformance/12_Statement/12.8_The_break_Statement/S12.8_A5_T2.js deleted file mode 100644 index 0f59c86cc..000000000 --- a/tests/ES3/Conformance/12_Statement/12.8_The_break_Statement/S12.8_A5_T2.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.8_A5_T2; -* @section: 12.8; -* @assertion: Identifier must be label in the label set of an enclosing (but not crossing function boundaries) IterationStatement; -* @description: Checking if using function name as an Identifier appears to be invalid; -* @negative; -*/ - -(function(){ - LABEL_OUT : var x=0, y=0; - LABEL_DO_LOOP : do { - LABEL_IN : x++; - if(x===10) - return; - break IN_DO_FUNC; - LABEL_IN_2 : y++; - function IN_DO_FUNC(){} - } while(0); - - LABEL_ANOTHER_LOOP : do { - ; - } while(0); - - function OUT_FUNC(){} -})(); diff --git a/tests/ES3/Conformance/12_Statement/12.8_The_break_Statement/S12.8_A5_T3.js b/tests/ES3/Conformance/12_Statement/12.8_The_break_Statement/S12.8_A5_T3.js deleted file mode 100644 index d3babcfeb..000000000 --- a/tests/ES3/Conformance/12_Statement/12.8_The_break_Statement/S12.8_A5_T3.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.8_A5_T3; -* @section: 12.8; -* @assertion: Identifier must be label in the label set of an enclosing (but not crossing function boundaries) IterationStatement; -* @description: Checking if using internal loop label as an Identifier appears to be invalid; -* @negative; -*/ - -(function(){ - LABEL_OUT : var x=0, y=0; - LABEL_DO_LOOP : do { - LABEL_IN : x++; - if(x===10) - return; - break LABEL_IN; - LABEL_IN_2 : y++; - - function IN_DO_FUNC(){} - - } while(0); - - LABEL_ANOTHER_LOOP : do { - ; - } while(0); - - function OUT_FUNC(){} - -})(); diff --git a/tests/ES3/Conformance/12_Statement/12.8_The_break_Statement/S12.8_A6.js b/tests/ES3/Conformance/12_Statement/12.8_The_break_Statement/S12.8_A6.js deleted file mode 100644 index 8dbc7acb2..000000000 --- a/tests/ES3/Conformance/12_Statement/12.8_The_break_Statement/S12.8_A6.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.8_A6; -* @section: 12.8; -* @assertion: Appearing of "break" within a function call that is nested in a IterationStatement yields SyntaxError; -* @description: Checking if using "break Identifier" within a function body appears to be invalid; -* @negative; -*/ - -var x=0,y=0; - -LABEL1 : do { - x++; - (function(){break LABEL1;})(); - y++; -} while(0); diff --git a/tests/ES3/Conformance/12_Statement/12.8_The_break_Statement/S12.8_A7.js b/tests/ES3/Conformance/12_Statement/12.8_The_break_Statement/S12.8_A7.js deleted file mode 100644 index b900e7664..000000000 --- a/tests/ES3/Conformance/12_Statement/12.8_The_break_Statement/S12.8_A7.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.8_A7; -* @section: 12.8; -* @assertion: Appearing of "break" within eval statement that is nested in an IterationStatement yields SyntaxError; -* @description: Using eval "eval("break LABEL1")"; -*/ - -var x=0,y=0; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try{ - LABEL1 : do { - x++; - eval("break LABEL1"); - y++; - } while(0); - $ERROR('#1: eval("break LABEL1") does not lead to throwing exception'); -} catch(e){ - if(!(e instanceof SyntaxError)){ - $ERROR("1.1: Appearing of break within eval statement inside of IterationStatement yields SyntaxError"); - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.8_The_break_Statement/S12.8_A8_T1.js b/tests/ES3/Conformance/12_Statement/12.8_The_break_Statement/S12.8_A8_T1.js deleted file mode 100644 index 7280ee6aa..000000000 --- a/tests/ES3/Conformance/12_Statement/12.8_The_break_Statement/S12.8_A8_T1.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.8_A8_T1; -* @section: 12.8; -* @assertion: Appearing of "break" within "try/catch" Block yields SyntaxError; -* @description: Checking if using "break Identifier" from within catch Block appears to be invalid; -* @negative; -*/ - -var x=0,y=0; - -try{ - LABEL1 : do { - x++; - throw "gonna leave it"; - y++; - } while(0); - $ERROR('#1: throw "gonna leave it" lead to throwing exception'); -} catch(e){ - break LABEL2; - LABEL2 : do { - x++; - y++; - } while(0); -} - diff --git a/tests/ES3/Conformance/12_Statement/12.8_The_break_Statement/S12.8_A8_T2.js b/tests/ES3/Conformance/12_Statement/12.8_The_break_Statement/S12.8_A8_T2.js deleted file mode 100644 index 13811bc2d..000000000 --- a/tests/ES3/Conformance/12_Statement/12.8_The_break_Statement/S12.8_A8_T2.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.8_A8_T2; -* @section: 12.8; -* @assertion: Appearing of "break" within "try/catch" Block yields SyntaxError; -* @description: Checking if using "break Identifier" from within catch Block appears to be invalid; -* @negative; -*/ - -var x=0,y=0; - -try{ - LABEL1 : do { - x++; - throw "gonna leave it"; - y++; - } while(0); - $ERROR('#1: throw "gonna leave it" lead to throwing exception'); -} catch(e){ - break; - LABEL2 : do { - x++; - y++; - } while(0); -} - diff --git a/tests/ES3/Conformance/12_Statement/12.8_The_break_Statement/S12.8_A9_T1.js b/tests/ES3/Conformance/12_Statement/12.8_The_break_Statement/S12.8_A9_T1.js deleted file mode 100644 index 9a18da4f4..000000000 --- a/tests/ES3/Conformance/12_Statement/12.8_The_break_Statement/S12.8_A9_T1.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.8_A9_T1; -* @section: 12.8; -* @assertion: Using "break" within "try/catch" statement that is nested in a loop is allowed; -* @description: Using "continue Identifier" within "catch" statement; -*/ - -var x=0,y=0; - -(function(){ -FOR : for(;;){ - try{ - x++; - if(x===10)return; - throw 1; - } catch(e){ - break FOR; - } -} -})(); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (x!==1) { - $ERROR('#1: break inside of try-catch nested in loop is allowed'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.8_The_break_Statement/S12.8_A9_T2.js b/tests/ES3/Conformance/12_Statement/12.8_The_break_Statement/S12.8_A9_T2.js deleted file mode 100644 index e0d79817c..000000000 --- a/tests/ES3/Conformance/12_Statement/12.8_The_break_Statement/S12.8_A9_T2.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.8_A9_T2; -* @section: 12.8; -* @assertion: Using "break" within "try/catch" statement that is nested in a loop is allowed; -* @description: Using "continue Identifier" within "catch" statement; -*/ - -var x=0,y=0; - -(function(){ -FOR : for(;;){ - try{ - x++; - if(x===10)return; - throw 1; - } catch(e){ - break ; - } -} -})(); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (x!==1) { - $ERROR('#1: break inside of try-catch nested in loop is allowed'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.9_The_return_Statement/S12.9_A1_T1.js b/tests/ES3/Conformance/12_Statement/12.9_The_return_Statement/S12.9_A1_T1.js deleted file mode 100644 index ddea210f7..000000000 --- a/tests/ES3/Conformance/12_Statement/12.9_The_return_Statement/S12.9_A1_T1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.9_A1_T1; -* @section: 12.9; -* @assertion: Appearing of "return" without a function body leads to syntax error; -* @description: Checking if execution of "return" with no function fails; -* @negative; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -var x=1; -return; -var y=2; diff --git a/tests/ES3/Conformance/12_Statement/12.9_The_return_Statement/S12.9_A1_T10.js b/tests/ES3/Conformance/12_Statement/12.9_The_return_Statement/S12.9_A1_T10.js deleted file mode 100644 index 2c98b7520..000000000 --- a/tests/ES3/Conformance/12_Statement/12.9_The_return_Statement/S12.9_A1_T10.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.9_A1_T10; -* @section: 12.9; -* @assertion: Appearing of "return" without a function body leads to syntax error; -* @description: Checking if execution of "return (0)" with no function fails; -* @negative; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -return (0); -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.9_The_return_Statement/S12.9_A1_T2.js b/tests/ES3/Conformance/12_Statement/12.9_The_return_Statement/S12.9_A1_T2.js deleted file mode 100644 index 68a8064ca..000000000 --- a/tests/ES3/Conformance/12_Statement/12.9_The_return_Statement/S12.9_A1_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.9_A1_T2; -* @section: 12.9; -* @assertion: Appearing of "return" without a function body leads to syntax error; -* @description: Checking if execution of "return x" with no function fails; -* @negative; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -var x=1; -return x; -var y=2; -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.9_The_return_Statement/S12.9_A1_T3.js b/tests/ES3/Conformance/12_Statement/12.9_The_return_Statement/S12.9_A1_T3.js deleted file mode 100644 index 43b709772..000000000 --- a/tests/ES3/Conformance/12_Statement/12.9_The_return_Statement/S12.9_A1_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.9_A1_T3; -* @section: 12.9; -* @assertion: Appearing of "return" without a function body leads to syntax error; -* @description: Checking if execution of "return" within "try" statement fails; -* @negative; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try { - return 1; -} catch(e){ - return 1; -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.9_The_return_Statement/S12.9_A1_T4.js b/tests/ES3/Conformance/12_Statement/12.9_The_return_Statement/S12.9_A1_T4.js deleted file mode 100644 index bb15c5a0e..000000000 --- a/tests/ES3/Conformance/12_Statement/12.9_The_return_Statement/S12.9_A1_T4.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.9_A1_T4; -* @section: 12.9; -* @assertion: Appearing of "return" without a function body leads to syntax error; -* @description: Checking if execution of "return" with no function fails; -* @negative; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -return; -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.9_The_return_Statement/S12.9_A1_T5.js b/tests/ES3/Conformance/12_Statement/12.9_The_return_Statement/S12.9_A1_T5.js deleted file mode 100644 index 6027cf802..000000000 --- a/tests/ES3/Conformance/12_Statement/12.9_The_return_Statement/S12.9_A1_T5.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.9_A1_T5; -* @section: 12.9; -* @assertion: Appearing of "return" without a function body leads to syntax error; -* @description: Checking if execution of "return" with no function, placed into a Block, fails; -* @negative; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -{ - var x=1; - return; - var y=2; -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.9_The_return_Statement/S12.9_A1_T6.js b/tests/ES3/Conformance/12_Statement/12.9_The_return_Statement/S12.9_A1_T6.js deleted file mode 100644 index 46a697036..000000000 --- a/tests/ES3/Conformance/12_Statement/12.9_The_return_Statement/S12.9_A1_T6.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.9_A1_T6; -* @section: 12.9; -* @assertion: Appearing of "return" without a function body leads to syntax error; -* @description: Checking if execution of "return" with no function, placed into a loop, fails; -* @negative; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -do { - var x=1; - return; - var y=2; -} while(0); -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.9_The_return_Statement/S12.9_A1_T7.js b/tests/ES3/Conformance/12_Statement/12.9_The_return_Statement/S12.9_A1_T7.js deleted file mode 100644 index f77868d01..000000000 --- a/tests/ES3/Conformance/12_Statement/12.9_The_return_Statement/S12.9_A1_T7.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.9_A1_T7; -* @section: 12.9; -* @assertion: Appearing of "return" without a function body leads to syntax error; -* @description: Checking if execution of "return x" with no function, placed inside Block, fails; -* @negative; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -{ - var x=1; - return x; - var y=2; -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.9_The_return_Statement/S12.9_A1_T8.js b/tests/ES3/Conformance/12_Statement/12.9_The_return_Statement/S12.9_A1_T8.js deleted file mode 100644 index 509efa7b9..000000000 --- a/tests/ES3/Conformance/12_Statement/12.9_The_return_Statement/S12.9_A1_T8.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.9_A1_T8; -* @section: 12.9; -* @assertion: Appearing of "return" without a function body leads to syntax error; -* @description: Checking if execution of "return x" with no function, placed into a loop, fails; -* @negative; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -do { - var x=1; - return x; - var y=2; -} while(0); -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.9_The_return_Statement/S12.9_A1_T9.js b/tests/ES3/Conformance/12_Statement/12.9_The_return_Statement/S12.9_A1_T9.js deleted file mode 100644 index 80f9e69de..000000000 --- a/tests/ES3/Conformance/12_Statement/12.9_The_return_Statement/S12.9_A1_T9.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.9_A1_T9; -* @section: 12.9; -* @assertion: Appearing of "return" without a function body leads to syntax error; -* @description: Checking if execution of "return", placed into a catch Block, fails; -* @negative; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try { - throw 1; -} catch(e){ - return e; -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.9_The_return_Statement/S12.9_A2.js b/tests/ES3/Conformance/12_Statement/12.9_The_return_Statement/S12.9_A2.js deleted file mode 100644 index 9a75efd45..000000000 --- a/tests/ES3/Conformance/12_Statement/12.9_The_return_Statement/S12.9_A2.js +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.9_A2; - * @section: 12.9; - * @assertion: LineTerminator between return and Identifier_opt yields return without Identifier_opt; - * @description: Checking by using eval, inserting LineTerminator between return and Variable; - */ - - -//CHECK#1 -try{ - if (eval("(function(){var x = 1;return\u000Ax;var y=2;})()") !== undefined) { - $ERROR("#1: LineTerminator(U-000A) between return and Identifier_opt yields return without Identifier_opt"); - } -} catch(e){ - $ERROR('#1: eval("(function(){var x = 1;return\\u000Ax;var y=2;})()") does not lead to throwing exception'); -} - - - - -//CHECK#2 -try{ - if (eval("(function(){var x = 1;return\u000Dx;var y=2;})()") !== undefined) { - $ERROR("#1: LineTerminator(U-000D) between return and Identifier_opt yields return without Identifier_opt"); - } -} catch(e){ - $ERROR('#2: eval("(function(){var x = 1;return\\u000Dx;var y=2;})()") does not lead to throwing exception'); -} - - - - -//CHECK#3 -try{ - if (eval("(function(){var x = 1;return\u2028x;var y=2;})()") !== undefined) { - $ERROR("#1: LineTerminator(U-2028) between return and Identifier_opt yields return without Identifier_opt"); - } -} catch(e){ - $ERROR('#3: eval("(function(){var x = 1;return\\u2028x;var y=2;})()") does not lead to throwing exception'); -} - - - - -//CHECK#4 -try{ - if (eval("(function(){var x =1;return\u2029x;var y=2;})()") !== undefined) { - $ERROR("#1: LineTerminator(U-2029) between return and Identifier_opt yields return without Identifier_opt"); - } -} catch(e){ - $ERROR('#4: eval("(function(){var x =1;return\\u2029x;var y=2;})()") does not lead to throwing exception'); -} diff --git a/tests/ES3/Conformance/12_Statement/12.9_The_return_Statement/S12.9_A3.js b/tests/ES3/Conformance/12_Statement/12.9_The_return_Statement/S12.9_A3.js deleted file mode 100644 index f9c64af58..000000000 --- a/tests/ES3/Conformance/12_Statement/12.9_The_return_Statement/S12.9_A3.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.9_A3; -* @section: 12.9; -* @assertion: If Expression is omitted, the return value is undefined; -* @description: Return without Expression; -*/ - -__evaluated = (function (){return;})(); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__evaluated !== undefined) { - $ERROR('#1: If Expression is omitted, the return value is undefined'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.9_The_return_Statement/S12.9_A4.js b/tests/ES3/Conformance/12_Statement/12.9_The_return_Statement/S12.9_A4.js deleted file mode 100644 index 81f0f8c02..000000000 --- a/tests/ES3/Conformance/12_Statement/12.9_The_return_Statement/S12.9_A4.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.9_A4; -* @section: 12.9; -* @assertion: The production ReturnStatement : return Expression; is evaluated as: -* i) Evaluate Expression. -* ii) Call GetValue(Result(2)). -* iii) Return (return, Result(3), empty); -* @description: Return very sophisticated expression and function; -*/ - - -// second derivative -function DD_operator(f, delta){return function(x){return (f(x+delta)-2*f(x)+f(x-delta))/(delta*delta)};} - -DDsin = DD_operator(Math.sin, 0.00001); - - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -// ((sin(x))')' = -sin(x) -if (DDsin( Math.PI/2 ) + Math.sin( Math.PI/2 ) > 0.00001) { - $ERROR('#1: return Expression yields to Return (return, GetValue(Evaluate Expression), empty)'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/12_Statement/12.9_The_return_Statement/S12.9_A5.js b/tests/ES3/Conformance/12_Statement/12.9_The_return_Statement/S12.9_A5.js deleted file mode 100644 index 693582618..000000000 --- a/tests/ES3/Conformance/12_Statement/12.9_The_return_Statement/S12.9_A5.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.9_A5; -* @section: 12.9; -* @assertion: Code after ReturnStatement is not evaluated; -* @description: Using code after Return statement; -*/ - -//CHECK#1 -var x1=1; -function myfunc1(){ - x1++; - return; - x1*=2; -} -myfunc1(); -if (x1!==2) $ERROR('#1: x1 === 2. Actual: x1 ==='+ x1 ); - -//CHECK#2 -var x2=1; -function myfunc2(){ - x2++; - return x2; - x2*=2; -} -myfunc2(); -if (x2!==2) $ERROR('#2: x2 === 2. Actual: x2 ==='+ x2 ); - -//CHECK#3 -var x3=1; -function myfunc3(){ - x3++; - return; - return x3; - x3*=2; -} -if (myfunc3()!==undefined) $ERROR('#3: myfunc3() === undefined. Actual: myfunc3() ==='+ myfunc3() ); diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.1_A1_T1.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.1_A1_T1.js deleted file mode 100644 index 3ea38a422..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.1_A1_T1.js +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.1_A1_T1; -* @section: 13.2.1; -* @assertion: The depth of nested function calls reaches 32; -* @description: Creating function calls 32 elements depth; -*/ - -(function(){ - (function(){ - (function(){ - (function(){ - (function(){ - (function(){ - (function(){ - (function(){ - (function(){ - (function(){ - (function(){ - (function(){ - (function(){ - (function(){ - (function(){ - (function(){ - (function(){ - (function(){ - (function(){ - (function(){ - (function(){ - (function(){ - (function(){ - (function(){ - (function(){ - (function(){ - (function(){ - (function(){ - (function(){ - (function(){ - (function(){ - (function(){})() - })() - })() - })() - })() - })() - })() - })() - })() - })() - })() - })() - })() - })() - })() - })() - })() - })() - })() - })() - })() - })() - })() - })() - })() - })() - })() - })() - })() - })() - })() -})() diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.1_A4_T1.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.1_A4_T1.js deleted file mode 100644 index 36f464543..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.1_A4_T1.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.1_A4_T1; -* @section: 13.2.1; -* @assertion: Objects as arguments are passed by reference; -* @description: Adding new number property to a function argument within the function body, -* where explicit argument is an object defined with "var __obj={}"; -*/ - -function __func(__arg){ - __arg.foo=7; -} - -var __obj={}; - -__func(__obj); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__obj.foo !== 7) { - $ERROR('#1: __obj.foo === 7. Actual: __obj.foo ==='+__obj.foo); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.1_A4_T2.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.1_A4_T2.js deleted file mode 100644 index 20806437b..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.1_A4_T2.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.1_A4_T2; -* @section: 13.2.1; -* @assertion: Objects as arguments are passed by reference; -* @description: Adding new string property to a function argument within the function body, -* where explicit argument is an object defined with "__obj={}"; -*/ - -function __func(__arg){ - __arg.foo="whiskey gogo"; -} - -__obj={}; - -__func(__obj); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__obj.foo !== "whiskey gogo") { - $ERROR('#1: __obj.foo === "whiskey gogo". Actual: __obj.foo ==='+__obj.foo); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.1_A4_T3.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.1_A4_T3.js deleted file mode 100644 index 01e40dbd2..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.1_A4_T3.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.1_A4_T3; -* @section: 13.2.1; -* @assertion: Objects as arguments are passed by reference; -* @description: Adding new number property to a function argument within the function body, -* where array element "arguments[0]" is an object defined with "__obj={}"; -*/ - -function __func(){ - arguments[0]["PI"]=3.14; -} - -__obj={}; - -__func(__obj); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__obj.PI !== 3.14) { - $ERROR('#1: __obj.PI === 3.14. Actual: __obj.PI ==='+__obj.PI); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.1_A4_T4.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.1_A4_T4.js deleted file mode 100644 index e313f516a..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.1_A4_T4.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.1_A4_T4; -* @section: 13.2.1; -* @assertion: Objects as arguments are passed by reference; -* @description: Adding new number property to a function argument within the function body, -* where array element "arguments[0]" is an object defined with "var __obj={}"; -*/ - -function __func(){ - arguments[0]["E"]=2.74; -} - -var __obj={}; - -__func(__obj); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__obj.E !== 2.74) { - $ERROR('#1: __obj.E === 2.74. Actual: __obj.E ==='+__obj.E); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.1_A5_T1.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.1_A5_T1.js deleted file mode 100644 index 7b36af3a9..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.1_A5_T1.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.1_A5_T1; -* @section: 13.2.1; -* @assertion: Closures are admitted; -* @description: Sorting with closure; -*/ - -var __arr = [4,3,2,1,4,3,2,1,4,3,2,1]; -//Sort uses closure -// -__arr.sort( - function(x,y) { - if (x>y){return -1;} - if (x= 1/65536.0) { - $ERROR('#1: Math.abs(derivative(Math.sin, 0.0001)(0) - derivative(Math.sin, 0.0001)(2*Math.PI)) <= 1/65536.0'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.1_A6_T1.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.1_A6_T1.js deleted file mode 100644 index 2bb3a254a..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.1_A6_T1.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.1_A6_T1; -* @section: 13.2.1; -* @assertion: Primitive types are passed by value; -* @description: Declaring a function with "function __func(arg1, arg2)"; -*/ - -function __func(arg1, arg2){ - arg1++; - arg2+="BA"; -}; - -var x=1; -y=2; -var a="AB" -b="SAM"; - -__func(x,a); -__func(y,b); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (x!==1 || y!==2 || a!=="AB" || b!=="SAM") { - $ERROR('#1: x === 1 and y === 2 and a === "AB" and b === "SAM". Actual: x ==='+x+' and y ==='+y+' and a ==='+a+' and b ==='+b); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.1_A6_T2.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.1_A6_T2.js deleted file mode 100644 index 1a127f84e..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.1_A6_T2.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.1_A6_T2; -* @section: 13.2.1; -* @assertion: Primitive types are passed by value; -* @description: Declaring a function with "__func = function(arg1, arg2)"; -*/ - -__func = function(arg1, arg2){ - arg1++; - arg2+="BA"; -}; - -var x=1; -y=2; -var a="AB" -b="SAM"; - -__func(x,a); -__func(y,b); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (x!==1 || y!==2 || a!=="AB" || b!=="SAM") { - $ERROR('#1: x === 1 and y === 2 and a === "AB" and b === "SAM". Actual: x ==='+x+' and y ==='+y+' and a ==='+a+' and b ==='+b); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.1_A7_T1.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.1_A7_T1.js deleted file mode 100644 index 123715abc..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.1_A7_T1.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.1_A7_T1; -* @section: 13.2.1; -* @assertion: When the [[Call]] property for a Function object F is called, the following steps are taken: -* 2. Evaluate F's FunctionBody; -* if Result.type is returned then Result.value is returned too; -* @description: Returning null. Declaring a function with "function __func()"; -*/ - -function __func(){ - var x = null; - return x; -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try{ - var x=__func(); -} catch(e){ - $ERROR('#1: var x=__func() does not lead to throwing exception. Actual: exception is '+e); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.1_A7_T2.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.1_A7_T2.js deleted file mode 100644 index 19b79bb02..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.1_A7_T2.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.1_A7_T2; -* @section: 13.2.1; -* @assertion: When the [[Call]] property for a Function object F is called, the following steps are taken: -* 2. Evaluate F's FunctionBody; -* if Result.type is returned then Result.value is returned too; -* @description: Returning null. Declaring a function with "var __func = function ()"; -*/ - -var __func = function (){ - var x = null; - return x; -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try{ - var x=__func(); -} catch(e){ - $ERROR('#1: var x=__func() does not lead to throwing exception. Actual: exception is '+e); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.1_A7_T3.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.1_A7_T3.js deleted file mode 100644 index f39174e3a..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.1_A7_T3.js +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.1_A7_T3; -* @section: 13.2.1; -* @assertion: When the [[Call]] property for a Function object F is called, the following steps are taken: -* 2. Evaluate F's FunctionBody; -* if Result.type is returned then Result.value is returned too; -* @description: Returning number. Declaring a function with "function __func()"; -*/ - -function __func(){ - x = 1; - return x; -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK# -try { - x=x; - $ERROR('#0: "x=x" lead to throwing exception'); -} catch (e) {} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try{ - var __x=__func() -} catch(e){ - $ERROR('#1: var __x=__func() does not lead to throwing exception. Actual: exception is '+e); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__x !== 1) { - $ERROR('#2: __x === 1. Actual: __x ==='+__x); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (x !== 1) { - $ERROR('#3: x === 1. Actual: x ==='+x); -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.1_A7_T4.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.1_A7_T4.js deleted file mode 100644 index f3d8cb30f..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.1_A7_T4.js +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.1_A7_T4; -* @section: 13.2.1; -* @assertion: When the [[Call]] property for a Function object F is called, the following steps are taken: -* 2. Evaluate F's FunctionBody; -* if Result.type is returned then Result.value is returned too; -* @description: Returning boolean. Declaring a function with "function __func()"; -*/ - -function __func(){ - var x = true; - return x; -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK# -try { - x=x; - $ERROR('#0: "x=x" lead to throwing exception'); -} catch (e) {} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try{ - var __x=__func() -} catch(e){ - $ERROR('#1: var __x=__func() does not lead to throwing exception. Actual: exception is '+e); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (!(__x)) { - $ERROR('#2: __x === true. Actual: __x ==='+__x); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -try { - x=x; - $ERROR('#3: "x=x" lead to throwing exception'); -} catch (e) {} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.1_A8_T1.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.1_A8_T1.js deleted file mode 100644 index b54b56e84..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.1_A8_T1.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.1_A8_T1; -* @section: 13.2.1; -* @assertion: When the [[Call]] property for a Function object F is called, the following steps are taken: -* 2. Evaluate F's FunctionBody; -* if Result.type is thrown then Result.value is thrown too; -* @description: Throwing an exception within a function body. Declaring function with "function __func()"; -*/ - -function __func(){ - var x = 1; - throw ("Catch Me If You Can") - return x; -} - -try{ - var x=__func() - $ERROR('#0: var x=__func() lead to throwing exception'); -} catch(e){ - if (e !== "Catch Me If You Can") { - $ERROR('#1: Exception === "Catch Me If You Can". Actual: exception ==='+e); - } -} diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.1_A8_T2.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.1_A8_T2.js deleted file mode 100644 index 20de0344f..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.1_A8_T2.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.1_A8_T2; -* @section: 13.2.1; -* @assertion: When the [[Call]] property for a Function object F is called, the following steps are taken: -* 2. Evaluate F's FunctionBody; -* if Result.type is thrown then Result.value is thrown too; -* @description: Throwing an exception within a function body. Declaring function with "var __func = function (message)"; -*/ - -CATCH_ME_IF_YOU_CAN = true; - -var __func = function (message){ - var x = 1; - throw (message) - return x; -} - -try{ - var x=__func(CATCH_ME_IF_YOU_CAN) - $ERROR('#0: var x=__func(CATCH_ME_IF_YOU_CAN) lead to throwing exception'); -} catch(e){ - if (!e) { - $ERROR('#1: Exception === true. Actual: exception ==='+e); - } -} diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.1_A9.1_T1.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.1_A9.1_T1.js deleted file mode 100644 index 7e32dd4ab..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.1_A9.1_T1.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.1_A9.1_T1; -* @section: 13.2.1; -* @assertion: When the [[Call]] property for a Function object is called, -* the body is evaluated and if evaluation result has type "normal", then "undefined" is returned; -* @description: Declaring a function with "function __func()" and no "return" in the function body; -*/ - -function __func(){ - x = true; -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__func() !== undefined) { - $ERROR('#1: __func() === undefined. Actual: __func() ==='+__func()); -}; -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (!x) { - $ERROR('#2: x === true. Actual: x === '+x); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.1_A9.1_T2.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.1_A9.1_T2.js deleted file mode 100644 index 745d8d682..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.1_A9.1_T2.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.1_A9.1_T2; -* @section: 13.2.1; -* @assertion: When the [[Call]] property for a Function object is called, -* the body is evaluated and if evaluation result has type "normal", then "undefined" is returned; -* @description: Declaring a function with "var __func = function()" and no "return" in the function body; -*/ - -var __func = function(){ - x = true; -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__func() !== undefined) { - $ERROR('#1: __func() === undefined. Actual: __func() ==='+__func()); -}; -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (!x) { - $ERROR('#2: x === true. Actual: x === '+x); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.1_A9_T1.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.1_A9_T1.js deleted file mode 100644 index 57fdc269f..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.1_A9_T1.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.1_A9_T1; -* @section: 13.2.1; -* @assertion: When the [[Call]] property for a Function object is called, -* the body is evaluated and if evaluation result has type "return" its value is not defined, then "undefined" is returned; -* @description: Using "return" with no expression. Declaring a function with "function __func()"; -*/ - -function __func(){ - x = 1; - return; -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__func() !== undefined) { - $ERROR('#1: __func() === undefined. Actual: __func() ==='+__func()); -}; -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (x!==1) { - $ERROR('#2: x === 1. Actual: x === '+x); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.1_A9_T2.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.1_A9_T2.js deleted file mode 100644 index 3a78b2141..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.1_A9_T2.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.1_A9_T2; -* @section: 13.2.1; -* @assertion: When the [[Call]] property for a Function object is called, -* the body is evaluated and if evaluation result has type "return" its value is not defined, then "undefined" is returned; -* @description: Using "return" with no expression. Declaring a function with "var __func = function()"; -*/ - -var __func = function(){ - x = 1; - return; -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__func() !== undefined) { - $ERROR('#1: __func() === undefined. Actual: __func() ==='+__func()); -}; -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (x!==1) { - $ERROR('#2: x === 1. Actual: x === '+x); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A10.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A10.js deleted file mode 100644 index dbe9c401b..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A10.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.2_A10; -* @section: 13.2.2; -* @assertion: Calling a function as a constructor is possible as long as this.any_Function is declared; -* @description: Calling a function as a constructor after it has been declared; -*/ - -function FACTORY(){ - this.id = 0; - - this.func = function (){ - return 5; - } - - this.id = this.func(); - -} -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try { - var obj = new FACTORY(); -} catch (e) { - $ERROR('#1: var obj = new FACTORY() does not lead to throwing exception. Actual: Exception is '+e); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (obj.id !== 5) { - $ERROR('#2: obj.id === 5. Actual: obj.id ==='+obj.id); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A11.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A11.js deleted file mode 100644 index 3ff216c97..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A11.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.2_A11; -* @section: 13.2.2; -* @assertion: Calling a function as a constructor is possible as long as this.any_Function is declared and called; -* @description: Calling a function as a constructor after it has been declared with "function func()"; -*/ - -function FACTORY(){ - this.id = 0; - - this.id = this.func(); - - function func(){ - return "id_string"; - } - -} -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try { - var obj = new FACTORY(); - $ERROR('#1: var obj = new FACTORY() lead to throwing exception'); -} catch (e) {} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A12.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A12.js deleted file mode 100644 index 7718f4f8f..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A12.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.2_A12; -* @section: 13.2.2; -* @assertion: Calling a function as a constructor is possible as long as this.any_Function is declared and called; -* @description: Calling a function as a constructor after it has been declared with "function func()"; -*/ - -function FACTORY(){ - this.id = 0; - - this.id = func(); - - function func(){ - return "id_string"; - } - -} -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try { - var obj = new FACTORY(); -} catch (e) { - $ERROR('#1: var obj = new FACTORY() does not lead to throwing exception. Actual: Exception is '+e); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (obj.id !== "id_string") { - $ERROR('#2: obj.id === "id_string". Actual: obj.id ==='+obj.id); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A13.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A13.js deleted file mode 100644 index ec2a1b4b3..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A13.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.2_A13; -* @section: 13.2.2; -* @assertion: Calling a function as a constructor is inadmissible as long as this.any_Function is declared by eval and called; -* @description: Calling a function as a constructor after it has been declared by eval; -*/ - -function FACTORY(){ - this.id = 0; - - this.id = func(); - - eval("function func(){return \"id_string\";}"); - -} -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try { - var obj = new FACTORY(); - $ERROR('#1: var obj = new FACTORY() lead to throwing exception'); -} catch (e) {} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A14.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A14.js deleted file mode 100644 index 69e150a60..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A14.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.2_A14; -* @section: 13.2.2; -* @assertion: Calling a function as a constructor is inadmissible as long as this.any_Function is declared by eval and called; -* @description: Calling a function as a constructor after it has been declared by eval; -*/ - -function FACTORY(){ - this.id = 0; - - eval("function func(){return \"id_string\";}"); - - this.id = func(); - -} -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try { - var obj = new FACTORY(); -} catch (e) { - $ERROR('#1: var obj = new FACTORY() does not lead to throwing exception'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A15_T1.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A15_T1.js deleted file mode 100644 index 8ffd94e78..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A15_T1.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.2_A15_T1; -* @section: 13.2.2; -* @assertion: When the [[Construct]] property for a Function object F is called, -* and the object created in the function is returned, the object (declared with "this" within a function) will be strong and healthy; -* @description: Function declared at the end of the program and "obj" property is declared with "var obj = {}"; -*/ - -__obj = new __FACTORY(); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof obj !== "undefined") { - $ERROR('#1: typeof obj === "undefined". Actual: typeof obj ==='+typeof obj); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__obj.prop !== "A") { - $ERROR('#2: __obj.prop === "A". Actual: __obj.prop ==='+__obj.prop); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__obj.slot.prop !==1) { - $ERROR('#3: __obj.slot.prop ===1. Actual: __obj.slot.prop ==='+__obj.slot.prop); -} -// -////////////////////////////////////////////////////////////////////////////// - -function __FACTORY(){ - this.prop = 1; - var obj = {}; - obj.prop = "A"; - obj.slot = this; - return obj; -} diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A15_T2.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A15_T2.js deleted file mode 100644 index bd38cd95b..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A15_T2.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.2_A15_T2; -* @section: 13.2.2; -* @assertion: When the [[Construct]] property for a Function object F is called, -* and the object created in the function is returned, the object (declared with "this" within a function) will be strong and healthy; -* @description: Function declared at the end of the program and "obj" property is declared with "obj = {}"; -*/ - -__obj = new __FACTORY(); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (obj.prop !== "A") { - $ERROR('#1: obj.prop === "A". Actual: obj.prop ==='+obj.prop); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__obj.prop !== "A") { - $ERROR('#2: __obj.prop === "A". Actual: __obj.prop ==='+__obj.prop); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__obj.slot.prop !==1) { - $ERROR('#3: __obj.slot.prop === 1. Actual: __obj.slot.prop ==='+__obj.slot.prop); -} -// -////////////////////////////////////////////////////////////////////////////// - -function __FACTORY(){ - this.prop = 1; - obj = {}; - obj.prop = "A"; - obj.slot = this; - return obj; -} diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A15_T3.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A15_T3.js deleted file mode 100644 index c217e089b..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A15_T3.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.2_A15_T3; -* @section: 13.2.2; -* @assertion: When the [[Construct]] property for a Function object F is called, -* and the object created in the function is returned, the object (declared with "this" within a function) will be strong and healthy; -* @description: Function declared at the end of the program and "obj" property is declared with "var obj = {}"; -*/ - -__FACTORY = function (){ - this.prop = 1; - var obj = {}; - obj.prop = "A"; - obj.slot = this; - return obj; -} - -__obj = new __FACTORY(); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof obj !== "undefined") { - $ERROR('#1: typeof obj === "undefined". Actual: typeof obj ==='+typeof obj); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__obj.prop !== "A") { - $ERROR('#2: __obj.prop === "A". Actual: __obj.prop ==='+__obj.prop); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__obj.slot.prop !==1) { - $ERROR('#3: __obj.slot.prop ===1. Actual: __obj.slot.prop ==='+__obj.slot.prop); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A15_T4.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A15_T4.js deleted file mode 100644 index d300d093c..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A15_T4.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.2_A15_T4; -* @section: 13.2.2; -* @assertion: When the [[Construct]] property for a Function object F is called, -* and the object created in the function is returned, the object (declared with "this" within a function) will be strong and healthy; -* @description: Function declared at the end of the program and "obj" property is declared with "obj = {}"; -*/ - -__FACTORY = function(){ - this.prop = 1; - obj = {}; - obj.prop = "A"; - obj.slot = this; - return obj; -} - -__obj = new __FACTORY(); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (obj.prop !== "A") { - $ERROR('#1: obj.prop === "A". Actual: obj.prop ==='+obj.prop); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__obj.prop !== "A") { - $ERROR('#2: __obj.prop === "A". Actual: __obj.prop ==='+obj.prop); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__obj.slot.prop !==1) { - $ERROR('#3: __obj.slot.prop ===1. Actual: __obj.slot.prop ==='+obj.slot.prop); -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A16_T1.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A16_T1.js deleted file mode 100644 index a159b507c..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A16_T1.js +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.2_A16_T1; -* @section: 13.2.2; -* @assertion: FunctionExpression within a new statement is admitted; -* @description: Using "is __obj = new function __func(){this.prop=1;}" as FunctionExpression; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __func !== "undefined") { - $ERROR('#1: typeof __func === "undefined". Actual: typeof __func ==='+typeof __func); -} -// -////////////////////////////////////////////////////////////////////////////// - -__obj = new function __func(){this.prop=1;}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__obj.prop !== 1) { - $ERROR('#2: __obj.prop === 1. Actual: __obj.prop ==='+__obj.prop); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#5 -if (typeof __func !== "undefined") { - $ERROR('#5: typeof __func === "undefined". Actual: typeof __func ==='+typeof __func); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A16_T2.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A16_T2.js deleted file mode 100644 index 9e1c83f74..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A16_T2.js +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.2_A16_T2; -* @section: 13.2.2; -* @assertion: FunctionExpression within a new statement is admitted; -* @description: Using "__obj = new function __func(arg){this.prop=arg;}(5)" as FunctionExpression; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __func !== "undefined") { - $ERROR('#1: typeof __func === "undefined". Actual: typeof __func ==='+typeof __func); -} -// -////////////////////////////////////////////////////////////////////////////// - -__obj = new function __func(arg){this.prop=arg;}(5); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__obj.prop !== 5) { - $ERROR('#2: __obj.prop === 5. Actual: __obj.prop ==='+__obj.prop); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (typeof __func !== "undefined") { - $ERROR('#3: typeof __func === "undefined". Actual: typeof __func ==='+typeof __func); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A16_T3.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A16_T3.js deleted file mode 100644 index fedb44ffc..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A16_T3.js +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.2_A16_T3; -* @section: 13.2.2; -* @assertion: FunctionExpression within a new statement is admitted; -* @description: Using "is __obj = new function __func(arg){this.prop=arg; return {feat: ++arg}}(5)" as FunctionExpression; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __func !== "undefined") { - $ERROR('#1: typeof __func === "undefined"'); -} -// -////////////////////////////////////////////////////////////////////////////// - -__obj = new function __func(arg){this.prop=arg; return {feat: ++arg}}(5); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__obj.prop !== undefined) { - $ERROR('#2: __obj.prop === undefined. Actual: __obj.prop ==='+__obj.prop); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__obj.feat !== 6) { - $ERROR('#3: __obj.feat === 6. Actual: __obj.feat ==='+__obj.feat); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (typeof __func !== "undefined") { - $ERROR('#4: typeof __func === "undefined". Actual: typeof __func ==='+typeof __func); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A17_T1.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A17_T1.js deleted file mode 100644 index 88ecf891f..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A17_T1.js +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.2_A17_T1; -* @section: 13.2.2; -* @assertion: FunctionExpression containing "with" statement is admitted; -* @description: Using "with" statement within a function body; -*/ - -var p1="alert"; - -var __obj={p1:1,getRight:function(){return "right";}}; - -this.getRight=function(){return "napravo";}; - -(function(){ - with(__obj){ - p1="w1"; - function getRight(){return false;} - } -})(); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (p1!=="alert") { - $ERROR('#1: p1 === "alert". Actual: p1==='+p1); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (getRight()!=="napravo") { - $ERROR('#2: getRight() === "napravo". Actual: getRight() === '+getRight()); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__obj.p1!=="w1") { - $ERROR('#3: __obj.p1 === "w1". Actual: __obj.p1 ==='+__obj.p1); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (__obj.getRight()!=="right") { - $ERROR('#4: __obj.getRight() === "right". Actual: __obj.getRight() ==='+__obj.getRight()); -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A17_T2.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A17_T2.js deleted file mode 100644 index d0e14cb4b..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A17_T2.js +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.2_A17_T2; -* @section: 13.2.2; -* @assertion: FunctionExpression containing "with" statement is admitted; -* @description: Throwing an exception within "with" statement; -*/ - -this.p1="alert"; - -__obj={p1:1,getRight:function(){return "right";}}; - -getRight=function(){return "napravo";}; - -try { - (function(){ - with(__obj){ - p1="w1"; - getRight=function(){return false;} - throw p1; - } - })(); -} catch (e) { - resukt = p1; -} - - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (p1!=="alert") { - $ERROR('#1: p1 === "alert". Actual: p1==='+p1); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (getRight()!=="napravo") { - $ERROR('#2: getRight() === "napravo". Actual: getRight() === '+getRight()); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__obj.p1!=="w1") { - $ERROR('#3: __obj.p1 === "w1". Actual: __obj.p1 ==='+__obj.p1); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (__obj.getRight()!==false) { - $ERROR('#4: __obj.getRight() === false. Actual: __obj.getRight() === '+__obj.getRight()); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#5 -if (resukt !== "alert") { - $ERROR('#5: resukt === "alert". Actual: resukt ==='+resukt); -} -// -////////////////////////////////////////////////////////////////////////////// - -var resukt; - diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A17_T3.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A17_T3.js deleted file mode 100644 index 47409b15e..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A17_T3.js +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.2_A17_T3; -* @section: 13.2.2; -* @assertion: FunctionExpression containing "with" statement is admitted; -* @description: In the check 4 we populate field getRight in __obj object since var getRight declaration adds variable to function scope -* but getRight in statement resolves within with(__obj) scope and searchs getRight in __obj first; -*/ - -p1="alert"; - -this.__obj={p1:1,getRight:function(){return "right";}}; - -var getRight=function(){return "napravo";}; - -resukt=(function(){ - with(__obj){ - p1="w1"; - var getRight=function(){return false;}; - return p1; - } -})(); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (p1!=="alert") { - $ERROR('#1: p1 === "alert". Actual: p1==='+p1); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (getRight()!=="napravo") { - $ERROR('#2: getRight() === "napravo". Actual: getRight()==='+getRight()); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__obj.p1!=="w1") { - $ERROR('#3: __obj.p1 === "w1". Actual: __obj.p1 ==='+__obj.p1); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (__obj.getRight()!==false) { - $ERROR('#4: __obj.getRight() === false. Actual: __obj.getRight()==='+__obj.getRight()); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#5 -if (resukt !== "w1") { - $ERROR('#5: resukt === "w1". Actual: resukt ==='+resukt); -} -// -////////////////////////////////////////////////////////////////////////////// - -var resukt; - diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A18_T1.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A18_T1.js deleted file mode 100644 index 46d3a9ed0..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A18_T1.js +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.2_A18_T1; -* @section: 13.2.2; -* @assertion: Using arguments object within a "with" Expression that is nested in a function is admitted; -* @description: Object is declared with "var __obj={callee:"a"}"; -*/ - -var callee=0, b; - -var __obj={callee:"a"}; - -result=(function(){ - with (arguments){ - callee=1; - b=true; - } - return arguments; -})(__obj); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (callee !== 0) { - $ERROR('#1: callee === 0. Actual: callee ==='+callee); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__obj.callee !== "a") { - $ERROR('#2: __obj.callee === "a". Actual: __obj.callee==='+__obj.callee); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (result.callee !== 1) { - $ERROR('#3: result.callee === 1. Actual: result.callee ==='+result.callee); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (!(this.b)) { - $ERROR('#4: this.b === true. Actual: this.b ==='+this.b); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A18_T2.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A18_T2.js deleted file mode 100644 index 52accec4c..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A18_T2.js +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.2_A18_T2; -* @section: 13.2.2; -* @assertion: Using arguments object within a "with" Expression that is nested in a function is admitted; -* @description: Object is declared with "__obj={callee:"a"}"; -*/ - -this.callee = 0; -var b; - -__obj={callee:"a"}; - -function f(){ - with (arguments){ - callee=1; - b=true; - return arguments; - } -}; - -result=f(__obj); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (callee !== 0) { - $ERROR('#1: callee === 0. Actual: callee ==='+callee); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__obj.callee !== "a") { - $ERROR('#2: __obj.callee === "a". Actual: __obj.callee ==='+__obj.callee); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (result.callee !== 1) { - $ERROR('#3: result.callee === 1. Actual: result.callee ==='+result.callee); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (!(this.b)) { - $ERROR('#4: this.b === true. Actual: this.b ==='+this.b); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A19_T1.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A19_T1.js deleted file mode 100644 index a21ce40eb..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A19_T1.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.2_A19_T1; -* @section: 13.2.2; -* @assertion: Function's scope chain is started when it is declared; -* @description: Function is declared in the global scope; -*/ - -var a = 1; - -var __func= function(){return a;}; - -var __obj = {a:2}; - -with (__obj) -{ - result = __func(); -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (result !== 1) { - $ERROR('#1: result === 1. Actual: result ==='+result); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A19_T2.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A19_T2.js deleted file mode 100644 index 2440a2e12..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A19_T2.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.2_A19_T2; -* @section: 13.2.2; -* @assertion: Function's scope chain is started when it is declared; -* @description: Function is declared in the object scope. Using "with" statement; -*/ - -var a = 1; - -var __obj = {a:2}; - -with (__obj) -{ - result = (function(){return a;})(); -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (result !== 2) { - $ERROR('#1: result === 2. Actual: result ==='+result); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A19_T3.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A19_T3.js deleted file mode 100644 index 901e3c830..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A19_T3.js +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.2_A19_T3; -* @section: 13.2.2; -* @assertion: Function's scope chain is started when it is declared; -* @description: Function is declared in the object scope and then an exception is thrown; -*/ - -var a = 1; - -var __obj = {a:2}; - -try { - with (__obj) - { - var __func = function (){return a;}; - throw 3; - } -} catch (e) { - ; -} - -result = __func(); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (result !== 2) { - $ERROR('#1: result === 2. Actual: result ==='+result); -} -// -////////////////////////////////////////////////////////////////////////////// - - - diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A19_T4.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A19_T4.js deleted file mode 100644 index 10aacbe90..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A19_T4.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.2_A19_T4; -* @section: 13.2.2; -* @assertion: Function's scope chain is started when it is declared; -* @description: Function is declared in the hierarchical object scope and then an exception is thrown; -*/ - -var a = 1; - -var __obj = {a:2,__obj:{a:3}}; - -try { - with (__obj) - { - with(__obj){ - var __func = function(){return a;}; - throw 5; - } - } -} catch (e) { - ; -} - -result = __func(); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (result !== 3) { - $ERROR('#1: result === 3. Actual: result ==='+result); -} -// -////////////////////////////////////////////////////////////////////////////// - - - diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A19_T5.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A19_T5.js deleted file mode 100644 index c0e5a62ac..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A19_T5.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.2_A19_T5; -* @section: 13.2.2; -* @assertion: Function's scope chain is started when it is declared; -* @description: Function is declared in the object scope, then an exception is thrown and the object is deleted; -*/ - -var a = 1; - -var __obj = {a:2}; - -with (__obj) -{ - try { - - var __func = function() - { - return a; - } - throw 3; - } catch (e) { - ; - } -} - -delete __obj; - -result = __func(); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (result !== 2) { - $ERROR('#1: result === 2. Actual: result ==='+result); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A19_T6.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A19_T6.js deleted file mode 100644 index df7b522fb..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A19_T6.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.2_A19_T6; -* @section: 13.2.2; -* @assertion: Function's scope chain is started when it is declared; -* @description: Function is declared in the "object->do-while" scope, then the object is deleted and another object with the same name is declared; -*/ - -var a = 1; - -var __obj = {a:2}; - -with (__obj) -{ - do { - var __func = function() - { - return a; - } - } while(0); -} - -delete __obj; - -var __obj = {a:3}; - -with (__obj) -{ - result = __func(); -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (result !== 2) { - $ERROR('#1: result === 2. Actual: result ==='+result); -} -// -////////////////////////////////////////////////////////////////////////////// - - - - - diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A19_T7.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A19_T7.js deleted file mode 100644 index cfa12338a..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A19_T7.js +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.2_A19_T7; -* @section: 13.2.2; -* @assertion: Function's scope chain is started when it is declared; -* @description: Function is declared in the object scope as a variable; -*/ - -var a = 1; - -var __obj = {a:2}; - -with (__obj) -{ - var __func = function() - { - return a; - } -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__obj.hasOwnProperty('__func')) { - $ERROR('#1: __obj.hasOwnProperty(\'__func\') === false'); -} -// -////////////////////////////////////////////////////////////////////////////// - -///////////////////////////////////// ///////////////////////////////////////// -//CHECK#2 -if (!(this.hasOwnProperty('__func'))) { - $ERROR('#2: this.hasOwnProperty(\'__func\') === true'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__func in __obj) { - $ERROR('#3: (__func in __obj) === false'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (this.__func === undefined) { - $ERROR('#4: this.__func !== undefined'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A19_T8.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A19_T8.js deleted file mode 100644 index aea475781..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A19_T8.js +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.2_A19_T8; -* @section: 13.2.2; -* @assertion: Function's scope chain is started when it is declared; -* @description: Function is declared multiply times; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#0 -if (typeof __func !== "undefined") { - $ERROR('#0: typeof __func === "undefined". Actual: typeof __func ==='+typeof __func); -} -// -////////////////////////////////////////////////////////////////////////////// - -var a = 1, b = "a"; - -var __obj = {a:2}; - -with (__obj) -{ - while(1){ - var __func = function() - { - return a; - } - break; - } -} - -delete __obj; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__func() !== 2) { - $ERROR('#1: __func() === 2. Actual: __func() ==='+__func()); -} -// -////////////////////////////////////////////////////////////////////////////// - -var __obj = {a:3,b:"b"}; - -with (__obj) -{ - var __func = function() - { - return b; - } -} - -delete __obj; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__func()!=="b") { - $ERROR('#2: __func()==="b". Actual: __func()==='+__func()); -} -// -////////////////////////////////////////////////////////////////////////////// - -with ({a:99,b:"c"}) -{ - ////////////////////////////////////////////////////////////////////////////// - //CHECK#3 - if (__func() !== "b") { - $ERROR('#3: __func()==="b". Actual: __func()==='+__func()); - } - // - ////////////////////////////////////////////////////////////////////////////// -} diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A1_T1.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A1_T1.js deleted file mode 100644 index c53a723ce..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A1_T1.js +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.2_A1_T1; -* @section: 13.2.2; -* @assertion: Since a function is an object, it might be set to [[Prototype]] property of a new created object through [[Construct]] property; -* @description: Declaring a function with "function __func()"; -*/ - -__MONSTER="monster"; -__PREDATOR="predator"; - -function __PROTO(){}; - -try{ - __PROTO.type=__MONSTER; -} -catch(e){ - $ERROR('#0: __PROTO.type=__MONSTER does not lead to throwing exception') -} - -function __FACTORY(){this.name=__PREDATOR}; - -__FACTORY.prototype=__PROTO; - -__monster = new __FACTORY(); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!(__PROTO.isPrototypeOf(__monster))) { - $ERROR('#1: __PROTO.isPrototypeOf(__monster) must be true'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__monster.type !==__MONSTER) { - $ERROR('#2: __monster.type ===__MONSTER. Actual: __monster.type ==='+__monster.type); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A1_T2.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A1_T2.js deleted file mode 100644 index b1a326068..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A1_T2.js +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.2_A1_T2; -* @section: 13.2.2; -* @assertion: Since a function is an object, it might be set to [[Prototype]] property of a new created object through [[Construct]] property; -* @description: Declaring a function with "var __PROTO = function()"; -*/ - -__MONSTER="monster"; -__PREDATOR="predator"; - -var __PROTO = function(){}; - -try{ - __PROTO.type=__MONSTER; -} -catch(e){ - $FAIL('#0: __PROTO.type=__MONSTER does not lead to throwing exception') -} - -var __FACTORY = function(){this.name=__PREDATOR}; - -__FACTORY.prototype=__PROTO; - -__monster = new __FACTORY(); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!(__PROTO.isPrototypeOf(__monster))) { - $ERROR('#1: __PROTO.isPrototypeOf(__monster) must be true'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__monster.type !==__MONSTER) { - $ERROR('#2: __monster.type ===__MONSTER. Actual: __monster.type ==='+__monster.type); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A2.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A2.js deleted file mode 100644 index 826ee04a5..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A2.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.2_A2; -* @section: 13.2.2; -* @assertion: Since a function is an object, it might be set to [[Prototype]] property of a new created object through [[Construct]] property, -* but [[call]] property must fail with TypeError error; -* @description: Trying to [[call]] this function; -*/ - -__PLANT="flower"; -__ROSE="rose"; - -function __PROTO(){}; - -try{ - __PROTO.type=__PLANT; -} -catch(e){ - $ERROR('#0: __PROTO.type=__PLANT does not lead to throwing exception') -} - -function __FACTORY(){this.name=__ROSE}; - -__FACTORY.prototype=__PROTO; - -__rose = new __FACTORY(); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try{ - __rose(); - $ERROR('#1: __rose() lead to throwing exception'); -} catch(e){ - if (!(e instanceof TypeError)) { - $ERROR('#2: Exception Type is TypeError. Actual: exception ==='+e); - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A3_T1.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A3_T1.js deleted file mode 100644 index 7f80df0cb..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A3_T1.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.2_A3_T1; -* @section: 13.2.2, 15.2.3.1; -* @assertion: When the [[Construct]] property for a Function object F is called: -* A new native ECMAScript object is created. -* It gets the value of the [[Prototype]] property of the F(Denote it PROTO_VAL). -* If PROTO_VAL is not an object, sets the [[Prototype]] property of native ECMAScript object just created -* to the original Object prototype object as described in 15.2.3.1; -* @description: Declaring a function with "function __FACTORY()"; -*/ - -function __FACTORY(){}; -__FACTORY.prototype=1; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __FACTORY.prototype !== 'number') { - $ERROR('#1: typeof __FACTORY.prototype === \'number\'. Actual: typeof __FACTORY.prototype ==='+(typeof __FACTORY.prototype)); -} -// -////////////////////////////////////////////////////////////////////////////// - -__device = new __FACTORY(); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (!(Object.prototype.isPrototypeOf(__device))) { - $ERROR('#2: Object.prototype.isPrototypeOf(__device) === true'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A3_T2.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A3_T2.js deleted file mode 100644 index 8778d14a1..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A3_T2.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.2_A3_T2; -* @section: 13.2.2, 15.2.3.1; -* @assertion: When the [[Construct]] property for a Function object F is called: -* A new native ECMAScript object is created. -* It gets the value of the [[Prototype]] property of the F(Denote it PROTO_VAL). -* If PROTO_VAL is not an object, sets the [[Prototype]] property of native ECMAScript object just created -* to the original Object prototype object as described in 15.2.3.1; -* @description: Declaring a function with "var __FACTORY = function()"; -*/ - -var __FACTORY = function(){}; -__FACTORY.prototype=1; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __FACTORY.prototype !== 'number') { - $ERROR('#1: typeof __FACTORY.prototype === \'number\'. Actual: typeof __FACTORY.prototype ==='+(typeof __FACTORY.prototype)); -} -// -////////////////////////////////////////////////////////////////////////////// - -__device = new __FACTORY(); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (!(Object.prototype.isPrototypeOf(__device))) { - $ERROR('#2: Object.prototype.isPrototypeOf(__device) === true'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A4_T1.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A4_T1.js deleted file mode 100644 index 35ef9b5dd..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A4_T1.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.2_A4_T1; -* @section: 13.2.2; -* @assertion: When the [[Construct]] property for a Function object F is called: -* A new native ECMAScript object is created. -* Gets the value of the [[Prototype]] property of the F(Denote it PROTO_VAL). -* If PROTO_VAL is an object, sets the [[Prototype]] property of native ECMAScript object just created -* to the PROTO_VAL; -* @description: Declaring a function with "function __FACTORY()"; -*/ - -__CUBE="cube"; - -function __FACTORY(){ -}; -__FACTORY.prototype={ shape:__CUBE, printShape:function(){return this.shape;} }; - -__device = new __FACTORY(); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__device.printShape === undefined) { - $ERROR('#1: __device.printShape !== undefined. Actual: __device.printShape ==='+__device.printShape); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__device.printShape() !== __CUBE) { - $ERROR('#2: __device.printShape() === __CUBE. Actual: __device.printShape() ==='+__device.printShape()); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A4_T2.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A4_T2.js deleted file mode 100644 index 0f09869d6..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A4_T2.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.2_A4_T2; -* @section: 13.2.2; -* @assertion: When the [[Construct]] property for a Function object F is called: -* A new native ECMAScript object is created. -* Gets the value of the [[Prototype]] property of the F(Denote it PROTO_VAL). -* If PROTO_VAL is an object, sets the [[Prototype]] property of native ECMAScript object just created -* to the PROTO_VAL; -* @description: Declaring a function with "__FACTORY = function()"; -*/ - -__CUBE="cube"; - -__FACTORY = function(){}; - -__FACTORY.prototype={ shape:__CUBE, printShape:function(){return this.shape;} }; - -__device = new __FACTORY(); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__device.printShape === undefined) { - $ERROR('#1: __device.printShape !== undefined. Actual: __device.printShape ==='+__device.printShape); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__device.printShape() !== __CUBE) { - $ERROR('#2: __device.printShape() === __CUBE. Actual: __device.printShape() ==='+__device.printShape()); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A5_T1.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A5_T1.js deleted file mode 100644 index 5c68631a4..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A5_T1.js +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.2_A5_T1; -* @section: 13.2.2; -* @assertion: When the [[Construct]] property for a Function object F is called: -* A new native ECMAScript object is created. -* Invoke the [[Call]] property of F, providing native ECMAScript object just created as the this value and -* providing the argument list passed into [[Construct]] as the argument values; -* @description: Declaring a function with "function __FACTORY(arg1, arg2)"; -*/ - -__VOLUME=8; -__RED="red"; -__ID=12342; -__TOP=1.1; -__BOTTOM=0.0; -__LEFT=0.0; - - -function __FACTORY(arg1, arg2){ - this.volume=__VOLUME; - color=__RED; - this.id=arg1; - top=arg2; - this.bottom=arguments[3]; - left=arguments[4]; -}; - -__device = new __FACTORY(__ID, __TOP, __BOTTOM, __LEFT); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__device.color !== undefined) { - $ERROR('#1: __device.color === undefined. Actual: __device.color ==='+__device.color); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__device.volume !== __VOLUME) { - $ERROR('#2: __device.volume === __VOLUME. Actual: __device.volume ==='+__device.volume); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__device.top !== undefined) { - $ERROR('#3: __device.top === undefined. Actual: __device.top ==='+__device.top); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (__device.id !== __ID) { - $ERROR('#4: __device.id === __ID. Actual: __device.id ==='+__device.id); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#5 -if (__device.left !== undefined) { - $ERROR('#5: __device.left === undefined. Actual: __device.left ==='+__device.left); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#6 -if (__device.bottom !== __BOTTOM) { - $ERROR('#6: __device.bottom === __BOTTOM. Actual: __device.bottom ==='+__device.bottom); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A5_T2.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A5_T2.js deleted file mode 100644 index 6ce86db7e..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A5_T2.js +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.2_A5_T2; -* @section: 13.2.2; -* @assertion: When the [[Construct]] property for a Function object F is called: -* A new native ECMAScript object is created. -* Invoke the [[Call]] property of F, providing native ECMAScript object just created as the this value and -* providing the argument list passed into [[Construct]] as the argument values; -* @description: Declaring a function with "__FACTORY = function(arg1, arg2)"; -*/ - -__VOLUME=8; -__RED="red"; -__ID=12342; -__TOP=1.1; -__BOTTOM=0.0; -__LEFT=0.0; - - -__FACTORY = function(arg1, arg2){ - this.volume=__VOLUME; - color=__RED; - this.id=arg1; - top=arg2; - this.bottom=arguments[3]; - left=arguments[4]; -}; - -__device = new __FACTORY(__ID, __TOP, __BOTTOM, __LEFT); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__device.color !== undefined) { - $ERROR('#1: __device.color === undefined. Actual: __device.color ==='+__device.color); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__device.volume !== __VOLUME) { - $ERROR('#2: __device.volume === __VOLUME. Actual: __device.volume ==='+__device.volume); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__device.top !== undefined) { - $ERROR('#3: __device.top === undefined. Actual: __device.top ==='+__device.top); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (__device.id !== __ID) { - $ERROR('#4: __device.id === __ID. Actual: __device.id ==='+__device.id); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#5 -if (__device.left !== undefined) { - $ERROR('#5: __device.left === undefined. Actual: __device.left ==='+__device.left); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#6 -if (__device.bottom !== __BOTTOM) { - $ERROR('#6: __device.bottom === __BOTTOM. Actual: __device.bottom ==='+__device.bottom); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A6_T1.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A6_T1.js deleted file mode 100644 index 17b9e3d58..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A6_T1.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.2_A6_T1; -* @section: 13.2.2; -* @assertion: When the [[Construct]] property for a Function object F is called: -* A new native ECMAScript object is created. -* Invoke the [[Call]] property of F, providing just created native ECMAScript object as the this value and providing the argument -* list passed into [[Construct]] as the argument values. -* If Type( [[Call]] returned) is not Object then return passed as this into [[Call]] object; -* @description: Declaring a function with "__func = function(arg)"; -*/ - -__FOO="fooValue"; -__BAR="barValue"; - -__func = function(arg){ - this.foo=arg; - return 0; - this.bar=arguments[1]; -}; - -__obj = new __func(__FOO, __BAR); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__obj.foo!==__FOO) { - $ERROR('#1: __obj.foo === __FOO. Actual: __obj.foo==='+__obj.foo); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__obj.bar!==undefined) { - $ERROR('#2: __obj.bar === undefined. Actual: __obj.bar==='+__obj.bar); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A6_T2.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A6_T2.js deleted file mode 100644 index c71a1c70d..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A6_T2.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.2_A6_T2; -* @section: 13.2.2; -* @assertion: When the [[Construct]] property for a Function object F is called: -* A new native ECMAScript object is created. -* Invoke the [[Call]] property of F, providing just created native ECMAScript object as the this value and providing the argument -* list passed into [[Construct]] as the argument values. -* If Type( [[Call]] returned) is not Object then return passed as this into [[Call]] object; -* @description: Declaring a function with "function __func (arg)"; -*/ - -__FOO="fooValue"; -__BAR="barValue"; - -function __func (arg){ - this.foo=arg; - return true; - this.bar=arguments[1]; -}; - -__obj = new __func(__FOO, __BAR); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__obj.foo!==__FOO) { - $ERROR('#1: __obj.foo === __FOO. Actual: __obj.foo==='+__obj.foo); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__obj.bar!==undefined) { - $ERROR('#2: __obj.bar === undefined. Actual: __obj.bar==='+__obj.bar); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A7_T1.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A7_T1.js deleted file mode 100644 index 8caad0305..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A7_T1.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.2_A7_T1; -* @section: 13.2.2; -* @assertion: When the [[Construct]] property for a Function object F is called: -* A new native ECMAScript object is created. -* Invoke the [[Call]] property of F, providing just created native ECMAScript object as the this value and providing the argument -* list passed into [[Construct]] as the argument values. -* If Type( [[Call]] returned) is an Object then return this just as obtained object; -* @description: Declaring a function with "as __func = function(arg)"; -*/ - -__FRST="one"; -__SCND="two"; - -function __func (arg1, arg2){ - this.first=arg1; - var __obj={second:arg2}; - return __obj; - -}; - -__obj__ = new __func(__FRST, __SCND); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__obj__.first !== undefined) { - $ERROR('#1: __obj__.first === undefined. Actual: __obj__.first==='+__obj__.first); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__obj__.second !== __SCND) { - $ERROR('#2: __obj__.second === __SCND. Actual: __obj__.second ==='+__obj__.second); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A7_T2.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A7_T2.js deleted file mode 100644 index 221b5a697..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A7_T2.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.2_A7_T2; -* @section: 13.2.2; -* @assertion: When the [[Construct]] property for a Function object F is called: -* A new native ECMAScript object is created. -* Invoke the [[Call]] property of F, providing just created native ECMAScript object as the this value and providing the argument -* list passed into [[Construct]] as the argument values. -* If Type( [[Call]] returned) is an Object then return this just as obtained object; -* @description: Declaring a "function as function __func (arg)"; -*/ - -__FRST="one"; -__SCND="two"; - -__func = function(arg1, arg2){ - this.first=arg1; - var __obj={second:arg2}; - return __obj; - -}; - -__obj__ = new __func(__FRST, __SCND); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__obj__.first !== undefined) { - $ERROR('#1: __obj__.first === undefined. Actual: __obj__.first==='+__obj__.first); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__obj__.second !== __SCND) { - $ERROR('#2: __obj__.second === __SCND. Actual: __obj__.second ==='+__obj__.second); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A8_T1.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A8_T1.js deleted file mode 100644 index f4ee18a6f..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A8_T1.js +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.2_A8_T1; -* @section: 13.2.2; -* @assertion: When the [[Construct]] property for a Function object F is called: -* A new native ECMAScript object is created. -* Invoke the [[Call]] property of F, providing just created native ECMAScript object as the this value and providing the argument -* list passed into [[Construct]] as the argument values. -* If Type( [[Call]] returned) is an Function then return this just as obtained function; -* @description: Creating a function whose prototype contains "return" followed by declaration of another function -*/ - -__FRST="one"; -__SCND="two"; - -__func = function(arg1, arg2){ - this.first=arg1; - - __gunc.prop=arg2; - return __gunc; - // function declaration - function __gunc(arg){return ++arg}; - -}; - -__instance = new __func(__FRST, __SCND); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__instance.first !== undefined) { - $ERROR('#1: __instance.first === undefined. Actual: __instance.first ==='+__instance.first); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__instance.prop!==__SCND) { - $ERROR('#2: __instance.prop === __SCND. Actual: __instance.prop ==='+__instance.prop); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__instance(1)!== 2) { - $ERROR('#2: __instance(1)=== 2. Actual: __instance(1) ==='+__instance(1)); -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A8_T2.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A8_T2.js deleted file mode 100644 index a0fa961e6..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A8_T2.js +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.2_A8_T2; -* @section: 13.2.2; -* @assertion: When the [[Construct]] property for a Function object F is called: -* A new native ECMAScript object is created. -* Invoke the [[Call]] property of F, providing just created native ECMAScript object as the this value and providing the argument -* list passed into [[Construct]] as the argument values. -* If Type( [[Call]] returned) is an Function then return this just as obtained function; -* @description: Creating a function whose prototype contains declaration of another function declared as a variable; -*/ - -__FRST="one"; -__SCND="two"; - -__func = function(arg1, arg2){ - this.first=arg1; - var __gunc = function(arg){return arg+="BA"}; - __gunc.prop=arg2; - return __gunc; - -}; - -__instance = new __func(__FRST, __SCND); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__instance.first !== undefined) { - $ERROR('#1: __instance.first === undefined. Actual: __instance.first ==='+__instance.first); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__instance.prop!==__SCND) { - $ERROR('#2: __instance.prop === __SCND. Actual: __instance.prop ==='+__instance.prop); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__instance("SAM")!== "SAMBA") { - $ERROR('#2: __instance("SAM") === "SAMBA". Actual: __instance("SAM") ==='+__instance("SAM")); -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A8_T3.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A8_T3.js deleted file mode 100644 index 970df6c06..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A8_T3.js +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.2_A8_T3; -* @section: 13.2.2; -* @assertion: When the [[Construct]] property for a Function object F is called: -* A new native ECMAScript object is created. -* Invoke the [[Call]] property of F, providing just created native ECMAScript object as the this value and providing the argument -* list passed into [[Construct]] as the argument values. -* If Type( [[Call]] returned) is an Function then return this just as obtained function; -* @description: Creating a function whose prototype contains declaration of another function defined by using Function.call method; -*/ - -__FRST="one"; -__SCND="two"; - -__func = function(arg1, arg2){ - this.first=arg1; - var __gunc = Function.call(this,"arg","return ++arg;"); - __gunc.prop=arg2; - return __gunc; - -}; - -__instance = new __func(__FRST, __SCND); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__instance.first !== undefined) { - $ERROR('#1: __instance.first === undefined. Actual: __instance.first ==='+__instance.first); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__instance.prop!==__SCND) { - $ERROR('#2: __instance.prop === __SCND. Actual: __instance.prop ==='+__instance.prop); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__instance(1)!== 2) { - $ERROR('#2: __instance(1)=== 2. Actual: __instance(1) ==='+__instance(1)); -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A9.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A9.js deleted file mode 100644 index bba1a0c0d..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2.2_A9.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.2_A9; -* @section: 13.2.2; -* @assertion: Calling a function as a constructor is inadmissible as long as this.any_Function is called before it is declared; -* @description: Calling a function as a constructor -*/ - -function FACTORY(){ - this.id = 0; - - this.id = this.func(); - - this.func = function (){ - return 5; - } - -} -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try { - var obj = new FACTORY(); - $ERROR('#1: var obj = new FACTORY() lead to throwing exception'); -} catch (e) {} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2_A1_T1.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2_A1_T1.js deleted file mode 100644 index 30bc47e09..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2_A1_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2_A1_T1; -* @section: 13.2; -* @assertion: A "prototype" property is automatically created for every function; -* @description: Using "function __func(){}" as a FunctionDeclaration; -*/ - -function __func(){}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__func.prototype === undefined) { - $ERROR('#1: __func.prototype !== undefined'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2_A1_T2.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2_A1_T2.js deleted file mode 100644 index eed54fb2b..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2_A1_T2.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2_A1_T2; -* @section: 13.2; -* @assertion: A "prototype" property is automatically created for every function; -* @description: Using "var __func = function(){}" as a FunctionDeclaration; -*/ - -var __func = function(){}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__func.prototype === undefined) { - $ERROR('#1: __func.prototype !== undefined'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2_A2_T1.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2_A2_T1.js deleted file mode 100644 index 25629e9c7..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2_A2_T1.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2_A2_T1; -* @section: 13.2; -* @assertion: Nested function are admitted; -* @description: Nesting level is two; -*/ - -__JEDI="jedi"; - -function __FUNC(){ - function __GUNC(){ - return arguments[0]; - }; - - return __GUNC; -}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__FUNC()(__JEDI) !== __JEDI) { - $ERROR('#1: __FUNC()(__JEDI) === __JEDI. Actual: __FUNC()(__JEDI) ==='+__FUNC()(__JEDI)); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2_A2_T2.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2_A2_T2.js deleted file mode 100644 index 55961bb27..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2_A2_T2.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2_A2_T2; -* @section: 13.2; -* @assertion: Nested function are admitted; -* @description: Nesting level is three; -*/ - -__ROBOT="C3PO"; - -function __FUNC(){ - function __GUNC(){ - return arguments[0]; - }; - function __HUNC(){ - return __GUNC; - }; - return __HUNC; -}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__FUNC()()(__ROBOT) !== __ROBOT) { - $ERROR('#1: __FUNC()()(__ROBOT) === __ROBOT. Actual: __FUNC()()(__ROBOT) ==='+__FUNC()()(__ROBOT)); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2_A3.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2_A3.js deleted file mode 100644 index 71bd35b86..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2_A3.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2_A3; -* @section: 13.2; -* @assertion: When Function object(F) is constructed the length property of F is set to the number of formal properties specified in FormalParameterList; -* @description: Creating functions with various FormalParameterList and checking their lengths; -*/ - -function __func(){}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__func.length !== 0) { - $ERROR('#1: __func.length === 0. Actual: __func.length ==='+__func.length); -} -// -////////////////////////////////////////////////////////////////////////////// - -function __gunc(a,b,c){}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__gunc.length !== 3) { - $ERROR('#2: __gunc.length === 3. Actual: __gunc.length ==='+__gunc.length); -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2_A4_T1.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2_A4_T1.js deleted file mode 100644 index a8928f097..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2_A4_T1.js +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2_A4_T1; -* @section: 13.2; -* @assertion: When Function object(F) is constructed the following steps from 9 to 11 take place -* 9.Create a new object as would be constructed by the expression new Object(). -* 10. Set the constructor property of Result(9) to F. This property is given attributes { DontEnum }. -* 11. Set the "prototype" property of F to Result(9).; -* @description: Checking prototype, prototype.constructor properties and {DontEnum} property of a constructor. -* Using "function __func(){}" as a FunctionDeclaration; -*/ - -function __func(){}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __func.prototype !== 'object') { - $ERROR('#1: typeof __func.prototype === \'object\'. Actual: typeof __gunc.prototype ==='+typeof __gunc.prototype); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__func.prototype.constructor !== __func) { - $ERROR('#2: __func.prototype.constructor === __func. Actual: __gunc.prototype.constructor ==='+__gunc.prototype.constructor); -} -// -////////////////////////////////////////////////////////////////////////////// - -var __constructor_was__enumed; - -for (__prop in __func.prototype){ - if (__prop = 'constructor') - __constructor_was__enumed = true; -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__constructor_was__enumed) { - $ERROR('#3: __constructor_was__enumed === false. Actual: __constructor_was__enumed ==='+__constructor_was__enumed); -} -// -////////////////////////////////////////////////////////////////////////////// - - - - - diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2_A4_T2.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2_A4_T2.js deleted file mode 100644 index 78215214e..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2_A4_T2.js +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2_A4_T2; -* @section: 13.2; -* @assertion: When Function object(F) is constructed the following steps from 9 to 11 take place -* 9.Create a new object as would be constructed by the expression new Object(). -* 10. Set the constructor property of Result(9) to F. This property is given attributes { DontEnum }. -* 11. Set the "prototype" property of F to Result(9).; -* @description: Checking prototype, prototype.constructor properties and {DontEnum} property of a constructor. -* Using "var __gunc = function(){}" as a FunctionDeclaration; -*/ - -var __gunc = function(){}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __gunc.prototype !== 'object') { - $ERROR('#1: typeof __gunc.prototype === \'object\'. Actual: typeof __gunc.prototype ==='+typeof __gunc.prototype); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__gunc.prototype.constructor !== __gunc) { - $ERROR('#2: __gunc.prototype.constructor === __gunc. Actual: __gunc.prototype.constructor ==='+__gunc.prototype.constructor); -} -// -////////////////////////////////////////////////////////////////////////////// - -var __constructor_was__enumed; - -for (__prop in __gunc.prototype){ - if (__prop = 'constructor') - __constructor_was__enumed = true; -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__constructor_was__enumed) { - $ERROR('#3: __constructor_was__enumed === false. Actual: __constructor_was__enumed ==='+__constructor_was__enumed); -} -// -////////////////////////////////////////////////////////////////////////////// - - - - - diff --git a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2_A5.js b/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2_A5.js deleted file mode 100644 index 9840c93d4..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/13.2_Creating_Function_Objects/S13.2_A5.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2_A5; -* @section: 13.2, 15.3.3.1; -* @assertion: When Function object(F) is constructed -* the [[Prototype]] property of F is set to the original Function prototype object as specified in 15.3.3.1; -* @description: Function.prototype.isPrototypeOf() is used; -*/ - -function __func(){}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!(Function.prototype.isPrototypeOf(__func))) { - $ERROR('#1: Function.prototype.isPrototypeOf(__func)'); -} -// -////////////////////////////////////////////////////////////////////////////// - - -var __gunc = function(){}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (!(Function.prototype.isPrototypeOf(__gunc))) { - $ERROR('#1: Function.prototype.isPrototypeOf(__gunc)'); -} -// -////////////////////////////////////////////////////////////////////////////// - - diff --git a/tests/ES3/Conformance/13_Function_Definition/S13_A1.js b/tests/ES3/Conformance/13_Function_Definition/S13_A1.js deleted file mode 100644 index 7b649379d..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/S13_A1.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13_A1; -* @section: 13; -* @assertion: "x=function y(){}" statement does not store a reference to the new function in the varaible y(Identifier); -* @description: Checking the type of y; -*/ - -__func = function __exp__func(){return 0;}; - -//////////////////////////////////////////////// -// ////////////////////////////// -//CHECK#1 -if (typeof __func !== "function") { - $ERROR('#1: typeof __func === "function". Actual: typeof __func ==='+typeof __func); -} -// -////////////////////////////////////////////////////////////////////////////// - - - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (typeof __exp__func !== "undefined"){ - $ERROR('#2: typeof __exp__func === "undefined". Actual: typeof __exp__func ==='+typeof __exp__func); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/S13_A10.js b/tests/ES3/Conformance/13_Function_Definition/S13_A10.js deleted file mode 100644 index 14c06d335..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/S13_A10.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13_A10; -* @section: 13; -* @assertion: Function is a data; -* @description: Using function as a property of an object; -*/ - -function __ziggy__func(){return "ziggy stardust"} - -__music_box={}; - -__music_box.ziggy = __ziggy__func; - -////////////////////////////////////////////////////////////////////////////// -//CHECK# -if (typeof __music_box.ziggy !== "function") { - $ERROR('#1: typeof __music_box.ziggy === "function". Actual: typeof __music_box.ziggy ==='+typeof __music_box.ziggy); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__music_box.ziggy() !== "ziggy stardust") { - $ERROR('#2: __music_box.ziggy() === "ziggy stardust". Actual: __music_box.ziggy() ==='+__music_box.ziggy()); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/S13_A11_T1.js b/tests/ES3/Conformance/13_Function_Definition/S13_A11_T1.js deleted file mode 100644 index 299bc5552..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/S13_A11_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13_A11_T1; -* @section: 13; -* @assertion: Since arguments property has attribute { DontDelete }, only its elements can be deleted; -* @description: Returning result of "delete arguments"; -*/ - -function __func(){ return delete arguments;} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__func("A","B",1,2)) { - $ERROR('#1: arguments property has attribute { DontDelete }'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/S13_A11_T2.js b/tests/ES3/Conformance/13_Function_Definition/S13_A11_T2.js deleted file mode 100644 index 130d4c899..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/S13_A11_T2.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13_A11_T2; -* @section: 13; -* @assertion: Since arguments property has attribute { DontDelete }, only its elements can be deleted; -* @description: Checking if deleting the arguments property fails and then returning it; -*/ - -function __func(){ - delete arguments; - return arguments; -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __func("A","B",1,2) !== "object") { - $ERROR('#1: arguments property has attribute { DontDelete }'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/S13_A11_T3.js b/tests/ES3/Conformance/13_Function_Definition/S13_A11_T3.js deleted file mode 100644 index 10e879400..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/S13_A11_T3.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13_A11_T3; -* @section: 13; -* @assertion: Since arguments property has attribute { DontDelete }, only its elements can be deleted; -* @description: Deleting arguments[i] and returning result of the operation; -*/ - -function __func(){ - was_del=false; - for (i=0; i < arguments.length; i++) - was_del= was_del || delete arguments[i]; - return was_del; -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!__func("A","B",1,2)) { - $ERROR('#1: Since arguments property has attribute { DontDelete } elements of arguments can be deleted'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/S13_A11_T4.js b/tests/ES3/Conformance/13_Function_Definition/S13_A11_T4.js deleted file mode 100644 index d446882ef..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/S13_A11_T4.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13_A11_T4; -* @section: 13; -* @assertion: Since arguments property has attribute { DontDelete }, only its elements can be deleted; -* @description: Deleting arguments[i] and checking the type of arguments[i]; -*/ - -function __func(){ - is_undef=true; - for (i=0; i < arguments.length; i++) - { - delete arguments[i]; - is_undef= is_undef && (typeof arguments[i] === "undefined"); - }; - return is_undef; -}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!__func("A","B",1,2)) { - $ERROR('#1: Since arguments property has attribute { DontDelete }, but elements of arguments can be deleted'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/S13_A12_T1.js b/tests/ES3/Conformance/13_Function_Definition/S13_A12_T1.js deleted file mode 100644 index 82ff29beb..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/S13_A12_T1.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13_A12_T1; -* @section: 13; -* @assertion: Function declarations in global or function scope are {DontDelete}; -* @description: Checking if deleting a function that is declared in global scope fails; -*/ - -ALIVE="Letov is alive" - -function __func(){ - return ALIVE; -}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (delete __func) { - $ERROR('#1: delete __func returning false'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__func() !== ALIVE) { - $ERROR('#2: __func() === ALIVE. Actual: __func() ==='+__func()); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/S13_A12_T2.js b/tests/ES3/Conformance/13_Function_Definition/S13_A12_T2.js deleted file mode 100644 index 4467cdc46..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/S13_A12_T2.js +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13_A12_T2; -* @section: 13; -* @assertion: Function declarations in global or function scope are {DontDelete}; -* @description: Checking if deleting a function that is declared in function scope fails; -*/ - -ALIVE="Letov is alive" - -function __cont(){ - - function __func(){ - return ALIVE; - }; - - ////////////////////////////////////////////////////////////////////////////// - //CHECK#1 - if (delete __func) { - $ERROR('#1: delete __func returning false'); - } - // - ////////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////////// - //CHECK#2 - if (__func() !== ALIVE) { - $ERROR('#2: __func() === ALIVE. Actual: __func() ==='+__func()); - } - // - ////////////////////////////////////////////////////////////////////////////// -}; - -__cont(); diff --git a/tests/ES3/Conformance/13_Function_Definition/S13_A13_T1.js b/tests/ES3/Conformance/13_Function_Definition/S13_A13_T1.js deleted file mode 100644 index ad024f20b..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/S13_A13_T1.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13_A13_T1; -* @section: 13; -* @assertion: Deleting arguments[i] leads to breaking the connection to local reference; -* @description: Deleting arguments[i]; -*/ - -function __func(__arg){ - delete arguments[0]; - if (arguments[0] !== undefined) { - $ERROR('#1.1: arguments[0] === undefined'); - } - return __arg; -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__func(1) !== 1) { - $ERROR('#1.2: __func(1) === 1. Actual: __func(1) ==='+__func(1)); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/S13_A13_T2.js b/tests/ES3/Conformance/13_Function_Definition/S13_A13_T2.js deleted file mode 100644 index 13db07dbb..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/S13_A13_T2.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13_A13_T2; -* @section: 13; -* @assertion: Deleting arguments[i] leads to breaking the connection to local reference; -* @description: Changing arguments value and then deleting the argument; -*/ - -function __func(__arg){ - __arg = 2; - delete arguments[0]; - if (arguments[0] !== undefined) { - $ERROR('#1.1: arguments[0] === undefined'); - } - return __arg; -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__func(1) !== 2) { - $ERROR('#1.2: __func(1) === 2. Actual: __func(1) ==='+__func(1)); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/S13_A13_T3.js b/tests/ES3/Conformance/13_Function_Definition/S13_A13_T3.js deleted file mode 100644 index 870304d72..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/S13_A13_T3.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13_A13_T3; -* @section: 13; -* @assertion: Deleting arguments[i] leads to breaking the connection to local reference; -* @description: Changing argument value, deleting the argument and then defining a new value for arguments[i]; -*/ - -function __func(__arg){ - __arg = 2; - delete arguments[0]; - if (arguments[0] !== undefined) { - $ERROR('#1.1: arguments[0] === undefined'); - } - arguments[0] = "A"; - if (arguments[0] !== "A") { - $ERROR('#1.2: arguments[0] === "A"'); - } - return __arg; -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__func(1) !== 2) { - $ERROR('#1.3: __func(1) === 2. Actual: __func(1) ==='+__func(1)); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/S13_A14.js b/tests/ES3/Conformance/13_Function_Definition/S13_A14.js deleted file mode 100644 index 44b8f9f68..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/S13_A14.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13_A14; -* @section: 13; -* @assertion: Unicode symbols in function name are allowed; -* @description: Defining function name with unicode symbols; -*/ - -eval("function __func\u0041(__arg){return __arg;};"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __funcA !== "function") { - $ERROR('#1: unicode symbols in function name are allowed'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/S13_A15_T1.js b/tests/ES3/Conformance/13_Function_Definition/S13_A15_T1.js deleted file mode 100644 index e9f6a8514..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/S13_A15_T1.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13_A15_T1; -* @section: 13; -* @assertion: ''arguments'' variable overrides ActivationObject.arguments; -* @description: Declaring a function with "__func(arguments)"; -*/ - -function __func(arguments){ - return arguments; -}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__func(42) !== 42) { - $ERROR('#1: "arguments" variable overrides ActivationObject.arguments'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/S13_A15_T2.js b/tests/ES3/Conformance/13_Function_Definition/S13_A15_T2.js deleted file mode 100644 index b86409a57..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/S13_A15_T2.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13_A15_T2; -* @section: 13; -* @assertion: ''arguments'' variable overrides ActivationObject.arguments; -* @description: Overriding arguments within functions body; -*/ - -THE_ANSWER="Answer to Life, the Universe, and Everything"; - -function __func(){ - var arguments = THE_ANSWER; - return arguments; -}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__func(42,42,42) !== THE_ANSWER) { - $ERROR('#1: "arguments" variable overrides ActivationObject.arguments'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/S13_A15_T3.js b/tests/ES3/Conformance/13_Function_Definition/S13_A15_T3.js deleted file mode 100644 index 502dc1c94..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/S13_A15_T3.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13_A15_T3; -* @section: 13; -* @assertion: ''arguments'' variable overrides ActivationObject.arguments; -* @description: Declaring a variable named with "arguments" without a function; -*/ - -THE_ANSWER="Answer to Life, the Universe, and Everything"; - -var arguments = THE_ANSWER; - -function __func(arguments){ - return arguments; - -}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __func() !== "undefined") { - $ERROR('#1: typeof __func() === "undefined". Actual: typeof __func() ==='+typeof __func()); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__func("The Ultimate Question") !== "The Ultimate Question") { - $ERROR('#2: __func("The Ultimate Question") === "The Ultimate Question". Actual: __func("The Ultimate Question")==='+__func("The Ultimate Question")); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/S13_A15_T4.js b/tests/ES3/Conformance/13_Function_Definition/S13_A15_T4.js deleted file mode 100644 index 47a7045ac..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/S13_A15_T4.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13_A15_T4; -* @section: 13; -* @assertion: ''arguments'' variable overrides ActivationObject.arguments; -* @description: Declaring a variable named with "arguments" and following a "return" statement within a function body; -*/ - -THE_ANSWER="Answer to Life, the Universe, and Everything"; - -function __func(){ - return typeof arguments; - var arguments = THE_ANSWER; -}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__func(42,42,42) !== "object") { - $ERROR('#1: __func(42,42,42) === "object". Actual: __func(42,42,42)==='+__func(42,42,42)); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/S13_A15_T5.js b/tests/ES3/Conformance/13_Function_Definition/S13_A15_T5.js deleted file mode 100644 index 636e3833a..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/S13_A15_T5.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13_A15_T5; -* @section: 13; -* @assertion: ''arguments'' variable overrides ActivationObject.arguments; -* @description: Creating a variable named with "arguments" without a function; -*/ - -THE_ANSWER="Answer to Life, the Universe, and Everything"; - -var arguments = THE_ANSWER; - -function __func(){ - return arguments; -}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if ( __func() === THE_ANSWER) { - $ERROR('#1: __func() !== THE_ANSWER'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__func("The Ultimate Question") === "The Ultimate Question") { - $ERROR('#2: __func("The Ultimate Question") !== "The Ultimate Question"'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/S13_A16.js b/tests/ES3/Conformance/13_Function_Definition/S13_A16.js deleted file mode 100644 index 2c4da1b75..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/S13_A16.js +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13_A16; -* @section: 13; -* @assertion: Any separators are admitted between declaration chunks; -* @description: Inserting separators between declaration chunks; -*/ - -function -x -( -) -{ -} -; - -x(); - -function y ( ) {}; - -y(); - -function - -z - -( - -) - -{ - -} - -; - -z(); - -eval("function\u0009\u2029w(\u000C)\u00A0{\u000D};"); - -w(); diff --git a/tests/ES3/Conformance/13_Function_Definition/S13_A17_T1.js b/tests/ES3/Conformance/13_Function_Definition/S13_A17_T1.js deleted file mode 100644 index c882d68e7..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/S13_A17_T1.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13_A17_T1; -* @section: 13; -* @assertion: Function call cannot appear in the program before the FunctionExpression appears; -* @description: Trying to call a function before the FunctionExpression appears; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try{ - var __result = __func(); - $FAIL("#1: var __result = __func() lead to throwing exception"); -} catch(e) { -} -// -////////////////////////////////////////////////////////////////////////////// - -var __func = function (){return "ONE";}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -var __result = __func(); -if (__result !== "ONE") { - $ERROR('#2: __result === "ONE". Actual: __result ==='+__result); -} -// -////////////////////////////////////////////////////////////////////////////// - -__func = function (){return "TWO";}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -var __result = __func(); -if (__result !== "TWO") { - $ERROR('#3: __result === "TWO". Actual: __result ==='+__result); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/S13_A17_T2.js b/tests/ES3/Conformance/13_Function_Definition/S13_A17_T2.js deleted file mode 100644 index 8070d5b18..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/S13_A17_T2.js +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13_A17_T2; -* @section: 13; -* @assertion: Function call cannot appear in the program before the FunctionExpression appears; -* @description: Trying to call a function before the FunctionExpression appears and then using the FunctionExpression one more time; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try{ - var __result = __func(); - $ERROR("#1: var __result = __func() lead to throwing exception"); -} catch(e) { - $PRINT(e) -} -// -////////////////////////////////////////////////////////////////////////////// - -// now we reach the __func overwriting by new expression -var __func = function __func(){return "ONE";}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -var __result = __func(); -if (__result !== "ONE") { - $ERROR('#2: __result === "ONE". Actual: __result ==='+__result); -} -// -////////////////////////////////////////////////////////////////////////////// - -__func = function __func(){return "TWO";}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -var __result = __func(); -if (__result !== "TWO") { - $ERROR('#3: __result === "TWO". Actual: __result ==='+__result); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/S13_A18.js b/tests/ES3/Conformance/13_Function_Definition/S13_A18.js deleted file mode 100644 index d16252c92..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/S13_A18.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13_A18; -* @section: 13; -* @assertion: Closures are admitted; -* @description: Using a function declaration as a function parameter; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof sinx !== 'undefined') { - $ERROR('#1: typeof sinx === \'undefined\'. Actual: typeof sinx ==='+typeof sinx); -} -// -////////////////////////////////////////////////////////////////////////////// - -var __val = function derivative(f, dx) { - return function(x) { - return (f(x + dx) - f(x)) / dx; - }; -}(function sinx(x){return Math.sin(x);},.0001)(0.5); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (typeof sinx !== 'undefined') { - $ERROR('#2: typeof sinx === \'undefined\'. Actual: typeof sinx ==='+typeof sinx); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/S13_A19_T1.js b/tests/ES3/Conformance/13_Function_Definition/S13_A19_T1.js deleted file mode 100644 index b686b19e2..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/S13_A19_T1.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13_A19_T1; -* @section: 13,13.2; -* @assertion: "var" does not override function declaration; -* @description: Creating a function and a variable with identical Identifiers in global scope; -*/ - -// since "var" does not override function declaration __decl is set to function -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __decl !== "function") { - $ERROR('#1: typeof __decl === "function". Actual: typeof __decl ==='+typeof __decl); -} -// -////////////////////////////////////////////////////////////////////////////// - -var __decl = 1; - -//since statement was evaluted __decl turns to 1 from function -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__decl !== 1) { - $ERROR('#2: __decl === 1. Actual: __decl ==='+__decl); -} -// -////////////////////////////////////////////////////////////////////////////// - -function __decl(){return 1;} diff --git a/tests/ES3/Conformance/13_Function_Definition/S13_A19_T2.js b/tests/ES3/Conformance/13_Function_Definition/S13_A19_T2.js deleted file mode 100644 index b3f8d3be3..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/S13_A19_T2.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13_A19_T2; -* @section: 13,13.2; -* @assertion: "var" does not override function declaration; -* @description: Creating a function and a variable with identical Identifiers within function scope; -*/ - -(function (){ - - // since "var" does not override function declaration __decl is set to function - ////////////////////////////////////////////////////////////////////////////// - //CHECK#1 - if (typeof __decl !== "function") { - $ERROR('#1: typeof __decl === "function". Actual: typeof __decl ==='+typeof __decl); - } - // - ////////////////////////////////////////////////////////////////////////////// - - var __decl = 1; - - //since statement was evaluted __decl turns to 1 from function - ////////////////////////////////////////////////////////////////////////////// - //CHECK#2 - if (__decl !== 1) { - $ERROR('#2: __decl === 1. Actual: __decl ==='+__decl); - } - // - ////////////////////////////////////////////////////////////////////////////// - - function __decl(){return 1;} -})(); diff --git a/tests/ES3/Conformance/13_Function_Definition/S13_A2_T1.js b/tests/ES3/Conformance/13_Function_Definition/S13_A2_T1.js deleted file mode 100644 index bb00e6be4..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/S13_A2_T1.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13_A2_T1; -* @section: 13; -* @assertion: function must be evaluated inside the expression; -* @description: Defining function body with "return arg"; -*/ - -var x = (function __func(arg){return arg})(1); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (x !== 1) { - $ERROR('#1: x === 1. Actual: x ==='+x); -} - -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (typeof __func !== 'undefined') { - $ERROR('#2: typeof __func === \'undefined\'. Actual: typeof __func ==='+typeof __func); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/S13_A2_T2.js b/tests/ES3/Conformance/13_Function_Definition/S13_A2_T2.js deleted file mode 100644 index 1d929c9c8..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/S13_A2_T2.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13_A2_T2; -* @section: 13; -* @assertion: function must be evaluated inside the expression; -* @description: Defining function body with "return arg + arguments[1]"; -*/ - -var x = (function __func(arg){return arg + arguments[1]})(1,"1"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (x !== "11") { - $ERROR('#1: x === "11". Actual: x ==='+x); -} - -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (typeof __func !== 'undefined') { - $ERROR('#2: typeof __func === \'undefined\'. Actual: typeof __func ==='+typeof __func); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/S13_A2_T3.js b/tests/ES3/Conformance/13_Function_Definition/S13_A2_T3.js deleted file mode 100644 index dd9c3379a..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/S13_A2_T3.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13_A2_T3; -* @section: 13; -* @assertion: function must be evaluated inside the expression; -* @description: Defining function body with "return arguments[0] +"-"+ arguments[1]"; -*/ - -var x = (function __func(){return arguments[0] +"-"+ arguments[1]})("Obi","Wan"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (x !== "Obi-Wan") { - $ERROR('#1: x === "Obi-Wan". Actual: x ==='+x); -} - -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (typeof __func !== 'undefined') { - $ERROR('#2: typeof __func === \'undefined\'. Actual: typeof __func ==='+typeof __func); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/S13_A3_T1.js b/tests/ES3/Conformance/13_Function_Definition/S13_A3_T1.js deleted file mode 100644 index a3d6a666c..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/S13_A3_T1.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13_A3_T1; -* @section: 13; -* @assertion: The Identifier in a FunctionExpression can be referenced from inside the FunctionExpression's FunctionBody to allow the function calling itself recursively; -* @description: Creating a recursive function that calculates factorial, as a variable. -* Function call itself by it`s name; -*/ - -__func = function __exp__func(arg){ - if (arg === 1) { - return arg; - } else { - return __exp__func(arg-1)*arg; - } -}; - -var fact_of_3 = __func(3); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (fact_of_3 !== 6) { - $ERROR("#1: fact_of_3 === 6. Actual: fact_of_3 ==="+fact_of_3); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/S13_A3_T2.js b/tests/ES3/Conformance/13_Function_Definition/S13_A3_T2.js deleted file mode 100644 index 63381b275..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/S13_A3_T2.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13_A3_T2; -* @section: 13; -* @assertion: The Identifier in a FunctionExpression can be referenced from inside the FunctionExpression's FunctionBody to allow the function calling itself recursively; -* @description: Creating a recursive function that calculates factorial, as a variable. -* Function calls itself by the name of the variable; -*/ - -__func = function (arg){ - if (arg === 1) { - return arg; - } else { - return __func(arg-1)*arg; - } -}; - -var fact_of_3 = __func(3); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (fact_of_3 !== 6) { - $ERROR("#1: fact_of_3 === 6. Actual: fact_of_3 ==="+fact_of_3); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/S13_A3_T3.js b/tests/ES3/Conformance/13_Function_Definition/S13_A3_T3.js deleted file mode 100644 index 0f9b72eac..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/S13_A3_T3.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13_A3_T3; -* @section: 13; -* @assertion: The Identifier in a FunctionExpression can be referenced from inside the FunctionExpression's FunctionBody to allow the function calling itself recursively; -* @description: Creating simple recursive function that calculates factorial; -*/ - -function __func(arg){ - if (arg === 1) { - return arg; - } else { - return __func(arg-1)*arg; - } -}; - -var fact_of_3 = __func(3); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (fact_of_3 !== 6) { - $ERROR("#1: fact_of_3 === 6. Actual: fact_of_3 ==="+fact_of_3); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/S13_A4_T1.js b/tests/ES3/Conformance/13_Function_Definition/S13_A4_T1.js deleted file mode 100644 index 332c26855..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/S13_A4_T1.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13_A4_T1; -* @section: 13; -* @assertion: The production FunctionDeclaration: "function Identifier ( FormalParameterList_opt ) { FunctionBody }" is processed by function declarations; -* @description: Declaring a function that returns string; -*/ - -function __func(){return "zig-zig-sputnik";}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __func !== "function") { - $ERROR('#1: typeof __func === "function". Actual: typeof __func ==='+typeof __func); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__func() !== "zig-zig-sputnik") { - $ERROR('#2: __func() === "zig-zig-sputnik". Actual: __func() ==='+__func()); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/S13_A4_T2.js b/tests/ES3/Conformance/13_Function_Definition/S13_A4_T2.js deleted file mode 100644 index ce4678332..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/S13_A4_T2.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13_A4_T2; -* @section: 13; -* @assertion: The production FunctionDeclaration: "function Identifier ( FormalParameterList_opt ) { FunctionBody }" is processed by function declarations; -* @description: Declaring a function that uses prefix increment operator within its "return" Expression; -*/ - -function __func(arg){return ++arg;}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __func !== "function") { - $ERROR('#1: typeof __func === "function". Actual: typeof __func ==='+typeof __func); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__func(1) !== 2) { - $ERROR('#2: __func(1) === 2. Actual: __func(1) ==='+__func(1)); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/S13_A4_T3.js b/tests/ES3/Conformance/13_Function_Definition/S13_A4_T3.js deleted file mode 100644 index 8f6240227..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/S13_A4_T3.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13_A4_T3; -* @section: 13; -* @assertion: The production FunctionDeclaration: "function Identifier ( FormalParameterList_opt ) { FunctionBody }" is processed by function declarations; -* @description: Declaring a function that uses arithmetical operators within its "return" Expression; -*/ - -function __func(arg1, arg2, arg3){return arg1+=(arg2+=arg3);}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __func !== "function") { - $ERROR('#1: typeof __func === "function". Actual: typeof __func ==='+typeof __func); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__func(10, 20, 30) !== 60) { - $ERROR('#2: __func(10, 20, 30) === 60. Actual: __func(10,20,30) ==='+__func(10,20,30)); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/S13_A4_T4.js b/tests/ES3/Conformance/13_Function_Definition/S13_A4_T4.js deleted file mode 100644 index 7609bba96..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/S13_A4_T4.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13_A4_T4; -* @section: 13; -* @assertion: The production FunctionDeclaration: "function Identifier ( FormalParameterList_opt ) { FunctionBody }" is processed by function declarations; -* @description: Declaring a function that uses strings concatenaion opeator within its "return" Expression; -*/ - -function __func(){return arguments[0].name + " " + arguments[0].surname;}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __func !== "function") { - $ERROR('#1: typeof __func === "function". Actual: typeof __func ==='+typeof __func); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__func({name:'fox', surname:'malder'}) !== "fox malder") { - $ERROR('#2: __func({name:\'fox\', surname:\'malder\'}) === "fox malder". Actual: __func({name:\'fox\', surname:\'malder\'}) ==='+__func({name:'fox', surname:'malder'})); -} -// -////////////////////////////////////////////////////////////////////////////// - -function func__(arg){return arg.name + " " + arg.surname;}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (typeof func__ !== "function") { - $ERROR('#3: typeof func__ === "function". Actual: typeof __func ==='+typeof __func); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (func__({name:'john', surname:'lennon'}) !== "john lennon") { - $ERROR('#4: func__({name:\'john\', surname:\'lennon\'}) === "john lennon". Actual: __func({name:\'john\', surname:\'lennon\'}) ==='+__func({name:'john', surname:'lennon'})); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/S13_A5.js b/tests/ES3/Conformance/13_Function_Definition/S13_A5.js deleted file mode 100644 index 34ce13e00..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/S13_A5.js +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13_A5; -* @section: 13, 10.1.2; -* @assertion: Only FormalParameterList as arguments list is allowed; -* @description: Trying to use [arg1, arg2, arg3], (arg1, arg2, arg3), etc. as a FormalParameterList; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try{ - eval("function __func([arg1, arg2, arg3]){return arguments.length;}"); - $ERROR('#1: eval("function __func([arg1, arg2, arg3]){return arguments.length;}") lead to throwing exception'); -} catch(e){ - if(!(e instanceof SyntaxError)){ - $ERROR('#1.1: eval("function __func([arg1, arg2, arg3]){return arguments.length;}") lead to throwing exception of SyntaxError. Actual: exception is '+e); - } -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -try{ - eval("function __func((arg1, arg2, arg3)){return arguments.length;}"); - $ERROR('#2: eval("function __func((arg1, arg2, arg3)){return arguments.length;}") lead to throwing exception') -} catch(e){ - if(!(e instanceof SyntaxError)){ - $ERROR('#2.1: eval("function __func((arg1, arg2, arg3)){return arguments.length;}") lead to throwing exception of SyntaxError. Actual: exception is '+e); - } -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -try{ - eval("function __func(arg1, arg2, arg3,){return arguments.length;}"); - $ERROR('#3: eval("function __func(arg1, arg2, arg3,){return arguments.length;}") lead to throwing exception') -} catch(e){ - if(!(e instanceof SyntaxError)){ - $ERROR('#3.1: eval("function __func(arg1, arg2, arg3,){return arguments.length;}") lead to throwing exception of SyntaxError. Actual: exception is '+e); - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/S13_A6_T1.js b/tests/ES3/Conformance/13_Function_Definition/S13_A6_T1.js deleted file mode 100644 index 350a52cda..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/S13_A6_T1.js +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13_A6_T1; -* @section: 13; -* @assertion: FunctionDeclaration can be overrided by other FunctionDeclaration with the same Identifier; -* @description: Duplicating function declaration; -*/ - -function __func(){return 1}; - -__store__func = __func; - - __1 = __func(); - - function __func(){return 'A'}; - - __A = __func(); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__store__func !== __func) { - $ERROR('#1: __store__func === __func. Actual: __store__func ==='+__store__func); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__1 !== __A) { - $ERROR('#2: __1 === __A. Actual: __1 ==='+__1); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/S13_A6_T2.js b/tests/ES3/Conformance/13_Function_Definition/S13_A6_T2.js deleted file mode 100644 index fd2fcb83d..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/S13_A6_T2.js +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13_A6_T2; -* @section: 13; -* @assertion: FunctionDeclaration can be overrided by other FunctionDeclaration with the same Identifier; -* @description: Calling a function before it is declared one more time; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try{ - var __result = __func(); -} catch(e) { - $FAIL("#1: Function call can appears in the program before the FunctionDeclaration appears"); -} -if (__result !== "SECOND") { - $ERROR('#1.1: __result === "SECOND". Actual: __result ==='+__result); -} -// -////////////////////////////////////////////////////////////////////////////// - -function __func(){return "FIRST";}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -__result = __func(); -if (__result !== "SECOND") { - $ERROR('#2: __result === "SECOND". Actual: __result ==='+__result); -} -// -////////////////////////////////////////////////////////////////////////////// - -function __func(){return "SECOND";}; diff --git a/tests/ES3/Conformance/13_Function_Definition/S13_A7_T1.js b/tests/ES3/Conformance/13_Function_Definition/S13_A7_T1.js deleted file mode 100644 index df5614109..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/S13_A7_T1.js +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13_A7_T1; -* @section: 13; -* @assertion: The FunctionBody must be SourceElements; -* @description: Using only SourceElements within the FunctionBody; -*/ - -function __func(){'ground control to major tom'}; -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __func !== "function") { - $ERROR('#1: typeof __func === "function". Actual: typeof __func ==='+typeof __func); -} -// -////////////////////////////////////////////////////////////////////////////// - -function __func__2(){b}; -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (typeof __func__2 !== "function") { - $ERROR('#2: typeof __func__2 === "function". Actual: typeof __func__2 ==='+typeof __func__2); -} -// -////////////////////////////////////////////////////////////////////////////// - -function __func__3(){1}; -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (typeof __func__3 !== "function") { - $ERROR('#3: typeof __func__3 === "function". Actual: typeof __func__3 ==='+typeof __func__3); -} -// -////////////////////////////////////////////////////////////////////////////// - -function __func__4(){1+c}; -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (typeof __func__4 !== "function") { - $ERROR('#4: typeof __func__4 === "function". Actual: typeof __func__4 ==='+typeof __func__4); -} -// -////////////////////////////////////////////////////////////////////////////// - -function __func__5(){inc(d)}; -////////////////////////////////////////////////////////////////////////////// -//CHECK#5 -if (typeof __func__5 !== "function") { - $ERROR('#5: typeof __func__5 === "function". Actual: typeof __func__5 ==='+typeof __func__5); -} -// -////////////////////////////////////////////////////////////////////////////// - -function __func__6(){var \u0042 = 1;}; -////////////////////////////////////////////////////////////////////////////// -//CHECK#6 -if (typeof __func__6 !== "function") { - $ERROR('#6: typeof __func__6 === "function". Actual: typeof __func__6 ==='+typeof __func__6); -} -// -////////////////////////////////////////////////////////////////////////////// - -//function __func__7(){var \u003d = 1;}; -//////////////////////////////////////////////////////////////////////////////// -////CHECK#7 -//if (typeof __func__7 !== "function") { -// $ERROR('#7: The FunctionBody must be SourceElements'); -//} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/S13_A7_T2.js b/tests/ES3/Conformance/13_Function_Definition/S13_A7_T2.js deleted file mode 100644 index 54d006747..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/S13_A7_T2.js +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13_A7_T2; -* @section: 13; -* @assertion: The FunctionBody must be SourceElements; -* @description: Inserting elements that is different from SourceElements into the FunctionBody; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try{ - eval("function __func(){/ ABC}"); - $ERROR('#1: eval("function __func(){/ ABC}") lead to throwing exception'); -} catch(e){ - if(!(e instanceof SyntaxError)){ - $ERROR('#1.1: eval("function __func(){/ ABC}") lead to throwing exception of SyntaxError. Actual: exception is '+e); - } -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -try{ - eval("function __func(){&1}"); - $ERROR('#3: eval("function __func(){&1}") lead to throwing exception'); -} catch(e){ - if(!(e instanceof SyntaxError)){ - $ERROR('#3.1: eval("function __func(){&1}") lead to throwing exception of SyntaxError. Actual: exception is '+e); - } -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -try{ - eval("function __func(){# ABC}"); - $ERROR('#4: eval("function __func(){# ABC}") lead to throwing exception'); -} catch(e){ - if(!(e instanceof SyntaxError)){ - $ERROR('#4.1: eval("function __func(){# ABC}") lead to throwing exception of SyntaxError. Actual: exception is '+e); - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/13_Function_Definition/S13_A7_T3.js b/tests/ES3/Conformance/13_Function_Definition/S13_A7_T3.js deleted file mode 100644 index 1fef1dff8..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/S13_A7_T3.js +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13_A7_T3; -* @section: 13; -* @assertion: The FunctionBody must be SourceElements; -* @description: Checking if execution of "function __func(){\A\B\C}" fails; -* @negative; -*/ - -function __func(){\A\B\C}; diff --git a/tests/ES3/Conformance/13_Function_Definition/S13_A8_T1.js b/tests/ES3/Conformance/13_Function_Definition/S13_A8_T1.js deleted file mode 100644 index 941035b32..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/S13_A8_T1.js +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13_A8_T1; -* @section: 13; -* @assertion: Arguments property of activation object contains real params to be passed; -* @description: Creating a function declared with "function __func(param1, param2, param3)" and using arguments.length property in order to perform the test; -*/ - - function __func(param1, param2, param3) { - return arguments.length; - } - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__func('A') !== 1) { - $ERROR('#1: __func(\'A\') === 1. Actual: __func(\'A\') ==='+__func('A')); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__func('A', 'B', 1, 2,__func) !== 5) { - $ERROR('#2: __func(\'A\', \'B\', 1, 2,__func) === 5. Actual: __func(\'A\', \'B\', 1, 2,__func) ==='+__func('A', 'B', 1, 2,__func)); -} -// -////////////////////////////////////////////////////////////////////////////// - - - diff --git a/tests/ES3/Conformance/13_Function_Definition/S13_A8_T2.js b/tests/ES3/Conformance/13_Function_Definition/S13_A8_T2.js deleted file mode 100644 index 8d15af599..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/S13_A8_T2.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13_A8_T2; -* @section: 13; -* @assertion: Arguments property of activation object contains real params to be passed; -* @description: Creating a function with no parameters and using arguments.length property in order to perform the test; -*/ - - function __func() { - return arguments.length; - } - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__func('A') !== 1) { - $ERROR('#1: __func(\'A\') === 1. Actual: __func(\'A\') ==='+__func('A')); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__func('A', 'B', 1, 2,__func) !== 5) { - $ERROR('#2: __func(\'A\', \'B\', 1, 2,__func) === 5. Actual: __func(\'A\', \'B\', 1, 2,__func) ==='+__func('A', 'B', 1, 2,__func)); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__func() !== 0) { - $ERROR('#3: __func() === 0. Actual: __func() ==='+__func()); -} -// -////////////////////////////////////////////////////////////////////////////// - - - diff --git a/tests/ES3/Conformance/13_Function_Definition/S13_A9.js b/tests/ES3/Conformance/13_Function_Definition/S13_A9.js deleted file mode 100644 index 9e8d73218..000000000 --- a/tests/ES3/Conformance/13_Function_Definition/S13_A9.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13_A9; -* @section: 13; -* @assertion: Function can be passed as argument; -* @description: Using function as argument of another function; -*/ - -function __func__INC(arg){return arg + 1;}; -function __func__MULT(incrementator, arg, mult){ return incrementator(arg)*mult; }; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__func__MULT(__func__INC, 2, 2) !== 6) { - $ERROR('#1: function can be passed as argument'); -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/14_Program/S14_A1.js b/tests/ES3/Conformance/14_Program/S14_A1.js deleted file mode 100644 index e651dd787..000000000 --- a/tests/ES3/Conformance/14_Program/S14_A1.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S14_A1; -* @section: 14; -* @assertion: FunctionExpression must be localed in a reacheable fragment of the program; -* @description: Declaring a function within an "if" Expression; -*/ - -THERE = "I'm there"; -HERE = "I'm here"; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if ( __func !== undefined) { - $ERROR('#1: __func === undefined. Actual: __func ==='+ __func ); -} -// -////////////////////////////////////////////////////////////////////////////// - -if (true){ - var __func = function(){return HERE;}; -} else { - var __func = function (){return THERE;}; -}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__func() !== HERE) { - $ERROR('#2: __func() === HERE. Actual: __func() ==='+ __func() ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/14_Program/S14_A2.js b/tests/ES3/Conformance/14_Program/S14_A2.js deleted file mode 100644 index a459567ab..000000000 --- a/tests/ES3/Conformance/14_Program/S14_A2.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S14_A2; -* @section: 14; -* @assertion: FunctionDeclaration cannot be localed inside an Expression; -* @description: Declaring a function within an "if" Expression; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof f !== 'undefined') { - $ERROR('#1: typeof f === \'undefined\'. Actual: typeof f ==='+ typeof f ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (function f(arg){ - if (arg===0) - return 1; - else - return f(arg-1)*arg; -}(3)!==6) { - $ERROR('#2: FunctionDeclaration cannot be localed inside an Expression'); -}; -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/14_Program/S14_A3.js b/tests/ES3/Conformance/14_Program/S14_A3.js deleted file mode 100644 index 65a49db9f..000000000 --- a/tests/ES3/Conformance/14_Program/S14_A3.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S14_A3; -* @section: 14; -* @assertion: Global FunctionDeclaration cannot be defined within the body of another FunctionDeclaration; -* @description: Declaring a function within the body of another function; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __func !== "function") { - $ERROR('#1: typeof __func === "function". Actual: typeof __func ==='+ typeof __func ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (typeof __gunc !== "undefined") { - $ERROR('#2: typeof __gunc === "undefined". Actual: typeof __gunc ==='+ typeof __gunc ); -} -// -////////////////////////////////////////////////////////////////////////////// - -function __func(){ - function __gunc(){return true}; -} diff --git a/tests/ES3/Conformance/14_Program/S14_A5_T1.js b/tests/ES3/Conformance/14_Program/S14_A5_T1.js deleted file mode 100644 index da4a1fbeb..000000000 --- a/tests/ES3/Conformance/14_Program/S14_A5_T1.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S14_A5_T1; -* @section: 14; -* @assertion: The Identifer within a FunctionDeclaration can be written in both letters and unicode; -* @description: Declaring a function with "function __\u0066\u0075\u006e\u0063(){return "both"}"; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__func() !== "both") { - $ERROR('#1: __func() === "both". Actual: __func() ==='+ __func() ); -} -// -////////////////////////////////////////////////////////////////////////////// - -function __func(){return "ascii"}; -function \u005f\u005f\u0066\u0075\u006e\u0063(){return "unicode"};//__func in unicode -function __\u0066\u0075\u006e\u0063(){return "both"};//__func in unicode diff --git a/tests/ES3/Conformance/14_Program/S14_A5_T2.js b/tests/ES3/Conformance/14_Program/S14_A5_T2.js deleted file mode 100644 index 2bbe0c9c6..000000000 --- a/tests/ES3/Conformance/14_Program/S14_A5_T2.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S14_A5_T2; -* @section: 14; -* @assertion: The Identifer within a FunctionDeclaration can be written in both letters and unicode; -* @description: Declaring a function with "function \u005f\u005f\u0066\u0075\u006e\u0063(){return "unicode"}"; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__func() !== "unicode") { - $ERROR('#1: __func() === "unicode". Actual: __func() ==='+ __func() ); -} -// -////////////////////////////////////////////////////////////////////////////// - -function __func(){return "ascii"}; -function \u005f\u005f\u0066\u0075\u006e\u0063(){return "unicode"};//__func in unicode diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.1_Patterns/S15.10.1_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.1_Patterns/S15.10.1_A1_T1.js deleted file mode 100644 index dcb07dec9..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.1_Patterns/S15.10.1_A1_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.1_A1_T1; -* @section: 15.10.1; -* @assertion: RegExp syntax errors must be caught when matcher(s) compiles; -* @description: Tested RegExp is "a**"; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: new RegExp("a**") throw SyntaxError. Actual: ' + (new RegExp("a**"))); -} catch (e) { - if ((e instanceof SyntaxError !== true)) { - $ERROR('#1.2: new RegExp("a**") throw SyntaxError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.1_Patterns/S15.10.1_A1_T10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.1_Patterns/S15.10.1_A1_T10.js deleted file mode 100644 index a4d4fae97..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.1_Patterns/S15.10.1_A1_T10.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.1_A1_T10; -* @section: 15.10.1; -* @assertion: RegExp syntax errors must be caught when matcher(s) compiles; -* @description: Tested RegExp is "++a"; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: new RegExp("++a") throw SyntaxError. Actual: ' + (new RegExp("++a"))); -} catch (e) { - if ((e instanceof SyntaxError) !== true) { - $ERROR('#1.2: new RegExp("++a") throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.1_Patterns/S15.10.1_A1_T11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.1_Patterns/S15.10.1_A1_T11.js deleted file mode 100644 index 4e7f58b9d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.1_Patterns/S15.10.1_A1_T11.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.1_A1_T11; -* @section: 15.10.1; -* @assertion: RegExp syntax errors must be caught when matcher(s) compiles; -* @description: Tested RegExp is "?a"; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: new RegExp("?a") throw SyntaxError. Actual: ' + (new RegExp("?a"))); -} catch (e) { - if ((e instanceof SyntaxError) !== true) { - $ERROR('#1.2: new RegExp("?a") throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.1_Patterns/S15.10.1_A1_T12.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.1_Patterns/S15.10.1_A1_T12.js deleted file mode 100644 index b8e819908..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.1_Patterns/S15.10.1_A1_T12.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.1_A1_T12; -* @section: 15.10.1; -* @assertion: RegExp syntax errors must be caught when matcher(s) compiles; -* @description: Tested RegExp is "??a"; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: new RegExp("??a") throw SyntaxError. Actual: ' + (new RegExp("??a"))); -} catch (e) { - if ((e instanceof SyntaxError) !== true) { - $ERROR('#1.2: new RegExp("??a") throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.1_Patterns/S15.10.1_A1_T13.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.1_Patterns/S15.10.1_A1_T13.js deleted file mode 100644 index 37d8aeeef..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.1_Patterns/S15.10.1_A1_T13.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.1_A1_T13; -* @section: 15.10.1; -* @assertion: RegExp syntax errors must be caught when matcher(s) compiles; -* @description: Tested RegExp is "x{1}{1,}"; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: new RegExp("x{1}{1,}") throw SyntaxError. Actual: ' + (new RegExp("x{1}{1,}"))); -} catch (e) { - if ((e instanceof SyntaxError) !== true) { - $ERROR('#1.2: new RegExp("x{1}{1,}") throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.1_Patterns/S15.10.1_A1_T14.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.1_Patterns/S15.10.1_A1_T14.js deleted file mode 100644 index 3d7340c61..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.1_Patterns/S15.10.1_A1_T14.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.1_A1_T14; -* @section: 15.10.1; -* @assertion: RegExp syntax errors must be caught when matcher(s) compiles; -* @description: Tested RegExp is "x{1,2}{1}"; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: new RegExp("x{1,2}{1}") throw SyntaxError. Actual: ' + (new RegExp("x{1,2}{1}"))); -} catch (e) { - if ((e instanceof SyntaxError) !== true) { - $ERROR('#1.2: new RegExp("x{1,2}{1}") throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.1_Patterns/S15.10.1_A1_T15.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.1_Patterns/S15.10.1_A1_T15.js deleted file mode 100644 index 6018b7137..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.1_Patterns/S15.10.1_A1_T15.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.1_A1_T15; -* @section: 15.10.1; -* @assertion: RegExp syntax errors must be caught when matcher(s) compiles; -* @description: Tested RegExp is "x{1,}{1}"; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: new RegExp("x{1,}{1}") throw SyntaxError. Actual: ' + (new RegExp("x{1,}{1}"))); -} catch (e) { - if ((e instanceof SyntaxError) !== true) { - $ERROR('#1.2: new RegExp("x{1,}{1}") throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.1_Patterns/S15.10.1_A1_T16.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.1_Patterns/S15.10.1_A1_T16.js deleted file mode 100644 index 2253bc812..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.1_Patterns/S15.10.1_A1_T16.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.1_A1_T16; -* @section: 15.10.1; -* @assertion: RegExp syntax errors must be caught when matcher(s) compiles; -* @description: Tested RegExp is "x{0,1}{1,}"; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: new RegExp("x{0,1}{1,}") throw SyntaxError. Actual: ' + (new RegExp("x{0,1}{1,}"))); -} catch (e) { - if ((e instanceof SyntaxError) !== true) { - $ERROR('#1.2: new RegExp("x{0,1}{1,}") throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.1_Patterns/S15.10.1_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.1_Patterns/S15.10.1_A1_T2.js deleted file mode 100644 index a54720be0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.1_Patterns/S15.10.1_A1_T2.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.1_A1_T2; -* @section: 15.10.1; -* @assertion: RegExp syntax errors must be caught when matcher(s) compiles; -* @description: Tested RegExp is "a***"; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: new RegExp("a***") throw SyntaxError. Actual: ' + (new RegExp("a***"))); -} catch (e) { - if ((e instanceof SyntaxError) !== true) { - $ERROR('#1.2: new RegExp("a***") throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.1_Patterns/S15.10.1_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.1_Patterns/S15.10.1_A1_T3.js deleted file mode 100644 index 46bbbb66c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.1_Patterns/S15.10.1_A1_T3.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.1_A1_T3; -* @section: 15.10.1; -* @assertion: RegExp syntax errors must be caught when matcher(s) compiles; -* @description: Tested RegExp is "a++"; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: new RegExp("a++") throw SyntaxError. Actual: ' + (new RegExp("a++"))); -} catch (e) { - if ((e instanceof SyntaxError) !== true) { - $ERROR('#1.2: new RegExp("a++") throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.1_Patterns/S15.10.1_A1_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.1_Patterns/S15.10.1_A1_T4.js deleted file mode 100644 index e58e37685..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.1_Patterns/S15.10.1_A1_T4.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.1_A1_T4; -* @section: 15.10.1; -* @assertion: RegExp syntax errors must be caught when matcher(s) compiles; -* @description: Tested RegExp is "a+++"; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: new RegExp("a+++") throw SyntaxError. Actual: ' + (new RegExp("a+++"))); -} catch (e) { - if ((e instanceof SyntaxError) !== true) { - $ERROR('#1.2: new RegExp("a+++") throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.1_Patterns/S15.10.1_A1_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.1_Patterns/S15.10.1_A1_T5.js deleted file mode 100644 index c85af15e3..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.1_Patterns/S15.10.1_A1_T5.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.1_A1_T5; -* @section: 15.10.1; -* @assertion: RegExp syntax errors must be caught when matcher(s) compiles; -* @description: Tested RegExp is "a???"; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: new RegExp("a???") throw SyntaxError. Actual: ' + (new RegExp("a???"))); -} catch (e) { - if ((e instanceof SyntaxError) !== true) { - $ERROR('#1.2: new RegExp("a???") throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.1_Patterns/S15.10.1_A1_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.1_Patterns/S15.10.1_A1_T6.js deleted file mode 100644 index 358d5c6c0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.1_Patterns/S15.10.1_A1_T6.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.1_A1_T6; -* @section: 15.10.1; -* @assertion: RegExp syntax errors must be caught when matcher(s) compiles; -* @description: Tested RegExp is "a????"; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: new RegExp("a????") throw SyntaxError. Actual: ' + (new RegExp("a????"))); -} catch (e) { - if ((e instanceof SyntaxError) !== true) { - $ERROR('#1.2: new RegExp("a????") throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.1_Patterns/S15.10.1_A1_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.1_Patterns/S15.10.1_A1_T7.js deleted file mode 100644 index 0042c1ac0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.1_Patterns/S15.10.1_A1_T7.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.1_A1_T7; -* @section: 15.10.1; -* @assertion: RegExp syntax errors must be caught when matcher(s) compiles; -* @description: Tested RegExp is "*a"; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: new RegExp("*a") throw SyntaxError. Actual: ' + (new RegExp("*a"))); -} catch (e) { - if ((e instanceof SyntaxError) !== true) { - $ERROR('#1.2: new RegExp("*a") throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.1_Patterns/S15.10.1_A1_T8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.1_Patterns/S15.10.1_A1_T8.js deleted file mode 100644 index 84ca2c015..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.1_Patterns/S15.10.1_A1_T8.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.1_A1_T8; -* @section: 15.10.1; -* @assertion: RegExp syntax errors must be caught when matcher(s) compiles; -* @description: Tested RegExp is "**a"; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: new RegExp("**a") throw SyntaxError. Actual: ' + (new RegExp("**a"))); -} catch (e) { - if ((e instanceof SyntaxError) !== true) { - $ERROR('#1.2: new RegExp("**a") throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.1_Patterns/S15.10.1_A1_T9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.1_Patterns/S15.10.1_A1_T9.js deleted file mode 100644 index 12da5da26..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.1_Patterns/S15.10.1_A1_T9.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.1_A1_T9; -* @section: 15.10.1; -* @assertion: RegExp syntax errors must be caught when matcher(s) compiles; -* @description: Tested RegExp is "+a"; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: new RegExp("+a") throw SyntaxError. Actual: ' + (new RegExp("+a"))); -} catch (e) { - if ((e instanceof SyntaxError) !== true) { - $ERROR('#1.2: new RegExp("+a") throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.10_CharacterEscape/S15.10.2.10_A1.1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.10_CharacterEscape/S15.10.2.10_A1.1_T1.js deleted file mode 100644 index 903ec1c11..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.10_CharacterEscape/S15.10.2.10_A1.1_T1.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.10_A1.1_T1; -* @section: 15.10.2.10; -* @assertion: The production CharacterEscape :: t evaluates by returning -* the character \u0009; -* @description: Use \t in RegExp and \u0009 in tested string; -*/ - -//CHECK#1 -var arr = /\t/.exec("\u0009"); -if ((arr === null) || (arr[0] !== "\u0009")) { - $ERROR('#1: var arr = /\\t/.exec("\\u0009"); arr[0] === "\\u0009". Actual. ' + (arr && arr[0])); -} - -//CHECK#2 -var arr = /\t\t/.exec("a\u0009\u0009b"); -if ((arr === null) || (arr[0] !== "\u0009\u0009")) { - $ERROR('#2: var arr = /\\t\\t/.exec("a\\u0009\\u0009b"); arr[0] === "\\u0009\\u0009". Actual. ' + (arr && arr[0])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.10_CharacterEscape/S15.10.2.10_A1.2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.10_CharacterEscape/S15.10.2.10_A1.2_T1.js deleted file mode 100644 index 1e36e3b3d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.10_CharacterEscape/S15.10.2.10_A1.2_T1.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.10_A1.2_T1; -* @section: 15.10.2.10; -* @assertion: The production CharacterEscape :: n evaluates by returning -* the character \u000A; -* @description: Use \n in RegExp and \u000A in tested string; -*/ - -//CHECK#1 -var arr = /\n/.exec("\u000A"); -if ((arr === null) || (arr[0] !== "\u000A")) { - $ERROR('#1: var arr = /\\n/.exec("\\u000A"); arr[0] === "\\u000A". Actual. ' + (arr && arr[0])); -} - -//CHECK#2 -var arr = /\n\n/.exec("a\u000A\u000Ab"); -if ((arr === null) || (arr[0] !== "\u000A\u000A")) { - $ERROR('#2: var arr = /\\n\\n/.exec("a\\u000A\\u000Ab"); arr[0] === "\\u000A\\u000A". Actual. ' + (arr && arr[0])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.10_CharacterEscape/S15.10.2.10_A1.3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.10_CharacterEscape/S15.10.2.10_A1.3_T1.js deleted file mode 100644 index d9c3bfac7..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.10_CharacterEscape/S15.10.2.10_A1.3_T1.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.10_A1.3_T1; -* @section: 15.10.2.10; -* @assertion: The production CharacterEscape :: v evaluates by returning -* the character \u000B; -* @description: Use \v in RegExp and \u000B in tested string; -*/ - -//CHECK#1 -var arr = /\v/.exec("\u000B"); -if ((arr === null) || (arr[0] !== "\u000B")) { - $ERROR('#1: var arr = /\\v/.exec("\\u000B"); arr[0] === "\\u000B". Actual. ' + (arr && arr[0])); -} - -//CHECK#2 -var arr = /\v\v/.exec("a\u000B\u000Bb"); -if ((arr === null) || (arr[0] !== "\u000B\u000B")) { - $ERROR('#2: var arr = /\\v\\v/.exec("a\\u000B\\u000Bb"); arr[0] === "\\u000B\\u000B". Actual. ' + (arr && arr[0])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.10_CharacterEscape/S15.10.2.10_A1.4_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.10_CharacterEscape/S15.10.2.10_A1.4_T1.js deleted file mode 100644 index 7650dfaec..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.10_CharacterEscape/S15.10.2.10_A1.4_T1.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.10_A1.4_T1; -* @section: 15.10.2.10; -* @assertion: The production CharacterEscape :: f evaluates by returning -* the character \u000C; -* @description: Use \f in RegExp and \u000C in tested string; -*/ - -//CHECK#1 -var arr = /\f/.exec("\u000C"); -if ((arr === null) || (arr[0] !== "\u000C")) { - $ERROR('#1: var arr = /\\f/.exec("\\u000C"); arr[0] === "\\u000C". Actual. ' + (arr && arr[0])); -} - -//CHECK#2 -var arr = /\f\f/.exec("a\u000C\u000Cb"); -if ((arr === null) || (arr[0] !== "\u000C\u000C")) { - $ERROR('#2: var arr = /\\f\\f/.exec("a\\u000C\\u000Cb"); arr[0] === "\\u000C\\u000C". Actual. ' + (arr && arr[0])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.10_CharacterEscape/S15.10.2.10_A1.5_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.10_CharacterEscape/S15.10.2.10_A1.5_T1.js deleted file mode 100644 index 143da247c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.10_CharacterEscape/S15.10.2.10_A1.5_T1.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.10_A1.5_T1; -* @section: 15.10.2.10; -* @assertion: The production CharacterEscape :: r evaluates by returning -* the character \u000D; -* @description: Use \r in RegExp and \u000D in tested string; -*/ - -//CHECK#1 -var arr = /\r/.exec("\u000D"); -if ((arr === null) || (arr[0] !== "\u000D")) { - $ERROR('#1: var arr = /\\r/.exec("\\u000D"); arr[0] === "\\u000D". Actual. ' + (arr && arr[0])); -} - -//CHECK#2 -var arr = /\r\r/.exec("a\u000D\u000Db"); -if ((arr === null) || (arr[0] !== "\u000D\u000D")) { - $ERROR('#2: var arr = /\\r\\r/.exec("a\\u000D\\u000Db"); arr[0] === "\\u000D\\u000D". Actual. ' + (arr && arr[0])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.10_CharacterEscape/S15.10.2.10_A2.1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.10_CharacterEscape/S15.10.2.10_A2.1_T1.js deleted file mode 100644 index 1e971b925..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.10_CharacterEscape/S15.10.2.10_A2.1_T1.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.10_A2.1_T1; -* @section: 15.10.2.10; -* @assertion: CharacterEscape :: c ControlLetter; -* @description: ControlLetter :: A - Z; -*/ - -//CHECK#0041-005A -var result = true; -for (alpha = 0x0041; alpha <= 0x005A; alpha++) { - str = String.fromCharCode(alpha % 32); - arr = (new RegExp("\\c" + String.fromCharCode(alpha))).exec(str); - if ((arr === null) || (arr[0] !== str)) { - result = false; - } -} - -if (result !== true) { - $ERROR('#1: CharacterEscape :: c A - Z'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.10_CharacterEscape/S15.10.2.10_A2.1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.10_CharacterEscape/S15.10.2.10_A2.1_T2.js deleted file mode 100644 index a76782d9f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.10_CharacterEscape/S15.10.2.10_A2.1_T2.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.10_A2.1_T2; -* @section: 15.10.2.10; -* @assertion: CharacterEscape :: c ControlLetter; -* @description: ControlLetter :: a - z; -*/ - -//CHECK#0061-007A -var result = true; -for (alpha = 0x0061; alpha <= 0x007A; alpha++) { - str = String.fromCharCode(alpha % 32); - arr = (new RegExp("\\c" + String.fromCharCode(alpha))).exec(str); - if ((arr === null) || (arr[0] !== str)) { - result = false; - } -} - -if (result !== true) { - $ERROR('#1: CharacterEscape :: c a - z'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.10_CharacterEscape/S15.10.2.10_A2.1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.10_CharacterEscape/S15.10.2.10_A2.1_T3.js deleted file mode 100644 index 99cdd5b0c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.10_CharacterEscape/S15.10.2.10_A2.1_T3.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.10_A2.1_T3; -* @section: 15.10.2.10; -* @assertion: CharacterEscape :: c ControlLetter; -* @description: ControlLetter :: RUSSIAN ALPHABET is incorrect; -*/ - -//CHECK#0410-042F -var result = true; -for (alpha = 0x0410; alpha <= 0x042F; alpha++) { - str = String.fromCharCode(alpha % 32); - arr = (new RegExp("\\c" + String.fromCharCode(alpha))).exec(str); - if (arr !== null) { - result = false; - } -} - -if (result !== true) { - $ERROR('#1: RUSSIAN CAPITAL ALPHABET is incorrect'); -} - -//CHECK#0430-044F -var result = true; -for (alpha = 0x0430; alpha <= 0x044F; alpha++) { - str = String.fromCharCode(alpha % 32); - arr = (new RegExp("\\c" + String.fromCharCode(alpha))).exec(str); - if (arr !== null) { - result = false; - } -} - -if (result !== true) { - $ERROR('#2: russian small alphabet is incorrect'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.10_CharacterEscape/S15.10.2.10_A3.1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.10_CharacterEscape/S15.10.2.10_A3.1_T1.js deleted file mode 100644 index b948aaa60..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.10_CharacterEscape/S15.10.2.10_A3.1_T1.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.10_A3.1_T1; -* @section: 15.10.2.10; -* @assertion: CharacterEscape :: HexEscapeSequence :: x HexDigit HexDigit; -* @description: Tested string include equal unicode symbols; -*/ - -//CHECK#0 -var arr = /\x00/.exec("\u0000"); -if ((arr === null) || (arr[0] !== "\u0000")) { - $ERROR('#0: var arr = /\\x00/.exec(\\u0000); arr[0] === "\\u0000". Actual. ' + (arr && arr[0])); -} - -//CHECK#1 -var arr = /\x01/.exec("\u0001"); -if ((arr === null) || (arr[0] !== "\u0001")) { - $ERROR('#1: var arr = /\\x01/.exec(\\u0001); arr[0] === "\\u0001". Actual. ' + (arr && arr[0])); -} - -//CHECK#2 -var arr = /\x0A/.exec("\u000A"); -if ((arr === null) || (arr[0] !== "\u000A")) { - $ERROR('#2: var arr = /\\x0A/.exec(\\u000A); arr[0] === "\\u000A". Actual. ' + (arr && arr[0])); -} - -//CHECK#3 -var arr = /\xFF/.exec("\u00FF"); -if ((arr === null) || (arr[0] !== "\u00FF")) { - $ERROR('#3: var arr = /\\xFF/.exec(\\u00FF); arr[0] === "\\u00FF". Actual. ' + (arr && arr[0])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.10_CharacterEscape/S15.10.2.10_A3.1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.10_CharacterEscape/S15.10.2.10_A3.1_T2.js deleted file mode 100644 index dd56e464b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.10_CharacterEscape/S15.10.2.10_A3.1_T2.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.10_A3.1_T2; -* @section: 15.10.2.10; -* @assertion: CharacterEscape :: HexEscapeSequence :: x HexDigit HexDigit; -* @description: Checking ENGLISH CAPITAL ALPHABET and english small alphabet; -*/ - -//CHECK#41-5A -hex = ["\\x41", "\\x42", "\\x43", "\\x44", "\\x45", "\\x46", "\\x47", "\\x48", "\\x49", "\\x4A", "\\x4B", "\\x4C", "\\x4D", "\\x4E", "\\x4F", "\\x50", "\\x51", "\\x52", "\\x53", "\\x54", "\\x55", "\\x56", "\\x57", "\\x58", "\\x59", "\\x5A"]; -character = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]; -var result = true; -for (index = 0; index < hex.length; index++) { - arr = (new RegExp(hex[index])).exec(character[index]); - if ((arr === null) || (arr[0] !== character[index])) { - result = false; - } -} - -if (result !== true) { - $ERROR('#1: ENGLISH CAPITAL ALPHABET'); -} - -//CHECK#61-7A -hex = ["\\x61", "\\x62", "\\x63", "\\x64", "\\x65", "\\x66", "\\x67", "\\x68", "\\x69", "\\x6A", "\\x6B", "\\x6C", "\\x6D", "\\x6E", "\\x6F", "\\x70", "\\x71", "\\x72", "\\x73", "\\x74", "\\x75", "\\x76", "\\x77", "\\x78", "\\x79", "\\x7A"]; -character = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]; -var result = true; -for (index = 0; index < hex.length; index++) { - arr = (new RegExp(hex[index])).exec(character[index]); - if ((arr === null) || (arr[0] !== character[index])) { - result = false; - } -} - -if (result !== true) { - $ERROR('#1: english small alphabet'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.10_CharacterEscape/S15.10.2.10_A4.1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.10_CharacterEscape/S15.10.2.10_A4.1_T1.js deleted file mode 100644 index 02b2de83f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.10_CharacterEscape/S15.10.2.10_A4.1_T1.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.10_A4.1_T1; -* @section: 15.10.2.10; -* @assertion: CharacterEscape :: UnicodeEscapeSequence :: u HexDigit HexDigit HexDigit HexDigit; -* @description: RegExp and tested string include uncode symbols; -*/ - -//CHECK#0 -var arr = /\u0000/.exec("\u0000"); -if ((arr === null) || (arr[0] !== "\u0000")) { - $ERROR('#0: var arr = /\\u0000/.exec(\\u0000); arr[0] === "\\u0000". Actual. ' + (arr && arr[0])); -} - -//CHECK#1 -var arr = /\u0001/.exec("\u0001"); -if ((arr === null) || (arr[0] !== "\u0001")) { - $ERROR('#1: var arr = /\\u0001/.exec(\\u0001); arr[0] === "\\u0001". Actual. ' + (arr && arr[0])); -} - -//CHECK#2 -var arr = /\u000A/.exec("\u000A"); -if ((arr === null) || (arr[0] !== "\u000A")) { - $ERROR('#2: var arr = /\\u000A/.exec(\\u000A); arr[0] === "\\u000A". Actual. ' + (arr && arr[0])); -} - -//CHECK#3 -var arr = /\u00FF/.exec("\u00FF"); -if ((arr === null) || (arr[0] !== "\u00FF")) { - $ERROR('#3: var arr = /\\u00FF/.exec(\\u00FF); arr[0] === "\\u00FF". Actual. ' + (arr && arr[0])); -} - -//CHECK#4 -var arr = /\u0FFF/.exec("\u0FFF"); -if ((arr === null) || (arr[0] !== "\u0FFF")) { - $ERROR('#4: var arr = /\\u0FFF/.exec(\\u0FFF); arr[0] === "\\u0FFF". Actual. ' + (arr && arr[0])); -} - -//CHECK#5 -var arr = /\uFFFF/.exec("\uFFFF"); -if ((arr === null) || (arr[0] !== "\uFFFF")) { - $ERROR('#5: var arr = /\\uFFFF/.exec(\\uFFFF); arr[0] === "\\uFFFF". Actual. ' + (arr && arr[0])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.10_CharacterEscape/S15.10.2.10_A4.1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.10_CharacterEscape/S15.10.2.10_A4.1_T2.js deleted file mode 100644 index b0260a7dd..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.10_CharacterEscape/S15.10.2.10_A4.1_T2.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.10_A4.1_T2; -* @section: 15.10.2.10; -* @assertion: CharacterEscape :: UnicodeEscapeSequence :: u HexDigit HexDigit HexDigit HexDigit; -* @description: Tested string include ENGLISH CAPITAL ALPHABET and english small alphabet; -*/ - -//CHECK#41-5A -hex = ["\\u0041", "\\u0042", "\\u0043", "\\u0044", "\\u0045", "\\u0046", "\\u0047", "\\u0048", "\\u0049", "\\u004A", "\\u004B", "\\u004C", "\\u004D", "\\u004E", "\\u004F", "\\u0050", "\\u0051", "\\u0052", "\\u0053", "\\u0054", "\\u0055", "\\u0056", "\\u0057", "\\u0058", "\\u0059", "\\u005A"]; -character = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]; -var result = true; -for (index = 0; index < hex.length; index++) { - arr = (new RegExp(hex[index])).exec(character[index]); - if ((arr === null) || (arr[0] !== character[index])) { - result = false; - } -} - -if (result !== true) { - $ERROR('#1: ENGLISH CAPITAL ALPHABET'); -} - -//CHECK#61-7A -hex = ["\\u0061", "\\u0062", "\\u0063", "\\u0064", "\\u0065", "\\u0066", "\\u0067", "\\u0068", "\\u0069", "\\u006A", "\\u006B", "\\u006C", "\\u006D", "\\u006E", "\\u006F", "\\u0070", "\\u0071", "\\u0072", "\\u0073", "\\u0074", "\\u0075", "\\u0076", "\\u0077", "\\u0078", "\\u0079", "\\u007A"]; -character = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]; -var result = true; -for (index = 0; index < hex.length; index++) { - arr = (new RegExp(hex[index])).exec(character[index]); - if ((arr === null) || (arr[0] !== character[index])) { - result = false; - } -} - -if (result !== true) { - $ERROR('#1: english small alphabet'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.10_CharacterEscape/S15.10.2.10_A4.1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.10_CharacterEscape/S15.10.2.10_A4.1_T3.js deleted file mode 100644 index 25df0e56c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.10_CharacterEscape/S15.10.2.10_A4.1_T3.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.10_A4.1_T3; -* @section: 15.10.2.10; -* @assertion: CharacterEscape :: UnicodeEscapeSequence :: u HexDigit HexDigit HexDigit HexDigit; -* @description: Tested string include RUSSIAN CAPITAL ALPHABET and russian small alphabet in unicode notation; -*/ - -//CHECK#0410-042F, 0401 -hex = ["\\u0410", "\\u0411", "\\u0412", "\\u0413", "\\u0414", "\\u0415", "\\u0416", "\\u0417", "\\u0418", "\\u0419", "\\u041A", "\\u041B", "\\u041C", "\\u041D", "\\u041E", "\\u041F", "\\u0420", "\\u0421", "\\u0422", "\\u0423", "\\u0424", "\\u0425", "\\u0426", "\\u0427", "\\u0428", "\\u0429", "\\u042A", "\\u042B", "\\u042C", "\\u042D", "\\u042E", "\\u042F", "\\u0401"]; -character = ["\u0410", "\u0411", "\u0412", "\u0413", "\u0414", "\u0415", "\u0416", "\u0417", "\u0418", "\u0419", "\u041A", "\u041B", "\u041C", "\u041D", "\u041E", "\u041F", "\u0420", "\u0421", "\u0422", "\u0423", "\u0424", "\u0425", "\u0426", "\u0427", "\u0428", "\u0429", "\u042A", "\u042B", "\u042C", "\u042D", "\u042E", "\u042F", "\u0401"]; -var result = true; -for (index = 0; index < hex.length; index++) { - arr = (new RegExp(hex[index])).exec(character[index]); - if ((arr === null) || (arr[0] !== character[index])) { - result = false; - } -} - -if (result !== true) { - $ERROR('#1: RUSSIAN CAPITAL ALPHABET'); -} - -//CHECK#0430-044F, 0451 -hex = ["\\u0430", "\\u0431", "\\u0432", "\\u0433", "\\u0434", "\\u0435", "\\u0436", "\\u0437", "\\u0438", "\\u0439", "\\u043A", "\\u043B", "\\u043C", "\\u043D", "\\u043E", "\\u043F", "\\u0440", "\\u0441", "\\u0442", "\\u0443", "\\u0444", "\\u0445", "\\u0446", "\\u0447", "\\u0448", "\\u0449", "\\u044A", "\\u044B", "\\u044C", "\\u044D", "\\u044E", "\\u044F", "\\u0451"]; -character = ["\u0430", "\u0431", "\u0432", "\u0433", "\u0434", "\u0435", "\u0436", "\u0437", "\u0438", "\u0439", "\u043A", "\u043B", "\u043C", "\u043D", "\u043E", "\u043F", "\u0440", "\u0441", "\u0442", "\u0443", "\u0444", "\u0445", "\u0446", "\u0447", "\u0448", "\u0449", "\u044A", "\u044B", "\u044C", "\u044D", "\u044E", "\u044F", "\u0451"]; -var result = true; -for (index = 0; index < hex.length; index++) { - arr = (new RegExp(hex[index])).exec(character[index]); - if ((arr === null) || (arr[0] !== character[index])) { - result = false; - } -} - -if (result !== true) { - $ERROR('#1: russian small alphabet'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.10_CharacterEscape/S15.10.2.10_A5.1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.10_CharacterEscape/S15.10.2.10_A5.1_T1.js deleted file mode 100644 index a0bac1cd0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.10_CharacterEscape/S15.10.2.10_A5.1_T1.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.10_A5.1_T1; -* @section: 15.10.2.10; -* @assertion: CharacterEscape :: IdentityEscapeSequence :: SourceCharacter but not IdentifierPart; -* @description: Tested string is "~`!@#$%^&*()-+={[}]|\\:;'<,>./?" + '"'; -*/ - -//CHECK#1 -var non_ident = "~`!@#$%^&*()-+={[}]|\\:;'<,>./?" + '"'; -var k = -1; -do { - k++; - arr = new RegExp("\\" + non_ident[k], "g").exec(non_ident); -} while ((arr !== null) && (arr[0] === non_ident[k])) - -if (non_ident.length !== k) { - $ERROR('#1: IdentityEscapeSequence :: SourceCharacter but not IdentifierPart'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.11_DecimalEscape/S15.10.2.11_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.11_DecimalEscape/S15.10.2.11_A1_T1.js deleted file mode 100644 index 1116b48b2..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.11_DecimalEscape/S15.10.2.11_A1_T1.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.10.2.11_A1_T1; - * @section: 15.10.2.11; - * @assertion: DecimalEscape :: DecimalIntegerLiteral [lookahead not in DecimalDigit]; - * @description: DecimalEscape :: 0. If i is zero, return the EscapeValue consisting of a character (Unicodevalue0000); -*/ - -//CHECK#1 -var arr = /\0/.exec("\u0000"); -if ((arr === null) || (arr[0] !== "\u0000")) { - $ERROR('#1: var arr = /\\0/.exec(\\u0000); arr[0] === "\\u0000". Actual. ' + (arr && arr[0])); -} - -//CHECK#2 -var arr = (new RegExp("\\0")).exec("\u0000"); -if ((arr === null) || (arr[0] !== "\u0000")) { - $ERROR('#2: var arr = (new RegExp("\\0")).exec(\\u0000); arr[0] === "\\u0000". Actual. ' + (arr && arr[0])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.11_DecimalEscape/S15.10.2.11_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.11_DecimalEscape/S15.10.2.11_A1_T2.js deleted file mode 100644 index 8584a1979..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.11_DecimalEscape/S15.10.2.11_A1_T2.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.10.2.11_A1_T2; - * @section: 15.10.2.11; - * @assertion: DecimalEscape :: DecimalIntegerLiteral [lookahead not in DecimalDigit]; - * @description: It is an error if n is greater than the total number of left capturing parentheses in the entire regular expression; - * @negative; -*/ - -/\1/.exec(""); -/\2/.exec(""); -/\3/.exec(""); -/\4/.exec(""); -/\5/.exec(""); -/\6/.exec(""); -/\7/.exec(""); -/\8/.exec(""); -/\9/.exec(""); -/\10/.exec(""); diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.11_DecimalEscape/S15.10.2.11_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.11_DecimalEscape/S15.10.2.11_A1_T3.js deleted file mode 100644 index ca4249af0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.11_DecimalEscape/S15.10.2.11_A1_T3.js +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.10.2.11_A1_T3; - * @section: 15.10.2.11; - * @assertion: DecimalEscape :: DecimalIntegerLiteral [lookahead not in DecimalDigit]; - * @description: It is an error if n is greater than the total number of left capturing parentheses in the entire regular expression; - * @negative; -*/ - -/(?:A)\2/.exec("AA"); diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.11_DecimalEscape/S15.10.2.11_A1_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.11_DecimalEscape/S15.10.2.11_A1_T4.js deleted file mode 100644 index 71265c814..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.11_DecimalEscape/S15.10.2.11_A1_T4.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.10.2.11_A1_T4; - * @section: 15.10.2.11, 15.10.2.9; - * @assertion: DecimalEscape :: DecimalIntegerLiteral [lookahead not in DecimalDigit]; - * @description: DecimalIntegerLiteral is not 0; -*/ - -var arr = /(A)\1/.exec("AA"); - -//CHECK#1 -if ((arr === null) || (arr[0] !== "AA")) { - $ERROR('#1: var arr = (/(A)\\1/.exec("AA")); arr[0] === "AA". Actual. ' + (arr && arr[0])); -} - -//CHECK#2 -if ((arr === null) || (arr[1] !== "A")) { - $ERROR('#2: var arr = (/(A)\\1/.exec("AA")); arr[1] === "A". Actual. ' + (arr && arr[1])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.11_DecimalEscape/S15.10.2.11_A1_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.11_DecimalEscape/S15.10.2.11_A1_T5.js deleted file mode 100644 index 48571b80e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.11_DecimalEscape/S15.10.2.11_A1_T5.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.10.2.11_A1_T5; - * @section: 15.10.2.11, 15.10.2.9; - * @assertion: DecimalEscape :: DecimalIntegerLiteral [lookahead not in DecimalDigit]; - * @description: DecimalIntegerLiteral is not 0; -*/ - -var arr = /\1(A)/.exec("AA"); - -//CHECK#1 -if ((arr === null) || (arr[0] !== "A")) { - $ERROR('#1: var arr = (/\\1(A)/.exec("AA")); arr[0] === "A". Actual. ' + (arr && arr[0])); -} - -//CHECK#2 -if ((arr === null) || (arr[1] !== "A")) { - $ERROR('#2: var arr = (/\\1(A)/.exec("AA")); arr[1] === "A". Actual. ' + (arr && arr[1])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.11_DecimalEscape/S15.10.2.11_A1_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.11_DecimalEscape/S15.10.2.11_A1_T6.js deleted file mode 100644 index 4d2b4b48e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.11_DecimalEscape/S15.10.2.11_A1_T6.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.10.2.11_A1_T6; - * @section: 15.10.2.11, 15.10.2.9; - * @assertion: DecimalEscape :: DecimalIntegerLiteral [lookahead not in DecimalDigit]; - * @description: DecimalIntegerLiteral is not 0; -*/ - -var arr = /(A)\1(B)\2/.exec("AABB"); - -//CHECK#1 -if ((arr === null) || (arr[0] !== "AABB")) { - $ERROR('#1: var arr = /(A)\\1(B)\\2/.exec("AABB"); arr[0] === "AABB". Actual. ' + (arr && arr[0])); -} - -//CHECK#2 -if ((arr === null) || (arr[1] !== "A")) { - $ERROR('#2: var arr = /(A)\\1(B)\\2/.exec("AABB"); arr[1] === "A". Actual. ' + (arr && arr[1])); -} - -//CHECK#3 -if ((arr === null) || (arr[2] !== "B")) { - $ERROR('#3: var arr = /(A)\\1(B)\\2/.exec("AABB"); arr[2] === "B". Actual. ' + (arr && arr[2])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.11_DecimalEscape/S15.10.2.11_A1_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.11_DecimalEscape/S15.10.2.11_A1_T7.js deleted file mode 100644 index d5d6c6023..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.11_DecimalEscape/S15.10.2.11_A1_T7.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.10.2.11_A1_T7; - * @section: 15.10.2.11, 15.10.2.9; - * @assertion: DecimalEscape :: DecimalIntegerLiteral [lookahead not in DecimalDigit]; - * @description: DecimalIntegerLiteral is not 0; -*/ - -var arr = /\1(A)(B)\2/.exec("ABB"); - -//CHECK#1 -if ((arr === null) || (arr[0] !== "ABB")) { - $ERROR('#1: var arr = /\\1(A)(B)\\2/.exec("ABB"); arr[0] === "ABB". Actual. ' + (arr && arr[0])); -} - -//CHECK#2 -if ((arr === null) || (arr[1] !== "A")) { - $ERROR('#2: var arr = /\\1(A)(B)\\2/.exec("ABB"); arr[1] === "A". Actual. ' + (arr && arr[1])); -} - -//CHECK#3 -if ((arr === null) || (arr[2] !== "B")) { - $ERROR('#3: var arr = /\\1(A)(B)\\2/.exec("ABB"); arr[2] === "B". Actual. ' + (arr && arr[2])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.11_DecimalEscape/S15.10.2.11_A1_T8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.11_DecimalEscape/S15.10.2.11_A1_T8.js deleted file mode 100644 index e97c9ef74..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.11_DecimalEscape/S15.10.2.11_A1_T8.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.10.2.11_A1_T8; - * @section: 15.10.2.11, 15.10.2.9; - * @assertion: DecimalEscape :: DecimalIntegerLiteral [lookahead not in DecimalDigit]; - * @description: DecimalIntegerLiteral is not 0; -*/ - -var arr = /((((((((((A))))))))))\1\2\3\4\5\6\7\8\9\10/.exec("AAAAAAAAAAA"); - -//CHECK#1 -if ((arr === null) || (arr[0] !== "AAAAAAAAAAA")) { - $ERROR('#1: var arr = /((((((((((A))))))))))\\1\\2\\3\\4\\5\\6\\7\\8\\9\\10/.exec("AAAAAAAAAAA"); arr[0] === "AAAAAAAAAAA". Actual. ' + (arr && arr[0])); -} - -for (i = 1; i <= 10; i++) { - //CHECK#i - if ((arr === null) || (arr[i] !== "A")) { - $ERROR('#2: var arr = /((((((((((A))))))))))\\1\\2\\3\\4\\5\\6\\7\\8\\9\\10/.exec("AAAAAAAAAAA"); arr[' + i + '] === "A". Actual. ' + (arr && arr[i])); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.11_DecimalEscape/S15.10.2.11_A1_T9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.11_DecimalEscape/S15.10.2.11_A1_T9.js deleted file mode 100644 index 58d68d876..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.11_DecimalEscape/S15.10.2.11_A1_T9.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.10.2.11_A1_T9; - * @section: 15.10.2.11, 15.10.2.9; - * @assertion: DecimalEscape :: DecimalIntegerLiteral [lookahead not in DecimalDigit]; - * @description: DecimalIntegerLiteral is not 0; -*/ - -var arr = /((((((((((A))))))))))\10\9\8\7\6\5\4\3\2\1/.exec("AAAAAAAAAAA"); - -//CHECK#1 -if ((arr === null) || (arr[0] !== "AAAAAAAAAAA")) { - $ERROR('#1: var arr = /((((((((((A))))))))))\\10\\9\\8\\7\\6\\5\\4\\3\\2\\1/.exec("AAAAAAAAAAA"); arr[0] === "AAAAAAAAAAA". Actual. ' + (arr && arr[0])); -} - -for (i = 1; i <= 10; i++) { - //CHECK#i - if ((arr === null) || (arr[i] !== "A")) { - $ERROR('#2: var arr = /((((((((((A))))))))))\\10\\9\\8\\7\\6\\5\\4\\3\\2\\1/.exec("AAAAAAAAAAA"); arr[' + i + '] === "A". Actual. ' + (arr && arr[i])); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A1_T1.js deleted file mode 100644 index 75398b62c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A1_T1.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.12_A1_T1; -* @section: 15.10.2.12, 7.2, 7.3; -* @assertion: The production CharacterClassEscape :: s evaluates by returning the set of characters -* containing the characters that are on the right-hand side of the WhiteSpace (7.2) or LineTerminator (7.3) productions; -* @description: WhiteSpace without category Zs; -*/ - -//CHECK#1 -var arr = /\s/.exec("\u0009"); -if ((arr === null) || (arr[0] !== "\u0009")) { - $ERROR('#1: var arr = /\\s/.exec("\\u0009"); arr[0] === "\\u0009". Actual. ' + (arr && arr[0])); -} - -//CHECK#2 -var arr = /\s/.exec("\u000B"); -if ((arr === null) || (arr[0] !== "\u000B")) { - $ERROR('#2: var arr = /\\s/.exec("\\u000B"); arr[0] === "\\u000B". Actual. ' + (arr && arr[0])); -} - -//CHECK#3 -var arr = /\s/.exec("\u000C"); -if ((arr === null) || (arr[0] !== "\u000C")) { - $ERROR('#3: var arr = /\\s/.exec("\\u000C"); arr[0] === "\\u000C". Actual. ' + (arr && arr[0])); -} - -//CHECK#4 -var arr = /\s/.exec("\u0020"); -if ((arr === null) || (arr[0] !== "\u0020")) { - $ERROR('#4: var arr = /\\s/.exec("\\u0020"); arr[0] === "\\u0020". Actual. ' + (arr && arr[0])); -} - -//CHECK#5 -var arr = /\s/.exec("\u00A0"); -if ((arr === null) || (arr[0] !== "\u00A0")) { - $ERROR('#5: var arr = /\\s/.exec("\\u00A0"); arr[0] === "\\u00A0". Actual. ' + (arr && arr[0])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A1_T2.js deleted file mode 100644 index 84b9828d0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A1_T2.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.12_A1_T2; -* @section: 15.10.2.12, 7.2, 7.3; -* @assertion: The production CharacterClassEscape :: s evaluates by returning the set of characters -* containing the characters that are on the right-hand side of the WhiteSpace (7.2) or LineTerminator (7.3) productions; -* @description: LineTerminator; -*/ - -//CHECK#1 -var arr = /\s/.exec("\u000A"); -if ((arr === null) || (arr[0] !== "\u000A")) { - $ERROR('#1: var arr = /\\s/.exec("\\u000A"); arr[0] === "\\u000A". Actual. ' + (arr && arr[0])); -} - -//CHECK#2 -var arr = /\s/.exec("\u000D"); -if ((arr === null) || (arr[0] !== "\u000D")) { - $ERROR('#2: var arr = /\\s/.exec("\\u000D"); arr[0] === "\\u000D". Actual. ' + (arr && arr[0])); -} - -//CHECK#3 -var arr = /\s/.exec("\u2028"); -if ((arr === null) || (arr[0] !== "\u2028")) { - $ERROR('#3: var arr = /\\s/.exec("\\u2028"); arr[0] === "\\u2028". Actual. ' + (arr && arr[0])); -} - -//CHECK#4 -var arr = /\s/.exec("\u2029"); -if ((arr === null) || (arr[0] !== "\u2029")) { - $ERROR('#4: var arr = /\\s/.exec("\\u2029"); arr[0] === "\\u2029". Actual. ' + (arr && arr[0])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A1_T3.js deleted file mode 100644 index 68fdac57e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A1_T3.js +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.12_A1_T3; -* @section: 15.10.2.12, 7.2, 7.3; -* @assertion: The production CharacterClassEscape :: s evaluates by returning the set of characters -* containing the characters that are on the right-hand side of the WhiteSpace (7.2) or LineTerminator (7.3) productions; -* @description: ENGLISH ALPHABET; -*/ - -var regexp_s = /\s/; - -//CHECK#0041-005A -var result = true; -for (alpha = 0x0041; alpha <= 0x005A; alpha++) { - if (regexp_s.exec(String.fromCharCode(alpha)) !== null) { - result = false; - } -} - -if (result !== true) { - $ERROR('#1: ENGLISH CAPITAL ALPHABET'); -} - -//CHECK#0061-007A -var result = true; -for (alpha = 0x0061; alpha <= 0x007A; alpha++) { - if (regexp_s.exec(String.fromCharCode(alpha)) !== null) { - result = false; - } -} - -if (result !== true) { - $ERROR('#2: english small alphabet'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A1_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A1_T4.js deleted file mode 100644 index 639d6081c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A1_T4.js +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.12_A1_T4; -* @section: 15.10.2.12, 7.2, 7.3; -* @assertion: The production CharacterClassEscape :: s evaluates by returning the set of characters -* containing the characters that are on the right-hand side of the WhiteSpace (7.2) or LineTerminator (7.3) productions; -* @description: RUSSIAN ALPHABET; -*/ - -var regexp_s = /\s/; - -//CHECK#0410-042F -var result = true; -for (alpha = 0x0410; alpha <= 0x042F; alpha++) { - if (regexp_s.exec(String.fromCharCode(alpha)) !== null) { - result = false; - } -} - -if (result !== true) { - $ERROR('#1: RUSSIAN CAPITAL ALPHABET'); -} - -//CHECK#0430-044F -var result = true; -for (alpha = 0x0430; alpha <= 0x044F; alpha++) { - if (regexp_s.exec(String.fromCharCode(alpha)) !== null) { - result = false; - } -} - -if (result !== true) { - $ERROR('#2: russian small alphabet'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A1_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A1_T5.js deleted file mode 100644 index ce50ca5d0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A1_T5.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.12_A1_T5; -* @section: 15.10.2.12, 7.2, 7.3; -* @assertion: The production CharacterClassEscape :: s evaluates by returning the set of characters -* containing the characters that are on the right-hand side of the WhiteSpace (7.2) or LineTerminator (7.3) productions; -* @description: Tested string is "0123456789_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ~`!@#$%^&*()-+={[}]|\\:;'<,>./?" + '"'; -*/ - -//CHECK#1 -var non_s = "0123456789_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ~`!@#$%^&*()-+={[}]|\\:;'<,>./?" + '"'; -if (/\s/.exec(non_s) !== null) { - $ERROR('#1: non-s'); -} - -//CHECK#2 -var non_S = '\f\n\r\t\v '; -var regexp_s = /\s/g; -var k = 0; -while (regexp_s.exec(non_S) !== null) { - k++; -} - -if (non_S.length !== k) { - $ERROR('#2: non-S'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A2_T1.js deleted file mode 100644 index a88abd3e0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A2_T1.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.12_A2_T1; -* @section: 15.10.2.12, 7.2, 7.3; -* @assertion: The production CharacterClassEscape :: S evaluates by returning -* the set of all characters not included in the set returned by -* CharacterClassEscape :: s; -* @description: WhiteSpace without category Zs; -*/ - -//CHECK#1 -var arr = /\S/.exec("\u0009"); -if (arr !== null) { - $ERROR('#1: var arr = /\\S/.exec("\\u0009"); arr[0] === "\\u0009". Actual. ' + (arr && arr[0])); -} - -//CHECK#2 -var arr = /\S/.exec("\u000B"); -if (arr !== null) { - $ERROR('#2: var arr = /\\S/.exec("\\u000B"); arr[0] === "\\u000B". Actual. ' + (arr && arr[0])); -} - -//CHECK#3 -var arr = /\S/.exec("\u000C"); -if (arr !== null) { - $ERROR('#3: var arr = /\\S/.exec("\\u000C"); arr[0] === "\\u000C". Actual. ' + (arr && arr[0])); -} - -//CHECK#4 -var arr = /\S/.exec("\u0020"); -if (arr !== null) { - $ERROR('#4: var arr = /\\S/.exec("\\u0020"); arr[0] === "\\u0020". Actual. ' + (arr && arr[0])); -} - -//CHECK#5 -var arr = /\S/.exec("\u00A0"); -if (arr !== null) { - $ERROR('#5: var arr = /\\S/.exec("\\u00A0"); arr[0] === "\\u00A0". Actual. ' + (arr && arr[0])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A2_T2.js deleted file mode 100644 index 9bd98b403..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A2_T2.js +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.12_A2_T2; -* @section: 15.10.2.12, 7.2, 7.3; -* @assertion: The production CharacterClassEscape :: S evaluates by returning -* the set of all characters not included in the set returned by -* CharacterClassEscape :: s; -* @description: LineTerminator; -*/ - -//CHECK#1 -var arr = /\S/.exec("\u000A"); -if (arr !== null) { - $ERROR('#1: var arr = /\\S/.exec("\\u000A"); arr[0] === "\\u000A". Actual. ' + (arr && arr[0])); -} - -//CHECK#2 -var arr = /\S/.exec("\u000D"); -if (arr !== null) { - $ERROR('#2: var arr = /\\S/.exec("\\u000D"); arr[0] === "\\u000D". Actual. ' + (arr && arr[0])); -} - -//CHECK#3 -var arr = /\S/.exec("\u2028"); -if (arr !== null) { - $ERROR('#3: var arr = /\\S/.exec("\\u2028"); arr[0] === "\\u2028". Actual. ' + (arr && arr[0])); -} - -//CHECK#4 -var arr = /\S/.exec("\u2029"); -if (arr !== null) { - $ERROR('#4: var arr = /\\S/.exec("\\u2029"); arr[0] === "\\u2029". Actual. ' + (arr && arr[0])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A2_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A2_T3.js deleted file mode 100644 index 0c3d644df..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A2_T3.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.12_A2_T3; -* @section: 15.10.2.12, 7.2, 7.3; -* @assertion: The production CharacterClassEscape :: S evaluates by returning -* the set of all characters not included in the set returned by -* CharacterClassEscape :: s; -* @description: ENGLISH ALPHABET; -*/ - -var regexp_S = /\S/; - -//CHECK#0041-005A -var result = true; -for (alpha = 0x0041; alpha <= 0x005A; alpha++) { - str = String.fromCharCode(alpha); - arr = regexp_S.exec(str); - if ((arr === null) || (arr[0] !== str)) { - result = false; - } -} - -if (result !== true) { - $ERROR('#1: ENGLISH CAPITAL ALPHABET'); -} - -//CHECK#0061-007A -var result = true; -for (alpha = 0x0061; alpha <= 0x007A; alpha++) { - str = String.fromCharCode(alpha); - arr = regexp_S.exec(str); - if ((arr === null) || (arr[0] !== str)) { - result = false; - } -} - -if (result !== true) { - $ERROR('#2: english small alphabet'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A2_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A2_T4.js deleted file mode 100644 index a46442f74..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A2_T4.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.12_A2_T4; -* @section: 15.10.2.12, 7.2, 7.3; -* @assertion: The production CharacterClassEscape :: S evaluates by returning -* the set of all characters not included in the set returned by -* CharacterClassEscape :: s; -* @description: RUSSIAN ALPHABET; -*/ - -var regexp_S = /\S/; - -//CHECK#0410-042F -var result = true; -for (alpha = 0x0410; alpha <= 0x042F; alpha++) { - str = String.fromCharCode(alpha); - arr = regexp_S.exec(str); - if ((arr === null) || (arr[0] !== str)) { - result = false; - } -} - -if (result !== true) { - $ERROR('#1: RUSSIAN CAPITAL ALPHABET'); -} - -//CHECK#0430-044F -var result = true; -for (alpha = 0x0430; alpha <= 0x044F; alpha++) { - str = String.fromCharCode(alpha); - arr = regexp_S.exec(str); - if ((arr === null) || (arr[0] !== str)) { - result = false; - } -} - -if (result !== true) { - $ERROR('#2: russian small alphabet'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A2_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A2_T5.js deleted file mode 100644 index 36fbaedff..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A2_T5.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.12_A2_T5; -* @section: 15.10.2.12, 7.2, 7.3; -* @assertion: The production CharacterClassEscape :: S evaluates by returning -* the set of all characters not included in the set returned by -* CharacterClassEscape :: s; -* @description: Tested string is "0123456789_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ~`!@#$%^&*()-+={[}]|\\:;'<,>./?" + '"'; -*/ - -//CHECK#1 -var non_s = "0123456789_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ~`!@#$%^&*()-+={[}]|\\:;'<,>./?" + '"'; -var regexp_S = /\S/g; -var k = 0; -while (regexp_S.exec(non_s) !== null) { - k++; -} - -if (non_s.length !== k) { - $ERROR('#1: non-s'); -} - -//CHECK#2 -var non_S = '\f\n\r\t\v '; -if (/\S/.exec(non_S) !== null) { - $ERROR('#2: non-S'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A3_T1.js deleted file mode 100644 index 4e88ecfdc..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A3_T1.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.12_A3_T1; -* @section: 15.10.2.12; -* @assertion: The production CharacterClassEscape :: w evaluates by returning the set of characters containing the sixty-three characters: -* a - z, A - Z, 0 - 9, _; -* @description: A - Z; -*/ - -var regexp_w = /\w/; - -//CHECK#0041-005A -var result = true; -for (alpha = 0x0041; alpha <= 0x005A; alpha++) { - str = String.fromCharCode(alpha); - arr = regexp_w.exec(str); - if ((arr === null) || (arr[0] !== str)) { - result = false; - } -} - -if (result !== true) { - $ERROR('#1: A - Z'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A3_T2.js deleted file mode 100644 index 4d2066236..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A3_T2.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.12_A3_T2; -* @section: 15.10.2.12; -* @assertion: The production CharacterClassEscape :: w evaluates by returning the set of characters containing the sixty-three characters: -* a - z, A - Z, 0 - 9, _; -* @description: a - z; -*/ - -var regexp_w = /\w/; - -//CHECK#0061-007A -var result = true; -for (alpha = 0x0061; alpha <= 0x007A; alpha++) { - str = String.fromCharCode(alpha); - arr = regexp_w.exec(str); - if ((arr === null) || (arr[0] !== str)) { - result = false; - } -} - -if (result !== true) { - $ERROR('#1: a - z'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A3_T3.js deleted file mode 100644 index b463c3635..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A3_T3.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.12_A3_T3; -* @section: 15.10.2.12; -* @assertion: The production CharacterClassEscape :: w evaluates by returning the set of characters containing the sixty-three characters: -* a - z, A - Z, 0 - 9, _; -* @description: 0 - 9, _; -*/ - -var regexp_w = /\w/; - -//CHECK#0030-0039 -var result = true; -for (alpha = 0x0030; alpha <= 0x0039; alpha++) { - str = String.fromCharCode(alpha); - arr = regexp_w.exec(str); - if ((arr === null) || (arr[0] !== str)) { - result = false; - } -} - -if (result !== true) { - $ERROR('#1: 0 - 9'); -} - -//CHECK#005F -var arr = regexp_w.exec("_"); -if ((arr === null) || (arr[0] !== "\u005F")) { - $ERROR('#2: _'); -} - -//CHECK#0020 -if (regexp_w.exec(" ") !== null) { - $ERROR('#3: '); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A3_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A3_T4.js deleted file mode 100644 index 9273abdde..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A3_T4.js +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.12_A3_T4; -* @section: 15.10.2.12; -* @assertion: The production CharacterClassEscape :: w evaluates by returning the set of characters containing the sixty-three characters: -* a - z, A - Z, 0 - 9, _; -* @description: RUSSIAN ALPHABET; -*/ - -var regexp_w = /\w/; - -//CHECK#0410-042F -var result = true; -for (alpha = 0x0410; alpha <= 0x042F; alpha++) { - if (regexp_w.exec(String.fromCharCode(alpha)) !== null) { - result = false; - } -} - -if (result !== true) { - $ERROR('#1: RUSSIAN CAPITAL ALPHABET'); -} - -//CHECK#0430-044F -var result = true; -for (alpha = 0x0430; alpha <= 0x044F; alpha++) { - if (regexp_w.exec(String.fromCharCode(alpha)) !== null) { - result = false; - } -} - -if (result !== true) { - $ERROR('#2: russian small alphabet'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A3_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A3_T5.js deleted file mode 100644 index 9724c0143..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A3_T5.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.12_A3_T5; -* @section: 15.10.2.12; -* @assertion: The production CharacterClassEscape :: w evaluates by returning the set of characters containing the sixty-three characters: -* a - z, A - Z, 0 - 9, _; -* @description: non-w; -*/ - -//CHECK#1 -var non_w = "\f\n\r\t\v~`!@#$%^&*()-+={[}]|\\:;'<,>./? " + '"'; -if (/\w/.exec(non_w) !== null) { - $ERROR('#1: non-w'); -} - -//CHECK#2 -var non_W = "_0123456789_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; -var regexp_w = /\w/g; -var k = 0; -while (regexp_w.exec(non_W) !== null) { - k++; -} - -if (non_W.length !== k) { - $ERROR('#2: non-W'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A4_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A4_T1.js deleted file mode 100644 index 59ea5aae9..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A4_T1.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.12_A4_T1; -* @section: 15.10.2.12; -* @assertion: The production CharacterClassEscape :: W evaluates by returning the set of all characters not -* included in the set returned by CharacterClassEscape :: w; -* @description: A - Z; -*/ - -var regexp_W = /\W/; - -//CHECK#0041-005A -var result = true; -for (alpha = 0x0041; alpha <= 0x005A; alpha++) { - if (regexp_W.exec(String.fromCharCode(alpha)) !== null) { - result = false; - } -} - -if (result !== true) { - $ERROR('#1: A - Z'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A4_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A4_T2.js deleted file mode 100644 index 91b630822..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A4_T2.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.12_A4_T2; -* @section: 15.10.2.12; -* @assertion: The production CharacterClassEscape :: W evaluates by returning the set of all characters not -* included in the set returned by CharacterClassEscape :: w; -* @description: a - z; -*/ - -var regexp_W = /\W/; - -//CHECK#0061-007A -var result = true; -for (alpha = 0x0061; alpha <= 0x007A; alpha++) { - if (regexp_W.exec(String.fromCharCode(alpha)) !== null) { - result = false; - } -} - -if (result !== true) { - $ERROR('#1: a - z'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A4_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A4_T3.js deleted file mode 100644 index b551560db..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A4_T3.js +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.12_A4_T3; -* @section: 15.10.2.12; -* @assertion: The production CharacterClassEscape :: W evaluates by returning the set of all characters not -* included in the set returned by CharacterClassEscape :: w; -* @description: 0 - 9; -*/ - -var regexp_W = /\W/; - -//CHECK#0030-0039 -var result = true; -for (alpha = 0x0030; alpha <= 0x0039; alpha++) { - if (regexp_W.exec(String.fromCharCode(alpha)) !== null) { - result = false; - } -} - -if (result !== true) { - $ERROR('#1: 0 - 9'); -} - -//CHECK#005F -if (regexp_W.exec("_") !== null) { - $ERROR('#2: _'); -} - -//CHECK#0020 -var arr = regexp_W.exec(" "); -if ((arr === null) || (arr[0] !== "\u0020")) { - $ERROR('#2: '); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A4_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A4_T4.js deleted file mode 100644 index 9427fd65e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A4_T4.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.12_A4_T4; -* @section: 15.10.2.12; -* @assertion: The production CharacterClassEscape :: W evaluates by returning the set of all characters not -* included in the set returned by CharacterClassEscape :: w; -* @description: RUSSIAN ALPHABET; -*/ - -var regexp_W = /\W/; - -//CHECK#0410-042F -var result = true; -for (alpha = 0x0410; alpha <= 0x042F; alpha++) { - str = String.fromCharCode(alpha); - arr = regexp_W.exec(str); - if ((arr === null) || (arr[0] !== str)) { - result = false; - } -} - -if (result !== true) { - $ERROR('#1: RUSSIAN CAPITAL ALPHABET'); -} - -//CHECK#0430-044F -var result = true; -for (alpha = 0x0430; alpha <= 0x044F; alpha++) { - str = String.fromCharCode(alpha); - arr = regexp_W.exec(str); - if ((arr === null) || (arr[0] !== str)) { - result = false; - } -} - -if (result !== true) { - $ERROR('#2: russian small alphabet'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A4_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A4_T5.js deleted file mode 100644 index a76e56e6f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A4_T5.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.12_A4_T5; -* @section: 15.10.2.12; -* @assertion: The production CharacterClassEscape :: W evaluates by returning the set of all characters not -* included in the set returned by CharacterClassEscape :: w; -* @description: non-w; -*/ - -//CHECK#1 -var non_w = "\f\n\r\t\v~`!@#$%^&*()-+={[}]|\\:;'<,>./? " + '"'; -var regexp_W = /\W/g; -var k = 0; -while (regexp_W.exec(non_w) !== null) { - k++; -} - -if (non_w.length !== k) { - $ERROR('#1: non-w'); -} - -//CHECK#2 -var non_W = "_0123456789_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; -if (/\W/.exec(non_W) !== null) { - $ERROR('#2: non-W'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A5_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A5_T1.js deleted file mode 100644 index 2bb57b9c0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A5_T1.js +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.12_A5_T1; -* @section: 15.10.2.12; -* @assertion: The production CharacterClassEscape :: d evaluates by returning the ten-element set of characters containing the characters 0 through 9 inclusive; -* @description: 0 - 9; -*/ - -var regexp_d = /\d/; - -//CHECK#0030-0039 -var result = true; -for (alpha = 0x0030; alpha <= 0x0039; alpha++) { - str = String.fromCharCode(alpha); - arr = regexp_d.exec(str); - if ((arr === null) || (arr[0] !== str)) { - result = false; - } -} - -if (result !== true) { - $ERROR('#1: 0 - 9'); -} - -//CHECK#005F -if (regexp_d.exec("_") !== null) { - $ERROR('#2: _'); -} - -//CHECK#0020 -if (regexp_d.exec(" ") !== null) { - $ERROR('#3: '); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A5_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A5_T2.js deleted file mode 100644 index 775020100..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A5_T2.js +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.12_A5_T2; -* @section: 15.10.2.12; -* @assertion: The production CharacterClassEscape :: d evaluates by returning the ten-element set of characters containing the characters 0 through 9 inclusive; -* @description: ENGLISH ALPHABET; -*/ - -var regexp_d = /\d/; - -//CHECK#0041-005A -var result = true; -for (alpha = 0x0041; alpha <= 0x005A; alpha++) { - if (regexp_d.exec(String.fromCharCode(alpha)) !== null) { - result = false; - } -} - -if (result !== true) { - $ERROR('#1: ENGLISH CAPITAL ALPHABET'); -} - -//CHECK#0061-007A -var result = true; -for (alpha = 0x0061; alpha <= 0x007A; alpha++) { - if (regexp_d.exec(String.fromCharCode(alpha)) !== null) { - result = false; - } -} - -if (result !== true) { - $ERROR('#2: english small alphabet'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A5_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A5_T3.js deleted file mode 100644 index e0cca8d1d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A5_T3.js +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.12_A5_T3; -* @section: 15.10.2.12; -* @assertion: The production CharacterClassEscape :: d evaluates by returning the ten-element set of characters containing the characters 0 through 9 inclusive; -* @description: RUSSIAN ALPHABET; -*/ - -var regexp_d = /\d/; - -//CHECK#0410-042F -var result = true; -for (alpha = 0x0410; alpha <= 0x042F; alpha++) { - if (regexp_d.exec(String.fromCharCode(alpha)) !== null) { - result = false; - } -} - -if (result !== true) { - $ERROR('#1: RUSSIAN CAPITAL ALPHABET'); -} - -//CHECK#0430-044F -var result = true; -for (alpha = 0x0430; alpha <= 0x044F; alpha++) { - if (regexp_d.exec(String.fromCharCode(alpha)) !== null) { - result = false; - } -} - -if (result !== true) { - $ERROR('#2: russian small alphabet'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A5_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A5_T4.js deleted file mode 100644 index 3e1a22959..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A5_T4.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.12_A5_T4; -* @section: 15.10.2.12; -* @assertion: The production CharacterClassEscape :: d evaluates by returning the ten-element set of characters containing the characters 0 through 9 inclusive; -* @description: non-d; -*/ - -//CHECK#1 -var non_d = "_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\f\n\r\t\v~`!@#$%^&*()-+={[}]|\\:;'<,>./? " + '"'; -if (/\d/.exec(non_d) !== null) { - $ERROR('#1: non-d'); -} - -//CHECK#2 -var non_D = '0123456789'; -var regexp_d = /\d/g; -var k = 0; -while (regexp_d.exec(non_D) !== null) { - k++; -} - -if (non_D.length !== k) { - $ERROR('#2: non-D'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A6_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A6_T1.js deleted file mode 100644 index 0b08e3fc4..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A6_T1.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.12_A6_T1; -* @section: 15.10.2.12; -* @assertion: The production CharacterClassEscape :: D evaluates by returning the set of all characters not -* included in the set returned by CharacterClassEscape :: d; -* @description: 0 - 9; -*/ - -var regexp_D = /\D/; - -//CHECK#0030-0039 -var result = true; -for (alpha = 0x0030; alpha <= 0x0039; alpha++) { - if (regexp_D.exec(String.fromCharCode(alpha)) !== null) { - result = false; - } -} - -if (result !== true) { - $ERROR('#1: 0 - 9'); -} - -//CHECK#005F -str = String.fromCharCode(alpha); -var arr = regexp_D.exec(str); -if ((arr === null) || (arr[0] !== str)) { - $ERROR('#2: _'); -} - -//CHECK#0020 -str = String.fromCharCode(alpha); -var arr = regexp_D.exec(str); -if ((arr === null) || (arr[0] !== str)) { - $ERROR('#3: '); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A6_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A6_T2.js deleted file mode 100644 index 3604bf9c0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A6_T2.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.12_A6_T2; -* @section: 15.10.2.12; -* @assertion: The production CharacterClassEscape :: D evaluates by returning the set of all characters not -* included in the set returned by CharacterClassEscape :: d; -* @description: ENGLISH ALPHABET; -*/ - -var regexp_D = /\D/; - -//CHECK#0041-005A -var result = true; -for (alpha = 0x0041; alpha <= 0x005A; alpha++) { - str = String.fromCharCode(alpha); - arr = regexp_D.exec(str); - if ((arr === null) || (arr[0] !== str)) { - result = false; - } -} - -if (result !== true) { - $ERROR('#1: ENGLISH CAPITAL ALPHABET'); -} - -//CHECK#0061-007A -var result = true; -for (alpha = 0x0061; alpha <= 0x007A; alpha++) { - str = String.fromCharCode(alpha); - arr = regexp_D.exec(str); - if ((arr === null) || (arr[0] !== str)) { - result = false; - } -} - -if (result !== true) { - $ERROR('#2: english small alphabet'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A6_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A6_T3.js deleted file mode 100644 index a5751f3f5..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A6_T3.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.12_A6_T3; -* @section: 15.10.2.12; -* @assertion: The production CharacterClassEscape :: D evaluates by returning the set of all characters not -* included in the set returned by CharacterClassEscape :: d; -* @description: RUSSIAN ALPHABET; -*/ - -var regexp_D = /\D/; - -//CHECK#0410-042F -var result = true; -for (alpha = 0x0410; alpha <= 0x042F; alpha++) { - str = String.fromCharCode(alpha); - arr = regexp_D.exec(str); - if ((arr === null) || (arr[0] !== str)) { - result = false; - } -} - -if (result !== true) { - $ERROR('#1: RUSSIAN CAPITAL ALPHABET'); -} - -//CHECK#0430-044F -var result = true; -for (alpha = 0x0430; alpha <= 0x044F; alpha++) { - str = String.fromCharCode(alpha); - arr = regexp_D.exec(str); - if ((arr === null) || (arr[0] !== str)) { - result = false; - } -} - -if (result !== true) { - $ERROR('#2: russian small alphabet'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A6_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A6_T4.js deleted file mode 100644 index 400f73a91..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.12_CharacterClassEscape/S15.10.2.12_A6_T4.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.12_A6_T4; -* @section: 15.10.2.12; -* @assertion: The production CharacterClassEscape :: D evaluates by returning the set of all characters not -* included in the set returned by CharacterClassEscape :: d; -* @description: RUSSIAN ALPHABET; -*/ - -//CHECK#1 -var non_d = "_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\f\n\r\t\v~`!@#$%^&*()-+={[}]|\\:;'<,>./? " + '"'; -var regexp_D = /\D/g; -var k = 0; -while (regexp_D.exec(non_d) !== null) { - k++; -} - -if (non_d.length !== k) { - $ERROR('#1: non-d'); -} - -//CHECK#2 -var non_d = '0123456789'; -if (/\D/.exec(non_d) !== null) { - $ERROR('#2: non-d'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A1_T1.js deleted file mode 100644 index e09ea1cbc..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A1_T1.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.13_A1_T1; -* @section: 15.10.2.13; -* @assertion: The production CharacterClass :: [ [lookahead \notin {^}] ClassRanges ] evaluates by evaluating ClassRanges to obtain a CharSet and returning that CharSet and the boolean false; -* @description: Execute /[]a/.test("\0a\0a") and check results; -*/ - -__executed = /[]a/.test("\0a\0a");; - -//CHECK#1 - if (__executed) { - $ERROR('#1: /[]a/.test("\\0a\\0a") === false'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A1_T10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A1_T10.js deleted file mode 100644 index 2898dba3d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A1_T10.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.13_A1_T10; -* @section: 15.10.2.13; -* @assertion: The production CharacterClass :: [ [lookahead \notin {^}] ClassRanges ] evaluates by evaluating ClassRanges to obtain a CharSet and returning that CharSet and the boolean false; -* @description: Execute /[a-c\d]+/.exec("\n\n\abc324234\n") and check results; -*/ - -__executed = /[a-c\d]+/.exec("\n\n\abc324234\n"); - -__expected = ["abc324234"]; -__expected.index = 2; -__expected.input = "\n\n\abc324234\n"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /[a-c\\d]+/.exec("\\n\\n\\abc324234\\n"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /[a-c\\d]+/.exec("\\n\\n\\abc324234\\n"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /[a-c\\d]+/.exec("\\n\\n\\abc324234\\n"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /[a-c\\d]+/.exec("\\n\\n\\abc324234\\n"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A1_T11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A1_T11.js deleted file mode 100644 index 689b2c315..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A1_T11.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.13_A1_T11; -* @section: 15.10.2.13; -* @assertion: The production CharacterClass :: [ [lookahead \notin {^}] ClassRanges ] evaluates by evaluating ClassRanges to obtain a CharSet and returning that CharSet and the boolean false; -* @description: Execute /ab[.]?c/.exec("abc") and check results; -*/ - -__executed = /ab[.]?c/.exec("abc"); - -__expected = ["abc"]; -__expected.index = 0; -__expected.input = "abc"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /ab[.]?c/.exec("abc"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /ab[.]?c/.exec("abc"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /ab[.]?c/.exec("abc"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /ab[.]?c/.exec("abc"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A1_T12.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A1_T12.js deleted file mode 100644 index 0e58723af..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A1_T12.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.13_A1_T12; -* @section: 15.10.2.13; -* @assertion: The production CharacterClass :: [ [lookahead \notin {^}] ClassRanges ] evaluates by evaluating ClassRanges to obtain a CharSet and returning that CharSet and the boolean false; -* @description: Execute /a[b]c/.exec("abc") and check results; -*/ - -__executed = /a[b]c/.exec("abc"); - -__expected = ["abc"]; -__expected.index = 0; -__expected.input = "abc"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /a[b]c/.exec("abc"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /a[b]c/.exec("abc"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /a[b]c/.exec("abc"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /a[b]c/.exec("abc"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A1_T13.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A1_T13.js deleted file mode 100644 index ea4fc46ab..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A1_T13.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.13_A1_T13; -* @section: 15.10.2.13; -* @assertion: The production CharacterClass :: [ [lookahead \notin {^}] ClassRanges ] evaluates by evaluating ClassRanges to obtain a CharSet and returning that CharSet and the boolean false; -* @description: Execute /[a-z][^1-9][a-z]/.exec("a1b b2c c3d def f4g") and check results; -*/ - -__executed = /[a-z][^1-9][a-z]/.exec("a1b b2c c3d def f4g"); - -__expected = ["def"]; -__expected.index = 15; -__expected.input = "a1b b2c c3d def f4g"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /[a-z][^1-9][a-z]/.exec("a1b b2c c3d def f4g"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /[a-z][^1-9][a-z]/.exec("a1b b2c c3d def f4g"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /[a-z][^1-9][a-z]/.exec("a1b b2c c3d def f4g"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /[a-z][^1-9][a-z]/.exec("a1b b2c c3d def f4g"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A1_T14.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A1_T14.js deleted file mode 100644 index 8b5cf75ef..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A1_T14.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.13_A1_T14; -* @section: 15.10.2.13; -* @assertion: The production CharacterClass :: [ [lookahead \notin {^}] ClassRanges ] evaluates by evaluating ClassRanges to obtain a CharSet and returning that CharSet and the boolean false; -* @description: Execute /[*&$]{3}/.exec("123*&$abc") and check results; -*/ - -__executed = /[*&$]{3}/.exec("123*&$abc"); - -__expected = ["*&$"]; -__expected.index = 3; -__expected.input = "123*&$abc"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /[*&$]{3}/.exec("123*&$abc"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /[*&$]{3}/.exec("123*&$abc"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /[*&$]{3}/.exec("123*&$abc"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /[*&$]{3}/.exec("123*&$abc"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A1_T15.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A1_T15.js deleted file mode 100644 index 9a62a73ad..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A1_T15.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.13_A1_T15; -* @section: 15.10.2.13; -* @assertion: The production CharacterClass :: [ [lookahead \notin {^}] ClassRanges ] evaluates by evaluating ClassRanges to obtain a CharSet and returning that CharSet and the boolean false; -* @description: Execute /[\d][\n][^\d]/.exec("line1\nline2") and check results; -*/ - -__executed = /[\d][\n][^\d]/.exec("line1\nline2"); - -__expected = ["1\nl"]; -__expected.index = 4; -__expected.input = "line1\nline2"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /[\\d][\\n][^\\d]/.exec("line1\\nline2"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /[\\d][\\n][^\\d]/.exec("line1\\nline2"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /[\\d][\\n][^\\d]/.exec("line1\\nline2"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /[\\d][\\n][^\\d]/.exec("line1\\nline2"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A1_T16.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A1_T16.js deleted file mode 100644 index 5e3fb5aa7..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A1_T16.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.13_A1_T16; -* @section: 15.10.2.13; -* @assertion: The production CharacterClass :: [ [lookahead \notin {^}] ClassRanges ] evaluates by evaluating ClassRanges to obtain a CharSet and returning that CharSet and the boolean false; -* @description: Execute /[\d][\12-\14]{1,}[^\d]/.exec("line1\n\n\n\n\nline2") and check results; -*/ - -__executed = /[\d][\12-\14]{1,}[^\d]/.exec("line1\n\n\n\n\nline2"); - -__expected = ["1\n\n\n\n\nl"]; -__expected.index = 4; -__expected.input = "line1\n\n\n\n\nline2"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /[\\d][\\12-\\14]{1,}[^\\d]/.exec("line1\\n\\n\\n\\n\\nline2"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /[\\d][\\12-\\14]{1,}[^\\d]/.exec("line1\\n\\n\\n\\n\\nline2"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /[\\d][\\12-\\14]{1,}[^\\d]/.exec("line1\\n\\n\\n\\n\\nline2"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /[\\d][\\12-\\14]{1,}[^\\d]/.exec("line1\\n\\n\\n\\n\\nline2"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A1_T17.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A1_T17.js deleted file mode 100644 index b9d758657..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A1_T17.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.13_A1_T17; -* @section: 15.10.2.13; -* @assertion: The production CharacterClass :: [ [lookahead \notin {^}] ClassRanges ] evaluates by evaluating ClassRanges to obtain a CharSet and returning that CharSet and the boolean false; -* @description: Execute /[]/.exec("a[b\n[]\tc]d") and check results; -*/ - -__executed = /[]/.exec("a[b\n[]\tc]d"); - -//CHECK#1 -if (__executed !== null) { - $ERROR('#1: /[]/.exec("a[b\\n[]\\tc]d") === false'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A1_T2.js deleted file mode 100644 index 6e7a955bf..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A1_T2.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.13_A1_T2; -* @section: 15.10.2.13; -* @assertion: The production CharacterClass :: [ [lookahead \notin {^}] ClassRanges ] evaluates by evaluating ClassRanges to obtain a CharSet and returning that CharSet and the boolean false; -* @description: Execute /a[]/.test("\0a\0a") and check results; -*/ - -__executed = /a[]/.test("\0a\0a");; - -//CHECK#1 -if (__executed) { - $ERROR('#1: /a[]/.test("\\0a\\0a") === false'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A1_T3.js deleted file mode 100644 index 9805c6175..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A1_T3.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.13_A1_T3; -* @section: 15.10.2.13; -* @assertion: The production CharacterClass :: [ [lookahead \notin {^}] ClassRanges ] evaluates by evaluating ClassRanges to obtain a CharSet and returning that CharSet and the boolean false; -* @description: Execute /q[ax-zb](?=\s+)/.exec("qYqy ") and check results; -*/ - -__executed = /q[ax-zb](?=\s+)/.exec("qYqy "); - -__expected = ["qy"]; -__expected.index = 2; -__expected.input = "qYqy "; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /q[ax-zb](?=\\s+)/.exec("qYqy "); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /q[ax-zb](?=\\s+)/.exec("qYqy "); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /q[ax-zb](?=\\s+)/.exec("qYqy "); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /q[ax-zb](?=\\s+)/.exec("qYqy "); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A1_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A1_T4.js deleted file mode 100644 index 8ebc4a714..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A1_T4.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.13_A1_T4; -* @section: 15.10.2.13; -* @assertion: The production CharacterClass :: [ [lookahead \notin {^}] ClassRanges ] evaluates by evaluating ClassRanges to obtain a CharSet and returning that CharSet and the boolean false; -* @description: Execute /q[ax-zb](?=\s+)/.exec("tqaqy ") and check results; -*/ - -__executed = /q[ax-zb](?=\s+)/.exec("tqaqy "); - -__expected = ["qy"]; -__expected.index = 3; -__expected.input = "tqaqy "; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /q[ax-zb](?=\\s+)/.exec("tqaqy "); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /q[ax-zb](?=\\s+)/.exec("tqaqy "); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /q[ax-zb](?=\\s+)/.exec("tqaqy "); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /q[ax-zb](?=\\s+)/.exec("tqaqy "); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A1_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A1_T5.js deleted file mode 100644 index f6ad29198..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A1_T5.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.13_A1_T5; -* @section: 15.10.2.13; -* @assertion: The production CharacterClass :: [ [lookahead \notin {^}] ClassRanges ] evaluates by evaluating ClassRanges to obtain a CharSet and returning that CharSet and the boolean false; -* @description: Execute /q[ax-zb](?=\s+)/.exec("tqa\t qy ") and check results; -*/ - -__executed = /q[ax-zb](?=\s+)/.exec("tqa\t qy "); - -__expected = ["qa"]; -__expected.index = 1; -__expected.input = "tqa\t qy "; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /q[ax-zb](?=\\s+)/.exec("tqa\\t qy "); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /q[ax-zb](?=\\s+)/.exec("tqa\\t qy "); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /q[ax-zb](?=\\s+)/.exec("tqa\\t qy "); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /q[ax-zb](?=\\s+)/.exec("tqa\\t qy "); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A1_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A1_T6.js deleted file mode 100644 index 9b8adf409..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A1_T6.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.13_A1_T6; -* @section: 15.10.2.13; -* @assertion: The production CharacterClass :: [ [lookahead \notin {^}] ClassRanges ] evaluates by evaluating ClassRanges to obtain a CharSet and returning that CharSet and the boolean false; -* @description: Execute /ab[ercst]de/.exec("abcde") and check results; -*/ - -__executed = /ab[ercst]de/.exec("abcde"); - -__expected = ["abcde"]; -__expected.index = 0; -__expected.input = "abcde"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /ab[ercst]de/.exec("abcde"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /ab[ercst]de/.exec("abcde"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /ab[ercst]de/.exec("abcde"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /ab[ercst]de/.exec("abcde"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A1_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A1_T7.js deleted file mode 100644 index 2b39b9938..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A1_T7.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.13_A1_T7; -* @section: 15.10.2.13; -* @assertion: The production CharacterClass :: [ [lookahead \notin {^}] ClassRanges ] evaluates by evaluating ClassRanges to obtain a CharSet and returning that CharSet and the boolean false; -* @description: Execute /ab[erst]de/.test("abcde") and check results; -*/ - -__executed = /ab[erst]de/.test("abcde"); - -//CHECK#1 -if (__executed) { - $ERROR('#1: /ab[erst]de/.test("abcde") === false'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A1_T8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A1_T8.js deleted file mode 100644 index 3ebc41419..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A1_T8.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.13_A1_T8; -* @section: 15.10.2.13; -* @assertion: The production CharacterClass :: [ [lookahead \notin {^}] ClassRanges ] evaluates by evaluating ClassRanges to obtain a CharSet and returning that CharSet and the boolean false; -* @description: Execute /[d-h]+/.exec("abcdefghijkl") and check results; -*/ - -__executed = /[d-h]+/.exec("abcdefghijkl"); - -__expected = ["defgh"]; -__expected.index = 3; -__expected.input = "abcdefghijkl"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /[d-h]+/.exec("abcdefghijkl"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /[d-h]+/.exec("abcdefghijkl"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /[d-h]+/.exec("abcdefghijkl"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /[d-h]+/.exec("abcdefghijkl"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A1_T9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A1_T9.js deleted file mode 100644 index 3248bff85..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A1_T9.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.13_A1_T9; -* @section: 15.10.2.13; -* @assertion: The production CharacterClass :: [ [lookahead \notin {^}] ClassRanges ] evaluates by evaluating ClassRanges to obtain a CharSet and returning that CharSet and the boolean false; -* @description: Execute /[1234567].{2}/.exec("abc6defghijkl") and check results; -*/ - -__executed = /[1234567].{2}/.exec("abc6defghijkl"); - -__expected = ["6de"]; -__expected.index = 3; -__expected.input = "abc6defghijkl"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /[1234567].{2}/.exec("abc6defghijkl"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /[1234567].{2}/.exec("abc6defghijkl"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /[1234567].{2}/.exec("abc6defghijkl"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /[1234567].{2}/.exec("abc6defghijkl"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A2_T1.js deleted file mode 100644 index 3bfb3ee6e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A2_T1.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.13_A2_T1; -* @section: 15.10.2.13; -* @assertion: The production CharacterClass :: [ ^ ClassRanges ] evaluates by evaluating ClassRanges to obtain a CharSet and returning that CharSet and the boolean true; -* @description: Execute /[^]a/m.exec("a\naba") and check results; -*/ - -__executed = /[^]a/m.exec("a\naba"); - -__expected = ["\na"]; -__expected.index = 1; -__expected.input = "a\naba"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /[^]a/m.exec("a\\naba"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /[^]a/m.exec("a\\naba"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /[^]a/m.exec("a\\naba"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /[^]a/m.exec("a\\naba"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A2_T2.js deleted file mode 100644 index 18c0559d7..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A2_T2.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.13_A2_T2; -* @section: 15.10.2.13; -* @assertion: The production CharacterClass :: [ ^ ClassRanges ] evaluates by evaluating ClassRanges to obtain a CharSet and returning that CharSet and the boolean true; -* @description: Execute /a[^]/.exec(" a\t\n") and check results; -*/ - -__executed = /a[^]/.exec(" a\t\n"); - -__expected = ["a\t"]; -__expected.index = 3; -__expected.input = " a\t\n"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /a[^]/.exec(" a\\t\\n"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /a[^]/.exec(" a\\t\\n"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /a[^]/.exec(" a\\t\\n"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /a[^]/.exec(" a\\t\\n"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A2_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A2_T3.js deleted file mode 100644 index b6aa9a0a4..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A2_T3.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.13_A2_T3; -* @section: 15.10.2.13; -* @assertion: The production CharacterClass :: [ ^ ClassRanges ] evaluates by evaluating ClassRanges to obtain a CharSet and returning that CharSet and the boolean true; -* @description: Execute /a[^b-z]\s+/.exec("ab an az aY n") and check results; -*/ - -__executed = /a[^b-z]\s+/.exec("ab an az aY n"); - -__expected = ["aY "]; -__expected.index = 9; -__expected.input = "ab an az aY n"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /a[^b-z]\\s+/.exec("ab an az aY n"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /a[^b-z]\\s+/.exec("ab an az aY n"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /a[^b-z]\\s+/.exec("ab an az aY n"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /a[^b-z]\\s+/.exec("ab an az aY n"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A2_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A2_T4.js deleted file mode 100644 index 7393546a1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A2_T4.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.13_A2_T4; -* @section: 15.10.2.13; -* @assertion: The production CharacterClass :: [ ^ ClassRanges ] evaluates by evaluating ClassRanges to obtain a CharSet and returning that CharSet and the boolean true; -* @description: Execute /[^\b]+/g.exec("easy\bto\u0008ride") and check results; -*/ - -__executed = /[^\b]+/g.exec("easy\bto\u0008ride"); - -__expected = ["easy"]; -__expected.index = 0; -__expected.input = "easy\bto\u0008ride"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /[^\\b]+/g.exec("easy\\bto\\u0008ride"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /[^\\b]+/g.exec("easy\\bto\\u0008ride"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /[^\\b]+/g.exec("easy\\bto\\u0008ride"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /[^\\b]+/g.exec("easy\\bto\\u0008ride"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A2_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A2_T5.js deleted file mode 100644 index 054d1ead5..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A2_T5.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.13_A2_T5; -* @section: 15.10.2.13; -* @assertion: The production CharacterClass :: [ ^ ClassRanges ] evaluates by evaluating ClassRanges to obtain a CharSet and returning that CharSet and the boolean true; -* @description: Execute /a[^1-9]c/.exec("abc") and check results; -*/ - -__executed = /a[^1-9]c/.exec("abc"); - -__expected = ["abc"]; -__expected.index = 0; -__expected.input = "abc"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /a[^1-9]c/.exec("abc"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /a[^1-9]c/.exec("abc"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /a[^1-9]c/.exec("abc"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /a[^1-9]c/.exec("abc"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A2_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A2_T6.js deleted file mode 100644 index 51a5818fe..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A2_T6.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.13_A2_T6; -* @section: 15.10.2.13; -* @assertion: The production CharacterClass :: [ ^ ClassRanges ] evaluates by evaluating ClassRanges to obtain a CharSet and returning that CharSet and the boolean true; -* @description: Execute /a[^b]c/.test("abc") and check results; -*/ - -__executed = /a[^b]c/.test("abc"); - -//CHECK#1 -if (__executed) { - $ERROR('#1: /a[^b]c/.test("abc") === false'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A2_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A2_T7.js deleted file mode 100644 index f6986e21a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A2_T7.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.13_A2_T7; -* @section: 15.10.2.13; -* @assertion: The production CharacterClass :: [ ^ ClassRanges ] evaluates by evaluating ClassRanges to obtain a CharSet and returning that CharSet and the boolean true; -* @description: Execute /[^a-z]{4}/.exec("abc#$%def%&*@ghi") and check results; -*/ - -__executed = /[^a-z]{4}/.exec("abc#$%def%&*@ghi"); - -__expected = ["%&*@"]; -__expected.index = 9; -__expected.input = "abc#$%def%&*@ghi"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /[^a-z]{4}/.exec("abc#$%def%&*@ghi"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /[^a-z]{4}/.exec("abc#$%def%&*@ghi"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /[^a-z]{4}/.exec("abc#$%def%&*@ghi"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /[^a-z]{4}/.exec("abc#$%def%&*@ghi"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A2_T8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A2_T8.js deleted file mode 100644 index 98aa93951..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A2_T8.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.13_A2_T8; -* @section: 15.10.2.13; -* @assertion: The production CharacterClass :: [ ^ ClassRanges ] evaluates by evaluating ClassRanges to obtain a CharSet and returning that CharSet and the boolean true; -* @description: Execute /[^]/.exec("abc#$%def%&*@ghi") and check results; -*/ - -__executed = /[^]/.exec("abc#$%def%&*@ghi"); - -__expected = ["a"]; -__expected.index = 0; -__expected.input = "abc#$%def%&*@ghi"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /[^]/.exec("abc#$%def%&*@ghi"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /[^]/.exec("abc#$%def%&*@ghi"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /[^]/.exec("abc#$%def%&*@ghi"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /[^]/.exec("abc#$%def%&*@ghi"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A3_T1.js deleted file mode 100644 index 07f36fe0a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A3_T1.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.13_A3_T1; -* @section: 15.10.2.13; -* @assertion: Inside a CharacterClass, \b means the backspace character; -* @description: Execute /.[\b]./.exec("abc\bdef") and check results; -*/ - -__executed = /.[\b]./.exec("abc\bdef"); - -__expected = ["c\bd"]; -__expected.index = 2; -__expected.input = "abc\bdef"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /.[\\b]./.exec("abc\\bdef"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /.[\\b]./.exec("abc\\bdef"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /.[\\b]./.exec("abc\\bdef"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /.[\\b]./.exec("abc\\bdef"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A3_T2.js deleted file mode 100644 index b980fe930..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A3_T2.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.13_A3_T2; -* @section: 15.10.2.13; -* @assertion: Inside a CharacterClass, \b means the backspace character; -* @description: Execute /c[\b]{3}d/.exec("abc\b\b\bdef") and check results; -*/ - -__executed = /c[\b]{3}d/.exec("abc\b\b\bdef"); - -__expected = ["c\b\b\bd"]; -__expected.index = 2; -__expected.input = "abc\b\b\bdef"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /c[\\b]{3}d/.exec("abc\\b\\b\\bdef"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /c[\\b]{3}d/.exec("abc\\b\\b\\bdef"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /c[\\b]{3}d/.exec("abc\\b\\b\\bdef"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /c[\\b]{3}d/.exec("abc\\b\\b\\bdef"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A3_T3.js deleted file mode 100644 index cd1823985..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A3_T3.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.13_A3_T3; -* @section: 15.10.2.13; -* @assertion: Inside a CharacterClass, \b means the backspace character; -* @description: Execute /[^\[\b\]]+/.exec("abc\bdef") and check results; -*/ - -__executed = /[^\[\b\]]+/.exec("abc\bdef"); - -__expected = ["abc"]; -__expected.index = 0; -__expected.input = "abc\bdef"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /[^\\[\\b\\]]+/.exec("abc\\bdef"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /[^\\[\\b\\]]+/.exec("abc\\bdef"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /[^\\[\\b\\]]+/.exec("abc\\bdef"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /[^\\[\\b\\]]+/.exec("abc\\bdef"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A3_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A3_T4.js deleted file mode 100644 index e78b355c2..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.13_CharacterClass/S15.10.2.13_A3_T4.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.13_A3_T4; -* @section: 15.10.2.13; -* @assertion: Inside a CharacterClass, \b means the backspace character; -* @description: Execute /[^\[\b\]]+/.exec("abcdef") and check results; -*/ - -__executed = /[^\[\b\]]+/.exec("abcdef"); - -__expected = ["abcdef"]; -__expected.index = 0; -__expected.input = "abcdef"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /[^\\[\\b\\]]+/.exec("abcdef"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /[^\\[\\b\\]]+/.exec("abcdef"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /[^\\[\\b\\]]+/.exec("abcdef"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /[^\\[\\b\\]]+/.exec("abcdef"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T1.js deleted file mode 100644 index 6ad4e45e9..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T1.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.15_A1_T1; -* @section: 15.10.2.15; -* @assertion: The internal helper function CharacterRange takes two CharSet parameters A and B and performs the -* following: -* If A does not contain exactly one character or B does not contain exactly one character then throw -* a SyntaxError exception; -* @description: Checking if execution of "/[b-ac-e]/.exec("a")" leads to throwing the correct exception; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: /[b-ac-e]/.exec("a") throw SyntaxError. Actual: ' + (/[b-ac-e]/.exec("a"))); -} catch (e) { - if((e instanceof SyntaxError) !== true){ - $ERROR('#1.2: /[b-ac-e]/.exec("a") throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T10.js deleted file mode 100644 index 2fa7b0daa..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T10.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.15_A1_T10; -* @section: 15.10.2.15; -* @assertion: The internal helper function CharacterRange takes two CharSet parameters A and B and performs the -* following: -* If A does not contain exactly one character or B does not contain exactly one character then throw -* a SyntaxError exception; -* @description: Checking if execution of "/[\10b-G]/.exec("a")" leads to throwing the correct exception; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: /[\\10b-G]/.exec("a") throw SyntaxError. Actual: ' + (/[\10b-G]/.exec("a"))); -} catch (e) { - if((e instanceof SyntaxError) !== true){ - $ERROR('#1.2: /[\\10b-G]/.exec("a") throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T11.js deleted file mode 100644 index ff61077b9..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T11.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.15_A1_T11; -* @section: 15.10.2.15; -* @assertion: The internal helper function CharacterRange takes two CharSet parameters A and B and performs the -* following: -* If A does not contain exactly one character or B does not contain exactly one character then throw -* a SyntaxError exception; -* @description: Checking if execution of "/[\bd-G]/.exec("a")" leads to throwing the correct exception; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: /[\\bd-G]/.exec("a") throw SyntaxError. Actual: ' + (/[\bd-G]/.exec("a"))); -} catch (e) { - if((e instanceof SyntaxError) !== true){ - $ERROR('#1.2: /[\\bd-G]/.exec("a") throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T12.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T12.js deleted file mode 100644 index 22f32318f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T12.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.15_A1_T12; -* @section: 15.10.2.15; -* @assertion: The internal helper function CharacterRange takes two CharSet parameters A and B and performs the -* following: -* If A does not contain exactly one character or B does not contain exactly one character then throw -* a SyntaxError exception; -* @description: Checking if execution of "/[\Bd-G]/.exec("a")" leads to throwing the correct exception; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: /[\\Bd-G]/.exec("a") throw SyntaxError. Actual: ' + (/[\Bd-G]/.exec("a"))); -} catch (e) { - if((e instanceof SyntaxError) !== true){ - $ERROR('#1.2: /[\\Bd-G]/.exec("a") throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T13.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T13.js deleted file mode 100644 index 0e2f56f14..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T13.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.15_A1_T13; -* @section: 15.10.2.15; -* @assertion: The internal helper function CharacterRange takes two CharSet parameters A and B and performs the -* following: -* If A does not contain exactly one character or B does not contain exactly one character then throw -* a SyntaxError exception; -* @description: Checking if execution of "/[\td-G]/.exec("a")" leads to throwing the correct exception; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: /[\\td-G]/.exec("a") throw SyntaxError. Actual: ' + (/[\td-G]/.exec("a"))); -} catch (e) { - if((e instanceof SyntaxError) !== true){ - $ERROR('#1.2: /[\\td-G]/.exec("a") throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T14.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T14.js deleted file mode 100644 index 8e9236a5c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T14.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.15_A1_T14; -* @section: 15.10.2.15; -* @assertion: The internal helper function CharacterRange takes two CharSet parameters A and B and performs the -* following: -* If A does not contain exactly one character or B does not contain exactly one character then throw -* a SyntaxError exception; -* @description: Checking if execution of "/[\nd-G]/.exec("a")" leads to throwing the correct exception; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: /[\\nd-G]/.exec("a") throw SyntaxError. Actual: ' + (/[\nd-G]/.exec("a"))); -} catch (e) { - if((e instanceof SyntaxError) !== true){ - $ERROR('#1.2: /[\\nd-G]/.exec("a") throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T15.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T15.js deleted file mode 100644 index 6d29746e3..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T15.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.15_A1_T15; -* @section: 15.10.2.15; -* @assertion: The internal helper function CharacterRange takes two CharSet parameters A and B and performs the -* following: -* If A does not contain exactly one character or B does not contain exactly one character then throw -* a SyntaxError exception; -* @description: Checking if execution of "/[\vd-G]/.exec("a")" leads to throwing the correct exception; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: /[\\vd-G]/.exec("a") throw SyntaxError. Actual: ' + (/[\vd-G]/.exec("a"))); -} catch (e) { - if((e instanceof SyntaxError) !== true){ - $ERROR('#1.2: /[\\vd-G]/.exec("a") throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T16.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T16.js deleted file mode 100644 index 56bbc2b56..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T16.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.15_A1_T16; -* @section: 15.10.2.15; -* @assertion: The internal helper function CharacterRange takes two CharSet parameters A and B and performs the -* following: -* If A does not contain exactly one character or B does not contain exactly one character then throw -* a SyntaxError exception; -* @description: Checking if execution of "/[\fd-G]/.exec("a")" leads to throwing the correct exception; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: /[\\fd-G]/.exec("a") throw SyntaxError. Actual: ' + (/[\fd-G]/.exec("a"))); -} catch (e) { - if((e instanceof SyntaxError) !== true){ - $ERROR('#1.2: /[\\fd-G]/.exec("a") throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T17.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T17.js deleted file mode 100644 index 303c4a9f8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T17.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.15_A1_T17; -* @section: 15.10.2.15; -* @assertion: The internal helper function CharacterRange takes two CharSet parameters A and B and performs the -* following: -* If A does not contain exactly one character or B does not contain exactly one character then throw -* a SyntaxError exception; -* @description: Checking if execution of "/[\rd-G]/.exec("a")" leads to throwing the correct exception; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: /[\\rd-G]/.exec("a") throw SyntaxError. Actual: ' + (/[\rd-G]/.exec("a"))); -} catch (e) { - if((e instanceof SyntaxError) !== true){ - $ERROR('#1.2: /[\\rd-G]/.exec("a") throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T18.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T18.js deleted file mode 100644 index edc8d0d67..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T18.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.15_A1_T18; -* @section: 15.10.2.15; -* @assertion: The internal helper function CharacterRange takes two CharSet parameters A and B and performs the -* following: -* If A does not contain exactly one character or B does not contain exactly one character then throw -* a SyntaxError exception; -* @description: Checking if execution of "/[\c0001d-G]/.exec("1")" leads to throwing the correct exception; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: /[\\c0001d-G]/.exec("1") throw SyntaxError. Actual: ' + (/[\c0001d-G]/.exec("1"))); -} catch (e) { - if((e instanceof SyntaxError) !== true){ - $ERROR('#1.2: /[\\c0001d-G]/.exec("1") throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T19.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T19.js deleted file mode 100644 index aab118a14..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T19.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.15_A1_T19; -* @section: 15.10.2.15; -* @assertion: The internal helper function CharacterRange takes two CharSet parameters A and B and performs the -* following: -* If A does not contain exactly one character or B does not contain exactly one character then throw -* a SyntaxError exception; -* @description: Checking if execution of "/[\x0061d-G]/.exec("1")" leads to throwing the correct exception; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: /[\\x0061d-G]/.exec("1") throw SyntaxError. Actual: ' + (/[\x0061d-G]/.exec("1"))); -} catch (e) { - if((e instanceof SyntaxError) !== true){ - $ERROR('#1.2: /[\\x0061d-G]/.exec("1") throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T2.js deleted file mode 100644 index 22c93e9b8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T2.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.15_A1_T2; -* @section: 15.10.2.15; -* @assertion: The internal helper function CharacterRange takes two CharSet parameters A and B and performs the -* following: -* If A does not contain exactly one character or B does not contain exactly one character then throw -* a SyntaxError exception; -* @description: Checking if execution of "/[a-dc-b]/.exec("a")" leads to throwing the correct exception; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: /[a-dc-b]/.exec("a") throw SyntaxError. Actual: ' + (/[a-dc-b]/.exec("a"))); -} catch (e) { - if((e instanceof SyntaxError) !== true){ - $ERROR('#1.2: /[a-dc-b]/.exec("a") throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T20.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T20.js deleted file mode 100644 index 26127faad..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T20.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.15_A1_T20; -* @section: 15.10.2.15; -* @assertion: The internal helper function CharacterRange takes two CharSet parameters A and B and performs the -* following: -* If A does not contain exactly one character or B does not contain exactly one character then throw -* a SyntaxError exception; -* @description: Checking if execution of "/[\u0061d-G]/.exec("a")" leads to throwing the correct exception; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: /[\\u0061d-G]/.exec("a") throw SyntaxError. Actual: ' + (/[\u0061d-G]/.exec("a"))); -} catch (e) { - if((e instanceof SyntaxError) !== true){ - $ERROR('#1.2: /[\\u0061d-G]/.exec("a") throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T21.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T21.js deleted file mode 100644 index fa8547a7d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T21.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.15_A1_T21; -* @section: 15.10.2.15; -* @assertion: The internal helper function CharacterRange takes two CharSet parameters A and B and performs the -* following: -* If A does not contain exactly one character or B does not contain exactly one character then throw -* a SyntaxError exception; -* @description: Checking if execution of "/[\ad-G]/.exec("a")" leads to throwing the correct exception; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: /[\\ad-G]/.exec("a") throw SyntaxError. Actual: ' + (/[\ad-G]/.exec("a"))); -} catch (e) { - if((e instanceof SyntaxError) !== true){ - $ERROR('#1.2: /[\\ad-G]/.exec("a") throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T22.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T22.js deleted file mode 100644 index a583deb96..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T22.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.15_A1_T22; -* @section: 15.10.2.15; -* @assertion: The internal helper function CharacterRange takes two CharSet parameters A and B and performs the -* following: -* If A does not contain exactly one character or B does not contain exactly one character then throw -* a SyntaxError exception; -* @description: Checking if execution of "/[c-eb-a]/.exec("a")" leads to throwing the correct exception; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: /[c-eb-a]/.exec("a") throw SyntaxError. Actual: ' + (/[c-eb-a]/.exec("a"))); -} catch (e) { - if((e instanceof SyntaxError) !== true){ - $ERROR('#1.2: /[c-eb-a]/.exec("a") throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T23.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T23.js deleted file mode 100644 index 806d9900d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T23.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.15_A1_T23; -* @section: 15.10.2.15; -* @assertion: The internal helper function CharacterRange takes two CharSet parameters A and B and performs the -* following: -* If A does not contain exactly one character or B does not contain exactly one character then throw -* a SyntaxError exception; -* @description: Checking if execution of "/[b-G\d]/.exec("a")" leads to throwing the correct exception; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: /[b-G\\d]/.exec("a") throw SyntaxError. Actual: ' + (/[b-G\d]/.exec("a"))); -} catch (e) { - if((e instanceof SyntaxError) !== true){ - $ERROR('#1.2: /[b-G\\d]/.exec("a") throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T24.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T24.js deleted file mode 100644 index 11be5c16a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T24.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.15_A1_T24; -* @section: 15.10.2.15; -* @assertion: The internal helper function CharacterRange takes two CharSet parameters A and B and performs the -* following: -* If A does not contain exactly one character or B does not contain exactly one character then throw -* a SyntaxError exception; -* @description: Checking if execution of "/[b-G\D]/.exec("a")" leads to throwing the correct exception; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: /[b-G\\D]/.exec("a") throw SyntaxError. Actual: ' + (/[b-G\D]/.exec("a"))); -} catch (e) { - if((e instanceof SyntaxError) !== true){ - $ERROR('#1.2: /[b-G\\D]/.exec("a") throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T25.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T25.js deleted file mode 100644 index 627cc8a53..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T25.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.15_A1_T25; -* @section: 15.10.2.15; -* @assertion: The internal helper function CharacterRange takes two CharSet parameters A and B and performs the -* following: -* If A does not contain exactly one character or B does not contain exactly one character then throw -* a SyntaxError exception; -* @description: Checking if execution of "/[b-G\s]/.exec("a")" leads to throwing the correct exception; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: /[b-G\\s]/.exec("a") throw SyntaxError. Actual: ' + (/[b-G\s]/.exec("a"))); -} catch (e) { - if((e instanceof SyntaxError) !== true){ - $ERROR('#1.2: /[b-G\\s]/.exec("a") throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T26.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T26.js deleted file mode 100644 index 07a900e12..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T26.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.15_A1_T26; -* @section: 15.10.2.15; -* @assertion: The internal helper function CharacterRange takes two CharSet parameters A and B and performs the -* following: -* If A does not contain exactly one character or B does not contain exactly one character then throw -* a SyntaxError exception; -* @description: Checking if execution of "/[b-G\S]/.exec("a")" leads to throwing the correct exception; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: /[b-G\\S]/.exec("a") throw SyntaxError. Actual: ' + (/[b-G\S]/.exec("a"))); -} catch (e) { - if((e instanceof SyntaxError) !== true){ - $ERROR('#1.2: /[b-G\\S]/.exec("a") throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T27.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T27.js deleted file mode 100644 index 44674dfc2..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T27.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.15_A1_T27; -* @section: 15.10.2.15; -* @assertion: The internal helper function CharacterRange takes two CharSet parameters A and B and performs the -* following: -* If A does not contain exactly one character or B does not contain exactly one character then throw -* a SyntaxError exception; -* @description: Checking if execution of "/[b-G\w]/.exec("a")" leads to throwing the correct exception; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: /[b-G\\w]/.exec("a") throw SyntaxError. Actual: ' + (/[b-G\w]/.exec("a"))); -} catch (e) { - if((e instanceof SyntaxError) !== true){ - $ERROR('#1.2: /[b-G\\w]/.exec("a") throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T28.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T28.js deleted file mode 100644 index 94755f8b5..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T28.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.15_A1_T28; -* @section: 15.10.2.15; -* @assertion: The internal helper function CharacterRange takes two CharSet parameters A and B and performs the -* following: -* If A does not contain exactly one character or B does not contain exactly one character then throw -* a SyntaxError exception; -* @description: Checking if execution of "/[b-G\W]/.exec("a")" leads to throwing the correct exception; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: /[b-G\\W]/.exec("a") throw SyntaxError. Actual: ' + (/[b-G\W]/.exec("a"))); -} catch (e) { - if((e instanceof SyntaxError) !== true){ - $ERROR('#1.2: /[b-G\\W]/.exec("a") throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T29.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T29.js deleted file mode 100644 index 46689db93..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T29.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.15_A1_T29; -* @section: 15.10.2.15; -* @assertion: The internal helper function CharacterRange takes two CharSet parameters A and B and performs the -* following: -* If A does not contain exactly one character or B does not contain exactly one character then throw -* a SyntaxError exception; -* @description: Checking if execution of "/[b-G\0]/.exec("a")" leads to throwing the correct exception; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: /[b-G\\0]/.exec("a") throw SyntaxError. Actual: ' + (/[b-G\0]/.exec("a"))); -} catch (e) { - if((e instanceof SyntaxError) !== true){ - $ERROR('#1.2: /[b-G\\0]/.exec("a") throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T3.js deleted file mode 100644 index 460bc82c9..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T3.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.15_A1_T3; -* @section: 15.10.2.15; -* @assertion: The internal helper function CharacterRange takes two CharSet parameters A and B and performs the -* following: -* If A does not contain exactly one character or B does not contain exactly one character then throw -* a SyntaxError exception; -* @description: Checking if execution of "/[\db-G]/.exec("a")" leads to throwing the correct exception; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: /[\\db-G]/.exec("a") throw SyntaxError. Actual: ' + (/[\db-G]/.exec("a"))); -} catch (e) { - if((e instanceof SyntaxError) !== true){ - $ERROR('#1.2: /[\\db-G]/.exec("a") throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T30.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T30.js deleted file mode 100644 index 887c64af6..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T30.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.15_A1_T30; -* @section: 15.10.2.15; -* @assertion: The internal helper function CharacterRange takes two CharSet parameters A and B and performs the -* following: -* If A does not contain exactly one character or B does not contain exactly one character then throw -* a SyntaxError exception; -* @description: Checking if execution of "/[b-G\10]/.exec("a")" leads to throwing the correct exception; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: /[b-G\\10]/.exec("a") throw SyntaxError. Actual: ' + (/[b-G\10]/.exec("a"))); -} catch (e) { - if((e instanceof SyntaxError) !== true){ - $ERROR('#1.2: /[b-G\\10]/.exec("a") throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T31.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T31.js deleted file mode 100644 index 9fbe2b18a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T31.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.15_A1_T31; -* @section: 15.10.2.15; -* @assertion: The internal helper function CharacterRange takes two CharSet parameters A and B and performs the -* following: -* If A does not contain exactly one character or B does not contain exactly one character then throw -* a SyntaxError exception; -* @description: Checking if execution of "/[d-G\b]/.exec("a")" leads to throwing the correct exception; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: /[d-G\\b]/.exec("a") throw SyntaxError. Actual: ' + (/[d-G\b]/.exec("a"))); -} catch (e) { - if((e instanceof SyntaxError) !== true){ - $ERROR('#1.2: /[d-G\\b]/.exec("a") throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T32.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T32.js deleted file mode 100644 index 4b87672f4..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T32.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.15_A1_T32; -* @section: 15.10.2.15; -* @assertion: The internal helper function CharacterRange takes two CharSet parameters A and B and performs the -* following: -* If A does not contain exactly one character or B does not contain exactly one character then throw -* a SyntaxError exception; -* @description: Checking if execution of "/[d-G\B]/.exec("a")" leads to throwing the correct exception; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: /[d-G\\B]/.exec("a") throw SyntaxError. Actual: ' + (/[d-G\B]/.exec("a"))); -} catch (e) { - if((e instanceof SyntaxError) !== true){ - $ERROR('#1.2: /[d-G\\B]/.exec("a") throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T33.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T33.js deleted file mode 100644 index b6a4d1e42..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T33.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.15_A1_T33; -* @section: 15.10.2.15; -* @assertion: The internal helper function CharacterRange takes two CharSet parameters A and B and performs the -* following: -* If A does not contain exactly one character or B does not contain exactly one character then throw -* a SyntaxError exception; -* @description: Checking if execution of "/[d-G\t]/.exec("a")" leads to throwing the correct exception; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: /[d-G\\t]/.exec("a") throw SyntaxError. Actual: ' + (/[d-G\t]/.exec("a"))); -} catch (e) { - if((e instanceof SyntaxError) !== true){ - $ERROR('#1.2: /[d-G\\t]/.exec("a") throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T34.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T34.js deleted file mode 100644 index 828622da5..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T34.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.15_A1_T34; -* @section: 15.10.2.15; -* @assertion: The internal helper function CharacterRange takes two CharSet parameters A and B and performs the -* following: -* If A does not contain exactly one character or B does not contain exactly one character then throw -* a SyntaxError exception; -* @description: Checking if execution of "/[d-G\n]/.exec("a")" leads to throwing the correct exception; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: /[d-G\\n]/.exec("a") throw SyntaxError. Actual: ' + (/[d-G\n]/.exec("a"))); -} catch (e) { - if((e instanceof SyntaxError) !== true){ - $ERROR('#1.2: /[d-G\\n]/.exec("a") throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T35.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T35.js deleted file mode 100644 index 7f8bba2c4..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T35.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.15_A1_T35; -* @section: 15.10.2.15; -* @assertion: The internal helper function CharacterRange takes two CharSet parameters A and B and performs the -* following: -* If A does not contain exactly one character or B does not contain exactly one character then throw -* a SyntaxError exception; -* @description: Checking if execution of "/[d-G\v]/.exec("a")" leads to throwing the correct exception; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: /[d-G\\v]/.exec("a") throw SyntaxError. Actual: ' + (/[d-G\v]/.exec("a"))); -} catch (e) { - if((e instanceof SyntaxError) !== true){ - $ERROR('#1.2: /[d-G\\v]/.exec("a") throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T36.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T36.js deleted file mode 100644 index cf09780b6..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T36.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.15_A1_T36; -* @section: 15.10.2.15; -* @assertion: The internal helper function CharacterRange takes two CharSet parameters A and B and performs the -* following: -* If A does not contain exactly one character or B does not contain exactly one character then throw -* a SyntaxError exception; -* @description: Checking if execution of "/[d-G\f]/.exec("a")" leads to throwing the correct exception; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: /[d-G\\f]/.exec("a") throw SyntaxError. Actual: ' + (/[d-G\f]/.exec("a"))); -} catch (e) { - if((e instanceof SyntaxError) !== true){ - $ERROR('#1.2: /[d-G\\f]/.exec("a") throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T37.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T37.js deleted file mode 100644 index 7f7eae0bf..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T37.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.15_A1_T37; -* @section: 15.10.2.15; -* @assertion: The internal helper function CharacterRange takes two CharSet parameters A and B and performs the -* following: -* If A does not contain exactly one character or B does not contain exactly one character then throw -* a SyntaxError exception; -* @description: Checking if execution of "/[d-G\r]/.exec("a")" leads to throwing the correct exception; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: /[d-G\\r]/.exec("a") throw SyntaxError. Actual: ' + (/[d-G\r]/.exec("a"))); -} catch (e) { - if((e instanceof SyntaxError) !== true){ - $ERROR('#1.2: /[d-G\\r]/.exec("a") throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T38.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T38.js deleted file mode 100644 index 55cef0805..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T38.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.15_A1_T38; -* @section: 15.10.2.15; -* @assertion: The internal helper function CharacterRange takes two CharSet parameters A and B and performs the -* following: -* If A does not contain exactly one character or B does not contain exactly one character then throw -* a SyntaxError exception; -* @description: Checking if execution of "/[d-G\c0001]/.exec("1")" leads to throwing the correct exception; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: /[d-G\\c0001]/.exec("1") throw SyntaxError. Actual: ' + (/[d-G\c0001]/.exec("1"))); -} catch (e) { - if((e instanceof SyntaxError) !== true){ - $ERROR('#1.2: /[d-G\\c0001]/.exec("1") throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T39.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T39.js deleted file mode 100644 index 6a483d641..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T39.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.15_A1_T39; -* @section: 15.10.2.15; -* @assertion: The internal helper function CharacterRange takes two CharSet parameters A and B and performs the -* following: -* If A does not contain exactly one character or B does not contain exactly one character then throw -* a SyntaxError exception; -* @description: Checking if execution of "/[d-G\x0061]/.exec("1")" leads to throwing the correct exception; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: /[d-G\\x0061]/.exec("1") throw SyntaxError. Actual: ' + (/[d-G\x0061]/.exec("1"))); -} catch (e) { - if((e instanceof SyntaxError) !== true){ - $ERROR('#1.2: /[d-G\\x0061]/.exec("1") throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T4.js deleted file mode 100644 index 94c9ba395..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T4.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.15_A1_T4; -* @section: 15.10.2.15; -* @assertion: The internal helper function CharacterRange takes two CharSet parameters A and B and performs the -* following: -* If A does not contain exactly one character or B does not contain exactly one character then throw -* a SyntaxError exception; -* @description: Checking if execution of "/[\Db-G]/.exec("a")" leads to throwing the correct exception; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: /[\\Db-G]/.exec("a") throw SyntaxError. Actual: ' + (/[\Db-G]/.exec("a"))); -} catch (e) { - if((e instanceof SyntaxError) !== true){ - $ERROR('#1.2: /[\\Db-G]/.exec("a") throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T40.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T40.js deleted file mode 100644 index 8bd60d28e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T40.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.15_A1_T40; -* @section: 15.10.2.15; -* @assertion: The internal helper function CharacterRange takes two CharSet parameters A and B and performs the -* following: -* If A does not contain exactly one character or B does not contain exactly one character then throw -* a SyntaxError exception; -* @description: Checking if execution of "/[d-G\u0061]/.exec("a")" leads to throwing the correct exception; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: /[d-G\\u0061]/.exec("a") throw SyntaxError. Actual: ' + (/[d-G\u0061]/.exec("a"))); -} catch (e) { - if((e instanceof SyntaxError) !== true){ - $ERROR('#1.2: /[d-G\\u0061]/.exec("a") throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T41.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T41.js deleted file mode 100644 index ededd9798..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T41.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.15_A1_T41; -* @section: 15.10.2.15; -* @assertion: The internal helper function CharacterRange takes two CharSet parameters A and B and performs the -* following: -* If A does not contain exactly one character or B does not contain exactly one character then throw -* a SyntaxError exception; -* @description: Checking if execution of "/[d-G\a]/.exec("a")" leads to throwing the correct exception; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: /[d-G\\a]/.exec("a") throw SyntaxError. Actual: ' + (/[d-G\a]/.exec("a"))); -} catch (e) { - if((e instanceof SyntaxError) !== true){ - $ERROR('#1.2: /[d-G\\a]/.exec("a") throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T5.js deleted file mode 100644 index 02314c6be..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T5.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.15_A1_T5; -* @section: 15.10.2.15; -* @assertion: The internal helper function CharacterRange takes two CharSet parameters A and B and performs the -* following: -* If A does not contain exactly one character or B does not contain exactly one character then throw -* a SyntaxError exception; -* @description: Checking if execution of "/[\sb-G]/.exec("a")" leads to throwing the correct exception; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: /[\\sb-G]/.exec("a") throw SyntaxError. Actual: ' + (/[\sb-G]/.exec("a"))); -} catch (e) { - if((e instanceof SyntaxError) !== true){ - $ERROR('#1.2: /[\\sb-G]/.exec("a") throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T6.js deleted file mode 100644 index 58b6ce0ba..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T6.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.15_A1_T6; -* @section: 15.10.2.15; -* @assertion: The internal helper function CharacterRange takes two CharSet parameters A and B and performs the -* following: -* If A does not contain exactly one character or B does not contain exactly one character then throw -* a SyntaxError exception; -* @description: Checking if execution of "/[\Sb-G]/.exec("a")" leads to throwing the correct exception; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: /[\\Sb-G]/.exec("a") throw SyntaxError. Actual: ' + (/[\Sb-G]/.exec("a"))); -} catch (e) { - if((e instanceof SyntaxError) !== true){ - $ERROR('#1.2: /[\\Sb-G]/.exec("a") throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T7.js deleted file mode 100644 index 921a57fef..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T7.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.15_A1_T7; -* @section: 15.10.2.15; -* @assertion: The internal helper function CharacterRange takes two CharSet parameters A and B and performs the -* following: -* If A does not contain exactly one character or B does not contain exactly one character then throw -* a SyntaxError exception; -* @description: Checking if execution of "/[\wb-G]/.exec("a")" leads to throwing the correct exception; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: /[\\wb-G]/.exec("a") throw SyntaxError. Actual: ' + (/[\wb-G]/.exec("a"))); -} catch (e) { - if((e instanceof SyntaxError) !== true){ - $ERROR('#1.2: /[\\wb-G]/.exec("a") throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T8.js deleted file mode 100644 index a5ad51dd1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T8.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.15_A1_T8; -* @section: 15.10.2.15; -* @assertion: The internal helper function CharacterRange takes two CharSet parameters A and B and performs the -* following: -* If A does not contain exactly one character or B does not contain exactly one character then throw -* a SyntaxError exception; -* @description: Checking if execution of "/[\Wb-G]/.exec("a")" leads to throwing the correct exception; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: /[\\Wb-G]/.exec("a") throw SyntaxError. Actual: ' + (/[\Wb-G]/.exec("a"))); -} catch (e) { - if((e instanceof SyntaxError) !== true){ - $ERROR('#1.2: /[\\Wb-G]/.exec("a") throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T9.js deleted file mode 100644 index 0ddb7fe5a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.15_NonemptyClassRanges/S15.10.2.15_A1_T9.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.15_A1_T9; -* @section: 15.10.2.15; -* @assertion: The internal helper function CharacterRange takes two CharSet parameters A and B and performs the -* following: -* If A does not contain exactly one character or B does not contain exactly one character then throw -* a SyntaxError exception; -* @description: Checking if execution of "/[\0b-G]/.exec("a")" leads to throwing the correct exception; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: /[\\0b-G]/.exec("a") throw SyntaxError. Actual: ' + (/[\0b-G]/.exec("a"))); -} catch (e) { - if((e instanceof SyntaxError) !== true){ - $ERROR('#1.2: /[\\0b-G]/.exec("a") throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.3_Disjunction/S15.10.2.3_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.3_Disjunction/S15.10.2.3_A1_T1.js deleted file mode 100644 index 9958ba7be..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.3_Disjunction/S15.10.2.3_A1_T1.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.3_A1_T1; -* @section: 15.10.2.3; -* @assertion: The | regular expression operator separates two alternatives. -* The pattern first tries to match the left Alternative (followed by the sequel of the regular expression). -* If it fails, it tries to match the right Disjunction (followed by the sequel of the regular expression); -* @description: Execute /a|ab/.exec("abc") and check results; -*/ - -__executed = /a|ab/.exec("abc"); - -__expected = ["a"]; -__expected.index = 0; -__expected.input = "abc"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /a|ab/.exec("abc"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /a|ab/.exec("abc"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /a|ab/.exec("abc"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /a|ab/.exec("abc"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.3_Disjunction/S15.10.2.3_A1_T10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.3_Disjunction/S15.10.2.3_A1_T10.js deleted file mode 100644 index 217fb9622..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.3_Disjunction/S15.10.2.3_A1_T10.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.3_A1_T10; -* @section: 15.10.2.3; -* @assertion: The | regular expression operator separates two alternatives. -* The pattern first tries to match the left Alternative (followed by the sequel of the regular expression). -* If it fails, it tries to match the right Disjunction (followed by the sequel of the regular expression); -* @description: Execute /(?:ab|cd)+|ef/i.exec("AEKeFCDab") and check results; -*/ - -__executed = /(?:ab|cd)+|ef/i.exec("AEKeFCDab"); - -__expected = ["eF"]; -__expected.index = 3; -__expected.input = "AEKeFCDab"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /(?:ab|cd)+|ef/i.exec("AEKeFCDab"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /(?:ab|cd)+|ef/i.exec("AEKeFCDab"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /(?:ab|cd)+|ef/i.exec("AEKeFCDab"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /(?:ab|cd)+|ef/i.exec("AEKeFCDab"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.3_Disjunction/S15.10.2.3_A1_T11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.3_Disjunction/S15.10.2.3_A1_T11.js deleted file mode 100644 index 2fda5a87f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.3_Disjunction/S15.10.2.3_A1_T11.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.3_A1_T11; -* @section: 15.10.2.3; -* @assertion: The | regular expression operator separates two alternatives. -* The pattern first tries to match the left Alternative (followed by the sequel of the regular expression). -* If it fails, it tries to match the right Disjunction (followed by the sequel of the regular expression); -* @description: Execute /11111|111/.exec("1111111111111111") and check results; -*/ - -__executed = /11111|111/.exec("1111111111111111"); - -__expected = ["11111"]; -__expected.index = 0; -__expected.input = "1111111111111111"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /11111|111/.exec("1111111111111111"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /11111|111/.exec("1111111111111111"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /11111|111/.exec("1111111111111111"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /11111|111/.exec("1111111111111111"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.3_Disjunction/S15.10.2.3_A1_T12.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.3_Disjunction/S15.10.2.3_A1_T12.js deleted file mode 100644 index 9157f6fec..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.3_Disjunction/S15.10.2.3_A1_T12.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.3_A1_T12; -* @section: 15.10.2.3; -* @assertion: The | regular expression operator separates two alternatives. -* The pattern first tries to match the left Alternative (followed by the sequel of the regular expression). -* If it fails, it tries to match the right Disjunction (followed by the sequel of the regular expression); -* @description: Execute /xyz|.../.exec("abc") and check results; -*/ - -__executed = /xyz|.../.exec("abc"); - -__expected = ["abc"]; -__expected.index = 0; -__expected.input = "abc"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /xyz|.../.exec("abc"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /xyz|.../.exec("abc"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /xyz|.../.exec("abc"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /xyz|.../.exec("abc"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.3_Disjunction/S15.10.2.3_A1_T13.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.3_Disjunction/S15.10.2.3_A1_T13.js deleted file mode 100644 index ad40d42bc..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.3_Disjunction/S15.10.2.3_A1_T13.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.3_A1_T13; -* @section: 15.10.2.3; -* @assertion: The | regular expression operator separates two alternatives. -* The pattern first tries to match the left Alternative (followed by the sequel of the regular expression). -* If it fails, it tries to match the right Disjunction (followed by the sequel of the regular expression); -* @description: Execute /(.)..|abc/.exec("abc") and check results; -*/ - -__executed = /(.)..|abc/.exec("abc"); - -__expected = ["abc","a"]; -__expected.index = 0; -__expected.input = "abc"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /(.)..|abc/.exec("abc"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /(.)..|abc/.exec("abc"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /(.)..|abc/.exec("abc"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /(.)..|abc/.exec("abc"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.3_Disjunction/S15.10.2.3_A1_T14.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.3_Disjunction/S15.10.2.3_A1_T14.js deleted file mode 100644 index a2f6e3144..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.3_Disjunction/S15.10.2.3_A1_T14.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.3_A1_T14; -* @section: 15.10.2.3; -* @assertion: The | regular expression operator separates two alternatives. -* The pattern first tries to match the left Alternative (followed by the sequel of the regular expression). -* If it fails, it tries to match the right Disjunction (followed by the sequel of the regular expression); -* @description: Execute /.+: gr(a|e)y/.exec("color: grey") and check results; -*/ - -__executed = /.+: gr(a|e)y/.exec("color: grey"); - -__expected = ["color: grey","e"]; -__expected.index = 0; -__expected.input = "color: grey"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /.+: gr(a|e)y/.exec("color: grey"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /.+: gr(a|e)y/.exec("color: grey"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /.+: gr(a|e)y/.exec("color: grey"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /.+: gr(a|e)y/.exec("color: grey"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.3_Disjunction/S15.10.2.3_A1_T15.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.3_Disjunction/S15.10.2.3_A1_T15.js deleted file mode 100644 index 0485674e2..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.3_Disjunction/S15.10.2.3_A1_T15.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.3_A1_T15; -* @section: 15.10.2.3; -* @assertion: The | regular expression operator separates two alternatives. -* The pattern first tries to match the left Alternative (followed by the sequel of the regular expression). -* If it fails, it tries to match the right Disjunction (followed by the sequel of the regular expression); -* @description: Execute /(Rob)|(Bob)|(Robert)|(Bobby)/.exec("Hi Bob") and check results; -*/ - -__executed = /(Rob)|(Bob)|(Robert)|(Bobby)/.exec("Hi Bob"); - -__expected = ["Bob",undefined,"Bob", undefined, undefined]; -__expected.index = 3; -__expected.input = "Hi Bob"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /(Rob)|(Bob)|(Robert)|(Bobby)/.exec("Hi Bob"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /(Rob)|(Bob)|(Robert)|(Bobby)/.exec("Hi Bob"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /(Rob)|(Bob)|(Robert)|(Bobby)/.exec("Hi Bob"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /(Rob)|(Bob)|(Robert)|(Bobby)/.exec("Hi Bob"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.3_Disjunction/S15.10.2.3_A1_T16.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.3_Disjunction/S15.10.2.3_A1_T16.js deleted file mode 100644 index 90781571d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.3_Disjunction/S15.10.2.3_A1_T16.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.3_A1_T16; -* @section: 15.10.2.3; -* @assertion: The | regular expression operator separates two alternatives. -* The pattern first tries to match the left Alternative (followed by the sequel of the regular expression). -* If it fails, it tries to match the right Disjunction (followed by the sequel of the regular expression); -* @description: Execute /()|/.exec("") and check results; -*/ - -__executed = /()|/.exec(""); - -__expected = ["",""]; -__expected.index = 0; -__expected.input = ""; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /()|/.exec(""); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /()|/.exec(""); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /()|/.exec(""); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /()|/.exec(""); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.3_Disjunction/S15.10.2.3_A1_T17.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.3_Disjunction/S15.10.2.3_A1_T17.js deleted file mode 100644 index 679d2ec01..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.3_Disjunction/S15.10.2.3_A1_T17.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.3_A1_T17; -* @section: 15.10.2.3; -* @assertion: The | regular expression operator separates two alternatives. -* The pattern first tries to match the left Alternative (followed by the sequel of the regular expression). -* If it fails, it tries to match the right Disjunction (followed by the sequel of the regular expression); -* @description: Execute /|()/.exec("") and check results; -*/ - -__executed = /|()/.exec(""); - -__expected = ["",undefined]; -__expected.index = 0; -__expected.input = ""; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /|()/.exec(""); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /|()/.exec(""); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /|()/.exec(""); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /|()/.exec(""); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.3_Disjunction/S15.10.2.3_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.3_Disjunction/S15.10.2.3_A1_T2.js deleted file mode 100644 index f28905376..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.3_Disjunction/S15.10.2.3_A1_T2.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.3_A1_T2; -* @section: 15.10.2.3; -* @assertion: The | regular expression operator separates two alternatives. -* The pattern first tries to match the left Alternative (followed by the sequel of the regular expression). -* If it fails, it tries to match the right Disjunction (followed by the sequel of the regular expression); -* @description: Execute /((a)|(ab))((c)|(bc))/.exec("abc") and check results; -*/ - -__executed = /((a)|(ab))((c)|(bc))/.exec("abc"); - -__expected = ["abc", "a", "a", undefined, "bc", undefined, "bc"]; -__expected.index = 0; -__expected.input = "abc"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /((a)|(ab))((c)|(bc))/.exec("abc"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /((a)|(ab))((c)|(bc))/.exec("abc"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /((a)|(ab))((c)|(bc))/.exec("abc"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /((a)|(ab))((c)|(bc))/.exec("abc"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.3_Disjunction/S15.10.2.3_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.3_Disjunction/S15.10.2.3_A1_T3.js deleted file mode 100644 index 66be46922..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.3_Disjunction/S15.10.2.3_A1_T3.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.3_A1_T3; -* @section: 15.10.2.3; -* @assertion: The | regular expression operator separates two alternatives. -* The pattern first tries to match the left Alternative (followed by the sequel of the regular expression). -* If it fails, it tries to match the right Disjunction (followed by the sequel of the regular expression); -* @description: Execute /\d{3}|[a-z]{4}/.exec("2, 12 and of course repeat 12") and check results; -*/ - -__executed = /\d{3}|[a-z]{4}/.exec("2, 12 and of course repeat 12"); - -__expected = ["cour"]; -__expected.index = 13; -__expected.input = "2, 12 and of course repeat 12"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /\\d{3}|[a-z]{4}/.exec("2, 12 and of course repeat 12"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /\\d{3}|[a-z]{4}/.exec("2, 12 and of course repeat 12"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /\\d{3}|[a-z]{4}/.exec("2, 12 and of course repeat 12"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /\\d{3}|[a-z]{4}/.exec("2, 12 and of course repeat 12"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.3_Disjunction/S15.10.2.3_A1_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.3_Disjunction/S15.10.2.3_A1_T4.js deleted file mode 100644 index 96364f3cc..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.3_Disjunction/S15.10.2.3_A1_T4.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.3_A1_T4; -* @section: 15.10.2.3; -* @assertion: The | regular expression operator separates two alternatives. -* The pattern first tries to match the left Alternative (followed by the sequel of the regular expression). -* If it fails, it tries to match the right Disjunction (followed by the sequel of the regular expression); -* @description: Execute /\d{3}|[a-z]{4}/.exec("2, 12 and 234 AND of course repeat 12") and check results; -*/ - -__executed = /\d{3}|[a-z]{4}/.exec("2, 12 and 234 AND of course repeat 12"); - -__expected = ["234"]; -__expected.index = 10; -__expected.input = "2, 12 and 234 AND of course repeat 12"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /\\d{3}|[a-z]{4}/.exec("2, 12 and 234 AND of course repeat 12"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /\\d{3}|[a-z]{4}/.exec("2, 12 and 234 AND of course repeat 12"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /\\d{3}|[a-z]{4}/.exec("2, 12 and 234 AND of course repeat 12"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /\\d{3}|[a-z]{4}/.exec("2, 12 and 234 AND of course repeat 12"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.3_Disjunction/S15.10.2.3_A1_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.3_Disjunction/S15.10.2.3_A1_T5.js deleted file mode 100644 index 7abbfa926..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.3_Disjunction/S15.10.2.3_A1_T5.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.3_A1_T5; -* @section: 15.10.2.3; -* @assertion: The | regular expression operator separates two alternatives. -* The pattern first tries to match the left Alternative (followed by the sequel of the regular expression). -* If it fails, it tries to match the right Disjunction (followed by the sequel of the regular expression); -* @description: Execute /\d{3}|[a-z]{4}/.test("2, 12 and 23 AND 0.00.1") and check results; -*/ - -__executed = /\d{3}|[a-z]{4}/.test("2, 12 and 23 AND 0.00.1"); - -//CHECK#1 -if (__executed) { - $ERROR('#1: /\\d{3}|[a-z]{4}/.test("2, 12 and 23 AND 0.00.1") === false'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.3_Disjunction/S15.10.2.3_A1_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.3_Disjunction/S15.10.2.3_A1_T6.js deleted file mode 100644 index bc4b39f58..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.3_Disjunction/S15.10.2.3_A1_T6.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.3_A1_T6; -* @section: 15.10.2.3; -* @assertion: The | regular expression operator separates two alternatives. -* The pattern first tries to match the left Alternative (followed by the sequel of the regular expression). -* If it fails, it tries to match the right Disjunction (followed by the sequel of the regular expression); -* @description: Execute /ab|cd|ef/i.exec("AEKFCD") and check results; -*/ - -__executed = /ab|cd|ef/i.exec("AEKFCD"); - -__expected = ["CD"]; -__expected.index = 4; -__expected.input = "AEKFCD"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /ab|cd|ef/i.exec("AEKFCD"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /ab|cd|ef/i.exec("AEKFCD"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /ab|cd|ef/i.exec("AEKFCD"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /ab|cd|ef/i.exec("AEKFCD"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.3_Disjunction/S15.10.2.3_A1_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.3_Disjunction/S15.10.2.3_A1_T7.js deleted file mode 100644 index d621962c2..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.3_Disjunction/S15.10.2.3_A1_T7.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.3_A1_T7; -* @section: 15.10.2.3; -* @assertion: The | regular expression operator separates two alternatives. -* The pattern first tries to match the left Alternative (followed by the sequel of the regular expression). -* If it fails, it tries to match the right Disjunction (followed by the sequel of the regular expression); -* @description: Execute /ab|cd|ef/.test("AEKFCD") and check results; -*/ - -__executed = /ab|cd|ef/.test("AEKFCD"); - -//CHECK#1 -if (__executed) { - $ERROR('#1: /ab|cd|ef/.test("AEKFCD") === false'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.3_Disjunction/S15.10.2.3_A1_T8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.3_Disjunction/S15.10.2.3_A1_T8.js deleted file mode 100644 index cd3244826..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.3_Disjunction/S15.10.2.3_A1_T8.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.3_A1_T8; -* @section: 15.10.2.3; -* @assertion: The | regular expression operator separates two alternatives. -* The pattern first tries to match the left Alternative (followed by the sequel of the regular expression). -* If it fails, it tries to match the right Disjunction (followed by the sequel of the regular expression); -* @description: Execute /(?:ab|cd)+|ef/i.exec("AEKFCD") and check results; -*/ - -__executed = /(?:ab|cd)+|ef/i.exec("AEKFCD"); - -__expected = ["CD"]; -__expected.index = 4; -__expected.input = "AEKFCD"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /(?:ab|cd)+|ef/i.exec("AEKFCD"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /(?:ab|cd)+|ef/i.exec("AEKFCD"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /(?:ab|cd)+|ef/i.exec("AEKFCD"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /(?:ab|cd)+|ef/i.exec("AEKFCD"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.3_Disjunction/S15.10.2.3_A1_T9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.3_Disjunction/S15.10.2.3_A1_T9.js deleted file mode 100644 index 6b639e6a7..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.3_Disjunction/S15.10.2.3_A1_T9.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.3_A1_T9; -* @section: 15.10.2.3; -* @assertion: The | regular expression operator separates two alternatives. -* The pattern first tries to match the left Alternative (followed by the sequel of the regular expression). -* If it fails, it tries to match the right Disjunction (followed by the sequel of the regular expression); -* @description: Execute /(?:ab|cd)+|ef/i.exec("AEKFCDab") and check results; -*/ - -__executed = /(?:ab|cd)+|ef/i.exec("AEKFCDab"); - -__expected = ["CDab"]; -__expected.index = 4; -__expected.input = "AEKFCDab"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /(?:ab|cd)+|ef/i.exec("AEKFCDab"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /(?:ab|cd)+|ef/i.exec("AEKFCDab"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /(?:ab|cd)+|ef/i.exec("AEKFCDab"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /(?:ab|cd)+|ef/i.exec("AEKFCDab"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.5_Term/S15.10.2.5_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.5_Term/S15.10.2.5_A1_T1.js deleted file mode 100644 index a96a4582d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.5_Term/S15.10.2.5_A1_T1.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.5_A1_T1; -* @section: 15.10.2.5; -* @assertion: An Atom followed by a Quantifier is repeated the number of times specified by the Quantifier; -* @description: Execute /a[a-z]{2,4}/.exec("abcdefghi") and check results; -*/ - -__executed = /a[a-z]{2,4}/.exec("abcdefghi"); - -__expected = ["abcde"]; -__expected.index = 0; -__expected.input = "abcdefghi"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /a[a-z]{2,4}/.exec("abcdefghi"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /a[a-z]{2,4}/.exec("abcdefghi"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /a[a-z]{2,4}/.exec("abcdefghi"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /a[a-z]{2,4}/.exec("abcdefghi"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.5_Term/S15.10.2.5_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.5_Term/S15.10.2.5_A1_T2.js deleted file mode 100644 index b763ee9eb..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.5_Term/S15.10.2.5_A1_T2.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.5_A1_T2; -* @section: 15.10.2.5; -* @assertion: An Atom followed by a Quantifier is repeated the number of times specified by the Quantifier; -* @description: Execute /a[a-z]{2,4}?/.exec("abcdefghi") and check results; -*/ - -__executed = /a[a-z]{2,4}?/.exec("abcdefghi"); - -__expected = ["abc"]; -__expected.index = 0; -__expected.input = "abcdefghi"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /a[a-z]{2,4}?/.exec("abcdefghi"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /a[a-z]{2,4}?/.exec("abcdefghi"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /a[a-z]{2,4}?/.exec("abcdefghi"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /a[a-z]{2,4}?/.exec("abcdefghi"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.5_Term/S15.10.2.5_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.5_Term/S15.10.2.5_A1_T3.js deleted file mode 100644 index d4d6fa5c7..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.5_Term/S15.10.2.5_A1_T3.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.5_A1_T3; -* @section: 15.10.2.5; -* @assertion: An Atom followed by a Quantifier is repeated the number of times specified by the Quantifier; -* @description: Execute /(aa|aabaac|ba|b|c)* /.exec("aabaac") and check results; -*/ - -__executed = /(aa|aabaac|ba|b|c)*/.exec("aabaac"); - -__expected = ["aaba", "ba"]; -__expected.index = 0; -__expected.input = "aabaac"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /(aa|aabaac|ba|b|c)*/.exec("aabaac"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /(aa|aabaac|ba|b|c)*/.exec("aabaac"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /(aa|aabaac|ba|b|c)*/.exec("aabaac"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /(aa|aabaac|ba|b|c)*/.exec("aabaac"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.5_Term/S15.10.2.5_A1_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.5_Term/S15.10.2.5_A1_T4.js deleted file mode 100644 index f6170e245..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.5_Term/S15.10.2.5_A1_T4.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.5_A1_T4; -* @section: 15.10.2.5; -* @assertion: An Atom followed by a Quantifier is repeated the number of times specified by the Quantifier; -* @description: Execute /(z)((a+)?(b+)?(c))* /.exec("zaacbbbcac") and check results; -*/ - -__executed = /(z)((a+)?(b+)?(c))*/.exec("zaacbbbcac"); - -__expected = ["zaacbbbcac", "z", "ac", "a", undefined, "c"]; -__expected.index = 0; -__expected.input = "zaacbbbcac"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /(z)((a+)?(b+)?(c))*/.exec("zaacbbbcac"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /(z)((a+)?(b+)?(c))*/.exec("zaacbbbcac"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /(z)((a+)?(b+)?(c))*/.exec("zaacbbbcac"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /(z)((a+)?(b+)?(c))*/.exec("zaacbbbcac"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.5_Term/S15.10.2.5_A1_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.5_Term/S15.10.2.5_A1_T5.js deleted file mode 100644 index 5e4b7cf0f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.5_Term/S15.10.2.5_A1_T5.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.5_A1_T5; -* @section: 15.10.2.5; -* @assertion: An Atom followed by a Quantifier is repeated the number of times specified by the Quantifier; -* @description: Execute /(a*)b\1+/.exec("baaaac") and check results; -*/ - -__executed = /(a*)b\1+/.exec("baaaac"); - -__expected = ["b", ""]; -__expected.index = 0; -__expected.input = "baaaac"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /(a*)b\\1+/.exec("baaaac"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /(a*)b\\1+/.exec("baaaac"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /(a*)b\\1+/.exec("baaaac"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /(a*)b\\1+/.exec("baaaac"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A1_T1.js deleted file mode 100644 index d344788e2..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A1_T1.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.6_A1_T1; -* @section: 15.10.2.6; -* @assertion: The production Assertion :: $ evaluates by returning an internal AssertionTester closure that takes a State argument x and performs the ...; -* @description: Execute /s$/.test("pairs\nmakes\tdouble") and check results; -*/ - -__executed = /s$/.test("pairs\nmakes\tdouble"); - -//CHECK#1 -if (__executed) { - $ERROR('#1: /s$/.test("pairs\\nmakes\\tdouble") === false'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A1_T2.js deleted file mode 100644 index e0cff98b7..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A1_T2.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.6_A1_T2; -* @section: 15.10.2.6; -* @assertion: The production Assertion :: $ evaluates by returning an internal AssertionTester closure that takes a State argument x and performs the ...; -* @description: Execute /e$/.exec("pairs\nmakes\tdouble") and check results; -*/ - -__executed = /e$/.exec("pairs\nmakes\tdouble"); - -__expected = ["e"]; -__expected.index = 17; -__expected.input = "pairs\nmakes\tdouble"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /e$/.exec("pairs\\nmakes\\tdouble"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /e$/.exec("pairs\\nmakes\\tdouble"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /e$/.exec("pairs\\nmakes\\tdouble"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /e$/.exec("pairs\\nmakes\\tdouble"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A1_T3.js deleted file mode 100644 index a68d4543a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A1_T3.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.6_A1_T3; -* @section: 15.10.2.6; -* @assertion: The production Assertion :: $ evaluates by returning an internal AssertionTester closure that takes a State argument x and performs the ...; -* @description: Execute /s$/m.exec("pairs\nmakes\tdouble") and check results; -*/ - -__executed = /s$/m.exec("pairs\nmakes\tdouble"); - -__expected = ["s"]; -__expected.index = 4; -__expected.input = "pairs\nmakes\tdouble"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /s$/m.exec("pairs\\nmakes\\tdouble"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /s$/m.exec("pairs\\nmakes\\tdouble"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /s$/m.exec("pairs\\nmakes\\tdouble"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /s$/m.exec("pairs\\nmakes\\tdouble"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A1_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A1_T4.js deleted file mode 100644 index 0205eb103..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A1_T4.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.6_A1_T4; -* @section: 15.10.2.6; -* @assertion: The production Assertion :: $ evaluates by returning an internal AssertionTester closure that takes a State argument x and performs the ...; -* @description: Execute /[^e]$/mg.exec("pairs\nmakes\tdouble") and check results; -*/ - -__executed = /[^e]$/mg.exec("pairs\nmakes\tdouble"); - -__expected = ["s"]; -__expected.index = 4; -__expected.input = "pairs\nmakes\tdouble"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /[^e]$/mg.exec("pairs\\nmakes\\tdouble"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /[^e]$/mg.exec("pairs\\nmakes\\tdouble"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /[^e]$/mg.exec("pairs\\nmakes\\tdouble"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /[^e]$/mg.exec("pairs\\nmakes\\tdouble"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A1_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A1_T5.js deleted file mode 100644 index 3f08ac0b9..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A1_T5.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.6_A1_T5; -* @section: 15.10.2.6; -* @assertion: The production Assertion :: $ evaluates by returning an internal AssertionTester closure that takes a State argument x and performs the ...; -* @description: Execute /es$/mg.exec("pairs\nmakes\tdoubl\u0065s") and check results; -*/ - -__executed = /es$/mg.exec("pairs\nmakes\tdoubl\u0065s"); - -__expected = ["es"]; -__expected.index = 17; -__expected.input = "pairs\nmakes\tdoubles"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /es$/mg.exec("pairs\\nmakes\\tdoubl\\u0065s"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /es$/mg.exec("pairs\\nmakes\\tdoubl\\u0065s"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /es$/mg.exec("pairs\\nmakes\\tdoubl\\u0065s"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /es$/mg.exec("pairs\\nmakes\\tdoubl\\u0065s"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A2_T1.js deleted file mode 100644 index b0723d09f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A2_T1.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.6_A2_T1; -* @section: 15.10.2.6; -* @assertion: The production Assertion :: ^ evaluates by returning an internal AssertionTester closure that takes a State argument x and performs the ...; -* @description: Execute /^m/.test("pairs\nmakes\tdouble") and check results; -*/ - -__executed = /^m/.test("pairs\nmakes\tdouble"); - -//CHECK#1 -if (__executed) { - $ERROR('#1: /^m/.test("pairs\\nmakes\\tdouble") === false'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A2_T10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A2_T10.js deleted file mode 100644 index 9332dc3da..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A2_T10.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.6_A2_T10; -* @section: 15.10.2.6; -* @assertion: The production Assertion :: ^ evaluates by returning an internal AssertionTester closure that takes a State argument x and performs the ...; -* @description: Execute /^\d+/m.exec("abc\n123xyz") and check results; -*/ - -__executed = /^\d+/m.exec("abc\n123xyz"); - -__expected = ["123"]; -__expected.index = 4; -__expected.input = "abc\n123xyz"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /^\\d+/m.exec("abc\\n123xyz"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /^\\d+/m.exec("abc\\n123xyz"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /^\\d+/m.exec("abc\\n123xyz"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /^\\d+/m.exec("abc\\n123xyz"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A2_T2.js deleted file mode 100644 index 56af0022b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A2_T2.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.6_A2_T2; -* @section: 15.10.2.6; -* @assertion: The production Assertion :: ^ evaluates by returning an internal AssertionTester closure that takes a State argument x and performs the ...; -* @description: Execute /^m/m.exec("pairs\nmakes\tdouble") and check results; -*/ - -__executed = /^m/m.exec("pairs\nmakes\tdouble"); - -__expected = ["m"]; -__expected.index = 6; -__expected.input = "pairs\nmakes\tdouble"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /^m/m.exec("pairs\\nmakes\\tdouble"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /^m/m.exec("pairs\\nmakes\\tdouble"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /^m/m.exec("pairs\\nmakes\\tdouble"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /^m/m.exec("pairs\\nmakes\\tdouble"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A2_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A2_T3.js deleted file mode 100644 index 4e4a0e8a6..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A2_T3.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.6_A2_T3; -* @section: 15.10.2.6; -* @assertion: The production Assertion :: ^ evaluates by returning an internal AssertionTester closure that takes a State argument x and performs the ...; -* @description: Execute /^p[a-z]/.exec("pairs\nmakes\tdouble\npesos") and check results; -*/ - -__executed = /^p[a-z]/.exec("pairs\nmakes\tdouble\npesos"); - -__expected = ["pa"]; -__expected.index = 0; -__expected.input = "pairs\nmakes\tdouble\npesos"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /^p[a-z]/.exec("pairs\\nmakes\\tdouble\\npesos"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /^p[a-z]/.exec("pairs\\nmakes\\tdouble\\npesos"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /^p[a-z]/.exec("pairs\\nmakes\\tdouble\\npesos"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /^p[a-z]/.exec("pairs\\nmakes\\tdouble\\npesos"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A2_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A2_T4.js deleted file mode 100644 index 3a83a4fc9..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A2_T4.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.6_A2_T4; -* @section: 15.10.2.6; -* @assertion: The production Assertion :: ^ evaluates by returning an internal AssertionTester closure that takes a State argument x and performs the ...; -* @description: Execute /^p[a-z]/m.exec("pairs\nmakes\tdouble\npesos") and check results; -*/ - -__executed = /^p[b-z]/m.exec("pairs\nmakes\tdouble\npesos"); - -__expected = ["pe"]; -__expected.index = 19; -__expected.input = "pairs\nmakes\tdouble\npesos"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /^p[b-z]/m.exec("pairs\\nmakes\\tdouble\\npesos"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /^p[b-z]/m.exec("pairs\\nmakes\\tdouble\\npesos"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /^p[b-z]/m.exec("pairs\\nmakes\\tdouble\\npesos"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /^p[b-z]/m.exec("pairs\\nmakes\\tdouble\\npesos"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A2_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A2_T5.js deleted file mode 100644 index 89ca4c888..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A2_T5.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.6_A2_T5; -* @section: 15.10.2.6; -* @assertion: The production Assertion :: ^ evaluates by returning an internal AssertionTester closure that takes a State argument x and performs the ...; -* @description: Execute /^[^p]/m.exec("pairs\nmakes\tdouble\npesos") and check results; -*/ - -__executed = /^[^p]/m.exec("pairs\nmakes\tdouble\npesos"); - -__expected = ["m"]; -__expected.index = 6; -__expected.input = "pairs\nmakes\tdouble\npesos"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /^[^p]/m.exec("pairs\\nmakes\\tdouble\\npesos"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /^[^p]/m.exec("pairs\\nmakes\\tdouble\\npesos"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /^[^p]/m.exec("pairs\\nmakes\\tdouble\\npesos"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /^[^p]/m.exec("pairs\\nmakes\\tdouble\\npesos"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A2_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A2_T6.js deleted file mode 100644 index 146a52a53..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A2_T6.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.6_A2_T6; -* @section: 15.10.2.6; -* @assertion: The production Assertion :: ^ evaluates by returning an internal AssertionTester closure that takes a State argument x and performs the ...; -* @description: Execute /^ab/.exec("abcde") and check results; -*/ - -__executed = /^ab/.exec("abcde"); - -__expected = ["ab"]; -__expected.index = 0; -__expected.input = "abcde"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /^ab/.exec("abcde"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /^ab/.exec("abcde"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /^ab/.exec("abcde"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /^ab/.exec("abcde"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A2_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A2_T7.js deleted file mode 100644 index e3ac16117..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A2_T7.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.6_A2_T7; -* @section: 15.10.2.6; -* @assertion: The production Assertion :: ^ evaluates by returning an internal AssertionTester closure that takes a State argument x and performs the ...; -* @description: Execute /^..^e/.test("ab\ncde") and check results; -*/ - -__executed = /^..^e/.test("ab\ncde"); - -//CHECK#1 -if (__executed) { - $ERROR('#1: /^..^e/.test("ab\\ncde") === false'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A2_T8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A2_T8.js deleted file mode 100644 index d7dbaa82a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A2_T8.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.6_A2_T8; -* @section: 15.10.2.6; -* @assertion: The production Assertion :: ^ evaluates by returning an internal AssertionTester closure that takes a State argument x and performs the ...; -* @description: Execute /^xxx/.test("yyyyy") and check results; -*/ - -__executed = /^xxx/.test("yyyyy"); - -//CHECK#1 -if (__executed) { - $ERROR('#1: /^xxx/.test("yyyyy") === false'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A2_T9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A2_T9.js deleted file mode 100644 index 9e5e519da..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A2_T9.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.6_A2_T9; -* @section: 15.10.2.6; -* @assertion: The production Assertion :: ^ evaluates by returning an internal AssertionTester closure that takes a State argument x and performs the ...; -* @description: Execute /^\^+/.exec("^^^x") and check results; -*/ - -__executed = /^\^+/.exec("^^^x"); - -__expected = ["^^^"]; -__expected.index = 0; -__expected.input = "^^^x"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /^\\^+/.exec("^^^x"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /^\\^+/.exec("^^^x"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /^\\^+/.exec("^^^x"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /^\\^+/.exec("^^^x"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A3_T1.js deleted file mode 100644 index d029543af..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A3_T1.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.6_A3_T1; -* @section: 15.10.2.6; -* @assertion: The production Assertion :: \b evaluates by returning an internal AssertionTester closure that takes a State argument x and performs the ...; -* @description: Execute /\bp/.exec("pilot\nsoviet robot\topenoffice") and check results; -*/ - -__executed = /\bp/.exec("pilot\nsoviet robot\topenoffice"); - -__expected = ["p"]; -__expected.index = 0; -__expected.input = "pilot\nsoviet robot\topenoffice"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /\\bp/.exec("pilot\\nsoviet robot\\topenoffice"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /\\bp/.exec("pilot\\nsoviet robot\\topenoffice"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /\\bp/.exec("pilot\\nsoviet robot\\topenoffice"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /\\bp/.exec("pilot\\nsoviet robot\\topenoffice"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A3_T10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A3_T10.js deleted file mode 100644 index e6cf00385..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A3_T10.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.6_A3_T10; -* @section: 15.10.2.6; -* @assertion: The production Assertion :: \b evaluates by returning an internal AssertionTester closure that takes a State argument x and performs the ...; -* @description: Execute /\brobot\b/.exec("pilot\nsoviet robot\topenoffice") and check results; -*/ - -__executed = /\brobot\b/.exec("pilot\nsoviet robot\topenoffice"); - -__expected = ["robot"]; -__expected.index = 13; -__expected.input = "pilot\nsoviet robot\topenoffice"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /\\brobot\\b/.exec("pilot\\nsoviet robot\\topenoffice"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /\\brobot\\b/.exec("pilot\\nsoviet robot\\topenoffice"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /\\brobot\\b/.exec("pilot\\nsoviet robot\\topenoffice"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /\\brobot\\b/.exec("pilot\\nsoviet robot\\topenoffice"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A3_T11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A3_T11.js deleted file mode 100644 index a49e67093..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A3_T11.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.6_A3_T11; -* @section: 15.10.2.6; -* @assertion: The production Assertion :: \b evaluates by returning an internal AssertionTester closure that takes a State argument x and performs the ...; -* @description: Execute /\b\w{5}\b/.exec("pilot\nsoviet robot\topenoffice") and check results; -*/ - -__executed = /\b\w{5}\b/.exec("pilot\nsoviet robot\topenoffice"); - -__expected = ["pilot"]; -__expected.index = 0; -__expected.input = "pilot\nsoviet robot\topenoffice"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /\\b\\w{5}\\b/.exec("pilot\\nsoviet robot\\topenoffice"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /\\b\\w{5}\\b/.exec("pilot\\nsoviet robot\\topenoffice"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /\\b\\w{5}\\b/.exec("pilot\\nsoviet robot\\topenoffice"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /\\b\\w{5}\\b/.exec("pilot\\nsoviet robot\\topenoffice"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A3_T12.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A3_T12.js deleted file mode 100644 index c6881ce3a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A3_T12.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.6_A3_T12; -* @section: 15.10.2.6; -* @assertion: The production Assertion :: \b evaluates by returning an internal AssertionTester closure that takes a State argument x and performs the ...; -* @description: Execute /\bop/.exec("pilot\nsoviet robot\topenoffice") and check results; -*/ - -__executed = /\bop/.exec("pilot\nsoviet robot\topenoffice"); - -__expected = ["op"]; -__expected.index = 19; -__expected.input = "pilot\nsoviet robot\topenoffice"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /\\bop/.exec("pilot\\nsoviet robot\\topenoffice"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /\\bop/.exec("pilot\\nsoviet robot\\topenoffice"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /\\bop/.exec("pilot\\nsoviet robot\\topenoffice"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /\\bop/.exec("pilot\\nsoviet robot\\topenoffice"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A3_T13.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A3_T13.js deleted file mode 100644 index f61a65845..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A3_T13.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.6_A3_T13; -* @section: 15.10.2.6; -* @assertion: The production Assertion :: \b evaluates by returning an internal AssertionTester closure that takes a State argument x and performs the ...; -* @description: Execute /op\b/.test("pilot\nsoviet robot\topenoffice") and check results; -*/ - -__executed = /op\b/.test("pilot\nsoviet robot\topenoffice"); - -//CHECK#1 -if (__executed) { - $ERROR('#1: /op\\b/.test("pilot\\nsoviet robot\\topenoffice") === false'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A3_T14.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A3_T14.js deleted file mode 100644 index b01ab8092..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A3_T14.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.6_A3_T14; -* @section: 15.10.2.6; -* @assertion: The production Assertion :: \b evaluates by returning an internal AssertionTester closure that takes a State argument x and performs the ...; -* @description: Execute /e\b/.exec("pilot\nsoviet robot\topenoffic\u0065") and check results; -*/ - -__executed = /e\b/.exec("pilot\nsoviet robot\topenoffic\u0065"); - -__expected = ["e"]; -__expected.index = 28; -__expected.input = "pilot\nsoviet robot\topenoffice"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /e\\b/.exec("pilot\\nsoviet robot\\topenoffic\\u0065"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /e\\b/.exec("pilot\\nsoviet robot\\topenoffic\\u0065"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /e\\b/.exec("pilot\\nsoviet robot\\topenoffic\\u0065"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /e\\b/.exec("pilot\\nsoviet robot\\topenoffic\\u0065"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A3_T15.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A3_T15.js deleted file mode 100644 index a38463df1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A3_T15.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.6_A3_T15; -* @section: 15.10.2.6; -* @assertion: The production Assertion :: \b evaluates by returning an internal AssertionTester closure that takes a State argument x and performs the ...; -* @description: Execute /\be/.test("pilot\nsoviet robot\topenoffic\u0065") and check results; -*/ - -__executed = /\be/.test("pilot\nsoviet robot\topenoffic\u0065"); - -//CHECK#1 -if (__executed) { - $ERROR('#1: /\\be/.test("pilot\\nsoviet robot\\topenoffic\\u0065") === false'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A3_T2.js deleted file mode 100644 index c85d94b04..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A3_T2.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.6_A3_T2; -* @section: 15.10.2.6; -* @assertion: The production Assertion :: \b evaluates by returning an internal AssertionTester closure that takes a State argument x and performs the ...; -* @description: Execute /ot\b/.exec("pilot\nsoviet robot\topenoffice") and check results; -*/ - -__executed = /ot\b/.exec("pilot\nsoviet robot\topenoffice"); - -__expected = ["ot"]; -__expected.index = 3; -__expected.input = "pilot\nsoviet robot\topenoffice"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /ot\\b/.exec("pilot\\nsoviet robot\\topenoffice"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /ot\\b/.exec("pilot\\nsoviet robot\\topenoffice"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /ot\\b/.exec("pilot\\nsoviet robot\\topenoffice"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /ot\\b/.exec("pilot\\nsoviet robot\\topenoffice"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A3_T3.js deleted file mode 100644 index 245638b0b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A3_T3.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.6_A3_T3; -* @section: 15.10.2.6; -* @assertion: The production Assertion :: \b evaluates by returning an internal AssertionTester closure that takes a State argument x and performs the ...; -* @description: Execute /\bot/.test("pilot\nsoviet robot\topenoffice") and check results; -*/ - -__executed = /\bot/.test("pilot\nsoviet robot\topenoffice"); - -//CHECK#1 -if (__executed) { - $ERROR('#1: /\\bot/.test("pilot\\nsoviet robot\\topenoffice") === false'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A3_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A3_T4.js deleted file mode 100644 index a0f6ca0e7..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A3_T4.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.6_A3_T4; -* @section: 15.10.2.6; -* @assertion: The production Assertion :: \b evaluates by returning an internal AssertionTester closure that takes a State argument x and performs the ...; -* @description: Execute /\bso/.exec("pilot\nsoviet robot\topenoffice") and check results; -*/ - -__executed = /\bso/.exec("pilot\nsoviet robot\topenoffice"); - -__expected = ["so"]; -__expected.index = 6; -__expected.input = "pilot\nsoviet robot\topenoffice"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /\\bso/.exec("pilot\\nsoviet robot\\topenoffice"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /\\bso/.exec("pilot\\nsoviet robot\\topenoffice"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /\\bso/.exec("pilot\\nsoviet robot\\topenoffice"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /\\bso/.exec("pilot\\nsoviet robot\\topenoffice"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A3_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A3_T5.js deleted file mode 100644 index ca5ccf5b1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A3_T5.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.6_A3_T5; -* @section: 15.10.2.6; -* @assertion: The production Assertion :: \b evaluates by returning an internal AssertionTester closure that takes a State argument x and performs the ...; -* @description: Execute /so\b/.test("pilot\nsoviet robot\topenoffice") and check results; -*/ - -__executed = /so\b/.test("pilot\nsoviet robot\topenoffice"); - -//CHECK#1 -if (__executed) { - $ERROR('#1: /so\\b/.test("pilot\\nsoviet robot\\topenoffice") === false'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A3_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A3_T6.js deleted file mode 100644 index 15fe1508c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A3_T6.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.6_A3_T6; -* @section: 15.10.2.6; -* @assertion: The production Assertion :: \b evaluates by returning an internal AssertionTester closure that takes a State argument x and performs the ...; -* @description: Execute /[^o]t\b/.exec("pilOt\nsoviet robot\topenoffice") and check results; -*/ - -__executed = /[^o]t\b/.exec("pilOt\nsoviet robot\topenoffice"); - -__expected = ["Ot"]; -__expected.index = 3; -__expected.input = "pilOt\nsoviet robot\topenoffice"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /[^o]t\\b/.exec("pilOt\\nsoviet robot\\topenoffice"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /[^o]t\\b/.exec("pilOt\\nsoviet robot\\topenoffice"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /[^o]t\\b/.exec("pilOt\\nsoviet robot\\topenoffice"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /[^o]t\\b/.exec("pilOt\\nsoviet robot\\topenoffice"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A3_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A3_T7.js deleted file mode 100644 index baec5133d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A3_T7.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.6_A3_T7; -* @section: 15.10.2.6; -* @assertion: The production Assertion :: \b evaluates by returning an internal AssertionTester closure that takes a State argument x and performs the ...; -* @description: Execute /[^o]t\b/i.exec("pilOt\nsoviet robot\topenoffice") and check results; -*/ - -__executed = /[^o]t\b/i.exec("pilOt\nsoviet robot\topenoffice"); - -__expected = ["et"]; -__expected.index = 10; -__expected.input = "pilOt\nsoviet robot\topenoffice"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /[^o]t\\b/i.exec("pilOt\\nsoviet robot\\topenoffice"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /[^o]t\\b/i.exec("pilOt\\nsoviet robot\\topenoffice"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /[^o]t\\b/i.exec("pilOt\\nsoviet robot\\topenoffice"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /[^o]t\\b/i.exec("pilOt\\nsoviet robot\\topenoffice"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A3_T8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A3_T8.js deleted file mode 100644 index 3a89708f5..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A3_T8.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.6_A3_T8; -* @section: 15.10.2.6; -* @assertion: The production Assertion :: \b evaluates by returning an internal AssertionTester closure that takes a State argument x and performs the ...; -* @description: Execute /\bro/.exec("pilot\nsoviet robot\topenoffice") and check results; -*/ - -__executed = /\bro/.exec("pilot\nsoviet robot\topenoffice"); - -__expected = ["ro"]; -__expected.index = 13; -__expected.input = "pilot\nsoviet robot\topenoffice"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /\\bro/.exec("pilot\\nsoviet robot\\topenoffice"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /\\bro/.exec("pilot\\nsoviet robot\\topenoffice"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /\\bro/.exec("pilot\\nsoviet robot\\topenoffice"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /\\bro/.exec("pilot\\nsoviet robot\\topenoffice"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A3_T9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A3_T9.js deleted file mode 100644 index 26e11ead8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A3_T9.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.6_A3_T9; -* @section: 15.10.2.6; -* @assertion: The production Assertion :: \b evaluates by returning an internal AssertionTester closure that takes a State argument x and performs the ...; -* @description: Execute /r\b/.exec("pilot\nsoviet robot\topenoffice") and check results; -*/ - -__executed = /r\b/.test("pilot\nsoviet robot\topenoffice"); - -//CHECK#1 -if (__executed) { - $ERROR('#1: /r\\b/.test("pilot\\nsoviet robot\\topenoffice") === false'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A4_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A4_T1.js deleted file mode 100644 index 25eca2622..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A4_T1.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.6_A4_T1; -* @section: 15.10.2.6; -* @assertion: The production Assertion :: \B evaluates by returning an internal AssertionTester closure that takes a State argument x and performs the ...; -* @description: Execute /\Bevil\B/.exec("devils arise\tfor\nevil") and check results; -*/ - -__executed = /\Bevil\B/.exec("devils arise\tfor\nevil"); - -__expected = ["evil"]; -__expected.index = 1; -__expected.input = "devils arise\tfor\nevil"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /\\Bevil\\B/.exec("devils arise\\tfor\\nevil"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /\\Bevil\\B/.exec("devils arise\\tfor\\nevil"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /\\Bevil\\B/.exec("devils arise\\tfor\\nevil"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /\\Bevil\\B/.exec("devils arise\\tfor\\nevil"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A4_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A4_T2.js deleted file mode 100644 index 726bc5bd3..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A4_T2.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.6_A4_T2; -* @section: 15.10.2.6; -* @assertion: The production Assertion :: \B evaluates by returning an internal AssertionTester closure that takes a State argument x and performs the ...; -* @description: Execute /[f-z]e\B/.exec("devils arise\tfor\nevil") and check results; -*/ - -__executed = /[f-z]e\B/.exec("devils arise\tfor\nrevil"); - -__expected = ["re"]; -__expected.index = 17; -__expected.input = "devils arise\tfor\nrevil"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /[f-z]e\\B/.exec("devils arise\\tfor\\nrevil"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /[f-z]e\\B/.exec("devils arise\\tfor\\nrevil"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /[f-z]e\\B/.exec("devils arise\\tfor\\nrevil"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /[f-z]e\\B/.exec("devils arise\\tfor\\nrevil"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A4_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A4_T3.js deleted file mode 100644 index aaf44e8a2..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A4_T3.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.6_A4_T3; -* @section: 15.10.2.6; -* @assertion: The production Assertion :: \B evaluates by returning an internal AssertionTester closure that takes a State argument x and performs the ...; -* @description: Execute /\Bo\B/.exec("devils arise\tfor\nevil") and check results; -*/ - -__executed = /\Bo\B/i.exec("devils arise\tfOr\nrevil"); - -__expected = ["O"]; -__expected.index = 14; -__expected.input = "devils arise\tfOr\nrevil"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /\\Bo\\B/i.exec("devils arise\\tfOr\\nrevil"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /\\Bo\\B/i.exec("devils arise\\tfOr\\nrevil"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /\\Bo\\B/i.exec("devils arise\\tfOr\\nrevil"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /\\Bo\\B/i.exec("devils arise\\tfOr\\nrevil"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A4_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A4_T4.js deleted file mode 100644 index 8ed0a2d10..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A4_T4.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.6_A4_T4; -* @section: 15.10.2.6; -* @assertion: The production Assertion :: \B evaluates by returning an internal AssertionTester closure that takes a State argument x and performs the ...; -* @description: Execute /\B\w\B/.exec("devils arise\tfor\nevil") and check results; -*/ - -__executed = /\B\w\B/.exec("devils arise\tfor\nrevil"); - -__expected = ["e"]; -__expected.index = 1; -__expected.input = "devils arise\tfor\nrevil"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /\\B\\w\\B/.exec("devils arise\\tfor\\nrevil"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /\\B\\w\\B/.exec("devils arise\\tfor\\nrevil"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /\\B\\w\\B/.exec("devils arise\\tfor\\nrevil"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /\\B\\w\\B/.exec("devils arise\\tfor\\nrevil"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A4_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A4_T5.js deleted file mode 100644 index 9604ac15e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A4_T5.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.6_A4_T5; -* @section: 15.10.2.6; -* @assertion: The production Assertion :: \B evaluates by returning an internal AssertionTester closure that takes a State argument x and performs the ...; -* @description: Execute /\w\B/.exec("devils arise\tfor\nevil") and check results; -*/ - -__executed = /\w\B/.exec("devils arise\tfor\nrevil"); - -__expected = ["d"]; -__expected.index = 0; -__expected.input = "devils arise\tfor\nrevil"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /\\w\\B/.exec("devils arise\\tfor\\nrevil"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /\\w\\B/.exec("devils arise\\tfor\\nrevil"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /\\w\\B/.exec("devils arise\\tfor\\nrevil"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /\\w\\B/.exec("devils arise\\tfor\\nrevil"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A4_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A4_T6.js deleted file mode 100644 index fbb187d2d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A4_T6.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.6_A4_T6; -* @section: 15.10.2.6; -* @assertion: The production Assertion :: \B evaluates by returning an internal AssertionTester closure that takes a State argument x and performs the ...; -* @description: Execute /\B\w/.exec("devils arise\tfor\nevil") and check results; -*/ - -__executed = /\B\w/.exec("devils arise\tfor\nrevil"); - -__expected = ["e"]; -__expected.index = 1; -__expected.input = "devils arise\tfor\nrevil"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /\\B\\w/.exec("devils arise\\tfor\\nrevil"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /\\B\\w/.exec("devils arise\\tfor\\nrevil"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /\\B\\w/.exec("devils arise\\tfor\\nrevil"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /\\B\\w/.exec("devils arise\\tfor\\nrevil"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A4_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A4_T7.js deleted file mode 100644 index 331991c0e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A4_T7.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.6_A4_T7; -* @section: 15.10.2.6; -* @assertion: The production Assertion :: \B evaluates by returning an internal AssertionTester closure that takes a State argument x and performs the ...; -* @description: Execute /\B\[^z]{4}\B/.test("devil arise\tforzzx\nevils") and check results; -*/ - -__executed = /\B\[^z]{4}\B/.test("devil arise\tforzzx\nevils"); - -//CHECK#1 -if (__executed) { - $ERROR('#1: /\\B\\[^z]{4}\\B/.test("devil arise\\tforzzx\\nevils") === false'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A4_T8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A4_T8.js deleted file mode 100644 index 32407b825..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A4_T8.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.6_A4_T8; -* @section: 15.10.2.6; -* @assertion: The production Assertion :: \B evaluates by returning an internal AssertionTester closure that takes a State argument x and performs the ...; -* @description: Execute /\B\w{4}\B/.exec("devil arise\tforzzx\nevils") and check results; -*/ - -__executed = /\B\w{4}\B/.exec("devil arise\tforzzx\nevils"); - -__expected = ["orzz"]; -__expected.index = 13; -__expected.input = "devil arise\tforzzx\nevils"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /\\B\\w{4}\\B/.exec("devil arise\\tforzzx\\nevils"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /\\B\\w{4}\\B/.exec("devil arise\\tforzzx\\nevils"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /\\B\\w{4}\\B/.exec("devil arise\\tforzzx\\nevils"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /\\B\\w{4}\\B/.exec("devil arise\\tforzzx\\nevils"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A5_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A5_T1.js deleted file mode 100644 index 53c60a4a6..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A5_T1.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.6_A5_T1; -* @section: 15.10.2.6; -* @assertion: Since assertion evaluating do not change endIndex repetition of assertion does the same result; -* @description: Execute /^^^^^^^robot$$$$/.exec("robot") and check results; -*/ - -__executed = /^^^^^^^robot$$$$/.exec("robot"); - -__expected = ["robot"]; -__expected.index = 0; -__expected.input = "robot"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /^^^^^^^robot$$$$/.exec("robot"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /^^^^^^^robot$$$$/.exec("robot"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /^^^^^^^robot$$$$/.exec("robot"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /^^^^^^^robot$$$$/.exec("robot"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A5_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A5_T2.js deleted file mode 100644 index 0dc1d26fb..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A5_T2.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.6_A5_T2; -* @section: 15.10.2.6; -* @assertion: Since assertion evaluating do not change endIndex repetition of assertion does the same result; -* @description: Execute /\B\B\B\B\B\Bbot\b\b\b\b\b\b\b/.exec("robot wall-e") and check results; -*/ - -__executed = /\B\B\B\B\B\Bbot\b\b\b\b\b\b\b/.exec("robot wall-e"); - -__expected = ["bot"]; -__expected.index = 2; -__expected.input = "robot wall-e"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /\\B\\B\\B\\B\\B\\Bbot\\b\\b\\b\\b\\b\\b\\b/.exec("robot wall-e"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /\\B\\B\\B\\B\\B\\Bbot\\b\\b\\b\\b\\b\\b\\b/.exec("robot wall-e"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /\\B\\B\\B\\B\\B\\Bbot\\b\\b\\b\\b\\b\\b\\b/.exec("robot wall-e"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /\\B\\B\\B\\B\\B\\Bbot\\b\\b\\b\\b\\b\\b\\b/.exec("robot wall-e"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A6_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A6_T1.js deleted file mode 100644 index f9a73acdd..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A6_T1.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.6_A6_T1; -* @section: 15.10.2.6; -* @assertion: Assertions in combination; -* @description: while asterix is non greedy it is run till the end because of dollar assertion; -*/ - -__executed = /^.*?$/.exec("Hello World"); - -__expected = ["Hello World"]; -__expected.index = 0; -__expected.input = "Hello World"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /^.*?$/.exec("Hello World"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /^.*?$/.exec("Hello World"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /^.*?$/.exec("Hello World"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /^.*?$/.exec("Hello World"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A6_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A6_T2.js deleted file mode 100644 index f9a9d90d7..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A6_T2.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.6_A6_T2; -* @section: 15.10.2.6; -* @assertion: Assertions in combination; -* @description: Execute /^.*?/.exec("Hello World") and check results; -*/ - -__executed = /^.*?/.exec("Hello World"); - -__expected = [""]; -__expected.index = 0; -__expected.input = "Hello World"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /^.*?/.exec("Hello World"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /^.*?/.exec("Hello World"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /^.*?/.exec("Hello World"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /^.*?/.exec("Hello World"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A6_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A6_T3.js deleted file mode 100644 index d1a954400..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A6_T3.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.6_A6_T3; -* @section: 15.10.2.6; -* @assertion: Assertions in combination; -* @description: while asterix is non greedy it is run till matches end or colon; -*/ - -__executed = /^.*?(:|$)/.exec("Hello: World"); - -__expected = ["Hello:", ":"]; -__expected.index = 0; -__expected.input = "Hello: World"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /^.*?(:|$)/.exec("Hello: World"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /^.*?(:|$)/.exec("Hello: World"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /^.*?(:|$)/.exec("Hello: World"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /^.*?(:|$)/.exec("Hello: World"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A6_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A6_T4.js deleted file mode 100644 index 5b7c4bdb7..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.6_Assertion/S15.10.2.6_A6_T4.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.6_A6_T4; -* @section: 15.10.2.6; -* @assertion: Assertions in combination; -* @description: Execute /^.*(:|$)/.exec("Hello: World") and check results; -*/ - -__executed = /^.*(:|$)/.exec("Hello: World"); - -__expected = ["Hello: World", ""]; -__expected.index = 0; -__expected.input = "Hello: World"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /^.*(:|$)/.exec("Hello: World"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /^.*(:|$)/.exec("Hello: World"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /^.*(:|$)/.exec("Hello: World"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /^.*(:|$)/.exec("Hello: World"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A1_T1.js deleted file mode 100644 index 177d4cb6c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A1_T1.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A1_T1; -* @section: 15.10.2.7; -* @assertion: The production QuantifierPrefix :: { DecimalDigits , DecimalDigits } evaluates as ...; -* @description: Execute /\d{2,4}/.exec("the answer is 42") and check results; -*/ - -__executed = /\d{2,4}/.exec("the answer is 42"); - -__expected = ["42"]; -__expected.index = 14; -__expected.input = "the answer is 42"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /\\d{2,4}/.exec("the answer is 42"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /\\d{2,4}/.exec("the answer is 42"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /\\d{2,4}/.exec("the answer is 42"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /\\d{2,4}/.exec("the answer is 42"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A1_T10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A1_T10.js deleted file mode 100644 index b79c945e2..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A1_T10.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A1_T10; -* @section: 15.10.2.7; -* @assertion: The production QuantifierPrefix :: { DecimalDigits , DecimalDigits } evaluates as ...; -* @description: Execute /b{0,93}c/.exec("aaabbbbcccddeeeefffff") and check results; -*/ - -__executed = /b{0,93}c/.exec("aaabbbbcccddeeeefffff"); - -__expected = ["bbbbc"]; -__expected.index = 3; -__expected.input = "aaabbbbcccddeeeefffff"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /b{0,93}c/.exec("aaabbbbcccddeeeefffff"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /b{0,93}c/.exec("aaabbbbcccddeeeefffff"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /b{0,93}c/.exec("aaabbbbcccddeeeefffff"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /b{0,93}c/.exec("aaabbbbcccddeeeefffff"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A1_T11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A1_T11.js deleted file mode 100644 index 49c5543c9..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A1_T11.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A1_T11; -* @section: 15.10.2.7; -* @assertion: The production QuantifierPrefix :: { DecimalDigits , DecimalDigits } evaluates as ...; -* @description: Execute /bx{0,93}c/.exec("aaabbbbcccddeeeefffff") and check results; -*/ - -__executed = /bx{0,93}c/.exec("aaabbbbcccddeeeefffff"); - -__expected = ["bc"]; -__expected.index = 6; -__expected.input = "aaabbbbcccddeeeefffff"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /bx{0,93}c/.exec("aaabbbbcccddeeeefffff"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /bx{0,93}c/.exec("aaabbbbcccddeeeefffff"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /bx{0,93}c/.exec("aaabbbbcccddeeeefffff"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /bx{0,93}c/.exec("aaabbbbcccddeeeefffff"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A1_T12.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A1_T12.js deleted file mode 100644 index 9e4c23d14..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A1_T12.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A1_T12; -* @section: 15.10.2.7; -* @assertion: The production QuantifierPrefix :: { DecimalDigits , DecimalDigits } evaluates as ...; -* @description: Execute /.{0,93}/.exec("weirwerdf") and check results; -*/ - -__executed = /.{0,93}/.exec("weirwerdf"); - -__expected = ["weirwerdf"]; -__expected.index = 0; -__expected.input = "weirwerdf"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /.{0,93}/.exec("weirwerdf"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /.{0,93}/.exec("weirwerdf"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /.{0,93}/.exec("weirwerdf"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /.{0,93}/.exec("weirwerdf"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A1_T2.js deleted file mode 100644 index 459790b39..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A1_T2.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A1_T2; -* @section: 15.10.2.7; -* @assertion: The production QuantifierPrefix :: { DecimalDigits , DecimalDigits } evaluates as ...; -* @description: Execute /\d{2,4}/.test("the 7 movie") and check results; -*/ - -__executed = /\d{2,4}/.test("the 7 movie"); - -//CHECK#1 -if (__executed) { - $ERROR('#1: /\\d{2,4}/.test("the 7 movie") === false'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A1_T3.js deleted file mode 100644 index d6653092f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A1_T3.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A1_T3; -* @section: 15.10.2.7; -* @assertion: The production QuantifierPrefix :: { DecimalDigits , DecimalDigits } evaluates as ...; -* @description: Execute /\d{2,4}/.exec("the 20000 Leagues Under the Sea book") and check results; -*/ - -__executed = /\d{2,4}/.exec("the 20000 Leagues Under the Sea book"); - -__expected = ["2000"]; -__expected.index = 4; -__expected.input = "the 20000 Leagues Under the Sea book"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /\\d{2,4}/.exec("the 20000 Leagues Under the Sea book"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /\\d{2,4}/.exec("the 20000 Leagues Under the Sea book"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /\\d{2,4}/.exec("the 20000 Leagues Under the Sea book"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /\\d{2,4}/.exec("the 20000 Leagues Under the Sea book"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A1_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A1_T4.js deleted file mode 100644 index 0c4b19c6e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A1_T4.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A1_T4; -* @section: 15.10.2.7; -* @assertion: The production QuantifierPrefix :: { DecimalDigits , DecimalDigits } evaluates as ...; -* @description: Execute /\d{2,4}/.exec("the Fahrenheit 451 book") and check results; -*/ - -__executed = /\d{2,4}/.exec("the Fahrenheit 451 book"); - -__expected = ["451"]; -__expected.index = 15; -__expected.input = "the Fahrenheit 451 book"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /\\d{2,4}/.exec("the Fahrenheit 451 book"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /\\d{2,4}/.exec("the Fahrenheit 451 book"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /\\d{2,4}/.exec("the Fahrenheit 451 book"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /\\d{2,4}/.exec("the Fahrenheit 451 book"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A1_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A1_T5.js deleted file mode 100644 index 25c3f88c3..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A1_T5.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A1_T5; -* @section: 15.10.2.7; -* @assertion: The production QuantifierPrefix :: { DecimalDigits , DecimalDigits } evaluates as ...; -* @description: Execute /\d{2,4}/.exec("the 1984 novel") and check results; -*/ - -__executed = /\d{2,4}/.exec("the 1984 novel"); - -__expected = ["1984"]; -__expected.index = 4; -__expected.input = "the 1984 novel"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /\\d{2,4}/.exec("the 1984 novel"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /\\d{2,4}/.exec("the 1984 novel"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /\\d{2,4}/.exec("the 1984 novel"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /\\d{2,4}/.exec("the 1984 novel"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A1_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A1_T6.js deleted file mode 100644 index 5cf5bb8f6..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A1_T6.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A1_T6; -* @section: 15.10.2.7; -* @assertion: The production QuantifierPrefix :: { DecimalDigits , DecimalDigits } evaluates as ...; -* @description: Execute /\d{2,4}/.exec("0a0\u0031\u0031b") and check results; -*/ - -__executed = /\d{2,4}/.exec("0a0\u0031\u0031b"); - -__expected = ["011"]; -__expected.index = 2; -__expected.input = "0a011b"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /\\d{2,4}/.exec("0a0\\u0031\\u0031b"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /\\d{2,4}/.exec("0a0\\u0031\\u0031b"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /\\d{2,4}/.exec("0a0\\u0031\\u0031b"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /\\d{2,4}/.exec("0a0\\u0031\\u0031b"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A1_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A1_T7.js deleted file mode 100644 index de50230e3..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A1_T7.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A1_T7; -* @section: 15.10.2.7; -* @assertion: The production QuantifierPrefix :: { DecimalDigits , DecimalDigits } evaluates as ...; -* @description: Execute /\d{2,4}/.exec("0a0\u0031\u003122b") and check results; -*/ - -__executed = /\d{2,4}/.exec("0a0\u0031\u003122b"); - -__expected = ["0112"]; -__expected.index = 2; -__expected.input = "0a01122b"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /\\d{2,4}/.exec("0a0\\u0031\\u003122b"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /\\d{2,4}/.exec("0a0\\u0031\\u003122b"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /\\d{2,4}/.exec("0a0\\u0031\\u003122b"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /\\d{2,4}/.exec("0a0\\u0031\\u003122b"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A1_T8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A1_T8.js deleted file mode 100644 index 7a8152111..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A1_T8.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A1_T8; -* @section: 15.10.2.7; -* @assertion: The production QuantifierPrefix :: { DecimalDigits , DecimalDigits } evaluates as ...; -* @description: Execute /b{2,3}c/.exec("aaabbbbcccddeeeefffff") and check results; -*/ - -__executed = /b{2,3}c/.exec("aaabbbbcccddeeeefffff"); - -__expected = ["bbbc"]; -__expected.index = 4; -__expected.input = "aaabbbbcccddeeeefffff"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /b{2,3}c/.exec("aaabbbbcccddeeeefffff"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /b{2,3}c/.exec("aaabbbbcccddeeeefffff"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /b{2,3}c/.exec("aaabbbbcccddeeeefffff"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /b{2,3}c/.exec("aaabbbbcccddeeeefffff"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A1_T9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A1_T9.js deleted file mode 100644 index 582d599c5..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A1_T9.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A1_T9; -* @section: 15.10.2.7; -* @assertion: The production QuantifierPrefix :: { DecimalDigits , DecimalDigits } evaluates as ...; -* @description: Execute /b{42,93}c/.exec("aaabbbbcccddeeeefffff") and check results; -*/ - -__executed = /b{42,93}c/.test("aaabbbbcccddeeeefffff"); - -//CHECK#1 -if (__executed) { - $ERROR('#1: /b{42,93}c/.test("aaabbbbcccddeeeefffff") === false'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A2_T1.js deleted file mode 100644 index b1b71ac95..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A2_T1.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A2_T1; -* @section: 15.10.2.7; -* @assertion: i) The production QuantifierPrefix :: { DecimalDigits } evaluates... -* ii) The production QuantifierPrefix :: ? evaluates by returning the two results 0 and 1; -* @description: Execute /\w{3}\d?/.exec("CE\uFFFFL\uFFDDbox127") and check results; -*/ - -__executed = /\w{3}\d?/.exec("CE\uFFFFL\uFFDDbox127"); - -__expected = ["box1"]; -__expected.index = 5; -__expected.input = "CE\uFFFFL\uFFDDbox127"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /\\w{3}\\d?/.exec("CE\\uFFFFL\\uFFDDbox127"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /\\w{3}\\d?/.exec("CE\\uFFFFL\\uFFDDbox127"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /\\w{3}\\d?/.exec("CE\\uFFFFL\\uFFDDbox127"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /\\w{3}\\d?/.exec("CE\\uFFFFL\\uFFDDbox127"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A2_T2.js deleted file mode 100644 index 34b1a2c75..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A2_T2.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A2_T2; -* @section: 15.10.2.7; -* @assertion: i) The production QuantifierPrefix :: { DecimalDigits } evaluates... -* ii) The production QuantifierPrefix :: ? evaluates by returning the two results 0 and 1; -* @description: Execute /\w{3}\d?/.exec("CELL\uFFDDbox127") and check results; -*/ - -__executed = /\w{3}\d?/.exec("CELL\uFFDDbox127"); - -__expected = ["CEL"]; -__expected.index = 0; -__expected.input = "CELL\uFFDDbox127"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /\\w{3}\\d?/.exec("CELL\\uFFDDbox127"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /\\w{3}\\d?/.exec("CELL\\uFFDDbox127"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /\\w{3}\\d?/.exec("CELL\\uFFDDbox127"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /\\w{3}\\d?/.exec("CELL\\uFFDDbox127"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A2_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A2_T3.js deleted file mode 100644 index f30de5267..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A2_T3.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A2_T3; -* @section: 15.10.2.7; -* @assertion: i) The production QuantifierPrefix :: { DecimalDigits } evaluates... -* ii) The production QuantifierPrefix :: ? evaluates by returning the two results 0 and 1; -* @description: Execute /b{2}c/.exec("aaabbbbcccddeeeefffff") and check results; -*/ - -__executed = /b{2}c/.exec("aaabbbbcccddeeeefffff"); - -__expected = ["bbc"]; -__expected.index = 5; -__expected.input = "aaabbbbcccddeeeefffff"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /b{2}c/.exec("aaabbbbcccddeeeefffff"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /b{2}c/.exec("aaabbbbcccddeeeefffff"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /b{2}c/.exec("aaabbbbcccddeeeefffff"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /b{2}c/.exec("aaabbbbcccddeeeefffff"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A2_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A2_T4.js deleted file mode 100644 index 00c18fc16..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A2_T4.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A2_T4; -* @section: 15.10.2.7; -* @assertion: i) The production QuantifierPrefix :: { DecimalDigits } evaluates... -* ii) The production QuantifierPrefix :: ? evaluates by returning the two results 0 and 1; -* @description: Execute /b{8}c/.test("aaabbbbcccddeeeefffff") and check results; -*/ - -__executed = /b{8}/.test("aaabbbbcccddeeeefffff"); - -//CHECK#1 -if (__executed) { - $ERROR('#1: /b{8}/.test("aaabbbbcccddeeeefffff") === false'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A3_T1.js deleted file mode 100644 index 3816efa8b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A3_T1.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A3_T1; -* @section: 15.10.2.7; -* @assertion: The production QuantifierPrefix :: + evaluates by returning the two results 1 and \infty; -* @description: Execute /\s+java\s+/.exec("language java\n") and check results; -*/ - -__executed = /\s+java\s+/.exec("language java\n"); - -__expected = [" java\n"]; -__expected.index = 8; -__expected.input = "language java\n"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /\\s+java\\s+/.exec("language java\\n"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /\\s+java\\s+/.exec("language java\\n"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /\\s+java\\s+/.exec("language java\\n"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /\\s+java\\s+/.exec("language java\\n"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A3_T10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A3_T10.js deleted file mode 100644 index eee578944..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A3_T10.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A3_T10; -* @section: 15.10.2.7; -* @assertion: The production QuantifierPrefix :: + evaluates by returning the two results 1 and \infty; -* @description: Execute /o+/.test("abcdefg") and check results; -*/ - -__executed = /o+/.test("abcdefg"); - -//CHECK#1 -if (__executed) { - $ERROR('#1: /o+/.test("abcdefg") === false'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A3_T11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A3_T11.js deleted file mode 100644 index 9f51c59a0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A3_T11.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A3_T11; -* @section: 15.10.2.7; -* @assertion: The production QuantifierPrefix :: + evaluates by returning the two results 1 and \infty; -* @description: Execute /d+/.exec("abcdefg") and check results; -*/ - -__executed = /d+/.exec("abcdefg"); - -__expected = ["d"]; -__expected.index = 3; -__expected.input = "abcdefg"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /d+/.exec("abcdefg"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /d+/.exec("abcdefg"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /d+/.exec("abcdefg"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /d+/.exec("abcdefg"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A3_T12.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A3_T12.js deleted file mode 100644 index 4fa113c4c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A3_T12.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A3_T12; -* @section: 15.10.2.7; -* @assertion: The production QuantifierPrefix :: + evaluates by returning the two results 1 and \infty; -* @description: Execute /(b+)(b+)(b+)/.exec("abbbbbbbc") and check results; -*/ - -__executed = /(b+)(b+)(b+)/.exec("abbbbbbbc"); - -__expected = ["bbbbbbb","bbbbb","b","b"]; -__expected.index = 1; -__expected.input = "abbbbbbbc"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /(b+)(b+)(b+)/.exec("abbbbbbbc"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /(b+)(b+)(b+)/.exec("abbbbbbbc"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /(b+)(b+)(b+)/.exec("abbbbbbbc"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /(b+)(b+)(b+)/.exec("abbbbbbbc"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A3_T13.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A3_T13.js deleted file mode 100644 index c186b929c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A3_T13.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A3_T13; -* @section: 15.10.2.7; -* @assertion: The production QuantifierPrefix :: + evaluates by returning the two results 1 and \infty; -* @description: Execute /(b+)(b*)/.exec("abbbbbbbc") and check results; -*/ - -__executed = /(b+)(b*)/.exec("abbbbbbbc"); - -__expected = ["bbbbbbb","bbbbbbb",""]; -__expected.index = 1; -__expected.input = "abbbbbbbc"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /(b+)(b*)/.exec("abbbbbbbc"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /(b+)(b*)/.exec("abbbbbbbc"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /(b+)(b*)/.exec("abbbbbbbc"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /(b+)(b*)/.exec("abbbbbbbc"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A3_T14.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A3_T14.js deleted file mode 100644 index e35d07cb8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A3_T14.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A3_T14; -* @section: 15.10.2.7; -* @assertion: The production QuantifierPrefix :: + evaluates by returning the two results 1 and \infty; -* @description: Execute /b*b+/.exec("abbbbbbbc") and check results; -*/ - -__executed = /b*b+/.exec("abbbbbbbc"); - -__expected = ["bbbbbbb"]; -__expected.index = 1; -__expected.input = "abbbbbbbc"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /b*b+/.exec("abbbbbbbc"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /b*b+/.exec("abbbbbbbc"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /b*b+/.exec("abbbbbbbc"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /b*b+/.exec("abbbbbbbc"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A3_T2.js deleted file mode 100644 index 0ee2fc785..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A3_T2.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A3_T2; -* @section: 15.10.2.7; -* @assertion: The production QuantifierPrefix :: + evaluates by returning the two results 1 and \infty; -* @description: Execute /\s+java\s+/.exec("\t java object") and check results; -*/ - -__executed = /\s+java\s+/.exec("\t java object"); - -__expected = ["\t java "]; -__expected.index = 0; -__expected.input = "\t java object"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /\\s+java\\s+/.exec("\\t java object"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /\\s+java\\s+/.exec("\\t java object"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /\\s+java\\s+/.exec("\\t java object"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /\\s+java\\s+/.exec("\\t java object"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A3_T3.js deleted file mode 100644 index eaf49a334..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A3_T3.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A3_T3; -* @section: 15.10.2.7; -* @assertion: The production QuantifierPrefix :: + evaluates by returning the two results 1 and \infty; -* @description: Execute /\s+java\s+/.test("\t javax package") and check results; -*/ - -__executed = /\s+java\s+/.test("\t javax package"); - -//CHECK#1 -if (__executed) { - $ERROR('#1: /\\s+java\\s+/.test("\\t javax package") === false'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A3_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A3_T4.js deleted file mode 100644 index 3e34b9a3a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A3_T4.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A3_T4; -* @section: 15.10.2.7; -* @assertion: The production QuantifierPrefix :: + evaluates by returning the two results 1 and \infty; -* @description: Execute /\s+java\s+/.test("java\n\nobject") and check results; -*/ - -__executed = /\s+java\s+/.test("java\n\nobject"); - -//CHECK#1 -if (__executed) { - $ERROR('#1: /\\s+java\\s+/.test("java\\n\\nobject") === false'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A3_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A3_T5.js deleted file mode 100644 index bec3470dc..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A3_T5.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A3_T5; -* @section: 15.10.2.7; -* @assertion: The production QuantifierPrefix :: + evaluates by returning the two results 1 and \infty; -* @description: Execute /[a-z]+\d+/.exec("x 2 ff 55 x2 as1 z12 abc12.0") and check results; -*/ - -__executed = /[a-z]+\d+/.exec("x 2 ff 55 x2 as1 z12 abc12.0"); - -__expected = ["x2"]; -__expected.index = 10; -__expected.input = "x 2 ff 55 x2 as1 z12 abc12.0"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /[a-z]+\\d+/.exec("x 2 ff 55 x2 as1 z12 abc12.0"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /[a-z]+\\d+/.exec("x 2 ff 55 x2 as1 z12 abc12.0"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /[a-z]+\\d+/.exec("x 2 ff 55 x2 as1 z12 abc12.0"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /[a-z]+\\d+/.exec("x 2 ff 55 x2 as1 z12 abc12.0"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A3_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A3_T6.js deleted file mode 100644 index 74f49fd22..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A3_T6.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A3_T6; -* @section: 15.10.2.7; -* @assertion: The production QuantifierPrefix :: + evaluates by returning the two results 1 and \infty; -* @description: Execute /[a-z]+\d+/.exec("__abc123.0") and check results; -*/ - -__executed = /[a-z]+\d+/.exec("__abc123.0"); - -__expected = ["abc123"]; -__expected.index = 2; -__expected.input = "__abc123.0"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /[a-z]+\\d+/.exec("__abc123.0"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /[a-z]+\\d+/.exec("__abc123.0"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /[a-z]+\\d+/.exec("__abc123.0"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /[a-z]+\\d+/.exec("__abc123.0"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A3_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A3_T7.js deleted file mode 100644 index 37700a892..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A3_T7.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A3_T7; -* @section: 15.10.2.7; -* @assertion: The production QuantifierPrefix :: + evaluates by returning the two results 1 and \infty; -* @description: Execute /[a-z]+(\d+)/.exec("x 2 ff 55 x2 as1 z12 abc12.0") and check results; -*/ - -__executed = /[a-z]+(\d+)/.exec("x 2 ff 55 x2 as1 z12 abc12.0"); - -__expected = ["x2","2"]; -__expected.index = 10; -__expected.input = "x 2 ff 55 x2 as1 z12 abc12.0"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /[a-z]+(\\d+)/.exec("x 2 ff 55 x2 as1 z12 abc12.0"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /[a-z]+(\\d+)/.exec("x 2 ff 55 x2 as1 z12 abc12.0"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /[a-z]+(\\d+)/.exec("x 2 ff 55 x2 as1 z12 abc12.0"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /[a-z]+(\\d+)/.exec("x 2 ff 55 x2 as1 z12 abc12.0"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A3_T8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A3_T8.js deleted file mode 100644 index aca3003b1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A3_T8.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A3_T8; -* @section: 15.10.2.7; -* @assertion: The production QuantifierPrefix :: + evaluates by returning the two results 1 and \infty; -* @description: Execute /[a-z]+(\d+)/.exec("__abc123.0") and check results; -*/ - -__executed = /[a-z]+(\d+)/.exec("__abc123.0"); - -__expected = ["abc123","123"]; -__expected.index = 2; -__expected.input = "__abc123.0"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /[a-z]+(\\d+)/.exec("__abc123.0"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /[a-z]+(\\d+)/.exec("__abc123.0"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /[a-z]+(\\d+)/.exec("__abc123.0"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /[a-z]+(\\d+)/.exec("__abc123.0"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A3_T9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A3_T9.js deleted file mode 100644 index d74018ea9..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A3_T9.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A3_T9; -* @section: 15.10.2.7; -* @assertion: The production QuantifierPrefix :: + evaluates by returning the two results 1 and \infty; -* @description: Execute /d+/.exec("abcdddddefg") and check results; -*/ - -__executed = /d+/.exec("abcdddddefg"); - -__expected = ["ddddd"]; -__expected.index = 3; -__expected.input = "abcdddddefg"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /d+/.exec("abcdddddefg"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /d+/.exec("abcdddddefg"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /d+/.exec("abcdddddefg"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /d+/.exec("abcdddddefg"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A4_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A4_T1.js deleted file mode 100644 index 38d39f5d8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A4_T1.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A4_T1; -* @section: 15.10.2.7; -* @assertion: The production QuantifierPrefix :: * evaluates by returning the two results 0 and \infty; -* @description: Execute /[^"]* /.exec('"beast"-nickname') and check results; -*/ - -__executed = /[^"]*/.exec('"beast"-nickname'); - -__expected = [""]; -__expected.index = 0; -__expected.input = '"beast"-nickname'; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /[^"]*/.exec(\'"beast"-nickname\'); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /[^"]*/.exec(\'"beast"-nickname\'); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /[^"]*/.exec(\'"beast"-nickname\'); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /[^"]*/.exec(\'"beast"-nickname\'); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A4_T10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A4_T10.js deleted file mode 100644 index c3caeb3e5..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A4_T10.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A4_T10; -* @section: 15.10.2.7; -* @assertion: The production QuantifierPrefix :: * evaluates by returning the two results 0 and \infty; -* @description: Execute /d* /.exec('abcddddefg') and check results; -*/ - -__executed = /d*/.exec('abcddddefg'); - -__expected = [""]; -__expected.index = 0; -__expected.input = 'abcddddefg'; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /d*/.exec(\'abcddddefg\'); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /d*/.exec(\'abcddddefg\'); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /d*/.exec(\'abcddddefg\'); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /d*/.exec(\'abcddddefg\'); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A4_T11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A4_T11.js deleted file mode 100644 index 15179ce34..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A4_T11.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A4_T11; -* @section: 15.10.2.7; -* @assertion: The production QuantifierPrefix :: * evaluates by returning the two results 0 and \infty; -* @description: Execute /cd* /.exec('abcddddefg') and check results; -*/ - -__executed = /cd*/.exec('abcddddefg'); - -__expected = ["cdddd"]; -__expected.index = 2; -__expected.input = 'abcddddefg'; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /cd*/.exec(\'abcddddefg\'); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /cd*/.exec(\'abcddddefg\'); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /cd*/.exec(\'abcddddefg\'); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /cd*/.exec(\'abcddddefg\'); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A4_T12.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A4_T12.js deleted file mode 100644 index e49b5c1d9..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A4_T12.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A4_T12; -* @section: 15.10.2.7; -* @assertion: The production QuantifierPrefix :: * evaluates by returning the two results 0 and \infty; -* @description: Execute /cx*d/.exec('abcdefg') and check results; -*/ - -__executed = /cx*d/.exec('abcdefg'); - -__expected = ["cd"]; -__expected.index = 2; -__expected.input = 'abcdefg'; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /cx*d/.exec(\'abcdefg\'); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /cx*d/.exec(\'abcdefg\'); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /cx*d/.exec(\'abcdefg\'); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /cx*d/.exec(\'abcdefg\'); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A4_T13.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A4_T13.js deleted file mode 100644 index 351af1c02..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A4_T13.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A4_T13; -* @section: 15.10.2.7; -* @assertion: The production QuantifierPrefix :: * evaluates by returning the two results 0 and \infty; -* @description: Execute /(x*)(x+)/.exec('xxxxxxx') and check results; -*/ - -__executed = /(x*)(x+)/.exec('xxxxxxx'); - -__expected = ["xxxxxxx","xxxxxx","x"]; -__expected.index = 0; -__expected.input = 'xxxxxxx'; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /(x*)(x+)/.exec(\'xxxxxxx\'); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /(x*)(x+)/.exec(\'xxxxxxx\'); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /(x*)(x+)/.exec(\'xxxxxxx\'); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /(x*)(x+)/.exec(\'xxxxxxx\'); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A4_T14.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A4_T14.js deleted file mode 100644 index 1fac163e7..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A4_T14.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A4_T14; -* @section: 15.10.2.7; -* @assertion: The production QuantifierPrefix :: * evaluates by returning the two results 0 and \infty; -* @description: Execute /(\d*)(\d+)/.exec('1234567890') and check results; -*/ - -__executed = /(\d*)(\d+)/.exec('1234567890'); - -__expected = ["1234567890","123456789","0"]; -__expected.index = 0; -__expected.input = '1234567890'; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /(\\d*)(\\d+)/.exec(\'1234567890\'); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /(\\d*)(\\d+)/.exec(\'1234567890\'); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /(\\d*)(\\d+)/.exec(\'1234567890\'); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /(\\d*)(\\d+)/.exec(\'1234567890\'); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A4_T15.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A4_T15.js deleted file mode 100644 index e620aca09..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A4_T15.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A4_T15; -* @section: 15.10.2.7; -* @assertion: The production QuantifierPrefix :: * evaluates by returning the two results 0 and \infty; -* @description: Execute /(\d*)\d(\d+)/.exec('1234567890') and check results; -*/ - -__executed = /(\d*)\d(\d+)/.exec('1234567890'); - -__expected = ["1234567890","12345678","0"]; -__expected.index = 0; -__expected.input = '1234567890'; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /(\\d*)\\d(\\d+)/.exec(\'1234567890\'); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /(\\d*)\\d(\\d+)/.exec(\'1234567890\'); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /(\\d*)\\d(\\d+)/.exec(\'1234567890\'); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /(\\d*)\\d(\\d+)/.exec(\'1234567890\'); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A4_T16.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A4_T16.js deleted file mode 100644 index 650d73cfc..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A4_T16.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A4_T16; -* @section: 15.10.2.7; -* @assertion: The production QuantifierPrefix :: * evaluates by returning the two results 0 and \infty; -* @description: Execute /(x+)(x*)/.exec('xxxxxxx') and check results; -*/ - -__executed = /(x+)(x*)/.exec('xxxxxxx'); - -__expected = ["xxxxxxx","xxxxxxx",""]; -__expected.index = 0; -__expected.input = 'xxxxxxx'; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /(x+)(x*)/.exec(\'xxxxxxx\'); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /(x+)(x*)/.exec(\'xxxxxxx\'); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /(x+)(x*)/.exec(\'xxxxxxx\'); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /(x+)(x*)/.exec(\'xxxxxxx\'); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A4_T17.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A4_T17.js deleted file mode 100644 index d0f5d6e62..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A4_T17.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A4_T17; -* @section: 15.10.2.7; -* @assertion: The production QuantifierPrefix :: * evaluates by returning the two results 0 and \infty; -* @description: Execute /x*y+$/.exec('xxxxxxyyyyyy') and check results; -*/ - -__executed = /x*y+$/.exec('xxxxxxyyyyyy'); - -__expected = ["xxxxxxyyyyyy"]; -__expected.index = 0; -__expected.input = 'xxxxxxyyyyyy'; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /x*y+$/.exec(\'xxxxxxyyyyyy\'); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /x*y+$/.exec(\'xxxxxxyyyyyy\'); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /x*y+$/.exec(\'xxxxxxyyyyyy\'); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /x*y+$/.exec(\'xxxxxxyyyyyy\'); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A4_T18.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A4_T18.js deleted file mode 100644 index 42f905bce..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A4_T18.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A4_T18; -* @section: 15.10.2.7; -* @assertion: The production QuantifierPrefix :: * evaluates by returning the two results 0 and \infty; -* @description: Execute /[\d]*[\s]*bc./.exec('abcdef') and check results; -*/ - -__executed = /[\d]*[\s]*bc./.exec('abcdef'); - -__expected = ["bcd"]; -__expected.index = 1; -__expected.input = 'abcdef'; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /[\\d]*[\\s]*bc./.exec(\'abcdef\'); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /[\\d]*[\\s]*bc./.exec(\'abcdef\'); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /[\\d]*[\\s]*bc./.exec(\'abcdef\'); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /[\\d]*[\\s]*bc./.exec(\'abcdef\'); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A4_T19.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A4_T19.js deleted file mode 100644 index 19aedcfe2..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A4_T19.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A4_T19; -* @section: 15.10.2.7; -* @assertion: The production QuantifierPrefix :: * evaluates by returning the two results 0 and \infty; -* @description: Execute /bc..[\d]*[\s]* /.exec('abcdef') and check results; -*/ - -__executed = /bc..[\d]*[\s]*/.exec('abcdef'); - -__expected = ["bcde"]; -__expected.index = 1; -__expected.input = 'abcdef'; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /bc..[\\d]*[\\s]*/.exec(\'abcdef\'); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /bc..[\\d]*[\\s]*/.exec(\'abcdef\'); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /bc..[\\d]*[\\s]*/.exec(\'abcdef\'); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /bc..[\\d]*[\\s]*/.exec(\'abcdef\'); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A4_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A4_T2.js deleted file mode 100644 index 45624e194..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A4_T2.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A4_T2; -* @section: 15.10.2.7; -* @assertion: The production QuantifierPrefix :: * evaluates by returning the two results 0 and \infty; -* @description: Execute /[^"]* /.exec('alice said: "don\'t"') and check results; -*/ - -__executed = /[^"]*/.exec('alice said: "don\'t"'); - -__expected = ["alice said: "]; -__expected.index = 0; -__expected.input = 'alice said: "don\'t"'; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /[^"]*/.exec(\'alice said: "don\'t"\'); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /[^"]*/.exec(\'alice said: "don\'t"\'); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /[^"]*/.exec(\'alice said: "don\'t"\'); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /[^"]*/.exec(\'alice said: "don\'t"\'); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A4_T20.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A4_T20.js deleted file mode 100644 index 7fc8b7253..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A4_T20.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A4_T20; -* @section: 15.10.2.7; -* @assertion: The production QuantifierPrefix :: * evaluates by returning the two results 0 and \infty; -* @description: Execute /.* /.exec('a1b2c3') and check results; -*/ - -__executed = /.*/.exec('a1b2c3'); - -__expected = ["a1b2c3"]; -__expected.index = 0; -__expected.input = 'a1b2c3'; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /.*/.exec(\'a1b2c3\'); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /.*/.exec(\'a1b2c3\'); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /.*/.exec(\'a1b2c3\'); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /.*/.exec(\'a1b2c3\'); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A4_T21.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A4_T21.js deleted file mode 100644 index 034896a1f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A4_T21.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A4_T21; -* @section: 15.10.2.7; -* @assertion: The production QuantifierPrefix :: * evaluates by returning the two results 0 and \infty; -* @description: Execute /[xyz]*1/.test('a0.b2.c3') and check results; -*/ - -__executed = /[xyz]*1/.test('a0.b2.c3'); - -//CHECK#1 -if (__executed) { - $ERROR('#1: /[xyz]*1/.test(\'a0.b2.c3\') === false'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A4_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A4_T3.js deleted file mode 100644 index 471db3ec6..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A4_T3.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A4_T3; -* @section: 15.10.2.7; -* @assertion: The production QuantifierPrefix :: * evaluates by returning the two results 0 and \infty; -* @description: Execute /[^"]* /.exec("before\'i\'start") and check results; -*/ - -__executed = /[^"]*/.exec("before\'i\'start"); - -__expected = ["before\'i\'start"]; -__expected.index = 0; -__expected.input = "before\'i\'start"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /[^"]*/.exec("before\'i\'start"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /[^"]*/.exec("before\'i\'start"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /[^"]*/.exec("before\'i\'start"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /[^"]*/.exec("before\'i\'start"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A4_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A4_T4.js deleted file mode 100644 index 6a698d8d0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A4_T4.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A4_T4; -* @section: 15.10.2.7; -* @assertion: The production QuantifierPrefix :: * evaluates by returning the two results 0 and \infty; -* @description: Execute /[^"]* /.exec('alice \"sweep\": "don\'t"') and check results; -*/ - -__executed = /[^"]*/.exec('alice \"sweep\": "don\'t"'); - -__expected = ["alice "]; -__expected.index = 0; -__expected.input = 'alice \"sweep\": "don\'t"'; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /[^"]*/.exec(\'alice \\"sweep\\": "don\'t"\'); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /[^"]*/.exec(\'alice \\"sweep\\": "don\'t"\'); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /[^"]*/.exec(\'alice \\"sweep\\": "don\'t"\'); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /[^"]*/.exec(\'alice \\"sweep\\": "don\'t"\'); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A4_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A4_T5.js deleted file mode 100644 index 96551fe5c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A4_T5.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A4_T5; -* @section: 15.10.2.7; -* @assertion: The production QuantifierPrefix :: * evaluates by returning the two results 0 and \infty; -* @description: Execute /[^"]* /.exec('alice \u0022sweep\u0022: "don\'t"') and check results; -*/ - -__executed = /[^"]*/.exec('alice \u0022sweep\u0022: "don\'t"'); - -__expected = ["alice "]; -__expected.index = 0; -__expected.input = 'alice "sweep": "don\'t"'; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /[^"]*/.exec(\'alice \\u0022sweep\\u0022: "don\'t"\'); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /[^"]*/.exec(\'alice \\u0022sweep\\u0022: "don\'t"\'); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /[^"]*/.exec(\'alice \\u0022sweep\\u0022: "don\'t"\'); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /[^"]*/.exec(\'alice \\u0022sweep\\u0022: "don\'t"\'); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A4_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A4_T6.js deleted file mode 100644 index 8cc4bec68..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A4_T6.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A4_T6; -* @section: 15.10.2.7; -* @assertion: The production QuantifierPrefix :: * evaluates by returning the two results 0 and \infty; -* @description: Execute /["'][^"']*["']/.exec('alice \u0022sweep\u0022: "don\'t"') and check results; -*/ - -__executed = /["'][^"']*["']/.exec('alice \u0022sweep\u0022: "don\'t"'); - -__expected = ["\"sweep\""]; -__expected.index = 6; -__expected.input = 'alice "sweep": "don\'t"'; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /["\'][^"\']*["\']/.exec(\'alice \\u0022sweep\\u0022: "don\'t"\'); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /["\'][^"\']*["\']/.exec(\'alice \\u0022sweep\\u0022: "don\'t"\'); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /["\'][^"\']*["\']/.exec(\'alice \\u0022sweep\\u0022: "don\'t"\'); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /["\'][^"\']*["\']/.exec(\'alice \\u0022sweep\\u0022: "don\'t"\'); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A4_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A4_T7.js deleted file mode 100644 index e88d1070d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A4_T7.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A4_T7; -* @section: 15.10.2.7; -* @assertion: The production QuantifierPrefix :: * evaluates by returning the two results 0 and \infty; -* @description: Execute /["'][^"']*["']/.exec('alice cries out: \'don\'t\'') and check results; -*/ - -__executed = /["'][^"']*["']/.exec('alice cries out: \'don\'t\''); - -__expected = ["\'don\'"]; -__expected.index = 17; -__expected.input = 'alice cries out: \'don\'t\''; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /["\'][^"\']*["\']/.exec(\'alice cries out: \'don\'t\'\'); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /["\'][^"\']*["\']/.exec(\'alice cries out: \'don\'t\'\'); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /["\'][^"\']*["\']/.exec(\'alice cries out: \'don\'t\'\'); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /["\'][^"\']*["\']/.exec(\'alice cries out: \'don\'t\'\'); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A4_T8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A4_T8.js deleted file mode 100644 index 023e93570..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A4_T8.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A4_T8; -* @section: 15.10.2.7; -* @assertion: The production QuantifierPrefix :: * evaluates by returning the two results 0 and \infty; -* @description: Execute /["'][^"']*["']/.test('alice cries out: don\'t') and check results; -*/ - -__executed = /["'][^"']*["']/.test('alice cries out: don\'t'); - -//CHECK#1 -if (__executed) { - $ERROR('#1: /["\'][^"\']*["\']/.test(\'alice cries out: don\'t\') === false'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A4_T9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A4_T9.js deleted file mode 100644 index 6a42bc727..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A4_T9.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A4_T9; -* @section: 15.10.2.7; -* @assertion: The production QuantifierPrefix :: * evaluates by returning the two results 0 and \infty; -* @description: Execute /["'][^"']*["']/.exec('alice cries out:\"\"') and check results; -*/ - -__executed = /["'][^"']*["']/.exec('alice cries out:\"\"'); - -__expected = ['\"\"']; -__expected.index = 16; -__expected.input = 'alice cries out:\"\"'; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /["\'][^"\']*["\']/.exec(\'alice cries out:\\"\\"\'); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /["\'][^"\']*["\']/.exec(\'alice cries out:\\"\\"\'); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /["\'][^"\']*["\']/.exec(\'alice cries out:\\"\\"\'); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /["\'][^"\']*["\']/.exec(\'alice cries out:\\"\\"\'); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A5_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A5_T1.js deleted file mode 100644 index 51927cd67..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A5_T1.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A5_T1; -* @section: 15.10.2.7; -* @assertion: The production QuantifierPrefix :: ? evaluates by returning the two results 0 and 1; -* @description: Execute /java(script)?/.exec("state: javascript is extension of ecma script") and check results; -*/ - -__executed = /java(script)?/.exec("state: javascript is extension of ecma script"); - -__expected = ["javascript", "script"]; -__expected.index = 7; -__expected.input = "state: javascript is extension of ecma script"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /java(script)?/.exec("state: javascript is extension of ecma script"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /java(script)?/.exec("state: javascript is extension of ecma script"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /java(script)?/.exec("state: javascript is extension of ecma script"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /java(script)?/.exec("state: javascript is extension of ecma script"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A5_T10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A5_T10.js deleted file mode 100644 index 9c928fc61..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A5_T10.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A5_T10; -* @section: 15.10.2.7; -* @assertion: The production QuantifierPrefix :: ? evaluates by returning the two results 0 and 1; -* @description: Execute /ab?c?d?x?y?z/.exec("123az789") and check results; -*/ - -__executed = /ab?c?d?x?y?z/.exec("123az789"); - -__expected = ["az"]; -__expected.index = 3; -__expected.input = "123az789"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /ab?c?d?x?y?z/.exec("123az789"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /ab?c?d?x?y?z/.exec("123az789"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /ab?c?d?x?y?z/.exec("123az789"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /ab?c?d?x?y?z/.exec("123az789"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A5_T11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A5_T11.js deleted file mode 100644 index c2b46213b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A5_T11.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A5_T11; -* @section: 15.10.2.7; -* @assertion: The production QuantifierPrefix :: ? evaluates by returning the two results 0 and 1; -* @description: Execute /\??\??\??\??\??/.exec("?????") and check results; -*/ - -__executed = /\??\??\??\??\??/.exec("?????"); - -__expected = ["?????"]; -__expected.index = 0; -__expected.input = "?????"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /\\??\\??\\??\\??\\??/.exec("?????"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /\\??\\??\\??\\??\\??/.exec("?????"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /\\??\\??\\??\\??\\??/.exec("?????"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /\\??\\??\\??\\??\\??/.exec("?????"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A5_T12.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A5_T12.js deleted file mode 100644 index e580ebba5..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A5_T12.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A5_T12; -* @section: 15.10.2.7; -* @assertion: The production QuantifierPrefix :: ? evaluates by returning the two results 0 and 1; -* @description: Execute /.?.?.?.?.?.?.?/.exec("test") and check results; -*/ - -__executed = /.?.?.?.?.?.?.?/.exec("test"); - -__expected = ["test"]; -__expected.index = 0; -__expected.input = "test"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /.?.?.?.?.?.?.?/.exec("test"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /.?.?.?.?.?.?.?/.exec("test"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /.?.?.?.?.?.?.?/.exec("test"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /.?.?.?.?.?.?.?/.exec("test"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A5_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A5_T2.js deleted file mode 100644 index 26f61340c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A5_T2.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A5_T2; -* @section: 15.10.2.7; -* @assertion: The production QuantifierPrefix :: ? evaluates by returning the two results 0 and 1; -* @description: Execute /java(script)?/.exec("state: java and javascript are vastly different") and check results; -*/ - -__executed = /java(script)?/.exec("state: java and javascript are vastly different"); - -__expected = ["java", undefined]; -__expected.index = 7; -__expected.input = "state: java and javascript are vastly different"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /java(script)?/.exec("state: java and javascript are vastly different"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /java(script)?/.exec("state: java and javascript are vastly different"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /java(script)?/.exec("state: java and javascript are vastly different"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /java(script)?/.exec("state: java and javascript are vastly different"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A5_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A5_T3.js deleted file mode 100644 index 854d4f369..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A5_T3.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A5_T3; -* @section: 15.10.2.7; -* @assertion: The production QuantifierPrefix :: ? evaluates by returning the two results 0 and 1; -* @description: Execute /java(script)?/.test("state: both Java and JavaScript used in web development") and check results; -*/ - -__executed = /java(script)?/.test("state: both Java and JavaScript used in web development"); - -//CHECK#1 -if (__executed) { - $ERROR('#1: /java(script)?/.test("state: both Java and JavaScript used in web development") === false'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A5_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A5_T4.js deleted file mode 100644 index 962063854..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A5_T4.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A5_T4; -* @section: 15.10.2.7; -* @assertion: The production QuantifierPrefix :: ? evaluates by returning the two results 0 and 1; -* @description: Execute /cd?e/.exec("abcdef") and check results; -*/ - -__executed = /cd?e/.exec("abcdef"); - -__expected = ["cde"]; -__expected.index = 2; -__expected.input = "abcdef"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /cd?e/.exec("abcdef"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /cd?e/.exec("abcdef"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /cd?e/.exec("abcdef"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /cd?e/.exec("abcdef"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A5_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A5_T5.js deleted file mode 100644 index 7fcf817cc..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A5_T5.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A5_T5; -* @section: 15.10.2.7; -* @assertion: The production QuantifierPrefix :: ? evaluates by returning the two results 0 and 1; -* @description: Execute /cdx?e/.exec("abcdef") and check results; -*/ - -__executed = /cdx?e/.exec("abcdef"); - -__expected = ["cde"]; -__expected.index = 2; -__expected.input = "abcdef"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /cdx?e/.exec("abcdef"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /cdx?e/.exec("abcdef"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /cdx?e/.exec("abcdef"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /cdx?e/.exec("abcdef"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A5_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A5_T6.js deleted file mode 100644 index dbf41bde4..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A5_T6.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A5_T6; -* @section: 15.10.2.7; -* @assertion: The production QuantifierPrefix :: ? evaluates by returning the two results 0 and 1; -* @description: Execute /o?pqrst/.exec("pqrstuvw") and check results; -*/ - -__executed = /o?pqrst/.exec("pqrstuvw"); - -__expected = ["pqrst"]; -__expected.index = 0; -__expected.input = "pqrstuvw"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /o?pqrst/.exec("pqrstuvw"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /o?pqrst/.exec("pqrstuvw"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /o?pqrst/.exec("pqrstuvw"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /o?pqrst/.exec("pqrstuvw"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A5_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A5_T7.js deleted file mode 100644 index 33e387049..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A5_T7.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A5_T7; -* @section: 15.10.2.7; -* @assertion: The production QuantifierPrefix :: ? evaluates by returning the two results 0 and 1; -* @description: Execute /x?y?z?/.exec("abcd") and check results; -*/ - -__executed = /x?y?z?/.exec("abcd"); - -__expected = [""]; -__expected.index = 0; -__expected.input = "abcd"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /x?y?z?/.exec("abcd"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /x?y?z?/.exec("abcd"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /x?y?z?/.exec("abcd"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /x?y?z?/.exec("abcd"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A5_T8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A5_T8.js deleted file mode 100644 index 46991c2ec..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A5_T8.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A5_T8; -* @section: 15.10.2.7; -* @assertion: The production QuantifierPrefix :: ? evaluates by returning the two results 0 and 1; -* @description: Execute /x?ay?bz?c/.exec("abcd") and check results; -*/ - -__executed = /x?ay?bz?c/.exec("abcd"); - -__expected = ["abc"]; -__expected.index = 0; -__expected.input = "abcd"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /x?ay?bz?c/.exec("abcd"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /x?ay?bz?c/.exec("abcd"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /x?ay?bz?c/.exec("abcd"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /x?ay?bz?c/.exec("abcd"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A5_T9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A5_T9.js deleted file mode 100644 index dce734b45..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A5_T9.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A5_T9; -* @section: 15.10.2.7; -* @assertion: The production QuantifierPrefix :: ? evaluates by returning the two results 0 and 1; -* @description: Execute /b?b?b?b/.exec("abbbbc") and check results; -*/ - -__executed = /b?b?b?b/.exec("abbbbc"); - -__expected = ["bbbb"]; -__expected.index = 1; -__expected.input = "abbbbc"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /b?b?b?b/.exec("abbbbc"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /b?b?b?b/.exec("abbbbc"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /b?b?b?b/.exec("abbbbc"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /b?b?b?b/.exec("abbbbc"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A6_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A6_T1.js deleted file mode 100644 index e40cfc495..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A6_T1.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A6_T1; -* @section: 15.10.2.7; -* @assertion: The production QuantifierPrefix :: { DecimalDigits , }evaluates as follows: -* i) Let i be the MV of DecimalDigits -* ii) Return the two results i and \infty; -* @description: Execute /b{2,}c/.exec("aaabbbbcccddeeeefffff") and check results; -*/ - -__executed = /b{2,}c/.exec("aaabbbbcccddeeeefffff"); - -__expected = ["bbbbc"]; -__expected.index = 3; -__expected.input = "aaabbbbcccddeeeefffff"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /b{2,}c/.exec("aaabbbbcccddeeeefffff"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /b{2,}c/.exec("aaabbbbcccddeeeefffff"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /b{2,}c/.exec("aaabbbbcccddeeeefffff"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /b{2,}c/.exec("aaabbbbcccddeeeefffff"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A6_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A6_T2.js deleted file mode 100644 index 55a5bd119..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A6_T2.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A6_T2; -* @section: 15.10.2.7; -* @assertion: The production QuantifierPrefix :: { DecimalDigits , }evaluates as follows: -* i) Let i be the MV of DecimalDigits -* ii) Return the two results i and \infty; -* @description: Execute /b{8,}c/.test("aaabbbbcccddeeeefffff") and check results; -*/ - -__executed = /b{8,}c/.test("aaabbbbcccddeeeefffff"); - -//CHECK#1 -if (__executed) { - $ERROR('#1: /b{8,}c/.test("aaabbbbcccddeeeefffff") === false'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A6_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A6_T3.js deleted file mode 100644 index b7a6fa1ec..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A6_T3.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A6_T3; -* @section: 15.10.2.7; -* @assertion: The production QuantifierPrefix :: { DecimalDigits , }evaluates as follows: -* i) Let i be the MV of DecimalDigits -* ii) Return the two results i and \infty; -* @description: Execute /\d{1,}/.exec("wqe456646dsff") and check results; -*/ - -__executed = /\d{1,}/.exec("wqe456646dsff"); - -__expected = ["456646"]; -__expected.index = 3; -__expected.input = "wqe456646dsff"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /\\d{1,}/.exec("wqe456646dsff"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /\\d{1,}/.exec("wqe456646dsff"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /\\d{1,}/.exec("wqe456646dsff"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /\\d{1,}/.exec("wqe456646dsff"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A6_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A6_T4.js deleted file mode 100644 index 5dbc330cb..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A6_T4.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A6_T4; -* @section: 15.10.2.7; -* @assertion: The production QuantifierPrefix :: { DecimalDigits , }evaluates as follows: -* i) Let i be the MV of DecimalDigits -* ii) Return the two results i and \infty; -* @description: Execute /(123){1,}/.exec("123123") and check results; -*/ - -__executed = /(123){1,}/.exec("123123"); - -__expected = ["123123","123"]; -__expected.index = 0; -__expected.input = "123123"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /(123){1,}/.exec("123123"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /(123){1,}/.exec("123123"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /(123){1,}/.exec("123123"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /(123){1,}/.exec("123123"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A6_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A6_T5.js deleted file mode 100644 index e75f01f43..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A6_T5.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A6_T5; -* @section: 15.10.2.7; -* @assertion: The production QuantifierPrefix :: { DecimalDigits , }evaluates as follows: -* i) Let i be the MV of DecimalDigits -* ii) Return the two results i and \infty; -* @description: Execute /(123){1,}x\1/.exec("123123x123") and check results; -*/ - -__executed = /(123){1,}x\1/.exec("123123x123"); - -__expected = ["123123x123","123"]; -__expected.index = 0; -__expected.input = "123123x123"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /(123){1,}x\\1/.exec("123123x123"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /(123){1,}x\\1/.exec("123123x123"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /(123){1,}x\\1\\/.exec("123123x123"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /(123){1,}x\\1/.exec("123123x123"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A6_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A6_T6.js deleted file mode 100644 index ebc6391f3..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.7_Quantifier/S15.10.2.7_A6_T6.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.7_A6_T6; -* @section: 15.10.2.7; -* @assertion: The production QuantifierPrefix :: { DecimalDigits , }evaluates as follows: -* i) Let i be the MV of DecimalDigits -* ii) Return the two results i and \infty; -* @description: Execute /x{1,2}x{1,}/.exec("xxxxxxx") and check results; -*/ - -__executed = /x{1,2}x{1,}/.exec("xxxxxxx"); - -__expected = ["xxxxxxx"]; -__expected.index = 0; -__expected.input = "xxxxxxx"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /x{1,2}x{1,}/.exec("xxxxxxx"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /x{1,2}x{1,}/.exec("xxxxxxx"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /x{1,2}x{1,}/.exec("xxxxxxx"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /x{1,2}x{1,}/.exec("xxxxxxx"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A1_T1.js deleted file mode 100644 index a6c2f68d5..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A1_T1.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.8_A1_T1; -* @section: 15.10.2.8; -* @assertion: The form (?= Disjunction ) specifies a zero-width positive lookahead. -* In order for it to succeed, the pattern inside Disjunction must match at the current position, but the current position is not advanced before matching the sequel. -* If Disjunction can match at the current position in several ways, only the first one is tried; -* @description: Execute /(?=(a+))/.exec("baaabac") and check results; -*/ - -__executed = /(?=(a+))/.exec("baaabac"); - -__expected = ["", "aaa"]; -__expected.index = 1; -__expected.input = "baaabac"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /(?=(a+))/.exec("baaabac"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /(?=(a+))/.exec("baaabac"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /(?=(a+))/.exec("baaabac"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /(?=(a+))/.exec("baaabac"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A1_T2.js deleted file mode 100644 index 8087a8ecf..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A1_T2.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.8_A1_T2; -* @section: 15.10.2.8; -* @assertion: The form (?= Disjunction ) specifies a zero-width positive lookahead. -* In order for it to succeed, the pattern inside Disjunction must match at the current position, but the current position is not advanced before matching the sequel. -* If Disjunction can match at the current position in several ways, only the first one is tried; -* @description: Execute /(?=(a+))a*b\1/.exec("baaabac") and check results; -*/ - -__executed = /(?=(a+))a*b\1/.exec("baaabac"); - -__expected = ["aba", "a"]; -__expected.index = 3; -__expected.input = "baaabac"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /(?=(a+))a*b\\1/.exec("baaabac"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /(?=(a+))a*b\\1/.exec("baaabac"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /(?=(a+))a*b\\1/.exec("baaabac"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /(?=(a+))a*b\\1/.exec("baaabac"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A1_T3.js deleted file mode 100644 index 2441554fa..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A1_T3.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.8_A1_T3; -* @section: 15.10.2.8; -* @assertion: The form (?= Disjunction ) specifies a zero-width positive lookahead. -* In order for it to succeed, the pattern inside Disjunction must match at the current position, but the current position is not advanced before matching the sequel. -* If Disjunction can match at the current position in several ways, only the first one is tried; -* @description: Execute /[Jj]ava([Ss]cript)?(?=\:)/.exec("just Javascript: the way af jedi") and check results; -*/ - -__executed = /[Jj]ava([Ss]cript)?(?=\:)/.exec("just Javascript: the way af jedi"); - -__expected = ["Javascript", "script"]; -__expected.index = 5; -__expected.input = "just Javascript: the way af jedi"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /[Jj]ava([Ss]cript)?(?=\\:)/.exec("just Javascript: the way af jedi"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /[Jj]ava([Ss]cript)?(?=\\:)/.exec("just Javascript: the way af jedi"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /[Jj]ava([Ss]cript)?(?=\\:)/.exec("just Javascript: the way af jedi"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /[Jj]ava([Ss]cript)?(?=\\:)/.exec("just Javascript: the way af jedi"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A1_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A1_T4.js deleted file mode 100644 index c1fd78ce4..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A1_T4.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.8_A1_T4; -* @section: 15.10.2.8; -* @assertion: The form (?= Disjunction ) specifies a zero-width positive lookahead. -* In order for it to succeed, the pattern inside Disjunction must match at the current position, but the current position is not advanced before matching the sequel. -* If Disjunction can match at the current position in several ways, only the first one is tried; -* @description: Execute /[Jj]ava([Ss]cript)?(?=\:)/.exec("taste of java: the cookbook ") and check results; -*/ - -__executed = /[Jj]ava([Ss]cript)?(?=\:)/.exec("taste of java: the cookbook "); - -__expected = ["java", undefined]; -__expected.index = 9; -__expected.input = "taste of java: the cookbook "; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /[Jj]ava([Ss]cript)?(?=\\:)/.exec("taste of java: the cookbook "); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /[Jj]ava([Ss]cript)?(?=\\:)/.exec("taste of java: the cookbook "); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /[Jj]ava([Ss]cript)?(?=\\:)/.exec("taste of java: the cookbook "); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /[Jj]ava([Ss]cript)?(?=\\:)/.exec("taste of java: the cookbook "); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A1_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A1_T5.js deleted file mode 100644 index bd970be4f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A1_T5.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.8_A1_T5; -* @section: 15.10.2.8; -* @assertion: The form (?= Disjunction ) specifies a zero-width positive lookahead. -* In order for it to succeed, the pattern inside Disjunction must match at the current position, but the current position is not advanced before matching the sequel. -* If Disjunction can match at the current position in several ways, only the first one is tried; -* @description: Execute /[Jj]ava([Ss]cript)?(?=\:)/.test("rhino is JavaScript engine") and check results; -*/ - -__executed = /[Jj]ava([Ss]cript)?(?=\:)/.test("rhino is JavaScript engine"); - -//CHECK#1 -if (__executed) { - $ERROR('#1: /[Jj]ava([Ss]cript)?(?=\\:)/.test("rhino is JavaScript engine") === false'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A2_T1.js deleted file mode 100644 index e430b8b0d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A2_T1.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.8_A2_T1; -* @section: 15.10.2.8; -* @assertion: The form (?! Disjunction ) specifies a zero-width negative lookahead. -* In order for it to succeed, the pattern inside Disjunction must fail to match at the current position. -* The current position is not advanced before matching the sequel; -* @description: Execute /(.*?)a(?!(a+)b\2c)\2(.*)/.exec("baaabaac") and check results; -*/ - -__executed = /(.*?)a(?!(a+)b\2c)\2(.*)/.exec("baaabaac"); - -__expected = ["baaabaac", "ba", undefined, "abaac"]; -__expected.index = 0; -__expected.input = "baaabaac"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /(.*?)a(?!(a+)b\\2c)\\2(.*)/.exec("baaabaac"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /(.*?)a(?!(a+)b\\2c)\\2(.*)/.exec("baaabaac"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /(.*?)a(?!(a+)b\\2c)\\2(.*)/.exec("baaabaac"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /(.*?)a(?!(a+)b\\2c)\\2(.*)/.exec("baaabaac"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A2_T10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A2_T10.js deleted file mode 100644 index ad8bf5361..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A2_T10.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.8_A2_T10; -* @section: 15.10.2.8; -* @assertion: The form (?! Disjunction ) specifies a zero-width negative lookahead. -* In order for it to succeed, the pattern inside Disjunction must fail to match at the current position. -* The current position is not advanced before matching the sequel; -* @description: Execute /(?!a|b)|c/.exec("bc") and check results; -*/ - -__executed = /(?!a|b)|c/.exec("bc"); - -__expected = [""]; -__expected.index = 1; -__expected.input = "bc"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /(?!a|b)|c/.exec("bc"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /(?!a|b)|c/.exec("bc"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /(?!a|b)|c/.exec("bc"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /(?!a|b)|c/.exec("bc"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A2_T11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A2_T11.js deleted file mode 100644 index e2d87b7b1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A2_T11.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.8_A2_T11; -* @section: 15.10.2.8; -* @assertion: The form (?! Disjunction ) specifies a zero-width negative lookahead. -* In order for it to succeed, the pattern inside Disjunction must fail to match at the current position. -* The current position is not advanced before matching the sequel; -* @description: Execute /(?!a|b)|c/.exec("d") and check results; -*/ - -__executed = /(?!a|b)|c/.exec("d"); - -__expected = [""]; -__expected.index = 0; -__expected.input = "d"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /(?!a|b)|c/.exec("d"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /(?!a|b)|c/.exec("d"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /(?!a|b)|c/.exec("d"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /(?!a|b)|c/.exec("d"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A2_T2.js deleted file mode 100644 index 810474077..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A2_T2.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.8_A2_T2; -* @section: 15.10.2.8; -* @assertion: The form (?! Disjunction ) specifies a zero-width negative lookahead. -* In order for it to succeed, the pattern inside Disjunction must fail to match at the current position. -* The current position is not advanced before matching the sequel; -* @description: Execute /Java(?!Script)([A-Z]\w*)/.exec("using of JavaBeans technology") and check results; -*/ - -__executed = /Java(?!Script)([A-Z]\w*)/.exec("using of JavaBeans technology"); - -__expected = ["JavaBeans", "Beans"]; -__expected.index = 9; -__expected.input = "using of JavaBeans technology"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /Java(?!Script)([A-Z]\\w*)/.exec("using of JavaBeans technology"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /Java(?!Script)([A-Z]\\w*)/.exec("using of JavaBeans technology"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /Java(?!Script)([A-Z]\\w*)/.exec("using of JavaBeans technology"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /Java(?!Script)([A-Z]\\w*)/.exec("using of JavaBeans technology"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A2_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A2_T3.js deleted file mode 100644 index 368c07af9..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A2_T3.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.8_A2_T3; -* @section: 15.10.2.8; -* @assertion: The form (?! Disjunction ) specifies a zero-width negative lookahead. -* In order for it to succeed, the pattern inside Disjunction must fail to match at the current position. -* The current position is not advanced before matching the sequel; -* @description: Execute /Java(?!Script)([A-Z]\w*)/.test("using of Java language") and check results; -*/ - -__executed = /Java(?!Script)([A-Z]\w*)/.test("using of Java language"); - -//CHECK#1 -if (__executed) { - $ERROR('#1: /Java(?!Script)([A-Z]\\w*)/.test("using of Java language") === false'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A2_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A2_T4.js deleted file mode 100644 index 366389c63..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A2_T4.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.8_A2_T4; -* @section: 15.10.2.8; -* @assertion: The form (?! Disjunction ) specifies a zero-width negative lookahead. -* In order for it to succeed, the pattern inside Disjunction must fail to match at the current position. -* The current position is not advanced before matching the sequel; -* @description: Execute /Java(?!Script)([A-Z]\w*)/.test("i'm a JavaScripter ") and check results; -*/ - -__executed = /Java(?!Script)([A-Z]\w*)/.test("i'm a JavaScripter "); - -//CHECK#1 -if (__executed) { - $ERROR('#1: /Java(?!Script)([A-Z]\\w*)/.test("i\'m a JavaScripter ") === false'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A2_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A2_T5.js deleted file mode 100644 index 3aaf8c737..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A2_T5.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.8_A2_T5; -* @section: 15.10.2.8; -* @assertion: The form (?! Disjunction ) specifies a zero-width negative lookahead. -* In order for it to succeed, the pattern inside Disjunction must fail to match at the current position. -* The current position is not advanced before matching the sequel; -* @description: Execute /Java(?!Script)([A-Z]\w*)/.exec("JavaScr oops ipt ") and check results; -*/ - -__executed = /Java(?!Script)([A-Z]\w*)/.exec("JavaScr oops ipt "); - -__expected = ["JavaScr", "Scr"]; -__expected.index = 0; -__expected.input = "JavaScr oops ipt "; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /Java(?!Script)([A-Z]\\w*)/.exec("JavaScr oops ipt "); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /Java(?!Script)([A-Z]\\w*)/.exec("JavaScr oops ipt "); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /Java(?!Script)([A-Z]\\w*)/.exec("JavaScr oops ipt "); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /Java(?!Script)([A-Z]\\w*)/.exec("JavaScr oops ipt "); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A2_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A2_T6.js deleted file mode 100644 index dbb258b66..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A2_T6.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.8_A2_T6; -* @section: 15.10.2.8; -* @assertion: The form (?! Disjunction ) specifies a zero-width negative lookahead. -* In order for it to succeed, the pattern inside Disjunction must fail to match at the current position. -* The current position is not advanced before matching the sequel; -* @description: Execute /(\.(?!com|org)|\/)/.exec("ah.info") and check results; -*/ - -__executed = /(\.(?!com|org)|\/)/.exec("ah.info"); - -__expected = ['.', '.']; -__expected.index = 2; -__expected.input = "ah.info"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /(\\.(?!com|org)|\\/)/.exec("ah.info"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /(\\.(?!com|org)|\\/)/.exec("ah.info"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /(\\.(?!com|org)|\\/)/.exec("ah.info"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /(\\.(?!com|org)|\\/)/.exec("ah.info"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A2_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A2_T7.js deleted file mode 100644 index d7298e99d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A2_T7.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.8_A2_T7; -* @section: 15.10.2.8; -* @assertion: The form (?! Disjunction ) specifies a zero-width negative lookahead. -* In order for it to succeed, the pattern inside Disjunction must fail to match at the current position. -* The current position is not advanced before matching the sequel; -* @description: Execute /(\.(?!com|org)|\/)/.exec("ah/info") and check results; -*/ - -__executed = /(\.(?!com|org)|\/)/.exec("ah/info"); - -__expected = ['/', '/']; -__expected.index = 2; -__expected.input = "ah/info"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /(\\.(?!com|org)|\\/)/.exec("ah/info"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /(\\.(?!com|org)|\\/)/.exec("ah/info"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /(\\.(?!com|org)|\\/)/.exec("ah/info"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /(\\.(?!com|org)|\\/)/.exec("ah/info"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A2_T8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A2_T8.js deleted file mode 100644 index d35180ef8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A2_T8.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.8_A2_T8; -* @section: 15.10.2.8; -* @assertion: The form (?! Disjunction ) specifies a zero-width negative lookahead. -* In order for it to succeed, the pattern inside Disjunction must fail to match at the current position. -* The current position is not advanced before matching the sequel; -* @description: Execute /(\.(?!com|org)|\/)/.test("ah.com") and check results; -*/ - -__executed = /(\.(?!com|org)|\/)/.test("ah.com"); - -//CHECK#1 -if (__executed) { - $ERROR('#1: /(\\.(?!com|org)|\\/)/.test("ah.com") === false'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A2_T9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A2_T9.js deleted file mode 100644 index b02a88aea..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A2_T9.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.8_A2_T9; -* @section: 15.10.2.8; -* @assertion: The form (?! Disjunction ) specifies a zero-width negative lookahead. -* In order for it to succeed, the pattern inside Disjunction must fail to match at the current position. -* The current position is not advanced before matching the sequel; -* @description: Execute /(?!a|b)|c/.exec("") and check results; -*/ - -__executed = /(?!a|b)|c/.exec(""); - -__expected = [""]; -__expected.index = 0; -__expected.input = ""; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /(?!a|b)|c/.exec(""); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /(?!a|b)|c/.exec(""); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /(?!a|b)|c/.exec(""); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /(?!a|b)|c/.exec(""); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T1.js deleted file mode 100644 index 93d875924..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T1.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.8_A3_T1; -* @section: 15.10.2.8; -* @assertion: Parentheses of the form ( Disjunction ) serve both to group the components of the Disjunction pattern together and to save the result of the match. -* The result can be used either in a backreference (\ followed by a nonzero decimal number), -* referenced in a replace string, -* or returned as part of an array from the regular expression matching function; -* @description: Execute /([Jj]ava([Ss]cript)?)\sis\s(fun\w*)/.exec("Learning javaScript is funny, really") and check results; -*/ - -__executed = /([Jj]ava([Ss]cript)?)\sis\s(fun\w*)/.exec("Learning javaScript is funny, really"); - -__expected = ["javaScript is funny","javaScript","Script","funny"]; -__expected.index = 9; -__expected.input = "Learning javaScript is funny, really"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /([Jj]ava([Ss]cript)?)\\sis\\s(fun\\w*)/.exec("Learning javaScript is funny, really"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /([Jj]ava([Ss]cript)?)\\sis\\s(fun\\w*)/.exec("Learning javaScript is funny, really"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /([Jj]ava([Ss]cript)?)\\sis\\s(fun\\w*)/.exec("Learning javaScript is funny, really"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /([Jj]ava([Ss]cript)?)\\sis\\s(fun\\w*)/.exec("Learning javaScript is funny, really"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T10.js deleted file mode 100644 index a276df8ed..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T10.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.8_A3_T10; -* @section: 15.10.2.8; -* @assertion: Parentheses of the form ( Disjunction ) serve both to group the components of the Disjunction pattern together and to save the result of the match. -* The result can be used either in a backreference (\ followed by a nonzero decimal number), -* referenced in a replace string, -* or returned as part of an array from the regular expression matching function; -* @description: Execute /(\d{3})(\d{3})\1\2/.exec("123456123456") and check results; -*/ - -__executed = /(\d{3})(\d{3})\1\2/.exec("123456123456"); - -__expected = ["123456123456","123","456"]; -__expected.index = 0; -__expected.input = "123456123456"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /(\\d{3})(\\d{3})\\1\\2/.exec("123456123456"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /(\\d{3})(\\d{3})\\1\\2/.exec("123456123456"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /(\\d{3})(\\d{3})\\1\\2/.exec("123456123456"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /(\\d{3})(\\d{3})\\1\\2/.exec("123456123456"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T11.js deleted file mode 100644 index e05083469..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T11.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.8_A3_T11; -* @section: 15.10.2.8; -* @assertion: Parentheses of the form ( Disjunction ) serve both to group the components of the Disjunction pattern together and to save the result of the match. -* The result can be used either in a backreference (\ followed by a nonzero decimal number), -* referenced in a replace string, -* or returned as part of an array from the regular expression matching function; -* @description: Execute /a(..(..)..)/.exec("abcdefgh") and check results; -*/ - -__executed = /a(..(..)..)/.exec("abcdefgh"); - -__expected = ["abcdefg","bcdefg","de"]; -__expected.index = 0; -__expected.input = "abcdefgh"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /a(..(..)..)/.exec("abcdefgh"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /a(..(..)..)/.exec("abcdefgh"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /a(..(..)..)/.exec("abcdefgh"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /a(..(..)..)/.exec("abcdefgh"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T12.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T12.js deleted file mode 100644 index 3303d55c6..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T12.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.8_A3_T12; -* @section: 15.10.2.8; -* @assertion: Parentheses of the form ( Disjunction ) serve both to group the components of the Disjunction pattern together and to save the result of the match. -* The result can be used either in a backreference (\ followed by a nonzero decimal number), -* referenced in a replace string, -* or returned as part of an array from the regular expression matching function; -* @description: Execute /(a(b(c)))(d(e(f)))/.exec("xabcdefg") and check results; -*/ - -__executed = /(a(b(c)))(d(e(f)))/.exec("xabcdefg"); - -__expected = ["abcdef","abc","bc","c","def","ef","f"]; -__expected.index = 1; -__expected.input = "xabcdefg"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /(a(b(c)))(d(e(f)))/.exec("xabcdefg"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /(a(b(c)))(d(e(f)))/.exec("xabcdefg"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /(a(b(c)))(d(e(f)))/.exec("xabcdefg"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /(a(b(c)))(d(e(f)))/.exec("xabcdefg"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T13.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T13.js deleted file mode 100644 index fd42619fb..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T13.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.8_A3_T13; -* @section: 15.10.2.8; -* @assertion: Parentheses of the form ( Disjunction ) serve both to group the components of the Disjunction pattern together and to save the result of the match. -* The result can be used either in a backreference (\ followed by a nonzero decimal number), -* referenced in a replace string, -* or returned as part of an array from the regular expression matching function; -* @description: Execute /(a(b(c)))(d(e(f)))\2\5/.exec("xabcdefbcefg") and check results; -*/ - -__executed = /(a(b(c)))(d(e(f)))\2\5/.exec("xabcdefbcefg"); - -__expected = ["abcdefbcef","abc","bc","c","def","ef","f"]; -__expected.index = 1; -__expected.input = "xabcdefbcefg"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /(a(b(c)))(d(e(f)))\\2\\5/.exec("xabcdefbcefg"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /(a(b(c)))(d(e(f)))\\2\\5/.exec("xabcdefbcefg"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /(a(b(c)))(d(e(f)))\\2\\5/.exec("xabcdefbcefg"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /(a(b(c)))(d(e(f)))\\2\\5/.exec("xabcdefbcefg"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T14.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T14.js deleted file mode 100644 index 750320073..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T14.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.8_A3_T14; -* @section: 15.10.2.8; -* @assertion: Parentheses of the form ( Disjunction ) serve both to group the components of the Disjunction pattern together and to save the result of the match. -* The result can be used either in a backreference (\ followed by a nonzero decimal number), -* referenced in a replace string, -* or returned as part of an array from the regular expression matching function; -* @description: Execute /a(.?)b\1c\1d\1/.exec("abcd") and check results; -*/ - -__executed = /a(.?)b\1c\1d\1/.exec("abcd"); - -__expected = ["abcd",""]; -__expected.index = 0; -__expected.input = "abcd"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /a(.?)b\\1c\\1d\\1/.exec("abcd"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /a(.?)b\\1c\\1d\\1/.exec("abcd"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /a(.?)b\\1c\\1d\\1/.exec("abcd"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /a(.?)b\\1c\\1d\\1/.exec("abcd"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T15.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T15.js deleted file mode 100644 index c7c1766f8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T15.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.8_A3_T15; -* @section: 15.10.2.8; -* @assertion: Parentheses of the form ( Disjunction ) serve both to group the components of the Disjunction pattern together and to save the result of the match. -* The result can be used either in a backreference (\ followed by a nonzero decimal number), -* referenced in a replace string, -* or returned as part of an array from the regular expression matching function; -* @description: see bug http:bugzilla.mozilla.org/show_bug.cgi?id=119909; -*/ - -__strOriginal = "hello"; -__openParen = '('; -__closeParen = ')'; -__pattern = ''; - numParens = 200; - -for (var i=0; i((.*\n?)*?)<\/body>/i.exec(__html); - -__expected = [__body, '\n

Kibology for all

\n

All for Kibology

\n', '

All for Kibology

\n']; -__expected.index = 7; -__expected.input = __html; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /((.*\\n?)*?)<\\/body>/i.exec(__html); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /((.*\\n?)*?)<\\/body>/i.exec(__html); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /((.*\\n?)*?)<\\/body>/i.exec(__html); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /((.*\\n?)*?)<\\/body>/i.exec(__html); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T18.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T18.js deleted file mode 100644 index 3de0ee20e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T18.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.8_A3_T18; -* @section: 15.10.2.8; -* @assertion: Parentheses of the form ( Disjunction ) serve both to group the components of the Disjunction pattern together and to save the result of the match. -* The result can be used either in a backreference (\ followed by a nonzero decimal number), -* referenced in a replace string, -* or returned as part of an array from the regular expression matching function; -* @description: see bug http:bugzilla.mozilla.org/show_bug.cgi?id=169534; -*/ - -__replaced = "To sign up click |here|https:www.xxxx.org/subscribe.htm|".replace(/(\|)([\w\x81-\xff ]*)(\|)([\/a-z][\w:\/\.]*\.[a-z]{3,4})(\|)/ig, '$2'); - -__expected = 'To sign up click here'; - -//CHECK#1 -if (__replaced !== __expected) { - $ERROR('#1: __replaced = "To sign up click |here|https:www.xxxx.org/subscribe.htm|".replace(/(\\|)([\\w\\x81-\\xff ]*)(\\|)([\\/a-z][\\w:\\/\\.]*\\.[a-z]{3,4})(\\|)/ig, \'$2\'); __replaced === ' + __expected + '. Actual: ' + __replaced); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T19.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T19.js deleted file mode 100644 index 26c4b60df..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T19.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.8_A3_T19; -* @section: 15.10.2.8; -* @assertion: Parentheses of the form ( Disjunction ) serve both to group the components of the Disjunction pattern together and to save the result of the match. -* The result can be used either in a backreference (\ followed by a nonzero decimal number), -* referenced in a replace string, -* or returned as part of an array from the regular expression matching function; -* @description: Execute /([\S]+([ \t]+[\S]+)*)[ \t]*=[ \t]*[\S]+/.exec("Course_Creator = Test") and check results; -*/ - -__executed = /([\S]+([ \t]+[\S]+)*)[ \t]*=[ \t]*[\S]+/.exec("Course_Creator = Test"); - -__expected = ["Course_Creator = Test","Course_Creator",undefined]; -__expected.index = 0; -__expected.input = "Course_Creator = Test"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /([\\S]+([ \\t]+[\\S]+)*)[ \\t]*=[ \\t]*[\\S]+/.exec("Course_Creator = Test"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /([\\S]+([ \\t]+[\\S]+)*)[ \\t]*=[ \\t]*[\\S]+/.exec("Course_Creator = Test"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /([\\S]+([ \\t]+[\\S]+)*)[ \\t]*=[ \\t]*[\\S]+/.exec("Course_Creator = Test"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /([\\S]+([ \\t]+[\\S]+)*)[ \\t]*=[ \\t]*[\\S]+/.exec("Course_Creator = Test"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T2.js deleted file mode 100644 index b160cde2d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T2.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.8_A3_T2; -* @section: 15.10.2.8; -* @assertion: Parentheses of the form ( Disjunction ) serve both to group the components of the Disjunction pattern together and to save the result of the match. -* The result can be used either in a backreference (\ followed by a nonzero decimal number), -* referenced in a replace string, -* or returned as part of an array from the regular expression matching function; -* @description: Execute /([Jj]ava([Ss]cript)?)\sis\s(fun\w*)/.exec("Developing with Java is fun, try it") and check results; -*/ - -__executed = /([Jj]ava([Ss]cript)?)\sis\s(fun\w*)/.exec("Developing with Java is fun, try it"); - -__expected = ["Java is fun","Java",undefined,"fun"]; -__expected.index = 16; -__expected.input = "Developing with Java is fun, try it"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /([Jj]ava([Ss]cript)?)\\sis\\s(fun\\w*)/.exec("Developing with Java is fun, try it"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /([Jj]ava([Ss]cript)?)\\sis\\s(fun\\w*)/.exec("Developing with Java is fun, try it"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /([Jj]ava([Ss]cript)?)\\sis\\s(fun\\w*)/.exec("Developing with Java is fun, try it"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /([Jj]ava([Ss]cript)?)\\sis\\s(fun\\w*)/.exec("Developing with Java is fun, try it"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T20.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T20.js deleted file mode 100644 index b56b3fa7f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T20.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.8_A3_T20; -* @section: 15.10.2.8; -* @assertion: Parentheses of the form ( Disjunction ) serve both to group the components of the Disjunction pattern together and to save the result of the match. -* The result can be used either in a backreference (\ followed by a nonzero decimal number), -* referenced in a replace string, -* or returned as part of an array from the regular expression matching function; -* @description: Execute /^(A)?(A.*)$/.exec("AAA") and check results; -*/ - -__executed = /^(A)?(A.*)$/.exec("AAA"); - -__expected = ["AAA","A","AA"]; -__expected.index = 0; -__expected.input = "AAA"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /^(A)?(A.*)$/.exec("AAA"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /^(A)?(A.*)$/.exec("AAA"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /^(A)?(A.*)$/.exec("AAA"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /^(A)?(A.*)$/.exec("AAA"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T21.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T21.js deleted file mode 100644 index d56face32..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T21.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.8_A3_T21; -* @section: 15.10.2.8; -* @assertion: Parentheses of the form ( Disjunction ) serve both to group the components of the Disjunction pattern together and to save the result of the match. -* The result can be used either in a backreference (\ followed by a nonzero decimal number), -* referenced in a replace string, -* or returned as part of an array from the regular expression matching function; -* @description: Execute /^(A)?(A.*)$/.exec("AA") and check results; -*/ - -__executed = /^(A)?(A.*)$/.exec("AA"); - -__expected = ["AA","A","A"]; -__expected.index = 0; -__expected.input = "AA"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /^(A)?(A.*)$/.exec("AA"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /^(A)?(A.*)$/.exec("AA"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /^(A)?(A.*)$/.exec("AA"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /^(A)?(A.*)$/.exec("AA"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T22.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T22.js deleted file mode 100644 index 0dde3371a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T22.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.8_A3_T22; -* @section: 15.10.2.8; -* @assertion: Parentheses of the form ( Disjunction ) serve both to group the components of the Disjunction pattern together and to save the result of the match. -* The result can be used either in a backreference (\ followed by a nonzero decimal number), -* referenced in a replace string, -* or returned as part of an array from the regular expression matching function; -* @description: Execute /^(A)?(A.*)$/.exec("A") and check results; -*/ - -__executed = /^(A)?(A.*)$/.exec("A"); - -__expected = ["A",undefined,"A"]; -__expected.index = 0; -__expected.input = "A"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /^(A)?(A.*)$/.exec("A"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /^(A)?(A.*)$/.exec("A"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /^(A)?(A.*)$/.exec("A"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /^(A)?(A.*)$/.exec("A"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T23.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T23.js deleted file mode 100644 index e4cdae81c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T23.js +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.8_A3_T23; -* @section: 15.10.2.8; -* @assertion: Parentheses of the form ( Disjunction ) serve both to group the components of the Disjunction pattern together and to save the result of the match. -* The result can be used either in a backreference (\ followed by a nonzero decimal number), -* referenced in a replace string, -* or returned as part of an array from the regular expression matching function; -* @description: Execute /(A)?(A.*)/.exec("zxcasd;fl\\\ ^AAAaaAAaaaf;lrlrzs") and check results; -*/ - -__string = "zxcasd;fl\\\ ^AAAaaAAaaaf;lrlrzs"; - -__executed = /(A)?(A.*)/.exec(__string); - -__expected = ["AAAaaAAaaaf;lrlrzs","A","AAaaAAaaaf;lrlrzs"]; -__expected.index = 13; -__expected.input = __string; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __string = "zxcasd;fl\\\ ^AAAaaAAaaaf;lrlrzs"; __executed = /(A)?(A.*)/.exec(__string); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __string = "zxcasd;fl\\\ ^AAAaaAAaaaf;lrlrzs"; __executed = /(A)?(A.*)/.exec(__string); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __string = "zxcasd;fl\\\ ^AAAaaAAaaaf;lrlrzs"; __executed = /(A)?(A.*)/.exec(__string); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __string = "zxcasd;fl\\\ ^AAAaaAAaaaf;lrlrzs"; __executed = /(A)?(A.*)/.exec(__string); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T24.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T24.js deleted file mode 100644 index 0eec3eff1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T24.js +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.8_A3_T24; -* @section: 15.10.2.8; -* @assertion: Parentheses of the form ( Disjunction ) serve both to group the components of the Disjunction pattern together and to save the result of the match. -* The result can be used either in a backreference (\ followed by a nonzero decimal number), -* referenced in a replace string, -* or returned as part of an array from the regular expression matching function; -* @description: Execute /(A)?(A.*)/.exec("zxcasd;fl\\\ ^AAaaAAaaaf;lrlrzs") and check results; -*/ - -__string = "zxcasd;fl\\\ ^AAaaAAaaaf;lrlrzs"; - -__executed = /(A)?(A.*)/.exec(__string); - -__expected = ["AAaaAAaaaf;lrlrzs","A","AaaAAaaaf;lrlrzs"]; -__expected.index = 13; -__expected.input = __string; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __string = "zxcasd;fl\\\ ^AAaaAAaaaf;lrlrzs"; __executed = /(A)?(A.*)/.exec(__string); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __string = "zxcasd;fl\\\ ^AAaaAAaaaf;lrlrzs"; __executed = /(A)?(A.*)/.exec(__string); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __string = "zxcasd;fl\\\ ^AAaaAAaaaf;lrlrzs"; __executed = /(A)?(A.*)/.exec(__string); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __string = "zxcasd;fl\\\ ^AAaaAAaaaf;lrlrzs"; __executed = /(A)?(A.*)/.exec(__string); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T25.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T25.js deleted file mode 100644 index 384eda590..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T25.js +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.8_A3_T25; -* @section: 15.10.2.8; -* @assertion: Parentheses of the form ( Disjunction ) serve both to group the components of the Disjunction pattern together and to save the result of the match. -* The result can be used either in a backreference (\ followed by a nonzero decimal number), -* referenced in a replace string, -* or returned as part of an array from the regular expression matching function; -* @description: Execute /(A)?(A.*)/.exec("zxcasd;fl\\\ ^AaaAAaaaf;lrlrzs") and check results; -*/ - -__string = "zxcasd;fl\\\ ^AaaAAaaaf;lrlrzs"; - -__executed = /(A)?(A.*)/.exec(__string); - -__expected = ["AaaAAaaaf;lrlrzs",undefined,"AaaAAaaaf;lrlrzs"]; -__expected.index = 13; -__expected.input = __string; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __string = "zxcasd;fl\\\ ^AaaAAaaaf;lrlrzs"; __executed = /(A)?(A.*)/.exec(__string); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __string = "zxcasd;fl\\\ ^AaaAAaaaf;lrlrzs"; __executed = /(A)?(A.*)/.exec(__string); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __string = "zxcasd;fl\\\ ^AaaAAaaaf;lrlrzs"; __executed = /(A)?(A.*)/.exec(__string); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __string = "zxcasd;fl\\\ ^AaaAAaaaf;lrlrzs"; __executed = /(A)?(A.*)/.exec(__string); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T26.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T26.js deleted file mode 100644 index 051d7dd47..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T26.js +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.8_A3_T26; -* @section: 15.10.2.8; -* @assertion: Parentheses of the form ( Disjunction ) serve both to group the components of the Disjunction pattern together and to save the result of the match. -* The result can be used either in a backreference (\ followed by a nonzero decimal number), -* referenced in a replace string, -* or returned as part of an array from the regular expression matching function; -* @description: Execute /(a)?a/.exec("a") and check results; -*/ - -__string = "a"; - -__executed = /(a)?a/.exec(__string); - -__expected = ["a",undefined]; -__expected.index = 0; -__expected.input = __string; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __string = "a"; __executed = /(a)?a/.exec(__string); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __string = "a"; __executed = /(a)?a/.exec(__string); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __string = "a"; __executed = /(a)?a/.exec(__string); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __string = "a"; __executed = /(a)?a/.exec(__string); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T27.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T27.js deleted file mode 100644 index f051ad939..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T27.js +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.8_A3_T27; -* @section: 15.10.2.8; -* @assertion: Parentheses of the form ( Disjunction ) serve both to group the components of the Disjunction pattern together and to save the result of the match. -* The result can be used either in a backreference (\ followed by a nonzero decimal number), -* referenced in a replace string, -* or returned as part of an array from the regular expression matching function; -* @description: Execute /a|(b)/.exec("a") and check results; -*/ - -__string = "a"; - -__executed = /a|(b)/.exec(__string); - -__expected = ["a",undefined]; -__expected.index = 0; -__expected.input = __string; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __string = "a"; __executed = /a|(b)/.exec(__string); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __string = "a"; __executed = /a|(b)/.exec(__string); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __string = "a"; __executed = /a|(b)/.exec(__string); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __string = "a"; __executed = /a|(b)/.exec(__string); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T28.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T28.js deleted file mode 100644 index 4a785afad..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T28.js +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.8_A3_T28; -* @section: 15.10.2.8; -* @assertion: Parentheses of the form ( Disjunction ) serve both to group the components of the Disjunction pattern together and to save the result of the match. -* The result can be used either in a backreference (\ followed by a nonzero decimal number), -* referenced in a replace string, -* or returned as part of an array from the regular expression matching function; -* @description: Execute /(a)?(a)/.exec("a") and check results; -*/ - -__string = "a"; - -__executed = /(a)?(a)/.exec(__string); - -__expected = ['a', undefined, 'a']; -__expected.index = 0; -__expected.input = __string; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __string = "a"; __executed = /(a)?(a)/.exec(__string); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __string = "a"; __executed = /(a)?(a)/.exec(__string); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __string = "a"; __executed = /(a)?(a)/.exec(__string); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __string = "a"; __executed = /(a)?(a)/.exec(__string); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T29.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T29.js deleted file mode 100644 index d316dd43e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T29.js +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.8_A3_T29; -* @section: 15.10.2.8; -* @assertion: Parentheses of the form ( Disjunction ) serve both to group the components of the Disjunction pattern together and to save the result of the match. -* The result can be used either in a backreference (\ followed by a nonzero decimal number), -* referenced in a replace string, -* or returned as part of an array from the regular expression matching function; -* @description: See bug http:bugzilla.mozilla.org/show_bug.cgi?id=165353; -*/ - -__string = "a"; - -__executed = /^([a-z]+)*[a-z]$/.exec(__string); - -__expected = ['a', undefined]; -__expected.index = 0; -__expected.input = __string; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __string = "a"; __executed = /^([a-z]+)*[a-z]$/.exec(__string); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __string = "a"; __executed = /^([a-z]+)*[a-z]$/.exec(__string); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __string = "a"; __executed = /^([a-z]+)*[a-z]$/.exec(__string); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __string = "a"; __executed = /^([a-z]+)*[a-z]$/.exec(__string); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T3.js deleted file mode 100644 index be5d9f5b9..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.8_A3_T3; -* @section: 15.10.2.8; -* @assertion: Parentheses of the form ( Disjunction ) serve both to group the components of the Disjunction pattern together and to save the result of the match. -* The result can be used either in a backreference (\ followed by a nonzero decimal number), -* referenced in a replace string, -* or returned as part of an array from the regular expression matching function; -* @description: Execute /([Jj]ava([Ss]cript)?)\sis\s(fun\w*)/.test("Developing with JavaScript is dangerous, do not try it without assistance") and check results; -*/ - -__executed = /([Jj]ava([Ss]cript)?)\sis\s(fun\w*)/.test("Developing with JavaScript is dangerous, do not try it without assistance"); - -//CHECK#1 -if (__executed) { - $ERROR('#1: /([Jj]ava([Ss]cript)?)\\sis\\s(fun\\w*)/.test("Developing with JavaScript is dangerous, do not try it without assistance") === false'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T30.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T30.js deleted file mode 100644 index 4a94974a2..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T30.js +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.8_A3_T30; -* @section: 15.10.2.8; -* @assertion: Parentheses of the form ( Disjunction ) serve both to group the components of the Disjunction pattern together and to save the result of the match. -* The result can be used either in a backreference (\ followed by a nonzero decimal number), -* referenced in a replace string, -* or returned as part of an array from the regular expression matching function; -* @description: See bug http:bugzilla.mozilla.org/show_bug.cgi?id=165353; -*/ - -__string = "ab"; - -__executed = /^([a-z]+)*[a-z]$/.exec(__string); - -__expected = ['ab', "a"]; -__expected.index = 0; -__expected.input = __string; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __string = "ab"; __executed = /^([a-z]+)*[a-z]$/.exec(__string); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __string = "ab"; __executed = /^([a-z]+)*[a-z]$/.exec(__string); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __string = "ab"; __executed = /^([a-z]+)*[a-z]$/.exec(__string); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __string = "ab"; __executed = /^([a-z]+)*[a-z]$/.exec(__string); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T31.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T31.js deleted file mode 100644 index 827f3a036..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T31.js +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.8_A3_T31; -* @section: 15.10.2.8; -* @assertion: Parentheses of the form ( Disjunction ) serve both to group the components of the Disjunction pattern together and to save the result of the match. -* The result can be used either in a backreference (\ followed by a nonzero decimal number), -* referenced in a replace string, -* or returned as part of an array from the regular expression matching function; -* @description: See bug http:bugzilla.mozilla.org/show_bug.cgi?id=165353; -*/ - -__string = "abc"; - -__executed = /^([a-z]+)*[a-z]$/.exec(__string); - -__expected = ['abc', "ab"]; -__expected.index = 0; -__expected.input = __string; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __string = "abc"; __executed = /^([a-z]+)*[a-z]$/.exec(__string); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __string = "abc"; __executed = /^([a-z]+)*[a-z]$/.exec(__string); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __string = "abc"; __executed = /^([a-z]+)*[a-z]$/.exec(__string); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __string = "abc"; __executed = /^([a-z]+)*[a-z]$/.exec(__string); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T32.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T32.js deleted file mode 100644 index f6be4b9d8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T32.js +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.8_A3_T32; -* @section: 15.10.2.8; -* @assertion: Parentheses of the form ( Disjunction ) serve both to group the components of the Disjunction pattern together and to save the result of the match. -* The result can be used either in a backreference (\ followed by a nonzero decimal number), -* referenced in a replace string, -* or returned as part of an array from the regular expression matching function; -* @description: See bug http:bugzilla.mozilla.org/show_bug.cgi?id=165353; -*/ - -__string = "www.netscape.com"; - -__executed = /^(([a-z]+)*[a-z]\.)+[a-z]{2,}$/.exec(__string); - -__expected = ['www.netscape.com', 'netscape.', 'netscap']; -__expected.index = 0; -__expected.input = __string; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __string = "www.netscape.com"; __executed = /^(([a-z]+)*[a-z]\\.)+[a-z]{2,}$/.exec(__string); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __string = "www.netscape.com"; __executed = /^(([a-z]+)*[a-z]\\.)+[a-z]{2,}$/.exec(__string); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __string = "www.netscape.com"; __executed = /^(([a-z]+)*[a-z]\\.)+[a-z]{2,}$/.exec(__string); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __string = "www.netscape.com"; __executed = /^(([a-z]+)*[a-z]\\.)+[a-z]{2,}$/.exec(__string); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T33.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T33.js deleted file mode 100644 index 01ce303a8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T33.js +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.8_A3_T33; -* @section: 15.10.2.8; -* @assertion: Parentheses of the form ( Disjunction ) serve both to group the components of the Disjunction pattern together and to save the result of the match. -* The result can be used either in a backreference (\ followed by a nonzero decimal number), -* referenced in a replace string, -* or returned as part of an array from the regular expression matching function; -* @description: See bug http:bugzilla.mozilla.org/show_bug.cgi?id=165353; -*/ - -__string = "www.netscape.com"; - -__executed = /^(([a-z]+)*([a-z])\.)+[a-z]{2,}$/.exec(__string); - -__expected = ['www.netscape.com', 'netscape.', 'netscap', 'e']; -__expected.index = 0; -__expected.input = __string; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __string = "www.netscape.com"; __executed = /^(([a-z]+)*([a-z])\\.)+[a-z]{2,}$/.exec(__string); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __string = "www.netscape.com"; __executed = /^(([a-z]+)*([a-z])\\.)+[a-z]{2,}$/.exec(__string); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __string = "www.netscape.com"; __executed = /^(([a-z]+)*([a-z])\\.)+[a-z]{2,}$/.exec(__string); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __string = "www.netscape.com"; __executed = /^(([a-z]+)*([a-z])\\.)+[a-z]{2,}$/.exec(__string); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T4.js deleted file mode 100644 index 269581db4..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T4.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.8_A3_T4; -* @section: 15.10.2.8; -* @assertion: Parentheses of the form ( Disjunction ) serve both to group the components of the Disjunction pattern together and to save the result of the match. -* The result can be used either in a backreference (\ followed by a nonzero decimal number), -* referenced in a replace string, -* or returned as part of an array from the regular expression matching function; -* @description: Execute /(abc)/.exec("abc") and check results; -*/ - -__executed = /(abc)/.exec("abc"); - -__expected = ["abc","abc"]; -__expected.index = 0; -__expected.input = "abc"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /(abc)/.exec("abc"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /(abc)/.exec("abc"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /(abc)/.exec("abc"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /(abc)/.exec("abc"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T5.js deleted file mode 100644 index 949092b7b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T5.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.8_A3_T5; -* @section: 15.10.2.8; -* @assertion: Parentheses of the form ( Disjunction ) serve both to group the components of the Disjunction pattern together and to save the result of the match. -* The result can be used either in a backreference (\ followed by a nonzero decimal number), -* referenced in a replace string, -* or returned as part of an array from the regular expression matching function; -* @description: Execute /a(bc)d(ef)g/.exec("abcdefg") and check results; -*/ - -__executed = /a(bc)d(ef)g/.exec("abcdefg"); - -__expected = ["abcdefg","bc","ef"]; -__expected.index = 0; -__expected.input = "abcdefg"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /a(bc)d(ef)g/.exec("abcdefg"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /a(bc)d(ef)g/.exec("abcdefg"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /a(bc)d(ef)g/.exec("abcdefg"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /a(bc)d(ef)g/.exec("abcdefg"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T6.js deleted file mode 100644 index 866a7e1ce..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T6.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.8_A3_T6; -* @section: 15.10.2.8; -* @assertion: Parentheses of the form ( Disjunction ) serve both to group the components of the Disjunction pattern together and to save the result of the match. -* The result can be used either in a backreference (\ followed by a nonzero decimal number), -* referenced in a replace string, -* or returned as part of an array from the regular expression matching function; -* @description: Execute /(.{3})(.{4})/.exec("abcdefgh") and check results; -*/ - -__executed = /(.{3})(.{4})/.exec("abcdefgh"); - -__expected = ["abcdefg","abc","defg"]; -__expected.index = 0; -__expected.input = "abcdefgh"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /(.{3})(.{4})/.exec("abcdefgh"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /(.{3})(.{4})/.exec("abcdefgh"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /(.{3})(.{4})/.exec("abcdefgh"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /(.{3})(.{4})/.exec("abcdefgh"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T7.js deleted file mode 100644 index 09c19918d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T7.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.8_A3_T7; -* @section: 15.10.2.8; -* @assertion: Parentheses of the form ( Disjunction ) serve both to group the components of the Disjunction pattern together and to save the result of the match. -* The result can be used either in a backreference (\ followed by a nonzero decimal number), -* referenced in a replace string, -* or returned as part of an array from the regular expression matching function; -* @description: Execute /(aa)bcd\1/.exec("aabcdaabcd") and check results; -*/ - -__executed = /(aa)bcd\1/.exec("aabcdaabcd"); - -__expected = ["aabcdaa","aa"]; -__expected.index = 0; -__expected.input = "aabcdaabcd"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /(aa)bcd\\1/.exec("aabcdaabcd"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /(aa)bcd\\1/.exec("aabcdaabcd"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /(aa)bcd\\1/.exec("aabcdaabcd"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /(aa)bcd\\1/.exec("aabcdaabcd"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T8.js deleted file mode 100644 index 3ec86a6cb..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T8.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.8_A3_T8; -* @section: 15.10.2.8; -* @assertion: Parentheses of the form ( Disjunction ) serve both to group the components of the Disjunction pattern together and to save the result of the match. -* The result can be used either in a backreference (\ followed by a nonzero decimal number), -* referenced in a replace string, -* or returned as part of an array from the regular expression matching function; -* @description: Execute /(aa).+\1/.exec("aabcdaabcd") and check results; -*/ - -__executed = /(aa).+\1/.exec("aabcdaabcd"); - -__expected = ["aabcdaa","aa"]; -__expected.index = 0; -__expected.input = "aabcdaabcd"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /(aa).+\\1/.exec("aabcdaabcd"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /(aa).+\\1/.exec("aabcdaabcd"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /(aa).+\\1/.exec("aabcdaabcd"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /(aa).+\\1/.exec("aabcdaabcd"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T9.js deleted file mode 100644 index bbf334842..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A3_T9.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.8_A3_T9; -* @section: 15.10.2.8; -* @assertion: Parentheses of the form ( Disjunction ) serve both to group the components of the Disjunction pattern together and to save the result of the match. -* The result can be used either in a backreference (\ followed by a nonzero decimal number), -* referenced in a replace string, -* or returned as part of an array from the regular expression matching function; -* @description: Execute /(.{2}).+\1/.exec("aabcdaabcd") and check results; -*/ - -__executed = /(.{2}).+\1/.exec("aabcdaabcd"); - -__expected = ["aabcdaa","aa"]; -__expected.index = 0; -__expected.input = "aabcdaabcd"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /(.{2}).+\\1/.exec("aabcdaabcd"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /(.{2}).+\\1/.exec("aabcdaabcd"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /(.{2}).+\\1/.exec("aabcdaabcd"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /(.{2}).+\\1/.exec("aabcdaabcd"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A4_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A4_T1.js deleted file mode 100644 index 897d8a33c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A4_T1.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.8_A4_T1; -* @section: 15.10.2.8; -* @assertion: The production Atom :: . evaluates as follows: -* i) Let A be the set of all characters except the four line terminator characters , , , or -* ii) Call CharacterSetMatcher(A, false) and return its Matcher result; -* @description: Execute /ab.de/.exec("abcde") and check results; -*/ - -__string = "abcde"; -__executed = /ab.de/.exec(__string); - -__expected = ["abcde"]; -__expected.index = 0; -__expected.input = __string; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __string = "abcde"; __executed = /ab.de/.exec(__string); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __string = "abcde"; __executed = /ab.de/.exec(__string); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __string = "abcde"; __executed = /ab.de/.exec(__string); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __string = "abcde"; __executed = /ab.de/.exec(__string); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A4_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A4_T2.js deleted file mode 100644 index 64aa3e711..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A4_T2.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.8_A4_T2; -* @section: 15.10.2.8; -* @assertion: The production Atom :: . evaluates as follows: -* i) Let A be the set of all characters except the four line terminator characters , , , or -* ii) Call CharacterSetMatcher(A, false) and return its Matcher result; -* @description: Execute /.+/.exec("line 1\nline 2") and check results; -*/ - -__string = "line 1\nline 2"; -__executed = /.+/.exec(__string); - -__expected = ["line 1"]; -__expected.index = 0; -__expected.input = __string; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __string = "line 1\nline 2"; __executed = /.+/.exec(__string); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __string = "line 1\nline 2"; __executed = /.+/.exec(__string); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __string = "line 1\nline 2"; __executed = /.+/.exec(__string); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __string = "line 1\nline 2"; __executed = /.+/.exec(__string); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A4_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A4_T3.js deleted file mode 100644 index 4a7095ffb..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A4_T3.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.8_A4_T3; -* @section: 15.10.2.8; -* @assertion: The production Atom :: . evaluates as follows: -* i) Let A be the set of all characters except the four line terminator characters , , , or -* ii) Call CharacterSetMatcher(A, false) and return its Matcher result; -* @description: Execute /.*a.* /.exec("this is a test") and check results; -*/ - -__string = "this is a test"; -__executed = /.*a.*/.exec(__string); - -__expected = ["this is a test"]; -__expected.index = 0; -__expected.input = __string; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __string = "this is a test"; __executed = /.*a.*/.exec(__string); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __string = "this is a test"; __executed = /.*a.*/.exec(__string); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __string = "this is a test"; __executed = /.*a.*/.exec(__string); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __string = "this is a test"; __executed = /.*a.*/.exec(__string); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A4_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A4_T4.js deleted file mode 100644 index 8c4e1eeb6..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A4_T4.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.8_A4_T4; -* @section: 15.10.2.8; -* @assertion: The production Atom :: . evaluates as follows: -* i) Let A be the set of all characters except the four line terminator characters , , , or -* ii) Call CharacterSetMatcher(A, false) and return its Matcher result; -* @description: Execute /.+/.exec("this is a *&^%$# test") and check results; -*/ - -__string = "this is a *&^%$# test"; -__executed = /.+/.exec(__string); - -__expected = ["this is a *&^%$# test"]; -__expected.index = 0; -__expected.input = __string; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __string = "this is a *&^%$# test"; __executed = /.+/.exec(__string); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __string = "this is a *&^%$# test"; __executed = /.+/.exec(__string); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __string = "this is a *&^%$# test"; __executed = /.+/.exec(__string); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __string = "this is a *&^%$# test"; __executed = /.+/.exec(__string); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A4_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A4_T5.js deleted file mode 100644 index 78bfa4690..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A4_T5.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.8_A4_T5; -* @section: 15.10.2.8; -* @assertion: The production Atom :: . evaluates as follows: -* i) Let A be the set of all characters except the four line terminator characters , , , or -* ii) Call CharacterSetMatcher(A, false) and return its Matcher result; -* @description: Execute /.+/.exec("....") and check results; -*/ - -__string = "...."; -__executed = /.+/.exec(__string); - -__expected = ["...."]; -__expected.index = 0; -__expected.input = __string; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __string = "...."; __executed = /.+/.exec(__string); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __string = "...."; __executed = /.+/.exec(__string); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __string = "...."; __executed = /.+/.exec(__string); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __string = "...."; __executed = /.+/.exec(__string); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A4_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A4_T6.js deleted file mode 100644 index 47037a2ec..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A4_T6.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.8_A4_T6; -* @section: 15.10.2.8; -* @assertion: The production Atom :: . evaluates as follows: -* i) Let A be the set of all characters except the four line terminator characters , , , or -* ii) Call CharacterSetMatcher(A, false) and return its Matcher result; -* @description: Execute /.+/.exec("abcdefghijklmnopqrstuvwxyz") and check results; -*/ - -__string = "abcdefghijklmnopqrstuvwxyz"; -__executed = /.+/.exec(__string); - -__expected = ["abcdefghijklmnopqrstuvwxyz"]; -__expected.index = 0; -__expected.input = __string; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __string = "abcdefghijklmnopqrstuvwxyz"; __executed = /.+/.exec(__string); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __string = "abcdefghijklmnopqrstuvwxyz"; __executed = /.+/.exec(__string); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __string = "abcdefghijklmnopqrstuvwxyz"; __executed = /.+/.exec(__string); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __string = "abcdefghijklmnopqrstuvwxyz"; __executed = /.+/.exec(__string); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A4_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A4_T7.js deleted file mode 100644 index a6bb35870..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A4_T7.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.8_A4_T7; -* @section: 15.10.2.8; -* @assertion: The production Atom :: . evaluates as follows: -* i) Let A be the set of all characters except the four line terminator characters , , , or -* ii) Call CharacterSetMatcher(A, false) and return its Matcher result; -* @description: Execute /.+/.exec("ABCDEFGHIJKLMNOPQRSTUVWXYZ") and check results; -*/ - -__string = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; -__executed = /.+/.exec(__string); - -__expected = ["ABCDEFGHIJKLMNOPQRSTUVWXYZ"]; -__expected.index = 0; -__expected.input = __string; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __string = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; __executed = /.+/.exec(__string); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __string = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; __executed = /.+/.exec(__string); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __string = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; __executed = /.+/.exec(__string); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __string = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; __executed = /.+/.exec(__string); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A4_T8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A4_T8.js deleted file mode 100644 index 11781ad4f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A4_T8.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.8_A4_T8; -* @section: 15.10.2.8; -* @assertion: The production Atom :: . evaluates as follows: -* i) Let A be the set of all characters except the four line terminator characters , , , or -* ii) Call CharacterSetMatcher(A, false) and return its Matcher result; -* @description: Execute /.+/.exec("`1234567890-=~!@#$%^&*()_+") and check results; -*/ - -__string = "`1234567890-=~!@#$%^&*()_+"; -__executed = /.+/.exec(__string); - -__expected = ["`1234567890-=~!@#$%^&*()_+"]; -__expected.index = 0; -__expected.input = __string; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __string = "`1234567890-=~!@#$%^&*()_+"; __executed = /.+/.exec(__string); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __string = "`1234567890-=~!@#$%^&*()_+"; __executed = /.+/.exec(__string); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __string = "`1234567890-=~!@#$%^&*()_+"; __executed = /.+/.exec(__string); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __string = "`1234567890-=~!@#$%^&*()_+"; __executed = /.+/.exec(__string); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A4_T9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A4_T9.js deleted file mode 100644 index d12241ddd..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A4_T9.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.8_A4_T9; -* @section: 15.10.2.8; -* @assertion: The production Atom :: . evaluates as follows: -* i) Let A be the set of all characters except the four line terminator characters , , , or -* ii) Call CharacterSetMatcher(A, false) and return its Matcher result; -* @description: Execute /.+/.exec("|\\[{]};:\"\',<>.?/") and check results; -*/ - -__string = "|\\[{]};:\"\',<>.?/"; -__executed = /.+/.exec(__string); - -__expected = ["|\\[{]};:\"\',<>.?/"]; -__expected.index = 0; -__expected.input = __string; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __string = "|\\[{]};:\"\',<>.?/"; __executed = /.+/.exec(__string); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __string = "|\\[{]};:\"\',<>.?/"; __executed = /.+/.exec(__string); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __string = "|\\[{]};:\"\',<>.?/"; __executed = /.+/.exec(__string); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __string = "|\\[{]};:\"\',<>.?/"; __executed = /.+/.exec(__string); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A5_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A5_T1.js deleted file mode 100644 index dc958699b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A5_T1.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.8_A5_T1; -* @section: 15.10.2.8; -* @assertion: In case-insignificant matches all characters are implicitly converted to upper case immediately before they are compared; -* @description: Execute /[a-z]+/ig.exec("ABC def ghi") and check results; -*/ - -__string = "ABC def ghi"; -__executed = /[a-z]+/ig.exec(__string); - -__expected = ["ABC"]; -__expected.index = 0; -__expected.input = __string; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __string = "ABC def ghi"; __executed = /[a-z]+/ig.exec(__string); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __string = "ABC def ghi"; __executed = /[a-z]+/ig.exec(__string); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __string = "ABC def ghi"; __executed = /[a-z]+/ig.exec(__string); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __string = "ABC def ghi"; __executed = /[a-z]+/ig.exec(__string); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A5_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A5_T2.js deleted file mode 100644 index 74c41bbd0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.8_Atom/S15.10.2.8_A5_T2.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.8_A5_T2; -* @section: 15.10.2.8; -* @assertion: In case-insignificant matches all characters are implicitly converted to upper case immediately before they are compared; -* @description: Execute /[a-z]+/.exec("ABC def ghi") and check results; -*/ - -__string = "ABC def ghi"; -__executed = /[a-z]+/.exec(__string); - -__expected = ["def"]; -__expected.index = 4; -__expected.input = __string; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __string = "ABC def ghi"; __executed = /[a-z]+/.exec(__string); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __string = "ABC def ghi"; __executed = /[a-z]+/.exec(__string); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __string = "ABC def ghi"; __executed = /[a-z]+/.exec(__string); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __string = "ABC def ghi"; __executed = /[a-z]+/.exec(__string); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.9_AtomEscape/S15.10.2.9_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.9_AtomEscape/S15.10.2.9_A1_T1.js deleted file mode 100644 index 87d6e8785..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.9_AtomEscape/S15.10.2.9_A1_T1.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.9_A1_T1; -* @section: 15.10.2.9, 15.10.2.11; -* @assertion: An escape sequence of the form \ followed by a nonzero decimal number n matches the result of the nth set of capturing parentheses (see 15.10.2.11); -* @description: Execute /\b(\w+) \1\b/.exec("do you listen the the band") and check results; -*/ - -__executed = /\b(\w+) \1\b/.exec("do you listen the the band"); - -__expected = ["the the", "the"]; -__expected.index = 14; -__expected.input = "do you listen the the band"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /\\b(\\w+) \\1\\b/.exec("do you listen the the band"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /\\b(\\w+) \\1\\b/.exec("do you listen the the band"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /\\b(\\w+) \\1\\b/.exec("do you listen the the band"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /\\b(\\w+) \\1\\b/.exec("do you listen the the band"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.9_AtomEscape/S15.10.2.9_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.9_AtomEscape/S15.10.2.9_A1_T2.js deleted file mode 100644 index 615f6323c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.9_AtomEscape/S15.10.2.9_A1_T2.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.9_A1_T2; -* @section: 15.10.2.9, 15.10.2.11; -* @assertion: An escape sequence of the form \ followed by a nonzero decimal number n matches the result of the nth set of capturing parentheses (see 15.10.2.11); -* @description: Execute /([xu]\d{2}([A-H]{2})?)\1/.exec("x09x12x01x01u00FFu00FFx04x04x23") and check results; -*/ - -__executed = /([xu]\d{2}([A-H]{2})?)\1/.exec("x09x12x01x01u00FFu00FFx04x04x23"); - -__expected = ["x01x01", "x01", undefined]; -__expected.index = 6; -__expected.input = "x09x12x01x01u00FFu00FFx04x04x23"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /([xu]\\d{2}([A-H]{2})?)\\1/.exec("x09x12x01x01u00FFu00FFx04x04x23"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /([xu]\\d{2}([A-H]{2})?)\\1/.exec("x09x12x01x01u00FFu00FFx04x04x23"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /([xu]\\d{2}([A-H]{2})?)\\1/.exec("x09x12x01x01u00FFu00FFx04x04x23"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /([xu]\\d{2}([A-H]{2})?)\\1/.exec("x09x12x01x01u00FFu00FFx04x04x23"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.9_AtomEscape/S15.10.2.9_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.9_AtomEscape/S15.10.2.9_A1_T3.js deleted file mode 100644 index 3786a33cc..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.9_AtomEscape/S15.10.2.9_A1_T3.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.9_A1_T3; -* @section: 15.10.2.9, 15.10.2.11; -* @assertion: An escape sequence of the form \ followed by a nonzero decimal number n matches the result of the nth set of capturing parentheses (see 15.10.2.11); -* @description: Execute /([xu]\d{2}([A-H]{2})?)\1/.exec("x09x12x01x05u00FFu00FFx04x04x23") and check results; -*/ - -__executed = /([xu]\d{2}([A-H]{2})?)\1/.exec("x09x12x01x05u00FFu00FFx04x04x23"); - -__expected = ["u00FFu00FF", "u00FF", "FF"]; -__expected.index = 12; -__expected.input = "x09x12x01x05u00FFu00FFx04x04x23"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /([xu]\\d{2}([A-H]{2})?)\\1/.exec("x09x12x01x05u00FFu00FFx04x04x23"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /([xu]\\d{2}([A-H]{2})?)\\1/.exec("x09x12x01x05u00FFu00FFx04x04x23"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /([xu]\\d{2}([A-H]{2})?)\\1/.exec("x09x12x01x05u00FFu00FFx04x04x23"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /([xu]\\d{2}([A-H]{2})?)\\1/.exec("x09x12x01x05u00FFu00FFx04x04x23"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.9_AtomEscape/S15.10.2.9_A1_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.9_AtomEscape/S15.10.2.9_A1_T4.js deleted file mode 100644 index 6d412ff2d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.9_AtomEscape/S15.10.2.9_A1_T4.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.9_A1_T4; -* @section: 15.10.2.9, 15.10.2.11; -* @assertion: An escape sequence of the form \ followed by a nonzero decimal number n matches the result of the nth set of capturing parentheses (see 15.10.2.11); -* @description: Execute /\b(\w+) \2\b/.test("do you listen the the band") and check results; -*/ -__executed = /\b(\w+) \2\b/.test("do you listen the the band"); - -//CHECK#1 -if (__executed) { - $ERROR('#1: /\\b(\\w+) \\2\\b/.test("do you listen the the band") === false'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.9_AtomEscape/S15.10.2.9_A1_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.9_AtomEscape/S15.10.2.9_A1_T5.js deleted file mode 100644 index 943bb6360..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/15.10.2.9_AtomEscape/S15.10.2.9_A1_T5.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2.9_A1_T5; -* @section: 15.10.2.9, 15.10.2.11; -* @assertion: An escape sequence of the form \ followed by a nonzero decimal number n matches the result of the nth set of capturing parentheses (see 15.10.2.11); -* @description: Execute /(a*)b\1+/.exec("baaac") and check results; -*/ - -__executed = /(a*)b\1+/.exec("baaac"); - -__expected = ["b", ""]; -__expected.index = 0; -__expected.input = "baaac"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /(a*)b\\1+/.exec("baaac"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /(a*)b\\1+/.exec("baaac"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /(a*)b\\1+/.exec("baaac"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /(a*)b\\1+/.exec("baaac"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/S15.10.2_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/S15.10.2_A1_T1.js deleted file mode 100644 index e49159dbb..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.2_Pattern_Semantics/S15.10.2_A1_T1.js +++ /dev/null @@ -1,88 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.2_A1_T1; -* @section: 15.10.2; -* @assertion: XML Shallow Parsing with Regular Expressions; -* @description: See bug http://bugzilla.mozilla.org/show_bug.cgi?id=103087; -*/ - -// REX/Javascript 1.0 -// Robert D. Cameron "REX: XML Shallow Parsing with Regular Expressions", -// Technical Report TR 1998-17, School of Computing Science, Simon Fraser -// University, November, 1998. -// Copyright (c) 1998, Robert D. Cameron. -// The following code may be freely used and distributed provided that -// this copyright and citation notice remains intact and that modifications -// or additions are clearly identified. - -TextSE = "[^<]+"; -UntilHyphen = "[^-]*-"; -Until2Hyphens = UntilHyphen + "([^-]" + UntilHyphen + ")*-"; -CommentCE = Until2Hyphens + ">?"; -UntilRSBs = "[^]]*]([^]]+])*]+"; -CDATA_CE = UntilRSBs + "([^]>]" + UntilRSBs + ")*>"; -S = "[ \\n\\t\\r]+"; -NameStrt = "[A-Za-z_:]|[^\\x00-\\x7F]"; -NameChar = "[A-Za-z0-9_:.-]|[^\\x00-\\x7F]"; -Name = "(" + NameStrt + ")(" + NameChar + ")*"; -QuoteSE = '"[^"]' + "*" + '"' + "|'[^']*'"; -DT_IdentSE = S + Name + "(" + S + "(" + Name + "|" + QuoteSE + "))*"; -MarkupDeclCE = "([^]\"'><]+|" + QuoteSE + ")*>"; -S1 = "[\\n\\r\\t ]"; -UntilQMs = "[^?]*\\?+"; -PI_Tail = "\\?>|" + S1 + UntilQMs + "([^>?]" + UntilQMs + ")*>"; -DT_ItemSE = "<(!(--" + Until2Hyphens + ">|[^-]" + MarkupDeclCE + ")|\\?" + Name + "(" + PI_Tail + "))|%" + Name + ";|" + S; -DocTypeCE = DT_IdentSE + "(" + S + ")?(\\[(" + DT_ItemSE + ")*](" + S + ")?)?>?"; -DeclCE = "--(" + CommentCE + ")?|\\[CDATA\\[(" + CDATA_CE + ")?|DOCTYPE(" + DocTypeCE + ")?"; -PI_CE = Name + "(" + PI_Tail + ")?"; -EndTagCE = Name + "(" + S + ")?>?"; -AttValSE = '"[^<"]' + "*" + '"' + "|'[^<']*'"; -ElemTagCE = Name + "(" + S + Name + "(" + S + ")?=(" + S + ")?(" + AttValSE + "))*(" + S + ")?/?>?"; -MarkupSPE = "<(!(" + DeclCE + ")?|\\?(" + PI_CE + ")?|/(" + EndTagCE + ")?|(" + ElemTagCE + ")?)"; -XML_SPE = TextSE + "|" + MarkupSPE; - -/// -//// -///// - -__patterns = [TextSE,UntilHyphen,Until2Hyphens,CommentCE,UntilRSBs,CDATA_CE,S,NameStrt, NameChar, -Name, QuoteSE, DT_IdentSE, MarkupDeclCE, S1,UntilQMs, PI_Tail, DT_ItemSE, DocTypeCE, DeclCE, -PI_CE, EndTagCE, AttValSE, ElemTagCE, MarkupSPE, XML_SPE]; - -__html=""+ -'\n' + -' Three Namespaces\n' + -' \n' + -'

An Ellipse and a Rectangle

\n' + -' \n' + -' \n' + -' \n' + -' \n' + -'

\n' + -' More about ellipses\n' + -'

\n' + -'

\n' + -' More about rectangles\n' + -'

\n' + -'
\n' + -'

Last Modified February 13, 2000

\n' + -' \n' + -''; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try { - for(var index=0; index<__patterns.length; index++) { - __re = new RegExp(__patterns[index]); - __re.test(__html); - } -} catch (e) { - $ERROR('#'+index+": XML Shallow Parsing with Regular Expression: "+__patterns[index]); -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.3_The_RegExp_Constructor_Called_as_a_Function/S15.10.3.1_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.3_The_RegExp_Constructor_Called_as_a_Function/S15.10.3.1_A1_T1.js deleted file mode 100644 index b8d75f114..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.3_The_RegExp_Constructor_Called_as_a_Function/S15.10.3.1_A1_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.3.1_A1_T1; -* @section: 15.10.3.1; -* @assertion: If pattern is an object R whose [[Class]] property is "RegExp" and flags is undefined, then return R unchanged; -* @description: R is /x/i and instance is RegExp(R); -*/ - -__re = /x/i; -__instance = RegExp(__re); -__re.indicator = 1; - -//CHECK#1 -if (__instance.indicator !== 1) { - $ERROR('#1: __re = /x/i; __instance = RegExp(__re); __re.indicator = 1; __instance.indicator === 1. Actual: ' + (__instance.indicator)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.3_The_RegExp_Constructor_Called_as_a_Function/S15.10.3.1_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.3_The_RegExp_Constructor_Called_as_a_Function/S15.10.3.1_A1_T2.js deleted file mode 100644 index 632a1e65d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.3_The_RegExp_Constructor_Called_as_a_Function/S15.10.3.1_A1_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.3.1_A1_T2; -* @section: 15.10.3.1; -* @assertion: If pattern is an object R whose [[Class]] property is "RegExp" and flags is undefined, then return R unchanged; -* @description: R is new RegExp and instance is RegExp(R, function(){}()); -*/ - -__re = new RegExp; -__instance = RegExp(__re, function(){}()); -__re.indicator = 1; - -//CHECK#1 -if (__instance.indicator !== 1) { - $ERROR('#1: __re = new RegExp; __instance = RegExp(__re, function(){}()); __re.indicator = 1; __instance.indicator === 1. Actual: ' + (__instance.indicator)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.3_The_RegExp_Constructor_Called_as_a_Function/S15.10.3.1_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.3_The_RegExp_Constructor_Called_as_a_Function/S15.10.3.1_A1_T3.js deleted file mode 100644 index 683f9c0fe..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.3_The_RegExp_Constructor_Called_as_a_Function/S15.10.3.1_A1_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.3.1_A1_T3; -* @section: 15.10.3.1; -* @assertion: If pattern is an object R whose [[Class]] property is "RegExp" and flags is undefined, then return R unchanged; -* @description: R is new RegExp() and instance is RegExp(R, x), where x is undefined variable; -*/ - -__re = new RegExp(); -__instance = RegExp(__re, x); -__re.indicator = 1; - -//CHECK#1 -if (__instance.indicator !== 1) { - $ERROR('#1: __re = new RegExp(); __instance = RegExp(__re, x); __re.indicator = 1; __instance.indicator === 1. Actual: ' + (__instance.indicator)); -} - -var x; diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.3_The_RegExp_Constructor_Called_as_a_Function/S15.10.3.1_A1_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.3_The_RegExp_Constructor_Called_as_a_Function/S15.10.3.1_A1_T4.js deleted file mode 100644 index c7d9a9928..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.3_The_RegExp_Constructor_Called_as_a_Function/S15.10.3.1_A1_T4.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.3.1_A1_T4; -* @section: 15.10.3.1; -* @assertion: If pattern is an object R whose [[Class]] property is "RegExp" and flags is undefined, then return R unchanged; -* @description: R is new RegExp() and instance is RegExp(R, void 0); -*/ - -__re = RegExp(); -__instance = RegExp(__re, void 0); -__re.indicator = 1; - -//CHECK#1 -if (__instance.indicator !== 1) { - $ERROR('#1: __re = RegExp(); __instance = RegExp(__re, void 0); __re.indicator = 1; __instance.indicator === 1. Actual: ' + (__instance.indicator)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.3_The_RegExp_Constructor_Called_as_a_Function/S15.10.3.1_A1_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.3_The_RegExp_Constructor_Called_as_a_Function/S15.10.3.1_A1_T5.js deleted file mode 100644 index a86584caf..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.3_The_RegExp_Constructor_Called_as_a_Function/S15.10.3.1_A1_T5.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.3.1_A1_T5; -* @section: 15.10.3.1; -* @assertion: If pattern is an object R whose [[Class]] property is "RegExp" and flags is undefined, then return R unchanged; -* @description: R is /\b/m and instance is RegExp(R, undefined); -*/ - -__re = /\b/m; -__instance = RegExp(__re, undefined); -__re.indicator = 1; - -//CHECK#1 -if (__instance.indicator !== 1) { - $ERROR('#1: __re = /\\b/m; __instance = RegExp(__re, undefined); __re.indicator = 1; __instance.indicator === 1. Actual: ' + (__instance.indicator)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.3_The_RegExp_Constructor_Called_as_a_Function/S15.10.3.1_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.3_The_RegExp_Constructor_Called_as_a_Function/S15.10.3.1_A2_T1.js deleted file mode 100644 index c458b942d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.3_The_RegExp_Constructor_Called_as_a_Function/S15.10.3.1_A2_T1.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.3.1_A2_T1; -* @section: 15.10.3.1; -* @assertion: If pattern is an object R whose [[Class]] property is "RegExp" and flags is defined, then -* call the RegExp constructor (15.10.4.1), passing it the pattern and flags arguments and return the object constructed by that constructor; -* @description: Checking if using "1" as flags leads to throwing the correct exception; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: RegExp(new RegExp("\\d"), "1")) throw TypeError. Actual: ' + (RegExp(new RegExp("\d"), "1"))); -} catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1.2: RegExp(new RegExp("\\d"), "1")) throw TypeError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.3_The_RegExp_Constructor_Called_as_a_Function/S15.10.3.1_A2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.3_The_RegExp_Constructor_Called_as_a_Function/S15.10.3.1_A2_T2.js deleted file mode 100644 index 08daea033..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.3_The_RegExp_Constructor_Called_as_a_Function/S15.10.3.1_A2_T2.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.3.1_A2_T2; -* @section: 15.10.3.1; -* @assertion: If pattern is an object R whose [[Class]] property is "RegExp" and flags is defined, then -* call the RegExp constructor (15.10.4.1), passing it the pattern and flags arguments and return the object constructed by that constructor; -* @description: Checking if using dafined variable "x = 1" as flags leads to throwing the correct exception; -*/ - -var x = 1; - -//CHECK#1 -try { - $ERROR('#1.1: var x = 1; RegExp(/[a-b]?/, x) throw TypeError. Actual: ' + (RegExp(/[a-b]?/, x))); -} catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1.2: var x = 1; RegExp(/[a-b]?/, x) throw TypeError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.3_The_RegExp_Constructor_Called_as_a_Function/S15.10.3.1_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.3_The_RegExp_Constructor_Called_as_a_Function/S15.10.3.1_A3_T1.js deleted file mode 100644 index 814a0b6dc..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.3_The_RegExp_Constructor_Called_as_a_Function/S15.10.3.1_A3_T1.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.3.1_A3_T1; -* @section: 15.10.3.1; -* @assertion: If pattern and flags are defined, then -* call the RegExp constructor (15.10.4.1), passing it the pattern and flags arguments and return the object constructed by that constructor; -* @description: R is "d+" and instance is RegExp(R,"i"); -*/ - -__re = "d+"; -__instance = RegExp(__re, "i"); - -//CHECK#1 -if (__instance.constructor !== RegExp) { - $ERROR('#1: __re = "d+"; __instance = RegExp(__re, "i"); __instance.constructor === RegExp. Actual: ' + (__instance.constructor)); -} - -//CHECK#2 -if (__instance.source !== __re) { - $ERROR('#2: __re = "d+"; __instance = RegExp(__re, "i"); __instance.source === __re. Actual: '+ (__instance.source)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.3_The_RegExp_Constructor_Called_as_a_Function/S15.10.3.1_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.3_The_RegExp_Constructor_Called_as_a_Function/S15.10.3.1_A3_T2.js deleted file mode 100644 index e5506619e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.3_The_RegExp_Constructor_Called_as_a_Function/S15.10.3.1_A3_T2.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.3.1_A3_T2; -* @section: 15.10.3.1; -* @assertion: If pattern and flags are defined, then -* call the RegExp constructor (15.10.4.1), passing it the pattern and flags arguments and return the object constructed by that constructor; -* @description: R is {toString:function(){return "[a-c]*";}} and instance is RegExp(R,"gm"); -*/ - -__instance = RegExp({toString:function(){return "[a-c]*";}}, "gm"); - -//CHECK#1 -if (__instance.constructor !== RegExp) { - $ERROR('#1: __instance = RegExp({toString:function(){return "[a-c]*";}}, "gm"); __instance.constructor === RegExp. Actual: ' + (__instance.constructor)); -} - -//CHECK#2 -if (__instance.source !== "[a-c]*") { - $ERROR('#2: __instance = RegExp({toString:function(){return "[a-c]*";}}, "gm"); __instance.source === "[a-c]*". Actual: '+ (__instance.source)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A1_T1.js deleted file mode 100644 index fbf49ae5a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A1_T1.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.4.1_A1_T1; -* @section: 15.10.4.1; -* @assertion: If pattern is an object R whose [[Class]] property is "RegExp" and flags is undefined, then let P be -* the pattern used to construct R and let F be the flags used to construct R; -* @description: Pattern is /./i and RegExp is new RegExp(pattern); -*/ - -__pattern = /./i; -__re = new RegExp(__pattern); - -//CHECK#1 -if (__re.source !== __pattern.source) { - $ERROR('#1: __pattern = /./i; __re = new RegExp(__pattern); __re.source === __pattern.source. Actual: '+ (__re.source)); -} - -//CHECK#2 -if (__re.multiline !== __pattern.multiline) { - $ERROR('#2: __pattern = /./i; __re = new RegExp(__pattern); __re.multiline === __pattern.multiline. Actual: ' + (__re.multiline)); -} - -//CHECK#3 -if (__re.global !== __pattern.global) { - $ERROR('#3: __pattern = /./i; __re = new RegExp(__pattern); __re.global === __pattern.global. Actual: ' + (__re.global)); -} - -//CHECK#4 -if (__re.ignoreCase !== __pattern.ignoreCase) { - $ERROR('#4: __pattern = /./i; __re = new RegExp(__pattern); __re.ignoreCase === __pattern.ignoreCase. Actual: ' + (__re.ignoreCase)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A1_T2.js deleted file mode 100644 index ac897fd09..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A1_T2.js +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.4.1_A1_T2; -* @section: 15.10.4.1; -* @assertion: If pattern is an object R whose [[Class]] property is "RegExp" and flags is undefined, then let P be -* the pattern used to construct R and let F be the flags used to construct R; -* @description: Pattern is /\t/m and RegExp is new RegExp(pattern,x), where x is undefined variable; -*/ - -__pattern = /\t/m; -__re = new RegExp(__pattern, x); - -//CHECK#1 -if (__re.source !== __pattern.source) { - $ERROR('#1: __pattern = /\\t/m; _re = new RegExp(__pattern, x); var x; __re.source === __pattern.source. Actual: '+ (__re.source)); -} - -//CHECK#2 -if (__re.multiline !== __pattern.multiline) { - $ERROR('#2: __pattern = /\\t/m; _re = new RegExp(__pattern, x); var x; __re.multiline === __pattern.multiline. Actual: ' + (__re.multiline)); -} - -//CHECK#3 -if (__re.global !== __pattern.global) { - $ERROR('#3: __pattern = /\\t/m; _re = new RegExp(__pattern, x); var x; __re.global === __pattern.global. Actual: ' + (__re.global)); -} - -//CHECK#4 -if (__re.ignoreCase !== __pattern.ignoreCase) { - $ERROR('#4: __pattern = /\\t/m; _re = new RegExp(__pattern, x); var x; __re.ignoreCase === __pattern.ignoreCase. Actual: ' + (__re.ignoreCase)); -} - -var x; diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A1_T3.js deleted file mode 100644 index fad9028e1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A1_T3.js +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.4.1_A1_T3; -* @section: 15.10.4.1; -* @assertion: If pattern is an object R whose [[Class]] property is "RegExp" and flags is undefined, then let P be -* the pattern used to construct R and let F be the flags used to construct R; -* @description: Pattern is /[a-b]/g and RegExp is new RegExp(pattern,void 0); -*/ - -__pattern = /[a-b]/g; -__re = new RegExp(__pattern, void 0); - -//CHECK#1 -if (__re.source !== __pattern.source) { - $ERROR('#1: __pattern = /[a-b]/g; __re = new RegExp(__pattern, void 0); __re.source === __pattern.source. Actual: '+ (__re.source)); -} - -//CHECK#2 -if (__re.multiline !== __pattern.multiline) { - $ERROR('#2: __pattern = /[a-b]/g; __re = new RegExp(__pattern, void 0); __re.multiline === __pattern.multiline. Actual: ' + (__re.multiline)); -} - -//CHECK#3 -if (__re.global !== __pattern.global) { - $ERROR('#3: __pattern = /[a-b]/g; __re = new RegExp(__pattern, void 0); __re.global === __pattern.global. Actual: ' + (__re.global)); -} - -//CHECK#4 -if (__re.ignoreCase !== __pattern.ignoreCase) { - $ERROR('#4: __pattern = /[a-b]/g; __re = new RegExp(__pattern, void 0); __re.ignoreCase === __pattern.ignoreCase. Actual: ' + (__re.ignoreCase)); -} - - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A1_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A1_T4.js deleted file mode 100644 index b4a224045..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A1_T4.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.4.1_A1_T4; -* @section: 15.10.4.1; -* @assertion: If pattern is an object R whose [[Class]] property is "RegExp" and flags is undefined, then let P be -* the pattern used to construct R and let F be the flags used to construct R; -* @description: Pattern is new RegExp and RegExp is new RegExp(pattern,undefined); -*/ - -__pattern = new RegExp; -__re = new RegExp(__pattern, undefined); - -//CHECK#1 -if (__re.source !== __pattern.source) { - $ERROR('#1: __pattern = new RegExp; __re = new RegExp(__pattern, undefined); __re.source === __pattern.source. Actual: '+ (__re.source)); -} - -//CHECK#2 -if (__re.multiline !== __pattern.multiline) { - $ERROR('#2: __pattern = new RegExp; __re = new RegExp(__pattern, undefined); __re.multiline === __pattern.multiline. Actual: ' + (__re.multiline)); -} - -//CHECK#3 -if (__re.global !== __pattern.global) { - $ERROR('#3: __pattern = new RegExp; __re = new RegExp(__pattern, undefined); __re.global === __pattern.global. Actual: ' + (__re.global)); -} - -//CHECK#4 -if (__re.ignoreCase !== __pattern.ignoreCase) { - $ERROR('#4: __pattern = new RegExp; __re = new RegExp(__pattern, undefined); __re.ignoreCase === __pattern.ignoreCase. Actual: ' + (__re.ignoreCase)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A1_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A1_T5.js deleted file mode 100644 index 4492eb51e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A1_T5.js +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.4.1_A1_T5; -* @section: 15.10.4.1; -* @assertion: If pattern is an object R whose [[Class]] property is "RegExp" and flags is undefined, then let P be -* the pattern used to construct R and let F be the flags used to construct R; -* @description: Pattern is RegExp("1?","mig") and RegExp is new RegExp(pattern,(function(){})()); -*/ - -__pattern = RegExp("1?","mig"); -__re = new RegExp(__pattern, (function(){})()); - -//CHECK#1 -if (__re.source !== __pattern.source) { - $ERROR('#1: __pattern = RegExp("1?","mig"); __re = new RegExp(__pattern, (function(){})()); __re.source === __pattern.source. Actual: '+ (__re.source)); -} - -//CHECK#2 -if (__re.multiline !== __pattern.multiline) { - $ERROR('#2: __pattern = RegExp("1?","mig"); __re = new RegExp(__pattern, (function(){})()); __re.multiline === __pattern.multiline. Actual: ' + (__re.multiline)); -} - -//CHECK#3 -if (__re.global !== __pattern.global) { - $ERROR('#3: __pattern = RegExp("1?","mig"); __re = new RegExp(__pattern, (function(){})()); __re.global === __pattern.global. Actual: ' + (__re.global)); -} - -//CHECK#4 -if (__re.ignoreCase !== __pattern.ignoreCase) { - $ERROR('#4: __pattern = RegExp("1?","mig"); __re = new RegExp(__pattern, (function(){})()); __re.ignoreCase === __pattern.ignoreCase. Actual: ' + (__re.ignoreCase)); -} - - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A2_T1.js deleted file mode 100644 index 760cccd31..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A2_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.4.1_A2_T1; -* @section: 15.10.4.1; -* @assertion: If pattern is an object R whose [[Class]] property is "RegExp" and flags is not undefined, then throw a TypeError exception; -* @description: Checking if execution of "new RegExp(pattern, "i")", where the pattern is "/\u0042/i", fails; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: new RegExp(/\\u0042/i, "i") throw TypeError. Actual: ' + (new RegExp(/\u0042/i, "i"))); -} catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1.2: new RegExp(/\\u0042/i, "i") throw TypeError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A2_T2.js deleted file mode 100644 index b88e2cfce..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A2_T2.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.4.1_A2_T2; -* @section: 15.10.4.1; -* @assertion: If pattern is an object R whose [[Class]] property is "RegExp" and flags is not undefined, then throw a TypeError exception; -* @description: Checking if execution of "new RegExp(pattern, {})", where the pattern is "/1?1/mig", fails; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: new RegExp(/1?1/mig, {}) throw TypeError. Actual: ' + (new RegExp(/1?1/mig, {}))); -} catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1.2: new RegExp(/1?1/mig, {}) throw TypeError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A3_T1.js deleted file mode 100644 index d14987a42..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A3_T1.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.4.1_A3_T1; -* @section: 15.10.4.1; -* @assertion: let P be the empty string if pattern is undefined; -* @description: RegExp is new RegExp; -*/ - -__re = new RegExp; - -//CHECK#1 -if (__re.source !== "") { - $ERROR('#1: __re = new RegExp; __re.source === "". Actual: '+ (__re.source)); -} - -//CHECK#2 -if (__re.multiline !== false) { - $ERROR('#2: __re = new RegExp; __re.multiline === false. Actual: ' + (__re.multiline)); -} - -//CHECK#3 -if (__re.global !== false) { - $ERROR('#3: __re = new RegExp; __re.global === false. Actual: ' + (__re.global)); -} - -//CHECK#4 -if (__re.ignoreCase !== false) { - $ERROR('#4: __re = new RegExp; __re.ignoreCase === false. Actual: ' + (__re.ignoreCase)); -} - - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A3_T2.js deleted file mode 100644 index 6d9d3d9ba..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A3_T2.js +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.4.1_A3_T2; -* @section: 15.10.4.1; -* @assertion: let P be the empty string if pattern is undefined; -* @description: RegExp is new RegExp(void 0); -*/ - -__re = new RegExp(void 0); - -//CHECK#1 -if (__re.source !== "") { - $ERROR('#1: __re = new RegExp(void 0); __re.source === "". Actual: '+ (__re.source)); -} - -//CHECK#2 -if (__re.multiline !== false) { - $ERROR('#2: __re = new RegExp(void 0); __re.multiline === false. Actual: ' + (__re.multiline)); -} - -//CHECK#3 -if (__re.global !== false) { - $ERROR('#3: __re = new RegExp(void 0); __re.global === false. Actual: ' + (__re.global)); -} - -//CHECK#4 -if (__re.ignoreCase !== false) { - $ERROR('#4: __re = new RegExp(void 0); __re.ignoreCase === false. Actual: ' + (__re.ignoreCase)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A3_T3.js deleted file mode 100644 index ae41bd834..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A3_T3.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.4.1_A3_T3; -* @section: 15.10.4.1; -* @assertion: let P be the empty string if pattern is undefined; -* @description: RegExp is new RegExp(x), where x is undefined variable; -*/ - -__re = new RegExp(x); - -//CHECK#1 -if (__re.source !== "") { - $ERROR('#1: __re = new RegExp(x); var x; __re.source === "". Actual: '+ (__re.source)); -} - -//CHECK#2 -if (__re.multiline !== false) { - $ERROR('#2: __re = new RegExp(x); var x; __re.multiline === false. Actual: ' + (__re.multiline)); -} - -//CHECK#3 -if (__re.global !== false) { - $ERROR('#3: __re = new RegExp(x); var x; __re.global === false. Actual: ' + (__re.global)); -} - -//CHECK#4 -if (__re.ignoreCase !== false) { - $ERROR('#4: __re = new RegExp(x); var x; __re.ignoreCase === false. Actual: ' + (__re.ignoreCase)); -} - -var x; - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A3_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A3_T4.js deleted file mode 100644 index 5b8825f32..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A3_T4.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.4.1_A3_T4; -* @section: 15.10.4.1; -* @assertion: let P be the empty string if pattern is undefined; -* @description: RegExp is new RegExp(undefined); -*/ - -__re = new RegExp(undefined); - -//CHECK#1 -if (__re.source !== "") { - $ERROR('#1: __re = new RegExp(undefined); __re.source === "". Actual: '+ (__re.source)); -} - -//CHECK#2 -if (__re.multiline !== false) { - $ERROR('#2: __re = new RegExp(undefined); __re.multiline === false. Actual: ' + (__re.multiline)); -} - -//CHECK#3 -if (__re.global !== false) { - $ERROR('#3: __re = new RegExp(undefined); __re.global === false. Actual: ' + (__re.global)); -} - -//CHECK#4 -if (__re.ignoreCase !== false) { - $ERROR('#4: __re = new RegExp(undefined); __re.ignoreCase === false. Actual: ' + (__re.ignoreCase)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A3_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A3_T5.js deleted file mode 100644 index e26522b4c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A3_T5.js +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.4.1_A3_T5; -* @section: 15.10.4.1; -* @assertion: let P be the empty string if pattern is undefined; -* @description: RegExp is new RegExp((function(){})()); -*/ - -__re = new RegExp((function(){})()); - -//CHECK#1 -if (__re.source !== "") { - $ERROR('#1: __re = new RegExp((function(){})()); __re.source === "". Actual: '+ (__re.source)); -} - -//CHECK#2 -if (__re.multiline !== false) { - $ERROR('#2: __re = new RegExp((function(){})()); __re.multiline === false. Actual: ' + (__re.multiline)); -} - -//CHECK#3 -if (__re.global !== false) { - $ERROR('#3: __re = new RegExp((function(){})()); __re.global === false. Actual: ' + (__re.global)); -} - -//CHECK#4 -if (__re.ignoreCase !== false) { - $ERROR('#4: __re = new RegExp((function(){})()); __re.ignoreCase === false. Actual: ' + (__re.ignoreCase)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A4_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A4_T1.js deleted file mode 100644 index 4a83fbaca..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A4_T1.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.4.1_A4_T1; -* @section: 15.10.4.1; -* @assertion: let F be the empty string if flags is undefined; -* @description: RegExp is new RegExp(undefined); -*/ - -__re = new RegExp(null, void 0); - -//CHECK#1 -if (__re.source !== "null") { - $ERROR('#1: __re = new RegExp(null, void 0); __re.source === "null". Actual: '+ (__re.source)); -} - -//CHECK#2 -if (__re.multiline !== false) { - $ERROR('#2: __re = new RegExp(null, void 0); __re.multiline === false. Actual: ' + (__re.multiline)); -} - -//CHECK#3 -if (__re.global !== false) { - $ERROR('#3: __re = new RegExp(null, void 0); __re.global === false. Actual: ' + (__re.global)); -} - -//CHECK#4 -if (__re.ignoreCase !== false) { - $ERROR('#4: __re = new RegExp(null, void 0); __re.ignoreCase === false. Actual: ' + (__re.ignoreCase)); -} - - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A4_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A4_T2.js deleted file mode 100644 index 01c5f0589..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A4_T2.js +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.4.1_A4_T2; -* @section: 15.10.4.1; -* @assertion: let F be the empty string if flags is undefined; -* @description: RegExp is new RegExp(undefined,undefined); -*/ - -__re = new RegExp(undefined, undefined); - -//CHECK#1 -if (__re.source !== "") { - $ERROR('#1: __re = new RegExp(undefined, undefined); __re.source === "". Actual: '+ (__re.source)); -} - -//CHECK#2 -if (__re.multiline !== false) { - $ERROR('#2: __re = new RegExp(undefined, undefined); __re.multiline === false. Actual: ' + (__re.multiline)); -} - -//CHECK#3 -if (__re.global !== false) { - $ERROR('#3: __re = new RegExp(undefined, undefined); __re.global === false. Actual: ' + (__re.global)); -} - -//CHECK#4 -if (__re.ignoreCase !== false) { - $ERROR('#4: __re = new RegExp(undefined, undefined); __re.ignoreCase === false. Actual: ' + (__re.ignoreCase)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A4_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A4_T3.js deleted file mode 100644 index cb6e9b4fd..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A4_T3.js +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.4.1_A4_T3; -* @section: 15.10.4.1; -* @assertion: let F be the empty string if flags is undefined; -* @description: Use undefined properties of object as flags of RegExp; -*/ - -__re = new RegExp({}.p, {}.q); - -//CHECK#1 -if (__re.source !== "") { - $ERROR('#1: __re = new RegExp({}.p, {}.q); __re.source === "". Actual: '+ (__re.source)); -} - -//CHECK#2 -if (__re.multiline !== false) { - $ERROR('#2: __re = new RegExp({}.p, {}.q); __re.multiline === false. Actual: ' + (__re.multiline)); -} - -//CHECK#3 -if (__re.global !== false) { - $ERROR('#3: __re = new RegExp({}.p, {}.q); __re.global === false. Actual: ' + (__re.global)); -} - -//CHECK#4 -if (__re.ignoreCase !== false) { - $ERROR('#4: __re = new RegExp({}.p, {}.q); __re.ignoreCase === false. Actual: ' + (__re.ignoreCase)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A4_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A4_T4.js deleted file mode 100644 index 48e66421d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A4_T4.js +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.4.1_A4_T4; -* @section: 15.10.4.1; -* @assertion: let F be the empty string if flags is undefined; -* @description: RegExp is new RegExp(null,void 0); -*/ - -__re = new RegExp(null, void 0); - -//CHECK#1 -if (__re.source !== "null") { - $ERROR('#1: __re = new RegExp(null, void 0); __re.source === "null". Actual: '+ (__re.source)); -} - -//CHECK#2 -if (__re.multiline !== false) { - $ERROR('#2: __re = new RegExp(null, void 0); __re.multiline === false. Actual: ' + (__re.multiline)); -} - -//CHECK#3 -if (__re.global !== false) { - $ERROR('#3: __re = new RegExp(null, void 0); __re.global === false. Actual: ' + (__re.global)); -} - -//CHECK#4 -if (__re.ignoreCase !== false) { - $ERROR('#4: __re = new RegExp(null, void 0); __re.ignoreCase === false. Actual: ' + (__re.ignoreCase)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A4_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A4_T5.js deleted file mode 100644 index e2f4bbf42..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A4_T5.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.4.1_A4_T5; -* @section: 15.10.4.1; -* @assertion: let F be the empty string if flags is undefined; -* @description: RegExp is new RegExp("",(function(){})()); -*/ - -__re = new RegExp("", (function(){})()); - -//CHECK#1 -if (__re.source !== "") { - $ERROR('#1: __re = new RegExp("", (function(){})()); __re.source === "". Actual: '+ (__re.source)); -} - -//CHECK#2 -if (__re.multiline !== false) { - $ERROR('#2: __re = new RegExp("", (function(){})()); __re.multiline === false. Actual: ' + (__re.multiline)); -} - -//CHECK#3 -if (__re.global !== false) { - $ERROR('#3: __re = new RegExp("", (function(){})()); __re.global === false. Actual: ' + (__re.global)); -} - -//CHECK#4 -if (__re.ignoreCase !== false) { - $ERROR('#4: __re = new RegExp("", (function(){})()); __re.ignoreCase === false. Actual: ' + (__re.ignoreCase)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A5_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A5_T1.js deleted file mode 100644 index e9eed97d4..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A5_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.4.1_A5_T1; -* @section: 15.10.4.1; -* @assertion: If F contains any character other than 'g', 'i', or 'm', or if it contains the same one more than once, then throw a SyntaxError exception; -* @description: Checking if using "ii" as F leads to throwing the correct exception; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: new RegExp(undefined,"ii") throw SyntaxError. Actual: ' + (new RegExp(undefined,"ii"))); -} catch (e) { - if ((e instanceof SyntaxError) !== true) { - $ERROR('#1.2: new RegExp(undefined,"ii") throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A5_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A5_T2.js deleted file mode 100644 index ff1f02ba8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A5_T2.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.4.1_A5_T2; -* @section: 15.10.4.1; -* @assertion: If F contains any character other than 'g', 'i', or 'm', or if it contains the same one more than once, then throw a SyntaxError exception; -* @description: Checking if using "migg" as F leads to throwing the correct exception; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: new RegExp(null,"migg") throw SyntaxError. Actual: ' + (new RegExp(null,"migg"))); -} catch (e) { - if ((e instanceof SyntaxError) !== true) { - $ERROR('#1.2: new RegExp(null,"migg") throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A5_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A5_T3.js deleted file mode 100644 index 8801727f4..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A5_T3.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.4.1_A5_T3; -* @section: 15.10.4.1; -* @assertion: If F contains any character other than 'g', 'i', or 'm', or if it contains the same one more than once, then throw a SyntaxError exception; -* @description: Checking by using eval, try to use eval("\"migg\"") as F; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: new RegExp("",eval("\\"migr\\"")) throw SyntaxError. Actual: ' + (new RegExp("",eval("\"migr\"")))); -} catch (e) { - if ((e instanceof SyntaxError) !== true) { - $ERROR('#1.2: new RegExp("",eval("\\"migr\\"")) throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A5_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A5_T4.js deleted file mode 100644 index bcfff60b7..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A5_T4.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.4.1_A5_T4; -* @section: 15.10.4.1; -* @assertion: If F contains any character other than 'g', 'i', or 'm', or if it contains the same one more than once, then throw a SyntaxError exception; -* @description: Checking if using "z" as F leads to throwing the correct exception; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: new RegExp("a|b","z") throw SyntaxError. Actual: ' + (new RegExp("a|b","z"))); -} catch (e) { - if ((e instanceof SyntaxError) !== true) { - $ERROR('#1.2: new RegExp("a|b","z") throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A5_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A5_T5.js deleted file mode 100644 index 8f2bdbc03..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A5_T5.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.4.1_A5_T5; -* @section: 15.10.4.1; -* @assertion: If F contains any character other than 'g', 'i', or 'm', or if it contains the same one more than once, then throw a SyntaxError exception; -* @description: Checking if using "{toString:function(){return "x";}}" as F leads to throwing the correct exception; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: new RegExp("a|b|[a-b]",{toString:function(){return "x" throw SyntaxError. Actual: ' + (new RegExp("a|b|[a-b]",{toString:function(){return "x"}}))); -} catch (e) { - if ((e instanceof SyntaxError) !== true) { - $ERROR('#1.2: new RegExp("a|b|[a-b]",{toString:function(){return "x" throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A5_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A5_T6.js deleted file mode 100644 index 406db0357..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A5_T6.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.4.1_A5_T6; -* @section: 15.10.4.1; -* @assertion: If F contains any character other than 'g', 'i', or 'm', or if it contains the same one more than once, then throw a SyntaxError exception; -* @description: Checking if using "null" as F leads to throwing the correct exception; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: new RegExp(".",null) throw SyntaxError. Actual: ' + (new RegExp(".",null))); -} catch (e) { - if ((e instanceof SyntaxError) !== true) { - $ERROR('#1.2: new RegExp(".",null) throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A5_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A5_T7.js deleted file mode 100644 index 77a1cd618..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A5_T7.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.4.1_A5_T7; -* @section: 15.10.4.1; -* @assertion: If F contains any character other than 'g', 'i', or 'm', or if it contains the same one more than once, then throw a SyntaxError exception; -* @description: Checking if using 1.0 as F leads to throwing the correct exception; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: new RegExp("^",1.0) throw SyntaxError. Actual: ' + (new RegExp("^",1.0))); -} catch (e) { - if ((e instanceof SyntaxError) !== true) { - $ERROR('#1.2: new RegExp("^",1.0) throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A5_T8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A5_T8.js deleted file mode 100644 index 69cc55dc2..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A5_T8.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.4.1_A5_T8; -* @section: 15.10.4.1; -* @assertion: If F contains any character other than 'g', 'i', or 'm', or if it contains the same one more than once, then throw a SyntaxError exception; -* @description: Checking if using "true" as F leads to throwing the correct exception; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: new RegExp("|",true) throw SyntaxError. Actual: ' + (new RegExp("|",true))); -} catch (e) { - if ((e instanceof SyntaxError) !== true) { - $ERROR('#1.2: new RegExp("|",true) throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A5_T9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A5_T9.js deleted file mode 100644 index 0477d457e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A5_T9.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.4.1_A5_T9; -* @section: 15.10.4.1; -* @assertion: If F contains any character other than 'g', 'i', or 'm', or if it contains the same one more than once, then throw a SyntaxError exception; -* @description: Checking if using "{toString:function(){}}" as F leads to throwing the correct exception; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: new RegExp("$sup",{toString:function(){}}) throw SyntaxError. Actual: ' + (new RegExp("$sup",{toString:function(){}}))); -} catch (e) { - if ((e instanceof SyntaxError) !== true) { - $ERROR('#1.2: new RegExp("$sup",{toString:function(){}}) throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A6_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A6_T1.js deleted file mode 100644 index 5c1d8326e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A6_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.4.1_A6_T1; -* @section: 15.10.4.1; -* @assertion: The [[Class]] property of the newly constructed object is set to "RegExp"; -* @description: Checking [[Class]] property of the newly constructed object; -*/ - -__re = new RegExp; -__re.toString = Object.prototype.toString; - -//CHECK#1 -if (__re.toString() !== "[object "+"RegExp"+"]") { - $ERROR('#1: __re = new RegExp; __re.toString = Object.prototype.toString; __re.toString() === "[object "+"RegExp"+"]". Actual: ' + (__re.toString())); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A7_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A7_T1.js deleted file mode 100644 index 38c1995f2..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A7_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.4.1_A7_T1; -* @section: 15.10.4.1; -* @assertion: The [[Prototype]] property of the newly constructed object is set to the original RegExp prototype object, the one that is the initial value of RegExp.prototype; -* @description: Add new property to [[Prototype]] of REgExp and check this property of the newly constructed object; -*/ - -__re = new RegExp; -RegExp.prototype.indicator = 1; - -//CHECK#1 -if (__re.indicator !== 1) { - $ERROR('#1: __re = new RegExp; RegExp.prototype.indicator = 1; __re.indicator === 1. Actual: ' + (__re.indicator)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A7_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A7_T2.js deleted file mode 100644 index c566b2ff2..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A7_T2.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.4.1_A7_T2; -* @section: 15.10.4.1; -* @assertion: The [[Prototype]] property of the newly constructed object is set to the original RegExp prototype object, the one that is the initial value of RegExp.prototype; -* @description: Checking [[Prototype]] property of the newly constructed object; -*/ - -__re = new RegExp(); - -//CHECK#1 -if (RegExp.prototype.isPrototypeOf(__re) !== true) { - $ERROR('#1: __re = new RegExp(); RegExp.prototype.isPrototypeOf(__re) === true. Actual: ' + (RegExp.prototype.isPrototypeOf(__re))); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A8_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A8_T1.js deleted file mode 100644 index dc7d93244..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A8_T1.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.4.1_A8_T1; -* @section: 15.10.4.1; -* @assertion: let P be ToString(pattern) and let F be ToString(flags); -* @description: Pattern is "a|b" and flags is "i"; -*/ - -__re = new RegExp("a|b","i"); - -//CHECK#1 -if (__re.ignoreCase !== true) { - $ERROR('#1: __re = new RegExp("a|b","i"); __re.ignoreCase === true. Actual: ' + (__re.ignoreCase)); -} - -//CHECK#2 -if (__re.multiline !== false) { - $ERROR('#2: __re = new RegExp("a|b","i"); __re.multiline === false. Actual: ' + (__re.multiline)); -} - -//CHECK#3 -if (__re.global !== false) { - $ERROR('#3: __re = new RegExp("a|b","i"); __re.global === false. Actual: ' + (__re.global)); -} - -//CHECK#4 -if (__re.lastIndex !== 0) { - $ERROR('#4: __re = new RegExp("a|b","i"); __re.lastIndex === 0. Actual: ' + (__re.lastIndex)); -} - -//CHECK#5 -if (typeof __re.source === "undefined") { - $ERROR('#5: __re = new RegExp("a|b","i"); typeof __re.source !== "undefined"'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A8_T10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A8_T10.js deleted file mode 100644 index ad614b437..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A8_T10.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.4.1_A8_T10; -* @section: 15.10.4.1; -* @assertion: let P be ToString(pattern) and let F be ToString(flags); -* @description: Pattern is true and flags is "m"; -*/ - -__re = new RegExp(true,"m"); - -//CHECK#1 -if (__re.ignoreCase !== false) { - $ERROR('#1: __re = new RegExp(true,"m"); __re.ignoreCase === false. Actual: ' + (__re.ignoreCase)); -} - -//CHECK#2 -if (__re.multiline !== true) { - $ERROR('#2: __re = new RegExp(true,"m"); __re.multiline === true. Actual: ' + (__re.multiline)); -} - -//CHECK#3 -if (__re.global !== false) { - $ERROR('#3: __re = new RegExp(true,"m"); __re.global === false. Actual: ' + (__re.global)); -} - -//CHECK#4 -if (__re.lastIndex !== 0) { - $ERROR('#4: __re = new RegExp(true,"m"); __re.lastIndex === 0. Actual: ' + (__re.lastIndex)); -} - -//CHECK#5 -if (typeof __re.source === "undefined") { - $ERROR('#5: __re = new RegExp(true,"m"); typeof __re.source !== "undefined"'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A8_T11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A8_T11.js deleted file mode 100644 index cf8badb51..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A8_T11.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.4.1_A8_T11; -* @section: 15.10.4.1; -* @assertion: let P be ToString(pattern) and let F be ToString(flags); -* @description: Checking by using eval, pattern is Math and flags is eval("\"g\""); -*/ - -__re = new RegExp(Math,eval("\"g\"")); - -//CHECK#1 -if (__re.ignoreCase !== false) { - $ERROR('#1: __re = new RegExp(Math,eval("\\"g\\"")); __re.ignoreCase === false. Actual: ' + (__re.ignoreCase)); -} - -//CHECK#2 -if (__re.multiline !== false) { - $ERROR('#2: __re = new RegExp(Math,eval("\\"g\\"")); __re.multiline === false. Actual: ' + (__re.multiline)); -} - -//CHECK#3 -if (__re.global !== true) { - $ERROR('#3: __re = new RegExp(Math,eval("\\"g\\"")); __re.global === true. Actual: ' + (__re.global)); -} - -//CHECK#4 -if (__re.lastIndex !== 0) { - $ERROR('#4: __re = new RegExp(Math,eval("\\"g\\"")); __re.lastIndex === 0. Actual: ' + (__re.lastIndex)); -} - -//CHECK#5 -if (typeof __re.source === "undefined") { - $ERROR('#5: __re = new RegExp(Math,eval("\\"g\\"")); typeof __re.source !== "undefined"'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A8_T12.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A8_T12.js deleted file mode 100644 index 6dd9bff21..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A8_T12.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.4.1_A8_T12; -* @section: 15.10.4.1; -* @assertion: let P be ToString(pattern) and let F be ToString(flags); -* @description: Pattern is "\u0042" and flags is {toString:void 0, valueOf:function(){throw "invalof";} }; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: new RegExp("\\u0042", {toString:void 0, valueOf:function(){throw "invalof";}}) throw "invalof". Actual: ' + (new RegExp("\u0042", {toString:void 0, valueOf:function(){throw "invalof";}}))); -} catch (e) { - if (e !== "invalof" ) { - $ERROR('#1.2: new RegExp("\\u0042", {toString:void 0, valueOf:function(){throw "invalof";}}) throw "invalof". Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A8_T13.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A8_T13.js deleted file mode 100644 index 7fbf98541..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A8_T13.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.4.1_A8_T13; -* @section: 15.10.4.1; -* @assertion: let P be ToString(pattern) and let F be ToString(flags); -* @description: Pattern is "1" and flags is {toString:function(){throw "intostr";} }; -*/ - - -//CHECK#1 -try { - $ERROR('#1.1: new RegExp("1", {toString:function(){throw "intostr";}}) throw "intostr". Actual: ' + (new RegExp("1", {toString:function(){throw "intostr";}}))); -} catch (e) { - if (e !== "intostr" ) { - $ERROR('#1.2: new RegExp("1", {toString:function(){throw "intostr";}}) throw "intostr". Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A8_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A8_T2.js deleted file mode 100644 index 9ea94efab..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A8_T2.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.4.1_A8_T2; -* @section: 15.10.4.1; -* @assertion: let P be ToString(pattern) and let F be ToString(flags); -* @description: Pattern is function(){return "a|b|[]";}() and flags is "ig"; -*/ - -__re = new RegExp(function(){return "a|b|[]";}(),"ig"); - -//CHECK#1 -if (__re.ignoreCase !== true) { - $ERROR('#1: __re = new RegExp(function(){return "a|b|[]"; __re.ignoreCase === true. Actual: ' + (__re.ignoreCase)); -} - -//CHECK#2 -if (__re.multiline !== false) { - $ERROR('#2: __re = new RegExp(function(){return "a|b|[]"; __re.multiline === false. Actual: ' + (__re.multiline)); -} - -//CHECK#3 -if (__re.global !== true) { - $ERROR('#3: __re = new RegExp(function(){return "a|b|[]"; __re.global === true. Actual: ' + (__re.global)); -} - -//CHECK#4 -if (__re.lastIndex !== 0) { - $ERROR('#4: __re = new RegExp(function(){return "a|b|[]"; __re.lastIndex === 0. Actual: ' + (__re.lastIndex)); -} - -//CHECK#5 -if (typeof __re.source === "undefined") { - $ERROR('#5: __re = new RegExp(function(){return "a|b|[]"; typeof __re.source !== "undefined"'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A8_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A8_T3.js deleted file mode 100644 index adae3bbb0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A8_T3.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.4.1_A8_T3; -* @section: 15.10.4.1; -* @assertion: let P be ToString(pattern) and let F be ToString(flags); -* @description: Pattern is {toString:function(){return "[0-9]";}} and flags is (function(){return "m";})(); -*/ - -__re = new RegExp({toString:function(){return "[0-9]";}}, (function(){return "m";})()); - -//CHECK#1 -if (__re.ignoreCase !== false) { - $ERROR('#1: __re = new RegExp({toString:function(){return "[0-9]"; __re.ignoreCase === false. Actual: ' + (__re.ignoreCase)); -} - -//CHECK#2 -if (__re.multiline !== true) { - $ERROR('#2: __re = new RegExp({toString:function(){return "[0-9]"; __re.multiline === true. Actual: ' + (__re.multiline)); -} - -//CHECK#3 -if (__re.global !== false) { - $ERROR('#3: __re = new RegExp({toString:function(){return "[0-9]"; __re.global === false. Actual: ' + (__re.global)); -} - -//CHECK#4 -if (__re.lastIndex !== 0) { - $ERROR('#4: __re = new RegExp({toString:function(){return "[0-9]"; __re.lastIndex === 0. Actual: ' + (__re.lastIndex)); -} - -//CHECK#5 -if (typeof __re.source === "undefined") { - $ERROR('#5: __re = new RegExp({toString:function(){return "[0-9]"; typeof __re.source !== "undefined"'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A8_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A8_T4.js deleted file mode 100644 index c96bc858e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A8_T4.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.4.1_A8_T4; -* @section: 15.10.4.1; -* @assertion: let P be ToString(pattern) and let F be ToString(flags); -* @description: Pattern is {toString:void 0,valueOf:function(){return "[z-z]";}} and flags is {toString:void 0,valueOf:function(){return "mig";}}; -*/ - -__re = new RegExp({toString:void 0,valueOf:function(){return "[z-z]";}}, {toString:void 0,valueOf:function(){return "mig";}}); - -//CHECK#1 -if (__re.ignoreCase !== true) { - $ERROR('#1: __re = new RegExp({toString:void 0,valueOf:function(){return "[z-z]"; __re.ignoreCase === true. Actual: ' + (__re.ignoreCase)); -} - -//CHECK#2 -if (__re.multiline !== true) { - $ERROR('#2: __re = new RegExp({toString:void 0,valueOf:function(){return "[z-z]"; __re.multiline === true. Actual: ' + (__re.multiline)); -} - -//CHECK#3 -if (__re.global !== true) { - $ERROR('#3: __re = new RegExp({toString:void 0,valueOf:function(){return "[z-z]"; __re.global === true. Actual: ' + (__re.global)); -} - -//CHECK#4 -if (__re.lastIndex !== 0) { - $ERROR('#4: __re = new RegExp({toString:void 0,valueOf:function(){return "[z-z]"; __re.lastIndex === 0. Actual: ' + (__re.lastIndex)); -} - -//CHECK#5 -if (typeof __re.source === "undefined") { - $ERROR('#5: __re = new RegExp({toString:void 0,valueOf:function(){return "[z-z]"; typeof __re.source !== "undefined"'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A8_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A8_T5.js deleted file mode 100644 index 3590a347d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A8_T5.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.4.1_A8_T5; -* @section: 15.10.4.1; -* @assertion: let P be ToString(pattern) and let F be ToString(flags); -* @description: Pattern is new Object("abc{1}") and flags is {toString:function(){return "";}}; -*/ - -__re = new RegExp(new Object("abc{1}"), {toString:function(){return "";}}); - -//CHECK#1 -if (__re.ignoreCase !== false) { - $ERROR('#1: __re = new RegExp(new Object("abc{1}"), {toString:function(){return ""; __re.ignoreCase === false. Actual: ' + (__re.ignoreCase)); -} - -//CHECK#2 -if (__re.multiline !== false) { - $ERROR('#2: __re = new RegExp(new Object("abc{1}"), {toString:function(){return ""; __re.multiline === false. Actual: ' + (__re.multiline)); -} - -//CHECK#3 -if (__re.global !== false) { - $ERROR('#3: __re = new RegExp(new Object("abc{1}"), {toString:function(){return ""; __re.global === false. Actual: ' + (__re.global)); -} - -//CHECK#4 -if (__re.lastIndex !== 0) { - $ERROR('#4: __re = new RegExp(new Object("abc{1}"), {toString:function(){return ""; __re.lastIndex === 0. Actual: ' + (__re.lastIndex)); -} - -//CHECK#5 -if (typeof __re.source === "undefined") { - $ERROR('#5: __re = new RegExp(new Object("abc{1}"), {toString:function(){return ""; typeof __re.source !== "undefined"'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A8_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A8_T6.js deleted file mode 100644 index 5a7789e80..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A8_T6.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.4.1_A8_T6; -* @section: 15.10.4.1; -* @assertion: let P be ToString(pattern) and let F be ToString(flags); -* @description: Pattern is {toString:function(){throw "intostr";} } and flags is "i"; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: new RegExp({toString:function(){throw "intostr";}}, "i") throw "intostr". Actual: ' + (new RegExp({toString:function(){throw "intostr";}}, "i"))); -} catch (e) { - if (e !== "intostr" ) { - $ERROR('#1.2: new RegExp({toString:function(){throw "intostr";}}, "i") throw "intostr". Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A8_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A8_T7.js deleted file mode 100644 index 4b562680d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A8_T7.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.4.1_A8_T7; -* @section: 15.10.4.1; -* @assertion: let P be ToString(pattern) and let F be ToString(flags); -* @description: Pattern is {toString:void 0, valueOf:function(){throw "invalof";} } and flags is "i"; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: new RegExp({toString:void 0, valueOf:function(){throw "invalof";}}) throw "invalof". Actual: ' + (new RegExp({toString:void 0, valueOf:function(){throw "invalof";}}))); -} catch (e) { - if (e !== "invalof" ) { - $ERROR('#1.2: new RegExp({toString:void 0, valueOf:function(){throw "invalof";}}) throw "invalof". Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A8_T8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A8_T8.js deleted file mode 100644 index 1cd4e9323..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A8_T8.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.4.1_A8_T8; -* @section: 15.10.4.1; -* @assertion: let P be ToString(pattern) and let F be ToString(flags); -* @description: Pattern is {toString:function(){throw "intostr";} } and flags is "error"; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: new RegExp({toString:function(){throw "intostr";}}, "error") throw "intostr". Actual: ' + (new RegExp({toString:function(){throw "intostr";}}, "error"))); -} catch (e) { - if (e !== "intostr" ) { - $ERROR('#1.2: new RegExp({toString:function(){throw "intostr";}}, "error") throw "intostr". Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A8_T9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A8_T9.js deleted file mode 100644 index b8119377b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A8_T9.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.4.1_A8_T9; -* @section: 15.10.4.1; -* @assertion: let P be ToString(pattern) and let F be ToString(flags); -* @description: Pattern is 1 and flags is new Object("gi"); -*/ - -__re = new RegExp(1, new Object("gi")); - -//CHECK#1 -if (__re.ignoreCase !== true) { - $ERROR('#1: __re = new RegExp(1, new Object("gi")); __re.ignoreCase === true. Actual: ' + (__re.ignoreCase)); -} - -//CHECK#2 -if (__re.multiline !== false) { - $ERROR('#2: __re = new RegExp(1, new Object("gi")); __re.multiline === false. Actual: ' + (__re.multiline)); -} - -//CHECK#3 -if (__re.global !== true) { - $ERROR('#3: __re = new RegExp(1, new Object("gi")); __re.global === true. Actual: ' + (__re.global)); -} - -//CHECK#4 -if (__re.lastIndex !== 0) { - $ERROR('#4: __re = new RegExp(1, new Object("gi")); __re.lastIndex === 0. Actual: ' + (__re.lastIndex)); -} - -//CHECK#5 -if (typeof __re.source === "undefined") { - $ERROR('#5: __re = new RegExp(1, new Object("gi")); typeof __re.source !== "undefined"'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A9_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A9_T1.js deleted file mode 100644 index 9dfb660c1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A9_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.4.1_A9_T1; -* @section: 15.10.4.1; -* @assertion: If P's characters do not have the form Pattern, then throw a SyntaxError exception; -* @description: Pattern is "??"; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: new RegExp("??") throw SyntaxError. Actual: ' + (new RegExp("??"))); -} catch (e) { - if ((e instanceof SyntaxError) !== true) { - $ERROR('#1.2: new RegExp("??") throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A9_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A9_T2.js deleted file mode 100644 index 0665ccf92..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A9_T2.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.4.1_A9_T2; -* @section: 15.10.4.1; -* @assertion: If P's characters do not have the form Pattern, then throw a SyntaxError exception; -* @description: Pattern is "[{-z]"; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: new RegExp("[{-z]") throw SyntaxError. Actual: ' + (new RegExp("[{-z]"))); -} catch (e) { - if ((e instanceof SyntaxError) !== true) { - $ERROR('#1.2: new RegExp("[{-z]") throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A9_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A9_T3.js deleted file mode 100644 index bdd7f6c4e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.4_The_RegExp_Constructor/S15.10.4.1_A9_T3.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.4.1_A9_T3; -* @section: 15.10.4.1; -* @assertion: If P's characters do not have the form Pattern, then throw a SyntaxError exception; -* @description: Pattern is "[a--z]"; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: new RegExp("[a--z]") throw SyntaxError. Actual: ' + (new RegExp("[a--z]"))); -} catch (e) { - if ((e instanceof SyntaxError) !== true) { - $ERROR('#1.2: new RegExp("[a--z]") throw SyntaxError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.5_Properties_of_the_RegExp_Constructor/S15.10.5.1_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.5_Properties_of_the_RegExp_Constructor/S15.10.5.1_A1.js deleted file mode 100644 index da2f275db..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.5_Properties_of_the_RegExp_Constructor/S15.10.5.1_A1.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.5.1_A1; -* @section: 15.10.5.1; -* @assertion: The RegExp has property prototype; -* @description: Checking RegExp.prototype property; -*/ - -//CHECK#1 -if (RegExp.hasOwnProperty('prototype') !== true) { - $ERROR('#1: RegExp.hasOwnProperty(\'prototype\') === true'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.5_Properties_of_the_RegExp_Constructor/S15.10.5.1_A2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.5_Properties_of_the_RegExp_Constructor/S15.10.5.1_A2.js deleted file mode 100644 index b57b64e1d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.5_Properties_of_the_RegExp_Constructor/S15.10.5.1_A2.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.5.1_A2; -* @section: 15.10.5.1; -* @assertion: The RegExp.prototype property has the attribute DontEnum; -* @description: Checking if enumerating the RegExp.prototype property fails; -*/ - -//CHECK#0 -if (RegExp.hasOwnProperty('prototype') !== true) { - $ERROR('#0: RegExp.hasOwnProperty(\'prototype\') === true'); -} - - //CHECK#1 -if (RegExp.propertyIsEnumerable('prototype') !== false) { - $ERROR('#1: RegExp.propertyIsEnumerable(\'prototype\') === false'); -} - - //CHECK#2 -count=0; -for (p in RegExp){ - if (p==="prototype") count++; -} - -if (count !== 0) { - $ERROR('#2: count=0; for (p in RegExp){ if (p==="prototype") count++; } count === 0. Actual: ' + (count)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.5_Properties_of_the_RegExp_Constructor/S15.10.5.1_A3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.5_Properties_of_the_RegExp_Constructor/S15.10.5.1_A3.js deleted file mode 100644 index d730323b5..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.5_Properties_of_the_RegExp_Constructor/S15.10.5.1_A3.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.5.1_A3; -* @section: 15.10.5.1; -* @assertion: The RegExp.prototype property has the attribute DontDelete; -* @description: Checking if deleting the RegExp.prototype property fails; -*/ - -//CHECK#0 -if (RegExp.hasOwnProperty('prototype') !== true) { - $FAIL('#0: RegExp.hasOwnProperty(\'prototype\') === true'); -} - -//CHECK#1 -if (delete RegExp.prototype !== false) { - $ERROR('#1: delete RegExp.prototype === false'); -} - -//CHECK#2 -if (RegExp.hasOwnProperty('prototype') !== true) { - $ERROR('#2: delete RegExp.prototype; RegExp.hasOwnProperty(\'prototype\') === true'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.5_Properties_of_the_RegExp_Constructor/S15.10.5.1_A4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.5_Properties_of_the_RegExp_Constructor/S15.10.5.1_A4.js deleted file mode 100644 index b4b4fac24..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.5_Properties_of_the_RegExp_Constructor/S15.10.5.1_A4.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.5.1_A4; -* @section: 15.10.5.1; -* @assertion: The RegExp.prototype property has the attribute ReadOnly; -* @description: Checking if varying the RegExp.prototype property fails; -*/ - -//CHECK#1 -if (RegExp.hasOwnProperty('prototype') !== true) { - $FAIL('#1: RegExp.hasOwnProperty(\'prototype\') === true'); -} - -__obj = RegExp.prototype; - -RegExp.prototype = function(){return "shifted";}; - -//CHECK#2 -if (RegExp.prototype !== __obj) { - $ERROR('#2: __obj = RegExp.prototype; RegExp.prototype = function(){return "shifted";}; RegExp.prototype === __obj. Actual: ' + (RegExp.prototype)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.5_Properties_of_the_RegExp_Constructor/S15.10.5_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.5_Properties_of_the_RegExp_Constructor/S15.10.5_A1.js deleted file mode 100644 index dae1cd45d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.5_Properties_of_the_RegExp_Constructor/S15.10.5_A1.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.5_A1; -* @section: 15.10.5; -* @assertion: RegExp constructor has length property whose value is 2; -* @description: Checking RegExp.length property; -*/ - - //CHECK#1 -if (RegExp.length !== 2) { - $ERROR('#1: RegExp.length === 2. Actual: ' + (RegExp.length)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.5_Properties_of_the_RegExp_Constructor/S15.10.5_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.5_Properties_of_the_RegExp_Constructor/S15.10.5_A2_T1.js deleted file mode 100644 index e9e887ed8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.5_Properties_of_the_RegExp_Constructor/S15.10.5_A2_T1.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.5_A2_T1; -* @section: 15.10.5; -* @assertion: The value of the internal [[Prototype]] property of the RegExp constructor is the Function prototype object; -* @description: Checking Function.prototype.isPrototypeOf(RegExp); -*/ - - //CHECK#1 -if (Function.prototype.isPrototypeOf(RegExp) !== true) { - $ERROR('#1: Function.prototype.isPrototypeOf(RegExp) === true'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.5_Properties_of_the_RegExp_Constructor/S15.10.5_A2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.5_Properties_of_the_RegExp_Constructor/S15.10.5_A2_T2.js deleted file mode 100644 index 65eba6867..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.5_Properties_of_the_RegExp_Constructor/S15.10.5_A2_T2.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.5_A2_T2; -* @section: 15.10.5; -* @assertion: The value of the internal [[Prototype]] property of the RegExp constructor is the Function prototype object; -* @description: Add new property to Function.prototype and then check this property of RegExp; -*/ - -Function.prototype.indicator = 1; - - //CHECK#1 -if (RegExp.indicator !== 1) { - $ERROR('#1: Function.prototype.indicator = 1; RegExp.indicator === 1. Actual: ' + (RegExp.indicator)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A10.js deleted file mode 100644 index 2a25b2d34..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A10.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.2_A10; -* @section: 15.10.6.2; -* @assertion: The RegExp.prototype.exec.length property has the attribute ReadOnly; -* @description: Checking if varying the RegExp.prototype.exec.length property fails; -*/ - -//CHECK#1 -if (RegExp.prototype.exec.hasOwnProperty('length') !== true) { - $FAIL('#1: RegExp.prototype.exec.hasOwnProperty(\'length\') === true'); -} - -__obj = RegExp.prototype.exec.length; - -RegExp.prototype.exec.length = function(){return "shifted";}; - -//CHECK#2 -if (RegExp.prototype.exec.length !== __obj) { - $ERROR('#2: __obj = RegExp.prototype.exec.length; RegExp.prototype.exec.length = function(){return "shifted";}; RegExp.prototype.exec.length === __obj. Actual: ' + (RegExp.prototype.exec.length)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A11.js deleted file mode 100644 index 82dbc26c2..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A11.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.2_A11; -* @section: 15.10.6.2; -* @assertion: The length property of the exec method is 1; -* @description: Checking RegExp.prototype.exec.length; -*/ - -//CHECK#1 -if (RegExp.prototype.exec.hasOwnProperty("length") !== true) { - $FAIL('#1: RegExp.prototype.exec.hasOwnProperty(\'length\') === true'); -} - -//CHECK#2 -if (RegExp.prototype.exec.length !== 1) { - $ERROR('#2: RegExp.prototype.exec.length === 1. Actual: ' + (RegExp.prototype.exec.length)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A1_T1.js deleted file mode 100644 index ea1c79e14..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A1_T1.js +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.2_A1_T1; -* @section: 15.10.6.2; -* @assertion: RegExp.prototype.exec(string) Performs a regular expression match of ToString(string) against the regular expression and -* returns an Array object containing the results of the match, or null if the string did not match; -* @description: String is "123" and RegExp is /1|12/; -*/ - -__executed = /1|12/.exec("123"); - -__expected = ["1"]; -__expected.index=0; -__expected.input="123"; - //CHECK#0 -if ((__executed instanceof Array) !== true) { - $ERROR('#0: __executed = /1|12/.exec("123"); (__executed instanceof Array) === true'); -} - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /1|12/.exec("123"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /1|12/.exec("123"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /1|12/.exec("123"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /1|12/.exec("123"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A1_T10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A1_T10.js deleted file mode 100644 index 7d1643c3d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A1_T10.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.2_A1_T10; -* @section: 15.10.6.2; -* @assertion: RegExp.prototype.exec(string) Performs a regular expression match of ToString(string) against the regular expression and -* returns an Array object containing the results of the match, or null if the string did not match; -* @description: String is 1.01 and RegExp is /1|12/; -*/ - -__executed = /1|12/.exec(1.01); - -__expected = ["1"]; -__expected.index=0; -__expected.input="1.01"; - -//CHECK#0 -if ((__executed instanceof Array) !== true) { - $ERROR('#0: __executed = /1|12/.exec(1.01); (__executed instanceof Array) === true'); -} - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /1|12/.exec(1.01); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /1|12/.exec(1.01); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /1|12/.exec(1.01); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /1|12/.exec(1.01); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A1_T11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A1_T11.js deleted file mode 100644 index f0007c8d9..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A1_T11.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.2_A1_T11; -* @section: 15.10.6.2; -* @assertion: RegExp.prototype.exec(string) Performs a regular expression match of ToString(string) against the regular expression and -* returns an Array object containing the results of the match, or null if the string did not match; -* @description: String is new Number(1.012) and RegExp is /2|12/; -*/ - -__executed = /2|12/.exec(new Number(1.012)); - -__expected = ["12"]; -__expected.index=3; -__expected.input="1.012"; - -//CHECK#0 -if ((__executed instanceof Array) !== true) { - $ERROR('#0: __executed = /2|12/.exec(new Number(1.012)); (__executed instanceof Array) === true'); -} - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /2|12/.exec(new Number(1.012)); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /2|12/.exec(new Number(1.012)); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /2|12/.exec(new Number(1.012)); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /2|12/.exec(new Number(1.012)); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A1_T12.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A1_T12.js deleted file mode 100644 index 115be87a3..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A1_T12.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.2_A1_T12; -* @section: 15.10.6.2; -* @assertion: RegExp.prototype.exec(string) Performs a regular expression match of ToString(string) against the regular expression and -* returns an Array object containing the results of the match, or null if the string did not match; -* @description: String is {toString:function(){return Math.PI;}} and RegExp is /\.14/; -*/ - -__executed = /\.14/.exec({toString:function(){return Math.PI}}); - -__expected = [".14"]; -__expected.index=1; -__expected.input=String(Math.PI); - -//CHECK#0 -if ((__executed instanceof Array) !== true) { - $ERROR('#0: __executed = /\\.14/.exec({toString:function(){return Math.PI}}); (__executed instanceof Array) === true'); -} - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /\\.14/.exec({toString:function(){return Math.PI}}); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /\\.14/.exec({toString:function(){return Math.PI}}); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /\\.14/.exec({toString:function(){return Math.PI}}); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /\\.14/.exec({toString:function(){return Math.PI}}); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A1_T13.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A1_T13.js deleted file mode 100644 index 8bddc32da..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A1_T13.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.2_A1_T13; -* @section: 15.10.6.2; -* @assertion: RegExp.prototype.exec(string) Performs a regular expression match of ToString(string) against the regular expression and -* returns an Array object containing the results of the match, or null if the string did not match; -* @description: String is true and RegExp is /t[a-b|q-s]/; -*/ - -__executed = /t[a-b|q-s]/.exec(true); - -__expected = ["tr"]; -__expected.index=0; -__expected.input="true"; - -//CHECK#0 -if ((__executed instanceof Array) !== true) { - $ERROR('#0: __executed = /t[a-b|q-s]/.exec(true); (__executed instanceof Array) === true'); -} - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /t[a-b|q-s]/.exec(true); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /t[a-b|q-s]/.exec(true); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /t[a-b|q-s]/.exec(true); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /t[a-b|q-s]/.exec(true); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A1_T14.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A1_T14.js deleted file mode 100644 index 543d9705f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A1_T14.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.2_A1_T14; -* @section: 15.10.6.2; -* @assertion: RegExp.prototype.exec(string) Performs a regular expression match of ToString(string) against the regular expression and -* returns an Array object containing the results of the match, or null if the string did not match; -* @description: String is new Boolean and RegExp is /AL|se/; -*/ - -__executed = /AL|se/.exec(new Boolean); - -__expected = ["se"]; -__expected.index=3; -__expected.input="false"; - -//CHECK#0 -if ((__executed instanceof Array) !== true) { - $ERROR('#0: __executed = /AL|se/.exec(new Boolean); (__executed instanceof Array) === true'); -} - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /AL|se/.exec(new Boolean); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /AL|se/.exec(new Boolean); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /AL|se/.exec(new Boolean); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /AL|se/.exec(new Boolean); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A1_T15.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A1_T15.js deleted file mode 100644 index 6807fcc03..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A1_T15.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.2_A1_T15; -* @section: 15.10.6.2; -* @assertion: RegExp.prototype.exec(string) Performs a regular expression match of ToString(string) against the regular expression and -* returns an Array object containing the results of the match, or null if the string did not match; -* @description: String is {toString:function(){return false;}} and RegExp is /LS/i; -*/ - -__executed = /LS/i.exec({toString:function(){return false}}); - -__expected = ["ls"]; -__expected.index=2; -__expected.input="false"; - -//CHECK#0 -if ((__executed instanceof Array) !== true) { - $ERROR('#0: __executed = /LS/i.exec({toString:function(){return false}}); (__executed instanceof Array) === true'); -} - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /LS/i.exec({toString:function(){return false}}); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /LS/i.exec({toString:function(){return false}}); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /LS/i.exec({toString:function(){return false}}); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /LS/i.exec({toString:function(){return false}}); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A1_T16.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A1_T16.js deleted file mode 100644 index 79a3fad5e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A1_T16.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.2_A1_T16; -* @section: 15.10.6.2; -* @assertion: RegExp.prototype.exec(string) Performs a regular expression match of ToString(string) against the regular expression and -* returns an Array object containing the results of the match, or null if the string did not match; -* @description: RegExp is /undefined/ and call exec() without arguments; -*/ - -__re = /undefined/.exec()[0]; -if (__re !== "undefined") { - $ERROR('#1: /undefined/.exec()[0] === "undefined". Actual: ' + (__re)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A1_T17.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A1_T17.js deleted file mode 100644 index 79373bd06..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A1_T17.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.2_A1_T17; -* @section: 15.10.6.2; -* @assertion: RegExp.prototype.exec(string) Performs a regular expression match of ToString(string) against the regular expression and -* returns an Array object containing the results of the match, or null if the string did not match; -* @description: String is null and RegExp is /ll|l/; -*/ - -__executed = /ll|l/.exec(null); - -__expected = ["ll"]; -__expected.index=2; -__expected.input="null"; - -//CHECK#0 -if ((__executed instanceof Array) !== true) { - $ERROR('#0: __executed = /ll|l/.exec(null); (__executed instanceof Array) === true'); -} - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /ll|l/.exec(null); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /ll|l/.exec(null); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /ll|l/.exec(null); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /ll|l/.exec(null); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A1_T18.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A1_T18.js deleted file mode 100644 index ee3953b81..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A1_T18.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.2_A1_T18; -* @section: 15.10.6.2; -* @assertion: RegExp.prototype.exec(string) Performs a regular expression match of ToString(string) against the regular expression and -* returns an Array object containing the results of the match, or null if the string did not match; -* @description: String is undefined and RegExp is /nd|ne/; -*/ - -__executed = /nd|ne/.exec(undefined); - -__expected = ["nd"]; -__expected.index=1; -__expected.input="undefined"; - -//CHECK#0 -if ((__executed instanceof Array) !== true) { - $ERROR('#0: __executed = /nd|ne/.exec(undefined); (__executed instanceof Array) === true'); -} - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /nd|ne/.exec(undefined); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /nd|ne/.exec(undefined); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /nd|ne/.exec(undefined); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /nd|ne/.exec(undefined); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A1_T19.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A1_T19.js deleted file mode 100644 index ba9c3f21e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A1_T19.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.2_A1_T19; -* @section: 15.10.6.2; -* @assertion: RegExp.prototype.exec(string) Performs a regular expression match of ToString(string) against the regular expression and -* returns an Array object containing the results of the match, or null if the string did not match; -* @description: String is void 0 and RegExp is /e{1}/; -*/ - -__executed = /e{1}/.exec(void 0); - -__expected = ["e"]; -__expected.index=3; -__expected.input="undefined"; - -//CHECK#0 -if ((__executed instanceof Array) !== true) { - $ERROR('#0: __executed = /e{1}/.exec(void 0); (__executed instanceof Array) === true'); -} - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /e{1}/.exec(void 0); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /e{1}/.exec(void 0); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /e{1}/.exec(void 0); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /e{1}/.exec(void 0); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A1_T2.js deleted file mode 100644 index 99f506d5e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A1_T2.js +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.2_A1_T2; -* @section: 15.10.6.2; -* @assertion: RegExp.prototype.exec(string) Performs a regular expression match of ToString(string) against the regular expression and -* returns an Array object containing the results of the match, or null if the string did not match; -* @description: String is new String("123") and RegExp is /((1)|(12))((3)|(23))/; -*/ - -with(/((1)|(12))((3)|(23))/){ - __executed = exec(new String("123")); -} - -__expected = ["123", "1", "1", undefined, "23", undefined, "23"]; -__expected.index=0; -__expected.input="123"; - -//CHECK#0 -if ((__executed instanceof Array) !== true) { - $ERROR('#0: with(/((1)|(12))((3)|(23))/){__executed = exec(new String("123"));} (__executed instanceof Array) === true'); -} - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: with(/((1)|(12))((3)|(23))/){__executed = exec(new String("123"));} __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: with(/((1)|(12))((3)|(23))/){__executed = exec(new String("123"));} __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: with(/((1)|(12))((3)|(23))/){__executed = exec(new String("123"));} __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: with(/((1)|(12))((3)|(23))/){__executed = exec(new String("123"));} __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A1_T20.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A1_T20.js deleted file mode 100644 index fd431ea82..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A1_T20.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.2_A1_T20; -* @section: 15.10.6.2; -* @assertion: RegExp.prototype.exec(string) Performs a regular expression match of ToString(string) against the regular expression and -* returns an Array object containing the results of the match, or null if the string did not match; -* @description: String is x and RegExp is /[a-f]d/, where x is undefined variable; -*/ - -__executed = /[a-f]d/.exec(x); - -__expected = ["ed"]; -__expected.index=7; -__expected.input="undefined"; - -//CHECK#0 -if ((__executed instanceof Array) !== true) { - $ERROR('#0: __executed = /[a-f]d/.exec(x); var x; (__executed instanceof Array) === true'); -} - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /[a-f]d/.exec(x); var x; __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /[a-f]d/.exec(x); var x; __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /[a-f]d/.exec(x); var x; __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /[a-f]d/.exec(x); var x; __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - -var x; diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A1_T21.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A1_T21.js deleted file mode 100644 index 5b538e9b6..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A1_T21.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.2_A1_T21; -* @section: 15.10.6.2; -* @assertion: RegExp.prototype.exec(string) Performs a regular expression match of ToString(string) against the regular expression and -* returns an Array object containing the results of the match, or null if the string did not match; -* @description: String is function(){}() and RegExp is /[a-z]n/; -*/ - -__executed = /[a-z]n/.exec(function(){}()); - -__expected = ["un"]; -__expected.index=0; -__expected.input="undefined"; - -//CHECK#0 -if ((__executed instanceof Array) !== true) { - $ERROR('#0: __executed = /[a-z]n/.exec(function(){}()); (__executed instanceof Array) === true'); -} - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /[a-z]n/.exec(function(){}()); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /[a-z]n/.exec(function(){}()); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /[a-z]n/.exec(function(){}()); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /[a-z]n/.exec(function(){}()); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A1_T3.js deleted file mode 100644 index 39988e585..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A1_T3.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.2_A1_T3; -* @section: 15.10.6.2; -* @assertion: RegExp.prototype.exec(string) Performs a regular expression match of ToString(string) against the regular expression and -* returns an Array object containing the results of the match, or null if the string did not match; -* @description: String is new Object("abcdefghi") and RegExp is /a[a-z]{2,4}/; -*/ - -__executed = /a[a-z]{2,4}/.exec(new Object("abcdefghi")); - -__expected = ["abcde"]; -__expected.index=0; -__expected.input="abcdefghi"; - -//CHECK#0 -if ((__executed instanceof Array) !== true) { - $ERROR('#0: __executed = /a[a-z]{2,4}/.exec(new Object("abcdefghi")); (__executed instanceof Array) === true'); -} - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /a[a-z]{2,4}/.exec(new Object("abcdefghi")); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /a[a-z]{2,4}/.exec(new Object("abcdefghi")); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /a[a-z]{2,4}/.exec(new Object("abcdefghi")); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /a[a-z]{2,4}/.exec(new Object("abcdefghi")); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A1_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A1_T4.js deleted file mode 100644 index 42fc37e27..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A1_T4.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.2_A1_T4; -* @section: 15.10.6.2; -* @assertion: RegExp.prototype.exec(string) Performs a regular expression match of ToString(string) against the regular expression and -* returns an Array object containing the results of the match, or null if the string did not match; -* @description: String is {toString:function(){return "abcdefghi";}} and RegExp is /a[a-z]{2,4}?/; -*/ - -__executed = /a[a-z]{2,4}?/.exec({toString:function(){return "abcdefghi"}}); - -__expected = ["abc"]; -__expected.index=0; -__expected.input="abcdefghi"; - -//CHECK#0 -if ((__executed instanceof Array) !== true) { - $ERROR('#0: __executed = /a[a-z]{2,4}?/.exec({toString:function(){return "abcdefghi"}}); (__executed instanceof Array) === true'); -} - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /a[a-z]{2,4}?/.exec({toString:function(){return "abcdefghi"}}); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /a[a-z]{2,4}?/.exec({toString:function(){return "abcdefghi"}}); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /a[a-z]{2,4}?/.exec({toString:function(){return "abcdefghi"}}); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /a[a-z]{2,4}?/.exec({toString:function(){return "abcdefghi"}}); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A1_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A1_T5.js deleted file mode 100644 index d11ada895..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A1_T5.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.2_A1_T5; -* @section: 15.10.6.2; -* @assertion: RegExp.prototype.exec(string) Performs a regular expression match of ToString(string) against the regular expression and -* returns an Array object containing the results of the match, or null if the string did not match; -* @description: String is {toString:function(){return {};}, valueOf:function(){return "aabaac";}} and RegExp is /(aa|aabaac|ba|b|c)* /; -*/ - -__executed = /(aa|aabaac|ba|b|c)*/.exec({toString:function(){return {};}, valueOf:function(){return "aabaac";}}); - -__expected = ["aaba", "ba"]; -__expected.index=0; -__expected.input="aabaac"; - -//CHECK#0 -if ((__executed instanceof Array) !== true) { - $ERROR('#0: __executed = /(aa|aabaac|ba|b|c)*/.exec({toString:function(){return {};}, valueOf:function(){return "aabaac";}}); (__executed instanceof Array) === true'); -} - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /(aa|aabaac|ba|b|c)*/.exec({toString:function(){return {};}, valueOf:function(){return "aabaac";}}); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /(aa|aabaac|ba|b|c)*/.exec({toString:function(){return {};}, valueOf:function(){return "aabaac";}}); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /(aa|aabaac|ba|b|c)*/.exec({toString:function(){return {};}, valueOf:function(){return "aabaac";}}); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /(aa|aabaac|ba|b|c)*/.exec({toString:function(){return {};}, valueOf:function(){return "aabaac";}}); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A1_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A1_T6.js deleted file mode 100644 index b38b1ce88..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A1_T6.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.2_A1_T6; -* @section: 15.10.6.2; -* @assertion: RegExp.prototype.exec(string) Performs a regular expression match of ToString(string) against the regular expression and -* returns an Array object containing the results of the match, or null if the string did not match; -* @description: String is (function(){return "zaacbbbcac"})() and RegExp is /(z)((a+)?(b+)?(c))* /; -*/ - -__executed = /(z)((a+)?(b+)?(c))*/.exec((function(){return "zaacbbbcac"})()); - -__expected = ["zaacbbbcac", "z", "ac", "a", undefined, "c"]; -__expected.index=0; -__expected.input="zaacbbbcac"; - -//CHECK#0 -if ((__executed instanceof Array) !== true) { - $ERROR('#0: __executed = /(z)((a+)?(b+)?(c))*/.exec((function(){return "zaacbbbcac"})()); (__executed instanceof Array) === true'); -} - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __executed = /(z)((a+)?(b+)?(c))*/.exec((function(){return "zaacbbbcac"})()); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __executed = /(z)((a+)?(b+)?(c))*/.exec((function(){return "zaacbbbcac"})()); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __executed = /(z)((a+)?(b+)?(c))*/.exec((function(){return "zaacbbbcac"})()); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __executed = /(z)((a+)?(b+)?(c))*/.exec((function(){return "zaacbbbcac"})()); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A1_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A1_T7.js deleted file mode 100644 index fd0058a62..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A1_T7.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.2_A1_T7; -* @section: 15.10.6.2; -* @assertion: RegExp.prototype.exec(string) Performs a regular expression match of ToString(string) against the regular expression and -* returns an Array object containing the results of the match, or null if the string did not match; -* @description: String is {toString:function(){throw "intostr";}} and RegExp is /[a-z]/; -*/ - - -//CHECK#1 -try { - $ERROR('#1.1: /[a-z]/.exec({toString:function(){throw "intostr"}}) throw "intostr". Actual: ' + (/[a-z]/.exec({toString:function(){throw "intostr"}}))); -} catch (e) { - if (e !== "intostr") { - $ERROR('#1.2: /[a-z]/.exec({toString:function(){throw "intostr"}}) throw "intostr". Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A1_T8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A1_T8.js deleted file mode 100644 index cf7b47af1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A1_T8.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.2_A1_T8; -* @section: 15.10.6.2; -* @assertion: RegExp.prototype.exec(string) Performs a regular expression match of ToString(string) against the regular expression and -* returns an Array object containing the results of the match, or null if the string did not match; -* @description: String is {toString:void 0, valueOf:function(){throw "invalof";}} and RegExp is /[a-z]/; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: /[a-z]/.exec({toString:void 0, valueOf:function(){throw "invalof"}}) throw "invalof". Actual: ' + (/[a-z]/.exec({toString:void 0, valueOf:function(){throw "invalof"}}))); -} catch (e) { - if (e !== "invalof") { - $ERROR('#1.2: /[a-z]/.exec({toString:void 0, valueOf:function(){throw "invalof"}}) throw "invalof". Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A1_T9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A1_T9.js deleted file mode 100644 index 3a90f4135..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A1_T9.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.2_A1_T9; -* @section: 15.10.6.2; -* @assertion: RegExp.prototype.exec(string) Performs a regular expression match of ToString(string) against the regular expression and -* returns an Array object containing the results of the match, or null if the string did not match; -* @description: String is undefined variable and RegExp is /1|12/; -*/ - -var __string; - -//CHECK#1 -__re = /1|12/; -if (__re.exec(__string) !== null) { - $ERROR('#1: var __string; /1|12/.exec(__string) === null; function __string(){}. Actual: ' + (__re)); -} - -function __string(){}; diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A2_T1.js deleted file mode 100644 index 94bc7623d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A2_T1.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.2_A2_T1; -* @section: 15.10.6.2; -* @assertion: A TypeError exception is thrown if the this value is not an object for which the value of the internal [[Class]] property is "RegExp"; -* @description: The internal [[Class]] property is "Object"; -*/ - -__instance = new Object; - -__instance.exec = RegExp.prototype.exec; - -//CHECK#1 -try { - $ERROR('#1.1: __instance = new Object; __instance.exec = RegExp.prototype.exec; __instance.exec("message to investigate"). Actual: ' + (__instance.exec("message to investigate"))); -} catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1.2: __instance = new Object; __instance.exec = RegExp.prototype.exec. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A2_T10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A2_T10.js deleted file mode 100644 index 7f4dbf746..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A2_T10.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.2_A2_T10; -* @section: 15.10.6.2; -* @assertion: A TypeError exception is thrown if the this value is not an object for which the value of the internal [[Class]] property is "RegExp"; -* @description: The tested object is undefined; -*/ - -exec = RegExp.prototype.exec; - -//CHECK#1 -try { - $ERROR('#1.1: exec = RegExp.prototype.exec; exec("message to investigate"). Actual: ' + (exec("message to investigate"))); -} catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1.2: exec = RegExp.prototype.exec; exec("message to investigate"). Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A2_T2.js deleted file mode 100644 index e5e3aea1b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A2_T2.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.2_A2_T2; -* @section: 15.10.6.2; -* @assertion: A TypeError exception is thrown if the this value is not an object for which the value of the internal [[Class]] property is "RegExp"; -* @description: The tested object is Math; -*/ - -__instance = Math; - -__instance.exec = RegExp.prototype.exec; - -//CHECK#1 -try { - with(__instance) exec("message to investigate"); - $ERROR('#1.1: __instance = Math; __instance.exec = RegExp.prototype.exec; with(__instance) exec("message to investigate")'); -} catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1.2: __instance = Math; __instance.exec = RegExp.prototype.exec; with(__instance) exec("message to investigate"). Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A2_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A2_T3.js deleted file mode 100644 index e06e2c075..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A2_T3.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.2_A2_T3; -* @section: 15.10.6.2; -* @assertion: A TypeError exception is thrown if the this value is not an object for which the value of the internal [[Class]] property is "RegExp"; -* @description: The tested object is function object; -*/ - -__instance.exec = RegExp.prototype.exec; - -//CHECK#1 -try { - with(__instance) exec("message to investigate"); - $ERROR('#1.1: __instance.exec = RegExp.prototype.exec; with(__instance) exec("message to investigate"); function __instance(){}'); -} catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1.2: __instance.exec = RegExp.prototype.exec; with(__instance) exec("message to investigate"); function __instance(){}. Actual: ' + (e)); - } -} - -function __instance(){}; diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A2_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A2_T4.js deleted file mode 100644 index 9bddf8ae2..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A2_T4.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.2_A2_T4; -* @section: 15.10.6.2; -* @assertion: A TypeError exception is thrown if the this value is not an object for which the value of the internal [[Class]] property is "RegExp"; -* @description: The tested object is new String("[a-b]"); -*/ - -__instance = new String("[a-b]"); - -__instance.exec = RegExp.prototype.exec; - -//CHECK#1 -with(__instance){ - try { - $ERROR('#1.1: __instance = new String("[a-b]"); __instance.exec = RegExp.prototype.exec; exec("message to investigate"). Actual: ' + (exec("message to investigate"))); - } catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1.2: __instance = new String("[a-b]"); __instance.exec = RegExp.prototype.exec; exec("message to investigate"). Actual: ' + (e)); - } - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A2_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A2_T5.js deleted file mode 100644 index 3aac92f1d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A2_T5.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.2_A2_T5; -* @section: 15.10.6.2; -* @assertion: A TypeError exception is thrown if the this value is not an object for which the value of the internal [[Class]] property is "RegExp"; -* @description: The tested object is new Boolean(false); -*/ - -__instance = new Boolean(false); - -__instance.exec = RegExp.prototype.exec; - -//CHECK#1 -with(__instance) { - try { - $ERROR('#1.1: __instance = new Boolean(false); __instance.exec = RegExp.prototype.exec; exec("message to investigate"). Actual: ' + (exec("message to investigate"))); - } catch (e) { - if ((e instanceof TypeError !== true)) { - $ERROR('#1.2: __instance = new Boolean(false); __instance.exec = RegExp.prototype.exec; exec("message to investigate"). Actual: ' + (e)); - } - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A2_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A2_T6.js deleted file mode 100644 index 7ac059ad0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A2_T6.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.2_A2_T6; -* @section: 15.10.6.2; -* @assertion: A TypeError exception is thrown if the this value is not an object for which the value of the internal [[Class]] property is "RegExp"; -* @description: The tested object is new Number(1.0); -*/ - -__instance = new Number(1.0); - -__instance.exec = RegExp.prototype.exec; - -//CHECK#1 -try { - $ERROR('#1.1: __instance = new Number(1.0); __instance.exec = RegExp.prototype.exec; __instance["exec"]("message to investigate"). Actual: ' + (__instance["exec"]("message to investigate"))); -} catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1.2: __instance = new Number(1.0); __instance.exec = RegExp.prototype.exec; __instance["exec"]("message to investigate"). Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A2_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A2_T7.js deleted file mode 100644 index 8dd2d21bf..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A2_T7.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.2_A2_T7; -* @section: 15.10.6.2; -* @assertion: A TypeError exception is thrown if the this value is not an object for which the value of the internal [[Class]] property is "RegExp"; -* @description: The tested object is false; -*/ - -__instance = false; - -Object.prototype.exec = RegExp.prototype.exec; - -//CHECK#1 -try { - $ERROR('#1.1: __instance = false; Object.prototype.exec = RegExp.prototype.exec; __instance.exec("message to investigate"). Actual: ' + (__instance.exec("message to investigate"))); -} catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1.2: __instance = false; Object.prototype.exec = RegExp.prototype.exec; __instance.exec("message to investigate"). Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A2_T8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A2_T8.js deleted file mode 100644 index 8ee285f7c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A2_T8.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.2_A2_T8; -* @section: 15.10.6.2; -* @assertion: A TypeError exception is thrown if the this value is not an object for which the value of the internal [[Class]] property is "RegExp"; -* @description: The tested object is "."; -*/ - -__instance = "."; - -Object.prototype.exec = RegExp.prototype.exec; - -//CHECK#1 -try { - $ERROR('#1.1: __instance = "."; Object.prototype.exec = RegExp.prototype.exec; __instance.exec("message to investigate"). Actual: ' + (__instance.exec("message to investigate"))); -} catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1.2: __instance = "."; Object.prototype.exec = RegExp.prototype.exec; __instance.exec("message to investigate"). Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A2_T9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A2_T9.js deleted file mode 100644 index af4c400d6..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A2_T9.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.2_A2_T9; -* @section: 15.10.6.2; -* @assertion: A TypeError exception is thrown if the this value is not an object for which the value of the internal [[Class]] property is "RegExp"; -* @description: The tested object is 1.0; -*/ - -__instance = 1.0; - -Object.prototype.exec = RegExp.prototype.exec; - -//CHECK#1 -try { - $ERROR('#1.1: __instance = 1.0; Object.prototype.exec = RegExp.prototype.exec; __instance.exec("message to investigate"). Actual: ' + (__instance.exec("message to investigate"))); -} catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1.2: __instance = 1.0; Object.prototype.exec = RegExp.prototype.exec; __instance.exec("message to investigate"). Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A3_T1.js deleted file mode 100644 index 996aafa8d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A3_T1.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.2_A3_T1; -* @section: 15.10.6.2, 13.2; -* @assertion: RegExp.prototype.exec behavior depends on global property. -* If global is true and lastIndex not changed manually, -* next exec calling start to match from position where current match finished; -* @description: RegExp is /(?:ab|cd)\d?/g and tested string is "ab cd2 ab34 cd"; -*/ - -__re = /(?:ab|cd)\d?/g; - -__matched = []; - -__expected = ["ab", "cd2", "ab3", "cd"]; - -do{ - __executed = __re.exec("ab cd2 ab34 cd"); - if (__executed !== null) { - __matched.push(__executed[0]); - } else { - break; - } -}while(true); - -//CHECK#1 -if (__expected.length !== __matched.length) { - $ERROR('#1: __executed = /(?:ab|cd)\\d?/g.exec("ab cd2 ab34 cd"); __matched.length === ' + (__expected.length) + '.Actual: ' + (__matched.length)); -} - -//CHECK#2 -for(var index=0; index<__expected.length; index++) { - if (__expected[index] !== __matched[index]) { - $ERROR('#2: __executed = /(?:ab|cd)\\d?/g.exec("ab cd2 ab34 cd"); __matched[' + index + '] === ' + __expected[index] + '. Actual: ' + __matched[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A3_T2.js deleted file mode 100644 index 8fab0ae55..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A3_T2.js +++ /dev/null @@ -1,155 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.2_A3_T2; -* @section: 15.10.6.2, 13.2; -* @assertion: RegExp.prototype.exec behavior depends on global property. -* If global is true and lastIndex not changed manually, -* next exec calling start to match from position where current match finished; -* @description: RegExp is /[Nn]evermore/g and tested string is very long string; -*/ - -__the__raven = " Once upon a midnight dreary, while I pondered weak and weary," + - "Over many a quaint and curious volume of forgotten lore," + - "While I nodded, nearly napping, suddenly there came a tapping," + - "As of some one gently rapping, rapping at my chamber door." + - "`'Tis some visitor,' I muttered, `tapping at my chamber door -" + - "Only this, and nothing more.'" + - "Ah, distinctly I remember it was in the bleak December," + - "And each separate dying ember wrought its ghost upon the floor." + - "Eagerly I wished the morrow; - vainly I had sought to borrow" + - "From my books surcease of sorrow - sorrow for the lost Lenore -" + - "For the rare and radiant maiden whom the angels named Lenore -" + - "Nameless here for evermore." + - "\n" + - "And the silken sad uncertain rustling of each purple curtain" + - "Thrilled me - filled me with fantastic terrors never felt before;" + - "So that now, to still the beating of my heart, I stood repeating" + - "`'Tis some visitor entreating entrance at my chamber door -" + - "Some late visitor entreating entrance at my chamber door; -" + - "This it is, and nothing more,'" + - "Presently my soul grew stronger; hesitating then no longer," + - "`Sir,' said I, `or Madam, truly your forgiveness I implore;" + - "But the fact is I was napping, and so gently you came rapping," + - "And so faintly you came tapping, tapping at my chamber door," + - "That I scarce was sure I heard you' - here I opened wide the door; -" + - "Darkness there, and nothing more." + - "\n" + - "Deep into that darkness peering, long I stood there wondering, fearing," + - "Doubting, dreaming dreams no mortal ever dared to dream before" + - "But the silence was unbroken, and the darkness gave no token," + - "And the only word there spoken was the whispered word, `Lenore!'" + - "This I whispered, and an echo murmured back the word, `Lenore!'" + - "Merely this and nothing more." + - "\n" + - "Back into the chamber turning, all my soul within me burning," + - "Soon again I heard a tapping somewhat louder than before." + - "`Surely,' said I, `surely that is something at my window lattice;" + - "Let me see then, what thereat is, and this mystery explore -" + - "Let my heart be still a moment and this mystery explore; -" + - "'Tis the wind and nothing more!'" + - "\n" + - "Open here I flung the shutter, when, with many a flirt and flutter," + - "In there stepped a stately raven of the saintly days of yore." + - "Not the least obeisance made he; not a minute stopped or stayed he;" + - "But, with mien of lord or lady, perched above my chamber door -" + - "Perched upon a bust of Pallas just above my chamber door -" + - "Perched, and sat, and nothing more." + - "\n" + - "Then this ebony bird beguiling my sad fancy into smiling," + - "By the grave and stern decorum of the countenance it wore," + - "`Though thy crest be shorn and shaven, thou,' I said, `art sure no craven." + - "Ghastly grim and ancient raven wandering from the nightly shore -" + - "Tell me what thy lordly name is on the Night's Plutonian shore!'" + - "Quoth the raven, `Nevermore.'" + - "-n" + - "Much I marvelled this ungainly fowl to hear discourse so plainly," + - "Though its answer little meaning - little relevancy bore;" + - "For we cannot help agreeing that no living human being" + - "Ever yet was blessed with seeing bird above his chamber door -" + - "Bird or beast above the sculptured bust above his chamber door," + - "With such name as `Nevermore.'" + - "\n" + - "But the raven, sitting lonely on the placid bust, spoke only," + - "That one word, as if his soul in that one word he did outpour." + - "Nothing further then he uttered - not a feather then he fluttered -" + - "Till I scarcely more than muttered `Other friends have flown before -" + - "On the morrow he will leave me, as my hopes have flown before.'" + - "Then the bird said, `Nevermore.'" + - "\n" + - "Startled at the stillness broken by reply so aptly spoken," + - "`Doubtless,' said I, `what it utters is its only stock and store," + - "Caught from some unhappy master whom unmerciful disaster" + - "Followed fast and followed faster till his songs one burden bore -" + - "Till the dirges of his hope that melancholy burden bore" + - "Of \"Never-nevermore.\"'" + - "\n" + - "But the raven still beguiling all my sad soul into smiling," + - "Straight I wheeled a cushioned seat in front of bird and bust and door;" + - "Then, upon the velvet sinking, I betook myself to linking" + - "Fancy unto fancy, thinking what this ominous bird of yore -" + - "What this grim, ungainly, ghastly, gaunt, and ominous bird of yore" + - "Meant in croaking `Nevermore.'" + - "\n" + - "This I sat engaged in guessing, but no syllable expressing" + - "To the fowl whose fiery eyes now burned into my bosom's core;" + - "This and more I sat divining, with my head at ease reclining" + - "On the cushion's velvet lining that the lamp-light gloated o'er," + - "But whose velvet violet lining with the lamp-light gloating o'er," + - "She shall press, ah, nevermore!" + - "\n" + - "Then, methought, the air grew denser, perfumed from an unseen censer" + - "Swung by Seraphim whose foot-falls tinkled on the tufted floor." + - "`Wretch,' I cried, `thy God hath lent thee - by these angels he has sent thee" + - "Respite - respite and nepenthe from thy memories of Lenore!" + - "Quaff, oh quaff this kind nepenthe, and forget this lost Lenore!'" + - "Quoth the raven, `Nevermore.'" + - "\n" + - "`Prophet!' said I, `thing of evil! - prophet still, if bird or devil! -" + - "Whether tempter sent, or whether tempest tossed thee here ashore," + - "Desolate yet all undaunted, on this desert land enchanted -" + - "On this home by horror haunted - tell me truly, I implore -" + - "Is there - is there balm in Gilead? - tell me - tell me, I implore!'" + - "Quoth the raven, `Nevermore.'" + - "\n" + - "`Prophet!' said I, `thing of evil! - prophet still, if bird or devil!" + - "By that Heaven that bends above us - by that God we both adore -" + - "Tell this soul with sorrow laden if, within the distant Aidenn," + - "It shall clasp a sainted maiden whom the angels named Lenore -" + - "Clasp a rare and radiant maiden, whom the angels named Lenore?'" + - "Quoth the raven, `Nevermore.'" + - "\n" + - "`Be that word our sign of parting, bird or fiend!' I shrieked upstarting -" + - "`Get thee back into the tempest and the Night's Plutonian shore!" + - "Leave no black plume as a token of that lie thy soul hath spoken!" + - "Leave my loneliness unbroken! - quit the bust above my door!" + - "Take thy beak from out my heart, and take thy form from off my door!'" + - "Quoth the raven, `Nevermore.'" + - "\n" + - "And the raven, never flitting, still is sitting, still is sitting" + - "On the pallid bust of Pallas just above my chamber door;" + - "And his eyes have all the seeming of a demon's that is dreaming," + - "And the lamp-light o'er him streaming throws his shadow on the floor;" + - "And my soul from out that shadow that lies floating on the floor" + - "Shall be lifted - nevermore!" - -NEVERMORE=11; - -__re = /[Nn]evermore/g; -__matched=0; - -do{ - __executed = __re.exec(__the__raven); - if (__executed !== null) { - __matched++; - } else { - break; - } -}while(1); - -//CHECK#1 -if (__matched !== NEVERMORE) { - $ERROR('#1: __re = /[Nn]evermore/g; __executed = __re.exec(__the__raven)'+__matched); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A3_T3.js deleted file mode 100644 index 568684e9b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A3_T3.js +++ /dev/null @@ -1,155 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.2_A3_T3; -* @section: 15.10.6.2, 13.2; -* @assertion: RegExp.prototype.exec behavior depends on global property. -* If global is true and lastIndex not changed manually, -* next exec calling start to match from position where current match finished; -* @description: RegExp is /[Nn]?evermore/g and tested string is very long string; -*/ - -__the__raven = " Once upon a midnight dreary, while I pondered weak and weary," + - "Over many a quaint and curious volume of forgotten lore," + - "While I nodded, nearly napping, suddenly there came a tapping," + - "As of some one gently rapping, rapping at my chamber door." + - "`'Tis some visitor,' I muttered, `tapping at my chamber door -" + - "Only this, and nothing more.'" + - "Ah, distinctly I remember it was in the bleak December," + - "And each separate dying ember wrought its ghost upon the floor." + - "Eagerly I wished the morrow; - vainly I had sought to borrow" + - "From my books surcease of sorrow - sorrow for the lost Lenore -" + - "For the rare and radiant maiden whom the angels named Lenore -" + - "Nameless here for evermore." + - "\n" + - "And the silken sad uncertain rustling of each purple curtain" + - "Thrilled me - filled me with fantastic terrors never felt before;" + - "So that now, to still the beating of my heart, I stood repeating" + - "`'Tis some visitor entreating entrance at my chamber door -" + - "Some late visitor entreating entrance at my chamber door; -" + - "This it is, and nothing more,'" + - "Presently my soul grew stronger; hesitating then no longer," + - "`Sir,' said I, `or Madam, truly your forgiveness I implore;" + - "But the fact is I was napping, and so gently you came rapping," + - "And so faintly you came tapping, tapping at my chamber door," + - "That I scarce was sure I heard you' - here I opened wide the door; -" + - "Darkness there, and nothing more." + - "\n" + - "Deep into that darkness peering, long I stood there wondering, fearing," + - "Doubting, dreaming dreams no mortal ever dared to dream before" + - "But the silence was unbroken, and the darkness gave no token," + - "And the only word there spoken was the whispered word, `Lenore!'" + - "This I whispered, and an echo murmured back the word, `Lenore!'" + - "Merely this and nothing more." + - "\n" + - "Back into the chamber turning, all my soul within me burning," + - "Soon again I heard a tapping somewhat louder than before." + - "`Surely,' said I, `surely that is something at my window lattice;" + - "Let me see then, what thereat is, and this mystery explore -" + - "Let my heart be still a moment and this mystery explore; -" + - "'Tis the wind and nothing more!'" + - "\n" + - "Open here I flung the shutter, when, with many a flirt and flutter," + - "In there stepped a stately raven of the saintly days of yore." + - "Not the least obeisance made he; not a minute stopped or stayed he;" + - "But, with mien of lord or lady, perched above my chamber door -" + - "Perched upon a bust of Pallas just above my chamber door -" + - "Perched, and sat, and nothing more." + - "\n" + - "Then this ebony bird beguiling my sad fancy into smiling," + - "By the grave and stern decorum of the countenance it wore," + - "`Though thy crest be shorn and shaven, thou,' I said, `art sure no craven." + - "Ghastly grim and ancient raven wandering from the nightly shore -" + - "Tell me what thy lordly name is on the Night's Plutonian shore!'" + - "Quoth the raven, `Nevermore.'" + - "-n" + - "Much I marvelled this ungainly fowl to hear discourse so plainly," + - "Though its answer little meaning - little relevancy bore;" + - "For we cannot help agreeing that no living human being" + - "Ever yet was blessed with seeing bird above his chamber door -" + - "Bird or beast above the sculptured bust above his chamber door," + - "With such name as `Nevermore.'" + - "\n" + - "But the raven, sitting lonely on the placid bust, spoke only," + - "That one word, as if his soul in that one word he did outpour." + - "Nothing further then he uttered - not a feather then he fluttered -" + - "Till I scarcely more than muttered `Other friends have flown before -" + - "On the morrow he will leave me, as my hopes have flown before.'" + - "Then the bird said, `Nevermore.'" + - "\n" + - "Startled at the stillness broken by reply so aptly spoken," + - "`Doubtless,' said I, `what it utters is its only stock and store," + - "Caught from some unhappy master whom unmerciful disaster" + - "Followed fast and followed faster till his songs one burden bore -" + - "Till the dirges of his hope that melancholy burden bore" + - "Of \"Never-nevermore.\"'" + - "\n" + - "But the raven still beguiling all my sad soul into smiling," + - "Straight I wheeled a cushioned seat in front of bird and bust and door;" + - "Then, upon the velvet sinking, I betook myself to linking" + - "Fancy unto fancy, thinking what this ominous bird of yore -" + - "What this grim, ungainly, ghastly, gaunt, and ominous bird of yore" + - "Meant in croaking `Nevermore.'" + - "\n" + - "This I sat engaged in guessing, but no syllable expressing" + - "To the fowl whose fiery eyes now burned into my bosom's core;" + - "This and more I sat divining, with my head at ease reclining" + - "On the cushion's velvet lining that the lamp-light gloated o'er," + - "But whose velvet violet lining with the lamp-light gloating o'er," + - "She shall press, ah, nevermore!" + - "\n" + - "Then, methought, the air grew denser, perfumed from an unseen censer" + - "Swung by Seraphim whose foot-falls tinkled on the tufted floor." + - "`Wretch,' I cried, `thy God hath lent thee - by these angels he has sent thee" + - "Respite - respite and nepenthe from thy memories of Lenore!" + - "Quaff, oh quaff this kind nepenthe, and forget this lost Lenore!'" + - "Quoth the raven, `Nevermore.'" + - "\n" + - "`Prophet!' said I, `thing of evil! - prophet still, if bird or devil! -" + - "Whether tempter sent, or whether tempest tossed thee here ashore," + - "Desolate yet all undaunted, on this desert land enchanted -" + - "On this home by horror haunted - tell me truly, I implore -" + - "Is there - is there balm in Gilead? - tell me - tell me, I implore!'" + - "Quoth the raven, `Nevermore.'" + - "\n" + - "`Prophet!' said I, `thing of evil! - prophet still, if bird or devil!" + - "By that Heaven that bends above us - by that God we both adore -" + - "Tell this soul with sorrow laden if, within the distant Aidenn," + - "It shall clasp a sainted maiden whom the angels named Lenore -" + - "Clasp a rare and radiant maiden, whom the angels named Lenore?'" + - "Quoth the raven, `Nevermore.'" + - "\n" + - "`Be that word our sign of parting, bird or fiend!' I shrieked upstarting -" + - "`Get thee back into the tempest and the Night's Plutonian shore!" + - "Leave no black plume as a token of that lie thy soul hath spoken!" + - "Leave my loneliness unbroken! - quit the bust above my door!" + - "Take thy beak from out my heart, and take thy form from off my door!'" + - "Quoth the raven, `Nevermore.'" + - "\n" + - "And the raven, never flitting, still is sitting, still is sitting" + - "On the pallid bust of Pallas just above my chamber door;" + - "And his eyes have all the seeming of a demon's that is dreaming," + - "And the lamp-light o'er him streaming throws his shadow on the floor;" + - "And my soul from out that shadow that lies floating on the floor" + - "Shall be lifted - nevermore!" - -NEVERMORE_AND_EVERMORE=12; - -__re = /[Nn]?evermore/g; -__matched=0; - -do{ - __executed = __re.exec(__the__raven); - if (__executed !== null) { - __matched++; - } else { - break; - } -}while(1); - -//CHECK#1 -if (__matched !== NEVERMORE_AND_EVERMORE) { - $ERROR('#1: __re = /[Nn]?evermore/g; __executed = __re.exec(__the__raven)'+__matched); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A3_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A3_T4.js deleted file mode 100644 index 1cffd6ce1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A3_T4.js +++ /dev/null @@ -1,155 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.2_A3_T4; -* @section: 15.10.6.2, 13.2; -* @assertion: RegExp.prototype.exec behavior depends on global property. -* If global is true and lastIndex not changed manually, -* next exec calling start to match from position where current match finished; -* @description: RegExp is /([Nn]?ever|([Nn]othing\s{1,}))more/g and tested string is very long string; -*/ - -__the__raven = " Once upon a midnight dreary, while I pondered weak and weary," + - "Over many a quaint and curious volume of forgotten lore," + - "While I nodded, nearly napping, suddenly there came a tapping," + - "As of some one gently rapping, rapping at my chamber door." + - "`'Tis some visitor,' I muttered, `tapping at my chamber door -" + - "Only this, and nothing more.'" + - "Ah, distinctly I remember it was in the bleak December," + - "And each separate dying ember wrought its ghost upon the floor." + - "Eagerly I wished the morrow; - vainly I had sought to borrow" + - "From my books surcease of sorrow - sorrow for the lost Lenore -" + - "For the rare and radiant maiden whom the angels named Lenore -" + - "Nameless here for evermore." + - "\n" + - "And the silken sad uncertain rustling of each purple curtain" + - "Thrilled me - filled me with fantastic terrors never felt before;" + - "So that now, to still the beating of my heart, I stood repeating" + - "`'Tis some visitor entreating entrance at my chamber door -" + - "Some late visitor entreating entrance at my chamber door; -" + - "This it is, and nothing more,'" + - "Presently my soul grew stronger; hesitating then no longer," + - "`Sir,' said I, `or Madam, truly your forgiveness I implore;" + - "But the fact is I was napping, and so gently you came rapping," + - "And so faintly you came tapping, tapping at my chamber door," + - "That I scarce was sure I heard you' - here I opened wide the door; -" + - "Darkness there, and nothing more." + - "\n" + - "Deep into that darkness peering, long I stood there wondering, fearing," + - "Doubting, dreaming dreams no mortal ever dared to dream before" + - "But the silence was unbroken, and the darkness gave no token," + - "And the only word there spoken was the whispered word, `Lenore!'" + - "This I whispered, and an echo murmured back the word, `Lenore!'" + - "Merely this and nothing more." + - "\n" + - "Back into the chamber turning, all my soul within me burning," + - "Soon again I heard a tapping somewhat louder than before." + - "`Surely,' said I, `surely that is something at my window lattice;" + - "Let me see then, what thereat is, and this mystery explore -" + - "Let my heart be still a moment and this mystery explore; -" + - "'Tis the wind and nothing more!'" + - "\n" + - "Open here I flung the shutter, when, with many a flirt and flutter," + - "In there stepped a stately raven of the saintly days of yore." + - "Not the least obeisance made he; not a minute stopped or stayed he;" + - "But, with mien of lord or lady, perched above my chamber door -" + - "Perched upon a bust of Pallas just above my chamber door -" + - "Perched, and sat, and nothing more." + - "\n" + - "Then this ebony bird beguiling my sad fancy into smiling," + - "By the grave and stern decorum of the countenance it wore," + - "`Though thy crest be shorn and shaven, thou,' I said, `art sure no craven." + - "Ghastly grim and ancient raven wandering from the nightly shore -" + - "Tell me what thy lordly name is on the Night's Plutonian shore!'" + - "Quoth the raven, `Nevermore.'" + - "-n" + - "Much I marvelled this ungainly fowl to hear discourse so plainly," + - "Though its answer little meaning - little relevancy bore;" + - "For we cannot help agreeing that no living human being" + - "Ever yet was blessed with seeing bird above his chamber door -" + - "Bird or beast above the sculptured bust above his chamber door," + - "With such name as `Nevermore.'" + - "\n" + - "But the raven, sitting lonely on the placid bust, spoke only," + - "That one word, as if his soul in that one word he did outpour." + - "Nothing further then he uttered - not a feather then he fluttered -" + - "Till I scarcely more than muttered `Other friends have flown before -" + - "On the morrow he will leave me, as my hopes have flown before.'" + - "Then the bird said, `Nevermore.'" + - "\n" + - "Startled at the stillness broken by reply so aptly spoken," + - "`Doubtless,' said I, `what it utters is its only stock and store," + - "Caught from some unhappy master whom unmerciful disaster" + - "Followed fast and followed faster till his songs one burden bore -" + - "Till the dirges of his hope that melancholy burden bore" + - "Of \"Never-nevermore.\"'" + - "\n" + - "But the raven still beguiling all my sad soul into smiling," + - "Straight I wheeled a cushioned seat in front of bird and bust and door;" + - "Then, upon the velvet sinking, I betook myself to linking" + - "Fancy unto fancy, thinking what this ominous bird of yore -" + - "What this grim, ungainly, ghastly, gaunt, and ominous bird of yore" + - "Meant in croaking `Nevermore.'" + - "\n" + - "This I sat engaged in guessing, but no syllable expressing" + - "To the fowl whose fiery eyes now burned into my bosom's core;" + - "This and more I sat divining, with my head at ease reclining" + - "On the cushion's velvet lining that the lamp-light gloated o'er," + - "But whose velvet violet lining with the lamp-light gloating o'er," + - "She shall press, ah, nevermore!" + - "\n" + - "Then, methought, the air grew denser, perfumed from an unseen censer" + - "Swung by Seraphim whose foot-falls tinkled on the tufted floor." + - "`Wretch,' I cried, `thy God hath lent thee - by these angels he has sent thee" + - "Respite - respite and nepenthe from thy memories of Lenore!" + - "Quaff, oh quaff this kind nepenthe, and forget this lost Lenore!'" + - "Quoth the raven, `Nevermore.'" + - "\n" + - "`Prophet!' said I, `thing of evil! - prophet still, if bird or devil! -" + - "Whether tempter sent, or whether tempest tossed thee here ashore," + - "Desolate yet all undaunted, on this desert land enchanted -" + - "On this home by horror haunted - tell me truly, I implore -" + - "Is there - is there balm in Gilead? - tell me - tell me, I implore!'" + - "Quoth the raven, `Nevermore.'" + - "\n" + - "`Prophet!' said I, `thing of evil! - prophet still, if bird or devil!" + - "By that Heaven that bends above us - by that God we both adore -" + - "Tell this soul with sorrow laden if, within the distant Aidenn," + - "It shall clasp a sainted maiden whom the angels named Lenore -" + - "Clasp a rare and radiant maiden, whom the angels named Lenore?'" + - "Quoth the raven, `Nevermore.'" + - "\n" + - "`Be that word our sign of parting, bird or fiend!' I shrieked upstarting -" + - "`Get thee back into the tempest and the Night's Plutonian shore!" + - "Leave no black plume as a token of that lie thy soul hath spoken!" + - "Leave my loneliness unbroken! - quit the bust above my door!" + - "Take thy beak from out my heart, and take thy form from off my door!'" + - "Quoth the raven, `Nevermore.'" + - "\n" + - "And the raven, never flitting, still is sitting, still is sitting" + - "On the pallid bust of Pallas just above my chamber door;" + - "And his eyes have all the seeming of a demon's that is dreaming," + - "And the lamp-light o'er him streaming throws his shadow on the floor;" + - "And my soul from out that shadow that lies floating on the floor" + - "Shall be lifted - nevermore!" - -ALL_THE_HOPELESS_MORE=18; - -__re = /([Nn]?ever|([Nn]othing\s{1,}))more/g; -__matched=0; - -do{ - __executed = __re.exec(__the__raven); - if (__executed !== null) { - __matched++; - } else { - break; - } -}while(1); - -//CHECK#1 -if (__matched !== ALL_THE_HOPELESS_MORE) { - $ERROR('#1: __re = /([Nn]?ever|([Nn]othing\\s{1,}))more/g; __executed = __re.exec(__the__raven)'+__matched); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A3_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A3_T5.js deleted file mode 100644 index 7cbe3e886..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A3_T5.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.2_A3_T5; -* @section: 15.10.6.2, 13.2; -* @assertion: RegExp.prototype.exec behavior depends on global property. -* If global is true and lastIndex not changed manually, -* next exec calling start to match from position where current match finished; -* @description: RegExp is /\d+/g and tested string is "123 456 789"; -*/ - -__re = /\d+/g; - -__matched = []; - -__expected = ["123","456","789"]; - -do{ - __executed = __re.exec("123 456 789"); - if (__executed !== null) { - __matched.push(__executed[0]); - } else { - break; - } -}while(true); - -//CHECK#1 -if (__expected.length !== __matched.length) { - $ERROR('#1: __executed = /\\d+/g.exec("123 456 789"); __matched.length === ' + (__expected.length) + '.Actual: ' + (__matched.length)); -} - -//CHECK#2 -for(var index=0; index<__expected.length; index++) { - if (__expected[index] !== __matched[index]) { - $ERROR('#2: __executed = /\\d+/g.exec("123 456 789"); __matched[' + index + '] === ' + __expected[index] + '. Actual: ' + __matched[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A3_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A3_T6.js deleted file mode 100644 index 0a4d1aa74..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A3_T6.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.2_A3_T6; -* @section: 15.10.6.2, 13.2; -* @assertion: RegExp.prototype.exec behavior depends on global property. -* If global is true and lastIndex not changed manually, -* next exec calling start to match from position where current match finished; -* @description: RegExp is /(\d+)/g and tested string is "123 456 789"; -*/ - -__re = /(\d+)/g; - -__matched = []; - -__expected = ["123","456","789"]; - -do{ - __executed = __re.exec("123 456 789"); - if (__executed !== null) { - __matched.push(__executed[0]); - } else { - break; - } -}while(true); - -//CHECK#1 -if (__expected.length !== __matched.length) { - $ERROR('#1: __executed = /(\\d+)/g.exec("123 456 789"); __matched.length === ' + (__expected.length) + '.Actual: ' + (__matched.length)); -} - -//CHECK#2 -for(var index=0; index<__expected.length; index++) { - if (__expected[index] !== __matched[index]) { - $ERROR('#2: __executed = /(\\d+)/g.exec("123 456 789"); __matched[' + index + '] === ' + __expected[index] + '. Actual: ' + __matched[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A3_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A3_T7.js deleted file mode 100644 index ab1fc2e61..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A3_T7.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.2_A3_T7; -* @section: 15.10.6.2, 13.2; -* @assertion: RegExp.prototype.exec behavior depends on global property. -* If global is true and lastIndex not changed manually, -* next exec calling start to match from position where current match finished; -* @description: RegExp is /\d+/ and tested string is "123 456 789"; -*/ - -__re = /\d+/; - -__matched = []; - -__expected = ["123","123","123","123","123","123","123","123","123","123"]; - -do{ - __executed = __re.exec("123 456 789"); - if (__executed !== null) { - __matched.push(__executed[0]); - } else { - break; - } -}while(__matched.length<10); - -//CHECK#1 -if (__expected.length !== __matched.length) { - $ERROR('#1: __executed = /\\d+/.exec("123 456 789"); __matched.length === ' + (__expected.length) + '.Actual: ' + (__matched.length)); -} - -//CHECK#2 -for(var index=0; index<__expected.length; index++) { - if (__expected[index] !== __matched[index]) { - $ERROR('#2: __executed = /\\d+/.exec("123 456 789"); __matched[' + index + '] === ' + __expected[index] + '. Actual: ' + __matched[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A4_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A4_T1.js deleted file mode 100644 index c91f2bc4e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A4_T1.js +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.2_A4_T1; -* @section: 15.10.6.2, 13.2; -* @assertion: RegExp.prototype.exec behavior depends on global property. -* If global is true next exec calling start to match from lastIndex position; -* @description: Call first exec, then set re.lastIndex = 12 and again call exec; -*/ - -__re = /(?:ab|cd)\d?/g; - -__executed = __re.exec("aacd2233ab12nm444ab42"); - -__expected = ["cd2"]; -__expected.index = 2; -__expected.input = "aacd2233ab12nm444ab42"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __re = /(?:ab|cd)\\d?/g; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __re = /(?:ab|cd)\\d?/g; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __re = /(?:ab|cd)\\d?/g; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __re = /(?:ab|cd)\\d?/g; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - -__re.lastIndex = 12; - -__executed = __re.exec("aacd2233ab12nm444ab42"); - -__expected = ["ab4"]; -__expected.index = 17; -__expected.input = "aacd2233ab12nm444ab42"; - -//CHECK#5 -if (__executed.length !== __expected.length) { - $ERROR('#5: __re = /(?:ab|cd)\\d?/g; __re.lastIndex = 12; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#6 -if (__executed.index !== __expected.index) { - $ERROR('#6: __re = /(?:ab|cd)\\d?/g; __re.lastIndex = 12; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#7 -if (__executed.input !== __expected.input) { - $ERROR('#7: __re = /(?:ab|cd)\\d?/g; __re.lastIndex = 12; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#8 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#8: __re = /(?:ab|cd)\\d?/g; __re.lastIndex = 12; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A4_T10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A4_T10.js deleted file mode 100644 index 3c9518077..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A4_T10.js +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.2_A4_T10; -* @section: 15.10.6.2, 13.2; -* @assertion: RegExp.prototype.exec behavior depends on global property. -* If global is true next exec calling start to match from lastIndex position; -* @description: Call first exec, then set re.lastIndex = {valueOf:function(){return 12;}} and again call exec; -*/ - -__re = /(?:ab|cd)\d?/g; - -__executed = __re.exec("aacd2233ab12nm444ab42"); - -__expected = ["cd2"]; -__expected.index = 2; -__expected.input = "aacd2233ab12nm444ab42"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __re = /(?:ab|cd)\\d?/g; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __re = /(?:ab|cd)\\d?/g; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __re = /(?:ab|cd)\\d?/g; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __re = /(?:ab|cd)\\d?/g; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - -__obj = {valueOf:function(){return 12;}}; - -__re.lastIndex = __obj; - -__executed = __re.exec("aacd2233ab12nm444ab42"); - -__expected = ["ab4"]; -__expected.index = 17; -__expected.input = "aacd2233ab12nm444ab42"; - -//CHECK#5 -if (__executed.length !== __expected.length) { - $ERROR('#5: __re = /(?:ab|cd)\\d?/g; __obj = {valueOf:function(){return 12;}}; __re.lastIndex = __obj; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#6 -if (__executed.index !== __expected.index) { - $ERROR('#6: __re = /(?:ab|cd)\\d?/g; __obj = {valueOf:function(){return 12;}}; __re.lastIndex = __obj; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#7 -if (__executed.input !== __expected.input) { - $ERROR('#7: __re = /(?:ab|cd)\\d?/g; __obj = {valueOf:function(){return 12;}}; __re.lastIndex = __obj; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#8 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#8: __re = /(?:ab|cd)\\d?/g; __obj = {valueOf:function(){return 12;}}; __re.lastIndex = __obj; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A4_T11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A4_T11.js deleted file mode 100644 index cbea13abe..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A4_T11.js +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.2_A4_T11; -* @section: 15.10.6.2, 13.2; -* @assertion: RegExp.prototype.exec behavior depends on global property. -* If global is true next exec calling start to match from lastIndex position; -* @description: Call first exec, then set re.lastIndex = {valueOf:function(){throw "intoint";}} and again call exec; -*/ - -__re = /(?:ab|cd)\d?/g; - -__executed = __re.exec("aacd2233ab12nm444ab42"); - -__expected = ["cd2"]; -__expected.index = 2; -__expected.input = "aacd2233ab12nm444ab42"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __re = /(?:ab|cd)\\d?/g; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __re = /(?:ab|cd)\\d?/g; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __re = /(?:ab|cd)\\d?/g; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __re = /(?:ab|cd)\\d?/g; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - -__obj = {valueOf:function(){throw "intoint";}}; - -__re.lastIndex = __obj; - -//CHECK#5 -try { - $FAIL('#5.1: __obj = {valueOf:function(){throw "intoint";}}; __re.lastIndex = __obj; __executed = __re.exec("aacd2233ab12nm444ab42") throw "intoint". Actual: ' + (__re.exec("aacd2233ab12nm444ab42"))); -} catch (e) { - if (e !== "intoint") { - $ERROR('#5.2: __obj = {valueOf:function(){throw "intoint";}}; __re.lastIndex = __obj; __executed = __re.exec("aacd2233ab12nm444ab42") throw "intoint". Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A4_T12.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A4_T12.js deleted file mode 100644 index e5b58be2f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A4_T12.js +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.2_A4_T12; -* @section: 15.10.6.2, 13.2; -* @assertion: RegExp.prototype.exec behavior depends on global property. -* If global is true next exec calling start to match from lastIndex position; -* @description: Call first exec, then set re.lastIndex = {toString:function(){return 12;},valueOf:function(){return {};}} and again call exec; -*/ - -__re = /(?:ab|cd)\d?/g; - -__executed = __re.exec("aacd2233ab12nm444ab42"); - -__expected = ["cd2"]; -__expected.index = 2; -__expected.input = "aacd2233ab12nm444ab42"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __re = /(?:ab|cd)\\d?/g; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __re = /(?:ab|cd)\\d?/g; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __re = /(?:ab|cd)\\d?/g; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __re = /(?:ab|cd)\\d?/g; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - -__obj = {toString:function(){return 12;},valueOf:function(){return {};}}; - -__re.lastIndex = __obj; - -__executed = __re.exec("aacd2233ab12nm444ab42"); - -__expected = ["ab4"]; -__expected.index = 17; -__expected.input = "aacd2233ab12nm444ab42"; - -//CHECK#5 -if (__executed.length !== __expected.length) { - $ERROR('#5: __re = /(?:ab|cd)\\d?/g; __obj = {toString:function(){return 12;},valueOf:function(){return {};}}; __re.lastIndex = __obj; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#6 -if (__executed.index !== __expected.index) { - $ERROR('#6: __re = /(?:ab|cd)\\d?/g; __obj = {toString:function(){return 12;},valueOf:function(){return {};}}; __re.lastIndex = __obj; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#7 -if (__executed.input !== __expected.input) { - $ERROR('#7: __re = /(?:ab|cd)\\d?/g; __obj = {toString:function(){return 12;},valueOf:function(){return {};}}; __re.lastIndex = __obj; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#8 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#8: __re = /(?:ab|cd)\\d?/g; __obj = {toString:function(){return 12;},valueOf:function(){return {};}}; __re.lastIndex = __obj; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A4_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A4_T2.js deleted file mode 100644 index 25a041f3e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A4_T2.js +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.2_A4_T2; -* @section: 15.10.6.2, 13.2; -* @assertion: RegExp.prototype.exec behavior depends on global property. -* If global is true next exec calling start to match from lastIndex position; -* @description: Call first exec, then set re.lastIndex = undefined and again call exec; -*/ - -__re = /(?:ab|cd)\d?/g; - -__executed = __re.exec("aacd2233ab12nm444ab42"); - -__expected = ["cd2"]; -__expected.index = 2; -__expected.input = "aacd2233ab12nm444ab42"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __re = /(?:ab|cd)\\d?/g; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __re = /(?:ab|cd)\\d?/g; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __re = /(?:ab|cd)\\d?/g; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __re = /(?:ab|cd)\\d?/g; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - -__re.lastIndex = undefined; - -__executed = __re.exec("aacd2233ab12nm444ab42"); - -__expected = ["cd2"]; -__expected.index = 2; -__expected.input = "aacd2233ab12nm444ab42"; - -//CHECK#5 -if (__executed.length !== __expected.length) { - $ERROR('#5: __re = /(?:ab|cd)\\d?/g; __re.lastIndex = undefined; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#6 -if (__executed.index !== __expected.index) { - $ERROR('#6: __re = /(?:ab|cd)\\d?/g; __re.lastIndex = undefined; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#7 -if (__executed.input !== __expected.input) { - $ERROR('#7: __re = /(?:ab|cd)\\d?/g; __re.lastIndex = undefined; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#8 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#8: __re = /(?:ab|cd)\\d?/g; __re.lastIndex = undefined; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A4_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A4_T3.js deleted file mode 100644 index f93b57564..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A4_T3.js +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.2_A4_T3; -* @section: 15.10.6.2, 13.2; -* @assertion: RegExp.prototype.exec behavior depends on global property. -* If global is true next exec calling start to match from lastIndex position; -* @description: Call first exec, then set re.lastIndex = void 0 and again call exec; -*/ - -__re = /(?:ab|cd)\d?/g; - -__executed = __re.exec("aacd2233ab12nm444ab42"); - -__expected = ["cd2"]; -__expected.index = 2; -__expected.input = "aacd2233ab12nm444ab42"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __re = /(?:ab|cd)\\d?/g; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __re = /(?:ab|cd)\\d?/g; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __re = /(?:ab|cd)\\d?/g; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __re = /(?:ab|cd)\\d?/g; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - -__re.lastIndex = void 0; - -__executed = __re.exec("aacd2233ab12nm444ab42"); - -__expected = ["cd2"]; -__expected.index = 2; -__expected.input = "aacd2233ab12nm444ab42"; - -//CHECK#5 -if (__executed.length !== __expected.length) { - $ERROR('#5: __re = /(?:ab|cd)\\d?/g; __re.lastIndex = void 0; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#6 -if (__executed.index !== __expected.index) { - $ERROR('#6: __re = /(?:ab|cd)\\d?/g; __re.lastIndex = void 0; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#7 -if (__executed.input !== __expected.input) { - $ERROR('#7: __re = /(?:ab|cd)\\d?/g; __re.lastIndex = void 0; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#8 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#8: __re = /(?:ab|cd)\\d?/g; __re.lastIndex = void 0; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A4_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A4_T4.js deleted file mode 100644 index d2824aa71..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A4_T4.js +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.2_A4_T4; -* @section: 15.10.6.2, 13.2; -* @assertion: RegExp.prototype.exec behavior depends on global property. -* If global is true next exec calling start to match from lastIndex position; -* @description: Call first exec, then set re.lastIndex = null and again call exec; -*/ - -__re = /(?:ab|cd)\d?/g; - -__executed = __re.exec("aacd2233ab12nm444ab42"); - -__expected = ["cd2"]; -__expected.index = 2; -__expected.input = "aacd2233ab12nm444ab42"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __re = /(?:ab|cd)\\d?/g; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __re = /(?:ab|cd)\\d?/g; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __re = /(?:ab|cd)\\d?/g; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __re = /(?:ab|cd)\\d?/g; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - -__re.lastIndex = null; - -__executed = __re.exec("aacd2233ab12nm444ab42"); - -__expected = ["cd2"]; -__expected.index = 2; -__expected.input = "aacd2233ab12nm444ab42"; - -//CHECK#5 -if (__executed.length !== __expected.length) { - $ERROR('#5: __re = /(?:ab|cd)\\d?/g; __re.lastIndex = null; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#6 -if (__executed.index !== __expected.index) { - $ERROR('#6: __re = /(?:ab|cd)\\d?/g; __re.lastIndex = null; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#7 -if (__executed.input !== __expected.input) { - $ERROR('#7: __re = /(?:ab|cd)\\d?/g; __re.lastIndex = null; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#8 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#8: __re = /(?:ab|cd)\\d?/g; __re.lastIndex = null; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A4_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A4_T5.js deleted file mode 100644 index 9054cf291..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A4_T5.js +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.2_A4_T5; -* @section: 15.10.6.2, 13.2; -* @assertion: RegExp.prototype.exec behavior depends on global property. -* If global is true next exec calling start to match from lastIndex position; -* @description: Call first exec, then set re.lastIndex = x and again call exec, where x is undefined variable; -*/ - -__re = /(?:ab|cd)\d?/g; - -__executed = __re.exec("aacd2233ab12nm444ab42"); - -__expected = ["cd2"]; -__expected.index = 2; -__expected.input = "aacd2233ab12nm444ab42"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __re = /(?:ab|cd)\\d?/g; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __re = /(?:ab|cd)\\d?/g; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __re = /(?:ab|cd)\\d?/g; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __re = /(?:ab|cd)\\d?/g; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - -__re.lastIndex = x; - -__executed = __re.exec("aacd2233ab12nm444ab42"); - -__expected = ["cd2"]; -__expected.index = 2; -__expected.input = "aacd2233ab12nm444ab42"; - -//CHECK#5 -if (__executed.length !== __expected.length) { - $ERROR('#5: __re = /(?:ab|cd)\\d?/g; __re.lastIndex = x; __executed = __re.exec("aacd2233ab12nm444ab42"); var x; __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#6 -if (__executed.index !== __expected.index) { - $ERROR('#6: __re = /(?:ab|cd)\\d?/g; __re.lastIndex = x; __executed = __re.exec("aacd2233ab12nm444ab42"); var x; __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#7 -if (__executed.input !== __expected.input) { - $ERROR('#7: __re = /(?:ab|cd)\\d?/g; __re.lastIndex = x; __executed = __re.exec("aacd2233ab12nm444ab42"); var x; __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#8 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#8: __re = /(?:ab|cd)\\d?/g; __re.lastIndex = x; __executed = __re.exec("aacd2233ab12nm444ab42"); var x; __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - -var x; diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A4_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A4_T6.js deleted file mode 100644 index dc40ae963..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A4_T6.js +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.2_A4_T6; -* @section: 15.10.6.2, 13.2; -* @assertion: RegExp.prototype.exec behavior depends on global property. -* If global is true next exec calling start to match from lastIndex position; -* @description: Call first exec, then set re.lastIndex = false and again call exec; -*/ - -__re = /(?:ab|cd)\d?/g; - -__executed = __re.exec("aacd2233ab12nm444ab42"); - -__expected = ["cd2"]; -__expected.index = 2; -__expected.input = "aacd2233ab12nm444ab42"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __re = /(?:ab|cd)\\d?/g; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __re = /(?:ab|cd)\\d?/g; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __re = /(?:ab|cd)\\d?/g; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __re = /(?:ab|cd)\\d?/g; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - -__re.lastIndex = false; - -__executed = __re.exec("aacd2233ab12nm444ab42"); - -__expected = ["cd2"]; -__expected.index = 2; -__expected.input = "aacd2233ab12nm444ab42"; - -//CHECK#5 -if (__executed.length !== __expected.length) { - $ERROR('#5: __re = /(?:ab|cd)\\d?/g; __re.lastIndex = false; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed = __re.exec("aacd2233ab12nm444ab42"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#6 -if (__executed.index !== __expected.index) { - $ERROR('#6: __re = /(?:ab|cd)\\d?/g; __re.lastIndex = false; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed = __re.exec("aacd2233ab12nm444ab42"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#7 -if (__executed.input !== __expected.input) { - $ERROR('#7: __re = /(?:ab|cd)\\d?/g; __re.lastIndex = false; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed = __re.exec("aacd2233ab12nm444ab42"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#8 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#8: __re = /(?:ab|cd)\\d?/g; __re.lastIndex = false; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed = __re.exec("aacd2233ab12nm444ab42"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A4_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A4_T7.js deleted file mode 100644 index c7b044294..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A4_T7.js +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.2_A4_T7; -* @section: 15.10.6.2, 13.2; -* @assertion: RegExp.prototype.exec behavior depends on global property. -* If global is true next exec calling start to match from lastIndex position; -* @description: Call first exec, then set re.lastIndex = Math.NaN and again call exec; -*/ - -__re = /(?:ab|cd)\d?/g; - -__executed = __re.exec("aacd2233ab12nm444ab42"); - -__expected = ["cd2"]; -__expected.index = 2; -__expected.input = "aacd2233ab12nm444ab42"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __re = /(?:ab|cd)\\d?/g; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __re = /(?:ab|cd)\\d?/g; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __re = /(?:ab|cd)\\d?/g; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __re = /(?:ab|cd)\\d?/g; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - -__re.lastIndex = Math.NaN; - -__executed = __re.exec("aacd2233ab12nm444ab42"); - -__expected = ["cd2"]; -__expected.index = 2; -__expected.input = "aacd2233ab12nm444ab42"; - -//CHECK#5 -if (__executed.length !== __expected.length) { - $ERROR('#5: __re = /(?:ab|cd)\\d?/g; __re.lastIndex = Math.NaN; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed = __re.exec("aacd2233ab12nm444ab42"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#6 -if (__executed.index !== __expected.index) { - $ERROR('#6: __re = /(?:ab|cd)\\d?/g; __re.lastIndex = Math.NaN; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed = __re.exec("aacd2233ab12nm444ab42"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#7 -if (__executed.input !== __expected.input) { - $ERROR('#7: __re = /(?:ab|cd)\\d?/g; __re.lastIndex = Math.NaN; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed = __re.exec("aacd2233ab12nm444ab42"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#8 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#8: __re = /(?:ab|cd)\\d?/g; re.lastIndex = Math.NaN; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed = __re.exec("aacd2233ab12nm444ab42"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A4_T8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A4_T8.js deleted file mode 100644 index 433dfb13d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A4_T8.js +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.2_A4_T8; -* @section: 15.10.6.2, 13.2; -* @assertion: RegExp.prototype.exec behavior depends on global property. -* If global is true next exec calling start to match from lastIndex position; -* @description: Call first exec, then set re.lastIndex = "12" and again call exec; -*/ - -__re = /(?:ab|cd)\d?/g; - -__executed = __re.exec("aacd2233ab12nm444ab42"); - -__expected = ["cd2"]; -__expected.index = 2; -__expected.input = "aacd2233ab12nm444ab42"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __re = /(?:ab|cd)\\d?/g; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __re = /(?:ab|cd)\\d?/g; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __re = /(?:ab|cd)\\d?/g; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __re = /(?:ab|cd)\\d?/g; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - -__re.lastIndex = "12"; - -__executed = __re.exec("aacd2233ab12nm444ab42"); - -__expected = ["ab4"]; -__expected.index = 17; -__expected.input = "aacd2233ab12nm444ab42"; - -//CHECK#5 -if (__executed.length !== __expected.length) { - $ERROR('#5: __re = /(?:ab|cd)\\d?/g; __re.lastIndex = "12"; __executed = __re.exec("aacd2233ab12nm444ab42");__executed = __re.exec("aacd2233ab12nm444ab42"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#6 -if (__executed.index !== __expected.index) { - $ERROR('#6: __re = /(?:ab|cd)\\d?/g; __re.lastIndex = "12"; __executed = __re.exec("aacd2233ab12nm444ab42");__executed = __re.exec("aacd2233ab12nm444ab42"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#7 -if (__executed.input !== __expected.input) { - $ERROR('#7: __re = /(?:ab|cd)\\d?/g; __re.lastIndex = "12"; __executed = __re.exec("aacd2233ab12nm444ab42");__executed = __re.exec("aacd2233ab12nm444ab42"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#8 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#8: __re = /(?:ab|cd)\\d?/g; __re.lastIndex = "12"; __executed = __re.exec("aacd2233ab12nm444ab42");__executed = __re.exec("aacd2233ab12nm444ab42"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A4_T9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A4_T9.js deleted file mode 100644 index ca153da19..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A4_T9.js +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.2_A4_T9; -* @section: 15.10.6.2, 13.2; -* @assertion: RegExp.prototype.exec behavior depends on global property. -* If global is true next exec calling start to match from lastIndex position; -* @description: Call first exec, then set re.lastIndex = "eleven" and again call exec; -*/ - -__re = /(?:ab|cd)\d?/g; - -__executed = __re.exec("aacd2233ab12nm444ab42"); - -__expected = ["cd2"]; -__expected.index = 2; -__expected.input = "aacd2233ab12nm444ab42"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __re = /(?:ab|cd)\\d?/g; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __re = /(?:ab|cd)\\d?/g; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __re = /(?:ab|cd)\\d?/g; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __re = /(?:ab|cd)\\d?/g; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - -__re.lastIndex = "eleven"; - -__executed = __re.exec("aacd2233ab12nm444ab42"); - -__expected = ["cd2"]; -__expected.index = 2; -__expected.input = "aacd2233ab12nm444ab42"; - -//CHECK#5 -if (__executed.length !== __expected.length) { - $ERROR('#5: __re = /(?:ab|cd)\\d?/g; __re.lastIndex = "eleven"; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed = __re.exec("aacd2233ab12nm444ab42"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#6 -if (__executed.index !== __expected.index) { - $ERROR('#6: __re = /(?:ab|cd)\\d?/g; __re.lastIndex = "eleven"; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed = __re.exec("aacd2233ab12nm444ab42"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#7 -if (__executed.input !== __expected.input) { - $ERROR('#7: __re = /(?:ab|cd)\\d?/g; __re.lastIndex = "eleven"; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed = __re.exec("aacd2233ab12nm444ab42"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#8 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#8: __re = /(?:ab|cd)\\d?/g;__re.lastIndex = "eleven"; __executed = __re.exec("aacd2233ab12nm444ab42"); __executed = __re.exec("aacd2233ab12nm444ab42"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A5_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A5_T1.js deleted file mode 100644 index 67590bf06..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A5_T1.js +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.2_A5_T1; -* @section: 15.10.6.2, 13.2; -* @assertion: RegExp.prototype.exec behavior depends on global property. -* Let global is true and let I = If ToInteger(lastIndex). -* Then if I<0 orI>length then set lastIndex to 0 and return null; -* @description: First call /(?:ab|cd)\d?/g.exec("aac1dz2233a1bz12nm444ab42"), and then First call /(?:ab|cd)\d?/g.exec("aacd22"); -*/ - -__re = /(?:ab|cd)\d?/g; -__executed = __re.exec("aac1dz2233a1bz12nm444ab42"); - -__expected = ["ab4"]; -__expected.index = 21; -__expected.input = "aac1dz2233a1bz12nm444ab42"; - -//CHECK#1 -if (__executed.length !== __expected.length) { - $ERROR('#1: __re = /(?:ab|cd)\\d?/g; __executed = __re.exec("aac1dz2233a1bz12nm444ab42"); __executed.length === ' + __expected.length + '. Actual: ' + __executed.length); -} - -//CHECK#2 -if (__executed.index !== __expected.index) { - $ERROR('#2: __re = /(?:ab|cd)\\d?/g; __executed = __re.exec("aac1dz2233a1bz12nm444ab42"); __executed.index === ' + __expected.index + '. Actual: ' + __executed.index); -} - -//CHECK#3 -if (__executed.input !== __expected.input) { - $ERROR('#3: __re = /(?:ab|cd)\\d?/g; __executed = __re.exec("aac1dz2233a1bz12nm444ab42"); __executed.input === ' + __expected.input + '. Actual: ' + __executed.input); -} - -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__executed[index] !== __expected[index]) { - $ERROR('#4: __re = /(?:ab|cd)\\d?/g; __executed = __re.exec("aac1dz2233a1bz12nm444ab42"); __executed[' + index + '] === ' + __expected[index] + '. Actual: ' + __executed[index]); - } -} - -__executed = __re.exec("aacd22"); - -//CHECK#5 -if (__executed) { - $ERROR('#5: __re = /(?:ab|cd)\\d?/g; __executed = __re.exec("aacd22"); __executed === true'); -} - -//CHECK#6 -if (__re.lastIndex !== 0) { - $ERROR('#6: __re = /(?:ab|cd)\\d?/g; __executed = __re.exec("aacd22"); __re.lastIndex === 0. Actual: ' + (__re.lastIndex)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A5_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A5_T2.js deleted file mode 100644 index e2ef32757..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A5_T2.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.2_A5_T2; -* @section: 15.10.6.2, 13.2; -* @assertion: RegExp.prototype.exec behavior depends on global property. -* Let global is true and let I = If ToInteger(lastIndex). -* Then if I<0 orI>length then set lastIndex to 0 and return null; -* @description: Set lastIndex to 100 and call /(?:ab|cd)\d?/g.exec("aacd22 "); -*/ - -__re = /(?:ab|cd)\d?/g; -__re.lastIndex=100; -__executed = __re.exec("aacd22 "); - -//CHECK#1 -if (__executed) { - $ERROR('#1: __re = /(?:ab|cd)\\d?/g; __re.lastIndex=100; __executed = __re.exec("aacd22 "); __executed === true'); -} - -//CHECK#2 -if (__re.lastIndex !== 0) { - $ERROR('#2: __re = /(?:ab|cd)\\d?/g; __re.lastIndex=100; __executed = __re.exec("aacd22 "); __re.lastIndex === 0. Actual: ' + (__re.lastIndex)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A5_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A5_T3.js deleted file mode 100644 index 303eaec8c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A5_T3.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.2_A5_T3; -* @section: 15.10.6.2, 13.2; -* @assertion: RegExp.prototype.exec behavior depends on global property. -* Let global is true and let I = If ToInteger(lastIndex). -* Then if I<0 orI>length then set lastIndex to 0 and return null; -* @description: Set lastIndex to -1 and call /(?:ab|cd)\d?/g.exec("aacd22 "); -*/ - -__re = /(?:ab|cd)\d?/g; -__re.lastIndex=-1; -__executed = __re.test("aacd22 "); - -//CHECK#1 -if (__executed) { - $ERROR('#1: __re = /(?:ab|cd)\\d?/g; __re.lastIndex=-1; __executed = __re.test("aacd22 "); __executed === true'); -} - -//CHECK#2 -if (__re.lastIndex !== 0) { - $ERROR('#2: __re = /(?:ab|cd)\\d?/g; __re.lastIndex=-1; __executed = __re.test("aacd22 "); __re.lastIndex === 0. Actual: ' + (__re.lastIndex)); -} - -__re.lastIndex=-100; -__executed = __re.test("aacd22 "); - -//CHECK#3 -if (__executed) { - $ERROR('#3: __re = /(?:ab|cd)\\d?/g; __re.lastIndex=-1; __executed = __re.test("aacd22 "); __re.lastIndex=-100; __executed = __re.test("aacd22 "); __executed === true'); -} - -//CHECK#4 -if (__re.lastIndex !== 0) { - $ERROR('#4: __re = /(?:ab|cd)\\d?/g; __re.lastIndex=-1; __executed = __re.test("aacd22 "); __re.lastIndex=-100; __executed = __re.test("aacd22 "); __re.lastIndex === 0. Actual: ' + (__re.lastIndex)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A6.js deleted file mode 100644 index f905c43df..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A6.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.2_A6; -* @section: 15.10.6.2, 13.2; -* @assertion: RegExp.prototype.exec has not prototype property; -* @description: Checking RegExp.prototype.exec.prototype; -*/ - -//CHECK#1 -if (RegExp.prototype.exec.prototype !== undefined) { - $ERROR('#1: RegExp.prototype.exec.prototype === undefined. Actual: ' + (RegExp.prototype.exec.prototype)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A7.js deleted file mode 100644 index 4822518c1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A7.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.2_A7; -* @section: 15.10.6.2, 13.2; -* @assertion: RegExp.prototype.exec can't be used as constructor; -* @description: Checking if creating the RegExp.prototype.exec object fails; -*/ - -__FACTORY = RegExp.prototype.exec; - -try { - __instance = new __FACTORY; - $ERROR('#1.1: __FACTORY = RegExp.prototype.exec throw TypeError. Actual: ' + (__instance)); -} catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1.2: __FACTORY = RegExp.prototype.exec throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A8.js deleted file mode 100644 index 74a0096f4..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A8.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.2_A8; -* @section: 15.10.6.2; -* @assertion: The RegExp.prototype.exec.length property has the attribute DontEnum; -* @description: Checking if enumerating the RegExp.prototype.exec.length property fails; -*/ - -//CHECK#0 -if (RegExp.prototype.exec.hasOwnProperty('length') !== true) { - $ERROR('#0: RegExp.prototype.exec.hasOwnProperty(\'length\') === true'); -} - - //CHECK#1 -if (RegExp.prototype.exec.propertyIsEnumerable('length') !== false) { - $ERROR('#1: RegExp.prototype.exec.propertyIsEnumerable(\'length\') === true'); -} - - //CHECK#2 -count=0; - -for (p in RegExp.prototype.exec){ - if (p==="length") count++; -} - -if (count !== 0) { - $ERROR('#2: count = 0; for (p in RegExp.prototype.exec){ if (p==="length") count++; } count === 0. Actual: ' + (count)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A9.js deleted file mode 100644 index cae2ba792..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A9.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.2_A9; -* @section: 15.10.6.2; -* @assertion: The RegExp.prototype.exec.length property has the attribute DontDelete; -* @description: Checking if deleting the RegExp.prototype.exec.length property fails; -*/ - -//CHECK#0 -if ((RegExp.prototype.exec.hasOwnProperty('length') !== true)) { - $FAIL('#0: RegExp.prototype.exec.hasOwnProperty(\'length\') === true'); -} - -//CHECK#1 -if (delete RegExp.prototype.exec.length !== false) { - $ERROR('#1: delete RegExp.prototype.exec.length === false'); -} - -//CHECK#2 -if (RegExp.prototype.exec.hasOwnProperty('length') !== true) { - $ERROR('#2: delete RegExp.prototype.exec.length; RegExp.prototype.exec.hasOwnProperty(\'length\') === true'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A10.js deleted file mode 100644 index d72677af7..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A10.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.3_A10; -* @section: 15.10.6.3; -* @assertion: The RegExp.prototype.test.length property has the attribute ReadOnly; -* @description: Checking if varying the RegExp.prototype.test.length property fails; -*/ - -//CHECK#1 -if (RegExp.prototype.test.hasOwnProperty('length') !== true) { - $FAIL('#1: RegExp.prototype.test.hasOwnProperty(\'length\') === true'); -} - -__obj = RegExp.prototype.test.length; - -RegExp.prototype.test.length = function(){return "shifted";}; - -//CHECK#2 -if (RegExp.prototype.test.length !== __obj) { - $ERROR('#2: __obj = RegExp.prototype.test.length; RegExp.prototype.test.length = function(){return "shifted";}; RegExp.prototype.test.length === __obj. Actual: ' + (RegExp.prototype.test.length)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A11.js deleted file mode 100644 index 89ce04c69..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A11.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.3_A11; -* @section: 15.10.6.3; -* @assertion: The length property of the test method is 1; -* @description: Checking RegExp.prototype.test.length; -*/ - -//CHECK#1 -if (RegExp.prototype.test.hasOwnProperty("length") !== true) { - $FAIL('#1: RegExp.prototype.test.hasOwnProperty(\'length\') === true'); -} - -//CHECK#2 -if (RegExp.prototype.test.length !== 1) { - $ERROR('#2: RegExp.prototype.test.length === 1. Actual: ' + (RegExp.prototype.test.length)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A1_T1.js deleted file mode 100644 index 005cee3a6..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A1_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.3_A1_T1; -* @section: 15.10.6.3; -* @assertion: Equivalent to the expression RegExp.prototype.exec(string) != null; -* @description: RegExp is /1|12/ and tested string is "123"; -*/ - -var __string = "123"; -__re = /1|12/; - -//CHECK#0 -if (__re.test(__string) !== (__re.exec(__string) !== null)) { - $ERROR('#0: var __string = "123";__re = /1|12/; __re.test(__string) === (__re.exec(__string) !== null)'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A1_T10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A1_T10.js deleted file mode 100644 index 6045c8dc5..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A1_T10.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.3_A1_T10; -* @section: 15.10.6.3; -* @assertion: Equivalent to the expression RegExp.prototype.exec(string) != null; -* @description: RegExp is /1|12/ and tested string is 1.01; -*/ - -var __string = 1.01; -__re = /1|12/; - -//CHECK#0 -if (__re.test(__string) !== (__re.exec(__string) !== null)) { - $ERROR('#0: var __string = 1.01;__re = /1|12/; __re.test(__string) === (__re.exec(__string) !== null)'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A1_T11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A1_T11.js deleted file mode 100644 index 9e2071d62..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A1_T11.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.3_A1_T11; -* @section: 15.10.6.3; -* @assertion: Equivalent to the expression RegExp.prototype.exec(string) != null; -* @description: RegExp is /2|12/ and tested string is new Number(1.012); -*/ - -var __string = new Number(1.012); -__re = /2|12/; - -//CHECK#0 -if (__re.test(__string) !== (__re.exec(__string) !== null)) { - $ERROR('#0: var __string = new Number(1.012); __re = /2|12/; __re.test(__string) === (__re.exec(__string) !== null)'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A1_T12.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A1_T12.js deleted file mode 100644 index 1340fbc0e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A1_T12.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.3_A1_T12; -* @section: 15.10.6.3; -* @assertion: Equivalent to the expression RegExp.prototype.exec(string) != null; -* @description: RegExp is /\.14/ and tested string is {toString:function(){return Math.PI;}}; -*/ - -var __string = {toString:function(){return Math.PI;}}; -__re = /\.14/; - -//CHECK#0 -if (__re.test(__string) !== (__re.exec(__string) !== null)) { - $ERROR('#0: var __string = {toString:function(){return Math.PI;}}; __re = /\\.14/; __re.test(__string) === (__re.exec(__string) !== null)'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A1_T13.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A1_T13.js deleted file mode 100644 index 5f392d5f4..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A1_T13.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.3_A1_T13; -* @section: 15.10.6.3; -* @assertion: Equivalent to the expression RegExp.prototype.exec(string) != null; -* @description: RegExp is /t[a-b|q-s]/ and tested string is true; -*/ - -var __string = true; -__re = /t[a-b|q-s]/; - -//CHECK#0 -if (__re.test(__string) !== (__re.exec(__string) !== null)) { - $ERROR('#0: var __string = true;__re = /t[a-b|q-s]/; __re.test(__string) === (__re.exec(__string) !== null)'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A1_T14.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A1_T14.js deleted file mode 100644 index a400faaa8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A1_T14.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.3_A1_T14; -* @section: 15.10.6.3; -* @assertion: Equivalent to the expression RegExp.prototype.exec(string) != null; -* @description: RegExp is /AL|se/ and tested string is new Boolean; -*/ - -var __string = new Boolean; -__re = /AL|se/; - -//CHECK#0 -if (__re.test(__string) !== (__re.exec(__string) !== null)) { - $ERROR('#0: var __string = new Boolean;__re = /AL|se/; __re.test(__string) === (__re.exec(__string) !== null)'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A1_T15.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A1_T15.js deleted file mode 100644 index c5ca321b9..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A1_T15.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.3_A1_T15; -* @section: 15.10.6.3; -* @assertion: Equivalent to the expression RegExp.prototype.exec(string) != null; -* @description: RegExp is /LS/i and tested string is {toString:function(){return false;}}; -*/ - -var __string = {toString:function(){return false;}}; -__re = /LS/i; - -//CHECK#0 -if (__re.test(__string) !== (__re.exec(__string) !== null)) { - $ERROR('#0: var __string = {toString:function(){return false;}}; __re = /LS/i; __re.test(__string) === (__re.exec(__string) !== null)'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A1_T16.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A1_T16.js deleted file mode 100644 index 40e009004..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A1_T16.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.3_A1_T16; -* @section: 15.10.6.3; -* @assertion: Equivalent to the expression RegExp.prototype.exec(string) != null; -* @description: RegExp is /undefined/ and call test() without arguments; -*/ - -__re = /undefined/; - -//CHECK#0 -if (__re.test() !== (__re.exec() !== null)) { - $ERROR('#0: __re = /undefined/; __re.test() === (__re.exec() !== null)'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A1_T17.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A1_T17.js deleted file mode 100644 index 6e913cfbc..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A1_T17.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.3_A1_T17; -* @section: 15.10.6.3; -* @assertion: Equivalent to the expression RegExp.prototype.exec(string) != null; -* @description: RegExp is /ll|l/ and tested string is null; -*/ - -__re = /ll|l/; - -//CHECK#0 -if (__re.test(null) !== (__re.exec(null) !== null)) { - $ERROR('#0: __re = /ll|l/; __re.test(null) === (__re.exec(null) !== null)'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A1_T18.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A1_T18.js deleted file mode 100644 index 4a1f93627..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A1_T18.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.3_A1_T18; -* @section: 15.10.6.3; -* @assertion: Equivalent to the expression RegExp.prototype.exec(string) != null; -* @description: RegExp is /nd|ne/ and tested string is undefined; -*/ - -__re = /nd|ne/; - -//CHECK#0 -if (__re.test(undefined) !== (__re.exec(undefined) !== null)) { - $ERROR('#0: __re = /nd|ne/; __re.test(undefined) === (__re.exec(undefined) !== null)'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A1_T19.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A1_T19.js deleted file mode 100644 index 8e3ace689..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A1_T19.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.3_A1_T19; -* @section: 15.10.6.3; -* @assertion: Equivalent to the expression RegExp.prototype.exec(string) != null; -* @description: RegExp is /e{1}/ and tested string is void 0; -*/ - -__re = /e{1}/; - -//CHECK#0 -if (__re.test(void 0) !== (__re.exec(void 0) !== null)) { - $ERROR('#0: __re = /e{1}/; __re.test(void 0) === (__re.exec(void 0) !== null)'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A1_T2.js deleted file mode 100644 index 491612846..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A1_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.3_A1_T2; -* @section: 15.10.6.3; -* @assertion: Equivalent to the expression RegExp.prototype.exec(string) != null; -* @description: RegExp is /((1)|(12))((3)|(23))/ and tested string is new String("123"); -*/ - -var __string = new String("123"); -__re = /((1)|(12))((3)|(23))/; - -//CHECK#0 -if (__re.test(__string) !== (__re.exec(__string) !== null)) { - $ERROR('#0: var __string = new String("123"); __re = /((1)|(12))((3)|(23))/; __re.test(__string) === (__re.exec(__string) !== null)'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A1_T20.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A1_T20.js deleted file mode 100644 index e44ff4ebf..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A1_T20.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.3_A1_T20; -* @section: 15.10.6.3; -* @assertion: Equivalent to the expression RegExp.prototype.exec(string) != null; -* @description: RegExp is /[a-f]d/ and tested string is x, where x is undefined; -*/ - -__re = /[a-f]d/; - -//CHECK#0 -if (__re.test(x) !== (__re.exec(x) !== null)) { - $ERROR('#0: __re = /[a-f]d/; __re.test(x) === (__re.exec(x) !== null); var x;'); -} - -var x; diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A1_T21.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A1_T21.js deleted file mode 100644 index d087b8364..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A1_T21.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.3_A1_T21; -* @section: 15.10.6.3; -* @assertion: Equivalent to the expression RegExp.prototype.exec(string) != null; -* @description: RegExp is /[a-z]n/ and tested string is x, where x is function(){}(); -*/ - -__re = /[a-z]n/; - -//CHECK#0 -if (__re.test(function(){}()) !== (__re.exec(function(){}()) !== null)) { - $ERROR('#0: __re = /[a-z]n/; __re.test(function(){}()) === (__re.exec(function(){}()) !== null)'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A1_T3.js deleted file mode 100644 index 2e274f612..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A1_T3.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.3_A1_T3; -* @section: 15.10.6.3; -* @assertion: Equivalent to the expression RegExp.prototype.exec(string) != null; -* @description: RegExp is /a[a-z]{2,4}/ and tested string is new Object("abcdefghi"); -*/ - -var __string = new Object("abcdefghi"); -__re = /a[a-z]{2,4}/; - -//CHECK#0 -if (__re.test(__string) !== (__re.exec(__string) !== null)) { - $ERROR('#0: var __string = new Object("abcdefghi"); __re = /a[a-z]{2,4}/; __re.test(__string) === (__re.exec(__string) !== null)'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A1_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A1_T4.js deleted file mode 100644 index 3b12567df..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A1_T4.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.3_A1_T4; -* @section: 15.10.6.3; -* @assertion: Equivalent to the expression RegExp.prototype.exec(string) != null; -* @description: RegExp is /a[a-z]{2,4}?/ and tested string is {toString:function(){return "abcdefghi";}}; -*/ - -var __string = {toString:function(){return "abcdefghi";}}; -__re = /a[a-z]{2,4}?/; - -//CHECK#0 -if (__re.test(__string) !== (__re.exec(__string) !== null)) { - $ERROR('#0: var __string = {toString:function(){return "abcdefghi";}}; __re = /a[a-z]{2,4}?/; __re.test(__string) === (__re.exec(__string) !== null)'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A1_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A1_T5.js deleted file mode 100644 index 799da0bc1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A1_T5.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.3_A1_T5; -* @section: 15.10.6.3; -* @assertion: Equivalent to the expression RegExp.prototype.exec(string) != null; -* @description: RegExp is /(aa|aabaac|ba|b|c)* / and tested string is {toString:function(){return {};}, valueOf:function(){return "aabaac";}}; -*/ - -var __string = {toString:function(){return {};}, valueOf:function(){return "aabaac";}}; -__re = /(aa|aabaac|ba|b|c)*/; - -//CHECK#0 -if (__re.test(__string) !== (__re.exec(__string) !== null)) { - $ERROR('#0: var __string = {toString:function(){return {};}, valueOf:function(){return "aabaac";}}; __re = /(aa|aabaac|ba|b|c)*/; __re.test(__string) === (__re.exec(__string) !== null)'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A1_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A1_T6.js deleted file mode 100644 index 191ab545b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A1_T6.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.3_A1_T6; -* @section: 15.10.6.3; -* @assertion: Equivalent to the expression RegExp.prototype.exec(string) != null; -* @description: RegExp is /(z)((a+)?(b+)?(c))* / and tested string is (function(){return "zaacbbbcac"})(); -*/ - -__re = /(z)((a+)?(b+)?(c))*/; - -//CHECK#0 -if (__re.test((function(){return "zaacbbbcac"})()) !== (__re.exec((function(){return "zaacbbbcac"})()) !== null)) { - $ERROR('#0: __re = /(z)((a+)?(b+)?(c))*/; __re.test((function(){return "zaacbbbcac"})()) === (__re.exec((function(){return "zaacbbbcac"})()) !== null)'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A1_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A1_T7.js deleted file mode 100644 index fe26935bf..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A1_T7.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.3_A1_T7; -* @section: 15.10.6.3; -* @assertion: Equivalent to the expression RegExp.prototype.exec(string) != null; -* @description: RegExp is /[a-z]/ and tested string is {toString:function(){throw "intostr";}}; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: /[a-z]/.test({toString:function(){throw "intostr";}}) throw "intostr". Actual: ' + (/[a-z]/.test({toString:function(){throw "intostr";}}))); -} catch (e) { - if (e !== "intostr") { - $ERROR('#1.2: /[a-z]/.test({toString:function(){throw "intostr";}}) throw "intostr". Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A1_T8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A1_T8.js deleted file mode 100644 index dfdb75acf..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A1_T8.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.3_A1_T8; -* @section: 15.10.6.3; -* @assertion: Equivalent to the expression RegExp.prototype.exec(string) != null; -* @description: RegExp is /[a-z]/ and tested string is {toString:void 0, valueOf:function(){throw "invalof";}}; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: /[a-z]/.test({toString:void 0, valueOf:function(){throw "invalof";}}) throw "invalof". Actual: ' + (/[a-z]/.test({toString:void 0, valueOf:function(){throw "invalof";}}))); -} catch (e) { - if (e !== "invalof") { - $ERROR('#1.2: /[a-z]/.test({toString:void 0, valueOf:function(){throw "invalof";}}) throw "invalof". Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A1_T9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A1_T9.js deleted file mode 100644 index c9cdcdffe..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A1_T9.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.3_A1_T9; -* @section: 15.10.6.3; -* @assertion: Equivalent to the expression RegExp.prototype.exec(string) != null; -* @description: RegExp is /1|12/ and tested string is function object; -*/ - -var __string; -__re = /1|12/; - -//CHECK#0 -if (__re.test(__string) !== (__re.exec(__string) !== null)) { - $ERROR('#0: var __string;__re = /1|12/; __re.test(__string) === (__re.exec(__string) !== null); function __string(){};'); -} - -function __string(){}; diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A2_T1.js deleted file mode 100644 index 17e2c3ad6..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A2_T1.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.3_A2_T1; -* @section: 15.10.6.3; -* @assertion: A TypeError exception is thrown if the this value is not an object for which the value of the internal [[Class]] property is "RegExp"; -* @description: The tested object is new Object; -*/ - -__instance = new Object; - -__instance.test = RegExp.prototype.test; - -//CHECK#1 -try { - $ERROR('#1.1: __instance = new Object; __instance.test = RegExp.prototype.test; __instance.test("message to investigate"). Actual: ' + (__instance.test("message to investigate"))); -} catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1.2: __instance = new Object; __instance.test = RegExp.prototype.test. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A2_T10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A2_T10.js deleted file mode 100644 index cca9b9113..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A2_T10.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.3_A2_T10; -* @section: 15.10.6.3; -* @assertion: A TypeError exception is thrown if the this value is not an object for which the value of the internal [[Class]] property is "RegExp"; -* @description: The tested object is undefined; -*/ - -test = RegExp.prototype.test; - -//CHECK#1 -try { - $ERROR('#1.1: test = RegExp.prototype.test; test("message to investigate"). Actual: ' + (test("message to investigate"))); -} catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1.2: test = RegExp.prototype.test; test("message to investigate"). Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A2_T2.js deleted file mode 100644 index 69a6328e3..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A2_T2.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.3_A2_T2; -* @section: 15.10.6.3; -* @assertion: A TypeError exception is thrown if the this value is not an object for which the value of the internal [[Class]] property is "RegExp"; -* @description: The tested object is Math; -*/ - -__instance = Math; - -__instance.test = RegExp.prototype.test; - -//CHECK#1 -try { - with(__instance) test("message to investigate"); - $ERROR('#1.1: __instance = Math; __instance.test = RegExp.prototype.test; with(__instance) test("message to investigate")'); -} catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1.2: __instance = Math; __instance.test = RegExp.prototype.test; with(__instance) test("message to investigate"). Actual: ' + (e)); - } -} - - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A2_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A2_T3.js deleted file mode 100644 index 0e52174ca..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A2_T3.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.3_A2_T3; -* @section: 15.10.6.3; -* @assertion: A TypeError exception is thrown if the this value is not an object for which the value of the internal [[Class]] property is "RegExp"; -* @description: The tested object is function object; -*/ - -__instance.test = RegExp.prototype.test; - -//CHECK#1 -try { - with(__instance) test("message to investigate"); - $ERROR('#1.1: __instance.test = RegExp.prototype.test; with(__instance) test("message to investigate"); function __instance(){}'); -} catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1.2: __instance.test = RegExp.prototype.test; with(__instance) test("message to investigate"); function __instance(){}. Actual: ' + (e)); - } -} - -function __instance(){}; diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A2_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A2_T4.js deleted file mode 100644 index b613cfb54..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A2_T4.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.3_A2_T4; -* @section: 15.10.6.3; -* @assertion: A TypeError exception is thrown if the this value is not an object for which the value of the internal [[Class]] property is "RegExp"; -* @description: The tested object is new String("[a-b]"); -*/ - -__instance = new String("[a-b]"); - -__instance.test = RegExp.prototype.test; - -//CHECK#1 -with(__instance){ - try { - $ERROR('#1.1: __instance = new String("[a-b]"); __instance.test = RegExp.prototype.test; test("message to investigate"). Actual: ' + (test("message to investigate"))); - } catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1.2: __instance = new String("[a-b]"); __instance.test = RegExp.prototype.test; test("message to investigate"). Actual: ' + (e)); - } - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A2_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A2_T5.js deleted file mode 100644 index a206874a6..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A2_T5.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.3_A2_T5; -* @section: 15.10.6.3; -* @assertion: A TypeError exception is thrown if the this value is not an object for which the value of the internal [[Class]] property is "RegExp"; -* @description: The tested object is new Boolean(false); -*/ - -__instance = new Boolean(false); - -__instance.test = RegExp.prototype.test; - -//CHECK#1 -with(__instance) { - try { - $ERROR('#1.1: __instance = new Boolean(false); __instance.test = RegExp.prototype.test; test("message to investigate"). Actual: ' + (test("message to investigate"))); - } catch (e) { - if ((e instanceof TypeError !== true)) { - $ERROR('#1.2: __instance = new Boolean(false); __instance.test = RegExp.prototype.test; test("message to investigate"). Actual: ' + (e)); - } - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A2_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A2_T6.js deleted file mode 100644 index 814504691..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A2_T6.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.3_A2_T6; -* @section: 15.10.6.3; -* @assertion: A TypeError exception is thrown if the this value is not an object for which the value of the internal [[Class]] property is "RegExp"; -* @description: The tested object is new Number(1.0); -*/ - -__instance = new Number(1.0); - -__instance.test = RegExp.prototype.test; - -//CHECK#1 -try { - $ERROR('#1.1: __instance = new Number(1.0); __instance.test = RegExp.prototype.test; __instance["test"]("message to investigate"). Actual: ' + (__instance["test"]("message to investigate"))); -} catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1.2: __instance = new Number(1.0); __instance.test = RegExp.prototype.test; __instance["test"]("message to investigate"). Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A2_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A2_T7.js deleted file mode 100644 index a6b80a5d7..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A2_T7.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.3_A2_T7; -* @section: 15.10.6.3; -* @assertion: A TypeError exception is thrown if the this value is not an object for which the value of the internal [[Class]] property is "RegExp"; -* @description: The tested object is false; -*/ - -__instance = false; - -Object.prototype.test = RegExp.prototype.test; - -//CHECK#1 -try { - $ERROR('#1.1: __instance = false; Object.prototype.test = RegExp.prototype.test; __instance.test("message to investigate"). Actual: ' + (__instance.test("message to investigate"))); -} catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1.2: __instance = false; Object.prototype.test = RegExp.prototype.test; __instance.test("message to investigate"). Actual: ' + (e)); - } -} - - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A2_T8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A2_T8.js deleted file mode 100644 index a8abfdf01..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A2_T8.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.3_A2_T8; -* @section: 15.10.6.3; -* @assertion: A TypeError exception is thrown if the this value is not an object for which the value of the internal [[Class]] property is "RegExp"; -* @description: The tested object is "."; -*/ - -__instance = "."; - -Object.prototype.test = RegExp.prototype.test; - -//CHECK#1 -try { - $ERROR('#1.1: __instance = "."; Object.prototype.test = RegExp.prototype.test; __instance.test("message to investigate"). Actual: ' + (__instance.test("message to investigate"))); -} catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1.2: __instance = "."; Object.prototype.test = RegExp.prototype.test; __instance.test("message to investigate"). Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A2_T9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A2_T9.js deleted file mode 100644 index e24a8cff5..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A2_T9.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.3_A2_T9; -* @section: 15.10.6.3; -* @assertion: A TypeError exception is thrown if the this value is not an object for which the value of the internal [[Class]] property is "RegExp"; -* @description: The tested object is 1.0; -*/ - -__instance = 1.0; - -Object.prototype.test = RegExp.prototype.test; - -//CHECK#1 -try { - $ERROR('#1.1: __instance = 1.0; Object.prototype.test = RegExp.prototype.test; __instance.test("message to investigate"). Actual: ' + (__instance.test("message to investigate"))); -} catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1.2: __instance = 1.0; Object.prototype.test = RegExp.prototype.test; __instance.test("message to investigate"). Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A6.js deleted file mode 100644 index c5f4142e3..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A6.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.3_A6; -* @section: 15.10.6.3, 13.2; -* @assertion: RegExp.prototype.test has not prototype property; -* @description: Checking RegExp.prototype.test.prototype; -*/ - -//CHECK#1 -if (RegExp.prototype.test.prototype !== undefined) { - $ERROR('#1: RegExp.prototype.test.prototype === undefined. Actual: ' + (RegExp.prototype.test.prototype)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A7.js deleted file mode 100644 index d9ee8d94a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A7.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.3_A7; -* @section: 15.10.6.3, 13.2; -* @assertion: RegExp.prototype.test can't be used as constructor; -* @description: Checking if creating the RegExp.prototype.test object fails; -*/ - -__FACTORY = RegExp.prototype.test; - -try { - __instance = new __FACTORY; - $ERROR('#1.1: __FACTORY = RegExp.prototype.test throw TypeError. Actual: ' + (__instance)); -} catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1.2: __FACTORY = RegExp.prototype.test throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A8.js deleted file mode 100644 index cfdbc36da..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A8.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.3_A8; -* @section: 15.10.6.3; -* @assertion: The RegExp.prototype.test.length property has the attribute DontEnum; -* @description: Checking if enumerating the RegExp.prototype.test.length property fails; -*/ - -//CHECK#0 -if (RegExp.prototype.test.hasOwnProperty('length') !== true) { - $ERROR('#0: RegExp.prototype.test.hasOwnProperty(\'length\') === true'); -} - - //CHECK#1 -if (RegExp.prototype.test.propertyIsEnumerable('length') !== false) { - $ERROR('#1: RegExp.prototype.test.propertyIsEnumerable(\'length\') === true'); -} - - //CHECK#2 -count=0; - -for (p in RegExp.prototype.test){ - if (p==="length") count++; -} - -if (count !== 0) { - $ERROR('#2: count = 0; for (p in RegExp.prototype.test){ if (p==="length") count++; } count === 0. Actual: ' + (count)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A9.js deleted file mode 100644 index 3477fdcba..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A9.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.3_A9; -* @section: 15.10.6.3; -* @assertion: The RegExp.prototype.test.length property has the attribute DontDelete; -* @description: Checking if deleting RegExp.prototype.test.length property fails; -*/ - -//CHECK#0 -if ((RegExp.prototype.exec.hasOwnProperty('length') !== true)) { - $FAIL('#0: RegExp.prototype.exec.hasOwnProperty(\'length\') === true'); -} - -//CHECK#1 -if (delete RegExp.prototype.exec.length !== false) { - $ERROR('#1: delete RegExp.prototype.exec.length === false'); -} - -//CHECK#2 -if (RegExp.prototype.exec.hasOwnProperty('length') !== true) { - $ERROR('#2: delete RegExp.prototype.exec.length; RegExp.prototype.exec.hasOwnProperty(\'length\') === true'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.4_RegExp.prototype.toString/S15.10.6.4_A10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.4_RegExp.prototype.toString/S15.10.6.4_A10.js deleted file mode 100644 index 4266de6fe..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.4_RegExp.prototype.toString/S15.10.6.4_A10.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.4_A10; -* @section: 15.10.6.4; -* @assertion: The RegExp.prototype.toString.length property has the attribute ReadOnly; -* @description: Checking if varying the RegExp.prototype.toString.length property fails; -*/ - -//CHECK#1 -if (RegExp.prototype.toString.hasOwnProperty('length') !== true) { - $FAIL('#1: RegExp.prototype.toString.hasOwnProperty(\'length\') === true'); -} - -__obj = RegExp.prototype.toString.length; - -RegExp.prototype.toString.length = function(){return "shifted";}; - -//CHECK#2 -if (RegExp.prototype.toString.length !== __obj) { - $ERROR('#2: __obj = RegExp.prototype.toString.length; RegExp.prototype.toString.length = function(){return "shifted";}; RegExp.prototype.toString.length === __obj. Actual: ' + (RegExp.prototype.toString.length)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.4_RegExp.prototype.toString/S15.10.6.4_A11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.4_RegExp.prototype.toString/S15.10.6.4_A11.js deleted file mode 100644 index 0f65014b4..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.4_RegExp.prototype.toString/S15.10.6.4_A11.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.4_A11; -* @section: 15.10.6.4; -* @assertion: The length property of the toString method is 1; -* @description: Checking RegExp.prototype.toString.length; -*/ - -//CHECK#1 -if (RegExp.prototype.toString.hasOwnProperty("length") !== true) { - $FAIL('#1: RegExp.prototype.toString.hasOwnProperty(\'length\') === true'); -} - -//CHECK#2 -if (RegExp.prototype.toString.length !== 0) { - $ERROR('#2: RegExp.prototype.toString.length === 0. Actual: ' + (RegExp.prototype.toString.length)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.4_RegExp.prototype.toString/S15.10.6.4_A6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.4_RegExp.prototype.toString/S15.10.6.4_A6.js deleted file mode 100644 index d518db871..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.4_RegExp.prototype.toString/S15.10.6.4_A6.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.4_A6; -* @section: 15.10.6.4, 13.2; -* @assertion: RegExp.prototype.toString has not prototype property; -* @description: Checking RegExp.prototype.toString.prototype; -*/ - -//CHECK#1 -if (RegExp.prototype.toString.prototype !== undefined) { - $ERROR('#1: RegExp.prototype.toString.prototype === undefined. Actual: ' + (RegExp.prototype.toString.prototype)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.4_RegExp.prototype.toString/S15.10.6.4_A7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.4_RegExp.prototype.toString/S15.10.6.4_A7.js deleted file mode 100644 index fa28c6723..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.4_RegExp.prototype.toString/S15.10.6.4_A7.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.4_A7; -* @section: 15.10.6.4, 13.2; -* @assertion: RegExp.prototype.toString can't be used as constructor; -* @description: Checking if creating the RegExp.prototype.toString object fails; -*/ - -__FACTORY = RegExp.prototype.toString; - -try { - __instance = new __FACTORY; - $ERROR('#1.1: __FACTORY = RegExp.prototype.toString throw TypeError. Actual: ' + (__instance)); -} catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1.2: __FACTORY = RegExp.prototype.toString throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.4_RegExp.prototype.toString/S15.10.6.4_A8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.4_RegExp.prototype.toString/S15.10.6.4_A8.js deleted file mode 100644 index bdbeff72e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.4_RegExp.prototype.toString/S15.10.6.4_A8.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.4_A8; -* @section: 15.10.6.4; -* @assertion: The RegExp.prototype.toString.length property has the attribute DontEnum; -* @description: Checking if enumerating the RegExp.prototype.toString.length property fails; -*/ - -//CHECK#0 -if (RegExp.prototype.toString.hasOwnProperty('length') !== true) { - $ERROR('#0: RegExp.prototype.toString.hasOwnProperty(\'length\') === true'); -} - - //CHECK#1 -if (RegExp.prototype.toString.propertyIsEnumerable('length') !== false) { - $ERROR('#1: RegExp.prototype.toString.propertyIsEnumerable(\'length\') === true'); -} - - //CHECK#2 -count=0; - -for (p in RegExp.prototype.toString){ - if (p==="length") count++; -} - -if (count !== 0) { - $ERROR('#2: count = 0; for (p in RegExp.prototype.toString){ if (p==="length") count++; } count === 0. Actual: ' + (count)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.4_RegExp.prototype.toString/S15.10.6.4_A9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.4_RegExp.prototype.toString/S15.10.6.4_A9.js deleted file mode 100644 index cdeda5c89..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/15.10.6.4_RegExp.prototype.toString/S15.10.6.4_A9.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.4_A9; -* @section: 15.10.6.4; -* @assertion: The RegExp.prototype.toString.length property has the attribute DontDelete; -* @description: Checking if deleting the RegExp.prototype.toString.length property fails; -*/ - -//CHECK#0 -if ((RegExp.prototype.toString.hasOwnProperty('length') !== true)) { - $FAIL('#0: RegExp.prototype.toString.hasOwnProperty(\'length\') === true'); -} - -//CHECK#1 -if (delete RegExp.prototype.toString.length !== false) { - $ERROR('#1: delete RegExp.prototype.toString.length === false'); -} - -//CHECK#2 -if (RegExp.prototype.toString.hasOwnProperty('length') !== true) { - $ERROR('#2: delete RegExp.prototype.toString.length; RegExp.prototype.toString.hasOwnProperty(\'length\') === true'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/S15.10.6.1_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/S15.10.6.1_A1_T1.js deleted file mode 100644 index 048cf51d7..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/S15.10.6.1_A1_T1.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.1_A1_T1; -* @section: 15.10.6.1; -* @assertion: The initial value of RegExp.prototype.constructor is the built-in RegExp constructor; -* @description: Compare RegExp.prototype.constructor with RegExp; -*/ - -//CHECK#1 -if (RegExp.prototype.constructor !== RegExp) { - $ERROR('#1: RegExp.prototype.constructor === RegExp. Actual: ' + (RegExp.prototype.constructor)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/S15.10.6.1_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/S15.10.6.1_A1_T2.js deleted file mode 100644 index 4b315d510..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/S15.10.6.1_A1_T2.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.1_A1_T2; -* @section: 15.10.6.1; -* @assertion: The initial value of RegExp.prototype.constructor is the built-in RegExp constructor; -* @description: Compare instance.constructor !== RegExp, where instance is new RegExp.prototype.constructor; -*/ - -__FACTORY = RegExp.prototype.constructor; - -__instance = new __FACTORY; - -//CHECK#1 -if ((__instance instanceof RegExp) !== true) { - $ERROR('#1: __FACTORY = RegExp.prototype.constructor; __instance = new __FACTORY; (__instance instanceof RegExp) === true'); -} - -//CHECK#2 -if (__instance.constructor !== RegExp) { - $ERROR('#2: __FACTORY = RegExp.prototype.constructor; __instance = new __FACTORY; __instance.constructor === RegExp. Actual: ' + (__instance.constructor)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/S15.10.6_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/S15.10.6_A1_T1.js deleted file mode 100644 index 10ed97f3b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/S15.10.6_A1_T1.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6_A1_T1; -* @section: 15.10.6; -* @assertion: The value of the internal [[Prototype]] property of the RegExp prototype object is the Object prototype; -* @description: Checking Object.prototype.isPrototypeOf(RegExp.prototype); -*/ - -//CHECK#1 -if (Object.prototype.isPrototypeOf(RegExp.prototype) !== true) { - $ERROR('#1: Object.prototype.isPrototypeOf(RegExp.prototype) === true'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/S15.10.6_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/S15.10.6_A1_T2.js deleted file mode 100644 index 8ea1ce280..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/S15.10.6_A1_T2.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6_A1_T2; -* @section: 15.10.6; -* @assertion: The value of the internal [[Prototype]] property of the RegExp prototype object is the Object prototype; -* @description: Add new property to Object.prototype and check it of RegExp.prototype; -*/ - -Object.prototype.indicator = 1; - -//CHECK#1 -if (RegExp.prototype.indicator !== 1) { - $ERROR('#1: Object.prototype.indicator = 1; RegExp.prototype.indicator === 1. Actual: ' + (RegExp.prototype.indicator)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/S15.10.6_A2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/S15.10.6_A2.js deleted file mode 100644 index a165443ae..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.6_Properties_of_the_RegExp_Prototype_Object/S15.10.6_A2.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6_A2; -* @section: 15.10.6; -* @assertion: The value of the internal [[Class]] property of the RegExp prototype object is "Object"; -* @description: Checking performs with toString function; -*/ - -RegExp.prototype.toString = Object.prototype.toString; - -//CHECK#1 -if (RegExp.prototype.toString() !== "[object " + "Object" + "]") { - $ERROR('#1: RegExp.prototype.toString = Object.prototype.toString; RegExp.prototype.toString() === "[object " + "Object" + "]". Actual: ' + RegExp.prototype.toString()); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.7_Properties_of_RegExp_Instances/15.10.7.1_source/S15.10.7.1_A10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.7_Properties_of_RegExp_Instances/15.10.7.1_source/S15.10.7.1_A10.js deleted file mode 100644 index d7626ec2a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.7_Properties_of_RegExp_Instances/15.10.7.1_source/S15.10.7.1_A10.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.7.1_A10; -* @section: 15.10.7.1; -* @assertion: The RegExp instance source property has the attribute ReadOnly; -* @description: Checking if varying the source property fails; -*/ - -__re = /./; - -//CHECK#1 -if (__re.hasOwnProperty('source') !== true) { - $FAIL('#1: __re = /./; __re.hasOwnProperty(\'source\') === true'); -} - -__obj = __re.source; - -__re.source = "shifted"; - -//CHECK#2 -if (__re.source !== __obj) { - $ERROR('#2: __re = /./; __obj = __re.source; __re.source = "shifted"; __re.source === __obj. Actual: ' + (__re.source)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.7_Properties_of_RegExp_Instances/15.10.7.1_source/S15.10.7.1_A8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.7_Properties_of_RegExp_Instances/15.10.7.1_source/S15.10.7.1_A8.js deleted file mode 100644 index 094cc6b8c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.7_Properties_of_RegExp_Instances/15.10.7.1_source/S15.10.7.1_A8.js +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.7.1_A8; -* @section: 15.10.7.1; -* @assertion: The RegExp instance source property has the attribute DontEnum; -* @description: Checking if enumerating the source property of RegExp instance fails; -*/ - -__re = new RegExp("[1-2]","i"); - -//CHECK#0 -if (__re.hasOwnProperty('source') !== true) { - $FAIL('#0: __re = new RegExp("[1-2]","i"); __re.hasOwnProperty(\'source\') === true'); -} - - //CHECK#1 -if (__re.propertyIsEnumerable('source') !== false) { - $ERROR('#1: __re = new RegExp("[1-2]","i"); __re.propertyIsEnumerable(\'source\') === false'); -} - - //CHECK#2 -count = 0 -for (p in __re){ - if (p==="source") count++ -} - -if (count !== 0) { - $ERROR('#2: count = 0; __re = new RegExp("[1-2]","i"); for (p in __re){ if (p==="source") count++; } count === 0. Actual: ' + (count)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.7_Properties_of_RegExp_Instances/15.10.7.1_source/S15.10.7.1_A9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.7_Properties_of_RegExp_Instances/15.10.7.1_source/S15.10.7.1_A9.js deleted file mode 100644 index e6b9e5b16..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.7_Properties_of_RegExp_Instances/15.10.7.1_source/S15.10.7.1_A9.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.7.1_A9; -* @section: 15.10.7.1; -* @assertion: The RegExp instance source property has the attribute DontDelete; -* @description: Checking if deleting the source property fails; -*/ - -__re = new RegExp; - -//CHECK#0 -if (__re.hasOwnProperty('source') !== true) { - $FAIL('#0: __re = new RegExp; __re.hasOwnProperty(\'source\') === true'); -} - -//CHECK#1 -if ((delete __re.source) !== false) { - $ERROR('#1: __re = new RegExp; (delete __re.source) === false'); -} - -//CHECK#2 -if (__re.hasOwnProperty('source') !== true) { - $ERROR('#2: __re = new RegExp;delete __re.source === true; __re.hasOwnProperty(\'source\') === true'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.7_Properties_of_RegExp_Instances/15.10.7.2_global/S15.10.7.2_A10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.7_Properties_of_RegExp_Instances/15.10.7.2_global/S15.10.7.2_A10.js deleted file mode 100644 index 2942fd8d9..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.7_Properties_of_RegExp_Instances/15.10.7.2_global/S15.10.7.2_A10.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.7.2_A10; -* @section: 15.10.7.2; -* @assertion: The RegExp instance global property has the attribute ReadOnly; -* @description: Checking if varying the global property fails; -*/ - -__re = /^|^/; - -//CHECK#1 -if (__re.hasOwnProperty('global') !== true) { - $FAIL('#1: __re = /^|^/; __re.hasOwnProperty(\'global\') === true'); -} - -__obj = __re.global; - -__re.global = "shifted"; - -//CHECK#2 -if (__re.global !== __obj) { - $ERROR('#2: __re = /^|^/; __obj = __re.global; __re.global = "shifted"; __re.global === __obj. Actual: ' + (__re.global)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.7_Properties_of_RegExp_Instances/15.10.7.2_global/S15.10.7.2_A8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.7_Properties_of_RegExp_Instances/15.10.7.2_global/S15.10.7.2_A8.js deleted file mode 100644 index 0b8c9d2ca..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.7_Properties_of_RegExp_Instances/15.10.7.2_global/S15.10.7.2_A8.js +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.7.2_A8; -* @section: 15.10.7.2; -* @assertion: The RegExp instance global property has the attribute DontEnum; -* @description: Checking if enumerating the global property of RegExp instance fails; -*/ - -__re = new RegExp("[o-o]","m"); - -//CHECK#0 -if (__re.hasOwnProperty('global') !== true) { - $FAIL('#0: __re = new RegExp("[o-o]","m"); __re.hasOwnProperty(\'global\') === true'); -} - - //CHECK#1 -if (__re.propertyIsEnumerable('global') !== false) { - $ERROR('#1: __re = new RegExp("[o-o]","m"); __re.propertyIsEnumerable(\'global\') === false'); -} - - //CHECK#2 -count = 0 -for (p in __re){ - if (p==="global") count++ -} - -if (count !== 0) { - $ERROR('#2: count = 0; __re = new RegExp("[o-o]","m"); for (p in __re){ if (p==="global") count++; } count === 0. Actual: ' + (count)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.7_Properties_of_RegExp_Instances/15.10.7.2_global/S15.10.7.2_A9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.7_Properties_of_RegExp_Instances/15.10.7.2_global/S15.10.7.2_A9.js deleted file mode 100644 index b17710626..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.7_Properties_of_RegExp_Instances/15.10.7.2_global/S15.10.7.2_A9.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.7.2_A9; -* @section: 15.10.7.2; -* @assertion: The RegExp instance global property has the attribute DontDelete; -* @description: Checking if deleting the global property fails; -*/ - -__re = new RegExp; - -//CHECK#0 -if (__re.hasOwnProperty('global') !== true) { - $FAIL('#0: __re = new RegExp; __re.hasOwnProperty(\'global\') === true'); -} - -//CHECK#1 -if ((delete __re.global) !== false) { - $ERROR('#1: __re = new RegExp; (delete __re.global) === false'); -} - -//CHECK#2 -if (__re.hasOwnProperty('global') !== true) { - $ERROR('#2: __re = new RegExp;delete __re.global === true; __re.hasOwnProperty(\'global\') === true'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.7_Properties_of_RegExp_Instances/15.10.7.3_ignoreCase/S15.10.7.3_A10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.7_Properties_of_RegExp_Instances/15.10.7.3_ignoreCase/S15.10.7.3_A10.js deleted file mode 100644 index 9214f6c40..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.7_Properties_of_RegExp_Instances/15.10.7.3_ignoreCase/S15.10.7.3_A10.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.7.3_A10; -* @section: 15.10.7.3; -* @assertion: The RegExp instance ignoreCase property has the attribute ReadOnly; -* @description: Checking if varying the ignoreCase property fails; -*/ - -__re = /a|b|c/; - -//CHECK#1 -if (__re.hasOwnProperty('ignoreCase') !== true) { - $FAIL('#1: __re = /a|b|c/; __re.hasOwnProperty(\'ignoreCase\') === true'); -} - -__obj = __re.ignoreCase; - -__re.ignoreCase = "shifted"; - -//CHECK#2 -if (__re.ignoreCase !== __obj) { - $ERROR('#2: __re = /a|b|c/; __obj = __re.ignoreCase; __re.ignoreCase = "shifted"; __re.ignoreCase === __obj. Actual: ' + (__re.ignoreCase)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.7_Properties_of_RegExp_Instances/15.10.7.3_ignoreCase/S15.10.7.3_A8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.7_Properties_of_RegExp_Instances/15.10.7.3_ignoreCase/S15.10.7.3_A8.js deleted file mode 100644 index 958be84f7..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.7_Properties_of_RegExp_Instances/15.10.7.3_ignoreCase/S15.10.7.3_A8.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.7.3_A8; -* @section: 15.10.7.3; -* @assertion: The RegExp instance ignoreCase property has the attribute DontEnum; -* @description: Checking if enumerating the ignoreCase property of RegExp instance fails; -*/ - -__re = new RegExp("[|||||||]",""); - -//CHECK#0 -if (__re.hasOwnProperty('ignoreCase') !== true) { - $FAIL('#0: __re = new RegExp("[|||||||]",""); __re.hasOwnProperty(\'ignoreCase\') === true'); -} - - //CHECK#1 -if (__re.propertyIsEnumerable('ignoreCase') !== false) { - $ERROR('#1: __re = new RegExp("[|||||||]",""); __re.propertyIsEnumerable(\'ignoreCase\') === false'); -} - - //CHECK#2 -count = 0 -for (p in __re){ - if (p==="ignoreCase") count++ -} - -if (count !== 0) { - $ERROR('#2: count = 0; __re = new RegExp("[|||||||]",""); for (p in __re){ if (p==="ignoreCase") count++; } count === 0. Actual: ' + (count)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.7_Properties_of_RegExp_Instances/15.10.7.3_ignoreCase/S15.10.7.3_A9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.7_Properties_of_RegExp_Instances/15.10.7.3_ignoreCase/S15.10.7.3_A9.js deleted file mode 100644 index 3bc27e1f6..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.7_Properties_of_RegExp_Instances/15.10.7.3_ignoreCase/S15.10.7.3_A9.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.7.3_A9; -* @section: 15.10.7.3; -* @assertion: The RegExp instance ignoreCase property has the attribute DontDelete; -* @description: Checking if deleting the ignoreCase property fails; -*/ - -__re = new RegExp; - -//CHECK#0 -if (__re.hasOwnProperty('ignoreCase') !== true) { - $FAIL('#0: __re = new RegExp; __re.hasOwnProperty(\'ignoreCase\') === true'); -} - -//CHECK#1 -if ((delete __re.ignoreCase) !== false) { - $ERROR('#1: __re = new RegExp; (delete __re.ignoreCase) === false'); -} - -//CHECK#2 -if (__re.hasOwnProperty('ignoreCase') !== true) { - $ERROR('#2: __re = new RegExp;delete __re.ignoreCase === true; __re.hasOwnProperty(\'ignoreCase\') === true'); -} - - - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.7_Properties_of_RegExp_Instances/15.10.7.4_multiline/S15.10.7.4_A10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.7_Properties_of_RegExp_Instances/15.10.7.4_multiline/S15.10.7.4_A10.js deleted file mode 100644 index fa8303dce..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.7_Properties_of_RegExp_Instances/15.10.7.4_multiline/S15.10.7.4_A10.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.7.4_A10; -* @section: 15.10.7.4; -* @assertion: The RegExp instance multiline property has the attribute ReadOnly; -* @description: Checking if varying the multiline property fails; -*/ - -__re = /\n/; - -//CHECK#1 -if (__re.hasOwnProperty('multiline') !== true) { - $FAIL('#1: __re = /\\n/; __re.hasOwnProperty(\'multiline\') === true'); -} - -__obj = __re.multiline; - -__re.multiline = "shifted"; - -//CHECK#2 -if (__re.multiline !== __obj) { - $ERROR('#2: __re = /\\n/; __obj = __re.multiline; __re.multiline = "shifted"; __re.multiline === __obj. Actual: ' + (__re.multiline)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.7_Properties_of_RegExp_Instances/15.10.7.4_multiline/S15.10.7.4_A8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.7_Properties_of_RegExp_Instances/15.10.7.4_multiline/S15.10.7.4_A8.js deleted file mode 100644 index bbb786cf7..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.7_Properties_of_RegExp_Instances/15.10.7.4_multiline/S15.10.7.4_A8.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.7.4_A8; -* @section: 15.10.7.4; -* @assertion: The RegExp instance multiline property has the attribute DontEnum; -* @description: Checking if enumerating the multiline property of RegExp instance fails; -*/ - -__re = new RegExp("[\u0041-\u0049]"); - -//CHECK#0 -if (__re.hasOwnProperty('multiline') !== true) { - $FAIL('#0: __re = new RegExp("[\\u0041-\\u0049]"); __re.hasOwnProperty(\'multiline\') === true'); -} - - //CHECK#1 -if (__re.propertyIsEnumerable('multiline') !== false) { - $ERROR('#1: __re = new RegExp("[\\u0041-\\u0049]"); __re.propertyIsEnumerable(\'multiline\') === false'); -} - - //CHECK#2 -count = 0 -for (p in __re){ - if (p==="multiline") count++ -} - -if (count !== 0) { - $ERROR('#2: count = 0; __re = new RegExp("[\\u0041-\\u0049]"); for (p in __re){ if (p==="multiline") count++; } count === 0. Actual: ' + (count)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.7_Properties_of_RegExp_Instances/15.10.7.4_multiline/S15.10.7.4_A9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.7_Properties_of_RegExp_Instances/15.10.7.4_multiline/S15.10.7.4_A9.js deleted file mode 100644 index 699f3032c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.7_Properties_of_RegExp_Instances/15.10.7.4_multiline/S15.10.7.4_A9.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.7.4_A9; -* @section: 15.10.7.4; -* @assertion: The RegExp instance multiline property has the attribute DontDelete; -* @description: Checking if deleting the multiline property fails; -*/ - -__re = new RegExp; - -//CHECK#0 -if (__re.hasOwnProperty('multiline') !== true) { - $FAIL('#0: __re = new RegExp; __re.hasOwnProperty(\'multiline\') === true'); -} - -//CHECK#1 -if ((delete __re.multiline) !== false) { - $ERROR('#1: __re = new RegExp; (delete __re.multiline) === false'); -} - -//CHECK#2 -if (__re.hasOwnProperty('multiline') !== true) { - $ERROR('#2: __re = new RegExp;delete __re.multiline === true; __re.hasOwnProperty(\'multiline\') === true'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.7_Properties_of_RegExp_Instances/15.10.7.5_lastIndex/S15.10.7.5_A8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.7_Properties_of_RegExp_Instances/15.10.7.5_lastIndex/S15.10.7.5_A8.js deleted file mode 100644 index 9b7630799..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.7_Properties_of_RegExp_Instances/15.10.7.5_lastIndex/S15.10.7.5_A8.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.7.5_A8; -* @section: 15.10.7.5; -* @assertion: The RegExp instance lastIndex property has the attribute DontEnum; -* @description: Checking if enumerating the lastIndex property of RegExp instance fails; -*/ - -__re = new RegExp("A?B"); - -//CHECK#0 -if (__re.hasOwnProperty('lastIndex') !== true) { - $FAIL('#0: __re = new RegExp("A?B"); __re.hasOwnProperty(\'lastIndex\') === true'); -} - - //CHECK#1 -if (__re.propertyIsEnumerable('lastIndex') !== false) { - $ERROR('#1: __re = new RegExp("A?B"); __re.propertyIsEnumerable(\'lastIndex\') === false'); -} - - //CHECK#2 -count = 0 -for (p in __re){ - if (p==="lastIndex") count++ -} - -if (count !== 0) { - $ERROR('#2: count = 0; __re = new RegExp("A?B"); for (p in __re){ if (p==="lastIndex") count++; } count === 0. Actual: ' + (count)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.7_Properties_of_RegExp_Instances/15.10.7.5_lastIndex/S15.10.7.5_A9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.7_Properties_of_RegExp_Instances/15.10.7.5_lastIndex/S15.10.7.5_A9.js deleted file mode 100644 index 9fd620598..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.7_Properties_of_RegExp_Instances/15.10.7.5_lastIndex/S15.10.7.5_A9.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.7.5_A9; -* @section: 15.10.7.5; -* @assertion: The RegExp instance lastIndex property has the attribute DontDelete; -* @description: Checking if deleting the lastIndex property fails; -*/ - -__re = new RegExp; - -//CHECK#0 -if (__re.hasOwnProperty('lastIndex') !== true) { - $FAIL('#0: __re = new RegExp; __re.hasOwnProperty(\'lastIndex\') === true'); -} - -//CHECK#1 -if ((delete __re.lastIndex) !== false) { - $ERROR('#1: __re = new RegExp; (delete __re.lastIndex) === false'); -} - -//CHECK#2 -if (__re.hasOwnProperty('lastIndex') !== true) { - $ERROR('#2: __re = new RegExp;delete __re.lastIndex === true; __re.hasOwnProperty(\'lastIndex\') === true'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.7_Properties_of_RegExp_Instances/S15.10.7_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.7_Properties_of_RegExp_Instances/S15.10.7_A1_T1.js deleted file mode 100644 index 0dc8b5c6d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.7_Properties_of_RegExp_Instances/S15.10.7_A1_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.7_A1_T1; -* @section: 15.10.7; -* @assertion: RegExp instance has not [[call]] property; -* @description: Checking if call of RegExp instance fails; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: /[^a]*/() throw TypeError. Actual: ' + (/[^a]*/())); -} catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1.2: /[^a]*/() throw TypeError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.7_Properties_of_RegExp_Instances/S15.10.7_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.7_Properties_of_RegExp_Instances/S15.10.7_A1_T2.js deleted file mode 100644 index 39afe95b1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.7_Properties_of_RegExp_Instances/S15.10.7_A1_T2.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.7_A1_T2; -* @section: 15.10.7; -* @assertion: RegExp instance has not [[call]] property; -* @description: Checking if call of RegExp("a|b","g")() fails; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: RegExp("a|b","g")() throw TypeError. Actual: ' + (RegExp("a|b","g")())); -} catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1.2: RegExp("a|b","g")() throw TypeError. Actual: ' + (e)); - } -} - - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.7_Properties_of_RegExp_Instances/S15.10.7_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.7_Properties_of_RegExp_Instances/S15.10.7_A2_T1.js deleted file mode 100644 index 3295ab64f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.7_Properties_of_RegExp_Instances/S15.10.7_A2_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.7_A2_T1; -* @section: 15.10.7; -* @assertion: RegExp instance has not [[construct]] property; -* @description: Checking if creating new RegExp instance fails; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: new /z/() throw TypeError. Actual: ' + (new /z/())); -} catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1.2: new /z/() throw TypeError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.7_Properties_of_RegExp_Instances/S15.10.7_A2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.7_Properties_of_RegExp_Instances/S15.10.7_A2_T2.js deleted file mode 100644 index 3a7237348..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.7_Properties_of_RegExp_Instances/S15.10.7_A2_T2.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.7_A2_T2; -* @section: 15.10.7; -* @assertion: RegExp instance has not [[construct]] property; -* @description: Checking if creating "new RegExp" instance fails; -*/ - -//CHECK#1 -try { - $ERROR('#1.1: new new RegExp throw TypeError. Actual: ' + (new new RegExp)); -} catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1.2: new new RegExp throw TypeError. Actual: ' + (e)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.7_Properties_of_RegExp_Instances/S15.10.7_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.7_Properties_of_RegExp_Instances/S15.10.7_A3_T1.js deleted file mode 100644 index e8dc96d25..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.7_Properties_of_RegExp_Instances/S15.10.7_A3_T1.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.7_A3_T1; -* @section: 15.10.7; -* @assertion: RegExp instance type is RegExp; -* @description: Checking type of RegExp instance with operators typeof, instanceof and check it constructor. -* RegExp instance is /[^a]* /; -*/ - -__re = /[^a]*/; - -//CHECK#1 -if (typeof __re !== "object") { - $ERROR('#1: __re = /[^a]*/; typeof __re === "object". Actual: ' + (typeof __re)); -} - -//CHECK#1 -if (__re.constructor !== RegExp) { - $ERROR('#2: __re = /[^a]*/; __re.constructor === RegExp. Actual: ' + (__re.constructor)); -} - -//CHECK#3 -if ((__re instanceof RegExp) !== true) { - $ERROR('#3: __re = /[^a]*/; (__re instanceof RegExp) === true'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.7_Properties_of_RegExp_Instances/S15.10.7_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.7_Properties_of_RegExp_Instances/S15.10.7_A3_T2.js deleted file mode 100644 index 098d6d0ec..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.10_RegExp_Objects/15.10.7_Properties_of_RegExp_Instances/S15.10.7_A3_T2.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.7_A3_T2; -* @section: 15.10.7; -* @assertion: RegExp instance type is RegExp; -* @description: Checking type of RegExp instance with operators typeof, instanceof and check it constructor. -* RegExp instance is new RegExp; -*/ - -__re = new RegExp; - -//CHECK#1 -if (typeof __re !== "object") { - $ERROR('#1: __re = new RegExp; typeof __re === "object". Actual: ' + (typeof __re)); -} - -//CHECK#1 -if (__re.constructor !== RegExp) { - $ERROR('#2: __re = new RegExp; __re.constructor === RegExp. Actual: ' + (__re.constructor)); -} - -//CHECK#3 -if ((__re instanceof RegExp) !== true) { - $ERROR('#3: __re = new RegExp; (__re instanceof RegExp) === true'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.1_The_Error_Constructor_Called_as_a_Function/S15.11.1.1_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.1_The_Error_Constructor_Called_as_a_Function/S15.11.1.1_A1_T1.js deleted file mode 100644 index 60cfcbf8c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.1_The_Error_Constructor_Called_as_a_Function/S15.11.1.1_A1_T1.js +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.11.1.1_A1_T1; -* @section: 15.11.1.1, 16; -* @assertion: If the argument "message" is not undefined, the message property of the newly constructed object is -* set to ToString(message); -* @description: Checking message property of different error objects; -*/ - -function otherScope(msg) -{ - return Error(msg); -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -var err1=Error('msg1'); -if(err1.message!=="msg1"){ - $ERROR('#1: var err1=Error(\'msg1\'); err1.message==="msg1". Actual: '+err1.message); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -var err2=otherScope('msg2'); -if(err2.message!=="msg2"){ - $ERROR('#2: function otherScope(msg){return Error(msg);} var err2=otherScope(\'msg2\'); err2.message==="msg2". Actual: '+err2.message); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -var err3=otherScope(); -if(err3.hasOwnProperty('message')){ - $ERROR('#3: function otherScope(msg){return Error(msg);} var err3=otherScope(); err3.hasOwnProperty("message"). Actual: '+err3.message); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -var err4=eval("Error('msg4')"); -if(err4.message!=="msg4"){ - $ERROR('#4: var err4=eval("Error(\'msg4\')"); err4.message==="msg4". Actual: '+err4.message); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.1_The_Error_Constructor_Called_as_a_Function/S15.11.1.1_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.1_The_Error_Constructor_Called_as_a_Function/S15.11.1.1_A2_T1.js deleted file mode 100644 index 8b3ecf81c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.1_The_Error_Constructor_Called_as_a_Function/S15.11.1.1_A2_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.11.1.1_A2_T1; -* @section: 15.11.1.1, 16; -* @assertion: The [[Prototype]] property of the newly constructed object is set to the original Error prototype -* object, the one that is the initial value of Error.prototype (15.11.3.1); -* @description: Checking prototype of the newly constructed Error object; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -var err1=Error('msg1'); -if(!Error.prototype.isPrototypeOf(err1)){ - $ERROR('#1: var err1=Error(\'msg1\'); Error.prototype.isPrototypeOf(err1) return true. Actual: '+Error.prototype.isPrototypeOf(err1)); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.1_The_Error_Constructor_Called_as_a_Function/S15.11.1.1_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.1_The_Error_Constructor_Called_as_a_Function/S15.11.1.1_A3_T1.js deleted file mode 100644 index b3298349d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.1_The_Error_Constructor_Called_as_a_Function/S15.11.1.1_A3_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.11.1.1_A3_T1; -* @section: 15.11.1.1, 16; -* @assertion: The [[Class]] property of the newly constructed object is set to "Error"; -* @description: Checking Class of the newly constructed Error object using toSting() function; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -Error.prototype.toString=Object.prototype.toString; -var err1=Error(); -if(err1.toString()!=='[object '+ 'Error' +']'){ - $ERROR('#1: Error.prototype.toString=Object.prototype.toString; var err1=Error(); err1.toString()===\'[object Error]\'. Actual: '+err1.toString()); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.1_The_Error_Constructor_Called_as_a_Function/S15.11.1_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.1_The_Error_Constructor_Called_as_a_Function/S15.11.1_A1_T1.js deleted file mode 100644 index feda37ad3..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.1_The_Error_Constructor_Called_as_a_Function/S15.11.1_A1_T1.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.11.1_A1_T1; -* @section: 15.11.1, 16; -* @assertion: The function call Error(...) is equivalent to the object creation expression new -* Error(...) with the same arguments; -* @description: Checking constructor of the newly constructed Error object; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -Error.prototype.toString=Object.prototype.toString; -var err1=Error(); -if(err1.constructor!==Error){ - $ERROR('#1: Error.prototype.toString=Object.prototype.toString; var err1=Error(); err1.constructor===Error. Actual: '+err1.constructor); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.2_The_Error_Constructor/S15.11.2.1_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.2_The_Error_Constructor/S15.11.2.1_A1_T1.js deleted file mode 100644 index 2ec4e11a4..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.2_The_Error_Constructor/S15.11.2.1_A1_T1.js +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.11.2.1_A1_T1; -* @section: 15.11.2.1, 16; -* @assertion: If the argument "message" is not undefined, the message property of the newly constructed object is -* set to ToString(message); -* @description: Checking message property of different error objects; -*/ - -function otherScope(msg) -{ - return new Error(msg); -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -var err1=new Error('msg1'); -if(err1.message!=="msg1"){ - $ERROR('#1: var err1=new Error(\'msg1\'); err1.message==="msg1". Actual: '+err1.message); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -var err2=otherScope('msg2'); -if(err2.message!=="msg2"){ - $ERROR('#2: function otherScope(msg){return new Error(msg);} var err2=otherScope(\'msg2\'); err2.message==="msg2". Actual: '+err2.message); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -var err3=otherScope(); -if(err3.hasOwnProperty('message')){ - $ERROR('#3: function otherScope(msg){return new Error(msg);} var err3=otherScope(); err3.hasOwnProperty("message"). Actual: '+err3.message); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -var err4=eval("new Error('msg4')"); -if(err4.message!=="msg4"){ - $ERROR('#4: var err4=eval("new Error(\'msg4\')"); err4.message==="msg4". Actual: '+err4.message); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.2_The_Error_Constructor/S15.11.2.1_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.2_The_Error_Constructor/S15.11.2.1_A2_T1.js deleted file mode 100644 index be1197300..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.2_The_Error_Constructor/S15.11.2.1_A2_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.11.2.1_A2_T1; -* @section: 15.11.2.1, 16; -* @assertion: The [[Prototype]] property of the newly constructed object is set to the original Error prototype -* object, the one that is the initial value of Error.prototype (15.11.3.1); -* @description: Checking prototype of the newly constructed Error object; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -var err1=new Error('msg1'); -if(!Error.prototype.isPrototypeOf(err1)){ - $ERROR('#1: Error.prototype.isPrototypeOf(err1) return true. Actual: '+Error.prototype.isPrototypeOf(err1)); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.2_The_Error_Constructor/S15.11.2.1_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.2_The_Error_Constructor/S15.11.2.1_A3_T1.js deleted file mode 100644 index f087ce8ca..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.2_The_Error_Constructor/S15.11.2.1_A3_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.11.2.1_A3_T1; -* @section: 15.11.2.1, 16; -* @assertion: The [[Class]] property of the newly constructed object is set to "Error"; -* @description: Checking Class of the newly constructed Error object using toSting() function; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -Error.prototype.toString=Object.prototype.toString; -var err1=new Error(); -if(err1.toString()!=='[object '+ 'Error' +']'){ - $ERROR('#1: err1.toString()===\'[object Error]\'. Actual: '+err1.toString()); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.3_Properties_of_the_Error_Constructor/S15.11.3.1_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.3_Properties_of_the_Error_Constructor/S15.11.3.1_A1_T1.js deleted file mode 100644 index 10a0615d3..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.3_Properties_of_the_Error_Constructor/S15.11.3.1_A1_T1.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.11.3.1_A1_T1; -* @section: 15.11.3.1, 16; -* @assertion: Error.prototype property has the attributes {DontDelete}; -* @description: Checking if deleting the Error.prototype property fails; -*/ - -var proto=Error.prototype; -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if(delete Error.prototype){ - $ERROR('#1: delete Error.prototype return false'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if(Error.prototype!==proto){ - $ERROR('#2: var proto=Error.prototype; delete Error.prototype; Error.prototype===proto. Actual: '+Error.prototype); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.3_Properties_of_the_Error_Constructor/S15.11.3.1_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.3_Properties_of_the_Error_Constructor/S15.11.3.1_A2_T1.js deleted file mode 100644 index 01ab353b6..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.3_Properties_of_the_Error_Constructor/S15.11.3.1_A2_T1.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.11.3.1_A2_T1; -* @section: 15.11.3.1, 16; -* @assertion: Error.prototype property has the attributes {DontEnum}; -* @description: Checking if enumerating the Error.prototype property fails; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#0 -if (!(Error.hasOwnProperty('prototype'))) { - $ERROR('#0: Error.hasOwnProperty(\'prototype\') return true. Actual: '+Error.hasOwnProperty('prototype')); -} -// -////////////////////////////////////////////////////////////////////////////// - - -////////////////////////////////////////////////////////////////////////////// -// CHECK#1 -if (Error.propertyIsEnumerable('prototype')) { - $ERROR('#1: Error.propertyIsEnumerable(\'prototype\') return false. Actual: '+Error.propertyIsEnumerable('prototype')); -} -// -////////////////////////////////////////////////////////////////////////////// - - -////////////////////////////////////////////////////////////////////////////// -// CHECK#2 -cout=0; - -for (p in Error){ - if (p==="prototype") cout++; -} - -if (cout !== 0) { - $ERROR('#2: cout === 0. Actual: '+cout ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.3_Properties_of_the_Error_Constructor/S15.11.3.1_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.3_Properties_of_the_Error_Constructor/S15.11.3.1_A3_T1.js deleted file mode 100644 index ef8d007c8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.3_Properties_of_the_Error_Constructor/S15.11.3.1_A3_T1.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.11.3.1_A3_T1; -* @section: 15.11.3.1, 16; -* @assertion: Error.prototype property has the attributes {ReadOnly}; -* @description: Checking if varying the Error.prototype property fails; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!(Error.hasOwnProperty('prototype'))) { - $ERROR('#1: Error.hasOwnProperty(\'prototype\') return true. Actual: '+Error.hasOwnProperty('prototype')); -} -// -////////////////////////////////////////////////////////////////////////////// - -__obj = Error.prototype; - -Error.prototype = function(){return "shifted";}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (Error.prototype !== __obj) { - $ERROR('#2: __obj = Error.prototype; Error.prototype = function(){return "shifted";}; Error.prototype === __obj. Actual: '+Error.prototype ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -try { - Error.prototype(); - $ERROR('#3: "Error.prototype()" lead to throwing exception'); -} catch (e) { - ; -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.3_Properties_of_the_Error_Constructor/S15.11.3.1_A4_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.3_Properties_of_the_Error_Constructor/S15.11.3.1_A4_T1.js deleted file mode 100644 index fc4573e86..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.3_Properties_of_the_Error_Constructor/S15.11.3.1_A4_T1.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.11.3.1_A4_T1; -* @section: 15.11.3.1, 16; -* @assertion: The Error has property prototype; -* @description: Checking Error.hasOwnProperty('prototype'); -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!(Error.hasOwnProperty('prototype'))) { - $ERROR('#1: Error.hasOwnProperty(\'prototype\') return true. Actual: '+Error.hasOwnProperty('prototype')); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.3_Properties_of_the_Error_Constructor/S15.11.3_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.3_Properties_of_the_Error_Constructor/S15.11.3_A1_T1.js deleted file mode 100644 index a925bdcaa..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.3_Properties_of_the_Error_Constructor/S15.11.3_A1_T1.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.11.3_A1_T1; -* @section: 15.11.3, 16; -* @assertion: The value of the internal [[Prototype]] property of the Error constructor is the Function prototype object(15.3.4); -* @description: Checking prototype of constructor of the newly constructed Error object; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -var err1=Error("err"); -if(!Function.prototype.isPrototypeOf(err1.constructor)){ - $ERROR('#1: var err1=Error("err"); Function.prototype.isPrototypeOf(err1.constructor) return true. Actual:'+Function.prototype.isPrototypeOf(err1.constructor)); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if(!Function.prototype.isPrototypeOf(Error.constructor)){ - $ERROR('#2: Function.prototype.isPrototypeOf(Error.constructor) return true. Actual:'+Function.prototype.isPrototypeOf(Error.constructor)); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.3_Properties_of_the_Error_Constructor/S15.11.3_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.3_Properties_of_the_Error_Constructor/S15.11.3_A2_T1.js deleted file mode 100644 index 3b4464c6e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.3_Properties_of_the_Error_Constructor/S15.11.3_A2_T1.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.11.3_A2_T1; -* @section: 15.11.3, 16; -* @assertion: The length property value is 1; -* @description: Checking length property; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -var err1=Error("err"); -if(err1.constructor.length!==1){ - $ERROR('#1: var err1=Error("err"); err1.constructor.length===1. Actual: '+err1.constructor.length); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if(Error.constructor.length!==1){ - $ERROR('#2: Error.constructor.length===1. Actual: '+Error.constructor.length); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.4_Properties_of_the_Error_Prototype_Object/S15.11.4.1_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.4_Properties_of_the_Error_Prototype_Object/S15.11.4.1_A1_T1.js deleted file mode 100644 index a94c25869..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.4_Properties_of_the_Error_Prototype_Object/S15.11.4.1_A1_T1.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.11.4.1_A1_T1; -* @section: 15.11.4.1, 16; -* @assertion: The initial value of Error.prototype.constructor is the built-in Error constructor; -* @description: Checking Error.prototype.constructor; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (Error.prototype.constructor !== Error) { - $ERROR('#1: Error.prototype.constructor === Error. Actual: '+Error.prototype.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.4_Properties_of_the_Error_Prototype_Object/S15.11.4.1_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.4_Properties_of_the_Error_Prototype_Object/S15.11.4.1_A1_T2.js deleted file mode 100644 index 75ac111ad..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.4_Properties_of_the_Error_Prototype_Object/S15.11.4.1_A1_T2.js +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.11.4.1_A1_T2; -* @section: 15.11.4.1, 16; -* @assertion: The initial value of Error.prototype.constructor is the built-in Error constructor; -* @description: Checking if creating "new Error.prototype.constructor" passes and checking its properties; -*/ - -constr = Error.prototype.constructor; - -err = new constr; - -////////////////////////////////////////////////////////////////////////////// -// CHECK#0 -if (err === undefined) { - $ERROR('#0: constr = Error.prototype.constructor; err = new constr; err === undefined'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -// CHECK#1 -if (err.constructor !== Error) { - $ERROR('#1: constr = Error.prototype.constructor; err = new constr; err.constructor === Error. Actual: '+err.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -// CHECK#2 -if (!(Error.prototype.isPrototypeOf(err))) { - $ERROR('#2: constr = Error.prototype.constructor; err = new constr; Error.prototype.isPrototypeOf(err) return true. Actual: '+Error.prototype.isPrototypeOf(err)); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -// CHECK#3 -Error.prototype.toString=Object.prototype.toString; -to_string_result = '[object '+ 'Error' +']'; -if (err.toString() !== to_string_result) { - $ERROR('#3: constr = Error.prototype.constructor; err = new constr; Error.prototype.toString=Object.prototype.toString; err.toString() === \'[object Error]\'. Actual: '+err.toString() ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -// CHECK#4 -if (err.valueOf().toString() !== to_string_result) { - $ERROR('#4: constr = Error.prototype.constructor; err = new constr; Error.prototype.toString=Object.prototype.toString; err.valueOf().toString() === \'[object Error]\'. Actual: '+err.valueOf().toString() ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.4_Properties_of_the_Error_Prototype_Object/S15.11.4.2_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.4_Properties_of_the_Error_Prototype_Object/S15.11.4.2_A1.js deleted file mode 100644 index c30bac0a8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.4_Properties_of_the_Error_Prototype_Object/S15.11.4.2_A1.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.11.4.2_A1; - * @section: 15.11.4.2, 16; - * @assertion: The Error.prototype has name property; - * @description: Checking Error.prototype.name; -*/ - -////////////////////////////////////////////////////////////////////////////// -// CHECK#1 -if (!Error.prototype.hasOwnProperty('name')) { - $ERROR('#1: Error.prototype.hasOwnProperty(\'name\') return true. Actual: '+Error.prototype.hasOwnProperty('name')); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.4_Properties_of_the_Error_Prototype_Object/S15.11.4.2_A2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.4_Properties_of_the_Error_Prototype_Object/S15.11.4.2_A2.js deleted file mode 100644 index 0fe93ee78..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.4_Properties_of_the_Error_Prototype_Object/S15.11.4.2_A2.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.11.4.2_A2; - * @section: 15.11.4.2, 16; - * @assertion: The initial value of Error.prototype.name is "Error"; - * @description: Checking value of Error.prototype.name; -*/ - -////////////////////////////////////////////////////////////////////////////// -// CHECK#1 -if (Error.prototype.name!=="Error") { - $ERROR('#1: Error.prototype.name==="Error". Actual: '+Error.prototype.name); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.4_Properties_of_the_Error_Prototype_Object/S15.11.4.3_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.4_Properties_of_the_Error_Prototype_Object/S15.11.4.3_A1.js deleted file mode 100644 index b70b494cb..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.4_Properties_of_the_Error_Prototype_Object/S15.11.4.3_A1.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.11.4.3_A1; - * @section: 15.11.4.3, 16; - * @assertion: The Error.prototype has message property; - * @description: Checking Error.prototype.message; -*/ - -////////////////////////////////////////////////////////////////////////////// -// CHECK#1 -if (!Error.prototype.hasOwnProperty('message')) { - $ERROR('#1: Error.prototype.hasOwnProperty(\'message\') reurn true. Actual: '+Error.prototype.hasOwnProperty('message')); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.4_Properties_of_the_Error_Prototype_Object/S15.11.4.3_A2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.4_Properties_of_the_Error_Prototype_Object/S15.11.4.3_A2.js deleted file mode 100644 index 44f789fe5..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.4_Properties_of_the_Error_Prototype_Object/S15.11.4.3_A2.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.11.4.3_A2; - * @section: 15.11.4.3, 16; - * @assertion: The initial value of Error.prototype.message is ""; - * @description: Checking value of Error.prototype.message; -*/ - -////////////////////////////////////////////////////////////////////////////// -// CHECK#1 -if (Error.prototype.message!=="") { - $ERROR('#1: Error.prototype.message==="". Actual: '+Error.prototype.message); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.4_Properties_of_the_Error_Prototype_Object/S15.11.4.4_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.4_Properties_of_the_Error_Prototype_Object/S15.11.4.4_A1.js deleted file mode 100644 index abb9970f2..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.4_Properties_of_the_Error_Prototype_Object/S15.11.4.4_A1.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.11.4.4_A1; - * @section: 15.11.4.4, 16; - * @assertion: The Error.prototype has toString property; - * @description: Checking Error.prototype.toString; -*/ - -////////////////////////////////////////////////////////////////////////////// -// CHECK#1 -if (!Error.prototype.hasOwnProperty('toString')) { - $ERROR('#1: Error.prototype.hasOwnProperty(\'toString\') return true. Actual: '+Error.prototype.hasOwnProperty('toString')); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.4_Properties_of_the_Error_Prototype_Object/S15.11.4.4_A2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.4_Properties_of_the_Error_Prototype_Object/S15.11.4.4_A2.js deleted file mode 100644 index a491b04fa..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.4_Properties_of_the_Error_Prototype_Object/S15.11.4.4_A2.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.11.4.4_A2; - * @section: 15.11.4.4, 16; - * @assertion: The Error.prototype.toString returns an implementation defined string; - * @description: Checking if call of Error.prototype.toSting() fails; -*/ - -////////////////////////////////////////////////////////////////////////////// -// CHECK#1 -var err1=new Error("Error"); -try{ - var toStr=err1.toString(); -} -catch(e){ - $ERROR('#1: var err1=new Error("Error"); var toStr=err1.toString(); lead to throwing exception. Exception is '+e); -} -if (toStr===undefined) { - $ERROR('#2: var err1=new Error("Error"); var toStr=err1.toString(); toStr!==undefined. Actual: '+toStr); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.4_Properties_of_the_Error_Prototype_Object/S15.11.4_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.4_Properties_of_the_Error_Prototype_Object/S15.11.4_A1.js deleted file mode 100644 index 30026a253..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.4_Properties_of_the_Error_Prototype_Object/S15.11.4_A1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.11.4_A1; - * @section: 15.11.4, 16; - * @assertion: The value of the internal [[Prototype]] property of the Error prototype object is the Object prototype - * object(15.2.3.1); - * @description: Get Error.prototype and compare with Object.prototype; -*/ - -////////////////////////////////////////////////////////////////////////////// -// CHECK#1 -if (!Object.prototype.isPrototypeOf(Error.prototype)) { - $ERROR('#1: Object.prototype.isPrototypeOf(Error.prototype) return true. Actual: '+Object.prototype.isPrototypeOf(Error.prototype)); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.4_Properties_of_the_Error_Prototype_Object/S15.11.4_A2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.4_Properties_of_the_Error_Prototype_Object/S15.11.4_A2.js deleted file mode 100644 index ad2180dad..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.4_Properties_of_the_Error_Prototype_Object/S15.11.4_A2.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.11.4_A2; -* @section: 15.11.4, 16; -* @assertion: The value of the internal [[Class]] property of Error prototype object is "Error"; -* @description: Getting the value of the internal [[Class]] property using Error.prototype.toString() function; -*/ - -Error.prototype.toString=Object.prototype.toString; -__tostr = Error.prototype.toString(); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__tostr !== "[object Error]") { - $ERROR('#1: Error.prototype.toString=Object.prototype.toString; __tostr = Error.prototype.toString(); __tostr === "[object Error]". Actual: '+__tostr ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.4_Properties_of_the_Error_Prototype_Object/S15.11.4_A3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.4_Properties_of_the_Error_Prototype_Object/S15.11.4_A3.js deleted file mode 100644 index a1eb662c6..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.4_Properties_of_the_Error_Prototype_Object/S15.11.4_A3.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.11.4_A3; -* @section: 15.11.4, 16; -* @assertion: Since Error prototype object is not function it has not [[call]] method; -* @description: Checking if call of Error prototype as a function fails; -*/ - - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try { - Error.prototype(); - $FAIL('#1: "Error.prototype()" lead to throwing exception'); -} catch (e) {} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.4_Properties_of_the_Error_Prototype_Object/S15.11.4_A4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.4_Properties_of_the_Error_Prototype_Object/S15.11.4_A4.js deleted file mode 100644 index 4f3cb2c4b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.11_Error_Objects/15.11.4_Properties_of_the_Error_Prototype_Object/S15.11.4_A4.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.11.4_A4; -* @section: 15.11.4, 16; -* @assertion: Since Error prototype object is not function it has not [[create]] method; -* @description: Checking if creating "new Error.prototype" fails; -*/ - - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try { - __instance = new Object.prototype; - $FAIL('#1: "__instance = new Object.prototype" lead to throwing exception'); -} catch (e) {} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.1_Value_Properties_of_the_Global_Object/15.1.1.1_NaN/S15.1.1.1_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.1_Value_Properties_of_the_Global_Object/15.1.1.1_NaN/S15.1.1.1_A1.js deleted file mode 100644 index b85084bee..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.1_Value_Properties_of_the_Global_Object/15.1.1.1_NaN/S15.1.1.1_A1.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.1.1_A1; - * @section: 15.1.1.1, 11.4.3, 15.1.2.4, 15.1.2.5; - * @assertion: The initial value of NaN is NaN; - * @description: Use typeof, isNaN, isFinite; -*/ - -// CHECK#1 -if (typeof(NaN) !== "number") { - $ERROR('#1: typeof(NaN) === "number". Actual: ' + (typeof(NaN))); -} - -// CHECK#2 -if (isNaN(NaN) !== true) { - $ERROR('#2: NaN === Not-a-Number. Actual: ' + (NaN)); -} - -// CHECK#3 -if (isFinite(NaN) !== false) { - $ERROR('#3: NaN === Not-a-Finite. Actual: ' + (NaN)); -} \ No newline at end of file diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.1_Value_Properties_of_the_Global_Object/15.1.1.1_NaN/S15.1.1.1_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.1_Value_Properties_of_the_Global_Object/15.1.1.1_NaN/S15.1.1.1_A2_T1.js deleted file mode 100644 index c7564d1a0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.1_Value_Properties_of_the_Global_Object/15.1.1.1_NaN/S15.1.1.1_A2_T1.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.1.1_A2_T1; - * @section: 15.1.1.1, 15.5.1, 15.6.1, 15.7.1; - * @assertion: The NaN is not ReadOnly; - * @description: Checking Boolean, Number, String Functions; -*/ - -// CHECK#1 -NaN = 1; -if (Boolean(NaN) !== true) { - $ERROR('#1: NaN = 1; Boolean(NaN) === true. Actual: ' + (Boolean(NaN))); -} - -// CHECK#2 -NaN = true; -if (Number(NaN) !== 1) { - $ERROR('#2: NaN = true; Number(NaN) === 1. Actual: ' + (Number(NaN))); -} - -// CHECK#3 -NaN = 1; -if (String(NaN) !== "1") { - $ERROR('#3: NaN = 1; String(NaN) === "1". Actual: ' + (String(NaN))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.1_Value_Properties_of_the_Global_Object/15.1.1.1_NaN/S15.1.1.1_A2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.1_Value_Properties_of_the_Global_Object/15.1.1.1_NaN/S15.1.1.1_A2_T2.js deleted file mode 100644 index 098308fca..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.1_Value_Properties_of_the_Global_Object/15.1.1.1_NaN/S15.1.1.1_A2_T2.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.1.1_A2_T2; - * @section: 15.1.1.1, 11.4.3; - * @assertion: The NaN is not ReadOnly; - * @description: Checking typeof Operator; -*/ - -// CHECK#1 -NaN = true; -if (typeof(NaN) !== "boolean") { - $ERROR('#1: NaN = true; typeof(NaN) === "boolean". Actual: ' + (typeof(NaN))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.1_Value_Properties_of_the_Global_Object/15.1.1.1_NaN/S15.1.1.1_A3.1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.1_Value_Properties_of_the_Global_Object/15.1.1.1_NaN/S15.1.1.1_A3.1.js deleted file mode 100644 index 11917cd49..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.1_Value_Properties_of_the_Global_Object/15.1.1.1_NaN/S15.1.1.1_A3.1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.1.1_A3.1; - * @section: 15.1.1.1, 11.4.1; - * @assertion: The NaN is DontDelete; - * @description: Use delete; -*/ - -// CHECK#1 -if (delete NaN !== false) { - $ERROR('#1: delete NaN === false. Actual: ' + (delete NaN)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.1_Value_Properties_of_the_Global_Object/15.1.1.1_NaN/S15.1.1.1_A3.2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.1_Value_Properties_of_the_Global_Object/15.1.1.1_NaN/S15.1.1.1_A3.2.js deleted file mode 100644 index 40a824d44..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.1_Value_Properties_of_the_Global_Object/15.1.1.1_NaN/S15.1.1.1_A3.2.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.1.1_A3.2; - * @section: 15.1.1.1, 12.6.4; - * @assertion: The NaN is DontEnum; - * @description: Use for-in statement; -*/ - -// CHECK#1 -for (prop in this) { - if (prop === "NaN") { - $ERROR('#1: The NaN is DontEnum'); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.1_Value_Properties_of_the_Global_Object/15.1.1.2_Infinity/S15.1.1.2_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.1_Value_Properties_of_the_Global_Object/15.1.1.2_Infinity/S15.1.1.2_A1.js deleted file mode 100644 index 3d74966c8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.1_Value_Properties_of_the_Global_Object/15.1.1.2_Infinity/S15.1.1.2_A1.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.1.2_A1; - * @section: 15.1.1.2, 11.4.3, 15.1.2.4, 15.1.2.5; - * @assertion: The initial value of Infinity is Number.POSITIVE_INFINITY; - * @description: Use typeof, isNaN, isFinite; -*/ - -// CHECK#1 -if (typeof(Infinity) !== "number") { - $ERROR('#1: typeof(Infinity) === "number". Actual: ' + (typeof(Infinity))); -} - -// CHECK#2 -if (isFinite(Infinity) !== false) { - $ERROR('#2: Infinity === Not-a-Finite. Actual: ' + (Infinity)); -} - -// CHECK#3 -if (isNaN(Infinity) !== false) { - $ERROR('#3: Infinity === Not-a-Number. Actual: ' + (Infinity)); -} - - -// CHECK#4 -if (Infinity !== Number.POSITIVE_INFINITY) { - $ERROR('#4: Infinity === Number.POSITIVE_INFINITY. Actual: ' + (Infinity)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.1_Value_Properties_of_the_Global_Object/15.1.1.2_Infinity/S15.1.1.2_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.1_Value_Properties_of_the_Global_Object/15.1.1.2_Infinity/S15.1.1.2_A2_T1.js deleted file mode 100644 index 8d0cbe3c3..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.1_Value_Properties_of_the_Global_Object/15.1.1.2_Infinity/S15.1.1.2_A2_T1.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.1.2_A2_T1; - * @section: 15.1.1.2, 15.5.1, 15.6.1, 15.7.1; - * @assertion: The Infinity is not ReadOnly; - * @description: Checking Boolean, Number, String Functions; -*/ - -// CHECK#1 -Infinity = 0; -if (Boolean(Infinity) !== false) { - $ERROR('#1: Infinity = 0; Boolean(Infinity) === false. Actual: ' + (Boolean(Infinity))); -} - -// CHECK#2 -Infinity = false; -if (Number(Infinity) !== 0) { - $ERROR('#2: Infinity = false; Number(Infinity) === 0. Actual: ' + (Number(Infinity))); -} - -// CHECK#3 -Infinity = 0; -if (String(Infinity) !== "0") { - $ERROR('#3: Infinity = 0; String(Infinity) === "0". Actual: ' + (String(Infinity))); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.1_Value_Properties_of_the_Global_Object/15.1.1.2_Infinity/S15.1.1.2_A2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.1_Value_Properties_of_the_Global_Object/15.1.1.2_Infinity/S15.1.1.2_A2_T2.js deleted file mode 100644 index f4a41e7c3..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.1_Value_Properties_of_the_Global_Object/15.1.1.2_Infinity/S15.1.1.2_A2_T2.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.1.2_A2_T2; - * @section: 15.1.1.2, 11.4.3; - * @assertion: The Infinity is not ReadOnly; - * @description: Checking typeof Functions; -*/ - -// CHECK#1 -Finite = true; -if (typeof(Finite) !== "boolean") { - $ERROR('#1: Finite = true; typeof(NaN) === "boolean". Actual: ' + (typeof(NaN))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.1_Value_Properties_of_the_Global_Object/15.1.1.2_Infinity/S15.1.1.2_A3.1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.1_Value_Properties_of_the_Global_Object/15.1.1.2_Infinity/S15.1.1.2_A3.1.js deleted file mode 100644 index a74c77da1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.1_Value_Properties_of_the_Global_Object/15.1.1.2_Infinity/S15.1.1.2_A3.1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.1.2_A3.1; - * @section: 15.1.1.2, 11.4.1; - * @assertion: The Infinity is DontDelete; - * @description: Use delete; -*/ - -// CHECK#1 -if (delete Infinity !== false) { - $ERROR('#1: delete Infinity === false. Actual: ' + (delete Infinity)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.1_Value_Properties_of_the_Global_Object/15.1.1.2_Infinity/S15.1.1.2_A3.2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.1_Value_Properties_of_the_Global_Object/15.1.1.2_Infinity/S15.1.1.2_A3.2.js deleted file mode 100644 index 3c39266e2..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.1_Value_Properties_of_the_Global_Object/15.1.1.2_Infinity/S15.1.1.2_A3.2.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.1.2_A3.2; - * @section: 15.1.1.2, 12.6.4; - * @assertion: The Infinity is DontEnum; - * @description: Use for-in statement; -*/ - -// CHECK#1 -for (prop in this) { - if (prop === "Infinity") { - $ERROR('#1: The Infinity is DontEnum'); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.1_Value_Properties_of_the_Global_Object/15.1.1.3_undefined/S15.1.1.3_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.1_Value_Properties_of_the_Global_Object/15.1.1.3_undefined/S15.1.1.3_A1.js deleted file mode 100644 index e3dec6a74..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.1_Value_Properties_of_the_Global_Object/15.1.1.3_undefined/S15.1.1.3_A1.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.1.3_A1; - * @section: 15.1.1.3, 11.4.3, 15.1.2.4, 15.1.2.5; - * @assertion: The initial value of undefined is undefined; - * @description: Use typeof, isNaN, isFinite; -*/ - -// CHECK#1 -if (typeof(undefined) !== "undefined") { - $ERROR('#1: typeof(undefined) === "undefined". Actual: ' + (typeof(undefined))); -} - -// CHECK#2 -if (undefined !== void 0) { - $ERROR('#2: undefined === void 0. Actual: ' + (undefined)); -} - -// CHECK#3 -if (undefined !== eval("var x")) { - $ERROR('#3: undefined === eval("var x"). Actual: ' + (undefined)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.1_Value_Properties_of_the_Global_Object/15.1.1.3_undefined/S15.1.1.3_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.1_Value_Properties_of_the_Global_Object/15.1.1.3_undefined/S15.1.1.3_A2_T1.js deleted file mode 100644 index 811b9e4ee..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.1_Value_Properties_of_the_Global_Object/15.1.1.3_undefined/S15.1.1.3_A2_T1.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.1.3_A2_T1; - * @section: 15.1.1.3, 15.5.1, 15.6.1, 15.7.1; - * @assertion: The undefined is not ReadOnly; - * @description: Checking Boolean, Number, String Functions; -*/ - -// CHECK#1 -undefined = 1; -if (Boolean(undefined) !== true) { - $ERROR('#1: undefined = 1; Boolean(undefined) === true. Actual: ' + (Boolean(undefined))); -} - -// CHECK#2 -undefined = true; -if (Number(undefined) !== 1) { - $ERROR('#2: undefined = true; Number(undefined) === 1. Actual: ' + (Number(undefined))); -} - -// CHECK#3 -undefined = 1; -if (String(undefined) !== "1") { - $ERROR('#3: undefined = 1; String(undefined) === "1". Actual: ' + (String(undefined))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.1_Value_Properties_of_the_Global_Object/15.1.1.3_undefined/S15.1.1.3_A2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.1_Value_Properties_of_the_Global_Object/15.1.1.3_undefined/S15.1.1.3_A2_T2.js deleted file mode 100644 index d50fa512e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.1_Value_Properties_of_the_Global_Object/15.1.1.3_undefined/S15.1.1.3_A2_T2.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.1.3_A2_T2; - * @section: 15.1.1.3, 11.4.3; - * @assertion: The undefined is not ReadOnly; - * @description: Checking typeof Operator; -*/ - -// CHECK#1 -undefined = true; -if (typeof(undefined) !== "boolean") { - $ERROR('#1: undefined = true; typeof(undefined) === "boolean". Actual: ' + (typeof(undefined))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.1_Value_Properties_of_the_Global_Object/15.1.1.3_undefined/S15.1.1.3_A3.1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.1_Value_Properties_of_the_Global_Object/15.1.1.3_undefined/S15.1.1.3_A3.1.js deleted file mode 100644 index 285b3de47..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.1_Value_Properties_of_the_Global_Object/15.1.1.3_undefined/S15.1.1.3_A3.1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.1.3_A3.1; - * @section: 15.1.1.3, 11.4.1; - * @assertion: The undefined is DontDelete; - * @description: Use delete; -*/ - -// CHECK#1 -if (delete undefined !== false) { - $ERROR('#1: delete undefined === false. Actual: ' + (delete undefined)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.1_Value_Properties_of_the_Global_Object/15.1.1.3_undefined/S15.1.1.3_A3.2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.1_Value_Properties_of_the_Global_Object/15.1.1.3_undefined/S15.1.1.3_A3.2.js deleted file mode 100644 index fcd0d27aa..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.1_Value_Properties_of_the_Global_Object/15.1.1.3_undefined/S15.1.1.3_A3.2.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.1.3_A3.2; - * @section: 15.1.1.3, 12.6.4; - * @assertion: The undefined is DontEnum; - * @description: Use for-in statement; -*/ - -// CHECK#1 -for (prop in this) { - if (prop === "undefined") { - $ERROR('#1: The undefined is DontEnum'); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A1.1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A1.1_T1.js deleted file mode 100644 index 2c7eeed0e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A1.1_T1.js +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.1_A1.1_T1; - * @section: 15.1.2.1; - * @assertion: If x is not a string value, return x; - * @description: Checking all primitive; -*/ - -//CHECK#1 -x = 1; -if (eval(x) !== x) { - $ERROR('#1: x = 1; eval(x) === x. Actual: ' + (eval(x))); -} - -//CHECK#2 -if (eval(1) !== 1) { - $ERROR('#2: eval(1) === 1. Actual: ' + (eval(1))); -} - -//CHECK#3 -if (eval(true) !== true) { - $ERROR('#3: eval(true) === true. Actual: ' + (eval(true))); -} - -//CHECK#4 -if (eval(null) !== null) { - $ERROR('#4: eval(null) === null. Actual: ' + (eval(null))); -} - -//CHECK#5 -if (eval(undefined) !== undefined) { - $ERROR('#5: eval(undefined) === undefined. Actual: ' + (eval(undefined))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A1.1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A1.1_T2.js deleted file mode 100644 index 4d877392f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A1.1_T2.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.1_A1.1_T2; - * @section: 15.1.2.1; - * @assertion: If x is not a string value, return x; - * @description: Checking all object; -*/ - -//CHECK#1 -x = {}; -if (eval(x) !== x) { - $ERROR('#1: x = {}; eval(x) === x. Actual: ' + (eval(x))); -} - -//CHECK#2 -x = new Number(1); -if (eval(x) !== x) { - $ERROR('#2: x = new Number(1); eval(x) === x. Actual: ' + (eval(x))); -} - -//CHECK#3 -x = new Boolean(true); -if (eval(x) !== x) { - $ERROR('#3: x = new Boolean(true); eval(x) === x. Actual: ' + (eval(x))); -} - -//CHECK#4 -x = new String("1+1"); -if (eval(x) !== x) { - $ERROR('#4: x = new String("1"); eval(x) === x. Actual: ' + (eval(x))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A1.2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A1.2_T1.js deleted file mode 100644 index d8d9777ca..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A1.2_T1.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.1_A1.2_T1; - * @section: 15.1.2.1; - * @assertion: If the eval function is called with some argument, then use a first argument; - * @description: eval("x = 1", "x = 2"), x equal 1, not 2; -*/ - -//CHECK#1 -eval("x = 1", "x = 2"); -if (x !== 1) { - $ERROR('#1: eval("x = 1", "x = 2"); x === 1. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A2_T1.js deleted file mode 100644 index 5070ac6d8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A2_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.1_A2_T1; - * @section: 15.1.2.1, 16; - * @assertion: If the parse fails, throw a SyntaxError exception (but see also clause 16); - * @description: Checking if execution of "eval("x = 1; x\u000A++"), catch SyntaxError" passes; -*/ - -//CHECK#1 -try { - eval("x = 1; x\u000A++"); - $ERROR('#1.1: eval("x = 1; x\\u000A++") must throw a SyntaxError. Actual: ' + (eval("x = 1; x\u000A++"))); -} catch (e) { - if ((e instanceof SyntaxError) !== true) { - $ERROR('#1.2: eval("x = 1; x\\u000A++") must throw a SyntaxError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A2_T2.js deleted file mode 100644 index 44615e8fb..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A2_T2.js +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.1_A2_T2; - * @section: 15.1.2.1, 16; - * @assertion: If the parse fails, throw a SyntaxError exception (but see also clause 16); - * @description: Checking if execution of "eval("x = 1; x\u000A++")" fails; - * @negative -*/ - -//CHECK#1 -eval("x = 1; x\u000A++"); diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A3.1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A3.1_T1.js deleted file mode 100644 index 161c2cb44..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A3.1_T1.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.1_A3.1_T1; - * @section: 15.1.2.1, 12.4; - * @assertion: If Result(3).type is normal and its completion value is a value V, - * then return the value V; - * @description: Expression statement. Eval return primitive value; -*/ - -//CHECK#1 -if (eval("x = 1") !== 1) { - $ERROR('#1: eval("x = 1") === 1. Actual: ' + (eval("x = 1"))); -} - -//CHECK#2 -if (eval("1") !== 1) { - $ERROR('#2: eval("1") === 1. Actual: ' + (eval("1"))); -} - -//CHECK#3 -if (eval("'1'") !== '1') { - $ERROR('#3: eval("\'1\'") === \'1\'. Actual: ' + (eval("'1'"))); -} - -//CHECK#4 -x = 1; -if (eval("++x") !== 2) { - $ERROR('#4: x = 1; eval("++x") === 2. Actual: ' + (x)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A3.1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A3.1_T2.js deleted file mode 100644 index 963fa3788..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A3.1_T2.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.1_A3.1_T2; - * @section: 15.1.2.1, 12.4; - * @assertion: If Result(3).type is normal and its completion value is a value V, - * then return the value V; - * @description: Expression statement. Eval return object value; -*/ - -//CHECK#1 -var x = {}; -if (eval("y = x") !== x) { - $ERROR('#1: var x = {}; eval("y = x") === x. Actual: ' + (eval("y = x"))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A3.2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A3.2_T1.js deleted file mode 100644 index 8bff8c954..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A3.2_T1.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.1_A3.2_T1; - * @section: 15.1.2.1, 12.1; - * @assertion: If Result(3).type is normal and its completion value is empty, - * then return the value undefined; - * @description: Block statement; -*/ - -//CHECK#1 -if (eval("{}") !== undefined) { - $ERROR('#1: eval("{}") === undefined. Actual: ' + (eval("{}"))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A3.2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A3.2_T2.js deleted file mode 100644 index 78af4be93..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A3.2_T2.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.1_A3.2_T2; - * @section: 15.1.2.1, 12.2; - * @assertion: If Result(3).type is normal and its completion value is empty, - * then return the value undefined; - * @description: Var statement; -*/ - -//CHECK#1 -if (eval("var x = 1") !== undefined) { - $ERROR('#1: eval("var x = 1") === undefined. Actual: ' + (eval("var x = 1"))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A3.2_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A3.2_T3.js deleted file mode 100644 index 2fa8c3f8d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A3.2_T3.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.1_A3.2_T3; - * @section: 15.1.2.1, 12.3; - * @assertion: If Result(3).type is normal and its completion value is empty, - * then return the value undefined; - * @description: Empty statement; -*/ - -//CHECK#1 -if (eval(";") !== undefined) { - $ERROR('#1: eval(";") === undefined. Actual: ' + (eval(";"))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A3.2_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A3.2_T4.js deleted file mode 100644 index 46470bb10..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A3.2_T4.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.1_A3.2_T4; - * @section: 15.1.2.1, 12.5; - * @assertion: If Result(3).type is normal and its completion value is empty, - * then return the value undefined; - * @description: If statement; -*/ - -//CHECK#1 -if (eval("if (false) ;") !== undefined) { - $ERROR('#1: eval("if (false) ;") === undefined. Actual: ' + eval("if (false) ;")); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A3.2_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A3.2_T5.js deleted file mode 100644 index ae9ea4e98..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A3.2_T5.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.1_A3.2_T5; - * @section: 15.1.2.1, 12.11; - * @assertion: If Result(3).type is normal and its completion value is empty, - * then return the value undefined; - * @description: Switch statement; -*/ - -//CHECK#1 -if (eval("switch(1){}") !== undefined) { - $ERROR('#1: eval("switch(1){}") === undefined. Actual: ' + (eval("switch(1){}"))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A3.2_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A3.2_T6.js deleted file mode 100644 index 9e52de151..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A3.2_T6.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.1_A3.2_T6; - * @section: 15.1.2.1, 12.6.1; - * @assertion: If Result(3).type is normal and its completion value is empty, - * then return the value undefined; - * @description: do-while statement; -*/ - -//CHECK#1 -if (eval("do ; while(false)") !== undefined) { - $ERROR('#1: eval("do ; while(false)") === undefined. Actual: ' + (eval("do ; while(false)"))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A3.2_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A3.2_T7.js deleted file mode 100644 index 421e265fb..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A3.2_T7.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.1_A3.2_T7; - * @section: 15.1.2.1, 12.6.2; - * @assertion: If Result(3).type is normal and its completion value is empty, - * then return the value undefined; - * @description: do-while statement; -*/ - -//CHECK#1 -if (eval("while(false);") !== undefined) { - $ERROR('#1: eval("while(false);") === undefined. Actual: ' + (eval("while(false);"))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A3.2_T8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A3.2_T8.js deleted file mode 100644 index 19bdbfe78..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A3.2_T8.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.1_A3.2_T8; - * @section: 15.1.2.1, 12.6.3; - * @assertion: If Result(3).type is normal and its completion value is empty, - * then return the value undefined; - * @description: for statement; -*/ - -//CHECK#1 -if (eval("for(false;false;false);") !== undefined) { - $ERROR('#1: eval("for(false;false;false);") === undefined. Actual: ' + (eval("for(false;false;false);"))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A3.3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A3.3_T1.js deleted file mode 100644 index f5affb3af..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A3.3_T1.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.1_A3.3_T1; - * @section: 15.1.2.1, 12.7; - * @assertion: If Result(3).type is not normal, then Result(3).type must be throw. - * Throw Result(3).value as an exception; - * @description: Continue statement; -*/ - -//CHECK#1 -try { - eval("continue;"); - $ERROR('#1.1: continue must throw SyntaxError. Actual: ' + (eval("continue;"))); -} catch(e) { - if ((e instanceof SyntaxError) !== true) { - $ERROR('#1.2: continue must throw SyntaxError. Actual ' + (e)); - } -} - -//CHECK#2 -try { - for (var i = 0; i <= 1; i++) { - for (var j = 0; j <= 1; j++) { - eval("continue;"); - } - } - $ERROR('#2.1: continue must throw SyntaxError. Actual: ' + (eval("continue;"))); -} catch(e) { - if ((e instanceof SyntaxError) !== true) { - $ERROR('#2.2: continue must throw SyntaxError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A3.3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A3.3_T2.js deleted file mode 100644 index f66ea4002..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A3.3_T2.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.1_A3.3_T2; - * @section: 15.1.2.1, 12.8; - * @assertion: If Result(3).type is not normal, then Result(3).type must be throw. - * Throw Result(3).value as an exception; - * @description: Break statement; -*/ - -//CHECK#1 -try { - eval("break;"); - $ERROR('#1.1: break must throw SyntaxError. Actual: ' + (eval("break;"))); -} catch(e) { - if ((e instanceof SyntaxError) !== true) { - $ERROR('#1.2: break must throw SyntaxError. Actual: ' + (e)); - } -} - -//CHECK#2 -try { - for (var i = 0; i <= 1; i++) { - for (var j = 0; j <= 1; j++) { - eval("break;"); - } - } - $ERROR('#2.1: break must throw SyntaxError. Actual: ' + (eval("break;"))); -} catch(e) { - if ((e instanceof SyntaxError) !== true) { - $ERROR('#2.2: break must throw SyntaxError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A3.3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A3.3_T3.js deleted file mode 100644 index fe376fa61..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A3.3_T3.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.1_A3.3_T3; - * @section: 15.1.2.1, 12.9; - * @assertion: If Result(3).type is not normal, then Result(3).type must be throw. - * Throw Result(3).value as an exception; - * @description: Return statement; -*/ - -//CHECK#1 -try { - eval("return;"); - $ERROR('#1.1: return must throw SyntaxError. Actual: ' + (eval("return;"))); -} catch(e) { - if ((e instanceof SyntaxError) !== true) { - $ERROR('#1.2: return must throw SyntaxError. Actual: ' + (e)); - } -} - -//CHECK#2 -try { - function f() { - eval("return;"); - } - f(); - $ERROR('#2.1: return must throw SyntaxError. Actual: ' + (f())); -} catch(e) { - if ((e instanceof SyntaxError) !== true) { - $ERROR('#2.2: return must throw SyntaxError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A3.3_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A3.3_T4.js deleted file mode 100644 index e1db69a52..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A3.3_T4.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.1_A3.3_T4; - * @section: 15.1.2.1, 12.13; - * @assertion: If Result(3).type is not normal, then Result(3).type must be throw. - * Throw Result(3).value as an exception; - * @description: Throw statement; -*/ - -//CHECK#1 -try { - eval("throw 1;"); - $ERROR('#1.1: throw 1 must throw SyntaxError. Actual: ' + (eval("throw 1;"))); -} catch(e) { - if (e !== 1) { - $ERROR('#1.2: throw 1 must throw SyntaxError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A4.1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A4.1.js deleted file mode 100644 index cfa04627b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A4.1.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.1_A4.1; - * @section: 15.1.2.1, 15.2.4.7, 12.6.4; - * @assertion: The length property of eval has the attribute DontEnum; - * @description: Checking use propertyIsEnumerable, for-in; -*/ - - -//CHECK#1 -if (eval.propertyIsEnumerable('length') !== false) { - $ERROR('#1: eval.propertyIsEnumerable(\'length\') === false. Actual: ' + (eval.propertyIsEnumerable('length'))); -} - -//CHECK#2 -result = true; -for (p in eval){ - if (p === "length") { - result = false; - } -} - -if (result !== true) { - $ERROR('#2: result = true; for (p in eval) { if (p === "length") result = false; }; result === true;'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A4.2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A4.2.js deleted file mode 100644 index f1782f015..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A4.2.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.1_A4.2; - * @section: 15.1.2.1, 15.2.4.5, 11.4.1; - * @assertion: The length property of eval has the attribute DontDelete; - * @description: Checking use hasOwnProperty, delete; -*/ - -//CHECK#1 -if (eval.hasOwnProperty('length') !== true) { - $FAIL('#1: eval.hasOwnProperty(\'length\') === true. Actual: ' + (eval.hasOwnProperty('length'))); -} - -delete eval.length; - -//CHECK#2 -if (eval.hasOwnProperty('length') !== true) { - $ERROR('#2: delete eval.length; eval.hasOwnProperty(\'length\') === true. Actual: ' + (eval.hasOwnProperty('length'))); -} - -//CHECK#3 -if (eval.length === undefined) { - $ERROR('#3: delete eval.length; eval.length !== undefined'); -} - - - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A4.3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A4.3.js deleted file mode 100644 index 44ab0f851..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A4.3.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.1_A4.3; - * @section: 15.1.2.1; - * @assertion: The length property of eval has the attribute ReadOnly; - * @description: Checking if varying the length property fails; -*/ - -//CHECK#1 -x = eval.length; -eval.length = Infinity; -if (eval.length !== x) { - $ERROR('#1: x = eval.length; eval.length = Infinity; eval.length === x. Actual: ' + (eval.length)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A4.4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A4.4.js deleted file mode 100644 index 74c6ac526..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A4.4.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.1_A4.4; - * @section: 15.1.2.1; - * @assertion: The length property of eval is 1; - * @description: eval.length === 1; -*/ - -//CHECK#1 -if (eval.length !== 1) { - $ERROR('#1: eval.length === 1. Actual: ' + (eval.length)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A4.5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A4.5.js deleted file mode 100644 index 1fd43bbbb..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A4.5.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.1_A4.5; - * @section: 15.1.2.1, 15.2.4.7, 12.6.4; - * @assertion: The eval property has the attribute DontEnum; - * @description: Checking use propertyIsEnumerable, for-in; -*/ - - -//CHECK#1 -if (this.propertyIsEnumerable('eval') !== false) { - $ERROR('#1: this.propertyIsEnumerable(\'eval\') === false. Actual: ' + (this.propertyIsEnumerable('eval'))); -} - -//CHECK#2 -result = true; -for (p in this){ - if (p === "eval") { - result = false; - } -} - -if (result !== true) { - $ERROR('#2: result = true; for (p in this) { if (p === "eval") result = false; } result === true;'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A4.6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A4.6.js deleted file mode 100644 index 6ba1e2a5c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A4.6.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.1.2.1_A4.6; -* @section: 15.1.2.1; -* @assertion: The eval property has not prototype property; -* @description: Checking eval.prototype; -*/ - -//CHECK#1 -if (eval.prototype !== undefined) { - $ERROR('#1: eval.prototype === undefined. Actual: ' + (eval.prototype)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A4.7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A4.7.js deleted file mode 100644 index c82ebd710..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.1_eval/S15.1.2.1_A4.7.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.1.2.1_A4.7; -* @section: 15.1.2.1, 11.2.2; -* @assertion: The eval property can't be used as constructor; -* @description: If property does not implement the internal [[Construct]] method, throw a TypeError exception; -*/ - -//CHECK#1 - -try { - new eval(); - $ERROR('#1.1: new eval() throw TypeError. Actual: ' + (new eval())); -} catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1.2: new eval() throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A1_T1.js deleted file mode 100644 index 6f07f553d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A1_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.2_A1_T1; - * @section: 15.1.2.2, 9.8; - * @assertion: Operator use ToString; - * @description: Checking for boolean primitive; -*/ - -//CHECK#1 -if (!(isNaN(parseInt(true)) && isNaN(parseInt("NaN")))) { - $ERROR('#1: parseInt(true) === Not-a-Number; parseInt("NaN") === Not-a-Number. Actual: ' + (parseInt("NaN"))); -} - -//CHECK#2 -if (String(parseInt(false)) !== "NaN") { - $ERROR('#2: String(parseInt(false)) === "NaN". Actual: ' + (String(parseInt(false)))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A1_T2.js deleted file mode 100644 index 781d3b055..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A1_T2.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.2_A1_T2; - * @section: 15.1.2.2, 9.8; - * @assertion: Operator use ToString; - * @description: Checking for number primitive; -*/ - -//CHECK#1 -if (parseInt(-1) !== parseInt("-1")) { - $ERROR('#1: parseInt(-1) === parseInt("-1"). Actual: ' + (parseInt(-1))); -} - -//CHECK#2 -if (String(parseInt(Infinity)) !== "NaN") { - $ERROR('#2: String(parseInt(Infinity)) === "NaN". Actual: ' + (String(parseInt(Infinity)))); -} - -//CHECK#3 -if (String(parseInt(NaN)) !== "NaN") { - $ERROR('#3: String(parseInt(NaN)) === "NaN". Actual: ' + (String(parseInt(NaN)))); -} - -//CHECK#4 -if (parseInt(-0) !== 0) { - $ERROR('#4: parseInt(-0) === 0. Actual: ' + (parseInt(-0))); -} else { - if (1 / parseInt(-0) !== Number.POSITIVE_INFINITY) { - $ERROR('#4: parseInt(-0) === +0. Actual: ' + (parseInt(-0))); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A1_T3.js deleted file mode 100644 index 25a3334dd..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A1_T3.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.2_A1_T3; - * @section: 15.1.2.2, 9.8; - * @assertion: Operator use ToString; - * @description: Checking for undefined and null; -*/ - -//CHECK#1 -if (!(isNaN(parseInt(undefined)) && isNaN(parseInt("NaN")))) { - $ERROR('#1: parseInt(undefined) === Not-a-Number; parseInt("NaN") === Not-a-Number. Actual: ' + (parseInt("NaN"))); -} - -//CHECK#2 -if (!(isNaN(parseInt(null)) && isNaN(parseInt("NaN")))) { - $ERROR('#2: parseInt(null) === Not-a-Number; parseInt("NaN") === Not-a-Number. Actual: ' + (parseInt("NaN"))); -} - -//CHECK#3 -if (String(parseInt(undefined)) !== "NaN") { - $ERROR('#3: String(parseInt(undefined)) === "NaN". Actual: ' + (String(parseInt(undefined)))); -} - -//CHECK#4 -if (String(parseInt(null)) !== "NaN") { - $ERROR('#4: String(parseInt(null)) === "NaN". Actual: ' + (String(parseInt(null)))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A1_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A1_T4.js deleted file mode 100644 index eb95903f2..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A1_T4.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.2_A1_T4; - * @section: 15.1.2.2, 9.8; - * @assertion: Operator use ToString; - * @description: Checking for Boolean object; -*/ - -//CHECK#1 -if (!(isNaN(parseInt(new Boolean(true))) && isNaN(parseInt("NaN")))) { - $ERROR('#1: parseInt(new Boolean(true)) === Not-a-Number; parseInt("NaN") === Not-a-Number. Actual: ' + (parseInt("NaN"))); -} - -//CHECK#2 -if (String(parseInt(new Boolean(false))) !== "NaN") { - $ERROR('#2: String(parseInt(new Boolean(false))) === "NaN". Actual: ' + (String(parseInt(new Boolean(false))))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A1_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A1_T5.js deleted file mode 100644 index 42d3c4349..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A1_T5.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.2_A1_T5; - * @section: 15.1.2.2, 9.8; - * @assertion: Operator use ToString; - * @description: Checking for Number object; -*/ - -//CHECK#1 -if (parseInt(new Number(-1)) !== parseInt("-1")) { - $ERROR('#1: parseInt(new Number(-1)) === parseInt("-1"). Actual: ' + (parseInt(new Number(-1)))); -} - -//CHECK#2 -if (String(parseInt(new Number(Infinity))) !== "NaN") { - $ERROR('#2: String(parseInt(new Number(Infinity))) === "NaN". Actual: ' + (String(parseInt(new Number(Infinity))))); -} - -//CHECK#3 -if (String(parseInt(new Number(NaN))) !== "NaN") { - $ERROR('#3: String(parseInt(new Number(NaN))) === "NaN". Actual: ' + (String(parseInt(new Number(NaN))))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A1_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A1_T6.js deleted file mode 100644 index 733dd48dd..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A1_T6.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.2_A1_T6; - * @section: 15.1.2.2, 9.8; - * @assertion: Operator use ToString; - * @description: Checking for String object; -*/ - -//CHECK#1 -if (parseInt(new String("-1")) !== parseInt("-1")) { - $ERROR('#1: parseInt(new String("-1")) === parseInt("-1"). Actual: ' + (parseInt(new String("-1")))); -} - -//CHECK#2 -if (String(parseInt(new String("Infinity"))) !== "NaN") { - $ERROR('#2: String(parseInt(new String("Infinity"))) === "NaN". Actual: ' + (String(parseInt(new String("Infinity"))))); -} - -//CHECK#3 -if (String(parseInt(new String("NaN"))) !== "NaN") { - $ERROR('#3: String(parseInt(new String("NaN"))) === "NaN". Actual: ' + (String(parseInt(new String("NaN"))))); -} - -//CHECK#4 -if (String(parseInt(new String("false"))) !== "NaN") { - $ERROR('#4: String(parseInt(new String("false"))) === "NaN". Actual: ' + (String(parseInt(new String("false"))))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A1_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A1_T7.js deleted file mode 100644 index f57b22ee1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A1_T7.js +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.2_A1_T7; - * @section: 15.1.2.2, 9.8, 8.6.2.6; - * @assertion: Operator use ToString; - * @description: If Type(value) is Object, evaluate ToPrimitive(value, String); -*/ - -//CHECK#1 -var object = {valueOf: function() {return 1}}; -if (isNaN(parseInt(object)) !== true) { - $ERROR('#1: var object = {valueOf: function() {return 1}}; parseInt(object) === Not-a-Number. Actual: ' + (parseInt(object))); -} - -//CHECK#2 -var object = {valueOf: function() {return 1}, toString: function() {return 0}}; -if (parseInt(object) !== 0) { - $ERROR('#2: var object = {valueOf: function() {return 1}, toString: function() {return 0}}; parseInt(object) === 0. Actual: ' + (parseInt(object))); -} - -//CHECK#3 -var object = {valueOf: function() {return 1}, toString: function() {return {}}}; -if (parseInt(object) !== 1) { - $ERROR('#3: var object = {valueOf: function() {return 1}, toString: function() {return {}}}; parseInt(object) === 1. Actual: ' + (parseInt(object))); -} - -//CHECK#4 -try { - var object = {valueOf: function() {throw "error"}, toString: function() {return 1}}; - if (parseInt(object) !== 1) { - $ERROR('#4.1: var object = {valueOf: function() {throw "error"}, toString: function() {return 1}}; parseInt(object) === 1. Actual: ' + (parseInt(object))); - } -} -catch (e) { - if (e === "error") { - $ERROR('#4.2: var object = {valueOf: function() {throw "error"}, toString: function() {return 1}}; parseInt(object) not throw "error"'); - } else { - $ERROR('#4.3: var object = {valueOf: function() {throw "error"}, toString: function() {return 1}}; parseInt(object) not throw Error. Actual: ' + (e)); - } -} - -//CHECK#5 -var object = {toString: function() {return 1}}; -if (parseInt(object) !== 1) { - $ERROR('#5: var object = {toString: function() {return 1}}; parseInt(object) === 1. Actual: ' + (parseInt(object))); -} - -//CHECK#6 -var object = {valueOf: function() {return {}}, toString: function() {return 1}} -if (parseInt(object) !== 1) { - $ERROR('#6: var object = {valueOf: function() {return {}}, toString: function() {return 1}}; parseInt(object) === 1. Actual: ' + (parseInt(object))); -} - -//CHECK#7 -try { - var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; - parseInt(object); - $ERROR('#7.1: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; parseInt(object) throw "error". Actual: ' + (parseInt(object))); -} -catch (e) { - if (e !== "error") { - $ERROR('#7.2: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; parseInt(object) throw "error". Actual: ' + (e)); - } -} - -//CHECK#8 -try { - var object = {valueOf: function() {return {}}, toString: function() {return {}}}; - parseInt(object); - $ERROR('#8.1: var object = {valueOf: function() {return {}}, toString: function() {return {}}}; parseInt(object) throw TypeError. Actual: ' + (parseInt(object))); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#8.2: var object = {valueOf: function() {return {}}, toString: function() {return {}}}; parseInt(object) throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A2_T1.js deleted file mode 100644 index 3ca83f46a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A2_T1.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.2_A2_T1; - * @section: 15.1.2.2; - * @assertion: Operator remove leading StrWhiteSpaceChar; - * @description: StrWhiteSpaceChar :: TAB (U+0009); -*/ - -//CHECK#1 -if (parseInt("\u00091") !== parseInt("1")) { - $ERROR('#1: parseInt("\\u00091") === parseInt("1"). Actual: ' + (parseInt("\u00091"))); -} - -//CHECK#2 -if (parseInt("\u0009\u0009-1") !== parseInt("-1")) { - $ERROR('#2: parseInt("\\u0009\\u0009-1") === parseInt("-1"). Actual: ' + (parseInt("\u0009\u0009-1"))); -} - -//CHECK#3 -if (parseInt(" 1") !== parseInt("1")) { - $ERROR('#3: parseInt(" 1") === parseInt("1"). Actual: ' + (parseInt(" 1"))); -} - -//CHECK#4 -if (parseInt(" 1") !== parseInt("1")) { - $ERROR('#4: parseInt(" 1") === parseInt("1"). Actual: ' + (parseInt(" 1"))); -} - -//CHECK#5 -if (parseInt(" \u0009 \u0009-1") !== parseInt("-1")) { - $ERROR('#5: parseInt(" \\u0009 \\u0009-1") === parseInt("-1"). Actual: ' + (parseInt(" \u0009 \u0009-1"))); -} - -//CHECK#6 -if (isNaN(parseInt("\u0009")) !== true) { - $ERROR('#6: parseInt("\\u0009") === Not-a-Number. Actual: ' + (parseInt("\u0009"))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A2_T10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A2_T10.js deleted file mode 100644 index 4007ec3fa..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A2_T10.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.2_A2_T10; - * @section: 15.1.2.2; - * @assertion: Operator remove leading StrWhiteSpaceChar; - * @description: StrWhiteSpaceChar :: USP; -*/ - -//CHECK# -count = 0; -errorCount = 0; -uspU = ["\u1680", "\u180E", "\u2000", "\u2001", "\u2002", "\u2003", "\u2004", "\u2005", "\u2006", "\u2007", "\u2008", "\u2009", "\u200A", "\u202F", "\u205F", "\u3000"] -uspS = ["1680", "180E", "2000", "2001", "2002", "2003", "2004", "2005", "2006", "2007", "2008", "2009", "200A", "202F", "205F", "3000"] -for (index = 0; index < uspU.length; index++) { - var result = true; - if (parseInt(uspU[index] + "1") !== parseInt("1")) { - $ERROR('#1.' + uspS[index] + ' '); - result = false; - } - if (parseInt(uspU[index] + uspU[index] + uspU[index] + "1") !== parseInt("1")) { - $ERROR('#2.' + uspS[index] + ' '); - result = false; - } - if (isNaN(parseInt(uspU[index])) !== true) { - $ERROR('#3.' + uspS[index] + ' '); - result = false; - } - if (result !== true) { - errorCount++; - } - count++; -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A2_T2.js deleted file mode 100644 index eed95977b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A2_T2.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.2_A2_T2; - * @section: 15.1.2.2; - * @assertion: Operator remove leading StrWhiteSpaceChar; - * @description: StrWhiteSpaceChar :: SP (U+0020); -*/ - -//CHECK#1 -if (parseInt("\u00201") !== parseInt("1")) { - $ERROR('#1: parseInt("\\u00201") === parseInt("1"). Actual: ' + (parseInt("\u00201"))); -} - -//CHECK#2 -if (parseInt("\u0020\u0020-1") !== parseInt("-1")) { - $ERROR('#2: parseInt("\\u0020\\u0020-1") === parseInt("-1"). Actual: ' + (parseInt("\u0020\u0020-1"))); -} - -//CHECK#3 -if (parseInt(" 1") !== parseInt("1")) { - $ERROR('#3: parseInt(" 1") === parseInt("1"). Actual: ' + (parseInt(" 1"))); -} - -//CHECK#4 -if (parseInt(" 1") !== parseInt("1")) { - $ERROR('#4: parseInt(" 1") === parseInt("1"). Actual: ' + (parseInt(" 1"))); -} - -//CHECK#5 -if (parseInt(" \u0020 \u0020-1") !== parseInt("-1")) { - $ERROR('#5: parseInt(" \\u0020 \\u0020-1") === parseInt("-1"). Actual: ' + (parseInt(" \u0020 \u0020-1"))); -} - -//CHECK#6 -if (isNaN(parseInt("\u0020")) !== true) { - $ERROR('#6: parseInt("\\u0020") === Not-a-Number. Actual: ' + (parseInt("\u0020"))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A2_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A2_T3.js deleted file mode 100644 index 7d454d0b5..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A2_T3.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.2_A2_T3; - * @section: 15.1.2.2; - * @assertion: Operator remove leading StrWhiteSpaceChar; - * @description: StrWhiteSpaceChar :: NBSB (U+00A0); -*/ - -//CHECK#1 -if (parseInt("\u00A01") !== parseInt("1")) { - $ERROR('#1: parseInt("\\u00A01") === parseInt("1"). Actual: ' + (parseInt("\u00A01"))); -} - -//CHECK#2 -if (parseInt("\u00A0\u00A0-1") !== parseInt("-1")) { - $ERROR('#2: parseInt("\\u00A0\\u00A0-1") === parseInt("-1"). Actual: ' + (parseInt("\u00A0\u00A0-1"))); -} - -//CHECK#3 -if (isNaN(parseInt("\u00A0")) !== true) { - $ERROR('#3: parseInt("\\u00A0") === Not-a-Number. Actual: ' + (parseInt("\u00A0"))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A2_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A2_T4.js deleted file mode 100644 index eee47779d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A2_T4.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.2_A2_T4; - * @section: 15.1.2.2; - * @assertion: Operator remove leading StrWhiteSpaceChar; - * @description: StrWhiteSpaceChar :: FF (U+000C); -*/ - -//CHECK#1 -if (parseInt("\u000C1") !== parseInt("1")) { - $ERROR('#1: parseInt("\\u000C1") === parseInt("1"). Actual: ' + (parseInt("\u000C1"))); -} - -//CHECK#2 -if (parseInt("\u000C\u000C-1") !== parseInt("-1")) { - $ERROR('#2: parseInt("\\u000C\\u000C-1") === parseInt("-1"). Actual: ' + (parseInt("\u000C\u000C-1"))); -} - -//CHECK#3 -if (isNaN(parseInt("\u000C")) !== true) { - $ERROR('#3: parseInt("\\u000C") === Not-a-Number. Actual: ' + (parseInt("\u000C"))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A2_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A2_T5.js deleted file mode 100644 index 0c91ec8d8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A2_T5.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.2_A2_T5; - * @section: 15.1.2.2; - * @assertion: Operator remove leading StrWhiteSpaceChar; - * @description: StrWhiteSpaceChar :: VT (U+000B); -*/ - -//CHECK#1 -if (parseInt("\u000B1") !== parseInt("1")) { - $ERROR('#1: parseInt("\\u000B1") === parseInt("1"). Actual: ' + (parseInt("\u000B1"))); -} - -//CHECK#2 -if (parseInt("\u000B\u000B-1") !== parseInt("-1")) { - $ERROR('#2: parseInt("\\u000B\\u000B-1") === parseInt("-1"). Actual: ' + (parseInt("\u000B\u000B-1"))); -} - -//CHECK#3 -if (isNaN(parseInt("\u000B")) !== true) { - $ERROR('#3: parseInt("\\u000B") === Not-a-Number. Actual: ' + (parseInt("\u000B"))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A2_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A2_T6.js deleted file mode 100644 index c5b51a76d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A2_T6.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.2_A2_T6; - * @section: 15.1.2.2; - * @assertion: Operator remove leading StrWhiteSpaceChar; - * @description: StrWhiteSpaceChar :: CR (U+000D); -*/ - -//CHECK#1 -if (parseInt("\u000D1") !== parseInt("1")) { - $ERROR('#1: parseInt("\\u000D1") === parseInt("1"). Actual: ' + (parseInt("\u000D1"))); -} - -//CHECK#2 -if (parseInt("\u000D\u000D-1") !== parseInt("-1")) { - $ERROR('#2: parseInt("\\u000D\\u000D-1") === parseInt("-1"). Actual: ' + (parseInt("\u000D\u000D-1"))); -} - -//CHECK#3 -if (isNaN(parseInt("\u000D")) !== true) { - $ERROR('#3: parseInt("\\u000D") === Not-a-Number. Actual: ' + (parseInt("\u000D"))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A2_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A2_T7.js deleted file mode 100644 index bdc17a25a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A2_T7.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.2_A2_T7; - * @section: 15.1.2.2; - * @assertion: Operator remove leading StrWhiteSpaceChar; - * @description: StrWhiteSpaceChar :: LF (U+000A); -*/ - -//CHECK#1 -if (parseInt("\u000A1") !== parseInt("1")) { - $ERROR('#1: parseInt("\\u000A1") === parseInt("1"). Actual: ' + (parseInt("\u000A1"))); -} - -//CHECK#2 -if (parseInt("\u000A\u000A-1") !== parseInt("-1")) { - $ERROR('#2: parseInt("\\u000A\\u000A-1") === parseInt("-1"). Actual: ' + (parseInt("\u000A\u000A-1"))); -} - -//CHECK#3 -if (isNaN(parseInt("\u000A")) !== true) { - $ERROR('#3: parseInt("\\u000A") === Not-a-Number. Actual: ' + (parseInt("\u000A"))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A2_T8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A2_T8.js deleted file mode 100644 index 670b39a5f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A2_T8.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.2_A2_T8; - * @section: 15.1.2.2; - * @assertion: Operator remove leading StrWhiteSpaceChar; - * @description: StrWhiteSpaceChar :: LS (U+2028); -*/ - -//CHECK#1 -if (parseInt("\u20281") !== parseInt("1")) { - $ERROR('#1: parseInt("\\u20281") === parseInt("1"). Actual: ' + (parseInt("\u20281"))); -} - -//CHECK#2 -if (parseInt("\u2028\u2028-1") !== parseInt("-1")) { - $ERROR('#2: parseInt("\\u2028\\u2028-1") === parseInt("-1"). Actual: ' + (parseInt("\u2028\u2028-1"))); -} - -//CHECK#3 -if (isNaN(parseInt("\u2028")) !== true) { - $ERROR('#3: parseInt("\\u2028") === Not-a-Number. Actual: ' + (parseInt("\u2028"))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A2_T9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A2_T9.js deleted file mode 100644 index aa5c37077..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A2_T9.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.2_A2_T9; - * @section: 15.1.2.2; - * @assertion: Operator remove leading StrWhiteSpaceChar; - * @description: StrWhiteSpaceChar :: PS (U+2029); -*/ - -//CHECK#1 -if (parseInt("\u20291") !== parseInt("1")) { - $ERROR('#1: parseInt("\\u20291") === parseInt("1"). Actual: ' + (parseInt("\u20291"))); -} - -//CHECK#2 -if (parseInt("\u2029\u2029-1") !== parseInt("-1")) { - $ERROR('#2: parseInt("\\u2029\\u2029-1") === parseInt("-1"). Actual: ' + (parseInt("\u2029\u2029-1"))); -} - -//CHECK#3 -if (isNaN(parseInt("\2029")) !== true) { - $ERROR('#3: parseInt("\\u2029") === Not-a-Number. Actual: ' + (parseInt("\u2029"))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A3.1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A3.1_T1.js deleted file mode 100644 index 58450dd5b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A3.1_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.2_A3.1_T1; - * @section: 15.1.2.2, 9.3; - * @assertion: Operator use ToNumber; - * @description: Checking for boolean primitive; -*/ - -//CHECK#1 -if (parseInt("11", false) !== parseInt("11", 10)) { - $ERROR('#1: parseInt("11", false) === parseInt("11", 10). Actual: ' + (parseInt("11", false))); -} - -//CHECK#2 -if (isNaN(parseInt("11", true)) !== true) { - $ERROR('#2: parseInt("11", true) === Not-a-Number. Actual: ' + (parseInt("11", true))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A3.1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A3.1_T2.js deleted file mode 100644 index 4364a12ca..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A3.1_T2.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.2_A3.1_T2; - * @section: 15.1.2.2, 9.3; - * @assertion: Operator use ToNumber; - * @description: Checking for string primitive; -*/ - -//CHECK#1 -if (parseInt("11", "2") !== parseInt("11", 2)) { - $ERROR('#1: parseInt("11", "2") === parseInt("11", 2). Actual: ' + (parseInt("11", "2"))); -} - -//CHECK#2 -if (parseInt("11", "0") !== parseInt("11", 10)) { - $ERROR('#2: parseInt("11", "0") === parseInt("11", 10). Actual: ' + (parseInt("11", "0"))); -} - -//CHECK#3 -if (parseInt("11", "") !== parseInt("11", 10)) { - $ERROR('#3: parseInt("11", "") === parseInt("11", 10). Actual: ' + (parseInt("11", ""))); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A3.1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A3.1_T3.js deleted file mode 100644 index 7c6e15af2..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A3.1_T3.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.2_A3.1_T3; - * @section: 15.1.2.2, 9.3; - * @assertion: Operator use ToNumber; - * @description: Checking for undefined and null; -*/ - -//CHECK#1 -if (parseInt("11", undefined) !== parseInt("11", 10)) { - $ERROR('#1: parseInt("11", undefined) === parseInt("11", 10). Actual: ' + (parseInt("11", undefined))); -} - -//CHECK#2 -if (parseInt("11", null) !== parseInt("11", 10)) { - $ERROR('#2: parseInt("11", null) === parseInt("11", 10). Actual: ' + (parseInt("11", null))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A3.1_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A3.1_T4.js deleted file mode 100644 index be3801661..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A3.1_T4.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.2_A3.1_T4; - * @section: 15.1.2.2, 9.3; - * @assertion: Operator use ToNumber; - * @description: Checking for Boolean object; -*/ - -//CHECK#1 -if (parseInt("11", new Boolean(false)) !== parseInt("11", false)) { - $ERROR('#1: parseInt("11", new Boolean(false)) === parseInt("11", false). Actual: ' + (parseInt("11", new Boolean(false)))); -} - -//CHECK#2 -if (isNaN(parseInt("11", new Boolean(true))) !== true) { - $ERROR('#2: parseInt("11", new Boolean(true)) === Not-a-Number. Actual: ' + (parseInt("11", new Boolean(true)))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A3.1_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A3.1_T5.js deleted file mode 100644 index 818eecc1a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A3.1_T5.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.2_A3.1_T5; - * @section: 15.1.2.2, 9.3; - * @assertion: Operator use ToNumber; - * @description: Checking for Number object; -*/ - -//CHECK#1 -if (parseInt("11", new Number(2)) !== parseInt("11", 2)) { - $ERROR('#1: parseInt("11", new Number(2)) === parseInt("11", 2). Actual: ' + (parseInt("11", new Number(2)))); -} - -//CHECK#2 -if (parseInt("11", new Number(Infinity)) !== parseInt("11", Infinity)) { - $ERROR('#2: parseInt("11", new Number(Infinity)) === parseInt("11", Infinity). Actual: ' + (parseInt("11", new Number(Infinity)))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A3.1_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A3.1_T6.js deleted file mode 100644 index 4886116f8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A3.1_T6.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.2_A3.1_T6; - * @section: 15.1.2.2, 9.3; - * @assertion: Operator use ToNumber; - * @description: Checking for String object; -*/ - -//CHECK#1 -if (parseInt("11", new String("2")) !== parseInt("11", 2)) { - $ERROR('#1: parseInt("11", new String("2")) === parseInt("11", 2). Actual: ' + (parseInt("11", new String("2")))); -} - -//CHECK#2 -if (parseInt("11", new String("Infinity")) !== parseInt("11", Infinity)) { - $ERROR('#2: parseInt("11", new String("Infinity")) === parseInt("11", Infinity). Actual: ' + (parseInt("11", new String("Infinity")))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A3.1_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A3.1_T7.js deleted file mode 100644 index 1fe067f49..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A3.1_T7.js +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.2_A3.1_T7; - * @section: 15.1.2.2, 9.3, 8.6.2.6; - * @assertion: Operator use ToNumber; - * @description: If Type(value) is Object, evaluate ToPrimitive(value, Number); -*/ - -//CHECK#1 -var object = {valueOf: function() {return 2}}; -if (parseInt("11", object) !== parseInt("11", 2)) { - $ERROR('#1: var object = {valueOf: function() {return 2}}; parseInt("11", object) === parseInt("11", 2). Actual: ' + (parseInt("11", object))); -} - -//CHECK#2 -var object = {valueOf: function() {return 2}, toString: function() {return 1}}; -if (parseInt("11", object) !== parseInt("11", 2)) { - $ERROR('#2: var object = {valueOf: function() {return 2}, toString: function() {return 1}}; parseInt("11", object) === parseInt("11", 2). Actual: ' + (parseInt("11", object))); -} - -//CHECK#3 -var object = {valueOf: function() {return 2}, toString: function() {return {}}}; -if (parseInt("11", object) !== parseInt("11", 2)) { - $ERROR('#3: var object = {valueOf: function() {return 2}, toString: function() {return {}}}; parseInt("11", object) === parseInt("11", 2). Actual: ' + (parseInt("11", object))); -} - -//CHECK#4 -try { - var object = {valueOf: function() {return 2}, toString: function() {throw "error"}}; - if (parseInt("11", object) !== parseInt("11", 2)) { - $ERROR('#4.1: var object = {valueOf: function() {return 2}, toString: function() {throw "error"}}; parseInt("11", object) === parseInt("11", 2). Actual: ' + (parseInt("11", object))); - } -} -catch (e) { - if (e === "error") { - $ERROR('#4.2: var object = {valueOf: function() {return 2}, toString: function() {throw "error"}}; parseInt("11", object) not throw "error"'); - } else { - $ERROR('#4.3: var object = {valueOf: function() {return 2}, toString: function() {throw "error"}}; parseInt("11", object) not throw Error. Actual: ' + (e)); - } -} - -//CHECK#5 -var object = {toString: function() {return 2}}; -if (parseInt("11", object) !== parseInt("11", 2)) { - $ERROR('#5: var object = {toString: function() {return 2}}; parseInt("11", object) === parseInt("11", 2). Actual: ' + (parseInt("11", object))); -} - -//CHECK#6 -var object = {valueOf: function() {return {}}, toString: function() {return 2}} -if (parseInt("11", object) !== parseInt("11", 2)) { - $ERROR('#6: var object = {valueOf: function() {return {}}, toString: function() {return 2}}; parseInt("11", object) === parseInt("11", 2). Actual: ' + (parseInt("11", object))); -} - -//CHECK#7 -try { - var object = {valueOf: function() {throw "error"}, toString: function() {return 2}}; - parseInt("11", object); - $ERROR('#7.1: var object = {valueOf: function() {throw "error"}, toString: function() {return 2}}; parseInt("11", object) throw "error". Actual: ' + (parseInt("11", object))); -} -catch (e) { - if (e !== "error") { - $ERROR('#7.2: var object = {valueOf: function() {throw "error"}, toString: function() {return 2}}; parseInt("11", object) throw "error". Actual: ' + (e)); - } -} - -//CHECK#8 -try { - var object = {valueOf: function() {return {}}, toString: function() {return {}}}; - parseInt("11", object); - $ERROR('#8.1: var object = {valueOf: function() {return {}}, toString: function() {return {}}}; parseInt("11", object) throw TypeError. Actual: ' + (parseInt("11", object))); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#8.2: var object = {valueOf: function() {return {}}, toString: function() {return {}}}; parseInt("11", object) throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A3.2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A3.2_T1.js deleted file mode 100644 index 34fab3c5a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A3.2_T1.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.2_A3.2_T1; - * @section: 15.1.2.2; - * @assertion: Operator use ToInt32; - * @description: If radix is NaN, +0, -0, +Infinity, -Infinity, return radix = +0; -*/ - -//CHECK#1 -if (parseInt("11", NaN) !== parseInt("11", 10)) { - $ERROR('#1: parseInt("11", NaN) === parseInt("11", 10). Actual: ' + (parseInt("11", NaN))); -} - -//CHECK#2 -if (parseInt("11", +0) !== parseInt("11", 10)) { - $ERROR('#2: parseInt("11", +0) === parseInt("11", 10). Actual: ' + (parseInt("11", +0))); -} - -//CHECK#3 -if (parseInt("11", -0) !== parseInt("11", 10)) { - $ERROR('#3: parseInt("11", -0) === parseInt("11", 10). Actual: ' + (parseInt("11", -0))); -} - -//CHECK#4 -if (parseInt("11", Number.POSITIVE_INFINITY) !== parseInt("11", 10)) { - $ERROR('#4: parseInt("11", Number.POSITIVE_INFINITY) === parseInt("11", 10). Actual: ' + (parseInt("11", Number.POSITIVE_INFINITY))); -} - -//CHECK#5 -if (parseInt("11", Number.NEGATIVE_INFINITY) !== parseInt("11", 10)) { - $ERROR('#5: parseInt("11", Number.NEGATIVE_INFINITY) === parseInt("11", 10). Actual: ' + (parseInt("11", Number.NEGATIVE_INFINITY))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A3.2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A3.2_T2.js deleted file mode 100644 index c3e33816d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A3.2_T2.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.2_A3.2_T2; - * @section: 15.1.2.2; - * @assertion: Operator use ToInt32; - * @description: ToInt32 use floor; -*/ - -//CHECK#1 -if (parseInt("11", 2.1) !== parseInt("11", 2)) { - $ERROR('#1: parseInt("11", 2.1) === parseInt("11", 2). Actual: ' + (parseInt("11", 2.1))); -} - -//CHECK#2 -if (parseInt("11", 2.5) !== parseInt("11", 2)) { - $ERROR('#2: parseInt("11", 2.5) === parseInt("11", 2). Actual: ' + (parseInt("11", 2.5))); -} - -//CHECK#3 -if (parseInt("11", 2.9) !== parseInt("11", 2)) { - $ERROR('#3: parseInt("11", 2.9) === parseInt("11", 2). Actual: ' + (parseInt("11", 2.9))); -} - -//CHECK#4 -if (parseInt("11", 2.000000000001) !== parseInt("11", 2)) { - $ERROR('#4: parseInt("11", 2.000000000001) === parseInt("11", 2). Actual: ' + (parseInt("11", 2.000000000001))); -} - -//CHECK#5 -if (parseInt("11", 2.999999999999) !== parseInt("11", 2)) { - $ERROR('#5: parseInt("11", 2.999999999999) === parseInt("11", 2). Actual: ' + (parseInt("11", 2.999999999999))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A3.2_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A3.2_T3.js deleted file mode 100644 index 59ddad564..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A3.2_T3.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.2_A3.2_T3; - * @section: 15.1.2.2; - * @assertion: Operator use ToInt32; - * @description: ToInt32 use modulo; -*/ - -//CHECK#1 -if (parseInt("11", 4294967298) !== parseInt("11", 2)) { - $ERROR('#1: parseInt("11", 4294967298) === parseInt("11", 2). Actual: ' + (parseInt("11", 4294967298))); -} - -//CHECK#2 -if (parseInt("11", 4294967296) !== parseInt("11", 10)) { - $ERROR('#2: parseInt("11", 4294967296) === parseInt("11", 10). Actual: ' + (parseInt("11", 4294967296))); -} - -//CHECK#3 -if (isNaN(parseInt("11", -2147483650)) !== true) { - $ERROR('#3: parseInt("11", 2147483650) === Not-a-Number. Actual: ' + (parseInt("11", 2147483650))); -} - -//CHECK#4 -if (parseInt("11", -4294967294) !== parseInt("11", 2)) { - $ERROR('#4: parseInt("11", -4294967294) === parseInt("11", 2). Actual: ' + (parseInt("11", -4294967294))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A4.1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A4.1_T1.js deleted file mode 100644 index cc43895d3..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A4.1_T1.js +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.2_A4.1_T1; - * @section: 15.1.2.2; - * @assertion: If R = 0 or R = undefined, then R = 10; - * @description: R = 0; -*/ - -//CHECK#0 -if (parseInt("0", 0) !== parseInt("0", 10)) { - $ERROR('#0: parseInt("0", 0) === parseInt("0", 10). Actual: ' + (parseInt("0", 0))); -} - -//CHECK#1 -if (parseInt("1", 0) !== parseInt("1", 10)) { - $ERROR('#1: parseInt("1", 0) === parseInt("01", 10). Actual: ' + (parseInt("1", 0))); -} - -//CHECK#2 -if (parseInt("2", 0) !== parseInt("2", 10)) { - $ERROR('#2: parseInt("2", 0) === parseInt("2", 10). Actual: ' + (parseInt("2", 0))); -} - -//CHECK#3 -if (parseInt("3", 0) !== parseInt("3", 10)) { - $ERROR('#3: parseInt("3", 0) === parseInt("3", 10). Actual: ' + (parseInt("3", 0))); -} - -//CHECK#4 -if (parseInt("4", 0) !== parseInt("4", 10)) { - $ERROR('#4: parseInt("4", 0) === parseInt(4", 10). Actual: ' + (parseInt("4", 0))); -} - -//CHECK#5 -if (parseInt("5", 0) !== parseInt("5", 10)) { - $ERROR('#5: parseInt("5", 0) === parseInt("5", 10). Actual: ' + (parseInt("5", 0))); -} - -//CHECK#6 -if (parseInt("6", 0) !== parseInt("6", 10)) { - $ERROR('#6: parseInt("6", 0) === parseInt("6", 10). Actual: ' + (parseInt("6", 0))); -} - -//CHECK#7 -if (parseInt("7", 0) !== parseInt("7", 10)) { - $ERROR('#7: parseInt("7", 0) === parseInt("7", 10). Actual: ' + (parseInt("7", 0))); -} - -//CHECK#8 -if (parseInt("8", 0) !== parseInt("8", 10)) { - $ERROR('#8: parseInt("8", 0) === parseInt("8", 10). Actual: ' + (parseInt("8", 0))); -} - -//CHECK#9 -if (parseInt("9", 0) !== parseInt("9", 10)) { - $ERROR('#9: parseInt("9", 0) === parseInt("9", 10). Actual: ' + (parseInt("9", 0))); -} - -//CHECK#10 -if (parseInt("10", 0) !== parseInt("10", 10)) { - $ERROR('#10: parseInt("10", 0) === parseInt("10", 10). Actual: ' + (parseInt("10", 0))); -} - -//CHECK#11 -if (parseInt("11", 0) !== parseInt("11", 10)) { - $ERROR('#11: parseInt("11", 0) === parseInt("11", 10). Actual: ' + (parseInt("11", 0))); -} - -//CHECK#12 -if (parseInt("9999", 0) !== parseInt("9999", 10)) { - $ERROR('#12: parseInt("9999", 0) === parseInt("9999", 10). Actual: ' + (parseInt("9999", 0))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A4.1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A4.1_T2.js deleted file mode 100644 index 230989c7d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A4.1_T2.js +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.2_A4.1_T2; - * @section: 15.1.2.2; - * @assertion: If R = 0 or R = undefined, then R = 10; - * @description: R = undefined; -*/ - -//CHECK#0 -if (parseInt("0") !== parseInt("0", 10)) { - $ERROR('#0: parseInt("0") === parseInt("0", 10). Actual: ' + (parseInt("0"))); -} - -//CHECK#1 -if (parseInt("1") !== parseInt("1", 10)) { - $ERROR('#1: parseInt("1") === parseInt("01", 10). Actual: ' + (parseInt("1"))); -} - -//CHECK#2 -if (parseInt("2") !== parseInt("2", 10)) { - $ERROR('#2: parseInt("2") === parseInt("2", 10). Actual: ' + (parseInt("2"))); -} - -//CHECK#3 -if (parseInt("3") !== parseInt("3", 10)) { - $ERROR('#3: parseInt("3") === parseInt("3", 10). Actual: ' + (parseInt("3"))); -} - -//CHECK#4 -if (parseInt("4") !== parseInt("4", 10)) { - $ERROR('#4: parseInt("4") === parseInt(4", 10). Actual: ' + (parseInt("4"))); -} - -//CHECK#5 -if (parseInt("5") !== parseInt("5", 10)) { - $ERROR('#5: parseInt("5") === parseInt("5", 10). Actual: ' + (parseInt("5"))); -} - -//CHECK#6 -if (parseInt("6") !== parseInt("6", 10)) { - $ERROR('#6: parseInt("6") === parseInt("6", 10). Actual: ' + (parseInt("6"))); -} - -//CHECK#7 -if (parseInt("7") !== parseInt("7", 10)) { - $ERROR('#7: parseInt("7") === parseInt("7", 10). Actual: ' + (parseInt("7"))); -} - -//CHECK#8 -if (parseInt("8") !== parseInt("8", 10)) { - $ERROR('#8: parseInt("8") === parseInt("8", 10). Actual: ' + (parseInt("8"))); -} - -//CHECK#9 -if (parseInt("9") !== parseInt("9", 10)) { - $ERROR('#9: parseInt("9") === parseInt("9", 10). Actual: ' + (parseInt("9"))); -} - -//CHECK#10 -if (parseInt("10") !== parseInt("10", 10)) { - $ERROR('#10: parseInt("10") === parseInt("10", 10). Actual: ' + (parseInt("10"))); -} - -//CHECK#11 -if (parseInt("11") !== parseInt("11", 10)) { - $ERROR('#11: parseInt("11") === parseInt("11", 10). Actual: ' + (parseInt("11"))); -} - -//CHECK#12 -if (parseInt("9999") !== parseInt("9999", 10)) { - $ERROR('#12: parseInt("9999") === parseInt("9999", 10). Actual: ' + (parseInt("9999"))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A4.2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A4.2_T1.js deleted file mode 100644 index 9e0c8fb23..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A4.2_T1.js +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.2_A4.2_T1; - * @section: 15.1.2.2; - * @assertion: If R < 2 or R > 36, then return NaN; - * @description: R = 1; -*/ - -//CHECK#0 -if (isNaN(parseInt("0", 1)) !== true) { - $ERROR('#0: parseInt("0", 1) === Not-a-Number. Actual: ' + (parseInt("0", 1))); -} - -//CHECK#1 -if (isNaN(parseInt("1", 1)) !== true) { - $ERROR('#1: parseInt("1", 1) === Not-a-Number. Actual: ' + (parseInt("1", 1))); -} - -//CHECK#2 -if (isNaN(parseInt("2", 1)) !== true) { - $ERROR('#2: parseInt("2", 1) === Not-a-Number. Actual: ' + (parseInt("2", 1))); -} - -//CHECK#3 -if (isNaN(parseInt("3", 1)) !== true) { - $ERROR('#3: parseInt("3", 1) === Not-a-Number. Actual: ' + (parseInt("3", 1))); -} - -//CHECK#4 -if (isNaN(parseInt("4", 1)) !== true) { - $ERROR('#4: parseInt("4", 1) === Not-a-Number. Actual: ' + (parseInt("4", 1))); -} - -//CHECK#5 -if (isNaN(parseInt("5", 1)) !== true) { - $ERROR('#5: parseInt("5", 1) === Not-a-Number. Actual: ' + (parseInt("5", 1))); -} - -//CHECK#6 -if (isNaN(parseInt("6", 1)) !== true) { - $ERROR('#6: parseInt("6", 1) === Not-a-Number. Actual: ' + (parseInt("6", 1))); -} - -//CHECK#7 -if (isNaN(parseInt("7", 1)) !== true) { - $ERROR('#7: parseInt("7", 1) === Not-a-Number. Actual: ' + (parseInt("7", 1))); -} - -//CHECK#8 -if (isNaN(parseInt("8", 1)) !== true) { - $ERROR('#8: parseInt("8", 1) === Not-a-Number. Actual: ' + (parseInt("8", 1))); -} - -//CHECK#9 -if (isNaN(parseInt("9", 1)) !== true) { - $ERROR('#9: parseInt("9", 1) === Not-a-Number. Actual: ' + (parseInt("9", 1))); -} - -//CHECK#10 -if (isNaN(parseInt("10", 1)) !== true) { - $ERROR('#10: parseInt("10", 1) === Not-a-Number. Actual: ' + (parseInt("10", 1))); -} - -//CHECK#11 -if (isNaN(parseInt("11", 1)) !== true) { - $ERROR('#11: parseInt("11", 1) === Not-a-Number. Actual: ' + (parseInt("11", 1))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A4.2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A4.2_T2.js deleted file mode 100644 index 571c58cfa..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A4.2_T2.js +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.2_A4.2_T2; - * @section: 15.1.2.2; - * @assertion: If R < 2 or R > 36, then return NaN; - * @description: R = 37; -*/ - -//CHECK#0 -if (isNaN(parseInt("0", 37)) !== true) { - $ERROR('#0: parseInt("0", 37) === Not-a-Number. Actual: ' + (parseInt("0", 37))); -} - -//CHECK#1 -if (isNaN(parseInt("1", 37)) !== true) { - $ERROR('#1: parseInt("1", 37) === Not-a-Number. Actual: ' + (parseInt("1", 37))); -} - -//CHECK#2 -if (isNaN(parseInt("2", 37)) !== true) { - $ERROR('#2: parseInt("2", 37) === Not-a-Number. Actual: ' + (parseInt("2", 37))); -} - -//CHECK#3 -if (isNaN(parseInt("3", 37)) !== true) { - $ERROR('#3: parseInt("3", 37) === Not-a-Number. Actual: ' + (parseInt("3", 37))); -} - -//CHECK#4 -if (isNaN(parseInt("4", 37)) !== true) { - $ERROR('#4: parseInt("4", 37) === Not-a-Number. Actual: ' + (parseInt("4", 37))); -} - -//CHECK#5 -if (isNaN(parseInt("5", 37)) !== true) { - $ERROR('#5: parseInt("5", 37) === Not-a-Number. Actual: ' + (parseInt("5", 37))); -} - -//CHECK#6 -if (isNaN(parseInt("6", 37)) !== true) { - $ERROR('#6: parseInt("6", 37) === Not-a-Number. Actual: ' + (parseInt("6", 37))); -} - -//CHECK#7 -if (isNaN(parseInt("7", 37)) !== true) { - $ERROR('#7: parseInt("7", 37) === Not-a-Number. Actual: ' + (parseInt("7", 37))); -} - -//CHECK#8 -if (isNaN(parseInt("8", 37)) !== true) { - $ERROR('#8: parseInt("8", 37) === Not-a-Number. Actual: ' + (parseInt("8", 37))); -} - -//CHECK#9 -if (isNaN(parseInt("9", 37)) !== true) { - $ERROR('#9: parseInt("9", 37) === Not-a-Number. Actual: ' + (parseInt("9", 37))); -} - -//CHECK#10 -if (isNaN(parseInt("10", 37)) !== true) { - $ERROR('#10: parseInt("10", 37) === Not-a-Number. Actual: ' + (parseInt("10", 37))); -} - -//CHECK#11 -if (isNaN(parseInt("11", 37)) !== true) { - $ERROR('#11: parseInt("11", 37) === Not-a-Number. Actual: ' + (parseInt("11", 37))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A4.2_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A4.2_T3.js deleted file mode 100644 index 91e75f738..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A4.2_T3.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.2_A4.2_T3; - * @section: 15.1.2.2; - * @assertion: If R < 2 or R > 36, then return NaN; - * @description: Complex test; -*/ - -//CHECK# -pow = 2; -for (i = 1; i < 32; i++) { - if (pow > 36) { - var res = true; - if (isNaN(parseInt(1, pow)) !== true) { - $ERROR('#1.' + i + ': If R < 2 or R > 36, then return NaN'); - } - if (isNaN(parseInt(1, -pow)) !== true) { - $ERROR('#2.' + i + ': If R < 2 or R > 36, then return NaN'); - } - } - pow = pow * 2; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A5.1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A5.1_T1.js deleted file mode 100644 index a1491fffc..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A5.1_T1.js +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.2_A5.1_T1; - * @section: 15.1.2.2; - * @assertion: If the length of S is at least 1 and the first character of S is 0, - * then at the implementation's discretion either let R = 8 or R = 10; - * @description: Either R = 8, or R = 10; -*/ - -//CHECK# -res8 = 1; -res10 = 1; -if (parseInt("08") !== parseInt("08", 8)) { - res8 = 0; -} -if (parseInt("08") !== parseInt("08", 10)) { - res10 = 0; -} -if (parseInt("09") !== parseInt("09", 8)) { - res8 = 0; -} -if (parseInt("09") !== parseInt("09", 10)) { - res10 = 0; -} -if (parseInt("010") !== parseInt("010", 8)) { - res8 = 0; -} -if (parseInt("010") !== parseInt("010", 10)) { - res10 = 0; -} -if (res8 + res10 !== 1) { - $ERROR('#1: If the length of S is at least 1 and the first character of S is 0, then at the implementation\'s discretion either let R = 8 or R = 10'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A5.2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A5.2_T1.js deleted file mode 100644 index d26b2ae82..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A5.2_T1.js +++ /dev/null @@ -1,100 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.2_A5.2_T1; - * @section: 15.1.2.2; - * @assertion: If the length of S is at least 2 and the first two characters of S - * are either 0x or 0X, then remove the first two characters from S and let R = 16; - * @description: : 0x; -*/ - -//CHECK#0 -if (parseInt("0x0", 0) !== parseInt("0", 16)) { - $ERROR('#0: parseInt("0x0", 0) === parseInt("0", 16). Actual: ' + (parseInt("0x0", 0))); -} - -//CHECK#1 -if (parseInt("0x1", 0) !== parseInt("1", 16)) { - $ERROR('#1: parseInt("0x1", 0) === parseInt("1", 16). Actual: ' + (parseInt("0x1", 0))); -} - -//CHECK#2 -if (parseInt("0x2", 0) !== parseInt("2", 16)) { - $ERROR('#2: parseInt("0x2", 0) === parseInt("2", 16). Actual: ' + (parseInt("0x2", 0))); -} - -//CHECK#3 -if (parseInt("0x3", 0) !== parseInt("3", 16)) { - $ERROR('#3: parseInt("0x3", 0) === parseInt("3", 16). Actual: ' + (parseInt("0x3", 0))); -} - -//CHECK#4 -if (parseInt("0x4", 0) !== parseInt("4", 16)) { - $ERROR('#4: parseInt("0x4", 0) === parseInt("4", 16). Actual: ' + (parseInt("0x4", 0))); -} - -//CHECK#5 -if (parseInt("0x5", 0) !== parseInt("5", 16)) { - $ERROR('#5: parseInt("0x5", 0) === parseInt("5", 16). Actual: ' + (parseInt("0x5", 0))); -} - -//CHECK#6 -if (parseInt("0x6", 0) !== parseInt("6", 16)) { - $ERROR('#6: parseInt("0x6", 0) === parseInt("6", 16). Actual: ' + (parseInt("0x6", 0))); -} - -//CHECK#7 -if (parseInt("0x7", 0) !== parseInt("7", 16)) { - $ERROR('#7: parseInt("0x7", 0) === parseInt("7", 16). Actual: ' + (parseInt("0x7", 0))); -} - -//CHECK#8 -if (parseInt("0x8", 0) !== parseInt("8", 16)) { - $ERROR('#8: parseInt("0x8", 0) === parseInt("8", 16). Actual: ' + (parseInt("0x8", 0))); -} - -//CHECK#9 -if (parseInt("0x9", 0) !== parseInt("9", 16)) { - $ERROR('#9: parseInt("0x9", 0) === parseInt("9", 16). Actual: ' + (parseInt("0x9", 0))); -} - -//CHECK#A -if (parseInt("0xA", 0) !== parseInt("A", 16)) { - $ERROR('#A: parseInt("0xA", 0) === parseInt("A", 16). Actual: ' + (parseInt("0xA", 0))); -} - -//CHECK#B -if (parseInt("0xB", 0) !== parseInt("B", 16)) { - $ERROR('#B: parseInt("0xB", 0) === parseInt("B", 16). Actual: ' + (parseInt("0xB", 0))); -} - -//CHECK#C -if (parseInt("0xC", 0) !== parseInt("C", 16)) { - $ERROR('#C: parseInt("0xC", 0) === parseInt("C", 16). Actual: ' + (parseInt("0xC", 0))); -} - -//CHECK#D -if (parseInt("0xD", 0) !== parseInt("D", 16)) { - $ERROR('#D: parseInt("0xD", 0) === parseInt("D", 16). Actual: ' + (parseInt("0xD", 0))); -} - -//CHECK#E -if (parseInt("0xE", 0) !== parseInt("E", 16)) { - $ERROR('#E: parseInt("0xE", 0) === parseInt("E", 16). Actual: ' + (parseInt("0xE", 0))); -} - -//CHECK#F -if (parseInt("0xF", 0) !== parseInt("F", 16)) { - $ERROR('#F: parseInt("0xF", 0) === parseInt("F", 16). Actual: ' + (parseInt("0xF", 0))); -} - -//CHECK#E -if (parseInt("0xE", 0) !== parseInt("E", 16)) { - $ERROR('#E: parseInt("0xE", 0) === parseInt("E", 16). Actual: ' + (parseInt("0xE", 0))); -} - -//CHECK#ABCDEF -if (parseInt("0xABCDEF", 0) !== parseInt("ABCDEF", 16)) { - $ERROR('#ABCDEF: parseInt("0xABCDEF", 0) === parseInt("ABCDEF", 16). Actual: ' + (parseInt("0xABCDEF", 0))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A5.2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A5.2_T2.js deleted file mode 100644 index bcf86389d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A5.2_T2.js +++ /dev/null @@ -1,100 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.2_A5.2_T2; - * @section: 15.1.2.2; - * @assertion: If the length of S is at least 2 and the first two characters of S - * are either 0x or 0X, then remove the first two characters from S and let R = 16; - * @description: : 0X; -*/ - -//CHECK#0 -if (parseInt("0X0", 0) !== parseInt("0", 16)) { - $ERROR('#0: parseInt("0X0", 0) === parseInt("0", 16). Actual: ' + (parseInt("0X0", 0))); -} - -//CHECK#1 -if (parseInt("0X1") !== parseInt("1", 16)) { - $ERROR('#1: parseInt("0X1") === parseInt("1", 16). Actual: ' + (parseInt("0X1"))); -} - -//CHECK#2 -if (parseInt("0X2") !== parseInt("2", 16)) { - $ERROR('#2: parseInt("0X2") === parseInt("2", 16). Actual: ' + (parseInt("0X2"))); -} - -//CHECK#3 -if (parseInt("0X3") !== parseInt("3", 16)) { - $ERROR('#3: parseInt("0X3") === parseInt("3", 16). Actual: ' + (parseInt("0X3"))); -} - -//CHECK#4 -if (parseInt("0X4") !== parseInt("4", 16)) { - $ERROR('#4: parseInt("0X4") === parseInt("4", 16). Actual: ' + (parseInt("0X4"))); -} - -//CHECK#5 -if (parseInt("0X5") !== parseInt("5", 16)) { - $ERROR('#5: parseInt("0X5") === parseInt("5", 16). Actual: ' + (parseInt("0X5"))); -} - -//CHECK#6 -if (parseInt("0X6") !== parseInt("6", 16)) { - $ERROR('#6: parseInt("0X6") === parseInt("6", 16). Actual: ' + (parseInt("0X6"))); -} - -//CHECK#7 -if (parseInt("0X7") !== parseInt("7", 16)) { - $ERROR('#7: parseInt("0X7") === parseInt("7", 16). Actual: ' + (parseInt("0X7"))); -} - -//CHECK#8 -if (parseInt("0X8") !== parseInt("8", 16)) { - $ERROR('#8: parseInt("0X8") === parseInt("8", 16). Actual: ' + (parseInt("0X8"))); -} - -//CHECK#9 -if (parseInt("0X9") !== parseInt("9", 16)) { - $ERROR('#9: parseInt("0X9") === parseInt("9", 16). Actual: ' + (parseInt("0X9"))); -} - -//CHECK#A -if (parseInt("0XA") !== parseInt("A", 16)) { - $ERROR('#A: parseInt("0XA") === parseInt("A", 16). Actual: ' + (parseInt("0XA"))); -} - -//CHECK#B -if (parseInt("0XB") !== parseInt("B", 16)) { - $ERROR('#B: parseInt("0XB") === parseInt("B", 16). Actual: ' + (parseInt("0XB"))); -} - -//CHECK#C -if (parseInt("0XC") !== parseInt("C", 16)) { - $ERROR('#C: parseInt("0XC") === parseInt("C", 16). Actual: ' + (parseInt("0XC"))); -} - -//CHECK#D -if (parseInt("0XD") !== parseInt("D", 16)) { - $ERROR('#D: parseInt("0XD") === parseInt("D", 16). Actual: ' + (parseInt("0XD"))); -} - -//CHECK#E -if (parseInt("0XE") !== parseInt("E", 16)) { - $ERROR('#E: parseInt("0XE") === parseInt("E", 16). Actual: ' + (parseInt("0XE"))); -} - -//CHECK#F -if (parseInt("0XF") !== parseInt("F", 16)) { - $ERROR('#F: parseInt("0XF") === parseInt("F", 16). Actual: ' + (parseInt("0XF"))); -} - -//CHECK#E -if (parseInt("0XE") !== parseInt("E", 16)) { - $ERROR('#E: parseInt("0XE") === parseInt("E", 16). Actual: ' + (parseInt("0XE"))); -} - -//CHECK#ABCDEF -if (parseInt("0XABCDEF") !== parseInt("ABCDEF", 16)) { - $ERROR('#ABCDEF: parseInt("0XABCDEF") === parseInt("ABCDEF", 16). Actual: ' + (parseInt("0XABCDEF"))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A6.1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A6.1_T1.js deleted file mode 100644 index 2695e7657..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A6.1_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.2_A6.1_T1; - * @section: 15.1.2.2; - * @assertion: If S contains any character that is not a radix-R digit, - * then let Z be the substring of S consisting of all characters before - * the first such character; otherwise, let Z be S; - * @description: Complex test. R in [2, 36]; -*/ - -//CHECK# -for (i = 2; i <= 36; i++) { - if (parseInt("10$1", i) !== i) { - $ERROR('#' + i +': i = ' + i + 'parseInt("10$1", i) === i. Actual: ' + (parseInt("10$1", i))); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A6.1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A6.1_T2.js deleted file mode 100644 index 50acb5de5..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A6.1_T2.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.2_A6.1_T2; - * @section: 15.1.2.2; - * @assertion: If S contains any character that is not a radix-R digit, - * then let Z be the substring of S consisting of all characters before - * the first such character; otherwise, let Z be S; - * @description: Complex test. Radix-R notation in [0..9, A-Z]; -*/ - -//CHECK# -R_digit = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]; -for (i = 2; i <= 36; i++) { - if (parseInt(R_digit[i - 2] + "$", i) !== i - 1) { - $ERROR('#' + i + ': '); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A6.1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A6.1_T3.js deleted file mode 100644 index 7c452071e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A6.1_T3.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.2_A6.1_T3; - * @section: 15.1.2.2; - * @assertion: If S contains any character that is not a radix-R digit, - * then let Z be the substring of S consisting of all characters before - * the first such character; otherwise, let Z be S; - * @description: Complex test. Radix-R notation in [0..9, a-z]; -*/ - -//CHECK# -R_digit = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]; -for (i = 2; i <= 36; i++) { - if (parseInt(R_digit[i - 2] + "$", i) !== i - 1) { - $ERROR('#' + i + ': '); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A6.1_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A6.1_T4.js deleted file mode 100644 index 6f59a637e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A6.1_T4.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.2_A6.1_T4; - * @section: 15.1.2.2; - * @assertion: If S contains any character that is not a radix-R digit, - * then let Z be the substring of S consisting of all characters before - * the first such character; otherwise, let Z be S; - * @description: Complex test. Radix-R notation in [0..9, A-Z]; -*/ - -//CHECK# -R_digit = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]; -for (i = 2; i <= 35; i++) { - if (parseInt(R_digit[i - 2] + R_digit[i - 1], i) !== i - 1) { - $ERROR('#' + i + ': '); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A6.1_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A6.1_T5.js deleted file mode 100644 index 70e27e29b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A6.1_T5.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.2_A6.1_T5; - * @section: 15.1.2.2; - * @assertion: If S contains any character that is not a radix-R digit, - * then let Z be the substring of S consisting of all characters before - * the first such character; otherwise, let Z be S; - * @description: Complex test. Radix-R notation in [0..9, a-z]; -*/ - -//CHECK# -R_digit = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]; -for (i = 2; i <= 35; i++) { - if (parseInt(R_digit[i - 2] + R_digit[i - 1], i) !== i - 1) { - $ERROR('#' + i + ': '); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A6.1_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A6.1_T6.js deleted file mode 100644 index 1c7a9da44..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A6.1_T6.js +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.2_A6.1_T6; - * @section: 15.1.2.2; - * @assertion: If S contains any character that is not a radix-R digit, - * then let Z be the substring of S consisting of all characters before - * the first such character; otherwise, let Z be S; - * @description: Complex test. Radix-R notation in [0..9]; -*/ - -//CHECK#2 -if (parseInt("0123456789", 2) !== 1) { - $ERROR('#2: parseInt("0123456789", 2) === 1. Actual: ' + (parseInt("0123456789", 2))); -} - -//CHECK#3 -if (parseInt("01234567890", 3) !== 5) { - $ERROR('#3: parseInt("01234567890", 3) === 5. Actual: ' + (parseInt("01234567890", 3))); -} - -//CHECK#4 -if (parseInt("01234567890", 4) !== 27) { - $ERROR('#4: parseInt("01234567890", 4) === 27. Actual: ' + (parseInt("01234567890", 4))); -} - -//CHECK#5 -if (parseInt("01234567890", 5) !== 194) { - $ERROR('#5: parseInt("01234567890", 5) === 194. Actual: ' + (parseInt("01234567890", 5))); -} - -//CHECK#6 -if (parseInt("01234567890", 6) !== 1865) { - $ERROR('#6: parseInt("01234567890", 6) === 1865. Actual: ' + (parseInt("01234567890", 6))); -} - -//CHECK#7 -if (parseInt("01234567890", 7) !== 22875) { - $ERROR('#7: parseInt("01234567890", 7) === 22875. Actual: ' + (parseInt("01234567890", 7))); -} - -//CHECK#8 -if (parseInt("01234567890", 8) !== 342391) { - $ERROR('#8: parseInt("01234567890", 8) === 342391. Actual: ' + (parseInt("01234567890", 8))); -} - -//CHECK#9 -if (parseInt("01234567890", 9) !== 6053444) { - $ERROR('#9: parseInt("01234567890", 9) === 6053444. Actual: ' + (parseInt("01234567890", 9))); -} - -//CHECK#10 -if (parseInt("01234567890", 10) !== Number(1234567890)) { - $ERROR('#10: parseInt("01234567890", 10) === Number(1234567890). Actual: ' + (parseInt("01234567890", 10))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A7.1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A7.1_T1.js deleted file mode 100644 index ef0aa32bd..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A7.1_T1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.2_A7.1_T1; - * @section: 15.1.2.2; - * @assertion: If Z is empty, return NaN; - * @description: Complex test. R in [2, 36]; -*/ - -//CHECK# -for (i = 2; i <= 36; i++) { - if (isNaN(parseInt("$string", i)) !== true) { - $ERROR('#' + i + ': parseInt("$string", i) === Not-a-Number. Actual: ' + (parseInt("$string", i))); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A7.1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A7.1_T2.js deleted file mode 100644 index 7d4a82162..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A7.1_T2.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.2_A7.1_T2; - * @section: 15.1.2.2; - * @assertion: If Z is empty, return NaN; - * @description: x is not a radix-R digit; -*/ - -//CHECK#1 -if (isNaN(parseInt("$0x")) !== true) { - $ERROR('#1: parseInt("$0x") === Not-a-Number. Actual: ' + (parseInt("$0x"))); -} - -//CHECK#2 -if (isNaN(parseInt("$0X")) !== true) { - $ERROR('#2: parseInt("$0X") === Not-a-Number. Actual: ' + (parseInt("$0X"))); -} - -//CHECK#3 -if (isNaN(parseInt("$$$")) !== true) { - $ERROR('#3: parseInt("$$$") === Not-a-Number. Actual: ' + (parseInt("$$$"))); -} - -//CHECK#4 -if (isNaN(parseInt("")) !== true) { - $ERROR('#4: parseInt("") === Not-a-Number. Actual: ' + (parseInt(""))); -} - -//CHECK#5 -if (isNaN(parseInt(" ")) !== true) { - $ERROR('#5: parseInt(" ") === Not-a-Number. Actual: ' + (parseInt(" "))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A7.2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A7.2_T1.js deleted file mode 100644 index 3e750eeb8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A7.2_T1.js +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.2_A7.2_T1; - * @section: 15.1.2.2; - * @assertion: Compute the mathematical integer value - * that is represented by Z in radix-R notation, using the - * letters A-Z and a-z for digits with values 10 through 35. - * Compute the number value for Result(16); - * @description: Complex test. Check algorithm; -*/ - -//CHECK# -R_digit1 = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]; -R_digit2 = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]; -for (i = 2; i <= 36; i++) { - for (j = 0; j < 10; j++) { - str = ""; - num = 0; - pow = 1; - k0 = Math.max(2, i - j); - for (k = k0; k <= i; k++) { - if (k % 2 === 0) { - str = str + R_digit1[k - 2]; - } else { - str = str + R_digit2[k - 2]; - } - num = num + (i + (k0 - k) - 1) * pow; - pow = pow * i; - } - if (parseInt(str, i) !== num) { - $ERROR('#' + i + '.' + j + ' : '); - } - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A7.2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A7.2_T2.js deleted file mode 100644 index 86af2de0f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A7.2_T2.js +++ /dev/null @@ -1,112 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.2_A7.2_T2; - * @section: 15.1.2.2; - * @assertion: Compute the mathematical integer value - * that is represented by Z in radix-R notation, using the - * letters A-Z and a-z for digits with values 10 through 35. - * Compute the number value for Result(16); - * @description: Checking algorithm for R = 2; -*/ - -//CHECK#1 -if (parseInt("1", 2) !== 1) { - $ERROR('#1: parseInt("1", 2) === 1. Actual: ' + (parseInt("1", 2))); -} - -//CHECK#2 -if (parseInt("11", 2) !== 3) { - $ERROR('#2: parseInt("11", 2) === 3. Actual: ' + (parseInt("11", 2))); -} - -//CHECK#3 -if (parseInt("111", 2) !== 7) { - $ERROR('#3: parseInt("111", 2) === 7. Actual: ' + (parseInt("111", 2))); -} - -//CHECK#4 -if (parseInt("1111", 2) !== 15) { - $ERROR('#4: parseInt("1111", 2) === 15. Actual: ' + (parseInt("1111", 2))); -} - -//CHECK#5 -if (parseInt("11111", 2) !== 31) { - $ERROR('#5: parseInt("11111", 2) === 31. Actual: ' + (parseInt("11111", 2))); -} - -//CHECK#6 -if (parseInt("111111", 2) !== 63) { - $ERROR('#6: parseInt("111111", 2) === 63. Actual: ' + (parseInt("111111", 2))); -} - -//CHECK#7 -if (parseInt("1111111", 2) !== 127) { - $ERROR('#7: parseInt("1111111", 2) === 127. Actual: ' + (parseInt("1111111", 2))); -} - -//CHECK#8 -if (parseInt("11111111", 2) !== 255) { - $ERROR('#8: parseInt("11111111", 2) === 255. Actual: ' + (parseInt("11111111", 2))); -} - -//CHECK#9 -if (parseInt("111111111", 2) !== 511) { - $ERROR('#9: parseInt("111111111", 2) === 511. Actual: ' + (parseInt("111111111", 2))); -} - -//CHECK#10 -if (parseInt("1111111111", 2) !== 1023) { - $ERROR('#10: parseInt("1111111111", 2) === 1023. Actual: ' + (parseInt("1111111111", 2))); -} - -//CHECK#11 -if (parseInt("11111111111", 2) !== 2047) { - $ERROR('#11: parseInt("11111111111", 2) === 2047. Actual: ' + (parseInt("11111111111", 2))); -} - -//CHECK#12 -if (parseInt("111111111111", 2) !== 4095) { - $ERROR('#12: parseInt("111111111111", 2) === 4095. Actual: ' + (parseInt("111111111111", 2))); -} - -//CHECK#13 -if (parseInt("1111111111111", 2) !== 8191) { - $ERROR('#13: parseInt("1111111111111", 2) === 8191. Actual: ' + (parseInt("1111111111111", 2))); -} - -//CHECK#14 -if (parseInt("11111111111111", 2) !== 16383) { - $ERROR('#14: parseInt("11111111111111", 2) === 16383. Actual: ' + (parseInt("11111111111111", 2))); -} - -//CHECK#15 -if (parseInt("111111111111111", 2) !== 32767) { - $ERROR('#15: parseInt("111111111111111", 2) === 32767. Actual: ' + (parseInt("111111111111111", 2))); -} - -//CHECK#16 -if (parseInt("1111111111111111", 2) !== 65535) { - $ERROR('#16: parseInt("1111111111111111", 2) === 65535. Actual: ' + (parseInt("1111111111111111", 2))); -} - -//CHECK#17 -if (parseInt("11111111111111111", 2) !== 131071) { - $ERROR('#17: parseInt("11111111111111111", 2) === 131071. Actual: ' + (parseInt("11111111111111111", 2))); -} - -//CHECK#18 -if (parseInt("111111111111111111", 2) !== 262143) { - $ERROR('#18: parseInt("111111111111111111", 2) === 262143. Actual: ' + (parseInt("111111111111111111", 2))); -} - -//CHECK#19 -if (parseInt("1111111111111111111", 2) !== 524287) { - $ERROR('#19: parseInt("1111111111111111111", 2) === 524287. Actual: ' + (parseInt("1111111111111111111", 2))); -} - -//CHECK#20 -if (parseInt("11111111111111111111", 2) !== 1048575) { - $ERROR('#20: parseInt("11111111111111111111", 2) === 1048575. Actual: ' + (parseInt("11111111111111111111", 2))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A7.2_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A7.2_T3.js deleted file mode 100644 index 90b855ef0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A7.2_T3.js +++ /dev/null @@ -1,112 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.2_A7.2_T3; - * @section: 15.1.2.2; - * @assertion: Compute the mathematical integer value - * that is represented by Z in radix-R notation, using the - * letters A-Z and a-z for digits with values 10 through 35. - * Compute the number value for Result(16); - * @description: Checking algorithm for R = 16; -*/ - -//CHECK#1 -if (parseInt("0x1", 16) !== 1) { - $ERROR('#1: parseInt("0x1", 16) === 1. Actual: ' + (parseInt("0x1", 16))); -} - -//CHECK#2 -if (parseInt("0X10", 16) !== 16) { - $ERROR('#2: parseInt("0X10", 16) === 16. Actual: ' + (parseInt("0X10", 16))); -} - -//CHECK#3 -if (parseInt("0x100", 16) !== 256) { - $ERROR('#3: parseInt("0x100", 16) === 256. Actual: ' + (parseInt("0x100", 16))); -} - -//CHECK#4 -if (parseInt("0X1000", 16) !== 4096) { - $ERROR('#4: parseInt("0X1000", 16) === 4096. Actual: ' + (parseInt("0X1000", 16))); -} - -//CHECK#5 -if (parseInt("0x10000", 16) !== 65536) { - $ERROR('#5: parseInt("0x10000", 16) === 65536. Actual: ' + (parseInt("0x10000", 16))); -} - -//CHECK#6 -if (parseInt("0X100000", 16) !== 1048576) { - $ERROR('#6: parseInt("x100000", 16) === 1048576. Actual: ' + (parseInt("x100000", 16))); -} - -//CHECK#7 -if (parseInt("0x1000000", 16) !== 16777216) { - $ERROR('#7: parseInt("0x1000000", 16) === 16777216. Actual: ' + (parseInt("0x1000000", 16))); -} - -//CHECK#8 -if (parseInt("0x10000000", 16) !== 268435456) { - $ERROR('#8: parseInt("0x10000000", 16) === 268435456. Actual: ' + (parseInt("0x10000000", 16))); -} - -//CHECK#9 -if (parseInt("0x100000000", 16) !== 4294967296) { - $ERROR('#9: parseInt("0x100000000", 16) === 4294967296. Actual: ' + (parseInt("0x100000000", 16))); -} - -//CHECK#10 -if (parseInt("0x1000000000", 16) !== 68719476736) { - $ERROR('#10: parseInt("0x1000000000", 16) === 68719476736. Actual: ' + (parseInt("0x1000000000", 16))); -} - -//CHECK#10 -if (parseInt("0x10000000000", 16) !== 1099511627776) { - $ERROR('#10: parseInt("0x10000000000", 16) === 1099511627776. Actual: ' + (parseInt("0x10000000000", 16))); -} - -//CHECK#12 -if (parseInt("0x100000000000", 16) !== 17592186044416) { - $ERROR('#12: parseInt("0x100000000000", 16) === 17592186044416. Actual: ' + (parseInt("0x100000000000", 16))); -} - -//CHECK#13 -if (parseInt("0x1000000000000", 16) !== 281474976710656) { - $ERROR('#13: parseInt("0x1000000000000", 16) === 281474976710656. Actual: ' + (parseInt("0x1000000000000", 16))); -} - -//CHECK#14 -if (parseInt("0x10000000000000", 16) !== 4503599627370496) { - $ERROR('#14: parseInt("0x10000000000000", 16) === 4503599627370496. Actual: ' + (parseInt("0x10000000000000", 16))); -} - -//CHECK#15 -if (parseInt("0x100000000000000", 16) !== 72057594037927936) { - $ERROR('#15: parseInt("0x100000000000000", 16) === 72057594037927936. Actual: ' + (parseInt("0x100000000000000", 16))); -} - -//CHECK#16 -if (parseInt("0x1000000000000000", 16) !== 1152921504606846976) { - $ERROR('#16: parseInt("0x1000000000000000", 16) === 1152921504606846976. Actual: ' + (parseInt("0x1000000000000000", 16))); -} - -//CHECK#17 -if (parseInt("0x10000000000000000", 16) !== 18446744073709551616) { - $ERROR('#17: parseInt("0x10000000000000000", 16) === 18446744073709551616. Actual: ' + (parseInt("0x10000000000000000", 16))); -} - -//CHECK#18 -if (parseInt("0x100000000000000000", 16) !== 295147905179352825856) { - $ERROR('#18: parseInt("0x100000000000000000", 16) === 295147905179352825856. Actual: ' + (parseInt("0x100000000000000000", 16))); -} - -//CHECK#19 -if (parseInt("0x1000000000000000000", 16) !== 4722366482869645213696) { - $ERROR('#19: parseInt("0x1000000000000000000", 16) === 4722366482869645213696. Actual: ' + (parseInt("0x1000000000000000000", 16))); -} - -//CHECK#20 -if (parseInt("0x10000000000000000000", 16) !== 75557863725914323419136) { - $ERROR('#20: parseInt("0x10000000000000000000", 16) === 75557863725914323419136. Actual: ' + (parseInt("0x10000000000000000000", 16))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A7.3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A7.3_T1.js deleted file mode 100644 index dd2e9ab26..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A7.3_T1.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.2_A7.3_T1; - * @section: 15.1.2.2; - * @assertion: Return sign * Result(17); - * @description: Complex test. Check algorithm; -*/ - -//CHECK# -R_digit1 = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]; -R_digit2 = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]; -for (i = 2; i <= 36; i++) { - for (j = 0; j < 10; j++) { - str = "+"; - sign = 1; - if (j % 2 !== 0) { - str = "-"; - sign= -1; - } - num = 0; - pow = 1; - k0 = Math.max(2, i - j); - for (k = k0; k <= i; k++) { - if (k % 2 === 0) { - str = str + R_digit1[k - 2]; - } else { - str = str + R_digit2[k - 2]; - } - num = num + (i + (k0 - k) - 1) * pow; - pow = pow * i; - } - if (parseInt(str, i) !== num * sign) { - $ERROR('#' + i + '.' + j + ' : '); - } - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A7.3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A7.3_T2.js deleted file mode 100644 index 8ca4598c6..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A7.3_T2.js +++ /dev/null @@ -1,109 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.2_A7.3_T2; - * @section: 15.1.2.2; - * @assertion: Return sign * Result(17); - * @description: Checking algorithm for R = 2; -*/ - -//CHECK#1 -if (parseInt("-1", 2) !== -1) { - $ERROR('#1: parseInt("-1", 2) === -1. Actual: ' + (parseInt("-1", 2))); -} - -//CHECK#2 -if (parseInt("-11", 2) !== -3) { - $ERROR('#2: parseInt("-11", 2) === -3. Actual: ' + (parseInt("-11", 2))); -} - -//CHECK#3 -if (parseInt("-111", 2) !== -7) { - $ERROR('#3: parseInt("-111", 2) === -7. Actual: ' + (parseInt("-111", 2))); -} - -//CHECK#4 -if (parseInt("-1111", 2) !== -15) { - $ERROR('#4: parseInt("-1111", 2) === -15. Actual: ' + (parseInt("-1111", 2))); -} - -//CHECK#5 -if (parseInt("-11111", 2) !== -31) { - $ERROR('#5: parseInt("-11111", 2) === -31. Actual: ' + (parseInt("-11111", 2))); -} - -//CHECK#6 -if (parseInt("-111111", 2) !== -63) { - $ERROR('#6: parseInt("-111111", 2) === -63. Actual: ' + (parseInt("-111111", 2))); -} - -//CHECK#7 -if (parseInt("-1111111", 2) !== -127) { - $ERROR('#7: parseInt("-1111111", 2) === -127. Actual: ' + (parseInt("-1111111", 2))); -} - -//CHECK#8 -if (parseInt("-11111111", 2) !== -255) { - $ERROR('#8: parseInt("-11111111", 2) === -255. Actual: ' + (parseInt("-11111111", 2))); -} - -//CHECK#9 -if (parseInt("-111111111", 2) !== -511) { - $ERROR('#9: parseInt("-111111111", 2) === -511. Actual: ' + (parseInt("-111111111", 2))); -} - -//CHECK#10 -if (parseInt("-1111111111", 2) !== -1023) { - $ERROR('#10: parseInt("-1111111111", 2) === -1023. Actual: ' + (parseInt("-1111111111", 2))); -} - -//CHECK#11 -if (parseInt("-11111111111", 2) !== -2047) { - $ERROR('#11: parseInt("-11111111111", 2) === -2047. Actual: ' + (parseInt("-11111111111", 2))); -} - -//CHECK#12 -if (parseInt("-111111111111", 2) !== -4095) { - $ERROR('#12: parseInt("-111111111111", 2) === -4095. Actual: ' + (parseInt("-111111111111", 2))); -} - -//CHECK#13 -if (parseInt("-1111111111111", 2) !== -8191) { - $ERROR('#13: parseInt("-1111111111111", 2) === -8191. Actual: ' + (parseInt("-1111111111111", 2))); -} - -//CHECK#14 -if (parseInt("-11111111111111", 2) !== -16383) { - $ERROR('#14: parseInt("-11111111111111", 2) === -16383. Actual: ' + (parseInt("-11111111111111", 2))); -} - -//CHECK#15 -if (parseInt("-111111111111111", 2) !== -32767) { - $ERROR('#15: parseInt("-111111111111111", 2) === -32767. Actual: ' + (parseInt("-111111111111111", 2))); -} - -//CHECK#16 -if (parseInt("-1111111111111111", 2) !== -65535) { - $ERROR('#16: parseInt("-1111111111111111", 2) === -65535. Actual: ' + (parseInt("-1111111111111111", 2))); -} - -//CHECK#17 -if (parseInt("-11111111111111111", 2) !== -131071) { - $ERROR('#17: parseInt("-11111111111111111", 2) === -131071. Actual: ' + (parseInt("-11111111111111111", 2))); -} - -//CHECK#18 -if (parseInt("-111111111111111111", 2) !== -262143) { - $ERROR('#18: parseInt("-111111111111111111", 2) === -262143. Actual: ' + (parseInt("-111111111111111111", 2))); -} - -//CHECK#19 -if (parseInt("-1111111111111111111", 2) !== -524287) { - $ERROR('#19: parseInt("-1111111111111111111", 2) === -524287. Actual: ' + (parseInt("-1111111111111111111", 2))); -} - -//CHECK#20 -if (parseInt("-11111111111111111111", 2) !== -1048575) { - $ERROR('#20: parseInt("-11111111111111111111", 2) === -1048575. Actual: ' + (parseInt("-11111111111111111111", 2))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A7.3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A7.3_T3.js deleted file mode 100644 index 7bad7645e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A7.3_T3.js +++ /dev/null @@ -1,109 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.2_A7.3_T3; - * @section: 15.1.2.2; - * @assertion: Return sign * Result(17); - * @description: Checking algorithm for R = 10; -*/ - -//CHECK#1 -if (parseInt("-1", 10) !== -1) { - $ERROR('#1: parseInt("-1", 10) === -1. Actual: ' + (parseInt("-1", 10))); -} - -//CHECK#2 -if (parseInt("-10", 10) !== -10) { - $ERROR('#2: parseInt("-10", 10) === -10. Actual: ' + (parseInt("-10", 10))); -} - -//CHECK#3 -if (parseInt("-100", 10) !== -100) { - $ERROR('#3: parseInt("-100", 10) === -100. Actual: ' + (parseInt("-100", 10))); -} - -//CHECK#4 -if (parseInt("-1000", 10) !== -1000) { - $ERROR('#4: parseInt("-1000", 10) === -1000. Actual: ' + (parseInt("-1000", 10))); -} - -//CHECK#5 -if (parseInt("-10000", 10) !== -10000) { - $ERROR('#5: parseInt("-10000", 10) === -10000. Actual: ' + (parseInt("-10000", 10))); -} - -//CHECK#6 -if (parseInt("-100000", 10) !== -100000) { - $ERROR('#6: parseInt("-100000", 10) === -100000. Actual: ' + (parseInt("-100000", 10))); -} - -//CHECK#7 -if (parseInt("-1000000", 10) !== -1000000) { - $ERROR('#7: parseInt("-1000000", 10) === -1000000. Actual: ' + (parseInt("-1000000", 10))); -} - -//CHECK#8 -if (parseInt("-10000000", 10) !== -10000000) { - $ERROR('#8: parseInt("-10000000", 10) === -10000000. Actual: ' + (parseInt("-10000000", 10))); -} - -//CHECK#9 -if (parseInt("-100000000", 10) !== -100000000) { - $ERROR('#9: parseInt("-100000000", 10) === -100000000. Actual: ' + (parseInt("-100000000", 10))); -} - -//CHECK#10 -if (parseInt("-1000000000", 10) !== -1000000000) { - $ERROR('#10: parseInt("-1000000000", 10) === -1000000000. Actual: ' + (parseInt("-1000000000", 10))); -} - -//CHECK#10 -if (parseInt("-10000000000", 10) !== -10000000000) { - $ERROR('#10: parseInt("-10000000000", 10) === -10000000000. Actual: ' + (parseInt("-10000000000", 10))); -} - -//CHECK#12 -if (parseInt("-100000000000", 10) !== -100000000000) { - $ERROR('#12: parseInt("-100000000000", 10) === -100000000000. Actual: ' + (parseInt("-100000000000", 10))); -} - -//CHECK#13 -if (parseInt("-1000000000000", 10) !== -1000000000000) { - $ERROR('#13: parseInt("-1000000000000", 10) === -1000000000000. Actual: ' + (parseInt("-1000000000000", 10))); -} - -//CHECK#14 -if (parseInt("-10000000000000", 10) !== -10000000000000) { - $ERROR('#14: parseInt("-10000000000000", 10) === -10000000000000. Actual: ' + (parseInt("-10000000000000", 10))); -} - -//CHECK#15 -if (parseInt("-100000000000000", 10) !== -100000000000000) { - $ERROR('#15: parseInt("-100000000000000", 10) === -100000000000000. Actual: ' + (parseInt("-100000000000000", 10))); -} - -//CHECK#10 -if (parseInt("-1000000000000000", 10) !== -1000000000000000) { - $ERROR('#10: parseInt("-1000000000000000", 10) === -1000000000000000. Actual: ' + (parseInt("-1000000000000000", 10))); -} - -//CHECK#17 -if (parseInt("-10000000000000000", 10) !== -10000000000000000) { - $ERROR('#17: parseInt("-10000000000000000", 10) === -10000000000000000. Actual: ' + (parseInt("-10000000000000000", 10))); -} - -//CHECK#18 -if (parseInt("-100000000000000000", 10) !== -100000000000000000) { - $ERROR('#18: parseInt("-100000000000000000", 10) === -100000000000000000. Actual: ' + (parseInt("-100000000000000000", 10))); -} - -//CHECK#19 -if (parseInt("-1000000000000000000", 10) !== -1000000000000000000) { - $ERROR('#19: parseInt("-1000000000000000000", 10) === -1000000000000000000. Actual: ' + (parseInt("-1000000000000000000", 10))); -} - -//CHECK#20 -if (parseInt("-10000000000000000000", 10) !== -10000000000000000000) { - $ERROR('#20: parseInt("-10000000000000000000", 10) === -10000000000000000000. Actual: ' + (parseInt("-10000000000000000000", 10))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A8.js deleted file mode 100644 index 8ccf53024..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A8.js +++ /dev/null @@ -1,82 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.2_A8; - * @section: 15.1.2.2, 9.3.1; - * @assertion: parseInt may interpret only a leading portion of the string as - * a number value; it ignores any characters that cannot be interpreted as part - * of the notation of an decimal literal, and no indication is given that any such - * characters were ignored. - * @description: Complex test without eval; -*/ - -//CHECK -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; -for (index = 0; index <= 65535; index++) { - if ((index < 0x0030) || (index > 0x0039) && - (index < 0x0041) || (index > 0x005A) && - (index < 0x0061) || (index > 0x007A)) { - var hex = decimalToHexString(index); - if (parseInt("1Z" + String.fromCharCode(index), 36) !== 71) { - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A9.1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A9.1.js deleted file mode 100644 index 36636af7a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A9.1.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.2_A9.1; - * @section: 15.1.2.2, 15.2.4.7, 12.6.4; - * @assertion: The length property of parseInt has the attribute DontEnum; - * @description: Checking use propertyIsEnumerable, for-in; -*/ - - -//CHECK#1 -if (parseInt.propertyIsEnumerable('length') !== false) { - $ERROR('#1: parseInt.propertyIsEnumerable(\'length\') === false. Actual: ' + (parseInt.propertyIsEnumerable('length'))); -} - -//CHECK#2 -result = true; -for (p in parseInt){ - if (p === "length") { - result = false; - } -} - -if (result !== true) { - $ERROR('#2: result = true; for (p in parseInt) { if (p === "length") result = false; } result === true;'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A9.2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A9.2.js deleted file mode 100644 index 1654f2a86..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A9.2.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.2_A9.2; - * @section: 15.1.2.2, 15.2.4.5, 11.4.1; - * @assertion: The length property of parseInt has the attribute DontDelete; - * @description: Checking use hasOwnProperty, delete; -*/ - -//CHECK#1 -if (parseInt.hasOwnProperty('length') !== true) { - $FAIL('#1: parseInt.hasOwnProperty(\'length\') === true. Actual: ' + (parseInt.hasOwnProperty('length'))); -} - -delete parseInt.length; - -//CHECK#2 -if (parseInt.hasOwnProperty('length') !== true) { - $ERROR('#2: delete parseInt.length; parseInt.hasOwnProperty(\'length\') === true. Actual: ' + (parseInt.hasOwnProperty('length'))); -} - -//CHECK#3 -if (parseInt.length === undefined) { - $ERROR('#3: delete parseInt.length; parseInt.length !== undefined'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A9.3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A9.3.js deleted file mode 100644 index 81720fc6b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A9.3.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.2_A9.3; - * @section: 15.1.2.2; - * @assertion: The length property of parseInt has the attribute ReadOnly; - * @description: Checking if varying the length property fails; -*/ - -//CHECK#1 -x = parseInt.length; -parseInt.length = Infinity; -if (parseInt.length !== x) { - $ERROR('#1: x = parseInt.length; parseInt.length = Infinity; parseInt.length === x. Actual: ' + (parseInt.length)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A9.4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A9.4.js deleted file mode 100644 index 2b81bc082..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A9.4.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.2_A9.4; - * @section: 15.1.2.2; - * @assertion: The length property of parseInt is 2; - * @description: parseInt.length === 2; -*/ - -//CHECK#1 -if (parseInt.length !== 2) { - $ERROR('#1: parseInt.length === 2. Actual: ' + (parseInt.length)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A9.5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A9.5.js deleted file mode 100644 index 93981cad3..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A9.5.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.2_A9.5; - * @section: 15.1.2.2, 15.2.4.7, 12.6.4; - * @assertion: The parseInt property has the attribute DontEnum; - * @description: Checking use propertyIsEnumerable, for-in; -*/ - - -//CHECK#1 -if (this.propertyIsEnumerable('parseInt') !== false) { - $ERROR('#1: this.propertyIsEnumerable(\'parseInt\') === false. Actual: ' + (this.propertyIsEnumerable('parseInt'))); -} - -//CHECK#2 -result = true; -for (p in this){ - if (p === "parseInt") { - result = false; - } -} - -if (result !== true) { - $ERROR('#2: result = true; for (p in this) { if (p === "parseInt") result = false; } result === true;'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A9.6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A9.6.js deleted file mode 100644 index 66af13b8d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A9.6.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.1.2.2_A9.6; -* @section: 15.1.2.2; -* @assertion: The parseInt property has not prototype property; -* @description: Checking parseInt.prototype; -*/ - -//CHECK#1 -if (parseInt.prototype !== undefined) { - $ERROR('#1: parseInt.prototype === undefined. Actual: ' + (parseInt.prototype)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A9.7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A9.7.js deleted file mode 100644 index 123be57fe..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.2_parseInt/S15.1.2.2_A9.7.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.1.2.2_A9.7; -* @section: 15.1.2.2, 11.2.2; -* @assertion: The parseInt property can't be used as constructor; -* @description: If property does not implement the internal [[Construct]] method, throw a TypeError exception; -*/ - -//CHECK#1 - -try { - new parseInt(); - $ERROR('#1.1: new parseInt() throw TypeError. Actual: ' + (new parseInt())); -} catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1.2: new parseInt() throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A1_T1.js deleted file mode 100644 index 25e593b6e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A1_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.3_A1_T1; - * @section: 15.1.2.3, 9.8; - * @assertion: Operator use ToString; - * @description: Checking for boolean primitive; -*/ - -//CHECK#1 -if (!(isNaN(parseFloat(true)) && isNaN(parseFloat("NaN")))) { - $ERROR('#1: parseFloat(true) === Not-a-Number; parseFloat("NaN") === Not-a-Number. Actual: ' + (parseFloat("NaN"))); -} - -//CHECK#2 -if (String(parseFloat(false)) !== "NaN") { - $ERROR('#2: String(parseFloat(false)) === "NaN". Actual: ' + (String(parseFloat(false)))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A1_T2.js deleted file mode 100644 index a0f81e2f7..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A1_T2.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.3_A1_T2; - * @section: 15.1.2.3, 9.8; - * @assertion: Operator use ToString; - * @description: Checking for number primitive; -*/ - -//CHECK#1 -if (parseFloat(-1.1) !== parseFloat("-1.1")) { - $ERROR('#1: parseFloat(-1.1) === parseFloat("-1.1"). Actual: ' + (parseFloat(-1.1))); -} - -//CHECK#2 -if (parseFloat(Infinity) !== parseFloat("Infinity")) { - $ERROR('#2: parseFloat(Infinity) === parseFloat("Infinity"). Actual: ' + (parseFloat(Infinity))); -} - -//CHECK#3 -if (String(parseFloat(NaN)) !== "NaN") { - $ERROR('#3: String(parseFloat(NaN)) === "NaN". Actual: ' + (String(parseFloat(NaN)))); -} - -//CHECK#4 -if (parseFloat(.01e+2) !== parseFloat(".01e+2")) { - $ERROR('#4: parseFloat(.01e+2) === parseFloat(".01e+2"). Actual: ' + (parseFloat(.01e+2))); -} - -//CHECK#5 -if (parseFloat(-0) !== 0) { - $ERROR('#5: parseFloat(-0) === 0. Actual: ' + (parseFloat(-0))); -} else { - if (1 / parseFloat(-0) !== Number.POSITIVE_INFINITY) { - $ERROR('#5: parseFloat(-0) === +0. Actual: ' + (parseFloat(-0))); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A1_T3.js deleted file mode 100644 index ea793257f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A1_T3.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.3_A1_T3; - * @section: 15.1.2.3, 9.8; - * @assertion: Operator use ToString; - * @description: Checking for undefined and null; -*/ - -//CHECK#1 -if (!(isNaN(parseFloat(undefined)) && isNaN(parseFloat("NaN")))) { - $ERROR('#1: parseFloat(undefined) === Not-a-Number; parseFloat("NaN") === Not-a-Number. Actual: ' + (parseFloat("NaN"))); -} - -//CHECK#2 -if (!(isNaN(parseFloat(null)) && isNaN(parseFloat("NaN")))) { - $ERROR('#2: parseFloat(null) === Not-a-Number; parseFloat("NaN") === Not-a-Number. Actual: ' + (parseFloat("NaN"))); -} - - -//CHECK#3 -if (String(parseFloat(undefined)) !== "NaN") { - $ERROR('#3: String(parseFloat(undefined)) === "NaN". Actual: ' + (String(parseFloat(undefined)))); -} - -//CHECK#4 -if (String(parseFloat(null)) !== "NaN") { - $ERROR('#4: String(parseFloat(null)) === "NaN". Actual: ' + (String(parseFloat(null)))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A1_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A1_T4.js deleted file mode 100644 index 033b76ad8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A1_T4.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.3_A1_T4; - * @section: 15.1.2.3, 9.8; - * @assertion: Operator use ToString; - * @description: Checking for Boolean object; -*/ - -//CHECK#1 -if (!(isNaN(parseFloat(new Boolean(true))) && isNaN(parseFloat("NaN")))) { - $ERROR('#1: parseFloat(new Boolean(true)) === Not-a-Number; parseFloat("NaN") === Not-a-Number. Actual: ' + (parseFloat("NaN"))); -} - -//CHECK#2 -if (String(parseFloat(new Boolean(false))) !== "NaN") { - $ERROR('#2: String(parseFloat(new Boolean(false))) === "NaN". Actual: ' + (String(parseFloat(new Boolean(false))))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A1_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A1_T5.js deleted file mode 100644 index 8604f1a43..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A1_T5.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.3_A1_T5; - * @section: 15.1.2.3, 9.8; - * @assertion: Operator use ToString; - * @description: Checking for Number object; -*/ - -//CHECK#1 -if (parseFloat(new Number(-1.1)) !== parseFloat("-1.1")) { - $ERROR('#1: parseFloat(new Number(-1.1)) === parseFloat("-1.1"). Actual: ' + (parseFloat(new Number(-1.1)))); -} - -//CHECK#2 -if (parseFloat(new Number(Infinity)) !== parseFloat("Infinity")) { - $ERROR('#2: parseFloat(new Number(Infinity)) === parseFloat("Infinity"). Actual: ' + (parseFloat(new Number(Infinity)))); -} - -//CHECK#3 -if (String(parseFloat(new Number(NaN))) !== "NaN") { - $ERROR('#3: String(parseFloat(new Number(NaN))) === "NaN". Actual: ' + (String(parseFloat(new Number(NaN))))); -} - -//CHECK#4 -if (parseFloat(new Number(.01e+2)) !== parseFloat(".01e+2")) { - $ERROR('#4: parseFloat(new Number(.01e+2)) === parseFloat(".01e+2"). Actual: ' + (parseFloat(new Number(.01e+2)))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A1_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A1_T6.js deleted file mode 100644 index dfc73b198..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A1_T6.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.3_A1_T6; - * @section: 15.1.2.3, 9.8; - * @assertion: Operator use ToString; - * @description: Checking for String object; -*/ - -//CHECK#1 -if (parseFloat(new String("-1.1")) !== parseFloat("-1.1")) { - $ERROR('#1: parseFloat(new String("-1.1")) === parseFloat("-1.1"). Actual: ' + (parseFloat(new String("-1.1")))); -} - -//CHECK#2 -if (parseFloat(new String("Infinity")) !== parseFloat("Infinity")) { - $ERROR('#2: parseFloat(new String("Infinity")) === parseFloat("Infinity"). Actual: ' + (parseFloat(new String("Infinity")))); -} - -//CHECK#3 -if (String(parseFloat(new String("NaN"))) !== "NaN") { - $ERROR('#3: String(parseFloat(new String("NaN"))) === "NaN". Actual: ' + (String(parseFloat(new String("NaN"))))); -} - -//CHECK#4 -if (parseFloat(new String(".01e+2")) !== parseFloat(".01e+2")) { - $ERROR('#4: parseFloat(new String(".01e+2")) === parseFloat(".01e+2"). Actual: ' + (parseFloat(new String(".01e+2")))); -} - -//CHECK#5 -if (String(parseFloat(new String("false"))) !== "NaN") { - $ERROR('#5: String(parseFloat(new String("false"))) === "NaN". Actual: ' + (String(parseFloat(new String("false"))))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A1_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A1_T7.js deleted file mode 100644 index 2eab8eccb..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A1_T7.js +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.3_A1_T7; - * @section: 15.1.2.3, 9.8, 8.6.2.6; - * @assertion: Operator use ToString; - * @description: If Type(value) is Object, evaluate ToPrimitive(value, String); -*/ - -//CHECK#1 -var object = {valueOf: function() {return 1}}; -if (isNaN(parseFloat(object)) !== true) { - $ERROR('#1: var object = {valueOf: function() {return 1}}; parseFloat(object) === Not-a-Number. Actual: ' + (parseFloat(object))); -} - -//CHECK#2 -var object = {valueOf: function() {return 1}, toString: function() {return 0}}; -if (parseFloat(object) !== 0) { - $ERROR('#2: var object = {valueOf: function() {return 1}, toString: function() {return 0}}; parseFloat(object) === 0. Actual: ' + (parseFloat(object))); -} - -//CHECK#3 -var object = {valueOf: function() {return 1}, toString: function() {return {}}}; -if (parseFloat(object) !== 1) { - $ERROR('#3: var object = {valueOf: function() {return 1}, toString: function() {return {}}}; parseFloat(object) === 1. Actual: ' + (parseFloat(object))); -} - -//CHECK#4 -try { - var object = {valueOf: function() {throw "error"}, toString: function() {return 1}}; - if (parseFloat(object) !== 1) { - $ERROR('#4.1: var object = {valueOf: function() {throw "error"}, toString: function() {return 1}}; parseFloat(object) === 1. Actual: ' + (parseFloat(object))); - } -} -catch (e) { - if (e === "error") { - $ERROR('#4.2: var object = {valueOf: function() {throw "error"}, toString: function() {return 1}}; parseFloat(object) not throw "error"'); - } else { - $ERROR('#4.3: var object = {valueOf: function() {throw "error"}, toString: function() {return 1}}; parseFloat(object) not throw Error. Actual: ' + (e)); - } -} - -//CHECK#5 -var object = {toString: function() {return 1}}; -if (parseFloat(object) !== 1) { - $ERROR('#5: var object = {toString: function() {return 1}}; parseFloat(object) === 1. Actual: ' + (parseFloat(object))); -} - -//CHECK#6 -var object = {valueOf: function() {return {}}, toString: function() {return 1}} -if (parseFloat(object) !== 1) { - $ERROR('#6: var object = {valueOf: function() {return {}}, toString: function() {return 1}}; parseFloat(object) === 1. Actual: ' + (parseFloat(object))); -} - -//CHECK#7 -try { - var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; - parseFloat(object); - $ERROR('#7.1: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; parseFloat(object) throw "error". Actual: ' + (parseFloat(object))); -} -catch (e) { - if (e !== "error") { - $ERROR('#7.2: var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; parseFloat(object) throw "error". Actual: ' + (e)); - } -} - -//CHECK#8 -try { - var object = {valueOf: function() {return {}}, toString: function() {return {}}}; - parseFloat(object); - $ERROR('#8.1: var object = {valueOf: function() {return {}}, toString: function() {return {}}}; parseFloat(object) throw TypeError. Actual: ' + (parseFloat(object))); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#8.2: var object = {valueOf: function() {return {}}, toString: function() {return {}}}; parseFloat(object) throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A2_T1.js deleted file mode 100644 index a259bdd33..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A2_T1.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.3_A2_T1; - * @section: 15.1.2.3; - * @assertion: Operator remove leading StrWhiteSpaceChar; - * @description: StrWhiteSpaceChar :: TAB (U+0009); -*/ - -//CHECK#1 -if (parseFloat("\u00091.1") !== parseFloat("1.1")) { - $ERROR('#1: parseFloat("\\u00091.1") === parseFloat("1.1"). Actual: ' + (parseFloat("\u00091.1"))); -} - -//CHECK#2 -if (parseFloat("\u0009\u0009-1.1") !== parseFloat("-1.1")) { - $ERROR('#2: parseFloat("\\u0009\\u0009-1.1") === parseFloat("-1.1"). Actual: ' + (parseFloat("\u0009\u0009-1.1"))); -} - -//CHECK#3 -if (parseFloat(" 1.1") !== parseFloat("1.1")) { - $ERROR('#3: parseFloat(" 1.1") === parseFloat("1.1"). Actual: ' + (parseFloat(" 1.1"))); -} - -//CHECK#4 -if (parseFloat(" 1.1") !== parseFloat("1.1")) { - $ERROR('#4: parseFloat(" 1.1") === parseFloat("1.1"). Actual: ' + (parseFloat(" 1.1"))); -} - -//CHECK#5 -if (parseFloat(" \u0009 \u0009-1.1") !== parseFloat("-1.1")) { - $ERROR('#5: parseFloat(" \\u0009 \\u0009-1.1") === parseFloat("-1.1"). Actual: ' + (parseFloat(" \u0009 \u0009-1.1"))); -} - -//CHECK#6 -if (isNaN(parseFloat("\u0009")) !== true) { - $ERROR('#6: parseFloat("\\u0009") === Not-a-Number. Actual: ' + (parseFloat("\u0009"))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A2_T10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A2_T10.js deleted file mode 100644 index 4a049a372..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A2_T10.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.3_A2_T10; - * @section: 15.1.2.3; - * @assertion: Operator remove leading StrWhiteSpaceChar; - * @description: StrWhiteSpaceChar :: USP; -*/ - -//CHECK# -count = 0; -errorCount = 0; -uspU = ["\u1680", "\u180E", "\u2000", "\u2001", "\u2002", "\u2003", "\u2004", "\u2005", "\u2006", "\u2007", "\u2008", "\u2009", "\u200A", "\u202F", "\u205F", "\u3000"] -uspS = ["1680", "180E", "2000", "2001", "2002", "2003", "2004", "2005", "2006", "2007", "2008", "2009", "200A", "202F", "205F", "3000"] -for (index = 0; index < uspU.length; index++) { - var result = true; - if (parseFloat(uspU[index] + "1.1") !== parseFloat("1.1")) { - $ERROR('#1.' + uspS[index] + ' '); - result = false; - } - if (parseFloat(uspU[index] + uspU[index] + uspU[index] + "1.1") !== parseFloat("1.1")) { - $ERROR('#2.' + uspS[index] + ' '); - result = false; - } - if (isNaN(parseFloat(uspU[index])) !== true) { - $ERROR('#3.' + uspS[index] + ' '); - result = false; - } - if (result !== true) { - errorCount++; - } - count++; -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A2_T2.js deleted file mode 100644 index 4c942ea1f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A2_T2.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.3_A2_T2; - * @section: 15.1.2.3; - * @assertion: Operator remove leading StrWhiteSpaceChar; - * @description: StrWhiteSpaceChar :: SP (U+0020); -*/ - -//CHECK#1 -if (parseFloat("\u00201.1") !== parseFloat("1.1")) { - $ERROR('#1: parseFloat("\\u00201.1") === parseFloat("1.1"). Actual: ' + (parseFloat("\u00201.1"))); -} - -//CHECK#2 -if (parseFloat("\u0020\u0020-1.1") !== parseFloat("-1.1")) { - $ERROR('#2: parseFloat("\\u0020\\u0020-1.1") === parseFloat("-1.1"). Actual: ' + (parseFloat("\u0020\u0020-1.1"))); -} - -//CHECK#3 -if (parseFloat(" 1.1") !== parseFloat("1.1")) { - $ERROR('#3: parseFloat(" 1.1") === parseFloat("1.1"). Actual: ' + (parseFloat(" 1.1"))); -} - -//CHECK#4 -if (parseFloat(" 1.1") !== parseFloat("1.1")) { - $ERROR('#4: parseFloat(" 1.1") === parseFloat("1.1"). Actual: ' + (parseFloat(" 1.1"))); -} - -//CHECK#5 -if (parseFloat(" \u0020 \u0020-1.1") !== parseFloat("-1.1")) { - $ERROR('#5: parseFloat(" \\u0020 \\u0020-1.1") === parseFloat("-1.1"). Actual: ' + (parseFloat(" \u0020 \u0020-1.1"))); -} - -//CHECK#6 -if (isNaN(parseFloat("\u0020")) !== true) { - $ERROR('#6: parseFloat("\\u0020") === Not-a-Number. Actual: ' + (parseFloat("\u0020"))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A2_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A2_T3.js deleted file mode 100644 index 13d1eb022..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A2_T3.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.3_A2_T3; - * @section: 15.1.2.3; - * @assertion: Operator remove leading StrWhiteSpaceChar; - * @description: StrWhiteSpaceChar :: NBSB (U+00A0); -*/ - -//CHECK#1 -if (parseFloat("\u00A01.1") !== parseFloat("1.1")) { - $ERROR('#1: parseFloat("\\u00A01.1") === parseFloat("1.1"). Actual: ' + (parseFloat("\u00A01.1"))); -} - -//CHECK#2 -if (parseFloat("\u00A0\u00A0-1.1") !== parseFloat("-1.1")) { - $ERROR('#2: parseFloat("\\u00A0\\u00A0-1.1") === parseFloat("-1.1"). Actual: ' + (parseFloat("\u00A0\u00A0-1.1"))); -} - -//CHECK#3 -if (isNaN(parseFloat("\u00A0")) !== true) { - $ERROR('#3: parseFloat("\\u00A0") === Not-a-Number. Actual: ' + (parseFloat("\u00A0"))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A2_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A2_T4.js deleted file mode 100644 index 494a1947e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A2_T4.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.3_A2_T4; - * @section: 15.1.2.3; - * @assertion: Operator remove leading StrWhiteSpaceChar; - * @description: StrWhiteSpaceChar :: FF (U+000C); -*/ - -//CHECK#1 -if (parseFloat("\u000C1.1") !== parseFloat("1.1")) { - $ERROR('#1: parseFloat("\\u000C1.1") === parseFloat("1.1"). Actual: ' + (parseFloat("\u000C1.1"))); -} - -//CHECK#2 -if (parseFloat("\u000C\u000C-1.1") !== parseFloat("-1.1")) { - $ERROR('#2: parseFloat("\\u000C\\u000C-1.1") === parseFloat("-1.1"). Actual: ' + (parseFloat("\u000C\u000C-1.1"))); -} - -//CHECK#3 -if (isNaN(parseFloat("\u000C")) !== true) { - $ERROR('#3: parseFloat("\\u000C") === Not-a-Number. Actual: ' + (parseFloat("\u000C"))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A2_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A2_T5.js deleted file mode 100644 index 6b28ea1d1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A2_T5.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.3_A2_T5; - * @section: 15.1.2.3; - * @assertion: Operator remove leading StrWhiteSpaceChar; - * @description: StrWhiteSpaceChar :: VT (U+000B); -*/ - -//CHECK#1 -if (parseFloat("\u000B1.1") !== parseFloat("1.1")) { - $ERROR('#1: parseFloat("\\u000B1.1") === parseFloat("1.1"). Actual: ' + (parseFloat("\u000B1.1"))); -} - -//CHECK#2 -if (parseFloat("\u000B\u000B-1.1") !== parseFloat("-1.1")) { - $ERROR('#2: parseFloat("\\u000B\\u000B-1.1") === parseFloat("-1.1"). Actual: ' + (parseFloat("\u000B\u000B-1.1"))); -} - -//CHECK#3 -if (isNaN(parseFloat("\u000B")) !== true) { - $ERROR('#3: parseFloat("\\u000B") === Not-a-Number. Actual: ' + (parseFloat("\u000B"))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A2_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A2_T6.js deleted file mode 100644 index 6c0aee42f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A2_T6.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.3_A2_T6; - * @section: 15.1.2.3; - * @assertion: Operator remove leading StrWhiteSpaceChar; - * @description: StrWhiteSpaceChar :: CR (U+000D); -*/ - -//CHECK#1 -if (parseFloat("\u000D1.1") !== parseFloat("1.1")) { - $ERROR('#1: parseFloat("\\u000D1.1") === parseFloat("1.1"). Actual: ' + (parseFloat("\u000D1.1"))); -} - -//CHECK#2 -if (parseFloat("\u000D\u000D-1.1") !== parseFloat("-1.1")) { - $ERROR('#2: parseFloat("\\u000D\\u000D-1.1") === parseFloat("-1.1"). Actual: ' + (parseFloat("\u000D\u000D-1.1"))); -} - -//CHECK#3 -if (isNaN(parseFloat("\u000D")) !== true) { - $ERROR('#3: parseFloat("\\u000D") === Not-a-Number. Actual: ' + (parseFloat("\u000D"))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A2_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A2_T7.js deleted file mode 100644 index 30e3dcb24..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A2_T7.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.3_A2_T7; - * @section: 15.1.2.3; - * @assertion: Operator remove leading StrWhiteSpaceChar; - * @description: StrWhiteSpaceChar :: LF (U+000A); -*/ - -//CHECK#1 -if (parseFloat("\u000A1.1") !== parseFloat("1.1")) { - $ERROR('#1: parseFloat("\\u000A1.1") === parseFloat("1.1"). Actual: ' + (parseFloat("\u000A1.1"))); -} - -//CHECK#2 -if (parseFloat("\u000A\u000A-1.1") !== parseFloat("-1.1")) { - $ERROR('#2: parseFloat("\\u000A\\u000A-1.1") === parseFloat("-1.1"). Actual: ' + (parseFloat("\u000A\u000A-1.1"))); -} - -//CHECK#3 -if (isNaN(parseFloat("\u000A")) !== true) { - $ERROR('#3: parseFloat("\\u000A") === Not-a-Number. Actual: ' + (parseFloat("\u000A"))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A2_T8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A2_T8.js deleted file mode 100644 index 648e19e2a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A2_T8.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.3_A2_T8; - * @section: 15.1.2.3; - * @assertion: Operator remove leading StrWhiteSpaceChar; - * @description: StrWhiteSpaceChar :: LS (U+2028); -*/ - -//CHECK#1 -if (parseFloat("\u20281.1") !== parseFloat("1.1")) { - $ERROR('#1: parseFloat("\\u20281.1") === parseFloat("1.1"). Actual: ' + (parseFloat("\u20281.1"))); -} - -//CHECK#2 -if (parseFloat("\u2028\u2028-1.1") !== parseFloat("-1.1")) { - $ERROR('#2: parseFloat("\\u2028\\u2028-1.1") === parseFloat("-1.1"). Actual: ' + (parseFloat("\u2028\u2028-1.1"))); -} - -//CHECK#3 -if (isNaN(parseFloat("\u2028")) !== true) { - $ERROR('#3: parseFloat("\\u2028") === Not-a-Number. Actual: ' + (parseFloat("\u2028"))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A2_T9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A2_T9.js deleted file mode 100644 index dd90024c2..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A2_T9.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.3_A2_T9; - * @section: 15.1.2.3; - * @assertion: Operator remove leading StrWhiteSpaceChar; - * @description: StrWhiteSpaceChar :: PS (U+2029); -*/ - -//CHECK#1 -if (parseFloat("\u20291.1") !== parseFloat("1.1")) { - $ERROR('#1: parseFloat("\\u20291.1") === parseFloat("1.1"). Actual: ' + (parseFloat("\u20291.1"))); -} - -//CHECK#2 -if (parseFloat("\u2029\u2029-1.1") !== parseFloat("-1.1")) { - $ERROR('#2: parseFloat("\\u2029\\u2029-1.1") === parseFloat("-1.1"). Actual: ' + (parseFloat("\u2029\u2029-1.1"))); -} - -//CHECK#3 -if (isNaN(parseFloat("\2029")) !== true) { - $ERROR('#3: parseFloat("\\u2029") === Not-a-Number. Actual: ' + (parseFloat("\u2029"))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A3_T1.js deleted file mode 100644 index 5e7bcb81e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A3_T1.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.3_A3_T1; - * @section: 15.1.2.3, 9.3.1; - * @assertion: If neither Result(2) nor any prefix of Result(2) satisfies the syntax of a - * StrDecimalLiteral (see 9.3.1), return NaN; - * @description: parseFloat("some string") return NaN; -*/ - -//CHECK#1 -if (isNaN(parseFloat("str")) !== true) { - $ERROR('#1: parseFloat("str") === Not-a-Number. Actual: ' + (parseFloat("str"))); -} - -//CHECK#2 -if (isNaN(parseFloat("s1")) !== true) { - $ERROR('#2: parseFloat("s1") === Not-a-Number. Actual: ' + (parseFloat("s1"))); -} - -//CHECK#3 -if (isNaN(parseFloat("")) !== true) { - $ERROR('#3: parseFloat("") === Not-a-Number. Actual: ' + (parseFloat(""))); -} - -//CHECK#4 -if (String(parseFloat("str")) !== "NaN") { - $ERROR('#4: String(parseFloat("str")) === "NaN". Actual: ' + (String(parseFloat("str")))); -} - -//CHECK#5 -if (String(parseFloat("s1")) !== "NaN") { - $ERROR('#5: String(parseFloat("s1")) === "NaN". Actual: ' + (String(parseFloat("s1")))); -} - -//CHECK#6 -if (String(parseFloat("")) !== "NaN") { - $ERROR('#6: String(parseFloat("")) === "NaN". Actual: ' + (String(parseFloat("")))); -} - -//CHECK#7 -if (String(parseFloat("+")) !== "NaN") { - $ERROR('#7: String(parseFloat("+")) === "NaN". Actual: ' + (String(parseFloat("+")))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A3_T2.js deleted file mode 100644 index 8e3c91b23..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A3_T2.js +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.3_A3_T2; - * @section: 15.1.2.3, 9.3.1; - * @assertion: If neither Result(2) nor any prefix of Result(2) satisfies the syntax of a - * StrDecimalLiteral (see 9.3.1), return NaN; - * @description: parseFloat("wrong number format with ExponentIndicator") return NaN; -*/ - -//CHECK#1 -if (isNaN(parseFloat("e1")) !== true) { - $ERROR('#1: parseFloat("e1") === Not-a-Number. Actual: ' + (parseFloat("e1"))); -} - -//CHECK#2 -if (isNaN(parseFloat("e-1")) !== true) { - $ERROR('#2: parseFloat("e-1") === Not-a-Number. Actual: ' + (parseFloat("e-1"))); -} - -//CHECK#3 -if (isNaN(parseFloat("E+1")) !== true) { - $ERROR('#3: parseFloat("E+1") === Not-a-Number. Actual: ' + (parseFloat("E+1"))); -} - -//CHECK#4 -if (isNaN(parseFloat("E0")) !== true) { - $ERROR('#4: parseFloat("E0") === Not-a-Number. Actual: ' + (parseFloat("E0"))); -} - -//CHECK#5 -if (String(parseFloat("e1")) !== "NaN") { - $ERROR('#5: String(parseFloat("e1")) === "NaN". Actual: ' + (String(parseFloat("e1")))); -} - -//CHECK#6 -if (String(parseFloat("e-1")) !== "NaN") { - $ERROR('#6: String(parseFloat("e-1")) === "NaN". Actual: ' + (String(parseFloat("e-1")))); -} - -//CHECK#7 -if (String(parseFloat("E+1")) !== "NaN") { - $ERROR('#73: String(parseFloat("E+1")) === "NaN". Actual: ' + (String(parseFloat("E+1")))); -} - -//CHECK#8 -if (String(parseFloat("E0")) !== "NaN") { - $ERROR('#8: String(parseFloat("E0")) === "NaN". Actual: ' + (String(parseFloat("E0")))); -} - -//CHECK#9 -if (isNaN(parseFloat("-.e-1")) !== true) { - $ERROR('#9: parseFloat("-.e-1") === Not-a-Number. Actual: ' + (parseFloat("-.e-1"))); -} - -//CHECK#10 -if (isNaN(parseFloat(".e1")) !== true) { - $ERROR('#10: parseFloat(".e1") === Not-a-Number. Actual: ' + (parseFloat(".e1"))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A3_T3.js deleted file mode 100644 index cfa374acf..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A3_T3.js +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.3_A3_T3; - * @section: 15.1.2.3, 9.3.1; - * @assertion: If neither Result(2) nor any prefix of Result(2) satisfies the syntax of a - * StrDecimalLiteral (see 9.3.1), return NaN; - * @description: parseFloat("wrong numbr format") return NaN; -*/ - -//CHECK#1 -if (isNaN(parseFloat(".x")) !== true) { - $ERROR('#1: parseFloat(".x") === Not-a-Number. Actual: ' + (parseFloat(".x"))); -} - -//CHECK#2 -if (isNaN(parseFloat("+x")) !== true) { - $ERROR('#2: parseFloat("+x") === Not-a-Number. Actual: ' + (parseFloat("+x"))); -} - -//CHECK#3 -if (isNaN(parseFloat("infinity")) !== true) { - $ERROR('#3: parseFloat("infinity") === Not-a-Number. Actual: ' + (parseFloat("infinity"))); -} - -//CHECK#4 -if (isNaN(parseFloat("A")) !== true) { - $ERROR('#4: parseFloat("A") === Not-a-Number. Actual: ' + (parseFloat("A"))); -} - -//CHECK#5 -if (String(parseFloat(".s")) !== "NaN") { - $ERROR('#5: String(parseFloat(".s")) === "NaN". Actual: ' + (String(parseFloat(".s")))); -} - -//CHECK#6 -if (String(parseFloat("+x")) !== "NaN") { - $ERROR('#6: String(parseFloat("+x")) === "NaN". Actual: ' + (String(parseFloat("+x")))); -} - -//CHECK#7 -if (String(parseFloat("infinity")) !== "NaN") { - $ERROR('#73: String(parseFloat("infinity")) === "NaN". Actual: ' + (String(parseFloat("infinity")))); -} - -//CHECK#8 -if (String(parseFloat("A")) !== "NaN") { - $ERROR('#8: String(parseFloat("A")) === "NaN". Actual: ' + (String(parseFloat("A")))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A4_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A4_T1.js deleted file mode 100644 index 70b3f930c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A4_T1.js +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.3_A4_T1; - * @section: 15.1.2.3, 9.3.1; - * @assertion: Compute the longest prefix of Result(2), which might be Result(2) itself, - * which satisfies the syntax of a StrDecimalLiteral; - * @description: Some wrong number; -*/ - -//CHECK#1 -if (parseFloat("0x") !== 0) { - $ERROR('#1: parseFloat("0x") === 0. Actual: ' + (parseFloat("0x"))); -} - -//CHECK#2 -if (parseFloat("11x") !== 11) { - $ERROR('#2: parseFloat("11x") === 11. Actual: ' + (parseFloat("11x"))); -} - -//CHECK#3 -if (parseFloat("11s1") !== 11) { - $ERROR('#3: parseFloat("11s1") === 11. Actual: ' + (parseFloat("11s1"))); -} - -//CHECK#4 -if (parseFloat("11.s1") !== 11) { - $ERROR('#4: parseFloat("11.s1") === 11. Actual: ' + (parseFloat("11.s1"))); -} - -//CHECK#5 -if (parseFloat(".0s1") !== 0) { - $ERROR('#5: parseFloat(".0s1") === 0. Actual: ' + (parseFloat(".0s1"))); -} - -//CHECK#6 -if (parseFloat("1.s1") !== 1) { - $ERROR('#6: parseFloat("1.s1") === 1. Actual: ' + (parseFloat("1.s1"))); -} - -//CHECK#7 -if (parseFloat("1..1") !== 1) { - $ERROR('#7: parseFloat("1..1") === 1. Actual: ' + (parseFloat("1..1"))); -} - -//CHECK#8 -if (parseFloat("0.1.1") !== 0.1) { - $ERROR('#8: parseFloat("0.1.1") === 0.1. Actual: ' + (parseFloat("0.1.1"))); -} - -//CHECK#9 -if (parseFloat("0. 1") !== 0) { - $ERROR('#9: parseFloat("0. 1") === 0. Actual: ' + (parseFloat("0. 1"))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A4_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A4_T2.js deleted file mode 100644 index 612c8197c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A4_T2.js +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.3_A4_T2; - * @section: 15.1.2.3, 9.3.1; - * @assertion: Compute the longest prefix of Result(2), which might be Result(2) itself, - * which satisfies the syntax of a StrDecimalLiteral; - * @description: With ExponentIndicator; -*/ - -//CHECK#1 -if (parseFloat("1ex") !== 1) { - $ERROR('#1: parseFloat("1ex") === 1. Actual: ' + (parseFloat("1ex"))); -} - -//CHECK#2 -if (parseFloat("1e-x") !== 1) { - $ERROR('#2: parseFloat("1e-x") === 1. Actual: ' + (parseFloat("1e-x"))); -} - -//CHECK#3 -if (parseFloat("1e1x") !== 10) { - $ERROR('#3: parseFloat("1e1x") === 10. Actual: ' + (parseFloat("1e1x"))); -} - -//CHECK#4 -if (parseFloat("1e-1x") !== 0.1) { - $ERROR('#4: parseFloat("1e-1x") === 0.1. Actual: ' + (parseFloat("1e-1x"))); -} - -//CHECK#5 -if (parseFloat("0.1e-1x") !== 0.01) { - $ERROR('#5: parseFloat("0.1e-1x") === 0.01. Actual: ' + (parseFloat("0.1e-1x"))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A4_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A4_T3.js deleted file mode 100644 index d24c6e6ad..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A4_T3.js +++ /dev/null @@ -1,90 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.3_A4_T3; - * @section: 15.1.2.3, 9.3.1; - * @assertion: Compute the longest prefix of Result(2), which might be Result(2) itself, - * which satisfies the syntax of a StrDecimalLiteral; - * @description: StrDecimalLiteral not contain HexIntegerLiteral; -*/ - -//CHECK#0 -if (parseFloat("0x0") !== 0) { - $ERROR('#0: parseFloat("0x0") === 0. Actual: ' + (parseFloat("0x0"))); -} - -//CHECK#1 -if (parseFloat("0x1") !== 0) { - $ERROR('#1: parseFloat("0x1") === 0. Actual: ' + (parseFloat("0x1"))); -} - -//CHECK#2 -if (parseFloat("0x2") !== 0) { - $ERROR('#2: parseFloat("0x2") === 0. Actual: ' + (parseFloat("0x2"))); -} - -//CHECK#3 -if (parseFloat("0x3") !== 0) { - $ERROR('#3: parseFloat("0x3") === 0. Actual: ' + (parseFloat("0x3"))); -} - -//CHECK#4 -if (parseFloat("0x4") !== 0) { - $ERROR('#4: parseFloat("0x4") === 0. Actual: ' + (parseFloat("0x4"))); -} - -//CHECK#5 -if (parseFloat("0x5") !== 0) { - $ERROR('#5: parseFloat("0x5") === 0. Actual: ' + (parseFloat("0x5"))); -} - -//CHECK#6 -if (parseFloat("0x6") !== 0) { - $ERROR('#6: parseFloat("0x6") === 0. Actual: ' + (parseFloat("0x6"))); -} - -//CHECK#7 -if (parseFloat("0x7") !== 0) { - $ERROR('#7: parseFloat("0x7") === 0. Actual: ' + (parseFloat("0x7"))); -} - -//CHECK#8 -if (parseFloat("0x8") !== 0) { - $ERROR('#8: parseFloat("0x8") === 0. Actual: ' + (parseFloat("0x8"))); -} - -//CHECK#9 -if (parseFloat("0x9") !== 0) { - $ERROR('#9: parseFloat("0x9") === 0. Actual: ' + (parseFloat("0x9"))); -} - -//CHECK#A -if (parseFloat("0xA") !== 0) { - $ERROR('#A: parseFloat("0xA") === 0. Actual: ' + (parseFloat("0xA"))); -} - -//CHECK#B -if (parseFloat("0xB") !== 0) { - $ERROR('#B: parseFloat("0xB") === 0. Actual: ' + (parseFloat("0xB"))); -} - -//CHECK#C -if (parseFloat("0xC") !== 0) { - $ERROR('#C: parseFloat("0xC") === 0. Actual: ' + (parseFloat("0xC"))); -} - -//CHECK#D -if (parseFloat("0xD") !== 0) { - $ERROR('#D: parseFloat("0xD") === 0. Actual: ' + (parseFloat("0xD"))); -} - -//CHECK#E -if (parseFloat("0xE") !== 0) { - $ERROR('#E: parseFloat("0xE") === 0. Actual: ' + (parseFloat("0xE"))); -} - -//CHECK#F -if (parseFloat("0xF") !== 0) { - $ERROR('#F: parseFloat("0xF") === 0. Actual: ' + (parseFloat("0xF"))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A4_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A4_T4.js deleted file mode 100644 index 19b434f51..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A4_T4.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.3_A4_T4; - * @section: 15.1.2.3, 9.3.1; - * @assertion: Compute the longest prefix of Result(2), which might be Result(2) itself, - * which satisfies the syntax of a StrDecimalLiteral; - * @description: "Infinity"+"some string"; -*/ - -//CHECK#1 -if (parseFloat("Infinity1") !== Number.POSITIVE_INFINITY) { - $ERROR('#1: parseFloat("Infinity1") === Number.POSITIVE_INFINITY. Actual: ' + (parseFloat("Infinity1"))); -} - -//CHECK#2 -if (parseFloat("Infinityx") !== Number.POSITIVE_INFINITY) { - $ERROR('#2: parseFloat("Infinityx") === Number.POSITIVE_INFINITY. Actual: ' + (parseFloat("Infinityx"))); -} - -//CHECK#3 -if (parseFloat("Infinity+1") !== Number.POSITIVE_INFINITY) { - $ERROR('#3: parseFloat("Infinity+1") === Number.POSITIVE_INFINITY. Actual: ' + (parseFloat("Infinity+1"))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A4_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A4_T5.js deleted file mode 100644 index 510df03a4..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A4_T5.js +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.3_A4_T5; - * @section: 15.1.2.3, 9.3.1; - * @assertion: Compute the longest prefix of Result(2), which might be Result(2) itself, - * which satisfies the syntax of a StrDecimalLiteral; - * @description: Checking DecimalDigits . DecimalDigits_opt ExponentPart_opt; -*/ - -//CHECK#1 -if (parseFloat("-11.string") !== -11) { - $ERROR('#1: parseFloat("-11.string") === -11. Actual: ' + (parseFloat("-11.string"))); -} - -//CHECK#2 -if (parseFloat("01.string") !== 1) { - $ERROR('#2: parseFloat("01.string") === 1. Actual: ' + (parseFloat("01.string"))); -} - -//CHECK#3 -if (parseFloat("+11.1string") !== 11.1) { - $ERROR('#3: parseFloat("+11.1string") === 11.1. Actual: ' + (parseFloat("+11.1string"))); -} - -//CHECK#4 -if (parseFloat("01.1string") !== 1.1) { - $ERROR('#4: parseFloat("01.1string") === 1.1. Actual: ' + (parseFloat("01.1string"))); -} - -//CHECK#5 -if (parseFloat("-11.e-1string") !== -1.1) { - $ERROR('#5: parseFloat("-11.e-1string") === -1.1. Actual: ' + (parseFloat("-11.e-1string"))); -} - -//CHECK#6 -if (parseFloat("01.e1string") !== 10) { - $ERROR('#6: parseFloat("01.e1string") === 10. Actual: ' + (parseFloat("01.e1string"))); -} - -//CHECK#7 -if (parseFloat("+11.22e-1string") !== 1.122) { - $ERROR('#7: parseFloat("+11.22e-1string") === 1.122. Actual: ' + (parseFloat("+11.22e-1string"))); -} - -//CHECK#8 -if (parseFloat("01.01e1string") !== 10.1) { - $ERROR('#8: parseFloat("01.01e1string") === 10.1. Actual: ' + (parseFloat("01.01e1string"))); -} - -//CHECK#9 -if (parseFloat("001.string") !== 1) { - $ERROR('#9: parseFloat("001.string") === 1. Actual: ' + (parseFloat("001.string"))); -} - -//CHECK#10 -if (parseFloat("010.string") !== 10) { - $ERROR('#10: parseFloat("010.string") === 10. Actual: ' + (parseFloat("010.string"))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A4_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A4_T6.js deleted file mode 100644 index d707c8e0a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A4_T6.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.3_A4_T6; - * @section: 15.1.2.3, 9.3.1; - * @assertion: Compute the longest prefix of Result(2), which might be Result(2) itself, - * which satisfies the syntax of a StrDecimalLiteral; - * @description: Checking . DecimalDigits ExponentPart_opt; -*/ - - -//CHECK#1 -if (parseFloat("+.1string") !== 0.1) { - $ERROR('#1: parseFloat("+.1string") === 0.1. Actual: ' + (parseFloat("+.1string"))); -} - -//CHECK#2 -if (parseFloat(".01string") !== 0.01) { - $ERROR('#2: parseFloat(".01string") === 0.01. Actual: ' + (parseFloat(".01string"))); -} - -//CHECK#3 -if (parseFloat("+.22e-1string") !== 0.022) { - $ERROR('#3: parseFloat("+.22e-1string") === 0.022. Actual: ' + (parseFloat("+.22e-1string"))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A4_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A4_T7.js deleted file mode 100644 index bd2e9a62b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A4_T7.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.3_A4_T7; - * @section: 15.1.2.3, 9.3.1; - * @assertion: Compute the longest prefix of Result(2), which might be Result(2) itself, - * which satisfies the syntax of a StrDecimalLiteral; - * @description: Checking DecimalDigits ExponentPart_opt; -*/ - -//CHECK#1 -if (parseFloat("-11string") !== -11) { - $ERROR('#1: parseFloat("-11string") === -11. Actual: ' + (parseFloat("-11string"))); -} - -//CHECK#2 -if (parseFloat("01string") !== 1) { - $ERROR('#2: parseFloat("01string") === 1. Actual: ' + (parseFloat("01string"))); -} - -//CHECK#3 -if (parseFloat("-11e-1string") !== -1.1) { - $ERROR('#3: parseFloat("-11e-1string") === -1.1. Actual: ' + (parseFloat("-11e-1string"))); -} - -//CHECK#4 -if (parseFloat("01e1string") !== 10) { - $ERROR('#4: parseFloat("01e1string") === 10. Actual: ' + (parseFloat("01e1string"))); -} - -//CHECK#5 -if (parseFloat("001string") !== 1) { - $ERROR('#5: parseFloat("001string") === 1. Actual: ' + (parseFloat("001string"))); -} - -//CHECK#6 -if (parseFloat("1e001string") !== 10) { - $ERROR('#6: parseFloat("1e001string") === 10. Actual: ' + (parseFloat("1e001string"))); -} - -//CHECK#7 -if (parseFloat("010string") !== 10) { - $ERROR('#7: parseFloat("010string") === 10. Actual: ' + (parseFloat("010string"))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A5_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A5_T1.js deleted file mode 100644 index 3e526bbf3..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A5_T1.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.3_A5_T1; - * @section: 15.1.2.3, 9.3.1; - * @assertion: Return the number value for the MV of Result(4); - * @description: Checking Infinity; -*/ - -//CHECK#1 -if (parseFloat("Infinity") !== Number.POSITIVE_INFINITY) { - $ERROR('#1: parseFloat("Infinity") === Number.POSITIVE_INFINITY. Actual: ' + (parseFloat("Infinity"))); -} - -//CHECK#2 -if (parseFloat("+Infinity") !== Number.POSITIVE_INFINITY) { - $ERROR('#2: parseFloat("+Infinity") === Number.POSITIVE_INFINITY. Actual: ' + (parseFloat("+Infinity"))); -} - -//CHECK#3 -if (parseFloat("-Infinity") !== Number.NEGATIVE_INFINITY) { - $ERROR('#3: parseFloat("-Infinity") === Number.NEGATIVE_INFINITY. Actual: ' + (parseFloat("-Infinity"))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A5_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A5_T2.js deleted file mode 100644 index d7b94c3c8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A5_T2.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.3_A5_T2; - * @section: 15.1.2.3, 9.3.1; - * @assertion: Return the number value for the MV of Result(4); - * @description: Checking DecimalDigits . DecimalDigits_opt ExponentPart_opt; -*/ - -//CHECK#1 -if (parseFloat("-11.") !== -11) { - $ERROR('#1: parseFloat("-11.") === -11. Actual: ' + (parseFloat("-11."))); -} - -//CHECK#2 -if (parseFloat("01.") !== 1) { - $ERROR('#2: parseFloat("01.") === 1. Actual: ' + (parseFloat("01."))); -} - -//CHECK#3 -if (parseFloat("+11.1") !== 11.1) { - $ERROR('#3: parseFloat("+11.1") === 11.1. Actual: ' + (parseFloat("+11.1"))); -} - -//CHECK#4 -if (parseFloat("01.1") !== 1.1) { - $ERROR('#4: parseFloat("01.1") === 1.1. Actual: ' + (parseFloat("01.1"))); -} - -//CHECK#5 -if (parseFloat("-11.e-1") !== -1.1) { - $ERROR('#5: parseFloat("-11.e-1") === -1.1. Actual: ' + (parseFloat("-11.e-1"))); -} - -//CHECK#6 -if (parseFloat("01.e1") !== 10) { - $ERROR('#6: parseFloat("01.e1") === 10. Actual: ' + (parseFloat("01.e1"))); -} - -//CHECK#7 -if (parseFloat("+11.22e-1") !== 1.122) { - $ERROR('#7: parseFloat("+11.22e-1") === 1.122. Actual: ' + (parseFloat("+11.22e-1"))); -} - -//CHECK#8 -if (parseFloat("01.01e1") !== 10.1) { - $ERROR('#8: parseFloat("01.01e1") === 10.1. Actual: ' + (parseFloat("01.01e1"))); -} - -//CHECK#9 -if (parseFloat("001.") !== 1) { - $ERROR('#9: parseFloat("001.") === 1. Actual: ' + (parseFloat("001."))); -} - -//CHECK#10 -if (parseFloat("010.") !== 10) { - $ERROR('#10: parseFloat("010.") === 10. Actual: ' + (parseFloat("010."))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A5_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A5_T3.js deleted file mode 100644 index a6629049a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A5_T3.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.3_A5_T3; - * @section: 15.1.2.3, 9.3.1; - * @assertion: Return the number value for the MV of Result(4); - * @description: Checking . DecimalDigits ExponentPart_opt; -*/ - - -//CHECK#1 -if (parseFloat("+.1") !== 0.1) { - $ERROR('#1: parseFloat("+.1") === 0.1. Actual: ' + (parseFloat("+.1"))); -} - -//CHECK#2 -if (parseFloat(".01") !== 0.01) { - $ERROR('#2: parseFloat(".01") === 0.01. Actual: ' + (parseFloat(".01"))); -} - -//CHECK#3 -if (parseFloat("+.22e-1") !== 0.022) { - $ERROR('#3: parseFloat("+.22e-1") === 0.022. Actual: ' + (parseFloat("+.22e-1"))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A5_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A5_T4.js deleted file mode 100644 index b0fef7c1c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A5_T4.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.3_A5_T4; - * @section: 15.1.2.3, 9.3.1; - * @assertion: Return the number value for the MV of Result(4); - * @description: Checking DecimalDigits ExponentPart_opt; -*/ - -//CHECK#1 -if (parseFloat("-11") !== -11) { - $ERROR('#1: parseFloat("-11") === -11. Actual: ' + (parseFloat("-11"))); -} - -//CHECK#2 -if (parseFloat("01") !== 1) { - $ERROR('#2: parseFloat("01") === 1. Actual: ' + (parseFloat("01"))); -} - -//CHECK#3 -if (parseFloat("-11e-1") !== -1.1) { - $ERROR('#3: parseFloat("-11e-1") === -1.1. Actual: ' + (parseFloat("-11e-1"))); -} - -//CHECK#4 -if (parseFloat("01e1") !== 10) { - $ERROR('#4: parseFloat("01e1") === 10. Actual: ' + (parseFloat("01e1"))); -} - -//CHECK#5 -if (parseFloat("001") !== 1) { - $ERROR('#5: parseFloat("001") === 1. Actual: ' + (parseFloat("001"))); -} - -//CHECK#6 -if (parseFloat("1e001") !== 10) { - $ERROR('#6: parseFloat("1e001") === 10. Actual: ' + (parseFloat("1e001"))); -} - -//CHECK#7 -if (parseFloat("010") !== 10) { - $ERROR('#7: parseFloat("010") === 10. Actual: ' + (parseFloat("010"))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A6.js deleted file mode 100644 index 03131f3f3..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A6.js +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.3_A6; - * @section: 15.1.2.3, 9.3.1; - * @assertion: parseFloat may interpret only a leading portion of the string as - * a number value; it ignores any characters that cannot be interpreted as part - * of the notation of an decimal literal, and no indication is given that any such - * characters were ignored. - * @description: Complex test without eval; -*/ - -//CHECK -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; -for (index = 0; index <= 65535; index++) { - if ((index < 0x0030) || (index > 0x0039)) { - var hex = decimalToHexString(index); - if (parseFloat("0.1e1" + String.fromCharCode(index)) !== 1) { - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A7.1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A7.1.js deleted file mode 100644 index e7edfe19d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A7.1.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.3_A7.1; - * @section: 15.1.2.3, 15.2.4.7, 12.6.4; - * @assertion: The length property of parseFloat has the attribute DontEnum; - * @description: Checking use propertyIsEnumerable, for-in; -*/ - - -//CHECK#1 -if (parseFloat.propertyIsEnumerable('length') !== false) { - $ERROR('#1: parseFloat.propertyIsEnumerable(\'length\') === false. Actual: ' + (parseFloat.propertyIsEnumerable('length'))); -} - -//CHECK#2 -result = true; -for (p in parseFloat){ - if (p === "length") { - result = false; - } -} - -if (result !== true) { - $ERROR('#2: result = true; for (p in parseFloat) { if (p === "length") result = false; } result === true;'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A7.2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A7.2.js deleted file mode 100644 index 05483d095..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A7.2.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.3_A7.2; - * @section: 15.1.2.3, 15.2.4.5, 11.4.1; - * @assertion: The length property of parseFloat has the attribute DontDelete; - * @description: Checking use hasOwnProperty, delete; -*/ - -//CHECK#1 -if (parseFloat.hasOwnProperty('length') !== true) { - $FAIL('#1: parseFloat.hasOwnProperty(\'length\') === true. Actual: ' + (parseFloat.hasOwnProperty('length'))); -} - -delete parseFloat.length; - -//CHECK#2 -if (parseFloat.hasOwnProperty('length') !== true) { - $ERROR('#2: delete parseFloat.length; parseFloat.hasOwnProperty(\'length\') === true. Actual: ' + (parseFloat.hasOwnProperty('length'))); -} - -//CHECK#3 -if (parseFloat.length === undefined) { - $ERROR('#3: delete parseFloat.length; parseFloat.length !== undefined'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A7.3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A7.3.js deleted file mode 100644 index 7d5cf82c0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A7.3.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.3_A7.3; - * @section: 15.1.2.3; - * @assertion: The length property of parseFloat has the attribute ReadOnly; - * @description: Checking if varying the length property fails; -*/ - -//CHECK#1 -x = parseFloat.length; -parseFloat.length = Infinity; -if (parseFloat.length !== x) { - $ERROR('#1: x = parseFloat.length; parseFloat.length = Infinity; parseFloat.length === x. Actual: ' + (parseFloat.length)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A7.4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A7.4.js deleted file mode 100644 index b955f7127..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A7.4.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.3_A7.4; - * @section: 15.1.2.3; - * @assertion: The length property of parseFloat is 1; - * @description: parseFloat.length === 1; -*/ - -//CHECK#1 -if (parseFloat.length !== 1) { - $ERROR('#1: parseFloat.length === 1. Actual: ' + (parseFloat.length)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A7.5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A7.5.js deleted file mode 100644 index 7a3fc0aa3..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A7.5.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.3_A7.5; - * @section: 15.1.2.3, 15.2.4.7, 12.6.4; - * @assertion: The parseFloat property has the attribute DontEnum; - * @description: Checking use propertyIsEnumerable, for-in; -*/ - - -//CHECK#1 -if (this.propertyIsEnumerable('parseFloat') !== false) { - $ERROR('#1:this.propertyIsEnumerable(\'parseFloat\') === false. Actual: ' + (this.propertyIsEnumerable('parseFloat'))); -} - -//CHECK#2 -result = true; -for (p in this){ - if (p === "parseFloat") { - result = false; - } -} - -if (result !== true) { - $ERROR('#2: result = true; for (p in this) { if (p === "parseFloat") result = false; } result === true;'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A7.6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A7.6.js deleted file mode 100644 index 192650f8b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A7.6.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.1.2.3_A7.6; -* @section: 15.1.2.3; -* @assertion: The parseFloat property has not prototype property; -* @description: Checking parseFloat.prototype; -*/ - -//CHECK#1 -if (parseFloat.prototype !== undefined) { - $ERROR('#1: parseFloat.prototype === undefined. Actual: ' + (parseFloat.prototype)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A7.7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A7.7.js deleted file mode 100644 index e3d902adc..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.3_parseFloat/S15.1.2.3_A7.7.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.1.2.3_A7.7; -* @section: 15.1.2.3, 11.2.2; -* @assertion: The parseFloat property can't be used as constructor; -* @description: If property does not implement the internal [[Construct]] method, throw a TypeError exception; -*/ - -//CHECK#1 - -try { - new parseFloat(); - $ERROR('#1.1: new parseFloat() throw TypeError. Actual: ' + (new parseFloat())); -} catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1.2: new parseFloat() throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.4_isNaN/S15.1.2.4_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.4_isNaN/S15.1.2.4_A1_T1.js deleted file mode 100644 index b426c645e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.4_isNaN/S15.1.2.4_A1_T1.js +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.4_A1_T1; - * @section: 15.1.2.4; - * @assertion: isNaN applies ToNumber to its argument, then return true if the result is NaN, and otherwise return false; - * @description: Checking all primitive; -*/ - -// CHECK#1 -if (!(isNaN(NaN) === true)) { - $ERROR('#1: NaN === Not-a-Number. Actual: ' + (NaN)); -} - -// CHECK#2 -if (!(isNaN(Number.NaN) === true)) { - $ERROR('#2: Number.NaN === Not-a-Number. Actual: ' + (Number.NaN)); -} - -// CHECK#3 -if (!(isNaN(Number(void 0)) === true)) { - $ERROR('#3: Number(void 0) === Not-a-Number. Actual: ' + (Number(void 0))); -} - -// CHECK#4 -if (!(isNaN(void 0) === true)) { - $ERROR('#4: void 0 === Not-a-Number. Actual: ' + (void 0)); -} - -// CHECK#5 -if (!(isNaN("string") === true)) { - $ERROR('#5: "string" === Not-a-Number. Actual: ' + ("string")); -} - -// CHECK#6 -if (isNaN(Number.POSITIVE_INFINITY) === true) { - $ERROR('#6: Number.POSITIVE_INFINITY !== Not-a-Number'); -} - -// CHECK#7 -if (isNaN(Number.NEGATIVE_INFINITY) === true) { - $ERROR('#7: Number.NEGATIVE_INFINITY !== Not-a-Number'); -} - -// CHECK#8 -if (isNaN(Number.MAX_VALUE) === true) { - $ERROR('#8: Number.MAX_VALUE !== Not-a-Number'); -} - -// CHECK#9 -if (isNaN(Number.MIN_VALUE) === true) { - $ERROR('#9: Number.MIN_VALUE !== Not-a-Number'); -} - -// CHECK#10 -if (isNaN(-0) === true) { - $ERROR('#10: -0 !== Not-a-Number'); -} - -// CHECK#11 -if (isNaN(true) === true) { - $ERROR('#11: true !== Not-a-Number'); -} - -// CHECK#12 -if (isNaN("1") === true) { - $ERROR('#12: "1" !== Not-a-Number'); -} - - - - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.4_isNaN/S15.1.2.4_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.4_isNaN/S15.1.2.4_A1_T2.js deleted file mode 100644 index 6be2762bf..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.4_isNaN/S15.1.2.4_A1_T2.js +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.4_A1_T2; - * @section: 15.1.2.4; - * @assertion: isNaN applies ToNumber to its argument, then return true if the result is NaN, and otherwise return false; - * @description: Checking all object; -*/ - -// CHECK#1 -if (!(isNaN({}) === true)) { - $ERROR('#1: {} === Not-a-Number. Actual: ' + ({})); -} - -// CHECK#2 -if (!(isNaN(new String("string")) === true)) { - $ERROR('#2: new String("string") === Not-a-Number. Actual: ' + (new String("string"))); -} - -// CHECK#3 -if (isNaN(new String("1")) === true) { - $ERROR('#3: new String("1") === Not-a-Number. Actual: ' + (new String("1"))); -} - -// CHECK#4 -if (isNaN(new Number(1)) === true) { - $ERROR('#4: new Number(1) !== Not-a-Number'); -} - -// CHECK#5 -if (!(isNaN(new Number(NaN)) === true)) { - $ERROR('#5: new Number(NaN) === Not-a-Number. Actual: ' + (new Number(NaN))); -} - -// CHECK#6 -if (isNaN(new Boolean(true)) === true) { - $ERROR('#6: new Boolean(true) !== Not-a-Number'); -} - - - - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.4_isNaN/S15.1.2.4_A2.1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.4_isNaN/S15.1.2.4_A2.1.js deleted file mode 100644 index b555f153a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.4_isNaN/S15.1.2.4_A2.1.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.4_A2.1; - * @section: 15.1.2.4, 15.2.4.7, 12.6.4; - * @assertion: The length property of isNaN has the attribute DontEnum; - * @description: Checking use propertyIsEnumerable, for-in; -*/ - - -//CHECK#1 -if (isNaN.propertyIsEnumerable('length') !== false) { - $ERROR('#1: isNaN.propertyIsEnumerable(\'length\') === false. Actual: ' + (isNaN.propertyIsEnumerable('length'))); -} - -//CHECK#2 -result = true; -for (p in isNaN){ - if (p === "length") { - result = false; - } -} - -if (result !== true) { - $ERROR('#2: result = true; for (p in isNaN) { if (p === "length") result = false; } result === true;'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.4_isNaN/S15.1.2.4_A2.2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.4_isNaN/S15.1.2.4_A2.2.js deleted file mode 100644 index 2b98e254b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.4_isNaN/S15.1.2.4_A2.2.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.4_A2.2; - * @section: 15.1.2.4, 15.2.4.5, 11.4.1; - * @assertion: The length property of isNaN has the attribute DontDelete; - * @description: Checking use hasOwnProperty, delete; -*/ - -//CHECK#1 -if (isNaN.hasOwnProperty('length') !== true) { - $FAIL('#1: isNaN.hasOwnProperty(\'length\') === true. Actual: ' + (isNaN.hasOwnProperty('length'))); -} - -delete isNaN.length; - -//CHECK#2 -if (isNaN.hasOwnProperty('length') !== true) { - $ERROR('#2: delete isNaN.length; isNaN.hasOwnProperty(\'length\') === true. Actual: ' + (isNaN.hasOwnProperty('length'))); -} - -//CHECK#3 -if (isNaN.length === undefined) { - $ERROR('#3: delete isNaN.length; isNaN.length !== undefined'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.4_isNaN/S15.1.2.4_A2.3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.4_isNaN/S15.1.2.4_A2.3.js deleted file mode 100644 index 524d8a36e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.4_isNaN/S15.1.2.4_A2.3.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.4_A2.3; - * @section: 15.1.2.4; - * @assertion: The length property of isNaN has the attribute ReadOnly; - * @description: Checking if varying the length property fails; -*/ - -//CHECK#1 -x = isNaN.length; -isNaN.length = Infinity; -if (isNaN.length !== x) { - $ERROR('#1: x = isNaN.length; isNaN.length = Infinity; isNaN.length === x. Actual: ' + (isNaN.length)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.4_isNaN/S15.1.2.4_A2.4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.4_isNaN/S15.1.2.4_A2.4.js deleted file mode 100644 index 48af19758..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.4_isNaN/S15.1.2.4_A2.4.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.4_A2.4; - * @section: 15.1.2.4; - * @assertion: The length property of isNaN is 1; - * @description: isNaN.length === 1; -*/ - -//CHECK#1 -if (isNaN.length !== 1) { - $ERROR('#1: isNaN.length === 1. Actual: ' + (isNaN.length)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.4_isNaN/S15.1.2.4_A2.5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.4_isNaN/S15.1.2.4_A2.5.js deleted file mode 100644 index 568de65da..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.4_isNaN/S15.1.2.4_A2.5.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.4_A2.5; - * @section: 15.1.2.4, 15.2.4.7, 12.6.4; - * @assertion: The isNaN property has the attribute DontEnum; - * @description: Checking use propertyIsEnumerable, for-in; -*/ - - -//CHECK#1 -if (this.propertyIsEnumerable('isNaN') !== false) { - $ERROR('#1: this.propertyIsEnumerable(\'isNaN\') === false. Actual: ' + (this.propertyIsEnumerable('isNaN'))); -} - -//CHECK#2 -result = true; -for (p in this){ - if (p === "isNaN") { - result = false; - } -} - -if (result !== true) { - $ERROR('#2: result = true; for (p in this) { if (p === "isNaN") result = false; } result === true;'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.4_isNaN/S15.1.2.4_A2.6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.4_isNaN/S15.1.2.4_A2.6.js deleted file mode 100644 index f1595ffb7..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.4_isNaN/S15.1.2.4_A2.6.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.1.2.4_A2.6; -* @section: 15.1.2.4; -* @assertion: The isNaN property has not prototype property; -* @description: Checking isNaN.prototype; -*/ - -//CHECK#1 -if (isNaN.prototype !== undefined) { - $ERROR('#1: isNaN.prototype === undefined. Actual: ' + (isNaN.prototype)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.4_isNaN/S15.1.2.4_A2.7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.4_isNaN/S15.1.2.4_A2.7.js deleted file mode 100644 index 844d8db5c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.4_isNaN/S15.1.2.4_A2.7.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.1.2.4_A2.7; -* @section: 15.1.2.4, 11.2.2; -* @assertion: The isNaN property can't be used as constructor; -* @description: If property does not implement the internal [[Construct]] method, throw a TypeError exception; -*/ - -//CHECK#1 - -try { - new isNaN(); - $ERROR('#1.1: new isNaN() throw TypeError. Actual: ' + (new isNaN())); -} catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1.2: new isNaN() throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.5_isFinite/S15.1.2.5_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.5_isFinite/S15.1.2.5_A1_T1.js deleted file mode 100644 index 3c7a0744c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.5_isFinite/S15.1.2.5_A1_T1.js +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.5_A1_T1; - * @section: 15.1.2.5; - * @assertion: isFinite applies ToNumber to its argument, then return false if the result is NaN, +Infinity, -Infinity, and otherwise return true; - * @description: Checking all primitive; -*/ - -// CHECK#1 -if (!(isFinite(NaN) === false)) { - $ERROR('#1: NaN === Not-a-Finite. Actual: ' + (NaN)); -} - -// CHECK#2 -if (!(isFinite(Number.NaN) === false)) { - $ERROR('#2: Number.NaN === Not-a-Finite. Actual: ' + (Number.NaN)); -} - -// CHECK#3 -if (!(isFinite(Number(void 0)) === false)) { - $ERROR('#3: Number(void 0) === Not-a-Finite. Actual: ' + (Number(void 0))); -} - -// CHECK#4 -if (!(isFinite(void 0) === false)) { - $ERROR('#4: void 0 === Not-a-Finite. Actual: ' + (void 0)); -} - -// CHECK#5 -if (!(isFinite("string") === false)) { - $ERROR('#5: "string" === Not-a-Finite. Actual: ' + ("string")); -} - -// CHECK#6 -if (isFinite(Number.POSITIVE_INFINITY) !== false) { - $ERROR('#6: Number.POSITIVE_INFINITY === Not-a-Finite. Actual: ' + (Number.POSITIVE_INFINITY)); -} - -// CHECK#7 -if (isFinite(Number.NEGATIVE_INFINITY) !== false) { - $ERROR('#7: Number.NEGATIVE_INFINITY === Not-a-Finite. Actual: ' + (Number.NEGATIVE_INFINITY)); -} - -// CHECK#8 -if (isFinite(Number.MAX_VALUE) === false) { - $ERROR('#8: Number.MAX_VALUE !== Not-a-Finite'); -} - -// CHECK#9 -if (isFinite(Number.MIN_VALUE) === false) { - $ERROR('#9: Number.MIN_VALUE !== Not-a-Finite'); -} - -// CHECK#10 -if (isFinite(-0) === false) { - $ERROR('#10: -0 !== Not-a-Finite'); -} - -// CHECK#11 -if (isFinite(false) === false) { - $ERROR('#11: false !== Not-a-Finite'); -} - -// CHECK#12 -if (isFinite("1") === false) { - $ERROR('#12: "1" !== Not-a-Finite'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.5_isFinite/S15.1.2.5_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.5_isFinite/S15.1.2.5_A1_T2.js deleted file mode 100644 index 9d47f118d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.5_isFinite/S15.1.2.5_A1_T2.js +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.5_A1_T2; - * @section: 15.1.2.5; - * @assertion: isFinite applies ToNumber to its argument, then return false if the result is NaN, +Infinity, -Infinity, and otherwise return true; - * @description: Checking all object; -*/ - -// CHECK#1 -if (!(isFinite({}) === false)) { - $ERROR('#1: {} === Not-a-Finite. Actual: ' + ({})); -} - -// CHECK#2 -if (!(isFinite(new String("string")) === false)) { - $ERROR('#2: new String("string") === Not-a-Finite. Actual: ' + (new String("string"))); -} - -// CHECK#3 -if (isFinite(new String("1")) === false) { - $ERROR('#3: new String("1") === Not-a-Finite. Actual: ' + (new String("1"))); -} - -// CHECK#4 -if (isFinite(new Number(1)) === false) { - $ERROR('#4: new Number(1) !== Not-a-Finite'); -} - -// CHECK#5 -if (!(isFinite(new Number(NaN)) === false)) { - $ERROR('#5: new Number(NaN) === Not-a-Finite. Actual: ' + (new Number(NaN))); -} - -// CHECK#6 -if (isFinite(new Boolean(true)) === false) { - $ERROR('#6: new Boolean(true) !== Not-a-Finite'); -} - - - - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.5_isFinite/S15.1.2.5_A2.1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.5_isFinite/S15.1.2.5_A2.1.js deleted file mode 100644 index e9519ae44..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.5_isFinite/S15.1.2.5_A2.1.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.5_A2.1; - * @section: 15.1.2.5, 15.2.4.7, 12.6.4; - * @assertion: The length property of isFinite has the attribute DontEnum; - * @description: Checking use propertyIsEnumerable, for-in; -*/ - - -//CHECK#1 -if (isFinite.propertyIsEnumerable('length') !== false) { - $ERROR('#1: isFinite.propertyIsEnumerable(\'length\') === false. Actual: ' + (isFinite.propertyIsEnumerable('length'))); -} - -//CHECK#2 -result = true; -for (p in isFinite){ - if (p === "length") { - result = false; - } -} - -if (result !== true) { - $ERROR('#2: result = true; for (p in isFinite) { if (p === "length") result = false; } result === true;'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.5_isFinite/S15.1.2.5_A2.2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.5_isFinite/S15.1.2.5_A2.2.js deleted file mode 100644 index b9a97d114..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.5_isFinite/S15.1.2.5_A2.2.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.5_A2.2; - * @section: 15.1.2.5, 15.2.4.5, 11.4.1; - * @assertion: The length property of isFinite has the attribute DontDelete; - * @description: Checking use hasOwnProperty, delete; -*/ - -//CHECK#1 -if (isFinite.hasOwnProperty('length') !== true) { - $FAIL('#1: isFinite.hasOwnProperty(\'length\') === true. Actual: ' + (isFinite.hasOwnProperty('length'))); -} - -delete isFinite.length; - -//CHECK#2 -if (isFinite.hasOwnProperty('length') !== true) { - $ERROR('#2: delete isFinite.length; isFinite.hasOwnProperty(\'length\') === true. Actual: ' + (isFinite.hasOwnProperty('length'))); -} - -//CHECK#3 -if (isFinite.length === undefined) { - $ERROR('#3: delete isFinite.length; isFinite.length !== undefined'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.5_isFinite/S15.1.2.5_A2.3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.5_isFinite/S15.1.2.5_A2.3.js deleted file mode 100644 index d5616d023..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.5_isFinite/S15.1.2.5_A2.3.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.5_A2.3; - * @section: 15.1.2.5; - * @assertion: The length property of isFinite has the attribute ReadOnly; - * @description: Checking if varying the length property fails; -*/ - -//CHECK#1 -x = isFinite.length; -isFinite.length = Infinity; -if (isFinite.length !== x) { - $ERROR('#1: x = isFinite.length; isFinite.length = Infinity; isFinite.length === x. Actual: ' + (isFinite.length)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.5_isFinite/S15.1.2.5_A2.4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.5_isFinite/S15.1.2.5_A2.4.js deleted file mode 100644 index 73d9fcda0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.5_isFinite/S15.1.2.5_A2.4.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.5_A2.4; - * @section: 15.1.2.5; - * @assertion: The length property of isFinite is 1; - * @description: isFinite.length === 1; -*/ - -//CHECK#1 -if (isFinite.length !== 1) { - $ERROR('#1: isFinite.length === 1. Actual: ' + (isFinite.length)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.5_isFinite/S15.1.2.5_A2.5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.5_isFinite/S15.1.2.5_A2.5.js deleted file mode 100644 index 7aed7db33..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.5_isFinite/S15.1.2.5_A2.5.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.5_A2.5; - * @section: 15.1.2.5, 15.2.4.7, 12.6.4; - * @assertion: The isFinite property has the attribute DontEnum; - * @description: Checking use propertyIsEnumerable, for-in; -*/ - - -//CHECK#1 -if (this.propertyIsEnumerable('isFinite') !== false) { - $ERROR('#1: this.propertyIsEnumerable(\'isFinite\') === false. Actual: ' + (this.propertyIsEnumerable('isFinite'))); -} - -//CHECK#2 -result = true; -for (p in this){ - if (p === "isFinite") { - result = false; - } -} - -if (result !== true) { - $ERROR('#2: result = true; for (p in this) { if (p === "isFinite") result = false; } result === true;'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.5_isFinite/S15.1.2.5_A2.6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.5_isFinite/S15.1.2.5_A2.6.js deleted file mode 100644 index 15e691b3f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.5_isFinite/S15.1.2.5_A2.6.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.1.2.5_A2.6; -* @section: 15.1.2.5; -* @assertion: The isFinite property has not prototype property; -* @description: Checking isFinit.prototype; -*/ - -//CHECK#1 -if (isFinite.prototype !== undefined) { - $ERROR('#1: isFinite.prototype === undefined. Actual: ' + (isFinite.prototype)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.5_isFinite/S15.1.2.5_A2.7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.5_isFinite/S15.1.2.5_A2.7.js deleted file mode 100644 index 43519bd6a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.2_Function_Properties_of_the_Global_Object/15.1.2.5_isFinite/S15.1.2.5_A2.7.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.1.2.5_A2.7; -* @section: 15.1.2.5, 11.2.2; -* @assertion: The isFinite property can't be used as constructor; -* @description: If property does not implement the internal [[Construct]] method, throw a TypeError exception; -*/ - -//CHECK#1 - -try { - new isFinite(); - $ERROR('#1.1: new isFinite() throw TypeError. Actual: ' + (new isFinite())); -} catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1.2: new isFinite() throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.10_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.10_T1.js deleted file mode 100644 index 392fbf3f9..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.10_T1.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.1_A1.10_T1; - * @section: 15.1.3.1; - * @assertion: If B = 110xxxxx (n = 2) and string.charAt(k + 4) and - * string.charAt(k + 5) do not represent hexadecimal digits, throw URIError; - * @description: Complex tests; -*/ - -//CHECK -result = true; -var interval = [[0x00, 0x29], [0x40,0x40], [0x47, 0x60], [0x67, 0xFFFF]]; -for (indexI = 0; indexI < interval.length; indexI++) { - for (indexJ = interval[indexI][0]; indexJ <= interval[indexI][1]; indexJ++) { - try { - decodeURI("%C0%" + String.fromCharCode(indexJ, indexJ)); - result = false; - } catch (e) { - if ((e instanceof URIError) !== true) { - result = false; - } - } - } -} - -if (result !== true) { - $ERROR('#1: If B = 110xxxxx (n = 2) and (string.charAt(k + 4) and string.charAt(k + 5)) do not represent hexadecimal digits, throw URIError'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.11_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.11_T1.js deleted file mode 100644 index 9a7dd821c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.11_T1.js +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.1_A1.11_T1; - * @section: 15.1.3.1; - * @assertion: If B = 1110xxxx (n = 3) and (string.charAt(k + 4) and - * string.charAt(k + 5)) or (string.charAt(k + 7) and - * string.charAt(k + 8)) do not represent hexadecimal digits, throw URIError; - * @description: Complex tests, string.charAt(k + 4) and string.charAt(k + 5) - * do not represent hexadecimal digits; -*/ - -//CHECK -result = true; -var interval = [[0x00, 0x29], [0x40,0x40], [0x47, 0x60], [0x67, 0xFFFF]]; -for (indexI = 0; indexI < interval.length; indexI++) { - for (indexJ = interval[indexI][0]; indexJ <= interval[indexI][1]; indexJ++) { - try { - decodeURI("%E0%" + String.fromCharCode(indexJ, indexJ) + "%A0"); - result = false; - } catch (e) { - if ((e instanceof URIError) !== true) { - result = false; - } - } - } -} - -if (result !== true) { - $ERROR('#1: If B = 1110xxxx (n = 3) and (string.charAt(k + 4) and string.charAt(k + 5)) do not represent hexadecimal digits, throw URIError'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.11_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.11_T2.js deleted file mode 100644 index faf77b6f9..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.11_T2.js +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.1_A1.11_T2; - * @section: 15.1.3.1; - * @assertion: If B = 1110xxxx (n = 3) and (string.charAt(k + 4) and - * string.charAt(k + 5)) or (string.charAt(k + 7) and - * string.charAt(k + 8)) do not represent hexadecimal digits, throw URIError; - * @description: Complex tests, string.charAt(k + 7) and string.charAt(k + 8) - * do not represent hexadecimal digits; -*/ - -//CHECK -result = true; -var interval = [[0x00, 0x29], [0x40,0x40], [0x47, 0x60], [0x67, 0xFFFF]]; -for (indexI = 0; indexI < interval.length; indexI++) { - for (indexJ = interval[indexI][0]; indexJ <= interval[indexI][1]; indexJ++) { - try { - decodeURI("%E0%" + "%A0" + String.fromCharCode(indexJ, indexJ)); - result = false; - } catch (e) { - if ((e instanceof URIError) !== true) { - result = false; - } - } - } -} - -if (result !== true) { - $ERROR('#1: If B = 1110xxxx (n = 3) and (string.charAt(k + 7) and string.charAt(k + 8)) do not represent hexadecimal digits, throw URIError'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.12_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.12_T1.js deleted file mode 100644 index afbcd7f50..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.12_T1.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.1_A1.12_T1; - * @section: 15.1.3.1; - * @assertion: If B = 11110xxx (n = 4) and (string.charAt(k + 4) and - * string.charAt(k + 5)) or (string.charAt(k + 7) and - * string.charAt(k + 8)) or (string.charAt(k + 10) and - * string.charAt(k + 11)) do not represent hexadecimal digits, throw URIError; - * @description: Complex tests, string.charAt(k + 4) and string.charAt(k + 5) - * do not represent hexadecimal digits; -*/ - -//CHECK -result = true; -var interval = [[0x00, 0x29], [0x40,0x40], [0x47, 0x60], [0x67, 0xFFFF]]; -for (indexI = 0; indexI < interval.length; indexI++) { - for (indexJ = interval[indexI][0]; indexJ <= interval[indexI][1]; indexJ++) { - try { - decodeURI("%F0%" + String.fromCharCode(indexJ, indexJ) + "%A0%A0"); - result = false; - } catch (e) { - if ((e instanceof URIError) !== true) { - result = false; - } - } - } -} - -if (result !== true) { - $ERROR('#1: If B = 11110xxx (n = 4) and (string.charAt(k + 4) and string.charAt(k + 5)) do not represent hexadecimal digits, throw URIError'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.12_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.12_T2.js deleted file mode 100644 index 24219fee8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.12_T2.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.1_A1.12_T2; - * @section: 15.1.3.1; - * @assertion: If B = 11110xxx (n = 4) and (string.charAt(k + 4) and - * string.charAt(k + 5)) or (string.charAt(k + 7) and - * string.charAt(k + 8)) or (string.charAt(k + 10) and - * string.charAt(k + 11)) do not represent hexadecimal digits, throw URIError; - * @description: Complex tests, string.charAt(k + 7) and string.charAt(k + 7) - * do not represent hexadecimal digits; -*/ - -//CHECK -result = true; -var interval = [[0x00, 0x29], [0x40,0x40], [0x47, 0x60], [0x67, 0xFFFF]]; -for (indexI = 0; indexI < interval.length; indexI++) { - for (indexJ = interval[indexI][0]; indexJ <= interval[indexI][1]; indexJ++) { - try { - decodeURI("%F0%" + "%A0" + String.fromCharCode(indexJ, indexJ) + "%A0"); - result = false; - } catch (e) { - if ((e instanceof URIError) !== true) { - result = false; - } - } - } -} - -if (result !== true) { - $ERROR('#1: If B = 11110xxx (n = 4) and (string.charAt(k + 7) and string.charAt(k + 8)) do not represent hexadecimal digits, throw URIError'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.12_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.12_T3.js deleted file mode 100644 index 1b2c2523e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.12_T3.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.1_A1.12_T3; - * @section: 15.1.3.1; - * @assertion: If B = 11110xxx (n = 4) and (string.charAt(k + 4) and - * string.charAt(k + 5)) or (string.charAt(k + 7) and - * string.charAt(k + 8)) or (string.charAt(k + 10) and - * string.charAt(k + 11)) do not represent hexadecimal digits, throw URIError; - * @description: Complex tests, string.charAt(k + 10) and string.charAt(k + 11) - * do not represent hexadecimal digits; -*/ - -//CHECK -result = true; -var interval = [[0x00, 0x29], [0x40,0x40], [0x47, 0x60], [0x67, 0xFFFF]]; -for (indexI = 0; indexI < interval.length; indexI++) { - for (indexJ = interval[indexI][0]; indexJ <= interval[indexI][1]; indexJ++) { - try { - decodeURI("%F0%" + "%A0%A0" + String.fromCharCode(indexJ, indexJ)); - result = false; - } catch (e) { - if ((e instanceof URIError) !== true) { - result = false; - } - } - } -} - -if (result !== true) { - $ERROR('#1: If B = 11110xxx (n = 4) and (string.charAt(k + 10) and string.charAt(k + 11)) do not represent hexadecimal digits, throw URIError'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.13_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.13_T1.js deleted file mode 100644 index 40b31ae0b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.13_T1.js +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.1_A1.13_T1; - * @section: 15.1.3.1; - * @assertion: If B = 110xxxxx (n = 2) and C != 10xxxxxx (C - first of octets after B), throw URIError; - * @description: Complex tests. B = [0xC0 - 0xDF], C = [0x00, 0x7F]; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; - -for (indexB = 0xC0; indexB <= 0xDF; indexB++) { - count++; - hexB = decimalToHexString(indexB); - result = true; - for (indexC = 0x00; indexC <= 0x7F; indexC++) { - hexC = decimalToHexString(indexC); - try { - decodeURI("%" + hexB.substring(2) + "%" + hexC.substring(2)); - } catch (e) { - if ((e instanceof URIError) === true) continue; - } - result = false; - } - if (result !== true) { - if (indexO === 0) { - indexO = indexB; - } else { - if ((indexB - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = indexB; - } - } - indexP = indexB; - errorCount++; - } -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.13_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.13_T2.js deleted file mode 100644 index ba68d50a5..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.13_T2.js +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.1_A1.13_T2; - * @section: 15.1.3.1; - * @assertion: If B = 110xxxxx (n = 2) and C != 10xxxxxx (C - first of octets after B), throw URIError; - * @description: Complex tests. B = [0xC0 - 0xDF], C = [0xC0, 0xFF]; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; - -for (indexB = 0xC0; indexB <= 0xDF; indexB++) { - count++; - hexB = decimalToHexString(indexB); - result = true; - for (indexC = 0xC0; indexC <= 0xFF; indexC++) { - hexC = decimalToHexString(indexC); - try { - decodeURI("%" + hexB.substring(2) + "%" + hexC.substring(2)); - } catch (e) { - if ((e instanceof URIError) === true) continue; - } - result = false; - } - if (result !== true) { - if (indexO === 0) { - indexO = indexB; - } else { - if ((indexB - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = indexB; - } - } - indexP = indexB; - errorCount++; - } -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.14_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.14_T1.js deleted file mode 100644 index 037a66503..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.14_T1.js +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.1_A1.14_T1; - * @section: 15.1.3.1; - * @assertion: If B = 1110xxxx (n = 3) and C != 10xxxxxx (C - first of octets after B), throw URIError; - * @description: Complex tests. B = [0xE0 - 0xEF], C = [0x00, 0x7F]; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; - -for (indexB = 0xE0; indexB <= 0xEF; indexB++) { - count++; - hexB = decimalToHexString(indexB); - result = true; - for (indexC = 0x00; indexC <= 0x7F; indexC++) { - hexC = decimalToHexString(indexC); - try { - decodeURI("%" + hexB.substring(2) + "%" + hexC.substring(2) + "%A0"); - } catch (e) { - if ((e instanceof URIError) === true) continue; - } - result = false; - } - if (result !== true) { - if (indexO === 0) { - indexO = indexB; - } else { - if ((indexB - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = indexB; - } - } - indexP = indexB; - errorCount++; - } -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.14_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.14_T2.js deleted file mode 100644 index 43a6beab1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.14_T2.js +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.1_A1.14_T2; - * @section: 15.1.3.1; - * @assertion: If B = 1110xxxx (n = 3) and C != 10xxxxxx (C - first of octets after B), throw URIError; - * @description: Complex tests. B = [0xE0 - 0xEF], C = [0x00, 0x7F]; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; - -for (indexB = 0xE0; indexB <= 0xEF; indexB++) { - count++; - hexB = decimalToHexString(indexB); - result = true; - for (indexC = 0x00; indexC <= 0x7F; indexC++) { - hexC = decimalToHexString(indexC); - try { - decodeURI("%" + hexB.substring(2) + "%A0" + "%" + hexC.substring(2)); - } catch (e) { - if ((e instanceof URIError) === true) continue; - } - result = false; - } - if (result !== true) { - if (indexO === 0) { - indexO = indexB; - } else { - if ((indexB - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = indexB; - } - } - indexP = indexB; - errorCount++; - } -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.14_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.14_T3.js deleted file mode 100644 index 97a41fb23..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.14_T3.js +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.1_A1.14_T3; - * @section: 15.1.3.1; - * @assertion: If B = 1110xxxx (n = 3) and C != 10xxxxxx (C - first of octets after B), throw URIError; - * @description: Complex tests. B = [0xE0 - 0xEF], C = [0xC0, 0xFF]; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; - -for (indexB = 0xE0; indexB <= 0xEF; indexB++) { - count++; - hexB = decimalToHexString(indexB); - result = true; - for (indexC = 0xC0; indexC <= 0xFF; indexC++) { - hexC = decimalToHexString(indexC); - try { - decodeURI("%" + hexB.substring(2) + "%" + hexC.substring(2) + "%A0"); - } catch (e) { - if ((e instanceof URIError) === true) continue; - } - result = false; - } - if (result !== true) { - if (indexO === 0) { - indexO = indexB; - } else { - if ((indexB - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = indexB; - } - } - indexP = indexB; - errorCount++; - } -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.14_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.14_T4.js deleted file mode 100644 index a477781ea..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.14_T4.js +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.1_A1.14_T4; - * @section: 15.1.3.1; - * @assertion: If B = 1110xxxx (n = 3) and C != 10xxxxxx (C - first of octets after B), throw URIError; - * @description: Complex tests. B = [0xE0 - 0xEF], C = [0xC0, 0xFF]; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; - -for (indexB = 0xE0; indexB <= 0xEF; indexB++) { - count++; - hexB = decimalToHexString(indexB); - result = true; - for (indexC = 0xC0; indexC <= 0xFF; indexC++) { - hexC = decimalToHexString(indexC); - try { - decodeURI("%" + hexB.substring(2) + "%A0" + "%" + hexC.substring(2)); - } catch (e) { - if ((e instanceof URIError) === true) continue; - } - result = false; - } - if (result !== true) { - if (indexO === 0) { - indexO = indexB; - } else { - if ((indexB - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = indexB; - } - } - indexP = indexB; - errorCount++; - } -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.15_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.15_T1.js deleted file mode 100644 index a859a9a0b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.15_T1.js +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.1_A1.15_T1; - * @section: 15.1.3.1; - * @assertion: If B = 11110xxx (n = 4) and C != 10xxxxxx (C - first of octets after B), throw URIError; - * @description: Complex tests. B = [0xF0 - 0x0F7], C = [0x00, 0x7F]; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; - -for (indexB = 0xF0; indexB <= 0xF7; indexB++) { - count++; - hexB = decimalToHexString(indexB); - result = true; - for (indexC = 0x00; indexC <= 0x7F; indexC++) { - hexC = decimalToHexString(indexC); - try { - decodeURI("%" + hexB.substring(2) + "%" + hexC.substring(2) + "%A0%A0"); - } catch (e) { - if ((e instanceof URIError) === true) continue; - } - result = false; - } - if (result !== true) { - if (indexO === 0) { - indexO = indexB; - } else { - if ((indexB - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = indexB; - } - } - indexP = indexB; - errorCount++; - } -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.15_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.15_T2.js deleted file mode 100644 index 83f48886f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.15_T2.js +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.1_A1.15_T2; - * @section: 15.1.3.1; - * @assertion: If B = 11110xxx (n = 4) and C != 10xxxxxx (C - first of octets after B), throw URIError; - * @description: Complex tests. B = [0xF0 - 0x0F7], C = [0x00, 0x7F]; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; - -for (indexB = 0xF0; indexB <= 0xF7; indexB++) { - count++; - hexB = decimalToHexString(indexB); - result = true; - for (indexC = 0x00; indexC <= 0x7F; indexC++) { - hexC = decimalToHexString(indexC); - try { - decodeURI("%" + hexB.substring(2) + "%A0" + "%" + hexC.substring(2) + "%A0"); - } catch (e) { - if ((e instanceof URIError) === true) continue; - } - result = false; - } - if (result !== true) { - if (indexO === 0) { - indexO = indexB; - } else { - if ((indexB - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = indexB; - } - } - indexP = indexB; - errorCount++; - } -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.15_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.15_T3.js deleted file mode 100644 index 456a99552..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.15_T3.js +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.1_A1.15_T3; - * @section: 15.1.3.1; - * @assertion: If B = 11110xxx (n = 4) and C != 10xxxxxx (C - first of octets after B), throw URIError; - * @description: Complex tests. B = [0xF0 - 0x0F7], C = [0x00, 0x7F]; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; - -for (indexB = 0xF0; indexB <= 0xF7; indexB++) { - count++; - hexB = decimalToHexString(indexB); - result = true; - for (indexC = 0x00; indexC <= 0x7F; indexC++) { - hexC = decimalToHexString(indexC); - try { - decodeURI("%" + hexB.substring(2) + "%A0%A0" + "%" + hexC.substring(2)); - } catch (e) { - if ((e instanceof URIError) === true) continue; - } - result = false; - } - if (result !== true) { - if (indexO === 0) { - indexO = indexB; - } else { - if ((indexB - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = indexB; - } - } - indexP = indexB; - errorCount++; - } -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.15_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.15_T4.js deleted file mode 100644 index 02be89b18..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.15_T4.js +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.1_A1.15_T4; - * @section: 15.1.3.1; - * @assertion: If B = 11110xxx (n = 4) and C != 10xxxxxx (C - first of octets after B), throw URIError; - * @description: Complex tests. B = [0xF0 - 0x0F7], C = [0xC0, 0xFF]; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; - -for (indexB = 0xF0; indexB <= 0xF7; indexB++) { - count++; - hexB = decimalToHexString(indexB); - result = true; - for (indexC = 0xC0; indexC <= 0xFF; indexC++) { - hexC = decimalToHexString(indexC); - try { - decodeURI("%" + hexB.substring(2) + "%" + hexC.substring(2) + "%A0%A0"); - } catch (e) { - if ((e instanceof URIError) === true) continue; - } - result = false; - } - if (result !== true) { - if (indexO === 0) { - indexO = indexB; - } else { - if ((indexB - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = indexB; - } - } - indexP = indexB; - errorCount++; - } -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.15_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.15_T5.js deleted file mode 100644 index 041a0a191..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.15_T5.js +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.1_A1.15_T5; - * @section: 15.1.3.1; - * @assertion: If B = 11110xxx (n = 4) and C != 10xxxxxx (C - first of octets after B), throw URIError; - * @description: Complex tests. B = [0xF0 - 0x0F7], C = [0xC0, 0xFF]; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; - -for (indexB = 0xF0; indexB <= 0xF7; indexB++) { - count++; - hexB = decimalToHexString(indexB); - result = true; - for (indexC = 0xC0; indexC <= 0xFF; indexC++) { - hexC = decimalToHexString(indexC); - try { - decodeURI("%" + hexB.substring(2) + "%A0" + "%" + hexC.substring(2) + "%A0"); - } catch (e) { - if ((e instanceof URIError) === true) continue; - } - result = false; - } - if (result !== true) { - if (indexO === 0) { - indexO = indexB; - } else { - if ((indexB - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = indexB; - } - } - indexP = indexB; - errorCount++; - } -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.15_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.15_T6.js deleted file mode 100644 index 446af04d4..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.15_T6.js +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.1_A1.15_T6; - * @section: 15.1.3.1; - * @assertion: If B = 11110xxx (n = 4) and C != 10xxxxxx (C - first of octets after B), throw URIError; - * @description: Complex tests. B = [0xF0 - 0x0F7], C = [0xC0, 0xFF]; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; - -for (indexB = 0xF0; indexB <= 0xF7; indexB++) { - count++; - hexB = decimalToHexString(indexB); - result = true; - for (indexC = 0xC0; indexC <= 0xFF; indexC++) { - hexC = decimalToHexString(indexC); - try { - decodeURI("%" + hexB.substring(2) + "%A0%A0" + "%" + hexC.substring(2)); - } catch (e) { - if ((e instanceof URIError) === true) continue; - } - result = false; - } - if (result !== true) { - if (indexO === 0) { - indexO = indexB; - } else { - if ((indexB - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = indexB; - } - } - indexP = indexB; - errorCount++; - } -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.1_T1.js deleted file mode 100644 index e29dd3240..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.1_T1.js +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.1_A1.1_T1; - * @section: 15.1.3.1; - * @assertion: If string.charAt(k) equal "%" and k + 2 >= string.length, throw URIError; - * @description: Complex tests; -*/ - -result = true; - -//CHECK#1 -try { - decodeURI("%"); - result = false; -} catch(e) { - if ((e instanceof URIError) !== true) { - result = false; - } -} - -//CHECK#2 -try { - decodeURI("%A"); - result = false; -} catch(e) { - if ((e instanceof URIError) !== true) { - result = false; - } -} - -//CHECK#3 -try { - decodeURI("%1"); - result = false; -} catch(e) { - if ((e instanceof URIError) !== true) { - result = false; - } -} - -//CHECK#4 -try { - decodeURI("% "); - result = false; -} catch(e) { - if ((e instanceof URIError) !== true) { - result = false; - } -} - -if (result !== true) { - $ERROR('#1: If string.charAt(k) equal "%" and k + 2 >= string.length, throw URIError'); -} - - - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.2_T1.js deleted file mode 100644 index 98d7d312f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.2_T1.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.1_A1.2_T1; - * @section: 15.1.3.1; - * @assertion: If B = string.charAt(k+1) + string.charAt(k+2) do not represent - * hexadecimal digits, throw URIError; - * @description: Complex tests; -*/ - -//CHECK -result = true; -var interval = [[0x00, 0x29], [0x40,0x40], [0x47, 0x60], [0x67, 0xFFFF]]; -for (indexI = 0; indexI < interval.length; indexI++) { - for (indexJ = interval[indexI][0]; indexJ <= interval[indexI][1]; indexJ++) { - try { - decodeURI("%" + String.fromCharCode(indexJ) + "1"); - result = false; - } catch (e) { - if ((e instanceof URIError) !== true) { - result = false; - } - } - } -} - -if (result !== true) { - $ERROR('#1: If string.charAt(k+1) does not represent hexadecimal digits, throw URIError'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.2_T2.js deleted file mode 100644 index 70c0c1708..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.2_T2.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.1_A1.2_T2; - * @section: 15.1.3.1; - * @assertion: If B = string.charAt(k+1) + string.charAt(k+2) do not represent - * hexadecimal digits, throw URIError; - * @description: Complex tests; -*/ - -//CHECK -result = true; -var interval = [[0x00, 0x29], [0x40,0x40], [0x47, 0x60], [0x67, 0xFFFF]]; -for (indexI = 0; indexI < interval.length; indexI++) { - for (indexJ = interval[indexI][0]; indexJ <= interval[indexI][1]; indexJ++) { - try { - decodeURI("%" + "1" + String.fromCharCode(indexJ)); - result = false; - } catch (e) { - if ((e instanceof URIError) !== true) { - result = false; - } - } - } -} - -if (result !== true) { - $ERROR('#1: If string.charAt(k+2) does not represent hexadecimal digits, throw URIError'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.3_T1.js deleted file mode 100644 index e2d317181..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.3_T1.js +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.1_A1.3_T1; - * @section: 15.1.3.1; - * @assertion: If B = 10xxxxxx or B = 11111xxx, throw URIError; - * @description: Complex tests. B = 10xxxxxx -> B in [0x80 - 0xBF]; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; - -for (index = 0x80; index <= 0xBF; index++) { - count++; - hex = decimalToHexString(index); - try { - decodeURI("%" + hex.substring(2)); - } catch (e) { - if ((e instanceof URIError) === true) continue; - } - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.3_T2.js deleted file mode 100644 index 0946084aa..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.3_T2.js +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.1_A1.3_T2; - * @section: 15.1.3.1; - * @assertion: If B = 10xxxxxx or B = 11111xxx, throw URIError; - * @description: Complex tests. B = 11111xxx -> B in [0xF8 - 0xFF]; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; - -for (index = 0xF8; index <= 0xFF; index++) { - count++; - hex = decimalToHexString(index); - try { - decodeURI("%" + hex.substring(2)); - } catch (e) { - if ((e instanceof URIError) === true) continue; - } - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.4_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.4_T1.js deleted file mode 100644 index 8190b2cfc..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.4_T1.js +++ /dev/null @@ -1,86 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.1_A1.4_T1; - * @section: 15.1.3.1; - * @assertion: If B = 110xxxxx (n = 2) and (k + 2) + 3 >= length, throw URIError; - * @description: Complex tests. B = [0xC0 - 0xDF]; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; - -for (index = 0xC0; index <= 0xDF; index++) { - count++; - str = ""; - result = true; - for (len = 0; len < 3; len++) { - hex = decimalToHexString(index); - try { - decodeURI("%" + hex.substring(2) + str); - } catch (e) { - if ((e instanceof URIError) === true) continue; - } - result = false; - str = str + "1"; - } - if (result !== true) { - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; - } -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.5_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.5_T1.js deleted file mode 100644 index c7ed173cb..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.5_T1.js +++ /dev/null @@ -1,86 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.1_A1.5_T1; - * @section: 15.1.3.1; - * @assertion: If B = 1110xxxx (n = 3) and (k + 2) + 6 >= length, throw URIError; - * @description: Complex tests. B = [0xE0 - 0xEF]; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; - -for (index = 0xE0; index <= 0xEF; index++) { - count++; - str = ""; - result = true; - for (len = 0; len < 6; len++) { - hex = decimalToHexString(index); - try { - decodeURI("%" + hex.substring(2) + str); - } catch (e) { - if ((e instanceof URIError) === true) continue; - } - result = false; - str = str + "1"; - } - if (result !== true) { - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; - } -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.6_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.6_T1.js deleted file mode 100644 index fe49c648f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.6_T1.js +++ /dev/null @@ -1,86 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.1_A1.6_T1; - * @section: 15.1.3.1; - * @assertion: If B = 11110xxx (n = 4) and (k + 2) + 9 >= length, throw URIError; - * @description: Complex tests. B = [0xF0 - 0xF7]; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; - -for (index = 0xF0; index <= 0xF7; index++) { - count++; - str = ""; - result = true; - for (len = 0; len < 9; len++) { - hex = decimalToHexString(index); - try { - decodeURI("%" + hex.substring(2) + str); - } catch (e) { - if ((e instanceof URIError) === true) continue; - } - result = false; - str = str + "1"; - } - if (result !== true) { - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; - } -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.7_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.7_T1.js deleted file mode 100644 index 424ce03a1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.7_T1.js +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.1_A1.7_T1; - * @section: 15.1.3.1; - * @assertion: If B = 110xxxxx (n = 2) and string.charAt(k + 3) not equal "%", throw URIError; - * @description: Complex tests. B = [0xC0 - 0xDF]; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; - -for (index = 0xC0; index <= 0xDF; index++) { - count++; - hex = decimalToHexString(index); - try { - decodeURI("%" + hex.substring(2) + "111"); - } catch (e) { - if ((e instanceof URIError) === true) continue; - } - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.8_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.8_T1.js deleted file mode 100644 index 5774a4cec..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.8_T1.js +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.1_A1.8_T1; - * @section: 15.1.3.1; - * @assertion: If B = 1110xxxx (n = 3) and string.charAt(k + 3), - * string.charAt(k + 6) not equal "%", throw URIError; - * @description: Complex tests. B = [0xE0 - 0xEF], - * string.charAt(k + 3) not equal "%"; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; - -for (index = 0xE0; index <= 0xEF; index++) { - count++; - hex = decimalToHexString(index); - try { - decodeURI("%" + hex.substring(2) + "111%A0"); - } catch (e) { - if ((e instanceof URIError) === true) continue; - } - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.8_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.8_T2.js deleted file mode 100644 index d477b49e6..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.8_T2.js +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.1_A1.8_T2; - * @section: 15.1.3.1; - * @assertion: If B = 1110xxxx (n = 3) and string.charAt(k + 3), - * string.charAt(k + 6) not equal "%", throw URIError; - * @description: Complex tests. B = [0xE0 - 0xEF], - * string.charAt(k + 6) not equal "%"; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; - -for (index = 0xE0; index <= 0xEF; index++) { - count++; - hex = decimalToHexString(index); - try { - decodeURI("%" + hex.substring(2) + "%A0111"); - } catch (e) { - if ((e instanceof URIError) === true) continue; - } - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.9_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.9_T1.js deleted file mode 100644 index 89067fa2c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.9_T1.js +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.1_A1.9_T1; - * @section: 15.1.3.1; - * @assertion: If B = 11110xxx (n = 4) and string.charAt(k + 3), - * string.charAt(k + 6), string.charAt(k + 9) not equal "%", throw URIError; - * @description: Complex tests. B = [0xF0 - 0x0F7], - * string.charAt(k + 3) not equal "%"; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; - -for (index = 0xF0; index <= 0xF7; index++) { - count++; - hex = decimalToHexString(index); - try { - decodeURI("%" + hex.substring(2) + "111%A0%A0"); - } catch (e) { - if ((e instanceof URIError) === true) continue; - } - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.9_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.9_T2.js deleted file mode 100644 index 57f33563f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.9_T2.js +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.1_A1.9_T2; - * @section: 15.1.3.1; - * @assertion: If B = 11110xxx (n = 4) and string.charAt(k + 3), - * string.charAt(k + 6), string.charAt(k + 9) not equal "%", throw URIError; - * @description: Complex tests. B = [0xF0 - 0x0F7], - * string.charAt(k + 6) not equal "%"; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; - -for (index = 0xF0; index <= 0xF7; index++) { - count++; - hex = decimalToHexString(index); - try { - decodeURI("%" + hex.substring(2) + "%A0111%A0"); - } catch (e) { - if ((e instanceof URIError) === true) continue; - } - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.9_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.9_T3.js deleted file mode 100644 index 658d197c4..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A1.9_T3.js +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.1_A1.9_T3; - * @section: 15.1.3.1; - * @assertion: If B = 11110xxx (n = 4) and string.charAt(k + 3), - * string.charAt(k + 6), string.charAt(k + 9) not equal "%", throw URIError; - * @description: Complex tests. B = [0xF0 - 0x0F7], - * string.charAt(k + 9) not equal "%"; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; - -for (index = 0xF0; index <= 0xF7; index++) { - count++; - hex = decimalToHexString(index); - try { - decodeURI("%" + hex.substring(2) + "%A0%A0111"); - } catch (e) { - if ((e instanceof URIError) === true) continue; - } - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A2.1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A2.1_T1.js deleted file mode 100644 index a9758b541..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A2.1_T1.js +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.1_A2.1_T1; - * @section: 15.1.3.1; - * @assertion: If string.charAt(k) not equal "%", return this char; - * @description: Complex tests; -*/ - -//CHECK -errorCount = 0; -count = 0; -for (indexI = 0; indexI <= 65535; indexI++) { - if (indexI !== 0x25) { - hex = decimalToHexString(indexI); - try { - var str = String.fromCharCode(indexI); - if (decodeURI(str) !== str) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e){ - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A2.2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A2.2_T1.js deleted file mode 100644 index fd0ba33b8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A2.2_T1.js +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.1_A2.2_T1; - * @section: 15.1.3.1; - * @assertion: If B1 = 0xxxxxxxx ([0x00 - 0x7F]), without [uriReserved, #], return B1; - * @description: Complex tests, use RFC 3629; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; -uriReserved = [";", "/", "?", ":", "@", "&", "=", "+", "$", ","]; -l: -for (indexB1 = 0x00; indexB1 <= 0x7F; indexB1++) { - count++; - var hexB1 = decimalToHexString(indexB1); - var index = indexB1; - try { - hex = String.fromCharCode(index); - for (indexC = 0; indexC < uriReserved.length; indexC++) { - if (hex === uriReserved[indexC]) continue l; - } - if (hex === "#") continue l; - if (decodeURI("%" + hexB1.substring(2)) === hex) continue; - } catch (e) {} - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A2.3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A2.3_T1.js deleted file mode 100644 index ebbf4f7c9..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A2.3_T1.js +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.1_A2.3_T1; - * @section: 15.1.3.1; - * @assertion: If B1 = 110xxxxx ([0xC0 - 0xDF]), B2 = 10xxxxxx ([0x80 - 0xBF), without B1 = [0xC0, 0xC1], return UTF8(B1, B2); - * @description: Complex tests, use RFC 3629; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; - -for (indexB1 = 0xC2; indexB1 <= 0xDF; indexB1++) { - var hexB1 = decimalToHexString(indexB1); - for (indexB2 = 0x80; indexB2 <= 0xBF; indexB2++) { - count++; - var hexB2 = decimalToHexString(indexB2); - var index = (indexB1 & 0x1F) * 0x40 + (indexB2 & 0x3F); - try { - if (decodeURI("%" + hexB1.substring(2) + "%" + hexB2.substring(2)) === String.fromCharCode(index)) continue; - } catch (e) {} - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; - } -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A2.4_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A2.4_T1.js deleted file mode 100644 index 8ffeb47d4..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A2.4_T1.js +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.1_A2.4_T1; - * @section: 15.1.3.1; - * @assertion: If B1 = 1110xxxx ([0xE0 - 0xEF]), B2, B3 = 10xxxxxxx ([0x80 - 0xBF]), without [B1, B2] = [0xE0, 0x80 - 0x9F], [0xED, 0xA0 - 0xBF] (0xD800 - 0xDFFF), return UTF8(B1, B2, B3); - * @description: Complex tests, use RFC 3629; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; - -for (indexB1 = 0xE0; indexB1 <= 0xEF; indexB1++) { - var hexB1 = decimalToHexString(indexB1); - for (indexB2 = 0x80; indexB2 <= 0xBF; indexB2++) { - if ((indexB1 === 0xE0) && (indexB2 <= 0x9F)) continue; - if ((indexB1 === 0xED) && (0xA0 <= indexB2)) continue; - var hexB2 = decimalToHexString(indexB2); - for (indexB3 = 0x80; indexB3 <= 0xBF; indexB3++) { - count++; - var hexB3 = decimalToHexString(indexB3); - var index = (indexB1 & 0x0F) * 0x1000 + (indexB2 & 0x3F) * 0x40 + (indexB3 & 0x3F); - try { - if (decodeURI("%" + hexB1.substring(2) + "%" + hexB2.substring(2) + "%" + hexB3.substring(2)) === String.fromCharCode(index)) continue; - } catch (e) {} - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; - } - } -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A2.5_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A2.5_T1.js deleted file mode 100644 index 68aa6d2c4..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A2.5_T1.js +++ /dev/null @@ -1,90 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.1_A2.5_T1; - * @section: 15.1.3.1; - * @assertion: If B1 = 11110xxx ([0xF0 - 0x0F4]), B2, B3, B4 = 10xxxxxxx ([0x80 - 0xBF]), without [B1, B2] = [0xF0, 0x80 - 0x9F], [0xF4, 0x90 - 0xBF], return UTF8(B1, B2, B3, B4); - * @description: Complex tests, use RFC 3629; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; - -for (indexB1 = 0xF0; indexB1 <= 0xF4; indexB1++) { - var hexB1 = decimalToHexString(indexB1); - for (indexB2 = 0x80; indexB2 <= 0xBF; indexB2++) { - if ((indexB1 === 0xF0) && (indexB2 <= 0x9F)) continue; - if ((indexB1 === 0xF4) && (indexB2 >= 0x90)) continue; - var hexB2 = decimalToHexString(indexB2); - for (indexB3 = 0x80; indexB3 <= 0xBF; indexB3++) { - var hexB3 = decimalToHexString(indexB3); - for (indexB4 = 0x80; indexB4 <= 0xBF; indexB4++) { - var hexB4 = decimalToHexString(indexB4); - count++; - var index = (indexB1 & 0x07) * 0x40000 + (indexB2 & 0x3F) * 0x1000 + (indexB3 & 0x3F) * 0x40 + (indexB4 & 0x3F); - var L = ((index - 0x10000) & 0x03FF) + 0xDC00; - var H = (((index - 0x10000) >> 10) & 0x03FF) + 0xD800; - try { - if (decodeURI("%" + hexB1.substring(3) + "%" + hexB2.substring(3) + "%" + hexB3.substring(3) + "%" + hexB4.substring(3)) === String.fromCharCode(H) + String.fromCharCode(L)) continue; - } catch (e) {} - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; - } - } - } -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 4; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A3_T1.js deleted file mode 100644 index 93ecb1df2..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A3_T1.js +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.1_A3_T1; - * @section: 15.1.3.1; - * @assertion: Let reservedURISet be a string containing one instance of each character valid - * in uriReserved plus "#"; - * @description: Checking all character in reservedURISet. HexDigit in [0..9, A..F]; -*/ - -//CHECK#1 -if (decodeURI("%3B") !== "%3B") { - $ERROR('#1: decodeURI("%3B") equal "%3B", not ";"'); -} - -//CHECK#2 -if (decodeURI("%2F") !== "%2F") { - $ERROR('#2: decodeURI("%2F") equal "%2F", not "/"'); -} - -//CHECK#3 -if (decodeURI("%3F") !== "%3F") { - $ERROR('#3: decodeURI("%3F") equal "%3F", not "?"'); -} - -//CHECK#4 -if (decodeURI("%3A") !== "%3A") { - $ERROR('#4: decodeURI("%3A") equal "%3A", not ":"'); -} - -//CHECK#5 -if (decodeURI("%40") !== "%40") { - $ERROR('#5: decodeURI("%40") equal "%40", not "@"'); -} - -//CHECK#6 -if (decodeURI("%26") !== "%26") { - $ERROR('#6: decodeURI("%26") equal "%26", not "&"'); -} - -//CHECK#7 -if (decodeURI("%3D") !== "%3D") { - $ERROR('#7.1: decodeURI("%3D") equal "%3D", not "="'); -} - -//CHECK#8 -if (decodeURI("%2B") !== "%2B") { - $ERROR('#8.1: decodeURI("%2B") equal "%2B", not "+"'); -} - -//CHECK#9 -if (decodeURI("%24") !== "%24") { - $ERROR('#9: decodeURI("%24") equal "%24", not "$"'); -} - -//CHECK#10 -if (decodeURI("%2C") !== "%2C") { - $ERROR('#10: decodeURI("%2C") equal "%2C", not ","'); -} - -//CHECK#11 -if (decodeURI("%23") !== "%23") { - $ERROR('#11: decodeURI("%23") equal "%23", not "#"'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A3_T2.js deleted file mode 100644 index e21acacbe..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A3_T2.js +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.1_A3_T2; - * @section: 15.1.3.1; - * @assertion: Let reservedURISet be a string containing one instance of each character valid - * in uriReserved plus "#"; - * @description: Checking all character in reservedURISet. HexDigit in [0..9, a..f]; -*/ - -//CHECK#1 -if (decodeURI("%3b") !== "%3b") { - $ERROR('#1: decodeURI("%3b") equal "%3b", not ";" or "%3B"'); -} - -//CHECK#2 -if (decodeURI("%2f") !== "%2f") { - $ERROR('#2: decodeURI("%2f") equal "%2f", not "/" or "%2F"'); -} - -//CHECK#3 -if (decodeURI("%3f") !== "%3f") { - $ERROR('#3: decodeURI("%3f") equal "%3f", not "?" or "%3F"'); -} - -//CHECK#4 -if (decodeURI("%3a") !== "%3a") { - $ERROR('#4: decodeURI("%3a") equal "%3a", not ":" or "%3A"'); -} - -//CHECK#5 -if (decodeURI("%40") !== "%40") { - $ERROR('#5: decodeURI("%40") equal "%40", not "@"'); -} - -//CHECK#6 -if (decodeURI("%26") !== "%26") { - $ERROR('#6: decodeURI("%26") equal "%26", not "&"'); -} - -//CHECK#7 -if (decodeURI("%3d") !== "%3d") { - $ERROR('#7.1: decodeURI("%3d") equal "%3d", not "=" or "%3D"'); -} - -//CHECK#8 -if (decodeURI("%2b") !== "%2b") { - $ERROR('#8.1: decodeURI("%2b") equal "%2b", not "+" or "%2B"'); -} - -//CHECK#9 -if (decodeURI("%24") !== "%24") { - $ERROR('#9: decodeURI("%24") equal "%24", not "$"'); -} - -//CHECK#10 -if (decodeURI("%2c") !== "%2c") { - $ERROR('#10: decodeURI("%2c") equal "%2c", not "," or "%2C"'); -} - -//CHECK#11 -if (decodeURI("%23") !== "%23") { - $ERROR('#11: decodeURI("%23") equal "%23", not "#"'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A3_T3.js deleted file mode 100644 index 7c4f4754a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A3_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.1_A3_T3; - * @section: 15.1.3.1; - * @assertion: Let reservedURISet be a string containing one instance of each character valid - * in uriReserved plus "#"; - * @description: Complex test; -*/ - -//CHECK#1 -if (decodeURI("%3B%2F%3F%3A%40%26%3D%2B%24%2C%23") !== "%3B%2F%3F%3A%40%26%3D%2B%24%2C%23") { - $ERROR('#1: decodeURI("%3B%2F%3F%3A%40%26%3D%2B%24%2C%23") equal "%3B%2F%3F%3A%40%26%3D%2B%24%2C%23", not ";/?:@&=+$,#"'); -} - -//CHECK#2 -if (decodeURI("%3b%2f%3f%3a%40%26%3d%2b%24%2c%23") !== "%3b%2f%3f%3a%40%26%3d%2b%24%2c%23") { - $ERROR('#2: decodeURI("%3b%2f%3f%3a%40%26%3d%2b%24%2c%23") equal "%3b%2f%3f%3a%40%26%3d%2b%24%2c%23", not ";/?:@&=+$,#" or "%3B%2F%3F%3A%40%26%3D%2B%24%2C%23"'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A4_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A4_T1.js deleted file mode 100644 index cf4a6edf0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A4_T1.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.1_A4_T1; - * @section: 15.1.3.1; - * @assertion: URI tests; - * @description: Checking ENGLISH ALPHABET; -*/ - -//CHECK#1 -if (decodeURI("http://unipro.ru/0123456789") !== "http://unipro.ru/0123456789") { - $ERROR('#1: http://unipro.ru/0123456789'); -} - -//CHECK#2 -if (decodeURI("%41%42%43%44%45%46%47%48%49%4A%4B%4C%4D%4E%4F%50%51%52%53%54%55%56%57%58%59%5A") !== "ABCDEFGHIJKLMNOPQRSTUVWXYZ") { - $ERROR('#2: ABCDEFGHIJKLMNOPQRSTUVWXYZ'); -} - -//CHECK#3 -if (decodeURI("%61%62%63%64%65%66%67%68%69%6A%6B%6C%6D%6E%6F%70%71%72%73%74%75%76%77%78%79%7A") !== "abcdefghijklmnopqrstuvwxyz") { - $ERROR('#3: abcdefghijklmnopqrstuvwxyz'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A4_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A4_T2.js deleted file mode 100644 index 4e54f818f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A4_T2.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.1_A4_T2; - * @section: 15.1.3.1; - * @assertion: URI tests; - * @description: Checking RUSSIAN ALPHABET; -*/ - -//CHECK#1 -if (decodeURI("http://ru.wikipedia.org/wiki/%d0%ae%D0%bd%D0%B8%D0%BA%D0%BE%D0%B4") !== "http://ru.wikipedia.org/wiki/Юникод") { - $ERROR('#1: http://ru.wikipedia.org/wiki/Юникод'); -} - -//CHECK#2 -if (decodeURI("http://ru.wikipedia.org/wiki/%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4#%D0%A1%D1%81%D1%8B%D0%BB%D0%BA%D0%B8") !== "http://ru.wikipedia.org/wiki/Юникод#Ссылки") { - $ERROR('#2: http://ru.wikipedia.org/wiki/Юникод#Ссылки'); -} - -//CHECK#3 -if (decodeURI("http://ru.wikipedia.org/wiki/%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4%23%D0%92%D0%B5%D1%80%D1%81%D0%B8%D0%B8%20%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4%D0%B0") !== "http://ru.wikipedia.org/wiki/Юникод%23Версии Юникода") { - $ERROR('#3: http://ru.wikipedia.org/wiki/Юникод%23Версии Юникода'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A4_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A4_T3.js deleted file mode 100644 index 2019fdbfd..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A4_T3.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.1_A4_T3; - * @section: 15.1.3.1; - * @assertion: URI tests; - * @description: Checking URL with Line Terminator; -*/ - -//CHECK#1 -if (decodeURI("http://unipro.ru/%0Aabout") !== "http://unipro.ru/\nabout") { - $ERROR('#1: http://unipro.ru/%A0about'); -} - -//CHECK#2 -if (decodeURI("http://unipro.ru/%0Babout") !== "http://unipro.ru/\vabout") { - $ERROR('#2: http://unipro.ru/%0Babout'); -} - -//CHECK#3 -if (decodeURI("http://unipro.ru/%0Cabout") !== "http://unipro.ru/\fabout") { - $ERROR('#3: http://unipro.ru/%0Cabout'); -} - -//CHECK#4 -if (decodeURI("http://unipro.ru/%0Dabout") !== "http://unipro.ru/\rabout") { - $ERROR('#4: http://unipro.ru/%0Dabout'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A4_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A4_T4.js deleted file mode 100644 index 4ce97f71b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A4_T4.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.1_A4_T4; - * @section: 15.1.3.1; - * @assertion: URI tests; - * @description: Test some url; -*/ - -//CHECK#1 -if (decodeURI("") !== "") { - $ERROR('#1: ""'); -} - -//CHECK#2 -if (decodeURI("http:%2f%2Funipro.ru") !== "http:%2f%2Funipro.ru") { - $ERROR('#2: http:%2f%2Funipro.ru'); -} - -//CHECK#3 -if (decodeURI("http://www.google.ru/support/jobs/bin/static.py%3Fpage%3dwhy-ru.html%26sid%3Dliveandwork") !== "http://www.google.ru/support/jobs/bin/static.py%3Fpage%3dwhy-ru.html%26sid%3Dliveandwork") { - $ERROR('#3: http://www.google.ru/support/jobs/bin/static.py%3Fpage%3dwhy-ru.html%26sid%3Dliveandwork"'); -} - -//CHECK%234 -if (decodeURI("http://en.wikipedia.org/wiki/UTF-8%23Description") !== "http://en.wikipedia.org/wiki/UTF-8%23Description") { - $ERROR('%234: http://en.wikipedia.org/wiki/UTF-8%23Description'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A5.1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A5.1.js deleted file mode 100644 index 51c60350d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A5.1.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.1_A5.1; - * @section: 15.1.3.1, 15.2.4.7, 12.6.4; - * @assertion: The length property of decodeURI has the attribute DontEnum; - * @description: Checking use propertyIsEnumerable, for-in; -*/ - - -//CHECK#1 -if (decodeURI.propertyIsEnumerable('length') !== false) { - $ERROR('#1: decodeURI.propertyIsEnumerable(\'length\') === false. Actual: ' + (decodeURI.propertyIsEnumerable('length'))); -} - -//CHECK#2 -result = true; -for (p in decodeURI){ - if (p === "length") { - result = false; - } -} - -if (result !== true) { - $ERROR('#2: result = true; for (p in decodeURI) { if (p === "length") result = false; } result === true;'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A5.2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A5.2.js deleted file mode 100644 index 52c469267..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A5.2.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.1_A5.2; - * @section: 15.1.3.1, 15.2.4.5, 11.4.1; - * @assertion: The length property of decodeURI has the attribute DontDelete; - * @description: Checking use hasOwnProperty, delete; -*/ - -//CHECK#1 -if (decodeURI.hasOwnProperty('length') !== true) { - $FAIL('#1: decodeURI.hasOwnProperty(\'length\') === true. Actual: ' + (decodeURI.hasOwnProperty('length'))); -} - -delete decodeURI.length; - -//CHECK#2 -if (decodeURI.hasOwnProperty('length') !== true) { - $ERROR('#2: delete decodeURI.length; decodeURI.hasOwnProperty(\'length\') === true. Actual: ' + (decodeURI.hasOwnProperty('length'))); -} - -//CHECK#3 -if (decodeURI.length === undefined) { - $ERROR('#3: delete decodeURI.length; decodeURI.length !== undefined'); -} - - - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A5.3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A5.3.js deleted file mode 100644 index ff7a05e9f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A5.3.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.1_A5.3; - * @section: 15.1.3.1; - * @assertion: The length property of decodeURI has the attribute ReadOnly; - * @description: Checking if varying the length property fails; -*/ - -//CHECK#1 -x = decodeURI.length; -decodeURI.length = Infinity; -if (decodeURI.length !== x) { - $ERROR('#1: x = decodeURI.length; decodeURI.length = Infinity; decodeURI.length === x. Actual: ' + (decodeURI.length)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A5.4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A5.4.js deleted file mode 100644 index 42096a1ac..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A5.4.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.1_A5.4; - * @section: 15.1.3.1; - * @assertion: The length property of decodeURI is 1; - * @description: decodeURI.length === 1; -*/ - -//CHECK#1 -if (decodeURI.length !== 1) { - $ERROR('#1: decodeURI.length === 1. Actual: ' + (decodeURI.length)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A5.5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A5.5.js deleted file mode 100644 index 93cdb038e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A5.5.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.1_A5.5; - * @section: 15.1.3.1, 15.2.4.7, 12.6.4; - * @assertion: The decodeURI property has the attribute DontEnum; - * @description: Checking use propertyIsEnumerable, for-in; -*/ - - -//CHECK#1 -if (this.propertyIsEnumerable('decodeURI') !== false) { - $ERROR('#1: this.propertyIsEnumerable(\'decodeURI\') === false. Actual: ' + (this.propertyIsEnumerable('decodeURI'))); -} - -//CHECK#2 -result = true; -for (p in this){ - if (p === "decodeURI") { - result = false; - } -} - -if (result !== true) { - $ERROR('#2: result = true; for (p in this) { if (p === "decodeURI") result = false; } result === true;'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A5.6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A5.6.js deleted file mode 100644 index 627875f77..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A5.6.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.1.3.1_A5.6; -* @section: 15.1.3.1; -* @assertion: The decodeURI property has not prototype property; -* @description: Checking decodeURI.prototype; -*/ - -//CHECK#1 -if (decodeURI.prototype !== undefined) { - $ERROR('#1: decodeURI.prototype === undefined. Actual: ' + (decodeURI.prototype)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A5.7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A5.7.js deleted file mode 100644 index 8cc75c1fb..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A5.7.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.1.3.1_A5.7; -* @section: 15.1.3.1, 11.2.2; -* @assertion: The decodeURI property can't be used as constructor; -* @description: If property does not implement the internal [[Construct]] method, throw a TypeError exception; -*/ - -//CHECK#1 - -try { - new decodeURI(); - $ERROR('#1.1: new decodeURI() throw TypeError. Actual: ' + (new decodeURI())); -} catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1.2: new decodeURI() throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A6_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A6_T1.js deleted file mode 100644 index 4c1278677..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.1_decodeURI/S15.1.3.1_A6_T1.js +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.1_A6_T1; - * @section: 15.1.3.1, 9.8, 8.6.2.6; - * @assertion: Operator use ToString; - * @description: If Type(value) is Object, evaluate ToPrimitive(value, String); -*/ - -//CHECK#1 -var object = {valueOf: function() {return "%5E"}}; -if (decodeURI(object) !== "[object Object]") { - $ERROR('#1: var object = {valueOf: function() {return "%5E"}}; decodeURI(object) === [object Object]. Actual: ' + (decodeURI(object))); -} - -//CHECK#2 -var object = {valueOf: function() {return ""}, toString: function() {return "%5E"}}; -if (decodeURI(object) !== "^") { - $ERROR('#2: var object = {valueOf: function() {return ""}, toString: function() {return "%5E"}}; decodeURI(object) === "^". Actual: ' + (decodeURI(object))); -} - -//CHECK#3 -var object = {valueOf: function() {return "%5E"}, toString: function() {return {}}}; -if (decodeURI(object) !== "^") { - $ERROR('#3: var object = {valueOf: function() {return "%5E"}, toString: function() {return {}}}; decodeURI(object) === "^". Actual: ' + (decodeURI(object))); -} - -//CHECK#4 -try { - var object = {valueOf: function() {throw "error"}, toString: function() {return "%5E"}}; - if (decodeURI(object) !== "^") { - $ERROR('#4.1: var object = {valueOf: function() {throw "error"}, toString: function() {return "%5E"}}; decodeURI(object) === "^". Actual: ' + (decodeURI(object))); - } -} -catch (e) { - if (e === "error") { - $ERROR('#4.2: var object = {valueOf: function() {throw "error"}, toString: function() {return "%5E"}}; decodeURI(object) not throw "error"'); - } else { - $ERROR('#4.3: var object = {valueOf: function() {throw "error"}, toString: function() {return "%5E"}}; decodeURI(object) not throw Error. Actual: ' + (e)); - } -} - -//CHECK#5 -var object = {toString: function() {return "%5E"}}; -if (decodeURI(object) !== "^") { - $ERROR('#5: var object = {toString: function() {return "%5E"}}; decodeURI(object) === "^". Actual: ' + (decodeURI(object))); -} - -//CHECK#6 -var object = {valueOf: function() {return {}}, toString: function() {return "%5E"}} -if (decodeURI(object) !== "^") { - $ERROR('#6: var object = {valueOf: function() {return {}}, toString: function() {return "%5E"}}; decodeURI(object) === "^". Actual: ' + (decodeURI(object))); -} - -//CHECK#7 -try { - var object = {valueOf: function() {return "%5E"}, toString: function() {throw "error"}}; - decodeURI(object); - $ERROR('#7.1: var object = {valueOf: function() {return "%5E"}, toString: function() {throw "error"}}; decodeURI(object) throw "error". Actual: ' + (decodeURI(object))); -} -catch (e) { - if (e !== "error") { - $ERROR('#7.2: var object = {valueOf: function() {return "%5E"}, toString: function() {throw "error"}}; decodeURI(object) throw "error". Actual: ' + (e)); - } -} - -//CHECK#8 -try { - var object = {valueOf: function() {return {}}, toString: function() {return {}}}; - decodeURI(object); - $ERROR('#8.1: var object = {valueOf: function() {return {}}, toString: function() {return {}}}; decodeURI(object) throw TypeError. Actual: ' + (decodeURI(object))); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#8.2: var object = {valueOf: function() {return {}}, toString: function() {return {}}}; decodeURI(object) throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.10_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.10_T1.js deleted file mode 100644 index f6a83a53f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.10_T1.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.2_A1.10_T1; - * @section: 15.1.3.2; - * @assertion: If B = 110xxxxx (n = 2) and string.charAt(k + 4) and - * string.charAt(k + 5) do not represent hexadecimal digits, throw URIError; - * @description: Complex tests; -*/ - -//CHECK -result = true; -var interval = [[0x00, 0x29], [0x40,0x40], [0x47, 0x60], [0x67, 0xFFFF]]; -for (indexI = 0; indexI < interval.length; indexI++) { - for (indexJ = interval[indexI][0]; indexJ <= interval[indexI][1]; indexJ++) { - try { - decodeURIComponent("%C0%" + String.fromCharCode(indexJ, indexJ)); - result = false; - } catch (e) { - if ((e instanceof URIError) !== true) { - result = false; - } - } - } -} - -if (result !== true) { - $ERROR('#1: If B = 110xxxxx (n = 2) and (string.charAt(k + 4) and string.charAt(k + 5)) do not represent hexadecimal digits, throw URIError'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.11_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.11_T1.js deleted file mode 100644 index 0063212b4..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.11_T1.js +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.2_A1.11_T1; - * @section: 15.1.3.2; - * @assertion: If B = 1110xxxx (n = 3) and (string.charAt(k + 4) and - * string.charAt(k + 5)) or (string.charAt(k + 7) and - * string.charAt(k + 8)) do not represent hexadecimal digits, throw URIError; - * @description: Complex tests, string.charAt(k + 4) and string.charAt(k + 5) - * do not represent hexadecimal digits; -*/ - -//CHECK -result = true; -var interval = [[0x00, 0x29], [0x40,0x40], [0x47, 0x60], [0x67, 0xFFFF]]; -for (indexI = 0; indexI < interval.length; indexI++) { - for (indexJ = interval[indexI][0]; indexJ <= interval[indexI][1]; indexJ++) { - try { - decodeURIComponent("%E0%" + String.fromCharCode(indexJ, indexJ) + "%A0"); - result = false; - } catch (e) { - if ((e instanceof URIError) !== true) { - result = false; - } - } - } -} - -if (result !== true) { - $ERROR('#1: If B = 1110xxxx (n = 3) and (string.charAt(k + 4) and string.charAt(k + 5)) do not represent hexadecimal digits, throw URIError'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.11_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.11_T2.js deleted file mode 100644 index 9158fc453..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.11_T2.js +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.2_A1.11_T2; - * @section: 15.1.3.2; - * @assertion: If B = 1110xxxx (n = 3) and (string.charAt(k + 4) and - * string.charAt(k + 5)) or (string.charAt(k + 7) and - * string.charAt(k + 8)) do not represent hexadecimal digits, throw URIError; - * @description: Complex tests, string.charAt(k + 7) and string.charAt(k + 8) - * do not represent hexadecimal digits; -*/ - -//CHECK -result = true; -var interval = [[0x00, 0x29], [0x40,0x40], [0x47, 0x60], [0x67, 0xFFFF]]; -for (indexI = 0; indexI < interval.length; indexI++) { - for (indexJ = interval[indexI][0]; indexJ <= interval[indexI][1]; indexJ++) { - try { - decodeURIComponent("%E0%" + "%A0" + String.fromCharCode(indexJ, indexJ)); - result = false; - } catch (e) { - if ((e instanceof URIError) !== true) { - result = false; - } - } - } -} - -if (result !== true) { - $ERROR('#1: If B = 1110xxxx (n = 3) and (string.charAt(k + 7) and string.charAt(k + 8)) do not represent hexadecimal digits, throw URIError'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.12_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.12_T1.js deleted file mode 100644 index 357d9b5f0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.12_T1.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.2_A1.12_T1; - * @section: 15.1.3.2; - * @assertion: If B = 11110xxx (n = 4) and (string.charAt(k + 4) and - * string.charAt(k + 5)) or (string.charAt(k + 7) and - * string.charAt(k + 8)) or (string.charAt(k + 10) and - * string.charAt(k + 11)) do not represent hexadecimal digits, throw URIError; - * @description: Complex tests, string.charAt(k + 4) and string.charAt(k + 5) - * do not represent hexadecimal digits; -*/ - -//CHECK -result = true; -var interval = [[0x00, 0x29], [0x40,0x40], [0x47, 0x60], [0x67, 0xFFFF]]; -for (indexI = 0; indexI < interval.length; indexI++) { - for (indexJ = interval[indexI][0]; indexJ <= interval[indexI][1]; indexJ++) { - try { - decodeURIComponent("%F0%" + String.fromCharCode(indexJ, indexJ) + "%A0%A0"); - result = false; - } catch (e) { - if ((e instanceof URIError) !== true) { - result = false; - } - } - } -} - -if (result !== true) { - $ERROR('#1: If B = 11110xxx (n = 4) and (string.charAt(k + 4) and string.charAt(k + 5)) do not represent hexadecimal digits, throw URIError'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.12_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.12_T2.js deleted file mode 100644 index 7d1fa2050..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.12_T2.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.2_A1.12_T2; - * @section: 15.1.3.2; - * @assertion: If B = 11110xxx (n = 4) and (string.charAt(k + 4) and - * string.charAt(k + 5)) or (string.charAt(k + 7) and - * string.charAt(k + 8)) or (string.charAt(k + 10) and - * string.charAt(k + 11)) do not represent hexadecimal digits, throw URIError; - * @description: Complex tests, string.charAt(k + 7) and string.charAt(k + 7) - * do not represent hexadecimal digits; -*/ - -//CHECK -result = true; -var interval = [[0x00, 0x29], [0x40,0x40], [0x47, 0x60], [0x67, 0xFFFF]]; -for (indexI = 0; indexI < interval.length; indexI++) { - for (indexJ = interval[indexI][0]; indexJ <= interval[indexI][1]; indexJ++) { - try { - decodeURIComponent("%F0%" + "%A0" + String.fromCharCode(indexJ, indexJ) + "%A0"); - result = false; - } catch (e) { - if ((e instanceof URIError) !== true) { - result = false; - } - } - } -} - -if (result !== true) { - $ERROR('#1: If B = 11110xxx (n = 4) and (string.charAt(k + 7) and string.charAt(k + 8)) do not represent hexadecimal digits, throw URIError'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.12_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.12_T3.js deleted file mode 100644 index b2e5903cb..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.12_T3.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.2_A1.12_T3; - * @section: 15.1.3.2; - * @assertion: If B = 11110xxx (n = 4) and (string.charAt(k + 4) and - * string.charAt(k + 5)) or (string.charAt(k + 7) and - * string.charAt(k + 8)) or (string.charAt(k + 10) and - * string.charAt(k + 11)) do not represent hexadecimal digits, throw URIError; - * @description: Complex tests, string.charAt(k + 10) and string.charAt(k + 11) - * do not represent hexadecimal digits; -*/ - -//CHECK -result = true; -var interval = [[0x00, 0x29], [0x40,0x40], [0x47, 0x60], [0x67, 0xFFFF]]; -for (indexI = 0; indexI < interval.length; indexI++) { - for (indexJ = interval[indexI][0]; indexJ <= interval[indexI][1]; indexJ++) { - try { - decodeURIComponent("%F0%" + "%A0%A0" + String.fromCharCode(indexJ, indexJ)); - result = false; - } catch (e) { - if ((e instanceof URIError) !== true) { - result = false; - } - } - } -} - -if (result !== true) { - $ERROR('#1: If B = 11110xxx (n = 4) and (string.charAt(k + 10) and string.charAt(k + 11)) do not represent hexadecimal digits, throw URIError'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.13_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.13_T1.js deleted file mode 100644 index 865544b9c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.13_T1.js +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.2_A1.13_T1; - * @section: 15.1.3.2; - * @assertion: If B = 110xxxxx (n = 2) and C != 10xxxxxx (C - first of octets after B), throw URIError; - * @description: Complex tests. B = [0xC0 - 0xDF], C = [0x00, 0x7F]; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; - -for (indexB = 0xC0; indexB <= 0xDF; indexB++) { - count++; - hexB = decimalToHexString(indexB); - result = true; - for (indexC = 0x00; indexC <= 0x7F; indexC++) { - hexC = decimalToHexString(indexC); - try { - decodeURIComponent("%" + hexB.substring(2) + "%" + hexC.substring(2)); - } catch (e) { - if ((e instanceof URIError) === true) continue; - } - result = false; - } - if (result !== true) { - if (indexO === 0) { - indexO = indexB; - } else { - if ((indexB - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = indexB; - } - } - indexP = indexB; - errorCount++; - } -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.13_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.13_T2.js deleted file mode 100644 index ddfb4be3b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.13_T2.js +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.2_A1.13_T2; - * @section: 15.1.3.2; - * @assertion: If B = 110xxxxx (n = 2) and C != 10xxxxxx (C - first of octets after B), throw URIError; - * @description: Complex tests. B = [0xC0 - 0xDF], C = [0xC0, 0xFF]; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; - -for (indexB = 0xC0; indexB <= 0xDF; indexB++) { - count++; - hexB = decimalToHexString(indexB); - result = true; - for (indexC = 0xC0; indexC <= 0xFF; indexC++) { - hexC = decimalToHexString(indexC); - try { - decodeURIComponent("%" + hexB.substring(2) + "%" + hexC.substring(2)); - } catch (e) { - if ((e instanceof URIError) === true) continue; - } - result = false; - } - if (result !== true) { - if (indexO === 0) { - indexO = indexB; - } else { - if ((indexB - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = indexB; - } - } - indexP = indexB; - errorCount++; - } -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.14_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.14_T1.js deleted file mode 100644 index b768d3158..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.14_T1.js +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.2_A1.14_T1; - * @section: 15.1.3.2; - * @assertion: If B = 1110xxxx (n = 3) and C != 10xxxxxx (C - first of octets after B), throw URIError; - * @description: Complex tests. B = [0xE0 - 0xEF], C = [0x00, 0x7F]; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; - -for (indexB = 0xE0; indexB <= 0xEF; indexB++) { - count++; - hexB = decimalToHexString(indexB); - result = true; - for (indexC = 0x00; indexC <= 0x7F; indexC++) { - hexC = decimalToHexString(indexC); - try { - decodeURIComponent("%" + hexB.substring(2) + "%" + hexC.substring(2) + "%A0"); - } catch (e) { - if ((e instanceof URIError) === true) continue; - } - result = false; - } - if (result !== true) { - if (indexO === 0) { - indexO = indexB; - } else { - if ((indexB - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = indexB; - } - } - indexP = indexB; - errorCount++; - } -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.14_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.14_T2.js deleted file mode 100644 index 6af0e02ae..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.14_T2.js +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.2_A1.14_T2; - * @section: 15.1.3.2; - * @assertion: If B = 1110xxxx (n = 3) and C != 10xxxxxx (C - first of octets after B), throw URIError; - * @description: Complex tests. B = [0xE0 - 0xEF], C = [0x00, 0x7F]; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; - -for (indexB = 0xE0; indexB <= 0xEF; indexB++) { - count++; - hexB = decimalToHexString(indexB); - result = true; - for (indexC = 0x00; indexC <= 0x7F; indexC++) { - hexC = decimalToHexString(indexC); - try { - decodeURIComponent("%" + hexB.substring(2) + "%A0" + "%" + hexC.substring(2)); - } catch (e) { - if ((e instanceof URIError) === true) continue; - } - result = false; - } - if (result !== true) { - if (indexO === 0) { - indexO = indexB; - } else { - if ((indexB - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = indexB; - } - } - indexP = indexB; - errorCount++; - } -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.14_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.14_T3.js deleted file mode 100644 index 996695a3c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.14_T3.js +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.2_A1.14_T3; - * @section: 15.1.3.2; - * @assertion: If B = 1110xxxx (n = 3) and C != 10xxxxxx (C - first of octets after B), throw URIError; - * @description: Complex tests. B = [0xE0 - 0xEF], C = [0xC0, 0xFF]; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; - -for (indexB = 0xE0; indexB <= 0xEF; indexB++) { - count++; - hexB = decimalToHexString(indexB); - result = true; - for (indexC = 0xC0; indexC <= 0xFF; indexC++) { - hexC = decimalToHexString(indexC); - try { - decodeURIComponent("%" + hexB.substring(2) + "%" + hexC.substring(2) + "%A0"); - } catch (e) { - if ((e instanceof URIError) === true) continue; - } - result = false; - } - if (result !== true) { - if (indexO === 0) { - indexO = indexB; - } else { - if ((indexB - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = indexB; - } - } - indexP = indexB; - errorCount++; - } -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.14_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.14_T4.js deleted file mode 100644 index 892981a86..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.14_T4.js +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.2_A1.14_T4; - * @section: 15.1.3.2; - * @assertion: If B = 1110xxxx (n = 3) and C != 10xxxxxx (C - first of octets after B), throw URIError; - * @description: Complex tests. B = [0xE0 - 0xEF], C = [0xC0, 0xFF]; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; - -for (indexB = 0xE0; indexB <= 0xEF; indexB++) { - count++; - hexB = decimalToHexString(indexB); - result = true; - for (indexC = 0xC0; indexC <= 0xFF; indexC++) { - hexC = decimalToHexString(indexC); - try { - decodeURIComponent("%" + hexB.substring(2) + "%A0" + "%" + hexC.substring(2)); - } catch (e) { - if ((e instanceof URIError) === true) continue; - } - result = false; - } - if (result !== true) { - if (indexO === 0) { - indexO = indexB; - } else { - if ((indexB - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = indexB; - } - } - indexP = indexB; - errorCount++; - } -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.15_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.15_T1.js deleted file mode 100644 index f43de8f40..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.15_T1.js +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.2_A1.15_T1; - * @section: 15.1.3.2; - * @assertion: If B = 11110xxx (n = 4) and C != 10xxxxxx (C - first of octets after B), throw URIError; - * @description: Complex tests. B = [0xF0 - 0x0F7], C = [0x00, 0x7F]; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; - -for (indexB = 0xF0; indexB <= 0xF7; indexB++) { - count++; - hexB = decimalToHexString(indexB); - result = true; - for (indexC = 0x00; indexC <= 0x7F; indexC++) { - hexC = decimalToHexString(indexC); - try { - decodeURIComponent("%" + hexB.substring(2) + "%" + hexC.substring(2) + "%A0%A0"); - } catch (e) { - if ((e instanceof URIError) === true) continue; - } - result = false; - } - if (result !== true) { - if (indexO === 0) { - indexO = indexB; - } else { - if ((indexB - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = indexB; - } - } - indexP = indexB; - errorCount++; - } -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.15_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.15_T2.js deleted file mode 100644 index e937b817a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.15_T2.js +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.2_A1.15_T2; - * @section: 15.1.3.2; - * @assertion: If B = 11110xxx (n = 4) and C != 10xxxxxx (C - first of octets after B), throw URIError; - * @description: Complex tests. B = [0xF0 - 0x0F7], C = [0x00, 0x7F]; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; - -for (indexB = 0xF0; indexB <= 0xF7; indexB++) { - count++; - hexB = decimalToHexString(indexB); - result = true; - for (indexC = 0x00; indexC <= 0x7F; indexC++) { - hexC = decimalToHexString(indexC); - try { - decodeURIComponent("%" + hexB.substring(2) + "%A0" + "%" + hexC.substring(2) + "%A0"); - } catch (e) { - if ((e instanceof URIError) === true) continue; - } - result = false; - } - if (result !== true) { - if (indexO === 0) { - indexO = indexB; - } else { - if ((indexB - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = indexB; - } - } - indexP = indexB; - errorCount++; - } -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.15_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.15_T3.js deleted file mode 100644 index 83f107f8c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.15_T3.js +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.2_A1.15_T3; - * @section: 15.1.3.2; - * @assertion: If B = 11110xxx (n = 4) and C != 10xxxxxx (C - first of octets after B), throw URIError; - * @description: Complex tests. B = [0xF0 - 0x0F7], C = [0x00, 0x7F]; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; - -for (indexB = 0xF0; indexB <= 0xF7; indexB++) { - count++; - hexB = decimalToHexString(indexB); - result = true; - for (indexC = 0x00; indexC <= 0x7F; indexC++) { - hexC = decimalToHexString(indexC); - try { - decodeURIComponent("%" + hexB.substring(2) + "%A0%A0" + "%" + hexC.substring(2)); - } catch (e) { - if ((e instanceof URIError) === true) continue; - } - result = false; - } - if (result !== true) { - if (indexO === 0) { - indexO = indexB; - } else { - if ((indexB - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = indexB; - } - } - indexP = indexB; - errorCount++; - } -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.15_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.15_T4.js deleted file mode 100644 index 845cb49a5..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.15_T4.js +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.2_A1.15_T4; - * @section: 15.1.3.2; - * @assertion: If B = 11110xxx (n = 4) and C != 10xxxxxx (C - first of octets after B), throw URIError; - * @description: Complex tests. B = [0xF0 - 0x0F7], C = [0xC0, 0xFF]; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; - -for (indexB = 0xF0; indexB <= 0xF7; indexB++) { - count++; - hexB = decimalToHexString(indexB); - result = true; - for (indexC = 0xC0; indexC <= 0xFF; indexC++) { - hexC = decimalToHexString(indexC); - try { - decodeURIComponent("%" + hexB.substring(2) + "%" + hexC.substring(2) + "%A0%A0"); - } catch (e) { - if ((e instanceof URIError) === true) continue; - } - result = false; - } - if (result !== true) { - if (indexO === 0) { - indexO = indexB; - } else { - if ((indexB - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = indexB; - } - } - indexP = indexB; - errorCount++; - } -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.15_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.15_T5.js deleted file mode 100644 index 9c8ac68a6..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.15_T5.js +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.2_A1.15_T5; - * @section: 15.1.3.2; - * @assertion: If B = 11110xxx (n = 4) and C != 10xxxxxx (C - first of octets after B), throw URIError; - * @description: Complex tests. B = [0xF0 - 0x0F7], C = [0xC0, 0xFF]; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; - -for (indexB = 0xF0; indexB <= 0xF7; indexB++) { - count++; - hexB = decimalToHexString(indexB); - result = true; - for (indexC = 0xC0; indexC <= 0xFF; indexC++) { - hexC = decimalToHexString(indexC); - try { - decodeURIComponent("%" + hexB.substring(2) + "%A0" + "%" + hexC.substring(2) + "%A0"); - } catch (e) { - if ((e instanceof URIError) === true) continue; - } - result = false; - } - if (result !== true) { - if (indexO === 0) { - indexO = indexB; - } else { - if ((indexB - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = indexB; - } - } - indexP = indexB; - errorCount++; - } -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.15_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.15_T6.js deleted file mode 100644 index 699dcbb21..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.15_T6.js +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.2_A1.15_T6; - * @section: 15.1.3.2; - * @assertion: If B = 11110xxx (n = 4) and C != 10xxxxxx (C - first of octets after B), throw URIError; - * @description: Complex tests. B = [0xF0 - 0x0F7], C = [0xC0, 0xFF]; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; - -for (indexB = 0xF0; indexB <= 0xF7; indexB++) { - count++; - hexB = decimalToHexString(indexB); - result = true; - for (indexC = 0xC0; indexC <= 0xFF; indexC++) { - hexC = decimalToHexString(indexC); - try { - decodeURIComponent("%" + hexB.substring(2) + "%A0%A0" + "%" + hexC.substring(2)); - } catch (e) { - if ((e instanceof URIError) === true) continue; - } - result = false; - } - if (result !== true) { - if (indexO === 0) { - indexO = indexB; - } else { - if ((indexB - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = indexB; - } - } - indexP = indexB; - errorCount++; - } -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.1_T1.js deleted file mode 100644 index 766c36bd3..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.1_T1.js +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.2_A1.1_T1; - * @section: 15.1.3.2; - * @assertion: If string.charAt(k) equal "%" and k + 2 >= string.length, throw URIError; - * @description: Complex tests; -*/ - -result = true; - -//CHECK#1 -try { - decodeURIComponent("%"); - result = false; -} catch(e) { - if ((e instanceof URIError) !== true) { - result = false; - } -} - -//CHECK#2 -try { - decodeURIComponent("%A"); - result = false; -} catch(e) { - if ((e instanceof URIError) !== true) { - result = false; - } -} - -//CHECK#3 -try { - decodeURIComponent("%1"); - result = false; -} catch(e) { - if ((e instanceof URIError) !== true) { - result = false; - } -} - -//CHECK#4 -try { - decodeURIComponent("% "); - result = false; -} catch(e) { - if ((e instanceof URIError) !== true) { - result = false; - } -} - -if (result !== true) { - $ERROR('#1: If string.charAt(k) equal "%" and k + 2 >= string.length, throw URIError'); -} - - - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.2_T1.js deleted file mode 100644 index be0789158..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.2_T1.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.2_A1.2_T1; - * @section: 15.1.3.2; - * @assertion: If B = string.charAt(k+1) + string.charAt(k+2) do not represent - * hexadecimal digits, throw URIError; - * @description: Complex tests; -*/ - -//CHECK -result = true; -var interval = [[0x00, 0x29], [0x40,0x40], [0x47, 0x60], [0x67, 0xFFFF]]; -for (indexI = 0; indexI < interval.length; indexI++) { - for (indexJ = interval[indexI][0]; indexJ <= interval[indexI][1]; indexJ++) { - try { - decodeURIComponent("%" + String.fromCharCode(indexJ) + "1"); - result = false; - } catch (e) { - if ((e instanceof URIError) !== true) { - result = false; - } - } - } -} - -if (result !== true) { - $ERROR('#1: If string.charAt(k+1) does not represent hexadecimal digits, throw URIError'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.2_T2.js deleted file mode 100644 index 868510bb4..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.2_T2.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.2_A1.2_T2; - * @section: 15.1.3.2; - * @assertion: If B = string.charAt(k+1) + string.charAt(k+2) do not represent - * hexadecimal digits, throw URIError; - * @description: Complex tests; -*/ - -//CHECK -result = true; -var interval = [[0x00, 0x29], [0x40,0x40], [0x47, 0x60], [0x67, 0xFFFF]]; -for (indexI = 0; indexI < interval.length; indexI++) { - for (indexJ = interval[indexI][0]; indexJ <= interval[indexI][1]; indexJ++) { - try { - decodeURIComponent("%" + "1" + String.fromCharCode(indexJ)); - result = false; - } catch (e) { - if ((e instanceof URIError) !== true) { - result = false; - } - } - } -} - -if (result !== true) { - $ERROR('#1: If string.charAt(k+2) does not represent hexadecimal digits, throw URIError'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.3_T1.js deleted file mode 100644 index 2236e8d01..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.3_T1.js +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.2_A1.3_T1; - * @section: 15.1.3.2; - * @assertion: If B = 10xxxxxx or B = 11111xxx, throw URIError; - * @description: Complex tests. B = 10xxxxxx -> B in [0x80 - 0xBF]; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; - -for (index = 0x80; index <= 0xBF; index++) { - count++; - hex = decimalToHexString(index); - try { - decodeURIComponent("%" + hex.substring(2)); - } catch (e) { - if ((e instanceof URIError) === true) continue; - } - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.3_T2.js deleted file mode 100644 index 8dd2a7413..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.3_T2.js +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.2_A1.3_T2; - * @section: 15.1.3.2; - * @assertion: If B = 10xxxxxx or B = 11111xxx, throw URIError; - * @description: Complex tests. B = 11111xxx -> B in [0xF8 - 0xFF]; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; - -for (index = 0xF8; index <= 0xFF; index++) { - count++; - hex = decimalToHexString(index); - try { - decodeURIComponent("%" + hex.substring(2)); - } catch (e) { - if ((e instanceof URIError) === true) continue; - } - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.4_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.4_T1.js deleted file mode 100644 index 71781b135..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.4_T1.js +++ /dev/null @@ -1,86 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.2_A1.4_T1; - * @section: 15.1.3.2; - * @assertion: If B = 110xxxxx (n = 2) and (k + 2) + 3 >= length, throw URIError; - * @description: Complex tests. B = [0xC0 - 0xDF]; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; - -for (index = 0xC0; index <= 0xDF; index++) { - count++; - str = ""; - result = true; - for (len = 0; len < 3; len++) { - hex = decimalToHexString(index); - try { - decodeURIComponent("%" + hex.substring(2) + str); - } catch (e) { - if ((e instanceof URIError) === true) continue; - } - result = false; - str = str + "1"; - } - if (result !== true) { - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; - } -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.5_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.5_T1.js deleted file mode 100644 index d219030b6..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.5_T1.js +++ /dev/null @@ -1,86 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.2_A1.5_T1; - * @section: 15.1.3.2; - * @assertion: If B = 1110xxxx (n = 3) and (k + 2) + 6 >= length, throw URIError; - * @description: Complex tests. B = [0xE0 - 0xEF]; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; - -for (index = 0xE0; index <= 0xEF; index++) { - count++; - str = ""; - result = true; - for (len = 0; len < 6; len++) { - hex = decimalToHexString(index); - try { - decodeURIComponent("%" + hex.substring(2) + str); - } catch (e) { - if ((e instanceof URIError) === true) continue; - } - result = false; - str = str + "1"; - } - if (result !== true) { - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; - } -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.6_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.6_T1.js deleted file mode 100644 index 83e0fca8e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.6_T1.js +++ /dev/null @@ -1,86 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.2_A1.6_T1; - * @section: 15.1.3.2; - * @assertion: If B = 11110xxx (n = 4) and (k + 2) + 9 >= length, throw URIError; - * @description: Complex tests. B = [0xF0 - 0xF7]; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; - -for (index = 0xF0; index <= 0xF7; index++) { - count++; - str = ""; - result = true; - for (len = 0; len < 9; len++) { - hex = decimalToHexString(index); - try { - decodeURIComponent("%" + hex.substring(2) + str); - } catch (e) { - if ((e instanceof URIError) === true) continue; - } - result = false; - str = str + "1"; - } - if (result !== true) { - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; - } -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.7_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.7_T1.js deleted file mode 100644 index 42978945a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.7_T1.js +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.2_A1.7_T1; - * @section: 15.1.3.2; - * @assertion: If B = 110xxxxx (n = 2) and string.charAt(k + 3) not equal "%", throw URIError; - * @description: Complex tests. B = [0xC0 - 0xDF]; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; - -for (index = 0xC0; index <= 0xDF; index++) { - count++; - hex = decimalToHexString(index); - try { - decodeURIComponent("%" + hex.substring(2) + "111"); - } catch (e) { - if ((e instanceof URIError) === true) continue; - } - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.8_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.8_T1.js deleted file mode 100644 index bfe77c70d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.8_T1.js +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.2_A1.8_T1; - * @section: 15.1.3.2; - * @assertion: If B = 1110xxxx (n = 3) and string.charAt(k + 3), - * string.charAt(k + 6) not equal "%", throw URIError; - * @description: Complex tests. B = [0xE0 - 0xEF], - * string.charAt(k + 3) not equal "%"; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; - -for (index = 0xE0; index <= 0xEF; index++) { - count++; - hex = decimalToHexString(index); - try { - decodeURIComponent("%" + hex.substring(2) + "111%A0"); - } catch (e) { - if ((e instanceof URIError) === true) continue; - } - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.8_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.8_T2.js deleted file mode 100644 index cbef6e553..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.8_T2.js +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.2_A1.8_T2; - * @section: 15.1.3.2; - * @assertion: If B = 1110xxxx (n = 3) and string.charAt(k + 3), - * string.charAt(k + 6) not equal "%", throw URIError; - * @description: Complex tests. B = [0xE0 - 0xEF], - * string.charAt(k + 6) not equal "%"; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; - -for (index = 0xE0; index <= 0xEF; index++) { - count++; - hex = decimalToHexString(index); - try { - decodeURIComponent("%" + hex.substring(2) + "%A0111"); - } catch (e) { - if ((e instanceof URIError) === true) continue; - } - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.9_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.9_T1.js deleted file mode 100644 index 5d435f780..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.9_T1.js +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.2_A1.9_T1; - * @section: 15.1.3.2; - * @assertion: If B = 11110xxx (n = 4) and string.charAt(k + 3), - * string.charAt(k + 6), string.charAt(k + 9) not equal "%", throw URIError; - * @description: Complex tests. B = [0xF0 - 0x0F7], - * string.charAt(k + 3) not equal "%"; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; - -for (index = 0xF0; index <= 0xF7; index++) { - count++; - hex = decimalToHexString(index); - try { - decodeURIComponent("%" + hex.substring(2) + "111%A0%A0"); - } catch (e) { - if ((e instanceof URIError) === true) continue; - } - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.9_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.9_T2.js deleted file mode 100644 index f035760c5..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.9_T2.js +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.2_A1.9_T2; - * @section: 15.1.3.2; - * @assertion: If B = 11110xxx (n = 4) and string.charAt(k + 3), - * string.charAt(k + 6), string.charAt(k + 9) not equal "%", throw URIError; - * @description: Complex tests. B = [0xF0 - 0x0F7], - * string.charAt(k + 6) not equal "%"; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; - -for (index = 0xF0; index <= 0xF7; index++) { - count++; - hex = decimalToHexString(index); - try { - decodeURIComponent("%" + hex.substring(2) + "%A0111%A0"); - } catch (e) { - if ((e instanceof URIError) === true) continue; - } - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.9_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.9_T3.js deleted file mode 100644 index ce0f7e6a9..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A1.9_T3.js +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.2_A1.9_T3; - * @section: 15.1.3.2; - * @assertion: If B = 11110xxx (n = 4) and string.charAt(k + 3), - * string.charAt(k + 6), string.charAt(k + 9) not equal "%", throw URIError; - * @description: Complex tests. B = [0xF0 - 0x0F7], - * string.charAt(k + 9) not equal "%"; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; - -for (index = 0xF0; index <= 0xF7; index++) { - count++; - hex = decimalToHexString(index); - try { - decodeURIComponent("%" + hex.substring(2) + "%A0%A0111"); - } catch (e) { - if ((e instanceof URIError) === true) continue; - } - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A2.1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A2.1_T1.js deleted file mode 100644 index f56c4c36c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A2.1_T1.js +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.2_A2.1_T1; - * @section: 15.1.3.2; - * @assertion: If string.charAt(k) not equal "%", return this char; - * @description: Complex tests; -*/ - -//CHECK -errorCount = 0; -count = 0; -for (indexI = 0; indexI <= 65535; indexI++) { - if (indexI !== 0x25) { - hex = decimalToHexString(indexI); - try { - var str = String.fromCharCode(indexI); - if (decodeURIComponent(str) !== str) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e){ - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A2.2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A2.2_T1.js deleted file mode 100644 index e0d6fe20b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A2.2_T1.js +++ /dev/null @@ -1,77 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.2_A2.2_T1; - * @section: 15.1.3.2; - * @assertion: If B1 = 0xxxxxxxx ([0x00 - 0x7F]), return B1; - * @description: Complex tests, use RFC 3629; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; -for (indexB1 = 0x00; indexB1 <= 0x7F; indexB1++) { - count++; - var hexB1 = decimalToHexString(indexB1); - var index = indexB1; - try { - hex = String.fromCharCode(index); - if (decodeURIComponent("%" + hexB1.substring(2)) === hex) continue; - } catch (e) {} - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A2.3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A2.3_T1.js deleted file mode 100644 index 8af8c1f6f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A2.3_T1.js +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.2_A2.3_T1; - * @section: 15.1.3.2; - * @assertion: If B1 = 110xxxxx ([0xC0 - 0xDF]), B2 = 10xxxxxx ([0x80 - 0xBF), without B1 = [0xC0, 0xC1], return UTF8(B1, B2); - * @description: Complex tests, use RFC 3629; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; - -for (indexB1 = 0xC2; indexB1 <= 0xDF; indexB1++) { - var hexB1 = decimalToHexString(indexB1); - for (indexB2 = 0x80; indexB2 <= 0xBF; indexB2++) { - count++; - var hexB2 = decimalToHexString(indexB2); - var index = (indexB1 & 0x1F) * 0x40 + (indexB2 & 0x3F); - try { - if (decodeURIComponent("%" + hexB1.substring(2) + "%" + hexB2.substring(2)) === String.fromCharCode(index)) continue; - } catch (e) {} - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; - } -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A2.4_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A2.4_T1.js deleted file mode 100644 index bdd9f511b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A2.4_T1.js +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.2_A2.4_T1; - * @section: 15.1.3.2; - * @assertion: If B1 = 1110xxxx ([0xE0 - 0xEF]), B2, B3 = 10xxxxxxx ([0x80 - 0xBF]), without [B1, B2] = [0xE0, 0x80 - 0x9F], [0xED, 0xA0 - 0xBF] (0xD800 - 0xDFFF), return UTF8(B1, B2, B3); - * @description: Complex tests, use RFC 3629; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; - -for (indexB1 = 0xE0; indexB1 <= 0xEF; indexB1++) { - var hexB1 = decimalToHexString(indexB1); - for (indexB2 = 0x80; indexB2 <= 0xBF; indexB2++) { - if ((indexB1 === 0xE0) && (indexB2 <= 0x9F)) continue; - if ((indexB1 === 0xED) && (0xA0 <= indexB2)) continue; - var hexB2 = decimalToHexString(indexB2); - for (indexB3 = 0x80; indexB3 <= 0xBF; indexB3++) { - count++; - var hexB3 = decimalToHexString(indexB3); - var index = (indexB1 & 0x0F) * 0x1000 + (indexB2 & 0x3F) * 0x40 + (indexB3 & 0x3F); - try { - if (decodeURIComponent("%" + hexB1.substring(2) + "%" + hexB2.substring(2) + "%" + hexB3.substring(2)) === String.fromCharCode(index)) continue; - } catch (e) {} - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; - } - } -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A2.5_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A2.5_T1.js deleted file mode 100644 index 89df40af0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A2.5_T1.js +++ /dev/null @@ -1,90 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.2_A2.5_T1; - * @section: 15.1.3.2; - * @assertion: If B1 = 11110xxx ([0xF0 - 0x0F4]), B2, B3, B4 = 10xxxxxxx ([0x80 - 0xBF]), without [B1, B2] = [0xF0, 0x80 - 0x9F], [0xF4, 0x90 - 0xBF], return UTF8(B1, B2, B3, B4); - * @description: Complex tests, use RFC 3629; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; - -for (indexB1 = 0xF0; indexB1 <= 0xF4; indexB1++) { - var hexB1 = decimalToHexString(indexB1); - for (indexB2 = 0x80; indexB2 <= 0xBF; indexB2++) { - if ((indexB1 === 0xF0) && (indexB2 <= 0x9F)) continue; - if ((indexB1 === 0xF4) && (indexB2 >= 0x90)) continue; - var hexB2 = decimalToHexString(indexB2); - for (indexB3 = 0x80; indexB3 <= 0xBF; indexB3++) { - var hexB3 = decimalToHexString(indexB3); - for (indexB4 = 0x80; indexB4 <= 0xBF; indexB4++) { - var hexB4 = decimalToHexString(indexB4); - count++; - var index = (indexB1 & 0x07) * 0x40000 + (indexB2 & 0x3F) * 0x1000 + (indexB3 & 0x3F) * 0x40 + (indexB4 & 0x3F); - var L = ((index - 0x10000) & 0x03FF) + 0xDC00; - var H = (((index - 0x10000) >> 10) & 0x03FF) + 0xD800; - try { - if (decodeURIComponent("%" + hexB1.substring(3) + "%" + hexB2.substring(3) + "%" + hexB3.substring(3) + "%" + hexB4.substring(3)) === String.fromCharCode(H) + String.fromCharCode(L)) continue; - } catch (e) {} - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; - } - } - } -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 4; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A3_T1.js deleted file mode 100644 index 44baf30f0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A3_T1.js +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.2_A3_T1; - * @section: 15.1.3.2; - * @assertion: Let reservedURIComponentSet be the empty string; - * @description: uriReserved and "#" not in reservedURIComponentSet. HexDigit in [0..9, A..F]; -*/ - -//CHECK#1 -if (decodeURIComponent("%3B") !== ";") { - $ERROR('#1: decodeURIComponent("%3B") equal ";", not "%3B"'); -} - -//CHECK#2 -if (decodeURIComponent("%2F") !== "/") { - $ERROR('#2: decodeURIComponent("%2F") equal "/", not "%2F"'); -} - -//CHECK#3 -if (decodeURIComponent("%3F") !== "?") { - $ERROR('#3: decodeURIComponent("%3F") equal "?", not "%3F"'); -} - -//CHECK#4 -if (decodeURIComponent("%3A") !== ":") { - $ERROR('#4: decodeURIComponent("%3A") equal ":", not "%3A"'); -} - -//CHECK#5 -if (decodeURIComponent("%40") !== "@") { - $ERROR('#5: decodeURIComponent("%40") equal "@", not "%40"'); -} - -//CHECK#6 -if (decodeURIComponent("%26") !== "&") { - $ERROR('#6: decodeURIComponent("%26") equal "&", not "%26"'); -} - -//CHECK#7 -if (decodeURIComponent("%3D") !== "=") { - $ERROR('#7.1: decodeURIComponent("%3D") equal "=", not "%3D"'); -} - -//CHECK#8 -if (decodeURIComponent("%2B") !== "+") { - $ERROR('#8.1: decodeURIComponent("%2B") equal "+", not "%2B"'); -} - -//CHECK#9 -if (decodeURIComponent("%24") !== "$") { - $ERROR('#9: decodeURIComponent("%24") equal "$", not "%24"'); -} - -//CHECK#10 -if (decodeURIComponent("%2C") !== ",") { - $ERROR('#10: decodeURIComponent("%2C") equal ",", not "%2C"'); -} - -//CHECK#11 -if (decodeURIComponent("%23") !== "#") { - $ERROR('#11: decodeURIComponent("%23") equal "#", not "%23"'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A3_T2.js deleted file mode 100644 index 8b81e97b8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A3_T2.js +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.2_A3_T2; - * @section: 15.1.3.2; - * @assertion: Let reservedURIComponentSet be the empty string; - * @description: uriReserved and "#" not in reservedURIComponentSet. HexDigit in [0..9, a..f]; -*/ - -//CHECK#1 -if (decodeURIComponent("%3b") !== ";") { - $ERROR('#1: decodeURIComponent("%3b") equal ";", not "%3B" or "%3b"'); -} - -//CHECK#2 -if (decodeURIComponent("%2f") !== "/") { - $ERROR('#2: decodeURIComponent("%2f") equal "/", not "%2F" or "%2f"'); -} - -//CHECK#3 -if (decodeURIComponent("%3f") !== "?") { - $ERROR('#3: decodeURIComponent("%3f") equal "?", not "%3F" or "%3f"'); -} - -//CHECK#4 -if (decodeURIComponent("%3a") !== ":") { - $ERROR('#4: decodeURIComponent("%3a") equal ":", not "%3A" or "%3a"'); -} - -//CHECK#5 -if (decodeURIComponent("%40") !== "@") { - $ERROR('#5: decodeURIComponent("%40") equal "@", not "%40"'); -} - -//CHECK#6 -if (decodeURIComponent("%26") !== "&") { - $ERROR('#6: decodeURIComponent("%26") equal "&", not "%26"'); -} - -//CHECK#7 -if (decodeURIComponent("%3d") !== "=") { - $ERROR('#7.1: decodeURIComponent("%3d") equal "=", not "%3D" or "%3d"'); -} - -//CHECK#8 -if (decodeURIComponent("%2b") !== "+") { - $ERROR('#8.1: decodeURIComponent("%2b") equal "+", not "%2B" or "%2b"'); -} - -//CHECK#9 -if (decodeURIComponent("%24") !== "$") { - $ERROR('#9: decodeURIComponent("%24") equal "$", not "%24"'); -} - -//CHECK#10 -if (decodeURIComponent("%2c") !== ",") { - $ERROR('#10: decodeURIComponent("%2c") equal ",", not "%2C" or "%2c"'); -} - -//CHECK#11 -if (decodeURIComponent("%23") !== "#") { - $ERROR('#11: decodeURIComponent("%23") equal "#", not "%23"'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A3_T3.js deleted file mode 100644 index c52dcc73d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A3_T3.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.2_A3_T3; - * @section: 15.1.3.2; - * @assertion: Let reservedURIComponentSet be the empty string; - * @description: Complex test; -*/ - -//CHECK#1 -if (decodeURIComponent("%3B%2F%3F%3A%40%26%3D%2B%24%2C%23") !== ";/?:@&=+$,#") { - $ERROR('#1: decodeURIComponent("%3B%2F%3F%3A%40%26%3D%2B%24%2C%23") equal ";/?:@&=+$,#", not "%3B%2F%3F%3A%40%26%3D%2B%24%2C%23"'); -} - -//CHECK#2 -if (decodeURIComponent("%3b%2f%3f%3a%40%26%3d%2b%24%2c%23") !== ";/?:@&=+$,#") { - $ERROR('#2: decodeURIComponent("%3b%2f%3f%3a%40%26%3d%2b%24%2c%23") equal ";/?:@&=+$,#" or "%3B%2F%3F%3A%40%26%3D%2B%24%2C%23", not "%3b%2f%3f%3a%40%26%3d%2b%24%2c%23"'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A4_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A4_T1.js deleted file mode 100644 index f3082b14c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A4_T1.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.2_A4_T1; - * @section: 15.1.3.2; - * @assertion: URI tests; - * @description: Checking ENGLISH ALPHABET; -*/ - -//CHECK#1 -if (decodeURIComponent("http://unipro.ru/0123456789") !== "http://unipro.ru/0123456789") { - $ERROR('#1: http://unipro.ru/0123456789'); -} - -//CHECK#2 -if (decodeURIComponent("%41%42%43%44%45%46%47%48%49%4A%4B%4C%4D%4E%4F%50%51%52%53%54%55%56%57%58%59%5A") !== "ABCDEFGHIJKLMNOPQRSTUVWXYZ") { - $ERROR('#2: ABCDEFGHIJKLMNOPQRSTUVWXYZ'); -} - -//CHECK#3 -if (decodeURIComponent("%61%62%63%64%65%66%67%68%69%6A%6B%6C%6D%6E%6F%70%71%72%73%74%75%76%77%78%79%7A") !== "abcdefghijklmnopqrstuvwxyz") { - $ERROR('#3: abcdefghijklmnopqrstuvwxyz'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A4_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A4_T2.js deleted file mode 100644 index 3a3ad1563..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A4_T2.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.2_A4_T2; - * @section: 15.1.3.2; - * @assertion: URI tests; - * @description: Checking RUSSIAN ALPHABET; -*/ - -//CHECK#1 -if (decodeURIComponent("http://ru.wikipedia.org/wiki/%d0%ae%D0%bd%D0%B8%D0%BA%D0%BE%D0%B4") !== "http://ru.wikipedia.org/wiki/Юникод") { - $ERROR('#1: http://ru.wikipedia.org/wiki/Юникод'); -} - -//CHECK#2 -if (decodeURIComponent("http://ru.wikipedia.org/wiki/%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4#%D0%A1%D1%81%D1%8B%D0%BB%D0%BA%D0%B8") !== "http://ru.wikipedia.org/wiki/Юникод#Ссылки") { - $ERROR('#2: http://ru.wikipedia.org/wiki/Юникод#Ссылки'); -} - -//CHECK#3 -if (decodeURIComponent("http://ru.wikipedia.org/wiki/%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4%23%D0%92%D0%B5%D1%80%D1%81%D0%B8%D0%B8%20%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4%D0%B0") !== "http://ru.wikipedia.org/wiki/Юникод#Версии Юникода") { - $ERROR('#3: http://ru.wikipedia.org/wiki/Юникод%23Версии Юникода'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A4_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A4_T3.js deleted file mode 100644 index ffd81cf8f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A4_T3.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.2_A4_T3; - * @section: 15.1.3.2; - * @assertion: URI tests; - * @description: Checking URL with Line Terminator; -*/ - -//CHECK#1 -if (decodeURIComponent("http://unipro.ru/%0Aabout") !== "http://unipro.ru/\nabout") { - $ERROR('#1: http://unipro.ru/%A0about'); -} - -//CHECK#2 -if (decodeURIComponent("http://unipro.ru/%0Babout") !== "http://unipro.ru/\vabout") { - $ERROR('#2: http://unipro.ru/%0Babout'); -} - -//CHECK#3 -if (decodeURIComponent("http://unipro.ru/%0Cabout") !== "http://unipro.ru/\fabout") { - $ERROR('#3: http://unipro.ru/%0Cabout'); -} - -//CHECK#4 -if (decodeURIComponent("http://unipro.ru/%0Dabout") !== "http://unipro.ru/\rabout") { - $ERROR('#4: http://unipro.ru/%0Dabout'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A4_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A4_T4.js deleted file mode 100644 index 12acfd2a3..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A4_T4.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.2_A4_T4; - * @section: 15.1.3.2; - * @assertion: URI tests; - * @description: Test some url; -*/ - -//CHECK#1 -if (decodeURIComponent("") !== "") { - $ERROR('#1: ""'); -} - -//CHECK#2 -if (decodeURIComponent("http://unipro.ru") !== "http://unipro.ru") { - $ERROR('#2: http://unipro.ru'); -} - -//CHECK#3 -if (decodeURIComponent("http:%2f%2Fwww.google.ru/support/jobs/bin/static.py%3Fpage%3dwhy-ru.html%26sid%3Dliveandwork") !== "http://www.google.ru/support/jobs/bin/static.py?page=why-ru.html&sid=liveandwork") { - $ERROR('#3: http:%2f%2Fwww.google.ru/support/jobs/bin/static.py%3Fpage3dwhy-ru.html%26sid3Dliveandwork"'); -} - -//CHECK#4 -if (decodeURIComponent("http:%2F%2Fen.wikipedia.org/wiki/UTF-8%23Description") !== "http://en.wikipedia.org/wiki/UTF-8#Description") { - $ERROR('#4: http:%2F%2Fen.wikipedia.org/wiki/UTF-8%23Description'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A5.1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A5.1.js deleted file mode 100644 index 296a9e7f1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A5.1.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.2_A5.1; - * @section: 15.1.3.2, 15.2.4.7, 12.6.4; - * @assertion: The length property of decodeURIComponent has the attribute DontEnum; - * @description: Checking use propertyIsEnumerable, for-in; -*/ - - -//CHECK#1 -if (decodeURIComponent.propertyIsEnumerable('length') !== false) { - $ERROR('#1: decodeURIComponent.propertyIsEnumerable(\'length\') === false. Actual: ' + (decodeURIComponent.propertyIsEnumerable('length'))); -} - -//CHECK#2 -result = true; -for (p in decodeURIComponent){ - if (p === "length") { - result = false; - } -} - -if (result !== true) { - $ERROR('#2: result = true; for (p in decodeURIComponent) { if (p === "length") result = false; } result === true;'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A5.2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A5.2.js deleted file mode 100644 index d37a04f39..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A5.2.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.2_A5.2; - * @section: 15.1.3.2, 15.2.4.5, 11.4.1; - * @assertion: The length property of decodeURIComponent has the attribute DontDelete; - * @description: Checking use hasOwnProperty, delete; -*/ - -//CHECK#1 -if (decodeURIComponent.hasOwnProperty('length') !== true) { - $FAIL('#1: decodeURIComponent.hasOwnProperty(\'length\') === true. Actual: ' + (decodeURIComponent.hasOwnProperty('length'))); -} - -delete decodeURIComponent.length; - -//CHECK#2 -if (decodeURIComponent.hasOwnProperty('length') !== true) { - $ERROR('#2: delete decodeURIComponent.length; decodeURIComponent.hasOwnProperty(\'length\') === true. Actual: ' + (decodeURIComponent.hasOwnProperty('length'))); -} - -//CHECK#3 -if (decodeURIComponent.length === undefined) { - $ERROR('#3: delete decodeURIComponent.length; decodeURIComponent.length !== undefined'); -} - - - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A5.3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A5.3.js deleted file mode 100644 index d94f889d5..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A5.3.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.2_A5.3; - * @section: 15.1.3.2; - * @assertion: The length property of decodeURIComponent has the attribute ReadOnly; - * @description: Checking if varying the length property fails; -*/ - -//CHECK#1 -x = decodeURIComponent.length; -decodeURIComponent.length = Infinity; -if (decodeURIComponent.length !== x) { - $ERROR('#1: x = decodeURIComponent.length; decodeURIComponent.length = Infinity; decodeURIComponent.length === x. Actual: ' + (decodeURIComponent.length)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A5.4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A5.4.js deleted file mode 100644 index 23c5bfb50..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A5.4.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.2_A5.4; - * @section: 15.1.3.2; - * @assertion: The length property of decodeURIComponent is 1; - * @description: decodeURIComponent.length === 1; -*/ - -//CHECK#1 -if (decodeURIComponent.length !== 1) { - $ERROR('#1: decodeURIComponent.length === 1. Actual: ' + (decodeURIComponent.length)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A5.5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A5.5.js deleted file mode 100644 index 3d5685ede..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A5.5.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.2_A5.5; - * @section: 15.1.3.2, 15.2.4.7, 12.6.4; - * @assertion: The decodeURIComponent property has the attribute DontEnum; - * @description: Checking use propertyIsEnumerable, for-in; -*/ - - -//CHECK#1 -if (this.propertyIsEnumerable('decodeURIComponent') !== false) { - $ERROR('#1: this.propertyIsEnumerable(\'decodeURIComponent\') === false. Actual: ' + (this.propertyIsEnumerable('decodeURIComponent'))); -} - -//CHECK#2 -result = true; -for (p in this){ - if (p === "decodeURIComponent") { - result = false; - } -} - -if (result !== true) { - $ERROR('#2: result = true; for (p in this) { if (p === "decodeURIComponent") result = false; } result === true;'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A5.6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A5.6.js deleted file mode 100644 index 3822f5c32..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A5.6.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.1.3.2_A5.6; -* @section: 15.1.3.2; -* @assertion: The decodeURIComponent property has not prototype property; -* @description: Checking decodeURIComponent.prototype; -*/ - -//CHECK#1 -if (decodeURIComponent.prototype !== undefined) { - $ERROR('#1: decodeURIComponent.prototype === undefined. Actual: ' + (decodeURIComponent.prototype)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A5.7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A5.7.js deleted file mode 100644 index 515d9998c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A5.7.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.1.3.2_A5.7; -* @section: 15.1.3.2, 11.2.2; -* @assertion: The decodeURIComponent property can't be used as constructor; -* @description: If property does not implement the internal [[Construct]] method, throw a TypeError exception; -*/ - -//CHECK#1 - -try { - new decodeURIComponent(); - $ERROR('#1.1: new decodeURIComponent() throw TypeError. Actual: ' + (new decodeURIComponent())); -} catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1.2: new decodeURIComponent() throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A6_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A6_T1.js deleted file mode 100644 index 30c2324b7..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.2_decodeURIComponent/S15.1.3.2_A6_T1.js +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.2_A6_T1; - * @section: 15.1.3.2, 9.8, 8.6.2.6; - * @assertion: Operator use ToString; - * @description: If Type(value) is Object, evaluate ToPrimitive(value, String); -*/ - -//CHECK#1 -var object = {valueOf: function() {return "%5E"}}; -if (decodeURIComponent(object) !== "[object Object]") { - $ERROR('#1: var object = {valueOf: function() {return "%5E"}}; decodeURIComponent(object) === [object Object]. Actual: ' + (decodeURIComponent(object))); -} - -//CHECK#2 -var object = {valueOf: function() {return ""}, toString: function() {return "%5E"}}; -if (decodeURIComponent(object) !== "^") { - $ERROR('#2: var object = {valueOf: function() {return ""}, toString: function() {return "%5E"}}; decodeURIComponent(object) === "^". Actual: ' + (decodeURIComponent(object))); -} - -//CHECK#3 -var object = {valueOf: function() {return "%5E"}, toString: function() {return {}}}; -if (decodeURIComponent(object) !== "^") { - $ERROR('#3: var object = {valueOf: function() {return "%5E"}, toString: function() {return {}}}; decodeURIComponent(object) === "^". Actual: ' + (decodeURIComponent(object))); -} - -//CHECK#4 -try { - var object = {valueOf: function() {throw "error"}, toString: function() {return "%5E"}}; - if (decodeURIComponent(object) !== "^") { - $ERROR('#4.1: var object = {valueOf: function() {throw "error"}, toString: function() {return "%5E"}}; decodeURIComponent(object) === "^". Actual: ' + (decodeURIComponent(object))); - } -} -catch (e) { - if (e === "error") { - $ERROR('#4.2: var object = {valueOf: function() {throw "error"}, toString: function() {return "%5E"}}; decodeURIComponent(object) not throw "error"'); - } else { - $ERROR('#4.3: var object = {valueOf: function() {throw "error"}, toString: function() {return "%5E"}}; decodeURIComponent(object) not throw Error. Actual: ' + (e)); - } -} - -//CHECK#5 -var object = {toString: function() {return "%5E"}}; -if (decodeURIComponent(object) !== "^") { - $ERROR('#5: var object = {toString: function() {return "%5E"}}; decodeURIComponent(object) === "^". Actual: ' + (decodeURIComponent(object))); -} - -//CHECK#6 -var object = {valueOf: function() {return {}}, toString: function() {return "%5E"}} -if (decodeURIComponent(object) !== "^") { - $ERROR('#6: var object = {valueOf: function() {return {}}, toString: function() {return "%5E"}}; decodeURIComponent(object) === "^". Actual: ' + (decodeURIComponent(object))); -} - -//CHECK#7 -try { - var object = {valueOf: function() {return "%5E"}, toString: function() {throw "error"}}; - decodeURIComponent(object); - $ERROR('#7.1: var object = {valueOf: function() {return "%5E"}, toString: function() {throw "error"}}; decodeURIComponent(object) throw "error". Actual: ' + (decodeURIComponent(object))); -} -catch (e) { - if (e !== "error") { - $ERROR('#7.2: var object = {valueOf: function() {return "%5E"}, toString: function() {throw "error"}}; decodeURIComponent(object) throw "error". Actual: ' + (e)); - } -} - -//CHECK#8 -try { - var object = {valueOf: function() {return {}}, toString: function() {return {}}}; - decodeURIComponent(object); - $ERROR('#8.1: var object = {valueOf: function() {return {}}, toString: function() {return {}}}; decodeURIComponent(object) throw TypeError. Actual: ' + (decodeURIComponent(object))); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#8.2: var object = {valueOf: function() {return {}}, toString: function() {return {}}}; decodeURIComponent(object) throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A1.1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A1.1_T1.js deleted file mode 100644 index 241ea9366..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A1.1_T1.js +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.3_A1.1_T1; - * @section: 15.1.3.3; - * @assertion: If string.charAt(k) in [0xDC00 - 0xDFFF], throw URIError; - * @description: Complex tests; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; - -for (index = 0xDC00; index <= 0xDFFF; index++) { - count++; - hex = decimalToHexString(index); - try { - encodeURI(String.fromCharCode(index)); - } catch (e) { - if ((e instanceof URIError) === true) continue; - } - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A1.1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A1.1_T2.js deleted file mode 100644 index 0480311c5..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A1.1_T2.js +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.3_A1.1_T2; - * @section: 15.1.3.3; - * @assertion: If string.charAt(k) in [0xDC00 - 0xDFFF], throw URIError; - * @description: Complex tests; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; - -for (index = 0xDC00; index <= 0xDFFF; index++) { - count++; - hex = decimalToHexString(index); - try { - encodeURI(String.fromCharCode(index, 0x0041)); - } catch (e) { - if ((e instanceof URIError) === true) continue; - } - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A1.2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A1.2_T1.js deleted file mode 100644 index 2fe4d8a3f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A1.2_T1.js +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.3_A1.2_T1; - * @section: 15.1.3.3; - * @assertion: If string.charAt(k) in [0xD800 - 0xDBFF] and string.length = k + 1, throw URIError; - * @description: Complex tests; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; - -for (index = 0xD800; index <= 0xDBFF; index++) { - count++; - hex = decimalToHexString(index); - try { - encodeURI(String.fromCharCode(index)); - } catch (e) { - if ((e instanceof URIError) === true) continue; - } - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A1.2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A1.2_T2.js deleted file mode 100644 index 93484b815..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A1.2_T2.js +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.3_A1.2_T2; - * @section: 15.1.3.3; - * @assertion: If string.charAt(k) in [0xD800 - 0xDBFF] and string.length = k + 1, throw URIError; - * @description: Complex tests; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; - -for (index = 0xD800; index <= 0xDBFF; index++) { - count++; - hex = decimalToHexString(index); - try { - encodeURI(String.fromCharCode(0x0041, index)); - } catch (e) { - if ((e instanceof URIError) === true) continue; - } - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A1.3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A1.3_T1.js deleted file mode 100644 index e933a9b7a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A1.3_T1.js +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.3_A1.3_T1; - * @section: 15.1.3.3; - * @assertion: If string.charAt(k) in [0xD800 - 0xDBFF] and string.charAt(k+1) not in [0xDC00 - 0xDFFF], throw URIError; - * @description: Complex tests, string.charAt(k+1) in [0x0000, 0xD7FF, 0xD800, 0xDBFE, 0xDBFF, 0xE000, 0xFFFF]; -*/ - -chars = [0x0000, 0xD7FF, 0xD800, 0xDBFE, 0xDBFF, 0xE000, 0xFFFF]; -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; - -for (index = 0xD800; index <= 0xDBFF; index++) { - count++; - res = true; - for (indexC = 0; indexC < chars.length; indexC++) { - hex = decimalToHexString(index); - try { - encodeURI(String.fromCharCode(index, chars[indexC])); - } catch (e) { - if ((e instanceof URIError) === true) continue; - } - res = false; - } - if (res !== true) { - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; - } -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A2.1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A2.1_T1.js deleted file mode 100644 index 77f76d078..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A2.1_T1.js +++ /dev/null @@ -1,86 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.3_A2.1_T1; - * @section: 15.1.3.3; - * @assertion: If string.charAt(k) in [0x0000 - 0x007F]\[uriReserved, uriUnescaped, #], return 1 octet (00000000 0zzzzzzz -> 0zzzzzzz); - * @description: Complex tests, use RFC 3629; -*/ - -uriReserved = [";", "/", "?", ":", "@", "&", "=", "+", "$", ","]; -uriUnescaped = ["-", "_", ".", "!", "~", "*", "'", "(", ")", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]; -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; - -l : -for (index = 0x0000; index <= 0x007F; index++) { - count++; - str = String.fromCharCode(index); - for (indexC = 0; indexC < uriReserved.length; indexC++) { - if (uriReserved[indexC] === str) continue l; - } - for (indexC = 0; indexC < uriUnescaped.length; indexC++) { - if (uriUnescaped[indexC] === str) continue l; - } - if ("#" === str) continue l; - try { - if (encodeURI(str).toUpperCase() === "%" + decimalToHexString(index).substring(2)) continue l; - } catch(e) {} - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A2.2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A2.2_T1.js deleted file mode 100644 index 319e5ae36..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A2.2_T1.js +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.3_A2.2_T1; - * @section: 15.1.3.3; - * @assertion: If string.charAt(k) in [0x0080 - 0x07FF], return 2 octets (00000yyy yyzzzzzz -> 110yyyyy 10zzzzzz); - * @description: Complex tests, use RFC 3629; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; -l: -for (index = 0x0080; index <= 0x07FF; index++) { - count++; - hex1 = decimalToHexString(0x0080 + (index & 0x003F)).substring(2); - hex2 = decimalToHexString(0x00C0 + (index & 0x07C0) / 0x0040).substring(2); - str = String.fromCharCode(index); - try { - if (encodeURI(str).toUpperCase() === "%" + hex2 + "%" + hex1) continue; - } catch(e) {} - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A2.3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A2.3_T1.js deleted file mode 100644 index 353ca1479..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A2.3_T1.js +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.3_A2.3_T1; - * @section: 15.1.3.3; - * @assertion: If string.charAt(k) in [0x0800 - 0xD7FF], return 3 octets (xxxxyyyy yyzzzzzz -> 1110xxxx 10yyyyyy 10zzzzzz); - * @description: Complex tests, use RFC 3629; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; -for (index = 0x0800; index <= 0xD7FF; index++) { - count++; - hex1 = decimalToHexString(0x0080 + (index & 0x003F)).substring(2); - hex2 = decimalToHexString(0x0080 + (index & 0x0FC0) / 0x0040).substring(2); - hex3 = decimalToHexString(0x00E0 + (index & 0xF000) / 0x1000).substring(2); - str = String.fromCharCode(index); - try { - if (encodeURI(str).toUpperCase() === "%" + hex3 + "%" + hex2 + "%" + hex1) continue; - } catch(e) {} - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A2.4_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A2.4_T1.js deleted file mode 100644 index e8e10bbae..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A2.4_T1.js +++ /dev/null @@ -1,88 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.3_A2.4_T1; - * @section: 15.1.3.3; - * @assertion: If string.charAt(k) in [0xD800 - 0xDBFF] and string.charAt(k+1) in [0xDC00 � 0xDFFF], return 4 octets (000wwwxx xxxxyyyy yyzzzzzz -> 11110www 10xxxxxx 10yyyyyy 10zzzzzz); - * @description: Complex tests, use RFC 3629, string.charAt(k+1) in [0xDC00, 0xDDFF, 0xDFFF]; -*/ - -chars = [0xDC00, 0xDDFF, 0xDFFF]; -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; -for (index = 0xD800; index <= 0xDBFF; index++) { - res = true; - for (indexC = 0; indexC < chars.length; indexC++) { - index1 = (index - 0xD800) * 0x400 + (chars[indexC] - 0xDC00) + 0x10000; - hex1 = decimalToHexString(0x0080 + (index1 & 0x003F)).substring(2); - hex2 = decimalToHexString(0x0080 + (index1 & 0x0FC0) / 0x0040).substring(2); - hex3 = decimalToHexString(0x0080 + (index1 & 0x3F000) / 0x1000).substring(2); - hex4 = decimalToHexString(0x00F0 + (index1 & 0x1C0000) / 0x40000).substring(2); - str = String.fromCharCode(index, chars[indexC]); - try { - if (encodeURI(str).toUpperCase() !== "%" + hex4 + "%" + hex3 + "%" + hex2 + "%" + hex1) { - res = false; - } - } catch(e) {res = false} - } - if (res !== true) { - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; - } - count++; -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A2.4_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A2.4_T2.js deleted file mode 100644 index d078b069b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A2.4_T2.js +++ /dev/null @@ -1,88 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.3_A2.4_T2; - * @section: 15.1.3.3; - * @assertion: If string.charAt(k) in [0xD800 - 0xDBFF] and string.charAt(k+1) in [0xDC00 � 0xDFFF], return 4 octets (000wwwxx xxxxyyyy yyzzzzzz -> 11110www 10xxxxxx 10yyyyyy 10zzzzzz); - * @description: Complex tests, use RFC 3629, string.charAt(k) in [0xD800, 0xDBFF, 0xD9FF]; -*/ - -chars = [0xD800, 0xDBFF, 0xD9FF]; -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; -for (index = 0xDC00; index <= 0xDFFF; index++) { - res = true; - for (indexC = 0; indexC < chars.length; indexC++) { - index1 = (chars[indexC] - 0xD800) * 0x400 + (index - 0xDC00) + 0x10000; - hex1 = decimalToHexString(0x0080 + (index1 & 0x003F)).substring(2); - hex2 = decimalToHexString(0x0080 + (index1 & 0x0FC0) / 0x0040).substring(2); - hex3 = decimalToHexString(0x0080 + (index1 & 0x3F000) / 0x1000).substring(2); - hex4 = decimalToHexString(0x00F0 + (index1 & 0x1C0000) / 0x40000).substring(2); - str = String.fromCharCode(chars[indexC], index); - try { - if (encodeURI(str).toUpperCase() !== "%" + hex4 + "%" + hex3 + "%" + hex2 + "%" + hex1) { - res = false; - } - } catch(e) {res = false} - } - if (res !== true) { - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; - } - count++; -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A2.5_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A2.5_T1.js deleted file mode 100644 index 9ec1a2b2a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A2.5_T1.js +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.3_A2.5_T1; - * @section: 15.1.3.3; - * @assertion: If string.charAt(k) in [0xE000 - 0xFFFF], return 3 octets (xxxxyyyy yyzzzzzz -> 1110xxxx 10yyyyyy 10zzzzzz); - * @description: Complex tests, use RFC 3629; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; -for (index = 0xE000; index <= 0xFFFF; index++) { - count++; - hex1 = decimalToHexString(0x0080 + (index & 0x003F)).substring(2); - hex2 = decimalToHexString(0x0080 + (index & 0x0FC0) / 0x0040).substring(2); - hex3 = decimalToHexString(0x00E0 + (index & 0xF000) / 0x1000).substring(2); - str = String.fromCharCode(index); - try { - if (encodeURI(str).toUpperCase() === "%" + hex3 + "%" + hex2 + "%" + hex1) continue; - } catch(e) {} - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A3.1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A3.1_T1.js deleted file mode 100644 index b3119441f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A3.1_T1.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.3_A3.1_T1; - * @section: 15.1.3.3; - * @assertion: unescapedURISet containing one instance of each character valid in uriReserved; - * @description: Complex tests; -*/ - -uriReserved = [";", "/", "?", ":", "@", "&", "=", "+", "$", ","]; -for (indexC = 0; indexC < uriReserved.length; indexC++) { - var str = uriReserved[indexC]; - if (encodeURI(str) !== str) { - $ERROR('#' + (indexC + 1) + ': unescapedURISet containing' + str); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A3.2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A3.2_T1.js deleted file mode 100644 index f2d16c1e7..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A3.2_T1.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.3_A3.2_T1; - * @section: 15.1.3.3; - * @assertion: unescapedURISet containing one instance of each character valid in uriUnescaped; - * @description: Complex tests, uriUnescaped :: uriAlpha; -*/ - -uriAlpha = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]; -for (indexC = 0; indexC < uriAlpha.length; indexC++) { - var str = uriAlpha[indexC]; - if (encodeURI(str) !== str) { - $ERROR('#' + (indexC + 1) + ': unescapedURISet containing ' + str); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A3.2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A3.2_T2.js deleted file mode 100644 index 802b73d46..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A3.2_T2.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.3_A3.2_T2; - * @section: 15.1.3.3; - * @assertion: unescapedURISet containing one instance of each character valid in uriUnescaped; - * @description: Complex tests, uriUnescaped :: DecimalDigit; -*/ - -DecimalDigit = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]; -for (indexC = 0; indexC < DecimalDigit.length; indexC++) { - var str = DecimalDigit[indexC]; - if (encodeURI(str) !== str) { - $ERROR('#' + (indexC + 1) + ': unescapedURISet containing' + str); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A3.2_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A3.2_T3.js deleted file mode 100644 index 5c64bb272..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A3.2_T3.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.3_A3.2_T3; - * @section: 15.1.3.3; - * @assertion: unescapedURISet containing one instance of each character valid in uriUnescaped; - * @description: Complex tests, uriUnescaped :: uriMark; -*/ - -uriMark = ["-", "_", ".", "!", "~", "*", "'", "(", ")"]; -for (indexC = 0; indexC < uriMark.length; indexC++) { - var str = uriMark[indexC]; - if (encodeURI(str) !== str) { - $ERROR('#' + (indexC + 1) + ': unescapedURISet containing' + str); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A3.3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A3.3_T1.js deleted file mode 100644 index 8be71a67d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A3.3_T1.js +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.3_A3.3_T1; - * @section: 15.1.3.3; - * @assertion: unescapedURISet containing "#"; - * @description: encodeURI("#") === "#"; -*/ - -if (encodeURI("#") !== "#") { - $ERROR('#1: unescapedURISet containing "#"'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A4_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A4_T1.js deleted file mode 100644 index 2f297e5a3..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A4_T1.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.3_A4_T1; - * @section: 15.1.3.3; - * @assertion: URI tests; - * @description: Checking ENGLISH ALPHABET; -*/ - -//CHECK#1 -if (encodeURI("http://unipro.ru/0123456789") !== "http://unipro.ru/0123456789") { - $ERROR('#1: http://unipro.ru/0123456789'); -} - -//CHECK#2 -if (encodeURI("aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ") !== "aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ") { - $ERROR('#2: aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ'); -} - -//CHECK#3 -if (encodeURI("aA_bB-cC.dD!eE~fF*gG'hH(iI)jJ;kK/lL?mM:nN@oO&pP=qQ+rR$sS,tT9uU8vV7wW6xX5yY4zZ") !== "aA_bB-cC.dD!eE~fF*gG'hH(iI)jJ;kK/lL?mM:nN@oO&pP=qQ+rR$sS,tT9uU8vV7wW6xX5yY4zZ") { - $ERROR('#3: '); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A4_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A4_T2.js deleted file mode 100644 index 4aec4212a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A4_T2.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.3_A4_T2; - * @section: 15.1.3.3; - * @assertion: URI tests; - * @description: Checking RUSSIAN ALPHABET; -*/ - -//CHECK#1 -if ((encodeURI("http://ru.wikipedia.org/wiki/Юникод") !== "http://ru.wikipedia.org/wiki/%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4") && (encodeURI("http://ru.wikipedia.org/wiki/Юникод") !== "http://ru.wikipedia.org/wiki/" + "%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4".toLowerCase())) { - $ERROR('#1: http://ru.wikipedia.org/wiki/Юникод'); -} - -//CHECK#2 -if ((encodeURI("http://ru.wikipedia.org/wiki/Юникод#Ссылки") !== "http://ru.wikipedia.org/wiki/%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4#%D0%A1%D1%81%D1%8B%D0%BB%D0%BA%D0%B8") && (encodeURI("http://ru.wikipedia.org/wiki/Юникод#Ссылки") !== "http://ru.wikipedia.org/wiki/" + "%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4#%D0%A1%D1%81%D1%8B%D0%BB%D0%BA%D0%B8".toLowerCase())) { - $ERROR('#2: http://ru.wikipedia.org/wiki/Юникод#Ссылки'); -} - -//CHECK#3 -if ((encodeURI("http://ru.wikipedia.org/wiki/Юникод#Версии Юникода") !== "http://ru.wikipedia.org/wiki/%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4#%D0%92%D0%B5%D1%80%D1%81%D0%B8%D0%B8%20%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4%D0%B0") && ((encodeURI("http://ru.wikipedia.org/wiki/Юникод#Версии Юникода") !== "http://ru.wikipedia.org/wiki/" + "%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4#%D0%92%D0%B5%D1%80%D1%81%D0%B8%D0%B8%20%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4%D0%B0".toLowerCase()))) { - $ERROR('#3: http://ru.wikipedia.org/wiki/Юникод#Версии Юникода'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A4_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A4_T3.js deleted file mode 100644 index c28ecf983..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A4_T3.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.3_A4_T3; - * @section: 15.1.3.3; - * @assertion: URI tests; - * @description: Checking URL with Line Terminator; -*/ - -//CHECK#1 -if ((encodeURI("http://unipro.ru/\nabout") !== "http://unipro.ru/%0Aabout") && encodeURI("http://unipro.ru/\nabout") !== "http://unipro.ru/%0aabout") { - $ERROR('#1: http://unipro.ru/\\nabout'); -} - -//CHECK#2 -if ((encodeURI("http://unipro.ru/\vabout") !== "http://unipro.ru/%0Babout") && encodeURI("http://unipro.ru/\vabout") !== "http://unipro.ru/%0babout") { - $ERROR('#2: http://unipro.ru/\\vabout'); -} - -//CHECK#3 -if ((encodeURI("http://unipro.ru/\fabout") !== "http://unipro.ru/%0Cabout") && encodeURI("http://unipro.ru/\fabout") !== "http://unipro.ru/%0cabout") { - $ERROR('#3: http://unipro.ru/\\fabout'); -} - -//CHECK#4 -if ((encodeURI("http://unipro.ru/\rabout") !== "http://unipro.ru/%0Dabout") && encodeURI("http://unipro.ru/\rabout") !== "http://unipro.ru/%0dabout") { - $ERROR('#4: http://unipro.ru/\\rabout'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A4_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A4_T4.js deleted file mode 100644 index eea709e8f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A4_T4.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.3_A4_T4; - * @section: 15.1.3.3; - * @assertion: URI tests; - * @description: Test some url; -*/ - -//CHECK#1 -if (encodeURI("") !== "") { - $ERROR('#1: ""'); -} - -//CHECK#2 -if (encodeURI("http://unipro.ru") !== "http://unipro.ru") { - $ERROR('#2: http://unipro.ru'); -} - -//CHECK#3 -if (encodeURI("http://www.google.ru/support/jobs/bin/static.py?page=why-ru.html&sid=liveandwork") !== "http://www.google.ru/support/jobs/bin/static.py?page=why-ru.html&sid=liveandwork") { - $ERROR('#3: http://www.google.ru/support/jobs/bin/static.py?page=why-ru.html&sid=liveandwork"'); -} - -//CHECK#4 -if (encodeURI("http://en.wikipedia.org/wiki/UTF-8#Description") !== "http://en.wikipedia.org/wiki/UTF-8#Description") { - $ERROR('#4: http://en.wikipedia.org/wiki/UTF-8#Description'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A5.1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A5.1.js deleted file mode 100644 index a61d56844..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A5.1.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.3_A5.1; - * @section: 15.1.3.3, 15.2.4.7, 12.6.4; - * @assertion: The length property of encodeURI has the attribute DontEnum; - * @description: Checking use propertyIsEnumerable, for-in; -*/ - - -//CHECK#1 -if (encodeURI.propertyIsEnumerable('length') !== false) { - $ERROR('#1: encodeURI.propertyIsEnumerable(\'length\') === false. Actual: ' + (encodeURI.propertyIsEnumerable('length'))); -} - -//CHECK#2 -result = true; -for (p in encodeURI){ - if (p === "length") { - result = false; - } -} - -if (result !== true) { - $ERROR('#2: result = true; for (p in encodeURI) { if (p === "length") result = false; } result === true;'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A5.2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A5.2.js deleted file mode 100644 index 11ac65b35..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A5.2.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.3_A5.2; - * @section: 15.1.3.3, 15.2.4.5, 11.4.1; - * @assertion: The length property of encodeURI has the attribute DontDelete; - * @description: Checking use hasOwnProperty, delete; -*/ - -//CHECK#1 -if (encodeURI.hasOwnProperty('length') !== true) { - $FAIL('#1: encodeURI.hasOwnProperty(\'length\') === true. Actual: ' + (encodeURI.hasOwnProperty('length'))); -} - -delete encodeURI.length; - -//CHECK#2 -if (encodeURI.hasOwnProperty('length') !== true) { - $ERROR('#2: delete encodeURI.length; encodeURI.hasOwnProperty(\'length\') === true. Actual: ' + (encodeURI.hasOwnProperty('length'))); -} - -//CHECK#3 -if (encodeURI.length === undefined) { - $ERROR('#3: delete encodeURI.length; encodeURI.length !== undefined'); -} - - - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A5.3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A5.3.js deleted file mode 100644 index deed6373f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A5.3.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.3_A5.3; - * @section: 15.1.3.3; - * @assertion: The length property of encodeURI has the attribute ReadOnly; - * @description: Checking if varying the length property fails; -*/ - -//CHECK#1 -x = encodeURI.length; -encodeURI.length = Infinity; -if (encodeURI.length !== x) { - $ERROR('#1: x = encodeURI.length; encodeURI.length = Infinity; encodeURI.length === x. Actual: ' + (encodeURI.length)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A5.4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A5.4.js deleted file mode 100644 index 601127fb2..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A5.4.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.3_A5.4; - * @section: 15.1.3.3; - * @assertion: The length property of encodeURI is 1; - * @description: encodeURI.length === 1; -*/ - -//CHECK#1 -if (encodeURI.length !== 1) { - $ERROR('#1: encodeURI.length === 1. Actual: ' + (encodeURI.length)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A5.5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A5.5.js deleted file mode 100644 index ee1baf518..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A5.5.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.3_A5.5; - * @section: 15.1.3.3, 15.2.4.7, 12.6.4; - * @assertion: The encodeURI property has the attribute DontEnum; - * @description: Checking use propertyIsEnumerable, for-in; -*/ - - -//CHECK#1 -if (this.propertyIsEnumerable('encodeURI') !== false) { - $ERROR('#1: this.propertyIsEnumerable(\'encodeURI\') === false. Actual: ' + (this.propertyIsEnumerable('encodeURI'))); -} - -//CHECK#2 -result = true; -for (p in this){ - if (p === "encodeURI") { - result = false; - } -} - -if (result !== true) { - $ERROR('#2: result = true; for (p in this) { if (p === "encodeURI") result = false; } result === true;'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A5.6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A5.6.js deleted file mode 100644 index ae32b30bc..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A5.6.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.1.3.3_A5.6; -* @section: 15.1.3.3; -* @assertion: The encodeURI property has not prototype property; -* @description: Checking encodeURI.prototype; -*/ - -//CHECK#1 -if (encodeURI.prototype !== undefined) { - $ERROR('#1: encodeURI.prototype === undefined. Actual: ' + (encodeURI.prototype)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A5.7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A5.7.js deleted file mode 100644 index 0ab9b8c9f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A5.7.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.1.3.3_A5.7; -* @section: 15.1.3.3, 11.2.2; -* @assertion: The encodeURI property can't be used as constructor; -* @description: If property does not implement the internal [[Construct]] method, throw a TypeError exception; -*/ - -//CHECK#1 - -try { - new encodeURI(); - $ERROR('#1.1: new encodeURI() throw TypeError. Actual: ' + (new encodeURI())); -} catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1.2: new encodeURI() throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A6_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A6_T1.js deleted file mode 100644 index 6cae662d6..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.3_encodeURI/S15.1.3.3_A6_T1.js +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.3_A6_T1; - * @section: 15.1.3.3, 9.8, 8.6.2.6; - * @assertion: Operator use ToString; - * @description: If Type(value) is Object, evaluate ToPrimitive(value, String); -*/ - -//CHECK#1 -var object = {valueOf: function() {return "^"}}; -if (encodeURI(object) !== "%5Bobject%20Object%5D") { - $ERROR('#1: var object = {valueOf: function() {return "^"}}; encodeURI(object) === %5Bobject%20Object%5D. Actual: ' + (encodeURI(object))); -} - -//CHECK#2 -var object = {valueOf: function() {return ""}, toString: function() {return "^"}}; -if (encodeURI(object) !== "%5E") { - $ERROR('#2: var object = {valueOf: function() {return ""}, toString: function() {return "^"}}; encodeURI(object) === "%5E". Actual: ' + (encodeURI(object))); -} - -//CHECK#3 -var object = {valueOf: function() {return "^"}, toString: function() {return {}}}; -if (encodeURI(object) !== "%5E") { - $ERROR('#3: var object = {valueOf: function() {return "^"}, toString: function() {return {}}}; encodeURI(object) === "%5E". Actual: ' + (encodeURI(object))); -} - -//CHECK#4 -try { - var object = {valueOf: function() {throw "error"}, toString: function() {return "^"}}; - if (encodeURI(object) !== "%5E") { - $ERROR('#4.1: var object = {valueOf: function() {throw "error"}, toString: function() {return "^"}}; encodeURI(object) === "%5E". Actual: ' + (encodeURI(object))); - } -} -catch (e) { - if (e === "error") { - $ERROR('#4.2: var object = {valueOf: function() {throw "error"}, toString: function() {return "^"}}; encodeURI(object) not throw "error"'); - } else { - $ERROR('#4.3: var object = {valueOf: function() {throw "error"}, toString: function() {return "^"}}; encodeURI(object) not throw Error. Actual: ' + (e)); - } -} - -//CHECK#5 -var object = {toString: function() {return "^"}}; -if (encodeURI(object) !== "%5E") { - $ERROR('#5: var object = {toString: function() {return "^"}}; encodeURI(object) === "%5E". Actual: ' + (encodeURI(object))); -} - -//CHECK#6 -var object = {valueOf: function() {return {}}, toString: function() {return "^"}} -if (encodeURI(object) !== "%5E") { - $ERROR('#6: var object = {valueOf: function() {return {}}, toString: function() {return "^"}}; encodeURI(object) === "%5E". Actual: ' + (encodeURI(object))); -} - -//CHECK#7 -try { - var object = {valueOf: function() {return "^"}, toString: function() {throw "error"}}; - encodeURI(object); - $ERROR('#7.1: var object = {valueOf: function() {return "^"}, toString: function() {throw "error"}}; encodeURI(object) throw "error". Actual: ' + (encodeURI(object))); -} -catch (e) { - if (e !== "error") { - $ERROR('#7.2: var object = {valueOf: function() {return "^"}, toString: function() {throw "error"}}; encodeURI(object) throw "error". Actual: ' + (e)); - } -} - -//CHECK#8 -try { - var object = {valueOf: function() {return {}}, toString: function() {return {}}}; - encodeURI(object); - $ERROR('#8.1: var object = {valueOf: function() {return {}}, toString: function() {return {}}}; encodeURI(object) throw TypeError. Actual: ' + (encodeURI(object))); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#8.2: var object = {valueOf: function() {return {}}, toString: function() {return {}}}; encodeURI(object) throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A1.1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A1.1_T1.js deleted file mode 100644 index 33236bdec..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A1.1_T1.js +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.4_A1.1_T1; - * @section: 15.1.3.4; - * @assertion: If string.charAt(k) in [0xDC00 - 0xDFFF], throw URIError; - * @description: Complex tests; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; - -for (index = 0xDC00; index <= 0xDFFF; index++) { - count++; - hex = decimalToHexString(index); - try { - encodeURIComponent(String.fromCharCode(index)); - } catch (e) { - if ((e instanceof URIError) === true) continue; - } - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A1.1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A1.1_T2.js deleted file mode 100644 index c6da20e22..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A1.1_T2.js +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.4_A1.1_T2; - * @section: 15.1.3.4; - * @assertion: If string.charAt(k) in [0xDC00 - 0xDFFF], throw URIError; - * @description: Complex tests; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; - -for (index = 0xDC00; index <= 0xDFFF; index++) { - count++; - hex = decimalToHexString(index); - try { - encodeURIComponent(String.fromCharCode(index, 0x0041)); - } catch (e) { - if ((e instanceof URIError) === true) continue; - } - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A1.2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A1.2_T1.js deleted file mode 100644 index f1134901b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A1.2_T1.js +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.4_A1.2_T1; - * @section: 15.1.3.4; - * @assertion: If string.charAt(k) in [0xD800 - 0xDBFF] and string.length = k + 1, throw URIError; - * @description: Complex tests; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; - -for (index = 0xD800; index <= 0xDBFF; index++) { - count++; - hex = decimalToHexString(index); - try { - encodeURIComponent(String.fromCharCode(index)); - } catch (e) { - if ((e instanceof URIError) === true) continue; - } - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A1.2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A1.2_T2.js deleted file mode 100644 index 286031e3f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A1.2_T2.js +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.4_A1.2_T2; - * @section: 15.1.3.4; - * @assertion: If string.charAt(k) in [0xD800 - 0xDBFF] and string.length = k + 1, throw URIError; - * @description: Complex tests; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; - -for (index = 0xD800; index <= 0xDBFF; index++) { - count++; - hex = decimalToHexString(index); - try { - encodeURIComponent(String.fromCharCode(0x0041, index)); - } catch (e) { - if ((e instanceof URIError) === true) continue; - } - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A1.3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A1.3_T1.js deleted file mode 100644 index 7258c28d0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A1.3_T1.js +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.4_A1.3_T1; - * @section: 15.1.3.4; - * @assertion: If string.charAt(k) in [0xD800 - 0xDBFF] and string.charAt(k+1) not in [0xDC00 - 0xDFFF], throw URIError; - * @description: Complex tests, string.charAt(k+1) in [0x0000, 0xD7FF, 0xD800, 0xDBFE, 0xDBFF, 0xE000, 0xFFFF]; -*/ - -chars = [0x0000, 0xD7FF, 0xD800, 0xDBFE, 0xDBFF, 0xE000, 0xFFFF]; -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; - -for (index = 0xD800; index <= 0xDBFF; index++) { - count++; - res = true; - for (indexC = 0; indexC < chars.length; indexC++) { - hex = decimalToHexString(index); - try { - encodeURIComponent(String.fromCharCode(index, chars[indexC])); - } catch (e) { - if ((e instanceof URIError) === true) continue; - } - res = false; - } - if (res !== true) { - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; - } -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A2.1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A2.1_T1.js deleted file mode 100644 index 8c4276b3e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A2.1_T1.js +++ /dev/null @@ -1,81 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.4_A2.1_T1; - * @section: 15.1.3.4; - * @assertion: If string.charAt(k) in [0x0000 - 0x007F]\[uriUnescaped], return 1 octet (00000000 0zzzzzzz -> 0zzzzzzz); - * @description: Complex tests, use RFC 3629; -*/ - -uriUnescaped = ["-", "_", ".", "!", "~", "*", "'", "(", ")", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]; -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; - -l : -for (index = 0x0000; index <= 0x007F; index++) { - count++; - str = String.fromCharCode(index); - for (indexC = 0; indexC < uriUnescaped.length; indexC++) { - if (uriUnescaped[indexC] === str) continue l; - } - try { - if (encodeURIComponent(str).toUpperCase() === "%" + decimalToHexString(index).substring(2)) continue l; - } catch(e) {} - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A2.2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A2.2_T1.js deleted file mode 100644 index 6d974c28f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A2.2_T1.js +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.4_A2.2_T1; - * @section: 15.1.3.4; - * @assertion: If string.charAt(k) in [0x0080 - 0x07FF], return 2 octets (00000yyy yyzzzzzz -> 110yyyyy 10zzzzzz); - * @description: Complex tests, use RFC 3629; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; -l: -for (index = 0x0080; index <= 0x07FF; index++) { - count++; - hex1 = decimalToHexString(0x0080 + (index & 0x003F)).substring(2); - hex2 = decimalToHexString(0x00C0 + (index & 0x07C0) / 0x0040).substring(2); - str = String.fromCharCode(index); - try { - if (encodeURIComponent(str).toUpperCase() === "%" + hex2 + "%" + hex1) continue; - } catch(e) {} - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A2.3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A2.3_T1.js deleted file mode 100644 index b3cd1465d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A2.3_T1.js +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.4_A2.3_T1; - * @section: 15.1.3.4; - * @assertion: If string.charAt(k) in [0x0800 - 0xD7FF], return 3 octets (xxxxyyyy yyzzzzzz -> 1110xxxx 10yyyyyy 10zzzzzz); - * @description: Complex tests, use RFC 3629; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; -for (index = 0x0800; index <= 0xD7FF; index++) { - count++; - hex1 = decimalToHexString(0x0080 + (index & 0x003F)).substring(2); - hex2 = decimalToHexString(0x0080 + (index & 0x0FC0) / 0x0040).substring(2); - hex3 = decimalToHexString(0x00E0 + (index & 0xF000) / 0x1000).substring(2); - str = String.fromCharCode(index); - try { - if (encodeURIComponent(str).toUpperCase() === "%" + hex3 + "%" + hex2 + "%" + hex1) continue; - } catch(e) {} - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A2.4_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A2.4_T1.js deleted file mode 100644 index c5955bda0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A2.4_T1.js +++ /dev/null @@ -1,88 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.4_A2.4_T1; - * @section: 15.1.3.4; - * @assertion: If string.charAt(k) in [0xD800 - 0xDBFF] and string.charAt(k+1) in [0xDC00 � 0xDFFF], return 4 octets (000wwwxx xxxxyyyy yyzzzzzz -> 11110www 10xxxxxx 10yyyyyy 10zzzzzz); - * @description: Complex tests, use RFC 3629, string.charAt(k+1) in [0xDC00, 0xDDFF, 0xDFFF]; -*/ - -chars = [0xDC00, 0xDDFF, 0xDFFF]; -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; -for (index = 0xD800; index <= 0xDBFF; index++) { - res = true; - for (indexC = 0; indexC < chars.length; indexC++) { - index1 = (index - 0xD800) * 0x400 + (chars[indexC] - 0xDC00) + 0x10000; - hex1 = decimalToHexString(0x0080 + (index1 & 0x003F)).substring(2); - hex2 = decimalToHexString(0x0080 + (index1 & 0x0FC0) / 0x0040).substring(2); - hex3 = decimalToHexString(0x0080 + (index1 & 0x3F000) / 0x1000).substring(2); - hex4 = decimalToHexString(0x00F0 + (index1 & 0x1C0000) / 0x40000).substring(2); - str = String.fromCharCode(index, chars[indexC]); - try { - if (encodeURIComponent(str).toUpperCase() !== "%" + hex4 + "%" + hex3 + "%" + hex2 + "%" + hex1) { - res = false; - } - } catch(e) {res = false} - } - if (res !== true) { - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; - } - count++; -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A2.4_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A2.4_T2.js deleted file mode 100644 index 70d60a55d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A2.4_T2.js +++ /dev/null @@ -1,88 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.4_A2.4_T2; - * @section: 15.1.3.4; - * @assertion: If string.charAt(k) in [0xD800 - 0xDBFF] and string.charAt(k+1) in [0xDC00 � 0xDFFF], return 4 octets (000wwwxx xxxxyyyy yyzzzzzz -> 11110www 10xxxxxx 10yyyyyy 10zzzzzz); - * @description: Complex tests, use RFC 3629, string.charAt(k) in [0xD800, 0xDBFF, 0xD9FF]; -*/ - -chars = [0xD800, 0xDBFF, 0xD9FF]; -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; -for (index = 0xDC00; index <= 0xDFFF; index++) { - res = true; - for (indexC = 0; indexC < chars.length; indexC++) { - index1 = (chars[indexC] - 0xD800) * 0x400 + (index - 0xDC00) + 0x10000; - hex1 = decimalToHexString(0x0080 + (index1 & 0x003F)).substring(2); - hex2 = decimalToHexString(0x0080 + (index1 & 0x0FC0) / 0x0040).substring(2); - hex3 = decimalToHexString(0x0080 + (index1 & 0x3F000) / 0x1000).substring(2); - hex4 = decimalToHexString(0x00F0 + (index1 & 0x1C0000) / 0x40000).substring(2); - str = String.fromCharCode(chars[indexC], index); - try { - if (encodeURIComponent(str).toUpperCase() !== "%" + hex4 + "%" + hex3 + "%" + hex2 + "%" + hex1) { - res = false; - } - } catch(e) {res = false} - } - if (res !== true) { - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; - } - count++; -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A2.5_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A2.5_T1.js deleted file mode 100644 index c7ecd1938..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A2.5_T1.js +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.4_A2.5_T1; - * @section: 15.1.3.4; - * @assertion: If string.charAt(k) in [0xE000 - 0xFFFF], return 3 octets (xxxxyyyy yyzzzzzz -> 1110xxxx 10yyyyyy 10zzzzzz); - * @description: Complex tests, use RFC 3629; -*/ - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; -for (index = 0xE000; index <= 0xFFFF; index++) { - count++; - hex1 = decimalToHexString(0x0080 + (index & 0x003F)).substring(2); - hex2 = decimalToHexString(0x0080 + (index & 0x0FC0) / 0x0040).substring(2); - hex3 = decimalToHexString(0x00E0 + (index & 0xF000) / 0x1000).substring(2); - str = String.fromCharCode(index); - try { - if (encodeURIComponent(str).toUpperCase() === "%" + hex3 + "%" + hex2 + "%" + hex1) continue; - } catch(e) {} - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A3.1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A3.1_T1.js deleted file mode 100644 index c5bc7d2e8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A3.1_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.4_A3.1_T1; - * @section: 15.1.3.4; - * @assertion: unescapedURIComponentSet not containing uriReserved; - * @description: Complex tests; -*/ - -uriReserved = ["%3B", "%2F", "%3F", "%3A", "%40", "%26", "%3D", "%2B", "%24", "%2C"]; -uriReserved_ = [";", "/", "?", ":", "@", "&", "=", "+", "$", ","]; -for (indexC = 0; indexC < 10; indexC++) { - var str = uriReserved_[indexC]; - if (encodeURIComponent(str) !== uriReserved[indexC]) { - $ERROR('#' + (indexC + 1) + ': unescapedURIComponentSet not containing' + str); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A3.2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A3.2_T1.js deleted file mode 100644 index 8f930dd48..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A3.2_T1.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.4_A3.2_T1; - * @section: 15.1.3.4; - * @assertion: unescapedURIComponentSet containing one instance of each character valid in uriUnescaped; - * @description: Complex tests, uriUnescaped :: uriAlpha; -*/ - -uriAlpha = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]; -for (indexC = 0; indexC < uriAlpha.length; indexC++) { - var str = uriAlpha[indexC]; - if (encodeURIComponent(str) !== str) { - $ERROR('#' + (indexC + 1) + ': unescapedURISet containing ' + str); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A3.2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A3.2_T2.js deleted file mode 100644 index 7dafca448..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A3.2_T2.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.4_A3.2_T2; - * @section: 15.1.3.4; - * @assertion: unescapedURIComponentSet containing one instance of each character valid in uriUnescaped; - * @description: Complex tests, uriUnescaped :: DecimalDigit; -*/ - -DecimalDigit = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]; -for (indexC = 0; indexC < DecimalDigit.length; indexC++) { - var str = DecimalDigit[indexC]; - if (encodeURIComponent(str) !== str) { - $ERROR('#' + (indexC + 1) + ': unescapedURISet containing' + str); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A3.2_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A3.2_T3.js deleted file mode 100644 index 1a1d003b9..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A3.2_T3.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.4_A3.2_T3; - * @section: 15.1.3.4; - * @assertion: unescapedURIComponentSet containing one instance of each character valid in uriUnescaped; - * @description: Complex tests, uriUnescaped :: uriMark; -*/ - -uriMark = ["-", "_", ".", "!", "~", "*", "'", "(", ")"]; -for (indexC = 0; indexC < uriMark.length; indexC++) { - var str = uriMark[indexC]; - if (encodeURIComponent(str) !== str) { - $ERROR('#' + (indexC + 1) + ': unescapedURISet containing' + str); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A3.3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A3.3_T1.js deleted file mode 100644 index da0807f67..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A3.3_T1.js +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.4_A3.3_T1; - * @section: 15.1.3.4; - * @assertion: unescapedURIComponentSet not containing "#"; - * @description: encodeURIComponent("#") === "%23"; -*/ - -if (encodeURIComponent("#") !== "%23") { - $ERROR('#1: unescapedURIComponentSet not containing "%23"'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A4_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A4_T1.js deleted file mode 100644 index a2d6da123..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A4_T1.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.4_A4_T1; - * @section: 15.1.3.4; - * @assertion: URI tests; - * @description: Checking ENGLISH ALPHABET; -*/ - -//CHECK#1 -if (encodeURIComponent("http://unipro.ru/0123456789") !== "http%3A%2F%2Funipro.ru%2F0123456789") { - $ERROR('#1: http://unipro.ru/0123456789'); -} - -//CHECK#2 -if (encodeURIComponent("aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ") !== "aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ") { - $ERROR('#2: aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ'); -} - -//CHECK#3 -if (encodeURIComponent(";/?:@&=+$,") !== "%3B%2F%3F%3A%40%26%3D%2B%24%2C") { - $ERROR('#3: '); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A4_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A4_T2.js deleted file mode 100644 index 7d0db943e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A4_T2.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.4_A4_T2; - * @section: 15.1.3.4; - * @assertion: URI tests; - * @description: Checking RUSSIAN ALPHABET; -*/ - -//CHECK#1 -if ((encodeURIComponent("http://ru.wikipedia.org/wiki/Юникод") !== "http%3A%2F%2Fru.wikipedia.org%2Fwiki%2F%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4") && (encodeURIComponent("http://ru.wikipedia.org/wiki/Юникод") !== "http%3A%2F%2Fru.wikipedia.org%2Fwiki%2F" + "%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4".toLowerCase())) { - $ERROR('#1: http://ru.wikipedia.org/wiki/Юникод'); -} - -//CHECK#2 -if ((encodeURIComponent("http://ru.wikipedia.org/wiki/Юникод#Ссылки") !== "http%3A%2F%2Fru.wikipedia.org%2Fwiki%2F%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4%23%D0%A1%D1%81%D1%8B%D0%BB%D0%BA%D0%B8") && (encodeURIComponent("http://ru.wikipedia.org/wiki/Юникод#Ссылки") !== "http%3A%2F%2Fru.wikipedia.org%2Fwiki%2F" + "%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4%23%D0%A1%D1%81%D1%8B%D0%BB%D0%BA%D0%B8".toLowerCase())) { - $ERROR('#2: http://ru.wikipedia.org/wiki/Юникод#Ссылки'); -} - -//CHECK#3 -if ((encodeURIComponent("http://ru.wikipedia.org/wiki/Юникод#Версии Юникода") !== "http%3A%2F%2Fru.wikipedia.org%2Fwiki%2F%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4%23%D0%92%D0%B5%D1%80%D1%81%D0%B8%D0%B8%20%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4%D0%B0") && ((encodeURIComponent("http://ru.wikipedia.org/wiki/Юникод%23Версии Юникода") !== "http%3A%2F%2Fru.wikipedia.org%2Fwiki%2F" + "%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4#%D0%92%D0%B5%D1%80%D1%81%D0%B8%D0%B8%20%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4%D0%B0".toLowerCase()))) { - $ERROR('#3: http://ru.wikipedia.org/wiki/Юникод#Версии Юникода'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A4_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A4_T3.js deleted file mode 100644 index e52810f6c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A4_T3.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.4_A4_T3; - * @section: 15.1.3.4; - * @assertion: URI tests; - * @description: Checking URL with Line Terminator; -*/ - -//CHECK#1 -if ((encodeURIComponent("http://unipro.ru/\nabout") !== "http%3A%2F%2Funipro.ru%2F%0Aabout") && encodeURIComponent("http://unipro.ru/\nabout") !== "http%3A%2F%2Funipro.ru%2F%0aabout") { - $ERROR('#1: http://unipro.ru/\\nabout'); -} - -//CHECK#2 -if ((encodeURIComponent("http://unipro.ru/\vabout") !== "http%3A%2F%2Funipro.ru%2F%0Babout") && encodeURIComponent("http://unipro.ru/\vabout") !== "http%3A%2F%2Funipro.ru%2F%0babout") { - $ERROR('#2: http://unipro.ru/\\vabout'); -} - -//CHECK#3 -if ((encodeURIComponent("http://unipro.ru/\fabout") !== "http%3A%2F%2Funipro.ru%2F%0Cabout") && encodeURIComponent("http://unipro.ru/\fabout") !== "http%3A%2F%2Funipro.ru%2F%0cabout") { - $ERROR('#3: http://unipro.ru/\\fabout'); -} - -//CHECK#4 -if ((encodeURIComponent("http://unipro.ru/\rabout") !== "http%3A%2F%2Funipro.ru%2F%0Dabout") && encodeURIComponent("http://unipro.ru/\rabout") !== "http%3A%2F%2Funipro.ru%2F%0dabout") { - $ERROR('#4: http://unipro.ru/\\rabout'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A4_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A4_T4.js deleted file mode 100644 index 6a0459896..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A4_T4.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.4_A4_T4; - * @section: 15.1.3.4; - * @assertion: URI tests; - * @description: Test some url; -*/ - -//CHECK#1 -if (encodeURIComponent("") !== "") { - $ERROR('#1: ""'); -} - -//CHECK#2 -if (encodeURIComponent("http://unipro.ru") !== "http%3A%2F%2Funipro.ru") { - $ERROR('#2: http://unipro.ru'); -} - -//CHECK#3 -if (encodeURIComponent("http://www.google.ru/support/jobs/bin/static.py?page=why-ru.html&sid=liveandwork") !== "http%3A%2F%2Fwww.google.ru%2Fsupport%2Fjobs%2Fbin%2Fstatic.py%3Fpage%3Dwhy-ru.html%26sid%3Dliveandwork") { - $ERROR('#3: http://www.google.ru/support/jobs/bin/static.py?page=why-ru.html&sid=liveandwork"'); -} - -//CHECK#4 -if (encodeURIComponent("http://en.wikipedia.org/wiki/UTF-8#Description") !== "http%3A%2F%2Fen.wikipedia.org%2Fwiki%2FUTF-8%23Description") { - $ERROR('#4: http://en.wikipedia.org/wiki/UTF-8#Description'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A5.1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A5.1.js deleted file mode 100644 index 08bc0319f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A5.1.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.4_A5.1; - * @section: 15.1.3.4, 15.2.4.7, 12.6.4; - * @assertion: The length property of encodeURIComponent has the attribute DontEnum; - * @description: Checking use propertyIsEnumerable, for-in; -*/ - - -//CHECK#1 -if (encodeURIComponent.propertyIsEnumerable('length') !== false) { - $ERROR('#1: encodeURIComponent.propertyIsEnumerable(\'length\') === false. Actual: ' + (encodeURIComponent.propertyIsEnumerable('length'))); -} - -//CHECK#2 -result = true; -for (p in encodeURIComponent){ - if (p === "length") { - result = false; - } -} - -if (result !== true) { - $ERROR('#2: result = true; for (p in encodeURIComponent) { if (p === "length") result = false; } result === true;'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A5.2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A5.2.js deleted file mode 100644 index 1708a83a4..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A5.2.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.4_A5.2; - * @section: 15.1.3.4, 15.2.4.5, 11.4.1; - * @assertion: The length property of encodeURIComponent has the attribute DontDelete; - * @description: Checking use hasOwnProperty, delete; -*/ - -//CHECK#1 -if (encodeURIComponent.hasOwnProperty('length') !== true) { - $FAIL('#1: encodeURIComponent.hasOwnProperty(\'length\') === true. Actual: ' + (encodeURIComponent.hasOwnProperty('length'))); -} - -delete encodeURIComponent.length; - -//CHECK#2 -if (encodeURIComponent.hasOwnProperty('length') !== true) { - $ERROR('#2: delete encodeURIComponent.length; encodeURIComponent.hasOwnProperty(\'length\') === true. Actual: ' + (encodeURIComponent.hasOwnProperty('length'))); -} - -//CHECK#3 -if (encodeURIComponent.length === undefined) { - $ERROR('#3: delete encodeURIComponent.length; encodeURIComponent.length !== undefined'); -} - - - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A5.3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A5.3.js deleted file mode 100644 index ad8abb9f5..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A5.3.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.4_A5.3; - * @section: 15.1.3.4; - * @assertion: The length property of encodeURIComponent has the attribute ReadOnly; - * @description: Checking if varying the length property fails; -*/ - -//CHECK#1 -x = encodeURIComponent.length; -encodeURIComponent.length = Infinity; -if (encodeURIComponent.length !== x) { - $ERROR('#1: x = encodeURIComponent.length; encodeURIComponent.length = Infinity; encodeURIComponent.length === x. Actual: ' + (encodeURIComponent.length)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A5.4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A5.4.js deleted file mode 100644 index 2c01443c0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A5.4.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.4_A5.4; - * @section: 15.1.3.4; - * @assertion: The length property of encodeURIComponent is 1; - * @description: encodeURIComponent.length === 1; -*/ - -//CHECK#1 -if (encodeURIComponent.length !== 1) { - $ERROR('#1: encodeURIComponent.length === 1. Actual: ' + (encodeURIComponent.length)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A5.5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A5.5.js deleted file mode 100644 index fe17d537b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A5.5.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.4_A5.5; - * @section: 15.1.3.4, 15.2.4.7, 12.6.4; - * @assertion: The encodeURIComponent property has the attribute DontEnum; - * @description: Checking use propertyIsEnumerable, for-in; -*/ - - -//CHECK#1 -if (this.propertyIsEnumerable('encodeURIComponent') !== false) { - $ERROR('#1: this.propertyIsEnumerable(\'encodeURIComponent\') === false. Actual: ' + (this.propertyIsEnumerable('encodeURIComponent'))); -} - -//CHECK#2 -result = true; -for (p in this){ - if (p === "encodeURIComponent") { - result = false; - } -} - -if (result !== true) { - $ERROR('#2: result = true; for (p in this) { if (p === "encodeURIComponent") result = false; } result === true;'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A5.6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A5.6.js deleted file mode 100644 index 3705c27b9..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A5.6.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.1.3.4_A5.6; -* @section: 15.1.3.4; -* @assertion: The encodeURIComponent property has not prototype property; -* @description: Checking encodeURIComponent.prototype; -*/ - -//CHECK#1 -if (encodeURIComponent.prototype !== undefined) { - $ERROR('#1: encodeURIComponent.prototype === undefined. Actual: ' + (encodeURIComponent.prototype)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A5.7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A5.7.js deleted file mode 100644 index 09bf8aa3e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A5.7.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.1.3.4_A5.7; -* @section: 15.1.3.4, 11.2.2; -* @assertion: The encodeURIComponent property can't be used as constructor; -* @description: If property does not implement the internal [[Construct]] method, throw a TypeError exception; -*/ - -//CHECK#1 - -try { - new encodeURIComponent(); - $ERROR('#1.1: new encodeURIComponent() throw TypeError. Actual: ' + (new encodeURIComponent())); -} catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1.2: new encodeURIComponent() throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A6_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A6_T1.js deleted file mode 100644 index 2023af5d8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/15.1.3_URI_Handling_Function_Properties/15.1.3.4_encodeURIComponent/S15.1.3.4_A6_T1.js +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.3.4_A6_T1; - * @section: 15.1.3.4, 9.8, 8.6.2.6; - * @assertion: Operator use ToString; - * @description: If Type(value) is Object, evaluate ToPrimitive(value, String); -*/ - -//CHECK#1 -var object = {valueOf: function() {return "^"}}; -if (encodeURIComponent(object) !== "%5Bobject%20Object%5D") { - $ERROR('#1: var object = {valueOf: function() {return "^"}}; encodeURIComponent(object) === %5Bobject%20Object%5D. Actual: ' + (encodeURIComponent(object))); -} - -//CHECK#2 -var object = {valueOf: function() {return ""}, toString: function() {return "^"}}; -if (encodeURIComponent(object) !== "%5E") { - $ERROR('#2: var object = {valueOf: function() {return ""}, toString: function() {return "^"}}; encodeURIComponent(object) === "%5E". Actual: ' + (encodeURIComponent(object))); -} - -//CHECK#3 -var object = {valueOf: function() {return "^"}, toString: function() {return {}}}; -if (encodeURIComponent(object) !== "%5E") { - $ERROR('#3: var object = {valueOf: function() {return "^"}, toString: function() {return {}}}; encodeURIComponent(object) === "%5E". Actual: ' + (encodeURIComponent(object))); -} - -//CHECK#4 -try { - var object = {valueOf: function() {throw "error"}, toString: function() {return "^"}}; - if (encodeURIComponent(object) !== "%5E") { - $ERROR('#4.1: var object = {valueOf: function() {throw "error"}, toString: function() {return "^"}}; encodeURIComponent(object) === "%5E". Actual: ' + (encodeURIComponent(object))); - } -} -catch (e) { - if (e === "error") { - $ERROR('#4.2: var object = {valueOf: function() {throw "error"}, toString: function() {return "^"}}; encodeURIComponent(object) not throw "error"'); - } else { - $ERROR('#4.3: var object = {valueOf: function() {throw "error"}, toString: function() {return "^"}}; encodeURIComponent(object) not throw Error. Actual: ' + (e)); - } -} - -//CHECK#5 -var object = {toString: function() {return "^"}}; -if (encodeURIComponent(object) !== "%5E") { - $ERROR('#5: var object = {toString: function() {return "^"}}; encodeURIComponent(object) === "%5E". Actual: ' + (encodeURIComponent(object))); -} - -//CHECK#6 -var object = {valueOf: function() {return {}}, toString: function() {return "^"}} -if (encodeURIComponent(object) !== "%5E") { - $ERROR('#6: var object = {valueOf: function() {return {}}, toString: function() {return "^"}}; encodeURIComponent(object) === "%5E". Actual: ' + (encodeURIComponent(object))); -} - -//CHECK#7 -try { - var object = {valueOf: function() {return "^"}, toString: function() {throw "error"}}; - encodeURIComponent(object); - $ERROR('#7.1: var object = {valueOf: function() {return "^"}, toString: function() {throw "error"}}; encodeURIComponent(object) throw "error". Actual: ' + (encodeURIComponent(object))); -} -catch (e) { - if (e !== "error") { - $ERROR('#7.2: var object = {valueOf: function() {return "^"}, toString: function() {throw "error"}}; encodeURIComponent(object) throw "error". Actual: ' + (e)); - } -} - -//CHECK#8 -try { - var object = {valueOf: function() {return {}}, toString: function() {return {}}}; - encodeURIComponent(object); - $ERROR('#8.1: var object = {valueOf: function() {return {}}, toString: function() {return {}}}; encodeURIComponent(object) throw TypeError. Actual: ' + (encodeURIComponent(object))); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#8.2: var object = {valueOf: function() {return {}}, toString: function() {return {}}}; encodeURIComponent(object) throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/S15.1_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/S15.1_A1_T1.js deleted file mode 100644 index 086b61bc5..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/S15.1_A1_T1.js +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1_A1_T1; - * @section: 15.1; - * @assertion: The global object does not have a [[Construct]] property; - * @description: It is not possible to use the global object as a constructor - * with the new operator; - * @negative -*/ - -new this; diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/S15.1_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/S15.1_A1_T2.js deleted file mode 100644 index 58a46e125..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/S15.1_A1_T2.js +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1_A1_T2; - * @section: 15.1; - * @assertion: The global object does not have a [[Construct]] property; - * @description: It is not possible to use the global object as a constructor - * with the new operator; - * @negative -*/ - -new this(); diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/S15.1_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/S15.1_A2_T1.js deleted file mode 100644 index 050e0a84c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.1_The_Global_Object/S15.1_A2_T1.js +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1_A2_T1; - * @section: 15.1; - * @assertion: The global object does not have a [[Call]] property; - * @description: It is not possible to invoke the global object as a function; - * @negative -*/ - -this(); diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.1_The_Object_Constructor_Called_as_a_Function/S15.2.1.1_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.1_The_Object_Constructor_Called_as_a_Function/S15.2.1.1_A1_T1.js deleted file mode 100644 index eb796b3dd..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.1_The_Object_Constructor_Called_as_a_Function/S15.2.1.1_A1_T1.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.1.1_A1_T1; -* @section: 15.2.1.1, 15.2.2.1; -* @assertion: When the Object(value) is called and the value is null, undefined or not supplied, -* create and return a new Object object if the object constructor had been called with the same arguments (15.2.2.1); -* @description: Creating Object(null) and checking its properties; -*/ - -__obj = Object(null); - -n__obj = new Object(null); - -if (__obj.toString() !== n__obj.toString()){ - $ERROR('#1'); -} - -if (__obj.constructor !== n__obj.constructor) { - $ERROR('#2'); -} - -if (__obj.prototype !== n__obj.prototype) { - $ERROR('#3'); -} - -if (__obj.toLocaleString() !== n__obj.toLocaleString()) { - $ERROR('#4'); -} - -if (typeof __obj !== typeof n__obj) { - $ERROR('#5'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.1_The_Object_Constructor_Called_as_a_Function/S15.2.1.1_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.1_The_Object_Constructor_Called_as_a_Function/S15.2.1.1_A1_T2.js deleted file mode 100644 index 377bff72c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.1_The_Object_Constructor_Called_as_a_Function/S15.2.1.1_A1_T2.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.1.1_A1_T2; -* @section: 15.2.1.1, 15.2.2.1; -* @assertion: When the Object(value) is called and the value is null, undefined or not supplied, -* create and return a new Object object if the object constructor had been called with the same arguments (15.2.2.1); -* @description: Creating Object(void 0) and checking its properties; -*/ - -//var y= void 0; - -__obj = Object(void 0); - -n__obj = new Object(void 0); - - -if (__obj.toString() !== n__obj.toString()){ - $ERROR('#1'); -} - -if (__obj.constructor !== n__obj.constructor) { - $ERROR('#2'); -} - -if (__obj.prototype !== n__obj.prototype) { - $ERROR('#3'); -} - -if (__obj.toLocaleString() !== n__obj.toLocaleString()) { - $ERROR('#4'); -} - -if (typeof __obj !== typeof n__obj) { - $ERROR('#5'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.1_The_Object_Constructor_Called_as_a_Function/S15.2.1.1_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.1_The_Object_Constructor_Called_as_a_Function/S15.2.1.1_A1_T3.js deleted file mode 100644 index 9dfc03525..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.1_The_Object_Constructor_Called_as_a_Function/S15.2.1.1_A1_T3.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.1.1_A1_T3; -* @section: 15.2.1.1, 15.2.2.1; -* @assertion: When the Object(value) is called and the value is null, undefined or not supplied, -* create and return a new Object object if the object constructor had been called with the same arguments (15.2.2.1); -* @description: Creating Object() and checking its properties; -*/ - -__obj = Object(); - -n__obj = new Object(); - -if (__obj.toString() !== n__obj.toString()){ - $ERROR('#1'); -} - -if (__obj.constructor !== n__obj.constructor) { - $ERROR('#2'); -} - -if (__obj.prototype !== n__obj.prototype) { - $ERROR('#3'); -} - -if (__obj.toLocaleString() !== n__obj.toLocaleString()) { - $ERROR('#4'); -} - -if (typeof __obj !== typeof n__obj) { - $ERROR('#5'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.1_The_Object_Constructor_Called_as_a_Function/S15.2.1.1_A1_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.1_The_Object_Constructor_Called_as_a_Function/S15.2.1.1_A1_T4.js deleted file mode 100644 index e45ec786a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.1_The_Object_Constructor_Called_as_a_Function/S15.2.1.1_A1_T4.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.1.1_A1_T4; -* @section: 15.2.1.1, 15.2.2.1; -* @assertion: When the Object(value) is called and the value is null, undefined or not supplied, -* create and return a new Object object if the object constructor had been called with the same arguments (15.2.2.1); -* @description: Creating Object(undefined) and checking its properties; -*/ - -__obj = Object(undefined); - -n__obj = new Object(undefined); - -if (__obj.toString() !== n__obj.toString()){ - $ERROR('#1'); -} - -if (__obj.constructor !== n__obj.constructor) { - $ERROR('#2'); -} - -if (__obj.prototype !== n__obj.prototype) { - $ERROR('#3'); -} - -if (__obj.toLocaleString() !== n__obj.toLocaleString()) { - $ERROR('#4'); -} - -if (typeof __obj !== typeof n__obj) { - $ERROR('#5'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.1_The_Object_Constructor_Called_as_a_Function/S15.2.1.1_A1_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.1_The_Object_Constructor_Called_as_a_Function/S15.2.1.1_A1_T5.js deleted file mode 100644 index ecb3ec946..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.1_The_Object_Constructor_Called_as_a_Function/S15.2.1.1_A1_T5.js +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.1.1_A1_T5; -* @section: 15.2.1.1, 15.2.2.1; -* @assertion: When the Object(value) is called and the value is null, undefined or not supplied, -* create and return a new Object object if the object constructor had been called with the same arguments (15.2.2.1); -* @description: Creating Object(x) and checking its properties; -*/ - -__obj = Object(x); - -n__obj = new Object(x); - -if (__obj.toString() !== n__obj.toString()){ - $ERROR('#1'); -} - -if (__obj.constructor !== n__obj.constructor) { - $ERROR('#2'); -} - -if (__obj.prototype !== n__obj.prototype) { - $ERROR('#3'); -} - -if (__obj.toLocaleString() !== n__obj.toLocaleString()) { - $ERROR('#4'); -} - -if (typeof __obj !== typeof n__obj) { - $ERROR('#5'); -} - -var x; diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.1_The_Object_Constructor_Called_as_a_Function/S15.2.1.1_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.1_The_Object_Constructor_Called_as_a_Function/S15.2.1.1_A2_T1.js deleted file mode 100644 index 68b86edba..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.1_The_Object_Constructor_Called_as_a_Function/S15.2.1.1_A2_T1.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.1.1_A2_T1; -* @section: 15.2.1.1; -* @assertion: When the Object function is called with one argument value, -* and the value neither is null nor undefined, and is supplied, return ToObject(value); -* @description: Calling Object function with boolean argument value; -*/ - -bool = true; - -if(typeof bool !== 'boolean'){ - $FAIL('#1: bool should be boolean primitive'); -} - -obj = Object(bool); - -if (obj.constructor !== Boolean) { - $ERROR('#2: Object(true) returns ToObject(true)'); -} - -if (typeof obj !== "object") { - $ERROR('#3: Object(true) returns ToObject(true)'); -} - -if (!obj) { - $ERROR('#4: Object(true) returns ToObject(true)'); -} - -if (obj === true) { - $ERROR('#5: Object(true) returns ToObject(true)'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.1_The_Object_Constructor_Called_as_a_Function/S15.2.1.1_A2_T10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.1_The_Object_Constructor_Called_as_a_Function/S15.2.1.1_A2_T10.js deleted file mode 100644 index 6dfd9bc19..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.1_The_Object_Constructor_Called_as_a_Function/S15.2.1.1_A2_T10.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.1.1_A2_T10; -* @section: 15.2.1.1; -* @assertion: When the Object function is called with one argument value, -* and the value neither is null nor undefined, and is supplied, return ToObject(value); -* @description: Calling Object function with array of numbers as argument value; -*/ - -arr = [1,2,3]; - -//CHECK#1 -if (typeof arr !== 'object') { - $ERROR('#1: arr = [1,2,3] is NOT an object'); -} - -n_obj = Object(arr); - -arr.push(4); - -//CHECK#2 -if ((n_obj !== arr)||(n_obj[3]!==4)) { - $ERROR('#2: Object([1,2,3]) returns ToObject([1,2,3])'); -} - - - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.1_The_Object_Constructor_Called_as_a_Function/S15.2.1.1_A2_T11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.1_The_Object_Constructor_Called_as_a_Function/S15.2.1.1_A2_T11.js deleted file mode 100644 index 2d3560948..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.1_The_Object_Constructor_Called_as_a_Function/S15.2.1.1_A2_T11.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.1.1_A2_T11; -* @section: 15.2.1.1; -* @assertion: When the Object function is called with one argument value, -* and the value neither is null nor undefined, and is supplied, return ToObject(value); -* @description: Calling Object function with function declaration as argument value; -*/ - -//CHECK#1 -if (typeof func !== 'undefined') { - $ERROR('#1: function expression can\'t be declarated'); -} - -n_obj = Object(function func(){return 1;}); - -//CHECK#2 -if ((n_obj.constructor !== Function)||(n_obj()!==1)) { - $ERROR('#2: Object(function func(){return 1;}) returns function'); -} - -//CHECK#3 -if (typeof func !== 'undefined') { - $ERROR('#3: function expression can\'t be declarated'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.1_The_Object_Constructor_Called_as_a_Function/S15.2.1.1_A2_T12.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.1_The_Object_Constructor_Called_as_a_Function/S15.2.1.1_A2_T12.js deleted file mode 100644 index 3c5e7bd57..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.1_The_Object_Constructor_Called_as_a_Function/S15.2.1.1_A2_T12.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.1.1_A2_T12; -* @section: 15.2.1.1; -* @assertion: When the Object function is called with one argument value, -* and the value neither is null nor undefined, and is supplied, return ToObject(value); -* @description: Calling Object function with numeric expression as argument value; -*/ - -obj = Object(1.1*([].length+{q:1}["q"])); - -//CHECK#2 -if (typeof obj !== "object") { - $ERROR('#2: Object(expression) returns ToObject(expression)'); -} - -//CHECK#3 -if (obj.constructor !== Number) { - $ERROR('#3: Object(expression) returns ToObject(expression)'); -} - -//CHECK#4 -if ((obj != 1.1)||(obj === 1.1)) { - $ERROR('#4: Object(expression) returns ToObject(expression)'); -} -// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.1_The_Object_Constructor_Called_as_a_Function/S15.2.1.1_A2_T13.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.1_The_Object_Constructor_Called_as_a_Function/S15.2.1.1_A2_T13.js deleted file mode 100644 index 0663d62ca..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.1_The_Object_Constructor_Called_as_a_Function/S15.2.1.1_A2_T13.js +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.1.1_A2_T13; -* @section: 15.2.1.1; -* @assertion: When the Object function is called with one argument value, -* and the value neither is null nor undefined, and is supplied, return ToObject(value); -* @description: Calling Object function with boolean expression as argument value; -*/ - -obj = Object((1===1)&&(!false)); - -//CHECK#1 -if (obj.constructor !== Boolean) { - $ERROR('#1: Object(expression) returns ToObject(expression)'); -} - -//CHECK#1.1 -if (typeof obj !== "object") { - $ERROR('#1.1: Object(expression) returns ToObject(expression)'); -} - -//CHECK#2 -if (!(obj)) { - $ERROR('#2: Object(expression) returns ToObject(expression)'); -} - -//CHECK#3 -if (obj===true) { - $ERROR('#3: Object(expression) returns ToObject(expression)'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.1_The_Object_Constructor_Called_as_a_Function/S15.2.1.1_A2_T14.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.1_The_Object_Constructor_Called_as_a_Function/S15.2.1.1_A2_T14.js deleted file mode 100644 index a059fef59..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.1_The_Object_Constructor_Called_as_a_Function/S15.2.1.1_A2_T14.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.1.1_A2_T14; -* @section: 15.2.1.1; -* @assertion: When the Object function is called with one argument value, -* and the value neither is null nor undefined, and is supplied, return ToObject(value); -* @description: Calling Object function with sum of empty string and a number as argument value; -*/ - -obj = Object(""+1); - -//CHECK#2 -if (obj.constructor !== String) { - $ERROR('#2: Object(expression) returns ToObject(expression)'); -} - -//CHECK#3 -if (typeof obj !== "object") { - $ERROR('#3: Object(expression) returns ToObject(expression)'); -} - -//CHECK#4 -if ((obj != "1")||(obj === "1")) { - $ERROR('#4: Object(expression) returns ToObject(expression)'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.1_The_Object_Constructor_Called_as_a_Function/S15.2.1.1_A2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.1_The_Object_Constructor_Called_as_a_Function/S15.2.1.1_A2_T2.js deleted file mode 100644 index 4ca318825..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.1_The_Object_Constructor_Called_as_a_Function/S15.2.1.1_A2_T2.js +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.1.1_A2_T2; -* @section: 15.2.1.1; -* @assertion: When the Object function is called with one argument value, -* and the value neither is null nor undefined, and is supplied, return ToObject(value); -* @description: Calling Object function with number argument value; -*/ - -num = 1.1; - -// CHECK#1 -if(typeof num !== 'number'){ - $ERROR('#1: num = 1.1 should be Number primitive'); -} - -obj = Object(num); - -//CHECK#2 -if (typeof obj !== "object") { - $ERROR('#2: Object(1.1) returns ToObject(1.1)'); -} - -//CHECK#3 -if (obj.constructor !== Number) { - $ERROR('#3: Object(1.1) returns ToObject(1.1)'); -} - -//CHECK#4 -if ((obj != 1.1)||(obj === 1.1)) { - $ERROR('#4: Object(1.1) returns ToObject(1.1)'); -} -// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.1_The_Object_Constructor_Called_as_a_Function/S15.2.1.1_A2_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.1_The_Object_Constructor_Called_as_a_Function/S15.2.1.1_A2_T3.js deleted file mode 100644 index 2ce93a8ee..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.1_The_Object_Constructor_Called_as_a_Function/S15.2.1.1_A2_T3.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.1.1_A2_T3; -* @section: 15.2.1.1; -* @assertion: When the Object function is called with one argument value, -* and the value neither is null nor undefined, and is supplied, return ToObject(value); -* @description: Calling Object function with string argument value; -*/ - -str = 'Luke Skywalker'; - -// CHECK#1 -if (typeof str !== 'string') { - $ERROR('#1: "Luke Skywalker" should be a String primitive'); -} - -obj = Object(str); - -//CHECK#2 -if (obj.constructor !== String) { - $ERROR('#2: Object("Luke Skywalker") returns ToObject("Luke Skywalker")'); -} - -//CHECK#3 -if (typeof obj !== "object") { - $ERROR('#3: Object("Luke Skywalker") returns ToObject("Luke Skywalker")'); -} - -//CHECK#4 -if ((obj != "Luke Skywalker")||(obj === "Luke Skywalker")) { - $ERROR('#4: Object("Luke Skywalker") returns ToObject("Luke Skywalker")'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.1_The_Object_Constructor_Called_as_a_Function/S15.2.1.1_A2_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.1_The_Object_Constructor_Called_as_a_Function/S15.2.1.1_A2_T4.js deleted file mode 100644 index 4ee745317..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.1_The_Object_Constructor_Called_as_a_Function/S15.2.1.1_A2_T4.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.1.1_A2_T4; -* @section: 15.2.1.1; -* @assertion: When the Object function is called with one argument value, -* and the value neither is null nor undefined, and is supplied, return ToObject(value); -* @description: Calling Object function with object argument value; -*/ - -obj = {flag:true}; - -//CHECK#1 -if (typeof(obj) !== 'object') { - $FAIL('#1: obj = {flag:true} should be an Object'); -} - -n_obj = Object(obj); - -//CHECK#2 -if ((n_obj !== obj)||(!(n_obj['flag']))) { - $ERROR('#2: Object({flag:true}) returns ToObject({flag:true})'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.1_The_Object_Constructor_Called_as_a_Function/S15.2.1.1_A2_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.1_The_Object_Constructor_Called_as_a_Function/S15.2.1.1_A2_T5.js deleted file mode 100644 index 14570dbf0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.1_The_Object_Constructor_Called_as_a_Function/S15.2.1.1_A2_T5.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.1.1_A2_T5; -* @section: 15.2.1.1; -* @assertion: When the Object function is called with one argument value, -* and the value neither is null nor undefined, and is supplied, return ToObject(value); -* @description: Calling Object function with NaN argument value; -*/ - -num = NaN; - -// CHECK#1 -if(typeof num !== 'number'){ - $ERROR('#1: num = NaN should have number type'); -} - -obj = Object(num); - -//CHECK#2 -if (obj.constructor !== Number) { - $ERROR('#2: Object(Infinity) returns ToObject(Infinity)'); -} - -//CHECK#3 -if (typeof obj!=="object") { - $ERROR('#2: Object(Infinity) returns ToObject(Infinity)'); -} -// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.1_The_Object_Constructor_Called_as_a_Function/S15.2.1.1_A2_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.1_The_Object_Constructor_Called_as_a_Function/S15.2.1.1_A2_T6.js deleted file mode 100644 index 8b07c6cfd..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.1_The_Object_Constructor_Called_as_a_Function/S15.2.1.1_A2_T6.js +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.1.1_A2_T6; -* @section: 15.2.1.1; -* @assertion: When the Object function is called with one argument value, -* and the value neither is null nor undefined, and is supplied, return ToObject(value); -* @description: Calling Object function with Infinity argument value; -*/ - -num = Infinity; - -// CHECK#1 -if(typeof num !== 'number'){ - $ERROR('#1: num = Infinity should be a Number primitive'); -} - -obj = Object(num); - -//CHECK#2 -if (obj.constructor !== Number) { - $ERROR('#2: Object(Infinity) returns ToObject(Infinity)'); -} - -//CHECK#3 -if (typeof obj!=="object") { - $ERROR('#3: Object(Infinity) returns ToObject(Infinity)'); -} - -//CHECK#4 -if ((obj != Infinity)||(obj === Infinity)) { - $ERROR('#4: Object(Infinity) returns ToObject(Infinity)'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.1_The_Object_Constructor_Called_as_a_Function/S15.2.1.1_A2_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.1_The_Object_Constructor_Called_as_a_Function/S15.2.1.1_A2_T7.js deleted file mode 100644 index 5380a684e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.1_The_Object_Constructor_Called_as_a_Function/S15.2.1.1_A2_T7.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.1.1_A2_T7; -* @section: 15.2.1.1; -* @assertion: When the Object function is called with one argument value, -* and the value neither is null nor undefined, and is supplied, return ToObject(value); -* @description: Calling Object function with empty string argument value; -*/ - -str = ''; - -// CHECK#1 -if (typeof(str) !== 'string') { - $FAIL('#1: "" is NOT a String'); -} - -obj = Object(str); - -//CHECK#2 -if (obj.constructor !== String) { - $ERROR('#2: Object("") returns ToObject("")'); -} - -//CHECK#3 -if (typeof obj !== "object") { - $ERROR('#3: Object("") returns ToObject("")'); -} - -//CHECK#4 -if ((obj != "")||(obj === "")) { - $ERROR('#4: Object("") returns ToObject("")'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.1_The_Object_Constructor_Called_as_a_Function/S15.2.1.1_A2_T8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.1_The_Object_Constructor_Called_as_a_Function/S15.2.1.1_A2_T8.js deleted file mode 100644 index 79f109a56..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.1_The_Object_Constructor_Called_as_a_Function/S15.2.1.1_A2_T8.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.1.1_A2_T8; -* @section: 15.2.1.1; -* @assertion: When the Object function is called with one argument value, -* and the value neither is null nor undefined, and is supplied, return ToObject(value); -* @description: Calling Object function with function variable argument value; -*/ - -func = function(){return 1;}; - -//CHECK#1 -if (typeof func !== 'function') { - $ERROR('#1: func = function(){return 1;} is NOT an function'); -} - -n_obj = Object(func); - -//CHECK#2 -if ((n_obj !== func)||(n_obj()!==1)) { - $ERROR('#2: Object(function) returns function'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.1_The_Object_Constructor_Called_as_a_Function/S15.2.1.1_A2_T9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.1_The_Object_Constructor_Called_as_a_Function/S15.2.1.1_A2_T9.js deleted file mode 100644 index 5da8a1d81..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.1_The_Object_Constructor_Called_as_a_Function/S15.2.1.1_A2_T9.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.1.1_A2_T9; -* @section: 15.2.1.1; -* @assertion: When the Object function is called with one argument value, -* and the value neither is null nor undefined, and is supplied, return ToObject(value); -* @description: Calling Object function with function argument value. The function is declared; -*/ - -//CHECK#1 -if (typeof func !== 'function') { - $ERROR('#1: func = function(){return 1;} is NOT an function'); -} - -n_obj = Object(func); - -//CHECK#2 -if ((n_obj !== func)||(n_obj()!==1)) { - $ERROR('#2: Object(function) returns function'); -} - -function func(){return 1;}; - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.1_The_Object_Constructor_Called_as_a_Function/S15.2.1.1_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.1_The_Object_Constructor_Called_as_a_Function/S15.2.1.1_A3_T1.js deleted file mode 100644 index ade8ddb2c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.1_The_Object_Constructor_Called_as_a_Function/S15.2.1.1_A3_T1.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.1.1_A3_T1; -* @section: 15.2.1.1; -* @assertion: Since calling Object as a function is identical to calling a function, list of arguments bracketing is allowed; -* @description: Creating an object with "Object(1,2,3)"; -*/ - -obj = Object(1,2,3); - -//CHECK#1 -if (obj.constructor !== Number) { - $ERROR('#1: Since Object as a function calling is the same as function calling list of arguments can appears in braces;'); -} - -//CHECK#2 -if (typeof obj !== "object") { - $ERROR('#2: Since Object as a function calling is the same as function calling list of arguments can appears in braces;'); -} - -//CHECK#3 -if ((obj != 1)||(obj === 1)) { - $ERROR('3#: Since Object as a function calling is the same as function calling list of arguments can appears in braces;'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.1_The_Object_Constructor_Called_as_a_Function/S15.2.1.1_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.1_The_Object_Constructor_Called_as_a_Function/S15.2.1.1_A3_T2.js deleted file mode 100644 index 6890743af..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.1_The_Object_Constructor_Called_as_a_Function/S15.2.1.1_A3_T2.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.1.1_A3_T2; -* @section: 15.2.1.1; -* @assertion: Since calling Object as a function is identical to calling a function, list of arguments bracketing is allowed; -* @description: Creating an object with "Object(null,2,3)"; -*/ - -obj = Object(null,2,3); - -//CHECK#1 -if (obj.constructor !== Object) { - $ERROR('#1: Since Object as a function calling is the same as function calling list of arguments can appears in braces;'); -} - -//CHECK#2 -if (typeof obj !== "object") { - $ERROR('#2: Since Object as a function calling is the same as function calling list of arguments can appears in braces;'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.1_The_Object_Constructor_Called_as_a_Function/S15.2.1.1_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.1_The_Object_Constructor_Called_as_a_Function/S15.2.1.1_A3_T3.js deleted file mode 100644 index d4ec1152d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.1_The_Object_Constructor_Called_as_a_Function/S15.2.1.1_A3_T3.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.1.1_A3_T3; -* @section: 15.2.1.1; -* @assertion: Since calling Object as a function is identical to calling a function, list of arguments bracketing is allowed; -* @description: Creating an object with "Object((null,2,3),1,2)"; -*/ - -obj = Object((null,2,3),1,2); - -//CHECK#1 -if (obj.constructor !== Number) { - $ERROR('#1: Since Object as a function calling is the same as function calling list of arguments can appears in braces;'); -} - -//CHECK#2 -if (typeof obj !== "object") { - $ERROR('#2: Since Object as a function calling is the same as function calling list of arguments can appears in braces;'); -} - -//CHECK#3 -if ((obj != 3)||(obj === 3)) { - $ERROR('3#: Since Object as a function calling is the same as function calling list of arguments can appears in braces;'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A1_T1.js deleted file mode 100644 index c718aa62d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A1_T1.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.2.1_A1_T1; -* @section: 15.2.2.1; -* @assertion: When the Object constructor is called with no arguments the following steps are taken: -* (The argument value was not supplied or its type was Null or Undefined.) -* i) Create a new native ECMAScript object. -* ii) The [[Prototype]] property of the newly constructed object is set to the Object prototype object. -* iii) The [[Class]] property of the newly constructed object is set to "Object". -* iv) The newly constructed object has no [[Value]] property. -* v) Return the newly created native object; -* @description: Creating new Object() and checking its properties; -*/ - -var obj = new Object(); - -// CHECK#0 -if (obj === undefined) { - $ERROR('#0: new Object() return the newly created native object.'); -} - -// CHECK#1 -if (obj.constructor !== Object) { - $ERROR('#1: new Object() create a new native ECMAScript object'); -} - -// CHECK#2 -if (!(Object.prototype.isPrototypeOf(obj))) { - $ERROR('#2: when new Object() calls the [[Prototype]] property of the newly constructed object is set to the Object prototype object.'); -} - -// CHECK#3 -to_string_result = '[object '+ 'Object' +']'; -if (obj.toString() !== to_string_result) { - $ERROR('#3: when new Object() calls the [[Class]] property of the newly constructed object is set to "Object".'); -} - -// CHECK#4 -if (obj.valueOf().toString() !== to_string_result.toString()) { - $ERROR('#4: when new Object() calls the newly constructed object has no [[Value]] property.'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A1_T2.js deleted file mode 100644 index ca1fe8a8f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A1_T2.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.2.1_A1_T2; -* @section: 15.2.2.1; -* @assertion: When the Object constructor is called with no arguments the following steps are taken: -* (The argument value was not supplied or its type was Null or Undefined.) -* i) Create a new native ECMAScript object. -* ii) The [[Prototype]] property of the newly constructed object is set to the Object prototype object. -* iii) The [[Class]] property of the newly constructed object is set to "Object". -* iv) The newly constructed object has no [[Value]] property. -* v) Return the newly created native object; -* @description: Creating new Object(void 0) and checking its properties; -*/ - -//var foo = void 0; -var obj = new Object(void 0); - -// CHECK#0 -if (obj === undefined) { - $ERROR('#0: new Object(undefined) return the newly created native object.'); -} - -// CHECK#1 -if (obj.constructor !== Object) { - $ERROR('#1: new Object(undefined) create a new native ECMAScript object'); -} - -// CHECK#2 -if (!(Object.prototype.isPrototypeOf(obj))) { - $ERROR('#2: when new Object(undefined) calls the [[Prototype]] property of the newly constructed object is set to the Object prototype object.'); -} - -// CHECK#3 -to_string_result = '[object '+ 'Object' +']'; -if (obj.toString() !== to_string_result) { - $ERROR('#3: when new Object(undefined) calls the [[Class]] property of the newly constructed object is set to "Object".'); -} - -// CHECK#4 -if (obj.valueOf().toString() !== to_string_result.toString()) { - $ERROR('#4: when new Object(undefined) calls the newly constructed object has no [[Value]] property.'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A1_T3.js deleted file mode 100644 index 0d15de91e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A1_T3.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.2.1_A1_T3; -* @section: 15.2.2.1; -* @assertion: When the Object constructor is called with no arguments the following steps are taken: -* (The argument value was not supplied or its type was Null or Undefined.) -* i) Create a new native ECMAScript object. -* ii) The [[Prototype]] property of the newly constructed object is set to the Object prototype object. -* iii) The [[Class]] property of the newly constructed object is set to "Object". -* iv) The newly constructed object has no [[Value]] property. -* v) Return the newly created native object; -* @description: Creating new Object(null) and checking its properties; -*/ - -var obj = new Object(null); - -// CHECK#0 -if (obj === undefined) { - $ERROR('#0: new Object(null) return the newly created native object.'); -} - -// CHECK#1 -if (obj.constructor !== Object) { - $ERROR('#1: new Object(null) create a new native ECMAScript object'); -} - -// CHECK#2 -if (!(Object.prototype.isPrototypeOf(obj))) { - $ERROR('#2: when new Object(null) calls the [[Prototype]] property of the newly constructed object is set to the Object prototype object.'); -} - -// CHECK#3 -to_string_result = '[object '+ 'Object' +']'; -if (obj.toString() !== to_string_result) { - $ERROR('#3: when new Object(null) calls the [[Class]] property of the newly constructed object is set to "Object".'); -} - -// CHECK#4 -if (obj.valueOf().toString() !== to_string_result.toString()) { - $ERROR('#4: when new Object(null) calls the newly constructed object has no [[Value]] property.'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A1_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A1_T4.js deleted file mode 100644 index 6a811d45f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A1_T4.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.2.1_A1_T4; -* @section: 15.2.2.1; -* @assertion: When the Object constructor is called with no arguments the following steps are taken: -* (The argument value was not supplied or its type was Null or Undefined.) -* i) Create a new native ECMAScript object. -* ii) The [[Prototype]] property of the newly constructed object is set to the Object prototype object. -* iii) The [[Class]] property of the newly constructed object is set to "Object". -* iv) The newly constructed object has no [[Value]] property. -* v) Return the newly created native object; -* @description: Creating new Object(undefined) and checking its properties; -*/ - -var obj = new Object(undefined); - -// CHECK#0 -if (obj === undefined) { - $ERROR('#0: new Object(undefined) return the newly created native object.'); -} - -// CHECK#1 -if (obj.constructor !== Object) { - $ERROR('#1: new Object(undefined) create a new native ECMAScript object'); -} - -// CHECK#2 -if (!(Object.prototype.isPrototypeOf(obj))) { - $ERROR('#2: when new Object(undefined) calls the [[Prototype]] property of the newly constructed object is set to the Object prototype object.'); -} - -// CHECK#3 -to_string_result = '[object '+ 'Object' +']'; -if (obj.toString() !== to_string_result) { - $ERROR('#3: when new Object(undefined) calls the [[Class]] property of the newly constructed object is set to "Object".'); -} - -// CHECK#4 -if (obj.valueOf().toString() !== to_string_result.toString()) { - $ERROR('#4: when new Object(undefined) calls the newly constructed object has no [[Value]] property.'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A1_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A1_T5.js deleted file mode 100644 index 571ec113a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A1_T5.js +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.2.1_A1_T5; -* @section: 15.2.2.1; -* @assertion: When the Object constructor is called with no arguments the following steps are taken: -* (The argument value was not supplied or its type was Null or Undefined.) -* i) Create a new native ECMAScript object. -* ii) The [[Prototype]] property of the newly constructed object is set to the Object prototype object. -* iii) The [[Class]] property of the newly constructed object is set to "Object". -* iv) The newly constructed object has no [[Value]] property. -* v) Return the newly created native object; -* @description: Creating new Object(x), where x is "undefined", and checking it properties; -*/ - -var obj = new Object(x); - -// CHECK#0 -if (obj === undefined) { - $ERROR('#0: new Object(undefined) return the newly created native object.'); -} - -// CHECK#1 -if (obj.constructor !== Object) { - $ERROR('#1: new Object(undefined) create a new native ECMAScript object'); -} - -// CHECK#2 -if (!(Object.prototype.isPrototypeOf(obj))) { - $ERROR('#2: when new Object(undefined) calls the [[Prototype]] property of the newly constructed object is set to the Object prototype object.'); -} - -// CHECK#3 -to_string_result = '[object '+ 'Object' +']'; -if (obj.toString() !== to_string_result) { - $ERROR('#3: when new Object(undefined) calls the [[Class]] property of the newly constructed object is set to "Object".'); -} - -// CHECK#4 -if (obj.valueOf().toString() !== to_string_result.toString()) { - $ERROR('#4: when new Object(undefined) calls the newly constructed object has no [[Value]] property.'); -} - -var x; - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A2_T1.js deleted file mode 100644 index 6696c9e04..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A2_T1.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.2.1_A2_T1; -* @section: 15.2.2.1; -* @assertion: When the Object constructor is called with one argument value and -* the value is a native ECMAScript object, do not create a new object but simply return value; -* @description: The value is Object; -*/ - -var obj = {prop:1}; - -var n_obj = new Object(obj); - -//CHECK#1 -if (n_obj !== obj) { - $ERROR('#1: When the Object constructor is called and if the value is an Object simply value returns.'); -} - -//CHECK#2 -if (n_obj['prop'] !== 1) { - $ERROR('#2: When the Object constructor is called and if the value is an Object simply value returns.'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A2_T2.js deleted file mode 100644 index 632631202..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A2_T2.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.2.1_A2_T2; -* @section: 15.2.2.1; -* @assertion: When the Object constructor is called with one argument value and -* the value is a native ECMAScript object, do not create a new object but simply return value; -* @description: The value is a function variable; -*/ - -var func = function(){return 1;}; - -var n_obj = new Object(func); - -//CHECK#1 -if (n_obj !== func) { - $ERROR('#1: When the Object constructor is called and if the value is an Object simply value returns'); -} - -//CHECK#2 -if (n_obj() !== 1) { - $ERROR('When the Object constructor is called and if the value is an Object simply value returns'); -} -// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A2_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A2_T3.js deleted file mode 100644 index 94a63320f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A2_T3.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.2.1_A2_T3; -* @section: 15.2.2.1; -* @assertion: When the Object constructor is called with one argument value and -* the value is a native ECMAScript object, do not create a new object but simply return value; -* @description: The value is an array; -*/ - -var arr = [1,2,3]; - -var n_obj = new Object(arr); - -arr.push(4); - -//CHECK#1 -if (n_obj !== arr) { - $ERROR('#1: When the Object constructor is called and if the value is an Object simply value returns.'); -} - -//CHECK#2 -if (n_obj[3] !== 4) { - $ERROR('#2: When the Object constructor is called and if the value is an Object simply value returns.'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A2_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A2_T4.js deleted file mode 100644 index 4ac80ff8e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A2_T4.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.2.1_A2_T4; -* @section: 15.2.2.1; -* @assertion: When the Object constructor is called with one argument value and -* the value is a native ECMAScript object, do not create a new object but simply return value; -* @description: The value is "this"; -*/ - -x=1; - -var obj = this; - -var n_obj = new Object(obj); - -//CHECK#1 -if (n_obj !== obj) { - $ERROR('#1: When the Object constructor is called and if the value is an Object simply value returns.'); -} - -//CHECK#2 -if (n_obj['x'] !== 1) { - $ERROR('#2: When the Object constructor is called and if the value is an Object simply value returns.'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A2_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A2_T5.js deleted file mode 100644 index 03c98f039..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A2_T5.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.2.1_A2_T5; -* @section: 15.2.2.1; -* @assertion: When the Object constructor is called with one argument value and -* the value is a native ECMAScript object, do not create a new object but simply return value; -* @description: The value is a Date object; -*/ - -var obj = new Date(1978,3); - -var n_obj = new Object(obj); - -//CHECK#1 -if (n_obj !== obj) { - $ERROR('#1: When the Object constructor is called and if the value is an Object simply value returns.'); -} - -//CHECK#2 -if ((n_obj.getYear() !== 78)||(n_obj.getMonth() !== 3)) { - $ERROR('#2: When the Object constructor is called and if the value is an Object simply value returns.'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A2_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A2_T6.js deleted file mode 100644 index b7cec3274..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A2_T6.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.2.1_A2_T6; -* @section: 15.2.2.1; -* @assertion: When the Object constructor is called with one argument value and -* the value is a native ECMAScript object, do not create a new object but simply return value; -* @description: The value is a declared function; -*/ - - - -var n_obj = new Object(func); - -//CHECK#1 -if (n_obj !== func) { - $ERROR('#1: When the Object constructor is called and if the value is an Object simply value returns'); -} - -//CHECK#2 -if (n_obj() !== 1) { - $ERROR('When the Object constructor is called and if the value is an Object simply value returns'); -} - -function func(){return 1;}; diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A2_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A2_T7.js deleted file mode 100644 index 1f87507f8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A2_T7.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.2.1_A2_T7; -* @section: 15.2.2.1; -* @assertion: When the Object constructor is called with one argument value and -* the value is a native ECMAScript object, do not create a new object but simply return value; -* @description: The value is a function declaration; -*/ - -//CHECK#0 -if (typeof func !== 'undefined') { - $ERROR('#0: function expression can\'t be declarated'); -} - -var n_obj = new Object(function func(){return 1;}); - -//CHECK#1 -if (n_obj.constructor !== Function) { - $ERROR('#1: When the Object constructor is called and if the value is an Object simply value returns'); -} - -//CHECK#2 -if (n_obj() !== 1) { - $ERROR('#2: When the Object constructor is called and if the value is an Object simply value returns'); -} - -//CHECK#3 -if (typeof func !== 'undefined') { - $ERROR('#3: function expression can\'t be declarated'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A3_T1.js deleted file mode 100644 index 5e3770286..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A3_T1.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.2.1_A3_T1; -* @section: 15.2.2.1, 8.6; -* @assertion: When the Object constructor is called with one argument value and -* the type of value is String, return ToObject(string); -* @description: Argument value is a nonempty string; -*/ - -var str = 'Obi-Wan Kenobi'; - -//CHECK#1 -if (typeof str !== 'string') { - $FAIL('#1: "Obi-Wan Kenobi" is NOT a String'); -} - - -var n_obj = new Object(str); - -//CHECK#2 -if (n_obj.constructor !== String) { - $ERROR('#2: When the Object constructor is called with String argument return ToObject(string)'); -} - -//CHECK#3 -if (typeof n_obj !== 'object') { - $ERROR('#3: When the Object constructor is called with String argument return ToObject(string)'); -} - -//CHECK#4 -if ( n_obj != str) { - $ERROR('#4: When the Object constructor is called with String argument return ToObject(string)'); -} - -//CHECK#5 -if ( n_obj === str) { - $ERROR('#5: When the Object constructor is called with String argument return ToObject(string)'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A3_T2.js deleted file mode 100644 index 5e06f01bc..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A3_T2.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.2.1_A3_T2; -* @section: 15.2.2.1, 8.6; -* @assertion: When the Object constructor is called with one argument value and -* the type of value is String, return ToObject(string); -* @description: Argument value is an empty string; -*/ - -var str = ''; - -//CHECK#1 -if (typeof str !== 'string') { - $FAIL('#1: "" is NOT a String'); -} - -var n_obj = new Object(str); - -//CHECK#2 -if (n_obj.constructor !== String) { - $ERROR('#2: When the Object constructor is called with String argument return ToObject(string)'); -} - -//CHECK#3 -if (typeof n_obj !== 'object') { - $ERROR('#3: When the Object constructor is called with String argument return ToObject(string)'); -} - -//CHECK#4 -if ( n_obj != str) { - $ERROR('#4: When the Object constructor is called with String argument return ToObject(string)'); -} - -//CHECK#5 -if ( n_obj === str) { - $ERROR('#5: When the Object constructor is called with String argument return ToObject(string)'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A3_T3.js deleted file mode 100644 index 6bbcca7dd..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A3_T3.js +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.2.1_A3_T3; -* @section: 15.2.2.1, 8.6; -* @assertion: When the Object constructor is called with one argument value and -* the type of value is String, return ToObject(string); -* @description: Argument value is sum of empty string and number; -*/ - -var n_obj = new Object(""+1); - -//CHECK#2 -if (n_obj.constructor !== String) { - $ERROR('#2: When the Object constructor is called with String argument return ToObject(string)'); -} - -//CHECK#3 -if (typeof n_obj !== 'object') { - $ERROR('#3: When the Object constructor is called with String argument return ToObject(string)'); -} - -//CHECK#4 -if ( n_obj != "1") { - $ERROR('#4: When the Object constructor is called with String argument return ToObject(string)'); -} - -//CHECK#5 -if ( n_obj === "1") { - $ERROR('#5: When the Object constructor is called with String argument return ToObject(string)'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A4_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A4_T1.js deleted file mode 100644 index e5c7d87a6..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A4_T1.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.2.1_A4_T1; -* @section: 15.2.2.1, 8.6; -* @assertion: When the Object constructor is called with one argument value and -* the type of value is Boolean, return ToObject(boolean); -* @description: Argument value is "true"; -*/ - - -var bool = true; - -//CHECK#1 -if (typeof bool !== 'boolean') { - $FAIL('#1: true is NOT a boolean'); -} - -var n_obj = new Object(bool); - -//CHECK#2 -if (n_obj.constructor !== Boolean) { - $ERROR('#2: When the Object constructor is called with Boolean argument return ToObject(boolean)'); -} - -//CHECK#3 -if (typeof n_obj !== 'object') { - $ERROR('#3: When the Object constructor is called with Boolean argument return ToObject(boolean)'); -} - -//CHECK#4 -if ( n_obj != bool) { - $ERROR('#4: When the Object constructor is called with Boolean argument return ToObject(boolean)'); -} - -//CHECK#5 -if ( n_obj === bool) { - $ERROR('#5: When the Object constructor is called with Boolean argument return ToObject(boolean)'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A4_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A4_T2.js deleted file mode 100644 index 5afa51df9..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A4_T2.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.2.1_A4_T2; -* @section: 15.2.2.1, 8.6; -* @assertion: When the Object constructor is called with one argument value and -* the type of value is Boolean, return ToObject(boolean); -* @description: Argument value is "false"; -*/ - - -var bool = false; - -//CHECK#1 -if (typeof bool !== 'boolean') { - $FAIL('#1: false is NOT a boolean'); -} - -var n_obj = new Object(bool); - -//CHECK#2 -if (n_obj.constructor !== Boolean) { - $ERROR('#2: When the Object constructor is called with Boolean argument return ToObject(boolean)'); -} - -//CHECK#3 -if (typeof n_obj !== 'object') { - $ERROR('#3: When the Object constructor is called with Boolean argument return ToObject(boolean)'); -} - -//CHECK#4 -if ( n_obj != bool) { - $ERROR('#4: When the Object constructor is called with Boolean argument return ToObject(boolean)'); -} - -//CHECK#5 -if ( n_obj === bool) { - $ERROR('#5: When the Object constructor is called with Boolean argument return ToObject(boolean)'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A4_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A4_T3.js deleted file mode 100644 index c4cfcd075..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A4_T3.js +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.2.1_A4_T3; -* @section: 15.2.2.1, 8.6; -* @assertion: When the Object constructor is called with one argument value and -* the type of value is Boolean, return ToObject(boolean); -* @description: Argument value is boolean expression; -*/ - -var n_obj = new Object((1===1)&&!(false)); - -//CHECK#2 -if (n_obj.constructor !== Boolean) { - $ERROR('#2: When the Object constructor is called with Boolean argument return ToObject(boolean)'); -} - -//CHECK#3 -if (typeof n_obj !== 'object') { - $ERROR('#3: When the Object constructor is called with Boolean argument return ToObject(boolean)'); -} - -//CHECK#4 -if ( n_obj != true) { - $ERROR('#4: When the Object constructor is called with Boolean argument return ToObject(boolean)'); -} - -//CHECK#5 -if ( n_obj === true) { - $ERROR('#5: When the Object constructor is called with Boolean argument return ToObject(boolean)'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A5_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A5_T1.js deleted file mode 100644 index e0e134bf2..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A5_T1.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.2.1_A5_T1; -* @section: 15.2.2.1, 8.6; -* @assertion: When the Object constructor is called with one argument value and -* the type of value is Number, return ToObject(number); -* @description: Argument value is any number; -*/ - -var num = 1.0; - -//CHECK#1 -if (typeof num !== 'number') { - $FAIL('#1: 1.0 is NOT a number'); -} - -var n_obj = new Object(num); - -//CHECK#2 -if (n_obj.constructor !== Number) { - $ERROR('#2: When the Object constructor is called with Number argument return ToObject(number)'); -} - -//CHECK#3 -if (typeof n_obj !== 'object') { - $ERROR('#3: When the Object constructor is called with Number argument return ToObject(number)'); -} - -//CHECK#4 -if ( n_obj != num) { - $ERROR('#4: When the Object constructor is called with Number argument return ToObject(number)'); -} - -//CHECK#5 -if ( n_obj === num) { - $ERROR('#5: When the Object constructor is called with Number argument return ToObject(number)'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A5_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A5_T2.js deleted file mode 100644 index f6c6fe521..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A5_T2.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.2.1_A5_T2; -* @section: 15.2.2.1, 8.6; -* @assertion: When the Object constructor is called with one argument value and -* the type of value is Number, return ToObject(number); -* @description: Argument value is NaN; -*/ - -var num = NaN; - -//CHECK#1 -if (typeof num !== 'number') { - $FAIL('#1: NaN is NOT a number'); -} - -var n_obj = new Object(num); - -//CHECK#2 -if (n_obj.constructor !== Number) { - $ERROR('#2: When the Object constructor is called with Number argument return ToObject(number)'); -} - -//CHECK#3 -if (typeof n_obj !== 'object') { - $ERROR('#3: When the Object constructor is called with Number argument return ToObject(number)'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A5_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A5_T3.js deleted file mode 100644 index 0fdc5f2b3..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A5_T3.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.2.1_A5_T3; -* @section: 15.2.2.1, 8.6; -* @assertion:When the Object constructor is called with one argument value and -* the type of value is Number, return ToObject(number); -* @description: Argument value is Infinity; -*/ - -var num = Infinity; - -//CHECK#1 -if (typeof num !== 'number') { - $FAIL('#1: Infinity is NOT a number'); -} - -var n_obj = new Object(num); - -//CHECK#2 -if (n_obj.constructor !== Number) { - $ERROR('#2: When the Object constructor is called with Number argument return ToObject(number)'); -} - -//CHECK#3 -if (typeof n_obj !== 'object') { - $ERROR('#3: When the Object constructor is called with Number argument return ToObject(number)'); -} - -//CHECK#4 -if ( n_obj != num) { - $ERROR('#4: When the Object constructor is called with Number argument return ToObject(number)'); -} - -//CHECK#5 -if ( n_obj === num) { - $ERROR('#5: When the Object constructor is called with Number argument return ToObject(number)'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A5_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A5_T4.js deleted file mode 100644 index fc4ca32ff..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A5_T4.js +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.2.1_A5_T4; -* @section: 15.2.2.1, 8.6; -* @assertion: When the Object constructor is called with one argument value and -* the type of value is Number, return ToObject(number); -* @description: Argument value is numeric expression; -*/ - -var n_obj = new Object( 2*([].length + {q:1}["q"])); - -//CHECK#2 -if (n_obj.constructor !== Number) { - $ERROR('#2: When the Object constructor is called with Number argument return ToObject(number)'); -} - -//CHECK#3 -if (typeof n_obj !== 'object') { - $ERROR('#3: When the Object constructor is called with Number argument return ToObject(number)'); -} - -//CHECK#4 -if ( n_obj != 2) { - $ERROR('#4: When the Object constructor is called with Number argument return ToObject(number)'); -} - -//CHECK#5 -if ( n_obj === 2) { - $ERROR('#5: When the Object constructor is called with Number argument return ToObject(number)'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A6_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A6_T1.js deleted file mode 100644 index 887d2420e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A6_T1.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.2.1_A6_T1; -* @section: 15.2.2.1; -* @assertion: Since calling Object as a function is identical to calling a function, list of arguments bracketing is allowed; -* @description: Creating an object with "new Object(1,2,3)"; -*/ - -obj = new Object(1,2,3); - -//CHECK#1 -if (obj.constructor !== Number) { - $ERROR('#1: Since Object as a function calling is the same as function calling list of arguments can appears in braces;'); -} - -//CHECK#2 -if (typeof obj !== "object") { - $ERROR('#2: Since Object as a function calling is the same as function calling list of arguments can appears in braces;'); -} - -//CHECK#3 -if ((obj != 1)||(obj === 1)) { - $ERROR('3#: Since Object as a function calling is the same as function calling list of arguments can appears in braces;'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A6_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A6_T2.js deleted file mode 100644 index 887895cd9..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A6_T2.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.2.1_A6_T2; -* @section: 15.2.2.1; -* @assertion: Since calling Object as a function is identical to calling a function, list of arguments bracketing is allowed; -* @description: Creating an object with "new Object(null,2,3)"; -*/ - -obj = new Object(null,2,3); - -//CHECK#1 -if (obj.constructor !== Object) { - $ERROR('#1: Since Object as a function calling is the same as function calling list of arguments can appears in braces;'); -} - -//CHECK#2 -if (typeof obj !== "object") { - $ERROR('#2: Since Object as a function calling is the same as function calling list of arguments can appears in braces;'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A6_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A6_T3.js deleted file mode 100644 index 6b46e4f2e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.2_The_Object_Constructor/S15.2.2.1_A6_T3.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.2.1_A6_T3; -* @section: 15.2.2.1; -* @assertion: Since calling Object as a function is identical to calling a function, list of arguments bracketing is allowed; -* @description: Creating an object with "new Object((null,2,3),2,3)"; -*/ - -obj = new Object((null,2,3),1,2); - -//CHECK#1 -if (obj.constructor !== Number) { - $ERROR('#1: Since Object as a function calling is the same as function calling list of arguments can appears in braces;'); -} - -//CHECK#2 -if (typeof obj !== "object") { - $ERROR('#2: Since Object as a function calling is the same as function calling list of arguments can appears in braces;'); -} - -//CHECK#3 -if ((obj != 3)||(obj === 3)) { - $ERROR('3#: Since Object as a function calling is the same as function calling list of arguments can appears in braces;'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.3_Properties_of_the_Object_Constructor/15.2.3.1_Object.prototype/S15.2.3.1_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.3_Properties_of_the_Object_Constructor/15.2.3.1_Object.prototype/S15.2.3.1_A1.js deleted file mode 100644 index 8c8795840..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.3_Properties_of_the_Object_Constructor/15.2.3.1_Object.prototype/S15.2.3.1_A1.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.3.1_A1; -* @section: 15.2.3.1, 15.2.4; -* @assertion: The Object.prototype property has the attribute ReadOnly; -* @description: Checking if varying "Object.prototype" property fails; -*/ - -obj = Object.prototype; -Object.prototype = function(){return "shifted";}; - -//CHECK#1 -if (Object.prototype !== obj) { - $ERROR('#1: the Object.prototype property has the attributes ReadOnly.'); -} - -//CHECK#2 -try { - Object.prototype(); - $ERROR('#2: the Object.prototype property has the attributes ReadOnly'); -} catch (e) { - ; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.3_Properties_of_the_Object_Constructor/15.2.3.1_Object.prototype/S15.2.3.1_A2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.3_Properties_of_the_Object_Constructor/15.2.3.1_Object.prototype/S15.2.3.1_A2.js deleted file mode 100644 index 6bdbe4457..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.3_Properties_of_the_Object_Constructor/15.2.3.1_Object.prototype/S15.2.3.1_A2.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.3.1_A2; -* @section: 15.2.3.1, 15.2.4; -* @assertion: The Object.prototype property has the attribute DontEnum; -* @description: Checking if enumerating "Object.prototype" property fails; -*/ - -// CHECK#1 -if (Object.propertyIsEnumerable('prototype')) { - $ERROR('#1: the Object.prototype property has the attributes DontEnum'); -} - -// CHECK#2 -cout=0; - -for (p in Object){ - if (p==="prototype") cout++; -} - -if (cout !== 0) { - $ERROR('#2: the Object.prototype property has the attributes DontEnum'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.3_Properties_of_the_Object_Constructor/15.2.3.1_Object.prototype/S15.2.3.1_A3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.3_Properties_of_the_Object_Constructor/15.2.3.1_Object.prototype/S15.2.3.1_A3.js deleted file mode 100644 index 9ea3bde42..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.3_Properties_of_the_Object_Constructor/15.2.3.1_Object.prototype/S15.2.3.1_A3.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.3.1_A3; -* @section: 15.2.3.1, 15.2.4; -* @assertion: The Object.prototype property has the attribute DontDelete; -* @description: Checking if deleting "Object.prototype" property fails; -*/ - -delete Object.prototype; - -//CHECK#2 -if (!(Object.hasOwnProperty('prototype'))) { - $ERROR('#2: the Object.prototype property has the attributes DontDelete.'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.3_Properties_of_the_Object_Constructor/S15.2.3_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.3_Properties_of_the_Object_Constructor/S15.2.3_A1.js deleted file mode 100644 index 58233accf..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.3_Properties_of_the_Object_Constructor/S15.2.3_A1.js +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.2.3_A1; - * @section: 15.2.3; - * @assertion: The Object constructor has the property "prototype"; - * @description: Checking existence of the property "prototype"; - */ - -if(!Object.hasOwnProperty("prototype")){ - $ERROR('#1: The Object constructor has the property "prototype"'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.3_Properties_of_the_Object_Constructor/S15.2.3_A2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.3_Properties_of_the_Object_Constructor/S15.2.3_A2.js deleted file mode 100644 index ebab688c6..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.3_Properties_of_the_Object_Constructor/S15.2.3_A2.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.3_A2; -* @section: 15.2.3, 15.2.4; -* @assertion: The value of the internal [[Prototype]] property of the Object constructor -* is the Function prototype object; -* @description: Checking Function.prototype.isPrototypeOf(Object); -*/ - -// CHECK# -if (!(Function.prototype.isPrototypeOf(Object))) { - $ERROR('#1: the value of the internal [[Prototype]] property of the Object constructor is the Function prototype object.'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.3_Properties_of_the_Object_Constructor/S15.2.3_A3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.3_Properties_of_the_Object_Constructor/S15.2.3_A3.js deleted file mode 100644 index fa3ba100b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.3_Properties_of_the_Object_Constructor/S15.2.3_A3.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.3_A3; -* @section: 15.2.3, 15.2.4; -* @assertion: Object constructor has length property whose value is 1; -* @description: Checking Object.length; -*/ - -//CHECK#1 -if(!Object.hasOwnProperty("length")){ - $ERROR('#1: The Object constructor has the property "length"'); -} - -//CHECK#2 -if (Object.length !== 1) { - $ERROR('#2: Object.length property value should be 1'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.2_Object.prototype.toString/S15.2.4.2_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.2_Object.prototype.toString/S15.2.4.2_A1.js deleted file mode 100644 index 2ea370102..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.2_Object.prototype.toString/S15.2.4.2_A1.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.4.2_A1; -* @section: 15.2.4.2; -* @assertion: When the toString method is called, the following steps are taken: -* i) Get the [[Class]] property of this object -* ii) Compute a string value by concatenating the three strings "[object ", Result(1), and "]" -* iii) Return Result(2); -* @description: Checking the type of Object.prototype.toString and the returned result; -*/ - -//CHECK#1 -if (typeof Object.prototype.toString !== "function") { - $ERROR('#1: toString method defined'); -} - -//CHECK#2 -if (Object.prototype.toString() !=="[object "+"Object"+"]") { - $ERROR('#2: return a string value by concatenating the three strings "[object ", the [[Class]] property of this object, and "]"'); -} - -//CHECK#3 -if ({}.toString()!=="[object "+"Object"+"]") { - $ERROR('#3: return a string value by concatenating the three strings "[object ", the [[Class]] property of this object, and "]"'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.2_Object.prototype.toString/S15.2.4.2_A10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.2_Object.prototype.toString/S15.2.4.2_A10.js deleted file mode 100644 index 7543120d5..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.2_Object.prototype.toString/S15.2.4.2_A10.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.4.2_A10; -* @section: 15.2.4.2; -* @assertion: The Object.prototype.toString.length property has the attribute ReadOnly; -* @description: Checking if varying the Object.prototype.toString.length property fails; -*/ - -//CHECK#1 -if (!(Object.prototype.toString.hasOwnProperty('length'))) { - $FAIL('#1: the Object.prototype.toString has length property.'); -} - -obj = Object.prototype.toString.length; - -Object.prototype.toString.length = function(){return "shifted";}; - -//CHECK#2 -if (Object.prototype.toString.length !== obj) { - $ERROR('#2: the Object.prototype.toString length property has the attributes ReadOnly.'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.2_Object.prototype.toString/S15.2.4.2_A11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.2_Object.prototype.toString/S15.2.4.2_A11.js deleted file mode 100644 index 9ee582285..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.2_Object.prototype.toString/S15.2.4.2_A11.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.4.2_A11; -* @section: 15.2.4.2; -* @assertion: The length property of the toString method is 0; -* @description: Checking the Object.prototype.toString.length property; -*/ - -//CHECK#1 -if (!(Object.prototype.toString.hasOwnProperty("length"))) { - $ERROR('#1: The length property of the toString method is 0'); -} - -//CHECK#2 -if (Object.prototype.toString.length !== 0) { - $ERROR('#2: The length property of the toString method is 0'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.2_Object.prototype.toString/S15.2.4.2_A6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.2_Object.prototype.toString/S15.2.4.2_A6.js deleted file mode 100644 index 73d75fb0f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.2_Object.prototype.toString/S15.2.4.2_A6.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.4.2_A6; -* @section: 15.2.4.2, 13.2; -* @assertion: Object.prototype.toString has not prototype property; -* @description: Checking if obtaining the prototype property of Object.prototype.toString fails; -*/ - -//CHECK#1 -if (Object.prototype.toString.prototype !== undefined) { - $ERROR('#1: Object.prototype.toString has not prototype property'+Object.prototype.toString.prototype); -} -// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.2_Object.prototype.toString/S15.2.4.2_A7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.2_Object.prototype.toString/S15.2.4.2_A7.js deleted file mode 100644 index a557d42bf..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.2_Object.prototype.toString/S15.2.4.2_A7.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.4.2_A7; -* @section: 15.2.4.2, 13.2; -* @assertion: Object.prototype.toString can't be used as a constructor; -* @description: Checking if creating "new Object.prototype.toString" fails; -*/ - -FACTORY = Object.prototype.toString; - -try { - instance = new FACTORY; - $FAIL('#1: Object.prototype.toString can\'t be used as a constructor'); -} catch (e) { - $PRINT(e); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.2_Object.prototype.toString/S15.2.4.2_A8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.2_Object.prototype.toString/S15.2.4.2_A8.js deleted file mode 100644 index 982804f38..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.2_Object.prototype.toString/S15.2.4.2_A8.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.4.2_A8; -* @section: 15.2.4.2; -* @assertion: The Object.prototype.toString.length property has the attribute DontEnum; -* @description: Checking if enumerating the Object.prototype.toString.length property fails; -*/ - -//CHECK#0 -if (!(Object.prototype.toString.hasOwnProperty('length'))) { - $FAIL('#0: the Object.prototype.toString has length property.'); -} - - -// CHECK#1 -if (Object.prototype.toString.propertyIsEnumerable('length')) { - $ERROR('#1: the Object.prototype.toString.length property has the attributes DontEnum'); -} - -// CHECK#2 -for (p in Object.prototype.toString){ - if (p==="length") - $ERROR('#2: the Object.prototype.toString.length property has the attributes DontEnum'); -} -// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.2_Object.prototype.toString/S15.2.4.2_A9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.2_Object.prototype.toString/S15.2.4.2_A9.js deleted file mode 100644 index daf788641..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.2_Object.prototype.toString/S15.2.4.2_A9.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.4.2_A9; -* @section: 15.2.4.2; -* @assertion: The Object.prototype.toString.length property has the attribute DontDelete; -* @description: Checknig if deleting of the Object.prototype.toString.length property fails; -*/ - -//CHECK#0 -if (!(Object.prototype.toString.hasOwnProperty('length'))) { - $FAIL('#0: the Object.prototype.toString has length property'); -} - -//CHECK#1 -if (delete Object.prototype.toString.length) { - $ERROR('#1: The Object.prototype.toString.length property has the attributes DontDelete'); -} - -//CHECK#2 -if (!(Object.prototype.toString.hasOwnProperty('length'))) { - $FAIL('#2: The Object.prototype.toString.length property has the attributes DontDelete'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.3_Object.prototype.toLocaleString/S15.2.4.3_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.3_Object.prototype.toLocaleString/S15.2.4.3_A1.js deleted file mode 100644 index 3fcc09df1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.3_Object.prototype.toLocaleString/S15.2.4.3_A1.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.4.3_A1; -* @section: 15.2.4.3; -* @assertion: toLocaleString function returns the result of calling toString(); -* @description: Checking the type of Object.prototype.toLocaleString and the returned result; -*/ - -//CHECK#1 -if (typeof Object.prototype.toLocaleString !== "function") { - $ERROR('#1: toLocaleString method defined'); -} - -//CHECK#2 -if (Object.prototype.toLocaleString() !== Object.prototype.toString()) { - $ERROR('#1: toLocaleString function returns the result of calling toString()'); -} - -//CHECK#2 -if ({}.toLocaleString()!=={}.toString()) { - $ERROR('#2: toLocaleString function returns the result of calling toString()'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.3_Object.prototype.toLocaleString/S15.2.4.3_A10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.3_Object.prototype.toLocaleString/S15.2.4.3_A10.js deleted file mode 100644 index e529ebe88..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.3_Object.prototype.toLocaleString/S15.2.4.3_A10.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.4.3_A10; -* @section: 15.2.4.3; -* @assertion: The Object.prototype.toLocaleString.length property has the attribute ReadOnly; -* @description: Checking if varying the Object.prototype.toLocaleString.length property fails; -*/ - -//CHECK#1 -if (!(Object.prototype.toLocaleString.hasOwnProperty('length'))) { - $FAIL('#1: the Object.prototype.toLocaleString has length property.'); -} - -obj = Object.prototype.toLocaleString.length; - -Object.prototype.toLocaleString.length = function(){return "shifted";}; - -//CHECK#2 -if (Object.prototype.toLocaleString.length !== obj) { - $ERROR('#2: the Object.prototype.toLocaleString length property has the attributes ReadOnly.'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.3_Object.prototype.toLocaleString/S15.2.4.3_A11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.3_Object.prototype.toLocaleString/S15.2.4.3_A11.js deleted file mode 100644 index 131dbff96..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.3_Object.prototype.toLocaleString/S15.2.4.3_A11.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.4.3_A11; -* @section: 15.2.4.3; -* @assertion: The length property of the toLocaleString method is 0; -* @description: Checking the Object.prototype.toLocaleString.length; -*/ - -//CHECK#1 -if (!(Object.prototype.toLocaleString.hasOwnProperty("length"))) { - $ERROR('#1: The length property of the toLocaleString method is 0'); -} - -//CHECK#2 -if (Object.prototype.toLocaleString.length !== 0) { - $ERROR('#2: The length property of the toLocaleString method is 0'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.3_Object.prototype.toLocaleString/S15.2.4.3_A6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.3_Object.prototype.toLocaleString/S15.2.4.3_A6.js deleted file mode 100644 index 2073b3f4b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.3_Object.prototype.toLocaleString/S15.2.4.3_A6.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.4.3_A6; -* @section: 15.2.4.3, 13.2; -* @assertion: Object.prototype.toLocaleString has not prototype property; -* @description: Checking if obtaining the prototype property of Object.prototype.toLocaleString fails; -*/ - -//CHECK#1 -if (Object.prototype.toLocaleString.prototype !== undefined) { - $ERROR('#1: Object.prototype.toLocaleString has not prototype property'+Object.prototype.toLocaleString.prototype); -} -// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.3_Object.prototype.toLocaleString/S15.2.4.3_A7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.3_Object.prototype.toLocaleString/S15.2.4.3_A7.js deleted file mode 100644 index 38be1c34c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.3_Object.prototype.toLocaleString/S15.2.4.3_A7.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.4.3_A7; -* @section: 15.2.4.3, 13.2; -* @assertion: Object.prototype.toLocaleString can't be used as a constructor; -* @description: Checking if creating "new Object.prototype.toLocaleString" fails; -*/ - -FACTORY = Object.prototype.toLocaleString; - -try { - instance = new FACTORY; - $FAIL('#1: Object.prototype.toLocaleString can\'t be used as a constructor'); -} catch (e) { - $PRINT(e); - -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.3_Object.prototype.toLocaleString/S15.2.4.3_A8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.3_Object.prototype.toLocaleString/S15.2.4.3_A8.js deleted file mode 100644 index 0e97341c7..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.3_Object.prototype.toLocaleString/S15.2.4.3_A8.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.4.3_A8; -* @section: 15.2.4.3; -* @assertion: The Object.prototype.toLocaleString.length property has the attribute DontEnum; -* @description: Checking if enumerating the Object.prototype.toLocaleString.length property fails; -*/ - -//CHECK#0 -if (!(Object.prototype.toLocaleString.hasOwnProperty('length'))) { - $FAIL('#0: the Object.prototype.toLocaleString has length property.'); -} - - -// CHECK#1 -if (Object.prototype.toLocaleString.propertyIsEnumerable('length')) { - $ERROR('#1: the Object.prototype.toLocaleString.length property has the attributes DontEnum'); -} - -// CHECK#2 -for (p in Object.prototype.toLocaleString){ - if (p==="length") - $ERROR('#2: the Object.prototype.toLocaleString.length property has the attributes DontEnum'); -} -// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.3_Object.prototype.toLocaleString/S15.2.4.3_A9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.3_Object.prototype.toLocaleString/S15.2.4.3_A9.js deleted file mode 100644 index ca5e5a64a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.3_Object.prototype.toLocaleString/S15.2.4.3_A9.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.4.3_A9; -* @section: 15.2.4.3; -* @assertion: The Object.prototype.toLocaleString.length property has the attribute DontDelete; -* @description: Checknig if deleting of the Object.prototype.toLocaleString.length property fails; -*/ - -//CHECK#0 -if (!(Object.prototype.toLocaleString.hasOwnProperty('length'))) { - $FAIL('#0: the Object.prototype.toLocaleString has length property'); -} - -//CHECK#1 -if (delete Object.prototype.toLocaleString.length) { - $ERROR('#1: The Object.prototype.toLocaleString.length property has the attributes DontDelete'); -} - -//CHECK#2 -if (!(Object.prototype.toLocaleString.hasOwnProperty('length'))) { - $FAIL('#2: The Object.prototype.toLocaleString.length property has the attributes DontDelete'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.4_Object.prototype.valueOf/S15.2.4.4_A10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.4_Object.prototype.valueOf/S15.2.4.4_A10.js deleted file mode 100644 index 014d526dd..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.4_Object.prototype.valueOf/S15.2.4.4_A10.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.4.4_A10; -* @section: 15.2.4.4; -* @assertion: The Object.prototype.valueOf.length property has the attribute ReadOnly; -* @description: Checking if varying the Object.prototype.valueOf.length property fails; -*/ - -//CHECK#1 -if (!(Object.prototype.valueOf.hasOwnProperty('length'))) { - $FAIL('#1: the Object.prototype.valueOf has length property.'); -} - -obj = Object.prototype.valueOf.length; - -Object.prototype.valueOf.length = function(){return "shifted";}; - -//CHECK#2 -if (Object.prototype.valueOf.length !== obj) { - $ERROR('#2: the Object.prototype.valueOf length property has the attributes ReadOnly.'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.4_Object.prototype.valueOf/S15.2.4.4_A11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.4_Object.prototype.valueOf/S15.2.4.4_A11.js deleted file mode 100644 index 6e7b69825..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.4_Object.prototype.valueOf/S15.2.4.4_A11.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.4.4_A11; -* @section: 15.2.4.4; -* @assertion: The length property of the valueOf method is 0; -* @description: Checking the Object.prototype.valueOf.length; -*/ - -//CHECK#1 -if (!(Object.prototype.valueOf.hasOwnProperty("length"))) { - $ERROR('#1: The length property of the toObject method is 0'); -} - -//CHECK#2 -if (Object.prototype.valueOf.length !== 0) { - $ERROR('#2: The length property of the toObject method is 0'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.4_Object.prototype.valueOf/S15.2.4.4_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.4_Object.prototype.valueOf/S15.2.4.4_A1_T1.js deleted file mode 100644 index 2aec22a59..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.4_Object.prototype.valueOf/S15.2.4.4_A1_T1.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.4.4_A1_T1; -* @section: 15.2.4.4; -* @assertion: The valueOf method returns its "this" value; -* @description: "this" value is a number; -*/ - -//CHECK#1 -if (typeof Object.prototype.valueOf !== "function") { - $ERROR('#1: valueOf method defined'); -} - -obj=new Object(1.1); - -//CHECK#2 -if (typeof obj.valueOf !== "function") { - $ERROR('#2: valueOf method accessed'); -} - -//CHECK#3 -if (obj.valueOf()!==1.1) { - $ERROR('#3: The valueOf method returns its this value'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.4_Object.prototype.valueOf/S15.2.4.4_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.4_Object.prototype.valueOf/S15.2.4.4_A1_T2.js deleted file mode 100644 index baf059ba7..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.4_Object.prototype.valueOf/S15.2.4.4_A1_T2.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.4.4_A1_T2; -* @section: 15.2.4.4; -* @assertion: The valueOf method returns its "this" value; -* @description: "this" value is a boolean; -*/ - -//CHECK#1 -if (typeof Object.prototype.valueOf !== "function") { - $ERROR('#1: valueOf method defined'); -} - -obj=new Object(true); - -//CHECK#2 -if (typeof obj.valueOf !== "function") { - $ERROR('#2: valueOf method accessed'); -} - -//CHECK#3 -if (obj.valueOf()!==true) { - $ERROR('#3: The valueOf method returns its this value'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.4_Object.prototype.valueOf/S15.2.4.4_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.4_Object.prototype.valueOf/S15.2.4.4_A1_T3.js deleted file mode 100644 index 33a57153c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.4_Object.prototype.valueOf/S15.2.4.4_A1_T3.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.4.4_A1_T3; -* @section: 15.2.4.4; -* @assertion: The valueOf method returns its "this" value; -* @description: "this" value is a string; -*/ - -//CHECK#1 -if (typeof Object.prototype.valueOf !== "function") { - $ERROR('#1: valueOf method defined'); -} - -obj=new Object("greenfield"); - -//CHECK#2 -if (typeof obj.valueOf !== "function") { - $ERROR('#2: valueOf method accessed'); -} - -//CHECK#3 -if (obj.valueOf()!=="greenfield") { - $ERROR('#3: The valueOf method returns its this value'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.4_Object.prototype.valueOf/S15.2.4.4_A1_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.4_Object.prototype.valueOf/S15.2.4.4_A1_T4.js deleted file mode 100644 index 60dc89501..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.4_Object.prototype.valueOf/S15.2.4.4_A1_T4.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.4.4_A1_T4; -* @section: 15.2.4.4; -* @assertion: The valueOf method returns its "this" value; -* @description: "this" value is an object; -*/ - -//CHECK#1 -if (typeof Object.prototype.valueOf !== "function") { - $ERROR('#1: valueOf method defined'); -} - -obj=new Object; - -//CHECK#2 -if (typeof obj.valueOf !== "function") { - $ERROR('#2: valueOf method accessed'); -} - -//CHECK#3 -if (obj.valueOf()!==obj) { - $ERROR('#3: The valueOf method returns its this value'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.4_Object.prototype.valueOf/S15.2.4.4_A1_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.4_Object.prototype.valueOf/S15.2.4.4_A1_T5.js deleted file mode 100644 index a0dda0fce..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.4_Object.prototype.valueOf/S15.2.4.4_A1_T5.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.4.4_A1_T5; -* @section: 15.2.4.4; -* @assertion: The valueOf method returns its "this" value; -* @description: "this" value is "null"; -*/ - -//CHECK#1 -if (typeof Object.prototype.valueOf !== "function") { - $ERROR('#1: valueOf method defined'); -} - -obj=new Object(null); - -//CHECK#2 -if (typeof obj.valueOf !== "function") { - $ERROR('#2: valueOf method accessed'); -} - -//CHECK#3 -if (obj.valueOf()!==obj) { - $ERROR('#3: The valueOf method returns its this value'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.4_Object.prototype.valueOf/S15.2.4.4_A1_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.4_Object.prototype.valueOf/S15.2.4.4_A1_T6.js deleted file mode 100644 index 66f645119..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.4_Object.prototype.valueOf/S15.2.4.4_A1_T6.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.4.4_A1_T6; -* @section: 15.2.4.4; -* @assertion: The valueOf method returns its "this" value; -* @description: "this" value is "undefined"; -*/ - -//CHECK#1 -if (typeof Object.prototype.valueOf !== "function") { - $ERROR('#1: valueOf method defined'); -} - -obj=new Object(undefined); - -//CHECK#2 -if (typeof obj.valueOf !== "function") { - $ERROR('#2: valueOf method accessed'); -} - -//CHECK#3 -if (obj.valueOf()!==obj) { - $ERROR('#3: The valueOf method returns its this value'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.4_Object.prototype.valueOf/S15.2.4.4_A1_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.4_Object.prototype.valueOf/S15.2.4.4_A1_T7.js deleted file mode 100644 index c2f293c19..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.4_Object.prototype.valueOf/S15.2.4.4_A1_T7.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.4.4_A1_T7; -* @section: 15.2.4.4; -* @assertion: The valueOf method returns its "this" value; -* @description: "this" value is "void 0"; -*/ - -//CHECK#1 -if (typeof Object.prototype.valueOf !== "function") { - $ERROR('#1: valueOf method defined'); -} - -obj=new Object(void 0); - -//CHECK#2 -if (typeof obj.valueOf !== "function") { - $ERROR('#2: valueOf method accessed'); -} - -//CHECK#3 -if (obj.valueOf()!==obj) { - $ERROR('#3: The valueOf method returns its this value'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.4_Object.prototype.valueOf/S15.2.4.4_A6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.4_Object.prototype.valueOf/S15.2.4.4_A6.js deleted file mode 100644 index 99049fecf..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.4_Object.prototype.valueOf/S15.2.4.4_A6.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.4.4_A6; -* @section: 15.2.4.4, 13.2; -* @assertion: Object.prototype.valueOf has not prototype property; -* @description: Checking if obtaining the prototype property of Object.prototype.valueOf fails; -*/ - -//CHECK#1 -if (Object.prototype.valueOf.prototype !== undefined) { - $ERROR('#1: Object.prototype.valueOf has not prototype property'+Object.prototype.valueOf.prototype); -} -// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.4_Object.prototype.valueOf/S15.2.4.4_A7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.4_Object.prototype.valueOf/S15.2.4.4_A7.js deleted file mode 100644 index 3178ba57c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.4_Object.prototype.valueOf/S15.2.4.4_A7.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.4.4_A7; -* @section: 15.2.4.4, 13.2; -* @assertion: Object.prototype.valueOf can't be used as a constructor; -* @description: Checking if creating "new Object.prototype.valueOf" fails; -*/ - -FACTORY = Object.prototype.valueOf; - -try { - instance = new FACTORY; - $FAIL('#1: Object.prototype.valueOf can\'t be used as a constructor'); -} catch (e) { - $PRINT(e); - -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.4_Object.prototype.valueOf/S15.2.4.4_A8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.4_Object.prototype.valueOf/S15.2.4.4_A8.js deleted file mode 100644 index 8eb8a85a7..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.4_Object.prototype.valueOf/S15.2.4.4_A8.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.4.4_A8; -* @section: 15.2.4.4; -* @assertion: The Object.prototype.valueOf.length property has the attribute DontEnum; -* @description: Checking if enumerating the Object.prototype.valueOf.length property fails; -*/ - -//CHECK#0 -if (!(Object.prototype.valueOf.hasOwnProperty('length'))) { - $FAIL('#0: the Object.prototype.valueOf has length property.'); -} - - -// CHECK#1 -if (Object.prototype.valueOf.propertyIsEnumerable('length')) { - $ERROR('#1: the Object.prototype.valueOf.length property has the attributes DontEnum'); -} - -// CHECK#2 -for (p in Object.prototype.valueOf){ - if (p==="length") - $ERROR('#2: the Object.prototype.valueOf.length property has the attributes DontEnum'); -} -// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.4_Object.prototype.valueOf/S15.2.4.4_A9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.4_Object.prototype.valueOf/S15.2.4.4_A9.js deleted file mode 100644 index d4a36038b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.4_Object.prototype.valueOf/S15.2.4.4_A9.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.4.4_A9; -* @section: 15.2.4.4; -* @assertion: The Object.prototype.valueOf.length property has the attribute DontDelete; -* @description: Checknig if deleting of the Object.prototype.valueOf.length property fails; -*/ - -//CHECK#0 -if (!(Object.prototype.valueOf.hasOwnProperty('length'))) { - $FAIL('#0: the Object.prototype.valueOf has length property'); -} - -//CHECK#1 -if (delete Object.prototype.valueOf.length) { - $ERROR('#1: The Object.prototype.valueOf.length property has the attributes DontDelete'); -} - -//CHECK#2 -if (!(Object.prototype.valueOf.hasOwnProperty('length'))) { - $FAIL('#2: The Object.prototype.valueOf.length property has the attributes DontDelete'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.5_Object.prototype.hasOwnProperty/S15.2.4.5_A10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.5_Object.prototype.hasOwnProperty/S15.2.4.5_A10.js deleted file mode 100644 index ed2b16431..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.5_Object.prototype.hasOwnProperty/S15.2.4.5_A10.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.4.5_A10; -* @section: 15.2.4.5; -* @assertion: The Object.prototype.hasOwnProperty.length property has the attribute ReadOnly; -* @description: Checking if varying the Object.prototype.hasOwnProperty.length property fails; -*/ - -//CHECK#1 -if (!(Object.prototype.hasOwnProperty.hasOwnProperty('length'))) { - $FAIL('#1: the Object.prototype.hasOwnProperty has length property.'); -} - -obj = Object.prototype.hasOwnProperty.length; - -Object.prototype.hasOwnProperty.length = function(){return "shifted";}; - -//CHECK#2 -if (Object.prototype.hasOwnProperty.length !== obj) { - $ERROR('#2: the Object.prototype.hasOwnProperty length property has the attributes ReadOnly.'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.5_Object.prototype.hasOwnProperty/S15.2.4.5_A11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.5_Object.prototype.hasOwnProperty/S15.2.4.5_A11.js deleted file mode 100644 index dc1710bb3..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.5_Object.prototype.hasOwnProperty/S15.2.4.5_A11.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.4.5_A11; -* @section: 15.2.4.5; -* @assertion: The length property of the hasOwnProperty method is 1; -* @description: Checking the Object.prototype.hasOwnProperty.length; -*/ - -//CHECK#1 -if (!(Object.prototype.hasOwnProperty.hasOwnProperty("length"))) { - $ERROR('#1: The length property of the toObject method is 1'); -} - -//CHECK#2 -if (Object.prototype.hasOwnProperty.length !== 1) { - $ERROR('#2: The length property of the toObject method is 1'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.5_Object.prototype.hasOwnProperty/S15.2.4.5_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.5_Object.prototype.hasOwnProperty/S15.2.4.5_A1_T1.js deleted file mode 100644 index ef82eeca6..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.5_Object.prototype.hasOwnProperty/S15.2.4.5_A1_T1.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.4.5_A1_T1; -* @section: 15.2.4.5; -* @assertion: When the hasOwnProperty method is called with argument V, the following steps are taken: -* i) Let O be this object -* ii) Call ToString(V) -* iii) If O doesn't have a property with the name given by Result(ii), return false -* iv) Return true; -* @description: Checking type of the Object.prototype.hasOwnProperty and the returned result; -*/ - -//CHECK#1 -if (typeof Object.prototype.hasOwnProperty !== "function") { - $ERROR('#1: hasOwnProperty method is defined'); -} - -//CHECK#2 -if (!(Object.prototype.hasOwnProperty("hasOwnProperty"))) { - $ERROR('#2: hasOwnProperty method works properly'); -} -// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.5_Object.prototype.hasOwnProperty/S15.2.4.5_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.5_Object.prototype.hasOwnProperty/S15.2.4.5_A1_T2.js deleted file mode 100644 index 4704b4675..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.5_Object.prototype.hasOwnProperty/S15.2.4.5_A1_T2.js +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.4.5_A1_T2; -* @section: 15.2.4.5; -* @assertion: When the hasOwnProperty method is called with argument V, the following steps are taken: -* i) Let O be this object -* ii) Call ToString(V) -* iii) If O doesn't have a property with the name given by Result(ii), return false -* iv) Return true; -* @description: Argument of the hasOwnProperty method is a custom boolean property; -*/ - -//CHECK#1 -if (typeof Object.prototype.hasOwnProperty !== "function") { - $ERROR('#1: hasOwnProperty method is defined'); -} - -obj = {the_property:true}; - -//CHECK#2 -if (typeof obj.hasOwnProperty !== "function") { - $ERROR('#2: hasOwnProperty method is accessed'); -} - -//CHECK#3 -if (obj.hasOwnProperty("hasOwnProperty")) { - $ERROR('#3: hasOwnProperty method works properly'); -} - -//CHECK#4 -if (!(obj.hasOwnProperty("the_property"))) { - $ERROR('#4: hasOwnProperty method works properly'); -} -// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.5_Object.prototype.hasOwnProperty/S15.2.4.5_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.5_Object.prototype.hasOwnProperty/S15.2.4.5_A1_T3.js deleted file mode 100644 index 6fd836ef2..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.5_Object.prototype.hasOwnProperty/S15.2.4.5_A1_T3.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.4.5_A1_T3; -* @section: 15.2.4.5; -* @assertion: When the hasOwnProperty method is called with argument V, the following steps are taken: -* i) Let O be this object -* ii) Call ToString(V) -* iii) If O doesn't have a property with the name given by Result(ii), return false -* iv) Return true; -* @description: Argument of the hasOwnProperty method is a custom property of a function object; -*/ - -FACTORY = function(){ - this.aproperty = 1; -}; - -instance = new FACTORY; - -//CHECK#1 -if (typeof Object.prototype.hasOwnProperty !== "function") { - $ERROR('#1: hasOwnProperty method is defined'); -} - -//CHECK#2 -if (typeof instance.hasOwnProperty !== "function") { - $ERROR('#2: hasOwnProperty method is accessed'); -} - -//CHECK#3 -if (instance.hasOwnProperty("toString")) { - $ERROR('#3: hasOwnProperty method works properly'); -} - -//CHECK#4 -if (!(instance.hasOwnProperty("aproperty"))) { - $ERROR('#4: hasOwnProperty method works properly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.5_Object.prototype.hasOwnProperty/S15.2.4.5_A6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.5_Object.prototype.hasOwnProperty/S15.2.4.5_A6.js deleted file mode 100644 index c47f95a4d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.5_Object.prototype.hasOwnProperty/S15.2.4.5_A6.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.4.5_A6; -* @section: 15.2.4.5, 13.2; -* @assertion: Object.prototype.hasOwnProperty has not prototype property; -* @description: Checking if obtaining the prototype property of Object.prototype.hasOwnProperty fails; -*/ - -//CHECK#1 -if (Object.prototype.hasOwnProperty.prototype !== undefined) { - $ERROR('#1: Object.prototype.hasOwnProperty has not prototype property'+Object.prototype.hasOwnProperty.prototype); -} -// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.5_Object.prototype.hasOwnProperty/S15.2.4.5_A7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.5_Object.prototype.hasOwnProperty/S15.2.4.5_A7.js deleted file mode 100644 index 90573a896..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.5_Object.prototype.hasOwnProperty/S15.2.4.5_A7.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.4.5_A7; -* @section: 15.2.4.5, 13.2; -* @assertion: Object.prototype.hasOwnProperty can't be used as a constructor; -* @description: Checking if creating "new Object.prototype.hasOwnProperty" fails; -*/ - -FACTORY = Object.prototype.hasOwnProperty; - -try { - instance = new FACTORY; - $FAIL('#1: Object.prototype.hasOwnProperty can\'t be used as a constructor'); -} catch (e) { - $PRINT(e); - -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.5_Object.prototype.hasOwnProperty/S15.2.4.5_A8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.5_Object.prototype.hasOwnProperty/S15.2.4.5_A8.js deleted file mode 100644 index 7992ae9ee..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.5_Object.prototype.hasOwnProperty/S15.2.4.5_A8.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.4.5_A8; -* @section: 15.2.4.5; -* @assertion: The Object.prototype.hasOwnProperty.length property has the attribute DontEnum; -* @description: Checking if enumerating the Object.prototype.hasOwnProperty.length property fails; -*/ - -//CHECK#0 -if (!(Object.prototype.hasOwnProperty.hasOwnProperty('length'))) { - $FAIL('#0: the Object.prototype.hasOwnProperty has length property.'); -} - - -// CHECK#1 -if (Object.prototype.hasOwnProperty.propertyIsEnumerable('length')) { - $ERROR('#1: the Object.prototype.hasOwnProperty.length property has the attributes DontEnum'); -} - -// CHECK#2 -for (p in Object.prototype.hasOwnProperty){ - if (p==="length") - $ERROR('#2: the Object.prototype.hasOwnProperty.length property has the attributes DontEnum'); -} -// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.5_Object.prototype.hasOwnProperty/S15.2.4.5_A9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.5_Object.prototype.hasOwnProperty/S15.2.4.5_A9.js deleted file mode 100644 index 2a6d3769c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.5_Object.prototype.hasOwnProperty/S15.2.4.5_A9.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.4.5_A9; -* @section: 15.2.4.5; -* @assertion: The Object.prototype.hasOwnProperty.length property has the attribute DontDelete; -* @description: Checking if deleting the Object.prototype.hasOwnProperty.length property fails; -*/ - -//CHECK#0 -if (!(Object.prototype.hasOwnProperty.hasOwnProperty('length'))) { - $FAIL('#0: the Object.prototype.hasOwnProperty has length property'); -} - -//CHECK#1 -if (delete Object.prototype.hasOwnProperty.length) { - $ERROR('#1: The Object.prototype.hasOwnProperty.length property has the attributes DontDelete'); -} - -//CHECK#2 -if (!(Object.prototype.hasOwnProperty.hasOwnProperty('length'))) { - $FAIL('#2: The Object.prototype.hasOwnProperty.length property has the attributes DontDelete'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.6_Object.prototype.isPrototypeOf/S15.2.4.6_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.6_Object.prototype.isPrototypeOf/S15.2.4.6_A1.js deleted file mode 100644 index e5a60a1cf..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.6_Object.prototype.isPrototypeOf/S15.2.4.6_A1.js +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.2.4.6_A1; - * @section: 15.2.4.6; - * @assertion: When the isPrototypeOf method is called with argument V and when O and - * V refer to the same object or to objects joined to each other, return true; - * @description: Creating two objects with the same prototype; -*/ - - -function USER_FACTORY( name ) { - this.name = name; - this.getName=function(){return name;}; -} - - -function FORCEDUSER_FACTORY( name, grade ) { - this.name = name; - this.grade = grade; - this.getGrade=function(){return grade;}; -} - -proto = new USER_FACTORY("noname"); - -FORCEDUSER_FACTORY.prototype = proto; - -var luke = new FORCEDUSER_FACTORY("Luke Skywalker", 12); -////// -// CHECK#1 -if(proto.isPrototypeOf(luke)){ - $PRINT('#1: Native ECMAScript objects have an internal property called [[Prototype]].'); -} else { - $ERROR('#1: native ECMAScript objects have an internal property called [[Prototype]].'); -} -// -///////// -////// -// CHECK#2 -if(USER_FACTORY.prototype.isPrototypeOf(luke)){ - $PRINT('#2: Native ECMAScript objects have an internal property called [[Prototype]].'); -} else { - $ERROR('#2: native ECMAScript objects have an internal property called [[Prototype]].'); -} -// -///////// -////// -// CHECK#3 -if(Number.isPrototypeOf(luke)){ - $ERROR('#2: Native ECMAScript objects have an internal property called [[Prototype]].'); -} -// -///////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.6_Object.prototype.isPrototypeOf/S15.2.4.6_A10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.6_Object.prototype.isPrototypeOf/S15.2.4.6_A10.js deleted file mode 100644 index f66b01ac3..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.6_Object.prototype.isPrototypeOf/S15.2.4.6_A10.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.4.6_A10; -* @section: 15.2.4.6; -* @assertion: The Object.prototype.isPrototypeOf.length property has the attribute ReadOnly; -* @description: Checking if varying the Object.prototype.isPrototypeOf.length property fails; -*/ - -//CHECK#1 -if (!(Object.prototype.isPrototypeOf.hasOwnProperty('length'))) { - $FAIL('#1: the Object.prototype.isPrototypeOf has length property'); -} - -obj = Object.prototype.isPrototypeOf.length; - -Object.prototype.isPrototypeOf.length = function(){return "shifted";}; - -//CHECK#2 -if (Object.prototype.isPrototypeOf.length !== obj) { - $ERROR('#2: the Object.prototype.isPrototypeOf length property has the attributes ReadOnly'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.6_Object.prototype.isPrototypeOf/S15.2.4.6_A11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.6_Object.prototype.isPrototypeOf/S15.2.4.6_A11.js deleted file mode 100644 index 937977262..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.6_Object.prototype.isPrototypeOf/S15.2.4.6_A11.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.4.6_A11; -* @section: 15.2.4.6; -* @assertion: The length property of the hasOwnProperty method is 1; -* @description: Checking the Object.prototype.hasOwnProperty.length; -*/ - -//CHECK#1 -if (!(Object.prototype.isPrototypeOf.hasOwnProperty("length"))) { - $ERROR('#1: the Object.prototype.isPrototypeOf has length property'); -} - -//CHECK#2 -if (Object.prototype.isPrototypeOf.length !== 1) { - $ERROR('#2: The length property of the toObject method is 1'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.6_Object.prototype.isPrototypeOf/S15.2.4.6_A6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.6_Object.prototype.isPrototypeOf/S15.2.4.6_A6.js deleted file mode 100644 index 3942fadbc..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.6_Object.prototype.isPrototypeOf/S15.2.4.6_A6.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.4.6_A6; -* @section: 15.2.4.6, 13.2; -* @assertion: Object.prototype.isPrototypeOf has not prototype property; -* @description: Checking if obtaining the prototype property of Object.prototype.isPrototypeOf fails; -*/ - -//CHECK#1 -if (Object.prototype.isPrototypeOf.prototype !== undefined) { - $ERROR('#1: Object.prototype.isPrototypeOf has not prototype property'+Object.prototype.isPrototypeOf.prototype); -} -// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.6_Object.prototype.isPrototypeOf/S15.2.4.6_A7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.6_Object.prototype.isPrototypeOf/S15.2.4.6_A7.js deleted file mode 100644 index a7191df7f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.6_Object.prototype.isPrototypeOf/S15.2.4.6_A7.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.4.6_A7; -* @section: 15.2.4.6, 13.2; -* @assertion: Object.prototype.isPrototypeOf can't be used as a constructor; -* @description: Checking if creating new "Object.prototype.isPrototypeOf" fails; -*/ - -FACTORY = Object.prototype.isPrototypeOf; - -try { - instance = new FACTORY; - $FAIL('#1: Object.prototype.isPrototypeOf can\'t be used as a constructor'); -} catch (e) { - $PRINT(e); - -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.6_Object.prototype.isPrototypeOf/S15.2.4.6_A8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.6_Object.prototype.isPrototypeOf/S15.2.4.6_A8.js deleted file mode 100644 index 3e59c28d9..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.6_Object.prototype.isPrototypeOf/S15.2.4.6_A8.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.4.6_A8; -* @section: 15.2.4.6; -* @assertion: The Object.prototype.isPrototypeOf.length property has the attribute DontEnum; -* @description: Checknig if enumerating the Object.prototype.isPrototypeOf.length property fails; -*/ - -//CHECK#0 -if (!(Object.prototype.isPrototypeOf.hasOwnProperty('length'))) { - $FAIL('#0: the Object.prototype.isPrototypeOf has length property'); -} - - -// CHECK#1 -if (Object.prototype.isPrototypeOf.propertyIsEnumerable('length')) { - $ERROR('#1: the Object.prototype.isPrototypeOf.length property has the attributes DontEnum'); -} - -// CHECK#2 -for (p in Object.prototype.isPrototypeOf){ - if (p==="length") - $ERROR('#2: the Object.prototype.isPrototypeOf.length property has the attributes DontEnum'); -} -// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.6_Object.prototype.isPrototypeOf/S15.2.4.6_A9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.6_Object.prototype.isPrototypeOf/S15.2.4.6_A9.js deleted file mode 100644 index f5d1fd989..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.6_Object.prototype.isPrototypeOf/S15.2.4.6_A9.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.4.6_A9; -* @section: 15.2.4.6; -* @assertion: The Object.prototype.isPrototypeOf.length property has the attribute DontDelete; -* @description: Checking deleting the Object.prototype.isPrototypeOf.length property fails; -*/ - -//CHECK#0 -if (!(Object.prototype.isPrototypeOf.hasOwnProperty('length'))) { - $FAIL('#0: the Object.prototype.isPrototypeOf has length property'); -} - -//CHECK#1 -if (delete Object.prototype.isPrototypeOf.length) { - $ERROR('#1: The Object.prototype.isPrototypeOf.length property has the attributes DontDelete'); -} -// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.7_Object.prototype.propertyIsEnumerable/S15.2.4.7_A10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.7_Object.prototype.propertyIsEnumerable/S15.2.4.7_A10.js deleted file mode 100644 index 3486e6e36..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.7_Object.prototype.propertyIsEnumerable/S15.2.4.7_A10.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.4.7_A10; -* @section: 15.2.4.7; -* @assertion: The Object.prototype.propertyIsEnumerable.length property has the attribute ReadOnly; -* @description: Checking if varying the Object.prototype.propertyIsEnumerable.length property fails; -*/ - -//CHECK#1 -if (!(Object.prototype.propertyIsEnumerable.hasOwnProperty('length'))) { - $FAIL('#1: the Object.prototype.propertyIsEnumerable has length property'); -} - -obj = Object.prototype.propertyIsEnumerable.length; - -Object.prototype.propertyIsEnumerable.length = function(){return "shifted";}; - -//CHECK#2 -if (Object.prototype.propertyIsEnumerable.length !== obj) { - $ERROR('#2: the Object.prototype.propertyIsEnumerable length property has the attributes ReadOnly'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.7_Object.prototype.propertyIsEnumerable/S15.2.4.7_A11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.7_Object.prototype.propertyIsEnumerable/S15.2.4.7_A11.js deleted file mode 100644 index a7eac564a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.7_Object.prototype.propertyIsEnumerable/S15.2.4.7_A11.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.4.7_A11; -* @section: 15.2.4.7; -* @assertion: The length property of the hasOwnProperty method is 1; -* @description: Checking the value of Object.prototype.hasOwnProperty.length; -*/ - -//CHECK#1 -if (!(Object.prototype.propertyIsEnumerable.hasOwnProperty("length"))) { - $ERROR('#1: the Object.prototype.propertyIsEnumerable has length property'); -} - -//CHECK#2 -if (Object.prototype.propertyIsEnumerable.length !== 1) { - $ERROR('#2: The length property of the toObject method is 1'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.7_Object.prototype.propertyIsEnumerable/S15.2.4.7_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.7_Object.prototype.propertyIsEnumerable/S15.2.4.7_A1_T1.js deleted file mode 100644 index b062c4179..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.7_Object.prototype.propertyIsEnumerable/S15.2.4.7_A1_T1.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.4.7_A1_T1; -* @section: 15.2.4.7; -* @assertion: The propertyIsEnumerable method does not consider objects in the prototype chain; -* @description: Calling the propertyIsEnumerable method for object in the prototype chain; -*/ - -//CHECK#1 -if (typeof Object.prototype.propertyIsEnumerable !== "function") { - $ERROR('#1: propertyIsEnumerable method is defined'); -} - -proto={rootprop:"avis"}; - -function AVISFACTORY(name){this.name=name}; - -AVISFACTORY.prototype = proto; - -seagull= new AVISFACTORY("seagull"); - -//CHECK#2 -if (typeof seagull.propertyIsEnumerable !== "function") { - $ERROR('#2: propertyIsEnumerable method is accessed'); -} - -//CHECK#3 -if (!(seagull.propertyIsEnumerable("name"))) { - $ERROR('#3: propertyIsEnumerable method works properly'); -} - -//CHECK#4 -if (seagull.propertyIsEnumerable("rootprop")) { - $ERROR('#4: propertyIsEnumerable method does not consider objects in the prototype chain'); -} -// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.7_Object.prototype.propertyIsEnumerable/S15.2.4.7_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.7_Object.prototype.propertyIsEnumerable/S15.2.4.7_A2_T1.js deleted file mode 100644 index 211b640e9..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.7_Object.prototype.propertyIsEnumerable/S15.2.4.7_A2_T1.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.4.7_A2_T1; -* @section: 15.2.4.7; -* @assertion: When the propertyIsEnumerable method is called with argument V, the following steps are taken: -* i) Let O be this object -* ii) Call ToString(V) -* iii) If O doesn't have a property with the name given by Result(ii), return false -* iv) If the property has the DontEnum attribute, return false -* v) Return true; -* @description: Checking the type of Object.prototype.propertyIsEnumerable and the returned result; -*/ - -//CHECK#1 -if (typeof Object.prototype.propertyIsEnumerable !== "function") { - $ERROR('#1: hasOwnProperty method is defined'); -} - -//CHECK#2 -if (Object.prototype.propertyIsEnumerable("propertyIsEnumerable")) { - $ERROR('#2: hasOwnProperty method works properly'); -} -// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.7_Object.prototype.propertyIsEnumerable/S15.2.4.7_A2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.7_Object.prototype.propertyIsEnumerable/S15.2.4.7_A2_T2.js deleted file mode 100644 index df8556b8f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.7_Object.prototype.propertyIsEnumerable/S15.2.4.7_A2_T2.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.4.7_A2_T2; -* @section: 15.2.4.7; -* @assertion: When the propertyIsEnumerable method is called with argument V, the following steps are taken: -* i) Let O be this object -* ii) Call ToString(V) -* iii) If O doesn't have a property with the name given by Result(ii), return false -* iv) If the property has the DontEnum attribute, return false -* v) Return true; -* @description: Argument of the propertyIsEnumerable method is a custom boolean property; -*/ - -//CHECK#1 -if (typeof Object.prototype.propertyIsEnumerable !== "function") { - $ERROR('#1: propertyIsEnumerable method is defined'); -} - -obj = {the_property:true}; - -//CHECK#2 -if (typeof obj.propertyIsEnumerable !== "function") { - $ERROR('#2: propertyIsEnumerable method is accessed'); -} - -//CHECK#3 -if (!(obj.propertyIsEnumerable("the_property"))) { - $ERROR('#3: propertyIsEnumerable method works properly'); -} - -//CHECK#4 -accum=""; -for(prop in obj) { - accum+=prop; -} -if (accum.indexOf("the_property")!==0) { - $ERROR('#4: enumerating works properly'); -} -// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.7_Object.prototype.propertyIsEnumerable/S15.2.4.7_A6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.7_Object.prototype.propertyIsEnumerable/S15.2.4.7_A6.js deleted file mode 100644 index 098bcbc0a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.7_Object.prototype.propertyIsEnumerable/S15.2.4.7_A6.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.4.7_A6; -* @section: 15.2.4.7, 13.2; -* @assertion: Object.prototype.propertyIsEnumerable has not prototype property; -* @description: Checking if obtaining the prototype property of Object.prototype.propertyIsEnumerable fails; -*/ - -//CHECK#1 -if (Object.prototype.propertyIsEnumerable.prototype !== undefined) { - $ERROR('#1: Object.prototype.propertyIsEnumerable has not prototype property'+Object.prototype.propertyIsEnumerable.prototype); -} -// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.7_Object.prototype.propertyIsEnumerable/S15.2.4.7_A7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.7_Object.prototype.propertyIsEnumerable/S15.2.4.7_A7.js deleted file mode 100644 index 09b0456ad..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.7_Object.prototype.propertyIsEnumerable/S15.2.4.7_A7.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.4.7_A7; -* @section: 15.2.4.7, 13.2; -* @assertion: Object.prototype.propertyIsEnumerable can't be used as a constructor; -* @description: Checking if creating "new Object.prototype.propertyIsEnumerable" fails; -*/ - -FACTORY = Object.prototype.propertyIsEnumerable; - -try { - instance = new FACTORY; - $FAIL('#1: Object.prototype.propertyIsEnumerable can\'t be used as a constructor'); -} catch (e) { - $PRINT(e); - -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.7_Object.prototype.propertyIsEnumerable/S15.2.4.7_A8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.7_Object.prototype.propertyIsEnumerable/S15.2.4.7_A8.js deleted file mode 100644 index d7cfe60b3..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.7_Object.prototype.propertyIsEnumerable/S15.2.4.7_A8.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.4.7_A8; -* @section: 15.2.4.7; -* @assertion: The Object.prototype.propertyIsEnumerable.length property has the attribute DontEnum; -* @description: Checking if enumerating the Object.prototype.propertyIsEnumerable.length property fails; -*/ - -//CHECK#0 -if (!(Object.prototype.propertyIsEnumerable.hasOwnProperty('length'))) { - $FAIL('#0: the Object.prototype.propertyIsEnumerable has length property'); -} - - -// CHECK#1 -if (Object.prototype.propertyIsEnumerable.propertyIsEnumerable('length')) { - $ERROR('#1: the Object.prototype.propertyIsEnumerable.length property has the attributes DontEnum'); -} - -// CHECK#2 -for (p in Object.prototype.propertyIsEnumerable){ - if (p==="length") - $ERROR('#2: the Object.prototype.propertyIsEnumerable.length property has the attributes DontEnum'); -} -// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.7_Object.prototype.propertyIsEnumerable/S15.2.4.7_A9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.7_Object.prototype.propertyIsEnumerable/S15.2.4.7_A9.js deleted file mode 100644 index 3da59e598..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/15.2.4.7_Object.prototype.propertyIsEnumerable/S15.2.4.7_A9.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.4.7_A9; -* @section: 15.2.4.7; -* @assertion: The Object.prototype.propertyIsEnumerable.length property has the attribute DontDelete; -* @description: Checking if deleting the Object.prototype.propertyIsEnumerable.length property fails; -*/ - -//CHECK#0 -if (!(Object.prototype.propertyIsEnumerable.hasOwnProperty('length'))) { - $FAIL('#0: the Object.prototype.propertyIsEnumerable has length property'); -} - -//CHECK#1 -if (delete Object.prototype.propertyIsEnumerable.length) { - $ERROR('#1: The Object.prototype.propertyIsEnumerable.length property has the attributes DontDelete'); -} -// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/S15.2.4.1_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/S15.2.4.1_A1_T1.js deleted file mode 100644 index f841e9add..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/S15.2.4.1_A1_T1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.4.1_A1_T1; -* @section: 15.2.4.1; -* @assertion: The initial value of Object.prototype.constructor is the built-in Object constructor; -* @description: Checking the Object.prototype.constructor; -*/ - -//CHECK#1 -if (Object.prototype.constructor !== Object) { - $ERROR('#1: The initial value of Object.prototype.constructor is the built-in Object constructor'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/S15.2.4.1_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/S15.2.4.1_A1_T2.js deleted file mode 100644 index 6f0c25ee2..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/S15.2.4.1_A1_T2.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.4.1_A1_T2; -* @section: 15.2.4.1; -* @assertion: The initial value of Object.prototype.constructor is the built-in Object constructor; -* @description: Creating "new Object.prototype.constructor" and checking its properties; -*/ - -constr = Object.prototype.constructor; - -obj = new constr; - -// CHECK#0 -if (obj === undefined) { - $ERROR('#0: new Object() return the newly created native object.'); -} - -// CHECK#1 -if (obj.constructor !== Object) { - $ERROR('#1: new Object() create a new native ECMAScript object'); -} - -// CHECK#2 -if (!(Object.prototype.isPrototypeOf(obj))) { - $ERROR('#2: when new Object() calls the [[Prototype]] property of the newly constructed object is set to the Object prototype object.'); -} - -// CHECK#3 -to_string_result = '[object '+ 'Object' +']'; -if (obj.toString() !== to_string_result) { - $ERROR('#3: when new Object() calls the [[Class]] property of the newly constructed object is set to "Object".'); -} - -// CHECK#4 -if (obj.valueOf().toString() !== to_string_result) { - $ERROR('#4: when new Object() calls the newly constructed object has no [[Value]] property.'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/S15.2.4_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/S15.2.4_A1_T1.js deleted file mode 100644 index 81dc7902c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/S15.2.4_A1_T1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.2.4_A1_T1; - * @section: 15.2.4, 8.6.2; - * @assertion: Object prototype object has not prototype; - * @description: Checking if obtaining Object.prototype.prototype fails; -*/ - -// CHECK#1 -if (Object.prototype.prototype !== undefined) { - $ERROR('#1: Object prototype has not prototype'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/S15.2.4_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/S15.2.4_A1_T2.js deleted file mode 100644 index f6b5d01ed..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/S15.2.4_A1_T2.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.2.4_A1_T2; - * @section: 15.2.4, 8.6.2; - * @assertion: Object prototype object has not prototype; - * @description: Since the Object prototype object has not prototype, deleted toString method can not be found in prototype chain; -*/ - -//CHECK#1 -if (Object.prototype.toString() == false) { - $ERROR('#1: Object prototype object has not prototype'); -} - -delete Object.prototype.toString; - -// CHECK#2 -try { - Object.prototype.toString(); - $ERROR('#2: Object prototype object has not prototype'); -} catch (e) { - ; -} -// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/S15.2.4_A2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/S15.2.4_A2.js deleted file mode 100644 index c8e8a68b1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/S15.2.4_A2.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.4_A2; -* @section: 15.2.4; -* @assertion: The value of the internal [[Class]] property of Object prototype object is "Object"; -* @description: Getting the value of the internal [[Class]] property with Object.prototype.toString() function; -*/ - -tostr = Object.prototype.toString(); - -//CHECK#1 -if (tostr !== "[object Object]") { - $ERROR('#1: the value of the internal [[Class]] property of Object prototype object is "Object"'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/S15.2.4_A3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/S15.2.4_A3.js deleted file mode 100644 index f0f5ace0a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/S15.2.4_A3.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.4_A3; -* @section: 15.2.4; -* @assertion: Since the Object prototype object is not a function, it has not [[call]] method; -* @description: Checking if calling Object prototype as a function fails; -*/ - - -//CHECK#1 -try { - Object.prototype(); - $FAIL('#1: Since Object prototype object is not function it has not [[call]] method'); -} catch (e) { - $PRINT(e); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/S15.2.4_A4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/S15.2.4_A4.js deleted file mode 100644 index b8ceeb998..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/15.2.4_Properties_of_the_Object_Prototype_Object/S15.2.4_A4.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2.4_A4; -* @section: 15.2.4; -* @assertion: Since the Object prototype object is not a function, it has not [[create]] method; -* @description: Checking if creating "new Object.prototype" fails; -*/ - - -//CHECK#1 -try { - instance = new Object.prototype; - $FAIL('#1: Since Object prototype object is not function it has not [[create]] method'); -} catch (e) { - $PRINT(e); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/S15.2_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/S15.2_A1.js deleted file mode 100644 index 2636b4141..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.2_Object_Objects/S15.2_A1.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.2_A1; -* @section: 15.2; -* @assertion: Object is the property of global; -* @description: Checking if Object equals to this.Object; -*/ - -obj=Object; - -thisobj=this.Object; - -if(obj!==thisobj){ - $ERROR('Object is the property of global'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A1_T1.js deleted file mode 100644 index 4682d0e3b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A1_T1.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.2.1_A1_T1; -* @section: 15.3.2.1, 13.2; -* @assertion: When the Function constructor is called with one argument then body be that argument and the following steps are taken: -* i) Call ToString(body) -* ii) If P is not parsable as a FormalParameterListopt then throw a SyntaxError exception -* iii) If body is not parsable as FunctionBody then throw a SyntaxError exception -* iv) Create a new Function object as specified in 13.2 with parameters specified by parsing P as a FormalParameterListopt and body specified by parsing body as a FunctionBody. -* Pass in a scope chain consisting of the global object as the Scope parameter -* v) Return Result(iv); -* @description: The body of the function is "{toString:function(){throw 7;}}"; -*/ - -var body = {toString:function(){throw 7;}} - -//CHECK#1 -try { - var f = new Function(body); - $FAIL('#1: When the Function constructor is called with one argument then body be that argument the following step are taken: call ToString(body)'); -} catch (e) { - if (e !== 7) { - $ERROR('#1.1: When the Function constructor is called with one argument then body be that argument the following step are taken: call ToString(body)'); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A1_T10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A1_T10.js deleted file mode 100644 index 0a49cd67d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A1_T10.js +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.2.1_A1_T10; -* @section: 15.3.2.1, 13.2; -* @assertion: When the Function constructor is called with one argument then body be that argument and the following steps are taken: -* i) Call ToString(body) -* ii) If P is not parsable as a FormalParameterListopt then throw a SyntaxError exception -* iii) If body is not parsable as FunctionBody then throw a SyntaxError exception -* iv) Create a new Function object as specified in 13.2 with parameters specified by parsing P as a FormalParameterListopt and body specified by parsing body as a FunctionBody. -* Pass in a scope chain consisting of the global object as the Scope parameter -* v) Return Result(iv); -* @description: Value of the function constructor argument is "null"; -*/ - -//CHECK#1 -try { - f = new Function(null); -} catch (e) { - $FAIL('#1: test fails with error '+e); -} - -//CHECK#2 -if (f.constructor !== Function) { - $ERROR('#2: When the Function constructor is called with one argument then body be that argument and creates a new Function object as specified in 13.2'); -} - -//CHECK#3 -if (f() !== undefined) { - $ERROR('#3: When the Function constructor is called with one argument then body be that argument the following steps are taken...'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A1_T11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A1_T11.js deleted file mode 100644 index 3b6a34b1c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A1_T11.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.2.1_A1_T11; -* @section: 15.3.2.1, 13.2; -* @assertion: When the Function constructor is called with one argument then body be that argument and the following steps are taken: -* i) Call ToString(body) -* ii) If P is not parsable as a FormalParameterListopt then throw a SyntaxError exception -* iii) If body is not parsable as FunctionBody then throw a SyntaxError exception -* iv) Create a new Function object as specified in 13.2 with parameters specified by parsing P as a FormalParameterListopt and body specified by parsing body as a FunctionBody. -* Pass in a scope chain consisting of the global object as the Scope parameter -* v) Return Result(iv); -* @description: Value of the function constructor argument is "undefined"; -*/ - - -//CHECK#1 -try { - f = new Function(undefined); -} catch (e) { - $FAIL('#1: test failed with error '+e); -} - -//CHECK#2 -if (f.constructor !== Function) { - $ERROR('#2: When the Function constructor is called with one argument then body be that argument and creates a new Function object as specified in 13.2'); -} - -//CHECK#3 -if (f() !== undefined) { - $ERROR('#3: When the Function constructor is called with one argument then body be that argument the following steps are taken...'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A1_T12.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A1_T12.js deleted file mode 100644 index bfa54ddfc..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A1_T12.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.2.1_A1_T12; -* @section: 15.3.2.1, 13.2; -* @assertion: When the Function constructor is called with one argument then body be that argument and the following steps are taken: -* i) Call ToString(body) -* ii) If P is not parsable as a FormalParameterListopt then throw a SyntaxError exception -* iii) If body is not parsable as FunctionBody then throw a SyntaxError exception -* iv) Create a new Function object as specified in 13.2 with parameters specified by parsing P as a FormalParameterListopt and body specified by parsing body as a FunctionBody. -* Pass in a scope chain consisting of the global object as the Scope parameter -* v) Return Result(iv); -* @description: Value of the function constructor argument is "void 0"; -*/ - - -//CHECK#1 -try { - f = new Function(void 0); -} catch (e) { - $FAIL('#1: test failed with error '+e); -} - -//CHECK#2 -if (f.constructor !== Function) { - $ERROR('#2: When the Function constructor is called with one argument then body be that argument and creates a new Function object as specified in 13.2'); -} - -//CHECK#3 -if (f()!==undefined) { - $ERROR('#3: When the Function constructor is called with one argument then body be that argument the following steps are taken...'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A1_T13.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A1_T13.js deleted file mode 100644 index 74e1fcfe8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A1_T13.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.2.1_A1_T13; -* @section: 15.3.2.1, 13.2; -* @assertion: When the Function constructor is called with one argument then body be that argument and the following steps are taken: -* i) Call ToString(body) -* ii) If P is not parsable as a FormalParameterListopt then throw a SyntaxError exception -* iii) If body is not parsable as FunctionBody then throw a SyntaxError exception -* iv) Create a new Function object as specified in 13.2 with parameters specified by parsing P as a FormalParameterListopt and body specified by parsing body as a FunctionBody. -* Pass in a scope chain consisting of the global object as the Scope parameter -* v) Return Result(iv); -* @description: Value of the function constructor argument is "{}"; -*/ - - -//CHECK#1 -try { - f = new Function({}); - $FAIL('#1: test failed with error '+e); -} catch (e) { - if (!(e instanceof SyntaxError)) { - $ERROR('#1.1: If body is not parsable as FunctionBody then throw a SyntaxError exception'); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A1_T2.js deleted file mode 100644 index 0284c72d6..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A1_T2.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.2.1_A1_T2; -* @section: 15.3.2.1, 13.2; -* @assertion: When the Function constructor is called with one argument then body be that argument and the following steps are taken: -* i) Call ToString(body) -* ii) If P is not parsable as a FormalParameterListopt then throw a SyntaxError exception -* iii) If body is not parsable as FunctionBody then throw a SyntaxError exception -* iv) Create a new Function object as specified in 13.2 with parameters specified by parsing P as a FormalParameterListopt and body specified by parsing body as a FunctionBody. -* Pass in a scope chain consisting of the global object as the Scope parameter -* v) Return Result(iv); -* @description: The body of the function is "{toString:function(){return "return 1;";}}"; -*/ - -body={toString:function(){return "return 1;";}} - -//CHECK#1 -try { - f = new Function(body); -} catch (e) { - $FAIL('#1: test failed with error '+e); -} - -//CHECK#2 -if (f.constructor !== Function) { - $ERROR('#2: When the Function constructor is called with one argument then body be that argument and creates a new Function object as specified in 13.2'); -} - -//CHECK#3 -if (f()!==1) { - $ERROR('#3: hen the Function constructor is called with one argument then body be that argument the following steps are taken...'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A1_T3.js deleted file mode 100644 index c0d136087..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A1_T3.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.2.1_A1_T3; -* @section: 15.3.2.1, 13.2; -* @assertion: When the Function constructor is called with one argument then body be that argument and the following steps are taken: -* i) Call ToString(body) -* ii) If P is not parsable as a FormalParameterListopt then throw a SyntaxError exception -* iii) If body is not parsable as FunctionBody then throw a SyntaxError exception -* iv) Create a new Function object as specified in 13.2 with parameters specified by parsing P as a FormalParameterListopt and body specified by parsing body as a FunctionBody. -* Pass in a scope chain consisting of the global object as the Scope parameter -* v) Return Result(iv); -* @description: Value of the function constructor argument is 1; -*/ - - -//CHECK#1 -try { - f = new Function(1); -} catch (e) { - $FAIL('#1: test failed with error '+e); -} - -//CHECK#2 -if (f.constructor !== Function) { - $ERROR('#2: When the Function constructor is called with one argument then body be that argument and creates a new Function object as specified in 13.2'); -} - -//CHECK#3 -if (f()!==undefined) { - $ERROR('#3: When the Function constructor is called with one argument then body be that argument the following steps are taken...'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A1_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A1_T4.js deleted file mode 100644 index 5da007085..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A1_T4.js +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.2.1_A1_T4; -* @section: 15.3.2.1, 13.2; -* @assertion: When the Function constructor is called with one argument then body be that argument and the following steps are taken: -* i) Call ToString(body) -* ii) If P is not parsable as a FormalParameterListopt then throw a SyntaxError exception -* iii) If body is not parsable as FunctionBody then throw a SyntaxError exception -* iv) Create a new Function object as specified in 13.2 with parameters specified by parsing P as a FormalParameterListopt and body specified by parsing body as a FunctionBody. -* Pass in a scope chain consisting of the global object as the Scope parameter -* v) Return Result(iv); -* @description: Value of the function constructor argument is x, where x is specified with "undefined"; -*/ - - -//CHECK#1 -try { - f = new Function(x); -} catch (e) { - $FAIL('#1: test failed with error '+e); -} - -//CHECK#2 -if (f.constructor !== Function) { - $ERROR('#2: When the Function constructor is called with one argument then body be that argument and creates a new Function object as specified in 13.2'); -} - -//CHECK#3 -if (f()!==undefined) { - $ERROR('#3: When the Function constructor is called with one argument then body be that argument the following steps are taken...'); -} - -var x; diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A1_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A1_T5.js deleted file mode 100644 index 536d4c5cb..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A1_T5.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.2.1_A1_T5; -* @section: 15.3.2.1, 13.2; -* @assertion: When the Function constructor is called with one argument then body be that argument and the following steps are taken: -* i) Call ToString(body) -* ii) If P is not parsable as a FormalParameterListopt then throw a SyntaxError exception -* iii) If body is not parsable as FunctionBody then throw a SyntaxError exception -* iv) Create a new Function object as specified in 13.2 with parameters specified by parsing P as a FormalParameterListopt and body specified by parsing body as a FunctionBody. -* Pass in a scope chain consisting of the global object as the Scope parameter -* v) Return Result(iv); -* @description: Value of the function constructor argument is "Object("return \'A\'")"; -*/ - -body = Object("return \'A\'"); - -//CHECK#1 -try { - f = new Function(body); -} catch (e) { - $FAIL('#1: test failed with error '+e); -} - -//CHECK#2 -if (f.constructor !== Function) { - $ERROR('#2: When the Function constructor is called with one argument then body be that argument and creates a new Function object as specified in 13.2'); -} - -//CHECK#3 -if (f()!=="\u0041") { - $ERROR('#3: When the Function constructor is called with one argument then body be that argument the following steps are taken...'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A1_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A1_T6.js deleted file mode 100644 index 35c3aec3a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A1_T6.js +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.2.1_A1_T6; -* @section: 15.3.2.1, 13.2; -* @assertion: When the Function constructor is called with one argument then body be that argument and the following steps are taken: -* i) Call ToString(body) -* ii) If P is not parsable as a FormalParameterListopt then throw a SyntaxError exception -* iii) If body is not parsable as FunctionBody then throw a SyntaxError exception -* iv) Create a new Function object as specified in 13.2 with parameters specified by parsing P as a FormalParameterListopt and body specified by parsing body as a FunctionBody. -* Pass in a scope chain consisting of the global object as the Scope parameter -* v) Return Result(iv); -* @description: Value of the function constructor argument is the string "return true;"; -*/ - -//CHECK#1 -try { - f = new Function("return true;"); -} catch (e) { - $FAIL('#1: test failed with error '+e); -} - -//CHECK#2 -if (f.constructor !== Function) { - $ERROR('#2: When the Function constructor is called with one argument then body be that argument and creates a new Function object as specified in 13.2'); -} - -//CHECK#3 -if (!(f())) { - $ERROR('#3: When the Function constructor is called with one argument then body be that argument the following steps are taken...'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A1_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A1_T7.js deleted file mode 100644 index 22eef459c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A1_T7.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.2.1_A1_T7; -* @section: 15.3.2.1, 13.2; -* @assertion: When the Function constructor is called with one argument then body be that argument and the following steps are taken: -* i) Call ToString(body) -* ii) If P is not parsable as a FormalParameterListopt then throw a SyntaxError exception -* iii) If body is not parsable as FunctionBody then throw a SyntaxError exception -* iv) Create a new Function object as specified in 13.2 with parameters specified by parsing P as a FormalParameterListopt and body specified by parsing body as a FunctionBody. -* Pass in a scope chain consisting of the global object as the Scope parameter -* v) Return Result(iv); -* @description: Value of the function constructor argument is "Object(1)"; -*/ - -body = new Object(1); - -//CHECK#1 -try { - f = new Function(body); -} catch (e) { - $FAIL('#1: test failed with error '+e); -} - -//CHECK#2 -if (f.constructor !== Function) { - $ERROR('#2: When the Function constructor is called with one argument then body be that argument and creates a new Function object as specified in 13.2'); -} - -//CHECK#3 -if (f()!==undefined) { - $ERROR('#3: When the Function constructor is called with one argument then body be that argument the following steps are taken...'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A1_T8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A1_T8.js deleted file mode 100644 index 110b64a5a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A1_T8.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.2.1_A1_T8; -* @section: 15.3.2.1, 13.2; -* @assertion: When the Function constructor is called with one argument then body be that argument and the following steps are taken: -* i) Call ToString(body) -* ii) If P is not parsable as a FormalParameterListopt then throw a SyntaxError exception -* iii) If body is not parsable as FunctionBody then throw a SyntaxError exception -* iv) Create a new Function object as specified in 13.2 with parameters specified by parsing P as a FormalParameterListopt and body specified by parsing body as a FunctionBody. -* Pass in a scope chain consisting of the global object as the Scope parameter -* v) Return Result(iv); -* @description: Value of the function constructor argument is "var 1=1;"; -*/ - -body = "var 1=1;"; - -//CHECK#1 -try { - f = new Function(body); - $FAIL('#1: If body is not parsable as FunctionBody then throw a SyntaxError exception'); -} catch (e) { - if (!(e instanceof SyntaxError)) { - $ERROR('#1.1: If body is not parsable as FunctionBody then throw a SyntaxError exception'); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A1_T9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A1_T9.js deleted file mode 100644 index 2484d2d13..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A1_T9.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.2.1_A1_T9; -* @section: 15.3.2.1; -* @assertion: When the Function constructor is called with one argument then body be that argument and the following steps are taken: -* i) Call ToString(body) -* ii) If P is not parsable as a FormalParameterListopt then throw a SyntaxError exception -* iii) If body is not parsable as FunctionBody then throw a SyntaxError exception -* iv) Create a new Function object as specified in 13.2 with parameters specified by parsing P as a FormalParameterListopt and body specified by parsing body as a FunctionBody. -* Pass in a scope chain consisting of the global object as the Scope parameter -* v) Return Result(iv); -* @description: Value of the function constructor argument is "return arguments[0];"; -*/ - -var f = new Function("return arguments[0];"); - -//CHECK#1 -if (!(f instanceof Function)) { - $ERROR('#3: When the Function constructor is called with one argument then body be that argument and the following steps are taken...'); -} - -//CHECK#2 -if (f("A") !== "A") { - $ERROR('#2: When the Function constructor is called with one argument then body be that argument and the following steps are taken...'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A2_T1.js deleted file mode 100644 index f626e04e3..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A2_T1.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.2.1_A2_T1; -* @section: 15.3.2.1; -* @assertion: It is permissible but not necessary to have one argument for each formal parameter to be specified; -* @description: Values of the function constructor arguments are "arg1", "arg2", "arg3", "return arg1+arg2+arg3;"; -*/ - -//CHECK#1 -try { - var f = Function("arg1", "arg2", "arg3", "return arg1+arg2+arg3;"); -} catch (e) { - $FAIL('#1: test failed'); -} - -//CHECK#2 -if (!(f instanceof Function)){ - $ERROR('#2: It is permissible but not necessary to have one argument for each formal parameter to be specified'); -} - -//CHECK#3 -if (f(1,2,3) !== 6) { - $ERROR('#3: It is permissible but not necessary to have one argument for each formal parameter to be specified'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A2_T2.js deleted file mode 100644 index a657905e9..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A2_T2.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.2.1_A2_T2; -* @section: 15.3.2.1; -* @assertion: It is permissible but not necessary to have one argument for each formal parameter to be specified; -* @description: Values of the function constructor arguments are "arg1, arg2", "arg3", "return arg1+arg2+arg3;"; -*/ - -//CHECK#1 -try { - var f = Function("arg1, arg2", "arg3", "return arg1+arg2+arg3;"); -} catch (e) { - $FAIL('#1: test failed'); -} - -//CHECK#2 -if (!(f instanceof Function)){ - $ERROR('#2: It is permissible but not necessary to have one argument for each formal parameter to be specified'); -} - -//CHECK#3 -if (f("AB","BA",1) !== "ABBA1") { - $ERROR('#3: It is permissible but not necessary to have one argument for each formal parameter to be specified'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A2_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A2_T3.js deleted file mode 100644 index b604361f6..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A2_T3.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.2.1_A2_T3; -* @section: 15.3.2.1; -* @assertion: It is permissible but not necessary to have one argument for each formal parameter to be specified; -* @description: Values of the function constructor arguments are "arg1, arg2, arg3", "return arg1+arg2+arg3;"; -*/ - -//CHECK#1 -try { - var f = Function("arg1, arg2, arg3", "return arg1+arg2+arg3;"); -} catch (e) { - $FAIL('#1: test failed'); -} - -//CHECK#2 -if (!(f instanceof Function)){ - $ERROR('#2: It is permissible but not necessary to have one argument for each formal parameter to be specified'); -} - -//CHECK#3 -if (f(1,1,"ABBA") !== "2ABBA") { - $ERROR('#3: It is permissible but not necessary to have one argument for each formal parameter to be specified'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A2_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A2_T4.js deleted file mode 100644 index 11cd39b17..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A2_T4.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.2.1_A2_T4; -* @section: 15.3.2.1; -* @assertion: It is permissible but not necessary to have one argument for each formal parameter to be specified; -* @description: Values of the function constructor arguments are "return"-s of various results; -*/ - -i=0; - -p={toString:function(){return "arg"+(++i)}}; - -//CHECK#1 -try { - var f = Function(p, p, p, "return arg1+arg2+arg3;"); -} catch (e) { - $FAIL('#1: test failed'); -} - -//CHECK#2 -if (!(f instanceof Function)){ - $ERROR('#2: It is permissible but not necessary to have one argument for each formal parameter to be specified'); -} - -//CHECK#3 -if (f(4,"2","QUESTION") !== "42QUESTION") { - $ERROR('#3: It is permissible but not necessary to have one argument for each formal parameter to be specified'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A2_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A2_T5.js deleted file mode 100644 index f314ef487..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A2_T5.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.2.1_A2_T5; -* @section: 15.3.2.1; -* @assertion: It is permissible but not necessary to have one argument for each formal parameter to be specified; -* @description: Values of the function constructor arguments are "return"-s of various results and a concotenation of strings; -*/ - -i=0; - -p={toString:function(){return "arg"+(++i)}}; - -//CHECK#1 -try { - var f = Function(p+","+p,p, "return arg1+arg2+arg3;"); -} catch (e) { - $FAIL('#1: test failed'); -} - -//CHECK#2 -if (!(f instanceof Function)){ - $ERROR('#2: It is permissible but not necessary to have one argument for each formal parameter to be specified'); -} - -//CHECK#3 -if (f("",1,2) !== "12") { - $ERROR('#3: It is permissible but not necessary to have one argument for each formal parameter to be specified'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A2_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A2_T6.js deleted file mode 100644 index cf21e0668..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A2_T6.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.2.1_A2_T6; -* @section: 15.3.2.1; -* @assertion: It is permissible but not necessary to have one argument for each formal parameter to be specified; -* @description: Values of the function constructor arguments are "return"-s of various results and a concotenation of strings; -*/ - -i=0; - -p={toString:function(){return "arg"+(++i)}}; - -//CHECK#1 -try { - var f = Function(p+","+p+","+p, "return arg1+arg2+arg3;"); -} catch (e) { - $FAIL('#1: test failed'); -} - -//CHECK#2 -if (!(f instanceof Function)){ - $ERROR('#2: It is permissible but not necessary to have one argument for each formal parameter to be specified'); -} - -//CHECK#3 -if (f("",1,p) !== "1arg4") { - $ERROR('#3: It is permissible but not necessary to have one argument for each formal parameter to be specified'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A3_T1.js deleted file mode 100644 index cf34bf284..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A3_T1.js +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.2.1_A3_T1; -* @section: 15.3.2.1, 13.2; -* @assertion: When the Function constructor is called with arguments p, body the following steps are taken: -* i) Let Result(i) be the first argument -* ii) Let P be ToString(Result(i)) -* iii) Call ToString(body) -* iv) If P is not parsable as a FormalParameterList_opt then throw a SyntaxError exception -* v) If body is not parsable as FunctionBody then throw a SyntaxError exception -* vi) Create a new Function object as specified in 13.2 with parameters specified by parsing P as a FormalParameterListopt and body specified by parsing body as a FunctionBody -* Pass in a scope chain consisting of the global object as the Scope parameter -* vii) Return Result(vi); -* @description: Values of the function constructor arguments are "{toString:function(){throw 1;}}" and "{toString:function(){throw 'body';}}"; -*/ - -p = {toString:function(){throw 1;}}; -body = {toString:function(){throw "body";}}; - -//CHECK#1 -try { - f = new Function(p,body); - $FAIL('#1: test failed'); -} catch (e) { - if (e !== 1) { - $ERROR('#1.1: i) Let Result(i) be the first argument; ii) Let P be ToString(Result(i))'); - } -} - - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A3_T10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A3_T10.js deleted file mode 100644 index 729cf1d2c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A3_T10.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.2.1_A3_T10; -* @section: 15.3.2.1, 13.2; -* @assertion: When the Function constructor is called with arguments p, body the following steps are taken: -* i) Let Result(i) be the first argument -* ii) Let P be ToString(Result(i)) -* iii) Call ToString(body) -* iv) If P is not parsable as a FormalParameterList_opt then throw a SyntaxError exception -* v) If body is not parsable as FunctionBody then throw a SyntaxError exception -* vi) Create a new Function object as specified in 13.2 with parameters specified by parsing P as a FormalParameterListopt and body specified by parsing body as a FunctionBody -* Pass in a scope chain consisting of the global object as the Scope parameter -* vii) Return Result(vi); -* @description: Values of the function constructor arguments are "{toString:function(){return "z;x"}}" and "return this;"; -*/ - -body = "return this;"; -p={toString:function(){return "z;x"}}; - -//CHECK#1 -try { - f = new Function(p,body); - $FAIL('#1: If P is not parsable as a FormalParameterList_opt then throw a SyntaxError exception'); -} catch (e) { - if (!(e instanceof SyntaxError)) { - $ERROR('#1.1: If P is not parsable as a FormalParameterList_opt then throw a SyntaxError exception'); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A3_T11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A3_T11.js deleted file mode 100644 index 62e7c5a27..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A3_T11.js +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.2.1_A3_T11; -* @section: 15.3.2.1, 13.2; -* @assertion: When the Function constructor is called with arguments p, body the following steps are taken: -* i) Let Result(i) be the first argument -* ii) Let P be ToString(Result(i)) -* iii) Call ToString(body) -* iv) If P is not parsable as a FormalParameterList_opt then throw a SyntaxError exception -* v) If body is not parsable as FunctionBody then throw a SyntaxError exception -* vi) Create a new Function object as specified in 13.2 with parameters specified by parsing P as a FormalParameterListopt and body specified by parsing body as a FunctionBody -* Pass in a scope chain consisting of the global object as the Scope parameter -* vii) Return Result(vi); -* @description: Values of the function constructor arguments are "a,b,c" and "void 0"; -*/ - -p = "a,b,c"; - -//CHECK#1 -try { - f = new Function(p, void 0); -} catch (e) { - $FAIL('#1: test failed with error '+e); -} - -//CHECK#2 -if (f.constructor !== Function) { - $ERROR('#2: When the Function constructor is called with arguments p, body creates a new Function object as specified in 13.2'); -} - -//CHECK#3 -if (f()!==undefined) { - $ERROR('#3: When the Function constructor is called with arguments p, body the following steps are taken...'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A3_T12.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A3_T12.js deleted file mode 100644 index 868cb4945..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A3_T12.js +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.2.1_A3_T12; -* @section: 15.3.2.1, 13.2; -* @assertion: When the Function constructor is called with arguments p, body the following steps are taken: -* i) Let Result(i) be the first argument -* ii) Let P be ToString(Result(i)) -* iii) Call ToString(body) -* iv) If P is not parsable as a FormalParameterList_opt then throw a SyntaxError exception -* v) If body is not parsable as FunctionBody then throw a SyntaxError exception -* vi) Create a new Function object as specified in 13.2 with parameters specified by parsing P as a FormalParameterListopt and body specified by parsing body as a FunctionBody -* Pass in a scope chain consisting of the global object as the Scope parameter -* vii) Return Result(vi); -* @description: Values of the function constructor arguments are "a,b,c" and "undefined"; -*/ - -p = "a,b,c"; - -//CHECK#1 -try { - f = new Function(p, undefined); -} catch (e) { - $FAIL('#1: test failed with error '+e); -} - -//CHECK#2 -if (f.constructor !== Function) { - $ERROR('#2: When the Function constructor is called with arguments p, body creates a new Function object as specified in 13.2'); -} - -//CHECK#3 -if (f()!==undefined) { - $ERROR('#3: When the Function constructor is called with arguments p, body the following steps are taken...'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A3_T13.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A3_T13.js deleted file mode 100644 index 37ef2ca36..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A3_T13.js +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.2.1_A3_T13; -* @section: 15.3.2.1, 13.2; -* @assertion: When the Function constructor is called with arguments p, body the following steps are taken: -* i) Let Result(i) be the first argument -* ii) Let P be ToString(Result(i)) -* iii) Call ToString(body) -* iv) If P is not parsable as a FormalParameterList_opt then throw a SyntaxError exception -* v) If body is not parsable as FunctionBody then throw a SyntaxError exception -* vi) Create a new Function object as specified in 13.2 with parameters specified by parsing P as a FormalParameterListopt and body specified by parsing body as a FunctionBody -* Pass in a scope chain consisting of the global object as the Scope parameter -* vii) Return Result(vi); -* @description: Values of the function constructor arguments are "a,b,c" and "null"; -*/ - -p = "a,b,c"; - -//CHECK#1 -try { - f = new Function(p, null); -} catch (e) { - $FAIL('#1: test failed with error '+e); -} - -//CHECK#2 -if (f.constructor !== Function) { - $ERROR('#2: When the Function constructor is called with arguments p, body creates a new Function object as specified in 13.2'); -} - -//CHECK#3 -if (f()!==undefined) { - $ERROR('#3: When the Function constructor is called with arguments p, body the following steps are taken...'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A3_T14.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A3_T14.js deleted file mode 100644 index a9184b525..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A3_T14.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.2.1_A3_T14; -* @section: 15.3.2.1, 13.2; -* @assertion: When the Function constructor is called with arguments p, body the following steps are taken: -* i) Let Result(i) be the first argument -* ii) Let P be ToString(Result(i)) -* iii) Call ToString(body) -* iv) If P is not parsable as a FormalParameterList_opt then throw a SyntaxError exception -* v) If body is not parsable as FunctionBody then throw a SyntaxError exception -* vi) Create a new Function object as specified in 13.2 with parameters specified by parsing P as a FormalParameterListopt and body specified by parsing body as a FunctionBody -* Pass in a scope chain consisting of the global object as the Scope parameter -* vii) Return Result(vi); -* @description: Values of the function constructor arguments are "a,b,c" and an undefined variable; -*/ - -p = "a,b,c"; - -//CHECK#1 -try { - f = new Function(p, body); -} catch (e) { - $FAIL('#1: test failed with error '+e); -} - -//CHECK#2 -if (f.constructor !== Function) { - $ERROR('#2: When the Function constructor is called with arguments p, body creates a new Function object as specified in 13.2'); -} - -//CHECK#3 -if (f()!==undefined) { - $ERROR('#3: When the Function constructor is called with arguments p, body the following steps are taken...'); -} - -var body; diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A3_T15.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A3_T15.js deleted file mode 100644 index a4ab36e01..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A3_T15.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.2.1_A3_T15; -* @section: 15.3.2.1, 13.2; -* @assertion: When the Function constructor is called with arguments p, body the following steps are taken: -* i) Let Result(i) be the first argument -* ii) Let P be ToString(Result(i)) -* iii) Call ToString(body) -* iv) If P is not parsable as a FormalParameterList_opt then throw a SyntaxError exception -* v) If body is not parsable as FunctionBody then throw a SyntaxError exception -* vi) Create a new Function object as specified in 13.2 with parameters specified by parsing P as a FormalParameterListopt and body specified by parsing body as a FunctionBody -* Pass in a scope chain consisting of the global object as the Scope parameter -* vii) Return Result(vi); -* @description: Values of the function constructor arguments are are two empty strings; -*/ - -//CHECK#1 -try { - f = new Function("", ""); -} catch (e) { - $FAIL('#1: test failed with error '+e); -} - -//CHECK#2 -if (f.constructor !== Function) { - $ERROR('#2: When the Function constructor is called with arguments p, body creates a new Function object as specified in 13.2'); -} - -//CHECK#3 -if (f()!==undefined) { - $ERROR('#3: When the Function constructor is called with arguments p, body the following steps are taken...'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A3_T2.js deleted file mode 100644 index b75efeaa3..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A3_T2.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.2.1_A3_T2; -* @section: 15.3.2.1, 13.2; -* @assertion: When the Function constructor is called with arguments p, body the following steps are taken: -* i) Let Result(i) be the first argument -* ii) Let P be ToString(Result(i)) -* iii) Call ToString(body) -* iv) If P is not parsable as a FormalParameterList_opt then throw a SyntaxError exception -* v) If body is not parsable as FunctionBody then throw a SyntaxError exception -* vi) Create a new Function object as specified in 13.2 with parameters specified by parsing P as a FormalParameterListopt and body specified by parsing body as a FunctionBody -* Pass in a scope chain consisting of the global object as the Scope parameter -* vii) Return Result(vi); -* @description: Values of the function constructor arguments are "{toString:function(){return 'a';}}" and "return a;"; -*/ - -p = {toString:function(){return "a";}}; -body = "return a;"; - -//CHECK#1 -try { - f = new Function(p,body); -} catch (e) { - $FAIL('#1: test failed with error '+e); -} - -//CHECK#2 -if (f.constructor !== Function) { - $ERROR('#2: When the Function constructor is called with arguments p, body creates a new Function object as specified in 13.2'); -} - -//CHECK#3 -if (f(42)!==42) { - $ERROR('#3: When the Function constructor is called with arguments p, body creates a new Function object as specified in 13.2'); -} - - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A3_T3.js deleted file mode 100644 index 13589c34a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A3_T3.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.2.1_A3_T3; -* @section: 15.3.2.1, 13.2; -* @assertion: When the Function constructor is called with arguments p, body the following steps are taken: -* i) Let Result(i) be the first argument -* ii) Let P be ToString(Result(i)) -* iii) Call ToString(body) -* iv) If P is not parsable as a FormalParameterList_opt then throw a SyntaxError exception -* v) If body is not parsable as FunctionBody then throw a SyntaxError exception -* vi) Create a new Function object as specified in 13.2 with parameters specified by parsing P as a FormalParameterListopt and body specified by parsing body as a FunctionBody -* Pass in a scope chain consisting of the global object as the Scope parameter -* vii) Return Result(vi); -* @description: Values of the function constructor arguments are "{toString:function(){p=1;return "a";}}" and "{toString:function(){throw "body";}}"; -*/ - -p = {toString:function(){p=1;return "a";}}; -body = {toString:function(){throw "body";}}; - -//CHECK#1 -try { - f = new Function(p,body); - $FAIL('#1: test failed'); -} catch (e) { - if (e !== "body") { - $ERROR('#1.1: i) Let Result(i) be the first argument; ii) Let P be ToString(Result(i))'); - } -} - -//CHECK#2 -if (p !== 1) { - $ERROR('#2: i) Let Result(i) be the first argument; ii) Let P be ToString(Result(i))'); -} - - - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A3_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A3_T4.js deleted file mode 100644 index cded7c9b4..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A3_T4.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.2.1_A3_T4; -* @section: 15.3.2.1, 13.2; -* @assertion: When the Function constructor is called with arguments p, body the following steps are taken: -* i) Let Result(i) be the first argument -* ii) Let P be ToString(Result(i)) -* iii) Call ToString(body) -* iv) If P is not parsable as a FormalParameterList_opt then throw a SyntaxError exception -* v) If body is not parsable as FunctionBody then throw a SyntaxError exception -* vi) Create a new Function object as specified in 13.2 with parameters specified by parsing P as a FormalParameterListopt and body specified by parsing body as a FunctionBody -* Pass in a scope chain consisting of the global object as the Scope parameter -* vii) Return Result(vi); -* @description: Values of the function constructor arguments are an undefined variable and "return 1.1;"; -*/ - -body = "return 1.1;"; - -//CHECK#1 -try { - f = new Function(p,body); -} catch (e) { - $FAIL('#1: test failed with error '+e); -} - -//CHECK#2 -if (f.constructor !== Function) { - $ERROR('#2: When the Function constructor is called with one argument then body be that argument and creates a new Function object as specified in 13.2'); -} - -//CHECK#3 -if (f()!==1.1) { - $ERROR('#3: When the Function constructor is called with one argument then body be that argument the following steps are taken...'); -} - -var p; - - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A3_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A3_T5.js deleted file mode 100644 index 3a86db1c1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A3_T5.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.2.1_A3_T5; -* @section: 15.3.2.1, 13.2; -* @assertion: When the Function constructor is called with arguments p, body the following steps are taken: -* i) Let Result(i) be the first argument -* ii) Let P be ToString(Result(i)) -* iii) Call ToString(body) -* iv) If P is not parsable as a FormalParameterList_opt then throw a SyntaxError exception -* v) If body is not parsable as FunctionBody then throw a SyntaxError exception -* vi) Create a new Function object as specified in 13.2 with parameters specified by parsing P as a FormalParameterListopt and body specified by parsing body as a FunctionBody -* Pass in a scope chain consisting of the global object as the Scope parameter -* vii) Return Result(vi); -* @description: Values of the function constructor arguments are "void 0" and "return \"A\";"; -*/ - - -body = "return \"A\";"; - -//CHECK#1 -try { - f = new Function(void 0,body); -} catch (e) { - $FAIL('#1: test failed with error '+e); -} - -//CHECK#2 -if (f.constructor !== Function) { - $ERROR('#2: When the Function constructor is called with one argument then body be that argument and creates a new Function object as specified in 13.2'); -} - -//CHECK#3 -if (f()!=='\u0041') { - $ERROR('#3: When the Function constructor is called with one argument then body be that argument the following steps are taken...'); -} - - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A3_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A3_T6.js deleted file mode 100644 index 1f3da3f21..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A3_T6.js +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.2.1_A3_T6; -* @section: 15.3.2.1, 13.2; -* @assertion: When the Function constructor is called with arguments p, body the following steps are taken: -* i) Let Result(i) be the first argument -* ii) Let P be ToString(Result(i)) -* iii) Call ToString(body) -* iv) If P is not parsable as a FormalParameterList_opt then throw a SyntaxError exception -* v) If body is not parsable as FunctionBody then throw a SyntaxError exception -* vi) Create a new Function object as specified in 13.2 with parameters specified by parsing P as a FormalParameterListopt and body specified by parsing body as a FunctionBody -* Pass in a scope chain consisting of the global object as the Scope parameter -* vii) Return Result(vi); -* @description: Values of the function constructor arguments are "null" and "return true;"; -*/ - - -body = "return true;"; - -//CHECK#1 -try { - f = new Function(null,body); - $FAIL('#1: If P is not parsable as a FormalParameterList_opt then throw a SyntaxError exception'); -} catch (e) { - if (!(e instanceof SyntaxError)) { - $ERROR('#1.1: If P is not parsable as a FormalParameterList_opt then throw a SyntaxError exception'); - } -} - - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A3_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A3_T7.js deleted file mode 100644 index 1e8eb22a8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A3_T7.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.2.1_A3_T7; -* @section: 15.3.2.1, 13.2; -* @assertion: When the Function constructor is called with arguments p, body the following steps are taken: -* i) Let Result(i) be the first argument -* ii) Let P be ToString(Result(i)) -* iii) Call ToString(body) -* iv) If P is not parsable as a FormalParameterList_opt then throw a SyntaxError exception -* v) If body is not parsable as FunctionBody then throw a SyntaxError exception -* vi) Create a new Function object as specified in 13.2 with parameters specified by parsing P as a FormalParameterListopt and body specified by parsing body as a FunctionBody -* Pass in a scope chain consisting of the global object as the Scope parameter -* vii) Return Result(vi); -* @description: Values of the function constructor arguments are "Object("a")" and "return a;"; -*/ - - -body = "return a;"; - -p=Object("a"); - -//CHECK#1 -try { - f = new Function(p, body); -} catch (e) { - $FAIL('#1: test failed with error '+e); -} - -//CHECK#2 -if (f.constructor !== Function) { - $ERROR('#2: When the Function constructor is called with one argument then body be that argument and creates a new Function object as specified in 13.2'); -} - -//CHECK#3 -if (f(1)!==1) { - $ERROR('#3: When the Function constructor is called with one argument then body be that argument the following steps are taken...'); -} - - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A3_T8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A3_T8.js deleted file mode 100644 index 2cc574ec0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A3_T8.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.2.1_A3_T8; -* @section: 15.3.2.1, 13.2; -* @assertion: When the Function constructor is called with arguments p, body the following steps are taken: -* i) Let Result(i) be the first argument -* ii) Let P be ToString(Result(i)) -* iii) Call ToString(body) -* iv) If P is not parsable as a FormalParameterList_opt then throw a SyntaxError exception -* v) If body is not parsable as FunctionBody then throw a SyntaxError exception -* vi) Create a new Function object as specified in 13.2 with parameters specified by parsing P as a FormalParameterListopt and body specified by parsing body as a FunctionBody -* Pass in a scope chain consisting of the global object as the Scope parameter -* vii) Return Result(vi); -* @description: Values of the function constructor arguments are "undefined" and "return this;"; -*/ - - -body = "return this;"; - -//CHECK#1 -try { - f = new Function(undefined,body); -} catch (e) { - $FAIL('#1: test failed with error '+e); -} - -//CHECK#2 -if (f.constructor !== Function) { - $ERROR('#2: When the Function constructor is called with one argument then body be that argument and creates a new Function object as specified in 13.2'); -} - -//CHECK#3 -if (f()!==this) { - $ERROR('#3: When the Function constructor is called with one argument then body be that argument the following steps are taken...'); -} - - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A3_T9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A3_T9.js deleted file mode 100644 index 9c022e7fe..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2.1_A3_T9.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.2.1_A3_T9; -* @section: 15.3.2.1, 13.2; -* @assertion: When the Function constructor is called with arguments p, body the following steps are taken: -* i) Let Result(i) be the first argument -* ii) Let P be ToString(Result(i)) -* iii) Call ToString(body) -* iv) If P is not parsable as a FormalParameterList_opt then throw a SyntaxError exception -* v) If body is not parsable as FunctionBody then throw a SyntaxError exception -* vi) Create a new Function object as specified in 13.2 with parameters specified by parsing P as a FormalParameterListopt and body specified by parsing body as a FunctionBody -* Pass in a scope chain consisting of the global object as the Scope parameter -* vii) Return Result(vi); -* @description: Values of the function constructor arguments are "1,1" and "return this;"; -*/ - - -body = "return this;"; -p="1,1"; - -//CHECK#1 -try { - f = new Function(p,body); - $FAIL('#1: If P is not parsable as a FormalParameterList_opt then throw a SyntaxError exception'); -} catch (e) { - if (!(e instanceof SyntaxError)) { - $ERROR('#1.1: If P is not parsable as a FormalParameterList_opt then throw a SyntaxError exception'); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2_A1.js deleted file mode 100644 index c04f6706b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.2_The_Function_Constructor/S15.3.2_A1.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.2_A1; -* @section: 15.3.2; -* @assertion: When Function is called as part of a new expression, it is a constructor: it initialises the newly created object; -* @description: Checking the constuctor of the object that is created as a new Function; -*/ - -var f = new Function; - -//CHECK#1 -if (f.constructor !== Function) { - $ERROR('#1: When Function is called as part of a new expression, it is a constructor: it initialises the newly created object'); -} - -//CHECK#2 -if (f === undefined) { - $ERROR('#2: When Function is called as part of a new expression, it is a constructor: it initialises the newly created object'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.3_Properties_of_the_Function_Constructor/15.3.3.1_Function.prototype/S15.3.3.1_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.3_Properties_of_the_Function_Constructor/15.3.3.1_Function.prototype/S15.3.3.1_A1.js deleted file mode 100644 index 19682a8bf..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.3_Properties_of_the_Function_Constructor/15.3.3.1_Function.prototype/S15.3.3.1_A1.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.3.1_A1; -* @section: 15.3.3.1, 15.3.4; -* @assertion: The Function.prototype property has the attribute ReadOnly; -* @description: Checking if varying the Function.prototype property fails; -*/ - -obj = Function.prototype; -Function.prototype = function(){return "shifted";}; - -//CHECK#1 -if (Function.prototype !== obj) { - $ERROR('#1: the Function.prototype property has the attributes ReadOnly.'); -} - -//CHECK#2 -try { - if(Function.prototype()!==undefined){ - $ERROR('#2: the Function.prototype property has the attributes ReadOnly'); - } -} catch (e) { - $ERROR('#2.1: the Function.prototype property has the attributes ReadOnly: '+e); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.3_Properties_of_the_Function_Constructor/15.3.3.1_Function.prototype/S15.3.3.1_A2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.3_Properties_of_the_Function_Constructor/15.3.3.1_Function.prototype/S15.3.3.1_A2.js deleted file mode 100644 index 95ceb5495..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.3_Properties_of_the_Function_Constructor/15.3.3.1_Function.prototype/S15.3.3.1_A2.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.3.1_A2; -* @section: 15.3.3.1, 15.3.4; -* @assertion: The Function.prototype property has the attribute DontEnum; -* @description: Checking if enumerating the Function.prototype property fails; -*/ - -// CHECK#1 -if (Function.propertyIsEnumerable('prototype')) { - $ERROR('#1: the Function.prototype property has the attributes DontEnum'); -} - -// CHECK#2 -count=0; - -for (p in Function){ - if (p==="prototype") count++; -} - -if (count !== 0) { - $ERROR('#2: the Function.prototype property has the attributes DontEnum'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.3_Properties_of_the_Function_Constructor/15.3.3.1_Function.prototype/S15.3.3.1_A3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.3_Properties_of_the_Function_Constructor/15.3.3.1_Function.prototype/S15.3.3.1_A3.js deleted file mode 100644 index a57d3d93c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.3_Properties_of_the_Function_Constructor/15.3.3.1_Function.prototype/S15.3.3.1_A3.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.3.1_A3; -* @section: 15.3.3.1, 15.3.4; -* @assertion: The Function.prototype property has the attribute DontDelete; -* @description: Checking if deleting the Function.prototype property fails; -*/ - -delete Function.prototype; - -//CHECK#1 -if (!(Function.hasOwnProperty('prototype'))) { - $ERROR('#1: the Function.prototype property has the attributes DontDelete.'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.3_Properties_of_the_Function_Constructor/S15.3.3_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.3_Properties_of_the_Function_Constructor/S15.3.3_A1.js deleted file mode 100644 index d2c6070fd..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.3_Properties_of_the_Function_Constructor/S15.3.3_A1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.3.3_A1; - * @section: 15.3.3; - * @assertion: The Function constructor has the property "prototype"; - * @description: Checking existence of the property "prototype"; - */ - -if(!Function.hasOwnProperty("prototype")){ - $ERROR('#1: The Function constructor has the property "prototype"'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.3_Properties_of_the_Function_Constructor/S15.3.3_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.3_Properties_of_the_Function_Constructor/S15.3.3_A2_T1.js deleted file mode 100644 index 51841a666..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.3_Properties_of_the_Function_Constructor/S15.3.3_A2_T1.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.3_A2_T1; -* @section: 15.3.3, 15.3.4; -* @assertion: The value of the internal [[Prototype]] property of the Function constructor -* is the Function prototype object; -* @description: Checking prototype of Function; -*/ - -// CHECK# -if (!(Function.prototype.isPrototypeOf(Function))) { - $ERROR('#1: the value of the internal [[Prototype]] property of the Function constructor is the Function prototype object.'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.3_Properties_of_the_Function_Constructor/S15.3.3_A2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.3_Properties_of_the_Function_Constructor/S15.3.3_A2_T2.js deleted file mode 100644 index 870684308..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.3_Properties_of_the_Function_Constructor/S15.3.3_A2_T2.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.3_A2_T2; -* @section: 15.3.3, 15.3.4; -* @assertion: The value of the internal [[Prototype]] property of the Function constructor -* is the Function prototype object; -* @description: Add new property to Function.prototype and check it; -*/ - -Function.prototype.indicator = 1; - -//CHECK# -if (Function.indicator != 1) { - $ERROR('#1: the value of the internal [[Prototype]] property of the Function constructor is the Function prototype object.'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.3_Properties_of_the_Function_Constructor/S15.3.3_A3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.3_Properties_of_the_Function_Constructor/S15.3.3_A3.js deleted file mode 100644 index 50402370c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.3_Properties_of_the_Function_Constructor/S15.3.3_A3.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.3_A3; -* @section: 15.3.3, 15.3.4; -* @assertion: Function constructor has length property whose value is 1; -* @description: Checking Function.length property; -*/ - -//CHECK#1 -if (!Function.hasOwnProperty("length")){ - $ERROR('#1: Function constructor has length property'); -} - -//CHECK#2 -if (Function.length !== 1) { - $ERROR('#2: Function constructor length property value is 1'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.2_Function.prototype.toString/S15.3.4.2_A10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.2_Function.prototype.toString/S15.3.4.2_A10.js deleted file mode 100644 index 8cbbd5ca1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.2_Function.prototype.toString/S15.3.4.2_A10.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.2_A10; -* @section: 15.3.4.2; -* @assertion: The Function.prototype.toString.length property has the attribute ReadOnly; -* @description: Checking if varying the Function.prototype.toString.length property fails; -*/ - -//CHECK#1 -if (!(Function.prototype.toString.hasOwnProperty('length'))) { - $FAIL('#1: the Function.prototype.toString has length property.'); -} - -obj = Function.prototype.toString.length; - -Function.prototype.toString.length = function(){return "shifted";}; - -//CHECK#2 -if (Function.prototype.toString.length !== obj) { - $ERROR('#2: the Function.prototype.toString length property has the attributes ReadOnly.'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.2_Function.prototype.toString/S15.3.4.2_A11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.2_Function.prototype.toString/S15.3.4.2_A11.js deleted file mode 100644 index 8c1c6fc7a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.2_Function.prototype.toString/S15.3.4.2_A11.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.2_A11; -* @section: 15.3.4.2; -* @assertion: The length property of the toString method is 0; -* @description: Checking Function.prototype.toString.length; -*/ - -//CHECK#1 -if (!(Function.prototype.toString.hasOwnProperty("length"))) { - $ERROR('#1: The Function.prototype.toString has the length property'); -} - -//CHECK#2 -if (Function.prototype.toString.length !== 0) { - $ERROR('#2: The length property of the toString method is 0'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.2_Function.prototype.toString/S15.3.4.2_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.2_Function.prototype.toString/S15.3.4.2_A1_T1.js deleted file mode 100644 index d2b7a5e43..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.2_Function.prototype.toString/S15.3.4.2_A1_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.2_A1_T1; -* @section: 15.3.4.2; -* @assertion: An implementation-dependent representation of the function is returned. This representation has the syntax of a FunctionDeclaration; -* @description: For testing use Function.prototype.toString() function; -*/ - -f = function(x) { - return x*x; -} - -//CHECK#1 -if (eval(f.toString())(10) !== f(10)) { - $ERROR('#1: An implementation-dependent representation of the function is returned. This representation has the syntax of a FunctionDeclaration'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.2_Function.prototype.toString/S15.3.4.2_A6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.2_Function.prototype.toString/S15.3.4.2_A6.js deleted file mode 100644 index 810a3fdee..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.2_Function.prototype.toString/S15.3.4.2_A6.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.2_A6; -* @section: 15.3.4.2, 13.2; -* @assertion: Function.prototype.toString has not prototype property; -* @description: Checking if obtaining the prototype property of Function.prototype.toString fails; -*/ - -//CHECK#1 -if (Function.prototype.toString.prototype !== undefined) { - $ERROR('#1: Function.prototype.toString has not prototype property'+Function.prototype.toString.prototype); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.2_Function.prototype.toString/S15.3.4.2_A7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.2_Function.prototype.toString/S15.3.4.2_A7.js deleted file mode 100644 index 54ad6f00d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.2_Function.prototype.toString/S15.3.4.2_A7.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.2_A7; -* @section: 15.3.4.2, 13.2; -* @assertion: Function.prototype.toString can't be used as constructor; -* @description: Checking if creating "new Function.prototype.toString" fails; -*/ - -FACTORY = Function.prototype.toString; - -try { - instance = new FACTORY; - $FAIL('#1: Function.prototype.toString can\'t be used as constructor'); -} catch (e) { - $PRINT(e); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.2_Function.prototype.toString/S15.3.4.2_A8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.2_Function.prototype.toString/S15.3.4.2_A8.js deleted file mode 100644 index a86c9c77f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.2_Function.prototype.toString/S15.3.4.2_A8.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.2_A8; -* @section: 15.3.4.2; -* @assertion: The Function.prototype.toString.length property has the attribute DontEnum; -* @description: Checking if enumerating the Function.prototype.toString.length property fails; -*/ - -//CHECK#0 -if (!(Function.prototype.toString.hasOwnProperty('length'))) { - $FAIL('#0: the Function.prototype.toString has length property.'); -} - - -// CHECK#1 -if (Function.prototype.toString.propertyIsEnumerable('length')) { - $ERROR('#1: the Function.prototype.toString.length property has the attributes DontEnum'); -} - -// CHECK#2 -for (p in Function.prototype.toString){ - if (p==="length") - $ERROR('#2: the Function.prototype.toString.length property has the attributes DontEnum'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.2_Function.prototype.toString/S15.3.4.2_A9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.2_Function.prototype.toString/S15.3.4.2_A9.js deleted file mode 100644 index bbf4a7b20..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.2_Function.prototype.toString/S15.3.4.2_A9.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.2_A9; -* @section: 15.3.4.2; -* @assertion: The Function.prototype.toString.length property has the attribute DontDelete; -* @description: Checking if deleting the Function.prototype.toString.length property fails; -*/ - -//CHECK#0 -if (!(Function.prototype.toString.hasOwnProperty('length'))) { - $FAIL('#0: the Function.prototype.toString has length property'); -} - -//CHECK#1 -if (delete Function.prototype.toString.length) { - $ERROR('#1: The Function.prototype.toString.length property has the attributes DontDelete'); -} - -//CHECK#2 -if (!(Function.prototype.toString.hasOwnProperty('length'))) { - $FAIL('#2: The Function.prototype.toString.length property has the attributes DontDelete'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A10.js deleted file mode 100644 index 10026bfbc..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A10.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.3_A10; -* @section: 15.3.4.3; -* @assertion: The Function.prototype.apply.length property has the attribute ReadOnly; -* @description: Checking if varying the Function.prototype.apply.length property fails; -*/ - -//CHECK#1 -if (!(Function.prototype.apply.hasOwnProperty('length'))) { - $FAIL('#1: the Function.prototype.apply has length property.'); -} - -obj = Function.prototype.apply.length; - -Function.prototype.apply.length = function(){return "shifted";}; - -//CHECK#2 -if (Function.prototype.apply.length !== obj) { - $ERROR('#2: the Function.prototype.apply length property has the attributes ReadOnly.'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A11.js deleted file mode 100644 index f148fb433..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A11.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.3_A11; -* @section: 15.3.4.3; -* @assertion: The Function.prototype.apply.length property has the attribute DontEnum; -* @description: TChecking if enumerating the Function.prototype.apply.length property fails; -*/ - -//CHECK#0 -if (!(Function.prototype.apply.hasOwnProperty('length'))) { - $FAIL('#0: the Function.prototype.apply has length property.'); -} - - -// CHECK#1 -if (Function.prototype.apply.propertyIsEnumerable('length')) { - $ERROR('#1: the Function.prototype.apply.length property has the attributes DontEnum'); -} - -// CHECK#2 -for (p in Function.prototype.apply){ - if (p==="length") - $ERROR('#2: the Function.prototype.apply.length property has the attributes DontEnum'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A12.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A12.js deleted file mode 100644 index 3be50be81..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A12.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.3_A12; -* @section: 15.3.4.3, 13.2; -* @assertion: Function.prototype.apply has not prototype property; -* @description: Checking if obtaining the prototype property of Function.prototype.apply fails; -*/ - -//CHECK#1 -if (Function.prototype.apply.prototype !== undefined) { - $ERROR('#1: Function.prototype.apply has not prototype property'+Function.prototype.apply.prototype); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A1_T1.js deleted file mode 100644 index e5f75209c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A1_T1.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.3_A1_T1; -* @section: 15.3.4.3; -* @assertion: The apply method performs a function call using the [[Call]] property of the object. If the object does not have a [[Call]] property, a TypeError exception is thrown; -* @description: Calling "apply" method of the object that does not have a [[Call]] property. -* Prototype of the object is Function(); -*/ - -proto=Function(); - -function FACTORY(){}; - -FACTORY.prototype=proto; - -obj = new FACTORY; - -//CHECK#1 -if (typeof obj.apply !== "function") { - $ERROR('#1: apply method accessed'); -} - -//CHECK#2 -try { - obj.apply(); - $FAIL('#2: If the object does not have a [[Call]] property, a TypeError exception is thrown'); -} catch (e) { - if (!(e instanceof TypeError)) { - $ERROR('#2.1: If the object does not have a [[Call]] property, a TypeError exception is thrown'); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A1_T2.js deleted file mode 100644 index 3419e4c5d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A1_T2.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.3_A1_T2; -* @section: 15.3.4.3; -* @assertion: The apply method performs a function call using the [[Call]] property of the object. If the object does not have a [[Call]] property, a TypeError exception is thrown; -* @description: Calling "apply" method of the object that does not have a [[Call]] property. -* Prototype of the object is Function.prototype; -*/ - -function FACTORY(){}; - -FACTORY.prototype=Function.prototype; - -obj = new FACTORY; - -//CHECK#1 -if (typeof obj.apply !== "function") { - $ERROR('#1: apply method accessed'); -} - -//CHECK#2 -try { - obj.apply(); - $FAIL('#2: If the object does not have a [[Call]] property, a TypeError exception is thrown'); -} catch (e) { - if (!(e instanceof TypeError)) { - $ERROR('#2.1: If the object does not have a [[Call]] property, a TypeError exception is thrown'); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A2_T1.js deleted file mode 100644 index e7d375f3f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A2_T1.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.3_A2_T1; -* @section: 15.3.4.3; -* @assertion: The length property of the apply method is 2; -* @description: Checking Function.prototype.apply.length; -*/ - -//CHECK#1 -if (typeof Function.prototype.apply !== "function") { - $ERROR('#1: apply method defined'); -} - -//CHECK#2 -if (typeof Function.prototype.apply.length === "undefined") { - $ERROR('#2: length property of apply method defined'); -} - -//CHECK#3 -if (Function.prototype.apply.length !== 2) { - $ERROR('#3: The length property of the apply method is 2'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A2_T2.js deleted file mode 100644 index a26cfd645..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A2_T2.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.3_A2_T2; -* @section: 15.3.4.3; -* @assertion: The length property of the apply method is 2; -* @description: Checking f.apply.length, where f is new Function; -*/ - -f=new Function; - -//CHECK#1 -if (typeof f.apply !== "function") { - $ERROR('#1: apply method accessed'); -} - -//CHECK#2 -if (typeof f.apply.length === "undefined") { - $ERROR('#2: length property of apply method defined'); -} - -//CHECK#3 -if (f.apply.length !== 2) { - $ERROR('#3: The length property of the apply method is 2'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A3_T1.js deleted file mode 100644 index 194aee792..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A3_T1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.3_A3_T1; -* @section: 15.3.4.3; -* @assertion: If thisArg is null or undefined, the called function is passed the global object as the this value; -* @description: Not any arguments at apply function; -*/ - -Function("this.field=\"strawberry\"").apply(); - -//CHECK#1 -if (this["field"] !== "strawberry") { - $ERROR('#1: If thisArg is null or undefined, the called function is passed the global object as the this value'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A3_T10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A3_T10.js deleted file mode 100644 index ee53b6bf9..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A3_T10.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.3_A3_T10; -* @section: 15.3.4.3; -* @assertion: If thisArg is null or undefined, the called function is passed the global object as the this value; -* @description: Checking by using eval, no any arguments at apply function; -*/ - -eval(" (function(){this.feat=1}).apply()"); - -//CHECK#1 -if (this["feat"] !== 1) { - $ERROR('#1: If thisArg is null or undefined, the called function is passed the global object as the this value'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A3_T2.js deleted file mode 100644 index 2f4f0ebb8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A3_T2.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.3_A3_T2; -* @section: 15.3.4.3; -* @assertion: If thisArg is null or undefined, the called function is passed the global object as the this value; -* @description: Argument at apply function is null; -*/ - -Function("this.field=\"green\"").apply(null); - -//CHECK#1 -if (this["field"] !== "green") { - $ERROR('#1: If thisArg is null or undefined, the called function is passed the global object as the this value'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A3_T3.js deleted file mode 100644 index e13458a89..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A3_T3.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.3_A3_T3; -* @section: 15.3.4.3; -* @assertion: If thisArg is null or undefined, the called function is passed the global object as the this value; -* @description: Argument at apply function is void 0; -*/ - -Function("this.field=\"battle\"").apply(void 0); - -//CHECK#1 -if (this["field"] !== "battle") { - $ERROR('#1: If thisArg is null or undefined, the called function is passed the global object as the this value'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A3_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A3_T4.js deleted file mode 100644 index 8bb939e0b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A3_T4.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.3_A3_T4; -* @section: 15.3.4.3; -* @assertion: If thisArg is null or undefined, the called function is passed the global object as the this value; -* @description: Argument at apply function is undefined; -*/ - -Function("this.field=\"oil\"").apply(undefined); - -//CHECK#1 -if (this["field"] !== "oil") { - $ERROR('#1: If thisArg is null or undefined, the called function is passed the global object as the this value'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A3_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A3_T5.js deleted file mode 100644 index 4c9f1423c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A3_T5.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.3_A3_T5; -* @section: 15.3.4.3; -* @assertion: If thisArg is null or undefined, the called function is passed the global object as the this value; -* @description: No any arguments at apply function and it called inside function declaration; -*/ - -function FACTORY(){ - Function("this.feat=\"in da haus\"").apply(); -}; - -obj = new FACTORY; - -//CHECK#1 -if (this["feat"] !== "in da haus") { - $ERROR('#1: If thisArg is null or undefined, the called function is passed the global object as the this value'); -} - -//CHECK#2 -if (typeof obj.feat !== "undefined") { - $ERROR('#1: If thisArg is null or undefined, the called function is passed the global object as the this value'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A3_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A3_T6.js deleted file mode 100644 index 8b5d9329a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A3_T6.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.3_A3_T6; -* @section: 15.3.4.3; -* @assertion: If thisArg is null or undefined, the called function is passed the global object as the this value; -* @description: Argument at apply function is null and it called inside function declaration; -*/ - -function FACTORY(){ - (function(){this.feat="kamon beyba"}).apply(null); -}; - -obj = new FACTORY; - -//CHECK#1 -if (this["feat"] !== "kamon beyba") { - $ERROR('#1: If thisArg is null or undefined, the called function is passed the global object as the this value'); -} - -//CHECK#2 -if (typeof obj.feat !== "undefined") { - $ERROR('#1: If thisArg is null or undefined, the called function is passed the global object as the this value'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A3_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A3_T7.js deleted file mode 100644 index a7b469040..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A3_T7.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.3_A3_T7; -* @section: 15.3.4.3; -* @assertion: If thisArg is null or undefined, the called function is passed the global object as the this value; -* @description: Argument at apply function is void 0 and it called inside function declaration; -*/ - -(function FACTORY(){ - Function("this.feat=\"in da haus\"").apply(void 0); -})(); - - -//CHECK#1 -if (this["feat"] !== "in da haus") { - $ERROR('#1: If thisArg is null or undefined, the called function is passed the global object as the this value'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A3_T8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A3_T8.js deleted file mode 100644 index 89e2627b7..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A3_T8.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.3_A3_T8; -* @section: 15.3.4.3; -* @assertion: If thisArg is null or undefined, the called function is passed the global object as the this value; -* @description: Argument at apply function is undefined and it called inside function declaration; -*/ - -(function FACTORY(){ - (function(){this.feat="kamon beyba"}).apply(undefined); -})(); - -//CHECK#1 -if (this["feat"] !== "kamon beyba") { - $ERROR('#1: If thisArg is null or undefined, the called function is passed the global object as the this value'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A3_T9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A3_T9.js deleted file mode 100644 index dce9397a1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A3_T9.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.3_A3_T9; -* @section: 15.3.4.3; -* @assertion: If thisArg is null or undefined, the called function is passed the global object as the this value; -* @description: Checking by using eval, argument at apply function is void 0; -*/ - -eval( " Function(\"this.feat=1\").apply(void 0) " ); - -//CHECK#1 -if (this["feat"] !== 1) { - $ERROR('#1: If thisArg is null or undefined, the called function is passed the global object as the this value'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A5_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A5_T1.js deleted file mode 100644 index 40d5af67c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A5_T1.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.3_A5_T1; -* @section: 15.3.4.3; -* @assertion: If thisArg is not null(defined) the called function is passed ToObject(thisArg) as the this value; -* @description: thisArg is number; -*/ - -obj=1; - -retobj = Function("this.touched= true; return this;").apply(obj); - -//CHECK#1 -if (typeof obj.touched !== "undefined") { - $ERROR('#1: If thisArg is not null(defined) the called function is passed ToObject(thisArg) as the this value'); -} - -//CHECK#2 -if (!(retobj["touched"])) { - $ERROR('#2: If thisArg is not null(defined) the called function is passed ToObject(thisArg) as the this value'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A5_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A5_T2.js deleted file mode 100644 index b7fed6e21..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A5_T2.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.3_A5_T2; -* @section: 15.3.4.3; -* @assertion: If thisArg is not null(defined) the called function is passed ToObject(thisArg) as the this value; -* @description: thisArg is boolean true; -*/ - -obj=true; - -retobj = new Function("this.touched= true; return this;").apply(obj); - -//CHECK#1 -if (typeof obj.touched !== "undefined") { - $ERROR('#1: If thisArg is not null(defined) the called function is passed ToObject(thisArg) as the this value'); -} - -//CHECK#2 -if (!(retobj["touched"])) { - $ERROR('#2: If thisArg is not null(defined) the called function is passed ToObject(thisArg) as the this value'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A5_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A5_T3.js deleted file mode 100644 index 5a91d9978..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A5_T3.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.3_A5_T3; -* @section: 15.3.4.3; -* @assertion: If thisArg is not null(defined) the called function is passed ToObject(thisArg) as the this value; -* @description: thisArg is string; -*/ - -obj="soap"; - -retobj = ( function(){this.touched= true; return this;} ).apply(obj); - -//CHECK#1 -if (typeof obj.touched !== "undefined") { - $ERROR('#1: If thisArg is not null(defined) the called function is passed ToObject(thisArg) as the this value'); -} - -//CHECK#2 -if (!(retobj["touched"])) { - $ERROR('#2: If thisArg is not null(defined) the called function is passed ToObject(thisArg) as the this value'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A5_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A5_T4.js deleted file mode 100644 index e01212846..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A5_T4.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.3_A5_T4; -* @section: 15.3.4.3; -* @assertion: If thisArg is not null(defined) the called function is passed ToObject(thisArg) as the this value; -* @description: thisArg is function variable that return this; -*/ - -f = function(){this.touched= true; return this;}; - -retobj = f.apply(obj); - -//CHECK#1 -if (typeof obj !== "undefined") { - $ERROR('#1: If thisArg is not null(defined) the called function is passed ToObject(thisArg) as the this value'); -} - -//CHECK#2 -if (!(retobj["touched"])) { - $ERROR('#2: If thisArg is not null(defined) the called function is passed ToObject(thisArg) as the this value'); -} - -var obj; diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A5_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A5_T5.js deleted file mode 100644 index 66291a0b1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A5_T5.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.3_A5_T5; -* @section: 15.3.4.3; -* @assertion: If thisArg is not null(defined) the called function is passed ToObject(thisArg) as the this value; -* @description: thisArg is function variable; -*/ - -f = function(){this.touched= true;}; - -obj={}; - -f.apply(obj); - -//CHECK#1 -if (!(obj.touched)) { - $ERROR('#1: If thisArg is not null(defined) the called function is passed ToObject(thisArg) as the this value'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A5_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A5_T6.js deleted file mode 100644 index 3a2eb5dc3..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A5_T6.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.3_A5_T6; -* @section: 15.3.4.3; -* @assertion: If thisArg is not null(defined) the called function is passed ToObject(thisArg) as the this value; -* @description: thisArg is new String(); -*/ - -obj=new String("soap"); - -( function(){this.touched= true;}).apply(obj); - -//CHECK#1 -if (!(obj.touched)) { - $ERROR('#1: If thisArg is not null(defined) the called function is passed ToObject(thisArg) as the this value'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A5_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A5_T7.js deleted file mode 100644 index 3715af210..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A5_T7.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.3_A5_T7; -* @section: 15.3.4.3; -* @assertion: If thisArg is not null(defined) the called function is passed ToObject(thisArg) as the this value; -* @description: thisArg is new Number(); -*/ - -obj=new Number(1); - -Function("this.touched= true;").apply(obj); - -//CHECK#1 -if (!(obj.touched)) { - $ERROR('#1: If thisArg is not null(defined) the called function is passed ToObject(thisArg) as the this value'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A5_T8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A5_T8.js deleted file mode 100644 index 065189e34..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A5_T8.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.3_A5_T8; -* @section: 15.3.4.3; -* @assertion: If thisArg is not null(defined) the called function is passed ToObject(thisArg) as the this value; -* @description: thisArg is Function(); -*/ - -obj=Function(); - -new Function("this.touched= true; return this;").apply(obj); - -//CHECK#1 -if (!(obj.touched)) { - $ERROR('#1: If thisArg is not null(defined) the called function is passed ToObject(thisArg) as the this value'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A6_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A6_T1.js deleted file mode 100644 index 66123546d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A6_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.3_A6_T1; -* @section: 15.3.4.3; -* @assertion: if argArray is neither an array nor an arguments object (see 10.1.8), a TypeError exception is thrown; -* @description: argArray is (1,{}); -*/ - -//CHECK#1 -try { - Function().apply(1,{}); - $FAIL('#1: if argArray is neither an array nor an arguments object (see 10.1.8), a TypeError exception is thrown'); -} catch (e) { - if (!(e instanceof TypeError)) { - $ERROR('#1.1: if argArray is neither an array nor an arguments object (see 10.1.8), a TypeError exception is thrown'); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A6_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A6_T2.js deleted file mode 100644 index 88ed4a692..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A6_T2.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.3_A6_T2; -* @section: 15.3.4.3; -* @assertion: if argArray is neither an array nor an arguments object (see 10.1.8), a TypeError exception is thrown; -* @description: argArray is (null,1); -*/ - -//CHECK#1 -try { - Function().apply(null,1); - $FAIL('#1: if argArray is neither an array nor an arguments object (see 10.1.8), a TypeError exception is thrown'); -} catch (e) { - if (!(e instanceof TypeError)) { - $ERROR('#1.1: if argArray is neither an array nor an arguments object (see 10.1.8), a TypeError exception is thrown'); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A6_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A6_T3.js deleted file mode 100644 index 9049ae414..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A6_T3.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.3_A6_T3; -* @section: 15.3.4.3; -* @assertion: if argArray is neither an array nor an arguments object (see 10.1.8), a TypeError exception is thrown; -* @description: argArray is (object,"1,3,4"); -*/ - -obj={}; - -//CHECK#1 -try { - Function().apply(obj,"1,3,4"); - $FAIL('#1: if argArray is neither an array nor an arguments object (see 10.1.8), a TypeError exception is thrown'); -} catch (e) { - if (!(e instanceof TypeError)) { - $ERROR('#1.1: if argArray is neither an array nor an arguments object (see 10.1.8), a TypeError exception is thrown'); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A6_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A6_T4.js deleted file mode 100644 index 3fbb53935..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A6_T4.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.3_A6_T4; -* @section: 15.3.4.3; -* @assertion: if argArray is neither an array nor an arguments object (see 10.1.8), a TypeError exception is thrown; -* @description: argArray is (this,function(){return arguments;}); -*/ - -//CHECK#1 -try { - Function().apply(this,function(){return arguments;}); - $FAIL('#1: if argArray is neither an array nor an arguments object (see 10.1.8), a TypeError exception is thrown'); -} catch (e) { - if (!(e instanceof TypeError)) { - $ERROR('#1.1: if argArray is neither an array nor an arguments object (see 10.1.8), a TypeError exception is thrown'); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A7_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A7_T1.js deleted file mode 100644 index a83bfce0a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A7_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.3_A7_T1; -* @section: 15.3.4.3; -* @assertion: If argArray is either an array or an arguments object, -* the function is passed the (ToUint32(argArray.length)) arguments argArray[0], argArray[1],...,argArray[ToUint32(argArray.length)-1]; -* @description: argArray is (null,[1]); -*/ - -Function("a1,a2,a3","this.shifted=a1;").apply(null,[1]); - -//CHECK#1 -if (this["shifted"] !== 1) { - $ERROR('#1: If argArray is either an array or an arguments object, the function is passed the...'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A7_T10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A7_T10.js deleted file mode 100644 index 11ffe978c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A7_T10.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.3_A7_T10; -* @section: 15.3.4.3; -* @assertion: If argArray is either an array or an arguments object, -* the function is passed the (ToUint32(argArray.length)) arguments argArray[0], argArray[1],...,argArray[ToUint32(argArray.length)-1]; -* @description: argArray is (empty object, arguments), inside function call without declaration used; -*/ - -var obj={}; - -(function (){ - Function("a1,a2,a3","this.shifted=a1+a2+a3;").apply(obj,arguments); -})("",4,2); - -//CHECK#1 -if (obj["shifted"] !== "42") { - $ERROR('#1: If argArray is either an array or an arguments object, the function is passed the...'); -} - -//CHECK#2 -if (typeof this["shifted"] !== "undefined") { - $ERROR('#2: If argArray is either an array or an arguments object, the function is passed the...'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A7_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A7_T2.js deleted file mode 100644 index 72ab307d2..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A7_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.3_A7_T2; -* @section: 15.3.4.3; -* @assertion: If argArray is either an array or an arguments object, -* the function is passed the (ToUint32(argArray.length)) arguments argArray[0], argArray[1],...,argArray[ToUint32(argArray.length)-1]; -* @description: argArray is (null,[1,2,3]); -*/ - -new Function("a1,a2","a3","this.shifted=a2;").apply(null,[1,2,3]); - -//CHECK#1 -if (this["shifted"] !== 2) { - $ERROR('#1: If argArray is either an array or an arguments object, the function is passed the...'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A7_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A7_T3.js deleted file mode 100644 index 93afc2b0e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A7_T3.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.3_A7_T3; -* @section: 15.3.4.3; -* @assertion: If argArray is either an array or an arguments object, -* the function is passed the (ToUint32(argArray.length)) arguments argArray[0], argArray[1],...,argArray[ToUint32(argArray.length)-1]; -* @description: argArray is (empty object, new Array("nine","inch","nails")); -*/ - -i=0; - -p={toString:function(){return "a"+(++i);}}; - -obj={}; - -Function(p,"a2,a3","this.shifted=a1;").apply(obj, new Array("nine","inch","nails")); - -//CHECK#1 -if (obj["shifted"] !== "nine") { - $ERROR('#1: If argArray is either an array or an arguments object, the function is passed the...'); -} - -//CHECK#2 -if (typeof this["shifted"] !== "undefined") { - $ERROR('#2: If argArray is either an array or an arguments object, the function is passed the...'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A7_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A7_T4.js deleted file mode 100644 index a56aea8aa..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A7_T4.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.3_A7_T4; -* @section: 15.3.4.3; -* @assertion: If argArray is either an array or an arguments object, -* the function is passed the (ToUint32(argArray.length)) arguments argArray[0], argArray[1],...,argArray[ToUint32(argArray.length)-1]; -* @description: argArray is (empty object, ( function(){return arguments;}) ("a","b","c")); -*/ - -i=0; - -p={toString:function(){return "a"+(++i);}}; - -obj={}; - -new Function(p,p,p, "this.shifted=a3;").apply( obj,( function(){return arguments;}) ("a","b","c") ); - -//CHECK#1 -if (obj["shifted"] !== "c") { - $ERROR('#1: If argArray is either an array or an arguments object, the function is passed the...'); -} - -//CHECK#2 -if (typeof this["shifted"] !== "undefined") { - $ERROR('#2: If argArray is either an array or an arguments object, the function is passed the...'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A7_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A7_T5.js deleted file mode 100644 index 342599129..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A7_T5.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.3_A7_T5; -* @section: 15.3.4.3; -* @assertion: If argArray is either an array or an arguments object, -* the function is passed the (ToUint32(argArray.length)) arguments argArray[0], argArray[1],...,argArray[ToUint32(argArray.length)-1]; -* @description: argArray is (null, arguments), inside function declaration used; -*/ - -function FACTORY(){ - Function("a1,a2,a3","this.shifted=a1+a2+a3;").apply(null,arguments); -} - -obj=new FACTORY("",1,2); - -//CHECK#1 -if (this["shifted"] !== "12") { - $ERROR('#1: If argArray is either an array or an arguments object, the function is passed the...'); -} - -//CHECK#2 -if (typeof obj.shifted !== "undefined") { - $ERROR('#2: If argArray is either an array or an arguments object, the function is passed the...'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A7_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A7_T6.js deleted file mode 100644 index cd3a45c81..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A7_T6.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.3_A7_T6; -* @section: 15.3.4.3; -* @assertion: If argArray is either an array or an arguments object, -* the function is passed the (ToUint32(argArray.length)) arguments argArray[0], argArray[1],...,argArray[ToUint32(argArray.length)-1]; -* @description: argArray is (this, arguments), inside function declaration used; -*/ - -function FACTORY(){ - Function("a1,a2,a3","this.shifted=a1+a2+a3;").apply(this,arguments); -} - -obj=new FACTORY("",4,2); - -//CHECK#1 -if (obj["shifted"] !== "42") { - $ERROR('#1: If argArray is either an array or an arguments object, the function is passed the...'); -} - -//CHECK#2 -if (typeof this["shifted"] !== "undefined") { - $ERROR('#2: If argArray is either an array or an arguments object, the function is passed the...'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A7_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A7_T7.js deleted file mode 100644 index a129184dd..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A7_T7.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.3_A7_T7; -* @section: 15.3.4.3; -* @assertion: If argArray is either an array or an arguments object, -* the function is passed the (ToUint32(argArray.length)) arguments argArray[0], argArray[1],...,argArray[ToUint32(argArray.length)-1]; -* @description: argArray is (null, arguments), inside function call without declaration used; -*/ - -(function (){ - Function("a1,a2,a3","this.shifted=a1+a2+a3;").apply(null,arguments); -})("",1,2); - -//CHECK#1 -if (this["shifted"] !== "12") { - $ERROR('#1: If argArray is either an array or an arguments object, the function is passed the...'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A7_T8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A7_T8.js deleted file mode 100644 index 58428b72d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A7_T8.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.3_A7_T8; -* @section: 15.3.4.3; -* @assertion: If argArray is either an array or an arguments object, -* the function is passed the (ToUint32(argArray.length)) arguments argArray[0], argArray[1],...,argArray[ToUint32(argArray.length)-1]; -* @description: argArray is (this, arguments), inside function call without declaration used; -*/ - -(function (){ - Function("a1,a2,a3","this.shifted=a1+a2+a3;").apply(this,arguments); -})("",4,2); - -//CHECK#2 -if (this["shifted"] !== "42") { - $ERROR('#2: If argArray is either an array or an arguments object, the function is passed the...'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A7_T9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A7_T9.js deleted file mode 100644 index 79dae88d8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A7_T9.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.3_A7_T9; -* @section: 15.3.4.3; -* @assertion: If argArray is either an array or an arguments object, -* the function is passed the (ToUint32(argArray.length)) arguments argArray[0], argArray[1],...,argArray[ToUint32(argArray.length)-1]; -* @description: argArray is (empty object, arguments), inside function declaration used; -*/ - -function FACTORY(){ - var obj = {}; - Function("a1,a2,a3","this.shifted=a1+a2+a3;").apply(obj,arguments); - return obj; -} - -obj=new FACTORY("",1,2); - -//CHECK#1 -if (typeof this["shifted"] !== "undefined") { - $ERROR('#1: If argArray is either an array or an arguments object, the function is passed the...'); -} - -//CHECK#2 -if (obj.shifted !== "12") { - $ERROR('#2: If argArray is either an array or an arguments object, the function is passed the...'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A8_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A8_T1.js deleted file mode 100644 index 4b2ec53e0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A8_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.3_A8_T1; -* @section: 15.3.4.3; -* @assertion: Function.prototype.apply can`t be used as [[create]] caller; -* @description: Checking if creating "new Function.prototype.apply" fails; -*/ - -try { - obj = new Function.prototype.apply; - $ERROR('#1: Function.prototype.apply can\'t be used as [[create]] caller'); -} catch (e) { - if (!(e instanceof TypeError)) { - $ERROR('#1.1: Function.prototype.apply can\'t be used as [[create]] caller'); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A8_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A8_T2.js deleted file mode 100644 index cf6e5a42c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A8_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.3_A8_T2; -* @section: 15.3.4.3; -* @assertion: Function.prototype.apply can`t be used as [[create]] caller; -* @description: Checking if creating "new Function.prototype.apply()" fails; -*/ - -try { - obj = new Function.prototype.apply(); - $ERROR('#1: Function.prototype.apply can\'t be used as [[create]] caller'); -} catch (e) { - if (!(e instanceof TypeError)) { - $ERROR('#1.1: Function.prototype.apply can\'t be used as [[create]] caller'); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A8_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A8_T3.js deleted file mode 100644 index d97d2c2d7..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A8_T3.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.3_A8_T3; -* @section: 15.3.4.3; -* @assertion: Function.prototype.apply can`t be used as [[create]] caller; -* @description: Checking if creating "new Function.apply" fails; -*/ - -try { - obj = new Function.apply; - $ERROR('#1: Function.prototype.apply can\'t be used as [[create]] caller'); -} catch (e) { - if (!(e instanceof TypeError)) { - $ERROR('#1.1: Function.prototype.apply can\'t be used as [[create]] caller'); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A8_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A8_T4.js deleted file mode 100644 index 51a17f8fe..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A8_T4.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.3_A8_T4; -* @section: 15.3.4.3; -* @assertion: Function.prototype.apply can`t be used as [[create]] caller; -* @description: Checking if creating "new (Function("this.p1=1").apply)" fails; -*/ - -try { - obj = new (Function("this.p1=1").apply); - $ERROR('#1: Function.prototype.apply can\'t be used as [[create]] caller'); -} catch (e) { - if (!(e instanceof TypeError)) { - $ERROR('#1.1: Function.prototype.apply can\'t be used as [[create]] caller'); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A8_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A8_T5.js deleted file mode 100644 index 37f65da29..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A8_T5.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.3_A8_T5; -* @section: 15.3.4.3; -* @assertion: Function.prototype.apply can`t be used as [[create]] caller; -* @description: Checking if creating "new Function("this.p1=1").apply" fails; -*/ - -try { - FACTORY = Function("this.p1=1").apply; - obj = new FACTORY(); - $ERROR('#1: Function.prototype.apply can\'t be used as [[create]] caller'); -} catch (e) { - if (!(e instanceof TypeError)) { - $ERROR('#1.1: Function.prototype.apply can\'t be used as [[create]] caller'); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A8_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A8_T6.js deleted file mode 100644 index a1838190e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A8_T6.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.3_A8_T6; -* @section: 15.3.4.3; -* @assertion: Function.prototype.apply can`t be used as [[create]] caller; -* @description: Checking if creating "new (Function("function f(){this.p1=1;};return f").apply())" fails; -*/ - -//CHECK#1 -try { - obj = new (Function("function f(){this.p1=1;};return f").apply()); -} catch (e) { - $ERROR('#1: Function.prototype.apply can\'t be used as [[create]] caller'); -} - -//CHECK#2 -if (obj.p1!== 1) { - $ERROR('#2: Function.prototype.apply can\'t be used as [[create]] caller'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A9.js deleted file mode 100644 index e5ce9fb89..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.3_Function.prototype.apply/S15.3.4.3_A9.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.3_A9; -* @section: 15.3.4.3; -* @assertion: The Function.prototype.apply.length property has the attribute DontDelete; -* @description: Checking if deleting the Function.prototype.apply.length property fails; -*/ - -//CHECK#0 -if (!(Function.prototype.apply.hasOwnProperty('length'))) { - $FAIL('#0: the Function.prototype.apply has length property'); -} - -//CHECK#1 -if (delete Function.prototype.apply.length) { - $ERROR('#1: The Function.prototype.apply.length property has the attributes DontDelete'); -} - -//CHECK#2 -if (!(Function.prototype.apply.hasOwnProperty('length'))) { - $FAIL('#2: The Function.prototype.apply.length property has the attributes DontDelete'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A10.js deleted file mode 100644 index 09ed44b80..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A10.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.4_A10; -* @section: 15.3.4.4; -* @assertion: The Function.prototype.call.length property has the attribute ReadOnly; -* @description: Checking if varying the Function.prototype.call.length property fails; -*/ - -//CHECK#1 -if (!(Function.prototype.call.hasOwnProperty('length'))) { - $FAIL('#1: the Function.prototype.call has length property.'); -} - -obj = Function.prototype.call.length; - -Function.prototype.call.length = function(){return "shifted";}; - -//CHECK#2 -if (Function.prototype.call.length !== obj) { - $ERROR('#2: the Function.prototype.call length property has the attributes ReadOnly.'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A11.js deleted file mode 100644 index bcc981fe8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A11.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.4_A11; -* @section: 15.3.4.4; -* @assertion: The Function.prototype.call.length property has the attribute DontEnum; -* @description: Checking if enumerating the Function.prototype.call.length property fails; -*/ - -//CHECK#0 -if (!(Function.prototype.call.hasOwnProperty('length'))) { - $FAIL('#0: the Function.prototype.call has length property.'); -} - - -// CHECK#1 -if (Function.prototype.call.propertyIsEnumerable('length')) { - $ERROR('#1: the Function.prototype.call.length property has the attributes DontEnum'); -} - -// CHECK#2 -for (p in Function.prototype.call){ - if (p==="length") - $ERROR('#2: the Function.prototype.call.length property has the attributes DontEnum'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A12.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A12.js deleted file mode 100644 index 422eaf52a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A12.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.4_A12; -* @section: 15.3.4.4, 13.2; -* @assertion: Function.prototype.call has not prototype property; -* @description: Checking if obtaining the prototype property of Function.prototype.call fails; -*/ - -//CHECK#1 -if (Function.prototype.call.prototype !== undefined) { - $ERROR('#1: Function.prototype.call has not prototype property'+Function.prototype.call.prototype); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A1_T1.js deleted file mode 100644 index 4b4cd702e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A1_T1.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.4_A1_T1; -* @section: 15.3.4.4; -* @assertion: The call method performs a function call using the [[Call]] property of the object. If the object does not have a [[Call]] property, a TypeError exception is thrown; -* @description: Call "call" method of the object that does not have a [[Call]] property. -* Prototype of the object is Function(); -*/ - -proto=Function(); - -function FACTORY(){}; - -FACTORY.prototype=proto; - -obj = new FACTORY; - -//CHECK#1 -if (typeof obj.call !== "function") { - $ERROR('#1: call method accessed'); -} - -//CHECK#2 -try { - obj.call(); - $FAIL('#2: If the object does not have a [[Call]] property, a TypeError exception is thrown'); -} catch (e) { - if (!(e instanceof TypeError)) { - $ERROR('#2.1: If the object does not have a [[Call]] property, a TypeError exception is thrown'); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A1_T2.js deleted file mode 100644 index 00e413ebf..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A1_T2.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.4_A1_T2; -* @section: 15.3.4.4; -* @assertion: The call method performs a function call using the [[Call]] property of the object. If the object does not have a [[Call]] property, a TypeError exception is thrown; -* @description: Calling "call" method of the object that does not have a [[Call]] property. -* Prototype of the object is Function.prototype; -*/ - -function FACTORY(){}; - -FACTORY.prototype=Function.prototype; - -obj = new FACTORY; - -//CHECK#1 -if (typeof obj.call !== "function") { - $ERROR('#1: call method accessed'); -} - -//CHECK#2 -try { - obj.call(); - $FAIL('#2: If the object does not have a [[Call]] property, a TypeError exception is thrown'); -} catch (e) { - if (!(e instanceof TypeError)) { - $ERROR('#2.1: If the object does not have a [[Call]] property, a TypeError exception is thrown'); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A2_T1.js deleted file mode 100644 index 2c81d7ad8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A2_T1.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.4_A2_T1; -* @section: 15.3.4.4; -* @assertion: The length property of the call method is 1; -* @description: Checking Function.prototype.call.length; -*/ - -//CHECK#1 -if (typeof Function.prototype.call !== "function") { - $ERROR('#1: call method defined'); -} - -//CHECK#2 -if (typeof Function.prototype.call.length === "undefined") { - $ERROR('#2: length property of call method defined'); -} - -//CHECK#3 -if (Function.prototype.call.length !== 1) { - $ERROR('#3: The length property of the call method is 1'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A2_T2.js deleted file mode 100644 index b41752aa7..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A2_T2.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.4_A2_T2; -* @section: 15.3.4.4; -* @assertion: The length property of the call method is 1; -* @description: Checking f.call.length, where f is new Function; -*/ - -f=new Function; - -//CHECK#1 -if (typeof f.call !== "function") { - $ERROR('#1: call method accessed'); -} - -//CHECK#2 -if (typeof f.call.length === "undefined") { - $ERROR('#2: length property of call method defined'); -} - -//CHECK#3 -if (f.call.length !== 1) { - $ERROR('#3: The length property of the call method is 1'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A3_T1.js deleted file mode 100644 index 07f3f2410..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A3_T1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.4_A3_T1; -* @section: 15.3.4.4; -* @assertion: If thisArg is null or undefined, the called function is passed the global object as the this value; -* @description: Not any arguments at call function; -*/ - -Function("this.field=\"strawberry\"").call(); - -//CHECK#1 -if (this["field"] !== "strawberry") { - $ERROR('#1: If thisArg is null or undefined, the called function is passed the global object as the this value'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A3_T10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A3_T10.js deleted file mode 100644 index a6edd7b43..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A3_T10.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.4_A3_T10; -* @section: 15.3.4.4; -* @assertion: If thisArg is null or undefined, the called function is passed the global object as the this value; -* @description: Checking by using eval, no any arguments at call function; -*/ - -eval(" (function(){this.feat=1}).call()"); - -//CHECK#1 -if (this["feat"] !== 1) { - $ERROR('#1: If thisArg is null or undefined, the called function is passed the global object as the this value'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A3_T2.js deleted file mode 100644 index f43fd0231..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A3_T2.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.4_A3_T2; -* @section: 15.3.4.4; -* @assertion: If thisArg is null or undefined, the called function is passed the global object as the this value; -* @description: Argument at call function is null; -*/ - -Function("this.field=\"green\"").call(null); - -//CHECK#1 -if (this["field"] !== "green") { - $ERROR('#1: If thisArg is null or undefined, the called function is passed the global object as the this value'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A3_T3.js deleted file mode 100644 index 1b9d2354e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A3_T3.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.4_A3_T3; -* @section: 15.3.4.4; -* @assertion: If thisArg is null or undefined, the called function is passed the global object as the this value; -* @description: Argument at call function is void 0; -*/ - -Function("this.field=\"battle\"").call(void 0); - -//CHECK#1 -if (this["field"] !== "battle") { - $ERROR('#1: If thisArg is null or undefined, the called function is passed the global object as the this value'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A3_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A3_T4.js deleted file mode 100644 index 61252cd96..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A3_T4.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.4_A3_T4; -* @section: 15.3.4.4; -* @assertion: If thisArg is null or undefined, the called function is passed the global object as the this value; -* @description: Argument at call function is undefined; -*/ - -Function("this.field=\"oil\"").call(undefined); - -//CHECK#1 -if (this["field"] !== "oil") { - $ERROR('#1: If thisArg is null or undefined, the called function is passed the global object as the this value'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A3_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A3_T5.js deleted file mode 100644 index c06913a91..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A3_T5.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.4_A3_T5; -* @section: 15.3.4.4; -* @assertion: If thisArg is null or undefined, the called function is passed the global object as the this value; -* @description: No any arguments at call function and it called inside function declaration; -*/ - -function FACTORY(){ - Function("this.feat=\"in da haus\"").call(); -}; - -obj = new FACTORY; - -//CHECK#1 -if (this["feat"] !== "in da haus") { - $ERROR('#1: If thisArg is null or undefined, the called function is passed the global object as the this value'); -} - -//CHECK#2 -if (typeof obj.feat !== "undefined") { - $ERROR('#1: If thisArg is null or undefined, the called function is passed the global object as the this value'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A3_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A3_T6.js deleted file mode 100644 index 431710b1c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A3_T6.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.4_A3_T6; -* @section: 15.3.4.4; -* @assertion: If thisArg is null or undefined, the called function is passed the global object as the this value; -* @description: Argument at call function is null and it called inside function declaration; -*/ - -function FACTORY(){ - (function(){this.feat="kamon beyba"}).call(null); -}; - -obj = new FACTORY; - -//CHECK#1 -if (this["feat"] !== "kamon beyba") { - $ERROR('#1: If thisArg is null or undefined, the called function is passed the global object as the this value'); -} - -//CHECK#2 -if (typeof obj.feat !== "undefined") { - $ERROR('#1: If thisArg is null or undefined, the called function is passed the global object as the this value'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A3_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A3_T7.js deleted file mode 100644 index 839a47849..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A3_T7.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.4_A3_T7; -* @section: 15.3.4.4; -* @assertion: If thisArg is null or undefined, the called function is passed the global object as the this value; -* @description: Argument at call function is void 0 and it called inside function declaration; -*/ - -(function FACTORY(){ - Function("this.feat=\"in da haus\"").call(void 0); -})(); - - -//CHECK#1 -if (this["feat"] !== "in da haus") { - $ERROR('#1: If thisArg is null or undefined, the called function is passed the global object as the this value'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A3_T8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A3_T8.js deleted file mode 100644 index e4ed5976e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A3_T8.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.4_A3_T8; -* @section: 15.3.4.4; -* @assertion: If thisArg is null or undefined, the called function is passed the global object as the this value; -* @description: Argument at call function is undefined and it called inside function declaration; -*/ - -(function FACTORY(){ - (function(){this.feat="kamon beyba"}).call(undefined); -})(); - - -//CHECK#1 -if (this["feat"] !== "kamon beyba") { - $ERROR('#1: If thisArg is null or undefined, the called function is passed the global object as the this value'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A3_T9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A3_T9.js deleted file mode 100644 index e1c681667..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A3_T9.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.4_A3_T9; -* @section: 15.3.4.4; -* @assertion: If thisArg is null or undefined, the called function is passed the global object as the this value; -* @description: Checking by using eval, argument at call function is void 0; -*/ - -eval( " Function(\"this.feat=1\").call(void 0) " ); - - -//CHECK#1 -if (this["feat"] !== 1) { - $ERROR('#1: If thisArg is null or undefined, the called function is passed the global object as the this value'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A5_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A5_T1.js deleted file mode 100644 index 9a8ad2b08..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A5_T1.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.4_A5_T1; -* @section: 15.3.4.4; -* @assertion: If thisArg is not null(defined) the called function is passed ToObject(thisArg) as the this value; -* @description: thisArg is number; -*/ - -obj=1; - -retobj = Function("this.touched= true; return this;").call(obj); - -//CHECK#1 -if (typeof obj.touched !== "undefined") { - $ERROR('#1: If thisArg is not null(defined) the called function is passed ToObject(thisArg) as the this value'); -} - -//CHECK#2 -if (!(retobj["touched"])) { - $ERROR('#2: If thisArg is not null(defined) the called function is passed ToObject(thisArg) as the this value'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A5_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A5_T2.js deleted file mode 100644 index 22654c7a1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A5_T2.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.4_A5_T2; -* @section: 15.3.4.4; -* @assertion: If thisArg is not null(defined) the called function is passed ToObject(thisArg) as the this value; -* @description: thisArg is boolean true; -*/ - -obj=true; - -retobj = new Function("this.touched= true; return this;").call(obj); - -//CHECK#1 -if (typeof obj.touched !== "undefined") { - $ERROR('#1: If thisArg is not null(defined) the called function is passed ToObject(thisArg) as the this value'); -} - -//CHECK#2 -if (!(retobj["touched"])) { - $ERROR('#2: If thisArg is not null(defined) the called function is passed ToObject(thisArg) as the this value'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A5_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A5_T3.js deleted file mode 100644 index 8085c9ff0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A5_T3.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.4_A5_T3; -* @section: 15.3.4.4; -* @assertion: If thisArg is not null(defined) the called function is passed ToObject(thisArg) as the this value; -* @description: thisArg is string; -*/ - -obj="soap"; - -retobj = ( function(){this.touched= true; return this;} ).call(obj); - -//CHECK#1 -if (typeof obj.touched !== "undefined") { - $ERROR('#1: If thisArg is not null(defined) the called function is passed ToObject(thisArg) as the this value'); -} - -//CHECK#2 -if (!(retobj["touched"])) { - $ERROR('#2: If thisArg is not null(defined) the called function is passed ToObject(thisArg) as the this value'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A5_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A5_T4.js deleted file mode 100644 index f7af75219..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A5_T4.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.4_A5_T4; -* @section: 15.3.4.4; -* @assertion: If thisArg is not null(defined) the called function is passed ToObject(thisArg) as the this value; -* @description: thisArg is function variable that return this; -*/ - -f = function(){this.touched= true; return this;}; - -retobj = f.call(obj); - -//CHECK#1 -if (typeof obj !== "undefined") { - $ERROR('#1: If thisArg is not null(defined) the called function is passed ToObject(thisArg) as the this value'); -} - -//CHECK#2 -if (!(retobj["touched"])) { - $ERROR('#2: If thisArg is not null(defined) the called function is passed ToObject(thisArg) as the this value'); -} - -var obj; diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A5_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A5_T5.js deleted file mode 100644 index 501f8dbdc..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A5_T5.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.4_A5_T5; -* @section: 15.3.4.4; -* @assertion: If thisArg is not null(defined) the called function is passed ToObject(thisArg) as the this value; -* @description: thisArg is function variable; -*/ - -f = function(){this.touched= true;}; - -obj={}; - -f.call(obj); - -//CHECK#1 -if (!(obj.touched)) { - $ERROR('#1: If thisArg is not null(defined) the called function is passed ToObject(thisArg) as the this value'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A5_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A5_T6.js deleted file mode 100644 index 7e072a252..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A5_T6.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.4_A5_T6; -* @section: 15.3.4.4; -* @assertion: If thisArg is not null(defined) the called function is passed ToObject(thisArg) as the this value; -* @description: thisArg is new String(); -*/ - -obj=new String("soap"); - -( function(){this.touched= true;}).call(obj); - -//CHECK#1 -if (!(obj.touched)) { - $ERROR('#1: If thisArg is not null(defined) the called function is passed ToObject(thisArg) as the this value'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A5_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A5_T7.js deleted file mode 100644 index 8fe04f766..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A5_T7.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.4_A5_T7; -* @section: 15.3.4.4; -* @assertion: If thisArg is not null(defined) the called function is passed ToObject(thisArg) as the this value; -* @description: thisArg is new Number(); -*/ - -obj=new Number(1); - -Function("this.touched= true;").call(obj); - -//CHECK#1 -if (!(obj.touched)) { - $ERROR('#1: If thisArg is not null(defined) the called function is passed ToObject(thisArg) as the this value'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A5_T8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A5_T8.js deleted file mode 100644 index 1afc28d28..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A5_T8.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.4_A5_T8; -* @section: 15.3.4.4; -* @assertion: If thisArg is not null(defined) the called function is passed ToObject(thisArg) as the this value; -* @description: thisArg is Function(); -*/ - -obj=Function(); - -new Function("this.touched= true; return this;").call(obj); - -//CHECK#1 -if (!(obj.touched)) { - $ERROR('#1: If thisArg is not null(defined) the called function is passed ToObject(thisArg) as the this value'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A6_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A6_T1.js deleted file mode 100644 index 6f0827965..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A6_T1.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.4_A6_T1; -* @section: 15.3.4.4; -* @assertion: The call method takes one or more arguments, thisArg and (optionally) arg1, arg2 etc, and performs -* a function call using the [[Call]] property of the object; -* @description: Argunemts of call function is (null,[1]); -*/ - -Function("a1,a2,a3","this.shifted=a1;").call(null,[1]); - -//CHECK#1 -if (this["shifted"].constructor !== Array) { - $ERROR('#1: The call method takes one or more arguments, thisArg and (optionally) arg1, arg2 etc, and performs a function call using the [[Call]] property of the object'); -} - -//CHECK#2 -if (this["shifted"].length !== 1) { - $ERROR('#2: The call method takes one or more arguments, thisArg and (optionally) arg1, arg2 etc, and performs a function call using the [[Call]] property of the object'); -} - -//CHECK#3 -if (this["shifted"][0] !== 1) { - $ERROR('#3: The call method takes one or more arguments, thisArg and (optionally) arg1, arg2 etc, and performs a function call using the [[Call]] property of the object'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A6_T10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A6_T10.js deleted file mode 100644 index bbeb26ee7..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A6_T10.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.4_A6_T10; -* @section: 15.3.4.4; -* @assertion: The call method takes one or more arguments, thisArg and (optionally) arg1, arg2 etc, and performs -* a function call using the [[Call]] property of the object; -* @description: Argunemts of call function is (empty object, "", arguments,2), inside function call without declaration used; -*/ - -var obj={}; - -(function (){ - Function("a1,a2,a3","this.shifted=a1.length+a2+a3;").call(obj,arguments,"","2"); -})("",4,2,"a"); - -//CHECK#1 -if (obj["shifted"] !== "42") { - $ERROR('#1: The call method takes one or more arguments, thisArg and (optionally) arg1, arg2 etc, and performs a function call using the [[Call]] property of the object'); -} - -//CHECK#2 -if (typeof this["shifted"] !== "undefined") { - $ERROR('#2: The call method takes one or more arguments, thisArg and (optionally) arg1, arg2 etc, and performs a function call using the [[Call]] property of the object'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A6_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A6_T2.js deleted file mode 100644 index caa27dab4..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A6_T2.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.4_A6_T2; -* @section: 15.3.4.4; -* @assertion: The call method takes one or more arguments, thisArg and (optionally) arg1, arg2 etc, and performs -* a function call using the [[Call]] property of the object; -* @description: Argunemts of call function is (null,[3,2,1]); -*/ - -new Function("a1,a2","a3","this.shifted=a1;").call(null,[3,2,1]); - -//CHECK#1 -if (this["shifted"].length !== 3) { - $ERROR('#1: The call method takes one or more arguments, thisArg and (optionally) arg1, arg2 etc, and performs a function call using the [[Call]] property of the object'); -} - -//CHECK#2 -if ((this["shifted"][0] !== 3)||(this["shifted"][1] !== 2)||(this["shifted"][2] !== 1)) { - $ERROR('#2: The call method takes one or more arguments, thisArg and (optionally) arg1, arg2 etc, and performs a function call using the [[Call]] property of the object'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A6_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A6_T3.js deleted file mode 100644 index 1e3b2734f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A6_T3.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.4_A6_T3; -* @section: 15.3.4.4; -* @assertion: The call method takes one or more arguments, thisArg and (optionally) arg1, arg2 etc, and performs -* a function call using the [[Call]] property of the object; -* @description: Argunemts of call function is (empty object, new Array("nine","inch","nails")); -*/ - -i=0; - -p={toString:function(){return "a"+(++i);}}; - -obj={}; - -Function(p,"a2,a3","this.shifted=a1;").call(obj, new Array("nine","inch","nails")); - -//CHECK#1 -if (obj["shifted"].length !== 3) { - $ERROR('#1: The call method takes one or more arguments, thisArg and (optionally) arg1, arg2 etc, and performs a function call using the [[Call]] property of the object'); -} - -//CHECK#2 -if ((obj["shifted"][0] !== "nine")||(obj["shifted"][1] !== "inch")||(obj["shifted"][2] !== "nails")) { - $ERROR('#2: The call method takes one or more arguments, thisArg and (optionally) arg1, arg2 etc, and performs a function call using the [[Call]] property of the object'); -} - -//CHECK#3 -if (typeof this["shifted"] !== "undefined") { - $ERROR('#3: The call method takes one or more arguments, thisArg and (optionally) arg1, arg2 etc, and performs a function call using the [[Call]] property of the object'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A6_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A6_T4.js deleted file mode 100644 index 726769c85..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A6_T4.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.4_A6_T4; -* @section: 15.3.4.4; -* @assertion: The call method takes one or more arguments, thisArg and (optionally) arg1, arg2 etc, and performs -* a function call using the [[Call]] property of the object; -* @description: Argunemts of call function is (empty object, ( function(){return arguments;})("a","b","c","d"),"",2); -*/ - -i=0; - -p={toString:function(){return "a"+(++i);}}; - -obj={}; - -new Function(p,p,p, "this.shifted=a3+a2+a1.length;").call( obj,( function(){return arguments;})("a","b","c","d"),"",2 ); - -//CHECK#1 -if (obj["shifted"] !== "24") { - $ERROR('#1: The call method takes one or more arguments, thisArg and (optionally) arg1, arg2 etc, and performs a function call using the [[Call]] property of the object'); -} - -//CHECK#2 -if (typeof this["shifted"] !== "undefined") { - $ERROR('#2: The call method takes one or more arguments, thisArg and (optionally) arg1, arg2 etc, and performs a function call using the [[Call]] property of the object'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A6_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A6_T5.js deleted file mode 100644 index 91adc6862..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A6_T5.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.4_A6_T5; -* @section: 15.3.4.4; -* @assertion: The call method takes one or more arguments, thisArg and (optionally) arg1, arg2 etc, and performs -* a function call using the [[Call]] property of the object; -* @description: Argunemts of call function is (null, arguments,"",2), inside function declaration used; -*/ - -function FACTORY(){ - Function("a1,a2,a3","this.shifted=a1.length+a2+a3;").call(null,arguments,"",2); -} - -obj=new FACTORY("",1,2,"A"); - -//CHECK#1 -if (this["shifted"] !== "42") { - $ERROR('#1: The call method takes one or more arguments, thisArg and (optionally) arg1, arg2 etc, and performs a function call using the [[Call]] property of the object'); -} - -//CHECK#2 -if (typeof obj.shifted !== "undefined") { - $ERROR('#2: The call method takes one or more arguments, thisArg and (optionally) arg1, arg2 etc, and performs a function call using the [[Call]] property of the object'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A6_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A6_T6.js deleted file mode 100644 index eadcb74af..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A6_T6.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.4_A6_T6; -* @section: 15.3.4.4; -* @assertion: The call method takes one or more arguments, thisArg and (optionally) arg1, arg2 etc, and performs -* a function call using the [[Call]] property of the object; -* @description: Argunemts of call function is (this, arguments,"",2), inside function declaration used; -*/ - -function FACTORY(){ - Function("a1,a2,a3","this.shifted=a1.length+a2+a3;").call(this,arguments,"",2); -} - -obj=new FACTORY("",4,2,"A"); - -//CHECK#1 -if (obj["shifted"] !== "42") { - $ERROR('#1: The call method takes one or more arguments, thisArg and (optionally) arg1, arg2 etc, and performs a function call using the [[Call]] property of the object'); -} - -//CHECK#2 -if (typeof this["shifted"] !== "undefined") { - $ERROR('#2: The call method takes one or more arguments, thisArg and (optionally) arg1, arg2 etc, and performs a function call using the [[Call]] property of the object'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A6_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A6_T7.js deleted file mode 100644 index ce45c6b75..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A6_T7.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.4_A6_T7; -* @section: 15.3.4.4; -* @assertion: The call method takes one or more arguments, thisArg and (optionally) arg1, arg2 etc, and performs -* a function call using the [[Call]] property of the object; -* @description: Argunemts of call function is (null, arguments,"",2), inside function call without declaration used; -*/ - -(function (){ - Function("a1,a2,a3","this.shifted=a1.length+a2+a3;").call(null,arguments,"",2); -})("",1,2,true); - -//CHECK#1 -if (this["shifted"] !== "42") { - $ERROR('#1: The call method takes one or more arguments, thisArg and (optionally) arg1, arg2 etc, and performs a function call using the [[Call]] property of the object'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A6_T8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A6_T8.js deleted file mode 100644 index 2f6a5a782..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A6_T8.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.4_A6_T8; -* @section: 15.3.4.4; -* @assertion: The call method takes one or more arguments, thisArg and (optionally) arg1, arg2 etc, and performs -* a function call using the [[Call]] property of the object; -* @description: Argunemts of call function is (this, arguments,"",2), inside function call without declaration used; -*/ - -(function (){ - Function("a1,a2,a3","this.shifted=a1.length+a2+a3;").call(this,arguments,"",2); -})("",4,2,null); - -//CHECK#2 -if (this["shifted"] !== "42") { - $ERROR('#2: The call method takes one or more arguments, thisArg and (optionally) arg1, arg2 etc, and performs a function call using the [[Call]] property of the object'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A6_T9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A6_T9.js deleted file mode 100644 index 79ad99a1f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A6_T9.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.4_A6_T9; -* @section: 15.3.4.4; -* @assertion: The call method takes one or more arguments, thisArg and (optionally) arg1, arg2 etc, and performs -* a function call using the [[Call]] property of the object; -* @description: Argunemts of call function is (empty object, "", arguments,2), inside function declaration used; -*/ - -function FACTORY(){ - var obj = {}; - Function("a1,a2,a3","this.shifted=a1+a2.length+a3;").call(obj,"",arguments,2); - return obj; -} - -obj=new FACTORY("",1,2,void 0); - -//CHECK#1 -if (typeof this["shifted"] !== "undefined") { - $ERROR('#1: If argArray is either an array or an arguments object, the function is passed the...'); -} - -//CHECK#2 -if (obj.shifted !== "42") { - $ERROR('#2: If argArray is either an array or an arguments object, the function is passed the...'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A7_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A7_T1.js deleted file mode 100644 index 33712fb83..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A7_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.4_A7_T1; -* @section: 15.3.4.4; -* @assertion: Function.prototype.call can't be used as [[create]] caller; -* @description: Checking if creating "new Function.prototype.call" fails; -*/ - -try { - obj = new Function.prototype.call; - $ERROR('#1: Function.prototype.call can\'t be used as [[create]] caller'); -} catch (e) { - if (!(e instanceof TypeError)) { - $ERROR('#1.1: Function.prototype.call can\'t be used as [[create]] caller'); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A7_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A7_T2.js deleted file mode 100644 index 537178234..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A7_T2.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.4_A7_T2; -* @section: 15.3.4.4; -* @assertion: Function.prototype.call can't be used as [[create]] caller; -* @description: Checking if creating "new Function.prototype.call()" fails; -*/ - -try { - FACTORY = Function.prototype.call; - obj = new FACTORY(); - $ERROR('#1: Function.prototype.call can\'t be used as [[create]] caller'); -} catch (e) { - if (!(e instanceof TypeError)) { - $ERROR('#1.1: Function.prototype.call can\'t be used as [[create]] caller'); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A7_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A7_T3.js deleted file mode 100644 index 83380b9cf..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A7_T3.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.4_A7_T3; -* @section: 15.3.4.4; -* @assertion: Function.prototype.call can't be used as [[create]] caller; -* @description: Checking if creating "new Function.call" fails; -*/ - -try { - obj = new Function.call; - $ERROR('#1: Function.prototype.call can\'t be used as [[create]] caller'); -} catch (e) { - if (!(e instanceof TypeError)) { - $ERROR('#1.1: Function.prototype.call can\'t be used as [[create]] caller'); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A7_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A7_T4.js deleted file mode 100644 index 8bd543f9b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A7_T4.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.4_A7_T4; -* @section: 15.3.4.4; -* @assertion: Function.prototype.call can't be used as [[create]] caller; -* @description: Checking if creating "new (Function("this.p1=1").call)" fails; -*/ - -try { - obj = new (Function("this.p1=1").call); - $ERROR('#1: Function.prototype.call can\'t be used as [[create]] caller'); -} catch (e) { - if (!(e instanceof TypeError)) { - $ERROR('#1.1: Function.prototype.call can\'t be used as [[create]] caller'); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A7_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A7_T5.js deleted file mode 100644 index afbed37e8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A7_T5.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.4_A7_T5; -* @section: 15.3.4.4; -* @assertion: Function.prototype.call can't be used as [[create]] caller; -* @description: Checking if creating "new Function("this.p1=1").call" fails; -*/ - -try { - FACTORY = Function("this.p1=1").call; - obj = new FACTORY(); - $ERROR('#1: Function.prototype.call can\'t be used as [[create]] caller'); -} catch (e) { - if (!(e instanceof TypeError)) { - $ERROR('#1.1: Function.prototype.call can\'t be used as [[create]] caller'); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A7_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A7_T6.js deleted file mode 100644 index 3d0d46bf1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A7_T6.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.4_A7_T6; -* @section: 15.3.4.4; -* @assertion: Function.prototype.call can't be used as [[create]] caller; -* @description: Checking if creating "new (Function("function f(){this.p1=1;};return f").call())" fails; -*/ - -//CHECK#1 -try { - obj = new (Function("function f(){this.p1=1;};return f").call()); -} catch (e) { - $ERROR('#1: Function.prototype.call can\'t be used as [[create]] caller'); -} - -//CHECK#2 -if (obj.p1!== 1) { - $ERROR('#2: Function.prototype.call can\'t be used as [[create]] caller'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A9.js deleted file mode 100644 index 361788ae6..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/15.3.4.4_Function.prototype.call/S15.3.4.4_A9.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.4_A9; -* @section: 15.3.4.4; -* @assertion: The Function.prototype.call.length property has the attribute DontDelete; -* @description: Checking if deleting the Function.prototype.call.length property fails; -*/ - -//CHECK#0 -if (!(Function.prototype.call.hasOwnProperty('length'))) { - $FAIL('#0: the Function.prototype.call has length property'); -} - -//CHECK#1 -if (delete Function.prototype.call.length) { - $ERROR('#1: The Function.prototype.call.length property has the attributes DontDelete'); -} - -//CHECK#2 -if (!(Function.prototype.call.hasOwnProperty('length'))) { - $FAIL('#2: The Function.prototype.call.length property has the attributes DontDelete'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/S15.3.4.1_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/S15.3.4.1_A1_T1.js deleted file mode 100644 index 48a39100e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/S15.3.4.1_A1_T1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.1_A1_T1; -* @section: 15.3.4.1; -* @assertion: The initial value of Function.prototype.constructor is the built-in Function constructor; -* @description: Checking Function.prototype.constructor; -*/ - -//CHECK#1 -if (Function.prototype.constructor !== Function) { - $ERROR('#1: The initial value of Function.prototype.constructor is the built-in Function constructor'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/S15.3.4.1_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/S15.3.4.1_A1_T2.js deleted file mode 100644 index 81a34487b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/S15.3.4.1_A1_T2.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4.1_A1_T2; -* @section: 15.3.4.1; -* @assertion: The initial value of Function.prototype.constructor is the built-in Function constructor; -* @description: Create new Function.prototype.constructor object; -*/ - -constr = Function.prototype.constructor; - -f = new constr; - -// CHECK#0 -if (f === undefined) { - $ERROR('#0: new Function() return the newly created function object.'); -} - -// CHECK#1 -if (f.constructor !== Function) { - $ERROR('#1: new Function() create a new function object'); -} - -// CHECK#2 -if (!(Function.prototype.isPrototypeOf(f))) { - $ERROR('#2: when new Function() calls the [[Prototype]] property of the newly constructed object is set to the Function prototype object.'); -} - -// CHECK#3 -to_string_result = '[object '+ 'Function' +']'; - -delete Function.prototype.toString; - -if (f.toString() !== to_string_result) { - $ERROR('#3: when new Function() calls the [[Class]] property of the newly constructed object is set to "Function"'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/S15.3.4_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/S15.3.4_A1.js deleted file mode 100644 index 99485b95a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/S15.3.4_A1.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4_A1; -* @section: 15.3.4; -* @assertion: The Function prototype object is itself a Function object (its [[Class]] is "Function"); -* @description: first we delete Function.prototype.toString cause it overrides Object prototype toString. -* Object.prototype.toString returns [object+[[class]]+]; -*/ - -delete Function.prototype.toString; - -//CHECK#1 -if (Function.prototype.toString() !== "[object "+"Function"+"]") { - $ERROR('#1: The Function prototype object is itself a Function object (its [[Class]] is "Function")'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/S15.3.4_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/S15.3.4_A2_T1.js deleted file mode 100644 index f86f88460..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/S15.3.4_A2_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4_A2_T1; -* @section: 15.3.4; -* @assertion: The Function prototype object is itself a Function object that, when invoked, accepts any arguments and returns undefined; -* @description: Call Function.prototype(); -*/ - -//CHECK#1 -try { - if (Function.prototype() !== undefined) { - $ERROR('#1: The Function prototype object is itself a Function object that, when invoked, accepts any arguments and returns undefined'); - } -} catch (e) { - $ERROR('#1.1: The Function prototype object is itself a Function object that, when invoked, accepts any arguments and returns undefined: '+e); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/S15.3.4_A2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/S15.3.4_A2_T2.js deleted file mode 100644 index 5229e5e7c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/S15.3.4_A2_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4_A2_T2; -* @section: 15.3.4; -* @assertion: The Function prototype object is itself a Function object that, when invoked, accepts any arguments and returns undefined; -* @description: Call Function.prototype(null,void 0); -*/ - -//CHECK#1 -try { - if (Function.prototype(null,void 0) !== undefined) { - $ERROR('#1: The Function prototype object is itself a Function object that, when invoked, accepts any arguments and returns undefined'); - } -} catch (e) { - $ERROR('#1.1: The Function prototype object is itself a Function object that, when invoked, accepts any arguments and returns undefined: '+e); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/S15.3.4_A2_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/S15.3.4_A2_T3.js deleted file mode 100644 index 255d2dc23..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/S15.3.4_A2_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4_A2_T3; -* @section: 15.3.4; -* @assertion: The Function prototype object is itself a Function object that, when invoked, accepts any arguments and returns undefined; -* @description: Call Function.prototype(x), where x is undefined variable; -*/ - -//CHECK#1 -try { - if (Function.prototype(x) !== undefined) { - var x; - $ERROR('#1: The Function prototype object is itself a Function object that, when invoked, accepts any arguments and returns undefined'); - } -} catch (e) { - $ERROR('#1.1: The Function prototype object is itself a Function object that, when invoked, accepts any arguments and returns undefined: '+e); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/S15.3.4_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/S15.3.4_A3_T1.js deleted file mode 100644 index dfe8f8000..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/S15.3.4_A3_T1.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4_A3_T1; -* @section: 15.3.4, 15.3.2.1; -* @assertion: The value of the internal [[Prototype]] property of the Function prototype object is the Object prototype object (15.3.2.1); -* @description: Checking prototype of Function.prototype; -*/ - -//CHECK#1 -if (!(Object.prototype.isPrototypeOf(Function.prototype))) { - $ERROR('#1: The value of the internal [[Prototype]] property of the Function prototype object is the Object prototype object (15.3.2.1)'); -} - -delete Function.prototype.toString; - -//CHECK#2 -if (Function.prototype.toString() !== "[object "+"Function"+"]") { - $ERROR('#2: The value of the internal [[Prototype]] property of the Function prototype object is the Object prototype object (15.3.2.1)'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/S15.3.4_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/S15.3.4_A3_T2.js deleted file mode 100644 index 25f8380b1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/S15.3.4_A3_T2.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4_A3_T2; -* @section: 15.3.4, 15.3.2.1; -* @assertion: The value of the internal [[Prototype]] property of the Function prototype object is the Object prototype object (15.3.2.1); -* @description: Add new property to Object.prototype and check it at Function.prototype; -*/ - -Object.prototype.indicator = 1; - -//CHECK#1 -if (Function.prototype.indicator!==1) { - $ERROR('#1: The value of the internal [[Prototype]] property of the Function prototype object is the Object prototype object (15.3.2.1)'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/S15.3.4_A4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/S15.3.4_A4.js deleted file mode 100644 index 06bd162fc..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/S15.3.4_A4.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4_A4; -* @section: 15.3.4; -* @assertion: The Function prototype object does not have a valueOf property of its own. however, it inherits the valueOf property from the Object prototype Object; -* @description: Checking valueOf property at Function.prototype; -*/ - -//CHECK#1 -if (Function.prototype.hasOwnProperty("valueOf") !== false) { - $ERROR('#1: The Function prototype object does not have a valueOf property of its own'); -} - -//CHECK#2 -if (typeof Function.prototype.valueOf === "undefined") { - $ERROR('#2: however, it inherits the valueOf property from the Object prototype Object'); -} - -//CHECK#3 -if (Function.prototype.valueOf !== Object.prototype.valueOf) { - $ERROR('#3: however, it inherits the valueOf property from the Object prototype Object'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/S15.3.4_A5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/S15.3.4_A5.js deleted file mode 100644 index 9233b1a0c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.4_Properties_of_the_Function_Prototype_Object/S15.3.4_A5.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.4_A5; -* @section: 15.3.4; -* @assertion: The Function prototype object is itself a Function object without [[create]] property; -* @description: Checking if creating "new Function.prototype object" fails; -*/ - -//CHECK# -try { - obj = new Function.prototype; - $FAIL('#1: The Function prototype object is itself a Function object without [[create]] property: '+e); -} catch (e) { - $PRINT("#1.1: The Function prototype object is itself a Function object without [[create]] property "+e); - -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.1_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.1_A1_T1.js deleted file mode 100644 index 1b02ea9a5..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.1_A1_T1.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.5.1_A1_T1; -* @section: 15.3.5.1; -* @assertion: The value of the length property is usually an integer that indicates the 'typical' number of arguments expected by the function; -* @description: Checking length property of Function("arg1,arg2,arg3", null); -*/ - -f = new Function("arg1,arg2,arg3", null); - -//CHECK#1 -if (!(f.hasOwnProperty('length'))) { - $FAIL('#1: the function has length property.'); -} - -//CHECK#2 -if (f.length !== 3) { - $ERROR('#2: The value of the length property is usually an integer that indicates the "typical" number of arguments expected by the function'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.1_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.1_A1_T2.js deleted file mode 100644 index 96fa90f62..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.1_A1_T2.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.5.1_A1_T2; -* @section: 15.3.5.1; -* @assertion: The value of the length property is usually an integer that indicates the 'typical' number of arguments expected by the function; -* @description: Checking length property of Function("arg1,arg2,arg3","arg4,arg5", null); -*/ - -f = Function("arg1,arg2,arg3","arg4,arg5", null); - -//CHECK#1 -if (!(f.hasOwnProperty('length'))) { - $FAIL('#1: the function has length property.'); -} - -//CHECK#2 -if (f.length !== 5) { - $ERROR('#2: The value of the length property is usually an integer that indicates the "typical" number of arguments expected by the function'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.1_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.1_A1_T3.js deleted file mode 100644 index aa74b24d8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.1_A1_T3.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.5.1_A1_T3; -* @section: 15.3.5.1; -* @assertion: The value of the length property is usually an integer that indicates the 'typical' number of arguments expected by the function; -* @description: Checking length property of Function("arg1,arg2,arg3","arg1,arg2","arg3", null); -*/ - -f = new Function("arg1,arg2,arg3","arg1,arg2","arg3", null); - -//CHECK#1 -if (!(f.hasOwnProperty('length'))) { - $FAIL('#1: the function has length property.'); -} - -//CHECK#2 -if (f.length !== 6) { - $ERROR('#2: The value of the length property is usually an integer that indicates the "typical" number of arguments expected by the function'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.1_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.1_A2_T1.js deleted file mode 100644 index 26985283a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.1_A2_T1.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.5.1_A2_T1; -* @section: 15.3.5.1; -* @assertion: the length property has the attributes { DontDelete }; -* @description: Checking if deleting the length property of Function("arg1,arg2,arg3", null) fails; -*/ - -f = new Function("arg1,arg2,arg3", null); - -//CHECK#1 -if (!(f.hasOwnProperty('length'))) { - $FAIL('#1: the function has length property.'); -} - -//CHECK#2 -if(delete f.length){ - $ERROR('#2: the function.length property has the attributes DontDelete.'); -} - -//CHECK#3 -if (!(f.hasOwnProperty('length'))) { - $ERROR('#3: the function.length property has the attributes DontDelete.'); -} - -//CHECK#4 -if (f.length !== 3) { - $ERROR('#4: the length property has the attributes { DontDelete }'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.1_A2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.1_A2_T2.js deleted file mode 100644 index 2520357bd..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.1_A2_T2.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.5.1_A2_T2; -* @section: 15.3.5.1; -* @assertion: the length property has the attributes { DontDelete }; -* @description: Checking if deleting the length property of Function("arg1,arg2,arg3","arg4,arg5", null) fails; -*/ - -f = Function("arg1,arg2,arg3","arg4,arg5", null); - -//CHECK#1 -if (!(f.hasOwnProperty('length'))) { - $FAIL('#1: the function has length property.'); -} - -delete f.length; - -//CHECK#2 -if (!(f.hasOwnProperty('length'))) { - $ERROR('#2: the function.length property has the attributes DontDelete.'); -} - -//CHECK#3 -if (f.length !== 5) { - $ERROR('#3: the length property has the attributes { DontDelete }'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.1_A2_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.1_A2_T3.js deleted file mode 100644 index e5f878318..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.1_A2_T3.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.5.1_A2_T3; -* @section: 15.3.5.1; -* @assertion: the length property has the attributes { DontDelete }; -* @description: Checking if deleting the length property of Function("arg1,arg2,arg3","arg1,arg2","arg3", null) fails; -*/ - -f = new Function("arg1,arg2,arg3","arg1,arg2","arg3", null); - -//CHECK#1 -if (!(f.hasOwnProperty('length'))) { - $FAIL('#1: the function has length property.'); -} - -delete f.length; - -//CHECK#2 -if (!(f.hasOwnProperty('length'))) { - $ERROR('#2: the function.length property has the attributes DontDelete.'); -} - -//CHECK#3 -if (f.length !== 6) { - $ERROR('#3: the length property has the attributes { DontDelete }'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.1_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.1_A3_T1.js deleted file mode 100644 index 0763b71f1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.1_A3_T1.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.5.1_A3_T1; -* @section: 15.3.5.1; -* @assertion: the length property has the attributes { ReadOnly }; -* @description: Checking if varying the length property of Function("arg1,arg2,arg3","arg4,arg5", null) fails; -*/ - -f = new Function("arg1,arg2,arg3","arg4,arg5", null); - -//CHECK#1 -if (!(f.hasOwnProperty('length'))) { - $FAIL('#1: the function has length property.'); -} - -length = f.length; - -f.length = function(){}; - -//CHECK#2 -if (f.length !== length) { - $ERROR('#2: the function.length property has the attributes ReadOnly'); -} - -//CHECK#3 -try { - f.length(); - $ERROR('#3: the function.length property has the attributes ReadOnly'); -} catch (e) { - ; -} - -//CHECK#4 -if (f.length !== 5) { - $ERROR('#4: the length property has the attributes { ReadOnly }'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.1_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.1_A3_T2.js deleted file mode 100644 index 76c90d8ee..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.1_A3_T2.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.5.1_A3_T2; -* @section: 15.3.5.1; -* @assertion: the length property has the attributes { ReadOnly }; -* @description: Checking if varying the length property of Function("arg1,arg2,arg3", null) fails; -*/ - -f = Function("arg1,arg2,arg3", null); - -//CHECK#1 -if (!(f.hasOwnProperty('length'))) { - $FAIL('#1: the function has length property.'); -} - -length = f.length; - -f.length = function(){}; - -//CHECK#2 -if (f.length !== length) { - $ERROR('#2: the function.length property has the attributes ReadOnly'); -} - -//CHECK#3 -try { - f.length(); - $ERROR('#3: the function.length property has the attributes ReadOnly'); -} catch (e) { - ; -} - -//CHECK#4 -if (f.length !== 3) { - $ERROR('#4: the length property has the attributes { ReadOnly }'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.1_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.1_A3_T3.js deleted file mode 100644 index 94ca3cf2a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.1_A3_T3.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.5.1_A3_T3; -* @section: 15.3.5.1; -* @assertion: the length property has the attributes { ReadOnly }; -* @description: Checking if varying the length property of Function("arg1,arg2,arg3","arg1,arg2","arg3", null) fails; -*/ - -f = new Function("arg1,arg2,arg3","arg1,arg2","arg3", null); - -//CHECK#1 -if (!(f.hasOwnProperty('length'))) { - $FAIL('#1: the function has length property.'); -} - -length = f.length; - -f.length = function(){}; - -//CHECK#2 -if (f.length !== length) { - $ERROR('#2: the function.length property has the attributes ReadOnly'); -} - -//CHECK#3 -try { - f.length(); - $ERROR('#3: the function.length property has the attributes ReadOnly'); -} catch (e) { - ; -} - -//CHECK#4 -if (f.length !== 6) { - $ERROR('#4: the length property has the attributes { ReadOnly }'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.1_A4_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.1_A4_T1.js deleted file mode 100644 index 6dab79af5..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.1_A4_T1.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.5.1_A4_T1; -* @section: 15.3.5.1; -* @assertion: the length property has the attributes { DontEnum }; -* @description: Checking if enumerating the length property of Function("arg1,arg2,arg3", null) fails; -*/ - -f = new Function("arg1,arg2,arg3", null); - -//CHECK#1 -if (!(f.hasOwnProperty('length'))) { - $FAIL('#1: the function has length property.'); -} - -for(key in f) - if(key=="length") - var lengthenumed=true; - -//CHECK#2 -if (lengthenumed) { - $ERROR('#2: the length property has the attributes { DontEnum }'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.1_A4_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.1_A4_T2.js deleted file mode 100644 index 5fbc8190c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.1_A4_T2.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.5.1_A4_T2; -* @section: 15.3.5.1; -* @assertion: the length property has the attributes { DontEnum }; -* @description: Checking if enumerating the length property of Function("arg1,arg2,arg3","arg4,arg5", null) fails; -*/ - -f = Function("arg1,arg2,arg3","arg5,arg4", null); - -//CHECK#1 -if (!(f.hasOwnProperty('length'))) { - $FAIL('#1: the function has length property.'); -} - -for(key in f) - if(key=="length") - var lengthenumed=true; - -//CHECK#2 -if (lengthenumed) { - $ERROR('#2: the length property has the attributes { DontEnum }'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.1_A4_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.1_A4_T3.js deleted file mode 100644 index fe658c658..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.1_A4_T3.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.5.1_A4_T3; -* @section: 15.3.5.1; -* @assertion: the length property has the attributes { DontEnum }; -* @description: Checking if enumerating the length property of Function("arg1,arg2,arg3","arg1,arg2","arg3", null) fails; -*/ - -f = new Function("arg1,arg2,arg3","arg1,arg2","arg3", null); - -//CHECK#1 -if (!(f.hasOwnProperty('length'))) { - $FAIL('#1: the function has length property.'); -} - -for(key in f) - if(key=="length") - var lengthenumed=true; - -//CHECK#2 -if (lengthenumed) { - $ERROR('#2: the length property has the attributes { DontEnum }'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.2_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.2_A1_T1.js deleted file mode 100644 index 4892494a0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.2_A1_T1.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.5.2_A1_T1; -* @section: 15.3.5.2; -* @assertion: the prototype property has the attributes { DontDelete }; -* @description: Checking if deleting the prototype property of Function("", null) fails; -*/ - -f = new Function("", null); - -//CHECK#1 -if (!(f.hasOwnProperty('prototype'))) { - $FAIL('#1: the function has length property.'); -} - -fproto = f.prototype; - -//CHECK#2 -if (delete f.prototype) { - $ERROR('#2: the prototype property has the attributes { DontDelete }'); -} - -//CHECK#3 -if (f.prototype !== fproto) { - $ERROR('#3: the prototype property has the attributes { DontDelete }'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.2_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.2_A1_T2.js deleted file mode 100644 index a682d3c5b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.2_A1_T2.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.5.2_A1_T2; -* @section: 15.3.5.2; -* @assertion: the prototype property has the attributes { DontDelete }; -* @description: Checking if deleting the prototype property of Function(void 0, "") fails; -*/ - -f = Function(void 0, ""); - -//CHECK#1 -if (!(f.hasOwnProperty('prototype'))) { - $FAIL('#1: the function has length property.'); -} - -fproto = f.prototype; - -//CHECK#2 -if (delete f.prototype) { - $ERROR('#2: the prototype property has the attributes { DontDelete }'); -} - -//CHECK#3 -if (f.prototype !== fproto) { - $ERROR('#3: the prototype property has the attributes { DontDelete }'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.3_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.3_A1_T1.js deleted file mode 100644 index e091fed70..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.3_A1_T1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.5.3_A1_T1; -* @section: 15.3.5.3, 11.8.6; -* @assertion: Assume F is a Function object. When the [[HasInstance]] method of F is called with value V, the following steps are taken: i) If V is not an object, return false; -* @description: V is number; -*/ - -FACTORY = Function("name","this.name=name;"); - -//CHECK#1 -if ((1 instanceof FACTORY)!==false) { - $ERROR('#1: Assume F is a Function object. When the [[HasInstance]] method of F is called with value V, the following steps are taken: i) If V is not an object, return false'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.3_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.3_A1_T2.js deleted file mode 100644 index 0975e8ade..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.3_A1_T2.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.5.3_A1_T2; -* @section: 15.3.5.3, 11.8.6; -* @assertion: Assume F is a Function object. When the [[HasInstance]] method of F is called with value V, the following steps are taken: i) If V is not an object, return false; -* @description: V is string; -*/ - -FACTORY = Function("name","this.name=name;"); - -//CHECK#1 -if (("1" instanceof FACTORY)!==false) { - $ERROR('#1: Assume F is a Function object. When the [[HasInstance]] method of F is called with value V, the following steps are taken: i) If V is not an object, return false'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.3_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.3_A1_T3.js deleted file mode 100644 index 9c98b88cf..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.3_A1_T3.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.5.3_A1_T3; -* @section: 15.3.5.3, 11.8.6; -* @assertion: Assume F is a Function object. When the [[HasInstance]] method of F is called with value V, the following steps are taken: i) If V is not an object, return false; -* @description: V is boolean true; -*/ - -FACTORY = Function("name","this.name=name;"); - -//CHECK#1 -if ((true instanceof FACTORY)!==false) { - $ERROR('#1: Assume F is a Function object. When the [[HasInstance]] method of F is called with value V, the following steps are taken: i) If V is not an object, return false'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.3_A1_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.3_A1_T4.js deleted file mode 100644 index 5b74752f2..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.3_A1_T4.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.5.3_A1_T4; -* @section: 15.3.5.3, 11.8.6; -* @assertion: Assume F is a Function object. When the [[HasInstance]] method of F is called with value V, the following steps are taken: i) If V is not an object, return false; -* @description: V is boolean false; -*/ - -FACTORY = Function("name","this.name=name;"); - -//CHECK#1 -if ((false instanceof FACTORY)!==false) { - $ERROR('#1: Assume F is a Function object. When the [[HasInstance]] method of F is called with value V, the following steps are taken: i) If V is not an object, return false'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.3_A1_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.3_A1_T5.js deleted file mode 100644 index 110439ddd..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.3_A1_T5.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.5.3_A1_T5; -* @section: 15.3.5.3, 11.8.6; -* @assertion: Assume F is a Function object. When the [[HasInstance]] method of F is called with value V, the following steps are taken: i) If V is not an object, return false; -* @description: V is void 0; -*/ - -FACTORY = Function("name","this.name=name;"); - -//CHECK#1 -if ((void 0 instanceof FACTORY)!==false) { - $ERROR('#1: Assume F is a Function object. When the [[HasInstance]] method of F is called with value V, the following steps are taken: i) If V is not an object, return false'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.3_A1_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.3_A1_T6.js deleted file mode 100644 index e2a3c5ce0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.3_A1_T6.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.5.3_A1_T6; -* @section: 15.3.5.3, 11.8.6; -* @assertion: Assume F is a Function object. When the [[HasInstance]] method of F is called with value V, the following steps are taken: i) If V is not an object, return false; -* @description: V is null; -*/ - -FACTORY = Function("name","this.name=name;"); - -//CHECK#1 -if ((null instanceof FACTORY)!==false) { - $ERROR('#1: Assume F is a Function object. When the [[HasInstance]] method of F is called with value V, the following steps are taken: i) If V is not an object, return false'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.3_A1_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.3_A1_T7.js deleted file mode 100644 index 14319f1da..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.3_A1_T7.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.5.3_A1_T7; -* @section: 15.3.5.3, 11.8.6; -* @assertion: Assume F is a Function object. When the [[HasInstance]] method of F is called with value V, the following steps are taken: i) If V is not an object, return false; -* @description: V is undefined; -*/ - -FACTORY = Function("name","this.name=name;"); - -//CHECK#1 -if ((undefined instanceof FACTORY)!==false) { - $ERROR('#1: Assume F is a Function object. When the [[HasInstance]] method of F is called with value V, the following steps are taken: i) If V is not an object, return false'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.3_A1_T8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.3_A1_T8.js deleted file mode 100644 index 067459c86..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.3_A1_T8.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.5.3_A1_T8; -* @section: 15.3.5.3, 11.8.6; -* @assertion: Assume F is a Function object. When the [[HasInstance]] method of F is called with value V, the following steps are taken: i) If V is not an object, return false; -* @description: V is undefined variable; -*/ - -FACTORY = Function("name","this.name=name;"); - -//CHECK#1 -if ((x instanceof FACTORY)!==false) { - $ERROR('#1: Assume F is a Function object. When the [[HasInstance]] method of F is called with value V, the following steps are taken: i) If V is not an object, return false'); -} - -var x; diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.3_A2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.3_A2_T2.js deleted file mode 100644 index 1e555f5d0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.3_A2_T2.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.5.3_A2_T2; -* @section: 15.3.5.3, 11.8.6; -* @assertion: Assume F is a Function object. When the [[HasInstance]] method of F is called with value V and V is an object, the following steps are taken: -* i) Call the [[Get]] method of F with property name "prototype". -* ii) Let O be Result(i). -* iii) O is not an object, throw a TypeError exception; -* @description: F.prototype is undefined, and V is empty object; -*/ - -FACTORY = new Function; - -FACTORY.prototype = undefined; - -obj={}; - -//CHECK#1 -try { - obj instanceof FACTORY; - $FAIL('#1: O is not an object, throw a TypeError exception'); -} catch (e) { - if (!(e instanceof TypeError)) { - $ERROR('#1.1: O is not an object, throw a TypeError exception'); - } -} - - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.3_A2_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.3_A2_T5.js deleted file mode 100644 index 373c81efd..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.3_A2_T5.js +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.3.5.3_A2_T5; - * @section: 15.3.5.3, 11.8.6; - * @assertion: Assume F is a Function object. When the [[HasInstance]] method of - * F is called with value V and V is an object, the following steps - * are taken: i) Call the [[Get]] method of F with property name - * "prototype". ii) Let O be Result(i). iii) O is not an object, - * throw a TypeError exception; - * @description: F.prototype is void 0, and V is new F; - */ - -FACTORY = Function("this.prop=1;"); - -FACTORY.prototype.name = "fairy"; - -instance = new FACTORY; - -FACTORY.prototype = void 0; - -// CHECK#1 -try { - instance instanceof FACTORY; - $FAIL('#1: O is not an object, throw a TypeError exception'); -} catch (e) { - if (!(e instanceof TypeError)) { - $ERROR('#1.1: O is not an object, throw a TypeError exception'); - } -} - -// CHECK#2 -if ((instance.constructor !== FACTORY) || (instance.name !== "fairy")) { - $ERROR('#2: instance.constructor === FACTORY'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.3_A2_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.3_A2_T6.js deleted file mode 100644 index eacf10907..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.3_A2_T6.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.3.5.3_A2_T6; - * @section: 15.3.5.3, 11.8.6; - * @assertion: Assume F is a Function object. When the [[HasInstance]] method of - * F is called with value V and V is an object, the following steps - * are taken: i) Call the [[Get]] method of F with property name - * "prototype". ii) Let O be Result(i). iii) O is not an object, - * throw a TypeError exception; - * @description: F.prototype is string, and V is function; - */ - -FACTORY = new Function; - -FACTORY.prototype = "error"; - -// CHECK#1 -try { - ( function() { - }) instanceof FACTORY; - $FAIL('#1: O is not an object, throw a TypeError exception'); -} catch (e) { - if (!(e instanceof TypeError)) { - $ERROR('#1.1: O is not an object, throw a TypeError exception'); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.3_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.3_A3_T1.js deleted file mode 100644 index 0be22da8f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.3_A3_T1.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.5.3_A3_T1; -* @section: 15.3.5.3, 11.8.6; -* @assertion: Assume F is a Function object. When the [[HasInstance]] method of F is called with value V and V is an object, the following steps are taken: -* i) Call the [[Get]] method of F with property name "prototype". -* ii) Let O be Result(i) and O is an object. -* iii) Let V be the value of the [[Prototype]] property of V. -* iv) If V is null, return false. -* v) If O and V refer to the same object or if they refer to objects joined to each other (13.1.2), return true. -* vi) Go to step iii); -* @description: F.prototype.type is 1, and V is new F; -*/ - -FACTORY = Function("this.name=\"root\""); - -FACTORY.prototype.type=1; - -instance = new FACTORY; - -//CHECK#1 -if (!(instance instanceof FACTORY)) { - $ERROR('#1: If O and V refer to the same object or if they refer to objects joined to each other (13.1.2), return true'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.3_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.3_A3_T2.js deleted file mode 100644 index 865a1dd7d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5.3_A3_T2.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.5.3_A3_T2; -* @section: 15.3.5.3, 11.8.6; -* @assertion: Assume F is a Function object. When the [[HasInstance]] method of F is called with value V and V is an object, the following steps are taken: -* i) Call the [[Get]] method of F with property name "prototype". -* ii) Let O be Result(i) and O is an object. -* iii) Let V be the value of the [[Prototype]] property of V. -* iv) If V is null, return false. -* v) If O and V refer to the same object or if they refer to objects joined to each other (13.1.2), return true. -* vi) Go to step iii); -* @description: F.prototype is Object.prototype, and V is empty object; -*/ - -FAKEFACTORY = Function(); - -fakeinstance = {}; - -//CHECK#1 -if (fakeinstance instanceof FAKEFACTORY) { - $ERROR('#1: If O and V refer to the same object or if they refer to objects joined to each other (13.1.2), return true'); -} - -FAKEFACTORY.prototype=Object.prototype; - -//CHECK#2 -if (!(fakeinstance instanceof FAKEFACTORY)) { - $ERROR('#2: If O and V refer to the same object or if they refer to objects joined to each other (13.1.2), return true'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5_A1_T1.js deleted file mode 100644 index cca1d9eca..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5_A1_T1.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.5_A1_T1; -* @section: 15.3.5; -* @assertion: The value of the [[Class]] property is "Function" ; -* @description: We delete Function.prototype.toString method to access Object.prototype.toString method. -* For testing use variable f = new Function; -*/ - -f = new Function; - -delete Function.prototype.toString; - -//CHECK#1 -if (f.toString() !== "[object "+"Function"+"]") { - $ERROR('#1: The value of the [[Class]] property is "Function"'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5_A1_T2.js deleted file mode 100644 index eda387ded..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5_A1_T2.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.5_A1_T2; -* @section: 15.3.5; -* @assertion: The value of the [[Class]] property is "Function" ; -* @description: We delete Function.prototype.toString method to access Object.prototype.toString method -* For testing use variable f = Function(); -*/ - -f = Function(); - -delete Function.prototype.toString; - -//CHECK#1 -if (f.toString() !== "[object "+"Function"+"]") { - $ERROR('#1: The value of the [[Class]] property is "Function"'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5_A2_T1.js deleted file mode 100644 index d012d07c7..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5_A2_T1.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.5_A2_T1; -* @section: 15.3.5; -* @assertion: Every function instance has a [[Call]] property ; -* @description: For testing call Function("var x =1; this.y=2;return \"OK\";")(); -*/ - -//CHECK#1 -if (Function("var x =1; this.y=2;return \"OK\";")() !== "OK") { - $ERROR('#1: Every function instance has a [[Call]] property'); -} - -//CHECK#2 -if (typeof x !== "undefined") { - $ERROR('#2: Every function instance has a [[Call]] property'); -} - -//CHECK#3 -if (y !== 2) { - $ERROR('#3: Every function instance has a [[Call]] property'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5_A2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5_A2_T2.js deleted file mode 100644 index c4cbe77d0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5_A2_T2.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.5_A2_T2; -* @section: 15.3.5; -* @assertion: Every function instance has a [[Call]] property ; -* @description: For testing call (new Function("arg1,arg2","var x =arg1; this.y=arg2;return arg1+arg2;"))("1",2); -*/ - -//CHECK#1 -if ((new Function("arg1,arg2","var x =arg1; this.y=arg2;return arg1+arg2;"))("1",2) !== "12") { - $ERROR('#1: Every function instance has a [[Call]] property'); -} - -//CHECK#2 -if (typeof x !== "undefined") { - $ERROR('#2: Every function instance has a [[Call]] property'); -} - -//CHECK#3 -if (y !== 2) { - $ERROR('#3: Every function instance has a [[Call]] property'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5_A3_T1.js deleted file mode 100644 index e8e49477f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5_A3_T1.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.5_A3_T1; -* @section: 15.3.5; -* @assertion: every function instance has a [[Construct]] property ; -* @description: As constructor use Function("var x =1; this.y=2;return \"OK\";"); -*/ - -FACTORY = Function("var x =1; this.y=2;return \"OK\";"); -obj = new FACTORY; - -//CHECK#1 -if (typeof obj !== "object") { - $ERROR('#1: every function instance has a [[Construct]] property'); -} - -//CHECK#2 -if (obj.constructor !== FACTORY) { - $ERROR('#2: every function instance has a [[Construct]] property'); -} - -//CHECK#3 -if (obj.y !== 2) { - $ERROR('#3: every function instance has a [[Construct]] property'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5_A3_T2.js deleted file mode 100644 index a8fba239e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/15.3.5_Properties_of_Function_Instances/S15.3.5_A3_T2.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.5_A3_T2; -* @section: 15.3.5; -* @assertion: every function instance has a [[Construct]] property ; -* @description: As constructor use new Function("arg1,arg2","var x =1; this.y=arg1+arg2;return \"OK\";"); -*/ - -FACTORY = new Function("arg1,arg2","var x =1; this.y=arg1+arg2;return \"OK\";"); -obj = new FACTORY("1",2); - -//CHECK#1 -if (typeof obj !== "object") { - $ERROR('#1: every function instance has a [[Construct]] property'); -} - -//CHECK#2 -if (obj.constructor !== FACTORY) { - $ERROR('#2: every function instance has a [[Construct]] property'); -} - -//CHECK#3 -if (obj.y !== "12") { - $ERROR('#3: every function instance has a [[Construct]] property'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/S15.3.1_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/S15.3.1_A1_T1.js deleted file mode 100644 index d9d3e9269..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/S15.3.1_A1_T1.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3.1_A1_T1; -* @section: 15.3.1; -* @assertion: The function call Function(…) is equivalent to the object creation expression -* new Function(…) with the same arguments. -* @description: Create simple functions and check returned values; -*/ - -var f = Function("return arguments[0];"); - -//CHECK#1 -if (!(f instanceof Function)){ - $ERROR('#1: f instanceof Function'); -} - -//CHECK#2 -if (f(1) !== 1) { - $ERROR('#2: f(1) !== 1'); -} - -var g = new Function("return arguments[0];"); - - -//CHECK#3 -if (!(g instanceof Function)) { - $ERROR('#3: g instanceof Function'); -} - -//CHECK#4 -if (g("A") !== "A") { - $ERROR('#4: g("A") !== "A"'); -} - -//CHECK#5 -if (g("A") !== f("A")) { - $ERROR('#5: g("A") !== f("A")'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/S15.3_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/S15.3_A1.js deleted file mode 100644 index d5269b997..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/S15.3_A1.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.3_A1; - * @section: 15.3; - * @assertion: Function is the property of global; - * @description: Compare Function with this.Function; - */ - -obj = Function; - -thisobj = this.Function; - -if (obj !== thisobj) { - $ERROR('Function is the property of global'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/S15.3_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/S15.3_A2_T1.js deleted file mode 100644 index d69c14cac..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/S15.3_A2_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3_A2_T1; -* @section: 15.3, 10.2.3, 15.3.2.1; -* @assertion: Since applying the "call" method to Function constructor themself leads to creating a new function instance, the second argument must be a valid function body; -* @description: Checking if executing "Function.call(this, "var x / = 1;")" fails; -*/ - -//CHECK# -try{ - Function.call(this, "var x / = 1;"); -} catch(e){ - if (!(e instanceof SyntaxError)) { - $ERROR('#1: function body must be valid'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/S15.3_A2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/S15.3_A2_T2.js deleted file mode 100644 index 4d3933dce..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/S15.3_A2_T2.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3_A2_T2; -* @section: 15.3, 10.2.3, 15.3.2.1; -* @assertion: Since applying the "call" method to Function constructor themself leads to creating a new function instance, the second argument must be a valid function body; -* @description: Checking if executing "Function.call(this, "var #x = 1;")" fails; -*/ - -//CHECK# -try{ - Function.call(this, "var #x = 1;"); -} catch(e){ - if (!(e instanceof SyntaxError)) { - $ERROR('#1: function body must be valid'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/S15.3_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/S15.3_A3_T1.js deleted file mode 100644 index a4f5d3207..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/S15.3_A3_T1.js +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3_A3_T1; -* @section: 15.3; -* @assertion: Since when call is used for Function constructor themself new function instance creates -* and then first argument(thisArg) should be ignored; -* @description: First argument is object; -*/ - -//CHECK#1 -try{ - f = Function.call(mars, "return name;"); - $ERROR('#1: When applied to the Function object itself, thisArg should be ignored'); -} catch(e){ - if (!(e instanceof ReferenceError)) { - $ERROR('#1.1: When applied to the Function object itself, thisArg should be ignored'); - } -} - -mars={name:"mars", color:"red", number:4}; - -f = Function.call(mars, "this.godname=\"ares\"; return this.color;"); - -var about_mars = f(); - -//CHECK#2 -if (about_mars !== undefined) { - $ERROR('#2: When applied to the Function object itself, thisArg should be ignored'); -} - -//CHECK#3 -if (this.godname !== "ares") { - $ERROR('#3: When applied to the Function object itself, thisArg should be ignored'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/S15.3_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/S15.3_A3_T2.js deleted file mode 100644 index 5a4fa88ee..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/S15.3_A3_T2.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3_A3_T2; -* @section: 15.3; -* @assertion: Since when call is used for Function constructor themself new function instance creates -* and then first argument(thisArg) should be ignored; -* @description: First argument is string and null; -*/ - -this.color="red"; -name="mars"; - -f = Function.call("blablastring", "return this.color;"); - -//CHECK#1 -if (f() !== "red") { - $ERROR('#1: '); -} - -g = Function.call(null, "return this.name;"); - -//CHECK#2 -if (g() !== "mars") { - $ERROR('#2: '); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/S15.3_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/S15.3_A3_T3.js deleted file mode 100644 index a77c0bac0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/S15.3_A3_T3.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3_A3_T3; -* @section: 15.3, 10.2.3; -* @assertion: Since when call is used for Function constructor themself new function instance creates -* and then first argument(thisArg) should be ignored; -* @description: First argument is this, and this don`t have needed variable; -*/ - -f=Function.call(this, "return planet;"); -g=Function.call(this, "return color;"); - -//CHECK#1 -try{ - f(); - $ERROR('#1: '); -} catch(e){ - if (!(e instanceof ReferenceError)) - $ERROR('#1.1: '); -} - -planet="mars"; - -//CHECK#2 -if (f() !== "mars") { - $ERROR('#2: '); -} - -//CHECK#3 -try{ - g(); - $ERROR('#3: '); -} catch(e){ - if (!(e instanceof ReferenceError)) - $ERROR('#3.1: '); -} - -this.color="red"; - -//CHECK#4 -if (g() !== "red") { - $ERROR('#4: '); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/S15.3_A3_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/S15.3_A3_T4.js deleted file mode 100644 index 0336810c0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/S15.3_A3_T4.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3_A3_T4; -* @section: 15.3, 10.2.3; -* @assertion: Since when call is used for Function constructor themself new function instance creates -* and then first argument(thisArg) should be ignored; -* @description: First argument is this, and this have needed variable; -*/ - -f=Function.call(this, "return planet;"); - -//CHECK#1 -if (f() !== undefined) { - $ERROR('#1: '); -} - -var planet="mars"; - -//CHECK#2 -if (f() !== "mars") { - $ERROR('#2: '); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/S15.3_A3_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/S15.3_A3_T5.js deleted file mode 100644 index 33f69622a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/S15.3_A3_T5.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3_A3_T5; -* @section: 15.3, 10.2.3; -* @assertion: Since when call is used for Function constructor themself new function instance creates -* and then first argument(thisArg) should be ignored; -* @description: First argument is this, and this don`t have needed variable. Function return this.var_name; -*/ - -f=Function.call(this, "return this.planet;"); -g=Function.call(this, "return this.color;"); - -//CHECK#1 -if (f() !== undefined) { - $ERROR('#2: '); -} - -planet="mars"; - -//CHECK#2 -if (f() !== "mars") { - $ERROR('#2: '); -} - -//CHECK#3 -if (g() !== undefined) { - $ERROR('#3: '); -} - -this.color="red"; - -//CHECK#4 -if (g() !== "red") { - $ERROR('#4: '); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/S15.3_A3_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/S15.3_A3_T6.js deleted file mode 100644 index e639b00e9..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.3_Function_Objects/S15.3_A3_T6.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.3_A3_T6; -* @section: 15.3, 10.2.3; -* @assertion: Since when call is used for Function constructor themself new function instance creates -* and then first argument(thisArg) should be ignored; -* @description: First argument is this, and this have needed variable. Function return this.var_name; -*/ - -f=Function.call(this, "return this.planet;"); - -//CHECK#1 -if (f() !== undefined) { - $ERROR('#1: '); -} - -var planet="mars"; - -//CHECK#2 -if (f() !== "mars") { - $ERROR('#2: '); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.1_The_Array_Constructor_Called_as_a_Function/S15.4.1_A1.1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.1_The_Array_Constructor_Called_as_a_Function/S15.4.1_A1.1_T1.js deleted file mode 100644 index f692a4d13..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.1_The_Array_Constructor_Called_as_a_Function/S15.4.1_A1.1_T1.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.1_A1.1_T1; - * @section: 15.4.1, 15.2.4.5; - * @assertion: The [[Prototype]] property of the newly constructed object - * is set to the original Array prototype object, the one that - * is the initial value of Array.prototype; - * @description: Create new property of Array.prototype. When new Array object has this property; -*/ - -//CHECK#1 -Array.prototype.myproperty = 1; -var x = Array(); -if (x.myproperty !== 1) { - $ERROR('#1: Array.prototype.myproperty = 1; var x = Array(); x.myproperty === 1. Actual: ' + (x.myproperty)); -} - -//CHECK#2 -if (x.hasOwnProperty('myproperty') !== false) { - $ERROR('#2: Array.prototype.myproperty = 1; var x = Array(); x.hasOwnProperty(\'myproperty\') === false. Actual: ' + (x.hasOwnProperty('myproperty'))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.1_The_Array_Constructor_Called_as_a_Function/S15.4.1_A1.1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.1_The_Array_Constructor_Called_as_a_Function/S15.4.1_A1.1_T2.js deleted file mode 100644 index dcbb73902..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.1_The_Array_Constructor_Called_as_a_Function/S15.4.1_A1.1_T2.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.1_A1.1_T2; - * @section: 15.4.1, 15.2.4.2; - * @assertion: The [[Prototype]] property of the newly constructed object - * is set to the original Array prototype object, the one that - * is the initial value of Array.prototype; - * @description: Array.prototype.toString = Object.prototype.toString; -*/ - -//CHECK#1 -Array.prototype.toString = Object.prototype.toString; -var x = Array(); -if (x.toString() !== "[object " + "Array" + "]") { - $ERROR('#1: Array.prototype.toString = Object.prototype.toString; var x = Array(); x.toString() === "[object " + "Array" + "]". Actual: ' + (x.toString())); -} - -//CHECK#2 -Array.prototype.toString = Object.prototype.toString; -var x = Array(0,1,2); -if (x.toString() !== "[object " + "Array" + "]") { - $ERROR('#2: Array.prototype.toString = Object.prototype.toString; var x = Array(0,1,2); x.toString() === "[object " + "Array" + "]". Actual: ' + (x.toString())); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.1_The_Array_Constructor_Called_as_a_Function/S15.4.1_A1.1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.1_The_Array_Constructor_Called_as_a_Function/S15.4.1_A1.1_T3.js deleted file mode 100644 index d2a2135fe..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.1_The_Array_Constructor_Called_as_a_Function/S15.4.1_A1.1_T3.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.1_A1.1_T3; - * @section: 15.4.1, 15.2.4.6; - * @assertion: The [[Prototype]] property of the newly constructed object - * is set to the original Array prototype object, the one that - * is the initial value of Array.prototype; - * @description: Checking use isPrototypeOf; -*/ - -//CHECK#1 -if (Array.prototype.isPrototypeOf(Array()) !== true) { - $ERROR('#1: Array.prototype.isPrototypeOf(Array()) === true. Actual: ' + (Array.prototype.isPrototypeOf(Array()))); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.1_The_Array_Constructor_Called_as_a_Function/S15.4.1_A1.2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.1_The_Array_Constructor_Called_as_a_Function/S15.4.1_A1.2_T1.js deleted file mode 100644 index ef812f651..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.1_The_Array_Constructor_Called_as_a_Function/S15.4.1_A1.2_T1.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.1_A1.2_T1; - * @section: 15.4.1, 15.2.4.2; - * @assertion: The [[Class]] property of the newly constructed object is set to "Array"; - * @description: Checking use Object.prototype.toString; -*/ - -//CHECK#1 -var x = Array(); -x.getClass = Object.prototype.toString; -if (x.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: var x = Array(); x.getClass = Object.prototype.toString; x is Array object. Actual: ' + (x.getClass())); -} - -//CHECK#2 -var x = Array(0,1,2); -x.getClass = Object.prototype.toString; -if (x.getClass() !== "[object " + "Array" + "]") { - $ERROR('#2: var x = Array(0,1,2); x.getClass = Object.prototype.toString; x is Array object. Actual: ' + (x.getClass())); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.1_The_Array_Constructor_Called_as_a_Function/S15.4.1_A1.3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.1_The_Array_Constructor_Called_as_a_Function/S15.4.1_A1.3_T1.js deleted file mode 100644 index da1ab5b89..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.1_The_Array_Constructor_Called_as_a_Function/S15.4.1_A1.3_T1.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.1_A1.3_T1; - * @section: 15.4.1; - * @assertion: This description of Array constructor applies if and only if - * the Array constructor is given no arguments or at least two arguments; - * @description: Checking case when Array constructor is given one argument; -*/ - -var x = Array(2); - -//CHECK#1 -if (x.length === 1) { - $ERROR('#1: var x = Array(2); x.length !== 1'); -} - -//CHECK#2 -if (x[0] === 2) { - $ERROR('#2: var x = Array(2); x[0] !== 2'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.1_The_Array_Constructor_Called_as_a_Function/S15.4.1_A2.1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.1_The_Array_Constructor_Called_as_a_Function/S15.4.1_A2.1_T1.js deleted file mode 100644 index 6654d6023..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.1_The_Array_Constructor_Called_as_a_Function/S15.4.1_A2.1_T1.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.1_A2.1_T1; - * @section: 15.4.1; - * @assertion: The length property of the newly constructed object; - * is set to the number of arguments; - * @description: Array constructor is given no arguments or at least two arguments -*/ - -//CHECK#1 -if (Array().length !== 0) { - $ERROR('#1: (Array().length === 0. Actual: ' + (Array().length)); -} - -//CHECK#2 -if (Array(0,1,0,1).length !== 4) { - $ERROR('#2: (Array(0,1,0,1).length === 4. Actual: ' + (Array(0,1,0,1).length)); -} - -//CHECK#3 -if (Array(undefined, undefined).length !== 2) { - $ERROR('#3: (Array(undefined, undefined).length === 2. Actual: ' + (Array(undefined, undefined).length)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.1_The_Array_Constructor_Called_as_a_Function/S15.4.1_A2.2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.1_The_Array_Constructor_Called_as_a_Function/S15.4.1_A2.2_T1.js deleted file mode 100644 index f26fef586..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.1_The_Array_Constructor_Called_as_a_Function/S15.4.1_A2.2_T1.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.1_A2.2_T1; - * @section: 15.4.1; - * @assertion: The 0 property of the newly constructed object is set to item0 - * (if supplied); the 1 property of the newly constructed object is set to item1 - * (if supplied); and, in general, for as many arguments as there are, the k property - * of the newly constructed object is set to argument k, where the first argument is - * considered to be argument number 0; - * @description: Checking correct work this algorithm; -*/ - -//CHECK# -var x = Array( -0,1,2,3,4,5,6,7,8,9, -10,11,12,13,14,15,16,17,18,19, -20,21,22,23,24,25,26,27,28,29, -30,31,32,33,34,35,36,37,38,39, -40,41,42,43,44,45,46,47,48,49, -50,51,52,53,54,55,56,57,58,59, -60,61,62,63,64,65,66,67,68,69, -70,71,72,73,74,75,76,77,78,79, -80,81,82,83,84,85,86,87,88,89, -90,91,92,93,94,95,96,97,98,99 -); - -for (i = 0; i < 100; i++) { - result = true; - if (x[i] !== i) { - result = false; - } -} - -if (result !== true) { - $ERROR('#1: x[i] === i. Actual: ' + (x[i])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.1_The_Array_Constructor_Called_as_a_Function/S15.4.1_A3.1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.1_The_Array_Constructor_Called_as_a_Function/S15.4.1_A3.1_T1.js deleted file mode 100644 index ef652efac..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.1_The_Array_Constructor_Called_as_a_Function/S15.4.1_A3.1_T1.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.1_A3.1_T1; - * @section: 15.4.1, 11.4.3, 11.8.6; - * @assertion: When Array is called as a function rather than as a constructor, - * it creates and initialises a new Array object; - * @description: Checking use typeof, instanceof; -*/ - -//CHECK#1 -if (typeof Array() !== "object") { - $ERROR('#1: typeof Array() === "object". Actual: ' + (typeof Array())); -} - -//CHECK#2 -if ((Array() instanceof Array) !== true) { - $ERROR('#2: (Array() instanceof Array) === true. Actual: ' + (Array() instanceof Array)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.2_The_Array_Constructor/15.4.2.1_new_Array/S15.4.2.1_A1.1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.2_The_Array_Constructor/15.4.2.1_new_Array/S15.4.2.1_A1.1_T1.js deleted file mode 100644 index f975303cc..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.2_The_Array_Constructor/15.4.2.1_new_Array/S15.4.2.1_A1.1_T1.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.2.1_A1.1_T1; - * @section: 15.4.2.1, 15.2.4.5; - * @assertion: The [[Prototype]] property of the newly constructed object - * is set to the original Array prototype object, the one that - * is the initial value of Array.prototype; - * @description: Create new property of Array.prototype. When new Array object has this property; -*/ - -//CHECK#1 -Array.prototype.myproperty = 1; -var x = new Array(); -if (x.myproperty !== 1) { - $ERROR('#1: Array.prototype.myproperty = 1; var x = new Array(); x.myproperty === 1. Actual: ' + (x.myproperty)); -} - -//CHECK#2 -if (x.hasOwnProperty('myproperty') !== false) { - $ERROR('#2: Array.prototype.myproperty = 1; var x = new Array(); x.hasOwnProperty(\'myproperty\') === false. Actual: ' + (x.hasOwnProperty('myproperty'))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.2_The_Array_Constructor/15.4.2.1_new_Array/S15.4.2.1_A1.1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.2_The_Array_Constructor/15.4.2.1_new_Array/S15.4.2.1_A1.1_T2.js deleted file mode 100644 index 6b284f725..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.2_The_Array_Constructor/15.4.2.1_new_Array/S15.4.2.1_A1.1_T2.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.2.1_A1.1_T2; - * @section: 15.4.2.1, 15.2.4.2; - * @assertion: The [[Prototype]] property of the newly constructed object - * is set to the original Array prototype object, the one that - * is the initial value of Array.prototype; - * @description: Array.prototype.toString = Object.prototype.toString; -*/ - -//CHECK#1 -Array.prototype.toString = Object.prototype.toString; -var x = new Array(); -if (x.toString() !== "[object " + "Array" + "]") { - $ERROR('#1: Array.prototype.toString = Object.prototype.toString; var x = new Array(); x.toString() === "[object " + "Array" + "]". Actual: ' + (x.toString())); -} - -//CHECK#2 -Array.prototype.toString = Object.prototype.toString; -var x = new Array(0,1,2); -if (x.toString() !== "[object " + "Array" + "]") { - $ERROR('#2: Array.prototype.toString = Object.prototype.toString; var x = new Array(0,1,2); x.toString() === "[object " + "Array" + "]". Actual: ' + (x.toString())); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.2_The_Array_Constructor/15.4.2.1_new_Array/S15.4.2.1_A1.1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.2_The_Array_Constructor/15.4.2.1_new_Array/S15.4.2.1_A1.1_T3.js deleted file mode 100644 index c4099b2f5..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.2_The_Array_Constructor/15.4.2.1_new_Array/S15.4.2.1_A1.1_T3.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.2.1_A1.1_T3; - * @section: 15.4.2.1, 15.2.4.6; - * @assertion: The [[Prototype]] property of the newly constructed object - * is set to the original Array prototype object, the one that - * is the initial value of Array.prototype; - * @description: Checking use isPrototypeOf; -*/ - -//CHECK#1 -if (Array.prototype.isPrototypeOf(new Array()) !== true) { - $ERROR('#1: Array.prototype.isPrototypeOf(new Array()) === true. Actual: ' + (Array.prototype.isPrototypeOf(new Array()))); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.2_The_Array_Constructor/15.4.2.1_new_Array/S15.4.2.1_A1.2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.2_The_Array_Constructor/15.4.2.1_new_Array/S15.4.2.1_A1.2_T1.js deleted file mode 100644 index b43371859..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.2_The_Array_Constructor/15.4.2.1_new_Array/S15.4.2.1_A1.2_T1.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.2.1_A1.2_T1; - * @section: 15.4.2.1, 15.2.4.2; - * @assertion: The [[Class]] property of the newly constructed object is set to "Array"; - * @description: Checking use Object.prototype.toString; -*/ - -//CHECK#1 -var x = new Array(); -x.getClass = Object.prototype.toString; -if (x.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: var x = new Array(); x.getClass = Object.prototype.toString; x is Array object. Actual: ' + (x.getClass())); -} - -//CHECK#2 -var x = new Array(0,1,2); -x.getClass = Object.prototype.toString; -if (x.getClass() !== "[object " + "Array" + "]") { - $ERROR('#2: var x = new Array(0,1,2); x.getClass = Object.prototype.toString; x is Array object. Actual: ' + (x.getClass())); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.2_The_Array_Constructor/15.4.2.1_new_Array/S15.4.2.1_A1.3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.2_The_Array_Constructor/15.4.2.1_new_Array/S15.4.2.1_A1.3_T1.js deleted file mode 100644 index 38f7041f7..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.2_The_Array_Constructor/15.4.2.1_new_Array/S15.4.2.1_A1.3_T1.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.2.1_A1.3_T1; - * @section: 15.4.2.1; - * @assertion: This description of Array constructor applies if and only if - * the Array constructor is given no arguments or at least two arguments; - * @description: Checking case when Array constructor is given one argument; -*/ - -var x = new Array(2); - -//CHECK#1 -if (x.length === 1) { - $ERROR('#1: var x = new Array(2); x.length !== 1'); -} - -//CHECK#2 -if (x[0] === 2) { - $ERROR('#2: var x = new Array(2); x[0] !== 2'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.2_The_Array_Constructor/15.4.2.1_new_Array/S15.4.2.1_A2.1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.2_The_Array_Constructor/15.4.2.1_new_Array/S15.4.2.1_A2.1_T1.js deleted file mode 100644 index 4be411725..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.2_The_Array_Constructor/15.4.2.1_new_Array/S15.4.2.1_A2.1_T1.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.2.1_A2.1_T1; - * @section: 15.4.2.1; - * @assertion: The length property of the newly constructed object; - * is set to the number of arguments; - * @description: Array constructor is given no arguments or at least two arguments -*/ - -//CHECK#1 -if (new Array().length !== 0) { - $ERROR('#1: new Array().length === 0. Actual: ' + (new Array().length)); -} - -//CHECK#2 -if (new Array(0,1,0,1).length !== 4) { - $ERROR('#2: new Array(0,1,0,1).length === 4. Actual: ' + (new Array(0,1,0,1).length)); -} - -//CHECK#3 -if (new Array(undefined, undefined).length !== 2) { - $ERROR('#3: new Array(undefined, undefined).length === 2. Actual: ' + (new Array(undefined, undefined).length)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.2_The_Array_Constructor/15.4.2.1_new_Array/S15.4.2.1_A2.2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.2_The_Array_Constructor/15.4.2.1_new_Array/S15.4.2.1_A2.2_T1.js deleted file mode 100644 index 3fdd7c952..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.2_The_Array_Constructor/15.4.2.1_new_Array/S15.4.2.1_A2.2_T1.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.2.1_A2.2_T1; - * @section: 15.4.2.1; - * @assertion: The 0 property of the newly constructed object is set to item0 - * (if supplied); the 1 property of the newly constructed object is set to item1 - * (if supplied); and, in general, for as many arguments as there are, the k property - * of the newly constructed object is set to argument k, where the first argument is - * considered to be argument number 0; - * @description: Checking correct work this algorithm; -*/ - -//CHECK# -var x = new Array( -0,1,2,3,4,5,6,7,8,9, -10,11,12,13,14,15,16,17,18,19, -20,21,22,23,24,25,26,27,28,29, -30,31,32,33,34,35,36,37,38,39, -40,41,42,43,44,45,46,47,48,49, -50,51,52,53,54,55,56,57,58,59, -60,61,62,63,64,65,66,67,68,69, -70,71,72,73,74,75,76,77,78,79, -80,81,82,83,84,85,86,87,88,89, -90,91,92,93,94,95,96,97,98,99 -); - -for (i = 0; i < 100; i++) { - result = true; - if (x[i] !== i) { - result = false; - } -} - -if (result !== true) { - $ERROR('#1: x[i] === i. Actual: ' + (x[i])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.2_The_Array_Constructor/15.4.2.2_new_Array_len/S15.4.2.2_A1.1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.2_The_Array_Constructor/15.4.2.2_new_Array_len/S15.4.2.2_A1.1_T1.js deleted file mode 100644 index b84ac54a3..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.2_The_Array_Constructor/15.4.2.2_new_Array_len/S15.4.2.2_A1.1_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.2.2_A1.1_T1; - * @section: 15.4.2.2; - * @assertion: The [[Prototype]] property of the newly constructed object - * is set to the original Array prototype object, the one that - * is the initial value of Array.prototype; - * @description: Create new property of Array.prototype. When new Array object has this property; -*/ - -//CHECK#1 -Array.prototype.myproperty = 1; -var x = new Array(0); -if (x.myproperty !== 1) { - $ERROR('#1: Array.prototype.myproperty = 1; var x = new Array(0); x.myproperty === 1. Actual: ' + (x.myproperty)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.2_The_Array_Constructor/15.4.2.2_new_Array_len/S15.4.2.2_A1.1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.2_The_Array_Constructor/15.4.2.2_new_Array_len/S15.4.2.2_A1.1_T2.js deleted file mode 100644 index 0aa74fa81..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.2_The_Array_Constructor/15.4.2.2_new_Array_len/S15.4.2.2_A1.1_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.2.2_A1.1_T2; - * @section: 15.4.2.2, 15.2.4.2; - * @assertion: The [[Prototype]] property of the newly constructed object - * is set to the original Array prototype object, the one that - * is the initial value of Array.prototype; - * @description: Array.prototype.toString = Object.prototype.toString; -*/ - -//CHECK#1 -Array.prototype.toString = Object.prototype.toString; -var x = new Array(0); -if (x.toString() !== "[object " + "Array" + "]") { - $ERROR('#1: Array.prototype.toString = Object.prototype.toString; var x = new Array(0); x.toString() === "[object " + "Array" + "]". Actual: ' + (x.toString())); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.2_The_Array_Constructor/15.4.2.2_new_Array_len/S15.4.2.2_A1.1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.2_The_Array_Constructor/15.4.2.2_new_Array_len/S15.4.2.2_A1.1_T3.js deleted file mode 100644 index 88a698fff..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.2_The_Array_Constructor/15.4.2.2_new_Array_len/S15.4.2.2_A1.1_T3.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.2.2_A1.1_T3; - * @section: 15.4.2.2, 15.2.4.6; - * @assertion: The [[Prototype]] property of the newly constructed object - * is set to the original Array prototype object, the one that - * is the initial value of Array.prototype; - * @description: Checking use isPrototypeOf; -*/ - -//CHECK#1 -if (Array.prototype.isPrototypeOf(new Array(0)) !== true) { - $ERROR('#1: Array.prototype.isPrototypeOf(new Array(0)) === true. Actual: ' + (Array.prototype.isPrototypeOf(new Array(0)))); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.2_The_Array_Constructor/15.4.2.2_new_Array_len/S15.4.2.2_A1.2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.2_The_Array_Constructor/15.4.2.2_new_Array_len/S15.4.2.2_A1.2_T1.js deleted file mode 100644 index 38acf93be..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.2_The_Array_Constructor/15.4.2.2_new_Array_len/S15.4.2.2_A1.2_T1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.2.2_A1.2_T1; - * @section: 15.4.2.2, 15.2.4.2; - * @assertion: The [[Class]] property of the newly constructed object is set to "Array"; - * @description: Checking use Object.prototype.toString; -*/ - -//CHECK#1 -var x = new Array(0); -x.getClass = Object.prototype.toString; -if (x.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: var x = new Array(0); x.getClass = Object.prototype.toString; x is Array object. Actual: ' + (x.getClass())); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.2_The_Array_Constructor/15.4.2.2_new_Array_len/S15.4.2.2_A2.1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.2_The_Array_Constructor/15.4.2.2_new_Array_len/S15.4.2.2_A2.1_T1.js deleted file mode 100644 index c0df8b9b5..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.2_The_Array_Constructor/15.4.2.2_new_Array_len/S15.4.2.2_A2.1_T1.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.2.2_A2.1_T1; - * @section: 15.4.2.2; - * @assertion: If the argument len is a Number and ToUint32(len) is equal to len, - * then the length property of the newly constructed object is set to ToUint32(len); - * @description: Array constructor is given one argument; -*/ - -//CHECK#1 -var x = new Array(0); -if (x.length !== 0) { - $ERROR('#1: var x = new Array(0); x.length === 0. Actual: ' + (x.length)); -} - -//CHECK#2 -var x = new Array(1); -if (x.length !== 1) { - $ERROR('#2: var x = new Array(1); x.length === 1. Actual: ' + (x.length)); -} - -//CHECK#3 -var x = new Array(4294967295); -if (x.length !== 4294967295) { - $ERROR('#3: var x = new Array(4294967295); x.length === 4294967295. Actual: ' + (x.length)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.2_The_Array_Constructor/15.4.2.2_new_Array_len/S15.4.2.2_A2.2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.2_The_Array_Constructor/15.4.2.2_new_Array_len/S15.4.2.2_A2.2_T1.js deleted file mode 100644 index e55e47a04..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.2_The_Array_Constructor/15.4.2.2_new_Array_len/S15.4.2.2_A2.2_T1.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.2.2_A2.2_T1; - * @section: 15.4.2.2, 12.14; - * @assertion: If the argument len is a Number and ToUint32(len) is not equal to len, - * a RangeError exception is thrown; - * @description: Use try statement. len = -1, 4294967296, 4294967297; -*/ - -//CHECK#1 -try { - new Array(-1); - $ERROR('#1.1: new Array(-1) throw RangeError. Actual: ' + (new Array(-1))); -} catch(e) { - if ((e instanceof RangeError) !== true) { - $ERROR('#1.2: new Array(-1) throw RangeError. Actual: ' + (e)); - } -} - -//CHECK#2 -try { - new Array(4294967296); - $ERROR('#2.1: new Array(4294967296) throw RangeError. Actual: ' + (new Array(4294967296))); -} catch(e) { - if ((e instanceof RangeError) !== true) { - $ERROR('#2.2: new Array(4294967296) throw RangeError. Actual: ' + (e)); - } -} - -//CHECK#3 -try { - new Array(4294967297); - $ERROR('#3.1: new Array(4294967297) throw RangeError. Actual: ' + (new Array(4294967297))); -} catch(e) { - if ((e instanceof RangeError) !== true) { - $ERROR('#3.2: new Array(4294967297) throw RangeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.2_The_Array_Constructor/15.4.2.2_new_Array_len/S15.4.2.2_A2.2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.2_The_Array_Constructor/15.4.2.2_new_Array_len/S15.4.2.2_A2.2_T2.js deleted file mode 100644 index b1d27ad32..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.2_The_Array_Constructor/15.4.2.2_new_Array_len/S15.4.2.2_A2.2_T2.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.2.2_A2.2_T2; - * @section: 15.4.2.2; - * @assertion: If the argument len is a Number and ToUint32(len) is not equal to len, - * a RangeError exception is thrown; - * @description: Use try statement. len = NaN, +/-Infinity; -*/ - -//CHECK#1 -try { - new Array(NaN); - $ERROR('#1.1: new Array(NaN) throw RangeError. Actual: ' + (new Array(NaN))); -} catch(e) { - if ((e instanceof RangeError) !== true) { - $ERROR('#1.2: new Array(NaN) throw RangeError. Actual: ' + (e)); - } -} - -//CHECK#2 -try { - new Array(Number.POSITIVE_INFINITY); - $ERROR('#2.1: new Array(Number.POSITIVE_INFINITY) throw RangeError. Actual: ' + (new Array(Number.POSITIVE_INFINITY))); -} catch(e) { - if ((e instanceof RangeError) !== true) { - $ERROR('#2.2: new Array(Number.POSITIVE_INFINITY) throw RangeError. Actual: ' + (e)); - } -} - -//CHECK#3 -try { - new Array(Number.NEGATIVE_INFINITY); - $ERROR('#3.1: new Array(Number.NEGATIVE_INFINITY) throw RangeError. Actual: ' + (new Array(Number.NEGATIVE_INFINITY))); -} catch(e) { - if ((e instanceof RangeError) !== true) { - $ERROR('#3.2: new Array(Number.NEGATIVE_INFINITY) throw RangeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.2_The_Array_Constructor/15.4.2.2_new_Array_len/S15.4.2.2_A2.2_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.2_The_Array_Constructor/15.4.2.2_new_Array_len/S15.4.2.2_A2.2_T3.js deleted file mode 100644 index 2ee66e80b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.2_The_Array_Constructor/15.4.2.2_new_Array_len/S15.4.2.2_A2.2_T3.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.2.2_A2.2_T3; - * @section: 15.4.2.2; - * @assertion: If the argument len is a Number and ToUint32(len) is not equal to len, - * a RangeError exception is thrown; - * @description: Use try statement. len = 1.5, Number.MAX_VALUE, Number.MIN_VALUE; -*/ - -//CHECK#1 -try { - new Array(1.5); - $ERROR('#1.1: new Array(1.5) throw RangeError. Actual: ' + (new Array(1.5))); -} catch(e) { - if ((e instanceof RangeError) !== true) { - $ERROR('#1.2: new Array(1.5) throw RangeError. Actual: ' + (e)); - } -} - -//CHECK#2 -try { - new Array(Number.MAX_VALUE); - $ERROR('#2.1: new Array(Number.MAX_VALUE) throw RangeError. Actual: ' + (new Array(Number.MAX_VALUE))); -} catch(e) { - if ((e instanceof RangeError) !== true) { - $ERROR('#2.2: new Array(Number.MAX_VALUE) throw RangeError. Actual: ' + (e)); - } -} - -//CHECK#3 -try { - new Array(Number.MIN_VALUE); - $ERROR('#3.1: new Array(Number.MIN_VALUE) throw RangeError. Actual: ' + (new Array(Number.MIN_VALUE))); -} catch(e) { - if ((e instanceof RangeError) !== true) { - $ERROR('#3.2: new Array(Number.MIN_VALUE) throw RangeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.2_The_Array_Constructor/15.4.2.2_new_Array_len/S15.4.2.2_A2.3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.2_The_Array_Constructor/15.4.2.2_new_Array_len/S15.4.2.2_A2.3_T1.js deleted file mode 100644 index 38a8a59e5..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.2_The_Array_Constructor/15.4.2.2_new_Array_len/S15.4.2.2_A2.3_T1.js +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.2.2_A2.3_T1; - * @section: 15.4.2.2; - * @assertion: If the argument len is not a Number, then the length property of - * the newly constructed object is set to 1 and the 0 property of - * the newly constructed object is set to len; - * @description: Checking for null and undefined; -*/ - -var x = new Array(null); - -//CHECK#1 -if (x.length !== 1) { - $ERROR('#1: var x = new Array(null); x.length === 1. Actual: ' + (x.length)); -} - -//CHECK#2 -if (x[0] !== null) { - $ERROR('#2: var x = new Array(null); x[0] === null. Actual: ' + (x[0])); -} - -var x = new Array(undefined); - -//CHECK#3 -if (x.length !== 1) { - $ERROR('#3: var x = new Array(undefined); x.length === 1. Actual: ' + (x.length)); -} - -//CHECK#4 -if (x[0] !== undefined) { - $ERROR('#4: var x = new Array(undefined); x[0] === undefined. Actual: ' + (x[0])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.2_The_Array_Constructor/15.4.2.2_new_Array_len/S15.4.2.2_A2.3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.2_The_Array_Constructor/15.4.2.2_new_Array_len/S15.4.2.2_A2.3_T2.js deleted file mode 100644 index 5d350a814..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.2_The_Array_Constructor/15.4.2.2_new_Array_len/S15.4.2.2_A2.3_T2.js +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.2.2_A2.3_T2; - * @section: 15.4.2.2; - * @assertion: If the argument len is not a Number, then the length property of - * the newly constructed object is set to 1 and the 0 property of - * the newly constructed object is set to len; - * @description: Checking for boolean primitive and Boolean object; -*/ - -var x = new Array(true); - -//CHECK#1 -if (x.length !== 1) { - $ERROR('#1: var x = new Array(true); x.length === 1. Actual: ' + (x.length)); -} - -//CHECK#2 -if (x[0] !== true) { - $ERROR('#2: var x = new Array(true); x[0] === true. Actual: ' + (x[0])); -} - -var obj = new Boolean(false); -var x = new Array(obj); - -//CHECK#3 -if (x.length !== 1) { - $ERROR('#3: var obj = new Boolean(false); var x = new Array(obj); x.length === 1. Actual: ' + (x.length)); -} - -//CHECK#4 -if (x[0] !== obj) { - $ERROR('#4: var obj = new Boolean(false); var x = new Array(obj); x[0] === obj. Actual: ' + (x[0])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.2_The_Array_Constructor/15.4.2.2_new_Array_len/S15.4.2.2_A2.3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.2_The_Array_Constructor/15.4.2.2_new_Array_len/S15.4.2.2_A2.3_T3.js deleted file mode 100644 index abf1b06c0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.2_The_Array_Constructor/15.4.2.2_new_Array_len/S15.4.2.2_A2.3_T3.js +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.2.2_A2.3_T3; - * @section: 15.4.2.2; - * @assertion: If the argument len is not a Number, then the length property of - * the newly constructed object is set to 1 and the 0 property of - * the newly constructed object is set to len; - * @description: Checking for boolean primitive and Boolean object; -*/ - -var x = new Array("1"); - -//CHECK#1 -if (x.length !== 1) { - $ERROR('#1: var x = new Array("1"); x.length === 1. Actual: ' + (x.length)); -} - -//CHECK#2 -if (x[0] !== "1") { - $ERROR('#2: var x = new Array("1"); x[0] === "1". Actual: ' + (x[0])); -} - -var obj = new String("0"); -var x = new Array(obj); - -//CHECK#3 -if (x.length !== 1) { - $ERROR('#3: var obj = new String("0"); var x = new Array(obj); x.length === 1. Actual: ' + (x.length)); -} - -//CHECK#4 -if (x[0] !== obj) { - $ERROR('#4: var obj = new String("0"); var x = new Array(obj); x[0] === obj. Actual: ' + (x[0])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.2_The_Array_Constructor/15.4.2.2_new_Array_len/S15.4.2.2_A2.3_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.2_The_Array_Constructor/15.4.2.2_new_Array_len/S15.4.2.2_A2.3_T4.js deleted file mode 100644 index 252c53bb1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.2_The_Array_Constructor/15.4.2.2_new_Array_len/S15.4.2.2_A2.3_T4.js +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.2.2_A2.3_T4; - * @section: 15.4.2.2; - * @assertion: If the argument len is not a Number, then the length property of - * the newly constructed object is set to 1 and the 0 property of - * the newly constructed object is set to len; - * @description: Checking for Number object; -*/ - -var obj = new Number(0); -var x = new Array(obj); - -//CHECK#1 -if (x.length !== 1) { - $ERROR('#1: var obj = new Number(0); var x = new Array(obj); x.length === 1. Actual: ' + (x.length)); -} - -//CHECK#2 -if (x[0] !== obj) { - $ERROR('#2: var obj = new Number(0); var x = new Array(obj); x[0] === obj. Actual: ' + (x[0])); -} - -var obj = new Number(1); -var x = new Array(obj); - -//CHECK#3 -if (x.length !== 1) { - $ERROR('#3: var obj = new Number(1); var x = new Array(obj); x.length === 1. Actual: ' + (x.length)); -} - -//CHECK#4 -if (x[0] !== obj) { - $ERROR('#4: var obj = new Number(1); var x = new Array(obj); x[0] === obj. Actual: ' + (x[0])); -} - -var obj = new Number(4294967295); -var x = new Array(obj); - -//CHECK#5 -if (x.length !== 1) { - $ERROR('#5: var obj = new Number(4294967295); var x = new Array(obj); x.length === 1. Actual: ' + (x.length)); -} - -//CHECK#6 -if (x[0] !== obj) { - $ERROR('#6: var obj = new Number(4294967295); var x = new Array(obj); x[0] === obj. Actual: ' + (x[0])); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.2_The_Array_Constructor/15.4.2.2_new_Array_len/S15.4.2.2_A2.3_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.2_The_Array_Constructor/15.4.2.2_new_Array_len/S15.4.2.2_A2.3_T5.js deleted file mode 100644 index 914905bf7..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.2_The_Array_Constructor/15.4.2.2_new_Array_len/S15.4.2.2_A2.3_T5.js +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.2.2_A2.3_T5; - * @section: 15.4.2.2; - * @assertion: If the argument len is not a Number, then the length property of - * the newly constructed object is set to 1 and the 0 property of - * the newly constructed object is set to len; - * @description: Checking for Number object; -*/ - -var obj = new Number(-1); -var x = new Array(obj); - -//CHECK#1 -if (x.length !== 1) { - $ERROR('#1: var obj = new Number(-1); var x = new Array(obj); x.length === 1. Actual: ' + (x.length)); -} - -//CHECK#2 -if (x[0] !== obj) { - $ERROR('#2: var obj = new Number(-1); var x = new Array(obj); x[0] === obj. Actual: ' + (x[0])); -} - -var obj = new Number(4294967296); -var x = new Array(obj); - -//CHECK#3 -if (x.length !== 1) { - $ERROR('#3: var obj = new Number(4294967296); var x = new Array(obj); x.length === 1. Actual: ' + (x.length)); -} - -//CHECK#4 -if (x[0] !== obj) { - $ERROR('#4: var obj = new Number(4294967296); var x = new Array(obj); x[0] === obj. Actual: ' + (x[0])); -} - -var obj = new Number(4294967297); -var x = new Array(obj); - -//CHECK#5 -if (x.length !== 1) { - $ERROR('#5: var obj = new Number(4294967297); var x = new Array(obj); x.length === 1. Actual: ' + (x.length)); -} - -//CHECK#6 -if (x[0] !== obj) { - $ERROR('#6: var obj = new Number(4294967297); var x = new Array(obj); x[0] === obj. Actual: ' + (x[0])); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.3_Properties_of_the_Array_Constructor/15.4.3.1_Array_prototype/S15.4.3.1_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.3_Properties_of_the_Array_Constructor/15.4.3.1_Array_prototype/S15.4.3.1_A1.js deleted file mode 100644 index 4706be045..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.3_Properties_of_the_Array_Constructor/15.4.3.1_Array_prototype/S15.4.3.1_A1.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.3.1_A1; - * @section: 15.4.3.1, 15.2.4.5; - * @assertion: The Array has property prototype; - * @description: Checking use hasOwnProperty; -*/ - -//CHECK#1 -if (Array.hasOwnProperty('prototype') !== true) { - $FAIL('#1: Array.hasOwnProperty(\'prototype\') === true. Actual: ' + (Array.hasOwnProperty('prototype'))); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.3_Properties_of_the_Array_Constructor/15.4.3.1_Array_prototype/S15.4.3.1_A2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.3_Properties_of_the_Array_Constructor/15.4.3.1_Array_prototype/S15.4.3.1_A2.js deleted file mode 100644 index 6adb1658c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.3_Properties_of_the_Array_Constructor/15.4.3.1_Array_prototype/S15.4.3.1_A2.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.3.1_A2; -* @section: 15.4.3.1; -* @assertion: The Array.prototype property has the attribute DontEnum; -* @description: Checking if enumerating the Array.prototype property fails; -*/ - - -//CHECK#1 -if (Array.propertyIsEnumerable('prototype') !== false) { - $ERROR('#1: Array.propertyIsEnumerable(\'prototype\') === false. Actual: ' + (Array.propertyIsEnumerable('prototype'))); -} - -//CHECK#2 -result = true; -for (p in Array){ - if (p === "prototype") { - result = false; - } -} - -if (result !== true) { - $ERROR('#2: result = true; for (p in Array) { if (p === "prototype") result = false; } result === true;'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.3_Properties_of_the_Array_Constructor/15.4.3.1_Array_prototype/S15.4.3.1_A3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.3_Properties_of_the_Array_Constructor/15.4.3.1_Array_prototype/S15.4.3.1_A3.js deleted file mode 100644 index 69d336416..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.3_Properties_of_the_Array_Constructor/15.4.3.1_Array_prototype/S15.4.3.1_A3.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.3.1_A3; -* @section: 15.4.3.1, 15.2.4.5; -* @assertion: The Array.prototype property has the attribute DontDelete; -* @description: Checking if deleting the Array.prototype property fails; -*/ - -//CHECK#1 -if (Array.hasOwnProperty('prototype') !== true) { - $FAIL('#1: Array.hasOwnProperty(\'prototype\') === true. Actual: ' + (Array.hasOwnProperty('prototype'))); -} - -delete Array.prototype; - -//CHECK#2 -if (Array.hasOwnProperty('prototype') !== true) { - $ERROR('#2: delete Array.prototype; Array.hasOwnProperty(\'prototype\') === true. Actual: ' + (Array.hasOwnProperty('prototype'))); -} - -//CHECK#3 -if (Array.prototype === undefined) { - $ERROR('#3: delete Array.prototype; Array.prototype !== undefined'); -} - - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.3_Properties_of_the_Array_Constructor/15.4.3.1_Array_prototype/S15.4.3.1_A4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.3_Properties_of_the_Array_Constructor/15.4.3.1_Array_prototype/S15.4.3.1_A4.js deleted file mode 100644 index c58dc6c70..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.3_Properties_of_the_Array_Constructor/15.4.3.1_Array_prototype/S15.4.3.1_A4.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.3.1_A4; -* @section: 15.4.3.1; -* @assertion: The Array.prototype property has the attribute ReadOnly; -* @description: Checking if varying the Array.prototype property fails; -*/ - -//CHECK#1 -x = Array.prototype; -Array.prototype = 1; -if (Array.prototype !== x) { - $ERROR('#1: x = Array.prototype; Array.prototype = 1; Array.prototype === x. Actual: ' + (Array.prototype)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.3_Properties_of_the_Array_Constructor/15.4.3.1_Array_prototype/S15.4.3.1_A5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.3_Properties_of_the_Array_Constructor/15.4.3.1_Array_prototype/S15.4.3.1_A5.js deleted file mode 100644 index ee2ec31e3..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.3_Properties_of_the_Array_Constructor/15.4.3.1_Array_prototype/S15.4.3.1_A5.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.3.1_A5; - * @section: 15.4.3.1; - * @assertion: The length property of Array.prototype is 0; - * @description: Array.prototype.length === 0; -*/ - -//CHECK#1 -if (Array.prototype.length !== 0) { - $ERROR('#1.1: Array.prototype.length === 0. Actual: ' + (Array.prototype.length)); -} else { - if (1 / Array.prototype.length !== Number.POSITIVE_INFINITY) { - $ERROR('#1.2: Array.prototype.length === +0. Actual: -' + (Array.prototype.length)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.3_Properties_of_the_Array_Constructor/S15.4.3_A1.1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.3_Properties_of_the_Array_Constructor/S15.4.3_A1.1_T1.js deleted file mode 100644 index 9b511613d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.3_Properties_of_the_Array_Constructor/S15.4.3_A1.1_T1.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.3_A1.1_T1; - * @section: 15.4.3, 15.2.4.5; - * @assertion: The value of the internal [[Prototype]] property of - * the Array constructor is the Function prototype object; - * @description: Create new property of Function.prototype. When Array constructor has this property; -*/ - -Function.prototype.myproperty = 1; - -//CHECK#1 -if (Array.myproperty !== 1) { - $ERROR('#1: Function.prototype.myproperty = 1; Array.myproperty === 1. Actual: ' + (Array.myproperty)); -} - -//CHECK#2 -if (Array.hasOwnProperty('myproperty') !== false) { - $ERROR('#2: Function.prototype.myproperty = 1; Array.hasOwnProperty(\'myproperty\') === false. Actual: ' + (Array.hasOwnProperty('myproperty'))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.3_Properties_of_the_Array_Constructor/S15.4.3_A1.1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.3_Properties_of_the_Array_Constructor/S15.4.3_A1.1_T2.js deleted file mode 100644 index 4d6e3ffff..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.3_Properties_of_the_Array_Constructor/S15.4.3_A1.1_T2.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.3_A1.1_T2; - * @section: 15.4.3, 15.2.4.2; - * @assertion: The value of the internal [[Prototype]] property of - * the Array constructor is the Function prototype object; - * @description: Function.prototype.toString = Object.prototype.toString; -*/ - -//CHECK#1 -Function.prototype.toString = Object.prototype.toString; -if (Array.toString() !== "[object " + "Function" + "]") { - $ERROR('#1: Function.prototype.toString = Object.prototype.toString; Array.toString() === "[object " + "Function" + "]". Actual: ' + (Array.toString())); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.3_Properties_of_the_Array_Constructor/S15.4.3_A1.1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.3_Properties_of_the_Array_Constructor/S15.4.3_A1.1_T3.js deleted file mode 100644 index 68f3c8745..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.3_Properties_of_the_Array_Constructor/S15.4.3_A1.1_T3.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.3_A1.1_T3; - * @section: 15.4.3, 15.2.4.6; - * @assertion: The value of the internal [[Prototype]] property of - * the Array constructor is the Function prototype object; - * @description: Checking use isPrototypeOf; -*/ - -//CHECK#1 -if (Function.prototype.isPrototypeOf(Array) !== true) { - $ERROR('#1: Function.prototype.isPrototypeOf(Array) === true. Actual: ' + (Function.prototype.isPrototypeOf(Array))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.3_Properties_of_the_Array_Constructor/S15.4.3_A2.1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.3_Properties_of_the_Array_Constructor/S15.4.3_A2.1.js deleted file mode 100644 index 1fb90c21d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.3_Properties_of_the_Array_Constructor/S15.4.3_A2.1.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.3_A2.1; - * @section: 15.4.3, 15.2.4.7, 12.6.4; - * @assertion: The length property of Array has the attribute DontEnum; - * @description: Checking use propertyIsEnumerable, for-in; -*/ - - -//CHECK#1 -if (Array.propertyIsEnumerable('length') !== false) { - $ERROR('#1: Array.propertyIsEnumerable(\'length\') === false. Actual: ' + (Array.propertyIsEnumerable('length'))); -} - -//CHECK#2 -result = true; -for (p in Array){ - if (p === "length") { - result = false; - } -} - -if (result !== true) { - $ERROR('#2: result = true; for (p in Array.slice) { if (p === "length") result = false; } result === true;'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.3_Properties_of_the_Array_Constructor/S15.4.3_A2.2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.3_Properties_of_the_Array_Constructor/S15.4.3_A2.2.js deleted file mode 100644 index dd12bfc17..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.3_Properties_of_the_Array_Constructor/S15.4.3_A2.2.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.3_A2.2; - * @section: 15.4.3, 15.2.4.5, 11.4.1; - * @assertion: The length property of Array has the attribute DontDelete; - * @description: Checking use hasOwnProperty, delete; -*/ - -//CHECK#1 -if (Array.hasOwnProperty('length') !== true) { - $FAIL('#1: Array.hasOwnProperty(\'length\') === true. Actual: ' + (Array.hasOwnProperty('length'))); -} - -delete Array.length; - -//CHECK#2 -if (Array.hasOwnProperty('length') !== true) { - $ERROR('#2: delete Array.length; Array.hasOwnProperty(\'length\') === true. Actual: ' + (Array.hasOwnProperty('length'))); -} - -//CHECK#3 -if (Array.length === undefined) { - $ERROR('#3: delete Array.length; Array.length !== undefined'); -} - - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.3_Properties_of_the_Array_Constructor/S15.4.3_A2.3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.3_Properties_of_the_Array_Constructor/S15.4.3_A2.3.js deleted file mode 100644 index 33e70bc4e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.3_Properties_of_the_Array_Constructor/S15.4.3_A2.3.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.3_A2.3; - * @section: 15.4.3; - * @assertion: The length property of Array has the attribute ReadOnly; - * @description: Checking if varying the length property fails; -*/ - -//CHECK#1 -x = Array.length; -Array.length = Infinity; -if (Array.length !== x) { - $ERROR('#1: x = Array.length; Array.length = Infinity; Array.length === x. Actual: ' + (Array.length)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.3_Properties_of_the_Array_Constructor/S15.4.3_A2.4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.3_Properties_of_the_Array_Constructor/S15.4.3_A2.4.js deleted file mode 100644 index f25c4afa4..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.3_Properties_of_the_Array_Constructor/S15.4.3_A2.4.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.3_A2.4; - * @section: 15.4.3; - * @assertion: The length property of Array is 1; - * @description: Array.length === 1; -*/ - -//CHECK#1 -if (Array.length !== 1) { - $ERROR('#1: Array.length === 1. Actual: ' + (Array.length)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A1.1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A1.1_T1.js deleted file mode 100644 index 123dfc05f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A1.1_T1.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.10_A1.1_T1; - * @section: 15.4.4.10; - * @assertion: If start is positive, use min(start, length). - * If end is positive, use min(end, length); - * @description: length > end > start = 0; -*/ - -var x = [0,1,2,3,4]; -var arr = x.slice(0,3); - -//CHECK#1 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: var x = [0,1,2,3,4]; var arr = x.slice(0,3); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#2 -if (arr.length !== 3) { - $ERROR('#2: var x = [0,1,2,3,4]; var arr = x.slice(0,3); arr.length === 3. Actual: ' + (arr.length)); -} - -//CHECK#3 -if (arr[0] !== 0) { - $ERROR('#3: var x = [0,1,2,3,4]; var arr = x.slice(0,3); arr[0] === 0. Actual: ' + (arr[0])); -} - -//CHECK#4 -if (arr[1] !== 1) { - $ERROR('#4: var x = [0,1,2,3,4]; var arr = x.slice(0,3); arr[1] === 1. Actual: ' + (arr[1])); -} - -//CHECK#5 -if (arr[2] !== 2) { - $ERROR('#5: var x = [0,1,2,3,4]; var arr = x.slice(0,3); arr[2] === 2. Actual: ' + (arr[2])); -} - -//CHECK#6 -if (arr[3] !== undefined) { - $ERROR('#6: var x = [0,1,2,3,4]; var arr = x.slice(0,3); arr[3] === undefined. Actual: ' + (arr[3])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A1.1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A1.1_T2.js deleted file mode 100644 index 63d1b852e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A1.1_T2.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.10_A1.1_T2; - * @section: 15.4.4.10; - * @assertion: If start is positive, use min(start, length). - * If end is positive, use min(end, length); - * @description: length > end = start > 0; -*/ - -var x = [0,1,2,3,4]; -var arr = x.slice(3,3); - -//CHECK#1 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: var x = [0,1,2,3,4]; var arr = x.slice(3,3); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#2 -if (arr.length !== 0) { - $ERROR('#2: var x = [0,1,2,3,4]; var arr = x.slice(3,3); arr.length === 0. Actual: ' + (arr.length)); -} - -//CHECK#3 -if (arr[0] !== undefined) { - $ERROR('#3: var x = [0,1,2,3,4]; var arr = x.slice(3,3); arr[0] === undefined. Actual: ' + (arr[0])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A1.1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A1.1_T3.js deleted file mode 100644 index ccecc6585..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A1.1_T3.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.10_A1.1_T3; - * @section: 15.4.4.10; - * @assertion: If start is positive, use min(start, length). - * If end is positive, use min(end, length); - * @description: length > start > end > 0; -*/ - -var x = [0,1,2,3,4]; -var arr = x.slice(4,3); - -//CHECK#1 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: var x = [0,1,2,3,4]; var arr = x.slice(4,3); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#2 -if (arr.length !== 0) { - $ERROR('#2: var x = [0,1,2,3,4]; var arr = x.slice(4,3); arr.length === 0. Actual: ' + (arr.length)); -} - -//CHECK#3 -if (arr[0] !== undefined) { - $ERROR('#3: var x = [0,1,2,3,4]; var arr = x.slice(4,3); arr[0] === undefined. Actual: ' + (arr[0])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A1.1_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A1.1_T4.js deleted file mode 100644 index e8a0fe05a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A1.1_T4.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.10_A1.1_T4; - * @section: 15.4.4.10; - * @assertion: If start is positive, use min(start, length). - * If end is positive, use min(end, length); - * @description: length = end = start > 0; -*/ - -var x = [0,1,2,3,4]; -var arr = x.slice(5,5); - -//CHECK#1 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: var x = [0,1,2,3,4]; var arr = x.slice(5,5); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#2 -if (arr.length !== 0) { - $ERROR('#2: var x = [0,1,2,3,4]; var arr = x.slice(5,5); arr.length === 0. Actual: ' + (arr.length)); -} - -//CHECK#3 -if (arr[0] !== undefined) { - $ERROR('#3: var x = [0,1,2,3,4]; var arr = x.slice(5,5); arr[0] === undefined. Actual: ' + (arr[0])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A1.1_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A1.1_T5.js deleted file mode 100644 index 28e7f0b22..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A1.1_T5.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.10_A1.1_T5; - * @section: 15.4.4.10; - * @assertion: If start is positive, use min(start, length). - * If end is positive, use min(end, length); - * @description: length = end > start > 0; -*/ - -var x = [0,1,2,3,4]; -var arr = x.slice(3,5); - -//CHECK#1 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: var x = [0,1,2,3,4]; var arr = x.slice(3,5); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#2 -if (arr.length !== 2) { - $ERROR('#2: var x = [0,1,2,3,4]; var arr = x.slice(3,5); arr.length === 2. Actual: ' + (arr.length)); -} - -//CHECK#3 -if (arr[0] !== 3) { - $ERROR('#3: var x = [0,1,2,3,4]; var arr = x.slice(3,5); arr[0] === 3. Actual: ' + (arr[0])); -} - -//CHECK#4 -if (arr[1] !== 4) { - $ERROR('#4: var x = [0,1,2,3,4]; var arr = x.slice(3,5); arr[1] === 4. Actual: ' + (arr[1])); -} - -//CHECK#5 -if (arr[3] !== undefined) { - $ERROR('#5: var x = [0,1,2,3,4]; var arr = x.slice(3,5); arr[3] === undefined. Actual: ' + (arr[3])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A1.1_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A1.1_T6.js deleted file mode 100644 index 710cf15da..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A1.1_T6.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.10_A1.1_T6; - * @section: 15.4.4.10; - * @assertion: If start is positive, use min(start, length). - * If end is positive, use min(end, length); - * @description: length > end > start > 0; - * -*/ - -var x = [0,1,2,3,4]; -var arr = x.slice(2,4); - -//CHECK#1 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: var x = [0,1,2,3,4]; var arr = x.slice(2,4); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#2 -if (arr.length !== 2) { - $ERROR('#2: var x = [0,1,2,3,4]; var arr = x.slice(2,4); arr.length === 2. Actual: ' + (arr.length)); -} - -//CHECK#3 -if (arr[0] !== 2) { - $ERROR('#3: var x = [0,1,2,3,4]; var arr = x.slice(2,4); arr[0] === 2. Actual: ' + (arr[0])); -} - -//CHECK#4 -if (arr[1] !== 3) { - $ERROR('#4: var x = [0,1,2,3,4]; var arr = x.slice(2,4); arr[1] === 3. Actual: ' + (arr[1])); -} - -//CHECK#5 -if (arr[3] !== undefined) { - $ERROR('#5: var x = [0,1,2,3,4]; var arr = x.slice(2,4); arr[3] === undefined. Actual: ' + (arr[3])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A1.1_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A1.1_T7.js deleted file mode 100644 index a42f7e1fa..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A1.1_T7.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.10_A1.1_T7; - * @section: 15.4.4.10; - * @assertion: If start is positive, use min(start, length). - * If end is positive, use min(end, length); - * @description: end > length > start > 0; -*/ - -var x = [0,1,2,3,4]; -var arr = x.slice(3,6); - -//CHECK#1 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: var x = [0,1,2,3,4]; var arr = x.slice(3,6); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#2 -if (arr.length !== 2) { - $ERROR('#2: var x = [0,1,2,3,4]; var arr = x.slice(3,6); arr.length === 2. Actual: ' + (arr.length)); -} - -//CHECK#3 -if (arr[0] !== 3) { - $ERROR('#3: var x = [0,1,2,3,4]; var arr = x.slice(3,6); arr[0] === 3. Actual: ' + (arr[0])); -} - -//CHECK#4 -if (arr[1] !== 4) { - $ERROR('#4: var x = [0,1,2,3,4]; var arr = x.slice(3,6); arr[1] === 4. Actual: ' + (arr[1])); -} - -//CHECK#5 -if (arr[3] !== undefined) { - $ERROR('#5: var x = [0,1,2,3,4]; var arr = x.slice(3,6); arr[3] === undefined. Actual: ' + (arr[3])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A1.2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A1.2_T1.js deleted file mode 100644 index 06aa4d3d4..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A1.2_T1.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.10_A1.2_T1; - * @section: 15.4.4.10; - * @assertion: If start is negative, use max(start + length, 0). - * If end is positive, use min(end, length); - * @description: length > end = abs(start), start < 0; -*/ - -var x = [0,1,2,3,4]; -var arr = x.slice(-3,3); - -//CHECK#1 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: var x = [0,1,2,3,4]; var arr = x.slice(-3,3); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#2 -if (arr.length !== 1) { - $ERROR('#2: var x = [0,1,2,3,4]; var arr = x.slice(-3,3); arr.length === 1. Actual: ' + (arr.length)); -} - -//CHECK#3 -if (arr[0] !== 2) { - $ERROR('#3: var x = [0,1,2,3,4]; var arr = x.slice(-3,3); arr[0] === 2. Actual: ' + (arr[0])); -} - -//CHECK#4 -if (arr[1] !== undefined) { - $ERROR('#4: var x = [0,1,2,3,4]; var arr = x.slice(-3,3); arr[1] === undefined. Actual: ' + (arr[1])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A1.2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A1.2_T2.js deleted file mode 100644 index 0bf4eb496..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A1.2_T2.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.10_A1.2_T2; - * @section: 15.4.4.10; - * @assertion: If start is negative, use max(start + length, 0). - * If end is positive, use min(end, length); - * @description: length = end > abs(start), start < 0; -*/ - -var x = [0,1,2,3,4]; -var arr = x.slice(-1,5); - -//CHECK#1 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: var x = [0,1,2,3,4]; var arr = x.slice(-1,5); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#2 -if (arr.length !== 1) { - $ERROR('#2: var x = [0,1,2,3,4]; var arr = x.slice(-1,5); arr.length === 1. Actual: ' + (arr.length)); -} - -//CHECK#3 -if (arr[0] !== 4) { - $ERROR('#3: var x = [0,1,2,3,4]; var arr = x.slice(-1,5); arr[0] === 4. Actual: ' + (arr[0])); -} - -//CHECK#4 -if (arr[1] !== undefined) { - $ERROR('#4: var x = [0,1,2,3,4]; var arr = x.slice(-1,5); arr[1] === undefined. Actual: ' + (arr[1])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A1.2_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A1.2_T3.js deleted file mode 100644 index 53049294b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A1.2_T3.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.10_A1.2_T3; - * @section: 15.4.4.10; - * @assertion: If start is negative, use max(start + length, 0). - * If end is positive, use min(end, length); - * @description: abs(start) = length > end > 0, start < 0; -*/ - -var x = [0,1,2,3,4]; -var arr = x.slice(-5,1); - -//CHECK#1 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: var x = [0,1,2,3,4]; var arr = x.slice(-5,1); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#2 -if (arr.length !== 1) { - $ERROR('#2: var x = [0,1,2,3,4]; var arr = x.slice(-5,1); arr.length === 1. Actual: ' + (arr.length)); -} - -//CHECK#3 -if (arr[0] !== 0) { - $ERROR('#3: var x = [0,1,2,3,4]; var arr = x.slice(-5,1); arr[0] === 0. Actual: ' + (arr[0])); -} - -//CHECK#4 -if (arr[1] !== undefined) { - $ERROR('#4: var x = [0,1,2,3,4]; var arr = x.slice(-5,1); arr[1] === undefined. Actual: ' + (arr[1])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A1.2_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A1.2_T4.js deleted file mode 100644 index cc70aa9d1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A1.2_T4.js +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.10_A1.2_T4; - * @section: 15.4.4.10; - * @assertion: If start is negative, use max(start + length, 0). - * If end is positive, use min(end, length); - * @description: abs(start) > length = end > 0, start < 0; -*/ - -var x = [0,1,2,3,4]; -var arr = x.slice(-9,5); - -//CHECK#1 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: var x = [0,1,2,3,4]; var arr = x.slice(-9,5); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#2 -if (arr.length !== 5) { - $ERROR('#2: var x = [0,1,2,3,4]; var arr = x.slice(-9,5); arr.length === 5. Actual: ' + (arr.length)); -} - -//CHECK#3 -if (arr[0] !== 0) { - $ERROR('#3: var x = [0,1,2,3,4]; var arr = x.slice(-9,5); arr[0] === 0. Actual: ' + (arr[0])); -} - -//CHECK#4 -if (arr[1] !== 1) { - $ERROR('#4: var x = [0,1,2,3,4]; var arr = x.slice(-9,5); arr[1] === 1. Actual: ' + (arr[1])); -} - -//CHECK#5 -if (arr[2] !== 2) { - $ERROR('#5: var x = [0,1,2,3,4]; var arr = x.slice(-9,5); arr[2] === 2. Actual: ' + (arr[2])); -} - -//CHECK#6 -if (arr[3] !== 3) { - $ERROR('#6: var x = [0,1,2,3,4]; var arr = x.slice(-9,5); arr[3] === 3. Actual: ' + (arr[3])); -} - -//CHECK#7 -if (arr[4] !== 4) { - $ERROR('#7: var x = [0,1,2,3,4]; var arr = x.slice(-9,5); arr[4] === 4. Actual: ' + (arr[4])); -} - -//CHECK#8 -if (arr[5] !== undefined) { - $ERROR('#8: var x = [0,1,2,3,4]; var arr = x.slice(-9,5); arr[5] === undefined. Actual: ' + (arr[5])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A1.3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A1.3_T1.js deleted file mode 100644 index 414352ce8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A1.3_T1.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.10_A1.3_T1; - * @section: 15.4.4.10; - * @assertion: If start is positive, use min(start, length). - * If end is negative, use max(end + length, 0); - * @description: length > abs(end) > start = 0, end < 0; -*/ - -var x = [0,1,2,3,4]; -var arr = x.slice(0,-2); - -//CHECK#1 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: var x = [0,1,2,3,4]; var arr = x.slice(0,-2); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#2 -if (arr.length !== 3) { - $ERROR('#2: var x = [0,1,2,3,4]; var arr = x.slice(0,-2); arr.length === 3. Actual: ' + (arr.length)); -} - -//CHECK#3 -if (arr[0] !== 0) { - $ERROR('#3: var x = [0,1,2,3,4]; var arr = x.slice(0,-2); arr[0] === 0. Actual: ' + (arr[0])); -} - -//CHECK#4 -if (arr[1] !== 1) { - $ERROR('#4: var x = [0,1,2,3,4]; var arr = x.slice(0,-2); arr[1] === 1. Actual: ' + (arr[1])); -} - -//CHECK#5 -if (arr[2] !== 2) { - $ERROR('#5: var x = [0,1,2,3,4]; var arr = x.slice(0,-2); arr[2] === 2. Actual: ' + (arr[2])); -} - -//CHECK#6 -if (arr[3] !== undefined) { - $ERROR('#6: var x = [0,1,2,3,4]; var arr = x.slice(0,-2); arr[3] === undefined. Actual: ' + (arr[3])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A1.3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A1.3_T2.js deleted file mode 100644 index 93b010c45..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A1.3_T2.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.10_A1.3_T2; - * @section: 15.4.4.10; - * @assertion: If start is positive, use min(start, length). - * If end is negative, use max(end + length, 0); - * @description: length > abs(end) > start > 0, end < 0; -*/ - -var x = [0,1,2,3,4]; -var arr = x.slice(1,-4); - -//CHECK#1 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: var x = [0,1,2,3,4]; var arr = x.slice(1,-4); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#2 -if (arr.length !== 0) { - $ERROR('#2: var x = [0,1,2,3,4]; var arr = x.slice(1,-4); arr.length === 0. Actual: ' + (arr.length)); -} - -//CHECK#3 -if (arr[0] !== undefined) { - $ERROR('#3: var x = [0,1,2,3,4]; var arr = x.slice(1,-4); arr[0] === undefined. Actual: ' + (arr[0])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A1.3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A1.3_T3.js deleted file mode 100644 index 3ec1f1fa6..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A1.3_T3.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.10_A1.3_T3; - * @section: 15.4.4.10; - * @assertion: If start is positive, use min(start, length). - * If end is negative, use max(end + length, 0); - * @description: length = abs(end) > start = 0, end < 0; -*/ - -var x = [0,1,2,3,4]; -var arr = x.slice(0,-5); - -//CHECK#1 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: var x = [0,1,2,3,4]; var arr = x.slice(0,-5); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#2 -if (arr.length !== 0) { - $ERROR('#2: var x = [0,1,2,3,4]; var arr = x.slice(0,-5); arr.length === 0. Actual: ' + (arr.length)); -} - -//CHECK#3 -if (arr[0] !== undefined) { - $ERROR('#3: var x = [0,1,2,3,4]; var arr = x.slice(0,-5); arr[0] === undefined. Actual: ' + (arr[0])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A1.3_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A1.3_T4.js deleted file mode 100644 index a3a1fdb7a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A1.3_T4.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.10_A1.3_T4; - * @section: 15.4.4.10; - * @assertion: If start is positive, use min(start, length). - * If end is negative, use max(end + length, 0); - * @description: abs(end) > length > start > 0, end < 0; -*/ - -var x = [0,1,2,3,4]; -var arr = x.slice(4,-9); - -//CHECK#1 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: var x = [0,1,2,3,4]; var arr = x.slice(4,-9); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#2 -if (arr.length !== 0) { - $ERROR('#2: var x = [0,1,2,3,4]; var arr = x.slice(4,-9); arr.length === 0. Actual: ' + (arr.length)); -} - -//CHECK#3 -if (arr[0] !== undefined) { - $ERROR('#3: var x = [0,1,2,3,4]; var arr = x.slice(4,-9); arr[0] === undefined. Actual: ' + (arr[0])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A1.4_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A1.4_T1.js deleted file mode 100644 index 575f435cc..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A1.4_T1.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.10_A1.4_T1; - * @section: 15.4.4.10; - * @assertion: If start is negative, use max(start + length, 0). - * If end is negative, use max(end + length, 0); - * @description: -length = start < end < 0; -*/ - -var x = [0,1,2,3,4]; -var arr = x.slice(-5,-2); - -//CHECK#1 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: var x = [0,1,2,3,4]; var arr = x.slice(-5,-2); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#2 -if (arr.length !== 3) { - $ERROR('#2: var x = [0,1,2,3,4]; var arr = x.slice(-5,-2); arr.length === 3. Actual: ' + (arr.length)); -} - -//CHECK#3 -if (arr[0] !== 0) { - $ERROR('#3: var x = [0,1,2,3,4]; var arr = x.slice(-5,-2); arr[0] === 0. Actual: ' + (arr[0])); -} - -//CHECK#4 -if (arr[1] !== 1) { - $ERROR('#4: var x = [0,1,2,3,4]; var arr = x.slice(-5,-2); arr[1] === 1. Actual: ' + (arr[1])); -} - -//CHECK#5 -if (arr[2] !== 2) { - $ERROR('#5: var x = [0,1,2,3,4]; var arr = x.slice(-5,-2); arr[2] === 2. Actual: ' + (arr[2])); -} - -//CHECK#6 -if (arr[3] !== undefined) { - $ERROR('#6: var x = [0,1,2,3,4]; var arr = x.slice(-5,-2); arr[3] === undefined. Actual: ' + (arr[3])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A1.4_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A1.4_T2.js deleted file mode 100644 index 58463b997..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A1.4_T2.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.10_A1.4_T2; - * @section: 15.4.4.10; - * @assertion: If start is negative, use max(start + length, 0). - * If end is negative, use max(end + length, 0); - * @description: -length < start < end < 0; -*/ - -var x = [0,1,2,3,4]; -var arr = x.slice(-3,-1); - -//CHECK#1 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: var x = [0,1,2,3,4]; var arr = x.slice(-3,-1); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#2 -if (arr.length !== 2) { - $ERROR('#2: var x = [0,1,2,3,4]; var arr = x.slice(-3,-1); arr.length === 2. Actual: ' + (arr.length)); -} - -//CHECK#3 -if (arr[0] !== 2) { - $ERROR('#3: var x = [0,1,2,3,4]; var arr = x.slice(-3,-1); arr[0] === 2. Actual: ' + (arr[0])); -} - -//CHECK#4 -if (arr[1] !== 3) { - $ERROR('#4: var x = [0,1,2,3,4]; var arr = x.slice(-3,-1); arr[1] === 3. Actual: ' + (arr[1])); -} - -//CHECK#5 -if (arr[2] !== undefined) { - $ERROR('#5: var x = [0,1,2,3,4]; var arr = x.slice(-3,-1); arr[2] === undefined. Actual: ' + (arr[2])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A1.4_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A1.4_T3.js deleted file mode 100644 index 257c9fa76..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A1.4_T3.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.10_A1.4_T3; - * @section: 15.4.4.10; - * @assertion: If start is negative, use max(start + length, 0). - * If end is negative, use max(end + length, 0); - * @description: start < -length < end < 0; -*/ - -var x = [0,1,2,3,4]; -var arr = x.slice(-9,-1); - -//CHECK#1 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: var x = [0,1,2,3,4]; var arr = x.slice(-9,-1); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#2 -if (arr.length !== 4) { - $ERROR('#2: var x = [0,1,2,3,4]; var arr = x.slice(-9,-1); arr.length === 4. Actual: ' + (arr.length)); -} - -//CHECK#3 -if (arr[0] !== 0) { - $ERROR('#3: var x = [0,1,2,3,4]; var arr = x.slice(-9,-1); arr[0] === 0. Actual: ' + (arr[0])); -} - -//CHECK#4 -if (arr[1] !== 1) { - $ERROR('#4: var x = [0,1,2,3,4]; var arr = x.slice(-9,-1); arr[1] === 1. Actual: ' + (arr[1])); -} - -//CHECK#5 -if (arr[2] !== 2) { - $ERROR('#5: var x = [0,1,2,3,4]; var arr = x.slice(-9,-1); arr[2] === 2. Actual: ' + (arr[2])); -} - -//CHECK#6 -if (arr[3] !== 3) { - $ERROR('#6: var x = [0,1,2,3,4]; var arr = x.slice(-9,-1); arr[3] === 3. Actual: ' + (arr[3])); -} - -//CHECK#7 -if (arr[4] !== undefined) { - $ERROR('#7: var x = [0,1,2,3,4]; var arr = x.slice(-9,-1); arr[4] === undefined. Actual: ' + (arr[4])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A1.4_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A1.4_T4.js deleted file mode 100644 index b5e066ddc..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A1.4_T4.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.10_A1.4_T4; - * @section: 15.4.4.10; - * @assertion: If start is negative, use max(start + length, 0). - * If end is negative, use max(end + length, 0); - * @description: start = end < -length; -*/ - -var x = [0,1,2,3,4]; -var arr = x.slice(-6,-6); - -//CHECK#1 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: var x = [0,1,2,3,4]; var arr = x.slice(-6,-6); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#2 -if (arr.length !== 0) { - $ERROR('#2: var x = [0,1,2,3,4]; var arr = x.slice(-6,-6); arr.length === 0. Actual: ' + (arr.length)); -} - -//CHECK#3 -if (arr[0] !== undefined) { - $ERROR('#3: var x = [0,1,2,3,4]; var arr = x.slice(-6,-6); arr[0] === undefined. Actual: ' + (arr[0])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A1.5_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A1.5_T1.js deleted file mode 100644 index cc85371d7..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A1.5_T1.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.10_A1.5_T1; - * @section: 15.4.4.10; - * @assertion: If end is undefined use length; - * @description: end === undefined; -*/ - -var x = [0,1,2,3,4]; -var arr = x.slice(3, undefined); - -//CHECK#1 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: var x = [0,1,2,3,4]; var arr = x.slice(3, undefined); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#2 -if (arr.length !== 2) { - $ERROR('#2: var x = [0,1,2,3,4]; var arr = x.slice(3, undefined); arr.length === 2. Actual: ' + (arr.length)); -} - -//CHECK#3 -if (arr[0] !== 3) { - $ERROR('#3: var x = [0,1,2,3,4]; var arr = x.slice(3, undefined); arr[0] === 3. Actual: ' + (arr[0])); -} - -//CHECK#4 -if (arr[1] !== 4) { - $ERROR('#4: var x = [0,1,2,3,4]; var arr = x.slice(3, undefined); arr[1] === 4. Actual: ' + (arr[1])); -} - -//CHECK#5 -if (arr[2] !== undefined) { - $ERROR('#5: var x = [0,1,2,3,4]; var arr = x.slice(3, undefined); arr[2] === undefined. Actual: ' + (arr[2])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A1.5_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A1.5_T2.js deleted file mode 100644 index ee6d41129..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A1.5_T2.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.10_A1.5_T2; - * @section: 15.4.4.10; - * @assertion: If end is undefined use length; - * @description: end is absent; -*/ - -var x = [0,1,2,3,4]; -var arr = x.slice(-2); - -//CHECK#1 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: var x = [0,1,2,3,4]; var arr = x.slice(-2); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#2 -if (arr.length !== 2) { - $ERROR('#2: var x = [0,1,2,3,4]; var arr = x.slice(-2); arr.length === 2. Actual: ' + (arr.length)); -} - -//CHECK#3 -if (arr[0] !== 3) { - $ERROR('#3: var x = [0,1,2,3,4]; var arr = x.slice(-2); arr[0] === 3. Actual: ' + (arr[0])); -} - -//CHECK#4 -if (arr[1] !== 4) { - $ERROR('#4: var x = [0,1,2,3,4]; var arr = x.slice(-2); arr[1] === 4. Actual: ' + (arr[1])); -} - -//CHECK#5 -if (arr[2] !== undefined) { - $ERROR('#5: var x = [0,1,2,3,4]; var arr = x.slice(-2); arr[2] === undefined. Actual: ' + (arr[2])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A2.1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A2.1_T1.js deleted file mode 100644 index 8eb1c1397..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A2.1_T1.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.10_A2.1_T1; - * @section: 15.4.4.10; - * @assertion: Operator use ToInteger from start; - * @description: start is not integer; -*/ - -var x = [0,1,2,3,4]; -var arr = x.slice(2.5,4); - -//CHECK#1 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: var x = [0,1,2,3,4]; var arr = x.slice(2.5,4); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#2 -if (arr.length !== 2) { - $ERROR('#2: var x = [0,1,2,3,4]; var arr = x.slice(2.5,4); arr.length === 2. Actual: ' + (arr.length)); -} - -//CHECK#3 -if (arr[0] !== 2) { - $ERROR('#3: var x = [0,1,2,3,4]; var arr = x.slice(2.5,4); arr[0] === 2. Actual: ' + (arr[0])); -} - -//CHECK#4 -if (arr[1] !== 3) { - $ERROR('#4: var x = [0,1,2,3,4]; var arr = x.slice(2.5,4); arr[1] === 3. Actual: ' + (arr[1])); -} - -//CHECK#5 -if (arr[3] !== undefined) { - $ERROR('#5: var x = [0,1,2,3,4]; var arr = x.slice(2.5,4); arr[3] === undefined. Actual: ' + (arr[3])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A2.1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A2.1_T2.js deleted file mode 100644 index 894e50dd6..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A2.1_T2.js +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.10_A2.1_T2; - * @section: 15.4.4.10; - * @assertion: Operator use ToInteger from start; - * @description: start = NaN; -*/ - -var x = [0,1,2,3,4]; -var arr = x.slice(NaN,3); - -//CHECK#1 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: var x = [0,1,2,3,4]; var arr = x.slice(NaN,3); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#2 -if (arr.length !== 3) { - $ERROR('#2: var x = [0,1,2,3,4]; var arr = x.slice(NaN,3); arr.length === 3. Actual: ' + (arr.length)); -} - -//CHECK#3 -if (arr[0] !== 0) { - $ERROR('#3: var x = [0,1,2,3,4]; var arr = x.slice(NaN,3); arr[0] === 0. Actual: ' + (arr[0])); -} - -//CHECK#4 -if (arr[1] !== 1) { - $ERROR('#4: var x = [0,1,2,3,4]; var arr = x.slice(NaN,3); arr[1] === 1. Actual: ' + (arr[1])); -} - -//CHECK#5 -if (arr[2] !== 2) { - $ERROR('#5: var x = [0,1,2,3,4]; var arr = x.slice(NaN,3); arr[2] === 2. Actual: ' + (arr[2])); -} - -//CHECK#6 -if (arr[3] !== undefined) { - $ERROR('#6: var x = [0,1,2,3,4]; var arr = x.slice(NaN,3); arr[3] === undefined. Actual: ' + (arr[3])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A2.1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A2.1_T3.js deleted file mode 100644 index b8fe8a091..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A2.1_T3.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.10_A2.1_T3; - * @section: 15.4.4.10; - * @assertion: Operator use ToInteger from start; - * @description: start = Infinity; -*/ - -var x = [0,1,2,3,4]; -var arr = x.slice(Number.POSITIVE_INFINITY,3); - -//CHECK#1 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: var x = [0,1,2,3,4]; var arr = x.slice(Number.POSITIVE_INFINITY,3); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#2 -if (arr.length !== 0) { - $ERROR('#2: var x = [0,1,2,3,4]; var arr = x.slice(Number.POSITIVE_INFINITY,3); arr.length === 0. Actual: ' + (arr.length)); -} - -//CHECK#3 -if (arr[0] !== undefined) { - $ERROR('#3: var x = [0,1,2,3,4]; var arr = x.slice(Number.POSITIVE_INFINITY,3); arr[0] === undefined. Actual: ' + (arr[0])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A2.1_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A2.1_T4.js deleted file mode 100644 index 75b9c9525..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A2.1_T4.js +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.10_A2.1_T4; - * @section: 15.4.4.10; - * @assertion: Operator use ToInteger from start; - * @description: start = -Infinity; -*/ - -var x = [0,1,2,3,4]; -var arr = x.slice(Number.NEGATIVE_INFINITY,3); - -//CHECK#1 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: var x = [0,1,2,3,4]; var arr = x.slice(Number.NEGATIVE_INFINITY,3); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#2 -if (arr.length !== 3) { - $ERROR('#2: var x = [0,1,2,3,4]; var arr = x.slice(Number.NEGATIVE_INFINITY,3); arr.length === 3. Actual: ' + (arr.length)); -} - -//CHECK#3 -if (arr[0] !== 0) { - $ERROR('#3: var x = [0,1,2,3,4]; var arr = x.slice(Number.NEGATIVE_INFINITY,3); arr[0] === 0. Actual: ' + (arr[0])); -} - -//CHECK#4 -if (arr[1] !== 1) { - $ERROR('#4: var x = [0,1,2,3,4]; var arr = x.slice(Number.NEGATIVE_INFINITY,3); arr[1] === 1. Actual: ' + (arr[1])); -} - -//CHECK#5 -if (arr[2] !== 2) { - $ERROR('#5: var x = [0,1,2,3,4]; var arr = x.slice(Number.NEGATIVE_INFINITY,3); arr[2] === 2. Actual: ' + (arr[2])); -} - -//CHECK#6 -if (arr[3] !== undefined) { - $ERROR('#6: var x = [0,1,2,3,4]; var arr = x.slice(Number.NEGATIVE_INFINITY,3); arr[3] === undefined. Actual: ' + (arr[3])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A2.1_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A2.1_T5.js deleted file mode 100644 index dddc5c630..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A2.1_T5.js +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.10_A2.1_T5; - * @section: 15.4.4.10; - * @assertion: Operator use ToInteger from start; - * @description: ToInteger use ToNumber; -*/ - -var x = [0,1,2,3,4]; -var arr = x.slice({valueOf: function() {return 0}, toString: function() {return 3}},3); - -//CHECK#1 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: var x = [0,1,2,3,4]; var arr = x.slice({valueOf: function() {return 0}, toString: function() {return 3}},3); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#2 -if (arr.length !== 3) { - $ERROR('#2: var x = [0,1,2,3,4]; var arr = x.slice({valueOf: function() {return 0}, toString: function() {return 3}},3); arr.length === 3. Actual: ' + (arr.length)); -} - -//CHECK#3 -if (arr[0] !== 0) { - $ERROR('#3: var x = [0,1,2,3,4]; var arr = x.slice({valueOf: function() {return 0}, toString: function() {return 3}},3); arr[0] === 0. Actual: ' + (arr[0])); -} - -//CHECK#4 -if (arr[1] !== 1) { - $ERROR('#4: var x = [0,1,2,3,4]; var arr = x.slice({valueOf: function() {return 0}, toString: function() {return 3}},3); arr[1] === 1. Actual: ' + (arr[1])); -} - -//CHECK#5 -if (arr[2] !== 2) { - $ERROR('#5: var x = [0,1,2,3,4]; var arr = x.slice({valueOf: function() {return 0}, toString: function() {return 3}},3); arr[2] === 2. Actual: ' + (arr[2])); -} - -//CHECK#6 -if (arr[3] !== undefined) { - $ERROR('#6: var x = [0,1,2,3,4]; var arr = x.slice({valueOf: function() {return 0}, toString: function() {return 3}},3); arr[3] === undefined. Actual: ' + (arr[3])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A2.2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A2.2_T1.js deleted file mode 100644 index 9a4997d7f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A2.2_T1.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.10_A2.2_T1; - * @section: 15.4.4.10; - * @assertion: Operator use ToInteger from end; - * @description: end is not integer; -*/ - -var x = [0,1,2,3,4]; -var arr = x.slice(2,4.5); - -//CHECK#1 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: var x = [0,1,2,3,4]; var arr = x.slice(2,4.5); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#2 -if (arr.length !== 2) { - $ERROR('#2: var x = [0,1,2,3,4]; var arr = x.slice(2,4.5); arr.length === 2. Actual: ' + (arr.length)); -} - -//CHECK#3 -if (arr[0] !== 2) { - $ERROR('#3: var x = [0,1,2,3,4]; var arr = x.slice(2,4.5); arr[0] === 2. Actual: ' + (arr[0])); -} - -//CHECK#4 -if (arr[1] !== 3) { - $ERROR('#4: var x = [0,1,2,3,4]; var arr = x.slice(2,4.5); arr[1] === 3. Actual: ' + (arr[1])); -} - -//CHECK#5 -if (arr[3] !== undefined) { - $ERROR('#5: var x = [0,1,2,3,4]; var arr = x.slice(2,4.5); arr[3] === undefined. Actual: ' + (arr[3])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A2.2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A2.2_T2.js deleted file mode 100644 index 740a9e8af..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A2.2_T2.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.10_A2.2_T2; - * @section: 15.4.4.10; - * @assertion: Operator use ToInteger from end; - * @description: end = NaN; -*/ - -var x = [0,1,2,3,4]; -var arr = x.slice(0,NaN); - -//CHECK#1 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: var x = [0,1,2,3,4]; var arr = x.slice(0,NaN); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#2 -if (arr.length !== 0) { - $ERROR('#2: var x = [0,1,2,3,4]; var arr = x.slice(0,NaN); arr.length === 0. Actual: ' + (arr.length)); -} - -//CHECK#3 -if (arr[0] !== undefined) { - $ERROR('#3: var x = [0,1,2,3,4]; var arr = x.slice(0,NaN); arr[0] === undefined. Actual: ' + (arr[0])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A2.2_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A2.2_T3.js deleted file mode 100644 index 0fd7cc242..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A2.2_T3.js +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.10_A2.2_T3; - * @section: 15.4.4.10; - * @assertion: Operator use ToInteger from end; - * @description: end = Infinity; -*/ - -var x = [0,1,2,3,4]; -var arr = x.slice(0,Number.POSITIVE_INFINITY); - -//CHECK#1 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: var x = [0,1,2,3,4]; var arr = x.slice(0,Number.POSITIVE_INFINITY); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#2 -if (arr.length !== 5) { - $ERROR('#2: var x = [0,1,2,3,4]; var arr = x.slice(0,Number.POSITIVE_INFINITY); arr.length === 5. Actual: ' + (arr.length)); -} - -//CHECK#3 -if (arr[0] !== 0) { - $ERROR('#3: var x = [0,1,2,3,4]; var arr = x.slice(0,Number.POSITIVE_INFINITY); arr[0] === 0. Actual: ' + (arr[0])); -} - -//CHECK#4 -if (arr[1] !== 1) { - $ERROR('#4: var x = [0,1,2,3,4]; var arr = x.slice(0,Number.POSITIVE_INFINITY); arr[1] === 1. Actual: ' + (arr[1])); -} - -//CHECK#5 -if (arr[2] !== 2) { - $ERROR('#5: var x = [0,1,2,3,4]; var arr = x.slice(0,Number.POSITIVE_INFINITY); arr[2] === 2. Actual: ' + (arr[2])); -} - -//CHECK#6 -if (arr[3] !== 3) { - $ERROR('#6: var x = [0,1,2,3,4]; var arr = x.slice(0,Number.POSITIVE_INFINITY); arr[3] === 3. Actual: ' + (arr[3])); -} - -//CHECK#7 -if (arr[4] !== 4) { - $ERROR('#7: var x = [0,1,2,3,4]; var arr = x.slice(0,Number.POSITIVE_INFINITY); arr[4] === 4. Actual: ' + (arr[4])); -} - -//CHECK#8 -if (arr[5] !== undefined) { - $ERROR('#8: var x = [0,1,2,3,4]; var arr = x.slice(0,Number.POSITIVE_INFINITY); arr[5] === undefined. Actual: ' + (arr[5])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A2.2_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A2.2_T4.js deleted file mode 100644 index 7a8b9fbd8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A2.2_T4.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.10_A2.2_T4; - * @section: 15.4.4.10; - * @assertion: Operator use ToInteger from end; - * @description: end = -Infinity; -*/ - -var x = [0,1,2,3,4]; -var arr = x.slice(0,Number.NEGATIVE_INFINITY); - -//CHECK#1 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: var x = [0,1,2,3,4]; var arr = x.slice(0,Number.NEGATIVE_INFINITY); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#2 -if (arr.length !== 0) { - $ERROR('#2: var x = [0,1,2,3,4]; var arr = x.slice(0,Number.NEGATIVE_INFINITY); arr.length === 0. Actual: ' + (arr.length)); -} - -//CHECK#3 -if (arr[0] !== undefined) { - $ERROR('#3: var x = [0,1,2,3,4]; var arr = x.slice(0,Number.NEGATIVE_INFINITY); arr[0] === undefined. Actual: ' + (arr[0])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A2.2_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A2.2_T5.js deleted file mode 100644 index d47420c59..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A2.2_T5.js +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.10_A2.2_T5; - * @section: 15.4.4.10; - * @assertion: Operator use ToInteger from end; - * @description: ToInteger use ToNumber; -*/ - -var x = [0,1,2,3,4]; -var arr = x.slice(0,{valueOf: function() {return 3}, toString: function() {return 0}}); - -//CHECK#1 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: var x = [0,1,2,3,4]; var arr = x.slice(0,{valueOf: function() {return 3}, toString: function() {return 0}}); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#2 -if (arr.length !== 3) { - $ERROR('#2: var x = [0,1,2,3,4]; var arr = x.slice(0,{valueOf: function() {return 3}, toString: function() {return 0}}); arr.length === 3. Actual: ' + (arr.length)); -} - -//CHECK#3 -if (arr[0] !== 0) { - $ERROR('#3: var x = [0,1,2,3,4]; var arr = x.slice(0,{valueOf: function() {return 3}, toString: function() {return 0}}); arr[0] === 0. Actual: ' + (arr[0])); -} - -//CHECK#4 -if (arr[1] !== 1) { - $ERROR('#4: var x = [0,1,2,3,4]; var arr = x.slice(0,{valueOf: function() {return 3}, toString: function() {return 0}}); arr[1] === 1. Actual: ' + (arr[1])); -} - -//CHECK#5 -if (arr[2] !== 2) { - $ERROR('#5: var x = [0,1,2,3,4]; var arr = x.slice(0,{valueOf: function() {return 3}, toString: function() {return 0}}); arr[2] === 2. Actual: ' + (arr[2])); -} - -//CHECK#6 -if (arr[3] !== undefined) { - $ERROR('#6: var x = [0,1,2,3,4]; var arr = x.slice(0,{valueOf: function() {return 3}, toString: function() {return 0}}); arr[3] === undefined. Actual: ' + (arr[3])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A2_T1.js deleted file mode 100644 index 2a744d8ec..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A2_T1.js +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.10_A2_T1; - * @section: 15.4.4.10; - * @assertion: The slice function is intentionally generic. - * It does not require that its this value be an Array object; - * @description: If start is positive, use min(start, length). - * If end is positive, use min(end, length); -*/ - -var obj = {}; -obj.slice = Array.prototype.slice; -obj[0] = 0; -obj[1] = 1; -obj[2] = 2; -obj[3] = 3; -obj[4] = 4; -obj.length = 5; -var arr = obj.slice(0,3); - -//CHECK#1 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: var obj = {}; obj.slice = Array.prototype.slice; obj[0] = 0; obj[1] = 1; obj[2] = 2; obj[3] = 3; obj[4] = 4; obj.length = 5; var arr = obj.slice(0,3); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#2 -if (arr.length !== 3) { - $ERROR('#2: var obj = {}; obj.slice = Array.prototype.slice; obj[0] = 0; obj[1] = 1; obj[2] = 2; obj[3] = 3; obj[4] = 4; obj.length = 5; var arr = obj.slice(0,3); arr.length === 3. Actual: ' + (arr.length)); -} - -//CHECK#3 -if (arr[0] !== 0) { - $ERROR('#3: var obj = {}; obj.slice = Array.prototype.slice; obj[0] = 0; obj[1] = 1; obj[2] = 2; obj[3] = 3; obj[4] = 4; obj.length = 5; var arr = obj.slice(0,3); arr[0] === 0. Actual: ' + (arr[0])); -} - -//CHECK#4 -if (arr[1] !== 1) { - $ERROR('#4: var obj = {}; obj.slice = Array.prototype.slice; obj[0] = 0; obj[1] = 1; obj[2] = 2; obj[3] = 3; obj[4] = 4; obj.length = 5; var arr = obj.slice(0,3); arr[1] === 1. Actual: ' + (arr[1])); -} - -//CHECK#5 -if (arr[2] !== 2) { - $ERROR('#5: var obj = {}; obj.slice = Array.prototype.slice; obj[0] = 0; obj[1] = 1; obj[2] = 2; obj[3] = 3; obj[4] = 4; obj.length = 5; var arr = obj.slice(0,3); arr[2] === 2. Actual: ' + (arr[2])); -} - -//CHECK#6 -if (arr[3] !== undefined) { - $ERROR('#6: var obj = {}; obj.slice = Array.prototype.slice; obj[0] = 0; obj[1] = 1; obj[2] = 2; obj[3] = 3; obj[4] = 4; obj.length = 5; var arr = obj.slice(0,3); arr[3] === undefined. Actual: ' + (arr[3])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A2_T2.js deleted file mode 100644 index 27ea34de5..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A2_T2.js +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.10_A2_T2; - * @section: 15.4.4.10; - * @assertion: The slice function is intentionally generic. - * It does not require that its this value be an Array object; - * @description: If start is negative, use max(start + length, 0). - * If end is positive, use min(end, length); -*/ - -var obj = {}; -obj.slice = Array.prototype.slice; -obj[0] = 0; -obj[1] = 1; -obj[2] = 2; -obj[3] = 3; -obj[4] = 4; -obj.length = 5; -var arr = obj.slice(-5,3); - -//CHECK#1 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: var obj = {}; obj.slice = Array.prototype.slice; obj[0] = 0; obj[1] = 1; obj[2] = 2; obj[3] = 3; obj[4] = 4; obj.length = 5; var arr = obj.slice(-5,3); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#2 -if (arr.length !== 3) { - $ERROR('#2: var obj = {}; obj.slice = Array.prototype.slice; obj[0] = 0; obj[1] = 1; obj[2] = 2; obj[3] = 3; obj[4] = 4; obj.length = 5; var arr = obj.slice(-5,3); arr.length === 3. Actual: ' + (arr.length)); -} - -//CHECK#3 -if (arr[0] !== 0) { - $ERROR('#3: var obj = {}; obj.slice = Array.prototype.slice; obj[0] = 0; obj[1] = 1; obj[2] = 2; obj[3] = 3; obj[4] = 4; obj.length = 5; var arr = obj.slice(-5,3); arr[0] === 0. Actual: ' + (arr[0])); -} - -//CHECK#4 -if (arr[1] !== 1) { - $ERROR('#4: var obj = {}; obj.slice = Array.prototype.slice; obj[0] = 0; obj[1] = 1; obj[2] = 2; obj[3] = 3; obj[4] = 4; obj.length = 5; var arr = obj.slice(-5,3); arr[1] === 1. Actual: ' + (arr[1])); -} - -//CHECK#5 -if (arr[2] !== 2) { - $ERROR('#5: var obj = {}; obj.slice = Array.prototype.slice; obj[0] = 0; obj[1] = 1; obj[2] = 2; obj[3] = 3; obj[4] = 4; obj.length = 5; var arr = obj.slice(-5,3); arr[2] === 2. Actual: ' + (arr[2])); -} - -//CHECK#6 -if (arr[3] !== undefined) { - $ERROR('#6: var obj = {}; obj.slice = Array.prototype.slice; obj[0] = 0; obj[1] = 1; obj[2] = 2; obj[3] = 3; obj[4] = 4; obj.length = 5; var arr = obj.slice(-5,3); arr[3] === undefined. Actual: ' + (arr[3])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A2_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A2_T3.js deleted file mode 100644 index 458c70320..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A2_T3.js +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.10_A2_T3; - * @section: 15.4.4.10; - * @assertion: The slice function is intentionally generic. - * It does not require that its this value be an Array object; - * @description: If start is positive, use min(start, length). - * If end is negative, use max(end + length, 0); -*/ - -var obj = {}; -obj.slice = Array.prototype.slice; -obj[0] = 0; -obj[1] = 1; -obj[2] = 2; -obj[3] = 3; -obj[4] = 4; -obj.length = 5; -var arr = obj.slice(0,-2); - -//CHECK#1 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: var obj = {}; obj.slice = Array.prototype.slice; obj[0] = 0; obj[1] = 1; obj[2] = 2; obj[3] = 3; obj[4] = 4; obj.length = 5; var arr = obj.slice(0,-2); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#2 -if (arr.length !== 3) { - $ERROR('#2: var obj = {}; obj.slice = Array.prototype.slice; obj[0] = 0; obj[1] = 1; obj[2] = 2; obj[3] = 3; obj[4] = 4; obj.length = 5; var arr = obj.slice(0,-2); arr.length === 3. Actual: ' + (arr.length)); -} - -//CHECK#3 -if (arr[0] !== 0) { - $ERROR('#3: var obj = {}; obj.slice = Array.prototype.slice; obj[0] = 0; obj[1] = 1; obj[2] = 2; obj[3] = 3; obj[4] = 4; obj.length = 5; var arr = obj.slice(0,-2); arr[0] === 0. Actual: ' + (arr[0])); -} - -//CHECK#4 -if (arr[1] !== 1) { - $ERROR('#4: var obj = {}; obj.slice = Array.prototype.slice; obj[0] = 0; obj[1] = 1; obj[2] = 2; obj[3] = 3; obj[4] = 4; obj.length = 5; var arr = obj.slice(0,-2); arr[1] === 1. Actual: ' + (arr[1])); -} - -//CHECK#5 -if (arr[2] !== 2) { - $ERROR('#5: var obj = {}; obj.slice = Array.prototype.slice; obj[0] = 0; obj[1] = 1; obj[2] = 2; obj[3] = 3; obj[4] = 4; obj.length = 5; var arr = obj.slice(0,-2); arr[2] === 2. Actual: ' + (arr[2])); -} - -//CHECK#6 -if (arr[3] !== undefined) { - $ERROR('#6: var obj = {}; obj.slice = Array.prototype.slice; obj[0] = 0; obj[1] = 1; obj[2] = 2; obj[3] = 3; obj[4] = 4; obj.length = 5; var arr = obj.slice(0,-2); arr[3] === undefined. Actual: ' + (arr[3])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A2_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A2_T4.js deleted file mode 100644 index 90912c6d8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A2_T4.js +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.10_A2_T4; - * @section: 15.4.4.10; - * @assertion: The slice function is intentionally generic. - * It does not require that its this value be an Array object; - * @description: If start is negative, use max(start + length, 0). - * If end is negative, use max(end + length, 0); -*/ - -var obj = {}; -obj.slice = Array.prototype.slice; -obj[0] = 0; -obj[1] = 1; -obj[2] = 2; -obj[3] = 3; -obj[4] = 4; -obj.length = 5; -var arr = obj.slice(-5,-2); - -//CHECK#1 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: var obj = {}; obj.slice = Array.prototype.slice; obj[0] = 0; obj[1] = 1; obj[2] = 2; obj[3] = 3; obj[4] = 4; obj.length = 5; var arr = obj.slice(-5,-2); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#2 -if (arr.length !== 3) { - $ERROR('#2: var obj = {}; obj.slice = Array.prototype.slice; obj[0] = 0; obj[1] = 1; obj[2] = 2; obj[3] = 3; obj[4] = 4; obj.length = 5; var arr = obj.slice(-5,-2); arr.length === 3. Actual: ' + (arr.length)); -} - -//CHECK#3 -if (arr[0] !== 0) { - $ERROR('#3: var obj = {}; obj.slice = Array.prototype.slice; obj[0] = 0; obj[1] = 1; obj[2] = 2; obj[3] = 3; obj[4] = 4; obj.length = 5; var arr = obj.slice(-5,-2); arr[0] === 0. Actual: ' + (arr[0])); -} - -//CHECK#4 -if (arr[1] !== 1) { - $ERROR('#4: var obj = {}; obj.slice = Array.prototype.slice; obj[0] = 0; obj[1] = 1; obj[2] = 2; obj[3] = 3; obj[4] = 4; obj.length = 5; var arr = obj.slice(-5,-2); arr[1] === 1. Actual: ' + (arr[1])); -} - -//CHECK#5 -if (arr[2] !== 2) { - $ERROR('#5: var obj = {}; obj.slice = Array.prototype.slice; obj[0] = 0; obj[1] = 1; obj[2] = 2; obj[3] = 3; obj[4] = 4; obj.length = 5; var arr = obj.slice(-5,-2); arr[2] === 2. Actual: ' + (arr[2])); -} - -//CHECK#6 -if (arr[3] !== undefined) { - $ERROR('#6: var obj = {}; obj.slice = Array.prototype.slice; obj[0] = 0; obj[1] = 1; obj[2] = 2; obj[3] = 3; obj[4] = 4; obj.length = 5; var arr = obj.slice(-5,-2); arr[3] === undefined. Actual: ' + (arr[3])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A2_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A2_T5.js deleted file mode 100644 index 2ed85ac9f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A2_T5.js +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.10_A2_T5; - * @section: 15.4.4.10; - * @assertion: The slice function is intentionally generic. - * It does not require that its this value be an Array object; - * @description: If end is undefined use length; -*/ - -var obj = {}; -obj.slice = Array.prototype.slice; -obj[0] = 0; -obj[1] = 1; -obj[2] = 2; -obj[3] = 3; -obj[4] = 4; -obj.length = 5; -var arr = obj.slice(2); - -//CHECK#1 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: var obj = {}; obj.slice = Array.prototype.slice; obj[0] = 0; obj[1] = 1; obj[2] = 2; obj[3] = 3; obj[4] = 4; obj.length = 5; var arr = obj.slice(2); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#2 -if (arr.length !== 3) { - $ERROR('#2: var obj = {}; obj.slice = Array.prototype.slice; obj[0] = 0; obj[1] = 1; obj[2] = 2; obj[3] = 3; obj[4] = 4; obj.length = 5; var arr = obj.slice(2); arr.length === 3. Actual: ' + (arr.length)); -} - -//CHECK#3 -if (arr[0] !== 2) { - $ERROR('#3: var obj = {}; obj.slice = Array.prototype.slice; obj[0] = 0; obj[1] = 1; obj[2] = 2; obj[3] = 3; obj[4] = 4; obj.length = 5; var arr = obj.slice(2); arr[0] === 2. Actual: ' + (arr[0])); -} - -//CHECK#4 -if (arr[1] !== 3) { - $ERROR('#4: var obj = {}; obj.slice = Array.prototype.slice; obj[0] = 0; obj[1] = 1; obj[2] = 2; obj[3] = 3; obj[4] = 4; obj.length = 5; var arr = obj.slice(2); arr[1] === 3. Actual: ' + (arr[1])); -} - -//CHECK#5 -if (arr[2] !== 4) { - $ERROR('#5: var obj = {}; obj.slice = Array.prototype.slice; obj[0] = 0; obj[1] = 1; obj[2] = 2; obj[3] = 3; obj[4] = 4; obj.length = 5; var arr = obj.slice(2); arr[2] === 4. Actual: ' + (arr[2])); -} - -//CHECK#6 -if (arr[3] !== undefined) { - $ERROR('#6: var obj = {}; obj.slice = Array.prototype.slice; obj[0] = 0; obj[1] = 1; obj[2] = 2; obj[3] = 3; obj[4] = 4; obj.length = 5; var arr = obj.slice(2); arr[3] === undefined. Actual: ' + (arr[3])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A2_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A2_T6.js deleted file mode 100644 index 9ffbb48d0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A2_T6.js +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.10_A2_T6; - * @section: 15.4.4.10; - * @assertion: The slice function is intentionally generic. - * It does not require that its this value be an Array object; - * @description: If end is undefined use length; -*/ - -var obj = {}; -obj.slice = Array.prototype.slice; -obj[0] = 0; -obj[1] = 1; -obj[2] = 2; -obj[3] = 3; -obj[4] = 4; -obj.length = 5; -var arr = obj.slice(2, undefined); - -//CHECK#1 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: var obj = {}; obj.slice = Array.prototype.slice; obj[0] = 0; obj[1] = 1; obj[2] = 2; obj[3] = 3; obj[4] = 4; obj.length = 5; var arr = obj.slice(2, undefined); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#2 -if (arr.length !== 3) { - $ERROR('#2: var obj = {}; obj.slice = Array.prototype.slice; obj[0] = 0; obj[1] = 1; obj[2] = 2; obj[3] = 3; obj[4] = 4; obj.length = 5; var arr = obj.slice(2, undefined); arr.length === 3. Actual: ' + (arr.length)); -} - -//CHECK#3 -if (arr[0] !== 2) { - $ERROR('#3: var obj = {}; obj.slice = Array.prototype.slice; obj[0] = 0; obj[1] = 1; obj[2] = 2; obj[3] = 3; obj[4] = 4; obj.length = 5; var arr = obj.slice(2, undefined); arr[0] === 2. Actual: ' + (arr[0])); -} - -//CHECK#4 -if (arr[1] !== 3) { - $ERROR('#4: var obj = {}; obj.slice = Array.prototype.slice; obj[0] = 0; obj[1] = 1; obj[2] = 2; obj[3] = 3; obj[4] = 4; obj.length = 5; var arr = obj.slice(2, undefined); arr[1] === 3. Actual: ' + (arr[1])); -} - -//CHECK#5 -if (arr[2] !== 4) { - $ERROR('#5: var obj = {}; obj.slice = Array.prototype.slice; obj[0] = 0; obj[1] = 1; obj[2] = 2; obj[3] = 3; obj[4] = 4; obj.length = 5; var arr = obj.slice(2, undefined); arr[2] === 4. Actual: ' + (arr[2])); -} - -//CHECK#6 -if (arr[3] !== undefined) { - $ERROR('#6: var obj = {}; obj.slice = Array.prototype.slice; obj[0] = 0; obj[1] = 1; obj[2] = 2; obj[3] = 3; obj[4] = 4; obj.length = 5; var arr = obj.slice(2, undefined); arr[3] === undefined. Actual: ' + (arr[3])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A3_T1.js deleted file mode 100644 index 019c7abbf..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A3_T1.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.10_A3_T1; - * @section: 15.4.4.10; - * @assertion: Check ToUint32(length) for non Array objects; - * @description: length = 4294967296; -*/ - -var obj = {}; -obj.slice = Array.prototype.slice; -obj[0] = "x"; -obj[4294967295] = "y"; -obj.length = 4294967296; -var arr = obj.slice(0,4294967296); - -//CHECK#1 -if (arr.length !== 0) { - $ERROR('#1: var obj = {}; obj.slice = Array.prototype.slice; obj[0] = "x"; obj[4294967295] = "y"; obj.length = 4294967296; var arr = obj.slice(0,4294967296); arr.length === 0. Actual: ' + (arr.length)); -} - -//CHECK#2 -if (arr[0] !== undefined) { - $ERROR('#2: var obj = {}; obj.slice = Array.prototype.slice; obj[0] = "x"; obj[4294967295] = "y"; obj.length = 4294967296; var arr = obj.slice(0,4294967296); arr[0] === undefined. Actual: ' + (arr[0])); -} - -//CHECK#3 -if (arr[4294967295] !== undefined) { - $ERROR('#3: var obj = {}; obj.slice = Array.prototype.slice; obj[0] = "x"; obj[4294967295] = "y"; obj.length = 4294967296; var arr = obj.slice(0,4294967296); arr[4294967295] === undefined. Actual: ' + (arr[4294967295])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A3_T2.js deleted file mode 100644 index 691b389db..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A3_T2.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.10_A3_T2; - * @section: 15.4.4.10; - * @assertion: Check ToUint32(length) for non Array objects; - * @description: length = 4294967297; -*/ - -var obj = {}; -obj.slice = Array.prototype.slice; -obj[0] = "x"; -obj[4294967296] = "y"; -obj.length = 4294967297; -var arr = obj.slice(0,4294967297); - -//CHECK#1 -if (arr.length !== 1) { - $ERROR('#1: var obj = {}; obj.slice = Array.prototype.slice; obj[0] = "x"; obj[4294967296] = "y"; obj.length = 4294967297; var arr = obj.slice(0,4294967297); arr.length === 1. Actual: ' + (arr.length)); -} - -//CHECK#2 -if (arr[0] !== "x") { - $ERROR('#2: var obj = {}; obj.slice = Array.prototype.slice; obj[0] = "x"; obj[4294967296] = "y"; obj.length = 4294967297; var arr = obj.slice(0,4294967297); arr[0] === "x". Actual: ' + (arr[0])); -} - -//CHECK#3 -if (arr[4294967296] !== undefined) { - $ERROR('#3: var obj = {}; obj.slice = Array.prototype.slice; obj[0] = "x"; obj[4294967296] = "y"; obj.length = 4294967297; var arr = obj.slice(0,4294967297); arr[4294967296] === undefined. Actual: ' + (arr[4294967296])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A3_T3.js deleted file mode 100644 index 4e42e684f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A3_T3.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.10_A3_T3; - * @section: 15.4.4.10; - * @assertion: Check ToUint32(length) for non Array objects; - * @description: length = -1; -*/ - -var obj = {}; -obj.slice = Array.prototype.slice; -obj[4294967294] = "x"; -obj.length = -1; -var arr = obj.slice(4294967294,4294967295); - -//CHECK#1 -if (arr.length !== 1) { - $ERROR('#1: var obj = {}; obj.slice = Array.prototype.slice; obj[4294967294] = "x"; obj.length = 4294967295; var arr = obj.slice(4294967294,4294967295); arr.length === 1. Actual: ' + (arr.length)); -} - -//CHECK#3 -if (arr[0] !== "x") { - $ERROR('#3: var obj = {}; obj.slice = Array.prototype.slice; obj[4294967294] = "x"; obj.length = 4294967295; var arr = obj.slice(4294967294,4294967295); arr[0] === "x". Actual: ' + (arr[0])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A4_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A4_T1.js deleted file mode 100644 index 507391ded..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A4_T1.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.10_A4_T1; - * @section: 15.4.4.10, 8.6.2.1, 15.2.4.5; - * @assertion: [[Get]] from not an inherited property; - * @description: [[Prototype]] of Array instance is Array.prototype; -*/ - - -Array.prototype[1] = 1; -x = [0]; -x.length = 2; -var arr = x.slice(); - -//CHECK#1 -if (arr[0] !== 0) { - $ERROR('#1: Array.prototype[1] = 1; x = [0]; x.length = 2; var arr = x.slice(); arr[0] === 0. Actual: ' + (arr[0])); -} - -//CHECK#2 -if (arr[1] !== 1) { - $ERROR('#2: Array.prototype[1] = 1; x = [0]; x.length = 2; var arr = x.slice(); arr[1] === 1. Actual: ' + (arr[1])); -} - -//CHECK#3 -if (arr.hasOwnProperty('1') !== true) { - $ERROR('#3: Array.prototype[1] = 1; x = [0]; x.length = 2; var arr = x.slice(); arr.hasOwnProperty(\'1\') === true. Actual: ' + (arr.hasOwnProperty('1'))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A5.1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A5.1.js deleted file mode 100644 index 5e53f23c6..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A5.1.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.10_A5.1; -* @section: 15.4.4.10, 15.2.4.7, 12.6.4; -* @assertion: The length property of slice has the attribute DontEnum; -* @description: Checking use propertyIsEnumerable, for-in; -*/ - - -//CHECK#1 -if (Array.prototype.slice.propertyIsEnumerable('length') !== false) { - $ERROR('#1: Array.prototype.slice.propertyIsEnumerable(\'length\') === false. Actual: ' + (Array.prototype.slice.propertyIsEnumerable('length'))); -} - -//CHECK#2 -result = true; -for (p in Array.slice){ - if (p === "length") { - result = false; - } -} - -if (result !== true) { - $ERROR('#2: result = true; for (p in Array.slice) { if (p === "length") result = false; } result === true;'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A5.2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A5.2.js deleted file mode 100644 index a590a4f40..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A5.2.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.10_A5.2; -* @section: 15.4.4.10, 15.2.4.5, 11.4.1; -* @assertion: The length property of slice has the attribute DontDelete; -* @description: Checking use hasOwnProperty, delete; -*/ - -//CHECK#1 -if (Array.prototype.slice.hasOwnProperty('length') !== true) { - $FAIL('#1: Array.prototype.slice.hasOwnProperty(\'length\') === true. Actual: ' + (Array.prototype.slice.hasOwnProperty('length'))); -} - -delete Array.prototype.slice.length; - -//CHECK#2 -if (Array.prototype.slice.hasOwnProperty('length') !== true) { - $ERROR('#2: delete Array.prototype.slice.length; Array.prototype.slice.hasOwnProperty(\'length\') === true. Actual: ' + (Array.prototype.slice.hasOwnProperty('length'))); -} - -//CHECK#3 -if (Array.prototype.slice.length === undefined) { - $ERROR('#3: delete Array.prototype.slice.length; Array.prototype.slice.length !== undefined'); -} - - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A5.3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A5.3.js deleted file mode 100644 index 8dd06184d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A5.3.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.10_A5.3; -* @section: 15.4.4.10; -* @assertion: The length property of slice has the attribute ReadOnly; -* @description: Checking if varying the length property fails; -*/ - -//CHECK#1 -x = Array.prototype.slice.length; -Array.prototype.slice.length = Infinity; -if (Array.prototype.slice.length !== x) { - $ERROR('#1: x = Array.prototype.slice.length; Array.prototype.slice.length = Infinity; Array.prototypeslice.length === x. Actual: ' + (Array.prototypeslice.length)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A5.4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A5.4.js deleted file mode 100644 index a6323a86f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A5.4.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.10_A5.4; -* @section: 15.4.4.10; -* @assertion: The length property of slice is 2; -* @description: slice.length === 2; -*/ - -//CHECK#1 -if (Array.prototype.slice.length !== 2) { - $ERROR('#1: Array.prototype.slice.length === 2. Actual: ' + (Array.prototype.slice.length)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A5.5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A5.5.js deleted file mode 100644 index c1afb8163..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A5.5.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.10_A5.5; -* @section: 15.4.4.10, 15.2.4.7, 12.6.4; -* @assertion: The slice property of Array has the attribute DontEnum; -* @description: Checking use propertyIsEnumerable, for-in; -*/ - - -//CHECK#1 -if (Array.propertyIsEnumerable('slice') !== false) { - $ERROR('#1: Array.propertyIsEnumerable(\'slice\') === false. Actual: ' + (Array.propertyIsEnumerable('slice'))); -} - -//CHECK#2 -result = true; -for (p in Array){ - if (p === "slice") { - result = false; - } -} - -if (result !== true) { - $ERROR('#2: result = true; for (p in Array) { if (p === "slice") result = false; } result === true;'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A5.6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A5.6.js deleted file mode 100644 index 119ff79d1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A5.6.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.10_A5.6; -* @section: 15.4.4.10; -* @assertion: The slice property of Array has not prototype property; -* @description: Checking Array.prototype.slice.prototype; -*/ - -//CHECK#1 -if (Array.prototype.slice.prototype !== undefined) { - $ERROR('#1: Array.prototype.slice.prototype === undefined. Actual: ' + (Array.prototype.slice.prototype)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A5.7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A5.7.js deleted file mode 100644 index e04a41214..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.10_Array_prototype_slice/S15.4.4.10_A5.7.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.10_A5.7; -* @section: 15.4.4.10, 11.2.2; -* @assertion: The slice property of Array can't be used as constructor; -* @description: If property does not implement the internal [[Construct]] method, throw a TypeError exception; -*/ - -//CHECK#1 - -try { - new Array.prototype.slice(); - $ERROR('#1.1: new Array.prototype.slice() throw TypeError. Actual: ' + (new Array.prototype.slice())); -} catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1.2: new Array.prototype.slice() throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A1.1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A1.1_T1.js deleted file mode 100644 index 63e485e28..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A1.1_T1.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.11_A1.1_T1; - * @section: 15.4.4.11; - * @assertion: If this object does not have a property named by ToString(j), - * and this object does not have a property named by ToString(k), return +0; - * @description: If comparefn is undefined, use SortCompare operator; -*/ - -var x = new Array(2); -x.sort(); - -//CHECK#1 -if (x.length !== 2) { - $ERROR('#1: var x = new Array(2); x.sort(); x.length === 2. Actual: ' + (x.length)); -} - -//CHECK#2 -if (x[0] !== undefined) { - $ERROR('#2: var x = new Array(2); x.sort(); x[0] === undefined. Actual: ' + (x[0])); -} - -//CHECK#3 -if (x[1] !== undefined) { - $ERROR('#3: var x = new Array(2); x.sort(); x[1] === undefined. Actual: ' + (x[1])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A1.2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A1.2_T1.js deleted file mode 100644 index 01114e3c0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A1.2_T1.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.11_A1.2_T1; - * @section: 15.4.4.11; - * @assertion: If this object does not have a property named by - * ToString(j), return 1. If this object does not have a property - * named by ToString(k), return -1; - * @description: If comparefn is undefined, use SortCompare operator; -*/ - -var x = new Array(2); -x[1] = 1; -x.sort(); - -//CHECK#1 -if (x.length !== 2) { - $ERROR('#1: var x = new Array(2); x[1] = 1; x.sort(); x.length === 2. Actual: ' + (x.length)); -} - -//CHECK#2 -if (x[0] !== 1) { - $ERROR('#2: var x = new Array(2); x[1] = 1; x.sort(); x[0] === 1. Actual: ' + (x[0])); -} - -//CHECK#3 -if (x[1] !== undefined) { - $ERROR('#3: var x = new Array(2); x[1] = 1; x.sort(); x[1] === undefined. Actual: ' + (x[1])); -} - -var x = new Array(2); -x[0] = 1; -x.sort(); - -//CHECK#4 -if (x.length !== 2) { - $ERROR('#4: var x = new Array(2); x[0] = 1; x.sort(); x.length === 2. Actual: ' + (x.length)); -} - -//CHECK#5 -if (x[0] !== 1) { - $ERROR('#5: var x = new Array(2); x[0] = 1; x.sort(); x[0] === 1. Actual: ' + (x[0])); -} - -//CHECK#6 -if (x[1] !== undefined) { - $ERROR('#6: var x = new Array(2); x[0] = 1; x.sort(); x[1] === undefined. Actual: ' + (x[1])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A1.2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A1.2_T2.js deleted file mode 100644 index 5875e8422..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A1.2_T2.js +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.11_A1.2_T2; - * @section: 15.4.4.11; - * @assertion: If this object does not have a property named by - * ToString(j), return 1. If this object does not have a property - * named by ToString(k), return -1; - * @description: If comparefn is not undefined; -*/ - -var myComparefn = function(x,y) { - if (x === undefined) return -1; - if (y === undefined) return 1; - return 0; -} - -var x = new Array(2); -x[1] = 1; -x.sort(myComparefn); - -//CHECK#1 -if (x.length !== 2) { - $ERROR('#1: var x = new Array(2); x[1] = 1; x.sort(myComparefn); x.length === 2. Actual: ' + (x.length)); -} - -//CHECK#2 -if (x[0] !== 1) { - $ERROR('#2: var x = new Array(2); x[1] = 1; x.sort(myComparefn); x[0] === 1. Actual: ' + (x[0])); -} - -//CHECK#3 -if (x[1] !== undefined) { - $ERROR('#3: var x = new Array(2); x[1] = 1; x.sort(myComparefn); x[1] === undefined. Actual: ' + (x[1])); -} - -var x = new Array(2); -x[0] = 1; -x.sort(myComparefn); - -//CHECK#4 -if (x.length !== 2) { - $ERROR('#4: var x = new Array(2); x[0] = 1; x.sort(myComparefn); x.length === 2. Actual: ' + (x.length)); -} - -//CHECK#5 -if (x[0] !== 1) { - $ERROR('#5: var x = new Array(2); x[0] = 1; x.sort(myComparefn); x[0] === 1. Actual: ' + (x[0])); -} - -//CHECK#6 -if (x[1] !== undefined) { - $ERROR('#6: var x = new Array(2); x[0] = 1; x.sort(myComparefn); x[1] === undefined. Actual: ' + (x[1])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A1.3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A1.3_T1.js deleted file mode 100644 index ef19564cc..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A1.3_T1.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.11_A1.3_T1; - * @section: 15.4.4.11; - * @assertion: If [[Get]] ToString(j) and [[Get]] ToString(k) - * are both undefined, return +0; - * @description: If comparefn is undefined, use SortCompare operator; -*/ - -var x = new Array(undefined, undefined); -x.sort(); - -//CHECK#1 -if (x.length !== 2) { - $ERROR('#1: var x = new Array(undefined, undefined); x.sort(); x.length === 2. Actual: ' + (x.length)); -} - -//CHECK#2 -if (x[0] !== undefined) { - $ERROR('#2: var x = new Array(undefined, undefined); x.sort(); x[0] === undefined. Actual: ' + (x[0])); -} - -//CHECK#3 -if (x[1] !== undefined) { - $ERROR('#3: var x = new Array(undefined, undefined); x.sort(); x[1] === undefined. Actual: ' + (x[1])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A1.4_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A1.4_T1.js deleted file mode 100644 index 35b48a554..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A1.4_T1.js +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.11_A1.4_T1; - * @section: 15.4.4.11; - * @assertion: If [[Get]] ToString(j) is undefined, return 1. - * If [[]Get] ToString(k) is undefined, return -1; - * @description: If comparefn is undefined, use SortCompare operator; -*/ - -var x = new Array(undefined, 1); -x.sort(); - -//CHECK#1 -if (x.length !== 2) { - $ERROR('#1: var x = new Array(undefined, 1); x.sort(); x.length === 2. Actual: ' + (x.length)); -} - -//CHECK#2 -if (x[0] !== 1) { - $ERROR('#2: var x = new Array(undefined, 1); x.sort(); x[0] === 1. Actual: ' + (x[0])); -} - -//CHECK#3 -if (x[1] !== undefined) { - $ERROR('#3: var x = new Array(undefined, 1); x.sort(); x[1] === undefined. Actual: ' + (x[1])); -} - -var x = new Array(1, undefined); -x.sort(); - -//CHECK#4 -if (x.length !== 2) { - $ERROR('#4: var x = new Array(1, undefined); x.sort(); x.length === 2. Actual: ' + (x.length)); -} - -//CHECK#5 -if (x[0] !== 1) { - $ERROR('#5: var x = new Array(1, undefined); x.sort(); x[0] === 1. Actual: ' + (x[0])); -} - -//CHECK#6 -if (x[1] !== undefined) { - $ERROR('#6: var x = new Array(1, undefined); x.sort(); x[1] === undefined. Actual: ' + (x[1])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A1.4_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A1.4_T2.js deleted file mode 100644 index 9fba05147..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A1.4_T2.js +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.11_A1.4_T2; - * @section: 15.4.4.11; - * @assertion: If [[Get]] ToString(j) is undefined, return 1. - * If [[]Get] ToString(k) is undefined, return -1; - * @description: If comparefn is not undefined; -*/ - -var myComparefn = function(x,y) { - if (x === undefined) return -1; - if (y === undefined) return 1; - return 0; -} - -var x = new Array(undefined, 1); -x.sort(myComparefn); - -//CHECK#1 -if (x.length !== 2) { - $ERROR('#1: var x = new Array(undefined, 1); x.sort(myComparefn); x.length === 2. Actual: ' + (x.length)); -} - -//CHECK#2 -if (x[0] !== 1) { - $ERROR('#2: var x = new Array(undefined, 1); x.sort(myComparefn); x[0] === 1. Actual: ' + (x[0])); -} - -//CHECK#3 -if (x[1] !== undefined) { - $ERROR('#3: var x = new Array(undefined, 1); x.sort(myComparefn); x[1] === undefined. Actual: ' + (x[1])); -} - -var x = new Array(1, undefined); -x.sort(myComparefn); - -//CHECK#4 -if (x.length !== 2) { - $ERROR('#4: var x = new Array(1, undefined); x.sort(myComparefn); x.length === 2. Actual: ' + (x.length)); -} - -//CHECK#5 -if (x[0] !== 1) { - $ERROR('#5: var x = new Array(1, undefined); x.sort(myComparefn); x[0] === 1. Actual: ' + (x[0])); -} - -//CHECK#6 -if (x[1] !== undefined) { - $ERROR('#6: var x = new Array(1, undefined); x.sort(myComparefn); x[1] === undefined. Actual: ' + (x[1])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A1.5_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A1.5_T1.js deleted file mode 100644 index 43a1ffd51..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A1.5_T1.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.11_A1.5_T1; - * @section: 15.4.4.11; - * @assertion: If comparefn is undefined, use SortCompare operator; - * @description: Checking sort() and sort(undefined); -*/ - -var x = new Array(1,0); -x.sort(); - -//CHECK#1 -if (x.length !== 2) { - $ERROR('#1: var x = new Array(1,0); x.sort(); x.length === 2. Actual: ' + (x.length)); -} - -//CHECK#2 -if (x[0] !== 0) { - $ERROR('#2: var x = new Array(1,0); x.sort(); x[0] === 0. Actual: ' + (x[0])); -} - -//CHECK#3 -if (x[1] !== 1) { - $ERROR('#3: var x = new Array(1,0); x.sort(); x[1] === 1. Actual: ' + (x[1])); -} - -var x = new Array(1,0); -x.sort(undefined); - -//CHECK#4 -if (x.length !== 2) { - $ERROR('#4: var x = new Array(1,0); x.sort(undefined); x.length === 2. Actual: ' + (x.length)); -} - -//CHECK#5 -if (x[0] !== 0) { - $ERROR('#5: var x = new Array(1,0); x.sort(undefined); x[0] === 0. Actual: ' + (x[0])); -} - -//CHECK#6 -if (x[1] !== 1) { - $ERROR('#6: var x = new Array(1,0); x.sort(undefined); x[1] === 1. Actual: ' + (x[1])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A2.1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A2.1_T1.js deleted file mode 100644 index db7b7abed..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A2.1_T1.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.11_A2.1_T1; - * @section: 15.4.4.11; - * @assertion: - * If ToString([[Get]] ToString(j)) < ToString([[Get]] ToString(k)), return -1. - * If ToString([[Get]] ToString(j)) > ToString([[Get]] ToString(k)), return 1; - * return -1 - * @description: Checking ENGLISH ALPHABET; -*/ - - -alphabetR = ["z", "y", "x", "w", "v", "u", "t", "s", "r", "q", "p", "o", "n", "M", "L", "K", "J", "I", "H", "G", "F", "E", "D", "C", "B", "A"]; - alphabet = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]; - -//CHECK#1 -alphabetR.sort(); -result = true; -for (i = 0; i < 26; i++) { - if (alphabetR[i] !== alphabet[i]) result = false; -} - -if (result !== true) { - $ERROR('#1: CHECK ENGLISH ALPHABET'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A2.1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A2.1_T2.js deleted file mode 100644 index 5e5b7e438..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A2.1_T2.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.11_A2.1_T2; - * @section: 15.4.4.11; - * @assertion: - * If ToString([[Get]] ToString(j)) < ToString([[Get]] ToString(k)), return -1. - * If ToString([[Get]] ToString(j)) > ToString([[Get]] ToString(k)), return 1; - * return -1 - * @description: Checking RUSSIAN ALPHABET; -*/ - -alphabetR = ["ё", "я", "ю", "э", "ь", "ы", "ъ", "щ", "ш", "ч", "ц", "х", "ф", "у", "т", "с", "р", "П", "О", "Н", "М", "Л", "К", "Й", "И", "З", "Ж", "Е", "Д", "Г", "В", "Б", "А"]; - alphabet = ["А", "Б", "В", "Г", "Д", "Е", "Ж", "З", "И", "Й", "К", "Л", "М", "Н", "О", "П", "р", "с", "т", "у", "ф", "х", "ц", "ч", "ш", "щ", "ъ", "ы", "ь", "э", "ю", "я", "ё"]; - -//CHECK#1 -alphabetR.sort(); -result = true; -for (i = 0; i < 26; i++) { - if (alphabetR[i] !== alphabet[i]) result = false; -} - -if (result !== true) { - $ERROR('#1: CHECK RUSSIAN ALPHABET'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A2.1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A2.1_T3.js deleted file mode 100644 index 345479312..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A2.1_T3.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.11_A2.1_T3; - * @section: 15.4.4.11; - * @assertion: - * If ToString([[Get]] ToString(j)) < ToString([[Get]] ToString(k)), return -1. - * If ToString([[Get]] ToString(j)) > ToString([[Get]] ToString(k)), return 1; - * return -1 - * @description: Checking ToString operator; -*/ - -var obj = {valueOf: function() {return 1}, toString: function() {return -2}}; -alphabetR = [undefined, 2, 1, "X", -1, "a", true, obj, NaN, Infinity]; - alphabet = [-1, obj, 1, 2, Infinity, NaN, "X", "a", true, undefined]; - -//CHECK#1 -alphabetR.sort(); -result = true; -for (i = 0; i < 10; i++) { - if (!(isNaN(alphabetR[i]) && isNaN(alphabet[i]))) { - if (alphabetR[i] !== alphabet[i]) result = false; - } -} - -if (result !== true) { - $ERROR('#1: Check ToString operator'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A2.2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A2.2_T1.js deleted file mode 100644 index 357f29a0b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A2.2_T1.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.11_A2.2_T1; - * @section: 15.4.4.11; - * @assertion: My comparefn is inverse implementation comparefn; - * @description: Checking ENGLISH ALPHABET; -*/ - -alphabetR = ["z", "y", "x", "w", "v", "u", "t", "s", "r", "q", "p", "o", "n", "M", "L", "K", "J", "I", "H", "G", "F", "E", "D", "C", "B", "A"]; - alphabet = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]; - -var myComparefn = function(x,y) { - xS = String(x); - yS = String(y); - if (xS < yS) return 1 - if (xS > yS) return -1; - return 0; -} - -//CHECK#1 -alphabet.sort(myComparefn); -result = true; -for (i = 0; i < 26; i++) { - if (alphabetR[i] !== alphabet[i]) result = false; -} - -if (result !== true) { - $ERROR('#1: CHECK ENGLISH ALPHABET'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A2.2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A2.2_T2.js deleted file mode 100644 index 313b0ffe9..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A2.2_T2.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.11_A2.2_T2; - * @section: 15.4.4.11; - * @assertion: My comparefn is inverse implementation comparefn; - * @description: Checking RUSSIAN ALPHABET; -*/ - -alphabetR = ["ё", "я", "ю", "э", "ь", "ы", "ъ", "щ", "ш", "ч", "ц", "х", "ф", "у", "т", "с", "р", "П", "О", "Н", "М", "Л", "К", "Й", "И", "З", "Ж", "Е", "Д", "Г", "В", "Б", "А"]; - alphabet = ["А", "Б", "В", "Г", "Д", "Е", "Ж", "З", "И", "Й", "К", "Л", "М", "Н", "О", "П", "р", "с", "т", "у", "ф", "х", "ц", "ч", "ш", "щ", "ъ", "ы", "ь", "э", "ю", "я", "ё"]; - -var myComparefn = function(x,y) { - xS = String(x); - yS = String(y); - if (xS < yS) return 1 - if (xS > yS) return -1; - return 0; -} - -//CHECK#1 -alphabet.sort(myComparefn); -result = true; -for (i = 0; i < 26; i++) { - if (alphabetR[i] !== alphabet[i]) result = false; -} - -if (result !== true) { - $ERROR('#1: CHECK RUSSIAN ALPHABET'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A2.2_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A2.2_T3.js deleted file mode 100644 index 7df56655c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A2.2_T3.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.11_A2.2_T3; - * @section: 15.4.4.11; - * @assertion: My comparefn is inverse implementation comparefn; - * @description: Checking ToString operator; -*/ - -var obj = {valueOf: function() {return 1}, toString: function() {return -2}}; -alphabetR = [undefined, 2, 1, "X", -1, "a", true, obj, NaN, Infinity]; - alphabet = [true, "a", "X", NaN, Infinity, 2, 1, obj, -1, undefined]; - -var myComparefn = function(x,y) { - xS = String(x); - yS = String(y); - if (xS < yS) return 1 - if (xS > yS) return -1; - return 0; -} - -//CHECK#1 -alphabetR.sort(myComparefn); -result = true; -for (i = 0; i < 10; i++) { - if (!(isNaN(alphabetR[i]) && isNaN(alphabet[i]))) { - if (alphabetR[i] !== alphabet[i]) result = false; - } -} - -if (result !== true) { - $ERROR('#1: Check ToString operator'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A3_T1.js deleted file mode 100644 index 3900288f7..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A3_T1.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.11_A3_T1; - * @section: 15.4.4.11; - * @assertion: The sort function is intentionally generic. - * It does not require that its this value be an Array object; - * @description: If comparefn is undefined, use SortCompare operator; -*/ - - -var obj = {valueOf: function() {return 1}, toString: function() {return -2}}; -var alphabetR = {0:undefined, 1:2, 2:1, 3:"X", 4:-1, 5:"a", 6:true, 7:obj, 8:NaN, 9:Infinity}; -alphabetR.sort = Array.prototype.sort; -alphabetR.length = 10; -var alphabet = [-1, obj, 1, 2, Infinity, NaN, "X", "a", true, undefined]; - -alphabetR.sort(); - - //CHECK#0 -alphabetR.getClass = Object.prototype.toString; -if (alphabetR.getClass() !== "[object " + "Object" + "]") { - $ERROR('#0: alphabetR.sort() is Object object, not Array object'); -} - -//CHECK#1 -result = true; -for (i = 0; i < 10; i++) { - if (!(isNaN(alphabetR[i]) && isNaN(alphabet[i]))) { - if (alphabetR[i] !== alphabet[i]) result = false; - } -} - -if (result !== true) { - $ERROR('#1: Check ToString operator'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A3_T2.js deleted file mode 100644 index 820992075..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A3_T2.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.11_A3_T2; - * @section: 15.4.4.11; - * @assertion: The sort function is intentionally generic. - * It does not require that its this value be an Array object; - * @description: If comparefn is not undefined; -*/ - - -var obj = {valueOf: function() {return 1}, toString: function() {return -2}}; -var alphabetR = {0:undefined, 1:2, 2:1, 3:"X", 4:-1, 5:"a", 6:true, 7:obj, 8:NaN, 9:Infinity}; -alphabetR.sort = Array.prototype.sort; -alphabetR.length = 10; -var alphabet = [true, "a", "X", NaN, Infinity, 2, 1, obj, -1, undefined]; - - var myComparefn = function(x,y) { - xS = String(x); - yS = String(y); - if (xS < yS) return 1 - if (xS > yS) return -1; - return 0; -} - -alphabetR.sort(myComparefn); - - //CHECK#0 -alphabetR.getClass = Object.prototype.toString; -if (alphabetR.getClass() !== "[object " + "Object" + "]") { - $ERROR('#0: alphabetR.sort() is Object object, not Array object'); -} - -//CHECK#1 -result = true; -for (i = 0; i < 10; i++) { - if (!(isNaN(alphabetR[i]) && isNaN(alphabet[i]))) { - if (alphabetR[i] !== alphabet[i]) result = false; - } -} - -if (result !== true) { - $ERROR('#1: Check ToString operator'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A4_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A4_T1.js deleted file mode 100644 index 4ca5ba757..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A4_T1.js +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.11_A4_T1; - * @section: 15.4.4.11; - * @assertion: Check ToUint32(length) for non Array objects; - * @description: length = 4294967296; -*/ - -var obj = {}; -obj.sort = Array.prototype.sort; -obj[0] = "x"; -obj[4294967295] = "y"; -obj.length = 4294967296; - -//CHECK#1 -if (obj.sort() !== obj) { - $ERROR('#1: var obj = {}; obj.sort = Array.prototype.sort; obj[0] = "x"; obj[4294967295] = "y"; obj.length = 4294967296; obj.sort() === obj. Actual: ' + (obj.sort())); -} - -//CHECK#2 -if (obj.length !== 4294967296) { - $ERROR('#2: var obj = {}; obj.sort = Array.prototype.sort; obj[0] = "x"; obj[4294967295] = "y"; obj.length = 4294967296; obj.sort(); obj.length === 4294967296. Actual: ' + (obj.length)); -} - -//CHECK#3 -if (obj[0] !== "x") { - $ERROR('#3: var obj = {}; obj.sort = Array.prototype.sort; obj[0] = "x"; obj[4294967295] = "y"; obj.length = 4294967296; obj.sort(); obj[0] == "x"'); -} - -//CHECK#4 -if (obj[4294967295] !== "y") { - $ERROR('#4: var obj = {}; obj.sort = Array.prototype.sort; obj[] = "x"; obj[4294967295] = "y"; obj.length = 4294967296; obj.sort(); obj[4294967295] == "y"'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A4_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A4_T2.js deleted file mode 100644 index 5cc1714ed..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A4_T2.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.11_A4_T2; - * @section: 15.4.4.11; - * @assertion: Check ToUint32(length) for non Array objects; - * @description: length = 4294967298; -*/ - -var obj = {}; -obj.sort = Array.prototype.sort; -obj[0] = "z"; -obj[1] = "y"; -obj[4294967297] = "x"; -obj.length = 4294967298; - -//CHECK#1 -if (obj.sort() !== obj) { - $ERROR('#1: var obj = {}; obj.sort = Array.prototype.sort; obj[0] = "z"; obj[1] = "y"; obj[4294967297] = "x"; obj.length = 4294967298; obj.sort() === obj. Actual: ' + (obj.sort())); -} - -//CHECK#2 -if (obj.length !== 4294967298) { - $ERROR('#2: var obj = {}; obj.sort = Array.prototype.sort; obj[0] = "z"; obj[1] = "y"; obj[4294967297] = "x"; obj.length = 4294967298; obj.sort(); obj.length === 4294967298. Actual: ' + (obj.length)); -} - -//CHECK#3 -if (obj[0] !== "y") { - $ERROR('#3: var obj = {}; obj.sort = Array.prototype.sort; obj[0] = "z"; obj[1] = "y"; obj[4294967297] = "x"; obj.length = 4294967298; obj.sort(); obj[0] === "y". Actual: ' + (obj[0])); -} - -//CHECK#4 -if (obj[1] !== "z") { - $ERROR('#4: var obj = {}; obj.sort = Array.prototype.sort; obj[0] = "z"; obj[1] = "y"; obj[4294967297] = "x"; obj.length = 4294967298; obj.sort(); obj[1] === "z". Actual: ' + (obj[1])); -} - -//CHECK#5 -if (obj[4294967297] !== "x") { - $ERROR('#5: var obj = {}; obj.sort = Array.prototype.sort; obj[0] = "z"; obj[1] = "y"; obj[4294967297] = "x"; obj.length = 4294967298; obj.sort(); obj[4294967297] === "x". Actual: ' + (obj[4294967297])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A4_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A4_T3.js deleted file mode 100644 index 20300e3c5..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A4_T3.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.11_A4_T3; - * @section: 15.4.4.11; - * @assertion: Check ToUint32(length) for non Array objects; - * @description: length = -4294967294; -*/ - -var obj = {}; -obj.sort = Array.prototype.sort; -obj[0] = "z"; -obj[1] = "y"; -obj[2] = "x"; -obj.length = -4294967294; - -//CHECK#1 -if (obj.sort() !== obj) { - $ERROR('#1: var obj = {}; obj.sort = Array.prototype.sort; obj[0] = "z"; obj[1] = "y"; obj[2] = "x"; obj.length = -4294967294; obj.sort() === obj. Actual: ' + (obj.sort())); -} - -//CHECK#2 -if (obj.length !== -4294967294) { - $ERROR('#2: var obj = {}; obj.sort = Array.prototype.sort; obj[0] = "z"; obj[1] = "y"; obj[2] = "x"; obj.length = -4294967294; obj.sort(); obj.length === -4294967294. Actual: ' + (obj.length)); -} - -//CHECK#3 -if (obj[0] !== "y") { - $ERROR('#3: var obj = {}; obj.sort = Array.prototype.sort; obj[0] = "z"; obj[1] = "y"; obj[2] = "x"; obj.length = -4294967294; obj.sort(); obj[0] === "y". Actual: ' + (obj[0])); -} - -//CHECK#4 -if (obj[1] !== "z") { - $ERROR('#4: var obj = {}; obj.sort = Array.prototype.sort; obj[0] = "z"; obj[1] = "y"; obj[2] = "x"; obj.length = -4294967294; obj.sort(); obj[1] === "z". Actual: ' + (obj[1])); -} - -//CHECK#5 -if (obj[2] !== "x") { - $ERROR('#5: var obj = {}; obj.sort = Array.prototype.sort; obj[0] = "z"; obj[1] = "y"; obj[2] = "x"; obj.length = -4294967294; obj.sort(); obj[2] === "x". Actual: ' + (obj[2])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A5_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A5_T1.js deleted file mode 100644 index dd150c373..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A5_T1.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.11_A5_T1; - * @section: 15.4.4.11; - * @assertion: Array.sort should not eat exceptions; - * @description: comparefn function throw "error"; -*/ - -//CHECK#1 -var myComparefn = function(x,y) { - throw "error"; -} -x = [1,0]; -try { - x.sort(myComparefn) - $ERROR('#1.1: Array.sort should not eat exceptions'); -} catch(e) { - if (e !== "error") { - $ERROR('#1.2: Array.sort should not eat exceptions'); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A6_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A6_T2.js deleted file mode 100644 index 52370f830..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A6_T2.js +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.11_A6_T2; - * @section: 15.4.4.11, 8.6.2.1, 8.6.2.5; - * @assertion: [[Get]], [[Delete]] from not an inherited property; - * @description: [[Prototype]] of Array instance is Array.prototype, [[Prototype] of Array.prototype is Object.prototype; -*/ - -Array.prototype[1] = -1; -x = [1,0]; -x.length = 2; -x.sort(); - -//CHECK#1 -if (x[0] !== 0) { - $ERROR('#1: Array.prototype[1] = -1; x = [1,0]; x.length = 2; x.sort(); x[0] === 0. Actual: ' + (x[0])); -} - -//CHECK#2 -if (x[1] !== 1) { - $ERROR('#2: Array.prototype[1] = -1; x = [1,0]; x.length = 2; x.sort(); x[1] === 1. Actual: ' + (x[1])); -} - -x.length = 0; - -//CHECK#3 -if (x[0] !== undefined) { - $ERROR('#3: Array.prototype[1] = -1; x = [1,0]; x.length = 2; x.sort(); x.length = 0; x[0] === undefined. Actual: ' + (x[0])); -} - -//CHECK#4 -if (x[1] !== -1) { - $ERROR('#4: Array.prototype[1] = -1; x = [1,0]; x.length = 2; x.sort(); x.length = 0; x[1] === -1. Actual: ' + (x[1])); -} - -Object.prototype[1] = -1; -Object.prototype.length = 2; -Object.prototype.sort = Array.prototype.sort; -x = {0:1,1:0}; -x.sort(); - -//CHECK#5 -if (x[0] !== 0) { - $ERROR('#5: Object.prototype[1] = -1; Object.prototype.length = 2; Object.prototype.sort = Array.prototype.sort; x = {0:1,1:0}; x.sort(); x[0] === 0. Actual: ' + (x[0])); -} - -//CHECK#6 -if (x[1] !== 1) { - $ERROR('#6: Object.prototype[1] = -1; Object.prototype.length = 2; Object.prototype.sort = Array.prototype.sort; x = {0:1,1:0}; x.sort(); x[1] === 1. Actual: ' + (x[1])); -} - -delete x[0]; -delete x[1]; - -//CHECK#7 -if (x[0] !== undefined) { - $ERROR('#7: Object.prototype[1] = -1; Object.prototype.length = 2; Object.prototype.sort = Array.prototype.sort; x = {0:1,1:0}; x.sort(); delete x[0]; delete x[1]; x[0] === undefined. Actual: ' + (x[0])); -} - -//CHECK#8 -if (x[1] !== -1) { - $ERROR('#8: Object.prototype[1] = -1; Object.prototype.length = 2; Object.prototype.sort = Array.prototype.sort; x = {0:1,1:0}; x.sort(); delete x[0]; delete x[1]; x[1] === -1. Actual: ' + (x[1])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A7.1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A7.1.js deleted file mode 100644 index b7fc63a50..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A7.1.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.11_A7.1; -* @section: 15.4.4.11, 15.2.4.7, 12.6.4; -* @assertion: The length property of sort has the attribute DontEnum; -* @description: Checking use propertyIsEnumerable, for-in; -*/ - - -//CHECK#1 -if (Array.prototype.sort.propertyIsEnumerable('length') !== false) { - $ERROR('#1: Array.prototype.sort.propertyIsEnumerable(\'length\') === false. Actual: ' + (Array.prototype.sort.propertyIsEnumerable('length'))); -} - -//CHECK#2 -result = true; -for (p in Array.sort){ - if (p === "length") { - result = false; - } -} - -if (result !== true) { - $ERROR('#2: result = true; for (p in Array.sort) { if (p === "length") result = false; } result === true;'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A7.2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A7.2.js deleted file mode 100644 index 01ae4abbe..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A7.2.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.11_A7.2; -* @section: 15.4.4.11, 15.2.4.5, 11.4.1; -* @assertion: The length property of sort has the attribute DontDelete; -* @description: Checking use hasOwnProperty, delete; -*/ - -//CHECK#1 -if (Array.prototype.sort.hasOwnProperty('length') !== true) { - $FAIL('#1: Array.sort.prototype.hasOwnProperty(\'length\') === true. Actual: ' + (Array.sort.prototype.hasOwnProperty('length'))); -} - -delete Array.prototype.sort.length; - -//CHECK#2 -if (Array.prototype.sort.hasOwnProperty('length') !== true) { - $ERROR('#2: delete Array.prototype.sort.length; Array.prototype.sort.hasOwnProperty(\'length\') === true. Actual: ' + (Array.prototype.sort.hasOwnProperty('length'))); -} - -//CHECK#3 -if (Array.prototype.sort.length === undefined) { - $ERROR('#3: delete Array.prototype.sort.length; Array.prototype.sort.length !== undefined'); -} - - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A7.3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A7.3.js deleted file mode 100644 index 5b1c05fb4..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A7.3.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.11_A7.3; -* @section: 15.4.4.11; -* @assertion: The length property of sort has the attribute ReadOnly; -* @description: Checking if varying the length fails; -*/ - -//CHECK#1 -x = Array.prototype.sort.length; -Array.prototype.sort.length = Infinity; -if (Array.prototype.sort.length !== x) { - $ERROR('#1: x = Array.prototype.sort.length; Array.prototype.sort.length = Infinity; Array.prototype.sort.length === x. Actual: ' + (Array.prototype.sort.length)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A7.4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A7.4.js deleted file mode 100644 index 6c64171d4..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A7.4.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.11_A7.4; -* @section: 15.4.4.11; -* @assertion: The length property of sort is 1; -* @description: sort.length === 1; -*/ - -//CHECK#1 -if (Array.prototype.sort.length !== 1) { - $ERROR('#1: Array.prototype.sort.length === 1. Actual: ' + (Array.prototype.sort.length)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A7.5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A7.5.js deleted file mode 100644 index 53f9bc2a4..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A7.5.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.11_A7.5; -* @section: 15.4.4.11, 15.2.4.7, 12.6.4; -* @assertion: The sort property of Array has the attribute DontEnum; -* @description: Checking use propertyIsEnumerable, for-in; -*/ - - -//CHECK#1 -if (Array.propertyIsEnumerable('sort') !== false) { - $ERROR('#1: Array.propertyIsEnumerable(\'sort\') === false. Actual: ' + (Array.propertyIsEnumerable('sort'))); -} - -//CHECK#2 -result = true; -for (p in Array){ - if (p === "sort") { - result = false; - } -} - -if (result !== true) { - $ERROR('#2: result = true; for (p in Array) { if (p === "sort") result = false; } result === true;'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A7.6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A7.6.js deleted file mode 100644 index 8d8192e72..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A7.6.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.11_A7.6; -* @section: 15.4.4.11; -* @assertion: The sort property of Array has not prototype property; -* @description: Checking Array.prototype.sort.prototype; -*/ - -//CHECK#1 -if (Array.prototype.sort.prototype !== undefined) { - $ERROR('#1: Array.prototype.sort.prototype === undefined. Actual: ' + (Array.prototype.sort.prototype)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A7.7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A7.7.js deleted file mode 100644 index fa60764bc..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.11_Array_prototype_sort/S15.4.4.11_A7.7.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.11_A7.7; -* @section: 15.4.4.11, 11.2.2; -* @assertion: The sort property of Array can't be used as constructor; -* @description: If property does not implement the internal [[Construct]] method, throw a TypeError exception; -*/ - -//CHECK#1 - -try { - new Array.prototype.sort(); - $ERROR('#1.1: new Array.prototype.sort() throw TypeError. Actual: ' + (new Array.prototype.sort())); -} catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1.2: new Array.prototype.sort() throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.1_T1.js deleted file mode 100644 index b14ab1dee..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.1_T1.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.12_A1.1_T1; - * @section: 15.4.4.12; - * @assertion: If start is positive, use min(start, length). - * If deleteCount is positive, use min(deleteCount, length - start); - * @description: length > deleteCount > start = 0, itemCount = 0; -*/ - -var x = [0,1,2,3]; -var arr = x.splice(0,3); - -//CHECK#1 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: var x = [0,1,2,3]; var arr = x.splice(0,3); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#2 -if (arr.length !== 3) { - $ERROR('#2: var x = [0,1,2,3]; var arr = x.splice(0,3); arr.length === 3. Actual: ' + (arr.length)); -} - -//CHECK#3 -if (arr[0] !== 0) { - $ERROR('#3: var x = [0,1,2,3]; var arr = x.splice(0,3); arr[0] === 0. Actual: ' + (arr[0])); -} - -//CHECK#4 -if (arr[1] !== 1) { - $ERROR('#4: var x = [0,1,2,3]; var arr = x.splice(0,3); arr[1] === 1. Actual: ' + (arr[1])); -} - -//CHECK#5 -if (arr[2] !== 2) { - $ERROR('#5: var x = [0,1,2,3]; var arr = x.splice(0,3); arr[2] === 2. Actual: ' + (arr[2])); -} - -//CHECK#6 -if (x.length !== 1) { - $ERROR('#6: var x = [0,1,2,3]; var arr = x.splice(0,3); x.length === 1. Actual: ' + (x.length)); -} - -//CHECK#7 -if (x[0] !== 3) { - $ERROR('#7: var x = [0,1,2,3]; var arr = x.splice(0,3); x[0] === 3. Actual: ' + (x[0])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.1_T2.js deleted file mode 100644 index 079512559..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.1_T2.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.12_A1.1_T2; - * @section: 15.4.4.12; - * @assertion: If start is positive, use min(start, length). - * If deleteCount is positive, use min(deleteCount, length - start); - * @description: length > deleteCount > start = 0, itemCount > 0; -*/ - -var x = [0,1,2,3]; -var arr = x.splice(0,3,4,5); - -//CHECK#1 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: var x = [0,1,2,3]; var arr = x.splice(0,3,4,5); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#2 -if (arr.length !== 3) { - $ERROR('#2: var x = [0,1,2,3]; var arr = x.splice(0,3,4,5); arr.length === 3. Actual: ' + (arr.length)); -} - -//CHECK#3 -if (arr[0] !== 0) { - $ERROR('#3: var x = [0,1,2,3]; var arr = x.splice(0,3,4,5); arr[0] === 0. Actual: ' + (arr[0])); -} - -//CHECK#4 -if (arr[1] !== 1) { - $ERROR('#4: var x = [0,1,2,3]; var arr = x.splice(0,3,4,5); arr[1] === 1. Actual: ' + (arr[1])); -} - -//CHECK#5 -if (arr[2] !== 2) { - $ERROR('#5: var x = [0,1,2,3]; var arr = x.splice(0,3,4,5); arr[2] === 2. Actual: ' + (arr[2])); -} - -//CHECK#6 -if (x.length !== 3) { - $ERROR('#6: var x = [0,1,2,3]; var arr = x.splice(0,3,4,5); x.length === 3. Actual: ' + (x.length)); -} - -//CHECK#7 -if (x[0] !== 4) { - $ERROR('#7: var x = [0,1,2,3]; var arr = x.splice(0,3,4,5); x[0] === 4. Actual: ' + (x[0])); -} - -//CHECK#8 -if (x[1] !== 5) { - $ERROR('#8: var x = [0,1,2,3]; var arr = x.splice(0,3,4,5); x[1] === 5. Actual: ' + (x[1])); -} - -//CHECK#9 -if (x[2] !== 3) { - $ERROR('#9: var x = [0,1,2,3]; var arr = x.splice(0,3,4,5); x[2] === 3. Actual: ' + (x[2])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.1_T3.js deleted file mode 100644 index 7d081f357..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.1_T3.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.12_A1.1_T3; - * @section: 15.4.4.12; - * @assertion: If start is positive, use min(start, length). - * If deleteCount is positive, use min(deleteCount, length - start); - * @description: length = deleteCount > start = 0; -*/ - -var x = [0,1,2,3]; -var arr = x.splice(0,4); - -//CHECK#1 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: var x = [0,1,2,3]; var arr = x.splice(0,4); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#2 -if (arr.length !== 4) { - $ERROR('#2: var x = [0,1,2,3]; var arr = x.splice(0,4); arr.length === 4. Actual: ' + (arr.length)); -} - -//CHECK#3 -if (arr[0] !== 0) { - $ERROR('#3: var x = [0,1,2,3]; var arr = x.splice(0,4); arr[0] === 0. Actual: ' + (arr[0])); -} - -//CHECK#4 -if (arr[1] !== 1) { - $ERROR('#4: var x = [0,1,2,3]; var arr = x.splice(0,4); arr[1] === 1. Actual: ' + (arr[1])); -} - -//CHECK#5 -if (arr[2] !== 2) { - $ERROR('#5: var x = [0,1,2,3]; var arr = x.splice(0,4); arr[2] === 2. Actual: ' + (arr[2])); -} - -//CHECK#6 -if (arr[3] !== 3) { - $ERROR('#6: var x = [0,1,2,3]; var arr = x.splice(0,4); arr[3] === 3. Actual: ' + (arr[3])); -} - -//CHECK#7 -if (x.length !== 0) { - $ERROR('#7: var x = [0,1,2,3]; var arr = x.splice(0,4); x.length === 0. Actual: ' + (x.length)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.1_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.1_T4.js deleted file mode 100644 index 7ffc2ebe2..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.1_T4.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.12_A1.1_T4; - * @section: 15.4.4.12; - * @assertion: If start is positive, use min(start, length). - * If deleteCount is positive, use min(deleteCount, length - start); - * @description: length > deleteCount > start > 0, itemCount > 0; -*/ - -var x = [0,1,2,3]; -var arr = x.splice(1,3,4,5); - -//CHECK#1 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: var x = [0,1,2,3]; var arr = x.splice(1,3,4,5); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#2 -if (arr.length !== 3) { - $ERROR('#2: var x = [0,1,2,3]; var arr = x.splice(1,3,4,5); arr.length === 3. Actual: ' + (arr.length)); -} - -//CHECK#3 -if (arr[0] !== 1) { - $ERROR('#3: var x = [0,1,2,3]; var arr = x.splice(1,3,4,5); arr[0] === 1. Actual: ' + (arr[0])); -} - -//CHECK#4 -if (arr[1] !== 2) { - $ERROR('#4: var x = [0,1,2,3]; var arr = x.splice(1,3,4,5); arr[1] === 2. Actual: ' + (arr[1])); -} - -//CHECK#5 -if (arr[2] !== 3) { - $ERROR('#5: var x = [0,1,2,3]; var arr = x.splice(1,3,4,5); arr[2] === 3. Actual: ' + (arr[2])); -} - -//CHECK#6 -if (x.length !== 3) { - $ERROR('#6: var x = [0,1,2,3]; var arr = x.splice(1,3,4,5); x.length === 3. Actual: ' + (x.length)); -} - -//CHECK#7 -if (x[0] !== 0) { - $ERROR('#7: var x = [0,1,2,3]; var arr = x.splice(1,3,4,5); x[0] === 0. Actual: ' + (x[0])); -} - -//CHECK#8 -if (x[1] !== 4) { - $ERROR('#8: var x = [0,1,2,3]; var arr = x.splice(1,3,4,5); x[1] === 4. Actual: ' + (x[1])); -} - -//CHECK#9 -if (x[2] !== 5) { - $ERROR('#9: var x = [0,1,2,3]; var arr = x.splice(1,3,4,5); x[2] === 5. Actual: ' + (x[2])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.1_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.1_T5.js deleted file mode 100644 index 1d9d6a7fb..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.1_T5.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.12_A1.1_T5; - * @section: 15.4.4.12; - * @assertion: If start is positive, use min(start, length). - * If deleteCount is positive, use min(deleteCount, length - start); - * @description: deleteCount > length > start = 0, itemCount = 0; -*/ - -var x = [0,1,2,3]; -var arr = x.splice(0,5); - -//CHECK#1 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: var x = [0,1,2,3]; var arr = x.splice(0,5); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#2 -if (arr.length !== 4) { - $ERROR('#2: var x = [0,1,2,3]; var arr = x.splice(0,5); arr.length === 4. Actual: ' + (arr.length)); -} - -//CHECK#3 -if (arr[0] !== 0) { - $ERROR('#3: var x = [0,1,2,3]; var arr = x.splice(0,5); arr[0] === 0. Actual: ' + (arr[0])); -} - -//CHECK#4 -if (arr[1] !== 1) { - $ERROR('#4: var x = [0,1,2,3]; var arr = x.splice(0,5); arr[1] === 1. Actual: ' + (arr[1])); -} - -//CHECK#5 -if (arr[2] !== 2) { - $ERROR('#5: var x = [0,1,2,3]; var arr = x.splice(0,5); arr[2] === 2. Actual: ' + (arr[2])); -} - -//CHECK#6 -if (arr[3] !== 3) { - $ERROR('#6: var x = [0,1,2,3]; var arr = x.splice(0,5); arr[3] === 3. Actual: ' + (arr[3])); -} - -//CHECK#7 -if (x.length !== 0) { - $ERROR('#7: var x = [0,1,2,3]; var arr = x.splice(0,5); x.length === 0. Actual: ' + (x.length)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.1_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.1_T6.js deleted file mode 100644 index 4040557cf..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.1_T6.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.12_A1.1_T6; - * @section: 15.4.4.12; - * @assertion: If start is positive, use min(start, length). - * If deleteCount is positive, use min(deleteCount, length - start); - * @description: length = deleteCount > start > 0, itemCount > 0; -*/ - -var x = [0,1,2,3]; -var arr = x.splice(1,4,4,5); - -//CHECK#1 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: var x = [0,1,2,3]; var arr = x.splice(1,4,4,5); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#2 -if (arr.length !== 3) { - $ERROR('#2: var x = [0,1,2,3]; var arr = x.splice(1,4,4,5); arr.length === 3. Actual: ' + (arr.length)); -} - -//CHECK#3 -if (arr[0] !== 1) { - $ERROR('#3: var x = [0,1,2,3]; var arr = x.splice(1,4,4,5); arr[0] === 1. Actual: ' + (arr[0])); -} - -//CHECK#4 -if (arr[1] !== 2) { - $ERROR('#4: var x = [0,1,2,3]; var arr = x.splice(1,4,4,5); arr[1] === 2. Actual: ' + (arr[1])); -} - -//CHECK#5 -if (arr[2] !== 3) { - $ERROR('#5: var x = [0,1,2,3]; var arr = x.splice(1,4,4,5); arr[2] === 3. Actual: ' + (arr[2])); -} - -//CHECK#6 -if (x.length !== 3) { - $ERROR('#6: var x = [0,1,2,3]; var arr = x.splice(1,4,4,5); x.length === 3. Actual: ' + (x.length)); -} - -//CHECK#7 -if (x[0] !== 0) { - $ERROR('#7: var x = [0,1,2,3]; var arr = x.splice(1,4,4,5); x[0] === 0. Actual: ' + (x[0])); -} - -//CHECK#8 -if (x[1] !== 4) { - $ERROR('#8: var x = [0,1,2,3]; var arr = x.splice(1,4,4,5); x[1] === 4. Actual: ' + (x[1])); -} - -//CHECK#9 -if (x[2] !== 5) { - $ERROR('#9: var x = [0,1,2,3]; var arr = x.splice(1,4,4,5); x[2] === 5. Actual: ' + (x[2])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.2_T1.js deleted file mode 100644 index f8c69de2b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.2_T1.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.12_A1.2_T1; - * @section: 15.4.4.12; - * @assertion: If start is negative, use max(start + length, 0). - * If deleteCount is negative, use 0; - * @description: -length = start < deleteCount < 0, itemCount = 0; -*/ - -var x = [0,1]; -var arr = x.splice(-2,-1); - -//CHECK#0 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#0: var x = [0,1]; var arr = x.splice(-2,-1); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#1 -if (arr.length !== 0) { - $ERROR('#1: var x = [0,1]; var arr = x.splice(-2,-1); arr.length === 0. Actual: ' + (arr.length)); -} - -//CHECK#2 -if (x.length !== 2) { - $ERROR('#2: var x = [0,1]; var arr = x.splice(-2,-1); x.length === 2. Actual: ' + (x.length)); -} - -//CHECK#3 -if (x[0] !== 0) { - $ERROR('#3: var x = [0,1]; var arr = x.splice(-2,-1); x[0] === 0. Actual: ' + (x[0])); -} - -//CHECK#4 -if (x[1] !== 1) { - $ERROR('#4: var x = [0,1]; var arr = x.splice(-2,-1); x[1] === 1. Actual: ' + (x[1])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.2_T2.js deleted file mode 100644 index 166ac9f95..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.2_T2.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.12_A1.2_T2; - * @section: 15.4.4.12; - * @assertion: If start is negative, use max(start + length, 0). - * If deleteCount is negative, use 0; - * @description: -length < start = deleteCount < 0, itemCount = 0; -*/ - -var x = [0,1]; -var arr = x.splice(-1,-1); - -//CHECK#0 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#0: var x = [0,1]; var arr = x.splice(-1,-1); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#1 -if (arr.length !== 0) { - $ERROR('#1: var x = [0,1]; var arr = x.splice(-1,-1); arr.length === 0. Actual: ' + (arr.length)); -} - -//CHECK#2 -if (x.length !== 2) { - $ERROR('#2: var x = [0,1]; var arr = x.splice(-1,-1); x.length === 2. Actual: ' + (x.length)); -} - -//CHECK#3 -if (x[0] !== 0) { - $ERROR('#3: var x = [0,1]; var arr = x.splice(-1,-1); x[0] === 0. Actual: ' + (x[0])); -} - -//CHECK#4 -if (x[1] !== 1) { - $ERROR('#4: var x = [0,1]; var arr = x.splice(-1,-1); x[1] === 1. Actual: ' + (x[1])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.2_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.2_T3.js deleted file mode 100644 index 9ffeb7aed..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.2_T3.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.12_A1.2_T3; - * @section: 15.4.4.12; - * @assertion: If start is negative, use max(start + length, 0). - * If deleteCount is negative, use 0; - * @description: -length = start < deleteCount < 0, itemCount > 0; -*/ - -var x = [0,1]; -var arr = x.splice(-2,-1,2,3); - -//CHECK#0 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#0: var x = [0,1]; var arr = x.splice(-2,-1,2,3); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#1 -if (arr.length !== 0) { - $ERROR('#1: var x = [0,1]; var arr = x.splice(-2,-1,2,3); arr.length === 0. Actual: ' + (arr.length)); -} - -//CHECK#2 -if (x.length !== 4) { - $ERROR('#2: var x = [0,1]; var arr = x.splice(-2,-1,2,3); x.length === 4. Actual: ' + (x.length)); -} - -//CHECK#3 -if (x[0] !== 2) { - $ERROR('#3: var x = [0,1]; var arr = x.splice(-2,-1,2,3); x[0] === 2. Actual: ' + (x[0])); -} - -//CHECK#4 -if (x[1] !== 3) { - $ERROR('#4: var x = [0,1]; var arr = x.splice(-2,-1,2,3); x[1] === 3. Actual: ' + (x[1])); -} - -//CHECK#5 -if (x[2] !== 0) { - $ERROR('#5: var x = [0,1]; var arr = x.splice(-2,-1,2,3); x[2] === 0. Actual: ' + (x[2])); -} - -//CHECK#6 -if (x[3] !== 1) { - $ERROR('#6: var x = [0,1]; var arr = x.splice(-2,-1,2,3); x[3] === 1. Actual: ' + (x[3])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.2_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.2_T4.js deleted file mode 100644 index 9f6cb0aac..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.2_T4.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.12_A1.2_T4; - * @section: 15.4.4.12; - * @assertion: If start is negative, use max(start + length, 0). - * If deleteCount is negative, use 0; - * @description: -length < start = deleteCount < 0, itemCount > 0; -*/ - -var x = [0,1]; -var arr = x.splice(-1,-1,2,3); - -//CHECK#0 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#0: var x = [0,1]; var arr = x.splice(-1,-1,2,3); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#1 -if (arr.length !== 0) { - $ERROR('#1: var x = [0,1]; var arr = x.splice(-1,-1,2,3); arr.length === 0. Actual: ' + (arr.length)); -} - -//CHECK#2 -if (x.length !== 4) { - $ERROR('#2: var x = [0,1]; var arr = x.splice(-1,-1,2,3); x.length === 4. Actual: ' + (x.length)); -} - -//CHECK#3 -if (x[0] !== 0) { - $ERROR('#3: var x = [0,1]; var arr = x.splice(-1,-1,2,3); x[0] === 0. Actual: ' + (x[0])); -} - -//CHECK#4 -if (x[1] !== 2) { - $ERROR('#4: var x = [0,1]; var arr = x.splice(-1,-1,2,3); x[1] === 2. Actual: ' + (x[1])); -} - -//CHECK#5 -if (x[2] !== 3) { - $ERROR('#5: var x = [0,1]; var arr = x.splice(-1,-1,2,3); x[2] === 3. Actual: ' + (x[2])); -} - -//CHECK#6 -if (x[3] !== 1) { - $ERROR('#6: var x = [0,1]; var arr = x.splice(-1,-1,2,3); x[3] === 1. Actual: ' + (x[3])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.2_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.2_T5.js deleted file mode 100644 index 017b5184b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.2_T5.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.12_A1.2_T5; - * @section: 15.4.4.12; - * @assertion: If start is negative, use max(start + length, 0). - * If deleteCount is negative, use 0; - * @description: start < -length < deleteCount < 0, itemCount > 0; -*/ - -var x = [0,1]; -var arr = x.splice(-3,-1,2,3); - -//CHECK#0 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#0: var x = [0,1]; var arr = x.splice(-3,-1,2,3); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#1 -if (arr.length !== 0) { - $ERROR('#1: var x = [0,1]; var arr = x.splice(-3,-1,2,3); arr.length === 0. Actual: ' + (arr.length)); -} - -//CHECK#2 -if (x.length !== 4) { - $ERROR('#2: var x = [0,1]; var arr = x.splice(-3,-1,2,3); x.length === 4. Actual: ' + (x.length)); -} - -//CHECK#3 -if (x[0] !== 2) { - $ERROR('#3: var x = [0,1]; var arr = x.splice(-3,-1,2,3); x[0] === 2. Actual: ' + (x[0])); -} - -//CHECK#4 -if (x[1] !== 3) { - $ERROR('#4: var x = [0,1]; var arr = x.splice(-3,-1,2,3); x[1] === 3. Actual: ' + (x[1])); -} - -//CHECK#5 -if (x[2] !== 0) { - $ERROR('#5: var x = [0,1]; var arr = x.splice(-3,-1,2,3); x[2] === 0. Actual: ' + (x[2])); -} - -//CHECK#6 -if (x[3] !== 1) { - $ERROR('#6: var x = [0,1]; var arr = x.splice(-3,-1,2,3); x[3] === 1. Actual: ' + (x[3])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.3_T1.js deleted file mode 100644 index edcb25d11..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.3_T1.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.12_A1.3_T1; - * @section: 15.4.4.12; - * @assertion: If start is positive, use min(start, length). - * If deleteCount is negative, use 0; - * @description: -length < deleteCount < start = 0, itemCount = 0; -*/ - -var x = [0,1]; -var arr = x.splice(0,-1); - -//CHECK#0 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#0: var x = [0,1]; var arr = x.splice(0,-1); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#1 -if (arr.length !== 0) { - $ERROR('#1: var x = [0,1]; var arr = x.splice(0,-1); arr.length === 0. Actual: ' + (arr.length)); -} - -//CHECK#2 -if (x.length !== 2) { - $ERROR('#2: var x = [0,1]; var arr = x.splice(0,-1); x.length === 2. Actual: ' + (x.length)); -} - -//CHECK#3 -if (x[0] !== 0) { - $ERROR('#3: var x = [0,1]; var arr = x.splice(0,-1); x[0] === 0. Actual: ' + (x[0])); -} - -//CHECK#4 -if (x[1] !== 1) { - $ERROR('#4: var x = [0,1]; var arr = x.splice(0,-1); x[1] === 1. Actual: ' + (x[1])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.3_T2.js deleted file mode 100644 index 969c68458..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.3_T2.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.12_A1.3_T2; - * @section: 15.4.4.12; - * @assertion: If start is positive, use min(start, length). - * If deleteCount is negative, use 0; - * @description: -length = -start < deleteCount < 0, itemCount = 0; -*/ - -var x = [0,1]; -var arr = x.splice(2,-1); - -//CHECK#0 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#0: var x = [0,1]; var arr = x.splice(2,-1); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#1 -if (arr.length !== 0) { - $ERROR('#1: var x = [0,1]; var arr = x.splice(2,-1); arr.length === 0. Actual: ' + (arr.length)); -} - -//CHECK#2 -if (x.length !== 2) { - $ERROR('#2: var x = [0,1]; var arr = x.splice(2,-1); x.length === 2. Actual: ' + (x.length)); -} - -//CHECK#3 -if (x[0] !== 0) { - $ERROR('#3: var x = [0,1]; var arr = x.splice(2,-1); x[0] === 0. Actual: ' + (x[0])); -} - -//CHECK#4 -if (x[1] !== 1) { - $ERROR('#4: var x = [0,1]; var arr = x.splice(2,-1); x[1] === 1. Actual: ' + (x[1])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.3_T3.js deleted file mode 100644 index 10e7c77c4..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.3_T3.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.12_A1.3_T3; - * @section: 15.4.4.12; - * @assertion: If start is positive, use min(start, length). - * If deleteCount is negative, use 0; - * @description: -length < deleteCount < start = 0, itemCount > 0; -*/ - -var x = [0,1]; -var arr = x.splice(0,-1,2,3); - -//CHECK#0 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#0: var x = [0,1]; var arr = x.splice(0,-1,2,3); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#1 -if (arr.length !== 0) { - $ERROR('#1: var x = [0,1]; var arr = x.splice(0,-1,2,3); arr.length === 0. Actual: ' + (arr.length)); -} - -//CHECK#2 -if (x.length !== 4) { - $ERROR('#2: var x = [0,1]; var arr = x.splice(0,-1,2,3); x.length === 4. Actual: ' + (x.length)); -} - -//CHECK#3 -if (x[0] !== 2) { - $ERROR('#3: var x = [0,1]; var arr = x.splice(0,-1,2,3); x[0] === 2. Actual: ' + (x[0])); -} - -//CHECK#4 -if (x[1] !== 3) { - $ERROR('#4: var x = [0,1]; var arr = x.splice(0,-1,2,3); x[1] === 3. Actual: ' + (x[1])); -} - -//CHECK#5 -if (x[2] !== 0) { - $ERROR('#5: var x = [0,1]; var arr = x.splice(0,-1,2,3); x[2] === 0. Actual: ' + (x[2])); -} - -//CHECK#6 -if (x[3] !== 1) { - $ERROR('#6: var x = [0,1]; var arr = x.splice(0,-1,2,3); x[3] === 1. Actual: ' + (x[3])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.3_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.3_T4.js deleted file mode 100644 index edf565843..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.3_T4.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.12_A1.3_T4; - * @section: 15.4.4.12; - * @assertion: If start is positive, use min(start, length). - * If deleteCount is negative, use 0; - * @description: -length = -start < deleteCount < 0, itemCount > 0; -*/ - -var x = [0,1]; -var arr = x.splice(2,-1,2,3); - -//CHECK#0 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#0: var x = [0,1]; var arr = x.splice(2,-1,2,3); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#1 -if (arr.length !== 0) { - $ERROR('#1: var x = [0,1]; var arr = x.splice(2,-1,2,3); arr.length === 0. Actual: ' + (arr.length)); -} - -//CHECK#2 -if (x.length !== 4) { - $ERROR('#2: var x = [0,1]; var arr = x.splice(2,-1,2,3); x.length === 4. Actual: ' + (x.length)); -} - -//CHECK#3 -if (x[0] !== 0) { - $ERROR('#3: var x = [0,1]; var arr = x.splice(2,-1,2,3); x[0] === 0. Actual: ' + (x[0])); -} - -//CHECK#4 -if (x[1] !== 1) { - $ERROR('#4: var x = [0,1]; var arr = x.splice(2,-1,2,3); x[1] === 1. Actual: ' + (x[1])); -} - -//CHECK#5 -if (x[2] !== 2) { - $ERROR('#5: var x = [0,1]; var arr = x.splice(2,-1,2,3); x[2] === 2. Actual: ' + (x[2])); -} - -//CHECK#6 -if (x[3] !== 3) { - $ERROR('#6: var x = [0,1]; var arr = x.splice(2,-1,2,3); x[3] === 3. Actual: ' + (x[3])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.3_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.3_T5.js deleted file mode 100644 index 2062edb1d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.3_T5.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.12_A1.3_T5; - * @section: 15.4.4.12; - * @assertion: If start is positive, use min(start, length). - * If deleteCount is negative, use 0; - * @description: -start < -length < deleteCount < 0, itemCount > 0; -*/ - -var x = [0,1]; -var arr = x.splice(3,-1,2,3); - -//CHECK#0 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#0: var x = [0,1]; var arr = x.splice(3,-1,2,3); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#1 -if (arr.length !== 0) { - $ERROR('#1: var x = [0,1]; var arr = x.splice(3,-1,2,3); arr.length === 0. Actual: ' + (arr.length)); -} - -//CHECK#2 -if (x.length !== 4) { - $ERROR('#2: var x = [0,1]; var arr = x.splice(3,-1,2,3); x.length === 4. Actual: ' + (x.length)); -} - -//CHECK#3 -if (x[0] !== 0) { - $ERROR('#3: var x = [0,1]; var arr = x.splice(3,-1,2,3); x[0] === 0. Actual: ' + (x[0])); -} - -//CHECK#4 -if (x[1] !== 1) { - $ERROR('#4: var x = [0,1]; var arr = x.splice(3,-1,2,3); x[1] === 1. Actual: ' + (x[1])); -} - -//CHECK#5 -if (x[2] !== 2) { - $ERROR('#5: var x = [0,1]; var arr = x.splice(3,-1,2,3); x[2] === 2. Actual: ' + (x[2])); -} - -//CHECK#6 -if (x[3] !== 3) { - $ERROR('#6: var x = [0,1]; var arr = x.splice(3,-1,2,3); x[3] === 3. Actual: ' + (x[3])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.4_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.4_T1.js deleted file mode 100644 index 134eb8c8d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.4_T1.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.12_A1.4_T1; - * @section: 15.4.4.12; - * @assertion: If start is negative, use max(start + length, 0). - * If deleteCount is positive, use min(deleteCount, length - start); - * @description: length = -start > deleteCount > 0, itemCount = 0; -*/ - -var x = [0,1,2,3]; -var arr = x.splice(-4,3); - -//CHECK#1 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: var x = [0,1,2,3]; var arr = x.splice(-4,3); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#2 -if (arr.length !== 3) { - $ERROR('#2: var x = [0,1,2,3]; var arr = x.splice(-4,3); arr.length === 3. Actual: ' + (arr.length)); -} - -//CHECK#3 -if (arr[0] !== 0) { - $ERROR('#3: var x = [0,1,2,3]; var arr = x.splice(-4,3); arr[0] === 0. Actual: ' + (arr[0])); -} - -//CHECK#4 -if (arr[1] !== 1) { - $ERROR('#4: var x = [0,1,2,3]; var arr = x.splice(-4,3); arr[1] === 1. Actual: ' + (arr[1])); -} - -//CHECK#5 -if (arr[2] !== 2) { - $ERROR('#5: var x = [0,1,2,3]; var arr = x.splice(-4,3); arr[2] === 2. Actual: ' + (arr[2])); -} - -//CHECK#6 -if (x.length !== 1) { - $ERROR('#6: var x = [0,1,2,3]; var arr = x.splice(-4,3); x.length === 1. Actual: ' + (x.length)); -} - -//CHECK#7 -if (x[0] !== 3) { - $ERROR('#7: var x = [0,1,2,3]; var arr = x.splice(-4,3); x[0] === 3. Actual: ' + (x[0])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.4_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.4_T2.js deleted file mode 100644 index 5f6976cc1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.4_T2.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.12_A1.4_T2; - * @section: 15.4.4.12; - * @assertion: If start is negative, use max(start + length, 0). - * If deleteCount is positive, use min(deleteCount, length - start); - * @description: length = -start > deleteCount > 0, itemCount > 0; -*/ - -var x = [0,1,2,3]; -var arr = x.splice(-4,3,4,5); - -//CHECK#1 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: var x = [0,1,2,3]; var arr = x.splice(-4,3,4,5); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#2 -if (arr.length !== 3) { - $ERROR('#2: var x = [0,1,2,3]; var arr = x.splice(-4,3,4,5); arr.length === 3. Actual: ' + (arr.length)); -} - -//CHECK#3 -if (arr[0] !== 0) { - $ERROR('#3: var x = [0,1,2,3]; var arr = x.splice(-4,3,4,5); arr[0] === 0. Actual: ' + (arr[0])); -} - -//CHECK#4 -if (arr[1] !== 1) { - $ERROR('#4: var x = [0,1,2,3]; var arr = x.splice(-4,3,4,5); arr[1] === 1. Actual: ' + (arr[1])); -} - -//CHECK#5 -if (arr[2] !== 2) { - $ERROR('#5: var x = [0,1,2,3]; var arr = x.splice(-4,3,4,5); arr[2] === 2. Actual: ' + (arr[2])); -} - -//CHECK#6 -if (x.length !== 3) { - $ERROR('#6: var x = [0,1,2,3]; var arr = x.splice(-4,3,4,5); x.length === 3. Actual: ' + (x.length)); -} - -//CHECK#7 -if (x[0] !== 4) { - $ERROR('#7: var x = [0,1,2,3]; var arr = x.splice(-4,3,4,5); x[0] === 4. Actual: ' + (x[0])); -} - -//CHECK#8 -if (x[1] !== 5) { - $ERROR('#8: var x = [0,1,2,3]; var arr = x.splice(-4,3,4,5); x[1] === 5. Actual: ' + (x[1])); -} - -//CHECK#9 -if (x[2] !== 3) { - $ERROR('#9: var x = [0,1,2,3]; var arr = x.splice(-4,3,4,5); x[2] === 3. Actual: ' + (x[2])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.4_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.4_T3.js deleted file mode 100644 index 6e5d59912..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.4_T3.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.12_A1.4_T3; - * @section: 15.4.4.12; - * @assertion: If start is negative, use max(start + length, 0). - * If deleteCount is positive, use min(deleteCount, length - start); - * @description: -start > length = deleteCount > 0, itemCount = 0; -*/ - -var x = [0,1,2,3]; -var arr = x.splice(-5,4); - -//CHECK#1 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: var x = [0,1,2,3]; var arr = x.splice(-5,4); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#2 -if (arr.length !== 4) { - $ERROR('#2: var x = [0,1,2,3]; var arr = x.splice(-5,4); arr.length === 4. Actual: ' + (arr.length)); -} - -//CHECK#3 -if (arr[0] !== 0) { - $ERROR('#3: var x = [0,1,2,3]; var arr = x.splice(-5,4); arr[0] === 0. Actual: ' + (arr[0])); -} - -//CHECK#4 -if (arr[1] !== 1) { - $ERROR('#4: var x = [0,1,2,3]; var arr = x.splice(-5,4); arr[1] === 1. Actual: ' + (arr[1])); -} - -//CHECK#5 -if (arr[2] !== 2) { - $ERROR('#5: var x = [0,1,2,3]; var arr = x.splice(-5,4); arr[2] === 2. Actual: ' + (arr[2])); -} - -//CHECK#6 -if (arr[3] !== 3) { - $ERROR('#6: var x = [0,1,2,3]; var arr = x.splice(-5,4); arr[3] === 3. Actual: ' + (arr[3])); -} - -//CHECK#7 -if (x.length !== 0) { - $ERROR('#7: var x = [0,1,2,3]; var arr = x.splice(-5,4); x.length === 0. Actual: ' + (x.length)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.4_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.4_T4.js deleted file mode 100644 index cd2417bf7..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.4_T4.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.12_A1.4_T4; - * @section: 15.4.4.12; - * @assertion: If start is negative, use max(start + length, 0). - * If deleteCount is positive, use min(deleteCount, length - start); - * @description: length > -start = deleteCount > 0, itemCount > 0; -*/ - -var x = [0,1,2,3]; -var arr = x.splice(-3,3,4,5); - -//CHECK#1 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: var x = [0,1,2,3]; var arr = x.splice(-3,3,4,5); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#2 -if (arr.length !== 3) { - $ERROR('#2: var x = [0,1,2,3]; var arr = x.splice(-3,3,4,5); arr.length === 3. Actual: ' + (arr.length)); -} - -//CHECK#3 -if (arr[0] !== 1) { - $ERROR('#3: var x = [0,1,2,3]; var arr = x.splice(-3,3,4,5); arr[0] === 1. Actual: ' + (arr[0])); -} - -//CHECK#4 -if (arr[1] !== 2) { - $ERROR('#4: var x = [0,1,2,3]; var arr = x.splice(-3,3,4,5); arr[1] === 2. Actual: ' + (arr[1])); -} - -//CHECK#5 -if (arr[2] !== 3) { - $ERROR('#5: var x = [0,1,2,3]; var arr = x.splice(-3,3,4,5); arr[2] === 3. Actual: ' + (arr[2])); -} - -//CHECK#6 -if (x.length !== 3) { - $ERROR('#6: var x = [0,1,2,3]; var arr = x.splice(-3,3,4,5); x.length === 3. Actual: ' + (x.length)); -} - -//CHECK#7 -if (x[0] !== 0) { - $ERROR('#7: var x = [0,1,2,3]; var arr = x.splice(-3,3,4,5); x[0] === 0. Actual: ' + (x[0])); -} - -//CHECK#8 -if (x[1] !== 4) { - $ERROR('#8: var x = [0,1,2,3]; var arr = x.splice(-3,3,4,5); x[1] === 4. Actual: ' + (x[1])); -} - -//CHECK#9 -if (x[2] !== 5) { - $ERROR('#9: var x = [0,1,2,3]; var arr = x.splice(-3,3,4,5); x[2] === 5. Actual: ' + (x[2])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.4_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.4_T5.js deleted file mode 100644 index baaba3faa..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.4_T5.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.12_A1.4_T5; - * @section: 15.4.4.12; - * @assertion: If start is negative, use max(start + length, 0). - * If deleteCount is positive, use min(deleteCount, length - start); - * @description: -start > deleteCount > length > 0, itemCount = 0; -*/ - -var x = [0,1,2,3]; -var arr = x.splice(-9,5); - -//CHECK#1 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: var x = [0,1,2,3]; var arr = x.splice(-9,5); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#2 -if (arr.length !== 4) { - $ERROR('#2: var x = [0,1,2,3]; var arr = x.splice(-9,5); arr.length === 4. Actual: ' + (arr.length)); -} - -//CHECK#3 -if (arr[0] !== 0) { - $ERROR('#3: var x = [0,1,2,3]; var arr = x.splice(-9,5); arr[0] === 0. Actual: ' + (arr[0])); -} - -//CHECK#4 -if (arr[1] !== 1) { - $ERROR('#4: var x = [0,1,2,3]; var arr = x.splice(-9,5); arr[1] === 1. Actual: ' + (arr[1])); -} - -//CHECK#5 -if (arr[2] !== 2) { - $ERROR('#5: var x = [0,1,2,3]; var arr = x.splice(-9,5); arr[2] === 2. Actual: ' + (arr[2])); -} - -//CHECK#6 -if (arr[3] !== 3) { - $ERROR('#6: var x = [0,1,2,3]; var arr = x.splice(-9,5); arr[3] === 3. Actual: ' + (arr[3])); -} - -//CHECK#7 -if (x.length !== 0) { - $ERROR('#7: var x = [0,1,2,3]; var arr = x.splice(-9,5); x.length === 0. Actual: ' + (x.length)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.4_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.4_T6.js deleted file mode 100644 index fee2e7463..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.4_T6.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.12_A1.4_T6; - * @section: 15.4.4.12; - * @assertion: If start is negative, use max(start + length, 0). - * If deleteCount is positive, use min(deleteCount, length - start); - * @description: length = deleteCount > -start > 0, itemCount > 0; -*/ - -var x = [0,1,2,3]; -var arr = x.splice(-3,4,4,5); - -//CHECK#1 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: var x = [0,1,2,3]; var arr = x.splice(-3,4,4,5); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#2 -if (arr.length !== 3) { - $ERROR('#2: var x = [0,1,2,3]; var arr = x.splice(-3,4,4,5); arr.length === 3. Actual: ' + (arr.length)); -} - -//CHECK#3 -if (arr[0] !== 1) { - $ERROR('#3: var x = [0,1,2,3]; var arr = x.splice(-3,4,4,5); arr[0] === 1. Actual: ' + (arr[0])); -} - -//CHECK#4 -if (arr[1] !== 2) { - $ERROR('#4: var x = [0,1,2,3]; var arr = x.splice(-3,4,4,5); arr[1] === 2. Actual: ' + (arr[1])); -} - -//CHECK#5 -if (arr[2] !== 3) { - $ERROR('#5: var x = [0,1,2,3]; var arr = x.splice(-3,4,4,5); arr[2] === 3. Actual: ' + (arr[2])); -} - -//CHECK#6 -if (x.length !== 3) { - $ERROR('#6: var x = [0,1,2,3]; var arr = x.splice(-3,4,4,5); x.length === 3. Actual: ' + (x.length)); -} - -//CHECK#7 -if (x[0] !== 0) { - $ERROR('#7: var x = [0,1,2,3]; var arr = x.splice(-3,4,4,5); x[0] === 0. Actual: ' + (x[0])); -} - -//CHECK#8 -if (x[1] !== 4) { - $ERROR('#8: var x = [0,1,2,3]; var arr = x.splice(-3,4,4,5); x[1] === 4. Actual: ' + (x[1])); -} - -//CHECK#9 -if (x[2] !== 5) { - $ERROR('#9: var x = [0,1,2,3]; var arr = x.splice(-3,4,4,5); x[2] === 5. Actual: ' + (x[2])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.5_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.5_T1.js deleted file mode 100644 index dbb61c191..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.5_T1.js +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.12_A1.5_T1; - * @section: 15.4.4.12; - * @assertion: Splice with undefined arguments; - * @description: start === undefined, end === undefined; -*/ - -var x = [0,1,2,3]; -var arr = x.splice(undefined, undefined); - -//CHECK#1 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: var x = [0,1,2,3]; var arr = x.splice(undefined, undefined); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#2 -if (arr.length !== 0) { - $ERROR('#2: var x = [0,1,2,3]; var arr = x.splice(undefined, undefined); arr.length === 0. Actual: ' + (arr.length)); -} - -//CHECK#3 -if (x.length !== 4) { - $ERROR('#3: var x = [0,1,2,3]; var arr = x.splice(undefined, undefined); x.length === 4. Actual: ' + (x.length)); -} - -//CHECK#4 -if (x[0] !== 0) { - $ERROR('#4: var x = [0,1,2,3]; var arr = x.splice(undefined, undefined); x[0] === 0. Actual: ' + (x[0])); -} - -//CHECK#5 -if (x[1] !== 1) { - $ERROR('#5: var x = [0,1,2,3]; var arr = x.splice(undefined, undefined); x[1] === 1. Actual: ' + (x[1])); -} - -//CHECK#6 -if (x[2] !== 2) { - $ERROR('#6: var x = [0,1,2,3]; var arr = x.splice(undefined, undefined); x[2] === 2. Actual: ' + (x[2])); -} - -//CHECK#7 -if (x[3] !== 3) { - $ERROR('#7: var x = [0,1,2,3]; var arr = x.splice(undefined, undefined); x[3] === 3. Actual: ' + (x[3])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.5_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.5_T2.js deleted file mode 100644 index 039393669..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A1.5_T2.js +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.12_A1.5_T2; - * @section: 15.4.4.12; - * @assertion: Splice with undefined arguments; - * @description: end === undefined; -*/ - -var x = [0,1,2,3]; -var arr = x.splice(1,undefined); - -//CHECK#1 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: var x = [0,1,2,3]; var arr = x.splice(1,undefined); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#2 -if (arr.length !== 0) { - $ERROR('#2: var x = [0,1,2,3]; var arr = x.splice(1,undefined); arr.length === 0. Actual: ' + (arr.length)); -} - -//CHECK#3 -if (x.length !== 4) { - $ERROR('#3: var x = [0,1,2,3]; var arr = x.splice(1,undefined); x.length === 4. Actual: ' + (x.length)); -} - -//CHECK#4 -if (x[0] !== 0) { - $ERROR('#4: var x = [0,1,2,3]; var arr = x.splice(1,undefined); x[0] === 0. Actual: ' + (x[0])); -} - -//CHECK#5 -if (x[1] !== 1) { - $ERROR('#5: var x = [0,1,2,3]; var arr = x.splice(1,undefined); x[1] === 1. Actual: ' + (x[1])); -} - -//CHECK#6 -if (x[2] !== 2) { - $ERROR('#6: var x = [0,1,2,3]; var arr = x.splice(1,undefined); x[2] === 2. Actual: ' + (x[2])); -} - -//CHECK#7 -if (x[3] !== 3) { - $ERROR('#7: var x = [0,1,2,3]; var arr = x.splice(1,undefined); x[3] === 3. Actual: ' + (x[3])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A2.1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A2.1_T1.js deleted file mode 100644 index 7f72adc4e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A2.1_T1.js +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.12_A2.1_T1; - * @section: 15.4.4.12; - * @assertion: Operator use ToInteger from start; - * @description: start is not integer; -*/ - -var x = [0,1,2,3]; -var arr = x.splice(1.5,3); - -//CHECK#1 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: var x = [0,1,2,3]; var arr = x.splice(1.5,3); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#2 -if (arr.length !== 3) { - $ERROR('#2: var x = [0,1,2,3]; var arr = x.splice(1.5,3); arr.length === 3. Actual: ' + (arr.length)); -} - -//CHECK#3 -if (arr[0] !== 1) { - $ERROR('#3: var x = [0,1,2,3]; var arr = x.splice(1.5,3); arr[0] === 1. Actual: ' + (arr[0])); -} - -//CHECK#4 -if (arr[1] !== 2) { - $ERROR('#4: var x = [0,1,2,3]; var arr = x.splice(1.5,3); arr[1] === 2. Actual: ' + (arr[1])); -} - -//CHECK#5 -if (arr[2] !== 3) { - $ERROR('#5: var x = [0,1,2,3]; var arr = x.splice(1.5,3); arr[2] === 3. Actual: ' + (arr[2])); -} - -//CHECK#6 -if (x.length !== 1) { - $ERROR('#6: var x = [0,1,2,3]; var arr = x.splice(1.5,3); x.length === 1. Actual: ' + (x.length)); -} - -//CHECK#7 -if (x[0] !== 0) { - $ERROR('#7: var x = [0,1,2,3]; var arr = x.splice(1.5,3); x[0] === 0. Actual: ' + (x[0])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A2.1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A2.1_T2.js deleted file mode 100644 index cb2d9bc08..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A2.1_T2.js +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.12_A2.1_T2; - * @section: 15.4.4.12; - * @assertion: Operator use ToInteger from start; - * @description: start = NaN; -*/ - -var x = [0,1,2,3]; -var arr = x.splice(NaN,3); - -//CHECK#1 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: var x = [0,1,2,3]; var arr = x.splice(NaN,3); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#2 -if (arr.length !== 3) { - $ERROR('#2: var x = [0,1,2,3]; var arr = x.splice(NaN,3); arr.length === 3. Actual: ' + (arr.length)); -} - -//CHECK#3 -if (arr[0] !== 0) { - $ERROR('#3: var x = [0,1,2,3]; var arr = x.splice(NaN,3); arr[0] === 0. Actual: ' + (arr[0])); -} - -//CHECK#4 -if (arr[1] !== 1) { - $ERROR('#4: var x = [0,1,2,3]; var arr = x.splice(NaN,3); arr[1] === 1. Actual: ' + (arr[1])); -} - -//CHECK#5 -if (arr[2] !== 2) { - $ERROR('#5: var x = [0,1,2,3]; var arr = x.splice(NaN,3); arr[2] === 2. Actual: ' + (arr[2])); -} - -//CHECK#6 -if (x.length !== 1) { - $ERROR('#6: var x = [0,1,2,3]; var arr = x.splice(NaN,3); x.length === 1. Actual: ' + (x.length)); -} - -//CHECK#7 -if (x[0] !== 3) { - $ERROR('#7: var x = [0,1,2,3]; var arr = x.splice(NaN,3); x[0] === 3. Actual: ' + (x[0])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A2.1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A2.1_T3.js deleted file mode 100644 index d33433849..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A2.1_T3.js +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.12_A2.1_T3; - * @section: 15.4.4.12; - * @assertion: Operator use ToInteger from start; - * @description: start = Infinity; -*/ - -var x = [0,1,2,3]; -var arr = x.splice(Number.POSITIVE_INFINITY,3); - -//CHECK#1 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: var x = [0,1,2,3]; var arr = x.splice(Number.POSITIVE_INFINITY,3); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#2 -if (arr.length !== 0) { - $ERROR('#2: var x = [0,1,2,3]; var arr = x.splice(Number.POSITIVE_INFINITY,3); arr.length === 0. Actual: ' + (arr.length)); -} - -//CHECK#3 -if (x[0] !== 0) { - $ERROR('#3: var x = [0,1,2,3]; var x = x.splice(Number.POSITIVE_INFINITY,3); x[0] === 0. Actual: ' + (x[0])); -} - -//CHECK#4 -if (x[1] !== 1) { - $ERROR('#4: var x = [0,1,2,3]; var x = x.splice(Number.POSITIVE_INFINITY,3); x[1] === 1. Actual: ' + (x[1])); -} - -//CHECK#5 -if (x[2] !== 2) { - $ERROR('#5: var x = [0,1,2,3]; var x = x.splice(Number.POSITIVE_INFINITY,3); x[2] === 2. Actual: ' + (x[2])); -} - -//CHECK#6 -if (x[3] !== 3) { - $ERROR('#6: var x = [0,1,2,3]; var x = x.splice(Number.POSITIVE_INFINITY,3); x[3] === 3. Actual: ' + (x[3])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A2.1_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A2.1_T4.js deleted file mode 100644 index 8ece1cad0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A2.1_T4.js +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.12_A2.1_T4; - * @section: 15.4.4.12; - * @assertion: Operator use ToInteger from start; - * @description: start = -Infinity; -*/ - -var x = [0,1,2,3]; -var arr = x.splice(Number.NEGATIVE_INFINITY,3); - -//CHECK#1 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: var x = [0,1,2,3]; var arr = x.splice(Number.NEGATIVE_INFINITY,3); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#2 -if (arr.length !== 3) { - $ERROR('#2: var x = [0,1,2,3]; var arr = x.splice(Number.NEGATIVE_INFINITY,3); arr.length === 3. Actual: ' + (arr.length)); -} - -//CHECK#3 -if (arr[0] !== 0) { - $ERROR('#3: var x = [0,1,2,3]; var arr = x.splice(Number.NEGATIVE_INFINITY,3); arr[0] === 0. Actual: ' + (arr[0])); -} - -//CHECK#4 -if (arr[1] !== 1) { - $ERROR('#4: var x = [0,1,2,3]; var arr = x.splice(Number.NEGATIVE_INFINITY,3); arr[1] === 1. Actual: ' + (arr[1])); -} - -//CHECK#5 -if (arr[2] !== 2) { - $ERROR('#5: var x = [0,1,2,3]; var arr = x.splice(Number.NEGATIVE_INFINITY,3); arr[2] === 2. Actual: ' + (arr[2])); -} - -//CHECK#6 -if (x.length !== 1) { - $ERROR('#6: var x = [0,1,2,3]; var arr = x.splice(Number.NEGATIVE_INFINITY,3); x.length === 1. Actual: ' + (x.length)); -} - -//CHECK#7 -if (x[0] !== 3) { - $ERROR('#7: var x = [0,1,2,3]; var arr = x.splice(Number.NEGATIVE_INFINITY,3); x[0] === 3. Actual: ' + (x[0])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A2.1_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A2.1_T5.js deleted file mode 100644 index ddd3c6ae8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A2.1_T5.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.12_A2.1_T5; - * @section: 15.4.4.12; - * @assertion: Operator use ToInteger from start; - * @description: ToInteger use ToNumber; - * @description: ToInteger use ToNumber; -*/ - -var x = [0,1,2,3]; -var arr = x.splice({valueOf: function() {return 0}, toString: function() {return 3}},3); - -//CHECK#1 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: var x = [0,1,2,3]; var arr = x.splice({valueOf: function() {return 0}, toString: function() {return 3}},3); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#2 -if (arr.length !== 3) { - $ERROR('#2: var x = [0,1,2,3]; var arr = x.splice({valueOf: function() {return 0}, toString: function() {return 3}},3); arr.length === 3. Actual: ' + (arr.length)); -} - -//CHECK#3 -if (arr[0] !== 0) { - $ERROR('#3: var x = [0,1,2,3]; var arr = x.splice({valueOf: function() {return 0}, toString: function() {return 3}},3); arr[0] === 0. Actual: ' + (arr[0])); -} - -//CHECK#4 -if (arr[1] !== 1) { - $ERROR('#4: var x = [0,1,2,3]; var arr = x.splice({valueOf: function() {return 0}, toString: function() {return 3}},3); arr[1] === 1. Actual: ' + (arr[1])); -} - -//CHECK#5 -if (arr[2] !== 2) { - $ERROR('#5: var x = [0,1,2,3]; var arr = x.splice({valueOf: function() {return 0}, toString: function() {return 3}},3); arr[2] === 2. Actual: ' + (arr[2])); -} - -//CHECK#6 -if (x.length !== 1) { - $ERROR('#6: var x = [0,1,2,3]; var arr = x.splice({valueOf: function() {return 0}, toString: function() {return 3}},3); x.length === 1. Actual: ' + (x.length)); -} - -//CHECK#7 -if (x[0] !== 3) { - $ERROR('#7: var x = [0,1,2,3]; var arr = x.splice({valueOf: function() {return 0}, toString: function() {return 3}},3); x[0] === 3. Actual: ' + (x[0])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A2.2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A2.2_T1.js deleted file mode 100644 index 6f7ed48da..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A2.2_T1.js +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.12_A2.2_T1; - * @section: 15.4.4.12; - * @assertion: Operator use ToInteger from deleteCount; - * @description: deleteCount is not integer; -*/ - -var x = [0,1,2,3]; -var arr = x.splice(1,3.5); - -//CHECK#1 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: var x = [0,1,2,3]; var arr = x.splice(1,3.5); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#2 -if (arr.length !== 3) { - $ERROR('#2: var x = [0,1,2,3]; var arr = x.splice(1,3.5); arr.length === 3. Actual: ' + (arr.length)); -} - -//CHECK#3 -if (arr[0] !== 1) { - $ERROR('#3: var x = [0,1,2,3]; var arr = x.splice(1,3.5); arr[0] === 1. Actual: ' + (arr[0])); -} - -//CHECK#4 -if (arr[1] !== 2) { - $ERROR('#4: var x = [0,1,2,3]; var arr = x.splice(1,3.5); arr[1] === 2. Actual: ' + (arr[1])); -} - -//CHECK#5 -if (arr[2] !== 3) { - $ERROR('#5: var x = [0,1,2,3]; var arr = x.splice(1,3.5); arr[2] === 3. Actual: ' + (arr[2])); -} - -//CHECK#6 -if (x.length !== 1) { - $ERROR('#6: var x = [0,1,2,3]; var arr = x.splice(1,3.5); x.length === 1. Actual: ' + (x.length)); -} - -//CHECK#7 -if (x[0] !== 0) { - $ERROR('#7: var x = [0,1,2,3]; var arr = x.splice(1,3.5); x[0] === 0. Actual: ' + (x[0])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A2.2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A2.2_T2.js deleted file mode 100644 index 6d6f782fb..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A2.2_T2.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.12_A2.2_T2; - * @section: 15.4.4.12; - * @assertion: Operator use ToInteger from deleteCount; - * @description: deleteCount = NaN; -*/ - -var x = [0,1]; -var arr = x.splice(0,NaN); - -//CHECK#0 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#0: var x = [0,1]; var arr = x.splice(0,NaN); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#1 -if (arr.length !== 0) { - $ERROR('#1: var x = [0,1]; var arr = x.splice(0,NaN); arr.length === 0. Actual: ' + (arr.length)); -} - -//CHECK#2 -if (x.length !== 2) { - $ERROR('#2: var x = [0,1]; var arr = x.splice(0,NaN); x.length === 2. Actual: ' + (x.length)); -} - -//CHECK#3 -if (x[0] !== 0) { - $ERROR('#3: var x = [0,1]; var arr = x.splice(0,NaN); x[0] === 0. Actual: ' + (x[0])); -} - -//CHECK#4 -if (x[1] !== 1) { - $ERROR('#4: var x = [0,1]; var arr = x.splice(0,NaN); x[1] === 1. Actual: ' + (x[1])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A2.2_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A2.2_T3.js deleted file mode 100644 index 4446d254c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A2.2_T3.js +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.12_A2.2_T3; - * @section: 15.4.4.12; - * @assertion: Operator use ToInteger from deleteCount; - * @description: deleteCount = Infinity; -*/ - -var x = [0,1,2,3]; -var arr = x.splice(0,Number.POSITIVE_INFINITY); - -//CHECK#1 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: var x = [0,1,2,3]; var arr = x.splice(0,Number.POSITIVE_INFINITY); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#2 -if (arr.length !== 4) { - $ERROR('#2: var x = [0,1,2,3]; var arr = x.splice(0,Number.POSITIVE_INFINITY); arr.length === 4. Actual: ' + (arr.length)); -} - -//CHECK#3 -if (arr[0] !== 0) { - $ERROR('#3: var x = [0,1,2,3]; var arr = x.splice(0,Number.POSITIVE_INFINITY); arr[0] === 0. Actual: ' + (arr[0])); -} - -//CHECK#4 -if (arr[1] !== 1) { - $ERROR('#4: var x = [0,1,2,3]; var arr = x.splice(0,Number.POSITIVE_INFINITY); arr[1] === 1. Actual: ' + (arr[1])); -} - -//CHECK#5 -if (arr[2] !== 2) { - $ERROR('#5: var x = [0,1,2,3]; var arr = x.splice(0,Number.POSITIVE_INFINITY); arr[2] === 2. Actual: ' + (arr[2])); -} - -//CHECK#6 -if (arr[3] !== 3) { - $ERROR('#6: var x = [0,1,2,3]; var arr = x.splice(0,Number.POSITIVE_INFINITY); arr[3] === 3. Actual: ' + (arr[3])); -} - -//CHECK#7 -if (x.length !== 0) { - $ERROR('#7: var x = [0,1,2,3]; var arr = x.splice(0,Number.POSITIVE_INFINITY); x.length === 0. Actual: ' + (x.length)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A2.2_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A2.2_T4.js deleted file mode 100644 index 401f55545..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A2.2_T4.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.12_A2.2_T4; - * @section: 15.4.4.12; - * @assertion: Operator use ToInteger from deleteCount; - * @description: deleteCount = -Infinity; -*/ - -var x = [0,1]; -var arr = x.splice(0,Number.NEGATIVE_INFINITY); - -//CHECK#0 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#0: var x = [0,1]; var arr = x.splice(0,Number.NEGATIVE_INFINITY); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#1 -if (arr.length !== 0) { - $ERROR('#1: var x = [0,1]; var arr = x.splice(0,Number.NEGATIVE_INFINITY); arr.length === 0. Actual: ' + (arr.length)); -} - -//CHECK#2 -if (x.length !== 2) { - $ERROR('#2: var x = [0,1]; var arr = x.splice(0,Number.NEGATIVE_INFINITY); x.length === 2. Actual: ' + (x.length)); -} - -//CHECK#3 -if (x[0] !== 0) { - $ERROR('#3: var x = [0,1]; var arr = x.splice(0,Number.NEGATIVE_INFINITY); x[0] === 0. Actual: ' + (x[0])); -} - -//CHECK#4 -if (x[1] !== 1) { - $ERROR('#4: var x = [0,1]; var arr = x.splice(0,Number.NEGATIVE_INFINITY); x[1] === 1. Actual: ' + (x[1])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A2.2_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A2.2_T5.js deleted file mode 100644 index 556f65d6d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A2.2_T5.js +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.12_A2.2_T5; - * @section: 15.4.4.12; - * @assertion: Operator use ToInteger from deleteCount; - * @description: ToInteger use ToNumber; -*/ - -var x = [0,1,2,3]; -var arr = x.splice(0,{valueOf: function() {return 3}, toString: function() {return 0}}); - -//CHECK#1 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: var x = [0,1,2,3]; var arr = x.splice(0,{valueOf: function() {return 3}, toString: function() {return 0}}); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#2 -if (arr.length !== 3) { - $ERROR('#2: var x = [0,1,2,3]; var arr = x.splice(0,{valueOf: function() {return 3}, toString: function() {return 0}}); arr.length === 3. Actual: ' + (arr.length)); -} - -//CHECK#3 -if (arr[0] !== 0) { - $ERROR('#3: var x = [0,1,2,3]; var arr = x.splice(0,{valueOf: function() {return 3}, toString: function() {return 0}}); arr[0] === 0. Actual: ' + (arr[0])); -} - -//CHECK#4 -if (arr[1] !== 1) { - $ERROR('#4: var x = [0,1,2,3]; var arr = x.splice(0,{valueOf: function() {return 3}, toString: function() {return 0}}); arr[1] === 1. Actual: ' + (arr[1])); -} - -//CHECK#5 -if (arr[2] !== 2) { - $ERROR('#5: var x = [0,1,2,3]; var arr = x.splice(0,{valueOf: function() {return 3}, toString: function() {return 0}}); arr[2] === 2. Actual: ' + (arr[2])); -} - -//CHECK#6 -if (x.length !== 1) { - $ERROR('#6: var x = [0,1,2,3]; var arr = x.splice(0,{valueOf: function() {return 3}, toString: function() {return 0}}); x.length === 1. Actual: ' + (x.length)); -} - -//CHECK#7 -if (x[0] !== 3) { - $ERROR('#7: var x = [0,1,2,3]; var arr = x.splice(0,{valueOf: function() {return 3}, toString: function() {return 0}}); x[0] === 3. Actual: ' + (x[0])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A2_T1.js deleted file mode 100644 index 3d3ed443d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A2_T1.js +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.12_A2_T1; - * @section: 15.4.4.12; - * @assertion: The splice function is intentionally generic. - * It does not require that its this value be an Array object; - * @description: If start is positive, use min(start, length). - * If deleteCount is positive, use min(deleteCount, length - start); -*/ - -var obj = {0:0,1:1,2:2,3:3}; -obj.length = 4; -obj.splice = Array.prototype.splice; -var arr = obj.splice(0,3,4,5); - -//CHECK#1 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: var obj = {0:0,1:1,2:2,3:3}; obj.length = 4; obj.splice = Array.prototype.splice; var arr = obj.splice(0,3,4,5); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#2 -if (arr.length !== 3) { - $ERROR('#2: var obj = {0:0,1:1,2:2,3:3}; obj.length = 4; obj.splice = Array.prototype.splice; var arr = obj.splice(0,3,4,5); arr.length === 3. Actual: ' + (arr.length)); -} - -//CHECK#3 -if (arr[0] !== 0) { - $ERROR('#3: var obj = {0:0,1:1,2:2,3:3}; obj.length = 4; obj.splice = Array.prototype.splice; var arr = obj.splice(0,3,4,5); arr[0] === 0. Actual: ' + (arr[0])); -} - -//CHECK#4 -if (arr[1] !== 1) { - $ERROR('#4: var obj = {0:0,1:1,2:2,3:3}; obj.length = 4; obj.splice = Array.prototype.splice; var arr = obj.splice(0,3,4,5); arr[1] === 1. Actual: ' + (arr[1])); -} - -//CHECK#5 -if (arr[2] !== 2) { - $ERROR('#5: var obj = {0:0,1:1,2:2,3:3}; obj.length = 4; obj.splice = Array.prototype.splice; var arr = obj.splice(0,3,4,5); arr[2] === 2. Actual: ' + (arr[2])); -} - -//CHECK#6 -if (obj.length !== 3) { - $ERROR('#6: var obj = {0:0,1:1,2:2,3:3}; obj.length = 4; obj.splice = Array.prototype.splice; var arr = obj.splice(0,3,4,5); obj.length === 3. Actual: ' + (obj.length)); -} - -//CHECK#7 -if (obj[0] !== 4) { - $ERROR('#7: var obj = {0:0,1:1,2:2,3:3}; obj.length = 4; obj.splice = Array.prototype.splice; var arr = obj.splice(0,3,4,5); obj[0] === 4. Actual: ' + (obj[0])); -} - -//CHECK#8 -if (obj[1] !== 5) { - $ERROR('#8: var obj = {0:0,1:1,2:2,3:3}; obj.length = 4; obj.splice = Array.prototype.splice; var arr = obj.splice(0,3,4,5); obj[1] === 5. Actual: ' + (obj[1])); -} - -//CHECK#9 -if (obj[2] !== 3) { - $ERROR('#9: var obj = {0:0,1:1,2:2,3:3}; obj.length = 4; obj.splice = Array.prototype.splice; var arr = obj.splice(0,3,4,5); obj[2] === 3. Actual: ' + (obj[2])); -} - -//CHECK#10 -if (obj[3] !== undefined) { - $ERROR('#10: var obj = {0:0,1:1,2:2,3:3}; obj.length = 4; obj.splice = Array.prototype.splice; var arr = obj.splice(0,3,4,5); obj[3] === undefined. Actual: ' + (obj[3])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A2_T2.js deleted file mode 100644 index 59b066368..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A2_T2.js +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.12_A2_T2; - * @section: 15.4.4.12; - * @assertion: The splice function is intentionally generic. - * It does not require that its this value be an Array object; - * @description: If start is negative, use max(start + length, 0). - * If deleteCount is negative, use 0; -*/ - -var obj = {0:0,1:1}; -obj.length = 2; -obj.splice = Array.prototype.splice; -var arr = obj.splice(-2,-1,2,3); - -//CHECK#0 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#0: var obj = {0:0,1:1}; obj.length = 2; obj.splice = Array.prototype.splice; var arr = obj.splice(-2,-1,2,3); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#1 -if (arr.length !== 0) { - $ERROR('#1: var obj = {0:0,1:1}; obj.length = 2; obj.splice = Array.prototype.splice; var arr = obj.splice(-2,-1,2,3); arr.length === 0. Actual: ' + (arr.length)); -} - -//CHECK#2 -if (obj.length !== 4) { - $ERROR('#2: var obj = {0:0,1:1}; obj.length = 2; obj.splice = Array.prototype.splice; var arr = obj.splice(-2,-1,2,3); obj.length === 4. Actual: ' + (obj.length)); -} - -//CHECK#3 -if (obj[0] !== 2) { - $ERROR('#3: var obj = {0:0,1:1}; obj.length = 2; obj.splice = Array.prototype.splice; var arr = obj.splice(-2,-1,2,3); obj[0] === 2. Actual: ' + (obj[0])); -} - -//CHECK#4 -if (obj[1] !== 3) { - $ERROR('#4: var obj = {0:0,1:1}; obj.length = 2; obj.splice = Array.prototype.splice; var arr = obj.splice(-2,-1,2,3); obj[1] === 3. Actual: ' + (obj[1])); -} - -//CHECK#5 -if (obj[2] !== 0) { - $ERROR('#5: var obj = {0:0,1:1}; obj.length = 2; obj.splice = Array.prototype.splice; var arr = obj.splice(-2,-1,2,3); obj[2] === 0. Actual: ' + (obj[2])); -} - -//CHECK#6 -if (obj[3] !== 1) { - $ERROR('#6: var obj = {0:0,1:1}; obj.length = 2; obj.splice = Array.prototype.splice; var arr = obj.splice(-2,-1,2,3); obj[3] === 1. Actual: ' + (obj[3])); -} - -//CHECK#7 -if (obj[4] !== undefined) { - $ERROR('#7: var obj = {0:0,1:1}; obj.length = 2; obj.splice = Array.prototype.splice; var arr = obj.splice(-2,-1,2,3); obj[4] === undefined. Actual: ' + (obj[4])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A2_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A2_T3.js deleted file mode 100644 index 8e6d0402d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A2_T3.js +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.12_A2_T3; - * @section: 15.4.4.12; - * @assertion: The splice function is intentionally generic. - * It does not require that its this value be an Array object; - * @description: If start is positive, use min(start, length). - * If deleteCount is negative, use 0; -*/ - -var obj = {0:0,1:1}; -obj.length = 2; -obj.splice = Array.prototype.splice; -var arr = obj.splice(0,-1,2,3); - -//CHECK#0 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#0: var obj = {0:0,1:1}; obj.length = 2; obj.splice = Array.prototype.splice; var arr = obj.splice(0,-1,2,3); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#1 -if (arr.length !== 0) { - $ERROR('#1: var obj = {0:0,1:1}; obj.length = 2; obj.splice = Array.prototype.splice; var arr = obj.splice(0,-1,2,3); arr.length === 0. Actual: ' + (arr.length)); -} - -//CHECK#2 -if (obj.length !== 4) { - $ERROR('#2: var obj = {0:0,1:1}; obj.length = 2; obj.splice = Array.prototype.splice; var arr = obj.splice(0,-1,2,3); obj.length === 4. Actual: ' + (obj.length)); -} - -//CHECK#3 -if (obj[0] !== 2) { - $ERROR('#3: var obj = {0:0,1:1}; obj.length = 2; obj.splice = Array.prototype.splice; var arr = obj.splice(0,-1,2,3); obj[0] === 2. Actual: ' + (obj[0])); -} - -//CHECK#4 -if (obj[1] !== 3) { - $ERROR('#4: var obj = {0:0,1:1}; obj.length = 2; obj.splice = Array.prototype.splice; var arr = obj.splice(0,-1,2,3); obj[1] === 3. Actual: ' + (obj[1])); -} - -//CHECK#5 -if (obj[2] !== 0) { - $ERROR('#5: var obj = {0:0,1:1}; obj.length = 2; obj.splice = Array.prototype.splice; var arr = obj.splice(0,-1,2,3); obj[2] === 0. Actual: ' + (obj[2])); -} - -//CHECK#6 -if (obj[3] !== 1) { - $ERROR('#6: var obj = {0:0,1:1}; obj.length = 2; obj.splice = Array.prototype.splice; var arr = obj.splice(0,-1,2,3); obj[3] === 1. Actual: ' + (obj[3])); -} - -//CHECK#7 -if (obj[4] !== undefined) { - $ERROR('#7: var obj = {0:0,1:1}; obj.length = 2; obj.splice = Array.prototype.splice; var arr = obj.splice(0,-1,2,3); obj[4] === undefined. Actual: ' + (obj[4])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A2_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A2_T4.js deleted file mode 100644 index 6443c4db4..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A2_T4.js +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.12_A2_T4; - * @section: 15.4.4.12; - * @assertion: The splice function is intentionally generic. - * It does not require that its this value be an Array object; - * @description: If start is negative, use max(start + length, 0). - * If deleteCount is positive, use min(deleteCount, length - start); -*/ - -var obj = {0:0,1:1,2:2,3:3}; -obj.length = 4; -obj.splice = Array.prototype.splice; -var arr = obj.splice(-4,3,4,5); - -//CHECK#1 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: var obj = {0:0,1:1,2:2,3:3}; obj.length = 4; obj.splice = Array.prototype.splice; var arr = obj.splice(-4,3,4,5); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#2 -if (arr.length !== 3) { - $ERROR('#2: var obj = {0:0,1:1,2:2,3:3}; obj.length = 4; obj.splice = Array.prototype.splice; var arr = obj.splice(-4,3,4,5); arr.length === 3. Actual: ' + (arr.length)); -} - -//CHECK#3 -if (arr[0] !== 0) { - $ERROR('#3: var obj = {0:0,1:1,2:2,3:3}; obj.length = 4; obj.splice = Array.prototype.splice; var arr = obj.splice(-4,3,4,5); arr[0] === 0. Actual: ' + (arr[0])); -} - -//CHECK#4 -if (arr[1] !== 1) { - $ERROR('#4: var obj = {0:0,1:1,2:2,3:3}; obj.length = 4; obj.splice = Array.prototype.splice; var arr = obj.splice(-4,3,4,5); arr[1] === 1. Actual: ' + (arr[1])); -} - -//CHECK#5 -if (arr[2] !== 2) { - $ERROR('#5: var obj = {0:0,1:1,2:2,3:3}; obj.length = 4; obj.splice = Array.prototype.splice; var arr = obj.splice(-4,3,4,5); arr[2] === 2. Actual: ' + (arr[2])); -} - -//CHECK#6 -if (obj.length !== 3) { - $ERROR('#6: var obj = {0:0,1:1,2:2,3:3}; obj.length = 4; obj.splice = Array.prototype.splice; var arr = obj.splice(-4,3,4,5); obj.length === 3. Actual: ' + (obj.length)); -} - -//CHECK#7 -if (obj[0] !== 4) { - $ERROR('#7: var obj = {0:0,1:1,2:2,3:3}; obj.length = 4; obj.splice = Array.prototype.splice; var arr = obj.splice(-4,3,4,5); obj[0] === 4. Actual: ' + (obj[0])); -} - -//CHECK#8 -if (obj[1] !== 5) { - $ERROR('#8: var obj = {0:0,1:1,2:2,3:3}; obj.length = 4; obj.splice = Array.prototype.splice; var arr = obj.splice(-4,3,4,5); obj[1] === 5. Actual: ' + (obj[1])); -} - -//CHECK#9 -if (obj[2] !== 3) { - $ERROR('#9: var obj = {0:0,1:1,2:2,3:3}; obj.length = 4; obj.splice = Array.prototype.splice; var arr = obj.splice(-4,3,4,5); obj[2] === 3. Actual: ' + (obj[2])); -} - -//CHECK#10 -if (obj[3] !== undefined) { - $ERROR('#10: var obj = {0:0,1:1,2:2,3:3}; obj.length = 4; obj.splice = Array.prototype.splice; var arr = obj.splice(-4,3,4,5); obj[3] === undefined. Actual: ' + (obj[3])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A3_T1.js deleted file mode 100644 index 5bd93a57b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A3_T1.js +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.12_A3_T1; - * @section: 15.4.4.12; - * @assertion: Check ToUint32(length) for non Array objects; - * @description: length is arbitrarily; -*/ - -var obj = {}; -obj.splice = Array.prototype.splice; -obj[0] = "x"; -obj[4294967295] = "y"; -obj.length = 4294967296; -var arr = obj.splice(4294967295, 1); - -//CHECK#1 -if (arr.length !== 0) { - $ERROR('#1: var obj = {}; obj.splice = Array.prototype.splice; obj[0] = "x"; obj[4294967295] = "y"; obj.length = 4294967296; var arr = obj.splice(4294967295,1); arr.length === 0. Actual: ' + (arr.length)); -} - -//CHECK#2 -if (obj.length !== 0) { - $ERROR('#2: var obj = {}; obj.splice = Array.prototype.splice; obj[0] = "x"; obj[4294967295] = "y"; obj.length = 4294967296; var arr = obj.splice(4294967295,1); obj.length === 0. Actual: ' + (obj.length)); -} - -//CHECK#3 -if (obj[0] !== "x") { - $ERROR('#3: var obj = {}; obj.splice = Array.prototype.splice; obj[0] = "x"; obj[4294967295] = "y"; obj.length = 4294967296; var arr = obj.splice(4294967295,1); obj[0] === "x". Actual: ' + (obj[0])); -} - -//CHECK#4 -if (obj[4294967295] !== "y") { - $ERROR('#4: var obj = {}; obj.splice = Array.prototype.splice; obj[0] = "x"; obj[4294967295] = "y"; obj.length = 4294967296; var arr = obj.splice(4294967295,1); obj[4294967295] === "y". Actual: ' + (obj[4294967295])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A3_T2.js deleted file mode 100644 index bac99a252..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A3_T2.js +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.12_A3_T2; - * @section: 15.4.4.12; - * @assertion: Check ToUint32(length) for non Array objects; - * @description: length is arbitrarily; -*/ - -var obj = {}; -obj.splice = Array.prototype.splice; -obj[0] = "x"; -obj.length = 4294967297; -var arr = obj.splice(0,1); - -//CHECK#1 -if (arr.length !== 1) { - $ERROR('#1: var obj = {}; obj.splice = Array.prototype.splice; obj[0] = "x"; obj[0] = "y"; obj.length = 4294967297; var arr = obj.splice(0,1); arr.length === 1. Actual: ' + (arr.length)); -} - -//CHECK#2 -if (arr[0] !== "x") { - $ERROR('#2: var obj = {}; obj.splice = Array.prototype.splice; obj[0] = "x"; obj[0] = "y"; obj.length = 1; var arr = obj.splice(0,1); arr[0] === "x". Actual: ' + (arr[0])); -} - -//CHECK#3 -if (obj.length !== 0) { - $ERROR('#3: var obj = {}; obj.splice = Array.prototype.splice; obj[0] = "x"; obj[0] = "y"; obj.length = 1; var arr = obj.splice(0,1); obj.length === 0. Actual: ' + (obj.length)); -} - -//CHECK#4 -if (obj[0] !== undefined) { - $ERROR('#4: var obj = {}; obj.splice = Array.prototype.splice; obj[0] = "x"; obj[0] = "y"; obj.length = 1; var arr = obj.splice(0,1); obj[0] === undefined. Actual: ' + (obj[0])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A3_T3.js deleted file mode 100644 index 1b66eed28..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A3_T3.js +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.12_A3_T3; - * @section: 15.4.4.12; - * @assertion: Check ToUint32(length) for non Array objects; - * @description: length is arbitrarily; -*/ - -var obj = {}; -obj.splice = Array.prototype.splice; -obj[4294967294] = "x"; -obj.length = -1; -var arr = obj.splice(4294967294,1); - -//CHECK#1 -if (arr.length !== 1) { - $ERROR('#1: var obj = {}; obj.splice = Array.prototype.splice; obj[4294967294] = "x"; obj.length = -1; var arr = obj.splice(4294967294,1); arr.length === 1. Actual: ' + (arr.length)); -} - -//CHECK#2 -if (arr[0] !== "x") { - $ERROR('#2: var obj = {}; obj.splice = Array.prototype.splice; obj[4294967294] = "x"; obj.length = 1; var arr = obj.splice(4294967294,1); arr[0] === "x". Actual: ' + (arr[0])); -} - -//CHECK#3 -if (obj.length !== 4294967294) { - $ERROR('#3: var obj = {}; obj.splice = Array.prototype.splice; obj[4294967294] = "x"; obj.length = 1; var arr = obj.splice(4294967294,1); obj.length === 4294967294. Actual: ' + (obj.length)); -} - -//CHECK#4 -if (obj[4294967294] !== undefined) { - $ERROR('#4: var obj = {}; obj.splice = Array.prototype.splice; obj[4294967294] = "x"; obj.length = 1; var arr = obj.splice(4294967294,1); obj[4294967294] === undefined. Actual: ' + (obj[4294967294])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A4_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A4_T1.js deleted file mode 100644 index 0f333bbf2..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A4_T1.js +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.12_A4_T1; - * @section: 15.4.4.12, 8.6.2.1; - * @assertion: [[Get]] from not an inherited property; - * @description: [[Prototype]] of Array instance is Array.prototype, [[Prototype] of Array.prototype is Object.prototype; -*/ - -Array.prototype[1] = -1; -x = [0,1]; -var arr = x.splice(1,1); - -//CHECK#1 -if (arr.length !== 1) { - $ERROR('#1: Array.prototype[1] = -1; x = [0,1]; var arr = x.splice(1,1); arr.length === 1. Actual: ' + (arr.length)); -} - -//CHECK#2 -if (arr[0] !== 1) { - $ERROR('#2: Array.prototype[1] = -1; x = [0,1]; var arr = x.splice(1,1); arr[0] === 1. Actual: ' + (arr[0])); -} - -//CHECK#3 -if (arr[1] !== -1) { - $ERROR('#3: Array.prototype[1] = -1; x = [0,1]; var arr = x.splice(1,1); arr[1] === -1. Actual: ' + (arr[1])); -} - -//CHECK#4 -if (x.length !== 1) { - $ERROR('#4: Array.prototype[1] = -1; x = [0,1]; var arr = x.splice(1,1); x.length === 1. Actual: ' + (x.length)); -} - -//CHECK#5 -if (x[0] !== 0) { - $ERROR('#5: Array.prototype[1] = -1; x = [0,1]; var arr = x.splice(1,1); x[0] === 0. Actual: ' + (x[0])); -} - -//CHECK#6 -if (x[1] !== -1) { - $ERROR('#6: Array.prototype[1] = -1; x = [0,1]; var arr = x.splice(1,1); x[1] === -1. Actual: ' + (x[1])); -} - - -Object.prototype[1] = -1; -Object.prototype.length = 2; -Object.prototype.splice = Array.prototype.splice; -x = {0:0, 1:1}; -var arr = x.splice(1,1); - -//CHECK#7 -if (arr.length !== 1) { - $ERROR('#7: Object.prototype[1] = -1; Object.prototype.length = 2; Object.prototype.splice = Array.prototype.splice; x = {0:0, 1:1}; var arr = x.splice(1,1); arr.length === 1. Actual: ' + (arr.length)); -} - -//CHECK#8 -if (arr[0] !== 1) { - $ERROR('#8: Object.prototype[1] = -1; Object.prototype.length = 2; Object.prototype.splice = Array.prototype.splice; x = {0:0, 1:1}; var arr = x.splice(1,1); arr[0] === 1. Actual: ' + (arr[0])); -} - -//CHECK#9 -if (arr[1] !== -1) { - $ERROR('#9: Object.prototype[1] = -1; Object.prototype.length = 2; Object.prototype.splice = Array.prototype.splice; x = {0:0, 1:1}; var arr = x.splice(1,1); arr[1] === -1. Actual: ' + (arr[1])); -} - -//CHECK#10 -if (x.length !== 1) { - $ERROR('#10: Object.prototype[1] = -1; Object.prototype.length = 2; Object.prototype.splice = Array.prototype.splice; x = {0:0, 1:1}; var arr = x.splice(1,1); x.length === 1. Actual: ' + (x.length)); -} - -//CHECK#11 -if (x[0] !== 0) { - $ERROR('#11: Object.prototype[1] = -1; Object.prototype.length = 2; Object.prototype.splice = Array.prototype.splice; x = {0:0, 1:1}; var arr = x.splice(1,1); x[0] === 0. Actual: ' + (x[0])); -} - -//CHECK#12 -if (x[1] !== -1) { - $ERROR('#12: Object.prototype[1] = -1; Object.prototype.length = 2; Object.prototype.splice = Array.prototype.splice; x = {0:0, 1:1}; var arr = x.splice(1,1); x[1] === -1. Actual: ' + (x[1])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A4_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A4_T2.js deleted file mode 100644 index 23b5efea4..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A4_T2.js +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.12_A4_T2; - * @section: 15.4.4.12, 8.6.2.1; - * @assertion: [[Get]] from not an inherited property; - * @description: [[Prototype]] of Array instance is Array.prototype, [[Prototype] of Array.prototype is Object.prototype; -*/ - -Array.prototype[1] = -1; -x = [0,1]; -var arr = x.splice(1,1,2); - -//CHECK#1 -if (arr.length !== 1) { - $ERROR('#1: Array.prototype[1] = -1; x = [0,1]; var arr = x.splice(1,1,2); arr.length === 1. Actual: ' + (arr.length)); -} - -//CHECK#2 -if (arr[0] !== 1) { - $ERROR('#2: Array.prototype[1] = -1; x = [0,1]; var arr = x.splice(1,1,2); arr[0] === 1. Actual: ' + (arr[0])); -} - -//CHECK#3 -if (arr[1] !== -1) { - $ERROR('#3: Array.prototype[1] = -1; x = [0,1]; var arr = x.splice(1,1,2); arr[1] === -1. Actual: ' + (arr[1])); -} - -//CHECK#4 -if (x.length !== 2) { - $ERROR('#4: Array.prototype[1] = -1; x = [0,1]; var arr = x.splice(1,1,2); x.length === 2. Actual: ' + (x.length)); -} - -//CHECK#5 -if (x[0] !== 0) { - $ERROR('#5: Array.prototype[1] = -1; x = [0,1]; var arr = x.splice(1,1,2); x[0] === 0. Actual: ' + (x[0])); -} - -//CHECK#6 -if (x[1] !== 2) { - $ERROR('#6: Array.prototype[1] = -1; x = [0,1]; var arr = x.splice(1,1,2); x[1] === 2. Actual: ' + (x[1])); -} - - -Object.prototype[1] = -1; -Object.prototype.length = 2; -Object.prototype.splice = Array.prototype.splice; -x = {0:0, 1:1}; -var arr = x.splice(1,1,2); - -//CHECK#7 -if (arr.length !== 1) { - $ERROR('#7: Object.prototype[1] = -1; Object.prototype.length = 2; Object.prototype.splice = Array.prototype.splice; x = {0:0, 1:1}; var arr = x.splice(1,1,2); arr.length === 1. Actual: ' + (arr.length)); -} - -//CHECK#8 -if (arr[0] !== 1) { - $ERROR('#8: Object.prototype[1] = -1; Object.prototype.length = 2; Object.prototype.splice = Array.prototype.splice; x = {0:0, 1:1}; var arr = x.splice(1,1,2); arr[0] === 1. Actual: ' + (arr[0])); -} - -//CHECK#9 -if (arr[1] !== -1) { - $ERROR('#9: Object.prototype[1] = -1; Object.prototype.length = 2; Object.prototype.splice = Array.prototype.splice; x = {0:0, 1:1}; var arr = x.splice(1,1,2); arr[1] === -1. Actual: ' + (arr[1])); -} - -//CHECK#10 -if (x.length !== 2) { - $ERROR('#10: Object.prototype[1] = -1; Object.prototype.length = 2; Object.prototype.splice = Array.prototype.splice; x = {0:0, 1:1}; var arr = x.splice(1,1,2); x.length === 2. Actual: ' + (x.length)); -} - -//CHECK#11 -if (x[0] !== 0) { - $ERROR('#11: Object.prototype[1] = -1; Object.prototype.length = 2; Object.prototype.splice = Array.prototype.splice; x = {0:0, 1:1}; var arr = x.splice(1,1,2); x[0] === 0. Actual: ' + (x[0])); -} - -//CHECK#12 -if (x[1] !== 2) { - $ERROR('#12: Object.prototype[1] = -1; Object.prototype.length = 2; Object.prototype.splice = Array.prototype.splice; x = {0:0, 1:1}; var arr = x.splice(1,1,2); x[1] === 2. Actual: ' + (x[1])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A4_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A4_T3.js deleted file mode 100644 index fdd6f8af1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A4_T3.js +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.12_A4_T3; - * @section: 15.4.4.12, 8.6.2.1; - * @assertion: [[Get]] from not an inherited property; - * @description: [[Prototype]] of Array instance is Array.prototype, [[Prototype] of Array.prototype is Object.prototype; -*/ - -Array.prototype[0] = -1; -x = []; -x.length = 1; -var arr = x.splice(0,1); - -//CHECK#1 -if (arr.length !== 1) { - $ERROR('#1: Array.prototype[0] = -1; x = []; x.length = 1; var arr = x.splice(0,1); arr.length === 1. Actual: ' + (arr.length)); -} - -//CHECK#2 -if (arr[0] !== -1) { - $ERROR('#2: Array.prototype[0] = -1; x = []; x.length = 1; var arr = x.splice(0,1); arr[0] === -1. Actual: ' + (arr[0])); -} - -delete arr[0]; - -//CHECK#3 -if (arr[0] !== -1) { - $ERROR('#3: Array.prototype[0] = -1; x = []; x.length = 1; var arr = x.splice(0,1); delete arr[0]; arr[0] === -1. Actual: ' + (arr[0])); -} - -//CHECK#4 -if (x.length !== 0) { - $ERROR('#4: Array.prototype[0] = -1; x = []; x.length = 1; var arr = x.splice(0,1); x.length === 0. Actual: ' + (x.length)); -} - -//CHECK#5 -if (x[0] !== -1) { - $ERROR('#5: Array.prototype[0] = -1; x = []; x.length = 1; var arr = x.splice(0,1); x[0] === -1. Actual: ' + (x[0])); -} - -Object.prototype[0] = -1; -Object.prototype.length = 1; -Object.prototype.splice = Array.prototype.splice; -x = {}; -var arr = x.splice(0,1); - -//CHECK#6 -if (arr.length !== 1) { - $ERROR('#6: Object.prototype[0] = -1; Object.prototype.length = 1; Object.prototype.splice = Array.prototype.splice; x = {}; var arr = x.splice(0,1); arr.length === 1. Actual: ' + (arr.length)); -} - -//CHECK#7 -if (arr[0] !== -1) { - $ERROR('#7: Object.prototype[0] = -1; Object.prototype.length = 1; Object.prototype.splice = Array.prototype.splice; x = {}; var arr = x.splice(0,1); arr[0] === -1. Actual: ' + (arr[0])); -} - -delete arr[0]; - -//CHECK#8 -if (arr[0] !== -1) { - $ERROR('#8: Object.prototype[0] = -1; Object.prototype.length = 1; Object.prototype.splice = Array.prototype.splice; x = {}; var arr = x.splice(0,1); delete arr[0]; arr[0] === -1. Actual: ' + (arr[0])); -} - -//CHECK#9 -if (x.length !== 0) { - $ERROR('#9: Object.prototype[0] = -1; Object.prototype.length = 1; Object.prototype.splice = Array.prototype.splice; x = {}; var arr = x.splice(0,1); x.length === 0. Actual: ' + (x.length)); -} - -//CHECK#10 -if (x[0] !== -1) { - $ERROR('#10: Object.prototype[0] = -1; Object.prototype.length = 1; Object.prototype.splice = Array.prototype.splice; x = {}; var arr = x.splice(0,1); x[0] === -1. Actual: ' + (x[0])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A5.1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A5.1.js deleted file mode 100644 index 14f2ca385..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A5.1.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.12_A5.1; -* @section: 15.4.4.12, 15.2.4.7, 12.6.4; -* @assertion: The length property of splice has the attribute DontEnum; -* @description: Checking use propertyIsEnumerable, for-in; -*/ - - -//CHECK#1 -if (Array.prototype.splice.propertyIsEnumerable('length') !== false) { - $ERROR('#1: Array.prototype.splice.propertyIsEnumerable(\'length\') === false. Actual: ' + (Array.prototype.splice.propertyIsEnumerable('length'))); -} - -//CHECK#2 -result = true; -for (p in Array.splice){ - if (p === "length") { - result = false; - } -} - -if (result !== true) { - $ERROR('#2: result = true; for (p in Array.splice) { if (p === "length") result = false; } result === true;'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A5.2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A5.2.js deleted file mode 100644 index e2294281f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A5.2.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.12_A5.2; -* @section: 15.4.4.12, 15.2.4.5, 11.4.1; -* @assertion: The length property of splice has the attribute DontDelete; -* @description: Checking use hasOwnProperty, delete; -*/ - -//CHECK#1 -if (Array.prototype.splice.hasOwnProperty('length') !== true) { - $FAIL('#1: Array.prototype.splice.hasOwnProperty(\'length\') === true. Actual: ' + (Array.prototype.splice.hasOwnProperty('length'))); -} - -delete Array.prototype.splice.length; - -//CHECK#2 -if (Array.prototype.splice.hasOwnProperty('length') !== true) { - $ERROR('#2: delete Array.prototype.splice.length; Array.prototype.splice.hasOwnProperty(\'length\') === true. Actual: ' + (Array.prototype.splice.hasOwnProperty('length'))); -} - -//CHECK#3 -if (Array.prototype.splice.length === undefined) { - $ERROR('#3: delete Array.prototype.splice.length; Array.prototype.splice.length !== undefined'); -} - - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A5.3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A5.3.js deleted file mode 100644 index 882cf7ef4..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A5.3.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.12_A5.3; -* @section: 15.4.4.12; -* @assertion: The length property of splice has the attribute ReadOnly; -* @description: Checking if varying the length property fails; -*/ - -//CHECK#1 -x = Array.prototype.splice.length; -Array.prototype.splice.length = Infinity; -if (Array.prototype.splice.length !== x) { - $ERROR('#1: x = Array.prototype.splice.length; Array.prototype.splice.length = Infinity; Array.prototype.splice.length === x. Actual: ' + (Array.prototype.splice.length)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A5.4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A5.4.js deleted file mode 100644 index 17db862fa..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A5.4.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.12_A5.4; -* @section: 15.4.4.12; -* @assertion: The length property of splice is 2; -* @description: splice.length === 1; -*/ - -//CHECK#1 -if (Array.prototype.splice.length !== 2) { - $ERROR('#1: Array.prototype.splice.length === 2. Actual: ' + (Array.prototype.splice.length)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A5.5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A5.5.js deleted file mode 100644 index fba2e89b3..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A5.5.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.12_A5.5; -* @section: 15.4.4.12, 15.2.4.7, 12.6.4; -* @assertion: The splice property of Array has the attribute DontEnum; -* @description: Checking use propertyIsEnumerable, for-in; -*/ - - -//CHECK#1 -if (Array.propertyIsEnumerable('splice') !== false) { - $ERROR('#1: Array.propertyIsEnumerable(\'splice\') === false. Actual: ' + (Array.propertyIsEnumerable('splice'))); -} - -//CHECK#2 -result = true; -for (p in Array){ - if (p === "splice") { - result = false; - } -} - -if (result !== true) { - $ERROR('#2: result = true; for (p in Array) { if (p === "splice") result = false; } result === true;'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A5.6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A5.6.js deleted file mode 100644 index 9b4aef82d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A5.6.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.12_A5.6; -* @section: 15.4.4.12; -* @assertion: The splice property of Array has not prototype property; -* @description: Checking Array.prototype.splice.prototype; -*/ - -//CHECK#1 -if (Array.prototype.splice.prototype !== undefined) { - $ERROR('#1: Array.prototype.splice.prototype === undefined. Actual: ' + (Array.prototype.splice.prototype)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A5.7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A5.7.js deleted file mode 100644 index 26e419e5d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.12_Array_prototype_splice/S15.4.4.12_A5.7.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.12_A5.7; -* @section: 15.4.4.12, 11.2.2; -* @assertion: The splice property of Array can't be used as constructor; -* @description: If property does not implement the internal [[Construct]] method, throw a TypeError exception; -*/ - -//CHECK#1 - -try { - new Array.prototype.splice(); - $ERROR('#1.1: new Array.prototype.splice() throw TypeError. Actual: ' + (new Array.prototype.splice())); -} catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1.2: new Array.prototype.splice() throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.13_Array_prototype_unshift/S15.4.4.13_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.13_Array_prototype_unshift/S15.4.4.13_A1_T1.js deleted file mode 100644 index a4f46d85c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.13_Array_prototype_unshift/S15.4.4.13_A1_T1.js +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.13_A1_T1; - * @section: 15.4.4.13; - * @assertion: The arguments are prepended to the start of the array, such that - * their order within the array is the same as the order in which they appear in - * the argument list; - * @description: Checking case when unsift is given no arguments or one argument; -*/ - -//CHECK#1 -x = new Array(); -var unshift = x.unshift(1); -if (unshift !== 1) { - $ERROR('#1: x = new Array(); x.unshift(1) === 1. Actual: ' + (unshift)); -} - -//CHECK#2 -if (x[0] !== 1) { - $ERROR('#2: x = new Array(); x.unshift(1); x[0] === 1. Actual: ' + (x[0])); -} - -//CHECK#3 -var unshift = x.unshift(); -if (unshift !== 1) { - $ERROR('#3: x = new Array(); x.unshift(1); x.unshift() === 1. Actual: ' + (unshift)); -} - -//CHECK#4 -if (x[1] !== undefined) { - $ERROR('#4: x = new Array(); x.unshift(1); x.unshift(); x[1] === unedfined. Actual: ' + (x[1])); -} - -//CHECK#5 -var unshift = x.unshift(-1); -if (unshift !== 2) { - $ERROR('#5: x = new Array(); x.unshift(1); x.unshift(); x.unshift(-1) === 2. Actual: ' + (unshift)); -} - -//CHECK#6 -if (x[0] !== -1) { - $ERROR('#6: x = new Array(); x.unshift(1); x.unshift(-1); x[0] === -1. Actual: ' + (x[0])); -} - -//CHECK#7 -if (x[1] !== 1) { - $ERROR('#7: x = new Array(); x.unshift(1); x.unshift(-1); x[1] === 1. Actual: ' + (x[1])); -} - -//CHECK#8 -if (x.length !== 2) { - $ERROR('#8: x = new Array(); x.unshift(1); x.unshift(); x.unshift(-1); x.length === 2. Actual: ' + (x.length)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.13_Array_prototype_unshift/S15.4.4.13_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.13_Array_prototype_unshift/S15.4.4.13_A1_T2.js deleted file mode 100644 index 619d38431..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.13_Array_prototype_unshift/S15.4.4.13_A1_T2.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.13_A1_T2; - * @section: 15.4.4.13; - * @assertion: The arguments are prepended to the start of the array, such that - * their order within the array is the same as the order in which they appear in - * the argument list; - * @description: Checking case when unsift is given many arguments; -*/ - -//CHECK#1 -x = []; -if (x.length !== 0) { - $ERROR('#1: x = []; x.length === 0. Actual: ' + (x.length)); -} - -//CHECK#2 -x[0] = 0; -var unshift = x.unshift(true, Number.POSITIVE_INFINITY, "NaN", "1", -1); -if (unshift !== 6) { - $ERROR('#2: x = []; x[0] = 0; x.unshift(true, Number.POSITIVE_INFINITY, "NaN", "1", -1) === 6. Actual: ' + (unshift)); -} - -//CHECK#3 -if (x[5] !== 0) { - $ERROR('#3: x = []; x[0] = 0; x.unshift(true, Number.POSITIVE_INFINITY, "NaN", "1", -1); x[5] === 0. Actual: ' + (x[5])); -} - -//CHECK#4 -if (x[0] !== true) { - $ERROR('#4: x = []; x[0] = 0; x.unshift(true, Number.POSITIVE_INFINITY, "NaN", "1", -1); x[0] === true. Actual: ' + (x[0])); -} - -//CHECK#5 -if (x[1] !== Number.POSITIVE_INFINITY) { - $ERROR('#5: x = []; x[0] = 0; x.unshift(true, Number.POSITIVE_INFINITY, "NaN", "1", -1); x[1] === Number.POSITIVE_INFINITY. Actual: ' + (x[1])); -} - -//CHECK#6 -if (x[2] !== "NaN") { - $ERROR('#6: x = []; x[0] = 0; x.unshift(true, Number.POSITIVE_INFINITY, "NaN", "1", -1); x[2] === "NaN". Actual: ' + (x[2])); -} - -//CHECK#7 -if (x[3] !== "1") { - $ERROR('#7: x = []; x[0] = 0; x.unshift(true, Number.POSITIVE_INFINITY, "NaN", "1", -1); x[3] === "1". Actual: ' + (x[3])); -} - -//CHECK#8 -if (x[4] !== -1) { - $ERROR('#8: x = []; x[0] = 0; x.unshift(true, Number.POSITIVE_INFINITY, "NaN", "1", -1); x[4] === -1. Actual: ' + (x[4])); -} - -//CHECK#9 -if (x.length !== 6) { - $ERROR('#9: x = []; x[0] = 0; x.unshift(true, Number.POSITIVE_INFINITY, "NaN", "1", -1); x.length === 6. Actual: ' + (x.length)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.13_Array_prototype_unshift/S15.4.4.13_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.13_Array_prototype_unshift/S15.4.4.13_A2_T1.js deleted file mode 100644 index abb88dba6..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.13_Array_prototype_unshift/S15.4.4.13_A2_T1.js +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.13_A2_T1; - * @section: 15.4.4.13; - * @assertion: The unshift function is intentionally generic. - * It does not require that its this value be an Array object; - * @description: The arguments are prepended to the start of the array, such that - * their order within the array is the same as the order in which they appear in - * the argument list; -*/ - -var obj = {}; -obj.unshift = Array.prototype.unshift; - -if (obj.length !== undefined) { - $ERROR('#0: var obj = {}; obj.length === undefined. Actual: ' + (obj.length)); -} else { - //CHECK#1 - var unshift = obj.unshift(-1); - if (unshift !== 1) { - $ERROR('#1: var obj = {}; obj.unshift = Array.prototype.unshift; obj.unshift(-1) === 1. Actual: ' + (unshift)); - } - //CHECK#2 - if (obj.length !== 1) { - $ERROR('#2: var obj = {}; obj.unshift = Array.prototype.unshift; obj.unshift(-1); obj.length === 1. Actual: ' + (obj.length)); - } - //CHECK#3 - if (obj["0"] !== -1) { - $ERROR('#3: var obj = {}; obj.unshift = Array.prototype.unshift; obj.unshift(-1); obj["0"] === -1. Actual: ' + (obj["0"])); - } -} - -//CHECK#4 -obj.length = undefined; -var unshift = obj.unshift(-4); -if (unshift !== 1) { - $ERROR('#4: var obj = {}; obj.length = undefined; obj.unshift = Array.prototype.unshift; obj.unshift(-4) === 1. Actual: ' + (unshift)); -} - -//CHECK#5 -if (obj.length !== 1) { - $ERROR('#5: var obj = {}; obj.length = undefined; obj.unshift = Array.prototype.unshift; obj.unshift(-4); obj.length === 1. Actual: ' + (obj.length)); -} - -//CHECK#6 -if (obj["0"] !== -4) { - $ERROR('#6: var obj = {}; obj.length = undefined; obj.unshift = Array.prototype.unshift; obj.unshift(-4); obj["0"] === -4. Actual: ' + (obj["0"])); -} - -//CHECK#7 -obj.length = null -var unshift = obj.unshift(-7); -if (unshift !== 1) { - $ERROR('#7: var obj = {}; obj.length = null; obj.unshift = Array.prototype.unshift; obj.unshift(-7) === 1. Actual: ' + (unshift)); -} - -//CHECK#8 -if (obj.length !== 1) { - $ERROR('#8: var obj = {}; obj.length = null; obj.unshift = Array.prototype.unshift; obj.unshift(-7); obj.length === 1. Actual: ' + (obj.length)); -} - -//CHECK#9 -if (obj["0"] !== -7) { - $ERROR('#9: var obj = {}; obj.length = null; obj.unshift = Array.prototype.unshift; obj.unshift(-7); obj["0"] === -7. Actual: ' + (obj["0"])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.13_Array_prototype_unshift/S15.4.4.13_A2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.13_Array_prototype_unshift/S15.4.4.13_A2_T2.js deleted file mode 100644 index 5c6fa0ccb..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.13_Array_prototype_unshift/S15.4.4.13_A2_T2.js +++ /dev/null @@ -1,117 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.13_A2_T2; - * @section: 15.4.4.13; - * @assertion: The unshift function is intentionally generic. - * It does not require that its this value be an Array object; - * @description: The arguments are prepended to the start of the array, such that - * their order within the array is the same as the order in which they appear in - * the argument list; -*/ - -var obj = {}; -obj.unshift = Array.prototype.unshift; - -//CHECK#1 -obj.length = NaN; -var unshift = obj.unshift(-1); -if (unshift !== 1) { - $ERROR('#1: var obj = {}; obj.length = NaN; obj.unshift = Array.prototype.unshift; obj.unshift(-1) === 1. Actual: ' + (unshift)); -} - -//CHECK#2 -if (obj.length !== 1) { - $ERROR('#2: var obj = {}; obj.length = NaN; obj.unshift = Array.prototype.unshift; obj.unshift(-1); obj.length === 1. Actual: ' + (obj.length)); -} - -//CHECK#3 -if (obj["0"] !== -1) { - $ERROR('#3: var obj = {}; obj.length = NaN; obj.unshift = Array.prototype.unshift; obj.unshift(-1); obj["0"] === -1. Actual: ' + (obj["0"])); -} - -//CHECK#4 -obj.length = Number.POSITIVE_INFINITY; -var unshift = obj.unshift(-4); -if (unshift !== 1) { - $ERROR('#4: var obj = {}; obj.length = Number.POSITIVE_INFINITY; obj.unshift = Array.prototype.unshift; obj.unshift(-4) === 1. Actual: ' + (unshift)); -} - -//CHECK#5 -if (obj.length !== 1) { - $ERROR('#6: var obj = {}; obj.length = Number.POSITIVE_INFINITY; obj.unshift = Array.prototype.unshift; obj.unshift(-4); obj.length === 1. Actual: ' + (obj.length)); -} - -//CHECK#6 -if (obj["0"] !== -4) { - $ERROR('#6: var obj = {}; obj.length = Number.POSITIVE_INFINITY; obj.unshift = Array.prototype.unshift; obj.unshift(-4); obj["0"] === -4. Actual: ' + (obj["0"])); -} - -//CHECK#7 -obj.length = Number.NEGATIVE_INFINITY; -var unshift = obj.unshift(-7); -if (unshift !== 1) { - $ERROR('#7: var obj = {}; obj.length = Number.NEGATIVE_INFINITY; obj.unshift = Array.prototype.unshift; obj.unshift(-7) === 1. Actual: ' + (unshift)); -} - -//CHECK#8 -if (obj.length !== 1) { - $ERROR('#8: var obj = {}; obj.length = Number.NEGATIVE_INFINITY; obj.unshift = Array.prototype.unshift; obj.unshift(-7); obj.length === 1. Actual: ' + (obj.length)); -} - -//CHECK#9 -if (obj["0"] !== -7) { - $ERROR('#9: var obj = {}; obj.length = Number.NEGATIVE_INFINITY; obj.unshift = Array.prototype.unshift; obj.unshift(-7); obj["0"] === -7. Actual: ' + (obj["0"])); -} - -//CHECK#10 -obj.length = 0.5; -var unshift = obj.unshift(-10); -if (unshift !== 1) { - $ERROR('#10: var obj = {}; obj.length = 0.5; obj.unshift = Array.prototype.unshift; obj.unshift(-10) === 1. Actual: ' + (unshift)); -} - -//CHECK#11 -if (obj.length !== 1) { - $ERROR('#11: var obj = {}; obj.length = 0.5; obj.unshift = Array.prototype.unshift; obj.unshift(-10); obj.length === 1. Actual: ' + (obj.length)); -} - -//CHECK#12 -if (obj["0"] !== -10) { - $ERROR('#12: var obj = {}; obj.length = 0.5; obj.unshift = Array.prototype.unshift; obj.unshift(-10); obj["0"] === -10. Actual: ' + (obj["0"])); -} - -//CHECK#13 -obj.length = 1.5; -var unshift = obj.unshift(-13); -if (unshift !== 2) { - $ERROR('#13: var obj = {}; obj.length = 1.5; obj.unshift = Array.prototype.unshift; obj.unshift(-13) === 2. Actual: ' + (unshift)); -} - -//CHECK#14 -if (obj.length !== 2) { - $ERROR('#14: var obj = {}; obj.length = 1.5; obj.unshift = Array.prototype.unshift; obj.unshift(-13); obj.length === 2. Actual: ' + (obj.length)); -} - -//CHECK#15 -if (obj["0"] !== -13) { - $ERROR('#15: var obj = {}; obj.length = 1.5; obj.unshift = Array.prototype.unshift; obj.unshift(-13); obj["0"] === -13. Actual: ' + (obj["0"])); -} - -//CHECK#16 -obj.length = new Number(0); -var unshift = obj.unshift(-16); -if (unshift !== 1) { - $ERROR('#16: var obj = {}; obj.length = new Number(0); obj.unshift = Array.prototype.unshift; obj.unshift(-16) === 1. Actual: ' + (unshift)); -} - -//CHECK#17 -if (obj.length !== 1) { - $ERROR('#17: var obj = {}; obj.length = new Number(0); obj.unshift = Array.prototype.unshift; obj.unshift(-16); obj.length === 1. Actual: ' + (obj.length)); -} - -//CHECK#18 -if (obj["0"] !== -16) { - $ERROR('#18: var obj = {}; obj.length = new Number(0); obj.unshift = Array.prototype.unshift; obj.unshift(-16); obj["0"] === -16. Actual: ' + (obj["0"])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.13_Array_prototype_unshift/S15.4.4.13_A2_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.13_Array_prototype_unshift/S15.4.4.13_A2_T3.js deleted file mode 100644 index 02b6b989d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.13_Array_prototype_unshift/S15.4.4.13_A2_T3.js +++ /dev/null @@ -1,91 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.13_A2_T3; - * @section: 15.4.4.13; - * @assertion: The unshift function is intentionally generic. - * It does not require that its this value be an Array object; - * @description: Operator use ToNumber from length. - * If Type(value) is Object, evaluate ToPrimitive(value, Number); -*/ - -var obj = {}; -obj.unshift = Array.prototype.unshift; - -//CHECK#1 -obj.length = {valueOf: function() {return 3}}; -var unshift = obj.unshift(); -if (unshift !== 3) { - $ERROR('#1: obj.length = {valueOf: function() {return 3}} obj.unshift() === 3. Actual: ' + (unshift)); -} - -//CHECK#2 -obj.length = {valueOf: function() {return 3}, toString: function() {return 1}}; -var unshift = obj.unshift(); -if (unshift !== 3) { - $ERROR('#0: obj.length = {valueOf: function() {return 3}, toString: function() {return 1}} obj.unshift() === 3. Actual: ' + (unshift)); -} - -//CHECK#3 -obj.length = {valueOf: function() {return 3}, toString: function() {return {}}}; -var unshift = obj.unshift(); -if (unshift !== 3) { - $ERROR('#1: obj.length = {valueOf: function() {return 3}, toString: function() {return {}}} obj.unshift() === 3. Actual: ' + (unshift)); -} - -//CHECK#4 -try { - obj.length = {valueOf: function() {return 3}, toString: function() {throw "error"}}; - var unshift = obj.unshift(); - if (unshift !== 3) { - $ERROR('#4.1: obj.length = {valueOf: function() {return 3}, toString: function() {throw "error"}}; obj.unshift() === ",". Actual: ' + (unshift)); - } -} -catch (e) { - if (e === "error") { - $ERROR('#4.2: obj.length = {valueOf: function() {return 3}, toString: function() {throw "error"}}; obj.unshift() not throw "error"'); - } else { - $ERROR('#4.3: obj.length = {valueOf: function() {return 3}, toString: function() {throw "error"}}; obj.unshift() not throw Error. Actual: ' + (e)); - } -} - -//CHECK#5 -obj.length = {toString: function() {return 1}}; -var unshift = obj.unshift(); -if (unshift !== 1) { - $ERROR('#5: obj.length = {toString: function() {return 1}} obj.unshift() === 1. Actual: ' + (unshift)); -} - -//CHECK#6 -obj.length = {valueOf: function() {return {}}, toString: function() {return 1}} -var unshift = obj.unshift(); -if (unshift !== 1) { - $ERROR('#6: obj.length = {valueOf: function() {return {}}, toString: function() {return 1}} obj.unshift() === 1. Actual: ' + (unshift)); -} - -//CHECK#7 -try { - - obj.length = {valueOf: function() {throw "error"}, toString: function() {return 1}}; - var unshift = obj.unshift(); - $ERROR('#7.1: obj.length = {valueOf: function() {throw "error"}, toString: function() {return 1}}; obj.unshift() throw "error". Actual: ' + (unshift)); -} -catch (e) { - if (e !== "error") { - $ERROR('#7.2: obj.length = {valueOf: function() {throw "error"}, toString: function() {return 1}}; obj.unshift() throw "error". Actual: ' + (e)); - } -} - -//CHECK#8 -try { - - obj.length = {valueOf: function() {return {}}, toString: function() {return {}}}; - var unshift = obj.unshift(); - $ERROR('#8.1: obj.length = {valueOf: function() {return {}}, toString: function() {return {}}} obj.unshift() throw TypeError. Actual: ' + (unshift)); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#8.2: obj.length = {valueOf: function() {return {}}, toString: function() {return {}}} obj.unshift() throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.13_Array_prototype_unshift/S15.4.4.13_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.13_Array_prototype_unshift/S15.4.4.13_A3_T1.js deleted file mode 100644 index 1b38b6af8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.13_Array_prototype_unshift/S15.4.4.13_A3_T1.js +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.13_A3_T1; - * @section: 15.4.4.13; - * @assertion: Check ToUint32(length) for non Array objects; - * @description: length = 4294967296; -*/ - -var obj = {}; -obj.unshift = Array.prototype.unshift; -obj.length = 4294967296; - -//CHECK#1 -var unshift = obj.unshift("x", "y", "z"); -if (unshift !== 3) { - $ERROR('#1: var obj = {}; obj.unshift = Array.prototype.unshift; obj.length = 4294967296; obj.unshift("x", "y", "z") === 3. Actual: ' + (unshift)); -} - -//CHECK#2 -if (obj.length !== 3) { - $ERROR('#2: var obj = {}; obj.unshift = Array.prototype.unshift; obj.length = 4294967296; obj.unshift("x", "y", "z"); obj.length === 3. Actual: ' + (obj.length)); -} - -//CHECK#3 -if (obj[0] !== "x") { - $ERROR('#3: var obj = {}; obj.unshift = Array.prototype.unshift; obj.length = 4294967296; obj.unshift("x", "y", "z"); obj[0] === "x". Actual: ' + (obj[0])); -} - -//CHECK#4 -if (obj[1] !== "y") { - $ERROR('#4: var obj = {}; obj.unshift = Array.prototype.unshift; obj.length = 4294967296; obj.unshift("x", "y", "z"); obj[1] === "y". Actual: ' + (obj[1])); -} - -//CHECK#5 -if (obj[2] !== "z") { - $ERROR('#5: var obj = {}; obj.unshift = Array.prototype.unshift; obj.length = 4294967296; obj.unshift("x", "y", "z"); obj[2] === "z". Actual: ' + (obj[2])); -} - -var obj = {}; -obj.unshift = Array.prototype.unshift; -obj.length = 4294967296; - -//CHECK#6 -var unshift = obj.unshift(); -if (unshift !== 0) { - $ERROR('#6: var obj = {}; obj.unshift = Array.prototype.unshift; obj.length = 4294967296; obj.unshift() === 0. Actual: ' + (unshift)); -} - -//CHECK#7 -if (obj.length !== 0) { - $ERROR('#7: var obj = {}; obj.unshift = Array.prototype.unshift; obj.length = 4294967296; obj.unshift(); obj.length === 0. Actual: ' + (obj.length)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.13_Array_prototype_unshift/S15.4.4.13_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.13_Array_prototype_unshift/S15.4.4.13_A3_T2.js deleted file mode 100644 index c747947b0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.13_Array_prototype_unshift/S15.4.4.13_A3_T2.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.13_A3_T2; - * @section: 15.4.4.13; - * @assertion: Check ToUint32(length) for non Array objects; - * @description: length = -4294967295; -*/ - -var obj = {}; -obj.unshift = Array.prototype.unshift; -obj[0] = ""; -obj.length = -4294967295; - -//CHECK#1 -var unshift = obj.unshift("x", "y", "z"); -if (unshift !== 4) { - $ERROR('#1: var obj = {}; obj.unshift = Array.prototype.unshift; obj[0] = ""; obj.length = -4294967295; obj.unshift("x", "y", "z") === 4. Actual: ' + (unshift)); -} - -//CHECK#2 -if (obj.length !== 4) { - $ERROR('#2: var obj = {}; obj.unshift = Array.prototype.unshift; obj[0] = ""; obj.length = -4294967295; obj.unshift("x", "y", "z"); obj.length === 4. Actual: ' + (obj.length)); -} - -//CHECK#3 -if (obj[0] !== "x") { - $ERROR('#3: var obj = {}; obj.unshift = Array.prototype.unshift; obj[0] = ""; obj.length = -4294967295; obj.unshift("x", "y", "z"); obj[0] === "x". Actual: ' + (obj[0])); -} - -//CHECK#4 -if (obj[1] !== "y") { - $ERROR('#4: var obj = {}; obj.unshift = Array.prototype.unshift; obj[0] = ""; obj.length = -4294967295; obj.unshift("x", "y", "z"); obj[1] === "y". Actual: ' + (obj[1])); -} - -//CHECK#5 -if (obj[2] !== "z") { - $ERROR('#5: var obj = {}; obj.unshift = Array.prototype.unshift; obj[0] = ""; obj.length = -4294967295; obj.unshift("x", "y", "z"); obj[2] === "z". Actual: ' + (obj[2])); -} - -//CHECK#6 -if (obj[3] !== "") { - $ERROR('#6: var obj = {}; obj.unshift = Array.prototype.unshift; obj[0] = ""; obj.length = -4294967295; obj.unshift("x", "y", "z"); obj[3] === "". Actual: ' + (obj[3])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.13_Array_prototype_unshift/S15.4.4.13_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.13_Array_prototype_unshift/S15.4.4.13_A3_T3.js deleted file mode 100644 index 3bb0058e8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.13_Array_prototype_unshift/S15.4.4.13_A3_T3.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.13_A3_T3; - * @section: 15.4.4.13; - * @assertion: Check ToUint32(length) for non Array objects; - * @description: length = 4294967297; -*/ - -var obj = {}; -obj.unshift = Array.prototype.unshift; -obj[0] = ""; -obj.length = 4294967297; - -//CHECK#1 -var unshift = obj.unshift("x", "y", "z"); -if (unshift !== 4) { - $ERROR('#1: var obj = {}; obj.unshift = Array.prototype.unshift; obj[0] = ""; obj.length = 4294967297; obj.unshift("x", "y", "z") === 4. Actual: ' + (unshift)); -} - -//CHECK#2 -if (obj.length !== 4) { - $ERROR('#2: var obj = {}; obj.unshift = Array.prototype.unshift; obj[0] = ""; obj.length = 4294967297; obj.unshift("x", "y", "z"); obj.length === 4. Actual: ' + (obj.length)); -} - -//CHECK#3 -if (obj[0] !== "x") { - $ERROR('#3: var obj = {}; obj.unshift = Array.prototype.unshift; obj[0] = ""; obj.length = 4294967297; obj.unshift("x", "y", "z"); obj[0] === "x". Actual: ' + (obj[0])); -} - -//CHECK#4 -if (obj[1] !== "y") { - $ERROR('#4: var obj = {}; obj.unshift = Array.prototype.unshift; obj[0] = ""; obj.length = 4294967297; obj.unshift("x", "y", "z"); obj[1] === "y". Actual: ' + (obj[1])); -} - -//CHECK#5 -if (obj[2] !== "z") { - $ERROR('#5: var obj = {}; obj.unshift = Array.prototype.unshift; obj[0] = ""; obj.length = 4294967297; obj.unshift("x", "y", "z"); obj[2] === "z". Actual: ' + (obj[2])); -} - -//CHECK#6 -if (obj[3] !== "") { - $ERROR('#6: var obj = {}; obj.unshift = Array.prototype.unshift; obj[0] = ""; obj.length = 4294967297; obj.unshift("x", "y", "z"); obj[3] === "". Actual: ' + (obj[3])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.13_Array_prototype_unshift/S15.4.4.13_A4_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.13_Array_prototype_unshift/S15.4.4.13_A4_T1.js deleted file mode 100644 index a8b869395..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.13_Array_prototype_unshift/S15.4.4.13_A4_T1.js +++ /dev/null @@ -1,75 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.13_A4_T1; - * @section: 15.4.4.13, 8.6.2.1, 8.6.2.5; - * @assertion: [[Get]], [[Delete]] from not an inherited property; - * @description: [[Prototype]] of Array instance is Array.prototype, [[Prototype] of Array.prototype is Object.prototype; -*/ - -Array.prototype[0] = -1; -x = [1]; -x.length = 1; - -//CHECK#1 -var unshift = x.unshift(0); -if (unshift !== 2) { - $ERROR('#1: Array.prototype[0] = -1; x = [1]; x.length = 1; x.unshift(0) === 2. Actual: ' + (unshift)); -} - -//CHECK#2 -if (x[0] !== 0) { - $ERROR('#2: Array.prototype[0] = -1; x = [1]; x.length = 1; x.unshift(0); x[0] === 0. Actual: ' + (x[0])); -} - -//CHECK#3 -if (x[1] !== 1) { - $ERROR('#3: Array.prototype[0] = -1; x = [1]; x.length = 1; x.unshift(0); x[1] === 1. Actual: ' + (x[1])); -} - -delete x[0]; - -//CHECK#4 -if (x[0] !== -1) { - $ERROR('#4: Array.prototype[0] = -1; x = [1]; x.length = 1; x.unshift(0); delete x[0]; x[0] === -1. Actual: ' + (x[0])); -} - -Object.prototype[0] = -1; -Object.prototype.length = 1; -Object.prototype.unshift = Array.prototype.unshift; -x = {0:1}; - -//CHECK#5 -var unshift = x.unshift(0); -if (unshift !== 2) { - $ERROR('#5: Object.prototype[0] = -1; Object.prototype.length = 1; Object.prototype.unshift = Array.prototype.unshift; x = {0:0}; x.unshift(0) === 2. Actual: ' + (unshift)); -} - -//CHECK#6 -if (x[0] !== 0) { - $ERROR('#6: Object.prototype[0] = -1; Object.prototype.length = 1; Object.prototype.unshift = Array.prototype.unshift; x = {0:0}; x.unshift(0); x[0] === 0. Actual: ' + (x[0])); -} - -//CHECK#7 -if (x[1] !== 1) { - $ERROR('#7: Object.prototype[0] = -1; Object.prototype.length = 1; Object.prototype.unshift = Array.prototype.unshift; x = {0:0}; x.unshift(0); x[1] === 1. Actual: ' + (x[1])); -} - -delete x[0]; - -//CHECK#8 -if (x[0] !== -1) { - $ERROR('#8: Object.prototype[0] = -1; Object.prototype.length = 1; Object.prototype.unshift = Array.prototype.unshift; x = {0:0}; x.unshift(0); delete x[0]; x[0] === -1. Actual: ' + (x[0])); -} - -//CHECK#9 -if (x.length !== 2) { - $ERROR('#9: Object.prototype[0] = -1; Object.prototype.length = 1; Object.prototype.unshift = Array.prototype.unshift; x = {0:0}; x.unshift(0); x.length === 1. Actual: ' + (x.length)); -} - -//CHECK#10 -delete x.length; -if (x.length !== 1) { - $ERROR('#10: Object.prototype[1] = -1; Object.prototype.length = 1; Object.prototype.unshift = Array.prototype.unshift; x = {0:0}; x.unshift(0); delete x; x.length === 1. Actual: ' + (x.length)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.13_Array_prototype_unshift/S15.4.4.13_A4_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.13_Array_prototype_unshift/S15.4.4.13_A4_T2.js deleted file mode 100644 index 2f9b63b4b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.13_Array_prototype_unshift/S15.4.4.13_A4_T2.js +++ /dev/null @@ -1,75 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.13_A4_T2; - * @section: 15.4.4.13, 8.6.2.1, 8.6.2.5; - * @assertion: [[Get]], [[Delete]] from not an inherited property; - * @description: [[Prototype]] of Array instance is Array.prototype, [[Prototype] of Array.prototype is Object.prototype; -*/ - -Array.prototype[0] = 1; -x = []; -x.length = 1; - -//CHECK#1 -var unshift = x.unshift(0); -if (unshift !== 2) { - $ERROR('#1: Array.prototype[0] = 1; x = []; x.length = 1; x.unshift(0) === 2. Actual: ' + (unshift)); -} - -//CHECK#2 -if (x[0] !== 0) { - $ERROR('#2: Array.prototype[0] = 1; x = []; x.length = 1; x.unshift(0); x[0] === 0. Actual: ' + (x[0])); -} - -//CHECK#3 -if (x[1] !== 1) { - $ERROR('#3: Array.prototype[0] = 1; x = []; x.length = 1; x.unshift(0); x[1] === 1. Actual: ' + (x[1])); -} - -delete x[0]; - -//CHECK#4 -if (x[0] !== 1) { - $ERROR('#4: Array.prototype[0] = 1; x = [1]; x.length = 1; x.unshift(0); delete x[0]; x[0] === 1. Actual: ' + (x[0])); -} - -Object.prototype[0] = 1; -Object.prototype.length = 1; -Object.prototype.unshift = Array.prototype.unshift; -x = {}; - -//CHECK#5 -var unshift = x.unshift(0); -if (unshift !== 2) { - $ERROR('#5: Object.prototype[0] = 1; Object.prototype.length = 1; Object.prototype.unshift = Array.prototype.unshift; x = {}; x.unshift(0) === 2. Actual: ' + (unshift)); -} - -//CHECK#6 -if (x[0] !== 0) { - $ERROR('#6: Object.prototype[0] = 1; Object.prototype.length = 1; Object.prototype.unshift = Array.prototype.unshift; x = {}; x.unshift(0); x[0] === 0. Actual: ' + (x[0])); -} - -//CHECK#7 -if (x[1] !== 1) { - $ERROR('#7: Object.prototype[0] = 1; Object.prototype.length = 1; Object.prototype.unshift = Array.prototype.unshift; x = {}; x.unshift(0); x[1] === 1. Actual: ' + (x[1])); -} - -delete x[0]; - -//CHECK#8 -if (x[0] !== 1) { - $ERROR('#8: Object.prototype[0] = 1; Object.prototype.length = 1; Object.prototype.unshift = Array.prototype.unshift; x = {}; x.unshift(0); delete x[0]; x[0] === 1. Actual: ' + (x[0])); -} - -//CHECK#9 -if (x.length !== 2) { - $ERROR('#9: Object.prototype[0] = 1; Object.prototype.length = 1; Object.prototype.unshift = Array.prototype.unshift; x = {}; x.unshift(0); x.length === 1. Actual: ' + (x.length)); -} - -//CHECK#10 -delete x.length; -if (x.length !== 1) { - $ERROR('#10: Object.prototype[1] = 1; Object.prototype.length = 1; Object.prototype.unshift = Array.prototype.unshift; x = {}; x.unshift(0); delete x; x.length === 1. Actual: ' + (x.length)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.13_Array_prototype_unshift/S15.4.4.13_A5.1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.13_Array_prototype_unshift/S15.4.4.13_A5.1.js deleted file mode 100644 index 10d0e1eea..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.13_Array_prototype_unshift/S15.4.4.13_A5.1.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.13_A5.1; -* @section: 15.4.4.13, 15.2.4.7, 12.6.4; -* @assertion: The length property of unshift has the attribute DontEnum; -* @description: Checking use propertyIsEnumerable, for-in; -*/ - - -//CHECK#1 -if (Array.prototype.unshift.propertyIsEnumerable('length') !== false) { - $ERROR('#1: Array.prototype.unshift.propertyIsEnumerable(\'length\') === false. Actual: ' + (Array.prototype.unshift.propertyIsEnumerable('length'))); -} - -//CHECK#2 -result = true; -for (p in Array.unshift){ - if (p === "length") { - result = false; - } -} - -if (result !== true) { - $ERROR('#2: result = true; for (p in Array.unshift) { if (p === "length") result = false; } result === true;'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.13_Array_prototype_unshift/S15.4.4.13_A5.2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.13_Array_prototype_unshift/S15.4.4.13_A5.2.js deleted file mode 100644 index c185671ff..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.13_Array_prototype_unshift/S15.4.4.13_A5.2.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.13_A5.2; -* @section: 15.4.4.13, 15.2.4.5, 11.4.1; -* @assertion: The length property of unshift has the attribute DontDelete; -* @description: Checking use hasOwnProperty, delete; -*/ - -//CHECK#1 -if (Array.prototype.unshift.hasOwnProperty('length') !== true) { - $FAIL('#1: Array.prototype.unshift.hasOwnProperty(\'length\') === true. Actual: ' + (Array.prototype.unshift.hasOwnProperty('length'))); -} - -delete Array.prototype.unshift.length; - -//CHECK#2 -if (Array.prototype.unshift.hasOwnProperty('length') !== true) { - $ERROR('#2: delete Array.prototype.unshift.length; Array.prototype.unshift.hasOwnProperty(\'length\') === true. Actual: ' + (Array.prototype.unshift.hasOwnProperty('length'))); -} - -//CHECK#3 -if (Array.prototype.unshift.length === undefined) { - $ERROR('#3: delete Array.prototype.unshift.length; Array.prototype.unshift.length !== undefined'); -} - - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.13_Array_prototype_unshift/S15.4.4.13_A5.3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.13_Array_prototype_unshift/S15.4.4.13_A5.3.js deleted file mode 100644 index 0a93cef55..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.13_Array_prototype_unshift/S15.4.4.13_A5.3.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.13_A5.3; -* @section: 15.4.4.13; -* @assertion: The length property of unshift has the attribute ReadOnly; -* @description: Checking if varying the length property fails; -*/ - -//CHECK#1 -x = Array.prototype.unshift.length; -Array.prototype.unshift.length = Infinity; -if (Array.prototype.unshift.length !== x) { - $ERROR('#1: x = Array.prototype.unshift.length; Array.prototype.unshift.length = Infinity; Array.prototype.unshift.length === x. Actual: ' + (Array.prototype.unshift.length)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.13_Array_prototype_unshift/S15.4.4.13_A5.4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.13_Array_prototype_unshift/S15.4.4.13_A5.4.js deleted file mode 100644 index c12d17fdf..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.13_Array_prototype_unshift/S15.4.4.13_A5.4.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.13_A5.4; -* @section: 15.4.4.13; -* @assertion: The length property of unshift is 1; -* @description: unshift.length === 1; -*/ - -//CHECK#1 -if (Array.prototype.unshift.length !== 1) { - $ERROR('#1: Array.prototype.unshift.length === 1. Actual: ' + (Array.prototype.unshift.length)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.13_Array_prototype_unshift/S15.4.4.13_A5.5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.13_Array_prototype_unshift/S15.4.4.13_A5.5.js deleted file mode 100644 index f22508ac2..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.13_Array_prototype_unshift/S15.4.4.13_A5.5.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.13_A5.5; -* @section: 15.4.4.13, 15.2.4.7, 12.6.4; -* @assertion: The unshift property of Array has the attribute DontEnum; -* @description: Checking use propertyIsEnumerable, for-in; -*/ - - -//CHECK#1 -if (Array.propertyIsEnumerable('unshift') !== false) { - $ERROR('#1: Array.propertyIsEnumerable(\'unshift\') === false. Actual: ' + (Array.propertyIsEnumerable('unshift'))); -} - -//CHECK#2 -result = true; -for (p in Array){ - if (p === "unshift") { - result = false; - } -} - -if (result !== true) { - $ERROR('#2: result = true; for (p in Array) { if (p === "unshift") result = false; } result === true;'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.13_Array_prototype_unshift/S15.4.4.13_A5.6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.13_Array_prototype_unshift/S15.4.4.13_A5.6.js deleted file mode 100644 index 7075afe70..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.13_Array_prototype_unshift/S15.4.4.13_A5.6.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.13_A5.6; -* @section: 15.4.4.13; -* @assertion: The unshift property of Array has not prototype property; -* @description: Checking Array.prototype.unshift.prototype; -*/ - -//CHECK#1 -if (Array.prototype.unshift.prototype !== undefined) { - $ERROR('#1: Array.prototype.unshift.prototype === undefined. Actual: ' + (Array.prototype.unshift.prototype)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.13_Array_prototype_unshift/S15.4.4.13_A5.7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.13_Array_prototype_unshift/S15.4.4.13_A5.7.js deleted file mode 100644 index 8f66c8e17..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.13_Array_prototype_unshift/S15.4.4.13_A5.7.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.13_A5.7; -* @section: 15.4.4.13, 11.2.2; -* @assertion: The unshift property of Array can't be used as constructor; -* @description: If property does not implement the internal [[Construct]] method, throw a TypeError exception; -*/ - -//CHECK#1 - -try { - new Array.prototype.unshift(); - $ERROR('#1.1: new Array.prototype.unshift() throw TypeError. Actual: ' + (new Array.prototype.unshift())); -} catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1.2: new Array.prototype.unshift() throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.1_Array_prototype_constructor/S15.4.4.1_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.1_Array_prototype_constructor/S15.4.4.1_A1_T1.js deleted file mode 100644 index 5c00509a7..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.1_Array_prototype_constructor/S15.4.4.1_A1_T1.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.1_A1_T1; - * @section: 15.4.4.1; - * @assertion: The initial value of Array.prototype.constructor is - * the built-in Array constructor; - * @description: Array.prototype.constructor === Array; -*/ - -//CHECK#1 -if (Array.prototype.constructor !== Array) { - $ERROR('#1: Array.prototype.constructor === Array. Actual: ' + (Array.prototype.constructor)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.1_Array_prototype_constructor/S15.4.4.1_A2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.1_Array_prototype_constructor/S15.4.4.1_A2.js deleted file mode 100644 index 03452d9a9..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.1_Array_prototype_constructor/S15.4.4.1_A2.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.1_A2; - * @section: 15.4.4.1, 15.2.4.7, 12.6.4; - * @assertion: The constructor property of Array has the attribute DontEnum; - * @description: Checking use propertyIsEnumerable, for-in; -*/ - - -//CHECK#1 -if (Array.propertyIsEnumerable('constructor') !== false) { - $ERROR('#1: Array.propertyIsEnumerable(\'constructor\') === false. Actual: ' + (Array.propertyIsEnumerable('constructor'))); -} - -//CHECK#2 -result = true; -for (p in Array){ - if (p === "constructor") { - result = false; - } -} - -if (result !== true) { - $ERROR('#2: result = true; for (p in Array) { if (p === "constructor") result = false; } result === true;'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.2_Array_prototype_toString/S15.4.4.2_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.2_Array_prototype_toString/S15.4.4.2_A1_T1.js deleted file mode 100644 index 02f85d5aa..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.2_Array_prototype_toString/S15.4.4.2_A1_T1.js +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.2_A1_T1; - * @section: 15.4.4.2; - * @assertion: The result of calling this function is the same as if - * the built-in join method were invoked for this object with no argument; - * @description: If Result(2) is zero, return the empty string; -*/ - -//CHECK#1 -x = new Array(); -if (x.toString() !== x.join()) { - $ERROR('#1.1: x = new Array(); x.toString() === x.join(). Actual: ' + (x.toString())); -} else { - if (x.toString() !== "") { - $ERROR('#1.2: x = new Array(); x.toString() === "". Actual: ' + (x.toString())); - } -} - -//CHECK#2 -x = []; -x[0] = 1; -x.length = 0; -if (x.toString() !== x.join()) { - $ERROR('#2.1: x = []; x[0] = 1; x.length = 0; x.toString() === x.join(). Actual: ' + (x.toString())); -} else { - if (x.toString() !== "") { - $ERROR('#2.2: x = []; x[0] = 1; x.length = 0; x.toString() === "". Actual: ' + (x.toString())); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.2_Array_prototype_toString/S15.4.4.2_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.2_Array_prototype_toString/S15.4.4.2_A1_T2.js deleted file mode 100644 index efb6cde1e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.2_Array_prototype_toString/S15.4.4.2_A1_T2.js +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.2_A1_T2; - * @section: 15.4.4.2; - * @assertion: The result of calling this function is the same as if - * the built-in join method were invoked for this object with no argument; - * @description: The elements of the array are converted to strings, and these strings are - * then concatenated, separated by occurrences of the separator. If no separator is provided, - * a single comma is used as the separator; -*/ - -//CHECK#1 -x = new Array(0,1,2,3); -if (x.toString() !== x.join()) { - $ERROR('#1.1: x = new Array(0,1,2,3); x.toString() === x.join(). Actual: ' + (x.toString())); -} else { - if (x.toString() !== "0,1,2,3") { - $ERROR('#1.2: x = new Array(0,1,2,3); x.toString() === "0,1,2,3". Actual: ' + (x.toString())); - } -} - -//CHECK#2 -x = []; -x[0] = 0; -x[3] = 3; -if (x.toString() !== x.join()) { - $ERROR('#2.1: x = []; x[0] = 0; x[3] = 3; x.toString() === x.join(). Actual: ' + (x.toString())); -} else { - if (x.toString() !== "0,,,3") { - $ERROR('#2.2: x = []; x[0] = 0; x[3] = 3; x.toString() === "0,,,3". Actual: ' + (x.toString())); - } -} - -//CHECK#3 -x = Array(undefined,1,null,3); -if (x.toString() !== x.join()) { - $ERROR('#3.1: x = Array(undefined,1,null,3); x.toString() === x.join(). Actual: ' + (x.toString())); -} else { - if (x.toString() !== ",1,,3") { - $ERROR('#3.2: x = Array(undefined,1,null,3); x.toString() === ",1,,3". Actual: ' + (x.toString())); - } -} - -//CHECK#4 -x = []; -x[0] = 0; -if (x.toString() !== x.join()) { - $ERROR('#4.1: x = []; x[0] = 0; x.toString() === x.join(). Actual: ' + (x.toString())); -} else { - if (x.toString() !== "0") { - $ERROR('#4.2: x = []; x[0] = 0; x.toString() === "0". Actual: ' + (x.toString())); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.2_Array_prototype_toString/S15.4.4.2_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.2_Array_prototype_toString/S15.4.4.2_A1_T3.js deleted file mode 100644 index 2b80d6e5f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.2_Array_prototype_toString/S15.4.4.2_A1_T3.js +++ /dev/null @@ -1,90 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.2_A1_T3; - * @section: 15.4.4.2; - * @assertion: The result of calling this function is the same as if - * the built-in join method were invoked for this object with no argument; - * @description: Operator use ToString from array arguments; -*/ - -//CHECK#0 -var x = new Array("","",""); -if (x.toString() !== x.join()) { - $ERROR('#0.1: var x = new Array("","",""); x.toString() === x.join(). Actual: ' + (x.toString())); -} else { - if (x.toString() !== ",,") { - $ERROR('#0.2: var x = new Array("","",""); x.toString() === ",,". Actual: ' + (x.toString())); - } -} - -//CHECK#1 -var x = new Array("\\","\\","\\"); -if (x.toString() !== x.join()) { - $ERROR('#1.1: var x = new Array("\\","\\","\\"); x.toString() === x.join(). Actual: ' + (x.toString())); -} else { - if (x.toString() !== "\\,\\,\\") { - $ERROR('#1.2: var x = new Array("\\","\\","\\"); x.toString() === "\\,\\,\\". Actual: ' + (x.toString())); - } -} - -//CHECK#2 -var x = new Array("&", "&", "&"); -if (x.toString() !== x.join()) { - $ERROR('#2.1: var x = new Array("&", "&", "&"); x.toString() === x.join(). Actual: ' + (x.toString())); -} else { - if (x.toString() !== "&,&,&") { - $ERROR('#2.2: var x = new Array("&", "&", "&"); x.toString() === "&,&,&". Actual: ' + (x.toString())); - } -} - -//CHECK#3 -var x = new Array(true,true,true); -if (x.toString() !== x.join()) { - $ERROR('#3.1: var x = new Array(true,true,true); x.toString(true,true,true) === x.join(). Actual: ' + (x.toString(true,true,true))); -} else { - if (x.toString() !== "true,true,true") { - $ERROR('#3.2: var x = new Array(true,true,true); x.toString(true,true,true) === "true,true,true". Actual: ' + (x.toString(true,true,true))); - } -} - -//CHECK#4 -var x = new Array(null,null,null); -if (x.toString() !== x.join()) { - $ERROR('#4.1: var x = new Array(null,null,null); x.toString(null,null,null) === x.join(). Actual: ' + (x.toString(null,null,null))); -} else { - if (x.toString() !== ",,") { - $ERROR('#4.2: var x = new Array(null,null,null); x.toString(null,null,null) === ",,". Actual: ' + (x.toString(null,null,null))); - } -} - -//CHECK#5 -var x = new Array(undefined,undefined,undefined); -if (x.toString() !== x.join()) { - $ERROR('#5.1: var x = new Array(undefined,undefined,undefined); x.toString(undefined,undefined,undefined) === x.join(). Actual: ' + (x.toString(undefined,undefined,undefined))); -} else { - if (x.toString() !== ",,") { - $ERROR('#5.2: var x = new Array(undefined,undefined,undefined); x.toString(undefined,undefined,undefined) === ",,". Actual: ' + (x.toString(undefined,undefined,undefined))); - } -} - -//CHECK#6 -var x = new Array(Infinity,Infinity,Infinity); -if (x.toString() !== x.join()) { - $ERROR('#6.1: var x = new Array(Infinity,Infinity,Infinity); x.toString(Infinity,Infinity,Infinity) === x.join(). Actual: ' + (x.toString(Infinity,Infinity,Infinity))); -} else { - if (x.toString() !== "Infinity,Infinity,Infinity") { - $ERROR('#6.2: var x = new Array(Infinity,Infinity,Infinity); x.toString(Infinity,Infinity,Infinity) === "Infinity,Infinity,Infinity". Actual: ' + (x.toString(Infinity,Infinity,Infinity))); - } -} - -//CHECK#7 -var x = new Array(NaN,NaN,NaN); -if (x.toString() !== x.join()) { - $ERROR('#7.1: var x = new Array(NaN,NaN,NaN); x.toString(NaN,NaN,NaN) === x.join(). Actual: ' + (x.toString(NaN,NaN,NaN))); -} else { - if (x.toString() !== "NaN,NaN,NaN") { - $ERROR('#7.2: var x = new Array(NaN,NaN,NaN); x.toString(NaN,NaN,NaN) === "NaN,NaN,NaN". Actual: ' + (x.toString(NaN,NaN,NaN))); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.2_Array_prototype_toString/S15.4.4.2_A1_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.2_Array_prototype_toString/S15.4.4.2_A1_T4.js deleted file mode 100644 index 19407b391..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.2_Array_prototype_toString/S15.4.4.2_A1_T4.js +++ /dev/null @@ -1,111 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.2_A1_T4; - * @section: 15.4.4.2; - * @assertion: The result of calling this function is the same as if - * the built-in join method were invoked for this object with no argument; - * @description: If Type(value) is Object, evaluate ToPrimitive(value, String); -*/ - -//CHECK#1 -var object = {valueOf: function() {return "+"}}; -var x = new Array(object); -if (x.toString() !== x.join()) { - $ERROR('#1.1: var object = {valueOf: function() {return "+"}} var x = new Array(object); x.toString() === x.join(). Actual: ' + (x.toString())); -} else { - if (x.toString() !== "[object Object]") { - $ERROR('#1.2: var object = {valueOf: function() {return "+"}} var x = new Array(object); x.toString() === "[object Object]". Actual: ' + (x.toString())); - } -} - -//CHECK#2 -var object = {valueOf: function() {return "+"}, toString: function() {return "*"}}; -var x = new Array(object); -if (x.toString() !== x.join()) { - $ERROR('#2.1: var object = {valueOf: function() {return "+"}, toString: function() {return x.join()}} var x = new Array(object); x.toString() === "*". Actual: ' + (x.toString())); -} else { - if (x.toString() !== "*") { - $ERROR('#2.2: var object = {valueOf: function() {return "+"}, toString: function() {return "*"}} var x = new Array(object); x.toString() === "*". Actual: ' + (x.toString())); - } -} - -//CHECK#3 -var object = {valueOf: function() {return "+"}, toString: function() {return {}}}; -var x = new Array(object); -if (x.toString() !== x.join()) { - $ERROR('#3.1: var object = {valueOf: function() {return x.join()}, toString: function() {return {}}} var x = new Array(object); x.toString() === "+". Actual: ' + (x.toString())); -} else { - if (x.toString() !== "+") { - $ERROR('#3.2: var object = {valueOf: function() {return "+"}, toString: function() {return {}}} var x = new Array(object); x.toString() === "+". Actual: ' + (x.toString())); - } -} - -//CHECK#4 -try { - var object = {valueOf: function() {throw "error"}, toString: function() {return "*"}}; - var x = new Array(object); - if (x.toString() !== x.join()) { - $ERROR('#4.1: var object = {valueOf: function() {throw "error"}, toString: function() {return x.join()}} var x = new Array(object); x.toString() === "*". Actual: ' + (x.toString())); - } else { - if (x.toString() !== "*") { - $ERROR('#4.2: var object = {valueOf: function() {throw "error"}, toString: function() {return "*"}} var x = new Array(object); x.toString() === "*". Actual: ' + (x.toString())); - } - } -} -catch (e) { - if (e === "error") { - $ERROR('#4.3: var object = {valueOf: function() {throw "error"}, toString: function() {return "*"}} var x = new Array(object); x.toString() not throw "error"'); - } else { - $ERROR('#4.4: var object = {valueOf: function() {throw "error"}, toString: function() {return "*"}} var x = new Array(object); x.toString() not throw Error. Actual: ' + (e)); - } -} - -//CHECK#5 -var object = {toString: function() {return "*"}}; -var x = new Array(object); -if (x.toString() !== x.join()) { - $ERROR('#5.1: var object = {toString: function() {return x.join()}} var x = new Array(object); x.toString() === "*". Actual: ' + (x.toString())); -} else { - if (x.toString() !== "*") { - $ERROR('#5.2: var object = {toString: function() {return "*"}} var x = new Array(object); x.toString() === "*". Actual: ' + (x.toString())); - } -} - -//CHECK#6 -var object = {valueOf: function() {return {}}, toString: function() {return "*"}} -var x = new Array(object); -if (x.toString() !== x.join()) { - $ERROR('#6.1: var object = {valueOf: function() {return {}}, toString: function() {return x.join()}} var x = new Array(object); x.toString() === "*". Actual: ' + (x.toString())); -} else { - if (x.toString() !== "*") { - $ERROR('#6.2: var object = {valueOf: function() {return {}}, toString: function() {return "*"}} var x = new Array(object); x.toString() === "*". Actual: ' + (x.toString())); - } -} - -//CHECK#7 -try { - var object = {valueOf: function() {return "+"}, toString: function() {throw "error"}}; - var x = new Array(object); - x.toString(); - $ERROR('#7.1: var object = {valueOf: function() {return "+"}, toString: function() {throw "error"}} var x = new Array(object); x.toString() throw "error". Actual: ' + (x.toString())); -} -catch (e) { - if (e !== "error") { - $ERROR('#7.2: var object = {valueOf: function() {return "+"}, toString: function() {throw "error"}} var x = new Array(object); x.toString() throw "error". Actual: ' + (e)); - } -} - -//CHECK#8 -try { - var object = {valueOf: function() {return {}}, toString: function() {return {}}}; - var x = new Array(object); - x.toString(); - $ERROR('#8.1: var object = {valueOf: function() {return {}}, toString: function() {return {}}} var x = new Array(object); x.toString() throw TypeError. Actual: ' + (x.toString())); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#8.2: var object = {valueOf: function() {return {}}, toString: function() {return {}}} var x = new Array(object); x.toString() throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.2_Array_prototype_toString/S15.4.4.2_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.2_Array_prototype_toString/S15.4.4.2_A2_T1.js deleted file mode 100644 index 0c0ed9229..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.2_Array_prototype_toString/S15.4.4.2_A2_T1.js +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.2_A2_T1; - * @section: 15.4.4.2; - * @assertion: The toString function is not generic. - * it throws a TypeError exception if its this value is not an Array object; - * @description: {}.toString = Array.prototype.toString; -*/ - -var obj = {}; -obj.toString = Array.prototype.toString; - -//CHECK#1 -try { - obj.toString(); - $ERROR('#1.1: var obj = {}; obj.toString = Array.prototype.toString; obj.toString() throw TypeError. Actual: ' + (obj.toString())); -} catch(e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1.2: var obj = {}; obj.toString = Array.prototype.toString; obj.toString() throw TypeError. Actual: ' + (e)); - } -} - -obj[0] = 1; -obj.length = 1; - -//CHECK#2 -try { - obj.toString(); - $ERROR('#2.1: var obj = {}; obj.toString = Array.prototype.toString; obj[0] = 1; obj.length = 1; obj.toString() throw TypeError. Actual: ' + (obj.toString())); -} catch(e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#2.2: var obj = {}; obj.toString = Array.prototype.toString; obj[0] = 1; obj.length = 1; obj.toString() throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.2_Array_prototype_toString/S15.4.4.2_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.2_Array_prototype_toString/S15.4.4.2_A3_T1.js deleted file mode 100644 index a153d24fd..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.2_Array_prototype_toString/S15.4.4.2_A3_T1.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.2_A3_T1; - * @section: 15.4.4.2, 8.6.2.1; - * @assertion: [[Get]] from not an inherited property; - * @description: [[Prototype]] of Array instance is Array.prototype; -*/ - -//CHECK#1 -Array.prototype[1] = 1; -x = [0]; -x.length = 2; -if (x.toString() !== "0,1") { - $ERROR('#1: Array.prototype[1] = 1; x = [0]; x.length = 2; x.toString() === "0,1". Actual: ' + (x.toString())); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.2_Array_prototype_toString/S15.4.4.2_A4.1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.2_Array_prototype_toString/S15.4.4.2_A4.1.js deleted file mode 100644 index 7f01d0c45..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.2_Array_prototype_toString/S15.4.4.2_A4.1.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.2_A4.1; -* @section: 15.4.4.2, 15.2.4.7, 12.6.4; -* @assertion: The length property of toString has the attribute DontEnum; -* @description: Checking use propertyIsEnumerable, for-in; -*/ - - -//CHECK#1 -if (Array.prototype.toString.propertyIsEnumerable('length') !== false) { - $ERROR('#1: Array.prototype.toString.propertyIsEnumerable(\'length\') === false. Actual: ' + (Array.prototype.toString.propertyIsEnumerable('length'))); -} - -//CHECK#2 -result = true; -for (p in Array.toString){ - if (p === "length") { - result = false; - } -} - -if (result !== true) { - $ERROR('#2: result = true; for (p in Array.toString) { if (p === "length") result = false; } result === true;'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.2_Array_prototype_toString/S15.4.4.2_A4.2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.2_Array_prototype_toString/S15.4.4.2_A4.2.js deleted file mode 100644 index 2796ca555..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.2_Array_prototype_toString/S15.4.4.2_A4.2.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.2_A4.2; -* @section: 15.4.4.2, 15.2.4.5, 11.4.1; -* @assertion: The length property of toString has the attribute DontDelete; -* @description: Checking use hasOwnProperty, delete; -*/ - -//CHECK#1 -if (Array.prototype.toString.hasOwnProperty('length') !== true) { - $FAIL('#1: Array.prototype.toString.hasOwnProperty(\'length\') === true. Actual: ' + (Array.prototype.toString.hasOwnProperty('length'))); -} - -delete Array.prototype.toString.length; - -//CHECK#2 -if (Array.prototype.toString.hasOwnProperty('length') !== true) { - $ERROR('#2: delete Array.prototype.toString.length; Array.prototype.toString.hasOwnProperty(\'length\') === true. Actual: ' + (Array.prototype.toString.hasOwnProperty('length'))); -} - -//CHECK#3 -if (Array.prototype.toString.length === undefined) { - $ERROR('#3: delete Array.prototype.toString.length; Array.prototype.toString.length !== undefined'); -} - - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.2_Array_prototype_toString/S15.4.4.2_A4.3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.2_Array_prototype_toString/S15.4.4.2_A4.3.js deleted file mode 100644 index efe4dcce3..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.2_Array_prototype_toString/S15.4.4.2_A4.3.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.2_A4.3; -* @section: 15.4.4.2; -* @assertion: The length property of toString has the attribute ReadOnly; -* @description: Checking if varying the length property fails; -*/ - -//CHECK#1 -x = Array.prototype.toString.length; -Array.prototype.toString.length = Infinity; -if (Array.prototype.toString.length !== x) { - $ERROR('#1: x = Array.prototype.toString.length; Array.prototype.toString.length = Infinity; Array.prototype.toString.length === x. Actual: ' + (Array.prototype.toString.length)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.2_Array_prototype_toString/S15.4.4.2_A4.4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.2_Array_prototype_toString/S15.4.4.2_A4.4.js deleted file mode 100644 index b71982e5f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.2_Array_prototype_toString/S15.4.4.2_A4.4.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.2_A4.4; -* @section: 15.4.4.2; -* @assertion: The length property of toString is 0; -* @description: toString.length === 1; -*/ - -//CHECK#1 -if (Array.prototype.toString.length !== 0) { - $ERROR('#1: Array.prototype.toString.length === 0. Actual: ' + (Array.prototype.toString.length)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.2_Array_prototype_toString/S15.4.4.2_A4.5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.2_Array_prototype_toString/S15.4.4.2_A4.5.js deleted file mode 100644 index 3d3d63819..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.2_Array_prototype_toString/S15.4.4.2_A4.5.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.2_A4.5; -* @section: 15.4.4.2, 15.2.4.7, 12.6.4; -* @assertion: The toString property of Array has the attribute DontEnum; -* @description: Checking use propertyIsEnumerable, for-in; -*/ - - -//CHECK#1 -if (Array.propertyIsEnumerable('toString') !== false) { - $ERROR('#1: Array.propertyIsEnumerable(\'toString\') === false. Actual: ' + (Array.propertyIsEnumerable('toString'))); -} - -//CHECK#2 -result = true; -for (p in Array){ - if (p === "toString") { - result = false; - } -} - -if (result !== true) { - $ERROR('#2: result = true; for (p in Array) { if (p === "toString") result = false; } result === true;'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.2_Array_prototype_toString/S15.4.4.2_A4.6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.2_Array_prototype_toString/S15.4.4.2_A4.6.js deleted file mode 100644 index 2db972559..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.2_Array_prototype_toString/S15.4.4.2_A4.6.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.2_A4.6; -* @section: 15.4.4.2; -* @assertion: The toString property of Array has not prototype property; -* @description: Checking Array.prototype.toString.prototype; -*/ - -//CHECK#1 -if (Array.prototype.toString.prototype !== undefined) { - $ERROR('#1: Array.prototype.toString.prototype === undefined. Actual: ' + (Array.prototype.toString.prototype)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.2_Array_prototype_toString/S15.4.4.2_A4.7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.2_Array_prototype_toString/S15.4.4.2_A4.7.js deleted file mode 100644 index 77a13cf02..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.2_Array_prototype_toString/S15.4.4.2_A4.7.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.2_A4.7; -* @section: 15.4.4.2, 11.2.2; -* @assertion: The toString property of Array can't be used as constructor; -* @description: If property does not implement the internal [[Construct]] method, throw a TypeError exception; -*/ - -//CHECK#1 - -try { - new Array.prototype.toString(); - $ERROR('#1.1: new Array.prototype.toString() throw TypeError. Actual: ' + (new Array.prototype.toString())); -} catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1.2: new Array.prototype.toString() throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.3_Array_prototype_toLocaleString/S15.4.4.3_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.3_Array_prototype_toLocaleString/S15.4.4.3_A1_T1.js deleted file mode 100644 index 0b801aae3..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.3_Array_prototype_toLocaleString/S15.4.4.3_A1_T1.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.3_A1_T1; - * @section: 15.4.4.3; - * @assertion: The elements of the array are converted to strings using their - * toLocaleString methods, and these strings are then concatenated, separated - * by occurrences of a separator string that has been derived in an - * implementation-defined locale-specific way; - * @description: it is the function that should be invoked; -*/ - -var n = 0; -var obj = {toLocaleString: function() {n++}}; -var arr = [undefined, obj, null, obj, obj]; -arr.toLocaleString(); - -//CHECK#1 -if (n !== 3) { - $ERROR('#1: var n = 0; var obj = {toLocaleString: function() {n++}}; var arr = [undefined, obj, null, obj, obj]; arr.toLocaleString(); n === 3. Actual: ' + (n)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.3_Array_prototype_toLocaleString/S15.4.4.3_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.3_Array_prototype_toLocaleString/S15.4.4.3_A2_T1.js deleted file mode 100644 index 7891e118e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.3_Array_prototype_toLocaleString/S15.4.4.3_A2_T1.js +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.3_A2_T1; - * @section: 15.4.4.3; - * @assertion: The toLocalString function is not generic. - * it throws a TypeError exception if its this value is not an Array object; - * @description: {}.toLocaleString = Array.prototype.toLocaleString; -*/ - -var obj = {}; -obj.toLocaleString = Array.prototype.toLocaleString; - -//CHECK#1 -try { - obj.toLocaleString(); - $ERROR('#1.1: var obj = {}; obj.toLocaleString = Array.prototype.toLocaleString; obj.toLocaleString() throw TypeError. Actual: ' + (obj.toLocaleString())); -} catch(e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1.2: var obj = {}; obj.toLocaleString = Array.prototype.toLocaleString; obj.toLocaleString() throw TypeError. Actual: ' + (e)); - } -} - -obj[0] = 1; -obj.length = 1; - -//CHECK#2 -try { - obj.toLocaleString(); - $ERROR('#2.1: var obj = {}; obj.toLocaleString = Array.prototype.toLocaleString; obj[0] = 1; obj.length = 1; obj.toLocaleString() throw TypeError. Actual: ' + (obj.toLocaleString())); -} catch(e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#2.2: var obj = {}; obj.toLocaleString = Array.prototype.toLocaleString; obj[0] = 1; obj.length = 1; obj.toLocaleString() throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.3_Array_prototype_toLocaleString/S15.4.4.3_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.3_Array_prototype_toLocaleString/S15.4.4.3_A3_T1.js deleted file mode 100644 index bed62e85d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.3_Array_prototype_toLocaleString/S15.4.4.3_A3_T1.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.3_A3_T1; - * @section: 15.4.4.3, 8.6.2.1; - * @assertion: [[Get]] from not an inherited property; - * @description: [[Prototype]] of Array instance is Array.prototype; -*/ - -//CHECK#1 -var n = 0; -var obj = {toLocaleString: function() {n++}}; -Array.prototype[1] = obj; -x = [obj]; -x.length = 2; -x.toLocaleString(); -if (n !== 2) { - $ERROR('#1: var n = 0; var obj = {toLocaleString: function() {n++}}; Array.prototype[1] = obj; x = [obj]; x.length = 2; x.toLocaleString(); n === 2. Actual: ' + (n)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.3_Array_prototype_toLocaleString/S15.4.4.3_A4.1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.3_Array_prototype_toLocaleString/S15.4.4.3_A4.1.js deleted file mode 100644 index 8da8cdb27..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.3_Array_prototype_toLocaleString/S15.4.4.3_A4.1.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.3_A4.1; -* @section: 15.4.4.3, 15.2.4.7, 12.6.4; -* @assertion: The length property of toLocaleString has the attribute DontEnum; -* @description: Checking use propertyIsEnumerable, for-in; -*/ - - -//CHECK#1 -if (Array.prototype.toLocaleString.propertyIsEnumerable('length') !== false) { - $ERROR('#1: Array.prototype.toLocaleString.propertyIsEnumerable(\'length\') === false. Actual: ' + (Array.prototype.toLocaleString.propertyIsEnumerable('length'))); -} - -//CHECK#2 -result = true; -for (p in Array.toLocaleString){ - if (p === "length") { - result = false; - } -} - -if (result !== true) { - $ERROR('#2: result = true; for (p in Array.toLocaleString) { if (p === "length") result = false; } result === true;'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.3_Array_prototype_toLocaleString/S15.4.4.3_A4.2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.3_Array_prototype_toLocaleString/S15.4.4.3_A4.2.js deleted file mode 100644 index 3be6927d9..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.3_Array_prototype_toLocaleString/S15.4.4.3_A4.2.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.3_A4.2; -* @section: 15.4.4.3, 15.2.4.5, 11.4.1; -* @assertion: The length property of toLocaleString has the attribute DontDelete; -* @description: Checking use hasOwnProperty, delete; -*/ - -//CHECK#1 -if (Array.prototype.toLocaleString.hasOwnProperty('length') !== true) { - $FAIL('#1: Array.prototype.toLocaleString.hasOwnProperty(\'length\') === true. Actual: ' + (Array.prototype.toLocaleString.hasOwnProperty('length'))); -} - -delete Array.prototype.toLocaleString.length; - -//CHECK#2 -if (Array.prototype.toLocaleString.hasOwnProperty('length') !== true) { - $ERROR('#2: delete Array.prototype.toLocaleString.length; Array.prototype.toLocaleString.hasOwnProperty(\'length\') === true. Actual: ' + (Array.prototype.toLocaleString.hasOwnProperty('length'))); -} - -//CHECK#3 -if (Array.prototype.toLocaleString.length === undefined) { - $ERROR('#3: delete Array.prototype.toLocaleString.length; Array.prototype.toLocaleString.length !== undefined'); -} - - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.3_Array_prototype_toLocaleString/S15.4.4.3_A4.3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.3_Array_prototype_toLocaleString/S15.4.4.3_A4.3.js deleted file mode 100644 index 852f01372..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.3_Array_prototype_toLocaleString/S15.4.4.3_A4.3.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.3_A4.3; -* @section: 15.4.4.3; -* @assertion: The length property of toLocaleString has the attribute ReadOnly; -* @description: Checking if varying the length property fails; -*/ - -//CHECK#1 -x = Array.prototype.toLocaleString.length; -Array.prototype.toLocaleString.length = Infinity; -if (Array.prototype.toLocaleString.length !== x) { - $ERROR('#1: x = Array.prototype.toLocaleString.length; Array.prototype.toLocaleString.length = Infinity; Array.prototype.toLocaleString.length === x. Actual: ' + (Array.prototype.toLocaleString.length)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.3_Array_prototype_toLocaleString/S15.4.4.3_A4.4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.3_Array_prototype_toLocaleString/S15.4.4.3_A4.4.js deleted file mode 100644 index 167ce3aed..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.3_Array_prototype_toLocaleString/S15.4.4.3_A4.4.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.3_A4.4; -* @section: 15.4.4.3; -* @assertion: The length property of toLocaleString is 0; -* @description: toLocaleString.length === 1; -*/ - -//CHECK#1 -if (Array.prototype.toLocaleString.length !== 0) { - $ERROR('#1: Array.prototype.toLocaleString.length === 0. Actual: ' + (Array.prototype.toLocaleString.length)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.3_Array_prototype_toLocaleString/S15.4.4.3_A4.5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.3_Array_prototype_toLocaleString/S15.4.4.3_A4.5.js deleted file mode 100644 index 3dabed611..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.3_Array_prototype_toLocaleString/S15.4.4.3_A4.5.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.3_A4.5; -* @section: 15.4.4.3, 15.2.4.7, 12.6.4; -* @assertion: The toLocaleString property of Array has the attribute DontEnum; -* @description: Checking use propertyIsEnumerable, for-in; -*/ - - -//CHECK#1 -if (Array.propertyIsEnumerable('toLocaleString') !== false) { - $ERROR('#1: Array.propertyIsEnumerable(\'toLocaleString\') === false. Actual: ' + (Array.propertyIsEnumerable('toLocaleString'))); -} - -//CHECK#2 -result = true; -for (p in Array){ - if (p === "toLocaleString") { - result = false; - } -} - -if (result !== true) { - $ERROR('#2: result = true; for (p in Array) { if (p === "toLocaleString") result = false; } result === true;'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.3_Array_prototype_toLocaleString/S15.4.4.3_A4.6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.3_Array_prototype_toLocaleString/S15.4.4.3_A4.6.js deleted file mode 100644 index ef2f4f56f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.3_Array_prototype_toLocaleString/S15.4.4.3_A4.6.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.3_A4.6; -* @section: 15.4.4.3; -* @assertion: The toLocaleString property of Array has not prototype property; -* @description: Checking Array.prototype.toLocaleString.prototype; -*/ - -//CHECK#1 -if (Array.prototype.toLocaleString.prototype !== undefined) { - $ERROR('#1: Array.prototype.toLocaleString.prototype === undefined. Actual: ' + (Array.prototype.toLocaleString.prototype)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.3_Array_prototype_toLocaleString/S15.4.4.3_A4.7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.3_Array_prototype_toLocaleString/S15.4.4.3_A4.7.js deleted file mode 100644 index a2f2ba163..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.3_Array_prototype_toLocaleString/S15.4.4.3_A4.7.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.3_A4.7; -* @section: 15.4.4.3, 11.2.2; -* @assertion: The toLocaleString property of Array can't be used as constructor; -* @description: If property does not implement the internal [[Construct]] method, throw a TypeError exception; -*/ - -//CHECK#1 - -try { - new Array.prototype.toLocaleString(); - $ERROR('#1.1: new Array.prototype.toLocaleString() throw TypeError. Actual: ' + (new Array.prototype.toLocaleString())); -} catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1.2: new Array.prototype.toLocaleString() throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.4_Array_prototype_concat/S15.4.4.4_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.4_Array_prototype_concat/S15.4.4.4_A1_T1.js deleted file mode 100644 index 8457f0ae1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.4_Array_prototype_concat/S15.4.4.4_A1_T1.js +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.4_A1_T1; - * @section: 15.4.4.4; - * @assertion: When the concat method is called with zero or more arguments item1, item2, - * etc., it returns an array containing the array elements of the object followed by - * the array elements of each argument in order; - * @description: Checking this algorithm, items are Array object; -*/ - -var x = new Array(); -var y = new Array(0,1); -var z = new Array(2,3,4); -var arr = x.concat(y,z); - -//CHECK#0 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#0: var x = new Array(); var y = new Array(0,1); var z = new Array(2,3,4); var arr = x.concat(y,z); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#1 -if (arr[0] !== 0) { - $ERROR('#1: var x = new Array(); var y = new Array(0,1); var z = new Array(2,3,4); var arr = x.concat(y,z); arr[0] === 0. Actual: ' + (arr[0])); -} - -//CHECK#2 -if (arr[1] !== 1) { - $ERROR('#2: var x = new Array(); var y = new Array(0,1); var z = new Array(2,3,4); var arr = x.concat(y,z); arr[1] === 1. Actual: ' + (arr[1])); -} - -//CHECK#3 -if (arr[2] !== 2) { - $ERROR('#3: var x = new Array(); var y = new Array(0,1); var z = new Array(2,3,4); var arr = x.concat(y,z); arr[2] === 2. Actual: ' + (arr[2])); -} - -//CHECK#4 -if (arr[3] !== 3) { - $ERROR('#4: var x = new Array(); var y = new Array(0,1); var z = new Array(2,3,4); var arr = x.concat(y,z); arr[3] === 3. Actual: ' + (arr[3])); -} - -//CHECK#5 -if (arr[4] !== 4) { - $ERROR('#5: var x = new Array(); var y = new Array(0,1); var z = new Array(2,3,4); var arr = x.concat(y,z); arr[4] === 4. Actual: ' + (arr[4])); -} - -//CHECK#6 -if (arr.length !== 5) { - $ERROR('#6: var x = new Array(); var y = new Array(0,1); var z = new Array(2,3,4); var arr = x.concat(y,z); arr.length === 5. Actual: ' + (arr.length)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.4_Array_prototype_concat/S15.4.4.4_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.4_Array_prototype_concat/S15.4.4.4_A1_T2.js deleted file mode 100644 index c5bd24f46..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.4_Array_prototype_concat/S15.4.4.4_A1_T2.js +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.4_A1_T2; - * @section: 15.4.4.4; - * @assertion: When the concat method is called with zero or more arguments item1, item2, - * etc., it returns an array containing the array elements of the object followed by - * the array elements of each argument in order; - * @description: Checking this algorithm, items are objects and primitives; -*/ - -var x = [0]; -var y = new Object(); -var z = new Array(1,2); -var arr = x.concat(y,z, -1, true, "NaN"); - -//CHECK#0 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#0: var x = [0]; var y = new Object(); var z = new Array(1,2); var arr = x.concat(y,z, -1, true, "NaN"); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#1 -if (arr[0] !== 0) { - $ERROR('#1: var x = [0]; var y = new Object(); var z = new Array(1,2); var arr = x.concat(y,z, -1, true, "NaN"); arr[0] === 0. Actual: ' + (arr[0])); -} - -//CHECK#2 -if (arr[1] !== y) { - $ERROR('#2: var x = [0]; var y = new Object(); var z = new Array(1,2); var arr = x.concat(y,z, -1, true, "NaN"); arr[1] === y. Actual: ' + (arr[1])); -} - -//CHECK#3 -if (arr[2] !== 1) { - $ERROR('#3: var x = [0]; var y = new Object(); var z = new Array(1,2); var arr = x.concat(y,z, -1, true, "NaN"); arr[2] === 1. Actual: ' + (arr[2])); -} - -//CHECK#4 -if (arr[3] !== 2) { - $ERROR('#4: var x = [0]; var y = new Object(); var z = new Array(1,2); var arr = x.concat(y,z, -1, true, "NaN"); arr[3] === 2. Actual: ' + (arr[3])); -} - -//CHECK#5 -if (arr[4] !== -1) { - $ERROR('#5: var x = [0]; var y = new Object(); var z = new Array(1,2); var arr = x.concat(y,z, -1, true, "NaN"); arr[4] === -1. Actual: ' + (arr[4])); -} - -//CHECK#6 -if (arr[5] !== true) { - $ERROR('#6: var x = [0]; var y = new Object(); var z = new Array(1,2); var arr = x.concat(y,z, -1, true, "NaN"); arr[5] === true. Actual: ' + (arr[5])); -} - -//CHECK#7 -if (arr[6] !== "NaN") { - $ERROR('#7: var x = [0]; var y = new Object(); var z = new Array(1,2); var arr = x.concat(y,z, -1, true, "NaN"); arr[6] === "NaN". Actual: ' + (arr[6])); -} - -//CHECK#8 -if (arr.length !== 7) { - $ERROR('#8: var x = [0]; var y = new Object(); var z = new Array(1,2); var arr = x.concat(y,z, -1, true, "NaN"); arr.length === 7. Actual: ' + (arr.length)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.4_Array_prototype_concat/S15.4.4.4_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.4_Array_prototype_concat/S15.4.4.4_A1_T3.js deleted file mode 100644 index 05a361e3b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.4_Array_prototype_concat/S15.4.4.4_A1_T3.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.4_A1_T3; - * @section: 15.4.4.4; - * @assertion: When the concat method is called with zero or more arguments item1, item2, - * etc., it returns an array containing the array elements of the object followed by - * the array elements of each argument in order; - * @description: Checking this algorithm with no items; -*/ - -var x = [0,1]; -var arr = x.concat(); - -//CHECK#0 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#0: var x = [0,1]; var arr = x.concat(); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#1 -if (arr[0] !== 0) { - $ERROR('#1: var x = [0,1]; var arr = x.concat(); arr[0] === 0. Actual: ' + (arr[0])); -} - -//CHECK#2 -if (arr[1] !== 1) { - $ERROR('#2: var x = [0,1]; var arr = x.concat(); arr[1] === 1. Actual: ' + (arr[1])); -} - -//CHECK#3 -if (arr.length !== 2) { - $ERROR('#3: var x = [0,1]; var arr = x.concat(); arr.length === 2. Actual: ' + (arr.length)); -} - -//CHECK#4 -if (arr === x) { - $ERROR('#4: var x = [0,1]; var arr = x.concat(); arr !== x'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.4_Array_prototype_concat/S15.4.4.4_A1_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.4_Array_prototype_concat/S15.4.4.4_A1_T4.js deleted file mode 100644 index d1c66a61d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.4_Array_prototype_concat/S15.4.4.4_A1_T4.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.4_A1_T4; - * @section: 15.4.4.4; - * @assertion: When the concat method is called with zero or more arguments item1, item2, - * etc., it returns an array containing the array elements of the object followed by - * the array elements of each argument in order; - * @description: Checking this algorithm, items are [], [,]; -*/ - -var x = [,1]; -var arr = x.concat([], [,]); - -//CHECK#0 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#0: var x = [,1]; var arr = x.concat([], [,]); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#1 -if (arr[0] !== undefined) { - $ERROR('#1: var x = [,1]; var arr = x.concat([], [,]); arr[0] === undefined. Actual: ' + (arr[0])); -} - -//CHECK#2 -if (arr[1] !== 1) { - $ERROR('#2: var x = [,1]; var arr = x.concat([], [,]); arr[1] === 1. Actual: ' + (arr[1])); -} - -//CHECK#2 -if (arr[2] !== undefined) { - $ERROR('#2: var x = [,1]; var arr = x.concat([], [,]); arr[2] === undefined. Actual: ' + (arr[2])); -} - -//CHECK#4 -if (arr.length !== 3) { - $ERROR('#4: var x = [,1]; var arr = x.concat([], [,]); arr.length === 3. Actual: ' + (arr.length)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.4_Array_prototype_concat/S15.4.4.4_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.4_Array_prototype_concat/S15.4.4.4_A2_T1.js deleted file mode 100644 index e951ab8e5..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.4_Array_prototype_concat/S15.4.4.4_A2_T1.js +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.4_A2_T1; - * @section: 15.4.4.4; - * @assertion: The concat function is intentionally generic. - * It does not require that its this value be an Array object; - * @description: Checking this for Object object, items are objects and primitives; -*/ - -var x = {}; -x.concat = Array.prototype.concat; -var y = new Object(); -var z = new Array(1,2); -var arr = x.concat(y,z, -1, true, "NaN"); - -//CHECK#0 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#0: var x = {}; x.concat = Array.prototype.concat; var y = new Object(); var z = new Array(1,2); var arr = x.concat(y,z, -1, true, "NaN"); arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#1 -if (arr[0] !== x) { - $ERROR('#1: var x = {}; x.concat = Array.prototype.concat; var y = new Object(); var z = new Array(1,2); var arr = x.concat(y,z, -1, true, "NaN"); arr[0] === x. Actual: ' + (arr[0])); -} - -//CHECK#2 -if (arr[1] !== y) { - $ERROR('#2: var x = {}; x.concat = Array.prototype.concat; var y = new Object(); var z = new Array(1,2); var arr = x.concat(y,z, -1, true, "NaN"); arr[1] === y. Actual: ' + (arr[1])); -} - -//CHECK#3 -if (arr[2] !== 1) { - $ERROR('#3: var x = {}; x.concat = Array.prototype.concat; var y = new Object(); var z = new Array(1,2); var arr = x.concat(y,z, -1, true, "NaN"); arr[2] === 1. Actual: ' + (arr[2])); -} - -//CHECK#4 -if (arr[3] !== 2) { - $ERROR('#4: var x = {}; x.concat = Array.prototype.concat; var y = new Object(); var z = new Array(1,2); var arr = x.concat(y,z, -1, true, "NaN"); arr[3] === 2. Actual: ' + (arr[3])); -} - -//CHECK#5 -if (arr[4] !== -1) { - $ERROR('#5: var x = {}; x.concat = Array.prototype.concat; var y = new Object(); var z = new Array(1,2); var arr = x.concat(y,z, -1, true, "NaN"); arr[4] === -1. Actual: ' + (arr[4])); -} - -//CHECK#6 -if (arr[5] !== true) { - $ERROR('#6: var x = {}; x.concat = Array.prototype.concat; var y = new Object(); var z = new Array(1,2); var arr = x.concat(y,z, -1, true, "NaN"); arr[5] === true. Actual: ' + (arr[5])); -} - -//CHECK#7 -if (arr[6] !== "NaN") { - $ERROR('#7: var x = {}; x.concat = Array.prototype.concat; var y = new Object(); var z = new Array(1,2); var arr = x.concat(y,z, -1, true, "NaN"); arr[6] === "NaN". Actual: ' + (arr[6])); -} - -//CHECK#8 -if (arr.length !== 7) { - $ERROR('#8: var x = {}; x.concat = Array.prototype.concat; var y = new Object(); var z = new Array(1,2); var arr = x.concat(y,z, -1, true, "NaN"); arr.length === 7. Actual: ' + (arr.length)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.4_Array_prototype_concat/S15.4.4.4_A2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.4_Array_prototype_concat/S15.4.4.4_A2_T2.js deleted file mode 100644 index 2e382eab7..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.4_Array_prototype_concat/S15.4.4.4_A2_T2.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.4_A2_T2; - * @section: 15.4.4.4; - * @assertion: The concat function is intentionally generic. - * It does not require that its this value be an Array object; - * @description: Checking this for Object object with no items; -*/ - -var x = {}; -x.concat = Array.prototype.concat; -var arr = x.concat(); - -//CHECK#0 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#0: var x = {}; x.concat = Array.prototype.concat; var arr = x.concat() arr is Array object. Actual: ' + (arr.getClass())); -} - -//CHECK#1 -if (arr[0] !== x) { - $ERROR('#1: var x = {}; x.concat = Array.prototype.concat; var arr = x.concat(); arr[0] === x. Actual: ' + (arr[0])); -} - -//CHECK#2 -if (arr.length !== 1) { - $ERROR('#2: var x = {}; x.concat = Array.prototype.concat; var arr = x.concat(); arr.length === 1. Actual: ' + (arr.length)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.4_Array_prototype_concat/S15.4.4.4_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.4_Array_prototype_concat/S15.4.4.4_A3_T1.js deleted file mode 100644 index b212738f8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.4_Array_prototype_concat/S15.4.4.4_A3_T1.js +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.4_A3_T1; - * @section: 15.4.4.4, 8.6.2.1, 15.2.4.5; - * @assertion: [[Get]] from not an inherited property; - * @description: [[Prototype]] of Array instance is Array.prototype, [[Prototype] of Array.prototype is Object.prototype; -*/ - - -Array.prototype[1] = 1; -x = [0]; -x.length = 2; -var arr = x.concat(); - -//CHECK#1 -if (arr[0] !== 0) { - $ERROR('#1: Array.prototype[1] = 1; x = [0]; x.length = 2; var arr = x.concat(); arr[0] === 0. Actual: ' + (arr[0])); -} - -//CHECK#2 -if (arr[1] !== 1) { - $ERROR('#2: Array.prototype[1] = 1; x = [0]; x.length = 2; var arr = x.concat(); arr[1] === 1. Actual: ' + (arr[1])); -} - -//CHECK#3 -if (arr.hasOwnProperty('1') !== true) { - $ERROR('#3: Array.prototype[1] = 1; x = [0]; x.length = 2; var arr = x.concat(); arr.hasOwnProperty(\'1\') === true. Actual: ' + (arr.hasOwnProperty('1'))); -} - -Object.prototype[1] = 1; -Object.prototype.length = 2; -Object.prototype.concat = Array.prototype.concat; -x = {0:0}; -var arr = x.concat(); - -//CHECK#4 -if (arr[0] !== x) { - $ERROR('#4: Object.prototype[1] = 1; Object.prototype.length = 2; Object.prototype.concat = Array.prototype.concat; x = {0:0}; var arr = x.concat(); arr[0] === x. Actual: ' + (arr[0])); -} - -//CHECK#5 -if (arr[1] !== 1) { - $ERROR('#5: Object.prototype[1] = 1; Object.prototype.length = 2; Object.prototype.concat = Array.prototype.concat; x = {0:0}; var arr = x.concat(); arr[1] === 1. Actual: ' + (arr[1])); -} - -//CHECK#6 -if (arr.hasOwnProperty('1') !== false) { - $ERROR('#6: Object.prototype[1] = 1; Object.prototype.length = 2; Object.prototype.concat = Array.prototype.concat; x = {0:0}; var arr = x.concat(); arr.hasOwnProperty(\'1\') === false. Actual: ' + (arr.hasOwnProperty('1'))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.4_Array_prototype_concat/S15.4.4.4_A4.1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.4_Array_prototype_concat/S15.4.4.4_A4.1.js deleted file mode 100644 index af5f2c731..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.4_Array_prototype_concat/S15.4.4.4_A4.1.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.4_A4.1; -* @section: 15.4.4.4, 15.2.4.7, 12.6.4; -* @assertion: The length property of concat has the attribute DontEnum; -* @description: Checking use propertyIsEnumerable, for-in; -*/ - - -//CHECK#1 -if (Array.prototype.concat.propertyIsEnumerable('length') !== false) { - $ERROR('#1: Array.prototype.concat.propertyIsEnumerable(\'length\') === false. Actual: ' + (Array.prototype.concat.propertyIsEnumerable('length'))); -} - -//CHECK#2 -result = true; -for (p in Array.concat){ - if (p === "length") { - result = false; - } -} - -if (result !== true) { - $ERROR('#2: result = true; for (p in Array.concat) { if (p === "length") result = false; } result === true;'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.4_Array_prototype_concat/S15.4.4.4_A4.2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.4_Array_prototype_concat/S15.4.4.4_A4.2.js deleted file mode 100644 index cc3ad1a4c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.4_Array_prototype_concat/S15.4.4.4_A4.2.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.4_A4.2; -* @section: 15.4.4.4, 15.2.4.5, 11.4.1; -* @assertion: The length property of concat has the attribute DontDelete; -* @description: Checking use hasOwnProperty, delete; -*/ - -//CHECK#1 -if (Array.prototype.concat.hasOwnProperty('length') !== true) { - $FAIL('#1: Array.prototype.concat.hasOwnProperty(\'length\') === true. Actual: ' + (Array.prototype.concat.hasOwnProperty('length'))); -} - -delete Array.prototype.concat.length; - -//CHECK#2 -if (Array.prototype.concat.hasOwnProperty('length') !== true) { - $ERROR('#2: delete Array.prototype.concat.length; Array.prototype.concat.hasOwnProperty(\'length\') === true. Actual: ' + (Array.prototype.concat.hasOwnProperty('length'))); -} - -//CHECK#3 -if (Array.prototype.concat.length === undefined) { - $ERROR('#3: delete Array.prototype.concat.length; Array.prototype.concat.length !== undefined'); -} - - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.4_Array_prototype_concat/S15.4.4.4_A4.3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.4_Array_prototype_concat/S15.4.4.4_A4.3.js deleted file mode 100644 index f101061dd..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.4_Array_prototype_concat/S15.4.4.4_A4.3.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.4_A4.3; -* @section: 15.4.4.4; -* @assertion: The length property of concat has the attribute ReadOnly; -* @description: Checking if varying the length property fails; -*/ - -//CHECK#1 -x = Array.prototype.concat.length; -Array.prototype.concat.length = Infinity; -if (Array.prototype.concat.length !== x) { - $ERROR('#1: x = Array.prototype.concat.length; Array.prototype.concat.length = Infinity; Array.prototype.concat.length === x. Actual: ' + (Array.prototype.concat.length)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.4_Array_prototype_concat/S15.4.4.4_A4.4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.4_Array_prototype_concat/S15.4.4.4_A4.4.js deleted file mode 100644 index 878442ea5..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.4_Array_prototype_concat/S15.4.4.4_A4.4.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.4_A4.4; -* @section: 15.4.4.4; -* @assertion: The length property of concat is 1; -* @description: concat.length === 1; -*/ - -//CHECK#1 -if (Array.prototype.concat.length !== 1) { - $ERROR('#1: Array.prototype.concat.length === 1. Actual: ' + (Array.prototype.concat.length)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.4_Array_prototype_concat/S15.4.4.4_A4.5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.4_Array_prototype_concat/S15.4.4.4_A4.5.js deleted file mode 100644 index c2a424bc1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.4_Array_prototype_concat/S15.4.4.4_A4.5.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.4_A4.5; -* @section: 15.4.4.4, 15.2.4.7, 12.6.4; -* @assertion: The concat property of Array has the attribute DontEnum; -* @description: Checking use propertyIsEnumerable, for-in; -*/ - - -//CHECK#1 -if (Array.propertyIsEnumerable('concat') !== false) { - $ERROR('#1: Array.propertyIsEnumerable(\'concat\') === false. Actual: ' + (Array.propertyIsEnumerable('concat'))); -} - -//CHECK#2 -result = true; -for (p in Array){ - if (p === "concat") { - result = false; - } -} - -if (result !== true) { - $ERROR('#2: result = true; for (p in Array) { if (p === "concat") result = false; } result === true;'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.4_Array_prototype_concat/S15.4.4.4_A4.6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.4_Array_prototype_concat/S15.4.4.4_A4.6.js deleted file mode 100644 index 222b33b65..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.4_Array_prototype_concat/S15.4.4.4_A4.6.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.4_A4.6; -* @section: 15.4.4.4; -* @assertion: The concat property of Array has not prototype property; -* @description: Checking Array.prototype.concat.prototype; -*/ - -//CHECK#1 -if (Array.prototype.concat.prototype !== undefined) { - $ERROR('#1: Array.prototype.concat.prototype === undefined. Actual: ' + (Array.prototype.concat.prototype)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.4_Array_prototype_concat/S15.4.4.4_A4.7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.4_Array_prototype_concat/S15.4.4.4_A4.7.js deleted file mode 100644 index ec2fcdbc8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.4_Array_prototype_concat/S15.4.4.4_A4.7.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.4_A4.7; -* @section: 15.4.4.4, 11.2.2; -* @assertion: The concat property of Array can't be used as constructor; -* @description: If property does not implement the internal [[Construct]] method, throw a TypeError exception; -*/ - -//CHECK#1 - -try { - new Array.prototype.concat(); - $ERROR('#1.1: new Array.prototype.concat() throw TypeError. Actual: ' + (new Array.prototype.concat())); -} catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1.2: new Array.prototype.concat() throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A1.1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A1.1_T1.js deleted file mode 100644 index 4b5d199d8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A1.1_T1.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.5_A1.1_T1; - * @section: 15.4.4.5; - * @assertion: If length is zero, return the empty string; - * @description: Checking this use new Array() and []; -*/ - -//CHECK#1 -x = new Array(); -if (x.join() !== "") { - $ERROR('#1: x = new Array(); x.join() === "". Actual: ' + (x.join())); -} - -//CHECK#2 -x = []; -x[0] = 1; -x.length = 0; -if (x.join() !== "") { - $ERROR('#2: x = []; x[0] = 1; x.length = 0; x.join() === "". Actual: ' + (x.join())); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A1.2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A1.2_T1.js deleted file mode 100644 index 96e836f2e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A1.2_T1.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.5_A1.2_T1; - * @section: 15.4.4.5; - * @assertion: If separator is undefined, a single comma is used as the separator; - * @description: Checking this use new Array() and []; -*/ - -//CHECK#1 -x = new Array(0,1,2,3); -if (x.join() !== "0,1,2,3") { - $ERROR('#1: x = new Array(0,1,2,3); x.join() === "0,1,2,3". Actual: ' + (x.join())); -} - -//CHECK#2 -x = []; -x[0] = 0; -x[3] = 3; -if (x.join() !== "0,,,3") { - $ERROR('#2: x = []; x[0] = 0; x[3] = 3; x.join() === "0,,,3". Actual: ' + (x.join())); -} - -//CHECK#3 -x = []; -x[0] = 0; -if (x.join() !== "0") { - $ERROR('#3: x = []; x[0] = 0; x.join() === "0". Actual: ' + (x.join())); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A1.2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A1.2_T2.js deleted file mode 100644 index 7d1c10590..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A1.2_T2.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.5_A1.2_T2; - * @section: 15.4.4.5; - * @assertion: If separator is undefined, a single comma is used as the separator; - * @description: Checking this use new Array() and []; -*/ - -//CHECK#1 -x = new Array(0,1,2,3); -if (x.join(undefined) !== "0,1,2,3") { - $ERROR('#1: x = new Array(0,1,2,3); x.join(undefined) === "0,1,2,3". Actual: ' + (x.join(undefined))); -} - -//CHECK#2 -x = []; -x[0] = 0; -x[3] = 3; -if (x.join(undefined) !== "0,,,3") { - $ERROR('#2: x = []; x[0] = 0; x[3] = 3; x.join(undefined) === "0,,,3". Actual: ' + (x.join(undefined))); -} - -//CHECK#3 -x = []; -x[0] = 0; -if (x.join(undefined) !== "0") { - $ERROR('#3: x = []; x[0] = 0; x.join(undefined) === "0". Actual: ' + (x.join(undefined))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A1.3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A1.3_T1.js deleted file mode 100644 index 76d422597..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A1.3_T1.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.5_A1.3_T1; - * @section: 15.4.4.5; - * @assertion: If array element is undefined or null, use the empty string; - * @description: Checking this use new Array() and []; -*/ - -//CHECK#1 -x = []; -x[0] = undefined; -if (x.join() !== "") { - $ERROR('#1: x = []; x[0] = undefined; x.join() === "". Actual: ' + (x.join())); -} - -//CHECK#2 -x = []; -x[0] = null; -if (x.join() !== "") { - $ERROR('#2: x = []; x[0] = null; x.join() === "". Actual: ' + (x.join())); -} - -//CHECK#3 -x = Array(undefined,1,null,3); -if (x.join() !== ",1,,3") { - $ERROR('#3: x = Array(undefined,1,null,3); x.join() === ",1,,3". Actual: ' + (x.join())); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A2_T1.js deleted file mode 100644 index f5e3542e7..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A2_T1.js +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.5_A2_T1; - * @section: 15.4.4.5; - * @assertion: The join function is intentionally generic. - * It does not require that its this value be an Array object; - * @description: If ToUint32(length) is zero, return the empty string; -*/ - -var obj = {}; -obj.join = Array.prototype.join; - -if (obj.length !== undefined) { - $ERROR('#0: var obj = {}; obj.length === undefined. Actual: ' + (obj.length)); -} else { - //CHECK#1 - if (obj.join() !== "") { - $ERROR('#1: var obj = {}; obj.join = Array.prototype.join; obj.join() === "". Actual: ' + (obj.join())); - } - //CHECK#2 - if (obj.length !== undefined) { - $ERROR('#2: var obj = {}; obj.join = Array.prototype.join; obj.join(); obj.length === undefined. Actual: ' + (obj.length)); - } -} - -//CHECK#3 -obj.length = undefined; -if (obj.join() !== "") { - $ERROR('#3: var obj = {}; obj.length = undefined; obj.join = Array.prototype.join; obj.join() === ". Actual: ' + (obj.join())); -} - -//CHECK#4 -if (obj.length !== undefined) { - $ERROR('#4: var obj = {}; obj.length = undefined; obj.join = Array.prototype.join; obj.join(); obj.length === undefined. Actual: ' + (obj.length)); -} - -//CHECK#5 -obj.length = null -if (obj.join() !== "") { - $ERROR('#5: var obj = {}; obj.length = null; obj.join = Array.prototype.join; obj.join() === "". Actual: ' + (obj.join())); -} - -//CHECK#6 -if (obj.length !== null) { - $ERROR('#6: var obj = {}; obj.length = null; obj.join = Array.prototype.join; obj.join(); obj.length === null. Actual: ' + (obj.length)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A2_T2.js deleted file mode 100644 index c42d51a97..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A2_T2.js +++ /dev/null @@ -1,84 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.5_A2_T2; - * @section: 15.4.4.5; - * @assertion: The join function is intentionally generic. - * It does not require that its this value be an Array object; - * @description: If ToUint32(length) is zero, return the empty string; -*/ - -var obj = {}; -obj.join = Array.prototype.join; - -//CHECK#1 -obj.length = NaN; -if (obj.join() !== "") { - $ERROR('#1: var obj = {}; obj.length = NaN; obj.join = Array.prototype.join; obj.join() === "". Actual: ' + (obj.join())); -} - -//CHECK#2 -if (isNaN(obj.length) !== true) { - $ERROR('#2: var obj = {}; obj.length = NaN; obj.join = Array.prototype.join; obj.join(); obj.length === Not-a-Number. Actual: ' + (obj.length)); -} - -//CHECK#3 -obj.length = Number.POSITIVE_INFINITY; -if (obj.join() !== "") { - $ERROR('#3: var obj = {}; obj.length = Number.POSITIVE_INFINITY; obj.join = Array.prototype.join; obj.join() === "". Actual: ' + (obj.join())); -} - -//CHECK#4 -if (obj.length !== Number.POSITIVE_INFINITY) { - $ERROR('#4: var obj = {}; obj.length = Number.POSITIVE_INFINITY; obj.join = Array.prototype.join; obj.join(); obj.length === Number.POSITIVE_INFINITY. Actual: ' + (obj.length)); -} - -//CHECK#5 -obj.length = Number.NEGATIVE_INFINITY; -if (obj.join() !== "") { - $ERROR('#5: var obj = {}; obj.length = Number.NEGATIVE_INFINITY; obj.join = Array.prototype.join; obj.join() === "". Actual: ' + (obj.join())); -} - -//CHECK#6 -if (obj.length !== Number.NEGATIVE_INFINITY) { - $ERROR('#6: var obj = {}; obj.length = Number.NEGATIVE_INFINITY; obj.join = Array.prototype.join; obj.join(); obj.length === Number.NEGATIVE_INFINITY. Actual: ' + (obj.length)); -} - -//CHECK#7 -obj.length = -0; -if (obj.join() !== "") { - $ERROR('#7: var obj = {}; obj.length = -0; obj.join = Array.prototype.join; obj.join() === "". Actual: ' + (obj.join())); -} - -//CHECK#8 -if (obj.length !== -0) { - $ERROR('#8: var obj = {}; obj.length = -0; obj.join = Array.prototype.join; obj.join(); obj.length === 0. Actual: ' + (obj.length)); -} else { - if (1/obj.length !== Number.NEGATIVE_INFINITY) { - $ERROR('#8: var obj = {}; obj.length = -0; obj.join = Array.prototype.join; obj.join(); obj.length === -0. Actual: ' + (obj.length)); - } -} - -//CHECK#9 -obj.length = 0.5; -if (obj.join() !== "") { - $ERROR('#9: var obj = {}; obj.length = 0.5; obj.join = Array.prototype.join; obj.join() === "". Actual: ' + (obj.join())); -} - -//CHECK#10 -if (obj.length !== 0.5) { - $ERROR('#10: var obj = {}; obj.length = 0.5; obj.join = Array.prototype.join; obj.join(); obj.length === 0.5. Actual: ' + (obj.length)); -} - -//CHECK#11 -var x = new Number(0); -obj.length = x; -if (obj.join() !== "") { - $ERROR('#11: var x = new Number(0); var obj = {}; obj.length = x; obj.join = Array.prototype.join; obj.join() === "". Actual: ' + (obj.join())); -} - -//CHECK#12 -if (obj.length !== x) { - $ERROR('#12: var x = new Number(0); var obj = {}; obj.length = x; obj.join = Array.prototype.join; obj.join(); obj.length === x. Actual: ' + (obj.length)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A2_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A2_T3.js deleted file mode 100644 index a530d0752..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A2_T3.js +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.5_A2_T3; - * @section: 15.4.4.5; - * @assertion: The join function is intentionally generic. - * It does not require that its this value be an Array object; - * @description: If ToUint32(length) is zero, return the empty string; -*/ - -var obj = {}; -obj.join = Array.prototype.join; - -//CHECK#1 -obj.length = 4.5; -if (obj.join() !== ",,,") { - $ERROR('#1: var obj = {}; obj.length = 4.5; obj.join = Array.prototype.join; obj.join() === ",,,". Actual: ' + (obj.join())); -} - -//CHECK#2 -obj[0] = undefined; -obj[1] = 1; -obj[2] = null; -if (obj.join() !== ",1,,") { - $ERROR('#1: var obj = {}; obj.length = 4.5; obj[0] = undefined; obj[1] = 1; obj[2] = null; obj.join = Array.prototype.join; obj.join() === ",1,,". Actual: ' + (obj.join())); -} - -//CHECK#3 -if (obj.length !== 4.5) { - $ERROR('#1: var obj = {}; obj.length = 4.5; obj[0] = undefined; obj[1] = 1; obj[2] = null; obj.join = Array.prototype.join; obj.join(); obj.length === 4.5. Actual: ' + (obj.length)); -} - -var obj = {}; -obj.join = Array.prototype.join; - -//CHECK#4 -var x = new Number(4.5); -obj.length = x; -if (obj.join() !== ",,,") { - $ERROR('#4: var obj = {}; var x = new Number(4.5); obj.length = x; obj.join = Array.prototype.join; obj.join() === ",,,". Actual: ' + (obj.join())); -} - -//CHECK#5 -obj[0] = undefined; -obj[1] = 1; -obj[2] = null; -if (obj.join() !== ",1,,") { - $ERROR('#5: var obj = {}; var x = new Number(4.5); obj.length = x; obj[0] = undefined; obj[1] = 1; obj[2] = null; obj.join = Array.prototype.join; obj.join() === ",1,,". Actual: ' + (obj.join())); -} - -//CHECK#6 -if (obj.length !== x) { - $ERROR('#6: var obj = {}; var x = new Number(4.5); obj.length = x; obj[0] = undefined; obj[1] = 1; obj[2] = null; obj.join = Array.prototype.join; obj.join(); obj.length === x. Actual: ' + (obj.length)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A2_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A2_T4.js deleted file mode 100644 index e724be785..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A2_T4.js +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.5_A2_T4; - * @section: 15.4.4.5; - * @assertion: The join function is intentionally generic. - * It does not require that its this value be an Array object; - * @description: Operator use ToNumber from length. - * If Type(value) is Object, evaluate ToPrimitive(value, Number); -*/ - -var obj = {}; -obj.join = Array.prototype.join; - -//CHECK#1 -obj.length = {valueOf: function() {return 3}}; -if (obj.join() !== ",,") { - $ERROR('#1: obj.length = {valueOf: function() {return 3}} obj.join() === ",,". Actual: ' + (obj.join())); -} - -//CHECK#2 -obj.length = {valueOf: function() {return 3}, toString: function() {return 2}}; -if (obj.join() !== ",,") { - $ERROR('#2: obj.length = {valueOf: function() {return 3}, toString: function() {return 2}} obj.join() === ",,". Actual: ' + (obj.join())); -} - -//CHECK#3 -obj.length = {valueOf: function() {return 3}, toString: function() {return {}}}; -if (obj.join() !== ",,") { - $ERROR('#3: obj.length = {valueOf: function() {return 3}, toString: function() {return {}}} obj.join() === ",,". Actual: ' + (obj.join())); -} - -//CHECK#4 -try { - obj.length = {valueOf: function() {return 3}, toString: function() {throw "error"}}; - if (obj.join() !== ",,") { - $ERROR('#4.1: obj.length = {valueOf: function() {return 3}, toString: function() {throw "error"}}; obj.join() === ",". Actual: ' + (obj.join())); - } -} -catch (e) { - if (e === "error") { - $ERROR('#4.2: obj.length = {valueOf: function() {return 3}, toString: function() {throw "error"}}; obj.join() not throw "error"'); - } else { - $ERROR('#4.3: obj.length = {valueOf: function() {return 3}, toString: function() {throw "error"}}; obj.join() not throw Error. Actual: ' + (e)); - } -} - -//CHECK#5 -obj.length = {toString: function() {return 2}}; -if (obj.join() !== ",") { - $ERROR('#5: obj.length = {toString: function() {return 2}} obj.join() === ",". Actual: ' + (obj.join())); -} - -//CHECK#6 -obj.length = {valueOf: function() {return {}}, toString: function() {return 2}} -if (obj.join() !== ",") { - $ERROR('#6: obj.length = {valueOf: function() {return {}}, toString: function() {return 2}} obj.join() === ",". Actual: ' + (obj.join())); -} - -//CHECK#7 -try { - obj.length = {valueOf: function() {throw "error"}, toString: function() {return 2}}; - obj.join(); - $ERROR('#7.1: obj.length = {valueOf: function() {throw "error"}, toString: function() {return 2}}; obj.join() throw "error". Actual: ' + (obj.join())); -} -catch (e) { - if (e !== "error") { - $ERROR('#7.2: obj.length = {valueOf: function() {throw "error"}, toString: function() {return 2}}; obj.join() throw "error". Actual: ' + (e)); - } -} - -//CHECK#8 -try { - obj.length = {valueOf: function() {return {}}, toString: function() {return {}}}; - obj.join(); - $ERROR('#8.1: obj.length = {valueOf: function() {return {}}, toString: function() {return {}}} obj.join() throw TypeError. Actual: ' + (obj.join())); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#8,2: obj.length = {valueOf: function() {return {}}, toString: function() {return {}}} obj.join() throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A3.1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A3.1_T1.js deleted file mode 100644 index 5bc7105e9..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A3.1_T1.js +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.5_A3.1_T1; - * @section: 15.4.4.5; - * @assertion: Operator use ToString from separator; - * @description: Checking separator in ["", "\\", "&", true, Infinity, null, undefind, NaN]; -*/ - -//CHECK#0 -x = new Array(0,1,2,3); -if (x.join("") !== "0123") { - $ERROR('#0: x = new Array(0,1,2,3); x.join("") === "0123". Actual: ' + (x.join(""))); -} - -//CHECK#1 -x = new Array(0,1,2,3); -if (x.join("\\") !== "0\\1\\2\\3") { - $ERROR('#1: x = new Array(0,1,2,3); x.join("\\") === "0\\1\\2\\3". Actual: ' + (x.join("\\"))); -} - -//CHECK#2 -if (x.join("&") !== "0&1&2&3") { - $ERROR('#2: x = new Array(0,1,2,3); x.join("&") === "0&1&2&3". Actual: ' + (x.join("&"))); -} - -//CHECK#3 -if (x.join(true) !== "0true1true2true3") { - $ERROR('#3: x = new Array(0,1,2,3); x.join(true) === "0true1true2true3". Actual: ' + (x.join(true))); -} - -//CHECK#4 -if (x.join(Infinity) !== "0Infinity1Infinity2Infinity3") { - $ERROR('#4: x = new Array(0,1,2,3); x.join(Infinity) === "0Infinity1Infinity2Infinity3". Actual: ' + (x.join(Infinity))); -} - -//CHECK#5 -if (x.join(null) !== "0null1null2null3") { - $ERROR('#3: 5 = new Array(0,1,2,3); x.join(null) === "0null1null2null3". Actual: ' + (x.join(null))); -} - -//CHECK#6 -if (x.join(undefined) !== "0,1,2,3") { - $ERROR('#6: x = new Array(0,1,2,3); x.join(undefined) === "0,1,2,3". Actual: ' + (x.join(undefined))); -} - -//CHECK#7 -if (x.join(NaN) !== "0NaN1NaN2NaN3") { - $ERROR('#7: x = new Array(0,1,2,3); x.join("NaN") === "0NaN1NaN2NaN3". Actual: ' + (x.join("NaN"))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A3.1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A3.1_T2.js deleted file mode 100644 index 7bf062297..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A3.1_T2.js +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.5_A3.1_T2; - * @section: 15.4.4.5; - * @assertion: Operator use ToString from separator; - * @description: If Type(separator) is Object, evaluate ToPrimitive(separator, String); -*/ - -x = new Array(0,1,2,3); -//CHECK#1 -var object = {valueOf: function() {return "+"}}; -if (x.join(object) !== "0[object Object]1[object Object]2[object Object]3") { - $ERROR('#1: var object = {valueOf: function() {return "+"}}; x.join(object) === "0[object Object]1[object Object]2[object Object]3". Actual: ' + (x.join(object))); -} - -//CHECK#2 -var object = {valueOf: function() {return "+"}, toString: function() {return "*"}}; -if (x.join(object) !== "0*1*2*3") { - $ERROR('#2: var object = {valueOf: function() {return "+"}, toString: function() {return "*"}}; x.join(object) === "0*1*2*3". Actual: ' + (x.join(object))); -} - -//CHECK#3 -var object = {valueOf: function() {return "+"}, toString: function() {return {}}}; -if (x.join(object) !== "0+1+2+3") { - $ERROR('#3: var object = {valueOf: function() {return "+"}, toString: function() {return {}}}; x.join(object) === "0+1+2+3". Actual: ' + (x.join(object))); -} - -//CHECK#4 -try { - var object = {valueOf: function() {throw "error"}, toString: function() {return "*"}}; - if (x.join(object) !== "0*1*2*3") { - $ERROR('#4.1: var object = {valueOf: function() {throw "error"}, toString: function() {return "*"}}; x.join(object) === "0*1*2*3". Actual: ' + (x.join(object))); - } -} -catch (e) { - if (e === "error") { - $ERROR('#4.2: var object = {valueOf: function() {throw "error"}, toString: function() {return "*"}}; x.join(object) not throw "error"'); - } else { - $ERROR('#4.3: var object = {valueOf: function() {throw "error"}, toString: function() {return "*"}}; x.join(object) not throw Error. Actual: ' + (e)); - } -} - -//CHECK#5 -var object = {toString: function() {return "*"}}; -if (x.join(object) !== "0*1*2*3") { - $ERROR('#5: var object = {toString: function() {return "*"}}; x.join(object) === "0*1*2*3". Actual: ' + (x.join(object))); -} - -//CHECK#6 -var object = {valueOf: function() {return {}}, toString: function() {return "*"}} -if (x.join(object) !== "0*1*2*3") { - $ERROR('#6: var object = {valueOf: function() {return {}}, toString: function() {return "*"}}; x.join(object) === "0*1*2*3". Actual: ' + (x.join(object))); -} - -//CHECK#7 -try { - var object = {valueOf: function() {return "+"}, toString: function() {throw "error"}}; - x.join(object); - $ERROR('#7.1: var object = {valueOf: function() {return "+"}, toString: function() {throw "error"}}; x.join(object) throw "error". Actual: ' + (x.join(object))); -} -catch (e) { - if (e !== "error") { - $ERROR('#7.2: var object = {valueOf: function() {return "+"}, toString: function() {throw "error"}}; x.join(object) throw "error". Actual: ' + (e)); - } -} - -//CHECK#8 -try { - var object = {valueOf: function() {return {}}, toString: function() {return {}}}; - x.join(object); - $ERROR('#8.1: var object = {valueOf: function() {return {}}, toString: function() {return {}}}; x.join(object) throw TypeError. Actual: ' + (x.join(object))); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#8.2: var object = {valueOf: function() {return {}}, toString: function() {return {}}}; x.join(object) throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A3.2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A3.2_T1.js deleted file mode 100644 index 9c1f2f781..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A3.2_T1.js +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.5_A3.2_T1; - * @section: 15.4.4.5; - * @assertion: Operator use ToString from array arguments; - * @description: Checking arguments and separator in ["", "\\", "&", true, Infinity, null, undefind, NaN]; -*/ - -//CHECK#0 -var x = new Array("","",""); -if (x.join("") !== "") { - $ERROR('#0: var x = new Array("","",""); x.join("") === "". Actual: ' + (x.join(""))); -} - -//CHECK#1 -var x = new Array("\\","\\","\\"); -if (x.join("\\") !== "\\\\\\\\\\") { - $ERROR('#1: var x = new Array("\\","\\","\\"); x.join("\\") === "\\\\\\\\\\". Actual: ' + (x.join("\\"))); -} - -//CHECK#2 -var x = new Array("&", "&", "&"); -if (x.join("&") !== "&&&&&") { - $ERROR('#2: var x = new Array("&", "&", "&"); x.join("&") === "&&&&&". Actual: ' + (x.join("&"))); -} - -//CHECK#3 -var x = new Array(true,true,true); -if (x.join() !== "true,true,true") { - $ERROR('#3: var x = new Array(true,true,true); x.join(true,true,true) === "true,true,true". Actual: ' + (x.join(true,true,true))); -} - -//CHECK#4 -var x = new Array(null,null,null); -if (x.join() !== ",,") { - $ERROR('#4: var x = new Array(null,null,null); x.join(null,null,null) === ",,". Actual: ' + (x.join(null,null,null))); -} - -//CHECK#5 -var x = new Array(undefined,undefined,undefined); -if (x.join() !== ",,") { - $ERROR('#5: var x = new Array(undefined,undefined,undefined); x.join(undefined,undefined,undefined) === ",,". Actual: ' + (x.join(undefined,undefined,undefined))); -} - -//CHECK#6 -var x = new Array(Infinity,Infinity,Infinity); -if (x.join() !== "Infinity,Infinity,Infinity") { - $ERROR('#6: var x = new Array(Infinity,Infinity,Infinity); x.join(Infinity,Infinity,Infinity) === "Infinity,Infinity,Infinity". Actual: ' + (x.join(Infinity,Infinity,Infinity))); -} - -//CHECK#7 -var x = new Array(NaN,NaN,NaN); -if (x.join() !== "NaN,NaN,NaN") { - $ERROR('#7: var x = new Array(NaN,NaN,NaN); x.join(NaN,NaN,NaN) === "NaN,NaN,NaN". Actual: ' + (x.join(NaN,NaN,NaN))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A3.2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A3.2_T2.js deleted file mode 100644 index c90db09c4..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A3.2_T2.js +++ /dev/null @@ -1,86 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.5_A3.2_T2; - * @section: 15.4.4.5; - * @assertion: Operator use ToString from array arguments; - * @description: If Type(argument) is Object, evaluate ToPrimitive(argument, String); -*/ - -//CHECK#1 -var object = {valueOf: function() {return "+"}}; -var x = new Array(object); -if (x.join() !== "[object Object]") { - $ERROR('#1: var object = {valueOf: function() {return "+"}} var x = new Array(object); x.join() === "[object Object]". Actual: ' + (x.join())); -} - -//CHECK#2 -var object = {valueOf: function() {return "+"}, toString: function() {return "*"}}; -var x = new Array(object); -if (x.join() !== "*") { - $ERROR('#2: var object = {valueOf: function() {return "+"}, toString: function() {return "*"}} var x = new Array(object); x.join() === "*". Actual: ' + (x.join())); -} - -//CHECK#3 -var object = {valueOf: function() {return "+"}, toString: function() {return {}}}; -var x = new Array(object); -if (x.join() !== "+") { - $ERROR('#3: var object = {valueOf: function() {return "+"}, toString: function() {return {}}} var x = new Array(object); x.join() === "+". Actual: ' + (x.join())); -} - -//CHECK#4 -try { - var object = {valueOf: function() {throw "error"}, toString: function() {return "*"}}; - var x = new Array(object); - if (x.join() !== "*") { - $ERROR('#4.1: var object = {valueOf: function() {throw "error"}, toString: function() {return "*"}} var x = new Array(object); x.join() === "*". Actual: ' + (x.join())); - } -} -catch (e) { - if (e === "error") { - $ERROR('#4.2: var object = {valueOf: function() {throw "error"}, toString: function() {return "*"}} var x = new Array(object); x.join() not throw "error"'); - } else { - $ERROR('#4.3: var object = {valueOf: function() {throw "error"}, toString: function() {return "*"}} var x = new Array(object); x.join() not throw Error. Actual: ' + (e)); - } -} - -//CHECK#5 -var object = {toString: function() {return "*"}}; -var x = new Array(object); -if (x.join() !== "*") { - $ERROR('#5: var object = {toString: function() {return "*"}} var x = new Array(object); x.join() === "*". Actual: ' + (x.join())); -} - -//CHECK#6 -var object = {valueOf: function() {return {}}, toString: function() {return "*"}} -var x = new Array(object); -if (x.join() !== "*") { - $ERROR('#6: var object = {valueOf: function() {return {}}, toString: function() {return "*"}} var x = new Array(object); x.join() === "*". Actual: ' + (x.join())); -} - -//CHECK#7 -try { - var object = {valueOf: function() {return "+"}, toString: function() {throw "error"}}; - var x = new Array(object); - x.join(); - $ERROR('#7.1: var object = {valueOf: function() {return "+"}, toString: function() {throw "error"}} var x = new Array(object); x.join() throw "error". Actual: ' + (x.join())); -} -catch (e) { - if (e !== "error") { - $ERROR('#7.2: var object = {valueOf: function() {return "+"}, toString: function() {throw "error"}} var x = new Array(object); x.join() throw "error". Actual: ' + (e)); - } -} - -//CHECK#8 -try { - var object = {valueOf: function() {return {}}, toString: function() {return {}}}; - var x = new Array(object); - x.join(); - $ERROR('#8.1: var object = {valueOf: function() {return {}}, toString: function() {return {}}} var x = new Array(object); x.join() throw TypeError. Actual: ' + (x.join())); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#8.2: var object = {valueOf: function() {return {}}, toString: function() {return {}}} var x = new Array(object); x.join() throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A4_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A4_T1.js deleted file mode 100644 index 9113c3fdd..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A4_T1.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.5_A4_T1; - * @section: 15.4.4.5; - * @assertion: Check ToUint32(length) for non Array objects; - * @description: length = 4294967296; -*/ - -var obj = {}; -obj.join = Array.prototype.join; -obj[0] = "x"; -obj[4294967295] = "y"; -obj.length = 4294967296; - -//CHECK#1 -if (obj.join("") !== "") { - $ERROR('#1: var obj = {}; obj.join = Array.prototype.join; obj[0] = "x"; obj[4294967295] = "y"; obj.length = 4294967296; obj.join("") === "". Actual: ' + (obj.join(""))); -} - -//CHECK#2 -if (obj.length !== 4294967296) { - $ERROR('#2: var obj = {}; obj.join = Array.prototype.join; obj[0] = "x"; obj[4294967295] = "y"; obj.length = 4294967296; obj.join(""); obj.length === 4294967296. Actual: ' + (obj.length)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A4_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A4_T2.js deleted file mode 100644 index 314ab20fd..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A4_T2.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.5_A4_T2; - * @section: 15.4.4.5; - * @assertion: Check ToUint32(length) for non Array objects; - * @description: length = 4294967297; -*/ - -var obj = {}; -obj.join = Array.prototype.join; -obj[0] = "x"; -obj[1] = "y"; -obj[4294967296] = "z"; -obj.length = 4294967297; - -//CHECK#1 -if (obj.join("") !== "x") { - $ERROR('#1: var obj = {}; obj.join = Array.prototype.join; obj[0] = "x"; obj[1] = "y"; obj[4294967296] = "z"; obj.length = 4294967297; obj.join("") === "x". Actual: ' + (obj.join(""))); -} - -//CHECK#2 -if (obj.length !== 4294967297) { - $ERROR('#2: var obj = {}; obj.join = Array.prototype.join; obj[0] = "x"; obj[1] = "y"; obj[4294967296] = "z"; obj.length = 4294967297; obj.join(""); obj.length === 4294967297. Actual: ' + (obj.length)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A4_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A4_T3.js deleted file mode 100644 index 7bef72f9b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A4_T3.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.5_A4_T3; - * @section: 15.4.4.5; - * @assertion: Check ToUint32(length) for non Array objects; - * @description: length = -4294967294; -*/ - -var obj = {}; -obj.join = Array.prototype.join; -obj[0] = "x"; -obj[1] = "y"; -obj[2] = "z"; -obj.length = -4294967294; - -//CHECK#1 -if (obj.join("") !== "xy") { - $ERROR('#1: var obj = {}; obj.join = Array.prototype.join; obj[0] = "x"; obj[1] = "y"; obj[2] = "z"; obj.length = -4294967294; obj.join("") === "xy". Actual: ' + (obj.join(""))); -} - -//CHECK#2 -if (obj.length !== -4294967294) { - $ERROR('#2: var obj = {}; obj.join = Array.prototype.join; obj[0] = "x"; obj[1] = "y"; obj[2] = "z"; obj.length = -4294967294; obj.join(""); obj.length === -4294967294. Actual: ' + (obj.length)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A5_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A5_T1.js deleted file mode 100644 index 9ec56ad25..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A5_T1.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.5_A5_T1; - * @section: 15.4.4.5, 8.6.2.1; - * @assertion: [[Get]] from not an inherited property; - * @description: [[Prototype]] of Array instance is Array.prototype, [[Prototype] of Array.prototype is Object.prototype; -*/ - -//CHECK#1 -Array.prototype[1] = 1; -x = [0]; -x.length = 2; -if (x.join() !== "0,1") { - $ERROR('#1: Array.prototype[1] = 1; x = [0]; x.length = 2; x.join() === "0,1". Actual: ' + (x.join())); -} - -//CHECK#2 -Object.prototype[1] = 1; -Object.prototype.length = 2; -Object.prototype.join = Array.prototype.join; -x = {0:0}; -if (x.join() !== "0,1") { - $ERROR('#2: Object.prototype[1] = 1; Object.prototype.length = 2; Object.prototype.join = Array.prototype.join; x = {0:0}; x.join() === "0,1". Actual: ' + (x.join())); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A6.1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A6.1.js deleted file mode 100644 index 31e0c1266..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A6.1.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.5_A6.1; -* @section: 15.4.4.5, 15.2.4.7, 12.6.4; -* @assertion: The length property of join has the attribute DontEnum; -* @description: Checking use propertyIsEnumerable, for-in; -*/ - - -//CHECK#1 -if (Array.prototype.join.propertyIsEnumerable('length') !== false) { - $ERROR('#1: Array.prototype.join.propertyIsEnumerable(\'length\') === false. Actual: ' + (Array.prototype.join.propertyIsEnumerable('length'))); -} - -//CHECK#2 -result = true; -for (p in Array.join){ - if (p === "length") { - result = false; - } -} - -if (result !== true) { - $ERROR('#2: result = true; for (p in Array.join) { if (p === "length") result = false; } result === true;'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A6.2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A6.2.js deleted file mode 100644 index f0e8b49ee..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A6.2.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.5_A6.2; -* @section: 15.4.4.5, 15.2.4.5, 11.4.1; -* @assertion: The length property of join has the attribute DontDelete; -* @description: Checking use hasOwnProperty, delete; -*/ - -//CHECK#1 -if (Array.prototype.join.hasOwnProperty('length') !== true) { - $FAIL('#1: Array.prototype.join.hasOwnProperty(\'length\') === true. Actual: ' + (Array.prototype.join.hasOwnProperty('length'))); -} - -delete Array.prototype.join.length; - -//CHECK#2 -if (Array.prototype.join.hasOwnProperty('length') !== true) { - $ERROR('#2: delete Array.prototype.join.length; Array.prototype.join.hasOwnProperty(\'length\') === true. Actual: ' + (Array.prototype.join.hasOwnProperty('length'))); -} - -//CHECK#3 -if (Array.prototype.join.length === undefined) { - $ERROR('#3: delete Array.prototype.join.length; Array.prototype.join.length !== undefined'); -} - - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A6.3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A6.3.js deleted file mode 100644 index 5fd9162a6..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A6.3.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.5_A6.3; -* @section: 15.4.4.5; -* @assertion: The length property of join has the attribute ReadOnly; -* @description: Checking if varying the length property fails; -*/ - -//CHECK#1 -x = Array.prototype.join.length; -Array.prototype.join.length = Infinity; -if (Array.prototype.join.length !== x) { - $ERROR('#1: x = Array.prototype.join.length; Array.prototype.join.length = Infinity; Array.prototype.join.length === x. Actual: ' + (Array.prototype.join.length)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A6.4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A6.4.js deleted file mode 100644 index 6784ef2a8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A6.4.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.5_A6.4; -* @section: 15.4.4.5; -* @assertion: The length property of join is 1; -* @description: join.length === 1; -*/ - -//CHECK#1 -if (Array.prototype.join.length !== 1) { - $ERROR('#1: Array.prototype.join.length === 1. Actual: ' + (Array.prototype.join.length)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A6.5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A6.5.js deleted file mode 100644 index de3f9eafe..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A6.5.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.5_A6.5; -* @section: 15.4.4.5, 15.2.4.7, 12.6.4; -* @assertion: The join property of Array has the attribute DontEnum; -* @description: Checking use propertyIsEnumerable, for-in; -*/ - - -//CHECK#1 -if (Array.propertyIsEnumerable('join') !== false) { - $ERROR('#1: Array.propertyIsEnumerable(\'join\') === false. Actual: ' + (Array.propertyIsEnumerable('join'))); -} - -//CHECK#2 -result = true; -for (p in Array){ - if (p === "join") { - result = false; - } -} - -if (result !== true) { - $ERROR('#2: result = true; for (p in Array) { if (p === "join") result = false; } result === true;'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A6.6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A6.6.js deleted file mode 100644 index 7c83113be..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A6.6.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.5_A6.6; -* @section: 15.4.4.5; -* @assertion: The join property of Array has not prototype property; -* @description: Checking Array.prototype.join.prototype; -*/ - -//CHECK#1 -if (Array.prototype.join.prototype !== undefined) { - $ERROR('#1: Array.prototype.join.prototype === undefined. Actual: ' + (Array.prototype.join.prototype)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A6.7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A6.7.js deleted file mode 100644 index b27ccf0d5..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.5_Array_prototype_join/S15.4.4.5_A6.7.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.5_A6.7; -* @section: 15.4.4.5, 11.2.2; -* @assertion: The join property of Array can't be used as constructor; -* @description: If property does not implement the internal [[Construct]] method, throw a TypeError exception; -*/ - -//CHECK#1 - -try { - new Array.prototype.join(); - $ERROR('#1.1: new Array.prototype.join() throw TypeError. Actual: ' + (new Array.prototype.join())); -} catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1.2: new Array.prototype.join() throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.6_Array_prototype_pop/S15.4.4.6_A1.1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.6_Array_prototype_pop/S15.4.4.6_A1.1_T1.js deleted file mode 100644 index 940d32dc1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.6_Array_prototype_pop/S15.4.4.6_A1.1_T1.js +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.6_A1.1_T1; - * @section: 15.4.4.6; - * @assertion: If length equal zero, call the [[Put]] method of this object - * with arguments "length" and 0 and return undefined; - * @description: Checking this algorithm; -*/ - -//CHECK#1 -var x = new Array(); -var pop = x.pop(); -if (pop !== undefined) { - $ERROR('#1: var x = new Array(); x.pop() === undefined. Actual: ' + (pop)); -} - -//CHECK#2 -if (x.length !== 0) { - $ERROR('#2: var x = new Array(); x.pop(); x.length === 0. Actual: ' + (x.length)); -} - -//CHECK#3 -var x = Array(1,2,3); -x.length = 0; -var pop = x.pop(); -if (pop !== undefined) { - $ERROR('#2: var x = Array(1,2,3); x.length = 0; x.pop() === undefined. Actual: ' + (pop)); -} - -//CHECK#4 -if (x.length !== 0) { - $ERROR('#4: var x = new Array(1,2,3); x.length = 0; x.pop(); x.length === 0. Actual: ' + (x.length)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.6_Array_prototype_pop/S15.4.4.6_A1.2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.6_Array_prototype_pop/S15.4.4.6_A1.2_T1.js deleted file mode 100644 index 2fc6733eb..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.6_Array_prototype_pop/S15.4.4.6_A1.2_T1.js +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.6_A1.2_T1; - * @section: 15.4.4.6; - * @assertion: The last element of the array is removed from the array - * and returned; - * @description: Checking this use new Array() and []; -*/ - -//CHECK#1 -x = new Array(0,1,2,3); -var pop = x.pop(); -if (pop !== 3) { - $ERROR('#1: x = new Array(0,1,2,3); x.pop() === 3. Actual: ' + (pop)); -} - -//CHECK#2 -if (x.length !== 3) { - $ERROR('#2: x = new Array(0,1,2,3); x.pop(); x.length == 3'); -} - -//CHECK#3 -if (x[3] !== undefined) { - $ERROR('#3: x = new Array(0,1,2,3); x.pop(); x[3] == undefined'); -} - -//CHECK#4 -if (x[2] !== 2) { - $ERROR('#4: x = new Array(0,1,2,3); x.pop(); x[2] == 2'); -} - -//CHECK#5 -x = []; -x[0] = 0; -x[3] = 3; -var pop = x.pop(); -if (pop !== 3) { - $ERROR('#5: x = []; x[0] = 0; x[3] = 3; x.pop() === 3. Actual: ' + (pop)); -} - -//CHECK#6 -if (x.length !== 3) { - $ERROR('#6: x = []; x[0] = 0; x[3] = 3; x.pop(); x.length == 3'); -} - -//CHECK#7 -if (x[3] !== undefined) { - $ERROR('#7: x = []; x[0] = 0; x[3] = 3; x.pop(); x[3] == undefined'); -} - -//CHECK#8 -if (x[2] !== undefined) { - $ERROR('#8: x = []; x[0] = 0; x[3] = 3; x.pop(); x[2] == undefined'); -} - -//CHECK#9 -x.length = 1; -var pop = x.pop(); -if (pop !== 0) { - $ERROR('#9: x = []; x[0] = 0; x[3] = 3; x.pop(); x.length = 1; x.pop() === 0. Actual: ' + (pop)); -} - -//CHECK#10 -if (x.length !== 0) { - $ERROR('#10: x = []; x[0] = 0; x[3] = 3; x.pop(); x.length = 1; x.pop(); x.length === 0. Actual: ' + (x.length)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.6_Array_prototype_pop/S15.4.4.6_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.6_Array_prototype_pop/S15.4.4.6_A2_T1.js deleted file mode 100644 index 1e4910827..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.6_Array_prototype_pop/S15.4.4.6_A2_T1.js +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.6_A2_T1; - * @section: 15.4.4.6; - * @assertion: The pop function is intentionally generic. - * It does not require that its this value be an Array object; - * @description: If ToUint32(length) equal zero, call the [[Put]] method - * of this object with arguments "length" and 0 and return undefined; -*/ - -var obj = {}; -obj.pop = Array.prototype.pop; - -if (obj.length !== undefined) { - $ERROR('#0: var obj = {}; obj.length === undefined. Actual: ' + (obj.length)); -} else { - //CHECK#1 - var pop = obj.pop(); -if (pop !== undefined) { - $ERROR('#1: var obj = {}; obj.pop = Array.prototype.pop; obj.pop() === undefined. Actual: ' + (pop)); - } - //CHECK#2 - if (obj.length !== 0) { - $ERROR('#2: var obj = {}; obj.pop = Array.prototype.pop; obj.pop(); obj.length === 0. Actual: ' + (obj.length)); - } -} - -//CHECK#3 -obj.length = undefined; -var pop = obj.pop(); -if (pop !== undefined) { - $ERROR('#3: var obj = {}; obj.length = undefined; obj.pop = Array.prototype.pop; obj.pop() === undefined. Actual: ' + (pop)); -} - -//CHECK#4 -if (obj.length !== 0) { - $ERROR('#4: var obj = {}; obj.length = undefined; obj.pop = Array.prototype.pop; obj.pop(); obj.length === 0. Actual: ' + (obj.length)); -} - -//CHECK#5 -obj.length = null -var pop = obj.pop(); -if (pop !== undefined) { - $ERROR('#5: var obj = {}; obj.length = null; obj.pop = Array.prototype.pop; obj.pop() === undefined. Actual: ' + (pop)); -} - -//CHECK#6 -if (obj.length !== 0) { - $ERROR('#6: var obj = {}; obj.length = null; obj.pop = Array.prototype.pop; obj.pop(); obj.length === 0. Actual: ' + (obj.length)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.6_Array_prototype_pop/S15.4.4.6_A2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.6_Array_prototype_pop/S15.4.4.6_A2_T2.js deleted file mode 100644 index d768cd76c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.6_Array_prototype_pop/S15.4.4.6_A2_T2.js +++ /dev/null @@ -1,90 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.6_A2_T2; - * @section: 15.4.4.6; - * @assertion: The pop function is intentionally generic. - * It does not require that its this value be an Array object; - * @description: If ToUint32(length) equal zero, call the [[Put]] method - * of this object with arguments "length" and 0 and return undefined; -*/ - -var obj = {}; -obj.pop = Array.prototype.pop; - -//CHECK#1 -obj.length = NaN; -var pop = obj.pop(); -if (pop !== undefined) { - $ERROR('#1: var obj = {}; obj.length = NaN; obj.pop = Array.prototype.pop; obj.pop() === undefined. Actual: ' + (pop)); -} - -//CHECK#2 -if (obj.length !== 0) { - $ERROR('#2: var obj = {}; obj.length = NaN; obj.pop = Array.prototype.pop; obj.pop(); obj.length === 0. Actual: ' + (obj.length)); -} - -//CHECK#3 -obj.length = Number.POSITIVE_INFINITY; -var pop = obj.pop(); -if (pop !== undefined) { - $ERROR('#3: var obj = {}; obj.length = Number.POSITIVE_INFINITY; obj.pop = Array.prototype.pop; obj.pop() === undefined. Actual: ' + (pop)); -} - -//CHECK#4 -if (obj.length !== 0) { - $ERROR('#4: var obj = {}; obj.length = Number.POSITIVE_INFINITY; obj.pop = Array.prototype.pop; obj.pop(); obj.length === 0. Actual: ' + (obj.length)); -} - -//CHECK#5 -obj.length = Number.NEGATIVE_INFINITY; -var pop = obj.pop(); -if (pop !== undefined) { - $ERROR('#5: var obj = {}; obj.length = Number.NEGATIVE_INFINITY; obj.pop = Array.prototype.pop; obj.pop() === undefined. Actual: ' + (pop)); -} - -//CHECK#6 -if (obj.length !== 0) { - $ERROR('#6: var obj = {}; obj.length = Number.NEGATIVE_INFINITY; obj.pop = Array.prototype.pop; obj.pop(); obj.length === 0. Actual: ' + (obj.length)); -} - -//CHECK#7 -obj.length = -0; -var pop = obj.pop(); -if (pop !== undefined) { - $ERROR('#7: var obj = {}; obj.length = -0; obj.pop = Array.prototype.pop; obj.pop() === undefined. Actual: ' + (pop)); -} - -//CHECK#8 -if (obj.length !== 0) { - $ERROR('#8: var obj = {}; obj.length = -0; obj.pop = Array.prototype.pop; obj.pop(); obj.length === 0. Actual: ' + (obj.length)); -} else { - if (1/obj.length !== Number.POSITIVE_INFINITY) { - $ERROR('#8: var obj = {}; obj.length = -0; obj.pop = Array.prototype.pop; obj.pop(); obj.length === +0. Actual: ' + (obj.length)); - } -} - -//CHECK#9 -obj.length = 0.5; -var pop = obj.pop(); -if (pop !== undefined) { - $ERROR('#9: var obj = {}; obj.length = 0.5; obj.pop = Array.prototype.pop; obj.pop() === undefined. Actual: ' + (pop)); -} - -//CHECK#10 -if (obj.length !== 0) { - $ERROR('#10: var obj = {}; obj.length = 0.5; obj.pop = Array.prototype.pop; obj.pop(); obj.length === 0. Actual: ' + (obj.length)); -} - -//CHECK#11 -obj.length = new Number(0); -var pop = obj.pop(); -if (pop !== undefined) { - $ERROR('#11: var obj = {}; obj.length = new Number(0); obj.pop = Array.prototype.pop; obj.pop() === undefined. Actual: ' + (pop)); -} - -//CHECK#12 -if (obj.length !== 0) { - $ERROR('#12: var obj = {}; obj.length = new Number(0); obj.pop = Array.prototype.pop; obj.pop(); obj.length === 0. Actual: ' + (obj.length)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.6_Array_prototype_pop/S15.4.4.6_A2_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.6_Array_prototype_pop/S15.4.4.6_A2_T3.js deleted file mode 100644 index 78ce4302e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.6_Array_prototype_pop/S15.4.4.6_A2_T3.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.6_A2_T3; - * @section: 15.4.4.6; - * @assertion: The pop function is intentionally generic. - * It does not require that its this value be an Array object; - * @description: The last element ToUint32(length) - 1 of the array is removed from the array - * and returned; -*/ - -var obj = {}; -obj.pop = Array.prototype.pop; - -//CHECK#1 -obj.length = 2.5; -var pop = obj.pop(); -if (pop !== undefined) { - $ERROR('#1: var obj = {}; obj.length = 2.5; obj.pop = Array.prototype.pop; obj.pop() === undefined. Actual: ' + (pop)); -} - -//CHECK#2 -if (obj.length !== 1) { - $ERROR('#2: var obj = {}; obj.length = 2.5; obj.pop = Array.prototype.pop; obj.pop(); obj.length === 1. Actual: ' + (obj.length)); -} - -//CHECK#3 -obj.length = new Number(2); -var pop = obj.pop(); -if (pop !== undefined) { - $ERROR('#11: var obj = {}; obj.length = new Number(2); obj.pop = Array.prototype.pop; obj.pop() === undefined. Actual: ' + (pop)); -} - -//CHECK#3 -if (obj.length !== 1) { - $ERROR('#12: var obj = {}; obj.length = new Number(2); obj.pop = Array.prototype.pop; obj.pop(); obj.length === 1. Actual: ' + (obj.length)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.6_Array_prototype_pop/S15.4.4.6_A2_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.6_Array_prototype_pop/S15.4.4.6_A2_T4.js deleted file mode 100644 index a933ba756..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.6_Array_prototype_pop/S15.4.4.6_A2_T4.js +++ /dev/null @@ -1,97 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.6_A2_T4; - * @section: 15.4.4.6; - * @assertion: The pop function is intentionally generic. - * It does not require that its this value be an Array object; - * @description: Operator use ToNumber from length. - * If Type(value) is Object, evaluate ToPrimitive(value, Number); -*/ - -var obj = {}; -obj.pop = Array.prototype.pop; - -//CHECK#1 -obj[0] = -1; -obj.length = {valueOf: function() {return 1}}; -var pop = obj.pop(); -if (pop !== -1) { - $ERROR('#1: obj[0] = -1; obj.length = {valueOf: function() {return 1}} obj.pop() === -1. Actual: ' + (pop)); -} - -//CHECK#2 -obj[0] = -1; -obj.length = {valueOf: function() {return 1}, toString: function() {return 0}}; -var pop = obj.pop(); -if (pop !== -1) { - $ERROR('#0: obj[0] = -1; obj.length = {valueOf: function() {return 1}, toString: function() {return 0}} obj.pop() === -1. Actual: ' + (pop)); -} - -//CHECK#3 -obj[0] = -1; -obj.length = {valueOf: function() {return 1}, toString: function() {return {}}}; -var pop = obj.pop(); -if (pop !== -1) { - $ERROR('#3: obj[0] = -1; obj.length = {valueOf: function() {return 1}, toString: function() {return {}}} obj.pop() === -1. Actual: ' + (pop)); -} - -//CHECK#4 -try { - obj[0] = -1; - obj.length = {valueOf: function() {return 1}, toString: function() {throw "error"}}; - var pop = obj.pop(); -if (pop !== -1) { - $ERROR('#4.1: obj[0] = -1; obj.length = {valueOf: function() {return 1}, toString: function() {throw "error"}}; obj.pop() === ",". Actual: ' + (pop)); - } -} -catch (e) { - if (e === "error") { - $ERROR('#4.2: obj[0] = -1; obj.length = {valueOf: function() {return 1}, toString: function() {throw "error"}}; obj.pop() not throw "error"'); - } else { - $ERROR('#4.3: obj[0] = -1; obj.length = {valueOf: function() {return 1}, toString: function() {throw "error"}}; obj.pop() not throw Error. Actual: ' + (e)); - } -} - -//CHECK#5 -obj[0] = -1; -obj.length = {toString: function() {return 0}}; -var pop = obj.pop(); -if (pop !== undefined) { - $ERROR('#5: obj[0] = -1; obj.length = {toString: function() {return 0}} obj.pop() === undefined. Actual: ' + (pop)); -} - -//CHECK#6 -obj[0] = -1; -obj.length = {valueOf: function() {return {}}, toString: function() {return 0}} -var pop = obj.pop(); -if (pop !== undefined) { - $ERROR('#6: obj[0] = -1; obj.length = {valueOf: function() {return {}}, toString: function() {return 0}} obj.pop() === undefined. Actual: ' + (pop)); -} - -//CHECK#7 -try { - obj[0] = -1; - obj.length = {valueOf: function() {throw "error"}, toString: function() {return 0}}; - var pop = obj.pop(); - $ERROR('#7.1: obj[0] = -1; obj.length = {valueOf: function() {throw "error"}, toString: function() {return 0}}; obj.pop() throw "error". Actual: ' + (pop)); -} -catch (e) { - if (e !== "error") { - $ERROR('#7.2: obj[0] = -1; obj.length = {valueOf: function() {throw "error"}, toString: function() {return 0}}; obj.pop() throw "error". Actual: ' + (e)); - } -} - -//CHECK#8 -try { - obj[0] = -1; - obj.length = {valueOf: function() {return {}}, toString: function() {return {}}}; - var pop = obj.pop(); - $ERROR('#8.1: obj[0] = -1; obj.length = {valueOf: function() {return {}}, toString: function() {return {}}} obj.pop() throw TypeError. Actual: ' + (pop)); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#8.2: obj[0] = -1; obj.length = {valueOf: function() {return {}}, toString: function() {return {}}} obj.pop() throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.6_Array_prototype_pop/S15.4.4.6_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.6_Array_prototype_pop/S15.4.4.6_A3_T1.js deleted file mode 100644 index a7c1c7d87..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.6_Array_prototype_pop/S15.4.4.6_A3_T1.js +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.6_A3_T1; - * @section: 15.4.4.6; - * @assertion: Check ToUint32(length) for non Array objects; - * @description: length = 4294967296; -*/ - -var obj = {}; -obj.pop = Array.prototype.pop; -obj[0] = "x"; -obj[4294967295] = "y"; -obj.length = 4294967296; - -//CHECK#1 -var pop = obj.pop(); -if (pop !== undefined) { - $ERROR('#1: var obj = {}; obj.pop = Array.prototype.pop; obj[0] = "x"; obj[4294967295] = "y"; obj.length = 4294967296; obj.pop() === unedfined. Actual: ' + (pop)); -} - -//CHECK#2 -if (obj.length !== 0) { - $ERROR('#2: var obj = {}; obj.pop = Array.prototype.pop; obj[0] = "x"; obj[4294967295] = "y"; obj.length = 4294967296; obj.pop(); obj.length === 0. Actual: ' + (obj.length)); -} - -//CHECK#3 -if (obj[0] !== "x") { - $ERROR('#3: var obj = {}; obj.pop = Array.prototype.pop; obj[0] = "x"; obj[4294967295] = "y"; obj.length = 4294967296; obj.pop(); obj[0] === "x". Actual: ' + (obj[0])); -} - -//CHECK#4 -if (obj[4294967295] !== "y") { - $ERROR('#4: var obj = {}; obj.pop = Array.prototype.pop; obj[0] = "x"; obj[4294967295] = "y"; obj.length = 4294967296; obj.pop(); obj[4294967295] === "y". Actual: ' + (obj[4294967295])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.6_Array_prototype_pop/S15.4.4.6_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.6_Array_prototype_pop/S15.4.4.6_A3_T2.js deleted file mode 100644 index eed98673b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.6_Array_prototype_pop/S15.4.4.6_A3_T2.js +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.6_A3_T2; - * @section: 15.4.4.6; - * @assertion: Check ToUint32(length) for non Array objects; - * @description: length = 4294967297; -*/ - -var obj = {}; -obj.pop = Array.prototype.pop; -obj[0] = "x"; -obj[4294967296] = "y"; -obj.length = 4294967297; - -//CHECK#1 -var pop = obj.pop(); -if (pop !== "x") { - $ERROR('#1: var obj = {}; obj.pop = Array.prototype.pop; obj[0] = "x"; obj[4294967296] = "y"; obj.length = 4294967297; obj.pop() === "x". Actual: ' + (pop)); -} - -//CHECK#2 -if (obj.length !== 0) { - $ERROR('#2: var obj = {}; obj.pop = Array.prototype.pop; obj[0] = "x"; obj[4294967296] = "y"; obj.length = 4294967297; obj.pop(); obj.length === 0. Actual: ' + (obj.length)); -} - -//CHECK#3 -if (obj[0] !== undefined) { - $ERROR('#3: var obj = {}; obj.pop = Array.prototype.pop; obj[0] = "x"; obj[4294967296] = "y"; obj.length = 4294967297; obj.pop(); obj[0] === undefined. Actual: ' + (obj[0])); -} - -//CHECK#4 -if (obj[4294967296] !== "y") { - $ERROR('#4: var obj = {}; obj.pop = Array.prototype.pop; obj[0] = "x"; obj[4294967296] = "y"; obj.length = 4294967297; obj.pop(); obj[4294967296] === "y". Actual: ' + (obj[4294967296])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.6_Array_prototype_pop/S15.4.4.6_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.6_Array_prototype_pop/S15.4.4.6_A3_T3.js deleted file mode 100644 index 3c1d48410..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.6_Array_prototype_pop/S15.4.4.6_A3_T3.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.6_A3_T3; - * @section: 15.4.4.6; - * @assertion: Check ToUint32(length) for non Array objects; - * @description: length = -1; -*/ - -var obj = {}; -obj.pop = Array.prototype.pop; -obj[4294967294] = "x"; -obj.length = -1; - -//CHECK#1 -var pop = obj.pop(); -if (pop !== "x") { - $ERROR('#1: var obj = {}; obj.pop = Array.prototype.pop; obj[4294967294] = "x"; obj.length = -1; obj.pop() === "x". Actual: ' + (pop)); -} - -//CHECK#2 -if (obj.length !== 4294967294) { - $ERROR('#2: var obj = {}; obj.pop = Array.prototype.pop; obj[4294967294] = "x"; obj.length = -1; obj.pop(); obj.length === 4294967294. Actual: ' + (obj.length)); -} - -//CHECK#3 -if (obj[4294967294] !== undefined) { - $ERROR('#3: var obj = {}; obj.pop = Array.prototype.pop; obj[4294967294] = "x"; obj.length = -1; obj.pop(); obj[4294967294] === undefined. Actual: ' + (obj[4294967294])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.6_Array_prototype_pop/S15.4.4.6_A4_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.6_Array_prototype_pop/S15.4.4.6_A4_T1.js deleted file mode 100644 index 8a12a2ed3..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.6_Array_prototype_pop/S15.4.4.6_A4_T1.js +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.6_A4_T1; - * @section: 15.4.4.6, 8.6.2.1, 8.6.2.5; - * @assertion: [[Get]], [[Delete]] from not an inherited property; - * @description: [[Prototype]] of Array instance is Array.prototype, [[Prototype] of Array.prototype is Object.prototype; -*/ - -Array.prototype[1] = 1; -x = [0]; -x.length = 2; - -//CHECK#1 -var pop = x.pop(); -if (pop !== 1) { - $ERROR('#1: Array.prototype[1] = 1; x = [0]; x.length = 2; x.pop() === 1. Actual: ' + (pop)); -} - -//CHECK#2 -if (x[1] !== 1) { - $ERROR('#2: Array.prototype[1] = 1; x = [0]; x.length = 2; x.pop(); x[1] === 1. Actual: ' + (x[1])); -} - -Object.prototype[1] = 1; -Object.prototype.length = 2; -Object.prototype.pop = Array.prototype.pop; -x = {0:0}; - -//CHECK#3 -var pop = x.pop(); -if (pop !== 1) { - $ERROR('#3: Object.prototype[1] = 1; Object.prototype.length = 2; Object.prototype.pop = Array.prototype.pop; x = {0:0}; x.pop() === 1. Actual: ' + (pop)); -} - -//CHECK#4 -if (x[1] !== 1) { - $ERROR('#4: Object.prototype[1] = 1; Object.prototype.length = 2; Object.prototype.pop = Array.prototype.pop; x = {0:0}; x.pop(); x[1] === 1. Actual: ' + (x[1])); -} - -//CHECK#6 -if (x.length !== 1) { - $ERROR('#6: Object.prototype[1] = 1; Object.prototype.length = 2; Object.prototype.pop = Array.prototype.pop; x = {0:0}; x.pop(); x.length === 1. Actual: ' + (x.length)); -} - -//CHECK#7 -delete x.length; -if (x.length !== 2) { - $ERROR('#7: Object.prototype[1] = 1; Object.prototype.length = 2; Object.prototype.pop = Array.prototype.pop; x = {0:0}; x.pop(); delete x; x.length === 2. Actual: ' + (x.length)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.6_Array_prototype_pop/S15.4.4.6_A4_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.6_Array_prototype_pop/S15.4.4.6_A4_T2.js deleted file mode 100644 index ba3836110..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.6_Array_prototype_pop/S15.4.4.6_A4_T2.js +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.6_A4_T2; - * @section: 15.4.4.6, 8.6.2.1; - * @assertion: [[Get]], [[Delete]] from not an inherited property; - * @description: [[Prototype]] of Array instance is Array.prototype, [[Prototype] of Array.prototype is Object.prototype; -*/ - -Array.prototype[1] = -1; -x = [0,1]; -x.length = 2; - -//CHECK#1 -var pop = x.pop(); -if (pop !== 1) { - $ERROR('#1: Array.prototype[1] = -1; x = [0,1]; x.length = 2; x.pop() === 1. Actual: ' + (pop)); -} - -//CHECK#2 -if (x[1] !== -1) { - $ERROR('#2: Array.prototype[1] = -1; x = [0,1]; x.length = 2; x.pop(); x[1] === -1. Actual: ' + (x[1])); -} - -Object.prototype[1] = -1; -Object.prototype.length = 2; -Object.prototype.pop = Array.prototype.pop; -x = {0:0,1:1}; - -//CHECK#3 -var pop = x.pop(); -if (pop !== 1) { - $ERROR('#3: Object.prototype[1] = -1; Object.prototype.length = 2; Object.prototype.pop = Array.prototype.pop; x = {0:0,1:1}; x.pop() === 1. Actual: ' + (pop)); -} - -//CHECK#4 -if (x[1] !== -1) { - $ERROR('#4: Object.prototype[1] = -1; Object.prototype.length = 2; Object.prototype.pop = Array.prototype.pop; x = {0:0,1:1}; x.pop(); x[1] === -1. Actual: ' + (x[1])); -} - -//CHECK#6 -if (x.length !== 1) { - $ERROR('#6: Object.prototype[1] = -1; Object.prototype.length = 2; Object.prototype.pop = Array.prototype.pop; x = {0:0,1:1}; x.pop(); x.length === 1. Actual: ' + (x.length)); -} - -//CHECK#7 -delete x.length; -if (x.length !== 2) { - $ERROR('#7: Object.prototype[1] = -1; Object.prototype.length = 2; Object.prototype.pop = Array.prototype.pop; x = {0:0,1:1}; x.pop(); delete x; x.length === 2. Actual: ' + (x.length)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.6_Array_prototype_pop/S15.4.4.6_A5.1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.6_Array_prototype_pop/S15.4.4.6_A5.1.js deleted file mode 100644 index 5f451a8fc..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.6_Array_prototype_pop/S15.4.4.6_A5.1.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.6_A5.1; -* @section: 15.4.4.6, 15.2.4.7, 12.6.4; -* @assertion: The length property of pop has the attribute DontEnum; -* @description: Checking use propertyIsEnumerable, for-in; -*/ - - -//CHECK#1 -if (Array.prototype.pop.propertyIsEnumerable('length') !== false) { - $ERROR('#1: Array.prototype.pop.propertyIsEnumerable(\'length\') === false. Actual: ' + (Array.prototype.pop.propertyIsEnumerable('length'))); -} - -//CHECK#2 -result = true; -for (p in Array.pop){ - if (p === "length") { - result = false; - } -} - -if (result !== true) { - $ERROR('#2: result = true; for (p in Array.pop) { if (p === "length") result = false; } result === true;'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.6_Array_prototype_pop/S15.4.4.6_A5.2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.6_Array_prototype_pop/S15.4.4.6_A5.2.js deleted file mode 100644 index d8118c5be..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.6_Array_prototype_pop/S15.4.4.6_A5.2.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.6_A5.2; -* @section: 15.4.4.6, 15.2.4.5, 11.4.1; -* @assertion: The length property of pop has the attribute DontDelete; -* @description: Checking use hasOwnProperty, delete; -*/ - -//CHECK#1 -if (Array.prototype.pop.hasOwnProperty('length') !== true) { - $FAIL('#1: Array.prototype.pop.hasOwnProperty(\'length\') === true. Actual: ' + (Array.prototype.pop.hasOwnProperty('length'))); -} - -delete Array.prototype.pop.length; - -//CHECK#2 -if (Array.prototype.pop.hasOwnProperty('length') !== true) { - $ERROR('#2: delete Array.prototype.pop.length; Array.prototype.pop.hasOwnProperty(\'length\') === true. Actual: ' + (Array.prototype.pop.hasOwnProperty('length'))); -} - -//CHECK#3 -if (Array.prototype.pop.length === undefined) { - $ERROR('#3: delete Array.prototype.pop.length; Array.prototype.pop.length !== undefined'); -} - - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.6_Array_prototype_pop/S15.4.4.6_A5.3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.6_Array_prototype_pop/S15.4.4.6_A5.3.js deleted file mode 100644 index f8fbf2fe9..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.6_Array_prototype_pop/S15.4.4.6_A5.3.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.6_A5.3; -* @section: 15.4.4.6; -* @assertion: The length property of pop has the attribute ReadOnly; -* @description: Checking if varying the length property fails; -*/ - -//CHECK#1 -x = Array.prototype.pop.length; -Array.prototype.pop.length = Infinity; -if (Array.prototype.pop.length !== x) { - $ERROR('#1: x = Array.prototype.pop.length; Array.prototype.pop.length = Infinity; Array.prototype.pop.length === x. Actual: ' + (Array.prototype.pop.length)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.6_Array_prototype_pop/S15.4.4.6_A5.4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.6_Array_prototype_pop/S15.4.4.6_A5.4.js deleted file mode 100644 index fd6ba7a0f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.6_Array_prototype_pop/S15.4.4.6_A5.4.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.6_A5.4; -* @section: 15.4.4.6; -* @assertion: The length property of pop is 0; -* @description: pop.length === 1; -*/ - -//CHECK#1 -if (Array.prototype.pop.length !== 0) { - $ERROR('#1: Array.prototype.pop.length === 0. Actual: ' + (Array.prototype.pop.length)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.6_Array_prototype_pop/S15.4.4.6_A5.5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.6_Array_prototype_pop/S15.4.4.6_A5.5.js deleted file mode 100644 index cdb944579..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.6_Array_prototype_pop/S15.4.4.6_A5.5.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.6_A5.5; -* @section: 15.4.4.6, 15.2.4.7, 12.6.4; -* @assertion: The pop property of Array has the attribute DontEnum; -* @description: Checking use propertyIsEnumerable, for-in; -*/ - - -//CHECK#1 -if (Array.propertyIsEnumerable('pop') !== false) { - $ERROR('#1: Array.propertyIsEnumerable(\'pop\') === false. Actual: ' + (Array.propertyIsEnumerable('pop'))); -} - -//CHECK#2 -result = true; -for (p in Array){ - if (p === "pop") { - result = false; - } -} - -if (result !== true) { - $ERROR('#2: result = true; for (p in Array) { if (p === "pop") result = false; } result === true;'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.6_Array_prototype_pop/S15.4.4.6_A5.6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.6_Array_prototype_pop/S15.4.4.6_A5.6.js deleted file mode 100644 index e1e256d3c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.6_Array_prototype_pop/S15.4.4.6_A5.6.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.6_A5.6; -* @section: 15.4.4.6; -* @assertion: The pop property of Array has not prototype property; -* @description: Checking Array.prototype.pop.prototype; -*/ - -//CHECK#1 -if (Array.prototype.pop.prototype !== undefined) { - $ERROR('#1: Array.prototype.pop.prototype === undefined. Actual: ' + (Array.prototype.pop.prototype)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.6_Array_prototype_pop/S15.4.4.6_A5.7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.6_Array_prototype_pop/S15.4.4.6_A5.7.js deleted file mode 100644 index e811cea9f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.6_Array_prototype_pop/S15.4.4.6_A5.7.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.6_A5.7; -* @section: 15.4.4.6, 11.2.2; -* @assertion: The pop property of Array can't be used as constructor; -* @description: If property does not implement the internal [[Construct]] method, throw a TypeError exception; -*/ - -//CHECK#1 - -try { - new Array.prototype.pop(); - $ERROR('#1.1: new Array.prototype.pop() throw TypeError. Actual: ' + (new Array.prototype.pop())); -} catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1.2: new Array.prototype.pop() throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.7_Array_prototype_push/S15.4.4.7_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.7_Array_prototype_push/S15.4.4.7_A1_T1.js deleted file mode 100644 index 43cfa6f4f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.7_Array_prototype_push/S15.4.4.7_A1_T1.js +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.7_A1_T1; - * @section: 15.4.4.7; - * @assertion: The arguments are appended to the end of the array, in - * the order in which they appear. The new length of the array is returned - * as the result of the call; - * @description: Checking case when push is given no arguments or one argument; -*/ - -//CHECK#1 -x = new Array(); -var push = x.push(1); -if (push !== 1) { - $ERROR('#1: x = new Array(); x.push(1) === 1. Actual: ' + (push)); -} - -//CHECK#2 -if (x[0] !== 1) { - $ERROR('#2: x = new Array(); x.push(1); x[0] === 1. Actual: ' + (x[0])); -} - -//CHECK#3 -var push = x.push(); -if (push !== 1) { - $ERROR('#3: x = new Array(); x.push(1); x.push() === 1. Actual: ' + (push)); -} - -//CHECK#4 -if (x[1] !== undefined) { - $ERROR('#4: x = new Array(); x.push(1); x.push(); x[1] === unedfined. Actual: ' + (x[1])); -} - -//CHECK#5 -var push = x.push(-1); -if (push !== 2) { - $ERROR('#5: x = new Array(); x.push(1); x.push(); x.push(-1) === 2. Actual: ' + (push)); -} - -//CHECK#6 -if (x[1] !== -1) { - $ERROR('#6: x = new Array(); x.push(1); x.push(-1); x[1] === -1. Actual: ' + (x[1])); -} - -//CHECK#7 -if (x.length !== 2) { - $ERROR('#7: x = new Array(); x.push(1); x.push(); x.push(-1); x.length === 2. Actual: ' + (x.length)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.7_Array_prototype_push/S15.4.4.7_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.7_Array_prototype_push/S15.4.4.7_A1_T2.js deleted file mode 100644 index 082002622..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.7_Array_prototype_push/S15.4.4.7_A1_T2.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.7_A1_T2; - * @section: 15.4.4.7; - * @assertion: The arguments are appended to the end of the array, in - * the order in which they appear. The new length of the array is returned - * as the result of the call; - * @description: Checking case when push is given many arguments; -*/ - -//CHECK#1 -x = []; -if (x.length !== 0) { - $ERROR('#1: x = []; x.length === 0. Actual: ' + (x.length)); -} - -//CHECK#2 -x[0] = 0; -var push = x.push(true, Number.POSITIVE_INFINITY, "NaN", "1", -1); -if (push !== 6) { - $ERROR('#2: x = []; x[0] = 0; x.push(true, Number.POSITIVE_INFINITY, "NaN", "1", -1) === 6. Actual: ' + (push)); -} - -//CHECK#3 -if (x[0] !== 0) { - $ERROR('#3: x = []; x[0] = 0; x.push(true, Number.POSITIVE_INFINITY, "NaN", "1", -1); x[0] === 0. Actual: ' + (x[0])); -} - -//CHECK#4 -if (x[1] !== true) { - $ERROR('#4: x = []; x[0] = 0; x.push(true, Number.POSITIVE_INFINITY, "NaN", "1", -1); x[1] === true. Actual: ' + (x[1])); -} - -//CHECK#5 -if (x[2] !== Number.POSITIVE_INFINITY) { - $ERROR('#5: x = []; x[0] = 0; x.push(true, Number.POSITIVE_INFINITY, "NaN", "1", -1); x[2] === Number.POSITIVE_INFINITY. Actual: ' + (x[2])); -} - -//CHECK#6 -if (x[3] !== "NaN") { - $ERROR('#6: x = []; x[0] = 0; x.push(true, Number.POSITIVE_INFINITY, "NaN", "1", -1); x[3] === "NaN". Actual: ' + (x[3])); -} - -//CHECK#7 -if (x[4] !== "1") { - $ERROR('#7: x = []; x[0] = 0; x.push(true, Number.POSITIVE_INFINITY, "NaN", "1", -1); x[4] === "1". Actual: ' + (x[4])); -} - -//CHECK#8 -if (x[5] !== -1) { - $ERROR('#8: x = []; x[0] = 0; x.push(true, Number.POSITIVE_INFINITY, "NaN", "1", -1); x[5] === -1. Actual: ' + (x[5])); -} - -//CHECK#9 -if (x.length !== 6) { - $ERROR('#9: x = []; x[0] = 0; x.push(true, Number.POSITIVE_INFINITY, "NaN", "1", -1); x.length === 6. Actual: ' + (x.length)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.7_Array_prototype_push/S15.4.4.7_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.7_Array_prototype_push/S15.4.4.7_A2_T1.js deleted file mode 100644 index f2439230f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.7_Array_prototype_push/S15.4.4.7_A2_T1.js +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.7_A2_T1; - * @section: 15.4.4.7; - * @assertion: The push function is intentionally generic. - * It does not require that its this value be an Array object; - * @description: The arguments are appended to the end of the array, in - * the order in which they appear. The new length of the array is returned - * as the result of the call; -*/ - -var obj = {}; -obj.push = Array.prototype.push; - -if (obj.length !== undefined) { - $ERROR('#0: var obj = {}; obj.length === undefined. Actual: ' + (obj.length)); -} else { - //CHECK#1 - var push = obj.push(-1); -if (push !== 1) { - $ERROR('#1: var obj = {}; obj.push = Array.prototype.push; obj.push(-1) === 1. Actual: ' + (push)); - } - //CHECK#2 - if (obj.length !== 1) { - $ERROR('#2: var obj = {}; obj.push = Array.prototype.push; obj.push(-1); obj.length === 1. Actual: ' + (obj.length)); - } - //CHECK#3 - if (obj["0"] !== -1) { - $ERROR('#3: var obj = {}; obj.push = Array.prototype.push; obj.push(-1); obj["0"] === -1. Actual: ' + (obj["0"])); - } -} - -//CHECK#4 -obj.length = undefined; -var push = obj.push(-4); -if (push !== 1) { - $ERROR('#4: var obj = {}; obj.length = undefined; obj.push = Array.prototype.push; obj.push(-4) === 1. Actual: ' + (push)); -} - -//CHECK#5 -if (obj.length !== 1) { - $ERROR('#5: var obj = {}; obj.length = undefined; obj.push = Array.prototype.push; obj.push(-4); obj.length === 1. Actual: ' + (obj.length)); -} - -//CHECK#6 -if (obj["0"] !== -4) { - $ERROR('#6: var obj = {}; obj.length = undefined; obj.push = Array.prototype.push; obj.push(-4); obj["0"] === -4. Actual: ' + (obj["0"])); -} - -//CHECK#7 -obj.length = null -var push = obj.push(-7); -if (push !== 1) { - $ERROR('#7: var obj = {}; obj.length = null; obj.push = Array.prototype.push; obj.push(-7) === 1. Actual: ' + (push)); -} - -//CHECK#8 -if (obj.length !== 1) { - $ERROR('#8: var obj = {}; obj.length = null; obj.push = Array.prototype.push; obj.push(-7); obj.length === 1. Actual: ' + (obj.length)); -} - -//CHECK#9 -if (obj["0"] !== -7) { - $ERROR('#9: var obj = {}; obj.length = null; obj.push = Array.prototype.push; obj.push(-7); obj["0"] === -7. Actual: ' + (obj["0"])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.7_Array_prototype_push/S15.4.4.7_A2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.7_Array_prototype_push/S15.4.4.7_A2_T2.js deleted file mode 100644 index 27a08dfeb..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.7_Array_prototype_push/S15.4.4.7_A2_T2.js +++ /dev/null @@ -1,117 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.7_A2_T2; - * @section: 15.4.4.7; - * @assertion: The push function is intentionally generic. - * It does not require that its this value be an Array object; - * @description: The arguments are appended to the end of the array, in - * the order in which they appear. The new length of the array is returned - * as the result of the call; -*/ - -var obj = {}; -obj.push = Array.prototype.push; - -//CHECK#1 -obj.length = NaN; -var push = obj.push(-1); -if (push !== 1) { - $ERROR('#1: var obj = {}; obj.length = NaN; obj.push = Array.prototype.push; obj.push(-1) === 1. Actual: ' + (push)); -} - -//CHECK#2 -if (obj.length !== 1) { - $ERROR('#2: var obj = {}; obj.length = NaN; obj.push = Array.prototype.push; obj.push(-1); obj.length === 1. Actual: ' + (obj.length)); -} - -//CHECK#3 -if (obj["0"] !== -1) { - $ERROR('#3: var obj = {}; obj.length = NaN; obj.push = Array.prototype.push; obj.push(-1); obj["0"] === -1. Actual: ' + (obj["0"])); -} - -//CHECK#4 -obj.length = Number.POSITIVE_INFINITY; -var push = obj.push(-4); -if (push !== 1) { - $ERROR('#4: var obj = {}; obj.length = Number.POSITIVE_INFINITY; obj.push = Array.prototype.push; obj.push(-4) === 1. Actual: ' + (push)); -} - -//CHECK#5 -if (obj.length !== 1) { - $ERROR('#6: var obj = {}; obj.length = Number.POSITIVE_INFINITY; obj.push = Array.prototype.push; obj.push(-4); obj.length === 1. Actual: ' + (obj.length)); -} - -//CHECK#6 -if (obj["0"] !== -4) { - $ERROR('#6: var obj = {}; obj.length = Number.POSITIVE_INFINITY; obj.push = Array.prototype.push; obj.push(-4); obj["0"] === -4. Actual: ' + (obj["0"])); -} - -//CHECK#7 -obj.length = Number.NEGATIVE_INFINITY; -var push = obj.push(-7); -if (push !== 1) { - $ERROR('#7: var obj = {}; obj.length = Number.NEGATIVE_INFINITY; obj.push = Array.prototype.push; obj.push(-7) === 1. Actual: ' + (push)); -} - -//CHECK#8 -if (obj.length !== 1) { - $ERROR('#8: var obj = {}; obj.length = Number.NEGATIVE_INFINITY; obj.push = Array.prototype.push; obj.push(-7); obj.length === 1. Actual: ' + (obj.length)); -} - -//CHECK#9 -if (obj["0"] !== -7) { - $ERROR('#9: var obj = {}; obj.length = Number.NEGATIVE_INFINITY; obj.push = Array.prototype.push; obj.push(-7); obj["0"] === -7. Actual: ' + (obj["0"])); -} - -//CHECK#10 -obj.length = 0.5; -var push = obj.push(-10); -if (push !== 1) { - $ERROR('#10: var obj = {}; obj.length = 0.5; obj.push = Array.prototype.push; obj.push(-10) === 1. Actual: ' + (push)); -} - -//CHECK#11 -if (obj.length !== 1) { - $ERROR('#11: var obj = {}; obj.length = 0.5; obj.push = Array.prototype.push; obj.push(-10); obj.length === 1. Actual: ' + (obj.length)); -} - -//CHECK#12 -if (obj["0"] !== -10) { - $ERROR('#12: var obj = {}; obj.length = 0.5; obj.push = Array.prototype.push; obj.push(-10); obj["0"] === -10. Actual: ' + (obj["0"])); -} - -//CHECK#13 -obj.length = 1.5; -var push = obj.push(-13); -if (push !== 2) { - $ERROR('#13: var obj = {}; obj.length = 1.5; obj.push = Array.prototype.push; obj.push(-13) === 2. Actual: ' + (push)); -} - -//CHECK#14 -if (obj.length !== 2) { - $ERROR('#14: var obj = {}; obj.length = 1.5; obj.push = Array.prototype.push; obj.push(-13); obj.length === 2. Actual: ' + (obj.length)); -} - -//CHECK#15 -if (obj["1"] !== -13) { - $ERROR('#15: var obj = {}; obj.length = 1.5; obj.push = Array.prototype.push; obj.push(-13); obj["1"] === -13. Actual: ' + (obj["1"])); -} - -//CHECK#16 -obj.length = new Number(0); -var push = obj.push(-16); -if (push !== 1) { - $ERROR('#16: var obj = {}; obj.length = new Number(0); obj.push = Array.prototype.push; obj.push(-16) === 1. Actual: ' + (push)); -} - -//CHECK#17 -if (obj.length !== 1) { - $ERROR('#17: var obj = {}; obj.length = new Number(0); obj.push = Array.prototype.push; obj.push(-16); obj.length === 1. Actual: ' + (obj.length)); -} - -//CHECK#18 -if (obj["0"] !== -16) { - $ERROR('#18: var obj = {}; obj.length = new Number(0); obj.push = Array.prototype.push; obj.push(-16); obj["0"] === -16. Actual: ' + (obj["0"])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.7_Array_prototype_push/S15.4.4.7_A2_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.7_Array_prototype_push/S15.4.4.7_A2_T3.js deleted file mode 100644 index 63d330351..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.7_Array_prototype_push/S15.4.4.7_A2_T3.js +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.7_A2_T3; - * @section: 15.4.4.7; - * @assertion: The push function is intentionally generic. - * It does not require that its this value be an Array object; - * @description: Operator use ToNumber from length. - * If Type(value) is Object, evaluate ToPrimitive(value, Number); -*/ - -var obj = {}; -obj.push = Array.prototype.push; - -//CHECK#1 -obj.length = {valueOf: function() {return 3}}; -var push = obj.push(); -if (push !== 3) { - $ERROR('#1: obj.length = {valueOf: function() {return 3}} obj.push() === 3. Actual: ' + (push)); -} - -//CHECK#2 -obj.length = {valueOf: function() {return 3}, toString: function() {return 1}}; -var push = obj.push(); -if (push !== 3) { - $ERROR('#0: obj.length = {valueOf: function() {return 3}, toString: function() {return 1}} obj.push() === 3. Actual: ' + (push)); -} - -//CHECK#3 -obj.length = {valueOf: function() {return 3}, toString: function() {return {}}}; -var push = obj.push(); -if (push !== 3) { - $ERROR('#1: obj.length = {valueOf: function() {return 3}, toString: function() {return {}}} obj.push() === 3. Actual: ' + (push)); -} - -//CHECK#4 -try { - - obj.length = {valueOf: function() {return 3}, toString: function() {throw "error"}}; - var push = obj.push(); -if (push !== 3) { - $ERROR('#4.1: obj.length = {valueOf: function() {return 3}, toString: function() {throw "error"}}; obj.push() === ",". Actual: ' + (push)); - } -} -catch (e) { - if (e === "error") { - $ERROR('#4.2: obj.length = {valueOf: function() {return 3}, toString: function() {throw "error"}}; obj.push() not throw "error"'); - } else { - $ERROR('#4.3: obj.length = {valueOf: function() {return 3}, toString: function() {throw "error"}}; obj.push() not throw Error. Actual: ' + (e)); - } -} - -//CHECK#5 -obj.length = {toString: function() {return 1}}; -var push = obj.push(); -if (push !== 1) { - $ERROR('#5: obj.length = {toString: function() {return 1}} obj.push() === 1. Actual: ' + (push)); -} - -//CHECK#6 -obj.length = {valueOf: function() {return {}}, toString: function() {return 1}} -var push = obj.push(); -if (push !== 1) { - $ERROR('#6: obj.length = {valueOf: function() {return {}}, toString: function() {return 1}} obj.push() === 1. Actual: ' + (push)); -} - -//CHECK#7 -try { - - obj.length = {valueOf: function() {throw "error"}, toString: function() {return 1}}; - var push = obj.push(); - $ERROR('#7.1: obj.length = {valueOf: function() {throw "error"}, toString: function() {return 1}}; obj.push() throw "error". Actual: ' + (push)); -} -catch (e) { - if (e !== "error") { - $ERROR('#7.2: obj.length = {valueOf: function() {throw "error"}, toString: function() {return 1}}; obj.push() throw "error". Actual: ' + (e)); - } -} - -//CHECK#8 -try { - - obj.length = {valueOf: function() {return {}}, toString: function() {return {}}}; - var push = obj.push(); - $ERROR('#8.1: obj.length = {valueOf: function() {return {}}, toString: function() {return {}}} obj.push() throw TypeError. Actual: ' + (push)); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#8.2: obj.length = {valueOf: function() {return {}}, toString: function() {return {}}} obj.push() throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.7_Array_prototype_push/S15.4.4.7_A3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.7_Array_prototype_push/S15.4.4.7_A3.js deleted file mode 100644 index 21cfa2dde..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.7_Array_prototype_push/S15.4.4.7_A3.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.7_A3; - * @section: 15.4.4.7; - * @assertion: Check ToUint32(length) for Array object; - * @description: If ToUint32(length) !== length, throw RangeError; -*/ - -x = []; -x.length = 4294967295; - -//CHECK#1 -var push = x.push(); -if (push !== 4294967295) { - $ERROR('#1: x = []; x.length = 4294967295; x.push() === 4294967295. Actual: ' + (push)); -} - -//CHECK#2 -try { - x.push("x"); - $ERROR('#2.1: x = []; x.length = 4294967295; x.push("x") throw RangeError. Actual: ' + (push)); -} catch(e) { - if ((e instanceof RangeError) !== true) { - $ERROR('#2.2: x = []; x.length = 4294967295; x.push("x") throw RangeError. Actual: ' + (e)); - } -} - -//CHECK#3 -if (x[4294967295] !== "x") { - $ERROR('#3: x = []; x.length = 4294967295; try {x.push("x")}catch(e){}; x[4294967295] === "x". Actual: ' + (x[4294967295])); -} - -//CHECK#4 -if (x.length !== 4294967295) { - $ERROR('#4: x = []; x.length = 4294967295; try {x.push("x")}catch(e){}; x.length === 4294967295. Actual: ' + (x.length)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.7_Array_prototype_push/S15.4.4.7_A4_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.7_Array_prototype_push/S15.4.4.7_A4_T1.js deleted file mode 100644 index a37dcb15e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.7_Array_prototype_push/S15.4.4.7_A4_T1.js +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.7_A4_T1; - * @section: 15.4.4.7; - * @assertion: Check ToUint32(length) for non Array objects; - * @description: length = 4294967296; -*/ - -var obj = {}; -obj.push = Array.prototype.push; -obj.length = 4294967296; - -//CHECK#1 -var push = obj.push("x", "y", "z"); -if (push !== 3) { - $ERROR('#1: var obj = {}; obj.push = Array.prototype.push; obj.length = 4294967296; obj.push("x", "y", "z") === 3. Actual: ' + (push)); -} - -//CHECK#2 -if (obj.length !== 3) { - $ERROR('#2: var obj = {}; obj.push = Array.prototype.push; obj.length = 4294967296; obj.push("x", "y", "z"); obj.length === 3. Actual: ' + (obj.length)); -} - -//CHECK#3 -if (obj[0] !== "x") { - $ERROR('#3: var obj = {}; obj.push = Array.prototype.push; obj.length = 4294967296; obj.push("x", "y", "z"); obj[0] === "x". Actual: ' + (obj[0])); -} - -//CHECK#4 -if (obj[1] !== "y") { - $ERROR('#4: var obj = {}; obj.push = Array.prototype.push; obj.length = 4294967296; obj.push("x", "y", "z"); obj[1] === "y". Actual: ' + (obj[1])); -} - -//CHECK#5 -if (obj[2] !== "z") { - $ERROR('#5: var obj = {}; obj.push = Array.prototype.push; obj.length = 4294967296; obj.push("x", "y", "z"); obj[2] === "z". Actual: ' + (obj[2])); -} - -var obj = {}; -obj.push = Array.prototype.push; -obj.length = 4294967296; - -//CHECK#6 -var push = obj.push(); -if (push !== 0) { - $ERROR('#6: var obj = {}; obj.push = Array.prototype.push; obj.length = 4294967296; obj.push() === 0. Actual: ' + (push)); -} - -//CHECK#7 -if (obj.length !== 0) { - $ERROR('#7: var obj = {}; obj.push = Array.prototype.push; obj.length = 4294967296; obj.push(); obj.length === 0. Actual: ' + (obj.length)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.7_Array_prototype_push/S15.4.4.7_A4_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.7_Array_prototype_push/S15.4.4.7_A4_T2.js deleted file mode 100644 index 819011129..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.7_Array_prototype_push/S15.4.4.7_A4_T2.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.7_A4_T2; - * @section: 15.4.4.7; - * @assertion: Check ToUint32(length) for non Array objects; - * @description: length = 4294967295; -*/ - -var obj = {}; -obj.push = Array.prototype.push; -obj.length = 4294967295; - -//CHECK#1 -var push = obj.push("x", "y", "z"); -if (push !== 4294967298) { - $ERROR('#1: var obj = {}; obj.push = Array.prototype.push; obj.length = 4294967295; obj.push("x", "y", "z") === 4294967298. Actual: ' + (push)); -} - -//CHECK#2 -if (obj.length !== 4294967298) { - $ERROR('#2: var obj = {}; obj.push = Array.prototype.push; obj.length = 4294967295; obj.push("x", "y", "z"); obj.length === 4294967298. Actual: ' + (obj.length)); -} - -//CHECK#3 -if (obj[4294967295] !== "x") { - $ERROR('#3: var obj = {}; obj.push = Array.prototype.push; obj.length = 4294967295; obj.push("x", "y", "z"); obj[4294967295] === "x". Actual: ' + (obj[4294967295])); -} - -//CHECK#4 -if (obj[4294967296] !== "y") { - $ERROR('#4: var obj = {}; obj.push = Array.prototype.push; obj.length = 4294967295; obj.push("x", "y", "z"); obj[4294967296] === "y". Actual: ' + (obj[4294967296])); -} - -//CHECK#5 -if (obj[4294967297] !== "z") { - $ERROR('#5: var obj = {}; obj.push = Array.prototype.push; obj.length = 4294967295; obj.push("x", "y", "z"); obj[4294967297] === "z". Actual: ' + (obj[4294967297])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.7_Array_prototype_push/S15.4.4.7_A4_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.7_Array_prototype_push/S15.4.4.7_A4_T3.js deleted file mode 100644 index 90434088f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.7_Array_prototype_push/S15.4.4.7_A4_T3.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.7_A4_T3; - * @section: 15.4.4.7; - * @assertion: Check ToUint32(length) for non Array objects; - * @description: length = -1; -*/ - -var obj = {}; -obj.push = Array.prototype.push; -obj.length = -1; - -//CHECK#1 -var push = obj.push("x", "y", "z"); -if (push !== 4294967298) { - $ERROR('#1: var obj = {}; obj.push = Array.prototype.push; obj.length = -1; obj.push("x", "y", "z") === 4294967298. Actual: ' + (push)); -} - -//CHECK#2 -if (obj.length !== 4294967298) { - $ERROR('#2: var obj = {}; obj.push = Array.prototype.push; obj.length = -1; obj.push("x", "y", "z"); obj.length === 4294967298. Actual: ' + (obj.length)); -} - -//CHECK#3 -if (obj[4294967295] !== "x") { - $ERROR('#3: var obj = {}; obj.push = Array.prototype.push; obj.length = -1; obj.push("x", "y", "z"); obj[4294967295] === "x". Actual: ' + (obj[4294967295])); -} - -//CHECK#4 -if (obj[4294967296] !== "y") { - $ERROR('#4: var obj = {}; obj.push = Array.prototype.push; obj.length = -1; obj.push("x", "y", "z"); obj[4294967296] === "y". Actual: ' + (obj[4294967296])); -} - -//CHECK#5 -if (obj[4294967297] !== "z") { - $ERROR('#5: var obj = {}; obj.push = Array.prototype.push; obj.length = -1; obj.push("x", "y", "z"); obj[4294967297] === "z". Actual: ' + (obj[4294967297])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.7_Array_prototype_push/S15.4.4.7_A5_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.7_Array_prototype_push/S15.4.4.7_A5_T1.js deleted file mode 100644 index ec252af1b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.7_Array_prototype_push/S15.4.4.7_A5_T1.js +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.7_A5_T1; - * @section: 15.4.4.7, 8.6.2.1; - * @assertion: [[Get]] from not an inherited property; - * @description: [[Prototype]] of Array instance is Array.prototype, [[Prototype] of Array.prototype is Object.prototype; -*/ - -Object.prototype[1] = -1; -Object.prototype.length = 1; -Object.prototype.push = Array.prototype.push; -x = {0:0}; - -//CHECK#1 -var push = x.push(1); -if (push !== 2) { - $ERROR('#1: Object.prototype[1] = 1; Object.prototype.length = -1; Object.prototype.push = Array.prototype.push; x = {0:0}; x.push(1) === 2. Actual: ' + (push)); -} - -//CHECK#2 -if (x.length !== 2) { - $ERROR('#2: Object.prototype[1] = 1; Object.prototype.length = -1; Object.prototype.push = Array.prototype.push; x = {0:0}; x.push(1); x.length === 2. Actual: ' + (x.length)); -} - -//CHECK#3 -if (x[1] !== 1) { - $ERROR('#3: Object.prototype[1] = 1; Object.prototype.length = -1; Object.prototype.push = Array.prototype.push; x = {0:0}; x.push(1); x[1] === 1. Actual: ' + (x[1])); -} - -//CHECK#4 -delete x[1]; -if (x[1] !== -1) { - $ERROR('#4: Object.prototype[1] = 1; Object.prototype.length = -1; Object.prototype.push = Array.prototype.push; x = {0:0}; x.push(1); delete x[1]; x[1] === -1. Actual: ' + (x[1])); -} - -//CHECK#5 -delete x.length; -if (x.length !== 1) { - $ERROR('#5: Object.prototype[1] = 1; Object.prototype.length = -1; Object.prototype.push = Array.prototype.push; x = {0:0}; delete x; x.push(1); x.length === 1. Actual: ' + (x.length)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.7_Array_prototype_push/S15.4.4.7_A6.1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.7_Array_prototype_push/S15.4.4.7_A6.1.js deleted file mode 100644 index b08f10a18..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.7_Array_prototype_push/S15.4.4.7_A6.1.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.7_A6.1; -* @section: 15.4.4.7, 15.2.4.7, 12.6.4; -* @assertion: The length property of push has the attribute DontEnum; -* @description: Checking use propertyIsEnumerable, for-in; -*/ - - -//CHECK#1 -if (Array.prototype.push.propertyIsEnumerable('length') !== false) { - $ERROR('#1: Array.prototype.push.propertyIsEnumerable(\'length\') === false. Actual: ' + (Array.prototype.push.propertyIsEnumerable('length'))); -} - -//CHECK#2 -result = true; -for (p in Array.push){ - if (p === "length") { - result = false; - } -} - -if (result !== true) { - $ERROR('#2: result = true; for (p in Array.push) { if (p === "length") result = false; } result === true;'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.7_Array_prototype_push/S15.4.4.7_A6.2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.7_Array_prototype_push/S15.4.4.7_A6.2.js deleted file mode 100644 index c0504f9f6..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.7_Array_prototype_push/S15.4.4.7_A6.2.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.7_A6.2; -* @section: 15.4.4.7, 15.2.4.5, 11.4.1; -* @assertion: The length property of push has the attribute DontDelete; -* @description: Checking use hasOwnProperty, delete; -*/ - -//CHECK#1 -if (Array.prototype.push.hasOwnProperty('length') !== true) { - $FAIL('#1: Array.prototype.push.hasOwnProperty(\'length\') === true. Actual: ' + (Array.prototype.push.hasOwnProperty('length'))); -} - -delete Array.prototype.push.length; - -//CHECK#2 -if (Array.prototype.push.hasOwnProperty('length') !== true) { - $ERROR('#2: delete Array.prototype.push.length; Array.prototype.push.hasOwnProperty(\'length\') === true. Actual: ' + (Array.prototype.push.hasOwnProperty('length'))); -} - -//CHECK#3 -if (Array.prototype.push.length === undefined) { - $ERROR('#3: delete Array.prototype.push.length; Array.prototype.push.length !== undefined'); -} - - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.7_Array_prototype_push/S15.4.4.7_A6.3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.7_Array_prototype_push/S15.4.4.7_A6.3.js deleted file mode 100644 index f41f87f2a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.7_Array_prototype_push/S15.4.4.7_A6.3.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.7_A6.3; -* @section: 15.4.4.7; -* @assertion: The length property of push has the attribute ReadOnly; -* @description: Checking if varying the length property fails; -*/ - -//CHECK#1 -x = Array.prototype.push.length; -Array.prototype.push.length = Infinity; -if (Array.prototype.push.length !== x) { - $ERROR('#1: x = Array.prototype.push.length; Array.prototype.push.length = Infinity; Array.prototype.push.length === x. Actual: ' + (Array.prototype.push.length)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.7_Array_prototype_push/S15.4.4.7_A6.4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.7_Array_prototype_push/S15.4.4.7_A6.4.js deleted file mode 100644 index efd67c24d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.7_Array_prototype_push/S15.4.4.7_A6.4.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.7_A6.4; -* @section: 15.4.4.7; -* @assertion: The length property of push is 1; -* @description: push.length === 1; -*/ - -//CHECK#1 -if (Array.prototype.push.length !== 1) { - $ERROR('#1: Array.prototype.push.length === 1. Actual: ' + (Array.prototype.push.length)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.7_Array_prototype_push/S15.4.4.7_A6.5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.7_Array_prototype_push/S15.4.4.7_A6.5.js deleted file mode 100644 index 965cb6677..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.7_Array_prototype_push/S15.4.4.7_A6.5.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.7_A6.5; -* @section: 15.4.4.7, 15.2.4.7, 12.6.4; -* @assertion: The push property of Array has the attribute DontEnum; -* @description: Checking use propertyIsEnumerable, for-in; -*/ - - -//CHECK#1 -if (Array.propertyIsEnumerable('push') !== false) { - $ERROR('#1: Array.propertyIsEnumerable(\'push\') === false. Actual: ' + (Array.propertyIsEnumerable('push'))); -} - -//CHECK#2 -result = true; -for (p in Array){ - if (p === "push") { - result = false; - } -} - -if (result !== true) { - $ERROR('#2: result = true; for (p in Array) { if (p === "push") result = false; } result === true;'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.7_Array_prototype_push/S15.4.4.7_A6.6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.7_Array_prototype_push/S15.4.4.7_A6.6.js deleted file mode 100644 index 1158f4072..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.7_Array_prototype_push/S15.4.4.7_A6.6.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.7_A6.6; -* @section: 15.4.4.7; -* @assertion: The push property of Array has not prototype property; -* @description: Checking Array.prototype.push.prototype; -*/ - -//CHECK#1 -if (Array.prototype.push.prototype !== undefined) { - $ERROR('#1: Array.prototype.push.prototype === undefined. Actual: ' + (Array.prototype.push.prototype)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.7_Array_prototype_push/S15.4.4.7_A6.7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.7_Array_prototype_push/S15.4.4.7_A6.7.js deleted file mode 100644 index 63d9e1a83..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.7_Array_prototype_push/S15.4.4.7_A6.7.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.7_A6.7; -* @section: 15.4.4.7, 11.2.2; -* @assertion: The push property of Array can't be used as constructor; -* @description: If property does not implement the internal [[Construct]] method, throw a TypeError exception; -*/ - -//CHECK#1 - -try { - new Array.prototype.push(); - $ERROR('#1.1: new Array.prototype.push() throw TypeError. Actual: ' + (new Array.prototype.push())); -} catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1.2: new Array.prototype.push() throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.8_Array_prototype_reverse/S15.4.4.8_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.8_Array_prototype_reverse/S15.4.4.8_A1_T1.js deleted file mode 100644 index b218efd55..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.8_Array_prototype_reverse/S15.4.4.8_A1_T1.js +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.8_A1_T1; - * @section: 15.4.4.8; - * @assertion: The elements of the array are rearranged so as to reverse their order. - * The object is returned as the result of the call; - * @description: Checking case when reverse is given no arguments or one argument; -*/ - -//CHECK#1 -x = []; -var reverse = x.reverse(); -if (reverse !== x) { - $ERROR('#1: x = []; x.reverse() === x. Actual: ' + (reverse)); -} - -//CHECK#2 -x = []; -x[0] = 1; -var reverse = x.reverse(); -if (reverse !== x) { - $ERROR('#2: x = []; x[0] = 1; x.reverse() === x. Actual: ' + (reverse)); -} - -//CHECK#3 -x = new Array(1,2); -var reverse = x.reverse(); -if (reverse !== x) { - $ERROR('#3: x = new Array(1,2); x.reverse() === x. Actual: ' + (reverse)); -} - -//CHECK#4 -if (x[0] !== 2) { - $ERROR('#4: x = new Array(1,2); x.reverse(); x[0] === 2. Actual: ' + (x[0])); -} - -//CHECK#5 -if (x[1] !== 1) { - $ERROR('#5: x = new Array(1,2); x.reverse(); x[1] === 1. Actual: ' + (x[1])); -} - -//CHECK#6 -if (x.length !== 2) { - $ERROR('#6: x = new Array(1,2); x.reverse(); x.length === 2. Actual: ' + (x.length)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.8_Array_prototype_reverse/S15.4.4.8_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.8_Array_prototype_reverse/S15.4.4.8_A1_T2.js deleted file mode 100644 index 702c11d4c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.8_Array_prototype_reverse/S15.4.4.8_A1_T2.js +++ /dev/null @@ -1,127 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.8_A1_T2; - * @section: 15.4.4.8; - * @assertion: The elements of the array are rearranged so as to reverse their order. - * The object is returned as the result of the call; - * @description: Checking this algorithm, elements are objects and primitives; -*/ - -//CHECK#1 -x = []; -x[0] = true; -x[2] = Infinity; -x[4] = undefined; -x[5] = undefined; -x[8] = "NaN"; -x[9] = "-1"; - -var reverse = x.reverse(); -if (reverse !== x) { - $ERROR('#1: x = []; x[0] = true; x[2] = Infinity; x[4] = undefined; x[5] = undefined; x[8] = "NaN"; x[9] = "-1"; x.reverse() === x. Actual: ' + (reverse)); -} - -//CHECK#2 -if (x[0] !== "-1") { - $ERROR('#2: x = []; x[0] = true; x[2] = Infinity; x[4] = undefined; x[5] = undefined; x[8] = "NaN"; x[9] = "-1"; x.reverse(); x[0] === "-1". Actual: ' + (x[0])); -} - -//CHECK#3 -if (x[1] !== "NaN") { - $ERROR('#3: x = []; x[0] = true; x[2] = Infinity; x[4] = undefined; x[5] = undefined; x[8] = "NaN"; x[9] = "-1"; x.reverse(); x[1] === "NaN". Actual: ' + (x[1])); -} - -//CHECK#4 -if (x[2] !== undefined) { - $ERROR('#4: x = []; x[0] = true; x[2] = Infinity; x[4] = undefined; x[5] = undefined; x[8] = "NaN"; x[9] = "-1"; x.reverse(); x[2] === undefined. Actual: ' + (x[2])); -} - -//CHECK#5 -if (x[3] !== undefined) { - $ERROR('#5: x = []; x[0] = true; x[2] = Infinity; x[4] = undefined; x[5] = undefined; x[8] = "NaN"; x[9] = "-1"; x.reverse(); x[3] === undefined. Actual: ' + (x[3])); -} - -//CHECK#6 -if (x[4] !== undefined) { - $ERROR('#6: x = []; x[0] = true; x[2] = Infinity; x[4] = undefined; x[5] = undefined; x[8] = "NaN"; x[9] = "-1"; x.reverse(); x[4] === undefined. Actual: ' + (x[4])); -} - -//CHECK#7 -if (x[5] !== undefined) { - $ERROR('#7: x = []; x[0] = true; x[2] = Infinity; x[4] = undefined; x[5] = undefined; x[8] = "NaN"; x[9] = "-1"; x.reverse(); x[5] === undefined. Actual: ' + (x[5])); -} - -//CHECK#8 -if (x[6] !== undefined) { - $ERROR('#8: x = []; x[0] = true; x[2] = Infinity; x[4] = undefined; x[5] = undefined; x[8] = "NaN"; x[9] = "-1"; x.reverse(); x[6] === undefined. Actual: ' + (x[6])); -} - -//CHECK#9 -if (x[7] !== Infinity) { - $ERROR('#9: x = []; x[0] = true; x[2] = Infinity; x[4] = undefined; x[5] = undefined; x[8] = "NaN"; x[9] = "-1"; x.reverse(); x[7] === Infinity. Actual: ' + (x[7])); -} - -//CHECK#10 -if (x[8] !== undefined) { - $ERROR('#10: x = []; x[0] = true; x[2] = Infinity; x[4] = undefined; x[5] = undefined; x[8] = "NaN"; x[9] = "-1"; x.reverse(); x[8] === undefined. Actual: ' + (x[8])); -} - -//CHECK#11 -if (x[9] !== true) { - $ERROR('#11: x = []; x[0] = true; x[2] = Infinity; x[4] = undefined; x[5] = undefined; x[8] = "NaN"; x[9] = "-1"; x.reverse(); x[9] === true. Actual: ' + (x[9])); -} - -x.length = 9; - -var reverse = x.reverse(); -if (reverse !== x) { - $ERROR('#1: x = []; x[0] = true; x[2] = Infinity; x[4] = undefined; x[5] = undefined; x[8] = "NaN"; x[9] = "-1"; x.reverse(); x.length = 9; x.reverse() === x. Actual: ' + (reverse)); -} - -//CHECK#12 -if (x[0] !== undefined) { - $ERROR('#12: x = []; x[0] = true; x[2] = Infinity; x[4] = undefined; x[5] = undefined; x[8] = "NaN"; x[9] = "-1"; x.reverse(); x.length = 9; x.reverse(); x[0] === undefined. Actual: ' + (x[0])); -} - -//CHECK#13 -if (x[1] !== Infinity) { - $ERROR('#13: x = []; x[0] = true; x[2] = Infinity; x[4] = undefined; x[5] = undefined; x[8] = "NaN"; x[9] = "-1"; x.reverse(); x.length = 9; x.reverse(); x[1] === Infinity. Actual: ' + (x[1])); -} - -//CHECK#14 -if (x[2] !== undefined) { - $ERROR('#14: x = []; x[0] = true; x[2] = Infinity; x[4] = undefined; x[5] = undefined; x[8] = "NaN"; x[9] = "-1"; x.reverse(); x.length = 9; x.reverse(); x[2] === undefined. Actual: ' + (x[2])); -} - -//CHECK#15 -if (x[3] !== undefined) { - $ERROR('#15: x = []; x[0] = true; x[2] = Infinity; x[4] = undefined; x[5] = undefined; x[8] = "NaN"; x[9] = "-1"; x.reverse(); x.length = 9; x.reverse(); x[3] === undefined. Actual: ' + (x[3])); -} - -//CHECK#16 -if (x[4] !== undefined) { - $ERROR('#16: x = []; x[0] = true; x[2] = Infinity; x[4] = undefined; x[5] = undefined; x[8] = "NaN"; x[9] = "-1"; x.reverse(); x.length = 9; x.reverse(); x[4] === undefined. Actual: ' + (x[4])); -} - -//CHECK#17 -if (x[5] !== undefined) { - $ERROR('#17: x = []; x[0] = true; x[2] = Infinity; x[4] = undefined; x[5] = undefined; x[8] = "NaN"; x[9] = "-1"; x.reverse(); x.length = 9; x.reverse(); x[5] === undefined. Actual: ' + (x[5])); -} - -//CHECK#18 -if (x[6] !== undefined) { - $ERROR('#18: x = []; x[0] = true; x[2] = Infinity; x[4] = undefined; x[5] = undefined; x[8] = "NaN"; x[9] = "-1"; x.reverse(); x.length = 9; x.reverse(); x[6] === undefined. Actual: ' + (x[6])); -} - -//CHECK#19 -if (x[7] !== "NaN") { - $ERROR('#19: x = []; x[0] = true; x[2] = Infinity; x[4] = undefined; x[5] = undefined; x[8] = "NaN"; x[9] = "-1"; x.reverse(); x.length = 9; x.reverse(); x[7] === "NaN". Actual: ' + (x[7])); -} - -//CHECK#20 -if (x[8] !== "-1") { - $ERROR('#20: x = []; x[0] = true; x[2] = Infinity; x[4] = undefined; x[5] = undefined; x[8] = "NaN"; x[9] = "-1"; x.reverse(); x.length = 9; x.reverse(); x[8] === "-1". Actual: ' + (x[8])); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.8_Array_prototype_reverse/S15.4.4.8_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.8_Array_prototype_reverse/S15.4.4.8_A2_T1.js deleted file mode 100644 index 19580f77b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.8_Array_prototype_reverse/S15.4.4.8_A2_T1.js +++ /dev/null @@ -1,129 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.8_A2_T1; - * @section: 15.4.4.8; - * @assertion: The reverse function is intentionally generic. - * It does not require that its this value be an Array object; - * @description: Checking this for Object object, elements are objects and primitives, length is integer; -*/ - -//CHECK#1 -var obj = {}; -obj.length = 10; -obj.reverse = Array.prototype.reverse; - -obj[0] = true; -obj[2] = Infinity; -obj[4] = undefined; -obj[5] = undefined; -obj[8] = "NaN"; -obj[9] = "-1"; - -var reverse = obj.reverse(); -if (reverse !== obj) { - $ERROR('#1: var obj = {}; obj.reverse = Array.prototype.reverse; obj.length = 10; obj[0] = true; obj[2] = Infinity; obj[4] = undefined; obj[5] = undefined; obj[8] = "NaN"; obj[9] = "-1"; obj.reverse() === obj. Actual: ' + (reverse)); -} - -//CHECK#2 -if (obj[0] !== "-1") { - $ERROR('#2: var obj = {}; obj.reverse = Array.prototype.reverse; obj.length = 10; obj[0] = true; obj[2] = Infinity; obj[4] = undefined; obj[5] = undefined; obj[8] = "NaN"; obj[9] = "-1"; obj.reverse(); obj[0] === "-1". Actual: ' + (obj[0])); -} - -//CHECK#3 -if (obj[1] !== "NaN") { - $ERROR('#3: var obj = {}; obj.reverse = Array.prototype.reverse; obj.length = 10; obj[0] = true; obj[2] = Infinity; obj[4] = undefined; obj[5] = undefined; obj[8] = "NaN"; obj[9] = "-1"; obj.reverse(); obj[1] === "NaN". Actual: ' + (obj[1])); -} - -//CHECK#4 -if (obj[2] !== undefined) { - $ERROR('#4: var obj = {}; obj.reverse = Array.prototype.reverse; obj.length = 10; obj[0] = true; obj[2] = Infinity; obj[4] = undefined; obj[5] = undefined; obj[8] = "NaN"; obj[9] = "-1"; obj.reverse(); obj[2] === undefined. Actual: ' + (obj[2])); -} - -//CHECK#5 -if (obj[3] !== undefined) { - $ERROR('#5: var obj = {}; obj.reverse = Array.prototype.reverse; obj.length = 10; obj[0] = true; obj[2] = Infinity; obj[4] = undefined; obj[5] = undefined; obj[8] = "NaN"; obj[9] = "-1"; obj.reverse(); obj[3] === undefined. Actual: ' + (obj[3])); -} - -//CHECK#6 -if (obj[4] !== undefined) { - $ERROR('#6: var obj = {}; obj.reverse = Array.prototype.reverse; obj.length = 10; obj[0] = true; obj[2] = Infinity; obj[4] = undefined; obj[5] = undefined; obj[8] = "NaN"; obj[9] = "-1"; obj.reverse(); obj[4] === undefined. Actual: ' + (obj[4])); -} - -//CHECK#7 -if (obj[5] !== undefined) { - $ERROR('#7: var obj = {}; obj.reverse = Array.prototype.reverse; obj.length = 10; obj[0] = true; obj[2] = Infinity; obj[4] = undefined; obj[5] = undefined; obj[8] = "NaN"; obj[9] = "-1"; obj.reverse(); obj[5] === undefined. Actual: ' + (obj[5])); -} - -//CHECK#8 -if (obj[6] !== undefined) { - $ERROR('#8: var obj = {}; obj.reverse = Array.prototype.reverse; obj.length = 10; obj[0] = true; obj[2] = Infinity; obj[4] = undefined; obj[5] = undefined; obj[8] = "NaN"; obj[9] = "-1"; obj.reverse(); obj[6] === undefined. Actual: ' + (obj[6])); -} - -//CHECK#9 -if (obj[7] !== Infinity) { - $ERROR('#9: var obj = {}; obj.reverse = Array.prototype.reverse; obj.length = 10; obj[0] = true; obj[2] = Infinity; obj[4] = undefined; obj[5] = undefined; obj[8] = "NaN"; obj[9] = "-1"; obj.reverse(); obj[7] === Infinity. Actual: ' + (obj[7])); -} - -//CHECK#10 -if (obj[8] !== undefined) { - $ERROR('#10: var obj = {}; obj.reverse = Array.prototype.reverse; obj.length = 10; obj[0] = true; obj[2] = Infinity; obj[4] = undefined; obj[5] = undefined; obj[8] = "NaN"; obj[9] = "-1"; obj.reverse(); obj[8] === undefined. Actual: ' + (obj[8])); -} - -//CHECK#11 -if (obj[9] !== true) { - $ERROR('#11: var obj = {}; obj.reverse = Array.prototype.reverse; obj.length = 10; obj[0] = true; obj[2] = Infinity; obj[4] = undefined; obj[5] = undefined; obj[8] = "NaN"; obj[9] = "-1"; obj.reverse(); obj[9] === true. Actual: ' + (obj[9])); -} - -obj.length = 9; - -var reverse = obj.reverse(); -if (reverse !== obj) { - $ERROR('#1: var obj = {}; obj.reverse = Array.prototype.reverse; obj.length = 10; obj[0] = true; obj[2] = Infinity; obj[4] = undefined; obj[5] = undefined; obj[8] = "NaN"; obj[9] = "-1"; obj.reverse(); obj.length = 9; obj.reverse() === obj. Actual: ' + (reverse)); -} - -//CHECK#12 -if (obj[0] !== undefined) { - $ERROR('#12: var obj = {}; obj.reverse = Array.prototype.reverse; obj.length = 10; obj[0] = true; obj[2] = Infinity; obj[4] = undefined; obj[5] = undefined; obj[8] = "NaN"; obj[9] = "-1"; obj.reverse(); obj.length = 9; obj.reverse(); obj[0] === undefined. Actual: ' + (obj[0])); -} - -//CHECK#13 -if (obj[1] !== Infinity) { - $ERROR('#13: var obj = {}; obj.reverse = Array.prototype.reverse; obj.length = 10; obj[0] = true; obj[2] = Infinity; obj[4] = undefined; obj[5] = undefined; obj[8] = "NaN"; obj[9] = "-1"; obj.reverse(); obj.length = 9; obj.reverse(); obj[1] === Infinity. Actual: ' + (obj[1])); -} - -//CHECK#14 -if (obj[2] !== undefined) { - $ERROR('#14: var obj = {}; obj.reverse = Array.prototype.reverse; obj.length = 10; obj[0] = true; obj[2] = Infinity; obj[4] = undefined; obj[5] = undefined; obj[8] = "NaN"; obj[9] = "-1"; obj.reverse(); obj.length = 9; obj.reverse(); obj[2] === undefined. Actual: ' + (obj[2])); -} - -//CHECK#15 -if (obj[3] !== undefined) { - $ERROR('#15: var obj = {}; obj.reverse = Array.prototype.reverse; obj.length = 10; obj[0] = true; obj[2] = Infinity; obj[4] = undefined; obj[5] = undefined; obj[8] = "NaN"; obj[9] = "-1"; obj.reverse(); obj.length = 9; obj.reverse(); obj[3] === undefined. Actual: ' + (obj[3])); -} - -//CHECK#16 -if (obj[4] !== undefined) { - $ERROR('#16: var obj = {}; obj.reverse = Array.prototype.reverse; obj.length = 10; obj[0] = true; obj[2] = Infinity; obj[4] = undefined; obj[5] = undefined; obj[8] = "NaN"; obj[9] = "-1"; obj.reverse(); obj.length = 9; obj.reverse(); obj[4] === undefined. Actual: ' + (obj[4])); -} - -//CHECK#17 -if (obj[5] !== undefined) { - $ERROR('#17: var obj = {}; obj.reverse = Array.prototype.reverse; obj.length = 10; obj[0] = true; obj[2] = Infinity; obj[4] = undefined; obj[5] = undefined; obj[8] = "NaN"; obj[9] = "-1"; obj.reverse(); obj.length = 9; obj.reverse(); obj[5] === undefined. Actual: ' + (obj[5])); -} - -//CHECK#18 -if (obj[6] !== undefined) { - $ERROR('#18: var obj = {}; obj.reverse = Array.prototype.reverse; obj.length = 10; obj[0] = true; obj[2] = Infinity; obj[4] = undefined; obj[5] = undefined; obj[8] = "NaN"; obj[9] = "-1"; obj.reverse(); obj.length = 9; obj.reverse(); obj[6] === undefined. Actual: ' + (obj[6])); -} - -//CHECK#19 -if (obj[7] !== "NaN") { - $ERROR('#19: var obj = {}; obj.reverse = Array.prototype.reverse; obj.length = 10; obj[0] = true; obj[2] = Infinity; obj[4] = undefined; obj[5] = undefined; obj[8] = "NaN"; obj[9] = "-1"; obj.reverse(); obj.length = 9; obj.reverse(); obj[7] === "NaN". Actual: ' + (obj[7])); -} - -//CHECK#20 -if (obj[8] !== "-1") { - $ERROR('#20: var obj = {}; obj.reverse = Array.prototype.reverse; obj.length = 10; obj[0] = true; obj[2] = Infinity; obj[4] = undefined; obj[5] = undefined; obj[8] = "NaN"; obj[9] = "-1"; obj.reverse(); obj.length = 9; obj.reverse(); obj[8] === "-1". Actual: ' + (obj[8])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.8_Array_prototype_reverse/S15.4.4.8_A2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.8_Array_prototype_reverse/S15.4.4.8_A2_T2.js deleted file mode 100644 index 6a11f218b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.8_Array_prototype_reverse/S15.4.4.8_A2_T2.js +++ /dev/null @@ -1,129 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.8_A2_T2; - * @section: 15.4.4.8; - * @assertion: The reverse function is intentionally generic. - * It does not require that its this value be an Array object; - * @description: Checking this for Object object, elements are objects and primitives, length is not integer; -*/ - -//CHECK#1 -var obj = {}; -obj.length = 10.5; -obj.reverse = Array.prototype.reverse; - -obj[0] = true; -obj[2] = Infinity; -obj[4] = undefined; -obj[5] = undefined; -obj[8] = "NaN"; -obj[9] = "-1"; - -var reverse = obj.reverse(); -if (reverse !== obj) { - $ERROR('#1: var obj = {}; obj.reverse = Array.prototype.reverse; obj.length = 10.5; obj[0] = true; obj[2] = Infinity; obj[4] = undefined; obj[5] = undefined; obj[8] = "NaN"; obj[9] = "-1"; obj.reverse() === obj. Actual: ' + (reverse)); -} - -//CHECK#2 -if (obj[0] !== "-1") { - $ERROR('#2: var obj = {}; obj.reverse = Array.prototype.reverse; obj.length = 10.5; obj[0] = true; obj[2] = Infinity; obj[4] = undefined; obj[5] = undefined; obj[8] = "NaN"; obj[9] = "-1"; obj.reverse(); obj[0] === "-1". Actual: ' + (obj[0])); -} - -//CHECK#3 -if (obj[1] !== "NaN") { - $ERROR('#3: var obj = {}; obj.reverse = Array.prototype.reverse; obj.length = 10.5; obj[0] = true; obj[2] = Infinity; obj[4] = undefined; obj[5] = undefined; obj[8] = "NaN"; obj[9] = "-1"; obj.reverse(); obj[1] === "NaN". Actual: ' + (obj[1])); -} - -//CHECK#4 -if (obj[2] !== undefined) { - $ERROR('#4: var obj = {}; obj.reverse = Array.prototype.reverse; obj.length = 10.5; obj[0] = true; obj[2] = Infinity; obj[4] = undefined; obj[5] = undefined; obj[8] = "NaN"; obj[9] = "-1"; obj.reverse(); obj[2] === undefined. Actual: ' + (obj[2])); -} - -//CHECK#5 -if (obj[3] !== undefined) { - $ERROR('#5: var obj = {}; obj.reverse = Array.prototype.reverse; obj.length = 10.5; obj[0] = true; obj[2] = Infinity; obj[4] = undefined; obj[5] = undefined; obj[8] = "NaN"; obj[9] = "-1"; obj.reverse(); obj[3] === undefined. Actual: ' + (obj[3])); -} - -//CHECK#6 -if (obj[4] !== undefined) { - $ERROR('#6: var obj = {}; obj.reverse = Array.prototype.reverse; obj.length = 10.5; obj[0] = true; obj[2] = Infinity; obj[4] = undefined; obj[5] = undefined; obj[8] = "NaN"; obj[9] = "-1"; obj.reverse(); obj[4] === undefined. Actual: ' + (obj[4])); -} - -//CHECK#7 -if (obj[5] !== undefined) { - $ERROR('#7: var obj = {}; obj.reverse = Array.prototype.reverse; obj.length = 10.5; obj[0] = true; obj[2] = Infinity; obj[4] = undefined; obj[5] = undefined; obj[8] = "NaN"; obj[9] = "-1"; obj.reverse(); obj[5] === undefined. Actual: ' + (obj[5])); -} - -//CHECK#8 -if (obj[6] !== undefined) { - $ERROR('#8: var obj = {}; obj.reverse = Array.prototype.reverse; obj.length = 10.5; obj[0] = true; obj[2] = Infinity; obj[4] = undefined; obj[5] = undefined; obj[8] = "NaN"; obj[9] = "-1"; obj.reverse(); obj[6] === undefined. Actual: ' + (obj[6])); -} - -//CHECK#9 -if (obj[7] !== Infinity) { - $ERROR('#9: var obj = {}; obj.reverse = Array.prototype.reverse; obj.length = 10.5; obj[0] = true; obj[2] = Infinity; obj[4] = undefined; obj[5] = undefined; obj[8] = "NaN"; obj[9] = "-1"; obj.reverse(); obj[7] === Infinity. Actual: ' + (obj[7])); -} - -//CHECK#10 -if (obj[8] !== undefined) { - $ERROR('#10: var obj = {}; obj.reverse = Array.prototype.reverse; obj.length = 10.5; obj[0] = true; obj[2] = Infinity; obj[4] = undefined; obj[5] = undefined; obj[8] = "NaN"; obj[9] = "-1"; obj.reverse(); obj[8] === undefined. Actual: ' + (obj[8])); -} - -//CHECK#11 -if (obj[9] !== true) { - $ERROR('#11: var obj = {}; obj.reverse = Array.prototype.reverse; obj.length = 10.5; obj[0] = true; obj[2] = Infinity; obj[4] = undefined; obj[5] = undefined; obj[8] = "NaN"; obj[9] = "-1"; obj.reverse(); obj[9] === true. Actual: ' + (obj[9])); -} - -obj.length = new Number(9.5); - -var reverse = obj.reverse(); -if (reverse !== obj) { - $ERROR('#1: var obj = {}; obj.reverse = Array.prototype.reverse; obj.length = 10.5; obj[0] = true; obj[2] = Infinity; obj[4] = undefined; obj[5] = undefined; obj[8] = "NaN"; obj[9] = "-1"; obj.reverse(); obj.length = new Number(9.5); obj.reverse() === obj. Actual: ' + (reverse)); -} - -//CHECK#12 -if (obj[0] !== undefined) { - $ERROR('#12: var obj = {}; obj.reverse = Array.prototype.reverse; obj.length = 10.5; obj[0] = true; obj[2] = Infinity; obj[4] = undefined; obj[5] = undefined; obj[8] = "NaN"; obj[9] = "-1"; obj.reverse(); obj.length = new Number(9.5); obj.reverse(); obj[0] === undefined. Actual: ' + (obj[0])); -} - -//CHECK#13 -if (obj[1] !== Infinity) { - $ERROR('#13: var obj = {}; obj.reverse = Array.prototype.reverse; obj.length = 10.5; obj[0] = true; obj[2] = Infinity; obj[4] = undefined; obj[5] = undefined; obj[8] = "NaN"; obj[9] = "-1"; obj.reverse(); obj.length = new Number(9.5); obj.reverse(); obj[1] === Infinity. Actual: ' + (obj[1])); -} - -//CHECK#14 -if (obj[2] !== undefined) { - $ERROR('#14: var obj = {}; obj.reverse = Array.prototype.reverse; obj.length = 10.5; obj[0] = true; obj[2] = Infinity; obj[4] = undefined; obj[5] = undefined; obj[8] = "NaN"; obj[9] = "-1"; obj.reverse(); obj.length = new Number(9.5); obj.reverse(); obj[2] === undefined. Actual: ' + (obj[2])); -} - -//CHECK#15 -if (obj[3] !== undefined) { - $ERROR('#15: var obj = {}; obj.reverse = Array.prototype.reverse; obj.length = 10.5; obj[0] = true; obj[2] = Infinity; obj[4] = undefined; obj[5] = undefined; obj[8] = "NaN"; obj[9] = "-1"; obj.reverse(); obj.length = new Number(9.5); obj.reverse(); obj[3] === undefined. Actual: ' + (obj[3])); -} - -//CHECK#16 -if (obj[4] !== undefined) { - $ERROR('#16: var obj = {}; obj.reverse = Array.prototype.reverse; obj.length = 10.5; obj[0] = true; obj[2] = Infinity; obj[4] = undefined; obj[5] = undefined; obj[8] = "NaN"; obj[9] = "-1"; obj.reverse(); obj.length = new Number(9.5); obj.reverse(); obj[4] === undefined. Actual: ' + (obj[4])); -} - -//CHECK#17 -if (obj[5] !== undefined) { - $ERROR('#17: var obj = {}; obj.reverse = Array.prototype.reverse; obj.length = 10.5; obj[0] = true; obj[2] = Infinity; obj[4] = undefined; obj[5] = undefined; obj[8] = "NaN"; obj[9] = "-1"; obj.reverse(); obj.length = new Number(9.5); obj.reverse(); obj[5] === undefined. Actual: ' + (obj[5])); -} - -//CHECK#18 -if (obj[6] !== undefined) { - $ERROR('#18: var obj = {}; obj.reverse = Array.prototype.reverse; obj.length = 10.5; obj[0] = true; obj[2] = Infinity; obj[4] = undefined; obj[5] = undefined; obj[8] = "NaN"; obj[9] = "-1"; obj.reverse(); obj.length = new Number(9.5); obj.reverse(); obj[6] === undefined. Actual: ' + (obj[6])); -} - -//CHECK#19 -if (obj[7] !== "NaN") { - $ERROR('#19: var obj = {}; obj.reverse = Array.prototype.reverse; obj.length = 10.5; obj[0] = true; obj[2] = Infinity; obj[4] = undefined; obj[5] = undefined; obj[8] = "NaN"; obj[9] = "-1"; obj.reverse(); obj.length = new Number(9.5); obj.reverse(); obj[7] === "NaN". Actual: ' + (obj[7])); -} - -//CHECK#20 -if (obj[8] !== "-1") { - $ERROR('#20: var obj = {}; obj.reverse = Array.prototype.reverse; obj.length = 10.5; obj[0] = true; obj[2] = Infinity; obj[4] = undefined; obj[5] = undefined; obj[8] = "NaN"; obj[9] = "-1"; obj.reverse(); obj.length = new Number(9.5); obj.reverse(); obj[8] === "-1". Actual: ' + (obj[8])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.8_Array_prototype_reverse/S15.4.4.8_A2_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.8_Array_prototype_reverse/S15.4.4.8_A2_T3.js deleted file mode 100644 index 1c0c42a88..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.8_Array_prototype_reverse/S15.4.4.8_A2_T3.js +++ /dev/null @@ -1,129 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.8_A2_T3; - * @section: 15.4.4.8; - * @assertion: The reverse function is intentionally generic. - * It does not require that its this value be an Array object; - * @description: Checking this for Object object, elements are objects and primitives, length is string; -*/ - -//CHECK#1 -var obj = {}; -obj.length = "10"; -obj.reverse = Array.prototype.reverse; - -obj[0] = true; -obj[2] = Infinity; -obj[4] = undefined; -obj[5] = undefined; -obj[8] = "NaN"; -obj[9] = "-1"; - -var reverse = obj.reverse(); -if (reverse !== obj) { - $ERROR('#1: var obj = {}; obj.reverse = Array.prototype.reverse; obj.length = "10"; obj[0] = true; obj[2] = Infinity; obj[4] = undefined; obj[5] = undefined; obj[8] = "NaN"; obj[9] = "-1"; obj.reverse() === obj. Actual: ' + (reverse)); -} - -//CHECK#2 -if (obj[0] !== "-1") { - $ERROR('#2: var obj = {}; obj.reverse = Array.prototype.reverse; obj.length = "10"; obj[0] = true; obj[2] = Infinity; obj[4] = undefined; obj[5] = undefined; obj[8] = "NaN"; obj[9] = "-1"; obj.reverse(); obj[0] === "-1". Actual: ' + (obj[0])); -} - -//CHECK#3 -if (obj[1] !== "NaN") { - $ERROR('#3: var obj = {}; obj.reverse = Array.prototype.reverse; obj.length = "10"; obj[0] = true; obj[2] = Infinity; obj[4] = undefined; obj[5] = undefined; obj[8] = "NaN"; obj[9] = "-1"; obj.reverse(); obj[1] === "NaN". Actual: ' + (obj[1])); -} - -//CHECK#4 -if (obj[2] !== undefined) { - $ERROR('#4: var obj = {}; obj.reverse = Array.prototype.reverse; obj.length = "10"; obj[0] = true; obj[2] = Infinity; obj[4] = undefined; obj[5] = undefined; obj[8] = "NaN"; obj[9] = "-1"; obj.reverse(); obj[2] === undefined. Actual: ' + (obj[2])); -} - -//CHECK#5 -if (obj[3] !== undefined) { - $ERROR('#5: var obj = {}; obj.reverse = Array.prototype.reverse; obj.length = "10"; obj[0] = true; obj[2] = Infinity; obj[4] = undefined; obj[5] = undefined; obj[8] = "NaN"; obj[9] = "-1"; obj.reverse(); obj[3] === undefined. Actual: ' + (obj[3])); -} - -//CHECK#6 -if (obj[4] !== undefined) { - $ERROR('#6: var obj = {}; obj.reverse = Array.prototype.reverse; obj.length = "10"; obj[0] = true; obj[2] = Infinity; obj[4] = undefined; obj[5] = undefined; obj[8] = "NaN"; obj[9] = "-1"; obj.reverse(); obj[4] === undefined. Actual: ' + (obj[4])); -} - -//CHECK#7 -if (obj[5] !== undefined) { - $ERROR('#7: var obj = {}; obj.reverse = Array.prototype.reverse; obj.length = "10"; obj[0] = true; obj[2] = Infinity; obj[4] = undefined; obj[5] = undefined; obj[8] = "NaN"; obj[9] = "-1"; obj.reverse(); obj[5] === undefined. Actual: ' + (obj[5])); -} - -//CHECK#8 -if (obj[6] !== undefined) { - $ERROR('#8: var obj = {}; obj.reverse = Array.prototype.reverse; obj.length = "10"; obj[0] = true; obj[2] = Infinity; obj[4] = undefined; obj[5] = undefined; obj[8] = "NaN"; obj[9] = "-1"; obj.reverse(); obj[6] === undefined. Actual: ' + (obj[6])); -} - -//CHECK#9 -if (obj[7] !== Infinity) { - $ERROR('#9: var obj = {}; obj.reverse = Array.prototype.reverse; obj.length = "10"; obj[0] = true; obj[2] = Infinity; obj[4] = undefined; obj[5] = undefined; obj[8] = "NaN"; obj[9] = "-1"; obj.reverse(); obj[7] === Infinity. Actual: ' + (obj[7])); -} - -//CHECK#10 -if (obj[8] !== undefined) { - $ERROR('#10: var obj = {}; obj.reverse = Array.prototype.reverse; obj.length = "10"; obj[0] = true; obj[2] = Infinity; obj[4] = undefined; obj[5] = undefined; obj[8] = "NaN"; obj[9] = "-1"; obj.reverse(); obj[8] === undefined. Actual: ' + (obj[8])); -} - -//CHECK#11 -if (obj[9] !== true) { - $ERROR('#11: var obj = {}; obj.reverse = Array.prototype.reverse; obj.length = "10"; obj[0] = true; obj[2] = Infinity; obj[4] = undefined; obj[5] = undefined; obj[8] = "NaN"; obj[9] = "-1"; obj.reverse(); obj[9] === true. Actual: ' + (obj[9])); -} - -obj.length = new String("9"); - -var reverse = obj.reverse(); -if (reverse !== obj) { - $ERROR('#1: var obj = {}; obj.reverse = Array.prototype.reverse; obj.length = "10"; obj[0] = true; obj[2] = Infinity; obj[4] = undefined; obj[5] = undefined; obj[8] = "NaN"; obj[9] = "-1"; obj.reverse(); obj.length = new String("9"); obj.reverse() === obj. Actual: ' + (reverse)); -} - -//CHECK#12 -if (obj[0] !== undefined) { - $ERROR('#12: var obj = {}; obj.reverse = Array.prototype.reverse; obj.length = "10"; obj[0] = true; obj[2] = Infinity; obj[4] = undefined; obj[5] = undefined; obj[8] = "NaN"; obj[9] = "-1"; obj.reverse(); obj.length = new String("9"); obj.reverse(); obj[0] === undefined. Actual: ' + (obj[0])); -} - -//CHECK#13 -if (obj[1] !== Infinity) { - $ERROR('#13: var obj = {}; obj.reverse = Array.prototype.reverse; obj.length = "10"; obj[0] = true; obj[2] = Infinity; obj[4] = undefined; obj[5] = undefined; obj[8] = "NaN"; obj[9] = "-1"; obj.reverse(); obj.length = new String("9"); obj.reverse(); obj[1] === Infinity. Actual: ' + (obj[1])); -} - -//CHECK#14 -if (obj[2] !== undefined) { - $ERROR('#14: var obj = {}; obj.reverse = Array.prototype.reverse; obj.length = "10"; obj[0] = true; obj[2] = Infinity; obj[4] = undefined; obj[5] = undefined; obj[8] = "NaN"; obj[9] = "-1"; obj.reverse(); obj.length = new String("9"); obj.reverse(); obj[2] === undefined. Actual: ' + (obj[2])); -} - -//CHECK#15 -if (obj[3] !== undefined) { - $ERROR('#15: var obj = {}; obj.reverse = Array.prototype.reverse; obj.length = "10"; obj[0] = true; obj[2] = Infinity; obj[4] = undefined; obj[5] = undefined; obj[8] = "NaN"; obj[9] = "-1"; obj.reverse(); obj.length = new String("9"); obj.reverse(); obj[3] === undefined. Actual: ' + (obj[3])); -} - -//CHECK#16 -if (obj[4] !== undefined) { - $ERROR('#16: var obj = {}; obj.reverse = Array.prototype.reverse; obj.length = "10"; obj[0] = true; obj[2] = Infinity; obj[4] = undefined; obj[5] = undefined; obj[8] = "NaN"; obj[9] = "-1"; obj.reverse(); obj.length = new String("9"); obj.reverse(); obj[4] === undefined. Actual: ' + (obj[4])); -} - -//CHECK#17 -if (obj[5] !== undefined) { - $ERROR('#17: var obj = {}; obj.reverse = Array.prototype.reverse; obj.length = "10"; obj[0] = true; obj[2] = Infinity; obj[4] = undefined; obj[5] = undefined; obj[8] = "NaN"; obj[9] = "-1"; obj.reverse(); obj.length = new String("9"); obj.reverse(); obj[5] === undefined. Actual: ' + (obj[5])); -} - -//CHECK#18 -if (obj[6] !== undefined) { - $ERROR('#18: var obj = {}; obj.reverse = Array.prototype.reverse; obj.length = "10"; obj[0] = true; obj[2] = Infinity; obj[4] = undefined; obj[5] = undefined; obj[8] = "NaN"; obj[9] = "-1"; obj.reverse(); obj.length = new String("9"); obj.reverse(); obj[6] === undefined. Actual: ' + (obj[6])); -} - -//CHECK#19 -if (obj[7] !== "NaN") { - $ERROR('#19: var obj = {}; obj.reverse = Array.prototype.reverse; obj.length = "10"; obj[0] = true; obj[2] = Infinity; obj[4] = undefined; obj[5] = undefined; obj[8] = "NaN"; obj[9] = "-1"; obj.reverse(); obj.length = new String("9"); obj.reverse(); obj[7] === "NaN". Actual: ' + (obj[7])); -} - -//CHECK#20 -if (obj[8] !== "-1") { - $ERROR('#20: var obj = {}; obj.reverse = Array.prototype.reverse; obj.length = "10"; obj[0] = true; obj[2] = Infinity; obj[4] = undefined; obj[5] = undefined; obj[8] = "NaN"; obj[9] = "-1"; obj.reverse(); obj.length = new String("9"); obj.reverse(); obj[8] === "-1". Actual: ' + (obj[8])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.8_Array_prototype_reverse/S15.4.4.8_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.8_Array_prototype_reverse/S15.4.4.8_A3_T1.js deleted file mode 100644 index c82a39b8e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.8_Array_prototype_reverse/S15.4.4.8_A3_T1.js +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.8_A3_T1; - * @section: 15.4.4.8; - * @assertion: Check ToUint32(length) for non Array objects; - * @description: length = 4294967296; -*/ - -var obj = {}; -obj.reverse = Array.prototype.reverse; -obj[0] = "x"; -obj[4294967295] = "y"; -obj.length = 4294967296; - -//CHECK#1 -var reverse = obj.reverse(); -if (reverse !== obj) { - $ERROR('#1: var obj = {}; obj.reverse = Array.prototype.reverse; obj[0] = "x"; obj[4294967295] = "y"; obj.length = 4294967296; obj.reverse() === obj. Actual: ' + (reverse)); -} - -//CHECK#2 -if (obj.length !== 4294967296) { - $ERROR('#2: var obj = {}; obj.reverse = Array.prototype.reverse; obj[0] = "x"; obj[4294967295] = "y"; obj.length = 4294967296; obj.reverse(); obj.length === 4294967296. Actual: ' + (obj.length)); -} - -//CHECK#3 -if (obj[0] !== "x") { - $ERROR('#3: var obj = {}; obj.reverse = Array.prototype.reverse; obj[0] = "x"; obj[4294967295] = "y"; obj.length = 4294967296; obj.reverse(); obj[0] == "x"'); -} - -//CHECK#4 -if (obj[4294967295] !== "y") { - $ERROR('#4: var obj = {}; obj.reverse = Array.prototype.reverse; obj[] = "x"; obj[4294967295] = "y"; obj.length = 4294967296; obj.reverse(); obj[4294967295] == "y"'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.8_Array_prototype_reverse/S15.4.4.8_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.8_Array_prototype_reverse/S15.4.4.8_A3_T2.js deleted file mode 100644 index 15de9074c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.8_Array_prototype_reverse/S15.4.4.8_A3_T2.js +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.8_A3_T2; - * @section: 15.4.4.8; - * @assertion: Check ToUint32(length) for non Array objects; - * @description: length = 4294967298; -*/ - -var obj = {}; -obj.reverse = Array.prototype.reverse; -obj[0] = "x"; -obj[1] = "y"; -obj[4294967297] = "z"; -obj.length = 4294967298; - -//CHECK#1 -var reverse = obj.reverse(); -if (reverse !== obj) { - $ERROR('#1: var obj = {}; obj.reverse = Array.prototype.reverse; obj[0] = "x"; obj[1] = "y"; obj[4294967297] = "z"; obj.length = 4294967298; obj.reverse() === obj. Actual: ' + (reverse)); -} - -//CHECK#2 -if (obj.length !== 4294967298) { - $ERROR('#2: var obj = {}; obj.reverse = Array.prototype.reverse; obj[0] = "x"; obj[1] = "y"; obj[4294967297] = "z"; obj.length = 4294967298; obj.reverse(); obj.length === 4294967298. Actual: ' + (obj.length)); -} - -//CHECK#3 -if (obj[0] !== "y") { - $ERROR('#3: var obj = {}; obj.reverse = Array.prototype.reverse; obj[0] = "x"; obj[1] = "y"; obj[4294967297] = "z"; obj.length = 4294967298; obj.reverse(); obj[0] === "y". Actual: ' + (obj[0])); -} - -//CHECK#4 -if (obj[1] !== "x") { - $ERROR('#4: var obj = {}; obj.reverse = Array.prototype.reverse; obj[0] = "x"; obj[1] = "y"; obj[4294967297] = "z"; obj.length = 4294967298; obj.reverse(); obj[1] === "x". Actual: ' + (obj[1])); -} - -//CHECK#5 -if (obj[4294967297] !== "z") { - $ERROR('#5: var obj = {}; obj.reverse = Array.prototype.reverse; obj[0] = "x"; obj[1] = "y"; obj[4294967297] = "z"; obj.length = 4294967298; obj.reverse(); obj[4294967297] === "z". Actual: ' + (obj[4294967297])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.8_Array_prototype_reverse/S15.4.4.8_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.8_Array_prototype_reverse/S15.4.4.8_A3_T3.js deleted file mode 100644 index 0a64da385..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.8_Array_prototype_reverse/S15.4.4.8_A3_T3.js +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.8_A3_T3; - * @section: 15.4.4.8; - * @assertion: Check ToUint32(length) for non Array objects; - * @description: length = -4294967294; -*/ - -var obj = {}; -obj.reverse = Array.prototype.reverse; -obj[0] = "x"; -obj[1] = "y"; -obj[2] = "z"; -obj.length = -4294967294; - -//CHECK#1 -var reverse = obj.reverse(); -if (reverse !== obj) { - $ERROR('#1: var obj = {}; obj.reverse = Array.prototype.reverse; obj[0] = "x"; obj[1] = "y"; obj[2] = "z"; obj.length = -4294967294; obj.reverse() === obj. Actual: ' + (reverse)); -} - -//CHECK#2 -if (obj.length !== -4294967294) { - $ERROR('#2: var obj = {}; obj.reverse = Array.prototype.reverse; obj[0] = "x"; obj[1] = "y"; obj[2] = "z"; obj.length = -4294967294; obj.reverse(); obj.length === -4294967294. Actual: ' + (obj.length)); -} - -//CHECK#3 -if (obj[0] !== "y") { - $ERROR('#3: var obj = {}; obj.reverse = Array.prototype.reverse; obj[0] = "x"; obj[1] = "y"; obj[2] = "z"; obj.length = -4294967294; obj.reverse(); obj[0] === "y". Actual: ' + (obj[0])); -} - -//CHECK#4 -if (obj[1] !== "x") { - $ERROR('#4: var obj = {}; obj.reverse = Array.prototype.reverse; obj[0] = "x"; obj[1] = "y"; obj[2] = "z"; obj.length = -4294967294; obj.reverse(); obj[1] === "x". Actual: ' + (obj[1])); -} - -//CHECK#5 -if (obj[2] !== "z") { - $ERROR('#5: var obj = {}; obj.reverse = Array.prototype.reverse; obj[0] = "x"; obj[1] = "y"; obj[2] = "z"; obj.length = -4294967294; obj.reverse(); obj[2] === "z". Actual: ' + (obj[2])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.8_Array_prototype_reverse/S15.4.4.8_A4_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.8_Array_prototype_reverse/S15.4.4.8_A4_T1.js deleted file mode 100644 index 7bd6913d4..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.8_Array_prototype_reverse/S15.4.4.8_A4_T1.js +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.8_A4_T1; - * @section: 15.4.4.8, 8.6.2.1, 8.6.2.5; - * @assertion: [[Get]], [[Delete]] from not an inherited property; - * @description: [[Prototype]] of Array instance is Array.prototype, [[Prototype] of Array.prototype is Object.prototype; -*/ - -Array.prototype[1] = 1; -x = [0]; -x.length = 2; -x.reverse(); - -//CHECK#1 -if (x[0] !== 1) { - $ERROR('#1: Array.prototype[1] = 1; x = [0]; x.length = 2; x.reverse(); x[0] === 1. Actual: ' + (x[0])); -} - -//CHECK#2 -if (x[1] !== 0) { - $ERROR('#2: Array.prototype[1] = 1; x = [0]; x.length = 2; x.reverse(); x[1] === 0. Actual: ' + (x[1])); -} - -x.length = 0; - -//CHECK#3 -if (x[0] !== undefined) { - $ERROR('#3: Array.prototype[1] = 1; x = [0]; x.length = 2; x.reverse(); x.length = 0; x[0] === undefined. Actual: ' + (x[0])); -} - -//CHECK#4 -if (x[1] !== 1) { - $ERROR('#4: Array.prototype[1] = 1; x = [0]; x.length = 2; x.reverse(); x.length = 0; x[1] === 1. Actual: ' + (x[1])); -} - -Object.prototype[1] = 1; -Object.prototype.length = 2; -Object.prototype.reverse = Array.prototype.reverse; -x = {0:0}; -x.reverse(); - -//CHECK#5 -if (x[0] !== 1) { - $ERROR('#5: Object.prototype[1] = 1; Object.prototype.length = 2; Object.prototype.reverse = Array.prototype.reverse; x = {0:0}; x.reverse(); x[0] === 0. Actual: ' + (x[0])); -} - -//CHECK#6 -if (x[1] !== 0) { - $ERROR('#6: Object.prototype[1] = 1; Object.prototype.length = 2; Object.prototype.reverse = Array.prototype.reverse; x = {0:0}; x.reverse(); x[1] === 0. Actual: ' + (x[1])); -} - -delete x[0]; -delete x[1]; - -//CHECK#7 -if (x[0] !== undefined) { - $ERROR('#7: Object.prototype[1] = 1; Object.prototype.length = 2; Object.prototype.reverse = Array.prototype.reverse; x = {0:0}; x.reverse(); delete x[0]; delete x[1]; x[0] === undefined. Actual: ' + (x[0])); -} - -//CHECK#8 -if (x[1] !== 1) { - $ERROR('#8: Object.prototype[1] = 1; Object.prototype.length = 2; Object.prototype.reverse = Array.prototype.reverse; x = {0:0}; x.reverse(); delete x[0]; delete x[1]; x[1] === 1. Actual: ' + (x[1])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.8_Array_prototype_reverse/S15.4.4.8_A4_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.8_Array_prototype_reverse/S15.4.4.8_A4_T2.js deleted file mode 100644 index 8aff79d0f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.8_Array_prototype_reverse/S15.4.4.8_A4_T2.js +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.8_A4_T2; - * @section: 15.4.4.8, 8.6.2.1, 8.6.2.5; - * @assertion: [[Get]], [[Delete]] from not an inherited property; - * @description: [[Prototype]] of Array instance is Array.prototype, [[Prototype] of Array.prototype is Object.prototype; -*/ - -Array.prototype[1] = -1; -x = [0,1]; -x.length = 2; -x.reverse(); - -//CHECK#1 -if (x[0] !== 1) { - $ERROR('#1: Array.prototype[1] = -1; x = [0,1]; x.length = 2; x.reverse(); x[0] === 1. Actual: ' + (x[0])); -} - -//CHECK#2 -if (x[1] !== 0) { - $ERROR('#2: Array.prototype[1] = -1; x = [0,1]; x.length = 2; x.reverse(); x[1] === 0. Actual: ' + (x[1])); -} - -x.length = 0; - -//CHECK#3 -if (x[0] !== undefined) { - $ERROR('#3: Array.prototype[1] = -1; x = [0,1]; x.length = 2; x.reverse(); x.length = 0; x[0] === undefined. Actual: ' + (x[0])); -} - -//CHECK#4 -if (x[1] !== -1) { - $ERROR('#4: Array.prototype[1] = -1; x = [0,1]; x.length = 2; x.reverse(); x.length = 0; x[1] === -1. Actual: ' + (x[1])); -} - -Object.prototype[1] = -1; -Object.prototype.length = 2; -Object.prototype.reverse = Array.prototype.reverse; -x = {0:0,1:1}; -x.reverse(); - -//CHECK#5 -if (x[0] !== 1) { - $ERROR('#5: Object.prototype[1] = -1; Object.prototype.length = 2; Object.prototype.reverse = Array.prototype.reverse; x = {0:0,1:1}; x.reverse(); x[0] === 0. Actual: ' + (x[0])); -} - -//CHECK#6 -if (x[1] !== 0) { - $ERROR('#6: Object.prototype[1] = -1; Object.prototype.length = 2; Object.prototype.reverse = Array.prototype.reverse; x = {0:0,1:1}; x.reverse(); x[1] === 0. Actual: ' + (x[1])); -} - -delete x[0]; -delete x[1]; - -//CHECK#7 -if (x[0] !== undefined) { - $ERROR('#7: Object.prototype[1] = -1; Object.prototype.length = 2; Object.prototype.reverse = Array.prototype.reverse; x = {0:0,1:1}; x.reverse(); delete x[0]; delete x[1]; x[0] === undefined. Actual: ' + (x[0])); -} - -//CHECK#8 -if (x[1] !== -1) { - $ERROR('#8: Object.prototype[1] = -1; Object.prototype.length = 2; Object.prototype.reverse = Array.prototype.reverse; x = {0:0,1:1}; x.reverse(); delete x[0]; delete x[1]; x[1] === -1. Actual: ' + (x[1])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.8_Array_prototype_reverse/S15.4.4.8_A5.1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.8_Array_prototype_reverse/S15.4.4.8_A5.1.js deleted file mode 100644 index eb55da298..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.8_Array_prototype_reverse/S15.4.4.8_A5.1.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.8_A5.1; -* @section: 15.4.4.8, 15.2.4.7, 12.6.4; -* @assertion: The length property of reverse has the attribute DontEnum; -* @description: Checking use propertyIsEnumerable, for-in; -*/ - - -//CHECK#1 -if (Array.prototype.reverse.propertyIsEnumerable('length') !== false) { - $ERROR('#1: Array.prototype.reverse.propertyIsEnumerable(\'length\') === false. Actual: ' + (Array.prototype.reverse.propertyIsEnumerable('length'))); -} - -//CHECK#2 -result = true; -for (p in Array.reverse){ - if (p === "length") { - result = false; - } -} - -if (result !== true) { - $ERROR('#2: result = true; for (p in Array.reverse) { if (p === "length") result = false; } result === true;'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.8_Array_prototype_reverse/S15.4.4.8_A5.2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.8_Array_prototype_reverse/S15.4.4.8_A5.2.js deleted file mode 100644 index e35e5e33c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.8_Array_prototype_reverse/S15.4.4.8_A5.2.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.8_A5.2; -* @section: 15.4.4.8, 15.2.4.5, 11.4.1; -* @assertion: The length property of reverse has the attribute DontDelete; -* @description: Checking use hasOwnProperty, delete; -*/ - -//CHECK#1 -if (Array.prototype.reverse.hasOwnProperty('length') !== true) { - $FAIL('#1: Array.prototype.reverse.hasOwnProperty(\'length\') === true. Actual: ' + (Array.prototype.reverse.hasOwnProperty('length'))); -} - -delete Array.prototype.reverse.length; - -//CHECK#2 -if (Array.prototype.reverse.hasOwnProperty('length') !== true) { - $ERROR('#2: delete Array.prototype.reverse.length; Array.prototype.reverse.hasOwnProperty(\'length\') === true. Actual: ' + (Array.prototype.reverse.hasOwnProperty('length'))); -} - -//CHECK#3 -if (Array.prototype.reverse.length === undefined) { - $ERROR('#3: delete Array.prototype.reverse.length; Array.prototype.reverse.length !== undefined'); -} - - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.8_Array_prototype_reverse/S15.4.4.8_A5.3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.8_Array_prototype_reverse/S15.4.4.8_A5.3.js deleted file mode 100644 index d2cf07531..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.8_Array_prototype_reverse/S15.4.4.8_A5.3.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.8_A5.3; -* @section: 15.4.4.8; -* @assertion: The length property of reverse has the attribute ReadOnly; -* @description: Checking if varying the length property fails; -*/ - -//CHECK#1 -x = Array.prototype.reverse.length; -Array.prototype.reverse.length = Infinity; -if (Array.prototype.reverse.length !== x) { - $ERROR('#1: x = Array.prototype.reverse.length; Array.prototype.reverse.length = Infinity; Array.prototype.reverse.length === x. Actual: ' + (Array.prototype.reverse.length)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.8_Array_prototype_reverse/S15.4.4.8_A5.4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.8_Array_prototype_reverse/S15.4.4.8_A5.4.js deleted file mode 100644 index 41981d4e4..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.8_Array_prototype_reverse/S15.4.4.8_A5.4.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.8_A5.4; -* @section: 15.4.4.8; -* @assertion: The length property of reverse is 0; -* @description: reverse.length === 1; -*/ - -//CHECK#1 -if (Array.prototype.reverse.length !== 0) { - $ERROR('#1: Array.prototype.reverse.length === 0. Actual: ' + (Array.prototype.reverse.length)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.8_Array_prototype_reverse/S15.4.4.8_A5.5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.8_Array_prototype_reverse/S15.4.4.8_A5.5.js deleted file mode 100644 index 4b28d8c14..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.8_Array_prototype_reverse/S15.4.4.8_A5.5.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.8_A5.5; -* @section: 15.4.4.8, 15.2.4.7, 12.6.4; -* @assertion: The reverse property of Array has the attribute DontEnum; -* @description: Checking use propertyIsEnumerable, for-in; -*/ - - -//CHECK#1 -if (Array.propertyIsEnumerable('reverse') !== false) { - $ERROR('#1: Array.propertyIsEnumerable(\'reverse\') === false. Actual: ' + (Array.propertyIsEnumerable('reverse'))); -} - -//CHECK#2 -result = true; -for (p in Array){ - if (p === "reverse") { - result = false; - } -} - -if (result !== true) { - $ERROR('#2: result = true; for (p in Array) { if (p === "reverse") result = false; } result === true;'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.8_Array_prototype_reverse/S15.4.4.8_A5.6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.8_Array_prototype_reverse/S15.4.4.8_A5.6.js deleted file mode 100644 index d47587cdd..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.8_Array_prototype_reverse/S15.4.4.8_A5.6.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.8_A5.6; -* @section: 15.4.4.8; -* @assertion: The reverse property of Array has not prototype property; -* @description: Checking Array.prototype.reverse.prototype; -*/ - -//CHECK#1 -if (Array.prototype.reverse.prototype !== undefined) { - $ERROR('#1: Array.prototype.reverse.prototype === undefined. Actual: ' + (Array.prototype.reverse.prototype)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.8_Array_prototype_reverse/S15.4.4.8_A5.7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.8_Array_prototype_reverse/S15.4.4.8_A5.7.js deleted file mode 100644 index 806e0fa18..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.8_Array_prototype_reverse/S15.4.4.8_A5.7.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.8_A5.7; -* @section: 15.4.4.8, 11.2.2; -* @assertion: The reverse property of Array can't be used as constructor; -* @description: If property does not implement the internal [[Construct]] method, throw a TypeError exception; -*/ - -//CHECK#1 - -try { - new Array.prototype.reverse(); - $ERROR('#1.1: new Array.prototype.reverse() throw TypeError. Actual: ' + (new Array.prototype.reverse())); -} catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1.2: new Array.prototype.reverse() throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.9_Array_prototype_shift/S15.4.4.9_A1.1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.9_Array_prototype_shift/S15.4.4.9_A1.1_T1.js deleted file mode 100644 index 971625e12..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.9_Array_prototype_shift/S15.4.4.9_A1.1_T1.js +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.9_A1.1_T1; - * @section: 15.4.4.9; - * @assertion: If length equal zero, call the [[Put]] method of this object - * with arguments "length" and 0 and return undefined; - * @description: Checking this algorithm; -*/ - -//CHECK#1 -var x = new Array(); -var shift = x.shift(); -if (shift !== undefined) { - $ERROR('#1: var x = new Array(); x.shift() === undefined. Actual: ' + (shift)); -} - -//CHECK#2 -if (x.length !== 0) { - $ERROR('#2: var x = new Array(); x.shift(); x.length === 0. Actual: ' + (x.length)); -} - -//CHECK#3 -var x = Array(1,2,3); -x.length = 0; -var shift = x.shift(); -if (shift !== undefined) { - $ERROR('#2: var x = Array(1,2,3); x.length = 0; x.shift() === undefined. Actual: ' + (shift)); -} - -//CHECK#4 -if (x.length !== 0) { - $ERROR('#4: var x = new Array(1,2,3); x.length = 0; x.shift(); x.length === 0. Actual: ' + (x.length)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.9_Array_prototype_shift/S15.4.4.9_A1.2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.9_Array_prototype_shift/S15.4.4.9_A1.2_T1.js deleted file mode 100644 index 72523323d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.9_Array_prototype_shift/S15.4.4.9_A1.2_T1.js +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.9_A1.2_T1; - * @section: 15.4.4.9; - * @assertion: The first element of the array is removed from the array and - * returned; - * @description: Checking this use new Array() and []; -*/ - -//CHECK#1 -x = new Array(0,1,2,3); -var shift = x.shift(); -if (shift !== 0) { - $ERROR('#1: x = new Array(0,1,2,3); x.shift() === 0. Actual: ' + (shift)); -} - -//CHECK#2 -if (x.length !== 3) { - $ERROR('#2: x = new Array(0,1,2,3); x.shift(); x.length == 3'); -} - -//CHECK#3 -if (x[0] !== 1) { - $ERROR('#3: x = new Array(0,1,2,3); x.shift(); x[0] == 1'); -} - -//CHECK#4 -if (x[1] !== 2) { - $ERROR('#4: x = new Array(0,1,2,3); x.shift(); x[1] == 2'); -} - -//CHECK#5 -x = []; -x[0] = 0; -x[3] = 3; -var shift = x.shift(); -if (shift !== 0) { - $ERROR('#5: x = []; x[0] = 0; x[3] = 3; x.shift() === 0. Actual: ' + (shift)); -} - -//CHECK#6 -if (x.length !== 3) { - $ERROR('#6: x = []; x[0] = 0; x[3] = 3; x.shift(); x.length == 3'); -} - -//CHECK#7 -if (x[0] !== undefined) { - $ERROR('#7: x = []; x[0] = 0; x[3] = 3; x.shift(); x[0] == undefined'); -} - -//CHECK#8 -if (x[12] !== undefined) { - $ERROR('#8: x = []; x[0] = 0; x[3] = 3; x.shift(); x[1] == undefined'); -} - -//CHECK#9 -x.length = 1; -var shift = x.shift(); -if (shift !== undefined) { - $ERROR('#9: x = []; x[0] = 0; x[3] = 3; x.shift(); x.length = 1; x.shift() === undefined. Actual: ' + (shift)); -} - -//CHECK#10 -if (x.length !== 0) { - $ERROR('#10: x = []; x[0] = 0; x[3] = 3; x.shift(); x.length = 1; x.shift(); x.length === 0. Actual: ' + (x.length)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.9_Array_prototype_shift/S15.4.4.9_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.9_Array_prototype_shift/S15.4.4.9_A2_T1.js deleted file mode 100644 index 542806bf5..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.9_Array_prototype_shift/S15.4.4.9_A2_T1.js +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.9_A2_T1; - * @section: 15.4.4.9; - * @assertion: The shift function is intentionally generic. - * It does not require that its this value be an Array object; - * @description: If ToUint32(length) equal zero, call the [[Put]] method - * of this object with arguments "length" and 0 and return undefined; -*/ - -var obj = {}; -obj.shift = Array.prototype.shift; - -if (obj.length !== undefined) { - $ERROR('#0: var obj = {}; obj.length === undefined. Actual: ' + (obj.length)); -} else { - //CHECK#1 - var shift = obj.shift(); -if (shift !== undefined) { - $ERROR('#1: var obj = {}; obj.shift = Array.prototype.shift; obj.shift() === undefined. Actual: ' + (shift)); - } - //CHECK#2 - if (obj.length !== 0) { - $ERROR('#2: var obj = {}; obj.shift = Array.prototype.shift; obj.shift(); obj.length === 0. Actual: ' + (obj.length)); - } -} - -//CHECK#3 -obj.length = undefined; -var shift = obj.shift(); -if (shift !== undefined) { - $ERROR('#3: var obj = {}; obj.length = undefined; obj.shift = Array.prototype.shift; obj.shift() === undefined. Actual: ' + (shift)); -} - -//CHECK#4 -if (obj.length !== 0) { - $ERROR('#4: var obj = {}; obj.length = undefined; obj.shift = Array.prototype.shift; obj.shift(); obj.length === 0. Actual: ' + (obj.length)); -} - -//CHECK#5 -obj.length = null -var shift = obj.shift(); -if (shift !== undefined) { - $ERROR('#5: var obj = {}; obj.length = null; obj.shift = Array.prototype.shift; obj.shift() === undefined. Actual: ' + (shift)); -} - -//CHECK#6 -if (obj.length !== 0) { - $ERROR('#6: var obj = {}; obj.length = null; obj.shift = Array.prototype.shift; obj.shift(); obj.length === 0. Actual: ' + (obj.length)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.9_Array_prototype_shift/S15.4.4.9_A2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.9_Array_prototype_shift/S15.4.4.9_A2_T2.js deleted file mode 100644 index 330929b51..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.9_Array_prototype_shift/S15.4.4.9_A2_T2.js +++ /dev/null @@ -1,90 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.9_A2_T2; - * @section: 15.4.4.9; - * @assertion: The shift function is intentionally generic. - * It does not require that its this value be an Array object; - * @description: If ToUint32(length) equal zero, call the [[Put]] method - * of this object with arguments "length" and 0 and return undefined; -*/ - -var obj = {}; -obj.shift = Array.prototype.shift; - -//CHECK#1 -obj.length = NaN; -var shift = obj.shift(); -if (shift !== undefined) { - $ERROR('#1: var obj = {}; obj.length = NaN; obj.shift = Array.prototype.shift; obj.shift() === undefined. Actual: ' + (shift)); -} - -//CHECK#2 -if (obj.length !== 0) { - $ERROR('#2: var obj = {}; obj.length = NaN; obj.shift = Array.prototype.shift; obj.shift(); obj.length === 0. Actual: ' + (obj.length)); -} - -//CHECK#3 -obj.length = Number.POSITIVE_INFINITY; -var shift = obj.shift(); -if (shift !== undefined) { - $ERROR('#3: var obj = {}; obj.length = Number.POSITIVE_INFINITY; obj.shift = Array.prototype.shift; obj.shift() === undefined. Actual: ' + (shift)); -} - -//CHECK#4 -if (obj.length !== 0) { - $ERROR('#4: var obj = {}; obj.length = Number.POSITIVE_INFINITY; obj.shift = Array.prototype.shift; obj.shift(); obj.length === 0. Actual: ' + (obj.length)); -} - -//CHECK#5 -obj.length = Number.NEGATIVE_INFINITY; -var shift = obj.shift(); -if (shift !== undefined) { - $ERROR('#5: var obj = {}; obj.length = Number.NEGATIVE_INFINITY; obj.shift = Array.prototype.shift; obj.shift() === undefined. Actual: ' + (shift)); -} - -//CHECK#6 -if (obj.length !== 0) { - $ERROR('#6: var obj = {}; obj.length = Number.NEGATIVE_INFINITY; obj.shift = Array.prototype.shift; obj.shift(); obj.length === 0. Actual: ' + (obj.length)); -} - -//CHECK#7 -obj.length = -0; -var shift = obj.shift(); -if (shift !== undefined) { - $ERROR('#7: var obj = {}; obj.length = -0; obj.shift = Array.prototype.shift; obj.shift() === undefined. Actual: ' + (shift)); -} - -//CHECK#8 -if (obj.length !== 0) { - $ERROR('#8: var obj = {}; obj.length = -0; obj.shift = Array.prototype.shift; obj.shift(); obj.length === 0. Actual: ' + (obj.length)); -} else { - if (1/obj.length !== Number.POSITIVE_INFINITY) { - $ERROR('#8: var obj = {}; obj.length = -0; obj.shift = Array.prototype.shift; obj.shift(); obj.length === +0. Actual: ' + (obj.length)); - } -} - -//CHECK#9 -obj.length = 0.5; -var shift = obj.shift(); -if (shift !== undefined) { - $ERROR('#9: var obj = {}; obj.length = 0.5; obj.shift = Array.prototype.shift; obj.shift() === undefined. Actual: ' + (shift)); -} - -//CHECK#10 -if (obj.length !== 0) { - $ERROR('#10: var obj = {}; obj.length = 0.5; obj.shift = Array.prototype.shift; obj.shift(); obj.length === 0. Actual: ' + (obj.length)); -} - -//CHECK#11 -obj.length = new Number(0); -var shift = obj.shift(); -if (shift !== undefined) { - $ERROR('#11: var obj = {}; obj.length = new Number(0); obj.shift = Array.prototype.shift; obj.shift() === undefined. Actual: ' + (shift)); -} - -//CHECK#12 -if (obj.length !== 0) { - $ERROR('#12: var obj = {}; obj.length = new Number(0); obj.shift = Array.prototype.shift; obj.shift(); obj.length === 0. Actual: ' + (obj.length)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.9_Array_prototype_shift/S15.4.4.9_A2_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.9_Array_prototype_shift/S15.4.4.9_A2_T3.js deleted file mode 100644 index 637e6a167..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.9_Array_prototype_shift/S15.4.4.9_A2_T3.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.9_A2_T3; - * @section: 15.4.4.9; - * @assertion: The shift function is intentionally generic. - * It does not require that its this value be an Array object; - * @description: The first element of the array is removed from the array and - * returned; -*/ - -var obj = {}; -obj.shift = Array.prototype.shift; - -//CHECK#1 -obj.length = 2.5; -var shift = obj.shift(); -if (shift !== undefined) { - $ERROR('#1: var obj = {}; obj.length = 2.5; obj.shift = Array.prototype.shift; obj.shift() === undefined. Actual: ' + (shift)); -} - -//CHECK#2 -if (obj.length !== 1) { - $ERROR('#2: var obj = {}; obj.length = 2.5; obj.shift = Array.prototype.shift; obj.shift(); obj.length === 1. Actual: ' + (obj.length)); -} - -//CHECK#3 -obj.length = new Number(2); -var shift = obj.shift(); -if (shift !== undefined) { - $ERROR('#11: var obj = {}; obj.length = new Number(2); obj.shift = Array.prototype.shift; obj.shift() === undefined. Actual: ' + (shift)); -} - -//CHECK#3 -if (obj.length !== 1) { - $ERROR('#12: var obj = {}; obj.length = new Number(2); obj.shift = Array.prototype.shift; obj.shift(); obj.length === 1. Actual: ' + (obj.length)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.9_Array_prototype_shift/S15.4.4.9_A2_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.9_Array_prototype_shift/S15.4.4.9_A2_T4.js deleted file mode 100644 index 9b68af688..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.9_Array_prototype_shift/S15.4.4.9_A2_T4.js +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.9_A2_T4; - * @section: 15.4.4.9; - * @assertion: The shift function is intentionally generic. - * It does not require that its this value be an Array object; - * @description: The first element of the array is removed from the array and - * returned; -*/ - -var obj = {}; -obj["0"] = 0; -obj["3"] = 3; -obj.shift = Array.prototype.shift; - -//CHECK#1 -obj.length = 4; -var shift = obj.shift(); -if (shift !== 0) { - $ERROR('#1: var obj = {}; obj["0"] = 0; obj["3"] = 3; obj.length = 4; obj.shift = Array.prototype.shift; obj.shift() === 0. Actual: ' + (shift)); -} - -//CHECK#2 -if (obj.length !== 3) { - $ERROR('#2: var obj = {}; obj["0"] = 0; obj["3"] = 3; obj.length = 4; obj.shift = Array.prototype.shift; obj.shift(); obj.length === 3. Actual: ' + (obj.length)); -} - -//CHECK#3 -var shift = obj.shift(); -if (shift !== undefined) { - $ERROR('#3: var obj = {}; obj["0"] = 0; obj["3"] = 3; obj.length = 4; obj.shift = Array.prototype.shift; obj.shift(); obj.shift() === undefined. Actual: ' + (shift)); -} - -//CHECK#4 -if (obj.length !== 2) { - $ERROR('#4: var obj = {}; obj["0"] = 0; obj["3"] = 3; obj.length = 4; obj.shift = Array.prototype.shift; obj.shift(); obj.shift(); obj.length === 2. Actual: ' + (obj.length)); -} - -//CHECK#5 -obj.length = 1; -var shift = obj.shift(); -if (shift !== undefined) { - $ERROR('#5: var obj = {}; obj["0"] = 0; obj["3"] = 3; obj.length = 4; obj.shift = Array.prototype.shift; obj.shift(); obj.shift(); obj.length = 1; obj.shift() === undefined. Actual: ' + (shift)); -} - -//CHECK#6 -if (obj.length !== 0) { - $ERROR('#6: var obj = {}; obj["0"] = 0; obj["3"] = 3; obj.length = 4; obj.shift = Array.prototype.shift; obj.shift(); obj.shift(); obj.length = 1; obj.shift(); obj.length === 0. Actual: ' + (obj.length)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.9_Array_prototype_shift/S15.4.4.9_A2_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.9_Array_prototype_shift/S15.4.4.9_A2_T5.js deleted file mode 100644 index 86089f9e9..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.9_Array_prototype_shift/S15.4.4.9_A2_T5.js +++ /dev/null @@ -1,97 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.9_A2_T5; - * @section: 15.4.4.9; - * @assertion: The shift function is intentionally generic. - * It does not require that its this value be an Array object; - * @description: Operator use ToNumber from length. - * If Type(value) is Object, evaluate ToPrimitive(value, Number); -*/ - -var obj = {}; -obj.shift = Array.prototype.shift; - -//CHECK#1 -obj[0] = -1; -obj.length = {valueOf: function() {return 1}}; -var shift = obj.shift(); -if (shift !== -1) { - $ERROR('#1: obj[0] = -1; obj.length = {valueOf: function() {return 1}} obj.shift() === -1. Actual: ' + (shift)); -} - -//CHECK#2 -obj[0] = -1; -obj.length = {valueOf: function() {return 1}, toString: function() {return 0}}; -var shift = obj.shift(); -if (shift !== -1) { - $ERROR('#0: obj[0] = -1; obj.length = {valueOf: function() {return 1}, toString: function() {return 0}} obj.shift() === -1. Actual: ' + (shift)); -} - -//CHECK#3 -obj[0] = -1; -obj.length = {valueOf: function() {return 1}, toString: function() {return {}}}; -var shift = obj.shift(); -if (shift !== -1) { - $ERROR('#3: obj[0] = -1; obj.length = {valueOf: function() {return 1}, toString: function() {return {}}} obj.shift() === -1. Actual: ' + (shift)); -} - -//CHECK#4 -try { - obj[0] = -1; - obj.length = {valueOf: function() {return 1}, toString: function() {throw "error"}}; - var shift = obj.shift(); -if (shift !== -1) { - $ERROR('#4.1: obj[0] = -1; obj.length = {valueOf: function() {return 1}, toString: function() {throw "error"}}; obj.shift() === ",". Actual: ' + (shift)); - } -} -catch (e) { - if (e === "error") { - $ERROR('#4.2: obj[0] = -1; obj.length = {valueOf: function() {return 1}, toString: function() {throw "error"}}; obj.shift() not throw "error"'); - } else { - $ERROR('#4.3: obj[0] = -1; obj.length = {valueOf: function() {return 1}, toString: function() {throw "error"}}; obj.shift() not throw Error. Actual: ' + (e)); - } -} - -//CHECK#5 -obj[0] = -1; -obj.length = {toString: function() {return 0}}; -var shift = obj.shift(); -if (shift !== undefined) { - $ERROR('#5: obj[0] = -1; obj.length = {toString: function() {return 0}} obj.shift() === undefined. Actual: ' + (shift)); -} - -//CHECK#6 -obj[0] = -1; -obj.length = {valueOf: function() {return {}}, toString: function() {return 0}} -var shift = obj.shift(); -if (shift !== undefined) { - $ERROR('#6: obj[0] = -1; obj.length = {valueOf: function() {return {}}, toString: function() {return 0}} obj.shift() === undefined. Actual: ' + (shift)); -} - -//CHECK#7 -try { - obj[0] = -1; - obj.length = {valueOf: function() {throw "error"}, toString: function() {return 0}}; - var shift = obj.shift(); - $ERROR('#7.1: obj[0] = -1; obj.length = {valueOf: function() {throw "error"}, toString: function() {return 0}}; obj.shift() throw "error". Actual: ' + (shift)); -} -catch (e) { - if (e !== "error") { - $ERROR('#7.2: obj[0] = -1; obj.length = {valueOf: function() {throw "error"}, toString: function() {return 0}}; obj.shift() throw "error". Actual: ' + (e)); - } -} - -//CHECK#8 -try { - obj[0] = -1; - obj.length = {valueOf: function() {return {}}, toString: function() {return {}}}; - var shift = obj.shift(); - $ERROR('#8.1: obj[0] = -1; obj.length = {valueOf: function() {return {}}, toString: function() {return {}}} obj.shift() throw TypeError. Actual: ' + (shift)); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#8.2: obj[0] = -1; obj.length = {valueOf: function() {return {}}, toString: function() {return {}}} obj.shift() throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.9_Array_prototype_shift/S15.4.4.9_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.9_Array_prototype_shift/S15.4.4.9_A3_T1.js deleted file mode 100644 index bf15b7587..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.9_Array_prototype_shift/S15.4.4.9_A3_T1.js +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.9_A3_T1; - * @section: 15.4.4.9; - * @assertion: Check ToUint32(length) for non Array objects; - * @description: length is arbitrarily; -*/ - -var obj = {}; -obj.shift = Array.prototype.shift; -obj[0] = "x"; -obj[4294967295] = "y"; -obj.length = 4294967296; - -//CHECK#1 -var shift = obj.shift(); -if (shift !== undefined) { - $ERROR('#1: var obj = {}; obj.shift = Array.prototype.shift; obj[0] = "x"; obj[4294967295] = "y"; obj.length = 4294967296; obj.shift() === unedfined. Actual: ' + (shift)); -} - -//CHECK#2 -if (obj.length !== 0) { - $ERROR('#2: var obj = {}; obj.shift = Array.prototype.shift; obj[0] = "x"; obj[4294967295] = "y"; obj.length = 4294967296; obj.shift(); obj.length === 0. Actual: ' + (obj.length)); -} - -//CHECK#3 -if (obj[0] !== "x") { - $ERROR('#3: var obj = {}; obj.shift = Array.prototype.shift; obj[0] = "x"; obj[4294967295] = "y"; obj.length = 4294967296; obj.shift(); obj[0] === "x". Actual: ' + (obj[0])); -} - -//CHECK#4 -if (obj[4294967295] !== "y") { - $ERROR('#4: var obj = {}; obj.shift = Array.prototype.shift; obj[0] = "x"; obj[4294967295] = "y"; obj.length = 4294967296; obj.shift(); obj[4294967295] === "y". Actual: ' + (obj[4294967295])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.9_Array_prototype_shift/S15.4.4.9_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.9_Array_prototype_shift/S15.4.4.9_A3_T2.js deleted file mode 100644 index b70ee1eb3..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.9_Array_prototype_shift/S15.4.4.9_A3_T2.js +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.9_A3_T2; - * @section: 15.4.4.9; - * @assertion: Check ToUint32(length) for non Array objects; - * @description: length is arbitrarily; -*/ - -var obj = {}; -obj.shift = Array.prototype.shift; -obj[0] = "x"; -obj[1] = "y"; -obj[4294967296] = "z"; -obj.length = 4294967297; - -//CHECK#1 -var shift = obj.shift(); -if (shift !== "x") { - $ERROR('#1: var obj = {}; obj.shift = Array.prototype.shift; obj[0] = "x"; obj[1] = "y"; obj[4294967296] = "z"; obj.length = 4294967297; obj.shift() === "x". Actual: ' + (shift)); -} - -//CHECK#2 -if (obj.length !== 0) { - $ERROR('#2: var obj = {}; obj.shift = Array.prototype.shift; obj[0] = "x"; obj[1] = "y"; obj[4294967296] = "z"; obj.length = 4294967297; obj.shift(); obj.length === 0. Actual: ' + (obj.length)); -} - -//CHECK#3 -if (obj[0] !== undefined) { - $ERROR('#3: var obj = {}; obj.shift = Array.prototype.shift; obj[0] = "x"; obj[1] = "y"; obj[4294967296] = "z"; obj.length = 4294967297; obj.shift(); obj[0] === undefined. Actual: ' + (obj[0])); -} - -//CHECK#4 -if (obj[1] !== "y") { - $ERROR('#4: var obj = {}; obj.shift = Array.prototype.shift; obj[0] = "x"; obj[1] = "y"; obj[4294967296] = "z"; obj.length = 4294967297; obj.shift(); obj[1] === "y". Actual: ' + (obj[1])); -} - -//CHECK#4 -if (obj[4294967296] !== "z") { - $ERROR('#4: var obj = {}; obj.shift = Array.prototype.shift; obj[0] = "x"; obj[1] = "y"; obj[4294967296] = "z"; obj.length = 4294967297; obj.shift(); obj[4294967296] === "z". Actual: ' + (obj[4294967296])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.9_Array_prototype_shift/S15.4.4.9_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.9_Array_prototype_shift/S15.4.4.9_A3_T3.js deleted file mode 100644 index 3bc3fc23c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.9_Array_prototype_shift/S15.4.4.9_A3_T3.js +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.9_A3_T3; - * @section: 15.4.4.9; - * @assertion: Check ToUint32(length) for non Array objects; - * @description: length is arbitrarily; -*/ - -var obj = {}; -obj.shift = Array.prototype.shift; -obj[0] = "x"; -obj[1] = "y"; -obj.length = -4294967294; - -//CHECK#1 -var shift = obj.shift(); -if (shift !== "x") { - $ERROR('#1: var obj = {}; obj.shift = Array.prototype.shift; obj[0] = "x"; obj[1] = "y"; obj.length = -4294967294; obj.shift() === "x". Actual: ' + (shift)); -} - -//CHECK#2 -if (obj.length !== 1) { - $ERROR('#2: var obj = {}; obj.shift = Array.prototype.shift; obj[0] = "x"; obj[1] = "y"; obj.length = -4294967294; obj.shift(); obj.length === 1. Actual: ' + (obj.length)); -} - -//CHECK#3 -if (obj[0] !== "y") { - $ERROR('#3: var obj = {}; obj.shift = Array.prototype.shift; obj[0] = "x"; obj[1] = "y"; obj.length = -4294967294; obj.shift(); obj[0] === "y". Actual: ' + (obj[0])); -} - -//CHECK#4 -if (obj[1] !== undefined) { - $ERROR('#4: var obj = {}; obj.shift = Array.prototype.shift; obj[0] = "x" obj[1] = "y"; obj.length = -4294967294; obj.shift(); obj[1] === undefined. Actual: ' + (obj[1])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.9_Array_prototype_shift/S15.4.4.9_A4_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.9_Array_prototype_shift/S15.4.4.9_A4_T1.js deleted file mode 100644 index 666562533..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.9_Array_prototype_shift/S15.4.4.9_A4_T1.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.9_A4_T1; - * @section: 15.4.4.9, 8.6.2.1, 8.6.2.5; - * @assertion: [[Get]], [[Delete]] from not an inherited property; - * @description: [[Prototype]] of Array instance is Array.prototype, [[Prototype] of Array.prototype is Object.prototype; -*/ - -Array.prototype[1] = 1; -x = [0]; -x.length = 2; - -//CHECK#1 -var shift = x.shift(); -if (shift !== 0) { - $ERROR('#1: Array.prototype[1] = 1; x = [0]; x.length = 2; x.shift() === 0. Actual: ' + (shift)); -} - -//CHECK#2 -if (x[0] !== 1) { - $ERROR('#2: Array.prototype[1] = 1; x = [0]; x.length = 2; x.shift(); x[0] === 1. Actual: ' + (x[0])); -} - -//CHECK#3 -if (x[1] !== 1) { - $ERROR('#3: Array.prototype[1] = 1; x = [0]; x.length = 2; x.shift(); x[1] === 1. Actual: ' + (x[1])); -} - -Object.prototype[1] = 1; -Object.prototype.length = 2; -Object.prototype.shift = Array.prototype.shift; -x = {0:0}; - -//CHECK#4 -var shift = x.shift(); -if (shift !== 0) { - $ERROR('#4: Object.prototype[1] = 1; Object.prototype.length = 2; Object.prototype.shift = Array.prototype.shift; x = {0:0}; x.shift() === 0. Actual: ' + (shift)); -} - -//CHECK#5 -if (x[0] !== 1) { - $ERROR('#5: Object.prototype[1] = 1; Object.prototype.length = 2; Object.prototype.shift = Array.prototype.shift; x = {0:0}; x.shift(); x[0] === 1. Actual: ' + (x[0])); -} - -//CHECK#6 -if (x[1] !== 1) { - $ERROR('#6: Object.prototype[1] = 1; Object.prototype.length = 2; Object.prototype.shift = Array.prototype.shift; x = {0:0}; x.shift(); x[1] === 1. Actual: ' + (x[1])); -} - -//CHECK#7 -if (x.length !== 1) { - $ERROR('#7: Object.prototype[1] = 1; Object.prototype.length = 2; Object.prototype.shift = Array.prototype.shift; x = {0:0}; x.shift(); x.length === 1. Actual: ' + (x.length)); -} - -//CHECK#8 -delete x.length; -if (x.length !== 2) { - $ERROR('#8: Object.prototype[1] = 1; Object.prototype.length = 2; Object.prototype.shift = Array.prototype.shift; x = {0:0}; x.shift(); delete x; x.length === 2. Actual: ' + (x.length)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.9_Array_prototype_shift/S15.4.4.9_A4_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.9_Array_prototype_shift/S15.4.4.9_A4_T2.js deleted file mode 100644 index 71c69c26c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.9_Array_prototype_shift/S15.4.4.9_A4_T2.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.9_A4_T2; - * @section: 15.4.4.9, 8.6.2.1; - * @assertion: [[Get]], [[Delete]] from not an inherited property; - * @description: [[Prototype]] of Array instance is Array.prototype, [[Prototype] of Array.prototype is Object.prototype; -*/ - -Array.prototype[1] = -1; -x = [0,1]; -x.length = 2; - -//CHECK#1 -var shift = x.shift(); -if (shift !== 0) { - $ERROR('#1: Array.prototype[1] = -1; x = [0,1]; x.length = 2; x.shift() === 0. Actual: ' + (shift)); -} - -//CHECK#2 -if (x[0] !== 1) { - $ERROR('#2: Array.prototype[1] = -1; x = [0,1]; x.length = 2; x.shift(); x[0] === 1. Actual: ' + (x[0])); -} - -//CHECK#3 -if (x[1] !== -1) { - $ERROR('#3: Array.prototype[1] = -1; x = [0,1]; x.length = 2; x.shift(); x[1] === -1. Actual: ' + (x[1])); -} - -Object.prototype[1] = -1; -Object.prototype.length = 2; -Object.prototype.shift = Array.prototype.shift; -x = {0:0,1:1}; - -//CHECK#4 -var shift = x.shift(); -if (shift !== 0) { - $ERROR('#4: Object.prototype[1] = -1; Object.prototype.length = 2; Object.prototype.shift = Array.prototype.shift; x = {0:0,1:1}; x.shift() === 0. Actual: ' + (shift)); -} - -//CHECK#5 -if (x[0] !== 1) { - $ERROR('#5: Object.prototype[1] = -1; Object.prototype.length = 2; Object.prototype.shift = Array.prototype.shift; x = {0:0,1:1}; x.shift(); x[0] === 1. Actual: ' + (x[0])); -} - -//CHECK#6 -if (x[1] !== -1) { - $ERROR('#6: Object.prototype[1] = -1; Object.prototype.length = 2; Object.prototype.shift = Array.prototype.shift; x = {0:0,1:1}; x.shift(); x[1] === -1. Actual: ' + (x[1])); -} - -//CHECK#7 -if (x.length !== 1) { - $ERROR('#7: Object.prototype[1] = -1; Object.prototype.length = 2; Object.prototype.shift = Array.prototype.shift; x = {0:0,1:1}; x.shift(); x.length === 1. Actual: ' + (x.length)); -} - -//CHECK#8 -delete x.length; -if (x.length !== 2) { - $ERROR('#8: Object.prototype[1] = -1; Object.prototype.length = 2; Object.prototype.shift = Array.prototype.shift; x = {0:0,1:1}; x.shift(); delete x; x.length === 2. Actual: ' + (x.length)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.9_Array_prototype_shift/S15.4.4.9_A5.1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.9_Array_prototype_shift/S15.4.4.9_A5.1.js deleted file mode 100644 index abef9b8eb..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.9_Array_prototype_shift/S15.4.4.9_A5.1.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.9_A5.1; -* @section: 15.4.4.9, 15.2.4.7, 12.6.4; -* @assertion: The length property of shift has the attribute DontEnum; -* @description: Checking use propertyIsEnumerable, for-in; -*/ - - -//CHECK#1 -if (Array.prototype.shift.propertyIsEnumerable('length') !== false) { - $ERROR('#1: Array.prototype.shift.propertyIsEnumerable(\'length\') === false. Actual: ' + (Array.prototype.shift.propertyIsEnumerable('length'))); -} - -//CHECK#2 -result = true; -for (p in Array.shift){ - if (p === "length") { - result = false; -} -} - -if (result !== true) { - $ERROR('#2: result = true; for (p in Array.shift) { if (p === "length") result = false; } result === true;'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.9_Array_prototype_shift/S15.4.4.9_A5.2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.9_Array_prototype_shift/S15.4.4.9_A5.2.js deleted file mode 100644 index c7f113fef..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.9_Array_prototype_shift/S15.4.4.9_A5.2.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.9_A5.2; -* @section: 15.4.4.9, 15.2.4.5, 11.4.1; -* @assertion: The length property of shift has the attribute DontDelete; -* @description: Checking use hasOwnProperty, delete; -*/ - -//CHECK#1 -if (Array.prototype.shift.hasOwnProperty('length') !== true) { - $FAIL('#1: Array.prototype.shift.hasOwnProperty(\'length\') === true. Actual: ' + (Array.prototype.shift.hasOwnProperty('length'))); -} - -delete Array.prototype.shift.length; - -//CHECK#2 -if (Array.prototype.shift.hasOwnProperty('length') !== true) { - $ERROR('#2: delete Array.prototype.shift.length; Array.prototype.shift.hasOwnProperty(\'length\') === true. Actual: ' + (Array.prototype.shift.hasOwnProperty('length'))); -} - -//CHECK#3 -if (Array.prototype.shift.length === undefined) { - $ERROR('#3: delete Array.prototype.shift.length; Array.prototype.shift.length !== undefined'); -} - - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.9_Array_prototype_shift/S15.4.4.9_A5.3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.9_Array_prototype_shift/S15.4.4.9_A5.3.js deleted file mode 100644 index 541f06ae0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.9_Array_prototype_shift/S15.4.4.9_A5.3.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.9_A5.3; -* @section: 15.4.4.9; -* @assertion: The length property of shift has the attribute ReadOnly; -* @description: Checking if varying the length property fails; -*/ - -//CHECK#1 -x = Array.prototype.shift.length; -Array.prototype.shift.length = Infinity; -if (Array.prototype.shift.length !== x) { - $ERROR('#1: x = Array.prototype.shift.length; Array.prototype.shift.length = Infinity; Array.prototype.shift.length === x. Actual: ' + (Array.prototype.shift.length)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.9_Array_prototype_shift/S15.4.4.9_A5.4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.9_Array_prototype_shift/S15.4.4.9_A5.4.js deleted file mode 100644 index 1ddbeaa2a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.9_Array_prototype_shift/S15.4.4.9_A5.4.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.9_A5.4; -* @section: 15.4.4.9; -* @assertion: The length property of shift is 0; -* @description: shift.length === 1; -*/ - -//CHECK#1 -if (Array.prototype.shift.length !== 0) { - $ERROR('#1: Array.prototype.shift.length === 0. Actual: ' + (Array.prototype.shift.length)); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.9_Array_prototype_shift/S15.4.4.9_A5.5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.9_Array_prototype_shift/S15.4.4.9_A5.5.js deleted file mode 100644 index b6930e4ba..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.9_Array_prototype_shift/S15.4.4.9_A5.5.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.9_A5.5; -* @section: 15.4.4.9, 15.2.4.7, 12.6.4; -* @assertion: The shift property of Array has the attribute DontEnum; -* @description: Checking use propertyIsEnumerable, for-in; -*/ - - -//CHECK#1 -if (Array.propertyIsEnumerable('shift') !== false) { - $ERROR('#1: Array.propertyIsEnumerable(\'shift\') === false. Actual: ' + (Array.propertyIsEnumerable('shift'))); -} - -//CHECK#2 -result = true; -for (p in Array){ - if (p === "shift") { - result = false; -} -} - -if (result !== true) { - $ERROR('#2: result = true; for (p in Array) { if (p === "shift") result = false; } result === true;'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.9_Array_prototype_shift/S15.4.4.9_A5.6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.9_Array_prototype_shift/S15.4.4.9_A5.6.js deleted file mode 100644 index aa864a47f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.9_Array_prototype_shift/S15.4.4.9_A5.6.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.9_A5.6; -* @section: 15.4.4.9; -* @assertion: The shift property of Array has not prototype property; -* @description: Checking Array.prototype.shift.prototype; -*/ - -//CHECK#1 -if (Array.prototype.shift.prototype !== undefined) { - $ERROR('#1: Array.prototype.shift.prototype === undefined. Actual: ' + (Array.prototype.shift.prototype)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.9_Array_prototype_shift/S15.4.4.9_A5.7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.9_Array_prototype_shift/S15.4.4.9_A5.7.js deleted file mode 100644 index d634f6c9e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/15.4.4.9_Array_prototype_shift/S15.4.4.9_A5.7.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.4.4.9_A5.7; -* @section: 15.4.4.9, 11.2.2; -* @assertion: The shift property of Array can't be used as constructor; -* @description: If property does not implement the internal [[Construct]] method, throw a TypeError exception; -*/ - -//CHECK#1 - -try { - new Array.prototype.shift(); - $ERROR('#1.1: new Array.prototype.shift() throw TypeError. Actual: ' + (new Array.prototype.shift())); -} catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#1.2: new Array.prototype.shift() throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/S15.4.4_A1.1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/S15.4.4_A1.1_T1.js deleted file mode 100644 index c45295ce4..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/S15.4.4_A1.1_T1.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4_A1.1_T1; - * @section: 15.4.4, 15.2.4.5; - * @assertion: The value of the internal [[Prototype]] property of - * the Array prototype object is the Object prototype object; - * @description: Create new property of Function.prototype. When Array.prototype object has this property; -*/ - -Object.prototype.myproperty = 1; - -//CHECK#1 -if (Array.prototype.myproperty !== 1) { - $ERROR('#1: Object.prototype.myproperty = 1; Array.prototype.myproperty === 1. Actual: ' + (Array.prototype.myproperty)); -} - -//CHECK#2 -if (Array.prototype.hasOwnProperty('myproperty') !== false) { - $ERROR('#2: Object.prototype.myproperty = 1; Array.prototype.hasOwnProperty(\'myproperty\') === false. Actual: ' + (Array.prototype.hasOwnProperty('myproperty'))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/S15.4.4_A1.1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/S15.4.4_A1.1_T2.js deleted file mode 100644 index 673250971..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/S15.4.4_A1.1_T2.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4_A1.1_T2; - * @section: 15.4.4, 11.4.1; - * @assertion: The value of the internal [[Prototype]] property of - * the Array prototype object is the Object prototype object; - * @description: delete Array.prototype.toString; -*/ - -//CHECK#1 -delete Array.prototype.toString; -if (Array.prototype.toString() !== "[object " + "Array" + "]") { - $ERROR('#1: delete Array.prototype.toString; var Array.prototype = Object(); Array.prototype.toString() === "[object " + "Array" + "]". Actual: ' + (Array.prototype.toString())); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/S15.4.4_A1.1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/S15.4.4_A1.1_T3.js deleted file mode 100644 index 30c290397..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/S15.4.4_A1.1_T3.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4_A1.1_T3; - * @section: 15.4.4, 15.2.4.6; - * @assertion: The value of the internal [[Prototype]] property of - * the Array prototype object is the Object prototype object; - * @description: Checking use isPrototypeOf; -*/ - -//CHECK#1 -if (Object.prototype.isPrototypeOf(Array.prototype) !== true) { - $ERROR('#1: Object.prototype.isPrototypeOf(Array.prototype) === true. Actual: ' + (Object.prototype.isPrototypeOf(Array.prototype))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/S15.4.4_A1.2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/S15.4.4_A1.2_T1.js deleted file mode 100644 index 67a083590..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/S15.4.4_A1.2_T1.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4_A1.2_T1; - * @section: 15.4.4, 15.2.4.2; - * @assertion: The [[Class]] property of the Array prototype object is set to "Array"; - * @description: Checking use Object.prototype.toString; -*/ - -//CHECK#1 -Array.prototype.getClass = Object.prototype.toString; -if (Array.prototype.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: Array.prototype.getClass = Object.prototype.toString; Array.prototype is Array object. Actual: ' + (Array.prototype.getClass())); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/S15.4.4_A1.3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/S15.4.4_A1.3_T1.js deleted file mode 100644 index d35d2e90c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/S15.4.4_A1.3_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4_A1.3_T1; - * @section: 15.4.4; - * @assertion: Array prototype object has length property whose value is +0; - * @description: Array.prototype.length === 0; -*/ - -//CHECK#1 -if (Array.prototype.length !== 0) { - $ERROR('#1.1: Array.prototype.length === 0. Actual: ' + (Array.prototype.length)); -} else { - if (1 / Array.prototype.length !== Number.POSITIVE_INFINITY) { - $ERROR('#1.2: Array.prototype.length === +0. Actual: ' + (Array.prototype.length)); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/S15.4.4_A2.1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/S15.4.4_A2.1_T1.js deleted file mode 100644 index ebeb4906d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/S15.4.4_A2.1_T1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4_A2.1_T1; - * @section: 15.4.4, 15.2.4.5; - * @assertion: The Array prototype object does not have a valueOf property of - * its own; however, it inherits the valueOf property from the valueOf - * property from the Object prototype Object; - * @description: Checking use hasOwnProperty; -*/ - -//CHECK#1 -if (Array.prototype.hasOwnProperty('valueOf') !== false) { - $ERROR('#1: Array.prototype.hasOwnProperty(\'valueOf\') === false. Actual: ' + (Array.prototype.hasOwnProperty('valueOf'))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/S15.4.4_A2.1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/S15.4.4_A2.1_T2.js deleted file mode 100644 index 636575696..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.4_Properties_of_the_Array_Prototype_Object/S15.4.4_A2.1_T2.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4_A2.1_T2; - * @section: 15.4.4; - * @assertion: The Array prototype object does not have a valueOf property of - * its own; however, it inherits the valueOf property from the valueOf - * property from the Object prototype Object; - * @description: Change valueOf property of Object.prototype. When Array.prototype.valueOf also change; -*/ - -Object.prototype.valueOf = 1; - -//CHECK#1 -if (Array.prototype.valueOf !== 1) { - $ERROR('#1: Object.prototype.valueOf = 1; Array.prototype.valueOf === 1. Actual: ' + (Array.prototype.valueOf)); -} - -//CHECK#2 -x = new Array(); -if (x.valueOf !== 1) { - $ERROR('#1: Object.prototype.valueOf = 1; x = new Array(); x.valueOf === 1. Actual: ' + (x.valueOf)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.5_Properties_of_Array_Instances/15.4.5.1_Put/S15.4.5.1_A1.1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.5_Properties_of_Array_Instances/15.4.5.1_Put/S15.4.5.1_A1.1_T1.js deleted file mode 100644 index 545722d0a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.5_Properties_of_Array_Instances/15.4.5.1_Put/S15.4.5.1_A1.1_T1.js +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.5.1_A1.1_T1; - * @section: 15.4.5.1, 15.4; - * @assertion: If ToUint32(length) !== ToNumber(length), throw RangeError; - * @description: length in [4294967296, -1, 1.5]; -*/ - -//CHECK#1 -try { - x = []; - x.length = 4294967296; - $ERROR('#1.1: x = []; x.length = 4294967296 throw RangeError. Actual: x.length === ' + (x.length)); -} catch(e) { - if ((e instanceof RangeError) !== true) { - $ERROR('#1.2: x = []; x.length = 4294967296 throw RangeError. Actual: ' + (e)); - } -} - -//CHECK#2 -try { - x = []; - x.length = -1; - $ERROR('#2.1: x = []; x.length = -1 throw RangeError. Actual: x.length === ' + (x.length)); -} catch(e) { - if ((e instanceof RangeError) !== true) { - $ERROR('#2.2: x = []; x.length = -1 throw RangeError. Actual: ' + (e)); - } -} - -//CHECK#3 -try { - x = []; - x.length = 1.5; - $ERROR('#3.1: x = []; x.length = 1.5 throw RangeError. Actual: x.length === ' + (x.length)); -} catch(e) { - if ((e instanceof RangeError) !== true) { - $ERROR('#3.2: x = []; x.length = 1.5 throw RangeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.5_Properties_of_Array_Instances/15.4.5.1_Put/S15.4.5.1_A1.1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.5_Properties_of_Array_Instances/15.4.5.1_Put/S15.4.5.1_A1.1_T2.js deleted file mode 100644 index 110edc643..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.5_Properties_of_Array_Instances/15.4.5.1_Put/S15.4.5.1_A1.1_T2.js +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.5.1_A1.1_T2; - * @section: 15.4.5.1, 15.4; - * @assertion: If ToUint32(length) !== ToNumber(length), throw RangeError; - * @description: length in [NaN, Infinity, -Infinity, undefined]; -*/ - -//CHECK#1 -try { - x = []; - x.length = NaN; - $ERROR('#1.1: x = []; x.length = NaN throw RangeError. Actual: x.length === ' + (x.length)); -} catch(e) { - if ((e instanceof RangeError) !== true) { - $ERROR('#1.2: x = []; x.length = NaN throw RangeError. Actual: ' + (e)); - } -} - -//CHECK#2 -try { - x = []; - x.length = Number.POSITIVE_INFINITY; - $ERROR('#2.1: x = []; x.length = Number.POSITIVE_INFINITY throw RangeError. Actual: x.length === ' + (x.length)); -} catch(e) { - if ((e instanceof RangeError) !== true) { - $ERROR('#2.2: x = []; x.length = Number.POSITIVE_INFINITY throw RangeError. Actual: ' + (e)); - } -} - -//CHECK#3 -try { - x = []; - x.length = Number.NEGATIVE_INFINITY; - $ERROR('#3.1: x = []; x.length = Number.NEGATIVE_INFINITY throw RangeError. Actual: x.length === ' + (x.length)); -} catch(e) { - if ((e instanceof RangeError) !== true) { - $ERROR('#3.2: x = []; x.length = Number.NEGATIVE_INFINITY throw RangeError. Actual: ' + (e)); - } -} - -//CHECK#4 -try { - x = []; - x.length = undefined; - $ERROR('#4.1: x = []; x.length = undefined throw RangeError. Actual: x.length === ' + (x.length)); -} catch(e) { - if ((e instanceof RangeError) !== true) { - $ERROR('#4.2: x = []; x.length = undefined throw RangeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.5_Properties_of_Array_Instances/15.4.5.1_Put/S15.4.5.1_A1.2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.5_Properties_of_Array_Instances/15.4.5.1_Put/S15.4.5.1_A1.2_T1.js deleted file mode 100644 index 0d9c38732..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.5_Properties_of_Array_Instances/15.4.5.1_Put/S15.4.5.1_A1.2_T1.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.5.1_A1.2_T1; - * @section: 15.4.5.1, 15.4; - * @assertion: For every integer k that is less than the value of - * the length property of A but not less than ToUint32(length), - * if A itself has a property (not an inherited property) named ToString(k), - * then delete that property; - * @description: Change length of array; -*/ - -//CHECK#1 -x = [0,,2,,4]; -x.length = 4; -if (x[4] !== undefined) { - $ERROR('#1: x = [0,,2,,4]; x.length = 4; x[4] === undefined. Actual: ' + (x[4])); -} - -//CHECK#2 -x.length = 3; -if (x[3] !== undefined) { - $ERROR('#2: x = [0,,2,,4]; x.length = 4; x.length = 3; x[3] === undefined. Actual: ' + (x[3])); -} - -//CHECK#3 -if (x[2] !== 2) { - $ERROR('#3: x = [0,,2,,4]; x.length = 4; x.length = 3; x[2] === 2. Actual: ' + (x[2])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.5_Properties_of_Array_Instances/15.4.5.1_Put/S15.4.5.1_A1.2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.5_Properties_of_Array_Instances/15.4.5.1_Put/S15.4.5.1_A1.2_T2.js deleted file mode 100644 index f23890a99..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.5_Properties_of_Array_Instances/15.4.5.1_Put/S15.4.5.1_A1.2_T2.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.5.1_A1.2_T2; - * @section: 15.4.5.1, 15.4; - * @assertion: For every integer k that is less than the value of - * the length property of A but not less than ToUint32(length), - * if A itself has a property (not an inherited property) named ToString(k), - * then delete that property; - * @description: Checking an inherited property; -*/ - -//CHECK#1 -Array.prototype[2] = -1; -x = [0,1,2]; -if (x[2] !== 2) { - $ERROR('#1: Array.prototype[2] = -1; x = [0,1,3]; x[2] === 2. Actual: ' + (x[2])); -} - -//CHECK#2 -x.length = 2; -if (x[2] !== -1) { - $ERROR('#2: Array.prototype[2] = -1; x = [0,1,3]; x.length = 2; x[2] === -1. Actual: ' + (x[2])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.5_Properties_of_Array_Instances/15.4.5.1_Put/S15.4.5.1_A1.2_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.5_Properties_of_Array_Instances/15.4.5.1_Put/S15.4.5.1_A1.2_T3.js deleted file mode 100644 index 6e6aef993..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.5_Properties_of_Array_Instances/15.4.5.1_Put/S15.4.5.1_A1.2_T3.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.5.1_A1.2_T3; - * @section: 15.4.5.1, 15.4, 15.2.4.5; - * @assertion: For every integer k that is less than the value of - * the length property of A but not less than ToUint32(length), - * if A itself has a property (not an inherited property) named ToString(k), - * then delete that property; - * @description: Checking an inherited property; -*/ - -//CHECK#1 -Array.prototype[2] = 2; -x = [0,1]; -x.length = 3; -if (x.hasOwnProperty('2') !== false) { - $ERROR('#1: Array.prototype[2] = 2; x = [0,1]; x.length = 3; x.hasOwnProperty(\'2\') === false. Actual: ' + (x.hasOwnProperty('2'))); -} - -//CHECK#2 -x.length = 2; -if (x[2] !== 2) { - $ERROR('#2: Array.prototype[2] = 2; x = [0,1]; x.length = 3; x.length = 2; x[2] === 2. Actual: ' + (x[2])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.5_Properties_of_Array_Instances/15.4.5.1_Put/S15.4.5.1_A1.3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.5_Properties_of_Array_Instances/15.4.5.1_Put/S15.4.5.1_A1.3_T1.js deleted file mode 100644 index fea72386b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.5_Properties_of_Array_Instances/15.4.5.1_Put/S15.4.5.1_A1.3_T1.js +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.5.1_A1.3_T1; - * @section: 15.4.5.1, 15.4; - * @assertion: Set the value of property length of A to Uint32(length); - * @description: length is object or primitve; -*/ - -//CHECK#1 -x = []; -x.length = true; -if (x.length !== 1) { - $ERROR('#1: x = []; x.length = true; x.length === 1. Actual: ' + (x.length)); -} - -//CHECK#2 -x = [0]; -x.length = null; -if (x.length !== 0) { - $ERROR('#2: x = [0]; x.length = null; x.length === 0. Actual: ' + (x.length)); -} - -//CHECK#3 -x = [0]; -x.length = new Boolean(false); -if (x.length !== 0) { - $ERROR('#3: x = [0]; x.length = new Boolean(false); x.length === 0. Actual: ' + (x.length)); -} - -//CHECK#4 -x = []; -x.length = new Number(1); -if (x.length !== 1) { - $ERROR('#4: x = []; x.length = new Number(1); x.length === 1. Actual: ' + (x.length)); -} - -//CHECK#5 -x = []; -x.length = "1"; -if (x.length !== 1) { - $ERROR('#5: x = []; x.length = "1"; x.length === 1. Actual: ' + (x.length)); -} - -//CHECK#6 -x = []; -x.length = new String("1"); -if (x.length !== 1) { - $ERROR('#6: x = []; x.length = new String("1"); x.length === 1. Actual: ' + (x.length)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.5_Properties_of_Array_Instances/15.4.5.1_Put/S15.4.5.1_A1.3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.5_Properties_of_Array_Instances/15.4.5.1_Put/S15.4.5.1_A1.3_T2.js deleted file mode 100644 index 0f43dafcc..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.5_Properties_of_Array_Instances/15.4.5.1_Put/S15.4.5.1_A1.3_T2.js +++ /dev/null @@ -1,86 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.5.1_A1.3_T2; - * @section: 15.4.5.1, 15.4; - * @assertion: Set the value of property length of A to Uint32(length); - * @description: Uint32 use ToNumber and ToPrimitve; -*/ - -//CHECK#1 -x = []; -x.length = {valueOf: function() {return 2}}; -if (x.length !== 2) { - $ERROR('#1: x = []; x.length = {valueOf: function() {return 2}}; x.length === 2. Actual: ' + (x.length)); -} - -//CHECK#2 -x = []; -x.length = {valueOf: function() {return 2}, toString: function() {return 1}}; -if (x.length !== 2) { - $ERROR('#0: x = []; x.length = {valueOf: function() {return 2}, toString: function() {return 1}}; x.length === 2. Actual: ' + (x.length)); -} - -//CHECK#3 -x = []; -x.length = {valueOf: function() {return 2}, toString: function() {return {}}}; -if (x.length !== 2) { - $ERROR('#3: x = []; x.length = {valueOf: function() {return 2}, toString: function() {return {}}}; x.length === 2. Actual: ' + (x.length)); -} - -//CHECK#4 -try { - x = []; - x.length = {valueOf: function() {return 2}, toString: function() {throw "error"}}; - if (x.length !== 2) { - $ERROR('#4.1: x = []; x.length = {valueOf: function() {return 2}, toString: function() {throw "error"}}; x.length === ",". Actual: ' + (x.length)); - } -} -catch (e) { - if (e === "error") { - $ERROR('#4.2: x = []; x.length = {valueOf: function() {return 2}, toString: function() {throw "error"}}; x.length not throw "error"'); - } else { - $ERROR('#4.3: x = []; x.length = {valueOf: function() {return 2}, toString: function() {throw "error"}}; x.length not throw Error. Actual: ' + (e)); - } -} - -//CHECK#5 -x = []; -x.length = {toString: function() {return 1}}; -if (x.length !== 1) { - $ERROR('#5: x = []; x.length = {toString: function() {return 1}}; x.length === 1. Actual: ' + (x.length)); -} - -//CHECK#6 -x = []; -x.length = {valueOf: function() {return {}}, toString: function() {return 1}} -if (x.length !== 1) { - $ERROR('#6: x = []; x.length = {valueOf: function() {return {}}, toString: function() {return 1}}; x.length === 1. Actual: ' + (x.length)); -} - -//CHECK#7 -try { - x = []; - x.length = {valueOf: function() {throw "error"}, toString: function() {return 1}}; - x.length; - $ERROR('#7.1: x = []; x.length = {valueOf: function() {throw "error"}, toString: function() {return 1}}; x.length throw "error". Actual: ' + (x.length)); -} -catch (e) { - if (e !== "error") { - $ERROR('#7.2: x = []; x.length = {valueOf: function() {throw "error"}, toString: function() {return 1}}; x.length throw "error". Actual: ' + (e)); - } -} - -//CHECK#8 -try { - x = []; - x.length = {valueOf: function() {return {}}, toString: function() {return {}}}; - x.length; - $ERROR('#8.1: x = []; x.length = {valueOf: function() {return {}}, toString: function() {return {}}} x.length throw TypeError. Actual: ' + (x.length)); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#8.2: x = []; x.length = {valueOf: function() {return {}}, toString: function() {return {}}} x.length throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.5_Properties_of_Array_Instances/15.4.5.1_Put/S15.4.5.1_A2.1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.5_Properties_of_Array_Instances/15.4.5.1_Put/S15.4.5.1_A2.1_T1.js deleted file mode 100644 index 06ea4c483..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.5_Properties_of_Array_Instances/15.4.5.1_Put/S15.4.5.1_A2.1_T1.js +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.5.1_A2.1_T1; - * @section: 15.4.5.1, 15.4; - * @assertion: If P is not an array index, return - * (Create a property with name P, set its value to V and give it empty attributes); - * @description: P in [4294967295, -1, true]; -*/ - -//CHECK#1 -x = []; -x[4294967295] = 1; -if (x.length !== 0) { - $ERROR('#1.1: x = []; x[4294967295] = 1; x.length === 0. Actual: ' + (x.length)); -} - -if (x[4294967295] !== 1) { - $ERROR('#1.2: x = []; x[4294967295] = 1; x[4294967295] === 1. Actual: ' + (x[4294967295])); -} - -//CHECK#2 -x = []; -x[-1] = 1; -if (x.length !== 0) { - $ERROR('#2.1: x = []; x[-1] = 1; x.length === 0. Actual: ' + (x.length)); -} - -if (x[-1] !== 1) { - $ERROR('#2.2: x = []; x[-1] = 1; x[-1] === 1. Actual: ' + (x[-1])); -} - -//CHECK#3 -x = []; -x[true] = 1; -if (x.length !== 0) { - $ERROR('#3.1: x = []; x[true] = 1; x.length === 0. Actual: ' + (x.length)); -} - -if (x[true] !== 1) { - $ERROR('#3.2: x = []; x[true] = 1; x[true] === 1. Actual: ' + (x[true])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.5_Properties_of_Array_Instances/15.4.5.1_Put/S15.4.5.1_A2.2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.5_Properties_of_Array_Instances/15.4.5.1_Put/S15.4.5.1_A2.2_T1.js deleted file mode 100644 index c02a72f16..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.5_Properties_of_Array_Instances/15.4.5.1_Put/S15.4.5.1_A2.2_T1.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.5.1_A2.2_T1; - * @section: 15.4.5.1, 15.4; - * @assertion: If ToUint32(P) is less than the value of - * the length property of A, then return; - * @description: length === 100, P in [0, 98, 99]; -*/ - -//CHECK#1 -x = Array(100); -x[0] = 1; -if (x.length !== 100) { - $ERROR('#1: x = Array(100); x[0] = 1; x.length === 100. Actual: ' + (x.length)); -} - -//CHECK#2 -x[98] = 1; -if (x.length !== 100) { - $ERROR('#2: x = Array(100); x[0] = 1; x[98] = 1; x.length === 100. Actual: ' + (x.length)); -} - -//CHECK#3 -x[99] = 1; -if (x.length !== 100) { - $ERROR('#3: x = Array(100); x[0] = 1; x[98] = 1; x[99] = 1; x.length === 100. Actual: ' + (x.length)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.5_Properties_of_Array_Instances/15.4.5.1_Put/S15.4.5.1_A2.3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.5_Properties_of_Array_Instances/15.4.5.1_Put/S15.4.5.1_A2.3_T1.js deleted file mode 100644 index dd148aabc..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.5_Properties_of_Array_Instances/15.4.5.1_Put/S15.4.5.1_A2.3_T1.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.5.1_A2.3_T1; - * @section: 15.4.5.1, 15.4; - * @assertion: If ToUint32(P) is less than the value of - * the length property of A, change (or set) length to ToUint32(P)+1; - * @description: length = 100, P in [100, 199]; -*/ - -//CHECK#1 -x = Array(100); -x[100] = 1; -if (x.length !== 101) { - $ERROR('#1: x = Array(100); x[100] = 1; x.length === 101. Actual: ' + (x.length)); -} - -//CHECK#2 -x[199] = 1; -if (x.length !== 200) { - $ERROR('#2: x = Array(100); x[100] = 1; x[199] = 1; x.length === 100. Actual: ' + (x.length)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.5_Properties_of_Array_Instances/15.4.5.2_length/S15.4.5.2_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.5_Properties_of_Array_Instances/15.4.5.2_length/S15.4.5.2_A1_T1.js deleted file mode 100644 index cd6e86d26..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.5_Properties_of_Array_Instances/15.4.5.2_length/S15.4.5.2_A1_T1.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.5.2_A1_T1; - * @section: 15.4.5.2, 15.4; - * @assertion: Every Array object has a length property whose value is - * always a nonnegative integer less than 2^32. The value of the length property is - * numerically greater than the name of every property whose name is an array index; - * @description: Checking boundary points; -*/ - -//CHECK#1 -x = []; -if (x.length !== 0) { - $ERROR('#1: x = []; x.length === 0. Actual: ' + (x.length)); -} - -//CHECK#2 -x[0] = 1; -if (x.length !== 1) { - $ERROR('#2: x = []; x[1] = 1; x.length === 1. Actual: ' + (x.length)); -} - -//CHECK#3 -x[1] = 1; -if (x.length !== 2) { - $ERROR('#3: x = []; x[0] = 1; x[1] = 1; x.length === 2. Actual: ' + (x.length)); -} - -//CHECK#4 -x[2147483648] = 1; -if (x.length !== 2147483649) { - $ERROR('#4: x = []; x[0] = 1; x[1] = 1; x[2147483648] = 1; x.length === 2147483649. Actual: ' + (x.length)); -} - -//CHECK#5 -x[4294967294] = 1; -if (x.length !== 4294967295) { - $ERROR('#5: x = []; x[0] = 1; x[1] = 1; x[2147483648] = 1; x[42949672954] = 1; x.length === 4294967295. Actual: ' + (x.length)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.5_Properties_of_Array_Instances/15.4.5.2_length/S15.4.5.2_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.5_Properties_of_Array_Instances/15.4.5.2_length/S15.4.5.2_A1_T2.js deleted file mode 100644 index aeb4b5050..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.5_Properties_of_Array_Instances/15.4.5.2_length/S15.4.5.2_A1_T2.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.5.2_A1_T2; - * @section: 15.4.5.2, 15.4; - * @assertion: Every Array object has a length property whose value is - * always a nonnegative integer less than 2^32. The value of the length property is - * numerically greater than the name of every property whose name is an array index; - * @description: P = "2^32 - 1" is not index array; -*/ - -//CHECK#1 -x = []; -x[4294967295] = 1; -if (x.length !== 0) { - $ERROR('#1: x = []; x[4294967295] = 1; x.length === 0. Actual: ' + (x.length)); -} - -//CHECK#2 -y =[]; -y[1] = 1; -y[4294967295] = 1; -if (y.length !== 2) { - $ERROR('#2: y = []; y[1] = 1; y[4294967295] = 1; y.length === 2. Actual: ' + (y.length)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.5_Properties_of_Array_Instances/15.4.5.2_length/S15.4.5.2_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.5_Properties_of_Array_Instances/15.4.5.2_length/S15.4.5.2_A2_T1.js deleted file mode 100644 index 4bfe665be..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.5_Properties_of_Array_Instances/15.4.5.2_length/S15.4.5.2_A2_T1.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.5.2_A2_T1; - * @section: 15.4.5.2, 15.4; - * @assertion: If a property is added whose name is an array index, - * the length property is changed; - * @description: Checking length property; -*/ - -//CHECK#1 -x = []; -if (x.length !== 0) { - $ERROR('#1: x = []; x.length === 0. Actual: ' + (x.length)); -} - -//CHECK#2 -x[0] = 1; -if (x.length !== 1) { - $ERROR('#2: x = []; x[1] = 1; x.length === 1. Actual: ' + (x.length)); -} - -//CHECK#3 -x[1] = 1; -if (x.length !== 2) { - $ERROR('#3: x = []; x[0] = 1; x[1] = 1; x.length === 2. Actual: ' + (x.length)); -} - -//CHECK#4 -x[9] = 1; -if (x.length !== 10) { - $ERROR('#4: x = []; x[0] = 1; x[1] = 1; x[9] = 1; x.length === 10. Actual: ' + (x.length)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.5_Properties_of_Array_Instances/15.4.5.2_length/S15.4.5.2_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.5_Properties_of_Array_Instances/15.4.5.2_length/S15.4.5.2_A3_T1.js deleted file mode 100644 index 41242af05..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.5_Properties_of_Array_Instances/15.4.5.2_length/S15.4.5.2_A3_T1.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.5.2_A3_T1; - * @section: 15.4.5.2, 15.4; - * @assertion: If the length property is changed, every property whose name - * is an array index whose value is not smaller than the new length is automatically deleted; - * @description: If new length greater than the name of every property whose name - * is an array index; -*/ - -//CHECK#1 -x = []; -x.length = 1; -if (x.length !== 1) { - $ERROR('#1: x = []; x.length = 1; x.length === 1. Actual: ' + (x.length)); -} - -//CHECK#2 -x[5] = 1; -x.length = 10; -if (x.length !== 10) { - $ERROR('#2: x = []; x.length = 1; x[5] = 1; x.length = 10; x.length === 10. Actual: ' + (x.length)); -} - -//CHECK#3 -if (x[5] !== 1) { - $ERROR('#3: x = []; x.length = 1; x[5] = 1; x.length = 10; x[5] = 1'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.5_Properties_of_Array_Instances/15.4.5.2_length/S15.4.5.2_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.5_Properties_of_Array_Instances/15.4.5.2_length/S15.4.5.2_A3_T2.js deleted file mode 100644 index 0e515856d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.5_Properties_of_Array_Instances/15.4.5.2_length/S15.4.5.2_A3_T2.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.5.2_A3_T2; - * @section: 15.4.5.2, 15.4; - * @assertion: If the length property is changed, every property whose name - * is an array index whose value is not smaller than the new length is automatically deleted; - * @description: If new length greater than the name of every property whose name - * is an array index; -*/ - -//CHECK#1 -x = []; -x[1] = 1; -x[3] = 3; -x[5] = 5; -x.length = 4; -if (x.length !== 4) { - $ERROR('#1: x = []; x[1] = 1; x[3] = 3; x[5] = 5; x.length = 4; x.length === 4. Actual: ' + (x.length)); -} - -//CHECK#2 -if (x[5] !== undefined) { - $ERROR('#2: x = []; x[1] = 1; x[3] = 3; x[5] = 5; x.length = 4; x[5] === undefined. Actual: ' + (x[5])); -} - -//CHECK#3 -if (x[3] !== 3) { - $ERROR('#3: x = []; x[1] = 1; x[3] = 3; x[5] = 5; x.length = 4; x[3] === 3. Actual: ' + (x[3])); -} - -//CHECK#4 -x.length = new Number(6); -if (x[5] !== undefined) { - $ERROR('#4: x = []; x[1] = 1; x[3] = 3; x[5] = 5; x.length = 4; x.length = new Number(6); x[5] === undefined. Actual: ' + (x[5])); -} - -//CHECK#5 -x.length = 0; -if (x[0] !== undefined) { - $ERROR('#5: x = []; x[1] = 1; x[3] = 3; x[5] = 5; x.length = 4; x.length = new Number(6); x.length = 0; x[0] === undefined. Actual: ' + (x[0])); -} - -//CHECK#6 -x.length = 1; -if (x[1] !== undefined) { - $ERROR('#6: x = []; x[1] = 1; x[3] = 3; x[5] = 5; x.length = 4; x.length = new Number(6); x.length = 0; x.length = 1; x[1] === undefined. Actual: ' + (x[1])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.5_Properties_of_Array_Instances/15.4.5.2_length/S15.4.5.2_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.5_Properties_of_Array_Instances/15.4.5.2_length/S15.4.5.2_A3_T3.js deleted file mode 100644 index 2834d67ed..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.5_Properties_of_Array_Instances/15.4.5.2_length/S15.4.5.2_A3_T3.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.5.2_A3_T3; - * @section: 15.4.5.2, 15.4.2.2; - * @assertion: If the length property is changed, every property whose name - * is an array index whose value is not smaller than the new length is automatically deleted; - * @description: [[Put]] (length, 4294967296); -*/ - -//CHECK#1 -x = []; -x.length = 4294967295; -if (x.length !== 4294967295) { - $ERROR('#1: x = []; x.length = 4294967295; x.length === 4294967295'); -} - -//CHECK#2 -try { - x = []; - x.length = 4294967296; - $ERROR('#2.1: x = []; x.length = 4294967296 throw RangeError. Actual: x.length === ' + (x.length)); -} catch(e) { - if ((e instanceof RangeError) !== true) { - $ERROR('#2.2: x = []; x.length = 4294967296 throw RangeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.5_Properties_of_Array_Instances/15.4.5.2_length/S15.4.5.2_A3_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.5_Properties_of_Array_Instances/15.4.5.2_length/S15.4.5.2_A3_T4.js deleted file mode 100644 index efa0e1fb3..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/15.4.5_Properties_of_Array_Instances/15.4.5.2_length/S15.4.5.2_A3_T4.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.5.2_A3_T4; - * @section: 15.4.5.2, 15.4.2.2; - * @assertion: If the length property is changed, every property whose name - * is an array index whose value is not smaller than the new length is automatically deleted; - * @description: If new length greater than the name of every property whose name - * is an array index; -*/ - -//CHECK#1 -x = [0,1,2]; -x[4294967294] = 4294967294; -x.length = 2; - -//CHECK#1 -if (x[0] !== 0) { - $ERROR('#1: x = [0,1,2]; x[4294967294] = 4294967294; x.length = 2; x[0] === 0. Actual: ' + (x[0])); -} - -//CHECK#2 -if (x[1] !== 1) { - $ERROR('#2: x = [0,1,2]; x[4294967294] = 4294967294; x.length = 2; x[1] === 1. Actual: ' + (x[1])); -} - -//CHECK#3 -if (x[2] !== undefined) { - $ERROR('#3: x = [0,1,2]; x[4294967294] = 4294967294; x.length = 2; x[2] === undefined. Actual: ' + (x[2])); -} - -//CHECK#4 -if (x[4294967294] !== undefined) { - $ERROR('#4: x = [0,1,2]; x[4294967294] = 4294967294; x.length = 2; x[4294967294] === undefined. Actual: ' + (x[4294967294])); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/S15.4_A1.1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/S15.4_A1.1_T1.js deleted file mode 100644 index 1fe2ba1ab..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/S15.4_A1.1_T1.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4_A1.1_T1; - * @section: 15.4, 11.2.1; - * @assertion: A property name P (in the form of a string value) is an array index - * if and only if ToString(ToUint32(P)) is equal to P and ToUint32(P) is not equal to 2^32 - 1; - * @description: Checking for boolean primitive; -*/ - -//CHECK#1 -x = []; -x[true] = 1; -if (x[1] !== undefined) { - $ERROR('#1: x = []; x[true] = 1; x[1] === undefined. Actual: ' + (x[1])); -} - -//CHECK#2 -if (x["true"] !== 1) { - $ERROR('#2: x = []; x[true] = 1; x["true"] === 1. Actual: ' + (x["true"])); -} - -//CHECK#3 -x[false] = 0; -if (x[0] !== undefined) { - $ERROR('#3: x = []; x[true] = 1; x[false] = 0; x[0] === undefined. Actual: ' + (x[0])); -} - -//CHECK#4 -if (x["false"] !== 0) { - $ERROR('#4: x = []; x[false] = 1; x["false"] === 0. Actual: ' + (x["false"])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/S15.4_A1.1_T10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/S15.4_A1.1_T10.js deleted file mode 100644 index 67d26fca8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/S15.4_A1.1_T10.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4_A1.1_T10; - * @section: 15.4, 11.2.1; - * @assertion: A property name P (in the form of a string value) is an array index - * if and only if ToString(ToUint32(P)) is equal to P and ToUint32(P) is not equal to 2^32 - 1; - * @description: Array index is power of two; -*/ - -//CHECK# -x = []; -k = 1; -for (i = 0; i < 32; i++) { - k = k * 2; - x[k - 2] = k; -} - -k = 1; -for (i = 0; i < 32; i++) { - k = k * 2; - if (x[k - 2] !== k) { - $ERROR('#' + (k - 2) + ': '); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/S15.4_A1.1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/S15.4_A1.1_T2.js deleted file mode 100644 index 3d44721d2..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/S15.4_A1.1_T2.js +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4_A1.1_T2; - * @section: 15.4, 11.2.1; - * @assertion: A property name P (in the form of a string value) is an array index - * if and only if ToString(ToUint32(P)) is equal to P and ToUint32(P) is not equal to 2^32 - 1; - * @description: Checking for number primitive; -*/ - -//CHECK#1 -x = []; -x[NaN] = 1; -if (x[0] !== undefined) { - $ERROR('#1: x = []; x[NaN] = 1; x[0] === undefined. Actual: ' + (x[0])); -} - -//CHECK#2 -if (x["NaN"] !== 1) { - $ERROR('#2: x = []; x[NaN] = 1; x["NaN"] === 1. Actual: ' + (x["NaN"])); -} - -//CHECK#3 -y = []; -y[Number.POSITIVE_INFINITY] = 1; -if (y[0] !== undefined) { - $ERROR('#3: y = []; y[Number.POSITIVE_INFINITY] = 1; y[0] === undefined. Actual: ' + (y[0])); -} - -//CHECK#4 -if (y["Infinity"] !== 1) { - $ERROR('#4: y = []; y[Number.POSITIVE_INFINITY] = 1; y["Infinity"] === 1. Actual: ' + (y["Infinity"])); -} - -//CHECK#5 -z = []; -z[Number.NEGATIVE_INFINITY] = 1; -if (z[0] !== undefined) { - $ERROR('#5: z = []; z[Number.NEGATIVE_INFINITY] = 1; z[0] === undefined. Actual: ' + (z[0])); -} - -//CHECK#6 -if (z["-Infinity"] !== 1) { - $ERROR('#6: z = []; z[Number.NEGATIVE_INFINITY] = 1; z["-Infinity"] === 1. Actual: ' + (z["-Infinity"])); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/S15.4_A1.1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/S15.4_A1.1_T3.js deleted file mode 100644 index 728208330..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/S15.4_A1.1_T3.js +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4_A1.1_T3; - * @section: 15.4, 11.2.1; - * @assertion: A property name P (in the form of a string value) is an array index - * if and only if ToString(ToUint32(P)) is equal to P and ToUint32(P) is not equal to 2^32 - 1; - * @description: Checking for number primitive; -*/ - -//CHECK#1 -x = []; -x[4294967296] = 1; -if (x[0] !== undefined) { - $ERROR('#1: x = []; x[4294967296] = 1; x[0] === undefined. Actual: ' + (x[0])); -} - -//CHECK#2 -if (x["4294967296"] !== 1) { - $ERROR('#2: x = []; x[4294967296] = 1; x["4294967296"] === 1. Actual: ' + (x["4294967296"])); -} - -//CHECK#3 -y = []; -y[4294967297] = 1; -if (y[1] !== undefined) { - $ERROR('#3: y = []; y[4294967297] = 1; y[1] === undefined. Actual: ' + (y[1])); -} - -//CHECK#4 -if (y["4294967297"] !== 1) { - $ERROR('#4: y = []; y[4294967297] = 1; y["4294967297"] === 1. Actual: ' + (y["4294967297"])); -} - -//CHECK#5 -z = []; -z[1.1] = 1; -if (z[1] !== undefined) { - $ERROR('#5: z = []; z[1.1] = 1; z[1] === undefined. Actual: ' + (z[1])); -} - -//CHECK#6 -if (z["1.1"] !== 1) { - $ERROR('#6: z = []; z[1.1] = 1; z["1.1"] === 1. Actual: ' + (z["1.1"])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/S15.4_A1.1_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/S15.4_A1.1_T4.js deleted file mode 100644 index 4199c8302..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/S15.4_A1.1_T4.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4_A1.1_T4; - * @section: 15.4, 11.2.1; - * @assertion: A property name P (in the form of a string value) is an array index - * if and only if ToString(ToUint32(P)) is equal to P and ToUint32(P) is not equal to 2^32 - 1; - * @description: Checking for string primitive; -*/ - -//CHECK#1 -x = []; -x["0"] = 0; -if (x[0] !== 0) { - $ERROR('#1: x = []; x["0"] = 0; x[0] === 0. Actual: ' + (x[0])); -} - -//CHECK#2 -y = []; -y["1"] = 1; -if (y[1] !== 1) { - $ERROR('#2: y = []; y["1"] = 1; y[1] === 1. Actual: ' + (y[1])); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/S15.4_A1.1_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/S15.4_A1.1_T5.js deleted file mode 100644 index c5dd4ab7e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/S15.4_A1.1_T5.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4_A1.1_T5; - * @section: 15.4, 11.2.1; - * @assertion: A property name P (in the form of a string value) is an array index - * if and only if ToString(ToUint32(P)) is equal to P and ToUint32(P) is not equal to 2^32 - 1; - * @description: Checking for null and undefined; -*/ - -//CHECK#1 -x = []; -x[null] = 0; -if (x[0] !== undefined) { - $ERROR('#1: x = []; x[null] = 1; x[0] === undefined. Actual: ' + (x[0])); -} - -//CHECK#2 -if (x["null"] !== 0) { - $ERROR('#2: x = []; x[null] = 1; x["null"] === 0. Actual: ' + (x["null"])); -} - -//CHECK#3 -y = []; -y[undefined] = 0; -if (y[0] !== undefined) { - $ERROR('#3: y = []; y[undefined] = 0; y[0] === undefined. Actual: ' + (y[0])); -} - -//CHECK#4 -if (y["undefined"] !== 0) { - $ERROR('#4: y = []; y[undefined] = 1; y["undefined"] === 0. Actual: ' + (y["undefined"])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/S15.4_A1.1_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/S15.4_A1.1_T6.js deleted file mode 100644 index 8c42aff94..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/S15.4_A1.1_T6.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4_A1.1_T6; - * @section: 15.4, 11.2.1; - * @assertion: A property name P (in the form of a string value) is an array index - * if and only if ToString(ToUint32(P)) is equal to P and ToUint32(P) is not equal to 2^32 - 1; - * @description: Checking for Boolean object; -*/ - -//CHECK#1 -x = []; -x[new Boolean(true)] = 1; -if (x[1] !== undefined) { - $ERROR('#1: x = []; x[new Boolean(true)] = 1; x[1] === undefined. Actual: ' + (x[1])); -} - -//CHECK#2 -if (x["true"] !== 1) { - $ERROR('#2: x = []; x[true] = 1; x["true"] === 1. Actual: ' + (x["true"])); -} - -//CHECK#3 -x[new Boolean(false)] = 0; -if (x[0] !== undefined) { - $ERROR('#3: x = []; x[true] = 1; x[new Boolean(false)] = 0; x[0] === undefined. Actual: ' + (x[0])); -} - -//CHECK#4 -if (x["false"] !== 0) { - $ERROR('#4: x = []; x[false] = 1; x["false"] === 0. Actual: ' + (x["false"])); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/S15.4_A1.1_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/S15.4_A1.1_T7.js deleted file mode 100644 index 7414dbdc1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/S15.4_A1.1_T7.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4_A1.1_T7; - * @section: 15.4, 11.2.1; - * @assertion: A property name P (in the form of a string value) is an array index - * if and only if ToString(ToUint32(P)) is equal to P and ToUint32(P) is not equal to 2^32 - 1; - * @description: Checking for Number object; -*/ - -//CHECK#1 -x = []; -x[new Number(0)] = 0; -if (x[0] !== 0) { - $ERROR('#1: x = []; x[new Number(0)] = 0; x[0] === 0. Actual: ' + (x[0])); -} - -//CHECK#2 -y = []; -y[new Number(1)] = 1; -if (y[1] !== 1) { - $ERROR('#2: y = []; y[new Number(1)] = 1; y[1] === 1. Actual: ' + (y[1])); -} - -//CHECK#3 -z = []; -z[new Number(1.1)] = 1; -if (z["1.1"] !== 1) { - $ERROR('#3: z = []; z[new Number(1.1)] = 1; z["1.1"] === 1. Actual: ' + (z["1.1"])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/S15.4_A1.1_T8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/S15.4_A1.1_T8.js deleted file mode 100644 index cf65e14f0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/S15.4_A1.1_T8.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4_A1.1_T8; - * @section: 15.4, 11.2.1; - * @assertion: A property name P (in the form of a string value) is an array index - * if and only if ToString(ToUint32(P)) is equal to P and ToUint32(P) is not equal to 2^32 - 1; - * @description: Checking for Number object; -*/ - -//CHECK#1 -x = []; -x[new String("0")] = 0; -if (x[0] !== 0) { - $ERROR('#1: x = []; x[new String("0")] = 0; x[0] === 0. Actual: ' + (x[0])); -} - -//CHECK#2 -y = []; -y[new String("1")] = 1; -if (y[1] !== 1) { - $ERROR('#2: y = []; y[new String("1")] = 1; y[1] === 1. Actual: ' + (y[1])); -} - -//CHECK#3 -z = []; -z[new String("1.1")] = 1; -if (z["1.1"] !== 1) { - $ERROR('#3: z = []; z[new String("1.1")] = 1; z["1.1"] === 1. Actual: ' + (z["1.1"])); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/S15.4_A1.1_T9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/S15.4_A1.1_T9.js deleted file mode 100644 index 2a94f09b0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.4_Array_Objects/S15.4_A1.1_T9.js +++ /dev/null @@ -1,93 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4_A1.1_T9; - * @section: 15.4, 11.2.1; - * @assertion: A property name P (in the form of a string value) is an array index - * if and only if ToString(ToUint32(P)) is equal to P and ToUint32(P) is not equal to 2^32 - 1; - * @description: If Type(value) is Object, evaluate ToPrimitive(value, String); -*/ - -//CHECK#1 -x = []; -var object = {valueOf: function() {return 1}}; -x[object] = 0; -if (x["[object Object]"] !== 0) { - $ERROR('#1: x = []; var object = {valueOf: function() {return 1}}; x[object] = 0; x["[object Object]"] === 0. Actual: ' + (x["[object Object]"])); -} - -//CHECK#2 -x = []; -var object = {valueOf: function() {return 1}, toString: function() {return 0}}; -x[object] = 0; -if (x[0] !== 0) { - $ERROR('#2: x = []; var object = {valueOf: function() {return 1}, toString: function() {return 0}}; x[object] = 0; x[0] === 0. Actual: ' + (x[0])); -} - -//CHECK#3 -x = []; -var object = {valueOf: function() {return 1}, toString: function() {return {}}}; -x[object] = 0; -if (x[1] !== 0) { - $ERROR('#3: x = []; var object = {valueOf: function() {return 1}, toString: function() {return {}}}; x[object] = 0; x[1] === 0. Actual: ' + (x[1])); -} - -//CHECK#4 -try { - x = []; - var object = {valueOf: function() {throw "error"}, toString: function() {return 1}}; - x[object] = 0; - if (x[1] !== 0) { - $ERROR('#4.1: x = []; var object = {valueOf: function() {throw "error"}, toString: function() {return 1}}; x[object] = 0; x[1] === 1. Actual: ' + (x[1])); - } -} -catch (e) { - if (e === "error") { - $ERROR('#4.2: x = []; var object = {valueOf: function() {throw "error"}, toString: function() {return 1}}; x[object] = 0; x[1] === 1. Actual: ' + ("error")); - } else { - $ERROR('#4.3: x = []; var object = {valueOf: function() {throw "error"}, toString: function() {return 1}}; x[object] = 0; x[1] === 1. Actual: ' + (e)); - } -} - -//CHECK#5 -x = []; -var object = {toString: function() {return 1}}; -x[object] = 0; -if (x[1] !== 0) { - $ERROR('#5: x = []; var object = {toString: function() {return 1}}; x[object] = 0; x[1] === 0. Actual: ' + (x[1])); -} - -//CHECK#6 -x = []; -var object = {valueOf: function() {return {}}, toString: function() {return 1}} -x[object] = 0; -if (x[1] !== 0) { - $ERROR('#6: x = []; var object = {valueOf: function() {return {}}, toString: function() {return 1}}; x[object] = 0; x[1] === 0. Actual: ' + (x[1])); -} - -//CHECK#7 -try { - x = []; - var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; - x[object]; - $ERROR('#7.1: x = []; var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; x[object] throw "error". Actual: ' + (x[object])); -} -catch (e) { - if (e !== "error") { - $ERROR('#7.2: x = []; var object = {valueOf: function() {return 1}, toString: function() {throw "error"}}; x[object] throw "error". Actual: ' + (e)); - } -} - -//CHECK#8 -try { - x = []; - var object = {valueOf: function() {return {}}, toString: function() {return {}}}; - x[object]; - $ERROR('#8.1: x = []; var object = {valueOf: function() {return {}}, toString: function() {return {}}}; x[object] throw TypeError. Actual: ' + (x[object])); -} -catch (e) { - if ((e instanceof TypeError) !== true) { - $ERROR('#8.2: x = []; var object = {valueOf: function() {return {}}, toString: function() {return {}}}; x[object] throw TypeError. Actual: ' + (e)); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.1_The_String_Constructor_Called_as_a_Function/S15.5.1.1_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.1_The_String_Constructor_Called_as_a_Function/S15.5.1.1_A1_T1.js deleted file mode 100644 index 7f59c035d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.1_The_String_Constructor_Called_as_a_Function/S15.5.1.1_A1_T1.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.1.1_A1_T1; -* @section: 15.5.1.1; -* @assertion: When String is called as a function rather than as a constructor, it performs a type conversion; -* @description: Call String(function(){}()); -*/ - -__str = String(function(){}()); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __str !== "string") { - $ERROR('#1: __str = String(function(){}()); typeof __str === "string". Actual: typeof __str ==='+typeof __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__str !== "undefined") { - $ERROR('#2: __str = String(function(){}()); __str === "undefined". Actual: __str ==='+__str ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.1_The_String_Constructor_Called_as_a_Function/S15.5.1.1_A1_T10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.1_The_String_Constructor_Called_as_a_Function/S15.5.1.1_A1_T10.js deleted file mode 100644 index 3b2c34613..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.1_The_String_Constructor_Called_as_a_Function/S15.5.1.1_A1_T10.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.1.1_A1_T10; -* @section: 15.5.1.1; -* @assertion: When String is called as a function rather than as a constructor, it performs a type conversion; -* @description: Call String(1) and String(-1); -*/ - -__str = String(1); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __str !== "string") { - $ERROR('#1: __str = String(1); typeof __str === "string". Actual: typeof __str ==='+typeof __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__str !== "1") { - $ERROR('#2: __str = String(1); __str === "1". Actual: __str ==='+__str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -__str = String(-1); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __str !== "string") { - $ERROR('#3: __str = String(-1); typeof __str === "string". Actual: typeof __str ==='+typeof __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__str !== "-1") { - $ERROR('#4: __str = String(-1); __str === "-1". Actual: __str ==='+__str ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.1_The_String_Constructor_Called_as_a_Function/S15.5.1.1_A1_T11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.1_The_String_Constructor_Called_as_a_Function/S15.5.1.1_A1_T11.js deleted file mode 100644 index b2c6e622a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.1_The_String_Constructor_Called_as_a_Function/S15.5.1.1_A1_T11.js +++ /dev/null @@ -1,117 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.1.1_A1_T11; -* @section: 15.5.1.1; -* @assertion: When String is called as a function rather than as a constructor, it performs a type conversion; -* @description: Call String(1/0) and String(-1/0), and call with +/-Infinity; -*/ - -__str = String(1/0); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __str !== "string") { - $ERROR('#1: __str = String(1/0); typeof __str === "string". Actual: typeof __str ==='+typeof __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__str !== "Infinity") { - $ERROR('#2: __str = String(1/0); __str === "Infinity". Actual: __str ==='+__str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -__str = String(-1/0); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (typeof __str !== "string") { - $ERROR('#3: __str = String(-1/0); typeof __str === "string". Actual: typeof __str ==='+typeof __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (__str !== "-Infinity") { - $ERROR('#4: __str = String(-1/0); __str === "-Infinity". Actual: __str ==='+__str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -__str = String(Infinity); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#5 -if (typeof __str !== "string") { - $ERROR('#5: __str = String(Infinity); typeof __str === "string". Actual: typeof __str ==='+typeof __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#6 -if (__str !== "Infinity") { - $ERROR('#6: __str = String(Infinity); __str === "Infinity". Actual: __str ==='+__str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -__str = String(-Infinity); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#7 -if (typeof __str !== "string") { - $ERROR('#7: __str = String(-Infinity); typeof __str === "string". Actual: typeof __str ==='+typeof __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#8 -if (__str !== "-Infinity") { - $ERROR('#8: __str = String(-Infinity); __str === "-Infinity". Actual: __str ==='+__str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -__str = String(Number.POSITIVE_INFINITY); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#9 -if (typeof __str !== "string") { - $ERROR('#9: __str = String(Number.POSITIVE_INFINITY); typeof __str === "string". Actual: typeof __str ==='+typeof __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#10 -if (__str !== "Infinity") { - $ERROR('#10: __str = String(Number.POSITIVE_INFINITY); __str === "Infinity". Actual: __str ==='+__str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -__str = String(Number.NEGATIVE_INFINITY); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#11 -if (typeof __str !== "string") { - $ERROR('#11: __str = String(Number.NEGATIVE_INFINITY); typeof __str === "string". Actual: typeof __str ==='+typeof __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#12 -if (__str !== "-Infinity") { - $ERROR('#12: __str = String(Number.NEGATIVE_INFINITY); __str === "-Infinity". Actual: __str ==='+__str ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.1_The_String_Constructor_Called_as_a_Function/S15.5.1.1_A1_T12.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.1_The_String_Constructor_Called_as_a_Function/S15.5.1.1_A1_T12.js deleted file mode 100644 index 2f3d65fd9..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.1_The_String_Constructor_Called_as_a_Function/S15.5.1.1_A1_T12.js +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.1.1_A1_T12; -* @section: 15.5.1.1; -* @assertion: When String is called as a function rather than as a constructor, it performs a type conversion; -* @description: Call String(1/"a"), String("b"* null) and String(Number.NaN); -*/ - -__str = String(1/"a"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __str !== "string") { - $ERROR('#1: __str = String(1/"a"); typeof __str === "string". Actual: typeof __str ==='+typeof __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__str !== "NaN") { - $ERROR('#2: __str = String(1/"a"); __str === "NaN". Actual: __str ==='+__str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -__str = String("b"*null); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (typeof __str !== "string") { - $ERROR('#3: __str = String("b"*null); typeof __str === "string". Actual: typeof __str ==='+typeof __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (__str !== "NaN") { - $ERROR('#4: __str = String("b"*null); __str === "NaN". Actual: __str ==='+__str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -__str = String(Number.NaN); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#5 -if (typeof __str !== "string") { - $ERROR('#5: __str = String(Number.NaN); typeof __str === "string". Actual: typeof __str ==='+typeof __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#6 -if (__str !== "NaN") { - $ERROR('#6: __str = String(Number.NaN); __str === "NaN". Actual: __str ==='+__str ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.1_The_String_Constructor_Called_as_a_Function/S15.5.1.1_A1_T13.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.1_The_String_Constructor_Called_as_a_Function/S15.5.1.1_A1_T13.js deleted file mode 100644 index 11ff7257e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.1_The_String_Constructor_Called_as_a_Function/S15.5.1.1_A1_T13.js +++ /dev/null @@ -1,81 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.1.1_A1_T13; -* @section: 15.5.1.1; -* @assertion: When String is called as a function rather than as a constructor, it performs a type conversion; -* @description: Call String(true) and String(false); -*/ - -__str = String(true); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __str !== "string") { - $ERROR('#1: __str = String(true); typeof __str === "string". Actual: typeof __str ==='+typeof __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__str !== "true") { - $ERROR('#2: __str = String(true); __str === "true". Actual: __str ==='+__str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -__str = String(false); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (typeof __str !== "string") { - $ERROR('#3: __str = String(false); typeof __str === "string". Actual: typeof __str ==='+typeof __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (__str !== "false") { - $ERROR('#4: __str = String(false); __str === "false". Actual: __str ==='+__str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -__str = String(Boolean(true)); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#5 -if (typeof __str !== "string") { - $ERROR('#5: __str = String(Boolean(true)); typeof __str === "string". Actual: typeof __str ==='+typeof __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#6 -if (__str !== "true") { - $ERROR('#6: __str = String(Boolean(true)); __str === "true". Actual: __str ==='+__str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -__str = String(Boolean(false)); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#7 -if (typeof __str !== "string") { - $ERROR('#7: __str = String(Boolean(false)); typeof __str === "string". Actual: typeof __str ==='+typeof __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#8 -if (__str !== "false") { - $ERROR('#8: __str = String(Boolean(false)); __str === "false". Actual: __str ==='+__str ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.1_The_String_Constructor_Called_as_a_Function/S15.5.1.1_A1_T14.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.1_The_String_Constructor_Called_as_a_Function/S15.5.1.1_A1_T14.js deleted file mode 100644 index 392596ff1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.1_The_String_Constructor_Called_as_a_Function/S15.5.1.1_A1_T14.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.1.1_A1_T14; -* @section: 15.5.1.1; -* @assertion: When String is called as a function rather than as a constructor, it performs a type conversion; -* @description: Call String(0) and String(-0); -*/ - -__str = String(0); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __str !== "string") { - $ERROR('#1: __str = String(0); typeof __str === "string". Actual: typeof __str ==='+typeof __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__str !== "0") { - $ERROR('#2: __str = String(0); __str === "0". Actual: __str ==='+__str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -__str = String(-0); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __str !== "string") { - $ERROR('#3: __str = String(-0); typeof __str === "string". Actual: typeof __str ==='+typeof __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__str !== "0") { - $ERROR('#4: __str = String(-0); __str === "0". Actual: __str ==='+__str ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.1_The_String_Constructor_Called_as_a_Function/S15.5.1.1_A1_T15.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.1_The_String_Constructor_Called_as_a_Function/S15.5.1.1_A1_T15.js deleted file mode 100644 index 9e090c133..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.1_The_String_Constructor_Called_as_a_Function/S15.5.1.1_A1_T15.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.1.1_A1_T15; -* @section: 15.5.1.1; -* @assertion: When String is called as a function rather than as a constructor, it performs a type conversion; -* @description: Call String(string_object); -*/ - -__obj__str = "caps"; - -//__obj__str.prop=1; - -__str = String(__obj__str); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__str !== __obj__str) { - $ERROR('#1: __obj__str = "caps"; __str = String(__obj__str); __str === __obj__str. Actual: __str ==='+__str ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.1_The_String_Constructor_Called_as_a_Function/S15.5.1.1_A1_T16.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.1_The_String_Constructor_Called_as_a_Function/S15.5.1.1_A1_T16.js deleted file mode 100644 index 69f342a8d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.1_The_String_Constructor_Called_as_a_Function/S15.5.1.1_A1_T16.js +++ /dev/null @@ -1,81 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.1.1_A1_T16; -* @section: 15.5.1.1; -* @assertion: When String is called as a function rather than as a constructor, it performs a type conversion; -* @description: Call String() with .12345 and analogous numbers; -*/ - -__str = String(.12345); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __str !== "string") { - $ERROR('#1: __str = String(.12345); typeof __str === "string". Actual: typeof __str ==='+typeof __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__str !== "0.12345") { - $ERROR('#2: __str = String(.12345); __str === "0.12345". Actual: __str ==='+__str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -__str = String(.012345); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (typeof __str !== "string") { - $ERROR('#3: __str = String(.012345); typeof __str === "string". Actual: typeof __str ==='+typeof __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (__str !== "0.012345") { - $ERROR('#4: __str = String(.012345); __str === "0.012345". Actual: __str ==='+__str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -__str = String(.0012345); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#5 -if (typeof __str !== "string") { - $ERROR('#5: __str = String(.0012345); typeof __str === "string". Actual: typeof __str ==='+typeof __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#6 -if (__str !== "0.0012345") { - $ERROR('#6: __str = String(.0012345); __str === "0.0012345". Actual: __str ==='+__str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -__str = String(.00000012345); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#7 -if (typeof __str !== "string") { - $ERROR('#7: __str = String(.00000012345); typeof __str === "string". Actual: typeof __str ==='+typeof __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#8 -if (__str !== "1.2345e-7") { - $ERROR('#8: __str = String(.00000012345); __str === "1.2345e-7". Actual: __str ==='+__str ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.1_The_String_Constructor_Called_as_a_Function/S15.5.1.1_A1_T17.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.1_The_String_Constructor_Called_as_a_Function/S15.5.1.1_A1_T17.js deleted file mode 100644 index e8b676ed4..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.1_The_String_Constructor_Called_as_a_Function/S15.5.1.1_A1_T17.js +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.1.1_A1_T17; -* @section: 15.5.1.1; -* @assertion: When String is called as a function rather than as a constructor, it performs a type conversion; -* @description: Call String() with numbers that have more than 1 significant digit after point; -*/ - -__str = String(1.2345); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __str !== "string") { - $ERROR('#1: __str = String(1.2345); typeof __str === "string". Actual: typeof __str ==='+typeof __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__str !== "1.2345") { - $ERROR('#2: __str = String(1.2345); __str === "1.2345". Actual: __str ==='+__str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -__str = String(1.234567890); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (typeof __str !== "string") { - $ERROR('#3: __str = String(1.234567890); typeof __str === "string". Actual: typeof __str ==='+typeof __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (__str !== "1.23456789") { - $ERROR('#4: __str = String(1.234567890); __str === "1.23456789". Actual: __str ==='+__str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -__str = String(1.234500000000000000000000000); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#5 -if (typeof __str !== "string") { - $ERROR('#5: __str = String(1.234500000000000000000000000); typeof __str === "string". Actual: typeof __str ==='+typeof __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#6 -if (__str !== "1.2345") { - $ERROR('#6: __str = String(1.234500000000000000000000000); __str === "1.2345". Actual: __str ==='+__str ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.1_The_String_Constructor_Called_as_a_Function/S15.5.1.1_A1_T18.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.1_The_String_Constructor_Called_as_a_Function/S15.5.1.1_A1_T18.js deleted file mode 100644 index 2389cca51..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.1_The_String_Constructor_Called_as_a_Function/S15.5.1.1_A1_T18.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.1.1_A1_T18; -* @section: 15.5.1.1; -* @assertion: When String is called as a function rather than as a constructor, it performs a type conversion; -* @description: Call String() with numbers that have more than 1 significant digit; -*/ - -__str = String(1000000000000000000000); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __str !== "string") { - $ERROR('#1: __str = String(1000000000000000000000); typeof __str === "string". Actual: typeof __str ==='+typeof __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__str !== "1e+21") { - $ERROR('#2: __str = String(1000000000000000000000); __str === "1e+21". Actual: __str ==='+__str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -__str = String(10000000000000000000000); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (typeof __str !== "string") { - $ERROR('#3: __str = String(10000000000000000000000); typeof __str === "string". Actual: typeof __str ==='+typeof __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (__str !== "1e+22") { - $ERROR('#4: __str = String(10000000000000000000000); __str === "1e+22". Actual: __str ==='+__str ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.1_The_String_Constructor_Called_as_a_Function/S15.5.1.1_A1_T19.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.1_The_String_Constructor_Called_as_a_Function/S15.5.1.1_A1_T19.js deleted file mode 100644 index 78de42aaa..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.1_The_String_Constructor_Called_as_a_Function/S15.5.1.1_A1_T19.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.1.1_A1_T19; -* @section: 15.5.1.1; -* @assertion: When String is called as a function rather than as a constructor, it performs a type conversion; -* @description: Call String() with Array of numbers; -*/ - -__str = String(new Array(1,2,3)); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __str !== "string") { - $ERROR('#1: __str = String(new Array(1,2,3)); typeof __str === "string". Actual: typeof __str ==='+typeof __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__str !== "1,2,3") { - $ERROR('#2: __str = String(new Array(1,2,3)); __str === "1,2,3". Actual: __str ==='+__str ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.1_The_String_Constructor_Called_as_a_Function/S15.5.1.1_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.1_The_String_Constructor_Called_as_a_Function/S15.5.1.1_A1_T2.js deleted file mode 100644 index fecddb8a8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.1_The_String_Constructor_Called_as_a_Function/S15.5.1.1_A1_T2.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.1.1_A1_T2; -* @section: 15.5.1.1; -* @assertion: When String is called as a function rather than as a constructor, it performs a type conversion; -* @description: Call String(null); -*/ - -__str = String(null); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __str !== "string") { - $ERROR('#1: __str = String(null); typeof __str === "string". Actual: typeof __str ==='+typeof __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__str !== "null") { - $ERROR('#2: __str = String(null); __str === "null". Actual: __str ==='+__str ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.1_The_String_Constructor_Called_as_a_Function/S15.5.1.1_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.1_The_String_Constructor_Called_as_a_Function/S15.5.1.1_A1_T3.js deleted file mode 100644 index 831320385..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.1_The_String_Constructor_Called_as_a_Function/S15.5.1.1_A1_T3.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.1.1_A1_T3; -* @section: 15.5.1.1; -* @assertion: When String is called as a function rather than as a constructor, it performs a type conversion; -* @description: Call String(void 0); -*/ - -__str = String(void 0); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __str !== "string") { - $ERROR('#1: __str = String(void 0); typeof __str === "string". Actual: typeof __str ==='+typeof __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__str !== "undefined") { - $ERROR('#2: __str = String(void 0); __str === "undefined". Actual: __str ==='+__str ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.1_The_String_Constructor_Called_as_a_Function/S15.5.1.1_A1_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.1_The_String_Constructor_Called_as_a_Function/S15.5.1.1_A1_T4.js deleted file mode 100644 index 3e8dd9aa6..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.1_The_String_Constructor_Called_as_a_Function/S15.5.1.1_A1_T4.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.1.1_A1_T4; -* @section: 15.5.1.1; -* @assertion: When String is called as a function rather than as a constructor, it performs a type conversion; -* @description: Call String(undefined); -*/ - -__str = String(undefined); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __str !== "string") { - $ERROR('#1: __str = String(undefined); typeof __str === "string". Actual: typeof __str ==='+typeof __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__str !== "undefined") { - $ERROR('#2: __str = String(undefined); __str === "undefined". Actual: __str ==='+__str ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.1_The_String_Constructor_Called_as_a_Function/S15.5.1.1_A1_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.1_The_String_Constructor_Called_as_a_Function/S15.5.1.1_A1_T5.js deleted file mode 100644 index c76cbf185..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.1_The_String_Constructor_Called_as_a_Function/S15.5.1.1_A1_T5.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.1.1_A1_T5; -* @section: 15.5.1.1; -* @assertion: When String is called as a function rather than as a constructor, it performs a type conversion; -* @description: Call String(x), where x is undefined variable; -*/ - -__str = String(x); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __str !== "string") { - $ERROR('#1: var x; __str = String(x); typeof __str === "string". Actual: typeof __str ==='+typeof __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__str !== "undefined") { - $ERROR('#2: var x; __str = String(x); __str === "undefined". Actual: __str ==='+__str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -var x; diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.1_The_String_Constructor_Called_as_a_Function/S15.5.1.1_A1_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.1_The_String_Constructor_Called_as_a_Function/S15.5.1.1_A1_T6.js deleted file mode 100644 index 3f5bf7d90..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.1_The_String_Constructor_Called_as_a_Function/S15.5.1.1_A1_T6.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.1.1_A1_T6; -* @section: 15.5.1.1; -* @assertion: When String is called as a function rather than as a constructor, it performs a type conversion; -* @description: Checking by using eval, Call String(eval());; -*/ - -__str = String(eval()); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __str !== "string") { - $ERROR('#1: __str = String(eval()); typeof __str === "string". Actual: typeof __str ==='+typeof __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__str !== "undefined") { - $ERROR('#2: __str = String(eval()); __str === "undefined". Actual: __str ==='+__str ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.1_The_String_Constructor_Called_as_a_Function/S15.5.1.1_A1_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.1_The_String_Constructor_Called_as_a_Function/S15.5.1.1_A1_T7.js deleted file mode 100644 index 6d178154c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.1_The_String_Constructor_Called_as_a_Function/S15.5.1.1_A1_T7.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.1.1_A1_T7; -* @section: 15.5.1.1; -* @assertion: When String is called as a function rather than as a constructor, it performs a type conversion; -* @description: Call String({}); -*/ - -__str = String({}); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __str !== "string") { - $ERROR('#1: __str = String({}); typeof __str === "string". Actual: typeof __str ==='+typeof __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__str !== "[object "+"Object"+"]") { - $ERROR('#2: __str = String({}); __str === "[object Object]". Actual: __str ==='+__str ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.1_The_String_Constructor_Called_as_a_Function/S15.5.1.1_A1_T8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.1_The_String_Constructor_Called_as_a_Function/S15.5.1.1_A1_T8.js deleted file mode 100644 index 1738663c4..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.1_The_String_Constructor_Called_as_a_Function/S15.5.1.1_A1_T8.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.1.1_A1_T8; -* @section: 15.5.1.1; -* @assertion: When String is called as a function rather than as a constructor, it performs a type conversion; -* @description: Call String(new Array); -*/ - -__old__Array__prototype__toString = Array.prototype.toString; - -Array.prototype.toString=function(){return "__ARRAY__";}; - -__str = String(new Array); - -// restore old toString method just in case -Array.prototype.toString=__old__Array__prototype__toString; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __str !== "string") { - $ERROR('#1: __str = String(new Array); typeof __str === "string". Actual: typeof __str ==='+typeof __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__str !== "__ARRAY__") { - $ERROR('#2: Array.prototype.toString=function(){return "__ARRAY__";}; __str = String(new Array); __str === "__ARRAY__". Actual: __str ==='+__str ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.1_The_String_Constructor_Called_as_a_Function/S15.5.1.1_A1_T9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.1_The_String_Constructor_Called_as_a_Function/S15.5.1.1_A1_T9.js deleted file mode 100644 index fceeb5034..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.1_The_String_Constructor_Called_as_a_Function/S15.5.1.1_A1_T9.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.1.1_A1_T9; -* @section: 15.5.1.1; -* @assertion: When String is called as a function rather than as a constructor, it performs a type conversion; -* @description: Call String(this); -*/ - -toString=function(){return "__THIS__";}; - -__str = String(this); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __str !== "string") { - $ERROR('#1: __str = String(this); typeof __str === "string". Actual: typeof __str ==='+typeof __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__str !== "__THIS__") { - $ERROR('#2: toString=function(){return "__THIS__";}; __str = String(this); __str === "__THIS__". Actual: __str ==='+__str ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.1_The_String_Constructor_Called_as_a_Function/S15.5.1.1_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.1_The_String_Constructor_Called_as_a_Function/S15.5.1.1_A2_T1.js deleted file mode 100644 index e312c483e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.1_The_String_Constructor_Called_as_a_Function/S15.5.1.1_A2_T1.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.1.1_A2_T1; -* @section: 15.5.1.1; -* @assertion: If value is not supplied, the empty string "" is returned; -* @description: Call String(); -*/ - -__str = String(); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __str !== "string") { - $ERROR('#1: __str = String(); typeof __str === "string". Actual: typeof __str ==='+typeof __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__str !== "") { - $ERROR('#2: __str = String(); __str === "". Actual: __str ==='+__str ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.2_The_String_Constructor/S15.5.2.1_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.2_The_String_Constructor/S15.5.2.1_A1_T1.js deleted file mode 100644 index 81e3ef39c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.2_The_String_Constructor/S15.5.2.1_A1_T1.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.2.1_A1_T1; -* @section: 15.5.2.1; -* @assertion: When "String" is called as part of a new expression, it is a constructor: it initialises the newly created object and -* The [[Value]] property of the newly constructed object is set to ToString(value), or to the empty string if value is not supplied; -* @description: Creating string object with expression "new String"; -*/ - -__str = new String; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __str !== "object") { - $ERROR('#1: __str = new String; typeof __str === "object". Actual: typeof __str ==='+typeof __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1.5 -if (__str.constructor !== String) { - $ERROR('#1.5: __str = new String; __str.constructor === String. Actual: __str.constructor ==='+__str.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__str != "") { - $ERROR('#2: __str = new String; __str == "". Actual: __str =='+__str); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if ( __str === "") { - $ERROR('#3: __str = new String; __str !== ""'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.2_The_String_Constructor/S15.5.2.1_A1_T10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.2_The_String_Constructor/S15.5.2.1_A1_T10.js deleted file mode 100644 index 077fd2867..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.2_The_String_Constructor/S15.5.2.1_A1_T10.js +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.2.1_A1_T10; -* @section: 15.5.2.1; -* @assertion: When "String" is called as part of a new expression, it is a constructor: it initialises the newly created object and -* The [[Value]] property of the newly constructed object is set to ToString(value), or to the empty string if value is not supplied; -* @description: Creating string object with "new String(function object)" as the function object's prototype.toString property was changed; -*/ - -function __FACTORY(){}; - -__FACTORY.prototype.toString=function(){return "tostr"}; - -__obj = new __FACTORY; - -__str = new String(__obj); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __str !== "object") { - $ERROR('#1: __str = new String(__obj); typeof __str === "object". Actual: typeof __str ==='+typeof __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1.5 -if (__str.constructor !== String) { - $ERROR('#1.5: __str = new String(__obj); __str.constructor === String. Actual: __str.constructor ==='+__str.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__str != "tostr") { - $ERROR('#2: __str = new String(__obj); __str =="tostr". Actual: __str =='+__str ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.2_The_String_Constructor/S15.5.2.1_A1_T11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.2_The_String_Constructor/S15.5.2.1_A1_T11.js deleted file mode 100644 index c5ab90512..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.2_The_String_Constructor/S15.5.2.1_A1_T11.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.2.1_A1_T11; -* @section: 15.5.2.1; -* @assertion: When "String" is called as part of a new expression, it is a constructor: it initialises the newly created object and -* The [[Value]] property of the newly constructed object is set to ToString(value), or to the empty string if value is not supplied; -* @description: Creating string object with "new String(function object)" after changing function object's valueOf and toString properties; -*/ - -function __obj(){}; - -__obj.valueOf=function(){return true;}; - -__obj.toString=function(){return {};}; - -__str = new String(__obj); - - - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __str !== "object") { - $ERROR('#1: function __obj(){}; __str = new String(__obj); typeof __str === "object". Actual: typeof __str ==='+typeof __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1.5 -if (__str.constructor !== String) { - $ERROR('#1.5: __str = new String(__obj); __str.constructor === String. Actual: __str.constructor ==='+__str.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__str !="true") { - $ERROR('#2: function __obj(){}; __str = new String(__obj); __str =="true". Actual: __str =='+__str ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.2_The_String_Constructor/S15.5.2.1_A1_T12.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.2_The_String_Constructor/S15.5.2.1_A1_T12.js deleted file mode 100644 index ca9c5c160..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.2_The_String_Constructor/S15.5.2.1_A1_T12.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.2.1_A1_T12; -* @section: 15.5.2.1; -* @assertion: When "String" is called as part of a new expression, it is a constructor: it initialises the newly created object and -* The [[Value]] property of the newly constructed object is set to ToString(value), or to the empty string if value is not supplied; -* @description: Creating string object with "new String(function object)", after changing the function object toString property, which causes exception throw; -*/ - -var __obj = {toString:function(){throw "intostr"}}; - -__obj.valueOf=function(){return true}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try { - __str = new String(__obj); - $ERROR('#1: var __obj = {toString:function(){throw "intostr"}}; __str = new String(__obj) lead throwing exception'); -} catch (e) { - if (e!=="intostr") { - $ERROR('#1.1: e==="intostr". Actual: e==='+e); - } -} -// -////////////////////////////////////////////////////////////////////////////// - - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.2_The_String_Constructor/S15.5.2.1_A1_T13.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.2_The_String_Constructor/S15.5.2.1_A1_T13.js deleted file mode 100644 index baa9ddc94..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.2_The_String_Constructor/S15.5.2.1_A1_T13.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.2.1_A1_T13; -* @section: 15.5.2.1; -* @assertion: When "String" is called as part of a new expression, it is a constructor: it initialises the newly created object and -* The [[Value]] property of the newly constructed object is set to ToString(value), or to the empty string if value is not supplied; -* @description: Creating string object with "new String(function object)" after changing function object's valueOf property, which causes exception throw; -*/ - -var __obj = {toString:function(){return f; function f(){}}}; - -__obj.valueOf=function(){throw "invalueof"}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try { - __str = new String(__obj); - $ERROR('#1: __obj.valueOf=function(){throw "invalueof"}; __str = new String(__obj) lead throwing exception'); -} catch (e) { - if (e!=="invalueof") { - $ERROR('#1.1: e==="invalueof". Actual: e==='+e); - } -} -// -////////////////////////////////////////////////////////////////////////////// - - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.2_The_String_Constructor/S15.5.2.1_A1_T16.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.2_The_String_Constructor/S15.5.2.1_A1_T16.js deleted file mode 100644 index 96780715b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.2_The_String_Constructor/S15.5.2.1_A1_T16.js +++ /dev/null @@ -1,110 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.2.1_A1_T16; -* @section: 15.5.2.1; -* @assertion: When "String" is called as part of a new expression, it is a constructor: it initialises the newly created object and -* The [[Value]] property of the newly constructed object is set to ToString(value), or to the empty string if value is not supplied; -* @description: Creating string object with "new String()" initialized with .12345 and other numbers; -*/ - -__str =new String(.12345); -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __str !== "object") { - $ERROR('#1: __str =new String(.12345); typeof __str === "object". Actual: typeof __str ==='+typeof __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1.5 -if (__str.constructor !== String) { - $ERROR('#1.5: __str =new String(.12345); __str.constructor === String. Actual: __str.constructor ==='+__str.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__str !="0.12345") { - $ERROR('#2: __str =new String(.12345); __str =="0.12345". Actual: __str =='+__str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -__str =new String(.012345); -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (typeof __str !== "object") { - $ERROR('#3: __str =new String(.012345); typeof __str === "object". Actual: typeof __str ==='+typeof __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2.5 -if (__str.constructor !== String) { - $ERROR('#3.5: __str =new String(.012345); __str.constructor === String. Actual: __str.constructor ==='+__str.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (__str !="0.012345") { - $ERROR('#4: __str =new String(.012345); __str =="0.012345". Actual: __str =='+__str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -__str =new String(.0012345); -////////////////////////////////////////////////////////////////////////////// -//CHECK#5 -if (typeof __str !== "object") { - $ERROR('#5: __str =new String(.0012345); typeof __str === "object". Actual: typeof __str ==='+typeof __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#5.5 -if (__str.constructor !== String) { - $ERROR('#5.5: __str =new String(.0012345); __str.constructor === String. Actual: __str.constructor ==='+__str.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#6 -if (__str !="0.0012345") { - $ERROR('#6: __str =new String(.0012345); __str =="0.0012345". Actual: __str =='+__str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -__str =new String(.00000012345); -////////////////////////////////////////////////////////////////////////////// -//CHECK#7 -if (typeof __str !== "object") { - $ERROR('#7: __str =new String(.00000012345); typeof __str === "object". Actual: typeof __str ==='+typeof __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#7.5 -if (__str.constructor !== String) { - $ERROR('#7.5: __str =new String(.00000012345); __str.constructor === String. Actual: __str.constructor ==='+__str.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#8 -if (__str !="1.2345e-7") { - $ERROR('#8: __str =new String(.00000012345); __str =="1.2345e-7". Actual: __str =='+__str ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.2_The_String_Constructor/S15.5.2.1_A1_T17.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.2_The_String_Constructor/S15.5.2.1_A1_T17.js deleted file mode 100644 index 2118fa56c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.2_The_String_Constructor/S15.5.2.1_A1_T17.js +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.2.1_A1_T17; -* @section: 15.5.2.1; -* @assertion: When "String" is called as part of a new expression, it is a constructor: it initialises the newly created object and -* The [[Value]] property of the newly constructed object is set to ToString(value), or to the empty string if value is not supplied; -* @description: Creating string object with "new String()" initialized with numbers that have more than 1 significant digit following the point; -*/ - -__str = new String(1.2345); -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __str !== "object") { - $ERROR('#1: __str = new String(1.2345); typeof __str === "object". Actual: typeof __str ==='+typeof __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1.5 -if (__str.constructor !== String) { - $ERROR('#1.5: __str = new String(1.2345); __str.constructor === String. Actual: __str.constructor ==='+__str.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__str !="1.2345") { - $ERROR('#2: __str = new String(1.2345); __str =="1.2345". Actual: __str =='+__str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -__str = new String(1.234567890); -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (typeof __str !== "object") { - $ERROR('#3: __str = new String(1.234567890); typeof __str === "object". Actual: typeof __str ==='+typeof __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3.5 -if (__str.constructor !== String) { - $ERROR('#3.5: __str = new String(1.234567890); __str.constructor === String. Actual: __str.constructor ==='+__str.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (__str !="1.23456789") { - $ERROR('#4: __str = new String(1.234567890); __str =="1.23456789". Actual: __str =='+__str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -__str = new String(1.234500000000000000000000000); -////////////////////////////////////////////////////////////////////////////// -//CHECK#5 -if (typeof __str !== "object") { - $ERROR('#5: __str = new String(1.234500000000000000000000000); typeof __str === "object". Actual: typeof __str ==='+typeof __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#5.5 -if (__str.constructor !== String) { - $ERROR('#5.5: __str = new String(1.234500000000000000000000000); __str.constructor === String. Actual: __str.constructor ==='+__str.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#6 -if (__str !="1.2345") { - $ERROR('#6: __str = new String(1.234500000000000000000000000); __str =="1.2345". Actual: __str =='+__str ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.2_The_String_Constructor/S15.5.2.1_A1_T18.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.2_The_String_Constructor/S15.5.2.1_A1_T18.js deleted file mode 100644 index c262ad275..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.2_The_String_Constructor/S15.5.2.1_A1_T18.js +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.2.1_A1_T18; -* @section: 15.5.2.1; -* @assertion: When "String" is called as part of a new expression, it is a constructor: it initialises the newly created object and -* The [[Value]] property of the newly constructed object is set to ToString(value), or to the empty string if value is not supplied; -* @description: Create string object with "new String()" initialized with numbers that have more than 1 significant digit; -*/ - -__str = new String(1000000000000000000000); -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __str !== "object") { - $ERROR('#1: __str = new String(1000000000000000000000); typeof __str === "object". Actual: typeof __str ==='+typeof __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1.5 -if (__str.constructor !== String) { - $ERROR('#1.5: __str = new String(1000000000000000000000); __str.constructor === String. Actual: __str.constructor ==='+__str.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__str !="1e+21") { - $ERROR('#2: __str = new String(1000000000000000000000); __str =="1e+21". Actual: __str =='+__str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -__str = new String(10000000000000000000000); -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (typeof __str !== "object") { - $ERROR('#3: __str = new String(10000000000000000000000); typeof __str === "object". Actual: typeof __str ==='+typeof __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3.5 -if (__str.constructor !== String) { - $ERROR('#3.5: __str = new String(10000000000000000000000); __str.constructor === String. Actual: __str.constructor ==='+__str.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (__str !="1e+22") { - $ERROR('#4: __str = new String(10000000000000000000000); __str =="1e+22". Actual: __str =='+__str ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.2_The_String_Constructor/S15.5.2.1_A1_T19.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.2_The_String_Constructor/S15.5.2.1_A1_T19.js deleted file mode 100644 index 2e86ec08b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.2_The_String_Constructor/S15.5.2.1_A1_T19.js +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.2.1_A1_T19; -* @section: 15.5.2.1; -* @assertion: When "String" is called as part of a new expression, it is a constructor: it initialises the newly created object and -* The [[Value]] property of the newly constructed object is set to ToString(value), or to the empty string if value is not supplied; -* @description: Creating string object with "new String()" initialized with Array of numbers; -*/ - -__str = new String(new Array(1,2,3)); -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __str !== "object") { - $ERROR('#1: __str = new String(new Array(1,2,3)); typeof __str === "object". Actual: typeof __str ==='+typeof __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1.5 -if (__str.constructor !== String) { - $ERROR('#1.5: __str = new String(new Array(1,2,3)); __str.constructor === String. Actual: __str.constructor ==='+__str.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__str !="1,2,3") { - $ERROR('#2: __str = new String(new Array(1,2,3)); __str =="1,2,3". Actual: __str =='+__str ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.2_The_String_Constructor/S15.5.2.1_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.2_The_String_Constructor/S15.5.2.1_A1_T2.js deleted file mode 100644 index 67ea6bbdd..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.2_The_String_Constructor/S15.5.2.1_A1_T2.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.2.1_A1_T2; -* @section: 15.5.2.1; -* @assertion: When "String" is called as part of a new expression, it is a constructor: it initialises the newly created object and -* The [[Value]] property of the newly constructed object is set to ToString(value), or to the empty string if value is not supplied; -* @description: Creating string object with "new String()"; -*/ - -__str = new String(); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __str !== "object") { - $ERROR('#1: __str = new String(); typeof __str === "object". Actual: typeof __str ==='+typeof __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1.5 -if (__str.constructor !== String) { - $ERROR('#1.5: __str = new String(); __str.constructor === String. Actual: __str.constructor ==='+__str.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__str !="") { - $ERROR('#2: __str = new String(); __str =="". Actual: __str =='+__str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if ( __str === "") { - $ERROR('#3: __str = new String(); __str !== ""'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.2_The_String_Constructor/S15.5.2.1_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.2_The_String_Constructor/S15.5.2.1_A1_T3.js deleted file mode 100644 index efac54465..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.2_The_String_Constructor/S15.5.2.1_A1_T3.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.2.1_A1_T3; -* @section: 15.5.2.1; -* @assertion: When "String" is called as part of a new expression, it is a constructor: it initialises the newly created object and -* The [[Value]] property of the newly constructed object is set to ToString(value), or to the empty string if value is not supplied; -* @description: Creating string object with "new String("")"; -*/ - -__str = new String(""); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __str !== "object") { - $ERROR('#1: __str = new String(""); typeof __str === "object". Actual: typeof __str ==='+typeof __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1.5 -if (__str.constructor !== String) { - $ERROR('#1.5: __str = new String(""); __str.constructor === String. Actual: __str.constructor ==='+__str.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__str !="") { - $ERROR('#2: __str = new String(""); __str =="". Actual: __str =='+__str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if ( __str === "") { - $ERROR('#3: __str = new String(""); __str !== ""'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.2_The_String_Constructor/S15.5.2.1_A1_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.2_The_String_Constructor/S15.5.2.1_A1_T4.js deleted file mode 100644 index 6de3b7d75..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.2_The_String_Constructor/S15.5.2.1_A1_T4.js +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.2.1_A1_T4; -* @section: 15.5.2.1; -* @assertion: When "String" is called as part of a new expression, it is a constructor: it initialises the newly created object and -* The [[Value]] property of the newly constructed object is set to ToString(value), or to the empty string if value is not supplied; -* @description: Create string object with "new String(1.0)"; -*/ - -__str = new String(1.0); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __str !== "object") { - $ERROR('#1: __str = new String(1.0); typeof __str === "object". Actual: typeof __str ==='+typeof __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1.5 -if (__str.constructor !== String) { - $ERROR('#1.5: __str = new String(1.0); __str.constructor === String. Actual: __str.constructor ==='+__str.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__str !=1.0+"") { - $ERROR('#2: __str = new String(1.0); __str ==1.0+"". Actual: __str =='+__str ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.2_The_String_Constructor/S15.5.2.1_A1_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.2_The_String_Constructor/S15.5.2.1_A1_T5.js deleted file mode 100644 index 5c7c0f278..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.2_The_String_Constructor/S15.5.2.1_A1_T5.js +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.2.1_A1_T5; -* @section: 15.5.2.1; -* @assertion: When "String" is called as part of a new expression, it is a constructor: it initialises the newly created object and -* The [[Value]] property of the newly constructed object is set to ToString(value), or to the empty string if value is not supplied; -* @description: Creating string object with "new String(NaN)"; -*/ - -__str = new String(NaN); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __str !== "object") { - $ERROR('#1: __str = new String(NaN); typeof __str === "object". Actual: typeof __str ==='+typeof __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1.5 -if (__str.constructor !== String) { - $ERROR('#1.5: __str = new String(NaN); __str.constructor === String. Actual: __str.constructor ==='+__str.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__str !=(1/"s")+"") { - $ERROR('#2: __str = new String(NaN); __str ==(1/"s")+"". Actual: __str =='+__str ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.2_The_String_Constructor/S15.5.2.1_A1_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.2_The_String_Constructor/S15.5.2.1_A1_T6.js deleted file mode 100644 index 8f7feeff7..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.2_The_String_Constructor/S15.5.2.1_A1_T6.js +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.2.1_A1_T6; -* @section: 15.5.2.1; -* @assertion: When "String" is called as part of a new expression, it is a constructor: it initialises the newly created object and -* The [[Value]] property of the newly constructed object is set to ToString(value), or to the empty string if value is not supplied; -* @description: Creating string object with "new String(false)"; -*/ - -__str = new String(false); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __str !== "object") { - $ERROR('#1: __str = new String(false); typeof __str === "object". Actual: typeof __str ==='+typeof __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1.5 -if (__str.constructor !== String) { - $ERROR('#1.5: __str = new String(false); __str.constructor === String. Actual: __str.constructor ==='+__str.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__str !=false+"") { - $ERROR('#2: __str = new String(false); __str ==false+"". Actual: __str =='+__str ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.2_The_String_Constructor/S15.5.2.1_A1_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.2_The_String_Constructor/S15.5.2.1_A1_T7.js deleted file mode 100644 index c44700419..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.2_The_String_Constructor/S15.5.2.1_A1_T7.js +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.2.1_A1_T7; -* @section: 15.5.2.1; -* @assertion: When "String" is called as part of a new expression, it is a constructor: it initialises the newly created object and -* The [[Value]] property of the newly constructed object is set to ToString(value), or to the empty string if value is not supplied; -* @description: Creating string object with "new String({})"; -*/ - -__stored__Object__prototype__toString = Object.prototype.toString; - -Object.prototype.toString=function(){return "SHIFTED"}; - -__str = new String({}); - -Object.prototype.toString = __stored__Object__prototype__toString; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __str !== "object") { - $ERROR('#1: __str = new String({}); typeof __str === "object". Actual: typeof __str ==='+typeof __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1.5 -if (__str.constructor !== String) { - $ERROR('#1.5: __str = new String({}); __str.constructor === String. Actual: __str.constructor ==='+__str.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__str !="SHIFTED") { - $ERROR('#2: Object.prototype.toString=function(){return "SHIFTED"}; __str = new String({}); __str =="SHIFTED". Actual: __str =='+__str ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.2_The_String_Constructor/S15.5.2.1_A1_T8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.2_The_String_Constructor/S15.5.2.1_A1_T8.js deleted file mode 100644 index 1ba83f6cb..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.2_The_String_Constructor/S15.5.2.1_A1_T8.js +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.2.1_A1_T8; -* @section: 15.5.2.1; -* @assertion: When "String" is called as part of a new expression, it is a constructor: it initialises the newly created object and -* The [[Value]] property of the newly constructed object is set to ToString(value), or to the empty string if value is not supplied; -* @description: Creating string object with "new String(function(){})"; -*/ - -__stored__Function__prototype__toString = Function.prototype.toString; - -Function.prototype.toString=function(){return "SHIFTED"}; - -__str = new String(function(){}); - -Function.prototype.toString = __stored__Function__prototype__toString; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __str !== "object") { - $ERROR('#1: __str = new String(function(){}); typeof __str === "object". Actual: typeof __str ==='+typeof __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1.5 -if (__str.constructor !== String) { - $ERROR('#1.5: __str = new String(function(){}); __str.constructor === String. Actual: __str.constructor ==='+__str.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__str !="SHIFTED") { - $ERROR('#2: Function.prototype.toString=function(){return "SHIFTED"}; __str = new String(function(){}); __str =="SHIFTED". Actual: __str =='+__str ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.2_The_String_Constructor/S15.5.2.1_A1_T9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.2_The_String_Constructor/S15.5.2.1_A1_T9.js deleted file mode 100644 index aebd35c0f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.2_The_String_Constructor/S15.5.2.1_A1_T9.js +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.2.1_A1_T9; -* @section: 15.5.2.1; -* @assertion: When "String" is called as part of a new expression, it is a constructor: it initialises the newly created object and -* The [[Value]] property of the newly constructed object is set to ToString(value), or to the empty string if value is not supplied; -* @description: Creating string object with "new String(function(){return [1,2,3]}())"; -*/ - -__str = new String(function(){return [1,2,3]}()); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __str !== "object") { - $ERROR('#1: __str = new String(function(){return [1,2,3]}()); typeof __str === "object". Actual: typeof __str ==='+typeof __str ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1.5 -if (__str.constructor !== String) { - $ERROR('#1.5: __str = new String(function(){return [1,2,3]}()); __str.constructor === String. Actual: __str.constructor ==='+__str.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__str !="1,2,3") { - $ERROR('#2: __str = new String(function(){return [1,2,3]}()); __str =="1,2,3". Actual: __str =='+__str ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.2_The_String_Constructor/S15.5.2.1_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.2_The_String_Constructor/S15.5.2.1_A2_T1.js deleted file mode 100644 index 294e779bf..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.2_The_String_Constructor/S15.5.2.1_A2_T1.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.2.1_A2_T1; -* @section: 15.5.2.1, 15.5.3.1; -* @assertion: The [[Prototype]] property of the newly constructed object is set to the original String prototype object; -* @description: Creating string object with "new String(string)" to check prototype; -*/ - -var __str__obj = new String("abba"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!(String.prototype.isPrototypeOf(__str__obj))) { - $ERROR('#1: var __str__obj = new String("abba"); String.prototype.isPrototypeOf(__str__obj)===true'); -} -// -////////////////////////////////////////////////////////////////////////////// - - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.2_The_String_Constructor/S15.5.2.1_A2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.2_The_String_Constructor/S15.5.2.1_A2_T2.js deleted file mode 100644 index 13042ea65..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.2_The_String_Constructor/S15.5.2.1_A2_T2.js +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.2.1_A2_T2; -* @section: 15.5.2.1, 15.5.3.1; -* @assertion: The [[Prototype]] property of the newly constructed object is set to the original String prototype object; -* @description: Creating string object with "new String(string)" adding custom property; -*/ - - -var __str__obj = new String("shocking blue"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__str__obj["__custom__prop"]!==undefined) { - $ERROR('#1: var __str__obj = new String("shocking blue"); __str__obj["__custom__prop"]===undefined. Actual: __str__obj["__custom__prop"]==='+__str__obj["__custom__prop"]); -} -// -////////////////////////////////////////////////////////////////////////////// - -String.prototype.__custom__prop = "bor"; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__str__obj["__custom__prop"]!=="bor") { - $ERROR('#2: var __str__obj = new String("shocking blue"); String.prototype.__custom__prop = "bor"; __str__obj["__custom__prop"]==="bor". Actual: __str__obj["__custom__prop"]==='+__str__obj["__custom__prop"]); -} -// -////////////////////////////////////////////////////////////////////////////// - - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.2_The_String_Constructor/S15.5.2.1_A3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.2_The_String_Constructor/S15.5.2.1_A3.js deleted file mode 100644 index 2bab8a990..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.2_The_String_Constructor/S15.5.2.1_A3.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.2.1_A3; -* @section: 15.5.2.1; -* @assertion: The [[Class]] property of the newly constructed object is set to "String"; -* @description: Creating string object with "new String(string)" and changing toString property to Object.prototype.toString; -*/ - -var __str__obj = new String("seamaid"); - -__str__obj.toString = Object.prototype.toString; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__str__obj.toString() !== "[object "+"String"+"]") { - $ERROR('#1: var __str__obj = new String("seamaid"); __str__obj.toString = Object.prototype.toString; __str__obj.toString() === "[object String]". Actual: __str__obj.toString() ==='+__str__obj.toString() ); -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.3_Properties_of_the_String_Constructor/S15.5.3.1_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.3_Properties_of_the_String_Constructor/S15.5.3.1_A1.js deleted file mode 100644 index 8af38452a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.3_Properties_of_the_String_Constructor/S15.5.3.1_A1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.3.1_A1; -* @section: 15.5.3.1, 15.5.4; -* @assertion: The String has property prototype; -* @description: Checking String.hasOwnProperty('prototype'); -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!(String.hasOwnProperty('prototype'))) { - $ERROR('#1: String.hasOwnProperty(\'prototype\') return true. Actual: '+String.hasOwnProperty('prototype')); -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.3_Properties_of_the_String_Constructor/S15.5.3.1_A2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.3_Properties_of_the_String_Constructor/S15.5.3.1_A2.js deleted file mode 100644 index 22b778177..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.3_Properties_of_the_String_Constructor/S15.5.3.1_A2.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.3.1_A2; -* @section: 15.5.3.1, 15.5.4; -* @assertion: The String.prototype property has the attribute DontEnum; -* @description: Checking if enumerating the String.prototype property fails; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#0 -if (!(String.hasOwnProperty('prototype'))) { - $FAIL('#0: String.hasOwnProperty(\'prototype\') return true. Actual: '+String.hasOwnProperty('prototype')); -} -// -////////////////////////////////////////////////////////////////////////////// - - -////////////////////////////////////////////////////////////////////////////// -// CHECK#1 -if (String.propertyIsEnumerable('prototype')) { - $ERROR('#1: String.propertyIsEnumerable(\'prototype\') return false. Actual: '+String.propertyIsEnumerable('prototype')); -} -// -////////////////////////////////////////////////////////////////////////////// - - -////////////////////////////////////////////////////////////////////////////// -// CHECK#2 -count=0; - -for (p in String){ - if (p==="prototype") count++; -} - -if (count !== 0) { - $ERROR('#2: count=0; for (p in String){ if (p==="prototype") count++;}; count === 0. Actual: count ==='+count ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.3_Properties_of_the_String_Constructor/S15.5.3.1_A3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.3_Properties_of_the_String_Constructor/S15.5.3.1_A3.js deleted file mode 100644 index ff33c16b1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.3_Properties_of_the_String_Constructor/S15.5.3.1_A3.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.3.1_A3; -* @section: 15.5.3.1, 15.5.4; -* @assertion: The String.prototype property has the attribute DontDelete; -* @description: Checking if deleting the String.prototype property fails; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!(String.hasOwnProperty('prototype'))) { - $FAIL('#1: String.hasOwnProperty(\'prototype\') return true. Actual: '+String.hasOwnProperty('prototype')); -} -// -////////////////////////////////////////////////////////////////////////////// - -delete String.prototype; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (!(String.hasOwnProperty('prototype'))) { - $ERROR('#2: delete String.prototype; String.hasOwnProperty(\'prototype\') return true. Actual: '+String.hasOwnProperty('prototype')); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.3_Properties_of_the_String_Constructor/S15.5.3.1_A4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.3_Properties_of_the_String_Constructor/S15.5.3.1_A4.js deleted file mode 100644 index ef6bc37d4..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.3_Properties_of_the_String_Constructor/S15.5.3.1_A4.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.3.1_A4; -* @section: 15.5.3.1, 15.5.4; -* @assertion: The String.prototype property has the attribute ReadOnly; -* @description: Checking if varying the String.prototype property fails; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!(String.hasOwnProperty('prototype'))) { - $FAIL('#1: String.hasOwnProperty(\'prototype\') return true. Actual: '+String.hasOwnProperty('prototype')); -} -// -////////////////////////////////////////////////////////////////////////////// - -__obj = String.prototype; - -String.prototype = function(){return "shifted";}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (String.prototype !== __obj) { - $ERROR('#2: __obj = String.prototype; String.prototype = function(){return "shifted";}; String.prototype === __obj. Actual: String.prototype ==='+String.prototype ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.3_Properties_of_the_String_Constructor/S15.5.3.2_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.3_Properties_of_the_String_Constructor/S15.5.3.2_A1.js deleted file mode 100644 index 9db600c18..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.3_Properties_of_the_String_Constructor/S15.5.3.2_A1.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.3.2_A1; -* @section: 15.5.3.2; -* @assertion: The length property of the fromCharCode function is 1; -* @description: Checking String.fromCharCode.length; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof String.fromCharCode !== "function") { - $ERROR('#1: typeof String.fromCharCode === "function". Actual: typeof String.fromCharCode ==='+typeof String.fromCharCode ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (!(String.hasOwnProperty("fromCharCode"))) { - $ERROR('#2: String.hasOwnProperty("fromCharCode") return true. Actual: '+String.hasOwnProperty("fromCharCode")); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (String.fromCharCode.length !== 1) { - $ERROR('#3: String.fromCharCode.length === 1. Actual: String.fromCharCode.length ==='+String.fromCharCode.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.3_Properties_of_the_String_Constructor/S15.5.3.2_A2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.3_Properties_of_the_String_Constructor/S15.5.3.2_A2.js deleted file mode 100644 index 181bd5763..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.3_Properties_of_the_String_Constructor/S15.5.3.2_A2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.3.2_A2; -* @section: 15.5.3.2; -* @assertion: String.fromCharCode () returns empty string; -* @description: Call String.fromCharCode(); -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (String.fromCharCode() !== "") { - $ERROR('#1: String.fromCharCode () returns empty string. Actual: '+String.fromCharCode()); -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.3_Properties_of_the_String_Constructor/S15.5.3.2_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.3_Properties_of_the_String_Constructor/S15.5.3.2_A3_T1.js deleted file mode 100644 index 8bbb717ab..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.3_Properties_of_the_String_Constructor/S15.5.3.2_A3_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.3.2_A3_T1; -* @section: 15.5.3.2; -* @assertion: String.fromCharCode ( [ char0 [ , char1 [ , ... ] ] ] ); -* @description: Call String.fromCharCode(65,66,66,65); -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (String.fromCharCode(65,66,66,65) !== "ABBA") { - $ERROR('#1: String.fromCharCode(65,66,66,65) === "ABBA". Actual: String.fromCharCode(65,66,66,65) ==='+String.fromCharCode(65,66,66,65) ); -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.3_Properties_of_the_String_Constructor/S15.5.3.2_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.3_Properties_of_the_String_Constructor/S15.5.3.2_A3_T2.js deleted file mode 100644 index 285725a40..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.3_Properties_of_the_String_Constructor/S15.5.3.2_A3_T2.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.3.2_A3_T2; -* @section: 15.5.3.2; -* @assertion: String.fromCharCode ( [ char0 [ , char1 [ , ... ] ] ] ); -* @description: Create function variable, that equal String.fromCharCode, delete original String.fromCharCode and use created variable; -*/ - -__fcc__func = String.fromCharCode; - -delete String.fromCharCode; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__fcc__func(65,66,66,65) !== "ABBA") { - $ERROR('#1: __fcc__func = String.fromCharCode; delete String.fromCharCode; __fcc__func(65,66,66,65) === "ABBA". Actual: __fcc__func(65,66,66,65) ==='+__fcc__func(65,66,66,65) ); -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.3_Properties_of_the_String_Constructor/S15.5.3.2_A4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.3_Properties_of_the_String_Constructor/S15.5.3.2_A4.js deleted file mode 100644 index 88e406e89..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.3_Properties_of_the_String_Constructor/S15.5.3.2_A4.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.3.2_A4; -* @section: 15.5.3.2; -* @assertion: String.fromCharCode has not [[construct]] method; -* @description: Checking if creating "new String.fromCharCode" fails; -*/ - -__fcc__func = String.fromCharCode; - -delete String.fromCharCode; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try { - var __obj = new __fcc__func(65,66,66,65); - $FAIL('#1: __fcc__func = String.fromCharCode; var __obj = new __fcc__func(65,66,66,65) lead to throwing exception'); -} catch (e) {} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.3_Properties_of_the_String_Constructor/S15.5.3_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.3_Properties_of_the_String_Constructor/S15.5.3_A1.js deleted file mode 100644 index 900b07825..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.3_Properties_of_the_String_Constructor/S15.5.3_A1.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.3_A1; -* @section: 15.5.3, 15.5.4; -* @assertion: String has length property whose value is 1; -* @description: Checking String.length; -*/ - -////////////////////////////////////////////////////////////////////////////// -// CHECK# -if (String.length !== 1) { - $ERROR('String has length property whose value is 1. Actual: String.length==='+String.length); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.3_Properties_of_the_String_Constructor/S15.5.3_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.3_Properties_of_the_String_Constructor/S15.5.3_A2_T1.js deleted file mode 100644 index 8657ea6cf..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.3_Properties_of_the_String_Constructor/S15.5.3_A2_T1.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.3_A2_T1; -* @section: 15.5.3, 15.5.4; -* @assertion: The value of the internal [[Prototype]] property of the String constructor is the Function prototype object; -* @description: Checking Function.prototype.isPrototypeOf(String); -*/ - -////////////////////////////////////////////////////////////////////////////// -// CHECK# -if (!(Function.prototype.isPrototypeOf(String))) { - $ERROR('#1: Function.prototype.isPrototypeOf(String) return true. Actual: '+Function.prototype.isPrototypeOf(String)); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.3_Properties_of_the_String_Constructor/S15.5.3_A2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.3_Properties_of_the_String_Constructor/S15.5.3_A2_T2.js deleted file mode 100644 index c6dc4a12a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.3_Properties_of_the_String_Constructor/S15.5.3_A2_T2.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.3_A2_T2; -* @section: 15.5.3, 15.5.4; -* @assertion: The value of the internal [[Prototype]] property of the String constructor is the Function prototype object; -* @description: Add custom property to Function.prototype and check it at String; -*/ - -Function.prototype.indicator = 1; - -////////////////////////////////////////////////////////////////////////////// -// CHECK# -if (String.indicator !== 1) { - $ERROR('#1: Function.prototype.indicator = 1; String.indicator === 1. Actual: String.indicator ==='+String.indicator ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A10.js deleted file mode 100644 index f7506359f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A10.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.10_A10; -* @section: 15.5.4.10; -* @assertion: The String.prototype.match.length property has the attribute ReadOnly; -* @description: Checking if varying the String.prototype.match.length property fails; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!(String.prototype.match.hasOwnProperty('length'))) { - $FAIL('#1: String.prototype.match.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.match.hasOwnProperty('length')); -} -// -////////////////////////////////////////////////////////////////////////////// - -__obj = String.prototype.match.length; - -String.prototype.match.length = function(){return "shifted";}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (String.prototype.match.length !== __obj) { - $ERROR('#2: __obj = String.prototype.match.length; String.prototype.match.length = function(){return "shifted";}; String.prototype.match.length === __obj. Actual: '+String.prototype.match.length ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A11.js deleted file mode 100644 index 29ce3ba56..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A11.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.10_A11; -* @section: 15.5.4.10; -* @assertion: The length property of the match method is 1; -* @description: Checking String.prototype.match.length; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!(String.prototype.match.hasOwnProperty("length"))) { - $ERROR('#1: String.prototype.match.hasOwnProperty("length") return true. Actual: '+String.prototype.match.hasOwnProperty("length")); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (String.prototype.match.length !== 1) { - $ERROR('#2: String.prototype.match.length === 1. Actual: '+String.prototype.match.length ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A1_T1.js deleted file mode 100644 index f73cec485..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A1_T1.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.10_A1_T1; -* @section: 15.5.4.10; -* @assertion: String.prototype.match (regexp); -* @description: Arguments is true, and instance is object; -*/ - -__instance = new Object(true); - -__instance.match = String.prototype.match; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__instance.match(true)[0] !== "true") { - $ERROR('#1: __instance = new Object(true); __instance.match = String.prototype.match; __instance.match(true)[0] === "true". Actual: '+__instance.match(true)[0] ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A1_T10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A1_T10.js deleted file mode 100644 index e75726da3..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A1_T10.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.10_A1_T10; -* @section: 15.5.4.10; -* @assertion: String.prototype.match (regexp); -* @description: Call match (regexp) function with object argument; -*/ - -var __obj = {toString:function(){return "\u0041B";}} -var __str = "ABB\u0041BABAB"; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -with(__str){ - if (match(__obj)[0] !=="AB") { - $ERROR('#1: var x; var __obj = {toString:function(){return "\u0041B";}}; var __str = "ABB\u0041BABAB"; match(__obj)[0] ==="AB". Actual: '+match(__obj)[0] ); - } -} -// -////////////////////////////////////////////////////////////////////////////// - -var x; diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A1_T11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A1_T11.js deleted file mode 100644 index c6edbfac9..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A1_T11.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.10_A1_T11; -* @section: 15.5.4.10; -* @assertion: String.prototype.match (regexp); -* @description: Override toString function, toString throw exception, then call match (regexp) function with this object as argument; -*/ - -var __obj = {toString:function(){throw "intostr";}} -var __str = {str__:"ABB\u0041BABAB"}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -with(__str){ - with(str__){ - try { - var x = match(__obj); - $FAIL('#1: "var x = match(__obj)" lead to throwing exception'); - } catch (e) { - if (e!=="intostr") { - $ERROR('#1.1: Exception === "intostr". Actual: '+e); - } - } - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A1_T12.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A1_T12.js deleted file mode 100644 index 1fbfae4f8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A1_T12.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.10_A1_T12; -* @section: 15.5.4.10; -* @assertion: String.prototype.match (regexp); -* @description: Override toString and valueOf functions, valueOf throw exception, then call match (regexp) function with this object as argument; -*/ - -var __obj = {toString:function(){return {};},valueOf:function(){throw "intostr";}} -var __str = new String("ABB\u0041BABAB"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -with(__str){ - try { - var x = match(__obj); - $FAIL('#1: "var x = match(__obj)" lead to throwing exception'); - } catch (e) { - if (e!=="intostr") { - $ERROR('#1.1: Exception === "intostr". Actual: '+e); - } - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A1_T13.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A1_T13.js deleted file mode 100644 index 840a3645f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A1_T13.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.10_A1_T13; -* @section: 15.5.4.10; -* @assertion: String.prototype.match (regexp); -* @description: Override toString and valueOf functions, then call match (regexp) function with this object as argument; -*/ - -var __obj = {toString:function(){return {};},valueOf:function(){return 1;}} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if ("ABB\u0041B\u0031ABAB\u0031BBAA".match(__obj)[0] !=="1") { - $ERROR('#1: var __obj = {toString:function(){return {};},valueOf:function(){return 1;}}; "ABB\\u0041B\\u0031ABAB\\u0031BBAA".match(__obj)[0] ==="1". Actual: '+("ABB\u0041B\u0031ABAB\u0031BBAA".match(__obj)[0]) ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if ("ABB\u0041B\u0031ABAB\u0031BBAA".match(__obj).length !== 1) { - $ERROR('#3: var __obj = {toString:function(){return {};},valueOf:function(){return 1;}}; "ABB\\u0041B\\u0031ABAB\\u0031BBAA".match(__obj).length === 1. Actual: '+("ABB\u0041B\u0031ABAB\u0031BBAA".match(__obj).length) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A1_T14.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A1_T14.js deleted file mode 100644 index 56c307d3a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A1_T14.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.10_A1_T14; -* @section: 15.5.4.10; -* @assertion: String.prototype.match (regexp); -* @description: Call match (regexp) function with RegExp object as argument from string; -*/ - -var __reg = new RegExp("77"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if ("ABB\u0041BABAB\u0037\u0037BBAA".match(__reg)[0] !== "77") { - $ERROR('#1: var __reg = new RegExp("77"); "ABB\\u0041BABAB\\u0037\\u0037BBAA".match(__reg)[0] === "77". Actual: '+("ABB\u0041BABAB\u0037\u0037BBAA".match(__reg)[0]) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A1_T2.js deleted file mode 100644 index a6f174239..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A1_T2.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.10_A1_T2; -* @section: 15.5.4.10; -* @assertion: String.prototype.match (regexp); -* @description: Argument is function that return boolean, and instance is Boolean object; -*/ - -__instance = new Boolean; - -__instance.match = String.prototype.match; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__instance.match(function(){return false;}())[0] !== "false") { - $ERROR('#1: __instance = new Boolean; __instance.match = String.prototype.match; __instance.match(function(){return false;}())[0] === "false". Actual: '+__instance.match(function(){return false;}())[0] ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A1_T3.js deleted file mode 100644 index d94ec1605..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A1_T3.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.10_A1_T3; -* @section: 15.5.4.10; -* @assertion: String.prototype.match (regexp); -* @description: Checking by using eval; -*/ - -match = String.prototype.match; - -if (typeof toString === "undefined"){ - toString = Object.prototype.toString; -} - -__class__ = toString(); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (match(eval("\"bj\""))[0] !== "bj") { - $ERROR('#1: match = String.prototype.match; match(eval("\\"bj\\""))[0] === "bj". Actual: '+match(eval("\"bj\""))[0] ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A1_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A1_T4.js deleted file mode 100644 index f1e143463..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A1_T4.js +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.10_A1_T4; -* @section: 15.5.4.10; -* @assertion: String.prototype.match (regexp); -* @description: Call match (regexp) function without arguments of string; -*/ - -__matched = "".match(); - -__expected = RegExp().exec(""); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__matched.length !== __expected.length) { - $ERROR('#1: __matched = "".match(); __expected = RegExp().exec(""); __matched.length === __expected.length. Actual: '+__matched.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__matched.index !== __expected.index) { - $ERROR('#2: __matched = "".match(); __expected = RegExp().exec(""); __matched.index === __expected.index. Actual: '+__matched.index ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__matched.input !== __expected.input) { - $ERROR('#3: __matched = "".match(); __expected = RegExp().exec(""); __matched.input === __expected.input. Actual: '+__matched.input ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__matched[index]!==__expected[index]) { - $ERROR('#4.'+index+': __matched = "".match(); __expected = RegExp().exec(""); __matched['+index+']===__expected['+index+']. Actual: '+__matched[index]); - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A1_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A1_T5.js deleted file mode 100644 index 3a8da5dad..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A1_T5.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.10_A1_T5; -* @section: 15.5.4.10; -* @assertion: String.prototype.match (regexp); -* @description: Call match (regexp) function with null argument of function object; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -//since ToString(null) evaluates to "null" match(null) evaluates to match("null") -if (function(){return "gnulluna"}().match(null)[0] !== "null") { - $ERROR('#1: function(){return "gnulluna"}().match(null)[0] === "null". Actual: '+function(){return "gnulluna"}().match(null)[0] ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A1_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A1_T6.js deleted file mode 100644 index b5e4f5b4e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A1_T6.js +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.10_A1_T6; -* @section: 15.5.4.10; -* @assertion: String.prototype.match (regexp); -* @description: Call match (regexp) function with x argument of new String object, where x is undefined variable; -*/ - -__matched = new String("undefined").match(x); - -__expected = RegExp(x).exec("undefined"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__matched.length !== __expected.length) { - $ERROR('#1: __matched = new String("undefined").match(x); __expected = RegExp(x).exec("undefined"); __matched.length === __expected.length. Actual: '+__matched.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__matched.index !== __expected.index) { - $ERROR('#2: __matched = new String("undefined").match(x); __expected = RegExp(x).exec("undefined"); __matched.index === __expected.index. Actual: '+__matched.index ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__matched.input !== __expected.input) { - $ERROR('#3: __matched = new String("undefined").match(x); __expected = RegExp(x).exec("undefined"); __matched.input === __expected.input. Actual: '+__matched.input ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__matched[index]!==__expected[index]) { - $ERROR('#4.'+index+': __matched = new String("undefined").match(x); __expected = RegExp(x).exec("undefined"); __matched['+index+']===__expected['+index+']. Actual: '+__matched[index]); - } -} -// -////////////////////////////////////////////////////////////////////////////// - -var x; - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A1_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A1_T7.js deleted file mode 100644 index 0fa2419c5..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A1_T7.js +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.10_A1_T7; -* @section: 15.5.4.10; -* @assertion: String.prototype.match (regexp); -* @description: Call match (regexp) function with undefined argument of string object; -*/ - -__matched = String("undefined").match(undefined); - -__expected = RegExp(undefined).exec("undefined"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__matched.length !== __expected.length) { - $ERROR('#1: __matched = String("undefined").match(undefined); __expected = RegExp(undefined).exec("undefined"); __matched.length === __expected.length. Actual: '+__matched.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__matched.index !== __expected.index) { - $ERROR('#2: __matched = String("undefined").match(undefined); __expected = RegExp(undefined).exec("undefined"); __matched.index === __expected.index. Actual: '+__matched.index ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__matched.input !== __expected.input) { - $ERROR('#3: __matched = String("undefined").match(undefined); __expected = RegExp(undefined).exec("undefined"); __matched.input === __expected.input. Actual: '+__matched.input ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__matched[index]!==__expected[index]) { - $ERROR('#4.'+index+': __matched = String("undefined").match(undefined); __expected = RegExp(undefined).exec("undefined"); __matched['+index+']===__expected['+index+']. Actual: '+__matched[index]); - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A1_T8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A1_T8.js deleted file mode 100644 index 15ef56df6..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A1_T8.js +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.10_A1_T8; -* @section: 15.5.4.10; -* @assertion: String.prototype.match (regexp); -* @description: Call match (regexp) function with void 0 argument of string object; -* -*/ - -__obj = {toString:function(){}}; - -__matched = String(__obj).match(void 0); - -__expected = RegExp(void 0).exec("undefined"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__matched.length !== __expected.length) { - $ERROR('#1: __obj = {toString:function(){}}; __matched = String(__obj).match(void 0); __expected = RegExp(void 0).exec("undefined"); __matched.length === __expected.length. Actual: '+__matched.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__matched.index !== __expected.index) { - $ERROR('#2: __obj = {toString:function(){}}; __matched = String(__obj).match(void 0); __expected = RegExp(void 0).exec("undefined"); __matched.index === __expected.index. Actual: '+__matched.index ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__matched.input !== __expected.input) { - $ERROR('#3: __obj = {toString:function(){}}; __matched = String(__obj).match(void 0); __expected = RegExp(void 0).exec("undefined"); __matched.input === __expected.input. Actual: '+__matched.input ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__matched[index]!==__expected[index]) { - $ERROR('#4.'+index+': __obj = {toString:function(){}}; __matched = String(__obj).match(void 0); __expected = RegExp(void 0).exec("undefined"); __matched['+index+']===__expected['+index+']. Actual: '+__matched[index]); - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A1_T9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A1_T9.js deleted file mode 100644 index 2d3c4f296..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A1_T9.js +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.10_A1_T9; -* @section: 15.5.4.10; -* @assertion: String.prototype.match (regexp); -* @description: Call match (regexp) function with function(){}() argument of string object; -*/ - -__obj = { - valueOf:function(){}, - toString:void 0 -}; - -__matched = new String(__obj).match(function(){}()); - -__expected = RegExp(undefined).exec("undefined"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__matched.length !== __expected.length) { - $ERROR('#1: __obj = {valueOf:function(){}, toString:void 0}; __matched = new String(__obj).match(function(){}()); __expected = RegExp(undefined).exec("undefined"); __matched.length === __expected.length. Actual: '+__matched.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__matched.index !== __expected.index) { - $ERROR('#2: __obj = {valueOf:function(){}, toString:void 0}; __matched = new String(__obj).match(function(){}()); __expected = RegExp(undefined).exec("undefined"); __matched.index === __expected.index. Actual: '+__matched.index ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__matched.input !== __expected.input) { - $ERROR('#3: __obj = {valueOf:function(){}, toString:void 0}; __matched = new String(__obj).match(function(){}()); __expected = RegExp(undefined).exec("undefined"); __matched.input === __expected.input. Actual: '+__matched.input ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__matched[index]!==__expected[index]) { - $ERROR('#4.'+index+': __obj = {valueOf:function(){}, toString:void 0}; __matched = new String(__obj).match(function(){}()); __expected = RegExp(undefined).exec("undefined"); __matched['+index+']===__expected['+index+']. Actual: '+__matched[index]); - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A2_T1.js deleted file mode 100644 index b72d461a8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A2_T1.js +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.10_A2_T1; -* @section: 15.5.4.10, 15.10.6.2; -* @assertion: match returns array as specified in 15.10.6.2; -* @description: Regular expression is 3; -*/ - -__string = "1234567890"; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__string.match(3)[0]!== "3") { - $ERROR('#1: __string = "1234567890"; __string.match(3)[0]=== "3". Actual: '+__string.match(3)[0]); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__string.match(3).length !==1) { - $ERROR('#2: __string = "1234567890"; __string.match(3).length ===1. Actual: '+__string.match(3).length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__string.match(3).index !==2) { - $ERROR('#3: __string = "1234567890"; __string.match(3).index ===2. Actual: '+__string.match(3).index ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (__string.match(3).input !==__string) { - $ERROR('#4: __string = "1234567890"; __string.match(3).input ===__string. Actual: '+__string.match(3).input ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A2_T10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A2_T10.js deleted file mode 100644 index e43c719b3..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A2_T10.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.10_A2_T10; -* @section: 15.5.4.10, 15.10.6.2; -* @assertion: match returns array as specified in 15.10.6.2; -* @description: Regular expression is /([\d]{5})([-\ ]?[\d]{4})?$/. Last match is undefined. -* And regular expression object have property lastIndex = tested_string.lastIndexOf("0"); -*/ - -__string = "Boston, MA 02134"; - -__matches=["02134", "02134", undefined]; - -__re = /([\d]{5})([-\ ]?[\d]{4})?$/; - -__re.lastIndex = __string.lastIndexOf("0"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__string.match(__re).length!== 3) { - $ERROR('#1: __string.match(__re).length=== 3. Actual: '+__string.match(__re).length); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__string.match(__re).index !==__string.lastIndexOf("0")) { - $ERROR('#2: __string.match(__re).index ===__string.lastIndexOf("0"). Actual: '+__string.match(__re).index ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -for(var mi=0; mi<__matches.length; mi++) { - if (__string.match(__re)[mi]!==__matches[mi]) { - $ERROR('#3.'+mi+': __string.match(__re)['+mi+']===__matches['+mi+']. Actual: '+__string.match(__re)[mi]); - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A2_T11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A2_T11.js deleted file mode 100644 index a6742dd3a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A2_T11.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.10_A2_T11; -* @section: 15.5.4.10, 15.10.6.2; -* @assertion: match returns array as specified in 15.10.6.2; -* @description: Regular expression is /([\d]{5})([-\ ]?[\d]{4})?$/. Last match is undefined. -* And regular expression object have property lastIndex = tested_string.lastIndexOf("0")+1; -*/ - -__string = "Boston, MA 02134"; - -__matches=["02134", "02134", undefined]; - -__re = /([\d]{5})([-\ ]?[\d]{4})?$/; - -__re.lastIndex = __string.lastIndexOf("0")+1; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__string.match(__re).length!== 3) { - $ERROR('#1: __string.match(__re).length=== 3. Actual: '+__string.match(__re).length); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__string.match(__re).index !==__string.lastIndexOf("0")) { - $ERROR('#2: __string.match(__re).index ===__string.lastIndexOf("0"). Actual: '+__string.match(__re).index ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -for(var mi=0; mi<__matches.length; mi++) { - if (__string.match(__re)[mi]!==__matches[mi]) { - $ERROR('#3.'+mi+': __string.match(__re)['+mi+']===__matches['+mi+']. Actual: '+__string.match(__re)[mi]); - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A2_T12.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A2_T12.js deleted file mode 100644 index a3a3f7a7c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A2_T12.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.10_A2_T12; -* @section: 15.5.4.10, 15.10.6.2; -* @assertion: match returns array as specified in 15.10.6.2; -* @description: Regular expression is variable that have value /([\d]{5})([-\ ]?[\d]{4})?$/g; -*/ - -__matches=["02134"]; - -__string = "Boston, MA 02134"; - -__re = /([\d]{5})([-\ ]?[\d]{4})?$/g; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__string.match(__re).length!== __matches.length) { - $ERROR('#1: __string.match(__re).length=== __matches.length. Actual: '+__string.match(__re).length); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__string.match(__re)[0]!==__matches[0]) { - $ERROR('#2: __string.match(__re)[0]===__matches[0]. Actual: '+__string.match(__re)[0]); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A2_T13.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A2_T13.js deleted file mode 100644 index 266b8b89a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A2_T13.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.10_A2_T13; -* @section: 15.5.4.10, 15.10.6.2; -* @assertion: match returns array as specified in 15.10.6.2; -* @description: Regular expression is /([\d]{5})([-\ ]?[\d]{4})?$/g. -* And regular expression object have property lastIndex = 0; -*/ - -__matches=["02134"]; - -__re = /([\d]{5})([-\ ]?[\d]{4})?$/g; -__re.lastIndex = 0; - -__string = "Boston, MA 02134"; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__string.match(__re).length!== __matches.length) { - $ERROR('#1: __string.match(__re).length=== __matches.length. Actual: '+__string.match(__re).length); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__string.match(__re)[0]!==__matches[0]) { - $ERROR('#3: __string.match(__re)[0]===__matches[0]. Actual: '+__string.match(__re)[0]); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A2_T14.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A2_T14.js deleted file mode 100644 index 1735898bd..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A2_T14.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.10_A2_T14; -* @section: 15.5.4.10, 15.10.6.2; -* @assertion: match returns array as specified in 15.10.6.2; -* @description: Regular expression is /([\d]{5})([-\ ]?[\d]{4})?$/g. -* And regular expression object have property lastIndex = tested_string.length; -*/ - -__string = "Boston, MA 02134"; - -__matches=["02134"]; - -__re = /([\d]{5})([-\ ]?[\d]{4})?$/g; - -__re.lastIndex = __string.length; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__string.match(__re).length!== __matches.length) { - $ERROR('#1: __string.match(__re).length=== __matches.length. Actual: '+__string.match(__re).length); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__string.match(__re)[0]!==__matches[0]) { - $ERROR('#3: __string.match(__re)[0]===__matches[0]. Actual: '+__string.match(__re)[0]); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A2_T15.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A2_T15.js deleted file mode 100644 index 22b3f8159..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A2_T15.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.10_A2_T15; -* @section: 15.5.4.10, 15.10.6.2; -* @assertion: match returns array as specified in 15.10.6.2; -* @description: Regular expression is /([\d]{5})([-\ ]?[\d]{4})?$/. -* And regular expression object have property lastIndex = tested_string.lastIndexOf("0"); -*/ - -__string = "Boston, MA 02134"; - -__matches=["02134"]; - -__re = /([\d]{5})([-\ ]?[\d]{4})?$/g; - -__re.lastIndex = __string.lastIndexOf("0"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__string.match(__re).length!== __matches.length) { - $ERROR('#1: __string.match(__re).length=== __matches.length. Actual: '+__string.match(__re).length); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__string.match(__re)[0]!==__matches[0]) { - $ERROR('#3: __string.match(__re)[0]===__matches[0]. Actual: '+__string.match(__re)[0]); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A2_T16.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A2_T16.js deleted file mode 100644 index 882d7ab91..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A2_T16.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.10_A2_T16; -* @section: 15.5.4.10, 15.10.6.2; -* @assertion: match returns array as specified in 15.10.6.2; -* @description: Regular expression is /([\d]{5})([-\ ]?[\d]{4})?$/. -* And regular expression object have property lastIndex = tested_string.lastIndexOf("0")+1; -*/ - -__string = "Boston, MA 02134"; - -__matches=["02134"]; - -__re = /([\d]{5})([-\ ]?[\d]{4})?$/g; - -__re.lastIndex = __string.lastIndexOf("0")+1; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__string.match(__re).length!== __matches.length) { - $ERROR('#1: __string.match(__re).length=== __matches.length. Actual: '+__string.match(__re).length); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__string.match(__re)[0]!==__matches[0]) { - $ERROR('#3: __string.match(__re)[0]===__matches[0]. Actual: '+__string.match(__re)[0]); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A2_T17.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A2_T17.js deleted file mode 100644 index 904baefc1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A2_T17.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.10_A2_T17; -* @section: 15.5.4.10, 15.10.6.2; -* @assertion: match returns array as specified in 15.10.6.2; -* @description: Regular expression is /0./; -*/ - -__re = /0./; - -__num = 10203040506070809000; - -Number.prototype.match = String.prototype.match; - -//__matches = ["02"]; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__num.match(__re)[0]!== "02") { - $ERROR('#1: __num.match(__re)[0]=== "02". Actual: '+__num.match(__re)[0]); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__num.match(__re).length !==1) { - $ERROR('#2: __num.match(__re).length ===1. Actual: '+__num.match(__re).length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__num.match(__re).index !==1) { - $ERROR('#3: __num.match(__re).index ===1. Actual: '+__num.match(__re).index ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (__num.match(__re).input !==String(__num)) { - $ERROR('#4: __num.match(__re).input ===String(__num). Actual: '+__num.match(__re).input ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A2_T18.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A2_T18.js deleted file mode 100644 index 4960125f7..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A2_T18.js +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.10_A2_T18; -* @section: 15.5.4.10, 15.10.6.2; -* @assertion: match returns array as specified in 15.10.6.2; -* @description: Regular expression is /0./. -* And regular expression object have property lastIndex = 0; -*/ - -__re = /0./; - -__re.lastIndex = 0; - -__num = 10203040506070809000; - -Number.prototype.match = String.prototype.match; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__num.match(__re)[0]!== "02") { - $ERROR('#1: __num.match(__re)[0]=== "02". Actual: '+__num.match(__re)[0]); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__num.match(__re).length !==1) { - $ERROR('#2: __num.match(__re).length ===1. Actual: '+__num.match(__re).length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__num.match(__re).index !==1) { - $ERROR('#3: __num.match(__re).index ===1. Actual: '+__num.match(__re).index ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (__num.match(__re).input !==String(__num)) { - $ERROR('#4: __num.match(__re).input ===String(__num). Actual: '+__num.match(__re).input ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A2_T2.js deleted file mode 100644 index 24c0cae95..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A2_T2.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.10_A2_T2; -* @section: 15.5.4.10, 15.10.6.2; -* @assertion: match returns array as specified in 15.10.6.2; -* @description: Regular expression is /34/g; -*/ - -__matches=["34","34","34"]; - -__string = "343443444"; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__string.match(/34/g).length!== 3) { - $ERROR('#1: __string = "343443444"; __string.match(/34/g).length=== 3. Actual: '+__string.match(/34/g).length); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -for(var mi=0; mi<__matches.length; mi++) { - if (__string.match(/34/g)[mi]!==__matches[mi]) { - $ERROR('#2.'+mi+': __matches=["34","34","34"]; __string = "343443444"; __string.match(/34/g)['+mi+']===__matches['+mi+']. Actual: '+__string.match(/34/g)[mi]); - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A2_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A2_T3.js deleted file mode 100644 index ac1165db2..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A2_T3.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.10_A2_T3; -* @section: 15.5.4.10, 15.10.6.2; -* @assertion: match returns array as specified in 15.10.6.2; -* @description: Regular expression is /\d{1}/g; -*/ - -__matches=["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"]; - -__string = "123456abcde7890"; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__string.match(/\d{1}/g).length!== 10) { - $ERROR('#1: __string = "123456abcde7890"; __string.match(/\\d{1}/g).length=== 10. Actual: '+__string.match(/\d{1}/g).length); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -for(var mi=0; mi<__matches.length; mi++) { - if (__string.match(/\d{1}/g)[mi]!==__matches[mi]) { - $ERROR('#2.'+mi+': __matches=["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"]; __string = "123456abcde7890"; __string.match(/\\d{1}/g)['+mi+']===__matches['+mi+']. Actual: '+__string.match(/\d{1}/g)[mi]); - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A2_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A2_T4.js deleted file mode 100644 index 20de42000..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A2_T4.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.10_A2_T4; -* @section: 15.5.4.10, 15.10.6.2; -* @assertion: match returns array as specified in 15.10.6.2; -* @description: Regular expression is /\d{2}/g; -*/ - -__matches=["12", "34", "56", "78", "90"]; - -__string = "123456abcde7890"; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__string.match(/\d{2}/g).length!== 5) { - $ERROR('#1: __string = "123456abcde7890"; __string.match(/\\d{2}/g).length=== 5. Actual: '+__string.match(/\d{2}/g).length); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -for(var mi=0; mi<__matches.length; mi++) { - if (__string.match(/\d{2}/g)[mi]!==__matches[mi]) { - $ERROR('#2.'+mi+': __matches=["12", "34", "56", "78", "90"]; __string = "123456abcde7890"; __string.match(/\\d{2}/g)['+mi+']===__matches['+mi+']. Actual: '+__string.match(/\d{2}/g)[mi]); - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A2_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A2_T5.js deleted file mode 100644 index a2746f21e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A2_T5.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.10_A2_T5; -* @section: 15.5.4.10, 15.10.6.2; -* @assertion: match returns array as specified in 15.10.6.2; -* @description: Regular expression is /\D{2}/g; -*/ - -__matches=["ab", "cd"]; - -__string = "123456abcde7890"; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__string.match(/\D{2}/g).length!== 2) { - $ERROR('#1: __string = "123456abcde7890"; __string.match(/\\D{2}/g).length=== 2. Actual: '+__string.match(/\D{2}/g).length); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -for(var mi=0; mi<__matches.length; mi++) { - if (__string.match(/\D{2}/g)[mi]!==__matches[mi]) { - $ERROR('#2.'+mi+': __matches=["ab", "cd"]; __string = "123456abcde7890"; __string.match(/\\D{2}/g)['+mi+']===__matches['+mi+']. Actual: '+__string.match(/\D{2}/g)[mi]); - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A2_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A2_T6.js deleted file mode 100644 index eb05777e1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A2_T6.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.10_A2_T6; -* @section: 15.5.4.10, 15.10.6.2; -* @assertion: match returns array as specified in 15.10.6.2; -* @description: Regular expression is /([\d]{5})([-\ ]?[\d]{4})?$/. Last match is void 0; -*/ - -__string = "Boston, Mass. 02134"; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__string.match(/([\d]{5})([-\ ]?[\d]{4})?$/)[0]!== "02134") { - $ERROR('#1: __string = "Boston, Mass. 02134"; __string.match(/([\\d]{5})([-\\ ]?[\\d]{4})?$/)[0]=== "02134". Actual: '+__string.match(/([\d]{5})([-\ ]?[\d]{4})?$/)[0]); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__string.match(/([\d]{5})([-\ ]?[\d]{4})?$/)[1]!== "02134") { - $ERROR('#2: __string = "Boston, Mass. 02134"; __string.match(/([\\d]{5})([-\\ ]?[\\d]{4})?$/)[1]=== "02134". Actual: '+__string.match(/([\d]{5})([-\ ]?[\d]{4})?$/)[1]); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__string.match(/([\d]{5})([-\ ]?[\d]{4})?$/)[2]!== void 0) { - $ERROR('#3: __string = "Boston, Mass. 02134"; __string.match(/([\\d]{5})([-\\ ]?[\\d]{4})?$/)[2]=== void 0. Actual: '+__string.match(/([\d]{5})([-\ ]?[\d]{4})?$/)[2]); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (__string.match(/([\d]{5})([-\ ]?[\d]{4})?$/).length !==3) { - $ERROR('#4: __string = "Boston, Mass. 02134"; __string.match(/([\\d]{5})([-\\ ]?[\\d]{4})?$/).length ===3. Actual: '+__string.match(/([\d]{5})([-\ ]?[\d]{4})?$/).length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#5 -if (__string.match(/([\d]{5})([-\ ]?[\d]{4})?$/).index !==14) { - $ERROR('#5: __string = "Boston, Mass. 02134"; __string.match(/([\\d]{5})([-\\ ]?[\\d]{4})?$/).index ===14. Actual: '+__string.match(/([\d]{5})([-\ ]?[\d]{4})?$/).index ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#6 -if (__string.match(/([\d]{5})([-\ ]?[\d]{4})?$/).input !==__string) { - $ERROR('#6: __string = "Boston, Mass. 02134"; __string.match(/([\\d]{5})([-\\ ]?[\\d]{4})?$/).input ===__string. Actual: '+__string.match(/([\d]{5})([-\ ]?[\d]{4})?$/).input ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A2_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A2_T7.js deleted file mode 100644 index afbba0eb0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A2_T7.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.10_A2_T7; -* @section: 15.5.4.10, 15.10.6.2; -* @assertion: match returns array as specified in 15.10.6.2; -* @description: Regular expression is /([\d]{5})([-\ ]?[\d]{4})?$/g; -*/ - -__matches=["02134"]; - -__string = "Boston, Mass. 02134"; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__string.match(/([\d]{5})([-\ ]?[\d]{4})?$/g).length!== 1) { - $ERROR('#1: __string = "Boston, Mass. 02134"; __string.match(/([\\d]{5})([-\\ ]?[\\d]{4})?$/g).length=== 1. Actual: '+__string.match(/([\d]{5})([-\ ]?[\d]{4})?$/g).length); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__string.match(/([\d]{5})([-\ ]?[\d]{4})?$/g)[0]!==__matches[0]) { - $ERROR('#2: __matches=["02134"]; __string = "Boston, Mass. 02134"; __string.match(/([\\d]{5})([-\\ ]?[\\d]{4})?$/g)[0]===__matches[0]. Actual: '+__string.match(/([\d]{5})([-\ ]?[\d]{4})?$/g)[0]); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A2_T8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A2_T8.js deleted file mode 100644 index b11a3b023..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A2_T8.js +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.10_A2_T8; -* @section: 15.5.4.10, 15.10.6.2; -* @assertion: match returns array as specified in 15.10.6.2; -* @description: Regular expression is /([\d]{5})([-\ ]?[\d]{4})?$/. Last match is undefined. -* And regular expression object have property lastIndex = 0; -*/ - -__matches=["02134", "02134", undefined]; - -__re = /([\d]{5})([-\ ]?[\d]{4})?$/; -__re.lastIndex = 0; - -__string = "Boston, MA 02134"; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__string.match(__re).length!== 3) { - $ERROR('#1: __string = "Boston, MA 02134"; __re = /([\d]{5})([-\ ]?[\d]{4})?$/; __string.match(__re).length=== 3. Actual: '+__string.match(__re).length); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__string.match(__re).index !==__string.lastIndexOf("0")) { - $ERROR('#2: __string = "Boston, MA 02134"; __re = /([\d]{5})([-\ ]?[\d]{4})?$/; __re.lastIndex = 0; __string.match(__re).index ===__string.lastIndexOf("0"). Actual: '+__string.match(__re).index ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -for(var mi=0; mi<__matches.length; mi++) { - if (__string.match(__re)[mi]!==__matches[mi]) { - $ERROR('#3.'+mi+': __string = "Boston, MA 02134"; __re = /([\d]{5})([-\ ]?[\d]{4})?$/; __matches=["02134", "02134", undefined]; __string.match(__re)['+mi+']===__matches['+mi+']. Actual: '+__string.match(__re)[mi]); - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A2_T9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A2_T9.js deleted file mode 100644 index 8e4c31e68..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A2_T9.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.10_A2_T9; -* @section: 15.5.4.10, 15.10.6.2; -* @assertion: match returns array as specified in 15.10.6.2; -* @description: Regular expression is /([\d]{5})([-\ ]?[\d]{4})?$/. Last match is undefined. -* And regular expression object have property lastIndex = tested_string.length; -*/ - -__string = "Boston, MA 02134"; - -__matches=["02134", "02134", undefined]; - -__re = /([\d]{5})([-\ ]?[\d]{4})?$/; - -__re.lastIndex = __string.length; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__string.match(__re).length!== 3) { - $ERROR('#1: __string = "Boston, MA 02134"; __re = /([\d]{5})([-\ ]?[\d]{4})?$/; __string.match(__re).length=== 3. Actual: '+__string.match(__re).length); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__string.match(__re).index !==__string.lastIndexOf("0")) { - $ERROR('#2: __string = "Boston, MA 02134"; __re = /([\d]{5})([-\ ]?[\d]{4})?$/; __re.lastIndex = __string.length; __string.match(__re).index ===__string.lastIndexOf("0"). Actual: '+__string.match(__re).index ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -for(var mi=0; mi<__matches.length; mi++) { - if (__string.match(__re)[mi]!==__matches[mi]) { - $ERROR('#3.'+mi+': __string = "Boston, MA 02134"; __re = /([\d]{5})([-\ ]?[\d]{4})?$/; __matches=["02134", "02134", undefined]; __string.match(__re)['+mi+']===__matches['+mi+']. Actual: '+__string.match(__re)[mi]); - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A6.js deleted file mode 100644 index 20a410171..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A6.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.10_A6; -* @section: 15.5.4.10, 13.2; -* @assertion: String.prototype.match has not prototype property; -* @description: Checking String.prototype.match.prototype; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (String.prototype.match.prototype !== undefined) { - $ERROR('#1: String.prototype.match.prototype === undefined. Actual: '+String.prototype.match.prototype ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A7.js deleted file mode 100644 index e7ae8b98b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A7.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.10_A7; -* @section: 15.5.4.10, 13.2; -* @assertion: String.prototype.match can't be used as constructor; -* @description: Checking if creating "String.prototype.match object" fails; -*/ - -__FACTORY = String.prototype.match; - -try { - __instance = new __FACTORY; - $FAIL('#1: __FACTORY = String.prototype.match; __FACTORY = String.prototype.match; __instance = new __FACTORY lead to throwing exception'); -} catch (e) {} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A8.js deleted file mode 100644 index 10413eedd..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A8.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.10_A8; -* @section: 15.5.4.10; -* @assertion: The String.prototype.match.length property has the attribute DontEnum; -* @description: Checking if enumerating the String.prototype.match.length property fails; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#0 -if (!(String.prototype.match.hasOwnProperty('length'))) { - $FAIL('#0: String.prototype.match.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.match.hasOwnProperty('length')); -} -// -////////////////////////////////////////////////////////////////////////////// - - -////////////////////////////////////////////////////////////////////////////// -// CHECK#1 -if (String.prototype.match.propertyIsEnumerable('length')) { - $ERROR('#1: String.prototype.match.propertyIsEnumerable(\'length\') return false'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -// CHECK#2 -count=0; - -for (p in String.prototype.match){ - if (p==="length") count++; -} - -if (count !== 0) { - $ERROR('#2: count=0; for (p in String.prototype.match){if (p==="length") count++;}; count === 0. Actual: '+count ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A9.js deleted file mode 100644 index 5e5ebb1fe..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.10_String.prototype.match/S15.5.4.10_A9.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.10_A9; -* @section: 15.5.4.10; -* @assertion: The String.prototype.match.length property has the attribute DontDelete; -* @description: Checking if deleting the String.prototype.match.length property fails; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#0 -if (!(String.prototype.match.hasOwnProperty('length'))) { - $FAIL('#0: String.prototype.match.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.match.hasOwnProperty('length')); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (delete String.prototype.match.length) { - $ERROR('#1: delete String.prototype.match.length return false'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (!(String.prototype.match.hasOwnProperty('length'))) { - $FAIL('#2: delete String.prototype.match.length; String.prototype.match.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.match.hasOwnProperty('length')); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A10.js deleted file mode 100644 index fc9cae3a3..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A10.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.11_A10; -* @section: 15.5.4.11; -* @assertion: The String.prototype.replace.length property has the attribute ReadOnly; -* @description: Checking if varying the String.prototype.replace.length property fails; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!(String.prototype.replace.hasOwnProperty('length'))) { - $FAIL('#1: String.prototype.replace.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.replace.hasOwnProperty('length')); -} -// -////////////////////////////////////////////////////////////////////////////// - -__obj = String.prototype.replace.length; - -String.prototype.replace.length = function(){return "shifted";}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (String.prototype.replace.length !== __obj) { - $ERROR('#2: __obj = String.prototype.replace.length; String.prototype.replace.length = function(){return "shifted";}; String.prototype.replace.length === __obj. Actual: '+String.prototype.replace.length ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A11.js deleted file mode 100644 index 5cd122c25..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A11.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.11_A11; -* @section: 15.5.4.11; -* @assertion: The length property of the replace method is 2; -* @description: Checking String.prototype.replace.length; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!(String.prototype.replace.hasOwnProperty("length"))) { - $ERROR('#1: String.prototype.replace.hasOwnProperty("length") return true. Actual: '+String.prototype.replace.hasOwnProperty("length")); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (String.prototype.replace.length !== 2) { - $ERROR('#2: String.prototype.replace.length === 2. Actual: '+String.prototype.replace.length ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A1_T1.js deleted file mode 100644 index f7068783e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A1_T1.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.11_A1_T1; -* @section: 15.5.4.11; -* @assertion: String.prototype.replace (searchValue, replaceValue); -* @description: Arguments are true and 1, and instance is object; -*/ - -__instance = new Object(true); - -__instance.replace = String.prototype.replace; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__instance.replace(true, 1) !== "1") { - $ERROR('#1: __instance = new Object(true); __instance.replace = String.prototype.replace; __instance.replace(true, 1) === "1". Actual: '+__instance.replace(true, 1) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A1_T10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A1_T10.js deleted file mode 100644 index 124efe72c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A1_T10.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.11_A1_T10; -* @section: 15.5.4.11; -* @assertion: String.prototype.replace (searchValue, replaceValue); -* @description: Call replace (searchValue, replaceValue) function with object and function arguments of string. Object have overrided toString function; -*/ - -var __obj = {toString:function(){return "\u0041B";}}; - -var __str = "ABB\u0041BABAB"; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -with(__str){ - if (replace(__obj, function(){return x;}) !== "undefinedBABABAB") { - $ERROR('#1: var x; var __obj = {toString:function(){return "\u0041B";}}; var __str = "ABB\u0041BABAB"; replace(__obj, function(){return x;}) === "undefinedBABABAB". Actual: '+replace(__obj, function(){return x;}) ); - } -} -// -////////////////////////////////////////////////////////////////////////////// - -var x; diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A1_T11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A1_T11.js deleted file mode 100644 index 1520b02fb..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A1_T11.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.11_A1_T11; -* @section: 15.5.4.11; -* @assertion: String.prototype.replace (searchValue, replaceValue); -* @description: Call replace (searchValue, replaceValue) function with objects arguments of string object. Objects have overrided toString function, that throw exception; -*/ - -var __obj = {toString:function(){throw "insearchValue";}}; -var __obj2 = {toString:function(){throw "inreplaceValue";}}; -var __str = {str__:"ABB\u0041BABAB"}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -with(__str){ - with(str__){ - try { - var x = replace(__obj,__obj2); - $FAIL('#1: "var x = replace(__obj,__obj2)" lead to throwing exception'); - } catch (e) { - if (e!=="insearchValue") { - $ERROR('#1.1: Exception === "insearchValue". Actual: '+e); - } - } - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A1_T12.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A1_T12.js deleted file mode 100644 index 3e40f0658..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A1_T12.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.11_A1_T12; -* @section: 15.5.4.11; -* @assertion: String.prototype.replace (searchValue, replaceValue); -* @description: Call replace (searchValue, replaceValue) function with objects arguments of String object. -* First objects have overrided toString and valueOf functions, valueOf throw exception. -* Second objects have overrided toString function, that throw exception; -*/ - -var __obj = {toString:function(){return {};}, valueOf:function(){throw "insearchValue";}}; -var __obj2 = {toString:function(){throw "inreplaceValue";}}; -var __str = new String("ABB\u0041BABAB"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -with(__str){ - try { - var x = replace(__obj, __obj2); - $FAIL('#1: "var x = replace(__obj,__obj2)" lead to throwing exception'); - } catch (e) { - if (e!=="insearchValue") { - $ERROR('#1.1: Exception === "insearchValue". Actual: '+e); - } - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A1_T13.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A1_T13.js deleted file mode 100644 index 4b754716f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A1_T13.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.11_A1_T13; -* @section: 15.5.4.11; -* @assertion: String.prototype.replace (searchValue, replaceValue); -* @description: Call replace (searchValue, replaceValue) function with objects arguments of string. -* First objects have overrided toString and valueOf functions. -* Second objects have overrided toString function, that throw exception; -*/ - -var __obj = {toString:function(){return {};}, valueOf:function(){return 1;}}; -var __obj2 = {toString:function(){throw "inreplaceValue";}}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try { - var x = "ABB\u0041BABAB\u0031BBAA".replace(__obj, __obj2); - $FAIL('#1: var x = "ABB\\u0041BABAB\\u0031BBAA".replace(__obj,__obj2) lead to throwing exception'); -} catch (e) { - if (e!=="inreplaceValue") { - $ERROR('#1.1: Exception === "inreplaceValue". Actual: '+e); - } -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A1_T14.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A1_T14.js deleted file mode 100644 index 6d72d1b7e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A1_T14.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.11_A1_T14; -* @section: 15.5.4.11; -* @assertion: String.prototype.replace (searchValue, replaceValue); -* @description: Instance is string, searchValue is regular expression; -*/ - -var __reg = new RegExp("77"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if ("ABB\u0041BABAB\u0037\u0037BBAA".replace(__reg, 1) !== "ABBABABAB\u0031BBAA") { - $ERROR('#1: var __reg = new RegExp("77"); "ABB\\u0041BABAB\\u0037\\u0037BBAA".replace(__reg, 1) === "ABBABABAB\\u0031BBAA". Actual: '+("ABB\u0041BABAB\u0037\u0037BBAA".replace(__reg, 1)) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A1_T15.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A1_T15.js deleted file mode 100644 index fd21173d6..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A1_T15.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.11_A1_T15; -* @section: 15.5.4.11; -* @assertion: String.prototype.replace (searchValue, replaceValue); -* @description: Instance is Object, searchValue is regular expression; -*/ - -var __obj = {toString:function(){return /77/}}; - -__instance = new Object(1100.00777001); - -Object.prototype.replace = String.prototype.replace; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try { - x = __instance.replace(__obj, 1) === "1100.0017001"; - $FAIL('#1.0: x = __instance.replace(__obj, 1) === "1100.0017001" lead to throwing exception'); -} catch (e) { - if (!(e instanceof TypeError)) { - $ERROR('#1.1: Exception is instance of TypeError. Actual: '+e); - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A1_T16.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A1_T16.js deleted file mode 100644 index 8fc52f72a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A1_T16.js +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.11_A1_T16; -* @section: 15.5.4.11; -* @assertion: String.prototype.replace (searchValue, replaceValue); -* @description: Instance is Number, searchValue is regular expression; -*/ - -var __re = /77/; - -__instance = new Number(1100.00777001); - -Number.prototype.replace = String.prototype.replace; - -__obj = {toString:function(){return function(a1,a2,a3){return a2+"z"};}} -//__obj = function(a1,a2,a3){return a2+"z"}; - - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try { - x = __instance.replace(__re, __obj) === "1100.007z7001"; - $FAIL('#1.0: x = __instance.replace(__obj, 1) === "1100.007z7001" lead to throwing exception'); -} catch (e) { - if (!(e instanceof TypeError)) { - $ERROR('#1.1: Exception is instance of TypeError. Actual: '+e); - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A1_T17.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A1_T17.js deleted file mode 100644 index 65d945480..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A1_T17.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.11_A1_T17; -* @section: 15.5.4.11; -* @assertion: String.prototype.replace (searchValue, replaceValue); -* @description: Instance is String object, searchValue is regular expression; -*/ - -var __re = new RegExp(x,"g"); - -__instance = String("asdf"); - -__str = "1"; -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__instance.replace(__re, __str) !== "1a1s1d1f1") { - $ERROR('#1: var x; var __re = new RegExp(x,"g"); __instance = String("asdf"); __str = "1"; __instance.replace(__re, __str) === "1a1s1d1f1". Actual: '+__instance.replace(__re, __str) ); -} -// -////////////////////////////////////////////////////////////////////////////// - -var x; diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A1_T2.js deleted file mode 100644 index 368e29612..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A1_T2.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.11_A1_T2; -* @section: 15.5.4.11; -* @assertion: String.prototype.replace (searchValue, replaceValue); -* @description: Argument is function that return boolean, and instance is Boolean object; -*/ - -__instance = new Boolean; - -__instance.replace = String.prototype.replace; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__instance.replace(function(){return false;}(),x) !== "undefined") { - $ERROR('#1: var x; __instance = new Boolean; __instance.replace = String.prototype.replace; __instance.replace(function(){return false;}(),x) === "undefined". Actual: '+__instance.replace(function(){return false;}(),x) ); -} -// -////////////////////////////////////////////////////////////////////////////// - -var x; diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A1_T3.js deleted file mode 100644 index eac4a9a7b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A1_T3.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.11_A1_T3; -* @section: 15.5.4.11; -* @assertion: String.prototype.replace (searchValue, replaceValue); -* @description: Checking by using eval; -*/ - -replace = String.prototype.replace; - -if (typeof toString === "undefined"){ - toString = Object.prototype.toString; -} - -__class__ = toString(); -__toggle = 1; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -__replaced = replace(eval("\"b\""),"^"); - -__golden = ""; -for(var i=0; i<__class__.length; i++) { - if ((__class__.charAt(i)==="b")&&(__toggle)) { - __golden+="^"; - __toggle = 0; - } else { - __golden+=__class__.charAt(i); - } - -} -if (__replaced !==__golden) { - $ERROR('#1: __replaced ===__golden. Actual: '+__replaced ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A1_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A1_T4.js deleted file mode 100644 index a7af1977f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A1_T4.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.11_A1_T4; -* @section: 15.5.4.11; -* @assertion: String.prototype.replace (searchValue, replaceValue); -* @description: Call replace (searchValue, replaceValue) function with null and function(a1,a2,a3){return a2+"";} arguments of function object; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (function(){return "gnulluna"}().replace(null,function(a1,a2,a3){return a2+"";}) !== "g1una") { - $ERROR('#1: function(){return "gnulluna"}().replace(null,function(a1,a2,a3){return a2+"";}) === "g1una". Actual: '+function(){return "gnulluna"}().replace(null,function(a1,a2,a3){return a2+"";}) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A1_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A1_T5.js deleted file mode 100644 index 7ea29d2d9..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A1_T5.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.11_A1_T5; -* @section: 15.5.4.11; -* @assertion: String.prototype.replace (searchValue, replaceValue); -* @description: Call replace (searchValue, replaceValue) function with null and Function() arguments of function object; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (function(){return "gnulluna"}().replace(null, Function()) !== "gundefineduna") { - $ERROR('#1: function(){return "gnulluna"}().replace(null, Function()) === "gundefineduna". Actual: '+function(){return "gnulluna"}().replace(null, Function()) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A1_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A1_T6.js deleted file mode 100644 index 747a66511..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A1_T6.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.11_A1_T6; -* @section: 15.5.4.11; -* @assertion: String.prototype.replace (searchValue, replaceValue); -* @description: Call replace (searchValue, replaceValue) function with x and Function("return arguments[1]+42;") arguments of new String object. x is undefined variable; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (new String("undefined").replace(x,Function("return arguments[1]+42;")) !== "42") { - $ERROR('#1: var x; new String("undefined").replace(x,Function("return arguments[1]+42;")) === "42". Actual: '+new String("undefined").replace(x,Function("return arguments[1]+42;")) ); -} -// -////////////////////////////////////////////////////////////////////////////// - -var x; diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A1_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A1_T7.js deleted file mode 100644 index 661a6807c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A1_T7.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.11_A1_T7; -* @section: 15.5.4.11; -* @assertion: String.prototype.replace (searchValue, replaceValue); -* @description: Call replace (searchValue, replaceValue) function with string and undefined arguments of String object; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (String(void 0).replace("e",undefined) !== "undundefinedfined") { - $ERROR('#1: String(void 0).replace("e",undefined) === "undundefinedfined". Actual: '+String(void 0).replace("e",undefined) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A1_T8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A1_T8.js deleted file mode 100644 index 844ff0ca0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A1_T8.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.11_A1_T8; -* @section: 15.5.4.11; -* @assertion: String.prototype.replace (searchValue, replaceValue); -* @description: Call replace (searchValue, replaceValue) function with regular expression and void 0 arguments of String object; -*/ - -__obj = {toString:function(){}}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (String(__obj).replace(/e/g,void 0) !== "undundefinedfinundefinedd") { - $ERROR('#1: __obj = {toString:function(){}}; String(__obj).replace(/e/g,void 0) === "undundefinedfinundefinedd". Actual: '+String(__obj).replace(/e/g,void 0) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A1_T9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A1_T9.js deleted file mode 100644 index 1895e888d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A1_T9.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.11_A1_T9; -* @section: 15.5.4.11; -* @assertion: String.prototype.replace (searchValue, replaceValue); -* @description: Call replace (searchValue, replaceValue) function with functions arguments of new String object; -*/ - -__obj = { - valueOf:function(){}, - toString:void 0 -}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (new String(__obj).replace(function(){}(),__func) !== "undefined0undefined") { - $ERROR('#1: __obj = {valueOf:function(){}, toString:void 0}; function __func(a1,a2,a3){return a1+a2+a3;}; new String(__obj).replace(function(){}(),__func) === "undefined0undefined". Actual: '+new String(__obj).replace(function(){}(),__func) ); -} -// -////////////////////////////////////////////////////////////////////////////// - -function __func(a1,a2,a3){return a1+a2+a3;}; diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A2_T1.js deleted file mode 100644 index ab38fed47..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A2_T1.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.11_A2_T1; -* @section: 15.5.4.11; -* @assertion: The $ replacements are done left-to-right, and, once such are placement is performed, the new -* replacement text is not subject to further replacements; -* @description: Don`t use $ in replaceValue, searchValue is regular expression /sh/g; -*/ - -var __str = 'She sells seashells by the seashore.'; -var __re = /sh/g; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__str.replace(__re,'sch')!=='She sells seaschells by the seaschore.') { - $ERROR('#1: var __str = \'She sells seashells by the seashore.\'; var __re = /sh/g; __str.replace(__re,\'sch\')===\'She sells seaschells by the seaschore.\'. Actual: '+__str.replace(__re,'sch')); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A2_T10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A2_T10.js deleted file mode 100644 index 602748fb9..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A2_T10.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.11_A2_T10; -* @section: 15.5.4.11; -* @assertion: The $ replacements are done left-to-right, and, once such are placement is performed, the new -* replacement text is not subject to further replacements; -* @description: Use $' in replaceValue, searchValue is regular expression /sh/; -*/ - -var __str = 'She sells seashells by the seashore.'; -var __re = /sh/; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__str.replace(__re, "$'" + 'sch')!=='She sells seaells by the seashore.schells by the seashore.') { - $ERROR('#1: var __str = \'She sells seashells by the seashore.\'; var __re = /sh/; __str.replace(__re, "$\'" + \'sch\')===\'She sells seaells by the seashore.schells by the seashore.\'. Actual: '+__str.replace(__re, "$'" + 'sch')); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A2_T2.js deleted file mode 100644 index dca68679d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A2_T2.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.11_A2_T2; -* @section: 15.5.4.11; -* @assertion: The $ replacements are done left-to-right, and, once such are placement is performed, the new -* replacement text is not subject to further replacements; -* @description: Use $$ in replaceValue, searchValue is regular expression /sh/g; -*/ - -var __str = 'She sells seashells by the seashore.'; -var __re = /sh/g; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__str.replace(__re,"$$" + 'sch')!=='She sells sea$schells by the sea$schore.') { - $ERROR('#1: var __str = \'She sells seashells by the seashore.\'; var __re = /sh/g; __str.replace(__re,"$$" + \'sch\')===\'She sells sea$schells by the sea$schore.\'. Actual: '+__str.replace(__re,"$$" + 'sch')); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A2_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A2_T3.js deleted file mode 100644 index 3cfe15612..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A2_T3.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.11_A2_T3; -* @section: 15.5.4.11; -* @assertion: The $ replacements are done left-to-right, and, once such are placement is performed, the new -* replacement text is not subject to further replacements; -* @description: Use $& in replaceValue, searchValue is regular expression /sh/g; -*/ - -var __str = 'She sells seashells by the seashore.'; -var __re = /sh/g; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__str.replace(__re,"$&" + 'sch')!=='She sells seashschells by the seashschore.') { - $ERROR('#1: var __str = \'She sells seashells by the seashore.\'; var __re = /sh/g; __str.replace(__re,"$&" + \'sch\')===\'She sells seashschells by the seashschore.\'. Actual: '+__str.replace(__re,"$&" + 'sch')); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A2_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A2_T4.js deleted file mode 100644 index fbcf4df7f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A2_T4.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.11_A2_T4; -* @section: 15.5.4.11; -* @assertion: The $ replacements are done left-to-right, and, once such are placement is performed, the new -* replacement text is not subject to further replacements; -* @description: Use $` in replaceValue, searchValue is regular expression /sh/g; -*/ - -var __str = 'She sells seashells by the seashore.'; -var __re = /sh/g; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__str.replace(__re, "$`" + 'sch')!=='She sells seaShe sells seaschells by the seaShe sells seashells by the seaschore.') { - $ERROR('#1: var __str = \'She sells seashells by the seashore.\'; var __re = /sh/g; __str.replace(__re, "$`" + \'sch\')===\'She sells seaShe sells seaschells by the seaShe sells seashells by the seaschore.\'. Actual: '+__str.replace(__re, "$`" + 'sch')); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A2_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A2_T5.js deleted file mode 100644 index 69cd76e44..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A2_T5.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.11_A2_T5; -* @section: 15.5.4.11; -* @assertion: The $ replacements are done left-to-right, and, once such are placement is performed, the new -* replacement text is not subject to further replacements; -* @description: Use $' in replaceValue, searchValue is regular expression /sh/g; -*/ - -var __str = 'She sells seashells by the seashore.'; -var __re = /sh/g; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__str.replace(__re, "$'" + 'sch')!=='She sells seaells by the seashore.schells by the seaore.schore.') { - $ERROR('#1: var __str = \'She sells seashells by the seashore.\'; var __re = /sh/g; __str.replace(__re, "$\'" + \'sch\')===\'She sells seaells by the seashore.schells by the seaore.schore.\'. Actual: '+__str.replace(__re, "$'" + 'sch')); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A2_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A2_T6.js deleted file mode 100644 index 2132951be..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A2_T6.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.11_A2_T6; -* @section: 15.5.4.11; -* @assertion: The $ replacements are done left-to-right, and, once such are placement is performed, the new -* replacement text is not subject to further replacements; -* @description: Don`t use $ in replaceValue, searchValue is regular expression /sh/; -*/ - -var __str = 'She sells seashells by the seashore.'; -var __re = /sh/; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__str.replace(__re, 'sch')!=='She sells seaschells by the seashore.') { - $ERROR('#1: var __str = \'She sells seashells by the seashore.\'; var __re = /sh/; __str.replace(__re, \'sch\')===\'She sells seaschells by the seashore.\'. Actual: '+__str.replace(__re, 'sch')); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A2_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A2_T7.js deleted file mode 100644 index c77d0a05c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A2_T7.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.11_A2_T7; -* @section: 15.5.4.11; -* @assertion: The $ replacements are done left-to-right, and, once such are placement is performed, the new -* replacement text is not subject to further replacements; -* @description: Use $$ in replaceValue, searchValue is regular expression /sh/; -*/ - -var __str = 'She sells seashells by the seashore.'; -var __re = /sh/; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__str.replace(__re, "$$" + 'sch')!=='She sells sea$schells by the seashore.') { - $ERROR('#1: var __str = \'She sells seashells by the seashore.\'; var __re = /sh/; __str.replace(__re, "$$" + \'sch\')===\'She sells sea$schells by the seashore.\'. Actual: '+__str.replace(__re, "$$" + 'sch')); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A2_T8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A2_T8.js deleted file mode 100644 index 3192caa4e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A2_T8.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.11_A2_T8; -* @section: 15.5.4.11; -* @assertion: The $ replacements are done left-to-right, and, once such are placement is performed, the new -* replacement text is not subject to further replacements; -* @description: Use $& in replaceValue, searchValue is regular expression /sh/; -*/ - -var __str = 'She sells seashells by the seashore.'; -var __re = /sh/; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__str.replace(__re, "$&" + 'sch')!=='She sells seashschells by the seashore.') { - $ERROR('#1: var __str = \'She sells seashells by the seashore.\'; var __re = /sh/; __str.replace(__re, "$&" + \'sch\')===\'She sells seashschells by the seashore.\'. Actual: '+__str.replace(__re, "$&" + 'sch')); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A2_T9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A2_T9.js deleted file mode 100644 index 95b51f9e2..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A2_T9.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.11_A2_T9; -* @section: 15.5.4.11; -* @assertion: The $ replacements are done left-to-right, and, once such are placement is performed, the new -* replacement text is not subject to further replacements; -* @description: Use $` in replaceValue, searchValue is regular expression /sh/; -*/ - -var __str = 'She sells seashells by the seashore.'; -var __re = /sh/; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__str.replace(__re, "$`" + 'sch')!=='She sells seaShe sells seaschells by the seashore.') { - $ERROR('#1: var __str = \'She sells seashells by the seashore.\'; var __re = /sh/; __str.replace(__re, "$`" + \'sch\')===\'She sells seaShe sells seaschells by the seashore.\'. Actual: '+__str.replace(__re, "$`" + 'sch')); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A3_T1.js deleted file mode 100644 index dc15597dd..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A3_T1.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.11_A3_T1; -* @section: 15.5.4.11; -* @assertion: replace with regexp /(uid=)(\d+)/ returns; -* @description: replaceValue is "$11" + 15; -*/ - -var __str = 'uid=31'; -var __re = /(uid=)(\d+)/; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__str.replace(__re, "$11" + 15)!=='uid=115') { - $ERROR('#1: var __str = \'uid=31\'; var __re = /(uid=)(\d+)/; __str.replace(__re, "$11" + 15)===\'uid=115\'. Actual: '+__str.replace(__re, "$11" + 15)); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A3_T2.js deleted file mode 100644 index f2a39b287..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A3_T2.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.11_A3_T2; -* @section: 15.5.4.11; -* @assertion: replace with regexp /(uid=)(\d+)/ returns; -* @description: replaceValue is "$11" + '15'; -*/ - -var __str = 'uid=31'; -var __re = /(uid=)(\d+)/; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__str.replace(__re, "$11" + '15')!=='uid=115') { - $ERROR('#1: var __str = \'uid=31\'; var __re = /(uid=)(\d+)/; __str.replace(__re, "$11" + \'15\')===\'uid=115\'. Actual: '+__str.replace(__re, "$11" + '15')); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A3_T3.js deleted file mode 100644 index 8d61d571d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A3_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.11_A3_T3; -* @section: 15.5.4.11; -* @assertion: replace with regexp /(uid=)(\d+)/ returns; -* @description: replaceValue is "$11" + 'A15'; -*/ - -var __str = 'uid=31'; -var __re = /(uid=)(\d+)/; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__str.replace(__re, "$11" + 'A15')!=='uid=1A15' ) { - $ERROR('#1: var __str = \'uid=31\'; var __re = /(uid=)(\d+)/; __str.replace(__re, "$11" + \'A15\')===\'uid=1A15\' . Actual: '+__str.replace(__re, "$11" + 'A15')); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A4_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A4_T1.js deleted file mode 100644 index e8f5c85e3..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A4_T1.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.11_A4_T1; -* @section: 15.5.4.11; -* @assertion: replace with regexp /([a-z]+)([0-9]+)/ and replace function returns ; -* @description: searchValue is /([a-z]+)([0-9]+)/; -*/ - -var __str = "abc12 def34"; -var __pattern = /([a-z]+)([0-9]+)/; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__str.replace(__pattern, __replFN)!=='12abc def34') { - $ERROR('#1: var __str = "abc12 def34"; var __pattern = /([a-z]+)([0-9]+)/; function __replFN() {return arguments[2] + arguments[1];}; __str.replace(__pattern, __replFN)===\'12abc def34\'. Actual: '+__str.replace(__pattern, __replFN)); -} -// -////////////////////////////////////////////////////////////////////////////// - -function __replFN() { - return arguments[2] + arguments[1]; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A4_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A4_T2.js deleted file mode 100644 index 25ccb596a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A4_T2.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.11_A4_T2; -* @section: 15.5.4.11; -* @assertion: replace with regexp /([a-z]+)([0-9]+)/ and replace function returns ; -* @description: searchValue is /([a-z]+)([0-9]+)/g; -*/ - -var __str = "abc12 def34"; -var __pattern = /([a-z]+)([0-9]+)/g; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__str.replace(__pattern, __replFN)!=='12abc 34def') { - $ERROR('#1: var __str = "abc12 def34"; var __pattern = /([a-z]+)([0-9]+)/g; function __replFN() {return arguments[2] + arguments[1];}; __str.replace(__pattern, __replFN)===\'12abc 34def\'. Actual: '+__str.replace(__pattern, __replFN)); -} -// -////////////////////////////////////////////////////////////////////////////// - -function __replFN() { - return arguments[2] + arguments[1]; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A4_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A4_T3.js deleted file mode 100644 index e73d38246..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A4_T3.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.11_A4_T3; -* @section: 15.5.4.11; -* @assertion: replace with regexp /([a-z]+)([0-9]+)/ and replace function returns ; -* @description: searchValue is /([a-z]+)([0-9]+)/i; -*/ - -var __str = "aBc12 def34"; -var __pattern = /([a-z]+)([0-9]+)/i; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__str.replace(__pattern, __replFN)!=='12aBc def34') { - $ERROR('#1: var __str = "aBc12 def34"; var __pattern = /([a-z]+)([0-9]+)/i; function __replFN() {return arguments[2] + arguments[1];}; __str.replace(__pattern, __replFN)===\'12aBc def34\'. Actual: '+__str.replace(__pattern, __replFN)); -} -// -////////////////////////////////////////////////////////////////////////////// - -function __replFN() { - return arguments[2] + arguments[1]; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A4_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A4_T4.js deleted file mode 100644 index 1f30e2bfe..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A4_T4.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.11_A4_T4; -* @section: 15.5.4.11; -* @assertion: replace with regexp /([a-z]+)([0-9]+)/ and replace function returns ; -* @description: searchValue is /([a-z]+)([0-9]+)/ig; -*/ - -var __str = "aBc12 dEf34"; -var __pattern = /([a-z]+)([0-9]+)/ig; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__str.replace(__pattern, __replFN)!=='12aBc 34dEf') { - $ERROR('#1: var __str = "aBc12 dEf34"; var __pattern = /([a-z]+)([0-9]+)/ig; function __replFN() {return arguments[2] + arguments[1];}; __str.replace(__pattern, __replFN)===\'12aBc 34dEf\'. Actual: '+__str.replace(__pattern, __replFN)); -} -// -////////////////////////////////////////////////////////////////////////////// - -function __replFN() { - return arguments[2] + arguments[1]; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A5_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A5_T1.js deleted file mode 100644 index 1184863cb..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A5_T1.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.11_A5_T1; -* @section: 15.5.4.11; -* @assertion: Use replace with regexp as searchValue and use $ in replaceValue; -* @description: searchValue is regexp /^(a+)\1*,\1+$/ and replaceValue is "$1"; -*/ - -var __str = "aaaaaaaaaa,aaaaaaaaaaaaaaa"; -var __pattern = /^(a+)\1*,\1+$/; -var __repl = "$1"; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__str.replace(__pattern, __repl)!=='aaaaa') { - $ERROR('#1: var __str = "aaaaaaaaaa,aaaaaaaaaaaaaaa"; var __pattern = /^(a+)\1*,\1+$/; var __repl = "$1"; __str.replace(__pattern, __repl)===\'aaaaa\'. Actual: '+__str.replace(__pattern, __repl)); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A6.js deleted file mode 100644 index 61270a45a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A6.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.11_A6; -* @section: 15.5.4.11, 13.2; -* @assertion: String.prototype.replace has not prototype property; -* @description: Checking String.prototype.replace.prototype; -* -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (String.prototype.replace.prototype !== undefined) { - $ERROR('#1: String.prototype.replace.prototype === undefined. Actual: '+String.prototype.replace.prototype ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A7.js deleted file mode 100644 index f5a994efa..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A7.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.11_A7; -* @section: 15.5.4.11, 13.2; -* @assertion: String.prototype.replace can't be used as constructor; -* @description: Checking if creating the String.prototype.replace object fails; -*/ - -__FACTORY = String.prototype.replace; - -try { - __instance = new __FACTORY; - $FAIL('#1: __FACTORY = String.prototype.replace; "__instance = new __FACTORY" lead to throwing exception'); -} catch (e) {} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A8.js deleted file mode 100644 index 5e633f017..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A8.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.11_A8; -* @section: 15.5.4.11; -* @assertion: The String.prototype.replace.length property has the attribute DontEnum; -* @description: Checking if enumerating the String.prototype.replace.length property fails; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#0 -if (!(String.prototype.replace.hasOwnProperty('length'))) { - $FAIL('#0: String.prototype.replace.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.replace.hasOwnProperty('length')); -} -// -////////////////////////////////////////////////////////////////////////////// - - -////////////////////////////////////////////////////////////////////////////// -// CHECK#1 -if (String.prototype.replace.propertyIsEnumerable('length')) { - $ERROR('#1: String.prototype.replace.propertyIsEnumerable(\'length\') return false'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -// CHECK#2 -count=0; - -for (p in String.prototype.replace){ - if (p==="length") count++; -} - -if (count !== 0) { - $ERROR('#2: count=0; for (p in String.prototype.replace){if (p==="length") count++;} count === 0. Actual: '+count ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A9.js deleted file mode 100644 index 7398575d5..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.11_String.prototype.replace/S15.5.4.11_A9.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.11_A9; -* @section: 15.5.4.11; -* @assertion: The String.prototype.replace.length property has the attribute DontDelete; -* @description: Checking if deleting the String.prototype.replace.length property fails; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#0 -if (!(String.prototype.replace.hasOwnProperty('length'))) { - $FAIL('#0: String.prototype.replace.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.replace.hasOwnProperty('length')); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (delete String.prototype.replace.length) { - $ERROR('#1: delete String.prototype.replace.length return false'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (!(String.prototype.replace.hasOwnProperty('length'))) { - $FAIL('#2: delete String.prototype.replace.length; String.prototype.replace.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.replace.hasOwnProperty('length')); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A1.1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A1.1_T1.js deleted file mode 100644 index 57e8374d8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A1.1_T1.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.12_A1.1_T1; -* @section: 15.5.4.12; -* @assertion: String.prototype.search (regexp) without arguments behaves like with argument "undefined"; -* @description: Call search() is the same search(undefined); -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -var x = "".search(); -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A10.js deleted file mode 100644 index ff058126f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A10.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.12_A10; -* @section: 15.5.4.12; -* @assertion: The String.prototype.search.length property has the attribute ReadOnly; -* @description: Checking if varying the String.prototype.search.length property fails; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!(String.prototype.search.hasOwnProperty('length'))) { - $FAIL('#1: String.prototype.search.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.search.hasOwnProperty('length')); -} -// -////////////////////////////////////////////////////////////////////////////// - -__obj = String.prototype.search.length; - -String.prototype.search.length = function(){return "shifted";}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (String.prototype.search.length !== __obj) { - $ERROR('#2: __obj = String.prototype.search.length; String.prototype.search.length = function(){return "shifted";}; String.prototype.search.length === __obj. Actual: '+String.prototype.search.length ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A11.js deleted file mode 100644 index 4b55a900a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A11.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.12_A11; -* @section: 15.5.4.12; -* @assertion: The length property of the search method is 1; -* @description: Checking String.prototype.search.length; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!(String.prototype.search.hasOwnProperty("length"))) { - $ERROR('#1: String.prototype.search.hasOwnProperty("length") return true. Actual: '+String.prototype.search.hasOwnProperty("length")); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (String.prototype.search.length !== 1) { - $ERROR('#2: String.prototype.search.length === 1. Actual: '+String.prototype.search.length ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A1_T1.js deleted file mode 100644 index c8e60bee1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A1_T1.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.12_A1_T1; -* @section: 15.5.4.12; -* @assertion: String.prototype.search (regexp); -* @description: Argument is true, and instance is object; -*/ - -__instance = new Object(true); - -__instance.search = String.prototype.search; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__instance.search(true) !== 0) { - $ERROR('#1: __instance = new Object(true); __instance.search = String.prototype.search; __instance.search(true) === 0. Actual: '+__instance.search(true) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A1_T10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A1_T10.js deleted file mode 100644 index 40d29a11f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A1_T10.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.12_A1_T10; -* @section: 15.5.4.12; -* @assertion: String.prototype.search (regexp); -* @description: Argument is object, and instance is string. -* Object with overrided toString function; -*/ - -var __obj = {toString:function(){return "\u0041B";}}; -var __str = "ssABB\u0041BABAB"; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -with(__str){ - if (search(__obj) !==2) { - $ERROR('#1: var __obj = {toString:function(){return "\u0041B";}}; var __str = "ssABB\u0041BABAB"; search(__obj) ===2. Actual: '+search(__obj) ); - } -} -// -////////////////////////////////////////////////////////////////////////////// - -var x; diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A1_T11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A1_T11.js deleted file mode 100644 index fedf124ad..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A1_T11.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.12_A1_T11; -* @section: 15.5.4.12; -* @assertion: String.prototype.search (regexp); -* @description: Argument is object, and instance is string. -* Object with overrided toString function, that throw exception; -*/ - -var __obj = {toString:function(){throw "intostr";}} -var __str = {str__:"ABB\u0041BABAB"}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -with(__str){ - with(str__){ - try { - var x = search(__obj); - $FAIL('#1: var x = search(__obj) lead to throwing exception'); - } catch (e) { - if (e!=="intostr") { - $ERROR('#1.1: Exception === "intostr". Actual: '+e); - } - } - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A1_T12.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A1_T12.js deleted file mode 100644 index 5c94d89f7..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A1_T12.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.12_A1_T12; -* @section: 15.5.4.12; -* @assertion: String.prototype.search (regexp); -* @description: Argument is object, and instance is string. -* Object with overrided toString and valueOf functions, valueOf throw exception; -*/ - -var __obj = {toString:function(){return {};},valueOf:function(){throw "intostr";}} -var __str = new String("ABB\u0041BABAB"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -with(__str){ - try { - var x = search(__obj); - $FAIL('#1: var x = search(__obj) lead to throwing exception'); - } catch (e) { - if (e!=="intostr") { - $ERROR('#1.1: Exception === "intostr". Actual: '+e); - } - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A1_T13.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A1_T13.js deleted file mode 100644 index aa96b1d16..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A1_T13.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.12_A1_T13; -* @section: 15.5.4.12; -* @assertion: String.prototype.search (regexp); -* @description: Argument is object, and instance is string. -* Object with overrided toString and valueOf functions; -*/ - -var __obj = {toString:function(){return {};},valueOf:function(){return 1;}} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if ("ABB\u0041B\u0031ABAB\u0031BBAA".search(__obj) !==5) { - $ERROR('#1: var __obj = {toString:function(){return {};},valueOf:function(){return 1;}}; "ABB\\u0041B\\u0031ABAB\\u0031BBAA".search(__obj) ===5. Actual: '+("ABB\u0041B\u0031ABAB\u0031BBAA".search(__obj)) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A1_T14.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A1_T14.js deleted file mode 100644 index 19d187f3c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A1_T14.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.12_A1_T14; -* @section: 15.5.4.12; -* @assertion: String.prototype.search (regexp); -* @description: Instance is string, argument is regular expression; -*/ - -var __reg = new RegExp("77"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if ("ABB\u0041BABAB\u0037\u0037BBAA".search(__reg) !== 9) { - $ERROR('#1: var __reg = new RegExp("77"); "ABB\\u0041BABAB\\u0037\\u0037BBAA".search(__reg) === 9. Actual: '+("ABB\u0041BABAB\u0037\u0037BBAA".search(__reg)) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A1_T2.js deleted file mode 100644 index 22cbc21c8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A1_T2.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.12_A1_T2; -* @section: 15.5.4.12; -* @assertion: String.prototype.search (regexp); -* @description: Argument is function call, and instance is Boolean; -*/ - -__instance = new Boolean; - -__instance.search = String.prototype.search; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__instance.search(function(){return false;}()) !== 0) { - $ERROR('#1: __instance = new Boolean; __instance.search = String.prototype.search; __instance.search(function(){return false;}()) === 0. Actual: '+__instance.search(function(){return false;}()) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A1_T3.js deleted file mode 100644 index 0d7d7cd43..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A1_T3.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.12_A1_T3; -* @section: 15.5.4.12; -* @assertion: String.prototype.search (regexp); -* @description: Checking by using eval; -*/ - -search = String.prototype.search; - -if (typeof toString === "undefined"){ - toString = Object.prototype.toString; -} - -__class__ = toString(); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (search(eval("\"bj\"")) !== 2) { - $ERROR('#1: search = String.prototype.search; search(eval("\\"bj\\"")) === 2. Actual: '+search(eval("\"bj\"")) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A1_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A1_T4.js deleted file mode 100644 index 8e54bcb94..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A1_T4.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.12_A1_T4; -* @section: 15.5.4.12; -* @assertion: String.prototype.search (regexp); -* @description: Call search (regexp) without arguments; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -//since ToString() evaluates to "" search() evaluates to search("") -if ("".search() !== 0) { - $ERROR('#1: "".search() === 0. Actual: '+("".search()) ); -} - -if ("--undefined--".search() != 0) { - $ERROR('#1: "--undefined--".search() === 0. Actual: '+("--undefined--".search()) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A1_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A1_T5.js deleted file mode 100644 index 27dd7d294..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A1_T5.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.12_A1_T5; -* @section: 15.5.4.12; -* @assertion: String.prototype.search (regexp); -* @description: Argument is null, and instance is function call, that return string; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -//since ToString(null) evaluates to "null" search(null) evaluates to search("null") -if (function(){return "gnulluna"}().search(null) !== 1) { - $ERROR('#1: function(){return "gnulluna"}().search(null) === 1. Actual: '+function(){return "gnulluna"}().search(null) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A1_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A1_T6.js deleted file mode 100644 index 6e75174dd..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A1_T6.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.12_A1_T6; -* @section: 15.5.4.12; -* @assertion: String.prototype.search (regexp); -* @description: Argument is x, and instance is new String, x is undefined variable; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -//since ToString(undefined) evaluates to "undefined" search(undefined) evaluates to search("undefined") -if (new String("undefined").search(x) !== 0) { - $ERROR('#1: var x; new String("undefined").search(x) === 0. Actual: '+new String("undefined").search(x) ); -} -// -////////////////////////////////////////////////////////////////////////////// - -var x; diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A1_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A1_T7.js deleted file mode 100644 index 84aef0e1d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A1_T7.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.12_A1_T7; -* @section: 15.5.4.12; -* @assertion: String.prototype.search (regexp); -* @description: Argument is undefined, and instance is new String; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -//since ToString(undefined) evaluates to "undefined" search(undefined) evaluates to search("undefined") -if (String("undefined").search(undefined) !== 0) { - $ERROR('#1: String("undefined").search(undefined) === 0. Actual: '+String("undefined").search(undefined) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A1_T8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A1_T8.js deleted file mode 100644 index 163d477ec..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A1_T8.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.12_A1_T8; -* @section: 15.5.4.12; -* @assertion: String.prototype.search (regexp); -* @description: Argument is void 0, and instance is String object with overrided toString function; -*/ - -__obj = {toString:function(){}}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -//since ToString(void 0) evaluates to "undefined" search(void 0) evaluates to search("undefined") -if (String(__obj).search(void 0) !== 0) { - $ERROR('#1: __obj = {toString:function(){}}; String(__obj).search(void 0) === 0. Actual: '+String(__obj).search(void 0) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A1_T9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A1_T9.js deleted file mode 100644 index ba466748e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A1_T9.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.12_A1_T9; -* @section: 15.5.4.12; -* @assertion: String.prototype.search (regexp); -* @description: Argument is function call, and instance is String object with overrided toString and valueOf functions; -*/ - -__obj = { - valueOf:function(){}, - toString:void 0 -}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -//since ToString(undefined) evaluates to "undefined" search(undefined) evaluates to search("undefined") -if (new String(__obj).search(function(){}()) !== 0) { - $ERROR('#1: __obj = {valueOf:function(){}, toString:void 0}; new String(__obj).search(function(){}()) === 0. Actual: '+new String(__obj).search(function(){}()) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A2_T1.js deleted file mode 100644 index 58c06f3b0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A2_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.12_A2_T1; -* @section: 15.5.4.12; -* @assertion: String.prototype.search (regexp) returns ...; -* @description: Simple search substring inside string; -*/ - -var aString = new String("test string"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (aString.search("string")!== 5) { - $ERROR('#1: var aString = new String("test string"); aString.search("string")=== 5. Actual: '+aString.search("string")); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A2_T2.js deleted file mode 100644 index 0af5e37cb..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A2_T2.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.12_A2_T2; -* @section: 15.5.4.12; -* @assertion: String.prototype.search (regexp) returns ...; -* @description: Checking case sensitive of search, argument is string; -*/ - -var aString = new String("test string"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (aString.search("String")!== -1) { - $ERROR('#1: var aString = new String("test string"); aString.search("String")=== -1. Actual: '+aString.search("String")); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A2_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A2_T3.js deleted file mode 100644 index 771b4d335..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A2_T3.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.12_A2_T3; -* @section: 15.5.4.12; -* @assertion: String.prototype.search (regexp) returns ...; -* @description: Checking disabling of case sensitive of search, argument is RegExp; -*/ - -var aString = new String("test string"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (aString.search(/String/i)!== 5) { - $ERROR('#1: var aString = new String("test string"); aString.search(/String/i)=== 5. Actual: '+aString.search(/String/i)); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A2_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A2_T4.js deleted file mode 100644 index 2d93e3a99..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A2_T4.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.12_A2_T4; -* @section: 15.5.4.12; -* @assertion: String.prototype.search (regexp) returns ...; -* @description: Checking case sensitive of search, argument is RegExp with uppercase symbols; -*/ - -var bString = new String("one two three four five"); -var regExp = /Four/; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (bString.search(regExp)!== -1) { - $ERROR('#1: var bString = new String("one two three four five"); var regExp = /Four/; bString.search(regExp)=== -1. Actual: '+bString.search(regExp)); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A2_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A2_T5.js deleted file mode 100644 index bcb90fce9..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A2_T5.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.12_A2_T5; -* @section: 15.5.4.12; -* @assertion: String.prototype.search (regexp) returns ...; -* @description: Checking case sensitive of search, argument is RegExp without uppercase symbols; -*/ - -var bString = new String("one two three four five"); -var regExp = /four/; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (bString.search(regExp)!== 14) { - $ERROR('#1: var bString = new String("one two three four five"); var regExp = /four/; bString.search(regExp)=== 14. Actual: '+bString.search(regExp)); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A2_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A2_T6.js deleted file mode 100644 index 2aba1ce03..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A2_T6.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.12_A2_T6; -* @section: 15.5.4.12; -* @assertion: String.prototype.search (regexp) returns ...; -* @description: Searching the non-existent "notexist" substring; -*/ - -var aString = new String("test string"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (aString.search("notexist")!== -1) { - $ERROR('#1: var aString = new String("test string"); aString.search("notexist")=== -1. Actual: '+aString.search("notexist")); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A2_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A2_T7.js deleted file mode 100644 index 60630f874..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A2_T7.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.12_A2_T7; -* @section: 15.5.4.12; -* @assertion: String.prototype.search (regexp) returns ...; -* @description: Simple search sentence inside string; -*/ - -var aString = new String("test string probe"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (aString.search("string pro")!== 5) { - $ERROR('#1: var aString = new String("test string probe"); aString.search("string pro")=== 5. Actual: '+aString.search("string pro")); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A3_T1.js deleted file mode 100644 index 52ac1cc2f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A3_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.12_A3_T1; -* @section: 15.5.4.12; -* @assertion: String.prototype.search (regexp) ignores global properties of regexp; -* @description: Checking results of search regexp with and without global properties; -*/ - -var aString = new String("power of the power of the power of the power of the power of the power of the great sword"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (aString.search(/the/)!== aString.search(/the/g)) { - $ERROR('#1: var aString = new String("power of the power of the power of the power of the power of the power of the great sword"); aString.search(/the/)=== aString.search(/the/g). Actual: '+aString.search(/the/)); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A3_T2.js deleted file mode 100644 index 3a1da2d4e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A3_T2.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.12_A3_T2; -* @section: 15.5.4.12; -* @assertion: String.prototype.search (regexp) ignores global properties of regexp; -* @description: Checking results of search regexp with and without global properties. Unicode symbols used; -*/ - -var aString = new String("power \u006F\u0066 the power of the power \u006F\u0066 the power of the power \u006F\u0066 the power of the great sword"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (aString.search(/of/)!== aString.search(/of/g)) { - $ERROR('#1: var aString = new String("power \\u006F\\u0066 the power of the power \\u006F\\u0066 the power of the power \\u006F\\u0066 the power of the great sword"); aString.search(/of/)=== aString.search(/of/g). Actual: '+aString.search(/of/)); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A6.js deleted file mode 100644 index dff58815e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A6.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.12_A6; -* @section: 15.5.4.12, 13.2; -* @assertion: String.prototype.search has not prototype property; -* @description: Checking String.prototype.search.prototype; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (String.prototype.search.prototype !== undefined) { - $ERROR('#1: String.prototype.search.prototype === undefined. Actual: '+String.prototype.search.prototype ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A7.js deleted file mode 100644 index 544cb492f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A7.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.12_A7; -* @section: 15.5.4.12, 13.2; -* @assertion: String.prototype.search can't be used as constructor; -* @description: Checking if creating the String.prototype.search object fails; -*/ - -__FACTORY = String.prototype.search; - -try { - __instance = new __FACTORY; - $FAIL('#1: __FACTORY = String.prototype.search; "__instance = new __FACTORY" lead to throwing exception'); -} catch (e) { - $PRINT(e); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A8.js deleted file mode 100644 index ec39dd5d1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A8.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.12_A8; -* @section: 15.5.4.12; -* @assertion: The String.prototype.search.length property has the attribute DontEnum; -* @description: Checking if enumerating the String.prototype.search.length property fails; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#0 -if (!(String.prototype.search.hasOwnProperty('length'))) { - $FAIL('#0: String.prototype.search.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.search.hasOwnProperty('length')); -} -// -////////////////////////////////////////////////////////////////////////////// - - -////////////////////////////////////////////////////////////////////////////// -// CHECK#1 -if (String.prototype.search.propertyIsEnumerable('length')) { - $ERROR('#1: String.prototype.search.propertyIsEnumerable(\'length\') return false'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -// CHECK#2 -count=0; - -for (p in String.prototype.search){ - if (p==="length") count++; -} - -if (count !== 0) { - $ERROR('#2: count=0; for (p in String.prototype.search){if (p==="length") count++;}; count === 0. Actual: '+count ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A9.js deleted file mode 100644 index 30c3245af..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.12_String.prototype.search/S15.5.4.12_A9.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.12_A9; -* @section: 15.5.4.12; -* @assertion: The String.prototype.search.length property has the attribute DontDelete; -* @description: Checking if deleting the String.prototype.search.length property fails; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#0 -if (!(String.prototype.search.hasOwnProperty('length'))) { - $FAIL('#0: String.prototype.search.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.search.hasOwnProperty('length')); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (delete String.prototype.search.length) { - $ERROR('#1: delete String.prototype.search.length return false'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (!(String.prototype.search.hasOwnProperty('length'))) { - $FAIL('#2: delete String.prototype.search.length; String.prototype.search.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.search.hasOwnProperty('length')); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A10.js deleted file mode 100644 index 380cf64ee..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A10.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.13_A10; -* @section: 15.5.4.13; -* @assertion: The String.prototype.slice.length property has the attribute ReadOnly; -* @description: Checking if varying the String.prototype.slice.length property fails; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!(String.prototype.slice.hasOwnProperty('length'))) { - $FAIL('#1: String.prototype.slice.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.slice.hasOwnProperty('length')); -} -// -////////////////////////////////////////////////////////////////////////////// - -__obj = String.prototype.slice.length; - -String.prototype.slice.length = function(){return "shifted";}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (String.prototype.slice.length !== __obj) { - $ERROR('#2: __obj = String.prototype.slice.length; String.prototype.slice.length = function(){return "shifted";}; String.prototype.slice.length === __obj. Actual: '+String.prototype.slice.length ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A11.js deleted file mode 100644 index 5253c22e7..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A11.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.13_A11; -* @section: 15.5.4.13; -* @assertion: The length property of the slice method is 2; -* @description: Checking String.prototype.slice.length; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!(String.prototype.slice.hasOwnProperty("length"))) { - $ERROR('#1: String.prototype.slice.hasOwnProperty("length") return true. Actual: '+String.prototype.slice.hasOwnProperty("length")); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (String.prototype.slice.length !== 2) { - $ERROR('#2: String.prototype.slice.length === 2. Actual: '+String.prototype.slice.length ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A1_T1.js deleted file mode 100644 index 13509b720..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A1_T1.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.13_A1_T1; -* @section: 15.5.4.13; -* @assertion: String.prototype.slice (start, end); -* @description: Arguments are false and true, and instance is object; -*/ - -__instance = new Object(true); - -__instance.slice = String.prototype.slice; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__instance.slice(false, true) !== "t") { - $ERROR('#1: __instance = new Object(true); __instance.slice = String.prototype.slice; __instance.slice(false, true) === "t". Actual: '+__instance.slice(false, true) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A1_T10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A1_T10.js deleted file mode 100644 index 07e6ff530..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A1_T10.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.13_A1_T10; -* @section: 15.5.4.13; -* @assertion: String.prototype.slice (start, end); -* @description: Arguments are object and function call, and instance is String, object have overrided valueOf function; -*/ - -var __obj = {valueOf:function(){return 2;}}; - -var __str = "\u0035ABBBABAB"; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -with(__str){ - if (slice(__obj, function(){return slice(0,1);}()) !== "BBB") { - $ERROR('#1: var x; var __obj = {valueOf:function(){return 2;}}; var __str = "\u0035ABBBABAB"; slice(__obj, function(){return slice(0,1);}()) === "BBB". Actual: '+slice(__obj, function(){return slice(0,1);}()) ); - } -} -// -////////////////////////////////////////////////////////////////////////////// - -var x; diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A1_T11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A1_T11.js deleted file mode 100644 index 107417e2b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A1_T11.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.13_A1_T11; -* @section: 15.5.4.13; -* @assertion: String.prototype.slice (start, end); -* @description: Arguments are objects, and instance is string, objects have overrided valueOf function, that return exception; -*/ - -var __obj = {valueOf:function(){throw "instart";}}; -var __obj2 = {valueOf:function(){throw "inend";}}; -var __str = {str__:"ABB\u0041BABAB"}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -with(__str){ - with(str__){ - try { - var x = slice(__obj,__obj2); - $FAIL('#1: "var x = slice(__obj,__obj2)" lead to throwing exception'); - } catch (e) { - if (e!=="instart") { - $ERROR('#1.1: Exception === "instart". Actual: '+e); - } - } - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A1_T12.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A1_T12.js deleted file mode 100644 index 24f8dd936..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A1_T12.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.13_A1_T12; -* @section: 15.5.4.13; -* @assertion: String.prototype.slice (start, end); -* @description: Arguments are objects, and instance is string. -* First object have overrided valueOf function and toString function, that return exception. -* Second object have overrided valueOf function, that return exception; -*/ - -var __obj = {valueOf:function(){return {};}, toString:function(){throw "instart";}}; -var __obj2 = {valueOf:function(){throw "inend";}}; -var __str = new String("ABB\u0041BABAB"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -with(__str){ - try { - var x = slice(__obj, __obj2); - $FAIL('#1: "var x = slice(__obj,__obj2)" lead to throwing exception'); - } catch (e) { - if (e!=="instart") { - $ERROR('#1.1: Exception === "instart". Actual: '+e); - } - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A1_T13.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A1_T13.js deleted file mode 100644 index ebee3d455..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A1_T13.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.13_A1_T13; -* @section: 15.5.4.13; -* @assertion: String.prototype.slice (start, end); -* @description: Arguments are objects, and instance is string. -* First object have overrided valueOf and toString functions. -* Second object have overrided toString function, that return exception; -*/ - -var __obj = {valueOf:function(){return {};}, toString:function(){return 1;}}; -var __obj2 = {toString:function(){throw "inend";}}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try { - var x = "ABB\u0041BABAB\u0031BBAA".slice(__obj, __obj2); - $FAIL('#1: "var x = slice(__obj,__obj2)" lead to throwing exception'); -} catch (e) { - if (e!=="inend") { - $ERROR('#1.1: Exception === "inend". Actual: '+e); - } -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A1_T14.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A1_T14.js deleted file mode 100644 index 2bdc40b19..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A1_T14.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.13_A1_T14; -* @section: 15.5.4.13; -* @assertion: String.prototype.slice (start, end); -* @description: Used one argument, that is function(){}(). Instance is string; -*/ - - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if ("report".slice(function(){}()) !== "report") { - $ERROR('#1: "report".slice(function(){}()) === "report". Actual: '+"report".slice(function(){}()) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A1_T15.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A1_T15.js deleted file mode 100644 index 03351633e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A1_T15.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.13_A1_T15; -* @section: 15.5.4.13; -* @assertion: String.prototype.slice (start, end); -* @description: Call slice without arguments. Instance is Number with prototype.slice = String.prototype.slice; -*/ - -var __num = 11.001002; - -Number.prototype.slice = String.prototype.slice; - - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__num.slice()!=="11.001002") { - $ERROR('#1: var __num = 11.001002; Number.prototype.slice = String.prototype.slice; __num.slice()==="11.001002". Actual: '+__num.slice()); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A1_T2.js deleted file mode 100644 index 6653fbbe4..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A1_T2.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.13_A1_T2; -* @section: 15.5.4.13; -* @assertion: String.prototype.slice (start, end); -* @description: Arguments are function call and x, and instance is Boolean. x is undefined variable; -*/ - -__instance = new Boolean; - -__instance.slice = String.prototype.slice; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__instance.slice(function(){return true;}(),x) !== "alse") { - $ERROR('#1: var x; __instance = new Boolean; __instance.slice = String.prototype.slice; __instance.slice(function(){return true;}(),x) === "alse". Actual: '+__instance.slice(function(){return true;}(),x) ); -} -// -////////////////////////////////////////////////////////////////////////////// - -var x; diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A1_T3.js deleted file mode 100644 index ddcd52c7e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A1_T3.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.13_A1_T3; -* @section: 15.5.4.13; -* @assertion: String.prototype.slice (start, end); -* @description: Checking by using eval; -*/ - -slice = String.prototype.slice; - -if (typeof toString === "undefined"){ - toString = Object.prototype.toString; -} - -__class__ = toString(); -__toggle = 1; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (slice(eval("\"1\""),{valueOf:function(){return "0x0007"}})!=="object") { - $ERROR('#1: slice = String.prototype.slice; slice(eval("\\"1\\""),{valueOf:function(){return "0x0007"}})==="object". Actual: '+slice(eval("\"1\""),{valueOf:function(){return "0x0007"}})); -}; -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A1_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A1_T4.js deleted file mode 100644 index 44ba58625..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A1_T4.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.13_A1_T4; -* @section: 15.5.4.13; -* @assertion: String.prototype.slice (start, end); -* @description: Arguments are null and number, and instance is function call, that returned string; -*/ - -//since ToInteger(null) yelds 0 -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (function(){return "gnulluna"}().slice(null, -3) !== "gnull") { - $ERROR('#1: function(){return "gnulluna"}().slice(null, -3) === "gnull". Actual: '+function(){return "gnulluna"}().slice(null, -3) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A1_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A1_T5.js deleted file mode 100644 index 23a2db408..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A1_T5.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.13_A1_T5; -* @section: 15.5.4.13; -* @assertion: String.prototype.slice (start, end); -* @description: Arguments are null and call other slice(start, end), and instance is function object, that have overrided valueOf and toString functions; -*/ - -__func.valueOf=function(){return "gnulluna"}; -__func.toString=function(){return __func;}; - -Function.prototype.slice=String.prototype.slice; - - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__func.slice(null, Function().slice(__func,5).length) !== "gnull") { - $ERROR('#1: __func.slice(null, Function().slice(__func,5).length) === "gnull". Actual: '+__func.slice(null, Function().slice(__func,5).length) ); -} -// -////////////////////////////////////////////////////////////////////////////// - -function __func(){}; diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A1_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A1_T6.js deleted file mode 100644 index d2bb25886..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A1_T6.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.13_A1_T6; -* @section: 15.5.4.13; -* @assertion: String.prototype.slice (start, end); -* @description: Arguments are x and number, and instance is new String, x is undefined variable; -*/ - -//since ToInteger(undefined yelds 0) -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (new String("undefined").slice(x,3) !== "und") { - $ERROR('#1: var x; new String("undefined").slice(x,3) === "und". Actual: '+new String("undefined").slice(x,3) ); -} -// -////////////////////////////////////////////////////////////////////////////// - -var x; diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A1_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A1_T7.js deleted file mode 100644 index 313158932..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A1_T7.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.13_A1_T7; -* @section: 15.5.4.13; -* @assertion: String.prototype.slice (start, end); -* @description: Arguments are symbol and undefined, and instance is String; -*/ - -//since ToInteger("e") yelds 0 -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (String(void 0).slice("e",undefined) !== "undefined") { - $ERROR('#1: String(void 0).slice("e",undefined) === "undefined". Actual: '+String(void 0).slice("e",undefined) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A1_T8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A1_T8.js deleted file mode 100644 index 040090f31..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A1_T8.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.13_A1_T8; -* @section: 15.5.4.13; -* @assertion: String.prototype.slice (start, end); -* @description: Arguments are negative number and void 0, and instance is String(object), object have overrided toString function; -*/ - -__obj = {toString:function(){}}; - -//since void 0 yelds 0 -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (String(__obj).slice(-4,void 0) !== "ined") { - $ERROR('#1: __obj = {toString:function(){}}; String(__obj).slice(-4,void 0) === "ined". Actual: '+String(__obj).slice(-4,void 0) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A1_T9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A1_T9.js deleted file mode 100644 index cabe7c859..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A1_T9.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.13_A1_T9; -* @section: 15.5.4.13; -* @assertion: String.prototype.slice (start, end); -* @description: Arguments are undefined and object, and instance is String(object), object have overrided valueOf and toString functions; -*/ - -__obj = { - valueOf:function(){}, - toString:void 0 -}; - -//since ToInteger(undefined) yelds 0 -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (new String(__obj).slice(/*(function(){})()*/undefined,__obj) !== "") { - $ERROR('#1: __obj = {valueOf:function(){}, toString:void 0}; new String(__obj).slice(//*(function(){})()*//undefined,__obj) === "". Actual: '+new String(__obj).slice(/*(function(){})()*/undefined,__obj) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A2_T1.js deleted file mode 100644 index 561a78406..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A2_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.13_A2_T1; -* @section: 15.5.4.13; -* @assertion: String.prototype.slice (start, end) returns a string value(not object); -* @description: Checking type of slice(); -*/ - -__string = new String("this is a string object"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __string.slice() !== "string") { - $ERROR('#1: __string = new String("this is a string object"); typeof __string.slice() === "string". Actual: '+typeof __string.slice() ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A2_T2.js deleted file mode 100644 index fa02b3584..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A2_T2.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.13_A2_T2; -* @section: 15.5.4.13; -* @assertion: String.prototype.slice (start, end) returns a string value(not object); -* @description: start is NaN, end is Infinity; -*/ - -__string = new String('this is a string object'); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__string.slice(NaN, Infinity) !== "this is a string object") { - $ERROR('#1: __string = new String(\'this is a string object\'); __string.slice(NaN, Infinity) === "this is a string object". Actual: '+__string.slice(NaN, Infinity) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A2_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A2_T3.js deleted file mode 100644 index bcca53854..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A2_T3.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.13_A2_T3; -* @section: 15.5.4.13; -* @assertion: String.prototype.slice (start, end) returns a string value(not object); -* @description: Call slice from empty String object; -*/ - -__string = new String(""); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__string.slice(1,0) !== "") { - $ERROR('#1: __string = new String(""); __string.slice(1,0) === "". Actual: '+__string.slice(1,0) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A2_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A2_T4.js deleted file mode 100644 index 2df1eccd2..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A2_T4.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.13_A2_T4; -* @section: 15.5.4.13; -* @assertion: String.prototype.slice (start, end) returns a string value(not object); -* @description: start is Infinity, end is NaN; -*/ - -__string = new String("this is a string object"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__string.slice(Infinity, NaN) !== "") { - $ERROR('#1: __string = new String("this is a string object"); __string.slice(Infinity, NaN) === "". Actual: '+__string.slice(Infinity, NaN) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A2_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A2_T5.js deleted file mode 100644 index 0bf374ee2..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A2_T5.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.13_A2_T5; -* @section: 15.5.4.13; -* @assertion: String.prototype.slice (start, end) returns a string value(not object); -* @description: start is Infinity, end is Infinity; -*/ - -__string = new String("this is a string object"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__string.slice(Infinity, Infinity) !== "") { - $ERROR('#1: __string = new String("this is a string object"); __string.slice(Infinity, Infinity) === "". Actual: '+__string.slice(Infinity, Infinity) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A2_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A2_T6.js deleted file mode 100644 index 89d56b3c1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A2_T6.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.13_A2_T6; -* @section: 15.5.4.13; -* @assertion: String.prototype.slice (start, end) returns a string value(not object); -* @description: start is negative float number, end is 0; -*/ - -__string = new String("this is a string object"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__string.slice(-0.01,0) !== "") { - $ERROR('#1: __string = new String("this is a string object"); __string.slice(-0.01,0) === "". Actual: '+__string.slice(-0.01,0) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A2_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A2_T7.js deleted file mode 100644 index d5edc82a1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A2_T7.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.13_A2_T7; -* @section: 15.5.4.13; -* @assertion: String.prototype.slice (start, end) returns a string value(not object); -* @description: start is tested_string.length, end is tested_string.length; -*/ - -__string = new String("this is a string object"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__string.slice(__string.length, __string.length) !== "") { - $ERROR('#1: __string = new String("this is a string object"); __string.slice(__string.length, __string.length) === "". Actual: '+__string.slice(__string.length, __string.length) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A2_T8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A2_T8.js deleted file mode 100644 index 4fcf3b6a7..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A2_T8.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.13_A2_T8; -* @section: 15.5.4.13; -* @assertion: String.prototype.slice (start, end) returns a string value(not object); -* @description: start is tested_string.length+1, end is 0; -*/ - -__string = new String("this is a string object"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__string.slice(__string.length+1, 0) !== "") { - $ERROR('#1: __string = new String("this is a string object"); __string.slice(__string.length+1, 0) === "". Actual: '+__string.slice(__string.length+1, 0) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A2_T9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A2_T9.js deleted file mode 100644 index 7f0ad5dcb..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A2_T9.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.13_A2_T9; -* @section: 15.5.4.13; -* @assertion: String.prototype.slice (start, end) returns a string value(not object); -* @description: start is -Infinity, end is -Infinity; -*/ - -__string = new String("this is a string object"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__string.slice(-Infinity, -Infinity) !== "") { - $ERROR('#1: __string = new String("this is a string object"); __string.slice(-Infinity, -Infinity) === "". Actual: '+__string.slice(-Infinity, -Infinity) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A3_T1.js deleted file mode 100644 index 0ea7887b2..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A3_T1.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.13_A3_T1; -* @section: 15.5.4.13; -* @assertion: String.prototype.slice (start, end) can be applied to object instances; -* @description: Apply String.prototype.slice to Object instance; -*/ - -__instance = new Object(); - -__instance.slice = String.prototype.slice; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__instance.slice(0,8) !== "[object ") { - $ERROR('#1: __instance = new Object(); __instance.slice = String.prototype.slice; __instance.slice(0,8) === "[object ". Actual: '+__instance.slice(0,8) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A3_T2.js deleted file mode 100644 index bd97862df..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A3_T2.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.13_A3_T2; -* @section: 15.5.4.13; -* @assertion: String.prototype.slice (start, end) can be applied to object instances; -* @description: Apply String.prototype.slice to Object instance, use other value for start and end values; -*/ - -__instance = new Object(); - -__instance.slice = String.prototype.slice; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__instance.slice(8,__instance.toString().length) !== "Object]") { - $ERROR('#1: __instance = new Object(); __instance.slice = String.prototype.slice; __instance.slice(8,__instance.toString().length) === "Object]". Actual: '+__instance.slice(8,__instance.toString().length) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A3_T3.js deleted file mode 100644 index d3f474782..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A3_T3.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.13_A3_T3; -* @section: 15.5.4.13; -* @assertion: String.prototype.slice (start, end) can be applied to object instances; -* @description: Apply String.prototype.slice to Object instance, and call instance.slice(...).slice(...); -*/ - -__instance = function(){}; - -__instance.slice = String.prototype.slice; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__instance.slice(-Infinity,8).slice(1,Infinity) !== "unction") { - $ERROR('#1: __instance = function(){}; __instance.slice = String.prototype.slice; __instance.slice(-Infinity,8).slice(1,Infinity) === "unction". Actual: '+__instance.slice(-Infinity,8).slice(1,Infinity) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A3_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A3_T4.js deleted file mode 100644 index fd7e6f6e0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A3_T4.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.13_A3_T4; -* @section: 15.5.4.13; -* @assertion: String.prototype.slice (start, end) can be applied to object instances; -* @description: Checknig if applying String.prototype.slice to Function object instance passes; -*/ - -__FACTORY.prototype.toString = function() { return this.value+''; }; - -__instance = new __FACTORY(void 0); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__instance.slice(0,100) !== "undefined") { - $ERROR('#1: __instance.slice(0,100) === "undefined". Actual: '+__instance.slice(0,100) ); -} -// -////////////////////////////////////////////////////////////////////////////// - -function __FACTORY( value ) { - this.value = value, - this.slice= String.prototype.slice; - //this.substring = String.prototype.substring; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A6.js deleted file mode 100644 index 5c7df2ffc..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A6.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.13_A6; -* @section: 15.5.4.13, 13.2; -* @assertion: String.prototype.slice has not prototype property; -* @description: Checking String.prototype.slice.prototype; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (String.prototype.slice.prototype !== undefined) { - $ERROR('#1: String.prototype.slice.prototype === undefined. Actual: '+String.prototype.slice.prototype ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A7.js deleted file mode 100644 index dd14c4410..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A7.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.13_A7; -* @section: 15.5.4.13, 13.2; -* @assertion: String.prototype.slice can't be used as constructor; -* @description: Checking if creating the String.prototype.slice object fails; -*/ - -__FACTORY = String.prototype.slice; - -try { - __instance = new __FACTORY; - $FAIL('#1: __FACTORY = String.prototype.slice; "__instance = new __FACTORY" lead to throwing exception'); -} catch (e) { - $PRINT(e); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A8.js deleted file mode 100644 index 86291b324..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A8.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.13_A8; -* @section: 15.5.4.13; -* @assertion: The String.prototype.slice.length property has the attribute DontEnum; -* @description: Checking if enumerating the String.prototype.slice.length property fails; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#0 -if (!(String.prototype.slice.hasOwnProperty('length'))) { - $FAIL('#0: String.prototype.slice.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.slice.hasOwnProperty('length')); -} -// -////////////////////////////////////////////////////////////////////////////// - - -////////////////////////////////////////////////////////////////////////////// -// CHECK#1 -if (String.prototype.slice.propertyIsEnumerable('length')) { - $ERROR('#1: String.prototype.slice.propertyIsEnumerable(\'length\') return false'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -// CHECK#2 -count=0; - -for (p in String.prototype.slice){ - if (p==="length") count++; -} - -if (count !== 0) { - $ERROR('#2: count=0; for (p in String.prototype.slice){if (p==="length") count++;}; count === 0. Actual: '+count ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A9.js deleted file mode 100644 index 717cf9b66..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.13_String.prototype.slice/S15.5.4.13_A9.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.13_A9; -* @section: 15.5.4.13; -* @assertion: The String.prototype.slice.length property has the attribute DontDelete; -* @description: Checking if deleting the String.prototype.slice.length property fails; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#0 -if (!(String.prototype.slice.hasOwnProperty('length'))) { - $FAIL('#0: String.prototype.slice.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.slice.hasOwnProperty('length')); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (delete String.prototype.slice.length) { - $ERROR('#1: delete String.prototype.slice.length return false'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (!(String.prototype.slice.hasOwnProperty('length'))) { - $FAIL('#2: delete String.prototype.slice.length; String.prototype.slice.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.slice.hasOwnProperty('length')); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A10.js deleted file mode 100644 index f9550adf6..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A10.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A10; -* @section: 15.5.4.14; -* @assertion: The String.prototype.split.length property has the attribute ReadOnly; -* @description: Checking if varying the String.prototype.split.length property fails; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!(String.prototype.split.hasOwnProperty('length'))) { - $FAIL('#1: String.prototype.split.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.split.hasOwnProperty('length')); -} -// -////////////////////////////////////////////////////////////////////////////// - -__obj = String.prototype.split.length; - -String.prototype.split.length = function(){return "shifted";}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (String.prototype.split.length !== __obj) { - $ERROR('#2: __obj = String.prototype.split.length; String.prototype.split.length = function(){return "shifted";}; String.prototype.split.length === __obj. Actual: '+String.prototype.split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A11.js deleted file mode 100644 index 0e229893d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A11.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A11; -* @section: 15.5.4.14; -* @assertion: The length property of the split method is 2; -* @description: Checking String.prototype.split.length; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!(String.prototype.split.hasOwnProperty("length"))) { - $ERROR('#1: String.prototype.split.hasOwnProperty("length") return true. Actual: '+String.prototype.split.hasOwnProperty("length")); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (String.prototype.split.length !== 2) { - $ERROR('#2: String.prototype.split.length === 2. Actual: '+String.prototype.split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A1_T1.js deleted file mode 100644 index 473198bf5..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A1_T1.js +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A1_T1; -* @section: 15.5.4.14; -* @assertion: String.prototype.split(separator, limit): -* i) can be transferred to other kinds of objects for use as a method. -* separator and limit can be any kinds of object since: -* ii) if separator is not RegExp ToString(separator) performs and -* iii) ToInteger(limit) performs; -* @description: Arguments are false and true, and instance is object; -*/ - -__instance = new Object(true); - -__instance.split = String.prototype.split; - -__split = __instance.split(true, false); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __split !== "object") { - $ERROR('#1: __instance = new Object(true); __instance.split = String.prototype.split; __split = __instance.split(true, false); typeof __split === "object". Actual: '+typeof __split ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.constructor !== Array) { - $ERROR('#2: __instance = new Object(true); __instance.split = String.prototype.split; __split = __instance.split(true, false); __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__split.length !== 0) { - $ERROR('#3: __instance = new Object(true); __instance.split = String.prototype.split; __split = __instance.split(true, false); __split.length === 0. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A1_T10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A1_T10.js deleted file mode 100644 index 9931eb47b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A1_T10.js +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A1_T10; -* @section: 15.5.4.14; -* @assertion: String.prototype.split(separator, limit): -* i) can be transferred to other kinds of objects for use as a method. -* separator and limit can be any kinds of object since: -* ii) if separator is not RegExp ToString(separator) performs and -* iii) ToInteger(limit) performs; -* @description: Arguments are objects, and instance is string. -* First object have overrided toString function. -* Second object have overrided valueOf function; -*/ - -var __obj = {toString:function(){return "\u0042B";}} -var __obj2 = {valueOf:function(){return true;}} -var __str = "ABB\u0041BABAB"; - -with(__str){ - __split = split(__obj, __obj2); -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __split !== "object") { - $ERROR('#1: var __obj = {toString:function(){return "u0042B";}}; var __obj2 = {valueOf:function(){return true;}}; var __str = "ABBu0041BABAB"; with(__str){__split = split(__obj, __obj2);}; typeof __split === "object". Actual: '+typeof __split ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.constructor !== Array) { - $ERROR('#2: var __obj = {toString:function(){return "u0042B";}}; var __obj2 = {valueOf:function(){return true;}}; var __str = "ABBu0041BABAB"; with(__str){__split = split(__obj, __obj2);}; __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__split.length !== 1) { - $ERROR('#3: var __obj = {toString:function(){return "u0042B";}}; var __obj2 = {valueOf:function(){return true;}}; var __str = "ABBu0041BABAB"; with(__str){__split = split(__obj, __obj2);}; __split.length === 1. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (__split[0] !== "A") { - $ERROR('#4: var __obj = {toString:function(){return "u0042B";}}; var __obj2 = {valueOf:function(){return true;}}; var __str = "ABBu0041BABAB"; with(__str){__split = split(__obj, __obj2);}; __split[0] === "A". Actual: '+__split[0] ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A1_T11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A1_T11.js deleted file mode 100644 index 017e09945..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A1_T11.js +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A1_T11; -* @section: 15.5.4.14; -* @assertion: String.prototype.split(separator, limit): -* i) can be transferred to other kinds of objects for use as a method. -* separator and limit can be any kinds of object since: -* ii) if separator is not RegExp ToString(separator) performs and -* iii) ToInteger(limit) performs; -* @description: Arguments are objects, and instance is string. -* First object have overrided toString function. -* Second object have overrided valueOf function, that throw exception; -*/ - -var __obj = {toString:function(){return "\u0041B";}} -var __obj2 = {valueOf:function(){throw "intointeger";}} -var __str = {str__:"ABB\u0041BABAB"}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -with(__str){ - with(str__){ - try { - var x = split(__obj, __obj2); - $FAIL('#1: "var x = split(__obj, __obj2)" lead to throwing exception'); - } catch (e) { - if (e!=="intointeger") { - $ERROR('#1.1: Exception === "intointeger". Actual: '+e); - } - } - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A1_T12.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A1_T12.js deleted file mode 100644 index dab04cc63..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A1_T12.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A1_T12; -* @section: 15.5.4.14; -* @assertion: String.prototype.split(separator, limit): -* i) can be transferred to other kinds of objects for use as a method. -* separator and limit can be any kinds of object since: -* ii) if separator is not RegExp ToString(separator) performs and -* iii) ToInteger(limit) performs; -* @description: Arguments are objects, and instance is string. -* First object have overrided toString function. -* Second object have overrided valueOf function and toString function, that throw exception; -*/ - -var __obj = {toString:function(){return "\u0041B";}} -var __obj2 = {valueOf:function(){return {};},toString:function(){throw "intointeger";}} -var __str = new String("ABB\u0041BABAB"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -with(__str){ - try { - var x = split(__obj, __obj2); - $FAIL('#1: "var x = split(__obj, __obj2)" lead to throwing exception'); - } catch (e) { - if (e!=="intointeger") { - $ERROR('#1.1: Exception === "intointeger". Actual: '+e); - } - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A1_T13.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A1_T13.js deleted file mode 100644 index 17fa1e057..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A1_T13.js +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A1_T13; -* @section: 15.5.4.14; -* @assertion: String.prototype.split(separator, limit): -* i) can be transferred to other kinds of objects for use as a method. -* separator and limit can be any kinds of object since: -* ii) if separator is not RegExp ToString(separator) performs and -* iii) ToInteger(limit) performs; -* @description: Arguments are objects, and instance is string. -* First object have overrided toString function. -* Second object have overrided valueOf and toString functions; -*/ - -var __obj = {toString:function(){return "\u0042\u0042";}} -var __obj2 = {valueOf:function(){return {};},toString:function(){return "2";}} - -__split = "ABB\u0041BABAB\u0042cc^^\u0042Bvv%%B\u0042xxx".split(__obj, __obj2); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __split !== "object") { - $ERROR('#1: var __obj = {toString:function(){return "u0042u0042";}}; var __obj2 = {valueOf:function(){return {};},toString:function(){return "2";}}; __split = "ABBu0041BABABu0042cc^^u0042Bvv%%Bu0042xxx".split(__obj, __obj2); typeof __split === "object". Actual: '+typeof __split ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.constructor !== Array) { - $ERROR('#2: var __obj = {toString:function(){return "u0042u0042";}}; var __obj2 = {valueOf:function(){return {};},toString:function(){return "2";}}; __split = "ABBu0041BABABu0042cc^^u0042Bvv%%Bu0042xxx".split(__obj, __obj2); __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__split.length !== 2) { - $ERROR('#3: var __obj = {toString:function(){return "u0042u0042";}}; var __obj2 = {valueOf:function(){return {};},toString:function(){return "2";}}; __split = "ABBu0041BABABu0042cc^^u0042Bvv%%Bu0042xxx".split(__obj, __obj2); __split.length === 2. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (__split[0] !== "A") { - $ERROR('#4: var __obj = {toString:function(){return "u0042u0042";}}; var __obj2 = {valueOf:function(){return {};},toString:function(){return "2";}}; __split = "ABBu0041BABABu0042cc^^u0042Bvv%%Bu0042xxx".split(__obj, __obj2); __split[0] === "A". Actual: '+__split[0] ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#5 -if (__split[1] !== "ABABA") { - $ERROR('#5: var __obj = {toString:function(){return "u0042u0042";}}; var __obj2 = {valueOf:function(){return {};},toString:function(){return "2";}}; __split = "ABBu0041BABABu0042cc^^u0042Bvv%%Bu0042xxx".split(__obj, __obj2); __split[1] === "ABABA". Actual: '+__split[1] ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A1_T14.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A1_T14.js deleted file mode 100644 index 561a1f222..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A1_T14.js +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A1_T14; -* @section: 15.5.4.14; -* @assertion: String.prototype.split(separator, limit): -* i) can be transferred to other kinds of objects for use as a method. -* separator and limit can be any kinds of object since: -* ii) if separator is not RegExp ToString(separator) performs and -* iii) ToInteger(limit) performs; -* @description: Arguments are objects, and instance is string. -* First object have overrided toString function, that throw exception. -* Second object have overrided valueOf function, that throw exception; -*/ - -var __obj = {toString:function(){throw "intostr";}}; -var __obj2 = {valueOf:function(){throw "intoint";}}; -var __instance = new Number(10001.10001); -Number.prototype.split=String.prototype.split; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -with(__instance){ - try { - var x = split(__obj, __obj2); - $FAIL('#1: "var x = split(__obj, __obj2)" lead to throwing exception'); - } catch (e) { - if (e!=="intoint") { - $ERROR('#1.1: Exception === "intoint". Actual: '+e); - } - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A1_T15.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A1_T15.js deleted file mode 100644 index dd4be3267..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A1_T15.js +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A1_T15; -* @section: 15.5.4.14; -* @assertion: String.prototype.split(separator, limit): -* i) can be transferred to other kinds of objects for use as a method. -* separator and limit can be any kinds of object since: -* ii) if separator is not RegExp ToString(separator) performs and -* iii) ToInteger(limit) performs; -* @description: Arguments are objects, and instance is string. -* First object have overrided toString function and valueOf function, that throw exception. -* Second object have overrided valueOf function, that throw exception; -*/ - -var __obj = {toString:function(){return {};},valueOf:function(){throw "intostr";}}; - -var __obj2 = {valueOf:function(){throw "intointeger";}}; - -__FACTORY.prototype.split = String.prototype.split; - -var __instance = new __FACTORY(void 0); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try { - var x = __instance.split(__obj, __obj2); - $FAIL('#1: "var x = __instance.split(__obj, __obj2)" lead to throwing exception'); -} catch (e) { - if (e!=="intointeger") { - $ERROR('#1.1: Exception === "intointeger". Actual: '+e); - } -} -// -////////////////////////////////////////////////////////////////////////////// - -function __FACTORY( value ) { - this.value = value; - this.toString = function() { return new Number; }; - this.valueOf=function(){return this.value+""}; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A1_T16.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A1_T16.js deleted file mode 100644 index 1ea43a01e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A1_T16.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A1_T16; -* @section: 15.5.4.14; -* @assertion: String.prototype.split(separator, limit): -* i) can be transferred to other kinds of objects for use as a method. -* separator and limit can be any kinds of object since: -* ii) if separator is not RegExp ToString(separator) performs and -* iii) ToInteger(limit) performs; -* @description: Argument is object, and instance is Number. -* Object have overrided toString function, that return regexp; -*/ - -var __obj = {toString:function(){return /\u0037\u0037/g;}}; - -Number.prototype.split=String.prototype.split; - -try { - __split = 6776767677.006771122677555.split(__obj); - $FAIL('#1: "__split = 6776767677.006771122677555.split(__obj)" lead to throwing exception'); -} catch (e) { - if (!(e instanceof TypeError)) { - $ERROR('#1.1: Exception is instance of TypeError. Actual: '+e); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A1_T17.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A1_T17.js deleted file mode 100644 index 34c81b8b5..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A1_T17.js +++ /dev/null @@ -1,75 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A1_T17; -* @section: 15.5.4.14; -* @assertion: String.prototype.split(separator, limit): -* i) can be transferred to other kinds of objects for use as a method. -* separator and limit can be any kinds of object since: -* ii) if separator is not RegExp ToString(separator) performs and -* iii) ToInteger(limit) performs; -* @description: Argument is regexp, and instance is Number; -*/ - -var __re = /\u0037\u0037/g; - -Number.prototype.split=String.prototype.split; - -__split = 6776767677.006771122677555.split(__re); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __split !== "object") { - $ERROR('#1: var __re = /u0037u0037/g; Number.prototype.split=String.prototype.split; __split = 6776767677.006771122677555.split(__re); typeof __split === "object". Actual: '+typeof __split ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.constructor !== Array) { - $ERROR('#2: var __re = /u0037u0037/g; Number.prototype.split=String.prototype.split; __split = 6776767677.006771122677555.split(__re); __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__split.length !== 4) { - $ERROR('#3: var __re = /u0037u0037/g; Number.prototype.split=String.prototype.split; __split = 6776767677.006771122677555.split(__re); __split.length === 4. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (__split[0] !== "6") { - $ERROR('#4: var __re = /u0037u0037/g; Number.prototype.split=String.prototype.split; __split = 6776767677.006771122677555.split(__re); __split[0] === "6". Actual: '+__split[0] ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#5 -if (__split[1] !== "67676") { - $ERROR('#5: var __re = /u0037u0037/g; Number.prototype.split=String.prototype.split; __split = 6776767677.006771122677555.split(__re); __split[1] === "67676". Actual: '+__split[1] ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#6 -if (__split[2] !== ".006") { - $ERROR('#6: var __re = /u0037u0037/g; Number.prototype.split=String.prototype.split; __split = 6776767677.006771122677555.split(__re); __split[2] === ".006". Actual: '+__split[2] ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#7 -if (__split[3] !== "1") { - $ERROR('#7: var __re = /u0037u0037/g; Number.prototype.split=String.prototype.split; __split = 6776767677.006771122677555.split(__re); __split[3] === "1". Actual: '+__split[3] ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A1_T18.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A1_T18.js deleted file mode 100644 index 32d380abe..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A1_T18.js +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A1_T18; -* @section: 15.5.4.14; -* @assertion: String.prototype.split(separator, limit): -* i) can be transferred to other kinds of objects for use as a method. -* separator and limit can be any kinds of object since: -* ii) if separator is not RegExp ToString(separator) performs and -* iii) ToInteger(limit) performs; -* @description: Checking by using eval; -*/ - -var __re = new RegExp("00"); - -Number.prototype.split=String.prototype.split; - -__split = 6776767677.006771122677555.split(__re, eval("\"1\"")); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __split !== "object") { - $ERROR('#1: var __re = new RegExp("00"); Number.prototype.split=String.prototype.split; __split = 6776767677.006771122677555.split(__re, eval(""1"")); typeof __split === "object". Actual: '+typeof __split ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.constructor !== Array) { - $ERROR('#2: var __re = new RegExp("00"); Number.prototype.split=String.prototype.split; __split = 6776767677.006771122677555.split(__re, eval(""1"")); __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__split.length !== 1) { - $ERROR('#3: var __re = new RegExp("00"); Number.prototype.split=String.prototype.split; __split = 6776767677.006771122677555.split(__re, eval(""1"")); __split.length === 1. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__split[0] !== "6776767677.") { - $ERROR('#3: var __re = new RegExp("00"); Number.prototype.split=String.prototype.split; __split = 6776767677.006771122677555.split(__re, eval(""1"")); __split[0] === "6776767677.". Actual: '+__split[0] ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A1_T2.js deleted file mode 100644 index 9f45b003d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A1_T2.js +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A1_T2; -* @section: 15.5.4.14; -* @assertion: String.prototype.split(separator, limit): -* i) can be transferred to other kinds of objects for use as a method. -* separator and limit can be any kinds of object since: -* ii) if separator is not RegExp ToString(separator) performs and -* iii) ToInteger(limit) performs; -* @description: Arguments are boolean expression, function call and null, and instance is Boolean; -*/ - -__instance = new Boolean; - -__instance.split = String.prototype.split; - -__split = __instance.split("A"!=="\u0041", function(){return 0;}(),null); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __split !== "object") { - $ERROR('#1: __instance = new Boolean; __instance.split = String.prototype.split; __split = __instance.split("A"!=="u0041", function(){return 0;}(),null); typeof __split === "object". Actual: '+typeof __split ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.constructor !== Array) { - $ERROR('#2: __instance = new Boolean; __instance.split = String.prototype.split; __split = __instance.split("A"!=="u0041", function(){return 0;}(),null); __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__split.length !== 0) { - $ERROR('#3: __instance = new Boolean; __instance.split = String.prototype.split; __split = __instance.split("A"!=="u0041", function(){return 0;}(),null); __split.length === 0. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A1_T3.js deleted file mode 100644 index bafd1911a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A1_T3.js +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A1_T3; -* @section: 15.5.4.14; -* @assertion: String.prototype.split(separator, limit): -* i) can be transferred to other kinds of objects for use as a method. -* separator and limit can be any kinds of object since: -* ii) if separator is not RegExp ToString(separator) performs and -* iii) ToInteger(limit) performs; -* @description: Checking by using eval; -*/ - -split = String.prototype.split; - -var __obj__lim = {valueOf:function(){return 5;}}; - -if (typeof toString === "undefined"){ - toString = Object.prototype.toString; -} - -__class__ = toString(); - -__split = split(eval("\"[\""),__obj__lim); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __split !== "object") { - $ERROR('#1: typeof __split === "object". Actual: '+typeof __split ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.constructor !== Array) { - $ERROR('#2: __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__split.length !== 2) { - $ERROR('#3: __split.length === 2. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__split[1].substring(0,6) !== "object") { - $ERROR('#4: __split[1].substring(0,6) === "object". Actual: '+__split[1].substring(0,6) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A1_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A1_T4.js deleted file mode 100644 index dff778fe6..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A1_T4.js +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A1_T4; -* @section: 15.5.4.14; -* @assertion: String.prototype.split(separator, limit): -* i) can be transferred to other kinds of objects for use as a method. -* separator and limit can be any kinds of object since: -* ii) if separator is not RegExp ToString(separator) performs and -* iii) ToInteger(limit) performs; -* @description: Call split without arguments, and instance is empty string; -*/ - -//since ToString() evaluates to "" split() evaluates to split("",0) -__split = "".split(); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __split !== "object") { - $ERROR('#1: __split = "".split(); typeof __split === "object". Actual: '+typeof __split ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.constructor !== Array) { - $ERROR('#2: __split = "".split(); __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__split.length !== 1) { - $ERROR('#3: __split = "".split(); __split.length === 1. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (__split[0] !== "") { - $ERROR('#4: __split = "".split(); __split[0] === "". Actual: '+__split[0] ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A1_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A1_T5.js deleted file mode 100644 index d210b3eec..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A1_T5.js +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A1_T5; -* @section: 15.5.4.14; -* @assertion: String.prototype.split(separator, limit): -* i) can be transferred to other kinds of objects for use as a method. -* separator and limit can be any kinds of object since: -* ii) if separator is not RegExp ToString(separator) performs and -* iii) ToInteger(limit) performs; -* @description: Argument is null, and instance is function call that returned string; -*/ - -//since ToString(null) evaluates to "null" split(null) evaluates to split("null",0) -__split = function(){return "gnulluna"}().split(null); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __split !== "object") { - $ERROR('#1: __split = function(){return "gnulluna"}().split(null); typeof __split === "object". Actual: '+typeof __split ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.constructor !== Array) { - $ERROR('#2: __split = function(){return "gnulluna"}().split(null); __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__split.length !== 2) { - $ERROR('#3: __split = function(){return "gnulluna"}().split(null); __split.length === 2. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (__split[0] !== "g") { - $ERROR('#4: __split = function(){return "gnulluna"}().split(null); __split[0] === "g". Actual: '+__split[0] ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#5 -if (__split[1] !== "una") { - $ERROR('#5: __split = function(){return "gnulluna"}().split(null); __split[1] === "una". Actual: '+__split[1] ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A1_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A1_T6.js deleted file mode 100644 index 18eaf144e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A1_T6.js +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A1_T6; -* @section: 15.5.4.14; -* @assertion: String.prototype.split(separator, limit): -* i) can be transferred to other kinds of objects for use as a method. -* separator and limit can be any kinds of object since: -* ii) if separator is not RegExp ToString(separator) performs and -* iii) ToInteger(limit) performs; -* @description: Argument is x, and instance is new String. x is undefined variable; -*/ - -//since ToString(undefined) evaluates to "" split(undefined) evaluates to split("",0) -__split = new String("1undefined").split(x); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __split !== "object") { - $ERROR('#1: var x; __split = new String("1undefined").split(x); typeof __split === "object". Actual: '+typeof __split ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.constructor !== Array) { - $ERROR('#2: var x; __split = new String("1undefined").split(x); __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__split.length !== 2) { - $ERROR('#3: var x; __split = new String("1undefined").split(x); __split.length === 2. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (__split[0] !== "1") { - $ERROR('#4: var x; __split = new String("1undefined").split(x); __split[0] === "1". Actual: '+__split[0] ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#5 -if (__split[1] !== "") { - $ERROR('#5: var x; __split = new String("1undefined").split(x); __split[1] === "". Actual: '+__split[1] ); -} -// -////////////////////////////////////////////////////////////////////////////// - -var x; diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A1_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A1_T7.js deleted file mode 100644 index defdd9538..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A1_T7.js +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A1_T7; -* @section: 15.5.4.14; -* @assertion: String.prototype.split(separator, limit): -* i) can be transferred to other kinds of objects for use as a method. -* separator and limit can be any kinds of object since: -* ii) if separator is not RegExp ToString(separator) performs and -* iii) ToInteger(limit) performs; -* @description: Argument is undefined, and instance is String; -*/ - -//since ToString(undefined) evaluates to "undefined" split(undefined) evaluates to split("undefined",0) -__split = String("undefinedd").split(undefined); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __split !== "object") { - $ERROR('#1: __split = String("undefinedd").split(undefined); typeof __split === "object". Actual: '+typeof __split ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.constructor !== Array) { - $ERROR('#2: __split = String("undefinedd").split(undefined); __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__split.length !== 2) { - $ERROR('#3: __split = String("undefinedd").split(undefined); __split.length === 2. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (__split[0] !== "") { - $ERROR('#4: __split = String("undefinedd").split(undefined); __split[0] === "". Actual: '+__split[0] ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#5 -if (__split[1] !== "d") { - $ERROR('#5: __split = String("undefinedd").split(undefined); __split[1] === "d". Actual: '+__split[1] ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A1_T8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A1_T8.js deleted file mode 100644 index cac42af12..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A1_T8.js +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A1_T8; -* @section: 15.5.4.14; -* @assertion: String.prototype.split(separator, limit): -* i) can be transferred to other kinds of objects for use as a method. -* separator and limit can be any kinds of object since: -* ii) if separator is not RegExp ToString(separator) performs and -* iii) ToInteger(limit) performs; -* @description: Argument is void 0, and instance is String(object), object have overrided toString function; -*/ - -__obj = {toString:function(){}}; - -//since ToString(void 0) evaluates to "undefined" split(void 0) evaluates to split("undefined") -__split = String(__obj).split(void 0); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __split !== "object") { - $ERROR('#1: __obj = {toString:function(){}}; __split = String(__obj).split(void 0); typeof __split === "object". Actual: '+typeof __split ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.constructor !== Array) { - $ERROR('#2: __obj = {toString:function(){}}; __split = String(__obj).split(void 0); __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__split.length !== 2) { - $ERROR('#3: __obj = {toString:function(){}}; __split = String(__obj).split(void 0); __split.length === 2. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (__split[0] !== "") { - $ERROR('#4: __obj = {toString:function(){}}; __split = String(__obj).split(void 0); __split[0] !== "". Actual: '+__split[0]); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#5 -if (__split[1] !== "") { - $ERROR('#5: __obj = {toString:function(){}}; __split = String(__obj).split(void 0); __split[1] === "". Actual: '+__split[1] ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A1_T9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A1_T9.js deleted file mode 100644 index a7d39bece..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A1_T9.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A1_T9; -* @section: 15.5.4.14; -* @assertion: String.prototype.split(separator, limit): -* i) can be transferred to other kinds of objects for use as a method. -* separator and limit can be any kinds of object since: -* ii) if separator is not RegExp ToString(separator) performs and -* iii) ToInteger(limit) performs; -* @description: Argument is function(){}(), and instance is String(object), object have overrided toString and valueOf functions; -*/ - -__obj = { - valueOf:function(){}, - toString:void 0 -}; - -//since ToString(undefined) evaluates to "undefined" split(undefined) evaluates to split("undefined") -__split = new String(__obj).split(function(){}()); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __split !== "object") { - $ERROR('#1: __obj = {valueOf:function(){}, toString:void 0}; __split = new String(__obj).split(function(){}()); typeof __split === "object". Actual: '+typeof __split ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.constructor !== Array) { - $ERROR('#2: __obj = {valueOf:function(){}, toString:void 0}; __split = new String(__obj).split(function(){}()); __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__split.length !== 2) { - $ERROR('#3: __obj = {valueOf:function(){}, toString:void 0}; __split = new String(__obj).split(function(){}()); __split.length === 2. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (__split[0] !== "") { - $ERROR('#4: __obj = {valueOf:function(){}, toString:void 0}; __split = new String(__obj).split(function(){}()); __split[0] !== "". Actual: '+__split[0]); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#5 -if (__split[1] !== "") { - $ERROR('#5: __obj = {valueOf:function(){}, toString:void 0}; __split = new String(__obj).split(function(){}()); __split[1] === "". Actual: '+__split[1] ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T1.js deleted file mode 100644 index 550a191d7..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T1.js +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A2_T1; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. The substrings are determined by searching from left to right for occurrences of -* separator; these occurrences are not part of any substring in the returned array, but serve to divide up -* the string value. The value of separator may be a string of any length or it may be a RegExp object; -* @description: Call split(","), instance is String("one,two,three,four,five"); -*/ - -var __string = new String("one,two,three,four,five"); - -__split = __string.split(","); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: var __string = new String("one,two,three,four,five"); __split = __string.split(","); __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== 5) { - $ERROR('#2: var __string = new String("one,two,three,four,five"); __split = __string.split(","); __split.length === 5. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__split[0] !== "one") { - $ERROR('#3: var __string = new String("one,two,three,four,five"); __split = __string.split(","); __split[0] === "one". Actual: '+__split[0] ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (__split[1] !== "two") { - $ERROR('#4: var __string = new String("one,two,three,four,five"); __split = __string.split(","); __split[1] === "two". Actual: '+__split[1] ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#5 -if (__split[2] !== "three") { - $ERROR('#5: var __string = new String("one,two,three,four,five"); __split = __string.split(","); __split[2] === "three". Actual: '+__split[2] ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#6 -if (__split[3] !== "four") { - $ERROR('#6: var __string = new String("one,two,three,four,five"); __split = __string.split(","); __split[3] === "four". Actual: '+__split[3] ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#7 -if (__split[4] !== "five") { - $ERROR('#7: var __string = new String("one,two,three,four,five"); __split = __string.split(","); __split[4] === "five". Actual: '+__split[4] ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T10.js deleted file mode 100644 index a3522969c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T10.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A2_T10; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. The substrings are determined by searching from left to right for occurrences of -* separator; these occurrences are not part of any substring in the returned array, but serve to divide up -* the string value. The value of separator may be a string of any length or it may be a RegExp object; -* @description: Call split(123), instance is "this123is123a123string123object"; -*/ - -var __string = "this123is123a123string123object"; -var __expected = ["this", "is", "a", "string", "object"]; - -__split = __string.split(123); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: var __string = "this123is123a123string123object"; var __expected = ["this", "is", "a", "string", "object"]; __split = __string.split(123); __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== __expected.length) { - $ERROR('#2: var __string = "this123is123a123string123object"; var __expected = ["this", "is", "a", "string", "object"]; __split = __string.split(123); __split.length === __expected.length. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -for ( var i = 0; i < __expected.length; i++ ) { - if (__expected[i]!==__split[i]) { - $ERROR('#3.'+i+': var __string = "this123is123a123string123object"; var __expected = ["this", "is", "a", "string", "object"]; __split = __string.split(123); __expected['+i+']===__split['+i+']. Actual: '+__expected[i]); - } -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T11.js deleted file mode 100644 index 4f9bd9a33..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T11.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A2_T11; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. The substrings are determined by searching from left to right for occurrences of -* separator; these occurrences are not part of any substring in the returned array, but serve to divide up -* the string value. The value of separator may be a string of any length or it may be a RegExp object; -* @description: Call split(":"), instance is String("one-1,two-2,four-4"); -*/ - -var __string = new String("one-1,two-2,four-4"); - -__split = __string.split(":"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: var __string = new String("one-1,two-2,four-4"); __split = __string.split(":"); __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== 1) { - $ERROR('#2: var __string = new String("one-1,two-2,four-4"); __split = __string.split(":"); __split.length === 1. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__split[0] !== "one-1,two-2,four-4") { - $ERROR('#3: var __string = new String("one-1,two-2,four-4"); __split = __string.split(":"); __split[0] === "one-1,two-2,four-4". Actual: '+__split[0] ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T12.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T12.js deleted file mode 100644 index e57014c73..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T12.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A2_T12; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. The substrings are determined by searching from left to right for occurrences of -* separator; these occurrences are not part of any substring in the returned array, but serve to divide up -* the string value. The value of separator may be a string of any length or it may be a RegExp object; -* @description: Call split("r-42"), instance is String("one-1 two-2 four-4"); -*/ - -var __string = new String("one-1 two-2 four-4"); - -__split = __string.split("r-42"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: var __string = new String("one-1 two-2 four-4"); __split = __string.split("r-42"); __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== 1) { - $ERROR('#2: var __string = new String("one-1 two-2 four-4"); __split = __string.split("r-42"); __split.length === 1. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__split[0] !== "one-1 two-2 four-4") { - $ERROR('#3: var __string = new String("one-1 two-2 four-4"); __split = __string.split("r-42"); __split[0] === "one-1 two-2 four-4". Actual: '+__split[0] ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T13.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T13.js deleted file mode 100644 index 55bec49e7..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T13.js +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A2_T13; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. The substrings are determined by searching from left to right for occurrences of -* separator; these occurrences are not part of any substring in the returned array, but serve to divide up -* the string value. The value of separator may be a string of any length or it may be a RegExp object; -* @description: Call split("-4"), instance is String("one-1 two-2 four-4"); -*/ - -var __string = new String("one-1 two-2 four-4"); - -__split = __string.split("-4"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: var __string = new String("one-1 two-2 four-4"); __split = __string.split("-4"); __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== 2) { - $ERROR('#2: var __string = new String("one-1 two-2 four-4"); __split = __string.split("-4"); __split.length === 2. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__split[0] !== "one-1 two-2 four") { - $ERROR('#3: var __string = new String("one-1 two-2 four-4"); __split = __string.split("-4"); __split[0] === "one-1 two-2 four". Actual: '+__split[0]); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (__split[1] !== "") { - $ERROR('#3: var __string = new String("one-1 two-2 four-4"); __split = __string.split("-4"); __split[1] === "". Actual: '+__split[1] ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T14.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T14.js deleted file mode 100644 index 0e8ad841a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T14.js +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A2_T14; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. The substrings are determined by searching from left to right for occurrences of -* separator; these occurrences are not part of any substring in the returned array, but serve to divide up -* the string value. The value of separator may be a string of any length or it may be a RegExp object; -* @description: Call split("on"), instance is String("one-1 two-2 four-4"); -*/ - -var __string = new String("one-1 two-2 four-4"); - -__split = __string.split("on"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: var __string = new String("one-1 two-2 four-4"); __split = __string.split("on"); __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== 2) { - $ERROR('#2: var __string = new String("one-1 two-2 four-4"); __split = __string.split("on"); __split.length === 2. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__split[0] !== "") { - $ERROR('#3: var __string = new String("one-1 two-2 four-4"); __split = __string.split("on"); __split[0] === "". Actual: '+__split[0]); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (__split[1] !== "e-1 two-2 four-4") { - $ERROR('#4: var __string = new String("one-1 two-2 four-4"); __split = __string.split("on"); __split[1] === "e-1 two-2 four-4". Actual: '+__split[1] ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T15.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T15.js deleted file mode 100644 index 673131a7f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T15.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A2_T15; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. The substrings are determined by searching from left to right for occurrences of -* separator; these occurrences are not part of any substring in the returned array, but serve to divide up -* the string value. The value of separator may be a string of any length or it may be a RegExp object; -* @description: Call split(""), instance is empty String object; -*/ - -var __string = new String(); - -__split = __string.split(""); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: var __string = new String(); __split = __string.split(""); __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== 0) { - $ERROR('#2: var __string = new String(); __split = __string.split(""); __split.length === 0. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__split[0] !== undefined) { - $ERROR('#3: var __string = new String(); __split = __string.split(""); __split[0] === undefined. Actual: '+__split[0] ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T16.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T16.js deleted file mode 100644 index c8931d3be..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T16.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A2_T16; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. The substrings are determined by searching from left to right for occurrences of -* separator; these occurrences are not part of any substring in the returned array, but serve to divide up -* the string value. The value of separator may be a string of any length or it may be a RegExp object; -* @description: Call split(" "), instance is empty String object; -*/ - -var __string = new String(); - -__split = __string.split(" "); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: var __string = new String(); __split = __string.split(" "); __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== 1) { - $ERROR('#2: var __string = new String(); __split = __string.split(" "); __split.length === 1. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__split[0] !== "") { - $ERROR('#3: var __string = new String(); __split = __string.split(" "); __split[0] === "". Actual: '+__split[0] ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T17.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T17.js deleted file mode 100644 index 3ddd05c09..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T17.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A2_T17; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. The substrings are determined by searching from left to right for occurrences of -* separator; these occurrences are not part of any substring in the returned array, but serve to divide up -* the string value. The value of separator may be a string of any length or it may be a RegExp object; -* @description: Call split(""), instance is String(" "); -*/ - -var __string = new String(" "); - -__split = __string.split(""); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: var __string = new String(" "); __split = __string.split(""); __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== 1) { - $ERROR('#2: var __string = new String(" "); __split = __string.split(""); __split.length === 1. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__split[0] !== " ") { - $ERROR('#3: var __string = new String(" "); __split = __string.split(""); __split[0] === " ". Actual: '+__split[0] ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T18.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T18.js deleted file mode 100644 index 94431d7a7..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T18.js +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A2_T18; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. The substrings are determined by searching from left to right for occurrences of -* separator; these occurrences are not part of any substring in the returned array, but serve to divide up -* the string value. The value of separator may be a string of any length or it may be a RegExp object; -* @description: Call split(" "), instance is String(" "); -*/ - -var __string = new String(" "); - -__split = __string.split(" "); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: var __string = new String(" "); __split = __string.split(" "); __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== 2) { - $ERROR('#2: var __string = new String(" "); __split = __string.split(" "); __split.length === 2. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__split[0] !== "") { - $ERROR('#3: var __string = new String(" "); __split = __string.split(" "); __split[0] === "". Actual: '+__split[0]); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (__split[1] !== "") { - $ERROR('#4: var __string = new String(" "); __split = __string.split(" "); __split[1] === "". Actual: '+__split[1] ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T19.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T19.js deleted file mode 100644 index 492773d48..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T19.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A2_T19; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. The substrings are determined by searching from left to right for occurrences of -* separator; these occurrences are not part of any substring in the returned array, but serve to divide up -* the string value. The value of separator may be a string of any length or it may be a RegExp object; -* @description: Call split("x"), instance is empty string; -*/ - -var __string = ""; - -__split = __string.split("x"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: var __string = ""; __split = __string.split("x"); __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== 1) { - $ERROR('#2: var __string = ""; __split = __string.split("x"); __split.length === 1. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__split[0] !== "") { - $ERROR('#3: var __string = ""; __split = __string.split("x"); __split[0] === "". Actual: '+__split[0] ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T2.js deleted file mode 100644 index 23df39c02..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T2.js +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A2_T2; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. The substrings are determined by searching from left to right for occurrences of -* separator; these occurrences are not part of any substring in the returned array, but serve to divide up -* the string value. The value of separator may be a string of any length or it may be a RegExp object; -* @description: Call split(" "), instance is String("one two three four five"); -*/ - -var __string = new String("one two three four five"); - -__split = __string.split(" "); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: var __string = new String("one two three four five"); __split = __string.split(" "); __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== 5) { - $ERROR('#2: var __string = new String("one two three four five"); __split = __string.split(" "); __split.length === 5. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__split[0] !== "one") { - $ERROR('#3: var __string = new String("one two three four five"); __split = __string.split(" "); __split[0] === "one". Actual: '+__split[0] ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (__split[1] !== "two") { - $ERROR('#4: var __string = new String("one two three four five"); __split = __string.split(" "); __split[1] === "two". Actual: '+__split[1] ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#5 -if (__split[2] !== "three") { - $ERROR('#5: var __string = new String("one two three four five"); __split = __string.split(" "); __split[2] === "three". Actual: '+__split[2] ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#6 -if (__split[3] !== "four") { - $ERROR('#6: var __string = new String("one two three four five"); __split = __string.split(" "); __split[3] === "four". Actual: '+__split[3] ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#7 -if (__split[4] !== "five") { - $ERROR('#7: var __string = new String("one two three four five"); __split = __string.split(" "); __split[4] === "five". Actual: '+__split[4] ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T20.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T20.js deleted file mode 100644 index 0e2666d3b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T20.js +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A2_T20; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. The substrings are determined by searching from left to right for occurrences of -* separator; these occurrences are not part of any substring in the returned array, but serve to divide up -* the string value. The value of separator may be a string of any length or it may be a RegExp object; -* @description: Call split(new RegExp); -*/ - -var __string = new String("one-1 two-2 three-3"); - -__split = __string.split(new RegExp); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: var __string = new String("one-1 two-2 three-3"); __split = __string.split(new RegExp); __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== __string.length) { - $ERROR('#2: var __string = new String("one-1 two-2 three-3"); __split = __string.split(new RegExp); __split.length === __string.length. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -for ( var i = 0; i < __string.length; i++ ) { - if (__string.charAt(i)!==__split[i]) { - $ERROR('#3.'+i+': var __string = new String("one-1 two-2 three-3"); __split = __string.split(new RegExp); __string.charAt('+i+')===__split['+i+']. Actual: '+__string.charAt(i)); - } -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T21.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T21.js deleted file mode 100644 index 24ef57119..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T21.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A2_T21; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. The substrings are determined by searching from left to right for occurrences of -* separator; these occurrences are not part of any substring in the returned array, but serve to divide up -* the string value. The value of separator may be a string of any length or it may be a RegExp object; -* @description: Call split("ll"), instance is String("hello"); -*/ - -var __string = new String("hello"); - -__split = __string.split("ll"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: var __string = new String("hello"); __split = __string.split("ll"); __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== 2) { - $ERROR('#2: var __string = new String("hello"); __split = __string.split("ll"); __split.length === 2. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__split[0] !== "he") { - $ERROR('#3: var __string = new String("hello"); __split = __string.split("ll"); __split[0] === "he". Actual: '+__split[0]); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (__split[1] !== "o") { - $ERROR('#4: var __string = new String("hello"); __split = __string.split("ll"); __split[1] === "o". Actual: '+__split[1] ); -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T22.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T22.js deleted file mode 100644 index e788ca00b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T22.js +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A2_T22; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. The substrings are determined by searching from left to right for occurrences of -* separator; these occurrences are not part of any substring in the returned array, but serve to divide up -* the string value. The value of separator may be a string of any length or it may be a RegExp object; -* @description: Call split("l"), instance is String("hello"); -*/ - -var __string = new String("hello"); - -__split = __string.split("l"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: var __string = new String("hello"); __split = __string.split("l"); __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== 3) { - $ERROR('#2: var __string = new String("hello"); __split = __string.split("l"); __split.length === 3. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__split[0] !== "he") { - $ERROR('#3: var __string = new String("hello"); __split = __string.split("l"); __split[0] === "he". Actual: '+__split[0]); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (__split[1] !== "") { - $ERROR('#4: var __string = new String("hello"); __split = __string.split("l"); __split[1] === "". Actual: '+__split[1]); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#5 -if (__split[2] !== "o") { - $ERROR('#5: var __string = new String("hello"); __split = __string.split("l"); __split[2] === "o". Actual: '+__split[2] ); -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T23.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T23.js deleted file mode 100644 index 8d1c84d65..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T23.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A2_T23; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. The substrings are determined by searching from left to right for occurrences of -* separator; these occurrences are not part of any substring in the returned array, but serve to divide up -* the string value. The value of separator may be a string of any length or it may be a RegExp object; -* @description: Call split("x"), instance is String("hello"); -*/ - -var __string = new String("hello"); - -__split = __string.split("x"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: var __string = new String("hello"); __split = __string.split("x"); __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== 1) { - $ERROR('#2: var __string = new String("hello"); __split = __string.split("x"); __split.length === 1. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__split[0] !== "hello") { - $ERROR('#3: var __string = new String("hello"); __split = __string.split("x"); __split[0] === "hello". Actual: '+__split[0] ); -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T24.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T24.js deleted file mode 100644 index 7bb7e9dfe..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T24.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A2_T24; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. The substrings are determined by searching from left to right for occurrences of -* separator; these occurrences are not part of any substring in the returned array, but serve to divide up -* the string value. The value of separator may be a string of any length or it may be a RegExp object; -* @description: Call split("h"), instance is String("hello"); -*/ - -var __string = new String("hello"); - -__split = __string.split("h"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: var __string = new String("hello"); __split = __string.split("h"); __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== 2) { - $ERROR('#2: var __string = new String("hello"); __split = __string.split("h"); __split.length === 2. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__split[0] !== "") { - $ERROR('#3: var __string = new String("hello"); __split = __string.split("h"); __split[0] === "". Actual: '+__split[0]); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (__split[1] !== "ello") { - $ERROR('#4: var __string = new String("hello"); __split = __string.split("h"); __split[1] === "ello". Actual: '+__split[1] ); -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T25.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T25.js deleted file mode 100644 index 74de447b9..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T25.js +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A2_T25; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. The substrings are determined by searching from left to right for occurrences of -* separator; these occurrences are not part of any substring in the returned array, but serve to divide up -* the string value. The value of separator may be a string of any length or it may be a RegExp object; -* @description: Call split("o"), instance is String("hello"); -*/ - -var __string = new String("hello"); - -__split = __string.split("o"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: var __string = new String("hello"); __split = __string.split("o"); __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== 2) { - $ERROR('#2: var __string = new String("hello"); __split = __string.split("o"); __split.length === 2. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__split[0] !== "hell") { - $ERROR('#3: var __string = new String("hello"); __split = __string.split("o"); __split[0] === "hell". Actual: '+__split[0]); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (__split[1] !== "") { - $ERROR('#4: var __string = new String("hello"); __split = __string.split("o"); __split[1] === "". Actual: '+__split[1]); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T26.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T26.js deleted file mode 100644 index 5c2394068..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T26.js +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A2_T26; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. The substrings are determined by searching from left to right for occurrences of -* separator; these occurrences are not part of any substring in the returned array, but serve to divide up -* the string value. The value of separator may be a string of any length or it may be a RegExp object; -* @description: Call split("hello"), instance is String("hello"); -*/ - -var __string = new String("hello"); - -__split = __string.split("hello"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: var __string = new String("hello"); __split = __string.split("hello"); __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== 2) { - $ERROR('#2: var __string = new String("hello"); __split = __string.split("hello"); __split.length === 2. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__split[0] !== "") { - $ERROR('#3: var __string = new String("hello"); __split = __string.split("hello"); __split[0] === "". Actual: '+__split[0]); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (__split[1] !== "") { - $ERROR('#4: var __string = new String("hello"); __split = __string.split("hello"); __split[1] === "". Actual: '+__split[1] ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T27.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T27.js deleted file mode 100644 index ab122dea0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T27.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A2_T27; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. The substrings are determined by searching from left to right for occurrences of -* separator; these occurrences are not part of any substring in the returned array, but serve to divide up -* the string value. The value of separator may be a string of any length or it may be a RegExp object; -* @description: Call split(undefined), instance is String("hello"); -*/ - -var __string = new String("hello"); - -__split = __string.split(undefined); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: var __string = new String("hello"); __split = __string.split(undefined); __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== 1) { - $ERROR('#2: var __string = new String("hello"); __split = __string.split(undefined); __split.length === 1. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__split[0] !== "hello") { - $ERROR('#3: var __string = new String("hello"); __split = __string.split(undefined); __split[0] === "hello". Actual: '+__split[0] ); -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T28.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T28.js deleted file mode 100644 index a186ceb32..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T28.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A2_T28; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. The substrings are determined by searching from left to right for occurrences of -* separator; these occurrences are not part of any substring in the returned array, but serve to divide up -* the string value. The value of separator may be a string of any length or it may be a RegExp object; -* @description: Call split("hellothere"), instance is String("hello"); -*/ - -var __string = new String("hello"); - -__split = __string.split("hellothere"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: var __string = new String("hello"); __split = __string.split("hellothere"); __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== 1) { - $ERROR('#2: var __string = new String("hello"); __split = __string.split("hellothere"); __split.length === 1. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__split[0] !== "hello") { - $ERROR('#3: var __string = new String("hello"); __split = __string.split("hellothere"); __split[0] === "hello". Actual: '+__split[0] ); -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T29.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T29.js deleted file mode 100644 index 57fa98d04..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T29.js +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A2_T29; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. The substrings are determined by searching from left to right for occurrences of -* separator; these occurrences are not part of any substring in the returned array, but serve to divide up -* the string value. The value of separator may be a string of any length or it may be a RegExp object; -* @description: Call split(1), instance is Number; -*/ - -var __instance = new Number(100111122133144155); - -Number.prototype.split = String.prototype.split; - -__split = __instance.split(1); - -__expected = ["","00","","","","22","33","44","60"]; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== __expected.length) { - $ERROR('#2: __split.length === __expected.length. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -for(var index=0; index<__expected.length; index++) { - if (__split[index] !== __expected[index]) { - $ERROR('#3.'+index+': __split['+index+'] === '+__expected[index]+'. Actual: '+__split[index] ); - } -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T3.js deleted file mode 100644 index c99f842ff..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T3.js +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A2_T3; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. The substrings are determined by searching from left to right for occurrences of -* separator; these occurrences are not part of any substring in the returned array, but serve to divide up -* the string value. The value of separator may be a string of any length or it may be a RegExp object; -* @description: Call split(/ /,2), instance is String("one two three four five"); -*/ - -var __string = new String("one two three four five"); - -__split = __string.split(/ /,2); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: var __string = new String("one two three four five"); __split = __string.split(/ /,2); __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== 2) { - $ERROR('#2: var __string = new String("one two three four five"); __split = __string.split(/ /,2); __split.length === 2. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__split[0] !== "one") { - $ERROR('#3: var __string = new String("one two three four five"); __split = __string.split(/ /,2); __split[0] === "one". Actual: '+__split[0] ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (__split[1] !== "two") { - $ERROR('#4: var __string = new String("one two three four five"); __split = __string.split(/ /,2); __split[1] === "two". Actual: '+__split[1] ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T30.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T30.js deleted file mode 100644 index 952ea72a5..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T30.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A2_T30; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. The substrings are determined by searching from left to right for occurrences of -* separator; these occurrences are not part of any substring in the returned array, but serve to divide up -* the string value. The value of separator may be a string of any length or it may be a RegExp object; -* @description: Call split(1,1), instance is Number; -*/ - -var __instance = new Number(100111122133144155); - -Number.prototype.split = String.prototype.split; - -__split = __instance.split(1,1); - -__expected = [""]; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== __expected.length) { - $ERROR('#2: __split.length === __expected.length. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__split[0] !== __expected[0]) { - $ERROR('#3: __split[0] === '+__expected[0]+'. Actual: '+__split[index] ); -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T31.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T31.js deleted file mode 100644 index d02864f55..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T31.js +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A2_T31; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. The substrings are determined by searching from left to right for occurrences of -* separator; these occurrences are not part of any substring in the returned array, but serve to divide up -* the string value. The value of separator may be a string of any length or it may be a RegExp object; -* @description: Call split(1,2), instance is Number; -*/ - -var __instance = new Number(100111122133144155); - -Number.prototype.split = String.prototype.split; - -__split = __instance.split(1,2); - -__expected = ["","00"]; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== __expected.length) { - $ERROR('#2: __split.length === __expected.length. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -for(var index=0; index<__expected.length; index++) { - if (__split[index] !== __expected[index]) { - $ERROR('#3.'+index+': __split[index] === '+__expected[index]+'. Actual: '+__split[index] ); - } -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T32.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T32.js deleted file mode 100644 index 6d0c0242c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T32.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A2_T32; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. The substrings are determined by searching from left to right for occurrences of -* separator; these occurrences are not part of any substring in the returned array, but serve to divide up -* the string value. The value of separator may be a string of any length or it may be a RegExp object; -* @description: Call split(1,0), instance is Number; -*/ - -var __instance = new Number(100111122133144155); - -Number.prototype.split = String.prototype.split; - -__split = __instance.split(1,0); - -__expected = []; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== __expected.length) { - $ERROR('#2: __split.length === __expected.length. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__split[0] !== __expected[0]) { - $ERROR('#3: __split[0] === '+__expected[0]+'. Actual: '+__split[index] ); -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T33.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T33.js deleted file mode 100644 index 02fd0b62e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T33.js +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A2_T33; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. The substrings are determined by searching from left to right for occurrences of -* separator; these occurrences are not part of any substring in the returned array, but serve to divide up -* the string value. The value of separator may be a string of any length or it may be a RegExp object; -* @description: Call split(1,100), instance is Number; -*/ - -var __instance = new Number(100111122133144155); - -Number.prototype.split = String.prototype.split; - -__split = __instance.split(1,100); - -__expected = ["","00","","","","22","33","44","60"]; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== __expected.length) { - $ERROR('#2: __split.length === __expected.length. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -for(var index=0; index<__expected.length; index++) { - if (__split[index] !== __expected[index]) { - $ERROR('#3.'+index+': __split[index] === '+__expected[index]+'. Actual: '+__split[index] ); - } -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T34.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T34.js deleted file mode 100644 index 0864e2838..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T34.js +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A2_T34; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. The substrings are determined by searching from left to right for occurrences of -* separator; these occurrences are not part of any substring in the returned array, but serve to divide up -* the string value. The value of separator may be a string of any length or it may be a RegExp object; -* @description: Call split(1,void 0), instance is Number; -*/ - -var __instance = new Number(100111122133144155); - -Number.prototype.split = String.prototype.split; - -__split = __instance.split(1,void 0); - -__expected = ["","00","","","","22","33","44","60"]; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== __expected.length) { - $ERROR('#2: __split.length === __expected.length. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -for(var index=0; index<__expected.length; index++) { - if (__split[index] !== __expected[index]) { - $ERROR('#3: __split[index] === __expected[index]. Actual: '+__split[index] ); - } -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T35.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T35.js deleted file mode 100644 index ff229e0dd..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T35.js +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A2_T35; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. The substrings are determined by searching from left to right for occurrences of -* separator; these occurrences are not part of any substring in the returned array, but serve to divide up -* the string value. The value of separator may be a string of any length or it may be a RegExp object; -* @description: Call split(1, Math.pow(2,32)-1), instance is Number; -*/ - -var __instance = new Number(100111122133144155); - -Number.prototype.split = String.prototype.split; - -__split = __instance.split(1, Math.pow(2,32)-1); - -__expected = ["","00","","","","22","33","44","60"]; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== __expected.length) { - $ERROR('#2: __split.length === __expected.length. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -for(var index=0; index<__expected.length; index++) { - if (__split[index] !== __expected[index]) { - $ERROR('#3.'+index+': __split[index] === '+__expected[index]+'. Actual: '+__split[index] ); - } -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T36.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T36.js deleted file mode 100644 index 36682fe96..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T36.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A2_T36; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. The substrings are determined by searching from left to right for occurrences of -* separator; these occurrences are not part of any substring in the returned array, but serve to divide up -* the string value. The value of separator may be a string of any length or it may be a RegExp object; -* @description: Call split(1,"boo"), instance is Number; -*/ - -var __instance = new Number(100111122133144155); - -Number.prototype.split = String.prototype.split; - -__split = __instance.split(1, "boo"); - -__expected = []; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== __expected.length) { - $ERROR('#2: __split.length === __expected.length. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__split[0] !== __expected[0]) { - $ERROR('#3: __split[0] === '+__expected[0]+'. Actual: '+__split[index] ); -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T37.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T37.js deleted file mode 100644 index 665e29acf..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T37.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A2_T37; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. The substrings are determined by searching from left to right for occurrences of -* separator; these occurrences are not part of any substring in the returned array, but serve to divide up -* the string value. The value of separator may be a string of any length or it may be a RegExp object; -* @description: Call split(1,-Math.pow(2,32)+1), instance is Number; -*/ - -var __instance = new Number(100111122133144155); - -Number.prototype.split = String.prototype.split; - -__split = __instance.split(1, -Math.pow(2,32)+1); - -__expected = [""]; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== __expected.length) { - $ERROR('#2: __split.length === __expected.length. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__split[0] !== __expected[0]) { - $ERROR('#3: __split[0] === '+__expected[0]+'. Actual: '+__split[index] ); -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T38.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T38.js deleted file mode 100644 index d580fd287..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T38.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A2_T38; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. The substrings are determined by searching from left to right for occurrences of -* separator; these occurrences are not part of any substring in the returned array, but serve to divide up -* the string value. The value of separator may be a string of any length or it may be a RegExp object; -* @description: Call split("l",NaN), instance is String("hello"); -*/ - -var __instance = new String("hello"); - -__split = __instance.split("l", NaN); - -__expected = []; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: var __instance = new String("hello"); __split = __instance.split("l", NaN); __expected = []; __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== __expected.length) { - $ERROR('#2: var __instance = new String("hello"); __split = __instance.split("l", NaN); __expected = []; __split.length === __expected.length. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__split[0] !== __expected[0]) { - $ERROR('#3: var __instance = new String("hello"); __split = __instance.split("l", NaN); __expected = []; __split[0] === '+__expected[0]+'. Actual: '+__split[index] ); -} -// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T39.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T39.js deleted file mode 100644 index 11abf5954..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T39.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A2_T39; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. The substrings are determined by searching from left to right for occurrences of -* separator; these occurrences are not part of any substring in the returned array, but serve to divide up -* the string value. The value of separator may be a string of any length or it may be a RegExp object; -* @description: Call split("l",0), instance is String("hello"); -*/ - -var __instance = new String("hello"); - -__split = __instance.split("l", 0); - -__expected = []; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: var __instance = new String("hello"); __split = __instance.split("l", 0); __expected = []; __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== __expected.length) { - $ERROR('#2: var __instance = new String("hello"); __split = __instance.split("l", 0); __expected = []; __split.length === __expected.length. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__split[0] !== __expected[0]) { - $ERROR('#3: var __instance = new String("hello"); __split = __instance.split("l", 0); __expected = []; __split[0] === '+__expected[0]+'. Actual: '+__split[index] ); -} -// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T4.js deleted file mode 100644 index 5767b1120..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T4.js +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A2_T4; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. The substrings are determined by searching from left to right for occurrences of -* separator; these occurrences are not part of any substring in the returned array, but serve to divide up -* the string value. The value of separator may be a string of any length or it may be a RegExp object; -* @description: Call split(""), instance is String("one two three"); -*/ - -var __string = new String("one two three"); - -__split = __string.split(""); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: var __string = new String("one two three"); __split = __string.split(""); __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== __string.length) { - $ERROR('#2: var __string = new String("one two three"); __split = __string.split(""); __split.length === __string.length. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__split[0] !== "o") { - $ERROR('#3: var __string = new String("one two three"); __split = __string.split(""); __split[0] === "o". Actual: '+__split[0] ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (__split[1] !== "n") { - $ERROR('#4: var __string = new String("one two three"); __split = __string.split(""); __split[1] === "n". Actual: '+__split[1] ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#5 -if (__split[11] !== "e") { - $ERROR('#5: var __string = new String("one two three"); __split = __string.split(""); __split[11] === "e". Actual: '+__split[11] ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#6 -if (__split[12] !== "e") { - $ERROR('#6: var __string = new String("one two three"); __split = __string.split(""); __split[12] === "e". Actual: '+__split[12] ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T40.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T40.js deleted file mode 100644 index 63509a82c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T40.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A2_T40; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. The substrings are determined by searching from left to right for occurrences of -* separator; these occurrences are not part of any substring in the returned array, but serve to divide up -* the string value. The value of separator may be a string of any length or it may be a RegExp object; -* @description: Call split("l",1), instance is String("hello"); -*/ - -var __instance = new String("hello"); - -__split = __instance.split("l", 1); - -__expected = ["he"]; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: var __instance = new String("hello"); __split = __instance.split("l", 1); __expected = ["he"]; __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== __expected.length) { - $ERROR('#2: var __instance = new String("hello"); __split = __instance.split("l", 1); __expected = ["he"]; __split.length === __expected.length. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__split[0] !== __expected[0]) { - $ERROR('#3: var __instance = new String("hello"); __split = __instance.split("l", 1); __expected = ["he"]; __split[0] === '+__expected[0]+'. Actual: '+__split[index] ); -} -// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T41.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T41.js deleted file mode 100644 index 572cd3534..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T41.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A2_T41; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. The substrings are determined by searching from left to right for occurrences of -* separator; these occurrences are not part of any substring in the returned array, but serve to divide up -* the string value. The value of separator may be a string of any length or it may be a RegExp object; -* @description: Call split("l",2), instance is String("hello"); -*/ - -var __instance = new String("hello"); - -__split = __instance.split("l", 2); - -__expected = ["he",""]; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: var __instance = new String("hello"); __split = __instance.split("l", 2); __expected = ["he",""]; __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== __expected.length) { - $ERROR('#2: var __instance = new String("hello"); __split = __instance.split("l", 2); __expected = ["he",""]; __split.length === __expected.length. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -for(var index=0; index<__expected.length; index++) { - if (__split[index] !== __expected[index]) { - $ERROR('#3.'+index+': var __instance = new String("hello"); __split = __instance.split("l", 2); __expected = ["he",""]; __split[index] === '+__expected[index]+'. Actual: '+__split[index] ); - } -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T42.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T42.js deleted file mode 100644 index b942296f8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T42.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A2_T42; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. The substrings are determined by searching from left to right for occurrences of -* separator; these occurrences are not part of any substring in the returned array, but serve to divide up -* the string value. The value of separator may be a string of any length or it may be a RegExp object; -* @description: Call split("l",3), instance is String("hello"); -*/ - -var __instance = new String("hello"); - -__split = __instance.split("l", 3); - -__expected = ["he","","o"]; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: var __instance = new String("hello"); __split = __instance.split("l", 3); __expected = ["he","","o"]; __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== __expected.length) { - $ERROR('#2: var __instance = new String("hello"); __split = __instance.split("l", 3); __expected = ["he","","o"]; __split.length === __expected.length. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -for(var index=0; index<__expected.length; index++) { - if (__split[index] !== __expected[index]) { - $ERROR('#3.'+index+': var __instance = new String("hello"); __split = __instance.split("l", 3); __expected = ["he","","o"]; __split[index] === '+__expected[index]+'. Actual: '+__split[index] ); - } -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T43.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T43.js deleted file mode 100644 index 9de84a911..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T43.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A2_T43; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. The substrings are determined by searching from left to right for occurrences of -* separator; these occurrences are not part of any substring in the returned array, but serve to divide up -* the string value. The value of separator may be a string of any length or it may be a RegExp object; -* @description: Call split("l",4), instance is String("hello"); -*/ - -var __instance = new String("hello"); - -__split = __instance.split("l", 4); - -__expected = ["he","","o"]; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: var __instance = new String("hello"); __split = __instance.split("l", 4); __expected = ["he","","o"]; __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== __expected.length) { - $ERROR('#2: var __instance = new String("hello"); __split = __instance.split("l", 4); __expected = ["he","","o"]; __split.length === __expected.length. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -for(var index=0; index<__expected.length; index++) { - if (__split[index] !== __expected[index]) { - $ERROR('#3.'+index+': var __instance = new String("hello"); __split = __instance.split("l", 4); __expected = ["he","","o"]; __split[index] === '+__expected[index]+'. Actual: '+__split[index] ); - } -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T5.js deleted file mode 100644 index 28c6fe2b9..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T5.js +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A2_T5; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. The substrings are determined by searching from left to right for occurrences of -* separator; these occurrences are not part of any substring in the returned array, but serve to divide up -* the string value. The value of separator may be a string of any length or it may be a RegExp object; -* @description: Call split(/,/), instance is String("one-1,two-2,four-4"); -*/ - -var __string = new String("one-1,two-2,four-4"); - -__split = __string.split(/,/); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: var __string = new String("one-1,two-2,four-4"); __split = __string.split(/,/); __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== 3) { - $ERROR('#2: var __string = new String("one-1,two-2,four-4"); __split = __string.split(/,/); __split.length === 3. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__split[0] !== "one-1") { - $ERROR('#3: var __string = new String("one-1,two-2,four-4"); __split = __string.split(/,/); __split[0] === "one-1". Actual: '+__split[0] ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (__split[1] !== "two-2") { - $ERROR('#4: var __string = new String("one-1,two-2,four-4"); __split = __string.split(/,/); __split[1] === "two-2". Actual: '+__split[1] ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#5 -if (__split[2] !== "four-4") { - $ERROR('#5: var __string = new String("one-1,two-2,four-4"); __split = __string.split(/,/); __split[2] === "four-4". Actual: '+__split[2] ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T6.js deleted file mode 100644 index 1e95acb07..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T6.js +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A2_T6; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. The substrings are determined by searching from left to right for occurrences of -* separator; these occurrences are not part of any substring in the returned array, but serve to divide up -* the string value. The value of separator may be a string of any length or it may be a RegExp object; -* @description: Call split(''), instance is String("one-1 two-2 four-4"); -*/ - -var __string = new String("one-1 two-2 three-3"); - -__split = __string.split(''); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: var __string = new String("one-1 two-2 three-3"); __split = __string.split(\'\'); __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== __string.length) { - $ERROR('#2: var __string = new String("one-1 two-2 three-3"); __split = __string.split(\'\'); __split.length === __string.length. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -for ( var i = 0; i < __string.length; i++ ) { - if (__split[i]!==__string.charAt(i)) { - $ERROR('#3.'+i+': var __string = new String("one-1 two-2 three-3"); __split = __string.split(\'\'); __split['+i+']===__string.charAt('+i+'). Actual: '+__split[i]); - } -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T7.js deleted file mode 100644 index 844b8861a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T7.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A2_T7; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. The substrings are determined by searching from left to right for occurrences of -* separator; these occurrences are not part of any substring in the returned array, but serve to divide up -* the string value. The value of separator may be a string of any length or it may be a RegExp object; -* @description: Call split(void 0), instance is "thisundefinedisundefinedaundefinedstringundefinedobject"; -*/ - -var __string = "thisundefinedisundefinedaundefinedstringundefinedobject"; -var __expected = ["this", "is", "a", "string", "object"]; - -__split = __string.split(void 0); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: var __string = "thisundefinedisundefinedaundefinedstringundefinedobject"; var __expected = ["this", "is", "a", "string", "object"]; __split = __string.split(void 0); __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== __expected.length) { - $ERROR('#2: var __string = "thisundefinedisundefinedaundefinedstringundefinedobject"; var __expected = ["this", "is", "a", "string", "object"]; __split = __string.split(void 0); __split.length === __expected.length. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -for ( var i = 0; i < __expected.length; i++ ) { - if (__expected[i]!==__split[i]) { - $ERROR('#3.'+i+': var __string = "thisundefinedisundefinedaundefinedstringundefinedobject"; var __expected = ["this", "is", "a", "string", "object"]; __split = __string.split(void 0); __expected['+i+']==='+__split[i]+'. Actual: '+__expected[i]); - } -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T8.js deleted file mode 100644 index da1251be0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T8.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A2_T8; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. The substrings are determined by searching from left to right for occurrences of -* separator; these occurrences are not part of any substring in the returned array, but serve to divide up -* the string value. The value of separator may be a string of any length or it may be a RegExp object; -* @description: Call split(null), instance is "thisnullisnullanullstringnullobject"; -*/ - -var __string = "thisnullisnullanullstringnullobject"; -var __expected = ["this", "is", "a", "string", "object"]; - -__split = __string.split(null); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: var __string = "thisnullisnullanullstringnullobject"; var __expected = ["this", "is", "a", "string", "object"]; __split = __string.split(null); __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== __expected.length) { - $ERROR('#2: var __string = "thisnullisnullanullstringnullobject"; var __expected = ["this", "is", "a", "string", "object"]; __split = __string.split(null); __split.length === __expected.length. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -for ( var i = 0; i < __expected.length; i++ ) { - if (__expected[i]!==__split[i]) { - $ERROR('#3.'+i+': var __string = "thisnullisnullanullstringnullobject"; var __expected = ["this", "is", "a", "string", "object"]; __split = __string.split(null); __expected['+i+']==='+__split[i]+'. Actual: '+__expected[i]); - } -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T9.js deleted file mode 100644 index 44df012ad..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A2_T9.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A2_T9; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. The substrings are determined by searching from left to right for occurrences of -* separator; these occurrences are not part of any substring in the returned array, but serve to divide up -* the string value. The value of separator may be a string of any length or it may be a RegExp object; -* @description: Call split(true), instance is "thistrueistrueatruestringtrueobject"; -*/ - -var __string = "thistrueistrueatruestringtrueobject"; -var __expected = ["this", "is", "a", "string", "object"]; - -__split = __string.split(true); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: var __string = "thistrueistrueatruestringtrueobject"; var __expected = ["this", "is", "a", "string", "object"]; __split = __string.split(true); __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== __expected.length) { - $ERROR('#2: var __string = "thistrueistrueatruestringtrueobject"; var __expected = ["this", "is", "a", "string", "object"]; __split = __string.split(true); __split.length === __expected.length. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -for ( var i = 0; i < __expected.length; i++ ) { - if (__expected[i]!==__split[i]) { - $ERROR('#3.'+i+': var __string = "thistrueistrueatruestringtrueobject"; var __expected = ["this", "is", "a", "string", "object"]; __split = __string.split(true); __expected['+i+']==='+__split[i]+'. Actual: '+__expected[i]); - } -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A3_T1.js deleted file mode 100644 index 8c3bdc7c3..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A3_T1.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A3_T1; -* @section: 15.5.4.14; -* @assertion: String.prototype.split() returns an Array object with: -* i) length equaled to 1, -* ii) [[Get]](0) equaled to the result of converting this object to a string; -* @description: Instance is String("one,two,three,four,five"); -*/ - -var __string = new String("one,two,three,four,five"); - -__split = __string.split(); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: var __string = new String("one,two,three,four,five"); __split = __string.split(); __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== 1) { - $ERROR('#2: var __string = new String("one,two,three,four,five"); __split = __string.split(); __split.length === 1. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__split[0] !== "one,two,three,four,five") { - $ERROR('#3: var __string = new String("one,two,three,four,five"); __split = __string.split(); __split[0] === "one,two,three,four,five". Actual: '+__split[0] ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A3_T10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A3_T10.js deleted file mode 100644 index e1b7dc602..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A3_T10.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A3_T10; -* @section: 15.5.4.14; -* @assertion: String.prototype.split() returns an Array object with: -* i) length equaled to 1, -* ii) [[Get]](0) equaled to the result of converting this object to a string; -* @description: Instance is new String; -*/ - -var __string = new String; - -__split = __string.split(); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: var __string = new String; __split = __string.split(); __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== 1) { - $ERROR('#2: var __string = new String; __split = __string.split(); __split.length === 1. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__split[0] !== "") { - $ERROR('#3: var __string = new String; __split = __string.split(); __split[0] === "". Actual: '+__split[0] ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A3_T11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A3_T11.js deleted file mode 100644 index d54c2fd36..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A3_T11.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A3_T11; -* @section: 15.5.4.14; -* @assertion: String.prototype.split() returns an Array object with: -* i) length equaled to 1, -* ii) [[Get]](0) equaled to the result of converting this object to a string; -* @description: Instance is String(" "); -*/ - -var __string = new String(" "); - -__split = __string.split(); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: var __string = new String(" "); __split = __string.split(); __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== 1) { - $ERROR('#2: var __string = new String(" "); __split = __string.split(); __split.length === 1. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__split[0] !== " ") { - $ERROR('#3: var __string = new String(" "); __split = __string.split(); __split[0] === " ". Actual: '+__split[0] ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A3_T2.js deleted file mode 100644 index 20c948f2a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A3_T2.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A3_T2; -* @section: 15.5.4.14; -* @assertion: String.prototype.split() returns an Array object with: -* i) length equaled to 1, -* ii) [[Get]](0) equaled to the result of converting this object to a string; -* @description: Instance is Object(); -*/ - -var __instance = new Object(); - -__instance.split = String.prototype.split; - -__split = __instance.split(); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: var __instance = new Object(); __instance.split = String.prototype.split; __split = __instance.split(); __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== 1) { - $ERROR('#2: var __instance = new Object(); __instance.split = String.prototype.split; __split = __instance.split(); __split.length === 1. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__split[0] !== "[object Object]") { - $ERROR('#3: var __instance = new Object(); __instance.split = String.prototype.split; __split = __instance.split(); __split[0] === "[object Object]". Actual: '+__split[0] ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A3_T3.js deleted file mode 100644 index 05b09d326..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A3_T3.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A3_T3; -* @section: 15.5.4.14; -* @assertion: String.prototype.split() returns an Array object with: -* i) length equaled to 1, -* ii) [[Get]](0) equaled to the result of converting this object to a string; -* @description: Instance is function(){}; -*/ - -var __instance = function(){}; - -__instance.split = String.prototype.split; - -__split = __instance.split(); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: var __instance = function(){}; __instance.split = String.prototype.split; __split = __instance.split(); __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== 1) { - $ERROR('#2: var __instance = function(){}; __instance.split = String.prototype.split; __split = __instance.split(); __split.length === 1. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__split[0].substring(0,8) !== "function") { - $ERROR('#3: var __instance = function(){}; __instance.split = String.prototype.split; __split = __instance.split(); __split[0].substring(0,8) === "function". Actual: '+__split[0].substring(0,8) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A3_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A3_T4.js deleted file mode 100644 index 6864d17e2..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A3_T4.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A3_T4; -* @section: 15.5.4.14; -* @assertion: String.prototype.split() returns an Array object with: -* i) length equaled to 1, -* ii) [[Get]](0) equaled to the result of converting this object to a string; -* @description: Instance is Number(NaN); -*/ - -var __instance = new Number(NaN); - -__instance.split = String.prototype.split; - -__split = __instance.split(); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: var __instance = new Number(NaN); __instance.split = String.prototype.split; __split = __instance.split(); __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== 1) { - $ERROR('#2: var __instance = new Number(NaN); __instance.split = String.prototype.split; __split = __instance.split(); __split.length === 1. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__split[0] !== "NaN") { - $ERROR('#3: var __instance = new Number(NaN); __instance.split = String.prototype.split; __split = __instance.split(); __split[0] === "NaN". Actual: '+__split[0] ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A3_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A3_T5.js deleted file mode 100644 index 9ff061bff..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A3_T5.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A3_T5; -* @section: 15.5.4.14; -* @assertion: String.prototype.split() returns an Array object with: -* i) length equaled to 1, -* ii) [[Get]](0) equaled to the result of converting this object to a string; -* @description: Instance is Number(-1234567890); -*/ - -var __instance = new Number(-1234567890); - -__instance.split = String.prototype.split; - -__split = __instance.split(); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: var __instance = new Number(-1234567890); __instance.split = String.prototype.split; __split = __instance.split(); __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== 1) { - $ERROR('#2: var __instance = new Number(-1234567890); __instance.split = String.prototype.split; __split = __instance.split(); __split.length === 1. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__split[0] !== "-1234567890") { - $ERROR('#3: var __instance = new Number(-1234567890); __instance.split = String.prototype.split; __split = __instance.split(); __split[0] === "-1234567890". Actual: '+__split[0] ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A3_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A3_T6.js deleted file mode 100644 index ec9f4a661..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A3_T6.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A3_T6; -* @section: 15.5.4.14; -* @assertion: String.prototype.split() returns an Array object with: -* i) length equaled to 1, -* ii) [[Get]](0) equaled to the result of converting this object to a string; -* @description: Instance is Number(-1e21); -*/ - -var __instance = new Number(-1e21); - -__instance.split = String.prototype.split; - -__split = __instance.split(); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: var __instance = new Number(-1e21); __instance.split = String.prototype.split; __split = __instance.split(); __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== 1) { - $ERROR('#2: var __instance = new Number(-1e21); __instance.split = String.prototype.split; __split = __instance.split(); __split.length === 1. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__split[0] !== __instance.toString()) { - $ERROR('#3: var __instance = new Number(-1e21); __instance.split = String.prototype.split; __split = __instance.split(); __split[0] === __instance.toString(). Actual: '+__split[0] ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A3_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A3_T7.js deleted file mode 100644 index dab8ec2dc..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A3_T7.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A3_T7; -* @section: 15.5.4.14; -* @assertion: String.prototype.split() returns an Array object with: -* i) length equaled to 1, -* ii) [[Get]](0) equaled to the result of converting this object to a string; -* @description: Instance is Math; -*/ - -var __instance = Math; - -__instance.split = String.prototype.split; - -__split = __instance.split(); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: var __instance = Math; __instance.split = String.prototype.split; __split = __instance.split(); __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== 1) { - $ERROR('#2: var __instance = Math; __instance.split = String.prototype.split; __split = __instance.split(); __split.length === 1. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__split[0] !== "[object Math]") { - $ERROR('#3: var __instance = Math; __instance.split = String.prototype.split; __split = __instance.split(); __split[0] === "[object Math]". Actual: '+__split[0] ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A3_T8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A3_T8.js deleted file mode 100644 index 8365adff3..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A3_T8.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A3_T8; -* @section: 15.5.4.14; -* @assertion: String.prototype.split() returns an Array object with: -* i) length equaled to 1, -* ii) [[Get]](0) equaled to the result of converting this object to a string; -* @description: Instance is Array(1,2,3,4,5); -*/ - -var __instance = new Array(1,2,3,4,5); - -__instance.split = String.prototype.split; - -__split = __instance.split(); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: var __instance = new Array(1,2,3,4,5); __instance.split = String.prototype.split; __split = __instance.split(); __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== 1) { - $ERROR('#2: var __instance = new Array(1,2,3,4,5); __instance.split = String.prototype.split; __split = __instance.split(); __split.length === 1. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__split[0] !== "1,2,3,4,5") { - $ERROR('#3: var __instance = new Array(1,2,3,4,5); __instance.split = String.prototype.split; __split = __instance.split(); __split[0] === "1,2,3,4,5". Actual: '+__split[0] ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A3_T9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A3_T9.js deleted file mode 100644 index 6a695ccf8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A3_T9.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A3_T9; -* @section: 15.5.4.14; -* @assertion: String.prototype.split() returns an Array object with: -* i) length equaled to 1, -* ii) [[Get]](0) equaled to the result of converting this object to a string; -* @description: Instance is Boolean; -*/ - -var __instance = new Boolean; - -__instance.split = String.prototype.split; - -__split = __instance.split(); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: var __instance = new Boolean; __instance.split = String.prototype.split; __split = __instance.split(); __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== 1) { - $ERROR('#2: var __instance = new Boolean; __instance.split = String.prototype.split; __split = __instance.split(); __split.length === 1. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__split[0] !== "false") { - $ERROR('#3: var __instance = new Boolean; __instance.split = String.prototype.split; __split = __instance.split(); __split[0] === "false". Actual: '+__split[0] ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T1.js deleted file mode 100644 index 17d8caa3e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T1.js +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A4_T1; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. If separator is a regular expression then -* inside of SplitMatch helper the [[Match]] method of R is called giving it the arguments corresponding; -* @description: Argument is regexp /l/, and instance is String("hello"); -*/ - -var __string = new String("hello"); - -var __re = /l/; - -__split = __string.split(__re); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: var __string = new String("hello"); var __re = /l/; __split = __string.split(__re); __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== 3) { - $ERROR('#2: var __string = new String("hello"); var __re = /l/; __split = __string.split(__re); __split.length === 3. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__split[0] !== "he") { - $ERROR('#3: var __string = new String("hello"); var __re = /l/; __split = __string.split(__re); __split[0] === "he". Actual: '+__split[0]); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (__split[1] !== "") { - $ERROR('#4: var __string = new String("hello"); var __re = /l/; __split = __string.split(__re); __split[1] === "". Actual: '+__split[1]); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#5 -if (__split[2] !== "o") { - $ERROR('#5: var __string = new String("hello"); var __re = /l/; __split = __string.split(__re); __split[2] === "o". Actual: '+__split[2] ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T10.js deleted file mode 100644 index 2ef7b7c48..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T10.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A4_T10; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. If separator is a regular expression then -* inside of SplitMatch helper the [[Match]] method of R is called giving it the arguments corresponding; -* @description: Argument is new RegExp, and instance is String("hello"); -*/ - -var __string = new String("hello"); - -var __re = new RegExp; - -__split = __string.split(__re); - -__expected = ["h","e","l","l","o"]; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== __expected.length) { - $ERROR('#2: __split.length === __expected.length. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -for(var index=0; index<__expected.length; index++) { - if (__split[index] !== __expected[index]) { - $ERROR('#3.'+index+': __split['+index+'] === '+__expected[index]+'. Actual: '+__split[index] ); - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T11.js deleted file mode 100644 index ae04344b8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T11.js +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A4_T11; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. If separator is a regular expression then -* inside of SplitMatch helper the [[Match]] method of R is called giving it the arguments corresponding; -* @description: Arguments are new RegExp and 0, and instance is String("hello"); -*/ - -var __string = new String("hello"); - -var __re = new RegExp; - -__split = __string.split(__re, 0); - -__expected = []; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== __expected.length) { - $ERROR('#2: __split.length === __expected.length. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__split[0] !== __expected[0]) { - $ERROR('#3: __split[0] === '+__expected[0]+'. Actual: '+__split[index] ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T12.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T12.js deleted file mode 100644 index bd1747988..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T12.js +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A4_T12; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. If separator is a regular expression then -* inside of SplitMatch helper the [[Match]] method of R is called giving it the arguments corresponding; -* @description: Arguments are new RegExp and 1, and instance is String("hello"); -*/ - -var __string = new String("hello"); - -var __re = new RegExp; - -__split = __string.split(__re, 1); - -__expected = ["h"]; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== __expected.length) { - $ERROR('#2: __split.length === __expected.length. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__split[0] !== __expected[0]) { - $ERROR('#3: __split[0] === '+__expected[0]+'. Actual: '+__split[0] ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T13.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T13.js deleted file mode 100644 index 7338f8021..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T13.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A4_T13; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. If separator is a regular expression then -* inside of SplitMatch helper the [[Match]] method of R is called giving it the arguments corresponding; -* @description: Arguments are new RegExp and 2, and instance is String("hello"); -*/ - -var __string = new String("hello"); - -var __re = new RegExp; - -__split = __string.split(__re, 2); - -__expected = ["h", "e"]; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== __expected.length) { - $ERROR('#2: __split.length === __expected.length. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -for(var index=0; index<__expected.length; index++) { - if (__split[index] !== __expected[index]) { - $ERROR('#3.'+index+': __split['+index+'] === '+__expected[index]+'. Actual: '+__split[index] ); - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T14.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T14.js deleted file mode 100644 index 713a3212e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T14.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A4_T14; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. If separator is a regular expression then -* inside of SplitMatch helper the [[Match]] method of R is called giving it the arguments corresponding; -* @description: Arguments are new RegExp and 3, and instance is String("hello"); -*/ - -var __string = new String("hello"); - -var __re = new RegExp; - -__split = __string.split(__re, 3); - -__expected = ["h", "e", "l"]; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== __expected.length) { - $ERROR('#2: __split.length === __expected.length. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -for(var index=0; index<__expected.length; index++) { - if (__split[index] !== __expected[index]) { - $ERROR('#3.'+index+': __split['+index+'] === '+__expected[index]+'. Actual: '+__split[index] ); - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T15.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T15.js deleted file mode 100644 index 96c6967e3..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T15.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A4_T15; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. If separator is a regular expression then -* inside of SplitMatch helper the [[Match]] method of R is called giving it the arguments corresponding; -* @description: Arguments are new RegExp and 4, and instance is String("hello"); -*/ - -var __string = new String("hello"); - -var __re = new RegExp; - -__split = __string.split(__re, 4); - -__expected = ["h", "e", "l" ,"l"]; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== __expected.length) { - $ERROR('#2: __split.length === __expected.length. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -for(var index=0; index<__expected.length; index++) { - if (__split[index] !== __expected[index]) { - $ERROR('#3.'+index+': __split['+index+'] === '+__expected[index]+'. Actual: '+__split[index] ); - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T16.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T16.js deleted file mode 100644 index a70a3fb67..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T16.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A4_T16; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. If separator is a regular expression then -* inside of SplitMatch helper the [[Match]] method of R is called giving it the arguments corresponding; -* @description: Arguments are new RegExp and void 0, and instance is String("hello"); -*/ - -var __string = new String("hello"); - -var __re = new RegExp; - -__split = __string.split(__re, void 0); - -__expected = ["h", "e", "l", "l", "o"]; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== __expected.length) { - $ERROR('#2: __split.length === __expected.length. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -for(var index=0; index<__expected.length; index++) { - if (__split[index] !== __expected[index]) { - $ERROR('#3.'+index+': __split['+index+'] === '+__expected[index]+'. Actual: '+__split[index] ); - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T17.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T17.js deleted file mode 100644 index 2cc25463f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T17.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A4_T17; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. If separator is a regular expression then -* inside of SplitMatch helper the [[Match]] method of R is called giving it the arguments corresponding; -* @description: Arguments are new RegExp and undefined, and instance is String("hello"); -*/ - -var __string = new String("hello"); - -var __re = new RegExp; - -__split = __string.split(__re, undefined); - -__expected = ["h", "e", "l", "l", "o"]; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== __expected.length) { - $ERROR('#2: __split.length === __expected.length. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -for(var index=0; index<__expected.length; index++) { - if (__split[index] !== __expected[index]) { - $ERROR('#3.'+index+': __split['+index+'] === '+__expected[index]+'. Actual: '+__split[index] ); - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T18.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T18.js deleted file mode 100644 index 4a0011da3..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T18.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A4_T18; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. If separator is a regular expression then -* inside of SplitMatch helper the [[Match]] method of R is called giving it the arguments corresponding; -* @description: Arguments are new RegExp and "hi", and instance is String("hello"); -*/ - -var __string = new String("hello"); - -var __re = new RegExp; - -__split = __string.split(__re, "hi"); - -__expected = []; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== __expected.length) { - $ERROR('#2: __split.length === __expected.length. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -for(var index=0; index<__expected.length; index++) { - if (__split[index] !== __expected[index]) { - $ERROR('#3.'+index+': __split['+index+'] === '+__expected[index]+'. Actual: '+__split[index] ); - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T19.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T19.js deleted file mode 100644 index e423bd09e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T19.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A4_T19; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. If separator is a regular expression then -* inside of SplitMatch helper the [[Match]] method of R is called giving it the arguments corresponding; -* @description: Argument is regexp /\s/, and instance is String("a b c de f"); -*/ - -var __string = new String("a b c de f"); - -var __re = /\s/; - -__split = __string.split(__re); - -__expected = ["a","b","c","de","f"]; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== __expected.length) { - $ERROR('#2: __split.length === __expected.length. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -for(var index=0; index<__expected.length; index++) { - if (__split[index] !== __expected[index]) { - $ERROR('#3.'+index+': __split['+index+'] === '+__expected[index]+'. Actual: '+__split[index] ); - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T2.js deleted file mode 100644 index aeb1a9e25..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T2.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A4_T2; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. If separator is a regular expression then -* inside of SplitMatch helper the [[Match]] method of R is called giving it the arguments corresponding; -* @description: Arguments are regexp /l/ and 0, and instance is String("hello"); -*/ - -var __string = new String("hello"); - -var __re = /l/; - -__split = __string.split(__re,0); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: var __string = new String("hello"); var __re = /l/; __split = __string.split(__re,0); __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== 0) { - $ERROR('#2: var __string = new String("hello"); var __re = /l/; __split = __string.split(__re,0); __split.length === 0. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T20.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T20.js deleted file mode 100644 index 03a55db00..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T20.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A4_T20; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. If separator is a regular expression then -* inside of SplitMatch helper the [[Match]] method of R is called giving it the arguments corresponding; -* @description: Arguments are regexp /\s/ and 3, and instance is String("a b c de f"); -*/ - -var __string = new String("a b c de f"); - -var __re = /\s/; - -__split = __string.split(__re,3); - -__expected = ["a","b","c"]; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== __expected.length) { - $ERROR('#2: __split.length === __expected.length. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -for(var index=0; index<__expected.length; index++) { - if (__split[index] !== __expected[index]) { - $ERROR('#3.'+index+': __split['+index+'] === '+__expected[index]+'. Actual: '+__split[index] ); - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T21.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T21.js deleted file mode 100644 index 87fa33ab0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T21.js +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A4_T21; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. If separator is a regular expression then -* inside of SplitMatch helper the [[Match]] method of R is called giving it the arguments corresponding; -* @description: Argument is regexp /\X/, and instance is String("a b c de f"); -*/ - -var __string = new String("a b c de f"); - -var __re = /X/; - -__split = __string.split(__re); - -__expected = ["a b c de f"]; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== __expected.length) { - $ERROR('#2: __split.length === __expected.length. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__split[0] !== __expected[0]) { - $ERROR('#3: __split[0] === '+__expected[0]+'. Actual: '+__split[index] ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T22.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T22.js deleted file mode 100644 index ca3307188..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T22.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A4_T22; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. If separator is a regular expression then -* inside of SplitMatch helper the [[Match]] method of R is called giving it the arguments corresponding; -* @description: Argument is regexp /\d+/, and instance is String("dfe23iu 34 =+65--"); -*/ - -var __string = new String("dfe23iu 34 =+65--"); - -var __re = /\d+/; - -__split = __string.split(__re); - -__expected = ["dfe","iu "," =+","--"]; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== __expected.length) { - $ERROR('#2: __split.length === __expected.length. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -for(var index=0; index<__expected.length; index++) { - if (__split[index] !== __expected[index]) { - $ERROR('#3.'+index+': __split['+index+'] === '+__expected[index]+'. Actual: '+__split[index] ); - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T23.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T23.js deleted file mode 100644 index 14981bc5f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T23.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A4_T23; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. If separator is a regular expression then -* inside of SplitMatch helper the [[Match]] method of R is called giving it the arguments corresponding; -* @description: Argument is regexp RegExp('\\d+'), and instance is String("dfe23iu 34 =+65--"); -*/ - -var __string = new String("dfe23iu 34 =+65--"); - -var __re = new RegExp('\\d+'); - -__split = __string.split(__re); - -__expected = ["dfe","iu "," =+","--"]; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== __expected.length) { - $ERROR('#2: __split.length === __expected.length. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -for(var index=0; index<__expected.length; index++) { - if (__split[index] !== __expected[index]) { - $ERROR('#3.'+index+': __split['+index+'] === '+__expected[index]+'. Actual: '+__split[index] ); - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T24.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T24.js deleted file mode 100644 index 6e8837430..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T24.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A4_T24; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. If separator is a regular expression then -* inside of SplitMatch helper the [[Match]] method of R is called giving it the arguments corresponding; -* @description: Argument is regexp /[a-z]/, and instance is String("abc"); -*/ - -var __string = new String("abc"); - -var __re = /[a-z]/; - -__split = __string.split(__re); - -__expected = ["","","",""]; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== __expected.length) { - $ERROR('#2: __split.length === __expected.length. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -for(var index=0; index<__expected.length; index++) { - if (__split[index] !== __expected[index]) { - $ERROR('#3.'+index+': __split['+index+'] === '+__expected[index]+'. Actual: '+__split[index] ); - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T25.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T25.js deleted file mode 100644 index 138f7b2ac..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T25.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A4_T25; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. If separator is a regular expression then -* inside of SplitMatch helper the [[Match]] method of R is called giving it the arguments corresponding; -* @description: Argument is RegExp('[a-z]'), and instance is String("abc"); -*/ - -var __string = new String("abc"); - -var __re = new RegExp('[a-z]'); - -__split = __string.split(__re); - -__expected = ["","","",""]; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== __expected.length) { - $ERROR('#2: __split.length === __expected.length. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -for(var index=0; index<__expected.length; index++) { - if (__split[index] !== __expected[index]) { - $ERROR('#3.'+index+': __split['+index+'] === '+__expected[index]+'. Actual: '+__split[index] ); - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T3.js deleted file mode 100644 index 5293d6bca..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T3.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A4_T3; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. If separator is a regular expression then -* inside of SplitMatch helper the [[Match]] method of R is called giving it the arguments corresponding; -* @description: Arguments are regexp /l/ and 1, and instance is String("hello"); -*/ - -var __string = new String("hello"); - -var __re = /l/; - -__split = __string.split(__re,1); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: var __string = new String("hello"); var __re = /l/; __split = __string.split(__re,1); __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== 1) { - $ERROR('#2: var __string = new String("hello"); var __re = /l/; __split = __string.split(__re,1); __split.length === 1. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__split[0] !== "he") { - $ERROR('#3: var __string = new String("hello"); var __re = /l/; __split = __string.split(__re,1); __split[0] === "he". Actual: '+__split[0] ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T4.js deleted file mode 100644 index fa197c207..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T4.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A4_T4; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. If separator is a regular expression then -* inside of SplitMatch helper the [[Match]] method of R is called giving it the arguments corresponding; -* @description: Arguments are regexp /l/ and 2, and instance is String("hello"); -*/ - -var __string = new String("hello"); - -var __re = /l/; - -__split = __string.split(__re,2); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: var __string = new String("hello"); var __re = /l/; __split = __string.split(__re,2); __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== 2) { - $ERROR('#2: var __string = new String("hello"); var __re = /l/; __split = __string.split(__re,2); __split.length === 2. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__split[0] !== "he") { - $ERROR('#3: var __string = new String("hello"); var __re = /l/; __split = __string.split(__re,2); __split[0] === "he". Actual: '+__split[0]); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (__split[1] !== "") { - $ERROR('#4: var __string = new String("hello"); var __re = /l/; __split = __string.split(__re,2); __split[1] === "". Actual: '+__split[1] ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T5.js deleted file mode 100644 index 69feede05..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T5.js +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A4_T5; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. If separator is a regular expression then -* inside of SplitMatch helper the [[Match]] method of R is called giving it the arguments corresponding; -* @description: Arguments are regexp /l/ and 3, and instance is String("hello"); -*/ - -var __string = new String("hello"); - -var __re = /l/; - -__split = __string.split(__re,3); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: var __string = new String("hello"); var __re = /l/; __split = __string.split(__re,3); __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== 3) { - $ERROR('#2: var __string = new String("hello"); var __re = /l/; __split = __string.split(__re,3); __split.length === 3. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__split[0] !== "he") { - $ERROR('#3: var __string = new String("hello"); var __re = /l/; __split = __string.split(__re,3); __split[0] === "he". Actual: '+__split[0]); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (__split[1] !== "") { - $ERROR('#4: var __string = new String("hello"); var __re = /l/; __split = __string.split(__re,3); __split[1] === "". Actual: '+__split[1]); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#5 -if (__split[2] !== "o") { - $ERROR('#5: var __string = new String("hello"); var __re = /l/; __split = __string.split(__re,3); __split[2] === "o". Actual: '+__split[2] ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T6.js deleted file mode 100644 index 026d63d4e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T6.js +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A4_T6; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. If separator is a regular expression then -* inside of SplitMatch helper the [[Match]] method of R is called giving it the arguments corresponding; -* @description: Arguments are regexp /l/ and 4, and instance is String("hello"); -*/ - -var __string = new String("hello"); - -var __re = /l/; - -__split = __string.split(__re,4); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: var __string = new String("hello"); var __re = /l/; __split = __string.split(__re,4); __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== 3) { - $ERROR('#2: var __string = new String("hello"); var __re = /l/; __split = __string.split(__re,4); __split.length === 3. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__split[0] !== "he") { - $ERROR('#3: var __string = new String("hello"); var __re = /l/; __split = __string.split(__re,4); __split[0] === "he". Actual: '+__split[0]); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (__split[1] !== "") { - $ERROR('#4: var __string = new String("hello"); var __re = /l/; __split = __string.split(__re,4); __split[1] === "". Actual: '+__split[1]); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#5 -if (__split[2] !== "o") { - $ERROR('#5: var __string = new String("hello"); var __re = /l/; __split = __string.split(__re,4); __split[2] === "o". Actual: '+__split[2] ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T7.js deleted file mode 100644 index b6ef351c4..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T7.js +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A4_T7; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. If separator is a regular expression then -* inside of SplitMatch helper the [[Match]] method of R is called giving it the arguments corresponding; -* @description: Arguments are regexp /l/ and void 0, and instance is String("hello"); -*/ - -var __string = new String("hello"); - -var __re = /l/; - -__split = __string.split(__re, void 0); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: var __string = new String("hello"); var __re = /l/; __split = __string.split(__re, void 0); __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== 3) { - $ERROR('#2: var __string = new String("hello"); var __re = /l/; __split = __string.split(__re, void 0); __split.length === 3. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__split[0] !== "he") { - $ERROR('#3: var __string = new String("hello"); var __re = /l/; __split = __string.split(__re, void 0); __split[0] === "he". Actual: '+__split[0]); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (__split[1] !== "") { - $ERROR('#4: var __string = new String("hello"); var __re = /l/; __split = __string.split(__re, void 0); __split[1] === "". Actual: '+__split[1]); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#5 -if (__split[2] !== "o") { - $ERROR('#5: var __string = new String("hello"); var __re = /l/; __split = __string.split(__re, void 0); __split[2] === "o". Actual: '+__split[2] ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T8.js deleted file mode 100644 index 7cb99e04d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T8.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A4_T8; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. If separator is a regular expression then -* inside of SplitMatch helper the [[Match]] method of R is called giving it the arguments corresponding; -* @description: Arguments are regexp /l/ and "hi", and instance is String("hello"); -*/ - -var __string = new String("hello"); - -var __re = /l/; - -__split = __string.split(__re, "hi"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: var __string = new String("hello"); var __re = /l/; __split = __string.split(__re, "hi"); __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== 0) { - $ERROR('#2: var __string = new String("hello"); var __re = /l/; __split = __string.split(__re, "hi"); __split.length === 0. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T9.js deleted file mode 100644 index a81df347d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A4_T9.js +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A4_T9; -* @section: 15.5.4.14; -* @assertion: String.prototype.split (separator, limit) returns an Array object into which substrings of the result of converting this object to a string have -* been stored. If separator is a regular expression then -* inside of SplitMatch helper the [[Match]] method of R is called giving it the arguments corresponding; -* @description: Arguments are regexp /l/ and undefined, and instance is String("hello"); -*/ - -var __string = new String("hello"); - -var __re = /l/; - -__split = __string.split(__re, undefined); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__split.constructor !== Array) { - $ERROR('#1: var __string = new String("hello"); var __re = /l/; __split = __string.split(__re, undefined); __split.constructor === Array. Actual: '+__split.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__split.length !== 3) { - $ERROR('#2: var __string = new String("hello"); var __re = /l/; __split = __string.split(__re, undefined); __split.length === 3. Actual: '+__split.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__split[0] !== "he") { - $ERROR('#3: var __string = new String("hello"); var __re = /l/; __split = __string.split(__re, undefined); __split[0] === "he". Actual: '+__split[0]); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (__split[1] !== "") { - $ERROR('#4: var __string = new String("hello"); var __re = /l/; __split = __string.split(__re, undefined); __split[1] === "". Actual: '+__split[1]); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#5 -if (__split[2] !== "o") { - $ERROR('#5: var __string = new String("hello"); var __re = /l/; __split = __string.split(__re, undefined); __split[2] === "o". Actual: '+__split[2] ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A6.js deleted file mode 100644 index b3d374fa2..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A6.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A6; -* @section: 15.5.4.14, 13.2; -* @assertion: String.prototype.split has not prototype property; -* @description: Checking String.prototype.split.prototype; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (String.prototype.split.prototype !== undefined) { - $ERROR('#1: String.prototype.split.prototype === undefined. Actual: '+String.prototype.split.prototype ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A7.js deleted file mode 100644 index 6a3c7012d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A7.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A7; -* @section: 15.5.4.14, 13.2; -* @assertion: String.prototype.split can't be used as constructor; -* @description: Checking if creating the String.prototype.split object fails; -*/ - -__FACTORY = String.prototype.split; - -try { - __instance = new __FACTORY; - $FAIL('#1: __FACTORY = String.prototype.split; "__instance = new __FACTORY" lead to throwing exception'); -} catch (e) {} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A8.js deleted file mode 100644 index 16578a2ab..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A8.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A8; -* @section: 15.5.4.14; -* @assertion: The String.prototype.split.length property has the attribute DontEnum; -* @description: Checking if enumerating the String.prototype.split.length property fails; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#0 -if (!(String.prototype.split.hasOwnProperty('length'))) { - $FAIL('#0: String.prototype.split.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.split.hasOwnProperty('length')); -} -// -////////////////////////////////////////////////////////////////////////////// - - -////////////////////////////////////////////////////////////////////////////// -// CHECK#1 -if (String.prototype.split.propertyIsEnumerable('length')) { - $ERROR('#1: String.prototype.split.propertyIsEnumerable(\'length\') return false'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -// CHECK#2 -count=0; - -for (p in String.prototype.split){ - if (p==="length") count++; -} - -if (count !== 0) { - $ERROR('#2: count=0; for (p in String.prototype.split){if (p==="length") count++;}; count === 0. Actual: '+count ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A9.js deleted file mode 100644 index a70debfe0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.14_String.prototype.split/S15.5.4.14_A9.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.14_A9; -* @section: 15.5.4.14; -* @assertion: The String.prototype.split.length property has the attribute DontDelete; -* @description: Checking if deleting the String.prototype.split.length property fails; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#0 -if (!(String.prototype.split.hasOwnProperty('length'))) { - $FAIL('#0: String.prototype.split.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.split.hasOwnProperty('length')); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (delete String.prototype.split.length) { - $ERROR('#1: delete String.prototype.split.length return false'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (!(String.prototype.split.hasOwnProperty('length'))) { - $FAIL('#2: delete String.prototype.split.length; String.prototype.split.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.split.hasOwnProperty('length')); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A10.js deleted file mode 100644 index c469b24cf..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A10.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.15_A10; -* @section: 15.5.4.15; -* @assertion: The String.prototype.substring.length property has the attribute ReadOnly; -* @description: Checking if varying the String.prototype.substring.length property fails; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!(String.prototype.substring.hasOwnProperty('length'))) { - $FAIL('#1: String.prototype.substring.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.substring.hasOwnProperty('length')); -} -// -////////////////////////////////////////////////////////////////////////////// - -__obj = String.prototype.substring.length; - -String.prototype.substring.length = function(){return "shifted";}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (String.prototype.substring.length !== __obj) { - $ERROR('#2: __obj = String.prototype.substring.length; String.prototype.substring.length = function(){return "shifted";}; String.prototype.substring.length === __obj. Actual: '+String.prototype.substring.length ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A11.js deleted file mode 100644 index 55d957b51..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A11.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.15_A11; -* @section: 15.5.4.15; -* @assertion: The length property of the substring method is 2; -* @description: Checking String.prototype.substring.length; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!(String.prototype.substring.hasOwnProperty("length"))) { - $ERROR('#1: String.prototype.substring.hasOwnProperty("length") return true. Actual: '+String.prototype.substring.hasOwnProperty("length")); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (String.prototype.substring.length !== 2) { - $ERROR('#2: String.prototype.substring.length === 2. Actual: '+String.prototype.substring.length ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A1_T1.js deleted file mode 100644 index b5dfd1e49..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A1_T1.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.15_A1_T1; -* @section: 15.5.4.15; -* @assertion: String.prototype.substring (start, end); -* @description: Arguments are false and true, and instance is object; -*/ - -__instance = new Object(true); - -__instance.substring = String.prototype.substring; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__instance.substring(false, true) !== "t") { - $ERROR('#1: __instance = new Object(true); __instance.substring = String.prototype.substring; __instance.substring(false, true) === "t". Actual: '+__instance.substring(false, true) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A1_T10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A1_T10.js deleted file mode 100644 index 03dd87388..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A1_T10.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.15_A1_T10; -* @section: 15.5.4.15; -* @assertion: String.prototype.substring (start, end); -* @description: Arguments are object and function call, and instance is String, object have overrided valueOf function; -*/ - -var __obj = {valueOf:function(){return 2;}}; - -var __str = "\u0035ABBBABAB"; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -with(__str){ - if (substring(__obj, function(){return substring(0,1);}()) !== "BBB") { - $ERROR('#1: var __obj = {valueOf:function(){return 2;}}; var __str = "\u0035ABBBABAB"; substring(__obj, function(){return substring(0,1);}()) === "BBB". Actual: '+substring(__obj, function(){return substring(0,1);}()) ); - } -} -// -////////////////////////////////////////////////////////////////////////////// - -var x; diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A1_T11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A1_T11.js deleted file mode 100644 index b4389b0d2..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A1_T11.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.15_A1_T11; -* @section: 15.5.4.15; -* @assertion: String.prototype.substring (start, end); -* @description: Arguments are objects, and instance is string, objects have overrided valueOf function, that return exception; -*/ - -var __obj = {valueOf:function(){throw "instart";}}; -var __obj2 = {valueOf:function(){throw "inend";}}; -var __str = {str__:"ABB\u0041BABAB"}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -with(__str){ - with(str__){ - try { - var x = substring(__obj,__obj2); - $FAIL('#1: "var x = substring(__obj,__obj2)" lead to throw exception'); - } catch (e) { - if (e!=="instart") { - $ERROR('#1.1: Exception === "instart". Actual: '+e); - } - } - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A1_T12.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A1_T12.js deleted file mode 100644 index 124e74863..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A1_T12.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.15_A1_T12; -* @section: 15.5.4.15; -* @assertion: String.prototype.substring (start, end); -* @description: Arguments are objects, and instance is string. -* First object have overrided valueOf function and toString function, that return exception. -* Second object have overrided valueOf function, that return exception; -*/ - -var __obj = {valueOf:function(){return {};}, toString:function(){throw "instart";}}; -var __obj2 = {valueOf:function(){throw "inend";}}; -var __str = new String("ABB\u0041BABAB"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -with(__str){ - try { - var x = substring(__obj, __obj2); - $FAIL('#1: "var x = substring(__obj,__obj2)" lead to throw exception'); - } catch (e) { - if (e!=="instart") { - $ERROR('#1.1: Exception ==="instart". Actual: '+e); - } - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A1_T13.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A1_T13.js deleted file mode 100644 index 00996cbf3..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A1_T13.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.15_A1_T13; -* @section: 15.5.4.15; -* @assertion: String.prototype.substring (start, end); -* @description: Arguments are objects, and instance is string. -* First object have overrided valueOf and toString functions. -* Second object have overrided toString function, that return exception; -*/ - -var __obj = {valueOf:function(){return {};}, toString:function(){return 1;}}; -var __obj2 = {toString:function(){throw "inend";}}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try { - var x = "ABB\u0041BABAB\u0031BBAA".substring(__obj, __obj2); - $FAIL('#1: var x = "ABB\\u0041BABAB\\u0031BBAA".substring(__obj,__obj2) lead to throw exception'); -} catch (e) { - if (e!=="inend") { - $ERROR('#1.1: Exception === "inend". Actual: '+e); - } -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A1_T14.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A1_T14.js deleted file mode 100644 index 28d45bf99..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A1_T14.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.15_A1_T14; -* @section: 15.5.4.15; -* @assertion: String.prototype.substring (start, end); -* @description: Used one argument, that is function(){}(). Instance is string; -*/ - - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if ("report".substring(function(){}()) !== "report") { - $ERROR('#1: "report".substring(function(){}()) === "report". Actual: '+"report".substring(function(){}()) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A1_T15.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A1_T15.js deleted file mode 100644 index 3b8434714..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A1_T15.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.15_A1_T15; -* @section: 15.5.4.15; -* @assertion: String.prototype.substring (start, end); -* @description: Call substring without arguments. Instance is Number with prototype.substring = String.prototype.substring; -*/ - -var __num = 11.001002; - -Number.prototype.substring = String.prototype.substring; - - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__num.substring()!=="11.001002") { - $ERROR('#1: var __num = 11.001002; Number.prototype.substring = String.prototype.substring; __num.substring()==="11.001002". Actual: '+__num.substring()); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A1_T2.js deleted file mode 100644 index 3fd487d05..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A1_T2.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.15_A1_T2; -* @section: 15.5.4.15; -* @assertion: String.prototype.substring (start, end); -* @description: Arguments are function call and x, and instance is Boolean. x is undefined variable; -*/ - -__instance = new Boolean; - -__instance.substring = String.prototype.substring; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__instance.substring(function(){return true;}(),x) !== "alse") { - $ERROR('#1: var x; __instance = new Boolean; __instance.substring = String.prototype.substring; __instance.substring(function(){return true;}(),x) === "alse". Actual: '+__instance.substring(function(){return true;}(),x) ); -} -// -////////////////////////////////////////////////////////////////////////////// - -var x; diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A1_T3.js deleted file mode 100644 index bb7609eb8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A1_T3.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.15_A1_T3; -* @section: 15.5.4.15; -* @assertion: String.prototype.substring (start, end); -* @description: Checking by using eval; -*/ - -substring = String.prototype.substring; - -if (typeof toString === "undefined"){ - toString = Object.prototype.toString; -} - -__class__ = toString(); -__toggle = 1; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (substring(eval("\"1\""),{valueOf:function(){return "0x0007"}})!=="object") { - $ERROR('#1: substring(eval("\\"1\\""),{valueOf:function(){return "0x0007"}})==="object". Actual: '+substring(eval("\"1\""),{valueOf:function(){return "0x0007"}})); -}; -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A1_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A1_T4.js deleted file mode 100644 index 5fec6a2b6..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A1_T4.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.15_A1_T4; -* @section: 15.5.4.15; -* @assertion: String.prototype.substring (start, end); -* @description: Arguments are null and number, and instance is function call, that returned string; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (function(){return "gnulluna"}().substring(null, -3) !== "") { - $ERROR('#1: function(){return "gnulluna"}().substring(null, -3) === "". Actual: '+function(){return "gnulluna"}().substring(null, -3) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A1_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A1_T5.js deleted file mode 100644 index a717af019..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A1_T5.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.15_A1_T5; -* @section: 15.5.4.15; -* @assertion: String.prototype.substring (start, end); -* @description: Arguments are null and Function(), and instance is function object, that have overrided valueOf function; -*/ - -__func.valueOf=function(){return "gnulluna"}; - -Function.prototype.substring=String.prototype.substring; - - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__func.substring(null, Function()) !== "") { - $ERROR('#1: __func.valueOf=function(){return "gnulluna"}; Function.prototype.substring=String.prototype.substring; function __func(){}; __func.substring(null, Function()) === "". Actual: '+__func.substring(null, Function()) ); -} -// -////////////////////////////////////////////////////////////////////////////// - -function __func(){}; diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A1_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A1_T6.js deleted file mode 100644 index 2e2fa7b71..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A1_T6.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.15_A1_T6; -* @section: 15.5.4.15; -* @assertion: String.prototype.substring (start, end); -* @description: Arguments are x and number, and instance is new String, x is undefined variable; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (new String("undefined").substring(x,3) !== "und") { - $ERROR('#1: var x; new String("undefined").substring(x,3) === "und". Actual: '+new String("undefined").substring(x,3) ); -} -// -////////////////////////////////////////////////////////////////////////////// - -var x; diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A1_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A1_T7.js deleted file mode 100644 index 90c65cf2b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A1_T7.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.15_A1_T7; -* @section: 15.5.4.15; -* @assertion: String.prototype.substring (start, end); -* @description: Arguments are symbol and undefined, and instance is String; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (String(void 0).substring("e",undefined) !== "undefined") { - $ERROR('#1: String(void 0).substring("e",undefined) === "undefined". Actual: '+String(void 0).substring("e",undefined) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A1_T8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A1_T8.js deleted file mode 100644 index da1beb541..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A1_T8.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.15_A1_T8; -* @section: 15.5.4.15; -* @assertion: String.prototype.substring (start, end); -* @description: Arguments are negative number and void 0, and instance is String(object), object have overrided toString function; -*/ - -__obj = {toString:function(){}}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (String(__obj).substring(-4,void 0) !== "undefined") { - $ERROR('#1: __obj = {toString:function(){}}; String(__obj).substring(-4,void 0) === "undefined". Actual: '+String(__obj).substring(-4,void 0) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A1_T9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A1_T9.js deleted file mode 100644 index 1f234749b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A1_T9.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.15_A1_T9; -* @section: 15.5.4.15; -* @assertion: String.prototype.substring (start, end); -* @description: Arguments are undefined and object, and instance is new String(object), object have overrided valueOf and toString functions; -*/ - -__obj = { - valueOf:function(){}, - toString:void 0 -}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (new String(__obj).substring(/*(function(){})()*/undefined,undefined) !== "undefined") { - $ERROR('#1: __obj = {valueOf:function(){}, toString:void 0}; new String(__obj).substring(/*(function(){})()*/undefined,undefined) === "undefined". Actual: '+new String(__obj).substring(/*(function(){})()*/undefined,undefined) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A2_T1.js deleted file mode 100644 index 98c9f10b5..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A2_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.15_A2_T1; -* @section: 15.5.4.15; -* @assertion: String.prototype.substring (start, end) returns a string value(not object); -* @description: Checking type of substring(); -*/ - -__string = new String("this is a string object"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __string.substring() !== "string") { - $ERROR('#1: __string = new String("this is a string object"); typeof __string.substring() === "string". Actual: '+typeof __string.substring() ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A2_T10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A2_T10.js deleted file mode 100644 index 3e5e68a96..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A2_T10.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.15_A2_T10; -* @section: 15.5.4.15; -* @assertion: String.prototype.substring (start, end) returns a string value(not object); -* @description: start is 0, end is 8; -*/ - -__string = new String("this_is_a_string object"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__string.substring(0,8) !== "this_is_") { - $ERROR('#1: __string = new String("this_is_a_string object"); __string.substring(0,8) === "this_is_". Actual: '+__string.substring(0,8) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A2_T2.js deleted file mode 100644 index 57cc786e5..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A2_T2.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.15_A2_T2; -* @section: 15.5.4.15; -* @assertion: String.prototype.substring (start, end) returns a string value(not object); -* @description: start is NaN, end is Infinity; -*/ - -__string = new String('this is a string object'); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__string.substring(NaN, Infinity) !== "this is a string object") { - $ERROR('#1: __string = new String(\'this is a string object\'); __string.substring(NaN, Infinity) === "this is a string object". Actual: '+__string.substring(NaN, Infinity) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A2_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A2_T3.js deleted file mode 100644 index e3518c82c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A2_T3.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.15_A2_T3; -* @section: 15.5.4.15; -* @assertion: String.prototype.substring (start, end) returns a string value(not object); -* @description: Call substring from empty String object; -*/ - -__string = new String(""); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__string.substring(1,0) !== "") { - $ERROR('#1: __string = new String(""); __string.substring(1,0) === "". Actual: '+__string.substring(1,0) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A2_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A2_T4.js deleted file mode 100644 index bd7f0a79b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A2_T4.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.15_A2_T4; -* @section: 15.5.4.15; -* @assertion: String.prototype.substring (start, end) returns a string value(not object); -* @description: start is Infinity, end is NaN; -*/ - -__string = new String("this is a string object"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__string.substring(Infinity, NaN) !== "this is a string object") { - $ERROR('#1: __string = new String("this is a string object"); __string.substring(Infinity, NaN) === "this is a string object". Actual: '+__string.substring(Infinity, NaN) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A2_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A2_T5.js deleted file mode 100644 index f691bc38d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A2_T5.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.15_A2_T5; -* @section: 15.5.4.15; -* @assertion: String.prototype.substring (start, end) returns a string value(not object); -* @description: start is Infinity, end is Infinity; -*/ - -__string = new String("this is a string object"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__string.substring(Infinity, Infinity) !== "") { - $ERROR('#1: __string = new String("this is a string object"); __string.substring(Infinity, Infinity) === "". Actual: '+__string.substring(Infinity, Infinity) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A2_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A2_T6.js deleted file mode 100644 index ebc23e1c9..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A2_T6.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.15_A2_T6; -* @section: 15.5.4.15; -* @assertion: String.prototype.substring (start, end) returns a string value(not object); -* @description: start is negative float number, end is 0; -*/ - -__string = new String("this is a string object"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__string.substring(-0.01,0) !== "") { - $ERROR('#1: __string = new String("this is a string object"); __string.substring(-0.01,0) === "". Actual: '+__string.substring(-0.01,0) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A2_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A2_T7.js deleted file mode 100644 index 1126e5d8e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A2_T7.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.15_A2_T7; -* @section: 15.5.4.15; -* @assertion: String.prototype.substring (start, end) returns a string value(not object); -* @description: start is tested_string.length, end is tested_string.length; -*/ - -__string = new String("this is a string object"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__string.substring(__string.length, __string.length) !== "") { - $ERROR('#1: __string = new String("this is a string object"); __string.substring(__string.length, __string.length) === "". Actual: '+__string.substring(__string.length, __string.length) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A2_T8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A2_T8.js deleted file mode 100644 index 82cbfe561..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A2_T8.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.15_A2_T8; -* @section: 15.5.4.15; -* @assertion: String.prototype.substring (start, end) returns a string value(not object); -* @description: start is tested_string.length+1, end is 0; -*/ - -__string = new String("this is a string object"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__string.substring(__string.length+1, 0) !== "this is a string object") { - $ERROR('#1: __string = new String("this is a string object"); __string.substring(__string.length+1, 0) === "this is a string object". Actual: '+__string.substring(__string.length+1, 0) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A2_T9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A2_T9.js deleted file mode 100644 index d478842a4..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A2_T9.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.15_A2_T9; -* @section: 15.5.4.15; -* @assertion: String.prototype.substring (start, end) returns a string value(not object); -* @description: start is -Infinity, end is -Infinity; -*/ - -__string = new String("this is a string object"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__string.substring(-Infinity, -Infinity) !== "") { - $ERROR('#1: __string = new String("this is a string object"); __string.substring(-Infinity, -Infinity) === "". Actual: '+__string.substring(-Infinity, -Infinity) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A3_T1.js deleted file mode 100644 index 636f9cf01..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A3_T1.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.15_A3_T1; -* @section: 15.5.4.15; -* @assertion: String.prototype.substring (start, end) can be applied to non String object instance and -* returns a string value(not object); -* @description: Apply String.prototype.substring to Array instance. Start is Infinity, end is -Infinity; -*/ - -__instance = new Array(1,2,3,4,5); -__instance.substring = String.prototype.substring; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__instance.substring(Infinity,-Infinity) !== "1,2,3,4,5") { - $ERROR('#1: __instance = new Array(1,2,3,4,5); __instance.substring = String.prototype.substring; __instance.substring(Infinity,-Infinity) === "1,2,3,4,5". Actual: '+__instance.substring(Infinity,-Infinity) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A3_T10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A3_T10.js deleted file mode 100644 index 0896bf500..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A3_T10.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.15_A3_T10; -* @section: 15.5.4.15; -* @assertion: String.prototype.substring (start, end) can be applied to non String object instance and -* returns a string value(not object); -* @description: Checknig if applying String.prototype.substring to Function object instance passes; -*/ - -__FACTORY.prototype.substring = String.prototype.substring; - -__instance = new __FACTORY(void 0); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__instance.substring(0, 100) !== "undefined") { - $ERROR('#1: __instance.substring(0, 100) === "undefined". Actual: '+__instance.substring(0, 100) ); -} -// -////////////////////////////////////////////////////////////////////////////// - -function __FACTORY( value ) { - this.value = value; - this.toString = function() { return this.value+''; } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A3_T11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A3_T11.js deleted file mode 100644 index e8178b9ff..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A3_T11.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.15_A3_T11; -* @section: 15.5.4.15; -* @assertion: String.prototype.substring (start, end) can be applied to non String object instance and -* returns a string value(not object); -* @description: Apply String.prototype.substring to Boolean instance. Start is new Array(), end is new Boolean(1); -*/ - -__instance = new Boolean(); - -__instance.substring = String.prototype.substring; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__instance.substring(new Array(), new Boolean(1)) !== "f") { - $ERROR('#1: __instance = new Boolean(); __instance.substring = String.prototype.substring; __instance.substring(new Array(), new Boolean(1)) === "f". Actual: '+__instance.substring(new Array(), new Boolean(1)) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A3_T2.js deleted file mode 100644 index 69969b609..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A3_T2.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.15_A3_T2; -* @section: 15.5.4.15; -* @assertion: String.prototype.substring (start, end) can be applied to non String object instance and -* returns a string value(not object); -* @description: Apply String.prototype.substring to Array instance. Start is 9, end is -Infinity; -*/ - -__instance = new Array(1,2,3,4,5); -__instance.substring = String.prototype.substring; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__instance.substring(9,-Infinity) !== "1,2,3,4,5") { - $ERROR('#1: __instance = new Array(1,2,3,4,5); __instance.substring = String.prototype.substring; __instance.substring(9,-Infinity) === "1,2,3,4,5". Actual: '+__instance.substring(9,-Infinity) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A3_T3.js deleted file mode 100644 index 177ff3a3f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A3_T3.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.15_A3_T3; -* @section: 15.5.4.15; -* @assertion: String.prototype.substring (start, end) can be applied to non String object instance and -* returns a string value(not object); -* @description: Apply String.prototype.substring to Array instance. Start is true, end is false; -*/ - -__instance = new Array(1,2,3,4,5); -__instance.substring = String.prototype.substring; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__instance.substring(true, false) !== "1") { - $ERROR('#1: __instance = new Array(1,2,3,4,5); __instance.substring = String.prototype.substring; __instance.substring(true, false) === "1". Actual: '+__instance.substring(true, false) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A3_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A3_T4.js deleted file mode 100644 index 83f0888f5..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A3_T4.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.15_A3_T4; -* @section: 15.5.4.15; -* @assertion: String.prototype.substring (start, end) can be applied to non String object instance and -* returns a string value(not object); -* @description: Apply String.prototype.substring to Array instance. Start is '4', end is '5'; -*/ - -__instance = new Array(1,2,3,4,5); -__instance.substring = String.prototype.substring; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__instance.substring('4', '5') !== "3") { - $ERROR('#1: __instance = new Array(1,2,3,4,5); __instance.substring = String.prototype.substring; __instance.substring(\'4\', \'5\') === "3". Actual: '+__instance.substring('4', '5') ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A3_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A3_T5.js deleted file mode 100644 index 1be5b5ba1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A3_T5.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.15_A3_T5; -* @section: 15.5.4.15; -* @assertion: String.prototype.substring (start, end) can be applied to non String object instance and -* returns a string value(not object); -* @description: Apply String.prototype.substring to Object instance. Start is 8, end is 0; -*/ - -__instance = new Object(); -__instance.substring = String.prototype.substring; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__instance.substring(8,0) !== "[object ") { - $ERROR('#1: __instance = new Object(); __instance.substring = String.prototype.substring; __instance.substring(8,0) === "[object ". Actual: '+__instance.substring(8,0) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A3_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A3_T6.js deleted file mode 100644 index b142ba984..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A3_T6.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.15_A3_T6; -* @section: 15.5.4.15; -* @assertion: String.prototype.substring (start, end) can be applied to non String object instance and -* returns a string value(not object); -* @description: Apply String.prototype.substring to Object instance. Start is 8, end is length of object.toString; -*/ - -__instance = new Object(); -__instance.substring = String.prototype.substring; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__instance.substring(8, __instance.toString().length) !== "Object]") { - $ERROR('#1: __instance = new Object(); __instance.substring = String.prototype.substring; __instance.substring(8, __instance.toString().length) === "Object]". Actual: '+__instance.substring(8, __instance.toString().length) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A3_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A3_T7.js deleted file mode 100644 index d0c73279c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A3_T7.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.15_A3_T7; -* @section: 15.5.4.15; -* @assertion: String.prototype.substring (start, end) can be applied to non String object instance and -* returns a string value(not object); -* @description: Apply String.prototype.substring to Object instance. Call instance.substring(...).substring(...); -*/ - -__instance = function(){}; - -__instance.substring = String.prototype.substring; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__instance.substring(8,Infinity).substring(-Infinity,1) !== " ") { - $ERROR('#1: __instance = function(){}; __instance.substring = String.prototype.substring; __instance.substring(8,Infinity).substring(-Infinity,1) === " ". Actual: '+__instance.substring(8,Infinity).substring(-Infinity,1) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A3_T8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A3_T8.js deleted file mode 100644 index aec9fd300..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A3_T8.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.15_A3_T8; -* @section: 15.5.4.15; -* @assertion: String.prototype.substring (start, end) can be applied to non String object instance and -* returns a string value(not object); -* @description: Apply String.prototype.substring to Number instance. Start is Infinity, end is NaN; -*/ - -__instance = new Number(NaN); - -__instance.substring = String.prototype.substring; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__instance.substring(Infinity, NaN) !== "NaN") { - $ERROR('#1: __instance = new Number(NaN); __instance.substring = String.prototype.substring; __instance.substring(Infinity, NaN) === "NaN". Actual: '+__instance.substring(Infinity, NaN) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A3_T9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A3_T9.js deleted file mode 100644 index fff6d5400..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A3_T9.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.15_A3_T9; -* @section: 15.5.4.15; -* @assertion: String.prototype.substring (start, end) can be applied to non String object instance and -* returns a string value(not object); -* @description: Apply String.prototype.substring to Math instance. Start is Math.PI, end is -10; -*/ - -__instance = Math; - -__instance.substring = String.prototype.substring; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__instance.substring(Math.PI, -10) !== "[ob") { - $ERROR('#1: __instance = Math; __instance.substring = String.prototype.substring; __instance.substring(Math.PI, -10) === "[ob". Actual: '+__instance.substring(Math.PI, -10) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A6.js deleted file mode 100644 index 4f1e52ead..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A6.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.15_A6; -* @section: 15.5.4.15, 13.2; -* @assertion: String.prototype.substring has not prototype property; -* @description: Checking String.prototype.substring.prototype; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (String.prototype.substring.prototype !== undefined) { - $ERROR('#1: String.prototype.substring.prototype === undefined. Actual: '+String.prototype.substring.prototype ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A7.js deleted file mode 100644 index f5692c7fb..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A7.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.15_A7; -* @section: 15.5.4.15, 13.2; -* @assertion: String.prototype.substring can't be used as constructor; -* @description: Checking if creating the String.prototype.substring object fails; -*/ - -__FACTORY = String.prototype.substring; - -try { - __instance = new __FACTORY; - $FAIL('#1: __FACTORY = String.prototype.substring; "__instance = new __FACTORY" lead to throwing exception'); -} catch (e) { - $PRINT(e); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A8.js deleted file mode 100644 index 0192d20b2..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A8.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.15_A8; -* @section: 15.5.4.15; -* @assertion: The String.prototype.substring.length property has the attribute DontEnum; -* @description: Checking if enumerating the String.prototype.substring.length property fails; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#0 -if (!(String.prototype.substring.hasOwnProperty('length'))) { - $FAIL('#0: String.prototype.substring.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.substring.hasOwnProperty('length')); -} -// -////////////////////////////////////////////////////////////////////////////// - - -////////////////////////////////////////////////////////////////////////////// -// CHECK#1 -if (String.prototype.substring.propertyIsEnumerable('length')) { - $ERROR('#1: String.prototype.substring.propertyIsEnumerable(\'length\') return false'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -// CHECK#2 -count=0; - -for (p in String.prototype.substring){ - if (p==="length") count++; -} - -if (count !== 0) { - $ERROR('#2: count=0; for (p in String.prototype.substring){if (p==="length") count++;} count === 0. Actual: '+count ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A9.js deleted file mode 100644 index 4a947b2e2..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.15_String.prototype.substring/S15.5.4.15_A9.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.15_A9; -* @section: 15.5.4.15; -* @assertion: The String.prototype.substring.length property has the attribute DontDelete; -* @description: Checking if deleting the String.prototype.substring.length property fails; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#0 -if (!(String.prototype.substring.hasOwnProperty('length'))) { - $FAIL('#0: String.prototype.substring.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.substring.hasOwnProperty('length')); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (delete String.prototype.substring.length) { - $ERROR('#1: delete String.prototype.substring.length return false'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (!(String.prototype.substring.hasOwnProperty('length'))) { - $FAIL('#2: delete String.prototype.substring.length; String.prototype.substring.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.substring.hasOwnProperty('length')); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.16_String.prototype.toLowerCase/S15.5.4.16_A10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.16_String.prototype.toLowerCase/S15.5.4.16_A10.js deleted file mode 100644 index f11546ea0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.16_String.prototype.toLowerCase/S15.5.4.16_A10.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.16_A10; -* @section: 15.5.4.16; -* @assertion: The String.prototype.toLowerCase.length property has the attribute ReadOnly; -* @description: Checking if varying the String.prototype.toLowerCase.length property fails; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!(String.prototype.toLowerCase.hasOwnProperty('length'))) { - $FAIL('#1: String.prototype.toLowerCase.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.toLowerCase.hasOwnProperty('length')); -} -// -////////////////////////////////////////////////////////////////////////////// - -__obj = String.prototype.toLowerCase.length; - -String.prototype.toLowerCase.length = function(){return "shifted";}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (String.prototype.toLowerCase.length !== __obj) { - $ERROR('#2: __obj = String.prototype.toLowerCase.length; String.prototype.toLowerCase.length = function(){return "shifted";}; String.prototype.toLowerCase.length === __obj. Actual: '+String.prototype.toLowerCase.length ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.16_String.prototype.toLowerCase/S15.5.4.16_A11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.16_String.prototype.toLowerCase/S15.5.4.16_A11.js deleted file mode 100644 index b1f970c70..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.16_String.prototype.toLowerCase/S15.5.4.16_A11.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.16_A11; -* @section: 15.5.4.16; -* @assertion: The length property of the toLowerCase method is 0; -* @description: Checking String.prototype.toLowerCase.length; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!(String.prototype.toLowerCase.hasOwnProperty("length"))) { - $ERROR('#1: String.prototype.toLowerCase.hasOwnProperty("length") return true. Actual: '+String.prototype.toLowerCase.hasOwnProperty("length")); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (String.prototype.toLowerCase.length !== 0) { - $ERROR('#2: String.prototype.toLowerCase.length === 0. Actual: '+String.prototype.toLowerCase.length ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.16_String.prototype.toLowerCase/S15.5.4.16_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.16_String.prototype.toLowerCase/S15.5.4.16_A1_T1.js deleted file mode 100644 index bca222c90..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.16_String.prototype.toLowerCase/S15.5.4.16_A1_T1.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.16_A1_T1; -* @section: 15.5.4.16; -* @assertion: String.prototype.toLowerCase(); -* @description: Arguments is true, and instance is object; -*/ - -__instance = new Object(true); - -__instance.toLowerCase = String.prototype.toLowerCase; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__instance.toLowerCase() !== "true") { - $ERROR('#1: __instance = new Object(true); __instance.toLowerCase = String.prototype.toLowerCase; __instance.toLowerCase() === "true". Actual: '+__instance.toLowerCase() ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.16_String.prototype.toLowerCase/S15.5.4.16_A1_T10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.16_String.prototype.toLowerCase/S15.5.4.16_A1_T10.js deleted file mode 100644 index 0bc9811e8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.16_String.prototype.toLowerCase/S15.5.4.16_A1_T10.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.16_A1_T10; -* @section: 15.5.4.16; -* @assertion: String.prototype.toLowerCase(); -* @description: Call toLowerCase() function of object with overrode toString function; -*/ - -var __obj = {toString:function(){return "\u0041B";}} -__obj.toLowerCase = String.prototype.toLowerCase; - - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__obj.toLowerCase() !=="ab") { - $ERROR('#1: var __obj = {toString:function(){return "\u0041B";}}; __obj.toLowerCase = String.prototype.toLowerCase; __obj.toLowerCase() ==="ab". Actual: '+__obj.toLowerCase() ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.16_String.prototype.toLowerCase/S15.5.4.16_A1_T11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.16_String.prototype.toLowerCase/S15.5.4.16_A1_T11.js deleted file mode 100644 index d4df594d7..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.16_String.prototype.toLowerCase/S15.5.4.16_A1_T11.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.16_A1_T11; -* @section: 15.5.4.16; -* @assertion: String.prototype.toLowerCase(); -* @description: Override toString function, toString throw exception, then call toLowerCase() function for this object; -*/ - -var __obj = {toString:function(){throw "intostr";}} -__obj.toLowerCase = String.prototype.toLowerCase; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try { - var x = __obj.toLowerCase(); - $FAIL('#1: "var x = __obj.toLowerCase()" lead to throwing exception'); -} catch (e) { - if (e!=="intostr") { - $ERROR('#1.1: Exception === "intostr". Actual: '+e); - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.16_String.prototype.toLowerCase/S15.5.4.16_A1_T12.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.16_String.prototype.toLowerCase/S15.5.4.16_A1_T12.js deleted file mode 100644 index 4ab84d5e7..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.16_String.prototype.toLowerCase/S15.5.4.16_A1_T12.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.16_A1_T12; -* @section: 15.5.4.16; -* @assertion: String.prototype.toLowerCase(); -* @description: Override toString and valueOf functions, valueOf throw exception, then call toLowerCase() function for this object; -*/ - -var __obj = {toString:function(){return {};},valueOf:function(){throw "intostr";}} -__obj.toLowerCase = String.prototype.toLowerCase; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try { - var x = __obj.toLowerCase(); - $FAIL('#1: "var x = __obj.toLowerCase()" lead to throwing exception'); -} catch (e) { - if (e!=="intostr") { - $ERROR('#1.1: Exception === "intostr". Actual: '+e); - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.16_String.prototype.toLowerCase/S15.5.4.16_A1_T13.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.16_String.prototype.toLowerCase/S15.5.4.16_A1_T13.js deleted file mode 100644 index dfd8c2f97..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.16_String.prototype.toLowerCase/S15.5.4.16_A1_T13.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.16_A1_T13; -* @section: 15.5.4.16; -* @assertion: String.prototype.toLowerCase(); -* @description: Override toString and valueOf functions, then call toLowerCase() function for this object; -*/ - -var __obj = {toString:function(){return {};},valueOf:function(){return 1;}} -__obj.toLowerCase = String.prototype.toLowerCase; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__obj.toLowerCase() !=="1") { - $ERROR('#1: var __obj = {toString:function(){return {};},valueOf:function(){return 1;}}; __obj.toLowerCase = String.prototype.toLowerCase; __obj.toLowerCase() ==="1". Actual: '+__obj.toLowerCase() ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__obj.toLowerCase().length !== 1) { - $ERROR('#2: var __obj = {toString:function(){return {};},valueOf:function(){return 1;}}; __obj.toLowerCase = String.prototype.toLowerCase; __obj.toLowerCase().length === 1. Actual: '+__obj.toLowerCase().length ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.16_String.prototype.toLowerCase/S15.5.4.16_A1_T14.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.16_String.prototype.toLowerCase/S15.5.4.16_A1_T14.js deleted file mode 100644 index 096942c8e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.16_String.prototype.toLowerCase/S15.5.4.16_A1_T14.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.16_A1_T14; -* @section: 15.5.4.16; -* @assertion: String.prototype.toLowerCase(); -* @description: Call toLowerCase() function for RegExp object; -*/ - -var __reg = new RegExp("ABC"); -__reg.toLowerCase = String.prototype.toLowerCase; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__reg.toLowerCase() !== "/abc/") { - $ERROR('#1: var __reg = new RegExp("ABC"); __reg.toLowerCase = String.prototype.toLowerCase; __reg.toLowerCase() === "/abc/". Actual: '+__reg.toLowerCase() ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.16_String.prototype.toLowerCase/S15.5.4.16_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.16_String.prototype.toLowerCase/S15.5.4.16_A1_T2.js deleted file mode 100644 index dabf5dc92..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.16_String.prototype.toLowerCase/S15.5.4.16_A1_T2.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.16_A1_T2; -* @section: 15.5.4.16; -* @assertion: String.prototype.toLowerCase(); -* @description: Instance is Boolean object; -*/ - -__instance = new Boolean; - -__instance.toLowerCase = String.prototype.toLowerCase; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__instance.toLowerCase() !== "false") { - $ERROR('#1: __instance = new Boolean; __instance.toLowerCase = String.prototype.toLowerCase; __instance.toLowerCase() === "false". Actual: '+__instance.toLowerCase() ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.16_String.prototype.toLowerCase/S15.5.4.16_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.16_String.prototype.toLowerCase/S15.5.4.16_A1_T3.js deleted file mode 100644 index a7f8bbeb3..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.16_String.prototype.toLowerCase/S15.5.4.16_A1_T3.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.16_A1_T3; -* @section: 15.5.4.16; -* @assertion: String.prototype.toLowerCase(); -* @description: Checking by using eval; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (eval("\"BJ\"").toLowerCase() !== "bj") { - $ERROR('#1: eval("\\"BJ\\"").toLowerCase() === "bj". Actual: '+eval("\"BJ\"").toLowerCase() ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.16_String.prototype.toLowerCase/S15.5.4.16_A1_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.16_String.prototype.toLowerCase/S15.5.4.16_A1_T4.js deleted file mode 100644 index 4927426d7..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.16_String.prototype.toLowerCase/S15.5.4.16_A1_T4.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.16_A1_T4; -* @section: 15.5.4.16; -* @assertion: String.prototype.toLowerCase(); -* @description: Call toLowerCase() function without arguments of string and from empty string; -*/ - -__lowerCase = "".toLowerCase(); - -__expected = ""; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__lowerCase.length !== __expected.length) { - $ERROR('#1: __lowerCase = "".toLowerCase(); __expected = ""; __lowerCase.length === __expected.length. Actual: '+__lowerCase.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__lowerCase.index !== __expected.index) { - $ERROR('#2: __lowerCase = "".toLowerCase(); __expected = ""; __lowerCase.index === __expected.index. Actual: '+__lowerCase.index ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__lowerCase.input !== __expected.input) { - $ERROR('#3: __lowerCase = "".toLowerCase(); __expected = ""; __lowerCase.input === __expected.input. Actual: '+__lowerCase.input ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (__lowerCase[0]!==__expected[0]) { - $ERROR('#4: __lowerCase = "".toLowerCase(); __expected = ""; __lowerCase[0]==='+__expected[0]+'. Actual: '+__lowerCase[0]); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.16_String.prototype.toLowerCase/S15.5.4.16_A1_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.16_String.prototype.toLowerCase/S15.5.4.16_A1_T5.js deleted file mode 100644 index 7a1c12180..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.16_String.prototype.toLowerCase/S15.5.4.16_A1_T5.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.16_A1_T5; -* @section: 15.5.4.16; -* @assertion: String.prototype.toLowerCase(); -* @description: Call toLowerCase() function for function call; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -//since ToString(null) evaluates to "null" match(null) evaluates to match("null") -if (function(){return "GnulLuNa"}().toLowerCase() !== "gnulluna") { - $ERROR('#1: function(){return "GnulLuNa"}().toLowerCase() === "gnulluna". Actual: '+function(){return "GnulLuNa"}().toLowerCase() ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.16_String.prototype.toLowerCase/S15.5.4.16_A1_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.16_String.prototype.toLowerCase/S15.5.4.16_A1_T6.js deleted file mode 100644 index 2db519b9b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.16_String.prototype.toLowerCase/S15.5.4.16_A1_T6.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.16_A1_T6; -* @section: 15.5.4.16; -* @assertion: String.prototype.toLowerCase(); -* @description: Call toLowerCase() function of Number.NEGATIVE_INFINITY; -*/ - -Number.prototype.toLowerCase = String.prototype.toLowerCase; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if ((Number.NEGATIVE_INFINITY).toLowerCase() !== "-infinity") { - $ERROR('#1: Number.prototype.toLowerCase = String.prototype.toLowerCase; (Number.NEGATIVE_INFINITY).toLowerCase() === "-infinity". Actual: '+(Number.NEGATIVE_INFINITY).toLowerCase() ); -} -// -////////////////////////////////////////////////////////////////////////////// - - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.16_String.prototype.toLowerCase/S15.5.4.16_A1_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.16_String.prototype.toLowerCase/S15.5.4.16_A1_T7.js deleted file mode 100644 index 776db5b30..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.16_String.prototype.toLowerCase/S15.5.4.16_A1_T7.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.16_A1_T7; -* @section: 15.5.4.16; -* @assertion: String.prototype.toLowerCase(); -* @description: Call toLowerCase() function of NaN; -*/ - -Number.prototype.toLowerCase = String.prototype.toLowerCase; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (NaN.toLowerCase()!== "nan") { - $ERROR('#1: Number.prototype.toLowerCase = String.prototype.toLowerCase; NaN.toLowerCase()=== "nan". Actual: '+NaN.toLowerCase()); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.16_String.prototype.toLowerCase/S15.5.4.16_A1_T8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.16_String.prototype.toLowerCase/S15.5.4.16_A1_T8.js deleted file mode 100644 index 8a29ffb71..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.16_String.prototype.toLowerCase/S15.5.4.16_A1_T8.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.16_A1_T8; -* @section: 15.5.4.16; -* @assertion: String.prototype.toLowerCase(); -* @description: Call toLowerCase() function of Infinity; -*/ - -Number.prototype.toLowerCase = String.prototype.toLowerCase; - -if (Infinity.toLowerCase()!== "infinity") { - $ERROR('#1: Number.prototype.toLowerCase = String.prototype.toLowerCase; Infinity.toLowerCase()=== "infinity". Actual: '+Infinity.toLowerCase()); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.16_String.prototype.toLowerCase/S15.5.4.16_A1_T9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.16_String.prototype.toLowerCase/S15.5.4.16_A1_T9.js deleted file mode 100644 index 98512aa18..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.16_String.prototype.toLowerCase/S15.5.4.16_A1_T9.js +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.16_A1_T9; -* @section: 15.5.4.16; -* @assertion: String.prototype.toLowerCase(); -* @description: Call toLowerCase() function of string object; -*/ - -__obj = { - valueOf:function(){}, - toString:void 0 -}; - -__lowerCase = new String(__obj).toLowerCase(); - -__expected ="undefined"; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__lowerCase.length !== __expected.length) { - $ERROR('#1: __obj = {valueOf:function(){}, toString:void 0}; __lowerCase = new String(__obj).toLowerCase(); __expected ="undefined"; __lowerCase.length === __expected.length. Actual: '+__lowerCase.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__lowerCase.index !== __expected.index) { - $ERROR('#2: __obj = {valueOf:function(){}, toString:void 0}; __lowerCase = new String(__obj).toLowerCase(); __expected ="undefined"; __lowerCase.index === __expected.index. Actual: '+__lowerCase.index ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__lowerCase.input !== __expected.input) { - $ERROR('#3: __obj = {valueOf:function(){}, toString:void 0}; __lowerCase = new String(__obj).toLowerCase(); __expected ="undefined"; __lowerCase.input === __expected.input. Actual: '+__lowerCase.input ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__lowerCase[index]!==__expected[index]) { - $ERROR('#4.'+index+': __obj = {valueOf:function(){}, toString:void 0}; __lowerCase = new String(__obj).toLowerCase(); __expected ="undefined"; __lowerCase['+index+']==='+__expected[index]+'. Actual: '+__lowerCase[index]); - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.16_String.prototype.toLowerCase/S15.5.4.16_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.16_String.prototype.toLowerCase/S15.5.4.16_A2_T1.js deleted file mode 100644 index c7a793d3d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.16_String.prototype.toLowerCase/S15.5.4.16_A2_T1.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.16_A2_T1; -* @section: 15.5.4.16; -* @assertion: String.prototype.toLowerCase() return a string, but not a String object; -* @description: Checking returned result; -*/ - - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if ("Hello, WoRlD!".toLowerCase() !== "hello, world!") { - $ERROR('#1: "Hello, WoRlD!".toLowerCase() === "hello, world!". Actual: '+("Hello, WoRlD!".toLowerCase()) ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if ("Hello, WoRlD!".toLowerCase() !== String("hello, world!")) { - $ERROR('#2: "Hello, WoRlD!".toLowerCase() === String("hello, world!"). Actual: '+("Hello, WoRlD!".toLowerCase()) ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if ("Hello, WoRlD!".toLowerCase() ===new String("hello, world!")) { - $ERROR('#3: "Hello, WoRlD!".toLowerCase() !== new String("hello, world!")'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.16_String.prototype.toLowerCase/S15.5.4.16_A6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.16_String.prototype.toLowerCase/S15.5.4.16_A6.js deleted file mode 100644 index 0630b4e6e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.16_String.prototype.toLowerCase/S15.5.4.16_A6.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.16_A6; -* @section: 15.5.4.16, 13.2; -* @assertion: String.prototype.toLowerCase has not prototype property; -* @description: Checking String.prototype.toLowerCase.prototype; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (String.prototype.toLowerCase.prototype !== undefined) { - $ERROR('#1: String.prototype.toLowerCase.prototype === undefined. Actual: '+String.prototype.toLowerCase.prototype ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.16_String.prototype.toLowerCase/S15.5.4.16_A7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.16_String.prototype.toLowerCase/S15.5.4.16_A7.js deleted file mode 100644 index e57f3f3c0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.16_String.prototype.toLowerCase/S15.5.4.16_A7.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.16_A7; -* @section: 15.5.4.16, 13.2; -* @assertion: String.prototype.toLowerCase can't be used as constructor; -* @description: Checking if creating the String.prototype.toLowerCase object fails; -*/ - -__FACTORY = String.prototype.toLowerCase; - -try { - __instance = new __FACTORY; - $FAIL('#1: __FACTORY = String.prototype.toLowerCase; "__instance = new __FACTORY" lead to throwing exception'); -} catch (e) {} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.16_String.prototype.toLowerCase/S15.5.4.16_A8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.16_String.prototype.toLowerCase/S15.5.4.16_A8.js deleted file mode 100644 index 2042d0267..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.16_String.prototype.toLowerCase/S15.5.4.16_A8.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.16_A8; -* @section: 15.5.4.16; -* @assertion: The String.prototype.toLowerCase.length property has the attribute DontEnum; -* @description: Checking if enumerating the String.prototype.toLowerCase.length property fails; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#0 -if (!(String.prototype.toLowerCase.hasOwnProperty('length'))) { - $FAIL('#0: String.prototype.toLowerCase.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.toLowerCase.hasOwnProperty('length')); -} -// -////////////////////////////////////////////////////////////////////////////// - - -////////////////////////////////////////////////////////////////////////////// -// CHECK#1 -if (String.prototype.toLowerCase.propertyIsEnumerable('length')) { - $ERROR('#1: String.prototype.toLowerCase.propertyIsEnumerable(\'length\') return false'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -// CHECK#2 -count=0; - -for (p in String.prototype.toLowerCase){ - if (p==="length") count++; -} - -if (count !== 0) { - $ERROR('#2: count=0; for (p in String.prototype.toLowerCase){if (p==="length") count++;}; count === 0. Actual: '+count ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.16_String.prototype.toLowerCase/S15.5.4.16_A9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.16_String.prototype.toLowerCase/S15.5.4.16_A9.js deleted file mode 100644 index 28706c099..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.16_String.prototype.toLowerCase/S15.5.4.16_A9.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.16_A9; -* @section: 15.5.4.16; -* @assertion: The String.prototype.toLowerCase.length property has the attribute DontDelete; -* @description: Checking if deleting the String.prototype.toLowerCase.length property fails; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#0 -if (!(String.prototype.toLowerCase.hasOwnProperty('length'))) { - $FAIL('#0: String.prototype.toLowerCase.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.toLowerCase.hasOwnProperty('length')); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (delete String.prototype.toLowerCase.length) { - $ERROR('#1: delete String.prototype.toLowerCase.length return false'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (!(String.prototype.toLowerCase.hasOwnProperty('length'))) { - $FAIL('#2: delete String.prototype.toLowerCase.length; String.prototype.toLowerCase.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.toLowerCase.hasOwnProperty('length')); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.17_String.prototype.toLocaleLowerCase/S15.5.4.17_A10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.17_String.prototype.toLocaleLowerCase/S15.5.4.17_A10.js deleted file mode 100644 index bb762f5b4..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.17_String.prototype.toLocaleLowerCase/S15.5.4.17_A10.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.17_A10; -* @section: 15.5.4.17; -* @assertion: The String.prototype.toLocaleLowerCase.length property has the attribute ReadOnly; -* @description: Checking if varying the String.prototype.toLocaleLowerCase.length property fails; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!(String.prototype.toLocaleLowerCase.hasOwnProperty('length'))) { - $FAIL('#1: String.prototype.toLocaleLowerCase.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.toLocaleLowerCase.hasOwnProperty('length')); -} -// -////////////////////////////////////////////////////////////////////////////// - -__obj = String.prototype.toLocaleLowerCase.length; - -String.prototype.toLocaleLowerCase.length = function(){return "shifted";}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (String.prototype.toLocaleLowerCase.length !== __obj) { - $ERROR('#2: __obj = String.prototype.toLocaleLowerCase.length; String.prototype.toLocaleLowerCase.length = function(){return "shifted";}; String.prototype.toLocaleLowerCase.length === __obj. Actual: '+String.prototype.toLocaleLowerCase.length ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.17_String.prototype.toLocaleLowerCase/S15.5.4.17_A11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.17_String.prototype.toLocaleLowerCase/S15.5.4.17_A11.js deleted file mode 100644 index 6ad7e5266..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.17_String.prototype.toLocaleLowerCase/S15.5.4.17_A11.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.17_A11; -* @section: 15.5.4.17; -* @assertion: The length property of the toLocaleLowerCase method is 0; -* @description: Checking String.prototype.toLocaleLowerCase.length; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!(String.prototype.toLocaleLowerCase.hasOwnProperty("length"))) { - $ERROR('#1: String.prototype.toLocaleLowerCase.hasOwnProperty("length") return true. Actual: '+String.prototype.toLocaleLowerCase.hasOwnProperty("length")); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (String.prototype.toLocaleLowerCase.length !== 0) { - $ERROR('#2: String.prototype.toLocaleLowerCase.length === 0. Actual: '+String.prototype.toLocaleLowerCase.length ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.17_String.prototype.toLocaleLowerCase/S15.5.4.17_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.17_String.prototype.toLocaleLowerCase/S15.5.4.17_A1_T1.js deleted file mode 100644 index a7fc1b607..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.17_String.prototype.toLocaleLowerCase/S15.5.4.17_A1_T1.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.17_A1_T1; -* @section: 15.5.4.17; -* @assertion: String.prototype.toLocaleLowerCase(); -* @description: Arguments is true, and instance is object; -*/ - -__instance = new Object(true); - -__instance.toLocaleLowerCase = String.prototype.toLocaleLowerCase; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__instance.toLocaleLowerCase() !== "true") { - $ERROR('#1: __instance = new Object(true); __instance.toLocaleLowerCase = String.prototype.toLocaleLowerCase; __instance.toLocaleLowerCase() === "true". Actual: '+__instance.toLocaleLowerCase() ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.17_String.prototype.toLocaleLowerCase/S15.5.4.17_A1_T10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.17_String.prototype.toLocaleLowerCase/S15.5.4.17_A1_T10.js deleted file mode 100644 index 53fad3e0d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.17_String.prototype.toLocaleLowerCase/S15.5.4.17_A1_T10.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.17_A1_T10; -* @section: 15.5.4.17; -* @assertion: String.prototype.toLocaleLowerCase(); -* @description: Call toLocaleLowerCase() function of object with overrode toString function; -*/ - -var __obj = {toString:function(){return "\u0041B";}} -__obj.toLocaleLowerCase = String.prototype.toLocaleLowerCase; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__obj.toLocaleLowerCase() !=="ab") { - $ERROR('#1: var __obj = {toString:function(){return "\u0041B";}}; __obj.toLocaleLowerCase = String.prototype.toLocaleLowerCase; __obj.toLocaleLowerCase() ==="ab". Actual: '+__obj.toLocaleLowerCase() ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.17_String.prototype.toLocaleLowerCase/S15.5.4.17_A1_T11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.17_String.prototype.toLocaleLowerCase/S15.5.4.17_A1_T11.js deleted file mode 100644 index fddcf72a2..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.17_String.prototype.toLocaleLowerCase/S15.5.4.17_A1_T11.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.17_A1_T11; -* @section: 15.5.4.17; -* @assertion: String.prototype.toLocaleLowerCase(); -* @description: Override toString function, toString throw exception, then call toLocaleLowerCase() function for this object; -*/ - -var __obj = {toString:function(){throw "intostr";}} -__obj.toLocaleLowerCase = String.prototype.toLocaleLowerCase; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try { - var x = __obj.toLocaleLowerCase(); - $FAIL('#1: "var x = __obj.toLocaleLowerCase()" lead to throwing exception'); -} catch (e) { - if (e!=="intostr") { - $ERROR('#1.1: Exception === "intostr". Actual: '+e); - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.17_String.prototype.toLocaleLowerCase/S15.5.4.17_A1_T12.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.17_String.prototype.toLocaleLowerCase/S15.5.4.17_A1_T12.js deleted file mode 100644 index 24bebb2c0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.17_String.prototype.toLocaleLowerCase/S15.5.4.17_A1_T12.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.17_A1_T12; -* @section: 15.5.4.17; -* @assertion: String.prototype.toLocaleLowerCase(); -* @description: Override toString and valueOf functions, valueOf throw exception, then call toLocaleLowerCase() function for this object; -*/ - -var __obj = {toString:function(){return {};},valueOf:function(){throw "intostr";}} -__obj.toLocaleLowerCase = String.prototype.toLocaleLowerCase; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try { - var x = __obj.toLocaleLowerCase(); - $FAIL('#1: "var x = __obj.toLocaleLowerCase()" lead to throwing exception'); -} catch (e) { - if (e!=="intostr") { - $ERROR('#1.1: Exception === "intostr". Actual: '+e); - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.17_String.prototype.toLocaleLowerCase/S15.5.4.17_A1_T13.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.17_String.prototype.toLocaleLowerCase/S15.5.4.17_A1_T13.js deleted file mode 100644 index f799baa54..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.17_String.prototype.toLocaleLowerCase/S15.5.4.17_A1_T13.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.17_A1_T13; -* @section: 15.5.4.17; -* @assertion: String.prototype.toLocaleLowerCase(); -* @description: Override toString and valueOf functions, then call toLocaleLowerCase() function for this object; -*/ - -var __obj = {toString:function(){return {};},valueOf:function(){return 1;}} -__obj.toLocaleLowerCase = String.prototype.toLocaleLowerCase; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__obj.toLocaleLowerCase() !=="1") { - $ERROR('#1: var __obj = {toString:function(){return {};},valueOf:function(){return 1;}}; __obj.toLocaleLowerCase = String.prototype.toLocaleLowerCase; __obj.toLocaleLowerCase() ==="1". Actual: '+__obj.toLocaleLowerCase() ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__obj.toLocaleLowerCase().length !== 1) { - $ERROR('#2: var __obj = {toString:function(){return {};},valueOf:function(){return 1;}}; __obj.toLocaleLowerCase = String.prototype.toLocaleLowerCase; __obj.toLocaleLowerCase().length === 1. Actual: '+__obj.toLocaleLowerCase().length ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.17_String.prototype.toLocaleLowerCase/S15.5.4.17_A1_T14.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.17_String.prototype.toLocaleLowerCase/S15.5.4.17_A1_T14.js deleted file mode 100644 index b565c9f27..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.17_String.prototype.toLocaleLowerCase/S15.5.4.17_A1_T14.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.17_A1_T14; -* @section: 15.5.4.17; -* @assertion: String.prototype.toLocaleLowerCase(); -* @description: Call toLocaleLowerCase() function for RegExp object; -*/ - -var __reg = new RegExp("ABC"); -__reg.toLocaleLowerCase = String.prototype.toLocaleLowerCase; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__reg.toLocaleLowerCase() !== "/abc/") { - $ERROR('#1: var __reg = new RegExp("ABC"); __reg.toLocaleLowerCase = String.prototype.toLocaleLowerCase; __reg.toLocaleLowerCase() === "/abc/". Actual: '+__reg.toLocaleLowerCase() ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.17_String.prototype.toLocaleLowerCase/S15.5.4.17_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.17_String.prototype.toLocaleLowerCase/S15.5.4.17_A1_T2.js deleted file mode 100644 index 476a6bd48..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.17_String.prototype.toLocaleLowerCase/S15.5.4.17_A1_T2.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.17_A1_T2; -* @section: 15.5.4.17; -* @assertion: String.prototype.toLocaleLowerCase(); -* @description: Instance is Boolean object; -*/ - -__instance = new Boolean; - -__instance.toLocaleLowerCase = String.prototype.toLocaleLowerCase; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__instance.toLocaleLowerCase() !== "false") { - $ERROR('#1: __instance = new Boolean; __instance.toLocaleLowerCase = String.prototype.toLocaleLowerCase; __instance.toLocaleLowerCase() === "false". Actual: '+__instance.toLocaleLowerCase() ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.17_String.prototype.toLocaleLowerCase/S15.5.4.17_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.17_String.prototype.toLocaleLowerCase/S15.5.4.17_A1_T3.js deleted file mode 100644 index 1f93dea59..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.17_String.prototype.toLocaleLowerCase/S15.5.4.17_A1_T3.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.17_A1_T3; -* @section: 15.5.4.17; -* @assertion: String.prototype.toLocaleLowerCase(); -* @description: Checking by using eval; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (eval("\"BJ\"").toLocaleLowerCase() !== "bj") { - $ERROR('#1: eval("\\"BJ\\"").toLocaleLowerCase() === "bj". Actual: '+eval("\"BJ\"").toLocaleLowerCase() ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.17_String.prototype.toLocaleLowerCase/S15.5.4.17_A1_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.17_String.prototype.toLocaleLowerCase/S15.5.4.17_A1_T4.js deleted file mode 100644 index b18e9eb87..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.17_String.prototype.toLocaleLowerCase/S15.5.4.17_A1_T4.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.17_A1_T4; -* @section: 15.5.4.17; -* @assertion: String.prototype.toLocaleLowerCase(); -* @description: Call toLocaleLowerCase() function without arguments of string and from empty string; -*/ - -__lowerCase = "".toLocaleLowerCase(); - -__expected = ""; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__lowerCase.length !== __expected.length) { - $ERROR('#1: __lowerCase = "".toLocaleLowerCase(); __expected = ""; __lowerCase.length === __expected.length. Actual: '+__lowerCase.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__lowerCase.index !== __expected.index) { - $ERROR('#2: __lowerCase = "".toLocaleLowerCase(); __expected = ""; __lowerCase.index === __expected.index. Actual: '+__lowerCase.index ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__lowerCase.input !== __expected.input) { - $ERROR('#3: __lowerCase = "".toLocaleLowerCase(); __expected = ""; __lowerCase.input === __expected.input. Actual: '+__lowerCase.input ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (__lowerCase[0]!==__expected[0]) { - $ERROR('#4: __lowerCase = "".toLocaleLowerCase(); __expected = ""; __lowerCase[0]===__expected[0]. Actual: '+__lowerCase[0]); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.17_String.prototype.toLocaleLowerCase/S15.5.4.17_A1_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.17_String.prototype.toLocaleLowerCase/S15.5.4.17_A1_T5.js deleted file mode 100644 index fd261b430..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.17_String.prototype.toLocaleLowerCase/S15.5.4.17_A1_T5.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.17_A1_T5; -* @section: 15.5.4.17; -* @assertion: String.prototype.toLocaleLowerCase(); -* @description: Call toLocaleLowerCase() function for function call; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -//since ToString(null) evaluates to "null" match(null) evaluates to match("null") -if (function(){return "GnulLuNa"}().toLocaleLowerCase() !== "gnulluna") { - $ERROR('#1: function(){return "GnulLuNa"}().toLocaleLowerCase() === "gnulluna". Actual: '+function(){return "GnulLuNa"}().toLocaleLowerCase() ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.17_String.prototype.toLocaleLowerCase/S15.5.4.17_A1_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.17_String.prototype.toLocaleLowerCase/S15.5.4.17_A1_T6.js deleted file mode 100644 index a65ad9182..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.17_String.prototype.toLocaleLowerCase/S15.5.4.17_A1_T6.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.17_A1_T6; -* @section: 15.5.4.17; -* @assertion: String.prototype.toLocaleLowerCase(); -* @description: Call toLocaleLowerCase() function of Number.NEGATIVE_INFINITY; -*/ - -Number.prototype.toLocaleLowerCase = String.prototype.toLocaleLowerCase; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if ((Number.NEGATIVE_INFINITY).toLocaleLowerCase() !== "-infinity") { - $ERROR('#1: Number.prototype.toLocaleLowerCase = String.prototype.toLocaleLowerCase; (Number.NEGATIVE_INFINITY).toLocaleLowerCase() === "-infinity". Actual: '+(Number.NEGATIVE_INFINITY).toLocaleLowerCase() ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.17_String.prototype.toLocaleLowerCase/S15.5.4.17_A1_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.17_String.prototype.toLocaleLowerCase/S15.5.4.17_A1_T7.js deleted file mode 100644 index d01922e24..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.17_String.prototype.toLocaleLowerCase/S15.5.4.17_A1_T7.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.17_A1_T7; -* @section: 15.5.4.17; -* @assertion: String.prototype.toLocaleLowerCase(); -* @description: Call toLocaleLowerCase() function of NaN; -*/ - -Number.prototype.toLocaleLowerCase = String.prototype.toLocaleLowerCase; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (NaN.toLocaleLowerCase()!== "nan") { - $ERROR('#1: Number.prototype.toLocaleLowerCase = String.prototype.toLocaleLowerCase; NaN.toLocaleLowerCase()=== "nan". Actual: '+NaN.toLocaleLowerCase()); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.17_String.prototype.toLocaleLowerCase/S15.5.4.17_A1_T8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.17_String.prototype.toLocaleLowerCase/S15.5.4.17_A1_T8.js deleted file mode 100644 index 7b884b849..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.17_String.prototype.toLocaleLowerCase/S15.5.4.17_A1_T8.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.17_A1_T8; -* @section: 15.5.4.17; -* @assertion: String.prototype.toLocaleLowerCase(); -* @description: Call toLocaleLowerCase() function of Infinity; -*/ - -Number.prototype.toLocaleLowerCase = String.prototype.toLocaleLowerCase; - -if (Infinity.toLocaleLowerCase()!== "infinity") { - $ERROR('#1: Number.prototype.toLocaleLowerCase = String.prototype.toLocaleLowerCase; Infinity.toLocaleLowerCase()=== "infinity". Actual: '+Infinity.toLocaleLowerCase()); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.17_String.prototype.toLocaleLowerCase/S15.5.4.17_A1_T9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.17_String.prototype.toLocaleLowerCase/S15.5.4.17_A1_T9.js deleted file mode 100644 index 5eff6c516..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.17_String.prototype.toLocaleLowerCase/S15.5.4.17_A1_T9.js +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.17_A1_T9; -* @section: 15.5.4.17; -* @assertion: String.prototype.toLocaleLowerCase(); -* @description: Call toLocaleLowerCase() function of string object; -*/ - -__obj = { - valueOf:function(){}, - toString:void 0 -}; - -__lowerCase = new String(__obj).toLocaleLowerCase(); - - -__expected ="undefined"; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__lowerCase.length !== __expected.length) { - $ERROR('#1: __obj = {valueOf:function(){}, toString:void 0}; __lowerCase = new String(__obj).toLocaleLowerCase(); __expected ="undefined"; __lowerCase.length === __expected.length. Actual: '+__lowerCase.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__lowerCase.index !== __expected.index) { - $ERROR('#2: __obj = {valueOf:function(){}, toString:void 0}; __lowerCase = new String(__obj).toLocaleLowerCase(); __expected ="undefined"; __lowerCase.index === __expected.index. Actual: '+__lowerCase.index ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__lowerCase.input !== __expected.input) { - $ERROR('#3: __obj = {valueOf:function(){}, toString:void 0}; __lowerCase = new String(__obj).toLocaleLowerCase(); __expected ="undefined"; __lowerCase.input === __expected.input. Actual: '+__lowerCase.input ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__lowerCase[index]!==__expected[index]) { - $ERROR('#4.'+index+': __obj = {valueOf:function(){}, toString:void 0}; __lowerCase = new String(__obj).toLocaleLowerCase(); __expected ="undefined"; __lowerCase['+index+']=== '+__expected[index]+'. Actual: '+__lowerCase[index]); - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.17_String.prototype.toLocaleLowerCase/S15.5.4.17_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.17_String.prototype.toLocaleLowerCase/S15.5.4.17_A2_T1.js deleted file mode 100644 index b26679e34..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.17_String.prototype.toLocaleLowerCase/S15.5.4.17_A2_T1.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.17_A2_T1; -* @section: 15.5.4.17; -* @assertion: String.prototype.toLocaleLowerCase() return a string, but not a String object; -* @description: Checking returned result; -*/ - - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if ("Hello, WoRlD!".toLocaleLowerCase() !== "hello, world!") { - $ERROR('#1: "Hello, WoRlD!".toLocaleLowerCase() === "hello, world!". Actual: '+("Hello, WoRlD!".toLocaleLowerCase()) ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if ("Hello, WoRlD!".toLocaleLowerCase() !== String("hello, world!")) { - $ERROR('#2: "Hello, WoRlD!".toLocaleLowerCase() === String("hello, world!"). Actual: '+("Hello, WoRlD!".toLocaleLowerCase()) ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if ("Hello, WoRlD!".toLocaleLowerCase() === new String("hello, world!")) { - $ERROR('#3: "Hello, WoRlD!".toLocaleLowerCase() !== new String("hello, world!")'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.17_String.prototype.toLocaleLowerCase/S15.5.4.17_A6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.17_String.prototype.toLocaleLowerCase/S15.5.4.17_A6.js deleted file mode 100644 index 49329b5be..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.17_String.prototype.toLocaleLowerCase/S15.5.4.17_A6.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.17_A6; -* @section: 15.5.4.17, 13.2; -* @assertion: String.prototype.toLocaleLowerCase has not prototype property; -* @description: Checking String.prototype.toLocaleLowerCase.prototype; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (String.prototype.toLocaleLowerCase.prototype !== undefined) { - $ERROR('#1: String.prototype.toLocaleLowerCase.prototype === undefined. Actual: '+String.prototype.toLocaleLowerCase.prototype ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.17_String.prototype.toLocaleLowerCase/S15.5.4.17_A7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.17_String.prototype.toLocaleLowerCase/S15.5.4.17_A7.js deleted file mode 100644 index a667adccd..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.17_String.prototype.toLocaleLowerCase/S15.5.4.17_A7.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.17_A7; -* @section: 15.5.4.17, 13.2; -* @assertion: String.prototype.toLocaleLowerCase can't be used as constructor; -* @description: Checking if creating the String.prototype.toLocaleLowerCase object fails; -*/ - -__FACTORY = String.prototype.toLocaleLowerCase; - -try { - __instance = new __FACTORY; - $FAIL('#1: __FACTORY = String.prototype.toLocaleLowerCase; "__instance = new __FACTORY" lead to throwing exception'); -} catch (e) { - $PRINT(e); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.17_String.prototype.toLocaleLowerCase/S15.5.4.17_A8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.17_String.prototype.toLocaleLowerCase/S15.5.4.17_A8.js deleted file mode 100644 index 38b946b9b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.17_String.prototype.toLocaleLowerCase/S15.5.4.17_A8.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.17_A8; -* @section: 15.5.4.17; -* @assertion: The String.prototype.toLocaleLowerCase.length property has the attribute DontEnum; -* @description: Checking if enumerating the String.prototype.toLocaleLowerCase.length property fails; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#0 -if (!(String.prototype.toLocaleLowerCase.hasOwnProperty('length'))) { - $FAIL('#0: String.prototype.toLocaleLowerCase.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.toLocaleLowerCase.hasOwnProperty('length')); -} -// -////////////////////////////////////////////////////////////////////////////// - - -////////////////////////////////////////////////////////////////////////////// -// CHECK#1 -if (String.prototype.toLocaleLowerCase.propertyIsEnumerable('length')) { - $ERROR('#1: String.prototype.toLocaleLowerCase.propertyIsEnumerable(\'length\') return false'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -// CHECK#2 -count=0; - -for (p in String.prototype.toLocaleLowerCase){ - if (p==="length") count++; -} - -if (count !== 0) { - $ERROR('#2: count=0; for (p in String.prototype.toLocaleLowerCase){if (p==="length") count++;}; count === 0. Actual: '+count ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.17_String.prototype.toLocaleLowerCase/S15.5.4.17_A9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.17_String.prototype.toLocaleLowerCase/S15.5.4.17_A9.js deleted file mode 100644 index 24c16625a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.17_String.prototype.toLocaleLowerCase/S15.5.4.17_A9.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.17_A9; -* @section: 15.5.4.17; -* @assertion: The String.prototype.toLocaleLowerCase.length property has the attribute DontDelete; -* @description: Checking if deleting the String.prototype.toLocaleLowerCase.length property fails; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#0 -if (!(String.prototype.toLocaleLowerCase.hasOwnProperty('length'))) { - $FAIL('#0: String.prototype.toLocaleLowerCase.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.toLocaleLowerCase.hasOwnProperty('length')); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (delete String.prototype.toLocaleLowerCase.length) { - $ERROR('#1: delete String.prototype.toLocaleLowerCase.length return false'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (!(String.prototype.toLocaleLowerCase.hasOwnProperty('length'))) { - $FAIL('#2: delete String.prototype.toLocaleLowerCase.length; String.prototype.toLocaleLowerCase.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.toLocaleLowerCase.hasOwnProperty('length')); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.18_String.prototype.toUpperCase/S15.5.4.18_A10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.18_String.prototype.toUpperCase/S15.5.4.18_A10.js deleted file mode 100644 index cfe0cee74..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.18_String.prototype.toUpperCase/S15.5.4.18_A10.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.18_A10; -* @section: 15.5.4.18; -* @assertion: The String.prototype.toUpperCase.length property has the attribute ReadOnly; -* @description: Checking if varying the String.prototype.toUpperCase.length property fails; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!(String.prototype.toUpperCase.hasOwnProperty('length'))) { - $FAIL('#1: String.prototype.toUpperCase.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.toUpperCase.hasOwnProperty('length')); -} -// -////////////////////////////////////////////////////////////////////////////// - -__obj = String.prototype.toUpperCase.length; - -String.prototype.toUpperCase.length = function(){return "shifted";}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (String.prototype.toUpperCase.length !== __obj) { - $ERROR('#2: __obj = String.prototype.toUpperCase.length; String.prototype.toUpperCase.length = function(){return "shifted";}; String.prototype.toUpperCase.length === __obj. Actual: '+String.prototype.toUpperCase.length ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.18_String.prototype.toUpperCase/S15.5.4.18_A11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.18_String.prototype.toUpperCase/S15.5.4.18_A11.js deleted file mode 100644 index 3b1bbf2e9..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.18_String.prototype.toUpperCase/S15.5.4.18_A11.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.18_A11; -* @section: 15.5.4.18; -* @assertion: The length property of the toUpperCase method is 0; -* @description: Checking String.prototype.toUpperCase.length; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!(String.prototype.toUpperCase.hasOwnProperty("length"))) { - $ERROR('#1: String.prototype.toUpperCase.hasOwnProperty("length") return true. Actual: '+String.prototype.toUpperCase.hasOwnProperty("length")); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (String.prototype.toUpperCase.length !== 0) { - $ERROR('#2: String.prototype.toUpperCase.length === 0. Actual: '+String.prototype.toUpperCase.length ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.18_String.prototype.toUpperCase/S15.5.4.18_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.18_String.prototype.toUpperCase/S15.5.4.18_A1_T1.js deleted file mode 100644 index 3164500fe..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.18_String.prototype.toUpperCase/S15.5.4.18_A1_T1.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.18_A1_T1; -* @section: 15.5.4.18; -* @assertion: String.prototype.toUpperCase(); -* @description: Arguments is true, and instance is object; -*/ - -__instance = new Object(true); - -__instance.toUpperCase = String.prototype.toUpperCase; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__instance.toUpperCase() !== "TRUE") { - $ERROR('#1: __instance = new Object(true); __instance.toUpperCase = String.prototype.toUpperCase; __instance.toUpperCase() === "TRUE". Actual: '+__instance.toUpperCase() ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.18_String.prototype.toUpperCase/S15.5.4.18_A1_T10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.18_String.prototype.toUpperCase/S15.5.4.18_A1_T10.js deleted file mode 100644 index 58004833a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.18_String.prototype.toUpperCase/S15.5.4.18_A1_T10.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.18_A1_T10; -* @section: 15.5.4.18; -* @assertion: String.prototype.toUpperCase(); -* @description: Call toUpperCase() function of object with overrode toString function; -*/ - -var __obj = {toString:function(){return "\u0041b";}} -__obj.toUpperCase = String.prototype.toUpperCase; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__obj.toUpperCase() !=="AB") { - $ERROR('#1: var __obj = {toString:function(){return "\u0041b";}}; __obj.toUpperCase = String.prototype.toUpperCase; __obj.toUpperCase() ==="AB". Actual: '+__obj.toUpperCase() ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.18_String.prototype.toUpperCase/S15.5.4.18_A1_T11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.18_String.prototype.toUpperCase/S15.5.4.18_A1_T11.js deleted file mode 100644 index e4e09df11..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.18_String.prototype.toUpperCase/S15.5.4.18_A1_T11.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.18_A1_T11; -* @section: 15.5.4.18; -* @assertion: String.prototype.toUpperCase(); -* @description: Override toString function, toString throw exception, then call toUpperCase() function for this object; -*/ - -var __obj = {toString:function(){throw "intostr";}} -__obj.toUpperCase = String.prototype.toUpperCase; -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try { - var x = __obj.toUpperCase(); - $FAIL('#1: "var x = __obj.toUpperCase()" lead to throwing exception'); -} catch (e) { - if (e!=="intostr") { - $ERROR('#1.1: Exception === "intostr". Actual: '+e); - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.18_String.prototype.toUpperCase/S15.5.4.18_A1_T12.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.18_String.prototype.toUpperCase/S15.5.4.18_A1_T12.js deleted file mode 100644 index 7f569f52f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.18_String.prototype.toUpperCase/S15.5.4.18_A1_T12.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.18_A1_T12; -* @section: 15.5.4.18; -* @assertion: String.prototype.toUpperCase(); -* @description: Override toString and valueOf functions, valueOf throw exception, then call toUpperCase() function for this object; -*/ - -var __obj = {toString:function(){return {};},valueOf:function(){throw "intostr";}} -__obj.toUpperCase = String.prototype.toUpperCase; -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try { - var x = __obj.toUpperCase(); - $FAIL('#1: "var x = __obj.toUpperCase()" lead to throwing exception'); -} catch (e) { - if (e!=="intostr") { - $ERROR('#1.1: Exception === "intostr". Actual: '+e); - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.18_String.prototype.toUpperCase/S15.5.4.18_A1_T13.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.18_String.prototype.toUpperCase/S15.5.4.18_A1_T13.js deleted file mode 100644 index cec4782ca..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.18_String.prototype.toUpperCase/S15.5.4.18_A1_T13.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.18_A1_T13; -* @section: 15.5.4.18; -* @assertion: String.prototype.toUpperCase(); -* @description: Override toString and valueOf functions, then call toUpperCase() function for this object; -*/ - -var __obj = {toString:function(){return {};},valueOf:function(){return 1;}} -__obj.toUpperCase = String.prototype.toUpperCase; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__obj.toUpperCase() !=="1") { - $ERROR('#1: var __obj = {toString:function(){return {};},valueOf:function(){return 1;}}; __obj.toUpperCase = String.prototype.toUpperCase; __obj.toUpperCase() ==="1". Actual: '+__obj.toUpperCase() ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__obj.toUpperCase().length !== 1) { - $ERROR('#2: var __obj = {toString:function(){return {};},valueOf:function(){return 1;}}; __obj.toUpperCase = String.prototype.toUpperCase; __obj.toUpperCase().length === 1. Actual: '+__obj.toUpperCase().length ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.18_String.prototype.toUpperCase/S15.5.4.18_A1_T14.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.18_String.prototype.toUpperCase/S15.5.4.18_A1_T14.js deleted file mode 100644 index 91d259a7f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.18_String.prototype.toUpperCase/S15.5.4.18_A1_T14.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.18_A1_T14; -* @section: 15.5.4.18; -* @assertion: String.prototype.toUpperCase(); -* @description: Call toUpperCase() function of RegExp object; -*/ - -var __reg = new RegExp("abc"); -__reg.toUpperCase = String.prototype.toUpperCase; -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__reg.toUpperCase() !== "/ABC/") { - $ERROR('#1: var __reg = new RegExp("abc"); __reg.toUpperCase = String.prototype.toUpperCase; __reg.toUpperCase() === "/ABC/". Actual: '+__reg.toUpperCase() ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.18_String.prototype.toUpperCase/S15.5.4.18_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.18_String.prototype.toUpperCase/S15.5.4.18_A1_T2.js deleted file mode 100644 index 1185af0ec..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.18_String.prototype.toUpperCase/S15.5.4.18_A1_T2.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.18_A1_T2; -* @section: 15.5.4.18; -* @assertion: String.prototype.toUpperCase(); -* @description: Instance is Boolean object; -*/ - -__instance = new Boolean; - -__instance.toUpperCase = String.prototype.toUpperCase; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__instance.toUpperCase() !== "FALSE") { - $ERROR('#1: __instance = new Boolean; __instance.toUpperCase = String.prototype.toUpperCase; __instance.toUpperCase() === "FALSE". Actual: '+__instance.toUpperCase() ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.18_String.prototype.toUpperCase/S15.5.4.18_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.18_String.prototype.toUpperCase/S15.5.4.18_A1_T3.js deleted file mode 100644 index 48c1d1242..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.18_String.prototype.toUpperCase/S15.5.4.18_A1_T3.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.18_A1_T3; -* @section: 15.5.4.18; -* @assertion: String.prototype.toUpperCase(); -* @description: Checking by using eval; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (eval("\"bj\"").toUpperCase() !== "BJ") { - $ERROR('#1: eval("\\"bj\\"").toUpperCase() === "BJ". Actual: '+eval("\"bj\"").toUpperCase() ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.18_String.prototype.toUpperCase/S15.5.4.18_A1_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.18_String.prototype.toUpperCase/S15.5.4.18_A1_T4.js deleted file mode 100644 index 0d3939d44..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.18_String.prototype.toUpperCase/S15.5.4.18_A1_T4.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.18_A1_T4; -* @section: 15.5.4.18; -* @assertion: String.prototype.toUpperCase(); -* @description: Call toUpperCase() function without arguments of string and from empty string; -*/ - -__lowerCase = "".toUpperCase(); - -__expected = ""; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__lowerCase.length !== __expected.length) { - $ERROR('#1: __lowerCase = "".toUpperCase(); __expected = ""; __lowerCase.length === __expected.length. Actual: '+__lowerCase.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__lowerCase.index !== __expected.index) { - $ERROR('#2: __lowerCase = "".toUpperCase(); __expected = ""; __lowerCase.index === __expected.index. Actual: '+__lowerCase.index ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__lowerCase.input !== __expected.input) { - $ERROR('#3: __lowerCase = "".toUpperCase(); __expected = ""; __lowerCase.input === __expected.input. Actual: '+__lowerCase.input ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (__lowerCase[0]!==__expected[0]) { - $ERROR('#4: __lowerCase = "".toUpperCase(); __expected = ""; __lowerCase[0]==='+__expected[0]+'. Actual: '+__lowerCase[0]); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.18_String.prototype.toUpperCase/S15.5.4.18_A1_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.18_String.prototype.toUpperCase/S15.5.4.18_A1_T5.js deleted file mode 100644 index 9689a2c2e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.18_String.prototype.toUpperCase/S15.5.4.18_A1_T5.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.18_A1_T5; -* @section: 15.5.4.18; -* @assertion: String.prototype.toUpperCase(); -* @description: Call toUpperCase() function of function call; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -//since ToString(null) evaluates to "null" match(null) evaluates to match("null") -if (function(){return "GnulLuNa"}().toUpperCase() !== "GNULLUNA") { - $ERROR('#1: function(){return "GnulLuNa"}().toUpperCase() === "GNULLUNA". Actual: '+function(){return "GnulLuNa"}().toUpperCase() ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.18_String.prototype.toUpperCase/S15.5.4.18_A1_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.18_String.prototype.toUpperCase/S15.5.4.18_A1_T6.js deleted file mode 100644 index 28d8a0212..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.18_String.prototype.toUpperCase/S15.5.4.18_A1_T6.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.18_A1_T6; -* @section: 15.5.4.18; -* @assertion: String.prototype.toUpperCase(); -* @description: Call toUpperCase() function of Number.NEGATIVE_INFINITY; -*/ - -Number.prototype.toUpperCase = String.prototype.toUpperCase; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if ((Number.NEGATIVE_INFINITY).toUpperCase() !== "-INFINITY") { - $ERROR('#1: Number.prototype.toUpperCase = String.prototype.toUpperCase; (Number.NEGATIVE_INFINITY).toUpperCase() === "-INFINITY". Actual: '+(Number.NEGATIVE_INFINITY).toUpperCase() ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.18_String.prototype.toUpperCase/S15.5.4.18_A1_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.18_String.prototype.toUpperCase/S15.5.4.18_A1_T7.js deleted file mode 100644 index 868301dbe..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.18_String.prototype.toUpperCase/S15.5.4.18_A1_T7.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.18_A1_T7; -* @section: 15.5.4.18; -* @assertion: String.prototype.toUpperCase(); -* @description: Call toUpperCase() function of NaN; -*/ - -Number.prototype.toUpperCase = String.prototype.toUpperCase; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (NaN.toUpperCase()!== "NAN") { - $ERROR('#1: Number.prototype.toUpperCase = String.prototype.toUpperCase; NaN.toUpperCase()=== "NAN". Actual: '+NaN.toUpperCase()); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.18_String.prototype.toUpperCase/S15.5.4.18_A1_T8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.18_String.prototype.toUpperCase/S15.5.4.18_A1_T8.js deleted file mode 100644 index 277f8184f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.18_String.prototype.toUpperCase/S15.5.4.18_A1_T8.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.18_A1_T8; -* @section: 15.5.4.18; -* @assertion: String.prototype.toUpperCase(); -* @description: Call toUpperCase() function of Infinity; -* -*/ - -Number.prototype.toUpperCase = String.prototype.toUpperCase; - -if (Infinity.toUpperCase()!== "INFINITY") { - $ERROR('#1: Number.prototype.toUpperCase = String.prototype.toUpperCase; Infinity.toUpperCase()=== "INFINITY". Actual: '+Infinity.toUpperCase()); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.18_String.prototype.toUpperCase/S15.5.4.18_A1_T9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.18_String.prototype.toUpperCase/S15.5.4.18_A1_T9.js deleted file mode 100644 index 3713533f6..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.18_String.prototype.toUpperCase/S15.5.4.18_A1_T9.js +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.18_A1_T9; -* @section: 15.5.4.18; -* @assertion: String.prototype.toUpperCase(); -* @description: Call toUpperCase() function of string object; -*/ - -__obj = { - valueOf:function(){}, - toString:void 0 -}; - -__upperCase = new String(__obj).toUpperCase(); - -__expected ="UNDEFINED"; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__upperCase.length !== __expected.length) { - $ERROR('#1: __obj = {valueOf:function(){}, toString:void 0}; __upperCase = new String(__obj).toUpperCase(); __expected ="UNDEFINED"; __upperCase.length === __expected.length. Actual: '+__upperCase.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__upperCase.index !== __expected.index) { - $ERROR('#2: __obj = {valueOf:function(){}, toString:void 0}; __upperCase = new String(__obj).toUpperCase(); __expected ="UNDEFINED"; __upperCase.index === __expected.index. Actual: '+__upperCase.index ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__upperCase.input !== __expected.input) { - $ERROR('#3: __obj = {valueOf:function(){}, toString:void 0}; __upperCase = new String(__obj).toUpperCase(); __expected ="UNDEFINED"; __upperCase.input === __expected.input. Actual: '+__upperCase.input ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__upperCase[index]!==__expected[index]) { - $ERROR('#4.'+index+': __obj = {valueOf:function(){}, toString:void 0}; __upperCase = new String(__obj).toUpperCase(); __expected ="UNDEFINED"; __upperCase['+index+']==='+__expected[index]+'. Actual: '+__upperCase[index]); - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.18_String.prototype.toUpperCase/S15.5.4.18_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.18_String.prototype.toUpperCase/S15.5.4.18_A2_T1.js deleted file mode 100644 index 3ac25001b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.18_String.prototype.toUpperCase/S15.5.4.18_A2_T1.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.18_A2_T1; -* @section: 15.5.4.18; -* @assertion: String.prototype.toUpperCase() return a string, but not a String object; -* @description: Checking returned result; -*/ - - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if ("Hello, WoRlD!".toUpperCase() !== "HELLO, WORLD!") { - $ERROR('#1: "Hello, WoRlD!".toUpperCase() === "HELLO, WORLD!". Actual: '+("Hello, WoRlD!".toUpperCase()) ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if ("Hello, WoRlD!".toUpperCase() !== String("HELLO, WORLD!")) { - $ERROR('#2: "Hello, WoRlD!".toUpperCase() === String("HELLO, WORLD!"). Actual: '+("Hello, WoRlD!".toUpperCase()) ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if ("Hello, WoRlD!".toUpperCase() ===new String("HELLO, WORLD!")) { - $ERROR('#3: "Hello, WoRlD!".toUpperCase() !== new String("HELLO, WORLD!")'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.18_String.prototype.toUpperCase/S15.5.4.18_A6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.18_String.prototype.toUpperCase/S15.5.4.18_A6.js deleted file mode 100644 index c0bea8f32..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.18_String.prototype.toUpperCase/S15.5.4.18_A6.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.18_A6; -* @section: 15.5.4.18, 13.2; -* @assertion: String.prototype.toUpperCase has not prototype property; -* @description: Checking String.prototype.toUpperCase.prototype; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (String.prototype.toUpperCase.prototype !== undefined) { - $ERROR('#1: String.prototype.toUpperCase.prototype === undefined. Actual: '+String.prototype.toUpperCase.prototype ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.18_String.prototype.toUpperCase/S15.5.4.18_A7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.18_String.prototype.toUpperCase/S15.5.4.18_A7.js deleted file mode 100644 index b9039ab74..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.18_String.prototype.toUpperCase/S15.5.4.18_A7.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.18_A7; -* @section: 15.5.4.18, 13.2; -* @assertion: String.prototype.toUpperCase can't be used as constructor; -* @description: Checking if creating the String.prototype.toUpperCase object fails; -*/ - -__FACTORY = String.prototype.toUpperCase; - -try { - __instance = new __FACTORY; - $FAIL('#1: __FACTORY = String.prototype.toUpperCase; "__instance = new __FACTORY" lead to throwing exception'); -} catch (e) {} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.18_String.prototype.toUpperCase/S15.5.4.18_A8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.18_String.prototype.toUpperCase/S15.5.4.18_A8.js deleted file mode 100644 index 9afdedb3b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.18_String.prototype.toUpperCase/S15.5.4.18_A8.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.18_A8; -* @section: 15.5.4.18; -* @assertion: The String.prototype.toUpperCase.length property has the attribute DontEnum; -* @description: Checking if enumerating the String.prototype.toUpperCase.length property fails; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#0 -if (!(String.prototype.toUpperCase.hasOwnProperty('length'))) { - $FAIL('#0: String.prototype.toUpperCase.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.toUpperCase.hasOwnProperty('length')); -} -// -////////////////////////////////////////////////////////////////////////////// - - -////////////////////////////////////////////////////////////////////////////// -// CHECK#1 -if (String.prototype.toUpperCase.propertyIsEnumerable('length')) { - $ERROR('#1: String.prototype.toUpperCase.propertyIsEnumerable(\'length\') return false'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -// CHECK#2 -count=0; - -for (p in String.prototype.toUpperCase){ - if (p==="length") count++; -} - -if (count !== 0) { - $ERROR('#2: count=0; for (p in String.prototype.toUpperCase){if (p==="length") count++;}; count === 0. Actual: '+count ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.18_String.prototype.toUpperCase/S15.5.4.18_A9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.18_String.prototype.toUpperCase/S15.5.4.18_A9.js deleted file mode 100644 index a1ae49b0c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.18_String.prototype.toUpperCase/S15.5.4.18_A9.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.18_A9; -* @section: 15.5.4.18; -* @assertion: The String.prototype.toUpperCase.length property has the attribute DontDelete; -* @description: Checking if deleting the String.prototype.toUpperCase.length property fails; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#0 -if (!(String.prototype.toUpperCase.hasOwnProperty('length'))) { - $FAIL('#0: String.prototype.toUpperCase.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.toUpperCase.hasOwnProperty('length')); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (delete String.prototype.toUpperCase.length) { - $ERROR('#1: delete String.prototype.toUpperCase.length return false'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (!(String.prototype.toUpperCase.hasOwnProperty('length'))) { - $FAIL('#2: delete String.prototype.toUpperCase.length; String.prototype.toUpperCase.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.toUpperCase.hasOwnProperty('length')); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.19_String.prototype.toLocaleUpperCase/S15.5.4.19_A10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.19_String.prototype.toLocaleUpperCase/S15.5.4.19_A10.js deleted file mode 100644 index 5a2840c2f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.19_String.prototype.toLocaleUpperCase/S15.5.4.19_A10.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.19_A10; -* @section: 15.5.4.19; -* @assertion: The String.prototype.toLocaleUpperCase.length property has the attribute ReadOnly; -* @description: Checking if varying the String.prototype.toLocaleUpperCase.length property fails; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!(String.prototype.toLocaleUpperCase.hasOwnProperty('length'))) { - $FAIL('#1: String.prototype.toLocaleUpperCase.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.toLocaleUpperCase.hasOwnProperty('length')); -} -// -////////////////////////////////////////////////////////////////////////////// - -__obj = String.prototype.toLocaleUpperCase.length; - -String.prototype.toLocaleUpperCase.length = function(){return "shifted";}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (String.prototype.toLocaleUpperCase.length !== __obj) { - $ERROR('#2: __obj = String.prototype.toLocaleUpperCase.length; String.prototype.toLocaleUpperCase.length = function(){return "shifted";}; String.prototype.toLocaleUpperCase.length === __obj. Actual: '+String.prototype.toLocaleUpperCase.length ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.19_String.prototype.toLocaleUpperCase/S15.5.4.19_A11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.19_String.prototype.toLocaleUpperCase/S15.5.4.19_A11.js deleted file mode 100644 index 692c99e21..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.19_String.prototype.toLocaleUpperCase/S15.5.4.19_A11.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.19_A11; -* @section: 15.5.4.19; -* @assertion: The length property of the toLocaleUpperCase method is 0; -* @description: Checking String.prototype.toLocaleUpperCase.length; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!(String.prototype.toLocaleUpperCase.hasOwnProperty("length"))) { - $ERROR('#1: String.prototype.toLocaleUpperCase.hasOwnProperty("length") return true. Actual: '+String.prototype.toLocaleUpperCase.hasOwnProperty("length")); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (String.prototype.toLocaleUpperCase.length !== 0) { - $ERROR('#2: String.prototype.toLocaleUpperCase.length === 0. Actual: '+String.prototype.toLocaleUpperCase.length ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.19_String.prototype.toLocaleUpperCase/S15.5.4.19_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.19_String.prototype.toLocaleUpperCase/S15.5.4.19_A1_T1.js deleted file mode 100644 index 13a7d0132..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.19_String.prototype.toLocaleUpperCase/S15.5.4.19_A1_T1.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.19_A1_T1; -* @section: 15.5.4.19; -* @assertion: String.prototype.toLocaleUpperCase(); -* @description: Arguments is true, and instance is object; -*/ - -__instance = new Object(true); - -__instance.toLocaleUpperCase = String.prototype.toLocaleUpperCase; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__instance.toLocaleUpperCase() !== "TRUE") { - $ERROR('#1: __instance = new Object(true); __instance.toLocaleUpperCase = String.prototype.toLocaleUpperCase; __instance.toLocaleUpperCase() === "TRUE". Actual: '+__instance.toLocaleUpperCase() ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.19_String.prototype.toLocaleUpperCase/S15.5.4.19_A1_T10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.19_String.prototype.toLocaleUpperCase/S15.5.4.19_A1_T10.js deleted file mode 100644 index b3d14cd71..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.19_String.prototype.toLocaleUpperCase/S15.5.4.19_A1_T10.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.19_A1_T10; -* @section: 15.5.4.19; -* @assertion: String.prototype.toLocaleUpperCase(); -* @description: Call toLocaleUpperCase() function of object with overrode toString function; -*/ - -var __obj = {toString:function(){return "\u0041b";}} -__obj.toLocaleUpperCase = String.prototype.toLocaleUpperCase; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__obj.toLocaleUpperCase() !=="AB") { - $ERROR('#1: var __obj = {toString:function(){return "\u0041b";}}; __obj.toLocaleUpperCase = String.prototype.toLocaleUpperCase; __obj.toLocaleUpperCase() ==="AB". Actual: '+__obj.toLocaleUpperCase() ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.19_String.prototype.toLocaleUpperCase/S15.5.4.19_A1_T11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.19_String.prototype.toLocaleUpperCase/S15.5.4.19_A1_T11.js deleted file mode 100644 index 78f015f77..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.19_String.prototype.toLocaleUpperCase/S15.5.4.19_A1_T11.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.19_A1_T11; -* @section: 15.5.4.19; -* @assertion: String.prototype.toLocaleUpperCase(); -* @description: Override toString function, toString throw exception, then call toLocaleUpperCase() function for this object; -*/ - -var __obj = {toString:function(){throw "intostr";}} -__obj.toLocaleUpperCase = String.prototype.toLocaleUpperCase; -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try { - var x = __obj.toLocaleUpperCase(); - $FAIL('#1: "var x = __obj.toLocaleUpperCase()" lead to throwing exception'); -} catch (e) { - if (e!=="intostr") { - $ERROR('#1.1: Exception === "intostr". Actual: '+e); - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.19_String.prototype.toLocaleUpperCase/S15.5.4.19_A1_T12.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.19_String.prototype.toLocaleUpperCase/S15.5.4.19_A1_T12.js deleted file mode 100644 index 964182e18..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.19_String.prototype.toLocaleUpperCase/S15.5.4.19_A1_T12.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.19_A1_T12; -* @section: 15.5.4.19; -* @assertion: String.prototype.toLocaleUpperCase(); -* @description: Override toString and valueOf functions, valueOf throw exception, then call toLocaleUpperCase() function for this object; -*/ - -var __obj = {toString:function(){return {};},valueOf:function(){throw "intostr";}} -__obj.toLocaleUpperCase = String.prototype.toLocaleUpperCase; -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try { - var x = __obj.toLocaleUpperCase(); - $FAIL('#1: "var x = __obj.toLocaleUpperCase()" lead to throwing exception'); -} catch (e) { - if (e!=="intostr") { - $ERROR('#1.1: Exception === "intostr". Actual: '+e); - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.19_String.prototype.toLocaleUpperCase/S15.5.4.19_A1_T13.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.19_String.prototype.toLocaleUpperCase/S15.5.4.19_A1_T13.js deleted file mode 100644 index dd9a0a28f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.19_String.prototype.toLocaleUpperCase/S15.5.4.19_A1_T13.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.19_A1_T13; -* @section: 15.5.4.19; -* @assertion: String.prototype.toLocaleUpperCase(); -* @description: Override toString and valueOf functions, then call toLocaleUpperCase() function for this object; -*/ - -var __obj = {toString:function(){return {};},valueOf:function(){return 1;}} -__obj.toLocaleUpperCase = String.prototype.toLocaleUpperCase; -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__obj.toLocaleUpperCase() !=="1") { - $ERROR('#1: var __obj = {toString:function(){return {};},valueOf:function(){return 1;}}; __obj.toLocaleUpperCase = String.prototype.toLocaleUpperCase; __obj.toLocaleUpperCase() ==="1". Actual: '+__obj.toLocaleUpperCase() ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__obj.toLocaleUpperCase().length !== 1) { - $ERROR('#2: var __obj = {toString:function(){return {};},valueOf:function(){return 1;}}; __obj.toLocaleUpperCase = String.prototype.toLocaleUpperCase; __obj.toLocaleUpperCase().length === 1. Actual: '+__obj.toLocaleUpperCase().length ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.19_String.prototype.toLocaleUpperCase/S15.5.4.19_A1_T14.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.19_String.prototype.toLocaleUpperCase/S15.5.4.19_A1_T14.js deleted file mode 100644 index 75499010f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.19_String.prototype.toLocaleUpperCase/S15.5.4.19_A1_T14.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.19_A1_T14; -* @section: 15.5.4.19; -* @assertion: String.prototype.toLocaleUpperCase(); -* @description: Call toLocaleUpperCase() function for RegExp object; -*/ - -var __reg = new RegExp("abc"); -__reg.toLocaleUpperCase = String.prototype.toLocaleUpperCase; -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__reg.toLocaleUpperCase() !== "/ABC/") { - $ERROR('#1: var __reg = new RegExp("abc"); __reg.toLocaleUpperCase = String.prototype.toLocaleUpperCase; __reg.toLocaleUpperCase() === "/ABC/". Actual: '+__reg.toLocaleUpperCase() ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.19_String.prototype.toLocaleUpperCase/S15.5.4.19_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.19_String.prototype.toLocaleUpperCase/S15.5.4.19_A1_T2.js deleted file mode 100644 index 1518a1da3..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.19_String.prototype.toLocaleUpperCase/S15.5.4.19_A1_T2.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.19_A1_T2; -* @section: 15.5.4.19; -* @assertion: String.prototype.toLocaleUpperCase(); -* @description: Instance is Boolean object; -*/ - -__instance = new Boolean; - -__instance.toLocaleUpperCase = String.prototype.toLocaleUpperCase; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__instance.toLocaleUpperCase() !== "FALSE") { - $ERROR('#1: __instance = new Boolean; __instance.toLocaleUpperCase = String.prototype.toLocaleUpperCase; __instance.toLocaleUpperCase() === "FALSE". Actual: '+__instance.toLocaleUpperCase() ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.19_String.prototype.toLocaleUpperCase/S15.5.4.19_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.19_String.prototype.toLocaleUpperCase/S15.5.4.19_A1_T3.js deleted file mode 100644 index c34e44546..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.19_String.prototype.toLocaleUpperCase/S15.5.4.19_A1_T3.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.19_A1_T3; -* @section: 15.5.4.19; -* @assertion: String.prototype.toLocaleUpperCase(); -* @description: Checking by using eval; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (eval("\"bj\"").toLocaleUpperCase() !== "BJ") { - $ERROR('#1: eval("\\"bj\\"").toLocaleUpperCase() === "BJ". Actual: '+eval("\"bj\"").toLocaleUpperCase() ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.19_String.prototype.toLocaleUpperCase/S15.5.4.19_A1_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.19_String.prototype.toLocaleUpperCase/S15.5.4.19_A1_T4.js deleted file mode 100644 index c76b8d309..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.19_String.prototype.toLocaleUpperCase/S15.5.4.19_A1_T4.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.19_A1_T4; -* @section: 15.5.4.19; -* @assertion: String.prototype.toLocaleUpperCase(); -* @description: Call toLocaleUpperCase() function without arguments of string and from empty string; -*/ - -__lowerCase = "".toLocaleUpperCase(); - -__expected = ""; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__lowerCase.length !== __expected.length) { - $ERROR('#1: __lowerCase = "".toLocaleUpperCase(); __expected = ""; __lowerCase.length === __expected.length. Actual: '+__lowerCase.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__lowerCase.index !== __expected.index) { - $ERROR('#2: __lowerCase = "".toLocaleUpperCase(); __expected = ""; __lowerCase.index === __expected.index. Actual: '+__lowerCase.index ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__lowerCase.input !== __expected.input) { - $ERROR('#3: __lowerCase = "".toLocaleUpperCase(); __expected = ""; __lowerCase.input === __expected.input. Actual: '+__lowerCase.input ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (__lowerCase[0]!==__expected[0]) { - $ERROR('#4: __lowerCase = "".toLocaleUpperCase(); __lowerCase[0]==='+__expected[0]+'. Actual: '+__lowerCase[0]); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.19_String.prototype.toLocaleUpperCase/S15.5.4.19_A1_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.19_String.prototype.toLocaleUpperCase/S15.5.4.19_A1_T5.js deleted file mode 100644 index 344668545..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.19_String.prototype.toLocaleUpperCase/S15.5.4.19_A1_T5.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.19_A1_T5; -* @section: 15.5.4.19; -* @assertion: String.prototype.toLocaleUpperCase(); -* @description: Call toLocaleUpperCase() function of function call; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -//since ToString(null) evaluates to "null" match(null) evaluates to match("null") -if (function(){return "GnulLuNa"}().toLocaleUpperCase() !== "GNULLUNA") { - $ERROR('#1: function(){return "GnulLuNa"}().toLocaleUpperCase() === "GNULLUNA". Actual: '+function(){return "GnulLuNa"}().toLocaleUpperCase() ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.19_String.prototype.toLocaleUpperCase/S15.5.4.19_A1_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.19_String.prototype.toLocaleUpperCase/S15.5.4.19_A1_T6.js deleted file mode 100644 index 4718a90d3..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.19_String.prototype.toLocaleUpperCase/S15.5.4.19_A1_T6.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.19_A1_T6; -* @section: 15.5.4.19; -* @assertion: String.prototype.toLocaleUpperCase(); -* @description: Call toLocaleUpperCase() function of Number.NEGATIVE_INFINITY; -*/ - -Number.prototype.toLocaleUpperCase = String.prototype.toLocaleUpperCase; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if ((Number.NEGATIVE_INFINITY).toLocaleUpperCase() !== "-INFINITY") { - $ERROR('#1: Number.prototype.toLocaleUpperCase = String.prototype.toLocaleUpperCase; (Number.NEGATIVE_INFINITY).toLocaleUpperCase() === "-INFINITY". Actual: '+(Number.NEGATIVE_INFINITY).toLocaleUpperCase() ); -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.19_String.prototype.toLocaleUpperCase/S15.5.4.19_A1_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.19_String.prototype.toLocaleUpperCase/S15.5.4.19_A1_T7.js deleted file mode 100644 index f636a51f9..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.19_String.prototype.toLocaleUpperCase/S15.5.4.19_A1_T7.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.19_A1_T7; -* @section: 15.5.4.19; -* @assertion: String.prototype.toLocaleUpperCase(); -* @description: Call toLocaleUpperCase() function of NaN; -*/ - -Number.prototype.toLocaleUpperCase = String.prototype.toLocaleUpperCase; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (NaN.toLocaleUpperCase()!== "NAN") { - $ERROR('#1: Number.prototype.toLocaleUpperCase = String.prototype.toLocaleUpperCase; NaN.toLocaleUpperCase()=== "NAN". Actual: '+NaN.toLocaleUpperCase()); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.19_String.prototype.toLocaleUpperCase/S15.5.4.19_A1_T8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.19_String.prototype.toLocaleUpperCase/S15.5.4.19_A1_T8.js deleted file mode 100644 index 697eb15ec..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.19_String.prototype.toLocaleUpperCase/S15.5.4.19_A1_T8.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.19_A1_T8; -* @section: 15.5.4.19; -* @assertion: String.prototype.toLocaleUpperCase(); -* @description: Call toLocaleUpperCase() function of Infinity; -*/ - -Number.prototype.toLocaleUpperCase = String.prototype.toLocaleUpperCase; - -if (Infinity.toLocaleUpperCase()!== "INFINITY") { - $ERROR('#1: Number.prototype.toLocaleUpperCase = String.prototype.toLocaleUpperCase; Infinity.toLocaleUpperCase()=== "INFINITY". Actual: '+Infinity.toLocaleUpperCase()); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.19_String.prototype.toLocaleUpperCase/S15.5.4.19_A1_T9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.19_String.prototype.toLocaleUpperCase/S15.5.4.19_A1_T9.js deleted file mode 100644 index e85771530..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.19_String.prototype.toLocaleUpperCase/S15.5.4.19_A1_T9.js +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.19_A1_T9; -* @section: 15.5.4.19; -* @assertion: String.prototype.toLocaleUpperCase(); -* @description: Call toLocaleUpperCase() function of string object; -*/ - -__obj = { - valueOf:function(){}, - toString:void 0 -}; - -__lowerCase = new String(__obj).toLocaleUpperCase(); - -__expected ="UNDEFINED"; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__lowerCase.length !== __expected.length) { - $ERROR('#1: __obj = {valueOf:function(){}, toString:void 0}; __lowerCase = new String(__obj).toLocaleUpperCase(); __expected ="UNDEFINED"; __lowerCase.length === __expected.length. Actual: '+__lowerCase.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__lowerCase.index !== __expected.index) { - $ERROR('#2: __obj = {valueOf:function(){}, toString:void 0}; __lowerCase = new String(__obj).toLocaleUpperCase(); __expected ="UNDEFINED"; __lowerCase.index === __expected.index. Actual: '+__lowerCase.index ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__lowerCase.input !== __expected.input) { - $ERROR('#3: __obj = {valueOf:function(){}, toString:void 0}; __lowerCase = new String(__obj).toLocaleUpperCase(); __expected ="UNDEFINED"; __lowerCase.input === __expected.input. Actual: '+__lowerCase.input ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -for(var index=0; index<__expected.length; index++) { - if (__lowerCase[index]!==__expected[index]) { - $ERROR('#4.'+index+': __obj = {valueOf:function(){}, toString:void 0}; __lowerCase = new String(__obj).toLocaleUpperCase(); __expected ="UNDEFINED"; __lowerCase['+index+']==='+__expected[index]+'. Actual: '+__lowerCase[index]); - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.19_String.prototype.toLocaleUpperCase/S15.5.4.19_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.19_String.prototype.toLocaleUpperCase/S15.5.4.19_A2_T1.js deleted file mode 100644 index 80315d3c9..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.19_String.prototype.toLocaleUpperCase/S15.5.4.19_A2_T1.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.19_A2_T1; -* @section: 15.5.4.19; -* @assertion: String.prototype.toLocaleUpperCase() return a string, but not a String object; -* @description: Checking returned result; -*/ - - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if ("Hello, WoRlD!".toLocaleUpperCase() !== "HELLO, WORLD!") { - $ERROR('#1: "Hello, WoRlD!".toLocaleUpperCase() === "HELLO, WORLD!". Actual: '+("Hello, WoRlD!".toLocaleUpperCase()) ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if ("Hello, WoRlD!".toLocaleUpperCase() !== String("HELLO, WORLD!")) { - $ERROR('#2: "Hello, WoRlD!".toLocaleUpperCase() === String("HELLO, WORLD!"). Actual: '+("Hello, WoRlD!".toLocaleUpperCase()) ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if ("Hello, WoRlD!".toLocaleUpperCase() ===new String("HELLO, WORLD!")) { - $ERROR('#3: "Hello, WoRlD!".toLocaleUpperCase() !== new String("HELLO, WORLD!"'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.19_String.prototype.toLocaleUpperCase/S15.5.4.19_A6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.19_String.prototype.toLocaleUpperCase/S15.5.4.19_A6.js deleted file mode 100644 index 2baac9b39..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.19_String.prototype.toLocaleUpperCase/S15.5.4.19_A6.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.19_A6; -* @section: 15.5.4.19, 13.2; -* @assertion: String.prototype.toLocaleUpperCase has not prototype property; -* @description: Checking String.prototype.toLocaleUpperCase.prototype; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (String.prototype.toLocaleUpperCase.prototype !== undefined) { - $ERROR('#1: String.prototype.toLocaleUpperCase.prototype === undefined. Actual: '+String.prototype.toLocaleUpperCase.prototype ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.19_String.prototype.toLocaleUpperCase/S15.5.4.19_A7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.19_String.prototype.toLocaleUpperCase/S15.5.4.19_A7.js deleted file mode 100644 index fd7b28306..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.19_String.prototype.toLocaleUpperCase/S15.5.4.19_A7.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.19_A7; -* @section: 15.5.4.19, 13.2; -* @assertion: String.prototype.toLocaleUpperCase can't be used as constructor; -* @description: Checking if creating the String.prototype.toLocaleUpperCase object fails; -*/ - -__FACTORY = String.prototype.toLocaleUpperCase; - -try { - __instance = new __FACTORY; - $FAIL('#1: __FACTORY = String.prototype.toLocaleUpperCase; "__instance = new __FACTORY" lead to throwing exception'); -} catch (e) {} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.19_String.prototype.toLocaleUpperCase/S15.5.4.19_A8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.19_String.prototype.toLocaleUpperCase/S15.5.4.19_A8.js deleted file mode 100644 index ea9a08c73..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.19_String.prototype.toLocaleUpperCase/S15.5.4.19_A8.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.19_A8; -* @section: 15.5.4.19; -* @assertion: The String.prototype.toLocaleUpperCase.length property has the attribute DontEnum; -* @description: Checking if enumerating the String.prototype.toLocaleUpperCase.length property fails; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#0 -if (!(String.prototype.toLocaleUpperCase.hasOwnProperty('length'))) { - $FAIL('#0: String.prototype.toLocaleUpperCase.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.toLocaleUpperCase.hasOwnProperty('length')); -} -// -////////////////////////////////////////////////////////////////////////////// - - -////////////////////////////////////////////////////////////////////////////// -// CHECK#1 -if (String.prototype.toLocaleUpperCase.propertyIsEnumerable('length')) { - $ERROR('#1: String.prototype.toLocaleUpperCase.propertyIsEnumerable(\'length\') return false'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -// CHECK#2 -count=0; - -for (p in String.prototype.toLocaleUpperCase){ - if (p==="length") count++; -} - -if (count !== 0) { - $ERROR('#2: count=0; for (p in String.prototype.toLocaleUpperCase){if (p==="length") count++;}; count === 0. Actual: '+count ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.19_String.prototype.toLocaleUpperCase/S15.5.4.19_A9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.19_String.prototype.toLocaleUpperCase/S15.5.4.19_A9.js deleted file mode 100644 index f5eb65a2a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.19_String.prototype.toLocaleUpperCase/S15.5.4.19_A9.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.19_A9; -* @section: 15.5.4.19; -* @assertion: The String.prototype.toLocaleUpperCase.length property has the attribute DontDelete; -* @description: Checking if deleting the String.prototype.toLocaleUpperCase.length property fails; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#0 -if (!(String.prototype.toLocaleUpperCase.hasOwnProperty('length'))) { - $FAIL('#0: String.prototype.toLocaleUpperCase.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.toLocaleUpperCase.hasOwnProperty('length')); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (delete String.prototype.toLocaleUpperCase.length) { - $ERROR('#1: delete String.prototype.toLocaleUpperCase.length return false'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (!(String.prototype.toLocaleUpperCase.hasOwnProperty('length'))) { - $FAIL('#2: delete String.prototype.toLocaleUpperCase.length; String.prototype.toLocaleUpperCase.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.toLocaleUpperCase.hasOwnProperty('length')); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A1.1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A1.1.js deleted file mode 100644 index 5a9376591..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A1.1.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.4_A1.1; -* @section: 15.5.4.4, 13.2; -* @assertion: String.prototype.charAt() can accept many arguments; -* @description: Checking by using eval; -*/ - -function __FACTORY(){this.toString = function(){ return "wizard";};}; - -__FACTORY.prototype.charAt = String.prototype.charAt; - -__instance = new __FACTORY; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -with(__instance){ - if (__instance.charAt(eval("1"),true,null,{})!== "i") { - $ERROR('#1: __instance.charAt(eval("1"),true,null,{})=== "i". Actual: '+__instance.charAt(eval("1"),true,null,{})); - } -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A10.js deleted file mode 100644 index a022670ad..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A10.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.4_A10; -* @section: 15.5.4.4; -* @assertion: The String.prototype.charAt.length property has the attribute ReadOnly; -* @description: Checking if varying the String.prototype.charAt.length property fails; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!(String.prototype.charAt.hasOwnProperty('length'))) { - $ERROR('#1: String.prototype.charAt.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.charAt.hasOwnProperty('length')); -} -// -////////////////////////////////////////////////////////////////////////////// - -__obj = String.prototype.charAt.length; - -String.prototype.charAt.length = function(){return "shifted";}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (String.prototype.charAt.length !== __obj) { - $ERROR('#2: __obj = String.prototype.charAt.length; String.prototype.charAt.length = function(){return "shifted";}; String.prototype.charAt.length === __obj. Actual: '+String.prototype.charAt.length ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A11.js deleted file mode 100644 index b83a8da50..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A11.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.4_A11; -* @section: 15.5.4.4; -* @assertion: The length property of the charAt method is 1; -* @description: Checking String.prototype.charAt.length; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!(String.prototype.charAt.hasOwnProperty("length"))) { - $ERROR('#1: String.prototype.charAt.hasOwnProperty("length") return true. Actual: '+String.prototype.charAt.hasOwnProperty("length")); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (String.prototype.charAt.length !== 1) { - $ERROR('#2: String.prototype.charAt.length === 1. Actual: '+String.prototype.charAt.length ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A1_T1.js deleted file mode 100644 index e56c9d718..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A1_T1.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.4_A1_T1; -* @section: 15.5.4.4; -* @assertion: String.prototype.charAt(pos); -* @description: pos is false and true, and instance is object; -*/ - -__instance = new Object(42); - -__instance.charAt = String.prototype.charAt; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__instance.charAt(false)+__instance.charAt(true) !== "42") { - $ERROR('#1: __instance = new Object(42); __instance.charAt = String.prototype.charAt; __instance = new Object(42); __instance.charAt = String.prototype.charAt; __instance.charAt(false)+__instance.charAt(true) === "42". Actual: '+__instance.charAt(false)+__instance.charAt(true) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A1_T10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A1_T10.js deleted file mode 100644 index b5f436af0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A1_T10.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.4_A1_T10; -* @section: 15.5.4.4; -* @assertion: String.prototype.charAt(pos); -* @description: Call charAt() function with object argument; -*/ - -var __obj = {toString:function(){return 1;}} -var __str = "lego"; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -with(__str){ - if (charAt(__obj) !== "e") { - $ERROR('#1: var __obj = {toString:function(){return 1;}}; var __str = "lego"; charAt(__obj) === "e". Actual: charAt(__obj) ==='+charAt(__obj) ); - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A1_T2.js deleted file mode 100644 index 0ad79bf7d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A1_T2.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.4_A1_T2; -* @section: 15.5.4.4; -* @assertion: String.prototype.charAt(pos); -* @description: pos is equation with false and true, and instance is Boolean object; -*/ - -__instance = new Boolean; - -__instance.charAt = String.prototype.charAt; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__instance.charAt(false)+__instance.charAt(true)+__instance.charAt(true+1) !== "fal") { - $ERROR('#1: __instance = new Boolean; __instance.charAt = String.prototype.charAt; __instance = new Boolean; __instance.charAt = String.prototype.charAt; __instance.charAt(false)+__instance.charAt(true)+__instance.charAt(true+1) === "fal". Actual: '+__instance.charAt(false)+__instance.charAt(true)+__instance.charAt(true+1) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A1_T3.js deleted file mode 100644 index 98eb35a78..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A1_T3.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.4_A1_T3; -* @section: 15.5.4.4; -* @assertion: String.prototype.charAt(pos); -* @description: Use numbers and strings as pos; -*/ - -charAt = String.prototype.charAt; - -if (typeof toString === "undefined"){ - toString = Object.prototype.toString; -} - -__class__ = toString(); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (charAt("1") + charAt(2) + charAt("3") + charAt(4) + charAt("5") + charAt(6) !== "object") { - $ERROR('#1: charAt = String.prototype.charAt; charAt("1") + charAt(2) + charAt("3") + charAt(4) + charAt("5") + charAt(6) === "object". Actual: '+charAt("1") + charAt(2) + charAt("3") + charAt(4) + charAt("5") + charAt(6) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A1_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A1_T4.js deleted file mode 100644 index 0aeff7564..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A1_T4.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.4_A1_T4; -* @section: 15.5.4.4; -* @assertion: String.prototype.charAt(pos); -* @description: Call charAt() function without argument of string object; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -//since ToInteger() evaluates to 0 charAt() evaluates to charAt(0) -if ("lego".charAt() !== "l") { - $ERROR('#1: "lego".charAt() === "l". Actual: "lego".charAt() ==='+("lego".charAt()) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A1_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A1_T5.js deleted file mode 100644 index c68b450cb..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A1_T5.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.4_A1_T5; -* @section: 15.5.4.4; -* @assertion: String.prototype.charAt(pos); -* @description: Call charAt() function with null argument of function object; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -//since ToInteger(null) evaluates to 0 charAt() evaluates to charAt(0) -if (function(){return "lego"}().charAt(null) !== "l") { - $ERROR('#1: function(){return "lego"}().charAt(null) === "l". Actual: function(){return "lego"}().charAt(null) ==='+function(){return "lego"}().charAt(null) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A1_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A1_T6.js deleted file mode 100644 index 4e0b48dd7..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A1_T6.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.4_A1_T6; -* @section: 15.5.4.4; -* @assertion: String.prototype.charAt(pos); -* @description: Call charAt() function with x argument of new String object, where x is undefined variable; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -//since ToInteger(undefined) evaluates to 0 charAt() evaluates to charAt(0) -if (new String("lego").charAt(x) !== "l") { - $ERROR('#1: var x; new String("lego").charAt(x) === "l". Actual: new String("lego").charAt(x) ==='+new String("lego").charAt(x) ); -} -// -////////////////////////////////////////////////////////////////////////////// - -var x; diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A1_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A1_T7.js deleted file mode 100644 index 95420e614..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A1_T7.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.4_A1_T7; -* @section: 15.5.4.4; -* @assertion: String.prototype.charAt(pos); -* @description: Call charAt() function with undefined argument of string object; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -//since ToInteger(undefined) evaluates to 0 charAt() evaluates to charAt(0) -if (String("lego").charAt(undefined) !== "l") { - $ERROR('#1: String("lego").charAt(undefined) === "l". Actual: String("lego").charAt(undefined) ==='+String("lego").charAt(undefined) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A1_T8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A1_T8.js deleted file mode 100644 index 86e7ced1c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A1_T8.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.4_A1_T8; -* @section: 15.5.4.4; -* @assertion: String.prototype.charAt(pos); -* @description: Call charAt() function with void 0 argument of string object; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -//since ToInteger(void 0) evaluates to 0 charAt() evaluates to charAt(0) -if (String(42).charAt(void 0) !== "4") { - $ERROR('#1: String(42).charAt(void 0) === "4". Actual: String(42).charAt(void 0) ==='+String(42).charAt(void 0) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A1_T9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A1_T9.js deleted file mode 100644 index 14a1c7497..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A1_T9.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.4_A1_T9; -* @section: 15.5.4.4; -* @assertion: String.prototype.charAt(pos); -* @description: Call charAt() function with function(){}() argument of string object; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -//since ToInteger(undefined) evaluates to 0 charAt() evaluates to charAt(0) -if (new String(42).charAt(function(){}()) !== "4") { - $ERROR('#1: new String(42).charAt(function(){}()) === "4". Actual: new String(42).charAt(function(){}()) ==='+new String(42).charAt(function(){}()) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A2.js deleted file mode 100644 index 8e8f12c75..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A2.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.4_A2; -* @section: 15.5.4.4; -* @assertion: When String.prototype.charAt(pos) calls if ToInteger(pos) less than 0 the empty string returns; -* @description: Call charAt(pos) with negative pos; -*/ - -function __FACTORY(){}; - -__FACTORY.prototype.charAt = String.prototype.charAt; - -__instance = new __FACTORY; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__instance.charAt(-1) !== "") { - $ERROR('#1: __instance.charAt(-1) === "". Actual: __instance.charAt(-1) ==='+__instance.charAt(-1) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A3.js deleted file mode 100644 index 5900dda9d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A3.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.4_A3; -* @section: 15.5.4.4; -* @assertion: When String.prototype.charAt(pos) calls if ToInteger(pos) not less than ToString(this value) the empty string returns; -* @description: pos is bigger of string length; -*/ - -__instance = new String("ABC"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__instance.charAt(3) !== "") { - $ERROR('#1: __instance = new String("ABC"); __instance.charAt(3) === "". Actual: __instance.charAt(3) ==='+__instance.charAt(3) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A4_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A4_T1.js deleted file mode 100644 index 90b3945f9..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A4_T1.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.4_A4_T1; -* @section: 15.5.4.4; -* @assertion: If pos is a value of Number type that is an integer, then the result of x.charAt(pos) is equal to the result of x.substring(pos, pos+1); -* @description: Compare results of x.charAt(pos) and x.substring(pos, pos+1); -*/ - - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -for(var i=0; i<6; i++) { - if ("ABC\u0041\u0042\u0043".charAt(i) !== "\u0041\u0042\u0043ABC".substring(i, i+1)) { - $ERROR('#'+i+': "ABC\\u0041\\u0042\\u0043".charAt('+i+') === "\\u0041\\u0042\\u0043ABC".substring('+i+', '+(i+1)+'). Actual: "ABC\\u0041\\u0042\\u0043".charAt('+i+') ==='+("ABC\u0041\u0042\u0043".charAt(i)) ); - } -} - -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A4_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A4_T2.js deleted file mode 100644 index f16448e4c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A4_T2.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.4_A4_T2; -* @section: 15.5.4.4; -* @assertion: If pos is a value of Number type that is an integer, then the result of x.charAt(pos) is equal to the result of x.substring(pos, pos+1); -* @description: Compare results of x.charAt(pos) and x.substring(pos, pos+1), wheb pos is smaller of zero; -*/ - - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -for(var i=-2; i<0; i++) { - if ("ABC\u0041\u0042\u0043".charAt(i) !== "\u0041\u0042\u0043ABC".substring(i, i+1)) { - $ERROR('#'+(i+2)+': "ABC\\u0041\\u0042\\u0043".charAt('+i+') === "\\u0041\\u0042\\u0043ABC".substring('+i+', '+(i+1)+'). Actual: "ABC\\u0041\\u0042\\u0043".charAt('+i+') ==='+("ABC\u0041\u0042\u0043".charAt(i)) ); - } -} - -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A4_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A4_T3.js deleted file mode 100644 index 4973d76d2..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A4_T3.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.4_A4_T3; -* @section: 15.5.4.4; -* @assertion: If pos is a value of Number type that is an integer, then the result of x.charAt(pos) is equal to the result of x.substring(pos, pos+1); -* @description: Compare results of x.charAt(pos) and x.substring(pos, pos+1), wheb pos is bigger string length; -*/ - - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -for(var i=6; i<8; i++) { - if ("ABC\u0041\u0042\u0043".charAt(i) !== "\u0041\u0042\u0043ABC".substring(i, i+1)) { - $ERROR('#'+(i-5)+': "ABC\\u0041\\u0042\\u0043".charAt('+i+') === "\\u0041\\u0042\\u0043ABC".substring('+i+', '+(i+1)+'). Actual: "ABC\\u0041\\u0042\\u0043".charAt('+i+') ==='+("ABC\u0041\u0042\u0043".charAt(i))); - } -} - -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A5.js deleted file mode 100644 index 157ebe973..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A5.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.4_A5; -* @section: 15.5.4.4; -* @assertion: When String.prototype.charAt(pos) calls first calls ToString, giving it the this value as its argument; -* @description: Change toString function, it trow exception, and call charAt(); -*/ - -__obj={ - valueOf:1, - toString:function(){throw 'intostring'}, - charAt:String.prototype.charAt -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try { - var x = __obj.charAt(); - $FAIL('#1: __obj={valueOf:1,toString:function(){throw \'intostring\'},charAt:String.prototype.charAt}; "var x = __obj.charAt()" lead to throwing exception'); -} catch (e) { - if (e !== 'intostring') { - $ERROR('#1.1: Exception === \'intostring\'. Actual: exception ==='+e ); - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A6.js deleted file mode 100644 index 8ae2d4200..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A6.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.4_A6; -* @section: 15.5.4.4, 13.2; -* @assertion: String.prototype.charAt has not prototype property; -* @description: Checking String.prototype.charAt.prototype; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (String.prototype.charAt.prototype !== undefined) { - $ERROR('#1: String.prototype.charAt.prototype === undefined. Actual: '+String.prototype.charAt.prototype ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A7.js deleted file mode 100644 index 971a230a0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A7.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.4_A7; -* @section: 15.5.4.4, 13.2; -* @assertion: String.prototype.charAt can't be used as constructor; -* @description: Checking if creating the String.prototype.charAt object fails; -*/ - -__FACTORY = String.prototype.charAt; - -try { - __instance = new __FACTORY; - $FAIL('#1: __FACTORY = String.prototype.charAt; "__instance = new __FACTORY" lead to throwing exception'); -} catch (e) {} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A8.js deleted file mode 100644 index 3d528758b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A8.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.4_A8; -* @section: 15.5.4.4; -* @assertion: The String.prototype.charAt.length property has the attribute DontEnum; -* @description: Checking if enumerating the String.prototype.charAt.length property fails; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#0 -if (!(String.prototype.charAt.hasOwnProperty('length'))) { - $ERROR('#0: String.prototype.charAt.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.charAt.hasOwnProperty('length')); -} -// -////////////////////////////////////////////////////////////////////////////// - - -////////////////////////////////////////////////////////////////////////////// -// CHECK#1 -if (String.prototype.charAt.propertyIsEnumerable('length')) { - $ERROR('#1: String.prototype.charAt.propertyIsEnumerable(\'length\') return false. Actual: '+String.prototype.charAt.propertyIsEnumerable('length')); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -// CHECK#2 -count=0; - -for (p in String.prototype.charAt){ - if (p==="length") count++; -} - -if (count !== 0) { - $ERROR('#2: count=0; for (p in String.prototype.charAt){if (p==="length") count++;}; count === 0. Actual: count ==='+count ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A9.js deleted file mode 100644 index 526fa0f2f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.4_String.prototype.charAt/S15.5.4.4_A9.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.4_A9; -* @section: 15.5.4.4; -* @assertion: The String.prototype.charAt.length property has the attribute DontDelete; -* @description: Checking if deleting the String.prototype.charAt.length property fails; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#0 -if (!(String.prototype.charAt.hasOwnProperty('length'))) { - $ERROR('#0: String.prototype.charAt.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.charAt.hasOwnProperty('length')); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (delete String.prototype.charAt.length) { - $ERROR('#1: delete String.prototype.charAt.length return false'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (!(String.prototype.charAt.hasOwnProperty('length'))) { - $ERROR('#2: delete String.prototype.charAt.length; String.prototype.charAt.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.charAt.hasOwnProperty('length')); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.5_String.prototype.charCodeAt/S15.5.4.5_A1.1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.5_String.prototype.charCodeAt/S15.5.4.5_A1.1.js deleted file mode 100644 index 068f7baf4..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.5_String.prototype.charCodeAt/S15.5.4.5_A1.1.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.5_A1.1; -* @section: 15.5.4.5, 13.2; -* @assertion: String.prototype.charCodeAt() can accept many arguments; -* @description: Checking by using eval; -*/ - -function __FACTORY(){this.toString = function(){ return "wizard";};}; - -__FACTORY.prototype.charCodeAt = String.prototype.charCodeAt; - -__instance = new __FACTORY; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -with(__instance){ - - if (__instance.charCodeAt(eval("1"),true,null,{})!== 0x69) { - $ERROR('#1: __instance.charCodeAt(eval("1"),true,null,{})=== 0x69. Actual: __instance.charCodeAt(eval("1"),true,null,{})==='+__instance.charCodeAt(eval("1"),true,null,{})); - } -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.5_String.prototype.charCodeAt/S15.5.4.5_A10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.5_String.prototype.charCodeAt/S15.5.4.5_A10.js deleted file mode 100644 index aa12e8b5e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.5_String.prototype.charCodeAt/S15.5.4.5_A10.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.5_A10; -* @section: 15.5.4.5; -* @assertion: The String.prototype.charCodeAt.length property has the attribute ReadOnly; -* @description: Checking if varying the String.prototype.charCodeAt.length property fails; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!(String.prototype.charCodeAt.hasOwnProperty('length'))) { - $ERROR('#1: String.prototype.charCodeAt.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.charCodeAt.hasOwnProperty('length')); -} -// -////////////////////////////////////////////////////////////////////////////// - -__obj = String.prototype.charCodeAt.length; - -String.prototype.charCodeAt.length = function(){return "shifted";}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (String.prototype.charCodeAt.length !== __obj) { - $ERROR('#2: __obj = String.prototype.charCodeAt.length; String.prototype.charCodeAt.length = function(){return "shifted";}; String.prototype.charCodeAt.length === __obj. Actual: '+String.prototype.charCodeAt.length ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.5_String.prototype.charCodeAt/S15.5.4.5_A11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.5_String.prototype.charCodeAt/S15.5.4.5_A11.js deleted file mode 100644 index bf07f8849..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.5_String.prototype.charCodeAt/S15.5.4.5_A11.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.5_A11; -* @section: 15.5.4.5; -* @assertion: The length property of the charCodeAt method is 1; -* @description: Checking String.prototype.charCodeAt.length; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!(String.prototype.charCodeAt.hasOwnProperty("length"))) { - $ERROR('#1: String.prototype.charCodeAt.hasOwnProperty("length") return true. Actual: '+String.prototype.charCodeAt.hasOwnProperty("length")); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (String.prototype.charCodeAt.length !== 1) { - $ERROR('#2: String.prototype.charCodeAt.length === 1. Actual: '+String.prototype.charCodeAt.length ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.5_String.prototype.charCodeAt/S15.5.4.5_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.5_String.prototype.charCodeAt/S15.5.4.5_A1_T1.js deleted file mode 100644 index f58e6e755..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.5_String.prototype.charCodeAt/S15.5.4.5_A1_T1.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.5_A1_T1; -* @section: 15.5.4.5; -* @assertion: String.prototype.charCodeAt(pos); -* @description: pos is false and true, and instance is object; -*/ - -__instance = new Object(42); - -__instance.charCodeAt = String.prototype.charCodeAt; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if ((__instance.charCodeAt(false) !== 52)||(__instance.charCodeAt(true) !== 50)) { - $ERROR('#1: __instance = new Object(42); __instance.charCodeAt = String.prototype.charCodeAt; __instance.charCodeAt(false) === 52 and __instance.charCodeAt(true) === 50. Actual: __instance.charCodeAt(false) ==='+__instance.charCodeAt(false)+' and __instance.charCodeAt(true) ==='+__instance.charCodeAt(true) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.5_String.prototype.charCodeAt/S15.5.4.5_A1_T10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.5_String.prototype.charCodeAt/S15.5.4.5_A1_T10.js deleted file mode 100644 index b841ef4ab..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.5_String.prototype.charCodeAt/S15.5.4.5_A1_T10.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.5_A1_T10; -* @section: 15.5.4.5; -* @assertion: String.prototype.charCodeAt(pos); -* @description: Call charCodeAt() function with object argument; -*/ - -var __obj = {toString:function(){return 1;}} -var __str = "lego"; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -with(__str){ - if (charCodeAt(__obj) !== 0x65) { - $ERROR('#1: var __obj = {toString:function(){return 1;}}; var __str = "lego"; charCodeAt(__obj) === 0x65. Actual: charCodeAt(__obj) ==='+charCodeAt(__obj) ); - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.5_String.prototype.charCodeAt/S15.5.4.5_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.5_String.prototype.charCodeAt/S15.5.4.5_A1_T2.js deleted file mode 100644 index cb18f5cfd..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.5_String.prototype.charCodeAt/S15.5.4.5_A1_T2.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.5_A1_T2; -* @section: 15.5.4.5; -* @assertion: String.prototype.charCodeAt(pos); -* @description: pos is equation with false and true, and instance is Boolean object; -*/ - -__instance = new Boolean; - -__instance.charCodeAt = String.prototype.charCodeAt; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__instance.charCodeAt(false)!==0x66) { - $ERROR('#1: __instance = new Boolean; __instance.charCodeAt = String.prototype.charCodeAt; __instance.charCodeAt(false)===0x66. Actual: '+__instance.charCodeAt(false)); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__instance.charCodeAt(true)!==0x61) { - $ERROR('#2: __instance = new Boolean; __instance.charCodeAt = String.prototype.charCodeAt; __instance.charCodeAt(true)===0x61. Actual: '+__instance.charCodeAt(true)); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__instance.charCodeAt(true+1) !== 0x6C) { - $ERROR('#3: __instance = new Boolean; __instance.charCodeAt = String.prototype.charCodeAt; __instance.charCodeAt(true+1) === 0x6C. Actual: '+__instance.charCodeAt(true+1) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.5_String.prototype.charCodeAt/S15.5.4.5_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.5_String.prototype.charCodeAt/S15.5.4.5_A1_T3.js deleted file mode 100644 index 9d67e8c6f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.5_String.prototype.charCodeAt/S15.5.4.5_A1_T3.js +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.5_A1_T3; -* @section: 15.5.4.5; -* @assertion: String.prototype.charCodeAt(pos); -* @description: Use numbers and strings as pos; -*/ - -charCodeAt = String.prototype.charCodeAt; - -if (typeof toString === "undefined"){ - toString = Object.prototype.toString; -} - -__class__ = toString(); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (charCodeAt("2") !== 0x62) { - $ERROR('#1: charCodeAt = String.prototype.charCodeAt; charCodeAt("2") === 0x62. Actual: '+charCodeAt("2") ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (charCodeAt(3) !== 0x6A) { - $ERROR('#2: charCodeAt = String.prototype.charCodeAt; charCodeAt(3) === 0x6A. Actual: '+charCodeAt(3) ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (charCodeAt("4") !== 0x65) { - $ERROR('#3: charCodeAt = String.prototype.charCodeAt; charCodeAt("4") === 0x65. Actual: '+charCodeAt("4") ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (charCodeAt(5) !== 0x63) { - $ERROR('#4: charCodeAt = String.prototype.charCodeAt; charCodeAt(5) === 0x63. Actual: '+charCodeAt(5) ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#5 -if (charCodeAt("6") !== 0x74) { - $ERROR('#5: charCodeAt = String.prototype.charCodeAt; charCodeAt("6") === 0x74. Actual: '+charCodeAt("6") ); -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.5_String.prototype.charCodeAt/S15.5.4.5_A1_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.5_String.prototype.charCodeAt/S15.5.4.5_A1_T4.js deleted file mode 100644 index 15a799277..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.5_String.prototype.charCodeAt/S15.5.4.5_A1_T4.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.5_A1_T4; -* @section: 15.5.4.5; -* @assertion: String.prototype.charCodeAt(pos); -* @description: Call charCodeAt() function without argument of string object; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -//since Number() evaluates to 0 charCodeAt() evaluates to charCodeAt(0) -if ("smart".charCodeAt() !== 0x73) { - $ERROR('#1: "smart".charCodeAt() === 0x73. Actual: "smart".charCodeAt() ==='+("smart".charCodeAt()) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.5_String.prototype.charCodeAt/S15.5.4.5_A1_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.5_String.prototype.charCodeAt/S15.5.4.5_A1_T5.js deleted file mode 100644 index b6ab5eb9f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.5_String.prototype.charCodeAt/S15.5.4.5_A1_T5.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.5_A1_T5; -* @section: 15.5.4.5; -* @assertion: String.prototype.charCodeAt(pos); -* @description: Call charCodeAt() function with null argument of function object; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -//since ToInteger(null) evaluates to 0 charCodeAt() evaluates to charCodeAt(0) -if (function(){return "lego"}().charCodeAt(null) !== 0x6C) { - $ERROR('#1: function(){return "lego"}().charCodeAt(null) === 0x6C. Actual: '+function(){return "lego"}().charCodeAt(null) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.5_String.prototype.charCodeAt/S15.5.4.5_A1_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.5_String.prototype.charCodeAt/S15.5.4.5_A1_T6.js deleted file mode 100644 index 493d587f3..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.5_String.prototype.charCodeAt/S15.5.4.5_A1_T6.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.5_A1_T6; -* @section: 15.5.4.5; -* @assertion: String.prototype.charCodeAt(pos); -* @description: Call charCodeAt() function with x argument of new String object, where x is undefined variable; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -//since ToInteger(undefined) evaluates to 0 charCodeAt() evaluates to charCodeAt(0) -if (new String("lego").charCodeAt(x) !== 0x6C) { - $ERROR('#1: var x; new String("lego").charCodeAt(x) === 0x6C. Actual: new String("lego").charCodeAt(x) ==='+new String("lego").charCodeAt(x) ); -} -// -////////////////////////////////////////////////////////////////////////////// - -var x; diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.5_String.prototype.charCodeAt/S15.5.4.5_A1_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.5_String.prototype.charCodeAt/S15.5.4.5_A1_T7.js deleted file mode 100644 index 21fa8e9af..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.5_String.prototype.charCodeAt/S15.5.4.5_A1_T7.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.5_A1_T7; -* @section: 15.5.4.5; -* @assertion: String.prototype.charCodeAt(pos); -* @description: Call charCodeAt() function with undefined argument of string object; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -//since ToInteger(undefined) evaluates to 0 charCodeAt() evaluates to charCodeAt(0) -if (String("lego").charCodeAt(undefined) !== 0x6C) { - $ERROR('#1: String("lego").charCodeAt(undefined) === 0x6C. Actual: String("lego").charCodeAt(undefined) ==='+String("lego").charCodeAt(undefined) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.5_String.prototype.charCodeAt/S15.5.4.5_A1_T8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.5_String.prototype.charCodeAt/S15.5.4.5_A1_T8.js deleted file mode 100644 index 7a0628e2c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.5_String.prototype.charCodeAt/S15.5.4.5_A1_T8.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.5_A1_T8; -* @section: 15.5.4.5; -* @assertion: String.prototype.charCodeAt(pos); -* @description: Call charCodeAt() function with void 0 argument of string object; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -//since ToInteger(void 0) evaluates to 0 charCodeAt() evaluates to charCodeAt(0) -if (String(42).charCodeAt(void 0) !== 0x34) { - $ERROR('#1: String(42).charCodeAt(void 0) === 0x34. Actual: String(42).charCodeAt(void 0) ==='+String(42).charCodeAt(void 0) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.5_String.prototype.charCodeAt/S15.5.4.5_A1_T9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.5_String.prototype.charCodeAt/S15.5.4.5_A1_T9.js deleted file mode 100644 index 4cbbc3468..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.5_String.prototype.charCodeAt/S15.5.4.5_A1_T9.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.5_A1_T9; -* @section: 15.5.4.5; -* @assertion: String.prototype.charCodeAt(pos); -* @description: Call charCodeAt() function with function(){}() argument of string object; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -//since ToInteger(undefined) evaluates to 0 charCodeAt() evaluates to charCodeAt(0) -if (new String(42).charCodeAt(function(){}()) !== 0x34) { - $ERROR('#1: new String(42).charCodeAt(function(){}()) === 0x34. Actual: new String(42).charCodeAt(function(){}()) ==='+new String(42).charCodeAt(function(){}()) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.5_String.prototype.charCodeAt/S15.5.4.5_A2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.5_String.prototype.charCodeAt/S15.5.4.5_A2.js deleted file mode 100644 index b7d8751b1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.5_String.prototype.charCodeAt/S15.5.4.5_A2.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.5_A2; -* @section: 15.5.4.5; -* @assertion: When String.prototype.charCodeAt(pos) calls if ToInteger(pos) less than 0 the NaN returns; -* @description: Call charCodeAt(pos) with negative pos; -*/ - -function __FACTORY(){}; - -__FACTORY.prototype.charCodeAt = String.prototype.charCodeAt; - -__instance = new __FACTORY; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!isNaN(__instance.charCodeAt(-1))) { - $ERROR('#1: function __FACTORY(){}; __FACTORY.prototype.charCodeAt = String.prototype.charCodeAt; __instance = new __FACTORY; isNaN(__instance.charCodeAt(-1)) return true. Actual: '+isNaN(__instance.charCodeAt(-1))); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.5_String.prototype.charCodeAt/S15.5.4.5_A3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.5_String.prototype.charCodeAt/S15.5.4.5_A3.js deleted file mode 100644 index 14b5d533e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.5_String.prototype.charCodeAt/S15.5.4.5_A3.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.5_A3; -* @section: 15.5.4.5; -* @assertion: When String.prototype.charCodeAt(pos) calls if ToInteger(pos) not less than ToString(this value) the NaN returns; -* @description: pos is bigger of string length; -*/ - -__instance = new String("ABC"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!isNaN(__instance.charCodeAt(3))) { - $ERROR('#1: __instance = new String("ABC"); isNaN(__instance.charCodeAt(3)) return true. Actual: '+isNaN(__instance.charCodeAt(3))); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.5_String.prototype.charCodeAt/S15.5.4.5_A4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.5_String.prototype.charCodeAt/S15.5.4.5_A4.js deleted file mode 100644 index cad43c34c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.5_String.prototype.charCodeAt/S15.5.4.5_A4.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.5_A4; -* @section: 15.5.4.5; -* @assertion: When String.prototype.charCodeAt(pos) calls first calls ToString, giving it the this value as its argument; -* @description: Change toString function, it trow exception, and call charCodeAt(); -*/ - -__obj={ - valueOf:1, - toString:function(){throw 'intostring'}, - charCodeAt:String.prototype.charCodeAt -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try { - var x = __obj.charCodeAt(); - $FAIL('#1: "var x = __obj.charCodeAt()" lead to throwing exception'); -} catch (e) { - if (e !== 'intostring') { - $ERROR('#1.1: Exception === \'intostring\'. Actual: exception ==='+e ); - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.5_String.prototype.charCodeAt/S15.5.4.5_A6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.5_String.prototype.charCodeAt/S15.5.4.5_A6.js deleted file mode 100644 index 6034b5f69..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.5_String.prototype.charCodeAt/S15.5.4.5_A6.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.5_A6; -* @section: 15.5.4.5, 13.2; -* @assertion: String.prototype.charCodeAt has not prototype property; -* @description: Checking String.prototype.charCodeAt.prototype; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (String.prototype.charCodeAt.prototype !== undefined) { - $ERROR('#1: String.prototype.charCodeAt.prototype === undefined. Actual: '+String.prototype.charCodeAt.prototype ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.5_String.prototype.charCodeAt/S15.5.4.5_A7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.5_String.prototype.charCodeAt/S15.5.4.5_A7.js deleted file mode 100644 index a224d7bd5..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.5_String.prototype.charCodeAt/S15.5.4.5_A7.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.5_A7; -* @section: 15.5.4.5, 13.2; -* @assertion: String.prototype.charCodeAt can't be used as constructor; -* @description: Checking if creating the String.prototype.charCodeAt object fails; -*/ - -__FACTORY = String.prototype.charCodeAt; - -try { - __instance = new __FACTORY; - $FAIL('#1: __FACTORY = String.prototype.charCodeAt; "__instance = new __FACTORY" lead to throwing exception'); -} catch (e) {} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.5_String.prototype.charCodeAt/S15.5.4.5_A8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.5_String.prototype.charCodeAt/S15.5.4.5_A8.js deleted file mode 100644 index 1ea83861d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.5_String.prototype.charCodeAt/S15.5.4.5_A8.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.5_A8; -* @section: 15.5.4.5; -* @assertion: The String.prototype.charCodeAt.length property has the attribute DontEnum; -* @description: Checking if enumerating the String.prototype.charCodeAt.length property fails; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#0 -if (!(String.prototype.charCodeAt.hasOwnProperty('length'))) { - $FAIL('#0: String.prototype.charCodeAt.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.charCodeAt.hasOwnProperty('length')); -} -// -////////////////////////////////////////////////////////////////////////////// - - -////////////////////////////////////////////////////////////////////////////// -// CHECK#1 -if (String.prototype.charCodeAt.propertyIsEnumerable('length')) { - $ERROR('#1: String.prototype.charCodeAt.propertyIsEnumerable(\'length\') return false. Actual: '+String.prototype.charCodeAt.propertyIsEnumerable('length')); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -// CHECK#2 -count=0; - -for (p in String.prototype.charCodeAt){ - if (p==="length") count++; -} - -if (count !== 0) { - $ERROR('#2: count=0; for (p in String.prototype.charCodeAt){if (p==="length") count++;} count === 0. Actual: count ==='+count ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.5_String.prototype.charCodeAt/S15.5.4.5_A9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.5_String.prototype.charCodeAt/S15.5.4.5_A9.js deleted file mode 100644 index d7c463283..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.5_String.prototype.charCodeAt/S15.5.4.5_A9.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.5_A9; -* @section: 15.5.4.5; -* @assertion: The String.prototype.charCodeAt.length property has the attribute DontDelete; -* @description: Checking if deleting the String.prototype.charCodeAt.length property fails; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#0 -if (!(String.prototype.charCodeAt.hasOwnProperty('length'))) { - $FAIL('#0: String.prototype.charCodeAt.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.charCodeAt.hasOwnProperty('length')); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (delete String.prototype.charCodeAt.length) { - $ERROR('#1: delete String.prototype.charCodeAt.length return false'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (!(String.prototype.charCodeAt.hasOwnProperty('length'))) { - $FAIL('#2: delete String.prototype.charCodeAt.length; String.prototype.charCodeAt.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.charCodeAt.hasOwnProperty('length')); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.6_String.prototype.concat/S15.5.4.6_A10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.6_String.prototype.concat/S15.5.4.6_A10.js deleted file mode 100644 index 0cb1ad7da..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.6_String.prototype.concat/S15.5.4.6_A10.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.6_A10; -* @section: 15.5.4.6; -* @assertion: The String.prototype.concat.length property has the attribute ReadOnly; -* @description: Checking if varying the String.prototype.concat.length property fails; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!(String.prototype.concat.hasOwnProperty('length'))) { - $ERROR('#1: String.prototype.concat.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.concat.hasOwnProperty('length')); -} -// -////////////////////////////////////////////////////////////////////////////// - -__obj = String.prototype.concat.length; - -String.prototype.concat.length = function(){return "shifted";}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (String.prototype.concat.length !== __obj) { - $ERROR('#2: __obj = String.prototype.concat.length; String.prototype.concat.length = function(){return "shifted";}; String.prototype.concat.length === __obj. Actual: '+String.prototype.concat.length ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.6_String.prototype.concat/S15.5.4.6_A11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.6_String.prototype.concat/S15.5.4.6_A11.js deleted file mode 100644 index 0f4341564..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.6_String.prototype.concat/S15.5.4.6_A11.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.6_A11; -* @section: 15.5.4.6; -* @assertion: The length property of the concat method is 1; -* @description: Checking String.prototype.concat.length; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!(String.prototype.concat.hasOwnProperty("length"))) { - $ERROR('#1: String.prototype.concat.hasOwnProperty("length") return true. Actual: '+String.prototype.concat.hasOwnProperty("length")); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (String.prototype.concat.length !== 1) { - $ERROR('#2: String.prototype.concat.length === 1. Actual: '+String.prototype.concat.length ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.6_String.prototype.concat/S15.5.4.6_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.6_String.prototype.concat/S15.5.4.6_A1_T1.js deleted file mode 100644 index 11b24e81f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.6_String.prototype.concat/S15.5.4.6_A1_T1.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.6_A1_T1; -* @section: 15.5.4.6; -* @assertion: String.prototype.concat([,[...]]); -* @description: Arguments are false and true, and instance is object; -*/ - -__instance = new Object(42); - -__instance.concat = String.prototype.concat; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__instance.concat(false,true) !== "42falsetrue") { - $ERROR('#1: __instance = new Object(42); __instance.concat = String.prototype.concat; __instance.concat(false,true) === "42falsetrue". Actual: '+__instance.concat(false,true) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.6_String.prototype.concat/S15.5.4.6_A1_T10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.6_String.prototype.concat/S15.5.4.6_A1_T10.js deleted file mode 100644 index 768493795..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.6_String.prototype.concat/S15.5.4.6_A1_T10.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.6_A1_T10; -* @section: 15.5.4.6; -* @assertion: String.prototype.concat([,[...]]); -* @description: Call concat([,[...]]) function with object arguments; -*/ - -var __obj = {toString:function(){return "\u0041";}} -var __obj2 = {toString:function(){return true;}} -var __obj3 = {toString:function(){return 42;}} -var __str = "lego"; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -with(__str){ - if (concat(__obj, __obj2, __obj3, x) !== "legoAtrue42undefined") { - $ERROR('#1: var x; var __obj = {toString:function(){return "\u0041";}}; var __obj2 = {toString:function(){return true;}}; var __obj3 = {toString:function(){return 42;}}; var __str = "lego"; concat(__obj, __obj2, __obj3, x) === "legoAtrue42undefined". Actual: '+concat(__obj, __obj2, __obj3, x) ); - } -} -// -////////////////////////////////////////////////////////////////////////////// - -var x; diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.6_String.prototype.concat/S15.5.4.6_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.6_String.prototype.concat/S15.5.4.6_A1_T2.js deleted file mode 100644 index 17aa178bb..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.6_String.prototype.concat/S15.5.4.6_A1_T2.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.6_A1_T2; -* @section: 15.5.4.6; -* @assertion: String.prototype.concat([,[...]]); -* @description: Arguments are equation with false and true, and instance is Boolean object; -*/ - -__instance = new Boolean; - -__instance.concat = String.prototype.concat; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__instance.concat("\u0041",true,true+1) !== "falseAtrue2") { - $ERROR('#1: __instance = new Boolean; __instance.concat = String.prototype.concat; __instance.concat("\\u0041",true,true+1) === "falseAtrue2". Actual: '+__instance.concat("\u0041",true,true+1) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.6_String.prototype.concat/S15.5.4.6_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.6_String.prototype.concat/S15.5.4.6_A1_T3.js deleted file mode 100644 index d0a234c8b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.6_String.prototype.concat/S15.5.4.6_A1_T3.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.6_A1_T3; -* @section: 15.5.4.6; -* @assertion: String.prototype.concat([,[...]]); -* @description: Use numbers and function object as arguments; -*/ - -concat = String.prototype.concat; - -var __obj5 = {toString:function(){return 5;}}; - -if (typeof toString === "undefined"){ - toString = Object.prototype.toString; -} - -__class__ = toString(); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (concat(1,2,3,4,__obj5)!=__class__+"12345") { - $ERROR('#1: concat = String.prototype.concat; concat(1,2,3,4,__obj5)==__class__+"12345". Actual: concat(1,2,3,4,__obj5)=='+concat(1,2,3,4,__obj5)); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.6_String.prototype.concat/S15.5.4.6_A1_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.6_String.prototype.concat/S15.5.4.6_A1_T4.js deleted file mode 100644 index 902f3c646..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.6_String.prototype.concat/S15.5.4.6_A1_T4.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.6_A1_T4; -* @section: 15.5.4.6; -* @assertion: String.prototype.concat([,[...]]); -* @description: Call concat([,[...]]) function without argument of string object; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -//since ToString() evaluates to "" concat() evaluates to concat("") -if ("lego".concat() !== "lego") { - $ERROR('#1: "lego".concat() === "lego". Actual: '+("lego".concat()) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.6_String.prototype.concat/S15.5.4.6_A1_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.6_String.prototype.concat/S15.5.4.6_A1_T5.js deleted file mode 100644 index 639fd60dd..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.6_String.prototype.concat/S15.5.4.6_A1_T5.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.6_A1_T5; -* @section: 15.5.4.6; -* @assertion: String.prototype.concat([,[...]]); -* @description: Call concat([,[...]]) function with null argument of function object; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -//since ToString(null) evaluates to "null" concat(null) evaluates to concat("null") -if (function(){return "lego"}().concat(null) !== "legonull") { - $ERROR('#1: function(){return "lego"}().concat(null) === "legonull". Actual: '+function(){return "lego"}().concat(null) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.6_String.prototype.concat/S15.5.4.6_A1_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.6_String.prototype.concat/S15.5.4.6_A1_T6.js deleted file mode 100644 index 5c378a5c0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.6_String.prototype.concat/S15.5.4.6_A1_T6.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.6_A1_T6; -* @section: 15.5.4.6; -* @assertion: String.prototype.concat([,[...]]); -* @description: Call concat([,[...]]) function with x argument of new String object, where x is undefined variable; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -//since ToString(undefined) evaluates to "undefined" concat(undefined) evaluates to concat("undefined") -if (new String("lego").concat(x) !== "legoundefined") { - $ERROR('#1: var x; new String("lego").concat(x) === "legoundefined". Actual: '+new String("lego").concat(x) ); -} -// -////////////////////////////////////////////////////////////////////////////// - -var x; diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.6_String.prototype.concat/S15.5.4.6_A1_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.6_String.prototype.concat/S15.5.4.6_A1_T7.js deleted file mode 100644 index ca79866c5..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.6_String.prototype.concat/S15.5.4.6_A1_T7.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.6_A1_T7; -* @section: 15.5.4.6; -* @assertion: String.prototype.concat([,[...]]); -* @description: Call concat([,[...]]) function with undefined argument of string object; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -//since ToString(undefined) evaluates to "undefined" concat(undefined) evaluates to concat("undefined") -if (String("lego").concat(undefined) !== "legoundefined") { - $ERROR('#1: String("lego").concat(undefined) === "legoundefined". Actual: '+String("lego").concat(undefined) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.6_String.prototype.concat/S15.5.4.6_A1_T8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.6_String.prototype.concat/S15.5.4.6_A1_T8.js deleted file mode 100644 index 7242e1478..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.6_String.prototype.concat/S15.5.4.6_A1_T8.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.6_A1_T8; -* @section: 15.5.4.6; -* @assertion: String.prototype.concat([,[...]]); -* @description: Call concat([,[...]]) function with void 0 argument of string object; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -//since ToString(void 0) evaluates to "undefined" concat(void 0) evaluates to concat("undefined") -if (String(42).concat(void 0) !== "42undefined") { - $ERROR('#1: String(42).concat(void 0) === "42undefined". Actual: '+String(42).concat(void 0) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.6_String.prototype.concat/S15.5.4.6_A1_T9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.6_String.prototype.concat/S15.5.4.6_A1_T9.js deleted file mode 100644 index ad50529b8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.6_String.prototype.concat/S15.5.4.6_A1_T9.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.6_A1_T9; -* @section: 15.5.4.6; -* @assertion: String.prototype.concat([,[...]]); -* @description: Call concat([,[...]]) function with function(){}() argument of string object; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -//since ToString(undefined) evaluates to "undefined" concat(undefined) evaluates to concat("undefined") -if (new String(42).concat(function(){}()) !== "42undefined") { - $ERROR('#1: new String(42).concat(function(){}()) === "42undefined". Actual: '+new String(42).concat(function(){}()) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.6_String.prototype.concat/S15.5.4.6_A2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.6_String.prototype.concat/S15.5.4.6_A2.js deleted file mode 100644 index ce862b067..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.6_String.prototype.concat/S15.5.4.6_A2.js +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.6_A2; -* @section: 15.5.4.6; -* @assertion: String.prototype.concat([,[...]]) can accept at least 128; -* @description: Call concat([,[...]]) function with 128 arguments; -*/ - -__instance = new Number(); - -__instance.concat = String.prototype.concat; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__instance.concat( -0,1,2,3,4,5,6,7,8,9,0xA,0xB,0xC,0xD,0xE,0xF, -0,1,2,3,4,5,6,7,8,9,0xA,0xB,0xC,0xD,0xE,0xF, -0,1,2,3,4,5,6,7,8,9,0xA,0xB,0xC,0xD,0xE,0xF, -0,1,2,3,4,5,6,7,8,9,0xA,0xB,0xC,0xD,0xE,0xF, -0,1,2,3,4,5,6,7,8,9,0xA,0xB,0xC,0xD,0xE,0xF, -0,1,2,3,4,5,6,7,8,9,0xA,0xB,0xC,0xD,0xE,0xF, -0,1,2,3,4,5,6,7,8,9,0xA,0xB,0xC,0xD,0xE,0xF, -0,1,2,3,4,5,6,7,8,9,0xA,0xB,0xC,0xD,0xE,0xF -) !== "001234567891011121314150123456789101112131415012345678910111213141501234567891011121314150123456789101112131415012345678910111213141501234567891011121314150123456789101112131415") { - $ERROR('#1: Call concat([,[...]]) function with 128 arguments does not lead to throwing any errors'); -} -// -////////////////////////////////////////////////////////////////////////////// - - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.6_String.prototype.concat/S15.5.4.6_A3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.6_String.prototype.concat/S15.5.4.6_A3.js deleted file mode 100644 index 2df377d22..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.6_String.prototype.concat/S15.5.4.6_A3.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.6_A3; -* @section: 15.5.4.6; -* @assertion: String.prototype.concat([,[...]]) can't change the instance to be applied; -* @description: Checking if varying the instance that is applied fails; -*/ - -__instance = new String("one"); - -__instance.concat("two"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__instance != "one") { - $ERROR('#1: __instance = new String("one"); __instance.concat("two"); __instance = new String("one"); __instance.concat("two"); __instance == "one". Actual: '+__instance); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.6_String.prototype.concat/S15.5.4.6_A4_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.6_String.prototype.concat/S15.5.4.6_A4_T1.js deleted file mode 100644 index 635fcacda..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.6_String.prototype.concat/S15.5.4.6_A4_T1.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.6_A4_T1; -* @section: 15.5.4.6; -* @assertion: when String.prototype.concat([,[...]]) is called first Call ToString, giving it the this value as its argument; -* @description: Override toString function; -*/ - -__instance = {toString:function(){return "one"}}; - -__instance.concat = String.prototype.concat; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__instance.concat("two",x) !== "onetwoundefined") { - $ERROR('#1: var x; __instance = {toString:function(){return "one"}}; __instance.concat = String.prototype.concat; __instance.concat("two",x) === "onetwoundefined". Actual: '+__instance.concat("two",x) ); -} -// -////////////////////////////////////////////////////////////////////////////// - -var x; - - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.6_String.prototype.concat/S15.5.4.6_A4_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.6_String.prototype.concat/S15.5.4.6_A4_T2.js deleted file mode 100644 index cc07a2109..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.6_String.prototype.concat/S15.5.4.6_A4_T2.js +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.6_A4_T2; -* @section: 15.5.4.6; -* @assertion: when String.prototype.concat([,[...]]) is called first Call ToString, giving it the this value as its argument; -* @description: Override toString function onto function, that throw exception; -*/ - -__instance = {toString:function(){throw "intostring";}}; -__obj = {toString:function(){throw "infirstarg";}}; - -__instance.concat = String.prototype.concat; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try { - String.prototype.concat.call(__instance,__obj, notexist); - $FAIL('#1: "String.prototype.concat.call(__instance,__obj, notexist)" lead to throwing exception'); -} catch (e) { - if (e !== "intostring") { - $ERROR('#1: e === "intostring". Actual: '+e ); - } -} -// -////////////////////////////////////////////////////////////////////////////// - -var notexist; - - - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.6_String.prototype.concat/S15.5.4.6_A6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.6_String.prototype.concat/S15.5.4.6_A6.js deleted file mode 100644 index eb9123260..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.6_String.prototype.concat/S15.5.4.6_A6.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.6_A6; -* @section: 15.5.4.6, 13.2; -* @assertion: String.prototype.concat has not prototype property; -* @description: Checking String.prototype.concat.prototype; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (String.prototype.concat.prototype !== undefined) { - $ERROR('#1: String.prototype.concat.prototype === undefined. Actual: '+String.prototype.concat.prototype ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.6_String.prototype.concat/S15.5.4.6_A7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.6_String.prototype.concat/S15.5.4.6_A7.js deleted file mode 100644 index 9f190ed95..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.6_String.prototype.concat/S15.5.4.6_A7.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.6_A7; -* @section: 15.5.4.6, 13.2; -* @assertion: String.prototype.concat can't be used as constructor; -* @description: Checking if creating the String.prototype.concat object fails; -*/ - -__FACTORY = String.prototype.concat; - -try { - __instance = new __FACTORY; - $FAIL('#1: __FACTORY = String.prototype.concat; "__instance = new __FACTORY" lead throwing exception'); -} catch (e) {} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.6_String.prototype.concat/S15.5.4.6_A8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.6_String.prototype.concat/S15.5.4.6_A8.js deleted file mode 100644 index 209fd21e1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.6_String.prototype.concat/S15.5.4.6_A8.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.6_A8; -* @section: 15.5.4.6; -* @assertion: The String.prototype.concat.length property has the attribute DontEnum; -* @description: Checking if enumerating the String.prototype.concat.length property fails; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#0 -if (!(String.prototype.concat.hasOwnProperty('length'))) { - $FAIL('#0: String.prototype.concat.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.concat.hasOwnProperty('length')); -} -// -////////////////////////////////////////////////////////////////////////////// - - -////////////////////////////////////////////////////////////////////////////// -// CHECK#1 -if (String.prototype.concat.propertyIsEnumerable('length')) { - $ERROR('#1: String.prototype.concat.propertyIsEnumerable(\'length\') return false. Actual: '+String.prototype.concat.propertyIsEnumerable('length')); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -// CHECK#2 -count = 0; - -for (p in String.prototype.concat){ - if (p==="length") count++; -} - -if (count !== 0) { - $ERROR('#2: count = 0; for (p in String.prototype.concat){ if (p==="length") count++;}; count === 0. Actual: '+count); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.6_String.prototype.concat/S15.5.4.6_A9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.6_String.prototype.concat/S15.5.4.6_A9.js deleted file mode 100644 index 58213078f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.6_String.prototype.concat/S15.5.4.6_A9.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.6_A9; -* @section: 15.5.4.6; -* @assertion: The String.prototype.concat.length property has the attribute DontDelete; -* @description: Checking if deleting the String.prototype.concat.length property fails; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#0 -if (!(String.prototype.concat.hasOwnProperty('length'))) { - $FAIL('#0: String.prototype.concat.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.concat.hasOwnProperty('length')); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (delete String.prototype.concat.length) { - $ERROR('#1: delete String.prototype.concat.length return false'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (!(String.prototype.concat.hasOwnProperty('length'))) { - $FAIL('#2: delete String.prototype.concat.length; String.prototype.concat.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.concat.hasOwnProperty('length')); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A10.js deleted file mode 100644 index b732d7641..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A10.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.7_A10; -* @section: 15.5.4.7; -* @assertion: The String.prototype.indexOf.length property has the attribute ReadOnly; -* @description: Checking if varying the String.prototype.indexOf.length property fails; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!(String.prototype.indexOf.hasOwnProperty('length'))) { - $FAIL('#1: String.prototype.indexOf.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.indexOf.hasOwnProperty('length')); -} -// -////////////////////////////////////////////////////////////////////////////// - -__obj = String.prototype.indexOf.length; - -String.prototype.indexOf.length = function(){return "shifted";}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (String.prototype.indexOf.length !== __obj) { - $ERROR('#2: __obj = String.prototype.indexOf.length; String.prototype.indexOf.length = function(){return "shifted";}; String.prototype.indexOf.length === __obj. Actual: '+String.prototype.indexOf.length ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A11.js deleted file mode 100644 index 95688130b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A11.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.7_A11; -* @section: 15.5.4.7; -* @assertion: The length property of the indexOf method is 1; -* @description: Checking String.prototype.indexOf.length; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!(String.prototype.indexOf.hasOwnProperty("length"))) { - $ERROR('#1: String.prototype.indexOf.hasOwnProperty("length") return true. Actual: '+String.prototype.indexOf.hasOwnProperty("length")); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (String.prototype.indexOf.length !== 1) { - $ERROR('#2: String.prototype.indexOf.length === 1. Actual: '+String.prototype.indexOf.length ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A1_T1.js deleted file mode 100644 index 3f0ded9bc..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A1_T1.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.7_A1_T1; -* @section: 15.5.4.7; -* @assertion: String.prototype.indexOf(searchString, position); -* @description: Arguments are false and true, and instance is object; -*/ - -__instance = new Object(true); - -__instance.indexOf = String.prototype.indexOf; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__instance.indexOf(true, false) !== 0) { - $ERROR('#1: __instance = new Object(true); __instance.indexOf = String.prototype.indexOf; __instance.indexOf(true, false) === 0. Actual: '+__instance.indexOf(true, false) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A1_T10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A1_T10.js deleted file mode 100644 index 4fb387650..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A1_T10.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.7_A1_T10; -* @section: 15.5.4.7; -* @assertion: String.prototype.indexOf(searchString, position); -* @description: Call indexOf(searchString, position) function with object arguments; -*/ - -var __obj = {toString:function(){return "\u0041B";}} -var __obj2 = {valueOf:function(){return true;}} -var __str = "ABB\u0041BABAB"; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -with(__str){ - if (indexOf(__obj, __obj2) !== 3) { - $ERROR('#1: var x; var __obj = {toString:function(){return "\u0041B";}}; var __obj2 = {valueOf:function(){return true;}}; var __str = "ABB\u0041BABAB"; indexOf(__obj, __obj2) === 3. Actual: '+indexOf(__obj, __obj2) ); - } -} -// -////////////////////////////////////////////////////////////////////////////// - -var x; diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A1_T11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A1_T11.js deleted file mode 100644 index 3eabd725a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A1_T11.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.7_A1_T11; -* @section: 15.5.4.7; -* @assertion: String.prototype.indexOf(searchString, position); -* @description: Instance is Date(0) object; -*/ - -__instance = new Date(0); - -__instance.indexOf = String.prototype.indexOf; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if ((__instance.getTimezoneOffset()>0 ? __instance.indexOf('31') : __instance.indexOf('01')) !== 8) { - $ERROR('#1: __instance = new Date(0); __instance.indexOf = String.prototype.indexOf; (__instance.getTimezoneOffset()>0 ? __instance.indexOf(\'31\') : __instance.indexOf(\'01\')) === 8. Actual: '+(__instance.getTimezoneOffset()>0 ? __instance.indexOf('31') : __instance.indexOf('01')) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A1_T12.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A1_T12.js deleted file mode 100644 index 80b379e10..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A1_T12.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.7_A1_T12; -* @section: 15.5.4.7; -* @assertion: String.prototype.indexOf(searchString, position); -* @description: Argument is string, and instance is array of strings; -*/ - -__instance = new Array('new','zoo','revue'); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__instance.indexOf('new') !== 0) { - $ERROR('#1: __instance = new Array(\'new\',\'zoo\',\'revue\'); __instance.indexOf(\'new\') === 0. Actual: '+__instance.indexOf('new') ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__instance.indexOf('zoo') !== 1) { - $ERROR('#2: __instance = new Array(\'new\',\'zoo\',\'revue\'); __instance.indexOf(\'zoo\') === 1. Actual: '+__instance.indexOf('zoo') ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A1_T2.js deleted file mode 100644 index 60b3dce5f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A1_T2.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.7_A1_T2; -* @section: 15.5.4.7; -* @assertion: String.prototype.indexOf(searchString, position); -* @description: Arguments are boolean equation, function and null, and instance is Boolean object; -*/ - -__instance = new Boolean; - -__instance.indexOf = String.prototype.indexOf; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__instance.indexOf("A"!=="\u0041", function(){return 0;}(),null) !== 0) { - $ERROR('#1: __instance = new Boolean; __instance.indexOf = String.prototype.indexOf; __instance.indexOf("A"!=="\\u0041", function(){return 0;}(),null) === 0. Actual: '+__instance.indexOf("A"!=="\u0041", function(){return 0;}(),null) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A1_T3.js deleted file mode 100644 index 12acac2a4..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A1_T3.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.7_A1_T3; -* @section: 15.5.4.7; -* @assertion: String.prototype.indexOf(searchString, position); -* @description: Checking by using eval; -*/ - -indexOf = String.prototype.indexOf; - -var __obj__pos = {valueOf:function(){return 5;}}; - -if (typeof toString === "undefined"){ - toString = Object.prototype.toString; -} - -__class__ = toString(); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (indexOf(eval("\"[\""),__obj__pos)!=-1) { - $ERROR('#1: indexOf = String.prototype.indexOf; indexOf(eval("\\"[\\""),__obj__pos)==-1. Actual: indexOf(eval("\\"[\\""),__obj__pos)=='+indexOf(eval("\"[\""),__obj__pos)); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A1_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A1_T4.js deleted file mode 100644 index 0fefab1fa..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A1_T4.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.7_A1_T4; -* @section: 15.5.4.7; -* @assertion: String.prototype.indexOf(searchString, position); -* @description: Call indexOf(searchString, position) function without arguments of string; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -//since ToString() evaluates to "" indexOf() evaluates to indexOf("",0) -if ("".indexOf() !== -1) { - $ERROR('#1: "".indexOf() === -1. Actual: '+("".indexOf()) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A1_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A1_T5.js deleted file mode 100644 index a2c231c33..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A1_T5.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.7_A1_T5; -* @section: 15.5.4.7; -* @assertion: String.prototype.indexOf(searchString, position); -* @description: Call indexOf(searchString, position) function with null argument of function object; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -//since ToString(null) evaluates to "null" indexOf(null) evaluates to indexOf("",0) -if (function(){return "gnulluna"}().indexOf(null) !== 1) { - $ERROR('#1: function(){return "gnulluna"}().indexOf(null) === 1. Actual: '+function(){return "gnulluna"}().indexOf(null) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A1_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A1_T6.js deleted file mode 100644 index f4496568a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A1_T6.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.7_A1_T6; -* @section: 15.5.4.7; -* @assertion: String.prototype.indexOf(searchString, position); -* @description: Call indexOf(searchString, position) function with x argument of new String object, where x is undefined variable; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -//since ToString(undefined) evaluates to "" indexOf(undefined) evaluates to indexOf("",0) -if (new String("undefined").indexOf(x) !== 0) { - $ERROR('#1: var x; new String("undefined").indexOf(x) === 0. Actual: '+new String("undefined").indexOf(x) ); -} -// -////////////////////////////////////////////////////////////////////////////// - -var x; diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A1_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A1_T7.js deleted file mode 100644 index 11d75e74b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A1_T7.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.7_A1_T7; -* @section: 15.5.4.7; -* @assertion: String.prototype.indexOf(searchString, position); -* @description: Call indexOf(searchString, position) function with undefined argument of string object; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -//since ToString(undefined) evaluates to "undefined" indexOf(undefined) evaluates to indexOf("undefined",0) -if (String("undefined").indexOf(undefined) !== 0) { - $ERROR('#1: String("undefined").indexOf(undefined) === 0. Actual: '+String("undefined").indexOf(undefined) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A1_T8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A1_T8.js deleted file mode 100644 index dd13b989d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A1_T8.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.7_A1_T8; -* @section: 15.5.4.7; -* @assertion: String.prototype.indexOf(searchString, position); -* @description: Call indexOf(searchString, position) function with void 0 argument of string object; -*/ - -__obj = {toString:function(){}}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -//since ToString(void 0) evaluates to "undefined" indexOf(void 0) evaluates to indexOf("undefined") -if (String(__obj).indexOf(void 0) !== 0) { - $ERROR('#1: __obj = {toString:function(){}}; String(__obj).indexOf(void 0) === 0. Actual: '+String(__obj).indexOf(void 0) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A1_T9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A1_T9.js deleted file mode 100644 index b935b4a7c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A1_T9.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.7_A1_T9; -* @section: 15.5.4.7; -* @assertion: String.prototype.indexOf(searchString, position); -* @description: Call indexOf(searchString, position) function with function(){}() argument of string object; -*/ - -__obj = { - valueOf:function(){}, - toString:void 0 -}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -//since ToString(undefined) evaluates to "undefined" indexOf(undefined) evaluates to indexOf("undefined") -if (new String(__obj).indexOf(function(){}()) !== 0) { - $ERROR('#1: __obj = {valueOf:function(){}, toString:void 0}; new String(__obj).indexOf(function(){}()) === 0. Actual: '+new String(__obj).indexOf(function(){}()) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A2_T1.js deleted file mode 100644 index 8a26c01ca..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A2_T1.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.7_A2_T1; -* @section: 15.5.4.7; -* @assertion: When length of searchString less than length of ToString(this) -1 returns; -* @description: Call "abcd".indexOf("abcdab") and check result; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if ("abcd".indexOf("abcdab")!==-1) { - $ERROR('#1: "abcd".indexOf("abcdab")===-1. Actual: '+("abcd".indexOf("abcdab"))); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A2_T2.js deleted file mode 100644 index 9d342ed2c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A2_T2.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.7_A2_T2; -* @section: 15.5.4.7; -* @assertion: When length of searchString less than length of ToString(this) -1 returns; -* @description: Call "abcd".indexOf("abcdab",0) and check result; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if ("abcd".indexOf("abcdab",0)!==-1) { - $ERROR('#1: "abcd".indexOf("abcdab",0)===-1. Actual: '+("abcd".indexOf("abcdab",0))); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A2_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A2_T3.js deleted file mode 100644 index da6d45a04..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A2_T3.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.7_A2_T3; -* @section: 15.5.4.7; -* @assertion: When length of searchString less than length of ToString(this) -1 returns; -* @description: Call "abcd".indexOf("abcdab",99) and check result; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if ("abcd".indexOf("abcdab",99)!==-1) { - $ERROR('#1: "abcd".indexOf("abcdab",99)===-1. Actual: '+("abcd".indexOf("abcdab",99))); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A2_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A2_T4.js deleted file mode 100644 index 6c5e79c1c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A2_T4.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.7_A2_T4; -* @section: 15.5.4.7; -* @assertion: When length of searchString less than length of ToString(this) -1 returns; -* @description: Call "abcd".indexOf("abcdab",NaN) and check result; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if ("abcd".indexOf("abcdab",NaN)!==-1) { - $ERROR('#1: "abcd".indexOf("abcdab",NaN)===-1. Actual: '+("abcd".indexOf("abcdab",NaN))); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A3_T1.js deleted file mode 100644 index acd90d408..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A3_T1.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.7_A3_T1; -* @section: 15.5.4.7; -* @assertion: Since we deal with max(ToInteger(pos), 0) if ToInteger(pos) less than 0 indexOf(searchString,0) returns; -* @description: Call "$$abcdabcd".indexOf("ab",NaN) and check result; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if ("$$abcdabcd".indexOf("ab",NaN)!==2) { - $ERROR('#1: "$$abcdabcd".indexOf("ab",NaN)===2. Actual: '+("$$abcdabcd".indexOf("ab",NaN))); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A3_T2.js deleted file mode 100644 index 945ebb383..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A3_T2.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.7_A3_T2; -* @section: 15.5.4.7; -* @assertion: Since we deal with max(ToInteger(pos), 0) if ToInteger(pos) less than 0 indexOf(searchString,0) returns; -* @description: Call "$$abcdabcd".indexOf("ab",eval("\"-99\"")) and check result; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if ("$$abcdabcd".indexOf("ab",eval("\"-99\""))!==2) { - $ERROR('#1: "$$abcdabcd".indexOf("ab",eval("\\"-99\\""))===2. Actual: '+("$$abcdabcd".indexOf("ab",eval("\"-99\"")))); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A3_T3.js deleted file mode 100644 index 7e314656c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A3_T3.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.7_A3_T3; -* @section: 15.5.4.7; -* @assertion: Since we deal with max(ToInteger(pos), 0) if ToInteger(pos) less than 0 indexOf(searchString,0) returns; -* @description: Call "$$abcdabcd".indexOf("ab",function(){return -Infinity;}()) and check result; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if ("$$abcdabcd".indexOf("ab", function(){return -Infinity;}())!==2) { - $ERROR('#1: "$$abcdabcd".indexOf("ab", function(){return -Infinity;}())===2. Actual: '+("$$abcdabcd".indexOf("ab", function(){return -Infinity;}()))); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A4_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A4_T1.js deleted file mode 100644 index f799682c1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A4_T1.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.7_A4_T1; -* @section: 15.5.4.7; -* @assertion: when String.prototype.indexOf(searchString, position) is called first Call ToString, giving it the this value as its argument. -* Then Call ToString(searchString) and Call ToNumber(position); -* @description: Override toString and valueOf functions, valueOf throw exception; -*/ - -var __obj = {toString:function(){return "\u0041B";}} -var __obj2 = {valueOf:function(){throw "intointeger";}} -var __str = {str__:"ABB\u0041BABAB"}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -with(__str){ - with(str__){ - try { - var x = indexOf(__obj, __obj2); - $FAIL('#1: "var x = indexOf(__obj, __obj2)" lead to throwing exception'); - } catch (e) { - if (e!=="intointeger") { - $ERROR('#1.1: Exception === "intointeger". Actual: '+e); - } - } - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A4_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A4_T2.js deleted file mode 100644 index c60f0de47..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A4_T2.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.7_A4_T2; -* @section: 15.5.4.7; -* @assertion: when String.prototype.indexOf(searchString, position) is called first Call ToString, giving it the this value as its argument. -* Then Call ToString(searchString) and Call ToNumber(position); -* @description: Override toString and valueOf functions, second toString throw exception; -*/ - -var __obj = {toString:function(){return "\u0041B";}} -var __obj2 = {valueOf:function(){return {};},toString:function(){throw "intointeger";}} -var __str = new String("ABB\u0041BABAB"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -with(__str){ - try { - var x = indexOf(__obj, __obj2); - $FAIL('#1: "var x = indexOf(__obj, __obj2)" lead to throwing exception'); - } catch (e) { - if (e!=="intointeger") { - $ERROR('#1.1: Exception === "intointeger". Actual: '+e); - } - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A4_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A4_T3.js deleted file mode 100644 index 9a757d803..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A4_T3.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.7_A4_T3; -* @section: 15.5.4.7; -* @assertion: when String.prototype.indexOf(searchString, position) is called first Call ToString, giving it the this value as its argument. -* Then Call ToString(searchString) and Call ToNumber(position); -* @description: Override toString and valueOf functions; -*/ - -var __obj = {toString:function(){return "\u0041B";}} -var __obj2 = {valueOf:function(){return {};},toString:function(){return "1";}} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if ("ABB\u0041BABAB".indexOf(__obj, __obj2)!==3) { - $ERROR('#1: var __obj = {toString:function(){return "\u0041B";}}; var __obj2 = {valueOf:function(){return {};},toString:function(){return "1";}}; "ABB\\u0041BABAB".indexOf(__obj, __obj2)===3. Actual: '+("ABB\u0041BABAB".indexOf(__obj, __obj2))); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A4_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A4_T4.js deleted file mode 100644 index 3fd019909..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A4_T4.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.7_A4_T4; -* @section: 15.5.4.7; -* @assertion: when String.prototype.indexOf(searchString, position) is called first Call ToString, giving it the this value as its argument. -* Then Call ToString(searchString) and Call ToNumber(position); -* @description: Override toString and valueOf functions, and they throw exceptions; -*/ - -var __obj = {toString:function(){throw "intostr";}}; -var __obj2 = {valueOf:function(){throw "intoint";}}; -var __instance = new Number(10001.10001); -Number.prototype.indexOf=String.prototype.indexOf; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -with(__instance){ - try { - var x = indexOf(__obj, __obj2); - $FAIL('#1: "var x = indexOf(__obj, __obj2)" lead to throwing exception'); - } catch (e) { - if (e!=="intostr") { - $ERROR('#1.1: Exception === "intostr". Actual: '+e); - } - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A4_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A4_T5.js deleted file mode 100644 index 83a3766e0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A4_T5.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.7_A4_T5; -* @section: 15.5.4.7; -* @assertion: when String.prototype.indexOf(searchString, position) is called first Call ToString, giving it the this value as its argument. -* Then Call ToString(searchString) and Call ToNumber(position); -* @description: Override toString and valueOf functions, first and second valueOf throw exception; -*/ - -var __obj = {toString:function(){return {};},valueOf:function(){throw "intostr";}}; - -var __obj2 = {valueOf:function(){throw "intointeger";}}; - -__FACTORY.prototype.indexOf = String.prototype.indexOf; - -var __instance = new __FACTORY(void 0); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try { - var x = __instance.indexOf(__obj, __obj2); - $FAIL('#1: "var x = __instance.indexOf(__obj, __obj2)" lead to throwing exception'); -} catch (e) { - if (e!=="intostr") { - $ERROR('#1.1: Exception === "intostr". Actual: '+e); - } -} -// -////////////////////////////////////////////////////////////////////////////// - -function __FACTORY( value ) { - this.value = value; - this.toString = function() { return new Number; }; - this.valueOf=function(){return this.value+""}; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A5_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A5_T1.js deleted file mode 100644 index 4bd86a5db..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A5_T1.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.7_A5_T1; -* @section: 15.5.4.7; -* @assertion: String.prototype.indexOf works properly; -* @description: Search one symbol from begin of string; -*/ - -var TEST_STRING = new String( " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~" ); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -for ( k = 0, i = 0x0020; i < 0x007e; i++, k++ ) { - if (TEST_STRING.indexOf( String.fromCharCode(i), 0 )!==k) { - $ERROR('#'+(i-0x0020)+': TEST_STRING.indexOf( String.fromCharCode('+i+'), 0 )==='+k+'. Actual: '+TEST_STRING.indexOf( String.fromCharCode(i), 0 )); - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A5_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A5_T2.js deleted file mode 100644 index 7fbc4c3cb..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A5_T2.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.7_A5_T2; -* @section: 15.5.4.7; -* @assertion: String.prototype.indexOf works properly; -* @description: Search one symbol from it`s position in the string; -*/ - -var TEST_STRING = new String( " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~" ); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -for ( k = 0, i = 0x0020; i < 0x007e; i++, k++ ) { - if (TEST_STRING.indexOf( String.fromCharCode(i), k )!==k) { - $ERROR('#'+(i-0x0020)+': TEST_STRING.indexOf( String.fromCharCode('+i+'), '+k+' )==='+k+'. Actual: '+TEST_STRING.indexOf( String.fromCharCode(i), k )); - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A5_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A5_T3.js deleted file mode 100644 index 9ee8053dc..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A5_T3.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.7_A5_T3; -* @section: 15.5.4.7; -* @assertion: String.prototype.indexOf works properly; -* @description: Search one symbol from it`s position+1 in the string; -*/ - -var TEST_STRING = new String( " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~" ); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -for ( k = 0, i = 0x0020; i < 0x007e; i++, k++ ) { - if (TEST_STRING.indexOf( String.fromCharCode(i), k+1 ) !== -1) { - $ERROR('#'+(i-0x0020)+': TEST_STRING.indexOf( String.fromCharCode('+i+'), '+(k+1)+' )===-1. Actual: '+TEST_STRING.indexOf( String.fromCharCode(i), k+1 )); - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A5_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A5_T4.js deleted file mode 100644 index 05f8b980a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A5_T4.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.7_A5_T4; -* @section: 15.5.4.7; -* @assertion: String.prototype.indexOf works properly; -* @description: Search substring from begin of string; -*/ - -var TEST_STRING = new String( " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~" ); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -for ( k = 0, i = 0x0020; i < 0x007d; i++, k++ ) { - if (TEST_STRING.indexOf( (String.fromCharCode(i)+ String.fromCharCode(i+1) + String.fromCharCode(i+2)), 0 )!==k) { - $ERROR('#'+(i-0x0020)+': TEST_STRING.indexOf( (String.fromCharCode('+i+')+ String.fromCharCode('+(i+1)+') + String.fromCharCode('+(i+2)+')), 0 )==='+k+'. Actual: '+TEST_STRING.indexOf( (String.fromCharCode(i)+ String.fromCharCode(i+1) + String.fromCharCode(i+2)), 0 )); - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A5_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A5_T5.js deleted file mode 100644 index 7914d74b6..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A5_T5.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.7_A5_T5; -* @section: 15.5.4.7; -* @assertion: String.prototype.indexOf works properly; -* @description: Search substring from it`s position in the string; -*/ - -var TEST_STRING = new String( " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~" ); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -for ( k = 0, i = 0x0020; i < 0x007d; i++, k++ ) { - if (TEST_STRING.indexOf( (String.fromCharCode(i)+ String.fromCharCode(i+1)+ String.fromCharCode(i+2)),k ) !==k) { - $ERROR('#'+(i-0x0020)+': TEST_STRING.indexOf( (String.fromCharCode('+i+')+ String.fromCharCode('+(i+1)+') + String.fromCharCode('+(i+2)+')), '+k+' )==='+k+'. Actual: '+TEST_STRING.indexOf( (String.fromCharCode(i)+ String.fromCharCode(i+1) + String.fromCharCode(i+2)), k )); - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A5_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A5_T6.js deleted file mode 100644 index 7e4571907..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A5_T6.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.7_A5_T6; -* @section: 15.5.4.7; -* @assertion: String.prototype.indexOf works properly; -* @description: Search substring from it`s position+1 in the string; -*/ - -var TEST_STRING = new String( " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~" ); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -for ( k = 0, i = 0x0020; i < 0x007d; i++, k++ ) { - if (TEST_STRING.indexOf( (String.fromCharCode(i)+ String.fromCharCode(i+1)+ String.fromCharCode(i+2)), k+1 )!== -1) { - $ERROR('#'+(i-0x0020)+': TEST_STRING.indexOf( (String.fromCharCode('+i+')+ String.fromCharCode('+(i+1)+') + String.fromCharCode('+(i+2)+')), '+(k+1)+' )=== -1. Actual: '+TEST_STRING.indexOf( (String.fromCharCode(i)+ String.fromCharCode(i+1) + String.fromCharCode(i+2)), k+1 )); - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A6.js deleted file mode 100644 index 55d2b7387..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A6.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.7_A6; -* @section: 15.5.4.7, 13.2; -* @assertion: String.prototype.indexOf has not prototype property; -* @description: Checking String.prototype.indexOf.prototype; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (String.prototype.indexOf.prototype !== undefined) { - $ERROR('#1: String.prototype.indexOf.prototype === undefined. Actual: '+String.prototype.indexOf.prototype ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A7.js deleted file mode 100644 index 5a6e7c571..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A7.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.7_A7; -* @section: 15.5.4.7, 13.2; -* @assertion: String.prototype.indexOf can't be used as constructor; -* @description: Checking if creating the String.prototype.indexOf object fails; -*/ - -__FACTORY = String.prototype.indexOf; - -try { - __instance = new __FACTORY; - $FAIL('#1: __FACTORY = String.prototype.indexOf; "__instance = new __FACTORY" lead to throwing exception'); -} catch (e) { - $PRINT(e); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A8.js deleted file mode 100644 index 46892836d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A8.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.7_A8; -* @section: 15.5.4.7; -* @assertion: The String.prototype.indexOf.length property has the attribute DontEnum; -* @description: Checking if enumerating the String.prototype.indexOf.length property fails; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#0 -if (!(String.prototype.indexOf.hasOwnProperty('length'))) { - $ERROR('#0: String.prototype.indexOf.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.indexOf.hasOwnProperty('length')); -} -// -////////////////////////////////////////////////////////////////////////////// - - -////////////////////////////////////////////////////////////////////////////// -// CHECK#1 -if (String.prototype.indexOf.propertyIsEnumerable('length')) { - $ERROR('#1: String.prototype.indexOf.propertyIsEnumerable(\'length\') return false'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -// CHECK#2 -count=0; - -for (p in String.prototype.indexOf){ - if (p==="length") count++; -} - -if (count !== 0) { - $ERROR('#2: count=0; for (p in String.prototype.indexOf){if (p==="length") count++;}; count === 0. Actual: '+count ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A9.js deleted file mode 100644 index d4b4186dc..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A9.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.7_A9; -* @section: 15.5.4.7; -* @assertion: The String.prototype.indexOf.length property has the attribute DontDelete; -* @description: Checking if deleting the String.prototype.indexOf.length property fails; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#0 -if (!(String.prototype.indexOf.hasOwnProperty('length'))) { - $FAIL('#0: String.prototype.indexOf.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.indexOf.hasOwnProperty('length')); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (delete String.prototype.indexOf.length) { - $ERROR('#1: delete String.prototype.indexOf.length raturn false'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (!(String.prototype.indexOf.hasOwnProperty('length'))) { - $FAIL('#2: delete String.prototype.indexOf.length; String.prototype.indexOf.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.indexOf.hasOwnProperty('length')); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A10.js deleted file mode 100644 index 0e7ccee49..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A10.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.8_A10; -* @section: 15.5.4.8; -* @assertion: The String.prototype.lastIndexOf.length property has the attribute ReadOnly; -* @description: Checking if varying the String.prototype.lastIndexOf.length property fails; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!(String.prototype.lastIndexOf.hasOwnProperty('length'))) { - $FAIL('#1: String.prototype.lastIndexOf.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.lastIndexOf.hasOwnProperty('length')); -} -// -////////////////////////////////////////////////////////////////////////////// - -__obj = String.prototype.lastIndexOf.length; - -String.prototype.lastIndexOf.length = function(){return "shifted";}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (String.prototype.lastIndexOf.length !== __obj) { - $ERROR('#2: __obj = String.prototype.lastIndexOf.length; String.prototype.lastIndexOf.length = function(){return "shifted";}; String.prototype.lastIndexOf.length === __obj. Actual: '+String.prototype.lastIndexOf.length ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A11.js deleted file mode 100644 index 0861b86f4..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A11.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.8_A11; -* @section: 15.5.4.8; -* @assertion: The length property of the lastIndexOf method is 1; -* @description: Checking String.prototype.lastIndexOf.length; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!(String.prototype.lastIndexOf.hasOwnProperty("length"))) { - $ERROR('#1: String.prototype.lastIndexOf.hasOwnProperty("length") return true. Actual: '+String.prototype.lastIndexOf.hasOwnProperty("length")); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (String.prototype.lastIndexOf.length !== 1) { - $ERROR('#2: String.prototype.lastIndexOf.length === 1. Actual: '+String.prototype.lastIndexOf.length ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A1_T1.js deleted file mode 100644 index 711da9358..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A1_T1.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.8_A1_T1; -* @section: 15.5.4.8; -* @assertion: String.prototype.lastIndexOf(searchString, position); -* @description: Arguments are false and true, and instance is object; -*/ - -__instance = new Object(true); - -__instance.lastIndexOf = String.prototype.lastIndexOf; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__instance.lastIndexOf(true, false) !== 0) { - $ERROR('#1: __instance = new Object(true); __instance.lastIndexOf = String.prototype.lastIndexOf; __instance.lastIndexOf(true, false) === 0. Actual: '+__instance.lastIndexOf(true, false) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A1_T10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A1_T10.js deleted file mode 100644 index 11d97a5ca..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A1_T10.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.8_A1_T10; -* @section: 15.5.4.8; -* @assertion: String.prototype.lastIndexOf(searchString, position); -* @description: Call lastIndexOf(searchString, position) function with object arguments; -*/ - -var __obj = {toString:function(){return "\u0041B";}} -var __obj2 = {valueOf:function(){return NaN;}} -var __str = "ABB\u0041BABAB"; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -with(__str){ - if (lastIndexOf(__obj, __obj2) !== 7) { - $ERROR('#1: var x; var __obj = {toString:function(){return "\u0041B";}}; var __obj2 = {valueOf:function(){return NaN;}}; var __str = "ABB\u0041BABAB";lastIndexOf(__obj, __obj2) === 7. Actual: '+lastIndexOf(__obj, __obj2) ); - } -} -// -////////////////////////////////////////////////////////////////////////////// - -var x; diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A1_T11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A1_T11.js deleted file mode 100644 index 382d966a1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A1_T11.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.8_A1_T11; -* @section: 15.5.4.8; -* @assertion: String.prototype.lastIndexOf(searchString, position); -* @description: Instance is Date(0) object; -*/ - -__instance = new Date(0); - -__instance.lastIndexOf = String.prototype.lastIndexOf; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if ((__instance.lastIndexOf('1970')) !== 11) { - $ERROR('#1: __instance = new Date(0); __instance.lastIndexOf = String.prototype.lastIndexOf; __instance.lastIndexOf(\'1970\') === 11. Actual: '+(__instance.lastIndexOf('1970')) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A1_T12.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A1_T12.js deleted file mode 100644 index ba0668b20..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A1_T12.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.8_A1_T12; -* @section: 15.5.4.8; -* @assertion: String.prototype.lastIndexOf(searchString, position); -* @description: Argument is string, and instance is array of strings; -*/ - -__instance = new Array('new','zoo','revue'); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__instance.lastIndexOf('new') !== 0) { - $ERROR('#1: __instance = new Array(\'new\',\'zoo\',\'revue\'); __instance.lastIndexOf(\'new\') === 0. Actual: '+__instance.lastIndexOf('new') ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__instance.lastIndexOf('zoo') !== 1) { - $ERROR('#2: __instance = new Array(\'new\',\'zoo\',\'revue\'); __instance.lastIndexOf(\'zoo\') === 1. Actual: '+__instance.lastIndexOf('zoo') ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A1_T2.js deleted file mode 100644 index 0d60dc627..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A1_T2.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.8_A1_T2; -* @section: 15.5.4.8; -* @assertion: String.prototype.lastIndexOf(searchString, position); -* @description: Arguments are boolean equation, function and null, and instance is Boolean object; -*/ - -__instance = new Boolean; - -__instance.lastIndexOf = String.prototype.lastIndexOf; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__instance.lastIndexOf("A"!=="\u0041", function(){return 0;}(),null) !== 0) { - $ERROR('#1: __instance = new Boolean; __instance.lastIndexOf = String.prototype.lastIndexOf; __instance.lastIndexOf("A"!=="\\u0041", function(){return 0;}(),null) === 0. Actual: '+__instance.lastIndexOf("A"!=="\u0041", function(){return 0;}(),null) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A1_T3.js deleted file mode 100644 index f6d660d70..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A1_T3.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.8_A1_T3; -* @section: 15.5.4.8; -* @assertion: String.prototype.lastIndexOf(searchString, position); -* @description: Checking by using eval; -*/ - -lastIndexOf = String.prototype.lastIndexOf; - -var __obj__pos = {valueOf:function(){return 7;}}; - -if (typeof toString === "undefined"){ - toString = Object.prototype.toString; -} - -__class__ = toString(); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (lastIndexOf(eval("\"[\""),__obj__pos)!= 0) { - $ERROR('#1: lastIndexOf(eval("\\"[\\""),__obj__pos)== 0. Actual: '+lastIndexOf(eval("\"[\""),__obj__pos)); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A1_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A1_T4.js deleted file mode 100644 index 2821d05b8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A1_T4.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.8_A1_T4; -* @section: 15.5.4.8; -* @assertion: String.prototype.lastIndexOf(searchString, position); -* @description: Call lastIndexOf(searchString, position) function without arguments of string; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -//since ToString() evaluates to "" lastIndexOf() evaluates to lastIndexOf("",0) -if ("".lastIndexOf() !== -1) { - $ERROR('#1: "".lastIndexOf() === -1. Actual: '+("".lastIndexOf()) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A1_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A1_T5.js deleted file mode 100644 index 04653e1b0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A1_T5.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.8_A1_T5; -* @section: 15.5.4.8; -* @assertion: String.prototype.lastIndexOf(searchString, position); -* @description: Call lastIndexOf(searchString, position) function with null argument of function object; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -//since ToString(null) evaluates to "null" lastIndexOf(null) evaluates to lastIndexOf("",0) -if (function(){return "gnullunazzgnull"}().lastIndexOf(null) !== 11) { - $ERROR('#1: function(){return "gnullunazzgnull"}().lastIndexOf(null) === 11. Actual: '+function(){return "gnullunazzgnull"}().lastIndexOf(null) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A1_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A1_T6.js deleted file mode 100644 index c61a0aa65..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A1_T6.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.8_A1_T6; -* @section: 15.5.4.8; -* @assertion: String.prototype.lastIndexOf(searchString, position); -* @description: Call lastIndexOf(searchString, position) function with x argument of new String object, where x is undefined variable; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -//since ToString(undefined) evaluates to "" lastIndexOf(undefined) evaluates to lastIndexOf("",0) -if (new String("undefined").lastIndexOf(x) !== 0) { - $ERROR('#1: var x; new String("undefined").lastIndexOf(x) === 0. Actual: '+new String("undefined").lastIndexOf(x) ); -} -// -////////////////////////////////////////////////////////////////////////////// - -var x; diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A1_T7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A1_T7.js deleted file mode 100644 index 97ff9b544..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A1_T7.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.8_A1_T7; -* @section: 15.5.4.8; -* @assertion: String.prototype.lastIndexOf(searchString, position); -* @description: Call lastIndexOf(searchString, position) function with undefined argument of string object; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -//since ToString(undefined) evaluates to "undefined" lastIndexOf(undefined) evaluates to lastIndexOf("undefined",0) -if (String("undefined").lastIndexOf(undefined) !== 0) { - $ERROR('#1: String("undefined").lastIndexOf(undefined) === 0. Actual: '+String("undefined").lastIndexOf(undefined) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A1_T8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A1_T8.js deleted file mode 100644 index 9bb8c0643..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A1_T8.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.8_A1_T8; -* @section: 15.5.4.8; -* @assertion: String.prototype.lastIndexOf(searchString, position); -* @description: Call lastIndexOf(searchString, position) function with void 0 argument of string object; -*/ - -__obj = {toString:function(){}}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -//since ToString(void 0) evaluates to "undefined" lastIndexOf(void 0) evaluates to lastIndexOf("undefined",0) -if (String(__obj).lastIndexOf(void 0) !== 0) { - $ERROR('#1: __obj = {toString:function(){}}; String(__obj).lastIndexOf(void 0) === 0. Actual: '+String(__obj).lastIndexOf(void 0) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A1_T9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A1_T9.js deleted file mode 100644 index 03462b4f7..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A1_T9.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.8_A1_T9; -* @section: 15.5.4.8; -* @assertion: String.prototype.lastIndexOf(searchString, position); -* @description: Call lastIndexOf(searchString, position) function with function(){}() argument of string object; -*/ - -__obj = { - valueOf:function(){}, - toString:void 0 -}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -//since ToString(undefined) evaluates to "undefined" indexOf(undefined) evaluates to indexOf("undefined") -if (new String(__obj).lastIndexOf(function(){}()) !== 0) { - $ERROR('#1: __obj = {valueOf:function(){}, toString:void 0}; new String(__obj).lastIndexOf(function(){}()) === 0. Actual: '+new String(__obj).lastIndexOf(function(){}()) ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A4_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A4_T1.js deleted file mode 100644 index 100314059..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A4_T1.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.8_A4_T1; -* @section: 15.5.4.8; -* @assertion: when String.prototype.lastIndexOf(searchString, position) is called first Call ToString, giving it the this value as its argument. -* Then Call ToString(searchString) and Call ToNumber(position); -* @description: Override toString and valueOf functions, valueOf throw exception; -*/ - -var __obj = {toString:function(){return "\u0041B";}} -var __obj2 = {valueOf:function(){throw "intointeger";}} -var __str = {str__:"ABB\u0041BABAB"}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -with(__str){ - with(str__){ - try { - var x = lastIndexOf(__obj, __obj2); - $FAIL('#1: var x = lastIndexOf(__obj, __obj2) lead to throwing exception'); - } catch (e) { - if (e!=="intointeger") { - $ERROR('#1.1: Exception === "intointeger". Actual: '+e); - } - } - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A4_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A4_T2.js deleted file mode 100644 index bbcba9e47..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A4_T2.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.8_A4_T2; -* @section: 15.5.4.8; -* @assertion: when String.prototype.lastIndexOf(searchString, position) is called first Call ToString, giving it the this value as its argument. -* Then Call ToString(searchString) and Call ToNumber(position); -* @description: Override toString and valueOf functions, second toString throw exception; -*/ - -var __obj = {toString:function(){return "\u0041B";}} -var __obj2 = {valueOf:function(){return {};},toString:function(){throw "intointeger";}} -var __str = new String("ABB\u0041BABAB"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -with(__str){ - try { - var x = lastIndexOf(__obj, __obj2); - $FAIL('#1: var x = lastIndexOf(__obj, __obj2) lead to throwing exception'); - } catch (e) { - if (e!=="intointeger") { - $ERROR('#1.1: Exception === "intointeger". Actual: '+e); - } - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A4_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A4_T3.js deleted file mode 100644 index 491ef9d47..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A4_T3.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.8_A4_T3; -* @section: 15.5.4.8; -* @assertion: when String.prototype.lastIndexOf(searchString, position) is called first Call ToString, giving it the this value as its argument. -* Then Call ToString(searchString) and Call ToNumber(position); -* @description: Override toString and valueOf functions; -*/ - -var __obj = {toString:function(){return "\u0041B";}} -var __obj2 = {valueOf:function(){return {};},toString:function(){}} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if ("ABB\u0041BABAB".lastIndexOf(__obj, __obj2)!==7) { - $ERROR('#1: var __obj = {toString:function(){return "\u0041B";}}; var __obj2 = {valueOf:function(){return {};},toString:function(){}}; "ABB\\u0041BABAB".lastIndexOf(__obj, __obj2)===7. Actual: '+("ABB\u0041BABAB".lastIndexOf(__obj, __obj2))); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A4_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A4_T4.js deleted file mode 100644 index 86e1e4220..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A4_T4.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.8_A4_T4; -* @section: 15.5.4.8; -* @assertion: when String.prototype.lastIndexOf(searchString, position) is called first Call ToString, giving it the this value as its argument. -* Then Call ToString(searchString) and Call ToNumber(position); -* @description: Override toString and valueOf functions, and they throw exceptions; -*/ - -var __obj = {toString:function(){throw "intostr";}}; -var __obj2 = {valueOf:function(){throw "intoint";}}; -var __instance = new Number(10001.10001); -Number.prototype.lastIndexOf=String.prototype.lastIndexOf; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -with(__instance){ - try { - var x = lastIndexOf(__obj, __obj2); - $FAIL('#1: var x = lastIndexOf(__obj, __obj2) lead to throwing exception'); - } catch (e) { - if (e!=="intostr") { - $ERROR('#1.1: Exception === "intostr". Actual: '+e); - } - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A4_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A4_T5.js deleted file mode 100644 index 76234fd07..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A4_T5.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.8_A4_T5; -* @section: 15.5.4.8; -* @assertion: when String.prototype.lastIndexOf(searchString, position) is called first Call ToString, giving it the this value as its argument. -* Then Call ToString(searchString) and Call ToNumber(position); -* @description: Override toString and valueOf functions, first and second valueOf throw exception; -*/ - -var __obj = {toString:function(){return {};},valueOf:function(){throw "intostr";}}; - -var __obj2 = {valueOf:function(){throw "intointeger";}}; - -__FACTORY.prototype.lastIndexOf = String.prototype.lastIndexOf; - -var __instance = new __FACTORY(void 0); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try { - var x = __instance.lastIndexOf(__obj, __obj2); - $FAIL('#1: var x = __instance.lastIndexOf(__obj, __obj2) lead to throwing exception'); -} catch (e) { - if (e!=="intostr") { - $ERROR('#1.1: Exception === "intostr". Actual: '+e); - } -} -// -////////////////////////////////////////////////////////////////////////////// - -function __FACTORY( value ) { - this.value = value; - this.toString = function() { return new Number; }; - this.valueOf=function(){return this.value+""}; -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A6.js deleted file mode 100644 index 43d7ffe84..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A6.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.8_A6; -* @section: 15.5.4.8, 13.2; -* @assertion: String.prototype.lastIndexOf has not prototype property; -* @description: Checking String.prototype.lastIndexOf.prototype; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (String.prototype.lastIndexOf.prototype !== undefined) { - $ERROR('#1: String.prototype.lastIndexOf.prototype === undefined. Actual: '+String.prototype.lastIndexOf.prototype ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A7.js deleted file mode 100644 index 9c54e08bd..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A7.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.8_A7; -* @section: 15.5.4.8, 13.2; -* @assertion: String.prototype.lastIndexOf can't be used as constructor; -* @description: Checking if creating the String.prototype.lastIndexOf object fails; -*/ - -__FACTORY = String.prototype.lastIndexOf; - -try { - __instance = new __FACTORY; - $FAIL('#1: __FACTORY = String.prototype.lastIndexOf; __instance = new __FACTORY lead to throwing exception'); -} catch (e) { - $PRINT(e); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A8.js deleted file mode 100644 index 6bf4831bf..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A8.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.8_A8; -* @section: 15.5.4.8; -* @assertion: The String.prototype.lastIndexOf.length property has the attribute DontEnum; -* @description: Checking if enumerating the String.prototype.lastIndexOf.length property fails; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#0 -if (!(String.prototype.lastIndexOf.hasOwnProperty('length'))) { - $FAIL('#0: String.prototype.lastIndexOf.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.lastIndexOf.hasOwnProperty('length')); -} -// -////////////////////////////////////////////////////////////////////////////// - - -////////////////////////////////////////////////////////////////////////////// -// CHECK#1 -if (String.prototype.lastIndexOf.propertyIsEnumerable('length')) { - $ERROR('#1: String.prototype.lastIndexOf.propertyIsEnumerable(\'length\') return false. Actual: '+String.prototype.lastIndexOf.propertyIsEnumerable('length')); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -// CHECK#2 -count=0; - -for (p in String.prototype.lastIndexOf){ - if (p==="length") count++; -} - -if (count !== 0) { - $ERROR('#2: count=0; for (p in String.prototype.lastIndexOf){if (p==="length") count++;}; count === 0. Actual: '+count ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A9.js deleted file mode 100644 index 6b017ff1c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A9.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.8_A9; -* @section: 15.5.4.8; -* @assertion: The String.prototype.lastIndexOf.length property has the attribute DontDelete; -* @description: Checking if deleting the String.prototype.lastIndexOf.length property fails; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#0 -if (!(String.prototype.lastIndexOf.hasOwnProperty('length'))) { - $FAIL('#0: String.prototype.lastIndexOf.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.lastIndexOf.hasOwnProperty('length')); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (delete String.prototype.lastIndexOf.length) { - $ERROR('#1: delete String.prototype.lastIndexOf.length return false'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (!(String.prototype.lastIndexOf.hasOwnProperty('length'))) { - $FAIL('#2: delete String.prototype.lastIndexOf.length; String.prototype.lastIndexOf.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.lastIndexOf.hasOwnProperty('length')); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.9_String.prototype.localeCompare/S15.5.4.9_A10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.9_String.prototype.localeCompare/S15.5.4.9_A10.js deleted file mode 100644 index 68963e684..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.9_String.prototype.localeCompare/S15.5.4.9_A10.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.9_A10; -* @section: 15.5.4.9; -* @assertion: The String.prototype.localeCompare.length property has the attribute ReadOnly; -* @description: Checking if varying the String.prototype.localeCompare.length property fails; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!(String.prototype.localeCompare.hasOwnProperty('length'))) { - $ERROR('#1: String.prototype.localeCompare.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.localeCompare.hasOwnProperty('length')); -} -// -////////////////////////////////////////////////////////////////////////////// - -__obj = String.prototype.localeCompare.length; - -String.prototype.localeCompare.length = function(){return "shifted";}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (String.prototype.localeCompare.length !== __obj) { - $ERROR('#2: __obj = String.prototype.localeCompare.length; String.prototype.localeCompare.length = function(){return "shifted";}; String.prototype.localeCompare.length === __obj. Actual: '+String.prototype.localeCompare.length ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.9_String.prototype.localeCompare/S15.5.4.9_A11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.9_String.prototype.localeCompare/S15.5.4.9_A11.js deleted file mode 100644 index 1ad93c2e4..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.9_String.prototype.localeCompare/S15.5.4.9_A11.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.9_A11; -* @section: 15.5.4.9; -* @assertion: The length property of the localeCompare method is 1; -* @description: Checking String.prototype.localeCompare.length; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!(String.prototype.localeCompare.hasOwnProperty("length"))) { - $ERROR('#1: String.prototype.localeCompare.hasOwnProperty("length") return true. Actual: '+String.prototype.localeCompare.hasOwnProperty("length")); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (String.prototype.localeCompare.length !== 1) { - $ERROR('#2: String.prototype.localeCompare.length === 1. Actual: '+String.prototype.localeCompare.length ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.9_String.prototype.localeCompare/S15.5.4.9_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.9_String.prototype.localeCompare/S15.5.4.9_A1_T1.js deleted file mode 100644 index 2ba261397..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.9_String.prototype.localeCompare/S15.5.4.9_A1_T1.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.9_A1_T1; -* @section: 15.5.4.9; -* @assertion: String.prototype.localeCompare(that); -* @description: This string is symbol and arguments are symbols; -*/ - -var str1 = new String("h"); -//CHECK#1 -var str2 = new String ("\x68"); -if (str1.localeCompare(str2)!==0){ - $ERROR('#1: var str1 = new String("h"); var str2 = new String ("\\x68"); str1.localeCompare(str2)===0. Actual: '+str1.localeCompare(str2)); -} - -//CHECK#2 -var str2 = new String ("\u0068"); -if (str1.localeCompare(str2)!==0){ - $ERROR('#2: var str1 = new String("h"); var str2 = new String ("\\u0068"); str1.localeCompare(str2)===0. Actual: '+str1.localeCompare(str2)); -} - -//CHECK#3 -var str2 = new String ("h"); -if (str1.localeCompare(str2)!==0){ - $ERROR('#3: var str1 = new String("h"); var str2 = new String ("h"); str1.localeCompare(str2)===0. Actual: '+str1.localeCompare(str2)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.9_String.prototype.localeCompare/S15.5.4.9_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.9_String.prototype.localeCompare/S15.5.4.9_A1_T2.js deleted file mode 100644 index 59064e193..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.9_String.prototype.localeCompare/S15.5.4.9_A1_T2.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.9_A1_T2; -* @section: 15.5.4.9; -* @assertion: String.prototype.localeCompare(that); -* @description: Call string_1.localeCompare(string_2) is equal -string_2.localeCompare(string_1); -*/ - -//CHECK#1 -var str1 = "h"; -var str2 = "H"; -if (str1.localeCompare(str2)!==-str2.localeCompare(str1)){ - $ERROR('#1.1: var str1 = "h"; var str2 = "H"; str1.localeCompare(str2)===-str2.localeCompare(str1). Actual: '+str1.localeCompare(str2)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.9_String.prototype.localeCompare/S15.5.4.9_A6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.9_String.prototype.localeCompare/S15.5.4.9_A6.js deleted file mode 100644 index 5c3c9ad86..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.9_String.prototype.localeCompare/S15.5.4.9_A6.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.9_A6; -* @section: 15.5.4.9, 13.2; -* @assertion: String.prototype.localeCompare has not prototype property; -* @description: Checking String.prototype.localeCompare.prototype; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (String.prototype.localeCompare.prototype !== undefined) { - $ERROR('#1: String.prototype.localeCompare.prototype === undefined. Actual: '+String.prototype.localeCompare.prototype ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.9_String.prototype.localeCompare/S15.5.4.9_A7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.9_String.prototype.localeCompare/S15.5.4.9_A7.js deleted file mode 100644 index 6df5c42a7..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.9_String.prototype.localeCompare/S15.5.4.9_A7.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.9_A7; -* @section: 15.5.4.9, 13.2; -* @assertion: String.prototype.localeCompare can't be used as constructor; -* @description: Checking if creating the String.prototype.localeCompare object fails; -*/ - -__FACTORY = String.prototype.localeCompare; - -try { - __instance = new __FACTORY; - $FAIL('#1: __FACTORY = String.prototype.localeCompare; __instance = new __FACTORY lead to throwing exception'); -} catch (e) {} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.9_String.prototype.localeCompare/S15.5.4.9_A8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.9_String.prototype.localeCompare/S15.5.4.9_A8.js deleted file mode 100644 index f414fc2ce..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.9_String.prototype.localeCompare/S15.5.4.9_A8.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.9_A8; -* @section: 15.5.4.9; -* @assertion: The String.prototype.localeCompare.length property has the attribute DontEnum; -* @description: Checking if enumerating the String.prototype.localeCompare.length property fails; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#0 -if (!(String.prototype.localeCompare.hasOwnProperty('length'))) { - $ERROR('#0: String.prototype.localeCompare.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.localeCompare.hasOwnProperty('length')); -} -// -////////////////////////////////////////////////////////////////////////////// - - -////////////////////////////////////////////////////////////////////////////// -// CHECK#1 -if (String.prototype.localeCompare.propertyIsEnumerable('length')) { - $ERROR('#1: String.prototype.localeCompare.propertyIsEnumerable(\'length\') return false'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -// CHECK#2 -count=0; - -for (p in String.prototype.localeCompare){ - if (p==="length") count++; -} - -if (count !== 0) { - $ERROR('#2: count=0; for (p in String.prototype.localeCompare){if (p==="length") count++;}; count === 0. Actual: '+count ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.9_String.prototype.localeCompare/S15.5.4.9_A9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.9_String.prototype.localeCompare/S15.5.4.9_A9.js deleted file mode 100644 index b5e0aa914..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/15.5.4.9_String.prototype.localeCompare/S15.5.4.9_A9.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.9_A9; -* @section: 15.5.4.9; -* @assertion: The String.prototype.localeCompare.length property has the attribute DontDelete; -* @description: Checking if deleting the String.prototype.localeCompare.length property fails; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#0 -if (!(String.prototype.localeCompare.hasOwnProperty('length'))) { - $ERROR('#0: String.prototype.localeCompare.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.localeCompare.hasOwnProperty('length')); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (delete String.prototype.localeCompare.length) { - $ERROR('#1: delete String.prototype.localeCompare.length return false'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (!(String.prototype.localeCompare.hasOwnProperty('length'))) { - $ERROR('#2: delete String.prototype.localeCompare.length; String.prototype.localeCompare.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.localeCompare.hasOwnProperty('length')); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/S15.5.4.1_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/S15.5.4.1_A1_T1.js deleted file mode 100644 index 39c876071..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/S15.5.4.1_A1_T1.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.1_A1_T1; -* @section: 15.5.4.1; -* @assertion: The initial value of String.prototype.constructor is the built-in String constructor; -* @description: Checking String.prototype.constructor; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (String.prototype.constructor !== String) { - $ERROR('#1: String.prototype.constructor === String. Actual: String.prototype.constructor ==='+String.prototype.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/S15.5.4.1_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/S15.5.4.1_A1_T2.js deleted file mode 100644 index 471f7958c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/S15.5.4.1_A1_T2.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.1_A1_T2; -* @section: 15.5.4.1; -* @assertion: The initial value of String.prototype.constructor is the built-in String constructor; -* @description: Create new String.prototype.constructor object and check it; -*/ - -__constr = String.prototype.constructor; - -__instance = new __constr("choosing one"); - -////////////////////////////////////////////////////////////////////////////// -// CHECK#0 -if (__instance !="choosing one") { - $ERROR('#0: __constr = String.prototype.constructor; __instance = new __constr("choosing one"); __instance =="choosing one". Actual: __instance =='+__instance ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -// CHECK#1 -if (__instance.constructor !== String) { - $ERROR('#1: __constr = String.prototype.constructor; __instance = new __constr("choosing one"); __instance.constructor === String. Actual: __instance.constructor ==='+__instance.constructor ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -// CHECK#2 -if (!(String.prototype.isPrototypeOf(__instance))) { - $ERROR('#2: __constr = String.prototype.constructor; __instance = new __constr("choosing one"); String.prototype.isPrototypeOf(__instance) return true. Actual: '+String.prototype.isPrototypeOf(__instance)); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -// CHECK#3 -__to_string_result = '[object '+ 'String' +']'; - -delete String.prototype.toString; - -if (__instance.toString() !== __to_string_result) { - $ERROR('#3: __constr = String.prototype.constructor; __instance = new __constr("choosing one"); delete String.prototype.toString; __instance.toString() === __to_string_result. Actual: __instance.toString() ==='+__instance.toString()+' __to_string_result ==='+__to_string_result ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/S15.5.4.2_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/S15.5.4.2_A1_T1.js deleted file mode 100644 index edb72c8a5..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/S15.5.4.2_A1_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.2_A1_T1; -* @section: 15.5.4.2; -* @assertion: String.prototype.toString() returns this string value; -* @description: Create new String(number) and check it`s method toString(); -*/ - -__string__obj = new String(1); - -////////////////////////////////////////////////////////////////////////////// -//CHECK# -if (__string__obj.toString() !== ""+1) { - $ERROR('#1: __string__obj = new String(1); __string__obj.toString() === ""+1. Actual: __string__obj.toString() ==='+__string__obj.toString() ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/S15.5.4.2_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/S15.5.4.2_A1_T2.js deleted file mode 100644 index 2b2db4ac4..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/S15.5.4.2_A1_T2.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.2_A1_T2; -* @section: 15.5.4.2; -* @assertion: String.prototype.toString() returns this string value; -* @description: Create new String(boolean) and check it`s method toString(); -*/ - -__string__obj = new String(true); - -////////////////////////////////////////////////////////////////////////////// -//CHECK# -if (__string__obj.toString() !== ""+true) { - $ERROR('#1: __string__obj = new String(true); __string__obj.toString() === ""+true. Actual: __string__obj.toString() ==='+__string__obj.toString() ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/S15.5.4.2_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/S15.5.4.2_A1_T3.js deleted file mode 100644 index 65d72553d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/S15.5.4.2_A1_T3.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.2_A1_T3; -* @section: 15.5.4.2; -* @assertion: String.prototype.toString() returns this string value; -* @description: Create new String(string) and check it`s method toString(); -*/ - -__string__obj = new String("metal"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK# -if (__string__obj.toString() !== "metal") { - $ERROR('#1: __string__obj = new String("metal"); __string__obj.toString() === "metal". Actual: __string__obj.toString() ==='+__string__obj.toString() ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/S15.5.4.2_A1_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/S15.5.4.2_A1_T4.js deleted file mode 100644 index dac94c560..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/S15.5.4.2_A1_T4.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.2_A1_T4; -* @section: 15.5.4.2; -* @assertion: String.prototype.toString() returns this string value; -* @description: Create new String(function(){}()) and check it`s method toString(); -*/ - -__string__obj = new String(function(){}()); - -////////////////////////////////////////////////////////////////////////////// -//CHECK# -if (__string__obj.toString() !== "undefined") { - $ERROR('#1: __string__obj = new String(function(){}()); __string__obj.toString() === "undefined". Actual: __string__obj.toString() ==='+__string__obj.toString() ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/S15.5.4.2_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/S15.5.4.2_A2_T1.js deleted file mode 100644 index bfc046523..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/S15.5.4.2_A2_T1.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.2_A2_T1; -* @section: 15.5.4.2; -* @assertion: The toString function is not generic; it throws a TypeError exception if its this value is not a String object. Therefore, it cannot be transferred to other kinds of objects for use as a method; -* @description: Checking if creating variable String.prototype.toString fails; -*/ - -__toString = String.prototype.toString; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __toString !== "function") { - $ERROR('#1: __toString = String.prototype.toString; typeof __toString === "function". Actual: typeof __toString ==='+typeof __toString ); -} - -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -try { - var x = __toString(); - $FAIL('#2: "__toString = String.prototype.toString; var x = __toString();" lead to throwing exception'); -} catch (e) { - if (!(e instanceof TypeError)) { - $ERROR('#2.1: "__toString = String.prototype.toString; var x = __toString();" lead to throwing exception. Exception is instance of TypeError. Actual: exception is '+e); - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/S15.5.4.2_A2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/S15.5.4.2_A2_T2.js deleted file mode 100644 index ea7198c72..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/S15.5.4.2_A2_T2.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.2_A2_T2; -* @section: 15.5.4.2; -* @assertion: The toString function is not generic; it throws a TypeError exception if its this value is not a String object. Therefore, it cannot be transferred to other kinds of objects for use as a method; -* @description: Checking if creating the object String.prototype.toString fails; -*/ - -var __obj={toString : String.prototype.toString}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __obj["toString"] !== "function") { - $ERROR('#1: var __obj={toString : String.prototype.toString}; typeof __obj["toString"] === "function". Actual: typeof __obj["toString"] ==='+typeof __obj["toString"] ); -} - -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -try { - var x = (__obj == 1); - $FAIL('#2: "var x = (__obj == 1)" lead to throwing exception'); -} catch (e) { - if (!(e instanceof TypeError)) { - $ERROR('#2.1: Exception is instance of TypeError. Actual: exception is '+e); - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/S15.5.4.2_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/S15.5.4.2_A3_T1.js deleted file mode 100644 index 9be1f9707..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/S15.5.4.2_A3_T1.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.2_A3_T1; -* @section: 15.5.4.2, 15.5.4.3; -* @assertion: String.prototype.toString() is equal String.prototype.valueOf(); -* @description: Create new String() with various arguments and compare returned results of toString() and valueOf(); -*/ - -//CHECK#1 -str = new String(); -if(!(str.valueOf() == str.toString())) - $ERROR('#1: str = new String(),str.valueOf() == str.toString()'); - -//CHECK#2 -str = new String(true); -if(!(str.valueOf() == str.toString())) - $ERROR('#2: str = new String(true),str.valueOf() == str.toString()'); - -//CHECK#3 -str = new String(false); -if(!(str.valueOf() == str.toString())) - $ERROR('#3: str = new String(false),str.valueOf() == str.toString()'); - -//CHECK#4 -str = new String(Math.PI); -if(!(str.valueOf() == str.toString())) - $ERROR('#4: str = new String(Math.PI),str.valueOf() == str.toString()'); diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/S15.5.4.2_A4_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/S15.5.4.2_A4_T1.js deleted file mode 100644 index ae513dcc4..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/S15.5.4.2_A4_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.2_A4_T1; -* @section: 15.5.4.2; -* @assertion: String.prototype.toString have length property and it is equal 0; -* @description: Checking String.prototype.toString.length property; -*/ - -//CHECK#1 -if (String.prototype.toString.hasOwnProperty('length')!==true){ - $ERROR('#1: String.prototype.toString.hasOwnProperty(\'length\')===true. Actual: '+String.prototype.toString.hasOwnProperty('length')); -} -else{ -//CHECK#2 -if (String.prototype.toString.length!==0) - $ERROR('#2: String.prototype.toString.length===0. Actual: String.prototype.toString.length==='+String.prototype.toString.length); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/S15.5.4.3_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/S15.5.4.3_A1_T1.js deleted file mode 100644 index 142d718c6..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/S15.5.4.3_A1_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.3_A1_T1; -* @section: 15.5.4.3; -* @assertion: String.prototype.valueOf() returns this string value; -* @description: Create String object as new String(1) and check it`s valueOf(); -*/ - -__string__obj = new String(1); - -////////////////////////////////////////////////////////////////////////////// -//CHECK# -if (__string__obj.valueOf() !== ""+1) { - $ERROR('#1: __string__obj = new String(1); __string__obj.valueOf() === ""+1. Actual: __string__obj.valueOf() ==='+__string__obj.valueOf() ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/S15.5.4.3_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/S15.5.4.3_A1_T2.js deleted file mode 100644 index 2b922152f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/S15.5.4.3_A1_T2.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.3_A1_T2; -* @section: 15.5.4.3; -* @assertion: String.prototype.valueOf() returns this string value; -* @description: Create String object as new String(true) and check it`s valueOf(); -*/ - -__string__obj = new String(true); - -////////////////////////////////////////////////////////////////////////////// -//CHECK# -if (__string__obj.valueOf() !== ""+true) { - $ERROR('#1: __string__obj = new String(true); __string__obj.valueOf() === ""+true. Actual: __string__obj.valueOf() ==='+__string__obj.valueOf() ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/S15.5.4.3_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/S15.5.4.3_A1_T3.js deleted file mode 100644 index e7524b659..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/S15.5.4.3_A1_T3.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.3_A1_T3; -* @section: 15.5.4.3; -* @assertion: String.prototype.valueOf() returns this string value; -* @description: Create String object as new String(string) and check it`s valueOf(); -*/ - -__string__obj = new String("metal"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK# -if (__string__obj.valueOf() !== "metal") { - $ERROR('#1: __string__obj = new String("metal"); __string__obj.valueOf() === "metal". Actual: __string__obj.valueOf() ==='+__string__obj.valueOf() ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/S15.5.4.3_A1_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/S15.5.4.3_A1_T4.js deleted file mode 100644 index 4ff68c4b7..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/S15.5.4.3_A1_T4.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.3_A1_T4; -* @section: 15.5.4.3; -* @assertion: String.prototype.valueOf() returns this string value; -* @description: Create String object as new String(function(){}()) and check it`s valueOf(); -*/ - -__string__obj = new String(function(){}()); - -////////////////////////////////////////////////////////////////////////////// -//CHECK# -if (__string__obj.valueOf() !== "undefined") { - $ERROR('#1: __string__obj = new String(function(){}()); __string__obj.valueOf() === "undefined". Actual: __string__obj.valueOf() ==='+__string__obj.valueOf() ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/S15.5.4.3_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/S15.5.4.3_A2_T1.js deleted file mode 100644 index c783b46a6..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/S15.5.4.3_A2_T1.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.3_A2_T1; -* @section: 15.5.4.3; -* @assertion: The valueOf function is not generic; it throws a TypeError exception if its this value is not a String object. -* Therefore, it cannot be transferred to other kinds of objects for use as a method; -* @description: Checking if creating variable String.prototype.valueOf fails; -*/ - -__valueOf = String.prototype.valueOf; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __valueOf !== "function") { - $ERROR('#1: __valueOf = String.prototype.valueOf; typeof __valueOf === "function". Actual: typeof __valueOf ==='+typeof __valueOf ); -} - -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -try { - var x = __valueOf(); - $FAIL('#2: "__valueOf = String.prototype.valueOf; var x = __valueOf()" lead to throwing exception'); -} catch (e) { - if (!(e instanceof TypeError)) { - $ERROR('#2.1: Exception is instance of TypeError. Actual: exception is '+e); - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/S15.5.4.3_A2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/S15.5.4.3_A2_T2.js deleted file mode 100644 index 7e1461f94..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/S15.5.4.3_A2_T2.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.3_A2_T2; -* @section: 15.5.4.3; -* @assertion: The valueOf function is not generic; it throws a TypeError exception if its this value is not a String object. -* Therefore, it cannot be transferred to other kinds of objects for use as a method; -* @description: Checking if creating the object String.prototype.valueOf fails; -*/ - -var __obj={valueOf : String.prototype.valueOf}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __obj["valueOf"] !== "function") { - $ERROR('#1: var __obj={valueOf : String.prototype.valueOf}; typeof __obj["valueOf"] === "function". Actual: typeof __obj["valueOf"] ==='+typeof __obj["valueOf"] ); -} - -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -try { - var x = (__obj == 1); - $FAIL('#2: "var __obj={valueOf : String.prototype.valueOf}; var x = (__obj == 1)" lead to throwing exception'); -} catch (e) { - if (!(e instanceof TypeError)) { - $ERROR('#2.1: Exception is instance of TypeError. Actual: exception is '+e); - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/S15.5.4_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/S15.5.4_A1.js deleted file mode 100644 index 6b12fb34c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/S15.5.4_A1.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4_A1; -* @section: 15.5.4; -* @assertion: The String prototype object is itself a String object (its [[Class]] is "String"); -* @description: first we delete String.prototype.toString cause it overrides Object prototype toString. -* Object.prototype.toString returns [object+[[class]]+]; -*/ - -delete String.prototype.toString; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (String.prototype.toString() !== "[object "+"String"+"]") { - $ERROR('#1: delete String.prototype.toString; String.prototype.toString() === "[object "+"String"+"]". Actual: String.prototype.toString() ==='+String.prototype.toString() ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/S15.5.4_A2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/S15.5.4_A2.js deleted file mode 100644 index a0b501383..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/S15.5.4_A2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4_A2; -* @section: 15.5.4; -* @assertion: The String prototype object is itself a String object whose value is an empty string; -* @description: Checking String.prototype; -*/ - - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (String.prototype !="") { - $ERROR('#1: String.prototype =="". Actual: String.prototype =='+String.prototype ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/S15.5.4_A3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/S15.5.4_A3.js deleted file mode 100644 index 36baa1ac2..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.4_Properties_of_the_String_Prototype_Object/S15.5.4_A3.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4_A3; -* @section: 15.5.4, 15.2.3.1; -* @assertion: The value of the internal [[Prototype]] property of the String prototype object is the Object prototype object (15.2.3.1); -* @description: Checking Object.prototype.isPrototypeOf(String.prototype); -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!(Object.prototype.isPrototypeOf(String.prototype))) { - $ERROR('#1: Object.prototype.isPrototypeOf(String.prototype) return true. Actual: '+Object.prototype.isPrototypeOf(String.prototype)); -} -// -////////////////////////////////////////////////////////////////////////////// - -delete String.prototype.toString; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (String.prototype.toString() != "[object "+"String"+"]") { - $ERROR('#2: delete String.prototype.toString; String.prototype.toString() == "[object "+"String"+"]". Actual: String.prototype.toString() =='+String.prototype.toString() ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.5_Properties_of_String_Instances/S15.5.5.1_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.5_Properties_of_String_Instances/S15.5.5.1_A1.js deleted file mode 100644 index 82ccd48e9..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.5_Properties_of_String_Instances/S15.5.5.1_A1.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.5.1_A1; -* @section: 15.5.5.1; -* @assertion: length property contains the number of characters in the String value represented by this String object; -* @description: Create strings and check its length; -*/ - -var __str__instance = new String("ABC\u0041\u0042\u0043"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__str__instance.length !== 6) { - $ERROR('#1: var __str__instance = new String("ABC\\u0041\\u0042\\u0043"); __str__instance.length === 6, where __str__instance is new String("ABC\\u0041\\u0042\\u0043"). Actual: __str__instance.length ==='+__str__instance.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -__str__instance = new String; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__str__instance.length !== 0) { - $ERROR('#2: __str__instance = new String; __str__instance.length === 0, where __str__instance is new String. Actual: __str__instance.length ==='+__str__instance.length ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.5_Properties_of_String_Instances/S15.5.5.1_A2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.5_Properties_of_String_Instances/S15.5.5.1_A2.js deleted file mode 100644 index 592b089e5..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.5_Properties_of_String_Instances/S15.5.5.1_A2.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.5.1_A2; -* @section: 15.5.5.1; -* @assertion: length property has the attributes {DontEnum}; -* @description: Checking if enumerating the length property of String fails; -*/ - -var __str__instance = new String("globglob"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!(__str__instance.hasOwnProperty("length"))) { - $ERROR('#1: var __str__instance = new String("globglob"); __str__instance.hasOwnProperty("length") return true. Actual: '+__str__instance.hasOwnProperty("length")); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -for(prop in __str__instance){ - if (prop === "length") { - $ERROR('#2: length property has the attributes {DontEnum}'); - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.5_Properties_of_String_Instances/S15.5.5.1_A3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.5_Properties_of_String_Instances/S15.5.5.1_A3.js deleted file mode 100644 index 95e03a952..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.5_Properties_of_String_Instances/S15.5.5.1_A3.js +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.5.1_A3; -* @section: 15.5.5.1; -* @assertion: length property has the attributes {DontDelete}; -* @description: Checking if deleting the length property of String fails; -*/ - -var __str__instance = new String("globglob"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!(__str__instance.hasOwnProperty("length"))) { - $ERROR('#1: var __str__instance = new String("globglob"); __str__instance.hasOwnProperty("length") return true. Actual: '+__str__instance.hasOwnProperty("length")); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (delete __str__instance === true) { - $ERROR('#2: var __str__instance = new String("globglob"); delete __str__instance !== true'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (!(__str__instance.hasOwnProperty("length"))) { - $ERROR('#3: var __str__instance = new String("globglob"); delete __str__instance; __str__instance.hasOwnProperty("length") return true. Actual: '+__str__instance.hasOwnProperty("length")); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.5_Properties_of_String_Instances/S15.5.5.1_A4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.5_Properties_of_String_Instances/S15.5.5.1_A4.js deleted file mode 100644 index 4901eed6a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.5_Properties_of_String_Instances/S15.5.5.1_A4.js +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.5.1_A4; -* @section: 15.5.5.1; -* @assertion: length property has the attributes {ReadOnly}; -* @description: Checking if varying the length property of String fails; -*/ - -var __str__instance = new String("globglob"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!(__str__instance.hasOwnProperty("length"))) { - $ERROR('#1: var __str__instance = new String("globglob"); __str__instance.hasOwnProperty("length") return true. Actual: '+__str__instance.hasOwnProperty("length")); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__str__instance.length !== 8) { - $ERROR('#2: var __str__instance = new String("globglob"); __str__instance.length === 8. Actual: __str__instance.length ==='+__str__instance.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -__str__instance.length=-1; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__str__instance.length !== 8) { - $ERROR('#3: var __str__instance = new String("globglob"); __str__instance.length=-1; __str__instance.length === 8(after redefine length property). Actual: __str__instance.length ==='+__str__instance.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -with(__str__instance) - length = 0; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (__str__instance.length !== 8) { - $ERROR('#4: var __str__instance = new String("globglob"); with(__str__instance) length = 0; __str__instance.length === 8(after redefine length property with using "with"). Actual: __str__instance.length ==='+__str__instance.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -__str__instance.length++; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#5 -if (__str__instance.length !== 8) { - $ERROR('#5: var __str__instance = new String("globglob"); __str__instance.length++; __str__instance.length === 8(after redefine length property with using "++"). Actual: __str__instance.length ==='+__str__instance.length ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.5_Properties_of_String_Instances/S15.5.5.1_A5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.5_Properties_of_String_Instances/S15.5.5.1_A5.js deleted file mode 100644 index f02edf120..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.5_Properties_of_String_Instances/S15.5.5.1_A5.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.5.1_A5; -* @section: 15.5.5.1; -* @assertion: Once a String object is created, the length property is unchanging; -* @description: Change valueOf and toString of String object and check length property; -*/ - -var __str__instance = new String("ABC\u0041\u0042\u0043"); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__str__instance.length !== 6) { - $ERROR('#1: var __str__instance = new String("ABC\\u0041\\u0042\\u0043"); __str__instance.length === 6. Actual: __str__instance.length ==='+__str__instance.length ); -} -// -////////////////////////////////////////////////////////////////////////////// - -__str__instance.valueOf = function(){return "ed"}; -__str__instance.toString = function(){return "ed"}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__str__instance !="ed") { - $ERROR('#2: var __str__instance = new String("ABC\\u0041\\u0042\\u0043"); __str__instance.valueOf = function(){return "ed"}; __str__instance.toString = function(){return "ed"}; __str__instance =="ed". Actual: __str__instance =='+__str__instance ); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__str__instance.length !== 6) { - $ERROR('#3: var __str__instance = new String("ABC\\u0041\\u0042\\u0043"); __str__instance.valueOf = function(){return "ed"}; __str__instance.toString = function(){return "ed"}; __str__instance.length === 6. Actual: __str__instance.length ==='+__str__instance.length ); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.5_Properties_of_String_Instances/S15.5.5_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.5_Properties_of_String_Instances/S15.5.5_A1_T1.js deleted file mode 100644 index 808dcd252..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.5_Properties_of_String_Instances/S15.5.5_A1_T1.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.5_A1_T1; -* @section: 15.5.5; -* @assertion: String instance has not [[call]] property; -* @description: Create new String and try call it; -*/ - -__str = new String; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try { - __str(); - $FAIL('#1: __str = new String; __str() lead to throwing exception'); -} catch (e) { - if (!(e instanceof TypeError)) { - $ERROR('#1.1: Exception is instance of TypeError. Actual: exception is '+e); - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.5_Properties_of_String_Instances/S15.5.5_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.5_Properties_of_String_Instances/S15.5.5_A1_T2.js deleted file mode 100644 index 4e2ba8b44..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.5_Properties_of_String_Instances/S15.5.5_A1_T2.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.5_A1_T2; -* @section: 15.5.5; -* @assertion: String instance has not [[call]] property; -* @description: Checking if creating new "String("a|b")()" fails; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try { - String("a|b")(); - $FAIL('#1: String("a|b")() lead to throwing exception'); -} catch (e) { - if (!(e instanceof TypeError)) { - $ERROR('#1.1: Exception is instance of TypeError. Actual: exception is '+e); - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.5_Properties_of_String_Instances/S15.5.5_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.5_Properties_of_String_Instances/S15.5.5_A2_T1.js deleted file mode 100644 index e07174c11..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.5_Properties_of_String_Instances/S15.5.5_A2_T1.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.5_A2_T1; -* @section: 15.5.5; -* @assertion: String instance has not [[construct]] property; -* @description: Create new string object and try new created_string; -*/ - -__str = new Object(""); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try { - new __str; - $FAIL('#1: __str = new Object(""); "new __str" lead to throwing exception'); -} catch (e) { - if (!(e instanceof TypeError)) { - $ERROR('#1.1: Exception is instance of TypeError. Actual: exception is '+e); - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.5_Properties_of_String_Instances/S15.5.5_A2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.5_Properties_of_String_Instances/S15.5.5_A2_T2.js deleted file mode 100644 index c026f5c1d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.5_String_Objects/15.5.5_Properties_of_String_Instances/S15.5.5_A2_T2.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.5_A2_T2; -* @section: 15.5.5; -* @assertion: String instance has not [[construct]] property; -* @description: Checking if creating "new String" fails; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try { - new new String; - $FAIL('#1: "new new String" lead to throwing exception'); -} catch (e) { - if (!(e instanceof TypeError)) { - $ERROR('#1.1: Exception is instance of TypeError. Actual: exception is '+e); - } -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.1_The_Boolean_Constructor_Called_as_a_Function/S15.6.1.1_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.1_The_Boolean_Constructor_Called_as_a_Function/S15.6.1.1_A1_T1.js deleted file mode 100644 index 16246b837..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.1_The_Boolean_Constructor_Called_as_a_Function/S15.6.1.1_A1_T1.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.6.1.1_A1_T1; - * @section: 15.6.1.1; - * @assertion: Returns a boolean value (not a Boolean object) computed by - * ToBoolean(value); - * @description: Used values 1, new String("1"), new Object(1) and called without argument; -*/ - -//CHECK#1 -if( typeof Boolean() !== "boolean" ) { - $ERROR('#1: typeof Boolean() should be "boolean", actual is "'+typeof Boolean()+'"'); -} - -//CHECK#2 -if( typeof Boolean(1) !== "boolean" ) { - $ERROR('#2: typeof Boolean(1) should be "boolean", actual is "'+typeof Boolean(1)+'"'); -} - -//CHECK#3 -if( typeof Boolean(new String("1")) !== "boolean" ) { - $ERROR('#3: typeof Boolean(new String("1")) should be "boolean", actual is "'+typeof Boolean(new String("1"))+'"'); -} - -//CHECK#4 -if( typeof Boolean(new Object(1)) !== "boolean" ) { - $ERROR('#4: typeof Boolean(new Object(1)) should be "boolean", actual is "'+typeof Boolean(new Object(1))+'"'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.1_The_Boolean_Constructor_Called_as_a_Function/S15.6.1.1_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.1_The_Boolean_Constructor_Called_as_a_Function/S15.6.1.1_A1_T2.js deleted file mode 100644 index 3e4822bc9..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.1_The_Boolean_Constructor_Called_as_a_Function/S15.6.1.1_A1_T2.js +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.6.1.1_A1_T2; - * @section: 15.6.1.1; - * @assertion: Returns a boolean value (not a Boolean object) computed by - * ToBoolean(value); - * @description: Used various number values as argument; -*/ - -//CHECK#1 -if( typeof Boolean(0) !== "boolean" ) { - $ERROR('#1.1: typeof Boolean(0) should be "boolean", actual is "'+typeof Boolean(0)+'"'); -} -if( Boolean(0) !== false ) { - $ERROR('#1.2: Boolean(0) should be false, actual is '+Boolean(0)); -} - -//CHECK#2 -if( typeof Boolean(-1) !== "boolean" ) { - $ERROR('#2.1: typeof Boolean(-1) should be "boolean", actual is "'+typeof Boolean(-1)+'"'); -} -if( Boolean(-1) !== true ) { - $ERROR('#2.2: Boolean(-1) should be true, actual is '+Boolean(-1)); -} - -//CHECK#3 -if( typeof Boolean(-Infinity) !== "boolean" ) { - $ERROR('#3.1: typeof Boolean(-Infinity) should be "boolean", actual is "'+typeof Boolean(-Infinity)+'"'); -} -if( Boolean(-Infinity) !== true ) { - $ERROR('#3.2: Boolean(-Infinity) should be true, actual is '+Boolean(-Infinity)); -} - -//CHECK#4 -if( typeof Boolean(NaN) !== "boolean" ) { - $ERROR('#4.1: typeof Boolean(NaN) should be "boolean", actual is "'+typeof Boolean(NaN)+'"'); -} -if( Boolean(NaN) !== false ) { - $ERROR('#4.2: Boolean(NaN) should be false, actual is '+Boolean(NaN)); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.1_The_Boolean_Constructor_Called_as_a_Function/S15.6.1.1_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.1_The_Boolean_Constructor_Called_as_a_Function/S15.6.1.1_A1_T3.js deleted file mode 100644 index d34d60503..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.1_The_Boolean_Constructor_Called_as_a_Function/S15.6.1.1_A1_T3.js +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.6.1.1_A1_T3; - * @section: 15.6.1.1; - * @assertion: Returns a boolean value (not a Boolean object) computed by - * ToBoolean(value); - * @description: Used various string values as argument; -*/ - -//CHECK#1 -if( typeof Boolean("0") !== "boolean" ) { - $ERROR('#1.1: typeof Boolean("0") should be "boolean", actual is "'+typeof Boolean("0")+'"'); -} -if( Boolean("0") !== true ) { - $ERROR('#1.2: Boolean("0") should be true'); -} - -//CHECK#2 -if( typeof Boolean("-1") !== "boolean" ) { - $ERROR('#2.1: typeof Boolean("-1") should be "boolean", actual is "'+typeof Boolean("-1")+'"'); -} -if( Boolean("-1") !== true ) { - $ERROR('#2.2: Boolean("-1") should be true'); -} - -//CHECK#3 -if( typeof Boolean("1") !== "boolean" ) { - $ERROR('#3.1: typeof Boolean("1") should be "boolean", actual is "'+typeof Boolean("1")+'"'); -} -if( Boolean("1") !== true ) { - $ERROR('#3.2: Boolean("1") should be true'); -} - -//CHECK#4 -if( typeof Boolean("false") !== "boolean" ) { - $ERROR('#4.1: typeof Boolean("false") should be "boolean", actual is "'+typeof Boolean("false")+'"'); -} -if( Boolean("false") !== true ) { - $ERROR('#4.2: Boolean("false") should be true'); -} - -//CHECK#5 -if( typeof Boolean("true") !== "boolean" ) { - $ERROR('#5.1: typeof Boolean("true") should be "boolean", actual is "'+typeof Boolean("true")+'"'); -} -if( Boolean("true") !== true ) { - $ERROR('#5.2: Boolean("true") should be true'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.1_The_Boolean_Constructor_Called_as_a_Function/S15.6.1.1_A1_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.1_The_Boolean_Constructor_Called_as_a_Function/S15.6.1.1_A1_T4.js deleted file mode 100644 index 468b8f11f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.1_The_Boolean_Constructor_Called_as_a_Function/S15.6.1.1_A1_T4.js +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.6.1.1_A1_T4; - * @section: 15.6.1.1; - * @assertion: Returns a boolean value (not a Boolean object) computed by - * ToBoolean(value); - * @description: Used various undefined values and null as argument; -*/ - -//CHECK#1 -if( typeof Boolean(undefined) !== "boolean" ) { - $ERROR('#1.1: typeof Boolean(undefined) should be "boolean", actual is "'+typeof Boolean(undefined)+'"'); -} -if( Boolean(undefined) !== false ) { - $ERROR('#1.2: Boolean(undefined) should be false'); -} - -//CHECK#2 -if( typeof Boolean(void 0) !== "boolean" ) { - $ERROR('#2.1: typeof Boolean(void 0) should be "boolean", actual is "'+typeof Boolean(void 0)+'"'); -} -if( Boolean(void 0) !== false ) { - $ERROR('#2.2: Boolean(void 0) should be false'); -} - -//CHECK#3 -if( typeof Boolean(function(){}()) !== "boolean" ) { - $ERROR('#3.1: typeof Boolean(function(){}()) should be "boolean", actual is "'+typeof Boolean(function(){}())+'"'); -} -if( Boolean(function(){}()) !== false ) { - $ERROR('#3.2: Boolean(function(){}()) should be false'); -} - -//CHECK#4 -if( typeof Boolean(null) !== "boolean" ) { - $ERROR('#4.1: typeof Boolean(null) should be "boolean", actual is "'+typeof Boolean(null)+'"'); -} -if( Boolean(null) !== false ) { - $ERROR('#4.2: Boolean(null) should be false'); -} - -//CHECK#5 -if( typeof Boolean(x) !== "boolean" ) { - $ERROR('#5.1: var x; typeof Boolean(x) should be "boolean", actual is "'+typeof Boolean(x)+'"'); -} -if( Boolean(x) !== false ) { - $ERROR('#5.2: var x; Boolean(x) should be false'); -} -var x; diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.1_The_Boolean_Constructor_Called_as_a_Function/S15.6.1.1_A1_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.1_The_Boolean_Constructor_Called_as_a_Function/S15.6.1.1_A1_T5.js deleted file mode 100644 index d86561e14..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.1_The_Boolean_Constructor_Called_as_a_Function/S15.6.1.1_A1_T5.js +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.6.1.1_A1_T5; - * @section: 15.6.1.1; - * @assertion: Returns a boolean value (not a Boolean object) computed by - * ToBoolean(value); - * @description: Used various assigning values to any variable as argument; -*/ - -//CHECK#1 -if( typeof Boolean(x=0) !== "boolean" ) { - $ERROR('#1.1: typeof Boolean(x=0) should be "boolean", actual is "'+typeof Boolean(x=0)+'"'); -} -if( Boolean(x=0) !== false ) { - $ERROR('#1.2: Boolean(x=0) should be false'); -} - -//CHECK#2 -if( typeof Boolean(x=1) !== "boolean" ) { - $ERROR('#2.1: typeof Boolean(x=1) should be "boolean", actual is "'+typeof Boolean(x=1)+'"'); -} -if( Boolean(x=1) !== true ) { - $ERROR('#2.2: Boolean(x=1) should be true'); -} - -//CHECK#3 -if( typeof Boolean(x=false) !== "boolean" ) { - $ERROR('#3.1: typeof Boolean(x=false) should be "boolean", actual is "'+typeof Boolean(x=false)+'"'); -} -if( Boolean(x=false) !== false ) { - $ERROR('#3.2: Boolean(x=false) should be false'); -} - -//CHECK#4 -if( typeof Boolean(x=true) !== "boolean" ) { - $ERROR('#4.1: typeof Boolean(x=true) should be "boolean", actual is "'+typeof Boolean(x=true)+'"'); -} -if( Boolean(x=true) !== true ) { - $ERROR('#4.2: Boolean(x=true) should be true'); -} - -//CHECK#5 -if( typeof Boolean(x=null) !== "boolean" ) { - $ERROR('#5.1: typeof Boolean(x=null) should be "boolean", actual is "'+typeof Boolean(x=null)+'"'); -} -if( Boolean(x=null) !== false ) { - $ERROR('#5.2: Boolean(x=null) should be false'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.1_The_Boolean_Constructor_Called_as_a_Function/S15.6.1.1_A2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.1_The_Boolean_Constructor_Called_as_a_Function/S15.6.1.1_A2.js deleted file mode 100644 index 719865783..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.1_The_Boolean_Constructor_Called_as_a_Function/S15.6.1.1_A2.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.6.1.1_A2; - * @section: 15.6.1.1; - * @assertion: Boolean() returns false; - * @description: Call Boolean() and check result; -*/ - -//CHECK#1 -if( typeof Boolean() !== "boolean" ) { - $ERROR('#1: typeof Boolean() should be "boolean", actual is "'+typeof Boolean()+'"'); -} - -//CHECK#2 -if( Boolean() !== false ) { - $ERROR('#2: Boolean() should be false'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.2_The_Boolean_Constructor/S15.6.2.1_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.2_The_Boolean_Constructor/S15.6.2.1_A1.js deleted file mode 100644 index 5b23ea900..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.2_The_Boolean_Constructor/S15.6.2.1_A1.js +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.6.2.1_A1; - * @section: 15.6.2.1; - * @assertion: When Boolean is called as part of a new expression it is - * a constructor: it initialises the newly created object; - * @description: Checking type of the newly created object and it value; -*/ - -//CHECK#1 -if (typeof new Boolean() !== "object") { - $ERROR("#1: typeof new Boolean() === 'object'"); -} - -//CHECK#2 -if (new Boolean() === undefined) { - $ERROR("#2: new Boolean() should not be undefined"); -} - -//CHECK#3 -var x3 = new Boolean(); -if(typeof x3 !== "object"){ - $ERROR("#3: typeof new Boolean() !== 'object'"); -} - -//CHECK#4 -var x4 = new Boolean(); -if(x4 === undefined){ - $ERROR("#4: new Boolean() should not be undefined"); -} - -//CHECK#5 -if (typeof new Boolean(1) !== "object") { - $ERROR("#5: typeof new Boolean(10) === 'object'"); -} - -//CHECK#6 -if (new Boolean(1) === undefined) { - $ERROR("#6: new Boolean(1) should not be undefined"); -} - -//CHECK#7 -var x7 = new Boolean(1); -if(typeof x7 !== "object"){ - $ERROR("#7: typeof new Boolean(1) !== 'object'"); -} - -//CHECK#8 -var x8 = new Boolean(1); -if(x8 === undefined){ - $ERROR("#8: new Boolean(1) should not be undefined"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.2_The_Boolean_Constructor/S15.6.2.1_A2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.2_The_Boolean_Constructor/S15.6.2.1_A2.js deleted file mode 100644 index 59d1439e7..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.2_The_Boolean_Constructor/S15.6.2.1_A2.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.6.2.1_A2; - * @section: 15.6.2.1; - * @assertion: The [[Prototype]] property of the newly constructed object - * is set to the original Boolean prototype object, the one that is the - * initial value of Boolean.prototype; - * @description: Checking prototype property of the newly created object; - */ - -// CHECK#1 -var x1 = new Boolean(1); -if (typeof x1.constructor.prototype !== "object") { - $ERROR('#1: typeof x1.constructor.prototype === "object"'); -} - -//CHECK#2 -var x2 = new Boolean(2); -if (!Boolean.prototype.isPrototypeOf(x2)) { - $ERROR('#2: Boolean.prototype.isPrototypeOf(x2)'); -} - -//CHECK#3 -var x3 = new Boolean(3); -if (Boolean.prototype !== x3.constructor.prototype) { - $ERROR('#3: Boolean.prototype === x3.constructor.prototype'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.2_The_Boolean_Constructor/S15.6.2.1_A3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.2_The_Boolean_Constructor/S15.6.2.1_A3.js deleted file mode 100644 index 9f4f0c60c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.2_The_Boolean_Constructor/S15.6.2.1_A3.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.6.2.1_A3; - * @section: 15.6.2.1; - * @assertion: The [[Value]] property of the newly constructed object - * is set to ToBoolean(value); - * @description: Checking value of the newly created object; - */ - -// CHECK#1 -var x1 = new Boolean(1); -if (x1.valueOf() !== true) { - $ERROR('#1: var x1 = new Boolean(1); x1.valueOf() === true'); -} - -//CHECK#2 -var x2 = new Boolean(); -if (x2.valueOf() !== false) { - $ERROR('#2: var x2 = new Boolean(); x2.valueOf() === false'); -} - -//CHECK#3 -var x2 = new Boolean(0); -if (x2.valueOf() !== false) { - $ERROR('#3: var x2 = new Boolean(0); x2.valueOf() === false'); -} - -//CHECK#4 -var x2 = new Boolean(new Object()); -if (x2.valueOf() !== true) { - $ERROR('#4: var x2 = new Boolean(new Object()); x2.valueOf() === true'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.2_The_Boolean_Constructor/S15.6.2.1_A4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.2_The_Boolean_Constructor/S15.6.2.1_A4.js deleted file mode 100644 index 1aa660a79..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.2_The_Boolean_Constructor/S15.6.2.1_A4.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.6.2.1_A4; - * @section: 15.6.2.1; - * @assertion: The [[Class]] property of the newly constructed object - * is set to "Boolean"; - * @description: For testing toString function is used; - */ - -delete Boolean.prototype.toString; - -var obj = new Boolean(); - -//CHECK#1 -if (obj.toString() !== "[object Boolean]") { - $ERROR('#1: The [[Class]] property of the newly constructed object is set to "Boolean"'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.3_Properties_of_the_Boolean_Constructor/15.6.3.1_Boolean.prototype/S15.6.3.1_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.3_Properties_of_the_Boolean_Constructor/15.6.3.1_Boolean.prototype/S15.6.3.1_A1.js deleted file mode 100644 index 50bef718f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.3_Properties_of_the_Boolean_Constructor/15.6.3.1_Boolean.prototype/S15.6.3.1_A1.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.6.3.1_A1; - * @section: 15.6.3.1; - * @assertion: The initial value of Boolean.prototype is the Boolean - * prototype object; - * @description: Checking Boolean.prototype property; - */ - -//CHECK#1 -if (typeof Boolean.prototype !== "object") { - $ERROR('#1: typeof Boolean.prototype === "object"'); -} - -//CHECK#2 -if (Boolean.prototype != false) { - $ERROR('#2: Boolean.prototype == false'); -} - -delete Boolean.prototype.toString; - -if (Boolean.prototype.toString() !== "[object Boolean]") { - $ERROR('#3: The [[Class]] property of the Boolean prototype object is set to "Boolean"'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.3_Properties_of_the_Boolean_Constructor/15.6.3.1_Boolean.prototype/S15.6.3.1_A2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.3_Properties_of_the_Boolean_Constructor/15.6.3.1_Boolean.prototype/S15.6.3.1_A2.js deleted file mode 100644 index 373f54e96..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.3_Properties_of_the_Boolean_Constructor/15.6.3.1_Boolean.prototype/S15.6.3.1_A2.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.6.3.1_A2; - * @section: 15.6.3.1; - * @assertion: Boolean.prototype has the attribute ReadOnly; - * @description: Checking if varying the Boolean.prototype property fails; - */ - -// CHECK#1 -x = Boolean.prototype; -Boolean.prototype = 1; -if (Boolean.prototype !== x) { - $ERROR('#1: Boolean.prototype has the attribute ReadOnly'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.3_Properties_of_the_Boolean_Constructor/15.6.3.1_Boolean.prototype/S15.6.3.1_A3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.3_Properties_of_the_Boolean_Constructor/15.6.3.1_Boolean.prototype/S15.6.3.1_A3.js deleted file mode 100644 index 6158ea0de..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.3_Properties_of_the_Boolean_Constructor/15.6.3.1_Boolean.prototype/S15.6.3.1_A3.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.6.3.1_A3; - * @section: 15.6.3.1; - * @assertion: Boolean.prototype has the attribute DontDelete; - * @description: Checking if deleting the Boolean.prototype property fails; - */ - -// CHECK#1 -if (delete Boolean.prototype !== false) { - $ERROR('#1: Boolean.prototype has the attribute DontDelete'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.3_Properties_of_the_Boolean_Constructor/15.6.3.1_Boolean.prototype/S15.6.3.1_A4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.3_Properties_of_the_Boolean_Constructor/15.6.3.1_Boolean.prototype/S15.6.3.1_A4.js deleted file mode 100644 index 236266aac..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.3_Properties_of_the_Boolean_Constructor/15.6.3.1_Boolean.prototype/S15.6.3.1_A4.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.6.3.1_A4; - * @section: 15.6.3.1; - * @assertion: Boolean.prototype has the attribute DontEnum; - * @description: Checking if enumerating the Boolean.prototype property fails; - */ - -//CHECK#1 -for(x in Boolean) { - if(x === "prototype") { - $ERROR('#1: Boolean.prototype has the attribute DontEnum'); - } -} - -if (Boolean.propertyIsEnumerable('prototype')) { - $ERROR('#2: Boolean.prototype has the attribute DontEnum'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.3_Properties_of_the_Boolean_Constructor/S15.6.3_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.3_Properties_of_the_Boolean_Constructor/S15.6.3_A1.js deleted file mode 100644 index 673d7c050..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.3_Properties_of_the_Boolean_Constructor/S15.6.3_A1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.6.3_A1; - * @section: 15.6.3; - * @assertion: The Boolean constructor has the property "prototype"; - * @description: Checking existence of the property "prototype"; - */ - -if(!Boolean.hasOwnProperty("prototype")){ - $ERROR('#1: The Boolean constructor has the property "prototype"'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.3_Properties_of_the_Boolean_Constructor/S15.6.3_A2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.3_Properties_of_the_Boolean_Constructor/S15.6.3_A2.js deleted file mode 100644 index 02415f8db..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.3_Properties_of_the_Boolean_Constructor/S15.6.3_A2.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.6.3_A2; -* @section: 15.6.3; -* @assertion: The value of the internal [[Prototype]] property of the Boolean -* constructor is the Function prototype object; -* @description: Checking prototype of the Boolean constructor; -*/ - -//CHECK#1 -if (!(Function.prototype.isPrototypeOf(Boolean))) { - $ERROR('#1: the value of the internal [[Prototype]] property of the Boolean constructor is the Function prototype object.'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.3_Properties_of_the_Boolean_Constructor/S15.6.3_A3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.3_Properties_of_the_Boolean_Constructor/S15.6.3_A3.js deleted file mode 100644 index ab1b1e953..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.3_Properties_of_the_Boolean_Constructor/S15.6.3_A3.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.6.3_A3; -* @section: 15.6.3; -* @assertion: Boolean constructor has length property whose value is 1; -* @description: Checking Boolean.length property; -*/ - -//CHECK#1 -if (!Boolean.hasOwnProperty("length")){ - $ERROR('#1: Boolean constructor has length property'); -} - -//CHECK#2 -if (Boolean.length !== 1) { - $ERROR('#2: Boolean constructor length property value is 1'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.4_Properties_of_the_Boolean_Prototype_Object/S15.6.4.1_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.4_Properties_of_the_Boolean_Prototype_Object/S15.6.4.1_A1.js deleted file mode 100644 index de366a7cd..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.4_Properties_of_the_Boolean_Prototype_Object/S15.6.4.1_A1.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.6.4.1_A1; - * @section: 15.6.4.1; - * @assertion: The initial value of Boolean.prototype.constructor is the - * built-in Boolean constructor; - * @description: Compare Boolean.prototype.constructor with Boolean; - */ - -//CHECK#1 -if(Boolean.prototype.constructor !== Boolean){ - $ERROR('#1: Boolean.prototype.constructor === Boolean'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.4_Properties_of_the_Boolean_Prototype_Object/S15.6.4.2_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.4_Properties_of_the_Boolean_Prototype_Object/S15.6.4.2_A1_T1.js deleted file mode 100644 index 93f8590b8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.4_Properties_of_the_Boolean_Prototype_Object/S15.6.4.2_A1_T1.js +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.6.4.2_A1_T1; - * @section: 15.6.4.2; - * @assertion: toString: If this boolean value is true, then the string "true" - * is returned, otherwise, this boolean value must be false, and the string - * "false" is returned; - * @description: no arguments; - */ - -//CHECK#1 -if(Boolean.prototype.toString() !== "false"){ - $ERROR('#1: Boolean.prototype.toString() === "false"'); -} - -//CHECK#2 -if((new Boolean()).toString() !== "false"){ - $ERROR('#2: (new Boolean()).toString() === "false"'); -} - -//CHECK#3 -if((new Boolean(false)).toString() !== "false"){ - $ERROR('#3: (new Boolean(false)).toString() === "false"'); -} - -//CHECK#4 -if((new Boolean(true)).toString() !== "true"){ - $ERROR('#4: (new Boolean(true)).toString() === "true"'); -} - -//CHECK#5 -if((new Boolean(1)).toString() !== "true"){ - $ERROR('#5: (new Boolean(1)).toString() === "true"'); -} - -//CHECK#6 -if((new Boolean(0)).toString() !== "false"){ - $ERROR('#6: (new Boolean(0)).toString() === "false"'); -} - -//CHECK#7 -if((new Boolean(new Object())).toString() !== "true"){ - $ERROR('#7: (new Boolean(new Object())).toString() === "true"'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.4_Properties_of_the_Boolean_Prototype_Object/S15.6.4.2_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.4_Properties_of_the_Boolean_Prototype_Object/S15.6.4.2_A1_T2.js deleted file mode 100644 index d28f196f6..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.4_Properties_of_the_Boolean_Prototype_Object/S15.6.4.2_A1_T2.js +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.6.4.2_A1_T2; - * @section: 15.6.4.2; - * @assertion: toString: If this boolean value is true, then the string "true" - * is returned, otherwise, this boolean value must be false, and the string - * "false" is returned; - * @description: with some argument; - */ - -//CHECK#1 -if(Boolean.prototype.toString(true) !== "false"){ - $ERROR('#1: Boolean.prototype.toString(true) === "false"'); -} - -//CHECK#2 -if((new Boolean()).toString(true) !== "false"){ - $ERROR('#2: (new Boolean()).toString(true) === "false"'); -} - -//CHECK#3 -if((new Boolean(false)).toString(true) !== "false"){ - $ERROR('#3: (new Boolean(false)).toString(true) === "false"'); -} - -//CHECK#4 -if((new Boolean(true)).toString(false) !== "true"){ - $ERROR('#4: (new Boolean(true)).toString(false) === "true"'); -} - -//CHECK#5 -if((new Boolean(1)).toString(false) !== "true"){ - $ERROR('#5: (new Boolean(1)).toString(false) === "true"'); -} - -//CHECK#6 -if((new Boolean(0)).toString(true) !== "false"){ - $ERROR('#6: (new Boolean(0)).toString(true) === "false"'); -} - -//CHECK#7 -if((new Boolean(new Object())).toString(false) !== "true"){ - $ERROR('#7: (new Boolean(new Object())).toString(false) === "true"'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.4_Properties_of_the_Boolean_Prototype_Object/S15.6.4.2_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.4_Properties_of_the_Boolean_Prototype_Object/S15.6.4.2_A2_T1.js deleted file mode 100644 index bd865d435..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.4_Properties_of_the_Boolean_Prototype_Object/S15.6.4.2_A2_T1.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.6.4.2_A2_T1; - * @section: 15.6.4.2; - * @assertion: The toString function is not generic, it cannot be transferred - * to other kinds of objects for use as a method and there is should be - * a TypeError exception if its this value is not a Boolean object; - * @description: transferring to the String objects; -*/ - -//CHECK#1 -try{ - s1 = new String(); - s1.toString = Boolean.prototype.toString; - v1 = s1.toString(); - $ERROR('#1: Boolean.prototype.toString on not a Boolean object should throw TypeError'); -} -catch(e){ - if(!(e instanceof TypeError)){ - $ERROR('#1: Boolean.prototype.toString on not a Boolean object should throw TypeError, not '+e); - } -} - -//CHECK#2 -try{ - s2 = new String(); - s2.myToString = Boolean.prototype.toString; - v2 = s2.myToString(); - $ERROR('#2: Boolean.prototype.toString on not a Boolean object should throw TypeError'); -} -catch(e){ - if(!(e instanceof TypeError)){ - $ERROR('#2: Boolean.prototype.toString on not a Boolean object should throw TypeError, not '+e); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.4_Properties_of_the_Boolean_Prototype_Object/S15.6.4.2_A2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.4_Properties_of_the_Boolean_Prototype_Object/S15.6.4.2_A2_T2.js deleted file mode 100644 index 67cdd3300..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.4_Properties_of_the_Boolean_Prototype_Object/S15.6.4.2_A2_T2.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.6.4.2_A2_T2; - * @section: 15.6.4.2; - * @assertion: The toString function is not generic, it cannot be transferred - * to other kinds of objects for use as a method and there is should be - * a TypeError exception if its this value is not a Boolean object; - * @description: transferring to the Number objects; -*/ - -//CHECK#1 -try{ - s1 = new Number(); - s1.toString = Boolean.prototype.toString; - v1 = s1.toString(); - $ERROR('#1: Boolean.prototype.toString on not a Boolean object should throw TypeError'); -} -catch(e){ - if(!(e instanceof TypeError)){ - $ERROR('#1: Boolean.prototype.toString on not a Boolean object should throw TypeError, not '+e); - } -} - -//CHECK#1 -try{ - s2 = new Number(); - s2.myToString = Boolean.prototype.toString; - v2 = s2.myToString(); - $ERROR('#2: Boolean.prototype.toString on not a Boolean object should throw TypeError'); -} -catch(e){ - if(!(e instanceof TypeError)){ - $ERROR('#2: Boolean.prototype.toString on not a Boolean object should throw TypeError, not '+e); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.4_Properties_of_the_Boolean_Prototype_Object/S15.6.4.2_A2_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.4_Properties_of_the_Boolean_Prototype_Object/S15.6.4.2_A2_T3.js deleted file mode 100644 index d5ca8f389..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.4_Properties_of_the_Boolean_Prototype_Object/S15.6.4.2_A2_T3.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.6.4.2_A2_T3; - * @section: 15.6.4.2; - * @assertion: The toString function is not generic, it cannot be transferred - * to other kinds of objects for use as a method and there is should be - * a TypeError exception if its this value is not a Boolean object; - * @description: transferring to the Date objects; -*/ - -//CHECK#1 -try{ - s1 = new Date(); - s1.toString = Boolean.prototype.toString; - v1 = s1.toString(); - $ERROR('#1: Boolean.prototype.toString on not a Boolean object should throw TypeError'); -} -catch(e){ - if(!(e instanceof TypeError)){ - $ERROR('#1: Boolean.prototype.toString on not a Boolean object should throw TypeError, not '+e); - } -} - -//CHECK#1 -try{ - s2 = new Date(); - s2.myToString = Boolean.prototype.toString; - v2 = s2.myToString(); - $ERROR('#2: Boolean.prototype.toString on not a Boolean object should throw TypeError'); -} -catch(e){ - if(!(e instanceof TypeError)){ - $ERROR('#2: Boolean.prototype.toString on not a Boolean object should throw TypeError, not '+e); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.4_Properties_of_the_Boolean_Prototype_Object/S15.6.4.2_A2_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.4_Properties_of_the_Boolean_Prototype_Object/S15.6.4.2_A2_T4.js deleted file mode 100644 index d04c2ec3d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.4_Properties_of_the_Boolean_Prototype_Object/S15.6.4.2_A2_T4.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.6.4.2_A2_T4; - * @section: 15.6.4.2; - * @assertion: The toString function is not generic, it cannot be transferred - * to other kinds of objects for use as a method and there is should be - * a TypeError exception if its this value is not a Boolean object; - * @description: transferring to the Object objects; -*/ - -//CHECK#1 -try{ - s1 = new Object(); - s1.toString = Boolean.prototype.toString; - v1 = s1.toString(); - $ERROR('#1: Boolean.prototype.toString on not a Boolean object should throw TypeError'); -} -catch(e){ - if(!(e instanceof TypeError)){ - $ERROR('#1: Boolean.prototype.toString on not a Boolean object should throw TypeError, not '+e); - } -} - -//CHECK#1 -try{ - s2 = new Object(); - s2.myToString = Boolean.prototype.toString; - v2 = s2.myToString(); - $ERROR('#2: Boolean.prototype.toString on not a Boolean object should throw TypeError'); -} -catch(e){ - if(!(e instanceof TypeError)){ - $ERROR('#2: Boolean.prototype.toString on not a Boolean object should throw TypeError, not '+e); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.4_Properties_of_the_Boolean_Prototype_Object/S15.6.4.2_A2_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.4_Properties_of_the_Boolean_Prototype_Object/S15.6.4.2_A2_T5.js deleted file mode 100644 index f4bc04a23..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.4_Properties_of_the_Boolean_Prototype_Object/S15.6.4.2_A2_T5.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.6.4.2_A2_T5; - * @section: 15.6.4.2; - * @assertion: The toString function is not generic, it cannot be transferred - * to other kinds of objects for use as a method and there is should be - * a TypeError exception if its this value is not a Boolean object; - * @description: transferring to the other objects; -*/ - -//CHECK#1 -try{ - s1 = {x: 1}; - s1.toString = Boolean.prototype.toString; - v1 = s1.toString(); - $ERROR('#1: Boolean.prototype.toString on not a Boolean object should throw TypeError'); -} -catch(e){ - if(!(e instanceof TypeError)){ - $ERROR('#1: Boolean.prototype.toString on not a Boolean object should throw TypeError, not '+e); - } -} - -//CHECK#1 -try{ - s2 = {x: 1}; - s2.myToString = Boolean.prototype.toString; - v2 = s2.myToString(); - $ERROR('#2: Boolean.prototype.toString on not a Boolean object should throw TypeError'); -} -catch(e){ - if(!(e instanceof TypeError)){ - $ERROR('#2: Boolean.prototype.toString on not a Boolean object should throw TypeError, not '+e); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.4_Properties_of_the_Boolean_Prototype_Object/S15.6.4.3_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.4_Properties_of_the_Boolean_Prototype_Object/S15.6.4.3_A1_T1.js deleted file mode 100644 index 25ece6d6e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.4_Properties_of_the_Boolean_Prototype_Object/S15.6.4.3_A1_T1.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.6.4.3_A1_T1; - * @section: 15.6.4.3; - * @assertion: Boolean.prototype.valueOf() returns this boolean value; - * @description: no arguments; -*/ - -//CHECK#1 -if(Boolean.prototype.valueOf() !== false){ - $ERROR('#1: Boolean.prototype.valueOf() === false'); -} - -//CHECK#2 -if((new Boolean()).valueOf() !== false){ - $ERROR('#2: (new Boolean()).valueOf() === false'); -} - -//CHECK#3 -if((new Boolean(0)).valueOf() !== false){ - $ERROR('#3: (new Boolean(0)).valueOf() === false'); -} - -//CHECK#4 -if((new Boolean(-1)).valueOf() !== true){ - $ERROR('#4: (new Boolean(-1)).valueOf() === true'); -} - -//CHECK#5 -if((new Boolean(1)).valueOf() !== true){ - $ERROR('#5: (new Boolean(1)).valueOf() === true'); -} - -//CHECK#6 -if((new Boolean(new Object())).valueOf() !== true){ - $ERROR('#6: (new Boolean(new Object())).valueOf() === true'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.4_Properties_of_the_Boolean_Prototype_Object/S15.6.4.3_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.4_Properties_of_the_Boolean_Prototype_Object/S15.6.4.3_A1_T2.js deleted file mode 100644 index 77362c781..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.4_Properties_of_the_Boolean_Prototype_Object/S15.6.4.3_A1_T2.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.6.4.3_A1_T2; - * @section: 15.6.4.3; - * @assertion: Boolean.prototype.valueOf() returns this boolean value; - * @description: calling with argument; -*/ - -//CHECK#1 -if(Boolean.prototype.valueOf(true) !== false){ - $ERROR('#1: Boolean.prototype.valueOf(true) === false'); -} - -//CHECK#2 -if((new Boolean()).valueOf(true) !== false){ - $ERROR('#2: (new Boolean()).valueOf(true) === false'); -} - -//CHECK#3 -if((new Boolean(0)).valueOf(true) !== false){ - $ERROR('#3: (new Boolean(0)).valueOf(true) === false'); -} - -//CHECK#4 -if((new Boolean(-1)).valueOf(false) !== true){ - $ERROR('#4: (new Boolean(-1)).valueOf(false) === true'); -} - -//CHECK#5 -if((new Boolean(1)).valueOf(false) !== true){ - $ERROR('#5: (new Boolean(1)).valueOf(false) === true'); -} - -//CHECK#6 -if((new Boolean(new Object())).valueOf(false) !== true){ - $ERROR('#6: (new Boolean(new Object())).valueOf(false) === true'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.4_Properties_of_the_Boolean_Prototype_Object/S15.6.4.3_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.4_Properties_of_the_Boolean_Prototype_Object/S15.6.4.3_A2_T1.js deleted file mode 100644 index 53488fabd..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.4_Properties_of_the_Boolean_Prototype_Object/S15.6.4.3_A2_T1.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.6.4.3_A2_T1; - * @section: 15.6.4.3; - * @assertion: The valueOf function is not generic, it cannot be transferred - * to other kinds of objects for use as a method and there is should be - * a TypeError exception if its this value is not a Boolean object; - * @description: transferring to the String objects; -*/ - -//CHECK#1 -try{ - s1 = new String(); - s1.valueOf = Boolean.prototype.valueOf; - v1 = s1.valueOf(); - $ERROR('#1: Boolean.prototype.valueOf on not a Boolean object should throw TypeError'); -} -catch(e){ - if(!(e instanceof TypeError)){ - $ERROR('#1: Boolean.prototype.valueOf on not a Boolean object should throw TypeError, not '+e); - } -} - -//CHECK#1 -try{ - s2 = new String(); - s2.myValueOf = Boolean.prototype.valueOf; - v2 = s2.myValueOf(); - $ERROR('#2: Boolean.prototype.valueOf on not a Boolean object should throw TypeError'); -} -catch(e){ - if(!(e instanceof TypeError)){ - $ERROR('#2: Boolean.prototype.valueOf on not a Boolean object should throw TypeError, not '+e); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.4_Properties_of_the_Boolean_Prototype_Object/S15.6.4.3_A2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.4_Properties_of_the_Boolean_Prototype_Object/S15.6.4.3_A2_T2.js deleted file mode 100644 index 8fc6b8dba..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.4_Properties_of_the_Boolean_Prototype_Object/S15.6.4.3_A2_T2.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.6.4.3_A2_T2; - * @section: 15.6.4.3; - * @assertion: The valueOf function is not generic, it cannot be transferred - * to other kinds of objects for use as a method and there is should be - * a TypeError exception if its this value is not a Boolean object; - * @description: transferring to the Number objects; -*/ - -//CHECK#1 -try{ - s1 = new Number(); - s1.valueOf = Boolean.prototype.valueOf; - v1 = s1.valueOf(); - $ERROR('#1: Boolean.prototype.valueOf on not a Boolean object should throw TypeError'); -} -catch(e){ - if(!(e instanceof TypeError)){ - $ERROR('#1: Boolean.prototype.valueOf on not a Boolean object should throw TypeError, not '+e); - } -} - -//CHECK#1 -try{ - s2 = new Number(); - s2.myValueOf = Boolean.prototype.valueOf; - v2 = s2.myValueOf(); - $ERROR('#2: Boolean.prototype.valueOf on not a Boolean object should throw TypeError'); -} -catch(e){ - if(!(e instanceof TypeError)){ - $ERROR('#2: Boolean.prototype.valueOf on not a Boolean object should throw TypeError, not '+e); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.4_Properties_of_the_Boolean_Prototype_Object/S15.6.4.3_A2_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.4_Properties_of_the_Boolean_Prototype_Object/S15.6.4.3_A2_T3.js deleted file mode 100644 index bd36b7741..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.4_Properties_of_the_Boolean_Prototype_Object/S15.6.4.3_A2_T3.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.6.4.3_A2_T3; - * @section: 15.6.4.3; - * @assertion: The valueOf function is not generic, it cannot be transferred - * to other kinds of objects for use as a method and there is should be - * a TypeError exception if its this value is not a Boolean object; - * @description: transferring to the Date objects; -*/ - -//CHECK#1 -try{ - s1 = new Date(); - s1.valueOf = Boolean.prototype.valueOf; - v1 = s1.valueOf(); - $ERROR('#1: Boolean.prototype.valueOf on not a Boolean object should throw TypeError'); -} -catch(e){ - if(!(e instanceof TypeError)){ - $ERROR('#1: Boolean.prototype.valueOf on not a Boolean object should throw TypeError, not '+e); - } -} - -//CHECK#1 -try{ - s2 = new Date(); - s2.myValueOf = Boolean.prototype.valueOf; - v2 = s2.myValueOf(); - $ERROR('#2: Boolean.prototype.valueOf on not a Boolean object should throw TypeError'); -} -catch(e){ - if(!(e instanceof TypeError)){ - $ERROR('#2: Boolean.prototype.valueOf on not a Boolean object should throw TypeError, not '+e); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.4_Properties_of_the_Boolean_Prototype_Object/S15.6.4.3_A2_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.4_Properties_of_the_Boolean_Prototype_Object/S15.6.4.3_A2_T4.js deleted file mode 100644 index 2fcb974a2..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.4_Properties_of_the_Boolean_Prototype_Object/S15.6.4.3_A2_T4.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.6.4.3_A2_T4; - * @section: 15.6.4.3; - * @assertion: The valueOf function is not generic, it cannot be transferred - * to other kinds of objects for use as a method and there is should be - * a TypeError exception if its this value is not a Boolean object; - * @description: transferring to the Object objects; -*/ - -//CHECK#1 -try{ - s1 = new Object(); - s1.valueOf = Boolean.prototype.valueOf; - v1 = s1.valueOf(); - $ERROR('#1: Boolean.prototype.valueOf on not a Boolean object should throw TypeError'); -} -catch(e){ - if(!(e instanceof TypeError)){ - $ERROR('#1: Boolean.prototype.valueOf on not a Boolean object should throw TypeError, not '+e); - } -} - -//CHECK#1 -try{ - s2 = new Object(); - s2.myValueOf = Boolean.prototype.valueOf; - v2 = s2.myValueOf(); - $ERROR('#2: Boolean.prototype.valueOf on not a Boolean object should throw TypeError'); -} -catch(e){ - if(!(e instanceof TypeError)){ - $ERROR('#2: Boolean.prototype.valueOf on not a Boolean object should throw TypeError, not '+e); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.4_Properties_of_the_Boolean_Prototype_Object/S15.6.4.3_A2_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.4_Properties_of_the_Boolean_Prototype_Object/S15.6.4.3_A2_T5.js deleted file mode 100644 index 5924351b1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.4_Properties_of_the_Boolean_Prototype_Object/S15.6.4.3_A2_T5.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.6.4.3_A2_T5; - * @section: 15.6.4.3; - * @assertion: The valueOf function is not generic, it cannot be transferred - * to other kinds of objects for use as a method and there is should be - * a TypeError exception if its this value is not a Boolean object; - * @description: transferring to the other objects; -*/ - -//CHECK#1 -try{ - s1 = {x: 1}; - s1.valueOf = Boolean.prototype.valueOf; - v1 = s1.valueOf(); - $ERROR('#1: Boolean.prototype.valueOf on not a Boolean object should throw TypeError'); -} -catch(e){ - if(!(e instanceof TypeError)){ - $ERROR('#1: Boolean.prototype.valueOf on not a Boolean object should throw TypeError, not '+e); - } -} - -//CHECK#1 -try{ - s2 = {x: 1}; - s2.myValueOf = Boolean.prototype.valueOf; - v2 = s2.myValueOf(); - $ERROR('#2: Boolean.prototype.valueOf on not a Boolean object should throw TypeError'); -} -catch(e){ - if(!(e instanceof TypeError)){ - $ERROR('#2: Boolean.prototype.valueOf on not a Boolean object should throw TypeError, not '+e); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.4_Properties_of_the_Boolean_Prototype_Object/S15.6.4_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.4_Properties_of_the_Boolean_Prototype_Object/S15.6.4_A1.js deleted file mode 100644 index 7af82b2a4..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.4_Properties_of_the_Boolean_Prototype_Object/S15.6.4_A1.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.6.4_A1; - * @section: 15.6.4; - * @assertion: The Boolean prototype object is itself a Boolean object - * (its [[Class]] is "Boolean") whose value is false; - * @description: Checking type and value of Boolean.prototype; - */ - -//CHECK#1 -if (typeof Boolean.prototype !== "object") { - $ERROR('#1: typeof Boolean.prototype === "object"'); -} - -//CHECK#2 -if (Boolean.prototype != false) { - $ERROR('#2: Boolean.prototype == false'); -} - -delete Boolean.prototype.toString; - -if (Boolean.prototype.toString() !== "[object Boolean]") { - $ERROR('#3: The [[Class]] property of the Boolean prototype object is set to "Boolean"'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.4_Properties_of_the_Boolean_Prototype_Object/S15.6.4_A2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.4_Properties_of_the_Boolean_Prototype_Object/S15.6.4_A2.js deleted file mode 100644 index 515d1f436..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.6_Boolean_Objects/15.6.4_Properties_of_the_Boolean_Prototype_Object/S15.6.4_A2.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.6.4_A2; - * @section: 15.6.4; - * @assertion: The value of the internal [[Prototype]] property of the Boolean - * prototype object is the Object prototype object; - * @description: Checking Object.prototype.isPrototypeOf(Boolean.prototype); - */ - -//CHECK#1 -if (!Object.prototype.isPrototypeOf(Boolean.prototype)) { - $ERROR('#1: Object prototype object is the prototype of Boolean prototype object'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.1_The_Number_Constructor_Called_as_a_Function/S15.7.1.1_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.1_The_Number_Constructor_Called_as_a_Function/S15.7.1.1_A1.js deleted file mode 100644 index 10da19f0a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.1_The_Number_Constructor_Called_as_a_Function/S15.7.1.1_A1.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.1.1_A1; - * @section: 15.7.1.1; - * @assertion: Number([value]) returns a number value (not a Number object) computed by ToNumber(value) if value was supplied; - * @description: Used values "10", 10, new String("10"), new Object(10) and "abc"; -*/ - -//CHECK#1 -if( typeof Number("10") !== "number" ) { - $ERROR('#1: typeof Number("10") should be "number", actual is "'+typeof Number("10")+'"'); -} - -//CHECK#2 -if( typeof Number(10) !== "number" ) { - $ERROR('#2: typeof Number(10) should be "number", actual is "'+typeof Number(10)+'"'); -} - -//CHECK#3 -if( typeof Number(new String("10")) !== "number" ) { - $ERROR('#3: typeof Number(new String("10")) should be "number", actual is "'+typeof Number(new String("10"))+'"'); -} - -//CHECK#4 -if( typeof Number(new Object(10)) !== "number" ) { - $ERROR('#4: typeof Number(new Object(10)) should be "number", actual is "'+typeof Number(new Object(10))+'"'); -} - -//CHECK #5 -if( typeof Number("abc") !== "number" ) { - $ERROR('#5: typeof Number("abc") should be "number", actual is "'+typeof Number("abc")+'"'); -} - -//CHECK #6 -if( !isNaN(Number("abc"))) { - $ERROR('#6: Number("abc")) should be NaN'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.1_The_Number_Constructor_Called_as_a_Function/S15.7.1.1_A2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.1_The_Number_Constructor_Called_as_a_Function/S15.7.1.1_A2.js deleted file mode 100644 index 77bd87a84..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.1_The_Number_Constructor_Called_as_a_Function/S15.7.1.1_A2.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.1.1_A2; - * @section: 15.7.1.1; - * @assertion: Number() returns +0; - * @description: Call Number() and check result; -*/ - -//CHECK#1 -if( typeof Number() !== "number" ) { - $ERROR('#1: typeof Number() should be "number", actual is "'+typeof Number()+'"'); -} - -//CHECK#2 -if( Number() !== 0 ) { - $ERROR('#2: Number() === 0, actual is '+Number()); -} else if( 1/Number() !== Number.POSITIVE_INFINITY ) { - $ERROR('#2: Number() === +0, actual is '+Number()); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.2_The_Number_Constructor/S15.7.2.1_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.2_The_Number_Constructor/S15.7.2.1_A1.js deleted file mode 100644 index 7bd549518..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.2_The_Number_Constructor/S15.7.2.1_A1.js +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.2.1_A1; - * @section: 15.7.2.1; - * @assertion: When Number is called as part of a new expression it is - * a constructor: it initialises the newly created object; - * @description: Checking type of the newly created object and it value; -*/ - -//CHECK#1 -if (typeof new Number() !== "object") { - $ERROR("#1: typeof new Number() === 'object'"); -} - -//CHECK#2 -if (new Number() === undefined) { - $ERROR("#2: new Number() should not be undefined"); -} - -//CHECK#3 -var x3 = new Number(); -if(typeof x3 !== "object"){ - $ERROR("#3: typeof new Number() === 'object'"); -} - -//CHECK#4 -var x4 = new Number(); -if(x4 === undefined){ - $ERROR("#4: new Number() should not be undefined"); -} - -//CHECK#5 -if (typeof new Number(10) !== "object") { - $ERROR("#5: typeof new Number(10) === 'object'"); -} - -//CHECK#6 -if (new Number(10) === undefined) { - $ERROR("#6: new Number(10) should not be undefined"); -} - -//CHECK#7 -var x7 = new Number(10); -if(typeof x7 !== "object"){ - $ERROR("#7: typeof new Number(10) === 'object'"); -} - -//CHECK#8 -var x8 = new Number(10); -if(x8 === undefined){ - $ERROR("#8: new Number(10) should not be undefined"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.2_The_Number_Constructor/S15.7.2.1_A2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.2_The_Number_Constructor/S15.7.2.1_A2.js deleted file mode 100644 index fcf738567..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.2_The_Number_Constructor/S15.7.2.1_A2.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.2.1_A2; - * @section: 15.7.2.1; - * @assertion: The [[Prototype]] property of the newly constructed object - * is set to the original Number prototype object, the one that is the - * initial value of Number.prototype; - * @description: Checking prototype property of the newly created objects; -*/ - -// CHECK#1 -var x1 = new Number(1); -if (typeof x1.constructor.prototype !== "object") { - $ERROR('#1: typeof x1.constructor.prototype === "object"'); -} - -//CHECK#2 -var x2 = new Number(2); -if (!Number.prototype.isPrototypeOf(x2)) { - $ERROR('#2: Number.prototype.isPrototypeOf(x2)'); -} - -//CHECK#3 -var x3 = new Number(3); -if (Number.prototype !== x3.constructor.prototype) { - $ERROR('#3: Number.prototype === x3.constructor.prototype'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.2_The_Number_Constructor/S15.7.2.1_A3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.2_The_Number_Constructor/S15.7.2.1_A3.js deleted file mode 100644 index 3008843b7..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.2_The_Number_Constructor/S15.7.2.1_A3.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.2.1_A3; - * @section: 15.7.2.1; - * @assertion: The [[Value]] property of the newly constructed object - * is set to ToNumber(value) if value was supplied, else to +0; - * @description: Checking value of the newly created object; -*/ - -//CHECK#1 -var x1 = new Number(1); -if (x1.valueOf() !== 1) { - $ERROR('#1: var x1 = new Number(1); x1.valueOf() === 1'); -} - -//CHECK#2 -var x2 = new Number(); -if (x2.valueOf() !== 0) { - $ERROR('#2.1: var x2 = new Number(); x2.valueOf() === 0'); -} else if( 1/x2.valueOf() !== Number.POSITIVE_INFINITY ) { - $ERROR('#2.2: var x2 = new Number(); x2.valueOf() === +0'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.2_The_Number_Constructor/S15.7.2.1_A4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.2_The_Number_Constructor/S15.7.2.1_A4.js deleted file mode 100644 index 788ef319c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.2_The_Number_Constructor/S15.7.2.1_A4.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.2.1_A4; - * @section: 15.7.2.1; - * @assertion: The [[Class]] property of the newly constructed object - * is set to "Number"; - * @description: For testing toString function is used; -*/ - -delete Number.prototype.toString; - -var obj = new Number(); - -//CHECK#1 -if (obj.toString() !== "[object Number]") { - $ERROR('#1: The [[Class]] property of the newly constructed object is set to "Number"'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.1_Number.prototype/S15.7.3.1_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.1_Number.prototype/S15.7.3.1_A1_T1.js deleted file mode 100644 index a8e1559cf..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.1_Number.prototype/S15.7.3.1_A1_T1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.3.1_A1_T1; - * @section: 15.7.3.1; - * @assertion: The Number property "prototype" has { DontEnum, DontDelete, ReadOnly } attributes; - * @description: Checking if varying the Number.prototype property fails; -*/ - -//CHECK#1 -x = Number.prototype; -Number.prototype = 1; -if (Number.prototype !== x) { - $ERROR('#1: The Number.prototype property has the attributes ReadOnly'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.1_Number.prototype/S15.7.3.1_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.1_Number.prototype/S15.7.3.1_A1_T2.js deleted file mode 100644 index ebabdfa55..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.1_Number.prototype/S15.7.3.1_A1_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.3.1_A1_T2; - * @section: 15.7.3.1; - * @assertion: The Number property "prototype" has { DontEnum, DontDelete, ReadOnly } attributes; - * @description: Checking if deleting the Number.prototype property fails; -*/ - -// CHECK#1 -if (delete Number.prototype !== false) { - $ERROR('#1: The Number.prototype property has the attributes DontDelete'); -} - -if (!Number.hasOwnProperty('prototype')) { - $FAIL('#2: The Number.prototype property has the attributes DontDelete'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.1_Number.prototype/S15.7.3.1_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.1_Number.prototype/S15.7.3.1_A1_T3.js deleted file mode 100644 index 16ef37d26..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.1_Number.prototype/S15.7.3.1_A1_T3.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.3.1_A1_T3; - * @section: 15.7.3.1; - * @assertion: The Number property "prototype" has { DontEnum, DontDelete, ReadOnly } attributes; - * @description: Checking if enumerating the Number.prototype property fails; -*/ - -if (Number.propertyIsEnumerable('prototype')) { - $ERROR('#1: The Number.prototype property has the attribute DontEnum'); -} - -for(x in Number) { - if(x === "prototype") { - $ERROR('#2: The Number.prototype has the attribute DontEnum'); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.1_Number.prototype/S15.7.3.1_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.1_Number.prototype/S15.7.3.1_A2_T1.js deleted file mode 100644 index e092bcc7c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.1_Number.prototype/S15.7.3.1_A2_T1.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.3.1_A2_T1; - * @section: 15.7.3.1; - * @assertion: Number.prototype is itself Number object; - * @description: Checking type of Number.prototype property - test based on - * deleting Number.prototype.toString; -*/ - -//CHECK#1 -if (typeof Number.prototype !== "object") { - $ERROR('#1: typeof Number.prototype === "object"'); -} - -delete Number.prototype.toString; - -if (Number.prototype.toString() !== "[object Number]") { - $ERROR('#3: The [[Class]] property of the Number prototype object is set to "Number"'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.1_Number.prototype/S15.7.3.1_A2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.1_Number.prototype/S15.7.3.1_A2_T2.js deleted file mode 100644 index 6d5c12758..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.1_Number.prototype/S15.7.3.1_A2_T2.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.3.1_A2_T2; - * @section: 15.7.3.1; - * @assertion: Number.prototype is itself Number object; - * @description: Checking type of Number.prototype property - test based on - * overwriting of Number.prototype.toString; -*/ - -//CHECK#1 -if (typeof Number.prototype !== "object") { - $ERROR('#1: typeof Number.prototype === "object"'); -} - -Number.prototype.toString = Object.prototype.toString; - -if (Number.prototype.toString() !== "[object Number]") { - $ERROR('#3: The [[Class]] property of the Number prototype object is set to "Number"'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.1_Number.prototype/S15.7.3.1_A3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.1_Number.prototype/S15.7.3.1_A3.js deleted file mode 100644 index 215ee69bf..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.1_Number.prototype/S15.7.3.1_A3.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.3.1_A3; - * @section: 15.7.3.1; - * @assertion: Number.prototype value is +0; - * @description: Checking value of Number.prototype property; -*/ - -//CHECK#1 -if (Number.prototype != 0) { - $ERROR('#2: Number.prototype == +0'); -} else if( 1/Number.prototype != Number.POSITIVE_INFINITY){ - $ERROR('#2: Number.prototype == +0'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.2_Number.MAX_VALUE/S15.7.3.2_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.2_Number.MAX_VALUE/S15.7.3.2_A1.js deleted file mode 100644 index 003933ea1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.2_Number.MAX_VALUE/S15.7.3.2_A1.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.3.2_A1; - * @section: 15.7.3.2; - * @assertion: Number.MAX_VALUE is approximately 1.7976931348623157e308; - * @description: Checking Number.MAX_VALUE value; -*/ - -$INCLUDE("math_precision.js"); -$INCLUDE("math_isequal.js"); - -// CHECK#1 -if (!isEqual(Number.MAX_VALUE, 1.7976931348623157e308)) { - $ERROR('#1: Number.MAX_VALUE approximately equal to 1.7976931348623157e308'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.2_Number.MAX_VALUE/S15.7.3.2_A2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.2_Number.MAX_VALUE/S15.7.3.2_A2.js deleted file mode 100644 index 92ecb812f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.2_Number.MAX_VALUE/S15.7.3.2_A2.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.3.2_A2; - * @section: 15.7.3.2; - * @assertion: Number.MAX_VALUE is ReadOnly; - * @description: Checking if varying Number.MAX_VALUE fails; -*/ - -// CHECK#1 -x = Number.MAX_VALUE; -Number.MAX_VALUE = 1; -if (Number.MAX_VALUE !== x) { - $ERROR('#1: x = Number.MAX_VALUE; Number.MAX_VALUE = 1; Number.MAX_VALUE === x'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.2_Number.MAX_VALUE/S15.7.3.2_A3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.2_Number.MAX_VALUE/S15.7.3.2_A3.js deleted file mode 100644 index 8e179087b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.2_Number.MAX_VALUE/S15.7.3.2_A3.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.3.2_A3; - * @section: 15.7.3.2; - * @assertion: Number.MAX_VALUE is DontDelete; - * @description: Checking if deleting Number.MAX_VALUE fails; -*/ - -// CHECK#1 -if (delete Number.MAX_VALUE !== false) { - $ERROR('#1: delete Number.MAX_VALUE === false'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.2_Number.MAX_VALUE/S15.7.3.2_A4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.2_Number.MAX_VALUE/S15.7.3.2_A4.js deleted file mode 100644 index 3bb838e0a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.2_Number.MAX_VALUE/S15.7.3.2_A4.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.3.2_A4; - * @section: 15.7.3.2; - * @assertion: Number.MAX_VALUE has the attribute DontEnum; - * @description: Checking if enumerating Number.MAX_VALUE fails; -*/ - -//CHECK#1 -for(x in Number) { - if(x === "MAX_VALUE") { - $ERROR('#1: Number.MAX_VALUE has the attribute DontEnum'); - } -} - -if (Number.propertyIsEnumerable('MAX_VALUE')) { - $ERROR('#2: Number.MAX_VALUE has the attribute DontEnum'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.3_Number.MIN_VALUE/S15.7.3.3_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.3_Number.MIN_VALUE/S15.7.3.3_A1.js deleted file mode 100644 index 56e331836..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.3_Number.MIN_VALUE/S15.7.3.3_A1.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.3.3_A1; - * @section: 15.7.3.3; - * @assertion: Number.MIN_VALUE is approximately 5e-324; - * @description: Checking Number.MIN_VALUE value; -*/ - -$INCLUDE("math_precision.js"); -$INCLUDE("math_isequal.js"); - -// CHECK#1 -if (!isEqual(Number.MIN_VALUE, 5e-324)) { - $ERROR('#1: Number.MIN_VALUE approximately equal to 5e-324'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.3_Number.MIN_VALUE/S15.7.3.3_A2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.3_Number.MIN_VALUE/S15.7.3.3_A2.js deleted file mode 100644 index 390249564..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.3_Number.MIN_VALUE/S15.7.3.3_A2.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.3.3_A2; - * @section: 15.7.3.3; - * @assertion: Number.MIN_VALUE is ReadOnly; - * @description: Checking if varying Number.MIN_VALUE fails; -*/ - -// CHECK#1 -x = Number.MIN_VALUE; -Number.MIN_VALUE = 1; -if (Number.MIN_VALUE !== x) { - $ERROR('#1: x = Number.MIN_VALUE; Number.MIN_VALUE = 1; Number.MIN_VALUE === x'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.3_Number.MIN_VALUE/S15.7.3.3_A3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.3_Number.MIN_VALUE/S15.7.3.3_A3.js deleted file mode 100644 index a9bfca045..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.3_Number.MIN_VALUE/S15.7.3.3_A3.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.3.3_A3; - * @section: 15.7.3.3; - * @assertion: Number.MIN_VALUE is DontDelete; - * @description: Checking if deleting Number.MIN_VALUE fails; -*/ - -//CHECK#1 -if (delete Number.MIN_VALUE !== false) { - $ERROR('#1: delete Number.MIN_VALUE === false'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.3_Number.MIN_VALUE/S15.7.3.3_A4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.3_Number.MIN_VALUE/S15.7.3.3_A4.js deleted file mode 100644 index e9c8dd930..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.3_Number.MIN_VALUE/S15.7.3.3_A4.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.3.3_A4; - * @section: 15.7.3.3; - * @assertion: Number.MIN_VALUE has the attribute DontEnum; - * @description: Checking if enumerating Number.MIN_VALUE fails; -*/ - -//CHECK#1 -for(x in Number) { - if(x === "MIN_VALUE") { - $ERROR('#1: Number.MIN_VALUE has the attribute DontEnum'); - } -} - -if (Number.propertyIsEnumerable('MIN_VALUE')) { - $ERROR('#2: Number.MIN_VALUE has the attribute DontEnum'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.4_Number.NaN/S15.7.3.4_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.4_Number.NaN/S15.7.3.4_A1.js deleted file mode 100644 index ba287c313..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.4_Number.NaN/S15.7.3.4_A1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.3.4_A1; - * @section: 15.7.3.4; - * @assertion: Number.NaN is Not-a-Number; - * @description: Checking isNaN(Number.NaN); -*/ - -// CHECK#1 -if (isNaN(Number.NaN) !== true) { - $ERROR('#1: Number.NaN === Not-a-Number'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.4_Number.NaN/S15.7.3.4_A2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.4_Number.NaN/S15.7.3.4_A2.js deleted file mode 100644 index bef1a7a06..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.4_Number.NaN/S15.7.3.4_A2.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.3.4_A2; - * @section: 15.7.3.4; - * @assertion: Number.NaN is ReadOnly; - * @description: Checking if varying Number.NaN fails; -*/ - -// CHECK#1 -Number.NaN = 1; -if (isNaN(Number.NaN) !== true) { - $ERROR('#1: Number.NaN = 1; Number.NaN === Not-a-Number'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.4_Number.NaN/S15.7.3.4_A3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.4_Number.NaN/S15.7.3.4_A3.js deleted file mode 100644 index 36d2b38f1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.4_Number.NaN/S15.7.3.4_A3.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.3.4_A3; - * @section: 15.7.3.4; - * @assertion: Number.NaN is DontDelete; - * @description: Checking if deleting Number.NaN fails; -*/ - -// CHECK#1 -if (delete Number.NaN !== false) { - $ERROR('#1: delete Number.NaN === false'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.4_Number.NaN/S15.7.3.4_A4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.4_Number.NaN/S15.7.3.4_A4.js deleted file mode 100644 index 64f9c7af3..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.4_Number.NaN/S15.7.3.4_A4.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.3.4_A4; - * @section: 15.7.3.4; - * @assertion: Number.NaN has the attribute DontEnum; - * @description: Checking if enumerating Number.NaN fails; -*/ - -//CHECK#1 -for(x in Number) { - if(x === "NaN") { - $ERROR('#1: Number.NaN has the attribute DontEnum'); - } -} - -if (Number.propertyIsEnumerable('NaN')) { - $ERROR('#2: Number.NaN has the attribute DontEnum'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.5_Number.NEGATIVE_INFINITY/S15.7.3.5_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.5_Number.NEGATIVE_INFINITY/S15.7.3.5_A1.js deleted file mode 100644 index aea96e07b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.5_Number.NEGATIVE_INFINITY/S15.7.3.5_A1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.3.5_A1; - * @section: 15.7.3.5; - * @assertion: Number.NEGATIVE_INFINITY is -Infinity; - * @description: Checking sign and finiteness of Number.NEGATIVE_INFINITY; -*/ - -// CHECK#1 -if (isFinite(Number.NEGATIVE_INFINITY) !== false) { - $ERROR('#1: Number.NEGATIVE_INFINITY === Not-a-Finite'); -} else { - if ((Number.NEGATIVE_INFINITY < 0) !== true) { - $ERROR('#1: Number.NEGATIVE_INFINITY === -Infinity'); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.5_Number.NEGATIVE_INFINITY/S15.7.3.5_A2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.5_Number.NEGATIVE_INFINITY/S15.7.3.5_A2.js deleted file mode 100644 index b9eb44bb6..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.5_Number.NEGATIVE_INFINITY/S15.7.3.5_A2.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.3.5_A2; - * @section: 15.7.3.5; - * @assertion: Number.NEGATIVE_INFINITY is ReadOnly; - * @description: Checking if varying Number.NEGATIVE_INFINITY fails; -*/ - -// CHECK#1 -Number.NEGATIVE_INFINITY = 1; -if (isFinite(Number.NEGATIVE_INFINITY)) { - $ERROR('#1: Number.NEGATIVE_INFINITY = 1; Number.NEGATIVE_INFINITY === -Infinity'); -} else { - if (Number.NEGATIVE_INFINITY >= 0) { - $ERROR('#1: Number.NEGATIVE_INFINITY = 1; Number.NEGATIVE_INFINITY === -Infinity'); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.5_Number.NEGATIVE_INFINITY/S15.7.3.5_A3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.5_Number.NEGATIVE_INFINITY/S15.7.3.5_A3.js deleted file mode 100644 index 23974624c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.5_Number.NEGATIVE_INFINITY/S15.7.3.5_A3.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.3.5_A3; - * @section: 15.7.3.5; - * @assertion: Number.NEGATIVE_INFINITY is DontDelete; - * @description: Checking if deleting Number.NEGATIVE_INFINITY fails; -*/ - -// CHECK#1 -if (delete Number.NEGATIVE_INFINITY !== false) { - $ERROR('#1: delete Number.NEGATIVE_INFINITY === false'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.5_Number.NEGATIVE_INFINITY/S15.7.3.5_A4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.5_Number.NEGATIVE_INFINITY/S15.7.3.5_A4.js deleted file mode 100644 index 9bfb7e4df..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.5_Number.NEGATIVE_INFINITY/S15.7.3.5_A4.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.3.5_A4; - * @section: 15.7.3.5; - * @assertion: Number.NEGATIVE_INFINITY has the attribute DontEnum; - * @description: Checking if enumerating Number.NEGATIVE_INFINITY fails; -*/ - -//CHECK#1 -for(x in Number) { - if(x === "NEGATIVE_INFINITY") { - $ERROR('#1: Number.NEGATIVE_INFINITY has the attribute DontEnum'); - } -} - -if (Number.propertyIsEnumerable('NEGATIVE_INFINITY')) { - $ERROR('#2: Number.NEGATIVE_INFINITY has the attribute DontEnum'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.6_Number.POSITIVE_INFINITY/S15.7.3.6_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.6_Number.POSITIVE_INFINITY/S15.7.3.6_A1.js deleted file mode 100644 index 1e442e874..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.6_Number.POSITIVE_INFINITY/S15.7.3.6_A1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.3.6_A1; - * @section: 15.7.3.6; - * @assertion: Number.POSITIVE_INFINITY is +Infinity; - * @description: Checking sign and finiteness of Number.POSITIVE_INFINITY; -*/ - -// CHECK#1 -if (isFinite(Number.POSITIVE_INFINITY) !== false) { - $ERROR('#1: Number.POSITIVE_INFINITY === Not-a-Finite'); -} else { - if ((Number.POSITIVE_INFINITY > 0) !== true) { - $ERROR('#1: Number.POSITIVE_INFINITY === +Infinity'); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.6_Number.POSITIVE_INFINITY/S15.7.3.6_A2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.6_Number.POSITIVE_INFINITY/S15.7.3.6_A2.js deleted file mode 100644 index bd5e8f7cb..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.6_Number.POSITIVE_INFINITY/S15.7.3.6_A2.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.3.6_A2; - * @section: 15.7.3.6; - * @assertion: Number.POSITIVE_INFINITY is ReadOnly; - * @description: Checking if varying Number.POSITIVE_INFINITY fails; -*/ - -// CHECK#1 -Number.POSITIVE_INFINITY = 1; -if (isFinite(Number.POSITIVE_INFINITY)) { - $ERROR('#1: Number.POSITIVE_INFINITY = 1; Number.POSITIVE_INFINITY === +Infinity'); -} else { - if (Number.POSITIVE_INFINITY <= 0) { - $ERROR('#1: Number.POSITIVE_INFINITY = 1; Number.POSITIVE_INFINITY === +Infinity'); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.6_Number.POSITIVE_INFINITY/S15.7.3.6_A3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.6_Number.POSITIVE_INFINITY/S15.7.3.6_A3.js deleted file mode 100644 index 8c4ece7ab..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.6_Number.POSITIVE_INFINITY/S15.7.3.6_A3.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.3.6_A3; - * @section: 15.7.3.6; - * @assertion: Number.POSITIVE_INFINITY is DontDelete; - * @description: Checking if deleting Number.POSITIVE_INFINITY fails; -*/ - -// CHECK#1 -if (delete Number.POSITIVE_INFINITY !== false) { - $ERROR('#1: delete Number.POSITIVE_INFINITY === false'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.6_Number.POSITIVE_INFINITY/S15.7.3.6_A4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.6_Number.POSITIVE_INFINITY/S15.7.3.6_A4.js deleted file mode 100644 index 9fd5de2a3..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/15.7.3.6_Number.POSITIVE_INFINITY/S15.7.3.6_A4.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.3.6_A4; - * @section: 15.7.3.6; - * @assertion: Number.POSITIVE_INFINITY has the attribute DontEnum; - * @description: Checking if enumerating Number.POSITIVE_INFINITY fails; -*/ - -//CHECK#1 -for(x in Number) { - if(x === "POSITIVE_INFINITY") { - $ERROR('#1: Number.POSITIVE_INFINITY has the attribute DontEnum'); - } -} - -if (Number.propertyIsEnumerable('POSITIVE_INFINITY')) { - $ERROR('#2: Number.POSITIVE_INFINITY has the attribute DontEnum'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/S15.7.3_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/S15.7.3_A1.js deleted file mode 100644 index bf9c53762..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/S15.7.3_A1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.3_A1; - * @section: 15.7.3; - * @assertion: The Number constructor has the property "prototype"; - * @description: Checking existence of the property "prototype"; - */ - -if(!Number.hasOwnProperty("prototype")){ - $ERROR('#1: The Number constructor has the property "prototype"'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/S15.7.3_A2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/S15.7.3_A2.js deleted file mode 100644 index 4110bca7e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/S15.7.3_A2.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.3_A2; - * @section: 15.7.3; - * @assertion: The Number constructor has the property "MAX_VALUE"; - * @description: Checking existence of the property "MAX_VALUE"; - */ - -if(!Number.hasOwnProperty("MAX_VALUE")){ - $ERROR('#1: The Number constructor has the property "MAX_VALUE"'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/S15.7.3_A3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/S15.7.3_A3.js deleted file mode 100644 index 814c4e710..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/S15.7.3_A3.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.3_A3; - * @section: 15.7.3; - * @assertion: The Number constructor has the property "MIN_VALUE"; - * @description: Checking existence of the property "MIN_VALUE"; - */ - -if(!Number.hasOwnProperty("MIN_VALUE")){ - $ERROR('#1: The Number constructor has the property "MIN_VALUE"'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/S15.7.3_A4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/S15.7.3_A4.js deleted file mode 100644 index 0f9d15c5e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/S15.7.3_A4.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.3_A4; - * @section: 15.7.3; - * @assertion: The Number constructor has the property "NaN"; - * @description: Checking existence of the property "NaN"; - */ - -if(!Number.hasOwnProperty("NaN")){ - $ERROR('#1: The Number constructor has the property "NaN"'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/S15.7.3_A5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/S15.7.3_A5.js deleted file mode 100644 index 6d5bef400..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/S15.7.3_A5.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.3_A5; - * @section: 15.7.3; - * @assertion: The Number constructor has the property "NEGATIVE_INFINITY"; - * @description: Checking existence of the property "NEGATIVE_INFINITY"; - */ - -if(!Number.hasOwnProperty("NEGATIVE_INFINITY")){ - $ERROR('#1: The Number constructor has the property "NEGATIVE_INFINITY"'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/S15.7.3_A6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/S15.7.3_A6.js deleted file mode 100644 index 03b665296..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/S15.7.3_A6.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.3_A6; - * @section: 15.7.3; - * @assertion: The Number constructor has the property "POSITIVE_INFINITY"; - * @description: Checking existence of the property "POSITIVE_INFINITY"; - */ - -if(!Number.hasOwnProperty("POSITIVE_INFINITY")){ - $ERROR('#1: The Number constructor has the property "POSITIVE_INFINITY"'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/S15.7.3_A7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/S15.7.3_A7.js deleted file mode 100644 index df4084894..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/S15.7.3_A7.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.7.3_A7; -* @section: 15.7.3; -* @assertion: The value of the internal [[Prototype]] property of the Number -* constructor is the Function prototype object; -* @description: Checking Function.prototype.isPrototypeOf(Number); -*/ - -//CHECK#1 -if (!(Function.prototype.isPrototypeOf(Number))) { - $ERROR('#1: the value of the internal [[Prototype]] property of the Number constructor is the Function prototype object.'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/S15.7.3_A8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/S15.7.3_A8.js deleted file mode 100644 index a94f3732d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.3_Properties_of_Number_Constructor/S15.7.3_A8.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.7.3_A8; -* @section: 15.7.3; -* @assertion: Number constructor has length property whose value is 1; -* @description: Checking Number.length property; -*/ - -//CHECK#1 -if (!Number.hasOwnProperty("length")){ - $ERROR('#1: Number constructor has length property'); -} - -//CHECK#2 -if (Number.length !== 1) { - $ERROR('#2: Number constructor length property value is 1'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.1_Number.prototype.constructor/S15.7.4.1_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.1_Number.prototype.constructor/S15.7.4.1_A1.js deleted file mode 100644 index 86f4e69ca..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.1_Number.prototype.constructor/S15.7.4.1_A1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4.1_A1; - * @section: 15.7.4.1; - * @assertion: The initial value of Number.prototype.constructor is the - * built-in Number constructor; - * @description: Compare Number.prototype.constructor with Number; -*/ - -//CHECK#1 -if(Number.prototype.constructor !== Number){ - $ERROR('#1: Number.prototype.constructor === Number'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A1_T01.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A1_T01.js deleted file mode 100644 index 84df44553..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A1_T01.js +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4.2_A1_T01; - * @section: 15.7.4.2; - * @assertion: toString: If radix is the number 10 or undefined, then this - * number value is given as an argument to the ToString operator. - * the resulting string value is returned; - * @description: undefined radix; -*/ - -//CHECK#1 -if(Number.prototype.toString() !== "0"){ - $ERROR('#1: Number.prototype.toString() === "0"'); -} - -//CHECK#2 -if((new Number()).toString() !== "0"){ - $ERROR('#2: (new Number()).toString() === "0"'); -} - -//CHECK#3 -if((new Number(0)).toString() !== "0"){ - $ERROR('#3: (new Number(0)).toString() === "0"'); -} - -//CHECK#4 -if((new Number(-1)).toString() !== "-1"){ - $ERROR('#4: (new Number(-1)).toString() === "-1"'); -} - -//CHECK#5 -if((new Number(1)).toString() !== "1"){ - $ERROR('#5: (new Number(1)).toString() === "1"'); -} - -//CHECK#6 -if((new Number(Number.NaN)).toString() !== "NaN"){ - $ERROR('#6: (new Number(Number.NaN)).toString() === "NaN"'); -} - -//CHECK#7 -if((new Number(Number.POSITIVE_INFINITY)).toString() !== "Infinity"){ - $ERROR('#7: (new Number(Number.POSITIVE_INFINITY)).toString() === "Infinity"'); -} - -//CHECK#8 -if((new Number(Number.NEGATIVE_INFINITY)).toString() !== "-Infinity"){ - $ERROR('#8: (new Number(Number.NEGATIVE_INFINITY)).toString() === "-Infinity"'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A1_T02.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A1_T02.js deleted file mode 100644 index 6048f024e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A1_T02.js +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4.2_A1_T02; - * @section: 15.7.4.2; - * @assertion: toString: If radix is the number 10 or undefined, then this - * number value is given as an argument to the ToString operator. - * the resulting string value is returned; - * @description: radix is 10; -*/ - -//CHECK#1 -if(Number.prototype.toString(10) !== "0"){ - $ERROR('#1: Number.prototype.toString(10) === "0"'); -} - -//CHECK#2 -if((new Number()).toString(10) !== "0"){ - $ERROR('#2: (new Number()).toString(10) === "0"'); -} - -//CHECK#3 -if((new Number(0)).toString(10) !== "0"){ - $ERROR('#3: (new Number(0)).toString(10) === "0"'); -} - -//CHECK#4 -if((new Number(-1)).toString(10) !== "-1"){ - $ERROR('#4: (new Number(-1)).toString(10) === "-1"'); -} - -//CHECK#5 -if((new Number(1)).toString(10) !== "1"){ - $ERROR('#5: (new Number(1)).toString(10) === "1"'); -} - -//CHECK#6 -if((new Number(Number.NaN)).toString(10) !== "NaN"){ - $ERROR('#6: (new Number(Number.NaN)).toString(10) === "NaN"'); -} - -//CHECK#7 -if((new Number(Number.POSITIVE_INFINITY)).toString(10) !== "Infinity"){ - $ERROR('#7: (new Number(Number.POSITIVE_INFINITY)).toString(10) === "Infinity"'); -} - -//CHECK#8 -if((new Number(Number.NEGATIVE_INFINITY)).toString(10) !== "-Infinity"){ - $ERROR('#8: (new Number(Number.NEGATIVE_INFINITY)).toString(10) === "-Infinity"'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A1_T03.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A1_T03.js deleted file mode 100644 index bc7dccd3f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A1_T03.js +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4.2_A1_T03; - * @section: 15.7.4.2; - * @assertion: toString: If radix is the number 10 or undefined, then this - * number value is given as an argument to the ToString operator. - * the resulting string value is returned; - * @description: radix is undefined value; -*/ - -//CHECK#1 -if(Number.prototype.toString(undefined) !== "0"){ - $ERROR('#1: Number.prototype.toString(undefined) === "0"'); -} - -//CHECK#2 -if((new Number()).toString(undefined) !== "0"){ - $ERROR('#2: (new Number()).toString(undefined) === "0"'); -} - -//CHECK#3 -if((new Number(0)).toString(undefined) !== "0"){ - $ERROR('#3: (new Number(0)).toString(undefined) === "0"'); -} - -//CHECK#4 -if((new Number(-1)).toString(undefined) !== "-1"){ - $ERROR('#4: (new Number(-1)).toString(undefined) === "-1"'); -} - -//CHECK#5 -if((new Number(1)).toString(undefined) !== "1"){ - $ERROR('#5: (new Number(1)).toString(undefined) === "1"'); -} - -//CHECK#6 -if((new Number(Number.NaN)).toString(undefined) !== "NaN"){ - $ERROR('#6: (new Number(Number.NaN)).toString(undefined) === "NaN"'); -} - -//CHECK#7 -if((new Number(Number.POSITIVE_INFINITY)).toString(undefined) !== "Infinity"){ - $ERROR('#7: (new Number(Number.POSITIVE_INFINITY)).toString(undefined) === "Infinity"'); -} - -//CHECK#8 -if((new Number(Number.NEGATIVE_INFINITY)).toString(undefined) !== "-Infinity"){ - $ERROR('#8: (new Number(Number.NEGATIVE_INFINITY)).toString(undefined) === "-Infinity"'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T01.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T01.js deleted file mode 100644 index 8a86633fb..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T01.js +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4.2_A2_T01; - * @section: 15.7.4.2; - * @assertion: toString: If radix is an integer from 2 to 36, but not 10, - * the result is a string, the choice of which is implementation-dependent; - * @description: radix is 2; -*/ - -//CHECK#1 -if(Number.prototype.toString(2) !== "0"){ - $ERROR('#1: Number.prototype.toString(2) === "0"'); -} - -//CHECK#2 -if((new Number()).toString(2) !== "0"){ - $ERROR('#2: (new Number()).toString(2) === "0"'); -} - -//CHECK#3 -if((new Number(0)).toString(2) !== "0"){ - $ERROR('#3: (new Number(0)).toString(2) === "0"'); -} - -//CHECK#4 -if((new Number(-1)).toString(2) !== "-1"){ - $ERROR('#4: (new Number(-1)).toString(2) === "-1"'); -} - -//CHECK#5 -if((new Number(1)).toString(2) !== "1"){ - $ERROR('#5: (new Number(1)).toString(2) === "1"'); -} - -//CHECK#6 -if((new Number(Number.NaN)).toString(2) !== "NaN"){ - $ERROR('#6: (new Number(Number.NaN)).toString(2) === "NaN"'); -} - -//CHECK#7 -if((new Number(Number.POSITIVE_INFINITY)).toString(2) !== "Infinity"){ - $ERROR('#7: (new Number(Number.POSITIVE_INFINITY)).toString(2) === "Infinity"'); -} - -//CHECK#8 -if((new Number(Number.NEGATIVE_INFINITY)).toString(2) !== "-Infinity"){ - $ERROR('#8: (new Number(Number.NEGATIVE_INFINITY)).toString(2) === "-Infinity"'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T02.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T02.js deleted file mode 100644 index e031f44fc..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T02.js +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4.2_A2_T02; - * @section: 15.7.4.2; - * @assertion: toString: If radix is an integer from 2 to 36, but not 10, - * the result is a string, the choice of which is implementation-dependent; - * @description: radix is 3; -*/ - -//CHECK#1 -if(Number.prototype.toString(3) !== "0"){ - $ERROR('#1: Number.prototype.toString(3) === "0"'); -} - -//CHECK#2 -if((new Number()).toString(3) !== "0"){ - $ERROR('#2: (new Number()).toString(3) === "0"'); -} - -//CHECK#3 -if((new Number(0)).toString(3) !== "0"){ - $ERROR('#3: (new Number(0)).toString(3) === "0"'); -} - -//CHECK#4 -if((new Number(-1)).toString(3) !== "-1"){ - $ERROR('#4: (new Number(-1)).toString(3) === "-1"'); -} - -//CHECK#5 -if((new Number(1)).toString(3) !== "1"){ - $ERROR('#5: (new Number(1)).toString(3) === "1"'); -} - -//CHECK#6 -if((new Number(Number.NaN)).toString(3) !== "NaN"){ - $ERROR('#6: (new Number(Number.NaN)).toString(3) === "NaN"'); -} - -//CHECK#7 -if((new Number(Number.POSITIVE_INFINITY)).toString(3) !== "Infinity"){ - $ERROR('#7: (new Number(Number.POSITIVE_INFINITY)).toString(3) === "Infinity"'); -} - -//CHECK#8 -if((new Number(Number.NEGATIVE_INFINITY)).toString(3) !== "-Infinity"){ - $ERROR('#8: (new Number(Number.NEGATIVE_INFINITY)).toString(3) === "-Infinity"'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T03.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T03.js deleted file mode 100644 index 6857aa6d0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T03.js +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4.2_A2_T03; - * @section: 15.7.4.2; - * @assertion: toString: If radix is an integer from 2 to 36, but not 10, - * the result is a string, the choice of which is implementation-dependent; - * @description: radix is 4; -*/ - -//CHECK#1 -if(Number.prototype.toString(4) !== "0"){ - $ERROR('#1: Number.prototype.toString(4) === "0"'); -} - -//CHECK#2 -if((new Number()).toString(4) !== "0"){ - $ERROR('#2: (new Number()).toString(4) === "0"'); -} - -//CHECK#3 -if((new Number(0)).toString(4) !== "0"){ - $ERROR('#3: (new Number(0)).toString(4) === "0"'); -} - -//CHECK#4 -if((new Number(-1)).toString(4) !== "-1"){ - $ERROR('#4: (new Number(-1)).toString(4) === "-1"'); -} - -//CHECK#5 -if((new Number(1)).toString(4) !== "1"){ - $ERROR('#5: (new Number(1)).toString(4) === "1"'); -} - -//CHECK#6 -if((new Number(Number.NaN)).toString(4) !== "NaN"){ - $ERROR('#6: (new Number(Number.NaN)).toString(4) === "NaN"'); -} - -//CHECK#7 -if((new Number(Number.POSITIVE_INFINITY)).toString(4) !== "Infinity"){ - $ERROR('#7: (new Number(Number.POSITIVE_INFINITY)).toString(4) === "Infinity"'); -} - -//CHECK#8 -if((new Number(Number.NEGATIVE_INFINITY)).toString(4) !== "-Infinity"){ - $ERROR('#8: (new Number(Number.NEGATIVE_INFINITY)).toString(4) === "-Infinity"'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T04.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T04.js deleted file mode 100644 index 444f03547..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T04.js +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4.2_A2_T04; - * @section: 15.7.4.2; - * @assertion: toString: If radix is an integer from 2 to 36, but not 10, - * the result is a string, the choice of which is implementation-dependent; - * @description: radix is 5; -*/ - -//CHECK#1 -if(Number.prototype.toString(5) !== "0"){ - $ERROR('#1: Number.prototype.toString(5) === "0"'); -} - -//CHECK#2 -if((new Number()).toString(5) !== "0"){ - $ERROR('#2: (new Number()).toString(5) === "0"'); -} - -//CHECK#3 -if((new Number(0)).toString(5) !== "0"){ - $ERROR('#3: (new Number(0)).toString(5) === "0"'); -} - -//CHECK#4 -if((new Number(-1)).toString(5) !== "-1"){ - $ERROR('#4: (new Number(-1)).toString(5) === "-1"'); -} - -//CHECK#5 -if((new Number(1)).toString(5) !== "1"){ - $ERROR('#5: (new Number(1)).toString(5) === "1"'); -} - -//CHECK#6 -if((new Number(Number.NaN)).toString(5) !== "NaN"){ - $ERROR('#6: (new Number(Number.NaN)).toString(5) === "NaN"'); -} - -//CHECK#7 -if((new Number(Number.POSITIVE_INFINITY)).toString(5) !== "Infinity"){ - $ERROR('#7: (new Number(Number.POSITIVE_INFINITY)).toString(5) === "Infinity"'); -} - -//CHECK#8 -if((new Number(Number.NEGATIVE_INFINITY)).toString(5) !== "-Infinity"){ - $ERROR('#8: (new Number(Number.NEGATIVE_INFINITY)).toString(5) === "-Infinity"'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T05.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T05.js deleted file mode 100644 index 0eb9f51d6..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T05.js +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4.2_A2_T05; - * @section: 15.7.4.2; - * @assertion: toString: If radix is an integer from 2 to 36, but not 10, - * the result is a string, the choice of which is implementation-dependent; - * @description: radix is 6; -*/ - -//CHECK#1 -if(Number.prototype.toString(6) !== "0"){ - $ERROR('#1: Number.prototype.toString(6) === "0"'); -} - -//CHECK#2 -if((new Number()).toString(6) !== "0"){ - $ERROR('#2: (new Number()).toString(6) === "0"'); -} - -//CHECK#3 -if((new Number(0)).toString(6) !== "0"){ - $ERROR('#3: (new Number(0)).toString(6) === "0"'); -} - -//CHECK#4 -if((new Number(-1)).toString(6) !== "-1"){ - $ERROR('#4: (new Number(-1)).toString(6) === "-1"'); -} - -//CHECK#5 -if((new Number(1)).toString(6) !== "1"){ - $ERROR('#5: (new Number(1)).toString(6) === "1"'); -} - -//CHECK#6 -if((new Number(Number.NaN)).toString(6) !== "NaN"){ - $ERROR('#6: (new Number(Number.NaN)).toString(6) === "NaN"'); -} - -//CHECK#7 -if((new Number(Number.POSITIVE_INFINITY)).toString(6) !== "Infinity"){ - $ERROR('#7: (new Number(Number.POSITIVE_INFINITY)).toString(6) === "Infinity"'); -} - -//CHECK#8 -if((new Number(Number.NEGATIVE_INFINITY)).toString(6) !== "-Infinity"){ - $ERROR('#8: (new Number(Number.NEGATIVE_INFINITY)).toString(6) === "-Infinity"'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T06.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T06.js deleted file mode 100644 index 8c1ef484b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T06.js +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4.2_A2_T06; - * @section: 15.7.4.2; - * @assertion: toString: If radix is an integer from 2 to 36, but not 10, - * the result is a string, the choice of which is implementation-dependent; - * @description: radix is 7; -*/ - -//CHECK#1 -if(Number.prototype.toString(7) !== "0"){ - $ERROR('#1: Number.prototype.toString(7) === "0"'); -} - -//CHECK#2 -if((new Number()).toString(7) !== "0"){ - $ERROR('#2: (new Number()).toString(7) === "0"'); -} - -//CHECK#3 -if((new Number(0)).toString(7) !== "0"){ - $ERROR('#3: (new Number(0)).toString(7) === "0"'); -} - -//CHECK#4 -if((new Number(-1)).toString(7) !== "-1"){ - $ERROR('#4: (new Number(-1)).toString(7) === "-1"'); -} - -//CHECK#5 -if((new Number(1)).toString(7) !== "1"){ - $ERROR('#5: (new Number(1)).toString(7) === "1"'); -} - -//CHECK#6 -if((new Number(Number.NaN)).toString(7) !== "NaN"){ - $ERROR('#6: (new Number(Number.NaN)).toString(7) === "NaN"'); -} - -//CHECK#7 -if((new Number(Number.POSITIVE_INFINITY)).toString(7) !== "Infinity"){ - $ERROR('#7: (new Number(Number.POSITIVE_INFINITY)).toString(7) === "Infinity"'); -} - -//CHECK#8 -if((new Number(Number.NEGATIVE_INFINITY)).toString(7) !== "-Infinity"){ - $ERROR('#8: (new Number(Number.NEGATIVE_INFINITY)).toString(7) === "-Infinity"'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T07.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T07.js deleted file mode 100644 index 8b8554ad7..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T07.js +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4.2_A2_T07; - * @section: 15.7.4.2; - * @assertion: toString: If radix is an integer from 2 to 36, but not 10, - * the result is a string, the choice of which is implementation-dependent; - * @description: radix is 8; -*/ - -//CHECK#1 -if(Number.prototype.toString(8) !== "0"){ - $ERROR('#1: Number.prototype.toString(8) === "0"'); -} - -//CHECK#2 -if((new Number()).toString(8) !== "0"){ - $ERROR('#2: (new Number()).toString(8) === "0"'); -} - -//CHECK#3 -if((new Number(0)).toString(8) !== "0"){ - $ERROR('#3: (new Number(0)).toString(8) === "0"'); -} - -//CHECK#4 -if((new Number(-1)).toString(8) !== "-1"){ - $ERROR('#4: (new Number(-1)).toString(8) === "-1"'); -} - -//CHECK#5 -if((new Number(1)).toString(8) !== "1"){ - $ERROR('#5: (new Number(1)).toString(8) === "1"'); -} - -//CHECK#6 -if((new Number(Number.NaN)).toString(8) !== "NaN"){ - $ERROR('#6: (new Number(Number.NaN)).toString(8) === "NaN"'); -} - -//CHECK#7 -if((new Number(Number.POSITIVE_INFINITY)).toString(8) !== "Infinity"){ - $ERROR('#7: (new Number(Number.POSITIVE_INFINITY)).toString(8) === "Infinity"'); -} - -//CHECK#8 -if((new Number(Number.NEGATIVE_INFINITY)).toString(8) !== "-Infinity"){ - $ERROR('#8: (new Number(Number.NEGATIVE_INFINITY)).toString(8) === "-Infinity"'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T08.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T08.js deleted file mode 100644 index 1eedcd387..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T08.js +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4.2_A2_T08; - * @section: 15.7.4.2; - * @assertion: toString: If radix is an integer from 2 to 36, but not 10, - * the result is a string, the choice of which is implementation-dependent; - * @description: radix is 9; -*/ - -//CHECK#1 -if(Number.prototype.toString(9) !== "0"){ - $ERROR('#1: Number.prototype.toString(9) === "0"'); -} - -//CHECK#2 -if((new Number()).toString(9) !== "0"){ - $ERROR('#2: (new Number()).toString(9) === "0"'); -} - -//CHECK#3 -if((new Number(0)).toString(9) !== "0"){ - $ERROR('#3: (new Number(0)).toString(9) === "0"'); -} - -//CHECK#4 -if((new Number(-1)).toString(9) !== "-1"){ - $ERROR('#4: (new Number(-1)).toString(9) === "-1"'); -} - -//CHECK#5 -if((new Number(1)).toString(9) !== "1"){ - $ERROR('#5: (new Number(1)).toString(9) === "1"'); -} - -//CHECK#6 -if((new Number(Number.NaN)).toString(9) !== "NaN"){ - $ERROR('#6: (new Number(Number.NaN)).toString(9) === "NaN"'); -} - -//CHECK#7 -if((new Number(Number.POSITIVE_INFINITY)).toString(9) !== "Infinity"){ - $ERROR('#7: (new Number(Number.POSITIVE_INFINITY)).toString(9) === "Infinity"'); -} - -//CHECK#8 -if((new Number(Number.NEGATIVE_INFINITY)).toString(9) !== "-Infinity"){ - $ERROR('#8: (new Number(Number.NEGATIVE_INFINITY)).toString(9) === "-Infinity"'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T09.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T09.js deleted file mode 100644 index d9b04e8ab..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T09.js +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4.2_A2_T09; - * @section: 15.7.4.2; - * @assertion: toString: If radix is an integer from 2 to 36, but not 10, - * the result is a string, the choice of which is implementation-dependent; - * @description: radix is 11; -*/ - -//CHECK#1 -if(Number.prototype.toString(11) !== "0"){ - $ERROR('#1: Number.prototype.toString(11) === "0"'); -} - -//CHECK#2 -if((new Number()).toString(11) !== "0"){ - $ERROR('#2: (new Number()).toString(11) === "0"'); -} - -//CHECK#3 -if((new Number(0)).toString(11) !== "0"){ - $ERROR('#3: (new Number(0)).toString(11) === "0"'); -} - -//CHECK#4 -if((new Number(-1)).toString(11) !== "-1"){ - $ERROR('#4: (new Number(-1)).toString(11) === "-1"'); -} - -//CHECK#5 -if((new Number(1)).toString(11) !== "1"){ - $ERROR('#5: (new Number(1)).toString(11) === "1"'); -} - -//CHECK#6 -if((new Number(Number.NaN)).toString(11) !== "NaN"){ - $ERROR('#6: (new Number(Number.NaN)).toString(11) === "NaN"'); -} - -//CHECK#7 -if((new Number(Number.POSITIVE_INFINITY)).toString(11) !== "Infinity"){ - $ERROR('#7: (new Number(Number.POSITIVE_INFINITY)).toString(11) === "Infinity"'); -} - -//CHECK#8 -if((new Number(Number.NEGATIVE_INFINITY)).toString(11) !== "-Infinity"){ - $ERROR('#8: (new Number(Number.NEGATIVE_INFINITY)).toString(11) === "-Infinity"'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T10.js deleted file mode 100644 index 87f640f42..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T10.js +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4.2_A2_T10; - * @section: 15.7.4.2; - * @assertion: toString: If radix is an integer from 2 to 36, but not 10, - * the result is a string, the choice of which is implementation-dependent; - * @description: radix is 12; -*/ - -//CHECK#1 -if(Number.prototype.toString(12) !== "0"){ - $ERROR('#1: Number.prototype.toString(12) === "0"'); -} - -//CHECK#2 -if((new Number()).toString(12) !== "0"){ - $ERROR('#2: (new Number()).toString(12) === "0"'); -} - -//CHECK#3 -if((new Number(0)).toString(12) !== "0"){ - $ERROR('#3: (new Number(0)).toString(12) === "0"'); -} - -//CHECK#4 -if((new Number(-1)).toString(12) !== "-1"){ - $ERROR('#4: (new Number(-1)).toString(12) === "-1"'); -} - -//CHECK#5 -if((new Number(1)).toString(12) !== "1"){ - $ERROR('#5: (new Number(1)).toString(12) === "1"'); -} - -//CHECK#6 -if((new Number(Number.NaN)).toString(12) !== "NaN"){ - $ERROR('#6: (new Number(Number.NaN)).toString(12) === "NaN"'); -} - -//CHECK#7 -if((new Number(Number.POSITIVE_INFINITY)).toString(12) !== "Infinity"){ - $ERROR('#7: (new Number(Number.POSITIVE_INFINITY)).toString(12) === "Infinity"'); -} - -//CHECK#8 -if((new Number(Number.NEGATIVE_INFINITY)).toString(12) !== "-Infinity"){ - $ERROR('#8: (new Number(Number.NEGATIVE_INFINITY)).toString(12) === "-Infinity"'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T11.js deleted file mode 100644 index 8fba514a6..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T11.js +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4.2_A2_T11; - * @section: 15.7.4.2; - * @assertion: toString: If radix is an integer from 2 to 36, but not 10, - * the result is a string, the choice of which is implementation-dependent; - * @description: radix is 13; -*/ - -//CHECK#1 -if(Number.prototype.toString(13) !== "0"){ - $ERROR('#1: Number.prototype.toString(13) === "0"'); -} - -//CHECK#2 -if((new Number()).toString(13) !== "0"){ - $ERROR('#2: (new Number()).toString(13) === "0"'); -} - -//CHECK#3 -if((new Number(0)).toString(13) !== "0"){ - $ERROR('#3: (new Number(0)).toString(13) === "0"'); -} - -//CHECK#4 -if((new Number(-1)).toString(13) !== "-1"){ - $ERROR('#4: (new Number(-1)).toString(13) === "-1"'); -} - -//CHECK#5 -if((new Number(1)).toString(13) !== "1"){ - $ERROR('#5: (new Number(1)).toString(13) === "1"'); -} - -//CHECK#6 -if((new Number(Number.NaN)).toString(13) !== "NaN"){ - $ERROR('#6: (new Number(Number.NaN)).toString(13) === "NaN"'); -} - -//CHECK#7 -if((new Number(Number.POSITIVE_INFINITY)).toString(13) !== "Infinity"){ - $ERROR('#7: (new Number(Number.POSITIVE_INFINITY)).toString(13) === "Infinity"'); -} - -//CHECK#8 -if((new Number(Number.NEGATIVE_INFINITY)).toString(13) !== "-Infinity"){ - $ERROR('#8: (new Number(Number.NEGATIVE_INFINITY)).toString(13) === "-Infinity"'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T12.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T12.js deleted file mode 100644 index 101be9822..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T12.js +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4.2_A2_T12; - * @section: 15.7.4.2; - * @assertion: toString: If radix is an integer from 2 to 36, but not 10, - * the result is a string, the choice of which is implementation-dependent; - * @description: radix is 14; -*/ - -//CHECK#1 -if(Number.prototype.toString(14) !== "0"){ - $ERROR('#1: Number.prototype.toString(14) === "0"'); -} - -//CHECK#2 -if((new Number()).toString(14) !== "0"){ - $ERROR('#2: (new Number()).toString(14) === "0"'); -} - -//CHECK#3 -if((new Number(0)).toString(14) !== "0"){ - $ERROR('#3: (new Number(0)).toString(14) === "0"'); -} - -//CHECK#4 -if((new Number(-1)).toString(14) !== "-1"){ - $ERROR('#4: (new Number(-1)).toString(14) === "-1"'); -} - -//CHECK#5 -if((new Number(1)).toString(14) !== "1"){ - $ERROR('#5: (new Number(1)).toString(14) === "1"'); -} - -//CHECK#6 -if((new Number(Number.NaN)).toString(14) !== "NaN"){ - $ERROR('#6: (new Number(Number.NaN)).toString(14) === "NaN"'); -} - -//CHECK#7 -if((new Number(Number.POSITIVE_INFINITY)).toString(14) !== "Infinity"){ - $ERROR('#7: (new Number(Number.POSITIVE_INFINITY)).toString(14) === "Infinity"'); -} - -//CHECK#8 -if((new Number(Number.NEGATIVE_INFINITY)).toString(14) !== "-Infinity"){ - $ERROR('#8: (new Number(Number.NEGATIVE_INFINITY)).toString(14) === "-Infinity"'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T13.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T13.js deleted file mode 100644 index 288b33432..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T13.js +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4.2_A2_T13; - * @section: 15.7.4.2; - * @assertion: toString: If radix is an integer from 2 to 36, but not 10, - * the result is a string, the choice of which is implementation-dependent; - * @description: radix is 15; -*/ - -//CHECK#1 -if(Number.prototype.toString(15) !== "0"){ - $ERROR('#1: Number.prototype.toString(15) === "0"'); -} - -//CHECK#2 -if((new Number()).toString(15) !== "0"){ - $ERROR('#2: (new Number()).toString(15) === "0"'); -} - -//CHECK#3 -if((new Number(0)).toString(15) !== "0"){ - $ERROR('#3: (new Number(0)).toString(15) === "0"'); -} - -//CHECK#4 -if((new Number(-1)).toString(15) !== "-1"){ - $ERROR('#4: (new Number(-1)).toString(15) === "-1"'); -} - -//CHECK#5 -if((new Number(1)).toString(15) !== "1"){ - $ERROR('#5: (new Number(1)).toString(15) === "1"'); -} - -//CHECK#6 -if((new Number(Number.NaN)).toString(15) !== "NaN"){ - $ERROR('#6: (new Number(Number.NaN)).toString(15) === "NaN"'); -} - -//CHECK#7 -if((new Number(Number.POSITIVE_INFINITY)).toString(15) !== "Infinity"){ - $ERROR('#7: (new Number(Number.POSITIVE_INFINITY)).toString(15) === "Infinity"'); -} - -//CHECK#8 -if((new Number(Number.NEGATIVE_INFINITY)).toString(15) !== "-Infinity"){ - $ERROR('#8: (new Number(Number.NEGATIVE_INFINITY)).toString(15) === "-Infinity"'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T14.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T14.js deleted file mode 100644 index 3c99a17be..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T14.js +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4.2_A2_T14; - * @section: 15.7.4.2; - * @assertion: toString: If radix is an integer from 2 to 36, but not 10, - * the result is a string, the choice of which is implementation-dependent; - * @description: radix is 16; -*/ - -//CHECK#1 -if(Number.prototype.toString(16) !== "0"){ - $ERROR('#1: Number.prototype.toString(16) === "0"'); -} - -//CHECK#2 -if((new Number()).toString(16) !== "0"){ - $ERROR('#2: (new Number()).toString(16) === "0"'); -} - -//CHECK#3 -if((new Number(0)).toString(16) !== "0"){ - $ERROR('#3: (new Number(0)).toString(16) === "0"'); -} - -//CHECK#4 -if((new Number(-1)).toString(16) !== "-1"){ - $ERROR('#4: (new Number(-1)).toString(16) === "-1"'); -} - -//CHECK#5 -if((new Number(1)).toString(16) !== "1"){ - $ERROR('#5: (new Number(1)).toString(16) === "1"'); -} - -//CHECK#6 -if((new Number(Number.NaN)).toString(16) !== "NaN"){ - $ERROR('#6: (new Number(Number.NaN)).toString(16) === "NaN"'); -} - -//CHECK#7 -if((new Number(Number.POSITIVE_INFINITY)).toString(16) !== "Infinity"){ - $ERROR('#7: (new Number(Number.POSITIVE_INFINITY)).toString(16) === "Infinity"'); -} - -//CHECK#8 -if((new Number(Number.NEGATIVE_INFINITY)).toString(16) !== "-Infinity"){ - $ERROR('#8: (new Number(Number.NEGATIVE_INFINITY)).toString(16) === "-Infinity"'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T15.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T15.js deleted file mode 100644 index 53566eb72..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T15.js +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4.2_A2_T15; - * @section: 15.7.4.2; - * @assertion: toString: If radix is an integer from 2 to 36, but not 10, - * the result is a string, the choice of which is implementation-dependent; - * @description: radix is 17; -*/ - -//CHECK#1 -if(Number.prototype.toString(17) !== "0"){ - $ERROR('#1: Number.prototype.toString(17) === "0"'); -} - -//CHECK#2 -if((new Number()).toString(17) !== "0"){ - $ERROR('#2: (new Number()).toString(17) === "0"'); -} - -//CHECK#3 -if((new Number(0)).toString(17) !== "0"){ - $ERROR('#3: (new Number(0)).toString(17) === "0"'); -} - -//CHECK#4 -if((new Number(-1)).toString(17) !== "-1"){ - $ERROR('#4: (new Number(-1)).toString(17) === "-1"'); -} - -//CHECK#5 -if((new Number(1)).toString(17) !== "1"){ - $ERROR('#5: (new Number(1)).toString(17) === "1"'); -} - -//CHECK#6 -if((new Number(Number.NaN)).toString(17) !== "NaN"){ - $ERROR('#6: (new Number(Number.NaN)).toString(17) === "NaN"'); -} - -//CHECK#7 -if((new Number(Number.POSITIVE_INFINITY)).toString(17) !== "Infinity"){ - $ERROR('#7: (new Number(Number.POSITIVE_INFINITY)).toString(17) === "Infinity"'); -} - -//CHECK#8 -if((new Number(Number.NEGATIVE_INFINITY)).toString(17) !== "-Infinity"){ - $ERROR('#8: (new Number(Number.NEGATIVE_INFINITY)).toString(17) === "-Infinity"'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T16.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T16.js deleted file mode 100644 index e4aeaf34f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T16.js +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4.2_A2_T16; - * @section: 15.7.4.2; - * @assertion: toString: If radix is an integer from 2 to 36, but not 10, - * the result is a string, the choice of which is implementation-dependent; - * @description: radix is 18; -*/ - -//CHECK#1 -if(Number.prototype.toString(18) !== "0"){ - $ERROR('#1: Number.prototype.toString(18) === "0"'); -} - -//CHECK#2 -if((new Number()).toString(18) !== "0"){ - $ERROR('#2: (new Number()).toString(18) === "0"'); -} - -//CHECK#3 -if((new Number(0)).toString(18) !== "0"){ - $ERROR('#3: (new Number(0)).toString(18) === "0"'); -} - -//CHECK#4 -if((new Number(-1)).toString(18) !== "-1"){ - $ERROR('#4: (new Number(-1)).toString(18) === "-1"'); -} - -//CHECK#5 -if((new Number(1)).toString(18) !== "1"){ - $ERROR('#5: (new Number(1)).toString(18) === "1"'); -} - -//CHECK#6 -if((new Number(Number.NaN)).toString(18) !== "NaN"){ - $ERROR('#6: (new Number(Number.NaN)).toString(18) === "NaN"'); -} - -//CHECK#7 -if((new Number(Number.POSITIVE_INFINITY)).toString(18) !== "Infinity"){ - $ERROR('#7: (new Number(Number.POSITIVE_INFINITY)).toString(18) === "Infinity"'); -} - -//CHECK#8 -if((new Number(Number.NEGATIVE_INFINITY)).toString(18) !== "-Infinity"){ - $ERROR('#8: (new Number(Number.NEGATIVE_INFINITY)).toString(18) === "-Infinity"'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T17.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T17.js deleted file mode 100644 index c2695f5db..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T17.js +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4.2_A2_T17; - * @section: 15.7.4.2; - * @assertion: toString: If radix is an integer from 2 to 36, but not 10, - * the result is a string, the choice of which is implementation-dependent; - * @description: radix is 19; -*/ - -//CHECK#1 -if(Number.prototype.toString(19) !== "0"){ - $ERROR('#1: Number.prototype.toString(19) === "0"'); -} - -//CHECK#2 -if((new Number()).toString(19) !== "0"){ - $ERROR('#2: (new Number()).toString(19) === "0"'); -} - -//CHECK#3 -if((new Number(0)).toString(19) !== "0"){ - $ERROR('#3: (new Number(0)).toString(19) === "0"'); -} - -//CHECK#4 -if((new Number(-1)).toString(19) !== "-1"){ - $ERROR('#4: (new Number(-1)).toString(19) === "-1"'); -} - -//CHECK#5 -if((new Number(1)).toString(19) !== "1"){ - $ERROR('#5: (new Number(1)).toString(19) === "1"'); -} - -//CHECK#6 -if((new Number(Number.NaN)).toString(19) !== "NaN"){ - $ERROR('#6: (new Number(Number.NaN)).toString(19) === "NaN"'); -} - -//CHECK#7 -if((new Number(Number.POSITIVE_INFINITY)).toString(19) !== "Infinity"){ - $ERROR('#7: (new Number(Number.POSITIVE_INFINITY)).toString(19) === "Infinity"'); -} - -//CHECK#8 -if((new Number(Number.NEGATIVE_INFINITY)).toString(19) !== "-Infinity"){ - $ERROR('#8: (new Number(Number.NEGATIVE_INFINITY)).toString(19) === "-Infinity"'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T18.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T18.js deleted file mode 100644 index 49a9a365e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T18.js +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4.2_A2_T18; - * @section: 15.7.4.2; - * @assertion: toString: If radix is an integer from 2 to 36, but not 10, - * the result is a string, the choice of which is implementation-dependent; - * @description: radix is 20; -*/ - -//CHECK#1 -if(Number.prototype.toString(20) !== "0"){ - $ERROR('#1: Number.prototype.toString(20) === "0"'); -} - -//CHECK#2 -if((new Number()).toString(20) !== "0"){ - $ERROR('#2: (new Number()).toString(20) === "0"'); -} - -//CHECK#3 -if((new Number(0)).toString(20) !== "0"){ - $ERROR('#3: (new Number(0)).toString(20) === "0"'); -} - -//CHECK#4 -if((new Number(-1)).toString(20) !== "-1"){ - $ERROR('#4: (new Number(-1)).toString(20) === "-1"'); -} - -//CHECK#5 -if((new Number(1)).toString(20) !== "1"){ - $ERROR('#5: (new Number(1)).toString(20) === "1"'); -} - -//CHECK#6 -if((new Number(Number.NaN)).toString(20) !== "NaN"){ - $ERROR('#6: (new Number(Number.NaN)).toString(20) === "NaN"'); -} - -//CHECK#7 -if((new Number(Number.POSITIVE_INFINITY)).toString(20) !== "Infinity"){ - $ERROR('#7: (new Number(Number.POSITIVE_INFINITY)).toString(20) === "Infinity"'); -} - -//CHECK#8 -if((new Number(Number.NEGATIVE_INFINITY)).toString(20) !== "-Infinity"){ - $ERROR('#8: (new Number(Number.NEGATIVE_INFINITY)).toString(20) === "-Infinity"'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T19.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T19.js deleted file mode 100644 index 7ca7d4093..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T19.js +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4.2_A2_T19; - * @section: 15.7.4.2; - * @assertion: toString: If radix is an integer from 2 to 36, but not 10, - * the result is a string, the choice of which is implementation-dependent; - * @description: radix is 21; -*/ - -//CHECK#1 -if(Number.prototype.toString(21) !== "0"){ - $ERROR('#1: Number.prototype.toString(21) === "0"'); -} - -//CHECK#2 -if((new Number()).toString(21) !== "0"){ - $ERROR('#2: (new Number()).toString(21) === "0"'); -} - -//CHECK#3 -if((new Number(0)).toString(21) !== "0"){ - $ERROR('#3: (new Number(0)).toString(21) === "0"'); -} - -//CHECK#4 -if((new Number(-1)).toString(21) !== "-1"){ - $ERROR('#4: (new Number(-1)).toString(21) === "-1"'); -} - -//CHECK#5 -if((new Number(1)).toString(21) !== "1"){ - $ERROR('#5: (new Number(1)).toString(21) === "1"'); -} - -//CHECK#6 -if((new Number(Number.NaN)).toString(21) !== "NaN"){ - $ERROR('#6: (new Number(Number.NaN)).toString(21) === "NaN"'); -} - -//CHECK#7 -if((new Number(Number.POSITIVE_INFINITY)).toString(21) !== "Infinity"){ - $ERROR('#7: (new Number(Number.POSITIVE_INFINITY)).toString(21) === "Infinity"'); -} - -//CHECK#8 -if((new Number(Number.NEGATIVE_INFINITY)).toString(21) !== "-Infinity"){ - $ERROR('#8: (new Number(Number.NEGATIVE_INFINITY)).toString(21) === "-Infinity"'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T20.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T20.js deleted file mode 100644 index fc632d378..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T20.js +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4.2_A2_T20; - * @section: 15.7.4.2; - * @assertion: toString: If radix is an integer from 2 to 36, but not 10, - * the result is a string, the choice of which is implementation-dependent; - * @description: radix is 22; -*/ - -//CHECK#1 -if(Number.prototype.toString(22) !== "0"){ - $ERROR('#1: Number.prototype.toString(22) === "0"'); -} - -//CHECK#2 -if((new Number()).toString(22) !== "0"){ - $ERROR('#2: (new Number()).toString(22) === "0"'); -} - -//CHECK#3 -if((new Number(0)).toString(22) !== "0"){ - $ERROR('#3: (new Number(0)).toString(22) === "0"'); -} - -//CHECK#4 -if((new Number(-1)).toString(22) !== "-1"){ - $ERROR('#4: (new Number(-1)).toString(22) === "-1"'); -} - -//CHECK#5 -if((new Number(1)).toString(22) !== "1"){ - $ERROR('#5: (new Number(1)).toString(22) === "1"'); -} - -//CHECK#6 -if((new Number(Number.NaN)).toString(22) !== "NaN"){ - $ERROR('#6: (new Number(Number.NaN)).toString(22) === "NaN"'); -} - -//CHECK#7 -if((new Number(Number.POSITIVE_INFINITY)).toString(22) !== "Infinity"){ - $ERROR('#7: (new Number(Number.POSITIVE_INFINITY)).toString(22) === "Infinity"'); -} - -//CHECK#8 -if((new Number(Number.NEGATIVE_INFINITY)).toString(22) !== "-Infinity"){ - $ERROR('#8: (new Number(Number.NEGATIVE_INFINITY)).toString(22) === "-Infinity"'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T21.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T21.js deleted file mode 100644 index a217412b9..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T21.js +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4.2_A2_T21; - * @section: 15.7.4.2; - * @assertion: toString: If radix is an integer from 2 to 36, but not 10, - * the result is a string, the choice of which is implementation-dependent; - * @description: radix is 23; -*/ - -//CHECK#1 -if(Number.prototype.toString(23) !== "0"){ - $ERROR('#1: Number.prototype.toString(23) === "0"'); -} - -//CHECK#2 -if((new Number()).toString(23) !== "0"){ - $ERROR('#2: (new Number()).toString(23) === "0"'); -} - -//CHECK#3 -if((new Number(0)).toString(23) !== "0"){ - $ERROR('#3: (new Number(0)).toString(23) === "0"'); -} - -//CHECK#4 -if((new Number(-1)).toString(23) !== "-1"){ - $ERROR('#4: (new Number(-1)).toString(23) === "-1"'); -} - -//CHECK#5 -if((new Number(1)).toString(23) !== "1"){ - $ERROR('#5: (new Number(1)).toString(23) === "1"'); -} - -//CHECK#6 -if((new Number(Number.NaN)).toString(23) !== "NaN"){ - $ERROR('#6: (new Number(Number.NaN)).toString(23) === "NaN"'); -} - -//CHECK#7 -if((new Number(Number.POSITIVE_INFINITY)).toString(23) !== "Infinity"){ - $ERROR('#7: (new Number(Number.POSITIVE_INFINITY)).toString(23) === "Infinity"'); -} - -//CHECK#8 -if((new Number(Number.NEGATIVE_INFINITY)).toString(23) !== "-Infinity"){ - $ERROR('#8: (new Number(Number.NEGATIVE_INFINITY)).toString(23) === "-Infinity"'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T22.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T22.js deleted file mode 100644 index a3c14f796..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T22.js +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4.2_A2_T22; - * @section: 15.7.4.2; - * @assertion: toString: If radix is an integer from 2 to 36, but not 10, - * the result is a string, the choice of which is implementation-dependent; - * @description: radix is 24; -*/ - -//CHECK#1 -if(Number.prototype.toString(24) !== "0"){ - $ERROR('#1: Number.prototype.toString(24) === "0"'); -} - -//CHECK#2 -if((new Number()).toString(24) !== "0"){ - $ERROR('#2: (new Number()).toString(24) === "0"'); -} - -//CHECK#3 -if((new Number(0)).toString(24) !== "0"){ - $ERROR('#3: (new Number(0)).toString(24) === "0"'); -} - -//CHECK#4 -if((new Number(-1)).toString(24) !== "-1"){ - $ERROR('#4: (new Number(-1)).toString(24) === "-1"'); -} - -//CHECK#5 -if((new Number(1)).toString(24) !== "1"){ - $ERROR('#5: (new Number(1)).toString(24) === "1"'); -} - -//CHECK#6 -if((new Number(Number.NaN)).toString(24) !== "NaN"){ - $ERROR('#6: (new Number(Number.NaN)).toString(24) === "NaN"'); -} - -//CHECK#7 -if((new Number(Number.POSITIVE_INFINITY)).toString(24) !== "Infinity"){ - $ERROR('#7: (new Number(Number.POSITIVE_INFINITY)).toString(24) === "Infinity"'); -} - -//CHECK#8 -if((new Number(Number.NEGATIVE_INFINITY)).toString(24) !== "-Infinity"){ - $ERROR('#8: (new Number(Number.NEGATIVE_INFINITY)).toString(24) === "-Infinity"'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T23.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T23.js deleted file mode 100644 index 0471ec426..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T23.js +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4.2_A2_T23; - * @section: 15.7.4.2; - * @assertion: toString: If radix is an integer from 2 to 36, but not 10, - * the result is a string, the choice of which is implementation-dependent; - * @description: radix is 25; -*/ - -//CHECK#1 -if(Number.prototype.toString(25) !== "0"){ - $ERROR('#1: Number.prototype.toString(25) === "0"'); -} - -//CHECK#2 -if((new Number()).toString(25) !== "0"){ - $ERROR('#2: (new Number()).toString(25) === "0"'); -} - -//CHECK#3 -if((new Number(0)).toString(25) !== "0"){ - $ERROR('#3: (new Number(0)).toString(25) === "0"'); -} - -//CHECK#4 -if((new Number(-1)).toString(25) !== "-1"){ - $ERROR('#4: (new Number(-1)).toString(25) === "-1"'); -} - -//CHECK#5 -if((new Number(1)).toString(25) !== "1"){ - $ERROR('#5: (new Number(1)).toString(25) === "1"'); -} - -//CHECK#6 -if((new Number(Number.NaN)).toString(25) !== "NaN"){ - $ERROR('#6: (new Number(Number.NaN)).toString(25) === "NaN"'); -} - -//CHECK#7 -if((new Number(Number.POSITIVE_INFINITY)).toString(25) !== "Infinity"){ - $ERROR('#7: (new Number(Number.POSITIVE_INFINITY)).toString(25) === "Infinity"'); -} - -//CHECK#8 -if((new Number(Number.NEGATIVE_INFINITY)).toString(25) !== "-Infinity"){ - $ERROR('#8: (new Number(Number.NEGATIVE_INFINITY)).toString(25) === "-Infinity"'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T24.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T24.js deleted file mode 100644 index e4cdd5a10..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T24.js +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4.2_A2_T24; - * @section: 15.7.4.2; - * @assertion: toString: If radix is an integer from 2 to 36, but not 10, - * the result is a string, the choice of which is implementation-dependent; - * @description: radix is 26; -*/ - -//CHECK#1 -if(Number.prototype.toString(26) !== "0"){ - $ERROR('#1: Number.prototype.toString(26) === "0"'); -} - -//CHECK#2 -if((new Number()).toString(26) !== "0"){ - $ERROR('#2: (new Number()).toString(26) === "0"'); -} - -//CHECK#3 -if((new Number(0)).toString(26) !== "0"){ - $ERROR('#3: (new Number(0)).toString(26) === "0"'); -} - -//CHECK#4 -if((new Number(-1)).toString(26) !== "-1"){ - $ERROR('#4: (new Number(-1)).toString(26) === "-1"'); -} - -//CHECK#5 -if((new Number(1)).toString(26) !== "1"){ - $ERROR('#5: (new Number(1)).toString(26) === "1"'); -} - -//CHECK#6 -if((new Number(Number.NaN)).toString(26) !== "NaN"){ - $ERROR('#6: (new Number(Number.NaN)).toString(26) === "NaN"'); -} - -//CHECK#7 -if((new Number(Number.POSITIVE_INFINITY)).toString(26) !== "Infinity"){ - $ERROR('#7: (new Number(Number.POSITIVE_INFINITY)).toString(26) === "Infinity"'); -} - -//CHECK#8 -if((new Number(Number.NEGATIVE_INFINITY)).toString(26) !== "-Infinity"){ - $ERROR('#8: (new Number(Number.NEGATIVE_INFINITY)).toString(26) === "-Infinity"'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T25.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T25.js deleted file mode 100644 index 77ba1578b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T25.js +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4.2_A2_T25; - * @section: 15.7.4.2; - * @assertion: toString: If radix is an integer from 2 to 36, but not 10, - * the result is a string, the choice of which is implementation-dependent; - * @description: radix is 27; -*/ - -//CHECK#1 -if(Number.prototype.toString(27) !== "0"){ - $ERROR('#1: Number.prototype.toString(27) === "0"'); -} - -//CHECK#2 -if((new Number()).toString(27) !== "0"){ - $ERROR('#2: (new Number()).toString(27) === "0"'); -} - -//CHECK#3 -if((new Number(0)).toString(27) !== "0"){ - $ERROR('#3: (new Number(0)).toString(27) === "0"'); -} - -//CHECK#4 -if((new Number(-1)).toString(27) !== "-1"){ - $ERROR('#4: (new Number(-1)).toString(27) === "-1"'); -} - -//CHECK#5 -if((new Number(1)).toString(27) !== "1"){ - $ERROR('#5: (new Number(1)).toString(27) === "1"'); -} - -//CHECK#6 -if((new Number(Number.NaN)).toString(27) !== "NaN"){ - $ERROR('#6: (new Number(Number.NaN)).toString(27) === "NaN"'); -} - -//CHECK#7 -if((new Number(Number.POSITIVE_INFINITY)).toString(27) !== "Infinity"){ - $ERROR('#7: (new Number(Number.POSITIVE_INFINITY)).toString(27) === "Infinity"'); -} - -//CHECK#8 -if((new Number(Number.NEGATIVE_INFINITY)).toString(27) !== "-Infinity"){ - $ERROR('#8: (new Number(Number.NEGATIVE_INFINITY)).toString(27) === "-Infinity"'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T26.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T26.js deleted file mode 100644 index 11cb0f55c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T26.js +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4.2_A2_T26; - * @section: 15.7.4.2; - * @assertion: toString: If radix is an integer from 2 to 36, but not 10, - * the result is a string, the choice of which is implementation-dependent; - * @description: radix is 28; -*/ - -//CHECK#1 -if(Number.prototype.toString(28) !== "0"){ - $ERROR('#1: Number.prototype.toString(28) === "0"'); -} - -//CHECK#2 -if((new Number()).toString(28) !== "0"){ - $ERROR('#2: (new Number()).toString(28) === "0"'); -} - -//CHECK#3 -if((new Number(0)).toString(28) !== "0"){ - $ERROR('#3: (new Number(0)).toString(28) === "0"'); -} - -//CHECK#4 -if((new Number(-1)).toString(28) !== "-1"){ - $ERROR('#4: (new Number(-1)).toString(28) === "-1"'); -} - -//CHECK#5 -if((new Number(1)).toString(28) !== "1"){ - $ERROR('#5: (new Number(1)).toString(28) === "1"'); -} - -//CHECK#6 -if((new Number(Number.NaN)).toString(28) !== "NaN"){ - $ERROR('#6: (new Number(Number.NaN)).toString(28) === "NaN"'); -} - -//CHECK#7 -if((new Number(Number.POSITIVE_INFINITY)).toString(28) !== "Infinity"){ - $ERROR('#7: (new Number(Number.POSITIVE_INFINITY)).toString(28) === "Infinity"'); -} - -//CHECK#8 -if((new Number(Number.NEGATIVE_INFINITY)).toString(28) !== "-Infinity"){ - $ERROR('#8: (new Number(Number.NEGATIVE_INFINITY)).toString(28) === "-Infinity"'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T27.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T27.js deleted file mode 100644 index 92f149590..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T27.js +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4.2_A2_T27; - * @section: 15.7.4.2; - * @assertion: toString: If radix is an integer from 2 to 36, but not 10, - * the result is a string, the choice of which is implementation-dependent; - * @description: radix is 29; -*/ - -//CHECK#1 -if(Number.prototype.toString(29) !== "0"){ - $ERROR('#1: Number.prototype.toString(29) === "0"'); -} - -//CHECK#2 -if((new Number()).toString(29) !== "0"){ - $ERROR('#2: (new Number()).toString(29) === "0"'); -} - -//CHECK#3 -if((new Number(0)).toString(29) !== "0"){ - $ERROR('#3: (new Number(0)).toString(29) === "0"'); -} - -//CHECK#4 -if((new Number(-1)).toString(29) !== "-1"){ - $ERROR('#4: (new Number(-1)).toString(29) === "-1"'); -} - -//CHECK#5 -if((new Number(1)).toString(29) !== "1"){ - $ERROR('#5: (new Number(1)).toString(29) === "1"'); -} - -//CHECK#6 -if((new Number(Number.NaN)).toString(29) !== "NaN"){ - $ERROR('#6: (new Number(Number.NaN)).toString(29) === "NaN"'); -} - -//CHECK#7 -if((new Number(Number.POSITIVE_INFINITY)).toString(29) !== "Infinity"){ - $ERROR('#7: (new Number(Number.POSITIVE_INFINITY)).toString(29) === "Infinity"'); -} - -//CHECK#8 -if((new Number(Number.NEGATIVE_INFINITY)).toString(29) !== "-Infinity"){ - $ERROR('#8: (new Number(Number.NEGATIVE_INFINITY)).toString(29) === "-Infinity"'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T28.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T28.js deleted file mode 100644 index 8bbd3b23c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T28.js +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4.2_A2_T28; - * @section: 15.7.4.2; - * @assertion: toString: If radix is an integer from 2 to 36, but not 10, - * the result is a string, the choice of which is implementation-dependent; - * @description: radix is 30; -*/ - -//CHECK#1 -if(Number.prototype.toString(30) !== "0"){ - $ERROR('#1: Number.prototype.toString(30) === "0"'); -} - -//CHECK#2 -if((new Number()).toString(30) !== "0"){ - $ERROR('#2: (new Number()).toString(30) === "0"'); -} - -//CHECK#3 -if((new Number(0)).toString(30) !== "0"){ - $ERROR('#3: (new Number(0)).toString(30) === "0"'); -} - -//CHECK#4 -if((new Number(-1)).toString(30) !== "-1"){ - $ERROR('#4: (new Number(-1)).toString(30) === "-1"'); -} - -//CHECK#5 -if((new Number(1)).toString(30) !== "1"){ - $ERROR('#5: (new Number(1)).toString(30) === "1"'); -} - -//CHECK#6 -if((new Number(Number.NaN)).toString(30) !== "NaN"){ - $ERROR('#6: (new Number(Number.NaN)).toString(30) === "NaN"'); -} - -//CHECK#7 -if((new Number(Number.POSITIVE_INFINITY)).toString(30) !== "Infinity"){ - $ERROR('#7: (new Number(Number.POSITIVE_INFINITY)).toString(30) === "Infinity"'); -} - -//CHECK#8 -if((new Number(Number.NEGATIVE_INFINITY)).toString(30) !== "-Infinity"){ - $ERROR('#8: (new Number(Number.NEGATIVE_INFINITY)).toString(30) === "-Infinity"'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T29.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T29.js deleted file mode 100644 index 0bf12bbed..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T29.js +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4.2_A2_T29; - * @section: 15.7.4.2; - * @assertion: toString: If radix is an integer from 2 to 36, but not 10, - * the result is a string, the choice of which is implementation-dependent; - * @description: radix is 31; -*/ - -//CHECK#1 -if(Number.prototype.toString(31) !== "0"){ - $ERROR('#1: Number.prototype.toString(31) === "0"'); -} - -//CHECK#2 -if((new Number()).toString(31) !== "0"){ - $ERROR('#2: (new Number()).toString(31) === "0"'); -} - -//CHECK#3 -if((new Number(0)).toString(31) !== "0"){ - $ERROR('#3: (new Number(0)).toString(31) === "0"'); -} - -//CHECK#4 -if((new Number(-1)).toString(31) !== "-1"){ - $ERROR('#4: (new Number(-1)).toString(31) === "-1"'); -} - -//CHECK#5 -if((new Number(1)).toString(31) !== "1"){ - $ERROR('#5: (new Number(1)).toString(31) === "1"'); -} - -//CHECK#6 -if((new Number(Number.NaN)).toString(31) !== "NaN"){ - $ERROR('#6: (new Number(Number.NaN)).toString(31) === "NaN"'); -} - -//CHECK#7 -if((new Number(Number.POSITIVE_INFINITY)).toString(31) !== "Infinity"){ - $ERROR('#7: (new Number(Number.POSITIVE_INFINITY)).toString(31) === "Infinity"'); -} - -//CHECK#8 -if((new Number(Number.NEGATIVE_INFINITY)).toString(31) !== "-Infinity"){ - $ERROR('#8: (new Number(Number.NEGATIVE_INFINITY)).toString(31) === "-Infinity"'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T30.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T30.js deleted file mode 100644 index a41f7be83..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T30.js +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4.2_A2_T30; - * @section: 15.7.4.2; - * @assertion: toString: If radix is an integer from 2 to 36, but not 10, - * the result is a string, the choice of which is implementation-dependent; - * @description: radix is 32; -*/ - -//CHECK#1 -if(Number.prototype.toString(32) !== "0"){ - $ERROR('#1: Number.prototype.toString(32) === "0"'); -} - -//CHECK#2 -if((new Number()).toString(32) !== "0"){ - $ERROR('#2: (new Number()).toString(32) === "0"'); -} - -//CHECK#3 -if((new Number(0)).toString(32) !== "0"){ - $ERROR('#3: (new Number(0)).toString(32) === "0"'); -} - -//CHECK#4 -if((new Number(-1)).toString(32) !== "-1"){ - $ERROR('#4: (new Number(-1)).toString(32) === "-1"'); -} - -//CHECK#5 -if((new Number(1)).toString(32) !== "1"){ - $ERROR('#5: (new Number(1)).toString(32) === "1"'); -} - -//CHECK#6 -if((new Number(Number.NaN)).toString(32) !== "NaN"){ - $ERROR('#6: (new Number(Number.NaN)).toString(32) === "NaN"'); -} - -//CHECK#7 -if((new Number(Number.POSITIVE_INFINITY)).toString(32) !== "Infinity"){ - $ERROR('#7: (new Number(Number.POSITIVE_INFINITY)).toString(32) === "Infinity"'); -} - -//CHECK#8 -if((new Number(Number.NEGATIVE_INFINITY)).toString(32) !== "-Infinity"){ - $ERROR('#8: (new Number(Number.NEGATIVE_INFINITY)).toString(32) === "-Infinity"'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T31.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T31.js deleted file mode 100644 index 334a78152..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T31.js +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4.2_A2_T31; - * @section: 15.7.4.2; - * @assertion: toString: If radix is an integer from 2 to 36, but not 10, - * the result is a string, the choice of which is implementation-dependent; - * @description: radix is 33; -*/ - -//CHECK#1 -if(Number.prototype.toString(33) !== "0"){ - $ERROR('#1: Number.prototype.toString(33) === "0"'); -} - -//CHECK#2 -if((new Number()).toString(33) !== "0"){ - $ERROR('#2: (new Number()).toString(33) === "0"'); -} - -//CHECK#3 -if((new Number(0)).toString(33) !== "0"){ - $ERROR('#3: (new Number(0)).toString(33) === "0"'); -} - -//CHECK#4 -if((new Number(-1)).toString(33) !== "-1"){ - $ERROR('#4: (new Number(-1)).toString(33) === "-1"'); -} - -//CHECK#5 -if((new Number(1)).toString(33) !== "1"){ - $ERROR('#5: (new Number(1)).toString(33) === "1"'); -} - -//CHECK#6 -if((new Number(Number.NaN)).toString(33) !== "NaN"){ - $ERROR('#6: (new Number(Number.NaN)).toString(33) === "NaN"'); -} - -//CHECK#7 -if((new Number(Number.POSITIVE_INFINITY)).toString(33) !== "Infinity"){ - $ERROR('#7: (new Number(Number.POSITIVE_INFINITY)).toString(33) === "Infinity"'); -} - -//CHECK#8 -if((new Number(Number.NEGATIVE_INFINITY)).toString(33) !== "-Infinity"){ - $ERROR('#8: (new Number(Number.NEGATIVE_INFINITY)).toString(33) === "-Infinity"'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T32.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T32.js deleted file mode 100644 index b7a9cba80..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T32.js +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4.2_A2_T32; - * @section: 15.7.4.2; - * @assertion: toString: If radix is an integer from 2 to 36, but not 10, - * the result is a string, the choice of which is implementation-dependent; - * @description: radix is 34; -*/ - -//CHECK#1 -if(Number.prototype.toString(34) !== "0"){ - $ERROR('#1: Number.prototype.toString(34) === "0"'); -} - -//CHECK#2 -if((new Number()).toString(34) !== "0"){ - $ERROR('#2: (new Number()).toString(34) === "0"'); -} - -//CHECK#3 -if((new Number(0)).toString(34) !== "0"){ - $ERROR('#3: (new Number(0)).toString(34) === "0"'); -} - -//CHECK#4 -if((new Number(-1)).toString(34) !== "-1"){ - $ERROR('#4: (new Number(-1)).toString(34) === "-1"'); -} - -//CHECK#5 -if((new Number(1)).toString(34) !== "1"){ - $ERROR('#5: (new Number(1)).toString(34) === "1"'); -} - -//CHECK#6 -if((new Number(Number.NaN)).toString(34) !== "NaN"){ - $ERROR('#6: (new Number(Number.NaN)).toString(34) === "NaN"'); -} - -//CHECK#7 -if((new Number(Number.POSITIVE_INFINITY)).toString(34) !== "Infinity"){ - $ERROR('#7: (new Number(Number.POSITIVE_INFINITY)).toString(34) === "Infinity"'); -} - -//CHECK#8 -if((new Number(Number.NEGATIVE_INFINITY)).toString(34) !== "-Infinity"){ - $ERROR('#8: (new Number(Number.NEGATIVE_INFINITY)).toString(34) === "-Infinity"'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T33.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T33.js deleted file mode 100644 index b3d901484..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T33.js +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4.2_A2_T33; - * @section: 15.7.4.2; - * @assertion: toString: If radix is an integer from 2 to 36, but not 10, - * the result is a string, the choice of which is implementation-dependent; - * @description: radix is 35; -*/ - -//CHECK#1 -if(Number.prototype.toString(35) !== "0"){ - $ERROR('#1: Number.prototype.toString(35) === "0"'); -} - -//CHECK#2 -if((new Number()).toString(35) !== "0"){ - $ERROR('#2: (new Number()).toString(35) === "0"'); -} - -//CHECK#3 -if((new Number(0)).toString(35) !== "0"){ - $ERROR('#3: (new Number(0)).toString(35) === "0"'); -} - -//CHECK#4 -if((new Number(-1)).toString(35) !== "-1"){ - $ERROR('#4: (new Number(-1)).toString(35) === "-1"'); -} - -//CHECK#5 -if((new Number(1)).toString(35) !== "1"){ - $ERROR('#5: (new Number(1)).toString(35) === "1"'); -} - -//CHECK#6 -if((new Number(Number.NaN)).toString(35) !== "NaN"){ - $ERROR('#6: (new Number(Number.NaN)).toString(35) === "NaN"'); -} - -//CHECK#7 -if((new Number(Number.POSITIVE_INFINITY)).toString(35) !== "Infinity"){ - $ERROR('#7: (new Number(Number.POSITIVE_INFINITY)).toString(35) === "Infinity"'); -} - -//CHECK#8 -if((new Number(Number.NEGATIVE_INFINITY)).toString(35) !== "-Infinity"){ - $ERROR('#8: (new Number(Number.NEGATIVE_INFINITY)).toString(35) === "-Infinity"'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T34.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T34.js deleted file mode 100644 index 9fa153309..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A2_T34.js +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4.2_A2_T34; - * @section: 15.7.4.2; - * @assertion: toString: If radix is an integer from 2 to 36, but not 10, - * the result is a string, the choice of which is implementation-dependent; - * @description: radix is 36; -*/ - -//CHECK#1 -if(Number.prototype.toString(36) !== "0"){ - $ERROR('#1: Number.prototype.toString(36) === "0"'); -} - -//CHECK#2 -if((new Number()).toString(36) !== "0"){ - $ERROR('#2: (new Number()).toString(36) === "0"'); -} - -//CHECK#3 -if((new Number(0)).toString(36) !== "0"){ - $ERROR('#3: (new Number(0)).toString(36) === "0"'); -} - -//CHECK#4 -if((new Number(-1)).toString(36) !== "-1"){ - $ERROR('#4: (new Number(-1)).toString(36) === "-1"'); -} - -//CHECK#5 -if((new Number(1)).toString(36) !== "1"){ - $ERROR('#5: (new Number(1)).toString(36) === "1"'); -} - -//CHECK#6 -if((new Number(Number.NaN)).toString(36) !== "NaN"){ - $ERROR('#6: (new Number(Number.NaN)).toString(36) === "NaN"'); -} - -//CHECK#7 -if((new Number(Number.POSITIVE_INFINITY)).toString(36) !== "Infinity"){ - $ERROR('#7: (new Number(Number.POSITIVE_INFINITY)).toString(36) === "Infinity"'); -} - -//CHECK#8 -if((new Number(Number.NEGATIVE_INFINITY)).toString(36) !== "-Infinity"){ - $ERROR('#8: (new Number(Number.NEGATIVE_INFINITY)).toString(36) === "-Infinity"'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A3_T01.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A3_T01.js deleted file mode 100644 index 936403961..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A3_T01.js +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4.2_A3_T01; - * @section: 15.7.4.2; - * @assertion: toString: radix should be an integer between 2 and 36; - * @description: radix is 1; -*/ - -//CHECK#1 -try{ - n = Number.prototype.toString(1); - $ERROR('#1: Number.prototype.toString(1) should throw an Error'); -} -catch(e){ -} - -//CHECK#2 -try{ - n = (new Number()).toString(1); - $ERROR('#2: (new Number()).toString(1) should throw an Error'); -} -catch(e){ -} - -//CHECK#3 -try{ - n = (new Number(0)).toString(1); - $ERROR('#3: (new Number(0)).toString(1) should throw an Error'); -} -catch(e){ -} - -//CHECK#4 -try{ - n = (new Number(-1)).toString(1); - $ERROR('#4: (new Number(-1)).toString(1) should throw an Error'); -} -catch(e){ -} - -//CHECK#5 -try{ - n = (new Number(1)).toString(1); - $ERROR('#5: (new Number(1)).toString(1) should throw an Error'); -} -catch(e){ -} - -//CHECK#6 -try{ - n = (new Number(Number.NaN)).toString(1); - $ERROR('#6: (new Number(Number.NaN)).toString(1) should throw an Error'); -} -catch(e){ -} - -//CHECK#7 -try{ - n = (new Number(Number.POSITIVE_INFINITY)).toString(1); - $ERROR('#7: (new Number(Number.POSITIVE_INFINITY)).toString(1) should throw an Error'); -} -catch(e){ -} - -//CHECK#8 -try{ - n = (new Number(Number.NEGATIVE_INFINITY)).toString(1); - $ERROR('#8: (new Number(Number.NEGATIVE_INFINITY)).toString(1) should throw an Error'); -} -catch(e){ -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A3_T02.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A3_T02.js deleted file mode 100644 index eed82ffdf..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A3_T02.js +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4.2_A3_T02; - * @section: 15.7.4.2; - * @assertion: toString: radix should be an integer between 2 and 36; - * @description: radix is 37; -*/ - -//CHECK#1 -try{ - n = Number.prototype.toString(37); - $ERROR('#1: Number.prototype.toString(37) should throw an Error'); -} -catch(e){ -} - -//CHECK#2 -try{ - n = (new Number()).toString(37); - $ERROR('#2: (new Number()).toString(37) should throw an Error'); -} -catch(e){ -} - -//CHECK#3 -try{ - n = (new Number(0)).toString(37); - $ERROR('#3: (new Number(0)).toString(37) should throw an Error'); -} -catch(e){ -} - -//CHECK#4 -try{ - n = (new Number(-1)).toString(37); - $ERROR('#4: (new Number(-1)).toString(37) should throw an Error'); -} -catch(e){ -} - -//CHECK#5 -try{ - n = (new Number(1)).toString(37); - $ERROR('#5: (new Number(1)).toString(37) should throw an Error'); -} -catch(e){ -} - -//CHECK#6 -try{ - n = (new Number(Number.NaN)).toString(37); - $ERROR('#6: (new Number(Number.NaN)).toString(37) should throw an Error'); -} -catch(e){ -} - -//CHECK#7 -try{ - n = (new Number(Number.POSITIVE_INFINITY)).toString(37); - $ERROR('#7: (new Number(Number.POSITIVE_INFINITY)).toString(37) should throw an Error'); -} -catch(e){ -} - -//CHECK#8 -try{ - n = (new Number(Number.NEGATIVE_INFINITY)).toString(37); - $ERROR('#8: (new Number(Number.NEGATIVE_INFINITY)).toString(37) should throw an Error'); -} -catch(e){ -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A3_T03.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A3_T03.js deleted file mode 100644 index f51e6c759..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A3_T03.js +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4.2_A3_T03; - * @section: 15.7.4.2; - * @assertion: toString: radix should be an integer between 2 and 36; - * @description: radix is null value; -*/ - -//CHECK#1 -try{ - n = Number.prototype.toString(null); - $ERROR('#1: Number.prototype.toString(null) should throw an Error'); -} -catch(e){ -} - -//CHECK#2 -try{ - n = (new Number()).toString(null); - $ERROR('#2: (new Number()).toString(null) should throw an Error'); -} -catch(e){ -} - -//CHECK#3 -try{ - n = (new Number(0)).toString(null); - $ERROR('#3: (new Number(0)).toString(null) should throw an Error'); -} -catch(e){ -} - -//CHECK#4 -try{ - n = (new Number(-1)).toString(null); - $ERROR('#4: (new Number(-1)).toString(null) should throw an Error'); -} -catch(e){ -} - -//CHECK#5 -try{ - n = (new Number(1)).toString(null); - $ERROR('#5: (new Number(1)).toString(null) should throw an Error'); -} -catch(e){ -} - -//CHECK#6 -try{ - n = (new Number(Number.NaN)).toString(null); - $ERROR('#6: (new Number(Number.NaN)).toString(null) should throw an Error'); -} -catch(e){ -} - -//CHECK#7 -try{ - n = (new Number(Number.POSITIVE_INFINITY)).toString(null); - $ERROR('#7: (new Number(Number.POSITIVE_INFINITY)).toString(null) should throw an Error'); -} -catch(e){ -} - -//CHECK#8 -try{ - n = (new Number(Number.NEGATIVE_INFINITY)).toString(null); - $ERROR('#8: (new Number(Number.NEGATIVE_INFINITY)).toString(null) should throw an Error'); -} -catch(e){ -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A3_T04.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A3_T04.js deleted file mode 100644 index 4d19f39b4..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A3_T04.js +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4.2_A3_T04; - * @section: 15.7.4.2; - * @assertion: toString: radix should be an integer between 2 and 36; - * @description: radix is 0; -*/ - -//CHECK#1 -try{ - n = Number.prototype.toString(0); - $ERROR('#1: Number.prototype.toString(0) should throw an Error'); -} -catch(e){ -} - -//CHECK#2 -try{ - n = (new Number()).toString(0); - $ERROR('#2: (new Number()).toString(0) should throw an Error'); -} -catch(e){ -} - -//CHECK#3 -try{ - n = (new Number(0)).toString(0); - $ERROR('#3: (new Number(0)).toString(0) should throw an Error'); -} -catch(e){ -} - -//CHECK#4 -try{ - n = (new Number(-1)).toString(0); - $ERROR('#4: (new Number(-1)).toString(0) should throw an Error'); -} -catch(e){ -} - -//CHECK#5 -try{ - n = (new Number(1)).toString(0); - $ERROR('#5: (new Number(1)).toString(0) should throw an Error'); -} -catch(e){ -} - -//CHECK#6 -try{ - n = (new Number(Number.NaN)).toString(0); - $ERROR('#6: (new Number(Number.NaN)).toString(0) should throw an Error'); -} -catch(e){ -} - -//CHECK#7 -try{ - n = (new Number(Number.POSITIVE_INFINITY)).toString(0); - $ERROR('#7: (new Number(Number.POSITIVE_INFINITY)).toString(0) should throw an Error'); -} -catch(e){ -} - -//CHECK#8 -try{ - n = (new Number(Number.NEGATIVE_INFINITY)).toString(0); - $ERROR('#8: (new Number(Number.NEGATIVE_INFINITY)).toString(0) should throw an Error'); -} -catch(e){ -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A4_T01.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A4_T01.js deleted file mode 100644 index 491f420ca..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A4_T01.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4.2_A4_T01; - * @section: 15.7.4.2; - * @assertion: The toString function is not generic, it cannot be transferred - * to other kinds of objects for use as a method and there is should be - * a TypeError exception if its this value is not a Number object; - * @description: transferring to the String objects; -*/ - -//CHECK#1 -try{ - s1 = new String(); - s1.toString = Number.prototype.toString; - v1 = s1.toString(); - $ERROR('#1: Number.prototype.toString on not a Number object should throw TypeError'); -} -catch(e){ - if(!(e instanceof TypeError)){ - $ERROR('#1: Number.prototype.toString on not a Number object should throw TypeError, not '+e); - } -} - -//CHECK#2 -try{ - s2 = new String(); - s2.myToString = Number.prototype.toString; - v2 = s2.myToString(); - $ERROR('#2: Number.prototype.toString on not a Number object should throw TypeError'); -} -catch(e){ - if(!(e instanceof TypeError)){ - $ERROR('#2: Number.prototype.toString on not a Number object should throw TypeError, not '+e); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A4_T02.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A4_T02.js deleted file mode 100644 index 0405e99b7..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A4_T02.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4.2_A4_T02; - * @section: 15.7.4.2; - * @assertion: The toString function is not generic, it cannot be transferred - * to other kinds of objects for use as a method and there is should be - * a TypeError exception if its this value is not a Number object; - * @description: transferring to the Boolean objects; -*/ - -//CHECK#1 -try{ - s1 = new Boolean(); - s1.toString = Number.prototype.toString; - v1 = s1.toString(); - $ERROR('#1: Number.prototype.toString on not a Number object should throw TypeError'); -} -catch(e){ - if(!(e instanceof TypeError)){ - $ERROR('#1: Number.prototype.toString on not a Number object should throw TypeError, not '+e); - } -} - -//CHECK#2 -try{ - s2 = new Boolean(); - s2.myToString = Number.prototype.toString; - v2 = s2.myToString(); - $ERROR('#2: Number.prototype.toString on not a Number object should throw TypeError'); -} -catch(e){ - if(!(e instanceof TypeError)){ - $ERROR('#2: Number.prototype.toString on not a Number object should throw TypeError, not '+e); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A4_T03.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A4_T03.js deleted file mode 100644 index 0fb24e31c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A4_T03.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4.2_A4_T03; - * @section: 15.7.4.2; - * @assertion: The toString function is not generic, it cannot be transferred - * to other kinds of objects for use as a method and there is should be - * a TypeError exception if its this value is not a Number object; - * @description: transferring to the Date objects; -*/ - -//CHECK#1 -try{ - s1 = new Date(); - s1.toString = Number.prototype.toString; - v1 = s1.toString(); - $ERROR('#1: Number.prototype.toString on not a Number object should throw TypeError'); -} -catch(e){ - if(!(e instanceof TypeError)){ - $ERROR('#1: Number.prototype.toString on not a Number object should throw TypeError, not '+e); - } -} - -//CHECK#2 -try{ - s2 = new Date(); - s2.myToString = Number.prototype.toString; - v2 = s2.myToString(); - $ERROR('#2: Number.prototype.toString on not a Number object should throw TypeError'); -} -catch(e){ - if(!(e instanceof TypeError)){ - $ERROR('#2: Number.prototype.toString on not a Number object should throw TypeError, not '+e); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A4_T04.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A4_T04.js deleted file mode 100644 index fbd0817e9..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A4_T04.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4.2_A4_T04; - * @section: 15.7.4.2; - * @assertion: The toString function is not generic, it cannot be transferred - * to other kinds of objects for use as a method and there is should be - * a TypeError exception if its this value is not a Number object; - * @description: transferring to the Object objects; -*/ - -//CHECK#1 -try{ - s1 = new Object(); - s1.toString = Number.prototype.toString; - v1 = s1.toString(); - $ERROR('#1: Number.prototype.toString on not a Number object should throw TypeError'); -} -catch(e){ - if(!(e instanceof TypeError)){ - $ERROR('#1: Number.prototype.toString on not a Number object should throw TypeError, not '+e); - } -} - -//CHECK#2 -try{ - s2 = new Object(); - s2.myToString = Number.prototype.toString; - v2 = s2.myToString(); - $ERROR('#2: Number.prototype.toString on not a Number object should throw TypeError'); -} -catch(e){ - if(!(e instanceof TypeError)){ - $ERROR('#2: Number.prototype.toString on not a Number object should throw TypeError, not '+e); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A4_T05.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A4_T05.js deleted file mode 100644 index 825c78226..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.2_Number.prototype.toString/S15.7.4.2_A4_T05.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4.2_A4_T05; - * @section: 15.7.4.2; - * @assertion: The toString function is not generic, it cannot be transferred - * to other kinds of objects for use as a method and there is should be - * a TypeError exception if its this value is not a Number object; - * @description: transferring to the other objects; -*/ - -//CHECK#1 -try{ - s1 = {x: 1}; - s1.toString = Number.prototype.toString; - v1 = s1.toString(); - $ERROR('#1: Number.prototype.toString on not a Number object should throw TypeError'); -} -catch(e){ - if(!(e instanceof TypeError)){ - $ERROR('#1: Number.prototype.toString on not a Number object should throw TypeError, not '+e); - } -} - -//CHECK#2 -try{ - s2 = {x: 1}; - s2.myToString = Number.prototype.toString; - v2 = s2.myToString(); - $ERROR('#2: Number.prototype.toString on not a Number object should throw TypeError'); -} -catch(e){ - if(!(e instanceof TypeError)){ - $ERROR('#2: Number.prototype.toString on not a Number object should throw TypeError, not '+e); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.4_Number.prototype.valueOf/S15.7.4.4_A1_T01.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.4_Number.prototype.valueOf/S15.7.4.4_A1_T01.js deleted file mode 100644 index c46587a12..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.4_Number.prototype.valueOf/S15.7.4.4_A1_T01.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4.4_A1_T01; - * @section: 15.7.4.4; - * @assertion: Number.prototype.valueOf() returns this number value; - * @description: Call without argument; -*/ - -//CHECK#1 -if(Number.prototype.valueOf() !== 0){ - $ERROR('#1: Number.prototype.valueOf() === 0'); -} - -//CHECK#2 -if((new Number()).valueOf() !== 0){ - $ERROR('#2: (new Number()).valueOf() === 0'); -} - -//CHECK#3 -if((new Number(0)).valueOf() !== 0){ - $ERROR('#3: (new Number(0)).valueOf() === 0'); -} - -//CHECK#4 -if((new Number(-1)).valueOf() !== -1){ - $ERROR('#4: (new Number(-1)).valueOf() === -1'); -} - -//CHECK#5 -if((new Number(1)).valueOf() !== 1){ - $ERROR('#5: (new Number(1)).valueOf() === 1'); -} - -//CHECK#6 -if(!isNaN((new Number(Number.NaN)).valueOf())){ - $ERROR('#6: (new Number(Number.NaN)).valueOf() === NaN'); -} - -//CHECK#7 -if((new Number(Number.POSITIVE_INFINITY)).valueOf() !== Number.POSITIVE_INFINITY){ - $ERROR('#7: (new Number(Number.POSITIVE_INFINITY)).valueOf() === Infinity'); -} - -//CHECK#8 -if((new Number(Number.NEGATIVE_INFINITY)).valueOf() !== Number.NEGATIVE_INFINITY){ - $ERROR('#8: (new Number(Number.NEGATIVE_INFINITY)).valueOf() === -Infinity'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.4_Number.prototype.valueOf/S15.7.4.4_A1_T02.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.4_Number.prototype.valueOf/S15.7.4.4_A1_T02.js deleted file mode 100644 index 30f6dc713..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.4_Number.prototype.valueOf/S15.7.4.4_A1_T02.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4.4_A1_T02; - * @section: 15.7.4.4; - * @assertion: Number.prototype.valueOf() returns this number value; - * @description: calling with argument; -*/ - -//CHECK#1 -if(Number.prototype.valueOf("argument") !== 0){ - $ERROR('#1: Number.prototype.valueOf("argument") === 0'); -} - -//CHECK#2 -if((new Number()).valueOf("argument") !== 0){ - $ERROR('#2: (new Number()).valueOf("argument") === 0'); -} - -//CHECK#3 -if((new Number(0)).valueOf("argument") !== 0){ - $ERROR('#3: (new Number(0)).valueOf("argument") === 0'); -} - -//CHECK#4 -if((new Number(-1)).valueOf("argument") !== -1){ - $ERROR('#4: (new Number(-1)).valueOf("argument") === -1'); -} - -//CHECK#5 -if((new Number(1)).valueOf("argument") !== 1){ - $ERROR('#5: (new Number(1)).valueOf("argument") === 1'); -} - -//CHECK#6 -if(!isNaN((new Number(Number.NaN)).valueOf("argument"))){ - $ERROR('#6: (new Number(Number.NaN)).valueOf("argument") === NaN'); -} - -//CHECK#7 -if((new Number(Number.POSITIVE_INFINITY)).valueOf("argument") !== Number.POSITIVE_INFINITY){ - $ERROR('#7: (new Number(Number.POSITIVE_INFINITY)).valueOf("argument") === Infinity'); -} - -//CHECK#8 -if((new Number(Number.NEGATIVE_INFINITY)).valueOf("argument") !== Number.NEGATIVE_INFINITY){ - $ERROR('#8: (new Number(Number.NEGATIVE_INFINITY)).valueOf("argument") === -Infinity'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.4_Number.prototype.valueOf/S15.7.4.4_A2_T01.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.4_Number.prototype.valueOf/S15.7.4.4_A2_T01.js deleted file mode 100644 index 5b3cbcaef..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.4_Number.prototype.valueOf/S15.7.4.4_A2_T01.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4.4_A2_T01; - * @section: 15.7.4.4; - * @assertion: The valueOf function is not generic, it cannot be transferred - * to other kinds of objects for use as a method and there is should be - * a TypeError exception if its this value is not a Number object; - * @description: transferring to the String objects; -*/ - -//CHECK#1 -try{ - s1 = new String(); - s1.valueOf = Number.prototype.valueOf; - v1 = s1.valueOf(); - $ERROR('#1: Number.prototype.valueOf on not a Number object should throw TypeError'); -} -catch(e){ - if(!(e instanceof TypeError)){ - $ERROR('#1: Number.prototype.valueOf on not a Number object should throw TypeError, not '+e); - } -} - -//CHECK#2 -try{ - s2 = new String(); - s2.myValueOf = Number.prototype.valueOf; - v2 = s2.myValueOf(); - $ERROR('#2: Number.prototype.valueOf on not a Number object should throw TypeError'); -} -catch(e){ - if(!(e instanceof TypeError)){ - $ERROR('#2: Number.prototype.valueOf on not a Number object should throw TypeError, not '+e); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.4_Number.prototype.valueOf/S15.7.4.4_A2_T02.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.4_Number.prototype.valueOf/S15.7.4.4_A2_T02.js deleted file mode 100644 index de250585d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.4_Number.prototype.valueOf/S15.7.4.4_A2_T02.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4.4_A2_T02; - * @section: 15.7.4.4; - * @assertion: The valueOf function is not generic, it cannot be transferred - * to other kinds of objects for use as a method and there is should be - * a TypeError exception if its this value is not a Number object; - * @description: transferring to the Boolean objects; -*/ - -//CHECK#1 -try{ - s1 = new Boolean(); - s1.valueOf = Number.prototype.valueOf; - v1 = s1.valueOf(); - $ERROR('#1: Number.prototype.valueOf on not a Number object should throw TypeError'); -} -catch(e){ - if(!(e instanceof TypeError)){ - $ERROR('#1: Number.prototype.valueOf on not a Number object should throw TypeError, not '+e); - } -} - -//CHECK#2 -try{ - s2 = new Boolean(); - s2.myValueOf = Number.prototype.valueOf; - v2 = s2.myValueOf(); - $ERROR('#2: Number.prototype.valueOf on not a Number object should throw TypeError'); -} -catch(e){ - if(!(e instanceof TypeError)){ - $ERROR('#2: Number.prototype.valueOf on not a Number object should throw TypeError, not '+e); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.4_Number.prototype.valueOf/S15.7.4.4_A2_T03.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.4_Number.prototype.valueOf/S15.7.4.4_A2_T03.js deleted file mode 100644 index b830977ee..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.4_Number.prototype.valueOf/S15.7.4.4_A2_T03.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4.4_A2_T03; - * @section: 15.7.4.4; - * @assertion: The valueOf function is not generic, it cannot be transferred - * to other kinds of objects for use as a method and there is should be - * a TypeError exception if its this value is not a Number object; - * @description: transferring to the Date objects; -*/ - -//CHECK#1 -try{ - s1 = new Date(); - s1.valueOf = Number.prototype.valueOf; - v1 = s1.valueOf(); - $ERROR('#1: Number.prototype.valueOf on not a Number object should throw TypeError'); -} -catch(e){ - if(!(e instanceof TypeError)){ - $ERROR('#1: Number.prototype.valueOf on not a Number object should throw TypeError, not '+e); - } -} - -//CHECK#2 -try{ - s2 = new Date(); - s2.myValueOf = Number.prototype.valueOf; - v2 = s2.myValueOf(); - $ERROR('#2: Number.prototype.valueOf on not a Number object should throw TypeError'); -} -catch(e){ - if(!(e instanceof TypeError)){ - $ERROR('#2: Number.prototype.valueOf on not a Number object should throw TypeError, not '+e); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.4_Number.prototype.valueOf/S15.7.4.4_A2_T04.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.4_Number.prototype.valueOf/S15.7.4.4_A2_T04.js deleted file mode 100644 index 2a95ac0e0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.4_Number.prototype.valueOf/S15.7.4.4_A2_T04.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4.4_A2_T04; - * @section: 15.7.4.4; - * @assertion: The valueOf function is not generic, it cannot be transferred - * to other kinds of objects for use as a method and there is should be - * a TypeError exception if its this value is not a Number object; - * @description: transferring to the Object objects; -*/ - -//CHECK#1 -try{ - s1 = new Object(); - s1.valueOf = Number.prototype.valueOf; - v1 = s1.valueOf(); - $ERROR('#1: Number.prototype.valueOf on not a Number object should throw TypeError'); -} -catch(e){ - if(!(e instanceof TypeError)){ - $ERROR('#1: Number.prototype.valueOf on not a Number object should throw TypeError, not '+e); - } -} - -//CHECK#2 -try{ - s2 = new Object(); - s2.myValueOf = Number.prototype.valueOf; - v2 = s2.myValueOf(); - $ERROR('#2: Number.prototype.valueOf on not a Number object should throw TypeError'); -} -catch(e){ - if(!(e instanceof TypeError)){ - $ERROR('#2: Number.prototype.valueOf on not a Number object should throw TypeError, not '+e); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.4_Number.prototype.valueOf/S15.7.4.4_A2_T05.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.4_Number.prototype.valueOf/S15.7.4.4_A2_T05.js deleted file mode 100644 index c0279f6d0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.4_Number.prototype.valueOf/S15.7.4.4_A2_T05.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4.4_A2_T05; - * @section: 15.7.4.4; - * @assertion: The valueOf function is not generic, it cannot be transferred - * to other kinds of objects for use as a method and there is should be - * a TypeError exception if its this value is not a Number object; - * @description: transferring to the other objects; -*/ - -//CHECK#1 -try{ - s1 = {x: 1}; - s1.valueOf = Number.prototype.valueOf; - v1 = s1.valueOf(); - $ERROR('#1: Number.prototype.valueOf on not a Number object should throw TypeError'); -} -catch(e){ - if(!(e instanceof TypeError)){ - $ERROR('#1: Number.prototype.valueOf on not a Number object should throw TypeError, not '+e); - } -} - -//CHECK#2 -try{ - s2 = {x: 1}; - s2.myValueOf = Number.prototype.valueOf; - v2 = s2.myValueOf(); - $ERROR('#2: Number.prototype.valueOf on not a Number object should throw TypeError'); -} -catch(e){ - if(!(e instanceof TypeError)){ - $ERROR('#2: Number.prototype.valueOf on not a Number object should throw TypeError, not '+e); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.5_Number.prototype.toFixed/S15.7.4.5_A1.1_T01.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.5_Number.prototype.toFixed/S15.7.4.5_A1.1_T01.js deleted file mode 100644 index 911af9eec..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.5_Number.prototype.toFixed/S15.7.4.5_A1.1_T01.js +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4.5_A1.1_T01; - * @section: 15.7.4.5; - * @assertion: Step 1: Let f be ToInteger(fractionDigits). (If fractionDigits - * is undefined, this step produces the value 0); - * @description: calling on Number prototype object; -*/ - -//CHECK#1 -if(Number.prototype.toFixed() !== "0"){ - $ERROR('#1: Number.prototype.toFixed() === "0"'); -} - -//CHECK#2 -if(Number.prototype.toFixed(0) !== "0"){ - $ERROR('#2: Number.prototype.toFixed(0) === "0"'); -} - -//CHECK#3 -if(Number.prototype.toFixed(1) !== "0.0"){ - $ERROR('#3: Number.prototype.toFixed(1) === "0.0"'); -} - -//CHECK#4 -if(Number.prototype.toFixed(1.1) !== "0.0"){ - $ERROR('#4: Number.prototype.toFixed(1.1) === "0.0"'); -} - -//CHECK#5 -if(Number.prototype.toFixed(0.9) !== "0"){ - $ERROR('#5: Number.prototype.toFixed(0.9) === "0"'); -} - -//CHECK#6 -if(Number.prototype.toFixed("1") !== "0.0"){ - $ERROR('#6: Number.prototype.toFixed("1") === "0.0"'); -} - -//CHECK#7 -if(Number.prototype.toFixed("1.1") !== "0.0"){ - $ERROR('#7: Number.prototype.toFixed("1.1") === "0.0"'); -} - -//CHECK#8 -if(Number.prototype.toFixed("0.9") !== "0"){ - $ERROR('#8: Number.prototype.toFixed("0.9") === "0"'); -} - -//CHECK#9 -if(Number.prototype.toFixed(Number.NaN) !== "0"){ - $ERROR('#9: Number.prototype.toFixed(Number.NaN) === "0"'); -} - -//CHECK#10 -if(Number.prototype.toFixed("some string") !== "0"){ - $ERROR('#9: Number.prototype.toFixed("some string") === "0"'); -} - -//CHECK#10 -try{ - if(Number.prototype.toFixed(-0.1) !== "0"){ - $ERROR('#10: Number.prototype.toFixed(-0.1) === "0"'); - } -} -catch(e){ - $ERROR('#10: Number.prototype.toFixed(-0.1) should not throw '+e); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.5_Number.prototype.toFixed/S15.7.4.5_A1.1_T02.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.5_Number.prototype.toFixed/S15.7.4.5_A1.1_T02.js deleted file mode 100644 index 47cafb7ea..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.5_Number.prototype.toFixed/S15.7.4.5_A1.1_T02.js +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4.5_A1.1_T02; - * @section: 15.7.4.5; - * @assertion: Step 1: Let f be ToInteger(fractionDigits). (If fractionDigits - * is undefined, this step produces the value 0); - * @description: calling on Number object; -*/ - -//CHECK#1 -if((new Number(1)).toFixed() !== "1"){ - $ERROR('#1: (new Number(1)).prototype.toFixed() === "1"'); -} - -//CHECK#2 -if((new Number(1)).toFixed(0) !== "1"){ - $ERROR('#2: (new Number(1)).prototype.toFixed(0) === "1"'); -} - -//CHECK#3 -if((new Number(1)).toFixed(1) !== "1.0"){ - $ERROR('#3: (new Number(1)).prototype.toFixed(1) === "1.0"'); -} - -//CHECK#4 -if((new Number(1)).toFixed(1.1) !== "1.0"){ - $ERROR('#4: (new Number(1)).toFixed(1.1) === "1.0"'); -} - -//CHECK#5 -if((new Number(1)).toFixed(0.9) !== "1"){ - $ERROR('#5: (new Number(1)).toFixed(0.9) === "1"'); -} - -//CHECK#6 -if((new Number(1)).toFixed("1") !== "1.0"){ - $ERROR('#6: (new Number(1)).toFixed("1") === "1.0"'); -} - -//CHECK#7 -if((new Number(1)).toFixed("1.1") !== "1.0"){ - $ERROR('#7: (new Number(1)).toFixed("1.1") === "1.0"'); -} - -//CHECK#8 -if((new Number(1)).toFixed("0.9") !== "1"){ - $ERROR('#8: (new Number(1)).toFixed("0.9") === "1"'); -} - -//CHECK#9 -if((new Number(1)).toFixed(Number.NaN) !== "1"){ - $ERROR('#9: (new Number(1)).toFixed(Number.NaN) === "1"'); -} - -//CHECK#10 -if((new Number(1)).toFixed("some string") !== "1"){ - $ERROR('#9: (new Number(1)).toFixed("some string") === "1"'); -} - -//CHECK#10 -try{ - if((new Number(1)).toFixed(-0.1) !== "1"){ - $ERROR('#10: (new Number(1)).toFixed(-0.1) === "1"'); - } -} -catch(e){ - $ERROR('#10: (new Number(1)).toFixed(-0.1) should not throw '+e); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.5_Number.prototype.toFixed/S15.7.4.5_A1.3_T01.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.5_Number.prototype.toFixed/S15.7.4.5_A1.3_T01.js deleted file mode 100644 index 4c031994c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.5_Number.prototype.toFixed/S15.7.4.5_A1.3_T01.js +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4.5_A1.3_T01; - * @section: 15.7.4.5; - * @assertion: Step 4: If this number value is NaN, return the string "NaN"; - * @description: NaN is computed by new Number("string"); -*/ - -//CHECK#1 -if((new Number("a")).toFixed() !== "NaN"){ - $ERROR('#1: (new Number("a")).prototype.toFixed() === "NaN"'); -} - -//CHECK#2 -if((new Number("a")).toFixed(0) !== "NaN"){ - $ERROR('#2: (new Number("a")).prototype.toFixed(0) === "NaN"'); -} - -//CHECK#3 -if((new Number("a")).toFixed(1) !== "NaN"){ - $ERROR('#3: (new Number("a")).prototype.toFixed(1) === "NaN"'); -} - -//CHECK#4 -if((new Number("a")).toFixed(1.1) !== "NaN"){ - $ERROR('#4: (new Number("a")).toFixed(1.1) === "NaN"'); -} - -//CHECK#5 -if((new Number("a")).toFixed(0.9) !== "NaN"){ - $ERROR('#5: (new Number("a")).toFixed(0.9) === "NaN"'); -} - -//CHECK#6 -if((new Number("a")).toFixed("1") !== "NaN"){ - $ERROR('#6: (new Number("a")).toFixed("1") === "NaN"'); -} - -//CHECK#7 -if((new Number("a")).toFixed("1.1") !== "NaN"){ - $ERROR('#7: (new Number("a")).toFixed("1.1") === "NaN"'); -} - -//CHECK#8 -if((new Number("a")).toFixed("0.9") !== "NaN"){ - $ERROR('#8: (new Number("a")).toFixed("0.9") === "NaN"'); -} - -//CHECK#9 -if((new Number("a")).toFixed(Number.NaN) !== "NaN"){ - $ERROR('#9: (new Number("a")).toFixed(Number.NaN) === "NaN"'); -} - -//CHECK#10 -if((new Number("a")).toFixed("some string") !== "NaN"){ - $ERROR('#9: (new Number("a")).toFixed("some string") === "NaN"'); -} - -//CHECK#10 -try{ - s = (new Number("a")).toFixed(Number.POSITIVE_INFINITY); - $ERROR('#10: (new Number("a")).toFixed(Number.POSITIVE_INFINITY) should throw RangeError, not return NaN'); -} -catch(e){ - if(!(e instanceof RangeError)){ - $ERROR('#10: (new Number("a")).toFixed(Number.POSITIVE_INFINITY) should throw RangeError, not '+e); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.5_Number.prototype.toFixed/S15.7.4.5_A1.3_T02.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.5_Number.prototype.toFixed/S15.7.4.5_A1.3_T02.js deleted file mode 100644 index 177a68419..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.5_Number.prototype.toFixed/S15.7.4.5_A1.3_T02.js +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4.5_A1.3_T02; - * @section: 15.7.4.5; - * @assertion: Step 4: If this number value is NaN, return the string "NaN"; - * @description: direct usage of NaN; -*/ - -//CHECK#1 -if(Number.NaN.toFixed() !== "NaN"){ - $ERROR('#1: Number.NaN.prototype.toFixed() === "NaN"'); -} - -//CHECK#2 -if(Number.NaN.toFixed(0) !== "NaN"){ - $ERROR('#2: Number.NaN.prototype.toFixed(0) === "NaN"'); -} - -//CHECK#3 -if(Number.NaN.toFixed(1) !== "NaN"){ - $ERROR('#3: Number.NaN.prototype.toFixed(1) === "NaN"'); -} - -//CHECK#4 -if(Number.NaN.toFixed(1.1) !== "NaN"){ - $ERROR('#4: Number.NaN.toFixed(1.1) === "NaN"'); -} - -//CHECK#5 -if(Number.NaN.toFixed(0.9) !== "NaN"){ - $ERROR('#5: Number.NaN.toFixed(0.9) === "NaN"'); -} - -//CHECK#6 -if(Number.NaN.toFixed("1") !== "NaN"){ - $ERROR('#6: Number.NaN.toFixed("1") === "NaN"'); -} - -//CHECK#7 -if(Number.NaN.toFixed("1.1") !== "NaN"){ - $ERROR('#7: Number.NaN.toFixed("1.1") === "NaN"'); -} - -//CHECK#8 -if(Number.NaN.toFixed("0.9") !== "NaN"){ - $ERROR('#8: Number.NaN.toFixed("0.9") === "NaN"'); -} - -//CHECK#9 -if(Number.NaN.toFixed(Number.NaN) !== "NaN"){ - $ERROR('#9: Number.NaN.toFixed(Number.NaN) === "NaN"'); -} - -//CHECK#10 -if(Number.NaN.toFixed("some string") !== "NaN"){ - $ERROR('#9: Number.NaN.toFixed("some string") === "NaN"'); -} - -//CHECK#10 -try{ - s = Number.NaN.toFixed(Number.POSITIVE_INFINITY); - $ERROR('#10: Number.NaN.toFixed(Number.POSITIVE_INFINITY) should throw RangeError, not return NaN'); -} -catch(e){ - if(!(e instanceof RangeError)){ - $ERROR('#10: Number.NaN.toFixed(Number.POSITIVE_INFINITY) should throw RangeError, not '+e); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.5_Number.prototype.toFixed/S15.7.4.5_A1.4_T01.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.5_Number.prototype.toFixed/S15.7.4.5_A1.4_T01.js deleted file mode 100644 index 1c28cd4e5..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.5_Number.prototype.toFixed/S15.7.4.5_A1.4_T01.js +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4.5_A1.4_T01; - * @section: 15.7.4.5; - * @assertion: Step 9: If x >= 10^21, let m = ToString(x); - * @description: x is 10^21; -*/ - -//CHECK#1 -if((new Number(1e21)).toFixed() !== String(1e21)){ - $ERROR('#1: (new Number(1e21)).prototype.toFixed() === String(1e21)'); -} - -//CHECK#2 -if((new Number(1e21)).toFixed(0) !== String(1e21)){ - $ERROR('#2: (new Number(1e21)).prototype.toFixed(0) === String(1e21)'); -} - -//CHECK#3 -if((new Number(1e21)).toFixed(1) !== String(1e21)){ - $ERROR('#3: (new Number(1e21)).prototype.toFixed(1) === String(1e21)'); -} - -//CHECK#4 -if((new Number(1e21)).toFixed(1.1) !== String(1e21)){ - $ERROR('#4: (new Number(1e21)).toFixed(1.1) === String(1e21)'); -} - -//CHECK#5 -if((new Number(1e21)).toFixed(0.9) !== String(1e21)){ - $ERROR('#5: (new Number(1e21)).toFixed(0.9) === String(1e21)'); -} - -//CHECK#6 -if((new Number(1e21)).toFixed("1") !== String(1e21)){ - $ERROR('#6: (new Number(1e21)).toFixed("1") === String(1e21)'); -} - -//CHECK#7 -if((new Number(1e21)).toFixed("1.1") !== String(1e21)){ - $ERROR('#7: (new Number(1e21)).toFixed("1.1") === String(1e21)'); -} - -//CHECK#8 -if((new Number(1e21)).toFixed("0.9") !== String(1e21)){ - $ERROR('#8: (new Number(1e21)).toFixed("0.9") === String(1e21)'); -} - -//CHECK#9 -if((new Number(1e21)).toFixed(Number.NaN) !== String(1e21)){ - $ERROR('#9: (new Number(1e21)).toFixed(Number.NaN) === String(1e21)'); -} - -//CHECK#10 -if((new Number(1e21)).toFixed("some string") !== String(1e21)){ - $ERROR('#9: (new Number(1e21)).toFixed("some string") === String(1e21)'); -} - -//CHECK#10 -try{ - s = (new Number(1e21)).toFixed(Number.POSITIVE_INFINITY); - $ERROR('#10: (new Number(1e21)).toFixed(Number.POSITIVE_INFINITY) should throw RangeError, not return NaN'); -} -catch(e){ - if(!(e instanceof RangeError)){ - $ERROR('#10: (new Number(1e21)).toFixed(Number.POSITIVE_INFINITY) should throw RangeError, not '+e); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.5_Number.prototype.toFixed/S15.7.4.5_A2_T01.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.5_Number.prototype.toFixed/S15.7.4.5_A2_T01.js deleted file mode 100644 index 3426da074..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/15.7.4.5_Number.prototype.toFixed/S15.7.4.5_A2_T01.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4.5_A2_T01; - * @section: 15.7.4.5; - * @assertion: The length property of the toFixed method is 1; - * @description: Checking Number prototype itself; -*/ - -//CHECK#1 -if(Number.prototype.toFixed.hasOwnProperty("length") !== true){ - $ERROR('#1: The length property of the toFixed method is 1'); -} - -//CHECK#2 -if(Number.prototype.toFixed.length !== 1){ - $ERROR('#2: The length property of the toFixed method is 1'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/S15.7.4_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/S15.7.4_A1.js deleted file mode 100644 index ab5c760ab..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/S15.7.4_A1.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4_A1; - * @section: 15.7.4; - * @assertion: The Number prototype object is itself a Number object - * (its [[Class]] is "Number") whose value is +0; - * @description: Checking type and value of Number.prototype property; -*/ - -//CHECK#1 -if (typeof Number.prototype !== "object") { - $ERROR('#1: typeof Number.prototype === "object"'); -} - -//CHECK#2 -if (Number.prototype != 0) { - $ERROR('#2: Number.prototype == +0'); -} else if( 1/Number.prototype != Number.POSITIVE_INFINITY){ - $ERROR('#2: Number.prototype == +0'); -} - -delete Number.prototype.toString; - -if (Number.prototype.toString() !== "[object Number]") { - $ERROR('#3: The [[Class]] property of the Number prototype object is set to "Number"'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/S15.7.4_A2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/S15.7.4_A2.js deleted file mode 100644 index 62f2025f2..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/S15.7.4_A2.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4_A2; - * @section: 15.7.4; - * @assertion: The value of the internal [[Prototype]] property of the Number - * prototype object is the Object prototype object; - * @description: Checking Object.prototype.isPrototypeOf(Number.prototype); -*/ - -//CHECK#1 -if (!Object.prototype.isPrototypeOf(Number.prototype)) { - $ERROR('#1: Object prototype object is the prototype of Number prototype object'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/S15.7.4_A3.1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/S15.7.4_A3.1.js deleted file mode 100644 index 1f7c32adf..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/S15.7.4_A3.1.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4_A3.1; - * @section: 15.7.4; - * @assertion: The Number prototype object has the property constructor; - * @description: The test uses hasOwnProperty() method; -*/ - -//CHECK#1 -if(Number.prototype.hasOwnProperty("constructor") !== true){ - $ERROR('#1: The Number prototype object has the property constructor'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/S15.7.4_A3.2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/S15.7.4_A3.2.js deleted file mode 100644 index b87d8e441..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/S15.7.4_A3.2.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4_A3.2; - * @section: 15.7.4; - * @assertion: The Number prototype object has the property toString; - * @description: The test uses hasOwnProperty() method; -*/ - -//CHECK#1 -if(Number.prototype.hasOwnProperty("toString") !== true){ - $ERROR('#1: The Number prototype object has the property toString'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/S15.7.4_A3.3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/S15.7.4_A3.3.js deleted file mode 100644 index e93393fc6..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/S15.7.4_A3.3.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4_A3.3; - * @section: 15.7.4; - * @assertion: The Number prototype object has the property toLocaleString; - * @description: The test uses hasOwnProperty() method; -*/ - -//CHECK#1 -if(Number.prototype.hasOwnProperty("toLocaleString") !== true){ - $ERROR('#1: The Number prototype object has the property toLocaleString'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/S15.7.4_A3.4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/S15.7.4_A3.4.js deleted file mode 100644 index ecb000e19..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/S15.7.4_A3.4.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4_A3.4; - * @section: 15.7.4; - * @assertion: The Number prototype object has the property valueOf; - * @description: The test uses hasOwnProperty() method; -*/ - -//CHECK#1 -if(Number.prototype.hasOwnProperty("valueOf") !== true){ - $ERROR('#1: The Number prototype object has the property valueOf'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/S15.7.4_A3.5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/S15.7.4_A3.5.js deleted file mode 100644 index aee9eb019..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/S15.7.4_A3.5.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4_A3.5; - * @section: 15.7.4; - * @assertion: The Number prototype object has the property toFixed; - * @description: The test uses hasOwnProperty() method; -*/ - -//CHECK#1 -if(Number.prototype.hasOwnProperty("toFixed") !== true){ - $ERROR('#1: The Number prototype object has the property toFixed'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/S15.7.4_A3.6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/S15.7.4_A3.6.js deleted file mode 100644 index a60c3c8ba..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/S15.7.4_A3.6.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4_A3.6; - * @section: 15.7.4; - * @assertion: The Number prototype object has the property toExponential; - * @description: The test uses hasOwnProperty() method; -*/ - -//CHECK#1 -if(Number.prototype.hasOwnProperty("toExponential") !== true){ - $ERROR('#1: The Number prototype object has the property toExponential'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/S15.7.4_A3.7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/S15.7.4_A3.7.js deleted file mode 100644 index 0e9e26554..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.4_Properties_of_the_Number_Prototype_Object/S15.7.4_A3.7.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4_A3.7; - * @section: 15.7.4; - * @assertion: The Number prototype object has the property toPrecision; - * @description: The test uses hasOwnProperty() method; -*/ - -//CHECK#1 -if(Number.prototype.hasOwnProperty("toPrecision") !== true){ - $ERROR('#1: The Number prototype object has the property toPrecision'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.5_Properties_of_Number_Instances/S15.7.5_A1_T01.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.5_Properties_of_Number_Instances/S15.7.5_A1_T01.js deleted file mode 100644 index fe3836f09..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.5_Properties_of_Number_Instances/S15.7.5_A1_T01.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.5_A1_T01; - * @section: 15.7.5; - * @assertion: Number instances have no special properties beyond those - * inherited from the Number prototype object; - * @description: Checking property constructor; -*/ - -//CHECK#1 -if((new Number()).hasOwnProperty("constructor") !== false){ - $ERROR('#1: Number instance must have no special property "constructor"'); -} - -//CHECK#2 -if((new Number()).constructor !== Number.prototype.constructor){ - $ERROR('#2: Number instance property "constructor" must be inherited from Number prototype object'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.5_Properties_of_Number_Instances/S15.7.5_A1_T02.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.5_Properties_of_Number_Instances/S15.7.5_A1_T02.js deleted file mode 100644 index f204adf64..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.5_Properties_of_Number_Instances/S15.7.5_A1_T02.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.5_A1_T02; - * @section: 15.7.5; - * @assertion: Number instances have no special properties beyond those - * inherited from the Number prototype object; - * @description: Checking property toString; -*/ - -//CHECK#1 -if((new Number()).hasOwnProperty("toString") !== false){ - $ERROR('#1: Number instance must have no special property "toString"'); -} - -//CHECK#2 -if((new Number()).toString !== Number.prototype.toString){ - $ERROR('#2: Number instance property "toString" must be inherited from Number prototype object'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.5_Properties_of_Number_Instances/S15.7.5_A1_T03.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.5_Properties_of_Number_Instances/S15.7.5_A1_T03.js deleted file mode 100644 index 915d9482a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.5_Properties_of_Number_Instances/S15.7.5_A1_T03.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.5_A1_T03; - * @section: 15.7.5; - * @assertion: Number instances have no special properties beyond those - * inherited from the Number prototype object; - * @description: Checking property toLocaleString; -*/ - -//CHECK#1 -if((new Number()).hasOwnProperty("toLocaleString") !== false){ - $ERROR('#1: Number instance must have no special property "toLocaleString"'); -} - -//CHECK#2 -if((new Number()).toLocaleString !== Number.prototype.toLocaleString){ - $ERROR('#2: Number instance property "toLocaleString" must be inherited from Number prototype object'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.5_Properties_of_Number_Instances/S15.7.5_A1_T04.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.5_Properties_of_Number_Instances/S15.7.5_A1_T04.js deleted file mode 100644 index a950ab5ff..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.5_Properties_of_Number_Instances/S15.7.5_A1_T04.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.5_A1_T04; - * @section: 15.7.5; - * @assertion: Number instances have no special properties beyond those - * inherited from the Number prototype object; - * @description: Checking property valueOf; -*/ - -//CHECK#1 -if((new Number()).hasOwnProperty("valueOf") !== false){ - $ERROR('#1: Number instance must have no special property "valueOf"'); -} - -//CHECK#2 -if((new Number()).valueOf !== Number.prototype.valueOf){ - $ERROR('#2: Number instance property "valueOf" must be inherited from Number prototype object'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.5_Properties_of_Number_Instances/S15.7.5_A1_T05.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.5_Properties_of_Number_Instances/S15.7.5_A1_T05.js deleted file mode 100644 index 337b8cba3..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.5_Properties_of_Number_Instances/S15.7.5_A1_T05.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.5_A1_T05; - * @section: 15.7.5; - * @assertion: Number instances have no special properties beyond those - * inherited from the Number prototype object; - * @description: Checking property toFixed; -*/ - -//CHECK#1 -if((new Number()).hasOwnProperty("toFixed") !== false){ - $ERROR('#1: Number instance must have no special property "toFixed"'); -} - -//CHECK#2 -if((new Number()).toFixed !== Number.prototype.toFixed){ - $ERROR('#2: Number instance property "toFixed" must be inherited from Number prototype object'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.5_Properties_of_Number_Instances/S15.7.5_A1_T06.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.5_Properties_of_Number_Instances/S15.7.5_A1_T06.js deleted file mode 100644 index 5f0bf3417..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.5_Properties_of_Number_Instances/S15.7.5_A1_T06.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.5_A1_T06; - * @section: 15.7.5; - * @assertion: Number instances have no special properties beyond those - * inherited from the Number prototype object; - * @description: Checking property toExponential; -*/ - -//CHECK#1 -if((new Number()).hasOwnProperty("toExponential") !== false){ - $ERROR('#1: Number instance must have no special property "toExponential"'); -} - -//CHECK#2 -if((new Number()).toExponential !== Number.prototype.toExponential){ - $ERROR('#2: Number instance property "toExponential" must be inherited from Number prototype object'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.5_Properties_of_Number_Instances/S15.7.5_A1_T07.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.5_Properties_of_Number_Instances/S15.7.5_A1_T07.js deleted file mode 100644 index 4f7b3942f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.7_Number_Objects/15.7.5_Properties_of_Number_Instances/S15.7.5_A1_T07.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.5_A1_T07; - * @section: 15.7.5; - * @assertion: Number instances have no special properties beyond those - * inherited from the Number prototype object; - * @description: Checking property toPrecision; -*/ - -//CHECK#1 -if((new Number()).hasOwnProperty("toPrecision") !== false){ - $ERROR('#1: Number instance must have no special property "toPrecision"'); -} - -//CHECK#2 -if((new Number()).toPrecision !== Number.prototype.toPrecision){ - $ERROR('#2: Number instance property "toPrecision" must be inherited from Number prototype object'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.1_E/S15.8.1.1_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.1_E/S15.8.1.1_A1.js deleted file mode 100644 index b887c09c1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.1_E/S15.8.1.1_A1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.1.1_A1; - * @section: 15.8.1.1; - * @assertion: Math.E is approximately 2.7182818284590452354; - * @description: Comparing Math.E with 2.7182818284590452354; - */ -$INCLUDE("math_precision.js"); -$INCLUDE("math_isequal.js"); - -// CHECK#1 -if (!isEqual(Math.E, 2.7182818284590452354)) { - $ERROR('#1: \'Math.E is not approximately equal to 2.7182818284590452354\''); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.1_E/S15.8.1.1_A2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.1_E/S15.8.1.1_A2.js deleted file mode 100644 index 7dfd10e9d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.1_E/S15.8.1.1_A2.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.1.1_A2; - * @section: 15.8.1.1; - * @assertion: Value Property E of the Math Object has the attribute DontEnum; - * @description: Checking if Math.E property has the attribute DontEnum; - */ - -// CHECK#1 -for(x in Math) { - if(x === "E") { - $ERROR('#1: Value Property E of the Math Object hasn\'t attribute DontEnum: \'for(x in Math) {x==="E"}\''); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.1_E/S15.8.1.1_A3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.1_E/S15.8.1.1_A3.js deleted file mode 100644 index 6cda13f24..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.1_E/S15.8.1.1_A3.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.1.1_A3; - * @section: 15.8.1.1; - * @assertion: Value Property E of the Math Object has the attribute DontDelete; - * @description: Checking if Math.E property has the attribute DontDelete; - */ - -// CHECK#1 -if (delete Math.E === true) { - $ERROR('#1: Value Property E of the Math Object hasn\'t attribute DontDelete: \'Math.E === true\''); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.1_E/S15.8.1.1_A4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.1_E/S15.8.1.1_A4.js deleted file mode 100644 index 3c035c1e8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.1_E/S15.8.1.1_A4.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.1.1_A4; - * @section: 15.8.1.1; - * @assertion: Value Property E of the Math Object has the attribute ReadOnly; - * @description: Checking if Math.E property has the attribute ReadOnly; - */ - -// CHECK#1 -x = Math.E; -Math.E = 1; -if (Math.E !== x) { - $ERROR('#1: Math.E hasn\'t ReadOnly: \'x = Math.E;Math.E = 1;Math.E === x\''); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.2_LN10/S15.8.1.2_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.2_LN10/S15.8.1.2_A1.js deleted file mode 100644 index 4c0184b49..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.2_LN10/S15.8.1.2_A1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.1.2_A1; - * @section: 15.8.1.2; - * @assertion: Math.LN10 is approximately 2.302585092994046; - * @description: Comparing Math.LN10 with 2.302585092994046; - */ -$INCLUDE("math_precision.js"); -$INCLUDE("math_isequal.js"); - -// CHECK#1 -if (!isEqual(Math.LN10, 2.302585092994046)) { - $ERROR('#1: \'Math.LN10 is not approximately equal to 2.302585092994046\''); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.2_LN10/S15.8.1.2_A2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.2_LN10/S15.8.1.2_A2.js deleted file mode 100644 index 4cdf4e357..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.2_LN10/S15.8.1.2_A2.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.1.2_A2; - * @section: 15.8.1.2; - * @assertion: Value Property LN10 of the Math Object has the attribute DontEnum; - * @description: Checking if Math.LN10 property has the attribute DontEnum; - */ - -// CHECK#1 -for(x in Math) { - if(x === "LN10") { - $ERROR('#1: Value Property LN10 of the Math Object hasn\'t attribute DontEnum: \'for(x in Math) {x==="LN10"}\''); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.2_LN10/S15.8.1.2_A3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.2_LN10/S15.8.1.2_A3.js deleted file mode 100644 index 1c388a2c2..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.2_LN10/S15.8.1.2_A3.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.1.2_A3; - * @section: 15.8.1.2; - * @assertion: Value Property LN10 of the Math Object has the attribute DontDelete; - * @description: Checking if Math.LN10 property has the attribute DontDelete; - */ - -// CHECK#1 -if (delete Math.LN10 === true) { - $ERROR('#1: Value Property LN10 of the Math Object hasn\'t attribute DontDelete: \'Math.LN10 === true\''); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.2_LN10/S15.8.1.2_A4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.2_LN10/S15.8.1.2_A4.js deleted file mode 100644 index 4adb2ab4a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.2_LN10/S15.8.1.2_A4.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.1.2_A4; - * @section: 15.8.1.2; - * @assertion: Value Property LN10 of the Math Object has the attribute ReadOnly; - * @description: Checking if Math.LN10 property has the attribute ReadOnly; - */ - -// CHECK#1 -x = Math.LN10; -Math.LN10 = 1; -if (Math.LN10 !== x) { - $ERROR('#1: Math.LN10 hasn\'t ReadOnly: \'x = Math.LN10;Math.LN10 = 1;Math.LN10 === x\''); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.3_LN2/S15.8.1.3_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.3_LN2/S15.8.1.3_A1.js deleted file mode 100644 index c4812b9aa..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.3_LN2/S15.8.1.3_A1.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.1.3_A1; - * @section: 15.8.1.3; - * @assertion: Math.LN2 is approximately 0.6931471805599453; - * @description: Comparing Math.LN2 with 0.6931471805599453; - */ - -$INCLUDE("math_precision.js"); -$INCLUDE("math_isequal.js"); - -// CHECK#1 -if (!isEqual(Math.LN2, 0.6931471805599453)) { - $ERROR('#1: \'Math.LN2 is not approximately equal to 0.6931471805599453\''); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.3_LN2/S15.8.1.3_A2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.3_LN2/S15.8.1.3_A2.js deleted file mode 100644 index cab0663e6..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.3_LN2/S15.8.1.3_A2.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.1.3_A2; - * @section: 15.8.1.3; - * @assertion: Value Property LN2 of the Math Object has the attribute DontEnum; - * @description: Checking if Math.LN2 property has the attribute DontEnum; - */ - -// CHECK#1 -for(x in Math) { - if(x === "LN2") { - $ERROR('#1: Value Property LN2 of the Math Object hasn\'t attribute DontEnum: \'for(x in Math) {x==="LN2"}\''); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.3_LN2/S15.8.1.3_A3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.3_LN2/S15.8.1.3_A3.js deleted file mode 100644 index 645353c0e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.3_LN2/S15.8.1.3_A3.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.1.3_A3; - * @section: 15.8.1.3; - * @assertion: Value Property LN2 of the Math Object has the attribute DontDelete; - * @description: Checking if Math.LN2 property has the attribute DontDelete; - */ - -// CHECK#1 -if (delete Math.LN2 === true) { - $ERROR('#1: Value Property LN2 of the Math Object hasn\'t attribute DontDelete: \'Math.LN2 === true\''); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.3_LN2/S15.8.1.3_A4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.3_LN2/S15.8.1.3_A4.js deleted file mode 100644 index 0462e57f9..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.3_LN2/S15.8.1.3_A4.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.1.3_A4; - * @section: 15.8.1.3; - * @assertion: Value Property LN2 of the Math Object has the attribute ReadOnly; - * @description: Checking if Math.LN2 property has the attribute DontDelete; - */ - -// CHECK#1 -x = Math.LN2; -Math.LN2 = 1; -if (Math.LN2 !== x) { - $ERROR('#1: Math.LN2 hasn\'t ReadOnly: \'x = Math.LN2;Math.LN2 = 1;Math.LN2 === x\''); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.4_LOG2E/S15.8.1.4_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.4_LOG2E/S15.8.1.4_A1.js deleted file mode 100644 index 9b20178ba..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.4_LOG2E/S15.8.1.4_A1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.1.4_A1; - * @section: 15.8.1.4; - * @assertion: Math.LOG2E is approximately 1.4426950408889634; - * @description: Comparing Math.LOG2E with 1.4426950408889634; - */ -$INCLUDE("math_precision.js"); -$INCLUDE("math_isequal.js"); - -// CHECK#1 -if (!isEqual(Math.LOG2E, 1.4426950408889634)) { - $ERROR('#1: \'Math.LOG2E is not approximatley equal to 1.4426950408889634\''); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.4_LOG2E/S15.8.1.4_A2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.4_LOG2E/S15.8.1.4_A2.js deleted file mode 100644 index 02c9e6d9a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.4_LOG2E/S15.8.1.4_A2.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.1.4_A2; - * @section: 15.8.1.4; - * @assertion: Value Property LOG2E of the Math Object has the attribute DontEnum; - * @description: Checking if Math.LOG2E property has the attribute DontEnum; - */ - -// CHECK#1 -for(x in Math) { - if(x === "LOG2E") { - $ERROR('#1: Value Property LOG2E of the Math Object hasn\'t attribute DontEnum: \'for(x in Math) {x==="LOG2E"}\''); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.4_LOG2E/S15.8.1.4_A3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.4_LOG2E/S15.8.1.4_A3.js deleted file mode 100644 index 8cf30b45d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.4_LOG2E/S15.8.1.4_A3.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.1.4_A3; - * @section: 15.8.1.4; - * @assertion: Value Property LOG2E of the Math Object has the attribute DontDelete; - * @description: Checking if Math.LOG2E property has the attribute DontDelete; - */ - -// CHECK#1 -if (delete Math.LOG2E === true) { - $ERROR('#1: Value Property LOG2E of the Math Object hasn\'t attribute DontDelete: \'Math.LOG2E === true\''); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.4_LOG2E/S15.8.1.4_A4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.4_LOG2E/S15.8.1.4_A4.js deleted file mode 100644 index 65c067561..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.4_LOG2E/S15.8.1.4_A4.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.1.4_A4; - * @section: 15.8.1.4; - * @assertion: Value Property LOG2E of the Math Object has the attribute ReadOnly; - * @description: Checking if Math.LOG2E property has the attribute ReadOnly; - */ - -// CHECK#1 -x = Math.LOG2E; -Math.LOG2E = 1; -if (Math.LOG2E !== x) { - $ERROR('#1: Math.LOG2E hasn\'t ReadOnly: \'x = Math.LOG2E;Math.LOG2E = 1;Math.LOG2E === x\''); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.5_LOG10E/S15.8.1.5_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.5_LOG10E/S15.8.1.5_A1.js deleted file mode 100644 index a9edfc0f1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.5_LOG10E/S15.8.1.5_A1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.1.5_A1; - * @section: 15.8.1.5; - * @assertion: Math.LOG10E is approximately 0.4342944819032518; - * @description: Comparing Math.LOG10E with 0.4342944819032518; - */ -$INCLUDE("math_precision.js"); -$INCLUDE("math_isequal.js"); - -// CHECK#1 -if (!isEqual(Math.LOG10E, 0.4342944819032518)) { - $ERROR('#1: \'Math.LOG10E is not approximatley equal to 0.4342944819032518\''); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.5_LOG10E/S15.8.1.5_A2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.5_LOG10E/S15.8.1.5_A2.js deleted file mode 100644 index b56c76319..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.5_LOG10E/S15.8.1.5_A2.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.1.5_A2; - * @section: 15.8.1.5; - * @assertion: Value Property LOG10E of the Math Object has the attribute DontEnum; - * @description: Checking if Math.LOG10E property has the attribute DontEnum; - */ - -// CHECK#1 -for(x in Math) { - if(x === "LOG10E") { - $ERROR('#1: Value Property LOG10E of the Math Object hasn\'t attribute DontEnum: \'for(x in Math) {x==="LOG10E"}\''); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.5_LOG10E/S15.8.1.5_A3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.5_LOG10E/S15.8.1.5_A3.js deleted file mode 100644 index 7a5f90268..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.5_LOG10E/S15.8.1.5_A3.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.1.5_A3; - * @section: 15.8.1.5; - * @assertion: Value Property LOG10E of the Math Object has the attribute DontDelete; - * @description: Checking if Math.LOG10E property has the attribute DontDelete; - */ - -// CHECK#1 -if (delete Math.LOG10E === true) { - $ERROR('#1: Value Property LOG10E of the Math Object hasn\'t attribute DontDelete: \'Math.LOG10E === true\''); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.5_LOG10E/S15.8.1.5_A4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.5_LOG10E/S15.8.1.5_A4.js deleted file mode 100644 index 3573daa0b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.5_LOG10E/S15.8.1.5_A4.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.1.5_A4; - * @section: 15.8.1.5; - * @assertion: Value Property LOG10E of the Math Object has the attribute ReadOnly; - * @description: Checking if Math.LOG10E property has the attribute ReadOnly; - */ - -// CHECK#1 -x = Math.LOG10E; -Math.LOG10E = 1; -if (Math.LOG10E !== x) { - $ERROR('#1: Math.LOG10E hasn\'t ReadOnly: \'x = Math.LOG10E;Math.LOG10E = 1;Math.LOG10E === x\''); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.6_PI/S15.8.1.6_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.6_PI/S15.8.1.6_A1.js deleted file mode 100644 index 5e7935807..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.6_PI/S15.8.1.6_A1.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.1.6_A1; - * @section: 15.8.1.6; - * @assertion: Math.PI is approximately 3.1415926535897932; - * @description: Comparing Math.PI with 3.1415926535897932; - */ -$INCLUDE("math_precision.js"); -$INCLUDE("math_isequal.js"); - -// CHECK#1 -if (!isEqual(Math.PI, 3.1415926535897932)) { - $ERROR('#1: \'Math.PI is not approximatley equal to 3.1415926535897932\''); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.6_PI/S15.8.1.6_A2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.6_PI/S15.8.1.6_A2.js deleted file mode 100644 index 18234eabd..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.6_PI/S15.8.1.6_A2.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.1.6_A2; - * @section: 15.8.1.6; - * @assertion: Value Property PI of the Math Object has the attribute DontEnum; - * @description: Checking if Math.PI property has the attribute DontEnum; - */ - -// CHECK#1 -for(x in Math) { - if(x === "PI") { - $ERROR('#1: Value Property PI of the Math Object hasn\'t attribute DontEnum: \'for(x in Math) {x==="PI"}\''); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.6_PI/S15.8.1.6_A3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.6_PI/S15.8.1.6_A3.js deleted file mode 100644 index 42213267d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.6_PI/S15.8.1.6_A3.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.1.6_A3; - * @section: 15.8.1.6; - * @assertion: Value Property PI of the Math Object has the attribute DontDelete; - * @description: Checking if Math.PI property has the attribute DontDelete; - */ - -// CHECK#1 -if (delete Math.PI === true) { - $ERROR('#1: Value Property PI of the Math Object hasn\'t attribute DontDelete: \'Math.PI === true\''); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.6_PI/S15.8.1.6_A4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.6_PI/S15.8.1.6_A4.js deleted file mode 100644 index 78c193108..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.6_PI/S15.8.1.6_A4.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.1.6_A4; - * @section: 15.8.1.6; - * @assertion: Value Property PI of the Math Object has the attribute ReadOnly; - * @description: Checking if Math.PI property has the attribute ReadOnly; - */ - -// CHECK#1 -x = Math.PI; -Math.PI = 1; -if (Math.PI !== x) { - $ERROR('#1: Math.PI hasn\'t ReadOnly: \'x = Math.PI;Math.PI = 1;Math.PI === x\''); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.7_SQRT1_2/S15.8.1.7_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.7_SQRT1_2/S15.8.1.7_A1.js deleted file mode 100644 index bd2082780..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.7_SQRT1_2/S15.8.1.7_A1.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.1.7_A1; - * @section: 15.8.1.7; - * @assertion: Math.SQRT1_2 is approximately 0.7071067811865476; - * @description: Comparing Math.SQRT1_2 with 0.7071067811865476; - */ -$INCLUDE("math_precision.js"); -$INCLUDE("math_isequal.js"); - -// CHECK#1 -if (!isEqual(Math.SQRT1_2, 0.7071067811865476)) { - $ERROR('#1: \'Math.SQRT1_2 is not approximatley equal to 0.7071067811865476\''); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.7_SQRT1_2/S15.8.1.7_A2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.7_SQRT1_2/S15.8.1.7_A2.js deleted file mode 100644 index 32a2479dc..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.7_SQRT1_2/S15.8.1.7_A2.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.1.7_A2; - * @section: 15.8.1.7; - * @assertion: Value Property SQRT1_2 of the Math Object has the attribute DontEnum; - * @description: Checking if Math.SQRT1_2 property has the attribute DontEnum; - */ - -// CHECK#1 -for(x in Math) { - if(x === "SQRT1_2") { - $ERROR('#1: Value Property SQRT1_2 of the Math Object hasn\'t attribute DontEnum: \'for(x in Math) {x==="SQRT1_2"}\''); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.7_SQRT1_2/S15.8.1.7_A3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.7_SQRT1_2/S15.8.1.7_A3.js deleted file mode 100644 index a4a6a2717..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.7_SQRT1_2/S15.8.1.7_A3.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.1.7_A3; - * @section: 15.8.1.7; - * @assertion: Value Property SQRT1_2 of the Math Object has the attribute DontDelete; - * @description: Checking if Math.SQRT1_2 property has the attribute DontDelete; - */ - -// CHECK#1 -if (delete Math.SQRT1_2 === true) { - $ERROR("#1: Value Property SQRT1_2 of the Math Object hasn't attribute DontDelete: 'Math.SQRT1_2 === true'"); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.7_SQRT1_2/S15.8.1.7_A4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.7_SQRT1_2/S15.8.1.7_A4.js deleted file mode 100644 index c715ed8e5..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.7_SQRT1_2/S15.8.1.7_A4.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.1.7_A4; - * @section: 15.8.1.7; - * @assertion: Value Property SQRT1_2 of the Math Object has the attribute ReadOnly; - * @description: Checking if Math.SQRT1_2 property has the attribute ReadOnly; - */ - -// CHECK#1 -x = Math.SQRT1_2; -Math.SQRT1_2 = 1; -if (Math.SQRT1_2 !== x) { - $ERROR('#1: Math.SQRT1_2 hasn\'t ReadOnly: \'x = Math.SQRT1_2;Math.SQRT1_2 = 1;Math.SQRT1_2 === x\''); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.8_SQRT2/S15.8.1.8_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.8_SQRT2/S15.8.1.8_A1.js deleted file mode 100644 index f5f40b157..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.8_SQRT2/S15.8.1.8_A1.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.1.8_A1; - * @section: 15.8.1.8; - * @assertion: Math.SQRT2 is approximately 1.4142135623730951; - * @description: Comparing Math.SQRT2 with 1.4142135623730951; - */ -$INCLUDE("math_precision.js"); -$INCLUDE("math_isequal.js"); - -// CHECK#1 -if (!isEqual(Math.SQRT2, 1.4142135623730951)) { - $ERROR('#1: \'Math.SQRT2 is not approximatley equal to 1.4142135623730951\''); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.8_SQRT2/S15.8.1.8_A2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.8_SQRT2/S15.8.1.8_A2.js deleted file mode 100644 index 40336846a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.8_SQRT2/S15.8.1.8_A2.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.1.8_A2; - * @section: 15.8.1.8; - * @assertion: Value Property SQRT2 of the Math Object has the attribute DontEnum; - * @description: Checking if Math.SQRT2 property has the attribute DontEnum; - */ - -// CHECK#1 -for(x in Math) { - if(x === "SQRT2") { - $ERROR('#1: Value Property SQRT2 of the Math Object hasn\'t attribute DontEnum: \'for(x in Math) {x==="SQRT2"}\''); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.8_SQRT2/S15.8.1.8_A3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.8_SQRT2/S15.8.1.8_A3.js deleted file mode 100644 index af7c701ff..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.8_SQRT2/S15.8.1.8_A3.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.1.8_A3; - * @section: 15.8.1.8; - * @assertion: Value Property SQRT2 of the Math Object has the attribute DontDelete; - * @description: Checking if Math.SQRT2 property has the attribute DontDelete; - */ - -// CHECK#1 -if (delete Math.SQRT2 === true) { - $ERROR('#1: Value Property SQRT2 of the Math Object hasn\'t attribute DontDelete: \'Math.SQRT2 === true\''); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.8_SQRT2/S15.8.1.8_A4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.8_SQRT2/S15.8.1.8_A4.js deleted file mode 100644 index e8ad31daf..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.1_Value_Properties_of_the_Math_Object/15.8.1.8_SQRT2/S15.8.1.8_A4.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.1.8_A4; - * @section: 15.8.1.8; - * @assertion: Value Property SQRT2 of the Math Object has the attribute ReadOnly; - * @description: Checking if Math.SQRT2 property has the attribute ReadOnly; - */ - -// CHECK#1 -x = Math.SQRT2; -Math.SQRT2 = 1; -if (Math.SQRT2 !== x) { - $ERROR('#1: Math.SQRT2 hasn\'t ReadOnly: \'x = Math.SQRT2;Math.SQRT2 = 1;Math.SQRT2 === x\''); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.10_log/S15.8.2.10_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.10_log/S15.8.2.10_A1.js deleted file mode 100644 index dd0538b7a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.10_log/S15.8.2.10_A1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.10_A1; - * @section: 15.8.2.10; - * @assertion: If x is NaN, Math.log(x) is NaN; - * @description: Checking if Math.log(NaN) is NaN; - */ - -// CHECK#1 -var x = NaN; -if (!isNaN(Math.log(x))) -{ - $ERROR("#1: 'var x=NaN; isNaN(Math.log(x)) === false'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.10_log/S15.8.2.10_A2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.10_log/S15.8.2.10_A2.js deleted file mode 100644 index 9ebfd7cf5..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.10_log/S15.8.2.10_A2.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.10_A2; - * @section: 15.8.2.10; - * @assertion: If x is less than 0, Math.log(x) is NaN; - * @description: Checking if Math.log(x) is NaN, where x is less than 0; - */ - -// CHECK#1 -var x = -0.000000000000001; -if (!isNaN(Math.log(x))) -{ - $ERROR("#1: 'var x=-0.000000000000001; isNaN(Math.log(x)) === false'"); -} - -// CHECK#2 -x = -1; -if (!isNaN(Math.log(x))) -{ - $ERROR("#1: 'var x=-1; isNaN(Math.log(x)) === false'"); -} - -// CHECK#3 -x = -Infinity; -if (!isNaN(Math.log(x))) -{ - $ERROR("#1: 'var x=-Infinity; isNaN(Math.log(x)) === false'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.10_log/S15.8.2.10_A3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.10_log/S15.8.2.10_A3.js deleted file mode 100644 index 7a64c6e86..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.10_log/S15.8.2.10_A3.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.10_A3; - * @section: 15.8.2.10; - * @assertion: If x is +0 or -0, Math.log(x) is -Infinity; - * @description: Checking if Math.log(+0) and Math.log(-0) equals to -Infinity; - */ - -// CHECK#1 -var x = +0; -if (Math.log(x) !== -Infinity) -{ - $ERROR("#1: 'var x=+0; Math.log(x) !== -Infinity'"); -} - -// CHECK#2 -var x = -0; -if (Math.log(x) !== -Infinity) -{ - $ERROR("#1: 'var x=-0; Math.log(x) !== -Infinity'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.10_log/S15.8.2.10_A4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.10_log/S15.8.2.10_A4.js deleted file mode 100644 index cc9c92080..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.10_log/S15.8.2.10_A4.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.10_A4; - * @section: 15.8.2.10; - * @assertion: If x is 1, Math.log(x) is +0; - * @description: Checking if Math.log(1) equals to +0; - */ - -// CHECK#1 -var x = 1; -if (Math.log(x) !== +0) -{ - $ERROR("#1: 'var x=1; Math.log(x) !== +0'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.10_log/S15.8.2.10_A5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.10_log/S15.8.2.10_A5.js deleted file mode 100644 index 2bc7b1610..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.10_log/S15.8.2.10_A5.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.10_A5; - * @section: 15.8.2.10; - * @assertion: If x is +Infinity, Math.log(x) is +Infinity; - * @description: Checking if Math.log(+Infinity) equals to +Infinity; - */ - -// CHECK#1 -var x = +Infinity; -if (Math.log(x) !== +Infinity) -{ - $ERROR("#1: 'var x=+Infinity; Math.log(x) !== +Infinity'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.10_log/S15.8.2.10_A6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.10_log/S15.8.2.10_A6.js deleted file mode 100644 index ef47483ac..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.10_log/S15.8.2.10_A6.js +++ /dev/null @@ -1,159 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.10_A6; - * @section: 15.8.2.10; - * @assertion: Math.log, recommended that implementations use the approximation algorithms for IEEE 754 arithmetic contained in fdlibm; - * @description: Checking if Math.log is approximately equals to its mathematical values on the set of 64 argument values; all the sample values is calculated with LibC; - */ - -$INCLUDE("math_precision.js"); -$INCLUDE("math_isequal.js"); - -// CHECK#1 -vnum = 64; -var x = new Array(); -x[0] = 0.00000000000000000000; -x[1] = 0.25396825396825395000; -x[2] = 0.50793650793650791000; -x[3] = 0.76190476190476186000; -x[4] = 1.01587301587301580000; -x[5] = 1.26984126984126980000; -x[6] = 1.52380952380952370000; -x[7] = 1.77777777777777770000; -x[8] = 2.03174603174603160000; -x[9] = 2.28571428571428560000; -x[10] = 2.53968253968253950000; -x[11] = 2.79365079365079350000; -x[12] = 3.04761904761904740000; -x[13] = 3.30158730158730140000; -x[14] = 3.55555555555555540000; -x[15] = 3.80952380952380930000; -x[16] = 4.06349206349206330000; -x[17] = 4.31746031746031720000; -x[18] = 4.57142857142857120000; -x[19] = 4.82539682539682510000; -x[20] = 5.07936507936507910000; -x[21] = 5.33333333333333300000; -x[22] = 5.58730158730158700000; -x[23] = 5.84126984126984090000; -x[24] = 6.09523809523809490000; -x[25] = 6.34920634920634890000; -x[26] = 6.60317460317460280000; -x[27] = 6.85714285714285680000; -x[28] = 7.11111111111111070000; -x[29] = 7.36507936507936470000; -x[30] = 7.61904761904761860000; -x[31] = 7.87301587301587260000; -x[32] = 8.12698412698412650000; -x[33] = 8.38095238095238140000; -x[34] = 8.63492063492063440000; -x[35] = 8.88888888888888930000; -x[36] = 9.14285714285714230000; -x[37] = 9.39682539682539720000; -x[38] = 9.65079365079365030000; -x[39] = 9.90476190476190510000; -x[40] = 10.15873015873015800000; -x[41] = 10.41269841269841300000; -x[42] = 10.66666666666666600000; -x[43] = 10.92063492063492100000; -x[44] = 11.17460317460317400000; -x[45] = 11.42857142857142900000; -x[46] = 11.68253968253968200000; -x[47] = 11.93650793650793700000; -x[48] = 12.19047619047619000000; -x[49] = 12.44444444444444500000; -x[50] = 12.69841269841269800000; -x[51] = 12.95238095238095300000; -x[52] = 13.20634920634920600000; -x[53] = 13.46031746031746000000; -x[54] = 13.71428571428571400000; -x[55] = 13.96825396825396800000; -x[56] = 14.22222222222222100000; -x[57] = 14.47619047619047600000; -x[58] = 14.73015873015872900000; -x[59] = 14.98412698412698400000; -x[60] = 15.23809523809523700000; -x[61] = 15.49206349206349200000; -x[62] = 15.74603174603174500000; -x[63] = 16.00000000000000000000; - - - -var y = new Array(); -y[0] = -Infinity; -y[1] = -1.37054600415175140000; -y[2] = -0.67739882359180614000; -y[3] = -0.27193371548364181000; -y[4] = 0.01574835696813911200; -y[5] = 0.23889190828234888000; -y[6] = 0.42121346507630347000; -y[7] = 0.57536414490356180000; -y[8] = 0.70889553752808443000; -y[9] = 0.82667857318446791000; -y[10] = 0.93203908884229414000; -y[11] = 1.02734926864661900000; -y[12] = 1.11436064563624870000; -y[13] = 1.19440335330978530000; -y[14] = 1.26851132546350720000; -y[15] = 1.33750419695045860000; -y[16] = 1.40204271808802970000; -y[17] = 1.46266733990446450000; -y[18] = 1.51982575374441310000; -y[19] = 1.57389297501468910000; -y[20] = 1.62518626940223940000; -y[21] = 1.67397643357167160000; -y[22] = 1.72049644920656440000; -y[23] = 1.76494821177739820000; -y[24] = 1.80750782619619410000; -y[25] = 1.84832982071644910000; -y[26] = 1.88755053386973050000; -y[27] = 1.92529086185257750000; -y[28] = 1.96165850602345240000; -y[29] = 1.99674982583472250000; -y[30] = 2.03065137751040400000; -y[31] = 2.06344120033339480000; -y[32] = 2.09518989864797510000; -y[33] = 2.12596155731472880000; -y[34] = 2.15581452046440970000; -y[35] = 2.18480205733766210000; -y[36] = 2.21297293430435850000; -y[37] = 2.24037190849247290000; -y[38] = 2.26704015557463420000; -y[39] = 2.29301564197789490000; -y[40] = 2.31833344996218480000; -y[41] = 2.34302606255255650000; -y[42] = 2.36712361413161700000; -y[43] = 2.39065411154181100000; -y[44] = 2.41364362976650960000; -y[45] = 2.43611648561856820000; -y[46] = 2.45809539233734360000; -y[47] = 2.47960159755830700000; -y[48] = 2.50065500675613930000; -y[49] = 2.52127429395887500000; -y[50] = 2.54147700127639450000; -y[51] = 2.56127962857257430000; -y[52] = 2.58069771442967570000; -y[53] = 2.59974590940037050000; -y[54] = 2.61843804241252310000; -y[55] = 2.63678718108071930000; -y[56] = 2.65480568658339780000; -y[57] = 2.67250526368279880000; -y[58] = 2.68989700639466770000; -y[59] = 2.70699143975396780000; -y[60] = 2.72379855807034900000; -y[61] = 2.74032786002155990000; -y[62] = 2.75658838089334020000; -y[63] = 2.77258872223978110000; - - -var val; -for (i = 0; i < vnum; i++) -{ - val = Math.log(x[i]); - if (!isEqual(val, y[i])) - { - $ERROR("\nx = " + x[i] + "\nlibc.log(x) = " + y[i] + "\nMath.log(x) = " + Math.log(x[i]) + "\nMath.abs(libc.log(x) - Math.log(x)) > " + prec + "\n\n"); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.11_max/S15.8.2.11_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.11_max/S15.8.2.11_A1.js deleted file mode 100644 index 79d7e1d8a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.11_max/S15.8.2.11_A1.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.11_A1; - * @section: 15.8.2.11; - * @assertion: If no arguments are given, Math.max() is -Infinity; - * @description: Checking if Math.max() equals to -Infinity; - */ - -// CHECK#1 -if (Math.max() != -Infinity) -{ - $ERROR("#1: 'Math.max() != -Infinity'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.11_max/S15.8.2.11_A2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.11_max/S15.8.2.11_A2.js deleted file mode 100644 index 0a2d5fa8c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.11_max/S15.8.2.11_A2.js +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.11_A2; - * @section: 15.8.2.11; - * @assertion: If any value is NaN, the result of Math.max is NaN; - * @description: The script tests Math.max giving 1, 2 and 3 arguments to the function where at least one of the arguments is NaN - */ - -// CHECK#1 -if (!isNaN(Math.max(NaN))) -{ - $ERROR("#1: 'isNaN(Math.max(NaN)) === false"); -} - -// CHECK#2 -vals = new Array(); -vals[0] = -Infinity; -vals[1] = -0.000000000000001; -vals[2] = -0; -vals[3] = +0 -vals[4] = 0.000000000000001; -vals[5] = +Infinity; -vals[6] = NaN; -valnum = 7; - -args = new Array(); -for (i = 0; i <= 1; i++) -{ - args[i] = NaN; - for (j = 0; j < valnum; j++) - { - args[1-i] = vals[j]; - if (!isNaN(Math.max(args[0], args[1]))) - { - $ERROR("#2: 'isNaN(Math.max(" + args[0] + ", " + args[1] + ")) === false"); - } - } -} - -// CHECK #3 -var k = 1; -var l = 2; -for (i = 0; i <= 2; i++) -{ - args[i] = NaN; - if (i === 1) - { - k = 0; - } else if (i === 2) - { - l = 1; - } - for (j = 0; j < valnum; j++) - { - for (jj = 0; jj < valnum; jj++) - { - args[k] = vals[j]; - args[l] = vals[jj]; - if (!isNaN(Math.max(args[0], args[1], args[2]))) - { - $ERROR("#3: 'isNaN(Math.max(" + args[0] + ", " + args[1] + ", " + args[2] + ")) === false"); - } - } - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.11_max/S15.8.2.11_A3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.11_max/S15.8.2.11_A3.js deleted file mode 100644 index 36b6734c5..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.11_max/S15.8.2.11_A3.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.11_A3; - * @section: 15.8.2.11; - * @assertion: +0 is considered to be larger than -0; - * @description: Checking if Math.max(-0,+0) and Math.max(+0,-0) equals to +0; - */ - -// CHECK#1 -if (Math.max(-0, +0) !== +0) -{ - $ERROR("#1: 'Math.max(-0, +0) !== +0'"); -} - -// CHECK#1 -if (Math.max(+0, -0) !== +0) -{ - $ERROR("#2: 'Math.max(+0, -0) !== +0'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.11_max/S15.8.2.11_A4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.11_max/S15.8.2.11_A4.js deleted file mode 100644 index a4e7481b8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.11_max/S15.8.2.11_A4.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.11_A4; - * @section: 15.8.2.11; - * @assertion: The length property of the Math.max method is 2; - * @description: Checking if Math.max.length property is defined and equals to 2; - */ - -// CHECK#1 -if (typeof Math.max !== "function") { - $ERROR('#1: Math.max method is not defined'); -} - -// CHECK#2 -if (typeof Math.max.length === "undefined") { - $ERROR('#2: length property of Math.max method is undefined'); -} - -// CHECK#3 -if (Math.max.length !== 2) { - $ERROR('#3: The length property of the Math.max method is not 2'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.12_min/S15.8.2.12_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.12_min/S15.8.2.12_A1.js deleted file mode 100644 index 64a2c0160..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.12_min/S15.8.2.12_A1.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.12_A1; - * @section: 15.8.2.12; - * @assertion: If no arguments are given, Math.min() is +Infinity; - * @description: Checking if Math.min() equals to +Infinity; - */ - -// CHECK#1 -if (Math.min() != +Infinity) -{ - $ERROR("#1: 'Math.min() != +Infinity'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.12_min/S15.8.2.12_A2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.12_min/S15.8.2.12_A2.js deleted file mode 100644 index 2bcd769ac..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.12_min/S15.8.2.12_A2.js +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.12_A2; - * @section: 15.8.2.12; - * @assertion: If any value is NaN, the result of Math.min is NaN; - * @description: The script tests Math.min giving 1, 2 and 3 arguments to the function where at least one of the arguments is NaN - */ - -// CHECK#1 -if (!isNaN(Math.min(NaN))) -{ - $ERROR("#1: 'isNaN(Math.min(NaN)) === false"); -} - -// CHECK#2 -vals = new Array(); -vals[0] = -Infinity; -vals[1] = -0.000000000000001; -vals[2] = -0; -vals[3] = +0 -vals[4] = 0.000000000000001; -vals[5] = +Infinity; -vals[6] = NaN; -valnum = 7; - -args = new Array(); -for (i = 0; i <= 1; i++) -{ - args[i] = NaN; - for (j = 0; j < valnum; j++) - { - args[1-i] = vals[j]; - if (!isNaN(Math.min(args[0], args[1]))) - { - $ERROR("#2: 'isNaN(Math.min(" + args[0] + ", " + args[1] + ")) === false"); - } - } -} - -// CHECK #3 -var k = 1; -var l = 2; -for (i = 0; i <= 2; i++) -{ - args[i] = NaN; - if (i === 1) - { - k = 0; - } else if (i === 2) - { - l = 1; - } - for (j = 0; j < valnum; j++) - { - for (jj = 0; jj < valnum; jj++) - { - args[k] = vals[j]; - args[l] = vals[jj]; - if (!isNaN(Math.min(args[0], args[1], args[2]))) - { - $ERROR("#3: 'isNaN(Math.min(" + args[0] + ", " + args[1] + ", " + args[2] + ")) === false"); - } - } - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.12_min/S15.8.2.12_A3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.12_min/S15.8.2.12_A3.js deleted file mode 100644 index b85137077..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.12_min/S15.8.2.12_A3.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.12_A3; - * @section: 15.8.2.12; - * @assertion: +0 is considered to be larger than -0; - * @description: Checking if Math.max(-0,+0) and Math.max(+0,-0) equals to -0; - */ - -// CHECK#1 -if (Math.max(-0, +0) !== -0) -{ - $ERROR("#1: 'Math.max(-0, +0) !== -0'"); -} - -// CHECK#1 -if (Math.max(+0, -0) !== -0) -{ - $ERROR("#2: 'Math.max(+0, -0) !== -0'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.12_min/S15.8.2.12_A4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.12_min/S15.8.2.12_A4.js deleted file mode 100644 index c44a736d4..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.12_min/S15.8.2.12_A4.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.12_A4; - * @section: 15.8.2.12; - * @assertion: The length property of the Math.min method is 2; - * @description: Checking if Math.min.length property is defined and equals to 2; - */ - -// CHECK#1 -if (typeof Math.min !== "function") { - $ERROR('#1: Math.min method is not defined'); -} - -// CHECK#2 -if (typeof Math.min.length === "undefined") { - $ERROR('#2: length property of Math.min method is undefined'); -} - -// CHECK#3 -if (Math.min.length !== 2) { - $ERROR('#3: The length property of the Math.min method is not 2'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A1.js deleted file mode 100644 index 8da5cd806..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A1.js +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.13_A1; - * @section: 15.8.2.13; - * @assertion: If y is NaN, Math.pow(x,y) is NaN; - * @description: Checking if Math.pow(x,y) is NaN, where y is NaN; - */ - -// CHECK#1 - -y = NaN; -x = new Array(); -x[0] = -Infinity; -x[1] = -1.7976931348623157E308; //largest (by module) finite number -x[2] = -0.000000000000001; -x[3] = -0; -x[4] = +0 -x[5] = 0.000000000000001; -x[6] = 1.7976931348623157E308; //largest finite number -x[7] = +Infinity; -x[8] = NaN; -xnum = 9; - -for (i = 0; i < xnum; i++) -{ - if (!isNaN(Math.pow(x[i],y))) - { - $ERROR("#1: isNaN(Math.pow(" + x[i] + ", " + y + ")) === false"); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A10.js deleted file mode 100644 index 29c8dd5a7..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A10.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.13_A10; - * @section: 15.8.2.13; - * @assertion: If abs(x)<1 and y is -Infinity, Math.pow(x,y) is +Infinity; - * @description: Checking if Math.pow(x,y) equals to +Infinity, where abs(x)<1 and y is -Infinity; - */ - -// CHECK#1 - -y = -Infinity; -x = new Array(); -x[0] = 0.999999999999999; -x[1] = 0.5; -x[2] = +0; -x[3] = -0; -x[4] = -0.5; -x[5] = -0.999999999999999; -xnum = 6; - -for (i = 0; i < xnum; i++) -{ - if (Math.pow(x[i],y) !== +Infinity) - { - $ERROR("#1: Math.pow(" + x[i] + ", " + y + ") !== +Infinity"); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A11.js deleted file mode 100644 index 2bfe428da..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A11.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.13_A11; - * @section: 15.8.2.13; - * @assertion: If x is +Infinity and y>0, Math.pow(x,y) is +Infinity; - * @description: Checking if Math.pow(x,y) equals to +Infinity, where x is +Infinity and y>0; - */ - -// CHECK#1 - -x = +Infinity; -y = new Array(); -y[3] = Infinity; -y[2] = 1.7976931348623157E308; //largest (by module) finite number -y[1] = 1; -y[0] = 0.000000000000001; -ynum = 4; - -for (i = 0; i < ynum; i++) -{ - if (Math.pow(x,y[i]) !== +Infinity) - { - $ERROR("#1: Math.pow(" + x + ", " + y[i] + ") !== +Infinity"); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A12.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A12.js deleted file mode 100644 index 01ab6c3de..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A12.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.13_A12; - * @section: 15.8.2.13; - * @assertion: If x is +Infinity and y<0, Math.pow(x,y) is +0; - * @description: Checking if Math.pow(x,y) equals to +0, where x is +Infinity and y<0; - */ - -// CHECK#1 - -x = +Infinity; -y = new Array(); -y[0] = -Infinity; -y[1] = -1.7976931348623157E308; //largest (by module) finite number -y[2] = -1; -y[3] = -0.000000000000001; -ynum = 4; - -for (i = 0; i < ynum; i++) -{ - if (Math.pow(x,y[i]) !== +0) - { - $ERROR("#1: Math.pow(" + x + ", " + y[i] + ") !== +0"); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A13.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A13.js deleted file mode 100644 index 27028ec71..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A13.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.13_A13; - * @section: 15.8.2.13; - * @assertion: If x is -Infinity and y>0 and y is an odd integer, Math.pow(x,y) is -Infinity; - * @description: Checking if Math.pow(x,y) equals to -Infinity, where x is -Infinity and y>0; - */ - -// CHECK#1 - -x = -Infinity; -y = new Array(); -y[0] = 1; -y[1] = 111; -y[2] = 111111; -ynum = 3; - -for (i = 0; i < ynum; i++) -{ - if (Math.pow(x,y[i]) !== -Infinity) - { - $ERROR("#1: Math.pow(" + x + ", " + y[i] + ") !== -Infinity"); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A14.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A14.js deleted file mode 100644 index 64862f38d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A14.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.13_A14; - * @section: 15.8.2.13; - * @assertion: If x is -Infinity and y>0 and y is NOT an odd integer, Math.pow(x,y) is +Infinity; - * @description: Checking if Math.pow(x,y) equals to +Infinity, where x is -Infinity and y>0; - */ - -// CHECK#1 - -x = -Infinity; -y = new Array(); -y[0] = 0.000000000000001; -y[1] = 2; -y[2] = Math.PI; -y[3] = 1.7976931348623157E308; //largest finite number -y[4] = +Infinity; -ynum = 5; - -for (i = 0; i < ynum; i++) -{ - if (Math.pow(x,y[i]) !== +Infinity) - { - $ERROR("#1: Math.pow(" + x + ", " + y[i] + ") !== +Infinity"); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A15.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A15.js deleted file mode 100644 index 8b3df2d64..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A15.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.13_A15; - * @section: 15.8.2.13; - * @assertion: If x is -Infinity and y<0 and y is an odd integer, Math.pow(x,y) is -0; - * @description: Checking if Math.pow(x,y) equals to -0, where x is -Infinity and y<0; - */ - -// CHECK#1 - -x = -Infinity; -y = new Array(); -y[2] = -1; -y[1] = -111; -y[0] = -111111; -ynum = 3; - -for (i = 0; i < ynum; i++) -{ - if (Math.pow(x,y[i]) !== -0) - { - $ERROR("#1: Math.pow(" + x + ", " + y[i] + ") !== -0"); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A16.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A16.js deleted file mode 100644 index ebfee99f9..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A16.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.13_A16; - * @section: 15.8.2.13; - * @assertion: If x is -Infinity and y<0 and y is NOT an odd integer, Math.pow(x,y) is +0; - * @description: Checking if Math.pow(x,y) equals to +0, where x is -Infinity and y<0; - */ - -// CHECK#1 - -x = -Infinity; -y = new Array(); -y[4] = -0.000000000000001; -y[3] = -2; -y[2] = -Math.PI; -y[1] = -1.7976931348623157E308; //largest (by module) finite number -y[0] = -Infinity; -ynum = 5; - -for (i = 0; i < ynum; i++) -{ - if (Math.pow(x,y[i]) !== +0) - { - $ERROR("#1: Math.pow(" + x + ", " + y[i] + ") !== +0"); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A17.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A17.js deleted file mode 100644 index a2dd0e6a3..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A17.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.13_A17; - * @section: 15.8.2.13; - * @assertion: If x is +0 and y>0, Math.pow(x,y) is +0; - * @description: Checking if Math.pow(x,y) equals to +0, where x is +0 and y>0; - */ - -// CHECK#1 - -x = +0; -y = new Array(); -y[3] = Infinity; -y[2] = 1.7976931348623157E308; //largest finite number -y[1] = 1; -y[0] = 0.000000000000001; -ynum = 4; - -for (i = 0; i < ynum; i++) -{ - if (Math.pow(x,y[i]) !== +0) - { - $ERROR("#1: Math.pow(" + x + ", " + y[i] + ") !== +0"); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A18.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A18.js deleted file mode 100644 index 12de1057e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A18.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.13_A18; - * @section: 15.8.2.13; - * @assertion: If x is +0 and y<0, Math.pow(x,y) is +Infinity; - * @description: Checking if Math.pow(x,y) equals to +Infinity, where x is +0 and y<0; - */ - -// CHECK#1 - -x = +0; -y = new Array(); -y[0] = -Infinity; -y[1] = -1.7976931348623157E308; //largest (by module) finite number -y[2] = -1; -y[3] = -0.000000000000001; -ynum = 4; - -for (i = 0; i < ynum; i++) -{ - if (Math.pow(x,y[i]) !== +Infinity) - { - $ERROR("#1: Math.pow(" + x + ", " + y[i] + ") !== +Infinity"); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A19.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A19.js deleted file mode 100644 index 2167070b2..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A19.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.13_A19; - * @section: 15.8.2.13; - * @assertion: If x is -0 and y>0 and y is an odd integer, Math.pow(x,y) is -0; - * @description: Checking if Math.pow(x,y) equals to -0, where x is -0 and y>0; - */ - -// CHECK#1 - -x = -0; -y = new Array(); -y[0] = 1; -y[1] = 111; -y[2] = 111111; -ynum = 3; - -for (i = 0; i < ynum; i++) -{ - if (Math.pow(x,y[i]) !== -0) - { - $ERROR("#1: Math.pow(" + x + ", " + y[i] + ") !== -0"); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A2.js deleted file mode 100644 index cbddb6463..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A2.js +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.13_A2; - * @section: 15.8.2.13; - * @assertion: If y is +0, Math.pow(x,y) is 1, even if x is NaN; - * @description: Checking if Math.pow(x,y) equals to 1, where y is +0 and x is number or NaN; - */ - -// CHECK#1 - -y = +0; -x = new Array(); -x[0] = -Infinity; -x[1] = -1.7976931348623157E308; //largest (by module) finite number -x[2] = -0.000000000000001; -x[3] = -0; -x[4] = +0 -x[5] = 0.000000000000001; -x[6] = 1.7976931348623157E308; //largest finite number -x[7] = +Infinity; -x[8] = NaN; -xnum = 9; - -for (i = 0; i < xnum; i++) -{ - if (Math.pow(x[i],y) !== 1) - { - $ERROR("#1: Math.pow(" + x[i] + ", " + y + ") !== 1"); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A20.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A20.js deleted file mode 100644 index 85e41bde6..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A20.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.13_A20; - * @section: 15.8.2.13; - * @assertion: If x is -0 and y>0 and y is NOT an odd integer, Math.pow(x,y) is +0; - * @description: Checking if Math.pow(x,y) equals to +0, where x is -0 and y>0 and y is NOT an odd integer; - */ - -// CHECK#1 - -x = -0; -y = new Array(); -y[0] = 0.000000000000001; -y[1] = 2; -y[2] = Math.PI; -y[3] = 1.7976931348623157E308; //largest finite number -y[4] = +Infinity; -ynum = 5; - -for (i = 0; i < ynum; i++) -{ - if (Math.pow(x,y[i]) !== +0) - { - $ERROR("#1: Math.pow(" + x + ", " + y[i] + ") !== +0"); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A21.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A21.js deleted file mode 100644 index 1d2e0d1ec..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A21.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.13_A21; - * @section: 15.8.2.13; - * @assertion: If x is -0 and y<0 and y is an odd integer, Math.pow(x,y) is -Infinity; - * @description: Checking if Math.pow(x,y) equals to -Infinity, where x is -0 and y is an odd integer; - */ - -// CHECK#1 - -x = -0; -y = new Array(); -y[2] = -1; -y[1] = -111; -y[0] = -111111; -ynum = 3; - -for (i = 0; i < ynum; i++) -{ - if (Math.pow(x,y[i]) !== -Infinity) - { - $ERROR("#1: Math.pow(" + x + ", " + y[i] + ") !== -Infinity"); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A22.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A22.js deleted file mode 100644 index 7f4e05ad1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A22.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.13_A22; - * @section: 15.8.2.13; - * @assertion: If x is -0 and y<0 and y is NOT an odd integer, Math.pow(x,y) is +Infinity; - * @description: Checking if Math.pow(x,y) equals to +Infinity, where x is -0 and y<0 and y is NOT an odd integer; - */ - -// CHECK#1 - -x = -0; -y = new Array(); -y[4] = -0.000000000000001; -y[3] = -2; -y[2] = -Math.PI; -y[1] = -1.7976931348623157E308; //largest (by module) finite number -y[0] = -Infinity; -ynum = 5; - -for (i = 0; i < ynum; i++) -{ - if (Math.pow(x,y[i]) !== +Infinity) - { - $ERROR("#1: Math.pow(" + x + ", " + y[i] + ") !== +Infinity"); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A23.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A23.js deleted file mode 100644 index 62114395b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A23.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.13_A23; - * @section: 15.8.2.13; - * @assertion: If x<0 and x is finite and y is finite and y is not an integer, Math.pow(x,y) is NaN; - * @description: Checking if Math.pow(x,y) is NaN, where x<0 and x is finite and y is finite and y is not an integer; - */ - -// CHECK#1 - -y = NaN; -x = new Array(); -x[0] = -1.7976931348623157E308; //largest (by module) finite number -x[1] = -Math.PI; -x[2] = -1; -x[3] = -0.000000000000001; -xnum = 4; - -y[0] = -Math.PI; -y[1] = -Math.E; -y[2] = -1.000000000000001; -y[3] = -0.000000000000001; -y[4] = 0.000000000000001; -y[5] = 1.000000000000001; -y[6] = Math.E; -y[7] = Math.PI; -ynum = 8; - -for (i = 0; i < xnum; i++) - for (j = 0; j < ynum; j++) - if (!isNaN(Math.pow(x[i],y[j]))) - $ERROR("#1: isNaN(Math.pow(" + x[i] + ", " + y[j] + ")) === false"); diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A24.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A24.js deleted file mode 100644 index 988f30368..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A24.js +++ /dev/null @@ -1,227 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.13_A24; - * @section: 15.8.2.13; - * @assertion: Math.pow, recommended that implementations use the approximation algorithms for IEEE 754 arithmetic contained in fdlibm; - * @description: Checking if Math.pow(argument1, argument2) is approximately equals to its mathematical value on the set of 64 argument1 values and 64 argument2 values; all the sample values is calculated with LibC; - */ - -$INCLUDE("math_precision.js"); -$INCLUDE("math_isequal.js"); - -// CHECK#1 -vnum = 64; -var x1 = new Array(); -x1[0] = 0.00000000000000000000; -x1[1] = 0.25396825396825395000; -x1[2] = 0.50793650793650791000; -x1[3] = 0.76190476190476186000; -x1[4] = 1.01587301587301580000; -x1[5] = 1.26984126984126980000; -x1[6] = 1.52380952380952370000; -x1[7] = 1.77777777777777770000; -x1[8] = 2.03174603174603160000; -x1[9] = 2.28571428571428560000; -x1[10] = 2.53968253968253950000; -x1[11] = 2.79365079365079350000; -x1[12] = 3.04761904761904740000; -x1[13] = 3.30158730158730140000; -x1[14] = 3.55555555555555540000; -x1[15] = 3.80952380952380930000; -x1[16] = 4.06349206349206330000; -x1[17] = 4.31746031746031720000; -x1[18] = 4.57142857142857120000; -x1[19] = 4.82539682539682510000; -x1[20] = 5.07936507936507910000; -x1[21] = 5.33333333333333300000; -x1[22] = 5.58730158730158700000; -x1[23] = 5.84126984126984090000; -x1[24] = 6.09523809523809490000; -x1[25] = 6.34920634920634890000; -x1[26] = 6.60317460317460280000; -x1[27] = 6.85714285714285680000; -x1[28] = 7.11111111111111070000; -x1[29] = 7.36507936507936470000; -x1[30] = 7.61904761904761860000; -x1[31] = 7.87301587301587260000; -x1[32] = 8.12698412698412650000; -x1[33] = 8.38095238095238140000; -x1[34] = 8.63492063492063440000; -x1[35] = 8.88888888888888930000; -x1[36] = 9.14285714285714230000; -x1[37] = 9.39682539682539720000; -x1[38] = 9.65079365079365030000; -x1[39] = 9.90476190476190510000; -x1[40] = 10.15873015873015800000; -x1[41] = 10.41269841269841300000; -x1[42] = 10.66666666666666600000; -x1[43] = 10.92063492063492100000; -x1[44] = 11.17460317460317400000; -x1[45] = 11.42857142857142900000; -x1[46] = 11.68253968253968200000; -x1[47] = 11.93650793650793700000; -x1[48] = 12.19047619047619000000; -x1[49] = 12.44444444444444500000; -x1[50] = 12.69841269841269800000; -x1[51] = 12.95238095238095300000; -x1[52] = 13.20634920634920600000; -x1[53] = 13.46031746031746000000; -x1[54] = 13.71428571428571400000; -x1[55] = 13.96825396825396800000; -x1[56] = 14.22222222222222100000; -x1[57] = 14.47619047619047600000; -x1[58] = 14.73015873015872900000; -x1[59] = 14.98412698412698400000; -x1[60] = 15.23809523809523700000; -x1[61] = 15.49206349206349200000; -x1[62] = 15.74603174603174500000; -x1[63] = 16.00000000000000000000; - - - -var x2 = new Array(); -x2[0] = -16.00000000000000000000; -x2[1] = -15.49206349206349200000; -x2[2] = -14.98412698412698400000; -x2[3] = -14.47619047619047600000; -x2[4] = -13.96825396825396800000; -x2[5] = -13.46031746031746000000; -x2[6] = -12.95238095238095300000; -x2[7] = -12.44444444444444500000; -x2[8] = -11.93650793650793700000; -x2[9] = -11.42857142857142900000; -x2[10] = -10.92063492063492100000; -x2[11] = -10.41269841269841300000; -x2[12] = -9.90476190476190510000; -x2[13] = -9.39682539682539720000; -x2[14] = -8.88888888888888930000; -x2[15] = -8.38095238095238140000; -x2[16] = -7.87301587301587350000; -x2[17] = -7.36507936507936560000; -x2[18] = -6.85714285714285770000; -x2[19] = -6.34920634920634970000; -x2[20] = -5.84126984126984180000; -x2[21] = -5.33333333333333390000; -x2[22] = -4.82539682539682600000; -x2[23] = -4.31746031746031810000; -x2[24] = -3.80952380952381020000; -x2[25] = -3.30158730158730230000; -x2[26] = -2.79365079365079440000; -x2[27] = -2.28571428571428650000; -x2[28] = -1.77777777777777860000; -x2[29] = -1.26984126984127070000; -x2[30] = -0.76190476190476275000; -x2[31] = -0.25396825396825484000; -x2[32] = 0.25396825396825307000; -x2[33] = 0.76190476190476275000; -x2[34] = 1.26984126984126890000; -x2[35] = 1.77777777777777860000; -x2[36] = 2.28571428571428470000; -x2[37] = 2.79365079365079440000; -x2[38] = 3.30158730158730050000; -x2[39] = 3.80952380952381020000; -x2[40] = 4.31746031746031630000; -x2[41] = 4.82539682539682600000; -x2[42] = 5.33333333333333210000; -x2[43] = 5.84126984126984180000; -x2[44] = 6.34920634920634800000; -x2[45] = 6.85714285714285770000; -x2[46] = 7.36507936507936380000; -x2[47] = 7.87301587301587350000; -x2[48] = 8.38095238095237960000; -x2[49] = 8.88888888888888930000; -x2[50] = 9.39682539682539540000; -x2[51] = 9.90476190476190510000; -x2[52] = 10.41269841269841100000; -x2[53] = 10.92063492063492100000; -x2[54] = 11.42857142857142700000; -x2[55] = 11.93650793650793700000; -x2[56] = 12.44444444444444300000; -x2[57] = 12.95238095238095300000; -x2[58] = 13.46031746031745900000; -x2[59] = 13.96825396825396800000; -x2[60] = 14.47619047619047400000; -x2[61] = 14.98412698412698400000; -x2[62] = 15.49206349206349000000; -x2[63] = 16.00000000000000000000; - - -var y = new Array(); -y[0] = +Infinity; -y[1] = 1664158979.11096290000000000000; -y[2] = 25596.98862206424700000000; -y[3] = 51.24224360332205900000; -y[4] = 0.80253721621001273000; -y[5] = 0.04013281604184240600; -y[6] = 0.00427181167466968250; -y[7] = 0.00077698684629307839; -y[8] = 0.00021140449751288852; -y[9] = 0.00007886641216275820; -y[10] = 0.00003797970495625904; -y[11] = 0.00002260186576944384; -y[12] = 0.00001608735704675994; -y[13] = 0.00001335526639440840; -y[14] = 0.00001267782407825002; -y[15] = 0.00001354410739307298; -y[16] = 0.00001607404700077214; -y[17] = 0.00002096489798949858; -y[18] = 0.00002978033411316872; -y[19] = 0.00004572015769326707; -y[20] = 0.00007536620884896827; -y[21] = 0.00013263967558882687; -y[22] = 0.00024800091950917796; -y[23] = 0.00049049578772052680; -y[24] = 0.00102225521238885490; -y[25] = 0.00223744147356661880; -y[26] = 0.00512739755878587920; -y[27] = 0.01226918030754863000; -y[28] = 0.03058049475427409400; -y[29] = 0.07921771472569966200; -y[30] = 0.21285098601167457000; -y[31] = 0.59211846233860321000; -y[32] = 1.70252376919407730000; -y[33] = 5.05197994186350920000; -y[34] = 15.44896866758827700000; -y[35] = 48.62279949816147700000; -y[36] = 157.31086033139039000000; -y[37] = 522.60021277476767000000; -y[38] = 1780.82316713426990000000; -y[39] = 6218.58509846337710000000; -y[40] = 22232.54916898025500000000; -y[41] = 81310.50695814844200000000; -y[42] = 303962.39599994919000000000; -y[43] = 1160609.39151835810000000000; -y[44] = 4523160.16396183520000000000; -y[45] = 17980506.53105686600000000000; -y[46] = 72861260.63140085300000000000; -y[47] = 300795965.18372804000000000000; -y[48] = 1264408843.88636260000000000000; -y[49] = 5408983705.82595920000000000000; -y[50] = 23536438485.32324600000000000000; -y[51] = 104125724201.77888000000000000000; -y[52] = 468137079409.17462000000000000000; -y[53] = 2137965865913.91260000000000000000; -y[54] = 9914368643808.25200000000000000000; -y[55] = 46665726995317.89800000000000000000; -y[56] = 222863786409039.87000000000000000000; -y[57] = 1079534443702065.00000000000000000000; -y[58] = 5302037850329952.00000000000000000000; -y[59] = 26394813313751084.00000000000000000000; -y[60] = 133146543235024720.00000000000000000000; -y[61] = 680375082351885950.00000000000000000000; -y[62] = 3520878542447823900.00000000000000000000; -y[63] = 18446744073709552000.00000000000000000000; - - - -var val; -for (i = 0; i < vnum; i++) -{ - val = Math.pow(x1[i], x2[i]); - if (!isEqual(val, y[i])) - { - $ERROR("\nx1 = " + x1[i] + "\nx2 = " + x2[i] + "\nlibc.pow(x1,x2) = " + y[i] + "\nMath.pow(x1,x2) = " + Math.pow(x1[i], x2[i]) + "\nMath.abs(libc.pow(x1,x2) - Math.pow(x1,x2)) > " + prec + "\n\n"); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A3.js deleted file mode 100644 index 51281ee6b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A3.js +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.13_A3; - * @section: 15.8.2.13; - * @assertion: If y is -0, Math.pow(x,y) is 1, even if x is NaN; - * @description: Checking if Math.pow(x,y) equals to 1, where x is number or NaN and y is -0; - */ - -// CHECK#1 - -y = +0; -x = new Array(); -x[0] = -Infinity; -x[1] = -1.7976931348623157E308; //largest (by module) finite number -x[2] = -0.000000000000001; -x[3] = -0; -x[4] = +0 -x[5] = 0.000000000000001; -x[6] = 1.7976931348623157E308; //largest finite number -x[7] = +Infinity; -x[8] = NaN; -xnum = 9; - -for (i = 0; i < xnum; i++) -{ - if (Math.pow(x[i],y) !== 1) - { - $ERROR("#1: Math.pow(" + x[i] + ", -0) !== 1"); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A4.js deleted file mode 100644 index 84e9df16d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A4.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.13_A4; - * @section: 15.8.2.13; - * @assertion: If x is NaN and y is nonzero, Math.pow(x,y) is NaN; - * @description: Checking if Math.pow(x,y) is NaN, where x is NaN and y is nonzero; - */ - -// CHECK#1 - -x = NaN; -y = new Array(); -y[0] = -Infinity; -y[1] = -1.7976931348623157E308; //largest (by module) finite number -y[2] = -0.000000000000001; -y[3] = 0.000000000000001; -y[4] = 1.7976931348623157E308; //largest finite number -y[5] = +Infinity; -y[6] = NaN; -ynum = 7; - -for (i = 0; i < ynum; i++) -{ - if (!isNaN(Math.pow(x,y[i]))) - { - $ERROR("#1: isNaN(Math.pow(" + x + ", " + y[i] + ")) === false"); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A5.js deleted file mode 100644 index dba2f7511..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A5.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.13_A5; - * @section: 15.8.2.13; - * @assertion: If abs(x)>1 and y is +Infinity, Math.pow(x,y) is +Infinity; - * @description: Checking if Math.pow(x,y) equals to +Infinity, where abs(x)>1 and y is +Infinity; - */ - -// CHECK#1 - -y = +Infinity; -x = new Array(); -x[0] = -Infinity; -x[1] = -1.7976931348623157E308; //largest (by module) finite number -x[2] = -1.000000000000001; -x[3] = 1.000000000000001; -x[4] = 1.7976931348623157E308; //largest finite number -x[5] = +Infinity; -xnum = 6; - -for (i = 0; i < xnum; i++) -{ - if (Math.pow(x[i],y) !== +Infinity) - { - $ERROR("#1: Math.pow(" + x[i] + ", " + y + ") !== +Infinity"); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A6.js deleted file mode 100644 index bf96c6c7c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A6.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.13_A6; - * @section: 15.8.2.13; - * @assertion: If abs(x)>1 and y is -Infinity, Math.pow(x,y) is +0; - * @description: Checking if Math.pow(x,y) equals to +0, where abs(x)>1 and y is -Infinity; - */ - -// CHECK#1 - -y = -Infinity; -x = new Array(); -x[0] = -Infinity; -x[1] = -1.7976931348623157E308; //largest (by module) finite number -x[2] = -1.000000000000001; -x[3] = 1.000000000000001; -x[4] = 1.7976931348623157E308; //largest finite number -x[5] = +Infinity; -xnum = 6; - -for (i = 0; i < xnum; i++) -{ - if (Math.pow(x[i],y) !== +0) - { - $ERROR("#1: Math.pow(" + x[i] + ", " + y + ") !== +0"); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A7.js deleted file mode 100644 index 1faf6790d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A7.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.13_A7; - * @section: 15.8.2.13; - * @assertion: If abs(x)==1 and y is +Infinity, Math.pow(x,y) is NaN; - * @description: Checking if Math.pow(x,y) is NaN, where abs(x)==1 and y is +Infinity; - */ - -// CHECK#1 - -y = +Infinity; -x = new Array(); -x[0] = -1; -x[1] = 1 -xnum = 2; - -for (i = 0; i < xnum; i++) -{ - if (!isNaN(Math.pow(x[i],y))) - { - $FAIL("#1: isNaN(Math.pow(" + x[i] + ", " + y + ")) === false"); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A8.js deleted file mode 100644 index daef4b9f3..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A8.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.13_A8; - * @section: 15.8.2.13; - * @assertion: If abs(x)==1 and y is -Infinity, Math.pow(x,y) is NaN; - * @description: Checking if Math.pow(x,y) is NaN, where abs(x)==1 and y is -Infinity; - */ - -// CHECK#1 - -y = -Infinity; -x = new Array(); -x[0] = -1; -x[1] = 1 -xnum = 2; - -for (i = 0; i < xnum; i++) -{ - if (!isNaN(Math.pow(x[i],y))) - { - $FAIL("#1: isNaN(Math.pow(" + x[i] + ", " + y + ")) === false"); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A9.js deleted file mode 100644 index 23c3d56d9..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.13_pow/S15.8.2.13_A9.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.13_A9; - * @section: 15.8.2.13; - * @assertion: If abs(x)<1 and y is +Infinity, Math.pow(x,y) is +0; - * @description: Checking if Math.pow(x,y) equals to +0, where abs(x)<1 and y is +Infinity; - */ - -// CHECK#1 - -y = +Infinity; -x = new Array(); -x[0] = 0.999999999999999; -x[1] = 0.5; -x[2] = +0; -x[3] = -0; -x[4] = -0.5; -x[5] = -0.999999999999999; -xnum = 6; - -for (i = 0; i < xnum; i++) -{ - if (Math.pow(x[i],y) !== +0) - { - $ERROR("#1: Math.pow(" + x[i] + ", " + y + ") !== +0"); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.14_random/S15.8.2.14_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.14_random/S15.8.2.14_A1.js deleted file mode 100644 index d9554ef87..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.14_random/S15.8.2.14_A1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.14_A1; - * @section: 15.8.2.14; - * @assertion: Math.random() returns a number value with positive sign, greater than or equal to 0 but less than 1; - * @description: Checking if Math.random() is a number between 0 and 1, calling Math.random() 100 times; - */ - -// CHECK#1 -for (i = 0; i < 100; i++) -{ - val = Math.random(); - if (val < 0 || val >= 1) - { - $ERROR("#1: Math.random() = " + val); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.15_round/S15.8.2.15_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.15_round/S15.8.2.15_A1.js deleted file mode 100644 index cc0e12f9c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.15_round/S15.8.2.15_A1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.15_A1; - * @section: 15.8.2.15; - * @assertion: If x is NaN, Math.round(x) is NaN; - * @description: Checking if Math.round(x) is NaN, where x is NaN; - */ - -// CHECK#1 -var x = NaN; -if (!isNaN(Math.round(x))) -{ - $ERROR("#1: 'var x=NaN; isNaN(Math.round(x)) === false'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.15_round/S15.8.2.15_A2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.15_round/S15.8.2.15_A2.js deleted file mode 100644 index a1488cea5..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.15_round/S15.8.2.15_A2.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.15_A2; - * @section: 15.8.2.15; - * @assertion: If x is +0, Math.round(x) is +0; - * @description: Checking if Math.round(x) equals to +0, where x is +0; - */ - -// CHECK#1 -var x = +0; -if (Math.round(x) !== +0) -{ - $ERROR("#1: 'var x=+0; Math.round(x) !== +0'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.15_round/S15.8.2.15_A3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.15_round/S15.8.2.15_A3.js deleted file mode 100644 index c06aae518..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.15_round/S15.8.2.15_A3.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.15_A3; - * @section: 15.8.2.15; - * @assertion: If x is -0, Math.round(x) is -0; - * @description: Checking if Math.round(x) equals to -0, where x is -0; - */ - -// CHECK#1 -var x = -0; -if (Math.round(x) !== -0) -{ - $ERROR("#1: 'var x=-0; Math.round(x) !== -0'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.15_round/S15.8.2.15_A4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.15_round/S15.8.2.15_A4.js deleted file mode 100644 index 6faa46440..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.15_round/S15.8.2.15_A4.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.15_A4; - * @section: 15.8.2.15; - * @assertion: If x is +Infinity, Math.round(x) is +Infinity; - * @description: Checking if Math.round(x) is +Infinity, where x is +Infinity; - */ - -// CHECK#1 -var x = +Infinity; -if (Math.round(x) !== +Infinity) -{ - $ERROR("#1: 'var x=+Infinity; Math.round(x) !== +Infinity'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.15_round/S15.8.2.15_A5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.15_round/S15.8.2.15_A5.js deleted file mode 100644 index c7649ef4f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.15_round/S15.8.2.15_A5.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.15_A5; - * @section: 15.8.2.15; - * @assertion: If x is -Infinity, Math.round(x) is -Infinity; - * @description: Checking if Math.round(x) is -Infinity, where x is -Infinity; - */ - -// CHECK#1 -var x = -Infinity; -if (Math.round(x) !== -Infinity) -{ - $ERROR("#1: 'var x=-Infinity; Math.round(x) !== -Infinity'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.15_round/S15.8.2.15_A6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.15_round/S15.8.2.15_A6.js deleted file mode 100644 index 5d65cd420..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.15_round/S15.8.2.15_A6.js +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.15_A6; - * @section: 15.8.2.15; - * @assertion: If x is equal to 0 or greater than 0, or if x is less than -0.5, Math.round(x) is equal to Math.floor(x+0.5); - * @description: Checking if Math.round(x) is equal to Math.floor(x+0.5), where x equals to 0, greater than 0, or is less than -0.5; this check is performed on 2000 argument x values; - */ - -// CHECK#1 -for (i = 0; i <= 1000; i++) -{ - x = i/10.0; - if (Math.round(x) !== Math.floor(x + 0.5)) - { - $ERROR("#1: 'x = " + x + "; Math.round(x) !== Math.floor(x + 0.5)'") - } -} - -for (i = -5; i >= -1000; i--) -{ - if (i === -5) - { - x = -0.500000000000001; - } else - { - x = i/10.0; - } - - if (Math.round(x) !== Math.floor(x + 0.5)) - { - $ERROR("#2: 'x = " + x + "; Math.round(x) !== Math.floor(x + 0.5)'") - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.15_round/S15.8.2.15_A7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.15_round/S15.8.2.15_A7.js deleted file mode 100644 index d29a0d1c4..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.15_round/S15.8.2.15_A7.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.15_A7; - * @section: 15.8.2.15; - * @assertion: If x is less than or equal to -0 and x is greater than or equal to -0.5, Math.round(x) is equal to -0; - * @description: Checking if Math.round(x) is equal -0, where x is equal to 0, equal to -0.5, or less than -0 while greater than -0.5; - */ - -// CHECK#1 -if (Math.round(-0) !== -0) -{ - $ERROR("#1: 'Math.round(-0) !== -0'"); -} - -// CHECK#2 -if (Math.round(-0.5) !== -0) -{ - $ERROR("#2: 'Math.round(-0.5) !== -0'"); -} - -// CHECK#3 -if (Math.round(-0.25) !== -0) -{ - $ERROR("#3: 'Math.round(-0.25) !== -0'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.16_sin/S15.8.2.16_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.16_sin/S15.8.2.16_A1.js deleted file mode 100644 index 896202514..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.16_sin/S15.8.2.16_A1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.16_A1; - * @section: 15.8.2.16; - * @assertion: If x is NaN, Math.sin(x) is NaN; - * @description: Checking if Math.sin(NaN) is NaN; - */ - -// CHECK#1 -var x = NaN; -if (!isNaN(Math.sin(x))) -{ - $ERROR("#1: 'var x=NaN; isNaN(Math.sin(x)) === false'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.16_sin/S15.8.2.16_A2.JS b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.16_sin/S15.8.2.16_A2.JS deleted file mode 100644 index 4d463c27d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.16_sin/S15.8.2.16_A2.JS +++ /dev/null @@ -1,13 +0,0 @@ -/** - * @name: S15.8.2.16_A2; - * @section: 15.8.2.16; - * @assertion: If x is +0, Math.sin(x) is +0; - * @description: Checking if Math.sin(+0) equals to +0; - */ - -// CHECK#1 -var x = +0; -if (Math.sin(x) !== +0) -{ - $ERROR("#1: 'var x = +0; Math.sin(x) !== +0'"); -} \ No newline at end of file diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.16_sin/S15.8.2.16_A3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.16_sin/S15.8.2.16_A3.js deleted file mode 100644 index b1b5a629c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.16_sin/S15.8.2.16_A3.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.16_A3; - * @section: 15.8.2.16; - * @assertion: If x is -0, Math.sin(x) is -0; - * @description: Checking if Math.sin(-0) equals to -0; - */ - -// CHECK#1 -var x = -0; -if (Math.sin(x) !== -0) -{ - $ERROR("#1: 'var x = -0; Math.sin(x) !== -0'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.16_sin/S15.8.2.16_A4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.16_sin/S15.8.2.16_A4.js deleted file mode 100644 index 3281634b1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.16_sin/S15.8.2.16_A4.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.16_A4; - * @section: 15.8.2.16; - * @assertion: If x is +Infinity, Math.sin(x) is NaN; - * @description: Checking if Math.sin(+Infinity) is NaN; - */ - -// CHECK#1 -var x = +Infinity; -if (!isNaN(Math.sin(x))) -{ - $ERROR("#1: 'var x = +Infinity; isNaN(Math.sin(x)) === false'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.16_sin/S15.8.2.16_A5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.16_sin/S15.8.2.16_A5.js deleted file mode 100644 index 23c228029..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.16_sin/S15.8.2.16_A5.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.16_A5; - * @section: 15.8.2.16; - * @assertion: If x is -Infinity, Math.sin(x) is NaN; - * @description: Checking if Math.sin(-Infinity) is NaN; - */ - -// CHECK#1 -var x = -Infinity; -if (!isNaN(Math.sin(x))) -{ - $ERROR("#1: 'var x = -Infinity; isNaN(Math.sin(x)) === false'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.16_sin/S15.8.2.16_A6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.16_sin/S15.8.2.16_A6.js deleted file mode 100644 index e52fee37d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.16_sin/S15.8.2.16_A6.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.16_A6; - * @section: 15.8.2.16; - * @assertion: Sine is a periodic function with period 2*PI; - * @description: Checking if Math.sin(x) equals to Math.sin(x+n*2*Math.PI) with precision 0.000000000003, where n is an integer from 1 to 100 and x is one of 10 float point values from 0 to 2*Math.PI; - */ - -// CHECK#1 - prec = 0.000000000003; -//prec = 0.000000000000001; -period = 2*Math.PI; -pernum = 100; - -a = -pernum * period; -b = pernum * period; -snum = 9; -step = period/snum + 0.0; -x = new Array(); -for (i = 0; i < snum; i++) -{ - x[i] = a + i*step; -} -x[9] = a + period; - -var curval; -var curx; -var j; -for (i = 0; i < snum; i++) -{ - curval = Math.sin(x[i]); - curx = x[i] + period; - j = 0; - while (curx <= b) - { - curx += period; - j++; - if (Math.abs(Math.sin(curx) - curval) >= prec) - { - $FAIL("#1: sin is found out to not be periodic:\n Math.abs(Math.sin(" + x[i] + ") - Math.sin(" + x[i] + " + 2*Math.PI*" + j + ")) >= " + prec + "\n Math.sin(" + x[i] + ") === " + curval + "\n Math.sin(" + curx + ") === " + Math.sin(curx)); - } - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.16_sin/S15.8.2.16_A7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.16_sin/S15.8.2.16_A7.js deleted file mode 100644 index 56676ba83..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.16_sin/S15.8.2.16_A7.js +++ /dev/null @@ -1,158 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.16_A7; - * @section: 15.8.2.16; - * @assertion: Math.sin it is recommended that implementations use the approximation algorithms for IEEE 754 arithmetic contained in fdlibm; - * @description: Checking if Math.sin is approximately equals to its mathematical values on the set of 64 argument values; all the sample values is calculated with LibC; - */ - -$INCLUDE("math_precision.js"); -$INCLUDE("math_isequal.js"); - -// CHECK#1 -vnum = 64; -var x = new Array(); -x[0] = 0.00000000000000000000; -x[1] = 0.09973310011396169200; -x[2] = 0.19946620022792338000; -x[3] = 0.29919930034188508000; -x[4] = 0.39893240045584677000; -x[5] = 0.49866550056980841000; -x[6] = 0.59839860068377015000; -x[7] = 0.69813170079773179000; -x[8] = 0.79786480091169354000; -x[9] = 0.89759790102565518000; -x[10] = 0.99733100113961681000; -x[11] = 1.09706410125357840000; -x[12] = 1.19679720136754030000; -x[13] = 1.29653030148150190000; -x[14] = 1.39626340159546360000; -x[15] = 1.49599650170942520000; -x[16] = 1.59572960182338710000; -x[17] = 1.69546270193734870000; -x[18] = 1.79519580205131040000; -x[19] = 1.89492890216527200000; -x[20] = 1.99466200227923360000; -x[21] = 2.09439510239319570000; -x[22] = 2.19412820250715690000; -x[23] = 2.29386130262111850000; -x[24] = 2.39359440273508060000; -x[25] = 2.49332750284904230000; -x[26] = 2.59306060296300390000; -x[27] = 2.69279370307696550000; -x[28] = 2.79252680319092720000; -x[29] = 2.89225990330488880000; -x[30] = 2.99199300341885040000; -x[31] = 3.09172610353281210000; -x[32] = 3.19145920364677420000; -x[33] = 3.29119230376073580000; -x[34] = 3.39092540387469740000; -x[35] = 3.49065850398865910000; -x[36] = 3.59039160410262070000; -x[37] = 3.69012470421658230000; -x[38] = 3.78985780433054400000; -x[39] = 3.88959090444450560000; -x[40] = 3.98932400455846730000; -x[41] = 4.08905710467242840000; -x[42] = 4.18879020478639140000; -x[43] = 4.28852330490035260000; -x[44] = 4.38825640501431380000; -x[45] = 4.48798950512827590000; -x[46] = 4.58772260524223710000; -x[47] = 4.68745570535619920000; -x[48] = 4.78718880547016120000; -x[49] = 4.88692190558412240000; -x[50] = 4.98665500569808450000; -x[51] = 5.08638810581204570000; -x[52] = 5.18612120592600780000; -x[53] = 5.28585430603996990000; -x[54] = 5.38558740615393110000; -x[55] = 5.48532050626789310000; -x[56] = 5.58505360638185430000; -x[57] = 5.68478670649581550000; -x[58] = 5.78451980660977760000; -x[59] = 5.88425290672373970000; -x[60] = 5.98398600683770090000; -x[61] = 6.08371910695166300000; -x[62] = 6.18345220706562420000; -x[63] = 6.28318530717958620000; - - -var y = new Array(); -y[0] = 0.00000000000000000000; -y[1] = 0.09956784659581666100; -y[2] = 0.19814614319939758000; -y[3] = 0.29475517441090421000; -y[4] = 0.38843479627469474000; -y[5] = 0.47825397862131819000; -y[6] = 0.56332005806362206000; -y[7] = 0.64278760968653925000; -y[8] = 0.71586684925971844000; -y[9] = 0.78183148246802980000; -y[10] = 0.84002592315077140000; -y[11] = 0.88987180881146855000; -y[12] = 0.93087374864420425000; -y[13] = 0.96262424695001203000; -y[14] = 0.98480775301220802000; -y[15] = 0.99720379718118013000; -y[16] = 0.99968918200081625000; -y[17] = 0.99223920660017206000; -y[18] = 0.97492791218182362000; -y[19] = 0.94792734616713181000; -y[20] = 0.91150585231167325000; -y[21] = 0.86602540378443849000; -y[22] = 0.81193800571585661000; -y[23] = 0.74978120296773443000; -y[24] = 0.68017273777091936000; -y[25] = 0.60380441032547738000; -y[26] = 0.52143520337949811000; -y[27] = 0.43388373911755823000; -y[28] = 0.34202014332566888000; -y[29] = 0.24675739769029384000; -y[30] = 0.14904226617617472000; -y[31] = 0.04984588566069748200; -y[32] = -0.04984588566069723300; -y[33] = -0.14904226617617447000; -y[34] = -0.24675739769029362000; -y[35] = -0.34202014332566866000; -y[36] = -0.43388373911755801000; -y[37] = -0.52143520337949789000; -y[38] = -0.60380441032547716000; -y[39] = -0.68017273777091913000; -y[40] = -0.74978120296773398000; -y[41] = -0.81193800571585595000; -y[42] = -0.86602540378443882000; -y[43] = -0.91150585231167314000; -y[44] = -0.94792734616713159000; -y[45] = -0.97492791218182362000; -y[46] = -0.99223920660017195000; -y[47] = -0.99968918200081625000; -y[48] = -0.99720379718118013000; -y[49] = -0.98480775301220813000; -y[50] = -0.96262424695001203000; -y[51] = -0.93087374864420447000; -y[52] = -0.88987180881146866000; -y[53] = -0.84002592315077129000; -y[54] = -0.78183148246802991000; -y[55] = -0.71586684925971833000; -y[56] = -0.64278760968653958000; -y[57] = -0.56332005806362273000; -y[58] = -0.47825397862131858000; -y[59] = -0.38843479627469474000; -y[60] = -0.29475517441090471000; -y[61] = -0.19814614319939772000; -y[62] = -0.09956784659581728600; -y[63] = -0.0000000000000002449293598294706400; - - -var val; -for (i = 0; i < vnum; i++) -{ - val = Math.sin(x[i]); - if (!isEqual(val, y[i])) - { - $ERROR("\nx = " + x[i] + "\nlibc.sin(x) = " + y[i] + "\nMath.sin(x) = " + Math.sin(x[i]) + "\nMath.abs(libc.sin(x) - Math.sin(x)) > " + prec + "\n\n"); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.17_sqrt/S15.8.2.17_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.17_sqrt/S15.8.2.17_A1.js deleted file mode 100644 index a79dadc4f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.17_sqrt/S15.8.2.17_A1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.17_A1; - * @section: 15.8.2.17; - * @assertion: If x is NaN, Math.sqrt(x) is NaN; - * @description: Checking if Math.sqrt(NaN) is NaN; - */ - -// CHECK#1 -var x = NaN; -if (!isNaN(Math.sqrt(x))) -{ - $ERROR("#1: 'var x=NaN; isNaN(Math.sqrt(x)) === false'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.17_sqrt/S15.8.2.17_A2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.17_sqrt/S15.8.2.17_A2.js deleted file mode 100644 index fb777026f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.17_sqrt/S15.8.2.17_A2.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.17_A2; - * @section: 15.8.2.17; - * @assertion: If x less than 0, Math.sqrt(x) is NaN; - * @description: Checking if Math.sqrt(x) is NaN, where x is less than 0; - */ - -// CHECK#1 -var x = -0.000000000000001; -if (!isNaN(Math.sqrt(x))) -{ - $ERROR("#1: 'var x=-0.000000000000001; isNaN(Math.sqrt(x)) === false'"); -} - -// CHECK#2 -var x = -1; -if (!isNaN(Math.sqrt(x))) -{ - $ERROR("#2: 'var x=-1; isNaN(Math.sqrt(x)) === false'"); -} - -// CHECK#3 -var x = -Infinity; -if (!isNaN(Math.sqrt(x))) -{ - $ERROR("#3: 'var x=-Infinity; isNaN(Math.sqrt(x)) === false'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.17_sqrt/S15.8.2.17_A3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.17_sqrt/S15.8.2.17_A3.js deleted file mode 100644 index d8738a0ba..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.17_sqrt/S15.8.2.17_A3.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.17_A3; - * @section: 15.8.2.17; - * @assertion: If x is equal to +0, Math.sqrt(x) is +0; - * @description: Checking if Math.sqrt(+0) equals to +0; - */ - -// CHECK#1 -var x = +0; -if (Math.sqrt(x) !== +0) -{ - $ERROR("#1: 'var x=+0; Math.sqrt(x) !== +0'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.17_sqrt/S15.8.2.17_A4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.17_sqrt/S15.8.2.17_A4.js deleted file mode 100644 index 00bc22d72..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.17_sqrt/S15.8.2.17_A4.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.17_A4; - * @section: 15.8.2.17; - * @assertion: If x is equal to -0, Math.sqrt(x) is -0; - * @description: Checking if Math.sqrt(-0) equals to -0; - */ - -// CHECK#1 -var x = -0; -if (Math.sqrt(x) !== -0) -{ - $ERROR("#1: 'var x=-0; Math.sqrt(x) !== -0'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.17_sqrt/S15.8.2.17_A5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.17_sqrt/S15.8.2.17_A5.js deleted file mode 100644 index 203a8ae84..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.17_sqrt/S15.8.2.17_A5.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.17_A5; - * @section: 15.8.2.17; - * @assertion: If x is equal to +Infinity, Math.sqrt(x) is +Infinity; - * @description: Checking if Math.sqrt(+Infinity) is +Infinity; - */ - -// CHECK#1 -var x = +Infinity; -if (Math.sqrt(x) !== +Infinity) -{ - $ERROR("#1: 'var x=+Infinity; Math.sqrt(x) !== +Infinity'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.17_sqrt/S15.8.2.17_A6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.17_sqrt/S15.8.2.17_A6.js deleted file mode 100644 index 0ceab6cc0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.17_sqrt/S15.8.2.17_A6.js +++ /dev/null @@ -1,159 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.17_A6; - * @section: 15.8.2.17; - * @assertion: Math.sqrt, recommended that implementations use the approximation algorithms for IEEE 754 arithmetic contained in fdlibm; - * @description: Checking if Math.sqrt is approximately equals to its mathematical values on the set of 64 argument values; all the sample values is calculated with LibC; - */ - -$INCLUDE("math_precision.js"); -$INCLUDE("math_isequal.js"); - -// CHECK#1 -vnum = 64; -var x = new Array(); -x[0] = 0.00000000000000000000; -x[1] = 0.25396825396825395000; -x[2] = 0.50793650793650791000; -x[3] = 0.76190476190476186000; -x[4] = 1.01587301587301580000; -x[5] = 1.26984126984126980000; -x[6] = 1.52380952380952370000; -x[7] = 1.77777777777777770000; -x[8] = 2.03174603174603160000; -x[9] = 2.28571428571428560000; -x[10] = 2.53968253968253950000; -x[11] = 2.79365079365079350000; -x[12] = 3.04761904761904740000; -x[13] = 3.30158730158730140000; -x[14] = 3.55555555555555540000; -x[15] = 3.80952380952380930000; -x[16] = 4.06349206349206330000; -x[17] = 4.31746031746031720000; -x[18] = 4.57142857142857120000; -x[19] = 4.82539682539682510000; -x[20] = 5.07936507936507910000; -x[21] = 5.33333333333333300000; -x[22] = 5.58730158730158700000; -x[23] = 5.84126984126984090000; -x[24] = 6.09523809523809490000; -x[25] = 6.34920634920634890000; -x[26] = 6.60317460317460280000; -x[27] = 6.85714285714285680000; -x[28] = 7.11111111111111070000; -x[29] = 7.36507936507936470000; -x[30] = 7.61904761904761860000; -x[31] = 7.87301587301587260000; -x[32] = 8.12698412698412650000; -x[33] = 8.38095238095238140000; -x[34] = 8.63492063492063440000; -x[35] = 8.88888888888888930000; -x[36] = 9.14285714285714230000; -x[37] = 9.39682539682539720000; -x[38] = 9.65079365079365030000; -x[39] = 9.90476190476190510000; -x[40] = 10.15873015873015800000; -x[41] = 10.41269841269841300000; -x[42] = 10.66666666666666600000; -x[43] = 10.92063492063492100000; -x[44] = 11.17460317460317400000; -x[45] = 11.42857142857142900000; -x[46] = 11.68253968253968200000; -x[47] = 11.93650793650793700000; -x[48] = 12.19047619047619000000; -x[49] = 12.44444444444444500000; -x[50] = 12.69841269841269800000; -x[51] = 12.95238095238095300000; -x[52] = 13.20634920634920600000; -x[53] = 13.46031746031746000000; -x[54] = 13.71428571428571400000; -x[55] = 13.96825396825396800000; -x[56] = 14.22222222222222100000; -x[57] = 14.47619047619047600000; -x[58] = 14.73015873015872900000; -x[59] = 14.98412698412698400000; -x[60] = 15.23809523809523700000; -x[61] = 15.49206349206349200000; -x[62] = 15.74603174603174500000; -x[63] = 16.00000000000000000000; - - - -var y = new Array(); -y[0] = 0.00000000000000000000; -y[1] = 0.50395263067896967000; -y[2] = 0.71269664509979835000; -y[3] = 0.87287156094396945000; -y[4] = 1.00790526135793930000; -y[5] = 1.12687233963802200000; -y[6] = 1.23442679969673530000; -y[7] = 1.33333333333333330000; -y[8] = 1.42539329019959670000; -y[9] = 1.51185789203690880000; -y[10] = 1.59363814577919150000; -y[11] = 1.67142178807468980000; -y[12] = 1.74574312188793890000; -y[13] = 1.81702705031799170000; -y[14] = 1.88561808316412670000; -y[15] = 1.95180014589706640000; -y[16] = 2.01581052271587870000; -y[17] = 2.07784992659727900000; -y[18] = 2.13808993529939520000; -y[19] = 2.19667858946110380000; -y[20] = 2.25374467927604400000; -y[21] = 2.30940107675850290000; -y[22] = 2.36374736114111530000; -y[23] = 2.41687191246657520000; -y[24] = 2.46885359939347060000; -y[25] = 2.51976315339484810000; -y[26] = 2.56966429775848400000; -y[27] = 2.61861468283190830000; -y[28] = 2.66666666666666650000; -y[29] = 2.71386797119523940000; -y[30] = 2.76026223736941700000; -y[31] = 2.80588949764880670000; -y[32] = 2.85078658039919340000; -y[33] = 2.89498745782298350000; -y[34] = 2.93852354676981160000; -y[35] = 2.98142396999971960000; -y[36] = 3.02371578407381760000; -y[37] = 3.06542417893925380000; -y[38] = 3.10657265339049320000; -y[39] = 3.14718316987777280000; -y[40] = 3.18727629155838300000; -y[41] = 3.22687130401855570000; -y[42] = 3.26598632371090410000; -y[43] = 3.30463839483761390000; -y[44] = 3.34284357614937950000; -y[45] = 3.38061701891406630000; -y[46] = 3.41797303712883060000; -y[47] = 3.45492517089848670000; -y[48] = 3.49148624377587780000; -y[49] = 3.52766841475278750000; -y[50] = 3.56348322549899170000; -y[51] = 3.59894164336974940000; -y[52] = 3.63405410063598340000; -y[53] = 3.66883053033489940000; -y[54] = 3.70328039909020570000; -y[55] = 3.73741273720925400000; -y[56] = 3.77123616632825340000; -y[57] = 3.80475892484536750000; -y[58] = 3.83798889135426350000; -y[59] = 3.87093360626696680000; -y[60] = 3.90360029179413280000; -y[61] = 3.93599587043272870000; -y[62] = 3.96812698209517300000; -y[63] = 4.00000000000000000000; - - -var val; -for (i = 0; i < vnum; i++) -{ - val = Math.sqrt(x[i]); - if (!isEqual(val, y[i])) - { - $ERROR("\nx = " + x[i] + "\nlibc.sqrt(x) = " + y[i] + "\nMath.sqrt(x) = " + Math.sqrt(x[i]) + "\nMath.abs(libc.sqrt(x) - Math.sqrt(x)) > " + prec + "\n\n"); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.18_tan/S15.8.2.18_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.18_tan/S15.8.2.18_A1.js deleted file mode 100644 index 4d6c98357..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.18_tan/S15.8.2.18_A1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.18_A1; - * @section: 15.8.2.18; - * @assertion: If x is NaN, Math.tan(x) is NaN; - * @description: Checking if Math.tan(NaN) is NaN; - */ - -// CHECK#1 -var x = NaN; -if (!isNaN(Math.tan(x))) -{ - $ERROR("#1: 'var x=NaN; isNaN(Math.tan(x)) === false'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.18_tan/S15.8.2.18_A2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.18_tan/S15.8.2.18_A2.js deleted file mode 100644 index f63e5d6c2..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.18_tan/S15.8.2.18_A2.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.18_A2; - * @section: 15.8.2.18; - * @assertion: If x is +0, Math.tan(x) is +0; - * @description: Checking if Math.tan(+0) equals to +0; - */ - -// CHECK#1 -var x = +0; -if (Math.tan(x) !== +0) -{ - $ERROR("#1: 'var x=+0; Math.tan(x) !== +0'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.18_tan/S15.8.2.18_A3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.18_tan/S15.8.2.18_A3.js deleted file mode 100644 index 62a126cae..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.18_tan/S15.8.2.18_A3.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.18_A3; - * @section: 15.8.2.18; - * @assertion: If x is -0, Math.tan(x) is -0; - * @description: Checking if Math.tan(-0) equals to -0; - */ - -// CHECK#1 -var x = -0; -if (Math.tan(x) !== -0) -{ - $ERROR("#1: 'var x=-0; Math.tan(x) !== -0'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.18_tan/S15.8.2.18_A4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.18_tan/S15.8.2.18_A4.js deleted file mode 100644 index 800dc06a1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.18_tan/S15.8.2.18_A4.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.18_A4; - * @section: 15.8.2.18; - * @assertion: If x is +Infinity, Math.tan(x) is NaN; - * @description: Checking if Math.tan(+Infinity) is NaN; - */ - -// CHECK#1 -var x = +Infinity; -if (!isNaN(Math.tan(x))) -{ - $ERROR("#1: 'var x=+Infinity; isNaN(Math.tan(x)) === false'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.18_tan/S15.8.2.18_A5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.18_tan/S15.8.2.18_A5.js deleted file mode 100644 index df4b7009f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.18_tan/S15.8.2.18_A5.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.18_A5; - * @section: 15.8.2.18; - * @assertion: If x is -Infinity, Math.tan(x) is NaN; - * @description: Checking if Math.tan(-Infinity) is NaN; - */ - -// CHECK#1 -var x = -Infinity; -if (!isNaN(Math.tan(x))) -{ - $ERROR("#1: 'var x=-Infinity; isNaN(Math.tan(x)) === false'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.18_tan/S15.8.2.18_A6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.18_tan/S15.8.2.18_A6.js deleted file mode 100644 index a96d6200d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.18_tan/S15.8.2.18_A6.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.18_A6; - * @section: 15.8.2.18; - * @assertion: Tangent is a periodic function with period PI; - * @description: Checking if Math.tan(x) equals to Math.tan(x+n*Math.PI) with precision 0.000000000003, where n is an integer from 1 to 100 and x is one of 10 float point values from 0 to Math.PI; - */ - -// CHECK#1 - prec = 0.00000000003; -//prec = 0.000000000000001; -period = Math.PI; -pernum = 100; - -a = -pernum * period + period/2; -b = pernum * period - period/2; -snum = 9; -step = period/(snum + 2); -x = new Array(); -for (i = 0; i <= snum; i++) //// We exlude special points -{ //// in this cycle. - x[i] = a + (i+1)*step; //// -} //// - - -var curval; -var curx; -var j; -for (i = 0; i < snum; i++) -{ - curval = Math.tan(x[i]); - curx = x[i] + period; - j = 0; - while (curx <= b) - { - curx += period; - j++; - if (Math.abs(Math.tan(curx) - curval) >= prec) - { - $FAIL("#1: tan is found out to not be periodic:\n Math.abs(Math.tan(" + x[i] + ") - Math.tan(" + x[i] + " + 2*Math.PI*" + j + ")) >= " + prec + "\n Math.tan(" + x[i] + ") === " + curval + "\n Math.tan(" + curx + ") === " + Math.tan(curx)); - } - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.18_tan/S15.8.2.18_A7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.18_tan/S15.8.2.18_A7.js deleted file mode 100644 index c96a15853..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.18_tan/S15.8.2.18_A7.js +++ /dev/null @@ -1,159 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.18_A7; - * @section: 15.8.2.18; - * @assertion: Math.tan, recommended that implementations use the approximation algorithms for IEEE 754 arithmetic contained in fdlibm; - * @description: Checking if Math.tan is approximately equals to its mathematical values on the set of 64 argument values; all the sample values is calculated with LibC; - */ - -$INCLUDE("math_precision.js"); -$INCLUDE("math_isequal.js"); - -// CHECK#1 -vnum = 64; -var x = new Array(); -x[0] = -1.57079632679489660000; -x[1] = -1.52092977673791570000; -x[2] = -1.47106322668093490000; -x[3] = -1.42119667662395410000; -x[4] = -1.37133012656697330000; -x[5] = -1.32146357650999220000; -x[6] = -1.27159702645301140000; -x[7] = -1.22173047639603060000; -x[8] = -1.17186392633904980000; -x[9] = -1.12199737628206900000; -x[10] = -1.07213082622508820000; -x[11] = -1.02226427616810730000; -x[12] = -0.97239772611112640000; -x[13] = -0.92253117605414559000; -x[14] = -0.87266462599716477000; -x[15] = -0.82279807594018395000; -x[16] = -0.77293152588320302000; -x[17] = -0.72306497582622220000; -x[18] = -0.67319842576924138000; -x[19] = -0.62333187571226056000; -x[20] = -0.57346532565527975000; -x[21] = -0.52359877559829870000; -x[22] = -0.47373222554131811000; -x[23] = -0.42386567548433729000; -x[24] = -0.37399912542735625000; -x[25] = -0.32413257537037543000; -x[26] = -0.27426602531339461000; -x[27] = -0.22439947525641379000; -x[28] = -0.17453292519943298000; -x[29] = -0.12466637514245216000; -x[30] = -0.07479982508547133900; -x[31] = -0.02493327502849052000; -x[32] = 0.02493327502849052000; -x[33] = 0.07479982508547133900; -x[34] = 0.12466637514245216000; -x[35] = 0.17453292519943298000; -x[36] = 0.22439947525641379000; -x[37] = 0.27426602531339461000; -x[38] = 0.32413257537037543000; -x[39] = 0.37399912542735625000; -x[40] = 0.42386567548433707000; -x[41] = 0.47373222554131766000; -x[42] = 0.52359877559829915000; -x[43] = 0.57346532565527975000; -x[44] = 0.62333187571226034000; -x[45] = 0.67319842576924138000; -x[46] = 0.72306497582622198000; -x[47] = 0.77293152588320302000; -x[48] = 0.82279807594018406000; -x[49] = 0.87266462599716466000; -x[50] = 0.92253117605414570000; -x[51] = 0.97239772611112629000; -x[52] = 1.02226427616810730000; -x[53] = 1.07213082622508840000; -x[54] = 1.12199737628206900000; -x[55] = 1.17186392633905000000; -x[56] = 1.22173047639603060000; -x[57] = 1.27159702645301120000; -x[58] = 1.32146357650999220000; -x[59] = 1.37133012656697330000; -x[60] = 1.42119667662395390000; -x[61] = 1.47106322668093490000; -x[62] = 1.52092977673791550000; -x[63] = 1.57079632679489660000; - - - -var y = new Array(); -y[0] = -16331239353195370.00000000000000000000; -y[1] = -20.03689788997828100000; -y[2] = -9.99349498241742220000; -y[3] = -6.63456649978931170000; -y[4] = -4.94671494494940060000; -y[5] = -3.92724714760272690000; -y[6] = -3.24192037576928720000; -y[7] = -2.74747741945462160000; -y[8] = -2.37228029184788760000; -y[9] = -2.07652139657233640000; -y[10] = -1.83630792973623100000; -y[11] = -1.63642745273401610000; -y[12] = -1.46673061342097340000; -y[13] = -1.32018331365488460000; -y[14] = -1.19175359259421000000; -y[15] = -1.07774368351222650000; -y[16] = -0.97537247158200291000; -y[17] = -0.88250523616465493000; -y[18] = -0.79747338888240393000; -y[19] = -0.71895103828786056000; -y[20] = -0.64586847728552887000; -y[21] = -0.57735026918962551000; -y[22] = -0.51267008667516678000; -y[23] = -0.45121718317830323000; -y[24] = -0.39247107881010240000; -y[25] = -0.33598213147817668000; -y[26] = -0.28135637451595324000; -y[27] = -0.22824347439014994000; -y[28] = -0.17632698070846500000; -y[29] = -0.12531625823730441000; -y[30] = -0.07493964001908703900; -y[31] = -0.02493844305504610100; -y[32] = 0.02493844305504610100; -y[33] = 0.07493964001908703900; -y[34] = 0.12531625823730441000; -y[35] = 0.17632698070846500000; -y[36] = 0.22824347439014994000; -y[37] = 0.28135637451595324000; -y[38] = 0.33598213147817668000; -y[39] = 0.39247107881010240000; -y[40] = 0.45121718317830301000; -y[41] = 0.51267008667516623000; -y[42] = 0.57735026918962618000; -y[43] = 0.64586847728552887000; -y[44] = 0.71895103828786022000; -y[45] = 0.79747338888240393000; -y[46] = 0.88250523616465459000; -y[47] = 0.97537247158200291000; -y[48] = 1.07774368351222670000; -y[49] = 1.19175359259420950000; -y[50] = 1.32018331365488510000; -y[51] = 1.46673061342097320000; -y[52] = 1.63642745273401610000; -y[53] = 1.83630792973623190000; -y[54] = 2.07652139657233640000; -y[55] = 2.37228029184788890000; -y[56] = 2.74747741945462160000; -y[57] = 3.24192037576928450000; -y[58] = 3.92724714760272690000; -y[59] = 4.94671494494940060000; -y[60] = 6.63456649978930190000; -y[61] = 9.99349498241742220000; -y[62] = 20.03689788997819200000; -y[63] = 16331239353195370.00000000000000000000; - - -var val; -for (i = 0; i < vnum; i++) -{ - val = Math.tan(x[i]); - if (!isEqual(val, y[i])) - { - $ERROR("\nx = " + x[i] + "\nlibc.tan(x) = " + y[i] + "\nMath.tan(x) = " + Math.tan(x[i]) + "\nMath.abs(libc.tan(x) - Math.tan(x)) > " + prec + "\n\n"); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.1_abs/S15.8.2.1_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.1_abs/S15.8.2.1_A1.js deleted file mode 100644 index 129b217aa..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.1_abs/S15.8.2.1_A1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.1_A1; - * @section: 15.8.2.1; - * @assertion: If x is NaN, Math.abs(x) is NaN; - * @description: Checking if Math.abs(NaN) is NaN; - */ - -// CHECK#1 -var x = NaN; -if (!isNaN(Math.abs(x))) -{ - $ERROR("#1: 'var x=NaN; isNaN(Math.abs(x)) === false'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.1_abs/S15.8.2.1_A2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.1_abs/S15.8.2.1_A2.js deleted file mode 100644 index aa2bd1e96..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.1_abs/S15.8.2.1_A2.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.1_A2; - * @section: 15.8.2.1; - * @assertion: If x is -0, Math.abs(x) is +0; - * @description: Checking if Math.abs(-0) equals to +0; - */ - -// CHECK#1 -var x = -0; -if (Math.abs(x) !== +0) -{ - $ERROR("#1: 'var x=-0; Math.abs(x) !== +0'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.1_abs/S15.8.2.1_A3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.1_abs/S15.8.2.1_A3.js deleted file mode 100644 index 1e6589692..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.1_abs/S15.8.2.1_A3.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.1_A3; - * @section: 15.8.2.1; - * @assertion: If x is -Infinity, Math.abs(x) is +Infinity; - * @description: Checking if Math.abs(-Infinity) equals to +Infinity; - */ - -// CHECK#1 -var x = -Infinity; -if (Math.abs(x) !== +Infinity) -{ - $ERROR("#1: 'var x=-Infinity; Math.abs(x) !== +Infinity'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.2_acos/S15.8.2.2_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.2_acos/S15.8.2.2_A1.js deleted file mode 100644 index 7f74a4582..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.2_acos/S15.8.2.2_A1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.2_A1; - * @section: 15.8.2.2; - * @assertion: If x is NaN, Math.acos(x) is NaN; - * @description: Checking if Math.acos(NaN) is NaN; - */ - -// CHECK#1 -var x = NaN; -if (!isNaN(Math.acos(x))) -{ - $ERROR("#1: 'var x=NaN; isNaN(Math.acos(x)) === false'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.2_acos/S15.8.2.2_A2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.2_acos/S15.8.2.2_A2.js deleted file mode 100644 index 7988ff783..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.2_acos/S15.8.2.2_A2.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.2_A2; - * @section: 15.8.2.2; - * @assertion: If x is greater than 1, Math.acos(x) is NaN; - * @description: Checking if Math.acos(x) is NaN, where x is greater than 1; - */ - -// CHECK#1 -var x = 1.000000000000001; -if (!isNaN(Math.acos(x))) -{ - $ERROR("#1: 'var x = 1.000000000000001; isNaN(Math.acos(x)) === false'"); -} - -// CHECK#2 -x = 2; -if (!isNaN(Math.acos(x))) -{ - $ERROR("#2: 'x = 2; isNaN(Math.acos(x)) === false'"); -} - -// CHECK#3 -x = +Infinity; -if (!isNaN(Math.acos(x))) -{ - $ERROR("#3: 'x = +Infinity; isNaN(Math.acos(x)) === false'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.2_acos/S15.8.2.2_A3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.2_acos/S15.8.2.2_A3.js deleted file mode 100644 index 4c3f85681..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.2_acos/S15.8.2.2_A3.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.2_A3; - * @section: 15.8.2.2; - * @assertion: If x is less than -1, Math.acos(x) is NaN; - * @description: Checking if Math.acos(x) is NaN, where x is less than -1; - */ - -// CHECK#1 -var x = -1.000000000000001; -if (!isNaN(Math.acos(x))) -{ - $ERROR("#1: 'var x = -1.000000000000001; isNaN(Math.acos(x)) === false'"); -} - -// CHECK#2 -x = -2; -if (!isNaN(Math.acos(x))) -{ - $ERROR("#2: 'x = -2; isNaN(Math.acos(x)) === false'"); -} - -// CHECK#3 -x = -Infinity; -if (!isNaN(Math.acos(x))) -{ - $ERROR("#3: 'x = -Infinity; isNaN(Math.acos(x)) === false'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.2_acos/S15.8.2.2_A4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.2_acos/S15.8.2.2_A4.js deleted file mode 100644 index fe2f02604..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.2_acos/S15.8.2.2_A4.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.2_A4; - * @section: 15.8.2.2; - * @assertion: If x is exactly 1, Math.acos(x) is +0; - * @description: Checking if Math.acos(1) equals to +0; - */ - -// CHECK#1 -var x = 1; -if (Math.acos(x) !== +0) -{ - $ERROR("#1: 'var x = 1; Math.acos(x) !== +0'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.2_acos/S15.8.2.2_A5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.2_acos/S15.8.2.2_A5.js deleted file mode 100644 index 0dd4529f5..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.2_acos/S15.8.2.2_A5.js +++ /dev/null @@ -1,162 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.2_A5; - * @section: 15.8.2.2; - * @assertion: Math.acos, recommended that implementations use the approximation algorithms for IEEE 754 arithmetic contained in fdlibm; - * @description: Checking if Math.acos is approximately equals to its mathematical values on the set of 64 argument values; all the sample values is calculated with LibC; - */ - -$INCLUDE("math_precision.js"); -$INCLUDE("math_isequal.js"); - -// CHECK#1 -vnum = 64; -var x = new Array(); -x[0] = -1.00000000000000000000; -x[1] = -0.96825396825396826000; -x[2] = -0.93650793650793651000; -x[3] = -0.90476190476190477000; -x[4] = -0.87301587301587302000; -x[5] = -0.84126984126984128000; -x[6] = -0.80952380952380953000; -x[7] = -0.77777777777777779000; -x[8] = -0.74603174603174605000; -x[9] = -0.71428571428571430000; -x[10] = -0.68253968253968256000; -x[11] = -0.65079365079365081000; -x[12] = -0.61904761904761907000; -x[13] = -0.58730158730158732000; -x[14] = -0.55555555555555558000; -x[15] = -0.52380952380952384000; -x[16] = -0.49206349206349209000; -x[17] = -0.46031746031746035000; -x[18] = -0.42857142857142860000; -x[19] = -0.39682539682539686000; -x[20] = -0.36507936507936511000; -x[21] = -0.33333333333333337000; -x[22] = -0.30158730158730163000; -x[23] = -0.26984126984126988000; -x[24] = -0.23809523809523814000; -x[25] = -0.20634920634920639000; -x[26] = -0.17460317460317465000; -x[27] = -0.14285714285714290000; -x[28] = -0.11111111111111116000; -x[29] = -0.07936507936507941600; -x[30] = -0.04761904761904767200; -x[31] = -0.01587301587301592800; -x[32] = 0.01587301587301581700; -x[33] = 0.04761904761904767200; -x[34] = 0.07936507936507930500; -x[35] = 0.11111111111111116000; -x[36] = 0.14285714285714279000; -x[37] = 0.17460317460317465000; -x[38] = 0.20634920634920628000; -x[39] = 0.23809523809523814000; -x[40] = 0.26984126984126977000; -x[41] = 0.30158730158730163000; -x[42] = 0.33333333333333326000; -x[43] = 0.36507936507936511000; -x[44] = 0.39682539682539675000; -x[45] = 0.42857142857142860000; -x[46] = 0.46031746031746024000; -x[47] = 0.49206349206349209000; -x[48] = 0.52380952380952372000; -x[49] = 0.55555555555555558000; -x[50] = 0.58730158730158721000; -x[51] = 0.61904761904761907000; -x[52] = 0.65079365079365070000; -x[53] = 0.68253968253968256000; -x[54] = 0.71428571428571419000; -x[55] = 0.74603174603174605000; -x[56] = 0.77777777777777768000; -x[57] = 0.80952380952380953000; -x[58] = 0.84126984126984117000; -x[59] = 0.87301587301587302000; -x[60] = 0.90476190476190466000; -x[61] = 0.93650793650793651000; -x[62] = 0.96825396825396814000; -x[63] = 1.00000000000000000000; - - - - -var y = new Array(); -y[0] = 3.14159265358979310000; -y[1] = 2.88894492730522990000; -y[2] = 2.78333143507717650000; -y[3] = 2.70161669879887430000; -y[4] = 2.63214880477790030000; -y[5] = 2.57042415502425570000; -y[6] = 2.51413688066660250000; -y[7] = 2.46191883468154950000; -y[8] = 2.41287920284638750000; -y[9] = 2.36639928027943200000; -y[10] = 2.32202832592153240000; -y[11] = 2.27942559835728040000; -y[12] = 2.23832577143072960000; -y[13] = 2.19851714445280910000; -y[14] = 2.15982729701117070000; -y[15] = 2.12211329592677920000; -y[16] = 2.08525480235608330000; -y[17] = 2.04914909144415440000; -y[18] = 2.01370737086853560000; -y[19] = 1.97885200409617520000; -y[20] = 1.94451437773781040000; -y[21] = 1.91063323624901860000; -y[22] = 1.87715336135181590000; -y[23] = 1.84402450933553450000; -y[24] = 1.81120054356415610000; -y[25] = 1.77863871614824330000; -y[26] = 1.74629906437061930000; -y[27] = 1.71414389570026190000; -y[28] = 1.68213734113586070000; -y[29] = 1.65024496088003380000; -y[30] = 1.61843338941929970000; -y[31] = 1.58667000928485250000; -y[32] = 1.55492264430494110000; -y[33] = 1.52315926417049340000; -y[34] = 1.49134769270975950000; -y[35] = 1.45945531245393270000; -y[36] = 1.42744875788953140000; -y[37] = 1.39529358921917380000; -y[38] = 1.36295393744155000000; -y[39] = 1.33039211002563730000; -y[40] = 1.29756814425425880000; -y[41] = 1.26443929223797750000; -y[42] = 1.23095941734077470000; -y[43] = 1.19707827585198270000; -y[44] = 1.16274064949361830000; -y[45] = 1.12788528272125750000; -y[46] = 1.09244356214563900000; -y[47] = 1.05633785123370980000; -y[48] = 1.01947935766301390000; -y[49] = 0.98176535657862274000; -y[50] = 0.94307550913698401000; -y[51] = 0.90326688215906359000; -y[52] = 0.86216705523251280000; -y[53] = 0.81956432766826082000; -y[54] = 0.77519337331036142000; -y[55] = 0.72871345074340554000; -y[56] = 0.67967381890824408000; -y[57] = 0.62745577292319077000; -y[58] = 0.57116849856553775000; -y[59] = 0.50944384881189297000; -y[60] = 0.43997595479091917000; -y[61] = 0.35826121851261677000; -y[62] = 0.25264772628456394000; -y[63] = 0.00000000000000000000; - - - - -var val; -for (i = 0; i < vnum; i++) -{ - val = Math.acos(x[i]); - if (!isEqual(val, y[i])) - { - $ERROR("\nx = " + x[i] + "\nlibc.acos(x) = " + y[i] + "\nMath.acos(x) = " + Math.acos(x[i]) + "\nMath.abs(libc.acos(x) - Math.acos(x)) > " + prec + "\n\n"); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.3_asin/S15.8.2.3_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.3_asin/S15.8.2.3_A1.js deleted file mode 100644 index c2b0188f6..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.3_asin/S15.8.2.3_A1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.3_A1; - * @section: 15.8.2.3; - * @assertion: If x is NaN, Math.asin(x) is NaN; - * @description: Checking if Math.asin(NaN) is NaN; - */ - -// CHECK#1 -var x = NaN; -if (!isNaN(Math.asin(x))) -{ - $ERROR("#1: 'var x=NaN; isNaN(Math.asin(x)) === false'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.3_asin/S15.8.2.3_A2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.3_asin/S15.8.2.3_A2.js deleted file mode 100644 index f035f3a14..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.3_asin/S15.8.2.3_A2.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.3_A2; - * @section: 15.8.2.3; - * @assertion: If x is greater than 1, Math.asin(x) is NaN; - * @description: Checking if Math.asin(x) is NaN, where x is greater than 1; - */ - -// CHECK#1 -var x = 1.000000000000001; -if (!isNaN(Math.asin(x))) -{ - $ERROR("#1: 'var x = 1.000000000000001; isNaN(Math.asin(x)) === false'"); -} - -// CHECK#2 -x = 2; -if (!isNaN(Math.asin(x))) -{ - $ERROR("#2: 'x = 2; isNaN(Math.asin(x)) === false'"); -} - -// CHECK#3 -x = +Infinity; -if (!isNaN(Math.asin(x))) -{ - $ERROR("#3: 'x = +Infinity; isNaN(Math.asin(x)) === false'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.3_asin/S15.8.2.3_A3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.3_asin/S15.8.2.3_A3.js deleted file mode 100644 index 436b6ff51..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.3_asin/S15.8.2.3_A3.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.3_A3; - * @section: 15.8.2.3; - * @assertion: If x is less than -1, Math.asin(x) is NaN; - * @description: Checking if Math.asin(x) is NaN, where x is less than -1; - */ - -// CHECK#1 -var x = -1.000000000000001; -if (!isNaN(Math.asin(x))) -{ - $ERROR("#1: 'var x = -1.000000000000001; isNaN(Math.asin(x)) === false'"); -} - -// CHECK#2 -x = -2; -if (!isNaN(Math.asin(x))) -{ - $ERROR("#2: 'x = -2; isNaN(Math.asin(x)) === false'"); -} - -// CHECK#3 -x = -Infinity; -if (!isNaN(Math.asin(x))) -{ - $ERROR("#3: 'x = -Infinity; isNaN(Math.asin(x)) === false'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.3_asin/S15.8.2.3_A4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.3_asin/S15.8.2.3_A4.js deleted file mode 100644 index 1b60f1f22..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.3_asin/S15.8.2.3_A4.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.3_A4; - * @section: 15.8.2.3; - * @assertion: If x is +0, Math.asin(x) is +0; - * @description: Checking if Math.asin(+0) equals +0; - */ - -// CHECK#1 -var x = +0; -if (Math.asin(x) !== +0) -{ - $ERROR("#1: 'var x = +0; Math.asin(x) !== +0'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.3_asin/S15.8.2.3_A5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.3_asin/S15.8.2.3_A5.js deleted file mode 100644 index 6e6812e88..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.3_asin/S15.8.2.3_A5.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.3_A5; - * @section: 15.8.2.3; - * @assertion: If x is -0, Math.asin(x) is -0; - * @description: Checking if Math.asin(-0) equals to -0; - */ - -// CHECK#1 -var x = -0; -if (Math.asin(x) !== -0) -{ - $ERROR("#1: 'var x = -0; Math.asin(x) !== -0'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.3_asin/S15.8.2.3_A6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.3_asin/S15.8.2.3_A6.js deleted file mode 100644 index 8cbf9fe4f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.3_asin/S15.8.2.3_A6.js +++ /dev/null @@ -1,161 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.3_A6; - * @section: 15.8.2.3; - * @assertion: Math.asin, recommended that implementations use the approximation algorithms for IEEE 754 arithmetic contained in fdlibm; - * @description: Checking if Math.asin is approximately equals to its mathematical values on the set of 64 argument values; all the sample values is calculated with LibC; - */ - -$INCLUDE("math_precision.js"); -$INCLUDE("math_isequal.js"); - -// CHECK#1 -vnum = 64; -var x = new Array(); -x[0] = -1.00000000000000000000; -x[1] = -0.96825396825396826000; -x[2] = -0.93650793650793651000; -x[3] = -0.90476190476190477000; -x[4] = -0.87301587301587302000; -x[5] = -0.84126984126984128000; -x[6] = -0.80952380952380953000; -x[7] = -0.77777777777777779000; -x[8] = -0.74603174603174605000; -x[9] = -0.71428571428571430000; -x[10] = -0.68253968253968256000; -x[11] = -0.65079365079365081000; -x[12] = -0.61904761904761907000; -x[13] = -0.58730158730158732000; -x[14] = -0.55555555555555558000; -x[15] = -0.52380952380952384000; -x[16] = -0.49206349206349209000; -x[17] = -0.46031746031746035000; -x[18] = -0.42857142857142860000; -x[19] = -0.39682539682539686000; -x[20] = -0.36507936507936511000; -x[21] = -0.33333333333333337000; -x[22] = -0.30158730158730163000; -x[23] = -0.26984126984126988000; -x[24] = -0.23809523809523814000; -x[25] = -0.20634920634920639000; -x[26] = -0.17460317460317465000; -x[27] = -0.14285714285714290000; -x[28] = -0.11111111111111116000; -x[29] = -0.07936507936507941600; -x[30] = -0.04761904761904767200; -x[31] = -0.01587301587301592800; -x[32] = 0.01587301587301581700; -x[33] = 0.04761904761904767200; -x[34] = 0.07936507936507930500; -x[35] = 0.11111111111111116000; -x[36] = 0.14285714285714279000; -x[37] = 0.17460317460317465000; -x[38] = 0.20634920634920628000; -x[39] = 0.23809523809523814000; -x[40] = 0.26984126984126977000; -x[41] = 0.30158730158730163000; -x[42] = 0.33333333333333326000; -x[43] = 0.36507936507936511000; -x[44] = 0.39682539682539675000; -x[45] = 0.42857142857142860000; -x[46] = 0.46031746031746024000; -x[47] = 0.49206349206349209000; -x[48] = 0.52380952380952372000; -x[49] = 0.55555555555555558000; -x[50] = 0.58730158730158721000; -x[51] = 0.61904761904761907000; -x[52] = 0.65079365079365070000; -x[53] = 0.68253968253968256000; -x[54] = 0.71428571428571419000; -x[55] = 0.74603174603174605000; -x[56] = 0.77777777777777768000; -x[57] = 0.80952380952380953000; -x[58] = 0.84126984126984117000; -x[59] = 0.87301587301587302000; -x[60] = 0.90476190476190466000; -x[61] = 0.93650793650793651000; -x[62] = 0.96825396825396814000; -x[63] = 1.00000000000000000000; - - - - -var y = new Array(); -y[0] = -1.57079632679489660000; -y[1] = -1.31814860051033310000; -y[2] = -1.21253510828227990000; -y[3] = -1.13082037200397780000; -y[4] = -1.06135247798300370000; -y[5] = -0.99962782822935903000; -y[6] = -0.94334055387170590000; -y[7] = -0.89112250788665281000; -y[8] = -0.84208287605149101000; -y[9] = -0.79560295348453536000; -y[10] = -0.75123199912663585000; -y[11] = -0.70862927156238398000; -y[12] = -0.66752944463583297000; -y[13] = -0.62772081765791266000; -y[14] = -0.58903097021627393000; -y[15] = -0.55131696913188277000; -y[16] = -0.51445847556118673000; -y[17] = -0.47835276464925774000; -y[18] = -0.44291104407363896000; -y[19] = -0.40805567730127851000; -y[20] = -0.37371805094291394000; -y[21] = -0.33983690945412198000; -y[22] = -0.30635703455691915000; -y[23] = -0.27322818254063785000; -y[24] = -0.24040421676925938000; -y[25] = -0.20784238935334678000; -y[26] = -0.17550273757572274000; -y[27] = -0.14334756890536540000; -y[28] = -0.11134101434096394000; -y[29] = -0.07944863408513722100; -y[30] = -0.04763706262440318300; -y[31] = -0.01587368248995573600; -y[32] = 0.01587368248995562500; -y[33] = 0.04763706262440318300; -y[34] = 0.07944863408513711000; -y[35] = 0.11134101434096394000; -y[36] = 0.14334756890536529000; -y[37] = 0.17550273757572274000; -y[38] = 0.20784238935334667000; -y[39] = 0.24040421676925938000; -y[40] = 0.27322818254063774000; -y[41] = 0.30635703455691915000; -y[42] = 0.33983690945412187000; -y[43] = 0.37371805094291394000; -y[44] = 0.40805567730127840000; -y[45] = 0.44291104407363896000; -y[46] = 0.47835276464925758000; -y[47] = 0.51445847556118673000; -y[48] = 0.55131696913188266000; -y[49] = 0.58903097021627393000; -y[50] = 0.62772081765791254000; -y[51] = 0.66752944463583297000; -y[52] = 0.70862927156238387000; -y[53] = 0.75123199912663585000; -y[54] = 0.79560295348453514000; -y[55] = 0.84208287605149101000; -y[56] = 0.89112250788665259000; -y[57] = 0.94334055387170590000; -y[58] = 0.99962782822935881000; -y[59] = 1.06135247798300370000; -y[60] = 1.13082037200397760000; -y[61] = 1.21253510828227990000; -y[62] = 1.31814860051033270000; -y[63] = 1.57079632679489660000; - - - -var val; -for (i = 0; i < vnum; i++) -{ - val = Math.asin(x[i]); - if (!isEqual(val, y[i])) - { - $ERROR("\nx = " + x[i] + "\nlibc.asin(x) = " + y[i] + "\nMath.asin(x) = " + Math.asin(x[i]) + "\nMath.abs(libc.asin(x) - Math.asin(x)) > " + prec + "\n\n"); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.4_atan/S15.8.2.4_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.4_atan/S15.8.2.4_A1.js deleted file mode 100644 index 9b167391d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.4_atan/S15.8.2.4_A1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.4_A1; - * @section: 15.8.2.4; - * @assertion: If x is NaN, Math.atan(x) is NaN; - * @description: Checking if Math.atan(NaN) is NaN; - */ - -// CHECK#1 -var x = NaN; -if (!isNaN(Math.atan(x))) -{ - $ERROR("#1: 'var x=NaN; isNaN(Math.atan(x)) === false'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.4_atan/S15.8.2.4_A2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.4_atan/S15.8.2.4_A2.js deleted file mode 100644 index 32b32ae31..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.4_atan/S15.8.2.4_A2.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.4_A2; - * @section: 15.8.2.4; - * @assertion: If x is +0, Math.atan(x) is +0; - * @description: Checking if Math.atan(+0) equals to +0; - */ - -// CHECK#1 -var x = +0; -if (Math.atan(x) !== +0) -{ - $ERROR("#1: 'var x = +0; Math.atan(x) !== +0'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.4_atan/S15.8.2.4_A3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.4_atan/S15.8.2.4_A3.js deleted file mode 100644 index c630f2018..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.4_atan/S15.8.2.4_A3.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.4_A3; - * @section: 15.8.2.4; - * @assertion: If x is -0, Math.atan(x) is -0; - * @description: Checking if Math.atan(-0) equals to -0; - */ - -// CHECK#1 -var x = -0; -if (Math.atan(x) !== -0) -{ - $ERROR("#1: 'var x = -0; Math.atan(x) !== -0'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.4_atan/S15.8.2.4_A4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.4_atan/S15.8.2.4_A4.js deleted file mode 100644 index 02fe0e3ca..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.4_atan/S15.8.2.4_A4.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.4_A4; - * @section: 15.8.2.4; - * @assertion: If x is +Infinity, Math.atan(x) is an implementation-dependent approximation to +PI/2; - * @description: Checking if Math.atan(+Infinity) is an approximation to +PI/2; - */ - -$INCLUDE("math_precision.js"); -$INCLUDE("math_isequal.js"); - -// CHECK#1 - -var x = +Infinity; -if (!isEqual(Math.atan(x),Math.PI/2)) -{ - $ERROR("#1: '!isEqual(Math.atan(+Infinity), Math.PI/2)'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.4_atan/S15.8.2.4_A5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.4_atan/S15.8.2.4_A5.js deleted file mode 100644 index 41f33a8d3..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.4_atan/S15.8.2.4_A5.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.4_A5; - * @section: 15.8.2.4; - * @assertion: If x is -Infinity, Math.atan(x) is an implementation-dependent approximation to -PI/2; - * @description: Checking if Math.atan(-Infinity) is an approximation to -PI/2; - */ - -$INCLUDE("math_precision.js"); -$INCLUDE("math_isequal.js"); - -// CHECK#1 - -var x = -Infinity; -if (!isEqual(Math.atan(x), -Math.PI/2)) -{ - $ERROR("#1: '!isEqual(Math.atan(-Infinity), -Math.PI/2)'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.4_atan/S15.8.2.4_A6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.4_atan/S15.8.2.4_A6.js deleted file mode 100644 index 42a98d945..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.4_atan/S15.8.2.4_A6.js +++ /dev/null @@ -1,161 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.4_A6; - * @section: 15.8.2.4; - * @assertion: Math.atan, recommended that implementations use the approximation algorithms for IEEE 754 arithmetic contained in fdlibm; - * @description: Checking if Math.atan is approximately equals to its mathematical values on the set of 64 argument values; all the sample values is calculated with LibC; - */ - -$INCLUDE("math_precision.js"); -$INCLUDE("math_isequal.js"); - -// CHECK#1 -vnum = 64; -var x = new Array(); -x[0] = -16.00000000000000000000; -x[1] = -15.49206349206349200000; -x[2] = -14.98412698412698400000; -x[3] = -14.47619047619047600000; -x[4] = -13.96825396825396800000; -x[5] = -13.46031746031746000000; -x[6] = -12.95238095238095300000; -x[7] = -12.44444444444444500000; -x[8] = -11.93650793650793700000; -x[9] = -11.42857142857142900000; -x[10] = -10.92063492063492100000; -x[11] = -10.41269841269841300000; -x[12] = -9.90476190476190510000; -x[13] = -9.39682539682539720000; -x[14] = -8.88888888888888930000; -x[15] = -8.38095238095238140000; -x[16] = -7.87301587301587350000; -x[17] = -7.36507936507936560000; -x[18] = -6.85714285714285770000; -x[19] = -6.34920634920634970000; -x[20] = -5.84126984126984180000; -x[21] = -5.33333333333333390000; -x[22] = -4.82539682539682600000; -x[23] = -4.31746031746031810000; -x[24] = -3.80952380952381020000; -x[25] = -3.30158730158730230000; -x[26] = -2.79365079365079440000; -x[27] = -2.28571428571428650000; -x[28] = -1.77777777777777860000; -x[29] = -1.26984126984127070000; -x[30] = -0.76190476190476275000; -x[31] = -0.25396825396825484000; -x[32] = 0.25396825396825307000; -x[33] = 0.76190476190476275000; -x[34] = 1.26984126984126890000; -x[35] = 1.77777777777777860000; -x[36] = 2.28571428571428470000; -x[37] = 2.79365079365079440000; -x[38] = 3.30158730158730050000; -x[39] = 3.80952380952381020000; -x[40] = 4.31746031746031630000; -x[41] = 4.82539682539682600000; -x[42] = 5.33333333333333210000; -x[43] = 5.84126984126984180000; -x[44] = 6.34920634920634800000; -x[45] = 6.85714285714285770000; -x[46] = 7.36507936507936380000; -x[47] = 7.87301587301587350000; -x[48] = 8.38095238095237960000; -x[49] = 8.88888888888888930000; -x[50] = 9.39682539682539540000; -x[51] = 9.90476190476190510000; -x[52] = 10.41269841269841100000; -x[53] = 10.92063492063492100000; -x[54] = 11.42857142857142700000; -x[55] = 11.93650793650793700000; -x[56] = 12.44444444444444300000; -x[57] = 12.95238095238095300000; -x[58] = 13.46031746031745900000; -x[59] = 13.96825396825396800000; -x[60] = 14.47619047619047400000; -x[61] = 14.98412698412698400000; -x[62] = 15.49206349206349000000; -x[63] = 16.00000000000000000000; - - - -var y = new Array(); -y[0] = -1.50837751679893930000; -y[1] = -1.50633657314382670000; -y[2] = -1.50415785436419310000; -y[3] = -1.50182694519358660000; -y[4] = -1.49932735026103090000; -y[5] = -1.49664010557682300000; -y[6] = -1.49374329974393950000; -y[7] = -1.49061147949358030000; -y[8] = -1.48721490565349580000; -y[9] = -1.48351861384543530000; -y[10] = -1.47948121756761840000; -y[11] = -1.47505336756015580000; -y[12] = -1.47017574693777100000; -y[13] = -1.46477643093971600000; -y[14] = -1.45876736436890870000; -y[15] = -1.45203959426707030000; -y[16] = -1.44445671565255360000; -y[17] = -1.43584570229039390000; -y[18] = -1.42598382855595760000; -y[19] = -1.41457960835077490000; -y[20] = -1.40124433129607070000; -y[21] = -1.38544837679920190000; -y[22] = -1.36645204745321510000; -y[23] = -1.34319210978762000000; -y[24] = -1.31408799636151090000; -y[25] = -1.27669520176831860000; -y[26] = -1.22705270315911450000; -y[27] = -1.15838588519750950000; -y[28] = -1.05840686648415900000; -y[29] = -0.90372394590298166000; -y[30] = -0.65107672144448037000; -y[31] = -0.24870998909352368000; -y[32] = 0.24870998909352202000; -y[33] = 0.65107672144448037000; -y[34] = 0.90372394590298100000; -y[35] = 1.05840686648415900000; -y[36] = 1.15838588519750910000; -y[37] = 1.22705270315911450000; -y[38] = 1.27669520176831840000; -y[39] = 1.31408799636151090000; -y[40] = 1.34319210978761980000; -y[41] = 1.36645204745321510000; -y[42] = 1.38544837679920190000; -y[43] = 1.40124433129607070000; -y[44] = 1.41457960835077490000; -y[45] = 1.42598382855595760000; -y[46] = 1.43584570229039390000; -y[47] = 1.44445671565255360000; -y[48] = 1.45203959426707030000; -y[49] = 1.45876736436890870000; -y[50] = 1.46477643093971600000; -y[51] = 1.47017574693777100000; -y[52] = 1.47505336756015580000; -y[53] = 1.47948121756761840000; -y[54] = 1.48351861384543530000; -y[55] = 1.48721490565349580000; -y[56] = 1.49061147949358030000; -y[57] = 1.49374329974393950000; -y[58] = 1.49664010557682300000; -y[59] = 1.49932735026103090000; -y[60] = 1.50182694519358660000; -y[61] = 1.50415785436419310000; -y[62] = 1.50633657314382670000; -y[63] = 1.50837751679893930000; - - - - -var val; -for (i = 0; i < vnum; i++) -{ - val = Math.atan(x[i]); - if (!isEqual(val, y[i])) - { - $ERROR("\nx = " + x[i] + "\nlibc.atan(x) = " + y[i] + "\nMath.atan(x) = " + Math.atan(x[i]) + "\nMath.abs(libc.atan(x) - Math.atan(x)) > " + prec + "\n\n"); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A1.js deleted file mode 100644 index 9bc9f7dfc..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A1.js +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.5_A1; - * @section: 15.8.2.5; - * @assertion: If either x or y is NaN, Math(x,y) is NaN; - * @description: Checking if Math.atan2(NaN,y) and Math.atan2(x,NaN) is NaN for different x and y values; - */ - -// CHECK#1 - -vals = new Array(); -vals[0] = -Infinity; -vals[1] = -0.000000000000001; -vals[2] = -0; -vals[3] = +0 -vals[4] = 0.000000000000001; -vals[5] = +Infinity; -vals[6] = NaN; -valnum = 7; - -args = new Array(); -for (i = 0; i < 2; i++) -{ - args[i] = NaN; - for (j = 0; j < valnum; j++) - { - args[1-i] = vals[j]; - if (!isNaN(Math.atan2(args[0], args[1]))) - { - $ERROR("#1: isNaN(Math.atan2(" + args[0] + ", " + args[1] + ")) === false'"); - } - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A10.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A10.js deleted file mode 100644 index 090b6f680..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A10.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.5_A10; - * @section: 15.8.2.5; - * @assertion: If y is -0 and x is -0, Math.atan2(y,x) is an implementation-dependent approximation to -PI; - * @description: Checking if Math.atan2(-0,-0) is an approximation to -PI; - */ - -$INCLUDE("math_precision.js"); -$INCLUDE("math_isequal.js"); - -// CHECK#1 -//prec = 0.00000000000001; -y = -0; -x = -0; -if (!isEqual(Math.atan2(y,x), -Math.PI)) - $ERROR("#1: !isEqual(Math.atan2(-0,-0), -Math.PI)"); diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A11.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A11.js deleted file mode 100644 index c90887297..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A11.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.5_A11; - * @section: 15.8.2.5; - * @assertion: If y is equal to -0 and x<0, Math.atan2(y,x) is an implementation-dependent approximation to -PI; - * @description: Checking if Math.atan2(-0,x) is an approximation to -PI, where x<0; - */ - -$INCLUDE("math_precision.js"); -$INCLUDE("math_isequal.js"); - -// CHECK#1 -y = -0; -//prec = 0.00000000000001; -x = new Array(); -x[0] = -0.000000000000001; -x[2] = -Infinity; -x[1] = -1; -xnum = 3; - -for (i = 0; i < xnum; i++) -{ - if (!isEqual(Math.atan2(y,x[i]), - Math.PI)) - $FAIL("#1: Math.abs(Math.atan2(" + y + ", " + x[i] + ") + Math.PI) >= " + prec); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A12.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A12.js deleted file mode 100644 index 4828c427e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A12.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.5_A12; - * @section: 15.8.2.5; - * @assertion: If y<0 and x is +0, Math.atan2(y,x) is an implementation-dependent approximation to -PI/2; - * @description: Checking if Math.atan2(y,+0) is an approximation to -PI/2, where y<0; - */ - -$INCLUDE("math_precision.js"); -$INCLUDE("math_isequal.js"); - -// CHECK#1 -x = +0; -//prec = 0.00000000000001; -y = new Array(); -y[0] = -0.000000000000001; -y[2] = -Infinity; -y[1] = -1; -ynum = 3; - -for (i = 0; i < ynum; i++) -{ - if (!isEqual(Math.atan2(y[i],x), -(Math.PI)/2)) - $FAIL("#1: Math.abs(Math.atan2(" + y[i] + ", " + x + ") + ((Math.PI)/2)) >= " + prec); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A13.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A13.js deleted file mode 100644 index 77e8ac2ef..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A13.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.5_A13; - * @section: 15.8.2.5; - * @assertion: If y<0 and x is -0, Math.atan2(y,x) is an implementation-dependent approximation to -PI/2; - * @description: Checking if Math.atan2(y,-0) is an approximation to -PI/2, where y<0; - */ - -$INCLUDE("math_precision.js"); -$INCLUDE("math_isequal.js"); - -// CHECK#1 -x = -0; -//prec = 0.00000000000001; -y = new Array(); -y[0] = -0.000000000000001; -y[2] = -Infinity; -y[1] = -1; -ynum = 3; - -for (i = 0; i < ynum; i++) -{ - if (!isEqual(Math.atan2(y[i],x), -(Math.PI)/2)) - $FAIL("#1: Math.abs(Math.atan2(" + y[i] + ", -0) + ((Math.PI)/2)) >= " + prec); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A14.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A14.js deleted file mode 100644 index 45d54e07d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A14.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.5_A14; - * @section: 15.8.2.5; - * @assertion: If y>0 and y is finite and x is equal to +Infinity, Math.atan2(y,x) is +0; - * @description: Checking if Math.atan2(y,x) equals to +0, where y>0 and y is finite and x is equal to +Infinity; - */ - -// CHECK#1 -x = +Infinity; -y = new Array(); -y[0] = 0.000000000000001; -y[1] = 1; -y[2] = 1.7976931348623157E308; //largest finite number -ynum = 3; - -for (i = 0; i < ynum; i++) -{ - if (Math.atan2(y[i],x) !== +0) - $FAIL("#1: Math.atan2(" + y[i] + ", " + x + ") !== +0"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A15.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A15.js deleted file mode 100644 index a42e7c21b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A15.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.5_A15; - * @section: 15.8.2.5; - * @assertion: If y>0 and y is finite and x is equal to -Infinity, Math.atan2(y,x) is an implementation-dependent approximation to +PI; - * @description: Checking if Math.atan2(y,x) is an approximation to +PI, where y>0 and y is finite and x is equal to -Infinity; - */ - -$INCLUDE("math_precision.js"); -$INCLUDE("math_isequal.js"); - -// CHECK#1 -x = -Infinity; -y = new Array(); -y[0] = 0.000000000000001; -y[1] = 1; -y[2] = 1.7976931348623157E308; //largest finite number -ynum = 3; - -for (i = 0; i < ynum; i++) -{ - if (!isEqual(Math.atan2(y[i],x),Math.PI)) - $FAIL("#1: Math.abs(Math.atan2(" + y[i] + ", " + x + ") - Math.PI) >= " + prec); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A16.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A16.js deleted file mode 100644 index c89fb0b66..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A16.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.5_A16; - * @section: 15.8.2.5; - * @assertion: If y<0 and y is finite and x is equal to +Infinity, Math.atan2(y,x) is -0; - * @description: Checking if Math.atan2(y,x) is -0, where y<0 and y is finite and x is equal to +Infinity; - */ - -// CHECK#1 -x = +Infinity; -y = new Array(); -y[0] = -0.000000000000001; -y[1] = -1; -y[2] = -1.7976931348623157E308; //largest by abs() finite number -ynum = 3; - -for (i = 0; i < ynum; i++) -{ - if (Math.atan2(y[i],x) !== -0) - $FAIL("#1: Math.atan2(" + y[i] + ", " + x + ") !== -0"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A17.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A17.js deleted file mode 100644 index 6a9e01aea..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A17.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.5_A17; - * @section: 15.8.2.5; - * @assertion: If y<0 and y is finite and x is equal to -Infinity, Math.atan2(y,x) is an implementation-dependent approximation to -PI; - * @description: Checking if Math.atan2(y,x) is an approximation to -PI, where y<0 and y is finite and x is equal to -Infinity; - */ - -$INCLUDE("math_precision.js"); -$INCLUDE("math_isequal.js"); - -// CHECK#1 -x = -Infinity; -y = new Array(); -y[0] = -0.000000000000001; -y[1] = -1; -y[2] = -1.7976931348623157E308; //largest (by module) finite number -ynum = 3; - -for (i = 0; i < ynum; i++) -{ - if (!isEqual(Math.atan2(y[i],x), -Math.PI)) - $FAIL("#1: Math.abs(Math.atan2(" + y[i] + ", " + x + ") + Math.PI) >= " + prec); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A18.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A18.js deleted file mode 100644 index 6fd88b008..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A18.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.5_A18; - * @section: 15.8.2.5; - * @assertion: If y is +Infinity and x is finite, Math.atan2(y,x) is an implementation-dependent approximation to +PI/2; - * @description: Checking if Math.atan2(y,x) is an approximation to +PI/2, where y is +Infinity and x is finite; - */ - -$INCLUDE("math_precision.js"); -$INCLUDE("math_isequal.js"); - -// CHECK#1 -y = +Infinity; -x = new Array(); -x[0] = 0.000000000000001; -x[1] = 1; -x[2] = 1.7976931348623157E308; //largest finite number -x[3] = -0.000000000000001; -x[4] = -1; -x[5] = -1.7976931348623157E308; //largest (by module) finite number - -xnum = 6; - -for (i = 0; i < xnum; i++) -{ - if (!isEqual(Math.atan2(y,x[i]), (Math.PI)/2)) - $FAIL("#1: Math.abs(Math.atan2(" + y + ", " + x[i] + ") - (Math.PI/2)) >= " + prec); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A19.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A19.js deleted file mode 100644 index e725a6a1d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A19.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.5_A19; - * @section: 15.8.2.5; - * @assertion: If y is -Infinity and x is finite, Math.atan2(y,x) is an implementation-dependent approximation to -PI/2; - * @description: Checking if Math.atan2(y,x) is an approximation to -PI/2, where y is -Infinity and x is finite; - */ - -$INCLUDE("math_precision.js"); -$INCLUDE("math_isequal.js"); - -// CHECK#1 -//prec = 0.00000000000001; -y = -Infinity; -x = new Array(); -x[0] = 0.000000000000001; -x[1] = 1; -x[2] = 1.7976931348623157E308; //largest finite number -x[3] = -0.000000000000001; -x[4] = -1; -x[5] = -1.7976931348623157E308; //largest (by module) finite number - -xnum = 6; - -for (i = 0; i < xnum; i++) -{ - if (!isEqual(Math.atan2(y,x[i]), -(Math.PI)/2)) - $FAIL("#1: Math.abs(Math.atan2(" + y + ", " + x[i] + ") + (Math.PI/2)) >= " + prec); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A2.js deleted file mode 100644 index 76924d39e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A2.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.5_A2; - * @section: 15.8.2.5; - * @assertion: If y>0 and x is +0, Math.atan2(y,x) is an implementation-dependent approximation to +PI/2; - * @description: Checking if Math.atan2(y,x) is an approximation to +PI/2, where y>0 and x is +0; - */ - -$INCLUDE("math_precision.js"); -$INCLUDE("math_isequal.js"); - -// CHECK#1 -x = +0; -//prec = 0.00000000000001; -y = new Array(); -y[0] = 0.000000000000001; -y[2] = +Infinity; -y[1] = 1; -ynum = 3; - -for (i = 0; i < ynum; i++) -{ - if (!isEqual(Math.atan2(y[i],x),(Math.PI)/2)) - $FAIL("#1: Math.abs(Math.atan2(" + y[i] + ", " + x + ") - ((Math.PI)/2)) >= " + prec); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A20.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A20.js deleted file mode 100644 index b9b6e77ed..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A20.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.5_A20; - * @section: 15.8.2.5; - * @assertion: If y is equal to +Infinity and x is equal to +Infinity, Math.atan2(y,x) is an implementation-dependent approximation to +PI/4; - * @description: Checking if Math.atan2(y,x) is an approximation to +PI/4, where y is equal to +Infinity and x is equal to +Infinity; - */ - -$INCLUDE("math_precision.js"); -$INCLUDE("math_isequal.js"); - -// CHECK#1 -//prec = 0.00000000000001; -y = +Infinity; -x = +Infinity; - -if (!isEqual(Math.atan2(y,x),(Math.PI)/4)) - $ERROR("#1: Math.abs(Math.atan2(" + y + ", " + x + ") - (Math.PI/4)) >= " + prec); diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A21.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A21.js deleted file mode 100644 index 14ea8dbcb..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A21.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.5_A21; - * @section: 15.8.2.5; - * @assertion: If y is equal to +Infinity and x is equal to -Infinity, Math.atan2(y,x) is an implementation-dependent approximation to +3*PI/4; - * @description: Checking if Math.atan2(y,x) is an approximation to +3*PI/4, where y is equal to +Infinity and x is equal to -Infinity; - */ - -$INCLUDE("math_precision.js"); -$INCLUDE("math_isequal.js"); - -// CHECK#1 -//prec = 0.00000000000001; -y = +Infinity; -x = -Infinity; - -if (!isEqual(Math.atan2(y,x), (3*Math.PI)/4)) - $ERROR("#1: Math.abs(Math.atan2(" + y + ", " + x + ") - (3*Math.PI/4)) >= " + prec); diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A22.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A22.js deleted file mode 100644 index bf346b7c1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A22.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.5_A22; - * @section: 15.8.2.5; - * @assertion: If y is equal to -Infinity and x is equal to +Infinity, Math.atan2(y,x) is an implementation-dependent approximation to -PI/4; - * @description: Checking if Math.atan2(y,x) is an approximation to -PI/4, where y is equal to -Infinity and x is equal to +Infinity; - */ - -$INCLUDE("math_precision.js"); -$INCLUDE("math_isequal.js"); - -// CHECK#1 -//prec = 0.00000000000001; -y = -Infinity; -x = +Infinity; - -if (!isEqual(Math.atan2(y,x),- (Math.PI)/4)) - $ERROR("#1: Math.abs(Math.atan2(" + y + ", " + x + ") + (Math.PI/4)) >= " + prec); diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A23.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A23.js deleted file mode 100644 index 169d79570..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A23.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.5_A23; - * @section: 15.8.2.5; - * @assertion: If y is equal to -Infinity and x is equal to -Infinity, Math.atan2(y,x) is an implementation-dependent approximation to -3*PI/4; - * @description: Checking if Math.atan2(y,x) is an approximation to -3*PI/4, where y is equal to -Infinity and x is equal to -Infinity; - */ - -$INCLUDE("math_precision.js"); -$INCLUDE("math_isequal.js"); - -// CHECK#1 -//prec = 0.00000000000001; -y = -Infinity; -x = -Infinity; - -if (!isEqual(Math.atan2(y,x), -(3*Math.PI)/4)) - $ERROR("#1: Math.abs(Math.atan2(" + y + ", " + x + ") + (3*Math.PI/4)) >= " + prec); diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A24.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A24.js deleted file mode 100644 index b6da3ded2..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A24.js +++ /dev/null @@ -1,226 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.5_A24; - * @section: 15.8.2.5; - * @assertion: Math.atan2, recommended that implementations use the approximation algorithms for IEEE 754 arithmetic contained in fdlibm; - * @description: Checking if Math.atan2(argument1, argument2) is approximately equals to its mathematical values on the set of 64 argument1 values and 64 argument2 values; all the sample values is calculated with LibC; - */ - -$INCLUDE("math_precision.js"); -$INCLUDE("math_isequal.js"); - -// CHECK#1 -vnum = 64; -var x1 = new Array(); -x1[0] = -16.00000000000000000000; -x1[1] = -15.49206349206349200000; -x1[2] = -14.98412698412698400000; -x1[3] = -14.47619047619047600000; -x1[4] = -13.96825396825396800000; -x1[5] = -13.46031746031746000000; -x1[6] = -12.95238095238095300000; -x1[7] = -12.44444444444444500000; -x1[8] = -11.93650793650793700000; -x1[9] = -11.42857142857142900000; -x1[10] = -10.92063492063492100000; -x1[11] = -10.41269841269841300000; -x1[12] = -9.90476190476190510000; -x1[13] = -9.39682539682539720000; -x1[14] = -8.88888888888888930000; -x1[15] = -8.38095238095238140000; -x1[16] = -7.87301587301587350000; -x1[17] = -7.36507936507936560000; -x1[18] = -6.85714285714285770000; -x1[19] = -6.34920634920634970000; -x1[20] = -5.84126984126984180000; -x1[21] = -5.33333333333333390000; -x1[22] = -4.82539682539682600000; -x1[23] = -4.31746031746031810000; -x1[24] = -3.80952380952381020000; -x1[25] = -3.30158730158730230000; -x1[26] = -2.79365079365079440000; -x1[27] = -2.28571428571428650000; -x1[28] = -1.77777777777777860000; -x1[29] = -1.26984126984127070000; -x1[30] = -0.76190476190476275000; -x1[31] = -0.25396825396825484000; -x1[32] = 0.25396825396825307000; -x1[33] = 0.76190476190476275000; -x1[34] = 1.26984126984126890000; -x1[35] = 1.77777777777777860000; -x1[36] = 2.28571428571428470000; -x1[37] = 2.79365079365079440000; -x1[38] = 3.30158730158730050000; -x1[39] = 3.80952380952381020000; -x1[40] = 4.31746031746031630000; -x1[41] = 4.82539682539682600000; -x1[42] = 5.33333333333333210000; -x1[43] = 5.84126984126984180000; -x1[44] = 6.34920634920634800000; -x1[45] = 6.85714285714285770000; -x1[46] = 7.36507936507936380000; -x1[47] = 7.87301587301587350000; -x1[48] = 8.38095238095237960000; -x1[49] = 8.88888888888888930000; -x1[50] = 9.39682539682539540000; -x1[51] = 9.90476190476190510000; -x1[52] = 10.41269841269841100000; -x1[53] = 10.92063492063492100000; -x1[54] = 11.42857142857142700000; -x1[55] = 11.93650793650793700000; -x1[56] = 12.44444444444444300000; -x1[57] = 12.95238095238095300000; -x1[58] = 13.46031746031745900000; -x1[59] = 13.96825396825396800000; -x1[60] = 14.47619047619047400000; -x1[61] = 14.98412698412698400000; -x1[62] = 15.49206349206349000000; -x1[63] = 16.00000000000000000000; - - -var x2 = new Array(); -x2[0] = -8.00000000000000000000; -x2[1] = -7.74603174603174600000; -x2[2] = -7.49206349206349210000; -x2[3] = -7.23809523809523810000; -x2[4] = -6.98412698412698420000; -x2[5] = -6.73015873015873020000; -x2[6] = -6.47619047619047630000; -x2[7] = -6.22222222222222230000; -x2[8] = -5.96825396825396840000; -x2[9] = -5.71428571428571440000; -x2[10] = -5.46031746031746050000; -x2[11] = -5.20634920634920650000; -x2[12] = -4.95238095238095260000; -x2[13] = -4.69841269841269860000; -x2[14] = -4.44444444444444460000; -x2[15] = -4.19047619047619070000; -x2[16] = -3.93650793650793670000; -x2[17] = -3.68253968253968280000; -x2[18] = -3.42857142857142880000; -x2[19] = -3.17460317460317490000; -x2[20] = -2.92063492063492090000; -x2[21] = -2.66666666666666700000; -x2[22] = -2.41269841269841300000; -x2[23] = -2.15873015873015910000; -x2[24] = -1.90476190476190510000; -x2[25] = -1.65079365079365110000; -x2[26] = -1.39682539682539720000; -x2[27] = -1.14285714285714320000; -x2[28] = -0.88888888888888928000; -x2[29] = -0.63492063492063533000; -x2[30] = -0.38095238095238138000; -x2[31] = -0.12698412698412742000; -x2[32] = 0.12698412698412653000; -x2[33] = 0.38095238095238138000; -x2[34] = 0.63492063492063444000; -x2[35] = 0.88888888888888928000; -x2[36] = 1.14285714285714230000; -x2[37] = 1.39682539682539720000; -x2[38] = 1.65079365079365030000; -x2[39] = 1.90476190476190510000; -x2[40] = 2.15873015873015820000; -x2[41] = 2.41269841269841300000; -x2[42] = 2.66666666666666610000; -x2[43] = 2.92063492063492090000; -x2[44] = 3.17460317460317400000; -x2[45] = 3.42857142857142880000; -x2[46] = 3.68253968253968190000; -x2[47] = 3.93650793650793670000; -x2[48] = 4.19047619047618980000; -x2[49] = 4.44444444444444460000; -x2[50] = 4.69841269841269770000; -x2[51] = 4.95238095238095260000; -x2[52] = 5.20634920634920560000; -x2[53] = 5.46031746031746050000; -x2[54] = 5.71428571428571350000; -x2[55] = 5.96825396825396840000; -x2[56] = 6.22222222222222140000; -x2[57] = 6.47619047619047630000; -x2[58] = 6.73015873015872930000; -x2[59] = 6.98412698412698420000; -x2[60] = 7.23809523809523720000; -x2[61] = 7.49206349206349210000; -x2[62] = 7.74603174603174520000; -x2[63] = 8.00000000000000000000; - - -var y = new Array(); -y[0] = -2.03444393579570270000; -y[1] = -2.03444393579570270000; -y[2] = -2.03444393579570270000; -y[3] = -2.03444393579570270000; -y[4] = -2.03444393579570270000; -y[5] = -2.03444393579570270000; -y[6] = -2.03444393579570270000; -y[7] = -2.03444393579570270000; -y[8] = -2.03444393579570270000; -y[9] = -2.03444393579570270000; -y[10] = -2.03444393579570270000; -y[11] = -2.03444393579570270000; -y[12] = -2.03444393579570270000; -y[13] = -2.03444393579570270000; -y[14] = -2.03444393579570270000; -y[15] = -2.03444393579570270000; -y[16] = -2.03444393579570270000; -y[17] = -2.03444393579570270000; -y[18] = -2.03444393579570270000; -y[19] = -2.03444393579570270000; -y[20] = -2.03444393579570270000; -y[21] = -2.03444393579570270000; -y[22] = -2.03444393579570270000; -y[23] = -2.03444393579570270000; -y[24] = -2.03444393579570270000; -y[25] = -2.03444393579570270000; -y[26] = -2.03444393579570270000; -y[27] = -2.03444393579570270000; -y[28] = -2.03444393579570270000; -y[29] = -2.03444393579570270000; -y[30] = -2.03444393579570270000; -y[31] = -2.03444393579570270000; -y[32] = 1.10714871779409040000; -y[33] = 1.10714871779409040000; -y[34] = 1.10714871779409040000; -y[35] = 1.10714871779409040000; -y[36] = 1.10714871779409040000; -y[37] = 1.10714871779409040000; -y[38] = 1.10714871779409040000; -y[39] = 1.10714871779409040000; -y[40] = 1.10714871779409040000; -y[41] = 1.10714871779409040000; -y[42] = 1.10714871779409040000; -y[43] = 1.10714871779409040000; -y[44] = 1.10714871779409040000; -y[45] = 1.10714871779409040000; -y[46] = 1.10714871779409040000; -y[47] = 1.10714871779409040000; -y[48] = 1.10714871779409040000; -y[49] = 1.10714871779409040000; -y[50] = 1.10714871779409040000; -y[51] = 1.10714871779409040000; -y[52] = 1.10714871779409040000; -y[53] = 1.10714871779409040000; -y[54] = 1.10714871779409040000; -y[55] = 1.10714871779409040000; -y[56] = 1.10714871779409040000; -y[57] = 1.10714871779409040000; -y[58] = 1.10714871779409040000; -y[59] = 1.10714871779409040000; -y[60] = 1.10714871779409040000; -y[61] = 1.10714871779409040000; -y[62] = 1.10714871779409040000; -y[63] = 1.10714871779409040000; - - - -var val; -for (i = 0; i < vnum; i++) -{ - val = Math.atan2(x1[i], x2[i]); - if (!isEqual(val, y[i])) - { - $ERROR("\nx1 = " + x1[i] + "\nx2 = " + x2[i] + "\nlibc.atan2(x1,x2) = " + y[i] + "\nMath.atan2(x1,x2) = " + Math.atan2(x1[i],x2[i]) + "\nMath.abs(libc.atan2(x1,x2) - Math.atan2(x1,x2)) > " + prec + "\n\n"); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A3.js deleted file mode 100644 index 91f81c34b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A3.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.5_A3; - * @section: 15.8.2.5; - * @assertion: If y>0 and x is -0, Math.atan2(y,x) is an implementation-dependent approximation to +PI/2; - * @description: Checking if Math.atan2(y,x) is an approximation to +PI/2, where y>0 and x is -0; - */ - -$INCLUDE("math_precision.js"); -$INCLUDE("math_isequal.js"); - -// CHECK#1 -x = -0; -//prec = 0.00000000000001; -y = new Array(); -y[0] = 0.000000000000001; -y[2] = +Infinity; -y[1] = 1; -ynum = 3; - -for (i = 0; i < ynum; i++) -{ - if (!isEqual(Math.atan2(y[i],x), (Math.PI)/2)) - $FAIL("#1: Math.abs(Math.atan2(" + y[i] + ", " + x + ") - ((Math.PI)/2)) >= " + prec); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A4.js deleted file mode 100644 index b97cafadf..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A4.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.5_A4; - * @section: 15.8.2.5; - * @assertion: If y is +0 and x>0, Math.atan2(y,x) is +0; - * @description: Checking if Math.atan2(y,x) equals to +0, where y is +0 and x>0; - */ - -// CHECK#1 -y = +0; -x = new Array(); -x[0] = 0.000000000000001; -x[2] = +Infinity; -x[1] = 1; -xnum = 3; - -for (i = 0; i < xnum; i++) -{ - if (Math.atan2(y,x[i]) !== +0) - $FAIL("#1: Math.atan2(" + y + ", " + x[i] + ") !== +0"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A5.js deleted file mode 100644 index cbef4e9fc..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A5.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.5_A5; - * @section: 15.8.2.5; - * @assertion: If y is +0 and x is +0, Math.atan2(y,x) is +0; - * @description: Checking if Math.atan2(y,x) is +0, where y is +0 and x is +0; - */ - -// CHECK#1 -y = +0; -x = +0; -if (Math.atan2(y,x) !== +0) - $ERROR("#1: Math.atan2(" + y + ", " + x + ") !== +0"); diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A6.js deleted file mode 100644 index 8c4857d38..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A6.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.5_A6; - * @section: 15.8.2.5; - * @assertion: If y is +0 and x is -0, Math.atan2(y,x) is an implementation-dependent approximation to +PI; - * @description: Checking if Math.atan2(y,x) is an approximation to +PI, where y is +0 and x is -0; - */ - -$INCLUDE("math_precision.js"); -$INCLUDE("math_isequal.js"); - -// CHECK#1 -//prec = 0.00000000000001; -y = +0; -x = -0; -if (!isEqual(Math.atan2(y,x), Math.PI)) - $ERROR("#1: Math.abs(Math.atan2(" + y + ", -0) - Math.PI) >= " + prec); diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A7.js deleted file mode 100644 index d1cc2dbdd..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A7.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.5_A7; - * @section: 15.8.2.5; - * @assertion: If y is equal to +0 and x<0, Math.atan2(y,x) is an implementation-dependent approximation to +PI; - * @description: Checking if Math.atan2(y,x) is an approximation to +PI, where y is equal to +0 and x<0; - */ - -$INCLUDE("math_precision.js"); -$INCLUDE("math_isequal.js"); - -// CHECK#1 -y = +0; -//prec = 0.00000000000001; -x = new Array(); -x[0] = -0.000000000000001; -x[2] = -Infinity; -x[1] = -1; -xnum = 3; - -for (i = 0; i < xnum; i++) -{ - if (!isEqual(Math.atan2(y,x[i]), Math.PI)) - $FAIL("#1: Math.abs(Math.atan2(" + y + ", " + x[i] + ") - Math.PI) >= " + prec); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A8.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A8.js deleted file mode 100644 index 8584cade8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A8.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.5_A8; - * @section: 15.8.2.5; - * @assertion: If y is equal to -0 and x>0, Math.atan2(y,x) is -0; - * @description: Checking if Math.atan2(y,x) is -0, where y is equal to -0 and x>0; - */ - -// CHECK#1 -y = -0; -x = new Array(); -x[0] = 0.000000000000001; -x[2] = +Infinity; -x[1] = 1; -xnum = 3; - -for (i = 0; i < xnum; i++) -{ - if (Math.atan2(y,x[i]) !== -0) - $FAIL("#1: Math.atan2(" + y + ", " + x[i] + ") !== -0"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A9.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A9.js deleted file mode 100644 index d70b55ee1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.5_atan2/S15.8.2.5_A9.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.5_A9; - * @section: 15.8.2.5; - * @assertion: If y is -0 and x is +0, Math.atan2(y,x) is -0; - * @description: Checking if Math.atan2(y,x) is -0, where y is -0 and x is +0; - */ - -// CHECK#1 -y = -0; -x = +0; -if (Math.atan2(y,x) !== -0) - $ERROR("#1: Math.atan2(" + y + ", " + x + ") !== -0"); diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.6_ceil/S15.8.2.6_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.6_ceil/S15.8.2.6_A1.js deleted file mode 100644 index 3c9cb6b3a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.6_ceil/S15.8.2.6_A1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.6_A1; - * @section: 15.8.2.6; - * @assertion: If x is NaN, Math.ceil(x) is NaN; - * @description: Checking if Math.ceil(NaN) is NaN; - */ - -// CHECK#1 -var x = NaN; -if (!isNaN(Math.ceil(x))) -{ - $ERROR("#1: 'var x=NaN; isNaN(Math.ceil(x)) === false'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.6_ceil/S15.8.2.6_A2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.6_ceil/S15.8.2.6_A2.js deleted file mode 100644 index b514d1d42..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.6_ceil/S15.8.2.6_A2.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.6_A2; - * @section: 15.8.2.6; - * @assertion: If x is +0, Math.ceil(x) is +0; - * @description: Checking if Math.ceil(x) is +0, where x is +0; - */ - -// CHECK#1 -var x = +0; -if (Math.ceil(x) !== +0) -{ - $ERROR("#1: 'var x = +0; Math.ceil(x) !== +0'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.6_ceil/S15.8.2.6_A3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.6_ceil/S15.8.2.6_A3.js deleted file mode 100644 index abcd9653e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.6_ceil/S15.8.2.6_A3.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.6_A3; - * @section: 15.8.2.6; - * @assertion: If x is -0, Math.ceil(x) is -0; - * @description: Checking if Math.ceil(x) is -0, where x is -0; - */ - -// CHECK#1 -var x = -0; -if (Math.ceil(x) !== -0) -{ - $ERROR("#1: 'var x = -0; Math.ceil(x) !== -0'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.6_ceil/S15.8.2.6_A4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.6_ceil/S15.8.2.6_A4.js deleted file mode 100644 index e0eebde29..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.6_ceil/S15.8.2.6_A4.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.6_A4; - * @section: 15.8.2.6; - * @assertion: If x is +Infinity, Math.ceil(x) is +Infinity; - * @description: Checking if Math.ceil(x) is +Infinity, where x is +Infinity; - */ - -// CHECK#1 -var x = +Infinity; -if (Math.ceil(x) !== +Infinity) -{ - $ERROR("#1: 'var x = +Infinity; Math.ceil(x) !== +Infinity'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.6_ceil/S15.8.2.6_A5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.6_ceil/S15.8.2.6_A5.js deleted file mode 100644 index 2a5bf87e3..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.6_ceil/S15.8.2.6_A5.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.6_A5; - * @section: 15.8.2.6; - * @assertion: If x is -Infinity, Math.ceil(x) is -Infinity; - * @description: Checking if Math.ceil(x) is -Infinity, where x is -Infinity; - */ - -// CHECK#1 -var x = -Infinity; -if (Math.ceil(x) !== -Infinity) -{ - $ERROR("#1: 'var x = -Infinity; Math.ceil(x) !== -Infinity'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.6_ceil/S15.8.2.6_A6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.6_ceil/S15.8.2.6_A6.js deleted file mode 100644 index b2af7bd6c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.6_ceil/S15.8.2.6_A6.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.6_A6; - * @section: 15.8.2.6; - * @assertion: If x is less than 0 but greater than -1, Math.ceil(x) is -0; - * @description: Checking if Math.ceil(x) is -0, where x is less than 0 but greater than -1; - */ - -// CHECK#1 -var x = -0.000000000000001; -if (Math.ceil(x) !== -0) -{ - $ERROR("#1: 'var x = -0.000000000000001; Math.ceil(x) !== -0'"); -} - -// CHECK#2 -var x = -0.999999999999999; -if (Math.ceil(x) !== -0) -{ - $ERROR("#2: 'var x = -0.999999999999999; Math.ceil(x) !== -0'"); -} - -// CHECK#3 -var x = -0.5; -if (Math.ceil(x) !== -0) -{ - $ERROR("#3: 'var x = -0.5; Math.ceil(x) !== -0'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.6_ceil/S15.8.2.6_A7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.6_ceil/S15.8.2.6_A7.js deleted file mode 100644 index 548c99a85..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.6_ceil/S15.8.2.6_A7.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.6_A7; - * @section: 15.8.2.6; - * @assertion: The value of Math.ceil(x) is the same as the value of -Math.floor(-x); - * @description: Checking if Math.ceil(x) equals to -Math.floor(-x) on 2000 floating point argument values; - */ - -// CHECK#1 -for (i=-1000; i<1000; i++) -{ - x = i/10.0; - if (Math.ceil(x) !== -Math.floor(-x)) - { - $ERROR("#1: 'x = " + x + "; Math.ceil(x) !== -Math.floor(-x)'"); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.7_cos/S15.8.2.7_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.7_cos/S15.8.2.7_A1.js deleted file mode 100644 index e3af43e29..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.7_cos/S15.8.2.7_A1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.7_A1; - * @section: 15.8.2.7; - * @assertion: If x is NaN, Math.cos(x) is NaN; - * @description: Checking if Math.cos(NaN) is NaN; - */ - -// CHECK#1 -var x = NaN; -if (!isNaN(Math.cos(x))) -{ - $ERROR("#1: 'var x=NaN; isNaN(Math.cos(x)) === false'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.7_cos/S15.8.2.7_A2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.7_cos/S15.8.2.7_A2.js deleted file mode 100644 index dab7d39c5..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.7_cos/S15.8.2.7_A2.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.7_A2; - * @section: 15.8.2.7; - * @assertion: If x is +0, Math.cos(x) is 1; - * @description: Checking if Math.cos(+0) is 1; - */ - -// CHECK#1 -var x = +0; -if (Math.cos(x) !== 1) -{ - $ERROR("#1: 'var x = +0; Math.cos(x) !== 1'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.7_cos/S15.8.2.7_A3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.7_cos/S15.8.2.7_A3.js deleted file mode 100644 index d3b8290e4..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.7_cos/S15.8.2.7_A3.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.7_A3; - * @section: 15.8.2.7; - * @assertion: If x is -0, Math.cos(x) is 1; - * @description: Checking if Math.cos(-0) is 1; - */ - -// CHECK#1 -var x = -0; -if (Math.cos(x) !== 1) -{ - $ERROR("#1: 'var x = -0; Math.cos(x) !== 1'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.7_cos/S15.8.2.7_A4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.7_cos/S15.8.2.7_A4.js deleted file mode 100644 index 12bdfac57..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.7_cos/S15.8.2.7_A4.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.7_A4; - * @section: 15.8.2.7; - * @assertion: If x is +Infinity, Math.cos(x) is NaN; - * @description: Checking if Math.cos(+Infinity) is NaN; - */ - -// CHECK#1 -var x = +Infinity; -if (!isNaN(Math.cos(x))) -{ - $ERROR("#1: 'var x = +Infinity; isNaN(Math.cos(x)) === false'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.7_cos/S15.8.2.7_A5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.7_cos/S15.8.2.7_A5.js deleted file mode 100644 index 4a9a465f0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.7_cos/S15.8.2.7_A5.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.7_A5; - * @section: 15.8.2.7; - * @assertion: If x is -Infinity, Math.cos(x) is NaN; - * @description: Checking if Math.cos(-Infinity) is NaN; - */ - -// CHECK#1 -var x = -Infinity; -if (!isNaN(Math.cos(x))) -{ - $ERROR("#1: 'var x = -Infinity; isNaN(Math.cos(x)) === false'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.7_cos/S15.8.2.7_A6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.7_cos/S15.8.2.7_A6.js deleted file mode 100644 index 8e624dc8f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.7_cos/S15.8.2.7_A6.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.7_A6; - * @section: 15.8.2.7; - * @assertion: Cosine is a periodic function with period 2*PI; - * @description: Checking if Math.cos(x) equals to Math.cos(x+n*2*Math.PI) with precision 0.000000000003, where n is an integer from 1 to 100 and x is one of 10 float point values from -Math.PI to +Math.PI; - */ - -// CHECK#1 - prec = 0.000000000003; -//prec = 0.000000000000001; -period = 2*Math.PI; -pernum = 100; - -a = -pernum * period; -b = pernum * period; -snum = 9; -step = period/snum + 0.0; -x = new Array(); -for (i = 0; i < snum; i++) -{ - x[i] = a + i*step; -} -x[9] = a + period; - -var curval; -var curx; -var j; -for (i = 0; i < snum; i++) -{ - curval = Math.cos(x[i]); - curx = x[i] + period; - j = 0; - while (curx <= b) - { - curx += period; - j++; - if (Math.abs(Math.cos(curx) - curval) >= prec) - { - $FAIL("#1: cos is found out to not be periodic:\n Math.abs(Math.cos(" + x[i] + ") - Math.cos(" + x[i] + " + 2*Math.PI*" + j + ")) >= " + prec + "\n Math.cos(" + x[i] + ") === " + curval + "\n Math.cos(" + curx + ") === " + Math.cos(curx)); - } - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.7_cos/S15.8.2.7_A7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.7_cos/S15.8.2.7_A7.js deleted file mode 100644 index 8ea0cf813..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.7_cos/S15.8.2.7_A7.js +++ /dev/null @@ -1,158 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.7_A7; - * @section: 15.8.2.7; - * @assertion: Math.cos it is recommended that implementations use the approximation algorithms for IEEE 754 arithmetic contained in fdlibm; - * @description: Checking if Math.cos is approximately equals to its mathematical values on the set of 64 argument values; all the sample values is calculated with LibC; - */ - -$INCLUDE("math_precision.js"); -$INCLUDE("math_isequal.js"); - -// CHECK#1 -vnum = 64; -var x = new Array(); -x[0] = -3.14159265358979310000; -x[1] = -3.04185955347583150000; -x[2] = -2.94212645336186980000; -x[3] = -2.84239335324790820000; -x[4] = -2.74266025313394660000; -x[5] = -2.64292715301998450000; -x[6] = -2.54319405290602290000; -x[7] = -2.44346095279206120000; -x[8] = -2.34372785267809960000; -x[9] = -2.24399475256413790000; -x[10] = -2.14426165245017630000; -x[11] = -2.04452855233621470000; -x[12] = -1.94479545222225280000; -x[13] = -1.84506235210829120000; -x[14] = -1.74532925199432950000; -x[15] = -1.64559615188036790000; -x[16] = -1.54586305176640600000; -x[17] = -1.44612995165244440000; -x[18] = -1.34639685153848280000; -x[19] = -1.24666375142452110000; -x[20] = -1.14693065131055950000; -x[21] = -1.04719755119659740000; -x[22] = -0.94746445108263622000; -x[23] = -0.84773135096867458000; -x[24] = -0.74799825085471250000; -x[25] = -0.64826515074075086000; -x[26] = -0.54853205062678922000; -x[27] = -0.44879895051282759000; -x[28] = -0.34906585039886595000; -x[29] = -0.24933275028490431000; -x[30] = -0.14959965017094268000; -x[31] = -0.04986655005698104000; -x[32] = 0.04986655005698104000; -x[33] = 0.14959965017094268000; -x[34] = 0.24933275028490431000; -x[35] = 0.34906585039886595000; -x[36] = 0.44879895051282759000; -x[37] = 0.54853205062678922000; -x[38] = 0.64826515074075086000; -x[39] = 0.74799825085471250000; -x[40] = 0.84773135096867414000; -x[41] = 0.94746445108263533000; -x[42] = 1.04719755119659830000; -x[43] = 1.14693065131055950000; -x[44] = 1.24666375142452070000; -x[45] = 1.34639685153848280000; -x[46] = 1.44612995165244400000; -x[47] = 1.54586305176640600000; -x[48] = 1.64559615188036810000; -x[49] = 1.74532925199432930000; -x[50] = 1.84506235210829140000; -x[51] = 1.94479545222225260000; -x[52] = 2.04452855233621470000; -x[53] = 2.14426165245017670000; -x[54] = 2.24399475256413790000; -x[55] = 2.34372785267810000000; -x[56] = 2.44346095279206120000; -x[57] = 2.54319405290602240000; -x[58] = 2.64292715301998450000; -x[59] = 2.74266025313394660000; -x[60] = 2.84239335324790780000; -x[61] = 2.94212645336186980000; -x[62] = 3.04185955347583100000; -x[63] = 3.14159265358979310000; - - -var y = new Array(); -y[0] = -1.00000000000000000000; -y[1] = -0.99503077536540141000; -y[2] = -0.98017248784854383000; -y[3] = -0.95557280578614079000; -y[4] = -0.92147621187040774000; -y[5] = -0.87822157337022844000; -y[6] = -0.82623877431599468000; -y[7] = -0.76604444311897790000; -y[8] = -0.69823681808607274000; -y[9] = -0.62348980185873348000; -y[10] = -0.54254626386575933000; -y[11] = -0.45621065735316296000; -y[12] = -0.36534102436639487000; -y[13] = -0.27084046814300500000; -y[14] = -0.17364817766693030000; -y[15] = -0.07473009358642426800; -y[16] = 0.02493069173807303500; -y[17] = 0.12434370464748527000; -y[18] = 0.22252093395631445000; -y[19] = 0.31848665025168443000; -y[20] = 0.41128710313061151000; -y[21] = 0.50000000000000033000; -y[22] = 0.58374367223478973000; -y[23] = 0.66168583759685928000; -y[24] = 0.73305187182982645000; -y[25] = 0.79713250722292250000; -y[26] = 0.85329088163215572000; -y[27] = 0.90096886790241915000; -y[28] = 0.93969262078590832000; -y[29] = 0.96907728622907796000; -y[30] = 0.98883082622512852000; -y[31] = 0.99875692121892234000; -y[32] = 0.99875692121892234000; -y[33] = 0.98883082622512852000; -y[34] = 0.96907728622907796000; -y[35] = 0.93969262078590832000; -y[36] = 0.90096886790241915000; -y[37] = 0.85329088163215572000; -y[38] = 0.79713250722292250000; -y[39] = 0.73305187182982645000; -y[40] = 0.66168583759685962000; -y[41] = 0.58374367223479051000; -y[42] = 0.49999999999999950000; -y[43] = 0.41128710313061151000; -y[44] = 0.31848665025168482000; -y[45] = 0.22252093395631445000; -y[46] = 0.12434370464748572000; -y[47] = 0.02493069173807303500; -y[48] = -0.07473009358642449000; -y[49] = -0.17364817766693008000; -y[50] = -0.27084046814300522000; -y[51] = -0.36534102436639465000; -y[52] = -0.45621065735316296000; -y[53] = -0.54254626386575977000; -y[54] = -0.62348980185873348000; -y[55] = -0.69823681808607307000; -y[56] = -0.76604444311897790000; -y[57] = -0.82623877431599446000; -y[58] = -0.87822157337022844000; -y[59] = -0.92147621187040774000; -y[60] = -0.95557280578614057000; -y[61] = -0.98017248784854383000; -y[62] = -0.99503077536540141000; -y[63] = -1.00000000000000000000; - - -var val; -for (i = 0; i < vnum; i++) -{ - val = Math.cos(x[i]); - if (!isEqual(val, y[i])) - { - $ERROR("\nx = " + x[i] + "\nlibc.cos(x) = " + y[i] + "\nMath.cos(x) = " + Math.cos(x[i]) + "\nMath.abs(libc.cos(x) - Math.cos(x)) > " + prec + "\n\n"); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.8_exp/S15.8.2.8_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.8_exp/S15.8.2.8_A1.js deleted file mode 100644 index 4fad83203..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.8_exp/S15.8.2.8_A1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.8_A1; - * @section: 15.8.2.8; - * @assertion: If x is NaN, Math.exp(x) is NaN; - * @description: Checking if Math.exp(NaN) is NaN; - */ - -// CHECK#1 -var x = NaN; -if (!isNaN(Math.exp(x))) -{ - $ERROR("#1: 'var x=NaN; isNaN(Math.exp(x)) === false'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.8_exp/S15.8.2.8_A2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.8_exp/S15.8.2.8_A2.js deleted file mode 100644 index 1ca3b9a9d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.8_exp/S15.8.2.8_A2.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.8_A2; - * @section: 15.8.2.8; - * @assertion: If x is +0, Math.exp(x) is 1; - * @description: Checking if Math.exp(+0) is 1; - */ - -// CHECK#1 -var x = +0; -if (Math.exp(x) !== 1) -{ - $ERROR("#1: 'var x = +0; Math.exp(x) !== 1'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.8_exp/S15.8.2.8_A3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.8_exp/S15.8.2.8_A3.js deleted file mode 100644 index f4ebf711e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.8_exp/S15.8.2.8_A3.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.8_A3; - * @section: 15.8.2.8; - * @assertion: If x is -0, Math.exp(x) is 1; - * @description: Checking if Math.exp(-0) is 1; - */ - -// CHECK#1 -var x = -0; -if (Math.exp(x) !== 1) -{ - $ERROR("#1: 'var x = -0; Math.exp(x) !== 1'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.8_exp/S15.8.2.8_A4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.8_exp/S15.8.2.8_A4.js deleted file mode 100644 index efd0b400b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.8_exp/S15.8.2.8_A4.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.8_A4; - * @section: 15.8.2.8; - * @assertion: If x is +Infinity, Math.exp(x) is +Ifinity; - * @description: Checking if Math.exp(+Infinity) is +Ifinity - */ - -// CHECK#1 -var x = +Infinity; -if (Math.exp(x) !== +Infinity) -{ - $ERROR("#1: 'var x = +Infinity; Math.exp(x) !== +Infinity'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.8_exp/S15.8.2.8_A5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.8_exp/S15.8.2.8_A5.js deleted file mode 100644 index de4172dd0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.8_exp/S15.8.2.8_A5.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.8_A5; - * @section: 15.8.2.8; - * @assertion: If x is -Infinity, Math.exp(x) is +0; - * @description: Checking if Math.exp(-Infinity) is +0; - */ - -// CHECK#1 -var x = -Infinity; -if (Math.exp(x) !== +0) -{ - $ERROR("#1: 'var x = -Infinity; Math.exp(x) !== +0'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.8_exp/S15.8.2.8_A6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.8_exp/S15.8.2.8_A6.js deleted file mode 100644 index 74d8a618d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.8_exp/S15.8.2.8_A6.js +++ /dev/null @@ -1,160 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.8_A6; - * @section: 15.8.2.8; - * @assertion: Math.exp, recommended that implementations use the approximation algorithms for IEEE 754 arithmetic contained in fdlibm; - * @description: Checking if Math.exp is approximately equals to its mathematical values on the set of 64 argument values; all the sample values is calculated with LibC; - */ - -$INCLUDE("math_precision.js"); -$INCLUDE("math_isequal.js"); - -// CHECK#1 -vnum = 64; -var x = new Array(); -x[0] = -16.00000000000000000000; -x[1] = -15.49206349206349200000; -x[2] = -14.98412698412698400000; -x[3] = -14.47619047619047600000; -x[4] = -13.96825396825396800000; -x[5] = -13.46031746031746000000; -x[6] = -12.95238095238095300000; -x[7] = -12.44444444444444500000; -x[8] = -11.93650793650793700000; -x[9] = -11.42857142857142900000; -x[10] = -10.92063492063492100000; -x[11] = -10.41269841269841300000; -x[12] = -9.90476190476190510000; -x[13] = -9.39682539682539720000; -x[14] = -8.88888888888888930000; -x[15] = -8.38095238095238140000; -x[16] = -7.87301587301587350000; -x[17] = -7.36507936507936560000; -x[18] = -6.85714285714285770000; -x[19] = -6.34920634920634970000; -x[20] = -5.84126984126984180000; -x[21] = -5.33333333333333390000; -x[22] = -4.82539682539682600000; -x[23] = -4.31746031746031810000; -x[24] = -3.80952380952381020000; -x[25] = -3.30158730158730230000; -x[26] = -2.79365079365079440000; -x[27] = -2.28571428571428650000; -x[28] = -1.77777777777777860000; -x[29] = -1.26984126984127070000; -x[30] = -0.76190476190476275000; -x[31] = -0.25396825396825484000; -x[32] = 0.25396825396825307000; -x[33] = 0.76190476190476275000; -x[34] = 1.26984126984126890000; -x[35] = 1.77777777777777860000; -x[36] = 2.28571428571428470000; -x[37] = 2.79365079365079440000; -x[38] = 3.30158730158730050000; -x[39] = 3.80952380952381020000; -x[40] = 4.31746031746031630000; -x[41] = 4.82539682539682600000; -x[42] = 5.33333333333333210000; -x[43] = 5.84126984126984180000; -x[44] = 6.34920634920634800000; -x[45] = 6.85714285714285770000; -x[46] = 7.36507936507936380000; -x[47] = 7.87301587301587350000; -x[48] = 8.38095238095237960000; -x[49] = 8.88888888888888930000; -x[50] = 9.39682539682539540000; -x[51] = 9.90476190476190510000; -x[52] = 10.41269841269841100000; -x[53] = 10.92063492063492100000; -x[54] = 11.42857142857142700000; -x[55] = 11.93650793650793700000; -x[56] = 12.44444444444444300000; -x[57] = 12.95238095238095300000; -x[58] = 13.46031746031745900000; -x[59] = 13.96825396825396800000; -x[60] = 14.47619047619047400000; -x[61] = 14.98412698412698400000; -x[62] = 15.49206349206349000000; -x[63] = 16.00000000000000000000; - - - -var y = new Array(); -y[0] = 0.0000001125351747192591200; -y[1] = 0.0000001870175279627160400; -y[2] = 0.0000003107966540465112000; -y[3] = 0.0000005165000372893601900; -y[4] = 0.0000008583499373194266000; -y[5] = 0.000001426456073000250500; -y[6] = 0.000002370568039596737700; -y[7] = 0.000003939548463303105900; -y[8] = 0.000006546971795567619300; -y[9] = 0.00001088014022196331600; -y[10] = 0.00001808125266855845500; -y[11] = 0.00003004848204109428100; -y[12] = 0.00004993632297081056800; -y[13] = 0.00008298709893014922600; -y[14] = 0.0001379128093365619200; -y[15] = 0.0002291915638009238700; -y[16] = 0.0003808839307255494700; -y[17] = 0.0006329751683659501200; -y[18] = 0.001051915114939835700; -y[19] = 0.001748133993779607700; -y[20] = 0.002905151201656255000; -y[21] = 0.004827949993831437100; -y[22] = 0.008023369361859111100; -y[23] = 0.01333370395283075800; -y[24] = 0.02215872822045164600; -y[25] = 0.03682466913056056000; -y[26] = 0.06119738655956222900; -y[27] = 0.1017013923042267600; -y[28] = 0.1690133154060659600; -y[29] = 0.2808762017642814100; -y[30] = 0.4667764816516809500; -y[31] = 0.7757164275739275600; -y[32] = 1.289130878828392400; -y[33] = 2.142353009006615400; -y[34] = 3.560287392519015300; -y[35] = 5.916693590664334800; -y[36] = 9.832707078469738300; -y[37] = 16.340567076777361000; -y[38] = 27.155709029035226000; -y[39] = 45.128943775619703000; -y[40] = 74.997915323273489000; -y[41] = 124.635917268588530000; -y[42] = 207.127248889834330000; -y[43] = 344.216163148372520000; -y[44] = 572.038529974419700000; -y[45] = 950.647049174870860000; -y[46] = 1579.840805732611900000; -y[47] = 2625.471749609100700000; -y[48] = 4363.162340777078500000; -y[49] = 7250.958085841060000000; -y[50] = 12050.065767953940000000; -y[51] = 20025.503291152076000000; -y[52] = 33279.551314186152000000; -y[53] = 55305.902656783459000000; -y[54] = 91910.580157904318000000; -y[55] = 152742.371775148380000000; -y[56] = 253836.197045168550000000; -y[57] = 421839.822058054970000000; -y[58] = 701038.061338060300000000; -y[59] = 1165026.006902193900000000; -y[60] = 1936108.282291886200000000; -y[61] = 3217537.856280616000000000; -y[62] = 5347092.386973262800000000; -y[63] = 8886110.520507872100000000; - - - -var val; -for (i = 0; i < vnum; i++) -{ - val = Math.exp(x[i]); - if (!isEqual(val, y[i])) - { - $ERROR("\nx = " + x[i] + "\nlibc.exp(x) = " + y[i] + "\nMath.exp(x) = " + Math.exp(x[i]) + "\nMath.abs(libc.exp(x) - Math.exp(x)) > " + prec + "\n\n"); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.9_floor/S15.8.2.9_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.9_floor/S15.8.2.9_A1.js deleted file mode 100644 index 991d70916..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.9_floor/S15.8.2.9_A1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.9_A1; - * @section: 15.8.2.9; - * @assertion: If x is NaN, Math.floor(x) is NaN; - * @description: Checking if Math.floor(NaN) is NaN; - */ - -// CHECK#1 -var x = NaN; -if (!isNaN(Math.floor(x))) -{ - $ERROR("#1: 'var x=NaN; isNaN(Math.floor(x)) === false'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.9_floor/S15.8.2.9_A2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.9_floor/S15.8.2.9_A2.js deleted file mode 100644 index f4d62e012..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.9_floor/S15.8.2.9_A2.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.9_A2; - * @section: 15.8.2.9; - * @assertion: If x is +0, Math.floor(x) is +0; - * @description: Checking if Math.floor(x) is +0, where x is +0; - */ - -// CHECK#1 -var x = +0; -if (Math.floor(x) !== +0) -{ - $ERROR("#1: 'var x = +0; Math.floor(x) !== +0'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.9_floor/S15.8.2.9_A3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.9_floor/S15.8.2.9_A3.js deleted file mode 100644 index b2be48e7b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.9_floor/S15.8.2.9_A3.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.9_A3; - * @section: 15.8.2.9; - * @assertion: If x is -0, Math.floor(x) is -0; - * @description: Checking if Math.floor(x) is -0, where x is -0; - */ - -// CHECK#1 -var x = -0; -if (Math.floor(x) !== -0) -{ - $ERROR("#1: 'var x = -0; Math.floor(x) !== -0'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.9_floor/S15.8.2.9_A4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.9_floor/S15.8.2.9_A4.js deleted file mode 100644 index ff4b4063e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.9_floor/S15.8.2.9_A4.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.9_A4; - * @section: 15.8.2.9; - * @assertion: If x is +Infinity, Math.floor(x) is +Infinity; - * @description: Checking if Math.floor(x) is +Infinity, where x is +Infinity; - */ - -// CHECK#1 -var x = +Infinity; -if (Math.floor(x) !== +Infinity) -{ - $ERROR("#1: 'var x = +Infinity; Math.floor(x) !== +Infinity'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.9_floor/S15.8.2.9_A5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.9_floor/S15.8.2.9_A5.js deleted file mode 100644 index 1123918cf..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.9_floor/S15.8.2.9_A5.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.9_A5; - * @section: 15.8.2.9; - * @assertion: If x is -Infinity, Math.floor(x) is -Infinity; - * @description: Checking if Math.floor(x) is -Infinity, where x is -Infinity; - */ - -// CHECK#1 -var x = -Infinity; -if (Math.floor(x) !== -Infinity) -{ - $ERROR("#1: 'var x = -Infinity; Math.floor(x) !== -Infinity'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.9_floor/S15.8.2.9_A6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.9_floor/S15.8.2.9_A6.js deleted file mode 100644 index 786b6309a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.9_floor/S15.8.2.9_A6.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.9_A6; - * @section: 15.8.2.9; - * @assertion: If x is greater than 0 but less than 1, Math.floor(x) is +0; - * @description: Checking if Math.floor(x) is +0, where x is greater than 0 but less than 1; - */ - -// CHECK#1 -var x = 0.000000000000001; -if (Math.floor(x) !== +0) -{ - $ERROR("#1: 'var x = 0.000000000000001; Math.floor(x) !== +0'"); -} - -// CHECK#2 -var x = 0.999999999999999; -if (Math.floor(x) !== +0) -{ - $ERROR("#2: 'var x = 0.999999999999999; Math.ceil(x) !== +0'"); -} - -// CHECK#3 -var x = 0.5; -if (Math.floor(x) !== +0) -{ - $ERROR("#3: 'var x = 0.5; Math.ceil(x) !== +0'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.9_floor/S15.8.2.9_A7.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.9_floor/S15.8.2.9_A7.js deleted file mode 100644 index ae62dff37..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.8_The_Math_Object/15.8.2_Function_Properties_of_the_Math_Object/15.8.2.9_floor/S15.8.2.9_A7.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.8.2.9_A7; - * @section: 15.8.2.9; - * @assertion: The value of Math.floor(x) is the same as the value of -Math.ceil(-x); - * @description: Checking if Math.floor(x) is equal to -Math.ceil(-x) on 2000 floating-point argument values; - */ - -// CHECK#1 -for (i=-1000; i<1000; i++) -{ - x = i/10.0; - if (-Math.ceil(-x) !== Math.floor(x)) - { - $ERROR("#1: 'x = " + x + "; Math.floor(x) !== -Math.ceil(-x)'"); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.2_The_Date_Constructor_Called_as_a_Function/S15.9.2.1_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.2_The_Date_Constructor_Called_as_a_Function/S15.9.2.1_A1.js deleted file mode 100644 index 74b567225..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.2_The_Date_Constructor_Called_as_a_Function/S15.9.2.1_A1.js +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.2.1_A1; - * @section: 15.9.2.1; - * @assertion: When Date is called as a function rather than as a constructor, - * it should be "string" representing the current time (UTC); - * @description: Checking type of returned value; -*/ - -//CHECK#1 -if( typeof Date() !== "string" ) { - $ERROR('#1: typeof Date() should be "string", actual is '+(typeof Date())); -} - -//CHECK#2 -if( typeof Date(1) !== "string" ) { - $ERROR('#2: typeof Date(1) should be "string", actual is '+(typeof Date(1))); -} - -//CHECK#3 -if( typeof Date(1970, 1) !== "string" ) { - $ERROR('#3: typeof Date(1970, 1) should be "string", actual is '+(typeof Date(1970, 1))); -} - -//CHECK#4 -if( typeof Date(1970, 1, 1) !== "string" ) { - $ERROR('#4: typeof Date(1970, 1, 1) should be "string", actual is '+(typeof Date(1970, 1, 1))); -} - -//CHECK#5 -if( typeof Date(1970, 1, 1, 1) !== "string" ) { - $ERROR('#5: typeof Date(1970, 1, 1, 1) should be "string", actual is '+(typeof Date(1970, 1, 1, 1))); -} - -//CHECK#6 -if( typeof Date(1970, 1, 1, 1) !== "string" ) { - $ERROR('#7: typeof Date(1970, 1, 1, 1) should be "string", actual is '+(typeof Date(1970, 1, 1, 1))); -} - -//CHECK#8 -if( typeof Date(1970, 1, 1, 1, 0) !== "string" ) { - $ERROR('#8: typeof Date(1970, 1, 1, 1, 0) should be "string", actual is '+(typeof Date(1970, 1, 1, 1, 0))); -} - -//CHECK#9 -if( typeof Date(1970, 1, 1, 1, 0, 0) !== "string" ) { - $ERROR('#9: typeof Date(1970, 1, 1, 1, 0, 0) should be "string", actual is '+(typeof Date(1970, 1, 1, 1, 0, 0))); -} - -//CHECK#10 -if( typeof Date(1970, 1, 1, 1, 0, 0, 0) !== "string" ) { - $ERROR('#10: typeof Date(1970, 1, 1, 1, 0, 0, 0) should be "string", actual is '+(typeof Date(1970, 1, 1, 1, 0, 0, 0))); -} - -//CHECK#11 -if( typeof Date(Number.NaN) !== "string" ) { - $ERROR('#11: typeof Date(Number.NaN) should be "string", actual is '+(typeof Date(Number.NaN))); -} - -//CHECK#12 -if( typeof Date(Number.POSITIVE_INFINITY) !== "string" ) { - $ERROR('#12: typeof Date(Number.POSITIVE_INFINITY) should be "string", actual is '+(typeof Date(Number.POSITIVE_INFINITY))); -} - -//CHECK#13 -if( typeof Date(Number.NEGATIVE_INFINITY) !== "string" ) { - $ERROR('#13: typeof Date(Number.NEGATIVE_INFINITY) should be "string", actual is '+(typeof Date(Number.NEGATIVE_INFINITY))); -} - -//CHECK#14 -if( typeof Date(undefined) !== "string" ) { - $ERROR('#14: typeof Date(undefined) should be "string", actual is '+(typeof Date(undefined))); -} - -//CHECK#15 -if( typeof Date(null) !== "string" ) { - $ERROR('#15: typeof Date(null) should be "string", actual is '+(typeof Date(null))); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.2_The_Date_Constructor_Called_as_a_Function/S15.9.2.1_A2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.2_The_Date_Constructor_Called_as_a_Function/S15.9.2.1_A2.js deleted file mode 100644 index 27c040e08..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.2_The_Date_Constructor_Called_as_a_Function/S15.9.2.1_A2.js +++ /dev/null @@ -1,91 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.2.1_A2; - * @section: 15.9.2.1; - * @assertion: All of the arguments are optional, any arguments supplied are - * accepted but are completely ignored. A string is created and returned as - * if by the expression (new Date()).toString(); - * @description: Use various number arguments and various types of ones; -*/ - -function isEqual(d1, d2) { - if (d1 === d2) { - return true; - } else if (Math.abs(Date.parse(d1) - Date.parse(d2)) <= 1000) { - return true; - } else { - return false; - } -} - -//CHECK#1 -if( !isEqual(Date(), (new Date()).toString()) ) { - $ERROR('#1: Date() is equal to (new Date()).toString()'); -} - -//CHECK#2 -if( !isEqual(Date(1), (new Date()).toString()) ) { - $ERROR('#2: Date(1) is equal to (new Date()).toString()'); -} - -//CHECK#3 -if( !isEqual(Date(1970, 1), (new Date()).toString()) ) { - $ERROR('#3: Date(1970, 1) is equal to (new Date()).toString()'); -} - -//CHECK#4 -if( !isEqual(Date(1970, 1, 1), (new Date()).toString()) ) { - $ERROR('#4: Date(1970, 1, 1) is equal to (new Date()).toString()'); -} - -//CHECK#5 -if( !isEqual(Date(1970, 1, 1, 1), (new Date()).toString()) ) { - $ERROR('#5: Date(1970, 1, 1, 1) is equal to (new Date()).toString()'); -} - -//CHECK#6 -if( !isEqual(Date(1970, 1, 1, 1), (new Date()).toString()) ) { - $ERROR('#7: Date(1970, 1, 1, 1) is equal to (new Date()).toString()'); -} - -//CHECK#8 -if( !isEqual(Date(1970, 1, 1, 1, 0), (new Date()).toString()) ) { - $ERROR('#8: Date(1970, 1, 1, 1, 0) is equal to (new Date()).toString()'); -} - -//CHECK#9 -if( !isEqual(Date(1970, 1, 1, 1, 0, 0), (new Date()).toString()) ) { - $ERROR('#9: Date(1970, 1, 1, 1, 0, 0) is equal to (new Date()).toString()'); -} - -//CHECK#10 -if( !isEqual(Date(1970, 1, 1, 1, 0, 0, 0), (new Date()).toString()) ) { - $ERROR('#10: Date(1970, 1, 1, 1, 0, 0, 0) is equal to (new Date()).toString()'); -} - -//CHECK#11 -if( !isEqual(Date(Number.NaN), (new Date()).toString()) ) { - $ERROR('#11: Date(Number.NaN) is equal to (new Date()).toString()'); -} - -//CHECK#12 -if( !isEqual(Date(Number.POSITIVE_INFINITY), (new Date()).toString()) ) { - $ERROR('#12: Date(Number.POSITIVE_INFINITY) is equal to (new Date()).toString()'); -} - -//CHECK#13 -if( !isEqual(Date(Number.NEGATIVE_INFINITY), (new Date()).toString()) ) { - $ERROR('#13: Date(Number.NEGATIVE_INFINITY) is equal to (new Date()).toString()'); -} - -//CHECK#14 -if( !isEqual(Date(undefined), (new Date()).toString()) ) { - $ERROR('#14: Date(undefined) is equal to (new Date()).toString()'); -} - -//CHECK#15 -if( !isEqual(Date(null), (new Date()).toString()) ) { - $ERROR('#15: Date(null) is equal to (new Date()).toString()'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A1_T1.js deleted file mode 100644 index ea189e433..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A1_T1.js +++ /dev/null @@ -1,226 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.3.1_A1_T1; - * @section: 15.9.3.1; - * @assertion: When Date is called as part of a new expression it is - * a constructor: it initializes the newly created object; - * @description: 2 arguments, (year, month); -*/ - -if (typeof new Date(1899, 11) !== "object") { - $FAIL("#1.1: typeof new Date(1899, 11) should be 'object'"); -} - -if (new Date(1899, 11) === undefined) { - $FAIL("#1.2: new Date(1899, 11) should not be undefined"); -} - -var x13 = new Date(1899, 11); -if(typeof x13 !== "object"){ - $FAIL("#1.3: typeof new Date(1899, 11) should be 'object'"); -} - -var x14 = new Date(1899, 11); -if(x14 === undefined){ - $FAIL("#1.4: new Date(1899, 11) should not be undefined"); -} - -if (typeof new Date(1899, 12) !== "object") { - $FAIL("#2.1: typeof new Date(1899, 12) should be 'object'"); -} - -if (new Date(1899, 12) === undefined) { - $FAIL("#2.2: new Date(1899, 12) should not be undefined"); -} - -var x23 = new Date(1899, 12); -if(typeof x23 !== "object"){ - $FAIL("#2.3: typeof new Date(1899, 12) should be 'object'"); -} - -var x24 = new Date(1899, 12); -if(x24 === undefined){ - $FAIL("#2.4: new Date(1899, 12) should not be undefined"); -} - -if (typeof new Date(1900, 0) !== "object") { - $FAIL("#3.1: typeof new Date(1900, 0) should be 'object'"); -} - -if (new Date(1900, 0) === undefined) { - $FAIL("#3.2: new Date(1900, 0) should not be undefined"); -} - -var x33 = new Date(1900, 0); -if(typeof x33 !== "object"){ - $FAIL("#3.3: typeof new Date(1900, 0) should be 'object'"); -} - -var x34 = new Date(1900, 0); -if(x34 === undefined){ - $FAIL("#3.4: new Date(1900, 0) should not be undefined"); -} - -if (typeof new Date(1969, 11) !== "object") { - $FAIL("#4.1: typeof new Date(1969, 11) should be 'object'"); -} - -if (new Date(1969, 11) === undefined) { - $FAIL("#4.2: new Date(1969, 11) should not be undefined"); -} - -var x43 = new Date(1969, 11); -if(typeof x43 !== "object"){ - $FAIL("#4.3: typeof new Date(1969, 11) should be 'object'"); -} - -var x44 = new Date(1969, 11); -if(x44 === undefined){ - $FAIL("#4.4: new Date(1969, 11) should not be undefined"); -} - -if (typeof new Date(1969, 12) !== "object") { - $FAIL("#5.1: typeof new Date(1969, 12) should be 'object'"); -} - -if (new Date(1969, 12) === undefined) { - $FAIL("#5.2: new Date(1969, 12) should not be undefined"); -} - -var x53 = new Date(1969, 12); -if(typeof x53 !== "object"){ - $FAIL("#5.3: typeof new Date(1969, 12) should be 'object'"); -} - -var x54 = new Date(1969, 12); -if(x54 === undefined){ - $FAIL("#5.4: new Date(1969, 12) should not be undefined"); -} - -if (typeof new Date(1970, 0) !== "object") { - $FAIL("#6.1: typeof new Date(1970, 0) should be 'object'"); -} - -if (new Date(1970, 0) === undefined) { - $FAIL("#6.2: new Date(1970, 0) should not be undefined"); -} - -var x63 = new Date(1970, 0); -if(typeof x63 !== "object"){ - $FAIL("#6.3: typeof new Date(1970, 0) should be 'object'"); -} - -var x64 = new Date(1970, 0); -if(x64 === undefined){ - $FAIL("#6.4: new Date(1970, 0) should not be undefined"); -} - -if (typeof new Date(1999, 11) !== "object") { - $FAIL("#7.1: typeof new Date(1999, 11) should be 'object'"); -} - -if (new Date(1999, 11) === undefined) { - $FAIL("#7.2: new Date(1999, 11) should not be undefined"); -} - -var x73 = new Date(1999, 11); -if(typeof x73 !== "object"){ - $FAIL("#7.3: typeof new Date(1999, 11) should be 'object'"); -} - -var x74 = new Date(1999, 11); -if(x74 === undefined){ - $FAIL("#7.4: new Date(1999, 11) should not be undefined"); -} - -if (typeof new Date(1999, 12) !== "object") { - $FAIL("#8.1: typeof new Date(1999, 12) should be 'object'"); -} - -if (new Date(1999, 12) === undefined) { - $FAIL("#8.2: new Date(1999, 12) should not be undefined"); -} - -var x83 = new Date(1999, 12); -if(typeof x83 !== "object"){ - $FAIL("#8.3: typeof new Date(1999, 12) should be 'object'"); -} - -var x84 = new Date(1999, 12); -if(x84 === undefined){ - $FAIL("#8.4: new Date(1999, 12) should not be undefined"); -} - -if (typeof new Date(2000, 0) !== "object") { - $FAIL("#9.1: typeof new Date(2000, 0) should be 'object'"); -} - -if (new Date(2000, 0) === undefined) { - $FAIL("#9.2: new Date(2000, 0) should not be undefined"); -} - -var x93 = new Date(2000, 0); -if(typeof x93 !== "object"){ - $FAIL("#9.3: typeof new Date(2000, 0) should be 'object'"); -} - -var x94 = new Date(2000, 0); -if(x94 === undefined){ - $FAIL("#9.4: new Date(2000, 0) should not be undefined"); -} - -if (typeof new Date(2099, 11) !== "object") { - $FAIL("#10.1: typeof new Date(2099, 11) should be 'object'"); -} - -if (new Date(2099, 11) === undefined) { - $FAIL("#10.2: new Date(2099, 11) should not be undefined"); -} - -var x103 = new Date(2099, 11); -if(typeof x103 !== "object"){ - $FAIL("#10.3: typeof new Date(2099, 11) should be 'object'"); -} - -var x104 = new Date(2099, 11); -if(x104 === undefined){ - $FAIL("#10.4: new Date(2099, 11) should not be undefined"); -} - -if (typeof new Date(2099, 12) !== "object") { - $FAIL("#11.1: typeof new Date(2099, 12) should be 'object'"); -} - -if (new Date(2099, 12) === undefined) { - $FAIL("#11.2: new Date(2099, 12) should not be undefined"); -} - -var x113 = new Date(2099, 12); -if(typeof x113 !== "object"){ - $FAIL("#11.3: typeof new Date(2099, 12) should be 'object'"); -} - -var x114 = new Date(2099, 12); -if(x114 === undefined){ - $FAIL("#11.4: new Date(2099, 12) should not be undefined"); -} - -if (typeof new Date(2100, 0) !== "object") { - $FAIL("#12.1: typeof new Date(2100, 0) should be 'object'"); -} - -if (new Date(2100, 0) === undefined) { - $FAIL("#12.2: new Date(2100, 0) should not be undefined"); -} - -var x123 = new Date(2100, 0); -if(typeof x123 !== "object"){ - $FAIL("#12.3: typeof new Date(2100, 0) should be 'object'"); -} - -var x124 = new Date(2100, 0); -if(x124 === undefined){ - $FAIL("#12.4: new Date(2100, 0) should not be undefined"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A1_T2.js deleted file mode 100644 index c5668a9fd..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A1_T2.js +++ /dev/null @@ -1,226 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.3.1_A1_T2; - * @section: 15.9.3.1; - * @assertion: When Date is called as part of a new expression it is - * a constructor: it initializes the newly created object; - * @description: 3 arguments, (year, month, date); -*/ - -if (typeof new Date(1899, 11, 31) !== "object") { - $FAIL("#1.1: typeof new Date(1899, 11, 31) should be 'object'"); -} - -if (new Date(1899, 11, 31) === undefined) { - $FAIL("#1.2: new Date(1899, 11, 31) should not be undefined"); -} - -var x13 = new Date(1899, 11, 31); -if(typeof x13 !== "object"){ - $FAIL("#1.3: typeof new Date(1899, 11, 31) should be 'object'"); -} - -var x14 = new Date(1899, 11, 31); -if(x14 === undefined){ - $FAIL("#1.4: new Date(1899, 11, 31) should not be undefined"); -} - -if (typeof new Date(1899, 12, 1) !== "object") { - $FAIL("#2.1: typeof new Date(1899, 12, 1) should be 'object'"); -} - -if (new Date(1899, 12, 1) === undefined) { - $FAIL("#2.2: new Date(1899, 12, 1) should not be undefined"); -} - -var x23 = new Date(1899, 12, 1); -if(typeof x23 !== "object"){ - $FAIL("#2.3: typeof new Date(1899, 12, 1) should be 'object'"); -} - -var x24 = new Date(1899, 12, 1); -if(x24 === undefined){ - $FAIL("#2.4: new Date(1899, 12, 1) should not be undefined"); -} - -if (typeof new Date(1900, 0, 1) !== "object") { - $FAIL("#3.1: typeof new Date(1900, 0, 1) should be 'object'"); -} - -if (new Date(1900, 0, 1) === undefined) { - $FAIL("#3.2: new Date(1900, 0, 1) should not be undefined"); -} - -var x33 = new Date(1900, 0, 1); -if(typeof x33 !== "object"){ - $FAIL("#3.3: typeof new Date(1900, 0, 1) should be 'object'"); -} - -var x34 = new Date(1900, 0, 1); -if(x34 === undefined){ - $FAIL("#3.4: new Date(1900, 0, 1) should not be undefined"); -} - -if (typeof new Date(1969, 11, 31) !== "object") { - $FAIL("#4.1: typeof new Date(1969, 11, 31) should be 'object'"); -} - -if (new Date(1969, 11, 31) === undefined) { - $FAIL("#4.2: new Date(1969, 11, 31) should not be undefined"); -} - -var x43 = new Date(1969, 11, 31); -if(typeof x43 !== "object"){ - $FAIL("#4.3: typeof new Date(1969, 11, 31) should be 'object'"); -} - -var x44 = new Date(1969, 11, 31); -if(x44 === undefined){ - $FAIL("#4.4: new Date(1969, 11, 31) should not be undefined"); -} - -if (typeof new Date(1969, 12, 1) !== "object") { - $FAIL("#5.1: typeof new Date(1969, 12, 1) should be 'object'"); -} - -if (new Date(1969, 12, 1) === undefined) { - $FAIL("#5.2: new Date(1969, 12, 1) should not be undefined"); -} - -var x53 = new Date(1969, 12, 1); -if(typeof x53 !== "object"){ - $FAIL("#5.3: typeof new Date(1969, 12, 1) should be 'object'"); -} - -var x54 = new Date(1969, 12, 1); -if(x54 === undefined){ - $FAIL("#5.4: new Date(1969, 12, 1) should not be undefined"); -} - -if (typeof new Date(1970, 0, 1) !== "object") { - $FAIL("#6.1: typeof new Date(1970, 0, 1) should be 'object'"); -} - -if (new Date(1970, 0, 1) === undefined) { - $FAIL("#6.2: new Date(1970, 0, 1) should not be undefined"); -} - -var x63 = new Date(1970, 0, 1); -if(typeof x63 !== "object"){ - $FAIL("#6.3: typeof new Date(1970, 0, 1) should be 'object'"); -} - -var x64 = new Date(1970, 0, 1); -if(x64 === undefined){ - $FAIL("#6.4: new Date(1970, 0, 1) should not be undefined"); -} - -if (typeof new Date(1999, 11, 31) !== "object") { - $FAIL("#7.1: typeof new Date(1999, 11, 31) should be 'object'"); -} - -if (new Date(1999, 11, 31) === undefined) { - $FAIL("#7.2: new Date(1999, 11, 31) should not be undefined"); -} - -var x73 = new Date(1999, 11, 31); -if(typeof x73 !== "object"){ - $FAIL("#7.3: typeof new Date(1999, 11, 31) should be 'object'"); -} - -var x74 = new Date(1999, 11, 31); -if(x74 === undefined){ - $FAIL("#7.4: new Date(1999, 11, 31) should not be undefined"); -} - -if (typeof new Date(1999, 12, 1) !== "object") { - $FAIL("#8.1: typeof new Date(1999, 12, 1) should be 'object'"); -} - -if (new Date(1999, 12, 1) === undefined) { - $FAIL("#8.2: new Date(1999, 12, 1) should not be undefined"); -} - -var x83 = new Date(1999, 12, 1); -if(typeof x83 !== "object"){ - $FAIL("#8.3: typeof new Date(1999, 12, 1) should be 'object'"); -} - -var x84 = new Date(1999, 12, 1); -if(x84 === undefined){ - $FAIL("#8.4: new Date(1999, 12, 1) should not be undefined"); -} - -if (typeof new Date(2000, 0, 1) !== "object") { - $FAIL("#9.1: typeof new Date(2000, 0, 1) should be 'object'"); -} - -if (new Date(2000, 0, 1) === undefined) { - $FAIL("#9.2: new Date(2000, 0, 1) should not be undefined"); -} - -var x93 = new Date(2000, 0, 1); -if(typeof x93 !== "object"){ - $FAIL("#9.3: typeof new Date(2000, 0, 1) should be 'object'"); -} - -var x94 = new Date(2000, 0, 1); -if(x94 === undefined){ - $FAIL("#9.4: new Date(2000, 0, 1) should not be undefined"); -} - -if (typeof new Date(2099, 11, 31) !== "object") { - $FAIL("#10.1: typeof new Date(2099, 11, 31) should be 'object'"); -} - -if (new Date(2099, 11, 31) === undefined) { - $FAIL("#10.2: new Date(2099, 11, 31) should not be undefined"); -} - -var x103 = new Date(2099, 11, 31); -if(typeof x103 !== "object"){ - $FAIL("#10.3: typeof new Date(2099, 11, 31) should be 'object'"); -} - -var x104 = new Date(2099, 11, 31); -if(x104 === undefined){ - $FAIL("#10.4: new Date(2099, 11, 31) should not be undefined"); -} - -if (typeof new Date(2099, 12, 1) !== "object") { - $FAIL("#11.1: typeof new Date(2099, 12, 1) should be 'object'"); -} - -if (new Date(2099, 12, 1) === undefined) { - $FAIL("#11.2: new Date(2099, 12, 1) should not be undefined"); -} - -var x113 = new Date(2099, 12, 1); -if(typeof x113 !== "object"){ - $FAIL("#11.3: typeof new Date(2099, 12, 1) should be 'object'"); -} - -var x114 = new Date(2099, 12, 1); -if(x114 === undefined){ - $FAIL("#11.4: new Date(2099, 12, 1) should not be undefined"); -} - -if (typeof new Date(2100, 0, 1) !== "object") { - $FAIL("#12.1: typeof new Date(2100, 0, 1) should be 'object'"); -} - -if (new Date(2100, 0, 1) === undefined) { - $FAIL("#12.2: new Date(2100, 0, 1) should not be undefined"); -} - -var x123 = new Date(2100, 0, 1); -if(typeof x123 !== "object"){ - $FAIL("#12.3: typeof new Date(2100, 0, 1) should be 'object'"); -} - -var x124 = new Date(2100, 0, 1); -if(x124 === undefined){ - $FAIL("#12.4: new Date(2100, 0, 1) should not be undefined"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A1_T3.js deleted file mode 100644 index bd22ff46a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A1_T3.js +++ /dev/null @@ -1,226 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.3.1_A1_T3; - * @section: 15.9.3.1; - * @assertion: When Date is called as part of a new expression it is - * a constructor: it initializes the newly created object; - * @description: 4 arguments, (year, month, date, hours); -*/ - -if (typeof new Date(1899, 11, 31, 23) !== "object") { - $FAIL("#1.1: typeof new Date(1899, 11, 31, 23) should be 'object'"); -} - -if (new Date(1899, 11, 31, 23) === undefined) { - $FAIL("#1.2: new Date(1899, 11, 31, 23) should not be undefined"); -} - -var x13 = new Date(1899, 11, 31, 23); -if(typeof x13 !== "object"){ - $FAIL("#1.3: typeof new Date(1899, 11, 31, 23) should be 'object'"); -} - -var x14 = new Date(1899, 11, 31, 23); -if(x14 === undefined){ - $FAIL("#1.4: new Date(1899, 11, 31, 23) should not be undefined"); -} - -if (typeof new Date(1899, 12, 1, 0) !== "object") { - $FAIL("#2.1: typeof new Date(1899, 12, 1, 0) should be 'object'"); -} - -if (new Date(1899, 12, 1, 0) === undefined) { - $FAIL("#2.2: new Date(1899, 12, 1, 0) should not be undefined"); -} - -var x23 = new Date(1899, 12, 1, 0); -if(typeof x23 !== "object"){ - $FAIL("#2.3: typeof new Date(1899, 12, 1, 0) should be 'object'"); -} - -var x24 = new Date(1899, 12, 1, 0); -if(x24 === undefined){ - $FAIL("#2.4: new Date(1899, 12, 1, 0) should not be undefined"); -} - -if (typeof new Date(1900, 0, 1, 0) !== "object") { - $FAIL("#3.1: typeof new Date(1900, 0, 1, 0) should be 'object'"); -} - -if (new Date(1900, 0, 1, 0) === undefined) { - $FAIL("#3.2: new Date(1900, 0, 1, 0) should not be undefined"); -} - -var x33 = new Date(1900, 0, 1, 0); -if(typeof x33 !== "object"){ - $FAIL("#3.3: typeof new Date(1900, 0, 1, 0) should be 'object'"); -} - -var x34 = new Date(1900, 0, 1, 0); -if(x34 === undefined){ - $FAIL("#3.4: new Date(1900, 0, 1, 0) should not be undefined"); -} - -if (typeof new Date(1969, 11, 31, 23) !== "object") { - $FAIL("#4.1: typeof new Date(1969, 11, 31, 23) should be 'object'"); -} - -if (new Date(1969, 11, 31, 23) === undefined) { - $FAIL("#4.2: new Date(1969, 11, 31, 23) should not be undefined"); -} - -var x43 = new Date(1969, 11, 31, 23); -if(typeof x43 !== "object"){ - $FAIL("#4.3: typeof new Date(1969, 11, 31, 23) should be 'object'"); -} - -var x44 = new Date(1969, 11, 31, 23); -if(x44 === undefined){ - $FAIL("#4.4: new Date(1969, 11, 31, 23) should not be undefined"); -} - -if (typeof new Date(1969, 12, 1, 0) !== "object") { - $FAIL("#5.1: typeof new Date(1969, 12, 1, 0) should be 'object'"); -} - -if (new Date(1969, 12, 1, 0) === undefined) { - $FAIL("#5.2: new Date(1969, 12, 1, 0) should not be undefined"); -} - -var x53 = new Date(1969, 12, 1, 0); -if(typeof x53 !== "object"){ - $FAIL("#5.3: typeof new Date(1969, 12, 1, 0) should be 'object'"); -} - -var x54 = new Date(1969, 12, 1, 0); -if(x54 === undefined){ - $FAIL("#5.4: new Date(1969, 12, 1, 0) should not be undefined"); -} - -if (typeof new Date(1970, 0, 1, 0) !== "object") { - $FAIL("#6.1: typeof new Date(1970, 0, 1, 0) should be 'object'"); -} - -if (new Date(1970, 0, 1, 0) === undefined) { - $FAIL("#6.2: new Date(1970, 0, 1, 0) should not be undefined"); -} - -var x63 = new Date(1970, 0, 1, 0); -if(typeof x63 !== "object"){ - $FAIL("#6.3: typeof new Date(1970, 0, 1, 0) should be 'object'"); -} - -var x64 = new Date(1970, 0, 1, 0); -if(x64 === undefined){ - $FAIL("#6.4: new Date(1970, 0, 1, 0) should not be undefined"); -} - -if (typeof new Date(1999, 11, 31, 23) !== "object") { - $FAIL("#7.1: typeof new Date(1999, 11, 31, 23) should be 'object'"); -} - -if (new Date(1999, 11, 31, 23) === undefined) { - $FAIL("#7.2: new Date(1999, 11, 31, 23) should not be undefined"); -} - -var x73 = new Date(1999, 11, 31, 23); -if(typeof x73 !== "object"){ - $FAIL("#7.3: typeof new Date(1999, 11, 31, 23) should be 'object'"); -} - -var x74 = new Date(1999, 11, 31, 23); -if(x74 === undefined){ - $FAIL("#7.4: new Date(1999, 11, 31, 23) should not be undefined"); -} - -if (typeof new Date(1999, 12, 1, 0) !== "object") { - $FAIL("#8.1: typeof new Date(1999, 12, 1, 0) should be 'object'"); -} - -if (new Date(1999, 12, 1, 0) === undefined) { - $FAIL("#8.2: new Date(1999, 12, 1, 0) should not be undefined"); -} - -var x83 = new Date(1999, 12, 1, 0); -if(typeof x83 !== "object"){ - $FAIL("#8.3: typeof new Date(1999, 12, 1, 0) should be 'object'"); -} - -var x84 = new Date(1999, 12, 1, 0); -if(x84 === undefined){ - $FAIL("#8.4: new Date(1999, 12, 1, 0) should not be undefined"); -} - -if (typeof new Date(2000, 0, 1, 0) !== "object") { - $FAIL("#9.1: typeof new Date(2000, 0, 1, 0) should be 'object'"); -} - -if (new Date(2000, 0, 1, 0) === undefined) { - $FAIL("#9.2: new Date(2000, 0, 1, 0) should not be undefined"); -} - -var x93 = new Date(2000, 0, 1, 0); -if(typeof x93 !== "object"){ - $FAIL("#9.3: typeof new Date(2000, 0, 1, 0) should be 'object'"); -} - -var x94 = new Date(2000, 0, 1, 0); -if(x94 === undefined){ - $FAIL("#9.4: new Date(2000, 0, 1, 0) should not be undefined"); -} - -if (typeof new Date(2099, 11, 31, 23) !== "object") { - $FAIL("#10.1: typeof new Date(2099, 11, 31, 23) should be 'object'"); -} - -if (new Date(2099, 11, 31, 23) === undefined) { - $FAIL("#10.2: new Date(2099, 11, 31, 23) should not be undefined"); -} - -var x103 = new Date(2099, 11, 31, 23); -if(typeof x103 !== "object"){ - $FAIL("#10.3: typeof new Date(2099, 11, 31, 23) should be 'object'"); -} - -var x104 = new Date(2099, 11, 31, 23); -if(x104 === undefined){ - $FAIL("#10.4: new Date(2099, 11, 31, 23) should not be undefined"); -} - -if (typeof new Date(2099, 12, 1, 0) !== "object") { - $FAIL("#11.1: typeof new Date(2099, 12, 1, 0) should be 'object'"); -} - -if (new Date(2099, 12, 1, 0) === undefined) { - $FAIL("#11.2: new Date(2099, 12, 1, 0) should not be undefined"); -} - -var x113 = new Date(2099, 12, 1, 0); -if(typeof x113 !== "object"){ - $FAIL("#11.3: typeof new Date(2099, 12, 1, 0) should be 'object'"); -} - -var x114 = new Date(2099, 12, 1, 0); -if(x114 === undefined){ - $FAIL("#11.4: new Date(2099, 12, 1, 0) should not be undefined"); -} - -if (typeof new Date(2100, 0, 1, 0) !== "object") { - $FAIL("#12.1: typeof new Date(2100, 0, 1, 0) should be 'object'"); -} - -if (new Date(2100, 0, 1, 0) === undefined) { - $FAIL("#12.2: new Date(2100, 0, 1, 0) should not be undefined"); -} - -var x123 = new Date(2100, 0, 1, 0); -if(typeof x123 !== "object"){ - $FAIL("#12.3: typeof new Date(2100, 0, 1, 0) should be 'object'"); -} - -var x124 = new Date(2100, 0, 1, 0); -if(x124 === undefined){ - $FAIL("#12.4: new Date(2100, 0, 1, 0) should not be undefined"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A1_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A1_T4.js deleted file mode 100644 index c24ac08c5..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A1_T4.js +++ /dev/null @@ -1,226 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.3.1_A1_T4; - * @section: 15.9.3.1; - * @assertion: When Date is called as part of a new expression it is - * a constructor: it initializes the newly created object; - * @description: 5 arguments, (year, month, date, hours, minutes); -*/ - -if (typeof new Date(1899, 11, 31, 23, 59) !== "object") { - $FAIL("#1.1: typeof new Date(1899, 11, 31, 23, 59) should be 'object'"); -} - -if (new Date(1899, 11, 31, 23, 59) === undefined) { - $FAIL("#1.2: new Date(1899, 11, 31, 23, 59) should not be undefined"); -} - -var x13 = new Date(1899, 11, 31, 23, 59); -if(typeof x13 !== "object"){ - $FAIL("#1.3: typeof new Date(1899, 11, 31, 23, 59) should be 'object'"); -} - -var x14 = new Date(1899, 11, 31, 23, 59); -if(x14 === undefined){ - $FAIL("#1.4: new Date(1899, 11, 31, 23, 59) should not be undefined"); -} - -if (typeof new Date(1899, 12, 1, 0, 0) !== "object") { - $FAIL("#2.1: typeof new Date(1899, 12, 1, 0, 0) should be 'object'"); -} - -if (new Date(1899, 12, 1, 0, 0) === undefined) { - $FAIL("#2.2: new Date(1899, 12, 1, 0, 0) should not be undefined"); -} - -var x23 = new Date(1899, 12, 1, 0, 0); -if(typeof x23 !== "object"){ - $FAIL("#2.3: typeof new Date(1899, 12, 1, 0, 0) should be 'object'"); -} - -var x24 = new Date(1899, 12, 1, 0, 0); -if(x24 === undefined){ - $FAIL("#2.4: new Date(1899, 12, 1, 0, 0) should not be undefined"); -} - -if (typeof new Date(1900, 0, 1, 0, 0) !== "object") { - $FAIL("#3.1: typeof new Date(1900, 0, 1, 0, 0) should be 'object'"); -} - -if (new Date(1900, 0, 1, 0, 0) === undefined) { - $FAIL("#3.2: new Date(1900, 0, 1, 0, 0) should not be undefined"); -} - -var x33 = new Date(1900, 0, 1, 0, 0); -if(typeof x33 !== "object"){ - $FAIL("#3.3: typeof new Date(1900, 0, 1, 0, 0) should be 'object'"); -} - -var x34 = new Date(1900, 0, 1, 0, 0); -if(x34 === undefined){ - $FAIL("#3.4: new Date(1900, 0, 1, 0, 0) should not be undefined"); -} - -if (typeof new Date(1969, 11, 31, 23, 59) !== "object") { - $FAIL("#4.1: typeof new Date(1969, 11, 31, 23, 59) should be 'object'"); -} - -if (new Date(1969, 11, 31, 23, 59) === undefined) { - $FAIL("#4.2: new Date(1969, 11, 31, 23, 59) should not be undefined"); -} - -var x43 = new Date(1969, 11, 31, 23, 59); -if(typeof x43 !== "object"){ - $FAIL("#4.3: typeof new Date(1969, 11, 31, 23, 59) should be 'object'"); -} - -var x44 = new Date(1969, 11, 31, 23, 59); -if(x44 === undefined){ - $FAIL("#4.4: new Date(1969, 11, 31, 23, 59) should not be undefined"); -} - -if (typeof new Date(1969, 12, 1, 0, 0) !== "object") { - $FAIL("#5.1: typeof new Date(1969, 12, 1, 0, 0) should be 'object'"); -} - -if (new Date(1969, 12, 1, 0, 0) === undefined) { - $FAIL("#5.2: new Date(1969, 12, 1, 0, 0) should not be undefined"); -} - -var x53 = new Date(1969, 12, 1, 0, 0); -if(typeof x53 !== "object"){ - $FAIL("#5.3: typeof new Date(1969, 12, 1, 0, 0) should be 'object'"); -} - -var x54 = new Date(1969, 12, 1, 0, 0); -if(x54 === undefined){ - $FAIL("#5.4: new Date(1969, 12, 1, 0, 0) should not be undefined"); -} - -if (typeof new Date(1970, 0, 1, 0, 0) !== "object") { - $FAIL("#6.1: typeof new Date(1970, 0, 1, 0, 0) should be 'object'"); -} - -if (new Date(1970, 0, 1, 0, 0) === undefined) { - $FAIL("#6.2: new Date(1970, 0, 1, 0, 0) should not be undefined"); -} - -var x63 = new Date(1970, 0, 1, 0, 0); -if(typeof x63 !== "object"){ - $FAIL("#6.3: typeof new Date(1970, 0, 1, 0, 0) should be 'object'"); -} - -var x64 = new Date(1970, 0, 1, 0, 0); -if(x64 === undefined){ - $FAIL("#6.4: new Date(1970, 0, 1, 0, 0) should not be undefined"); -} - -if (typeof new Date(1999, 11, 31, 23, 59) !== "object") { - $FAIL("#7.1: typeof new Date(1999, 11, 31, 23, 59) should be 'object'"); -} - -if (new Date(1999, 11, 31, 23, 59) === undefined) { - $FAIL("#7.2: new Date(1999, 11, 31, 23, 59) should not be undefined"); -} - -var x73 = new Date(1999, 11, 31, 23, 59); -if(typeof x73 !== "object"){ - $FAIL("#7.3: typeof new Date(1999, 11, 31, 23, 59) should be 'object'"); -} - -var x74 = new Date(1999, 11, 31, 23, 59); -if(x74 === undefined){ - $FAIL("#7.4: new Date(1999, 11, 31, 23, 59) should not be undefined"); -} - -if (typeof new Date(1999, 12, 1, 0, 0) !== "object") { - $FAIL("#8.1: typeof new Date(1999, 12, 1, 0, 0) should be 'object'"); -} - -if (new Date(1999, 12, 1, 0, 0) === undefined) { - $FAIL("#8.2: new Date(1999, 12, 1, 0, 0) should not be undefined"); -} - -var x83 = new Date(1999, 12, 1, 0, 0); -if(typeof x83 !== "object"){ - $FAIL("#8.3: typeof new Date(1999, 12, 1, 0, 0) should be 'object'"); -} - -var x84 = new Date(1999, 12, 1, 0, 0); -if(x84 === undefined){ - $FAIL("#8.4: new Date(1999, 12, 1, 0, 0) should not be undefined"); -} - -if (typeof new Date(2000, 0, 1, 0, 0) !== "object") { - $FAIL("#9.1: typeof new Date(2000, 0, 1, 0, 0) should be 'object'"); -} - -if (new Date(2000, 0, 1, 0, 0) === undefined) { - $FAIL("#9.2: new Date(2000, 0, 1, 0, 0) should not be undefined"); -} - -var x93 = new Date(2000, 0, 1, 0, 0); -if(typeof x93 !== "object"){ - $FAIL("#9.3: typeof new Date(2000, 0, 1, 0, 0) should be 'object'"); -} - -var x94 = new Date(2000, 0, 1, 0, 0); -if(x94 === undefined){ - $FAIL("#9.4: new Date(2000, 0, 1, 0, 0) should not be undefined"); -} - -if (typeof new Date(2099, 11, 31, 23, 59) !== "object") { - $FAIL("#10.1: typeof new Date(2099, 11, 31, 23, 59) should be 'object'"); -} - -if (new Date(2099, 11, 31, 23, 59) === undefined) { - $FAIL("#10.2: new Date(2099, 11, 31, 23, 59) should not be undefined"); -} - -var x103 = new Date(2099, 11, 31, 23, 59); -if(typeof x103 !== "object"){ - $FAIL("#10.3: typeof new Date(2099, 11, 31, 23, 59) should be 'object'"); -} - -var x104 = new Date(2099, 11, 31, 23, 59); -if(x104 === undefined){ - $FAIL("#10.4: new Date(2099, 11, 31, 23, 59) should not be undefined"); -} - -if (typeof new Date(2099, 12, 1, 0, 0) !== "object") { - $FAIL("#11.1: typeof new Date(2099, 12, 1, 0, 0) should be 'object'"); -} - -if (new Date(2099, 12, 1, 0, 0) === undefined) { - $FAIL("#11.2: new Date(2099, 12, 1, 0, 0) should not be undefined"); -} - -var x113 = new Date(2099, 12, 1, 0, 0); -if(typeof x113 !== "object"){ - $FAIL("#11.3: typeof new Date(2099, 12, 1, 0, 0) should be 'object'"); -} - -var x114 = new Date(2099, 12, 1, 0, 0); -if(x114 === undefined){ - $FAIL("#11.4: new Date(2099, 12, 1, 0, 0) should not be undefined"); -} - -if (typeof new Date(2100, 0, 1, 0, 0) !== "object") { - $FAIL("#12.1: typeof new Date(2100, 0, 1, 0, 0) should be 'object'"); -} - -if (new Date(2100, 0, 1, 0, 0) === undefined) { - $FAIL("#12.2: new Date(2100, 0, 1, 0, 0) should not be undefined"); -} - -var x123 = new Date(2100, 0, 1, 0, 0); -if(typeof x123 !== "object"){ - $FAIL("#12.3: typeof new Date(2100, 0, 1, 0, 0) should be 'object'"); -} - -var x124 = new Date(2100, 0, 1, 0, 0); -if(x124 === undefined){ - $FAIL("#12.4: new Date(2100, 0, 1, 0, 0) should not be undefined"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A1_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A1_T5.js deleted file mode 100644 index 7715457f8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A1_T5.js +++ /dev/null @@ -1,226 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.3.1_A1_T5; - * @section: 15.9.3.1; - * @assertion: When Date is called as part of a new expression it is - * a constructor: it initializes the newly created object; - * @description: 6 arguments, (year, month, date, hours, minutes, seconds); -*/ - -if (typeof new Date(1899, 11, 31, 23, 59, 59) !== "object") { - $FAIL("#1.1: typeof new Date(1899, 11, 31, 23, 59, 59) should be 'object'"); -} - -if (new Date(1899, 11, 31, 23, 59, 59) === undefined) { - $FAIL("#1.2: new Date(1899, 11, 31, 23, 59, 59) should not be undefined"); -} - -var x13 = new Date(1899, 11, 31, 23, 59, 59); -if(typeof x13 !== "object"){ - $FAIL("#1.3: typeof new Date(1899, 11, 31, 23, 59, 59) should be 'object'"); -} - -var x14 = new Date(1899, 11, 31, 23, 59, 59); -if(x14 === undefined){ - $FAIL("#1.4: new Date(1899, 11, 31, 23, 59, 59) should not be undefined"); -} - -if (typeof new Date(1899, 12, 1, 0, 0, 0) !== "object") { - $FAIL("#2.1: typeof new Date(1899, 12, 1, 0, 0, 0) should be 'object'"); -} - -if (new Date(1899, 12, 1, 0, 0, 0) === undefined) { - $FAIL("#2.2: new Date(1899, 12, 1, 0, 0, 0) should not be undefined"); -} - -var x23 = new Date(1899, 12, 1, 0, 0, 0); -if(typeof x23 !== "object"){ - $FAIL("#2.3: typeof new Date(1899, 12, 1, 0, 0, 0) should be 'object'"); -} - -var x24 = new Date(1899, 12, 1, 0, 0, 0); -if(x24 === undefined){ - $FAIL("#2.4: new Date(1899, 12, 1, 0, 0, 0) should not be undefined"); -} - -if (typeof new Date(1900, 0, 1, 0, 0, 0) !== "object") { - $FAIL("#3.1: typeof new Date(1900, 0, 1, 0, 0, 0) should be 'object'"); -} - -if (new Date(1900, 0, 1, 0, 0, 0) === undefined) { - $FAIL("#3.2: new Date(1900, 0, 1, 0, 0, 0) should not be undefined"); -} - -var x33 = new Date(1900, 0, 1, 0, 0, 0); -if(typeof x33 !== "object"){ - $FAIL("#3.3: typeof new Date(1900, 0, 1, 0, 0, 0) should be 'object'"); -} - -var x34 = new Date(1900, 0, 1, 0, 0, 0); -if(x34 === undefined){ - $FAIL("#3.4: new Date(1900, 0, 1, 0, 0, 0) should not be undefined"); -} - -if (typeof new Date(1969, 11, 31, 23, 59, 59) !== "object") { - $FAIL("#4.1: typeof new Date(1969, 11, 31, 23, 59, 59) should be 'object'"); -} - -if (new Date(1969, 11, 31, 23, 59, 59) === undefined) { - $FAIL("#4.2: new Date(1969, 11, 31, 23, 59, 59) should not be undefined"); -} - -var x43 = new Date(1969, 11, 31, 23, 59, 59); -if(typeof x43 !== "object"){ - $FAIL("#4.3: typeof new Date(1969, 11, 31, 23, 59, 59) should be 'object'"); -} - -var x44 = new Date(1969, 11, 31, 23, 59, 59); -if(x44 === undefined){ - $FAIL("#4.4: new Date(1969, 11, 31, 23, 59, 59) should not be undefined"); -} - -if (typeof new Date(1969, 12, 1, 0, 0, 0) !== "object") { - $FAIL("#5.1: typeof new Date(1969, 12, 1, 0, 0, 0) should be 'object'"); -} - -if (new Date(1969, 12, 1, 0, 0, 0) === undefined) { - $FAIL("#5.2: new Date(1969, 12, 1, 0, 0, 0) should not be undefined"); -} - -var x53 = new Date(1969, 12, 1, 0, 0, 0); -if(typeof x53 !== "object"){ - $FAIL("#5.3: typeof new Date(1969, 12, 1, 0, 0, 0) should be 'object'"); -} - -var x54 = new Date(1969, 12, 1, 0, 0, 0); -if(x54 === undefined){ - $FAIL("#5.4: new Date(1969, 12, 1, 0, 0, 0) should not be undefined"); -} - -if (typeof new Date(1970, 0, 1, 0, 0, 0) !== "object") { - $FAIL("#6.1: typeof new Date(1970, 0, 1, 0, 0, 0) should be 'object'"); -} - -if (new Date(1970, 0, 1, 0, 0, 0) === undefined) { - $FAIL("#6.2: new Date(1970, 0, 1, 0, 0, 0) should not be undefined"); -} - -var x63 = new Date(1970, 0, 1, 0, 0, 0); -if(typeof x63 !== "object"){ - $FAIL("#6.3: typeof new Date(1970, 0, 1, 0, 0, 0) should be 'object'"); -} - -var x64 = new Date(1970, 0, 1, 0, 0, 0); -if(x64 === undefined){ - $FAIL("#6.4: new Date(1970, 0, 1, 0, 0, 0) should not be undefined"); -} - -if (typeof new Date(1999, 11, 31, 23, 59, 59) !== "object") { - $FAIL("#7.1: typeof new Date(1999, 11, 31, 23, 59, 59) should be 'object'"); -} - -if (new Date(1999, 11, 31, 23, 59, 59) === undefined) { - $FAIL("#7.2: new Date(1999, 11, 31, 23, 59, 59) should not be undefined"); -} - -var x73 = new Date(1999, 11, 31, 23, 59, 59); -if(typeof x73 !== "object"){ - $FAIL("#7.3: typeof new Date(1999, 11, 31, 23, 59, 59) should be 'object'"); -} - -var x74 = new Date(1999, 11, 31, 23, 59, 59); -if(x74 === undefined){ - $FAIL("#7.4: new Date(1999, 11, 31, 23, 59, 59) should not be undefined"); -} - -if (typeof new Date(1999, 12, 1, 0, 0, 0) !== "object") { - $FAIL("#8.1: typeof new Date(1999, 12, 1, 0, 0, 0) should be 'object'"); -} - -if (new Date(1999, 12, 1, 0, 0, 0) === undefined) { - $FAIL("#8.2: new Date(1999, 12, 1, 0, 0, 0) should not be undefined"); -} - -var x83 = new Date(1999, 12, 1, 0, 0, 0); -if(typeof x83 !== "object"){ - $FAIL("#8.3: typeof new Date(1999, 12, 1, 0, 0, 0) should be 'object'"); -} - -var x84 = new Date(1999, 12, 1, 0, 0, 0); -if(x84 === undefined){ - $FAIL("#8.4: new Date(1999, 12, 1, 0, 0, 0) should not be undefined"); -} - -if (typeof new Date(2000, 0, 1, 0, 0, 0) !== "object") { - $FAIL("#9.1: typeof new Date(2000, 0, 1, 0, 0, 0) should be 'object'"); -} - -if (new Date(2000, 0, 1, 0, 0, 0) === undefined) { - $FAIL("#9.2: new Date(2000, 0, 1, 0, 0, 0) should not be undefined"); -} - -var x93 = new Date(2000, 0, 1, 0, 0, 0); -if(typeof x93 !== "object"){ - $FAIL("#9.3: typeof new Date(2000, 0, 1, 0, 0, 0) should be 'object'"); -} - -var x94 = new Date(2000, 0, 1, 0, 0, 0); -if(x94 === undefined){ - $FAIL("#9.4: new Date(2000, 0, 1, 0, 0, 0) should not be undefined"); -} - -if (typeof new Date(2099, 11, 31, 23, 59, 59) !== "object") { - $FAIL("#10.1: typeof new Date(2099, 11, 31, 23, 59, 59) should be 'object'"); -} - -if (new Date(2099, 11, 31, 23, 59, 59) === undefined) { - $FAIL("#10.2: new Date(2099, 11, 31, 23, 59, 59) should not be undefined"); -} - -var x103 = new Date(2099, 11, 31, 23, 59, 59); -if(typeof x103 !== "object"){ - $FAIL("#10.3: typeof new Date(2099, 11, 31, 23, 59, 59) should be 'object'"); -} - -var x104 = new Date(2099, 11, 31, 23, 59, 59); -if(x104 === undefined){ - $FAIL("#10.4: new Date(2099, 11, 31, 23, 59, 59) should not be undefined"); -} - -if (typeof new Date(2099, 12, 1, 0, 0, 0) !== "object") { - $FAIL("#11.1: typeof new Date(2099, 12, 1, 0, 0, 0) should be 'object'"); -} - -if (new Date(2099, 12, 1, 0, 0, 0) === undefined) { - $FAIL("#11.2: new Date(2099, 12, 1, 0, 0, 0) should not be undefined"); -} - -var x113 = new Date(2099, 12, 1, 0, 0, 0); -if(typeof x113 !== "object"){ - $FAIL("#11.3: typeof new Date(2099, 12, 1, 0, 0, 0) should be 'object'"); -} - -var x114 = new Date(2099, 12, 1, 0, 0, 0); -if(x114 === undefined){ - $FAIL("#11.4: new Date(2099, 12, 1, 0, 0, 0) should not be undefined"); -} - -if (typeof new Date(2100, 0, 1, 0, 0, 0) !== "object") { - $FAIL("#12.1: typeof new Date(2100, 0, 1, 0, 0, 0) should be 'object'"); -} - -if (new Date(2100, 0, 1, 0, 0, 0) === undefined) { - $FAIL("#12.2: new Date(2100, 0, 1, 0, 0, 0) should not be undefined"); -} - -var x123 = new Date(2100, 0, 1, 0, 0, 0); -if(typeof x123 !== "object"){ - $FAIL("#12.3: typeof new Date(2100, 0, 1, 0, 0, 0) should be 'object'"); -} - -var x124 = new Date(2100, 0, 1, 0, 0, 0); -if(x124 === undefined){ - $FAIL("#12.4: new Date(2100, 0, 1, 0, 0, 0) should not be undefined"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A1_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A1_T6.js deleted file mode 100644 index aff407b05..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A1_T6.js +++ /dev/null @@ -1,226 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.3.1_A1_T6; - * @section: 15.9.3.1; - * @assertion: When Date is called as part of a new expression it is - * a constructor: it initializes the newly created object; - * @description: 7 arguments, (year, month, date, hours, minutes, seconds, ms); -*/ - -if (typeof new Date(1899, 11, 31, 23, 59, 59, 999) !== "object") { - $FAIL("#1.1: typeof new Date(1899, 11, 31, 23, 59, 59, 999) should be 'object'"); -} - -if (new Date(1899, 11, 31, 23, 59, 59, 999) === undefined) { - $FAIL("#1.2: new Date(1899, 11, 31, 23, 59, 59, 999) should not be undefined"); -} - -var x13 = new Date(1899, 11, 31, 23, 59, 59, 999); -if(typeof x13 !== "object"){ - $FAIL("#1.3: typeof new Date(1899, 11, 31, 23, 59, 59, 999) should be 'object'"); -} - -var x14 = new Date(1899, 11, 31, 23, 59, 59, 999); -if(x14 === undefined){ - $FAIL("#1.4: new Date(1899, 11, 31, 23, 59, 59, 999) should not be undefined"); -} - -if (typeof new Date(1899, 12, 1, 0, 0, 0, 0) !== "object") { - $FAIL("#2.1: typeof new Date(1899, 12, 1, 0, 0, 0, 0) should be 'object'"); -} - -if (new Date(1899, 12, 1, 0, 0, 0, 0) === undefined) { - $FAIL("#2.2: new Date(1899, 12, 1, 0, 0, 0, 0) should not be undefined"); -} - -var x23 = new Date(1899, 12, 1, 0, 0, 0, 0); -if(typeof x23 !== "object"){ - $FAIL("#2.3: typeof new Date(1899, 12, 1, 0, 0, 0, 0) should be 'object'"); -} - -var x24 = new Date(1899, 12, 1, 0, 0, 0, 0); -if(x24 === undefined){ - $FAIL("#2.4: new Date(1899, 12, 1, 0, 0, 0, 0) should not be undefined"); -} - -if (typeof new Date(1900, 0, 1, 0, 0, 0, 0) !== "object") { - $FAIL("#3.1: typeof new Date(1900, 0, 1, 0, 0, 0, 0) should be 'object'"); -} - -if (new Date(1900, 0, 1, 0, 0, 0, 0) === undefined) { - $FAIL("#3.2: new Date(1900, 0, 1, 0, 0, 0, 0) should not be undefined"); -} - -var x33 = new Date(1900, 0, 1, 0, 0, 0, 0); -if(typeof x33 !== "object"){ - $FAIL("#3.3: typeof new Date(1900, 0, 1, 0, 0, 0, 0) should be 'object'"); -} - -var x34 = new Date(1900, 0, 1, 0, 0, 0, 0); -if(x34 === undefined){ - $FAIL("#3.4: new Date(1900, 0, 1, 0, 0, 0, 0) should not be undefined"); -} - -if (typeof new Date(1969, 11, 31, 23, 59, 59, 999) !== "object") { - $FAIL("#4.1: typeof new Date(1969, 11, 31, 23, 59, 59, 999) should be 'object'"); -} - -if (new Date(1969, 11, 31, 23, 59, 59, 999) === undefined) { - $FAIL("#4.2: new Date(1969, 11, 31, 23, 59, 59, 999) should not be undefined"); -} - -var x43 = new Date(1969, 11, 31, 23, 59, 59, 999); -if(typeof x43 !== "object"){ - $FAIL("#4.3: typeof new Date(1969, 11, 31, 23, 59, 59, 999) should be 'object'"); -} - -var x44 = new Date(1969, 11, 31, 23, 59, 59, 999); -if(x44 === undefined){ - $FAIL("#4.4: new Date(1969, 11, 31, 23, 59, 59, 999) should not be undefined"); -} - -if (typeof new Date(1969, 12, 1, 0, 0, 0, 0) !== "object") { - $FAIL("#5.1: typeof new Date(1969, 12, 1, 0, 0, 0, 0) should be 'object'"); -} - -if (new Date(1969, 12, 1, 0, 0, 0, 0) === undefined) { - $FAIL("#5.2: new Date(1969, 12, 1, 0, 0, 0, 0) should not be undefined"); -} - -var x53 = new Date(1969, 12, 1, 0, 0, 0, 0); -if(typeof x53 !== "object"){ - $FAIL("#5.3: typeof new Date(1969, 12, 1, 0, 0, 0, 0) should be 'object'"); -} - -var x54 = new Date(1969, 12, 1, 0, 0, 0, 0); -if(x54 === undefined){ - $FAIL("#5.4: new Date(1969, 12, 1, 0, 0, 0, 0) should not be undefined"); -} - -if (typeof new Date(1970, 0, 1, 0, 0, 0, 0) !== "object") { - $FAIL("#6.1: typeof new Date(1970, 0, 1, 0, 0, 0, 0) should be 'object'"); -} - -if (new Date(1970, 0, 1, 0, 0, 0, 0) === undefined) { - $FAIL("#6.2: new Date(1970, 0, 1, 0, 0, 0, 0) should not be undefined"); -} - -var x63 = new Date(1970, 0, 1, 0, 0, 0, 0); -if(typeof x63 !== "object"){ - $FAIL("#6.3: typeof new Date(1970, 0, 1, 0, 0, 0, 0) should be 'object'"); -} - -var x64 = new Date(1970, 0, 1, 0, 0, 0, 0); -if(x64 === undefined){ - $FAIL("#6.4: new Date(1970, 0, 1, 0, 0, 0, 0) should not be undefined"); -} - -if (typeof new Date(1999, 11, 31, 23, 59, 59, 999) !== "object") { - $FAIL("#7.1: typeof new Date(1999, 11, 31, 23, 59, 59, 999) should be 'object'"); -} - -if (new Date(1999, 11, 31, 23, 59, 59, 999) === undefined) { - $FAIL("#7.2: new Date(1999, 11, 31, 23, 59, 59, 999) should not be undefined"); -} - -var x73 = new Date(1999, 11, 31, 23, 59, 59, 999); -if(typeof x73 !== "object"){ - $FAIL("#7.3: typeof new Date(1999, 11, 31, 23, 59, 59, 999) should be 'object'"); -} - -var x74 = new Date(1999, 11, 31, 23, 59, 59, 999); -if(x74 === undefined){ - $FAIL("#7.4: new Date(1999, 11, 31, 23, 59, 59, 999) should not be undefined"); -} - -if (typeof new Date(1999, 12, 1, 0, 0, 0, 0) !== "object") { - $FAIL("#8.1: typeof new Date(1999, 12, 1, 0, 0, 0, 0) should be 'object'"); -} - -if (new Date(1999, 12, 1, 0, 0, 0, 0) === undefined) { - $FAIL("#8.2: new Date(1999, 12, 1, 0, 0, 0, 0) should not be undefined"); -} - -var x83 = new Date(1999, 12, 1, 0, 0, 0, 0); -if(typeof x83 !== "object"){ - $FAIL("#8.3: typeof new Date(1999, 12, 1, 0, 0, 0, 0) should be 'object'"); -} - -var x84 = new Date(1999, 12, 1, 0, 0, 0, 0); -if(x84 === undefined){ - $FAIL("#8.4: new Date(1999, 12, 1, 0, 0, 0, 0) should not be undefined"); -} - -if (typeof new Date(2000, 0, 1, 0, 0, 0, 0) !== "object") { - $FAIL("#9.1: typeof new Date(2000, 0, 1, 0, 0, 0, 0) should be 'object'"); -} - -if (new Date(2000, 0, 1, 0, 0, 0, 0) === undefined) { - $FAIL("#9.2: new Date(2000, 0, 1, 0, 0, 0, 0) should not be undefined"); -} - -var x93 = new Date(2000, 0, 1, 0, 0, 0, 0); -if(typeof x93 !== "object"){ - $FAIL("#9.3: typeof new Date(2000, 0, 1, 0, 0, 0, 0) should be 'object'"); -} - -var x94 = new Date(2000, 0, 1, 0, 0, 0, 0); -if(x94 === undefined){ - $FAIL("#9.4: new Date(2000, 0, 1, 0, 0, 0, 0) should not be undefined"); -} - -if (typeof new Date(2099, 11, 31, 23, 59, 59, 999) !== "object") { - $FAIL("#10.1: typeof new Date(2099, 11, 31, 23, 59, 59, 999) should be 'object'"); -} - -if (new Date(2099, 11, 31, 23, 59, 59, 999) === undefined) { - $FAIL("#10.2: new Date(2099, 11, 31, 23, 59, 59, 999) should not be undefined"); -} - -var x103 = new Date(2099, 11, 31, 23, 59, 59, 999); -if(typeof x103 !== "object"){ - $FAIL("#10.3: typeof new Date(2099, 11, 31, 23, 59, 59, 999) should be 'object'"); -} - -var x104 = new Date(2099, 11, 31, 23, 59, 59, 999); -if(x104 === undefined){ - $FAIL("#10.4: new Date(2099, 11, 31, 23, 59, 59, 999) should not be undefined"); -} - -if (typeof new Date(2099, 12, 1, 0, 0, 0, 0) !== "object") { - $FAIL("#11.1: typeof new Date(2099, 12, 1, 0, 0, 0, 0) should be 'object'"); -} - -if (new Date(2099, 12, 1, 0, 0, 0, 0) === undefined) { - $FAIL("#11.2: new Date(2099, 12, 1, 0, 0, 0, 0) should not be undefined"); -} - -var x113 = new Date(2099, 12, 1, 0, 0, 0, 0); -if(typeof x113 !== "object"){ - $FAIL("#11.3: typeof new Date(2099, 12, 1, 0, 0, 0, 0) should be 'object'"); -} - -var x114 = new Date(2099, 12, 1, 0, 0, 0, 0); -if(x114 === undefined){ - $FAIL("#11.4: new Date(2099, 12, 1, 0, 0, 0, 0) should not be undefined"); -} - -if (typeof new Date(2100, 0, 1, 0, 0, 0, 0) !== "object") { - $FAIL("#12.1: typeof new Date(2100, 0, 1, 0, 0, 0, 0) should be 'object'"); -} - -if (new Date(2100, 0, 1, 0, 0, 0, 0) === undefined) { - $FAIL("#12.2: new Date(2100, 0, 1, 0, 0, 0, 0) should not be undefined"); -} - -var x123 = new Date(2100, 0, 1, 0, 0, 0, 0); -if(typeof x123 !== "object"){ - $FAIL("#12.3: typeof new Date(2100, 0, 1, 0, 0, 0, 0) should be 'object'"); -} - -var x124 = new Date(2100, 0, 1, 0, 0, 0, 0); -if(x124 === undefined){ - $FAIL("#12.4: new Date(2100, 0, 1, 0, 0, 0, 0) should not be undefined"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A2_T1.js deleted file mode 100644 index fed34da13..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A2_T1.js +++ /dev/null @@ -1,191 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.3.1_A2_T1; - * @section: 15.9.3.1; - * @assertion: The [[Prototype]] property of the newly constructed object - * is set to the original Date prototype object, the one that is the - * initial value of Date.prototype; - * @description: 2 arguments, (year, month); -*/ - -var x11 = new Date(1899, 11); -if (typeof x11.constructor.prototype !== "object") { - $FAIL("#1.1: typeof x11.constructor.prototype === 'object'"); -} - -var x12 = new Date(1899, 11); -if (!Date.prototype.isPrototypeOf(x12)) { - $ERROR('#1.2: Date.prototype.isPrototypeOf(x12)'); -} - -var x13 = new Date(1899, 11); -if(Date.prototype !== x13.constructor.prototype){ - $FAIL("#1.3: Date.prototype === x13.constructor.prototype"); -} - -var x21 = new Date(1899, 12); -if (typeof x21.constructor.prototype !== "object") { - $FAIL("#2.1: typeof x11.constructor.prototype === 'object'"); -} - -var x22 = new Date(1899, 12); -if (!Date.prototype.isPrototypeOf(x22)) { - $ERROR('#2.2: Date.prototype.isPrototypeOf(x22)'); -} - -var x23 = new Date(1899, 12); -if(Date.prototype !== x23.constructor.prototype){ - $FAIL("#2.3: Date.prototype === x23.constructor.prototype"); -} - -var x31 = new Date(1900, 0); -if (typeof x31.constructor.prototype !== "object") { - $FAIL("#3.1: typeof x31.constructor.prototype === 'object'"); -} - -var x32 = new Date(1900, 0); -if (!Date.prototype.isPrototypeOf(x32)) { - $ERROR('#3.2: Date.prototype.isPrototypeOf(x32)'); -} - -var x33 = new Date(1900, 0); -if(Date.prototype !== x33.constructor.prototype){ - $FAIL("#3.3: Date.prototype === x33.constructor.prototype"); -} - -var x41 = new Date(1969, 11); -if (typeof x41.constructor.prototype !== "object") { - $FAIL("#4.1: typeof x41.constructor.prototype === 'object'"); -} - -var x42 = new Date(1969, 11); -if (!Date.prototype.isPrototypeOf(x42)) { - $ERROR('#4.2: Date.prototype.isPrototypeOf(x42)'); -} - -var x43 = new Date(1969, 11); -if(Date.prototype !== x43.constructor.prototype){ - $FAIL("#4.3: Date.prototype === x43.constructor.prototype"); -} - -var x51 = new Date(1969, 12); -if (typeof x51.constructor.prototype !== "object") { - $FAIL("#5.1: typeof x51.constructor.prototype === 'object'"); -} - -var x52 = new Date(1969, 12); -if (!Date.prototype.isPrototypeOf(x52)) { - $ERROR('#5.2: Date.prototype.isPrototypeOf(x52)'); -} - -var x53 = new Date(1969, 12); -if(Date.prototype !== x53.constructor.prototype){ - $FAIL("#5.3: Date.prototype === x53.constructor.prototype"); -} - -var x61 = new Date(1970, 0); -if (typeof x61.constructor.prototype !== "object") { - $FAIL("#6.1: typeof x61.constructor.prototype === 'object'"); -} - -var x62 = new Date(1970, 0); -if (!Date.prototype.isPrototypeOf(x62)) { - $ERROR('#6.2: Date.prototype.isPrototypeOf(x62)'); -} - -var x63 = new Date(1970, 0); -if(Date.prototype !== x63.constructor.prototype){ - $FAIL("#6.3: Date.prototype === x63.constructor.prototype"); -} - -var x71 = new Date(1999, 11); -if (typeof x71.constructor.prototype !== "object") { - $FAIL("#7.1: typeof x71.constructor.prototype === 'object'"); -} - -var x72 = new Date(1999, 11); -if (!Date.prototype.isPrototypeOf(x72)) { - $ERROR('#7.2: Date.prototype.isPrototypeOf(x72)'); -} - -var x73 = new Date(1999, 11); -if(Date.prototype !== x73.constructor.prototype){ - $FAIL("#7.3: Date.prototype === x73.constructor.prototype"); -} - -var x81 = new Date(1999, 12); -if (typeof x81.constructor.prototype !== "object") { - $FAIL("#8.1: typeof x81.constructor.prototype === 'object'"); -} - -var x82 = new Date(1999, 12); -if (!Date.prototype.isPrototypeOf(x82)) { - $ERROR('#8.2: Date.prototype.isPrototypeOf(x82)'); -} - -var x83 = new Date(1999, 12); -if(Date.prototype !== x83.constructor.prototype){ - $FAIL("#8.3: Date.prototype === x83.constructor.prototype"); -} - -var x91 = new Date(2000, 0); -if (typeof x91.constructor.prototype !== "object") { - $FAIL("#9.1: typeof x91.constructor.prototype === 'object'"); -} - -var x92 = new Date(2000, 0); -if (!Date.prototype.isPrototypeOf(x92)) { - $ERROR('#9.2: Date.prototype.isPrototypeOf(x92)'); -} - -var x93 = new Date(2000, 0); -if(Date.prototype !== x93.constructor.prototype){ - $FAIL("#9.3: Date.prototype === x93.constructor.prototype"); -} - -var x101 = new Date(2099, 11); -if (typeof x101.constructor.prototype !== "object") { - $FAIL("#10.1: typeof x101.constructor.prototype === 'object'"); -} - -var x102 = new Date(2099, 11); -if (!Date.prototype.isPrototypeOf(x102)) { - $ERROR('#10.2: Date.prototype.isPrototypeOf(x102)'); -} - -var x103 = new Date(2099, 11); -if(Date.prototype !== x103.constructor.prototype){ - $FAIL("#10.3: Date.prototype === x103.constructor.prototype"); -} - -var x111 = new Date(2099, 12); -if (typeof x111.constructor.prototype !== "object") { - $FAIL("#11.1: typeof x111.constructor.prototype === 'object'"); -} - -var x112 = new Date(2099, 12); -if (!Date.prototype.isPrototypeOf(x112)) { - $ERROR('#11.2: Date.prototype.isPrototypeOf(x112)'); -} - -var x113 = new Date(2099, 12); -if(Date.prototype !== x113.constructor.prototype){ - $FAIL("#11.3: Date.prototype === x113.constructor.prototype"); -} - -var x121 = new Date(2100, 0); -if (typeof x121.constructor.prototype !== "object") { - $FAIL("#12.1: typeof x121.constructor.prototype === 'object'"); -} - -var x122 = new Date(2100, 0); -if (!Date.prototype.isPrototypeOf(x122)) { - $ERROR('#12.2: Date.prototype.isPrototypeOf(x122)'); -} - -var x123 = new Date(2100, 0); -if(Date.prototype !== x123.constructor.prototype){ - $FAIL("#12.3: Date.prototype === x123.constructor.prototype"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A2_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A2_T2.js deleted file mode 100644 index 0f9f55da2..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A2_T2.js +++ /dev/null @@ -1,191 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.3.1_A2_T2; - * @section: 15.9.3.1; - * @assertion: The [[Prototype]] property of the newly constructed object - * is set to the original Date prototype object, the one that is the - * initial value of Date.prototype; - * @description: 3 arguments, (year, month, date); -*/ - -var x11 = new Date(1899, 11, 31); -if (typeof x11.constructor.prototype !== "object") { - $FAIL("#1.1: typeof x11.constructor.prototype === 'object'"); -} - -var x12 = new Date(1899, 11, 31); -if (!Date.prototype.isPrototypeOf(x12)) { - $ERROR('#1.2: Date.prototype.isPrototypeOf(x12)'); -} - -var x13 = new Date(1899, 11, 31); -if(Date.prototype !== x13.constructor.prototype){ - $FAIL("#1.3: Date.prototype === x13.constructor.prototype"); -} - -var x21 = new Date(1899, 12, 1); -if (typeof x21.constructor.prototype !== "object") { - $FAIL("#2.1: typeof x21.constructor.prototype === 'object'"); -} - -var x22 = new Date(1899, 12, 1); -if (!Date.prototype.isPrototypeOf(x22)) { - $ERROR('#2.2: Date.prototype.isPrototypeOf(x22)'); -} - -var x23 = new Date(1899, 12, 1); -if(Date.prototype !== x23.constructor.prototype){ - $FAIL("#2.3: Date.prototype === x23.constructor.prototype"); -} - -var x31 = new Date(1900, 0, 1); -if (typeof x31.constructor.prototype !== "object") { - $FAIL("#3.1: typeof x31.constructor.prototype === 'object'"); -} - -var x32 = new Date(1900, 0, 1); -if (!Date.prototype.isPrototypeOf(x32)) { - $ERROR('#3.2: Date.prototype.isPrototypeOf(x32)'); -} - -var x33 = new Date(1900, 0, 1); -if(Date.prototype !== x33.constructor.prototype){ - $FAIL("#3.3: Date.prototype === x33.constructor.prototype"); -} - -var x41 = new Date(1969, 11, 31); -if (typeof x41.constructor.prototype !== "object") { - $FAIL("#4.1: typeof x41.constructor.prototype === 'object'"); -} - -var x42 = new Date(1969, 11, 31); -if (!Date.prototype.isPrototypeOf(x42)) { - $ERROR('#4.2: Date.prototype.isPrototypeOf(x42)'); -} - -var x43 = new Date(1969, 11, 31); -if(Date.prototype !== x43.constructor.prototype){ - $FAIL("#4.3: Date.prototype === x43.constructor.prototype"); -} - -var x51 = new Date(1969, 12, 1); -if (typeof x51.constructor.prototype !== "object") { - $FAIL("#5.1: typeof x51.constructor.prototype === 'object'"); -} - -var x52 = new Date(1969, 12, 1); -if (!Date.prototype.isPrototypeOf(x52)) { - $ERROR('#5.2: Date.prototype.isPrototypeOf(x52)'); -} - -var x53 = new Date(1969, 12, 1); -if(Date.prototype !== x53.constructor.prototype){ - $FAIL("#5.3: Date.prototype === x53.constructor.prototype"); -} - -var x61 = new Date(1970, 0, 1); -if (typeof x61.constructor.prototype !== "object") { - $FAIL("#6.1: typeof x61.constructor.prototype === 'object'"); -} - -var x62 = new Date(1970, 0, 1); -if (!Date.prototype.isPrototypeOf(x62)) { - $ERROR('#6.2: Date.prototype.isPrototypeOf(x62)'); -} - -var x63 = new Date(1970, 0, 1); -if(Date.prototype !== x63.constructor.prototype){ - $FAIL("#6.3: Date.prototype === x63.constructor.prototype"); -} - -var x71 = new Date(1999, 11, 31); -if (typeof x71.constructor.prototype !== "object") { - $FAIL("#7.1: typeof x71.constructor.prototype === 'object'"); -} - -var x72 = new Date(1999, 11, 31); -if (!Date.prototype.isPrototypeOf(x72)) { - $ERROR('#7.2: Date.prototype.isPrototypeOf(x72)'); -} - -var x73 = new Date(1999, 11, 31); -if(Date.prototype !== x73.constructor.prototype){ - $FAIL("#7.3: Date.prototype === x73.constructor.prototype"); -} - -var x81 = new Date(1999, 12, 1); -if (typeof x81.constructor.prototype !== "object") { - $FAIL("#8.1: typeof x81.constructor.prototype === 'object'"); -} - -var x82 = new Date(1999, 12, 1); -if (!Date.prototype.isPrototypeOf(x82)) { - $ERROR('#8.2: Date.prototype.isPrototypeOf(x82)'); -} - -var x83 = new Date(1999, 12, 1); -if(Date.prototype !== x83.constructor.prototype){ - $FAIL("#8.3: Date.prototype === x83.constructor.prototype"); -} - -var x91 = new Date(2000, 0, 1); -if (typeof x91.constructor.prototype !== "object") { - $FAIL("#9.1: typeof x91.constructor.prototype === 'object'"); -} - -var x92 = new Date(2000, 0, 1); -if (!Date.prototype.isPrototypeOf(x92)) { - $ERROR('#9.2: Date.prototype.isPrototypeOf(x92)'); -} - -var x93 = new Date(2000, 0, 1); -if(Date.prototype !== x93.constructor.prototype){ - $FAIL("#9.3: Date.prototype === x93.constructor.prototype"); -} - -var x101 = new Date(2099, 11, 31); -if (typeof x101.constructor.prototype !== "object") { - $FAIL("#10.1: typeof x101.constructor.prototype === 'object'"); -} - -var x102 = new Date(2099, 11, 31); -if (!Date.prototype.isPrototypeOf(x102)) { - $ERROR('#10.2: Date.prototype.isPrototypeOf(x102)'); -} - -var x103 = new Date(2099, 11, 31); -if(Date.prototype !== x103.constructor.prototype){ - $FAIL("#10.3: Date.prototype === x103.constructor.prototype"); -} - -var x111 = new Date(2099, 12, 1); -if (typeof x111.constructor.prototype !== "object") { - $FAIL("#11.1: typeof x111.constructor.prototype === 'object'"); -} - -var x112 = new Date(2099, 12, 1); -if (!Date.prototype.isPrototypeOf(x112)) { - $ERROR('#11.2: Date.prototype.isPrototypeOf(x112)'); -} - -var x113 = new Date(2099, 12, 1); -if(Date.prototype !== x113.constructor.prototype){ - $FAIL("#11.3: Date.prototype === x113.constructor.prototype"); -} - -var x121 = new Date(2100, 0, 1); -if (typeof x121.constructor.prototype !== "object") { - $FAIL("#12.1: typeof x121.constructor.prototype === 'object'"); -} - -var x122 = new Date(2100, 0, 1); -if (!Date.prototype.isPrototypeOf(x122)) { - $ERROR('#12.2: Date.prototype.isPrototypeOf(x122)'); -} - -var x123 = new Date(2100, 0, 1); -if(Date.prototype !== x123.constructor.prototype){ - $FAIL("#12.3: Date.prototype === x123.constructor.prototype"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A2_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A2_T3.js deleted file mode 100644 index c0e1286aa..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A2_T3.js +++ /dev/null @@ -1,191 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.3.1_A2_T3; - * @section: 15.9.3.1; - * @assertion: The [[Prototype]] property of the newly constructed object - * is set to the original Date prototype object, the one that is the - * initial value of Date.prototype; - * @description: 4 arguments, (year, month, date, hours); -*/ - -var x11 = new Date(1899, 11, 31, 23); -if (typeof x11.constructor.prototype !== "object") { - $FAIL("#1.1: typeof x11.constructor.prototype === 'object'"); -} - -var x12 = new Date(1899, 11, 31, 23); -if (!Date.prototype.isPrototypeOf(x12)) { - $ERROR('#1.2: Date.prototype.isPrototypeOf(x12)'); -} - -var x13 = new Date(1899, 11, 31, 23); -if(Date.prototype !== x13.constructor.prototype){ - $FAIL("#1.3: Date.prototype === x13.constructor.prototype"); -} - -var x21 = new Date(1899, 12, 1, 0); -if (typeof x21.constructor.prototype !== "object") { - $FAIL("#2.1: typeof x21.constructor.prototype === 'object'"); -} - -var x22 = new Date(1899, 12, 1, 0); -if (!Date.prototype.isPrototypeOf(x22)) { - $ERROR('#2.2: Date.prototype.isPrototypeOf(x22)'); -} - -var x23 = new Date(1899, 12, 1, 0); -if(Date.prototype !== x23.constructor.prototype){ - $FAIL("#2.3: Date.prototype === x23.constructor.prototype"); -} - -var x31 = new Date(1900, 0, 1, 0); -if (typeof x31.constructor.prototype !== "object") { - $FAIL("#3.1: typeof x31.constructor.prototype === 'object'"); -} - -var x32 = new Date(1900, 0, 1, 0); -if (!Date.prototype.isPrototypeOf(x32)) { - $ERROR('#3.2: Date.prototype.isPrototypeOf(x32)'); -} - -var x33 = new Date(1900, 0, 1, 0); -if(Date.prototype !== x33.constructor.prototype){ - $FAIL("#3.3: Date.prototype === x33.constructor.prototype"); -} - -var x41 = new Date(1969, 11, 31, 23); -if (typeof x41.constructor.prototype !== "object") { - $FAIL("#4.1: typeof x41.constructor.prototype === 'object'"); -} - -var x42 = new Date(1969, 11, 31, 23); -if (!Date.prototype.isPrototypeOf(x42)) { - $ERROR('#4.2: Date.prototype.isPrototypeOf(x42)'); -} - -var x43 = new Date(1969, 11, 31, 23); -if(Date.prototype !== x43.constructor.prototype){ - $FAIL("#4.3: Date.prototype === x43.constructor.prototype"); -} - -var x51 = new Date(1969, 12, 1, 0); -if (typeof x51.constructor.prototype !== "object") { - $FAIL("#5.1: typeof x51.constructor.prototype === 'object'"); -} - -var x52 = new Date(1969, 12, 1, 0); -if (!Date.prototype.isPrototypeOf(x52)) { - $ERROR('#5.2: Date.prototype.isPrototypeOf(x52)'); -} - -var x53 = new Date(1969, 12, 1, 0); -if(Date.prototype !== x53.constructor.prototype){ - $FAIL("#5.3: Date.prototype === x53.constructor.prototype"); -} - -var x61 = new Date(1970, 0, 1, 0); -if (typeof x61.constructor.prototype !== "object") { - $FAIL("#6.1: typeof x61.constructor.prototype === 'object'"); -} - -var x62 = new Date(1970, 0, 1, 0); -if (!Date.prototype.isPrototypeOf(x62)) { - $ERROR('#6.2: Date.prototype.isPrototypeOf(x62)'); -} - -var x63 = new Date(1970, 0, 1, 0); -if(Date.prototype !== x63.constructor.prototype){ - $FAIL("#6.3: Date.prototype === x63.constructor.prototype"); -} - -var x71 = new Date(1999, 11, 31, 23); -if (typeof x71.constructor.prototype !== "object") { - $FAIL("#7.1: typeof x71.constructor.prototype === 'object'"); -} - -var x72 = new Date(1999, 11, 31, 23); -if (!Date.prototype.isPrototypeOf(x72)) { - $ERROR('#7.2: Date.prototype.isPrototypeOf(x72)'); -} - -var x73 = new Date(1999, 11, 31, 23); -if(Date.prototype !== x73.constructor.prototype){ - $FAIL("#7.3: Date.prototype === x73.constructor.prototype"); -} - -var x81 = new Date(1999, 12, 1, 0); -if (typeof x81.constructor.prototype !== "object") { - $FAIL("#8.1: typeof x81.constructor.prototype === 'object'"); -} - -var x82 = new Date(1999, 12, 1, 0); -if (!Date.prototype.isPrototypeOf(x82)) { - $ERROR('#8.2: Date.prototype.isPrototypeOf(x82)'); -} - -var x83 = new Date(1999, 12, 1, 0); -if(Date.prototype !== x83.constructor.prototype){ - $FAIL("#8.3: Date.prototype === x83.constructor.prototype"); -} - -var x91 = new Date(2000, 0, 1, 0); -if (typeof x91.constructor.prototype !== "object") { - $FAIL("#9.1: typeof x91.constructor.prototype === 'object'"); -} - -var x92 = new Date(2000, 0, 1, 0); -if (!Date.prototype.isPrototypeOf(x92)) { - $ERROR('#9.2: Date.prototype.isPrototypeOf(x92)'); -} - -var x93 = new Date(2000, 0, 1, 0); -if(Date.prototype !== x93.constructor.prototype){ - $FAIL("#9.3: Date.prototype === x93.constructor.prototype"); -} - -var x101 = new Date(2099, 11, 31, 23); -if (typeof x101.constructor.prototype !== "object") { - $FAIL("#10.1: typeof x101.constructor.prototype === 'object'"); -} - -var x102 = new Date(2099, 11, 31, 23); -if (!Date.prototype.isPrototypeOf(x102)) { - $ERROR('#10.2: Date.prototype.isPrototypeOf(x102)'); -} - -var x103 = new Date(2099, 11, 31, 23); -if(Date.prototype !== x103.constructor.prototype){ - $FAIL("#10.3: Date.prototype === x103.constructor.prototype"); -} - -var x111 = new Date(2099, 12, 1, 0); -if (typeof x111.constructor.prototype !== "object") { - $FAIL("#11.1: typeof x111.constructor.prototype === 'object'"); -} - -var x112 = new Date(2099, 12, 1, 0); -if (!Date.prototype.isPrototypeOf(x112)) { - $ERROR('#11.2: Date.prototype.isPrototypeOf(x112)'); -} - -var x113 = new Date(2099, 12, 1, 0); -if(Date.prototype !== x113.constructor.prototype){ - $FAIL("#11.3: Date.prototype === x113.constructor.prototype"); -} - -var x121 = new Date(2100, 0, 1, 0); -if (typeof x121.constructor.prototype !== "object") { - $FAIL("#12.1: typeof x121.constructor.prototype === 'object'"); -} - -var x122 = new Date(2100, 0, 1, 0); -if (!Date.prototype.isPrototypeOf(x122)) { - $ERROR('#12.2: Date.prototype.isPrototypeOf(x122)'); -} - -var x123 = new Date(2100, 0, 1, 0); -if(Date.prototype !== x123.constructor.prototype){ - $FAIL("#12.3: Date.prototype === x123.constructor.prototype"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A2_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A2_T4.js deleted file mode 100644 index a2dbeeba4..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A2_T4.js +++ /dev/null @@ -1,191 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.3.1_A2_T4; - * @section: 15.9.3.1; - * @assertion: The [[Prototype]] property of the newly constructed object - * is set to the original Date prototype object, the one that is the - * initial value of Date.prototype; - * @description: 5 arguments, (year, month, date, hours, minutes); -*/ - -var x11 = new Date(1899, 11, 31, 23, 59); -if (typeof x11.constructor.prototype !== "object") { - $FAIL("#1.1: typeof x11.constructor.prototype === 'object'"); -} - -var x12 = new Date(1899, 11, 31, 23, 59); -if (!Date.prototype.isPrototypeOf(x12)) { - $ERROR('#1.2: Date.prototype.isPrototypeOf(x12)'); -} - -var x13 = new Date(1899, 11, 31, 23, 59); -if(Date.prototype !== x13.constructor.prototype){ - $FAIL("#1.3: Date.prototype === x13.constructor.prototype"); -} - -var x21 = new Date(1899, 12, 1, 0, 0); -if (typeof x21.constructor.prototype !== "object") { - $FAIL("#2.1: typeof x21.constructor.prototype === 'object'"); -} - -var x22 = new Date(1899, 12, 1, 0, 0); -if (!Date.prototype.isPrototypeOf(x22)) { - $ERROR('#2.2: Date.prototype.isPrototypeOf(x22)'); -} - -var x23 = new Date(1899, 12, 1, 0, 0); -if(Date.prototype !== x23.constructor.prototype){ - $FAIL("#2.3: Date.prototype === x23.constructor.prototype"); -} - -var x31 = new Date(1900, 0, 1, 0, 0); -if (typeof x31.constructor.prototype !== "object") { - $FAIL("#3.1: typeof x31.constructor.prototype === 'object'"); -} - -var x32 = new Date(1900, 0, 1, 0, 0); -if (!Date.prototype.isPrototypeOf(x32)) { - $ERROR('#3.2: Date.prototype.isPrototypeOf(x32)'); -} - -var x33 = new Date(1900, 0, 1, 0, 0); -if(Date.prototype !== x33.constructor.prototype){ - $FAIL("#3.3: Date.prototype === x33.constructor.prototype"); -} - -var x41 = new Date(1969, 11, 31, 23, 59); -if (typeof x41.constructor.prototype !== "object") { - $FAIL("#4.1: typeof x41.constructor.prototype === 'object'"); -} - -var x42 = new Date(1969, 11, 31, 23, 59); -if (!Date.prototype.isPrototypeOf(x42)) { - $ERROR('#4.2: Date.prototype.isPrototypeOf(x42)'); -} - -var x43 = new Date(1969, 11, 31, 23, 59); -if(Date.prototype !== x43.constructor.prototype){ - $FAIL("#4.3: Date.prototype === x43.constructor.prototype"); -} - -var x51 = new Date(1969, 12, 1, 0, 0); -if (typeof x51.constructor.prototype !== "object") { - $FAIL("#5.1: typeof x51.constructor.prototype === 'object'"); -} - -var x52 = new Date(1969, 12, 1, 0, 0); -if (!Date.prototype.isPrototypeOf(x52)) { - $ERROR('#5.2: Date.prototype.isPrototypeOf(x52)'); -} - -var x53 = new Date(1969, 12, 1, 0, 0); -if(Date.prototype !== x53.constructor.prototype){ - $FAIL("#5.3: Date.prototype === x53.constructor.prototype"); -} - -var x61 = new Date(1970, 0, 1, 0, 0); -if (typeof x61.constructor.prototype !== "object") { - $FAIL("#6.1: typeof x61.constructor.prototype === 'object'"); -} - -var x62 = new Date(1970, 0, 1, 0, 0); -if (!Date.prototype.isPrototypeOf(x62)) { - $ERROR('#6.2: Date.prototype.isPrototypeOf(x62)'); -} - -var x63 = new Date(1970, 0, 1, 0, 0); -if(Date.prototype !== x63.constructor.prototype){ - $FAIL("#6.3: Date.prototype === x63.constructor.prototype"); -} - -var x71 = new Date(1999, 11, 31, 23, 59); -if (typeof x71.constructor.prototype !== "object") { - $FAIL("#7.1: typeof x71.constructor.prototype === 'object'"); -} - -var x72 = new Date(1999, 11, 31, 23, 59); -if (!Date.prototype.isPrototypeOf(x72)) { - $ERROR('#7.2: Date.prototype.isPrototypeOf(x72)'); -} - -var x73 = new Date(1999, 11, 31, 23, 59); -if(Date.prototype !== x73.constructor.prototype){ - $FAIL("#7.3: Date.prototype === x73.constructor.prototype"); -} - -var x81 = new Date(1999, 12, 1, 0, 0); -if (typeof x81.constructor.prototype !== "object") { - $FAIL("#8.1: typeof x81.constructor.prototype === 'object'"); -} - -var x82 = new Date(1999, 12, 1, 0, 0); -if (!Date.prototype.isPrototypeOf(x82)) { - $ERROR('#8.2: Date.prototype.isPrototypeOf(x82)'); -} - -var x83 = new Date(1999, 12, 1, 0, 0); -if(Date.prototype !== x83.constructor.prototype){ - $FAIL("#8.3: Date.prototype === x83.constructor.prototype"); -} - -var x91 = new Date(2000, 0, 1, 0, 0); -if (typeof x91.constructor.prototype !== "object") { - $FAIL("#9.1: typeof x91.constructor.prototype === 'object'"); -} - -var x92 = new Date(2000, 0, 1, 0, 0); -if (!Date.prototype.isPrototypeOf(x92)) { - $ERROR('#9.2: Date.prototype.isPrototypeOf(x92)'); -} - -var x93 = new Date(2000, 0, 1, 0, 0); -if(Date.prototype !== x93.constructor.prototype){ - $FAIL("#9.3: Date.prototype === x93.constructor.prototype"); -} - -var x101 = new Date(2099, 11, 31, 23, 59); -if (typeof x101.constructor.prototype !== "object") { - $FAIL("#10.1: typeof x101.constructor.prototype === 'object'"); -} - -var x102 = new Date(2099, 11, 31, 23, 59); -if (!Date.prototype.isPrototypeOf(x102)) { - $ERROR('#10.2: Date.prototype.isPrototypeOf(x102)'); -} - -var x103 = new Date(2099, 11, 31, 23, 59); -if(Date.prototype !== x103.constructor.prototype){ - $FAIL("#10.3: Date.prototype === x103.constructor.prototype"); -} - -var x111 = new Date(2099, 12, 1, 0, 0); -if (typeof x111.constructor.prototype !== "object") { - $FAIL("#11.1: typeof x111.constructor.prototype === 'object'"); -} - -var x112 = new Date(2099, 12, 1, 0, 0); -if (!Date.prototype.isPrototypeOf(x112)) { - $ERROR('#11.2: Date.prototype.isPrototypeOf(x112)'); -} - -var x113 = new Date(2099, 12, 1, 0, 0); -if(Date.prototype !== x113.constructor.prototype){ - $FAIL("#11.3: Date.prototype === x113.constructor.prototype"); -} - -var x121 = new Date(2100, 0, 1, 0, 0); -if (typeof x121.constructor.prototype !== "object") { - $FAIL("#12.1: typeof x121.constructor.prototype === 'object'"); -} - -var x122 = new Date(2100, 0, 1, 0, 0); -if (!Date.prototype.isPrototypeOf(x122)) { - $ERROR('#12.2: Date.prototype.isPrototypeOf(x122)'); -} - -var x123 = new Date(2100, 0, 1, 0, 0); -if(Date.prototype !== x123.constructor.prototype){ - $FAIL("#12.3: Date.prototype === x123.constructor.prototype"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A2_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A2_T5.js deleted file mode 100644 index bbc366156..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A2_T5.js +++ /dev/null @@ -1,191 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.3.1_A2_T5; - * @section: 15.9.3.1; - * @assertion: The [[Prototype]] property of the newly constructed object - * is set to the original Date prototype object, the one that is the - * initial value of Date.prototype; - * @description: 6 arguments, (year, month, date, hours, minutes, seconds); -*/ - -var x11 = new Date(1899, 11, 31, 23, 59, 59); -if (typeof x11.constructor.prototype !== "object") { - $FAIL("#1.1: typeof x11.constructor.prototype === 'object'"); -} - -var x12 = new Date(1899, 11, 31, 23, 59, 59); -if (!Date.prototype.isPrototypeOf(x12)) { - $ERROR('#1.2: Date.prototype.isPrototypeOf(x12)'); -} - -var x13 = new Date(1899, 11, 31, 23, 59, 59); -if(Date.prototype !== x13.constructor.prototype){ - $FAIL("#1.3: Date.prototype === x13.constructor.prototype"); -} - -var x21 = new Date(1899, 12, 1, 0, 0, 0); -if (typeof x21.constructor.prototype !== "object") { - $FAIL("#2.1: typeof x21.constructor.prototype === 'object'"); -} - -var x22 = new Date(1899, 12, 1, 0, 0, 0); -if (!Date.prototype.isPrototypeOf(x22)) { - $ERROR('#2.2: Date.prototype.isPrototypeOf(x22)'); -} - -var x23 = new Date(1899, 12, 1, 0, 0, 0); -if(Date.prototype !== x23.constructor.prototype){ - $FAIL("#2.3: Date.prototype === x23.constructor.prototype"); -} - -var x31 = new Date(1900, 0, 1, 0, 0, 0); -if (typeof x31.constructor.prototype !== "object") { - $FAIL("#3.1: typeof x31.constructor.prototype === 'object'"); -} - -var x32 = new Date(1900, 0, 1, 0, 0, 0); -if (!Date.prototype.isPrototypeOf(x32)) { - $ERROR('#3.2: Date.prototype.isPrototypeOf(x32)'); -} - -var x33 = new Date(1900, 0, 1, 0, 0, 0); -if(Date.prototype !== x33.constructor.prototype){ - $FAIL("#3.3: Date.prototype === x33.constructor.prototype"); -} - -var x41 = new Date(1969, 11, 31, 23, 59, 59); -if (typeof x41.constructor.prototype !== "object") { - $FAIL("#4.1: typeof x41.constructor.prototype === 'object'"); -} - -var x42 = new Date(1969, 11, 31, 23, 59, 59); -if (!Date.prototype.isPrototypeOf(x42)) { - $ERROR('#4.2: Date.prototype.isPrototypeOf(x42)'); -} - -var x43 = new Date(1969, 11, 31, 23, 59, 59); -if(Date.prototype !== x43.constructor.prototype){ - $FAIL("#4.3: Date.prototype === x43.constructor.prototype"); -} - -var x51 = new Date(1969, 12, 1, 0, 0, 0); -if (typeof x51.constructor.prototype !== "object") { - $FAIL("#5.1: typeof x51.constructor.prototype === 'object'"); -} - -var x52 = new Date(1969, 12, 1, 0, 0, 0); -if (!Date.prototype.isPrototypeOf(x52)) { - $ERROR('#5.2: Date.prototype.isPrototypeOf(x52)'); -} - -var x53 = new Date(1969, 12, 1, 0, 0, 0); -if(Date.prototype !== x53.constructor.prototype){ - $FAIL("#5.3: Date.prototype === x53.constructor.prototype"); -} - -var x61 = new Date(1970, 0, 1, 0, 0, 0); -if (typeof x61.constructor.prototype !== "object") { - $FAIL("#6.1: typeof x61.constructor.prototype === 'object'"); -} - -var x62 = new Date(1970, 0, 1, 0, 0, 0); -if (!Date.prototype.isPrototypeOf(x62)) { - $ERROR('#6.2: Date.prototype.isPrototypeOf(x62)'); -} - -var x63 = new Date(1970, 0, 1, 0, 0, 0); -if(Date.prototype !== x63.constructor.prototype){ - $FAIL("#6.3: Date.prototype === x63.constructor.prototype"); -} - -var x71 = new Date(1999, 11, 31, 23, 59, 59); -if (typeof x71.constructor.prototype !== "object") { - $FAIL("#7.1: typeof x71.constructor.prototype === 'object'"); -} - -var x72 = new Date(1999, 11, 31, 23, 59, 59); -if (!Date.prototype.isPrototypeOf(x72)) { - $ERROR('#7.2: Date.prototype.isPrototypeOf(x72)'); -} - -var x73 = new Date(1999, 11, 31, 23, 59, 59); -if(Date.prototype !== x73.constructor.prototype){ - $FAIL("#7.3: Date.prototype === x73.constructor.prototype"); -} - -var x81 = new Date(1999, 12, 1, 0, 0, 0); -if (typeof x81.constructor.prototype !== "object") { - $FAIL("#8.1: typeof x81.constructor.prototype === 'object'"); -} - -var x82 = new Date(1999, 12, 1, 0, 0, 0); -if (!Date.prototype.isPrototypeOf(x82)) { - $ERROR('#8.2: Date.prototype.isPrototypeOf(x82)'); -} - -var x83 = new Date(1999, 12, 1, 0, 0, 0); -if(Date.prototype !== x83.constructor.prototype){ - $FAIL("#8.3: Date.prototype === x83.constructor.prototype"); -} - -var x91 = new Date(2000, 0, 1, 0, 0, 0); -if (typeof x91.constructor.prototype !== "object") { - $FAIL("#9.1: typeof x91.constructor.prototype === 'object'"); -} - -var x92 = new Date(2000, 0, 1, 0, 0, 0); -if (!Date.prototype.isPrototypeOf(x92)) { - $ERROR('#9.2: Date.prototype.isPrototypeOf(x92)'); -} - -var x93 = new Date(2000, 0, 1, 0, 0, 0); -if(Date.prototype !== x93.constructor.prototype){ - $FAIL("#9.3: Date.prototype === x93.constructor.prototype"); -} - -var x101 = new Date(2099, 11, 31, 23, 59, 59); -if (typeof x101.constructor.prototype !== "object") { - $FAIL("#10.1: typeof x101.constructor.prototype === 'object'"); -} - -var x102 = new Date(2099, 11, 31, 23, 59, 59); -if (!Date.prototype.isPrototypeOf(x102)) { - $ERROR('#10.2: Date.prototype.isPrototypeOf(x102)'); -} - -var x103 = new Date(2099, 11, 31, 23, 59, 59); -if(Date.prototype !== x103.constructor.prototype){ - $FAIL("#10.3: Date.prototype === x103.constructor.prototype"); -} - -var x111 = new Date(2099, 12, 1, 0, 0, 0); -if (typeof x111.constructor.prototype !== "object") { - $FAIL("#11.1: typeof x111.constructor.prototype === 'object'"); -} - -var x112 = new Date(2099, 12, 1, 0, 0, 0); -if (!Date.prototype.isPrototypeOf(x112)) { - $ERROR('#11.2: Date.prototype.isPrototypeOf(x112)'); -} - -var x113 = new Date(2099, 12, 1, 0, 0, 0); -if(Date.prototype !== x113.constructor.prototype){ - $FAIL("#11.3: Date.prototype === x113.constructor.prototype"); -} - -var x121 = new Date(2100, 0, 1, 0, 0, 0); -if (typeof x121.constructor.prototype !== "object") { - $FAIL("#12.1: typeof x121.constructor.prototype === 'object'"); -} - -var x122 = new Date(2100, 0, 1, 0, 0, 0); -if (!Date.prototype.isPrototypeOf(x122)) { - $ERROR('#12.2: Date.prototype.isPrototypeOf(x122)'); -} - -var x123 = new Date(2100, 0, 1, 0, 0, 0); -if(Date.prototype !== x123.constructor.prototype){ - $FAIL("#12.3: Date.prototype === x123.constructor.prototype"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A2_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A2_T6.js deleted file mode 100644 index 8b8a6bb54..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A2_T6.js +++ /dev/null @@ -1,191 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.3.1_A2_T6; - * @section: 15.9.3.1; - * @assertion: The [[Prototype]] property of the newly constructed object - * is set to the original Date prototype object, the one that is the - * initial value of Date.prototype; - * @description: 7 arguments, (year, month, date, hours, minutes, seconds, ms); -*/ - -var x11 = new Date(1899, 11, 31, 23, 59, 59, 999); -if (typeof x11.constructor.prototype !== "object") { - $FAIL("#1.1: typeof x11.constructor.prototype === 'object'"); -} - -var x12 = new Date(1899, 11, 31, 23, 59, 59, 999); -if (!Date.prototype.isPrototypeOf(x12)) { - $ERROR('#1.2: Date.prototype.isPrototypeOf(x12)'); -} - -var x13 = new Date(1899, 11, 31, 23, 59, 59, 999); -if(Date.prototype !== x13.constructor.prototype){ - $FAIL("#1.3: Date.prototype === x13.constructor.prototype"); -} - -var x21 = new Date(1899, 12, 1, 0, 0, 0, 0); -if (typeof x21.constructor.prototype !== "object") { - $FAIL("#2.1: typeof x21.constructor.prototype === 'object'"); -} - -var x22 = new Date(1899, 12, 1, 0, 0, 0, 0); -if (!Date.prototype.isPrototypeOf(x22)) { - $ERROR('#2.2: Date.prototype.isPrototypeOf(x22)'); -} - -var x23 = new Date(1899, 12, 1, 0, 0, 0, 0); -if(Date.prototype !== x23.constructor.prototype){ - $FAIL("#2.3: Date.prototype === x23.constructor.prototype"); -} - -var x31 = new Date(1900, 0, 1, 0, 0, 0, 0); -if (typeof x31.constructor.prototype !== "object") { - $FAIL("#3.1: typeof x31.constructor.prototype === 'object'"); -} - -var x32 = new Date(1900, 0, 1, 0, 0, 0, 0); -if (!Date.prototype.isPrototypeOf(x32)) { - $ERROR('#3.2: Date.prototype.isPrototypeOf(x32)'); -} - -var x33 = new Date(1900, 0, 1, 0, 0, 0, 0); -if(Date.prototype !== x33.constructor.prototype){ - $FAIL("#3.3: Date.prototype === x33.constructor.prototype"); -} - -var x41 = new Date(1969, 11, 31, 23, 59, 59, 999); -if (typeof x41.constructor.prototype !== "object") { - $FAIL("#4.1: typeof x41.constructor.prototype === 'object'"); -} - -var x42 = new Date(1969, 11, 31, 23, 59, 59, 999); -if (!Date.prototype.isPrototypeOf(x42)) { - $ERROR('#4.2: Date.prototype.isPrototypeOf(x42)'); -} - -var x43 = new Date(1969, 11, 31, 23, 59, 59, 999); -if(Date.prototype !== x43.constructor.prototype){ - $FAIL("#4.3: Date.prototype === x43.constructor.prototype"); -} - -var x51 = new Date(1969, 12, 1, 0, 0, 0, 0); -if (typeof x51.constructor.prototype !== "object") { - $FAIL("#5.1: typeof x51.constructor.prototype === 'object'"); -} - -var x52 = new Date(1969, 12, 1, 0, 0, 0, 0); -if (!Date.prototype.isPrototypeOf(x52)) { - $ERROR('#5.2: Date.prototype.isPrototypeOf(x52)'); -} - -var x53 = new Date(1969, 12, 1, 0, 0, 0, 0); -if(Date.prototype !== x53.constructor.prototype){ - $FAIL("#5.3: Date.prototype === x53.constructor.prototype"); -} - -var x61 = new Date(1970, 0, 1, 0, 0, 0, 0); -if (typeof x61.constructor.prototype !== "object") { - $FAIL("#6.1: typeof x61.constructor.prototype === 'object'"); -} - -var x62 = new Date(1970, 0, 1, 0, 0, 0, 0); -if (!Date.prototype.isPrototypeOf(x62)) { - $ERROR('#6.2: Date.prototype.isPrototypeOf(x62)'); -} - -var x63 = new Date(1970, 0, 1, 0, 0, 0, 0); -if(Date.prototype !== x63.constructor.prototype){ - $FAIL("#6.3: Date.prototype === x63.constructor.prototype"); -} - -var x71 = new Date(1999, 11, 31, 23, 59, 59, 999); -if (typeof x71.constructor.prototype !== "object") { - $FAIL("#7.1: typeof x71.constructor.prototype === 'object'"); -} - -var x72 = new Date(1999, 11, 31, 23, 59, 59, 999); -if (!Date.prototype.isPrototypeOf(x72)) { - $ERROR('#7.2: Date.prototype.isPrototypeOf(x72)'); -} - -var x73 = new Date(1999, 11, 31, 23, 59, 59, 999); -if(Date.prototype !== x73.constructor.prototype){ - $FAIL("#7.3: Date.prototype === x73.constructor.prototype"); -} - -var x81 = new Date(1999, 12, 1, 0, 0, 0, 0); -if (typeof x81.constructor.prototype !== "object") { - $FAIL("#8.1: typeof x81.constructor.prototype === 'object'"); -} - -var x82 = new Date(1999, 12, 1, 0, 0, 0, 0); -if (!Date.prototype.isPrototypeOf(x82)) { - $ERROR('#8.2: Date.prototype.isPrototypeOf(x82)'); -} - -var x83 = new Date(1999, 12, 1, 0, 0, 0, 0); -if(Date.prototype !== x83.constructor.prototype){ - $FAIL("#8.3: Date.prototype === x83.constructor.prototype"); -} - -var x91 = new Date(2000, 0, 1, 0, 0, 0, 0); -if (typeof x91.constructor.prototype !== "object") { - $FAIL("#9.1: typeof x91.constructor.prototype === 'object'"); -} - -var x92 = new Date(2000, 0, 1, 0, 0, 0, 0); -if (!Date.prototype.isPrototypeOf(x92)) { - $ERROR('#9.2: Date.prototype.isPrototypeOf(x92)'); -} - -var x93 = new Date(2000, 0, 1, 0, 0, 0, 0); -if(Date.prototype !== x93.constructor.prototype){ - $FAIL("#9.3: Date.prototype === x93.constructor.prototype"); -} - -var x101 = new Date(2099, 11, 31, 23, 59, 59, 999); -if (typeof x101.constructor.prototype !== "object") { - $FAIL("#10.1: typeof x101.constructor.prototype === 'object'"); -} - -var x102 = new Date(2099, 11, 31, 23, 59, 59, 999); -if (!Date.prototype.isPrototypeOf(x102)) { - $ERROR('#10.2: Date.prototype.isPrototypeOf(x102)'); -} - -var x103 = new Date(2099, 11, 31, 23, 59, 59, 999); -if(Date.prototype !== x103.constructor.prototype){ - $FAIL("#10.3: Date.prototype === x103.constructor.prototype"); -} - -var x111 = new Date(2099, 12, 1, 0, 0, 0, 0); -if (typeof x111.constructor.prototype !== "object") { - $FAIL("#11.1: typeof x111.constructor.prototype === 'object'"); -} - -var x112 = new Date(2099, 12, 1, 0, 0, 0, 0); -if (!Date.prototype.isPrototypeOf(x112)) { - $ERROR('#11.2: Date.prototype.isPrototypeOf(x112)'); -} - -var x113 = new Date(2099, 12, 1, 0, 0, 0, 0); -if(Date.prototype !== x113.constructor.prototype){ - $FAIL("#11.3: Date.prototype === x113.constructor.prototype"); -} - -var x121 = new Date(2100, 0, 1, 0, 0, 0, 0); -if (typeof x121.constructor.prototype !== "object") { - $FAIL("#12.1: typeof x121.constructor.prototype === 'object'"); -} - -var x122 = new Date(2100, 0, 1, 0, 0, 0, 0); -if (!Date.prototype.isPrototypeOf(x122)) { - $ERROR('#12.2: Date.prototype.isPrototypeOf(x122)'); -} - -var x123 = new Date(2100, 0, 1, 0, 0, 0, 0); -if(Date.prototype !== x123.constructor.prototype){ - $FAIL("#12.3: Date.prototype === x123.constructor.prototype"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A3_T1.1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A3_T1.1.js deleted file mode 100644 index 368df4030..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A3_T1.1.js +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.3.1_A3_T1.1; - * @section: 15.9.3.1; - * @assertion: The [[Class]] property of the newly constructed object - * is set to "Date"; - * @description: Test based on delete prototype.toString - 2 arguments, (year, month); -*/ - -delete Date.prototype.toString; - -var x1 = new Date(1899, 11); -if (x1.toString() !== "[object Date]") { - $FAIL("#1: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x2 = new Date(1899, 12); -if (x2.toString() !== "[object Date]") { - $FAIL("#2: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x3 = new Date(1900, 0); -if (x3.toString() !== "[object Date]") { - $FAIL("#3: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x4 = new Date(1969, 11); -if (x4.toString() !== "[object Date]") { - $FAIL("#4: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x5 = new Date(1969, 12); -if (x5.toString() !== "[object Date]") { - $FAIL("#5: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x6 = new Date(1970, 0); -if (x6.toString() !== "[object Date]") { - $FAIL("#6: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x7 = new Date(1999, 11); -if (x7.toString() !== "[object Date]") { - $FAIL("#7: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x8 = new Date(1999, 12); -if (x8.toString() !== "[object Date]") { - $FAIL("#8: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x9 = new Date(2000, 0); -if (x9.toString() !== "[object Date]") { - $FAIL("#9: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x10 = new Date(2099, 11); -if (x10.toString() !== "[object Date]") { - $FAIL("#10: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x11 = new Date(2099, 12); -if (x11.toString() !== "[object Date]") { - $FAIL("#11: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x12 = new Date(2100, 0); -if (x12.toString() !== "[object Date]") { - $FAIL("#12: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A3_T1.2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A3_T1.2.js deleted file mode 100644 index 159c2a033..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A3_T1.2.js +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.3.1_A3_T1.2; - * @section: 15.9.3.1; - * @assertion: The [[Class]] property of the newly constructed object - * is set to "Date"; - * @description: Test based on overwriting prototype.toString - 2 arguments, (year, month); -*/ - -Date.prototype.toString = Object.prototype.toString; - -var x1 = new Date(1899, 11); -if (x1.toString() !== "[object Date]") { - $FAIL("#1: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x2 = new Date(1899, 12); -if (x2.toString() !== "[object Date]") { - $FAIL("#2: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x3 = new Date(1900, 0); -if (x3.toString() !== "[object Date]") { - $FAIL("#3: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x4 = new Date(1969, 11); -if (x4.toString() !== "[object Date]") { - $FAIL("#4: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x5 = new Date(1969, 12); -if (x5.toString() !== "[object Date]") { - $FAIL("#5: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x6 = new Date(1970, 0); -if (x6.toString() !== "[object Date]") { - $FAIL("#6: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x7 = new Date(1999, 11); -if (x7.toString() !== "[object Date]") { - $FAIL("#7: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x8 = new Date(1999, 12); -if (x8.toString() !== "[object Date]") { - $FAIL("#8: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x9 = new Date(2000, 0); -if (x9.toString() !== "[object Date]") { - $FAIL("#9: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x10 = new Date(2099, 11); -if (x10.toString() !== "[object Date]") { - $FAIL("#10: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x11 = new Date(2099, 12); -if (x11.toString() !== "[object Date]") { - $FAIL("#11: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x12 = new Date(2100, 0); -if (x12.toString() !== "[object Date]") { - $FAIL("#12: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A3_T2.1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A3_T2.1.js deleted file mode 100644 index 5ad7ac952..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A3_T2.1.js +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.3.1_A3_T2.1; - * @section: 15.9.3.1; - * @assertion: The [[Class]] property of the newly constructed object - * is set to "Date"; - * @description: Test based on delete prototype.toString - 3 arguments, (year, month, date); -*/ - -delete Date.prototype.toString; - -var x1 = new Date(1899, 11, 31); -if (x1.toString() !== "[object Date]") { - $FAIL("#1: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x2 = new Date(1899, 12, 1); -if (x2.toString() !== "[object Date]") { - $FAIL("#2: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x3 = new Date(1900, 0, 1); -if (x3.toString() !== "[object Date]") { - $FAIL("#3: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x4 = new Date(1969, 11, 31); -if (x4.toString() !== "[object Date]") { - $FAIL("#4: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x5 = new Date(1969, 12, 1); -if (x5.toString() !== "[object Date]") { - $FAIL("#5: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x6 = new Date(1970, 0, 1); -if (x6.toString() !== "[object Date]") { - $FAIL("#6: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x7 = new Date(1999, 11, 31); -if (x7.toString() !== "[object Date]") { - $FAIL("#7: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x8 = new Date(1999, 12, 1); -if (x8.toString() !== "[object Date]") { - $FAIL("#8: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x9 = new Date(2000, 0, 1); -if (x9.toString() !== "[object Date]") { - $FAIL("#9: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x10 = new Date(2099, 11, 31); -if (x10.toString() !== "[object Date]") { - $FAIL("#10: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x11 = new Date(2099, 12, 1); -if (x11.toString() !== "[object Date]") { - $FAIL("#11: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x12 = new Date(2100, 0, 1); -if (x12.toString() !== "[object Date]") { - $FAIL("#12: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A3_T2.2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A3_T2.2.js deleted file mode 100644 index 2189a087e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A3_T2.2.js +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.3.1_A3_T2.2; - * @section: 15.9.3.1; - * @assertion: The [[Class]] property of the newly constructed object - * is set to "Date"; - * @description: Test based on overwriting prototype.toString - 3 arguments, (year, month, date); -*/ - -Date.prototype.toString = Object.prototype.toString; - -var x1 = new Date(1899, 11, 31); -if (x1.toString() !== "[object Date]") { - $FAIL("#1: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x2 = new Date(1899, 12, 1); -if (x2.toString() !== "[object Date]") { - $FAIL("#2: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x3 = new Date(1900, 0, 1); -if (x3.toString() !== "[object Date]") { - $FAIL("#3: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x4 = new Date(1969, 11, 31); -if (x4.toString() !== "[object Date]") { - $FAIL("#4: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x5 = new Date(1969, 12, 1); -if (x5.toString() !== "[object Date]") { - $FAIL("#5: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x6 = new Date(1970, 0, 1); -if (x6.toString() !== "[object Date]") { - $FAIL("#6: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x7 = new Date(1999, 11, 31); -if (x7.toString() !== "[object Date]") { - $FAIL("#7: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x8 = new Date(1999, 12, 1); -if (x8.toString() !== "[object Date]") { - $FAIL("#8: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x9 = new Date(2000, 0, 1); -if (x9.toString() !== "[object Date]") { - $FAIL("#9: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x10 = new Date(2099, 11, 31); -if (x10.toString() !== "[object Date]") { - $FAIL("#10: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x11 = new Date(2099, 12, 1); -if (x11.toString() !== "[object Date]") { - $FAIL("#11: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x12 = new Date(2100, 0, 1); -if (x12.toString() !== "[object Date]") { - $FAIL("#12: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A3_T3.1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A3_T3.1.js deleted file mode 100644 index ee64f1163..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A3_T3.1.js +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.3.1_A3_T3.1; - * @section: 15.9.3.1; - * @assertion: The [[Class]] property of the newly constructed object - * is set to "Date"; - * @description: Test based on delete prototype.toString - 4 arguments, (year, month, date, hours); -*/ - -delete Date.prototype.toString; - -var x1 = new Date(1899, 11, 31, 23); -if (x1.toString() !== "[object Date]") { - $FAIL("#1: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x2 = new Date(1899, 12, 1, 0); -if (x2.toString() !== "[object Date]") { - $FAIL("#2: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x3 = new Date(1900, 0, 1, 0); -if (x3.toString() !== "[object Date]") { - $FAIL("#3: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x4 = new Date(1969, 11, 31, 23); -if (x4.toString() !== "[object Date]") { - $FAIL("#4: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x5 = new Date(1969, 12, 1, 0); -if (x5.toString() !== "[object Date]") { - $FAIL("#5: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x6 = new Date(1970, 0, 1, 0); -if (x6.toString() !== "[object Date]") { - $FAIL("#6: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x7 = new Date(1999, 11, 31, 23); -if (x7.toString() !== "[object Date]") { - $FAIL("#7: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x8 = new Date(1999, 12, 1, 0); -if (x8.toString() !== "[object Date]") { - $FAIL("#8: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x9 = new Date(2000, 0, 1, 0); -if (x9.toString() !== "[object Date]") { - $FAIL("#9: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x10 = new Date(2099, 11, 31, 23); -if (x10.toString() !== "[object Date]") { - $FAIL("#10: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x11 = new Date(2099, 12, 1, 0); -if (x11.toString() !== "[object Date]") { - $FAIL("#11: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x12 = new Date(2100, 0, 1, 0); -if (x12.toString() !== "[object Date]") { - $FAIL("#12: The [[Class]] property of the newly constructed object is set to 'Date'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A3_T3.2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A3_T3.2.js deleted file mode 100644 index 914585fe3..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A3_T3.2.js +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.3.1_A3_T3.2; - * @section: 15.9.3.1; - * @assertion: The [[Class]] property of the newly constructed object - * is set to "Date"; - * @description: Test based on overwriting prototype.toString - 4 arguments, (year, month, date, hours); -*/ - -Date.prototype.toString = Object.prototype.toString; - -var x1 = new Date(1899, 11, 31, 23); -if (x1.toString() !== "[object Date]") { - $FAIL("#1: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x2 = new Date(1899, 12, 1, 0); -if (x2.toString() !== "[object Date]") { - $FAIL("#2: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x3 = new Date(1900, 0, 1, 0); -if (x3.toString() !== "[object Date]") { - $FAIL("#3: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x4 = new Date(1969, 11, 31, 23); -if (x4.toString() !== "[object Date]") { - $FAIL("#4: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x5 = new Date(1969, 12, 1, 0); -if (x5.toString() !== "[object Date]") { - $FAIL("#5: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x6 = new Date(1970, 0, 1, 0); -if (x6.toString() !== "[object Date]") { - $FAIL("#6: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x7 = new Date(1999, 11, 31, 23); -if (x7.toString() !== "[object Date]") { - $FAIL("#7: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x8 = new Date(1999, 12, 1, 0); -if (x8.toString() !== "[object Date]") { - $FAIL("#8: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x9 = new Date(2000, 0, 1, 0); -if (x9.toString() !== "[object Date]") { - $FAIL("#9: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x10 = new Date(2099, 11, 31, 23); -if (x10.toString() !== "[object Date]") { - $FAIL("#10: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x11 = new Date(2099, 12, 1, 0); -if (x11.toString() !== "[object Date]") { - $FAIL("#11: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x12 = new Date(2100, 0, 1, 0); -if (x12.toString() !== "[object Date]") { - $FAIL("#12: The [[Class]] property of the newly constructed object is set to 'Date'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A3_T4.1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A3_T4.1.js deleted file mode 100644 index 7e03177f6..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A3_T4.1.js +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.3.1_A3_T4.1; - * @section: 15.9.3.1; - * @assertion: The [[Class]] property of the newly constructed object - * is set to "Date"; - * @description: Test based on delete prototype.toString - 5 arguments, (year, month, date, hours, minutes); -*/ - -delete Date.prototype.toString; - -var x1 = new Date(1899, 11, 31, 23, 59); -if (x1.toString() !== "[object Date]") { - $FAIL("#1: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x2 = new Date(1899, 12, 1, 0, 0); -if (x2.toString() !== "[object Date]") { - $FAIL("#2: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x3 = new Date(1900, 0, 1, 0, 0); -if (x3.toString() !== "[object Date]") { - $FAIL("#3: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x4 = new Date(1969, 11, 31, 23, 59); -if (x4.toString() !== "[object Date]") { - $FAIL("#4: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x5 = new Date(1969, 12, 1, 0, 0); -if (x5.toString() !== "[object Date]") { - $FAIL("#5: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x6 = new Date(1970, 0, 1, 0, 0); -if (x6.toString() !== "[object Date]") { - $FAIL("#6: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x7 = new Date(1999, 11, 31, 23, 59); -if (x7.toString() !== "[object Date]") { - $FAIL("#7: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x8 = new Date(1999, 12, 1, 0, 0); -if (x8.toString() !== "[object Date]") { - $FAIL("#8: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x9 = new Date(2000, 0, 1, 0, 0); -if (x9.toString() !== "[object Date]") { - $FAIL("#9: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x10 = new Date(2099, 11, 31, 23, 59); -if (x10.toString() !== "[object Date]") { - $FAIL("#10: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x11 = new Date(2099, 12, 1, 0, 0); -if (x11.toString() !== "[object Date]") { - $FAIL("#11: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x12 = new Date(2100, 0, 1, 0, 0); -if (x12.toString() !== "[object Date]") { - $FAIL("#12: The [[Class]] property of the newly constructed object is set to 'Date'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A3_T4.2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A3_T4.2.js deleted file mode 100644 index c9fcc3907..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A3_T4.2.js +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.3.1_A3_T4.2; - * @section: 15.9.3.1; - * @assertion: The [[Class]] property of the newly constructed object - * is set to "Date"; - * @description: Test based on overwriting prototype.toString - 5 arguments, (year, month, date, hours, minutes); -*/ - -Date.prototype.toString = Object.prototype.toString; - -var x1 = new Date(1899, 11, 31, 23, 59); -if (x1.toString() !== "[object Date]") { - $FAIL("#1: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x2 = new Date(1899, 12, 1, 0, 0); -if (x2.toString() !== "[object Date]") { - $FAIL("#2: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x3 = new Date(1900, 0, 1, 0, 0); -if (x3.toString() !== "[object Date]") { - $FAIL("#3: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x4 = new Date(1969, 11, 31, 23, 59); -if (x4.toString() !== "[object Date]") { - $FAIL("#4: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x5 = new Date(1969, 12, 1, 0, 0); -if (x5.toString() !== "[object Date]") { - $FAIL("#5: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x6 = new Date(1970, 0, 1, 0, 0); -if (x6.toString() !== "[object Date]") { - $FAIL("#6: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x7 = new Date(1999, 11, 31, 23, 59); -if (x7.toString() !== "[object Date]") { - $FAIL("#7: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x8 = new Date(1999, 12, 1, 0, 0); -if (x8.toString() !== "[object Date]") { - $FAIL("#8: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x9 = new Date(2000, 0, 1, 0, 0); -if (x9.toString() !== "[object Date]") { - $FAIL("#9: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x10 = new Date(2099, 11, 31, 23, 59); -if (x10.toString() !== "[object Date]") { - $FAIL("#10: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x11 = new Date(2099, 12, 1, 0, 0); -if (x11.toString() !== "[object Date]") { - $FAIL("#11: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x12 = new Date(2100, 0, 1, 0, 0); -if (x12.toString() !== "[object Date]") { - $FAIL("#12: The [[Class]] property of the newly constructed object is set to 'Date'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A3_T5.1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A3_T5.1.js deleted file mode 100644 index 818b79a9e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A3_T5.1.js +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.3.1_A3_T5.1; - * @section: 15.9.3.1; - * @assertion: The [[Class]] property of the newly constructed object - * is set to "Date"; - * @description: Test based on delete prototype.toString - 6 arguments, (year, month, date, hours, minutes, seconds); -*/ - -delete Date.prototype.toString; - -var x1 = new Date(1899, 11, 31, 23, 59, 59); -if (x1.toString() !== "[object Date]") { - $FAIL("#1: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x2 = new Date(1899, 12, 1, 0, 0, 0); -if (x2.toString() !== "[object Date]") { - $FAIL("#2: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x3 = new Date(1900, 0, 1, 0, 0, 0); -if (x3.toString() !== "[object Date]") { - $FAIL("#3: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x4 = new Date(1969, 11, 31, 23, 59, 59); -if (x4.toString() !== "[object Date]") { - $FAIL("#4: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x5 = new Date(1969, 12, 1, 0, 0, 0); -if (x5.toString() !== "[object Date]") { - $FAIL("#5: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x6 = new Date(1970, 0, 1, 0, 0, 0); -if (x6.toString() !== "[object Date]") { - $FAIL("#6: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x7 = new Date(1999, 11, 31, 23, 59, 59); -if (x7.toString() !== "[object Date]") { - $FAIL("#7: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x8 = new Date(1999, 12, 1, 0, 0, 0); -if (x8.toString() !== "[object Date]") { - $FAIL("#8: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x9 = new Date(2000, 0, 1, 0, 0, 0); -if (x9.toString() !== "[object Date]") { - $FAIL("#9: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x10 = new Date(2099, 11, 31, 23, 59, 59); -if (x10.toString() !== "[object Date]") { - $FAIL("#10: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x11 = new Date(2099, 12, 1, 0, 0, 0); -if (x11.toString() !== "[object Date]") { - $FAIL("#11: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x12 = new Date(2100, 0, 1, 0, 0, 0); -if (x12.toString() !== "[object Date]") { - $FAIL("#12: The [[Class]] property of the newly constructed object is set to 'Date'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A3_T5.2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A3_T5.2.js deleted file mode 100644 index 3badc050e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A3_T5.2.js +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.3.1_A3_T5.2; - * @section: 15.9.3.1; - * @assertion: The [[Class]] property of the newly constructed object - * is set to "Date"; - * @description: Test based on overwriting prototype.toString - 6 arguments, (year, month, date, hours, minutes, seconds); -*/ - -Date.prototype.toString = Object.prototype.toString; - -var x1 = new Date(1899, 11, 31, 23, 59, 59); -if (x1.toString() !== "[object Date]") { - $FAIL("#1: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x2 = new Date(1899, 12, 1, 0, 0, 0); -if (x2.toString() !== "[object Date]") { - $FAIL("#2: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x3 = new Date(1900, 0, 1, 0, 0, 0); -if (x3.toString() !== "[object Date]") { - $FAIL("#3: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x4 = new Date(1969, 11, 31, 23, 59, 59); -if (x4.toString() !== "[object Date]") { - $FAIL("#4: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x5 = new Date(1969, 12, 1, 0, 0, 0); -if (x5.toString() !== "[object Date]") { - $FAIL("#5: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x6 = new Date(1970, 0, 1, 0, 0, 0); -if (x6.toString() !== "[object Date]") { - $FAIL("#6: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x7 = new Date(1999, 11, 31, 23, 59, 59); -if (x7.toString() !== "[object Date]") { - $FAIL("#7: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x8 = new Date(1999, 12, 1, 0, 0, 0); -if (x8.toString() !== "[object Date]") { - $FAIL("#8: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x9 = new Date(2000, 0, 1, 0, 0, 0); -if (x9.toString() !== "[object Date]") { - $FAIL("#9: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x10 = new Date(2099, 11, 31, 23, 59, 59); -if (x10.toString() !== "[object Date]") { - $FAIL("#10: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x11 = new Date(2099, 12, 1, 0, 0, 0); -if (x11.toString() !== "[object Date]") { - $FAIL("#11: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x12 = new Date(2100, 0, 1, 0, 0, 0); -if (x12.toString() !== "[object Date]") { - $FAIL("#12: The [[Class]] property of the newly constructed object is set to 'Date'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A3_T6.1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A3_T6.1.js deleted file mode 100644 index 17dace75a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A3_T6.1.js +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.3.1_A3_T6.1; - * @section: 15.9.3.1; - * @assertion: The [[Class]] property of the newly constructed object - * is set to "Date"; - * @description: Test based on delete prototype.toString - 7 arguments, (year, month, date, hours, minutes, seconds, ms); -*/ - -delete Date.prototype.toString; - -var x1 = new Date(1899, 11, 31, 23, 59, 59, 999); -if (x1.toString() !== "[object Date]") { - $FAIL("#1: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x2 = new Date(1899, 12, 1, 0, 0, 0, 0); -if (x2.toString() !== "[object Date]") { - $FAIL("#2: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x3 = new Date(1900, 0, 1, 0, 0, 0, 0); -if (x3.toString() !== "[object Date]") { - $FAIL("#3: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x4 = new Date(1969, 11, 31, 23, 59, 59, 999); -if (x4.toString() !== "[object Date]") { - $FAIL("#4: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x5 = new Date(1969, 12, 1, 0, 0, 0, 0); -if (x5.toString() !== "[object Date]") { - $FAIL("#5: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x6 = new Date(1970, 0, 1, 0, 0, 0, 0); -if (x6.toString() !== "[object Date]") { - $FAIL("#6: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x7 = new Date(1999, 11, 31, 23, 59, 59, 999); -if (x7.toString() !== "[object Date]") { - $FAIL("#7: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x8 = new Date(1999, 12, 1, 0, 0, 0, 0); -if (x8.toString() !== "[object Date]") { - $FAIL("#8: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x9 = new Date(2000, 0, 1, 0, 0, 0, 0); -if (x9.toString() !== "[object Date]") { - $FAIL("#9: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x10 = new Date(2099, 11, 31, 23, 59, 59, 999); -if (x10.toString() !== "[object Date]") { - $FAIL("#10: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x11 = new Date(2099, 12, 1, 0, 0, 0, 0); -if (x11.toString() !== "[object Date]") { - $FAIL("#11: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x12 = new Date(2100, 0, 1, 0, 0, 0, 0); -if (x12.toString() !== "[object Date]") { - $FAIL("#12: The [[Class]] property of the newly constructed object is set to 'Date'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A3_T6.2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A3_T6.2.js deleted file mode 100644 index 913970485..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A3_T6.2.js +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.3.1_A3_T6.2; - * @section: 15.9.3.1; - * @assertion: The [[Class]] property of the newly constructed object - * is set to "Date"; - * @description: Test based on overwriting prototype.toString - 7 arguments, (year, month, date, hours, minutes, seconds, ms); -*/ - -Date.prototype.toString = Object.prototype.toString; - -var x1 = new Date(1899, 11, 31, 23, 59, 59, 999); -if (x1.toString() !== "[object Date]") { - $FAIL("#1: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x2 = new Date(1899, 12, 1, 0, 0, 0, 0); -if (x2.toString() !== "[object Date]") { - $FAIL("#2: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x3 = new Date(1900, 0, 1, 0, 0, 0, 0); -if (x3.toString() !== "[object Date]") { - $FAIL("#3: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x4 = new Date(1969, 11, 31, 23, 59, 59, 999); -if (x4.toString() !== "[object Date]") { - $FAIL("#4: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x5 = new Date(1969, 12, 1, 0, 0, 0, 0); -if (x5.toString() !== "[object Date]") { - $FAIL("#5: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x6 = new Date(1970, 0, 1, 0, 0, 0, 0); -if (x6.toString() !== "[object Date]") { - $FAIL("#6: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x7 = new Date(1999, 11, 31, 23, 59, 59, 999); -if (x7.toString() !== "[object Date]") { - $FAIL("#7: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x8 = new Date(1999, 12, 1, 0, 0, 0, 0); -if (x8.toString() !== "[object Date]") { - $FAIL("#8: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x9 = new Date(2000, 0, 1, 0, 0, 0, 0); -if (x9.toString() !== "[object Date]") { - $FAIL("#9: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x10 = new Date(2099, 11, 31, 23, 59, 59, 999); -if (x10.toString() !== "[object Date]") { - $FAIL("#10: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x11 = new Date(2099, 12, 1, 0, 0, 0, 0); -if (x11.toString() !== "[object Date]") { - $FAIL("#11: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x12 = new Date(2100, 0, 1, 0, 0, 0, 0); -if (x12.toString() !== "[object Date]") { - $FAIL("#12: The [[Class]] property of the newly constructed object is set to 'Date'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A4_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A4_T1.js deleted file mode 100644 index f12142ffb..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A4_T1.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.3.1_A4_T1; - * @section: 15.9.3.1; - * @assertion: The [[Value]] property of the newly constructed object - * is set by following steps: - * 1. Call ToNumber(year) - * 2. Call ToNumber(month) - * 3. If date is supplied use ToNumber(date) - * 4. If hours is supplied use ToNumber(hours) - * 5. If minutes is supplied use ToNumber(minutes) - * 6. If seconds is supplied use ToNumber(seconds) - * 7. If ms is supplied use ToNumber(ms); - * @description: 2 arguments, (year, month); - */ - -var myObj = function(val){ - this.value = val; - this.valueOf = function(){throw "valueOf-"+this.value;}; - this.toString = function(){throw "toString-"+this.value;}; -}; - -//CHECK#1 -try{ - var x1 = new Date(new myObj(1), new myObj(2)); - $ERROR("#1: The 1st step is calling ToNumber(year)"); -} -catch(e){ - if(e !== "valueOf-1"){ - $ERROR("#1: The 1st step is calling ToNumber(year)"); - } -} - -//CHECK#2 -try{ - var x2 = new Date(1, new myObj(2)); - $ERROR("#2: The 2nd step is calling ToNumber(month)"); -} -catch(e){ - if(e !== "valueOf-2"){ - $ERROR("#2: The 2nd step is calling ToNumber(month)"); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A4_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A4_T2.js deleted file mode 100644 index 38d241be2..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A4_T2.js +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.3.1_A4_T2; - * @section: 15.9.3.1; - * @assertion: The [[Value]] property of the newly constructed object - * is set by following steps: - * 1. Call ToNumber(year) - * 2. Call ToNumber(month) - * 3. If date is supplied use ToNumber(date) - * 4. If hours is supplied use ToNumber(hours) - * 5. If minutes is supplied use ToNumber(minutes) - * 6. If seconds is supplied use ToNumber(seconds) - * 7. If ms is supplied use ToNumber(ms); - * @description: 3 arguments, (year, month, date); - */ - -var myObj = function(val){ - this.value = val; - this.valueOf = function(){throw "valueOf-"+this.value;}; - this.toString = function(){throw "toString-"+this.value;}; -}; - -//CHECK#1 -try{ - var x1 = new Date(new myObj(1), new myObj(2), new myObj(3)); - $ERROR("#1: The 1st step is calling ToNumber(year)"); -} -catch(e){ - if(e !== "valueOf-1"){ - $ERROR("#1: The 1st step is calling ToNumber(year)"); - } -} - -//CHECK#2 -try{ - var x2 = new Date(1, new myObj(2), new myObj(3)); - $ERROR("#2: The 2nd step is calling ToNumber(month)"); -} -catch(e){ - if(e !== "valueOf-2"){ - $ERROR("#2: The 2nd step is calling ToNumber(month)"); - } -} - -//CHECK#3 -try{ - var x3 = new Date(1, 2, new myObj(3)); - $ERROR("#3: The 3rd step is calling ToNumber(date)"); -} -catch(e){ - if(e !== "valueOf-3"){ - $ERROR("#3: The 3rd step is calling ToNumber(date)"); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A4_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A4_T3.js deleted file mode 100644 index 4b4989101..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A4_T3.js +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.3.1_A4_T3; - * @section: 15.9.3.1; - * @assertion: The [[Value]] property of the newly constructed object - * is set by following steps: - * 1. Call ToNumber(year) - * 2. Call ToNumber(month) - * 3. If date is supplied use ToNumber(date) - * 4. If hours is supplied use ToNumber(hours) - * 5. If minutes is supplied use ToNumber(minutes) - * 6. If seconds is supplied use ToNumber(seconds) - * 7. If ms is supplied use ToNumber(ms); - * @description: 4 arguments, (year, month, date, hours); - */ - -var myObj = function(val){ - this.value = val; - this.valueOf = function(){throw "valueOf-"+this.value;}; - this.toString = function(){throw "toString-"+this.value;}; -}; - -//CHECK#1 -try{ - var x1 = new Date(new myObj(1), new myObj(2), new myObj(3), new myObj(4)); - $ERROR("#1: The 1st step is calling ToNumber(year)"); -} -catch(e){ - if(e !== "valueOf-1"){ - $ERROR("#1: The 1st step is calling ToNumber(year)"); - } -} - -//CHECK#2 -try{ - var x2 = new Date(1, new myObj(2), new myObj(3), new myObj(4)); - $ERROR("#2: The 2nd step is calling ToNumber(month)"); -} -catch(e){ - if(e !== "valueOf-2"){ - $ERROR("#2: The 2nd step is calling ToNumber(month)"); - } -} - -//CHECK#3 -try{ - var x3 = new Date(1, 2, new myObj(3), new myObj(4)); - $ERROR("#3: The 3rd step is calling ToNumber(date)"); -} -catch(e){ - if(e !== "valueOf-3"){ - $ERROR("#3: The 3rd step is calling ToNumber(date)"); - } -} - -//CHECK#4 -try{ - var x4 = new Date(1, 2, 3, new myObj(4)); - $ERROR("#4: The 4th step is calling ToNumber(hours)"); -} -catch(e){ - if(e !== "valueOf-4"){ - $ERROR("#4: The 4th step is calling ToNumber(hours)"); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A4_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A4_T4.js deleted file mode 100644 index ba80ecd96..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A4_T4.js +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.3.1_A4_T4; - * @section: 15.9.3.1; - * @assertion: The [[Value]] property of the newly constructed object - * is set by following steps: - * 1. Call ToNumber(year) - * 2. Call ToNumber(month) - * 3. If date is supplied use ToNumber(date) - * 4. If hours is supplied use ToNumber(hours) - * 5. If minutes is supplied use ToNumber(minutes) - * 6. If seconds is supplied use ToNumber(seconds) - * 7. If ms is supplied use ToNumber(ms); - * @description: 5 arguments, (year, month, date, hours, minutes); - */ - -var myObj = function(val){ - this.value = val; - this.valueOf = function(){throw "valueOf-"+this.value;}; - this.toString = function(){throw "toString-"+this.value;}; -}; - -//CHECK#1 -try{ - var x1 = new Date(new myObj(1), new myObj(2), new myObj(3), new myObj(4), new myObj(5)); - $ERROR("#1: The 1st step is calling ToNumber(year)"); -} -catch(e){ - if(e !== "valueOf-1"){ - $ERROR("#1: The 1st step is calling ToNumber(year)"); - } -} - -//CHECK#2 -try{ - var x2 = new Date(1, new myObj(2), new myObj(3), new myObj(4), new myObj(5)); - $ERROR("#2: The 2nd step is calling ToNumber(month)"); -} -catch(e){ - if(e !== "valueOf-2"){ - $ERROR("#2: The 2nd step is calling ToNumber(month)"); - } -} - -//CHECK#3 -try{ - var x3 = new Date(1, 2, new myObj(3), new myObj(4), new myObj(5)); - $ERROR("#3: The 3rd step is calling ToNumber(date)"); -} -catch(e){ - if(e !== "valueOf-3"){ - $ERROR("#3: The 3rd step is calling ToNumber(date)"); - } -} - -//CHECK#4 -try{ - var x4 = new Date(1, 2, 3, new myObj(4), new myObj(5)); - $ERROR("#4: The 4th step is calling ToNumber(hours)"); -} -catch(e){ - if(e !== "valueOf-4"){ - $ERROR("#4: The 4th step is calling ToNumber(hours)"); - } -} - -//CHECK#5 -try{ - var x5 = new Date(1, 2, 3, 4, new myObj(5)); - $ERROR("#5: The 5th step is calling ToNumber(minutes)"); -} -catch(e){ - if(e !== "valueOf-5"){ - $ERROR("#5: The 5th step is calling ToNumber(minutes)"); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A4_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A4_T5.js deleted file mode 100644 index 234e567fe..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A4_T5.js +++ /dev/null @@ -1,89 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.3.1_A4_T5; - * @section: 15.9.3.1; - * @assertion: The [[Value]] property of the newly constructed object - * is set by following steps: - * 1. Call ToNumber(year) - * 2. Call ToNumber(month) - * 3. If date is supplied use ToNumber(date) - * 4. If hours is supplied use ToNumber(hours) - * 5. If minutes is supplied use ToNumber(minutes) - * 6. If seconds is supplied use ToNumber(seconds) - * 7. If ms is supplied use ToNumber(ms); - * @description: 6 arguments, (year, month, date, hours, minutes, seconds); - */ - -var myObj = function(val){ - this.value = val; - this.valueOf = function(){throw "valueOf-"+this.value;}; - this.toString = function(){throw "toString-"+this.value;}; -}; - -//CHECK#1 -try{ - var x1 = new Date(new myObj(1), new myObj(2), new myObj(3), new myObj(4), new myObj(5), new myObj(6)); - $ERROR("#1: The 1st step is calling ToNumber(year)"); -} -catch(e){ - if(e !== "valueOf-1"){ - $ERROR("#1: The 1st step is calling ToNumber(year)"); - } -} - -//CHECK#2 -try{ - var x2 = new Date(1, new myObj(2), new myObj(3), new myObj(4), new myObj(5), new myObj(6)); - $ERROR("#2: The 2nd step is calling ToNumber(month)"); -} -catch(e){ - if(e !== "valueOf-2"){ - $ERROR("#2: The 2nd step is calling ToNumber(month)"); - } -} - -//CHECK#3 -try{ - var x3 = new Date(1, 2, new myObj(3), new myObj(4), new myObj(5), new myObj(6)); - $ERROR("#3: The 3rd step is calling ToNumber(date)"); -} -catch(e){ - if(e !== "valueOf-3"){ - $ERROR("#3: The 3rd step is calling ToNumber(date)"); - } -} - -//CHECK#4 -try{ - var x4 = new Date(1, 2, 3, new myObj(4), new myObj(5), new myObj(6)); - $ERROR("#4: The 4th step is calling ToNumber(hours)"); -} -catch(e){ - if(e !== "valueOf-4"){ - $ERROR("#4: The 4th step is calling ToNumber(hours)"); - } -} - -//CHECK#5 -try{ - var x5 = new Date(1, 2, 3, 4, new myObj(5), new myObj(6)); - $ERROR("#5: The 5th step is calling ToNumber(minutes)"); -} -catch(e){ - if(e !== "valueOf-5"){ - $ERROR("#5: The 5th step is calling ToNumber(minutes)"); - } -} - -//CHECK#6 -try{ - var x6 = new Date(1, 2, 3, 4, 5, new myObj(6)); - $ERROR("#6: The 6th step is calling ToNumber(seconds)"); -} -catch(e){ - if(e !== "valueOf-6"){ - $ERROR("#6: The 6th step is calling ToNumber(seconds)"); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A4_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A4_T6.js deleted file mode 100644 index d50b643b0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A4_T6.js +++ /dev/null @@ -1,100 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.3.1_A4_T6; - * @section: 15.9.3.1; - * @assertion: The [[Value]] property of the newly constructed object - * is set by following steps: - * 1. Call ToNumber(year) - * 2. Call ToNumber(month) - * 3. If date is supplied use ToNumber(date) - * 4. If hours is supplied use ToNumber(hours) - * 5. If minutes is supplied use ToNumber(minutes) - * 6. If seconds is supplied use ToNumber(seconds) - * 7. If ms is supplied use ToNumber(ms); - * @description: 7 arguments, (year, month, date, hours, minutes, seconds, ms); - */ - -var myObj = function(val){ - this.value = val; - this.valueOf = function(){throw "valueOf-"+this.value;}; - this.toString = function(){throw "toString-"+this.value;}; -}; - -//CHECK#1 -try{ - var x1 = new Date(new myObj(1), new myObj(2), new myObj(3), new myObj(4), new myObj(5), new myObj(6), new myObj(7)); - $ERROR("#1: The 1st step is calling ToNumber(year)"); -} -catch(e){ - if(e !== "valueOf-1"){ - $ERROR("#1: The 1st step is calling ToNumber(year)"); - } -} - -//CHECK#2 -try{ - var x2 = new Date(1, new myObj(2), new myObj(3), new myObj(4), new myObj(5), new myObj(6), new myObj(7)); - $ERROR("#2: The 2nd step is calling ToNumber(month)"); -} -catch(e){ - if(e !== "valueOf-2"){ - $ERROR("#2: The 2nd step is calling ToNumber(month)"); - } -} - -//CHECK#3 -try{ - var x3 = new Date(1, 2, new myObj(3), new myObj(4), new myObj(5), new myObj(6), new myObj(7)); - $ERROR("#3: The 3rd step is calling ToNumber(date)"); -} -catch(e){ - if(e !== "valueOf-3"){ - $ERROR("#3: The 3rd step is calling ToNumber(date)"); - } -} - -//CHECK#4 -try{ - var x4 = new Date(1, 2, 3, new myObj(4), new myObj(5), new myObj(6), new myObj(7)); - $ERROR("#4: The 4th step is calling ToNumber(hours)"); -} -catch(e){ - if(e !== "valueOf-4"){ - $ERROR("#4: The 4th step is calling ToNumber(hours)"); - } -} - -//CHECK#5 -try{ - var x5 = new Date(1, 2, 3, 4, new myObj(5), new myObj(6), new myObj(7)); - $ERROR("#5: The 5th step is calling ToNumber(minutes)"); -} -catch(e){ - if(e !== "valueOf-5"){ - $ERROR("#5: The 5th step is calling ToNumber(minutes)"); - } -} - -//CHECK#6 -try{ - var x6 = new Date(1, 2, 3, 4, 5, new myObj(6), new myObj(7)); - $ERROR("#6: The 6th step is calling ToNumber(seconds)"); -} -catch(e){ - if(e !== "valueOf-6"){ - $ERROR("#6: The 6th step is calling ToNumber(seconds)"); - } -} - -//CHECK#7 -try{ - var x7 = new Date(1, 2, 3, 4, 5, 6, new myObj(7)); - $ERROR("#7: The 7th step is calling ToNumber(ms)"); -} -catch(e){ - if(e !== "valueOf-7"){ - $ERROR("#7: The 7th step is calling ToNumber(ms)"); - } -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A5_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A5_T1.js deleted file mode 100644 index 48582e45a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A5_T1.js +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.3.1_A5_T1; - * @section: 15.9.3.1; - * @assertion: The [[Value]] property of the newly constructed object - * is set by following steps: - * 8. If Result(1) is not NaN and 0 <= ToInteger(Result(1)) <= 99, Result(8) is - * 1900+ToInteger(Result(1)); otherwise, Result(8) is Result(1) - * 9. Compute MakeDay(Result(8), Result(2), Result(3)) - * 10. Compute MakeTime(Result(4), Result(5), Result(6), Result(7)) - * 11. Compute MakeDate(Result(9), Result(10)) - * 12. Set the [[Value]] property of the newly constructed object to - * TimeClip(UTC(Result(11))); - * @description: 2 arguments, (year, month); - */ - -$INCLUDE("environment.js"); -$INCLUDE("numeric_conversion.js"); -$INCLUDE("Date_constants.js"); -$INCLUDE("Date_library.js"); - -if (ConstructDate(1899, 11) !== new Date(1899, 11).valueOf()) { - $FAIL("#1: Incorrect value of Date"); -} - -if (ConstructDate(1899, 12) !== new Date(1899, 12).valueOf()) { - $FAIL("#2: Incorrect value of Date"); -} - -if (ConstructDate(1900, 0) !== new Date(1900, 0).valueOf()) { - $FAIL("#3: Incorrect value of Date"); -} - -if (ConstructDate(1969, 11) !== new Date(1969, 11).valueOf()) { - $FAIL("#4: Incorrect value of Date"); -} - -if (ConstructDate(1969, 12) !== new Date(1969, 12).valueOf()) { - $FAIL("#5: Incorrect value of Date"); -} - -if (ConstructDate(1970, 0) !== new Date(1970, 0).valueOf()) { - $FAIL("#6: Incorrect value of Date"); -} - -if (ConstructDate(1999, 11) !== new Date(1999, 11).valueOf()) { - $FAIL("#7: Incorrect value of Date"); -} - -if (ConstructDate(1999, 12) !== new Date(1999, 12).valueOf()) { - $FAIL("#8: Incorrect value of Date"); -} - -if (ConstructDate(2000, 0) !== new Date(2000, 0).valueOf()) { - $FAIL("#9: Incorrect value of Date"); -} - -if (ConstructDate(2099, 11) !== new Date(2099, 11).valueOf()) { - $FAIL("#10: Incorrect value of Date"); -} - -if (ConstructDate(2099, 12) !== new Date(2099, 12).valueOf()) { - $FAIL("#11: Incorrect value of Date"); -} - -if (ConstructDate(2100, 0) !== new Date(2100, 0).valueOf()) { - $FAIL("#12: Incorrect value of Date"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A5_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A5_T2.js deleted file mode 100644 index 5828b2c2d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A5_T2.js +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.3.1_A5_T2; - * @section: 15.9.3.1; - * @assertion: The [[Value]] property of the newly constructed object - * is set by following steps: - * 8. If Result(1) is not NaN and 0 <= ToInteger(Result(1)) <= 99, Result(8) is - * 1900+ToInteger(Result(1)); otherwise, Result(8) is Result(1) - * 9. Compute MakeDay(Result(8), Result(2), Result(3)) - * 10. Compute MakeTime(Result(4), Result(5), Result(6), Result(7)) - * 11. Compute MakeDate(Result(9), Result(10)) - * 12. Set the [[Value]] property of the newly constructed object to - * TimeClip(UTC(Result(11))); - * @description: 3 arguments, (year, month, date); - */ - -$INCLUDE("environment.js"); -$INCLUDE("numeric_conversion.js"); -$INCLUDE("Date_constants.js"); -$INCLUDE("Date_library.js"); - -if (ConstructDate(1899, 11, 31) !== new Date(1899, 11, 31).valueOf()) { - $FAIL("#1: Incorrect value of Date"); -} - -if (ConstructDate(1899, 12, 1) !== new Date(1899, 12, 1).valueOf()) { - $FAIL("#2: Incorrect value of Date"); -} - -if (ConstructDate(1900, 0, 1) !== new Date(1900, 0, 1).valueOf()) { - $FAIL("#3: Incorrect value of Date"); -} - -if (ConstructDate(1969, 11, 31) !== new Date(1969, 11, 31).valueOf()) { - $FAIL("#4: Incorrect value of Date"); -} - -if (ConstructDate(1969, 12, 1) !== new Date(1969, 12, 1).valueOf()) { - $FAIL("#5: Incorrect value of Date"); -} - -if (ConstructDate(1970, 0, 1) !== new Date(1970, 0, 1).valueOf()) { - $FAIL("#6: Incorrect value of Date"); -} - -if (ConstructDate(1999, 11, 31) !== new Date(1999, 11, 31).valueOf()) { - $FAIL("#7: Incorrect value of Date"); -} - -if (ConstructDate(1999, 12, 1) !== new Date(1999, 12, 1).valueOf()) { - $FAIL("#8: Incorrect value of Date"); -} - -if (ConstructDate(2000, 0, 1) !== new Date(2000, 0, 1).valueOf()) { - $FAIL("#9: Incorrect value of Date"); -} - -if (ConstructDate(2099, 11, 31) !== new Date(2099, 11, 31).valueOf()) { - $FAIL("#10: Incorrect value of Date"); -} - -if (ConstructDate(2099, 12, 1) !== new Date(2099, 12, 1).valueOf()) { - $FAIL("#11: Incorrect value of Date"); -} - -if (ConstructDate(2100, 0, 1) !== new Date(2100, 0, 1).valueOf()) { - $FAIL("#12: Incorrect value of Date"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A5_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A5_T3.js deleted file mode 100644 index f56034a9c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A5_T3.js +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.3.1_A5_T3; - * @section: 15.9.3.1; - * @assertion: The [[Value]] property of the newly constructed object - * is set by following steps: - * 8. If Result(1) is not NaN and 0 <= ToInteger(Result(1)) <= 99, Result(8) is - * 1900+ToInteger(Result(1)); otherwise, Result(8) is Result(1) - * 9. Compute MakeDay(Result(8), Result(2), Result(3)) - * 10. Compute MakeTime(Result(4), Result(5), Result(6), Result(7)) - * 11. Compute MakeDate(Result(9), Result(10)) - * 12. Set the [[Value]] property of the newly constructed object to - * TimeClip(UTC(Result(11))); - * @description: 4 arguments, (year, month, date, hours); - */ - -$INCLUDE("environment.js"); -$INCLUDE("numeric_conversion.js"); -$INCLUDE("Date_constants.js"); -$INCLUDE("Date_library.js"); - -if (ConstructDate(1899, 11, 31, 23) !== new Date(1899, 11, 31, 23).valueOf()) { - $FAIL("#1: Incorrect value of Date"); -} - -if (ConstructDate(1899, 12, 1, 0) !== new Date(1899, 12, 1, 0).valueOf()) { - $FAIL("#2: Incorrect value of Date"); -} - -if (ConstructDate(1900, 0, 1, 0) !== new Date(1900, 0, 1, 0).valueOf()) { - $FAIL("#3: Incorrect value of Date"); -} - -if (ConstructDate(1969, 11, 31, 23) !== new Date(1969, 11, 31, 23).valueOf()) { - $FAIL("#4: Incorrect value of Date"); -} - -if (ConstructDate(1969, 12, 1, 0) !== new Date(1969, 12, 1, 0).valueOf()) { - $FAIL("#5: Incorrect value of Date"); -} - -if (ConstructDate(1970, 0, 1, 0) !== new Date(1970, 0, 1, 0).valueOf()) { - $FAIL("#6: Incorrect value of Date"); -} - -if (ConstructDate(1999, 11, 31, 23) !== new Date(1999, 11, 31, 23).valueOf()) { - $FAIL("#7: Incorrect value of Date"); -} - -if (ConstructDate(1999, 12, 1, 0) !== new Date(1999, 12, 1, 0).valueOf()) { - $FAIL("#8: Incorrect value of Date"); -} - -if (ConstructDate(2000, 0, 1, 0) !== new Date(2000, 0, 1, 0).valueOf()) { - $FAIL("#9: Incorrect value of Date"); -} - -if (ConstructDate(2099, 11, 31, 23) !== new Date(2099, 11, 31, 23).valueOf()) { - $FAIL("#10: Incorrect value of Date"); -} - -if (ConstructDate(2099, 12, 1, 0) !== new Date(2099, 12, 1, 0).valueOf()) { - $FAIL("#11: Incorrect value of Date"); -} - -if (ConstructDate(2100, 0, 1, 0) !== new Date(2100, 0, 1, 0).valueOf()) { - $FAIL("#12: Incorrect value of Date"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A5_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A5_T4.js deleted file mode 100644 index ef5329adb..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A5_T4.js +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.3.1_A5_T4; - * @section: 15.9.3.1; - * @assertion: The [[Value]] property of the newly constructed object - * is set by following steps: - * 8. If Result(1) is not NaN and 0 <= ToInteger(Result(1)) <= 99, Result(8) is - * 1900+ToInteger(Result(1)); otherwise, Result(8) is Result(1) - * 9. Compute MakeDay(Result(8), Result(2), Result(3)) - * 10. Compute MakeTime(Result(4), Result(5), Result(6), Result(7)) - * 11. Compute MakeDate(Result(9), Result(10)) - * 12. Set the [[Value]] property of the newly constructed object to - * TimeClip(UTC(Result(11))); - * @description: 5 arguments, (year, month, date, hours, minutes); - */ - -$INCLUDE("environment.js"); -$INCLUDE("numeric_conversion.js"); -$INCLUDE("Date_constants.js"); -$INCLUDE("Date_library.js"); - -if (ConstructDate(1899, 11, 31, 23, 59) !== new Date(1899, 11, 31, 23, 59).valueOf()) { - $FAIL("#1: Incorrect value of Date"); -} - -if (ConstructDate(1899, 12, 1, 0, 0) !== new Date(1899, 12, 1, 0, 0).valueOf()) { - $FAIL("#2: Incorrect value of Date"); -} - -if (ConstructDate(1900, 0, 1, 0, 0) !== new Date(1900, 0, 1, 0, 0).valueOf()) { - $FAIL("#3: Incorrect value of Date"); -} - -if (ConstructDate(1969, 11, 31, 23, 59) !== new Date(1969, 11, 31, 23, 59).valueOf()) { - $FAIL("#4: Incorrect value of Date"); -} - -if (ConstructDate(1969, 12, 1, 0, 0) !== new Date(1969, 12, 1, 0, 0).valueOf()) { - $FAIL("#5: Incorrect value of Date"); -} - -if (ConstructDate(1970, 0, 1, 0, 0) !== new Date(1970, 0, 1, 0, 0).valueOf()) { - $FAIL("#6: Incorrect value of Date"); -} - -if (ConstructDate(1999, 11, 31, 23, 59) !== new Date(1999, 11, 31, 23, 59).valueOf()) { - $FAIL("#7: Incorrect value of Date"); -} - -if (ConstructDate(1999, 12, 1, 0, 0) !== new Date(1999, 12, 1, 0, 0).valueOf()) { - $FAIL("#8: Incorrect value of Date"); -} - -if (ConstructDate(2000, 0, 1, 0, 0) !== new Date(2000, 0, 1, 0, 0).valueOf()) { - $FAIL("#9: Incorrect value of Date"); -} - -if (ConstructDate(2099, 11, 31, 23, 59) !== new Date(2099, 11, 31, 23, 59).valueOf()) { - $FAIL("#10: Incorrect value of Date"); -} - -if (ConstructDate(2099, 12, 1, 0, 0) !== new Date(2099, 12, 1, 0, 0).valueOf()) { - $FAIL("#11: Incorrect value of Date"); -} - -if (ConstructDate(2100, 0, 1, 0, 0) !== new Date(2100, 0, 1, 0, 0).valueOf()) { - $FAIL("#12: Incorrect value of Date"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A5_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A5_T5.js deleted file mode 100644 index 76d087776..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A5_T5.js +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.3.1_A5_T5; - * @section: 15.9.3.1; - * @assertion: The [[Value]] property of the newly constructed object - * is set by following steps: - * 8. If Result(1) is not NaN and 0 <= ToInteger(Result(1)) <= 99, Result(8) is - * 1900+ToInteger(Result(1)); otherwise, Result(8) is Result(1) - * 9. Compute MakeDay(Result(8), Result(2), Result(3)) - * 10. Compute MakeTime(Result(4), Result(5), Result(6), Result(7)) - * 11. Compute MakeDate(Result(9), Result(10)) - * 12. Set the [[Value]] property of the newly constructed object to - * TimeClip(UTC(Result(11))); - * @description: 6 arguments, (year, month, date, hours, minutes, seconds); - */ - -$INCLUDE("environment.js"); -$INCLUDE("numeric_conversion.js"); -$INCLUDE("Date_constants.js"); -$INCLUDE("Date_library.js"); - -if (ConstructDate(1899, 11, 31, 23, 59, 59) !== new Date(1899, 11, 31, 23, 59, 59).valueOf()) { - $FAIL("#1: Incorrect value of Date"); -} - -if (ConstructDate(1899, 12, 1, 0, 0, 0) !== new Date(1899, 12, 1, 0, 0, 0).valueOf()) { - $FAIL("#2: Incorrect value of Date"); -} - -if (ConstructDate(1900, 0, 1, 0, 0, 0) !== new Date(1900, 0, 1, 0, 0, 0).valueOf()) { - $FAIL("#3: Incorrect value of Date"); -} - -if (ConstructDate(1969, 11, 31, 23, 59, 59) !== new Date(1969, 11, 31, 23, 59, 59).valueOf()) { - $FAIL("#4: Incorrect value of Date"); -} - -if (ConstructDate(1969, 12, 1, 0, 0, 0) !== new Date(1969, 12, 1, 0, 0, 0).valueOf()) { - $FAIL("#5: Incorrect value of Date"); -} - -if (ConstructDate(1970, 0, 1, 0, 0, 0) !== new Date(1970, 0, 1, 0, 0, 0).valueOf()) { - $FAIL("#6: Incorrect value of Date"); -} - -if (ConstructDate(1999, 11, 31, 23, 59, 59) !== new Date(1999, 11, 31, 23, 59, 59).valueOf()) { - $FAIL("#7: Incorrect value of Date"); -} - -if (ConstructDate(1999, 12, 1, 0, 0, 0) !== new Date(1999, 12, 1, 0, 0, 0).valueOf()) { - $FAIL("#8: Incorrect value of Date"); -} - -if (ConstructDate(2000, 0, 1, 0, 0, 0) !== new Date(2000, 0, 1, 0, 0, 0).valueOf()) { - $FAIL("#9: Incorrect value of Date"); -} - -if (ConstructDate(2099, 11, 31, 23, 59, 59) !== new Date(2099, 11, 31, 23, 59, 59).valueOf()) { - $FAIL("#10: Incorrect value of Date"); -} - -if (ConstructDate(2099, 12, 1, 0, 0, 0) !== new Date(2099, 12, 1, 0, 0, 0).valueOf()) { - $FAIL("#11: Incorrect value of Date"); -} - -if (ConstructDate(2100, 0, 1, 0, 0, 0) !== new Date(2100, 0, 1, 0, 0, 0).valueOf()) { - $FAIL("#12: Incorrect value of Date"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A5_T6.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A5_T6.js deleted file mode 100644 index b89944f2a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A5_T6.js +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.3.1_A5_T6; - * @section: 15.9.3.1; - * @assertion: The [[Value]] property of the newly constructed object - * is set by following steps: - * 8. If Result(1) is not NaN and 0 <= ToInteger(Result(1)) <= 99, Result(8) is - * 1900+ToInteger(Result(1)); otherwise, Result(8) is Result(1) - * 9. Compute MakeDay(Result(8), Result(2), Result(3)) - * 10. Compute MakeTime(Result(4), Result(5), Result(6), Result(7)) - * 11. Compute MakeDate(Result(9), Result(10)) - * 12. Set the [[Value]] property of the newly constructed object to - * TimeClip(UTC(Result(11))); - * @description: 7 arguments, (year, month, date, hours, minutes, seconds, ms); - */ - -$INCLUDE("environment.js"); -$INCLUDE("numeric_conversion.js"); -$INCLUDE("Date_constants.js"); -$INCLUDE("Date_library.js"); - -if (ConstructDate(1899, 11, 31, 23, 59, 59, 999) !== new Date(1899, 11, 31, 23, 59, 59, 999).valueOf()) { - $FAIL("#1: Incorrect value of Date"); -} - -if (ConstructDate(1899, 12, 1, 0, 0, 0, 0) !== new Date(1899, 12, 1, 0, 0, 0, 0).valueOf()) { - $FAIL("#2: Incorrect value of Date"); -} - -if (ConstructDate(1900, 0, 1, 0, 0, 0, 0) !== new Date(1900, 0, 1, 0, 0, 0, 0).valueOf()) { - $FAIL("#3: Incorrect value of Date"); -} - -if (ConstructDate(1969, 11, 31, 23, 59, 59, 999) !== new Date(1969, 11, 31, 23, 59, 59, 999).valueOf()) { - $FAIL("#4: Incorrect value of Date"); -} - -if (ConstructDate(1969, 12, 1, 0, 0, 0, 0) !== new Date(1969, 12, 1, 0, 0, 0, 0).valueOf()) { - $FAIL("#5: Incorrect value of Date"); -} - -if (ConstructDate(1970, 0, 1, 0, 0, 0, 0) !== new Date(1970, 0, 1, 0, 0, 0, 0).valueOf()) { - $FAIL("#6: Incorrect value of Date"); -} - -if (ConstructDate(1999, 11, 31, 23, 59, 59, 999) !== new Date(1999, 11, 31, 23, 59, 59, 999).valueOf()) { - $FAIL("#7: Incorrect value of Date"); -} - -if (ConstructDate(1999, 12, 1, 0, 0, 0, 0) !== new Date(1999, 12, 1, 0, 0, 0, 0).valueOf()) { - $FAIL("#8: Incorrect value of Date"); -} - -if (ConstructDate(2000, 0, 1, 0, 0, 0, 0) !== new Date(2000, 0, 1, 0, 0, 0, 0).valueOf()) { - $FAIL("#9: Incorrect value of Date"); -} - -if (ConstructDate(2099, 11, 31, 23, 59, 59, 999) !== new Date(2099, 11, 31, 23, 59, 59, 999).valueOf()) { - $FAIL("#10: Incorrect value of Date"); -} - -if (ConstructDate(2099, 12, 1, 0, 0, 0, 0) !== new Date(2099, 12, 1, 0, 0, 0, 0).valueOf()) { - $FAIL("#11: Incorrect value of Date"); -} - -if (ConstructDate(2100, 0, 1, 0, 0, 0, 0) !== new Date(2100, 0, 1, 0, 0, 0, 0).valueOf()) { - $FAIL("#12: Incorrect value of Date"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A6_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A6_T1.js deleted file mode 100644 index 49db8553e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A6_T1.js +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.3.1_A6_T1; - * @section: 15.9.3.1; - * @assertion: The [[Value]] property of the newly constructed object - * with supplied "undefined" argument should be NaN; - * @description: 2 arguments, (year, month); - */ - -function DateValue(year, month, date, hours, minutes, seconds, ms){ - return new Date(year, month, date, hours, minutes, seconds, ms).valueOf(); -} - -if (!isNaN(DateValue(1899, 11))) { - $FAIL("#1: The value should be NaN"); -} - -if (!isNaN(DateValue(1899, 12))) { - $FAIL("#2: The value should be NaN"); -} - -if (!isNaN(DateValue(1900, 0))) { - $FAIL("#3: The value should be NaN"); -} - -if (!isNaN(DateValue(1969, 11))) { - $FAIL("#4: The value should be NaN"); -} - -if (!isNaN(DateValue(1969, 12))) { - $FAIL("#5: The value should be NaN"); -} - -if (!isNaN(DateValue(1970, 0))) { - $FAIL("#6: The value should be NaN"); -} - -if (!isNaN(DateValue(1999, 11))) { - $FAIL("#7: The value should be NaN"); -} - -if (!isNaN(DateValue(1999, 12))) { - $FAIL("#8: The value should be NaN"); -} - -if (!isNaN(DateValue(2000, 0))) { - $FAIL("#9: The value should be NaN"); -} - -if (!isNaN(DateValue(2099, 11))) { - $FAIL("#10: The value should be NaN"); -} - -if (!isNaN(DateValue(2099, 12))) { - $FAIL("#11: The value should be NaN"); -} - -if (!isNaN(DateValue(2100, 0))) { - $FAIL("#12: The value should be NaN"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A6_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A6_T2.js deleted file mode 100644 index 95380c622..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A6_T2.js +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.3.1_A6_T2; - * @section: 15.9.3.1; - * @assertion: The [[Value]] property of the newly constructed object - * with supplied "undefined" argument should be NaN; - * @description: 3 arguments, (year, month, date); - */ - -function DateValue(year, month, date, hours, minutes, seconds, ms){ - return new Date(year, month, date, hours, minutes, seconds, ms).valueOf(); -} - -if (!isNaN(DateValue(1899, 11, 31))) { - $FAIL("#1: The value should be NaN"); -} - -if (!isNaN(DateValue(1899, 12, 1))) { - $FAIL("#2: The value should be NaN"); -} - -if (!isNaN(DateValue(1900, 0, 1))) { - $FAIL("#3: The value should be NaN"); -} - -if (!isNaN(DateValue(1969, 11, 31))) { - $FAIL("#4: The value should be NaN"); -} - -if (!isNaN(DateValue(1969, 12, 1))) { - $FAIL("#5: The value should be NaN"); -} - -if (!isNaN(DateValue(1970, 0, 1))) { - $FAIL("#6: The value should be NaN"); -} - -if (!isNaN(DateValue(1999, 11, 31))) { - $FAIL("#7: The value should be NaN"); -} - -if (!isNaN(DateValue(1999, 12, 1))) { - $FAIL("#8: The value should be NaN"); -} - -if (!isNaN(DateValue(2000, 0, 1))) { - $FAIL("#9: The value should be NaN"); -} - -if (!isNaN(DateValue(2099, 11, 31))) { - $FAIL("#10: The value should be NaN"); -} - -if (!isNaN(DateValue(2099, 12, 1))) { - $FAIL("#11: The value should be NaN"); -} - -if (!isNaN(DateValue(2100, 0, 1))) { - $FAIL("#12: The value should be NaN"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A6_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A6_T3.js deleted file mode 100644 index d9ce1228d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A6_T3.js +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.3.1_A6_T3; - * @section: 15.9.3.1; - * @assertion: The [[Value]] property of the newly constructed object - * with supplied "undefined" argument should be NaN; - * @description: 4 arguments, (year, month, date, hours); - */ - -function DateValue(year, month, date, hours, minutes, seconds, ms){ - return new Date(year, month, date, hours, minutes, seconds, ms).valueOf(); -} - -if (!isNaN(DateValue(1899, 11, 31, 23))) { - $FAIL("#1: The value should be NaN"); -} - -if (!isNaN(DateValue(1899, 12, 1, 0))) { - $FAIL("#2: The value should be NaN"); -} - -if (!isNaN(DateValue(1900, 0, 1, 0))) { - $FAIL("#3: The value should be NaN"); -} - -if (!isNaN(DateValue(1969, 11, 31, 23))) { - $FAIL("#4: The value should be NaN"); -} - -if (!isNaN(DateValue(1969, 12, 1, 0))) { - $FAIL("#5: The value should be NaN"); -} - -if (!isNaN(DateValue(1970, 0, 1, 0))) { - $FAIL("#6: The value should be NaN"); -} - -if (!isNaN(DateValue(1999, 11, 31, 23))) { - $FAIL("#7: The value should be NaN"); -} - -if (!isNaN(DateValue(1999, 12, 1, 0))) { - $FAIL("#8: The value should be NaN"); -} - -if (!isNaN(DateValue(2000, 0, 1, 0))) { - $FAIL("#9: The value should be NaN"); -} - -if (!isNaN(DateValue(2099, 11, 31, 23))) { - $FAIL("#10: The value should be NaN"); -} - -if (!isNaN(DateValue(2099, 12, 1, 0))) { - $FAIL("#11: The value should be NaN"); -} - -if (!isNaN(DateValue(2100, 0, 1, 0))) { - $FAIL("#12: The value should be NaN"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A6_T4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A6_T4.js deleted file mode 100644 index 6bbd9a3ae..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A6_T4.js +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.3.1_A6_T4; - * @section: 15.9.3.1; - * @assertion: The [[Value]] property of the newly constructed object - * with supplied "undefined" argument should be NaN; - * @description: 5 arguments, (year, month, date, hours, minutes); - */ - -function DateValue(year, month, date, hours, minutes, seconds, ms){ - return new Date(year, month, date, hours, minutes, seconds, ms).valueOf(); -} - -if (!isNaN(DateValue(1899, 11, 31, 23, 59))) { - $FAIL("#1: The value should be NaN"); -} - -if (!isNaN(DateValue(1899, 12, 1, 0, 0))) { - $FAIL("#2: The value should be NaN"); -} - -if (!isNaN(DateValue(1900, 0, 1, 0, 0))) { - $FAIL("#3: The value should be NaN"); -} - -if (!isNaN(DateValue(1969, 11, 31, 23, 59))) { - $FAIL("#4: The value should be NaN"); -} - -if (!isNaN(DateValue(1969, 12, 1, 0, 0))) { - $FAIL("#5: The value should be NaN"); -} - -if (!isNaN(DateValue(1970, 0, 1, 0, 0))) { - $FAIL("#6: The value should be NaN"); -} - -if (!isNaN(DateValue(1999, 11, 31, 23, 59))) { - $FAIL("#7: The value should be NaN"); -} - -if (!isNaN(DateValue(1999, 12, 1, 0, 0))) { - $FAIL("#8: The value should be NaN"); -} - -if (!isNaN(DateValue(2000, 0, 1, 0, 0))) { - $FAIL("#9: The value should be NaN"); -} - -if (!isNaN(DateValue(2099, 11, 31, 23, 59))) { - $FAIL("#10: The value should be NaN"); -} - -if (!isNaN(DateValue(2099, 12, 1, 0, 0))) { - $FAIL("#11: The value should be NaN"); -} - -if (!isNaN(DateValue(2100, 0, 1, 0, 0))) { - $FAIL("#12: The value should be NaN"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A6_T5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A6_T5.js deleted file mode 100644 index c81b1afef..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.1_A6_T5.js +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.3.1_A6_T5; - * @section: 15.9.3.1; - * @assertion: The [[Value]] property of the newly constructed object - * with supplied "undefined" argument should be NaN; - * @description: 6 arguments, (year, month, date, hours, minutes, seconds); - */ - -function DateValue(year, month, date, hours, minutes, seconds, ms){ - return new Date(year, month, date, hours, minutes, seconds, ms).valueOf(); -} - -if (!isNaN(DateValue(1899, 11, 31, 23, 59, 59))) { - $FAIL("#1: The value should be NaN"); -} - -if (!isNaN(DateValue(1899, 12, 1, 0, 0, 0))) { - $FAIL("#2: The value should be NaN"); -} - -if (!isNaN(DateValue(1900, 0, 1, 0, 0, 0))) { - $FAIL("#3: The value should be NaN"); -} - -if (!isNaN(DateValue(1969, 11, 31, 23, 59, 59))) { - $FAIL("#4: The value should be NaN"); -} - -if (!isNaN(DateValue(1969, 12, 1, 0, 0, 0))) { - $FAIL("#5: The value should be NaN"); -} - -if (!isNaN(DateValue(1970, 0, 1, 0, 0, 0))) { - $FAIL("#6: The value should be NaN"); -} - -if (!isNaN(DateValue(1999, 11, 31, 23, 59, 59))) { - $FAIL("#7: The value should be NaN"); -} - -if (!isNaN(DateValue(1999, 12, 1, 0, 0, 0))) { - $FAIL("#8: The value should be NaN"); -} - -if (!isNaN(DateValue(2000, 0, 1, 0, 0, 0))) { - $FAIL("#9: The value should be NaN"); -} - -if (!isNaN(DateValue(2099, 11, 31, 23, 59, 59))) { - $FAIL("#10: The value should be NaN"); -} - -if (!isNaN(DateValue(2099, 12, 1, 0, 0, 0))) { - $FAIL("#11: The value should be NaN"); -} - -if (!isNaN(DateValue(2100, 0, 1, 0, 0, 0))) { - $FAIL("#12: The value should be NaN"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.2_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.2_A1_T1.js deleted file mode 100644 index 30c42abd9..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.2_A1_T1.js +++ /dev/null @@ -1,156 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.3.2_A1_T1; - * @section: 15.9.3.2; - * @assertion: When Date is called as part of a new expression it is - * a constructor: it initialises the newly created object; - * @description: Checking types of newly created objects and it values; -*/ - -$INCLUDE("Date_constants.js"); - -if (typeof new Date(date_1899_end) !== "object") { - $FAIL("#1.1: typeof new Date(date_1899_end) === 'object'"); -} - -if (new Date(date_1899_end) === undefined) { - $FAIL("#1.2: new Date(date_1899_end) === undefined"); -} - -var x13 = new Date(date_1899_end); -if(typeof x13 !== "object"){ - $FAIL("#1.3: typeof new Date(date_1899_end) !== 'object'"); -} - -var x14 = new Date(date_1899_end); -if(x14 === undefined){ - $FAIL("#1.4: new Date(date_1899_end) !== undefined"); -} - -if (typeof new Date(date_1900_start) !== "object") { - $FAIL("#2.1: typeof new Date(date_1900_start) === 'object'"); -} - -if (new Date(date_1900_start) === undefined) { - $FAIL("#2.2: new Date(date_1900_start) === undefined"); -} - -var x23 = new Date(date_1900_start); -if(typeof x23 !== "object"){ - $FAIL("#2.3: typeof new Date(date_1900_start) !== 'object'"); -} - -var x24 = new Date(date_1900_start); -if(x24 === undefined){ - $FAIL("#2.4: new Date(date_1900_start) !== undefined"); -} - -if (typeof new Date(date_1969_end) !== "object") { - $FAIL("#3.1: typeof new Date(date_1969_end) === 'object'"); -} - -if (new Date(date_1969_end) === undefined) { - $FAIL("#3.2: new Date(date_1969_end) === undefined"); -} - -var x33 = new Date(date_1969_end); -if(typeof x33 !== "object"){ - $FAIL("#3.3: typeof new Date(date_1969_end) !== 'object'"); -} - -var x34 = new Date(date_1969_end); -if(x34 === undefined){ - $FAIL("#3.4: new Date(date_1969_end) !== undefined"); -} - -if (typeof new Date(date_1970_start) !== "object") { - $FAIL("#4.1: typeof new Date(date_1970_start) === 'object'"); -} - -if (new Date(date_1970_start) === undefined) { - $FAIL("#4.2: new Date(date_1970_start) === undefined"); -} - -var x43 = new Date(date_1970_start); -if(typeof x43 !== "object"){ - $FAIL("#4.3: typeof new Date(date_1970_start) !== 'object'"); -} - -var x44 = new Date(date_1970_start); -if(x44 === undefined){ - $FAIL("#4.4: new Date(date_1970_start) !== undefined"); -} - -if (typeof new Date(date_1999_end) !== "object") { - $FAIL("#5.1: typeof new Date(date_1999_end) === 'object'"); -} - -if (new Date(date_1999_end) === undefined) { - $FAIL("#5.2: new Date(date_1999_end) === undefined"); -} - -var x53 = new Date(date_1999_end); -if(typeof x53 !== "object"){ - $FAIL("#5.3: typeof new Date(date_1999_end) !== 'object'"); -} - -var x54 = new Date(date_1999_end); -if(x54 === undefined){ - $FAIL("#5.4: new Date(date_1999_end) !== undefined"); -} - -if (typeof new Date(date_2000_start) !== "object") { - $FAIL("#6.1: typeof new Date(date_2000_start) === 'object'"); -} - -if (new Date(date_2000_start) === undefined) { - $FAIL("#6.2: new Date(date_2000_start) === undefined"); -} - -var x63 = new Date(date_2000_start); -if(typeof x63 !== "object"){ - $FAIL("#6.3: typeof new Date(date_2000_start) !== 'object'"); -} - -var x64 = new Date(date_2000_start); -if(x64 === undefined){ - $FAIL("#6.4: new Date(date_2000_start) !== undefined"); -} - -if (typeof new Date(date_2099_end) !== "object") { - $FAIL("#7.1: typeof new Date(date_2099_end) === 'object'"); -} - -if (new Date(date_2099_end) === undefined) { - $FAIL("#7.2: new Date(date_2099_end) === undefined"); -} - -var x73 = new Date(date_2099_end); -if(typeof x73 !== "object"){ - $FAIL("#7.3: typeof new Date(date_2099_end) !== 'object'"); -} - -var x74 = new Date(date_2099_end); -if(x74 === undefined){ - $FAIL("#7.4: new Date(date_2099_end) !== undefined"); -} - -if (typeof new Date(date_2100_start) !== "object") { - $FAIL("#8.1: typeof new Date(date_2100_start) === 'object'"); -} - -if (new Date(date_2100_start) === undefined) { - $FAIL("#8.2: new Date(date_2100_start) === undefined"); -} - -var x83 = new Date(date_2100_start); -if(typeof x83 !== "object"){ - $FAIL("#8.3: typeof new Date(date_2100_start) !== 'object'"); -} - -var x84 = new Date(date_2100_start); -if(x84 === undefined){ - $FAIL("#8.4: new Date(date_2100_start) !== undefined"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.2_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.2_A2_T1.js deleted file mode 100644 index fdcf92f72..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.2_A2_T1.js +++ /dev/null @@ -1,133 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.3.2_A2_T1; - * @section: 15.9.3.2; - * @assertion: The [[Prototype]] property of the newly constructed object - * is set to the original Date prototype object, the one that is the - * initial value of Date.prototype; - * @description: Checking Date.prototype property of newly constructed objects; -*/ - -$INCLUDE("Date_constants.js"); - -var x11 = new Date(date_1899_end); -if (typeof x11.constructor.prototype !== "object") { - $FAIL("#1.1: typeof x11.constructor.prototype === 'object'"); -} - -var x12 = new Date(date_1899_end); -if (!Date.prototype.isPrototypeOf(x12)) { - $ERROR('#1.2: Date.prototype.isPrototypeOf(x12)'); -} - -var x13 = new Date(date_1899_end); -if(Date.prototype !== x13.constructor.prototype){ - $FAIL("#1.3: Date.prototype !== x13.constructor.prototype"); -} - -var x21 = new Date(date_1900_start); -if (typeof x21.constructor.prototype !== "object") { - $FAIL("#2.1: typeof x21.constructor.prototype === 'object'"); -} - -var x22 = new Date(date_1900_start); -if (!Date.prototype.isPrototypeOf(x22)) { - $ERROR('#2.2: Date.prototype.isPrototypeOf(x22)'); -} - -var x23 = new Date(date_1900_start); -if(Date.prototype !== x23.constructor.prototype){ - $FAIL("#2.3: Date.prototype !== x23.constructor.prototype"); -} - -var x31 = new Date(date_1969_end); -if (typeof x31.constructor.prototype !== "object") { - $FAIL("#3.1: typeof x31.constructor.prototype === 'object'"); -} - -var x32 = new Date(date_1969_end); -if (!Date.prototype.isPrototypeOf(x32)) { - $ERROR('#3.2: Date.prototype.isPrototypeOf(x32)'); -} - -var x33 = new Date(date_1969_end); -if(Date.prototype !== x33.constructor.prototype){ - $FAIL("#3.3: Date.prototype !== x33.constructor.prototype"); -} - -var x41 = new Date(date_1970_start); -if (typeof x41.constructor.prototype !== "object") { - $FAIL("#4.1: typeof x11.constructor.prototype === 'object'"); -} - -var x42 = new Date(date_1970_start); -if (!Date.prototype.isPrototypeOf(x42)) { - $ERROR('#4.2: Date.prototype.isPrototypeOf(x42)'); -} - -var x43 = new Date(date_1970_start); -if(Date.prototype !== x43.constructor.prototype){ - $FAIL("#4.3: Date.prototype !== x43.constructor.prototype"); -} - -var x51 = new Date(date_1999_end); -if (typeof x51.constructor.prototype !== "object") { - $FAIL("#5.1: typeof x51.constructor.prototype === 'object'"); -} - -var x52 = new Date(date_1999_end); -if (!Date.prototype.isPrototypeOf(x52)) { - $ERROR('#5.2: Date.prototype.isPrototypeOf(x52)'); -} - -var x53 = new Date(date_1999_end); -if(Date.prototype !== x53.constructor.prototype){ - $FAIL("#5.3: Date.prototype !== x53.constructor.prototype"); -} - -var x61 = new Date(date_2000_start); -if (typeof x61.constructor.prototype !== "object") { - $FAIL("#6.1: typeof x61.constructor.prototype === 'object'"); -} - -var x62 = new Date(date_2000_start); -if (!Date.prototype.isPrototypeOf(x62)) { - $ERROR('#6.2: Date.prototype.isPrototypeOf(x62)'); -} - -var x63 = new Date(date_2000_start); -if(Date.prototype !== x63.constructor.prototype){ - $FAIL("#6.3: Date.prototype !== x63.constructor.prototype"); -} - -var x71 = new Date(date_2099_end); -if (typeof x71.constructor.prototype !== "object") { - $FAIL("#7.1: typeof x71.constructor.prototype === 'object'"); -} - -var x72 = new Date(date_2099_end); -if (!Date.prototype.isPrototypeOf(x72)) { - $ERROR('#7.2: Date.prototype.isPrototypeOf(x72)'); -} - -var x73 = new Date(date_2099_end); -if(Date.prototype !== x73.constructor.prototype){ - $FAIL("#7.3: Date.prototype !== x73.constructor.prototype"); -} - -var x81 = new Date(date_2100_start); -if (typeof x81.constructor.prototype !== "object") { - $FAIL("#8.1: typeof x81.constructor.prototype === 'object'"); -} - -var x82 = new Date(date_2100_start); -if (!Date.prototype.isPrototypeOf(x82)) { - $ERROR('#8.2: Date.prototype.isPrototypeOf(x82)'); -} - -var x83 = new Date(date_2100_start); -if(Date.prototype !== x83.constructor.prototype){ - $FAIL("#8.3: Date.prototype !== x83.constructor.prototype"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.2_A3_T1.1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.2_A3_T1.1.js deleted file mode 100644 index 951e25fe1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.2_A3_T1.1.js +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.3.2_A3_T1.1; - * @section: 15.9.3.2; - * @assertion: The [[Class]] property of the newly constructed object - * is set to "Date"; - * @description: Test based on delete prototype.toString; -*/ - -$INCLUDE("Date_constants.js"); - -delete Date.prototype.toString; - -var x1 = new Date(date_1899_end); -if (x1.toString() !== "[object Date]") { - $FAIL("#1: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x2 = new Date(date_1900_start); -if (x2.toString() !== "[object Date]") { - $FAIL("#2: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x3 = new Date(date_1969_end); -if (x3.toString() !== "[object Date]") { - $FAIL("#3: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x4 = new Date(date_1970_start); -if (x4.toString() !== "[object Date]") { - $FAIL("#4: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x5 = new Date(date_1999_end); -if (x5.toString() !== "[object Date]") { - $FAIL("#5: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x6 = new Date(date_2000_start); -if (x6.toString() !== "[object Date]") { - $FAIL("#6: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x7 = new Date(date_2099_end); -if (x7.toString() !== "[object Date]") { - $FAIL("#7: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x8 = new Date(date_2100_start); -if (x8.toString() !== "[object Date]") { - $FAIL("#8: The [[Class]] property of the newly constructed object is set to 'Date'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.2_A3_T1.2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.2_A3_T1.2.js deleted file mode 100644 index 5dfc63663..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.3_The_Date_Constructor/S15.9.3.2_A3_T1.2.js +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.3.2_A3_T1.2; - * @section: 15.9.3.2; - * @assertion: The [[Class]] property of the newly constructed object - * is set to "Date"; - * @description: Test based on overwriting prototype.toString; -*/ - -$INCLUDE("Date_constants.js"); - -Date.prototype.toString = Object.prototype.toString; - -var x1 = new Date(date_1899_end); -if (x1.toString() !== "[object Date]") { - $FAIL("#1: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x2 = new Date(date_1900_start); -if (x2.toString() !== "[object Date]") { - $FAIL("#2: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x3 = new Date(date_1969_end); -if (x3.toString() !== "[object Date]") { - $FAIL("#3: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x4 = new Date(date_1970_start); -if (x4.toString() !== "[object Date]") { - $FAIL("#4: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x5 = new Date(date_1999_end); -if (x5.toString() !== "[object Date]") { - $FAIL("#5: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x6 = new Date(date_2000_start); -if (x6.toString() !== "[object Date]") { - $FAIL("#6: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x7 = new Date(date_2099_end); -if (x7.toString() !== "[object Date]") { - $FAIL("#7: The [[Class]] property of the newly constructed object is set to 'Date'"); -} - -var x8 = new Date(date_2100_start); -if (x8.toString() !== "[object Date]") { - $FAIL("#8: The [[Class]] property of the newly constructed object is set to 'Date'"); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.4_Properties_of_the_Date_Constructor/15.9.4.1_Date.prototype/S15.9.4.1_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.4_Properties_of_the_Date_Constructor/15.9.4.1_Date.prototype/S15.9.4.1_A1_T1.js deleted file mode 100644 index fa0179f45..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.4_Properties_of_the_Date_Constructor/15.9.4.1_Date.prototype/S15.9.4.1_A1_T1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.4.1_A1_T1; - * @section: 15.9.4.1; - * @assertion: The Date property "prototype" has { DontEnum, DontDelete, ReadOnly } attributes; - * @description: Checking ReadOnly attribute; - */ - -x = Date.prototype; -Date.prototype = 1; -if (Date.prototype !== x) { - $ERROR('#1: The Date.prototype has the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.4_Properties_of_the_Date_Constructor/15.9.4.1_Date.prototype/S15.9.4.1_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.4_Properties_of_the_Date_Constructor/15.9.4.1_Date.prototype/S15.9.4.1_A1_T2.js deleted file mode 100644 index c5a70eb25..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.4_Properties_of_the_Date_Constructor/15.9.4.1_Date.prototype/S15.9.4.1_A1_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.4.1_A1_T2; - * @section: 15.9.4.1; - * @assertion: The Date property "prototype" has { DontEnum, DontDelete, ReadOnly } attributes; - * @description: Checking DontDelete attribute; - */ - -if (delete Date.prototype !== false) { - $ERROR('#1: The Date.prototype property has the attributes DontDelete'); -} - -if (!Date.hasOwnProperty('prototype')) { - $FAIL('#2: The Date.prototype property has the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.4_Properties_of_the_Date_Constructor/15.9.4.1_Date.prototype/S15.9.4.1_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.4_Properties_of_the_Date_Constructor/15.9.4.1_Date.prototype/S15.9.4.1_A1_T3.js deleted file mode 100644 index 47fa32732..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.4_Properties_of_the_Date_Constructor/15.9.4.1_Date.prototype/S15.9.4.1_A1_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.4.1_A1_T3; - * @section: 15.9.4.1; - * @assertion: The Date property "prototype" has { DontEnum, DontDelete, ReadOnly } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.propertyIsEnumerable('prototype')) { - $ERROR('#1: The Date.prototype property has the attribute DontEnum'); -} - -for(x in Date) { - if(x === "prototype") { - $ERROR('#2: The Date.prototype has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.4_Properties_of_the_Date_Constructor/15.9.4.2_Date.parse/S15.9.4.2_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.4_Properties_of_the_Date_Constructor/15.9.4.2_Date.parse/S15.9.4.2_A1_T1.js deleted file mode 100644 index fd0add4f4..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.4_Properties_of_the_Date_Constructor/15.9.4.2_Date.parse/S15.9.4.2_A1_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.4.2_A1_T1; - * @section: 15.9.4.2; - * @assertion: The Date property "parse" has { DontEnum } attributes; - * @description: Checking absence of ReadOnly attribute; - */ - -x = Date.parse; -if(x === 1) - Date.parse = 2; -else - Date.parse = 1; -if (Date.parse === x) { - $ERROR('#1: The Date.parse has not the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.4_Properties_of_the_Date_Constructor/15.9.4.2_Date.parse/S15.9.4.2_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.4_Properties_of_the_Date_Constructor/15.9.4.2_Date.parse/S15.9.4.2_A1_T2.js deleted file mode 100644 index f6735477f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.4_Properties_of_the_Date_Constructor/15.9.4.2_Date.parse/S15.9.4.2_A1_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.4.2_A1_T2; - * @section: 15.9.4.2; - * @assertion: The Date property "parse" has { DontEnum } attributes; - * @description: Checking absence of DontDelete attribute; - */ - -if (delete Date.parse === false) { - $ERROR('#1: The Date.parse property has not the attributes DontDelete'); -} - -if (Date.hasOwnProperty('parse')) { - $FAIL('#2: The Date.parse property has not the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.4_Properties_of_the_Date_Constructor/15.9.4.2_Date.parse/S15.9.4.2_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.4_Properties_of_the_Date_Constructor/15.9.4.2_Date.parse/S15.9.4.2_A1_T3.js deleted file mode 100644 index 75e89e152..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.4_Properties_of_the_Date_Constructor/15.9.4.2_Date.parse/S15.9.4.2_A1_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.4.2_A1_T3; - * @section: 15.9.4.2; - * @assertion: The Date property "parse" has { DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.propertyIsEnumerable('parse')) { - $ERROR('#1: The Date.parse property has the attribute DontEnum'); -} - -for(x in Date) { - if(x === "parse") { - $ERROR('#2: The Date.parse has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.4_Properties_of_the_Date_Constructor/15.9.4.2_Date.parse/S15.9.4.2_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.4_Properties_of_the_Date_Constructor/15.9.4.2_Date.parse/S15.9.4.2_A2_T1.js deleted file mode 100644 index 6d088bc9a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.4_Properties_of_the_Date_Constructor/15.9.4.2_Date.parse/S15.9.4.2_A2_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.4.2_A2_T1; - * @section: 15.9.4.2; - * @assertion: The "length" property of the "parse" is 1; - * @description: The "length" property of the "parse" is 1; - */ - -if(Date.parse.hasOwnProperty("length") !== true){ - $ERROR('#1: The parse has a "length" property'); -} - -if(Date.parse.length !== 1){ - $ERROR('#2: The "length" property of the parse is 1'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.4_Properties_of_the_Date_Constructor/15.9.4.2_Date.parse/S15.9.4.2_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.4_Properties_of_the_Date_Constructor/15.9.4.2_Date.parse/S15.9.4.2_A3_T1.js deleted file mode 100644 index 6bdb848c6..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.4_Properties_of_the_Date_Constructor/15.9.4.2_Date.parse/S15.9.4.2_A3_T1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.4.2_A3_T1; - * @section: 15.9.4.2; - * @assertion: The Date.parse property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking ReadOnly attribute; - */ - -x = Date.parse.length; -Date.parse.length = 1; -if (Date.parse.length !== x) { - $ERROR('#1: The Date.parse.length has the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.4_Properties_of_the_Date_Constructor/15.9.4.2_Date.parse/S15.9.4.2_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.4_Properties_of_the_Date_Constructor/15.9.4.2_Date.parse/S15.9.4.2_A3_T2.js deleted file mode 100644 index a83e48b9f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.4_Properties_of_the_Date_Constructor/15.9.4.2_Date.parse/S15.9.4.2_A3_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.4.2_A3_T2; - * @section: 15.9.4.2; - * @assertion: The Date.parse property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontDelete attribute; - */ - -if (delete Date.parse.length !== false) { - $ERROR('#1: The Date.parse.length property has the attributes DontDelete'); -} - -if (!Date.parse.hasOwnProperty('length')) { - $FAIL('#2: The Date.parse.length property has the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.4_Properties_of_the_Date_Constructor/15.9.4.2_Date.parse/S15.9.4.2_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.4_Properties_of_the_Date_Constructor/15.9.4.2_Date.parse/S15.9.4.2_A3_T3.js deleted file mode 100644 index b5a7c7f43..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.4_Properties_of_the_Date_Constructor/15.9.4.2_Date.parse/S15.9.4.2_A3_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.4.2_A3_T3; - * @section: 15.9.4.2; - * @assertion: The Date.parse property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.parse.propertyIsEnumerable('length')) { - $ERROR('#1: The Date.parse.length property has the attribute DontEnum'); -} - -for(x in Date.parse) { - if(x === "length") { - $ERROR('#2: The Date.parse.length has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.4_Properties_of_the_Date_Constructor/15.9.4.3_Date.UTC/S15.9.4.3_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.4_Properties_of_the_Date_Constructor/15.9.4.3_Date.UTC/S15.9.4.3_A1_T1.js deleted file mode 100644 index a53936572..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.4_Properties_of_the_Date_Constructor/15.9.4.3_Date.UTC/S15.9.4.3_A1_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.4.3_A1_T1; - * @section: 15.9.4.3; - * @assertion: The Date property "UTC" has { DontEnum } attributes; - * @description: Checking absence of ReadOnly attribute; - */ - -x = Date.UTC; -if(x === 1) - Date.UTC = 2; -else - Date.UTC = 1; -if (Date.UTC === x) { - $ERROR('#1: The Date.UTC has not the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.4_Properties_of_the_Date_Constructor/15.9.4.3_Date.UTC/S15.9.4.3_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.4_Properties_of_the_Date_Constructor/15.9.4.3_Date.UTC/S15.9.4.3_A1_T2.js deleted file mode 100644 index 313874aa5..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.4_Properties_of_the_Date_Constructor/15.9.4.3_Date.UTC/S15.9.4.3_A1_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.4.3_A1_T2; - * @section: 15.9.4.3; - * @assertion: The Date property "UTC" has { DontEnum } attributes; - * @description: Checking absence of DontDelete attribute; - */ - -if (delete Date.UTC === false) { - $ERROR('#1: The Date.UTC property has not the attributes DontDelete'); -} - -if (Date.hasOwnProperty('UTC')) { - $FAIL('#2: The Date.UTC property has not the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.4_Properties_of_the_Date_Constructor/15.9.4.3_Date.UTC/S15.9.4.3_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.4_Properties_of_the_Date_Constructor/15.9.4.3_Date.UTC/S15.9.4.3_A1_T3.js deleted file mode 100644 index 9e7a68eab..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.4_Properties_of_the_Date_Constructor/15.9.4.3_Date.UTC/S15.9.4.3_A1_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.4.3_A1_T3; - * @section: 15.9.4.3; - * @assertion: The Date property "UTC" has { DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.propertyIsEnumerable('UTC')) { - $ERROR('#1: The Date.UTC property has the attribute DontEnum'); -} - -for(x in Date) { - if(x === "UTC") { - $ERROR('#2: The Date.UTC has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.4_Properties_of_the_Date_Constructor/15.9.4.3_Date.UTC/S15.9.4.3_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.4_Properties_of_the_Date_Constructor/15.9.4.3_Date.UTC/S15.9.4.3_A2_T1.js deleted file mode 100644 index 4ba6c3185..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.4_Properties_of_the_Date_Constructor/15.9.4.3_Date.UTC/S15.9.4.3_A2_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.4.3_A2_T1; - * @section: 15.9.4.3; - * @assertion: The "length" property of the "UTC" is 7; - * @description: The "length" property of the "UTC" is 7; - */ - -if(Date.UTC.hasOwnProperty("length") !== true){ - $ERROR('#1: The UTC has a "length" property'); -} - -if(Date.UTC.length !== 7){ - $ERROR('#2: The "length" property of the UTC is 7'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.4_Properties_of_the_Date_Constructor/15.9.4.3_Date.UTC/S15.9.4.3_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.4_Properties_of_the_Date_Constructor/15.9.4.3_Date.UTC/S15.9.4.3_A3_T1.js deleted file mode 100644 index 9de510da5..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.4_Properties_of_the_Date_Constructor/15.9.4.3_Date.UTC/S15.9.4.3_A3_T1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.4.3_A3_T1; - * @section: 15.9.4.3; - * @assertion: The Date.UTC property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking ReadOnly attribute; - */ - -x = Date.UTC.length; -Date.UTC.length = 1; -if (Date.UTC.length !== x) { - $ERROR('#1: The Date.UTC.length has the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.4_Properties_of_the_Date_Constructor/15.9.4.3_Date.UTC/S15.9.4.3_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.4_Properties_of_the_Date_Constructor/15.9.4.3_Date.UTC/S15.9.4.3_A3_T2.js deleted file mode 100644 index c1be23fe8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.4_Properties_of_the_Date_Constructor/15.9.4.3_Date.UTC/S15.9.4.3_A3_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.4.3_A3_T2; - * @section: 15.9.4.3; - * @assertion: The Date.UTC property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontDelete attribute; - */ - -if (delete Date.UTC.length !== false) { - $ERROR('#1: The Date.UTC.length property has the attributes DontDelete'); -} - -if (!Date.UTC.hasOwnProperty('length')) { - $FAIL('#2: The Date.UTC.length property has the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.4_Properties_of_the_Date_Constructor/15.9.4.3_Date.UTC/S15.9.4.3_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.4_Properties_of_the_Date_Constructor/15.9.4.3_Date.UTC/S15.9.4.3_A3_T3.js deleted file mode 100644 index ddb9b4f3b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.4_Properties_of_the_Date_Constructor/15.9.4.3_Date.UTC/S15.9.4.3_A3_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.4.3_A3_T3; - * @section: 15.9.4.3; - * @assertion: The Date.UTC property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.UTC.propertyIsEnumerable('length')) { - $ERROR('#1: The Date.UTC.length property has the attribute DontEnum'); -} - -for(x in Date.UTC) { - if(x === "length") { - $ERROR('#2: The Date.UTC.length has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.4_Properties_of_the_Date_Constructor/S15.9.4_A1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.4_Properties_of_the_Date_Constructor/S15.9.4_A1.js deleted file mode 100644 index 2ac75a690..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.4_Properties_of_the_Date_Constructor/S15.9.4_A1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.4_A1; - * @section: 15.9.4; - * @assertion: The Date constructor has the property "prototype"; - * @description: Checking existence of the property "prototype"; - */ - -if(!Date.hasOwnProperty("prototype")){ - $ERROR('#1: The Date constructor has the property "prototype"'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.4_Properties_of_the_Date_Constructor/S15.9.4_A2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.4_Properties_of_the_Date_Constructor/S15.9.4_A2.js deleted file mode 100644 index 18f59150d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.4_Properties_of_the_Date_Constructor/S15.9.4_A2.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.4_A2; - * @section: 15.9.4; - * @assertion: The Date constructor has the property "parse"; - * @description: Checking existence of the property "parse"; - */ - -if(!Date.hasOwnProperty("parse")){ - $ERROR('#1: The Date constructor has the property "parse"'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.4_Properties_of_the_Date_Constructor/S15.9.4_A3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.4_Properties_of_the_Date_Constructor/S15.9.4_A3.js deleted file mode 100644 index fba1c6ab3..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.4_Properties_of_the_Date_Constructor/S15.9.4_A3.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.4_A3; - * @section: 15.9.4; - * @assertion: The Date constructor has the property "UTC"; - * @description: Checking existence of the property "UTC"; - */ - -if(!Date.hasOwnProperty("UTC")){ - $ERROR('#1: The Date constructor has the property "UTC"'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.4_Properties_of_the_Date_Constructor/S15.9.4_A4.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.4_Properties_of_the_Date_Constructor/S15.9.4_A4.js deleted file mode 100644 index 7d8771158..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.4_Properties_of_the_Date_Constructor/S15.9.4_A4.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.9.4_A4; -* @section: 15.9.4; -* @assertion: The value of the internal [[Prototype]] property of the Date -* constructor is the Function prototype object; -* @description: Checking Function.prototype.isPrototypeOf(Date); -*/ - -//CHECK#1 -if (!(Function.prototype.isPrototypeOf(Date))) { - $ERROR('#1: the value of the internal [[Prototype]] property of the Date constructor is the Function prototype object.'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.4_Properties_of_the_Date_Constructor/S15.9.4_A5.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.4_Properties_of_the_Date_Constructor/S15.9.4_A5.js deleted file mode 100644 index 0e0e99042..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.4_Properties_of_the_Date_Constructor/S15.9.4_A5.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.9.4_A5; -* @section: 15.9.4; -* @assertion: Date constructor has length property whose value is 7; -* @description: Checking Date.length property; -*/ - -//CHECK#1 -if (!Date.hasOwnProperty("length")){ - $ERROR('#1: Date constructor has length property'); -} - -//CHECK#2 -if (Date.length !== 7) { - $ERROR('#2: Date constructor length property value should be 7'); -} diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.10_Date.prototype.getFullYear/S15.9.5.10_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.10_Date.prototype.getFullYear/S15.9.5.10_A1_T1.js deleted file mode 100644 index 746b9fe6a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.10_Date.prototype.getFullYear/S15.9.5.10_A1_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.10_A1_T1; - * @section: 15.9.5.10; - * @assertion: The Date.prototype property "getFullYear" has { DontEnum } attributes; - * @description: Checking absence of ReadOnly attribute; - */ - -x = Date.prototype.getFullYear; -if(x === 1) - Date.prototype.getFullYear = 2; -else - Date.prototype.getFullYear = 1; -if (Date.prototype.getFullYear === x) { - $ERROR('#1: The Date.prototype.getFullYear has not the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.10_Date.prototype.getFullYear/S15.9.5.10_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.10_Date.prototype.getFullYear/S15.9.5.10_A1_T2.js deleted file mode 100644 index f91c896ad..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.10_Date.prototype.getFullYear/S15.9.5.10_A1_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.10_A1_T2; - * @section: 15.9.5.10; - * @assertion: The Date.prototype property "getFullYear" has { DontEnum } attributes; - * @description: Checking absence of DontDelete attribute; - */ - -if (delete Date.prototype.getFullYear === false) { - $ERROR('#1: The Date.prototype.getFullYear property has not the attributes DontDelete'); -} - -if (Date.prototype.hasOwnProperty('getFullYear')) { - $FAIL('#2: The Date.prototype.getFullYear property has not the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.10_Date.prototype.getFullYear/S15.9.5.10_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.10_Date.prototype.getFullYear/S15.9.5.10_A1_T3.js deleted file mode 100644 index ea0e1c9c8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.10_Date.prototype.getFullYear/S15.9.5.10_A1_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.10_A1_T3; - * @section: 15.9.5.10; - * @assertion: The Date.prototype property "getFullYear" has { DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.propertyIsEnumerable('getFullYear')) { - $ERROR('#1: The Date.prototype.getFullYear property has the attribute DontEnum'); -} - -for(x in Date.prototype) { - if(x === "getFullYear") { - $ERROR('#2: The Date.prototype.getFullYear has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.10_Date.prototype.getFullYear/S15.9.5.10_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.10_Date.prototype.getFullYear/S15.9.5.10_A2_T1.js deleted file mode 100644 index 96d586102..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.10_Date.prototype.getFullYear/S15.9.5.10_A2_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.10_A2_T1; - * @section: 15.9.5.10; - * @assertion: The "length" property of the "getFullYear" is 0; - * @description: The "length" property of the "getFullYear" is 0; - */ - -if(Date.prototype.getFullYear.hasOwnProperty("length") !== true){ - $ERROR('#1: The getFullYear has a "length" property'); -} - -if(Date.prototype.getFullYear.length !== 0){ - $ERROR('#2: The "length" property of the getFullYear is 0'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.10_Date.prototype.getFullYear/S15.9.5.10_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.10_Date.prototype.getFullYear/S15.9.5.10_A3_T1.js deleted file mode 100644 index f2a45e321..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.10_Date.prototype.getFullYear/S15.9.5.10_A3_T1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.10_A3_T1; - * @section: 15.9.5.10; - * @assertion: The Date.prototype.getFullYear property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking ReadOnly attribute; - */ - -x = Date.prototype.getFullYear.length; -Date.prototype.getFullYear.length = 1; -if (Date.prototype.getFullYear.length !== x) { - $ERROR('#1: The Date.prototype.getFullYear.length has the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.10_Date.prototype.getFullYear/S15.9.5.10_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.10_Date.prototype.getFullYear/S15.9.5.10_A3_T2.js deleted file mode 100644 index 445495305..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.10_Date.prototype.getFullYear/S15.9.5.10_A3_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.10_A3_T2; - * @section: 15.9.5.10; - * @assertion: The Date.prototype.getFullYear property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontDelete attribute; - */ - -if (delete Date.prototype.getFullYear.length !== false) { - $ERROR('#1: The Date.prototype.getFullYear.length property has the attributes DontDelete'); -} - -if (!Date.prototype.getFullYear.hasOwnProperty('length')) { - $FAIL('#2: The Date.prototype.getFullYear.length property has the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.10_Date.prototype.getFullYear/S15.9.5.10_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.10_Date.prototype.getFullYear/S15.9.5.10_A3_T3.js deleted file mode 100644 index 09ee4997f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.10_Date.prototype.getFullYear/S15.9.5.10_A3_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.10_A3_T3; - * @section: 15.9.5.10; - * @assertion: The Date.prototype.getFullYear property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.getFullYear.propertyIsEnumerable('length')) { - $ERROR('#1: The Date.prototype.getFullYear.length property has the attribute DontEnum'); -} - -for(x in Date.prototype.getFullYear) { - if(x === "length") { - $ERROR('#2: The Date.prototype.getFullYear.length has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.11_Date.prototype.getUTCFullYear/S15.9.5.11_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.11_Date.prototype.getUTCFullYear/S15.9.5.11_A1_T1.js deleted file mode 100644 index cefc215b0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.11_Date.prototype.getUTCFullYear/S15.9.5.11_A1_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.11_A1_T1; - * @section: 15.9.5.11; - * @assertion: The Date.prototype property "getUTCFullYear" has { DontEnum } attributes; - * @description: Checking absence of ReadOnly attribute; - */ - -x = Date.prototype.getUTCFullYear; -if(x === 1) - Date.prototype.getUTCFullYear = 2; -else - Date.prototype.getUTCFullYear = 1; -if (Date.prototype.getUTCFullYear === x) { - $ERROR('#1: The Date.prototype.getUTCFullYear has not the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.11_Date.prototype.getUTCFullYear/S15.9.5.11_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.11_Date.prototype.getUTCFullYear/S15.9.5.11_A1_T2.js deleted file mode 100644 index 8da9048e5..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.11_Date.prototype.getUTCFullYear/S15.9.5.11_A1_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.11_A1_T2; - * @section: 15.9.5.11; - * @assertion: The Date.prototype property "getUTCFullYear" has { DontEnum } attributes; - * @description: Checking absence of DontDelete attribute; - */ - -if (delete Date.prototype.getUTCFullYear === false) { - $ERROR('#1: The Date.prototype.getUTCFullYear property has not the attributes DontDelete'); -} - -if (Date.prototype.hasOwnProperty('getUTCFullYear')) { - $FAIL('#2: The Date.prototype.getUTCFullYear property has not the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.11_Date.prototype.getUTCFullYear/S15.9.5.11_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.11_Date.prototype.getUTCFullYear/S15.9.5.11_A1_T3.js deleted file mode 100644 index 7657e9a8f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.11_Date.prototype.getUTCFullYear/S15.9.5.11_A1_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.11_A1_T3; - * @section: 15.9.5.11; - * @assertion: The Date.prototype property "getUTCFullYear" has { DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.propertyIsEnumerable('getUTCFullYear')) { - $ERROR('#1: The Date.prototype.getUTCFullYear property has the attribute DontEnum'); -} - -for(x in Date.prototype) { - if(x === "getUTCFullYear") { - $ERROR('#2: The Date.prototype.getUTCFullYear has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.11_Date.prototype.getUTCFullYear/S15.9.5.11_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.11_Date.prototype.getUTCFullYear/S15.9.5.11_A2_T1.js deleted file mode 100644 index a6fd5d27c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.11_Date.prototype.getUTCFullYear/S15.9.5.11_A2_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.11_A2_T1; - * @section: 15.9.5.11; - * @assertion: The "length" property of the "getUTCFullYear" is 0; - * @description: The "length" property of the "getUTCFullYear" is 0; - */ - -if(Date.prototype.getUTCFullYear.hasOwnProperty("length") !== true){ - $ERROR('#1: The getUTCFullYear has a "length" property'); -} - -if(Date.prototype.getUTCFullYear.length !== 0){ - $ERROR('#2: The "length" property of the getUTCFullYear is 0'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.11_Date.prototype.getUTCFullYear/S15.9.5.11_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.11_Date.prototype.getUTCFullYear/S15.9.5.11_A3_T1.js deleted file mode 100644 index c40f8e3e8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.11_Date.prototype.getUTCFullYear/S15.9.5.11_A3_T1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.11_A3_T1; - * @section: 15.9.5.11; - * @assertion: The Date.prototype.getUTCFullYear property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking ReadOnly attribute; - */ - -x = Date.prototype.getUTCFullYear.length; -Date.prototype.getUTCFullYear.length = 1; -if (Date.prototype.getUTCFullYear.length !== x) { - $ERROR('#1: The Date.prototype.getUTCFullYear.length has the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.11_Date.prototype.getUTCFullYear/S15.9.5.11_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.11_Date.prototype.getUTCFullYear/S15.9.5.11_A3_T2.js deleted file mode 100644 index d0cae29dd..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.11_Date.prototype.getUTCFullYear/S15.9.5.11_A3_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.11_A3_T2; - * @section: 15.9.5.11; - * @assertion: The Date.prototype.getUTCFullYear property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontDelete attribute; - */ - -if (delete Date.prototype.getUTCFullYear.length !== false) { - $ERROR('#1: The Date.prototype.getUTCFullYear.length property has the attributes DontDelete'); -} - -if (!Date.prototype.getUTCFullYear.hasOwnProperty('length')) { - $FAIL('#2: The Date.prototype.getUTCFullYear.length property has the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.11_Date.prototype.getUTCFullYear/S15.9.5.11_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.11_Date.prototype.getUTCFullYear/S15.9.5.11_A3_T3.js deleted file mode 100644 index d060e4b1d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.11_Date.prototype.getUTCFullYear/S15.9.5.11_A3_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.11_A3_T3; - * @section: 15.9.5.11; - * @assertion: The Date.prototype.getUTCFullYear property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.getUTCFullYear.propertyIsEnumerable('length')) { - $ERROR('#1: The Date.prototype.getUTCFullYear.length property has the attribute DontEnum'); -} - -for(x in Date.prototype.getUTCFullYear) { - if(x === "length") { - $ERROR('#2: The Date.prototype.getUTCFullYear.length has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.12_Date.prototype.getMonth/S15.9.5.12_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.12_Date.prototype.getMonth/S15.9.5.12_A1_T1.js deleted file mode 100644 index bf1f947bb..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.12_Date.prototype.getMonth/S15.9.5.12_A1_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.12_A1_T1; - * @section: 15.9.5.12; - * @assertion: The Date.prototype property "getMonth" has { DontEnum } attributes; - * @description: Checking absence of ReadOnly attribute; - */ - -x = Date.prototype.getMonth; -if(x === 1) - Date.prototype.getMonth = 2; -else - Date.prototype.getMonth = 1; -if (Date.prototype.getMonth === x) { - $ERROR('#1: The Date.prototype.getMonth has not the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.12_Date.prototype.getMonth/S15.9.5.12_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.12_Date.prototype.getMonth/S15.9.5.12_A1_T2.js deleted file mode 100644 index fbdf03f5a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.12_Date.prototype.getMonth/S15.9.5.12_A1_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.12_A1_T2; - * @section: 15.9.5.12; - * @assertion: The Date.prototype property "getMonth" has { DontEnum } attributes; - * @description: Checking absence of DontDelete attribute; - */ - -if (delete Date.prototype.getMonth === false) { - $ERROR('#1: The Date.prototype.getMonth property has not the attributes DontDelete'); -} - -if (Date.prototype.hasOwnProperty('getMonth')) { - $FAIL('#2: The Date.prototype.getMonth property has not the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.12_Date.prototype.getMonth/S15.9.5.12_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.12_Date.prototype.getMonth/S15.9.5.12_A1_T3.js deleted file mode 100644 index ee20259ab..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.12_Date.prototype.getMonth/S15.9.5.12_A1_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.12_A1_T3; - * @section: 15.9.5.12; - * @assertion: The Date.prototype property "getMonth" has { DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.propertyIsEnumerable('getMonth')) { - $ERROR('#1: The Date.prototype.getMonth property has the attribute DontEnum'); -} - -for(x in Date.prototype) { - if(x === "getMonth") { - $ERROR('#2: The Date.prototype.getMonth has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.12_Date.prototype.getMonth/S15.9.5.12_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.12_Date.prototype.getMonth/S15.9.5.12_A2_T1.js deleted file mode 100644 index 292f2dbcb..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.12_Date.prototype.getMonth/S15.9.5.12_A2_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.12_A2_T1; - * @section: 15.9.5.12; - * @assertion: The "length" property of the "getMonth" is 0; - * @description: The "length" property of the "getMonth" is 0; - */ - -if(Date.prototype.getMonth.hasOwnProperty("length") !== true){ - $ERROR('#1: The getMonth has a "length" property'); -} - -if(Date.prototype.getMonth.length !== 0){ - $ERROR('#2: The "length" property of the getMonth is 0'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.12_Date.prototype.getMonth/S15.9.5.12_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.12_Date.prototype.getMonth/S15.9.5.12_A3_T1.js deleted file mode 100644 index 2981306d7..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.12_Date.prototype.getMonth/S15.9.5.12_A3_T1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.12_A3_T1; - * @section: 15.9.5.12; - * @assertion: The Date.prototype.getMonth property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking ReadOnly attribute; - */ - -x = Date.prototype.getMonth.length; -Date.prototype.getMonth.length = 1; -if (Date.prototype.getMonth.length !== x) { - $ERROR('#1: The Date.prototype.getMonth.length has the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.12_Date.prototype.getMonth/S15.9.5.12_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.12_Date.prototype.getMonth/S15.9.5.12_A3_T2.js deleted file mode 100644 index 62abc8b16..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.12_Date.prototype.getMonth/S15.9.5.12_A3_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.12_A3_T2; - * @section: 15.9.5.12; - * @assertion: The Date.prototype.getMonth property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontDelete attribute; - */ - -if (delete Date.prototype.getMonth.length !== false) { - $ERROR('#1: The Date.prototype.getMonth.length property has the attributes DontDelete'); -} - -if (!Date.prototype.getMonth.hasOwnProperty('length')) { - $FAIL('#2: The Date.prototype.getMonth.length property has the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.12_Date.prototype.getMonth/S15.9.5.12_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.12_Date.prototype.getMonth/S15.9.5.12_A3_T3.js deleted file mode 100644 index d8ab5b2f0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.12_Date.prototype.getMonth/S15.9.5.12_A3_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.12_A3_T3; - * @section: 15.9.5.12; - * @assertion: The Date.prototype.getMonth property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.getMonth.propertyIsEnumerable('length')) { - $ERROR('#1: The Date.prototype.getMonth.length property has the attribute DontEnum'); -} - -for(x in Date.prototype.getMonth) { - if(x === "length") { - $ERROR('#2: The Date.prototype.getMonth.length has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.13_Date.prototype.getUTCMonth/S15.9.5.13_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.13_Date.prototype.getUTCMonth/S15.9.5.13_A1_T1.js deleted file mode 100644 index 5f92792ca..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.13_Date.prototype.getUTCMonth/S15.9.5.13_A1_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.13_A1_T1; - * @section: 15.9.5.13; - * @assertion: The Date.prototype property "getUTCMonth" has { DontEnum } attributes; - * @description: Checking absence of ReadOnly attribute; - */ - -x = Date.prototype.getUTCMonth; -if(x === 1) - Date.prototype.getUTCMonth = 2; -else - Date.prototype.getUTCMonth = 1; -if (Date.prototype.getUTCMonth === x) { - $ERROR('#1: The Date.prototype.getUTCMonth has not the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.13_Date.prototype.getUTCMonth/S15.9.5.13_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.13_Date.prototype.getUTCMonth/S15.9.5.13_A1_T2.js deleted file mode 100644 index 4d49329a0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.13_Date.prototype.getUTCMonth/S15.9.5.13_A1_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.13_A1_T2; - * @section: 15.9.5.13; - * @assertion: The Date.prototype property "getUTCMonth" has { DontEnum } attributes; - * @description: Checking absence of DontDelete attribute; - */ - -if (delete Date.prototype.getUTCMonth === false) { - $ERROR('#1: The Date.prototype.getUTCMonth property has not the attributes DontDelete'); -} - -if (Date.prototype.hasOwnProperty('getUTCMonth')) { - $FAIL('#2: The Date.prototype.getUTCMonth property has not the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.13_Date.prototype.getUTCMonth/S15.9.5.13_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.13_Date.prototype.getUTCMonth/S15.9.5.13_A1_T3.js deleted file mode 100644 index ca4fb8c45..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.13_Date.prototype.getUTCMonth/S15.9.5.13_A1_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.13_A1_T3; - * @section: 15.9.5.13; - * @assertion: The Date.prototype property "getUTCMonth" has { DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.propertyIsEnumerable('getUTCMonth')) { - $ERROR('#1: The Date.prototype.getUTCMonth property has the attribute DontEnum'); -} - -for(x in Date.prototype) { - if(x === "getUTCMonth") { - $ERROR('#2: The Date.prototype.getUTCMonth has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.13_Date.prototype.getUTCMonth/S15.9.5.13_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.13_Date.prototype.getUTCMonth/S15.9.5.13_A2_T1.js deleted file mode 100644 index 3438c8493..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.13_Date.prototype.getUTCMonth/S15.9.5.13_A2_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.13_A2_T1; - * @section: 15.9.5.13; - * @assertion: The "length" property of the "getUTCMonth" is 0; - * @description: The "length" property of the "getUTCMonth" is 0; - */ - -if(Date.prototype.getUTCMonth.hasOwnProperty("length") !== true){ - $ERROR('#1: The getUTCMonth has a "length" property'); -} - -if(Date.prototype.getUTCMonth.length !== 0){ - $ERROR('#2: The "length" property of the getUTCMonth is 0'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.13_Date.prototype.getUTCMonth/S15.9.5.13_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.13_Date.prototype.getUTCMonth/S15.9.5.13_A3_T1.js deleted file mode 100644 index 3951206ae..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.13_Date.prototype.getUTCMonth/S15.9.5.13_A3_T1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.13_A3_T1; - * @section: 15.9.5.13; - * @assertion: The Date.prototype.getUTCMonth property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking ReadOnly attribute; - */ - -x = Date.prototype.getUTCMonth.length; -Date.prototype.getUTCMonth.length = 1; -if (Date.prototype.getUTCMonth.length !== x) { - $ERROR('#1: The Date.prototype.getUTCMonth.length has the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.13_Date.prototype.getUTCMonth/S15.9.5.13_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.13_Date.prototype.getUTCMonth/S15.9.5.13_A3_T2.js deleted file mode 100644 index dbd859295..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.13_Date.prototype.getUTCMonth/S15.9.5.13_A3_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.13_A3_T2; - * @section: 15.9.5.13; - * @assertion: The Date.prototype.getUTCMonth property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontDelete attribute; - */ - -if (delete Date.prototype.getUTCMonth.length !== false) { - $ERROR('#1: The Date.prototype.getUTCMonth.length property has the attributes DontDelete'); -} - -if (!Date.prototype.getUTCMonth.hasOwnProperty('length')) { - $FAIL('#2: The Date.prototype.getUTCMonth.length property has the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.13_Date.prototype.getUTCMonth/S15.9.5.13_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.13_Date.prototype.getUTCMonth/S15.9.5.13_A3_T3.js deleted file mode 100644 index 7b417d062..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.13_Date.prototype.getUTCMonth/S15.9.5.13_A3_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.13_A3_T3; - * @section: 15.9.5.13; - * @assertion: The Date.prototype.getUTCMonth property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.getUTCMonth.propertyIsEnumerable('length')) { - $ERROR('#1: The Date.prototype.getUTCMonth.length property has the attribute DontEnum'); -} - -for(x in Date.prototype.getUTCMonth) { - if(x === "length") { - $ERROR('#2: The Date.prototype.getUTCMonth.length has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.14_Date.prototype.getDate/S15.9.5.14_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.14_Date.prototype.getDate/S15.9.5.14_A1_T1.js deleted file mode 100644 index 64fffba7e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.14_Date.prototype.getDate/S15.9.5.14_A1_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.14_A1_T1; - * @section: 15.9.5.14; - * @assertion: The Date.prototype property "getDate" has { DontEnum } attributes; - * @description: Checking absence of ReadOnly attribute; - */ - -x = Date.prototype.getDate; -if(x === 1) - Date.prototype.getDate = 2; -else - Date.prototype.getDate = 1; -if (Date.prototype.getDate === x) { - $ERROR('#1: The Date.prototype.getDate has not the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.14_Date.prototype.getDate/S15.9.5.14_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.14_Date.prototype.getDate/S15.9.5.14_A1_T2.js deleted file mode 100644 index 63a312912..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.14_Date.prototype.getDate/S15.9.5.14_A1_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.14_A1_T2; - * @section: 15.9.5.14; - * @assertion: The Date.prototype property "getDate" has { DontEnum } attributes; - * @description: Checking absence of DontDelete attribute; - */ - -if (delete Date.prototype.getDate === false) { - $ERROR('#1: The Date.prototype.getDate property has not the attributes DontDelete'); -} - -if (Date.prototype.hasOwnProperty('getDate')) { - $FAIL('#2: The Date.prototype.getDate property has not the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.14_Date.prototype.getDate/S15.9.5.14_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.14_Date.prototype.getDate/S15.9.5.14_A1_T3.js deleted file mode 100644 index aa6291e32..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.14_Date.prototype.getDate/S15.9.5.14_A1_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.14_A1_T3; - * @section: 15.9.5.14; - * @assertion: The Date.prototype property "getDate" has { DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.propertyIsEnumerable('getDate')) { - $ERROR('#1: The Date.prototype.getDate property has the attribute DontEnum'); -} - -for(x in Date.prototype) { - if(x === "getDate") { - $ERROR('#2: The Date.prototype.getDate has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.14_Date.prototype.getDate/S15.9.5.14_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.14_Date.prototype.getDate/S15.9.5.14_A2_T1.js deleted file mode 100644 index ae54df4c2..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.14_Date.prototype.getDate/S15.9.5.14_A2_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.14_A2_T1; - * @section: 15.9.5.14; - * @assertion: The "length" property of the "getDate" is 0; - * @description: The "length" property of the "getDate" is 0; - */ - -if(Date.prototype.getDate.hasOwnProperty("length") !== true){ - $ERROR('#1: The getDate has a "length" property'); -} - -if(Date.prototype.getDate.length !== 0){ - $ERROR('#2: The "length" property of the getDate is 0'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.14_Date.prototype.getDate/S15.9.5.14_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.14_Date.prototype.getDate/S15.9.5.14_A3_T1.js deleted file mode 100644 index b6a94211b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.14_Date.prototype.getDate/S15.9.5.14_A3_T1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.14_A3_T1; - * @section: 15.9.5.14; - * @assertion: The Date.prototype.getDate property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking ReadOnly attribute; - */ - -x = Date.prototype.getDate.length; -Date.prototype.getDate.length = 1; -if (Date.prototype.getDate.length !== x) { - $ERROR('#1: The Date.prototype.getDate.length has the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.14_Date.prototype.getDate/S15.9.5.14_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.14_Date.prototype.getDate/S15.9.5.14_A3_T2.js deleted file mode 100644 index 56ba23355..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.14_Date.prototype.getDate/S15.9.5.14_A3_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.14_A3_T2; - * @section: 15.9.5.14; - * @assertion: The Date.prototype.getDate property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontDelete attribute; - */ - -if (delete Date.prototype.getDate.length !== false) { - $ERROR('#1: The Date.prototype.getDate.length property has the attributes DontDelete'); -} - -if (!Date.prototype.getDate.hasOwnProperty('length')) { - $FAIL('#2: The Date.prototype.getDate.length property has the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.14_Date.prototype.getDate/S15.9.5.14_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.14_Date.prototype.getDate/S15.9.5.14_A3_T3.js deleted file mode 100644 index bcedeb676..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.14_Date.prototype.getDate/S15.9.5.14_A3_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.14_A3_T3; - * @section: 15.9.5.14; - * @assertion: The Date.prototype.getDate property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.getDate.propertyIsEnumerable('length')) { - $ERROR('#1: The Date.prototype.getDate.length property has the attribute DontEnum'); -} - -for(x in Date.prototype.getDate) { - if(x === "length") { - $ERROR('#2: The Date.prototype.getDate.length has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.15_Date.prototype.getUTCDate/S15.9.5.15_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.15_Date.prototype.getUTCDate/S15.9.5.15_A1_T1.js deleted file mode 100644 index f90d8dc44..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.15_Date.prototype.getUTCDate/S15.9.5.15_A1_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.15_A1_T1; - * @section: 15.9.5.15; - * @assertion: The Date.prototype property "getUTCDate" has { DontEnum } attributes; - * @description: Checking absence of ReadOnly attribute; - */ - -x = Date.prototype.getUTCDate; -if(x === 1) - Date.prototype.getUTCDate = 2; -else - Date.prototype.getUTCDate = 1; -if (Date.prototype.getUTCDate === x) { - $ERROR('#1: The Date.prototype.getUTCDate has not the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.15_Date.prototype.getUTCDate/S15.9.5.15_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.15_Date.prototype.getUTCDate/S15.9.5.15_A1_T2.js deleted file mode 100644 index 3f03923be..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.15_Date.prototype.getUTCDate/S15.9.5.15_A1_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.15_A1_T2; - * @section: 15.9.5.15; - * @assertion: The Date.prototype property "getUTCDate" has { DontEnum } attributes; - * @description: Checking absence of DontDelete attribute; - */ - -if (delete Date.prototype.getUTCDate === false) { - $ERROR('#1: The Date.prototype.getUTCDate property has not the attributes DontDelete'); -} - -if (Date.prototype.hasOwnProperty('getUTCDate')) { - $FAIL('#2: The Date.prototype.getUTCDate property has not the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.15_Date.prototype.getUTCDate/S15.9.5.15_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.15_Date.prototype.getUTCDate/S15.9.5.15_A1_T3.js deleted file mode 100644 index 310890c62..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.15_Date.prototype.getUTCDate/S15.9.5.15_A1_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.15_A1_T3; - * @section: 15.9.5.15; - * @assertion: The Date.prototype property "getUTCDate" has { DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.propertyIsEnumerable('getUTCDate')) { - $ERROR('#1: The Date.prototype.getUTCDate property has the attribute DontEnum'); -} - -for(x in Date.prototype) { - if(x === "getUTCDate") { - $ERROR('#2: The Date.prototype.getUTCDate has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.15_Date.prototype.getUTCDate/S15.9.5.15_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.15_Date.prototype.getUTCDate/S15.9.5.15_A2_T1.js deleted file mode 100644 index eee73522a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.15_Date.prototype.getUTCDate/S15.9.5.15_A2_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.15_A2_T1; - * @section: 15.9.5.15; - * @assertion: The "length" property of the "getUTCDate" is 0; - * @description: The "length" property of the "getUTCDate" is 0; - */ - -if(Date.prototype.getUTCDate.hasOwnProperty("length") !== true){ - $ERROR('#1: The getUTCDate has a "length" property'); -} - -if(Date.prototype.getUTCDate.length !== 0){ - $ERROR('#2: The "length" property of the getUTCDate is 0'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.15_Date.prototype.getUTCDate/S15.9.5.15_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.15_Date.prototype.getUTCDate/S15.9.5.15_A3_T1.js deleted file mode 100644 index d6764061e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.15_Date.prototype.getUTCDate/S15.9.5.15_A3_T1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.15_A3_T1; - * @section: 15.9.5.15; - * @assertion: The Date.prototype.getUTCDate property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking ReadOnly attribute; - */ - -x = Date.prototype.getUTCDate.length; -Date.prototype.getUTCDate.length = 1; -if (Date.prototype.getUTCDate.length !== x) { - $ERROR('#1: The Date.prototype.getUTCDate.length has the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.15_Date.prototype.getUTCDate/S15.9.5.15_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.15_Date.prototype.getUTCDate/S15.9.5.15_A3_T2.js deleted file mode 100644 index 4ef1a6e6b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.15_Date.prototype.getUTCDate/S15.9.5.15_A3_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.15_A3_T2; - * @section: 15.9.5.15; - * @assertion: The Date.prototype.getUTCDate property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontDelete attribute; - */ - -if (delete Date.prototype.getUTCDate.length !== false) { - $ERROR('#1: The Date.prototype.getUTCDate.length property has the attributes DontDelete'); -} - -if (!Date.prototype.getUTCDate.hasOwnProperty('length')) { - $FAIL('#2: The Date.prototype.getUTCDate.length property has the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.15_Date.prototype.getUTCDate/S15.9.5.15_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.15_Date.prototype.getUTCDate/S15.9.5.15_A3_T3.js deleted file mode 100644 index ee38abfd8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.15_Date.prototype.getUTCDate/S15.9.5.15_A3_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.15_A3_T3; - * @section: 15.9.5.15; - * @assertion: The Date.prototype.getUTCDate property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.getUTCDate.propertyIsEnumerable('length')) { - $ERROR('#1: The Date.prototype.getUTCDate.length property has the attribute DontEnum'); -} - -for(x in Date.prototype.getUTCDate) { - if(x === "length") { - $ERROR('#2: The Date.prototype.getUTCDate.length has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.16_Date.prototype.getDay/S15.9.5.16_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.16_Date.prototype.getDay/S15.9.5.16_A1_T1.js deleted file mode 100644 index de892d854..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.16_Date.prototype.getDay/S15.9.5.16_A1_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.16_A1_T1; - * @section: 15.9.5.16; - * @assertion: The Date.prototype property "getDay" has { DontEnum } attributes; - * @description: Checking absence of ReadOnly attribute; - */ - -x = Date.prototype.getDay; -if(x === 1) - Date.prototype.getDay = 2; -else - Date.prototype.getDay = 1; -if (Date.prototype.getDay === x) { - $ERROR('#1: The Date.prototype.getDay has not the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.16_Date.prototype.getDay/S15.9.5.16_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.16_Date.prototype.getDay/S15.9.5.16_A1_T2.js deleted file mode 100644 index 09664b024..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.16_Date.prototype.getDay/S15.9.5.16_A1_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.16_A1_T2; - * @section: 15.9.5.16; - * @assertion: The Date.prototype property "getDay" has { DontEnum } attributes; - * @description: Checking absence of DontDelete attribute; - */ - -if (delete Date.prototype.getDay === false) { - $ERROR('#1: The Date.prototype.getDay property has not the attributes DontDelete'); -} - -if (Date.prototype.hasOwnProperty('getDay')) { - $FAIL('#2: The Date.prototype.getDay property has not the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.16_Date.prototype.getDay/S15.9.5.16_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.16_Date.prototype.getDay/S15.9.5.16_A1_T3.js deleted file mode 100644 index 51a3b6b8d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.16_Date.prototype.getDay/S15.9.5.16_A1_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.16_A1_T3; - * @section: 15.9.5.16; - * @assertion: The Date.prototype property "getDay" has { DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.propertyIsEnumerable('getDay')) { - $ERROR('#1: The Date.prototype.getDay property has the attribute DontEnum'); -} - -for(x in Date.prototype) { - if(x === "getDay") { - $ERROR('#2: The Date.prototype.getDay has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.16_Date.prototype.getDay/S15.9.5.16_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.16_Date.prototype.getDay/S15.9.5.16_A2_T1.js deleted file mode 100644 index 52de373e6..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.16_Date.prototype.getDay/S15.9.5.16_A2_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.16_A2_T1; - * @section: 15.9.5.16; - * @assertion: The "length" property of the "getDay" is 0; - * @description: The "length" property of the "getDay" is 0; - */ - -if(Date.prototype.getDay.hasOwnProperty("length") !== true){ - $ERROR('#1: The getDay has a "length" property'); -} - -if(Date.prototype.getDay.length !== 0){ - $ERROR('#2: The "length" property of the getDay is 0'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.16_Date.prototype.getDay/S15.9.5.16_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.16_Date.prototype.getDay/S15.9.5.16_A3_T1.js deleted file mode 100644 index 670debaad..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.16_Date.prototype.getDay/S15.9.5.16_A3_T1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.16_A3_T1; - * @section: 15.9.5.16; - * @assertion: The Date.prototype.getDay property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking ReadOnly attribute; - */ - -x = Date.prototype.getDay.length; -Date.prototype.getDay.length = 1; -if (Date.prototype.getDay.length !== x) { - $ERROR('#1: The Date.prototype.getDay.length has the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.16_Date.prototype.getDay/S15.9.5.16_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.16_Date.prototype.getDay/S15.9.5.16_A3_T2.js deleted file mode 100644 index 068a286c9..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.16_Date.prototype.getDay/S15.9.5.16_A3_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.16_A3_T2; - * @section: 15.9.5.16; - * @assertion: The Date.prototype.getDay property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontDelete attribute; - */ - -if (delete Date.prototype.getDay.length !== false) { - $ERROR('#1: The Date.prototype.getDay.length property has the attributes DontDelete'); -} - -if (!Date.prototype.getDay.hasOwnProperty('length')) { - $FAIL('#2: The Date.prototype.getDay.length property has the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.16_Date.prototype.getDay/S15.9.5.16_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.16_Date.prototype.getDay/S15.9.5.16_A3_T3.js deleted file mode 100644 index c8b74fb53..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.16_Date.prototype.getDay/S15.9.5.16_A3_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.16_A3_T3; - * @section: 15.9.5.16; - * @assertion: The Date.prototype.getDay property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.getDay.propertyIsEnumerable('length')) { - $ERROR('#1: The Date.prototype.getDay.length property has the attribute DontEnum'); -} - -for(x in Date.prototype.getDay) { - if(x === "length") { - $ERROR('#2: The Date.prototype.getDay.length has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.17_Date.prototype.getUTCDay/S15.9.5.17_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.17_Date.prototype.getUTCDay/S15.9.5.17_A1_T1.js deleted file mode 100644 index 6013476af..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.17_Date.prototype.getUTCDay/S15.9.5.17_A1_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.17_A1_T1; - * @section: 15.9.5.17; - * @assertion: The Date.prototype property "getUTCDay" has { DontEnum } attributes; - * @description: Checking absence of ReadOnly attribute; - */ - -x = Date.prototype.getUTCDay; -if(x === 1) - Date.prototype.getUTCDay = 2; -else - Date.prototype.getUTCDay = 1; -if (Date.prototype.getUTCDay === x) { - $ERROR('#1: The Date.prototype.getUTCDay has not the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.17_Date.prototype.getUTCDay/S15.9.5.17_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.17_Date.prototype.getUTCDay/S15.9.5.17_A1_T2.js deleted file mode 100644 index 1eb3bfb9a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.17_Date.prototype.getUTCDay/S15.9.5.17_A1_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.17_A1_T2; - * @section: 15.9.5.17; - * @assertion: The Date.prototype property "getUTCDay" has { DontEnum } attributes; - * @description: Checking absence of DontDelete attribute; - */ - -if (delete Date.prototype.getUTCDay === false) { - $ERROR('#1: The Date.prototype.getUTCDay property has not the attributes DontDelete'); -} - -if (Date.prototype.hasOwnProperty('getUTCDay')) { - $FAIL('#2: The Date.prototype.getUTCDay property has not the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.17_Date.prototype.getUTCDay/S15.9.5.17_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.17_Date.prototype.getUTCDay/S15.9.5.17_A1_T3.js deleted file mode 100644 index b7e4164c1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.17_Date.prototype.getUTCDay/S15.9.5.17_A1_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.17_A1_T3; - * @section: 15.9.5.17; - * @assertion: The Date.prototype property "getUTCDay" has { DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.propertyIsEnumerable('getUTCDay')) { - $ERROR('#1: The Date.prototype.getUTCDay property has the attribute DontEnum'); -} - -for(x in Date.prototype) { - if(x === "getUTCDay") { - $ERROR('#2: The Date.prototype.getUTCDay has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.17_Date.prototype.getUTCDay/S15.9.5.17_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.17_Date.prototype.getUTCDay/S15.9.5.17_A2_T1.js deleted file mode 100644 index 18eeb1cd3..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.17_Date.prototype.getUTCDay/S15.9.5.17_A2_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.17_A2_T1; - * @section: 15.9.5.17; - * @assertion: The "length" property of the "getUTCDay" is 0; - * @description: The "length" property of the "getUTCDay" is 0; - */ - -if(Date.prototype.getUTCDay.hasOwnProperty("length") !== true){ - $ERROR('#1: The getUTCDay has a "length" property'); -} - -if(Date.prototype.getUTCDay.length !== 0){ - $ERROR('#2: The "length" property of the getUTCDay is 0'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.17_Date.prototype.getUTCDay/S15.9.5.17_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.17_Date.prototype.getUTCDay/S15.9.5.17_A3_T1.js deleted file mode 100644 index b11957db7..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.17_Date.prototype.getUTCDay/S15.9.5.17_A3_T1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.17_A3_T1; - * @section: 15.9.5.17; - * @assertion: The Date.prototype.getUTCDay property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking ReadOnly attribute; - */ - -x = Date.prototype.getUTCDay.length; -Date.prototype.getUTCDay.length = 1; -if (Date.prototype.getUTCDay.length !== x) { - $ERROR('#1: The Date.prototype.getUTCDay.length has the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.17_Date.prototype.getUTCDay/S15.9.5.17_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.17_Date.prototype.getUTCDay/S15.9.5.17_A3_T2.js deleted file mode 100644 index 5a8ef75b2..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.17_Date.prototype.getUTCDay/S15.9.5.17_A3_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.17_A3_T2; - * @section: 15.9.5.17; - * @assertion: The Date.prototype.getUTCDay property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontDelete attribute; - */ - -if (delete Date.prototype.getUTCDay.length !== false) { - $ERROR('#1: The Date.prototype.getUTCDay.length property has the attributes DontDelete'); -} - -if (!Date.prototype.getUTCDay.hasOwnProperty('length')) { - $FAIL('#2: The Date.prototype.getUTCDay.length property has the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.17_Date.prototype.getUTCDay/S15.9.5.17_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.17_Date.prototype.getUTCDay/S15.9.5.17_A3_T3.js deleted file mode 100644 index 23285e024..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.17_Date.prototype.getUTCDay/S15.9.5.17_A3_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.17_A3_T3; - * @section: 15.9.5.17; - * @assertion: The Date.prototype.getUTCDay property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.getUTCDay.propertyIsEnumerable('length')) { - $ERROR('#1: The Date.prototype.getUTCDay.length property has the attribute DontEnum'); -} - -for(x in Date.prototype.getUTCDay) { - if(x === "length") { - $ERROR('#2: The Date.prototype.getUTCDay.length has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.18_Date.prototype.getHours/S15.9.5.18_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.18_Date.prototype.getHours/S15.9.5.18_A1_T1.js deleted file mode 100644 index 61cb49279..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.18_Date.prototype.getHours/S15.9.5.18_A1_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.18_A1_T1; - * @section: 15.9.5.18; - * @assertion: The Date.prototype property "getHours" has { DontEnum } attributes; - * @description: Checking absence of ReadOnly attribute; - */ - -x = Date.prototype.getHours; -if(x === 1) - Date.prototype.getHours = 2; -else - Date.prototype.getHours = 1; -if (Date.prototype.getHours === x) { - $ERROR('#1: The Date.prototype.getHours has not the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.18_Date.prototype.getHours/S15.9.5.18_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.18_Date.prototype.getHours/S15.9.5.18_A1_T2.js deleted file mode 100644 index 7fa0e360b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.18_Date.prototype.getHours/S15.9.5.18_A1_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.18_A1_T2; - * @section: 15.9.5.18; - * @assertion: The Date.prototype property "getHours" has { DontEnum } attributes; - * @description: Checking absence of DontDelete attribute; - */ - -if (delete Date.prototype.getHours === false) { - $ERROR('#1: The Date.prototype.getHours property has not the attributes DontDelete'); -} - -if (Date.prototype.hasOwnProperty('getHours')) { - $FAIL('#2: The Date.prototype.getHours property has not the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.18_Date.prototype.getHours/S15.9.5.18_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.18_Date.prototype.getHours/S15.9.5.18_A1_T3.js deleted file mode 100644 index f840fa275..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.18_Date.prototype.getHours/S15.9.5.18_A1_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.18_A1_T3; - * @section: 15.9.5.18; - * @assertion: The Date.prototype property "getHours" has { DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.propertyIsEnumerable('getHours')) { - $ERROR('#1: The Date.prototype.getHours property has the attribute DontEnum'); -} - -for(x in Date.prototype) { - if(x === "getHours") { - $ERROR('#2: The Date.prototype.getHours has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.18_Date.prototype.getHours/S15.9.5.18_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.18_Date.prototype.getHours/S15.9.5.18_A2_T1.js deleted file mode 100644 index 7f29a38e5..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.18_Date.prototype.getHours/S15.9.5.18_A2_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.18_A2_T1; - * @section: 15.9.5.18; - * @assertion: The "length" property of the "getHours" is 0; - * @description: The "length" property of the "getHours" is 0; - */ - -if(Date.prototype.getHours.hasOwnProperty("length") !== true){ - $ERROR('#1: The getHours has a "length" property'); -} - -if(Date.prototype.getHours.length !== 0){ - $ERROR('#2: The "length" property of the getHours is 0'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.18_Date.prototype.getHours/S15.9.5.18_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.18_Date.prototype.getHours/S15.9.5.18_A3_T1.js deleted file mode 100644 index 5638f79f8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.18_Date.prototype.getHours/S15.9.5.18_A3_T1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.18_A3_T1; - * @section: 15.9.5.18; - * @assertion: The Date.prototype.getHours property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking ReadOnly attribute; - */ - -x = Date.prototype.getHours.length; -Date.prototype.getHours.length = 1; -if (Date.prototype.getHours.length !== x) { - $ERROR('#1: The Date.prototype.getHours.length has the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.18_Date.prototype.getHours/S15.9.5.18_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.18_Date.prototype.getHours/S15.9.5.18_A3_T2.js deleted file mode 100644 index db4857f23..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.18_Date.prototype.getHours/S15.9.5.18_A3_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.18_A3_T2; - * @section: 15.9.5.18; - * @assertion: The Date.prototype.getHours property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontDelete attribute; - */ - -if (delete Date.prototype.getHours.length !== false) { - $ERROR('#1: The Date.prototype.getHours.length property has the attributes DontDelete'); -} - -if (!Date.prototype.getHours.hasOwnProperty('length')) { - $FAIL('#2: The Date.prototype.getHours.length property has the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.18_Date.prototype.getHours/S15.9.5.18_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.18_Date.prototype.getHours/S15.9.5.18_A3_T3.js deleted file mode 100644 index 35c912829..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.18_Date.prototype.getHours/S15.9.5.18_A3_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.18_A3_T3; - * @section: 15.9.5.18; - * @assertion: The Date.prototype.getHours property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.getHours.propertyIsEnumerable('length')) { - $ERROR('#1: The Date.prototype.getHours.length property has the attribute DontEnum'); -} - -for(x in Date.prototype.getHours) { - if(x === "length") { - $ERROR('#2: The Date.prototype.getHours.length has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.19_Date.prototype.getUTCHours/S15.9.5.19_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.19_Date.prototype.getUTCHours/S15.9.5.19_A1_T1.js deleted file mode 100644 index 425d1ead1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.19_Date.prototype.getUTCHours/S15.9.5.19_A1_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.19_A1_T1; - * @section: 15.9.5.19; - * @assertion: The Date.prototype property "getUTCHours" has { DontEnum } attributes; - * @description: Checking absence of ReadOnly attribute; - */ - -x = Date.prototype.getUTCHours; -if(x === 1) - Date.prototype.getUTCHours = 2; -else - Date.prototype.getUTCHours = 1; -if (Date.prototype.getUTCHours === x) { - $ERROR('#1: The Date.prototype.getUTCHours has not the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.19_Date.prototype.getUTCHours/S15.9.5.19_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.19_Date.prototype.getUTCHours/S15.9.5.19_A1_T2.js deleted file mode 100644 index a99d954e2..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.19_Date.prototype.getUTCHours/S15.9.5.19_A1_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.19_A1_T2; - * @section: 15.9.5.19; - * @assertion: The Date.prototype property "getUTCHours" has { DontEnum } attributes; - * @description: Checking absence of DontDelete attribute; - */ - -if (delete Date.prototype.getUTCHours === false) { - $ERROR('#1: The Date.prototype.getUTCHours property has not the attributes DontDelete'); -} - -if (Date.prototype.hasOwnProperty('getUTCHours')) { - $FAIL('#2: The Date.prototype.getUTCHours property has not the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.19_Date.prototype.getUTCHours/S15.9.5.19_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.19_Date.prototype.getUTCHours/S15.9.5.19_A1_T3.js deleted file mode 100644 index 5cff85138..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.19_Date.prototype.getUTCHours/S15.9.5.19_A1_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.19_A1_T3; - * @section: 15.9.5.19; - * @assertion: The Date.prototype property "getUTCHours" has { DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.propertyIsEnumerable('getUTCHours')) { - $ERROR('#1: The Date.prototype.getUTCHours property has the attribute DontEnum'); -} - -for(x in Date.prototype) { - if(x === "getUTCHours") { - $ERROR('#2: The Date.prototype.getUTCHours has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.19_Date.prototype.getUTCHours/S15.9.5.19_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.19_Date.prototype.getUTCHours/S15.9.5.19_A2_T1.js deleted file mode 100644 index 01e45c440..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.19_Date.prototype.getUTCHours/S15.9.5.19_A2_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.19_A2_T1; - * @section: 15.9.5.19; - * @assertion: The "length" property of the "getUTCHours" is 0; - * @description: The "length" property of the "getUTCHours" is 0; - */ - -if(Date.prototype.getUTCHours.hasOwnProperty("length") !== true){ - $ERROR('#1: The getUTCHours has a "length" property'); -} - -if(Date.prototype.getUTCHours.length !== 0){ - $ERROR('#2: The "length" property of the getUTCHours is 0'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.19_Date.prototype.getUTCHours/S15.9.5.19_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.19_Date.prototype.getUTCHours/S15.9.5.19_A3_T1.js deleted file mode 100644 index 7f6ba1e8d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.19_Date.prototype.getUTCHours/S15.9.5.19_A3_T1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.19_A3_T1; - * @section: 15.9.5.19; - * @assertion: The Date.prototype.getUTCHours property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking ReadOnly attribute; - */ - -x = Date.prototype.getUTCHours.length; -Date.prototype.getUTCHours.length = 1; -if (Date.prototype.getUTCHours.length !== x) { - $ERROR('#1: The Date.prototype.getUTCHours.length has the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.19_Date.prototype.getUTCHours/S15.9.5.19_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.19_Date.prototype.getUTCHours/S15.9.5.19_A3_T2.js deleted file mode 100644 index 3b696a618..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.19_Date.prototype.getUTCHours/S15.9.5.19_A3_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.19_A3_T2; - * @section: 15.9.5.19; - * @assertion: The Date.prototype.getUTCHours property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontDelete attribute; - */ - -if (delete Date.prototype.getUTCHours.length !== false) { - $ERROR('#1: The Date.prototype.getUTCHours.length property has the attributes DontDelete'); -} - -if (!Date.prototype.getUTCHours.hasOwnProperty('length')) { - $FAIL('#2: The Date.prototype.getUTCHours.length property has the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.19_Date.prototype.getUTCHours/S15.9.5.19_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.19_Date.prototype.getUTCHours/S15.9.5.19_A3_T3.js deleted file mode 100644 index 5b862e760..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.19_Date.prototype.getUTCHours/S15.9.5.19_A3_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.19_A3_T3; - * @section: 15.9.5.19; - * @assertion: The Date.prototype.getUTCHours property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.getUTCHours.propertyIsEnumerable('length')) { - $ERROR('#1: The Date.prototype.getUTCHours.length property has the attribute DontEnum'); -} - -for(x in Date.prototype.getUTCHours) { - if(x === "length") { - $ERROR('#2: The Date.prototype.getUTCHours.length has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.1_Date.prototype.constructor/S15.9.5.1_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.1_Date.prototype.constructor/S15.9.5.1_A1_T1.js deleted file mode 100644 index 58c5b3413..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.1_Date.prototype.constructor/S15.9.5.1_A1_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.1_A1_T1; - * @section: 15.9.5.1; - * @assertion: The Date.prototype property "constructor" has { DontEnum } attributes; - * @description: Checking absence of ReadOnly attribute; - */ - -x = Date.prototype.constructor; -if(x === 1) - Date.prototype.constructor = 2; -else - Date.prototype.constructor = 1; -if (Date.prototype.constructor === x) { - $ERROR('#1: The Date.prototype.constructor has not the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.1_Date.prototype.constructor/S15.9.5.1_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.1_Date.prototype.constructor/S15.9.5.1_A1_T2.js deleted file mode 100644 index 1fdf52c67..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.1_Date.prototype.constructor/S15.9.5.1_A1_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.1_A1_T2; - * @section: 15.9.5.1; - * @assertion: The Date.prototype property "constructor" has { DontEnum } attributes; - * @description: Checking absence of DontDelete attribute; - */ - -if (delete Date.prototype.constructor === false) { - $ERROR('#1: The Date.prototype.constructor property has not the attributes DontDelete'); -} - -if (Date.prototype.hasOwnProperty('constructor')) { - $FAIL('#2: The Date.prototype.constructor property has not the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.1_Date.prototype.constructor/S15.9.5.1_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.1_Date.prototype.constructor/S15.9.5.1_A1_T3.js deleted file mode 100644 index bcb7e4607..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.1_Date.prototype.constructor/S15.9.5.1_A1_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.1_A1_T3; - * @section: 15.9.5.1; - * @assertion: The Date.prototype property "constructor" has { DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.propertyIsEnumerable('constructor')) { - $ERROR('#1: The Date.prototype.constructor property has the attribute DontEnum'); -} - -for(x in Date.prototype) { - if(x === "constructor") { - $ERROR('#2: The Date.prototype.constructor has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.1_Date.prototype.constructor/S15.9.5.1_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.1_Date.prototype.constructor/S15.9.5.1_A2_T1.js deleted file mode 100644 index 217f094fd..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.1_Date.prototype.constructor/S15.9.5.1_A2_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.1_A2_T1; - * @section: 15.9.5.1; - * @assertion: The "length" property of the "constructor" is 7; - * @description: The "length" property of the "constructor" is 7; - */ - -if(Date.prototype.constructor.hasOwnProperty("length") !== true){ - $ERROR('#1: The constructor has a "length" property'); -} - -if(Date.prototype.constructor.length !== 7){ - $ERROR('#2: The "length" property of the constructor is 7'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.1_Date.prototype.constructor/S15.9.5.1_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.1_Date.prototype.constructor/S15.9.5.1_A3_T1.js deleted file mode 100644 index ad32d3528..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.1_Date.prototype.constructor/S15.9.5.1_A3_T1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.1_A3_T1; - * @section: 15.9.5.1; - * @assertion: The Date.prototype.constructor property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking ReadOnly attribute; - */ - -x = Date.prototype.constructor.length; -Date.prototype.constructor.length = 1; -if (Date.prototype.constructor.length !== x) { - $ERROR('#1: The Date.prototype.constructor.length has the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.1_Date.prototype.constructor/S15.9.5.1_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.1_Date.prototype.constructor/S15.9.5.1_A3_T2.js deleted file mode 100644 index 159db1f30..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.1_Date.prototype.constructor/S15.9.5.1_A3_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.1_A3_T2; - * @section: 15.9.5.1; - * @assertion: The Date.prototype.constructor property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontDelete attribute; - */ - -if (delete Date.prototype.constructor.length !== false) { - $ERROR('#1: The Date.prototype.constructor.length property has the attributes DontDelete'); -} - -if (!Date.prototype.constructor.hasOwnProperty('length')) { - $FAIL('#2: The Date.prototype.constructor.length property has the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.1_Date.prototype.constructor/S15.9.5.1_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.1_Date.prototype.constructor/S15.9.5.1_A3_T3.js deleted file mode 100644 index 354f5a8ef..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.1_Date.prototype.constructor/S15.9.5.1_A3_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.1_A3_T3; - * @section: 15.9.5.1; - * @assertion: The Date.prototype.constructor property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.constructor.propertyIsEnumerable('length')) { - $ERROR('#1: The Date.prototype.constructor.length property has the attribute DontEnum'); -} - -for(x in Date.prototype.constructor) { - if(x === "length") { - $ERROR('#2: The Date.prototype.constructor.length has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.20_Date.prototype.getMinutes/S15.9.5.20_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.20_Date.prototype.getMinutes/S15.9.5.20_A1_T1.js deleted file mode 100644 index 00aa46862..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.20_Date.prototype.getMinutes/S15.9.5.20_A1_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.20_A1_T1; - * @section: 15.9.5.20; - * @assertion: The Date.prototype property "getMinutes" has { DontEnum } attributes; - * @description: Checking absence of ReadOnly attribute; - */ - -x = Date.prototype.getMinutes; -if(x === 1) - Date.prototype.getMinutes = 2; -else - Date.prototype.getMinutes = 1; -if (Date.prototype.getMinutes === x) { - $ERROR('#1: The Date.prototype.getMinutes has not the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.20_Date.prototype.getMinutes/S15.9.5.20_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.20_Date.prototype.getMinutes/S15.9.5.20_A1_T2.js deleted file mode 100644 index 1e4d74a14..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.20_Date.prototype.getMinutes/S15.9.5.20_A1_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.20_A1_T2; - * @section: 15.9.5.20; - * @assertion: The Date.prototype property "getMinutes" has { DontEnum } attributes; - * @description: Checking absence of DontDelete attribute; - */ - -if (delete Date.prototype.getMinutes === false) { - $ERROR('#1: The Date.prototype.getMinutes property has not the attributes DontDelete'); -} - -if (Date.prototype.hasOwnProperty('getMinutes')) { - $FAIL('#2: The Date.prototype.getMinutes property has not the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.20_Date.prototype.getMinutes/S15.9.5.20_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.20_Date.prototype.getMinutes/S15.9.5.20_A1_T3.js deleted file mode 100644 index f0b359030..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.20_Date.prototype.getMinutes/S15.9.5.20_A1_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.20_A1_T3; - * @section: 15.9.5.20; - * @assertion: The Date.prototype property "getMinutes" has { DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.propertyIsEnumerable('getMinutes')) { - $ERROR('#1: The Date.prototype.getMinutes property has the attribute DontEnum'); -} - -for(x in Date.prototype) { - if(x === "getMinutes") { - $ERROR('#2: The Date.prototype.getMinutes has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.20_Date.prototype.getMinutes/S15.9.5.20_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.20_Date.prototype.getMinutes/S15.9.5.20_A2_T1.js deleted file mode 100644 index 7c1f6f650..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.20_Date.prototype.getMinutes/S15.9.5.20_A2_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.20_A2_T1; - * @section: 15.9.5.20; - * @assertion: The "length" property of the "getMinutes" is 0; - * @description: The "length" property of the "getMinutes" is 0; - */ - -if(Date.prototype.getMinutes.hasOwnProperty("length") !== true){ - $ERROR('#1: The getMinutes has a "length" property'); -} - -if(Date.prototype.getMinutes.length !== 0){ - $ERROR('#2: The "length" property of the getMinutes is 0'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.20_Date.prototype.getMinutes/S15.9.5.20_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.20_Date.prototype.getMinutes/S15.9.5.20_A3_T1.js deleted file mode 100644 index 088e50eda..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.20_Date.prototype.getMinutes/S15.9.5.20_A3_T1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.20_A3_T1; - * @section: 15.9.5.20; - * @assertion: The Date.prototype.getMinutes property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking ReadOnly attribute; - */ - -x = Date.prototype.getMinutes.length; -Date.prototype.getMinutes.length = 1; -if (Date.prototype.getMinutes.length !== x) { - $ERROR('#1: The Date.prototype.getMinutes.length has the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.20_Date.prototype.getMinutes/S15.9.5.20_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.20_Date.prototype.getMinutes/S15.9.5.20_A3_T2.js deleted file mode 100644 index 661809ac4..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.20_Date.prototype.getMinutes/S15.9.5.20_A3_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.20_A3_T2; - * @section: 15.9.5.20; - * @assertion: The Date.prototype.getMinutes property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontDelete attribute; - */ - -if (delete Date.prototype.getMinutes.length !== false) { - $ERROR('#1: The Date.prototype.getMinutes.length property has the attributes DontDelete'); -} - -if (!Date.prototype.getMinutes.hasOwnProperty('length')) { - $FAIL('#2: The Date.prototype.getMinutes.length property has the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.20_Date.prototype.getMinutes/S15.9.5.20_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.20_Date.prototype.getMinutes/S15.9.5.20_A3_T3.js deleted file mode 100644 index fe8e48cc5..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.20_Date.prototype.getMinutes/S15.9.5.20_A3_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.20_A3_T3; - * @section: 15.9.5.20; - * @assertion: The Date.prototype.getMinutes property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.getMinutes.propertyIsEnumerable('length')) { - $ERROR('#1: The Date.prototype.getMinutes.length property has the attribute DontEnum'); -} - -for(x in Date.prototype.getMinutes) { - if(x === "length") { - $ERROR('#2: The Date.prototype.getMinutes.length has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.21_Date.prototype.getUTCMinutes/S15.9.5.21_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.21_Date.prototype.getUTCMinutes/S15.9.5.21_A1_T1.js deleted file mode 100644 index 839c0fbaf..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.21_Date.prototype.getUTCMinutes/S15.9.5.21_A1_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.21_A1_T1; - * @section: 15.9.5.21; - * @assertion: The Date.prototype property "getUTCMinutes" has { DontEnum } attributes; - * @description: Checking absence of ReadOnly attribute; - */ - -x = Date.prototype.getUTCMinutes; -if(x === 1) - Date.prototype.getUTCMinutes = 2; -else - Date.prototype.getUTCMinutes = 1; -if (Date.prototype.getUTCMinutes === x) { - $ERROR('#1: The Date.prototype.getUTCMinutes has not the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.21_Date.prototype.getUTCMinutes/S15.9.5.21_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.21_Date.prototype.getUTCMinutes/S15.9.5.21_A1_T2.js deleted file mode 100644 index 1915f9da4..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.21_Date.prototype.getUTCMinutes/S15.9.5.21_A1_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.21_A1_T2; - * @section: 15.9.5.21; - * @assertion: The Date.prototype property "getUTCMinutes" has { DontEnum } attributes; - * @description: Checking absence of DontDelete attribute; - */ - -if (delete Date.prototype.getUTCMinutes === false) { - $ERROR('#1: The Date.prototype.getUTCMinutes property has not the attributes DontDelete'); -} - -if (Date.prototype.hasOwnProperty('getUTCMinutes')) { - $FAIL('#2: The Date.prototype.getUTCMinutes property has not the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.21_Date.prototype.getUTCMinutes/S15.9.5.21_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.21_Date.prototype.getUTCMinutes/S15.9.5.21_A1_T3.js deleted file mode 100644 index 5734d5028..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.21_Date.prototype.getUTCMinutes/S15.9.5.21_A1_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.21_A1_T3; - * @section: 15.9.5.21; - * @assertion: The Date.prototype property "getUTCMinutes" has { DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.propertyIsEnumerable('getUTCMinutes')) { - $ERROR('#1: The Date.prototype.getUTCMinutes property has the attribute DontEnum'); -} - -for(x in Date.prototype) { - if(x === "getUTCMinutes") { - $ERROR('#2: The Date.prototype.getUTCMinutes has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.21_Date.prototype.getUTCMinutes/S15.9.5.21_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.21_Date.prototype.getUTCMinutes/S15.9.5.21_A2_T1.js deleted file mode 100644 index b83a09d5b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.21_Date.prototype.getUTCMinutes/S15.9.5.21_A2_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.21_A2_T1; - * @section: 15.9.5.21; - * @assertion: The "length" property of the "getUTCMinutes" is 0; - * @description: The "length" property of the "getUTCMinutes" is 0; - */ - -if(Date.prototype.getUTCMinutes.hasOwnProperty("length") !== true){ - $ERROR('#1: The getUTCMinutes has a "length" property'); -} - -if(Date.prototype.getUTCMinutes.length !== 0){ - $ERROR('#2: The "length" property of the getUTCMinutes is 0'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.21_Date.prototype.getUTCMinutes/S15.9.5.21_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.21_Date.prototype.getUTCMinutes/S15.9.5.21_A3_T1.js deleted file mode 100644 index 44556c9a8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.21_Date.prototype.getUTCMinutes/S15.9.5.21_A3_T1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.21_A3_T1; - * @section: 15.9.5.21; - * @assertion: The Date.prototype.getUTCMinutes property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking ReadOnly attribute; - */ - -x = Date.prototype.getUTCMinutes.length; -Date.prototype.getUTCMinutes.length = 1; -if (Date.prototype.getUTCMinutes.length !== x) { - $ERROR('#1: The Date.prototype.getUTCMinutes.length has the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.21_Date.prototype.getUTCMinutes/S15.9.5.21_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.21_Date.prototype.getUTCMinutes/S15.9.5.21_A3_T2.js deleted file mode 100644 index 858e9ca19..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.21_Date.prototype.getUTCMinutes/S15.9.5.21_A3_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.21_A3_T2; - * @section: 15.9.5.21; - * @assertion: The Date.prototype.getUTCMinutes property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontDelete attribute; - */ - -if (delete Date.prototype.getUTCMinutes.length !== false) { - $ERROR('#1: The Date.prototype.getUTCMinutes.length property has the attributes DontDelete'); -} - -if (!Date.prototype.getUTCMinutes.hasOwnProperty('length')) { - $FAIL('#2: The Date.prototype.getUTCMinutes.length property has the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.21_Date.prototype.getUTCMinutes/S15.9.5.21_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.21_Date.prototype.getUTCMinutes/S15.9.5.21_A3_T3.js deleted file mode 100644 index 62c4607bc..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.21_Date.prototype.getUTCMinutes/S15.9.5.21_A3_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.21_A3_T3; - * @section: 15.9.5.21; - * @assertion: The Date.prototype.getUTCMinutes property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.getUTCMinutes.propertyIsEnumerable('length')) { - $ERROR('#1: The Date.prototype.getUTCMinutes.length property has the attribute DontEnum'); -} - -for(x in Date.prototype.getUTCMinutes) { - if(x === "length") { - $ERROR('#2: The Date.prototype.getUTCMinutes.length has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.22_Date.prototype.getSeconds/S15.9.5.22_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.22_Date.prototype.getSeconds/S15.9.5.22_A1_T1.js deleted file mode 100644 index 08540f630..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.22_Date.prototype.getSeconds/S15.9.5.22_A1_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.22_A1_T1; - * @section: 15.9.5.22; - * @assertion: The Date.prototype property "getSeconds" has { DontEnum } attributes; - * @description: Checking absence of ReadOnly attribute; - */ - -x = Date.prototype.getSeconds; -if(x === 1) - Date.prototype.getSeconds = 2; -else - Date.prototype.getSeconds = 1; -if (Date.prototype.getSeconds === x) { - $ERROR('#1: The Date.prototype.getSeconds has not the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.22_Date.prototype.getSeconds/S15.9.5.22_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.22_Date.prototype.getSeconds/S15.9.5.22_A1_T2.js deleted file mode 100644 index 3dacaab68..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.22_Date.prototype.getSeconds/S15.9.5.22_A1_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.22_A1_T2; - * @section: 15.9.5.22; - * @assertion: The Date.prototype property "getSeconds" has { DontEnum } attributes; - * @description: Checking absence of DontDelete attribute; - */ - -if (delete Date.prototype.getSeconds === false) { - $ERROR('#1: The Date.prototype.getSeconds property has not the attributes DontDelete'); -} - -if (Date.prototype.hasOwnProperty('getSeconds')) { - $FAIL('#2: The Date.prototype.getSeconds property has not the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.22_Date.prototype.getSeconds/S15.9.5.22_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.22_Date.prototype.getSeconds/S15.9.5.22_A1_T3.js deleted file mode 100644 index 2e54b3174..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.22_Date.prototype.getSeconds/S15.9.5.22_A1_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.22_A1_T3; - * @section: 15.9.5.22; - * @assertion: The Date.prototype property "getSeconds" has { DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.propertyIsEnumerable('getSeconds')) { - $ERROR('#1: The Date.prototype.getSeconds property has the attribute DontEnum'); -} - -for(x in Date.prototype) { - if(x === "getSeconds") { - $ERROR('#2: The Date.prototype.getSeconds has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.22_Date.prototype.getSeconds/S15.9.5.22_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.22_Date.prototype.getSeconds/S15.9.5.22_A2_T1.js deleted file mode 100644 index 1767bc0b5..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.22_Date.prototype.getSeconds/S15.9.5.22_A2_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.22_A2_T1; - * @section: 15.9.5.22; - * @assertion: The "length" property of the "getSeconds" is 0; - * @description: The "length" property of the "getSeconds" is 0; - */ - -if(Date.prototype.getSeconds.hasOwnProperty("length") !== true){ - $ERROR('#1: The getSeconds has a "length" property'); -} - -if(Date.prototype.getSeconds.length !== 0){ - $ERROR('#2: The "length" property of the getSeconds is 0'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.22_Date.prototype.getSeconds/S15.9.5.22_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.22_Date.prototype.getSeconds/S15.9.5.22_A3_T1.js deleted file mode 100644 index d4e0803e1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.22_Date.prototype.getSeconds/S15.9.5.22_A3_T1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.22_A3_T1; - * @section: 15.9.5.22; - * @assertion: The Date.prototype.getSeconds property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking ReadOnly attribute; - */ - -x = Date.prototype.getSeconds.length; -Date.prototype.getSeconds.length = 1; -if (Date.prototype.getSeconds.length !== x) { - $ERROR('#1: The Date.prototype.getSeconds.length has the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.22_Date.prototype.getSeconds/S15.9.5.22_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.22_Date.prototype.getSeconds/S15.9.5.22_A3_T2.js deleted file mode 100644 index 7a149aad2..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.22_Date.prototype.getSeconds/S15.9.5.22_A3_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.22_A3_T2; - * @section: 15.9.5.22; - * @assertion: The Date.prototype.getSeconds property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontDelete attribute; - */ - -if (delete Date.prototype.getSeconds.length !== false) { - $ERROR('#1: The Date.prototype.getSeconds.length property has the attributes DontDelete'); -} - -if (!Date.prototype.getSeconds.hasOwnProperty('length')) { - $FAIL('#2: The Date.prototype.getSeconds.length property has the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.22_Date.prototype.getSeconds/S15.9.5.22_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.22_Date.prototype.getSeconds/S15.9.5.22_A3_T3.js deleted file mode 100644 index b1f918d2b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.22_Date.prototype.getSeconds/S15.9.5.22_A3_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.22_A3_T3; - * @section: 15.9.5.22; - * @assertion: The Date.prototype.getSeconds property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.getSeconds.propertyIsEnumerable('length')) { - $ERROR('#1: The Date.prototype.getSeconds.length property has the attribute DontEnum'); -} - -for(x in Date.prototype.getSeconds) { - if(x === "length") { - $ERROR('#2: The Date.prototype.getSeconds.length has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.23_Date.prototype.getUTCSeconds/S15.9.5.23_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.23_Date.prototype.getUTCSeconds/S15.9.5.23_A1_T1.js deleted file mode 100644 index f109d931c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.23_Date.prototype.getUTCSeconds/S15.9.5.23_A1_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.23_A1_T1; - * @section: 15.9.5.23; - * @assertion: The Date.prototype property "getUTCSeconds" has { DontEnum } attributes; - * @description: Checking absence of ReadOnly attribute; - */ - -x = Date.prototype.getUTCSeconds; -if(x === 1) - Date.prototype.getUTCSeconds = 2; -else - Date.prototype.getUTCSeconds = 1; -if (Date.prototype.getUTCSeconds === x) { - $ERROR('#1: The Date.prototype.getUTCSeconds has not the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.23_Date.prototype.getUTCSeconds/S15.9.5.23_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.23_Date.prototype.getUTCSeconds/S15.9.5.23_A1_T2.js deleted file mode 100644 index c0afc75fa..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.23_Date.prototype.getUTCSeconds/S15.9.5.23_A1_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.23_A1_T2; - * @section: 15.9.5.23; - * @assertion: The Date.prototype property "getUTCSeconds" has { DontEnum } attributes; - * @description: Checking absence of DontDelete attribute; - */ - -if (delete Date.prototype.getUTCSeconds === false) { - $ERROR('#1: The Date.prototype.getUTCSeconds property has not the attributes DontDelete'); -} - -if (Date.prototype.hasOwnProperty('getUTCSeconds')) { - $FAIL('#2: The Date.prototype.getUTCSeconds property has not the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.23_Date.prototype.getUTCSeconds/S15.9.5.23_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.23_Date.prototype.getUTCSeconds/S15.9.5.23_A1_T3.js deleted file mode 100644 index 232f5052e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.23_Date.prototype.getUTCSeconds/S15.9.5.23_A1_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.23_A1_T3; - * @section: 15.9.5.23; - * @assertion: The Date.prototype property "getUTCSeconds" has { DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.propertyIsEnumerable('getUTCSeconds')) { - $ERROR('#1: The Date.prototype.getUTCSeconds property has the attribute DontEnum'); -} - -for(x in Date.prototype) { - if(x === "getUTCSeconds") { - $ERROR('#2: The Date.prototype.getUTCSeconds has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.23_Date.prototype.getUTCSeconds/S15.9.5.23_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.23_Date.prototype.getUTCSeconds/S15.9.5.23_A2_T1.js deleted file mode 100644 index 499dbecfd..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.23_Date.prototype.getUTCSeconds/S15.9.5.23_A2_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.23_A2_T1; - * @section: 15.9.5.23; - * @assertion: The "length" property of the "getUTCSeconds" is 0; - * @description: The "length" property of the "getUTCSeconds" is 0; - */ - -if(Date.prototype.getUTCSeconds.hasOwnProperty("length") !== true){ - $ERROR('#1: The getUTCSeconds has a "length" property'); -} - -if(Date.prototype.getUTCSeconds.length !== 0){ - $ERROR('#2: The "length" property of the getUTCSeconds is 0'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.23_Date.prototype.getUTCSeconds/S15.9.5.23_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.23_Date.prototype.getUTCSeconds/S15.9.5.23_A3_T1.js deleted file mode 100644 index 48f15d8c4..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.23_Date.prototype.getUTCSeconds/S15.9.5.23_A3_T1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.23_A3_T1; - * @section: 15.9.5.23; - * @assertion: The Date.prototype.getUTCSeconds property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking ReadOnly attribute; - */ - -x = Date.prototype.getUTCSeconds.length; -Date.prototype.getUTCSeconds.length = 1; -if (Date.prototype.getUTCSeconds.length !== x) { - $ERROR('#1: The Date.prototype.getUTCSeconds.length has the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.23_Date.prototype.getUTCSeconds/S15.9.5.23_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.23_Date.prototype.getUTCSeconds/S15.9.5.23_A3_T2.js deleted file mode 100644 index 368ad2720..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.23_Date.prototype.getUTCSeconds/S15.9.5.23_A3_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.23_A3_T2; - * @section: 15.9.5.23; - * @assertion: The Date.prototype.getUTCSeconds property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontDelete attribute; - */ - -if (delete Date.prototype.getUTCSeconds.length !== false) { - $ERROR('#1: The Date.prototype.getUTCSeconds.length property has the attributes DontDelete'); -} - -if (!Date.prototype.getUTCSeconds.hasOwnProperty('length')) { - $FAIL('#2: The Date.prototype.getUTCSeconds.length property has the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.23_Date.prototype.getUTCSeconds/S15.9.5.23_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.23_Date.prototype.getUTCSeconds/S15.9.5.23_A3_T3.js deleted file mode 100644 index c7a174fd8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.23_Date.prototype.getUTCSeconds/S15.9.5.23_A3_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.23_A3_T3; - * @section: 15.9.5.23; - * @assertion: The Date.prototype.getUTCSeconds property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.getUTCSeconds.propertyIsEnumerable('length')) { - $ERROR('#1: The Date.prototype.getUTCSeconds.length property has the attribute DontEnum'); -} - -for(x in Date.prototype.getUTCSeconds) { - if(x === "length") { - $ERROR('#2: The Date.prototype.getUTCSeconds.length has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.24_Date.prototype.getMilliseconds/S15.9.5.24_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.24_Date.prototype.getMilliseconds/S15.9.5.24_A1_T1.js deleted file mode 100644 index f34c19d17..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.24_Date.prototype.getMilliseconds/S15.9.5.24_A1_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.24_A1_T1; - * @section: 15.9.5.24; - * @assertion: The Date.prototype property "getMilliseconds" has { DontEnum } attributes; - * @description: Checking absence of ReadOnly attribute; - */ - -x = Date.prototype.getMilliseconds; -if(x === 1) - Date.prototype.getMilliseconds = 2; -else - Date.prototype.getMilliseconds = 1; -if (Date.prototype.getMilliseconds === x) { - $ERROR('#1: The Date.prototype.getMilliseconds has not the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.24_Date.prototype.getMilliseconds/S15.9.5.24_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.24_Date.prototype.getMilliseconds/S15.9.5.24_A1_T2.js deleted file mode 100644 index f798e3f9a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.24_Date.prototype.getMilliseconds/S15.9.5.24_A1_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.24_A1_T2; - * @section: 15.9.5.24; - * @assertion: The Date.prototype property "getMilliseconds" has { DontEnum } attributes; - * @description: Checking absence of DontDelete attribute; - */ - -if (delete Date.prototype.getMilliseconds === false) { - $ERROR('#1: The Date.prototype.getMilliseconds property has not the attributes DontDelete'); -} - -if (Date.prototype.hasOwnProperty('getMilliseconds')) { - $FAIL('#2: The Date.prototype.getMilliseconds property has not the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.24_Date.prototype.getMilliseconds/S15.9.5.24_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.24_Date.prototype.getMilliseconds/S15.9.5.24_A1_T3.js deleted file mode 100644 index 6089d289a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.24_Date.prototype.getMilliseconds/S15.9.5.24_A1_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.24_A1_T3; - * @section: 15.9.5.24; - * @assertion: The Date.prototype property "getMilliseconds" has { DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.propertyIsEnumerable('getMilliseconds')) { - $ERROR('#1: The Date.prototype.getMilliseconds property has the attribute DontEnum'); -} - -for(x in Date.prototype) { - if(x === "getMilliseconds") { - $ERROR('#2: The Date.prototype.getMilliseconds has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.24_Date.prototype.getMilliseconds/S15.9.5.24_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.24_Date.prototype.getMilliseconds/S15.9.5.24_A2_T1.js deleted file mode 100644 index 2491807d0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.24_Date.prototype.getMilliseconds/S15.9.5.24_A2_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.24_A2_T1; - * @section: 15.9.5.24; - * @assertion: The "length" property of the "getMilliseconds" is 0; - * @description: The "length" property of the "getMilliseconds" is 0; - */ - -if(Date.prototype.getMilliseconds.hasOwnProperty("length") !== true){ - $ERROR('#1: The getMilliseconds has a "length" property'); -} - -if(Date.prototype.getMilliseconds.length !== 0){ - $ERROR('#2: The "length" property of the getMilliseconds is 0'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.24_Date.prototype.getMilliseconds/S15.9.5.24_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.24_Date.prototype.getMilliseconds/S15.9.5.24_A3_T1.js deleted file mode 100644 index 6e17c3d78..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.24_Date.prototype.getMilliseconds/S15.9.5.24_A3_T1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.24_A3_T1; - * @section: 15.9.5.24; - * @assertion: The Date.prototype.getMilliseconds property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking ReadOnly attribute; - */ - -x = Date.prototype.getMilliseconds.length; -Date.prototype.getMilliseconds.length = 1; -if (Date.prototype.getMilliseconds.length !== x) { - $ERROR('#1: The Date.prototype.getMilliseconds.length has the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.24_Date.prototype.getMilliseconds/S15.9.5.24_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.24_Date.prototype.getMilliseconds/S15.9.5.24_A3_T2.js deleted file mode 100644 index 79a154aa7..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.24_Date.prototype.getMilliseconds/S15.9.5.24_A3_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.24_A3_T2; - * @section: 15.9.5.24; - * @assertion: The Date.prototype.getMilliseconds property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontDelete attribute; - */ - -if (delete Date.prototype.getMilliseconds.length !== false) { - $ERROR('#1: The Date.prototype.getMilliseconds.length property has the attributes DontDelete'); -} - -if (!Date.prototype.getMilliseconds.hasOwnProperty('length')) { - $FAIL('#2: The Date.prototype.getMilliseconds.length property has the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.24_Date.prototype.getMilliseconds/S15.9.5.24_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.24_Date.prototype.getMilliseconds/S15.9.5.24_A3_T3.js deleted file mode 100644 index 9c642e41f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.24_Date.prototype.getMilliseconds/S15.9.5.24_A3_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.24_A3_T3; - * @section: 15.9.5.24; - * @assertion: The Date.prototype.getMilliseconds property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.getMilliseconds.propertyIsEnumerable('length')) { - $ERROR('#1: The Date.prototype.getMilliseconds.length property has the attribute DontEnum'); -} - -for(x in Date.prototype.getMilliseconds) { - if(x === "length") { - $ERROR('#2: The Date.prototype.getMilliseconds.length has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.25_Date.prototype.getUTCMilliseconds/S15.9.5.25_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.25_Date.prototype.getUTCMilliseconds/S15.9.5.25_A1_T1.js deleted file mode 100644 index 0ff4a07d5..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.25_Date.prototype.getUTCMilliseconds/S15.9.5.25_A1_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.25_A1_T1; - * @section: 15.9.5.25; - * @assertion: The Date.prototype property "getUTCMilliseconds" has { DontEnum } attributes; - * @description: Checking absence of ReadOnly attribute; - */ - -x = Date.prototype.getUTCMilliseconds; -if(x === 1) - Date.prototype.getUTCMilliseconds = 2; -else - Date.prototype.getUTCMilliseconds = 1; -if (Date.prototype.getUTCMilliseconds === x) { - $ERROR('#1: The Date.prototype.getUTCMilliseconds has not the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.25_Date.prototype.getUTCMilliseconds/S15.9.5.25_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.25_Date.prototype.getUTCMilliseconds/S15.9.5.25_A1_T2.js deleted file mode 100644 index 42323b16f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.25_Date.prototype.getUTCMilliseconds/S15.9.5.25_A1_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.25_A1_T2; - * @section: 15.9.5.25; - * @assertion: The Date.prototype property "getUTCMilliseconds" has { DontEnum } attributes; - * @description: Checking absence of DontDelete attribute; - */ - -if (delete Date.prototype.getUTCMilliseconds === false) { - $ERROR('#1: The Date.prototype.getUTCMilliseconds property has not the attributes DontDelete'); -} - -if (Date.prototype.hasOwnProperty('getUTCMilliseconds')) { - $FAIL('#2: The Date.prototype.getUTCMilliseconds property has not the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.25_Date.prototype.getUTCMilliseconds/S15.9.5.25_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.25_Date.prototype.getUTCMilliseconds/S15.9.5.25_A1_T3.js deleted file mode 100644 index c7c85b30a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.25_Date.prototype.getUTCMilliseconds/S15.9.5.25_A1_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.25_A1_T3; - * @section: 15.9.5.25; - * @assertion: The Date.prototype property "getUTCMilliseconds" has { DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.propertyIsEnumerable('getUTCMilliseconds')) { - $ERROR('#1: The Date.prototype.getUTCMilliseconds property has the attribute DontEnum'); -} - -for(x in Date.prototype) { - if(x === "getUTCMilliseconds") { - $ERROR('#2: The Date.prototype.getUTCMilliseconds has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.25_Date.prototype.getUTCMilliseconds/S15.9.5.25_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.25_Date.prototype.getUTCMilliseconds/S15.9.5.25_A2_T1.js deleted file mode 100644 index 2fcfe552c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.25_Date.prototype.getUTCMilliseconds/S15.9.5.25_A2_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.25_A2_T1; - * @section: 15.9.5.25; - * @assertion: The "length" property of the "getUTCMilliseconds" is 0; - * @description: The "length" property of the "getUTCMilliseconds" is 0; - */ - -if(Date.prototype.getUTCMilliseconds.hasOwnProperty("length") !== true){ - $ERROR('#1: The getUTCMilliseconds has a "length" property'); -} - -if(Date.prototype.getUTCMilliseconds.length !== 0){ - $ERROR('#2: The "length" property of the getUTCMilliseconds is 0'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.25_Date.prototype.getUTCMilliseconds/S15.9.5.25_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.25_Date.prototype.getUTCMilliseconds/S15.9.5.25_A3_T1.js deleted file mode 100644 index 392aa059b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.25_Date.prototype.getUTCMilliseconds/S15.9.5.25_A3_T1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.25_A3_T1; - * @section: 15.9.5.25; - * @assertion: The Date.prototype.getUTCMilliseconds property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking ReadOnly attribute; - */ - -x = Date.prototype.getUTCMilliseconds.length; -Date.prototype.getUTCMilliseconds.length = 1; -if (Date.prototype.getUTCMilliseconds.length !== x) { - $ERROR('#1: The Date.prototype.getUTCMilliseconds.length has the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.25_Date.prototype.getUTCMilliseconds/S15.9.5.25_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.25_Date.prototype.getUTCMilliseconds/S15.9.5.25_A3_T2.js deleted file mode 100644 index abcb8409b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.25_Date.prototype.getUTCMilliseconds/S15.9.5.25_A3_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.25_A3_T2; - * @section: 15.9.5.25; - * @assertion: The Date.prototype.getUTCMilliseconds property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontDelete attribute; - */ - -if (delete Date.prototype.getUTCMilliseconds.length !== false) { - $ERROR('#1: The Date.prototype.getUTCMilliseconds.length property has the attributes DontDelete'); -} - -if (!Date.prototype.getUTCMilliseconds.hasOwnProperty('length')) { - $FAIL('#2: The Date.prototype.getUTCMilliseconds.length property has the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.25_Date.prototype.getUTCMilliseconds/S15.9.5.25_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.25_Date.prototype.getUTCMilliseconds/S15.9.5.25_A3_T3.js deleted file mode 100644 index e9ca37013..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.25_Date.prototype.getUTCMilliseconds/S15.9.5.25_A3_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.25_A3_T3; - * @section: 15.9.5.25; - * @assertion: The Date.prototype.getUTCMilliseconds property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.getUTCMilliseconds.propertyIsEnumerable('length')) { - $ERROR('#1: The Date.prototype.getUTCMilliseconds.length property has the attribute DontEnum'); -} - -for(x in Date.prototype.getUTCMilliseconds) { - if(x === "length") { - $ERROR('#2: The Date.prototype.getUTCMilliseconds.length has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.26_Date.prototype.getTimezoneOffset/S15.9.5.26_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.26_Date.prototype.getTimezoneOffset/S15.9.5.26_A1_T1.js deleted file mode 100644 index ca6671e8d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.26_Date.prototype.getTimezoneOffset/S15.9.5.26_A1_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.26_A1_T1; - * @section: 15.9.5.26; - * @assertion: The Date.prototype property "getTimezoneOffset" has { DontEnum } attributes; - * @description: Checking absence of ReadOnly attribute; - */ - -x = Date.prototype.getTimezoneOffset; -if(x === 1) - Date.prototype.getTimezoneOffset = 2; -else - Date.prototype.getTimezoneOffset = 1; -if (Date.prototype.getTimezoneOffset === x) { - $ERROR('#1: The Date.prototype.getTimezoneOffset has not the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.26_Date.prototype.getTimezoneOffset/S15.9.5.26_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.26_Date.prototype.getTimezoneOffset/S15.9.5.26_A1_T2.js deleted file mode 100644 index 86b733615..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.26_Date.prototype.getTimezoneOffset/S15.9.5.26_A1_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.26_A1_T2; - * @section: 15.9.5.26; - * @assertion: The Date.prototype property "getTimezoneOffset" has { DontEnum } attributes; - * @description: Checking absence of DontDelete attribute; - */ - -if (delete Date.prototype.getTimezoneOffset === false) { - $ERROR('#1: The Date.prototype.getTimezoneOffset property has not the attributes DontDelete'); -} - -if (Date.prototype.hasOwnProperty('getTimezoneOffset')) { - $FAIL('#2: The Date.prototype.getTimezoneOffset property has not the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.26_Date.prototype.getTimezoneOffset/S15.9.5.26_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.26_Date.prototype.getTimezoneOffset/S15.9.5.26_A1_T3.js deleted file mode 100644 index 1f4a2b09e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.26_Date.prototype.getTimezoneOffset/S15.9.5.26_A1_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.26_A1_T3; - * @section: 15.9.5.26; - * @assertion: The Date.prototype property "getTimezoneOffset" has { DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.propertyIsEnumerable('getTimezoneOffset')) { - $ERROR('#1: The Date.prototype.getTimezoneOffset property has the attribute DontEnum'); -} - -for(x in Date.prototype) { - if(x === "getTimezoneOffset") { - $ERROR('#2: The Date.prototype.getTimezoneOffset has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.26_Date.prototype.getTimezoneOffset/S15.9.5.26_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.26_Date.prototype.getTimezoneOffset/S15.9.5.26_A2_T1.js deleted file mode 100644 index 0b6eb82b8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.26_Date.prototype.getTimezoneOffset/S15.9.5.26_A2_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.26_A2_T1; - * @section: 15.9.5.26; - * @assertion: The "length" property of the "getTimezoneOffset" is 0; - * @description: The "length" property of the "getTimezoneOffset" is 0; - */ - -if(Date.prototype.getTimezoneOffset.hasOwnProperty("length") !== true){ - $ERROR('#1: The getTimezoneOffset has a "length" property'); -} - -if(Date.prototype.getTimezoneOffset.length !== 0){ - $ERROR('#2: The "length" property of the getTimezoneOffset is 0'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.26_Date.prototype.getTimezoneOffset/S15.9.5.26_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.26_Date.prototype.getTimezoneOffset/S15.9.5.26_A3_T1.js deleted file mode 100644 index a210a9c92..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.26_Date.prototype.getTimezoneOffset/S15.9.5.26_A3_T1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.26_A3_T1; - * @section: 15.9.5.26; - * @assertion: The Date.prototype.getTimezoneOffset property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking ReadOnly attribute; - */ - -x = Date.prototype.getTimezoneOffset.length; -Date.prototype.getTimezoneOffset.length = 1; -if (Date.prototype.getTimezoneOffset.length !== x) { - $ERROR('#1: The Date.prototype.getTimezoneOffset.length has the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.26_Date.prototype.getTimezoneOffset/S15.9.5.26_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.26_Date.prototype.getTimezoneOffset/S15.9.5.26_A3_T2.js deleted file mode 100644 index 3dae5bbf1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.26_Date.prototype.getTimezoneOffset/S15.9.5.26_A3_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.26_A3_T2; - * @section: 15.9.5.26; - * @assertion: The Date.prototype.getTimezoneOffset property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontDelete attribute; - */ - -if (delete Date.prototype.getTimezoneOffset.length !== false) { - $ERROR('#1: The Date.prototype.getTimezoneOffset.length property has the attributes DontDelete'); -} - -if (!Date.prototype.getTimezoneOffset.hasOwnProperty('length')) { - $FAIL('#2: The Date.prototype.getTimezoneOffset.length property has the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.26_Date.prototype.getTimezoneOffset/S15.9.5.26_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.26_Date.prototype.getTimezoneOffset/S15.9.5.26_A3_T3.js deleted file mode 100644 index eaea7ae78..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.26_Date.prototype.getTimezoneOffset/S15.9.5.26_A3_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.26_A3_T3; - * @section: 15.9.5.26; - * @assertion: The Date.prototype.getTimezoneOffset property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.getTimezoneOffset.propertyIsEnumerable('length')) { - $ERROR('#1: The Date.prototype.getTimezoneOffset.length property has the attribute DontEnum'); -} - -for(x in Date.prototype.getTimezoneOffset) { - if(x === "length") { - $ERROR('#2: The Date.prototype.getTimezoneOffset.length has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.27_Date.prototype.setTime/S15.9.5.27_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.27_Date.prototype.setTime/S15.9.5.27_A1_T1.js deleted file mode 100644 index aac9909b4..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.27_Date.prototype.setTime/S15.9.5.27_A1_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.27_A1_T1; - * @section: 15.9.5.27; - * @assertion: The Date.prototype property "setTime" has { DontEnum } attributes; - * @description: Checking absence of ReadOnly attribute; - */ - -x = Date.prototype.setTime; -if(x === 1) - Date.prototype.setTime = 2; -else - Date.prototype.setTime = 1; -if (Date.prototype.setTime === x) { - $ERROR('#1: The Date.prototype.setTime has not the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.27_Date.prototype.setTime/S15.9.5.27_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.27_Date.prototype.setTime/S15.9.5.27_A1_T2.js deleted file mode 100644 index 9fb1fab48..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.27_Date.prototype.setTime/S15.9.5.27_A1_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.27_A1_T2; - * @section: 15.9.5.27; - * @assertion: The Date.prototype property "setTime" has { DontEnum } attributes; - * @description: Checking absence of DontDelete attribute; - */ - -if (delete Date.prototype.setTime === false) { - $ERROR('#1: The Date.prototype.setTime property has not the attributes DontDelete'); -} - -if (Date.prototype.hasOwnProperty('setTime')) { - $FAIL('#2: The Date.prototype.setTime property has not the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.27_Date.prototype.setTime/S15.9.5.27_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.27_Date.prototype.setTime/S15.9.5.27_A1_T3.js deleted file mode 100644 index 0af218973..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.27_Date.prototype.setTime/S15.9.5.27_A1_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.27_A1_T3; - * @section: 15.9.5.27; - * @assertion: The Date.prototype property "setTime" has { DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.propertyIsEnumerable('setTime')) { - $ERROR('#1: The Date.prototype.setTime property has the attribute DontEnum'); -} - -for(x in Date.prototype) { - if(x === "setTime") { - $ERROR('#2: The Date.prototype.setTime has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.27_Date.prototype.setTime/S15.9.5.27_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.27_Date.prototype.setTime/S15.9.5.27_A2_T1.js deleted file mode 100644 index ec7808fef..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.27_Date.prototype.setTime/S15.9.5.27_A2_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.27_A2_T1; - * @section: 15.9.5.27; - * @assertion: The "length" property of the "setTime" is 1; - * @description: The "length" property of the "setTime" is 1; - */ - -if(Date.prototype.setTime.hasOwnProperty("length") !== true){ - $ERROR('#1: The setTime has a "length" property'); -} - -if(Date.prototype.setTime.length !== 1){ - $ERROR('#2: The "length" property of the setTime is 1'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.27_Date.prototype.setTime/S15.9.5.27_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.27_Date.prototype.setTime/S15.9.5.27_A3_T1.js deleted file mode 100644 index 42c9e9795..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.27_Date.prototype.setTime/S15.9.5.27_A3_T1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.27_A3_T1; - * @section: 15.9.5.27; - * @assertion: The Date.prototype.setTime property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking ReadOnly attribute; - */ - -x = Date.prototype.setTime.length; -Date.prototype.setTime.length = 1; -if (Date.prototype.setTime.length !== x) { - $ERROR('#1: The Date.prototype.setTime.length has the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.27_Date.prototype.setTime/S15.9.5.27_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.27_Date.prototype.setTime/S15.9.5.27_A3_T2.js deleted file mode 100644 index 188563dc8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.27_Date.prototype.setTime/S15.9.5.27_A3_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.27_A3_T2; - * @section: 15.9.5.27; - * @assertion: The Date.prototype.setTime property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontDelete attribute; - */ - -if (delete Date.prototype.setTime.length !== false) { - $ERROR('#1: The Date.prototype.setTime.length property has the attributes DontDelete'); -} - -if (!Date.prototype.setTime.hasOwnProperty('length')) { - $FAIL('#2: The Date.prototype.setTime.length property has the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.27_Date.prototype.setTime/S15.9.5.27_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.27_Date.prototype.setTime/S15.9.5.27_A3_T3.js deleted file mode 100644 index bcb31abeb..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.27_Date.prototype.setTime/S15.9.5.27_A3_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.27_A3_T3; - * @section: 15.9.5.27; - * @assertion: The Date.prototype.setTime property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.setTime.propertyIsEnumerable('length')) { - $ERROR('#1: The Date.prototype.setTime.length property has the attribute DontEnum'); -} - -for(x in Date.prototype.setTime) { - if(x === "length") { - $ERROR('#2: The Date.prototype.setTime.length has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.28_Date.prototype.setMilliseconds/S15.9.5.28_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.28_Date.prototype.setMilliseconds/S15.9.5.28_A1_T1.js deleted file mode 100644 index b8614d44c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.28_Date.prototype.setMilliseconds/S15.9.5.28_A1_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.28_A1_T1; - * @section: 15.9.5.28; - * @assertion: The Date.prototype property "setMilliseconds" has { DontEnum } attributes; - * @description: Checking absence of ReadOnly attribute; - */ - -x = Date.prototype.setMilliseconds; -if(x === 1) - Date.prototype.setMilliseconds = 2; -else - Date.prototype.setMilliseconds = 1; -if (Date.prototype.setMilliseconds === x) { - $ERROR('#1: The Date.prototype.setMilliseconds has not the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.28_Date.prototype.setMilliseconds/S15.9.5.28_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.28_Date.prototype.setMilliseconds/S15.9.5.28_A1_T2.js deleted file mode 100644 index 34ee527d6..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.28_Date.prototype.setMilliseconds/S15.9.5.28_A1_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.28_A1_T2; - * @section: 15.9.5.28; - * @assertion: The Date.prototype property "setMilliseconds" has { DontEnum } attributes; - * @description: Checking absence of DontDelete attribute; - */ - -if (delete Date.prototype.setMilliseconds === false) { - $ERROR('#1: The Date.prototype.setMilliseconds property has not the attributes DontDelete'); -} - -if (Date.prototype.hasOwnProperty('setMilliseconds')) { - $FAIL('#2: The Date.prototype.setMilliseconds property has not the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.28_Date.prototype.setMilliseconds/S15.9.5.28_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.28_Date.prototype.setMilliseconds/S15.9.5.28_A1_T3.js deleted file mode 100644 index be9744ca0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.28_Date.prototype.setMilliseconds/S15.9.5.28_A1_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.28_A1_T3; - * @section: 15.9.5.28; - * @assertion: The Date.prototype property "setMilliseconds" has { DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.propertyIsEnumerable('setMilliseconds')) { - $ERROR('#1: The Date.prototype.setMilliseconds property has the attribute DontEnum'); -} - -for(x in Date.prototype) { - if(x === "setMilliseconds") { - $ERROR('#2: The Date.prototype.setMilliseconds has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.28_Date.prototype.setMilliseconds/S15.9.5.28_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.28_Date.prototype.setMilliseconds/S15.9.5.28_A2_T1.js deleted file mode 100644 index 9808d9d3e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.28_Date.prototype.setMilliseconds/S15.9.5.28_A2_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.28_A2_T1; - * @section: 15.9.5.28; - * @assertion: The "length" property of the "setMilliseconds" is 1; - * @description: The "length" property of the "setMilliseconds" is 1; - */ - -if(Date.prototype.setMilliseconds.hasOwnProperty("length") !== true){ - $ERROR('#1: The setMilliseconds has a "length" property'); -} - -if(Date.prototype.setMilliseconds.length !== 1){ - $ERROR('#2: The "length" property of the setMilliseconds is 1'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.28_Date.prototype.setMilliseconds/S15.9.5.28_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.28_Date.prototype.setMilliseconds/S15.9.5.28_A3_T1.js deleted file mode 100644 index bb05c3521..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.28_Date.prototype.setMilliseconds/S15.9.5.28_A3_T1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.28_A3_T1; - * @section: 15.9.5.28; - * @assertion: The Date.prototype.setMilliseconds property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking ReadOnly attribute; - */ - -x = Date.prototype.setMilliseconds.length; -Date.prototype.setMilliseconds.length = 1; -if (Date.prototype.setMilliseconds.length !== x) { - $ERROR('#1: The Date.prototype.setMilliseconds.length has the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.28_Date.prototype.setMilliseconds/S15.9.5.28_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.28_Date.prototype.setMilliseconds/S15.9.5.28_A3_T2.js deleted file mode 100644 index 78d564f7a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.28_Date.prototype.setMilliseconds/S15.9.5.28_A3_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.28_A3_T2; - * @section: 15.9.5.28; - * @assertion: The Date.prototype.setMilliseconds property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontDelete attribute; - */ - -if (delete Date.prototype.setMilliseconds.length !== false) { - $ERROR('#1: The Date.prototype.setMilliseconds.length property has the attributes DontDelete'); -} - -if (!Date.prototype.setMilliseconds.hasOwnProperty('length')) { - $FAIL('#2: The Date.prototype.setMilliseconds.length property has the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.28_Date.prototype.setMilliseconds/S15.9.5.28_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.28_Date.prototype.setMilliseconds/S15.9.5.28_A3_T3.js deleted file mode 100644 index 35ff99079..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.28_Date.prototype.setMilliseconds/S15.9.5.28_A3_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.28_A3_T3; - * @section: 15.9.5.28; - * @assertion: The Date.prototype.setMilliseconds property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.setMilliseconds.propertyIsEnumerable('length')) { - $ERROR('#1: The Date.prototype.setMilliseconds.length property has the attribute DontEnum'); -} - -for(x in Date.prototype.setMilliseconds) { - if(x === "length") { - $ERROR('#2: The Date.prototype.setMilliseconds.length has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.29_Date.prototype.setUTCMilliseconds/S15.9.5.29_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.29_Date.prototype.setUTCMilliseconds/S15.9.5.29_A1_T1.js deleted file mode 100644 index 7f0f75331..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.29_Date.prototype.setUTCMilliseconds/S15.9.5.29_A1_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.29_A1_T1; - * @section: 15.9.5.29; - * @assertion: The Date.prototype property "setUTCMilliseconds" has { DontEnum } attributes; - * @description: Checking absence of ReadOnly attribute; - */ - -x = Date.prototype.setUTCMilliseconds; -if(x === 1) - Date.prototype.setUTCMilliseconds = 2; -else - Date.prototype.setUTCMilliseconds = 1; -if (Date.prototype.setUTCMilliseconds === x) { - $ERROR('#1: The Date.prototype.setUTCMilliseconds has not the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.29_Date.prototype.setUTCMilliseconds/S15.9.5.29_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.29_Date.prototype.setUTCMilliseconds/S15.9.5.29_A1_T2.js deleted file mode 100644 index 50ba02a8d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.29_Date.prototype.setUTCMilliseconds/S15.9.5.29_A1_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.29_A1_T2; - * @section: 15.9.5.29; - * @assertion: The Date.prototype property "setUTCMilliseconds" has { DontEnum } attributes; - * @description: Checking absence of DontDelete attribute; - */ - -if (delete Date.prototype.setUTCMilliseconds === false) { - $ERROR('#1: The Date.prototype.setUTCMilliseconds property has not the attributes DontDelete'); -} - -if (Date.prototype.hasOwnProperty('setUTCMilliseconds')) { - $FAIL('#2: The Date.prototype.setUTCMilliseconds property has not the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.29_Date.prototype.setUTCMilliseconds/S15.9.5.29_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.29_Date.prototype.setUTCMilliseconds/S15.9.5.29_A1_T3.js deleted file mode 100644 index 5846b5495..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.29_Date.prototype.setUTCMilliseconds/S15.9.5.29_A1_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.29_A1_T3; - * @section: 15.9.5.29; - * @assertion: The Date.prototype property "setUTCMilliseconds" has { DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.propertyIsEnumerable('setUTCMilliseconds')) { - $ERROR('#1: The Date.prototype.setUTCMilliseconds property has the attribute DontEnum'); -} - -for(x in Date.prototype) { - if(x === "setUTCMilliseconds") { - $ERROR('#2: The Date.prototype.setUTCMilliseconds has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.29_Date.prototype.setUTCMilliseconds/S15.9.5.29_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.29_Date.prototype.setUTCMilliseconds/S15.9.5.29_A2_T1.js deleted file mode 100644 index b41644715..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.29_Date.prototype.setUTCMilliseconds/S15.9.5.29_A2_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.29_A2_T1; - * @section: 15.9.5.29; - * @assertion: The "length" property of the "setUTCMilliseconds" is 1; - * @description: The "length" property of the "setUTCMilliseconds" is 1; - */ - -if(Date.prototype.setUTCMilliseconds.hasOwnProperty("length") !== true){ - $ERROR('#1: The setUTCMilliseconds has a "length" property'); -} - -if(Date.prototype.setUTCMilliseconds.length !== 1){ - $ERROR('#2: The "length" property of the setUTCMilliseconds is 1'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.29_Date.prototype.setUTCMilliseconds/S15.9.5.29_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.29_Date.prototype.setUTCMilliseconds/S15.9.5.29_A3_T1.js deleted file mode 100644 index 9d7196675..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.29_Date.prototype.setUTCMilliseconds/S15.9.5.29_A3_T1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.29_A3_T1; - * @section: 15.9.5.29; - * @assertion: The Date.prototype.setUTCMilliseconds property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking ReadOnly attribute; - */ - -x = Date.prototype.setUTCMilliseconds.length; -Date.prototype.setUTCMilliseconds.length = 1; -if (Date.prototype.setUTCMilliseconds.length !== x) { - $ERROR('#1: The Date.prototype.setUTCMilliseconds.length has the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.29_Date.prototype.setUTCMilliseconds/S15.9.5.29_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.29_Date.prototype.setUTCMilliseconds/S15.9.5.29_A3_T2.js deleted file mode 100644 index 584073248..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.29_Date.prototype.setUTCMilliseconds/S15.9.5.29_A3_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.29_A3_T2; - * @section: 15.9.5.29; - * @assertion: The Date.prototype.setUTCMilliseconds property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontDelete attribute; - */ - -if (delete Date.prototype.setUTCMilliseconds.length !== false) { - $ERROR('#1: The Date.prototype.setUTCMilliseconds.length property has the attributes DontDelete'); -} - -if (!Date.prototype.setUTCMilliseconds.hasOwnProperty('length')) { - $FAIL('#2: The Date.prototype.setUTCMilliseconds.length property has the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.29_Date.prototype.setUTCMilliseconds/S15.9.5.29_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.29_Date.prototype.setUTCMilliseconds/S15.9.5.29_A3_T3.js deleted file mode 100644 index 69479f68a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.29_Date.prototype.setUTCMilliseconds/S15.9.5.29_A3_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.29_A3_T3; - * @section: 15.9.5.29; - * @assertion: The Date.prototype.setUTCMilliseconds property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.setUTCMilliseconds.propertyIsEnumerable('length')) { - $ERROR('#1: The Date.prototype.setUTCMilliseconds.length property has the attribute DontEnum'); -} - -for(x in Date.prototype.setUTCMilliseconds) { - if(x === "length") { - $ERROR('#2: The Date.prototype.setUTCMilliseconds.length has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.2_Date.prototype.toString/S15.9.5.2_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.2_Date.prototype.toString/S15.9.5.2_A1_T1.js deleted file mode 100644 index 3041fd26d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.2_Date.prototype.toString/S15.9.5.2_A1_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.2_A1_T1; - * @section: 15.9.5.2; - * @assertion: The Date.prototype property "toString" has { DontEnum } attributes; - * @description: Checking absence of ReadOnly attribute; - */ - -x = Date.prototype.toString; -if(x === 1) - Date.prototype.toString = 2; -else - Date.prototype.toString = 1; -if (Date.prototype.toString === x) { - $ERROR('#1: The Date.prototype.toString has not the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.2_Date.prototype.toString/S15.9.5.2_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.2_Date.prototype.toString/S15.9.5.2_A1_T2.js deleted file mode 100644 index d0a0e2557..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.2_Date.prototype.toString/S15.9.5.2_A1_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.2_A1_T2; - * @section: 15.9.5.2; - * @assertion: The Date.prototype property "toString" has { DontEnum } attributes; - * @description: Checking absence of DontDelete attribute; - */ - -if (delete Date.prototype.toString === false) { - $ERROR('#1: The Date.prototype.toString property has not the attributes DontDelete'); -} - -if (Date.prototype.hasOwnProperty('toString')) { - $FAIL('#2: The Date.prototype.toString property has not the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.2_Date.prototype.toString/S15.9.5.2_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.2_Date.prototype.toString/S15.9.5.2_A1_T3.js deleted file mode 100644 index 873c101a2..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.2_Date.prototype.toString/S15.9.5.2_A1_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.2_A1_T3; - * @section: 15.9.5.2; - * @assertion: The Date.prototype property "toString" has { DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.propertyIsEnumerable('toString')) { - $ERROR('#1: The Date.prototype.toString property has the attribute DontEnum'); -} - -for(x in Date.prototype) { - if(x === "toString") { - $ERROR('#2: The Date.prototype.toString has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.2_Date.prototype.toString/S15.9.5.2_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.2_Date.prototype.toString/S15.9.5.2_A2_T1.js deleted file mode 100644 index 3fb4ee981..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.2_Date.prototype.toString/S15.9.5.2_A2_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.2_A2_T1; - * @section: 15.9.5.2; - * @assertion: The "length" property of the "toString" is 0; - * @description: The "length" property of the "toString" is 0; - */ - -if(Date.prototype.toString.hasOwnProperty("length") !== true){ - $ERROR('#1: The toString has a "length" property'); -} - -if(Date.prototype.toString.length !== 0){ - $ERROR('#2: The "length" property of the toString is 0'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.2_Date.prototype.toString/S15.9.5.2_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.2_Date.prototype.toString/S15.9.5.2_A3_T1.js deleted file mode 100644 index 58c0da63b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.2_Date.prototype.toString/S15.9.5.2_A3_T1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.2_A3_T1; - * @section: 15.9.5.2; - * @assertion: The Date.prototype.toString property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking ReadOnly attribute; - */ - -x = Date.prototype.toString.length; -Date.prototype.toString.length = 1; -if (Date.prototype.toString.length !== x) { - $ERROR('#1: The Date.prototype.toString.length has the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.2_Date.prototype.toString/S15.9.5.2_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.2_Date.prototype.toString/S15.9.5.2_A3_T2.js deleted file mode 100644 index d32898cb2..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.2_Date.prototype.toString/S15.9.5.2_A3_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.2_A3_T2; - * @section: 15.9.5.2; - * @assertion: The Date.prototype.toString property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontDelete attribute; - */ - -if (delete Date.prototype.toString.length !== false) { - $ERROR('#1: The Date.prototype.toString.length property has the attributes DontDelete'); -} - -if (!Date.prototype.toString.hasOwnProperty('length')) { - $FAIL('#2: The Date.prototype.toString.length property has the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.2_Date.prototype.toString/S15.9.5.2_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.2_Date.prototype.toString/S15.9.5.2_A3_T3.js deleted file mode 100644 index 0a7b42332..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.2_Date.prototype.toString/S15.9.5.2_A3_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.2_A3_T3; - * @section: 15.9.5.2; - * @assertion: The Date.prototype.toString property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.toString.propertyIsEnumerable('length')) { - $ERROR('#1: The Date.prototype.toString.length property has the attribute DontEnum'); -} - -for(x in Date.prototype.toString) { - if(x === "length") { - $ERROR('#2: The Date.prototype.toString.length has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.30_Date.prototype.setSeconds/S15.9.5.30_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.30_Date.prototype.setSeconds/S15.9.5.30_A1_T1.js deleted file mode 100644 index e9715fe23..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.30_Date.prototype.setSeconds/S15.9.5.30_A1_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.30_A1_T1; - * @section: 15.9.5.30; - * @assertion: The Date.prototype property "setSeconds" has { DontEnum } attributes; - * @description: Checking absence of ReadOnly attribute; - */ - -x = Date.prototype.setSeconds; -if(x === 1) - Date.prototype.setSeconds = 2; -else - Date.prototype.setSeconds = 1; -if (Date.prototype.setSeconds === x) { - $ERROR('#1: The Date.prototype.setSeconds has not the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.30_Date.prototype.setSeconds/S15.9.5.30_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.30_Date.prototype.setSeconds/S15.9.5.30_A1_T2.js deleted file mode 100644 index 2d298a6b2..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.30_Date.prototype.setSeconds/S15.9.5.30_A1_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.30_A1_T2; - * @section: 15.9.5.30; - * @assertion: The Date.prototype property "setSeconds" has { DontEnum } attributes; - * @description: Checking absence of DontDelete attribute; - */ - -if (delete Date.prototype.setSeconds === false) { - $ERROR('#1: The Date.prototype.setSeconds property has not the attributes DontDelete'); -} - -if (Date.prototype.hasOwnProperty('setSeconds')) { - $FAIL('#2: The Date.prototype.setSeconds property has not the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.30_Date.prototype.setSeconds/S15.9.5.30_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.30_Date.prototype.setSeconds/S15.9.5.30_A1_T3.js deleted file mode 100644 index c4c80f344..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.30_Date.prototype.setSeconds/S15.9.5.30_A1_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.30_A1_T3; - * @section: 15.9.5.30; - * @assertion: The Date.prototype property "setSeconds" has { DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.propertyIsEnumerable('setSeconds')) { - $ERROR('#1: The Date.prototype.setSeconds property has the attribute DontEnum'); -} - -for(x in Date.prototype) { - if(x === "setSeconds") { - $ERROR('#2: The Date.prototype.setSeconds has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.30_Date.prototype.setSeconds/S15.9.5.30_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.30_Date.prototype.setSeconds/S15.9.5.30_A2_T1.js deleted file mode 100644 index f8346acbe..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.30_Date.prototype.setSeconds/S15.9.5.30_A2_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.30_A2_T1; - * @section: 15.9.5.30; - * @assertion: The "length" property of the "setSeconds" is 2; - * @description: The "length" property of the "setSeconds" is 2; - */ - -if(Date.prototype.setSeconds.hasOwnProperty("length") !== true){ - $ERROR('#1: The setSeconds has a "length" property'); -} - -if(Date.prototype.setSeconds.length !== 2){ - $ERROR('#2: The "length" property of the setSeconds is 2'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.30_Date.prototype.setSeconds/S15.9.5.30_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.30_Date.prototype.setSeconds/S15.9.5.30_A3_T1.js deleted file mode 100644 index fa307330d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.30_Date.prototype.setSeconds/S15.9.5.30_A3_T1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.30_A3_T1; - * @section: 15.9.5.30; - * @assertion: The Date.prototype.setSeconds property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking ReadOnly attribute; - */ - -x = Date.prototype.setSeconds.length; -Date.prototype.setSeconds.length = 1; -if (Date.prototype.setSeconds.length !== x) { - $ERROR('#1: The Date.prototype.setSeconds.length has the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.30_Date.prototype.setSeconds/S15.9.5.30_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.30_Date.prototype.setSeconds/S15.9.5.30_A3_T2.js deleted file mode 100644 index e5a6338ff..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.30_Date.prototype.setSeconds/S15.9.5.30_A3_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.30_A3_T2; - * @section: 15.9.5.30; - * @assertion: The Date.prototype.setSeconds property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontDelete attribute; - */ - -if (delete Date.prototype.setSeconds.length !== false) { - $ERROR('#1: The Date.prototype.setSeconds.length property has the attributes DontDelete'); -} - -if (!Date.prototype.setSeconds.hasOwnProperty('length')) { - $FAIL('#2: The Date.prototype.setSeconds.length property has the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.30_Date.prototype.setSeconds/S15.9.5.30_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.30_Date.prototype.setSeconds/S15.9.5.30_A3_T3.js deleted file mode 100644 index 25d7bb30c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.30_Date.prototype.setSeconds/S15.9.5.30_A3_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.30_A3_T3; - * @section: 15.9.5.30; - * @assertion: The Date.prototype.setSeconds property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.setSeconds.propertyIsEnumerable('length')) { - $ERROR('#1: The Date.prototype.setSeconds.length property has the attribute DontEnum'); -} - -for(x in Date.prototype.setSeconds) { - if(x === "length") { - $ERROR('#2: The Date.prototype.setSeconds.length has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.31_Date.prototype.setUTCSeconds/S15.9.5.31_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.31_Date.prototype.setUTCSeconds/S15.9.5.31_A1_T1.js deleted file mode 100644 index 54a74aafd..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.31_Date.prototype.setUTCSeconds/S15.9.5.31_A1_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.31_A1_T1; - * @section: 15.9.5.31; - * @assertion: The Date.prototype property "setUTCSeconds" has { DontEnum } attributes; - * @description: Checking absence of ReadOnly attribute; - */ - -x = Date.prototype.setUTCSeconds; -if(x === 1) - Date.prototype.setUTCSeconds = 2; -else - Date.prototype.setUTCSeconds = 1; -if (Date.prototype.setUTCSeconds === x) { - $ERROR('#1: The Date.prototype.setUTCSeconds has not the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.31_Date.prototype.setUTCSeconds/S15.9.5.31_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.31_Date.prototype.setUTCSeconds/S15.9.5.31_A1_T2.js deleted file mode 100644 index 77e4b1efb..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.31_Date.prototype.setUTCSeconds/S15.9.5.31_A1_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.31_A1_T2; - * @section: 15.9.5.31; - * @assertion: The Date.prototype property "setUTCSeconds" has { DontEnum } attributes; - * @description: Checking absence of DontDelete attribute; - */ - -if (delete Date.prototype.setUTCSeconds === false) { - $ERROR('#1: The Date.prototype.setUTCSeconds property has not the attributes DontDelete'); -} - -if (Date.prototype.hasOwnProperty('setUTCSeconds')) { - $FAIL('#2: The Date.prototype.setUTCSeconds property has not the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.31_Date.prototype.setUTCSeconds/S15.9.5.31_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.31_Date.prototype.setUTCSeconds/S15.9.5.31_A1_T3.js deleted file mode 100644 index d3418cee1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.31_Date.prototype.setUTCSeconds/S15.9.5.31_A1_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.31_A1_T3; - * @section: 15.9.5.31; - * @assertion: The Date.prototype property "setUTCSeconds" has { DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.propertyIsEnumerable('setUTCSeconds')) { - $ERROR('#1: The Date.prototype.setUTCSeconds property has the attribute DontEnum'); -} - -for(x in Date.prototype) { - if(x === "setUTCSeconds") { - $ERROR('#2: The Date.prototype.setUTCSeconds has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.31_Date.prototype.setUTCSeconds/S15.9.5.31_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.31_Date.prototype.setUTCSeconds/S15.9.5.31_A2_T1.js deleted file mode 100644 index b0ecfe7b2..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.31_Date.prototype.setUTCSeconds/S15.9.5.31_A2_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.31_A2_T1; - * @section: 15.9.5.31; - * @assertion: The "length" property of the "setUTCSeconds" is 2; - * @description: The "length" property of the "setUTCSeconds" is 2; - */ - -if(Date.prototype.setUTCSeconds.hasOwnProperty("length") !== true){ - $ERROR('#1: The setUTCSeconds has a "length" property'); -} - -if(Date.prototype.setUTCSeconds.length !== 2){ - $ERROR('#2: The "length" property of the setUTCSeconds is 2'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.31_Date.prototype.setUTCSeconds/S15.9.5.31_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.31_Date.prototype.setUTCSeconds/S15.9.5.31_A3_T1.js deleted file mode 100644 index 02dd13936..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.31_Date.prototype.setUTCSeconds/S15.9.5.31_A3_T1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.31_A3_T1; - * @section: 15.9.5.31; - * @assertion: The Date.prototype.setUTCSeconds property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking ReadOnly attribute; - */ - -x = Date.prototype.setUTCSeconds.length; -Date.prototype.setUTCSeconds.length = 1; -if (Date.prototype.setUTCSeconds.length !== x) { - $ERROR('#1: The Date.prototype.setUTCSeconds.length has the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.31_Date.prototype.setUTCSeconds/S15.9.5.31_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.31_Date.prototype.setUTCSeconds/S15.9.5.31_A3_T2.js deleted file mode 100644 index ab1124321..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.31_Date.prototype.setUTCSeconds/S15.9.5.31_A3_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.31_A3_T2; - * @section: 15.9.5.31; - * @assertion: The Date.prototype.setUTCSeconds property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontDelete attribute; - */ - -if (delete Date.prototype.setUTCSeconds.length !== false) { - $ERROR('#1: The Date.prototype.setUTCSeconds.length property has the attributes DontDelete'); -} - -if (!Date.prototype.setUTCSeconds.hasOwnProperty('length')) { - $FAIL('#2: The Date.prototype.setUTCSeconds.length property has the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.31_Date.prototype.setUTCSeconds/S15.9.5.31_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.31_Date.prototype.setUTCSeconds/S15.9.5.31_A3_T3.js deleted file mode 100644 index dc704cad6..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.31_Date.prototype.setUTCSeconds/S15.9.5.31_A3_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.31_A3_T3; - * @section: 15.9.5.31; - * @assertion: The Date.prototype.setUTCSeconds property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.setUTCSeconds.propertyIsEnumerable('length')) { - $ERROR('#1: The Date.prototype.setUTCSeconds.length property has the attribute DontEnum'); -} - -for(x in Date.prototype.setUTCSeconds) { - if(x === "length") { - $ERROR('#2: The Date.prototype.setUTCSeconds.length has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.32_Date.prototype.setMinutes/S15.9.5.32_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.32_Date.prototype.setMinutes/S15.9.5.32_A1_T1.js deleted file mode 100644 index 65544c05a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.32_Date.prototype.setMinutes/S15.9.5.32_A1_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.32_A1_T1; - * @section: 15.9.5.32; - * @assertion: The Date.prototype property "setMinutes" has { DontEnum } attributes; - * @description: Checking absence of ReadOnly attribute; - */ - -x = Date.prototype.setMinutes; -if(x === 1) - Date.prototype.setMinutes = 2; -else - Date.prototype.setMinutes = 1; -if (Date.prototype.setMinutes === x) { - $ERROR('#1: The Date.prototype.setMinutes has not the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.32_Date.prototype.setMinutes/S15.9.5.32_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.32_Date.prototype.setMinutes/S15.9.5.32_A1_T2.js deleted file mode 100644 index 47b9da016..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.32_Date.prototype.setMinutes/S15.9.5.32_A1_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.32_A1_T2; - * @section: 15.9.5.32; - * @assertion: The Date.prototype property "setMinutes" has { DontEnum } attributes; - * @description: Checking absence of DontDelete attribute; - */ - -if (delete Date.prototype.setMinutes === false) { - $ERROR('#1: The Date.prototype.setMinutes property has not the attributes DontDelete'); -} - -if (Date.prototype.hasOwnProperty('setMinutes')) { - $FAIL('#2: The Date.prototype.setMinutes property has not the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.32_Date.prototype.setMinutes/S15.9.5.32_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.32_Date.prototype.setMinutes/S15.9.5.32_A1_T3.js deleted file mode 100644 index 337842586..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.32_Date.prototype.setMinutes/S15.9.5.32_A1_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.32_A1_T3; - * @section: 15.9.5.32; - * @assertion: The Date.prototype property "setMinutes" has { DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.propertyIsEnumerable('setMinutes')) { - $ERROR('#1: The Date.prototype.setMinutes property has the attribute DontEnum'); -} - -for(x in Date.prototype) { - if(x === "setMinutes") { - $ERROR('#2: The Date.prototype.setMinutes has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.32_Date.prototype.setMinutes/S15.9.5.32_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.32_Date.prototype.setMinutes/S15.9.5.32_A2_T1.js deleted file mode 100644 index 9175dba46..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.32_Date.prototype.setMinutes/S15.9.5.32_A2_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.32_A2_T1; - * @section: 15.9.5.32; - * @assertion: The "length" property of the "setMinutes" is 3; - * @description: The "length" property of the "setMinutes" is 3; - */ - -if(Date.prototype.setMinutes.hasOwnProperty("length") !== true){ - $ERROR('#1: The setMinutes has a "length" property'); -} - -if(Date.prototype.setMinutes.length !== 3){ - $ERROR('#2: The "length" property of the setMinutes is 3'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.32_Date.prototype.setMinutes/S15.9.5.32_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.32_Date.prototype.setMinutes/S15.9.5.32_A3_T1.js deleted file mode 100644 index 2f97aebbe..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.32_Date.prototype.setMinutes/S15.9.5.32_A3_T1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.32_A3_T1; - * @section: 15.9.5.32; - * @assertion: The Date.prototype.setMinutes property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking ReadOnly attribute; - */ - -x = Date.prototype.setMinutes.length; -Date.prototype.setMinutes.length = 1; -if (Date.prototype.setMinutes.length !== x) { - $ERROR('#1: The Date.prototype.setMinutes.length has the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.32_Date.prototype.setMinutes/S15.9.5.32_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.32_Date.prototype.setMinutes/S15.9.5.32_A3_T2.js deleted file mode 100644 index d9edae225..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.32_Date.prototype.setMinutes/S15.9.5.32_A3_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.32_A3_T2; - * @section: 15.9.5.32; - * @assertion: The Date.prototype.setMinutes property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontDelete attribute; - */ - -if (delete Date.prototype.setMinutes.length !== false) { - $ERROR('#1: The Date.prototype.setMinutes.length property has the attributes DontDelete'); -} - -if (!Date.prototype.setMinutes.hasOwnProperty('length')) { - $FAIL('#2: The Date.prototype.setMinutes.length property has the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.32_Date.prototype.setMinutes/S15.9.5.32_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.32_Date.prototype.setMinutes/S15.9.5.32_A3_T3.js deleted file mode 100644 index f964ef410..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.32_Date.prototype.setMinutes/S15.9.5.32_A3_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.32_A3_T3; - * @section: 15.9.5.32; - * @assertion: The Date.prototype.setMinutes property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.setMinutes.propertyIsEnumerable('length')) { - $ERROR('#1: The Date.prototype.setMinutes.length property has the attribute DontEnum'); -} - -for(x in Date.prototype.setMinutes) { - if(x === "length") { - $ERROR('#2: The Date.prototype.setMinutes.length has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.33_Date.prototype.setUTCMinutes/S15.9.5.33_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.33_Date.prototype.setUTCMinutes/S15.9.5.33_A1_T1.js deleted file mode 100644 index 1678fecc2..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.33_Date.prototype.setUTCMinutes/S15.9.5.33_A1_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.33_A1_T1; - * @section: 15.9.5.33; - * @assertion: The Date.prototype property "setUTCMinutes" has { DontEnum } attributes; - * @description: Checking absence of ReadOnly attribute; - */ - -x = Date.prototype.setUTCMinutes; -if(x === 1) - Date.prototype.setUTCMinutes = 2; -else - Date.prototype.setUTCMinutes = 1; -if (Date.prototype.setUTCMinutes === x) { - $ERROR('#1: The Date.prototype.setUTCMinutes has not the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.33_Date.prototype.setUTCMinutes/S15.9.5.33_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.33_Date.prototype.setUTCMinutes/S15.9.5.33_A1_T2.js deleted file mode 100644 index c47039302..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.33_Date.prototype.setUTCMinutes/S15.9.5.33_A1_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.33_A1_T2; - * @section: 15.9.5.33; - * @assertion: The Date.prototype property "setUTCMinutes" has { DontEnum } attributes; - * @description: Checking absence of DontDelete attribute; - */ - -if (delete Date.prototype.setUTCMinutes === false) { - $ERROR('#1: The Date.prototype.setUTCMinutes property has not the attributes DontDelete'); -} - -if (Date.prototype.hasOwnProperty('setUTCMinutes')) { - $FAIL('#2: The Date.prototype.setUTCMinutes property has not the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.33_Date.prototype.setUTCMinutes/S15.9.5.33_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.33_Date.prototype.setUTCMinutes/S15.9.5.33_A1_T3.js deleted file mode 100644 index 52bbab9e2..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.33_Date.prototype.setUTCMinutes/S15.9.5.33_A1_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.33_A1_T3; - * @section: 15.9.5.33; - * @assertion: The Date.prototype property "setUTCMinutes" has { DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.propertyIsEnumerable('setUTCMinutes')) { - $ERROR('#1: The Date.prototype.setUTCMinutes property has the attribute DontEnum'); -} - -for(x in Date.prototype) { - if(x === "setUTCMinutes") { - $ERROR('#2: The Date.prototype.setUTCMinutes has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.33_Date.prototype.setUTCMinutes/S15.9.5.33_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.33_Date.prototype.setUTCMinutes/S15.9.5.33_A2_T1.js deleted file mode 100644 index 0ce4a304e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.33_Date.prototype.setUTCMinutes/S15.9.5.33_A2_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.33_A2_T1; - * @section: 15.9.5.33; - * @assertion: The "length" property of the "setUTCMinutes" is 3; - * @description: The "length" property of the "setUTCMinutes" is 3; - */ - -if(Date.prototype.setUTCMinutes.hasOwnProperty("length") !== true){ - $ERROR('#1: The setUTCMinutes has a "length" property'); -} - -if(Date.prototype.setUTCMinutes.length !== 3){ - $ERROR('#2: The "length" property of the setUTCMinutes is 3'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.33_Date.prototype.setUTCMinutes/S15.9.5.33_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.33_Date.prototype.setUTCMinutes/S15.9.5.33_A3_T1.js deleted file mode 100644 index 4eb21d891..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.33_Date.prototype.setUTCMinutes/S15.9.5.33_A3_T1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.33_A3_T1; - * @section: 15.9.5.33; - * @assertion: The Date.prototype.setUTCMinutes property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking ReadOnly attribute; - */ - -x = Date.prototype.setUTCMinutes.length; -Date.prototype.setUTCMinutes.length = 1; -if (Date.prototype.setUTCMinutes.length !== x) { - $ERROR('#1: The Date.prototype.setUTCMinutes.length has the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.33_Date.prototype.setUTCMinutes/S15.9.5.33_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.33_Date.prototype.setUTCMinutes/S15.9.5.33_A3_T2.js deleted file mode 100644 index 6b0773e8c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.33_Date.prototype.setUTCMinutes/S15.9.5.33_A3_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.33_A3_T2; - * @section: 15.9.5.33; - * @assertion: The Date.prototype.setUTCMinutes property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontDelete attribute; - */ - -if (delete Date.prototype.setUTCMinutes.length !== false) { - $ERROR('#1: The Date.prototype.setUTCMinutes.length property has the attributes DontDelete'); -} - -if (!Date.prototype.setUTCMinutes.hasOwnProperty('length')) { - $FAIL('#2: The Date.prototype.setUTCMinutes.length property has the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.33_Date.prototype.setUTCMinutes/S15.9.5.33_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.33_Date.prototype.setUTCMinutes/S15.9.5.33_A3_T3.js deleted file mode 100644 index 63d03ba52..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.33_Date.prototype.setUTCMinutes/S15.9.5.33_A3_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.33_A3_T3; - * @section: 15.9.5.33; - * @assertion: The Date.prototype.setUTCMinutes property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.setUTCMinutes.propertyIsEnumerable('length')) { - $ERROR('#1: The Date.prototype.setUTCMinutes.length property has the attribute DontEnum'); -} - -for(x in Date.prototype.setUTCMinutes) { - if(x === "length") { - $ERROR('#2: The Date.prototype.setUTCMinutes.length has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.34_Date.prototype.setHours/S15.9.5.34_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.34_Date.prototype.setHours/S15.9.5.34_A1_T1.js deleted file mode 100644 index c3b6197b3..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.34_Date.prototype.setHours/S15.9.5.34_A1_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.34_A1_T1; - * @section: 15.9.5.34; - * @assertion: The Date.prototype property "setHours" has { DontEnum } attributes; - * @description: Checking absence of ReadOnly attribute; - */ - -x = Date.prototype.setHours; -if(x === 1) - Date.prototype.setHours = 2; -else - Date.prototype.setHours = 1; -if (Date.prototype.setHours === x) { - $ERROR('#1: The Date.prototype.setHours has not the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.34_Date.prototype.setHours/S15.9.5.34_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.34_Date.prototype.setHours/S15.9.5.34_A1_T2.js deleted file mode 100644 index 97ac3989b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.34_Date.prototype.setHours/S15.9.5.34_A1_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.34_A1_T2; - * @section: 15.9.5.34; - * @assertion: The Date.prototype property "setHours" has { DontEnum } attributes; - * @description: Checking absence of DontDelete attribute; - */ - -if (delete Date.prototype.setHours === false) { - $ERROR('#1: The Date.prototype.setHours property has not the attributes DontDelete'); -} - -if (Date.prototype.hasOwnProperty('setHours')) { - $FAIL('#2: The Date.prototype.setHours property has not the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.34_Date.prototype.setHours/S15.9.5.34_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.34_Date.prototype.setHours/S15.9.5.34_A1_T3.js deleted file mode 100644 index 441bf9a6e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.34_Date.prototype.setHours/S15.9.5.34_A1_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.34_A1_T3; - * @section: 15.9.5.34; - * @assertion: The Date.prototype property "setHours" has { DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.propertyIsEnumerable('setHours')) { - $ERROR('#1: The Date.prototype.setHours property has the attribute DontEnum'); -} - -for(x in Date.prototype) { - if(x === "setHours") { - $ERROR('#2: The Date.prototype.setHours has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.34_Date.prototype.setHours/S15.9.5.34_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.34_Date.prototype.setHours/S15.9.5.34_A2_T1.js deleted file mode 100644 index e2a8683c8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.34_Date.prototype.setHours/S15.9.5.34_A2_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.34_A2_T1; - * @section: 15.9.5.34; - * @assertion: The "length" property of the "setHours" is 4; - * @description: The "length" property of the "setHours" is 4; - */ - -if(Date.prototype.setHours.hasOwnProperty("length") !== true){ - $ERROR('#1: The setHours has a "length" property'); -} - -if(Date.prototype.setHours.length !== 4){ - $ERROR('#2: The "length" property of the setHours is 4'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.34_Date.prototype.setHours/S15.9.5.34_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.34_Date.prototype.setHours/S15.9.5.34_A3_T1.js deleted file mode 100644 index 03d44d597..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.34_Date.prototype.setHours/S15.9.5.34_A3_T1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.34_A3_T1; - * @section: 15.9.5.34; - * @assertion: The Date.prototype.setHours property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking ReadOnly attribute; - */ - -x = Date.prototype.setHours.length; -Date.prototype.setHours.length = 1; -if (Date.prototype.setHours.length !== x) { - $ERROR('#1: The Date.prototype.setHours.length has the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.34_Date.prototype.setHours/S15.9.5.34_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.34_Date.prototype.setHours/S15.9.5.34_A3_T2.js deleted file mode 100644 index 14c6fd549..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.34_Date.prototype.setHours/S15.9.5.34_A3_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.34_A3_T2; - * @section: 15.9.5.34; - * @assertion: The Date.prototype.setHours property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontDelete attribute; - */ - -if (delete Date.prototype.setHours.length !== false) { - $ERROR('#1: The Date.prototype.setHours.length property has the attributes DontDelete'); -} - -if (!Date.prototype.setHours.hasOwnProperty('length')) { - $FAIL('#2: The Date.prototype.setHours.length property has the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.34_Date.prototype.setHours/S15.9.5.34_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.34_Date.prototype.setHours/S15.9.5.34_A3_T3.js deleted file mode 100644 index 84bc26c5e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.34_Date.prototype.setHours/S15.9.5.34_A3_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.34_A3_T3; - * @section: 15.9.5.34; - * @assertion: The Date.prototype.setHours property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.setHours.propertyIsEnumerable('length')) { - $ERROR('#1: The Date.prototype.setHours.length property has the attribute DontEnum'); -} - -for(x in Date.prototype.setHours) { - if(x === "length") { - $ERROR('#2: The Date.prototype.setHours.length has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.35_Date.prototype.setUTCHours/S15.9.5.35_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.35_Date.prototype.setUTCHours/S15.9.5.35_A1_T1.js deleted file mode 100644 index 51ab521fe..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.35_Date.prototype.setUTCHours/S15.9.5.35_A1_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.35_A1_T1; - * @section: 15.9.5.35; - * @assertion: The Date.prototype property "setUTCHours" has { DontEnum } attributes; - * @description: Checking absence of ReadOnly attribute; - */ - -x = Date.prototype.setUTCHours; -if(x === 1) - Date.prototype.setUTCHours = 2; -else - Date.prototype.setUTCHours = 1; -if (Date.prototype.setUTCHours === x) { - $ERROR('#1: The Date.prototype.setUTCHours has not the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.35_Date.prototype.setUTCHours/S15.9.5.35_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.35_Date.prototype.setUTCHours/S15.9.5.35_A1_T2.js deleted file mode 100644 index f93e9cc1e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.35_Date.prototype.setUTCHours/S15.9.5.35_A1_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.35_A1_T2; - * @section: 15.9.5.35; - * @assertion: The Date.prototype property "setUTCHours" has { DontEnum } attributes; - * @description: Checking absence of DontDelete attribute; - */ - -if (delete Date.prototype.setUTCHours === false) { - $ERROR('#1: The Date.prototype.setUTCHours property has not the attributes DontDelete'); -} - -if (Date.prototype.hasOwnProperty('setUTCHours')) { - $FAIL('#2: The Date.prototype.setUTCHours property has not the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.35_Date.prototype.setUTCHours/S15.9.5.35_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.35_Date.prototype.setUTCHours/S15.9.5.35_A1_T3.js deleted file mode 100644 index f5a6e062a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.35_Date.prototype.setUTCHours/S15.9.5.35_A1_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.35_A1_T3; - * @section: 15.9.5.35; - * @assertion: The Date.prototype property "setUTCHours" has { DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.propertyIsEnumerable('setUTCHours')) { - $ERROR('#1: The Date.prototype.setUTCHours property has the attribute DontEnum'); -} - -for(x in Date.prototype) { - if(x === "setUTCHours") { - $ERROR('#2: The Date.prototype.setUTCHours has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.35_Date.prototype.setUTCHours/S15.9.5.35_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.35_Date.prototype.setUTCHours/S15.9.5.35_A2_T1.js deleted file mode 100644 index 9e64188fd..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.35_Date.prototype.setUTCHours/S15.9.5.35_A2_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.35_A2_T1; - * @section: 15.9.5.35; - * @assertion: The "length" property of the "setUTCHours" is 4; - * @description: The "length" property of the "setUTCHours" is 4; - */ - -if(Date.prototype.setUTCHours.hasOwnProperty("length") !== true){ - $ERROR('#1: The setUTCHours has a "length" property'); -} - -if(Date.prototype.setUTCHours.length !== 4){ - $ERROR('#2: The "length" property of the setUTCHours is 4'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.35_Date.prototype.setUTCHours/S15.9.5.35_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.35_Date.prototype.setUTCHours/S15.9.5.35_A3_T1.js deleted file mode 100644 index e17dc1290..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.35_Date.prototype.setUTCHours/S15.9.5.35_A3_T1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.35_A3_T1; - * @section: 15.9.5.35; - * @assertion: The Date.prototype.setUTCHours property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking ReadOnly attribute; - */ - -x = Date.prototype.setUTCHours.length; -Date.prototype.setUTCHours.length = 1; -if (Date.prototype.setUTCHours.length !== x) { - $ERROR('#1: The Date.prototype.setUTCHours.length has the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.35_Date.prototype.setUTCHours/S15.9.5.35_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.35_Date.prototype.setUTCHours/S15.9.5.35_A3_T2.js deleted file mode 100644 index e08ccf7c3..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.35_Date.prototype.setUTCHours/S15.9.5.35_A3_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.35_A3_T2; - * @section: 15.9.5.35; - * @assertion: The Date.prototype.setUTCHours property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontDelete attribute; - */ - -if (delete Date.prototype.setUTCHours.length !== false) { - $ERROR('#1: The Date.prototype.setUTCHours.length property has the attributes DontDelete'); -} - -if (!Date.prototype.setUTCHours.hasOwnProperty('length')) { - $FAIL('#2: The Date.prototype.setUTCHours.length property has the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.35_Date.prototype.setUTCHours/S15.9.5.35_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.35_Date.prototype.setUTCHours/S15.9.5.35_A3_T3.js deleted file mode 100644 index cf3e89d60..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.35_Date.prototype.setUTCHours/S15.9.5.35_A3_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.35_A3_T3; - * @section: 15.9.5.35; - * @assertion: The Date.prototype.setUTCHours property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.setUTCHours.propertyIsEnumerable('length')) { - $ERROR('#1: The Date.prototype.setUTCHours.length property has the attribute DontEnum'); -} - -for(x in Date.prototype.setUTCHours) { - if(x === "length") { - $ERROR('#2: The Date.prototype.setUTCHours.length has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.36_Date.prototype.setDate/S15.9.5.36_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.36_Date.prototype.setDate/S15.9.5.36_A1_T1.js deleted file mode 100644 index 38448693d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.36_Date.prototype.setDate/S15.9.5.36_A1_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.36_A1_T1; - * @section: 15.9.5.36; - * @assertion: The Date.prototype property "setDate" has { DontEnum } attributes; - * @description: Checking absence of ReadOnly attribute; - */ - -x = Date.prototype.setDate; -if(x === 1) - Date.prototype.setDate = 2; -else - Date.prototype.setDate = 1; -if (Date.prototype.setDate === x) { - $ERROR('#1: The Date.prototype.setDate has not the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.36_Date.prototype.setDate/S15.9.5.36_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.36_Date.prototype.setDate/S15.9.5.36_A1_T2.js deleted file mode 100644 index 7da8e64a6..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.36_Date.prototype.setDate/S15.9.5.36_A1_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.36_A1_T2; - * @section: 15.9.5.36; - * @assertion: The Date.prototype property "setDate" has { DontEnum } attributes; - * @description: Checking absence of DontDelete attribute; - */ - -if (delete Date.prototype.setDate === false) { - $ERROR('#1: The Date.prototype.setDate property has not the attributes DontDelete'); -} - -if (Date.prototype.hasOwnProperty('setDate')) { - $FAIL('#2: The Date.prototype.setDate property has not the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.36_Date.prototype.setDate/S15.9.5.36_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.36_Date.prototype.setDate/S15.9.5.36_A1_T3.js deleted file mode 100644 index affb3d7f5..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.36_Date.prototype.setDate/S15.9.5.36_A1_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.36_A1_T3; - * @section: 15.9.5.36; - * @assertion: The Date.prototype property "setDate" has { DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.propertyIsEnumerable('setDate')) { - $ERROR('#1: The Date.prototype.setDate property has the attribute DontEnum'); -} - -for(x in Date.prototype) { - if(x === "setDate") { - $ERROR('#2: The Date.prototype.setDate has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.36_Date.prototype.setDate/S15.9.5.36_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.36_Date.prototype.setDate/S15.9.5.36_A2_T1.js deleted file mode 100644 index adbc5d289..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.36_Date.prototype.setDate/S15.9.5.36_A2_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.36_A2_T1; - * @section: 15.9.5.36; - * @assertion: The "length" property of the "setDate" is 1; - * @description: The "length" property of the "setDate" is 1; - */ - -if(Date.prototype.setDate.hasOwnProperty("length") !== true){ - $ERROR('#1: The setDate has a "length" property'); -} - -if(Date.prototype.setDate.length !== 1){ - $ERROR('#2: The "length" property of the setDate is 1'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.36_Date.prototype.setDate/S15.9.5.36_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.36_Date.prototype.setDate/S15.9.5.36_A3_T1.js deleted file mode 100644 index bf4b04202..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.36_Date.prototype.setDate/S15.9.5.36_A3_T1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.36_A3_T1; - * @section: 15.9.5.36; - * @assertion: The Date.prototype.setDate property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking ReadOnly attribute; - */ - -x = Date.prototype.setDate.length; -Date.prototype.setDate.length = 1; -if (Date.prototype.setDate.length !== x) { - $ERROR('#1: The Date.prototype.setDate.length has the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.36_Date.prototype.setDate/S15.9.5.36_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.36_Date.prototype.setDate/S15.9.5.36_A3_T2.js deleted file mode 100644 index b6645d6a4..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.36_Date.prototype.setDate/S15.9.5.36_A3_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.36_A3_T2; - * @section: 15.9.5.36; - * @assertion: The Date.prototype.setDate property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontDelete attribute; - */ - -if (delete Date.prototype.setDate.length !== false) { - $ERROR('#1: The Date.prototype.setDate.length property has the attributes DontDelete'); -} - -if (!Date.prototype.setDate.hasOwnProperty('length')) { - $FAIL('#2: The Date.prototype.setDate.length property has the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.36_Date.prototype.setDate/S15.9.5.36_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.36_Date.prototype.setDate/S15.9.5.36_A3_T3.js deleted file mode 100644 index 542175755..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.36_Date.prototype.setDate/S15.9.5.36_A3_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.36_A3_T3; - * @section: 15.9.5.36; - * @assertion: The Date.prototype.setDate property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.setDate.propertyIsEnumerable('length')) { - $ERROR('#1: The Date.prototype.setDate.length property has the attribute DontEnum'); -} - -for(x in Date.prototype.setDate) { - if(x === "length") { - $ERROR('#2: The Date.prototype.setDate.length has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.37_Date.prototype.setUTCDate/S15.9.5.37_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.37_Date.prototype.setUTCDate/S15.9.5.37_A1_T1.js deleted file mode 100644 index 8027fc2e1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.37_Date.prototype.setUTCDate/S15.9.5.37_A1_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.37_A1_T1; - * @section: 15.9.5.37; - * @assertion: The Date.prototype property "setUTCDate" has { DontEnum } attributes; - * @description: Checking absence of ReadOnly attribute; - */ - -x = Date.prototype.setUTCDate; -if(x === 1) - Date.prototype.setUTCDate = 2; -else - Date.prototype.setUTCDate = 1; -if (Date.prototype.setUTCDate === x) { - $ERROR('#1: The Date.prototype.setUTCDate has not the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.37_Date.prototype.setUTCDate/S15.9.5.37_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.37_Date.prototype.setUTCDate/S15.9.5.37_A1_T2.js deleted file mode 100644 index 256851fb9..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.37_Date.prototype.setUTCDate/S15.9.5.37_A1_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.37_A1_T2; - * @section: 15.9.5.37; - * @assertion: The Date.prototype property "setUTCDate" has { DontEnum } attributes; - * @description: Checking absence of DontDelete attribute; - */ - -if (delete Date.prototype.setUTCDate === false) { - $ERROR('#1: The Date.prototype.setUTCDate property has not the attributes DontDelete'); -} - -if (Date.prototype.hasOwnProperty('setUTCDate')) { - $FAIL('#2: The Date.prototype.setUTCDate property has not the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.37_Date.prototype.setUTCDate/S15.9.5.37_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.37_Date.prototype.setUTCDate/S15.9.5.37_A1_T3.js deleted file mode 100644 index ef59c2f77..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.37_Date.prototype.setUTCDate/S15.9.5.37_A1_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.37_A1_T3; - * @section: 15.9.5.37; - * @assertion: The Date.prototype property "setUTCDate" has { DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.propertyIsEnumerable('setUTCDate')) { - $ERROR('#1: The Date.prototype.setUTCDate property has the attribute DontEnum'); -} - -for(x in Date.prototype) { - if(x === "setUTCDate") { - $ERROR('#2: The Date.prototype.setUTCDate has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.37_Date.prototype.setUTCDate/S15.9.5.37_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.37_Date.prototype.setUTCDate/S15.9.5.37_A2_T1.js deleted file mode 100644 index 848b08008..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.37_Date.prototype.setUTCDate/S15.9.5.37_A2_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.37_A2_T1; - * @section: 15.9.5.37; - * @assertion: The "length" property of the "setUTCDate" is 1; - * @description: The "length" property of the "setUTCDate" is 1; - */ - -if(Date.prototype.setUTCDate.hasOwnProperty("length") !== true){ - $ERROR('#1: The setUTCDate has a "length" property'); -} - -if(Date.prototype.setUTCDate.length !== 1){ - $ERROR('#2: The "length" property of the setUTCDate is 1'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.37_Date.prototype.setUTCDate/S15.9.5.37_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.37_Date.prototype.setUTCDate/S15.9.5.37_A3_T1.js deleted file mode 100644 index c73e119c2..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.37_Date.prototype.setUTCDate/S15.9.5.37_A3_T1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.37_A3_T1; - * @section: 15.9.5.37; - * @assertion: The Date.prototype.setUTCDate property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking ReadOnly attribute; - */ - -x = Date.prototype.setUTCDate.length; -Date.prototype.setUTCDate.length = 1; -if (Date.prototype.setUTCDate.length !== x) { - $ERROR('#1: The Date.prototype.setUTCDate.length has the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.37_Date.prototype.setUTCDate/S15.9.5.37_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.37_Date.prototype.setUTCDate/S15.9.5.37_A3_T2.js deleted file mode 100644 index 2d36cd97f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.37_Date.prototype.setUTCDate/S15.9.5.37_A3_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.37_A3_T2; - * @section: 15.9.5.37; - * @assertion: The Date.prototype.setUTCDate property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontDelete attribute; - */ - -if (delete Date.prototype.setUTCDate.length !== false) { - $ERROR('#1: The Date.prototype.setUTCDate.length property has the attributes DontDelete'); -} - -if (!Date.prototype.setUTCDate.hasOwnProperty('length')) { - $FAIL('#2: The Date.prototype.setUTCDate.length property has the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.37_Date.prototype.setUTCDate/S15.9.5.37_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.37_Date.prototype.setUTCDate/S15.9.5.37_A3_T3.js deleted file mode 100644 index 165238bf6..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.37_Date.prototype.setUTCDate/S15.9.5.37_A3_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.37_A3_T3; - * @section: 15.9.5.37; - * @assertion: The Date.prototype.setUTCDate property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.setUTCDate.propertyIsEnumerable('length')) { - $ERROR('#1: The Date.prototype.setUTCDate.length property has the attribute DontEnum'); -} - -for(x in Date.prototype.setUTCDate) { - if(x === "length") { - $ERROR('#2: The Date.prototype.setUTCDate.length has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.38_Date.prototype.setMonth/S15.9.5.38_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.38_Date.prototype.setMonth/S15.9.5.38_A1_T1.js deleted file mode 100644 index 11534cf24..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.38_Date.prototype.setMonth/S15.9.5.38_A1_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.38_A1_T1; - * @section: 15.9.5.38; - * @assertion: The Date.prototype property "setMonth" has { DontEnum } attributes; - * @description: Checking absence of ReadOnly attribute; - */ - -x = Date.prototype.setMonth; -if(x === 1) - Date.prototype.setMonth = 2; -else - Date.prototype.setMonth = 1; -if (Date.prototype.setMonth === x) { - $ERROR('#1: The Date.prototype.setMonth has not the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.38_Date.prototype.setMonth/S15.9.5.38_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.38_Date.prototype.setMonth/S15.9.5.38_A1_T2.js deleted file mode 100644 index dfc5e231d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.38_Date.prototype.setMonth/S15.9.5.38_A1_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.38_A1_T2; - * @section: 15.9.5.38; - * @assertion: The Date.prototype property "setMonth" has { DontEnum } attributes; - * @description: Checking absence of DontDelete attribute; - */ - -if (delete Date.prototype.setMonth === false) { - $ERROR('#1: The Date.prototype.setMonth property has not the attributes DontDelete'); -} - -if (Date.prototype.hasOwnProperty('setMonth')) { - $FAIL('#2: The Date.prototype.setMonth property has not the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.38_Date.prototype.setMonth/S15.9.5.38_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.38_Date.prototype.setMonth/S15.9.5.38_A1_T3.js deleted file mode 100644 index fc394303f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.38_Date.prototype.setMonth/S15.9.5.38_A1_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.38_A1_T3; - * @section: 15.9.5.38; - * @assertion: The Date.prototype property "setMonth" has { DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.propertyIsEnumerable('setMonth')) { - $ERROR('#1: The Date.prototype.setMonth property has the attribute DontEnum'); -} - -for(x in Date.prototype) { - if(x === "setMonth") { - $ERROR('#2: The Date.prototype.setMonth has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.38_Date.prototype.setMonth/S15.9.5.38_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.38_Date.prototype.setMonth/S15.9.5.38_A2_T1.js deleted file mode 100644 index f739e3399..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.38_Date.prototype.setMonth/S15.9.5.38_A2_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.38_A2_T1; - * @section: 15.9.5.38; - * @assertion: The "length" property of the "setMonth" is 2; - * @description: The "length" property of the "setMonth" is 2; - */ - -if(Date.prototype.setMonth.hasOwnProperty("length") !== true){ - $ERROR('#1: The setMonth has a "length" property'); -} - -if(Date.prototype.setMonth.length !== 2){ - $ERROR('#2: The "length" property of the setMonth is 2'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.38_Date.prototype.setMonth/S15.9.5.38_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.38_Date.prototype.setMonth/S15.9.5.38_A3_T1.js deleted file mode 100644 index f5c6aa850..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.38_Date.prototype.setMonth/S15.9.5.38_A3_T1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.38_A3_T1; - * @section: 15.9.5.38; - * @assertion: The Date.prototype.setMonth property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking ReadOnly attribute; - */ - -x = Date.prototype.setMonth.length; -Date.prototype.setMonth.length = 1; -if (Date.prototype.setMonth.length !== x) { - $ERROR('#1: The Date.prototype.setMonth.length has the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.38_Date.prototype.setMonth/S15.9.5.38_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.38_Date.prototype.setMonth/S15.9.5.38_A3_T2.js deleted file mode 100644 index 1edb2d087..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.38_Date.prototype.setMonth/S15.9.5.38_A3_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.38_A3_T2; - * @section: 15.9.5.38; - * @assertion: The Date.prototype.setMonth property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontDelete attribute; - */ - -if (delete Date.prototype.setMonth.length !== false) { - $ERROR('#1: The Date.prototype.setMonth.length property has the attributes DontDelete'); -} - -if (!Date.prototype.setMonth.hasOwnProperty('length')) { - $FAIL('#2: The Date.prototype.setMonth.length property has the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.38_Date.prototype.setMonth/S15.9.5.38_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.38_Date.prototype.setMonth/S15.9.5.38_A3_T3.js deleted file mode 100644 index 5b1a74203..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.38_Date.prototype.setMonth/S15.9.5.38_A3_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.38_A3_T3; - * @section: 15.9.5.38; - * @assertion: The Date.prototype.setMonth property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.setMonth.propertyIsEnumerable('length')) { - $ERROR('#1: The Date.prototype.setMonth.length property has the attribute DontEnum'); -} - -for(x in Date.prototype.setMonth) { - if(x === "length") { - $ERROR('#2: The Date.prototype.setMonth.length has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.39_Date.prototype.setUTCMonth/S15.9.5.39_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.39_Date.prototype.setUTCMonth/S15.9.5.39_A1_T1.js deleted file mode 100644 index 6f95de130..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.39_Date.prototype.setUTCMonth/S15.9.5.39_A1_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.39_A1_T1; - * @section: 15.9.5.39; - * @assertion: The Date.prototype property "setUTCMonth" has { DontEnum } attributes; - * @description: Checking absence of ReadOnly attribute; - */ - -x = Date.prototype.setUTCMonth; -if(x === 1) - Date.prototype.setUTCMonth = 2; -else - Date.prototype.setUTCMonth = 1; -if (Date.prototype.setUTCMonth === x) { - $ERROR('#1: The Date.prototype.setUTCMonth has not the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.39_Date.prototype.setUTCMonth/S15.9.5.39_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.39_Date.prototype.setUTCMonth/S15.9.5.39_A1_T2.js deleted file mode 100644 index 396569113..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.39_Date.prototype.setUTCMonth/S15.9.5.39_A1_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.39_A1_T2; - * @section: 15.9.5.39; - * @assertion: The Date.prototype property "setUTCMonth" has { DontEnum } attributes; - * @description: Checking absence of DontDelete attribute; - */ - -if (delete Date.prototype.setUTCMonth === false) { - $ERROR('#1: The Date.prototype.setUTCMonth property has not the attributes DontDelete'); -} - -if (Date.prototype.hasOwnProperty('setUTCMonth')) { - $FAIL('#2: The Date.prototype.setUTCMonth property has not the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.39_Date.prototype.setUTCMonth/S15.9.5.39_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.39_Date.prototype.setUTCMonth/S15.9.5.39_A1_T3.js deleted file mode 100644 index 2253bc6b7..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.39_Date.prototype.setUTCMonth/S15.9.5.39_A1_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.39_A1_T3; - * @section: 15.9.5.39; - * @assertion: The Date.prototype property "setUTCMonth" has { DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.propertyIsEnumerable('setUTCMonth')) { - $ERROR('#1: The Date.prototype.setUTCMonth property has the attribute DontEnum'); -} - -for(x in Date.prototype) { - if(x === "setUTCMonth") { - $ERROR('#2: The Date.prototype.setUTCMonth has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.39_Date.prototype.setUTCMonth/S15.9.5.39_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.39_Date.prototype.setUTCMonth/S15.9.5.39_A2_T1.js deleted file mode 100644 index 9a8e202ee..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.39_Date.prototype.setUTCMonth/S15.9.5.39_A2_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.39_A2_T1; - * @section: 15.9.5.39; - * @assertion: The "length" property of the "setUTCMonth" is 2; - * @description: The "length" property of the "setUTCMonth" is 2; - */ - -if(Date.prototype.setUTCMonth.hasOwnProperty("length") !== true){ - $ERROR('#1: The setUTCMonth has a "length" property'); -} - -if(Date.prototype.setUTCMonth.length !== 2){ - $ERROR('#2: The "length" property of the setUTCMonth is 2'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.39_Date.prototype.setUTCMonth/S15.9.5.39_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.39_Date.prototype.setUTCMonth/S15.9.5.39_A3_T1.js deleted file mode 100644 index 18211da9c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.39_Date.prototype.setUTCMonth/S15.9.5.39_A3_T1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.39_A3_T1; - * @section: 15.9.5.39; - * @assertion: The Date.prototype.setUTCMonth property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking ReadOnly attribute; - */ - -x = Date.prototype.setUTCMonth.length; -Date.prototype.setUTCMonth.length = 1; -if (Date.prototype.setUTCMonth.length !== x) { - $ERROR('#1: The Date.prototype.setUTCMonth.length has the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.39_Date.prototype.setUTCMonth/S15.9.5.39_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.39_Date.prototype.setUTCMonth/S15.9.5.39_A3_T2.js deleted file mode 100644 index 17dd776d2..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.39_Date.prototype.setUTCMonth/S15.9.5.39_A3_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.39_A3_T2; - * @section: 15.9.5.39; - * @assertion: The Date.prototype.setUTCMonth property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontDelete attribute; - */ - -if (delete Date.prototype.setUTCMonth.length !== false) { - $ERROR('#1: The Date.prototype.setUTCMonth.length property has the attributes DontDelete'); -} - -if (!Date.prototype.setUTCMonth.hasOwnProperty('length')) { - $FAIL('#2: The Date.prototype.setUTCMonth.length property has the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.39_Date.prototype.setUTCMonth/S15.9.5.39_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.39_Date.prototype.setUTCMonth/S15.9.5.39_A3_T3.js deleted file mode 100644 index f43f0bbda..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.39_Date.prototype.setUTCMonth/S15.9.5.39_A3_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.39_A3_T3; - * @section: 15.9.5.39; - * @assertion: The Date.prototype.setUTCMonth property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.setUTCMonth.propertyIsEnumerable('length')) { - $ERROR('#1: The Date.prototype.setUTCMonth.length property has the attribute DontEnum'); -} - -for(x in Date.prototype.setUTCMonth) { - if(x === "length") { - $ERROR('#2: The Date.prototype.setUTCMonth.length has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.3_Date.prototype.toDateString/S15.9.5.3_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.3_Date.prototype.toDateString/S15.9.5.3_A1_T1.js deleted file mode 100644 index c4ba4a909..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.3_Date.prototype.toDateString/S15.9.5.3_A1_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.3_A1_T1; - * @section: 15.9.5.3; - * @assertion: The Date.prototype property "toDateString" has { DontEnum } attributes; - * @description: Checking absence of ReadOnly attribute; - */ - -x = Date.prototype.toDateString; -if(x === 1) - Date.prototype.toDateString = 2; -else - Date.prototype.toDateString = 1; -if (Date.prototype.toDateString === x) { - $ERROR('#1: The Date.prototype.toDateString has not the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.3_Date.prototype.toDateString/S15.9.5.3_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.3_Date.prototype.toDateString/S15.9.5.3_A1_T2.js deleted file mode 100644 index fe6ea8e2b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.3_Date.prototype.toDateString/S15.9.5.3_A1_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.3_A1_T2; - * @section: 15.9.5.3; - * @assertion: The Date.prototype property "toDateString" has { DontEnum } attributes; - * @description: Checking absence of DontDelete attribute; - */ - -if (delete Date.prototype.toDateString === false) { - $ERROR('#1: The Date.prototype.toDateString property has not the attributes DontDelete'); -} - -if (Date.prototype.hasOwnProperty('toDateString')) { - $FAIL('#2: The Date.prototype.toDateString property has not the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.3_Date.prototype.toDateString/S15.9.5.3_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.3_Date.prototype.toDateString/S15.9.5.3_A1_T3.js deleted file mode 100644 index a122f63ff..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.3_Date.prototype.toDateString/S15.9.5.3_A1_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.3_A1_T3; - * @section: 15.9.5.3; - * @assertion: The Date.prototype property "toDateString" has { DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.propertyIsEnumerable('toDateString')) { - $ERROR('#1: The Date.prototype.toDateString property has the attribute DontEnum'); -} - -for(x in Date.prototype) { - if(x === "toDateString") { - $ERROR('#2: The Date.prototype.toDateString has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.3_Date.prototype.toDateString/S15.9.5.3_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.3_Date.prototype.toDateString/S15.9.5.3_A2_T1.js deleted file mode 100644 index 02f9fa959..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.3_Date.prototype.toDateString/S15.9.5.3_A2_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.3_A2_T1; - * @section: 15.9.5.3; - * @assertion: The "length" property of the "toDateString" is 0; - * @description: The "length" property of the "toDateString" is 0; - */ - -if(Date.prototype.toDateString.hasOwnProperty("length") !== true){ - $ERROR('#1: The toDateString has a "length" property'); -} - -if(Date.prototype.toDateString.length !== 0){ - $ERROR('#2: The "length" property of the toDateString is 0'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.3_Date.prototype.toDateString/S15.9.5.3_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.3_Date.prototype.toDateString/S15.9.5.3_A3_T1.js deleted file mode 100644 index 524ab914d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.3_Date.prototype.toDateString/S15.9.5.3_A3_T1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.3_A3_T1; - * @section: 15.9.5.3; - * @assertion: The Date.prototype.toDateString property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking ReadOnly attribute; - */ - -x = Date.prototype.toDateString.length; -Date.prototype.toDateString.length = 1; -if (Date.prototype.toDateString.length !== x) { - $ERROR('#1: The Date.prototype.toDateString.length has the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.3_Date.prototype.toDateString/S15.9.5.3_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.3_Date.prototype.toDateString/S15.9.5.3_A3_T2.js deleted file mode 100644 index a5294596f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.3_Date.prototype.toDateString/S15.9.5.3_A3_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.3_A3_T2; - * @section: 15.9.5.3; - * @assertion: The Date.prototype.toDateString property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontDelete attribute; - */ - -if (delete Date.prototype.toDateString.length !== false) { - $ERROR('#1: The Date.prototype.toDateString.length property has the attributes DontDelete'); -} - -if (!Date.prototype.toDateString.hasOwnProperty('length')) { - $FAIL('#2: The Date.prototype.toDateString.length property has the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.3_Date.prototype.toDateString/S15.9.5.3_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.3_Date.prototype.toDateString/S15.9.5.3_A3_T3.js deleted file mode 100644 index aa336ba3d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.3_Date.prototype.toDateString/S15.9.5.3_A3_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.3_A3_T3; - * @section: 15.9.5.3; - * @assertion: The Date.prototype.toDateString property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.toDateString.propertyIsEnumerable('length')) { - $ERROR('#1: The Date.prototype.toDateString.length property has the attribute DontEnum'); -} - -for(x in Date.prototype.toDateString) { - if(x === "length") { - $ERROR('#2: The Date.prototype.toDateString.length has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.40_Date.prototype.setFullYear/S15.9.5.40_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.40_Date.prototype.setFullYear/S15.9.5.40_A1_T1.js deleted file mode 100644 index 9391c9cbc..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.40_Date.prototype.setFullYear/S15.9.5.40_A1_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.40_A1_T1; - * @section: 15.9.5.40; - * @assertion: The Date.prototype property "setFullYear" has { DontEnum } attributes; - * @description: Checking absence of ReadOnly attribute; - */ - -x = Date.prototype.setFullYear; -if(x === 1) - Date.prototype.setFullYear = 2; -else - Date.prototype.setFullYear = 1; -if (Date.prototype.setFullYear === x) { - $ERROR('#1: The Date.prototype.setFullYear has not the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.40_Date.prototype.setFullYear/S15.9.5.40_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.40_Date.prototype.setFullYear/S15.9.5.40_A1_T2.js deleted file mode 100644 index 21cdebef0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.40_Date.prototype.setFullYear/S15.9.5.40_A1_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.40_A1_T2; - * @section: 15.9.5.40; - * @assertion: The Date.prototype property "setFullYear" has { DontEnum } attributes; - * @description: Checking absence of DontDelete attribute; - */ - -if (delete Date.prototype.setFullYear === false) { - $ERROR('#1: The Date.prototype.setFullYear property has not the attributes DontDelete'); -} - -if (Date.prototype.hasOwnProperty('setFullYear')) { - $FAIL('#2: The Date.prototype.setFullYear property has not the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.40_Date.prototype.setFullYear/S15.9.5.40_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.40_Date.prototype.setFullYear/S15.9.5.40_A1_T3.js deleted file mode 100644 index f95bed0e9..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.40_Date.prototype.setFullYear/S15.9.5.40_A1_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.40_A1_T3; - * @section: 15.9.5.40; - * @assertion: The Date.prototype property "setFullYear" has { DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.propertyIsEnumerable('setFullYear')) { - $ERROR('#1: The Date.prototype.setFullYear property has the attribute DontEnum'); -} - -for(x in Date.prototype) { - if(x === "setFullYear") { - $ERROR('#2: The Date.prototype.setFullYear has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.40_Date.prototype.setFullYear/S15.9.5.40_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.40_Date.prototype.setFullYear/S15.9.5.40_A2_T1.js deleted file mode 100644 index cbea2f684..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.40_Date.prototype.setFullYear/S15.9.5.40_A2_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.40_A2_T1; - * @section: 15.9.5.40; - * @assertion: The "length" property of the "setFullYear" is 3; - * @description: The "length" property of the "setFullYear" is 3; - */ - -if(Date.prototype.setFullYear.hasOwnProperty("length") !== true){ - $ERROR('#1: The setFullYear has a "length" property'); -} - -if(Date.prototype.setFullYear.length !== 3){ - $ERROR('#2: The "length" property of the setFullYear is 3'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.40_Date.prototype.setFullYear/S15.9.5.40_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.40_Date.prototype.setFullYear/S15.9.5.40_A3_T1.js deleted file mode 100644 index 534ea917f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.40_Date.prototype.setFullYear/S15.9.5.40_A3_T1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.40_A3_T1; - * @section: 15.9.5.40; - * @assertion: The Date.prototype.setFullYear property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking ReadOnly attribute; - */ - -x = Date.prototype.setFullYear.length; -Date.prototype.setFullYear.length = 1; -if (Date.prototype.setFullYear.length !== x) { - $ERROR('#1: The Date.prototype.setFullYear.length has the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.40_Date.prototype.setFullYear/S15.9.5.40_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.40_Date.prototype.setFullYear/S15.9.5.40_A3_T2.js deleted file mode 100644 index d6abfabd7..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.40_Date.prototype.setFullYear/S15.9.5.40_A3_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.40_A3_T2; - * @section: 15.9.5.40; - * @assertion: The Date.prototype.setFullYear property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontDelete attribute; - */ - -if (delete Date.prototype.setFullYear.length !== false) { - $ERROR('#1: The Date.prototype.setFullYear.length property has the attributes DontDelete'); -} - -if (!Date.prototype.setFullYear.hasOwnProperty('length')) { - $FAIL('#2: The Date.prototype.setFullYear.length property has the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.40_Date.prototype.setFullYear/S15.9.5.40_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.40_Date.prototype.setFullYear/S15.9.5.40_A3_T3.js deleted file mode 100644 index 4e556d922..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.40_Date.prototype.setFullYear/S15.9.5.40_A3_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.40_A3_T3; - * @section: 15.9.5.40; - * @assertion: The Date.prototype.setFullYear property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.setFullYear.propertyIsEnumerable('length')) { - $ERROR('#1: The Date.prototype.setFullYear.length property has the attribute DontEnum'); -} - -for(x in Date.prototype.setFullYear) { - if(x === "length") { - $ERROR('#2: The Date.prototype.setFullYear.length has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.41_Date.prototype.setUTCFullYear/S15.9.5.41_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.41_Date.prototype.setUTCFullYear/S15.9.5.41_A1_T1.js deleted file mode 100644 index 5f5e7b389..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.41_Date.prototype.setUTCFullYear/S15.9.5.41_A1_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.41_A1_T1; - * @section: 15.9.5.41; - * @assertion: The Date.prototype property "setUTCFullYear" has { DontEnum } attributes; - * @description: Checking absence of ReadOnly attribute; - */ - -x = Date.prototype.setUTCFullYear; -if(x === 1) - Date.prototype.setUTCFullYear = 2; -else - Date.prototype.setUTCFullYear = 1; -if (Date.prototype.setUTCFullYear === x) { - $ERROR('#1: The Date.prototype.setUTCFullYear has not the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.41_Date.prototype.setUTCFullYear/S15.9.5.41_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.41_Date.prototype.setUTCFullYear/S15.9.5.41_A1_T2.js deleted file mode 100644 index 1b7705360..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.41_Date.prototype.setUTCFullYear/S15.9.5.41_A1_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.41_A1_T2; - * @section: 15.9.5.41; - * @assertion: The Date.prototype property "setUTCFullYear" has { DontEnum } attributes; - * @description: Checking absence of DontDelete attribute; - */ - -if (delete Date.prototype.setUTCFullYear === false) { - $ERROR('#1: The Date.prototype.setUTCFullYear property has not the attributes DontDelete'); -} - -if (Date.prototype.hasOwnProperty('setUTCFullYear')) { - $FAIL('#2: The Date.prototype.setUTCFullYear property has not the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.41_Date.prototype.setUTCFullYear/S15.9.5.41_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.41_Date.prototype.setUTCFullYear/S15.9.5.41_A1_T3.js deleted file mode 100644 index 1475b422e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.41_Date.prototype.setUTCFullYear/S15.9.5.41_A1_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.41_A1_T3; - * @section: 15.9.5.41; - * @assertion: The Date.prototype property "setUTCFullYear" has { DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.propertyIsEnumerable('setUTCFullYear')) { - $ERROR('#1: The Date.prototype.setUTCFullYear property has the attribute DontEnum'); -} - -for(x in Date.prototype) { - if(x === "setUTCFullYear") { - $ERROR('#2: The Date.prototype.setUTCFullYear has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.41_Date.prototype.setUTCFullYear/S15.9.5.41_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.41_Date.prototype.setUTCFullYear/S15.9.5.41_A2_T1.js deleted file mode 100644 index a97dc8edb..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.41_Date.prototype.setUTCFullYear/S15.9.5.41_A2_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.41_A2_T1; - * @section: 15.9.5.41; - * @assertion: The "length" property of the "setUTCFullYear" is 3; - * @description: The "length" property of the "setUTCFullYear" is 3; - */ - -if(Date.prototype.setUTCFullYear.hasOwnProperty("length") !== true){ - $ERROR('#1: The setUTCFullYear has a "length" property'); -} - -if(Date.prototype.setUTCFullYear.length !== 3){ - $ERROR('#2: The "length" property of the setUTCFullYear is 3'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.41_Date.prototype.setUTCFullYear/S15.9.5.41_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.41_Date.prototype.setUTCFullYear/S15.9.5.41_A3_T1.js deleted file mode 100644 index a3f7c1e51..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.41_Date.prototype.setUTCFullYear/S15.9.5.41_A3_T1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.41_A3_T1; - * @section: 15.9.5.41; - * @assertion: The Date.prototype.setUTCFullYear property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking ReadOnly attribute; - */ - -x = Date.prototype.setUTCFullYear.length; -Date.prototype.setUTCFullYear.length = 1; -if (Date.prototype.setUTCFullYear.length !== x) { - $ERROR('#1: The Date.prototype.setUTCFullYear.length has the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.41_Date.prototype.setUTCFullYear/S15.9.5.41_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.41_Date.prototype.setUTCFullYear/S15.9.5.41_A3_T2.js deleted file mode 100644 index cbfc2a5d5..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.41_Date.prototype.setUTCFullYear/S15.9.5.41_A3_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.41_A3_T2; - * @section: 15.9.5.41; - * @assertion: The Date.prototype.setUTCFullYear property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontDelete attribute; - */ - -if (delete Date.prototype.setUTCFullYear.length !== false) { - $ERROR('#1: The Date.prototype.setUTCFullYear.length property has the attributes DontDelete'); -} - -if (!Date.prototype.setUTCFullYear.hasOwnProperty('length')) { - $FAIL('#2: The Date.prototype.setUTCFullYear.length property has the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.41_Date.prototype.setUTCFullYear/S15.9.5.41_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.41_Date.prototype.setUTCFullYear/S15.9.5.41_A3_T3.js deleted file mode 100644 index 9c750acb8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.41_Date.prototype.setUTCFullYear/S15.9.5.41_A3_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.41_A3_T3; - * @section: 15.9.5.41; - * @assertion: The Date.prototype.setUTCFullYear property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.setUTCFullYear.propertyIsEnumerable('length')) { - $ERROR('#1: The Date.prototype.setUTCFullYear.length property has the attribute DontEnum'); -} - -for(x in Date.prototype.setUTCFullYear) { - if(x === "length") { - $ERROR('#2: The Date.prototype.setUTCFullYear.length has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.42_Date.prototype.toUTCString/S15.9.5.42_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.42_Date.prototype.toUTCString/S15.9.5.42_A1_T1.js deleted file mode 100644 index 2d0ae6c8e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.42_Date.prototype.toUTCString/S15.9.5.42_A1_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.42_A1_T1; - * @section: 15.9.5.42; - * @assertion: The Date.prototype property "toUTCString" has { DontEnum } attributes; - * @description: Checking absence of ReadOnly attribute; - */ - -x = Date.prototype.toUTCString; -if(x === 1) - Date.prototype.toUTCString = 2; -else - Date.prototype.toUTCString = 1; -if (Date.prototype.toUTCString === x) { - $ERROR('#1: The Date.prototype.toUTCString has not the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.42_Date.prototype.toUTCString/S15.9.5.42_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.42_Date.prototype.toUTCString/S15.9.5.42_A1_T2.js deleted file mode 100644 index 673f79638..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.42_Date.prototype.toUTCString/S15.9.5.42_A1_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.42_A1_T2; - * @section: 15.9.5.42; - * @assertion: The Date.prototype property "toUTCString" has { DontEnum } attributes; - * @description: Checking absence of DontDelete attribute; - */ - -if (delete Date.prototype.toUTCString === false) { - $ERROR('#1: The Date.prototype.toUTCString property has not the attributes DontDelete'); -} - -if (Date.prototype.hasOwnProperty('toUTCString')) { - $FAIL('#2: The Date.prototype.toUTCString property has not the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.42_Date.prototype.toUTCString/S15.9.5.42_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.42_Date.prototype.toUTCString/S15.9.5.42_A1_T3.js deleted file mode 100644 index f9df00e91..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.42_Date.prototype.toUTCString/S15.9.5.42_A1_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.42_A1_T3; - * @section: 15.9.5.42; - * @assertion: The Date.prototype property "toUTCString" has { DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.propertyIsEnumerable('toUTCString')) { - $ERROR('#1: The Date.prototype.toUTCString property has the attribute DontEnum'); -} - -for(x in Date.prototype) { - if(x === "toUTCString") { - $ERROR('#2: The Date.prototype.toUTCString has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.42_Date.prototype.toUTCString/S15.9.5.42_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.42_Date.prototype.toUTCString/S15.9.5.42_A2_T1.js deleted file mode 100644 index 8c32add87..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.42_Date.prototype.toUTCString/S15.9.5.42_A2_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.42_A2_T1; - * @section: 15.9.5.42; - * @assertion: The "length" property of the "toUTCString" is 0; - * @description: The "length" property of the "toUTCString" is 0; - */ - -if(Date.prototype.toUTCString.hasOwnProperty("length") !== true){ - $ERROR('#1: The toUTCString has a "length" property'); -} - -if(Date.prototype.toUTCString.length !== 0){ - $ERROR('#2: The "length" property of the toUTCString is 0'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.42_Date.prototype.toUTCString/S15.9.5.42_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.42_Date.prototype.toUTCString/S15.9.5.42_A3_T1.js deleted file mode 100644 index c0b52d01f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.42_Date.prototype.toUTCString/S15.9.5.42_A3_T1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.42_A3_T1; - * @section: 15.9.5.42; - * @assertion: The Date.prototype.toUTCString property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking ReadOnly attribute; - */ - -x = Date.prototype.toUTCString.length; -Date.prototype.toUTCString.length = 1; -if (Date.prototype.toUTCString.length !== x) { - $ERROR('#1: The Date.prototype.toUTCString.length has the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.42_Date.prototype.toUTCString/S15.9.5.42_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.42_Date.prototype.toUTCString/S15.9.5.42_A3_T2.js deleted file mode 100644 index fbd7dd689..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.42_Date.prototype.toUTCString/S15.9.5.42_A3_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.42_A3_T2; - * @section: 15.9.5.42; - * @assertion: The Date.prototype.toUTCString property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontDelete attribute; - */ - -if (delete Date.prototype.toUTCString.length !== false) { - $ERROR('#1: The Date.prototype.toUTCString.length property has the attributes DontDelete'); -} - -if (!Date.prototype.toUTCString.hasOwnProperty('length')) { - $FAIL('#2: The Date.prototype.toUTCString.length property has the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.42_Date.prototype.toUTCString/S15.9.5.42_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.42_Date.prototype.toUTCString/S15.9.5.42_A3_T3.js deleted file mode 100644 index c1562f6f7..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.42_Date.prototype.toUTCString/S15.9.5.42_A3_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.42_A3_T3; - * @section: 15.9.5.42; - * @assertion: The Date.prototype.toUTCString property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.toUTCString.propertyIsEnumerable('length')) { - $ERROR('#1: The Date.prototype.toUTCString.length property has the attribute DontEnum'); -} - -for(x in Date.prototype.toUTCString) { - if(x === "length") { - $ERROR('#2: The Date.prototype.toUTCString.length has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.4_Date.prototype.toTimeString/S15.9.5.4_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.4_Date.prototype.toTimeString/S15.9.5.4_A1_T1.js deleted file mode 100644 index 3389bacda..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.4_Date.prototype.toTimeString/S15.9.5.4_A1_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.4_A1_T1; - * @section: 15.9.5.4; - * @assertion: The Date.prototype property "toTimeString" has { DontEnum } attributes; - * @description: Checking absence of ReadOnly attribute; - */ - -x = Date.prototype.toTimeString; -if(x === 1) - Date.prototype.toTimeString = 2; -else - Date.prototype.toTimeString = 1; -if (Date.prototype.toTimeString === x) { - $ERROR('#1: The Date.prototype.toTimeString has not the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.4_Date.prototype.toTimeString/S15.9.5.4_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.4_Date.prototype.toTimeString/S15.9.5.4_A1_T2.js deleted file mode 100644 index 2dfdcc8f9..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.4_Date.prototype.toTimeString/S15.9.5.4_A1_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.4_A1_T2; - * @section: 15.9.5.4; - * @assertion: The Date.prototype property "toTimeString" has { DontEnum } attributes; - * @description: Checking absence of DontDelete attribute; - */ - -if (delete Date.prototype.toTimeString === false) { - $ERROR('#1: The Date.prototype.toTimeString property has not the attributes DontDelete'); -} - -if (Date.prototype.hasOwnProperty('toTimeString')) { - $FAIL('#2: The Date.prototype.toTimeString property has not the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.4_Date.prototype.toTimeString/S15.9.5.4_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.4_Date.prototype.toTimeString/S15.9.5.4_A1_T3.js deleted file mode 100644 index 3d3f12337..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.4_Date.prototype.toTimeString/S15.9.5.4_A1_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.4_A1_T3; - * @section: 15.9.5.4; - * @assertion: The Date.prototype property "toTimeString" has { DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.propertyIsEnumerable('toTimeString')) { - $ERROR('#1: The Date.prototype.toTimeString property has the attribute DontEnum'); -} - -for(x in Date.prototype) { - if(x === "toTimeString") { - $ERROR('#2: The Date.prototype.toTimeString has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.4_Date.prototype.toTimeString/S15.9.5.4_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.4_Date.prototype.toTimeString/S15.9.5.4_A2_T1.js deleted file mode 100644 index 480ea8e1e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.4_Date.prototype.toTimeString/S15.9.5.4_A2_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.4_A2_T1; - * @section: 15.9.5.4; - * @assertion: The "length" property of the "toTimeString" is 0; - * @description: The "length" property of the "toTimeString" is 0; - */ - -if(Date.prototype.toTimeString.hasOwnProperty("length") !== true){ - $ERROR('#1: The toTimeString has a "length" property'); -} - -if(Date.prototype.toTimeString.length !== 0){ - $ERROR('#2: The "length" property of the toTimeString is 0'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.4_Date.prototype.toTimeString/S15.9.5.4_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.4_Date.prototype.toTimeString/S15.9.5.4_A3_T1.js deleted file mode 100644 index daafd19a6..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.4_Date.prototype.toTimeString/S15.9.5.4_A3_T1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.4_A3_T1; - * @section: 15.9.5.4; - * @assertion: The Date.prototype.toTimeString property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking ReadOnly attribute; - */ - -x = Date.prototype.toTimeString.length; -Date.prototype.toTimeString.length = 1; -if (Date.prototype.toTimeString.length !== x) { - $ERROR('#1: The Date.prototype.toTimeString.length has the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.4_Date.prototype.toTimeString/S15.9.5.4_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.4_Date.prototype.toTimeString/S15.9.5.4_A3_T2.js deleted file mode 100644 index b6f67f5ce..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.4_Date.prototype.toTimeString/S15.9.5.4_A3_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.4_A3_T2; - * @section: 15.9.5.4; - * @assertion: The Date.prototype.toTimeString property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontDelete attribute; - */ - -if (delete Date.prototype.toTimeString.length !== false) { - $ERROR('#1: The Date.prototype.toTimeString.length property has the attributes DontDelete'); -} - -if (!Date.prototype.toTimeString.hasOwnProperty('length')) { - $FAIL('#2: The Date.prototype.toTimeString.length property has the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.4_Date.prototype.toTimeString/S15.9.5.4_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.4_Date.prototype.toTimeString/S15.9.5.4_A3_T3.js deleted file mode 100644 index 9fb440ac1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.4_Date.prototype.toTimeString/S15.9.5.4_A3_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.4_A3_T3; - * @section: 15.9.5.4; - * @assertion: The Date.prototype.toTimeString property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.toTimeString.propertyIsEnumerable('length')) { - $ERROR('#1: The Date.prototype.toTimeString.length property has the attribute DontEnum'); -} - -for(x in Date.prototype.toTimeString) { - if(x === "length") { - $ERROR('#2: The Date.prototype.toTimeString.length has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.5_Date.prototype.toLocaleString/S15.9.5.5_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.5_Date.prototype.toLocaleString/S15.9.5.5_A1_T1.js deleted file mode 100644 index 81c4460a3..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.5_Date.prototype.toLocaleString/S15.9.5.5_A1_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.5_A1_T1; - * @section: 15.9.5.5; - * @assertion: The Date.prototype property "toLocaleString" has { DontEnum } attributes; - * @description: Checking absence of ReadOnly attribute; - */ - -x = Date.prototype.toLocaleString; -if(x === 1) - Date.prototype.toLocaleString = 2; -else - Date.prototype.toLocaleString = 1; -if (Date.prototype.toLocaleString === x) { - $ERROR('#1: The Date.prototype.toLocaleString has not the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.5_Date.prototype.toLocaleString/S15.9.5.5_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.5_Date.prototype.toLocaleString/S15.9.5.5_A1_T2.js deleted file mode 100644 index 3a1d0fb3a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.5_Date.prototype.toLocaleString/S15.9.5.5_A1_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.5_A1_T2; - * @section: 15.9.5.5; - * @assertion: The Date.prototype property "toLocaleString" has { DontEnum } attributes; - * @description: Checking absence of DontDelete attribute; - */ - -if (delete Date.prototype.toLocaleString === false) { - $ERROR('#1: The Date.prototype.toLocaleString property has not the attributes DontDelete'); -} - -if (Date.prototype.hasOwnProperty('toLocaleString')) { - $FAIL('#2: The Date.prototype.toLocaleString property has not the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.5_Date.prototype.toLocaleString/S15.9.5.5_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.5_Date.prototype.toLocaleString/S15.9.5.5_A1_T3.js deleted file mode 100644 index 6b6f891b1..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.5_Date.prototype.toLocaleString/S15.9.5.5_A1_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.5_A1_T3; - * @section: 15.9.5.5; - * @assertion: The Date.prototype property "toLocaleString" has { DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.propertyIsEnumerable('toLocaleString')) { - $ERROR('#1: The Date.prototype.toLocaleString property has the attribute DontEnum'); -} - -for(x in Date.prototype) { - if(x === "toLocaleString") { - $ERROR('#2: The Date.prototype.toLocaleString has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.5_Date.prototype.toLocaleString/S15.9.5.5_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.5_Date.prototype.toLocaleString/S15.9.5.5_A2_T1.js deleted file mode 100644 index 25638f234..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.5_Date.prototype.toLocaleString/S15.9.5.5_A2_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.5_A2_T1; - * @section: 15.9.5.5; - * @assertion: The "length" property of the "toLocaleString" is 0; - * @description: The "length" property of the "toLocaleString" is 0; - */ - -if(Date.prototype.toLocaleString.hasOwnProperty("length") !== true){ - $ERROR('#1: The toLocaleString has a "length" property'); -} - -if(Date.prototype.toLocaleString.length !== 0){ - $ERROR('#2: The "length" property of the toLocaleString is 0'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.5_Date.prototype.toLocaleString/S15.9.5.5_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.5_Date.prototype.toLocaleString/S15.9.5.5_A3_T1.js deleted file mode 100644 index 79876efb0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.5_Date.prototype.toLocaleString/S15.9.5.5_A3_T1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.5_A3_T1; - * @section: 15.9.5.5; - * @assertion: The Date.prototype.toLocaleString property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking ReadOnly attribute; - */ - -x = Date.prototype.toLocaleString.length; -Date.prototype.toLocaleString.length = 1; -if (Date.prototype.toLocaleString.length !== x) { - $ERROR('#1: The Date.prototype.toLocaleString.length has the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.5_Date.prototype.toLocaleString/S15.9.5.5_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.5_Date.prototype.toLocaleString/S15.9.5.5_A3_T2.js deleted file mode 100644 index f645f68b9..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.5_Date.prototype.toLocaleString/S15.9.5.5_A3_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.5_A3_T2; - * @section: 15.9.5.5; - * @assertion: The Date.prototype.toLocaleString property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontDelete attribute; - */ - -if (delete Date.prototype.toLocaleString.length !== false) { - $ERROR('#1: The Date.prototype.toLocaleString.length property has the attributes DontDelete'); -} - -if (!Date.prototype.toLocaleString.hasOwnProperty('length')) { - $FAIL('#2: The Date.prototype.toLocaleString.length property has the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.5_Date.prototype.toLocaleString/S15.9.5.5_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.5_Date.prototype.toLocaleString/S15.9.5.5_A3_T3.js deleted file mode 100644 index 2b77361f3..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.5_Date.prototype.toLocaleString/S15.9.5.5_A3_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.5_A3_T3; - * @section: 15.9.5.5; - * @assertion: The Date.prototype.toLocaleString property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.toLocaleString.propertyIsEnumerable('length')) { - $ERROR('#1: The Date.prototype.toLocaleString.length property has the attribute DontEnum'); -} - -for(x in Date.prototype.toLocaleString) { - if(x === "length") { - $ERROR('#2: The Date.prototype.toLocaleString.length has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.6_Date.prototype.toLocaleDateString/S15.9.5.6_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.6_Date.prototype.toLocaleDateString/S15.9.5.6_A1_T1.js deleted file mode 100644 index 887d13417..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.6_Date.prototype.toLocaleDateString/S15.9.5.6_A1_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.6_A1_T1; - * @section: 15.9.5.6; - * @assertion: The Date.prototype property "toLocaleDateString" has { DontEnum } attributes; - * @description: Checking absence of ReadOnly attribute; - */ - -x = Date.prototype.toLocaleDateString; -if(x === 1) - Date.prototype.toLocaleDateString = 2; -else - Date.prototype.toLocaleDateString = 1; -if (Date.prototype.toLocaleDateString === x) { - $ERROR('#1: The Date.prototype.toLocaleDateString has not the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.6_Date.prototype.toLocaleDateString/S15.9.5.6_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.6_Date.prototype.toLocaleDateString/S15.9.5.6_A1_T2.js deleted file mode 100644 index 6d1e1a12a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.6_Date.prototype.toLocaleDateString/S15.9.5.6_A1_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.6_A1_T2; - * @section: 15.9.5.6; - * @assertion: The Date.prototype property "toLocaleDateString" has { DontEnum } attributes; - * @description: Checking absence of DontDelete attribute; - */ - -if (delete Date.prototype.toLocaleDateString === false) { - $ERROR('#1: The Date.prototype.toLocaleDateString property has not the attributes DontDelete'); -} - -if (Date.prototype.hasOwnProperty('toLocaleDateString')) { - $FAIL('#2: The Date.prototype.toLocaleDateString property has not the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.6_Date.prototype.toLocaleDateString/S15.9.5.6_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.6_Date.prototype.toLocaleDateString/S15.9.5.6_A1_T3.js deleted file mode 100644 index 05011c1dc..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.6_Date.prototype.toLocaleDateString/S15.9.5.6_A1_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.6_A1_T3; - * @section: 15.9.5.6; - * @assertion: The Date.prototype property "toLocaleDateString" has { DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.propertyIsEnumerable('toLocaleDateString')) { - $ERROR('#1: The Date.prototype.toLocaleDateString property has the attribute DontEnum'); -} - -for(x in Date.prototype) { - if(x === "toLocaleDateString") { - $ERROR('#2: The Date.prototype.toLocaleDateString has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.6_Date.prototype.toLocaleDateString/S15.9.5.6_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.6_Date.prototype.toLocaleDateString/S15.9.5.6_A2_T1.js deleted file mode 100644 index d39433cd8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.6_Date.prototype.toLocaleDateString/S15.9.5.6_A2_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.6_A2_T1; - * @section: 15.9.5.6; - * @assertion: The "length" property of the "toLocaleDateString" is 0; - * @description: The "length" property of the "toLocaleDateString" is 0; - */ - -if(Date.prototype.toLocaleDateString.hasOwnProperty("length") !== true){ - $ERROR('#1: The toLocaleDateString has a "length" property'); -} - -if(Date.prototype.toLocaleDateString.length !== 0){ - $ERROR('#2: The "length" property of the toLocaleDateString is 0'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.6_Date.prototype.toLocaleDateString/S15.9.5.6_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.6_Date.prototype.toLocaleDateString/S15.9.5.6_A3_T1.js deleted file mode 100644 index add952304..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.6_Date.prototype.toLocaleDateString/S15.9.5.6_A3_T1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.6_A3_T1; - * @section: 15.9.5.6; - * @assertion: The Date.prototype.toLocaleDateString property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking ReadOnly attribute; - */ - -x = Date.prototype.toLocaleDateString.length; -Date.prototype.toLocaleDateString.length = 1; -if (Date.prototype.toLocaleDateString.length !== x) { - $ERROR('#1: The Date.prototype.toLocaleDateString.length has the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.6_Date.prototype.toLocaleDateString/S15.9.5.6_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.6_Date.prototype.toLocaleDateString/S15.9.5.6_A3_T2.js deleted file mode 100644 index 607e8d976..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.6_Date.prototype.toLocaleDateString/S15.9.5.6_A3_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.6_A3_T2; - * @section: 15.9.5.6; - * @assertion: The Date.prototype.toLocaleDateString property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontDelete attribute; - */ - -if (delete Date.prototype.toLocaleDateString.length !== false) { - $ERROR('#1: The Date.prototype.toLocaleDateString.length property has the attributes DontDelete'); -} - -if (!Date.prototype.toLocaleDateString.hasOwnProperty('length')) { - $FAIL('#2: The Date.prototype.toLocaleDateString.length property has the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.6_Date.prototype.toLocaleDateString/S15.9.5.6_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.6_Date.prototype.toLocaleDateString/S15.9.5.6_A3_T3.js deleted file mode 100644 index 974cffe9c..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.6_Date.prototype.toLocaleDateString/S15.9.5.6_A3_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.6_A3_T3; - * @section: 15.9.5.6; - * @assertion: The Date.prototype.toLocaleDateString property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.toLocaleDateString.propertyIsEnumerable('length')) { - $ERROR('#1: The Date.prototype.toLocaleDateString.length property has the attribute DontEnum'); -} - -for(x in Date.prototype.toLocaleDateString) { - if(x === "length") { - $ERROR('#2: The Date.prototype.toLocaleDateString.length has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.7_Date.prototype.toLocaleTimeString/S15.9.5.7_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.7_Date.prototype.toLocaleTimeString/S15.9.5.7_A1_T1.js deleted file mode 100644 index 2671f0480..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.7_Date.prototype.toLocaleTimeString/S15.9.5.7_A1_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.7_A1_T1; - * @section: 15.9.5.7; - * @assertion: The Date.prototype property "toLocaleTimeString" has { DontEnum } attributes; - * @description: Checking absence of ReadOnly attribute; - */ - -x = Date.prototype.toLocaleTimeString; -if(x === 1) - Date.prototype.toLocaleTimeString = 2; -else - Date.prototype.toLocaleTimeString = 1; -if (Date.prototype.toLocaleTimeString === x) { - $ERROR('#1: The Date.prototype.toLocaleTimeString has not the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.7_Date.prototype.toLocaleTimeString/S15.9.5.7_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.7_Date.prototype.toLocaleTimeString/S15.9.5.7_A1_T2.js deleted file mode 100644 index d48cd2d2b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.7_Date.prototype.toLocaleTimeString/S15.9.5.7_A1_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.7_A1_T2; - * @section: 15.9.5.7; - * @assertion: The Date.prototype property "toLocaleTimeString" has { DontEnum } attributes; - * @description: Checking absence of DontDelete attribute; - */ - -if (delete Date.prototype.toLocaleTimeString === false) { - $ERROR('#1: The Date.prototype.toLocaleTimeString property has not the attributes DontDelete'); -} - -if (Date.prototype.hasOwnProperty('toLocaleTimeString')) { - $FAIL('#2: The Date.prototype.toLocaleTimeString property has not the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.7_Date.prototype.toLocaleTimeString/S15.9.5.7_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.7_Date.prototype.toLocaleTimeString/S15.9.5.7_A1_T3.js deleted file mode 100644 index 27a175f14..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.7_Date.prototype.toLocaleTimeString/S15.9.5.7_A1_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.7_A1_T3; - * @section: 15.9.5.7; - * @assertion: The Date.prototype property "toLocaleTimeString" has { DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.propertyIsEnumerable('toLocaleTimeString')) { - $ERROR('#1: The Date.prototype.toLocaleTimeString property has the attribute DontEnum'); -} - -for(x in Date.prototype) { - if(x === "toLocaleTimeString") { - $ERROR('#2: The Date.prototype.toLocaleTimeString has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.7_Date.prototype.toLocaleTimeString/S15.9.5.7_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.7_Date.prototype.toLocaleTimeString/S15.9.5.7_A2_T1.js deleted file mode 100644 index b2a89e32e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.7_Date.prototype.toLocaleTimeString/S15.9.5.7_A2_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.7_A2_T1; - * @section: 15.9.5.7; - * @assertion: The "length" property of the "toLocaleTimeString" is 0; - * @description: The "length" property of the "toLocaleTimeString" is 0; - */ - -if(Date.prototype.toLocaleTimeString.hasOwnProperty("length") !== true){ - $ERROR('#1: The toLocaleTimeString has a "length" property'); -} - -if(Date.prototype.toLocaleTimeString.length !== 0){ - $ERROR('#2: The "length" property of the toLocaleTimeString is 0'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.7_Date.prototype.toLocaleTimeString/S15.9.5.7_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.7_Date.prototype.toLocaleTimeString/S15.9.5.7_A3_T1.js deleted file mode 100644 index bcfbb6b9a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.7_Date.prototype.toLocaleTimeString/S15.9.5.7_A3_T1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.7_A3_T1; - * @section: 15.9.5.7; - * @assertion: The Date.prototype.toLocaleTimeString property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking ReadOnly attribute; - */ - -x = Date.prototype.toLocaleTimeString.length; -Date.prototype.toLocaleTimeString.length = 1; -if (Date.prototype.toLocaleTimeString.length !== x) { - $ERROR('#1: The Date.prototype.toLocaleTimeString.length has the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.7_Date.prototype.toLocaleTimeString/S15.9.5.7_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.7_Date.prototype.toLocaleTimeString/S15.9.5.7_A3_T2.js deleted file mode 100644 index 2053fea08..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.7_Date.prototype.toLocaleTimeString/S15.9.5.7_A3_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.7_A3_T2; - * @section: 15.9.5.7; - * @assertion: The Date.prototype.toLocaleTimeString property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontDelete attribute; - */ - -if (delete Date.prototype.toLocaleTimeString.length !== false) { - $ERROR('#1: The Date.prototype.toLocaleTimeString.length property has the attributes DontDelete'); -} - -if (!Date.prototype.toLocaleTimeString.hasOwnProperty('length')) { - $FAIL('#2: The Date.prototype.toLocaleTimeString.length property has the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.7_Date.prototype.toLocaleTimeString/S15.9.5.7_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.7_Date.prototype.toLocaleTimeString/S15.9.5.7_A3_T3.js deleted file mode 100644 index 05ea5728f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.7_Date.prototype.toLocaleTimeString/S15.9.5.7_A3_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.7_A3_T3; - * @section: 15.9.5.7; - * @assertion: The Date.prototype.toLocaleTimeString property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.toLocaleTimeString.propertyIsEnumerable('length')) { - $ERROR('#1: The Date.prototype.toLocaleTimeString.length property has the attribute DontEnum'); -} - -for(x in Date.prototype.toLocaleTimeString) { - if(x === "length") { - $ERROR('#2: The Date.prototype.toLocaleTimeString.length has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.8_Date.prototype.valueOf/S15.9.5.8_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.8_Date.prototype.valueOf/S15.9.5.8_A1_T1.js deleted file mode 100644 index f66a475f5..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.8_Date.prototype.valueOf/S15.9.5.8_A1_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.8_A1_T1; - * @section: 15.9.5.8; - * @assertion: The Date.prototype property "valueOf" has { DontEnum } attributes; - * @description: Checking absence of ReadOnly attribute; - */ - -x = Date.prototype.valueOf; -if(x === 1) - Date.prototype.valueOf = 2; -else - Date.prototype.valueOf = 1; -if (Date.prototype.valueOf === x) { - $ERROR('#1: The Date.prototype.valueOf has not the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.8_Date.prototype.valueOf/S15.9.5.8_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.8_Date.prototype.valueOf/S15.9.5.8_A1_T2.js deleted file mode 100644 index 314bc5b76..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.8_Date.prototype.valueOf/S15.9.5.8_A1_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.8_A1_T2; - * @section: 15.9.5.8; - * @assertion: The Date.prototype property "valueOf" has { DontEnum } attributes; - * @description: Checking absence of DontDelete attribute; - */ - -if (delete Date.prototype.valueOf === false) { - $ERROR('#1: The Date.prototype.valueOf property has not the attributes DontDelete'); -} - -if (Date.prototype.hasOwnProperty('valueOf')) { - $FAIL('#2: The Date.prototype.valueOf property has not the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.8_Date.prototype.valueOf/S15.9.5.8_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.8_Date.prototype.valueOf/S15.9.5.8_A1_T3.js deleted file mode 100644 index f61432ae9..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.8_Date.prototype.valueOf/S15.9.5.8_A1_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.8_A1_T3; - * @section: 15.9.5.8; - * @assertion: The Date.prototype property "valueOf" has { DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.propertyIsEnumerable('valueOf')) { - $ERROR('#1: The Date.prototype.valueOf property has the attribute DontEnum'); -} - -for(x in Date.prototype) { - if(x === "valueOf") { - $ERROR('#2: The Date.prototype.valueOf has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.8_Date.prototype.valueOf/S15.9.5.8_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.8_Date.prototype.valueOf/S15.9.5.8_A2_T1.js deleted file mode 100644 index a4da47ec7..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.8_Date.prototype.valueOf/S15.9.5.8_A2_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.8_A2_T1; - * @section: 15.9.5.8; - * @assertion: The "length" property of the "valueOf" is 0; - * @description: The "length" property of the "valueOf" is 0; - */ - -if(Date.prototype.valueOf.hasOwnProperty("length") !== true){ - $ERROR('#1: The valueOf has a "length" property'); -} - -if(Date.prototype.valueOf.length !== 0){ - $ERROR('#2: The "length" property of the valueOf is 0'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.8_Date.prototype.valueOf/S15.9.5.8_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.8_Date.prototype.valueOf/S15.9.5.8_A3_T1.js deleted file mode 100644 index a5f622a09..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.8_Date.prototype.valueOf/S15.9.5.8_A3_T1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.8_A3_T1; - * @section: 15.9.5.8; - * @assertion: The Date.prototype.valueOf property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking ReadOnly attribute; - */ - -x = Date.prototype.valueOf.length; -Date.prototype.valueOf.length = 1; -if (Date.prototype.valueOf.length !== x) { - $ERROR('#1: The Date.prototype.valueOf.length has the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.8_Date.prototype.valueOf/S15.9.5.8_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.8_Date.prototype.valueOf/S15.9.5.8_A3_T2.js deleted file mode 100644 index 9548522ef..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.8_Date.prototype.valueOf/S15.9.5.8_A3_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.8_A3_T2; - * @section: 15.9.5.8; - * @assertion: The Date.prototype.valueOf property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontDelete attribute; - */ - -if (delete Date.prototype.valueOf.length !== false) { - $ERROR('#1: The Date.prototype.valueOf.length property has the attributes DontDelete'); -} - -if (!Date.prototype.valueOf.hasOwnProperty('length')) { - $FAIL('#2: The Date.prototype.valueOf.length property has the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.8_Date.prototype.valueOf/S15.9.5.8_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.8_Date.prototype.valueOf/S15.9.5.8_A3_T3.js deleted file mode 100644 index 8e6683f59..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.8_Date.prototype.valueOf/S15.9.5.8_A3_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.8_A3_T3; - * @section: 15.9.5.8; - * @assertion: The Date.prototype.valueOf property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.valueOf.propertyIsEnumerable('length')) { - $ERROR('#1: The Date.prototype.valueOf.length property has the attribute DontEnum'); -} - -for(x in Date.prototype.valueOf) { - if(x === "length") { - $ERROR('#2: The Date.prototype.valueOf.length has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.9_Date.prototype.getTime/S15.9.5.9_A1_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.9_Date.prototype.getTime/S15.9.5.9_A1_T1.js deleted file mode 100644 index 8833782bf..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.9_Date.prototype.getTime/S15.9.5.9_A1_T1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.9_A1_T1; - * @section: 15.9.5.9; - * @assertion: The Date.prototype property "getTime" has { DontEnum } attributes; - * @description: Checking absence of ReadOnly attribute; - */ - -x = Date.prototype.getTime; -if(x === 1) - Date.prototype.getTime = 2; -else - Date.prototype.getTime = 1; -if (Date.prototype.getTime === x) { - $ERROR('#1: The Date.prototype.getTime has not the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.9_Date.prototype.getTime/S15.9.5.9_A1_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.9_Date.prototype.getTime/S15.9.5.9_A1_T2.js deleted file mode 100644 index 2f5a23058..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.9_Date.prototype.getTime/S15.9.5.9_A1_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.9_A1_T2; - * @section: 15.9.5.9; - * @assertion: The Date.prototype property "getTime" has { DontEnum } attributes; - * @description: Checking absence of DontDelete attribute; - */ - -if (delete Date.prototype.getTime === false) { - $ERROR('#1: The Date.prototype.getTime property has not the attributes DontDelete'); -} - -if (Date.prototype.hasOwnProperty('getTime')) { - $FAIL('#2: The Date.prototype.getTime property has not the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.9_Date.prototype.getTime/S15.9.5.9_A1_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.9_Date.prototype.getTime/S15.9.5.9_A1_T3.js deleted file mode 100644 index 9d60b320e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.9_Date.prototype.getTime/S15.9.5.9_A1_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.9_A1_T3; - * @section: 15.9.5.9; - * @assertion: The Date.prototype property "getTime" has { DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.propertyIsEnumerable('getTime')) { - $ERROR('#1: The Date.prototype.getTime property has the attribute DontEnum'); -} - -for(x in Date.prototype) { - if(x === "getTime") { - $ERROR('#2: The Date.prototype.getTime has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.9_Date.prototype.getTime/S15.9.5.9_A2_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.9_Date.prototype.getTime/S15.9.5.9_A2_T1.js deleted file mode 100644 index e26b1dfc8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.9_Date.prototype.getTime/S15.9.5.9_A2_T1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.9_A2_T1; - * @section: 15.9.5.9; - * @assertion: The "length" property of the "getTime" is 0; - * @description: The "length" property of the "getTime" is 0; - */ - -if(Date.prototype.getTime.hasOwnProperty("length") !== true){ - $ERROR('#1: The getTime has a "length" property'); -} - -if(Date.prototype.getTime.length !== 0){ - $ERROR('#2: The "length" property of the getTime is 0'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.9_Date.prototype.getTime/S15.9.5.9_A3_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.9_Date.prototype.getTime/S15.9.5.9_A3_T1.js deleted file mode 100644 index 61743a2f9..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.9_Date.prototype.getTime/S15.9.5.9_A3_T1.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.9_A3_T1; - * @section: 15.9.5.9; - * @assertion: The Date.prototype.getTime property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking ReadOnly attribute; - */ - -x = Date.prototype.getTime.length; -Date.prototype.getTime.length = 1; -if (Date.prototype.getTime.length !== x) { - $ERROR('#1: The Date.prototype.getTime.length has the attribute ReadOnly'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.9_Date.prototype.getTime/S15.9.5.9_A3_T2.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.9_Date.prototype.getTime/S15.9.5.9_A3_T2.js deleted file mode 100644 index 1540e6344..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.9_Date.prototype.getTime/S15.9.5.9_A3_T2.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.9_A3_T2; - * @section: 15.9.5.9; - * @assertion: The Date.prototype.getTime property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontDelete attribute; - */ - -if (delete Date.prototype.getTime.length !== false) { - $ERROR('#1: The Date.prototype.getTime.length property has the attributes DontDelete'); -} - -if (!Date.prototype.getTime.hasOwnProperty('length')) { - $FAIL('#2: The Date.prototype.getTime.length property has the attributes DontDelete'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.9_Date.prototype.getTime/S15.9.5.9_A3_T3.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.9_Date.prototype.getTime/S15.9.5.9_A3_T3.js deleted file mode 100644 index 49f9a3567..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/15.9.5.9_Date.prototype.getTime/S15.9.5.9_A3_T3.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5.9_A3_T3; - * @section: 15.9.5.9; - * @assertion: The Date.prototype.getTime property "length" has { ReadOnly, DontDelete, DontEnum } attributes; - * @description: Checking DontEnum attribute; - */ - -if (Date.prototype.getTime.propertyIsEnumerable('length')) { - $ERROR('#1: The Date.prototype.getTime.length property has the attribute DontEnum'); -} - -for(x in Date.prototype.getTime) { - if(x === "length") { - $ERROR('#2: The Date.prototype.getTime.length has the attribute DontEnum'); - } -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A01_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A01_T1.js deleted file mode 100644 index 018662cef..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A01_T1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5_A01_T1; - * @section: 15.9.5; - * @assertion: The Date.prototype has the property "constructor"; - * @description: The Date.prototype has the property "constructor"; - */ - -if(Date.prototype.hasOwnProperty("constructor") !== true){ - $ERROR('#1: The Date.prototype has the property "constructor"'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A02_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A02_T1.js deleted file mode 100644 index 6cc27810d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A02_T1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5_A02_T1; - * @section: 15.9.5; - * @assertion: The Date.prototype has the property "toString"; - * @description: The Date.prototype has the property "toString"; - */ - -if(Date.prototype.hasOwnProperty("toString") !== true){ - $ERROR('#1: The Date.prototype has the property "toString"'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A03_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A03_T1.js deleted file mode 100644 index e54e07557..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A03_T1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5_A03_T1; - * @section: 15.9.5; - * @assertion: The Date.prototype has the property "toDateString"; - * @description: The Date.prototype has the property "toDateString"; - */ - -if(Date.prototype.hasOwnProperty("toDateString") !== true){ - $ERROR('#1: The Date.prototype has the property "toDateString"'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A04_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A04_T1.js deleted file mode 100644 index c9e55c33b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A04_T1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5_A04_T1; - * @section: 15.9.5; - * @assertion: The Date.prototype has the property "toTimeString"; - * @description: The Date.prototype has the property "toTimeString"; - */ - -if(Date.prototype.hasOwnProperty("toTimeString") !== true){ - $ERROR('#1: The Date.prototype has the property "toTimeString"'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A05_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A05_T1.js deleted file mode 100644 index 55e60dd58..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A05_T1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5_A05_T1; - * @section: 15.9.5; - * @assertion: The Date.prototype has the property "toLocaleString"; - * @description: The Date.prototype has the property "toLocaleString"; - */ - -if(Date.prototype.hasOwnProperty("toLocaleString") !== true){ - $ERROR('#1: The Date.prototype has the property "toLocaleString"'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A06_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A06_T1.js deleted file mode 100644 index d404fb9fe..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A06_T1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5_A06_T1; - * @section: 15.9.5; - * @assertion: The Date.prototype has the property "toLocaleDateString"; - * @description: The Date.prototype has the property "toLocaleDateString"; - */ - -if(Date.prototype.hasOwnProperty("toLocaleDateString") !== true){ - $ERROR('#1: The Date.prototype has the property "toLocaleDateString"'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A07_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A07_T1.js deleted file mode 100644 index 547275946..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A07_T1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5_A07_T1; - * @section: 15.9.5; - * @assertion: The Date.prototype has the property "toLocaleTimeString"; - * @description: The Date.prototype has the property "toLocaleTimeString"; - */ - -if(Date.prototype.hasOwnProperty("toLocaleTimeString") !== true){ - $ERROR('#1: The Date.prototype has the property "toLocaleTimeString"'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A08_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A08_T1.js deleted file mode 100644 index ace9a9fa6..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A08_T1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5_A08_T1; - * @section: 15.9.5; - * @assertion: The Date.prototype has the property "valueOf"; - * @description: The Date.prototype has the property "valueOf"; - */ - -if(Date.prototype.hasOwnProperty("valueOf") !== true){ - $ERROR('#1: The Date.prototype has the property "valueOf"'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A09_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A09_T1.js deleted file mode 100644 index 9ca724967..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A09_T1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5_A09_T1; - * @section: 15.9.5; - * @assertion: The Date.prototype has the property "getTime"; - * @description: The Date.prototype has the property "getTime"; - */ - -if(Date.prototype.hasOwnProperty("getTime") !== true){ - $ERROR('#1: The Date.prototype has the property "getTime"'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A10_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A10_T1.js deleted file mode 100644 index 702ccdd71..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A10_T1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5_A10_T1; - * @section: 15.9.5; - * @assertion: The Date.prototype has the property "getFullYear"; - * @description: The Date.prototype has the property "getFullYear"; - */ - -if(Date.prototype.hasOwnProperty("getFullYear") !== true){ - $ERROR('#1: The Date.prototype has the property "getFullYear"'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A11_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A11_T1.js deleted file mode 100644 index 9f04a7493..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A11_T1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5_A11_T1; - * @section: 15.9.5; - * @assertion: The Date.prototype has the property "getUTCFullYear"; - * @description: The Date.prototype has the property "getUTCFullYear"; - */ - -if(Date.prototype.hasOwnProperty("getUTCFullYear") !== true){ - $ERROR('#1: The Date.prototype has the property "getUTCFullYear"'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A12_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A12_T1.js deleted file mode 100644 index 0062cc56b..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A12_T1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5_A12_T1; - * @section: 15.9.5; - * @assertion: The Date.prototype has the property "getMonth"; - * @description: The Date.prototype has the property "getMonth"; - */ - -if(Date.prototype.hasOwnProperty("getMonth") !== true){ - $ERROR('#1: The Date.prototype has the property "getMonth"'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A13_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A13_T1.js deleted file mode 100644 index e7e519cc0..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A13_T1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5_A13_T1; - * @section: 15.9.5; - * @assertion: The Date.prototype has the property "getUTCMonth"; - * @description: The Date.prototype has the property "getUTCMonth"; - */ - -if(Date.prototype.hasOwnProperty("getUTCMonth") !== true){ - $ERROR('#1: The Date.prototype has the property "getUTCMonth"'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A14_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A14_T1.js deleted file mode 100644 index c1df13b85..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A14_T1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5_A14_T1; - * @section: 15.9.5; - * @assertion: The Date.prototype has the property "getDate"; - * @description: The Date.prototype has the property "getDate"; - */ - -if(Date.prototype.hasOwnProperty("getDate") !== true){ - $ERROR('#1: The Date.prototype has the property "getDate"'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A15_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A15_T1.js deleted file mode 100644 index 4a801ae1f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A15_T1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5_A15_T1; - * @section: 15.9.5; - * @assertion: The Date.prototype has the property "getUTCDate"; - * @description: The Date.prototype has the property "getUTCDate"; - */ - -if(Date.prototype.hasOwnProperty("getUTCDate") !== true){ - $ERROR('#1: The Date.prototype has the property "getUTCDate"'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A16_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A16_T1.js deleted file mode 100644 index a3401af6e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A16_T1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5_A16_T1; - * @section: 15.9.5; - * @assertion: The Date.prototype has the property "getDay"; - * @description: The Date.prototype has the property "getDay"; - */ - -if(Date.prototype.hasOwnProperty("getDay") !== true){ - $ERROR('#1: The Date.prototype has the property "getDay"'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A17_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A17_T1.js deleted file mode 100644 index e8a003293..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A17_T1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5_A17_T1; - * @section: 15.9.5; - * @assertion: The Date.prototype has the property "getUTCDay"; - * @description: The Date.prototype has the property "getUTCDay"; - */ - -if(Date.prototype.hasOwnProperty("getUTCDay") !== true){ - $ERROR('#1: The Date.prototype has the property "getUTCDay"'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A18_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A18_T1.js deleted file mode 100644 index 6c742fbff..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A18_T1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5_A18_T1; - * @section: 15.9.5; - * @assertion: The Date.prototype has the property "getHours"; - * @description: The Date.prototype has the property "getHours"; - */ - -if(Date.prototype.hasOwnProperty("getHours") !== true){ - $ERROR('#1: The Date.prototype has the property "getHours"'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A19_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A19_T1.js deleted file mode 100644 index 6c7e39d1a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A19_T1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5_A19_T1; - * @section: 15.9.5; - * @assertion: The Date.prototype has the property "getUTCHours"; - * @description: The Date.prototype has the property "getUTCHours"; - */ - -if(Date.prototype.hasOwnProperty("getUTCHours") !== true){ - $ERROR('#1: The Date.prototype has the property "getUTCHours"'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A20_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A20_T1.js deleted file mode 100644 index 6c726e780..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A20_T1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5_A20_T1; - * @section: 15.9.5; - * @assertion: The Date.prototype has the property "getMinutes"; - * @description: The Date.prototype has the property "getMinutes"; - */ - -if(Date.prototype.hasOwnProperty("getMinutes") !== true){ - $ERROR('#1: The Date.prototype has the property "getMinutes"'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A21_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A21_T1.js deleted file mode 100644 index 0780e15ae..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A21_T1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5_A21_T1; - * @section: 15.9.5; - * @assertion: The Date.prototype has the property "getUTCMinutes"; - * @description: The Date.prototype has the property "getUTCMinutes"; - */ - -if(Date.prototype.hasOwnProperty("getUTCMinutes") !== true){ - $ERROR('#1: The Date.prototype has the property "getUTCMinutes"'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A22_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A22_T1.js deleted file mode 100644 index 08d9c510f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A22_T1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5_A22_T1; - * @section: 15.9.5; - * @assertion: The Date.prototype has the property "getSeconds"; - * @description: The Date.prototype has the property "getSeconds"; - */ - -if(Date.prototype.hasOwnProperty("getSeconds") !== true){ - $ERROR('#1: The Date.prototype has the property "getSeconds"'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A23_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A23_T1.js deleted file mode 100644 index a0dfabf0a..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A23_T1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5_A23_T1; - * @section: 15.9.5; - * @assertion: The Date.prototype has the property "getUTCSeconds"; - * @description: The Date.prototype has the property "getUTCSeconds"; - */ - -if(Date.prototype.hasOwnProperty("getUTCSeconds") !== true){ - $ERROR('#1: The Date.prototype has the property "getUTCSeconds"'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A24_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A24_T1.js deleted file mode 100644 index 49137d080..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A24_T1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5_A24_T1; - * @section: 15.9.5; - * @assertion: The Date.prototype has the property "getMilliseconds"; - * @description: The Date.prototype has the property "getMilliseconds"; - */ - -if(Date.prototype.hasOwnProperty("getMilliseconds") !== true){ - $ERROR('#1: The Date.prototype has the property "getMilliseconds"'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A25_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A25_T1.js deleted file mode 100644 index efe9b6553..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A25_T1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5_A25_T1; - * @section: 15.9.5; - * @assertion: The Date.prototype has the property "getUTCMilliseconds"; - * @description: The Date.prototype has the property "getUTCMilliseconds"; - */ - -if(Date.prototype.hasOwnProperty("getUTCMilliseconds") !== true){ - $ERROR('#1: The Date.prototype has the property "getUTCMilliseconds"'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A26_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A26_T1.js deleted file mode 100644 index 005dfb063..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A26_T1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5_A26_T1; - * @section: 15.9.5; - * @assertion: The Date.prototype has the property "getTimezoneOffset"; - * @description: The Date.prototype has the property "getTimezoneOffset"; - */ - -if(Date.prototype.hasOwnProperty("getTimezoneOffset") !== true){ - $ERROR('#1: The Date.prototype has the property "getTimezoneOffset"'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A27_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A27_T1.js deleted file mode 100644 index 8f8afdef9..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A27_T1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5_A27_T1; - * @section: 15.9.5; - * @assertion: The Date.prototype has the property "setTime"; - * @description: The Date.prototype has the property "setTime"; - */ - -if(Date.prototype.hasOwnProperty("setTime") !== true){ - $ERROR('#1: The Date.prototype has the property "setTime"'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A28_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A28_T1.js deleted file mode 100644 index 54a3d5387..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A28_T1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5_A28_T1; - * @section: 15.9.5; - * @assertion: The Date.prototype has the property "setMilliseconds"; - * @description: The Date.prototype has the property "setMilliseconds"; - */ - -if(Date.prototype.hasOwnProperty("setMilliseconds") !== true){ - $ERROR('#1: The Date.prototype has the property "setMilliseconds"'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A29_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A29_T1.js deleted file mode 100644 index 091b3eb45..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A29_T1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5_A29_T1; - * @section: 15.9.5; - * @assertion: The Date.prototype has the property "setUTCMilliseconds"; - * @description: The Date.prototype has the property "setUTCMilliseconds"; - */ - -if(Date.prototype.hasOwnProperty("setUTCMilliseconds") !== true){ - $ERROR('#1: The Date.prototype has the property "setUTCMilliseconds"'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A30_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A30_T1.js deleted file mode 100644 index 1c154bace..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A30_T1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5_A30_T1; - * @section: 15.9.5; - * @assertion: The Date.prototype has the property "setSeconds"; - * @description: The Date.prototype has the property "setSeconds"; - */ - -if(Date.prototype.hasOwnProperty("setSeconds") !== true){ - $ERROR('#1: The Date.prototype has the property "setSeconds"'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A31_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A31_T1.js deleted file mode 100644 index 74ede2b2e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A31_T1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5_A31_T1; - * @section: 15.9.5; - * @assertion: The Date.prototype has the property "setUTCSeconds"; - * @description: The Date.prototype has the property "setUTCSeconds"; - */ - -if(Date.prototype.hasOwnProperty("setUTCSeconds") !== true){ - $ERROR('#1: The Date.prototype has the property "setUTCSeconds"'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A32_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A32_T1.js deleted file mode 100644 index 123f2f1fb..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A32_T1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5_A32_T1; - * @section: 15.9.5; - * @assertion: The Date.prototype has the property "setMinutes"; - * @description: The Date.prototype has the property "setMinutes"; - */ - -if(Date.prototype.hasOwnProperty("setMinutes") !== true){ - $ERROR('#1: The Date.prototype has the property "setMinutes"'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A33_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A33_T1.js deleted file mode 100644 index addcce6c9..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A33_T1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5_A33_T1; - * @section: 15.9.5; - * @assertion: The Date.prototype has the property "setUTCMinutes"; - * @description: The Date.prototype has the property "setUTCMinutes"; - */ - -if(Date.prototype.hasOwnProperty("setUTCMinutes") !== true){ - $ERROR('#1: The Date.prototype has the property "setUTCMinutes"'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A34_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A34_T1.js deleted file mode 100644 index 9f42d90db..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A34_T1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5_A34_T1; - * @section: 15.9.5; - * @assertion: The Date.prototype has the property "setHours"; - * @description: The Date.prototype has the property "setHours"; - */ - -if(Date.prototype.hasOwnProperty("setHours") !== true){ - $ERROR('#1: The Date.prototype has the property "setHours"'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A35_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A35_T1.js deleted file mode 100644 index c5acca3b8..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A35_T1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5_A35_T1; - * @section: 15.9.5; - * @assertion: The Date.prototype has the property "setUTCHours"; - * @description: The Date.prototype has the property "setUTCHours"; - */ - -if(Date.prototype.hasOwnProperty("setUTCHours") !== true){ - $ERROR('#1: The Date.prototype has the property "setUTCHours"'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A36_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A36_T1.js deleted file mode 100644 index 6ec40317f..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A36_T1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5_A36_T1; - * @section: 15.9.5; - * @assertion: The Date.prototype has the property "setDate"; - * @description: The Date.prototype has the property "setDate"; - */ - -if(Date.prototype.hasOwnProperty("setDate") !== true){ - $ERROR('#1: The Date.prototype has the property "setDate"'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A37_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A37_T1.js deleted file mode 100644 index db874501d..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A37_T1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5_A37_T1; - * @section: 15.9.5; - * @assertion: The Date.prototype has the property "setUTCDate"; - * @description: The Date.prototype has the property "setUTCDate"; - */ - -if(Date.prototype.hasOwnProperty("setUTCDate") !== true){ - $ERROR('#1: The Date.prototype has the property "setUTCDate"'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A38_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A38_T1.js deleted file mode 100644 index bfe124154..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A38_T1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5_A38_T1; - * @section: 15.9.5; - * @assertion: The Date.prototype has the property "setMonth"; - * @description: The Date.prototype has the property "setMonth"; - */ - -if(Date.prototype.hasOwnProperty("setMonth") !== true){ - $ERROR('#1: The Date.prototype has the property "setMonth"'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A39_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A39_T1.js deleted file mode 100644 index be6c1bb7e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A39_T1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5_A39_T1; - * @section: 15.9.5; - * @assertion: The Date.prototype has the property "setUTCMonth"; - * @description: The Date.prototype has the property "setUTCMonth"; - */ - -if(Date.prototype.hasOwnProperty("setUTCMonth") !== true){ - $ERROR('#1: The Date.prototype has the property "setUTCMonth"'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A40_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A40_T1.js deleted file mode 100644 index 587928d1e..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A40_T1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5_A40_T1; - * @section: 15.9.5; - * @assertion: The Date.prototype has the property "setFullYear"; - * @description: The Date.prototype has the property "setFullYear"; - */ - -if(Date.prototype.hasOwnProperty("setFullYear") !== true){ - $ERROR('#1: The Date.prototype has the property "setFullYear"'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A41_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A41_T1.js deleted file mode 100644 index ceac904c2..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A41_T1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5_A41_T1; - * @section: 15.9.5; - * @assertion: The Date.prototype has the property "setUTCFullYear"; - * @description: The Date.prototype has the property "setUTCFullYear"; - */ - -if(Date.prototype.hasOwnProperty("setUTCFullYear") !== true){ - $ERROR('#1: The Date.prototype has the property "setUTCFullYear"'); -} - diff --git a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A42_T1.js b/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A42_T1.js deleted file mode 100644 index 055e51bdf..000000000 --- a/tests/ES3/Conformance/15_Native_ECMA_Script_Objects/15.9_Date_Objects/15.9.5_Properties_of_the_Date_Prototype_Object/S15.9.5_A42_T1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.5_A42_T1; - * @section: 15.9.5; - * @assertion: The Date.prototype has the property "toUTCString"; - * @description: The Date.prototype has the property "toUTCString"; - */ - -if(Date.prototype.hasOwnProperty("toUTCString") !== true){ - $ERROR('#1: The Date.prototype has the property "toUTCString"'); -} - diff --git a/tests/ES3/Conformance/readme.txt b/tests/ES3/Conformance/readme.txt deleted file mode 100644 index c56abc267..000000000 --- a/tests/ES3/Conformance/readme.txt +++ /dev/null @@ -1,39 +0,0 @@ -1. All tests must have .js extension. - -2. Naming of *.js files is subject to a following rule: - - * First symbols referred to standard item. Number of Chapter, - section, subsection with the dots between and prefix "S". - * Then "_" symbol appears. - * Then number of assertion with prefix "A". - * Then "_" symbol appears. - * Then number of test with prefix "T". - -3. Every test should provide additional information about itself. - This information is placed in comments and is divided into several special - sections. Every special section has a name. Syntax of defining special - information in .js comments is: "@" symbol first, section name, and value(s) - after colon till the semicolon appear. Number of values divided by comma symbol. - Then end of line should be typed. Available common sections are: - - @name - same as file name without extension. - @section - links to paragraphs of ECMAScript standard this test belongs to. - Paragraphs must be separated by comma. Typical paragraph consist of numbers - separated by dots, example is: 11.3.1 (which corresponds to paragraph named - "Postfix Increment Operator" in ECMAScript standard). First paragraph in - @section means main paragraph for which this test is denoted to, others are - paragraphs which are also significant for the test to pass. - @assertion - an assertion which is tested by this test. - @description - provide information about test (optional tag). - @negative - signals that test must failed(like incorrect syntax tests for exam). - - Other sections (which are not described here) are stored as java Properties. - - Example: - /** - * @name: S11.3.1_A1.1_T1; - * @section: 11.3.1, 11.6.3, 7.3; - * @assertion: Line Terminator between LeftHandSideExpression and ++ are not allowed; - * @description: Check Line Feed; - * @negative - */ diff --git a/tests/ES3/Implementation_Diagnostics/S11.4.3_D1.1.js b/tests/ES3/Implementation_Diagnostics/S11.4.3_D1.1.js deleted file mode 100644 index e687adb62..000000000 --- a/tests/ES3/Implementation_Diagnostics/S11.4.3_D1.1.js +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.4.3_D1.1; - * @section: 11.4.3; - * @assertion: Result of typeof from RegExp is "function"; -*/ - -// CHECK#1 -if (typeof RegExp !== "function") { - $ERROR('#1: Result of typeof from RegExp is "function"'); -} diff --git a/tests/ES3/Implementation_Diagnostics/S11.4.3_D1.2.js b/tests/ES3/Implementation_Diagnostics/S11.4.3_D1.2.js deleted file mode 100644 index c72b26f81..000000000 --- a/tests/ES3/Implementation_Diagnostics/S11.4.3_D1.2.js +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.4.3_D1.2; - * @section: 11.4.3; - * @assertion: Result of typeof from RegExp is "object"; -*/ - -// CHECK#1 -if (typeof RegExp !== "object") { - $ERROR('#1: Result of typeof from RegExp is "object"'); -} diff --git a/tests/ES3/Implementation_Diagnostics/S12.6.4_D1.js b/tests/ES3/Implementation_Diagnostics/S12.6.4_D1.js deleted file mode 100644 index 19b97fd74..000000000 --- a/tests/ES3/Implementation_Diagnostics/S12.6.4_D1.js +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S12.6.4_D1; -* @section: 12.6.4; -* @assertion: If new properties are added to the object being -* enumerated during enumeration, the newly added properties to be visited in the active -* enumeration; -*/ - -__obj={aa:1,ba:2,ca:3}; -__source={sra:9,srb:8,src:7}; - -__accum=""; - -for (__key in __obj){ - - __accum+=(__key+__obj[__key]); - - add2hash(__obj,__source); - -} - - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (!( -(__accum.indexOf("aa1")!==-1)&& -(__accum.indexOf("ba2")!==-1)&& -(__accum.indexOf("ca3")!==-1)&& -(__accum.indexOf("sra9")!==-1)&& -(__accum.indexOf("srb8")!==-1)&& -(__accum.indexOf("src7")!==-1) -)) { - $ERROR('#1: the newly added properties to be visited in the active enumeration'); -} -// -////////////////////////////////////////////////////////////////////////////// - -function add2hash(hash_map_target, hash_map_be_added){ - if (added) return; - for (key in hash_map_be_added){ - hash_map_target[key] = hash_map_be_added[key]; - } - var added = true; -} diff --git a/tests/ES3/Implementation_Diagnostics/S13.2.2_D20_T1.js b/tests/ES3/Implementation_Diagnostics/S13.2.2_D20_T1.js deleted file mode 100644 index 6f14c5bd1..000000000 --- a/tests/ES3/Implementation_Diagnostics/S13.2.2_D20_T1.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.2_D20_T1; -* @section: 13.2.2; -* @assertion: function declaration inside of "with" statement is a fuction declaration inside of current execution context; -*/ - -var a = 1; - -var __obj = {a:2}; - -with (__obj) -{ - result = __func(); -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (result !== 1) { - $ERROR('#1: function declaration inside of "with" statement is a fuction declaration inside of current execution context'); -} -// -////////////////////////////////////////////////////////////////////////////// - -function __func(){return a;}; diff --git a/tests/ES3/Implementation_Diagnostics/S13.2.2_D20_T2.js b/tests/ES3/Implementation_Diagnostics/S13.2.2_D20_T2.js deleted file mode 100644 index 20eaa0634..000000000 --- a/tests/ES3/Implementation_Diagnostics/S13.2.2_D20_T2.js +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.2_D20_T2; -* @section: 13.2.2; -* @assertion: function declaration inside of "with" statement is a fuction declaration inside of current execution context; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#0 -if (typeof __func !== "function") { - $ERROR('#0: function declaration inside of "with" statement is a fuction declaration inside of current execution context'); -} -// -////////////////////////////////////////////////////////////////////////////// - -var a = 1; - -var __obj = {a:2}; - -with (__obj) -{ - result = __func(); - - function __func(){return a;}; -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (result !== 1) { - $ERROR('#1: function declaration inside of "with" statement is a fuction declaration inside of current execution context'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Implementation_Diagnostics/S13.2.2_D20_T3.js b/tests/ES3/Implementation_Diagnostics/S13.2.2_D20_T3.js deleted file mode 100644 index 3b338f292..000000000 --- a/tests/ES3/Implementation_Diagnostics/S13.2.2_D20_T3.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.2_D20_T3; -* @section: 13.2.2; -* @assertion: function declaration inside of "with" statement is a fuction declaration inside of current execution context; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#0 -if (typeof __func !== "function") { - $ERROR('#0: function\'s scope chain is from when it was declared'); -} -// -////////////////////////////////////////////////////////////////////////////// - -var a = 1; - -var __obj = {a:2}; - -result = __func(); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (result !== 1) { - $ERROR('#1: function declaration inside of "with" statement is a fuction declaration inside of current execution context'); -} -// -////////////////////////////////////////////////////////////////////////////// - -try { - with (__obj) - { - throw 3; - function __func(){return a;}; - } -} catch (e) { - ; -} diff --git a/tests/ES3/Implementation_Diagnostics/S13.2.2_D20_T4.js b/tests/ES3/Implementation_Diagnostics/S13.2.2_D20_T4.js deleted file mode 100644 index ff1d1c50c..000000000 --- a/tests/ES3/Implementation_Diagnostics/S13.2.2_D20_T4.js +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.2_D20_T4; -* @section: 13.2.2; -* @assertion: function declaration inside of "with" statement is a fuction declaration inside of current execution context; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#0 -if (typeof __func !== "function") { - $ERROR('#0: function declaration inside of "with" statement is a fuction declaration inside of current execution context'); -} -// -////////////////////////////////////////////////////////////////////////////// - -var a = 1; - -var __obj = {a:2,__obj:{a:3}}; - -result = __func(); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (result !== 1) { - $ERROR('#1: function declaration inside of "with" statement is a fuction declaration inside of current execution context'); -} -// -////////////////////////////////////////////////////////////////////////////// - -try { - with (__obj) - { - throw 3; - with(__obj){ - throw 5; - function __func(){return a;}; - } - } -} catch (e) { - ; -} diff --git a/tests/ES3/Implementation_Diagnostics/S13.2.2_D20_T5.js b/tests/ES3/Implementation_Diagnostics/S13.2.2_D20_T5.js deleted file mode 100644 index 8921214b2..000000000 --- a/tests/ES3/Implementation_Diagnostics/S13.2.2_D20_T5.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.2_D20_T5; -* @section: 13.2.2; -* @assertion: function declaration inside of "with" statement is a fuction declaration inside of current execution context; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#0 -if (typeof __func !== "function") { - $ERROR('#0: function declaration inside of "with" statement is a fuction declaration inside of current execution context'); -} -// -////////////////////////////////////////////////////////////////////////////// - -var a = 1; - -var __obj = {a:2}; - -with (__obj) -{ - try { - throw 3; - function __func() - { - return a; - } - } catch (e) { - ; - } -} - -delete __obj; - -result = __func(); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (result !== 1) { - $ERROR('#1: function declaration inside of "with" statement is a fuction declaration inside of current execution context'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Implementation_Diagnostics/S13.2.2_D20_T6.js b/tests/ES3/Implementation_Diagnostics/S13.2.2_D20_T6.js deleted file mode 100644 index 23cd590ea..000000000 --- a/tests/ES3/Implementation_Diagnostics/S13.2.2_D20_T6.js +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.2_D20_T6; -* @section: 13.2.2; -* @assertion: function declaration inside of "with" statement is a fuction declaration inside of current execution context; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#0 -if (typeof __func !== "function") { - $ERROR('#0: function declaration inside of "with" statement is a fuction declaration inside of current execution context'); -} -// -////////////////////////////////////////////////////////////////////////////// - -var a = 1; - -var __obj = {a:2}; - -with (__obj) -{ - while(0){ - function __func() - { - return a; - } - } -} - -delete __obj; - -var __obj = {a:3}; - -with (__obj) -{ - result = __func(); -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (result !== 1) { - $ERROR('#1: function declaration inside of "with" statement is a fuction declaration inside of current execution context'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Implementation_Diagnostics/S13.2.2_D20_T7.js b/tests/ES3/Implementation_Diagnostics/S13.2.2_D20_T7.js deleted file mode 100644 index f3b32d188..000000000 --- a/tests/ES3/Implementation_Diagnostics/S13.2.2_D20_T7.js +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.2_D20_T7; -* @section: 13.2.2; -* @assertion: function declaration inside of "with" statement is a fuction declaration inside of current execution context; -*/ - -var a = 1; - -var __obj = {a:2}; - -with (__obj) -{ - function __func() - { - return a; - } -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__obj.hasOwnProperty('__func')) { - $ERROR('#1: function declaration inside of "with" statement is a fuction declaration inside of current execution context'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (!(this.hasOwnProperty('__func'))) { - $ERROR('#2: function declaration inside of "with" statement is a fuction declaration inside of current execution context'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -if (__func in __obj) { - $ERROR('#3: function declaration inside of "with" statement is a fuction declaration inside of current execution context'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#4 -if (this.__func === undefined) { - $ERROR('#4: function declaration inside of "with" statement is a fuction declaration inside of current execution context'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Implementation_Diagnostics/S13.2.2_D20_T8.js b/tests/ES3/Implementation_Diagnostics/S13.2.2_D20_T8.js deleted file mode 100644 index 9f99ad571..000000000 --- a/tests/ES3/Implementation_Diagnostics/S13.2.2_D20_T8.js +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13.2.2_D20_T8; -* @section: 13.2.2; -* @assertion: function declaration inside of "with" statement is a fuction declaration inside of current execution context; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#0 -if (typeof __func !== "function") { - $ERROR('#0: function declaration inside of "with" statement is a fuction declaration inside of current execution context'); -} -// -////////////////////////////////////////////////////////////////////////////// - -var a = 1, b = "a"; - -var __obj = {a:2}; - -with (__obj) -{ - while(0){ - function __func() - { - return a; - } - } -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__func() !== "a") { - $ERROR('#1: function declaration inside of "with" statement is a fuction declaration inside of current execution context'); -} -// -////////////////////////////////////////////////////////////////////////////// - -delete __obj; - -var __obj = {a:3,b:"b"}; - -with (__obj) -{ - for(b in null){ - function __func() - { - return b; - } - } -} - -with (__obj) -{ - result = __func(); -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (result !== "a") { - $ERROR('#2: function declaration inside of "with" statement is a fuction declaration inside of current execution context'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Implementation_Diagnostics/S13.2_D1.1.js b/tests/ES3/Implementation_Diagnostics/S13.2_D1.1.js deleted file mode 100644 index d17fe71bc..000000000 --- a/tests/ES3/Implementation_Diagnostics/S13.2_D1.1.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S13.2_D1.1; - * @section: 13.2; - * @assertion: Create a new native ECMAScript object, not joined the already exists object that was created - * by an earlier call to this section's algorithm, and if that call to this section's algorithm was given - * a FunctionBody that equated to the FunctionBody given now; -*/ - -function A(){ - function B(x) { return x*x; } - return B; -} - -var f1 = A(); -var f2 = A(); - -//CHECK#1 -if (f1 == f2) { - $ERROR('#1: Create a new native ECMAScript object, not joined the already exists object'); -} else { - if (f1 === f2) { - $ERROR('#1: Create a new native ECMAScript object, not joined the already exists object'); - } -} diff --git a/tests/ES3/Implementation_Diagnostics/S13.2_D1.2.js b/tests/ES3/Implementation_Diagnostics/S13.2_D1.2.js deleted file mode 100644 index ae58b11aa..000000000 --- a/tests/ES3/Implementation_Diagnostics/S13.2_D1.2.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S13.2_D1.2; - * @section: 13.2; - * @assertion: Create a new native ECMAScript object, joined the already exists object that was created - * by an earlier call to this section's algorithm, and if that call to this section's algorithm was given - * a FunctionBody that equated to the FunctionBody given now; -*/ - -function A(){ - function B(x) { return x*x; } - return B; -} - -var f1 = A(); -var f2 = A(); - -//CHECK#1 -if (f1 != f2) { - $ERROR('#1: Create a new native ECMAScript object, joined the already exists object'); -} else { - if (f1 !== f2) { - $ERROR('#1: Create a new native ECMAScript object, joined the already exists object'); - } -} diff --git a/tests/ES3/Implementation_Diagnostics/S13_D1_T1.js b/tests/ES3/Implementation_Diagnostics/S13_D1_T1.js deleted file mode 100644 index 14d1c67e7..000000000 --- a/tests/ES3/Implementation_Diagnostics/S13_D1_T1.js +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S13_D1_T1; -* @section: 13,12.10; -* @assertion: Function declaration inside of "with" statement interprets as function expression; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#0 -if (typeof __func !== "undefined") { - $ERROR('#0: Function declaration inside of "with" statement interprets as function expression'); -} -// -////////////////////////////////////////////////////////////////////////////// - -var a = 1, b = "a"; - -var __obj = {a:2,b:"x"}; - -with (__obj) -{ - function __func() - { - return a; - } -} - -delete __obj; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__func() !== 2) { - $ERROR('#1: Function declaration inside of "with" statement interprets as function expression'); -} -// -////////////////////////////////////////////////////////////////////////////// - -var __obj = {a:3,b:"b"}; - -with (__obj) -{ - function __func() - { - return b; - } -} - -delete __obj; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__func()!=="b") { - $ERROR('#2: Function declaration inside of "with" statement interprets as function expression'); -} -// -////////////////////////////////////////////////////////////////////////////// - -with ({a:99,b:"c"}) -{ - ////////////////////////////////////////////////////////////////////////////// - //CHECK#2 - if (__func() !== "c") { - $ERROR('#2: Function declaration inside of "with" statement interprets as function expression'); - } - // - ////////////////////////////////////////////////////////////////////////////// -} diff --git a/tests/ES3/Implementation_Diagnostics/S14_D1_T1.js b/tests/ES3/Implementation_Diagnostics/S14_D1_T1.js deleted file mode 100644 index 9a28f5906..000000000 --- a/tests/ES3/Implementation_Diagnostics/S14_D1_T1.js +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S14_D1_T1; -* @section: 14; -* @assertion: Function declaration may be in unreacheable fragment of program; -*/ - -THERE = "I'm there"; -HERE = "I'm here"; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try{ - if (__func() !== THERE) { - $ERROR('#1: Function declaration may be in unreacheable fragment of program'); - } -} catch(e){ - $ERROR('#1.1: '+e.message); -} -// -////////////////////////////////////////////////////////////////////////////// - -if (true){ - function __func(){return HERE;}; -} else { - function __func(){return THERE;}; -}; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__func() !== THERE) { - $ERROR('#2: Function declaration may be in unreacheable fragment of program'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Implementation_Diagnostics/S14_D4_T1.js b/tests/ES3/Implementation_Diagnostics/S14_D4_T1.js deleted file mode 100644 index be5b11464..000000000 --- a/tests/ES3/Implementation_Diagnostics/S14_D4_T1.js +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S14_D4_T1; -* @section: 14; -* @assertion: Function declaration may be inside of try-catch block ; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __sleep !== "function") { - $FAIL('#1: Test fails badly'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -try{ - __sleep(); - $ERROR('#2: Function declaration may be inside of try-catch block'); -} catch(e){ - $PRINT("#2 passed "+e.message); -} -// -////////////////////////////////////////////////////////////////////////////// - -try { - function __sleep(){ - return CHUNK; - } -} catch (e) { - ; -} - - -CHUNK="zzz..."; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -try{ - if (__sleep()!=="zzz...") { - $ERROR('#3: Function declaration may be inside of try-catch block'); - } -} catch(e){ - $ERROR('#3.1: Function declaration may be inside of try-catch block'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Implementation_Diagnostics/S14_D4_T2.js b/tests/ES3/Implementation_Diagnostics/S14_D4_T2.js deleted file mode 100644 index 4df602d45..000000000 --- a/tests/ES3/Implementation_Diagnostics/S14_D4_T2.js +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S14_D4_T2; -* @section: 14; -* @assertion: Function declaration may be inside of try-catch block ; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __sleep !== "function") { - $FAIL('#1: Test fails badly'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -try{ - __sleep(); - $ERROR('#2: Function declaration may be inside of try-catch block'); -} catch(e){ - $PRINT("#2 passed "+e.message); -} -// -////////////////////////////////////////////////////////////////////////////// - -try { - ; -} catch (e) { - function __sleep(){ - return CHUNK; - } -} - - -CHUNK="zzz..."; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -try{ - if (__sleep()!=="zzz...") { - $ERROR('#3: Function declaration may be inside of try-catch block'); - } -} catch(e){ - $ERROR('#3.1: Function declaration may be inside of try-catch block'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Implementation_Diagnostics/S14_D4_T3.js b/tests/ES3/Implementation_Diagnostics/S14_D4_T3.js deleted file mode 100644 index c71cc70bd..000000000 --- a/tests/ES3/Implementation_Diagnostics/S14_D4_T3.js +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S14_D4_T3; -* @section: 14; -* @assertion: Function declaration may be inside of try-catch block ; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __sleep !== "function") { - $FAIL('#1: Test fails badly'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -try{ - __sleep(); - $ERROR('#2: Function declaration may be inside of try-catch block'); -} catch(e){ - $PRINT("#2 passed "+e.message); -} -// -////////////////////////////////////////////////////////////////////////////// - -try { - function __sleep(){ - return BBUNK; - } -} catch (e) { - function __sleep(){ - return CHUNK; - } -} - - -CHUNK="zzz..."; -BBUNK="dream..."; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#3 -try{ - if (__sleep()!=="zzz...") { - $ERROR('#3: Function declaration may be inside of try-catch block'); - } -} catch(e){ - $ERROR('#3.1: Function declaration may be inside of try-catch block'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Implementation_Diagnostics/S14_D6_T1.js b/tests/ES3/Implementation_Diagnostics/S14_D6_T1.js deleted file mode 100644 index 819fff1d0..000000000 --- a/tests/ES3/Implementation_Diagnostics/S14_D6_T1.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S14_D6_T1; -* @section: 14; -* @assertion: Function declaration may be inside of while block ; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __func !== "function") { - $ERROR('1: Function declaration may be inside of while block'); -} -// -////////////////////////////////////////////////////////////////////////////// - -while(0){ - function __func(){return BANNER;}; -} - -BANNER="union jack"; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__func() !== "union jack") { - $ERROR('2: Function declaration may be inside of while block'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Implementation_Diagnostics/S14_D6_T2.js b/tests/ES3/Implementation_Diagnostics/S14_D6_T2.js deleted file mode 100644 index e6e9b8a5e..000000000 --- a/tests/ES3/Implementation_Diagnostics/S14_D6_T2.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S14_D6_T2; -* @section: 14; -* @assertion: Function declaration may be inside of while block ; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __func !== "function") { - $ERROR('1: Function declaration may be inside of while block'); -} -// -////////////////////////////////////////////////////////////////////////////// - -while(1){ - break; - function __func(){return BANNER;}; -} - -BANNER="union jack"; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__func() !== "union jack") { - $ERROR('2: Function declaration may be inside of while block'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Implementation_Diagnostics/S14_D7.js b/tests/ES3/Implementation_Diagnostics/S14_D7.js deleted file mode 100644 index 73082b82c..000000000 --- a/tests/ES3/Implementation_Diagnostics/S14_D7.js +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S14_D7; -* @section: 14; -* @assertion: Function declaration may be inside of "with" block ; -*/ - -BANNER="union jack"; - -a=1; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof __func !== "function") { - $ERROR('1: Function declaration may be inside of "with" block'); -} -// -////////////////////////////////////////////////////////////////////////////// - -__obj={a:2}; - -with(__obj){ - function __func(){return a;}; -} - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__func() !== 1) { - $ERROR('2: Function declaration may be inside of "with" block '); -} -// -////////////////////////////////////////////////////////////////////////////// - -__obj.a=BANNER; - -with(__obj){ - ////////////////////////////////////////////////////////////////////////////// - //CHECK#3 - if (__func() !== "union jack") { - $ERROR('3: Function declaration may be inside of "with" block '); - } - // - ////////////////////////////////////////////////////////////////////////////// -} - - diff --git a/tests/ES3/Implementation_Diagnostics/S15.1.2.2_D1.1.js b/tests/ES3/Implementation_Diagnostics/S15.1.2.2_D1.1.js deleted file mode 100644 index da793b1a8..000000000 --- a/tests/ES3/Implementation_Diagnostics/S15.1.2.2_D1.1.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.2_D1.1; - * @section: 15.1.2.2, 9.8; - * @assertion: If the length of S is at least 1 and the first character of S is 0, - * then R = 8; -*/ - -//CHECK#2 -if (parseInt("08") !== parseInt("08", 8)) { - $ERROR('#1: parseInt("08") === parseInt("08", 8)'); -} - -//CHECK#2 -if (parseInt("09") !== parseInt("09", 8)) { - $ERROR('#2: parseInt("09") === parseInt("09", 8)'); -} - -//CHECK#3 -if (parseInt("010") !== parseInt("010", 8)) { - $ERROR('#3: parseInt("010") === parseInt("010", 8)'); -} diff --git a/tests/ES3/Implementation_Diagnostics/S15.1.2.2_D1.2.js b/tests/ES3/Implementation_Diagnostics/S15.1.2.2_D1.2.js deleted file mode 100644 index cbdc1fe59..000000000 --- a/tests/ES3/Implementation_Diagnostics/S15.1.2.2_D1.2.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.2.2_D1.2; - * @section: 15.1.2.2, 9.8; - * @assertion: If the length of S is at least 1 and the first character of S is 0, - * then R = 10; -*/ - -//CHECK#1 -if (parseInt("08") !== parseInt("08", 10)) { - $ERROR('#1: parseInt("08") === parseInt("08", 10)'); -} - -//CHECK#2 -if (parseInt("09") !== parseInt("09", 10)) { - $ERROR('#2: parseInt("09") === parseInt("09", 10)'); -} - -//CHECK#3 -if (parseInt("010") !== parseInt("010", 10)) { - $ERROR('#3: parseInt("010") === parseInt("010", 10)'); -} diff --git a/tests/ES3/Implementation_Diagnostics/S15.10.6.3_D1_T1.js b/tests/ES3/Implementation_Diagnostics/S15.10.6.3_D1_T1.js deleted file mode 100644 index 40403f127..000000000 --- a/tests/ES3/Implementation_Diagnostics/S15.10.6.3_D1_T1.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.10.6.3_D1_T1; -* @section: 15.10.6.3; -* @assertion: RegeExp.prototype.test calling does not change lastIndex property; -*/ - -__re = /ab|cd/g; - -__string = "zz zz ab zz zz"; - -__re.test(__string); - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (__re.lastIndex!==0) { - $ERROR('#1: RegeExp.prototype.test calling does not change lastIndex property'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Implementation_Diagnostics/S15.4.4.12_D1.5_T1.js b/tests/ES3/Implementation_Diagnostics/S15.4.4.12_D1.5_T1.js deleted file mode 100644 index 97f2ad804..000000000 --- a/tests/ES3/Implementation_Diagnostics/S15.4.4.12_D1.5_T1.js +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.12_D1.5_T1; - * @section: 15.4.4.12; - * @assertion: If a function is given fewer arguments than the function is - * specified to require, the function shall behave exactly as if it had been - * given sufficient additional arguments, each such argument being the - * undefined value; - * @description: no argument; -*/ - -var x = [0,1,2,3]; -var arr = x.splice(); - -//CHECK#1 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: var x = [0,1,2,3]; var arr = x.splice(); arr is Array object'); -} - -//CHECK#2 -if (arr.length !== 0) { - $ERROR('#2: var x = [0,1,2,3]; var arr = x.splice(); arr.length === 0'); -} - -//CHECK#3 -if (x.length !== 4) { - $ERROR('#3: var x = [0,1,2,3]; var arr = x.splice(); x.length === 4'); -} - -//CHECK#4 -if (x[0] !== 0) { - $ERROR('#4: var x = [0,1,2,3]; var arr = x.splice(); x[0] === 0'); -} - -//CHECK#5 -if (x[1] !== 1) { - $ERROR('#5: var x = [0,1,2,3]; var arr = x.splice(); x[1] === 1'); -} - -//CHECK#6 -if (x[2] !== 2) { - $ERROR('#6: var x = [0,1,2,3]; var arr = x.splice(); x[2] === 2'); -} - -//CHECK#7 -if (x[3] !== 3) { - $ERROR('#7: var x = [0,1,2,3]; var arr = x.splice(); x[3] === 3'); -} diff --git a/tests/ES3/Implementation_Diagnostics/S15.4.4.12_D1.5_T2.js b/tests/ES3/Implementation_Diagnostics/S15.4.4.12_D1.5_T2.js deleted file mode 100644 index 5c44d6402..000000000 --- a/tests/ES3/Implementation_Diagnostics/S15.4.4.12_D1.5_T2.js +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.4.4.12_D1.5_T2; - * @section: 15.4.4.12; - * @assertion: If a function is given fewer arguments than the function is - * specified to require, the function shall behave exactly as if it had been - * given sufficient additional arguments, each such argument being the - * undefined value; - * @description: one argument; -*/ - -var x = [0,1,2,3]; -var arr = x.splice(1); - -//CHECK#1 -arr.getClass = Object.prototype.toString; -if (arr.getClass() !== "[object " + "Array" + "]") { - $ERROR('#1: var x = [0,1,2,3]; var arr = x.splice(1); arr is Array object'); -} - -//CHECK#2 -if (arr.length !== 0) { - $ERROR('#2: var x = [0,1,2,3]; var arr = x.splice(1); arr.length === 0'); -} - -//CHECK#3 -if (x.length !== 4) { - $ERROR('#3: var x = [0,1,2,3]; var arr = x.splice(1); x.length === 4'); -} - -//CHECK#4 -if (x[0] !== 0) { - $ERROR('#4: var x = [0,1,2,3]; var arr = x.splice(1); x[0] === 0'); -} - -//CHECK#5 -if (x[1] !== 1) { - $ERROR('#5: var x = [0,1,2,3]; var arr = x.splice(1); x[1] === 1'); -} - -//CHECK#6 -if (x[2] !== 2) { - $ERROR('#6: var x = [0,1,2,3]; var arr = x.splice(1); x[2] === 2'); -} - -//CHECK#7 -if (x[3] !== 3) { - $ERROR('#7: var x = [0,1,2,3]; var arr = x.splice(1); x[3] === 3'); -} diff --git a/tests/ES3/Implementation_Diagnostics/S15.5.2_D1_T1.js b/tests/ES3/Implementation_Diagnostics/S15.5.2_D1_T1.js deleted file mode 100644 index 9f464f047..000000000 --- a/tests/ES3/Implementation_Diagnostics/S15.5.2_D1_T1.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.2_D1_T1; -* @section: 15.5.2; -* @assertion: String constructor can accept many arguments. But only the first will be accounted ; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try { - __str__instance = new String(1,2,3); -} catch (e) { - $FAIL('#1: String constructor can accept many arguments'); -} -// -////////////////////////////////////////////////////////////////////////////// - - - - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__str__instance != "1") { - $ERROR('#2: But only the first will be accounted'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Implementation_Diagnostics/S15.5.2_D1_T2.js b/tests/ES3/Implementation_Diagnostics/S15.5.2_D1_T2.js deleted file mode 100644 index 2c208cf90..000000000 --- a/tests/ES3/Implementation_Diagnostics/S15.5.2_D1_T2.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.2_D1_T2; -* @section: 15.5.2; -* @assertion: String constructor can accept many arguments. But only the first will be accounted ; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try { - __str__instance = new String(null,"2",x); -} catch (e) { - $FAIL('#1: String constructor can accept many arguments'); -} -// -////////////////////////////////////////////////////////////////////////////// - - - - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__str__instance != "null") { - $ERROR('#2: But only the first will be accounted'); -} -// -////////////////////////////////////////////////////////////////////////////// - -var x; diff --git a/tests/ES3/Implementation_Diagnostics/S15.5.2_D2.js b/tests/ES3/Implementation_Diagnostics/S15.5.2_D2.js deleted file mode 100644 index 538c9f5eb..000000000 --- a/tests/ES3/Implementation_Diagnostics/S15.5.2_D2.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.2_D2; -* @section: 15.5.2; -* @assertion: String constructor can't accept many arguments. When more than one is provided exception throws ; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -try { - __str__instance = new String(1,2,3); - $FAIL('#1: When more than one is provided exception throws'); -} catch (e) { - $PRINT(e); -} -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Implementation_Diagnostics/S15.5.4.11_D1.1_T1.js b/tests/ES3/Implementation_Diagnostics/S15.5.4.11_D1.1_T1.js deleted file mode 100644 index adb10cfca..000000000 --- a/tests/ES3/Implementation_Diagnostics/S15.5.4.11_D1.1_T1.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.11_D1.1_T1; -* @section: 15.5.4.11; -* @assertion: String.prototype.replace (searchValue, replaceValue) accepts only two arguments; -* @negative; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -"".replace(); -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Implementation_Diagnostics/S15.5.4.11_D1.1_T2.js b/tests/ES3/Implementation_Diagnostics/S15.5.4.11_D1.1_T2.js deleted file mode 100644 index 30398d3b2..000000000 --- a/tests/ES3/Implementation_Diagnostics/S15.5.4.11_D1.1_T2.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.11_D1.1_T2; -* @section: 15.5.4.11; -* @assertion: String.prototype.replace (searchValue, replaceValue) accepts only two arguments; -* @negative; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -"".replace(new RegExp()); -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Implementation_Diagnostics/S15.5.4.11_D1.1_T3.js b/tests/ES3/Implementation_Diagnostics/S15.5.4.11_D1.1_T3.js deleted file mode 100644 index 693bb9540..000000000 --- a/tests/ES3/Implementation_Diagnostics/S15.5.4.11_D1.1_T3.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.11_D1.1_T3; -* @section: 15.5.4.11; -* @assertion: String.prototype.replace (searchValue, replaceValue) accepts only two arguments; -* @negative; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -"".replace(""); -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Implementation_Diagnostics/S15.5.4.11_D1.1_T4.js b/tests/ES3/Implementation_Diagnostics/S15.5.4.11_D1.1_T4.js deleted file mode 100644 index be7207d8c..000000000 --- a/tests/ES3/Implementation_Diagnostics/S15.5.4.11_D1.1_T4.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.11_D1.1_T4; -* @section: 15.5.4.11; -* @assertion: String.prototype.replace (searchValue, replaceValue) accepts only two arguments; -* @negative; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -__2 = "1".replace("1","2",null, x); -if (__2 !== "2") { - $ERROR('#1: String.prototype.replace (searchValue, replaceValue) accepts only two arguments'); -} -// -////////////////////////////////////////////////////////////////////////////// - -var x; diff --git a/tests/ES3/Implementation_Diagnostics/S15.7.4.5_A1.2_D02.js b/tests/ES3/Implementation_Diagnostics/S15.7.4.5_A1.2_D02.js deleted file mode 100644 index 2c10f26d4..000000000 --- a/tests/ES3/Implementation_Diagnostics/S15.7.4.5_A1.2_D02.js +++ /dev/null @@ -1,131 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4.5_A1.2_D02; - * @section: 15.7.4.5; - * @assertion: If f < 0 or f > 20, throw a RangeError exception; - * @description: calling on Number object; -*/ - -//CHECK#2 -try{ - s = (new Number(1)).toFixed(-1); - $ERROR('#2: (new Number(1)).toFixed(-1) should throw RangeError, see the diagnostics tests for this section'); -} -catch(e){ - if(!(e instanceof RangeError)){ - $ERROR('#2: (new Number(1)).toFixed(-1) should throw RangeError, not the '+e); - } -} - -//CHECK#3 -try{ - s = (new Number(1)).toFixed(20.1); - $ERROR('#3: (new Number(1)).toFixed(20.1) should throw RangeError, see the diagnostics tests for this section'); -} -catch(e){ - if(!(e instanceof RangeError)){ - $ERROR('#3: (new Number(1)).toFixed(20.1) should throw RangeError, not the '+e); - } -} - -//CHECK#4 -try{ - s = (new Number(1)).toFixed(21); - $ERROR('#4: (new Number(1)).toFixed(21) should throw RangeError, see the diagnostics tests for this section'); -} -catch(e){ - if(!(e instanceof RangeError)){ - $ERROR('#4: (new Number(1)).toFixed(21) should throw RangeError, not the '+e); - } -} - -//CHECK#5 -try{ - s = (new Number(1)).toFixed(Number.POSITIVE_INFINITY); - $ERROR('#5: (new Number(1)).toFixed(Number.POSITIVE_INFINITY) should throw RangeError, see the diagnostics tests for this section'); -} -catch(e){ - if(!(e instanceof RangeError)){ - $ERROR('#5: (new Number(1)).toFixed(Number.POSITIVE_INFINITY) should throw RangeError, not the '+e); - } -} - -//CHECK#6 -try{ - s = (new Number(1)).toFixed(Number.NEGATIVE_INFINITY); - $ERROR('#6: (new Number(1)).toFixed(Number.NEGATIVE_INFINITY) should throw RangeError, see the diagnostics tests for this section'); -} -catch(e){ - if(!(e instanceof RangeError)){ - $ERROR('#6: (new Number(1)).toFixed(Number.NEGATIVE_INFINITY) should throw RangeError, not the '+e); - } -} - -//CHECK#7 -try{ - s = (new Number(1)).toFixed("-0.1"); - $ERROR('#1: (new Number(1)).toFixed("-0.1") should throw RangeError, see the diagnostics tests for this section'); -} -catch(e){ - if(!(e instanceof RangeError)){ - $ERROR('#1: (new Number(1)).toFixed("-0.1") should throw RangeError, not the '+e); - } -} - -//CHECK#2 -try{ - s = (new Number(1)).toFixed("-1"); - $ERROR('#2: (new Number(1)).toFixed("-1") should throw RangeError, see the diagnostics tests for this section'); -} -catch(e){ - if(!(e instanceof RangeError)){ - $ERROR('#2: (new Number(1)).toFixed("-1") should throw RangeError, not the '+e); - } -} - -//CHECK#3 -try{ - s = (new Number(1)).toFixed("20.1"); - $ERROR('#3: (new Number(1)).toFixed("20.1") should throw RangeError, see the diagnostics tests for this section'); -} -catch(e){ - if(!(e instanceof RangeError)){ - $ERROR('#3: (new Number(1)).toFixed("20.1") should throw RangeError, not the '+e); - } -} - -//CHECK#4 -try{ - s = (new Number(1)).toFixed(21); - $ERROR('#4: (new Number(1)).toFixed("21") should throw RangeError, see the diagnostics tests for this section'); -} -catch(e){ - if(!(e instanceof RangeError)){ - $ERROR('#4: (new Number(1)).toFixed("21") should throw RangeError, not the '+e); - } -} - -//CHECK#5 -try{ - s = (new Number(1)).toFixed("Infinity"); - $ERROR('#5: (new Number(1)).toFixed("Infinity") should throw RangeError, see the diagnostics tests for this section'); -} -catch(e){ - if(!(e instanceof RangeError)){ - $ERROR('#5: (new Number(1)).toFixed("Infinity") should throw RangeError, not the '+e); - } -} - -//CHECK#6 -try{ - s = (new Number(1)).toFixed("-Infinity"); - $ERROR('#6: (new Number(1)).toFixed("-Infinity") should throw RangeError, see the diagnostics tests for this section'); -} -catch(e){ - if(!(e instanceof RangeError)){ - $ERROR('#6: (new Number(1)).toFixed("-Infinity") should throw RangeError, not the '+e); - } -} - diff --git a/tests/ES3/Implementation_Diagnostics/S15.7.4.5_D1.2_T01.js b/tests/ES3/Implementation_Diagnostics/S15.7.4.5_D1.2_T01.js deleted file mode 100644 index 414eb5b4f..000000000 --- a/tests/ES3/Implementation_Diagnostics/S15.7.4.5_D1.2_T01.js +++ /dev/null @@ -1,132 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.7.4.5_A1.2_D01; - * @section: 15.7.4.5; - * @assertion: If f < 0 or f > 20, throw a RangeError exception; - * @description: calling on Number prototype object; -*/ - - -//CHECK#2 -try{ - s = Number.prototype.toFixed(-1); - $ERROR('#2: Number.prototype.toFixed(-1) should throw RangeError'); -} -catch(e){ - if(!(e instanceof RangeError)){ - $ERROR('#2: Number.prototype.toFixed(-1) should throw RangeError, not the '+e); - } -} - -//CHECK#3 -try{ - s = Number.prototype.toFixed(20.1); - $ERROR('#3: Number.prototype.toFixed(20.1) should throw RangeError'); -} -catch(e){ - if(!(e instanceof RangeError)){ - $ERROR('#3: Number.prototype.toFixed(20.1) should throw RangeError, not the '+e); - } -} - -//CHECK#4 -try{ - s = Number.prototype.toFixed(21); - $ERROR('#4: Number.prototype.toFixed(21) should throw RangeError'); -} -catch(e){ - if(!(e instanceof RangeError)){ - $ERROR('#4: Number.prototype.toFixed(21) should throw RangeError, not the '+e); - } -} - -//CHECK#5 -try{ - s = Number.prototype.toFixed(Number.POSITIVE_INFINITY); - $ERROR('#5: Number.prototype.toFixed(Number.POSITIVE_INFINITY) should throw RangeError'); -} -catch(e){ - if(!(e instanceof RangeError)){ - $ERROR('#5: Number.prototype.toFixed(Number.POSITIVE_INFINITY) should throw RangeError, not the '+e); - } -} - -//CHECK#6 -try{ - s = Number.prototype.toFixed(Number.NEGATIVE_INFINITY); - $ERROR('#6: Number.prototype.toFixed(Number.NEGATIVE_INFINITY) should throw RangeError'); -} -catch(e){ - if(!(e instanceof RangeError)){ - $ERROR('#6: Number.prototype.toFixed(Number.NEGATIVE_INFINITY) should throw RangeError, not the '+e); - } -} - -//CHECK#7 -try{ - s = Number.prototype.toFixed("-0.1"); - $ERROR('#1: Number.prototype.toFixed("-0.1") should throw RangeError'); -} -catch(e){ - if(!(e instanceof RangeError)){ - $ERROR('#1: Number.prototype.toFixed("-0.1") should throw RangeError, not the '+e); - } -} - -//CHECK#2 -try{ - s = Number.prototype.toFixed("-1"); - $ERROR('#2: Number.prototype.toFixed("-1") should throw RangeError'); -} -catch(e){ - if(!(e instanceof RangeError)){ - $ERROR('#2: Number.prototype.toFixed("-1") should throw RangeError, not the '+e); - } -} - -//CHECK#3 -try{ - s = Number.prototype.toFixed("20.1"); - $ERROR('#3: Number.prototype.toFixed("20.1") should throw RangeError'); -} -catch(e){ - if(!(e instanceof RangeError)){ - $ERROR('#3: Number.prototype.toFixed("20.1") should throw RangeError, not the '+e); - } -} - -//CHECK#4 -try{ - s = Number.prototype.toFixed(21); - $ERROR('#4: Number.prototype.toFixed("21") should throw RangeError'); -} -catch(e){ - if(!(e instanceof RangeError)){ - $ERROR('#4: Number.prototype.toFixed("21") should throw RangeError, not the '+e); - } -} - -//CHECK#5 -try{ - s = Number.prototype.toFixed("Infinity"); - $ERROR('#5: Number.prototype.toFixed("Infinity") should throw RangeError'); -} -catch(e){ - if(!(e instanceof RangeError)){ - $ERROR('#5: Number.prototype.toFixed("Infinity") should throw RangeError, not the '+e); - } -} - -//CHECK#6 -try{ - s = Number.prototype.toFixed("-Infinity"); - $ERROR('#6: Number.prototype.toFixed("-Infinity") should throw RangeError'); -} -catch(e){ - if(!(e instanceof RangeError)){ - $ERROR('#6: Number.prototype.toFixed("-Infinity") should throw RangeError, not the '+e); - } -} - diff --git a/tests/ES3/Implementation_Diagnostics/S15.9.1.14_D1.js b/tests/ES3/Implementation_Diagnostics/S15.9.1.14_D1.js deleted file mode 100644 index e1fdbde65..000000000 --- a/tests/ES3/Implementation_Diagnostics/S15.9.1.14_D1.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.9.1.14_D1; - * @section: 15.9.1.14; - * @assertion: Return an implementation-dependent choice of either - * ToInteger(Result(2)) or ToInteger(Result(2)) + (+0); -*/ - -// CHECK#1 -var d = new Date(-0); -if ( !( 1/d.valueOf() === Number.NEGATIVE_INFINITY) ) { - $PRINT('#1: TimeClip returns (ToInteger(value) + (+0))'); -} else { - $PRINT('#1: TimeClip returns (ToInteger(value))'); -} diff --git a/tests/ES3/Implementation_Diagnostics/S8.4_D1.1.js b/tests/ES3/Implementation_Diagnostics/S8.4_D1.1.js deleted file mode 100644 index e2b389ad7..000000000 --- a/tests/ES3/Implementation_Diagnostics/S8.4_D1.1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S8.4_D1.1; -* @section: 8.4, 15.5, 7.8.4; -* @assertion: Engines implements array like access to string elemenths, -* when we call squre brackets operator char at position specified returns -*/ - -__str = 'hail to robots!!!'; -str__=''; -for (ind = 0; ind < 17; ind++){ - str__ += __str[ind]; -} - -if (str__ == __str) { - $ERROR('When we call squre brackets operator char at position specified returns'); -} diff --git a/tests/ES3/Implementation_Diagnostics/S8.4_D1.2.js b/tests/ES3/Implementation_Diagnostics/S8.4_D1.2.js deleted file mode 100644 index 8eb6a1950..000000000 --- a/tests/ES3/Implementation_Diagnostics/S8.4_D1.2.js +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S8.4_D1.2; - * @section: 8.4, 7.8.4; - * @assertion: Some engines can implement array like access to string elemenths: - * Positions are indexed with nonnegative integers; -*/ - -str='asdfghjkl'; - -//////////////////////////////////////////////////////////// -// CHECK#1 -if (str[0] !== 'a'){ - $ERROR('#1: str="asdfghjkl";str[0]==="a"'); -} -// -///////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////// -// CHECK#2 -if (str[1] !== 's'){ - $ERROR('#2: str="asdfghjkl";str[1]==="s"'); -} -// -///////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////// -// CHECK#3 -if (str[8] !== 'l'){ - $ERROR('#3: str="asdfghjkl";str[8]==="l"'); -} -// -///////////////////////////////////////////////////////////// diff --git a/tests/ES3/Implementation_Diagnostics/S8.4_D2.1.js b/tests/ES3/Implementation_Diagnostics/S8.4_D2.1.js deleted file mode 100644 index e51128899..000000000 --- a/tests/ES3/Implementation_Diagnostics/S8.4_D2.1.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S8.4_D2.1; - * @section: 8.4, 15.5, 7.8.4; - * @assertion: Engines implements array like access to string elemenths, - * Index of element must be nonnegative; - * @negative; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -str='asdfghjkl'; - -var element=str[-1]; -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Implementation_Diagnostics/S8.4_D2.2.js b/tests/ES3/Implementation_Diagnostics/S8.4_D2.2.js deleted file mode 100644 index 34cd6288e..000000000 --- a/tests/ES3/Implementation_Diagnostics/S8.4_D2.2.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S8.4_D2.2; - * @section: 8.4, 15.5, 7.8.4; - * @assertion: Engines implements array like access to string elemenths, - * Index of elementh must be less than string length; - * @negative; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK# -str='asdfghjkl'; - -var char__ =str[99]; -// -////////////////////////////////////////////////////////////////////////////// - diff --git a/tests/ES3/Implementation_Diagnostics/S8.4_D2.3.js b/tests/ES3/Implementation_Diagnostics/S8.4_D2.3.js deleted file mode 100644 index 62f48a2b1..000000000 --- a/tests/ES3/Implementation_Diagnostics/S8.4_D2.3.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S8.4_D2.3; - * @section: 8.4, 15.5, 7.8.4; - * @assertion: Engines implements array like access to string elemenths, - * If index of elementh is greater or equals than string length an empty string returns; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK# -str='asdfghjkl'; - -var char__ =str[99]; -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (char__!== '') { - $ERROR('#1: If index of elementh is greater or equals than string length an emty string returns'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Implementation_Diagnostics/S8.4_D2.4.js b/tests/ES3/Implementation_Diagnostics/S8.4_D2.4.js deleted file mode 100644 index fca63a1e7..000000000 --- a/tests/ES3/Implementation_Diagnostics/S8.4_D2.4.js +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S8.4_D2.4; - * @section: 8.4, 15.5, 7.8.4; - * @assertion: Engines implements array like access to string elemenths, - * If index of elementh is less than 0 an empty string returns; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK# -str='asdfghjkl'; - -var char__ =str[-1]; -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (char__!== '') { - $ERROR('#1: If index of elementh is less than 0 an emty string returns'); -} -// -////////////////////////////////////////////////////////////////////////////// - -var __char =str[-5]; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (__char!== '') { - $ERROR('#2: If index of elementh is less than 0 an emty string returns'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Implementation_Diagnostics/S8.4_D2.5.js b/tests/ES3/Implementation_Diagnostics/S8.4_D2.5.js deleted file mode 100644 index 8b91f05c6..000000000 --- a/tests/ES3/Implementation_Diagnostics/S8.4_D2.5.js +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S8.4_D2.5; - * @section: 8.4, 15.5, 7.8.4; - * @assertion: Engines implements array like access to string elemenths, - * If index of elementh is less than 0 an undefined returns; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK# -str='asdfghjkl'; - -var char__ =str[-1]; -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof char__!== 'undefined') { - $ERROR('#1: If index of elementh is less than 0 an undefined returns'); -} -// -////////////////////////////////////////////////////////////////////////////// - -var __char =str[-5]; - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -if (typeof char__!== 'undefined') { - $ERROR('#2: If index of elementh is less than 0 an undefined returns'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Implementation_Diagnostics/S8.4_D2.6.js b/tests/ES3/Implementation_Diagnostics/S8.4_D2.6.js deleted file mode 100644 index e47af6b0b..000000000 --- a/tests/ES3/Implementation_Diagnostics/S8.4_D2.6.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S8.4_D2.6; - * @section: 8.4, 15.5, 7.8.4; - * @assertion: Engines implements array like access to string elemenths, - * If index of elementh is greater or equals than string length an undefined returns; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK# -str='asdfghjkl'; - -var char__ =str[99]; -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -if (typeof char__!== 'undefined') { - $ERROR('#1: If index of elementh is greater or equals than string length an emty string returns'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Implementation_Diagnostics/S8.4_D2.7.js b/tests/ES3/Implementation_Diagnostics/S8.4_D2.7.js deleted file mode 100644 index dc74ac2b0..000000000 --- a/tests/ES3/Implementation_Diagnostics/S8.4_D2.7.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S8.4_D2.7; - * @section: 8.4, 15.5, 7.8.4; - * @assertion: Engines implements array like access to string elemenths, - * If index of element must is equal to -1 an length of string returns; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -str='asdfghjkl'; - -if (str[-1] !== 9) { - $ERROR('#1: If index of element must is equal to -1 an length of string returns'); -} -// -////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////////// -//CHECK#2 -str=''; - -if (str[-1] !== 0) { - $ERROR('#2: If index of element must is equal to -1 an length of string returns'); -} -// -////////////////////////////////////////////////////////////////////////////// diff --git a/tests/ES3/Implementation_Diagnostics/S8.6_D1.1.js b/tests/ES3/Implementation_Diagnostics/S8.6_D1.1.js deleted file mode 100644 index 3df6cceb3..000000000 --- a/tests/ES3/Implementation_Diagnostics/S8.6_D1.1.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S8.6_D1.1; -* @section: 8.6; -* @assertion: An Object may have up to 4096 properties; -* @description: Create 4096 properties of any Object; -*/ - -////////////////////////////////////////////////////////////////////////////// -//CHECK#1 -COUNT=4096; -var props={}; -for (var i=0;i> ToInt32(AssignmentExpression); -*/ - -//CHECK#1 -try { - x >>= new String("-1"); - if (x === 0) { - $ERROR('#1: Result is not ToInt32(Undefined) >> ToInt32(AssignmentExpression)'); - } else { - $ERROR('#1: x >>= new String("-1") throw ReferenceError'); - } -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1: x >>= new String("-1") throw ReferenceError'); - } -} diff --git a/tests/ES3/Regression/S11.13.2_R2.3_T8.js b/tests/ES3/Regression/S11.13.2_R2.3_T8.js deleted file mode 100644 index cf0140762..000000000 --- a/tests/ES3/Regression/S11.13.2_R2.3_T8.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_R2.3_T8; - * @section: 11.13.2; - * @description: Result is not ToInt32(Undefined) >>> ToInt32(AssignmentExpression); -*/ - -//CHECK#1 -try { - x >>>= new String("-1"); - if (x === 0) { - $ERROR('#1: Result is not ToInt32(Undefined) >>> ToInt32(AssignmentExpression)'); - } else { - $ERROR('#1: x >>>= new String("-1") throw ReferenceError'); - } -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1: x >>>= new String("-1") throw ReferenceError'); - } -} diff --git a/tests/ES3/Regression/S11.13.2_R2.3_T9.js b/tests/ES3/Regression/S11.13.2_R2.3_T9.js deleted file mode 100644 index 6c9963e95..000000000 --- a/tests/ES3/Regression/S11.13.2_R2.3_T9.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S11.13.2_R2.3_T9; - * @section: 11.13.2; - * @description: Result is not ToInt32(Undefined) & ToInt32(AssignmentExpression); -*/ - -//CHECK#1 -try { - x &= new String("-1"); - if (x === 0) { - $ERROR('#1: Result is not ToInt32(Undefined) & ToInt32(AssignmentExpression)'); - } else { - $ERROR('#1: x &= new String("-1") throw ReferenceError'); - } -} -catch (e) { - if ((e instanceof ReferenceError) !== true) { - $ERROR('#1: x &= new String("-1") throw ReferenceError'); - } -} diff --git a/tests/ES3/Regression/S12.6.4_R1.js b/tests/ES3/Regression/S12.6.4_R1.js deleted file mode 100644 index 2a3a0de7d..000000000 --- a/tests/ES3/Regression/S12.6.4_R1.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.6.4_R1; - * @section: 12.6.4, 9.9; - * @description: The for-in statement must not throw TypeError for undefined - * values, cause it's a bug in the Standard; -*/ - -// CHECK#1 -try{ - var x1 = 1; - for(var y1 in undefined) x1 = 2; - if (x1 === 1) { - $PRINT("#1: passed"); - } else { - $ERROR("#1: The for-in statement must not fullfill, the value was changed"); - } -} -catch(e){ - if(e instanceof TypeError){ - $ERROR("#1: The for-in statement must not throw TypeError for undefined values, cause it's a bug in the Standard"); - } else { - $ERROR("#1: The for-in statement must not throw Error for undefined values, cause it's a bug in the Standard"); - } -} - -// CHECK#2 -try{ - var x2 = 1; - for(var y2 in this.foo) x2 = 2; - if (x2 === 1) { - $PRINT("#1: passed"); - } else { - $ERROR("#1: The for-in statement must not fullfill, the value was changed"); - } -} -catch(e){ - if(e instanceof TypeError){ - $ERROR("#1: The for-in statement must not throw TypeError for undefined values, cause it's a bug in the Standard"); - } else { - $ERROR("#1: The for-in statement must not throw Error for undefined values, cause it's a bug in the Standard"); - } -} diff --git a/tests/ES3/Regression/S12.6.4_R2.js b/tests/ES3/Regression/S12.6.4_R2.js deleted file mode 100644 index 8be5846ca..000000000 --- a/tests/ES3/Regression/S12.6.4_R2.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S12.6.4_R2; - * @section: 12.6.4, 9.9; - * @description: The for-in statement must not throw TypeError for null - * values, cause it's a bug in the Standard; -*/ - -// CHECK#1 -try{ - var x1 = 1; - for(var y1 in null) x1 = 2; - if (x1 === 1) { - $PRINT("#1: passed"); - } else { - $ERROR("#1: The for-in statement must not fullfill, the value was changed"); - } -} -catch(e){ - if(e instanceof TypeError){ - $ERROR("#1: The for-in statement must not throw TypeError for null values, cause it's a bug in the Standard"); - } else { - $ERROR("#1: The for-in statement must not throw Error for null values, cause it's a bug in the Standard"); - } -} - -// CHECK#2 -try{ - var x2 = 1; - for(var y2 in 'bbb'.match(/aaa/)) x2 = 2; - if (x2 === 1) { - $PRINT("#1: passed"); - } else { - $ERROR("#1: The for-in statement must not fullfill, the value was changed"); - } -} -catch(e){ - if(e instanceof TypeError){ - $ERROR("#1: The for-in statement must not throw TypeError for null values, cause it's a bug in the Standard"); - } else { - $ERROR("#1: The for-in statement must not throw Error for null values, cause it's a bug in the Standard"); - } -} diff --git a/tests/ES3/Regression/S15.1.1.1_R1.js b/tests/ES3/Regression/S15.1.1.1_R1.js deleted file mode 100644 index 682575171..000000000 --- a/tests/ES3/Regression/S15.1.1.1_R1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.1.1_R1; - * @section: 15.1.1.1, 9.3; - * @description: The NaN is not ReadOnly, check Number for resettability of result; -*/ - -// CHECK#1 -NaN = true; -Number(); -if (NaN !== true) { - NaN = true; - Number(); - if (NaN === true) { - $ERROR('#1: Resettability of result'); - } -} diff --git a/tests/ES3/Regression/S15.1.1.1_R2.1.js b/tests/ES3/Regression/S15.1.1.1_R2.1.js deleted file mode 100644 index 1a90460b0..000000000 --- a/tests/ES3/Regression/S15.1.1.1_R2.1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.1.1_R2.1; - * @section: 15.1.1.1, 15.1.2, 15.1.3; - * @description: The NaN is not ReadOnly, check isNaN Functions that use ToNumber; -*/ - -// CHECK#1 -NaN = 1; -if (isNaN(NaN) !== false) { - $ERROR('#1: NaN = 1; isNaN(NaN) === false'); -} diff --git a/tests/ES3/Regression/S15.1.1.1_R2.2.js b/tests/ES3/Regression/S15.1.1.1_R2.2.js deleted file mode 100644 index f9c18f33e..000000000 --- a/tests/ES3/Regression/S15.1.1.1_R2.2.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.1.1_R2.2; - * @section: 15.1.1.1, 15.1.2, 15.1.3; - * @description: The NaN is not ReadOnly, check isFinite Functions that use ToNumber; -*/ - -// CHECK#1 -NaN = 1; -if (isFinite(NaN) !== true) { - $ERROR('#1: NaN = 1; isFinite(NaN) === true'); -} diff --git a/tests/ES3/Regression/S15.1.1.1_R3.1.js b/tests/ES3/Regression/S15.1.1.1_R3.1.js deleted file mode 100644 index fc3bfbe25..000000000 --- a/tests/ES3/Regression/S15.1.1.1_R3.1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.1.1_R3.1; - * @section: 15.1.1.1, 15.1.2.4; - * @description: The NaN is not ReadOnly, check isNaN for resettability of result; -*/ - -// CHECK#1 -NaN = 1; -isNaN(); -if (NaN !== 1) { - NaN = 1; - isNaN(); - if (NaN === 1) { - $ERROR('#1: isNaN resettability of result for NaN value'); - } -} diff --git a/tests/ES3/Regression/S15.1.1.1_R3.2.js b/tests/ES3/Regression/S15.1.1.1_R3.2.js deleted file mode 100644 index 4a3d88a35..000000000 --- a/tests/ES3/Regression/S15.1.1.1_R3.2.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.1.1_R3.2; - * @section: 15.1.1.1, 15.1.2.4; - * @description: The NaN is not ReadOnly, check isFinite for resettability of result -*/ - -// CHECK#1 -NaN = 1; -isFinite(); -if (NaN !== 1) { - NaN = 1; - isFinite(); - if (NaN === 1) { - $ERROR('#1: isFinite resettability of result for NaN value'); - } -} diff --git a/tests/ES3/Regression/S15.1.1.1_R4.js b/tests/ES3/Regression/S15.1.1.1_R4.js deleted file mode 100644 index 1470dddd5..000000000 --- a/tests/ES3/Regression/S15.1.1.1_R4.js +++ /dev/null @@ -1,140 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.1.1_R4; - * @section: 15.1.1.1, 11; - * @description: The NaN is not ReadOnly, check Operators that use ToNumber; -*/ - -// CHECK#1 -NaN = true; -NaN++; -if (NaN !== 2) { - $ERROR('#1: NaN = true; NaN++; NaN === 2'); -} - -// CHECK#2 -NaN = true; -NaN--; -if (NaN !== 0) { - $ERROR('#2: NaN = true; NaN--; NaN === 0'); -} - -// CHECK#3 -NaN = true; -++NaN; -if (NaN !== 2) { - $ERROR('#3: NaN = true; ++NaN; NaN === 2'); -} - -// CHECK#4 -NaN = true; ---NaN; -if (NaN !== 0) { - $ERROR('#4: NaN = true; --NaN; NaN === 0'); -} - -// CHECK#5 -NaN = true; -+NaN; -if (NaN !== true) { - $ERROR('#5: NaN = true; +NaN; NaN === true'); - -} -// CHECK#6 -NaN = true; --NaN; -if (NaN !== true) { - $ERROR('#6: NaN = true; -NaN; NaN === true'); -} -// CHECK#7 -NaN = true; -NaN * 1; -if (NaN !== true) { - $ERROR('#7: NaN = true; NaN * 1; NaN === true'); -} - -// CHECK#8 -NaN = true; -NaN / 1; -if (NaN !== true) { - $ERROR('#8: NaN = true; NaN / 1; NaN === true'); -} - -// CHECK#9 -NaN = true; -NaN % 1; -if (NaN !== true) { - $ERROR('#9: NaN = true; NaN % 1; NaN === true'); -} - -// CHECK#10 -NaN = true; -NaN + 1; -if (NaN !== true) { - $ERROR('#10: NaN = true; NaN + 1; NaN === true'); -} - -// CHECK#11 -NaN = true; -NaN - 1; -if (NaN !== true) { - $ERROR('#11: NaN = true; NaN - 1; NaN === true'); -} - -// CHECK#12 -NaN = true; -NaN > 1; -if (NaN !== true) { - $ERROR('#12: NaN = true; NaN > 1; NaN === true'); -} - -// CHECK#13 -NaN = true; -NaN < 1; -if (NaN !== true) { - $ERROR('#13: NaN = true; NaN < 1; NaN === true'); -} - -// CHECK#14 -NaN = true; -NaN >= 1; -if (NaN !== true) { - $ERROR('#14: NaN = true; NaN >= 1; NaN === true'); -} - -// CHECK#15 -NaN = true; -NaN <= 1; -if (NaN !== true) { - $ERROR('#15: NaN = true; NaN <= 1; NaN === true'); -} - -// CHECK#16 -NaN = true; -NaN == true; -if (NaN !== true) { - $ERROR('#16: NaN = true; NaN == true; NaN === true'); -} - -// CHECK#17 -NaN = true; -NaN != 1; -if (NaN !== true) { - $ERROR('#17: NaN = true; NaN != 1; NaN === true'); -} - -// CHECK#18 -NaN = true; -NaN === true; -if (NaN !== true) { - $ERROR('#18: NaN = true; NaN === true; NaN === true'); -} - -// CHECK#19 -NaN = true; -NaN !== true; -if (NaN !== true) { - $ERROR('#19: NaN = true; NaN !== true; NaN === true'); -} diff --git a/tests/ES3/Regression/S15.1.1.2_R1.js b/tests/ES3/Regression/S15.1.1.2_R1.js deleted file mode 100644 index 8e9a69ea6..000000000 --- a/tests/ES3/Regression/S15.1.1.2_R1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.1.2_R1; - * @section: 15.1.1.2, 9.3; - * @description: The Infinity is not ReadOnly, check Number for resettability of result; -*/ - -// CHECK#1 -Infinity = false; -Number(); -if (Infinity !== false) { - Infinity = false; - Number(); - if (Infinity === false) { - $ERROR('#1: Resettability of result'); - } -} diff --git a/tests/ES3/Regression/S15.1.1.2_R2.1.js b/tests/ES3/Regression/S15.1.1.2_R2.1.js deleted file mode 100644 index 4cabefc2b..000000000 --- a/tests/ES3/Regression/S15.1.1.2_R2.1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.1.2_R2.1; - * @section: 15.1.1.2, 15.1.2, 15.1.3; - * @description: The Infinity is not ReadOnly, check isNaN Functions that use ToNumber; -*/ - -// CHECK#1 -Infinity = "string"; -if (isNaN(Infinity) !== true) { - $ERROR('#1: Infinity = "string"; isNaN(Infinity) === true'); -} diff --git a/tests/ES3/Regression/S15.1.1.2_R2.2.js b/tests/ES3/Regression/S15.1.1.2_R2.2.js deleted file mode 100644 index 4b75c98bb..000000000 --- a/tests/ES3/Regression/S15.1.1.2_R2.2.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.1.2_R2.2; - * @section: 15.1.1.2, 15.1.2, 15.1.3; - * @description: The Infinity is not ReadOnly, check isFinite Functions that use ToNumber; -*/ - -// CHECK#1 -Infinity = 0; -if (isFinite(Infinity) !== true) { - $ERROR('#1: Infinity = 0; isFinite(Infinity) === true'); -} diff --git a/tests/ES3/Regression/S15.1.1.2_R3.1.js b/tests/ES3/Regression/S15.1.1.2_R3.1.js deleted file mode 100644 index 916559cc9..000000000 --- a/tests/ES3/Regression/S15.1.1.2_R3.1.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.1.2_R3.1; - * @section: 15.1.1.2, 15.1.2.4; - * @description: The Infinity is not ReadOnly, check isNaN for resettability of result; -*/ - -// CHECK#1 -Infinity = "0"; -isNaN(); -if (Infinity !== "0") { - Infinity = "0"; - isNaN(); - if (Infinity === "0") { - $ERROR('#1: isNaN resettability of result for Infinity value'); - } -} diff --git a/tests/ES3/Regression/S15.1.1.2_R3.2.js b/tests/ES3/Regression/S15.1.1.2_R3.2.js deleted file mode 100644 index e34ae2e19..000000000 --- a/tests/ES3/Regression/S15.1.1.2_R3.2.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.1.2_R3.2; - * @section: 15.1.1.2, 15.1.2.4; - * @description: The Infinity is not ReadOnly, check isFinite for resettability of result -*/ - -// CHECK#1 -Infinity = 0; -isFinite(); -if (Infinity !== 0) { - Infinity = 0; - isFinite(); - if (Infinity === 0) { - $ERROR('#1: isFinite resettability of result for Infinity value'); - } -} diff --git a/tests/ES3/Regression/S15.1.1.2_R4.js b/tests/ES3/Regression/S15.1.1.2_R4.js deleted file mode 100644 index aedca921e..000000000 --- a/tests/ES3/Regression/S15.1.1.2_R4.js +++ /dev/null @@ -1,140 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.1.1.2_R4; - * @section: 15.1.1.2, 11; - * @description: The Infinity is not ReadOnly, check Operators that use ToNumber; -*/ - -// CHECK#1 -Infinity = true; -Infinity++; -if (Infinity !== 2) { - $ERROR('#1: Infinity = true; Infinity++; Infinity === 2'); -} - -// CHECK#2 -Infinity = true; -Infinity--; -if (Infinity !== 0) { - $ERROR('#2: Infinity = true; Infinity--; Infinity === 0'); -} - -// CHECK#3 -Infinity = true; -++Infinity; -if (Infinity !== 2) { - $ERROR('#3: Infinity = true; ++Infinity; Infinity === 2'); -} - -// CHECK#4 -Infinity = true; ---Infinity; -if (Infinity !== 0) { - $ERROR('#4: Infinity = true; --Infinity; Infinity === 0'); -} - -// CHECK#5 -Infinity = true; -+Infinity; -if (Infinity !== true) { - $ERROR('#5: Infinity = true; +Infinity; Infinity === true'); - -} -// CHECK#6 -Infinity = true; --Infinity; -if (Infinity !== true) { - $ERROR('#6: Infinity = true; -Infinity; Infinity === true'); -} -// CHECK#7 -Infinity = true; -Infinity * 1; -if (Infinity !== true) { - $ERROR('#7: Infinity = true; Infinity * 1; Infinity === true'); -} - -// CHECK#8 -Infinity = true; -Infinity / 1; -if (Infinity !== true) { - $ERROR('#8: Infinity = true; Infinity / 1; Infinity === true'); -} - -// CHECK#9 -Infinity = true; -Infinity % 1; -if (Infinity !== true) { - $ERROR('#9: Infinity = true; Infinity % 1; Infinity === true'); -} - -// CHECK#10 -Infinity = true; -Infinity + 1; -if (Infinity !== true) { - $ERROR('#10: Infinity = true; Infinity + 1; Infinity === true'); -} - -// CHECK#11 -Infinity = true; -Infinity - 1; -if (Infinity !== true) { - $ERROR('#11: Infinity = true; Infinity - 1; Infinity === true'); -} - -// CHECK#12 -Infinity = true; -Infinity > 1; -if (Infinity !== true) { - $ERROR('#12: Infinity = true; Infinity > 1; Infinity === true'); -} - -// CHECK#13 -Infinity = true; -Infinity < 1; -if (Infinity !== true) { - $ERROR('#13: Infinity = true; Infinity < 1; Infinity === true'); -} - -// CHECK#14 -Infinity = true; -Infinity >= 1; -if (Infinity !== true) { - $ERROR('#14: Infinity = true; Infinity >= 1; Infinity === true'); -} - -// CHECK#15 -Infinity = true; -Infinity <= 1; -if (Infinity !== true) { - $ERROR('#15: Infinity = true; Infinity <= 1; Infinity === true'); -} - -// CHECK#16 -Infinity = true; -Infinity == true; -if (Infinity !== true) { - $ERROR('#16: Infinity = true; Infinity == true; Infinity === true'); -} - -// CHECK#17 -Infinity = true; -Infinity != 1; -if (Infinity !== true) { - $ERROR('#17: Infinity = true; Infinity != 1; Infinity === true'); -} - -// CHECK#18 -Infinity = true; -Infinity === true; -if (Infinity !== true) { - $ERROR('#18: Infinity = true; Infinity === true; Infinity === true'); -} - -// CHECK#19 -Infinity = true; -Infinity !== true; -if (Infinity !== true) { - $ERROR('#19: Infinity = true; Infinity !== true; Infinity === true'); -} diff --git a/tests/ES3/Unicode/Unicode_218/S15.10.2.12_A1_T6.js b/tests/ES3/Unicode/Unicode_218/S15.10.2.12_A1_T6.js deleted file mode 100644 index ad120bb32..000000000 --- a/tests/ES3/Unicode/Unicode_218/S15.10.2.12_A1_T6.js +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.10.2.12_A1_T6; - * @section: 15.10.2.12, 7.2, 7.3; - * @assertion: The production CharacterClassEscape :: s evaluates by returning the set of characters - * containing the characters that are on the right-hand side of the WhiteSpace (7.2) or LineTerminator (7.3) productions; - * @description: Complex test; -*/ - -//CHECK#1 -var regexp_s = /\s/; -Zs = [[0x2000, 0x200B], [0x3000, 0x3000]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Zs.length; indexI++) { - for (indexJ = Zs[indexI][0]; indexJ <= Zs[indexI][1]; indexJ++) { - var str = String.fromCharCode(indexJ); - var arr = regexp_s.exec(str); - if ((arr === null) || (arr[0] !== str)) { - var hex = decimalToHexString(indexJ); - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_218/S15.10.2.12_A2_T6.js b/tests/ES3/Unicode/Unicode_218/S15.10.2.12_A2_T6.js deleted file mode 100644 index 1fe7ab7d3..000000000 --- a/tests/ES3/Unicode/Unicode_218/S15.10.2.12_A2_T6.js +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.10.2.12_A2_T6; - * @section: 15.10.2.12, 7.2, 7.3; -* @assertion: The production CharacterClassEscape :: S evaluates by returning -* the set of all characters not included in the set returned by -* CharacterClassEscape :: s; - * @description: Complex test; -*/ - -//CHECK#1 -var regexp_S = /\S/; -Zs = [[0x2000, 0x200B], [0x3000, 0x3000]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Zs.length; indexI++) { - for (indexJ = Zs[indexI][0]; indexJ <= Zs[indexI][1]; indexJ++) { - if (regexp_S.exec(String.fromCharCode(indexJ)) !== null) { - var hex = decimalToHexString(indexJ); - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_218/S15.5.4.16_A1.js b/tests/ES3/Unicode/Unicode_218/S15.5.4.16_A1.js deleted file mode 100644 index e1d0af6fb..000000000 --- a/tests/ES3/Unicode/Unicode_218/S15.5.4.16_A1.js +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.16_A1; -* @section: 15.5.4.16; -* @assertion: The characters in UnicodeData.txt, but not in SpecialCasings.txt are converted one by one; -* @description: Complex test; -*/ - -//CHECK -LowerCase = [[0x0041, 0x0061], [0x0042, 0x0062], [0x0043, 0x0063], [0x0044, 0x0064], [0x0045, 0x0065], [0x0046, 0x0066], [0x0047, 0x0067], [0x0048, 0x0068], [0x0049, 0x0069], [0x004A, 0x006A], [0x004B, 0x006B], [0x004C, 0x006C], [0x004D, 0x006D], [0x004E, 0x006E], [0x004F, 0x006F], [0x0050, 0x0070], [0x0051, 0x0071], [0x0052, 0x0072], [0x0053, 0x0073], [0x0054, 0x0074], [0x0055, 0x0075], [0x0056, 0x0076], [0x0057, 0x0077], [0x0058, 0x0078], [0x0059, 0x0079], [0x005A, 0x007A], [0x00C0, 0x00E0], [0x00C1, 0x00E1], [0x00C2, 0x00E2], [0x00C3, 0x00E3], [0x00C4, 0x00E4], [0x00C5, 0x00E5], [0x00C6, 0x00E6], [0x00C7, 0x00E7], [0x00C8, 0x00E8], [0x00C9, 0x00E9], [0x00CA, 0x00EA], [0x00CB, 0x00EB], [0x00CC, 0x00EC], [0x00CD, 0x00ED], [0x00CE, 0x00EE], [0x00CF, 0x00EF], [0x00D0, 0x00F0], [0x00D1, 0x00F1], [0x00D2, 0x00F2], [0x00D3, 0x00F3], [0x00D4, 0x00F4], [0x00D5, 0x00F5], [0x00D6, 0x00F6], [0x00D8, 0x00F8], [0x00D9, 0x00F9], [0x00DA, 0x00FA], [0x00DB, 0x00FB], [0x00DC, 0x00FC], [0x00DD, 0x00FD], [0x00DE, 0x00FE], [0x0100, 0x0101], [0x0102, 0x0103], [0x0104, 0x0105], [0x0106, 0x0107], [0x0108, 0x0109], [0x010A, 0x010B], [0x010C, 0x010D], [0x010E, 0x010F], [0x0110, 0x0111], [0x0112, 0x0113], [0x0114, 0x0115], [0x0116, 0x0117], [0x0118, 0x0119], [0x011A, 0x011B], [0x011C, 0x011D], [0x011E, 0x011F], [0x0120, 0x0121], [0x0122, 0x0123], [0x0124, 0x0125], [0x0126, 0x0127], [0x0128, 0x0129], [0x012A, 0x012B], [0x012C, 0x012D], [0x012E, 0x012F], [0x0130, 0x0069], [0x0132, 0x0133], [0x0134, 0x0135], [0x0136, 0x0137], [0x0139, 0x013A], [0x013B, 0x013C], [0x013D, 0x013E], [0x013F, 0x0140], [0x0141, 0x0142], [0x0143, 0x0144], [0x0145, 0x0146], [0x0147, 0x0148], [0x014A, 0x014B], [0x014C, 0x014D], [0x014E, 0x014F], [0x0150, 0x0151], [0x0152, 0x0153], [0x0154, 0x0155], [0x0156, 0x0157], [0x0158, 0x0159], [0x015A, 0x015B], [0x015C, 0x015D], [0x015E, 0x015F], [0x0160, 0x0161], [0x0162, 0x0163], [0x0164, 0x0165], [0x0166, 0x0167], [0x0168, 0x0169], [0x016A, 0x016B], [0x016C, 0x016D], [0x016E, 0x016F], [0x0170, 0x0171], [0x0172, 0x0173], [0x0174, 0x0175], [0x0176, 0x0177], [0x0178, 0x00FF], [0x0179, 0x017A], [0x017B, 0x017C], [0x017D, 0x017E], [0x0181, 0x0253], [0x0182, 0x0183], [0x0184, 0x0185], [0x0186, 0x0254], [0x0187, 0x0188], [0x0189, 0x0256], [0x018A, 0x0257], [0x018B, 0x018C], [0x018E, 0x01DD], [0x018F, 0x0259], [0x0190, 0x025B], [0x0191, 0x0192], [0x0193, 0x0260], [0x0194, 0x0263], [0x0196, 0x0269], [0x0197, 0x0268], [0x0198, 0x0199], [0x019C, 0x026F], [0x019D, 0x0272], [0x019F, 0x0275], [0x01A0, 0x01A1], [0x01A2, 0x01A3], [0x01A4, 0x01A5], [0x01A6, 0x0280], [0x01A7, 0x01A8], [0x01A9, 0x0283], [0x01AC, 0x01AD], [0x01AE, 0x0288], [0x01AF, 0x01B0], [0x01B1, 0x028A], [0x01B2, 0x028B], [0x01B3, 0x01B4], [0x01B5, 0x01B6], [0x01B7, 0x0292], [0x01B8, 0x01B9], [0x01BC, 0x01BD], [0x01C4, 0x01C6], [0x01C5, 0x01C6], [0x01C7, 0x01C9], [0x01C8, 0x01C9], [0x01CA, 0x01CC], [0x01CB, 0x01CC], [0x01CD, 0x01CE], [0x01CF, 0x01D0], [0x01D1, 0x01D2], [0x01D3, 0x01D4], [0x01D5, 0x01D6], [0x01D7, 0x01D8], [0x01D9, 0x01DA], [0x01DB, 0x01DC], [0x01DE, 0x01DF], [0x01E0, 0x01E1], [0x01E2, 0x01E3], [0x01E4, 0x01E5], [0x01E6, 0x01E7], [0x01E8, 0x01E9], [0x01EA, 0x01EB], [0x01EC, 0x01ED], [0x01EE, 0x01EF], [0x01F1, 0x01F3], [0x01F2, 0x01F3], [0x01F4, 0x01F5], [0x01FA, 0x01FB], [0x01FC, 0x01FD], [0x01FE, 0x01FF], [0x0200, 0x0201], [0x0202, 0x0203], [0x0204, 0x0205], [0x0206, 0x0207], [0x0208, 0x0209], [0x020A, 0x020B], [0x020C, 0x020D], [0x020E, 0x020F], [0x0210, 0x0211], [0x0212, 0x0213], [0x0214, 0x0215], [0x0216, 0x0217], [0x0386, 0x03AC], [0x0388, 0x03AD], [0x0389, 0x03AE], [0x038A, 0x03AF], [0x038C, 0x03CC], [0x038E, 0x03CD], [0x038F, 0x03CE], [0x0391, 0x03B1], [0x0392, 0x03B2], [0x0393, 0x03B3], [0x0394, 0x03B4], [0x0395, 0x03B5], [0x0396, 0x03B6], [0x0397, 0x03B7], [0x0398, 0x03B8], [0x0399, 0x03B9], [0x039A, 0x03BA], [0x039B, 0x03BB], [0x039C, 0x03BC], [0x039D, 0x03BD], [0x039E, 0x03BE], [0x039F, 0x03BF], [0x03A0, 0x03C0], [0x03A1, 0x03C1], [0x03A4, 0x03C4], [0x03A5, 0x03C5], [0x03A6, 0x03C6], [0x03A7, 0x03C7], [0x03A8, 0x03C8], [0x03A9, 0x03C9], [0x03AA, 0x03CA], [0x03AB, 0x03CB], [0x03E2, 0x03E3], [0x03E4, 0x03E5], [0x03E6, 0x03E7], [0x03E8, 0x03E9], [0x03EA, 0x03EB], [0x03EC, 0x03ED], [0x03EE, 0x03EF], [0x0401, 0x0451], [0x0402, 0x0452], [0x0403, 0x0453], [0x0404, 0x0454], [0x0405, 0x0455], [0x0406, 0x0456], [0x0407, 0x0457], [0x0408, 0x0458], [0x0409, 0x0459], [0x040A, 0x045A], [0x040B, 0x045B], [0x040C, 0x045C], [0x040E, 0x045E], [0x040F, 0x045F], [0x0410, 0x0430], [0x0411, 0x0431], [0x0412, 0x0432], [0x0413, 0x0433], [0x0414, 0x0434], [0x0415, 0x0435], [0x0416, 0x0436], [0x0417, 0x0437], [0x0418, 0x0438], [0x0419, 0x0439], [0x041A, 0x043A], [0x041B, 0x043B], [0x041C, 0x043C], [0x041D, 0x043D], [0x041E, 0x043E], [0x041F, 0x043F], [0x0420, 0x0440], [0x0421, 0x0441], [0x0422, 0x0442], [0x0423, 0x0443], [0x0424, 0x0444], [0x0425, 0x0445], [0x0426, 0x0446], [0x0427, 0x0447], [0x0428, 0x0448], [0x0429, 0x0449], [0x042A, 0x044A], [0x042B, 0x044B], [0x042C, 0x044C], [0x042D, 0x044D], [0x042E, 0x044E], [0x042F, 0x044F], [0x0460, 0x0461], [0x0462, 0x0463], [0x0464, 0x0465], [0x0466, 0x0467], [0x0468, 0x0469], [0x046A, 0x046B], [0x046C, 0x046D], [0x046E, 0x046F], [0x0470, 0x0471], [0x0472, 0x0473], [0x0474, 0x0475], [0x0476, 0x0477], [0x0478, 0x0479], [0x047A, 0x047B], [0x047C, 0x047D], [0x047E, 0x047F], [0x0480, 0x0481], [0x0490, 0x0491], [0x0492, 0x0493], [0x0494, 0x0495], [0x0496, 0x0497], [0x0498, 0x0499], [0x049A, 0x049B], [0x049C, 0x049D], [0x049E, 0x049F], [0x04A0, 0x04A1], [0x04A2, 0x04A3], [0x04A4, 0x04A5], [0x04A6, 0x04A7], [0x04A8, 0x04A9], [0x04AA, 0x04AB], [0x04AC, 0x04AD], [0x04AE, 0x04AF], [0x04B0, 0x04B1], [0x04B2, 0x04B3], [0x04B4, 0x04B5], [0x04B6, 0x04B7], [0x04B8, 0x04B9], [0x04BA, 0x04BB], [0x04BC, 0x04BD], [0x04BE, 0x04BF], [0x04C1, 0x04C2], [0x04C3, 0x04C4], [0x04C7, 0x04C8], [0x04CB, 0x04CC], [0x04D0, 0x04D1], [0x04D2, 0x04D3], [0x04D4, 0x04D5], [0x04D6, 0x04D7], [0x04D8, 0x04D9], [0x04DA, 0x04DB], [0x04DC, 0x04DD], [0x04DE, 0x04DF], [0x04E0, 0x04E1], [0x04E2, 0x04E3], [0x04E4, 0x04E5], [0x04E6, 0x04E7], [0x04E8, 0x04E9], [0x04EA, 0x04EB], [0x04EE, 0x04EF], [0x04F0, 0x04F1], [0x04F2, 0x04F3], [0x04F4, 0x04F5], [0x04F8, 0x04F9], [0x0531, 0x0561], [0x0532, 0x0562], [0x0533, 0x0563], [0x0534, 0x0564], [0x0535, 0x0565], [0x0536, 0x0566], [0x0537, 0x0567], [0x0538, 0x0568], [0x0539, 0x0569], [0x053A, 0x056A], [0x053B, 0x056B], [0x053C, 0x056C], [0x053D, 0x056D], [0x053E, 0x056E], [0x053F, 0x056F], [0x0540, 0x0570], [0x0541, 0x0571], [0x0542, 0x0572], [0x0543, 0x0573], [0x0544, 0x0574], [0x0545, 0x0575], [0x0546, 0x0576], [0x0547, 0x0577], [0x0548, 0x0578], [0x0549, 0x0579], [0x054A, 0x057A], [0x054B, 0x057B], [0x054C, 0x057C], [0x054D, 0x057D], [0x054E, 0x057E], [0x054F, 0x057F], [0x0550, 0x0580], [0x0551, 0x0581], [0x0552, 0x0582], [0x0553, 0x0583], [0x0554, 0x0584], [0x0555, 0x0585], [0x0556, 0x0586], [0x10A0, 0x10D0], [0x10A1, 0x10D1], [0x10A2, 0x10D2], [0x10A3, 0x10D3], [0x10A4, 0x10D4], [0x10A5, 0x10D5], [0x10A6, 0x10D6], [0x10A7, 0x10D7], [0x10A8, 0x10D8], [0x10A9, 0x10D9], [0x10AA, 0x10DA], [0x10AB, 0x10DB], [0x10AC, 0x10DC], [0x10AD, 0x10DD], [0x10AE, 0x10DE], [0x10AF, 0x10DF], [0x10B0, 0x10E0], [0x10B1, 0x10E1], [0x10B2, 0x10E2], [0x10B3, 0x10E3], [0x10B4, 0x10E4], [0x10B5, 0x10E5], [0x10B6, 0x10E6], [0x10B7, 0x10E7], [0x10B8, 0x10E8], [0x10B9, 0x10E9], [0x10BA, 0x10EA], [0x10BB, 0x10EB], [0x10BC, 0x10EC], [0x10BD, 0x10ED], [0x10BE, 0x10EE], [0x10BF, 0x10EF], [0x10C0, 0x10F0], [0x10C1, 0x10F1], [0x10C2, 0x10F2], [0x10C3, 0x10F3], [0x10C4, 0x10F4], [0x10C5, 0x10F5], [0x1E00, 0x1E01], [0x1E02, 0x1E03], [0x1E04, 0x1E05], [0x1E06, 0x1E07], [0x1E08, 0x1E09], [0x1E0A, 0x1E0B], [0x1E0C, 0x1E0D], [0x1E0E, 0x1E0F], [0x1E10, 0x1E11], [0x1E12, 0x1E13], [0x1E14, 0x1E15], [0x1E16, 0x1E17], [0x1E18, 0x1E19], [0x1E1A, 0x1E1B], [0x1E1C, 0x1E1D], [0x1E1E, 0x1E1F], [0x1E20, 0x1E21], [0x1E22, 0x1E23], [0x1E24, 0x1E25], [0x1E26, 0x1E27], [0x1E28, 0x1E29], [0x1E2A, 0x1E2B], [0x1E2C, 0x1E2D], [0x1E2E, 0x1E2F], [0x1E30, 0x1E31], [0x1E32, 0x1E33], [0x1E34, 0x1E35], [0x1E36, 0x1E37], [0x1E38, 0x1E39], [0x1E3A, 0x1E3B], [0x1E3C, 0x1E3D], [0x1E3E, 0x1E3F], [0x1E40, 0x1E41], [0x1E42, 0x1E43], [0x1E44, 0x1E45], [0x1E46, 0x1E47], [0x1E48, 0x1E49], [0x1E4A, 0x1E4B], [0x1E4C, 0x1E4D], [0x1E4E, 0x1E4F], [0x1E50, 0x1E51], [0x1E52, 0x1E53], [0x1E54, 0x1E55], [0x1E56, 0x1E57], [0x1E58, 0x1E59], [0x1E5A, 0x1E5B], [0x1E5C, 0x1E5D], [0x1E5E, 0x1E5F], [0x1E60, 0x1E61], [0x1E62, 0x1E63], [0x1E64, 0x1E65], [0x1E66, 0x1E67], [0x1E68, 0x1E69], [0x1E6A, 0x1E6B], [0x1E6C, 0x1E6D], [0x1E6E, 0x1E6F], [0x1E70, 0x1E71], [0x1E72, 0x1E73], [0x1E74, 0x1E75], [0x1E76, 0x1E77], [0x1E78, 0x1E79], [0x1E7A, 0x1E7B], [0x1E7C, 0x1E7D], [0x1E7E, 0x1E7F], [0x1E80, 0x1E81], [0x1E82, 0x1E83], [0x1E84, 0x1E85], [0x1E86, 0x1E87], [0x1E88, 0x1E89], [0x1E8A, 0x1E8B], [0x1E8C, 0x1E8D], [0x1E8E, 0x1E8F], [0x1E90, 0x1E91], [0x1E92, 0x1E93], [0x1E94, 0x1E95], [0x1EA0, 0x1EA1], [0x1EA2, 0x1EA3], [0x1EA4, 0x1EA5], [0x1EA6, 0x1EA7], [0x1EA8, 0x1EA9], [0x1EAA, 0x1EAB], [0x1EAC, 0x1EAD], [0x1EAE, 0x1EAF], [0x1EB0, 0x1EB1], [0x1EB2, 0x1EB3], [0x1EB4, 0x1EB5], [0x1EB6, 0x1EB7], [0x1EB8, 0x1EB9], [0x1EBA, 0x1EBB], [0x1EBC, 0x1EBD], [0x1EBE, 0x1EBF], [0x1EC0, 0x1EC1], [0x1EC2, 0x1EC3], [0x1EC4, 0x1EC5], [0x1EC6, 0x1EC7], [0x1EC8, 0x1EC9], [0x1ECA, 0x1ECB], [0x1ECC, 0x1ECD], [0x1ECE, 0x1ECF], [0x1ED0, 0x1ED1], [0x1ED2, 0x1ED3], [0x1ED4, 0x1ED5], [0x1ED6, 0x1ED7], [0x1ED8, 0x1ED9], [0x1EDA, 0x1EDB], [0x1EDC, 0x1EDD], [0x1EDE, 0x1EDF], [0x1EE0, 0x1EE1], [0x1EE2, 0x1EE3], [0x1EE4, 0x1EE5], [0x1EE6, 0x1EE7], [0x1EE8, 0x1EE9], [0x1EEA, 0x1EEB], [0x1EEC, 0x1EED], [0x1EEE, 0x1EEF], [0x1EF0, 0x1EF1], [0x1EF2, 0x1EF3], [0x1EF4, 0x1EF5], [0x1EF6, 0x1EF7], [0x1EF8, 0x1EF9], [0x1F08, 0x1F00], [0x1F09, 0x1F01], [0x1F0A, 0x1F02], [0x1F0B, 0x1F03], [0x1F0C, 0x1F04], [0x1F0D, 0x1F05], [0x1F0E, 0x1F06], [0x1F0F, 0x1F07], [0x1F18, 0x1F10], [0x1F19, 0x1F11], [0x1F1A, 0x1F12], [0x1F1B, 0x1F13], [0x1F1C, 0x1F14], [0x1F1D, 0x1F15], [0x1F28, 0x1F20], [0x1F29, 0x1F21], [0x1F2A, 0x1F22], [0x1F2B, 0x1F23], [0x1F2C, 0x1F24], [0x1F2D, 0x1F25], [0x1F2E, 0x1F26], [0x1F2F, 0x1F27], [0x1F38, 0x1F30], [0x1F39, 0x1F31], [0x1F3A, 0x1F32], [0x1F3B, 0x1F33], [0x1F3C, 0x1F34], [0x1F3D, 0x1F35], [0x1F3E, 0x1F36], [0x1F3F, 0x1F37], [0x1F48, 0x1F40], [0x1F49, 0x1F41], [0x1F4A, 0x1F42], [0x1F4B, 0x1F43], [0x1F4C, 0x1F44], [0x1F4D, 0x1F45], [0x1F59, 0x1F51], [0x1F5B, 0x1F53], [0x1F5D, 0x1F55], [0x1F5F, 0x1F57], [0x1F68, 0x1F60], [0x1F69, 0x1F61], [0x1F6A, 0x1F62], [0x1F6B, 0x1F63], [0x1F6C, 0x1F64], [0x1F6D, 0x1F65], [0x1F6E, 0x1F66], [0x1F6F, 0x1F67], [0x1F88, 0x1F80], [0x1F89, 0x1F81], [0x1F8A, 0x1F82], [0x1F8B, 0x1F83], [0x1F8C, 0x1F84], [0x1F8D, 0x1F85], [0x1F8E, 0x1F86], [0x1F8F, 0x1F87], [0x1F98, 0x1F90], [0x1F99, 0x1F91], [0x1F9A, 0x1F92], [0x1F9B, 0x1F93], [0x1F9C, 0x1F94], [0x1F9D, 0x1F95], [0x1F9E, 0x1F96], [0x1F9F, 0x1F97], [0x1FA8, 0x1FA0], [0x1FA9, 0x1FA1], [0x1FAA, 0x1FA2], [0x1FAB, 0x1FA3], [0x1FAC, 0x1FA4], [0x1FAD, 0x1FA5], [0x1FAE, 0x1FA6], [0x1FAF, 0x1FA7], [0x1FB8, 0x1FB0], [0x1FB9, 0x1FB1], [0x1FBA, 0x1F70], [0x1FBB, 0x1F71], [0x1FBC, 0x1FB3], [0x1FC8, 0x1F72], [0x1FC9, 0x1F73], [0x1FCA, 0x1F74], [0x1FCB, 0x1F75], [0x1FCC, 0x1FC3], [0x1FD8, 0x1FD0], [0x1FD9, 0x1FD1], [0x1FDA, 0x1F76], [0x1FDB, 0x1F77], [0x1FE8, 0x1FE0], [0x1FE9, 0x1FE1], [0x1FEA, 0x1F7A], [0x1FEB, 0x1F7B], [0x1FEC, 0x1FE5], [0x1FF8, 0x1F78], [0x1FF9, 0x1F79], [0x1FFA, 0x1F7C], [0x1FFB, 0x1F7D], [0x1FFC, 0x1FF3], [0x2160, 0x2170], [0x2161, 0x2171], [0x2162, 0x2172], [0x2163, 0x2173], [0x2164, 0x2174], [0x2165, 0x2175], [0x2166, 0x2176], [0x2167, 0x2177], [0x2168, 0x2178], [0x2169, 0x2179], [0x216A, 0x217A], [0x216B, 0x217B], [0x216C, 0x217C], [0x216D, 0x217D], [0x216E, 0x217E], [0x216F, 0x217F], [0x24B6, 0x24D0], [0x24B7, 0x24D1], [0x24B8, 0x24D2], [0x24B9, 0x24D3], [0x24BA, 0x24D4], [0x24BB, 0x24D5], [0x24BC, 0x24D6], [0x24BD, 0x24D7], [0x24BE, 0x24D8], [0x24BF, 0x24D9], [0x24C0, 0x24DA], [0x24C1, 0x24DB], [0x24C2, 0x24DC], [0x24C3, 0x24DD], [0x24C4, 0x24DE], [0x24C5, 0x24DF], [0x24C6, 0x24E0], [0x24C7, 0x24E1], [0x24C8, 0x24E2], [0x24C9, 0x24E3], [0x24CA, 0x24E4], [0x24CB, 0x24E5], [0x24CC, 0x24E6], [0x24CD, 0x24E7], [0x24CE, 0x24E8], [0x24CF, 0x24E9], [0xFF21, 0xFF41], [0xFF22, 0xFF42], [0xFF23, 0xFF43], [0xFF24, 0xFF44], [0xFF25, 0xFF45], [0xFF26, 0xFF46], [0xFF27, 0xFF47], [0xFF28, 0xFF48], [0xFF29, 0xFF49], [0xFF2A, 0xFF4A], [0xFF2B, 0xFF4B], [0xFF2C, 0xFF4C], [0xFF2D, 0xFF4D], [0xFF2E, 0xFF4E], [0xFF2F, 0xFF4F], [0xFF30, 0xFF50], [0xFF31, 0xFF51], [0xFF32, 0xFF52], [0xFF33, 0xFF53], [0xFF34, 0xFF54], [0xFF35, 0xFF55], [0xFF36, 0xFF56], [0xFF37, 0xFF57], [0xFF38, 0xFF58], [0xFF39, 0xFF59], [0xFF3A, 0xFF5A]]; - -errorCount = 0; -count = 0; - -for (index = 0; index < LowerCase.length; index++) { - var capitalI = LowerCase[index][0]; - var capitalS = String.fromCharCode(capitalI); - var smallI = LowerCase[index][1]; - var smallS = String.fromCharCode(smallI); - if (capitalS.toLowerCase() !== smallS) { - var hexC = decimalToHexString(capitalI); - var hexS = decimalToHexString(smallI); - $ERROR('#' + hexC + '->' + hexS + ' '); - errorCount++; - } - count++; -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_218/S15.5.4.16_A2.js b/tests/ES3/Unicode/Unicode_218/S15.5.4.16_A2.js deleted file mode 100644 index 925233708..000000000 --- a/tests/ES3/Unicode/Unicode_218/S15.5.4.16_A2.js +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.16_A2; -* @section: 15.5.4.16; -* @assertion: The characters in SpecialCasings.txt are converted by multi-character results; -* @description: Complex test; -*/ - -//CHECK -LowerSpecialCase = [["\u03A3", "\u03C2"]]; - -errorCount = 0; -count = 0; - -for (index = 0; index < LowerSpecialCase.length; index++) { - var capitalI = LowerSpecialCase[index][0]; - var capitalS = String.fromCharCode(capitalI); - var smallI = LowerSpecialCase[index][1]; - var smallS = String.fromCharCode(smallI); - if (capitalS.toLowerCase() !== smallS) { - var hexC = decimalToHexString(capitalI); - var hexS = decimalToHexString(smallI); - $ERROR('#' + hexC + '->' + hexS + ' '); - errorCount++; - } - count++; -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_218/S15.5.4.18_A1.js b/tests/ES3/Unicode/Unicode_218/S15.5.4.18_A1.js deleted file mode 100644 index 7dbad6c7a..000000000 --- a/tests/ES3/Unicode/Unicode_218/S15.5.4.18_A1.js +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.18_A1; -* @section: 15.5.4.18; -* @assertion: The characters in UnicodeData.txt, but not in SpecialCasings.txt are converted one by one; -* @description: Complex test; -*/ - -//CHECK -UpperCase = [[0x0061, 0x0041], [0x0062, 0x0042], [0x0063, 0x0043], [0x0064, 0x0044], [0x0065, 0x0045], [0x0066, 0x0046], [0x0067, 0x0047], [0x0068, 0x0048], [0x006A, 0x004A], [0x006B, 0x004B], [0x006C, 0x004C], [0x006D, 0x004D], [0x006E, 0x004E], [0x006F, 0x004F], [0x0070, 0x0050], [0x0071, 0x0051], [0x0072, 0x0052], [0x0073, 0x0053], [0x0074, 0x0054], [0x0075, 0x0055], [0x0076, 0x0056], [0x0077, 0x0057], [0x0078, 0x0058], [0x0079, 0x0059], [0x007A, 0x005A], [0x00E0, 0x00C0], [0x00E1, 0x00C1], [0x00E2, 0x00C2], [0x00E3, 0x00C3], [0x00E4, 0x00C4], [0x00E5, 0x00C5], [0x00E6, 0x00C6], [0x00E7, 0x00C7], [0x00E8, 0x00C8], [0x00E9, 0x00C9], [0x00EA, 0x00CA], [0x00EB, 0x00CB], [0x00EC, 0x00CC], [0x00ED, 0x00CD], [0x00EE, 0x00CE], [0x00EF, 0x00CF], [0x00F0, 0x00D0], [0x00F1, 0x00D1], [0x00F2, 0x00D2], [0x00F3, 0x00D3], [0x00F4, 0x00D4], [0x00F5, 0x00D5], [0x00F6, 0x00D6], [0x00F8, 0x00D8], [0x00F9, 0x00D9], [0x00FA, 0x00DA], [0x00FB, 0x00DB], [0x00FC, 0x00DC], [0x00FD, 0x00DD], [0x00FE, 0x00DE], [0x00FF, 0x0178], [0x0101, 0x0100], [0x0103, 0x0102], [0x0105, 0x0104], [0x0107, 0x0106], [0x0109, 0x0108], [0x010B, 0x010A], [0x010D, 0x010C], [0x010F, 0x010E], [0x0111, 0x0110], [0x0113, 0x0112], [0x0115, 0x0114], [0x0117, 0x0116], [0x0119, 0x0118], [0x011B, 0x011A], [0x011D, 0x011C], [0x011F, 0x011E], [0x0121, 0x0120], [0x0123, 0x0122], [0x0125, 0x0124], [0x0127, 0x0126], [0x0129, 0x0128], [0x012B, 0x012A], [0x012D, 0x012C], [0x012F, 0x012E], [0x0131, 0x0049], [0x0133, 0x0132], [0x0135, 0x0134], [0x0137, 0x0136], [0x013A, 0x0139], [0x013C, 0x013B], [0x013E, 0x013D], [0x0140, 0x013F], [0x0142, 0x0141], [0x0144, 0x0143], [0x0146, 0x0145], [0x0148, 0x0147], [0x014B, 0x014A], [0x014D, 0x014C], [0x014F, 0x014E], [0x0151, 0x0150], [0x0153, 0x0152], [0x0155, 0x0154], [0x0157, 0x0156], [0x0159, 0x0158], [0x015B, 0x015A], [0x015D, 0x015C], [0x015F, 0x015E], [0x0161, 0x0160], [0x0163, 0x0162], [0x0165, 0x0164], [0x0167, 0x0166], [0x0169, 0x0168], [0x016B, 0x016A], [0x016D, 0x016C], [0x016F, 0x016E], [0x0171, 0x0170], [0x0173, 0x0172], [0x0175, 0x0174], [0x0177, 0x0176], [0x017A, 0x0179], [0x017C, 0x017B], [0x017E, 0x017D], [0x017F, 0x0053], [0x0183, 0x0182], [0x0185, 0x0184], [0x0188, 0x0187], [0x018C, 0x018B], [0x0192, 0x0191], [0x0199, 0x0198], [0x01A1, 0x01A0], [0x01A3, 0x01A2], [0x01A5, 0x01A4], [0x01A8, 0x01A7], [0x01AD, 0x01AC], [0x01B0, 0x01AF], [0x01B4, 0x01B3], [0x01B6, 0x01B5], [0x01B9, 0x01B8], [0x01BD, 0x01BC], [0x01C5, 0x01C4], [0x01C6, 0x01C4], [0x01C8, 0x01C7], [0x01C9, 0x01C7], [0x01CB, 0x01CA], [0x01CC, 0x01CA], [0x01CE, 0x01CD], [0x01D0, 0x01CF], [0x01D2, 0x01D1], [0x01D4, 0x01D3], [0x01D6, 0x01D5], [0x01D8, 0x01D7], [0x01DA, 0x01D9], [0x01DC, 0x01DB], [0x01DD, 0x018E], [0x01DF, 0x01DE], [0x01E1, 0x01E0], [0x01E3, 0x01E2], [0x01E5, 0x01E4], [0x01E7, 0x01E6], [0x01E9, 0x01E8], [0x01EB, 0x01EA], [0x01ED, 0x01EC], [0x01EF, 0x01EE], [0x01F2, 0x01F1], [0x01F3, 0x01F1], [0x01F5, 0x01F4], [0x01FB, 0x01FA], [0x01FD, 0x01FC], [0x01FF, 0x01FE], [0x0201, 0x0200], [0x0203, 0x0202], [0x0205, 0x0204], [0x0207, 0x0206], [0x0209, 0x0208], [0x020B, 0x020A], [0x020D, 0x020C], [0x020F, 0x020E], [0x0211, 0x0210], [0x0213, 0x0212], [0x0215, 0x0214], [0x0217, 0x0216], [0x0253, 0x0181], [0x0254, 0x0186], [0x0256, 0x0189], [0x0257, 0x018A], [0x0259, 0x018F], [0x025B, 0x0190], [0x0260, 0x0193], [0x0263, 0x0194], [0x0268, 0x0197], [0x0269, 0x0196], [0x026F, 0x019C], [0x0272, 0x019D], [0x0275, 0x019F], [0x0280, 0x01A6], [0x0283, 0x01A9], [0x0288, 0x01AE], [0x028A, 0x01B1], [0x028B, 0x01B2], [0x0292, 0x01B7], [0x0345, 0x0399], [0x03AC, 0x0386], [0x03AD, 0x0388], [0x03AE, 0x0389], [0x03AF, 0x038A], [0x03B1, 0x0391], [0x03B2, 0x0392], [0x03B3, 0x0393], [0x03B4, 0x0394], [0x03B5, 0x0395], [0x03B6, 0x0396], [0x03B7, 0x0397], [0x03B8, 0x0398], [0x03B9, 0x0399], [0x03BA, 0x039A], [0x03BB, 0x039B], [0x03BC, 0x039C], [0x03BD, 0x039D], [0x03BE, 0x039E], [0x03BF, 0x039F], [0x03C0, 0x03A0], [0x03C1, 0x03A1], [0x03C2, 0x03A3], [0x03C3, 0x03A3], [0x03C4, 0x03A4], [0x03C5, 0x03A5], [0x03C6, 0x03A6], [0x03C7, 0x03A7], [0x03C8, 0x03A8], [0x03C9, 0x03A9], [0x03CA, 0x03AA], [0x03CB, 0x03AB], [0x03CC, 0x038C], [0x03CD, 0x038E], [0x03CE, 0x038F], [0x03D0, 0x0392], [0x03D1, 0x0398], [0x03D5, 0x03A6], [0x03D6, 0x03A0], [0x03E3, 0x03E2], [0x03E5, 0x03E4], [0x03E7, 0x03E6], [0x03E9, 0x03E8], [0x03EB, 0x03EA], [0x03ED, 0x03EC], [0x03EF, 0x03EE], [0x03F0, 0x039A], [0x03F1, 0x03A1], [0x03F2, 0x03A3], [0x0430, 0x0410], [0x0431, 0x0411], [0x0432, 0x0412], [0x0433, 0x0413], [0x0434, 0x0414], [0x0435, 0x0415], [0x0436, 0x0416], [0x0437, 0x0417], [0x0438, 0x0418], [0x0439, 0x0419], [0x043A, 0x041A], [0x043B, 0x041B], [0x043C, 0x041C], [0x043D, 0x041D], [0x043E, 0x041E], [0x043F, 0x041F], [0x0440, 0x0420], [0x0441, 0x0421], [0x0442, 0x0422], [0x0443, 0x0423], [0x0444, 0x0424], [0x0445, 0x0425], [0x0446, 0x0426], [0x0447, 0x0427], [0x0448, 0x0428], [0x0449, 0x0429], [0x044A, 0x042A], [0x044B, 0x042B], [0x044C, 0x042C], [0x044D, 0x042D], [0x044E, 0x042E], [0x044F, 0x042F], [0x0451, 0x0401], [0x0452, 0x0402], [0x0453, 0x0403], [0x0454, 0x0404], [0x0455, 0x0405], [0x0456, 0x0406], [0x0457, 0x0407], [0x0458, 0x0408], [0x0459, 0x0409], [0x045A, 0x040A], [0x045B, 0x040B], [0x045C, 0x040C], [0x045E, 0x040E], [0x045F, 0x040F], [0x0461, 0x0460], [0x0463, 0x0462], [0x0465, 0x0464], [0x0467, 0x0466], [0x0469, 0x0468], [0x046B, 0x046A], [0x046D, 0x046C], [0x046F, 0x046E], [0x0471, 0x0470], [0x0473, 0x0472], [0x0475, 0x0474], [0x0477, 0x0476], [0x0479, 0x0478], [0x047B, 0x047A], [0x047D, 0x047C], [0x047F, 0x047E], [0x0481, 0x0480], [0x0491, 0x0490], [0x0493, 0x0492], [0x0495, 0x0494], [0x0497, 0x0496], [0x0499, 0x0498], [0x049B, 0x049A], [0x049D, 0x049C], [0x049F, 0x049E], [0x04A1, 0x04A0], [0x04A3, 0x04A2], [0x04A5, 0x04A4], [0x04A7, 0x04A6], [0x04A9, 0x04A8], [0x04AB, 0x04AA], [0x04AD, 0x04AC], [0x04AF, 0x04AE], [0x04B1, 0x04B0], [0x04B3, 0x04B2], [0x04B5, 0x04B4], [0x04B7, 0x04B6], [0x04B9, 0x04B8], [0x04BB, 0x04BA], [0x04BD, 0x04BC], [0x04BF, 0x04BE], [0x04C2, 0x04C1], [0x04C4, 0x04C3], [0x04C8, 0x04C7], [0x04CC, 0x04CB], [0x04D1, 0x04D0], [0x04D3, 0x04D2], [0x04D5, 0x04D4], [0x04D7, 0x04D6], [0x04D9, 0x04D8], [0x04DB, 0x04DA], [0x04DD, 0x04DC], [0x04DF, 0x04DE], [0x04E1, 0x04E0], [0x04E3, 0x04E2], [0x04E5, 0x04E4], [0x04E7, 0x04E6], [0x04E9, 0x04E8], [0x04EB, 0x04EA], [0x04EF, 0x04EE], [0x04F1, 0x04F0], [0x04F3, 0x04F2], [0x04F5, 0x04F4], [0x04F9, 0x04F8], [0x0561, 0x0531], [0x0562, 0x0532], [0x0563, 0x0533], [0x0564, 0x0534], [0x0565, 0x0535], [0x0566, 0x0536], [0x0567, 0x0537], [0x0568, 0x0538], [0x0569, 0x0539], [0x056A, 0x053A], [0x056B, 0x053B], [0x056C, 0x053C], [0x056D, 0x053D], [0x056E, 0x053E], [0x056F, 0x053F], [0x0570, 0x0540], [0x0571, 0x0541], [0x0572, 0x0542], [0x0573, 0x0543], [0x0574, 0x0544], [0x0575, 0x0545], [0x0576, 0x0546], [0x0577, 0x0547], [0x0578, 0x0548], [0x0579, 0x0549], [0x057A, 0x054A], [0x057B, 0x054B], [0x057C, 0x054C], [0x057D, 0x054D], [0x057E, 0x054E], [0x057F, 0x054F], [0x0580, 0x0550], [0x0581, 0x0551], [0x0582, 0x0552], [0x0583, 0x0553], [0x0584, 0x0554], [0x0585, 0x0555], [0x0586, 0x0556], [0x1E01, 0x1E00], [0x1E03, 0x1E02], [0x1E05, 0x1E04], [0x1E07, 0x1E06], [0x1E09, 0x1E08], [0x1E0B, 0x1E0A], [0x1E0D, 0x1E0C], [0x1E0F, 0x1E0E], [0x1E11, 0x1E10], [0x1E13, 0x1E12], [0x1E15, 0x1E14], [0x1E17, 0x1E16], [0x1E19, 0x1E18], [0x1E1B, 0x1E1A], [0x1E1D, 0x1E1C], [0x1E1F, 0x1E1E], [0x1E21, 0x1E20], [0x1E23, 0x1E22], [0x1E25, 0x1E24], [0x1E27, 0x1E26], [0x1E29, 0x1E28], [0x1E2B, 0x1E2A], [0x1E2D, 0x1E2C], [0x1E2F, 0x1E2E], [0x1E31, 0x1E30], [0x1E33, 0x1E32], [0x1E35, 0x1E34], [0x1E37, 0x1E36], [0x1E39, 0x1E38], [0x1E3B, 0x1E3A], [0x1E3D, 0x1E3C], [0x1E3F, 0x1E3E], [0x1E41, 0x1E40], [0x1E43, 0x1E42], [0x1E45, 0x1E44], [0x1E47, 0x1E46], [0x1E49, 0x1E48], [0x1E4B, 0x1E4A], [0x1E4D, 0x1E4C], [0x1E4F, 0x1E4E], [0x1E51, 0x1E50], [0x1E53, 0x1E52], [0x1E55, 0x1E54], [0x1E57, 0x1E56], [0x1E59, 0x1E58], [0x1E5B, 0x1E5A], [0x1E5D, 0x1E5C], [0x1E5F, 0x1E5E], [0x1E61, 0x1E60], [0x1E63, 0x1E62], [0x1E65, 0x1E64], [0x1E67, 0x1E66], [0x1E69, 0x1E68], [0x1E6B, 0x1E6A], [0x1E6D, 0x1E6C], [0x1E6F, 0x1E6E], [0x1E71, 0x1E70], [0x1E73, 0x1E72], [0x1E75, 0x1E74], [0x1E77, 0x1E76], [0x1E79, 0x1E78], [0x1E7B, 0x1E7A], [0x1E7D, 0x1E7C], [0x1E7F, 0x1E7E], [0x1E81, 0x1E80], [0x1E83, 0x1E82], [0x1E85, 0x1E84], [0x1E87, 0x1E86], [0x1E89, 0x1E88], [0x1E8B, 0x1E8A], [0x1E8D, 0x1E8C], [0x1E8F, 0x1E8E], [0x1E91, 0x1E90], [0x1E93, 0x1E92], [0x1E95, 0x1E94], [0x1E9B, 0x1E60], [0x1EA1, 0x1EA0], [0x1EA3, 0x1EA2], [0x1EA5, 0x1EA4], [0x1EA7, 0x1EA6], [0x1EA9, 0x1EA8], [0x1EAB, 0x1EAA], [0x1EAD, 0x1EAC], [0x1EAF, 0x1EAE], [0x1EB1, 0x1EB0], [0x1EB3, 0x1EB2], [0x1EB5, 0x1EB4], [0x1EB7, 0x1EB6], [0x1EB9, 0x1EB8], [0x1EBB, 0x1EBA], [0x1EBD, 0x1EBC], [0x1EBF, 0x1EBE], [0x1EC1, 0x1EC0], [0x1EC3, 0x1EC2], [0x1EC5, 0x1EC4], [0x1EC7, 0x1EC6], [0x1EC9, 0x1EC8], [0x1ECB, 0x1ECA], [0x1ECD, 0x1ECC], [0x1ECF, 0x1ECE], [0x1ED1, 0x1ED0], [0x1ED3, 0x1ED2], [0x1ED5, 0x1ED4], [0x1ED7, 0x1ED6], [0x1ED9, 0x1ED8], [0x1EDB, 0x1EDA], [0x1EDD, 0x1EDC], [0x1EDF, 0x1EDE], [0x1EE1, 0x1EE0], [0x1EE3, 0x1EE2], [0x1EE5, 0x1EE4], [0x1EE7, 0x1EE6], [0x1EE9, 0x1EE8], [0x1EEB, 0x1EEA], [0x1EED, 0x1EEC], [0x1EEF, 0x1EEE], [0x1EF1, 0x1EF0], [0x1EF3, 0x1EF2], [0x1EF5, 0x1EF4], [0x1EF7, 0x1EF6], [0x1EF9, 0x1EF8], [0x1F00, 0x1F08], [0x1F01, 0x1F09], [0x1F02, 0x1F0A], [0x1F03, 0x1F0B], [0x1F04, 0x1F0C], [0x1F05, 0x1F0D], [0x1F06, 0x1F0E], [0x1F07, 0x1F0F], [0x1F10, 0x1F18], [0x1F11, 0x1F19], [0x1F12, 0x1F1A], [0x1F13, 0x1F1B], [0x1F14, 0x1F1C], [0x1F15, 0x1F1D], [0x1F20, 0x1F28], [0x1F21, 0x1F29], [0x1F22, 0x1F2A], [0x1F23, 0x1F2B], [0x1F24, 0x1F2C], [0x1F25, 0x1F2D], [0x1F26, 0x1F2E], [0x1F27, 0x1F2F], [0x1F30, 0x1F38], [0x1F31, 0x1F39], [0x1F32, 0x1F3A], [0x1F33, 0x1F3B], [0x1F34, 0x1F3C], [0x1F35, 0x1F3D], [0x1F36, 0x1F3E], [0x1F37, 0x1F3F], [0x1F40, 0x1F48], [0x1F41, 0x1F49], [0x1F42, 0x1F4A], [0x1F43, 0x1F4B], [0x1F44, 0x1F4C], [0x1F45, 0x1F4D], [0x1F51, 0x1F59], [0x1F53, 0x1F5B], [0x1F55, 0x1F5D], [0x1F57, 0x1F5F], [0x1F60, 0x1F68], [0x1F61, 0x1F69], [0x1F62, 0x1F6A], [0x1F63, 0x1F6B], [0x1F64, 0x1F6C], [0x1F65, 0x1F6D], [0x1F66, 0x1F6E], [0x1F67, 0x1F6F], [0x1F70, 0x1FBA], [0x1F71, 0x1FBB], [0x1F72, 0x1FC8], [0x1F73, 0x1FC9], [0x1F74, 0x1FCA], [0x1F75, 0x1FCB], [0x1F76, 0x1FDA], [0x1F77, 0x1FDB], [0x1F78, 0x1FF8], [0x1F79, 0x1FF9], [0x1F7A, 0x1FEA], [0x1F7B, 0x1FEB], [0x1F7C, 0x1FFA], [0x1F7D, 0x1FFB], [0x1FB0, 0x1FB8], [0x1FB1, 0x1FB9], [0x1FBE, 0x0399], [0x1FD0, 0x1FD8], [0x1FD1, 0x1FD9], [0x1FE0, 0x1FE8], [0x1FE1, 0x1FE9], [0x1FE5, 0x1FEC], [0x2170, 0x2160], [0x2171, 0x2161], [0x2172, 0x2162], [0x2173, 0x2163], [0x2174, 0x2164], [0x2175, 0x2165], [0x2176, 0x2166], [0x2177, 0x2167], [0x2178, 0x2168], [0x2179, 0x2169], [0x217A, 0x216A], [0x217B, 0x216B], [0x217C, 0x216C], [0x217D, 0x216D], [0x217E, 0x216E], [0x217F, 0x216F], [0x24D0, 0x24B6], [0x24D1, 0x24B7], [0x24D2, 0x24B8], [0x24D3, 0x24B9], [0x24D4, 0x24BA], [0x24D5, 0x24BB], [0x24D6, 0x24BC], [0x24D7, 0x24BD], [0x24D8, 0x24BE], [0x24D9, 0x24BF], [0x24DA, 0x24C0], [0x24DB, 0x24C1], [0x24DC, 0x24C2], [0x24DD, 0x24C3], [0x24DE, 0x24C4], [0x24DF, 0x24C5], [0x24E0, 0x24C6], [0x24E1, 0x24C7], [0x24E2, 0x24C8], [0x24E3, 0x24C9], [0x24E4, 0x24CA], [0x24E5, 0x24CB], [0x24E6, 0x24CC], [0x24E7, 0x24CD], [0x24E8, 0x24CE], [0x24E9, 0x24CF], [0xFF41, 0xFF21], [0xFF42, 0xFF22], [0xFF43, 0xFF23], [0xFF44, 0xFF24], [0xFF45, 0xFF25], [0xFF46, 0xFF26], [0xFF47, 0xFF27], [0xFF48, 0xFF28], [0xFF49, 0xFF29], [0xFF4A, 0xFF2A], [0xFF4B, 0xFF2B], [0xFF4C, 0xFF2C], [0xFF4D, 0xFF2D], [0xFF4E, 0xFF2E], [0xFF4F, 0xFF2F], [0xFF50, 0xFF30], [0xFF51, 0xFF31], [0xFF52, 0xFF32], [0xFF53, 0xFF33], [0xFF54, 0xFF34], [0xFF55, 0xFF35], [0xFF56, 0xFF36], [0xFF57, 0xFF37], [0xFF58, 0xFF38], [0xFF59, 0xFF39], [0xFF5A, 0xFF3A]]; - -errorCount = 0; -count = 0; - -for (index = 0; index < UpperCase.length; index++) { - var capitalI = UpperCase[index][0]; - var capitalS = String.fromCharCode(capitalI); - var smallI = UpperCase[index][1]; - var smallS = String.fromCharCode(smallI); - if (capitalS.toUpperCase() !== smallS) { - var hexC = decimalToHexString(capitalI); - var hexS = decimalToHexString(smallI); - $ERROR('#' + hexC + '->' + hexS + ' '); - errorCount++; - } - count++; -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_218/S15.5.4.18_A2.js b/tests/ES3/Unicode/Unicode_218/S15.5.4.18_A2.js deleted file mode 100644 index fb560bca4..000000000 --- a/tests/ES3/Unicode/Unicode_218/S15.5.4.18_A2.js +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.18_A2; -* @section: 15.5.4.18; -* @assertion: The characters in SpecialCasings.txt are converted by multi-character results; -* @description: Complex test; -*/ - -//CHECK -UpperSpecialCase = [["\u00DF", "\u0053\u0053"], ["\uFB00", "\u0046\u0046"], ["\uFB01", "\u0046\u0049"], ["\uFB02", "\u0046\u004C"], ["\uFB03", "\u0046\u0046\u0049"], ["\uFB04", "\u0046\u0046\u004C"], ["\uFB05", "\u0053\u0054"], ["\uFB06", "\u0053\u0054"], ["\u0587", "\u0535\u0552"], ["\uFB13", "\u0544\u0546"], ["\uFB14", "\u0544\u0535"], ["\uFB15", "\u0544\u053B"], ["\uFB16", "\u054E\u0546"], ["\uFB17", "\u0544\u053D"], ["\u0149", "\u02BC\u006E"], ["\u0390", "\u03B9\u0308\u030D"], ["\u03B0", "\u03C5\u0308\u030D"], ["\u01F0", "\u006A\u030C"], ["\u1E96", "\u0068\u0331"], ["\u1E97", "\u0074\u0308"], ["\u1E98", "\u0077\u030A"], ["\u1E99", "\u0079\u030A"], ["\u1E9A", "\u0061\u02BE"], ["\u1F50", "\u03C5\u0313"], ["\u1F52", "\u03C5\u0313\u0300"], ["\u1F54", "\u03C5\u0313\u0301"], ["\u1F56", "\u03C5\u0313\u0342"], ["\u1FB6", "\u03B1\u0342"], ["\u1FC6", "\u03B7\u0342"], ["\u1FD2", "\u03B9\u0308\u0300"], ["\u1FD3", "\u03B9\u0308\u0301"], ["\u1FD6", "\u03B9\u0342"], ["\u1FD7", "\u03B9\u0308\u0342"], ["\u1FE2", "\u03C5\u0308\u0300"], ["\u1FE3", "\u03C5\u0308\u0301"], ["\u1FE4", "\u03C1\u0313"], ["\u1FE6", "\u03C5\u0342"], ["\u1FE7", "\u03C5\u0308\u0342"], ["\u1FF6", "\u03C9\u0342"], ["\u1F80", "\u1F00\u03B9"], ["\u1F88", "\u1F08\u03B9"], ["\u1F81", "\u1F09\u03B9"], ["\u1F82", "\u1F0A\u03B9"], ["\u1F83", "\u1F0B\u03B9"], ["\u1F84", "\u1F0C\u03B9"], ["\u1F85", "\u1F0D\u03B9"], ["\u1F86", "\u1F0E\u03B9"], ["\u1F87", "\u1F0F\u03B9"], ["\u1F90", "\u1F28\u03B9"], ["\u1F91", "\u1F29\u03B9"], ["\u1F92", "\u1F2A\u03B9"], ["\u1F93", "\u1F2B\u03B9"], ["\u1F94", "\u1F2C\u03B9"], ["\u1F95", "\u1F2D\u03B9"], ["\u1F96", "\u1F2E\u03B9"], ["\u1F97", "\u1F2F\u03B9"], ["\u1FA0", "\u1F68\u03B9"], ["\u1FA1", "\u1F69\u03B9"], ["\u1FA2", "\u1F6A\u03B9"], ["\u1FA3", "\u1F6B\u03B9"], ["\u1FA4", "\u1F6C\u03B9"], ["\u1FA5", "\u1F6D\u03B9"], ["\u1FA6", "\u1F6E\u03B9"], ["\u1FA7", "\u1F6F\u03B9"], ["\u1FB2", "\u1F70\u03B9"], ["\u1FB3", "\u0391\u03B9"], ["\u1FB4", "\u1F71\u03B9"], ["\u1FB7", "\u1FB6\u03B9"], ["\u1FC2", "\u1F74\u03B9"], ["\u1FC3", "\u0397\u03B9"], ["\u1FC4", "\u1F75\u03B9"], ["\u1FC7", "\u1FC6\u03B9"], ["\u1FF2", "\u1F7C\u03B9"], ["\u1FF3", "\u03A9\u03B9"], ["\u1FF4", "\u1F7D\u03B9"], ["\u1FF7", "\u1FF6\u03B9"], ["\u0049", "\u0131"], ["\u0069", "\u0130"]]; - -errorCount = 0; -count = 0; - -for (index = 0; index < UpperSpecialCase.length; index++) { - var capitalI = UpperSpecialCase[index][0]; - var capitalS = String.fromCharCode(capitalI); - var smallI = UpperSpecialCase[index][1]; - var smallS = String.fromCharCode(smallI); - if (capitalS.toUpperCase() !== smallS) { - var hexC = decimalToHexString(capitalI); - var hexS = decimalToHexString(smallI); - $ERROR('#' + hexC + '->' + hexS + ' '); - errorCount++; - } - count++; -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_218/S7.1_A1_T1.js b/tests/ES3/Unicode/Unicode_218/S7.1_A1_T1.js deleted file mode 100644 index f036704f9..000000000 --- a/tests/ES3/Unicode/Unicode_218/S7.1_A1_T1.js +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.1_A1_T1; - * @section: 7.1; - * @assertion: The format control character (Cf) can occur anywhere in the source text - * and these characters are removed before applying the lexical grammar; - * @description: Complex test with eval; -*/ - -//CHECK#1 -Cf = [[0x200C, 0x200F], [0x202A, 0x202E], [0x206A, 0x206F], [0xFEFF, 0xFEFF]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Cf.length; indexI++) { - for (indexJ = Cf[indexI][0]; indexJ <= Cf[indexI][1]; indexJ++) { - try { - var format = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval(format); - eval(format + "var " + format + "x" + format + "=" + format + "1" + format); - eval(format); - if (x !== 1) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_218/S7.1_A2.1_T1.js b/tests/ES3/Unicode/Unicode_218/S7.1_A2.1_T1.js deleted file mode 100644 index 0bdb006a1..000000000 --- a/tests/ES3/Unicode/Unicode_218/S7.1_A2.1_T1.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.1_A2.1_T1; - * @section: 7.1; - * @assertion: Since the format control character (Cf) are removed before processing string literals, - * one must use a Unicode escape sequence to include a Cf inside string literal; - * @description: Complex test, without eval; -*/ - -//CHECK#1 -Cf = [[0x200C, 0x200F], [0x202A, 0x202E], [0x206A, 0x206F], [0xFEFF, 0xFEFF]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Cf.length; indexI++) { - for (indexJ = Cf[indexI][0]; indexJ <= Cf[indexI][1]; indexJ++) { - try { - var format = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - var x = format + "a" + format + "b" + format; - if (x.length !== 5) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_218/S7.1_A2.1_T2.js b/tests/ES3/Unicode/Unicode_218/S7.1_A2.1_T2.js deleted file mode 100644 index 1521590ae..000000000 --- a/tests/ES3/Unicode/Unicode_218/S7.1_A2.1_T2.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.1_A2.1_T2; - * @section: 7.1; - * @assertion: Since the format control character (Cf) are removed before processing string literals, - * one must use a Unicode escape sequence to include a Cf inside string literal; - * @description: Complex test, with eval; -*/ - -//CHECK#1 -Cf = [[0x200C, 0x200F], [0x202A, 0x202E], [0x206A, 0x206F], [0xFEFF, 0xFEFF]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Cf.length; indexI++) { - for (indexJ = Cf[indexI][0]; indexJ <= Cf[indexI][1]; indexJ++) { - try { - var format = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval('var x = "' + format + 'a' + format + 'b' + format + '"'); - if (x.length !== 5) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_218/S7.1_A2.2_T1.js b/tests/ES3/Unicode/Unicode_218/S7.1_A2.2_T1.js deleted file mode 100644 index d2702c879..000000000 --- a/tests/ES3/Unicode/Unicode_218/S7.1_A2.2_T1.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.1_A2.2_T1; - * @section: 7.1; - * @assertion: Since the format control character (Cf) are removed before processing regular expression literals, - * one must use a Unicode escape sequence to include a Cf inside regular expression literal; - * @description: Complex test, without eval; -*/ - -//CHECK#1 -Cf = [[0x200C, 0x200F], [0x202A, 0x202E], [0x206A, 0x206F], [0xFEFF, 0xFEFF]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Cf.length; indexI++) { - for (indexJ = Cf[indexI][0]; indexJ <= Cf[indexI][1]; indexJ++) { - try { - var format = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - var x = RegExp(format + "a" + format + "b" + format); - if (x.source.length !== 5) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_218/S7.1_A2.2_T2.js b/tests/ES3/Unicode/Unicode_218/S7.1_A2.2_T2.js deleted file mode 100644 index 6e8d48837..000000000 --- a/tests/ES3/Unicode/Unicode_218/S7.1_A2.2_T2.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.1_A2.2_T2; - * @section: 7.1; - * @assertion: Since the format control character (Cf) are removed before processing regular expression literals, - * one must use a Unicode escape sequence to include a Cf inside regular expression literal; - * @description: Complex test, with eval; -*/ - -//CHECK#1 -Cf = [[0x200C, 0x200F], [0x202A, 0x202E], [0x206A, 0x206F], [0xFEFF, 0xFEFF]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Cf.length; indexI++) { - for (indexJ = Cf[indexI][0]; indexJ <= Cf[indexI][1]; indexJ++) { - try { - var format = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval('var x = RegExp("' + format + 'a' + format + 'b' + format + '")'); - if (x.source.length !== 5) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_218/S7.2_A1.6_T1.js b/tests/ES3/Unicode/Unicode_218/S7.2_A1.6_T1.js deleted file mode 100644 index a8036e1aa..000000000 --- a/tests/ES3/Unicode/Unicode_218/S7.2_A1.6_T1.js +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.2_A1.6_T1; - * @section: 7.2, 7.5; - * @assertion: Any other Unicode "space separator" (category "Zs") between any two tokens is allowed; - * @description: Complex test with eval; -*/ - - -//CHECK#1 -Zs = [[0x2000, 0x200B], [0x3000, 0x3000]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Zs.length; indexI++) { - for (indexJ = Zs[indexI][0]; indexJ <= Zs[indexI][1]; indexJ++) { - try { - var format = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval(format); - eval(format + "var " + format + "x" + format + "=" + format + "1" + format); - eval(format); - if (x !== 1) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_218/S7.2_A2.6_T1.js b/tests/ES3/Unicode/Unicode_218/S7.2_A2.6_T1.js deleted file mode 100644 index ffb58a753..000000000 --- a/tests/ES3/Unicode/Unicode_218/S7.2_A2.6_T1.js +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.2_A2.6_T1; - * @section: 7.2, 7.8.4; - * @assertion: Any other Unicode "space separator" (category "Zs") within strings; - * @description: Complex test; -*/ - -//CHECK#1 -Zs = [[0x2000, 0x200B], [0x3000, 0x3000]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Zs.length; indexI++) { - for (indexJ = Zs[indexI][0]; indexJ <= Zs[indexI][1]; indexJ++) { - try { - var format = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - var x = "str" + format + "ing"; - if (x !== "str" + format + "ing") { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_218/S7.2_A3.6_T1.js b/tests/ES3/Unicode/Unicode_218/S7.2_A3.6_T1.js deleted file mode 100644 index cb92874ee..000000000 --- a/tests/ES3/Unicode/Unicode_218/S7.2_A3.6_T1.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.2_A3.6_T1; - * @section: 7.2, 7.4; - * @assertion: Single line comment can contain any other Unicode "space separator" (category "Zs"); - * @description: Complex test with eval; - */ - -//CHECK#1 -Zs = [[0x2000, 0x200B], [0x3000, 0x3000]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Zs.length; indexI++) { - for (indexJ = Zs[indexI][0]; indexJ <= Zs[indexI][1]; indexJ++) { - try { - var format = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - var x = 0; - eval("//" + format + "single line" + format + "comment" + format + " x = 1;"); - if (x !== 0) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_218/S7.2_A4.6_T1.js b/tests/ES3/Unicode/Unicode_218/S7.2_A4.6_T1.js deleted file mode 100644 index c3c68ec3e..000000000 --- a/tests/ES3/Unicode/Unicode_218/S7.2_A4.6_T1.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.2_A4.6_T1; - * @section: 7.2, 7.4; - * @assertion: Multi line comment can contain any other Unicode "space separator" (category "Zs"); - * @description: Complex test with eval; - */ - -//CHECK#1 -Zs = [[0x2000, 0x200B], [0x3000, 0x3000]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Zs.length; indexI++) { - for (indexJ = Zs[indexI][0]; indexJ <= Zs[indexI][1]; indexJ++) { - try { - var format = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - var x = 0; - eval("/*" + format + "multi line" + format + "comment" + format + "\n x = 1;*/"); - if (x !== 0) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_218/S7.6_A1.1_T1.js b/tests/ES3/Unicode/Unicode_218/S7.6_A1.1_T1.js deleted file mode 100644 index 2df467a97..000000000 --- a/tests/ES3/Unicode/Unicode_218/S7.6_A1.1_T1.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A1.1_T1; - * @section: 7.6; - * @assertion: IdentifierStart :: UnicodeLetter (any character in the Unicode categories "Lu", "Ll", "Lt", "Lm", "Lo", "Nl"); - * @description: UnicodeLetter :: Uppercase letter (Lu). - * Complex test with eval; -*/ - -//CHECK -Lu = [[0x0041, 0x005A], [0x00C0, 0x00D6], [0x00D8, 0x00DE], [0x0100, 0x0100], [0x0102, 0x0102], [0x0104, 0x0104], [0x0106, 0x0106], [0x0108, 0x0108], [0x010A, 0x010A], [0x010C, 0x010C], [0x010E, 0x010E], [0x0110, 0x0110], [0x0112, 0x0112], [0x0114, 0x0114], [0x0116, 0x0116], [0x0118, 0x0118], [0x011A, 0x011A], [0x011C, 0x011C], [0x011E, 0x011E], [0x0120, 0x0120], [0x0122, 0x0122], [0x0124, 0x0124], [0x0126, 0x0126], [0x0128, 0x0128], [0x012A, 0x012A], [0x012C, 0x012C], [0x012E, 0x012E], [0x0130, 0x0130], [0x0132, 0x0132], [0x0134, 0x0134], [0x0136, 0x0136], [0x0139, 0x0139], [0x013B, 0x013B], [0x013D, 0x013D], [0x013F, 0x013F], [0x0141, 0x0141], [0x0143, 0x0143], [0x0145, 0x0145], [0x0147, 0x0147], [0x014A, 0x014A], [0x014C, 0x014C], [0x014E, 0x014E], [0x0150, 0x0150], [0x0152, 0x0152], [0x0154, 0x0154], [0x0156, 0x0156], [0x0158, 0x0158], [0x015A, 0x015A], [0x015C, 0x015C], [0x015E, 0x015E], [0x0160, 0x0160], [0x0162, 0x0162], [0x0164, 0x0164], [0x0166, 0x0166], [0x0168, 0x0168], [0x016A, 0x016A], [0x016C, 0x016C], [0x016E, 0x016E], [0x0170, 0x0170], [0x0172, 0x0172], [0x0174, 0x0174], [0x0176, 0x0176], [0x0178, 0x0179], [0x017B, 0x017B], [0x017D, 0x017D], [0x0181, 0x0182], [0x0184, 0x0184], [0x0186, 0x0187], [0x0189, 0x018B], [0x018E, 0x0191], [0x0193, 0x0194], [0x0196, 0x0198], [0x019C, 0x019D], [0x019F, 0x01A0], [0x01A2, 0x01A2], [0x01A4, 0x01A4], [0x01A6, 0x01A7], [0x01A9, 0x01A9], [0x01AC, 0x01AC], [0x01AE, 0x01AF], [0x01B1, 0x01B3], [0x01B5, 0x01B5], [0x01B7, 0x01B8], [0x01BC, 0x01BC], [0x01C4, 0x01C4], [0x01C7, 0x01C7], [0x01CA, 0x01CA], [0x01CD, 0x01CD], [0x01CF, 0x01CF], [0x01D1, 0x01D1], [0x01D3, 0x01D3], [0x01D5, 0x01D5], [0x01D7, 0x01D7], [0x01D9, 0x01D9], [0x01DB, 0x01DB], [0x01DE, 0x01DE], [0x01E0, 0x01E0], [0x01E2, 0x01E2], [0x01E4, 0x01E4], [0x01E6, 0x01E6], [0x01E8, 0x01E8], [0x01EA, 0x01EA], [0x01EC, 0x01EC], [0x01EE, 0x01EE], [0x01F1, 0x01F1], [0x01F4, 0x01F4], [0x01FA, 0x01FA], [0x01FC, 0x01FC], [0x01FE, 0x01FE], [0x0200, 0x0200], [0x0202, 0x0202], [0x0204, 0x0204], [0x0206, 0x0206], [0x0208, 0x0208], [0x020A, 0x020A], [0x020C, 0x020C], [0x020E, 0x020E], [0x0210, 0x0210], [0x0212, 0x0212], [0x0214, 0x0214], [0x0216, 0x0216], [0x0386, 0x0386], [0x0388, 0x038A], [0x038C, 0x038C], [0x038E, 0x038F], [0x0391, 0x03A1], [0x03A3, 0x03AB], [0x03D2, 0x03D4], [0x03DA, 0x03DA], [0x03DC, 0x03DC], [0x03DE, 0x03DE], [0x03E0, 0x03E0], [0x03E2, 0x03E2], [0x03E4, 0x03E4], [0x03E6, 0x03E6], [0x03E8, 0x03E8], [0x03EA, 0x03EA], [0x03EC, 0x03EC], [0x03EE, 0x03EE], [0x0401, 0x040C], [0x040E, 0x042F], [0x0460, 0x0460], [0x0462, 0x0462], [0x0464, 0x0464], [0x0466, 0x0466], [0x0468, 0x0468], [0x046A, 0x046A], [0x046C, 0x046C], [0x046E, 0x046E], [0x0470, 0x0470], [0x0472, 0x0472], [0x0474, 0x0474], [0x0476, 0x0476], [0x0478, 0x0478], [0x047A, 0x047A], [0x047C, 0x047C], [0x047E, 0x047E], [0x0480, 0x0480], [0x0490, 0x0490], [0x0492, 0x0492], [0x0494, 0x0494], [0x0496, 0x0496], [0x0498, 0x0498], [0x049A, 0x049A], [0x049C, 0x049C], [0x049E, 0x049E], [0x04A0, 0x04A0], [0x04A2, 0x04A2], [0x04A4, 0x04A4], [0x04A6, 0x04A6], [0x04A8, 0x04A8], [0x04AA, 0x04AA], [0x04AC, 0x04AC], [0x04AE, 0x04AE], [0x04B0, 0x04B0], [0x04B2, 0x04B2], [0x04B4, 0x04B4], [0x04B6, 0x04B6], [0x04B8, 0x04B8], [0x04BA, 0x04BA], [0x04BC, 0x04BC], [0x04BE, 0x04BE], [0x04C1, 0x04C1], [0x04C3, 0x04C3], [0x04C7, 0x04C7], [0x04CB, 0x04CB], [0x04D0, 0x04D0], [0x04D2, 0x04D2], [0x04D4, 0x04D4], [0x04D6, 0x04D6], [0x04D8, 0x04D8], [0x04DA, 0x04DA], [0x04DC, 0x04DC], [0x04DE, 0x04DE], [0x04E0, 0x04E0], [0x04E2, 0x04E2], [0x04E4, 0x04E4], [0x04E6, 0x04E6], [0x04E8, 0x04E8], [0x04EA, 0x04EA], [0x04EE, 0x04EE], [0x04F0, 0x04F0], [0x04F2, 0x04F2], [0x04F4, 0x04F4], [0x04F8, 0x04F8], [0x0531, 0x0556], [0x10A0, 0x10C5], [0x1E00, 0x1E00], [0x1E02, 0x1E02], [0x1E04, 0x1E04], [0x1E06, 0x1E06], [0x1E08, 0x1E08], [0x1E0A, 0x1E0A], [0x1E0C, 0x1E0C], [0x1E0E, 0x1E0E], [0x1E10, 0x1E10], [0x1E12, 0x1E12], [0x1E14, 0x1E14], [0x1E16, 0x1E16], [0x1E18, 0x1E18], [0x1E1A, 0x1E1A], [0x1E1C, 0x1E1C], [0x1E1E, 0x1E1E], [0x1E20, 0x1E20], [0x1E22, 0x1E22], [0x1E24, 0x1E24], [0x1E26, 0x1E26], [0x1E28, 0x1E28], [0x1E2A, 0x1E2A], [0x1E2C, 0x1E2C], [0x1E2E, 0x1E2E], [0x1E30, 0x1E30], [0x1E32, 0x1E32], [0x1E34, 0x1E34], [0x1E36, 0x1E36], [0x1E38, 0x1E38], [0x1E3A, 0x1E3A], [0x1E3C, 0x1E3C], [0x1E3E, 0x1E3E], [0x1E40, 0x1E40], [0x1E42, 0x1E42], [0x1E44, 0x1E44], [0x1E46, 0x1E46], [0x1E48, 0x1E48], [0x1E4A, 0x1E4A], [0x1E4C, 0x1E4C], [0x1E4E, 0x1E4E], [0x1E50, 0x1E50], [0x1E52, 0x1E52], [0x1E54, 0x1E54], [0x1E56, 0x1E56], [0x1E58, 0x1E58], [0x1E5A, 0x1E5A], [0x1E5C, 0x1E5C], [0x1E5E, 0x1E5E], [0x1E60, 0x1E60], [0x1E62, 0x1E62], [0x1E64, 0x1E64], [0x1E66, 0x1E66], [0x1E68, 0x1E68], [0x1E6A, 0x1E6A], [0x1E6C, 0x1E6C], [0x1E6E, 0x1E6E], [0x1E70, 0x1E70], [0x1E72, 0x1E72], [0x1E74, 0x1E74], [0x1E76, 0x1E76], [0x1E78, 0x1E78], [0x1E7A, 0x1E7A], [0x1E7C, 0x1E7C], [0x1E7E, 0x1E7E], [0x1E80, 0x1E80], [0x1E82, 0x1E82], [0x1E84, 0x1E84], [0x1E86, 0x1E86], [0x1E88, 0x1E88], [0x1E8A, 0x1E8A], [0x1E8C, 0x1E8C], [0x1E8E, 0x1E8E], [0x1E90, 0x1E90], [0x1E92, 0x1E92], [0x1E94, 0x1E94], [0x1EA0, 0x1EA0], [0x1EA2, 0x1EA2], [0x1EA4, 0x1EA4], [0x1EA6, 0x1EA6], [0x1EA8, 0x1EA8], [0x1EAA, 0x1EAA], [0x1EAC, 0x1EAC], [0x1EAE, 0x1EAE], [0x1EB0, 0x1EB0], [0x1EB2, 0x1EB2], [0x1EB4, 0x1EB4], [0x1EB6, 0x1EB6], [0x1EB8, 0x1EB8], [0x1EBA, 0x1EBA], [0x1EBC, 0x1EBC], [0x1EBE, 0x1EBE], [0x1EC0, 0x1EC0], [0x1EC2, 0x1EC2], [0x1EC4, 0x1EC4], [0x1EC6, 0x1EC6], [0x1EC8, 0x1EC8], [0x1ECA, 0x1ECA], [0x1ECC, 0x1ECC], [0x1ECE, 0x1ECE], [0x1ED0, 0x1ED0], [0x1ED2, 0x1ED2], [0x1ED4, 0x1ED4], [0x1ED6, 0x1ED6], [0x1ED8, 0x1ED8], [0x1EDA, 0x1EDA], [0x1EDC, 0x1EDC], [0x1EDE, 0x1EDE], [0x1EE0, 0x1EE0], [0x1EE2, 0x1EE2], [0x1EE4, 0x1EE4], [0x1EE6, 0x1EE6], [0x1EE8, 0x1EE8], [0x1EEA, 0x1EEA], [0x1EEC, 0x1EEC], [0x1EEE, 0x1EEE], [0x1EF0, 0x1EF0], [0x1EF2, 0x1EF2], [0x1EF4, 0x1EF4], [0x1EF6, 0x1EF6], [0x1EF8, 0x1EF8], [0x1F08, 0x1F0F], [0x1F18, 0x1F1D], [0x1F28, 0x1F2F], [0x1F38, 0x1F3F], [0x1F48, 0x1F4D], [0x1F59, 0x1F59], [0x1F5B, 0x1F5B], [0x1F5D, 0x1F5D], [0x1F5F, 0x1F5F], [0x1F68, 0x1F6F], [0x1F88, 0x1F8F], [0x1F98, 0x1F9F], [0x1FA8, 0x1FAF], [0x1FB8, 0x1FBC], [0x1FC8, 0x1FCC], [0x1FD8, 0x1FDB], [0x1FE8, 0x1FEC], [0x1FF8, 0x1FFC], [0x2102, 0x2102], [0x2107, 0x2107], [0x210B, 0x210D], [0x2110, 0x2112], [0x2115, 0x2115], [0x2119, 0x211D], [0x2124, 0x2124], [0x2126, 0x2126], [0x2128, 0x2128], [0x212A, 0x212D], [0x2130, 0x2131], [0x2133, 0x2133], [0xFF21, 0xFF3A]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Lu.length; indexI++) { - for (indexJ = Lu[indexI][0]; indexJ <= Lu[indexI][1]; indexJ++) { - try { - var identifier = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval("var " + identifier + "=1"); - if (eval(identifier + "===1") !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_218/S7.6_A1.1_T2.js b/tests/ES3/Unicode/Unicode_218/S7.6_A1.1_T2.js deleted file mode 100644 index 706c869f6..000000000 --- a/tests/ES3/Unicode/Unicode_218/S7.6_A1.1_T2.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A1.1_T2; - * @section: 7.6; - * @assertion: IdentifierStart :: UnicodeLetter (any character in the Unicode categories "Lu", "Ll", "Lt", "Lm", "Lo", "Nl"); - * @description: UnicodeLetter :: Lowercase letter (Ll). - * Complex test with eval; -*/ - -//CHECK -Ll = [[0x0061, 0x007A], [0x00AA, 0x00AA], [0x00B5, 0x00B5], [0x00BA, 0x00BA], [0x00DF, 0x00F6], [0x00F8, 0x00FF], [0x0101, 0x0101], [0x0103, 0x0103], [0x0105, 0x0105], [0x0107, 0x0107], [0x0109, 0x0109], [0x010B, 0x010B], [0x010D, 0x010D], [0x010F, 0x010F], [0x0111, 0x0111], [0x0113, 0x0113], [0x0115, 0x0115], [0x0117, 0x0117], [0x0119, 0x0119], [0x011B, 0x011B], [0x011D, 0x011D], [0x011F, 0x011F], [0x0121, 0x0121], [0x0123, 0x0123], [0x0125, 0x0125], [0x0127, 0x0127], [0x0129, 0x0129], [0x012B, 0x012B], [0x012D, 0x012D], [0x012F, 0x012F], [0x0131, 0x0131], [0x0133, 0x0133], [0x0135, 0x0135], [0x0137, 0x0138], [0x013A, 0x013A], [0x013C, 0x013C], [0x013E, 0x013E], [0x0140, 0x0140], [0x0142, 0x0142], [0x0144, 0x0144], [0x0146, 0x0146], [0x0148, 0x0149], [0x014B, 0x014B], [0x014D, 0x014D], [0x014F, 0x014F], [0x0151, 0x0151], [0x0153, 0x0153], [0x0155, 0x0155], [0x0157, 0x0157], [0x0159, 0x0159], [0x015B, 0x015B], [0x015D, 0x015D], [0x015F, 0x015F], [0x0161, 0x0161], [0x0163, 0x0163], [0x0165, 0x0165], [0x0167, 0x0167], [0x0169, 0x0169], [0x016B, 0x016B], [0x016D, 0x016D], [0x016F, 0x016F], [0x0171, 0x0171], [0x0173, 0x0173], [0x0175, 0x0175], [0x0177, 0x0177], [0x017A, 0x017A], [0x017C, 0x017C], [0x017E, 0x0180], [0x0183, 0x0183], [0x0185, 0x0185], [0x0188, 0x0188], [0x018C, 0x018D], [0x0192, 0x0192], [0x0195, 0x0195], [0x0199, 0x019B], [0x019E, 0x019E], [0x01A1, 0x01A1], [0x01A3, 0x01A3], [0x01A5, 0x01A5], [0x01A8, 0x01A8], [0x01AB, 0x01AB], [0x01AD, 0x01AD], [0x01B0, 0x01B0], [0x01B4, 0x01B4], [0x01B6, 0x01B6], [0x01B9, 0x01BA], [0x01BD, 0x01BD], [0x01C6, 0x01C6], [0x01C9, 0x01C9], [0x01CC, 0x01CC], [0x01CE, 0x01CE], [0x01D0, 0x01D0], [0x01D2, 0x01D2], [0x01D4, 0x01D4], [0x01D6, 0x01D6], [0x01D8, 0x01D8], [0x01DA, 0x01DA], [0x01DC, 0x01DD], [0x01DF, 0x01DF], [0x01E1, 0x01E1], [0x01E3, 0x01E3], [0x01E5, 0x01E5], [0x01E7, 0x01E7], [0x01E9, 0x01E9], [0x01EB, 0x01EB], [0x01ED, 0x01ED], [0x01EF, 0x01F0], [0x01F3, 0x01F3], [0x01F5, 0x01F5], [0x01FB, 0x01FB], [0x01FD, 0x01FD], [0x01FF, 0x01FF], [0x0201, 0x0201], [0x0203, 0x0203], [0x0205, 0x0205], [0x0207, 0x0207], [0x0209, 0x0209], [0x020B, 0x020B], [0x020D, 0x020D], [0x020F, 0x020F], [0x0211, 0x0211], [0x0213, 0x0213], [0x0215, 0x0215], [0x0217, 0x0217], [0x0250, 0x02A8], [0x0390, 0x0390], [0x03AC, 0x03CE], [0x03D0, 0x03D1], [0x03D5, 0x03D6], [0x03E3, 0x03E3], [0x03E5, 0x03E5], [0x03E7, 0x03E7], [0x03E9, 0x03E9], [0x03EB, 0x03EB], [0x03ED, 0x03ED], [0x03EF, 0x03F2], [0x0430, 0x044F], [0x0451, 0x045C], [0x045E, 0x045F], [0x0461, 0x0461], [0x0463, 0x0463], [0x0465, 0x0465], [0x0467, 0x0467], [0x0469, 0x0469], [0x046B, 0x046B], [0x046D, 0x046D], [0x046F, 0x046F], [0x0471, 0x0471], [0x0473, 0x0473], [0x0475, 0x0475], [0x0477, 0x0477], [0x0479, 0x0479], [0x047B, 0x047B], [0x047D, 0x047D], [0x047F, 0x047F], [0x0481, 0x0481], [0x0491, 0x0491], [0x0493, 0x0493], [0x0495, 0x0495], [0x0497, 0x0497], [0x0499, 0x0499], [0x049B, 0x049B], [0x049D, 0x049D], [0x049F, 0x049F], [0x04A1, 0x04A1], [0x04A3, 0x04A3], [0x04A5, 0x04A5], [0x04A7, 0x04A7], [0x04A9, 0x04A9], [0x04AB, 0x04AB], [0x04AD, 0x04AD], [0x04AF, 0x04AF], [0x04B1, 0x04B1], [0x04B3, 0x04B3], [0x04B5, 0x04B5], [0x04B7, 0x04B7], [0x04B9, 0x04B9], [0x04BB, 0x04BB], [0x04BD, 0x04BD], [0x04BF, 0x04BF], [0x04C2, 0x04C2], [0x04C4, 0x04C4], [0x04C8, 0x04C8], [0x04CC, 0x04CC], [0x04D1, 0x04D1], [0x04D3, 0x04D3], [0x04D5, 0x04D5], [0x04D7, 0x04D7], [0x04D9, 0x04D9], [0x04DB, 0x04DB], [0x04DD, 0x04DD], [0x04DF, 0x04DF], [0x04E1, 0x04E1], [0x04E3, 0x04E3], [0x04E5, 0x04E5], [0x04E7, 0x04E7], [0x04E9, 0x04E9], [0x04EB, 0x04EB], [0x04EF, 0x04EF], [0x04F1, 0x04F1], [0x04F3, 0x04F3], [0x04F5, 0x04F5], [0x04F9, 0x04F9], [0x0561, 0x0587], [0x10D0, 0x10F6], [0x1E01, 0x1E01], [0x1E03, 0x1E03], [0x1E05, 0x1E05], [0x1E07, 0x1E07], [0x1E09, 0x1E09], [0x1E0B, 0x1E0B], [0x1E0D, 0x1E0D], [0x1E0F, 0x1E0F], [0x1E11, 0x1E11], [0x1E13, 0x1E13], [0x1E15, 0x1E15], [0x1E17, 0x1E17], [0x1E19, 0x1E19], [0x1E1B, 0x1E1B], [0x1E1D, 0x1E1D], [0x1E1F, 0x1E1F], [0x1E21, 0x1E21], [0x1E23, 0x1E23], [0x1E25, 0x1E25], [0x1E27, 0x1E27], [0x1E29, 0x1E29], [0x1E2B, 0x1E2B], [0x1E2D, 0x1E2D], [0x1E2F, 0x1E2F], [0x1E31, 0x1E31], [0x1E33, 0x1E33], [0x1E35, 0x1E35], [0x1E37, 0x1E37], [0x1E39, 0x1E39], [0x1E3B, 0x1E3B], [0x1E3D, 0x1E3D], [0x1E3F, 0x1E3F], [0x1E41, 0x1E41], [0x1E43, 0x1E43], [0x1E45, 0x1E45], [0x1E47, 0x1E47], [0x1E49, 0x1E49], [0x1E4B, 0x1E4B], [0x1E4D, 0x1E4D], [0x1E4F, 0x1E4F], [0x1E51, 0x1E51], [0x1E53, 0x1E53], [0x1E55, 0x1E55], [0x1E57, 0x1E57], [0x1E59, 0x1E59], [0x1E5B, 0x1E5B], [0x1E5D, 0x1E5D], [0x1E5F, 0x1E5F], [0x1E61, 0x1E61], [0x1E63, 0x1E63], [0x1E65, 0x1E65], [0x1E67, 0x1E67], [0x1E69, 0x1E69], [0x1E6B, 0x1E6B], [0x1E6D, 0x1E6D], [0x1E6F, 0x1E6F], [0x1E71, 0x1E71], [0x1E73, 0x1E73], [0x1E75, 0x1E75], [0x1E77, 0x1E77], [0x1E79, 0x1E79], [0x1E7B, 0x1E7B], [0x1E7D, 0x1E7D], [0x1E7F, 0x1E7F], [0x1E81, 0x1E81], [0x1E83, 0x1E83], [0x1E85, 0x1E85], [0x1E87, 0x1E87], [0x1E89, 0x1E89], [0x1E8B, 0x1E8B], [0x1E8D, 0x1E8D], [0x1E8F, 0x1E8F], [0x1E91, 0x1E91], [0x1E93, 0x1E93], [0x1E95, 0x1E9B], [0x1EA1, 0x1EA1], [0x1EA3, 0x1EA3], [0x1EA5, 0x1EA5], [0x1EA7, 0x1EA7], [0x1EA9, 0x1EA9], [0x1EAB, 0x1EAB], [0x1EAD, 0x1EAD], [0x1EAF, 0x1EAF], [0x1EB1, 0x1EB1], [0x1EB3, 0x1EB3], [0x1EB5, 0x1EB5], [0x1EB7, 0x1EB7], [0x1EB9, 0x1EB9], [0x1EBB, 0x1EBB], [0x1EBD, 0x1EBD], [0x1EBF, 0x1EBF], [0x1EC1, 0x1EC1], [0x1EC3, 0x1EC3], [0x1EC5, 0x1EC5], [0x1EC7, 0x1EC7], [0x1EC9, 0x1EC9], [0x1ECB, 0x1ECB], [0x1ECD, 0x1ECD], [0x1ECF, 0x1ECF], [0x1ED1, 0x1ED1], [0x1ED3, 0x1ED3], [0x1ED5, 0x1ED5], [0x1ED7, 0x1ED7], [0x1ED9, 0x1ED9], [0x1EDB, 0x1EDB], [0x1EDD, 0x1EDD], [0x1EDF, 0x1EDF], [0x1EE1, 0x1EE1], [0x1EE3, 0x1EE3], [0x1EE5, 0x1EE5], [0x1EE7, 0x1EE7], [0x1EE9, 0x1EE9], [0x1EEB, 0x1EEB], [0x1EED, 0x1EED], [0x1EEF, 0x1EEF], [0x1EF1, 0x1EF1], [0x1EF3, 0x1EF3], [0x1EF5, 0x1EF5], [0x1EF7, 0x1EF7], [0x1EF9, 0x1EF9], [0x1F00, 0x1F07], [0x1F10, 0x1F15], [0x1F20, 0x1F27], [0x1F30, 0x1F37], [0x1F40, 0x1F45], [0x1F50, 0x1F57], [0x1F60, 0x1F67], [0x1F70, 0x1F7D], [0x1F80, 0x1F87], [0x1F90, 0x1F97], [0x1FA0, 0x1FA7], [0x1FB0, 0x1FB4], [0x1FB6, 0x1FB7], [0x1FBE, 0x1FBE], [0x1FC2, 0x1FC4], [0x1FC6, 0x1FC7], [0x1FD0, 0x1FD3], [0x1FD6, 0x1FD7], [0x1FE0, 0x1FE7], [0x1FF2, 0x1FF4], [0x1FF6, 0x1FF7], [0x207F, 0x207F], [0x210A, 0x210A], [0x210E, 0x210F], [0x2113, 0x2113], [0x2118, 0x2118], [0x212E, 0x212F], [0x2134, 0x2134], [0xFB00, 0xFB06], [0xFB13, 0xFB17], [0xFF41, 0xFF5A]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Ll.length; indexI++) { - for (indexJ = Ll[indexI][0]; indexJ <= Ll[indexI][1]; indexJ++) { - try { - var identifier = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval("var " + identifier + "=1"); - if (eval(identifier + "===1") !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_218/S7.6_A1.1_T3.js b/tests/ES3/Unicode/Unicode_218/S7.6_A1.1_T3.js deleted file mode 100644 index 6e63c8d50..000000000 --- a/tests/ES3/Unicode/Unicode_218/S7.6_A1.1_T3.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A1.1_T3; - * @section: 7.6; - * @assertion: IdentifierStart :: UnicodeLetter (any character in the Unicode categories "Lu", "Ll", "Lt", "Lm", "Lo", "Nl"); - * @description: UnicodeLetter :: Titlecase letter (Lt). - * Complex test with eval; -*/ - -//CHECK -Lt = [[0x01C5, 0x01C5], [0x01C8, 0x01C8], [0x01CB, 0x01CB], [0x01F2, 0x01F2]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Lt.length; indexI++) { - for (indexJ = Lt[indexI][0]; indexJ <= Lt[indexI][1]; indexJ++) { - try { - var identifier = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval("var " + identifier + "=1"); - if (eval(identifier + "===1") !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_218/S7.6_A1.1_T4.js b/tests/ES3/Unicode/Unicode_218/S7.6_A1.1_T4.js deleted file mode 100644 index 30fc734a7..000000000 --- a/tests/ES3/Unicode/Unicode_218/S7.6_A1.1_T4.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A1.1_T4; - * @section: 7.6; - * @assertion: IdentifierStart :: UnicodeLetter (any character in the Unicode categories "Lu", "Ll", "Lt", "Lm", "Lo", "Nl"); - * @description: UnicodeLetter :: Modifier letter (Lm). - * Complex test with eval; -*/ - -//CHECK -Lm = [[0x02B0, 0x02B8], [0x02BB, 0x02C1], [0x02D0, 0x02D1], [0x02E0, 0x02E4], [0x037A, 0x037A], [0x0559, 0x0559], [0x0640, 0x0640], [0x06E5, 0x06E6], [0x0E46, 0x0E46], [0x0EC6, 0x0EC6], [0x3005, 0x3005], [0x3031, 0x3035], [0x309D, 0x309E], [0x30FC, 0x30FE], [0xFF70, 0xFF70], [0xFF9E, 0xFF9F]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Lm.length; indexI++) { - for (indexJ = Lm[indexI][0]; indexJ <= Lm[indexI][1]; indexJ++) { - try { - var identifier = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval("var " + identifier + "=1"); - if (eval(identifier + "===1") !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_218/S7.6_A1.1_T5.js b/tests/ES3/Unicode/Unicode_218/S7.6_A1.1_T5.js deleted file mode 100644 index 4dac158e8..000000000 --- a/tests/ES3/Unicode/Unicode_218/S7.6_A1.1_T5.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A1.1_T5; - * @section: 7.6; - * @assertion: IdentifierStart :: UnicodeLetter (any character in the Unicode categories "Lu", "Ll", "Lt", "Lm", "Lo", "Nl"); - * @description: UnicodeLetter :: Other letter (Lo). - * Complex test with eval; -*/ - -//CHECK -Lo = [[0x01AA, 0x01AA], [0x01BB, 0x01BB], [0x01BE, 0x01C3], [0x03F3, 0x03F3], [0x04C0, 0x04C0], [0x05D0, 0x05EA], [0x05F0, 0x05F2], [0x0621, 0x063A], [0x0641, 0x064A], [0x0671, 0x06B7], [0x06BA, 0x06BE], [0x06C0, 0x06CE], [0x06D0, 0x06D3], [0x06D5, 0x06D5], [0x0905, 0x0939], [0x093D, 0x093D], [0x0950, 0x0950], [0x0958, 0x0961], [0x0985, 0x098C], [0x098F, 0x0990], [0x0993, 0x09A8], [0x09AA, 0x09B0], [0x09B2, 0x09B2], [0x09B6, 0x09B9], [0x09DC, 0x09DD], [0x09DF, 0x09E1], [0x09F0, 0x09F1], [0x0A05, 0x0A0A], [0x0A0F, 0x0A10], [0x0A13, 0x0A28], [0x0A2A, 0x0A30], [0x0A32, 0x0A33], [0x0A35, 0x0A36], [0x0A38, 0x0A39], [0x0A59, 0x0A5C], [0x0A5E, 0x0A5E], [0x0A72, 0x0A74], [0x0A85, 0x0A8B], [0x0A8D, 0x0A8D], [0x0A8F, 0x0A91], [0x0A93, 0x0AA8], [0x0AAA, 0x0AB0], [0x0AB2, 0x0AB3], [0x0AB5, 0x0AB9], [0x0ABD, 0x0ABD], [0x0AD0, 0x0AD0], [0x0AE0, 0x0AE0], [0x0B05, 0x0B0C], [0x0B0F, 0x0B10], [0x0B13, 0x0B28], [0x0B2A, 0x0B30], [0x0B32, 0x0B33], [0x0B36, 0x0B39], [0x0B3D, 0x0B3D], [0x0B5C, 0x0B5D], [0x0B5F, 0x0B61], [0x0B85, 0x0B8A], [0x0B8E, 0x0B90], [0x0B92, 0x0B95], [0x0B99, 0x0B9A], [0x0B9C, 0x0B9C], [0x0B9E, 0x0B9F], [0x0BA3, 0x0BA4], [0x0BA8, 0x0BAA], [0x0BAE, 0x0BB5], [0x0BB7, 0x0BB9], [0x0C05, 0x0C0C], [0x0C0E, 0x0C10], [0x0C12, 0x0C28], [0x0C2A, 0x0C33], [0x0C35, 0x0C39], [0x0C60, 0x0C61], [0x0C85, 0x0C8C], [0x0C8E, 0x0C90], [0x0C92, 0x0CA8], [0x0CAA, 0x0CB3], [0x0CB5, 0x0CB9], [0x0CDE, 0x0CDE], [0x0CE0, 0x0CE1], [0x0D05, 0x0D0C], [0x0D0E, 0x0D10], [0x0D12, 0x0D28], [0x0D2A, 0x0D39], [0x0D60, 0x0D61], [0x0E01, 0x0E30], [0x0E32, 0x0E33], [0x0E40, 0x0E45], [0x0E81, 0x0E82], [0x0E84, 0x0E84], [0x0E87, 0x0E88], [0x0E8A, 0x0E8A], [0x0E8D, 0x0E8D], [0x0E94, 0x0E97], [0x0E99, 0x0E9F], [0x0EA1, 0x0EA3], [0x0EA5, 0x0EA5], [0x0EA7, 0x0EA7], [0x0EAA, 0x0EAB], [0x0EAD, 0x0EB0], [0x0EB2, 0x0EB3], [0x0EBD, 0x0EBD], [0x0EC0, 0x0EC4], [0x0EDC, 0x0EDD], [0x0F00, 0x0F00], [0x0F40, 0x0F47], [0x0F49, 0x0F69], [0x0F88, 0x0F8B], [0x1100, 0x1159], [0x115F, 0x11A2], [0x11A8, 0x11F9], [0x2135, 0x2138], [0x3006, 0x3006], [0x3041, 0x3094], [0x30A1, 0x30FA], [0x3105, 0x312C], [0x3131, 0x318E], [0x4E00, 0x9FA5], [0xAC00, 0xD7A3], [0xF900, 0xFA2D], [0xFB1F, 0xFB28], [0xFB2A, 0xFB36], [0xFB38, 0xFB3C], [0xFB3E, 0xFB3E], [0xFB40, 0xFB41], [0xFB43, 0xFB44], [0xFB46, 0xFBB1], [0xFBD3, 0xFD3D], [0xFD50, 0xFD8F], [0xFD92, 0xFDC7], [0xFDF0, 0xFDFB], [0xFE70, 0xFE72], [0xFE74, 0xFE74], [0xFE76, 0xFEFC], [0xFF66, 0xFF6F], [0xFF71, 0xFF9D], [0xFFA0, 0xFFBE], [0xFFC2, 0xFFC7], [0xFFCA, 0xFFCF], [0xFFD2, 0xFFD7], [0xFFDA, 0xFFDC]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Lo.length; indexI++) { - for (indexJ = Lo[indexI][0]; indexJ <= Lo[indexI][1]; indexJ++) { - try { - var identifier = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval("var " + identifier + "=1"); - if (eval(identifier + "===1") !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_218/S7.6_A1.1_T6.js b/tests/ES3/Unicode/Unicode_218/S7.6_A1.1_T6.js deleted file mode 100644 index 35dc77f6a..000000000 --- a/tests/ES3/Unicode/Unicode_218/S7.6_A1.1_T6.js +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A1.1_T6; - * @section: 7.6; - * @assertion: IdentifierStart :: UnicodeLetter (any character in the Unicode categories "Lu", "Ll", "Lt", "Lm", "Lo", "Nl"); - * @description: UnicodeLetter :: Letter number (Nl); -*/ - -//CHECK -Nl = [[0x2160, 0x2182], [0x3007, 0x3007], [0x3021, 0x3029]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Nl.length; indexI++) { - for (indexJ = Nl[indexI][0]; indexJ <= Nl[indexI][1]; indexJ++) { - try { - var identifier = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval("var " + identifier + "=1"); - if (eval(identifier + "===1") !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_218/S7.6_A1.4_T1.js b/tests/ES3/Unicode/Unicode_218/S7.6_A1.4_T1.js deleted file mode 100644 index 235adfe3a..000000000 --- a/tests/ES3/Unicode/Unicode_218/S7.6_A1.4_T1.js +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A1.4_T1; - * @section: 7.6; - * @assertion: IdentifierName must begin at IdentifierStart; - * @description: IdentifierStart is not UnicodeCombiningMark ("Mn"). - * Complex test with eval; -*/ - -//CHECK -Mn = [[0x0300, 0x0345], [0x0360, 0x0361], [0x0483, 0x0486], [0x0591, 0x05A1], [0x05A3, 0x05B9], [0x05BB, 0x05BD], [0x05BF, 0x05BF], [0x05C1, 0x05C2], [0x05C4, 0x05C4], [0x064B, 0x0652], [0x0670, 0x0670], [0x06D6, 0x06DC], [0x06DF, 0x06E4], [0x06E7, 0x06E8], [0x06EA, 0x06ED], [0x0901, 0x0902], [0x093C, 0x093C], [0x0941, 0x0948], [0x094D, 0x094D], [0x0951, 0x0954], [0x0962, 0x0963], [0x0981, 0x0981], [0x09BC, 0x09BC], [0x09C1, 0x09C4], [0x09CD, 0x09CD], [0x09E2, 0x09E3], [0x0A02, 0x0A02], [0x0A3C, 0x0A3C], [0x0A41, 0x0A42], [0x0A47, 0x0A48], [0x0A4B, 0x0A4D], [0x0A70, 0x0A71], [0x0A81, 0x0A82], [0x0ABC, 0x0ABC], [0x0AC1, 0x0AC5], [0x0AC7, 0x0AC8], [0x0ACD, 0x0ACD], [0x0B01, 0x0B01], [0x0B3C, 0x0B3C], [0x0B3F, 0x0B3F], [0x0B41, 0x0B43], [0x0B4D, 0x0B4D], [0x0B56, 0x0B56], [0x0B82, 0x0B82], [0x0BC0, 0x0BC0], [0x0BCD, 0x0BCD], [0x0C3E, 0x0C40], [0x0C46, 0x0C48], [0x0C4A, 0x0C4D], [0x0C55, 0x0C56], [0x0CBF, 0x0CBF], [0x0CC6, 0x0CC6], [0x0CCC, 0x0CCD], [0x0D41, 0x0D43], [0x0D4D, 0x0D4D], [0x0E31, 0x0E31], [0x0E34, 0x0E3A], [0x0E47, 0x0E4E], [0x0EB1, 0x0EB1], [0x0EB4, 0x0EB9], [0x0EBB, 0x0EBC], [0x0EC8, 0x0ECD], [0x0F18, 0x0F19], [0x0F35, 0x0F35], [0x0F37, 0x0F37], [0x0F39, 0x0F39], [0x0F71, 0x0F7E], [0x0F80, 0x0F84], [0x0F86, 0x0F87], [0x0F90, 0x0F95], [0x0F97, 0x0F97], [0x0F99, 0x0FAD], [0x0FB1, 0x0FB7], [0x0FB9, 0x0FB9], [0x20D0, 0x20DC], [0x20E1, 0x20E1], [0x302A, 0x302F], [0x3099, 0x309A], [0xFB1E, 0xFB1E], [0xFE20, 0xFE23]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Mn.length; indexI++) { - for (indexJ = Mn[indexI][0]; indexJ <= Mn[indexI][1]; indexJ++) { - try { - var identifier = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval("var " + identifier + "=1"); - $ERROR('#' + hex + ' '); - errorCount++; - } catch (e) { - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_218/S7.6_A1.4_T2.js b/tests/ES3/Unicode/Unicode_218/S7.6_A1.4_T2.js deleted file mode 100644 index 45161bb1d..000000000 --- a/tests/ES3/Unicode/Unicode_218/S7.6_A1.4_T2.js +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A1.4_T2; - * @section: 7.6; - * @assertion: IdentifierName must begin at IdentifierStart; - * @description: IdentifierStart is not UnicodeCombiningMark ("Mc"). - * Complex test with eval; -*/ - -//CHECK -Mc = [[0x0903, 0x0903], [0x093E, 0x0940], [0x0949, 0x094C], [0x0982, 0x0983], [0x09BE, 0x09C0], [0x09C7, 0x09C8], [0x09CB, 0x09CC], [0x09D7, 0x09D7], [0x0A3E, 0x0A40], [0x0A83, 0x0A83], [0x0ABE, 0x0AC0], [0x0AC9, 0x0AC9], [0x0ACB, 0x0ACC], [0x0B02, 0x0B03], [0x0B3E, 0x0B3E], [0x0B40, 0x0B40], [0x0B47, 0x0B48], [0x0B4B, 0x0B4C], [0x0B57, 0x0B57], [0x0B83, 0x0B83], [0x0BBE, 0x0BBF], [0x0BC1, 0x0BC2], [0x0BC6, 0x0BC8], [0x0BCA, 0x0BCC], [0x0BD7, 0x0BD7], [0x0C01, 0x0C03], [0x0C41, 0x0C44], [0x0C82, 0x0C83], [0x0CBE, 0x0CBE], [0x0CC0, 0x0CC4], [0x0CC7, 0x0CC8], [0x0CCA, 0x0CCB], [0x0CD5, 0x0CD6], [0x0D02, 0x0D03], [0x0D3E, 0x0D40], [0x0D46, 0x0D48], [0x0D4A, 0x0D4C], [0x0D57, 0x0D57], [0x0F3E, 0x0F3F], [0x0F7F, 0x0F7F]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Mc.length; indexI++) { - for (indexJ = Mc[indexI][0]; indexJ <= Mc[indexI][1]; indexJ++) { - try { - var identifier = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval("var " + identifier + "=1"); - $ERROR('#' + hex + ' '); - errorCount++; - } catch (e) { - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_218/S7.6_A1.4_T3.js b/tests/ES3/Unicode/Unicode_218/S7.6_A1.4_T3.js deleted file mode 100644 index 3b35b4174..000000000 --- a/tests/ES3/Unicode/Unicode_218/S7.6_A1.4_T3.js +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A1.4_T3; - * @section: 7.6; - * @assertion: IdentifierName must begin at IdentifierStart; - * @description: IdentifierStart is not UnicodeDigit ("Nd"). - * Complex test with eval; -*/ - -//CHECK -Nd = [[0x0030, 0x0039], [0x0660, 0x0669], [0x06F0, 0x06F9], [0x0966, 0x096F], [0x09E6, 0x09EF], [0x0A66, 0x0A6F], [0x0AE6, 0x0AEF], [0x0B66, 0x0B6F], [0x0BE7, 0x0BEF], [0x0C66, 0x0C6F], [0x0CE6, 0x0CEF], [0x0D66, 0x0D6F], [0x0E50, 0x0E59], [0x0ED0, 0x0ED9], [0x0F20, 0x0F29], [0xFF10, 0xFF19]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Nd.length; indexI++) { - for (indexJ = Nd[indexI][0]; indexJ <= Nd[indexI][1]; indexJ++) { - try { - var identifier = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval("var " + identifier + "=1"); - $ERROR('#' + hex + ' '); - errorCount++; - } catch (e) { - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_218/S7.6_A1.4_T4.js b/tests/ES3/Unicode/Unicode_218/S7.6_A1.4_T4.js deleted file mode 100644 index cd64dadaf..000000000 --- a/tests/ES3/Unicode/Unicode_218/S7.6_A1.4_T4.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A1.4_T4; - * @section: 7.6; - * @assertion: IdentifierName must begin at IdentifierStart; - * @description: IdentifierStart is not UnicodeConnectorPunctuation ("Pc") without $. - * Complex test with eval; -*/ - -//CHECK -Pc = [[0x005F, 0x005F], [0x203F, 0x2040], [0x30FB, 0x30FB], [0xFE33, 0xFE34], [0xFE4D, 0xFE4F], [0xFF3F, 0xFF3F], [0xFF65, 0xFF65]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Pc.length; indexI++) { - for (indexJ = Pc[indexI][0]; indexJ <= Pc[indexI][1]; indexJ++) { - try { - var identifier = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - if (hex !== "0078") { - eval("var " + identifier + "=1"); - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_218/S7.6_A2.2_T1.js b/tests/ES3/Unicode/Unicode_218/S7.6_A2.2_T1.js deleted file mode 100644 index e67b5fafb..000000000 --- a/tests/ES3/Unicode/Unicode_218/S7.6_A2.2_T1.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A2.2_T1; - * @section: 7.6; - * @assertion: IdentifierPart :: UnicodeCombiningMark (any character in the Unicode categories "Mn", "Mc"); - * @description: UnicodeCombiningMark :: Non-spacing mark (Mn). - * Complex test with eval; -*/ - -//CHECK -Mn = [[0x0300, 0x0345], [0x0360, 0x0361], [0x0483, 0x0486], [0x0591, 0x05A1], [0x05A3, 0x05B9], [0x05BB, 0x05BD], [0x05BF, 0x05BF], [0x05C1, 0x05C2], [0x05C4, 0x05C4], [0x064B, 0x0652], [0x0670, 0x0670], [0x06D6, 0x06DC], [0x06DF, 0x06E4], [0x06E7, 0x06E8], [0x06EA, 0x06ED], [0x0901, 0x0902], [0x093C, 0x093C], [0x0941, 0x0948], [0x094D, 0x094D], [0x0951, 0x0954], [0x0962, 0x0963], [0x0981, 0x0981], [0x09BC, 0x09BC], [0x09C1, 0x09C4], [0x09CD, 0x09CD], [0x09E2, 0x09E3], [0x0A02, 0x0A02], [0x0A3C, 0x0A3C], [0x0A41, 0x0A42], [0x0A47, 0x0A48], [0x0A4B, 0x0A4D], [0x0A70, 0x0A71], [0x0A81, 0x0A82], [0x0ABC, 0x0ABC], [0x0AC1, 0x0AC5], [0x0AC7, 0x0AC8], [0x0ACD, 0x0ACD], [0x0B01, 0x0B01], [0x0B3C, 0x0B3C], [0x0B3F, 0x0B3F], [0x0B41, 0x0B43], [0x0B4D, 0x0B4D], [0x0B56, 0x0B56], [0x0B82, 0x0B82], [0x0BC0, 0x0BC0], [0x0BCD, 0x0BCD], [0x0C3E, 0x0C40], [0x0C46, 0x0C48], [0x0C4A, 0x0C4D], [0x0C55, 0x0C56], [0x0CBF, 0x0CBF], [0x0CC6, 0x0CC6], [0x0CCC, 0x0CCD], [0x0D41, 0x0D43], [0x0D4D, 0x0D4D], [0x0E31, 0x0E31], [0x0E34, 0x0E3A], [0x0E47, 0x0E4E], [0x0EB1, 0x0EB1], [0x0EB4, 0x0EB9], [0x0EBB, 0x0EBC], [0x0EC8, 0x0ECD], [0x0F18, 0x0F19], [0x0F35, 0x0F35], [0x0F37, 0x0F37], [0x0F39, 0x0F39], [0x0F71, 0x0F7E], [0x0F80, 0x0F84], [0x0F86, 0x0F87], [0x0F90, 0x0F95], [0x0F97, 0x0F97], [0x0F99, 0x0FAD], [0x0FB1, 0x0FB7], [0x0FB9, 0x0FB9], [0x20D0, 0x20DC], [0x20E1, 0x20E1], [0x302A, 0x302F], [0x3099, 0x309A], [0xFB1E, 0xFB1E], [0xFE20, 0xFE23]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Mn.length; indexI++) { - for (indexJ = Mn[indexI][0]; indexJ <= Mn[indexI][1]; indexJ++) { - try { - var identifier = "$" + String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval("var " + identifier + "=1"); - if (eval(identifier + "===1") !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_218/S7.6_A2.2_T2.js b/tests/ES3/Unicode/Unicode_218/S7.6_A2.2_T2.js deleted file mode 100644 index 23162c9d9..000000000 --- a/tests/ES3/Unicode/Unicode_218/S7.6_A2.2_T2.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A2.2_T2; - * @section: 7.6; - * @assertion: IdentifierPart :: UnicodeCombiningMark (any character in the Unicode categories "Mn", "Mc"); - * @description: UnicodeCombiningMark :: Combining spacing mark (Mc). - * Complex test with eval; -*/ - -//CHECK -Mc = [[0x0903, 0x0903], [0x093E, 0x0940], [0x0949, 0x094C], [0x0982, 0x0983], [0x09BE, 0x09C0], [0x09C7, 0x09C8], [0x09CB, 0x09CC], [0x09D7, 0x09D7], [0x0A3E, 0x0A40], [0x0A83, 0x0A83], [0x0ABE, 0x0AC0], [0x0AC9, 0x0AC9], [0x0ACB, 0x0ACC], [0x0B02, 0x0B03], [0x0B3E, 0x0B3E], [0x0B40, 0x0B40], [0x0B47, 0x0B48], [0x0B4B, 0x0B4C], [0x0B57, 0x0B57], [0x0B83, 0x0B83], [0x0BBE, 0x0BBF], [0x0BC1, 0x0BC2], [0x0BC6, 0x0BC8], [0x0BCA, 0x0BCC], [0x0BD7, 0x0BD7], [0x0C01, 0x0C03], [0x0C41, 0x0C44], [0x0C82, 0x0C83], [0x0CBE, 0x0CBE], [0x0CC0, 0x0CC4], [0x0CC7, 0x0CC8], [0x0CCA, 0x0CCB], [0x0CD5, 0x0CD6], [0x0D02, 0x0D03], [0x0D3E, 0x0D40], [0x0D46, 0x0D48], [0x0D4A, 0x0D4C], [0x0D57, 0x0D57], [0x0F3E, 0x0F3F], [0x0F7F, 0x0F7F]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Mc.length; indexI++) { - for (indexJ = Mc[indexI][0]; indexJ <= Mc[indexI][1]; indexJ++) { - try { - var identifier = "$" + String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval("var " + identifier + "=1"); - if (eval(identifier + "===1") !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_218/S7.6_A2.3.js b/tests/ES3/Unicode/Unicode_218/S7.6_A2.3.js deleted file mode 100644 index ecf129c31..000000000 --- a/tests/ES3/Unicode/Unicode_218/S7.6_A2.3.js +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A2.3; - * @section: 7.6; - * @assertion: IdentifierPart :: UnicodeDigit (any character in the Unicode categories "Decimal Number (Nd)". - * @description: Complex test with eval; -*/ - -//CHECK -Nd = [[0x0030, 0x0039], [0x0660, 0x0669], [0x06F0, 0x06F9], [0x0966, 0x096F], [0x09E6, 0x09EF], [0x0A66, 0x0A6F], [0x0AE6, 0x0AEF], [0x0B66, 0x0B6F], [0x0BE7, 0x0BEF], [0x0C66, 0x0C6F], [0x0CE6, 0x0CEF], [0x0D66, 0x0D6F], [0x0E50, 0x0E59], [0x0ED0, 0x0ED9], [0x0F20, 0x0F29], [0xFF10, 0xFF19]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Nd.length; indexI++) { - for (indexJ = Nd[indexI][0]; indexJ <= Nd[indexI][1]; indexJ++) { - try { - var identifier = "$" + String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval("var " + identifier + "=1"); - if (eval(identifier + "===1") !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_218/S7.6_A2.4.js b/tests/ES3/Unicode/Unicode_218/S7.6_A2.4.js deleted file mode 100644 index 7d4cc1503..000000000 --- a/tests/ES3/Unicode/Unicode_218/S7.6_A2.4.js +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A2.4; - * @section: 7.6; - * @assertion: IdentifierPart :: UnicodeConnectorPunctuation (any character in the Unicode categories "Connector Punctuation (Pc)". - * @description: Complex test with eval; -*/ - -//CHECK -Pc = [[0x005F, 0x005F], [0x203F, 0x2040], [0x30FB, 0x30FB], [0xFE33, 0xFE34], [0xFE4D, 0xFE4F], [0xFF3F, 0xFF3F], [0xFF65, 0xFF65]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Pc.length; indexI++) { - for (indexJ = Pc[indexI][0]; indexJ <= Pc[indexI][1]; indexJ++) { - try { - var identifier = "$" + String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval("var " + identifier + "=1"); - if (eval(identifier + "===1") !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_218/S7.6_A3.1.js b/tests/ES3/Unicode/Unicode_218/S7.6_A3.1.js deleted file mode 100644 index 64fbbc045..000000000 --- a/tests/ES3/Unicode/Unicode_218/S7.6_A3.1.js +++ /dev/null @@ -1,152 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A3.1; - * @section: 7.6; - * @assertion: IdentifierName must contain only IdentifierPart character; - * @description: Complex test with eval; -*/ - -//CHECK -Lu = [[0x0041, 0x005A], [0x00C0, 0x00D6], [0x00D8, 0x00DE], [0x0100, 0x0100], [0x0102, 0x0102], [0x0104, 0x0104], [0x0106, 0x0106], [0x0108, 0x0108], [0x010A, 0x010A], [0x010C, 0x010C], [0x010E, 0x010E], [0x0110, 0x0110], [0x0112, 0x0112], [0x0114, 0x0114], [0x0116, 0x0116], [0x0118, 0x0118], [0x011A, 0x011A], [0x011C, 0x011C], [0x011E, 0x011E], [0x0120, 0x0120], [0x0122, 0x0122], [0x0124, 0x0124], [0x0126, 0x0126], [0x0128, 0x0128], [0x012A, 0x012A], [0x012C, 0x012C], [0x012E, 0x012E], [0x0130, 0x0130], [0x0132, 0x0132], [0x0134, 0x0134], [0x0136, 0x0136], [0x0139, 0x0139], [0x013B, 0x013B], [0x013D, 0x013D], [0x013F, 0x013F], [0x0141, 0x0141], [0x0143, 0x0143], [0x0145, 0x0145], [0x0147, 0x0147], [0x014A, 0x014A], [0x014C, 0x014C], [0x014E, 0x014E], [0x0150, 0x0150], [0x0152, 0x0152], [0x0154, 0x0154], [0x0156, 0x0156], [0x0158, 0x0158], [0x015A, 0x015A], [0x015C, 0x015C], [0x015E, 0x015E], [0x0160, 0x0160], [0x0162, 0x0162], [0x0164, 0x0164], [0x0166, 0x0166], [0x0168, 0x0168], [0x016A, 0x016A], [0x016C, 0x016C], [0x016E, 0x016E], [0x0170, 0x0170], [0x0172, 0x0172], [0x0174, 0x0174], [0x0176, 0x0176], [0x0178, 0x0179], [0x017B, 0x017B], [0x017D, 0x017D], [0x0181, 0x0182], [0x0184, 0x0184], [0x0186, 0x0187], [0x0189, 0x018B], [0x018E, 0x0191], [0x0193, 0x0194], [0x0196, 0x0198], [0x019C, 0x019D], [0x019F, 0x01A0], [0x01A2, 0x01A2], [0x01A4, 0x01A4], [0x01A6, 0x01A7], [0x01A9, 0x01A9], [0x01AC, 0x01AC], [0x01AE, 0x01AF], [0x01B1, 0x01B3], [0x01B5, 0x01B5], [0x01B7, 0x01B8], [0x01BC, 0x01BC], [0x01C4, 0x01C4], [0x01C7, 0x01C7], [0x01CA, 0x01CA], [0x01CD, 0x01CD], [0x01CF, 0x01CF], [0x01D1, 0x01D1], [0x01D3, 0x01D3], [0x01D5, 0x01D5], [0x01D7, 0x01D7], [0x01D9, 0x01D9], [0x01DB, 0x01DB], [0x01DE, 0x01DE], [0x01E0, 0x01E0], [0x01E2, 0x01E2], [0x01E4, 0x01E4], [0x01E6, 0x01E6], [0x01E8, 0x01E8], [0x01EA, 0x01EA], [0x01EC, 0x01EC], [0x01EE, 0x01EE], [0x01F1, 0x01F1], [0x01F4, 0x01F4], [0x01FA, 0x01FA], [0x01FC, 0x01FC], [0x01FE, 0x01FE], [0x0200, 0x0200], [0x0202, 0x0202], [0x0204, 0x0204], [0x0206, 0x0206], [0x0208, 0x0208], [0x020A, 0x020A], [0x020C, 0x020C], [0x020E, 0x020E], [0x0210, 0x0210], [0x0212, 0x0212], [0x0214, 0x0214], [0x0216, 0x0216], [0x0386, 0x0386], [0x0388, 0x038A], [0x038C, 0x038C], [0x038E, 0x038F], [0x0391, 0x03A1], [0x03A3, 0x03AB], [0x03D2, 0x03D4], [0x03DA, 0x03DA], [0x03DC, 0x03DC], [0x03DE, 0x03DE], [0x03E0, 0x03E0], [0x03E2, 0x03E2], [0x03E4, 0x03E4], [0x03E6, 0x03E6], [0x03E8, 0x03E8], [0x03EA, 0x03EA], [0x03EC, 0x03EC], [0x03EE, 0x03EE], [0x0401, 0x040C], [0x040E, 0x042F], [0x0460, 0x0460], [0x0462, 0x0462], [0x0464, 0x0464], [0x0466, 0x0466], [0x0468, 0x0468], [0x046A, 0x046A], [0x046C, 0x046C], [0x046E, 0x046E], [0x0470, 0x0470], [0x0472, 0x0472], [0x0474, 0x0474], [0x0476, 0x0476], [0x0478, 0x0478], [0x047A, 0x047A], [0x047C, 0x047C], [0x047E, 0x047E], [0x0480, 0x0480], [0x0490, 0x0490], [0x0492, 0x0492], [0x0494, 0x0494], [0x0496, 0x0496], [0x0498, 0x0498], [0x049A, 0x049A], [0x049C, 0x049C], [0x049E, 0x049E], [0x04A0, 0x04A0], [0x04A2, 0x04A2], [0x04A4, 0x04A4], [0x04A6, 0x04A6], [0x04A8, 0x04A8], [0x04AA, 0x04AA], [0x04AC, 0x04AC], [0x04AE, 0x04AE], [0x04B0, 0x04B0], [0x04B2, 0x04B2], [0x04B4, 0x04B4], [0x04B6, 0x04B6], [0x04B8, 0x04B8], [0x04BA, 0x04BA], [0x04BC, 0x04BC], [0x04BE, 0x04BE], [0x04C1, 0x04C1], [0x04C3, 0x04C3], [0x04C7, 0x04C7], [0x04CB, 0x04CB], [0x04D0, 0x04D0], [0x04D2, 0x04D2], [0x04D4, 0x04D4], [0x04D6, 0x04D6], [0x04D8, 0x04D8], [0x04DA, 0x04DA], [0x04DC, 0x04DC], [0x04DE, 0x04DE], [0x04E0, 0x04E0], [0x04E2, 0x04E2], [0x04E4, 0x04E4], [0x04E6, 0x04E6], [0x04E8, 0x04E8], [0x04EA, 0x04EA], [0x04EE, 0x04EE], [0x04F0, 0x04F0], [0x04F2, 0x04F2], [0x04F4, 0x04F4], [0x04F8, 0x04F8], [0x0531, 0x0556], [0x10A0, 0x10C5], [0x1E00, 0x1E00], [0x1E02, 0x1E02], [0x1E04, 0x1E04], [0x1E06, 0x1E06], [0x1E08, 0x1E08], [0x1E0A, 0x1E0A], [0x1E0C, 0x1E0C], [0x1E0E, 0x1E0E], [0x1E10, 0x1E10], [0x1E12, 0x1E12], [0x1E14, 0x1E14], [0x1E16, 0x1E16], [0x1E18, 0x1E18], [0x1E1A, 0x1E1A], [0x1E1C, 0x1E1C], [0x1E1E, 0x1E1E], [0x1E20, 0x1E20], [0x1E22, 0x1E22], [0x1E24, 0x1E24], [0x1E26, 0x1E26], [0x1E28, 0x1E28], [0x1E2A, 0x1E2A], [0x1E2C, 0x1E2C], [0x1E2E, 0x1E2E], [0x1E30, 0x1E30], [0x1E32, 0x1E32], [0x1E34, 0x1E34], [0x1E36, 0x1E36], [0x1E38, 0x1E38], [0x1E3A, 0x1E3A], [0x1E3C, 0x1E3C], [0x1E3E, 0x1E3E], [0x1E40, 0x1E40], [0x1E42, 0x1E42], [0x1E44, 0x1E44], [0x1E46, 0x1E46], [0x1E48, 0x1E48], [0x1E4A, 0x1E4A], [0x1E4C, 0x1E4C], [0x1E4E, 0x1E4E], [0x1E50, 0x1E50], [0x1E52, 0x1E52], [0x1E54, 0x1E54], [0x1E56, 0x1E56], [0x1E58, 0x1E58], [0x1E5A, 0x1E5A], [0x1E5C, 0x1E5C], [0x1E5E, 0x1E5E], [0x1E60, 0x1E60], [0x1E62, 0x1E62], [0x1E64, 0x1E64], [0x1E66, 0x1E66], [0x1E68, 0x1E68], [0x1E6A, 0x1E6A], [0x1E6C, 0x1E6C], [0x1E6E, 0x1E6E], [0x1E70, 0x1E70], [0x1E72, 0x1E72], [0x1E74, 0x1E74], [0x1E76, 0x1E76], [0x1E78, 0x1E78], [0x1E7A, 0x1E7A], [0x1E7C, 0x1E7C], [0x1E7E, 0x1E7E], [0x1E80, 0x1E80], [0x1E82, 0x1E82], [0x1E84, 0x1E84], [0x1E86, 0x1E86], [0x1E88, 0x1E88], [0x1E8A, 0x1E8A], [0x1E8C, 0x1E8C], [0x1E8E, 0x1E8E], [0x1E90, 0x1E90], [0x1E92, 0x1E92], [0x1E94, 0x1E94], [0x1EA0, 0x1EA0], [0x1EA2, 0x1EA2], [0x1EA4, 0x1EA4], [0x1EA6, 0x1EA6], [0x1EA8, 0x1EA8], [0x1EAA, 0x1EAA], [0x1EAC, 0x1EAC], [0x1EAE, 0x1EAE], [0x1EB0, 0x1EB0], [0x1EB2, 0x1EB2], [0x1EB4, 0x1EB4], [0x1EB6, 0x1EB6], [0x1EB8, 0x1EB8], [0x1EBA, 0x1EBA], [0x1EBC, 0x1EBC], [0x1EBE, 0x1EBE], [0x1EC0, 0x1EC0], [0x1EC2, 0x1EC2], [0x1EC4, 0x1EC4], [0x1EC6, 0x1EC6], [0x1EC8, 0x1EC8], [0x1ECA, 0x1ECA], [0x1ECC, 0x1ECC], [0x1ECE, 0x1ECE], [0x1ED0, 0x1ED0], [0x1ED2, 0x1ED2], [0x1ED4, 0x1ED4], [0x1ED6, 0x1ED6], [0x1ED8, 0x1ED8], [0x1EDA, 0x1EDA], [0x1EDC, 0x1EDC], [0x1EDE, 0x1EDE], [0x1EE0, 0x1EE0], [0x1EE2, 0x1EE2], [0x1EE4, 0x1EE4], [0x1EE6, 0x1EE6], [0x1EE8, 0x1EE8], [0x1EEA, 0x1EEA], [0x1EEC, 0x1EEC], [0x1EEE, 0x1EEE], [0x1EF0, 0x1EF0], [0x1EF2, 0x1EF2], [0x1EF4, 0x1EF4], [0x1EF6, 0x1EF6], [0x1EF8, 0x1EF8], [0x1F08, 0x1F0F], [0x1F18, 0x1F1D], [0x1F28, 0x1F2F], [0x1F38, 0x1F3F], [0x1F48, 0x1F4D], [0x1F59, 0x1F59], [0x1F5B, 0x1F5B], [0x1F5D, 0x1F5D], [0x1F5F, 0x1F5F], [0x1F68, 0x1F6F], [0x1F88, 0x1F8F], [0x1F98, 0x1F9F], [0x1FA8, 0x1FAF], [0x1FB8, 0x1FBC], [0x1FC8, 0x1FCC], [0x1FD8, 0x1FDB], [0x1FE8, 0x1FEC], [0x1FF8, 0x1FFC], [0x2102, 0x2102], [0x2107, 0x2107], [0x210B, 0x210D], [0x2110, 0x2112], [0x2115, 0x2115], [0x2119, 0x211D], [0x2124, 0x2124], [0x2126, 0x2126], [0x2128, 0x2128], [0x212A, 0x212D], [0x2130, 0x2131], [0x2133, 0x2133], [0xFF21, 0xFF3A]]; -Ll = [[0x0061, 0x007A], [0x00AA, 0x00AA], [0x00B5, 0x00B5], [0x00BA, 0x00BA], [0x00DF, 0x00F6], [0x00F8, 0x00FF], [0x0101, 0x0101], [0x0103, 0x0103], [0x0105, 0x0105], [0x0107, 0x0107], [0x0109, 0x0109], [0x010B, 0x010B], [0x010D, 0x010D], [0x010F, 0x010F], [0x0111, 0x0111], [0x0113, 0x0113], [0x0115, 0x0115], [0x0117, 0x0117], [0x0119, 0x0119], [0x011B, 0x011B], [0x011D, 0x011D], [0x011F, 0x011F], [0x0121, 0x0121], [0x0123, 0x0123], [0x0125, 0x0125], [0x0127, 0x0127], [0x0129, 0x0129], [0x012B, 0x012B], [0x012D, 0x012D], [0x012F, 0x012F], [0x0131, 0x0131], [0x0133, 0x0133], [0x0135, 0x0135], [0x0137, 0x0138], [0x013A, 0x013A], [0x013C, 0x013C], [0x013E, 0x013E], [0x0140, 0x0140], [0x0142, 0x0142], [0x0144, 0x0144], [0x0146, 0x0146], [0x0148, 0x0149], [0x014B, 0x014B], [0x014D, 0x014D], [0x014F, 0x014F], [0x0151, 0x0151], [0x0153, 0x0153], [0x0155, 0x0155], [0x0157, 0x0157], [0x0159, 0x0159], [0x015B, 0x015B], [0x015D, 0x015D], [0x015F, 0x015F], [0x0161, 0x0161], [0x0163, 0x0163], [0x0165, 0x0165], [0x0167, 0x0167], [0x0169, 0x0169], [0x016B, 0x016B], [0x016D, 0x016D], [0x016F, 0x016F], [0x0171, 0x0171], [0x0173, 0x0173], [0x0175, 0x0175], [0x0177, 0x0177], [0x017A, 0x017A], [0x017C, 0x017C], [0x017E, 0x0180], [0x0183, 0x0183], [0x0185, 0x0185], [0x0188, 0x0188], [0x018C, 0x018D], [0x0192, 0x0192], [0x0195, 0x0195], [0x0199, 0x019B], [0x019E, 0x019E], [0x01A1, 0x01A1], [0x01A3, 0x01A3], [0x01A5, 0x01A5], [0x01A8, 0x01A8], [0x01AB, 0x01AB], [0x01AD, 0x01AD], [0x01B0, 0x01B0], [0x01B4, 0x01B4], [0x01B6, 0x01B6], [0x01B9, 0x01BA], [0x01BD, 0x01BD], [0x01C6, 0x01C6], [0x01C9, 0x01C9], [0x01CC, 0x01CC], [0x01CE, 0x01CE], [0x01D0, 0x01D0], [0x01D2, 0x01D2], [0x01D4, 0x01D4], [0x01D6, 0x01D6], [0x01D8, 0x01D8], [0x01DA, 0x01DA], [0x01DC, 0x01DD], [0x01DF, 0x01DF], [0x01E1, 0x01E1], [0x01E3, 0x01E3], [0x01E5, 0x01E5], [0x01E7, 0x01E7], [0x01E9, 0x01E9], [0x01EB, 0x01EB], [0x01ED, 0x01ED], [0x01EF, 0x01F0], [0x01F3, 0x01F3], [0x01F5, 0x01F5], [0x01FB, 0x01FB], [0x01FD, 0x01FD], [0x01FF, 0x01FF], [0x0201, 0x0201], [0x0203, 0x0203], [0x0205, 0x0205], [0x0207, 0x0207], [0x0209, 0x0209], [0x020B, 0x020B], [0x020D, 0x020D], [0x020F, 0x020F], [0x0211, 0x0211], [0x0213, 0x0213], [0x0215, 0x0215], [0x0217, 0x0217], [0x0250, 0x02A8], [0x0390, 0x0390], [0x03AC, 0x03CE], [0x03D0, 0x03D1], [0x03D5, 0x03D6], [0x03E3, 0x03E3], [0x03E5, 0x03E5], [0x03E7, 0x03E7], [0x03E9, 0x03E9], [0x03EB, 0x03EB], [0x03ED, 0x03ED], [0x03EF, 0x03F2], [0x0430, 0x044F], [0x0451, 0x045C], [0x045E, 0x045F], [0x0461, 0x0461], [0x0463, 0x0463], [0x0465, 0x0465], [0x0467, 0x0467], [0x0469, 0x0469], [0x046B, 0x046B], [0x046D, 0x046D], [0x046F, 0x046F], [0x0471, 0x0471], [0x0473, 0x0473], [0x0475, 0x0475], [0x0477, 0x0477], [0x0479, 0x0479], [0x047B, 0x047B], [0x047D, 0x047D], [0x047F, 0x047F], [0x0481, 0x0481], [0x0491, 0x0491], [0x0493, 0x0493], [0x0495, 0x0495], [0x0497, 0x0497], [0x0499, 0x0499], [0x049B, 0x049B], [0x049D, 0x049D], [0x049F, 0x049F], [0x04A1, 0x04A1], [0x04A3, 0x04A3], [0x04A5, 0x04A5], [0x04A7, 0x04A7], [0x04A9, 0x04A9], [0x04AB, 0x04AB], [0x04AD, 0x04AD], [0x04AF, 0x04AF], [0x04B1, 0x04B1], [0x04B3, 0x04B3], [0x04B5, 0x04B5], [0x04B7, 0x04B7], [0x04B9, 0x04B9], [0x04BB, 0x04BB], [0x04BD, 0x04BD], [0x04BF, 0x04BF], [0x04C2, 0x04C2], [0x04C4, 0x04C4], [0x04C8, 0x04C8], [0x04CC, 0x04CC], [0x04D1, 0x04D1], [0x04D3, 0x04D3], [0x04D5, 0x04D5], [0x04D7, 0x04D7], [0x04D9, 0x04D9], [0x04DB, 0x04DB], [0x04DD, 0x04DD], [0x04DF, 0x04DF], [0x04E1, 0x04E1], [0x04E3, 0x04E3], [0x04E5, 0x04E5], [0x04E7, 0x04E7], [0x04E9, 0x04E9], [0x04EB, 0x04EB], [0x04EF, 0x04EF], [0x04F1, 0x04F1], [0x04F3, 0x04F3], [0x04F5, 0x04F5], [0x04F9, 0x04F9], [0x0561, 0x0587], [0x10D0, 0x10F6], [0x1E01, 0x1E01], [0x1E03, 0x1E03], [0x1E05, 0x1E05], [0x1E07, 0x1E07], [0x1E09, 0x1E09], [0x1E0B, 0x1E0B], [0x1E0D, 0x1E0D], [0x1E0F, 0x1E0F], [0x1E11, 0x1E11], [0x1E13, 0x1E13], [0x1E15, 0x1E15], [0x1E17, 0x1E17], [0x1E19, 0x1E19], [0x1E1B, 0x1E1B], [0x1E1D, 0x1E1D], [0x1E1F, 0x1E1F], [0x1E21, 0x1E21], [0x1E23, 0x1E23], [0x1E25, 0x1E25], [0x1E27, 0x1E27], [0x1E29, 0x1E29], [0x1E2B, 0x1E2B], [0x1E2D, 0x1E2D], [0x1E2F, 0x1E2F], [0x1E31, 0x1E31], [0x1E33, 0x1E33], [0x1E35, 0x1E35], [0x1E37, 0x1E37], [0x1E39, 0x1E39], [0x1E3B, 0x1E3B], [0x1E3D, 0x1E3D], [0x1E3F, 0x1E3F], [0x1E41, 0x1E41], [0x1E43, 0x1E43], [0x1E45, 0x1E45], [0x1E47, 0x1E47], [0x1E49, 0x1E49], [0x1E4B, 0x1E4B], [0x1E4D, 0x1E4D], [0x1E4F, 0x1E4F], [0x1E51, 0x1E51], [0x1E53, 0x1E53], [0x1E55, 0x1E55], [0x1E57, 0x1E57], [0x1E59, 0x1E59], [0x1E5B, 0x1E5B], [0x1E5D, 0x1E5D], [0x1E5F, 0x1E5F], [0x1E61, 0x1E61], [0x1E63, 0x1E63], [0x1E65, 0x1E65], [0x1E67, 0x1E67], [0x1E69, 0x1E69], [0x1E6B, 0x1E6B], [0x1E6D, 0x1E6D], [0x1E6F, 0x1E6F], [0x1E71, 0x1E71], [0x1E73, 0x1E73], [0x1E75, 0x1E75], [0x1E77, 0x1E77], [0x1E79, 0x1E79], [0x1E7B, 0x1E7B], [0x1E7D, 0x1E7D], [0x1E7F, 0x1E7F], [0x1E81, 0x1E81], [0x1E83, 0x1E83], [0x1E85, 0x1E85], [0x1E87, 0x1E87], [0x1E89, 0x1E89], [0x1E8B, 0x1E8B], [0x1E8D, 0x1E8D], [0x1E8F, 0x1E8F], [0x1E91, 0x1E91], [0x1E93, 0x1E93], [0x1E95, 0x1E9B], [0x1EA1, 0x1EA1], [0x1EA3, 0x1EA3], [0x1EA5, 0x1EA5], [0x1EA7, 0x1EA7], [0x1EA9, 0x1EA9], [0x1EAB, 0x1EAB], [0x1EAD, 0x1EAD], [0x1EAF, 0x1EAF], [0x1EB1, 0x1EB1], [0x1EB3, 0x1EB3], [0x1EB5, 0x1EB5], [0x1EB7, 0x1EB7], [0x1EB9, 0x1EB9], [0x1EBB, 0x1EBB], [0x1EBD, 0x1EBD], [0x1EBF, 0x1EBF], [0x1EC1, 0x1EC1], [0x1EC3, 0x1EC3], [0x1EC5, 0x1EC5], [0x1EC7, 0x1EC7], [0x1EC9, 0x1EC9], [0x1ECB, 0x1ECB], [0x1ECD, 0x1ECD], [0x1ECF, 0x1ECF], [0x1ED1, 0x1ED1], [0x1ED3, 0x1ED3], [0x1ED5, 0x1ED5], [0x1ED7, 0x1ED7], [0x1ED9, 0x1ED9], [0x1EDB, 0x1EDB], [0x1EDD, 0x1EDD], [0x1EDF, 0x1EDF], [0x1EE1, 0x1EE1], [0x1EE3, 0x1EE3], [0x1EE5, 0x1EE5], [0x1EE7, 0x1EE7], [0x1EE9, 0x1EE9], [0x1EEB, 0x1EEB], [0x1EED, 0x1EED], [0x1EEF, 0x1EEF], [0x1EF1, 0x1EF1], [0x1EF3, 0x1EF3], [0x1EF5, 0x1EF5], [0x1EF7, 0x1EF7], [0x1EF9, 0x1EF9], [0x1F00, 0x1F07], [0x1F10, 0x1F15], [0x1F20, 0x1F27], [0x1F30, 0x1F37], [0x1F40, 0x1F45], [0x1F50, 0x1F57], [0x1F60, 0x1F67], [0x1F70, 0x1F7D], [0x1F80, 0x1F87], [0x1F90, 0x1F97], [0x1FA0, 0x1FA7], [0x1FB0, 0x1FB4], [0x1FB6, 0x1FB7], [0x1FBE, 0x1FBE], [0x1FC2, 0x1FC4], [0x1FC6, 0x1FC7], [0x1FD0, 0x1FD3], [0x1FD6, 0x1FD7], [0x1FE0, 0x1FE7], [0x1FF2, 0x1FF4], [0x1FF6, 0x1FF7], [0x207F, 0x207F], [0x210A, 0x210A], [0x210E, 0x210F], [0x2113, 0x2113], [0x2118, 0x2118], [0x212E, 0x212F], [0x2134, 0x2134], [0xFB00, 0xFB06], [0xFB13, 0xFB17], [0xFF41, 0xFF5A]]; -Lt = [[0x01C5, 0x01C5], [0x01C8, 0x01C8], [0x01CB, 0x01CB], [0x01F2, 0x01F2]]; -Lm = [[0x02B0, 0x02B8], [0x02BB, 0x02C1], [0x02D0, 0x02D1], [0x02E0, 0x02E4], [0x037A, 0x037A], [0x0559, 0x0559], [0x0640, 0x0640], [0x06E5, 0x06E6], [0x0E46, 0x0E46], [0x0EC6, 0x0EC6], [0x3005, 0x3005], [0x3031, 0x3035], [0x309D, 0x309E], [0x30FC, 0x30FE], [0xFF70, 0xFF70], [0xFF9E, 0xFF9F]]; -Lo = [[0x01AA, 0x01AA], [0x01BB, 0x01BB], [0x01BE, 0x01C3], [0x03F3, 0x03F3], [0x04C0, 0x04C0], [0x05D0, 0x05EA], [0x05F0, 0x05F2], [0x0621, 0x063A], [0x0641, 0x064A], [0x0671, 0x06B7], [0x06BA, 0x06BE], [0x06C0, 0x06CE], [0x06D0, 0x06D3], [0x06D5, 0x06D5], [0x0905, 0x0939], [0x093D, 0x093D], [0x0950, 0x0950], [0x0958, 0x0961], [0x0985, 0x098C], [0x098F, 0x0990], [0x0993, 0x09A8], [0x09AA, 0x09B0], [0x09B2, 0x09B2], [0x09B6, 0x09B9], [0x09DC, 0x09DD], [0x09DF, 0x09E1], [0x09F0, 0x09F1], [0x0A05, 0x0A0A], [0x0A0F, 0x0A10], [0x0A13, 0x0A28], [0x0A2A, 0x0A30], [0x0A32, 0x0A33], [0x0A35, 0x0A36], [0x0A38, 0x0A39], [0x0A59, 0x0A5C], [0x0A5E, 0x0A5E], [0x0A72, 0x0A74], [0x0A85, 0x0A8B], [0x0A8D, 0x0A8D], [0x0A8F, 0x0A91], [0x0A93, 0x0AA8], [0x0AAA, 0x0AB0], [0x0AB2, 0x0AB3], [0x0AB5, 0x0AB9], [0x0ABD, 0x0ABD], [0x0AD0, 0x0AD0], [0x0AE0, 0x0AE0], [0x0B05, 0x0B0C], [0x0B0F, 0x0B10], [0x0B13, 0x0B28], [0x0B2A, 0x0B30], [0x0B32, 0x0B33], [0x0B36, 0x0B39], [0x0B3D, 0x0B3D], [0x0B5C, 0x0B5D], [0x0B5F, 0x0B61], [0x0B85, 0x0B8A], [0x0B8E, 0x0B90], [0x0B92, 0x0B95], [0x0B99, 0x0B9A], [0x0B9C, 0x0B9C], [0x0B9E, 0x0B9F], [0x0BA3, 0x0BA4], [0x0BA8, 0x0BAA], [0x0BAE, 0x0BB5], [0x0BB7, 0x0BB9], [0x0C05, 0x0C0C], [0x0C0E, 0x0C10], [0x0C12, 0x0C28], [0x0C2A, 0x0C33], [0x0C35, 0x0C39], [0x0C60, 0x0C61], [0x0C85, 0x0C8C], [0x0C8E, 0x0C90], [0x0C92, 0x0CA8], [0x0CAA, 0x0CB3], [0x0CB5, 0x0CB9], [0x0CDE, 0x0CDE], [0x0CE0, 0x0CE1], [0x0D05, 0x0D0C], [0x0D0E, 0x0D10], [0x0D12, 0x0D28], [0x0D2A, 0x0D39], [0x0D60, 0x0D61], [0x0E01, 0x0E30], [0x0E32, 0x0E33], [0x0E40, 0x0E45], [0x0E81, 0x0E82], [0x0E84, 0x0E84], [0x0E87, 0x0E88], [0x0E8A, 0x0E8A], [0x0E8D, 0x0E8D], [0x0E94, 0x0E97], [0x0E99, 0x0E9F], [0x0EA1, 0x0EA3], [0x0EA5, 0x0EA5], [0x0EA7, 0x0EA7], [0x0EAA, 0x0EAB], [0x0EAD, 0x0EB0], [0x0EB2, 0x0EB3], [0x0EBD, 0x0EBD], [0x0EC0, 0x0EC4], [0x0EDC, 0x0EDD], [0x0F00, 0x0F00], [0x0F40, 0x0F47], [0x0F49, 0x0F69], [0x0F88, 0x0F8B], [0x1100, 0x1159], [0x115F, 0x11A2], [0x11A8, 0x11F9], [0x2135, 0x2138], [0x3006, 0x3006], [0x3041, 0x3094], [0x30A1, 0x30FA], [0x3105, 0x312C], [0x3131, 0x318E], [0x4E00, 0x9FA5], [0xAC00, 0xD7A3], [0xF900, 0xFA2D], [0xFB1F, 0xFB28], [0xFB2A, 0xFB36], [0xFB38, 0xFB3C], [0xFB3E, 0xFB3E], [0xFB40, 0xFB41], [0xFB43, 0xFB44], [0xFB46, 0xFBB1], [0xFBD3, 0xFD3D], [0xFD50, 0xFD8F], [0xFD92, 0xFDC7], [0xFDF0, 0xFDFB], [0xFE70, 0xFE72], [0xFE74, 0xFE74], [0xFE76, 0xFEFC], [0xFF66, 0xFF6F], [0xFF71, 0xFF9D], [0xFFA0, 0xFFBE], [0xFFC2, 0xFFC7], [0xFFCA, 0xFFCF], [0xFFD2, 0xFFD7], [0xFFDA, 0xFFDC]]; -Nl = [[0x2160, 0x2182], [0x3007, 0x3007], [0x3021, 0x3029]]; -Mn = [[0x0300, 0x0345], [0x0360, 0x0361], [0x0483, 0x0486], [0x0591, 0x05A1], [0x05A3, 0x05B9], [0x05BB, 0x05BD], [0x05BF, 0x05BF], [0x05C1, 0x05C2], [0x05C4, 0x05C4], [0x064B, 0x0652], [0x0670, 0x0670], [0x06D6, 0x06DC], [0x06DF, 0x06E4], [0x06E7, 0x06E8], [0x06EA, 0x06ED], [0x0901, 0x0902], [0x093C, 0x093C], [0x0941, 0x0948], [0x094D, 0x094D], [0x0951, 0x0954], [0x0962, 0x0963], [0x0981, 0x0981], [0x09BC, 0x09BC], [0x09C1, 0x09C4], [0x09CD, 0x09CD], [0x09E2, 0x09E3], [0x0A02, 0x0A02], [0x0A3C, 0x0A3C], [0x0A41, 0x0A42], [0x0A47, 0x0A48], [0x0A4B, 0x0A4D], [0x0A70, 0x0A71], [0x0A81, 0x0A82], [0x0ABC, 0x0ABC], [0x0AC1, 0x0AC5], [0x0AC7, 0x0AC8], [0x0ACD, 0x0ACD], [0x0B01, 0x0B01], [0x0B3C, 0x0B3C], [0x0B3F, 0x0B3F], [0x0B41, 0x0B43], [0x0B4D, 0x0B4D], [0x0B56, 0x0B56], [0x0B82, 0x0B82], [0x0BC0, 0x0BC0], [0x0BCD, 0x0BCD], [0x0C3E, 0x0C40], [0x0C46, 0x0C48], [0x0C4A, 0x0C4D], [0x0C55, 0x0C56], [0x0CBF, 0x0CBF], [0x0CC6, 0x0CC6], [0x0CCC, 0x0CCD], [0x0D41, 0x0D43], [0x0D4D, 0x0D4D], [0x0E31, 0x0E31], [0x0E34, 0x0E3A], [0x0E47, 0x0E4E], [0x0EB1, 0x0EB1], [0x0EB4, 0x0EB9], [0x0EBB, 0x0EBC], [0x0EC8, 0x0ECD], [0x0F18, 0x0F19], [0x0F35, 0x0F35], [0x0F37, 0x0F37], [0x0F39, 0x0F39], [0x0F71, 0x0F7E], [0x0F80, 0x0F84], [0x0F86, 0x0F87], [0x0F90, 0x0F95], [0x0F97, 0x0F97], [0x0F99, 0x0FAD], [0x0FB1, 0x0FB7], [0x0FB9, 0x0FB9], [0x20D0, 0x20DC], [0x20E1, 0x20E1], [0x302A, 0x302F], [0x3099, 0x309A], [0xFB1E, 0xFB1E], [0xFE20, 0xFE23]]; -Mc = [[0x0903, 0x0903], [0x093E, 0x0940], [0x0949, 0x094C], [0x0982, 0x0983], [0x09BE, 0x09C0], [0x09C7, 0x09C8], [0x09CB, 0x09CC], [0x09D7, 0x09D7], [0x0A3E, 0x0A40], [0x0A83, 0x0A83], [0x0ABE, 0x0AC0], [0x0AC9, 0x0AC9], [0x0ACB, 0x0ACC], [0x0B02, 0x0B03], [0x0B3E, 0x0B3E], [0x0B40, 0x0B40], [0x0B47, 0x0B48], [0x0B4B, 0x0B4C], [0x0B57, 0x0B57], [0x0B83, 0x0B83], [0x0BBE, 0x0BBF], [0x0BC1, 0x0BC2], [0x0BC6, 0x0BC8], [0x0BCA, 0x0BCC], [0x0BD7, 0x0BD7], [0x0C01, 0x0C03], [0x0C41, 0x0C44], [0x0C82, 0x0C83], [0x0CBE, 0x0CBE], [0x0CC0, 0x0CC4], [0x0CC7, 0x0CC8], [0x0CCA, 0x0CCB], [0x0CD5, 0x0CD6], [0x0D02, 0x0D03], [0x0D3E, 0x0D40], [0x0D46, 0x0D48], [0x0D4A, 0x0D4C], [0x0D57, 0x0D57], [0x0F3E, 0x0F3F], [0x0F7F, 0x0F7F]]; -Nd = [[0x0030, 0x0039], [0x0660, 0x0669], [0x06F0, 0x06F9], [0x0966, 0x096F], [0x09E6, 0x09EF], [0x0A66, 0x0A6F], [0x0AE6, 0x0AEF], [0x0B66, 0x0B6F], [0x0BE7, 0x0BEF], [0x0C66, 0x0C6F], [0x0CE6, 0x0CEF], [0x0D66, 0x0D6F], [0x0E50, 0x0E59], [0x0ED0, 0x0ED9], [0x0F20, 0x0F29], [0xFF10, 0xFF19]]; -Pc = [[0x005F, 0x005F], [0x203F, 0x2040], [0x30FB, 0x30FB], [0xFE33, 0xFE34], [0xFE4D, 0xFE4F], [0xFF3F, 0xFF3F], [0xFF65, 0xFF65]]; - -UnicodeLetterLu = []; -UnicodeLetterLl = []; -UnicodeLetterLt = []; -UnicodeLetterLm = []; -UnicodeLetterLo = []; -UnicodeLetterNl = []; -UnicodeLetterMn = []; -UnicodeLetterMc = []; -UnicodeLetterNd = []; -UnicodeLetterPc = []; - -for (indexI = 0; indexI < Lu.length; indexI++) { - for (indexJ = Lu[indexI][0]; indexJ <= Lu[indexI][1]; indexJ++) { - UnicodeLetterLu[indexJ] = true; - } -} -for (indexI = 0; indexI < Ll.length; indexI++) { - for (indexJ = Ll[indexI][0]; indexJ <= Ll[indexI][1]; indexJ++) { - UnicodeLetterLl[indexJ] = true; - } -} -for (indexI = 0; indexI < Lt.length; indexI++) { - for (indexJ = Lt[indexI][0]; indexJ <= Lt[indexI][1]; indexJ++) { - UnicodeLetterLt[indexJ] = true; - } -} -for (indexI = 0; indexI < Lm.length; indexI++) { - for (indexJ = Lm[indexI][0]; indexJ <= Lm[indexI][1]; indexJ++) { - UnicodeLetterLm[indexJ] = true; - } -} -for (indexI = 0; indexI < Lo.length; indexI++) { - for (indexJ = Lo[indexI][0]; indexJ <= Lo[indexI][1]; indexJ++) { - UnicodeLetterLo[indexJ] = true; - } -} -for (indexI = 0; indexI < Nl.length; indexI++) { - for (indexJ = Nl[indexI][0]; indexJ <= Nl[indexI][1]; indexJ++) { - UnicodeLetterNl[indexJ] = true; - } -} -for (indexI = 0; indexI < Mn.length; indexI++) { - for (indexJ = Mn[indexI][0]; indexJ <= Mn[indexI][1]; indexJ++) { - UnicodeLetterMn[indexJ] = true; - } -} -for (indexI = 0; indexI < Mc.length; indexI++) { - for (indexJ = Mc[indexI][0]; indexJ <= Mc[indexI][1]; indexJ++) { - UnicodeLetterMc[indexJ] = true; - } -} -for (indexI = 0; indexI < Nd.length; indexI++) { - for (indexJ = Nd[indexI][0]; indexJ <= Nd[indexI][1]; indexJ++) { - UnicodeLetterNd[indexJ] = true; - } -} -for (indexI = 0; indexI < Pc.length; indexI++) { - for (indexJ = Pc[indexI][0]; indexJ <= Pc[indexI][1]; indexJ++) { - UnicodeLetterPc[indexJ] = true; - } -} - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; -for (index = 0; index <= 65535; index++) { - if ((UnicodeLetterLu[index] === undefined) && (UnicodeLetterLl[index] === undefined) && (UnicodeLetterLt[index] === undefined) && (UnicodeLetterLm[index] === undefined) && (UnicodeLetterLo[index] === undefined) && (UnicodeLetterNl[index] === undefined) && (UnicodeLetterMn[index] === undefined) && (UnicodeLetterMc[index] === undefined) && (UnicodeLetterNd[index] === undefined) && (UnicodeLetterPc[index] === undefined) && (index !== 0x0024) && (index !== 0x005F)) { - try { - var identifier = "$" + String.fromCharCode(index) + "1"; - eval("var " + identifier + "=1"); - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; - } catch (e) { - } - count++; - } -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_218/S7.6_A3.2.js b/tests/ES3/Unicode/Unicode_218/S7.6_A3.2.js deleted file mode 100644 index 32c90fc4c..000000000 --- a/tests/ES3/Unicode/Unicode_218/S7.6_A3.2.js +++ /dev/null @@ -1,124 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A3.2; - * @section: 7.6; - * @assertion: IdentifierName must begin only IdentifierStart character; - * @description: Complex test with eval; -*/ - -//CHECK -Lu = [[0x0041, 0x005A], [0x00C0, 0x00D6], [0x00D8, 0x00DE], [0x0100, 0x0100], [0x0102, 0x0102], [0x0104, 0x0104], [0x0106, 0x0106], [0x0108, 0x0108], [0x010A, 0x010A], [0x010C, 0x010C], [0x010E, 0x010E], [0x0110, 0x0110], [0x0112, 0x0112], [0x0114, 0x0114], [0x0116, 0x0116], [0x0118, 0x0118], [0x011A, 0x011A], [0x011C, 0x011C], [0x011E, 0x011E], [0x0120, 0x0120], [0x0122, 0x0122], [0x0124, 0x0124], [0x0126, 0x0126], [0x0128, 0x0128], [0x012A, 0x012A], [0x012C, 0x012C], [0x012E, 0x012E], [0x0130, 0x0130], [0x0132, 0x0132], [0x0134, 0x0134], [0x0136, 0x0136], [0x0139, 0x0139], [0x013B, 0x013B], [0x013D, 0x013D], [0x013F, 0x013F], [0x0141, 0x0141], [0x0143, 0x0143], [0x0145, 0x0145], [0x0147, 0x0147], [0x014A, 0x014A], [0x014C, 0x014C], [0x014E, 0x014E], [0x0150, 0x0150], [0x0152, 0x0152], [0x0154, 0x0154], [0x0156, 0x0156], [0x0158, 0x0158], [0x015A, 0x015A], [0x015C, 0x015C], [0x015E, 0x015E], [0x0160, 0x0160], [0x0162, 0x0162], [0x0164, 0x0164], [0x0166, 0x0166], [0x0168, 0x0168], [0x016A, 0x016A], [0x016C, 0x016C], [0x016E, 0x016E], [0x0170, 0x0170], [0x0172, 0x0172], [0x0174, 0x0174], [0x0176, 0x0176], [0x0178, 0x0179], [0x017B, 0x017B], [0x017D, 0x017D], [0x0181, 0x0182], [0x0184, 0x0184], [0x0186, 0x0187], [0x0189, 0x018B], [0x018E, 0x0191], [0x0193, 0x0194], [0x0196, 0x0198], [0x019C, 0x019D], [0x019F, 0x01A0], [0x01A2, 0x01A2], [0x01A4, 0x01A4], [0x01A6, 0x01A7], [0x01A9, 0x01A9], [0x01AC, 0x01AC], [0x01AE, 0x01AF], [0x01B1, 0x01B3], [0x01B5, 0x01B5], [0x01B7, 0x01B8], [0x01BC, 0x01BC], [0x01C4, 0x01C4], [0x01C7, 0x01C7], [0x01CA, 0x01CA], [0x01CD, 0x01CD], [0x01CF, 0x01CF], [0x01D1, 0x01D1], [0x01D3, 0x01D3], [0x01D5, 0x01D5], [0x01D7, 0x01D7], [0x01D9, 0x01D9], [0x01DB, 0x01DB], [0x01DE, 0x01DE], [0x01E0, 0x01E0], [0x01E2, 0x01E2], [0x01E4, 0x01E4], [0x01E6, 0x01E6], [0x01E8, 0x01E8], [0x01EA, 0x01EA], [0x01EC, 0x01EC], [0x01EE, 0x01EE], [0x01F1, 0x01F1], [0x01F4, 0x01F4], [0x01FA, 0x01FA], [0x01FC, 0x01FC], [0x01FE, 0x01FE], [0x0200, 0x0200], [0x0202, 0x0202], [0x0204, 0x0204], [0x0206, 0x0206], [0x0208, 0x0208], [0x020A, 0x020A], [0x020C, 0x020C], [0x020E, 0x020E], [0x0210, 0x0210], [0x0212, 0x0212], [0x0214, 0x0214], [0x0216, 0x0216], [0x0386, 0x0386], [0x0388, 0x038A], [0x038C, 0x038C], [0x038E, 0x038F], [0x0391, 0x03A1], [0x03A3, 0x03AB], [0x03D2, 0x03D4], [0x03DA, 0x03DA], [0x03DC, 0x03DC], [0x03DE, 0x03DE], [0x03E0, 0x03E0], [0x03E2, 0x03E2], [0x03E4, 0x03E4], [0x03E6, 0x03E6], [0x03E8, 0x03E8], [0x03EA, 0x03EA], [0x03EC, 0x03EC], [0x03EE, 0x03EE], [0x0401, 0x040C], [0x040E, 0x042F], [0x0460, 0x0460], [0x0462, 0x0462], [0x0464, 0x0464], [0x0466, 0x0466], [0x0468, 0x0468], [0x046A, 0x046A], [0x046C, 0x046C], [0x046E, 0x046E], [0x0470, 0x0470], [0x0472, 0x0472], [0x0474, 0x0474], [0x0476, 0x0476], [0x0478, 0x0478], [0x047A, 0x047A], [0x047C, 0x047C], [0x047E, 0x047E], [0x0480, 0x0480], [0x0490, 0x0490], [0x0492, 0x0492], [0x0494, 0x0494], [0x0496, 0x0496], [0x0498, 0x0498], [0x049A, 0x049A], [0x049C, 0x049C], [0x049E, 0x049E], [0x04A0, 0x04A0], [0x04A2, 0x04A2], [0x04A4, 0x04A4], [0x04A6, 0x04A6], [0x04A8, 0x04A8], [0x04AA, 0x04AA], [0x04AC, 0x04AC], [0x04AE, 0x04AE], [0x04B0, 0x04B0], [0x04B2, 0x04B2], [0x04B4, 0x04B4], [0x04B6, 0x04B6], [0x04B8, 0x04B8], [0x04BA, 0x04BA], [0x04BC, 0x04BC], [0x04BE, 0x04BE], [0x04C1, 0x04C1], [0x04C3, 0x04C3], [0x04C7, 0x04C7], [0x04CB, 0x04CB], [0x04D0, 0x04D0], [0x04D2, 0x04D2], [0x04D4, 0x04D4], [0x04D6, 0x04D6], [0x04D8, 0x04D8], [0x04DA, 0x04DA], [0x04DC, 0x04DC], [0x04DE, 0x04DE], [0x04E0, 0x04E0], [0x04E2, 0x04E2], [0x04E4, 0x04E4], [0x04E6, 0x04E6], [0x04E8, 0x04E8], [0x04EA, 0x04EA], [0x04EE, 0x04EE], [0x04F0, 0x04F0], [0x04F2, 0x04F2], [0x04F4, 0x04F4], [0x04F8, 0x04F8], [0x0531, 0x0556], [0x10A0, 0x10C5], [0x1E00, 0x1E00], [0x1E02, 0x1E02], [0x1E04, 0x1E04], [0x1E06, 0x1E06], [0x1E08, 0x1E08], [0x1E0A, 0x1E0A], [0x1E0C, 0x1E0C], [0x1E0E, 0x1E0E], [0x1E10, 0x1E10], [0x1E12, 0x1E12], [0x1E14, 0x1E14], [0x1E16, 0x1E16], [0x1E18, 0x1E18], [0x1E1A, 0x1E1A], [0x1E1C, 0x1E1C], [0x1E1E, 0x1E1E], [0x1E20, 0x1E20], [0x1E22, 0x1E22], [0x1E24, 0x1E24], [0x1E26, 0x1E26], [0x1E28, 0x1E28], [0x1E2A, 0x1E2A], [0x1E2C, 0x1E2C], [0x1E2E, 0x1E2E], [0x1E30, 0x1E30], [0x1E32, 0x1E32], [0x1E34, 0x1E34], [0x1E36, 0x1E36], [0x1E38, 0x1E38], [0x1E3A, 0x1E3A], [0x1E3C, 0x1E3C], [0x1E3E, 0x1E3E], [0x1E40, 0x1E40], [0x1E42, 0x1E42], [0x1E44, 0x1E44], [0x1E46, 0x1E46], [0x1E48, 0x1E48], [0x1E4A, 0x1E4A], [0x1E4C, 0x1E4C], [0x1E4E, 0x1E4E], [0x1E50, 0x1E50], [0x1E52, 0x1E52], [0x1E54, 0x1E54], [0x1E56, 0x1E56], [0x1E58, 0x1E58], [0x1E5A, 0x1E5A], [0x1E5C, 0x1E5C], [0x1E5E, 0x1E5E], [0x1E60, 0x1E60], [0x1E62, 0x1E62], [0x1E64, 0x1E64], [0x1E66, 0x1E66], [0x1E68, 0x1E68], [0x1E6A, 0x1E6A], [0x1E6C, 0x1E6C], [0x1E6E, 0x1E6E], [0x1E70, 0x1E70], [0x1E72, 0x1E72], [0x1E74, 0x1E74], [0x1E76, 0x1E76], [0x1E78, 0x1E78], [0x1E7A, 0x1E7A], [0x1E7C, 0x1E7C], [0x1E7E, 0x1E7E], [0x1E80, 0x1E80], [0x1E82, 0x1E82], [0x1E84, 0x1E84], [0x1E86, 0x1E86], [0x1E88, 0x1E88], [0x1E8A, 0x1E8A], [0x1E8C, 0x1E8C], [0x1E8E, 0x1E8E], [0x1E90, 0x1E90], [0x1E92, 0x1E92], [0x1E94, 0x1E94], [0x1EA0, 0x1EA0], [0x1EA2, 0x1EA2], [0x1EA4, 0x1EA4], [0x1EA6, 0x1EA6], [0x1EA8, 0x1EA8], [0x1EAA, 0x1EAA], [0x1EAC, 0x1EAC], [0x1EAE, 0x1EAE], [0x1EB0, 0x1EB0], [0x1EB2, 0x1EB2], [0x1EB4, 0x1EB4], [0x1EB6, 0x1EB6], [0x1EB8, 0x1EB8], [0x1EBA, 0x1EBA], [0x1EBC, 0x1EBC], [0x1EBE, 0x1EBE], [0x1EC0, 0x1EC0], [0x1EC2, 0x1EC2], [0x1EC4, 0x1EC4], [0x1EC6, 0x1EC6], [0x1EC8, 0x1EC8], [0x1ECA, 0x1ECA], [0x1ECC, 0x1ECC], [0x1ECE, 0x1ECE], [0x1ED0, 0x1ED0], [0x1ED2, 0x1ED2], [0x1ED4, 0x1ED4], [0x1ED6, 0x1ED6], [0x1ED8, 0x1ED8], [0x1EDA, 0x1EDA], [0x1EDC, 0x1EDC], [0x1EDE, 0x1EDE], [0x1EE0, 0x1EE0], [0x1EE2, 0x1EE2], [0x1EE4, 0x1EE4], [0x1EE6, 0x1EE6], [0x1EE8, 0x1EE8], [0x1EEA, 0x1EEA], [0x1EEC, 0x1EEC], [0x1EEE, 0x1EEE], [0x1EF0, 0x1EF0], [0x1EF2, 0x1EF2], [0x1EF4, 0x1EF4], [0x1EF6, 0x1EF6], [0x1EF8, 0x1EF8], [0x1F08, 0x1F0F], [0x1F18, 0x1F1D], [0x1F28, 0x1F2F], [0x1F38, 0x1F3F], [0x1F48, 0x1F4D], [0x1F59, 0x1F59], [0x1F5B, 0x1F5B], [0x1F5D, 0x1F5D], [0x1F5F, 0x1F5F], [0x1F68, 0x1F6F], [0x1F88, 0x1F8F], [0x1F98, 0x1F9F], [0x1FA8, 0x1FAF], [0x1FB8, 0x1FBC], [0x1FC8, 0x1FCC], [0x1FD8, 0x1FDB], [0x1FE8, 0x1FEC], [0x1FF8, 0x1FFC], [0x2102, 0x2102], [0x2107, 0x2107], [0x210B, 0x210D], [0x2110, 0x2112], [0x2115, 0x2115], [0x2119, 0x211D], [0x2124, 0x2124], [0x2126, 0x2126], [0x2128, 0x2128], [0x212A, 0x212D], [0x2130, 0x2131], [0x2133, 0x2133], [0xFF21, 0xFF3A]]; -Ll = [[0x0061, 0x007A], [0x00AA, 0x00AA], [0x00B5, 0x00B5], [0x00BA, 0x00BA], [0x00DF, 0x00F6], [0x00F8, 0x00FF], [0x0101, 0x0101], [0x0103, 0x0103], [0x0105, 0x0105], [0x0107, 0x0107], [0x0109, 0x0109], [0x010B, 0x010B], [0x010D, 0x010D], [0x010F, 0x010F], [0x0111, 0x0111], [0x0113, 0x0113], [0x0115, 0x0115], [0x0117, 0x0117], [0x0119, 0x0119], [0x011B, 0x011B], [0x011D, 0x011D], [0x011F, 0x011F], [0x0121, 0x0121], [0x0123, 0x0123], [0x0125, 0x0125], [0x0127, 0x0127], [0x0129, 0x0129], [0x012B, 0x012B], [0x012D, 0x012D], [0x012F, 0x012F], [0x0131, 0x0131], [0x0133, 0x0133], [0x0135, 0x0135], [0x0137, 0x0138], [0x013A, 0x013A], [0x013C, 0x013C], [0x013E, 0x013E], [0x0140, 0x0140], [0x0142, 0x0142], [0x0144, 0x0144], [0x0146, 0x0146], [0x0148, 0x0149], [0x014B, 0x014B], [0x014D, 0x014D], [0x014F, 0x014F], [0x0151, 0x0151], [0x0153, 0x0153], [0x0155, 0x0155], [0x0157, 0x0157], [0x0159, 0x0159], [0x015B, 0x015B], [0x015D, 0x015D], [0x015F, 0x015F], [0x0161, 0x0161], [0x0163, 0x0163], [0x0165, 0x0165], [0x0167, 0x0167], [0x0169, 0x0169], [0x016B, 0x016B], [0x016D, 0x016D], [0x016F, 0x016F], [0x0171, 0x0171], [0x0173, 0x0173], [0x0175, 0x0175], [0x0177, 0x0177], [0x017A, 0x017A], [0x017C, 0x017C], [0x017E, 0x0180], [0x0183, 0x0183], [0x0185, 0x0185], [0x0188, 0x0188], [0x018C, 0x018D], [0x0192, 0x0192], [0x0195, 0x0195], [0x0199, 0x019B], [0x019E, 0x019E], [0x01A1, 0x01A1], [0x01A3, 0x01A3], [0x01A5, 0x01A5], [0x01A8, 0x01A8], [0x01AB, 0x01AB], [0x01AD, 0x01AD], [0x01B0, 0x01B0], [0x01B4, 0x01B4], [0x01B6, 0x01B6], [0x01B9, 0x01BA], [0x01BD, 0x01BD], [0x01C6, 0x01C6], [0x01C9, 0x01C9], [0x01CC, 0x01CC], [0x01CE, 0x01CE], [0x01D0, 0x01D0], [0x01D2, 0x01D2], [0x01D4, 0x01D4], [0x01D6, 0x01D6], [0x01D8, 0x01D8], [0x01DA, 0x01DA], [0x01DC, 0x01DD], [0x01DF, 0x01DF], [0x01E1, 0x01E1], [0x01E3, 0x01E3], [0x01E5, 0x01E5], [0x01E7, 0x01E7], [0x01E9, 0x01E9], [0x01EB, 0x01EB], [0x01ED, 0x01ED], [0x01EF, 0x01F0], [0x01F3, 0x01F3], [0x01F5, 0x01F5], [0x01FB, 0x01FB], [0x01FD, 0x01FD], [0x01FF, 0x01FF], [0x0201, 0x0201], [0x0203, 0x0203], [0x0205, 0x0205], [0x0207, 0x0207], [0x0209, 0x0209], [0x020B, 0x020B], [0x020D, 0x020D], [0x020F, 0x020F], [0x0211, 0x0211], [0x0213, 0x0213], [0x0215, 0x0215], [0x0217, 0x0217], [0x0250, 0x02A8], [0x0390, 0x0390], [0x03AC, 0x03CE], [0x03D0, 0x03D1], [0x03D5, 0x03D6], [0x03E3, 0x03E3], [0x03E5, 0x03E5], [0x03E7, 0x03E7], [0x03E9, 0x03E9], [0x03EB, 0x03EB], [0x03ED, 0x03ED], [0x03EF, 0x03F2], [0x0430, 0x044F], [0x0451, 0x045C], [0x045E, 0x045F], [0x0461, 0x0461], [0x0463, 0x0463], [0x0465, 0x0465], [0x0467, 0x0467], [0x0469, 0x0469], [0x046B, 0x046B], [0x046D, 0x046D], [0x046F, 0x046F], [0x0471, 0x0471], [0x0473, 0x0473], [0x0475, 0x0475], [0x0477, 0x0477], [0x0479, 0x0479], [0x047B, 0x047B], [0x047D, 0x047D], [0x047F, 0x047F], [0x0481, 0x0481], [0x0491, 0x0491], [0x0493, 0x0493], [0x0495, 0x0495], [0x0497, 0x0497], [0x0499, 0x0499], [0x049B, 0x049B], [0x049D, 0x049D], [0x049F, 0x049F], [0x04A1, 0x04A1], [0x04A3, 0x04A3], [0x04A5, 0x04A5], [0x04A7, 0x04A7], [0x04A9, 0x04A9], [0x04AB, 0x04AB], [0x04AD, 0x04AD], [0x04AF, 0x04AF], [0x04B1, 0x04B1], [0x04B3, 0x04B3], [0x04B5, 0x04B5], [0x04B7, 0x04B7], [0x04B9, 0x04B9], [0x04BB, 0x04BB], [0x04BD, 0x04BD], [0x04BF, 0x04BF], [0x04C2, 0x04C2], [0x04C4, 0x04C4], [0x04C8, 0x04C8], [0x04CC, 0x04CC], [0x04D1, 0x04D1], [0x04D3, 0x04D3], [0x04D5, 0x04D5], [0x04D7, 0x04D7], [0x04D9, 0x04D9], [0x04DB, 0x04DB], [0x04DD, 0x04DD], [0x04DF, 0x04DF], [0x04E1, 0x04E1], [0x04E3, 0x04E3], [0x04E5, 0x04E5], [0x04E7, 0x04E7], [0x04E9, 0x04E9], [0x04EB, 0x04EB], [0x04EF, 0x04EF], [0x04F1, 0x04F1], [0x04F3, 0x04F3], [0x04F5, 0x04F5], [0x04F9, 0x04F9], [0x0561, 0x0587], [0x10D0, 0x10F6], [0x1E01, 0x1E01], [0x1E03, 0x1E03], [0x1E05, 0x1E05], [0x1E07, 0x1E07], [0x1E09, 0x1E09], [0x1E0B, 0x1E0B], [0x1E0D, 0x1E0D], [0x1E0F, 0x1E0F], [0x1E11, 0x1E11], [0x1E13, 0x1E13], [0x1E15, 0x1E15], [0x1E17, 0x1E17], [0x1E19, 0x1E19], [0x1E1B, 0x1E1B], [0x1E1D, 0x1E1D], [0x1E1F, 0x1E1F], [0x1E21, 0x1E21], [0x1E23, 0x1E23], [0x1E25, 0x1E25], [0x1E27, 0x1E27], [0x1E29, 0x1E29], [0x1E2B, 0x1E2B], [0x1E2D, 0x1E2D], [0x1E2F, 0x1E2F], [0x1E31, 0x1E31], [0x1E33, 0x1E33], [0x1E35, 0x1E35], [0x1E37, 0x1E37], [0x1E39, 0x1E39], [0x1E3B, 0x1E3B], [0x1E3D, 0x1E3D], [0x1E3F, 0x1E3F], [0x1E41, 0x1E41], [0x1E43, 0x1E43], [0x1E45, 0x1E45], [0x1E47, 0x1E47], [0x1E49, 0x1E49], [0x1E4B, 0x1E4B], [0x1E4D, 0x1E4D], [0x1E4F, 0x1E4F], [0x1E51, 0x1E51], [0x1E53, 0x1E53], [0x1E55, 0x1E55], [0x1E57, 0x1E57], [0x1E59, 0x1E59], [0x1E5B, 0x1E5B], [0x1E5D, 0x1E5D], [0x1E5F, 0x1E5F], [0x1E61, 0x1E61], [0x1E63, 0x1E63], [0x1E65, 0x1E65], [0x1E67, 0x1E67], [0x1E69, 0x1E69], [0x1E6B, 0x1E6B], [0x1E6D, 0x1E6D], [0x1E6F, 0x1E6F], [0x1E71, 0x1E71], [0x1E73, 0x1E73], [0x1E75, 0x1E75], [0x1E77, 0x1E77], [0x1E79, 0x1E79], [0x1E7B, 0x1E7B], [0x1E7D, 0x1E7D], [0x1E7F, 0x1E7F], [0x1E81, 0x1E81], [0x1E83, 0x1E83], [0x1E85, 0x1E85], [0x1E87, 0x1E87], [0x1E89, 0x1E89], [0x1E8B, 0x1E8B], [0x1E8D, 0x1E8D], [0x1E8F, 0x1E8F], [0x1E91, 0x1E91], [0x1E93, 0x1E93], [0x1E95, 0x1E9B], [0x1EA1, 0x1EA1], [0x1EA3, 0x1EA3], [0x1EA5, 0x1EA5], [0x1EA7, 0x1EA7], [0x1EA9, 0x1EA9], [0x1EAB, 0x1EAB], [0x1EAD, 0x1EAD], [0x1EAF, 0x1EAF], [0x1EB1, 0x1EB1], [0x1EB3, 0x1EB3], [0x1EB5, 0x1EB5], [0x1EB7, 0x1EB7], [0x1EB9, 0x1EB9], [0x1EBB, 0x1EBB], [0x1EBD, 0x1EBD], [0x1EBF, 0x1EBF], [0x1EC1, 0x1EC1], [0x1EC3, 0x1EC3], [0x1EC5, 0x1EC5], [0x1EC7, 0x1EC7], [0x1EC9, 0x1EC9], [0x1ECB, 0x1ECB], [0x1ECD, 0x1ECD], [0x1ECF, 0x1ECF], [0x1ED1, 0x1ED1], [0x1ED3, 0x1ED3], [0x1ED5, 0x1ED5], [0x1ED7, 0x1ED7], [0x1ED9, 0x1ED9], [0x1EDB, 0x1EDB], [0x1EDD, 0x1EDD], [0x1EDF, 0x1EDF], [0x1EE1, 0x1EE1], [0x1EE3, 0x1EE3], [0x1EE5, 0x1EE5], [0x1EE7, 0x1EE7], [0x1EE9, 0x1EE9], [0x1EEB, 0x1EEB], [0x1EED, 0x1EED], [0x1EEF, 0x1EEF], [0x1EF1, 0x1EF1], [0x1EF3, 0x1EF3], [0x1EF5, 0x1EF5], [0x1EF7, 0x1EF7], [0x1EF9, 0x1EF9], [0x1F00, 0x1F07], [0x1F10, 0x1F15], [0x1F20, 0x1F27], [0x1F30, 0x1F37], [0x1F40, 0x1F45], [0x1F50, 0x1F57], [0x1F60, 0x1F67], [0x1F70, 0x1F7D], [0x1F80, 0x1F87], [0x1F90, 0x1F97], [0x1FA0, 0x1FA7], [0x1FB0, 0x1FB4], [0x1FB6, 0x1FB7], [0x1FBE, 0x1FBE], [0x1FC2, 0x1FC4], [0x1FC6, 0x1FC7], [0x1FD0, 0x1FD3], [0x1FD6, 0x1FD7], [0x1FE0, 0x1FE7], [0x1FF2, 0x1FF4], [0x1FF6, 0x1FF7], [0x207F, 0x207F], [0x210A, 0x210A], [0x210E, 0x210F], [0x2113, 0x2113], [0x2118, 0x2118], [0x212E, 0x212F], [0x2134, 0x2134], [0xFB00, 0xFB06], [0xFB13, 0xFB17], [0xFF41, 0xFF5A]]; -Lt = [[0x01C5, 0x01C5], [0x01C8, 0x01C8], [0x01CB, 0x01CB], [0x01F2, 0x01F2]]; -Lm = [[0x02B0, 0x02B8], [0x02BB, 0x02C1], [0x02D0, 0x02D1], [0x02E0, 0x02E4], [0x037A, 0x037A], [0x0559, 0x0559], [0x0640, 0x0640], [0x06E5, 0x06E6], [0x0E46, 0x0E46], [0x0EC6, 0x0EC6], [0x3005, 0x3005], [0x3031, 0x3035], [0x309D, 0x309E], [0x30FC, 0x30FE], [0xFF70, 0xFF70], [0xFF9E, 0xFF9F]]; -Lo = [[0x01AA, 0x01AA], [0x01BB, 0x01BB], [0x01BE, 0x01C3], [0x03F3, 0x03F3], [0x04C0, 0x04C0], [0x05D0, 0x05EA], [0x05F0, 0x05F2], [0x0621, 0x063A], [0x0641, 0x064A], [0x0671, 0x06B7], [0x06BA, 0x06BE], [0x06C0, 0x06CE], [0x06D0, 0x06D3], [0x06D5, 0x06D5], [0x0905, 0x0939], [0x093D, 0x093D], [0x0950, 0x0950], [0x0958, 0x0961], [0x0985, 0x098C], [0x098F, 0x0990], [0x0993, 0x09A8], [0x09AA, 0x09B0], [0x09B2, 0x09B2], [0x09B6, 0x09B9], [0x09DC, 0x09DD], [0x09DF, 0x09E1], [0x09F0, 0x09F1], [0x0A05, 0x0A0A], [0x0A0F, 0x0A10], [0x0A13, 0x0A28], [0x0A2A, 0x0A30], [0x0A32, 0x0A33], [0x0A35, 0x0A36], [0x0A38, 0x0A39], [0x0A59, 0x0A5C], [0x0A5E, 0x0A5E], [0x0A72, 0x0A74], [0x0A85, 0x0A8B], [0x0A8D, 0x0A8D], [0x0A8F, 0x0A91], [0x0A93, 0x0AA8], [0x0AAA, 0x0AB0], [0x0AB2, 0x0AB3], [0x0AB5, 0x0AB9], [0x0ABD, 0x0ABD], [0x0AD0, 0x0AD0], [0x0AE0, 0x0AE0], [0x0B05, 0x0B0C], [0x0B0F, 0x0B10], [0x0B13, 0x0B28], [0x0B2A, 0x0B30], [0x0B32, 0x0B33], [0x0B36, 0x0B39], [0x0B3D, 0x0B3D], [0x0B5C, 0x0B5D], [0x0B5F, 0x0B61], [0x0B85, 0x0B8A], [0x0B8E, 0x0B90], [0x0B92, 0x0B95], [0x0B99, 0x0B9A], [0x0B9C, 0x0B9C], [0x0B9E, 0x0B9F], [0x0BA3, 0x0BA4], [0x0BA8, 0x0BAA], [0x0BAE, 0x0BB5], [0x0BB7, 0x0BB9], [0x0C05, 0x0C0C], [0x0C0E, 0x0C10], [0x0C12, 0x0C28], [0x0C2A, 0x0C33], [0x0C35, 0x0C39], [0x0C60, 0x0C61], [0x0C85, 0x0C8C], [0x0C8E, 0x0C90], [0x0C92, 0x0CA8], [0x0CAA, 0x0CB3], [0x0CB5, 0x0CB9], [0x0CDE, 0x0CDE], [0x0CE0, 0x0CE1], [0x0D05, 0x0D0C], [0x0D0E, 0x0D10], [0x0D12, 0x0D28], [0x0D2A, 0x0D39], [0x0D60, 0x0D61], [0x0E01, 0x0E30], [0x0E32, 0x0E33], [0x0E40, 0x0E45], [0x0E81, 0x0E82], [0x0E84, 0x0E84], [0x0E87, 0x0E88], [0x0E8A, 0x0E8A], [0x0E8D, 0x0E8D], [0x0E94, 0x0E97], [0x0E99, 0x0E9F], [0x0EA1, 0x0EA3], [0x0EA5, 0x0EA5], [0x0EA7, 0x0EA7], [0x0EAA, 0x0EAB], [0x0EAD, 0x0EB0], [0x0EB2, 0x0EB3], [0x0EBD, 0x0EBD], [0x0EC0, 0x0EC4], [0x0EDC, 0x0EDD], [0x0F00, 0x0F00], [0x0F40, 0x0F47], [0x0F49, 0x0F69], [0x0F88, 0x0F8B], [0x1100, 0x1159], [0x115F, 0x11A2], [0x11A8, 0x11F9], [0x2135, 0x2138], [0x3006, 0x3006], [0x3041, 0x3094], [0x30A1, 0x30FA], [0x3105, 0x312C], [0x3131, 0x318E], [0x4E00, 0x9FA5], [0xAC00, 0xD7A3], [0xF900, 0xFA2D], [0xFB1F, 0xFB28], [0xFB2A, 0xFB36], [0xFB38, 0xFB3C], [0xFB3E, 0xFB3E], [0xFB40, 0xFB41], [0xFB43, 0xFB44], [0xFB46, 0xFBB1], [0xFBD3, 0xFD3D], [0xFD50, 0xFD8F], [0xFD92, 0xFDC7], [0xFDF0, 0xFDFB], [0xFE70, 0xFE72], [0xFE74, 0xFE74], [0xFE76, 0xFEFC], [0xFF66, 0xFF6F], [0xFF71, 0xFF9D], [0xFFA0, 0xFFBE], [0xFFC2, 0xFFC7], [0xFFCA, 0xFFCF], [0xFFD2, 0xFFD7], [0xFFDA, 0xFFDC]]; -Nl = [[0x2160, 0x2182], [0x3007, 0x3007], [0x3021, 0x3029]]; - -UnicodeLetterLu = []; -UnicodeLetterLl = []; -UnicodeLetterLt = []; -UnicodeLetterLm = []; -UnicodeLetterLo = []; -UnicodeLetterNl = []; - -for (indexI = 0; indexI < Lu.length; indexI++) { - for (indexJ = Lu[indexI][0]; indexJ <= Lu[indexI][1]; indexJ++) { - UnicodeLetterLu[indexJ] = true; - } -} -for (indexI = 0; indexI < Ll.length; indexI++) { - for (indexJ = Ll[indexI][0]; indexJ <= Ll[indexI][1]; indexJ++) { - UnicodeLetterLl[indexJ] = true; - } -} -for (indexI = 0; indexI < Lt.length; indexI++) { - for (indexJ = Lt[indexI][0]; indexJ <= Lt[indexI][1]; indexJ++) { - UnicodeLetterLt[indexJ] = true; - } -} -for (indexI = 0; indexI < Lm.length; indexI++) { - for (indexJ = Lm[indexI][0]; indexJ <= Lm[indexI][1]; indexJ++) { - UnicodeLetterLm[indexJ] = true; - } -} -for (indexI = 0; indexI < Lo.length; indexI++) { - for (indexJ = Lo[indexI][0]; indexJ <= Lo[indexI][1]; indexJ++) { - UnicodeLetterLo[indexJ] = true; - } -} -for (indexI = 0; indexI < Nl.length; indexI++) { - for (indexJ = Nl[indexI][0]; indexJ <= Nl[indexI][1]; indexJ++) { - UnicodeLetterNl[indexJ] = true; - } -} - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; -for (index = 0; index <= 65535; index++) { - if ((UnicodeLetterLu[index] === undefined) && (UnicodeLetterLl[index] === undefined) && (UnicodeLetterLt[index] === undefined) && (UnicodeLetterLm[index] === undefined) && (UnicodeLetterLo[index] === undefined) && (UnicodeLetterNl[index] === undefined) && (index !== 0x0024) && (index !== 0x005F)) { - try { - var identifier = String.fromCharCode(index); - eval("var " + identifier + "=1"); - if (errorCount === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; - } catch (e) { - } - count++; - } -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_218/S7.6_A5.2_T1.js b/tests/ES3/Unicode/Unicode_218/S7.6_A5.2_T1.js deleted file mode 100644 index d4b7b5815..000000000 --- a/tests/ES3/Unicode/Unicode_218/S7.6_A5.2_T1.js +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A5.2_T1; - * @section: 7.6, 6; - * @assertion: If a \UnicodeEscapeSequence sequence were replaced by its UnicodeEscapeSequence's CV, the result must still be a valid Identifier that has the exact same sequence of characters as the original Identifier; - * @description: The CV of UnicodeEscapeSequence is Lu. - * Complex test with eval; -*/ - -//CHECK -Lu = [[0x0041, 0x005A], [0x00C0, 0x00D6], [0x00D8, 0x00DE], [0x0100, 0x0100], [0x0102, 0x0102], [0x0104, 0x0104], [0x0106, 0x0106], [0x0108, 0x0108], [0x010A, 0x010A], [0x010C, 0x010C], [0x010E, 0x010E], [0x0110, 0x0110], [0x0112, 0x0112], [0x0114, 0x0114], [0x0116, 0x0116], [0x0118, 0x0118], [0x011A, 0x011A], [0x011C, 0x011C], [0x011E, 0x011E], [0x0120, 0x0120], [0x0122, 0x0122], [0x0124, 0x0124], [0x0126, 0x0126], [0x0128, 0x0128], [0x012A, 0x012A], [0x012C, 0x012C], [0x012E, 0x012E], [0x0130, 0x0130], [0x0132, 0x0132], [0x0134, 0x0134], [0x0136, 0x0136], [0x0139, 0x0139], [0x013B, 0x013B], [0x013D, 0x013D], [0x013F, 0x013F], [0x0141, 0x0141], [0x0143, 0x0143], [0x0145, 0x0145], [0x0147, 0x0147], [0x014A, 0x014A], [0x014C, 0x014C], [0x014E, 0x014E], [0x0150, 0x0150], [0x0152, 0x0152], [0x0154, 0x0154], [0x0156, 0x0156], [0x0158, 0x0158], [0x015A, 0x015A], [0x015C, 0x015C], [0x015E, 0x015E], [0x0160, 0x0160], [0x0162, 0x0162], [0x0164, 0x0164], [0x0166, 0x0166], [0x0168, 0x0168], [0x016A, 0x016A], [0x016C, 0x016C], [0x016E, 0x016E], [0x0170, 0x0170], [0x0172, 0x0172], [0x0174, 0x0174], [0x0176, 0x0176], [0x0178, 0x0179], [0x017B, 0x017B], [0x017D, 0x017D], [0x0181, 0x0182], [0x0184, 0x0184], [0x0186, 0x0187], [0x0189, 0x018B], [0x018E, 0x0191], [0x0193, 0x0194], [0x0196, 0x0198], [0x019C, 0x019D], [0x019F, 0x01A0], [0x01A2, 0x01A2], [0x01A4, 0x01A4], [0x01A6, 0x01A7], [0x01A9, 0x01A9], [0x01AC, 0x01AC], [0x01AE, 0x01AF], [0x01B1, 0x01B3], [0x01B5, 0x01B5], [0x01B7, 0x01B8], [0x01BC, 0x01BC], [0x01C4, 0x01C4], [0x01C7, 0x01C7], [0x01CA, 0x01CA], [0x01CD, 0x01CD], [0x01CF, 0x01CF], [0x01D1, 0x01D1], [0x01D3, 0x01D3], [0x01D5, 0x01D5], [0x01D7, 0x01D7], [0x01D9, 0x01D9], [0x01DB, 0x01DB], [0x01DE, 0x01DE], [0x01E0, 0x01E0], [0x01E2, 0x01E2], [0x01E4, 0x01E4], [0x01E6, 0x01E6], [0x01E8, 0x01E8], [0x01EA, 0x01EA], [0x01EC, 0x01EC], [0x01EE, 0x01EE], [0x01F1, 0x01F1], [0x01F4, 0x01F4], [0x01FA, 0x01FA], [0x01FC, 0x01FC], [0x01FE, 0x01FE], [0x0200, 0x0200], [0x0202, 0x0202], [0x0204, 0x0204], [0x0206, 0x0206], [0x0208, 0x0208], [0x020A, 0x020A], [0x020C, 0x020C], [0x020E, 0x020E], [0x0210, 0x0210], [0x0212, 0x0212], [0x0214, 0x0214], [0x0216, 0x0216], [0x0386, 0x0386], [0x0388, 0x038A], [0x038C, 0x038C], [0x038E, 0x038F], [0x0391, 0x03A1], [0x03A3, 0x03AB], [0x03D2, 0x03D4], [0x03DA, 0x03DA], [0x03DC, 0x03DC], [0x03DE, 0x03DE], [0x03E0, 0x03E0], [0x03E2, 0x03E2], [0x03E4, 0x03E4], [0x03E6, 0x03E6], [0x03E8, 0x03E8], [0x03EA, 0x03EA], [0x03EC, 0x03EC], [0x03EE, 0x03EE], [0x0401, 0x040C], [0x040E, 0x042F], [0x0460, 0x0460], [0x0462, 0x0462], [0x0464, 0x0464], [0x0466, 0x0466], [0x0468, 0x0468], [0x046A, 0x046A], [0x046C, 0x046C], [0x046E, 0x046E], [0x0470, 0x0470], [0x0472, 0x0472], [0x0474, 0x0474], [0x0476, 0x0476], [0x0478, 0x0478], [0x047A, 0x047A], [0x047C, 0x047C], [0x047E, 0x047E], [0x0480, 0x0480], [0x0490, 0x0490], [0x0492, 0x0492], [0x0494, 0x0494], [0x0496, 0x0496], [0x0498, 0x0498], [0x049A, 0x049A], [0x049C, 0x049C], [0x049E, 0x049E], [0x04A0, 0x04A0], [0x04A2, 0x04A2], [0x04A4, 0x04A4], [0x04A6, 0x04A6], [0x04A8, 0x04A8], [0x04AA, 0x04AA], [0x04AC, 0x04AC], [0x04AE, 0x04AE], [0x04B0, 0x04B0], [0x04B2, 0x04B2], [0x04B4, 0x04B4], [0x04B6, 0x04B6], [0x04B8, 0x04B8], [0x04BA, 0x04BA], [0x04BC, 0x04BC], [0x04BE, 0x04BE], [0x04C1, 0x04C1], [0x04C3, 0x04C3], [0x04C7, 0x04C7], [0x04CB, 0x04CB], [0x04D0, 0x04D0], [0x04D2, 0x04D2], [0x04D4, 0x04D4], [0x04D6, 0x04D6], [0x04D8, 0x04D8], [0x04DA, 0x04DA], [0x04DC, 0x04DC], [0x04DE, 0x04DE], [0x04E0, 0x04E0], [0x04E2, 0x04E2], [0x04E4, 0x04E4], [0x04E6, 0x04E6], [0x04E8, 0x04E8], [0x04EA, 0x04EA], [0x04EE, 0x04EE], [0x04F0, 0x04F0], [0x04F2, 0x04F2], [0x04F4, 0x04F4], [0x04F8, 0x04F8], [0x0531, 0x0556], [0x10A0, 0x10C5], [0x1E00, 0x1E00], [0x1E02, 0x1E02], [0x1E04, 0x1E04], [0x1E06, 0x1E06], [0x1E08, 0x1E08], [0x1E0A, 0x1E0A], [0x1E0C, 0x1E0C], [0x1E0E, 0x1E0E], [0x1E10, 0x1E10], [0x1E12, 0x1E12], [0x1E14, 0x1E14], [0x1E16, 0x1E16], [0x1E18, 0x1E18], [0x1E1A, 0x1E1A], [0x1E1C, 0x1E1C], [0x1E1E, 0x1E1E], [0x1E20, 0x1E20], [0x1E22, 0x1E22], [0x1E24, 0x1E24], [0x1E26, 0x1E26], [0x1E28, 0x1E28], [0x1E2A, 0x1E2A], [0x1E2C, 0x1E2C], [0x1E2E, 0x1E2E], [0x1E30, 0x1E30], [0x1E32, 0x1E32], [0x1E34, 0x1E34], [0x1E36, 0x1E36], [0x1E38, 0x1E38], [0x1E3A, 0x1E3A], [0x1E3C, 0x1E3C], [0x1E3E, 0x1E3E], [0x1E40, 0x1E40], [0x1E42, 0x1E42], [0x1E44, 0x1E44], [0x1E46, 0x1E46], [0x1E48, 0x1E48], [0x1E4A, 0x1E4A], [0x1E4C, 0x1E4C], [0x1E4E, 0x1E4E], [0x1E50, 0x1E50], [0x1E52, 0x1E52], [0x1E54, 0x1E54], [0x1E56, 0x1E56], [0x1E58, 0x1E58], [0x1E5A, 0x1E5A], [0x1E5C, 0x1E5C], [0x1E5E, 0x1E5E], [0x1E60, 0x1E60], [0x1E62, 0x1E62], [0x1E64, 0x1E64], [0x1E66, 0x1E66], [0x1E68, 0x1E68], [0x1E6A, 0x1E6A], [0x1E6C, 0x1E6C], [0x1E6E, 0x1E6E], [0x1E70, 0x1E70], [0x1E72, 0x1E72], [0x1E74, 0x1E74], [0x1E76, 0x1E76], [0x1E78, 0x1E78], [0x1E7A, 0x1E7A], [0x1E7C, 0x1E7C], [0x1E7E, 0x1E7E], [0x1E80, 0x1E80], [0x1E82, 0x1E82], [0x1E84, 0x1E84], [0x1E86, 0x1E86], [0x1E88, 0x1E88], [0x1E8A, 0x1E8A], [0x1E8C, 0x1E8C], [0x1E8E, 0x1E8E], [0x1E90, 0x1E90], [0x1E92, 0x1E92], [0x1E94, 0x1E94], [0x1EA0, 0x1EA0], [0x1EA2, 0x1EA2], [0x1EA4, 0x1EA4], [0x1EA6, 0x1EA6], [0x1EA8, 0x1EA8], [0x1EAA, 0x1EAA], [0x1EAC, 0x1EAC], [0x1EAE, 0x1EAE], [0x1EB0, 0x1EB0], [0x1EB2, 0x1EB2], [0x1EB4, 0x1EB4], [0x1EB6, 0x1EB6], [0x1EB8, 0x1EB8], [0x1EBA, 0x1EBA], [0x1EBC, 0x1EBC], [0x1EBE, 0x1EBE], [0x1EC0, 0x1EC0], [0x1EC2, 0x1EC2], [0x1EC4, 0x1EC4], [0x1EC6, 0x1EC6], [0x1EC8, 0x1EC8], [0x1ECA, 0x1ECA], [0x1ECC, 0x1ECC], [0x1ECE, 0x1ECE], [0x1ED0, 0x1ED0], [0x1ED2, 0x1ED2], [0x1ED4, 0x1ED4], [0x1ED6, 0x1ED6], [0x1ED8, 0x1ED8], [0x1EDA, 0x1EDA], [0x1EDC, 0x1EDC], [0x1EDE, 0x1EDE], [0x1EE0, 0x1EE0], [0x1EE2, 0x1EE2], [0x1EE4, 0x1EE4], [0x1EE6, 0x1EE6], [0x1EE8, 0x1EE8], [0x1EEA, 0x1EEA], [0x1EEC, 0x1EEC], [0x1EEE, 0x1EEE], [0x1EF0, 0x1EF0], [0x1EF2, 0x1EF2], [0x1EF4, 0x1EF4], [0x1EF6, 0x1EF6], [0x1EF8, 0x1EF8], [0x1F08, 0x1F0F], [0x1F18, 0x1F1D], [0x1F28, 0x1F2F], [0x1F38, 0x1F3F], [0x1F48, 0x1F4D], [0x1F59, 0x1F59], [0x1F5B, 0x1F5B], [0x1F5D, 0x1F5D], [0x1F5F, 0x1F5F], [0x1F68, 0x1F6F], [0x1F88, 0x1F8F], [0x1F98, 0x1F9F], [0x1FA8, 0x1FAF], [0x1FB8, 0x1FBC], [0x1FC8, 0x1FCC], [0x1FD8, 0x1FDB], [0x1FE8, 0x1FEC], [0x1FF8, 0x1FFC], [0x2102, 0x2102], [0x2107, 0x2107], [0x210B, 0x210D], [0x2110, 0x2112], [0x2115, 0x2115], [0x2119, 0x211D], [0x2124, 0x2124], [0x2126, 0x2126], [0x2128, 0x2128], [0x212A, 0x212D], [0x2130, 0x2131], [0x2133, 0x2133], [0xFF21, 0xFF3A]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Lu.length; indexI++) { - for (indexJ = Lu[indexI][0]; indexJ <= Lu[indexI][1]; indexJ++) { - try { - var hex = decimalToHexString(indexJ); - var identifier1 = String.fromCharCode(indexJ); - var identifier2 = "\\u" + hex; - eval(identifier2 + " = 1"); - if (eval(identifier1 + " === " + identifier2) !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_218/S7.6_A5.2_T10.js b/tests/ES3/Unicode/Unicode_218/S7.6_A5.2_T10.js deleted file mode 100644 index 690490601..000000000 --- a/tests/ES3/Unicode/Unicode_218/S7.6_A5.2_T10.js +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A5.2_T10; - * @section: 7.6, 6; - * @assertion: If a \UnicodeEscapeSequence sequence were replaced by its UnicodeEscapeSequence's CV, the result must still be a valid Identifier that has the exact same sequence of characters as the original Identifier; - * @description: The CV of UnicodeEscapeSequence is Pc. - * Complex test with eval; -*/ - -//CHECK -Pc = [[0x005F, 0x005F], [0x203F, 0x2040], [0x30FB, 0x30FB], [0xFE33, 0xFE34], [0xFE4D, 0xFE4F], [0xFF3F, 0xFF3F], [0xFF65, 0xFF65]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Pc.length; indexI++) { - for (indexJ = Pc[indexI][0]; indexJ <= Pc[indexI][1]; indexJ++) { - try { - var hex = decimalToHexString(indexJ); - var identifier1 = "$" + String.fromCharCode(indexJ); - var identifier2 = "$\\u" + hex; - eval(identifier2 + " = 1"); - if (eval(identifier1 + " === " + identifier2) !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_218/S7.6_A5.2_T2.js b/tests/ES3/Unicode/Unicode_218/S7.6_A5.2_T2.js deleted file mode 100644 index 89d9025f4..000000000 --- a/tests/ES3/Unicode/Unicode_218/S7.6_A5.2_T2.js +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A5.2_T2; - * @section: 7.6, 6; - * @assertion: If a \UnicodeEscapeSequence sequence were replaced by its UnicodeEscapeSequence's CV, the result must still be a valid Identifier that has the exact same sequence of characters as the original Identifier; - * @description: The CV of UnicodeEscapeSequence is Ll. - * Complex test with eval; -*/ - -//CHECK -Ll = [[0x0061, 0x007A], [0x00AA, 0x00AA], [0x00B5, 0x00B5], [0x00BA, 0x00BA], [0x00DF, 0x00F6], [0x00F8, 0x00FF], [0x0101, 0x0101], [0x0103, 0x0103], [0x0105, 0x0105], [0x0107, 0x0107], [0x0109, 0x0109], [0x010B, 0x010B], [0x010D, 0x010D], [0x010F, 0x010F], [0x0111, 0x0111], [0x0113, 0x0113], [0x0115, 0x0115], [0x0117, 0x0117], [0x0119, 0x0119], [0x011B, 0x011B], [0x011D, 0x011D], [0x011F, 0x011F], [0x0121, 0x0121], [0x0123, 0x0123], [0x0125, 0x0125], [0x0127, 0x0127], [0x0129, 0x0129], [0x012B, 0x012B], [0x012D, 0x012D], [0x012F, 0x012F], [0x0131, 0x0131], [0x0133, 0x0133], [0x0135, 0x0135], [0x0137, 0x0138], [0x013A, 0x013A], [0x013C, 0x013C], [0x013E, 0x013E], [0x0140, 0x0140], [0x0142, 0x0142], [0x0144, 0x0144], [0x0146, 0x0146], [0x0148, 0x0149], [0x014B, 0x014B], [0x014D, 0x014D], [0x014F, 0x014F], [0x0151, 0x0151], [0x0153, 0x0153], [0x0155, 0x0155], [0x0157, 0x0157], [0x0159, 0x0159], [0x015B, 0x015B], [0x015D, 0x015D], [0x015F, 0x015F], [0x0161, 0x0161], [0x0163, 0x0163], [0x0165, 0x0165], [0x0167, 0x0167], [0x0169, 0x0169], [0x016B, 0x016B], [0x016D, 0x016D], [0x016F, 0x016F], [0x0171, 0x0171], [0x0173, 0x0173], [0x0175, 0x0175], [0x0177, 0x0177], [0x017A, 0x017A], [0x017C, 0x017C], [0x017E, 0x0180], [0x0183, 0x0183], [0x0185, 0x0185], [0x0188, 0x0188], [0x018C, 0x018D], [0x0192, 0x0192], [0x0195, 0x0195], [0x0199, 0x019B], [0x019E, 0x019E], [0x01A1, 0x01A1], [0x01A3, 0x01A3], [0x01A5, 0x01A5], [0x01A8, 0x01A8], [0x01AB, 0x01AB], [0x01AD, 0x01AD], [0x01B0, 0x01B0], [0x01B4, 0x01B4], [0x01B6, 0x01B6], [0x01B9, 0x01BA], [0x01BD, 0x01BD], [0x01C6, 0x01C6], [0x01C9, 0x01C9], [0x01CC, 0x01CC], [0x01CE, 0x01CE], [0x01D0, 0x01D0], [0x01D2, 0x01D2], [0x01D4, 0x01D4], [0x01D6, 0x01D6], [0x01D8, 0x01D8], [0x01DA, 0x01DA], [0x01DC, 0x01DD], [0x01DF, 0x01DF], [0x01E1, 0x01E1], [0x01E3, 0x01E3], [0x01E5, 0x01E5], [0x01E7, 0x01E7], [0x01E9, 0x01E9], [0x01EB, 0x01EB], [0x01ED, 0x01ED], [0x01EF, 0x01F0], [0x01F3, 0x01F3], [0x01F5, 0x01F5], [0x01FB, 0x01FB], [0x01FD, 0x01FD], [0x01FF, 0x01FF], [0x0201, 0x0201], [0x0203, 0x0203], [0x0205, 0x0205], [0x0207, 0x0207], [0x0209, 0x0209], [0x020B, 0x020B], [0x020D, 0x020D], [0x020F, 0x020F], [0x0211, 0x0211], [0x0213, 0x0213], [0x0215, 0x0215], [0x0217, 0x0217], [0x0250, 0x02A8], [0x0390, 0x0390], [0x03AC, 0x03CE], [0x03D0, 0x03D1], [0x03D5, 0x03D6], [0x03E3, 0x03E3], [0x03E5, 0x03E5], [0x03E7, 0x03E7], [0x03E9, 0x03E9], [0x03EB, 0x03EB], [0x03ED, 0x03ED], [0x03EF, 0x03F2], [0x0430, 0x044F], [0x0451, 0x045C], [0x045E, 0x045F], [0x0461, 0x0461], [0x0463, 0x0463], [0x0465, 0x0465], [0x0467, 0x0467], [0x0469, 0x0469], [0x046B, 0x046B], [0x046D, 0x046D], [0x046F, 0x046F], [0x0471, 0x0471], [0x0473, 0x0473], [0x0475, 0x0475], [0x0477, 0x0477], [0x0479, 0x0479], [0x047B, 0x047B], [0x047D, 0x047D], [0x047F, 0x047F], [0x0481, 0x0481], [0x0491, 0x0491], [0x0493, 0x0493], [0x0495, 0x0495], [0x0497, 0x0497], [0x0499, 0x0499], [0x049B, 0x049B], [0x049D, 0x049D], [0x049F, 0x049F], [0x04A1, 0x04A1], [0x04A3, 0x04A3], [0x04A5, 0x04A5], [0x04A7, 0x04A7], [0x04A9, 0x04A9], [0x04AB, 0x04AB], [0x04AD, 0x04AD], [0x04AF, 0x04AF], [0x04B1, 0x04B1], [0x04B3, 0x04B3], [0x04B5, 0x04B5], [0x04B7, 0x04B7], [0x04B9, 0x04B9], [0x04BB, 0x04BB], [0x04BD, 0x04BD], [0x04BF, 0x04BF], [0x04C2, 0x04C2], [0x04C4, 0x04C4], [0x04C8, 0x04C8], [0x04CC, 0x04CC], [0x04D1, 0x04D1], [0x04D3, 0x04D3], [0x04D5, 0x04D5], [0x04D7, 0x04D7], [0x04D9, 0x04D9], [0x04DB, 0x04DB], [0x04DD, 0x04DD], [0x04DF, 0x04DF], [0x04E1, 0x04E1], [0x04E3, 0x04E3], [0x04E5, 0x04E5], [0x04E7, 0x04E7], [0x04E9, 0x04E9], [0x04EB, 0x04EB], [0x04EF, 0x04EF], [0x04F1, 0x04F1], [0x04F3, 0x04F3], [0x04F5, 0x04F5], [0x04F9, 0x04F9], [0x0561, 0x0587], [0x10D0, 0x10F6], [0x1E01, 0x1E01], [0x1E03, 0x1E03], [0x1E05, 0x1E05], [0x1E07, 0x1E07], [0x1E09, 0x1E09], [0x1E0B, 0x1E0B], [0x1E0D, 0x1E0D], [0x1E0F, 0x1E0F], [0x1E11, 0x1E11], [0x1E13, 0x1E13], [0x1E15, 0x1E15], [0x1E17, 0x1E17], [0x1E19, 0x1E19], [0x1E1B, 0x1E1B], [0x1E1D, 0x1E1D], [0x1E1F, 0x1E1F], [0x1E21, 0x1E21], [0x1E23, 0x1E23], [0x1E25, 0x1E25], [0x1E27, 0x1E27], [0x1E29, 0x1E29], [0x1E2B, 0x1E2B], [0x1E2D, 0x1E2D], [0x1E2F, 0x1E2F], [0x1E31, 0x1E31], [0x1E33, 0x1E33], [0x1E35, 0x1E35], [0x1E37, 0x1E37], [0x1E39, 0x1E39], [0x1E3B, 0x1E3B], [0x1E3D, 0x1E3D], [0x1E3F, 0x1E3F], [0x1E41, 0x1E41], [0x1E43, 0x1E43], [0x1E45, 0x1E45], [0x1E47, 0x1E47], [0x1E49, 0x1E49], [0x1E4B, 0x1E4B], [0x1E4D, 0x1E4D], [0x1E4F, 0x1E4F], [0x1E51, 0x1E51], [0x1E53, 0x1E53], [0x1E55, 0x1E55], [0x1E57, 0x1E57], [0x1E59, 0x1E59], [0x1E5B, 0x1E5B], [0x1E5D, 0x1E5D], [0x1E5F, 0x1E5F], [0x1E61, 0x1E61], [0x1E63, 0x1E63], [0x1E65, 0x1E65], [0x1E67, 0x1E67], [0x1E69, 0x1E69], [0x1E6B, 0x1E6B], [0x1E6D, 0x1E6D], [0x1E6F, 0x1E6F], [0x1E71, 0x1E71], [0x1E73, 0x1E73], [0x1E75, 0x1E75], [0x1E77, 0x1E77], [0x1E79, 0x1E79], [0x1E7B, 0x1E7B], [0x1E7D, 0x1E7D], [0x1E7F, 0x1E7F], [0x1E81, 0x1E81], [0x1E83, 0x1E83], [0x1E85, 0x1E85], [0x1E87, 0x1E87], [0x1E89, 0x1E89], [0x1E8B, 0x1E8B], [0x1E8D, 0x1E8D], [0x1E8F, 0x1E8F], [0x1E91, 0x1E91], [0x1E93, 0x1E93], [0x1E95, 0x1E9B], [0x1EA1, 0x1EA1], [0x1EA3, 0x1EA3], [0x1EA5, 0x1EA5], [0x1EA7, 0x1EA7], [0x1EA9, 0x1EA9], [0x1EAB, 0x1EAB], [0x1EAD, 0x1EAD], [0x1EAF, 0x1EAF], [0x1EB1, 0x1EB1], [0x1EB3, 0x1EB3], [0x1EB5, 0x1EB5], [0x1EB7, 0x1EB7], [0x1EB9, 0x1EB9], [0x1EBB, 0x1EBB], [0x1EBD, 0x1EBD], [0x1EBF, 0x1EBF], [0x1EC1, 0x1EC1], [0x1EC3, 0x1EC3], [0x1EC5, 0x1EC5], [0x1EC7, 0x1EC7], [0x1EC9, 0x1EC9], [0x1ECB, 0x1ECB], [0x1ECD, 0x1ECD], [0x1ECF, 0x1ECF], [0x1ED1, 0x1ED1], [0x1ED3, 0x1ED3], [0x1ED5, 0x1ED5], [0x1ED7, 0x1ED7], [0x1ED9, 0x1ED9], [0x1EDB, 0x1EDB], [0x1EDD, 0x1EDD], [0x1EDF, 0x1EDF], [0x1EE1, 0x1EE1], [0x1EE3, 0x1EE3], [0x1EE5, 0x1EE5], [0x1EE7, 0x1EE7], [0x1EE9, 0x1EE9], [0x1EEB, 0x1EEB], [0x1EED, 0x1EED], [0x1EEF, 0x1EEF], [0x1EF1, 0x1EF1], [0x1EF3, 0x1EF3], [0x1EF5, 0x1EF5], [0x1EF7, 0x1EF7], [0x1EF9, 0x1EF9], [0x1F00, 0x1F07], [0x1F10, 0x1F15], [0x1F20, 0x1F27], [0x1F30, 0x1F37], [0x1F40, 0x1F45], [0x1F50, 0x1F57], [0x1F60, 0x1F67], [0x1F70, 0x1F7D], [0x1F80, 0x1F87], [0x1F90, 0x1F97], [0x1FA0, 0x1FA7], [0x1FB0, 0x1FB4], [0x1FB6, 0x1FB7], [0x1FBE, 0x1FBE], [0x1FC2, 0x1FC4], [0x1FC6, 0x1FC7], [0x1FD0, 0x1FD3], [0x1FD6, 0x1FD7], [0x1FE0, 0x1FE7], [0x1FF2, 0x1FF4], [0x1FF6, 0x1FF7], [0x207F, 0x207F], [0x210A, 0x210A], [0x210E, 0x210F], [0x2113, 0x2113], [0x2118, 0x2118], [0x212E, 0x212F], [0x2134, 0x2134], [0xFB00, 0xFB06], [0xFB13, 0xFB17], [0xFF41, 0xFF5A]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Ll.length; indexI++) { - for (indexJ = Ll[indexI][0]; indexJ <= Ll[indexI][1]; indexJ++) { - try { - var hex = decimalToHexString(indexJ); - var identifier1 = String.fromCharCode(indexJ); - var identifier2 = "\\u" + hex; - eval(identifier2 + " = 1"); - if (eval(identifier1 + " === " + identifier2) !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_218/S7.6_A5.2_T3.js b/tests/ES3/Unicode/Unicode_218/S7.6_A5.2_T3.js deleted file mode 100644 index 94251bdae..000000000 --- a/tests/ES3/Unicode/Unicode_218/S7.6_A5.2_T3.js +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A5.2_T3; - * @section: 7.6, 6; - * @assertion: If a \UnicodeEscapeSequence sequence were replaced by its UnicodeEscapeSequence's CV, the result must still be a valid Identifier that has the exact same sequence of characters as the original Identifier; - * @description: The CV of UnicodeEscapeSequence is Lt. - * Complex test with eval; -*/ - -//CHECK -Lt = [[0x01C5, 0x01C5], [0x01C8, 0x01C8], [0x01CB, 0x01CB], [0x01F2, 0x01F2]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Lt.length; indexI++) { - for (indexJ = Lt[indexI][0]; indexJ <= Lt[indexI][1]; indexJ++) { - try { - var hex = decimalToHexString(indexJ); - var identifier1 = String.fromCharCode(indexJ); - var identifier2 = "\\u" + hex; - eval(identifier2 + " = 1"); - if (eval(identifier1 + " === " + identifier2) !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_218/S7.6_A5.2_T4.js b/tests/ES3/Unicode/Unicode_218/S7.6_A5.2_T4.js deleted file mode 100644 index e9f7d1f1d..000000000 --- a/tests/ES3/Unicode/Unicode_218/S7.6_A5.2_T4.js +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A5.2_T4; - * @section: 7.6, 6; - * @assertion: If a \UnicodeEscapeSequence sequence were replaced by its UnicodeEscapeSequence's CV, the result must still be a valid Identifier that has the exact same sequence of characters as the original Identifier; - * @description: The CV of UnicodeEscapeSequence is Lm. - * Complex test with eval; -*/ - -//CHECK -Lm = [[0x02B0, 0x02B8], [0x02BB, 0x02C1], [0x02D0, 0x02D1], [0x02E0, 0x02E4], [0x037A, 0x037A], [0x0559, 0x0559], [0x0640, 0x0640], [0x06E5, 0x06E6], [0x0E46, 0x0E46], [0x0EC6, 0x0EC6], [0x3005, 0x3005], [0x3031, 0x3035], [0x309D, 0x309E], [0x30FC, 0x30FE], [0xFF70, 0xFF70], [0xFF9E, 0xFF9F]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Lm.length; indexI++) { - for (indexJ = Lm[indexI][0]; indexJ <= Lm[indexI][1]; indexJ++) { - try { - var hex = decimalToHexString(indexJ); - var identifier1 = String.fromCharCode(indexJ); - var identifier2 = "\\u" + hex; - eval(identifier2 + " = 1"); - if (eval(identifier1 + " === " + identifier2) !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_218/S7.6_A5.2_T5.js b/tests/ES3/Unicode/Unicode_218/S7.6_A5.2_T5.js deleted file mode 100644 index 11c8477e9..000000000 --- a/tests/ES3/Unicode/Unicode_218/S7.6_A5.2_T5.js +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A5.2_T5; - * @section: 7.6, 6; - * @assertion: If a \UnicodeEscapeSequence sequence were replaced by its UnicodeEscapeSequence's CV, the result must still be a valid Identifier that has the exact same sequence of characters as the original Identifier; - * @description: The CV of UnicodeEscapeSequence is Lo. - * Complex test with eval; -*/ - -//CHECK -Lo = [[0x01AA, 0x01AA], [0x01BB, 0x01BB], [0x01BE, 0x01C3], [0x03F3, 0x03F3], [0x04C0, 0x04C0], [0x05D0, 0x05EA], [0x05F0, 0x05F2], [0x0621, 0x063A], [0x0641, 0x064A], [0x0671, 0x06B7], [0x06BA, 0x06BE], [0x06C0, 0x06CE], [0x06D0, 0x06D3], [0x06D5, 0x06D5], [0x0905, 0x0939], [0x093D, 0x093D], [0x0950, 0x0950], [0x0958, 0x0961], [0x0985, 0x098C], [0x098F, 0x0990], [0x0993, 0x09A8], [0x09AA, 0x09B0], [0x09B2, 0x09B2], [0x09B6, 0x09B9], [0x09DC, 0x09DD], [0x09DF, 0x09E1], [0x09F0, 0x09F1], [0x0A05, 0x0A0A], [0x0A0F, 0x0A10], [0x0A13, 0x0A28], [0x0A2A, 0x0A30], [0x0A32, 0x0A33], [0x0A35, 0x0A36], [0x0A38, 0x0A39], [0x0A59, 0x0A5C], [0x0A5E, 0x0A5E], [0x0A72, 0x0A74], [0x0A85, 0x0A8B], [0x0A8D, 0x0A8D], [0x0A8F, 0x0A91], [0x0A93, 0x0AA8], [0x0AAA, 0x0AB0], [0x0AB2, 0x0AB3], [0x0AB5, 0x0AB9], [0x0ABD, 0x0ABD], [0x0AD0, 0x0AD0], [0x0AE0, 0x0AE0], [0x0B05, 0x0B0C], [0x0B0F, 0x0B10], [0x0B13, 0x0B28], [0x0B2A, 0x0B30], [0x0B32, 0x0B33], [0x0B36, 0x0B39], [0x0B3D, 0x0B3D], [0x0B5C, 0x0B5D], [0x0B5F, 0x0B61], [0x0B85, 0x0B8A], [0x0B8E, 0x0B90], [0x0B92, 0x0B95], [0x0B99, 0x0B9A], [0x0B9C, 0x0B9C], [0x0B9E, 0x0B9F], [0x0BA3, 0x0BA4], [0x0BA8, 0x0BAA], [0x0BAE, 0x0BB5], [0x0BB7, 0x0BB9], [0x0C05, 0x0C0C], [0x0C0E, 0x0C10], [0x0C12, 0x0C28], [0x0C2A, 0x0C33], [0x0C35, 0x0C39], [0x0C60, 0x0C61], [0x0C85, 0x0C8C], [0x0C8E, 0x0C90], [0x0C92, 0x0CA8], [0x0CAA, 0x0CB3], [0x0CB5, 0x0CB9], [0x0CDE, 0x0CDE], [0x0CE0, 0x0CE1], [0x0D05, 0x0D0C], [0x0D0E, 0x0D10], [0x0D12, 0x0D28], [0x0D2A, 0x0D39], [0x0D60, 0x0D61], [0x0E01, 0x0E30], [0x0E32, 0x0E33], [0x0E40, 0x0E45], [0x0E81, 0x0E82], [0x0E84, 0x0E84], [0x0E87, 0x0E88], [0x0E8A, 0x0E8A], [0x0E8D, 0x0E8D], [0x0E94, 0x0E97], [0x0E99, 0x0E9F], [0x0EA1, 0x0EA3], [0x0EA5, 0x0EA5], [0x0EA7, 0x0EA7], [0x0EAA, 0x0EAB], [0x0EAD, 0x0EB0], [0x0EB2, 0x0EB3], [0x0EBD, 0x0EBD], [0x0EC0, 0x0EC4], [0x0EDC, 0x0EDD], [0x0F00, 0x0F00], [0x0F40, 0x0F47], [0x0F49, 0x0F69], [0x0F88, 0x0F8B], [0x1100, 0x1159], [0x115F, 0x11A2], [0x11A8, 0x11F9], [0x2135, 0x2138], [0x3006, 0x3006], [0x3041, 0x3094], [0x30A1, 0x30FA], [0x3105, 0x312C], [0x3131, 0x318E], [0x4E00, 0x9FA5], [0xAC00, 0xD7A3], [0xF900, 0xFA2D], [0xFB1F, 0xFB28], [0xFB2A, 0xFB36], [0xFB38, 0xFB3C], [0xFB3E, 0xFB3E], [0xFB40, 0xFB41], [0xFB43, 0xFB44], [0xFB46, 0xFBB1], [0xFBD3, 0xFD3D], [0xFD50, 0xFD8F], [0xFD92, 0xFDC7], [0xFDF0, 0xFDFB], [0xFE70, 0xFE72], [0xFE74, 0xFE74], [0xFE76, 0xFEFC], [0xFF66, 0xFF6F], [0xFF71, 0xFF9D], [0xFFA0, 0xFFBE], [0xFFC2, 0xFFC7], [0xFFCA, 0xFFCF], [0xFFD2, 0xFFD7], [0xFFDA, 0xFFDC]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Lo.length; indexI++) { - for (indexJ = Lo[indexI][0]; indexJ <= Lo[indexI][1]; indexJ++) { - try { - var hex = decimalToHexString(indexJ); - var identifier1 = String.fromCharCode(indexJ); - var identifier2 = "\\u" + hex; - eval(identifier2 + " = 1"); - if (eval(identifier1 + " === " + identifier2) !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_218/S7.6_A5.2_T6.js b/tests/ES3/Unicode/Unicode_218/S7.6_A5.2_T6.js deleted file mode 100644 index ee8b5c3d7..000000000 --- a/tests/ES3/Unicode/Unicode_218/S7.6_A5.2_T6.js +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A5.2_T6; - * @section: 7.6, 6; - * @assertion: If a \UnicodeEscapeSequence sequence were replaced by its UnicodeEscapeSequence's CV, the result must still be a valid Identifier that has the exact same sequence of characters as the original Identifier; - * @description: The CV of UnicodeEscapeSequence is Nl. - * Complex test with eval; -*/ - -//CHECK -Nl = [[0x2160, 0x2182], [0x3007, 0x3007], [0x3021, 0x3029]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Nl.length; indexI++) { - for (indexJ = Nl[indexI][0]; indexJ <= Nl[indexI][1]; indexJ++) { - try { - var hex = decimalToHexString(indexJ); - var identifier1 = "$" + String.fromCharCode(indexJ); - var identifier2 = "$\\u" + hex; - eval(identifier2 + " = 1"); - if (eval(identifier1 + " === " + identifier2) !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_218/S7.6_A5.2_T7.js b/tests/ES3/Unicode/Unicode_218/S7.6_A5.2_T7.js deleted file mode 100644 index ec47d0df0..000000000 --- a/tests/ES3/Unicode/Unicode_218/S7.6_A5.2_T7.js +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A5.2_T7; - * @section: 7.6, 6; - * @assertion: If a \UnicodeEscapeSequence sequence were replaced by its UnicodeEscapeSequence's CV, the result must still be a valid Identifier that has the exact same sequence of characters as the original Identifier; - * @description: The CV of UnicodeEscapeSequence is Mn. - * Complex test with eval; -*/ - -//CHECK -Mn = [[0x0300, 0x0345], [0x0360, 0x0361], [0x0483, 0x0486], [0x0591, 0x05A1], [0x05A3, 0x05B9], [0x05BB, 0x05BD], [0x05BF, 0x05BF], [0x05C1, 0x05C2], [0x05C4, 0x05C4], [0x064B, 0x0652], [0x0670, 0x0670], [0x06D6, 0x06DC], [0x06DF, 0x06E4], [0x06E7, 0x06E8], [0x06EA, 0x06ED], [0x0901, 0x0902], [0x093C, 0x093C], [0x0941, 0x0948], [0x094D, 0x094D], [0x0951, 0x0954], [0x0962, 0x0963], [0x0981, 0x0981], [0x09BC, 0x09BC], [0x09C1, 0x09C4], [0x09CD, 0x09CD], [0x09E2, 0x09E3], [0x0A02, 0x0A02], [0x0A3C, 0x0A3C], [0x0A41, 0x0A42], [0x0A47, 0x0A48], [0x0A4B, 0x0A4D], [0x0A70, 0x0A71], [0x0A81, 0x0A82], [0x0ABC, 0x0ABC], [0x0AC1, 0x0AC5], [0x0AC7, 0x0AC8], [0x0ACD, 0x0ACD], [0x0B01, 0x0B01], [0x0B3C, 0x0B3C], [0x0B3F, 0x0B3F], [0x0B41, 0x0B43], [0x0B4D, 0x0B4D], [0x0B56, 0x0B56], [0x0B82, 0x0B82], [0x0BC0, 0x0BC0], [0x0BCD, 0x0BCD], [0x0C3E, 0x0C40], [0x0C46, 0x0C48], [0x0C4A, 0x0C4D], [0x0C55, 0x0C56], [0x0CBF, 0x0CBF], [0x0CC6, 0x0CC6], [0x0CCC, 0x0CCD], [0x0D41, 0x0D43], [0x0D4D, 0x0D4D], [0x0E31, 0x0E31], [0x0E34, 0x0E3A], [0x0E47, 0x0E4E], [0x0EB1, 0x0EB1], [0x0EB4, 0x0EB9], [0x0EBB, 0x0EBC], [0x0EC8, 0x0ECD], [0x0F18, 0x0F19], [0x0F35, 0x0F35], [0x0F37, 0x0F37], [0x0F39, 0x0F39], [0x0F71, 0x0F7E], [0x0F80, 0x0F84], [0x0F86, 0x0F87], [0x0F90, 0x0F95], [0x0F97, 0x0F97], [0x0F99, 0x0FAD], [0x0FB1, 0x0FB7], [0x0FB9, 0x0FB9], [0x20D0, 0x20DC], [0x20E1, 0x20E1], [0x302A, 0x302F], [0x3099, 0x309A], [0xFB1E, 0xFB1E], [0xFE20, 0xFE23]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Mn.length; indexI++) { - for (indexJ = Mn[indexI][0]; indexJ <= Mn[indexI][1]; indexJ++) { - try { - var hex = decimalToHexString(indexJ); - var identifier1 = "$" + String.fromCharCode(indexJ); - var identifier2 = "$\\u" + hex; - eval(identifier2 + " = 1"); - if (eval(identifier1 + " === " + identifier2) !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_218/S7.6_A5.2_T8.js b/tests/ES3/Unicode/Unicode_218/S7.6_A5.2_T8.js deleted file mode 100644 index 90e749b78..000000000 --- a/tests/ES3/Unicode/Unicode_218/S7.6_A5.2_T8.js +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A5.2_T8; - * @section: 7.6, 6; - * @assertion: If a \UnicodeEscapeSequence sequence were replaced by its UnicodeEscapeSequence's CV, the result must still be a valid Identifier that has the exact same sequence of characters as the original Identifier; - * @description: The CV of UnicodeEscapeSequence is Mc. - * Complex test with eval; -*/ - -//CHECK -Mc = [[0x0903, 0x0903], [0x093E, 0x0940], [0x0949, 0x094C], [0x0982, 0x0983], [0x09BE, 0x09C0], [0x09C7, 0x09C8], [0x09CB, 0x09CC], [0x09D7, 0x09D7], [0x0A3E, 0x0A40], [0x0A83, 0x0A83], [0x0ABE, 0x0AC0], [0x0AC9, 0x0AC9], [0x0ACB, 0x0ACC], [0x0B02, 0x0B03], [0x0B3E, 0x0B3E], [0x0B40, 0x0B40], [0x0B47, 0x0B48], [0x0B4B, 0x0B4C], [0x0B57, 0x0B57], [0x0B83, 0x0B83], [0x0BBE, 0x0BBF], [0x0BC1, 0x0BC2], [0x0BC6, 0x0BC8], [0x0BCA, 0x0BCC], [0x0BD7, 0x0BD7], [0x0C01, 0x0C03], [0x0C41, 0x0C44], [0x0C82, 0x0C83], [0x0CBE, 0x0CBE], [0x0CC0, 0x0CC4], [0x0CC7, 0x0CC8], [0x0CCA, 0x0CCB], [0x0CD5, 0x0CD6], [0x0D02, 0x0D03], [0x0D3E, 0x0D40], [0x0D46, 0x0D48], [0x0D4A, 0x0D4C], [0x0D57, 0x0D57], [0x0F3E, 0x0F3F], [0x0F7F, 0x0F7F]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Mc.length; indexI++) { - for (indexJ = Mc[indexI][0]; indexJ <= Mc[indexI][1]; indexJ++) { - try { - var hex = decimalToHexString(indexJ); - var identifier1 = "$" + String.fromCharCode(indexJ); - var identifier2 = "$\\u" + hex; - eval(identifier2 + " = 1"); - if (eval(identifier1 + " === " + identifier2) !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_218/S7.6_A5.2_T9.js b/tests/ES3/Unicode/Unicode_218/S7.6_A5.2_T9.js deleted file mode 100644 index 373fdf30e..000000000 --- a/tests/ES3/Unicode/Unicode_218/S7.6_A5.2_T9.js +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A5.2_T9; - * @section: 7.6, 6; - * @assertion: If a \UnicodeEscapeSequence sequence were replaced by its UnicodeEscapeSequence's CV, the result must still be a valid Identifier that has the exact same sequence of characters as the original Identifier; - * @description: The CV of UnicodeEscapeSequence is Nd. - * Complex test with eval; -*/ - -//CHECK -Nd = [[0x0030, 0x0039], [0x0660, 0x0669], [0x06F0, 0x06F9], [0x0966, 0x096F], [0x09E6, 0x09EF], [0x0A66, 0x0A6F], [0x0AE6, 0x0AEF], [0x0B66, 0x0B6F], [0x0BE7, 0x0BEF], [0x0C66, 0x0C6F], [0x0CE6, 0x0CEF], [0x0D66, 0x0D6F], [0x0E50, 0x0E59], [0x0ED0, 0x0ED9], [0x0F20, 0x0F29], [0xFF10, 0xFF19]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Nd.length; indexI++) { - for (indexJ = Nd[indexI][0]; indexJ <= Nd[indexI][1]; indexJ++) { - try { - var hex = decimalToHexString(indexJ); - var identifier1 = "$" + String.fromCharCode(indexJ); - var identifier2 = "$\\u" + hex; - eval(identifier2 + " = 1"); - if (eval(identifier1 + " === " + identifier2) !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_218/S7.6_A5.3_T1.js b/tests/ES3/Unicode/Unicode_218/S7.6_A5.3_T1.js deleted file mode 100644 index bf1587b96..000000000 --- a/tests/ES3/Unicode/Unicode_218/S7.6_A5.3_T1.js +++ /dev/null @@ -1,153 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A5.3_T1; - * @section: 7.6, 6; - * @assertion: If a UnicodeEscapeSequence put a character into an identifier that would otherwise be illegal, throw SyntaxError; - * @description: Complex test with eval; -*/ - -//CHECK -Lu = [[0x0041, 0x005A], [0x00C0, 0x00D6], [0x00D8, 0x00DE], [0x0100, 0x0100], [0x0102, 0x0102], [0x0104, 0x0104], [0x0106, 0x0106], [0x0108, 0x0108], [0x010A, 0x010A], [0x010C, 0x010C], [0x010E, 0x010E], [0x0110, 0x0110], [0x0112, 0x0112], [0x0114, 0x0114], [0x0116, 0x0116], [0x0118, 0x0118], [0x011A, 0x011A], [0x011C, 0x011C], [0x011E, 0x011E], [0x0120, 0x0120], [0x0122, 0x0122], [0x0124, 0x0124], [0x0126, 0x0126], [0x0128, 0x0128], [0x012A, 0x012A], [0x012C, 0x012C], [0x012E, 0x012E], [0x0130, 0x0130], [0x0132, 0x0132], [0x0134, 0x0134], [0x0136, 0x0136], [0x0139, 0x0139], [0x013B, 0x013B], [0x013D, 0x013D], [0x013F, 0x013F], [0x0141, 0x0141], [0x0143, 0x0143], [0x0145, 0x0145], [0x0147, 0x0147], [0x014A, 0x014A], [0x014C, 0x014C], [0x014E, 0x014E], [0x0150, 0x0150], [0x0152, 0x0152], [0x0154, 0x0154], [0x0156, 0x0156], [0x0158, 0x0158], [0x015A, 0x015A], [0x015C, 0x015C], [0x015E, 0x015E], [0x0160, 0x0160], [0x0162, 0x0162], [0x0164, 0x0164], [0x0166, 0x0166], [0x0168, 0x0168], [0x016A, 0x016A], [0x016C, 0x016C], [0x016E, 0x016E], [0x0170, 0x0170], [0x0172, 0x0172], [0x0174, 0x0174], [0x0176, 0x0176], [0x0178, 0x0179], [0x017B, 0x017B], [0x017D, 0x017D], [0x0181, 0x0182], [0x0184, 0x0184], [0x0186, 0x0187], [0x0189, 0x018B], [0x018E, 0x0191], [0x0193, 0x0194], [0x0196, 0x0198], [0x019C, 0x019D], [0x019F, 0x01A0], [0x01A2, 0x01A2], [0x01A4, 0x01A4], [0x01A6, 0x01A7], [0x01A9, 0x01A9], [0x01AC, 0x01AC], [0x01AE, 0x01AF], [0x01B1, 0x01B3], [0x01B5, 0x01B5], [0x01B7, 0x01B8], [0x01BC, 0x01BC], [0x01C4, 0x01C4], [0x01C7, 0x01C7], [0x01CA, 0x01CA], [0x01CD, 0x01CD], [0x01CF, 0x01CF], [0x01D1, 0x01D1], [0x01D3, 0x01D3], [0x01D5, 0x01D5], [0x01D7, 0x01D7], [0x01D9, 0x01D9], [0x01DB, 0x01DB], [0x01DE, 0x01DE], [0x01E0, 0x01E0], [0x01E2, 0x01E2], [0x01E4, 0x01E4], [0x01E6, 0x01E6], [0x01E8, 0x01E8], [0x01EA, 0x01EA], [0x01EC, 0x01EC], [0x01EE, 0x01EE], [0x01F1, 0x01F1], [0x01F4, 0x01F4], [0x01FA, 0x01FA], [0x01FC, 0x01FC], [0x01FE, 0x01FE], [0x0200, 0x0200], [0x0202, 0x0202], [0x0204, 0x0204], [0x0206, 0x0206], [0x0208, 0x0208], [0x020A, 0x020A], [0x020C, 0x020C], [0x020E, 0x020E], [0x0210, 0x0210], [0x0212, 0x0212], [0x0214, 0x0214], [0x0216, 0x0216], [0x0386, 0x0386], [0x0388, 0x038A], [0x038C, 0x038C], [0x038E, 0x038F], [0x0391, 0x03A1], [0x03A3, 0x03AB], [0x03D2, 0x03D4], [0x03DA, 0x03DA], [0x03DC, 0x03DC], [0x03DE, 0x03DE], [0x03E0, 0x03E0], [0x03E2, 0x03E2], [0x03E4, 0x03E4], [0x03E6, 0x03E6], [0x03E8, 0x03E8], [0x03EA, 0x03EA], [0x03EC, 0x03EC], [0x03EE, 0x03EE], [0x0401, 0x040C], [0x040E, 0x042F], [0x0460, 0x0460], [0x0462, 0x0462], [0x0464, 0x0464], [0x0466, 0x0466], [0x0468, 0x0468], [0x046A, 0x046A], [0x046C, 0x046C], [0x046E, 0x046E], [0x0470, 0x0470], [0x0472, 0x0472], [0x0474, 0x0474], [0x0476, 0x0476], [0x0478, 0x0478], [0x047A, 0x047A], [0x047C, 0x047C], [0x047E, 0x047E], [0x0480, 0x0480], [0x0490, 0x0490], [0x0492, 0x0492], [0x0494, 0x0494], [0x0496, 0x0496], [0x0498, 0x0498], [0x049A, 0x049A], [0x049C, 0x049C], [0x049E, 0x049E], [0x04A0, 0x04A0], [0x04A2, 0x04A2], [0x04A4, 0x04A4], [0x04A6, 0x04A6], [0x04A8, 0x04A8], [0x04AA, 0x04AA], [0x04AC, 0x04AC], [0x04AE, 0x04AE], [0x04B0, 0x04B0], [0x04B2, 0x04B2], [0x04B4, 0x04B4], [0x04B6, 0x04B6], [0x04B8, 0x04B8], [0x04BA, 0x04BA], [0x04BC, 0x04BC], [0x04BE, 0x04BE], [0x04C1, 0x04C1], [0x04C3, 0x04C3], [0x04C7, 0x04C7], [0x04CB, 0x04CB], [0x04D0, 0x04D0], [0x04D2, 0x04D2], [0x04D4, 0x04D4], [0x04D6, 0x04D6], [0x04D8, 0x04D8], [0x04DA, 0x04DA], [0x04DC, 0x04DC], [0x04DE, 0x04DE], [0x04E0, 0x04E0], [0x04E2, 0x04E2], [0x04E4, 0x04E4], [0x04E6, 0x04E6], [0x04E8, 0x04E8], [0x04EA, 0x04EA], [0x04EE, 0x04EE], [0x04F0, 0x04F0], [0x04F2, 0x04F2], [0x04F4, 0x04F4], [0x04F8, 0x04F8], [0x0531, 0x0556], [0x10A0, 0x10C5], [0x1E00, 0x1E00], [0x1E02, 0x1E02], [0x1E04, 0x1E04], [0x1E06, 0x1E06], [0x1E08, 0x1E08], [0x1E0A, 0x1E0A], [0x1E0C, 0x1E0C], [0x1E0E, 0x1E0E], [0x1E10, 0x1E10], [0x1E12, 0x1E12], [0x1E14, 0x1E14], [0x1E16, 0x1E16], [0x1E18, 0x1E18], [0x1E1A, 0x1E1A], [0x1E1C, 0x1E1C], [0x1E1E, 0x1E1E], [0x1E20, 0x1E20], [0x1E22, 0x1E22], [0x1E24, 0x1E24], [0x1E26, 0x1E26], [0x1E28, 0x1E28], [0x1E2A, 0x1E2A], [0x1E2C, 0x1E2C], [0x1E2E, 0x1E2E], [0x1E30, 0x1E30], [0x1E32, 0x1E32], [0x1E34, 0x1E34], [0x1E36, 0x1E36], [0x1E38, 0x1E38], [0x1E3A, 0x1E3A], [0x1E3C, 0x1E3C], [0x1E3E, 0x1E3E], [0x1E40, 0x1E40], [0x1E42, 0x1E42], [0x1E44, 0x1E44], [0x1E46, 0x1E46], [0x1E48, 0x1E48], [0x1E4A, 0x1E4A], [0x1E4C, 0x1E4C], [0x1E4E, 0x1E4E], [0x1E50, 0x1E50], [0x1E52, 0x1E52], [0x1E54, 0x1E54], [0x1E56, 0x1E56], [0x1E58, 0x1E58], [0x1E5A, 0x1E5A], [0x1E5C, 0x1E5C], [0x1E5E, 0x1E5E], [0x1E60, 0x1E60], [0x1E62, 0x1E62], [0x1E64, 0x1E64], [0x1E66, 0x1E66], [0x1E68, 0x1E68], [0x1E6A, 0x1E6A], [0x1E6C, 0x1E6C], [0x1E6E, 0x1E6E], [0x1E70, 0x1E70], [0x1E72, 0x1E72], [0x1E74, 0x1E74], [0x1E76, 0x1E76], [0x1E78, 0x1E78], [0x1E7A, 0x1E7A], [0x1E7C, 0x1E7C], [0x1E7E, 0x1E7E], [0x1E80, 0x1E80], [0x1E82, 0x1E82], [0x1E84, 0x1E84], [0x1E86, 0x1E86], [0x1E88, 0x1E88], [0x1E8A, 0x1E8A], [0x1E8C, 0x1E8C], [0x1E8E, 0x1E8E], [0x1E90, 0x1E90], [0x1E92, 0x1E92], [0x1E94, 0x1E94], [0x1EA0, 0x1EA0], [0x1EA2, 0x1EA2], [0x1EA4, 0x1EA4], [0x1EA6, 0x1EA6], [0x1EA8, 0x1EA8], [0x1EAA, 0x1EAA], [0x1EAC, 0x1EAC], [0x1EAE, 0x1EAE], [0x1EB0, 0x1EB0], [0x1EB2, 0x1EB2], [0x1EB4, 0x1EB4], [0x1EB6, 0x1EB6], [0x1EB8, 0x1EB8], [0x1EBA, 0x1EBA], [0x1EBC, 0x1EBC], [0x1EBE, 0x1EBE], [0x1EC0, 0x1EC0], [0x1EC2, 0x1EC2], [0x1EC4, 0x1EC4], [0x1EC6, 0x1EC6], [0x1EC8, 0x1EC8], [0x1ECA, 0x1ECA], [0x1ECC, 0x1ECC], [0x1ECE, 0x1ECE], [0x1ED0, 0x1ED0], [0x1ED2, 0x1ED2], [0x1ED4, 0x1ED4], [0x1ED6, 0x1ED6], [0x1ED8, 0x1ED8], [0x1EDA, 0x1EDA], [0x1EDC, 0x1EDC], [0x1EDE, 0x1EDE], [0x1EE0, 0x1EE0], [0x1EE2, 0x1EE2], [0x1EE4, 0x1EE4], [0x1EE6, 0x1EE6], [0x1EE8, 0x1EE8], [0x1EEA, 0x1EEA], [0x1EEC, 0x1EEC], [0x1EEE, 0x1EEE], [0x1EF0, 0x1EF0], [0x1EF2, 0x1EF2], [0x1EF4, 0x1EF4], [0x1EF6, 0x1EF6], [0x1EF8, 0x1EF8], [0x1F08, 0x1F0F], [0x1F18, 0x1F1D], [0x1F28, 0x1F2F], [0x1F38, 0x1F3F], [0x1F48, 0x1F4D], [0x1F59, 0x1F59], [0x1F5B, 0x1F5B], [0x1F5D, 0x1F5D], [0x1F5F, 0x1F5F], [0x1F68, 0x1F6F], [0x1F88, 0x1F8F], [0x1F98, 0x1F9F], [0x1FA8, 0x1FAF], [0x1FB8, 0x1FBC], [0x1FC8, 0x1FCC], [0x1FD8, 0x1FDB], [0x1FE8, 0x1FEC], [0x1FF8, 0x1FFC], [0x2102, 0x2102], [0x2107, 0x2107], [0x210B, 0x210D], [0x2110, 0x2112], [0x2115, 0x2115], [0x2119, 0x211D], [0x2124, 0x2124], [0x2126, 0x2126], [0x2128, 0x2128], [0x212A, 0x212D], [0x2130, 0x2131], [0x2133, 0x2133], [0xFF21, 0xFF3A]]; -Ll = [[0x0061, 0x007A], [0x00AA, 0x00AA], [0x00B5, 0x00B5], [0x00BA, 0x00BA], [0x00DF, 0x00F6], [0x00F8, 0x00FF], [0x0101, 0x0101], [0x0103, 0x0103], [0x0105, 0x0105], [0x0107, 0x0107], [0x0109, 0x0109], [0x010B, 0x010B], [0x010D, 0x010D], [0x010F, 0x010F], [0x0111, 0x0111], [0x0113, 0x0113], [0x0115, 0x0115], [0x0117, 0x0117], [0x0119, 0x0119], [0x011B, 0x011B], [0x011D, 0x011D], [0x011F, 0x011F], [0x0121, 0x0121], [0x0123, 0x0123], [0x0125, 0x0125], [0x0127, 0x0127], [0x0129, 0x0129], [0x012B, 0x012B], [0x012D, 0x012D], [0x012F, 0x012F], [0x0131, 0x0131], [0x0133, 0x0133], [0x0135, 0x0135], [0x0137, 0x0138], [0x013A, 0x013A], [0x013C, 0x013C], [0x013E, 0x013E], [0x0140, 0x0140], [0x0142, 0x0142], [0x0144, 0x0144], [0x0146, 0x0146], [0x0148, 0x0149], [0x014B, 0x014B], [0x014D, 0x014D], [0x014F, 0x014F], [0x0151, 0x0151], [0x0153, 0x0153], [0x0155, 0x0155], [0x0157, 0x0157], [0x0159, 0x0159], [0x015B, 0x015B], [0x015D, 0x015D], [0x015F, 0x015F], [0x0161, 0x0161], [0x0163, 0x0163], [0x0165, 0x0165], [0x0167, 0x0167], [0x0169, 0x0169], [0x016B, 0x016B], [0x016D, 0x016D], [0x016F, 0x016F], [0x0171, 0x0171], [0x0173, 0x0173], [0x0175, 0x0175], [0x0177, 0x0177], [0x017A, 0x017A], [0x017C, 0x017C], [0x017E, 0x0180], [0x0183, 0x0183], [0x0185, 0x0185], [0x0188, 0x0188], [0x018C, 0x018D], [0x0192, 0x0192], [0x0195, 0x0195], [0x0199, 0x019B], [0x019E, 0x019E], [0x01A1, 0x01A1], [0x01A3, 0x01A3], [0x01A5, 0x01A5], [0x01A8, 0x01A8], [0x01AB, 0x01AB], [0x01AD, 0x01AD], [0x01B0, 0x01B0], [0x01B4, 0x01B4], [0x01B6, 0x01B6], [0x01B9, 0x01BA], [0x01BD, 0x01BD], [0x01C6, 0x01C6], [0x01C9, 0x01C9], [0x01CC, 0x01CC], [0x01CE, 0x01CE], [0x01D0, 0x01D0], [0x01D2, 0x01D2], [0x01D4, 0x01D4], [0x01D6, 0x01D6], [0x01D8, 0x01D8], [0x01DA, 0x01DA], [0x01DC, 0x01DD], [0x01DF, 0x01DF], [0x01E1, 0x01E1], [0x01E3, 0x01E3], [0x01E5, 0x01E5], [0x01E7, 0x01E7], [0x01E9, 0x01E9], [0x01EB, 0x01EB], [0x01ED, 0x01ED], [0x01EF, 0x01F0], [0x01F3, 0x01F3], [0x01F5, 0x01F5], [0x01FB, 0x01FB], [0x01FD, 0x01FD], [0x01FF, 0x01FF], [0x0201, 0x0201], [0x0203, 0x0203], [0x0205, 0x0205], [0x0207, 0x0207], [0x0209, 0x0209], [0x020B, 0x020B], [0x020D, 0x020D], [0x020F, 0x020F], [0x0211, 0x0211], [0x0213, 0x0213], [0x0215, 0x0215], [0x0217, 0x0217], [0x0250, 0x02A8], [0x0390, 0x0390], [0x03AC, 0x03CE], [0x03D0, 0x03D1], [0x03D5, 0x03D6], [0x03E3, 0x03E3], [0x03E5, 0x03E5], [0x03E7, 0x03E7], [0x03E9, 0x03E9], [0x03EB, 0x03EB], [0x03ED, 0x03ED], [0x03EF, 0x03F2], [0x0430, 0x044F], [0x0451, 0x045C], [0x045E, 0x045F], [0x0461, 0x0461], [0x0463, 0x0463], [0x0465, 0x0465], [0x0467, 0x0467], [0x0469, 0x0469], [0x046B, 0x046B], [0x046D, 0x046D], [0x046F, 0x046F], [0x0471, 0x0471], [0x0473, 0x0473], [0x0475, 0x0475], [0x0477, 0x0477], [0x0479, 0x0479], [0x047B, 0x047B], [0x047D, 0x047D], [0x047F, 0x047F], [0x0481, 0x0481], [0x0491, 0x0491], [0x0493, 0x0493], [0x0495, 0x0495], [0x0497, 0x0497], [0x0499, 0x0499], [0x049B, 0x049B], [0x049D, 0x049D], [0x049F, 0x049F], [0x04A1, 0x04A1], [0x04A3, 0x04A3], [0x04A5, 0x04A5], [0x04A7, 0x04A7], [0x04A9, 0x04A9], [0x04AB, 0x04AB], [0x04AD, 0x04AD], [0x04AF, 0x04AF], [0x04B1, 0x04B1], [0x04B3, 0x04B3], [0x04B5, 0x04B5], [0x04B7, 0x04B7], [0x04B9, 0x04B9], [0x04BB, 0x04BB], [0x04BD, 0x04BD], [0x04BF, 0x04BF], [0x04C2, 0x04C2], [0x04C4, 0x04C4], [0x04C8, 0x04C8], [0x04CC, 0x04CC], [0x04D1, 0x04D1], [0x04D3, 0x04D3], [0x04D5, 0x04D5], [0x04D7, 0x04D7], [0x04D9, 0x04D9], [0x04DB, 0x04DB], [0x04DD, 0x04DD], [0x04DF, 0x04DF], [0x04E1, 0x04E1], [0x04E3, 0x04E3], [0x04E5, 0x04E5], [0x04E7, 0x04E7], [0x04E9, 0x04E9], [0x04EB, 0x04EB], [0x04EF, 0x04EF], [0x04F1, 0x04F1], [0x04F3, 0x04F3], [0x04F5, 0x04F5], [0x04F9, 0x04F9], [0x0561, 0x0587], [0x10D0, 0x10F6], [0x1E01, 0x1E01], [0x1E03, 0x1E03], [0x1E05, 0x1E05], [0x1E07, 0x1E07], [0x1E09, 0x1E09], [0x1E0B, 0x1E0B], [0x1E0D, 0x1E0D], [0x1E0F, 0x1E0F], [0x1E11, 0x1E11], [0x1E13, 0x1E13], [0x1E15, 0x1E15], [0x1E17, 0x1E17], [0x1E19, 0x1E19], [0x1E1B, 0x1E1B], [0x1E1D, 0x1E1D], [0x1E1F, 0x1E1F], [0x1E21, 0x1E21], [0x1E23, 0x1E23], [0x1E25, 0x1E25], [0x1E27, 0x1E27], [0x1E29, 0x1E29], [0x1E2B, 0x1E2B], [0x1E2D, 0x1E2D], [0x1E2F, 0x1E2F], [0x1E31, 0x1E31], [0x1E33, 0x1E33], [0x1E35, 0x1E35], [0x1E37, 0x1E37], [0x1E39, 0x1E39], [0x1E3B, 0x1E3B], [0x1E3D, 0x1E3D], [0x1E3F, 0x1E3F], [0x1E41, 0x1E41], [0x1E43, 0x1E43], [0x1E45, 0x1E45], [0x1E47, 0x1E47], [0x1E49, 0x1E49], [0x1E4B, 0x1E4B], [0x1E4D, 0x1E4D], [0x1E4F, 0x1E4F], [0x1E51, 0x1E51], [0x1E53, 0x1E53], [0x1E55, 0x1E55], [0x1E57, 0x1E57], [0x1E59, 0x1E59], [0x1E5B, 0x1E5B], [0x1E5D, 0x1E5D], [0x1E5F, 0x1E5F], [0x1E61, 0x1E61], [0x1E63, 0x1E63], [0x1E65, 0x1E65], [0x1E67, 0x1E67], [0x1E69, 0x1E69], [0x1E6B, 0x1E6B], [0x1E6D, 0x1E6D], [0x1E6F, 0x1E6F], [0x1E71, 0x1E71], [0x1E73, 0x1E73], [0x1E75, 0x1E75], [0x1E77, 0x1E77], [0x1E79, 0x1E79], [0x1E7B, 0x1E7B], [0x1E7D, 0x1E7D], [0x1E7F, 0x1E7F], [0x1E81, 0x1E81], [0x1E83, 0x1E83], [0x1E85, 0x1E85], [0x1E87, 0x1E87], [0x1E89, 0x1E89], [0x1E8B, 0x1E8B], [0x1E8D, 0x1E8D], [0x1E8F, 0x1E8F], [0x1E91, 0x1E91], [0x1E93, 0x1E93], [0x1E95, 0x1E9B], [0x1EA1, 0x1EA1], [0x1EA3, 0x1EA3], [0x1EA5, 0x1EA5], [0x1EA7, 0x1EA7], [0x1EA9, 0x1EA9], [0x1EAB, 0x1EAB], [0x1EAD, 0x1EAD], [0x1EAF, 0x1EAF], [0x1EB1, 0x1EB1], [0x1EB3, 0x1EB3], [0x1EB5, 0x1EB5], [0x1EB7, 0x1EB7], [0x1EB9, 0x1EB9], [0x1EBB, 0x1EBB], [0x1EBD, 0x1EBD], [0x1EBF, 0x1EBF], [0x1EC1, 0x1EC1], [0x1EC3, 0x1EC3], [0x1EC5, 0x1EC5], [0x1EC7, 0x1EC7], [0x1EC9, 0x1EC9], [0x1ECB, 0x1ECB], [0x1ECD, 0x1ECD], [0x1ECF, 0x1ECF], [0x1ED1, 0x1ED1], [0x1ED3, 0x1ED3], [0x1ED5, 0x1ED5], [0x1ED7, 0x1ED7], [0x1ED9, 0x1ED9], [0x1EDB, 0x1EDB], [0x1EDD, 0x1EDD], [0x1EDF, 0x1EDF], [0x1EE1, 0x1EE1], [0x1EE3, 0x1EE3], [0x1EE5, 0x1EE5], [0x1EE7, 0x1EE7], [0x1EE9, 0x1EE9], [0x1EEB, 0x1EEB], [0x1EED, 0x1EED], [0x1EEF, 0x1EEF], [0x1EF1, 0x1EF1], [0x1EF3, 0x1EF3], [0x1EF5, 0x1EF5], [0x1EF7, 0x1EF7], [0x1EF9, 0x1EF9], [0x1F00, 0x1F07], [0x1F10, 0x1F15], [0x1F20, 0x1F27], [0x1F30, 0x1F37], [0x1F40, 0x1F45], [0x1F50, 0x1F57], [0x1F60, 0x1F67], [0x1F70, 0x1F7D], [0x1F80, 0x1F87], [0x1F90, 0x1F97], [0x1FA0, 0x1FA7], [0x1FB0, 0x1FB4], [0x1FB6, 0x1FB7], [0x1FBE, 0x1FBE], [0x1FC2, 0x1FC4], [0x1FC6, 0x1FC7], [0x1FD0, 0x1FD3], [0x1FD6, 0x1FD7], [0x1FE0, 0x1FE7], [0x1FF2, 0x1FF4], [0x1FF6, 0x1FF7], [0x207F, 0x207F], [0x210A, 0x210A], [0x210E, 0x210F], [0x2113, 0x2113], [0x2118, 0x2118], [0x212E, 0x212F], [0x2134, 0x2134], [0xFB00, 0xFB06], [0xFB13, 0xFB17], [0xFF41, 0xFF5A]]; -Lt = [[0x01C5, 0x01C5], [0x01C8, 0x01C8], [0x01CB, 0x01CB], [0x01F2, 0x01F2]]; -Lm = [[0x02B0, 0x02B8], [0x02BB, 0x02C1], [0x02D0, 0x02D1], [0x02E0, 0x02E4], [0x037A, 0x037A], [0x0559, 0x0559], [0x0640, 0x0640], [0x06E5, 0x06E6], [0x0E46, 0x0E46], [0x0EC6, 0x0EC6], [0x3005, 0x3005], [0x3031, 0x3035], [0x309D, 0x309E], [0x30FC, 0x30FE], [0xFF70, 0xFF70], [0xFF9E, 0xFF9F]]; -Lo = [[0x01AA, 0x01AA], [0x01BB, 0x01BB], [0x01BE, 0x01C3], [0x03F3, 0x03F3], [0x04C0, 0x04C0], [0x05D0, 0x05EA], [0x05F0, 0x05F2], [0x0621, 0x063A], [0x0641, 0x064A], [0x0671, 0x06B7], [0x06BA, 0x06BE], [0x06C0, 0x06CE], [0x06D0, 0x06D3], [0x06D5, 0x06D5], [0x0905, 0x0939], [0x093D, 0x093D], [0x0950, 0x0950], [0x0958, 0x0961], [0x0985, 0x098C], [0x098F, 0x0990], [0x0993, 0x09A8], [0x09AA, 0x09B0], [0x09B2, 0x09B2], [0x09B6, 0x09B9], [0x09DC, 0x09DD], [0x09DF, 0x09E1], [0x09F0, 0x09F1], [0x0A05, 0x0A0A], [0x0A0F, 0x0A10], [0x0A13, 0x0A28], [0x0A2A, 0x0A30], [0x0A32, 0x0A33], [0x0A35, 0x0A36], [0x0A38, 0x0A39], [0x0A59, 0x0A5C], [0x0A5E, 0x0A5E], [0x0A72, 0x0A74], [0x0A85, 0x0A8B], [0x0A8D, 0x0A8D], [0x0A8F, 0x0A91], [0x0A93, 0x0AA8], [0x0AAA, 0x0AB0], [0x0AB2, 0x0AB3], [0x0AB5, 0x0AB9], [0x0ABD, 0x0ABD], [0x0AD0, 0x0AD0], [0x0AE0, 0x0AE0], [0x0B05, 0x0B0C], [0x0B0F, 0x0B10], [0x0B13, 0x0B28], [0x0B2A, 0x0B30], [0x0B32, 0x0B33], [0x0B36, 0x0B39], [0x0B3D, 0x0B3D], [0x0B5C, 0x0B5D], [0x0B5F, 0x0B61], [0x0B85, 0x0B8A], [0x0B8E, 0x0B90], [0x0B92, 0x0B95], [0x0B99, 0x0B9A], [0x0B9C, 0x0B9C], [0x0B9E, 0x0B9F], [0x0BA3, 0x0BA4], [0x0BA8, 0x0BAA], [0x0BAE, 0x0BB5], [0x0BB7, 0x0BB9], [0x0C05, 0x0C0C], [0x0C0E, 0x0C10], [0x0C12, 0x0C28], [0x0C2A, 0x0C33], [0x0C35, 0x0C39], [0x0C60, 0x0C61], [0x0C85, 0x0C8C], [0x0C8E, 0x0C90], [0x0C92, 0x0CA8], [0x0CAA, 0x0CB3], [0x0CB5, 0x0CB9], [0x0CDE, 0x0CDE], [0x0CE0, 0x0CE1], [0x0D05, 0x0D0C], [0x0D0E, 0x0D10], [0x0D12, 0x0D28], [0x0D2A, 0x0D39], [0x0D60, 0x0D61], [0x0E01, 0x0E30], [0x0E32, 0x0E33], [0x0E40, 0x0E45], [0x0E81, 0x0E82], [0x0E84, 0x0E84], [0x0E87, 0x0E88], [0x0E8A, 0x0E8A], [0x0E8D, 0x0E8D], [0x0E94, 0x0E97], [0x0E99, 0x0E9F], [0x0EA1, 0x0EA3], [0x0EA5, 0x0EA5], [0x0EA7, 0x0EA7], [0x0EAA, 0x0EAB], [0x0EAD, 0x0EB0], [0x0EB2, 0x0EB3], [0x0EBD, 0x0EBD], [0x0EC0, 0x0EC4], [0x0EDC, 0x0EDD], [0x0F00, 0x0F00], [0x0F40, 0x0F47], [0x0F49, 0x0F69], [0x0F88, 0x0F8B], [0x1100, 0x1159], [0x115F, 0x11A2], [0x11A8, 0x11F9], [0x2135, 0x2138], [0x3006, 0x3006], [0x3041, 0x3094], [0x30A1, 0x30FA], [0x3105, 0x312C], [0x3131, 0x318E], [0x4E00, 0x9FA5], [0xAC00, 0xD7A3], [0xF900, 0xFA2D], [0xFB1F, 0xFB28], [0xFB2A, 0xFB36], [0xFB38, 0xFB3C], [0xFB3E, 0xFB3E], [0xFB40, 0xFB41], [0xFB43, 0xFB44], [0xFB46, 0xFBB1], [0xFBD3, 0xFD3D], [0xFD50, 0xFD8F], [0xFD92, 0xFDC7], [0xFDF0, 0xFDFB], [0xFE70, 0xFE72], [0xFE74, 0xFE74], [0xFE76, 0xFEFC], [0xFF66, 0xFF6F], [0xFF71, 0xFF9D], [0xFFA0, 0xFFBE], [0xFFC2, 0xFFC7], [0xFFCA, 0xFFCF], [0xFFD2, 0xFFD7], [0xFFDA, 0xFFDC]]; -Nl = [[0x2160, 0x2182], [0x3007, 0x3007], [0x3021, 0x3029]]; -Mn = [[0x0300, 0x0345], [0x0360, 0x0361], [0x0483, 0x0486], [0x0591, 0x05A1], [0x05A3, 0x05B9], [0x05BB, 0x05BD], [0x05BF, 0x05BF], [0x05C1, 0x05C2], [0x05C4, 0x05C4], [0x064B, 0x0652], [0x0670, 0x0670], [0x06D6, 0x06DC], [0x06DF, 0x06E4], [0x06E7, 0x06E8], [0x06EA, 0x06ED], [0x0901, 0x0902], [0x093C, 0x093C], [0x0941, 0x0948], [0x094D, 0x094D], [0x0951, 0x0954], [0x0962, 0x0963], [0x0981, 0x0981], [0x09BC, 0x09BC], [0x09C1, 0x09C4], [0x09CD, 0x09CD], [0x09E2, 0x09E3], [0x0A02, 0x0A02], [0x0A3C, 0x0A3C], [0x0A41, 0x0A42], [0x0A47, 0x0A48], [0x0A4B, 0x0A4D], [0x0A70, 0x0A71], [0x0A81, 0x0A82], [0x0ABC, 0x0ABC], [0x0AC1, 0x0AC5], [0x0AC7, 0x0AC8], [0x0ACD, 0x0ACD], [0x0B01, 0x0B01], [0x0B3C, 0x0B3C], [0x0B3F, 0x0B3F], [0x0B41, 0x0B43], [0x0B4D, 0x0B4D], [0x0B56, 0x0B56], [0x0B82, 0x0B82], [0x0BC0, 0x0BC0], [0x0BCD, 0x0BCD], [0x0C3E, 0x0C40], [0x0C46, 0x0C48], [0x0C4A, 0x0C4D], [0x0C55, 0x0C56], [0x0CBF, 0x0CBF], [0x0CC6, 0x0CC6], [0x0CCC, 0x0CCD], [0x0D41, 0x0D43], [0x0D4D, 0x0D4D], [0x0E31, 0x0E31], [0x0E34, 0x0E3A], [0x0E47, 0x0E4E], [0x0EB1, 0x0EB1], [0x0EB4, 0x0EB9], [0x0EBB, 0x0EBC], [0x0EC8, 0x0ECD], [0x0F18, 0x0F19], [0x0F35, 0x0F35], [0x0F37, 0x0F37], [0x0F39, 0x0F39], [0x0F71, 0x0F7E], [0x0F80, 0x0F84], [0x0F86, 0x0F87], [0x0F90, 0x0F95], [0x0F97, 0x0F97], [0x0F99, 0x0FAD], [0x0FB1, 0x0FB7], [0x0FB9, 0x0FB9], [0x20D0, 0x20DC], [0x20E1, 0x20E1], [0x302A, 0x302F], [0x3099, 0x309A], [0xFB1E, 0xFB1E], [0xFE20, 0xFE23]]; -Mc = [[0x0903, 0x0903], [0x093E, 0x0940], [0x0949, 0x094C], [0x0982, 0x0983], [0x09BE, 0x09C0], [0x09C7, 0x09C8], [0x09CB, 0x09CC], [0x09D7, 0x09D7], [0x0A3E, 0x0A40], [0x0A83, 0x0A83], [0x0ABE, 0x0AC0], [0x0AC9, 0x0AC9], [0x0ACB, 0x0ACC], [0x0B02, 0x0B03], [0x0B3E, 0x0B3E], [0x0B40, 0x0B40], [0x0B47, 0x0B48], [0x0B4B, 0x0B4C], [0x0B57, 0x0B57], [0x0B83, 0x0B83], [0x0BBE, 0x0BBF], [0x0BC1, 0x0BC2], [0x0BC6, 0x0BC8], [0x0BCA, 0x0BCC], [0x0BD7, 0x0BD7], [0x0C01, 0x0C03], [0x0C41, 0x0C44], [0x0C82, 0x0C83], [0x0CBE, 0x0CBE], [0x0CC0, 0x0CC4], [0x0CC7, 0x0CC8], [0x0CCA, 0x0CCB], [0x0CD5, 0x0CD6], [0x0D02, 0x0D03], [0x0D3E, 0x0D40], [0x0D46, 0x0D48], [0x0D4A, 0x0D4C], [0x0D57, 0x0D57], [0x0F3E, 0x0F3F], [0x0F7F, 0x0F7F]]; -Nd = [[0x0030, 0x0039], [0x0660, 0x0669], [0x06F0, 0x06F9], [0x0966, 0x096F], [0x09E6, 0x09EF], [0x0A66, 0x0A6F], [0x0AE6, 0x0AEF], [0x0B66, 0x0B6F], [0x0BE7, 0x0BEF], [0x0C66, 0x0C6F], [0x0CE6, 0x0CEF], [0x0D66, 0x0D6F], [0x0E50, 0x0E59], [0x0ED0, 0x0ED9], [0x0F20, 0x0F29], [0xFF10, 0xFF19]]; -Pc = [[0x005F, 0x005F], [0x203F, 0x2040], [0x30FB, 0x30FB], [0xFE33, 0xFE34], [0xFE4D, 0xFE4F], [0xFF3F, 0xFF3F], [0xFF65, 0xFF65]]; - -UnicodeLetterLu = []; -UnicodeLetterLl = []; -UnicodeLetterLt = []; -UnicodeLetterLm = []; -UnicodeLetterLo = []; -UnicodeLetterNl = []; -UnicodeLetterMn = []; -UnicodeLetterMc = []; -UnicodeLetterNd = []; -UnicodeLetterPc = []; - -for (indexI = 0; indexI < Lu.length; indexI++) { - for (indexJ = Lu[indexI][0]; indexJ <= Lu[indexI][1]; indexJ++) { - UnicodeLetterLu[indexJ] = true; - } -} -for (indexI = 0; indexI < Ll.length; indexI++) { - for (indexJ = Ll[indexI][0]; indexJ <= Ll[indexI][1]; indexJ++) { - UnicodeLetterLl[indexJ] = true; - } -} -for (indexI = 0; indexI < Lt.length; indexI++) { - for (indexJ = Lt[indexI][0]; indexJ <= Lt[indexI][1]; indexJ++) { - UnicodeLetterLt[indexJ] = true; - } -} -for (indexI = 0; indexI < Lm.length; indexI++) { - for (indexJ = Lm[indexI][0]; indexJ <= Lm[indexI][1]; indexJ++) { - UnicodeLetterLm[indexJ] = true; - } -} -for (indexI = 0; indexI < Lo.length; indexI++) { - for (indexJ = Lo[indexI][0]; indexJ <= Lo[indexI][1]; indexJ++) { - UnicodeLetterLo[indexJ] = true; - } -} -for (indexI = 0; indexI < Nl.length; indexI++) { - for (indexJ = Nl[indexI][0]; indexJ <= Nl[indexI][1]; indexJ++) { - UnicodeLetterNl[indexJ] = true; - } -} -for (indexI = 0; indexI < Mn.length; indexI++) { - for (indexJ = Mn[indexI][0]; indexJ <= Mn[indexI][1]; indexJ++) { - UnicodeLetterMn[indexJ] = true; - } -} -for (indexI = 0; indexI < Mc.length; indexI++) { - for (indexJ = Mc[indexI][0]; indexJ <= Mc[indexI][1]; indexJ++) { - UnicodeLetterMc[indexJ] = true; - } -} -for (indexI = 0; indexI < Nd.length; indexI++) { - for (indexJ = Nd[indexI][0]; indexJ <= Nd[indexI][1]; indexJ++) { - UnicodeLetterNd[indexJ] = true; - } -} -for (indexI = 0; indexI < Pc.length; indexI++) { - for (indexJ = Pc[indexI][0]; indexJ <= Pc[indexI][1]; indexJ++) { - UnicodeLetterPc[indexJ] = true; - } -} - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; -for (index = 0; index <= 65535; index++) { - if ((UnicodeLetterLu[index] === undefined) && (UnicodeLetterLl[index] === undefined) && (UnicodeLetterLt[index] === undefined) && (UnicodeLetterLm[index] === undefined) && (UnicodeLetterLo[index] === undefined) && (UnicodeLetterNl[index] === undefined) && (UnicodeLetterMn[index] === undefined) && (UnicodeLetterMc[index] === undefined) && (UnicodeLetterNd[index] === undefined) && (UnicodeLetterPc[index] === undefined) && (index !== 0x0024) && (index !== 0x005F)) { - try { - var hex = decimalToHexString(index); - var identifier = "$\\u" + hex + "1"; - eval(identifier + " = 1"); - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; - } catch (e) { - } - count++; - } -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_218/S7.6_A5.3_T2.js b/tests/ES3/Unicode/Unicode_218/S7.6_A5.3_T2.js deleted file mode 100644 index 15e2a247a..000000000 --- a/tests/ES3/Unicode/Unicode_218/S7.6_A5.3_T2.js +++ /dev/null @@ -1,155 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A5.3_T2; - * @section: 7.6, 6; - * @assertion: If a UnicodeEscapeSequence put a character into an identifier that would otherwise be illegal, throw SyntaxError; - * @description: Complex test with eval; -*/ - -//CHECK -Lu = [[0x0041, 0x005A], [0x00C0, 0x00D6], [0x00D8, 0x00DE], [0x0100, 0x0100], [0x0102, 0x0102], [0x0104, 0x0104], [0x0106, 0x0106], [0x0108, 0x0108], [0x010A, 0x010A], [0x010C, 0x010C], [0x010E, 0x010E], [0x0110, 0x0110], [0x0112, 0x0112], [0x0114, 0x0114], [0x0116, 0x0116], [0x0118, 0x0118], [0x011A, 0x011A], [0x011C, 0x011C], [0x011E, 0x011E], [0x0120, 0x0120], [0x0122, 0x0122], [0x0124, 0x0124], [0x0126, 0x0126], [0x0128, 0x0128], [0x012A, 0x012A], [0x012C, 0x012C], [0x012E, 0x012E], [0x0130, 0x0130], [0x0132, 0x0132], [0x0134, 0x0134], [0x0136, 0x0136], [0x0139, 0x0139], [0x013B, 0x013B], [0x013D, 0x013D], [0x013F, 0x013F], [0x0141, 0x0141], [0x0143, 0x0143], [0x0145, 0x0145], [0x0147, 0x0147], [0x014A, 0x014A], [0x014C, 0x014C], [0x014E, 0x014E], [0x0150, 0x0150], [0x0152, 0x0152], [0x0154, 0x0154], [0x0156, 0x0156], [0x0158, 0x0158], [0x015A, 0x015A], [0x015C, 0x015C], [0x015E, 0x015E], [0x0160, 0x0160], [0x0162, 0x0162], [0x0164, 0x0164], [0x0166, 0x0166], [0x0168, 0x0168], [0x016A, 0x016A], [0x016C, 0x016C], [0x016E, 0x016E], [0x0170, 0x0170], [0x0172, 0x0172], [0x0174, 0x0174], [0x0176, 0x0176], [0x0178, 0x0179], [0x017B, 0x017B], [0x017D, 0x017D], [0x0181, 0x0182], [0x0184, 0x0184], [0x0186, 0x0187], [0x0189, 0x018B], [0x018E, 0x0191], [0x0193, 0x0194], [0x0196, 0x0198], [0x019C, 0x019D], [0x019F, 0x01A0], [0x01A2, 0x01A2], [0x01A4, 0x01A4], [0x01A6, 0x01A7], [0x01A9, 0x01A9], [0x01AC, 0x01AC], [0x01AE, 0x01AF], [0x01B1, 0x01B3], [0x01B5, 0x01B5], [0x01B7, 0x01B8], [0x01BC, 0x01BC], [0x01C4, 0x01C4], [0x01C7, 0x01C7], [0x01CA, 0x01CA], [0x01CD, 0x01CD], [0x01CF, 0x01CF], [0x01D1, 0x01D1], [0x01D3, 0x01D3], [0x01D5, 0x01D5], [0x01D7, 0x01D7], [0x01D9, 0x01D9], [0x01DB, 0x01DB], [0x01DE, 0x01DE], [0x01E0, 0x01E0], [0x01E2, 0x01E2], [0x01E4, 0x01E4], [0x01E6, 0x01E6], [0x01E8, 0x01E8], [0x01EA, 0x01EA], [0x01EC, 0x01EC], [0x01EE, 0x01EE], [0x01F1, 0x01F1], [0x01F4, 0x01F4], [0x01FA, 0x01FA], [0x01FC, 0x01FC], [0x01FE, 0x01FE], [0x0200, 0x0200], [0x0202, 0x0202], [0x0204, 0x0204], [0x0206, 0x0206], [0x0208, 0x0208], [0x020A, 0x020A], [0x020C, 0x020C], [0x020E, 0x020E], [0x0210, 0x0210], [0x0212, 0x0212], [0x0214, 0x0214], [0x0216, 0x0216], [0x0386, 0x0386], [0x0388, 0x038A], [0x038C, 0x038C], [0x038E, 0x038F], [0x0391, 0x03A1], [0x03A3, 0x03AB], [0x03D2, 0x03D4], [0x03DA, 0x03DA], [0x03DC, 0x03DC], [0x03DE, 0x03DE], [0x03E0, 0x03E0], [0x03E2, 0x03E2], [0x03E4, 0x03E4], [0x03E6, 0x03E6], [0x03E8, 0x03E8], [0x03EA, 0x03EA], [0x03EC, 0x03EC], [0x03EE, 0x03EE], [0x0401, 0x040C], [0x040E, 0x042F], [0x0460, 0x0460], [0x0462, 0x0462], [0x0464, 0x0464], [0x0466, 0x0466], [0x0468, 0x0468], [0x046A, 0x046A], [0x046C, 0x046C], [0x046E, 0x046E], [0x0470, 0x0470], [0x0472, 0x0472], [0x0474, 0x0474], [0x0476, 0x0476], [0x0478, 0x0478], [0x047A, 0x047A], [0x047C, 0x047C], [0x047E, 0x047E], [0x0480, 0x0480], [0x0490, 0x0490], [0x0492, 0x0492], [0x0494, 0x0494], [0x0496, 0x0496], [0x0498, 0x0498], [0x049A, 0x049A], [0x049C, 0x049C], [0x049E, 0x049E], [0x04A0, 0x04A0], [0x04A2, 0x04A2], [0x04A4, 0x04A4], [0x04A6, 0x04A6], [0x04A8, 0x04A8], [0x04AA, 0x04AA], [0x04AC, 0x04AC], [0x04AE, 0x04AE], [0x04B0, 0x04B0], [0x04B2, 0x04B2], [0x04B4, 0x04B4], [0x04B6, 0x04B6], [0x04B8, 0x04B8], [0x04BA, 0x04BA], [0x04BC, 0x04BC], [0x04BE, 0x04BE], [0x04C1, 0x04C1], [0x04C3, 0x04C3], [0x04C7, 0x04C7], [0x04CB, 0x04CB], [0x04D0, 0x04D0], [0x04D2, 0x04D2], [0x04D4, 0x04D4], [0x04D6, 0x04D6], [0x04D8, 0x04D8], [0x04DA, 0x04DA], [0x04DC, 0x04DC], [0x04DE, 0x04DE], [0x04E0, 0x04E0], [0x04E2, 0x04E2], [0x04E4, 0x04E4], [0x04E6, 0x04E6], [0x04E8, 0x04E8], [0x04EA, 0x04EA], [0x04EE, 0x04EE], [0x04F0, 0x04F0], [0x04F2, 0x04F2], [0x04F4, 0x04F4], [0x04F8, 0x04F8], [0x0531, 0x0556], [0x10A0, 0x10C5], [0x1E00, 0x1E00], [0x1E02, 0x1E02], [0x1E04, 0x1E04], [0x1E06, 0x1E06], [0x1E08, 0x1E08], [0x1E0A, 0x1E0A], [0x1E0C, 0x1E0C], [0x1E0E, 0x1E0E], [0x1E10, 0x1E10], [0x1E12, 0x1E12], [0x1E14, 0x1E14], [0x1E16, 0x1E16], [0x1E18, 0x1E18], [0x1E1A, 0x1E1A], [0x1E1C, 0x1E1C], [0x1E1E, 0x1E1E], [0x1E20, 0x1E20], [0x1E22, 0x1E22], [0x1E24, 0x1E24], [0x1E26, 0x1E26], [0x1E28, 0x1E28], [0x1E2A, 0x1E2A], [0x1E2C, 0x1E2C], [0x1E2E, 0x1E2E], [0x1E30, 0x1E30], [0x1E32, 0x1E32], [0x1E34, 0x1E34], [0x1E36, 0x1E36], [0x1E38, 0x1E38], [0x1E3A, 0x1E3A], [0x1E3C, 0x1E3C], [0x1E3E, 0x1E3E], [0x1E40, 0x1E40], [0x1E42, 0x1E42], [0x1E44, 0x1E44], [0x1E46, 0x1E46], [0x1E48, 0x1E48], [0x1E4A, 0x1E4A], [0x1E4C, 0x1E4C], [0x1E4E, 0x1E4E], [0x1E50, 0x1E50], [0x1E52, 0x1E52], [0x1E54, 0x1E54], [0x1E56, 0x1E56], [0x1E58, 0x1E58], [0x1E5A, 0x1E5A], [0x1E5C, 0x1E5C], [0x1E5E, 0x1E5E], [0x1E60, 0x1E60], [0x1E62, 0x1E62], [0x1E64, 0x1E64], [0x1E66, 0x1E66], [0x1E68, 0x1E68], [0x1E6A, 0x1E6A], [0x1E6C, 0x1E6C], [0x1E6E, 0x1E6E], [0x1E70, 0x1E70], [0x1E72, 0x1E72], [0x1E74, 0x1E74], [0x1E76, 0x1E76], [0x1E78, 0x1E78], [0x1E7A, 0x1E7A], [0x1E7C, 0x1E7C], [0x1E7E, 0x1E7E], [0x1E80, 0x1E80], [0x1E82, 0x1E82], [0x1E84, 0x1E84], [0x1E86, 0x1E86], [0x1E88, 0x1E88], [0x1E8A, 0x1E8A], [0x1E8C, 0x1E8C], [0x1E8E, 0x1E8E], [0x1E90, 0x1E90], [0x1E92, 0x1E92], [0x1E94, 0x1E94], [0x1EA0, 0x1EA0], [0x1EA2, 0x1EA2], [0x1EA4, 0x1EA4], [0x1EA6, 0x1EA6], [0x1EA8, 0x1EA8], [0x1EAA, 0x1EAA], [0x1EAC, 0x1EAC], [0x1EAE, 0x1EAE], [0x1EB0, 0x1EB0], [0x1EB2, 0x1EB2], [0x1EB4, 0x1EB4], [0x1EB6, 0x1EB6], [0x1EB8, 0x1EB8], [0x1EBA, 0x1EBA], [0x1EBC, 0x1EBC], [0x1EBE, 0x1EBE], [0x1EC0, 0x1EC0], [0x1EC2, 0x1EC2], [0x1EC4, 0x1EC4], [0x1EC6, 0x1EC6], [0x1EC8, 0x1EC8], [0x1ECA, 0x1ECA], [0x1ECC, 0x1ECC], [0x1ECE, 0x1ECE], [0x1ED0, 0x1ED0], [0x1ED2, 0x1ED2], [0x1ED4, 0x1ED4], [0x1ED6, 0x1ED6], [0x1ED8, 0x1ED8], [0x1EDA, 0x1EDA], [0x1EDC, 0x1EDC], [0x1EDE, 0x1EDE], [0x1EE0, 0x1EE0], [0x1EE2, 0x1EE2], [0x1EE4, 0x1EE4], [0x1EE6, 0x1EE6], [0x1EE8, 0x1EE8], [0x1EEA, 0x1EEA], [0x1EEC, 0x1EEC], [0x1EEE, 0x1EEE], [0x1EF0, 0x1EF0], [0x1EF2, 0x1EF2], [0x1EF4, 0x1EF4], [0x1EF6, 0x1EF6], [0x1EF8, 0x1EF8], [0x1F08, 0x1F0F], [0x1F18, 0x1F1D], [0x1F28, 0x1F2F], [0x1F38, 0x1F3F], [0x1F48, 0x1F4D], [0x1F59, 0x1F59], [0x1F5B, 0x1F5B], [0x1F5D, 0x1F5D], [0x1F5F, 0x1F5F], [0x1F68, 0x1F6F], [0x1F88, 0x1F8F], [0x1F98, 0x1F9F], [0x1FA8, 0x1FAF], [0x1FB8, 0x1FBC], [0x1FC8, 0x1FCC], [0x1FD8, 0x1FDB], [0x1FE8, 0x1FEC], [0x1FF8, 0x1FFC], [0x2102, 0x2102], [0x2107, 0x2107], [0x210B, 0x210D], [0x2110, 0x2112], [0x2115, 0x2115], [0x2119, 0x211D], [0x2124, 0x2124], [0x2126, 0x2126], [0x2128, 0x2128], [0x212A, 0x212D], [0x2130, 0x2131], [0x2133, 0x2133], [0xFF21, 0xFF3A]]; -Ll = [[0x0061, 0x007A], [0x00AA, 0x00AA], [0x00B5, 0x00B5], [0x00BA, 0x00BA], [0x00DF, 0x00F6], [0x00F8, 0x00FF], [0x0101, 0x0101], [0x0103, 0x0103], [0x0105, 0x0105], [0x0107, 0x0107], [0x0109, 0x0109], [0x010B, 0x010B], [0x010D, 0x010D], [0x010F, 0x010F], [0x0111, 0x0111], [0x0113, 0x0113], [0x0115, 0x0115], [0x0117, 0x0117], [0x0119, 0x0119], [0x011B, 0x011B], [0x011D, 0x011D], [0x011F, 0x011F], [0x0121, 0x0121], [0x0123, 0x0123], [0x0125, 0x0125], [0x0127, 0x0127], [0x0129, 0x0129], [0x012B, 0x012B], [0x012D, 0x012D], [0x012F, 0x012F], [0x0131, 0x0131], [0x0133, 0x0133], [0x0135, 0x0135], [0x0137, 0x0138], [0x013A, 0x013A], [0x013C, 0x013C], [0x013E, 0x013E], [0x0140, 0x0140], [0x0142, 0x0142], [0x0144, 0x0144], [0x0146, 0x0146], [0x0148, 0x0149], [0x014B, 0x014B], [0x014D, 0x014D], [0x014F, 0x014F], [0x0151, 0x0151], [0x0153, 0x0153], [0x0155, 0x0155], [0x0157, 0x0157], [0x0159, 0x0159], [0x015B, 0x015B], [0x015D, 0x015D], [0x015F, 0x015F], [0x0161, 0x0161], [0x0163, 0x0163], [0x0165, 0x0165], [0x0167, 0x0167], [0x0169, 0x0169], [0x016B, 0x016B], [0x016D, 0x016D], [0x016F, 0x016F], [0x0171, 0x0171], [0x0173, 0x0173], [0x0175, 0x0175], [0x0177, 0x0177], [0x017A, 0x017A], [0x017C, 0x017C], [0x017E, 0x0180], [0x0183, 0x0183], [0x0185, 0x0185], [0x0188, 0x0188], [0x018C, 0x018D], [0x0192, 0x0192], [0x0195, 0x0195], [0x0199, 0x019B], [0x019E, 0x019E], [0x01A1, 0x01A1], [0x01A3, 0x01A3], [0x01A5, 0x01A5], [0x01A8, 0x01A8], [0x01AB, 0x01AB], [0x01AD, 0x01AD], [0x01B0, 0x01B0], [0x01B4, 0x01B4], [0x01B6, 0x01B6], [0x01B9, 0x01BA], [0x01BD, 0x01BD], [0x01C6, 0x01C6], [0x01C9, 0x01C9], [0x01CC, 0x01CC], [0x01CE, 0x01CE], [0x01D0, 0x01D0], [0x01D2, 0x01D2], [0x01D4, 0x01D4], [0x01D6, 0x01D6], [0x01D8, 0x01D8], [0x01DA, 0x01DA], [0x01DC, 0x01DD], [0x01DF, 0x01DF], [0x01E1, 0x01E1], [0x01E3, 0x01E3], [0x01E5, 0x01E5], [0x01E7, 0x01E7], [0x01E9, 0x01E9], [0x01EB, 0x01EB], [0x01ED, 0x01ED], [0x01EF, 0x01F0], [0x01F3, 0x01F3], [0x01F5, 0x01F5], [0x01FB, 0x01FB], [0x01FD, 0x01FD], [0x01FF, 0x01FF], [0x0201, 0x0201], [0x0203, 0x0203], [0x0205, 0x0205], [0x0207, 0x0207], [0x0209, 0x0209], [0x020B, 0x020B], [0x020D, 0x020D], [0x020F, 0x020F], [0x0211, 0x0211], [0x0213, 0x0213], [0x0215, 0x0215], [0x0217, 0x0217], [0x0250, 0x02A8], [0x0390, 0x0390], [0x03AC, 0x03CE], [0x03D0, 0x03D1], [0x03D5, 0x03D6], [0x03E3, 0x03E3], [0x03E5, 0x03E5], [0x03E7, 0x03E7], [0x03E9, 0x03E9], [0x03EB, 0x03EB], [0x03ED, 0x03ED], [0x03EF, 0x03F2], [0x0430, 0x044F], [0x0451, 0x045C], [0x045E, 0x045F], [0x0461, 0x0461], [0x0463, 0x0463], [0x0465, 0x0465], [0x0467, 0x0467], [0x0469, 0x0469], [0x046B, 0x046B], [0x046D, 0x046D], [0x046F, 0x046F], [0x0471, 0x0471], [0x0473, 0x0473], [0x0475, 0x0475], [0x0477, 0x0477], [0x0479, 0x0479], [0x047B, 0x047B], [0x047D, 0x047D], [0x047F, 0x047F], [0x0481, 0x0481], [0x0491, 0x0491], [0x0493, 0x0493], [0x0495, 0x0495], [0x0497, 0x0497], [0x0499, 0x0499], [0x049B, 0x049B], [0x049D, 0x049D], [0x049F, 0x049F], [0x04A1, 0x04A1], [0x04A3, 0x04A3], [0x04A5, 0x04A5], [0x04A7, 0x04A7], [0x04A9, 0x04A9], [0x04AB, 0x04AB], [0x04AD, 0x04AD], [0x04AF, 0x04AF], [0x04B1, 0x04B1], [0x04B3, 0x04B3], [0x04B5, 0x04B5], [0x04B7, 0x04B7], [0x04B9, 0x04B9], [0x04BB, 0x04BB], [0x04BD, 0x04BD], [0x04BF, 0x04BF], [0x04C2, 0x04C2], [0x04C4, 0x04C4], [0x04C8, 0x04C8], [0x04CC, 0x04CC], [0x04D1, 0x04D1], [0x04D3, 0x04D3], [0x04D5, 0x04D5], [0x04D7, 0x04D7], [0x04D9, 0x04D9], [0x04DB, 0x04DB], [0x04DD, 0x04DD], [0x04DF, 0x04DF], [0x04E1, 0x04E1], [0x04E3, 0x04E3], [0x04E5, 0x04E5], [0x04E7, 0x04E7], [0x04E9, 0x04E9], [0x04EB, 0x04EB], [0x04EF, 0x04EF], [0x04F1, 0x04F1], [0x04F3, 0x04F3], [0x04F5, 0x04F5], [0x04F9, 0x04F9], [0x0561, 0x0587], [0x10D0, 0x10F6], [0x1E01, 0x1E01], [0x1E03, 0x1E03], [0x1E05, 0x1E05], [0x1E07, 0x1E07], [0x1E09, 0x1E09], [0x1E0B, 0x1E0B], [0x1E0D, 0x1E0D], [0x1E0F, 0x1E0F], [0x1E11, 0x1E11], [0x1E13, 0x1E13], [0x1E15, 0x1E15], [0x1E17, 0x1E17], [0x1E19, 0x1E19], [0x1E1B, 0x1E1B], [0x1E1D, 0x1E1D], [0x1E1F, 0x1E1F], [0x1E21, 0x1E21], [0x1E23, 0x1E23], [0x1E25, 0x1E25], [0x1E27, 0x1E27], [0x1E29, 0x1E29], [0x1E2B, 0x1E2B], [0x1E2D, 0x1E2D], [0x1E2F, 0x1E2F], [0x1E31, 0x1E31], [0x1E33, 0x1E33], [0x1E35, 0x1E35], [0x1E37, 0x1E37], [0x1E39, 0x1E39], [0x1E3B, 0x1E3B], [0x1E3D, 0x1E3D], [0x1E3F, 0x1E3F], [0x1E41, 0x1E41], [0x1E43, 0x1E43], [0x1E45, 0x1E45], [0x1E47, 0x1E47], [0x1E49, 0x1E49], [0x1E4B, 0x1E4B], [0x1E4D, 0x1E4D], [0x1E4F, 0x1E4F], [0x1E51, 0x1E51], [0x1E53, 0x1E53], [0x1E55, 0x1E55], [0x1E57, 0x1E57], [0x1E59, 0x1E59], [0x1E5B, 0x1E5B], [0x1E5D, 0x1E5D], [0x1E5F, 0x1E5F], [0x1E61, 0x1E61], [0x1E63, 0x1E63], [0x1E65, 0x1E65], [0x1E67, 0x1E67], [0x1E69, 0x1E69], [0x1E6B, 0x1E6B], [0x1E6D, 0x1E6D], [0x1E6F, 0x1E6F], [0x1E71, 0x1E71], [0x1E73, 0x1E73], [0x1E75, 0x1E75], [0x1E77, 0x1E77], [0x1E79, 0x1E79], [0x1E7B, 0x1E7B], [0x1E7D, 0x1E7D], [0x1E7F, 0x1E7F], [0x1E81, 0x1E81], [0x1E83, 0x1E83], [0x1E85, 0x1E85], [0x1E87, 0x1E87], [0x1E89, 0x1E89], [0x1E8B, 0x1E8B], [0x1E8D, 0x1E8D], [0x1E8F, 0x1E8F], [0x1E91, 0x1E91], [0x1E93, 0x1E93], [0x1E95, 0x1E9B], [0x1EA1, 0x1EA1], [0x1EA3, 0x1EA3], [0x1EA5, 0x1EA5], [0x1EA7, 0x1EA7], [0x1EA9, 0x1EA9], [0x1EAB, 0x1EAB], [0x1EAD, 0x1EAD], [0x1EAF, 0x1EAF], [0x1EB1, 0x1EB1], [0x1EB3, 0x1EB3], [0x1EB5, 0x1EB5], [0x1EB7, 0x1EB7], [0x1EB9, 0x1EB9], [0x1EBB, 0x1EBB], [0x1EBD, 0x1EBD], [0x1EBF, 0x1EBF], [0x1EC1, 0x1EC1], [0x1EC3, 0x1EC3], [0x1EC5, 0x1EC5], [0x1EC7, 0x1EC7], [0x1EC9, 0x1EC9], [0x1ECB, 0x1ECB], [0x1ECD, 0x1ECD], [0x1ECF, 0x1ECF], [0x1ED1, 0x1ED1], [0x1ED3, 0x1ED3], [0x1ED5, 0x1ED5], [0x1ED7, 0x1ED7], [0x1ED9, 0x1ED9], [0x1EDB, 0x1EDB], [0x1EDD, 0x1EDD], [0x1EDF, 0x1EDF], [0x1EE1, 0x1EE1], [0x1EE3, 0x1EE3], [0x1EE5, 0x1EE5], [0x1EE7, 0x1EE7], [0x1EE9, 0x1EE9], [0x1EEB, 0x1EEB], [0x1EED, 0x1EED], [0x1EEF, 0x1EEF], [0x1EF1, 0x1EF1], [0x1EF3, 0x1EF3], [0x1EF5, 0x1EF5], [0x1EF7, 0x1EF7], [0x1EF9, 0x1EF9], [0x1F00, 0x1F07], [0x1F10, 0x1F15], [0x1F20, 0x1F27], [0x1F30, 0x1F37], [0x1F40, 0x1F45], [0x1F50, 0x1F57], [0x1F60, 0x1F67], [0x1F70, 0x1F7D], [0x1F80, 0x1F87], [0x1F90, 0x1F97], [0x1FA0, 0x1FA7], [0x1FB0, 0x1FB4], [0x1FB6, 0x1FB7], [0x1FBE, 0x1FBE], [0x1FC2, 0x1FC4], [0x1FC6, 0x1FC7], [0x1FD0, 0x1FD3], [0x1FD6, 0x1FD7], [0x1FE0, 0x1FE7], [0x1FF2, 0x1FF4], [0x1FF6, 0x1FF7], [0x207F, 0x207F], [0x210A, 0x210A], [0x210E, 0x210F], [0x2113, 0x2113], [0x2118, 0x2118], [0x212E, 0x212F], [0x2134, 0x2134], [0xFB00, 0xFB06], [0xFB13, 0xFB17], [0xFF41, 0xFF5A]]; -Lt = [[0x01C5, 0x01C5], [0x01C8, 0x01C8], [0x01CB, 0x01CB], [0x01F2, 0x01F2]]; -Lm = [[0x02B0, 0x02B8], [0x02BB, 0x02C1], [0x02D0, 0x02D1], [0x02E0, 0x02E4], [0x037A, 0x037A], [0x0559, 0x0559], [0x0640, 0x0640], [0x06E5, 0x06E6], [0x0E46, 0x0E46], [0x0EC6, 0x0EC6], [0x3005, 0x3005], [0x3031, 0x3035], [0x309D, 0x309E], [0x30FC, 0x30FE], [0xFF70, 0xFF70], [0xFF9E, 0xFF9F]]; -Lo = [[0x01AA, 0x01AA], [0x01BB, 0x01BB], [0x01BE, 0x01C3], [0x03F3, 0x03F3], [0x04C0, 0x04C0], [0x05D0, 0x05EA], [0x05F0, 0x05F2], [0x0621, 0x063A], [0x0641, 0x064A], [0x0671, 0x06B7], [0x06BA, 0x06BE], [0x06C0, 0x06CE], [0x06D0, 0x06D3], [0x06D5, 0x06D5], [0x0905, 0x0939], [0x093D, 0x093D], [0x0950, 0x0950], [0x0958, 0x0961], [0x0985, 0x098C], [0x098F, 0x0990], [0x0993, 0x09A8], [0x09AA, 0x09B0], [0x09B2, 0x09B2], [0x09B6, 0x09B9], [0x09DC, 0x09DD], [0x09DF, 0x09E1], [0x09F0, 0x09F1], [0x0A05, 0x0A0A], [0x0A0F, 0x0A10], [0x0A13, 0x0A28], [0x0A2A, 0x0A30], [0x0A32, 0x0A33], [0x0A35, 0x0A36], [0x0A38, 0x0A39], [0x0A59, 0x0A5C], [0x0A5E, 0x0A5E], [0x0A72, 0x0A74], [0x0A85, 0x0A8B], [0x0A8D, 0x0A8D], [0x0A8F, 0x0A91], [0x0A93, 0x0AA8], [0x0AAA, 0x0AB0], [0x0AB2, 0x0AB3], [0x0AB5, 0x0AB9], [0x0ABD, 0x0ABD], [0x0AD0, 0x0AD0], [0x0AE0, 0x0AE0], [0x0B05, 0x0B0C], [0x0B0F, 0x0B10], [0x0B13, 0x0B28], [0x0B2A, 0x0B30], [0x0B32, 0x0B33], [0x0B36, 0x0B39], [0x0B3D, 0x0B3D], [0x0B5C, 0x0B5D], [0x0B5F, 0x0B61], [0x0B85, 0x0B8A], [0x0B8E, 0x0B90], [0x0B92, 0x0B95], [0x0B99, 0x0B9A], [0x0B9C, 0x0B9C], [0x0B9E, 0x0B9F], [0x0BA3, 0x0BA4], [0x0BA8, 0x0BAA], [0x0BAE, 0x0BB5], [0x0BB7, 0x0BB9], [0x0C05, 0x0C0C], [0x0C0E, 0x0C10], [0x0C12, 0x0C28], [0x0C2A, 0x0C33], [0x0C35, 0x0C39], [0x0C60, 0x0C61], [0x0C85, 0x0C8C], [0x0C8E, 0x0C90], [0x0C92, 0x0CA8], [0x0CAA, 0x0CB3], [0x0CB5, 0x0CB9], [0x0CDE, 0x0CDE], [0x0CE0, 0x0CE1], [0x0D05, 0x0D0C], [0x0D0E, 0x0D10], [0x0D12, 0x0D28], [0x0D2A, 0x0D39], [0x0D60, 0x0D61], [0x0E01, 0x0E30], [0x0E32, 0x0E33], [0x0E40, 0x0E45], [0x0E81, 0x0E82], [0x0E84, 0x0E84], [0x0E87, 0x0E88], [0x0E8A, 0x0E8A], [0x0E8D, 0x0E8D], [0x0E94, 0x0E97], [0x0E99, 0x0E9F], [0x0EA1, 0x0EA3], [0x0EA5, 0x0EA5], [0x0EA7, 0x0EA7], [0x0EAA, 0x0EAB], [0x0EAD, 0x0EB0], [0x0EB2, 0x0EB3], [0x0EBD, 0x0EBD], [0x0EC0, 0x0EC4], [0x0EDC, 0x0EDD], [0x0F00, 0x0F00], [0x0F40, 0x0F47], [0x0F49, 0x0F69], [0x0F88, 0x0F8B], [0x1100, 0x1159], [0x115F, 0x11A2], [0x11A8, 0x11F9], [0x2135, 0x2138], [0x3006, 0x3006], [0x3041, 0x3094], [0x30A1, 0x30FA], [0x3105, 0x312C], [0x3131, 0x318E], [0x4E00, 0x9FA5], [0xAC00, 0xD7A3], [0xF900, 0xFA2D], [0xFB1F, 0xFB28], [0xFB2A, 0xFB36], [0xFB38, 0xFB3C], [0xFB3E, 0xFB3E], [0xFB40, 0xFB41], [0xFB43, 0xFB44], [0xFB46, 0xFBB1], [0xFBD3, 0xFD3D], [0xFD50, 0xFD8F], [0xFD92, 0xFDC7], [0xFDF0, 0xFDFB], [0xFE70, 0xFE72], [0xFE74, 0xFE74], [0xFE76, 0xFEFC], [0xFF66, 0xFF6F], [0xFF71, 0xFF9D], [0xFFA0, 0xFFBE], [0xFFC2, 0xFFC7], [0xFFCA, 0xFFCF], [0xFFD2, 0xFFD7], [0xFFDA, 0xFFDC]]; -Nl = [[0x2160, 0x2182], [0x3007, 0x3007], [0x3021, 0x3029]]; -Mn = [[0x0300, 0x0345], [0x0360, 0x0361], [0x0483, 0x0486], [0x0591, 0x05A1], [0x05A3, 0x05B9], [0x05BB, 0x05BD], [0x05BF, 0x05BF], [0x05C1, 0x05C2], [0x05C4, 0x05C4], [0x064B, 0x0652], [0x0670, 0x0670], [0x06D6, 0x06DC], [0x06DF, 0x06E4], [0x06E7, 0x06E8], [0x06EA, 0x06ED], [0x0901, 0x0902], [0x093C, 0x093C], [0x0941, 0x0948], [0x094D, 0x094D], [0x0951, 0x0954], [0x0962, 0x0963], [0x0981, 0x0981], [0x09BC, 0x09BC], [0x09C1, 0x09C4], [0x09CD, 0x09CD], [0x09E2, 0x09E3], [0x0A02, 0x0A02], [0x0A3C, 0x0A3C], [0x0A41, 0x0A42], [0x0A47, 0x0A48], [0x0A4B, 0x0A4D], [0x0A70, 0x0A71], [0x0A81, 0x0A82], [0x0ABC, 0x0ABC], [0x0AC1, 0x0AC5], [0x0AC7, 0x0AC8], [0x0ACD, 0x0ACD], [0x0B01, 0x0B01], [0x0B3C, 0x0B3C], [0x0B3F, 0x0B3F], [0x0B41, 0x0B43], [0x0B4D, 0x0B4D], [0x0B56, 0x0B56], [0x0B82, 0x0B82], [0x0BC0, 0x0BC0], [0x0BCD, 0x0BCD], [0x0C3E, 0x0C40], [0x0C46, 0x0C48], [0x0C4A, 0x0C4D], [0x0C55, 0x0C56], [0x0CBF, 0x0CBF], [0x0CC6, 0x0CC6], [0x0CCC, 0x0CCD], [0x0D41, 0x0D43], [0x0D4D, 0x0D4D], [0x0E31, 0x0E31], [0x0E34, 0x0E3A], [0x0E47, 0x0E4E], [0x0EB1, 0x0EB1], [0x0EB4, 0x0EB9], [0x0EBB, 0x0EBC], [0x0EC8, 0x0ECD], [0x0F18, 0x0F19], [0x0F35, 0x0F35], [0x0F37, 0x0F37], [0x0F39, 0x0F39], [0x0F71, 0x0F7E], [0x0F80, 0x0F84], [0x0F86, 0x0F87], [0x0F90, 0x0F95], [0x0F97, 0x0F97], [0x0F99, 0x0FAD], [0x0FB1, 0x0FB7], [0x0FB9, 0x0FB9], [0x20D0, 0x20DC], [0x20E1, 0x20E1], [0x302A, 0x302F], [0x3099, 0x309A], [0xFB1E, 0xFB1E], [0xFE20, 0xFE23]]; -Mc = [[0x0903, 0x0903], [0x093E, 0x0940], [0x0949, 0x094C], [0x0982, 0x0983], [0x09BE, 0x09C0], [0x09C7, 0x09C8], [0x09CB, 0x09CC], [0x09D7, 0x09D7], [0x0A3E, 0x0A40], [0x0A83, 0x0A83], [0x0ABE, 0x0AC0], [0x0AC9, 0x0AC9], [0x0ACB, 0x0ACC], [0x0B02, 0x0B03], [0x0B3E, 0x0B3E], [0x0B40, 0x0B40], [0x0B47, 0x0B48], [0x0B4B, 0x0B4C], [0x0B57, 0x0B57], [0x0B83, 0x0B83], [0x0BBE, 0x0BBF], [0x0BC1, 0x0BC2], [0x0BC6, 0x0BC8], [0x0BCA, 0x0BCC], [0x0BD7, 0x0BD7], [0x0C01, 0x0C03], [0x0C41, 0x0C44], [0x0C82, 0x0C83], [0x0CBE, 0x0CBE], [0x0CC0, 0x0CC4], [0x0CC7, 0x0CC8], [0x0CCA, 0x0CCB], [0x0CD5, 0x0CD6], [0x0D02, 0x0D03], [0x0D3E, 0x0D40], [0x0D46, 0x0D48], [0x0D4A, 0x0D4C], [0x0D57, 0x0D57], [0x0F3E, 0x0F3F], [0x0F7F, 0x0F7F]]; -Nd = [[0x0030, 0x0039], [0x0660, 0x0669], [0x06F0, 0x06F9], [0x0966, 0x096F], [0x09E6, 0x09EF], [0x0A66, 0x0A6F], [0x0AE6, 0x0AEF], [0x0B66, 0x0B6F], [0x0BE7, 0x0BEF], [0x0C66, 0x0C6F], [0x0CE6, 0x0CEF], [0x0D66, 0x0D6F], [0x0E50, 0x0E59], [0x0ED0, 0x0ED9], [0x0F20, 0x0F29], [0xFF10, 0xFF19]]; -Pc = [[0x005F, 0x005F], [0x203F, 0x2040], [0x30FB, 0x30FB], [0xFE33, 0xFE34], [0xFE4D, 0xFE4F], [0xFF3F, 0xFF3F], [0xFF65, 0xFF65]]; - -UnicodeLetterLu = []; -UnicodeLetterLl = []; -UnicodeLetterLt = []; -UnicodeLetterLm = []; -UnicodeLetterLo = []; -UnicodeLetterNl = []; -UnicodeLetterMn = []; -UnicodeLetterMc = []; -UnicodeLetterNd = []; -UnicodeLetterPc = []; - -for (indexI = 0; indexI < Lu.length; indexI++) { - for (indexJ = Lu[indexI][0]; indexJ <= Lu[indexI][1]; indexJ++) { - UnicodeLetterLu[indexJ] = true; - } -} -for (indexI = 0; indexI < Ll.length; indexI++) { - for (indexJ = Ll[indexI][0]; indexJ <= Ll[indexI][1]; indexJ++) { - UnicodeLetterLl[indexJ] = true; - } -} -for (indexI = 0; indexI < Lt.length; indexI++) { - for (indexJ = Lt[indexI][0]; indexJ <= Lt[indexI][1]; indexJ++) { - UnicodeLetterLt[indexJ] = true; - } -} -for (indexI = 0; indexI < Lm.length; indexI++) { - for (indexJ = Lm[indexI][0]; indexJ <= Lm[indexI][1]; indexJ++) { - UnicodeLetterLm[indexJ] = true; - } -} -for (indexI = 0; indexI < Lo.length; indexI++) { - for (indexJ = Lo[indexI][0]; indexJ <= Lo[indexI][1]; indexJ++) { - UnicodeLetterLo[indexJ] = true; - } -} -for (indexI = 0; indexI < Nl.length; indexI++) { - for (indexJ = Nl[indexI][0]; indexJ <= Nl[indexI][1]; indexJ++) { - UnicodeLetterNl[indexJ] = true; - } -} -for (indexI = 0; indexI < Mn.length; indexI++) { - for (indexJ = Mn[indexI][0]; indexJ <= Mn[indexI][1]; indexJ++) { - UnicodeLetterMn[indexJ] = true; - } -} -for (indexI = 0; indexI < Mc.length; indexI++) { - for (indexJ = Mc[indexI][0]; indexJ <= Mc[indexI][1]; indexJ++) { - UnicodeLetterMc[indexJ] = true; - } -} -for (indexI = 0; indexI < Nd.length; indexI++) { - for (indexJ = Nd[indexI][0]; indexJ <= Nd[indexI][1]; indexJ++) { - UnicodeLetterNd[indexJ] = true; - } -} -for (indexI = 0; indexI < Pc.length; indexI++) { - for (indexJ = Pc[indexI][0]; indexJ <= Pc[indexI][1]; indexJ++) { - UnicodeLetterPc[indexJ] = true; - } -} - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; -for (index = 0; index <= 65535; index++) { - if ((UnicodeLetterLu[index] === undefined) && (UnicodeLetterLl[index] === undefined) && (UnicodeLetterLt[index] === undefined) && (UnicodeLetterLm[index] === undefined) && (UnicodeLetterLo[index] === undefined) && (UnicodeLetterNl[index] === undefined) && (UnicodeLetterMn[index] === undefined) && (UnicodeLetterMc[index] === undefined) && (UnicodeLetterNd[index] === undefined) && (UnicodeLetterPc[index] === undefined) && (index !== 0x0024) && (index !== 0x005F)) { - try { - var hex = decimalToHexString(index); - var identifier1 = "$" + String.fromCharCode(index) + "1"; - var identifier2 = "$\\u" + hex + "1"; - eval(identifier1 + " = 1"); - eval(identifier1 + " === " + identifier2); - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; - } catch (e) { - } - count++; - } -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_320/S15.10.2.12_A1_T6.js b/tests/ES3/Unicode/Unicode_320/S15.10.2.12_A1_T6.js deleted file mode 100644 index a6bdab8f4..000000000 --- a/tests/ES3/Unicode/Unicode_320/S15.10.2.12_A1_T6.js +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.10.2.12_A1_T6; - * @section: 15.10.2.12, 7.2, 7.3; - * @assertion: The production CharacterClassEscape :: s evaluates by returning the set of characters - * containing the characters that are on the right-hand side of the WhiteSpace (7.2) or LineTerminator (7.3) productions; - * @description: Complex test; -*/ - -//CHECK#1 -var regexp_s = /\s/; -Zs = [[0x1680, 0x1680], [0x2000, 0x200B], [0x202F, 0x202F], [0x205F, 0x205F], [0x3000, 0x3000]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Zs.length; indexI++) { - for (indexJ = Zs[indexI][0]; indexJ <= Zs[indexI][1]; indexJ++) { - var str = String.fromCharCode(indexJ); - var arr = regexp_s.exec(str); - if ((arr === null) || (arr[0] !== str)) { - var hex = decimalToHexString(indexJ); - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_320/S15.10.2.12_A2_T6.js b/tests/ES3/Unicode/Unicode_320/S15.10.2.12_A2_T6.js deleted file mode 100644 index 3e0c6a6ff..000000000 --- a/tests/ES3/Unicode/Unicode_320/S15.10.2.12_A2_T6.js +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.10.2.12_A2_T6; - * @section: 15.10.2.12, 7.2, 7.3; -* @assertion: The production CharacterClassEscape :: S evaluates by returning -* the set of all characters not included in the set returned by -* CharacterClassEscape :: s; - * @description: Complex test; -*/ - -//CHECK#1 -var regexp_S = /\S/; -Zs = [[0x1680, 0x1680], [0x2000, 0x200B], [0x202F, 0x202F], [0x205F, 0x205F], [0x3000, 0x3000]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Zs.length; indexI++) { - for (indexJ = Zs[indexI][0]; indexJ <= Zs[indexI][1]; indexJ++) { - if (regexp_S.exec(String.fromCharCode(indexJ)) !== null) { - var hex = decimalToHexString(indexJ); - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_320/S15.5.4.16_A1.js b/tests/ES3/Unicode/Unicode_320/S15.5.4.16_A1.js deleted file mode 100644 index 45a3f66b5..000000000 --- a/tests/ES3/Unicode/Unicode_320/S15.5.4.16_A1.js +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.16_A1; -* @section: 15.5.4.16; -* @assertion: The characters in UnicodeData.txt, but not in SpecialCasings.txt are converted one by one; -* @description: Complex test; -*/ - -//CHECK -LowerCase = [[0x0041, 0x0061], [0x0042, 0x0062], [0x0043, 0x0063], [0x0044, 0x0064], [0x0045, 0x0065], [0x0046, 0x0066], [0x0047, 0x0067], [0x0048, 0x0068], [0x004B, 0x006B], [0x004C, 0x006C], [0x004D, 0x006D], [0x004E, 0x006E], [0x004F, 0x006F], [0x0050, 0x0070], [0x0051, 0x0071], [0x0052, 0x0072], [0x0053, 0x0073], [0x0054, 0x0074], [0x0055, 0x0075], [0x0056, 0x0076], [0x0057, 0x0077], [0x0058, 0x0078], [0x0059, 0x0079], [0x005A, 0x007A], [0x00C0, 0x00E0], [0x00C1, 0x00E1], [0x00C2, 0x00E2], [0x00C3, 0x00E3], [0x00C4, 0x00E4], [0x00C5, 0x00E5], [0x00C6, 0x00E6], [0x00C7, 0x00E7], [0x00C8, 0x00E8], [0x00C9, 0x00E9], [0x00CA, 0x00EA], [0x00CB, 0x00EB], [0x00CE, 0x00EE], [0x00CF, 0x00EF], [0x00D0, 0x00F0], [0x00D1, 0x00F1], [0x00D2, 0x00F2], [0x00D3, 0x00F3], [0x00D4, 0x00F4], [0x00D5, 0x00F5], [0x00D6, 0x00F6], [0x00D8, 0x00F8], [0x00D9, 0x00F9], [0x00DA, 0x00FA], [0x00DB, 0x00FB], [0x00DC, 0x00FC], [0x00DD, 0x00FD], [0x00DE, 0x00FE], [0x0100, 0x0101], [0x0102, 0x0103], [0x0104, 0x0105], [0x0106, 0x0107], [0x0108, 0x0109], [0x010A, 0x010B], [0x010C, 0x010D], [0x010E, 0x010F], [0x0110, 0x0111], [0x0112, 0x0113], [0x0114, 0x0115], [0x0116, 0x0117], [0x0118, 0x0119], [0x011A, 0x011B], [0x011C, 0x011D], [0x011E, 0x011F], [0x0120, 0x0121], [0x0122, 0x0123], [0x0124, 0x0125], [0x0126, 0x0127], [0x012A, 0x012B], [0x012C, 0x012D], [0x0132, 0x0133], [0x0134, 0x0135], [0x0136, 0x0137], [0x0139, 0x013A], [0x013B, 0x013C], [0x013D, 0x013E], [0x013F, 0x0140], [0x0141, 0x0142], [0x0143, 0x0144], [0x0145, 0x0146], [0x0147, 0x0148], [0x014A, 0x014B], [0x014C, 0x014D], [0x014E, 0x014F], [0x0150, 0x0151], [0x0152, 0x0153], [0x0154, 0x0155], [0x0156, 0x0157], [0x0158, 0x0159], [0x015A, 0x015B], [0x015C, 0x015D], [0x015E, 0x015F], [0x0160, 0x0161], [0x0162, 0x0163], [0x0164, 0x0165], [0x0166, 0x0167], [0x0168, 0x0169], [0x016A, 0x016B], [0x016C, 0x016D], [0x016E, 0x016F], [0x0170, 0x0171], [0x0172, 0x0173], [0x0174, 0x0175], [0x0176, 0x0177], [0x0178, 0x00FF], [0x0179, 0x017A], [0x017B, 0x017C], [0x017D, 0x017E], [0x0181, 0x0253], [0x0182, 0x0183], [0x0184, 0x0185], [0x0186, 0x0254], [0x0187, 0x0188], [0x0189, 0x0256], [0x018A, 0x0257], [0x018B, 0x018C], [0x018E, 0x01DD], [0x018F, 0x0259], [0x0190, 0x025B], [0x0191, 0x0192], [0x0193, 0x0260], [0x0194, 0x0263], [0x0196, 0x0269], [0x0197, 0x0268], [0x0198, 0x0199], [0x019C, 0x026F], [0x019D, 0x0272], [0x019F, 0x0275], [0x01A0, 0x01A1], [0x01A2, 0x01A3], [0x01A4, 0x01A5], [0x01A6, 0x0280], [0x01A7, 0x01A8], [0x01A9, 0x0283], [0x01AC, 0x01AD], [0x01AE, 0x0288], [0x01AF, 0x01B0], [0x01B1, 0x028A], [0x01B2, 0x028B], [0x01B3, 0x01B4], [0x01B5, 0x01B6], [0x01B7, 0x0292], [0x01B8, 0x01B9], [0x01BC, 0x01BD], [0x01C4, 0x01C6], [0x01C5, 0x01C6], [0x01C7, 0x01C9], [0x01C8, 0x01C9], [0x01CA, 0x01CC], [0x01CB, 0x01CC], [0x01CD, 0x01CE], [0x01CF, 0x01D0], [0x01D1, 0x01D2], [0x01D3, 0x01D4], [0x01D5, 0x01D6], [0x01D7, 0x01D8], [0x01D9, 0x01DA], [0x01DB, 0x01DC], [0x01DE, 0x01DF], [0x01E0, 0x01E1], [0x01E2, 0x01E3], [0x01E4, 0x01E5], [0x01E6, 0x01E7], [0x01E8, 0x01E9], [0x01EA, 0x01EB], [0x01EC, 0x01ED], [0x01EE, 0x01EF], [0x01F1, 0x01F3], [0x01F2, 0x01F3], [0x01F4, 0x01F5], [0x01F6, 0x0195], [0x01F7, 0x01BF], [0x01F8, 0x01F9], [0x01FA, 0x01FB], [0x01FC, 0x01FD], [0x01FE, 0x01FF], [0x0200, 0x0201], [0x0202, 0x0203], [0x0204, 0x0205], [0x0206, 0x0207], [0x0208, 0x0209], [0x020A, 0x020B], [0x020C, 0x020D], [0x020E, 0x020F], [0x0210, 0x0211], [0x0212, 0x0213], [0x0214, 0x0215], [0x0216, 0x0217], [0x0218, 0x0219], [0x021A, 0x021B], [0x021C, 0x021D], [0x021E, 0x021F], [0x0220, 0x019E], [0x0222, 0x0223], [0x0224, 0x0225], [0x0226, 0x0227], [0x0228, 0x0229], [0x022A, 0x022B], [0x022C, 0x022D], [0x022E, 0x022F], [0x0230, 0x0231], [0x0232, 0x0233], [0x0386, 0x03AC], [0x0388, 0x03AD], [0x0389, 0x03AE], [0x038A, 0x03AF], [0x038C, 0x03CC], [0x038E, 0x03CD], [0x038F, 0x03CE], [0x0391, 0x03B1], [0x0392, 0x03B2], [0x0393, 0x03B3], [0x0394, 0x03B4], [0x0395, 0x03B5], [0x0396, 0x03B6], [0x0397, 0x03B7], [0x0398, 0x03B8], [0x0399, 0x03B9], [0x039A, 0x03BA], [0x039B, 0x03BB], [0x039C, 0x03BC], [0x039D, 0x03BD], [0x039E, 0x03BE], [0x039F, 0x03BF], [0x03A0, 0x03C0], [0x03A1, 0x03C1], [0x03A4, 0x03C4], [0x03A5, 0x03C5], [0x03A6, 0x03C6], [0x03A7, 0x03C7], [0x03A8, 0x03C8], [0x03A9, 0x03C9], [0x03AA, 0x03CA], [0x03AB, 0x03CB], [0x03D8, 0x03D9], [0x03DA, 0x03DB], [0x03DC, 0x03DD], [0x03DE, 0x03DF], [0x03E0, 0x03E1], [0x03E2, 0x03E3], [0x03E4, 0x03E5], [0x03E6, 0x03E7], [0x03E8, 0x03E9], [0x03EA, 0x03EB], [0x03EC, 0x03ED], [0x03EE, 0x03EF], [0x03F4, 0x03B8], [0x0400, 0x0450], [0x0401, 0x0451], [0x0402, 0x0452], [0x0403, 0x0453], [0x0404, 0x0454], [0x0405, 0x0455], [0x0406, 0x0456], [0x0407, 0x0457], [0x0408, 0x0458], [0x0409, 0x0459], [0x040A, 0x045A], [0x040B, 0x045B], [0x040C, 0x045C], [0x040D, 0x045D], [0x040E, 0x045E], [0x040F, 0x045F], [0x0410, 0x0430], [0x0411, 0x0431], [0x0412, 0x0432], [0x0413, 0x0433], [0x0414, 0x0434], [0x0415, 0x0435], [0x0416, 0x0436], [0x0417, 0x0437], [0x0418, 0x0438], [0x0419, 0x0439], [0x041A, 0x043A], [0x041B, 0x043B], [0x041C, 0x043C], [0x041D, 0x043D], [0x041E, 0x043E], [0x041F, 0x043F], [0x0420, 0x0440], [0x0421, 0x0441], [0x0422, 0x0442], [0x0423, 0x0443], [0x0424, 0x0444], [0x0425, 0x0445], [0x0426, 0x0446], [0x0427, 0x0447], [0x0428, 0x0448], [0x0429, 0x0449], [0x042A, 0x044A], [0x042B, 0x044B], [0x042C, 0x044C], [0x042D, 0x044D], [0x042E, 0x044E], [0x042F, 0x044F], [0x0460, 0x0461], [0x0462, 0x0463], [0x0464, 0x0465], [0x0466, 0x0467], [0x0468, 0x0469], [0x046A, 0x046B], [0x046C, 0x046D], [0x046E, 0x046F], [0x0470, 0x0471], [0x0472, 0x0473], [0x0474, 0x0475], [0x0476, 0x0477], [0x0478, 0x0479], [0x047A, 0x047B], [0x047C, 0x047D], [0x047E, 0x047F], [0x0480, 0x0481], [0x048A, 0x048B], [0x048C, 0x048D], [0x048E, 0x048F], [0x0490, 0x0491], [0x0492, 0x0493], [0x0494, 0x0495], [0x0496, 0x0497], [0x0498, 0x0499], [0x049A, 0x049B], [0x049C, 0x049D], [0x049E, 0x049F], [0x04A0, 0x04A1], [0x04A2, 0x04A3], [0x04A4, 0x04A5], [0x04A6, 0x04A7], [0x04A8, 0x04A9], [0x04AA, 0x04AB], [0x04AC, 0x04AD], [0x04AE, 0x04AF], [0x04B0, 0x04B1], [0x04B2, 0x04B3], [0x04B4, 0x04B5], [0x04B6, 0x04B7], [0x04B8, 0x04B9], [0x04BA, 0x04BB], [0x04BC, 0x04BD], [0x04BE, 0x04BF], [0x04C1, 0x04C2], [0x04C3, 0x04C4], [0x04C5, 0x04C6], [0x04C7, 0x04C8], [0x04C9, 0x04CA], [0x04CB, 0x04CC], [0x04CD, 0x04CE], [0x04D0, 0x04D1], [0x04D2, 0x04D3], [0x04D4, 0x04D5], [0x04D6, 0x04D7], [0x04D8, 0x04D9], [0x04DA, 0x04DB], [0x04DC, 0x04DD], [0x04DE, 0x04DF], [0x04E0, 0x04E1], [0x04E2, 0x04E3], [0x04E4, 0x04E5], [0x04E6, 0x04E7], [0x04E8, 0x04E9], [0x04EA, 0x04EB], [0x04EC, 0x04ED], [0x04EE, 0x04EF], [0x04F0, 0x04F1], [0x04F2, 0x04F3], [0x04F4, 0x04F5], [0x04F8, 0x04F9], [0x0500, 0x0501], [0x0502, 0x0503], [0x0504, 0x0505], [0x0506, 0x0507], [0x0508, 0x0509], [0x050A, 0x050B], [0x050C, 0x050D], [0x050E, 0x050F], [0x0531, 0x0561], [0x0532, 0x0562], [0x0533, 0x0563], [0x0534, 0x0564], [0x0535, 0x0565], [0x0536, 0x0566], [0x0537, 0x0567], [0x0538, 0x0568], [0x0539, 0x0569], [0x053A, 0x056A], [0x053B, 0x056B], [0x053C, 0x056C], [0x053D, 0x056D], [0x053E, 0x056E], [0x053F, 0x056F], [0x0540, 0x0570], [0x0541, 0x0571], [0x0542, 0x0572], [0x0543, 0x0573], [0x0544, 0x0574], [0x0545, 0x0575], [0x0546, 0x0576], [0x0547, 0x0577], [0x0548, 0x0578], [0x0549, 0x0579], [0x054A, 0x057A], [0x054B, 0x057B], [0x054C, 0x057C], [0x054D, 0x057D], [0x054E, 0x057E], [0x054F, 0x057F], [0x0550, 0x0580], [0x0551, 0x0581], [0x0552, 0x0582], [0x0553, 0x0583], [0x0554, 0x0584], [0x0555, 0x0585], [0x0556, 0x0586], [0x1E00, 0x1E01], [0x1E02, 0x1E03], [0x1E04, 0x1E05], [0x1E06, 0x1E07], [0x1E08, 0x1E09], [0x1E0A, 0x1E0B], [0x1E0C, 0x1E0D], [0x1E0E, 0x1E0F], [0x1E10, 0x1E11], [0x1E12, 0x1E13], [0x1E14, 0x1E15], [0x1E16, 0x1E17], [0x1E18, 0x1E19], [0x1E1A, 0x1E1B], [0x1E1C, 0x1E1D], [0x1E1E, 0x1E1F], [0x1E20, 0x1E21], [0x1E22, 0x1E23], [0x1E24, 0x1E25], [0x1E26, 0x1E27], [0x1E28, 0x1E29], [0x1E2A, 0x1E2B], [0x1E2C, 0x1E2D], [0x1E2E, 0x1E2F], [0x1E30, 0x1E31], [0x1E32, 0x1E33], [0x1E34, 0x1E35], [0x1E36, 0x1E37], [0x1E38, 0x1E39], [0x1E3A, 0x1E3B], [0x1E3C, 0x1E3D], [0x1E3E, 0x1E3F], [0x1E40, 0x1E41], [0x1E42, 0x1E43], [0x1E44, 0x1E45], [0x1E46, 0x1E47], [0x1E48, 0x1E49], [0x1E4A, 0x1E4B], [0x1E4C, 0x1E4D], [0x1E4E, 0x1E4F], [0x1E50, 0x1E51], [0x1E52, 0x1E53], [0x1E54, 0x1E55], [0x1E56, 0x1E57], [0x1E58, 0x1E59], [0x1E5A, 0x1E5B], [0x1E5C, 0x1E5D], [0x1E5E, 0x1E5F], [0x1E60, 0x1E61], [0x1E62, 0x1E63], [0x1E64, 0x1E65], [0x1E66, 0x1E67], [0x1E68, 0x1E69], [0x1E6A, 0x1E6B], [0x1E6C, 0x1E6D], [0x1E6E, 0x1E6F], [0x1E70, 0x1E71], [0x1E72, 0x1E73], [0x1E74, 0x1E75], [0x1E76, 0x1E77], [0x1E78, 0x1E79], [0x1E7A, 0x1E7B], [0x1E7C, 0x1E7D], [0x1E7E, 0x1E7F], [0x1E80, 0x1E81], [0x1E82, 0x1E83], [0x1E84, 0x1E85], [0x1E86, 0x1E87], [0x1E88, 0x1E89], [0x1E8A, 0x1E8B], [0x1E8C, 0x1E8D], [0x1E8E, 0x1E8F], [0x1E90, 0x1E91], [0x1E92, 0x1E93], [0x1E94, 0x1E95], [0x1EA0, 0x1EA1], [0x1EA2, 0x1EA3], [0x1EA4, 0x1EA5], [0x1EA6, 0x1EA7], [0x1EA8, 0x1EA9], [0x1EAA, 0x1EAB], [0x1EAC, 0x1EAD], [0x1EAE, 0x1EAF], [0x1EB0, 0x1EB1], [0x1EB2, 0x1EB3], [0x1EB4, 0x1EB5], [0x1EB6, 0x1EB7], [0x1EB8, 0x1EB9], [0x1EBA, 0x1EBB], [0x1EBC, 0x1EBD], [0x1EBE, 0x1EBF], [0x1EC0, 0x1EC1], [0x1EC2, 0x1EC3], [0x1EC4, 0x1EC5], [0x1EC6, 0x1EC7], [0x1EC8, 0x1EC9], [0x1ECA, 0x1ECB], [0x1ECC, 0x1ECD], [0x1ECE, 0x1ECF], [0x1ED0, 0x1ED1], [0x1ED2, 0x1ED3], [0x1ED4, 0x1ED5], [0x1ED6, 0x1ED7], [0x1ED8, 0x1ED9], [0x1EDA, 0x1EDB], [0x1EDC, 0x1EDD], [0x1EDE, 0x1EDF], [0x1EE0, 0x1EE1], [0x1EE2, 0x1EE3], [0x1EE4, 0x1EE5], [0x1EE6, 0x1EE7], [0x1EE8, 0x1EE9], [0x1EEA, 0x1EEB], [0x1EEC, 0x1EED], [0x1EEE, 0x1EEF], [0x1EF0, 0x1EF1], [0x1EF2, 0x1EF3], [0x1EF4, 0x1EF5], [0x1EF6, 0x1EF7], [0x1EF8, 0x1EF9], [0x1F08, 0x1F00], [0x1F09, 0x1F01], [0x1F0A, 0x1F02], [0x1F0B, 0x1F03], [0x1F0C, 0x1F04], [0x1F0D, 0x1F05], [0x1F0E, 0x1F06], [0x1F0F, 0x1F07], [0x1F18, 0x1F10], [0x1F19, 0x1F11], [0x1F1A, 0x1F12], [0x1F1B, 0x1F13], [0x1F1C, 0x1F14], [0x1F1D, 0x1F15], [0x1F28, 0x1F20], [0x1F29, 0x1F21], [0x1F2A, 0x1F22], [0x1F2B, 0x1F23], [0x1F2C, 0x1F24], [0x1F2D, 0x1F25], [0x1F2E, 0x1F26], [0x1F2F, 0x1F27], [0x1F38, 0x1F30], [0x1F39, 0x1F31], [0x1F3A, 0x1F32], [0x1F3B, 0x1F33], [0x1F3C, 0x1F34], [0x1F3D, 0x1F35], [0x1F3E, 0x1F36], [0x1F3F, 0x1F37], [0x1F48, 0x1F40], [0x1F49, 0x1F41], [0x1F4A, 0x1F42], [0x1F4B, 0x1F43], [0x1F4C, 0x1F44], [0x1F4D, 0x1F45], [0x1F59, 0x1F51], [0x1F5B, 0x1F53], [0x1F5D, 0x1F55], [0x1F5F, 0x1F57], [0x1F68, 0x1F60], [0x1F69, 0x1F61], [0x1F6A, 0x1F62], [0x1F6B, 0x1F63], [0x1F6C, 0x1F64], [0x1F6D, 0x1F65], [0x1F6E, 0x1F66], [0x1F6F, 0x1F67], [0x1FB8, 0x1FB0], [0x1FB9, 0x1FB1], [0x1FBA, 0x1F70], [0x1FBB, 0x1F71], [0x1FC8, 0x1F72], [0x1FC9, 0x1F73], [0x1FCA, 0x1F74], [0x1FCB, 0x1F75], [0x1FD8, 0x1FD0], [0x1FD9, 0x1FD1], [0x1FDA, 0x1F76], [0x1FDB, 0x1F77], [0x1FE8, 0x1FE0], [0x1FE9, 0x1FE1], [0x1FEA, 0x1F7A], [0x1FEB, 0x1F7B], [0x1FEC, 0x1FE5], [0x1FF8, 0x1F78], [0x1FF9, 0x1F79], [0x1FFA, 0x1F7C], [0x1FFB, 0x1F7D], [0x2126, 0x03C9], [0x212A, 0x006B], [0x212B, 0x00E5], [0x2160, 0x2170], [0x2161, 0x2171], [0x2162, 0x2172], [0x2163, 0x2173], [0x2164, 0x2174], [0x2165, 0x2175], [0x2166, 0x2176], [0x2167, 0x2177], [0x2168, 0x2178], [0x2169, 0x2179], [0x216A, 0x217A], [0x216B, 0x217B], [0x216C, 0x217C], [0x216D, 0x217D], [0x216E, 0x217E], [0x216F, 0x217F], [0x24B6, 0x24D0], [0x24B7, 0x24D1], [0x24B8, 0x24D2], [0x24B9, 0x24D3], [0x24BA, 0x24D4], [0x24BB, 0x24D5], [0x24BC, 0x24D6], [0x24BD, 0x24D7], [0x24BE, 0x24D8], [0x24BF, 0x24D9], [0x24C0, 0x24DA], [0x24C1, 0x24DB], [0x24C2, 0x24DC], [0x24C3, 0x24DD], [0x24C4, 0x24DE], [0x24C5, 0x24DF], [0x24C6, 0x24E0], [0x24C7, 0x24E1], [0x24C8, 0x24E2], [0x24C9, 0x24E3], [0x24CA, 0x24E4], [0x24CB, 0x24E5], [0x24CC, 0x24E6], [0x24CD, 0x24E7], [0x24CE, 0x24E8], [0x24CF, 0x24E9], [0xFF21, 0xFF41], [0xFF22, 0xFF42], [0xFF23, 0xFF43], [0xFF24, 0xFF44], [0xFF25, 0xFF45], [0xFF26, 0xFF46], [0xFF27, 0xFF47], [0xFF28, 0xFF48], [0xFF29, 0xFF49], [0xFF2A, 0xFF4A], [0xFF2B, 0xFF4B], [0xFF2C, 0xFF4C], [0xFF2D, 0xFF4D], [0xFF2E, 0xFF4E], [0xFF2F, 0xFF4F], [0xFF30, 0xFF50], [0xFF31, 0xFF51], [0xFF32, 0xFF52], [0xFF33, 0xFF53], [0xFF34, 0xFF54], [0xFF35, 0xFF55], [0xFF36, 0xFF56], [0xFF37, 0xFF57], [0xFF38, 0xFF58], [0xFF39, 0xFF59], [0xFF3A, 0xFF5A]]; - -errorCount = 0; -count = 0; - -for (index = 0; index < LowerCase.length; index++) { - var capitalI = LowerCase[index][0]; - var capitalS = String.fromCharCode(capitalI); - var smallI = LowerCase[index][1]; - var smallS = String.fromCharCode(smallI); - if (capitalS.toLowerCase() !== smallS) { - var hexC = decimalToHexString(capitalI); - var hexS = decimalToHexString(smallI); - $ERROR('#' + hexC + '->' + hexS + ' '); - errorCount++; - } - count++; -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_320/S15.5.4.16_A2.js b/tests/ES3/Unicode/Unicode_320/S15.5.4.16_A2.js deleted file mode 100644 index 79344aeac..000000000 --- a/tests/ES3/Unicode/Unicode_320/S15.5.4.16_A2.js +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.16_A2; -* @section: 15.5.4.16; -* @assertion: The characters in SpecialCasings.txt are converted by multi-character results; -* @description: Complex test; -*/ - -//CHECK -LowerSpecialCase = [["\u0130", "\u0069\u0307"], ["\u1F88", "\u1F80"], ["\u1F89", "\u1F81"], ["\u1F8A", "\u1F82"], ["\u1F8B", "\u1F83"], ["\u1F8C", "\u1F84"], ["\u1F8D", "\u1F85"], ["\u1F8E", "\u1F86"], ["\u1F8F", "\u1F87"], ["\u1F98", "\u1F90"], ["\u1F99", "\u1F91"], ["\u1F9A", "\u1F92"], ["\u1F9B", "\u1F93"], ["\u1F9C", "\u1F94"], ["\u1F9D", "\u1F95"], ["\u1F9E", "\u1F96"], ["\u1F9F", "\u1F97"], ["\u1FA8", "\u1FA0"], ["\u1FA9", "\u1FA1"], ["\u1FAA", "\u1FA2"], ["\u1FAB", "\u1FA3"], ["\u1FAC", "\u1FA4"], ["\u1FAD", "\u1FA5"], ["\u1FAE", "\u1FA6"], ["\u1FAF", "\u1FA7"], ["\u1FBC", "\u1FB3"], ["\u1FCC", "\u1FC3"], ["\u1FFC", "\u1FF3"], ["\u03A3", "\u03C2"], ["\u0049", "\u0069\u0307"], ["\u004A", "\u006A\u0307"], ["\u012E", "\u012F\u0307"], ["\u00CC", "\u0069\u0307\u0300"], ["\u00CD", "\u0069\u0307\u0301"], ["\u0128", "\u0069\u0307\u0303"]]; - -errorCount = 0; -count = 0; - -for (index = 0; index < LowerSpecialCase.length; index++) { - var capitalI = LowerSpecialCase[index][0]; - var capitalS = String.fromCharCode(capitalI); - var smallI = LowerSpecialCase[index][1]; - var smallS = String.fromCharCode(smallI); - if (capitalS.toLowerCase() !== smallS) { - var hexC = decimalToHexString(capitalI); - var hexS = decimalToHexString(smallI); - $ERROR('#' + hexC + '->' + hexS + ' '); - errorCount++; - } - count++; -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_320/S15.5.4.18_A1.js b/tests/ES3/Unicode/Unicode_320/S15.5.4.18_A1.js deleted file mode 100644 index c6ea2ff2d..000000000 --- a/tests/ES3/Unicode/Unicode_320/S15.5.4.18_A1.js +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.18_A1; -* @section: 15.5.4.18; -* @assertion: The characters in UnicodeData.txt, but not in SpecialCasings.txt are converted one by one; -* @description: Complex test; -*/ - -//CHECK -UpperCase = [[0x0061, 0x0041], [0x0062, 0x0042], [0x0063, 0x0043], [0x0064, 0x0044], [0x0065, 0x0045], [0x0066, 0x0046], [0x0067, 0x0047], [0x0068, 0x0048], [0x006A, 0x004A], [0x006B, 0x004B], [0x006C, 0x004C], [0x006D, 0x004D], [0x006E, 0x004E], [0x006F, 0x004F], [0x0070, 0x0050], [0x0071, 0x0051], [0x0072, 0x0052], [0x0073, 0x0053], [0x0074, 0x0054], [0x0075, 0x0055], [0x0076, 0x0056], [0x0077, 0x0057], [0x0078, 0x0058], [0x0079, 0x0059], [0x007A, 0x005A], [0x00B5, 0x039C], [0x00E0, 0x00C0], [0x00E1, 0x00C1], [0x00E2, 0x00C2], [0x00E3, 0x00C3], [0x00E4, 0x00C4], [0x00E5, 0x00C5], [0x00E6, 0x00C6], [0x00E7, 0x00C7], [0x00E8, 0x00C8], [0x00E9, 0x00C9], [0x00EA, 0x00CA], [0x00EB, 0x00CB], [0x00EC, 0x00CC], [0x00ED, 0x00CD], [0x00EE, 0x00CE], [0x00EF, 0x00CF], [0x00F0, 0x00D0], [0x00F1, 0x00D1], [0x00F2, 0x00D2], [0x00F3, 0x00D3], [0x00F4, 0x00D4], [0x00F5, 0x00D5], [0x00F6, 0x00D6], [0x00F8, 0x00D8], [0x00F9, 0x00D9], [0x00FA, 0x00DA], [0x00FB, 0x00DB], [0x00FC, 0x00DC], [0x00FD, 0x00DD], [0x00FE, 0x00DE], [0x00FF, 0x0178], [0x0101, 0x0100], [0x0103, 0x0102], [0x0105, 0x0104], [0x0107, 0x0106], [0x0109, 0x0108], [0x010B, 0x010A], [0x010D, 0x010C], [0x010F, 0x010E], [0x0111, 0x0110], [0x0113, 0x0112], [0x0115, 0x0114], [0x0117, 0x0116], [0x0119, 0x0118], [0x011B, 0x011A], [0x011D, 0x011C], [0x011F, 0x011E], [0x0121, 0x0120], [0x0123, 0x0122], [0x0125, 0x0124], [0x0127, 0x0126], [0x0129, 0x0128], [0x012B, 0x012A], [0x012D, 0x012C], [0x012F, 0x012E], [0x0131, 0x0049], [0x0133, 0x0132], [0x0135, 0x0134], [0x0137, 0x0136], [0x013A, 0x0139], [0x013C, 0x013B], [0x013E, 0x013D], [0x0140, 0x013F], [0x0142, 0x0141], [0x0144, 0x0143], [0x0146, 0x0145], [0x0148, 0x0147], [0x014B, 0x014A], [0x014D, 0x014C], [0x014F, 0x014E], [0x0151, 0x0150], [0x0153, 0x0152], [0x0155, 0x0154], [0x0157, 0x0156], [0x0159, 0x0158], [0x015B, 0x015A], [0x015D, 0x015C], [0x015F, 0x015E], [0x0161, 0x0160], [0x0163, 0x0162], [0x0165, 0x0164], [0x0167, 0x0166], [0x0169, 0x0168], [0x016B, 0x016A], [0x016D, 0x016C], [0x016F, 0x016E], [0x0171, 0x0170], [0x0173, 0x0172], [0x0175, 0x0174], [0x0177, 0x0176], [0x017A, 0x0179], [0x017C, 0x017B], [0x017E, 0x017D], [0x017F, 0x0053], [0x0183, 0x0182], [0x0185, 0x0184], [0x0188, 0x0187], [0x018C, 0x018B], [0x0192, 0x0191], [0x0195, 0x01F6], [0x0199, 0x0198], [0x019E, 0x0220], [0x01A1, 0x01A0], [0x01A3, 0x01A2], [0x01A5, 0x01A4], [0x01A8, 0x01A7], [0x01AD, 0x01AC], [0x01B0, 0x01AF], [0x01B4, 0x01B3], [0x01B6, 0x01B5], [0x01B9, 0x01B8], [0x01BD, 0x01BC], [0x01BF, 0x01F7], [0x01C5, 0x01C4], [0x01C6, 0x01C4], [0x01C8, 0x01C7], [0x01C9, 0x01C7], [0x01CB, 0x01CA], [0x01CC, 0x01CA], [0x01CE, 0x01CD], [0x01D0, 0x01CF], [0x01D2, 0x01D1], [0x01D4, 0x01D3], [0x01D6, 0x01D5], [0x01D8, 0x01D7], [0x01DA, 0x01D9], [0x01DC, 0x01DB], [0x01DD, 0x018E], [0x01DF, 0x01DE], [0x01E1, 0x01E0], [0x01E3, 0x01E2], [0x01E5, 0x01E4], [0x01E7, 0x01E6], [0x01E9, 0x01E8], [0x01EB, 0x01EA], [0x01ED, 0x01EC], [0x01EF, 0x01EE], [0x01F2, 0x01F1], [0x01F3, 0x01F1], [0x01F5, 0x01F4], [0x01F9, 0x01F8], [0x01FB, 0x01FA], [0x01FD, 0x01FC], [0x01FF, 0x01FE], [0x0201, 0x0200], [0x0203, 0x0202], [0x0205, 0x0204], [0x0207, 0x0206], [0x0209, 0x0208], [0x020B, 0x020A], [0x020D, 0x020C], [0x020F, 0x020E], [0x0211, 0x0210], [0x0213, 0x0212], [0x0215, 0x0214], [0x0217, 0x0216], [0x0219, 0x0218], [0x021B, 0x021A], [0x021D, 0x021C], [0x021F, 0x021E], [0x0223, 0x0222], [0x0225, 0x0224], [0x0227, 0x0226], [0x0229, 0x0228], [0x022B, 0x022A], [0x022D, 0x022C], [0x022F, 0x022E], [0x0231, 0x0230], [0x0233, 0x0232], [0x0253, 0x0181], [0x0254, 0x0186], [0x0256, 0x0189], [0x0257, 0x018A], [0x0259, 0x018F], [0x025B, 0x0190], [0x0260, 0x0193], [0x0263, 0x0194], [0x0268, 0x0197], [0x0269, 0x0196], [0x026F, 0x019C], [0x0272, 0x019D], [0x0275, 0x019F], [0x0280, 0x01A6], [0x0283, 0x01A9], [0x0288, 0x01AE], [0x028A, 0x01B1], [0x028B, 0x01B2], [0x0292, 0x01B7], [0x0345, 0x0399], [0x03AC, 0x0386], [0x03AD, 0x0388], [0x03AE, 0x0389], [0x03AF, 0x038A], [0x03B1, 0x0391], [0x03B2, 0x0392], [0x03B3, 0x0393], [0x03B4, 0x0394], [0x03B5, 0x0395], [0x03B6, 0x0396], [0x03B7, 0x0397], [0x03B8, 0x0398], [0x03B9, 0x0399], [0x03BA, 0x039A], [0x03BB, 0x039B], [0x03BC, 0x039C], [0x03BD, 0x039D], [0x03BE, 0x039E], [0x03BF, 0x039F], [0x03C0, 0x03A0], [0x03C1, 0x03A1], [0x03C2, 0x03A3], [0x03C3, 0x03A3], [0x03C4, 0x03A4], [0x03C5, 0x03A5], [0x03C6, 0x03A6], [0x03C7, 0x03A7], [0x03C8, 0x03A8], [0x03C9, 0x03A9], [0x03CA, 0x03AA], [0x03CB, 0x03AB], [0x03CC, 0x038C], [0x03CD, 0x038E], [0x03CE, 0x038F], [0x03D0, 0x0392], [0x03D1, 0x0398], [0x03D5, 0x03A6], [0x03D6, 0x03A0], [0x03D9, 0x03D8], [0x03DB, 0x03DA], [0x03DD, 0x03DC], [0x03DF, 0x03DE], [0x03E1, 0x03E0], [0x03E3, 0x03E2], [0x03E5, 0x03E4], [0x03E7, 0x03E6], [0x03E9, 0x03E8], [0x03EB, 0x03EA], [0x03ED, 0x03EC], [0x03EF, 0x03EE], [0x03F0, 0x039A], [0x03F1, 0x03A1], [0x03F2, 0x03A3], [0x03F5, 0x0395], [0x0430, 0x0410], [0x0431, 0x0411], [0x0432, 0x0412], [0x0433, 0x0413], [0x0434, 0x0414], [0x0435, 0x0415], [0x0436, 0x0416], [0x0437, 0x0417], [0x0438, 0x0418], [0x0439, 0x0419], [0x043A, 0x041A], [0x043B, 0x041B], [0x043C, 0x041C], [0x043D, 0x041D], [0x043E, 0x041E], [0x043F, 0x041F], [0x0440, 0x0420], [0x0441, 0x0421], [0x0442, 0x0422], [0x0443, 0x0423], [0x0444, 0x0424], [0x0445, 0x0425], [0x0446, 0x0426], [0x0447, 0x0427], [0x0448, 0x0428], [0x0449, 0x0429], [0x044A, 0x042A], [0x044B, 0x042B], [0x044C, 0x042C], [0x044D, 0x042D], [0x044E, 0x042E], [0x044F, 0x042F], [0x0450, 0x0400], [0x0451, 0x0401], [0x0452, 0x0402], [0x0453, 0x0403], [0x0454, 0x0404], [0x0455, 0x0405], [0x0456, 0x0406], [0x0457, 0x0407], [0x0458, 0x0408], [0x0459, 0x0409], [0x045A, 0x040A], [0x045B, 0x040B], [0x045C, 0x040C], [0x045D, 0x040D], [0x045E, 0x040E], [0x045F, 0x040F], [0x0461, 0x0460], [0x0463, 0x0462], [0x0465, 0x0464], [0x0467, 0x0466], [0x0469, 0x0468], [0x046B, 0x046A], [0x046D, 0x046C], [0x046F, 0x046E], [0x0471, 0x0470], [0x0473, 0x0472], [0x0475, 0x0474], [0x0477, 0x0476], [0x0479, 0x0478], [0x047B, 0x047A], [0x047D, 0x047C], [0x047F, 0x047E], [0x0481, 0x0480], [0x048B, 0x048A], [0x048D, 0x048C], [0x048F, 0x048E], [0x0491, 0x0490], [0x0493, 0x0492], [0x0495, 0x0494], [0x0497, 0x0496], [0x0499, 0x0498], [0x049B, 0x049A], [0x049D, 0x049C], [0x049F, 0x049E], [0x04A1, 0x04A0], [0x04A3, 0x04A2], [0x04A5, 0x04A4], [0x04A7, 0x04A6], [0x04A9, 0x04A8], [0x04AB, 0x04AA], [0x04AD, 0x04AC], [0x04AF, 0x04AE], [0x04B1, 0x04B0], [0x04B3, 0x04B2], [0x04B5, 0x04B4], [0x04B7, 0x04B6], [0x04B9, 0x04B8], [0x04BB, 0x04BA], [0x04BD, 0x04BC], [0x04BF, 0x04BE], [0x04C2, 0x04C1], [0x04C4, 0x04C3], [0x04C6, 0x04C5], [0x04C8, 0x04C7], [0x04CA, 0x04C9], [0x04CC, 0x04CB], [0x04CE, 0x04CD], [0x04D1, 0x04D0], [0x04D3, 0x04D2], [0x04D5, 0x04D4], [0x04D7, 0x04D6], [0x04D9, 0x04D8], [0x04DB, 0x04DA], [0x04DD, 0x04DC], [0x04DF, 0x04DE], [0x04E1, 0x04E0], [0x04E3, 0x04E2], [0x04E5, 0x04E4], [0x04E7, 0x04E6], [0x04E9, 0x04E8], [0x04EB, 0x04EA], [0x04ED, 0x04EC], [0x04EF, 0x04EE], [0x04F1, 0x04F0], [0x04F3, 0x04F2], [0x04F5, 0x04F4], [0x04F9, 0x04F8], [0x0501, 0x0500], [0x0503, 0x0502], [0x0505, 0x0504], [0x0507, 0x0506], [0x0509, 0x0508], [0x050B, 0x050A], [0x050D, 0x050C], [0x050F, 0x050E], [0x0561, 0x0531], [0x0562, 0x0532], [0x0563, 0x0533], [0x0564, 0x0534], [0x0565, 0x0535], [0x0566, 0x0536], [0x0567, 0x0537], [0x0568, 0x0538], [0x0569, 0x0539], [0x056A, 0x053A], [0x056B, 0x053B], [0x056C, 0x053C], [0x056D, 0x053D], [0x056E, 0x053E], [0x056F, 0x053F], [0x0570, 0x0540], [0x0571, 0x0541], [0x0572, 0x0542], [0x0573, 0x0543], [0x0574, 0x0544], [0x0575, 0x0545], [0x0576, 0x0546], [0x0577, 0x0547], [0x0578, 0x0548], [0x0579, 0x0549], [0x057A, 0x054A], [0x057B, 0x054B], [0x057C, 0x054C], [0x057D, 0x054D], [0x057E, 0x054E], [0x057F, 0x054F], [0x0580, 0x0550], [0x0581, 0x0551], [0x0582, 0x0552], [0x0583, 0x0553], [0x0584, 0x0554], [0x0585, 0x0555], [0x0586, 0x0556], [0x1E01, 0x1E00], [0x1E03, 0x1E02], [0x1E05, 0x1E04], [0x1E07, 0x1E06], [0x1E09, 0x1E08], [0x1E0B, 0x1E0A], [0x1E0D, 0x1E0C], [0x1E0F, 0x1E0E], [0x1E11, 0x1E10], [0x1E13, 0x1E12], [0x1E15, 0x1E14], [0x1E17, 0x1E16], [0x1E19, 0x1E18], [0x1E1B, 0x1E1A], [0x1E1D, 0x1E1C], [0x1E1F, 0x1E1E], [0x1E21, 0x1E20], [0x1E23, 0x1E22], [0x1E25, 0x1E24], [0x1E27, 0x1E26], [0x1E29, 0x1E28], [0x1E2B, 0x1E2A], [0x1E2D, 0x1E2C], [0x1E2F, 0x1E2E], [0x1E31, 0x1E30], [0x1E33, 0x1E32], [0x1E35, 0x1E34], [0x1E37, 0x1E36], [0x1E39, 0x1E38], [0x1E3B, 0x1E3A], [0x1E3D, 0x1E3C], [0x1E3F, 0x1E3E], [0x1E41, 0x1E40], [0x1E43, 0x1E42], [0x1E45, 0x1E44], [0x1E47, 0x1E46], [0x1E49, 0x1E48], [0x1E4B, 0x1E4A], [0x1E4D, 0x1E4C], [0x1E4F, 0x1E4E], [0x1E51, 0x1E50], [0x1E53, 0x1E52], [0x1E55, 0x1E54], [0x1E57, 0x1E56], [0x1E59, 0x1E58], [0x1E5B, 0x1E5A], [0x1E5D, 0x1E5C], [0x1E5F, 0x1E5E], [0x1E61, 0x1E60], [0x1E63, 0x1E62], [0x1E65, 0x1E64], [0x1E67, 0x1E66], [0x1E69, 0x1E68], [0x1E6B, 0x1E6A], [0x1E6D, 0x1E6C], [0x1E6F, 0x1E6E], [0x1E71, 0x1E70], [0x1E73, 0x1E72], [0x1E75, 0x1E74], [0x1E77, 0x1E76], [0x1E79, 0x1E78], [0x1E7B, 0x1E7A], [0x1E7D, 0x1E7C], [0x1E7F, 0x1E7E], [0x1E81, 0x1E80], [0x1E83, 0x1E82], [0x1E85, 0x1E84], [0x1E87, 0x1E86], [0x1E89, 0x1E88], [0x1E8B, 0x1E8A], [0x1E8D, 0x1E8C], [0x1E8F, 0x1E8E], [0x1E91, 0x1E90], [0x1E93, 0x1E92], [0x1E95, 0x1E94], [0x1E9B, 0x1E60], [0x1EA1, 0x1EA0], [0x1EA3, 0x1EA2], [0x1EA5, 0x1EA4], [0x1EA7, 0x1EA6], [0x1EA9, 0x1EA8], [0x1EAB, 0x1EAA], [0x1EAD, 0x1EAC], [0x1EAF, 0x1EAE], [0x1EB1, 0x1EB0], [0x1EB3, 0x1EB2], [0x1EB5, 0x1EB4], [0x1EB7, 0x1EB6], [0x1EB9, 0x1EB8], [0x1EBB, 0x1EBA], [0x1EBD, 0x1EBC], [0x1EBF, 0x1EBE], [0x1EC1, 0x1EC0], [0x1EC3, 0x1EC2], [0x1EC5, 0x1EC4], [0x1EC7, 0x1EC6], [0x1EC9, 0x1EC8], [0x1ECB, 0x1ECA], [0x1ECD, 0x1ECC], [0x1ECF, 0x1ECE], [0x1ED1, 0x1ED0], [0x1ED3, 0x1ED2], [0x1ED5, 0x1ED4], [0x1ED7, 0x1ED6], [0x1ED9, 0x1ED8], [0x1EDB, 0x1EDA], [0x1EDD, 0x1EDC], [0x1EDF, 0x1EDE], [0x1EE1, 0x1EE0], [0x1EE3, 0x1EE2], [0x1EE5, 0x1EE4], [0x1EE7, 0x1EE6], [0x1EE9, 0x1EE8], [0x1EEB, 0x1EEA], [0x1EED, 0x1EEC], [0x1EEF, 0x1EEE], [0x1EF1, 0x1EF0], [0x1EF3, 0x1EF2], [0x1EF5, 0x1EF4], [0x1EF7, 0x1EF6], [0x1EF9, 0x1EF8], [0x1F00, 0x1F08], [0x1F01, 0x1F09], [0x1F02, 0x1F0A], [0x1F03, 0x1F0B], [0x1F04, 0x1F0C], [0x1F05, 0x1F0D], [0x1F06, 0x1F0E], [0x1F07, 0x1F0F], [0x1F10, 0x1F18], [0x1F11, 0x1F19], [0x1F12, 0x1F1A], [0x1F13, 0x1F1B], [0x1F14, 0x1F1C], [0x1F15, 0x1F1D], [0x1F20, 0x1F28], [0x1F21, 0x1F29], [0x1F22, 0x1F2A], [0x1F23, 0x1F2B], [0x1F24, 0x1F2C], [0x1F25, 0x1F2D], [0x1F26, 0x1F2E], [0x1F27, 0x1F2F], [0x1F30, 0x1F38], [0x1F31, 0x1F39], [0x1F32, 0x1F3A], [0x1F33, 0x1F3B], [0x1F34, 0x1F3C], [0x1F35, 0x1F3D], [0x1F36, 0x1F3E], [0x1F37, 0x1F3F], [0x1F40, 0x1F48], [0x1F41, 0x1F49], [0x1F42, 0x1F4A], [0x1F43, 0x1F4B], [0x1F44, 0x1F4C], [0x1F45, 0x1F4D], [0x1F51, 0x1F59], [0x1F53, 0x1F5B], [0x1F55, 0x1F5D], [0x1F57, 0x1F5F], [0x1F60, 0x1F68], [0x1F61, 0x1F69], [0x1F62, 0x1F6A], [0x1F63, 0x1F6B], [0x1F64, 0x1F6C], [0x1F65, 0x1F6D], [0x1F66, 0x1F6E], [0x1F67, 0x1F6F], [0x1F70, 0x1FBA], [0x1F71, 0x1FBB], [0x1F72, 0x1FC8], [0x1F73, 0x1FC9], [0x1F74, 0x1FCA], [0x1F75, 0x1FCB], [0x1F76, 0x1FDA], [0x1F77, 0x1FDB], [0x1F78, 0x1FF8], [0x1F79, 0x1FF9], [0x1F7A, 0x1FEA], [0x1F7B, 0x1FEB], [0x1F7C, 0x1FFA], [0x1F7D, 0x1FFB], [0x1FB0, 0x1FB8], [0x1FB1, 0x1FB9], [0x1FBE, 0x0399], [0x1FD0, 0x1FD8], [0x1FD1, 0x1FD9], [0x1FE0, 0x1FE8], [0x1FE1, 0x1FE9], [0x1FE5, 0x1FEC], [0x2170, 0x2160], [0x2171, 0x2161], [0x2172, 0x2162], [0x2173, 0x2163], [0x2174, 0x2164], [0x2175, 0x2165], [0x2176, 0x2166], [0x2177, 0x2167], [0x2178, 0x2168], [0x2179, 0x2169], [0x217A, 0x216A], [0x217B, 0x216B], [0x217C, 0x216C], [0x217D, 0x216D], [0x217E, 0x216E], [0x217F, 0x216F], [0x24D0, 0x24B6], [0x24D1, 0x24B7], [0x24D2, 0x24B8], [0x24D3, 0x24B9], [0x24D4, 0x24BA], [0x24D5, 0x24BB], [0x24D6, 0x24BC], [0x24D7, 0x24BD], [0x24D8, 0x24BE], [0x24D9, 0x24BF], [0x24DA, 0x24C0], [0x24DB, 0x24C1], [0x24DC, 0x24C2], [0x24DD, 0x24C3], [0x24DE, 0x24C4], [0x24DF, 0x24C5], [0x24E0, 0x24C6], [0x24E1, 0x24C7], [0x24E2, 0x24C8], [0x24E3, 0x24C9], [0x24E4, 0x24CA], [0x24E5, 0x24CB], [0x24E6, 0x24CC], [0x24E7, 0x24CD], [0x24E8, 0x24CE], [0x24E9, 0x24CF], [0xFF41, 0xFF21], [0xFF42, 0xFF22], [0xFF43, 0xFF23], [0xFF44, 0xFF24], [0xFF45, 0xFF25], [0xFF46, 0xFF26], [0xFF47, 0xFF27], [0xFF48, 0xFF28], [0xFF49, 0xFF29], [0xFF4A, 0xFF2A], [0xFF4B, 0xFF2B], [0xFF4C, 0xFF2C], [0xFF4D, 0xFF2D], [0xFF4E, 0xFF2E], [0xFF4F, 0xFF2F], [0xFF50, 0xFF30], [0xFF51, 0xFF31], [0xFF52, 0xFF32], [0xFF53, 0xFF33], [0xFF54, 0xFF34], [0xFF55, 0xFF35], [0xFF56, 0xFF36], [0xFF57, 0xFF37], [0xFF58, 0xFF38], [0xFF59, 0xFF39], [0xFF5A, 0xFF3A]]; - -errorCount = 0; -count = 0; - -for (index = 0; index < UpperCase.length; index++) { - var capitalI = UpperCase[index][0]; - var capitalS = String.fromCharCode(capitalI); - var smallI = UpperCase[index][1]; - var smallS = String.fromCharCode(smallI); - if (capitalS.toUpperCase() !== smallS) { - var hexC = decimalToHexString(capitalI); - var hexS = decimalToHexString(smallI); - $ERROR('#' + hexC + '->' + hexS + ' '); - errorCount++; - } - count++; -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_320/S15.5.4.18_A2.js b/tests/ES3/Unicode/Unicode_320/S15.5.4.18_A2.js deleted file mode 100644 index 4dae31aaa..000000000 --- a/tests/ES3/Unicode/Unicode_320/S15.5.4.18_A2.js +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.18_A2; -* @section: 15.5.4.18; -* @assertion: The characters in SpecialCasings.txt are converted by multi-character results; -* @description: Complex test; -*/ - -//CHECK -UpperSpecialCase = [["\u00DF", "\u0053\u0053"], ["\uFB00", "\u0046\u0046"], ["\uFB01", "\u0046\u0049"], ["\uFB02", "\u0046\u004C"], ["\uFB03", "\u0046\u0046\u0049"], ["\uFB04", "\u0046\u0046\u004C"], ["\uFB05", "\u0053\u0054"], ["\uFB06", "\u0053\u0054"], ["\u0587", "\u0535\u0552"], ["\uFB13", "\u0544\u0546"], ["\uFB14", "\u0544\u0535"], ["\uFB15", "\u0544\u053B"], ["\uFB16", "\u054E\u0546"], ["\uFB17", "\u0544\u053D"], ["\u0149", "\u02BC\u004E"], ["\u0390", "\u0399\u0308\u0301"], ["\u03B0", "\u03A5\u0308\u0301"], ["\u01F0", "\u004A\u030C"], ["\u1E96", "\u0048\u0331"], ["\u1E97", "\u0054\u0308"], ["\u1E98", "\u0057\u030A"], ["\u1E99", "\u0059\u030A"], ["\u1E9A", "\u0041\u02BE"], ["\u1F50", "\u03A5\u0313"], ["\u1F52", "\u03A5\u0313\u0300"], ["\u1F54", "\u03A5\u0313\u0301"], ["\u1F56", "\u03A5\u0313\u0342"], ["\u1FB6", "\u0391\u0342"], ["\u1FC6", "\u0397\u0342"], ["\u1FD2", "\u0399\u0308\u0300"], ["\u1FD3", "\u0399\u0308\u0301"], ["\u1FD6", "\u0399\u0342"], ["\u1FD7", "\u0399\u0308\u0342"], ["\u1FE2", "\u03A5\u0308\u0300"], ["\u1FE3", "\u03A5\u0308\u0301"], ["\u1FE4", "\u03A1\u0313"], ["\u1FE6", "\u03A5\u0342"], ["\u1FE7", "\u03A5\u0308\u0342"], ["\u1FF6", "\u03A9\u0342"], ["\u1F80", "\u1F08\u0399"], ["\u1F81", "\u1F09\u0399"], ["\u1F82", "\u1F0A\u0399"], ["\u1F83", "\u1F0B\u0399"], ["\u1F84", "\u1F0C\u0399"], ["\u1F85", "\u1F0D\u0399"], ["\u1F86", "\u1F0E\u0399"], ["\u1F87", "\u1F0F\u0399"], ["\u1F88", "\u1F08\u0399"], ["\u1F89", "\u1F09\u0399"], ["\u1F8A", "\u1F0A\u0399"], ["\u1F8B", "\u1F0B\u0399"], ["\u1F8C", "\u1F0C\u0399"], ["\u1F8D", "\u1F0D\u0399"], ["\u1F8E", "\u1F0E\u0399"], ["\u1F8F", "\u1F0F\u0399"], ["\u1F90", "\u1F28\u0399"], ["\u1F91", "\u1F29\u0399"], ["\u1F92", "\u1F2A\u0399"], ["\u1F93", "\u1F2B\u0399"], ["\u1F94", "\u1F2C\u0399"], ["\u1F95", "\u1F2D\u0399"], ["\u1F96", "\u1F2E\u0399"], ["\u1F97", "\u1F2F\u0399"], ["\u1F98", "\u1F28\u0399"], ["\u1F99", "\u1F29\u0399"], ["\u1F9A", "\u1F2A\u0399"], ["\u1F9B", "\u1F2B\u0399"], ["\u1F9C", "\u1F2C\u0399"], ["\u1F9D", "\u1F2D\u0399"], ["\u1F9E", "\u1F2E\u0399"], ["\u1F9F", "\u1F2F\u0399"], ["\u1FA0", "\u1F68\u0399"], ["\u1FA1", "\u1F69\u0399"], ["\u1FA2", "\u1F6A\u0399"], ["\u1FA3", "\u1F6B\u0399"], ["\u1FA4", "\u1F6C\u0399"], ["\u1FA5", "\u1F6D\u0399"], ["\u1FA6", "\u1F6E\u0399"], ["\u1FA7", "\u1F6F\u0399"], ["\u1FA8", "\u1F68\u0399"], ["\u1FA9", "\u1F69\u0399"], ["\u1FAA", "\u1F6A\u0399"], ["\u1FAB", "\u1F6B\u0399"], ["\u1FAC", "\u1F6C\u0399"], ["\u1FAD", "\u1F6D\u0399"], ["\u1FAE", "\u1F6E\u0399"], ["\u1FAF", "\u1F6F\u0399"], ["\u1FB3", "\u0391\u0399"], ["\u1FBC", "\u0391\u0399"], ["\u1FC3", "\u0397\u0399"], ["\u1FCC", "\u0397\u0399"], ["\u1FF3", "\u03A9\u0399"], ["\u1FFC", "\u03A9\u0399"], ["\u1FB2", "\u1FBA\u0399"], ["\u1FB4", "\u0386\u0399"], ["\u1FC2", "\u1FCA\u0399"], ["\u1FC4", "\u0389\u0399"], ["\u1FF2", "\u1FFA\u0399"], ["\u1FF4", "\u038F\u0399"], ["\u1FB7", "\u0391\u0342\u0399"], ["\u1FC7", "\u0397\u0342\u0399"], ["\u1FF7", "\u03A9\u0342\u0399"], ["\u0069", "\u0130"]]; - -errorCount = 0; -count = 0; - -for (index = 0; index < UpperSpecialCase.length; index++) { - var capitalI = UpperSpecialCase[index][0]; - var capitalS = String.fromCharCode(capitalI); - var smallI = UpperSpecialCase[index][1]; - var smallS = String.fromCharCode(smallI); - if (capitalS.toUpperCase() !== smallS) { - var hexC = decimalToHexString(capitalI); - var hexS = decimalToHexString(smallI); - $ERROR('#' + hexC + '->' + hexS + ' '); - errorCount++; - } - count++; -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_320/S7.1_A1_T1.js b/tests/ES3/Unicode/Unicode_320/S7.1_A1_T1.js deleted file mode 100644 index 1d2185427..000000000 --- a/tests/ES3/Unicode/Unicode_320/S7.1_A1_T1.js +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.1_A1_T1; - * @section: 7.1; - * @assertion: The format control character (Cf) can occur anywhere in the source text - * and these characters are removed before applying the lexical grammar; - * @description: Complex test with eval; -*/ - -//CHECK#1 -Cf = [[0x06DD, 0x06DD], [0x070F, 0x070F], [0x180E, 0x180E], [0x200C, 0x200F], [0x202A, 0x202E], [0x2060, 0x2063], [0x206A, 0x206F], [0xFEFF, 0xFEFF], [0xFFF9, 0xFFFB]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Cf.length; indexI++) { - for (indexJ = Cf[indexI][0]; indexJ <= Cf[indexI][1]; indexJ++) { - try { - var format = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval(format); - eval(format + "var " + format + "x" + format + "=" + format + "1" + format); - eval(format); - if (x !== 1) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_320/S7.1_A2.1_T1.js b/tests/ES3/Unicode/Unicode_320/S7.1_A2.1_T1.js deleted file mode 100644 index e071646c4..000000000 --- a/tests/ES3/Unicode/Unicode_320/S7.1_A2.1_T1.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.1_A2.1_T1; - * @section: 7.1; - * @assertion: Since the format control character (Cf) are removed before processing string literals, - * one must use a Unicode escape sequence to include a Cf inside string literal; - * @description: Complex test, without eval; -*/ - -//CHECK#1 -Cf = [[0x06DD, 0x06DD], [0x070F, 0x070F], [0x180E, 0x180E], [0x200C, 0x200F], [0x202A, 0x202E], [0x2060, 0x2063], [0x206A, 0x206F], [0xFEFF, 0xFEFF], [0xFFF9, 0xFFFB]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Cf.length; indexI++) { - for (indexJ = Cf[indexI][0]; indexJ <= Cf[indexI][1]; indexJ++) { - try { - var format = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - var x = format + "a" + format + "b" + format; - if (x.length !== 5) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_320/S7.1_A2.1_T2.js b/tests/ES3/Unicode/Unicode_320/S7.1_A2.1_T2.js deleted file mode 100644 index c5ddf3ce4..000000000 --- a/tests/ES3/Unicode/Unicode_320/S7.1_A2.1_T2.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.1_A2.1_T2; - * @section: 7.1; - * @assertion: Since the format control character (Cf) are removed before processing string literals, - * one must use a Unicode escape sequence to include a Cf inside string literal; - * @description: Complex test, with eval; -*/ - -//CHECK#1 -Cf = [[0x06DD, 0x06DD], [0x070F, 0x070F], [0x180E, 0x180E], [0x200C, 0x200F], [0x202A, 0x202E], [0x2060, 0x2063], [0x206A, 0x206F], [0xFEFF, 0xFEFF], [0xFFF9, 0xFFFB]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Cf.length; indexI++) { - for (indexJ = Cf[indexI][0]; indexJ <= Cf[indexI][1]; indexJ++) { - try { - var format = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval('var x = "' + format + 'a' + format + 'b' + format + '"'); - if (x.length !== 5) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_320/S7.1_A2.2_T1.js b/tests/ES3/Unicode/Unicode_320/S7.1_A2.2_T1.js deleted file mode 100644 index 17aaa55ef..000000000 --- a/tests/ES3/Unicode/Unicode_320/S7.1_A2.2_T1.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.1_A2.2_T1; - * @section: 7.1; - * @assertion: Since the format control character (Cf) are removed before processing regular expression literals, - * one must use a Unicode escape sequence to include a Cf inside regular expression literal; - * @description: Complex test, without eval; -*/ - -//CHECK#1 -Cf = [[0x06DD, 0x06DD], [0x070F, 0x070F], [0x180E, 0x180E], [0x200C, 0x200F], [0x202A, 0x202E], [0x2060, 0x2063], [0x206A, 0x206F], [0xFEFF, 0xFEFF], [0xFFF9, 0xFFFB]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Cf.length; indexI++) { - for (indexJ = Cf[indexI][0]; indexJ <= Cf[indexI][1]; indexJ++) { - try { - var format = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - var x = RegExp(format + "a" + format + "b" + format); - if (x.source.length !== 5) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_320/S7.1_A2.2_T2.js b/tests/ES3/Unicode/Unicode_320/S7.1_A2.2_T2.js deleted file mode 100644 index b8239dd19..000000000 --- a/tests/ES3/Unicode/Unicode_320/S7.1_A2.2_T2.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.1_A2.2_T2; - * @section: 7.1; - * @assertion: Since the format control character (Cf) are removed before processing regular expression literals, - * one must use a Unicode escape sequence to include a Cf inside regular expression literal; - * @description: Complex test, with eval; -*/ - -//CHECK#1 -Cf = [[0x06DD, 0x06DD], [0x070F, 0x070F], [0x180E, 0x180E], [0x200C, 0x200F], [0x202A, 0x202E], [0x2060, 0x2063], [0x206A, 0x206F], [0xFEFF, 0xFEFF], [0xFFF9, 0xFFFB]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Cf.length; indexI++) { - for (indexJ = Cf[indexI][0]; indexJ <= Cf[indexI][1]; indexJ++) { - try { - var format = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval('var x = RegExp("' + format + 'a' + format + 'b' + format + '")'); - if (x.source.length !== 5) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_320/S7.2_A1.6_T1.js b/tests/ES3/Unicode/Unicode_320/S7.2_A1.6_T1.js deleted file mode 100644 index 51b0b1803..000000000 --- a/tests/ES3/Unicode/Unicode_320/S7.2_A1.6_T1.js +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.2_A1.6_T1; - * @section: 7.2, 7.5; - * @assertion: Any other Unicode "space separator" (category "Zs") between any two tokens is allowed; - * @description: Complex test with eval; -*/ - - -//CHECK#1 -Zs = [[0x1680, 0x1680], [0x2000, 0x200B], [0x202F, 0x202F], [0x205F, 0x205F], [0x3000, 0x3000]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Zs.length; indexI++) { - for (indexJ = Zs[indexI][0]; indexJ <= Zs[indexI][1]; indexJ++) { - try { - var format = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval(format); - eval(format + "var " + format + "x" + format + "=" + format + "1" + format); - eval(format); - if (x !== 1) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_320/S7.2_A2.6_T1.js b/tests/ES3/Unicode/Unicode_320/S7.2_A2.6_T1.js deleted file mode 100644 index 03e4aad84..000000000 --- a/tests/ES3/Unicode/Unicode_320/S7.2_A2.6_T1.js +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.2_A2.6_T1; - * @section: 7.2, 7.8.4; - * @assertion: Any other Unicode "space separator" (category "Zs") within strings; - * @description: Complex test; -*/ - -//CHECK#1 -Zs = [[0x1680, 0x1680], [0x2000, 0x200B], [0x202F, 0x202F], [0x205F, 0x205F], [0x3000, 0x3000]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Zs.length; indexI++) { - for (indexJ = Zs[indexI][0]; indexJ <= Zs[indexI][1]; indexJ++) { - try { - var format = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - var x = "str" + format + "ing"; - if (x !== "str" + format + "ing") { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_320/S7.2_A3.6_T1.js b/tests/ES3/Unicode/Unicode_320/S7.2_A3.6_T1.js deleted file mode 100644 index 7d0e70f73..000000000 --- a/tests/ES3/Unicode/Unicode_320/S7.2_A3.6_T1.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.2_A3.6_T1; - * @section: 7.2, 7.4; - * @assertion: Single line comment can contain any other Unicode "space separator" (category "Zs"); - * @description: Complex test with eval; - */ - -//CHECK#1 -Zs = [[0x1680, 0x1680], [0x2000, 0x200B], [0x202F, 0x202F], [0x205F, 0x205F], [0x3000, 0x3000]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Zs.length; indexI++) { - for (indexJ = Zs[indexI][0]; indexJ <= Zs[indexI][1]; indexJ++) { - try { - var format = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - var x = 0; - eval("//" + format + "single line" + format + "comment" + format + " x = 1;"); - if (x !== 0) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_320/S7.2_A4.6_T1.js b/tests/ES3/Unicode/Unicode_320/S7.2_A4.6_T1.js deleted file mode 100644 index fc661cbac..000000000 --- a/tests/ES3/Unicode/Unicode_320/S7.2_A4.6_T1.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.2_A4.6_T1; - * @section: 7.2, 7.4; - * @assertion: Multi line comment can contain any other Unicode "space separator" (category "Zs"); - * @description: Complex test with eval; - */ - -//CHECK#1 -Zs = [[0x1680, 0x1680], [0x2000, 0x200B], [0x202F, 0x202F], [0x205F, 0x205F], [0x3000, 0x3000]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Zs.length; indexI++) { - for (indexJ = Zs[indexI][0]; indexJ <= Zs[indexI][1]; indexJ++) { - try { - var format = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - var x = 0; - eval("/*" + format + "multi line" + format + "comment" + format + "\n x = 1;*/"); - if (x !== 0) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_320/S7.6_A1.1_T1.js b/tests/ES3/Unicode/Unicode_320/S7.6_A1.1_T1.js deleted file mode 100644 index 7ca3c883a..000000000 --- a/tests/ES3/Unicode/Unicode_320/S7.6_A1.1_T1.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A1.1_T1; - * @section: 7.6; - * @assertion: IdentifierStart :: UnicodeLetter (any character in the Unicode categories "Lu", "Ll", "Lt", "Lm", "Lo", "Nl"); - * @description: UnicodeLetter :: Uppercase letter (Lu). - * Complex test with eval; -*/ - -//CHECK -Lu = [[0x0041, 0x005A], [0x00C0, 0x00D6], [0x00D8, 0x00DE], [0x0100, 0x0100], [0x0102, 0x0102], [0x0104, 0x0104], [0x0106, 0x0106], [0x0108, 0x0108], [0x010A, 0x010A], [0x010C, 0x010C], [0x010E, 0x010E], [0x0110, 0x0110], [0x0112, 0x0112], [0x0114, 0x0114], [0x0116, 0x0116], [0x0118, 0x0118], [0x011A, 0x011A], [0x011C, 0x011C], [0x011E, 0x011E], [0x0120, 0x0120], [0x0122, 0x0122], [0x0124, 0x0124], [0x0126, 0x0126], [0x0128, 0x0128], [0x012A, 0x012A], [0x012C, 0x012C], [0x012E, 0x012E], [0x0130, 0x0130], [0x0132, 0x0132], [0x0134, 0x0134], [0x0136, 0x0136], [0x0139, 0x0139], [0x013B, 0x013B], [0x013D, 0x013D], [0x013F, 0x013F], [0x0141, 0x0141], [0x0143, 0x0143], [0x0145, 0x0145], [0x0147, 0x0147], [0x014A, 0x014A], [0x014C, 0x014C], [0x014E, 0x014E], [0x0150, 0x0150], [0x0152, 0x0152], [0x0154, 0x0154], [0x0156, 0x0156], [0x0158, 0x0158], [0x015A, 0x015A], [0x015C, 0x015C], [0x015E, 0x015E], [0x0160, 0x0160], [0x0162, 0x0162], [0x0164, 0x0164], [0x0166, 0x0166], [0x0168, 0x0168], [0x016A, 0x016A], [0x016C, 0x016C], [0x016E, 0x016E], [0x0170, 0x0170], [0x0172, 0x0172], [0x0174, 0x0174], [0x0176, 0x0176], [0x0178, 0x0179], [0x017B, 0x017B], [0x017D, 0x017D], [0x0181, 0x0182], [0x0184, 0x0184], [0x0186, 0x0187], [0x0189, 0x018B], [0x018E, 0x0191], [0x0193, 0x0194], [0x0196, 0x0198], [0x019C, 0x019D], [0x019F, 0x01A0], [0x01A2, 0x01A2], [0x01A4, 0x01A4], [0x01A6, 0x01A7], [0x01A9, 0x01A9], [0x01AC, 0x01AC], [0x01AE, 0x01AF], [0x01B1, 0x01B3], [0x01B5, 0x01B5], [0x01B7, 0x01B8], [0x01BC, 0x01BC], [0x01C4, 0x01C4], [0x01C7, 0x01C7], [0x01CA, 0x01CA], [0x01CD, 0x01CD], [0x01CF, 0x01CF], [0x01D1, 0x01D1], [0x01D3, 0x01D3], [0x01D5, 0x01D5], [0x01D7, 0x01D7], [0x01D9, 0x01D9], [0x01DB, 0x01DB], [0x01DE, 0x01DE], [0x01E0, 0x01E0], [0x01E2, 0x01E2], [0x01E4, 0x01E4], [0x01E6, 0x01E6], [0x01E8, 0x01E8], [0x01EA, 0x01EA], [0x01EC, 0x01EC], [0x01EE, 0x01EE], [0x01F1, 0x01F1], [0x01F4, 0x01F4], [0x01F6, 0x01F8], [0x01FA, 0x01FA], [0x01FC, 0x01FC], [0x01FE, 0x01FE], [0x0200, 0x0200], [0x0202, 0x0202], [0x0204, 0x0204], [0x0206, 0x0206], [0x0208, 0x0208], [0x020A, 0x020A], [0x020C, 0x020C], [0x020E, 0x020E], [0x0210, 0x0210], [0x0212, 0x0212], [0x0214, 0x0214], [0x0216, 0x0216], [0x0218, 0x0218], [0x021A, 0x021A], [0x021C, 0x021C], [0x021E, 0x021E], [0x0220, 0x0220], [0x0222, 0x0222], [0x0224, 0x0224], [0x0226, 0x0226], [0x0228, 0x0228], [0x022A, 0x022A], [0x022C, 0x022C], [0x022E, 0x022E], [0x0230, 0x0230], [0x0232, 0x0232], [0x0386, 0x0386], [0x0388, 0x038A], [0x038C, 0x038C], [0x038E, 0x038F], [0x0391, 0x03A1], [0x03A3, 0x03AB], [0x03D2, 0x03D4], [0x03D8, 0x03D8], [0x03DA, 0x03DA], [0x03DC, 0x03DC], [0x03DE, 0x03DE], [0x03E0, 0x03E0], [0x03E2, 0x03E2], [0x03E4, 0x03E4], [0x03E6, 0x03E6], [0x03E8, 0x03E8], [0x03EA, 0x03EA], [0x03EC, 0x03EC], [0x03EE, 0x03EE], [0x03F4, 0x03F4], [0x0400, 0x042F], [0x0460, 0x0460], [0x0462, 0x0462], [0x0464, 0x0464], [0x0466, 0x0466], [0x0468, 0x0468], [0x046A, 0x046A], [0x046C, 0x046C], [0x046E, 0x046E], [0x0470, 0x0470], [0x0472, 0x0472], [0x0474, 0x0474], [0x0476, 0x0476], [0x0478, 0x0478], [0x047A, 0x047A], [0x047C, 0x047C], [0x047E, 0x047E], [0x0480, 0x0480], [0x048A, 0x048A], [0x048C, 0x048C], [0x048E, 0x048E], [0x0490, 0x0490], [0x0492, 0x0492], [0x0494, 0x0494], [0x0496, 0x0496], [0x0498, 0x0498], [0x049A, 0x049A], [0x049C, 0x049C], [0x049E, 0x049E], [0x04A0, 0x04A0], [0x04A2, 0x04A2], [0x04A4, 0x04A4], [0x04A6, 0x04A6], [0x04A8, 0x04A8], [0x04AA, 0x04AA], [0x04AC, 0x04AC], [0x04AE, 0x04AE], [0x04B0, 0x04B0], [0x04B2, 0x04B2], [0x04B4, 0x04B4], [0x04B6, 0x04B6], [0x04B8, 0x04B8], [0x04BA, 0x04BA], [0x04BC, 0x04BC], [0x04BE, 0x04BE], [0x04C0, 0x04C1], [0x04C3, 0x04C3], [0x04C5, 0x04C5], [0x04C7, 0x04C7], [0x04C9, 0x04C9], [0x04CB, 0x04CB], [0x04CD, 0x04CD], [0x04D0, 0x04D0], [0x04D2, 0x04D2], [0x04D4, 0x04D4], [0x04D6, 0x04D6], [0x04D8, 0x04D8], [0x04DA, 0x04DA], [0x04DC, 0x04DC], [0x04DE, 0x04DE], [0x04E0, 0x04E0], [0x04E2, 0x04E2], [0x04E4, 0x04E4], [0x04E6, 0x04E6], [0x04E8, 0x04E8], [0x04EA, 0x04EA], [0x04EC, 0x04EC], [0x04EE, 0x04EE], [0x04F0, 0x04F0], [0x04F2, 0x04F2], [0x04F4, 0x04F4], [0x04F8, 0x04F8], [0x0500, 0x0500], [0x0502, 0x0502], [0x0504, 0x0504], [0x0506, 0x0506], [0x0508, 0x0508], [0x050A, 0x050A], [0x050C, 0x050C], [0x050E, 0x050E], [0x0531, 0x0556], [0x10A0, 0x10C5], [0x1E00, 0x1E00], [0x1E02, 0x1E02], [0x1E04, 0x1E04], [0x1E06, 0x1E06], [0x1E08, 0x1E08], [0x1E0A, 0x1E0A], [0x1E0C, 0x1E0C], [0x1E0E, 0x1E0E], [0x1E10, 0x1E10], [0x1E12, 0x1E12], [0x1E14, 0x1E14], [0x1E16, 0x1E16], [0x1E18, 0x1E18], [0x1E1A, 0x1E1A], [0x1E1C, 0x1E1C], [0x1E1E, 0x1E1E], [0x1E20, 0x1E20], [0x1E22, 0x1E22], [0x1E24, 0x1E24], [0x1E26, 0x1E26], [0x1E28, 0x1E28], [0x1E2A, 0x1E2A], [0x1E2C, 0x1E2C], [0x1E2E, 0x1E2E], [0x1E30, 0x1E30], [0x1E32, 0x1E32], [0x1E34, 0x1E34], [0x1E36, 0x1E36], [0x1E38, 0x1E38], [0x1E3A, 0x1E3A], [0x1E3C, 0x1E3C], [0x1E3E, 0x1E3E], [0x1E40, 0x1E40], [0x1E42, 0x1E42], [0x1E44, 0x1E44], [0x1E46, 0x1E46], [0x1E48, 0x1E48], [0x1E4A, 0x1E4A], [0x1E4C, 0x1E4C], [0x1E4E, 0x1E4E], [0x1E50, 0x1E50], [0x1E52, 0x1E52], [0x1E54, 0x1E54], [0x1E56, 0x1E56], [0x1E58, 0x1E58], [0x1E5A, 0x1E5A], [0x1E5C, 0x1E5C], [0x1E5E, 0x1E5E], [0x1E60, 0x1E60], [0x1E62, 0x1E62], [0x1E64, 0x1E64], [0x1E66, 0x1E66], [0x1E68, 0x1E68], [0x1E6A, 0x1E6A], [0x1E6C, 0x1E6C], [0x1E6E, 0x1E6E], [0x1E70, 0x1E70], [0x1E72, 0x1E72], [0x1E74, 0x1E74], [0x1E76, 0x1E76], [0x1E78, 0x1E78], [0x1E7A, 0x1E7A], [0x1E7C, 0x1E7C], [0x1E7E, 0x1E7E], [0x1E80, 0x1E80], [0x1E82, 0x1E82], [0x1E84, 0x1E84], [0x1E86, 0x1E86], [0x1E88, 0x1E88], [0x1E8A, 0x1E8A], [0x1E8C, 0x1E8C], [0x1E8E, 0x1E8E], [0x1E90, 0x1E90], [0x1E92, 0x1E92], [0x1E94, 0x1E94], [0x1EA0, 0x1EA0], [0x1EA2, 0x1EA2], [0x1EA4, 0x1EA4], [0x1EA6, 0x1EA6], [0x1EA8, 0x1EA8], [0x1EAA, 0x1EAA], [0x1EAC, 0x1EAC], [0x1EAE, 0x1EAE], [0x1EB0, 0x1EB0], [0x1EB2, 0x1EB2], [0x1EB4, 0x1EB4], [0x1EB6, 0x1EB6], [0x1EB8, 0x1EB8], [0x1EBA, 0x1EBA], [0x1EBC, 0x1EBC], [0x1EBE, 0x1EBE], [0x1EC0, 0x1EC0], [0x1EC2, 0x1EC2], [0x1EC4, 0x1EC4], [0x1EC6, 0x1EC6], [0x1EC8, 0x1EC8], [0x1ECA, 0x1ECA], [0x1ECC, 0x1ECC], [0x1ECE, 0x1ECE], [0x1ED0, 0x1ED0], [0x1ED2, 0x1ED2], [0x1ED4, 0x1ED4], [0x1ED6, 0x1ED6], [0x1ED8, 0x1ED8], [0x1EDA, 0x1EDA], [0x1EDC, 0x1EDC], [0x1EDE, 0x1EDE], [0x1EE0, 0x1EE0], [0x1EE2, 0x1EE2], [0x1EE4, 0x1EE4], [0x1EE6, 0x1EE6], [0x1EE8, 0x1EE8], [0x1EEA, 0x1EEA], [0x1EEC, 0x1EEC], [0x1EEE, 0x1EEE], [0x1EF0, 0x1EF0], [0x1EF2, 0x1EF2], [0x1EF4, 0x1EF4], [0x1EF6, 0x1EF6], [0x1EF8, 0x1EF8], [0x1F08, 0x1F0F], [0x1F18, 0x1F1D], [0x1F28, 0x1F2F], [0x1F38, 0x1F3F], [0x1F48, 0x1F4D], [0x1F59, 0x1F59], [0x1F5B, 0x1F5B], [0x1F5D, 0x1F5D], [0x1F5F, 0x1F5F], [0x1F68, 0x1F6F], [0x1FB8, 0x1FBB], [0x1FC8, 0x1FCB], [0x1FD8, 0x1FDB], [0x1FE8, 0x1FEC], [0x1FF8, 0x1FFB], [0x2102, 0x2102], [0x2107, 0x2107], [0x210B, 0x210D], [0x2110, 0x2112], [0x2115, 0x2115], [0x2119, 0x211D], [0x2124, 0x2124], [0x2126, 0x2126], [0x2128, 0x2128], [0x212A, 0x212D], [0x2130, 0x2131], [0x2133, 0x2133], [0x213E, 0x213F], [0x2145, 0x2145], [0xFF21, 0xFF3A]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Lu.length; indexI++) { - for (indexJ = Lu[indexI][0]; indexJ <= Lu[indexI][1]; indexJ++) { - try { - var identifier = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval("var " + identifier + "=1"); - if (eval(identifier + "===1") !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_320/S7.6_A1.1_T2.js b/tests/ES3/Unicode/Unicode_320/S7.6_A1.1_T2.js deleted file mode 100644 index 34ef3fa74..000000000 --- a/tests/ES3/Unicode/Unicode_320/S7.6_A1.1_T2.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A1.1_T2; - * @section: 7.6; - * @assertion: IdentifierStart :: UnicodeLetter (any character in the Unicode categories "Lu", "Ll", "Lt", "Lm", "Lo", "Nl"); - * @description: UnicodeLetter :: Lowercase letter (Ll). - * Complex test with eval; -*/ - -//CHECK -Ll = [[0x0061, 0x007A], [0x00AA, 0x00AA], [0x00B5, 0x00B5], [0x00BA, 0x00BA], [0x00DF, 0x00F6], [0x00F8, 0x00FF], [0x0101, 0x0101], [0x0103, 0x0103], [0x0105, 0x0105], [0x0107, 0x0107], [0x0109, 0x0109], [0x010B, 0x010B], [0x010D, 0x010D], [0x010F, 0x010F], [0x0111, 0x0111], [0x0113, 0x0113], [0x0115, 0x0115], [0x0117, 0x0117], [0x0119, 0x0119], [0x011B, 0x011B], [0x011D, 0x011D], [0x011F, 0x011F], [0x0121, 0x0121], [0x0123, 0x0123], [0x0125, 0x0125], [0x0127, 0x0127], [0x0129, 0x0129], [0x012B, 0x012B], [0x012D, 0x012D], [0x012F, 0x012F], [0x0131, 0x0131], [0x0133, 0x0133], [0x0135, 0x0135], [0x0137, 0x0138], [0x013A, 0x013A], [0x013C, 0x013C], [0x013E, 0x013E], [0x0140, 0x0140], [0x0142, 0x0142], [0x0144, 0x0144], [0x0146, 0x0146], [0x0148, 0x0149], [0x014B, 0x014B], [0x014D, 0x014D], [0x014F, 0x014F], [0x0151, 0x0151], [0x0153, 0x0153], [0x0155, 0x0155], [0x0157, 0x0157], [0x0159, 0x0159], [0x015B, 0x015B], [0x015D, 0x015D], [0x015F, 0x015F], [0x0161, 0x0161], [0x0163, 0x0163], [0x0165, 0x0165], [0x0167, 0x0167], [0x0169, 0x0169], [0x016B, 0x016B], [0x016D, 0x016D], [0x016F, 0x016F], [0x0171, 0x0171], [0x0173, 0x0173], [0x0175, 0x0175], [0x0177, 0x0177], [0x017A, 0x017A], [0x017C, 0x017C], [0x017E, 0x0180], [0x0183, 0x0183], [0x0185, 0x0185], [0x0188, 0x0188], [0x018C, 0x018D], [0x0192, 0x0192], [0x0195, 0x0195], [0x0199, 0x019B], [0x019E, 0x019E], [0x01A1, 0x01A1], [0x01A3, 0x01A3], [0x01A5, 0x01A5], [0x01A8, 0x01A8], [0x01AA, 0x01AB], [0x01AD, 0x01AD], [0x01B0, 0x01B0], [0x01B4, 0x01B4], [0x01B6, 0x01B6], [0x01B9, 0x01BA], [0x01BD, 0x01BF], [0x01C6, 0x01C6], [0x01C9, 0x01C9], [0x01CC, 0x01CC], [0x01CE, 0x01CE], [0x01D0, 0x01D0], [0x01D2, 0x01D2], [0x01D4, 0x01D4], [0x01D6, 0x01D6], [0x01D8, 0x01D8], [0x01DA, 0x01DA], [0x01DC, 0x01DD], [0x01DF, 0x01DF], [0x01E1, 0x01E1], [0x01E3, 0x01E3], [0x01E5, 0x01E5], [0x01E7, 0x01E7], [0x01E9, 0x01E9], [0x01EB, 0x01EB], [0x01ED, 0x01ED], [0x01EF, 0x01F0], [0x01F3, 0x01F3], [0x01F5, 0x01F5], [0x01F9, 0x01F9], [0x01FB, 0x01FB], [0x01FD, 0x01FD], [0x01FF, 0x01FF], [0x0201, 0x0201], [0x0203, 0x0203], [0x0205, 0x0205], [0x0207, 0x0207], [0x0209, 0x0209], [0x020B, 0x020B], [0x020D, 0x020D], [0x020F, 0x020F], [0x0211, 0x0211], [0x0213, 0x0213], [0x0215, 0x0215], [0x0217, 0x0217], [0x0219, 0x0219], [0x021B, 0x021B], [0x021D, 0x021D], [0x021F, 0x021F], [0x0223, 0x0223], [0x0225, 0x0225], [0x0227, 0x0227], [0x0229, 0x0229], [0x022B, 0x022B], [0x022D, 0x022D], [0x022F, 0x022F], [0x0231, 0x0231], [0x0233, 0x0233], [0x0250, 0x02AD], [0x0390, 0x0390], [0x03AC, 0x03CE], [0x03D0, 0x03D1], [0x03D5, 0x03D7], [0x03D9, 0x03D9], [0x03DB, 0x03DB], [0x03DD, 0x03DD], [0x03DF, 0x03DF], [0x03E1, 0x03E1], [0x03E3, 0x03E3], [0x03E5, 0x03E5], [0x03E7, 0x03E7], [0x03E9, 0x03E9], [0x03EB, 0x03EB], [0x03ED, 0x03ED], [0x03EF, 0x03F3], [0x03F5, 0x03F5], [0x0430, 0x045F], [0x0461, 0x0461], [0x0463, 0x0463], [0x0465, 0x0465], [0x0467, 0x0467], [0x0469, 0x0469], [0x046B, 0x046B], [0x046D, 0x046D], [0x046F, 0x046F], [0x0471, 0x0471], [0x0473, 0x0473], [0x0475, 0x0475], [0x0477, 0x0477], [0x0479, 0x0479], [0x047B, 0x047B], [0x047D, 0x047D], [0x047F, 0x047F], [0x0481, 0x0481], [0x048B, 0x048B], [0x048D, 0x048D], [0x048F, 0x048F], [0x0491, 0x0491], [0x0493, 0x0493], [0x0495, 0x0495], [0x0497, 0x0497], [0x0499, 0x0499], [0x049B, 0x049B], [0x049D, 0x049D], [0x049F, 0x049F], [0x04A1, 0x04A1], [0x04A3, 0x04A3], [0x04A5, 0x04A5], [0x04A7, 0x04A7], [0x04A9, 0x04A9], [0x04AB, 0x04AB], [0x04AD, 0x04AD], [0x04AF, 0x04AF], [0x04B1, 0x04B1], [0x04B3, 0x04B3], [0x04B5, 0x04B5], [0x04B7, 0x04B7], [0x04B9, 0x04B9], [0x04BB, 0x04BB], [0x04BD, 0x04BD], [0x04BF, 0x04BF], [0x04C2, 0x04C2], [0x04C4, 0x04C4], [0x04C6, 0x04C6], [0x04C8, 0x04C8], [0x04CA, 0x04CA], [0x04CC, 0x04CC], [0x04CE, 0x04CE], [0x04D1, 0x04D1], [0x04D3, 0x04D3], [0x04D5, 0x04D5], [0x04D7, 0x04D7], [0x04D9, 0x04D9], [0x04DB, 0x04DB], [0x04DD, 0x04DD], [0x04DF, 0x04DF], [0x04E1, 0x04E1], [0x04E3, 0x04E3], [0x04E5, 0x04E5], [0x04E7, 0x04E7], [0x04E9, 0x04E9], [0x04EB, 0x04EB], [0x04ED, 0x04ED], [0x04EF, 0x04EF], [0x04F1, 0x04F1], [0x04F3, 0x04F3], [0x04F5, 0x04F5], [0x04F9, 0x04F9], [0x0501, 0x0501], [0x0503, 0x0503], [0x0505, 0x0505], [0x0507, 0x0507], [0x0509, 0x0509], [0x050B, 0x050B], [0x050D, 0x050D], [0x050F, 0x050F], [0x0561, 0x0587], [0x1E01, 0x1E01], [0x1E03, 0x1E03], [0x1E05, 0x1E05], [0x1E07, 0x1E07], [0x1E09, 0x1E09], [0x1E0B, 0x1E0B], [0x1E0D, 0x1E0D], [0x1E0F, 0x1E0F], [0x1E11, 0x1E11], [0x1E13, 0x1E13], [0x1E15, 0x1E15], [0x1E17, 0x1E17], [0x1E19, 0x1E19], [0x1E1B, 0x1E1B], [0x1E1D, 0x1E1D], [0x1E1F, 0x1E1F], [0x1E21, 0x1E21], [0x1E23, 0x1E23], [0x1E25, 0x1E25], [0x1E27, 0x1E27], [0x1E29, 0x1E29], [0x1E2B, 0x1E2B], [0x1E2D, 0x1E2D], [0x1E2F, 0x1E2F], [0x1E31, 0x1E31], [0x1E33, 0x1E33], [0x1E35, 0x1E35], [0x1E37, 0x1E37], [0x1E39, 0x1E39], [0x1E3B, 0x1E3B], [0x1E3D, 0x1E3D], [0x1E3F, 0x1E3F], [0x1E41, 0x1E41], [0x1E43, 0x1E43], [0x1E45, 0x1E45], [0x1E47, 0x1E47], [0x1E49, 0x1E49], [0x1E4B, 0x1E4B], [0x1E4D, 0x1E4D], [0x1E4F, 0x1E4F], [0x1E51, 0x1E51], [0x1E53, 0x1E53], [0x1E55, 0x1E55], [0x1E57, 0x1E57], [0x1E59, 0x1E59], [0x1E5B, 0x1E5B], [0x1E5D, 0x1E5D], [0x1E5F, 0x1E5F], [0x1E61, 0x1E61], [0x1E63, 0x1E63], [0x1E65, 0x1E65], [0x1E67, 0x1E67], [0x1E69, 0x1E69], [0x1E6B, 0x1E6B], [0x1E6D, 0x1E6D], [0x1E6F, 0x1E6F], [0x1E71, 0x1E71], [0x1E73, 0x1E73], [0x1E75, 0x1E75], [0x1E77, 0x1E77], [0x1E79, 0x1E79], [0x1E7B, 0x1E7B], [0x1E7D, 0x1E7D], [0x1E7F, 0x1E7F], [0x1E81, 0x1E81], [0x1E83, 0x1E83], [0x1E85, 0x1E85], [0x1E87, 0x1E87], [0x1E89, 0x1E89], [0x1E8B, 0x1E8B], [0x1E8D, 0x1E8D], [0x1E8F, 0x1E8F], [0x1E91, 0x1E91], [0x1E93, 0x1E93], [0x1E95, 0x1E9B], [0x1EA1, 0x1EA1], [0x1EA3, 0x1EA3], [0x1EA5, 0x1EA5], [0x1EA7, 0x1EA7], [0x1EA9, 0x1EA9], [0x1EAB, 0x1EAB], [0x1EAD, 0x1EAD], [0x1EAF, 0x1EAF], [0x1EB1, 0x1EB1], [0x1EB3, 0x1EB3], [0x1EB5, 0x1EB5], [0x1EB7, 0x1EB7], [0x1EB9, 0x1EB9], [0x1EBB, 0x1EBB], [0x1EBD, 0x1EBD], [0x1EBF, 0x1EBF], [0x1EC1, 0x1EC1], [0x1EC3, 0x1EC3], [0x1EC5, 0x1EC5], [0x1EC7, 0x1EC7], [0x1EC9, 0x1EC9], [0x1ECB, 0x1ECB], [0x1ECD, 0x1ECD], [0x1ECF, 0x1ECF], [0x1ED1, 0x1ED1], [0x1ED3, 0x1ED3], [0x1ED5, 0x1ED5], [0x1ED7, 0x1ED7], [0x1ED9, 0x1ED9], [0x1EDB, 0x1EDB], [0x1EDD, 0x1EDD], [0x1EDF, 0x1EDF], [0x1EE1, 0x1EE1], [0x1EE3, 0x1EE3], [0x1EE5, 0x1EE5], [0x1EE7, 0x1EE7], [0x1EE9, 0x1EE9], [0x1EEB, 0x1EEB], [0x1EED, 0x1EED], [0x1EEF, 0x1EEF], [0x1EF1, 0x1EF1], [0x1EF3, 0x1EF3], [0x1EF5, 0x1EF5], [0x1EF7, 0x1EF7], [0x1EF9, 0x1EF9], [0x1F00, 0x1F07], [0x1F10, 0x1F15], [0x1F20, 0x1F27], [0x1F30, 0x1F37], [0x1F40, 0x1F45], [0x1F50, 0x1F57], [0x1F60, 0x1F67], [0x1F70, 0x1F7D], [0x1F80, 0x1F87], [0x1F90, 0x1F97], [0x1FA0, 0x1FA7], [0x1FB0, 0x1FB4], [0x1FB6, 0x1FB7], [0x1FBE, 0x1FBE], [0x1FC2, 0x1FC4], [0x1FC6, 0x1FC7], [0x1FD0, 0x1FD3], [0x1FD6, 0x1FD7], [0x1FE0, 0x1FE7], [0x1FF2, 0x1FF4], [0x1FF6, 0x1FF7], [0x2071, 0x2071], [0x207F, 0x207F], [0x210A, 0x210A], [0x210E, 0x210F], [0x2113, 0x2113], [0x212F, 0x212F], [0x2134, 0x2134], [0x2139, 0x2139], [0x213D, 0x213D], [0x2146, 0x2149], [0xFB00, 0xFB06], [0xFB13, 0xFB17], [0xFF41, 0xFF5A]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Ll.length; indexI++) { - for (indexJ = Ll[indexI][0]; indexJ <= Ll[indexI][1]; indexJ++) { - try { - var identifier = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval("var " + identifier + "=1"); - if (eval(identifier + "===1") !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_320/S7.6_A1.1_T3.js b/tests/ES3/Unicode/Unicode_320/S7.6_A1.1_T3.js deleted file mode 100644 index 06e9329b8..000000000 --- a/tests/ES3/Unicode/Unicode_320/S7.6_A1.1_T3.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A1.1_T3; - * @section: 7.6; - * @assertion: IdentifierStart :: UnicodeLetter (any character in the Unicode categories "Lu", "Ll", "Lt", "Lm", "Lo", "Nl"); - * @description: UnicodeLetter :: Titlecase letter (Lt). - * Complex test with eval; -*/ - -//CHECK -Lt = [[0x01C5, 0x01C5], [0x01C8, 0x01C8], [0x01CB, 0x01CB], [0x01F2, 0x01F2], [0x1F88, 0x1F8F], [0x1F98, 0x1F9F], [0x1FA8, 0x1FAF], [0x1FBC, 0x1FBC], [0x1FCC, 0x1FCC], [0x1FFC, 0x1FFC]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Lt.length; indexI++) { - for (indexJ = Lt[indexI][0]; indexJ <= Lt[indexI][1]; indexJ++) { - try { - var identifier = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval("var " + identifier + "=1"); - if (eval(identifier + "===1") !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_320/S7.6_A1.1_T4.js b/tests/ES3/Unicode/Unicode_320/S7.6_A1.1_T4.js deleted file mode 100644 index 7b5ec83e0..000000000 --- a/tests/ES3/Unicode/Unicode_320/S7.6_A1.1_T4.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A1.1_T4; - * @section: 7.6; - * @assertion: IdentifierStart :: UnicodeLetter (any character in the Unicode categories "Lu", "Ll", "Lt", "Lm", "Lo", "Nl"); - * @description: UnicodeLetter :: Modifier letter (Lm). - * Complex test with eval; -*/ - -//CHECK -Lm = [[0x02B0, 0x02B8], [0x02BB, 0x02C1], [0x02D0, 0x02D1], [0x02E0, 0x02E4], [0x02EE, 0x02EE], [0x037A, 0x037A], [0x0559, 0x0559], [0x0640, 0x0640], [0x06E5, 0x06E6], [0x0E46, 0x0E46], [0x0EC6, 0x0EC6], [0x17D7, 0x17D7], [0x1843, 0x1843], [0x3005, 0x3005], [0x3031, 0x3035], [0x303B, 0x303B], [0x309D, 0x309E], [0x30FC, 0x30FE], [0xFF70, 0xFF70], [0xFF9E, 0xFF9F]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Lm.length; indexI++) { - for (indexJ = Lm[indexI][0]; indexJ <= Lm[indexI][1]; indexJ++) { - try { - var identifier = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval("var " + identifier + "=1"); - if (eval(identifier + "===1") !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_320/S7.6_A1.1_T5.js b/tests/ES3/Unicode/Unicode_320/S7.6_A1.1_T5.js deleted file mode 100644 index 5db747d15..000000000 --- a/tests/ES3/Unicode/Unicode_320/S7.6_A1.1_T5.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A1.1_T5; - * @section: 7.6; - * @assertion: IdentifierStart :: UnicodeLetter (any character in the Unicode categories "Lu", "Ll", "Lt", "Lm", "Lo", "Nl"); - * @description: UnicodeLetter :: Other letter (Lo). - * Complex test with eval; -*/ - -//CHECK -Lo = [[0x01BB, 0x01BB], [0x01C0, 0x01C3], [0x05D0, 0x05EA], [0x05F0, 0x05F2], [0x0621, 0x063A], [0x0641, 0x064A], [0x066E, 0x066F], [0x0671, 0x06D3], [0x06D5, 0x06D5], [0x06FA, 0x06FC], [0x0710, 0x0710], [0x0712, 0x072C], [0x0780, 0x07A5], [0x07B1, 0x07B1], [0x0905, 0x0939], [0x093D, 0x093D], [0x0950, 0x0950], [0x0958, 0x0961], [0x0985, 0x098C], [0x098F, 0x0990], [0x0993, 0x09A8], [0x09AA, 0x09B0], [0x09B2, 0x09B2], [0x09B6, 0x09B9], [0x09DC, 0x09DD], [0x09DF, 0x09E1], [0x09F0, 0x09F1], [0x0A05, 0x0A0A], [0x0A0F, 0x0A10], [0x0A13, 0x0A28], [0x0A2A, 0x0A30], [0x0A32, 0x0A33], [0x0A35, 0x0A36], [0x0A38, 0x0A39], [0x0A59, 0x0A5C], [0x0A5E, 0x0A5E], [0x0A72, 0x0A74], [0x0A85, 0x0A8B], [0x0A8D, 0x0A8D], [0x0A8F, 0x0A91], [0x0A93, 0x0AA8], [0x0AAA, 0x0AB0], [0x0AB2, 0x0AB3], [0x0AB5, 0x0AB9], [0x0ABD, 0x0ABD], [0x0AD0, 0x0AD0], [0x0AE0, 0x0AE0], [0x0B05, 0x0B0C], [0x0B0F, 0x0B10], [0x0B13, 0x0B28], [0x0B2A, 0x0B30], [0x0B32, 0x0B33], [0x0B36, 0x0B39], [0x0B3D, 0x0B3D], [0x0B5C, 0x0B5D], [0x0B5F, 0x0B61], [0x0B83, 0x0B83], [0x0B85, 0x0B8A], [0x0B8E, 0x0B90], [0x0B92, 0x0B95], [0x0B99, 0x0B9A], [0x0B9C, 0x0B9C], [0x0B9E, 0x0B9F], [0x0BA3, 0x0BA4], [0x0BA8, 0x0BAA], [0x0BAE, 0x0BB5], [0x0BB7, 0x0BB9], [0x0C05, 0x0C0C], [0x0C0E, 0x0C10], [0x0C12, 0x0C28], [0x0C2A, 0x0C33], [0x0C35, 0x0C39], [0x0C60, 0x0C61], [0x0C85, 0x0C8C], [0x0C8E, 0x0C90], [0x0C92, 0x0CA8], [0x0CAA, 0x0CB3], [0x0CB5, 0x0CB9], [0x0CDE, 0x0CDE], [0x0CE0, 0x0CE1], [0x0D05, 0x0D0C], [0x0D0E, 0x0D10], [0x0D12, 0x0D28], [0x0D2A, 0x0D39], [0x0D60, 0x0D61], [0x0D85, 0x0D96], [0x0D9A, 0x0DB1], [0x0DB3, 0x0DBB], [0x0DBD, 0x0DBD], [0x0DC0, 0x0DC6], [0x0E01, 0x0E30], [0x0E32, 0x0E33], [0x0E40, 0x0E45], [0x0E81, 0x0E82], [0x0E84, 0x0E84], [0x0E87, 0x0E88], [0x0E8A, 0x0E8A], [0x0E8D, 0x0E8D], [0x0E94, 0x0E97], [0x0E99, 0x0E9F], [0x0EA1, 0x0EA3], [0x0EA5, 0x0EA5], [0x0EA7, 0x0EA7], [0x0EAA, 0x0EAB], [0x0EAD, 0x0EB0], [0x0EB2, 0x0EB3], [0x0EBD, 0x0EBD], [0x0EC0, 0x0EC4], [0x0EDC, 0x0EDD], [0x0F00, 0x0F00], [0x0F40, 0x0F47], [0x0F49, 0x0F6A], [0x0F88, 0x0F8B], [0x1000, 0x1021], [0x1023, 0x1027], [0x1029, 0x102A], [0x1050, 0x1055], [0x10D0, 0x10F8], [0x1100, 0x1159], [0x115F, 0x11A2], [0x11A8, 0x11F9], [0x1200, 0x1206], [0x1208, 0x1246], [0x1248, 0x1248], [0x124A, 0x124D], [0x1250, 0x1256], [0x1258, 0x1258], [0x125A, 0x125D], [0x1260, 0x1286], [0x1288, 0x1288], [0x128A, 0x128D], [0x1290, 0x12AE], [0x12B0, 0x12B0], [0x12B2, 0x12B5], [0x12B8, 0x12BE], [0x12C0, 0x12C0], [0x12C2, 0x12C5], [0x12C8, 0x12CE], [0x12D0, 0x12D6], [0x12D8, 0x12EE], [0x12F0, 0x130E], [0x1310, 0x1310], [0x1312, 0x1315], [0x1318, 0x131E], [0x1320, 0x1346], [0x1348, 0x135A], [0x13A0, 0x13F4], [0x1401, 0x166C], [0x166F, 0x1676], [0x1681, 0x169A], [0x16A0, 0x16EA], [0x1700, 0x170C], [0x170E, 0x1711], [0x1720, 0x1731], [0x1740, 0x1751], [0x1760, 0x176C], [0x176E, 0x1770], [0x1780, 0x17B3], [0x17DC, 0x17DC], [0x1820, 0x1842], [0x1844, 0x1877], [0x1880, 0x18A8], [0x2135, 0x2138], [0x3006, 0x3006], [0x303C, 0x303C], [0x3041, 0x3096], [0x309F, 0x309F], [0x30A1, 0x30FA], [0x30FF, 0x30FF], [0x3105, 0x312C], [0x3131, 0x318E], [0x31A0, 0x31B7], [0x31F0, 0x31FF], [0x3400, 0x4DB5], [0x4E00, 0x9FA5], [0xA000, 0xA48C], [0xAC00, 0xD7A3], [0xF900, 0xFA2D], [0xFA30, 0xFA6A], [0xFB1D, 0xFB1D], [0xFB1F, 0xFB28], [0xFB2A, 0xFB36], [0xFB38, 0xFB3C], [0xFB3E, 0xFB3E], [0xFB40, 0xFB41], [0xFB43, 0xFB44], [0xFB46, 0xFBB1], [0xFBD3, 0xFD3D], [0xFD50, 0xFD8F], [0xFD92, 0xFDC7], [0xFDF0, 0xFDFB], [0xFE70, 0xFE74], [0xFE76, 0xFEFC], [0xFF66, 0xFF6F], [0xFF71, 0xFF9D], [0xFFA0, 0xFFBE], [0xFFC2, 0xFFC7], [0xFFCA, 0xFFCF], [0xFFD2, 0xFFD7], [0xFFDA, 0xFFDC]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Lo.length; indexI++) { - for (indexJ = Lo[indexI][0]; indexJ <= Lo[indexI][1]; indexJ++) { - try { - var identifier = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval("var " + identifier + "=1"); - if (eval(identifier + "===1") !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_320/S7.6_A1.1_T6.js b/tests/ES3/Unicode/Unicode_320/S7.6_A1.1_T6.js deleted file mode 100644 index d51df6879..000000000 --- a/tests/ES3/Unicode/Unicode_320/S7.6_A1.1_T6.js +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A1.1_T6; - * @section: 7.6; - * @assertion: IdentifierStart :: UnicodeLetter (any character in the Unicode categories "Lu", "Ll", "Lt", "Lm", "Lo", "Nl"); - * @description: UnicodeLetter :: Letter number (Nl); -*/ - -//CHECK -Nl = [[0x16EE, 0x16F0], [0x2160, 0x2183], [0x3007, 0x3007], [0x3021, 0x3029], [0x3038, 0x303A]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Nl.length; indexI++) { - for (indexJ = Nl[indexI][0]; indexJ <= Nl[indexI][1]; indexJ++) { - try { - var identifier = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval("var " + identifier + "=1"); - if (eval(identifier + "===1") !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_320/S7.6_A1.4_T1.js b/tests/ES3/Unicode/Unicode_320/S7.6_A1.4_T1.js deleted file mode 100644 index de1e72b2c..000000000 --- a/tests/ES3/Unicode/Unicode_320/S7.6_A1.4_T1.js +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A1.4_T1; - * @section: 7.6; - * @assertion: IdentifierName must begin at IdentifierStart; - * @description: IdentifierStart is not UnicodeCombiningMark ("Mn"). - * Complex test with eval; -*/ - -//CHECK -Mn = [[0x0300, 0x034F], [0x0360, 0x036F], [0x0483, 0x0486], [0x0591, 0x05A1], [0x05A3, 0x05B9], [0x05BB, 0x05BD], [0x05BF, 0x05BF], [0x05C1, 0x05C2], [0x05C4, 0x05C4], [0x064B, 0x0655], [0x0670, 0x0670], [0x06D6, 0x06DC], [0x06DF, 0x06E4], [0x06E7, 0x06E8], [0x06EA, 0x06ED], [0x0711, 0x0711], [0x0730, 0x074A], [0x07A6, 0x07B0], [0x0901, 0x0902], [0x093C, 0x093C], [0x0941, 0x0948], [0x094D, 0x094D], [0x0951, 0x0954], [0x0962, 0x0963], [0x0981, 0x0981], [0x09BC, 0x09BC], [0x09C1, 0x09C4], [0x09CD, 0x09CD], [0x09E2, 0x09E3], [0x0A02, 0x0A02], [0x0A3C, 0x0A3C], [0x0A41, 0x0A42], [0x0A47, 0x0A48], [0x0A4B, 0x0A4D], [0x0A70, 0x0A71], [0x0A81, 0x0A82], [0x0ABC, 0x0ABC], [0x0AC1, 0x0AC5], [0x0AC7, 0x0AC8], [0x0ACD, 0x0ACD], [0x0B01, 0x0B01], [0x0B3C, 0x0B3C], [0x0B3F, 0x0B3F], [0x0B41, 0x0B43], [0x0B4D, 0x0B4D], [0x0B56, 0x0B56], [0x0B82, 0x0B82], [0x0BC0, 0x0BC0], [0x0BCD, 0x0BCD], [0x0C3E, 0x0C40], [0x0C46, 0x0C48], [0x0C4A, 0x0C4D], [0x0C55, 0x0C56], [0x0CBF, 0x0CBF], [0x0CC6, 0x0CC6], [0x0CCC, 0x0CCD], [0x0D41, 0x0D43], [0x0D4D, 0x0D4D], [0x0DCA, 0x0DCA], [0x0DD2, 0x0DD4], [0x0DD6, 0x0DD6], [0x0E31, 0x0E31], [0x0E34, 0x0E3A], [0x0E47, 0x0E4E], [0x0EB1, 0x0EB1], [0x0EB4, 0x0EB9], [0x0EBB, 0x0EBC], [0x0EC8, 0x0ECD], [0x0F18, 0x0F19], [0x0F35, 0x0F35], [0x0F37, 0x0F37], [0x0F39, 0x0F39], [0x0F71, 0x0F7E], [0x0F80, 0x0F84], [0x0F86, 0x0F87], [0x0F90, 0x0F97], [0x0F99, 0x0FBC], [0x0FC6, 0x0FC6], [0x102D, 0x1030], [0x1032, 0x1032], [0x1036, 0x1037], [0x1039, 0x1039], [0x1058, 0x1059], [0x1712, 0x1714], [0x1732, 0x1734], [0x1752, 0x1753], [0x1772, 0x1773], [0x17B7, 0x17BD], [0x17C6, 0x17C6], [0x17C9, 0x17D3], [0x180B, 0x180D], [0x18A9, 0x18A9], [0x20D0, 0x20DC], [0x20E1, 0x20E1], [0x20E5, 0x20EA], [0x302A, 0x302F], [0x3099, 0x309A], [0xFB1E, 0xFB1E], [0xFE00, 0xFE0F], [0xFE20, 0xFE23]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Mn.length; indexI++) { - for (indexJ = Mn[indexI][0]; indexJ <= Mn[indexI][1]; indexJ++) { - try { - var identifier = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval("var " + identifier + "=1"); - $ERROR('#' + hex + ' '); - errorCount++; - } catch (e) { - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_320/S7.6_A1.4_T2.js b/tests/ES3/Unicode/Unicode_320/S7.6_A1.4_T2.js deleted file mode 100644 index 17939d255..000000000 --- a/tests/ES3/Unicode/Unicode_320/S7.6_A1.4_T2.js +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A1.4_T2; - * @section: 7.6; - * @assertion: IdentifierName must begin at IdentifierStart; - * @description: IdentifierStart is not UnicodeCombiningMark ("Mc"). - * Complex test with eval; -*/ - -//CHECK -Mc = [[0x0903, 0x0903], [0x093E, 0x0940], [0x0949, 0x094C], [0x0982, 0x0983], [0x09BE, 0x09C0], [0x09C7, 0x09C8], [0x09CB, 0x09CC], [0x09D7, 0x09D7], [0x0A3E, 0x0A40], [0x0A83, 0x0A83], [0x0ABE, 0x0AC0], [0x0AC9, 0x0AC9], [0x0ACB, 0x0ACC], [0x0B02, 0x0B03], [0x0B3E, 0x0B3E], [0x0B40, 0x0B40], [0x0B47, 0x0B48], [0x0B4B, 0x0B4C], [0x0B57, 0x0B57], [0x0BBE, 0x0BBF], [0x0BC1, 0x0BC2], [0x0BC6, 0x0BC8], [0x0BCA, 0x0BCC], [0x0BD7, 0x0BD7], [0x0C01, 0x0C03], [0x0C41, 0x0C44], [0x0C82, 0x0C83], [0x0CBE, 0x0CBE], [0x0CC0, 0x0CC4], [0x0CC7, 0x0CC8], [0x0CCA, 0x0CCB], [0x0CD5, 0x0CD6], [0x0D02, 0x0D03], [0x0D3E, 0x0D40], [0x0D46, 0x0D48], [0x0D4A, 0x0D4C], [0x0D57, 0x0D57], [0x0D82, 0x0D83], [0x0DCF, 0x0DD1], [0x0DD8, 0x0DDF], [0x0DF2, 0x0DF3], [0x0F3E, 0x0F3F], [0x0F7F, 0x0F7F], [0x102C, 0x102C], [0x1031, 0x1031], [0x1038, 0x1038], [0x1056, 0x1057], [0x17B4, 0x17B6], [0x17BE, 0x17C5], [0x17C7, 0x17C8]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Mc.length; indexI++) { - for (indexJ = Mc[indexI][0]; indexJ <= Mc[indexI][1]; indexJ++) { - try { - var identifier = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval("var " + identifier + "=1"); - $ERROR('#' + hex + ' '); - errorCount++; - } catch (e) { - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_320/S7.6_A1.4_T3.js b/tests/ES3/Unicode/Unicode_320/S7.6_A1.4_T3.js deleted file mode 100644 index 0f72df8ed..000000000 --- a/tests/ES3/Unicode/Unicode_320/S7.6_A1.4_T3.js +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A1.4_T3; - * @section: 7.6; - * @assertion: IdentifierName must begin at IdentifierStart; - * @description: IdentifierStart is not UnicodeDigit ("Nd"). - * Complex test with eval; -*/ - -//CHECK -Nd = [[0x0030, 0x0039], [0x0660, 0x0669], [0x06F0, 0x06F9], [0x0966, 0x096F], [0x09E6, 0x09EF], [0x0A66, 0x0A6F], [0x0AE6, 0x0AEF], [0x0B66, 0x0B6F], [0x0BE7, 0x0BEF], [0x0C66, 0x0C6F], [0x0CE6, 0x0CEF], [0x0D66, 0x0D6F], [0x0E50, 0x0E59], [0x0ED0, 0x0ED9], [0x0F20, 0x0F29], [0x1040, 0x1049], [0x1369, 0x1371], [0x17E0, 0x17E9], [0x1810, 0x1819], [0xFF10, 0xFF19]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Nd.length; indexI++) { - for (indexJ = Nd[indexI][0]; indexJ <= Nd[indexI][1]; indexJ++) { - try { - var identifier = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval("var " + identifier + "=1"); - $ERROR('#' + hex + ' '); - errorCount++; - } catch (e) { - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_320/S7.6_A1.4_T4.js b/tests/ES3/Unicode/Unicode_320/S7.6_A1.4_T4.js deleted file mode 100644 index cd64dadaf..000000000 --- a/tests/ES3/Unicode/Unicode_320/S7.6_A1.4_T4.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A1.4_T4; - * @section: 7.6; - * @assertion: IdentifierName must begin at IdentifierStart; - * @description: IdentifierStart is not UnicodeConnectorPunctuation ("Pc") without $. - * Complex test with eval; -*/ - -//CHECK -Pc = [[0x005F, 0x005F], [0x203F, 0x2040], [0x30FB, 0x30FB], [0xFE33, 0xFE34], [0xFE4D, 0xFE4F], [0xFF3F, 0xFF3F], [0xFF65, 0xFF65]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Pc.length; indexI++) { - for (indexJ = Pc[indexI][0]; indexJ <= Pc[indexI][1]; indexJ++) { - try { - var identifier = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - if (hex !== "0078") { - eval("var " + identifier + "=1"); - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_320/S7.6_A2.2_T1.js b/tests/ES3/Unicode/Unicode_320/S7.6_A2.2_T1.js deleted file mode 100644 index 63fd52a85..000000000 --- a/tests/ES3/Unicode/Unicode_320/S7.6_A2.2_T1.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A2.2_T1; - * @section: 7.6; - * @assertion: IdentifierPart :: UnicodeCombiningMark (any character in the Unicode categories "Mn", "Mc"); - * @description: UnicodeCombiningMark :: Non-spacing mark (Mn). - * Complex test with eval; -*/ - -//CHECK -Mn = [[0x0300, 0x034F], [0x0360, 0x036F], [0x0483, 0x0486], [0x0591, 0x05A1], [0x05A3, 0x05B9], [0x05BB, 0x05BD], [0x05BF, 0x05BF], [0x05C1, 0x05C2], [0x05C4, 0x05C4], [0x064B, 0x0655], [0x0670, 0x0670], [0x06D6, 0x06DC], [0x06DF, 0x06E4], [0x06E7, 0x06E8], [0x06EA, 0x06ED], [0x0711, 0x0711], [0x0730, 0x074A], [0x07A6, 0x07B0], [0x0901, 0x0902], [0x093C, 0x093C], [0x0941, 0x0948], [0x094D, 0x094D], [0x0951, 0x0954], [0x0962, 0x0963], [0x0981, 0x0981], [0x09BC, 0x09BC], [0x09C1, 0x09C4], [0x09CD, 0x09CD], [0x09E2, 0x09E3], [0x0A02, 0x0A02], [0x0A3C, 0x0A3C], [0x0A41, 0x0A42], [0x0A47, 0x0A48], [0x0A4B, 0x0A4D], [0x0A70, 0x0A71], [0x0A81, 0x0A82], [0x0ABC, 0x0ABC], [0x0AC1, 0x0AC5], [0x0AC7, 0x0AC8], [0x0ACD, 0x0ACD], [0x0B01, 0x0B01], [0x0B3C, 0x0B3C], [0x0B3F, 0x0B3F], [0x0B41, 0x0B43], [0x0B4D, 0x0B4D], [0x0B56, 0x0B56], [0x0B82, 0x0B82], [0x0BC0, 0x0BC0], [0x0BCD, 0x0BCD], [0x0C3E, 0x0C40], [0x0C46, 0x0C48], [0x0C4A, 0x0C4D], [0x0C55, 0x0C56], [0x0CBF, 0x0CBF], [0x0CC6, 0x0CC6], [0x0CCC, 0x0CCD], [0x0D41, 0x0D43], [0x0D4D, 0x0D4D], [0x0DCA, 0x0DCA], [0x0DD2, 0x0DD4], [0x0DD6, 0x0DD6], [0x0E31, 0x0E31], [0x0E34, 0x0E3A], [0x0E47, 0x0E4E], [0x0EB1, 0x0EB1], [0x0EB4, 0x0EB9], [0x0EBB, 0x0EBC], [0x0EC8, 0x0ECD], [0x0F18, 0x0F19], [0x0F35, 0x0F35], [0x0F37, 0x0F37], [0x0F39, 0x0F39], [0x0F71, 0x0F7E], [0x0F80, 0x0F84], [0x0F86, 0x0F87], [0x0F90, 0x0F97], [0x0F99, 0x0FBC], [0x0FC6, 0x0FC6], [0x102D, 0x1030], [0x1032, 0x1032], [0x1036, 0x1037], [0x1039, 0x1039], [0x1058, 0x1059], [0x1712, 0x1714], [0x1732, 0x1734], [0x1752, 0x1753], [0x1772, 0x1773], [0x17B7, 0x17BD], [0x17C6, 0x17C6], [0x17C9, 0x17D3], [0x180B, 0x180D], [0x18A9, 0x18A9], [0x20D0, 0x20DC], [0x20E1, 0x20E1], [0x20E5, 0x20EA], [0x302A, 0x302F], [0x3099, 0x309A], [0xFB1E, 0xFB1E], [0xFE00, 0xFE0F], [0xFE20, 0xFE23]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Mn.length; indexI++) { - for (indexJ = Mn[indexI][0]; indexJ <= Mn[indexI][1]; indexJ++) { - try { - var identifier = "$" + String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval("var " + identifier + "=1"); - if (eval(identifier + "===1") !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_320/S7.6_A2.2_T2.js b/tests/ES3/Unicode/Unicode_320/S7.6_A2.2_T2.js deleted file mode 100644 index 197fe3f5e..000000000 --- a/tests/ES3/Unicode/Unicode_320/S7.6_A2.2_T2.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A2.2_T2; - * @section: 7.6; - * @assertion: IdentifierPart :: UnicodeCombiningMark (any character in the Unicode categories "Mn", "Mc"); - * @description: UnicodeCombiningMark :: Combining spacing mark (Mc). - * Complex test with eval; -*/ - -//CHECK -Mc = [[0x0903, 0x0903], [0x093E, 0x0940], [0x0949, 0x094C], [0x0982, 0x0983], [0x09BE, 0x09C0], [0x09C7, 0x09C8], [0x09CB, 0x09CC], [0x09D7, 0x09D7], [0x0A3E, 0x0A40], [0x0A83, 0x0A83], [0x0ABE, 0x0AC0], [0x0AC9, 0x0AC9], [0x0ACB, 0x0ACC], [0x0B02, 0x0B03], [0x0B3E, 0x0B3E], [0x0B40, 0x0B40], [0x0B47, 0x0B48], [0x0B4B, 0x0B4C], [0x0B57, 0x0B57], [0x0BBE, 0x0BBF], [0x0BC1, 0x0BC2], [0x0BC6, 0x0BC8], [0x0BCA, 0x0BCC], [0x0BD7, 0x0BD7], [0x0C01, 0x0C03], [0x0C41, 0x0C44], [0x0C82, 0x0C83], [0x0CBE, 0x0CBE], [0x0CC0, 0x0CC4], [0x0CC7, 0x0CC8], [0x0CCA, 0x0CCB], [0x0CD5, 0x0CD6], [0x0D02, 0x0D03], [0x0D3E, 0x0D40], [0x0D46, 0x0D48], [0x0D4A, 0x0D4C], [0x0D57, 0x0D57], [0x0D82, 0x0D83], [0x0DCF, 0x0DD1], [0x0DD8, 0x0DDF], [0x0DF2, 0x0DF3], [0x0F3E, 0x0F3F], [0x0F7F, 0x0F7F], [0x102C, 0x102C], [0x1031, 0x1031], [0x1038, 0x1038], [0x1056, 0x1057], [0x17B4, 0x17B6], [0x17BE, 0x17C5], [0x17C7, 0x17C8]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Mc.length; indexI++) { - for (indexJ = Mc[indexI][0]; indexJ <= Mc[indexI][1]; indexJ++) { - try { - var identifier = "$" + String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval("var " + identifier + "=1"); - if (eval(identifier + "===1") !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_320/S7.6_A2.3.js b/tests/ES3/Unicode/Unicode_320/S7.6_A2.3.js deleted file mode 100644 index fb25ca8b3..000000000 --- a/tests/ES3/Unicode/Unicode_320/S7.6_A2.3.js +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A2.3; - * @section: 7.6; - * @assertion: IdentifierPart :: UnicodeDigit (any character in the Unicode categories "Decimal Number (Nd)". - * @description: Complex test with eval; -*/ - -//CHECK -Nd = [[0x0030, 0x0039], [0x0660, 0x0669], [0x06F0, 0x06F9], [0x0966, 0x096F], [0x09E6, 0x09EF], [0x0A66, 0x0A6F], [0x0AE6, 0x0AEF], [0x0B66, 0x0B6F], [0x0BE7, 0x0BEF], [0x0C66, 0x0C6F], [0x0CE6, 0x0CEF], [0x0D66, 0x0D6F], [0x0E50, 0x0E59], [0x0ED0, 0x0ED9], [0x0F20, 0x0F29], [0x1040, 0x1049], [0x1369, 0x1371], [0x17E0, 0x17E9], [0x1810, 0x1819], [0xFF10, 0xFF19]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Nd.length; indexI++) { - for (indexJ = Nd[indexI][0]; indexJ <= Nd[indexI][1]; indexJ++) { - try { - var identifier = "$" + String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval("var " + identifier + "=1"); - if (eval(identifier + "===1") !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_320/S7.6_A2.4.js b/tests/ES3/Unicode/Unicode_320/S7.6_A2.4.js deleted file mode 100644 index 7d4cc1503..000000000 --- a/tests/ES3/Unicode/Unicode_320/S7.6_A2.4.js +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A2.4; - * @section: 7.6; - * @assertion: IdentifierPart :: UnicodeConnectorPunctuation (any character in the Unicode categories "Connector Punctuation (Pc)". - * @description: Complex test with eval; -*/ - -//CHECK -Pc = [[0x005F, 0x005F], [0x203F, 0x2040], [0x30FB, 0x30FB], [0xFE33, 0xFE34], [0xFE4D, 0xFE4F], [0xFF3F, 0xFF3F], [0xFF65, 0xFF65]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Pc.length; indexI++) { - for (indexJ = Pc[indexI][0]; indexJ <= Pc[indexI][1]; indexJ++) { - try { - var identifier = "$" + String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval("var " + identifier + "=1"); - if (eval(identifier + "===1") !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_320/S7.6_A3.1.js b/tests/ES3/Unicode/Unicode_320/S7.6_A3.1.js deleted file mode 100644 index cdd09c5a6..000000000 --- a/tests/ES3/Unicode/Unicode_320/S7.6_A3.1.js +++ /dev/null @@ -1,152 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A3.1; - * @section: 7.6; - * @assertion: IdentifierName must contain only IdentifierPart character; - * @description: Complex test with eval; -*/ - -//CHECK -Lu = [[0x0041, 0x005A], [0x00C0, 0x00D6], [0x00D8, 0x00DE], [0x0100, 0x0100], [0x0102, 0x0102], [0x0104, 0x0104], [0x0106, 0x0106], [0x0108, 0x0108], [0x010A, 0x010A], [0x010C, 0x010C], [0x010E, 0x010E], [0x0110, 0x0110], [0x0112, 0x0112], [0x0114, 0x0114], [0x0116, 0x0116], [0x0118, 0x0118], [0x011A, 0x011A], [0x011C, 0x011C], [0x011E, 0x011E], [0x0120, 0x0120], [0x0122, 0x0122], [0x0124, 0x0124], [0x0126, 0x0126], [0x0128, 0x0128], [0x012A, 0x012A], [0x012C, 0x012C], [0x012E, 0x012E], [0x0130, 0x0130], [0x0132, 0x0132], [0x0134, 0x0134], [0x0136, 0x0136], [0x0139, 0x0139], [0x013B, 0x013B], [0x013D, 0x013D], [0x013F, 0x013F], [0x0141, 0x0141], [0x0143, 0x0143], [0x0145, 0x0145], [0x0147, 0x0147], [0x014A, 0x014A], [0x014C, 0x014C], [0x014E, 0x014E], [0x0150, 0x0150], [0x0152, 0x0152], [0x0154, 0x0154], [0x0156, 0x0156], [0x0158, 0x0158], [0x015A, 0x015A], [0x015C, 0x015C], [0x015E, 0x015E], [0x0160, 0x0160], [0x0162, 0x0162], [0x0164, 0x0164], [0x0166, 0x0166], [0x0168, 0x0168], [0x016A, 0x016A], [0x016C, 0x016C], [0x016E, 0x016E], [0x0170, 0x0170], [0x0172, 0x0172], [0x0174, 0x0174], [0x0176, 0x0176], [0x0178, 0x0179], [0x017B, 0x017B], [0x017D, 0x017D], [0x0181, 0x0182], [0x0184, 0x0184], [0x0186, 0x0187], [0x0189, 0x018B], [0x018E, 0x0191], [0x0193, 0x0194], [0x0196, 0x0198], [0x019C, 0x019D], [0x019F, 0x01A0], [0x01A2, 0x01A2], [0x01A4, 0x01A4], [0x01A6, 0x01A7], [0x01A9, 0x01A9], [0x01AC, 0x01AC], [0x01AE, 0x01AF], [0x01B1, 0x01B3], [0x01B5, 0x01B5], [0x01B7, 0x01B8], [0x01BC, 0x01BC], [0x01C4, 0x01C4], [0x01C7, 0x01C7], [0x01CA, 0x01CA], [0x01CD, 0x01CD], [0x01CF, 0x01CF], [0x01D1, 0x01D1], [0x01D3, 0x01D3], [0x01D5, 0x01D5], [0x01D7, 0x01D7], [0x01D9, 0x01D9], [0x01DB, 0x01DB], [0x01DE, 0x01DE], [0x01E0, 0x01E0], [0x01E2, 0x01E2], [0x01E4, 0x01E4], [0x01E6, 0x01E6], [0x01E8, 0x01E8], [0x01EA, 0x01EA], [0x01EC, 0x01EC], [0x01EE, 0x01EE], [0x01F1, 0x01F1], [0x01F4, 0x01F4], [0x01F6, 0x01F8], [0x01FA, 0x01FA], [0x01FC, 0x01FC], [0x01FE, 0x01FE], [0x0200, 0x0200], [0x0202, 0x0202], [0x0204, 0x0204], [0x0206, 0x0206], [0x0208, 0x0208], [0x020A, 0x020A], [0x020C, 0x020C], [0x020E, 0x020E], [0x0210, 0x0210], [0x0212, 0x0212], [0x0214, 0x0214], [0x0216, 0x0216], [0x0218, 0x0218], [0x021A, 0x021A], [0x021C, 0x021C], [0x021E, 0x021E], [0x0220, 0x0220], [0x0222, 0x0222], [0x0224, 0x0224], [0x0226, 0x0226], [0x0228, 0x0228], [0x022A, 0x022A], [0x022C, 0x022C], [0x022E, 0x022E], [0x0230, 0x0230], [0x0232, 0x0232], [0x0386, 0x0386], [0x0388, 0x038A], [0x038C, 0x038C], [0x038E, 0x038F], [0x0391, 0x03A1], [0x03A3, 0x03AB], [0x03D2, 0x03D4], [0x03D8, 0x03D8], [0x03DA, 0x03DA], [0x03DC, 0x03DC], [0x03DE, 0x03DE], [0x03E0, 0x03E0], [0x03E2, 0x03E2], [0x03E4, 0x03E4], [0x03E6, 0x03E6], [0x03E8, 0x03E8], [0x03EA, 0x03EA], [0x03EC, 0x03EC], [0x03EE, 0x03EE], [0x03F4, 0x03F4], [0x0400, 0x042F], [0x0460, 0x0460], [0x0462, 0x0462], [0x0464, 0x0464], [0x0466, 0x0466], [0x0468, 0x0468], [0x046A, 0x046A], [0x046C, 0x046C], [0x046E, 0x046E], [0x0470, 0x0470], [0x0472, 0x0472], [0x0474, 0x0474], [0x0476, 0x0476], [0x0478, 0x0478], [0x047A, 0x047A], [0x047C, 0x047C], [0x047E, 0x047E], [0x0480, 0x0480], [0x048A, 0x048A], [0x048C, 0x048C], [0x048E, 0x048E], [0x0490, 0x0490], [0x0492, 0x0492], [0x0494, 0x0494], [0x0496, 0x0496], [0x0498, 0x0498], [0x049A, 0x049A], [0x049C, 0x049C], [0x049E, 0x049E], [0x04A0, 0x04A0], [0x04A2, 0x04A2], [0x04A4, 0x04A4], [0x04A6, 0x04A6], [0x04A8, 0x04A8], [0x04AA, 0x04AA], [0x04AC, 0x04AC], [0x04AE, 0x04AE], [0x04B0, 0x04B0], [0x04B2, 0x04B2], [0x04B4, 0x04B4], [0x04B6, 0x04B6], [0x04B8, 0x04B8], [0x04BA, 0x04BA], [0x04BC, 0x04BC], [0x04BE, 0x04BE], [0x04C0, 0x04C1], [0x04C3, 0x04C3], [0x04C5, 0x04C5], [0x04C7, 0x04C7], [0x04C9, 0x04C9], [0x04CB, 0x04CB], [0x04CD, 0x04CD], [0x04D0, 0x04D0], [0x04D2, 0x04D2], [0x04D4, 0x04D4], [0x04D6, 0x04D6], [0x04D8, 0x04D8], [0x04DA, 0x04DA], [0x04DC, 0x04DC], [0x04DE, 0x04DE], [0x04E0, 0x04E0], [0x04E2, 0x04E2], [0x04E4, 0x04E4], [0x04E6, 0x04E6], [0x04E8, 0x04E8], [0x04EA, 0x04EA], [0x04EC, 0x04EC], [0x04EE, 0x04EE], [0x04F0, 0x04F0], [0x04F2, 0x04F2], [0x04F4, 0x04F4], [0x04F8, 0x04F8], [0x0500, 0x0500], [0x0502, 0x0502], [0x0504, 0x0504], [0x0506, 0x0506], [0x0508, 0x0508], [0x050A, 0x050A], [0x050C, 0x050C], [0x050E, 0x050E], [0x0531, 0x0556], [0x10A0, 0x10C5], [0x1E00, 0x1E00], [0x1E02, 0x1E02], [0x1E04, 0x1E04], [0x1E06, 0x1E06], [0x1E08, 0x1E08], [0x1E0A, 0x1E0A], [0x1E0C, 0x1E0C], [0x1E0E, 0x1E0E], [0x1E10, 0x1E10], [0x1E12, 0x1E12], [0x1E14, 0x1E14], [0x1E16, 0x1E16], [0x1E18, 0x1E18], [0x1E1A, 0x1E1A], [0x1E1C, 0x1E1C], [0x1E1E, 0x1E1E], [0x1E20, 0x1E20], [0x1E22, 0x1E22], [0x1E24, 0x1E24], [0x1E26, 0x1E26], [0x1E28, 0x1E28], [0x1E2A, 0x1E2A], [0x1E2C, 0x1E2C], [0x1E2E, 0x1E2E], [0x1E30, 0x1E30], [0x1E32, 0x1E32], [0x1E34, 0x1E34], [0x1E36, 0x1E36], [0x1E38, 0x1E38], [0x1E3A, 0x1E3A], [0x1E3C, 0x1E3C], [0x1E3E, 0x1E3E], [0x1E40, 0x1E40], [0x1E42, 0x1E42], [0x1E44, 0x1E44], [0x1E46, 0x1E46], [0x1E48, 0x1E48], [0x1E4A, 0x1E4A], [0x1E4C, 0x1E4C], [0x1E4E, 0x1E4E], [0x1E50, 0x1E50], [0x1E52, 0x1E52], [0x1E54, 0x1E54], [0x1E56, 0x1E56], [0x1E58, 0x1E58], [0x1E5A, 0x1E5A], [0x1E5C, 0x1E5C], [0x1E5E, 0x1E5E], [0x1E60, 0x1E60], [0x1E62, 0x1E62], [0x1E64, 0x1E64], [0x1E66, 0x1E66], [0x1E68, 0x1E68], [0x1E6A, 0x1E6A], [0x1E6C, 0x1E6C], [0x1E6E, 0x1E6E], [0x1E70, 0x1E70], [0x1E72, 0x1E72], [0x1E74, 0x1E74], [0x1E76, 0x1E76], [0x1E78, 0x1E78], [0x1E7A, 0x1E7A], [0x1E7C, 0x1E7C], [0x1E7E, 0x1E7E], [0x1E80, 0x1E80], [0x1E82, 0x1E82], [0x1E84, 0x1E84], [0x1E86, 0x1E86], [0x1E88, 0x1E88], [0x1E8A, 0x1E8A], [0x1E8C, 0x1E8C], [0x1E8E, 0x1E8E], [0x1E90, 0x1E90], [0x1E92, 0x1E92], [0x1E94, 0x1E94], [0x1EA0, 0x1EA0], [0x1EA2, 0x1EA2], [0x1EA4, 0x1EA4], [0x1EA6, 0x1EA6], [0x1EA8, 0x1EA8], [0x1EAA, 0x1EAA], [0x1EAC, 0x1EAC], [0x1EAE, 0x1EAE], [0x1EB0, 0x1EB0], [0x1EB2, 0x1EB2], [0x1EB4, 0x1EB4], [0x1EB6, 0x1EB6], [0x1EB8, 0x1EB8], [0x1EBA, 0x1EBA], [0x1EBC, 0x1EBC], [0x1EBE, 0x1EBE], [0x1EC0, 0x1EC0], [0x1EC2, 0x1EC2], [0x1EC4, 0x1EC4], [0x1EC6, 0x1EC6], [0x1EC8, 0x1EC8], [0x1ECA, 0x1ECA], [0x1ECC, 0x1ECC], [0x1ECE, 0x1ECE], [0x1ED0, 0x1ED0], [0x1ED2, 0x1ED2], [0x1ED4, 0x1ED4], [0x1ED6, 0x1ED6], [0x1ED8, 0x1ED8], [0x1EDA, 0x1EDA], [0x1EDC, 0x1EDC], [0x1EDE, 0x1EDE], [0x1EE0, 0x1EE0], [0x1EE2, 0x1EE2], [0x1EE4, 0x1EE4], [0x1EE6, 0x1EE6], [0x1EE8, 0x1EE8], [0x1EEA, 0x1EEA], [0x1EEC, 0x1EEC], [0x1EEE, 0x1EEE], [0x1EF0, 0x1EF0], [0x1EF2, 0x1EF2], [0x1EF4, 0x1EF4], [0x1EF6, 0x1EF6], [0x1EF8, 0x1EF8], [0x1F08, 0x1F0F], [0x1F18, 0x1F1D], [0x1F28, 0x1F2F], [0x1F38, 0x1F3F], [0x1F48, 0x1F4D], [0x1F59, 0x1F59], [0x1F5B, 0x1F5B], [0x1F5D, 0x1F5D], [0x1F5F, 0x1F5F], [0x1F68, 0x1F6F], [0x1FB8, 0x1FBB], [0x1FC8, 0x1FCB], [0x1FD8, 0x1FDB], [0x1FE8, 0x1FEC], [0x1FF8, 0x1FFB], [0x2102, 0x2102], [0x2107, 0x2107], [0x210B, 0x210D], [0x2110, 0x2112], [0x2115, 0x2115], [0x2119, 0x211D], [0x2124, 0x2124], [0x2126, 0x2126], [0x2128, 0x2128], [0x212A, 0x212D], [0x2130, 0x2131], [0x2133, 0x2133], [0x213E, 0x213F], [0x2145, 0x2145], [0xFF21, 0xFF3A]]; -Ll = [[0x0061, 0x007A], [0x00AA, 0x00AA], [0x00B5, 0x00B5], [0x00BA, 0x00BA], [0x00DF, 0x00F6], [0x00F8, 0x00FF], [0x0101, 0x0101], [0x0103, 0x0103], [0x0105, 0x0105], [0x0107, 0x0107], [0x0109, 0x0109], [0x010B, 0x010B], [0x010D, 0x010D], [0x010F, 0x010F], [0x0111, 0x0111], [0x0113, 0x0113], [0x0115, 0x0115], [0x0117, 0x0117], [0x0119, 0x0119], [0x011B, 0x011B], [0x011D, 0x011D], [0x011F, 0x011F], [0x0121, 0x0121], [0x0123, 0x0123], [0x0125, 0x0125], [0x0127, 0x0127], [0x0129, 0x0129], [0x012B, 0x012B], [0x012D, 0x012D], [0x012F, 0x012F], [0x0131, 0x0131], [0x0133, 0x0133], [0x0135, 0x0135], [0x0137, 0x0138], [0x013A, 0x013A], [0x013C, 0x013C], [0x013E, 0x013E], [0x0140, 0x0140], [0x0142, 0x0142], [0x0144, 0x0144], [0x0146, 0x0146], [0x0148, 0x0149], [0x014B, 0x014B], [0x014D, 0x014D], [0x014F, 0x014F], [0x0151, 0x0151], [0x0153, 0x0153], [0x0155, 0x0155], [0x0157, 0x0157], [0x0159, 0x0159], [0x015B, 0x015B], [0x015D, 0x015D], [0x015F, 0x015F], [0x0161, 0x0161], [0x0163, 0x0163], [0x0165, 0x0165], [0x0167, 0x0167], [0x0169, 0x0169], [0x016B, 0x016B], [0x016D, 0x016D], [0x016F, 0x016F], [0x0171, 0x0171], [0x0173, 0x0173], [0x0175, 0x0175], [0x0177, 0x0177], [0x017A, 0x017A], [0x017C, 0x017C], [0x017E, 0x0180], [0x0183, 0x0183], [0x0185, 0x0185], [0x0188, 0x0188], [0x018C, 0x018D], [0x0192, 0x0192], [0x0195, 0x0195], [0x0199, 0x019B], [0x019E, 0x019E], [0x01A1, 0x01A1], [0x01A3, 0x01A3], [0x01A5, 0x01A5], [0x01A8, 0x01A8], [0x01AA, 0x01AB], [0x01AD, 0x01AD], [0x01B0, 0x01B0], [0x01B4, 0x01B4], [0x01B6, 0x01B6], [0x01B9, 0x01BA], [0x01BD, 0x01BF], [0x01C6, 0x01C6], [0x01C9, 0x01C9], [0x01CC, 0x01CC], [0x01CE, 0x01CE], [0x01D0, 0x01D0], [0x01D2, 0x01D2], [0x01D4, 0x01D4], [0x01D6, 0x01D6], [0x01D8, 0x01D8], [0x01DA, 0x01DA], [0x01DC, 0x01DD], [0x01DF, 0x01DF], [0x01E1, 0x01E1], [0x01E3, 0x01E3], [0x01E5, 0x01E5], [0x01E7, 0x01E7], [0x01E9, 0x01E9], [0x01EB, 0x01EB], [0x01ED, 0x01ED], [0x01EF, 0x01F0], [0x01F3, 0x01F3], [0x01F5, 0x01F5], [0x01F9, 0x01F9], [0x01FB, 0x01FB], [0x01FD, 0x01FD], [0x01FF, 0x01FF], [0x0201, 0x0201], [0x0203, 0x0203], [0x0205, 0x0205], [0x0207, 0x0207], [0x0209, 0x0209], [0x020B, 0x020B], [0x020D, 0x020D], [0x020F, 0x020F], [0x0211, 0x0211], [0x0213, 0x0213], [0x0215, 0x0215], [0x0217, 0x0217], [0x0219, 0x0219], [0x021B, 0x021B], [0x021D, 0x021D], [0x021F, 0x021F], [0x0223, 0x0223], [0x0225, 0x0225], [0x0227, 0x0227], [0x0229, 0x0229], [0x022B, 0x022B], [0x022D, 0x022D], [0x022F, 0x022F], [0x0231, 0x0231], [0x0233, 0x0233], [0x0250, 0x02AD], [0x0390, 0x0390], [0x03AC, 0x03CE], [0x03D0, 0x03D1], [0x03D5, 0x03D7], [0x03D9, 0x03D9], [0x03DB, 0x03DB], [0x03DD, 0x03DD], [0x03DF, 0x03DF], [0x03E1, 0x03E1], [0x03E3, 0x03E3], [0x03E5, 0x03E5], [0x03E7, 0x03E7], [0x03E9, 0x03E9], [0x03EB, 0x03EB], [0x03ED, 0x03ED], [0x03EF, 0x03F3], [0x03F5, 0x03F5], [0x0430, 0x045F], [0x0461, 0x0461], [0x0463, 0x0463], [0x0465, 0x0465], [0x0467, 0x0467], [0x0469, 0x0469], [0x046B, 0x046B], [0x046D, 0x046D], [0x046F, 0x046F], [0x0471, 0x0471], [0x0473, 0x0473], [0x0475, 0x0475], [0x0477, 0x0477], [0x0479, 0x0479], [0x047B, 0x047B], [0x047D, 0x047D], [0x047F, 0x047F], [0x0481, 0x0481], [0x048B, 0x048B], [0x048D, 0x048D], [0x048F, 0x048F], [0x0491, 0x0491], [0x0493, 0x0493], [0x0495, 0x0495], [0x0497, 0x0497], [0x0499, 0x0499], [0x049B, 0x049B], [0x049D, 0x049D], [0x049F, 0x049F], [0x04A1, 0x04A1], [0x04A3, 0x04A3], [0x04A5, 0x04A5], [0x04A7, 0x04A7], [0x04A9, 0x04A9], [0x04AB, 0x04AB], [0x04AD, 0x04AD], [0x04AF, 0x04AF], [0x04B1, 0x04B1], [0x04B3, 0x04B3], [0x04B5, 0x04B5], [0x04B7, 0x04B7], [0x04B9, 0x04B9], [0x04BB, 0x04BB], [0x04BD, 0x04BD], [0x04BF, 0x04BF], [0x04C2, 0x04C2], [0x04C4, 0x04C4], [0x04C6, 0x04C6], [0x04C8, 0x04C8], [0x04CA, 0x04CA], [0x04CC, 0x04CC], [0x04CE, 0x04CE], [0x04D1, 0x04D1], [0x04D3, 0x04D3], [0x04D5, 0x04D5], [0x04D7, 0x04D7], [0x04D9, 0x04D9], [0x04DB, 0x04DB], [0x04DD, 0x04DD], [0x04DF, 0x04DF], [0x04E1, 0x04E1], [0x04E3, 0x04E3], [0x04E5, 0x04E5], [0x04E7, 0x04E7], [0x04E9, 0x04E9], [0x04EB, 0x04EB], [0x04ED, 0x04ED], [0x04EF, 0x04EF], [0x04F1, 0x04F1], [0x04F3, 0x04F3], [0x04F5, 0x04F5], [0x04F9, 0x04F9], [0x0501, 0x0501], [0x0503, 0x0503], [0x0505, 0x0505], [0x0507, 0x0507], [0x0509, 0x0509], [0x050B, 0x050B], [0x050D, 0x050D], [0x050F, 0x050F], [0x0561, 0x0587], [0x1E01, 0x1E01], [0x1E03, 0x1E03], [0x1E05, 0x1E05], [0x1E07, 0x1E07], [0x1E09, 0x1E09], [0x1E0B, 0x1E0B], [0x1E0D, 0x1E0D], [0x1E0F, 0x1E0F], [0x1E11, 0x1E11], [0x1E13, 0x1E13], [0x1E15, 0x1E15], [0x1E17, 0x1E17], [0x1E19, 0x1E19], [0x1E1B, 0x1E1B], [0x1E1D, 0x1E1D], [0x1E1F, 0x1E1F], [0x1E21, 0x1E21], [0x1E23, 0x1E23], [0x1E25, 0x1E25], [0x1E27, 0x1E27], [0x1E29, 0x1E29], [0x1E2B, 0x1E2B], [0x1E2D, 0x1E2D], [0x1E2F, 0x1E2F], [0x1E31, 0x1E31], [0x1E33, 0x1E33], [0x1E35, 0x1E35], [0x1E37, 0x1E37], [0x1E39, 0x1E39], [0x1E3B, 0x1E3B], [0x1E3D, 0x1E3D], [0x1E3F, 0x1E3F], [0x1E41, 0x1E41], [0x1E43, 0x1E43], [0x1E45, 0x1E45], [0x1E47, 0x1E47], [0x1E49, 0x1E49], [0x1E4B, 0x1E4B], [0x1E4D, 0x1E4D], [0x1E4F, 0x1E4F], [0x1E51, 0x1E51], [0x1E53, 0x1E53], [0x1E55, 0x1E55], [0x1E57, 0x1E57], [0x1E59, 0x1E59], [0x1E5B, 0x1E5B], [0x1E5D, 0x1E5D], [0x1E5F, 0x1E5F], [0x1E61, 0x1E61], [0x1E63, 0x1E63], [0x1E65, 0x1E65], [0x1E67, 0x1E67], [0x1E69, 0x1E69], [0x1E6B, 0x1E6B], [0x1E6D, 0x1E6D], [0x1E6F, 0x1E6F], [0x1E71, 0x1E71], [0x1E73, 0x1E73], [0x1E75, 0x1E75], [0x1E77, 0x1E77], [0x1E79, 0x1E79], [0x1E7B, 0x1E7B], [0x1E7D, 0x1E7D], [0x1E7F, 0x1E7F], [0x1E81, 0x1E81], [0x1E83, 0x1E83], [0x1E85, 0x1E85], [0x1E87, 0x1E87], [0x1E89, 0x1E89], [0x1E8B, 0x1E8B], [0x1E8D, 0x1E8D], [0x1E8F, 0x1E8F], [0x1E91, 0x1E91], [0x1E93, 0x1E93], [0x1E95, 0x1E9B], [0x1EA1, 0x1EA1], [0x1EA3, 0x1EA3], [0x1EA5, 0x1EA5], [0x1EA7, 0x1EA7], [0x1EA9, 0x1EA9], [0x1EAB, 0x1EAB], [0x1EAD, 0x1EAD], [0x1EAF, 0x1EAF], [0x1EB1, 0x1EB1], [0x1EB3, 0x1EB3], [0x1EB5, 0x1EB5], [0x1EB7, 0x1EB7], [0x1EB9, 0x1EB9], [0x1EBB, 0x1EBB], [0x1EBD, 0x1EBD], [0x1EBF, 0x1EBF], [0x1EC1, 0x1EC1], [0x1EC3, 0x1EC3], [0x1EC5, 0x1EC5], [0x1EC7, 0x1EC7], [0x1EC9, 0x1EC9], [0x1ECB, 0x1ECB], [0x1ECD, 0x1ECD], [0x1ECF, 0x1ECF], [0x1ED1, 0x1ED1], [0x1ED3, 0x1ED3], [0x1ED5, 0x1ED5], [0x1ED7, 0x1ED7], [0x1ED9, 0x1ED9], [0x1EDB, 0x1EDB], [0x1EDD, 0x1EDD], [0x1EDF, 0x1EDF], [0x1EE1, 0x1EE1], [0x1EE3, 0x1EE3], [0x1EE5, 0x1EE5], [0x1EE7, 0x1EE7], [0x1EE9, 0x1EE9], [0x1EEB, 0x1EEB], [0x1EED, 0x1EED], [0x1EEF, 0x1EEF], [0x1EF1, 0x1EF1], [0x1EF3, 0x1EF3], [0x1EF5, 0x1EF5], [0x1EF7, 0x1EF7], [0x1EF9, 0x1EF9], [0x1F00, 0x1F07], [0x1F10, 0x1F15], [0x1F20, 0x1F27], [0x1F30, 0x1F37], [0x1F40, 0x1F45], [0x1F50, 0x1F57], [0x1F60, 0x1F67], [0x1F70, 0x1F7D], [0x1F80, 0x1F87], [0x1F90, 0x1F97], [0x1FA0, 0x1FA7], [0x1FB0, 0x1FB4], [0x1FB6, 0x1FB7], [0x1FBE, 0x1FBE], [0x1FC2, 0x1FC4], [0x1FC6, 0x1FC7], [0x1FD0, 0x1FD3], [0x1FD6, 0x1FD7], [0x1FE0, 0x1FE7], [0x1FF2, 0x1FF4], [0x1FF6, 0x1FF7], [0x2071, 0x2071], [0x207F, 0x207F], [0x210A, 0x210A], [0x210E, 0x210F], [0x2113, 0x2113], [0x212F, 0x212F], [0x2134, 0x2134], [0x2139, 0x2139], [0x213D, 0x213D], [0x2146, 0x2149], [0xFB00, 0xFB06], [0xFB13, 0xFB17], [0xFF41, 0xFF5A]]; -Lt = [[0x01C5, 0x01C5], [0x01C8, 0x01C8], [0x01CB, 0x01CB], [0x01F2, 0x01F2], [0x1F88, 0x1F8F], [0x1F98, 0x1F9F], [0x1FA8, 0x1FAF], [0x1FBC, 0x1FBC], [0x1FCC, 0x1FCC], [0x1FFC, 0x1FFC]]; -Lm = [[0x02B0, 0x02B8], [0x02BB, 0x02C1], [0x02D0, 0x02D1], [0x02E0, 0x02E4], [0x02EE, 0x02EE], [0x037A, 0x037A], [0x0559, 0x0559], [0x0640, 0x0640], [0x06E5, 0x06E6], [0x0E46, 0x0E46], [0x0EC6, 0x0EC6], [0x17D7, 0x17D7], [0x1843, 0x1843], [0x3005, 0x3005], [0x3031, 0x3035], [0x303B, 0x303B], [0x309D, 0x309E], [0x30FC, 0x30FE], [0xFF70, 0xFF70], [0xFF9E, 0xFF9F]]; -Lo = [[0x01BB, 0x01BB], [0x01C0, 0x01C3], [0x05D0, 0x05EA], [0x05F0, 0x05F2], [0x0621, 0x063A], [0x0641, 0x064A], [0x066E, 0x066F], [0x0671, 0x06D3], [0x06D5, 0x06D5], [0x06FA, 0x06FC], [0x0710, 0x0710], [0x0712, 0x072C], [0x0780, 0x07A5], [0x07B1, 0x07B1], [0x0905, 0x0939], [0x093D, 0x093D], [0x0950, 0x0950], [0x0958, 0x0961], [0x0985, 0x098C], [0x098F, 0x0990], [0x0993, 0x09A8], [0x09AA, 0x09B0], [0x09B2, 0x09B2], [0x09B6, 0x09B9], [0x09DC, 0x09DD], [0x09DF, 0x09E1], [0x09F0, 0x09F1], [0x0A05, 0x0A0A], [0x0A0F, 0x0A10], [0x0A13, 0x0A28], [0x0A2A, 0x0A30], [0x0A32, 0x0A33], [0x0A35, 0x0A36], [0x0A38, 0x0A39], [0x0A59, 0x0A5C], [0x0A5E, 0x0A5E], [0x0A72, 0x0A74], [0x0A85, 0x0A8B], [0x0A8D, 0x0A8D], [0x0A8F, 0x0A91], [0x0A93, 0x0AA8], [0x0AAA, 0x0AB0], [0x0AB2, 0x0AB3], [0x0AB5, 0x0AB9], [0x0ABD, 0x0ABD], [0x0AD0, 0x0AD0], [0x0AE0, 0x0AE0], [0x0B05, 0x0B0C], [0x0B0F, 0x0B10], [0x0B13, 0x0B28], [0x0B2A, 0x0B30], [0x0B32, 0x0B33], [0x0B36, 0x0B39], [0x0B3D, 0x0B3D], [0x0B5C, 0x0B5D], [0x0B5F, 0x0B61], [0x0B83, 0x0B83], [0x0B85, 0x0B8A], [0x0B8E, 0x0B90], [0x0B92, 0x0B95], [0x0B99, 0x0B9A], [0x0B9C, 0x0B9C], [0x0B9E, 0x0B9F], [0x0BA3, 0x0BA4], [0x0BA8, 0x0BAA], [0x0BAE, 0x0BB5], [0x0BB7, 0x0BB9], [0x0C05, 0x0C0C], [0x0C0E, 0x0C10], [0x0C12, 0x0C28], [0x0C2A, 0x0C33], [0x0C35, 0x0C39], [0x0C60, 0x0C61], [0x0C85, 0x0C8C], [0x0C8E, 0x0C90], [0x0C92, 0x0CA8], [0x0CAA, 0x0CB3], [0x0CB5, 0x0CB9], [0x0CDE, 0x0CDE], [0x0CE0, 0x0CE1], [0x0D05, 0x0D0C], [0x0D0E, 0x0D10], [0x0D12, 0x0D28], [0x0D2A, 0x0D39], [0x0D60, 0x0D61], [0x0D85, 0x0D96], [0x0D9A, 0x0DB1], [0x0DB3, 0x0DBB], [0x0DBD, 0x0DBD], [0x0DC0, 0x0DC6], [0x0E01, 0x0E30], [0x0E32, 0x0E33], [0x0E40, 0x0E45], [0x0E81, 0x0E82], [0x0E84, 0x0E84], [0x0E87, 0x0E88], [0x0E8A, 0x0E8A], [0x0E8D, 0x0E8D], [0x0E94, 0x0E97], [0x0E99, 0x0E9F], [0x0EA1, 0x0EA3], [0x0EA5, 0x0EA5], [0x0EA7, 0x0EA7], [0x0EAA, 0x0EAB], [0x0EAD, 0x0EB0], [0x0EB2, 0x0EB3], [0x0EBD, 0x0EBD], [0x0EC0, 0x0EC4], [0x0EDC, 0x0EDD], [0x0F00, 0x0F00], [0x0F40, 0x0F47], [0x0F49, 0x0F6A], [0x0F88, 0x0F8B], [0x1000, 0x1021], [0x1023, 0x1027], [0x1029, 0x102A], [0x1050, 0x1055], [0x10D0, 0x10F8], [0x1100, 0x1159], [0x115F, 0x11A2], [0x11A8, 0x11F9], [0x1200, 0x1206], [0x1208, 0x1246], [0x1248, 0x1248], [0x124A, 0x124D], [0x1250, 0x1256], [0x1258, 0x1258], [0x125A, 0x125D], [0x1260, 0x1286], [0x1288, 0x1288], [0x128A, 0x128D], [0x1290, 0x12AE], [0x12B0, 0x12B0], [0x12B2, 0x12B5], [0x12B8, 0x12BE], [0x12C0, 0x12C0], [0x12C2, 0x12C5], [0x12C8, 0x12CE], [0x12D0, 0x12D6], [0x12D8, 0x12EE], [0x12F0, 0x130E], [0x1310, 0x1310], [0x1312, 0x1315], [0x1318, 0x131E], [0x1320, 0x1346], [0x1348, 0x135A], [0x13A0, 0x13F4], [0x1401, 0x166C], [0x166F, 0x1676], [0x1681, 0x169A], [0x16A0, 0x16EA], [0x1700, 0x170C], [0x170E, 0x1711], [0x1720, 0x1731], [0x1740, 0x1751], [0x1760, 0x176C], [0x176E, 0x1770], [0x1780, 0x17B3], [0x17DC, 0x17DC], [0x1820, 0x1842], [0x1844, 0x1877], [0x1880, 0x18A8], [0x2135, 0x2138], [0x3006, 0x3006], [0x303C, 0x303C], [0x3041, 0x3096], [0x309F, 0x309F], [0x30A1, 0x30FA], [0x30FF, 0x30FF], [0x3105, 0x312C], [0x3131, 0x318E], [0x31A0, 0x31B7], [0x31F0, 0x31FF], [0x3400, 0x4DB5], [0x4E00, 0x9FA5], [0xA000, 0xA48C], [0xAC00, 0xD7A3], [0xF900, 0xFA2D], [0xFA30, 0xFA6A], [0xFB1D, 0xFB1D], [0xFB1F, 0xFB28], [0xFB2A, 0xFB36], [0xFB38, 0xFB3C], [0xFB3E, 0xFB3E], [0xFB40, 0xFB41], [0xFB43, 0xFB44], [0xFB46, 0xFBB1], [0xFBD3, 0xFD3D], [0xFD50, 0xFD8F], [0xFD92, 0xFDC7], [0xFDF0, 0xFDFB], [0xFE70, 0xFE74], [0xFE76, 0xFEFC], [0xFF66, 0xFF6F], [0xFF71, 0xFF9D], [0xFFA0, 0xFFBE], [0xFFC2, 0xFFC7], [0xFFCA, 0xFFCF], [0xFFD2, 0xFFD7], [0xFFDA, 0xFFDC]]; -Nl = [[0x16EE, 0x16F0], [0x2160, 0x2183], [0x3007, 0x3007], [0x3021, 0x3029], [0x3038, 0x303A]]; -Mn = [[0x0300, 0x034F], [0x0360, 0x036F], [0x0483, 0x0486], [0x0591, 0x05A1], [0x05A3, 0x05B9], [0x05BB, 0x05BD], [0x05BF, 0x05BF], [0x05C1, 0x05C2], [0x05C4, 0x05C4], [0x064B, 0x0655], [0x0670, 0x0670], [0x06D6, 0x06DC], [0x06DF, 0x06E4], [0x06E7, 0x06E8], [0x06EA, 0x06ED], [0x0711, 0x0711], [0x0730, 0x074A], [0x07A6, 0x07B0], [0x0901, 0x0902], [0x093C, 0x093C], [0x0941, 0x0948], [0x094D, 0x094D], [0x0951, 0x0954], [0x0962, 0x0963], [0x0981, 0x0981], [0x09BC, 0x09BC], [0x09C1, 0x09C4], [0x09CD, 0x09CD], [0x09E2, 0x09E3], [0x0A02, 0x0A02], [0x0A3C, 0x0A3C], [0x0A41, 0x0A42], [0x0A47, 0x0A48], [0x0A4B, 0x0A4D], [0x0A70, 0x0A71], [0x0A81, 0x0A82], [0x0ABC, 0x0ABC], [0x0AC1, 0x0AC5], [0x0AC7, 0x0AC8], [0x0ACD, 0x0ACD], [0x0B01, 0x0B01], [0x0B3C, 0x0B3C], [0x0B3F, 0x0B3F], [0x0B41, 0x0B43], [0x0B4D, 0x0B4D], [0x0B56, 0x0B56], [0x0B82, 0x0B82], [0x0BC0, 0x0BC0], [0x0BCD, 0x0BCD], [0x0C3E, 0x0C40], [0x0C46, 0x0C48], [0x0C4A, 0x0C4D], [0x0C55, 0x0C56], [0x0CBF, 0x0CBF], [0x0CC6, 0x0CC6], [0x0CCC, 0x0CCD], [0x0D41, 0x0D43], [0x0D4D, 0x0D4D], [0x0DCA, 0x0DCA], [0x0DD2, 0x0DD4], [0x0DD6, 0x0DD6], [0x0E31, 0x0E31], [0x0E34, 0x0E3A], [0x0E47, 0x0E4E], [0x0EB1, 0x0EB1], [0x0EB4, 0x0EB9], [0x0EBB, 0x0EBC], [0x0EC8, 0x0ECD], [0x0F18, 0x0F19], [0x0F35, 0x0F35], [0x0F37, 0x0F37], [0x0F39, 0x0F39], [0x0F71, 0x0F7E], [0x0F80, 0x0F84], [0x0F86, 0x0F87], [0x0F90, 0x0F97], [0x0F99, 0x0FBC], [0x0FC6, 0x0FC6], [0x102D, 0x1030], [0x1032, 0x1032], [0x1036, 0x1037], [0x1039, 0x1039], [0x1058, 0x1059], [0x1712, 0x1714], [0x1732, 0x1734], [0x1752, 0x1753], [0x1772, 0x1773], [0x17B7, 0x17BD], [0x17C6, 0x17C6], [0x17C9, 0x17D3], [0x180B, 0x180D], [0x18A9, 0x18A9], [0x20D0, 0x20DC], [0x20E1, 0x20E1], [0x20E5, 0x20EA], [0x302A, 0x302F], [0x3099, 0x309A], [0xFB1E, 0xFB1E], [0xFE00, 0xFE0F], [0xFE20, 0xFE23]]; -Mc = [[0x0903, 0x0903], [0x093E, 0x0940], [0x0949, 0x094C], [0x0982, 0x0983], [0x09BE, 0x09C0], [0x09C7, 0x09C8], [0x09CB, 0x09CC], [0x09D7, 0x09D7], [0x0A3E, 0x0A40], [0x0A83, 0x0A83], [0x0ABE, 0x0AC0], [0x0AC9, 0x0AC9], [0x0ACB, 0x0ACC], [0x0B02, 0x0B03], [0x0B3E, 0x0B3E], [0x0B40, 0x0B40], [0x0B47, 0x0B48], [0x0B4B, 0x0B4C], [0x0B57, 0x0B57], [0x0BBE, 0x0BBF], [0x0BC1, 0x0BC2], [0x0BC6, 0x0BC8], [0x0BCA, 0x0BCC], [0x0BD7, 0x0BD7], [0x0C01, 0x0C03], [0x0C41, 0x0C44], [0x0C82, 0x0C83], [0x0CBE, 0x0CBE], [0x0CC0, 0x0CC4], [0x0CC7, 0x0CC8], [0x0CCA, 0x0CCB], [0x0CD5, 0x0CD6], [0x0D02, 0x0D03], [0x0D3E, 0x0D40], [0x0D46, 0x0D48], [0x0D4A, 0x0D4C], [0x0D57, 0x0D57], [0x0D82, 0x0D83], [0x0DCF, 0x0DD1], [0x0DD8, 0x0DDF], [0x0DF2, 0x0DF3], [0x0F3E, 0x0F3F], [0x0F7F, 0x0F7F], [0x102C, 0x102C], [0x1031, 0x1031], [0x1038, 0x1038], [0x1056, 0x1057], [0x17B4, 0x17B6], [0x17BE, 0x17C5], [0x17C7, 0x17C8]]; -Nd = [[0x0030, 0x0039], [0x0660, 0x0669], [0x06F0, 0x06F9], [0x0966, 0x096F], [0x09E6, 0x09EF], [0x0A66, 0x0A6F], [0x0AE6, 0x0AEF], [0x0B66, 0x0B6F], [0x0BE7, 0x0BEF], [0x0C66, 0x0C6F], [0x0CE6, 0x0CEF], [0x0D66, 0x0D6F], [0x0E50, 0x0E59], [0x0ED0, 0x0ED9], [0x0F20, 0x0F29], [0x1040, 0x1049], [0x1369, 0x1371], [0x17E0, 0x17E9], [0x1810, 0x1819], [0xFF10, 0xFF19]]; -Pc = [[0x005F, 0x005F], [0x203F, 0x2040], [0x30FB, 0x30FB], [0xFE33, 0xFE34], [0xFE4D, 0xFE4F], [0xFF3F, 0xFF3F], [0xFF65, 0xFF65]]; - -UnicodeLetterLu = []; -UnicodeLetterLl = []; -UnicodeLetterLt = []; -UnicodeLetterLm = []; -UnicodeLetterLo = []; -UnicodeLetterNl = []; -UnicodeLetterMn = []; -UnicodeLetterMc = []; -UnicodeLetterNd = []; -UnicodeLetterPc = []; - -for (indexI = 0; indexI < Lu.length; indexI++) { - for (indexJ = Lu[indexI][0]; indexJ <= Lu[indexI][1]; indexJ++) { - UnicodeLetterLu[indexJ] = true; - } -} -for (indexI = 0; indexI < Ll.length; indexI++) { - for (indexJ = Ll[indexI][0]; indexJ <= Ll[indexI][1]; indexJ++) { - UnicodeLetterLl[indexJ] = true; - } -} -for (indexI = 0; indexI < Lt.length; indexI++) { - for (indexJ = Lt[indexI][0]; indexJ <= Lt[indexI][1]; indexJ++) { - UnicodeLetterLt[indexJ] = true; - } -} -for (indexI = 0; indexI < Lm.length; indexI++) { - for (indexJ = Lm[indexI][0]; indexJ <= Lm[indexI][1]; indexJ++) { - UnicodeLetterLm[indexJ] = true; - } -} -for (indexI = 0; indexI < Lo.length; indexI++) { - for (indexJ = Lo[indexI][0]; indexJ <= Lo[indexI][1]; indexJ++) { - UnicodeLetterLo[indexJ] = true; - } -} -for (indexI = 0; indexI < Nl.length; indexI++) { - for (indexJ = Nl[indexI][0]; indexJ <= Nl[indexI][1]; indexJ++) { - UnicodeLetterNl[indexJ] = true; - } -} -for (indexI = 0; indexI < Mn.length; indexI++) { - for (indexJ = Mn[indexI][0]; indexJ <= Mn[indexI][1]; indexJ++) { - UnicodeLetterMn[indexJ] = true; - } -} -for (indexI = 0; indexI < Mc.length; indexI++) { - for (indexJ = Mc[indexI][0]; indexJ <= Mc[indexI][1]; indexJ++) { - UnicodeLetterMc[indexJ] = true; - } -} -for (indexI = 0; indexI < Nd.length; indexI++) { - for (indexJ = Nd[indexI][0]; indexJ <= Nd[indexI][1]; indexJ++) { - UnicodeLetterNd[indexJ] = true; - } -} -for (indexI = 0; indexI < Pc.length; indexI++) { - for (indexJ = Pc[indexI][0]; indexJ <= Pc[indexI][1]; indexJ++) { - UnicodeLetterPc[indexJ] = true; - } -} - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; -for (index = 0; index <= 65535; index++) { - if ((UnicodeLetterLu[index] === undefined) && (UnicodeLetterLl[index] === undefined) && (UnicodeLetterLt[index] === undefined) && (UnicodeLetterLm[index] === undefined) && (UnicodeLetterLo[index] === undefined) && (UnicodeLetterNl[index] === undefined) && (UnicodeLetterMn[index] === undefined) && (UnicodeLetterMc[index] === undefined) && (UnicodeLetterNd[index] === undefined) && (UnicodeLetterPc[index] === undefined) && (index !== 0x0024) && (index !== 0x005F)) { - try { - var identifier = "$" + String.fromCharCode(index) + "1"; - eval("var " + identifier + "=1"); - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; - } catch (e) { - } - count++; - } -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_320/S7.6_A3.2.js b/tests/ES3/Unicode/Unicode_320/S7.6_A3.2.js deleted file mode 100644 index d6b8ad349..000000000 --- a/tests/ES3/Unicode/Unicode_320/S7.6_A3.2.js +++ /dev/null @@ -1,124 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A3.2; - * @section: 7.6; - * @assertion: IdentifierName must begin only IdentifierStart character; - * @description: Complex test with eval; -*/ - -//CHECK -Lu = [[0x0041, 0x005A], [0x00C0, 0x00D6], [0x00D8, 0x00DE], [0x0100, 0x0100], [0x0102, 0x0102], [0x0104, 0x0104], [0x0106, 0x0106], [0x0108, 0x0108], [0x010A, 0x010A], [0x010C, 0x010C], [0x010E, 0x010E], [0x0110, 0x0110], [0x0112, 0x0112], [0x0114, 0x0114], [0x0116, 0x0116], [0x0118, 0x0118], [0x011A, 0x011A], [0x011C, 0x011C], [0x011E, 0x011E], [0x0120, 0x0120], [0x0122, 0x0122], [0x0124, 0x0124], [0x0126, 0x0126], [0x0128, 0x0128], [0x012A, 0x012A], [0x012C, 0x012C], [0x012E, 0x012E], [0x0130, 0x0130], [0x0132, 0x0132], [0x0134, 0x0134], [0x0136, 0x0136], [0x0139, 0x0139], [0x013B, 0x013B], [0x013D, 0x013D], [0x013F, 0x013F], [0x0141, 0x0141], [0x0143, 0x0143], [0x0145, 0x0145], [0x0147, 0x0147], [0x014A, 0x014A], [0x014C, 0x014C], [0x014E, 0x014E], [0x0150, 0x0150], [0x0152, 0x0152], [0x0154, 0x0154], [0x0156, 0x0156], [0x0158, 0x0158], [0x015A, 0x015A], [0x015C, 0x015C], [0x015E, 0x015E], [0x0160, 0x0160], [0x0162, 0x0162], [0x0164, 0x0164], [0x0166, 0x0166], [0x0168, 0x0168], [0x016A, 0x016A], [0x016C, 0x016C], [0x016E, 0x016E], [0x0170, 0x0170], [0x0172, 0x0172], [0x0174, 0x0174], [0x0176, 0x0176], [0x0178, 0x0179], [0x017B, 0x017B], [0x017D, 0x017D], [0x0181, 0x0182], [0x0184, 0x0184], [0x0186, 0x0187], [0x0189, 0x018B], [0x018E, 0x0191], [0x0193, 0x0194], [0x0196, 0x0198], [0x019C, 0x019D], [0x019F, 0x01A0], [0x01A2, 0x01A2], [0x01A4, 0x01A4], [0x01A6, 0x01A7], [0x01A9, 0x01A9], [0x01AC, 0x01AC], [0x01AE, 0x01AF], [0x01B1, 0x01B3], [0x01B5, 0x01B5], [0x01B7, 0x01B8], [0x01BC, 0x01BC], [0x01C4, 0x01C4], [0x01C7, 0x01C7], [0x01CA, 0x01CA], [0x01CD, 0x01CD], [0x01CF, 0x01CF], [0x01D1, 0x01D1], [0x01D3, 0x01D3], [0x01D5, 0x01D5], [0x01D7, 0x01D7], [0x01D9, 0x01D9], [0x01DB, 0x01DB], [0x01DE, 0x01DE], [0x01E0, 0x01E0], [0x01E2, 0x01E2], [0x01E4, 0x01E4], [0x01E6, 0x01E6], [0x01E8, 0x01E8], [0x01EA, 0x01EA], [0x01EC, 0x01EC], [0x01EE, 0x01EE], [0x01F1, 0x01F1], [0x01F4, 0x01F4], [0x01F6, 0x01F8], [0x01FA, 0x01FA], [0x01FC, 0x01FC], [0x01FE, 0x01FE], [0x0200, 0x0200], [0x0202, 0x0202], [0x0204, 0x0204], [0x0206, 0x0206], [0x0208, 0x0208], [0x020A, 0x020A], [0x020C, 0x020C], [0x020E, 0x020E], [0x0210, 0x0210], [0x0212, 0x0212], [0x0214, 0x0214], [0x0216, 0x0216], [0x0218, 0x0218], [0x021A, 0x021A], [0x021C, 0x021C], [0x021E, 0x021E], [0x0220, 0x0220], [0x0222, 0x0222], [0x0224, 0x0224], [0x0226, 0x0226], [0x0228, 0x0228], [0x022A, 0x022A], [0x022C, 0x022C], [0x022E, 0x022E], [0x0230, 0x0230], [0x0232, 0x0232], [0x0386, 0x0386], [0x0388, 0x038A], [0x038C, 0x038C], [0x038E, 0x038F], [0x0391, 0x03A1], [0x03A3, 0x03AB], [0x03D2, 0x03D4], [0x03D8, 0x03D8], [0x03DA, 0x03DA], [0x03DC, 0x03DC], [0x03DE, 0x03DE], [0x03E0, 0x03E0], [0x03E2, 0x03E2], [0x03E4, 0x03E4], [0x03E6, 0x03E6], [0x03E8, 0x03E8], [0x03EA, 0x03EA], [0x03EC, 0x03EC], [0x03EE, 0x03EE], [0x03F4, 0x03F4], [0x0400, 0x042F], [0x0460, 0x0460], [0x0462, 0x0462], [0x0464, 0x0464], [0x0466, 0x0466], [0x0468, 0x0468], [0x046A, 0x046A], [0x046C, 0x046C], [0x046E, 0x046E], [0x0470, 0x0470], [0x0472, 0x0472], [0x0474, 0x0474], [0x0476, 0x0476], [0x0478, 0x0478], [0x047A, 0x047A], [0x047C, 0x047C], [0x047E, 0x047E], [0x0480, 0x0480], [0x048A, 0x048A], [0x048C, 0x048C], [0x048E, 0x048E], [0x0490, 0x0490], [0x0492, 0x0492], [0x0494, 0x0494], [0x0496, 0x0496], [0x0498, 0x0498], [0x049A, 0x049A], [0x049C, 0x049C], [0x049E, 0x049E], [0x04A0, 0x04A0], [0x04A2, 0x04A2], [0x04A4, 0x04A4], [0x04A6, 0x04A6], [0x04A8, 0x04A8], [0x04AA, 0x04AA], [0x04AC, 0x04AC], [0x04AE, 0x04AE], [0x04B0, 0x04B0], [0x04B2, 0x04B2], [0x04B4, 0x04B4], [0x04B6, 0x04B6], [0x04B8, 0x04B8], [0x04BA, 0x04BA], [0x04BC, 0x04BC], [0x04BE, 0x04BE], [0x04C0, 0x04C1], [0x04C3, 0x04C3], [0x04C5, 0x04C5], [0x04C7, 0x04C7], [0x04C9, 0x04C9], [0x04CB, 0x04CB], [0x04CD, 0x04CD], [0x04D0, 0x04D0], [0x04D2, 0x04D2], [0x04D4, 0x04D4], [0x04D6, 0x04D6], [0x04D8, 0x04D8], [0x04DA, 0x04DA], [0x04DC, 0x04DC], [0x04DE, 0x04DE], [0x04E0, 0x04E0], [0x04E2, 0x04E2], [0x04E4, 0x04E4], [0x04E6, 0x04E6], [0x04E8, 0x04E8], [0x04EA, 0x04EA], [0x04EC, 0x04EC], [0x04EE, 0x04EE], [0x04F0, 0x04F0], [0x04F2, 0x04F2], [0x04F4, 0x04F4], [0x04F8, 0x04F8], [0x0500, 0x0500], [0x0502, 0x0502], [0x0504, 0x0504], [0x0506, 0x0506], [0x0508, 0x0508], [0x050A, 0x050A], [0x050C, 0x050C], [0x050E, 0x050E], [0x0531, 0x0556], [0x10A0, 0x10C5], [0x1E00, 0x1E00], [0x1E02, 0x1E02], [0x1E04, 0x1E04], [0x1E06, 0x1E06], [0x1E08, 0x1E08], [0x1E0A, 0x1E0A], [0x1E0C, 0x1E0C], [0x1E0E, 0x1E0E], [0x1E10, 0x1E10], [0x1E12, 0x1E12], [0x1E14, 0x1E14], [0x1E16, 0x1E16], [0x1E18, 0x1E18], [0x1E1A, 0x1E1A], [0x1E1C, 0x1E1C], [0x1E1E, 0x1E1E], [0x1E20, 0x1E20], [0x1E22, 0x1E22], [0x1E24, 0x1E24], [0x1E26, 0x1E26], [0x1E28, 0x1E28], [0x1E2A, 0x1E2A], [0x1E2C, 0x1E2C], [0x1E2E, 0x1E2E], [0x1E30, 0x1E30], [0x1E32, 0x1E32], [0x1E34, 0x1E34], [0x1E36, 0x1E36], [0x1E38, 0x1E38], [0x1E3A, 0x1E3A], [0x1E3C, 0x1E3C], [0x1E3E, 0x1E3E], [0x1E40, 0x1E40], [0x1E42, 0x1E42], [0x1E44, 0x1E44], [0x1E46, 0x1E46], [0x1E48, 0x1E48], [0x1E4A, 0x1E4A], [0x1E4C, 0x1E4C], [0x1E4E, 0x1E4E], [0x1E50, 0x1E50], [0x1E52, 0x1E52], [0x1E54, 0x1E54], [0x1E56, 0x1E56], [0x1E58, 0x1E58], [0x1E5A, 0x1E5A], [0x1E5C, 0x1E5C], [0x1E5E, 0x1E5E], [0x1E60, 0x1E60], [0x1E62, 0x1E62], [0x1E64, 0x1E64], [0x1E66, 0x1E66], [0x1E68, 0x1E68], [0x1E6A, 0x1E6A], [0x1E6C, 0x1E6C], [0x1E6E, 0x1E6E], [0x1E70, 0x1E70], [0x1E72, 0x1E72], [0x1E74, 0x1E74], [0x1E76, 0x1E76], [0x1E78, 0x1E78], [0x1E7A, 0x1E7A], [0x1E7C, 0x1E7C], [0x1E7E, 0x1E7E], [0x1E80, 0x1E80], [0x1E82, 0x1E82], [0x1E84, 0x1E84], [0x1E86, 0x1E86], [0x1E88, 0x1E88], [0x1E8A, 0x1E8A], [0x1E8C, 0x1E8C], [0x1E8E, 0x1E8E], [0x1E90, 0x1E90], [0x1E92, 0x1E92], [0x1E94, 0x1E94], [0x1EA0, 0x1EA0], [0x1EA2, 0x1EA2], [0x1EA4, 0x1EA4], [0x1EA6, 0x1EA6], [0x1EA8, 0x1EA8], [0x1EAA, 0x1EAA], [0x1EAC, 0x1EAC], [0x1EAE, 0x1EAE], [0x1EB0, 0x1EB0], [0x1EB2, 0x1EB2], [0x1EB4, 0x1EB4], [0x1EB6, 0x1EB6], [0x1EB8, 0x1EB8], [0x1EBA, 0x1EBA], [0x1EBC, 0x1EBC], [0x1EBE, 0x1EBE], [0x1EC0, 0x1EC0], [0x1EC2, 0x1EC2], [0x1EC4, 0x1EC4], [0x1EC6, 0x1EC6], [0x1EC8, 0x1EC8], [0x1ECA, 0x1ECA], [0x1ECC, 0x1ECC], [0x1ECE, 0x1ECE], [0x1ED0, 0x1ED0], [0x1ED2, 0x1ED2], [0x1ED4, 0x1ED4], [0x1ED6, 0x1ED6], [0x1ED8, 0x1ED8], [0x1EDA, 0x1EDA], [0x1EDC, 0x1EDC], [0x1EDE, 0x1EDE], [0x1EE0, 0x1EE0], [0x1EE2, 0x1EE2], [0x1EE4, 0x1EE4], [0x1EE6, 0x1EE6], [0x1EE8, 0x1EE8], [0x1EEA, 0x1EEA], [0x1EEC, 0x1EEC], [0x1EEE, 0x1EEE], [0x1EF0, 0x1EF0], [0x1EF2, 0x1EF2], [0x1EF4, 0x1EF4], [0x1EF6, 0x1EF6], [0x1EF8, 0x1EF8], [0x1F08, 0x1F0F], [0x1F18, 0x1F1D], [0x1F28, 0x1F2F], [0x1F38, 0x1F3F], [0x1F48, 0x1F4D], [0x1F59, 0x1F59], [0x1F5B, 0x1F5B], [0x1F5D, 0x1F5D], [0x1F5F, 0x1F5F], [0x1F68, 0x1F6F], [0x1FB8, 0x1FBB], [0x1FC8, 0x1FCB], [0x1FD8, 0x1FDB], [0x1FE8, 0x1FEC], [0x1FF8, 0x1FFB], [0x2102, 0x2102], [0x2107, 0x2107], [0x210B, 0x210D], [0x2110, 0x2112], [0x2115, 0x2115], [0x2119, 0x211D], [0x2124, 0x2124], [0x2126, 0x2126], [0x2128, 0x2128], [0x212A, 0x212D], [0x2130, 0x2131], [0x2133, 0x2133], [0x213E, 0x213F], [0x2145, 0x2145], [0xFF21, 0xFF3A]]; -Ll = [[0x0061, 0x007A], [0x00AA, 0x00AA], [0x00B5, 0x00B5], [0x00BA, 0x00BA], [0x00DF, 0x00F6], [0x00F8, 0x00FF], [0x0101, 0x0101], [0x0103, 0x0103], [0x0105, 0x0105], [0x0107, 0x0107], [0x0109, 0x0109], [0x010B, 0x010B], [0x010D, 0x010D], [0x010F, 0x010F], [0x0111, 0x0111], [0x0113, 0x0113], [0x0115, 0x0115], [0x0117, 0x0117], [0x0119, 0x0119], [0x011B, 0x011B], [0x011D, 0x011D], [0x011F, 0x011F], [0x0121, 0x0121], [0x0123, 0x0123], [0x0125, 0x0125], [0x0127, 0x0127], [0x0129, 0x0129], [0x012B, 0x012B], [0x012D, 0x012D], [0x012F, 0x012F], [0x0131, 0x0131], [0x0133, 0x0133], [0x0135, 0x0135], [0x0137, 0x0138], [0x013A, 0x013A], [0x013C, 0x013C], [0x013E, 0x013E], [0x0140, 0x0140], [0x0142, 0x0142], [0x0144, 0x0144], [0x0146, 0x0146], [0x0148, 0x0149], [0x014B, 0x014B], [0x014D, 0x014D], [0x014F, 0x014F], [0x0151, 0x0151], [0x0153, 0x0153], [0x0155, 0x0155], [0x0157, 0x0157], [0x0159, 0x0159], [0x015B, 0x015B], [0x015D, 0x015D], [0x015F, 0x015F], [0x0161, 0x0161], [0x0163, 0x0163], [0x0165, 0x0165], [0x0167, 0x0167], [0x0169, 0x0169], [0x016B, 0x016B], [0x016D, 0x016D], [0x016F, 0x016F], [0x0171, 0x0171], [0x0173, 0x0173], [0x0175, 0x0175], [0x0177, 0x0177], [0x017A, 0x017A], [0x017C, 0x017C], [0x017E, 0x0180], [0x0183, 0x0183], [0x0185, 0x0185], [0x0188, 0x0188], [0x018C, 0x018D], [0x0192, 0x0192], [0x0195, 0x0195], [0x0199, 0x019B], [0x019E, 0x019E], [0x01A1, 0x01A1], [0x01A3, 0x01A3], [0x01A5, 0x01A5], [0x01A8, 0x01A8], [0x01AA, 0x01AB], [0x01AD, 0x01AD], [0x01B0, 0x01B0], [0x01B4, 0x01B4], [0x01B6, 0x01B6], [0x01B9, 0x01BA], [0x01BD, 0x01BF], [0x01C6, 0x01C6], [0x01C9, 0x01C9], [0x01CC, 0x01CC], [0x01CE, 0x01CE], [0x01D0, 0x01D0], [0x01D2, 0x01D2], [0x01D4, 0x01D4], [0x01D6, 0x01D6], [0x01D8, 0x01D8], [0x01DA, 0x01DA], [0x01DC, 0x01DD], [0x01DF, 0x01DF], [0x01E1, 0x01E1], [0x01E3, 0x01E3], [0x01E5, 0x01E5], [0x01E7, 0x01E7], [0x01E9, 0x01E9], [0x01EB, 0x01EB], [0x01ED, 0x01ED], [0x01EF, 0x01F0], [0x01F3, 0x01F3], [0x01F5, 0x01F5], [0x01F9, 0x01F9], [0x01FB, 0x01FB], [0x01FD, 0x01FD], [0x01FF, 0x01FF], [0x0201, 0x0201], [0x0203, 0x0203], [0x0205, 0x0205], [0x0207, 0x0207], [0x0209, 0x0209], [0x020B, 0x020B], [0x020D, 0x020D], [0x020F, 0x020F], [0x0211, 0x0211], [0x0213, 0x0213], [0x0215, 0x0215], [0x0217, 0x0217], [0x0219, 0x0219], [0x021B, 0x021B], [0x021D, 0x021D], [0x021F, 0x021F], [0x0223, 0x0223], [0x0225, 0x0225], [0x0227, 0x0227], [0x0229, 0x0229], [0x022B, 0x022B], [0x022D, 0x022D], [0x022F, 0x022F], [0x0231, 0x0231], [0x0233, 0x0233], [0x0250, 0x02AD], [0x0390, 0x0390], [0x03AC, 0x03CE], [0x03D0, 0x03D1], [0x03D5, 0x03D7], [0x03D9, 0x03D9], [0x03DB, 0x03DB], [0x03DD, 0x03DD], [0x03DF, 0x03DF], [0x03E1, 0x03E1], [0x03E3, 0x03E3], [0x03E5, 0x03E5], [0x03E7, 0x03E7], [0x03E9, 0x03E9], [0x03EB, 0x03EB], [0x03ED, 0x03ED], [0x03EF, 0x03F3], [0x03F5, 0x03F5], [0x0430, 0x045F], [0x0461, 0x0461], [0x0463, 0x0463], [0x0465, 0x0465], [0x0467, 0x0467], [0x0469, 0x0469], [0x046B, 0x046B], [0x046D, 0x046D], [0x046F, 0x046F], [0x0471, 0x0471], [0x0473, 0x0473], [0x0475, 0x0475], [0x0477, 0x0477], [0x0479, 0x0479], [0x047B, 0x047B], [0x047D, 0x047D], [0x047F, 0x047F], [0x0481, 0x0481], [0x048B, 0x048B], [0x048D, 0x048D], [0x048F, 0x048F], [0x0491, 0x0491], [0x0493, 0x0493], [0x0495, 0x0495], [0x0497, 0x0497], [0x0499, 0x0499], [0x049B, 0x049B], [0x049D, 0x049D], [0x049F, 0x049F], [0x04A1, 0x04A1], [0x04A3, 0x04A3], [0x04A5, 0x04A5], [0x04A7, 0x04A7], [0x04A9, 0x04A9], [0x04AB, 0x04AB], [0x04AD, 0x04AD], [0x04AF, 0x04AF], [0x04B1, 0x04B1], [0x04B3, 0x04B3], [0x04B5, 0x04B5], [0x04B7, 0x04B7], [0x04B9, 0x04B9], [0x04BB, 0x04BB], [0x04BD, 0x04BD], [0x04BF, 0x04BF], [0x04C2, 0x04C2], [0x04C4, 0x04C4], [0x04C6, 0x04C6], [0x04C8, 0x04C8], [0x04CA, 0x04CA], [0x04CC, 0x04CC], [0x04CE, 0x04CE], [0x04D1, 0x04D1], [0x04D3, 0x04D3], [0x04D5, 0x04D5], [0x04D7, 0x04D7], [0x04D9, 0x04D9], [0x04DB, 0x04DB], [0x04DD, 0x04DD], [0x04DF, 0x04DF], [0x04E1, 0x04E1], [0x04E3, 0x04E3], [0x04E5, 0x04E5], [0x04E7, 0x04E7], [0x04E9, 0x04E9], [0x04EB, 0x04EB], [0x04ED, 0x04ED], [0x04EF, 0x04EF], [0x04F1, 0x04F1], [0x04F3, 0x04F3], [0x04F5, 0x04F5], [0x04F9, 0x04F9], [0x0501, 0x0501], [0x0503, 0x0503], [0x0505, 0x0505], [0x0507, 0x0507], [0x0509, 0x0509], [0x050B, 0x050B], [0x050D, 0x050D], [0x050F, 0x050F], [0x0561, 0x0587], [0x1E01, 0x1E01], [0x1E03, 0x1E03], [0x1E05, 0x1E05], [0x1E07, 0x1E07], [0x1E09, 0x1E09], [0x1E0B, 0x1E0B], [0x1E0D, 0x1E0D], [0x1E0F, 0x1E0F], [0x1E11, 0x1E11], [0x1E13, 0x1E13], [0x1E15, 0x1E15], [0x1E17, 0x1E17], [0x1E19, 0x1E19], [0x1E1B, 0x1E1B], [0x1E1D, 0x1E1D], [0x1E1F, 0x1E1F], [0x1E21, 0x1E21], [0x1E23, 0x1E23], [0x1E25, 0x1E25], [0x1E27, 0x1E27], [0x1E29, 0x1E29], [0x1E2B, 0x1E2B], [0x1E2D, 0x1E2D], [0x1E2F, 0x1E2F], [0x1E31, 0x1E31], [0x1E33, 0x1E33], [0x1E35, 0x1E35], [0x1E37, 0x1E37], [0x1E39, 0x1E39], [0x1E3B, 0x1E3B], [0x1E3D, 0x1E3D], [0x1E3F, 0x1E3F], [0x1E41, 0x1E41], [0x1E43, 0x1E43], [0x1E45, 0x1E45], [0x1E47, 0x1E47], [0x1E49, 0x1E49], [0x1E4B, 0x1E4B], [0x1E4D, 0x1E4D], [0x1E4F, 0x1E4F], [0x1E51, 0x1E51], [0x1E53, 0x1E53], [0x1E55, 0x1E55], [0x1E57, 0x1E57], [0x1E59, 0x1E59], [0x1E5B, 0x1E5B], [0x1E5D, 0x1E5D], [0x1E5F, 0x1E5F], [0x1E61, 0x1E61], [0x1E63, 0x1E63], [0x1E65, 0x1E65], [0x1E67, 0x1E67], [0x1E69, 0x1E69], [0x1E6B, 0x1E6B], [0x1E6D, 0x1E6D], [0x1E6F, 0x1E6F], [0x1E71, 0x1E71], [0x1E73, 0x1E73], [0x1E75, 0x1E75], [0x1E77, 0x1E77], [0x1E79, 0x1E79], [0x1E7B, 0x1E7B], [0x1E7D, 0x1E7D], [0x1E7F, 0x1E7F], [0x1E81, 0x1E81], [0x1E83, 0x1E83], [0x1E85, 0x1E85], [0x1E87, 0x1E87], [0x1E89, 0x1E89], [0x1E8B, 0x1E8B], [0x1E8D, 0x1E8D], [0x1E8F, 0x1E8F], [0x1E91, 0x1E91], [0x1E93, 0x1E93], [0x1E95, 0x1E9B], [0x1EA1, 0x1EA1], [0x1EA3, 0x1EA3], [0x1EA5, 0x1EA5], [0x1EA7, 0x1EA7], [0x1EA9, 0x1EA9], [0x1EAB, 0x1EAB], [0x1EAD, 0x1EAD], [0x1EAF, 0x1EAF], [0x1EB1, 0x1EB1], [0x1EB3, 0x1EB3], [0x1EB5, 0x1EB5], [0x1EB7, 0x1EB7], [0x1EB9, 0x1EB9], [0x1EBB, 0x1EBB], [0x1EBD, 0x1EBD], [0x1EBF, 0x1EBF], [0x1EC1, 0x1EC1], [0x1EC3, 0x1EC3], [0x1EC5, 0x1EC5], [0x1EC7, 0x1EC7], [0x1EC9, 0x1EC9], [0x1ECB, 0x1ECB], [0x1ECD, 0x1ECD], [0x1ECF, 0x1ECF], [0x1ED1, 0x1ED1], [0x1ED3, 0x1ED3], [0x1ED5, 0x1ED5], [0x1ED7, 0x1ED7], [0x1ED9, 0x1ED9], [0x1EDB, 0x1EDB], [0x1EDD, 0x1EDD], [0x1EDF, 0x1EDF], [0x1EE1, 0x1EE1], [0x1EE3, 0x1EE3], [0x1EE5, 0x1EE5], [0x1EE7, 0x1EE7], [0x1EE9, 0x1EE9], [0x1EEB, 0x1EEB], [0x1EED, 0x1EED], [0x1EEF, 0x1EEF], [0x1EF1, 0x1EF1], [0x1EF3, 0x1EF3], [0x1EF5, 0x1EF5], [0x1EF7, 0x1EF7], [0x1EF9, 0x1EF9], [0x1F00, 0x1F07], [0x1F10, 0x1F15], [0x1F20, 0x1F27], [0x1F30, 0x1F37], [0x1F40, 0x1F45], [0x1F50, 0x1F57], [0x1F60, 0x1F67], [0x1F70, 0x1F7D], [0x1F80, 0x1F87], [0x1F90, 0x1F97], [0x1FA0, 0x1FA7], [0x1FB0, 0x1FB4], [0x1FB6, 0x1FB7], [0x1FBE, 0x1FBE], [0x1FC2, 0x1FC4], [0x1FC6, 0x1FC7], [0x1FD0, 0x1FD3], [0x1FD6, 0x1FD7], [0x1FE0, 0x1FE7], [0x1FF2, 0x1FF4], [0x1FF6, 0x1FF7], [0x2071, 0x2071], [0x207F, 0x207F], [0x210A, 0x210A], [0x210E, 0x210F], [0x2113, 0x2113], [0x212F, 0x212F], [0x2134, 0x2134], [0x2139, 0x2139], [0x213D, 0x213D], [0x2146, 0x2149], [0xFB00, 0xFB06], [0xFB13, 0xFB17], [0xFF41, 0xFF5A]]; -Lt = [[0x01C5, 0x01C5], [0x01C8, 0x01C8], [0x01CB, 0x01CB], [0x01F2, 0x01F2], [0x1F88, 0x1F8F], [0x1F98, 0x1F9F], [0x1FA8, 0x1FAF], [0x1FBC, 0x1FBC], [0x1FCC, 0x1FCC], [0x1FFC, 0x1FFC]]; -Lm = [[0x02B0, 0x02B8], [0x02BB, 0x02C1], [0x02D0, 0x02D1], [0x02E0, 0x02E4], [0x02EE, 0x02EE], [0x037A, 0x037A], [0x0559, 0x0559], [0x0640, 0x0640], [0x06E5, 0x06E6], [0x0E46, 0x0E46], [0x0EC6, 0x0EC6], [0x17D7, 0x17D7], [0x1843, 0x1843], [0x3005, 0x3005], [0x3031, 0x3035], [0x303B, 0x303B], [0x309D, 0x309E], [0x30FC, 0x30FE], [0xFF70, 0xFF70], [0xFF9E, 0xFF9F]]; -Lo = [[0x01BB, 0x01BB], [0x01C0, 0x01C3], [0x05D0, 0x05EA], [0x05F0, 0x05F2], [0x0621, 0x063A], [0x0641, 0x064A], [0x066E, 0x066F], [0x0671, 0x06D3], [0x06D5, 0x06D5], [0x06FA, 0x06FC], [0x0710, 0x0710], [0x0712, 0x072C], [0x0780, 0x07A5], [0x07B1, 0x07B1], [0x0905, 0x0939], [0x093D, 0x093D], [0x0950, 0x0950], [0x0958, 0x0961], [0x0985, 0x098C], [0x098F, 0x0990], [0x0993, 0x09A8], [0x09AA, 0x09B0], [0x09B2, 0x09B2], [0x09B6, 0x09B9], [0x09DC, 0x09DD], [0x09DF, 0x09E1], [0x09F0, 0x09F1], [0x0A05, 0x0A0A], [0x0A0F, 0x0A10], [0x0A13, 0x0A28], [0x0A2A, 0x0A30], [0x0A32, 0x0A33], [0x0A35, 0x0A36], [0x0A38, 0x0A39], [0x0A59, 0x0A5C], [0x0A5E, 0x0A5E], [0x0A72, 0x0A74], [0x0A85, 0x0A8B], [0x0A8D, 0x0A8D], [0x0A8F, 0x0A91], [0x0A93, 0x0AA8], [0x0AAA, 0x0AB0], [0x0AB2, 0x0AB3], [0x0AB5, 0x0AB9], [0x0ABD, 0x0ABD], [0x0AD0, 0x0AD0], [0x0AE0, 0x0AE0], [0x0B05, 0x0B0C], [0x0B0F, 0x0B10], [0x0B13, 0x0B28], [0x0B2A, 0x0B30], [0x0B32, 0x0B33], [0x0B36, 0x0B39], [0x0B3D, 0x0B3D], [0x0B5C, 0x0B5D], [0x0B5F, 0x0B61], [0x0B83, 0x0B83], [0x0B85, 0x0B8A], [0x0B8E, 0x0B90], [0x0B92, 0x0B95], [0x0B99, 0x0B9A], [0x0B9C, 0x0B9C], [0x0B9E, 0x0B9F], [0x0BA3, 0x0BA4], [0x0BA8, 0x0BAA], [0x0BAE, 0x0BB5], [0x0BB7, 0x0BB9], [0x0C05, 0x0C0C], [0x0C0E, 0x0C10], [0x0C12, 0x0C28], [0x0C2A, 0x0C33], [0x0C35, 0x0C39], [0x0C60, 0x0C61], [0x0C85, 0x0C8C], [0x0C8E, 0x0C90], [0x0C92, 0x0CA8], [0x0CAA, 0x0CB3], [0x0CB5, 0x0CB9], [0x0CDE, 0x0CDE], [0x0CE0, 0x0CE1], [0x0D05, 0x0D0C], [0x0D0E, 0x0D10], [0x0D12, 0x0D28], [0x0D2A, 0x0D39], [0x0D60, 0x0D61], [0x0D85, 0x0D96], [0x0D9A, 0x0DB1], [0x0DB3, 0x0DBB], [0x0DBD, 0x0DBD], [0x0DC0, 0x0DC6], [0x0E01, 0x0E30], [0x0E32, 0x0E33], [0x0E40, 0x0E45], [0x0E81, 0x0E82], [0x0E84, 0x0E84], [0x0E87, 0x0E88], [0x0E8A, 0x0E8A], [0x0E8D, 0x0E8D], [0x0E94, 0x0E97], [0x0E99, 0x0E9F], [0x0EA1, 0x0EA3], [0x0EA5, 0x0EA5], [0x0EA7, 0x0EA7], [0x0EAA, 0x0EAB], [0x0EAD, 0x0EB0], [0x0EB2, 0x0EB3], [0x0EBD, 0x0EBD], [0x0EC0, 0x0EC4], [0x0EDC, 0x0EDD], [0x0F00, 0x0F00], [0x0F40, 0x0F47], [0x0F49, 0x0F6A], [0x0F88, 0x0F8B], [0x1000, 0x1021], [0x1023, 0x1027], [0x1029, 0x102A], [0x1050, 0x1055], [0x10D0, 0x10F8], [0x1100, 0x1159], [0x115F, 0x11A2], [0x11A8, 0x11F9], [0x1200, 0x1206], [0x1208, 0x1246], [0x1248, 0x1248], [0x124A, 0x124D], [0x1250, 0x1256], [0x1258, 0x1258], [0x125A, 0x125D], [0x1260, 0x1286], [0x1288, 0x1288], [0x128A, 0x128D], [0x1290, 0x12AE], [0x12B0, 0x12B0], [0x12B2, 0x12B5], [0x12B8, 0x12BE], [0x12C0, 0x12C0], [0x12C2, 0x12C5], [0x12C8, 0x12CE], [0x12D0, 0x12D6], [0x12D8, 0x12EE], [0x12F0, 0x130E], [0x1310, 0x1310], [0x1312, 0x1315], [0x1318, 0x131E], [0x1320, 0x1346], [0x1348, 0x135A], [0x13A0, 0x13F4], [0x1401, 0x166C], [0x166F, 0x1676], [0x1681, 0x169A], [0x16A0, 0x16EA], [0x1700, 0x170C], [0x170E, 0x1711], [0x1720, 0x1731], [0x1740, 0x1751], [0x1760, 0x176C], [0x176E, 0x1770], [0x1780, 0x17B3], [0x17DC, 0x17DC], [0x1820, 0x1842], [0x1844, 0x1877], [0x1880, 0x18A8], [0x2135, 0x2138], [0x3006, 0x3006], [0x303C, 0x303C], [0x3041, 0x3096], [0x309F, 0x309F], [0x30A1, 0x30FA], [0x30FF, 0x30FF], [0x3105, 0x312C], [0x3131, 0x318E], [0x31A0, 0x31B7], [0x31F0, 0x31FF], [0x3400, 0x4DB5], [0x4E00, 0x9FA5], [0xA000, 0xA48C], [0xAC00, 0xD7A3], [0xF900, 0xFA2D], [0xFA30, 0xFA6A], [0xFB1D, 0xFB1D], [0xFB1F, 0xFB28], [0xFB2A, 0xFB36], [0xFB38, 0xFB3C], [0xFB3E, 0xFB3E], [0xFB40, 0xFB41], [0xFB43, 0xFB44], [0xFB46, 0xFBB1], [0xFBD3, 0xFD3D], [0xFD50, 0xFD8F], [0xFD92, 0xFDC7], [0xFDF0, 0xFDFB], [0xFE70, 0xFE74], [0xFE76, 0xFEFC], [0xFF66, 0xFF6F], [0xFF71, 0xFF9D], [0xFFA0, 0xFFBE], [0xFFC2, 0xFFC7], [0xFFCA, 0xFFCF], [0xFFD2, 0xFFD7], [0xFFDA, 0xFFDC]]; -Nl = [[0x16EE, 0x16F0], [0x2160, 0x2183], [0x3007, 0x3007], [0x3021, 0x3029], [0x3038, 0x303A]]; - -UnicodeLetterLu = []; -UnicodeLetterLl = []; -UnicodeLetterLt = []; -UnicodeLetterLm = []; -UnicodeLetterLo = []; -UnicodeLetterNl = []; - -for (indexI = 0; indexI < Lu.length; indexI++) { - for (indexJ = Lu[indexI][0]; indexJ <= Lu[indexI][1]; indexJ++) { - UnicodeLetterLu[indexJ] = true; - } -} -for (indexI = 0; indexI < Ll.length; indexI++) { - for (indexJ = Ll[indexI][0]; indexJ <= Ll[indexI][1]; indexJ++) { - UnicodeLetterLl[indexJ] = true; - } -} -for (indexI = 0; indexI < Lt.length; indexI++) { - for (indexJ = Lt[indexI][0]; indexJ <= Lt[indexI][1]; indexJ++) { - UnicodeLetterLt[indexJ] = true; - } -} -for (indexI = 0; indexI < Lm.length; indexI++) { - for (indexJ = Lm[indexI][0]; indexJ <= Lm[indexI][1]; indexJ++) { - UnicodeLetterLm[indexJ] = true; - } -} -for (indexI = 0; indexI < Lo.length; indexI++) { - for (indexJ = Lo[indexI][0]; indexJ <= Lo[indexI][1]; indexJ++) { - UnicodeLetterLo[indexJ] = true; - } -} -for (indexI = 0; indexI < Nl.length; indexI++) { - for (indexJ = Nl[indexI][0]; indexJ <= Nl[indexI][1]; indexJ++) { - UnicodeLetterNl[indexJ] = true; - } -} - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; -for (index = 0; index <= 65535; index++) { - if ((UnicodeLetterLu[index] === undefined) && (UnicodeLetterLl[index] === undefined) && (UnicodeLetterLt[index] === undefined) && (UnicodeLetterLm[index] === undefined) && (UnicodeLetterLo[index] === undefined) && (UnicodeLetterNl[index] === undefined) && (index !== 0x0024) && (index !== 0x005F)) { - try { - var identifier = String.fromCharCode(index); - eval("var " + identifier + "=1"); - if (errorCount === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; - } catch (e) { - } - count++; - } -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_320/S7.6_A5.2_T1.js b/tests/ES3/Unicode/Unicode_320/S7.6_A5.2_T1.js deleted file mode 100644 index 9101c8ab6..000000000 --- a/tests/ES3/Unicode/Unicode_320/S7.6_A5.2_T1.js +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A5.2_T1; - * @section: 7.6, 6; - * @assertion: If a \UnicodeEscapeSequence sequence were replaced by its UnicodeEscapeSequence's CV, the result must still be a valid Identifier that has the exact same sequence of characters as the original Identifier; - * @description: The CV of UnicodeEscapeSequence is Lu. - * Complex test with eval; -*/ - -//CHECK -Lu = [[0x0041, 0x005A], [0x00C0, 0x00D6], [0x00D8, 0x00DE], [0x0100, 0x0100], [0x0102, 0x0102], [0x0104, 0x0104], [0x0106, 0x0106], [0x0108, 0x0108], [0x010A, 0x010A], [0x010C, 0x010C], [0x010E, 0x010E], [0x0110, 0x0110], [0x0112, 0x0112], [0x0114, 0x0114], [0x0116, 0x0116], [0x0118, 0x0118], [0x011A, 0x011A], [0x011C, 0x011C], [0x011E, 0x011E], [0x0120, 0x0120], [0x0122, 0x0122], [0x0124, 0x0124], [0x0126, 0x0126], [0x0128, 0x0128], [0x012A, 0x012A], [0x012C, 0x012C], [0x012E, 0x012E], [0x0130, 0x0130], [0x0132, 0x0132], [0x0134, 0x0134], [0x0136, 0x0136], [0x0139, 0x0139], [0x013B, 0x013B], [0x013D, 0x013D], [0x013F, 0x013F], [0x0141, 0x0141], [0x0143, 0x0143], [0x0145, 0x0145], [0x0147, 0x0147], [0x014A, 0x014A], [0x014C, 0x014C], [0x014E, 0x014E], [0x0150, 0x0150], [0x0152, 0x0152], [0x0154, 0x0154], [0x0156, 0x0156], [0x0158, 0x0158], [0x015A, 0x015A], [0x015C, 0x015C], [0x015E, 0x015E], [0x0160, 0x0160], [0x0162, 0x0162], [0x0164, 0x0164], [0x0166, 0x0166], [0x0168, 0x0168], [0x016A, 0x016A], [0x016C, 0x016C], [0x016E, 0x016E], [0x0170, 0x0170], [0x0172, 0x0172], [0x0174, 0x0174], [0x0176, 0x0176], [0x0178, 0x0179], [0x017B, 0x017B], [0x017D, 0x017D], [0x0181, 0x0182], [0x0184, 0x0184], [0x0186, 0x0187], [0x0189, 0x018B], [0x018E, 0x0191], [0x0193, 0x0194], [0x0196, 0x0198], [0x019C, 0x019D], [0x019F, 0x01A0], [0x01A2, 0x01A2], [0x01A4, 0x01A4], [0x01A6, 0x01A7], [0x01A9, 0x01A9], [0x01AC, 0x01AC], [0x01AE, 0x01AF], [0x01B1, 0x01B3], [0x01B5, 0x01B5], [0x01B7, 0x01B8], [0x01BC, 0x01BC], [0x01C4, 0x01C4], [0x01C7, 0x01C7], [0x01CA, 0x01CA], [0x01CD, 0x01CD], [0x01CF, 0x01CF], [0x01D1, 0x01D1], [0x01D3, 0x01D3], [0x01D5, 0x01D5], [0x01D7, 0x01D7], [0x01D9, 0x01D9], [0x01DB, 0x01DB], [0x01DE, 0x01DE], [0x01E0, 0x01E0], [0x01E2, 0x01E2], [0x01E4, 0x01E4], [0x01E6, 0x01E6], [0x01E8, 0x01E8], [0x01EA, 0x01EA], [0x01EC, 0x01EC], [0x01EE, 0x01EE], [0x01F1, 0x01F1], [0x01F4, 0x01F4], [0x01F6, 0x01F8], [0x01FA, 0x01FA], [0x01FC, 0x01FC], [0x01FE, 0x01FE], [0x0200, 0x0200], [0x0202, 0x0202], [0x0204, 0x0204], [0x0206, 0x0206], [0x0208, 0x0208], [0x020A, 0x020A], [0x020C, 0x020C], [0x020E, 0x020E], [0x0210, 0x0210], [0x0212, 0x0212], [0x0214, 0x0214], [0x0216, 0x0216], [0x0218, 0x0218], [0x021A, 0x021A], [0x021C, 0x021C], [0x021E, 0x021E], [0x0220, 0x0220], [0x0222, 0x0222], [0x0224, 0x0224], [0x0226, 0x0226], [0x0228, 0x0228], [0x022A, 0x022A], [0x022C, 0x022C], [0x022E, 0x022E], [0x0230, 0x0230], [0x0232, 0x0232], [0x0386, 0x0386], [0x0388, 0x038A], [0x038C, 0x038C], [0x038E, 0x038F], [0x0391, 0x03A1], [0x03A3, 0x03AB], [0x03D2, 0x03D4], [0x03D8, 0x03D8], [0x03DA, 0x03DA], [0x03DC, 0x03DC], [0x03DE, 0x03DE], [0x03E0, 0x03E0], [0x03E2, 0x03E2], [0x03E4, 0x03E4], [0x03E6, 0x03E6], [0x03E8, 0x03E8], [0x03EA, 0x03EA], [0x03EC, 0x03EC], [0x03EE, 0x03EE], [0x03F4, 0x03F4], [0x0400, 0x042F], [0x0460, 0x0460], [0x0462, 0x0462], [0x0464, 0x0464], [0x0466, 0x0466], [0x0468, 0x0468], [0x046A, 0x046A], [0x046C, 0x046C], [0x046E, 0x046E], [0x0470, 0x0470], [0x0472, 0x0472], [0x0474, 0x0474], [0x0476, 0x0476], [0x0478, 0x0478], [0x047A, 0x047A], [0x047C, 0x047C], [0x047E, 0x047E], [0x0480, 0x0480], [0x048A, 0x048A], [0x048C, 0x048C], [0x048E, 0x048E], [0x0490, 0x0490], [0x0492, 0x0492], [0x0494, 0x0494], [0x0496, 0x0496], [0x0498, 0x0498], [0x049A, 0x049A], [0x049C, 0x049C], [0x049E, 0x049E], [0x04A0, 0x04A0], [0x04A2, 0x04A2], [0x04A4, 0x04A4], [0x04A6, 0x04A6], [0x04A8, 0x04A8], [0x04AA, 0x04AA], [0x04AC, 0x04AC], [0x04AE, 0x04AE], [0x04B0, 0x04B0], [0x04B2, 0x04B2], [0x04B4, 0x04B4], [0x04B6, 0x04B6], [0x04B8, 0x04B8], [0x04BA, 0x04BA], [0x04BC, 0x04BC], [0x04BE, 0x04BE], [0x04C0, 0x04C1], [0x04C3, 0x04C3], [0x04C5, 0x04C5], [0x04C7, 0x04C7], [0x04C9, 0x04C9], [0x04CB, 0x04CB], [0x04CD, 0x04CD], [0x04D0, 0x04D0], [0x04D2, 0x04D2], [0x04D4, 0x04D4], [0x04D6, 0x04D6], [0x04D8, 0x04D8], [0x04DA, 0x04DA], [0x04DC, 0x04DC], [0x04DE, 0x04DE], [0x04E0, 0x04E0], [0x04E2, 0x04E2], [0x04E4, 0x04E4], [0x04E6, 0x04E6], [0x04E8, 0x04E8], [0x04EA, 0x04EA], [0x04EC, 0x04EC], [0x04EE, 0x04EE], [0x04F0, 0x04F0], [0x04F2, 0x04F2], [0x04F4, 0x04F4], [0x04F8, 0x04F8], [0x0500, 0x0500], [0x0502, 0x0502], [0x0504, 0x0504], [0x0506, 0x0506], [0x0508, 0x0508], [0x050A, 0x050A], [0x050C, 0x050C], [0x050E, 0x050E], [0x0531, 0x0556], [0x10A0, 0x10C5], [0x1E00, 0x1E00], [0x1E02, 0x1E02], [0x1E04, 0x1E04], [0x1E06, 0x1E06], [0x1E08, 0x1E08], [0x1E0A, 0x1E0A], [0x1E0C, 0x1E0C], [0x1E0E, 0x1E0E], [0x1E10, 0x1E10], [0x1E12, 0x1E12], [0x1E14, 0x1E14], [0x1E16, 0x1E16], [0x1E18, 0x1E18], [0x1E1A, 0x1E1A], [0x1E1C, 0x1E1C], [0x1E1E, 0x1E1E], [0x1E20, 0x1E20], [0x1E22, 0x1E22], [0x1E24, 0x1E24], [0x1E26, 0x1E26], [0x1E28, 0x1E28], [0x1E2A, 0x1E2A], [0x1E2C, 0x1E2C], [0x1E2E, 0x1E2E], [0x1E30, 0x1E30], [0x1E32, 0x1E32], [0x1E34, 0x1E34], [0x1E36, 0x1E36], [0x1E38, 0x1E38], [0x1E3A, 0x1E3A], [0x1E3C, 0x1E3C], [0x1E3E, 0x1E3E], [0x1E40, 0x1E40], [0x1E42, 0x1E42], [0x1E44, 0x1E44], [0x1E46, 0x1E46], [0x1E48, 0x1E48], [0x1E4A, 0x1E4A], [0x1E4C, 0x1E4C], [0x1E4E, 0x1E4E], [0x1E50, 0x1E50], [0x1E52, 0x1E52], [0x1E54, 0x1E54], [0x1E56, 0x1E56], [0x1E58, 0x1E58], [0x1E5A, 0x1E5A], [0x1E5C, 0x1E5C], [0x1E5E, 0x1E5E], [0x1E60, 0x1E60], [0x1E62, 0x1E62], [0x1E64, 0x1E64], [0x1E66, 0x1E66], [0x1E68, 0x1E68], [0x1E6A, 0x1E6A], [0x1E6C, 0x1E6C], [0x1E6E, 0x1E6E], [0x1E70, 0x1E70], [0x1E72, 0x1E72], [0x1E74, 0x1E74], [0x1E76, 0x1E76], [0x1E78, 0x1E78], [0x1E7A, 0x1E7A], [0x1E7C, 0x1E7C], [0x1E7E, 0x1E7E], [0x1E80, 0x1E80], [0x1E82, 0x1E82], [0x1E84, 0x1E84], [0x1E86, 0x1E86], [0x1E88, 0x1E88], [0x1E8A, 0x1E8A], [0x1E8C, 0x1E8C], [0x1E8E, 0x1E8E], [0x1E90, 0x1E90], [0x1E92, 0x1E92], [0x1E94, 0x1E94], [0x1EA0, 0x1EA0], [0x1EA2, 0x1EA2], [0x1EA4, 0x1EA4], [0x1EA6, 0x1EA6], [0x1EA8, 0x1EA8], [0x1EAA, 0x1EAA], [0x1EAC, 0x1EAC], [0x1EAE, 0x1EAE], [0x1EB0, 0x1EB0], [0x1EB2, 0x1EB2], [0x1EB4, 0x1EB4], [0x1EB6, 0x1EB6], [0x1EB8, 0x1EB8], [0x1EBA, 0x1EBA], [0x1EBC, 0x1EBC], [0x1EBE, 0x1EBE], [0x1EC0, 0x1EC0], [0x1EC2, 0x1EC2], [0x1EC4, 0x1EC4], [0x1EC6, 0x1EC6], [0x1EC8, 0x1EC8], [0x1ECA, 0x1ECA], [0x1ECC, 0x1ECC], [0x1ECE, 0x1ECE], [0x1ED0, 0x1ED0], [0x1ED2, 0x1ED2], [0x1ED4, 0x1ED4], [0x1ED6, 0x1ED6], [0x1ED8, 0x1ED8], [0x1EDA, 0x1EDA], [0x1EDC, 0x1EDC], [0x1EDE, 0x1EDE], [0x1EE0, 0x1EE0], [0x1EE2, 0x1EE2], [0x1EE4, 0x1EE4], [0x1EE6, 0x1EE6], [0x1EE8, 0x1EE8], [0x1EEA, 0x1EEA], [0x1EEC, 0x1EEC], [0x1EEE, 0x1EEE], [0x1EF0, 0x1EF0], [0x1EF2, 0x1EF2], [0x1EF4, 0x1EF4], [0x1EF6, 0x1EF6], [0x1EF8, 0x1EF8], [0x1F08, 0x1F0F], [0x1F18, 0x1F1D], [0x1F28, 0x1F2F], [0x1F38, 0x1F3F], [0x1F48, 0x1F4D], [0x1F59, 0x1F59], [0x1F5B, 0x1F5B], [0x1F5D, 0x1F5D], [0x1F5F, 0x1F5F], [0x1F68, 0x1F6F], [0x1FB8, 0x1FBB], [0x1FC8, 0x1FCB], [0x1FD8, 0x1FDB], [0x1FE8, 0x1FEC], [0x1FF8, 0x1FFB], [0x2102, 0x2102], [0x2107, 0x2107], [0x210B, 0x210D], [0x2110, 0x2112], [0x2115, 0x2115], [0x2119, 0x211D], [0x2124, 0x2124], [0x2126, 0x2126], [0x2128, 0x2128], [0x212A, 0x212D], [0x2130, 0x2131], [0x2133, 0x2133], [0x213E, 0x213F], [0x2145, 0x2145], [0xFF21, 0xFF3A]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Lu.length; indexI++) { - for (indexJ = Lu[indexI][0]; indexJ <= Lu[indexI][1]; indexJ++) { - try { - var hex = decimalToHexString(indexJ); - var identifier1 = String.fromCharCode(indexJ); - var identifier2 = "\\u" + hex; - eval(identifier2 + " = 1"); - if (eval(identifier1 + " === " + identifier2) !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_320/S7.6_A5.2_T10.js b/tests/ES3/Unicode/Unicode_320/S7.6_A5.2_T10.js deleted file mode 100644 index 690490601..000000000 --- a/tests/ES3/Unicode/Unicode_320/S7.6_A5.2_T10.js +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A5.2_T10; - * @section: 7.6, 6; - * @assertion: If a \UnicodeEscapeSequence sequence were replaced by its UnicodeEscapeSequence's CV, the result must still be a valid Identifier that has the exact same sequence of characters as the original Identifier; - * @description: The CV of UnicodeEscapeSequence is Pc. - * Complex test with eval; -*/ - -//CHECK -Pc = [[0x005F, 0x005F], [0x203F, 0x2040], [0x30FB, 0x30FB], [0xFE33, 0xFE34], [0xFE4D, 0xFE4F], [0xFF3F, 0xFF3F], [0xFF65, 0xFF65]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Pc.length; indexI++) { - for (indexJ = Pc[indexI][0]; indexJ <= Pc[indexI][1]; indexJ++) { - try { - var hex = decimalToHexString(indexJ); - var identifier1 = "$" + String.fromCharCode(indexJ); - var identifier2 = "$\\u" + hex; - eval(identifier2 + " = 1"); - if (eval(identifier1 + " === " + identifier2) !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_320/S7.6_A5.2_T2.js b/tests/ES3/Unicode/Unicode_320/S7.6_A5.2_T2.js deleted file mode 100644 index 6f77c9f3a..000000000 --- a/tests/ES3/Unicode/Unicode_320/S7.6_A5.2_T2.js +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A5.2_T2; - * @section: 7.6, 6; - * @assertion: If a \UnicodeEscapeSequence sequence were replaced by its UnicodeEscapeSequence's CV, the result must still be a valid Identifier that has the exact same sequence of characters as the original Identifier; - * @description: The CV of UnicodeEscapeSequence is Ll. - * Complex test with eval; -*/ - -//CHECK -Ll = [[0x0061, 0x007A], [0x00AA, 0x00AA], [0x00B5, 0x00B5], [0x00BA, 0x00BA], [0x00DF, 0x00F6], [0x00F8, 0x00FF], [0x0101, 0x0101], [0x0103, 0x0103], [0x0105, 0x0105], [0x0107, 0x0107], [0x0109, 0x0109], [0x010B, 0x010B], [0x010D, 0x010D], [0x010F, 0x010F], [0x0111, 0x0111], [0x0113, 0x0113], [0x0115, 0x0115], [0x0117, 0x0117], [0x0119, 0x0119], [0x011B, 0x011B], [0x011D, 0x011D], [0x011F, 0x011F], [0x0121, 0x0121], [0x0123, 0x0123], [0x0125, 0x0125], [0x0127, 0x0127], [0x0129, 0x0129], [0x012B, 0x012B], [0x012D, 0x012D], [0x012F, 0x012F], [0x0131, 0x0131], [0x0133, 0x0133], [0x0135, 0x0135], [0x0137, 0x0138], [0x013A, 0x013A], [0x013C, 0x013C], [0x013E, 0x013E], [0x0140, 0x0140], [0x0142, 0x0142], [0x0144, 0x0144], [0x0146, 0x0146], [0x0148, 0x0149], [0x014B, 0x014B], [0x014D, 0x014D], [0x014F, 0x014F], [0x0151, 0x0151], [0x0153, 0x0153], [0x0155, 0x0155], [0x0157, 0x0157], [0x0159, 0x0159], [0x015B, 0x015B], [0x015D, 0x015D], [0x015F, 0x015F], [0x0161, 0x0161], [0x0163, 0x0163], [0x0165, 0x0165], [0x0167, 0x0167], [0x0169, 0x0169], [0x016B, 0x016B], [0x016D, 0x016D], [0x016F, 0x016F], [0x0171, 0x0171], [0x0173, 0x0173], [0x0175, 0x0175], [0x0177, 0x0177], [0x017A, 0x017A], [0x017C, 0x017C], [0x017E, 0x0180], [0x0183, 0x0183], [0x0185, 0x0185], [0x0188, 0x0188], [0x018C, 0x018D], [0x0192, 0x0192], [0x0195, 0x0195], [0x0199, 0x019B], [0x019E, 0x019E], [0x01A1, 0x01A1], [0x01A3, 0x01A3], [0x01A5, 0x01A5], [0x01A8, 0x01A8], [0x01AA, 0x01AB], [0x01AD, 0x01AD], [0x01B0, 0x01B0], [0x01B4, 0x01B4], [0x01B6, 0x01B6], [0x01B9, 0x01BA], [0x01BD, 0x01BF], [0x01C6, 0x01C6], [0x01C9, 0x01C9], [0x01CC, 0x01CC], [0x01CE, 0x01CE], [0x01D0, 0x01D0], [0x01D2, 0x01D2], [0x01D4, 0x01D4], [0x01D6, 0x01D6], [0x01D8, 0x01D8], [0x01DA, 0x01DA], [0x01DC, 0x01DD], [0x01DF, 0x01DF], [0x01E1, 0x01E1], [0x01E3, 0x01E3], [0x01E5, 0x01E5], [0x01E7, 0x01E7], [0x01E9, 0x01E9], [0x01EB, 0x01EB], [0x01ED, 0x01ED], [0x01EF, 0x01F0], [0x01F3, 0x01F3], [0x01F5, 0x01F5], [0x01F9, 0x01F9], [0x01FB, 0x01FB], [0x01FD, 0x01FD], [0x01FF, 0x01FF], [0x0201, 0x0201], [0x0203, 0x0203], [0x0205, 0x0205], [0x0207, 0x0207], [0x0209, 0x0209], [0x020B, 0x020B], [0x020D, 0x020D], [0x020F, 0x020F], [0x0211, 0x0211], [0x0213, 0x0213], [0x0215, 0x0215], [0x0217, 0x0217], [0x0219, 0x0219], [0x021B, 0x021B], [0x021D, 0x021D], [0x021F, 0x021F], [0x0223, 0x0223], [0x0225, 0x0225], [0x0227, 0x0227], [0x0229, 0x0229], [0x022B, 0x022B], [0x022D, 0x022D], [0x022F, 0x022F], [0x0231, 0x0231], [0x0233, 0x0233], [0x0250, 0x02AD], [0x0390, 0x0390], [0x03AC, 0x03CE], [0x03D0, 0x03D1], [0x03D5, 0x03D7], [0x03D9, 0x03D9], [0x03DB, 0x03DB], [0x03DD, 0x03DD], [0x03DF, 0x03DF], [0x03E1, 0x03E1], [0x03E3, 0x03E3], [0x03E5, 0x03E5], [0x03E7, 0x03E7], [0x03E9, 0x03E9], [0x03EB, 0x03EB], [0x03ED, 0x03ED], [0x03EF, 0x03F3], [0x03F5, 0x03F5], [0x0430, 0x045F], [0x0461, 0x0461], [0x0463, 0x0463], [0x0465, 0x0465], [0x0467, 0x0467], [0x0469, 0x0469], [0x046B, 0x046B], [0x046D, 0x046D], [0x046F, 0x046F], [0x0471, 0x0471], [0x0473, 0x0473], [0x0475, 0x0475], [0x0477, 0x0477], [0x0479, 0x0479], [0x047B, 0x047B], [0x047D, 0x047D], [0x047F, 0x047F], [0x0481, 0x0481], [0x048B, 0x048B], [0x048D, 0x048D], [0x048F, 0x048F], [0x0491, 0x0491], [0x0493, 0x0493], [0x0495, 0x0495], [0x0497, 0x0497], [0x0499, 0x0499], [0x049B, 0x049B], [0x049D, 0x049D], [0x049F, 0x049F], [0x04A1, 0x04A1], [0x04A3, 0x04A3], [0x04A5, 0x04A5], [0x04A7, 0x04A7], [0x04A9, 0x04A9], [0x04AB, 0x04AB], [0x04AD, 0x04AD], [0x04AF, 0x04AF], [0x04B1, 0x04B1], [0x04B3, 0x04B3], [0x04B5, 0x04B5], [0x04B7, 0x04B7], [0x04B9, 0x04B9], [0x04BB, 0x04BB], [0x04BD, 0x04BD], [0x04BF, 0x04BF], [0x04C2, 0x04C2], [0x04C4, 0x04C4], [0x04C6, 0x04C6], [0x04C8, 0x04C8], [0x04CA, 0x04CA], [0x04CC, 0x04CC], [0x04CE, 0x04CE], [0x04D1, 0x04D1], [0x04D3, 0x04D3], [0x04D5, 0x04D5], [0x04D7, 0x04D7], [0x04D9, 0x04D9], [0x04DB, 0x04DB], [0x04DD, 0x04DD], [0x04DF, 0x04DF], [0x04E1, 0x04E1], [0x04E3, 0x04E3], [0x04E5, 0x04E5], [0x04E7, 0x04E7], [0x04E9, 0x04E9], [0x04EB, 0x04EB], [0x04ED, 0x04ED], [0x04EF, 0x04EF], [0x04F1, 0x04F1], [0x04F3, 0x04F3], [0x04F5, 0x04F5], [0x04F9, 0x04F9], [0x0501, 0x0501], [0x0503, 0x0503], [0x0505, 0x0505], [0x0507, 0x0507], [0x0509, 0x0509], [0x050B, 0x050B], [0x050D, 0x050D], [0x050F, 0x050F], [0x0561, 0x0587], [0x1E01, 0x1E01], [0x1E03, 0x1E03], [0x1E05, 0x1E05], [0x1E07, 0x1E07], [0x1E09, 0x1E09], [0x1E0B, 0x1E0B], [0x1E0D, 0x1E0D], [0x1E0F, 0x1E0F], [0x1E11, 0x1E11], [0x1E13, 0x1E13], [0x1E15, 0x1E15], [0x1E17, 0x1E17], [0x1E19, 0x1E19], [0x1E1B, 0x1E1B], [0x1E1D, 0x1E1D], [0x1E1F, 0x1E1F], [0x1E21, 0x1E21], [0x1E23, 0x1E23], [0x1E25, 0x1E25], [0x1E27, 0x1E27], [0x1E29, 0x1E29], [0x1E2B, 0x1E2B], [0x1E2D, 0x1E2D], [0x1E2F, 0x1E2F], [0x1E31, 0x1E31], [0x1E33, 0x1E33], [0x1E35, 0x1E35], [0x1E37, 0x1E37], [0x1E39, 0x1E39], [0x1E3B, 0x1E3B], [0x1E3D, 0x1E3D], [0x1E3F, 0x1E3F], [0x1E41, 0x1E41], [0x1E43, 0x1E43], [0x1E45, 0x1E45], [0x1E47, 0x1E47], [0x1E49, 0x1E49], [0x1E4B, 0x1E4B], [0x1E4D, 0x1E4D], [0x1E4F, 0x1E4F], [0x1E51, 0x1E51], [0x1E53, 0x1E53], [0x1E55, 0x1E55], [0x1E57, 0x1E57], [0x1E59, 0x1E59], [0x1E5B, 0x1E5B], [0x1E5D, 0x1E5D], [0x1E5F, 0x1E5F], [0x1E61, 0x1E61], [0x1E63, 0x1E63], [0x1E65, 0x1E65], [0x1E67, 0x1E67], [0x1E69, 0x1E69], [0x1E6B, 0x1E6B], [0x1E6D, 0x1E6D], [0x1E6F, 0x1E6F], [0x1E71, 0x1E71], [0x1E73, 0x1E73], [0x1E75, 0x1E75], [0x1E77, 0x1E77], [0x1E79, 0x1E79], [0x1E7B, 0x1E7B], [0x1E7D, 0x1E7D], [0x1E7F, 0x1E7F], [0x1E81, 0x1E81], [0x1E83, 0x1E83], [0x1E85, 0x1E85], [0x1E87, 0x1E87], [0x1E89, 0x1E89], [0x1E8B, 0x1E8B], [0x1E8D, 0x1E8D], [0x1E8F, 0x1E8F], [0x1E91, 0x1E91], [0x1E93, 0x1E93], [0x1E95, 0x1E9B], [0x1EA1, 0x1EA1], [0x1EA3, 0x1EA3], [0x1EA5, 0x1EA5], [0x1EA7, 0x1EA7], [0x1EA9, 0x1EA9], [0x1EAB, 0x1EAB], [0x1EAD, 0x1EAD], [0x1EAF, 0x1EAF], [0x1EB1, 0x1EB1], [0x1EB3, 0x1EB3], [0x1EB5, 0x1EB5], [0x1EB7, 0x1EB7], [0x1EB9, 0x1EB9], [0x1EBB, 0x1EBB], [0x1EBD, 0x1EBD], [0x1EBF, 0x1EBF], [0x1EC1, 0x1EC1], [0x1EC3, 0x1EC3], [0x1EC5, 0x1EC5], [0x1EC7, 0x1EC7], [0x1EC9, 0x1EC9], [0x1ECB, 0x1ECB], [0x1ECD, 0x1ECD], [0x1ECF, 0x1ECF], [0x1ED1, 0x1ED1], [0x1ED3, 0x1ED3], [0x1ED5, 0x1ED5], [0x1ED7, 0x1ED7], [0x1ED9, 0x1ED9], [0x1EDB, 0x1EDB], [0x1EDD, 0x1EDD], [0x1EDF, 0x1EDF], [0x1EE1, 0x1EE1], [0x1EE3, 0x1EE3], [0x1EE5, 0x1EE5], [0x1EE7, 0x1EE7], [0x1EE9, 0x1EE9], [0x1EEB, 0x1EEB], [0x1EED, 0x1EED], [0x1EEF, 0x1EEF], [0x1EF1, 0x1EF1], [0x1EF3, 0x1EF3], [0x1EF5, 0x1EF5], [0x1EF7, 0x1EF7], [0x1EF9, 0x1EF9], [0x1F00, 0x1F07], [0x1F10, 0x1F15], [0x1F20, 0x1F27], [0x1F30, 0x1F37], [0x1F40, 0x1F45], [0x1F50, 0x1F57], [0x1F60, 0x1F67], [0x1F70, 0x1F7D], [0x1F80, 0x1F87], [0x1F90, 0x1F97], [0x1FA0, 0x1FA7], [0x1FB0, 0x1FB4], [0x1FB6, 0x1FB7], [0x1FBE, 0x1FBE], [0x1FC2, 0x1FC4], [0x1FC6, 0x1FC7], [0x1FD0, 0x1FD3], [0x1FD6, 0x1FD7], [0x1FE0, 0x1FE7], [0x1FF2, 0x1FF4], [0x1FF6, 0x1FF7], [0x2071, 0x2071], [0x207F, 0x207F], [0x210A, 0x210A], [0x210E, 0x210F], [0x2113, 0x2113], [0x212F, 0x212F], [0x2134, 0x2134], [0x2139, 0x2139], [0x213D, 0x213D], [0x2146, 0x2149], [0xFB00, 0xFB06], [0xFB13, 0xFB17], [0xFF41, 0xFF5A]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Ll.length; indexI++) { - for (indexJ = Ll[indexI][0]; indexJ <= Ll[indexI][1]; indexJ++) { - try { - var hex = decimalToHexString(indexJ); - var identifier1 = String.fromCharCode(indexJ); - var identifier2 = "\\u" + hex; - eval(identifier2 + " = 1"); - if (eval(identifier1 + " === " + identifier2) !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_320/S7.6_A5.2_T3.js b/tests/ES3/Unicode/Unicode_320/S7.6_A5.2_T3.js deleted file mode 100644 index e880bd673..000000000 --- a/tests/ES3/Unicode/Unicode_320/S7.6_A5.2_T3.js +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A5.2_T3; - * @section: 7.6, 6; - * @assertion: If a \UnicodeEscapeSequence sequence were replaced by its UnicodeEscapeSequence's CV, the result must still be a valid Identifier that has the exact same sequence of characters as the original Identifier; - * @description: The CV of UnicodeEscapeSequence is Lt. - * Complex test with eval; -*/ - -//CHECK -Lt = [[0x01C5, 0x01C5], [0x01C8, 0x01C8], [0x01CB, 0x01CB], [0x01F2, 0x01F2], [0x1F88, 0x1F8F], [0x1F98, 0x1F9F], [0x1FA8, 0x1FAF], [0x1FBC, 0x1FBC], [0x1FCC, 0x1FCC], [0x1FFC, 0x1FFC]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Lt.length; indexI++) { - for (indexJ = Lt[indexI][0]; indexJ <= Lt[indexI][1]; indexJ++) { - try { - var hex = decimalToHexString(indexJ); - var identifier1 = String.fromCharCode(indexJ); - var identifier2 = "\\u" + hex; - eval(identifier2 + " = 1"); - if (eval(identifier1 + " === " + identifier2) !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_320/S7.6_A5.2_T4.js b/tests/ES3/Unicode/Unicode_320/S7.6_A5.2_T4.js deleted file mode 100644 index 39906d57e..000000000 --- a/tests/ES3/Unicode/Unicode_320/S7.6_A5.2_T4.js +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A5.2_T4; - * @section: 7.6, 6; - * @assertion: If a \UnicodeEscapeSequence sequence were replaced by its UnicodeEscapeSequence's CV, the result must still be a valid Identifier that has the exact same sequence of characters as the original Identifier; - * @description: The CV of UnicodeEscapeSequence is Lm. - * Complex test with eval; -*/ - -//CHECK -Lm = [[0x02B0, 0x02B8], [0x02BB, 0x02C1], [0x02D0, 0x02D1], [0x02E0, 0x02E4], [0x02EE, 0x02EE], [0x037A, 0x037A], [0x0559, 0x0559], [0x0640, 0x0640], [0x06E5, 0x06E6], [0x0E46, 0x0E46], [0x0EC6, 0x0EC6], [0x17D7, 0x17D7], [0x1843, 0x1843], [0x3005, 0x3005], [0x3031, 0x3035], [0x303B, 0x303B], [0x309D, 0x309E], [0x30FC, 0x30FE], [0xFF70, 0xFF70], [0xFF9E, 0xFF9F]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Lm.length; indexI++) { - for (indexJ = Lm[indexI][0]; indexJ <= Lm[indexI][1]; indexJ++) { - try { - var hex = decimalToHexString(indexJ); - var identifier1 = String.fromCharCode(indexJ); - var identifier2 = "\\u" + hex; - eval(identifier2 + " = 1"); - if (eval(identifier1 + " === " + identifier2) !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_320/S7.6_A5.2_T5.js b/tests/ES3/Unicode/Unicode_320/S7.6_A5.2_T5.js deleted file mode 100644 index 89dc4cfca..000000000 --- a/tests/ES3/Unicode/Unicode_320/S7.6_A5.2_T5.js +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A5.2_T5; - * @section: 7.6, 6; - * @assertion: If a \UnicodeEscapeSequence sequence were replaced by its UnicodeEscapeSequence's CV, the result must still be a valid Identifier that has the exact same sequence of characters as the original Identifier; - * @description: The CV of UnicodeEscapeSequence is Lo. - * Complex test with eval; -*/ - -//CHECK -Lo = [[0x01BB, 0x01BB], [0x01C0, 0x01C3], [0x05D0, 0x05EA], [0x05F0, 0x05F2], [0x0621, 0x063A], [0x0641, 0x064A], [0x066E, 0x066F], [0x0671, 0x06D3], [0x06D5, 0x06D5], [0x06FA, 0x06FC], [0x0710, 0x0710], [0x0712, 0x072C], [0x0780, 0x07A5], [0x07B1, 0x07B1], [0x0905, 0x0939], [0x093D, 0x093D], [0x0950, 0x0950], [0x0958, 0x0961], [0x0985, 0x098C], [0x098F, 0x0990], [0x0993, 0x09A8], [0x09AA, 0x09B0], [0x09B2, 0x09B2], [0x09B6, 0x09B9], [0x09DC, 0x09DD], [0x09DF, 0x09E1], [0x09F0, 0x09F1], [0x0A05, 0x0A0A], [0x0A0F, 0x0A10], [0x0A13, 0x0A28], [0x0A2A, 0x0A30], [0x0A32, 0x0A33], [0x0A35, 0x0A36], [0x0A38, 0x0A39], [0x0A59, 0x0A5C], [0x0A5E, 0x0A5E], [0x0A72, 0x0A74], [0x0A85, 0x0A8B], [0x0A8D, 0x0A8D], [0x0A8F, 0x0A91], [0x0A93, 0x0AA8], [0x0AAA, 0x0AB0], [0x0AB2, 0x0AB3], [0x0AB5, 0x0AB9], [0x0ABD, 0x0ABD], [0x0AD0, 0x0AD0], [0x0AE0, 0x0AE0], [0x0B05, 0x0B0C], [0x0B0F, 0x0B10], [0x0B13, 0x0B28], [0x0B2A, 0x0B30], [0x0B32, 0x0B33], [0x0B36, 0x0B39], [0x0B3D, 0x0B3D], [0x0B5C, 0x0B5D], [0x0B5F, 0x0B61], [0x0B83, 0x0B83], [0x0B85, 0x0B8A], [0x0B8E, 0x0B90], [0x0B92, 0x0B95], [0x0B99, 0x0B9A], [0x0B9C, 0x0B9C], [0x0B9E, 0x0B9F], [0x0BA3, 0x0BA4], [0x0BA8, 0x0BAA], [0x0BAE, 0x0BB5], [0x0BB7, 0x0BB9], [0x0C05, 0x0C0C], [0x0C0E, 0x0C10], [0x0C12, 0x0C28], [0x0C2A, 0x0C33], [0x0C35, 0x0C39], [0x0C60, 0x0C61], [0x0C85, 0x0C8C], [0x0C8E, 0x0C90], [0x0C92, 0x0CA8], [0x0CAA, 0x0CB3], [0x0CB5, 0x0CB9], [0x0CDE, 0x0CDE], [0x0CE0, 0x0CE1], [0x0D05, 0x0D0C], [0x0D0E, 0x0D10], [0x0D12, 0x0D28], [0x0D2A, 0x0D39], [0x0D60, 0x0D61], [0x0D85, 0x0D96], [0x0D9A, 0x0DB1], [0x0DB3, 0x0DBB], [0x0DBD, 0x0DBD], [0x0DC0, 0x0DC6], [0x0E01, 0x0E30], [0x0E32, 0x0E33], [0x0E40, 0x0E45], [0x0E81, 0x0E82], [0x0E84, 0x0E84], [0x0E87, 0x0E88], [0x0E8A, 0x0E8A], [0x0E8D, 0x0E8D], [0x0E94, 0x0E97], [0x0E99, 0x0E9F], [0x0EA1, 0x0EA3], [0x0EA5, 0x0EA5], [0x0EA7, 0x0EA7], [0x0EAA, 0x0EAB], [0x0EAD, 0x0EB0], [0x0EB2, 0x0EB3], [0x0EBD, 0x0EBD], [0x0EC0, 0x0EC4], [0x0EDC, 0x0EDD], [0x0F00, 0x0F00], [0x0F40, 0x0F47], [0x0F49, 0x0F6A], [0x0F88, 0x0F8B], [0x1000, 0x1021], [0x1023, 0x1027], [0x1029, 0x102A], [0x1050, 0x1055], [0x10D0, 0x10F8], [0x1100, 0x1159], [0x115F, 0x11A2], [0x11A8, 0x11F9], [0x1200, 0x1206], [0x1208, 0x1246], [0x1248, 0x1248], [0x124A, 0x124D], [0x1250, 0x1256], [0x1258, 0x1258], [0x125A, 0x125D], [0x1260, 0x1286], [0x1288, 0x1288], [0x128A, 0x128D], [0x1290, 0x12AE], [0x12B0, 0x12B0], [0x12B2, 0x12B5], [0x12B8, 0x12BE], [0x12C0, 0x12C0], [0x12C2, 0x12C5], [0x12C8, 0x12CE], [0x12D0, 0x12D6], [0x12D8, 0x12EE], [0x12F0, 0x130E], [0x1310, 0x1310], [0x1312, 0x1315], [0x1318, 0x131E], [0x1320, 0x1346], [0x1348, 0x135A], [0x13A0, 0x13F4], [0x1401, 0x166C], [0x166F, 0x1676], [0x1681, 0x169A], [0x16A0, 0x16EA], [0x1700, 0x170C], [0x170E, 0x1711], [0x1720, 0x1731], [0x1740, 0x1751], [0x1760, 0x176C], [0x176E, 0x1770], [0x1780, 0x17B3], [0x17DC, 0x17DC], [0x1820, 0x1842], [0x1844, 0x1877], [0x1880, 0x18A8], [0x2135, 0x2138], [0x3006, 0x3006], [0x303C, 0x303C], [0x3041, 0x3096], [0x309F, 0x309F], [0x30A1, 0x30FA], [0x30FF, 0x30FF], [0x3105, 0x312C], [0x3131, 0x318E], [0x31A0, 0x31B7], [0x31F0, 0x31FF], [0x3400, 0x4DB5], [0x4E00, 0x9FA5], [0xA000, 0xA48C], [0xAC00, 0xD7A3], [0xF900, 0xFA2D], [0xFA30, 0xFA6A], [0xFB1D, 0xFB1D], [0xFB1F, 0xFB28], [0xFB2A, 0xFB36], [0xFB38, 0xFB3C], [0xFB3E, 0xFB3E], [0xFB40, 0xFB41], [0xFB43, 0xFB44], [0xFB46, 0xFBB1], [0xFBD3, 0xFD3D], [0xFD50, 0xFD8F], [0xFD92, 0xFDC7], [0xFDF0, 0xFDFB], [0xFE70, 0xFE74], [0xFE76, 0xFEFC], [0xFF66, 0xFF6F], [0xFF71, 0xFF9D], [0xFFA0, 0xFFBE], [0xFFC2, 0xFFC7], [0xFFCA, 0xFFCF], [0xFFD2, 0xFFD7], [0xFFDA, 0xFFDC]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Lo.length; indexI++) { - for (indexJ = Lo[indexI][0]; indexJ <= Lo[indexI][1]; indexJ++) { - try { - var hex = decimalToHexString(indexJ); - var identifier1 = String.fromCharCode(indexJ); - var identifier2 = "\\u" + hex; - eval(identifier2 + " = 1"); - if (eval(identifier1 + " === " + identifier2) !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_320/S7.6_A5.2_T6.js b/tests/ES3/Unicode/Unicode_320/S7.6_A5.2_T6.js deleted file mode 100644 index 4e1ae9dc9..000000000 --- a/tests/ES3/Unicode/Unicode_320/S7.6_A5.2_T6.js +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A5.2_T6; - * @section: 7.6, 6; - * @assertion: If a \UnicodeEscapeSequence sequence were replaced by its UnicodeEscapeSequence's CV, the result must still be a valid Identifier that has the exact same sequence of characters as the original Identifier; - * @description: The CV of UnicodeEscapeSequence is Nl. - * Complex test with eval; -*/ - -//CHECK -Nl = [[0x16EE, 0x16F0], [0x2160, 0x2183], [0x3007, 0x3007], [0x3021, 0x3029], [0x3038, 0x303A]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Nl.length; indexI++) { - for (indexJ = Nl[indexI][0]; indexJ <= Nl[indexI][1]; indexJ++) { - try { - var hex = decimalToHexString(indexJ); - var identifier1 = "$" + String.fromCharCode(indexJ); - var identifier2 = "$\\u" + hex; - eval(identifier2 + " = 1"); - if (eval(identifier1 + " === " + identifier2) !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_320/S7.6_A5.2_T7.js b/tests/ES3/Unicode/Unicode_320/S7.6_A5.2_T7.js deleted file mode 100644 index 6caa5c196..000000000 --- a/tests/ES3/Unicode/Unicode_320/S7.6_A5.2_T7.js +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A5.2_T7; - * @section: 7.6, 6; - * @assertion: If a \UnicodeEscapeSequence sequence were replaced by its UnicodeEscapeSequence's CV, the result must still be a valid Identifier that has the exact same sequence of characters as the original Identifier; - * @description: The CV of UnicodeEscapeSequence is Mn. - * Complex test with eval; -*/ - -//CHECK -Mn = [[0x0300, 0x034F], [0x0360, 0x036F], [0x0483, 0x0486], [0x0591, 0x05A1], [0x05A3, 0x05B9], [0x05BB, 0x05BD], [0x05BF, 0x05BF], [0x05C1, 0x05C2], [0x05C4, 0x05C4], [0x064B, 0x0655], [0x0670, 0x0670], [0x06D6, 0x06DC], [0x06DF, 0x06E4], [0x06E7, 0x06E8], [0x06EA, 0x06ED], [0x0711, 0x0711], [0x0730, 0x074A], [0x07A6, 0x07B0], [0x0901, 0x0902], [0x093C, 0x093C], [0x0941, 0x0948], [0x094D, 0x094D], [0x0951, 0x0954], [0x0962, 0x0963], [0x0981, 0x0981], [0x09BC, 0x09BC], [0x09C1, 0x09C4], [0x09CD, 0x09CD], [0x09E2, 0x09E3], [0x0A02, 0x0A02], [0x0A3C, 0x0A3C], [0x0A41, 0x0A42], [0x0A47, 0x0A48], [0x0A4B, 0x0A4D], [0x0A70, 0x0A71], [0x0A81, 0x0A82], [0x0ABC, 0x0ABC], [0x0AC1, 0x0AC5], [0x0AC7, 0x0AC8], [0x0ACD, 0x0ACD], [0x0B01, 0x0B01], [0x0B3C, 0x0B3C], [0x0B3F, 0x0B3F], [0x0B41, 0x0B43], [0x0B4D, 0x0B4D], [0x0B56, 0x0B56], [0x0B82, 0x0B82], [0x0BC0, 0x0BC0], [0x0BCD, 0x0BCD], [0x0C3E, 0x0C40], [0x0C46, 0x0C48], [0x0C4A, 0x0C4D], [0x0C55, 0x0C56], [0x0CBF, 0x0CBF], [0x0CC6, 0x0CC6], [0x0CCC, 0x0CCD], [0x0D41, 0x0D43], [0x0D4D, 0x0D4D], [0x0DCA, 0x0DCA], [0x0DD2, 0x0DD4], [0x0DD6, 0x0DD6], [0x0E31, 0x0E31], [0x0E34, 0x0E3A], [0x0E47, 0x0E4E], [0x0EB1, 0x0EB1], [0x0EB4, 0x0EB9], [0x0EBB, 0x0EBC], [0x0EC8, 0x0ECD], [0x0F18, 0x0F19], [0x0F35, 0x0F35], [0x0F37, 0x0F37], [0x0F39, 0x0F39], [0x0F71, 0x0F7E], [0x0F80, 0x0F84], [0x0F86, 0x0F87], [0x0F90, 0x0F97], [0x0F99, 0x0FBC], [0x0FC6, 0x0FC6], [0x102D, 0x1030], [0x1032, 0x1032], [0x1036, 0x1037], [0x1039, 0x1039], [0x1058, 0x1059], [0x1712, 0x1714], [0x1732, 0x1734], [0x1752, 0x1753], [0x1772, 0x1773], [0x17B7, 0x17BD], [0x17C6, 0x17C6], [0x17C9, 0x17D3], [0x180B, 0x180D], [0x18A9, 0x18A9], [0x20D0, 0x20DC], [0x20E1, 0x20E1], [0x20E5, 0x20EA], [0x302A, 0x302F], [0x3099, 0x309A], [0xFB1E, 0xFB1E], [0xFE00, 0xFE0F], [0xFE20, 0xFE23]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Mn.length; indexI++) { - for (indexJ = Mn[indexI][0]; indexJ <= Mn[indexI][1]; indexJ++) { - try { - var hex = decimalToHexString(indexJ); - var identifier1 = "$" + String.fromCharCode(indexJ); - var identifier2 = "$\\u" + hex; - eval(identifier2 + " = 1"); - if (eval(identifier1 + " === " + identifier2) !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_320/S7.6_A5.2_T8.js b/tests/ES3/Unicode/Unicode_320/S7.6_A5.2_T8.js deleted file mode 100644 index bcf7fb19d..000000000 --- a/tests/ES3/Unicode/Unicode_320/S7.6_A5.2_T8.js +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A5.2_T8; - * @section: 7.6, 6; - * @assertion: If a \UnicodeEscapeSequence sequence were replaced by its UnicodeEscapeSequence's CV, the result must still be a valid Identifier that has the exact same sequence of characters as the original Identifier; - * @description: The CV of UnicodeEscapeSequence is Mc. - * Complex test with eval; -*/ - -//CHECK -Mc = [[0x0903, 0x0903], [0x093E, 0x0940], [0x0949, 0x094C], [0x0982, 0x0983], [0x09BE, 0x09C0], [0x09C7, 0x09C8], [0x09CB, 0x09CC], [0x09D7, 0x09D7], [0x0A3E, 0x0A40], [0x0A83, 0x0A83], [0x0ABE, 0x0AC0], [0x0AC9, 0x0AC9], [0x0ACB, 0x0ACC], [0x0B02, 0x0B03], [0x0B3E, 0x0B3E], [0x0B40, 0x0B40], [0x0B47, 0x0B48], [0x0B4B, 0x0B4C], [0x0B57, 0x0B57], [0x0BBE, 0x0BBF], [0x0BC1, 0x0BC2], [0x0BC6, 0x0BC8], [0x0BCA, 0x0BCC], [0x0BD7, 0x0BD7], [0x0C01, 0x0C03], [0x0C41, 0x0C44], [0x0C82, 0x0C83], [0x0CBE, 0x0CBE], [0x0CC0, 0x0CC4], [0x0CC7, 0x0CC8], [0x0CCA, 0x0CCB], [0x0CD5, 0x0CD6], [0x0D02, 0x0D03], [0x0D3E, 0x0D40], [0x0D46, 0x0D48], [0x0D4A, 0x0D4C], [0x0D57, 0x0D57], [0x0D82, 0x0D83], [0x0DCF, 0x0DD1], [0x0DD8, 0x0DDF], [0x0DF2, 0x0DF3], [0x0F3E, 0x0F3F], [0x0F7F, 0x0F7F], [0x102C, 0x102C], [0x1031, 0x1031], [0x1038, 0x1038], [0x1056, 0x1057], [0x17B4, 0x17B6], [0x17BE, 0x17C5], [0x17C7, 0x17C8]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Mc.length; indexI++) { - for (indexJ = Mc[indexI][0]; indexJ <= Mc[indexI][1]; indexJ++) { - try { - var hex = decimalToHexString(indexJ); - var identifier1 = "$" + String.fromCharCode(indexJ); - var identifier2 = "$\\u" + hex; - eval(identifier2 + " = 1"); - if (eval(identifier1 + " === " + identifier2) !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_320/S7.6_A5.2_T9.js b/tests/ES3/Unicode/Unicode_320/S7.6_A5.2_T9.js deleted file mode 100644 index 2bdb2ae23..000000000 --- a/tests/ES3/Unicode/Unicode_320/S7.6_A5.2_T9.js +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A5.2_T9; - * @section: 7.6, 6; - * @assertion: If a \UnicodeEscapeSequence sequence were replaced by its UnicodeEscapeSequence's CV, the result must still be a valid Identifier that has the exact same sequence of characters as the original Identifier; - * @description: The CV of UnicodeEscapeSequence is Nd. - * Complex test with eval; -*/ - -//CHECK -Nd = [[0x0030, 0x0039], [0x0660, 0x0669], [0x06F0, 0x06F9], [0x0966, 0x096F], [0x09E6, 0x09EF], [0x0A66, 0x0A6F], [0x0AE6, 0x0AEF], [0x0B66, 0x0B6F], [0x0BE7, 0x0BEF], [0x0C66, 0x0C6F], [0x0CE6, 0x0CEF], [0x0D66, 0x0D6F], [0x0E50, 0x0E59], [0x0ED0, 0x0ED9], [0x0F20, 0x0F29], [0x1040, 0x1049], [0x1369, 0x1371], [0x17E0, 0x17E9], [0x1810, 0x1819], [0xFF10, 0xFF19]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Nd.length; indexI++) { - for (indexJ = Nd[indexI][0]; indexJ <= Nd[indexI][1]; indexJ++) { - try { - var hex = decimalToHexString(indexJ); - var identifier1 = "$" + String.fromCharCode(indexJ); - var identifier2 = "$\\u" + hex; - eval(identifier2 + " = 1"); - if (eval(identifier1 + " === " + identifier2) !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_320/S7.6_A5.3_T1.js b/tests/ES3/Unicode/Unicode_320/S7.6_A5.3_T1.js deleted file mode 100644 index 75cd9abc2..000000000 --- a/tests/ES3/Unicode/Unicode_320/S7.6_A5.3_T1.js +++ /dev/null @@ -1,153 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A5.3_T1; - * @section: 7.6, 6; - * @assertion: If a UnicodeEscapeSequence put a character into an identifier that would otherwise be illegal, throw SyntaxError; - * @description: Complex test with eval; -*/ - -//CHECK -Lu = [[0x0041, 0x005A], [0x00C0, 0x00D6], [0x00D8, 0x00DE], [0x0100, 0x0100], [0x0102, 0x0102], [0x0104, 0x0104], [0x0106, 0x0106], [0x0108, 0x0108], [0x010A, 0x010A], [0x010C, 0x010C], [0x010E, 0x010E], [0x0110, 0x0110], [0x0112, 0x0112], [0x0114, 0x0114], [0x0116, 0x0116], [0x0118, 0x0118], [0x011A, 0x011A], [0x011C, 0x011C], [0x011E, 0x011E], [0x0120, 0x0120], [0x0122, 0x0122], [0x0124, 0x0124], [0x0126, 0x0126], [0x0128, 0x0128], [0x012A, 0x012A], [0x012C, 0x012C], [0x012E, 0x012E], [0x0130, 0x0130], [0x0132, 0x0132], [0x0134, 0x0134], [0x0136, 0x0136], [0x0139, 0x0139], [0x013B, 0x013B], [0x013D, 0x013D], [0x013F, 0x013F], [0x0141, 0x0141], [0x0143, 0x0143], [0x0145, 0x0145], [0x0147, 0x0147], [0x014A, 0x014A], [0x014C, 0x014C], [0x014E, 0x014E], [0x0150, 0x0150], [0x0152, 0x0152], [0x0154, 0x0154], [0x0156, 0x0156], [0x0158, 0x0158], [0x015A, 0x015A], [0x015C, 0x015C], [0x015E, 0x015E], [0x0160, 0x0160], [0x0162, 0x0162], [0x0164, 0x0164], [0x0166, 0x0166], [0x0168, 0x0168], [0x016A, 0x016A], [0x016C, 0x016C], [0x016E, 0x016E], [0x0170, 0x0170], [0x0172, 0x0172], [0x0174, 0x0174], [0x0176, 0x0176], [0x0178, 0x0179], [0x017B, 0x017B], [0x017D, 0x017D], [0x0181, 0x0182], [0x0184, 0x0184], [0x0186, 0x0187], [0x0189, 0x018B], [0x018E, 0x0191], [0x0193, 0x0194], [0x0196, 0x0198], [0x019C, 0x019D], [0x019F, 0x01A0], [0x01A2, 0x01A2], [0x01A4, 0x01A4], [0x01A6, 0x01A7], [0x01A9, 0x01A9], [0x01AC, 0x01AC], [0x01AE, 0x01AF], [0x01B1, 0x01B3], [0x01B5, 0x01B5], [0x01B7, 0x01B8], [0x01BC, 0x01BC], [0x01C4, 0x01C4], [0x01C7, 0x01C7], [0x01CA, 0x01CA], [0x01CD, 0x01CD], [0x01CF, 0x01CF], [0x01D1, 0x01D1], [0x01D3, 0x01D3], [0x01D5, 0x01D5], [0x01D7, 0x01D7], [0x01D9, 0x01D9], [0x01DB, 0x01DB], [0x01DE, 0x01DE], [0x01E0, 0x01E0], [0x01E2, 0x01E2], [0x01E4, 0x01E4], [0x01E6, 0x01E6], [0x01E8, 0x01E8], [0x01EA, 0x01EA], [0x01EC, 0x01EC], [0x01EE, 0x01EE], [0x01F1, 0x01F1], [0x01F4, 0x01F4], [0x01F6, 0x01F8], [0x01FA, 0x01FA], [0x01FC, 0x01FC], [0x01FE, 0x01FE], [0x0200, 0x0200], [0x0202, 0x0202], [0x0204, 0x0204], [0x0206, 0x0206], [0x0208, 0x0208], [0x020A, 0x020A], [0x020C, 0x020C], [0x020E, 0x020E], [0x0210, 0x0210], [0x0212, 0x0212], [0x0214, 0x0214], [0x0216, 0x0216], [0x0218, 0x0218], [0x021A, 0x021A], [0x021C, 0x021C], [0x021E, 0x021E], [0x0220, 0x0220], [0x0222, 0x0222], [0x0224, 0x0224], [0x0226, 0x0226], [0x0228, 0x0228], [0x022A, 0x022A], [0x022C, 0x022C], [0x022E, 0x022E], [0x0230, 0x0230], [0x0232, 0x0232], [0x0386, 0x0386], [0x0388, 0x038A], [0x038C, 0x038C], [0x038E, 0x038F], [0x0391, 0x03A1], [0x03A3, 0x03AB], [0x03D2, 0x03D4], [0x03D8, 0x03D8], [0x03DA, 0x03DA], [0x03DC, 0x03DC], [0x03DE, 0x03DE], [0x03E0, 0x03E0], [0x03E2, 0x03E2], [0x03E4, 0x03E4], [0x03E6, 0x03E6], [0x03E8, 0x03E8], [0x03EA, 0x03EA], [0x03EC, 0x03EC], [0x03EE, 0x03EE], [0x03F4, 0x03F4], [0x0400, 0x042F], [0x0460, 0x0460], [0x0462, 0x0462], [0x0464, 0x0464], [0x0466, 0x0466], [0x0468, 0x0468], [0x046A, 0x046A], [0x046C, 0x046C], [0x046E, 0x046E], [0x0470, 0x0470], [0x0472, 0x0472], [0x0474, 0x0474], [0x0476, 0x0476], [0x0478, 0x0478], [0x047A, 0x047A], [0x047C, 0x047C], [0x047E, 0x047E], [0x0480, 0x0480], [0x048A, 0x048A], [0x048C, 0x048C], [0x048E, 0x048E], [0x0490, 0x0490], [0x0492, 0x0492], [0x0494, 0x0494], [0x0496, 0x0496], [0x0498, 0x0498], [0x049A, 0x049A], [0x049C, 0x049C], [0x049E, 0x049E], [0x04A0, 0x04A0], [0x04A2, 0x04A2], [0x04A4, 0x04A4], [0x04A6, 0x04A6], [0x04A8, 0x04A8], [0x04AA, 0x04AA], [0x04AC, 0x04AC], [0x04AE, 0x04AE], [0x04B0, 0x04B0], [0x04B2, 0x04B2], [0x04B4, 0x04B4], [0x04B6, 0x04B6], [0x04B8, 0x04B8], [0x04BA, 0x04BA], [0x04BC, 0x04BC], [0x04BE, 0x04BE], [0x04C0, 0x04C1], [0x04C3, 0x04C3], [0x04C5, 0x04C5], [0x04C7, 0x04C7], [0x04C9, 0x04C9], [0x04CB, 0x04CB], [0x04CD, 0x04CD], [0x04D0, 0x04D0], [0x04D2, 0x04D2], [0x04D4, 0x04D4], [0x04D6, 0x04D6], [0x04D8, 0x04D8], [0x04DA, 0x04DA], [0x04DC, 0x04DC], [0x04DE, 0x04DE], [0x04E0, 0x04E0], [0x04E2, 0x04E2], [0x04E4, 0x04E4], [0x04E6, 0x04E6], [0x04E8, 0x04E8], [0x04EA, 0x04EA], [0x04EC, 0x04EC], [0x04EE, 0x04EE], [0x04F0, 0x04F0], [0x04F2, 0x04F2], [0x04F4, 0x04F4], [0x04F8, 0x04F8], [0x0500, 0x0500], [0x0502, 0x0502], [0x0504, 0x0504], [0x0506, 0x0506], [0x0508, 0x0508], [0x050A, 0x050A], [0x050C, 0x050C], [0x050E, 0x050E], [0x0531, 0x0556], [0x10A0, 0x10C5], [0x1E00, 0x1E00], [0x1E02, 0x1E02], [0x1E04, 0x1E04], [0x1E06, 0x1E06], [0x1E08, 0x1E08], [0x1E0A, 0x1E0A], [0x1E0C, 0x1E0C], [0x1E0E, 0x1E0E], [0x1E10, 0x1E10], [0x1E12, 0x1E12], [0x1E14, 0x1E14], [0x1E16, 0x1E16], [0x1E18, 0x1E18], [0x1E1A, 0x1E1A], [0x1E1C, 0x1E1C], [0x1E1E, 0x1E1E], [0x1E20, 0x1E20], [0x1E22, 0x1E22], [0x1E24, 0x1E24], [0x1E26, 0x1E26], [0x1E28, 0x1E28], [0x1E2A, 0x1E2A], [0x1E2C, 0x1E2C], [0x1E2E, 0x1E2E], [0x1E30, 0x1E30], [0x1E32, 0x1E32], [0x1E34, 0x1E34], [0x1E36, 0x1E36], [0x1E38, 0x1E38], [0x1E3A, 0x1E3A], [0x1E3C, 0x1E3C], [0x1E3E, 0x1E3E], [0x1E40, 0x1E40], [0x1E42, 0x1E42], [0x1E44, 0x1E44], [0x1E46, 0x1E46], [0x1E48, 0x1E48], [0x1E4A, 0x1E4A], [0x1E4C, 0x1E4C], [0x1E4E, 0x1E4E], [0x1E50, 0x1E50], [0x1E52, 0x1E52], [0x1E54, 0x1E54], [0x1E56, 0x1E56], [0x1E58, 0x1E58], [0x1E5A, 0x1E5A], [0x1E5C, 0x1E5C], [0x1E5E, 0x1E5E], [0x1E60, 0x1E60], [0x1E62, 0x1E62], [0x1E64, 0x1E64], [0x1E66, 0x1E66], [0x1E68, 0x1E68], [0x1E6A, 0x1E6A], [0x1E6C, 0x1E6C], [0x1E6E, 0x1E6E], [0x1E70, 0x1E70], [0x1E72, 0x1E72], [0x1E74, 0x1E74], [0x1E76, 0x1E76], [0x1E78, 0x1E78], [0x1E7A, 0x1E7A], [0x1E7C, 0x1E7C], [0x1E7E, 0x1E7E], [0x1E80, 0x1E80], [0x1E82, 0x1E82], [0x1E84, 0x1E84], [0x1E86, 0x1E86], [0x1E88, 0x1E88], [0x1E8A, 0x1E8A], [0x1E8C, 0x1E8C], [0x1E8E, 0x1E8E], [0x1E90, 0x1E90], [0x1E92, 0x1E92], [0x1E94, 0x1E94], [0x1EA0, 0x1EA0], [0x1EA2, 0x1EA2], [0x1EA4, 0x1EA4], [0x1EA6, 0x1EA6], [0x1EA8, 0x1EA8], [0x1EAA, 0x1EAA], [0x1EAC, 0x1EAC], [0x1EAE, 0x1EAE], [0x1EB0, 0x1EB0], [0x1EB2, 0x1EB2], [0x1EB4, 0x1EB4], [0x1EB6, 0x1EB6], [0x1EB8, 0x1EB8], [0x1EBA, 0x1EBA], [0x1EBC, 0x1EBC], [0x1EBE, 0x1EBE], [0x1EC0, 0x1EC0], [0x1EC2, 0x1EC2], [0x1EC4, 0x1EC4], [0x1EC6, 0x1EC6], [0x1EC8, 0x1EC8], [0x1ECA, 0x1ECA], [0x1ECC, 0x1ECC], [0x1ECE, 0x1ECE], [0x1ED0, 0x1ED0], [0x1ED2, 0x1ED2], [0x1ED4, 0x1ED4], [0x1ED6, 0x1ED6], [0x1ED8, 0x1ED8], [0x1EDA, 0x1EDA], [0x1EDC, 0x1EDC], [0x1EDE, 0x1EDE], [0x1EE0, 0x1EE0], [0x1EE2, 0x1EE2], [0x1EE4, 0x1EE4], [0x1EE6, 0x1EE6], [0x1EE8, 0x1EE8], [0x1EEA, 0x1EEA], [0x1EEC, 0x1EEC], [0x1EEE, 0x1EEE], [0x1EF0, 0x1EF0], [0x1EF2, 0x1EF2], [0x1EF4, 0x1EF4], [0x1EF6, 0x1EF6], [0x1EF8, 0x1EF8], [0x1F08, 0x1F0F], [0x1F18, 0x1F1D], [0x1F28, 0x1F2F], [0x1F38, 0x1F3F], [0x1F48, 0x1F4D], [0x1F59, 0x1F59], [0x1F5B, 0x1F5B], [0x1F5D, 0x1F5D], [0x1F5F, 0x1F5F], [0x1F68, 0x1F6F], [0x1FB8, 0x1FBB], [0x1FC8, 0x1FCB], [0x1FD8, 0x1FDB], [0x1FE8, 0x1FEC], [0x1FF8, 0x1FFB], [0x2102, 0x2102], [0x2107, 0x2107], [0x210B, 0x210D], [0x2110, 0x2112], [0x2115, 0x2115], [0x2119, 0x211D], [0x2124, 0x2124], [0x2126, 0x2126], [0x2128, 0x2128], [0x212A, 0x212D], [0x2130, 0x2131], [0x2133, 0x2133], [0x213E, 0x213F], [0x2145, 0x2145], [0xFF21, 0xFF3A]]; -Ll = [[0x0061, 0x007A], [0x00AA, 0x00AA], [0x00B5, 0x00B5], [0x00BA, 0x00BA], [0x00DF, 0x00F6], [0x00F8, 0x00FF], [0x0101, 0x0101], [0x0103, 0x0103], [0x0105, 0x0105], [0x0107, 0x0107], [0x0109, 0x0109], [0x010B, 0x010B], [0x010D, 0x010D], [0x010F, 0x010F], [0x0111, 0x0111], [0x0113, 0x0113], [0x0115, 0x0115], [0x0117, 0x0117], [0x0119, 0x0119], [0x011B, 0x011B], [0x011D, 0x011D], [0x011F, 0x011F], [0x0121, 0x0121], [0x0123, 0x0123], [0x0125, 0x0125], [0x0127, 0x0127], [0x0129, 0x0129], [0x012B, 0x012B], [0x012D, 0x012D], [0x012F, 0x012F], [0x0131, 0x0131], [0x0133, 0x0133], [0x0135, 0x0135], [0x0137, 0x0138], [0x013A, 0x013A], [0x013C, 0x013C], [0x013E, 0x013E], [0x0140, 0x0140], [0x0142, 0x0142], [0x0144, 0x0144], [0x0146, 0x0146], [0x0148, 0x0149], [0x014B, 0x014B], [0x014D, 0x014D], [0x014F, 0x014F], [0x0151, 0x0151], [0x0153, 0x0153], [0x0155, 0x0155], [0x0157, 0x0157], [0x0159, 0x0159], [0x015B, 0x015B], [0x015D, 0x015D], [0x015F, 0x015F], [0x0161, 0x0161], [0x0163, 0x0163], [0x0165, 0x0165], [0x0167, 0x0167], [0x0169, 0x0169], [0x016B, 0x016B], [0x016D, 0x016D], [0x016F, 0x016F], [0x0171, 0x0171], [0x0173, 0x0173], [0x0175, 0x0175], [0x0177, 0x0177], [0x017A, 0x017A], [0x017C, 0x017C], [0x017E, 0x0180], [0x0183, 0x0183], [0x0185, 0x0185], [0x0188, 0x0188], [0x018C, 0x018D], [0x0192, 0x0192], [0x0195, 0x0195], [0x0199, 0x019B], [0x019E, 0x019E], [0x01A1, 0x01A1], [0x01A3, 0x01A3], [0x01A5, 0x01A5], [0x01A8, 0x01A8], [0x01AA, 0x01AB], [0x01AD, 0x01AD], [0x01B0, 0x01B0], [0x01B4, 0x01B4], [0x01B6, 0x01B6], [0x01B9, 0x01BA], [0x01BD, 0x01BF], [0x01C6, 0x01C6], [0x01C9, 0x01C9], [0x01CC, 0x01CC], [0x01CE, 0x01CE], [0x01D0, 0x01D0], [0x01D2, 0x01D2], [0x01D4, 0x01D4], [0x01D6, 0x01D6], [0x01D8, 0x01D8], [0x01DA, 0x01DA], [0x01DC, 0x01DD], [0x01DF, 0x01DF], [0x01E1, 0x01E1], [0x01E3, 0x01E3], [0x01E5, 0x01E5], [0x01E7, 0x01E7], [0x01E9, 0x01E9], [0x01EB, 0x01EB], [0x01ED, 0x01ED], [0x01EF, 0x01F0], [0x01F3, 0x01F3], [0x01F5, 0x01F5], [0x01F9, 0x01F9], [0x01FB, 0x01FB], [0x01FD, 0x01FD], [0x01FF, 0x01FF], [0x0201, 0x0201], [0x0203, 0x0203], [0x0205, 0x0205], [0x0207, 0x0207], [0x0209, 0x0209], [0x020B, 0x020B], [0x020D, 0x020D], [0x020F, 0x020F], [0x0211, 0x0211], [0x0213, 0x0213], [0x0215, 0x0215], [0x0217, 0x0217], [0x0219, 0x0219], [0x021B, 0x021B], [0x021D, 0x021D], [0x021F, 0x021F], [0x0223, 0x0223], [0x0225, 0x0225], [0x0227, 0x0227], [0x0229, 0x0229], [0x022B, 0x022B], [0x022D, 0x022D], [0x022F, 0x022F], [0x0231, 0x0231], [0x0233, 0x0233], [0x0250, 0x02AD], [0x0390, 0x0390], [0x03AC, 0x03CE], [0x03D0, 0x03D1], [0x03D5, 0x03D7], [0x03D9, 0x03D9], [0x03DB, 0x03DB], [0x03DD, 0x03DD], [0x03DF, 0x03DF], [0x03E1, 0x03E1], [0x03E3, 0x03E3], [0x03E5, 0x03E5], [0x03E7, 0x03E7], [0x03E9, 0x03E9], [0x03EB, 0x03EB], [0x03ED, 0x03ED], [0x03EF, 0x03F3], [0x03F5, 0x03F5], [0x0430, 0x045F], [0x0461, 0x0461], [0x0463, 0x0463], [0x0465, 0x0465], [0x0467, 0x0467], [0x0469, 0x0469], [0x046B, 0x046B], [0x046D, 0x046D], [0x046F, 0x046F], [0x0471, 0x0471], [0x0473, 0x0473], [0x0475, 0x0475], [0x0477, 0x0477], [0x0479, 0x0479], [0x047B, 0x047B], [0x047D, 0x047D], [0x047F, 0x047F], [0x0481, 0x0481], [0x048B, 0x048B], [0x048D, 0x048D], [0x048F, 0x048F], [0x0491, 0x0491], [0x0493, 0x0493], [0x0495, 0x0495], [0x0497, 0x0497], [0x0499, 0x0499], [0x049B, 0x049B], [0x049D, 0x049D], [0x049F, 0x049F], [0x04A1, 0x04A1], [0x04A3, 0x04A3], [0x04A5, 0x04A5], [0x04A7, 0x04A7], [0x04A9, 0x04A9], [0x04AB, 0x04AB], [0x04AD, 0x04AD], [0x04AF, 0x04AF], [0x04B1, 0x04B1], [0x04B3, 0x04B3], [0x04B5, 0x04B5], [0x04B7, 0x04B7], [0x04B9, 0x04B9], [0x04BB, 0x04BB], [0x04BD, 0x04BD], [0x04BF, 0x04BF], [0x04C2, 0x04C2], [0x04C4, 0x04C4], [0x04C6, 0x04C6], [0x04C8, 0x04C8], [0x04CA, 0x04CA], [0x04CC, 0x04CC], [0x04CE, 0x04CE], [0x04D1, 0x04D1], [0x04D3, 0x04D3], [0x04D5, 0x04D5], [0x04D7, 0x04D7], [0x04D9, 0x04D9], [0x04DB, 0x04DB], [0x04DD, 0x04DD], [0x04DF, 0x04DF], [0x04E1, 0x04E1], [0x04E3, 0x04E3], [0x04E5, 0x04E5], [0x04E7, 0x04E7], [0x04E9, 0x04E9], [0x04EB, 0x04EB], [0x04ED, 0x04ED], [0x04EF, 0x04EF], [0x04F1, 0x04F1], [0x04F3, 0x04F3], [0x04F5, 0x04F5], [0x04F9, 0x04F9], [0x0501, 0x0501], [0x0503, 0x0503], [0x0505, 0x0505], [0x0507, 0x0507], [0x0509, 0x0509], [0x050B, 0x050B], [0x050D, 0x050D], [0x050F, 0x050F], [0x0561, 0x0587], [0x1E01, 0x1E01], [0x1E03, 0x1E03], [0x1E05, 0x1E05], [0x1E07, 0x1E07], [0x1E09, 0x1E09], [0x1E0B, 0x1E0B], [0x1E0D, 0x1E0D], [0x1E0F, 0x1E0F], [0x1E11, 0x1E11], [0x1E13, 0x1E13], [0x1E15, 0x1E15], [0x1E17, 0x1E17], [0x1E19, 0x1E19], [0x1E1B, 0x1E1B], [0x1E1D, 0x1E1D], [0x1E1F, 0x1E1F], [0x1E21, 0x1E21], [0x1E23, 0x1E23], [0x1E25, 0x1E25], [0x1E27, 0x1E27], [0x1E29, 0x1E29], [0x1E2B, 0x1E2B], [0x1E2D, 0x1E2D], [0x1E2F, 0x1E2F], [0x1E31, 0x1E31], [0x1E33, 0x1E33], [0x1E35, 0x1E35], [0x1E37, 0x1E37], [0x1E39, 0x1E39], [0x1E3B, 0x1E3B], [0x1E3D, 0x1E3D], [0x1E3F, 0x1E3F], [0x1E41, 0x1E41], [0x1E43, 0x1E43], [0x1E45, 0x1E45], [0x1E47, 0x1E47], [0x1E49, 0x1E49], [0x1E4B, 0x1E4B], [0x1E4D, 0x1E4D], [0x1E4F, 0x1E4F], [0x1E51, 0x1E51], [0x1E53, 0x1E53], [0x1E55, 0x1E55], [0x1E57, 0x1E57], [0x1E59, 0x1E59], [0x1E5B, 0x1E5B], [0x1E5D, 0x1E5D], [0x1E5F, 0x1E5F], [0x1E61, 0x1E61], [0x1E63, 0x1E63], [0x1E65, 0x1E65], [0x1E67, 0x1E67], [0x1E69, 0x1E69], [0x1E6B, 0x1E6B], [0x1E6D, 0x1E6D], [0x1E6F, 0x1E6F], [0x1E71, 0x1E71], [0x1E73, 0x1E73], [0x1E75, 0x1E75], [0x1E77, 0x1E77], [0x1E79, 0x1E79], [0x1E7B, 0x1E7B], [0x1E7D, 0x1E7D], [0x1E7F, 0x1E7F], [0x1E81, 0x1E81], [0x1E83, 0x1E83], [0x1E85, 0x1E85], [0x1E87, 0x1E87], [0x1E89, 0x1E89], [0x1E8B, 0x1E8B], [0x1E8D, 0x1E8D], [0x1E8F, 0x1E8F], [0x1E91, 0x1E91], [0x1E93, 0x1E93], [0x1E95, 0x1E9B], [0x1EA1, 0x1EA1], [0x1EA3, 0x1EA3], [0x1EA5, 0x1EA5], [0x1EA7, 0x1EA7], [0x1EA9, 0x1EA9], [0x1EAB, 0x1EAB], [0x1EAD, 0x1EAD], [0x1EAF, 0x1EAF], [0x1EB1, 0x1EB1], [0x1EB3, 0x1EB3], [0x1EB5, 0x1EB5], [0x1EB7, 0x1EB7], [0x1EB9, 0x1EB9], [0x1EBB, 0x1EBB], [0x1EBD, 0x1EBD], [0x1EBF, 0x1EBF], [0x1EC1, 0x1EC1], [0x1EC3, 0x1EC3], [0x1EC5, 0x1EC5], [0x1EC7, 0x1EC7], [0x1EC9, 0x1EC9], [0x1ECB, 0x1ECB], [0x1ECD, 0x1ECD], [0x1ECF, 0x1ECF], [0x1ED1, 0x1ED1], [0x1ED3, 0x1ED3], [0x1ED5, 0x1ED5], [0x1ED7, 0x1ED7], [0x1ED9, 0x1ED9], [0x1EDB, 0x1EDB], [0x1EDD, 0x1EDD], [0x1EDF, 0x1EDF], [0x1EE1, 0x1EE1], [0x1EE3, 0x1EE3], [0x1EE5, 0x1EE5], [0x1EE7, 0x1EE7], [0x1EE9, 0x1EE9], [0x1EEB, 0x1EEB], [0x1EED, 0x1EED], [0x1EEF, 0x1EEF], [0x1EF1, 0x1EF1], [0x1EF3, 0x1EF3], [0x1EF5, 0x1EF5], [0x1EF7, 0x1EF7], [0x1EF9, 0x1EF9], [0x1F00, 0x1F07], [0x1F10, 0x1F15], [0x1F20, 0x1F27], [0x1F30, 0x1F37], [0x1F40, 0x1F45], [0x1F50, 0x1F57], [0x1F60, 0x1F67], [0x1F70, 0x1F7D], [0x1F80, 0x1F87], [0x1F90, 0x1F97], [0x1FA0, 0x1FA7], [0x1FB0, 0x1FB4], [0x1FB6, 0x1FB7], [0x1FBE, 0x1FBE], [0x1FC2, 0x1FC4], [0x1FC6, 0x1FC7], [0x1FD0, 0x1FD3], [0x1FD6, 0x1FD7], [0x1FE0, 0x1FE7], [0x1FF2, 0x1FF4], [0x1FF6, 0x1FF7], [0x2071, 0x2071], [0x207F, 0x207F], [0x210A, 0x210A], [0x210E, 0x210F], [0x2113, 0x2113], [0x212F, 0x212F], [0x2134, 0x2134], [0x2139, 0x2139], [0x213D, 0x213D], [0x2146, 0x2149], [0xFB00, 0xFB06], [0xFB13, 0xFB17], [0xFF41, 0xFF5A]]; -Lt = [[0x01C5, 0x01C5], [0x01C8, 0x01C8], [0x01CB, 0x01CB], [0x01F2, 0x01F2], [0x1F88, 0x1F8F], [0x1F98, 0x1F9F], [0x1FA8, 0x1FAF], [0x1FBC, 0x1FBC], [0x1FCC, 0x1FCC], [0x1FFC, 0x1FFC]]; -Lm = [[0x02B0, 0x02B8], [0x02BB, 0x02C1], [0x02D0, 0x02D1], [0x02E0, 0x02E4], [0x02EE, 0x02EE], [0x037A, 0x037A], [0x0559, 0x0559], [0x0640, 0x0640], [0x06E5, 0x06E6], [0x0E46, 0x0E46], [0x0EC6, 0x0EC6], [0x17D7, 0x17D7], [0x1843, 0x1843], [0x3005, 0x3005], [0x3031, 0x3035], [0x303B, 0x303B], [0x309D, 0x309E], [0x30FC, 0x30FE], [0xFF70, 0xFF70], [0xFF9E, 0xFF9F]]; -Lo = [[0x01BB, 0x01BB], [0x01C0, 0x01C3], [0x05D0, 0x05EA], [0x05F0, 0x05F2], [0x0621, 0x063A], [0x0641, 0x064A], [0x066E, 0x066F], [0x0671, 0x06D3], [0x06D5, 0x06D5], [0x06FA, 0x06FC], [0x0710, 0x0710], [0x0712, 0x072C], [0x0780, 0x07A5], [0x07B1, 0x07B1], [0x0905, 0x0939], [0x093D, 0x093D], [0x0950, 0x0950], [0x0958, 0x0961], [0x0985, 0x098C], [0x098F, 0x0990], [0x0993, 0x09A8], [0x09AA, 0x09B0], [0x09B2, 0x09B2], [0x09B6, 0x09B9], [0x09DC, 0x09DD], [0x09DF, 0x09E1], [0x09F0, 0x09F1], [0x0A05, 0x0A0A], [0x0A0F, 0x0A10], [0x0A13, 0x0A28], [0x0A2A, 0x0A30], [0x0A32, 0x0A33], [0x0A35, 0x0A36], [0x0A38, 0x0A39], [0x0A59, 0x0A5C], [0x0A5E, 0x0A5E], [0x0A72, 0x0A74], [0x0A85, 0x0A8B], [0x0A8D, 0x0A8D], [0x0A8F, 0x0A91], [0x0A93, 0x0AA8], [0x0AAA, 0x0AB0], [0x0AB2, 0x0AB3], [0x0AB5, 0x0AB9], [0x0ABD, 0x0ABD], [0x0AD0, 0x0AD0], [0x0AE0, 0x0AE0], [0x0B05, 0x0B0C], [0x0B0F, 0x0B10], [0x0B13, 0x0B28], [0x0B2A, 0x0B30], [0x0B32, 0x0B33], [0x0B36, 0x0B39], [0x0B3D, 0x0B3D], [0x0B5C, 0x0B5D], [0x0B5F, 0x0B61], [0x0B83, 0x0B83], [0x0B85, 0x0B8A], [0x0B8E, 0x0B90], [0x0B92, 0x0B95], [0x0B99, 0x0B9A], [0x0B9C, 0x0B9C], [0x0B9E, 0x0B9F], [0x0BA3, 0x0BA4], [0x0BA8, 0x0BAA], [0x0BAE, 0x0BB5], [0x0BB7, 0x0BB9], [0x0C05, 0x0C0C], [0x0C0E, 0x0C10], [0x0C12, 0x0C28], [0x0C2A, 0x0C33], [0x0C35, 0x0C39], [0x0C60, 0x0C61], [0x0C85, 0x0C8C], [0x0C8E, 0x0C90], [0x0C92, 0x0CA8], [0x0CAA, 0x0CB3], [0x0CB5, 0x0CB9], [0x0CDE, 0x0CDE], [0x0CE0, 0x0CE1], [0x0D05, 0x0D0C], [0x0D0E, 0x0D10], [0x0D12, 0x0D28], [0x0D2A, 0x0D39], [0x0D60, 0x0D61], [0x0D85, 0x0D96], [0x0D9A, 0x0DB1], [0x0DB3, 0x0DBB], [0x0DBD, 0x0DBD], [0x0DC0, 0x0DC6], [0x0E01, 0x0E30], [0x0E32, 0x0E33], [0x0E40, 0x0E45], [0x0E81, 0x0E82], [0x0E84, 0x0E84], [0x0E87, 0x0E88], [0x0E8A, 0x0E8A], [0x0E8D, 0x0E8D], [0x0E94, 0x0E97], [0x0E99, 0x0E9F], [0x0EA1, 0x0EA3], [0x0EA5, 0x0EA5], [0x0EA7, 0x0EA7], [0x0EAA, 0x0EAB], [0x0EAD, 0x0EB0], [0x0EB2, 0x0EB3], [0x0EBD, 0x0EBD], [0x0EC0, 0x0EC4], [0x0EDC, 0x0EDD], [0x0F00, 0x0F00], [0x0F40, 0x0F47], [0x0F49, 0x0F6A], [0x0F88, 0x0F8B], [0x1000, 0x1021], [0x1023, 0x1027], [0x1029, 0x102A], [0x1050, 0x1055], [0x10D0, 0x10F8], [0x1100, 0x1159], [0x115F, 0x11A2], [0x11A8, 0x11F9], [0x1200, 0x1206], [0x1208, 0x1246], [0x1248, 0x1248], [0x124A, 0x124D], [0x1250, 0x1256], [0x1258, 0x1258], [0x125A, 0x125D], [0x1260, 0x1286], [0x1288, 0x1288], [0x128A, 0x128D], [0x1290, 0x12AE], [0x12B0, 0x12B0], [0x12B2, 0x12B5], [0x12B8, 0x12BE], [0x12C0, 0x12C0], [0x12C2, 0x12C5], [0x12C8, 0x12CE], [0x12D0, 0x12D6], [0x12D8, 0x12EE], [0x12F0, 0x130E], [0x1310, 0x1310], [0x1312, 0x1315], [0x1318, 0x131E], [0x1320, 0x1346], [0x1348, 0x135A], [0x13A0, 0x13F4], [0x1401, 0x166C], [0x166F, 0x1676], [0x1681, 0x169A], [0x16A0, 0x16EA], [0x1700, 0x170C], [0x170E, 0x1711], [0x1720, 0x1731], [0x1740, 0x1751], [0x1760, 0x176C], [0x176E, 0x1770], [0x1780, 0x17B3], [0x17DC, 0x17DC], [0x1820, 0x1842], [0x1844, 0x1877], [0x1880, 0x18A8], [0x2135, 0x2138], [0x3006, 0x3006], [0x303C, 0x303C], [0x3041, 0x3096], [0x309F, 0x309F], [0x30A1, 0x30FA], [0x30FF, 0x30FF], [0x3105, 0x312C], [0x3131, 0x318E], [0x31A0, 0x31B7], [0x31F0, 0x31FF], [0x3400, 0x4DB5], [0x4E00, 0x9FA5], [0xA000, 0xA48C], [0xAC00, 0xD7A3], [0xF900, 0xFA2D], [0xFA30, 0xFA6A], [0xFB1D, 0xFB1D], [0xFB1F, 0xFB28], [0xFB2A, 0xFB36], [0xFB38, 0xFB3C], [0xFB3E, 0xFB3E], [0xFB40, 0xFB41], [0xFB43, 0xFB44], [0xFB46, 0xFBB1], [0xFBD3, 0xFD3D], [0xFD50, 0xFD8F], [0xFD92, 0xFDC7], [0xFDF0, 0xFDFB], [0xFE70, 0xFE74], [0xFE76, 0xFEFC], [0xFF66, 0xFF6F], [0xFF71, 0xFF9D], [0xFFA0, 0xFFBE], [0xFFC2, 0xFFC7], [0xFFCA, 0xFFCF], [0xFFD2, 0xFFD7], [0xFFDA, 0xFFDC]]; -Nl = [[0x16EE, 0x16F0], [0x2160, 0x2183], [0x3007, 0x3007], [0x3021, 0x3029], [0x3038, 0x303A]]; -Mn = [[0x0300, 0x034F], [0x0360, 0x036F], [0x0483, 0x0486], [0x0591, 0x05A1], [0x05A3, 0x05B9], [0x05BB, 0x05BD], [0x05BF, 0x05BF], [0x05C1, 0x05C2], [0x05C4, 0x05C4], [0x064B, 0x0655], [0x0670, 0x0670], [0x06D6, 0x06DC], [0x06DF, 0x06E4], [0x06E7, 0x06E8], [0x06EA, 0x06ED], [0x0711, 0x0711], [0x0730, 0x074A], [0x07A6, 0x07B0], [0x0901, 0x0902], [0x093C, 0x093C], [0x0941, 0x0948], [0x094D, 0x094D], [0x0951, 0x0954], [0x0962, 0x0963], [0x0981, 0x0981], [0x09BC, 0x09BC], [0x09C1, 0x09C4], [0x09CD, 0x09CD], [0x09E2, 0x09E3], [0x0A02, 0x0A02], [0x0A3C, 0x0A3C], [0x0A41, 0x0A42], [0x0A47, 0x0A48], [0x0A4B, 0x0A4D], [0x0A70, 0x0A71], [0x0A81, 0x0A82], [0x0ABC, 0x0ABC], [0x0AC1, 0x0AC5], [0x0AC7, 0x0AC8], [0x0ACD, 0x0ACD], [0x0B01, 0x0B01], [0x0B3C, 0x0B3C], [0x0B3F, 0x0B3F], [0x0B41, 0x0B43], [0x0B4D, 0x0B4D], [0x0B56, 0x0B56], [0x0B82, 0x0B82], [0x0BC0, 0x0BC0], [0x0BCD, 0x0BCD], [0x0C3E, 0x0C40], [0x0C46, 0x0C48], [0x0C4A, 0x0C4D], [0x0C55, 0x0C56], [0x0CBF, 0x0CBF], [0x0CC6, 0x0CC6], [0x0CCC, 0x0CCD], [0x0D41, 0x0D43], [0x0D4D, 0x0D4D], [0x0DCA, 0x0DCA], [0x0DD2, 0x0DD4], [0x0DD6, 0x0DD6], [0x0E31, 0x0E31], [0x0E34, 0x0E3A], [0x0E47, 0x0E4E], [0x0EB1, 0x0EB1], [0x0EB4, 0x0EB9], [0x0EBB, 0x0EBC], [0x0EC8, 0x0ECD], [0x0F18, 0x0F19], [0x0F35, 0x0F35], [0x0F37, 0x0F37], [0x0F39, 0x0F39], [0x0F71, 0x0F7E], [0x0F80, 0x0F84], [0x0F86, 0x0F87], [0x0F90, 0x0F97], [0x0F99, 0x0FBC], [0x0FC6, 0x0FC6], [0x102D, 0x1030], [0x1032, 0x1032], [0x1036, 0x1037], [0x1039, 0x1039], [0x1058, 0x1059], [0x1712, 0x1714], [0x1732, 0x1734], [0x1752, 0x1753], [0x1772, 0x1773], [0x17B7, 0x17BD], [0x17C6, 0x17C6], [0x17C9, 0x17D3], [0x180B, 0x180D], [0x18A9, 0x18A9], [0x20D0, 0x20DC], [0x20E1, 0x20E1], [0x20E5, 0x20EA], [0x302A, 0x302F], [0x3099, 0x309A], [0xFB1E, 0xFB1E], [0xFE00, 0xFE0F], [0xFE20, 0xFE23]]; -Mc = [[0x0903, 0x0903], [0x093E, 0x0940], [0x0949, 0x094C], [0x0982, 0x0983], [0x09BE, 0x09C0], [0x09C7, 0x09C8], [0x09CB, 0x09CC], [0x09D7, 0x09D7], [0x0A3E, 0x0A40], [0x0A83, 0x0A83], [0x0ABE, 0x0AC0], [0x0AC9, 0x0AC9], [0x0ACB, 0x0ACC], [0x0B02, 0x0B03], [0x0B3E, 0x0B3E], [0x0B40, 0x0B40], [0x0B47, 0x0B48], [0x0B4B, 0x0B4C], [0x0B57, 0x0B57], [0x0BBE, 0x0BBF], [0x0BC1, 0x0BC2], [0x0BC6, 0x0BC8], [0x0BCA, 0x0BCC], [0x0BD7, 0x0BD7], [0x0C01, 0x0C03], [0x0C41, 0x0C44], [0x0C82, 0x0C83], [0x0CBE, 0x0CBE], [0x0CC0, 0x0CC4], [0x0CC7, 0x0CC8], [0x0CCA, 0x0CCB], [0x0CD5, 0x0CD6], [0x0D02, 0x0D03], [0x0D3E, 0x0D40], [0x0D46, 0x0D48], [0x0D4A, 0x0D4C], [0x0D57, 0x0D57], [0x0D82, 0x0D83], [0x0DCF, 0x0DD1], [0x0DD8, 0x0DDF], [0x0DF2, 0x0DF3], [0x0F3E, 0x0F3F], [0x0F7F, 0x0F7F], [0x102C, 0x102C], [0x1031, 0x1031], [0x1038, 0x1038], [0x1056, 0x1057], [0x17B4, 0x17B6], [0x17BE, 0x17C5], [0x17C7, 0x17C8]]; -Nd = [[0x0030, 0x0039], [0x0660, 0x0669], [0x06F0, 0x06F9], [0x0966, 0x096F], [0x09E6, 0x09EF], [0x0A66, 0x0A6F], [0x0AE6, 0x0AEF], [0x0B66, 0x0B6F], [0x0BE7, 0x0BEF], [0x0C66, 0x0C6F], [0x0CE6, 0x0CEF], [0x0D66, 0x0D6F], [0x0E50, 0x0E59], [0x0ED0, 0x0ED9], [0x0F20, 0x0F29], [0x1040, 0x1049], [0x1369, 0x1371], [0x17E0, 0x17E9], [0x1810, 0x1819], [0xFF10, 0xFF19]]; -Pc = [[0x005F, 0x005F], [0x203F, 0x2040], [0x30FB, 0x30FB], [0xFE33, 0xFE34], [0xFE4D, 0xFE4F], [0xFF3F, 0xFF3F], [0xFF65, 0xFF65]]; - -UnicodeLetterLu = []; -UnicodeLetterLl = []; -UnicodeLetterLt = []; -UnicodeLetterLm = []; -UnicodeLetterLo = []; -UnicodeLetterNl = []; -UnicodeLetterMn = []; -UnicodeLetterMc = []; -UnicodeLetterNd = []; -UnicodeLetterPc = []; - -for (indexI = 0; indexI < Lu.length; indexI++) { - for (indexJ = Lu[indexI][0]; indexJ <= Lu[indexI][1]; indexJ++) { - UnicodeLetterLu[indexJ] = true; - } -} -for (indexI = 0; indexI < Ll.length; indexI++) { - for (indexJ = Ll[indexI][0]; indexJ <= Ll[indexI][1]; indexJ++) { - UnicodeLetterLl[indexJ] = true; - } -} -for (indexI = 0; indexI < Lt.length; indexI++) { - for (indexJ = Lt[indexI][0]; indexJ <= Lt[indexI][1]; indexJ++) { - UnicodeLetterLt[indexJ] = true; - } -} -for (indexI = 0; indexI < Lm.length; indexI++) { - for (indexJ = Lm[indexI][0]; indexJ <= Lm[indexI][1]; indexJ++) { - UnicodeLetterLm[indexJ] = true; - } -} -for (indexI = 0; indexI < Lo.length; indexI++) { - for (indexJ = Lo[indexI][0]; indexJ <= Lo[indexI][1]; indexJ++) { - UnicodeLetterLo[indexJ] = true; - } -} -for (indexI = 0; indexI < Nl.length; indexI++) { - for (indexJ = Nl[indexI][0]; indexJ <= Nl[indexI][1]; indexJ++) { - UnicodeLetterNl[indexJ] = true; - } -} -for (indexI = 0; indexI < Mn.length; indexI++) { - for (indexJ = Mn[indexI][0]; indexJ <= Mn[indexI][1]; indexJ++) { - UnicodeLetterMn[indexJ] = true; - } -} -for (indexI = 0; indexI < Mc.length; indexI++) { - for (indexJ = Mc[indexI][0]; indexJ <= Mc[indexI][1]; indexJ++) { - UnicodeLetterMc[indexJ] = true; - } -} -for (indexI = 0; indexI < Nd.length; indexI++) { - for (indexJ = Nd[indexI][0]; indexJ <= Nd[indexI][1]; indexJ++) { - UnicodeLetterNd[indexJ] = true; - } -} -for (indexI = 0; indexI < Pc.length; indexI++) { - for (indexJ = Pc[indexI][0]; indexJ <= Pc[indexI][1]; indexJ++) { - UnicodeLetterPc[indexJ] = true; - } -} - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; -for (index = 0; index <= 65535; index++) { - if ((UnicodeLetterLu[index] === undefined) && (UnicodeLetterLl[index] === undefined) && (UnicodeLetterLt[index] === undefined) && (UnicodeLetterLm[index] === undefined) && (UnicodeLetterLo[index] === undefined) && (UnicodeLetterNl[index] === undefined) && (UnicodeLetterMn[index] === undefined) && (UnicodeLetterMc[index] === undefined) && (UnicodeLetterNd[index] === undefined) && (UnicodeLetterPc[index] === undefined) && (index !== 0x0024) && (index !== 0x005F)) { - try { - var hex = decimalToHexString(index); - var identifier = "$\\u" + hex + "1"; - eval(identifier + " = 1"); - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; - } catch (e) { - } - count++; - } -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_320/S7.6_A5.3_T2.js b/tests/ES3/Unicode/Unicode_320/S7.6_A5.3_T2.js deleted file mode 100644 index fa2033fc7..000000000 --- a/tests/ES3/Unicode/Unicode_320/S7.6_A5.3_T2.js +++ /dev/null @@ -1,155 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A5.3_T2; - * @section: 7.6, 6; - * @assertion: If a UnicodeEscapeSequence put a character into an identifier that would otherwise be illegal, throw SyntaxError; - * @description: Complex test with eval; -*/ - -//CHECK -Lu = [[0x0041, 0x005A], [0x00C0, 0x00D6], [0x00D8, 0x00DE], [0x0100, 0x0100], [0x0102, 0x0102], [0x0104, 0x0104], [0x0106, 0x0106], [0x0108, 0x0108], [0x010A, 0x010A], [0x010C, 0x010C], [0x010E, 0x010E], [0x0110, 0x0110], [0x0112, 0x0112], [0x0114, 0x0114], [0x0116, 0x0116], [0x0118, 0x0118], [0x011A, 0x011A], [0x011C, 0x011C], [0x011E, 0x011E], [0x0120, 0x0120], [0x0122, 0x0122], [0x0124, 0x0124], [0x0126, 0x0126], [0x0128, 0x0128], [0x012A, 0x012A], [0x012C, 0x012C], [0x012E, 0x012E], [0x0130, 0x0130], [0x0132, 0x0132], [0x0134, 0x0134], [0x0136, 0x0136], [0x0139, 0x0139], [0x013B, 0x013B], [0x013D, 0x013D], [0x013F, 0x013F], [0x0141, 0x0141], [0x0143, 0x0143], [0x0145, 0x0145], [0x0147, 0x0147], [0x014A, 0x014A], [0x014C, 0x014C], [0x014E, 0x014E], [0x0150, 0x0150], [0x0152, 0x0152], [0x0154, 0x0154], [0x0156, 0x0156], [0x0158, 0x0158], [0x015A, 0x015A], [0x015C, 0x015C], [0x015E, 0x015E], [0x0160, 0x0160], [0x0162, 0x0162], [0x0164, 0x0164], [0x0166, 0x0166], [0x0168, 0x0168], [0x016A, 0x016A], [0x016C, 0x016C], [0x016E, 0x016E], [0x0170, 0x0170], [0x0172, 0x0172], [0x0174, 0x0174], [0x0176, 0x0176], [0x0178, 0x0179], [0x017B, 0x017B], [0x017D, 0x017D], [0x0181, 0x0182], [0x0184, 0x0184], [0x0186, 0x0187], [0x0189, 0x018B], [0x018E, 0x0191], [0x0193, 0x0194], [0x0196, 0x0198], [0x019C, 0x019D], [0x019F, 0x01A0], [0x01A2, 0x01A2], [0x01A4, 0x01A4], [0x01A6, 0x01A7], [0x01A9, 0x01A9], [0x01AC, 0x01AC], [0x01AE, 0x01AF], [0x01B1, 0x01B3], [0x01B5, 0x01B5], [0x01B7, 0x01B8], [0x01BC, 0x01BC], [0x01C4, 0x01C4], [0x01C7, 0x01C7], [0x01CA, 0x01CA], [0x01CD, 0x01CD], [0x01CF, 0x01CF], [0x01D1, 0x01D1], [0x01D3, 0x01D3], [0x01D5, 0x01D5], [0x01D7, 0x01D7], [0x01D9, 0x01D9], [0x01DB, 0x01DB], [0x01DE, 0x01DE], [0x01E0, 0x01E0], [0x01E2, 0x01E2], [0x01E4, 0x01E4], [0x01E6, 0x01E6], [0x01E8, 0x01E8], [0x01EA, 0x01EA], [0x01EC, 0x01EC], [0x01EE, 0x01EE], [0x01F1, 0x01F1], [0x01F4, 0x01F4], [0x01F6, 0x01F8], [0x01FA, 0x01FA], [0x01FC, 0x01FC], [0x01FE, 0x01FE], [0x0200, 0x0200], [0x0202, 0x0202], [0x0204, 0x0204], [0x0206, 0x0206], [0x0208, 0x0208], [0x020A, 0x020A], [0x020C, 0x020C], [0x020E, 0x020E], [0x0210, 0x0210], [0x0212, 0x0212], [0x0214, 0x0214], [0x0216, 0x0216], [0x0218, 0x0218], [0x021A, 0x021A], [0x021C, 0x021C], [0x021E, 0x021E], [0x0220, 0x0220], [0x0222, 0x0222], [0x0224, 0x0224], [0x0226, 0x0226], [0x0228, 0x0228], [0x022A, 0x022A], [0x022C, 0x022C], [0x022E, 0x022E], [0x0230, 0x0230], [0x0232, 0x0232], [0x0386, 0x0386], [0x0388, 0x038A], [0x038C, 0x038C], [0x038E, 0x038F], [0x0391, 0x03A1], [0x03A3, 0x03AB], [0x03D2, 0x03D4], [0x03D8, 0x03D8], [0x03DA, 0x03DA], [0x03DC, 0x03DC], [0x03DE, 0x03DE], [0x03E0, 0x03E0], [0x03E2, 0x03E2], [0x03E4, 0x03E4], [0x03E6, 0x03E6], [0x03E8, 0x03E8], [0x03EA, 0x03EA], [0x03EC, 0x03EC], [0x03EE, 0x03EE], [0x03F4, 0x03F4], [0x0400, 0x042F], [0x0460, 0x0460], [0x0462, 0x0462], [0x0464, 0x0464], [0x0466, 0x0466], [0x0468, 0x0468], [0x046A, 0x046A], [0x046C, 0x046C], [0x046E, 0x046E], [0x0470, 0x0470], [0x0472, 0x0472], [0x0474, 0x0474], [0x0476, 0x0476], [0x0478, 0x0478], [0x047A, 0x047A], [0x047C, 0x047C], [0x047E, 0x047E], [0x0480, 0x0480], [0x048A, 0x048A], [0x048C, 0x048C], [0x048E, 0x048E], [0x0490, 0x0490], [0x0492, 0x0492], [0x0494, 0x0494], [0x0496, 0x0496], [0x0498, 0x0498], [0x049A, 0x049A], [0x049C, 0x049C], [0x049E, 0x049E], [0x04A0, 0x04A0], [0x04A2, 0x04A2], [0x04A4, 0x04A4], [0x04A6, 0x04A6], [0x04A8, 0x04A8], [0x04AA, 0x04AA], [0x04AC, 0x04AC], [0x04AE, 0x04AE], [0x04B0, 0x04B0], [0x04B2, 0x04B2], [0x04B4, 0x04B4], [0x04B6, 0x04B6], [0x04B8, 0x04B8], [0x04BA, 0x04BA], [0x04BC, 0x04BC], [0x04BE, 0x04BE], [0x04C0, 0x04C1], [0x04C3, 0x04C3], [0x04C5, 0x04C5], [0x04C7, 0x04C7], [0x04C9, 0x04C9], [0x04CB, 0x04CB], [0x04CD, 0x04CD], [0x04D0, 0x04D0], [0x04D2, 0x04D2], [0x04D4, 0x04D4], [0x04D6, 0x04D6], [0x04D8, 0x04D8], [0x04DA, 0x04DA], [0x04DC, 0x04DC], [0x04DE, 0x04DE], [0x04E0, 0x04E0], [0x04E2, 0x04E2], [0x04E4, 0x04E4], [0x04E6, 0x04E6], [0x04E8, 0x04E8], [0x04EA, 0x04EA], [0x04EC, 0x04EC], [0x04EE, 0x04EE], [0x04F0, 0x04F0], [0x04F2, 0x04F2], [0x04F4, 0x04F4], [0x04F8, 0x04F8], [0x0500, 0x0500], [0x0502, 0x0502], [0x0504, 0x0504], [0x0506, 0x0506], [0x0508, 0x0508], [0x050A, 0x050A], [0x050C, 0x050C], [0x050E, 0x050E], [0x0531, 0x0556], [0x10A0, 0x10C5], [0x1E00, 0x1E00], [0x1E02, 0x1E02], [0x1E04, 0x1E04], [0x1E06, 0x1E06], [0x1E08, 0x1E08], [0x1E0A, 0x1E0A], [0x1E0C, 0x1E0C], [0x1E0E, 0x1E0E], [0x1E10, 0x1E10], [0x1E12, 0x1E12], [0x1E14, 0x1E14], [0x1E16, 0x1E16], [0x1E18, 0x1E18], [0x1E1A, 0x1E1A], [0x1E1C, 0x1E1C], [0x1E1E, 0x1E1E], [0x1E20, 0x1E20], [0x1E22, 0x1E22], [0x1E24, 0x1E24], [0x1E26, 0x1E26], [0x1E28, 0x1E28], [0x1E2A, 0x1E2A], [0x1E2C, 0x1E2C], [0x1E2E, 0x1E2E], [0x1E30, 0x1E30], [0x1E32, 0x1E32], [0x1E34, 0x1E34], [0x1E36, 0x1E36], [0x1E38, 0x1E38], [0x1E3A, 0x1E3A], [0x1E3C, 0x1E3C], [0x1E3E, 0x1E3E], [0x1E40, 0x1E40], [0x1E42, 0x1E42], [0x1E44, 0x1E44], [0x1E46, 0x1E46], [0x1E48, 0x1E48], [0x1E4A, 0x1E4A], [0x1E4C, 0x1E4C], [0x1E4E, 0x1E4E], [0x1E50, 0x1E50], [0x1E52, 0x1E52], [0x1E54, 0x1E54], [0x1E56, 0x1E56], [0x1E58, 0x1E58], [0x1E5A, 0x1E5A], [0x1E5C, 0x1E5C], [0x1E5E, 0x1E5E], [0x1E60, 0x1E60], [0x1E62, 0x1E62], [0x1E64, 0x1E64], [0x1E66, 0x1E66], [0x1E68, 0x1E68], [0x1E6A, 0x1E6A], [0x1E6C, 0x1E6C], [0x1E6E, 0x1E6E], [0x1E70, 0x1E70], [0x1E72, 0x1E72], [0x1E74, 0x1E74], [0x1E76, 0x1E76], [0x1E78, 0x1E78], [0x1E7A, 0x1E7A], [0x1E7C, 0x1E7C], [0x1E7E, 0x1E7E], [0x1E80, 0x1E80], [0x1E82, 0x1E82], [0x1E84, 0x1E84], [0x1E86, 0x1E86], [0x1E88, 0x1E88], [0x1E8A, 0x1E8A], [0x1E8C, 0x1E8C], [0x1E8E, 0x1E8E], [0x1E90, 0x1E90], [0x1E92, 0x1E92], [0x1E94, 0x1E94], [0x1EA0, 0x1EA0], [0x1EA2, 0x1EA2], [0x1EA4, 0x1EA4], [0x1EA6, 0x1EA6], [0x1EA8, 0x1EA8], [0x1EAA, 0x1EAA], [0x1EAC, 0x1EAC], [0x1EAE, 0x1EAE], [0x1EB0, 0x1EB0], [0x1EB2, 0x1EB2], [0x1EB4, 0x1EB4], [0x1EB6, 0x1EB6], [0x1EB8, 0x1EB8], [0x1EBA, 0x1EBA], [0x1EBC, 0x1EBC], [0x1EBE, 0x1EBE], [0x1EC0, 0x1EC0], [0x1EC2, 0x1EC2], [0x1EC4, 0x1EC4], [0x1EC6, 0x1EC6], [0x1EC8, 0x1EC8], [0x1ECA, 0x1ECA], [0x1ECC, 0x1ECC], [0x1ECE, 0x1ECE], [0x1ED0, 0x1ED0], [0x1ED2, 0x1ED2], [0x1ED4, 0x1ED4], [0x1ED6, 0x1ED6], [0x1ED8, 0x1ED8], [0x1EDA, 0x1EDA], [0x1EDC, 0x1EDC], [0x1EDE, 0x1EDE], [0x1EE0, 0x1EE0], [0x1EE2, 0x1EE2], [0x1EE4, 0x1EE4], [0x1EE6, 0x1EE6], [0x1EE8, 0x1EE8], [0x1EEA, 0x1EEA], [0x1EEC, 0x1EEC], [0x1EEE, 0x1EEE], [0x1EF0, 0x1EF0], [0x1EF2, 0x1EF2], [0x1EF4, 0x1EF4], [0x1EF6, 0x1EF6], [0x1EF8, 0x1EF8], [0x1F08, 0x1F0F], [0x1F18, 0x1F1D], [0x1F28, 0x1F2F], [0x1F38, 0x1F3F], [0x1F48, 0x1F4D], [0x1F59, 0x1F59], [0x1F5B, 0x1F5B], [0x1F5D, 0x1F5D], [0x1F5F, 0x1F5F], [0x1F68, 0x1F6F], [0x1FB8, 0x1FBB], [0x1FC8, 0x1FCB], [0x1FD8, 0x1FDB], [0x1FE8, 0x1FEC], [0x1FF8, 0x1FFB], [0x2102, 0x2102], [0x2107, 0x2107], [0x210B, 0x210D], [0x2110, 0x2112], [0x2115, 0x2115], [0x2119, 0x211D], [0x2124, 0x2124], [0x2126, 0x2126], [0x2128, 0x2128], [0x212A, 0x212D], [0x2130, 0x2131], [0x2133, 0x2133], [0x213E, 0x213F], [0x2145, 0x2145], [0xFF21, 0xFF3A]]; -Ll = [[0x0061, 0x007A], [0x00AA, 0x00AA], [0x00B5, 0x00B5], [0x00BA, 0x00BA], [0x00DF, 0x00F6], [0x00F8, 0x00FF], [0x0101, 0x0101], [0x0103, 0x0103], [0x0105, 0x0105], [0x0107, 0x0107], [0x0109, 0x0109], [0x010B, 0x010B], [0x010D, 0x010D], [0x010F, 0x010F], [0x0111, 0x0111], [0x0113, 0x0113], [0x0115, 0x0115], [0x0117, 0x0117], [0x0119, 0x0119], [0x011B, 0x011B], [0x011D, 0x011D], [0x011F, 0x011F], [0x0121, 0x0121], [0x0123, 0x0123], [0x0125, 0x0125], [0x0127, 0x0127], [0x0129, 0x0129], [0x012B, 0x012B], [0x012D, 0x012D], [0x012F, 0x012F], [0x0131, 0x0131], [0x0133, 0x0133], [0x0135, 0x0135], [0x0137, 0x0138], [0x013A, 0x013A], [0x013C, 0x013C], [0x013E, 0x013E], [0x0140, 0x0140], [0x0142, 0x0142], [0x0144, 0x0144], [0x0146, 0x0146], [0x0148, 0x0149], [0x014B, 0x014B], [0x014D, 0x014D], [0x014F, 0x014F], [0x0151, 0x0151], [0x0153, 0x0153], [0x0155, 0x0155], [0x0157, 0x0157], [0x0159, 0x0159], [0x015B, 0x015B], [0x015D, 0x015D], [0x015F, 0x015F], [0x0161, 0x0161], [0x0163, 0x0163], [0x0165, 0x0165], [0x0167, 0x0167], [0x0169, 0x0169], [0x016B, 0x016B], [0x016D, 0x016D], [0x016F, 0x016F], [0x0171, 0x0171], [0x0173, 0x0173], [0x0175, 0x0175], [0x0177, 0x0177], [0x017A, 0x017A], [0x017C, 0x017C], [0x017E, 0x0180], [0x0183, 0x0183], [0x0185, 0x0185], [0x0188, 0x0188], [0x018C, 0x018D], [0x0192, 0x0192], [0x0195, 0x0195], [0x0199, 0x019B], [0x019E, 0x019E], [0x01A1, 0x01A1], [0x01A3, 0x01A3], [0x01A5, 0x01A5], [0x01A8, 0x01A8], [0x01AA, 0x01AB], [0x01AD, 0x01AD], [0x01B0, 0x01B0], [0x01B4, 0x01B4], [0x01B6, 0x01B6], [0x01B9, 0x01BA], [0x01BD, 0x01BF], [0x01C6, 0x01C6], [0x01C9, 0x01C9], [0x01CC, 0x01CC], [0x01CE, 0x01CE], [0x01D0, 0x01D0], [0x01D2, 0x01D2], [0x01D4, 0x01D4], [0x01D6, 0x01D6], [0x01D8, 0x01D8], [0x01DA, 0x01DA], [0x01DC, 0x01DD], [0x01DF, 0x01DF], [0x01E1, 0x01E1], [0x01E3, 0x01E3], [0x01E5, 0x01E5], [0x01E7, 0x01E7], [0x01E9, 0x01E9], [0x01EB, 0x01EB], [0x01ED, 0x01ED], [0x01EF, 0x01F0], [0x01F3, 0x01F3], [0x01F5, 0x01F5], [0x01F9, 0x01F9], [0x01FB, 0x01FB], [0x01FD, 0x01FD], [0x01FF, 0x01FF], [0x0201, 0x0201], [0x0203, 0x0203], [0x0205, 0x0205], [0x0207, 0x0207], [0x0209, 0x0209], [0x020B, 0x020B], [0x020D, 0x020D], [0x020F, 0x020F], [0x0211, 0x0211], [0x0213, 0x0213], [0x0215, 0x0215], [0x0217, 0x0217], [0x0219, 0x0219], [0x021B, 0x021B], [0x021D, 0x021D], [0x021F, 0x021F], [0x0223, 0x0223], [0x0225, 0x0225], [0x0227, 0x0227], [0x0229, 0x0229], [0x022B, 0x022B], [0x022D, 0x022D], [0x022F, 0x022F], [0x0231, 0x0231], [0x0233, 0x0233], [0x0250, 0x02AD], [0x0390, 0x0390], [0x03AC, 0x03CE], [0x03D0, 0x03D1], [0x03D5, 0x03D7], [0x03D9, 0x03D9], [0x03DB, 0x03DB], [0x03DD, 0x03DD], [0x03DF, 0x03DF], [0x03E1, 0x03E1], [0x03E3, 0x03E3], [0x03E5, 0x03E5], [0x03E7, 0x03E7], [0x03E9, 0x03E9], [0x03EB, 0x03EB], [0x03ED, 0x03ED], [0x03EF, 0x03F3], [0x03F5, 0x03F5], [0x0430, 0x045F], [0x0461, 0x0461], [0x0463, 0x0463], [0x0465, 0x0465], [0x0467, 0x0467], [0x0469, 0x0469], [0x046B, 0x046B], [0x046D, 0x046D], [0x046F, 0x046F], [0x0471, 0x0471], [0x0473, 0x0473], [0x0475, 0x0475], [0x0477, 0x0477], [0x0479, 0x0479], [0x047B, 0x047B], [0x047D, 0x047D], [0x047F, 0x047F], [0x0481, 0x0481], [0x048B, 0x048B], [0x048D, 0x048D], [0x048F, 0x048F], [0x0491, 0x0491], [0x0493, 0x0493], [0x0495, 0x0495], [0x0497, 0x0497], [0x0499, 0x0499], [0x049B, 0x049B], [0x049D, 0x049D], [0x049F, 0x049F], [0x04A1, 0x04A1], [0x04A3, 0x04A3], [0x04A5, 0x04A5], [0x04A7, 0x04A7], [0x04A9, 0x04A9], [0x04AB, 0x04AB], [0x04AD, 0x04AD], [0x04AF, 0x04AF], [0x04B1, 0x04B1], [0x04B3, 0x04B3], [0x04B5, 0x04B5], [0x04B7, 0x04B7], [0x04B9, 0x04B9], [0x04BB, 0x04BB], [0x04BD, 0x04BD], [0x04BF, 0x04BF], [0x04C2, 0x04C2], [0x04C4, 0x04C4], [0x04C6, 0x04C6], [0x04C8, 0x04C8], [0x04CA, 0x04CA], [0x04CC, 0x04CC], [0x04CE, 0x04CE], [0x04D1, 0x04D1], [0x04D3, 0x04D3], [0x04D5, 0x04D5], [0x04D7, 0x04D7], [0x04D9, 0x04D9], [0x04DB, 0x04DB], [0x04DD, 0x04DD], [0x04DF, 0x04DF], [0x04E1, 0x04E1], [0x04E3, 0x04E3], [0x04E5, 0x04E5], [0x04E7, 0x04E7], [0x04E9, 0x04E9], [0x04EB, 0x04EB], [0x04ED, 0x04ED], [0x04EF, 0x04EF], [0x04F1, 0x04F1], [0x04F3, 0x04F3], [0x04F5, 0x04F5], [0x04F9, 0x04F9], [0x0501, 0x0501], [0x0503, 0x0503], [0x0505, 0x0505], [0x0507, 0x0507], [0x0509, 0x0509], [0x050B, 0x050B], [0x050D, 0x050D], [0x050F, 0x050F], [0x0561, 0x0587], [0x1E01, 0x1E01], [0x1E03, 0x1E03], [0x1E05, 0x1E05], [0x1E07, 0x1E07], [0x1E09, 0x1E09], [0x1E0B, 0x1E0B], [0x1E0D, 0x1E0D], [0x1E0F, 0x1E0F], [0x1E11, 0x1E11], [0x1E13, 0x1E13], [0x1E15, 0x1E15], [0x1E17, 0x1E17], [0x1E19, 0x1E19], [0x1E1B, 0x1E1B], [0x1E1D, 0x1E1D], [0x1E1F, 0x1E1F], [0x1E21, 0x1E21], [0x1E23, 0x1E23], [0x1E25, 0x1E25], [0x1E27, 0x1E27], [0x1E29, 0x1E29], [0x1E2B, 0x1E2B], [0x1E2D, 0x1E2D], [0x1E2F, 0x1E2F], [0x1E31, 0x1E31], [0x1E33, 0x1E33], [0x1E35, 0x1E35], [0x1E37, 0x1E37], [0x1E39, 0x1E39], [0x1E3B, 0x1E3B], [0x1E3D, 0x1E3D], [0x1E3F, 0x1E3F], [0x1E41, 0x1E41], [0x1E43, 0x1E43], [0x1E45, 0x1E45], [0x1E47, 0x1E47], [0x1E49, 0x1E49], [0x1E4B, 0x1E4B], [0x1E4D, 0x1E4D], [0x1E4F, 0x1E4F], [0x1E51, 0x1E51], [0x1E53, 0x1E53], [0x1E55, 0x1E55], [0x1E57, 0x1E57], [0x1E59, 0x1E59], [0x1E5B, 0x1E5B], [0x1E5D, 0x1E5D], [0x1E5F, 0x1E5F], [0x1E61, 0x1E61], [0x1E63, 0x1E63], [0x1E65, 0x1E65], [0x1E67, 0x1E67], [0x1E69, 0x1E69], [0x1E6B, 0x1E6B], [0x1E6D, 0x1E6D], [0x1E6F, 0x1E6F], [0x1E71, 0x1E71], [0x1E73, 0x1E73], [0x1E75, 0x1E75], [0x1E77, 0x1E77], [0x1E79, 0x1E79], [0x1E7B, 0x1E7B], [0x1E7D, 0x1E7D], [0x1E7F, 0x1E7F], [0x1E81, 0x1E81], [0x1E83, 0x1E83], [0x1E85, 0x1E85], [0x1E87, 0x1E87], [0x1E89, 0x1E89], [0x1E8B, 0x1E8B], [0x1E8D, 0x1E8D], [0x1E8F, 0x1E8F], [0x1E91, 0x1E91], [0x1E93, 0x1E93], [0x1E95, 0x1E9B], [0x1EA1, 0x1EA1], [0x1EA3, 0x1EA3], [0x1EA5, 0x1EA5], [0x1EA7, 0x1EA7], [0x1EA9, 0x1EA9], [0x1EAB, 0x1EAB], [0x1EAD, 0x1EAD], [0x1EAF, 0x1EAF], [0x1EB1, 0x1EB1], [0x1EB3, 0x1EB3], [0x1EB5, 0x1EB5], [0x1EB7, 0x1EB7], [0x1EB9, 0x1EB9], [0x1EBB, 0x1EBB], [0x1EBD, 0x1EBD], [0x1EBF, 0x1EBF], [0x1EC1, 0x1EC1], [0x1EC3, 0x1EC3], [0x1EC5, 0x1EC5], [0x1EC7, 0x1EC7], [0x1EC9, 0x1EC9], [0x1ECB, 0x1ECB], [0x1ECD, 0x1ECD], [0x1ECF, 0x1ECF], [0x1ED1, 0x1ED1], [0x1ED3, 0x1ED3], [0x1ED5, 0x1ED5], [0x1ED7, 0x1ED7], [0x1ED9, 0x1ED9], [0x1EDB, 0x1EDB], [0x1EDD, 0x1EDD], [0x1EDF, 0x1EDF], [0x1EE1, 0x1EE1], [0x1EE3, 0x1EE3], [0x1EE5, 0x1EE5], [0x1EE7, 0x1EE7], [0x1EE9, 0x1EE9], [0x1EEB, 0x1EEB], [0x1EED, 0x1EED], [0x1EEF, 0x1EEF], [0x1EF1, 0x1EF1], [0x1EF3, 0x1EF3], [0x1EF5, 0x1EF5], [0x1EF7, 0x1EF7], [0x1EF9, 0x1EF9], [0x1F00, 0x1F07], [0x1F10, 0x1F15], [0x1F20, 0x1F27], [0x1F30, 0x1F37], [0x1F40, 0x1F45], [0x1F50, 0x1F57], [0x1F60, 0x1F67], [0x1F70, 0x1F7D], [0x1F80, 0x1F87], [0x1F90, 0x1F97], [0x1FA0, 0x1FA7], [0x1FB0, 0x1FB4], [0x1FB6, 0x1FB7], [0x1FBE, 0x1FBE], [0x1FC2, 0x1FC4], [0x1FC6, 0x1FC7], [0x1FD0, 0x1FD3], [0x1FD6, 0x1FD7], [0x1FE0, 0x1FE7], [0x1FF2, 0x1FF4], [0x1FF6, 0x1FF7], [0x2071, 0x2071], [0x207F, 0x207F], [0x210A, 0x210A], [0x210E, 0x210F], [0x2113, 0x2113], [0x212F, 0x212F], [0x2134, 0x2134], [0x2139, 0x2139], [0x213D, 0x213D], [0x2146, 0x2149], [0xFB00, 0xFB06], [0xFB13, 0xFB17], [0xFF41, 0xFF5A]]; -Lt = [[0x01C5, 0x01C5], [0x01C8, 0x01C8], [0x01CB, 0x01CB], [0x01F2, 0x01F2], [0x1F88, 0x1F8F], [0x1F98, 0x1F9F], [0x1FA8, 0x1FAF], [0x1FBC, 0x1FBC], [0x1FCC, 0x1FCC], [0x1FFC, 0x1FFC]]; -Lm = [[0x02B0, 0x02B8], [0x02BB, 0x02C1], [0x02D0, 0x02D1], [0x02E0, 0x02E4], [0x02EE, 0x02EE], [0x037A, 0x037A], [0x0559, 0x0559], [0x0640, 0x0640], [0x06E5, 0x06E6], [0x0E46, 0x0E46], [0x0EC6, 0x0EC6], [0x17D7, 0x17D7], [0x1843, 0x1843], [0x3005, 0x3005], [0x3031, 0x3035], [0x303B, 0x303B], [0x309D, 0x309E], [0x30FC, 0x30FE], [0xFF70, 0xFF70], [0xFF9E, 0xFF9F]]; -Lo = [[0x01BB, 0x01BB], [0x01C0, 0x01C3], [0x05D0, 0x05EA], [0x05F0, 0x05F2], [0x0621, 0x063A], [0x0641, 0x064A], [0x066E, 0x066F], [0x0671, 0x06D3], [0x06D5, 0x06D5], [0x06FA, 0x06FC], [0x0710, 0x0710], [0x0712, 0x072C], [0x0780, 0x07A5], [0x07B1, 0x07B1], [0x0905, 0x0939], [0x093D, 0x093D], [0x0950, 0x0950], [0x0958, 0x0961], [0x0985, 0x098C], [0x098F, 0x0990], [0x0993, 0x09A8], [0x09AA, 0x09B0], [0x09B2, 0x09B2], [0x09B6, 0x09B9], [0x09DC, 0x09DD], [0x09DF, 0x09E1], [0x09F0, 0x09F1], [0x0A05, 0x0A0A], [0x0A0F, 0x0A10], [0x0A13, 0x0A28], [0x0A2A, 0x0A30], [0x0A32, 0x0A33], [0x0A35, 0x0A36], [0x0A38, 0x0A39], [0x0A59, 0x0A5C], [0x0A5E, 0x0A5E], [0x0A72, 0x0A74], [0x0A85, 0x0A8B], [0x0A8D, 0x0A8D], [0x0A8F, 0x0A91], [0x0A93, 0x0AA8], [0x0AAA, 0x0AB0], [0x0AB2, 0x0AB3], [0x0AB5, 0x0AB9], [0x0ABD, 0x0ABD], [0x0AD0, 0x0AD0], [0x0AE0, 0x0AE0], [0x0B05, 0x0B0C], [0x0B0F, 0x0B10], [0x0B13, 0x0B28], [0x0B2A, 0x0B30], [0x0B32, 0x0B33], [0x0B36, 0x0B39], [0x0B3D, 0x0B3D], [0x0B5C, 0x0B5D], [0x0B5F, 0x0B61], [0x0B83, 0x0B83], [0x0B85, 0x0B8A], [0x0B8E, 0x0B90], [0x0B92, 0x0B95], [0x0B99, 0x0B9A], [0x0B9C, 0x0B9C], [0x0B9E, 0x0B9F], [0x0BA3, 0x0BA4], [0x0BA8, 0x0BAA], [0x0BAE, 0x0BB5], [0x0BB7, 0x0BB9], [0x0C05, 0x0C0C], [0x0C0E, 0x0C10], [0x0C12, 0x0C28], [0x0C2A, 0x0C33], [0x0C35, 0x0C39], [0x0C60, 0x0C61], [0x0C85, 0x0C8C], [0x0C8E, 0x0C90], [0x0C92, 0x0CA8], [0x0CAA, 0x0CB3], [0x0CB5, 0x0CB9], [0x0CDE, 0x0CDE], [0x0CE0, 0x0CE1], [0x0D05, 0x0D0C], [0x0D0E, 0x0D10], [0x0D12, 0x0D28], [0x0D2A, 0x0D39], [0x0D60, 0x0D61], [0x0D85, 0x0D96], [0x0D9A, 0x0DB1], [0x0DB3, 0x0DBB], [0x0DBD, 0x0DBD], [0x0DC0, 0x0DC6], [0x0E01, 0x0E30], [0x0E32, 0x0E33], [0x0E40, 0x0E45], [0x0E81, 0x0E82], [0x0E84, 0x0E84], [0x0E87, 0x0E88], [0x0E8A, 0x0E8A], [0x0E8D, 0x0E8D], [0x0E94, 0x0E97], [0x0E99, 0x0E9F], [0x0EA1, 0x0EA3], [0x0EA5, 0x0EA5], [0x0EA7, 0x0EA7], [0x0EAA, 0x0EAB], [0x0EAD, 0x0EB0], [0x0EB2, 0x0EB3], [0x0EBD, 0x0EBD], [0x0EC0, 0x0EC4], [0x0EDC, 0x0EDD], [0x0F00, 0x0F00], [0x0F40, 0x0F47], [0x0F49, 0x0F6A], [0x0F88, 0x0F8B], [0x1000, 0x1021], [0x1023, 0x1027], [0x1029, 0x102A], [0x1050, 0x1055], [0x10D0, 0x10F8], [0x1100, 0x1159], [0x115F, 0x11A2], [0x11A8, 0x11F9], [0x1200, 0x1206], [0x1208, 0x1246], [0x1248, 0x1248], [0x124A, 0x124D], [0x1250, 0x1256], [0x1258, 0x1258], [0x125A, 0x125D], [0x1260, 0x1286], [0x1288, 0x1288], [0x128A, 0x128D], [0x1290, 0x12AE], [0x12B0, 0x12B0], [0x12B2, 0x12B5], [0x12B8, 0x12BE], [0x12C0, 0x12C0], [0x12C2, 0x12C5], [0x12C8, 0x12CE], [0x12D0, 0x12D6], [0x12D8, 0x12EE], [0x12F0, 0x130E], [0x1310, 0x1310], [0x1312, 0x1315], [0x1318, 0x131E], [0x1320, 0x1346], [0x1348, 0x135A], [0x13A0, 0x13F4], [0x1401, 0x166C], [0x166F, 0x1676], [0x1681, 0x169A], [0x16A0, 0x16EA], [0x1700, 0x170C], [0x170E, 0x1711], [0x1720, 0x1731], [0x1740, 0x1751], [0x1760, 0x176C], [0x176E, 0x1770], [0x1780, 0x17B3], [0x17DC, 0x17DC], [0x1820, 0x1842], [0x1844, 0x1877], [0x1880, 0x18A8], [0x2135, 0x2138], [0x3006, 0x3006], [0x303C, 0x303C], [0x3041, 0x3096], [0x309F, 0x309F], [0x30A1, 0x30FA], [0x30FF, 0x30FF], [0x3105, 0x312C], [0x3131, 0x318E], [0x31A0, 0x31B7], [0x31F0, 0x31FF], [0x3400, 0x4DB5], [0x4E00, 0x9FA5], [0xA000, 0xA48C], [0xAC00, 0xD7A3], [0xF900, 0xFA2D], [0xFA30, 0xFA6A], [0xFB1D, 0xFB1D], [0xFB1F, 0xFB28], [0xFB2A, 0xFB36], [0xFB38, 0xFB3C], [0xFB3E, 0xFB3E], [0xFB40, 0xFB41], [0xFB43, 0xFB44], [0xFB46, 0xFBB1], [0xFBD3, 0xFD3D], [0xFD50, 0xFD8F], [0xFD92, 0xFDC7], [0xFDF0, 0xFDFB], [0xFE70, 0xFE74], [0xFE76, 0xFEFC], [0xFF66, 0xFF6F], [0xFF71, 0xFF9D], [0xFFA0, 0xFFBE], [0xFFC2, 0xFFC7], [0xFFCA, 0xFFCF], [0xFFD2, 0xFFD7], [0xFFDA, 0xFFDC]]; -Nl = [[0x16EE, 0x16F0], [0x2160, 0x2183], [0x3007, 0x3007], [0x3021, 0x3029], [0x3038, 0x303A]]; -Mn = [[0x0300, 0x034F], [0x0360, 0x036F], [0x0483, 0x0486], [0x0591, 0x05A1], [0x05A3, 0x05B9], [0x05BB, 0x05BD], [0x05BF, 0x05BF], [0x05C1, 0x05C2], [0x05C4, 0x05C4], [0x064B, 0x0655], [0x0670, 0x0670], [0x06D6, 0x06DC], [0x06DF, 0x06E4], [0x06E7, 0x06E8], [0x06EA, 0x06ED], [0x0711, 0x0711], [0x0730, 0x074A], [0x07A6, 0x07B0], [0x0901, 0x0902], [0x093C, 0x093C], [0x0941, 0x0948], [0x094D, 0x094D], [0x0951, 0x0954], [0x0962, 0x0963], [0x0981, 0x0981], [0x09BC, 0x09BC], [0x09C1, 0x09C4], [0x09CD, 0x09CD], [0x09E2, 0x09E3], [0x0A02, 0x0A02], [0x0A3C, 0x0A3C], [0x0A41, 0x0A42], [0x0A47, 0x0A48], [0x0A4B, 0x0A4D], [0x0A70, 0x0A71], [0x0A81, 0x0A82], [0x0ABC, 0x0ABC], [0x0AC1, 0x0AC5], [0x0AC7, 0x0AC8], [0x0ACD, 0x0ACD], [0x0B01, 0x0B01], [0x0B3C, 0x0B3C], [0x0B3F, 0x0B3F], [0x0B41, 0x0B43], [0x0B4D, 0x0B4D], [0x0B56, 0x0B56], [0x0B82, 0x0B82], [0x0BC0, 0x0BC0], [0x0BCD, 0x0BCD], [0x0C3E, 0x0C40], [0x0C46, 0x0C48], [0x0C4A, 0x0C4D], [0x0C55, 0x0C56], [0x0CBF, 0x0CBF], [0x0CC6, 0x0CC6], [0x0CCC, 0x0CCD], [0x0D41, 0x0D43], [0x0D4D, 0x0D4D], [0x0DCA, 0x0DCA], [0x0DD2, 0x0DD4], [0x0DD6, 0x0DD6], [0x0E31, 0x0E31], [0x0E34, 0x0E3A], [0x0E47, 0x0E4E], [0x0EB1, 0x0EB1], [0x0EB4, 0x0EB9], [0x0EBB, 0x0EBC], [0x0EC8, 0x0ECD], [0x0F18, 0x0F19], [0x0F35, 0x0F35], [0x0F37, 0x0F37], [0x0F39, 0x0F39], [0x0F71, 0x0F7E], [0x0F80, 0x0F84], [0x0F86, 0x0F87], [0x0F90, 0x0F97], [0x0F99, 0x0FBC], [0x0FC6, 0x0FC6], [0x102D, 0x1030], [0x1032, 0x1032], [0x1036, 0x1037], [0x1039, 0x1039], [0x1058, 0x1059], [0x1712, 0x1714], [0x1732, 0x1734], [0x1752, 0x1753], [0x1772, 0x1773], [0x17B7, 0x17BD], [0x17C6, 0x17C6], [0x17C9, 0x17D3], [0x180B, 0x180D], [0x18A9, 0x18A9], [0x20D0, 0x20DC], [0x20E1, 0x20E1], [0x20E5, 0x20EA], [0x302A, 0x302F], [0x3099, 0x309A], [0xFB1E, 0xFB1E], [0xFE00, 0xFE0F], [0xFE20, 0xFE23]]; -Mc = [[0x0903, 0x0903], [0x093E, 0x0940], [0x0949, 0x094C], [0x0982, 0x0983], [0x09BE, 0x09C0], [0x09C7, 0x09C8], [0x09CB, 0x09CC], [0x09D7, 0x09D7], [0x0A3E, 0x0A40], [0x0A83, 0x0A83], [0x0ABE, 0x0AC0], [0x0AC9, 0x0AC9], [0x0ACB, 0x0ACC], [0x0B02, 0x0B03], [0x0B3E, 0x0B3E], [0x0B40, 0x0B40], [0x0B47, 0x0B48], [0x0B4B, 0x0B4C], [0x0B57, 0x0B57], [0x0BBE, 0x0BBF], [0x0BC1, 0x0BC2], [0x0BC6, 0x0BC8], [0x0BCA, 0x0BCC], [0x0BD7, 0x0BD7], [0x0C01, 0x0C03], [0x0C41, 0x0C44], [0x0C82, 0x0C83], [0x0CBE, 0x0CBE], [0x0CC0, 0x0CC4], [0x0CC7, 0x0CC8], [0x0CCA, 0x0CCB], [0x0CD5, 0x0CD6], [0x0D02, 0x0D03], [0x0D3E, 0x0D40], [0x0D46, 0x0D48], [0x0D4A, 0x0D4C], [0x0D57, 0x0D57], [0x0D82, 0x0D83], [0x0DCF, 0x0DD1], [0x0DD8, 0x0DDF], [0x0DF2, 0x0DF3], [0x0F3E, 0x0F3F], [0x0F7F, 0x0F7F], [0x102C, 0x102C], [0x1031, 0x1031], [0x1038, 0x1038], [0x1056, 0x1057], [0x17B4, 0x17B6], [0x17BE, 0x17C5], [0x17C7, 0x17C8]]; -Nd = [[0x0030, 0x0039], [0x0660, 0x0669], [0x06F0, 0x06F9], [0x0966, 0x096F], [0x09E6, 0x09EF], [0x0A66, 0x0A6F], [0x0AE6, 0x0AEF], [0x0B66, 0x0B6F], [0x0BE7, 0x0BEF], [0x0C66, 0x0C6F], [0x0CE6, 0x0CEF], [0x0D66, 0x0D6F], [0x0E50, 0x0E59], [0x0ED0, 0x0ED9], [0x0F20, 0x0F29], [0x1040, 0x1049], [0x1369, 0x1371], [0x17E0, 0x17E9], [0x1810, 0x1819], [0xFF10, 0xFF19]]; -Pc = [[0x005F, 0x005F], [0x203F, 0x2040], [0x30FB, 0x30FB], [0xFE33, 0xFE34], [0xFE4D, 0xFE4F], [0xFF3F, 0xFF3F], [0xFF65, 0xFF65]]; - -UnicodeLetterLu = []; -UnicodeLetterLl = []; -UnicodeLetterLt = []; -UnicodeLetterLm = []; -UnicodeLetterLo = []; -UnicodeLetterNl = []; -UnicodeLetterMn = []; -UnicodeLetterMc = []; -UnicodeLetterNd = []; -UnicodeLetterPc = []; - -for (indexI = 0; indexI < Lu.length; indexI++) { - for (indexJ = Lu[indexI][0]; indexJ <= Lu[indexI][1]; indexJ++) { - UnicodeLetterLu[indexJ] = true; - } -} -for (indexI = 0; indexI < Ll.length; indexI++) { - for (indexJ = Ll[indexI][0]; indexJ <= Ll[indexI][1]; indexJ++) { - UnicodeLetterLl[indexJ] = true; - } -} -for (indexI = 0; indexI < Lt.length; indexI++) { - for (indexJ = Lt[indexI][0]; indexJ <= Lt[indexI][1]; indexJ++) { - UnicodeLetterLt[indexJ] = true; - } -} -for (indexI = 0; indexI < Lm.length; indexI++) { - for (indexJ = Lm[indexI][0]; indexJ <= Lm[indexI][1]; indexJ++) { - UnicodeLetterLm[indexJ] = true; - } -} -for (indexI = 0; indexI < Lo.length; indexI++) { - for (indexJ = Lo[indexI][0]; indexJ <= Lo[indexI][1]; indexJ++) { - UnicodeLetterLo[indexJ] = true; - } -} -for (indexI = 0; indexI < Nl.length; indexI++) { - for (indexJ = Nl[indexI][0]; indexJ <= Nl[indexI][1]; indexJ++) { - UnicodeLetterNl[indexJ] = true; - } -} -for (indexI = 0; indexI < Mn.length; indexI++) { - for (indexJ = Mn[indexI][0]; indexJ <= Mn[indexI][1]; indexJ++) { - UnicodeLetterMn[indexJ] = true; - } -} -for (indexI = 0; indexI < Mc.length; indexI++) { - for (indexJ = Mc[indexI][0]; indexJ <= Mc[indexI][1]; indexJ++) { - UnicodeLetterMc[indexJ] = true; - } -} -for (indexI = 0; indexI < Nd.length; indexI++) { - for (indexJ = Nd[indexI][0]; indexJ <= Nd[indexI][1]; indexJ++) { - UnicodeLetterNd[indexJ] = true; - } -} -for (indexI = 0; indexI < Pc.length; indexI++) { - for (indexJ = Pc[indexI][0]; indexJ <= Pc[indexI][1]; indexJ++) { - UnicodeLetterPc[indexJ] = true; - } -} - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; -for (index = 0; index <= 65535; index++) { - if ((UnicodeLetterLu[index] === undefined) && (UnicodeLetterLl[index] === undefined) && (UnicodeLetterLt[index] === undefined) && (UnicodeLetterLm[index] === undefined) && (UnicodeLetterLo[index] === undefined) && (UnicodeLetterNl[index] === undefined) && (UnicodeLetterMn[index] === undefined) && (UnicodeLetterMc[index] === undefined) && (UnicodeLetterNd[index] === undefined) && (UnicodeLetterPc[index] === undefined) && (index !== 0x0024) && (index !== 0x005F)) { - try { - var hex = decimalToHexString(index); - var identifier1 = "$" + String.fromCharCode(index) + "1"; - var identifier2 = "$\\u" + hex + "1"; - eval(identifier1 + " = 1"); - eval(identifier1 + " === " + identifier2); - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; - } catch (e) { - } - count++; - } -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_410/S15.10.2.12_A1_T6.js b/tests/ES3/Unicode/Unicode_410/S15.10.2.12_A1_T6.js deleted file mode 100644 index dc246a4c5..000000000 --- a/tests/ES3/Unicode/Unicode_410/S15.10.2.12_A1_T6.js +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.10.2.12_A1_T6; - * @section: 15.10.2.12, 7.2, 7.3; - * @assertion: The production CharacterClassEscape :: s evaluates by returning the set of characters - * containing the characters that are on the right-hand side of the WhiteSpace (7.2) or LineTerminator (7.3) productions; - * @description: Complex test; -*/ - -//CHECK#1 -var regexp_s = /\s/; -Zs = [[0x1680, 0x1680], [0x180E, 0x180E], [0x2000, 0x200A], [0x202F, 0x202F], [0x205F, 0x205F], [0x3000, 0x3000]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Zs.length; indexI++) { - for (indexJ = Zs[indexI][0]; indexJ <= Zs[indexI][1]; indexJ++) { - var str = String.fromCharCode(indexJ); - var arr = regexp_s.exec(str); - if ((arr === null) || (arr[0] !== str)) { - var hex = decimalToHexString(indexJ); - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_410/S15.10.2.12_A2_T6.js b/tests/ES3/Unicode/Unicode_410/S15.10.2.12_A2_T6.js deleted file mode 100644 index f2b2bc0e2..000000000 --- a/tests/ES3/Unicode/Unicode_410/S15.10.2.12_A2_T6.js +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.10.2.12_A2_T6; - * @section: 15.10.2.12, 7.2, 7.3; -* @assertion: The production CharacterClassEscape :: S evaluates by returning -* the set of all characters not included in the set returned by -* CharacterClassEscape :: s; - * @description: Complex test; -*/ - -//CHECK#1 -var regexp_S = /\S/; -Zs = [[0x1680, 0x1680], [0x180E, 0x180E], [0x2000, 0x200A], [0x202F, 0x202F], [0x205F, 0x205F], [0x3000, 0x3000]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Zs.length; indexI++) { - for (indexJ = Zs[indexI][0]; indexJ <= Zs[indexI][1]; indexJ++) { - if (regexp_S.exec(String.fromCharCode(indexJ)) !== null) { - var hex = decimalToHexString(indexJ); - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_410/S15.5.4.16_A1.js b/tests/ES3/Unicode/Unicode_410/S15.5.4.16_A1.js deleted file mode 100644 index 110f02eed..000000000 --- a/tests/ES3/Unicode/Unicode_410/S15.5.4.16_A1.js +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.16_A1; -* @section: 15.5.4.16; -* @assertion: The characters in UnicodeData.txt, but not in SpecialCasings.txt are converted one by one; -* @description: Complex test; -*/ - -//CHECK -LowerCase = [[0x0041, 0x0061], [0x0042, 0x0062], [0x0043, 0x0063], [0x0044, 0x0064], [0x0045, 0x0065], [0x0046, 0x0066], [0x0047, 0x0067], [0x0048, 0x0068], [0x004B, 0x006B], [0x004C, 0x006C], [0x004D, 0x006D], [0x004E, 0x006E], [0x004F, 0x006F], [0x0050, 0x0070], [0x0051, 0x0071], [0x0052, 0x0072], [0x0053, 0x0073], [0x0054, 0x0074], [0x0055, 0x0075], [0x0056, 0x0076], [0x0057, 0x0077], [0x0058, 0x0078], [0x0059, 0x0079], [0x005A, 0x007A], [0x00C0, 0x00E0], [0x00C1, 0x00E1], [0x00C2, 0x00E2], [0x00C3, 0x00E3], [0x00C4, 0x00E4], [0x00C5, 0x00E5], [0x00C6, 0x00E6], [0x00C7, 0x00E7], [0x00C8, 0x00E8], [0x00C9, 0x00E9], [0x00CA, 0x00EA], [0x00CB, 0x00EB], [0x00CE, 0x00EE], [0x00CF, 0x00EF], [0x00D0, 0x00F0], [0x00D1, 0x00F1], [0x00D2, 0x00F2], [0x00D3, 0x00F3], [0x00D4, 0x00F4], [0x00D5, 0x00F5], [0x00D6, 0x00F6], [0x00D8, 0x00F8], [0x00D9, 0x00F9], [0x00DA, 0x00FA], [0x00DB, 0x00FB], [0x00DC, 0x00FC], [0x00DD, 0x00FD], [0x00DE, 0x00FE], [0x0100, 0x0101], [0x0102, 0x0103], [0x0104, 0x0105], [0x0106, 0x0107], [0x0108, 0x0109], [0x010A, 0x010B], [0x010C, 0x010D], [0x010E, 0x010F], [0x0110, 0x0111], [0x0112, 0x0113], [0x0114, 0x0115], [0x0116, 0x0117], [0x0118, 0x0119], [0x011A, 0x011B], [0x011C, 0x011D], [0x011E, 0x011F], [0x0120, 0x0121], [0x0122, 0x0123], [0x0124, 0x0125], [0x0126, 0x0127], [0x012A, 0x012B], [0x012C, 0x012D], [0x0132, 0x0133], [0x0134, 0x0135], [0x0136, 0x0137], [0x0139, 0x013A], [0x013B, 0x013C], [0x013D, 0x013E], [0x013F, 0x0140], [0x0141, 0x0142], [0x0143, 0x0144], [0x0145, 0x0146], [0x0147, 0x0148], [0x014A, 0x014B], [0x014C, 0x014D], [0x014E, 0x014F], [0x0150, 0x0151], [0x0152, 0x0153], [0x0154, 0x0155], [0x0156, 0x0157], [0x0158, 0x0159], [0x015A, 0x015B], [0x015C, 0x015D], [0x015E, 0x015F], [0x0160, 0x0161], [0x0162, 0x0163], [0x0164, 0x0165], [0x0166, 0x0167], [0x0168, 0x0169], [0x016A, 0x016B], [0x016C, 0x016D], [0x016E, 0x016F], [0x0170, 0x0171], [0x0172, 0x0173], [0x0174, 0x0175], [0x0176, 0x0177], [0x0178, 0x00FF], [0x0179, 0x017A], [0x017B, 0x017C], [0x017D, 0x017E], [0x0181, 0x0253], [0x0182, 0x0183], [0x0184, 0x0185], [0x0186, 0x0254], [0x0187, 0x0188], [0x0189, 0x0256], [0x018A, 0x0257], [0x018B, 0x018C], [0x018E, 0x01DD], [0x018F, 0x0259], [0x0190, 0x025B], [0x0191, 0x0192], [0x0193, 0x0260], [0x0194, 0x0263], [0x0196, 0x0269], [0x0197, 0x0268], [0x0198, 0x0199], [0x019C, 0x026F], [0x019D, 0x0272], [0x019F, 0x0275], [0x01A0, 0x01A1], [0x01A2, 0x01A3], [0x01A4, 0x01A5], [0x01A6, 0x0280], [0x01A7, 0x01A8], [0x01A9, 0x0283], [0x01AC, 0x01AD], [0x01AE, 0x0288], [0x01AF, 0x01B0], [0x01B1, 0x028A], [0x01B2, 0x028B], [0x01B3, 0x01B4], [0x01B5, 0x01B6], [0x01B7, 0x0292], [0x01B8, 0x01B9], [0x01BC, 0x01BD], [0x01C4, 0x01C6], [0x01C5, 0x01C6], [0x01C7, 0x01C9], [0x01C8, 0x01C9], [0x01CA, 0x01CC], [0x01CB, 0x01CC], [0x01CD, 0x01CE], [0x01CF, 0x01D0], [0x01D1, 0x01D2], [0x01D3, 0x01D4], [0x01D5, 0x01D6], [0x01D7, 0x01D8], [0x01D9, 0x01DA], [0x01DB, 0x01DC], [0x01DE, 0x01DF], [0x01E0, 0x01E1], [0x01E2, 0x01E3], [0x01E4, 0x01E5], [0x01E6, 0x01E7], [0x01E8, 0x01E9], [0x01EA, 0x01EB], [0x01EC, 0x01ED], [0x01EE, 0x01EF], [0x01F1, 0x01F3], [0x01F2, 0x01F3], [0x01F4, 0x01F5], [0x01F6, 0x0195], [0x01F7, 0x01BF], [0x01F8, 0x01F9], [0x01FA, 0x01FB], [0x01FC, 0x01FD], [0x01FE, 0x01FF], [0x0200, 0x0201], [0x0202, 0x0203], [0x0204, 0x0205], [0x0206, 0x0207], [0x0208, 0x0209], [0x020A, 0x020B], [0x020C, 0x020D], [0x020E, 0x020F], [0x0210, 0x0211], [0x0212, 0x0213], [0x0214, 0x0215], [0x0216, 0x0217], [0x0218, 0x0219], [0x021A, 0x021B], [0x021C, 0x021D], [0x021E, 0x021F], [0x0220, 0x019E], [0x0222, 0x0223], [0x0224, 0x0225], [0x0226, 0x0227], [0x0228, 0x0229], [0x022A, 0x022B], [0x022C, 0x022D], [0x022E, 0x022F], [0x0230, 0x0231], [0x0232, 0x0233], [0x023B, 0x023C], [0x023D, 0x019A], [0x0241, 0x0294], [0x0386, 0x03AC], [0x0388, 0x03AD], [0x0389, 0x03AE], [0x038A, 0x03AF], [0x038C, 0x03CC], [0x038E, 0x03CD], [0x038F, 0x03CE], [0x0391, 0x03B1], [0x0392, 0x03B2], [0x0393, 0x03B3], [0x0394, 0x03B4], [0x0395, 0x03B5], [0x0396, 0x03B6], [0x0397, 0x03B7], [0x0398, 0x03B8], [0x0399, 0x03B9], [0x039A, 0x03BA], [0x039B, 0x03BB], [0x039C, 0x03BC], [0x039D, 0x03BD], [0x039E, 0x03BE], [0x039F, 0x03BF], [0x03A0, 0x03C0], [0x03A1, 0x03C1], [0x03A4, 0x03C4], [0x03A5, 0x03C5], [0x03A6, 0x03C6], [0x03A7, 0x03C7], [0x03A8, 0x03C8], [0x03A9, 0x03C9], [0x03AA, 0x03CA], [0x03AB, 0x03CB], [0x03D8, 0x03D9], [0x03DA, 0x03DB], [0x03DC, 0x03DD], [0x03DE, 0x03DF], [0x03E0, 0x03E1], [0x03E2, 0x03E3], [0x03E4, 0x03E5], [0x03E6, 0x03E7], [0x03E8, 0x03E9], [0x03EA, 0x03EB], [0x03EC, 0x03ED], [0x03EE, 0x03EF], [0x03F4, 0x03B8], [0x03F7, 0x03F8], [0x03F9, 0x03F2], [0x03FA, 0x03FB], [0x0400, 0x0450], [0x0401, 0x0451], [0x0402, 0x0452], [0x0403, 0x0453], [0x0404, 0x0454], [0x0405, 0x0455], [0x0406, 0x0456], [0x0407, 0x0457], [0x0408, 0x0458], [0x0409, 0x0459], [0x040A, 0x045A], [0x040B, 0x045B], [0x040C, 0x045C], [0x040D, 0x045D], [0x040E, 0x045E], [0x040F, 0x045F], [0x0410, 0x0430], [0x0411, 0x0431], [0x0412, 0x0432], [0x0413, 0x0433], [0x0414, 0x0434], [0x0415, 0x0435], [0x0416, 0x0436], [0x0417, 0x0437], [0x0418, 0x0438], [0x0419, 0x0439], [0x041A, 0x043A], [0x041B, 0x043B], [0x041C, 0x043C], [0x041D, 0x043D], [0x041E, 0x043E], [0x041F, 0x043F], [0x0420, 0x0440], [0x0421, 0x0441], [0x0422, 0x0442], [0x0423, 0x0443], [0x0424, 0x0444], [0x0425, 0x0445], [0x0426, 0x0446], [0x0427, 0x0447], [0x0428, 0x0448], [0x0429, 0x0449], [0x042A, 0x044A], [0x042B, 0x044B], [0x042C, 0x044C], [0x042D, 0x044D], [0x042E, 0x044E], [0x042F, 0x044F], [0x0460, 0x0461], [0x0462, 0x0463], [0x0464, 0x0465], [0x0466, 0x0467], [0x0468, 0x0469], [0x046A, 0x046B], [0x046C, 0x046D], [0x046E, 0x046F], [0x0470, 0x0471], [0x0472, 0x0473], [0x0474, 0x0475], [0x0476, 0x0477], [0x0478, 0x0479], [0x047A, 0x047B], [0x047C, 0x047D], [0x047E, 0x047F], [0x0480, 0x0481], [0x048A, 0x048B], [0x048C, 0x048D], [0x048E, 0x048F], [0x0490, 0x0491], [0x0492, 0x0493], [0x0494, 0x0495], [0x0496, 0x0497], [0x0498, 0x0499], [0x049A, 0x049B], [0x049C, 0x049D], [0x049E, 0x049F], [0x04A0, 0x04A1], [0x04A2, 0x04A3], [0x04A4, 0x04A5], [0x04A6, 0x04A7], [0x04A8, 0x04A9], [0x04AA, 0x04AB], [0x04AC, 0x04AD], [0x04AE, 0x04AF], [0x04B0, 0x04B1], [0x04B2, 0x04B3], [0x04B4, 0x04B5], [0x04B6, 0x04B7], [0x04B8, 0x04B9], [0x04BA, 0x04BB], [0x04BC, 0x04BD], [0x04BE, 0x04BF], [0x04C1, 0x04C2], [0x04C3, 0x04C4], [0x04C5, 0x04C6], [0x04C7, 0x04C8], [0x04C9, 0x04CA], [0x04CB, 0x04CC], [0x04CD, 0x04CE], [0x04D0, 0x04D1], [0x04D2, 0x04D3], [0x04D4, 0x04D5], [0x04D6, 0x04D7], [0x04D8, 0x04D9], [0x04DA, 0x04DB], [0x04DC, 0x04DD], [0x04DE, 0x04DF], [0x04E0, 0x04E1], [0x04E2, 0x04E3], [0x04E4, 0x04E5], [0x04E6, 0x04E7], [0x04E8, 0x04E9], [0x04EA, 0x04EB], [0x04EC, 0x04ED], [0x04EE, 0x04EF], [0x04F0, 0x04F1], [0x04F2, 0x04F3], [0x04F4, 0x04F5], [0x04F6, 0x04F7], [0x04F8, 0x04F9], [0x0500, 0x0501], [0x0502, 0x0503], [0x0504, 0x0505], [0x0506, 0x0507], [0x0508, 0x0509], [0x050A, 0x050B], [0x050C, 0x050D], [0x050E, 0x050F], [0x0531, 0x0561], [0x0532, 0x0562], [0x0533, 0x0563], [0x0534, 0x0564], [0x0535, 0x0565], [0x0536, 0x0566], [0x0537, 0x0567], [0x0538, 0x0568], [0x0539, 0x0569], [0x053A, 0x056A], [0x053B, 0x056B], [0x053C, 0x056C], [0x053D, 0x056D], [0x053E, 0x056E], [0x053F, 0x056F], [0x0540, 0x0570], [0x0541, 0x0571], [0x0542, 0x0572], [0x0543, 0x0573], [0x0544, 0x0574], [0x0545, 0x0575], [0x0546, 0x0576], [0x0547, 0x0577], [0x0548, 0x0578], [0x0549, 0x0579], [0x054A, 0x057A], [0x054B, 0x057B], [0x054C, 0x057C], [0x054D, 0x057D], [0x054E, 0x057E], [0x054F, 0x057F], [0x0550, 0x0580], [0x0551, 0x0581], [0x0552, 0x0582], [0x0553, 0x0583], [0x0554, 0x0584], [0x0555, 0x0585], [0x0556, 0x0586], [0x10A0, 0x2D00], [0x10A1, 0x2D01], [0x10A2, 0x2D02], [0x10A3, 0x2D03], [0x10A4, 0x2D04], [0x10A5, 0x2D05], [0x10A6, 0x2D06], [0x10A7, 0x2D07], [0x10A8, 0x2D08], [0x10A9, 0x2D09], [0x10AA, 0x2D0A], [0x10AB, 0x2D0B], [0x10AC, 0x2D0C], [0x10AD, 0x2D0D], [0x10AE, 0x2D0E], [0x10AF, 0x2D0F], [0x10B0, 0x2D10], [0x10B1, 0x2D11], [0x10B2, 0x2D12], [0x10B3, 0x2D13], [0x10B4, 0x2D14], [0x10B5, 0x2D15], [0x10B6, 0x2D16], [0x10B7, 0x2D17], [0x10B8, 0x2D18], [0x10B9, 0x2D19], [0x10BA, 0x2D1A], [0x10BB, 0x2D1B], [0x10BC, 0x2D1C], [0x10BD, 0x2D1D], [0x10BE, 0x2D1E], [0x10BF, 0x2D1F], [0x10C0, 0x2D20], [0x10C1, 0x2D21], [0x10C2, 0x2D22], [0x10C3, 0x2D23], [0x10C4, 0x2D24], [0x10C5, 0x2D25], [0x1E00, 0x1E01], [0x1E02, 0x1E03], [0x1E04, 0x1E05], [0x1E06, 0x1E07], [0x1E08, 0x1E09], [0x1E0A, 0x1E0B], [0x1E0C, 0x1E0D], [0x1E0E, 0x1E0F], [0x1E10, 0x1E11], [0x1E12, 0x1E13], [0x1E14, 0x1E15], [0x1E16, 0x1E17], [0x1E18, 0x1E19], [0x1E1A, 0x1E1B], [0x1E1C, 0x1E1D], [0x1E1E, 0x1E1F], [0x1E20, 0x1E21], [0x1E22, 0x1E23], [0x1E24, 0x1E25], [0x1E26, 0x1E27], [0x1E28, 0x1E29], [0x1E2A, 0x1E2B], [0x1E2C, 0x1E2D], [0x1E2E, 0x1E2F], [0x1E30, 0x1E31], [0x1E32, 0x1E33], [0x1E34, 0x1E35], [0x1E36, 0x1E37], [0x1E38, 0x1E39], [0x1E3A, 0x1E3B], [0x1E3C, 0x1E3D], [0x1E3E, 0x1E3F], [0x1E40, 0x1E41], [0x1E42, 0x1E43], [0x1E44, 0x1E45], [0x1E46, 0x1E47], [0x1E48, 0x1E49], [0x1E4A, 0x1E4B], [0x1E4C, 0x1E4D], [0x1E4E, 0x1E4F], [0x1E50, 0x1E51], [0x1E52, 0x1E53], [0x1E54, 0x1E55], [0x1E56, 0x1E57], [0x1E58, 0x1E59], [0x1E5A, 0x1E5B], [0x1E5C, 0x1E5D], [0x1E5E, 0x1E5F], [0x1E60, 0x1E61], [0x1E62, 0x1E63], [0x1E64, 0x1E65], [0x1E66, 0x1E67], [0x1E68, 0x1E69], [0x1E6A, 0x1E6B], [0x1E6C, 0x1E6D], [0x1E6E, 0x1E6F], [0x1E70, 0x1E71], [0x1E72, 0x1E73], [0x1E74, 0x1E75], [0x1E76, 0x1E77], [0x1E78, 0x1E79], [0x1E7A, 0x1E7B], [0x1E7C, 0x1E7D], [0x1E7E, 0x1E7F], [0x1E80, 0x1E81], [0x1E82, 0x1E83], [0x1E84, 0x1E85], [0x1E86, 0x1E87], [0x1E88, 0x1E89], [0x1E8A, 0x1E8B], [0x1E8C, 0x1E8D], [0x1E8E, 0x1E8F], [0x1E90, 0x1E91], [0x1E92, 0x1E93], [0x1E94, 0x1E95], [0x1EA0, 0x1EA1], [0x1EA2, 0x1EA3], [0x1EA4, 0x1EA5], [0x1EA6, 0x1EA7], [0x1EA8, 0x1EA9], [0x1EAA, 0x1EAB], [0x1EAC, 0x1EAD], [0x1EAE, 0x1EAF], [0x1EB0, 0x1EB1], [0x1EB2, 0x1EB3], [0x1EB4, 0x1EB5], [0x1EB6, 0x1EB7], [0x1EB8, 0x1EB9], [0x1EBA, 0x1EBB], [0x1EBC, 0x1EBD], [0x1EBE, 0x1EBF], [0x1EC0, 0x1EC1], [0x1EC2, 0x1EC3], [0x1EC4, 0x1EC5], [0x1EC6, 0x1EC7], [0x1EC8, 0x1EC9], [0x1ECA, 0x1ECB], [0x1ECC, 0x1ECD], [0x1ECE, 0x1ECF], [0x1ED0, 0x1ED1], [0x1ED2, 0x1ED3], [0x1ED4, 0x1ED5], [0x1ED6, 0x1ED7], [0x1ED8, 0x1ED9], [0x1EDA, 0x1EDB], [0x1EDC, 0x1EDD], [0x1EDE, 0x1EDF], [0x1EE0, 0x1EE1], [0x1EE2, 0x1EE3], [0x1EE4, 0x1EE5], [0x1EE6, 0x1EE7], [0x1EE8, 0x1EE9], [0x1EEA, 0x1EEB], [0x1EEC, 0x1EED], [0x1EEE, 0x1EEF], [0x1EF0, 0x1EF1], [0x1EF2, 0x1EF3], [0x1EF4, 0x1EF5], [0x1EF6, 0x1EF7], [0x1EF8, 0x1EF9], [0x1F08, 0x1F00], [0x1F09, 0x1F01], [0x1F0A, 0x1F02], [0x1F0B, 0x1F03], [0x1F0C, 0x1F04], [0x1F0D, 0x1F05], [0x1F0E, 0x1F06], [0x1F0F, 0x1F07], [0x1F18, 0x1F10], [0x1F19, 0x1F11], [0x1F1A, 0x1F12], [0x1F1B, 0x1F13], [0x1F1C, 0x1F14], [0x1F1D, 0x1F15], [0x1F28, 0x1F20], [0x1F29, 0x1F21], [0x1F2A, 0x1F22], [0x1F2B, 0x1F23], [0x1F2C, 0x1F24], [0x1F2D, 0x1F25], [0x1F2E, 0x1F26], [0x1F2F, 0x1F27], [0x1F38, 0x1F30], [0x1F39, 0x1F31], [0x1F3A, 0x1F32], [0x1F3B, 0x1F33], [0x1F3C, 0x1F34], [0x1F3D, 0x1F35], [0x1F3E, 0x1F36], [0x1F3F, 0x1F37], [0x1F48, 0x1F40], [0x1F49, 0x1F41], [0x1F4A, 0x1F42], [0x1F4B, 0x1F43], [0x1F4C, 0x1F44], [0x1F4D, 0x1F45], [0x1F59, 0x1F51], [0x1F5B, 0x1F53], [0x1F5D, 0x1F55], [0x1F5F, 0x1F57], [0x1F68, 0x1F60], [0x1F69, 0x1F61], [0x1F6A, 0x1F62], [0x1F6B, 0x1F63], [0x1F6C, 0x1F64], [0x1F6D, 0x1F65], [0x1F6E, 0x1F66], [0x1F6F, 0x1F67], [0x1FB8, 0x1FB0], [0x1FB9, 0x1FB1], [0x1FBA, 0x1F70], [0x1FBB, 0x1F71], [0x1FC8, 0x1F72], [0x1FC9, 0x1F73], [0x1FCA, 0x1F74], [0x1FCB, 0x1F75], [0x1FD8, 0x1FD0], [0x1FD9, 0x1FD1], [0x1FDA, 0x1F76], [0x1FDB, 0x1F77], [0x1FE8, 0x1FE0], [0x1FE9, 0x1FE1], [0x1FEA, 0x1F7A], [0x1FEB, 0x1F7B], [0x1FEC, 0x1FE5], [0x1FF8, 0x1F78], [0x1FF9, 0x1F79], [0x1FFA, 0x1F7C], [0x1FFB, 0x1F7D], [0x2126, 0x03C9], [0x212A, 0x006B], [0x212B, 0x00E5], [0x2160, 0x2170], [0x2161, 0x2171], [0x2162, 0x2172], [0x2163, 0x2173], [0x2164, 0x2174], [0x2165, 0x2175], [0x2166, 0x2176], [0x2167, 0x2177], [0x2168, 0x2178], [0x2169, 0x2179], [0x216A, 0x217A], [0x216B, 0x217B], [0x216C, 0x217C], [0x216D, 0x217D], [0x216E, 0x217E], [0x216F, 0x217F], [0x24B6, 0x24D0], [0x24B7, 0x24D1], [0x24B8, 0x24D2], [0x24B9, 0x24D3], [0x24BA, 0x24D4], [0x24BB, 0x24D5], [0x24BC, 0x24D6], [0x24BD, 0x24D7], [0x24BE, 0x24D8], [0x24BF, 0x24D9], [0x24C0, 0x24DA], [0x24C1, 0x24DB], [0x24C2, 0x24DC], [0x24C3, 0x24DD], [0x24C4, 0x24DE], [0x24C5, 0x24DF], [0x24C6, 0x24E0], [0x24C7, 0x24E1], [0x24C8, 0x24E2], [0x24C9, 0x24E3], [0x24CA, 0x24E4], [0x24CB, 0x24E5], [0x24CC, 0x24E6], [0x24CD, 0x24E7], [0x24CE, 0x24E8], [0x24CF, 0x24E9], [0x2C00, 0x2C30], [0x2C01, 0x2C31], [0x2C02, 0x2C32], [0x2C03, 0x2C33], [0x2C04, 0x2C34], [0x2C05, 0x2C35], [0x2C06, 0x2C36], [0x2C07, 0x2C37], [0x2C08, 0x2C38], [0x2C09, 0x2C39], [0x2C0A, 0x2C3A], [0x2C0B, 0x2C3B], [0x2C0C, 0x2C3C], [0x2C0D, 0x2C3D], [0x2C0E, 0x2C3E], [0x2C0F, 0x2C3F], [0x2C10, 0x2C40], [0x2C11, 0x2C41], [0x2C12, 0x2C42], [0x2C13, 0x2C43], [0x2C14, 0x2C44], [0x2C15, 0x2C45], [0x2C16, 0x2C46], [0x2C17, 0x2C47], [0x2C18, 0x2C48], [0x2C19, 0x2C49], [0x2C1A, 0x2C4A], [0x2C1B, 0x2C4B], [0x2C1C, 0x2C4C], [0x2C1D, 0x2C4D], [0x2C1E, 0x2C4E], [0x2C1F, 0x2C4F], [0x2C20, 0x2C50], [0x2C21, 0x2C51], [0x2C22, 0x2C52], [0x2C23, 0x2C53], [0x2C24, 0x2C54], [0x2C25, 0x2C55], [0x2C26, 0x2C56], [0x2C27, 0x2C57], [0x2C28, 0x2C58], [0x2C29, 0x2C59], [0x2C2A, 0x2C5A], [0x2C2B, 0x2C5B], [0x2C2C, 0x2C5C], [0x2C2D, 0x2C5D], [0x2C2E, 0x2C5E], [0x2C80, 0x2C81], [0x2C82, 0x2C83], [0x2C84, 0x2C85], [0x2C86, 0x2C87], [0x2C88, 0x2C89], [0x2C8A, 0x2C8B], [0x2C8C, 0x2C8D], [0x2C8E, 0x2C8F], [0x2C90, 0x2C91], [0x2C92, 0x2C93], [0x2C94, 0x2C95], [0x2C96, 0x2C97], [0x2C98, 0x2C99], [0x2C9A, 0x2C9B], [0x2C9C, 0x2C9D], [0x2C9E, 0x2C9F], [0x2CA0, 0x2CA1], [0x2CA2, 0x2CA3], [0x2CA4, 0x2CA5], [0x2CA6, 0x2CA7], [0x2CA8, 0x2CA9], [0x2CAA, 0x2CAB], [0x2CAC, 0x2CAD], [0x2CAE, 0x2CAF], [0x2CB0, 0x2CB1], [0x2CB2, 0x2CB3], [0x2CB4, 0x2CB5], [0x2CB6, 0x2CB7], [0x2CB8, 0x2CB9], [0x2CBA, 0x2CBB], [0x2CBC, 0x2CBD], [0x2CBE, 0x2CBF], [0x2CC0, 0x2CC1], [0x2CC2, 0x2CC3], [0x2CC4, 0x2CC5], [0x2CC6, 0x2CC7], [0x2CC8, 0x2CC9], [0x2CCA, 0x2CCB], [0x2CCC, 0x2CCD], [0x2CCE, 0x2CCF], [0x2CD0, 0x2CD1], [0x2CD2, 0x2CD3], [0x2CD4, 0x2CD5], [0x2CD6, 0x2CD7], [0x2CD8, 0x2CD9], [0x2CDA, 0x2CDB], [0x2CDC, 0x2CDD], [0x2CDE, 0x2CDF], [0x2CE0, 0x2CE1], [0x2CE2, 0x2CE3], [0xFF21, 0xFF41], [0xFF22, 0xFF42], [0xFF23, 0xFF43], [0xFF24, 0xFF44], [0xFF25, 0xFF45], [0xFF26, 0xFF46], [0xFF27, 0xFF47], [0xFF28, 0xFF48], [0xFF29, 0xFF49], [0xFF2A, 0xFF4A], [0xFF2B, 0xFF4B], [0xFF2C, 0xFF4C], [0xFF2D, 0xFF4D], [0xFF2E, 0xFF4E], [0xFF2F, 0xFF4F], [0xFF30, 0xFF50], [0xFF31, 0xFF51], [0xFF32, 0xFF52], [0xFF33, 0xFF53], [0xFF34, 0xFF54], [0xFF35, 0xFF55], [0xFF36, 0xFF56], [0xFF37, 0xFF57], [0xFF38, 0xFF58], [0xFF39, 0xFF59], [0xFF3A, 0xFF5A]]; - -errorCount = 0; -count = 0; - -for (index = 0; index < LowerCase.length; index++) { - var capitalI = LowerCase[index][0]; - var capitalS = String.fromCharCode(capitalI); - var smallI = LowerCase[index][1]; - var smallS = String.fromCharCode(smallI); - if (capitalS.toLowerCase() !== smallS) { - var hexC = decimalToHexString(capitalI); - var hexS = decimalToHexString(smallI); - $ERROR('#' + hexC + '->' + hexS + ' '); - errorCount++; - } - count++; -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_410/S15.5.4.16_A2.js b/tests/ES3/Unicode/Unicode_410/S15.5.4.16_A2.js deleted file mode 100644 index 4aae14fcb..000000000 --- a/tests/ES3/Unicode/Unicode_410/S15.5.4.16_A2.js +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.16_A2; -* @section: 15.5.4.16; -* @assertion: The characters in SpecialCasings.txt are converted by multi-character results; -* @description: Complex test; -*/ - -//CHECK -LowerSpecialCase = [["\u0130", "\u0069\u0307"], ["\u1F88", "\u1F80"], ["\u1F89", "\u1F81"], ["\u1F8A", "\u1F82"], ["\u1F8B", "\u1F83"], ["\u1F8C", "\u1F84"], ["\u1F8D", "\u1F85"], ["\u1F8E", "\u1F86"], ["\u1F8F", "\u1F87"], ["\u1F98", "\u1F90"], ["\u1F99", "\u1F91"], ["\u1F9A", "\u1F92"], ["\u1F9B", "\u1F93"], ["\u1F9C", "\u1F94"], ["\u1F9D", "\u1F95"], ["\u1F9E", "\u1F96"], ["\u1F9F", "\u1F97"], ["\u1FA8", "\u1FA0"], ["\u1FA9", "\u1FA1"], ["\u1FAA", "\u1FA2"], ["\u1FAB", "\u1FA3"], ["\u1FAC", "\u1FA4"], ["\u1FAD", "\u1FA5"], ["\u1FAE", "\u1FA6"], ["\u1FAF", "\u1FA7"], ["\u1FBC", "\u1FB3"], ["\u1FCC", "\u1FC3"], ["\u1FFC", "\u1FF3"], ["\u03A3", "\u03C2"], ["\u0049", "\u0069\u0307"], ["\u004A", "\u006A\u0307"], ["\u012E", "\u012F\u0307"], ["\u00CC", "\u0069\u0307\u0300"], ["\u00CD", "\u0069\u0307\u0301"], ["\u0128", "\u0069\u0307\u0303"]]; - -errorCount = 0; -count = 0; - -for (index = 0; index < LowerSpecialCase.length; index++) { - var capitalI = LowerSpecialCase[index][0]; - var capitalS = String.fromCharCode(capitalI); - var smallI = LowerSpecialCase[index][1]; - var smallS = String.fromCharCode(smallI); - if (capitalS.toLowerCase() !== smallS) { - var hexC = decimalToHexString(capitalI); - var hexS = decimalToHexString(smallI); - $ERROR('#' + hexC + '->' + hexS + ' '); - errorCount++; - } - count++; -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_410/S15.5.4.18_A1.js b/tests/ES3/Unicode/Unicode_410/S15.5.4.18_A1.js deleted file mode 100644 index fb760b742..000000000 --- a/tests/ES3/Unicode/Unicode_410/S15.5.4.18_A1.js +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.18_A1; -* @section: 15.5.4.18; -* @assertion: The characters in UnicodeData.txt, but not in SpecialCasings.txt are converted one by one; -* @description: Complex test; -*/ - -//CHECK -UpperCase = [[0x0061, 0x0041], [0x0062, 0x0042], [0x0063, 0x0043], [0x0064, 0x0044], [0x0065, 0x0045], [0x0066, 0x0046], [0x0067, 0x0047], [0x0068, 0x0048], [0x006A, 0x004A], [0x006B, 0x004B], [0x006C, 0x004C], [0x006D, 0x004D], [0x006E, 0x004E], [0x006F, 0x004F], [0x0070, 0x0050], [0x0071, 0x0051], [0x0072, 0x0052], [0x0073, 0x0053], [0x0074, 0x0054], [0x0075, 0x0055], [0x0076, 0x0056], [0x0077, 0x0057], [0x0078, 0x0058], [0x0079, 0x0059], [0x007A, 0x005A], [0x00B5, 0x039C], [0x00E0, 0x00C0], [0x00E1, 0x00C1], [0x00E2, 0x00C2], [0x00E3, 0x00C3], [0x00E4, 0x00C4], [0x00E5, 0x00C5], [0x00E6, 0x00C6], [0x00E7, 0x00C7], [0x00E8, 0x00C8], [0x00E9, 0x00C9], [0x00EA, 0x00CA], [0x00EB, 0x00CB], [0x00EC, 0x00CC], [0x00ED, 0x00CD], [0x00EE, 0x00CE], [0x00EF, 0x00CF], [0x00F0, 0x00D0], [0x00F1, 0x00D1], [0x00F2, 0x00D2], [0x00F3, 0x00D3], [0x00F4, 0x00D4], [0x00F5, 0x00D5], [0x00F6, 0x00D6], [0x00F8, 0x00D8], [0x00F9, 0x00D9], [0x00FA, 0x00DA], [0x00FB, 0x00DB], [0x00FC, 0x00DC], [0x00FD, 0x00DD], [0x00FE, 0x00DE], [0x00FF, 0x0178], [0x0101, 0x0100], [0x0103, 0x0102], [0x0105, 0x0104], [0x0107, 0x0106], [0x0109, 0x0108], [0x010B, 0x010A], [0x010D, 0x010C], [0x010F, 0x010E], [0x0111, 0x0110], [0x0113, 0x0112], [0x0115, 0x0114], [0x0117, 0x0116], [0x0119, 0x0118], [0x011B, 0x011A], [0x011D, 0x011C], [0x011F, 0x011E], [0x0121, 0x0120], [0x0123, 0x0122], [0x0125, 0x0124], [0x0127, 0x0126], [0x0129, 0x0128], [0x012B, 0x012A], [0x012D, 0x012C], [0x012F, 0x012E], [0x0131, 0x0049], [0x0133, 0x0132], [0x0135, 0x0134], [0x0137, 0x0136], [0x013A, 0x0139], [0x013C, 0x013B], [0x013E, 0x013D], [0x0140, 0x013F], [0x0142, 0x0141], [0x0144, 0x0143], [0x0146, 0x0145], [0x0148, 0x0147], [0x014B, 0x014A], [0x014D, 0x014C], [0x014F, 0x014E], [0x0151, 0x0150], [0x0153, 0x0152], [0x0155, 0x0154], [0x0157, 0x0156], [0x0159, 0x0158], [0x015B, 0x015A], [0x015D, 0x015C], [0x015F, 0x015E], [0x0161, 0x0160], [0x0163, 0x0162], [0x0165, 0x0164], [0x0167, 0x0166], [0x0169, 0x0168], [0x016B, 0x016A], [0x016D, 0x016C], [0x016F, 0x016E], [0x0171, 0x0170], [0x0173, 0x0172], [0x0175, 0x0174], [0x0177, 0x0176], [0x017A, 0x0179], [0x017C, 0x017B], [0x017E, 0x017D], [0x017F, 0x0053], [0x0183, 0x0182], [0x0185, 0x0184], [0x0188, 0x0187], [0x018C, 0x018B], [0x0192, 0x0191], [0x0195, 0x01F6], [0x0199, 0x0198], [0x019A, 0x023D], [0x019E, 0x0220], [0x01A1, 0x01A0], [0x01A3, 0x01A2], [0x01A5, 0x01A4], [0x01A8, 0x01A7], [0x01AD, 0x01AC], [0x01B0, 0x01AF], [0x01B4, 0x01B3], [0x01B6, 0x01B5], [0x01B9, 0x01B8], [0x01BD, 0x01BC], [0x01BF, 0x01F7], [0x01C5, 0x01C4], [0x01C6, 0x01C4], [0x01C8, 0x01C7], [0x01C9, 0x01C7], [0x01CB, 0x01CA], [0x01CC, 0x01CA], [0x01CE, 0x01CD], [0x01D0, 0x01CF], [0x01D2, 0x01D1], [0x01D4, 0x01D3], [0x01D6, 0x01D5], [0x01D8, 0x01D7], [0x01DA, 0x01D9], [0x01DC, 0x01DB], [0x01DD, 0x018E], [0x01DF, 0x01DE], [0x01E1, 0x01E0], [0x01E3, 0x01E2], [0x01E5, 0x01E4], [0x01E7, 0x01E6], [0x01E9, 0x01E8], [0x01EB, 0x01EA], [0x01ED, 0x01EC], [0x01EF, 0x01EE], [0x01F2, 0x01F1], [0x01F3, 0x01F1], [0x01F5, 0x01F4], [0x01F9, 0x01F8], [0x01FB, 0x01FA], [0x01FD, 0x01FC], [0x01FF, 0x01FE], [0x0201, 0x0200], [0x0203, 0x0202], [0x0205, 0x0204], [0x0207, 0x0206], [0x0209, 0x0208], [0x020B, 0x020A], [0x020D, 0x020C], [0x020F, 0x020E], [0x0211, 0x0210], [0x0213, 0x0212], [0x0215, 0x0214], [0x0217, 0x0216], [0x0219, 0x0218], [0x021B, 0x021A], [0x021D, 0x021C], [0x021F, 0x021E], [0x0223, 0x0222], [0x0225, 0x0224], [0x0227, 0x0226], [0x0229, 0x0228], [0x022B, 0x022A], [0x022D, 0x022C], [0x022F, 0x022E], [0x0231, 0x0230], [0x0233, 0x0232], [0x023C, 0x023B], [0x0253, 0x0181], [0x0254, 0x0186], [0x0256, 0x0189], [0x0257, 0x018A], [0x0259, 0x018F], [0x025B, 0x0190], [0x0260, 0x0193], [0x0263, 0x0194], [0x0268, 0x0197], [0x0269, 0x0196], [0x026F, 0x019C], [0x0272, 0x019D], [0x0275, 0x019F], [0x0280, 0x01A6], [0x0283, 0x01A9], [0x0288, 0x01AE], [0x028A, 0x01B1], [0x028B, 0x01B2], [0x0292, 0x01B7], [0x0294, 0x0241], [0x0345, 0x0399], [0x03AC, 0x0386], [0x03AD, 0x0388], [0x03AE, 0x0389], [0x03AF, 0x038A], [0x03B1, 0x0391], [0x03B2, 0x0392], [0x03B3, 0x0393], [0x03B4, 0x0394], [0x03B5, 0x0395], [0x03B6, 0x0396], [0x03B7, 0x0397], [0x03B8, 0x0398], [0x03B9, 0x0399], [0x03BA, 0x039A], [0x03BB, 0x039B], [0x03BC, 0x039C], [0x03BD, 0x039D], [0x03BE, 0x039E], [0x03BF, 0x039F], [0x03C0, 0x03A0], [0x03C1, 0x03A1], [0x03C2, 0x03A3], [0x03C3, 0x03A3], [0x03C4, 0x03A4], [0x03C5, 0x03A5], [0x03C6, 0x03A6], [0x03C7, 0x03A7], [0x03C8, 0x03A8], [0x03C9, 0x03A9], [0x03CA, 0x03AA], [0x03CB, 0x03AB], [0x03CC, 0x038C], [0x03CD, 0x038E], [0x03CE, 0x038F], [0x03D0, 0x0392], [0x03D1, 0x0398], [0x03D5, 0x03A6], [0x03D6, 0x03A0], [0x03D9, 0x03D8], [0x03DB, 0x03DA], [0x03DD, 0x03DC], [0x03DF, 0x03DE], [0x03E1, 0x03E0], [0x03E3, 0x03E2], [0x03E5, 0x03E4], [0x03E7, 0x03E6], [0x03E9, 0x03E8], [0x03EB, 0x03EA], [0x03ED, 0x03EC], [0x03EF, 0x03EE], [0x03F0, 0x039A], [0x03F1, 0x03A1], [0x03F2, 0x03F9], [0x03F5, 0x0395], [0x03F8, 0x03F7], [0x03FB, 0x03FA], [0x0430, 0x0410], [0x0431, 0x0411], [0x0432, 0x0412], [0x0433, 0x0413], [0x0434, 0x0414], [0x0435, 0x0415], [0x0436, 0x0416], [0x0437, 0x0417], [0x0438, 0x0418], [0x0439, 0x0419], [0x043A, 0x041A], [0x043B, 0x041B], [0x043C, 0x041C], [0x043D, 0x041D], [0x043E, 0x041E], [0x043F, 0x041F], [0x0440, 0x0420], [0x0441, 0x0421], [0x0442, 0x0422], [0x0443, 0x0423], [0x0444, 0x0424], [0x0445, 0x0425], [0x0446, 0x0426], [0x0447, 0x0427], [0x0448, 0x0428], [0x0449, 0x0429], [0x044A, 0x042A], [0x044B, 0x042B], [0x044C, 0x042C], [0x044D, 0x042D], [0x044E, 0x042E], [0x044F, 0x042F], [0x0450, 0x0400], [0x0451, 0x0401], [0x0452, 0x0402], [0x0453, 0x0403], [0x0454, 0x0404], [0x0455, 0x0405], [0x0456, 0x0406], [0x0457, 0x0407], [0x0458, 0x0408], [0x0459, 0x0409], [0x045A, 0x040A], [0x045B, 0x040B], [0x045C, 0x040C], [0x045D, 0x040D], [0x045E, 0x040E], [0x045F, 0x040F], [0x0461, 0x0460], [0x0463, 0x0462], [0x0465, 0x0464], [0x0467, 0x0466], [0x0469, 0x0468], [0x046B, 0x046A], [0x046D, 0x046C], [0x046F, 0x046E], [0x0471, 0x0470], [0x0473, 0x0472], [0x0475, 0x0474], [0x0477, 0x0476], [0x0479, 0x0478], [0x047B, 0x047A], [0x047D, 0x047C], [0x047F, 0x047E], [0x0481, 0x0480], [0x048B, 0x048A], [0x048D, 0x048C], [0x048F, 0x048E], [0x0491, 0x0490], [0x0493, 0x0492], [0x0495, 0x0494], [0x0497, 0x0496], [0x0499, 0x0498], [0x049B, 0x049A], [0x049D, 0x049C], [0x049F, 0x049E], [0x04A1, 0x04A0], [0x04A3, 0x04A2], [0x04A5, 0x04A4], [0x04A7, 0x04A6], [0x04A9, 0x04A8], [0x04AB, 0x04AA], [0x04AD, 0x04AC], [0x04AF, 0x04AE], [0x04B1, 0x04B0], [0x04B3, 0x04B2], [0x04B5, 0x04B4], [0x04B7, 0x04B6], [0x04B9, 0x04B8], [0x04BB, 0x04BA], [0x04BD, 0x04BC], [0x04BF, 0x04BE], [0x04C2, 0x04C1], [0x04C4, 0x04C3], [0x04C6, 0x04C5], [0x04C8, 0x04C7], [0x04CA, 0x04C9], [0x04CC, 0x04CB], [0x04CE, 0x04CD], [0x04D1, 0x04D0], [0x04D3, 0x04D2], [0x04D5, 0x04D4], [0x04D7, 0x04D6], [0x04D9, 0x04D8], [0x04DB, 0x04DA], [0x04DD, 0x04DC], [0x04DF, 0x04DE], [0x04E1, 0x04E0], [0x04E3, 0x04E2], [0x04E5, 0x04E4], [0x04E7, 0x04E6], [0x04E9, 0x04E8], [0x04EB, 0x04EA], [0x04ED, 0x04EC], [0x04EF, 0x04EE], [0x04F1, 0x04F0], [0x04F3, 0x04F2], [0x04F5, 0x04F4], [0x04F7, 0x04F6], [0x04F9, 0x04F8], [0x0501, 0x0500], [0x0503, 0x0502], [0x0505, 0x0504], [0x0507, 0x0506], [0x0509, 0x0508], [0x050B, 0x050A], [0x050D, 0x050C], [0x050F, 0x050E], [0x0561, 0x0531], [0x0562, 0x0532], [0x0563, 0x0533], [0x0564, 0x0534], [0x0565, 0x0535], [0x0566, 0x0536], [0x0567, 0x0537], [0x0568, 0x0538], [0x0569, 0x0539], [0x056A, 0x053A], [0x056B, 0x053B], [0x056C, 0x053C], [0x056D, 0x053D], [0x056E, 0x053E], [0x056F, 0x053F], [0x0570, 0x0540], [0x0571, 0x0541], [0x0572, 0x0542], [0x0573, 0x0543], [0x0574, 0x0544], [0x0575, 0x0545], [0x0576, 0x0546], [0x0577, 0x0547], [0x0578, 0x0548], [0x0579, 0x0549], [0x057A, 0x054A], [0x057B, 0x054B], [0x057C, 0x054C], [0x057D, 0x054D], [0x057E, 0x054E], [0x057F, 0x054F], [0x0580, 0x0550], [0x0581, 0x0551], [0x0582, 0x0552], [0x0583, 0x0553], [0x0584, 0x0554], [0x0585, 0x0555], [0x0586, 0x0556], [0x1E01, 0x1E00], [0x1E03, 0x1E02], [0x1E05, 0x1E04], [0x1E07, 0x1E06], [0x1E09, 0x1E08], [0x1E0B, 0x1E0A], [0x1E0D, 0x1E0C], [0x1E0F, 0x1E0E], [0x1E11, 0x1E10], [0x1E13, 0x1E12], [0x1E15, 0x1E14], [0x1E17, 0x1E16], [0x1E19, 0x1E18], [0x1E1B, 0x1E1A], [0x1E1D, 0x1E1C], [0x1E1F, 0x1E1E], [0x1E21, 0x1E20], [0x1E23, 0x1E22], [0x1E25, 0x1E24], [0x1E27, 0x1E26], [0x1E29, 0x1E28], [0x1E2B, 0x1E2A], [0x1E2D, 0x1E2C], [0x1E2F, 0x1E2E], [0x1E31, 0x1E30], [0x1E33, 0x1E32], [0x1E35, 0x1E34], [0x1E37, 0x1E36], [0x1E39, 0x1E38], [0x1E3B, 0x1E3A], [0x1E3D, 0x1E3C], [0x1E3F, 0x1E3E], [0x1E41, 0x1E40], [0x1E43, 0x1E42], [0x1E45, 0x1E44], [0x1E47, 0x1E46], [0x1E49, 0x1E48], [0x1E4B, 0x1E4A], [0x1E4D, 0x1E4C], [0x1E4F, 0x1E4E], [0x1E51, 0x1E50], [0x1E53, 0x1E52], [0x1E55, 0x1E54], [0x1E57, 0x1E56], [0x1E59, 0x1E58], [0x1E5B, 0x1E5A], [0x1E5D, 0x1E5C], [0x1E5F, 0x1E5E], [0x1E61, 0x1E60], [0x1E63, 0x1E62], [0x1E65, 0x1E64], [0x1E67, 0x1E66], [0x1E69, 0x1E68], [0x1E6B, 0x1E6A], [0x1E6D, 0x1E6C], [0x1E6F, 0x1E6E], [0x1E71, 0x1E70], [0x1E73, 0x1E72], [0x1E75, 0x1E74], [0x1E77, 0x1E76], [0x1E79, 0x1E78], [0x1E7B, 0x1E7A], [0x1E7D, 0x1E7C], [0x1E7F, 0x1E7E], [0x1E81, 0x1E80], [0x1E83, 0x1E82], [0x1E85, 0x1E84], [0x1E87, 0x1E86], [0x1E89, 0x1E88], [0x1E8B, 0x1E8A], [0x1E8D, 0x1E8C], [0x1E8F, 0x1E8E], [0x1E91, 0x1E90], [0x1E93, 0x1E92], [0x1E95, 0x1E94], [0x1E9B, 0x1E60], [0x1EA1, 0x1EA0], [0x1EA3, 0x1EA2], [0x1EA5, 0x1EA4], [0x1EA7, 0x1EA6], [0x1EA9, 0x1EA8], [0x1EAB, 0x1EAA], [0x1EAD, 0x1EAC], [0x1EAF, 0x1EAE], [0x1EB1, 0x1EB0], [0x1EB3, 0x1EB2], [0x1EB5, 0x1EB4], [0x1EB7, 0x1EB6], [0x1EB9, 0x1EB8], [0x1EBB, 0x1EBA], [0x1EBD, 0x1EBC], [0x1EBF, 0x1EBE], [0x1EC1, 0x1EC0], [0x1EC3, 0x1EC2], [0x1EC5, 0x1EC4], [0x1EC7, 0x1EC6], [0x1EC9, 0x1EC8], [0x1ECB, 0x1ECA], [0x1ECD, 0x1ECC], [0x1ECF, 0x1ECE], [0x1ED1, 0x1ED0], [0x1ED3, 0x1ED2], [0x1ED5, 0x1ED4], [0x1ED7, 0x1ED6], [0x1ED9, 0x1ED8], [0x1EDB, 0x1EDA], [0x1EDD, 0x1EDC], [0x1EDF, 0x1EDE], [0x1EE1, 0x1EE0], [0x1EE3, 0x1EE2], [0x1EE5, 0x1EE4], [0x1EE7, 0x1EE6], [0x1EE9, 0x1EE8], [0x1EEB, 0x1EEA], [0x1EED, 0x1EEC], [0x1EEF, 0x1EEE], [0x1EF1, 0x1EF0], [0x1EF3, 0x1EF2], [0x1EF5, 0x1EF4], [0x1EF7, 0x1EF6], [0x1EF9, 0x1EF8], [0x1F00, 0x1F08], [0x1F01, 0x1F09], [0x1F02, 0x1F0A], [0x1F03, 0x1F0B], [0x1F04, 0x1F0C], [0x1F05, 0x1F0D], [0x1F06, 0x1F0E], [0x1F07, 0x1F0F], [0x1F10, 0x1F18], [0x1F11, 0x1F19], [0x1F12, 0x1F1A], [0x1F13, 0x1F1B], [0x1F14, 0x1F1C], [0x1F15, 0x1F1D], [0x1F20, 0x1F28], [0x1F21, 0x1F29], [0x1F22, 0x1F2A], [0x1F23, 0x1F2B], [0x1F24, 0x1F2C], [0x1F25, 0x1F2D], [0x1F26, 0x1F2E], [0x1F27, 0x1F2F], [0x1F30, 0x1F38], [0x1F31, 0x1F39], [0x1F32, 0x1F3A], [0x1F33, 0x1F3B], [0x1F34, 0x1F3C], [0x1F35, 0x1F3D], [0x1F36, 0x1F3E], [0x1F37, 0x1F3F], [0x1F40, 0x1F48], [0x1F41, 0x1F49], [0x1F42, 0x1F4A], [0x1F43, 0x1F4B], [0x1F44, 0x1F4C], [0x1F45, 0x1F4D], [0x1F51, 0x1F59], [0x1F53, 0x1F5B], [0x1F55, 0x1F5D], [0x1F57, 0x1F5F], [0x1F60, 0x1F68], [0x1F61, 0x1F69], [0x1F62, 0x1F6A], [0x1F63, 0x1F6B], [0x1F64, 0x1F6C], [0x1F65, 0x1F6D], [0x1F66, 0x1F6E], [0x1F67, 0x1F6F], [0x1F70, 0x1FBA], [0x1F71, 0x1FBB], [0x1F72, 0x1FC8], [0x1F73, 0x1FC9], [0x1F74, 0x1FCA], [0x1F75, 0x1FCB], [0x1F76, 0x1FDA], [0x1F77, 0x1FDB], [0x1F78, 0x1FF8], [0x1F79, 0x1FF9], [0x1F7A, 0x1FEA], [0x1F7B, 0x1FEB], [0x1F7C, 0x1FFA], [0x1F7D, 0x1FFB], [0x1FB0, 0x1FB8], [0x1FB1, 0x1FB9], [0x1FBE, 0x0399], [0x1FD0, 0x1FD8], [0x1FD1, 0x1FD9], [0x1FE0, 0x1FE8], [0x1FE1, 0x1FE9], [0x1FE5, 0x1FEC], [0x2170, 0x2160], [0x2171, 0x2161], [0x2172, 0x2162], [0x2173, 0x2163], [0x2174, 0x2164], [0x2175, 0x2165], [0x2176, 0x2166], [0x2177, 0x2167], [0x2178, 0x2168], [0x2179, 0x2169], [0x217A, 0x216A], [0x217B, 0x216B], [0x217C, 0x216C], [0x217D, 0x216D], [0x217E, 0x216E], [0x217F, 0x216F], [0x24D0, 0x24B6], [0x24D1, 0x24B7], [0x24D2, 0x24B8], [0x24D3, 0x24B9], [0x24D4, 0x24BA], [0x24D5, 0x24BB], [0x24D6, 0x24BC], [0x24D7, 0x24BD], [0x24D8, 0x24BE], [0x24D9, 0x24BF], [0x24DA, 0x24C0], [0x24DB, 0x24C1], [0x24DC, 0x24C2], [0x24DD, 0x24C3], [0x24DE, 0x24C4], [0x24DF, 0x24C5], [0x24E0, 0x24C6], [0x24E1, 0x24C7], [0x24E2, 0x24C8], [0x24E3, 0x24C9], [0x24E4, 0x24CA], [0x24E5, 0x24CB], [0x24E6, 0x24CC], [0x24E7, 0x24CD], [0x24E8, 0x24CE], [0x24E9, 0x24CF], [0x2C30, 0x2C00], [0x2C31, 0x2C01], [0x2C32, 0x2C02], [0x2C33, 0x2C03], [0x2C34, 0x2C04], [0x2C35, 0x2C05], [0x2C36, 0x2C06], [0x2C37, 0x2C07], [0x2C38, 0x2C08], [0x2C39, 0x2C09], [0x2C3A, 0x2C0A], [0x2C3B, 0x2C0B], [0x2C3C, 0x2C0C], [0x2C3D, 0x2C0D], [0x2C3E, 0x2C0E], [0x2C3F, 0x2C0F], [0x2C40, 0x2C10], [0x2C41, 0x2C11], [0x2C42, 0x2C12], [0x2C43, 0x2C13], [0x2C44, 0x2C14], [0x2C45, 0x2C15], [0x2C46, 0x2C16], [0x2C47, 0x2C17], [0x2C48, 0x2C18], [0x2C49, 0x2C19], [0x2C4A, 0x2C1A], [0x2C4B, 0x2C1B], [0x2C4C, 0x2C1C], [0x2C4D, 0x2C1D], [0x2C4E, 0x2C1E], [0x2C4F, 0x2C1F], [0x2C50, 0x2C20], [0x2C51, 0x2C21], [0x2C52, 0x2C22], [0x2C53, 0x2C23], [0x2C54, 0x2C24], [0x2C55, 0x2C25], [0x2C56, 0x2C26], [0x2C57, 0x2C27], [0x2C58, 0x2C28], [0x2C59, 0x2C29], [0x2C5A, 0x2C2A], [0x2C5B, 0x2C2B], [0x2C5C, 0x2C2C], [0x2C5D, 0x2C2D], [0x2C5E, 0x2C2E], [0x2C81, 0x2C80], [0x2C83, 0x2C82], [0x2C85, 0x2C84], [0x2C87, 0x2C86], [0x2C89, 0x2C88], [0x2C8B, 0x2C8A], [0x2C8D, 0x2C8C], [0x2C8F, 0x2C8E], [0x2C91, 0x2C90], [0x2C93, 0x2C92], [0x2C95, 0x2C94], [0x2C97, 0x2C96], [0x2C99, 0x2C98], [0x2C9B, 0x2C9A], [0x2C9D, 0x2C9C], [0x2C9F, 0x2C9E], [0x2CA1, 0x2CA0], [0x2CA3, 0x2CA2], [0x2CA5, 0x2CA4], [0x2CA7, 0x2CA6], [0x2CA9, 0x2CA8], [0x2CAB, 0x2CAA], [0x2CAD, 0x2CAC], [0x2CAF, 0x2CAE], [0x2CB1, 0x2CB0], [0x2CB3, 0x2CB2], [0x2CB5, 0x2CB4], [0x2CB7, 0x2CB6], [0x2CB9, 0x2CB8], [0x2CBB, 0x2CBA], [0x2CBD, 0x2CBC], [0x2CBF, 0x2CBE], [0x2CC1, 0x2CC0], [0x2CC3, 0x2CC2], [0x2CC5, 0x2CC4], [0x2CC7, 0x2CC6], [0x2CC9, 0x2CC8], [0x2CCB, 0x2CCA], [0x2CCD, 0x2CCC], [0x2CCF, 0x2CCE], [0x2CD1, 0x2CD0], [0x2CD3, 0x2CD2], [0x2CD5, 0x2CD4], [0x2CD7, 0x2CD6], [0x2CD9, 0x2CD8], [0x2CDB, 0x2CDA], [0x2CDD, 0x2CDC], [0x2CDF, 0x2CDE], [0x2CE1, 0x2CE0], [0x2CE3, 0x2CE2], [0x2D00, 0x10A0], [0x2D01, 0x10A1], [0x2D02, 0x10A2], [0x2D03, 0x10A3], [0x2D04, 0x10A4], [0x2D05, 0x10A5], [0x2D06, 0x10A6], [0x2D07, 0x10A7], [0x2D08, 0x10A8], [0x2D09, 0x10A9], [0x2D0A, 0x10AA], [0x2D0B, 0x10AB], [0x2D0C, 0x10AC], [0x2D0D, 0x10AD], [0x2D0E, 0x10AE], [0x2D0F, 0x10AF], [0x2D10, 0x10B0], [0x2D11, 0x10B1], [0x2D12, 0x10B2], [0x2D13, 0x10B3], [0x2D14, 0x10B4], [0x2D15, 0x10B5], [0x2D16, 0x10B6], [0x2D17, 0x10B7], [0x2D18, 0x10B8], [0x2D19, 0x10B9], [0x2D1A, 0x10BA], [0x2D1B, 0x10BB], [0x2D1C, 0x10BC], [0x2D1D, 0x10BD], [0x2D1E, 0x10BE], [0x2D1F, 0x10BF], [0x2D20, 0x10C0], [0x2D21, 0x10C1], [0x2D22, 0x10C2], [0x2D23, 0x10C3], [0x2D24, 0x10C4], [0x2D25, 0x10C5], [0xFF41, 0xFF21], [0xFF42, 0xFF22], [0xFF43, 0xFF23], [0xFF44, 0xFF24], [0xFF45, 0xFF25], [0xFF46, 0xFF26], [0xFF47, 0xFF27], [0xFF48, 0xFF28], [0xFF49, 0xFF29], [0xFF4A, 0xFF2A], [0xFF4B, 0xFF2B], [0xFF4C, 0xFF2C], [0xFF4D, 0xFF2D], [0xFF4E, 0xFF2E], [0xFF4F, 0xFF2F], [0xFF50, 0xFF30], [0xFF51, 0xFF31], [0xFF52, 0xFF32], [0xFF53, 0xFF33], [0xFF54, 0xFF34], [0xFF55, 0xFF35], [0xFF56, 0xFF36], [0xFF57, 0xFF37], [0xFF58, 0xFF38], [0xFF59, 0xFF39], [0xFF5A, 0xFF3A]]; - -errorCount = 0; -count = 0; - -for (index = 0; index < UpperCase.length; index++) { - var capitalI = UpperCase[index][0]; - var capitalS = String.fromCharCode(capitalI); - var smallI = UpperCase[index][1]; - var smallS = String.fromCharCode(smallI); - if (capitalS.toUpperCase() !== smallS) { - var hexC = decimalToHexString(capitalI); - var hexS = decimalToHexString(smallI); - $ERROR('#' + hexC + '->' + hexS + ' '); - errorCount++; - } - count++; -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_410/S15.5.4.18_A2.js b/tests/ES3/Unicode/Unicode_410/S15.5.4.18_A2.js deleted file mode 100644 index 4dae31aaa..000000000 --- a/tests/ES3/Unicode/Unicode_410/S15.5.4.18_A2.js +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.18_A2; -* @section: 15.5.4.18; -* @assertion: The characters in SpecialCasings.txt are converted by multi-character results; -* @description: Complex test; -*/ - -//CHECK -UpperSpecialCase = [["\u00DF", "\u0053\u0053"], ["\uFB00", "\u0046\u0046"], ["\uFB01", "\u0046\u0049"], ["\uFB02", "\u0046\u004C"], ["\uFB03", "\u0046\u0046\u0049"], ["\uFB04", "\u0046\u0046\u004C"], ["\uFB05", "\u0053\u0054"], ["\uFB06", "\u0053\u0054"], ["\u0587", "\u0535\u0552"], ["\uFB13", "\u0544\u0546"], ["\uFB14", "\u0544\u0535"], ["\uFB15", "\u0544\u053B"], ["\uFB16", "\u054E\u0546"], ["\uFB17", "\u0544\u053D"], ["\u0149", "\u02BC\u004E"], ["\u0390", "\u0399\u0308\u0301"], ["\u03B0", "\u03A5\u0308\u0301"], ["\u01F0", "\u004A\u030C"], ["\u1E96", "\u0048\u0331"], ["\u1E97", "\u0054\u0308"], ["\u1E98", "\u0057\u030A"], ["\u1E99", "\u0059\u030A"], ["\u1E9A", "\u0041\u02BE"], ["\u1F50", "\u03A5\u0313"], ["\u1F52", "\u03A5\u0313\u0300"], ["\u1F54", "\u03A5\u0313\u0301"], ["\u1F56", "\u03A5\u0313\u0342"], ["\u1FB6", "\u0391\u0342"], ["\u1FC6", "\u0397\u0342"], ["\u1FD2", "\u0399\u0308\u0300"], ["\u1FD3", "\u0399\u0308\u0301"], ["\u1FD6", "\u0399\u0342"], ["\u1FD7", "\u0399\u0308\u0342"], ["\u1FE2", "\u03A5\u0308\u0300"], ["\u1FE3", "\u03A5\u0308\u0301"], ["\u1FE4", "\u03A1\u0313"], ["\u1FE6", "\u03A5\u0342"], ["\u1FE7", "\u03A5\u0308\u0342"], ["\u1FF6", "\u03A9\u0342"], ["\u1F80", "\u1F08\u0399"], ["\u1F81", "\u1F09\u0399"], ["\u1F82", "\u1F0A\u0399"], ["\u1F83", "\u1F0B\u0399"], ["\u1F84", "\u1F0C\u0399"], ["\u1F85", "\u1F0D\u0399"], ["\u1F86", "\u1F0E\u0399"], ["\u1F87", "\u1F0F\u0399"], ["\u1F88", "\u1F08\u0399"], ["\u1F89", "\u1F09\u0399"], ["\u1F8A", "\u1F0A\u0399"], ["\u1F8B", "\u1F0B\u0399"], ["\u1F8C", "\u1F0C\u0399"], ["\u1F8D", "\u1F0D\u0399"], ["\u1F8E", "\u1F0E\u0399"], ["\u1F8F", "\u1F0F\u0399"], ["\u1F90", "\u1F28\u0399"], ["\u1F91", "\u1F29\u0399"], ["\u1F92", "\u1F2A\u0399"], ["\u1F93", "\u1F2B\u0399"], ["\u1F94", "\u1F2C\u0399"], ["\u1F95", "\u1F2D\u0399"], ["\u1F96", "\u1F2E\u0399"], ["\u1F97", "\u1F2F\u0399"], ["\u1F98", "\u1F28\u0399"], ["\u1F99", "\u1F29\u0399"], ["\u1F9A", "\u1F2A\u0399"], ["\u1F9B", "\u1F2B\u0399"], ["\u1F9C", "\u1F2C\u0399"], ["\u1F9D", "\u1F2D\u0399"], ["\u1F9E", "\u1F2E\u0399"], ["\u1F9F", "\u1F2F\u0399"], ["\u1FA0", "\u1F68\u0399"], ["\u1FA1", "\u1F69\u0399"], ["\u1FA2", "\u1F6A\u0399"], ["\u1FA3", "\u1F6B\u0399"], ["\u1FA4", "\u1F6C\u0399"], ["\u1FA5", "\u1F6D\u0399"], ["\u1FA6", "\u1F6E\u0399"], ["\u1FA7", "\u1F6F\u0399"], ["\u1FA8", "\u1F68\u0399"], ["\u1FA9", "\u1F69\u0399"], ["\u1FAA", "\u1F6A\u0399"], ["\u1FAB", "\u1F6B\u0399"], ["\u1FAC", "\u1F6C\u0399"], ["\u1FAD", "\u1F6D\u0399"], ["\u1FAE", "\u1F6E\u0399"], ["\u1FAF", "\u1F6F\u0399"], ["\u1FB3", "\u0391\u0399"], ["\u1FBC", "\u0391\u0399"], ["\u1FC3", "\u0397\u0399"], ["\u1FCC", "\u0397\u0399"], ["\u1FF3", "\u03A9\u0399"], ["\u1FFC", "\u03A9\u0399"], ["\u1FB2", "\u1FBA\u0399"], ["\u1FB4", "\u0386\u0399"], ["\u1FC2", "\u1FCA\u0399"], ["\u1FC4", "\u0389\u0399"], ["\u1FF2", "\u1FFA\u0399"], ["\u1FF4", "\u038F\u0399"], ["\u1FB7", "\u0391\u0342\u0399"], ["\u1FC7", "\u0397\u0342\u0399"], ["\u1FF7", "\u03A9\u0342\u0399"], ["\u0069", "\u0130"]]; - -errorCount = 0; -count = 0; - -for (index = 0; index < UpperSpecialCase.length; index++) { - var capitalI = UpperSpecialCase[index][0]; - var capitalS = String.fromCharCode(capitalI); - var smallI = UpperSpecialCase[index][1]; - var smallS = String.fromCharCode(smallI); - if (capitalS.toUpperCase() !== smallS) { - var hexC = decimalToHexString(capitalI); - var hexS = decimalToHexString(smallI); - $ERROR('#' + hexC + '->' + hexS + ' '); - errorCount++; - } - count++; -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_410/S7.1_A1_T1.js b/tests/ES3/Unicode/Unicode_410/S7.1_A1_T1.js deleted file mode 100644 index ef3da705d..000000000 --- a/tests/ES3/Unicode/Unicode_410/S7.1_A1_T1.js +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.1_A1_T1; - * @section: 7.1; - * @assertion: The format control character (Cf) can occur anywhere in the source text - * and these characters are removed before applying the lexical grammar; - * @description: Complex test with eval; -*/ - -//CHECK#1 -Cf = [[0x00AD, 0x00AD], [0x0600, 0x0603], [0x06DD, 0x06DD], [0x070F, 0x070F], [0x17B4, 0x17B5], [0x200B, 0x200F], [0x202A, 0x202E], [0x2060, 0x2063], [0x206A, 0x206F], [0xFEFF, 0xFEFF], [0xFFF9, 0xFFFB]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Cf.length; indexI++) { - for (indexJ = Cf[indexI][0]; indexJ <= Cf[indexI][1]; indexJ++) { - try { - var format = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval(format); - eval(format + "var " + format + "x" + format + "=" + format + "1" + format); - eval(format); - if (x !== 1) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_410/S7.1_A2.1_T1.js b/tests/ES3/Unicode/Unicode_410/S7.1_A2.1_T1.js deleted file mode 100644 index f9ef6f5ab..000000000 --- a/tests/ES3/Unicode/Unicode_410/S7.1_A2.1_T1.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.1_A2.1_T1; - * @section: 7.1; - * @assertion: Since the format control character (Cf) are removed before processing string literals, - * one must use a Unicode escape sequence to include a Cf inside string literal; - * @description: Complex test, without eval; -*/ - -//CHECK#1 -Cf = [[0x00AD, 0x00AD], [0x0600, 0x0603], [0x06DD, 0x06DD], [0x070F, 0x070F], [0x17B4, 0x17B5], [0x200B, 0x200F], [0x202A, 0x202E], [0x2060, 0x2063], [0x206A, 0x206F], [0xFEFF, 0xFEFF], [0xFFF9, 0xFFFB]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Cf.length; indexI++) { - for (indexJ = Cf[indexI][0]; indexJ <= Cf[indexI][1]; indexJ++) { - try { - var format = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - var x = format + "a" + format + "b" + format; - if (x.length !== 5) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_410/S7.1_A2.1_T2.js b/tests/ES3/Unicode/Unicode_410/S7.1_A2.1_T2.js deleted file mode 100644 index 16d19a870..000000000 --- a/tests/ES3/Unicode/Unicode_410/S7.1_A2.1_T2.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.1_A2.1_T2; - * @section: 7.1; - * @assertion: Since the format control character (Cf) are removed before processing string literals, - * one must use a Unicode escape sequence to include a Cf inside string literal; - * @description: Complex test, with eval; -*/ - -//CHECK#1 -Cf = [[0x00AD, 0x00AD], [0x0600, 0x0603], [0x06DD, 0x06DD], [0x070F, 0x070F], [0x17B4, 0x17B5], [0x200B, 0x200F], [0x202A, 0x202E], [0x2060, 0x2063], [0x206A, 0x206F], [0xFEFF, 0xFEFF], [0xFFF9, 0xFFFB]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Cf.length; indexI++) { - for (indexJ = Cf[indexI][0]; indexJ <= Cf[indexI][1]; indexJ++) { - try { - var format = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval('var x = "' + format + 'a' + format + 'b' + format + '"'); - if (x.length !== 5) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_410/S7.1_A2.2_T1.js b/tests/ES3/Unicode/Unicode_410/S7.1_A2.2_T1.js deleted file mode 100644 index a8571f3fa..000000000 --- a/tests/ES3/Unicode/Unicode_410/S7.1_A2.2_T1.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.1_A2.2_T1; - * @section: 7.1; - * @assertion: Since the format control character (Cf) are removed before processing regular expression literals, - * one must use a Unicode escape sequence to include a Cf inside regular expression literal; - * @description: Complex test, without eval; -*/ - -//CHECK#1 -Cf = [[0x00AD, 0x00AD], [0x0600, 0x0603], [0x06DD, 0x06DD], [0x070F, 0x070F], [0x17B4, 0x17B5], [0x200B, 0x200F], [0x202A, 0x202E], [0x2060, 0x2063], [0x206A, 0x206F], [0xFEFF, 0xFEFF], [0xFFF9, 0xFFFB]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Cf.length; indexI++) { - for (indexJ = Cf[indexI][0]; indexJ <= Cf[indexI][1]; indexJ++) { - try { - var format = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - var x = RegExp(format + "a" + format + "b" + format); - if (x.source.length !== 5) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_410/S7.1_A2.2_T2.js b/tests/ES3/Unicode/Unicode_410/S7.1_A2.2_T2.js deleted file mode 100644 index 011668f46..000000000 --- a/tests/ES3/Unicode/Unicode_410/S7.1_A2.2_T2.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.1_A2.2_T2; - * @section: 7.1; - * @assertion: Since the format control character (Cf) are removed before processing regular expression literals, - * one must use a Unicode escape sequence to include a Cf inside regular expression literal; - * @description: Complex test, with eval; -*/ - -//CHECK#1 -Cf = [[0x00AD, 0x00AD], [0x0600, 0x0603], [0x06DD, 0x06DD], [0x070F, 0x070F], [0x17B4, 0x17B5], [0x200B, 0x200F], [0x202A, 0x202E], [0x2060, 0x2063], [0x206A, 0x206F], [0xFEFF, 0xFEFF], [0xFFF9, 0xFFFB]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Cf.length; indexI++) { - for (indexJ = Cf[indexI][0]; indexJ <= Cf[indexI][1]; indexJ++) { - try { - var format = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval('var x = RegExp("' + format + 'a' + format + 'b' + format + '")'); - if (x.source.length !== 5) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_410/S7.2_A1.6_T1.js b/tests/ES3/Unicode/Unicode_410/S7.2_A1.6_T1.js deleted file mode 100644 index 5a7da9bf6..000000000 --- a/tests/ES3/Unicode/Unicode_410/S7.2_A1.6_T1.js +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.2_A1.6_T1; - * @section: 7.2, 7.5; - * @assertion: Any other Unicode "space separator" (category "Zs") between any two tokens is allowed; - * @description: Complex test with eval; -*/ - - -//CHECK#1 -Zs = [[0x1680, 0x1680], [0x180E, 0x180E], [0x2000, 0x200A], [0x202F, 0x202F], [0x205F, 0x205F], [0x3000, 0x3000]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Zs.length; indexI++) { - for (indexJ = Zs[indexI][0]; indexJ <= Zs[indexI][1]; indexJ++) { - try { - var format = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval(format); - eval(format + "var " + format + "x" + format + "=" + format + "1" + format); - eval(format); - if (x !== 1) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_410/S7.2_A2.6_T1.js b/tests/ES3/Unicode/Unicode_410/S7.2_A2.6_T1.js deleted file mode 100644 index 3c9b51236..000000000 --- a/tests/ES3/Unicode/Unicode_410/S7.2_A2.6_T1.js +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.2_A2.6_T1; - * @section: 7.2, 7.8.4; - * @assertion: Any other Unicode "space separator" (category "Zs") within strings; - * @description: Complex test; -*/ - -//CHECK#1 -Zs = [[0x1680, 0x1680], [0x180E, 0x180E], [0x2000, 0x200A], [0x202F, 0x202F], [0x205F, 0x205F], [0x3000, 0x3000]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Zs.length; indexI++) { - for (indexJ = Zs[indexI][0]; indexJ <= Zs[indexI][1]; indexJ++) { - try { - var format = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - var x = "str" + format + "ing"; - if (x !== "str" + format + "ing") { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_410/S7.2_A3.6_T1.js b/tests/ES3/Unicode/Unicode_410/S7.2_A3.6_T1.js deleted file mode 100644 index 3cf973648..000000000 --- a/tests/ES3/Unicode/Unicode_410/S7.2_A3.6_T1.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.2_A3.6_T1; - * @section: 7.2, 7.4; - * @assertion: Single line comment can contain any other Unicode "space separator" (category "Zs"); - * @description: Complex test with eval; - */ - -//CHECK#1 -Zs = [[0x1680, 0x1680], [0x180E, 0x180E], [0x2000, 0x200A], [0x202F, 0x202F], [0x205F, 0x205F], [0x3000, 0x3000]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Zs.length; indexI++) { - for (indexJ = Zs[indexI][0]; indexJ <= Zs[indexI][1]; indexJ++) { - try { - var format = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - var x = 0; - eval("//" + format + "single line" + format + "comment" + format + " x = 1;"); - if (x !== 0) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_410/S7.2_A4.6_T1.js b/tests/ES3/Unicode/Unicode_410/S7.2_A4.6_T1.js deleted file mode 100644 index c7eacb73c..000000000 --- a/tests/ES3/Unicode/Unicode_410/S7.2_A4.6_T1.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.2_A4.6_T1; - * @section: 7.2, 7.4; - * @assertion: Multi line comment can contain any other Unicode "space separator" (category "Zs"); - * @description: Complex test with eval; - */ - -//CHECK#1 -Zs = [[0x1680, 0x1680], [0x180E, 0x180E], [0x2000, 0x200A], [0x202F, 0x202F], [0x205F, 0x205F], [0x3000, 0x3000]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Zs.length; indexI++) { - for (indexJ = Zs[indexI][0]; indexJ <= Zs[indexI][1]; indexJ++) { - try { - var format = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - var x = 0; - eval("/*" + format + "multi line" + format + "comment" + format + "\n x = 1;*/"); - if (x !== 0) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_410/S7.6_A1.1_T1.js b/tests/ES3/Unicode/Unicode_410/S7.6_A1.1_T1.js deleted file mode 100644 index 64ceaf23e..000000000 --- a/tests/ES3/Unicode/Unicode_410/S7.6_A1.1_T1.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A1.1_T1; - * @section: 7.6; - * @assertion: IdentifierStart :: UnicodeLetter (any character in the Unicode categories "Lu", "Ll", "Lt", "Lm", "Lo", "Nl"); - * @description: UnicodeLetter :: Uppercase letter (Lu). - * Complex test with eval; -*/ - -//CHECK -Lu = [[0x0041, 0x005A], [0x00C0, 0x00D6], [0x00D8, 0x00DE], [0x0100, 0x0100], [0x0102, 0x0102], [0x0104, 0x0104], [0x0106, 0x0106], [0x0108, 0x0108], [0x010A, 0x010A], [0x010C, 0x010C], [0x010E, 0x010E], [0x0110, 0x0110], [0x0112, 0x0112], [0x0114, 0x0114], [0x0116, 0x0116], [0x0118, 0x0118], [0x011A, 0x011A], [0x011C, 0x011C], [0x011E, 0x011E], [0x0120, 0x0120], [0x0122, 0x0122], [0x0124, 0x0124], [0x0126, 0x0126], [0x0128, 0x0128], [0x012A, 0x012A], [0x012C, 0x012C], [0x012E, 0x012E], [0x0130, 0x0130], [0x0132, 0x0132], [0x0134, 0x0134], [0x0136, 0x0136], [0x0139, 0x0139], [0x013B, 0x013B], [0x013D, 0x013D], [0x013F, 0x013F], [0x0141, 0x0141], [0x0143, 0x0143], [0x0145, 0x0145], [0x0147, 0x0147], [0x014A, 0x014A], [0x014C, 0x014C], [0x014E, 0x014E], [0x0150, 0x0150], [0x0152, 0x0152], [0x0154, 0x0154], [0x0156, 0x0156], [0x0158, 0x0158], [0x015A, 0x015A], [0x015C, 0x015C], [0x015E, 0x015E], [0x0160, 0x0160], [0x0162, 0x0162], [0x0164, 0x0164], [0x0166, 0x0166], [0x0168, 0x0168], [0x016A, 0x016A], [0x016C, 0x016C], [0x016E, 0x016E], [0x0170, 0x0170], [0x0172, 0x0172], [0x0174, 0x0174], [0x0176, 0x0176], [0x0178, 0x0179], [0x017B, 0x017B], [0x017D, 0x017D], [0x0181, 0x0182], [0x0184, 0x0184], [0x0186, 0x0187], [0x0189, 0x018B], [0x018E, 0x0191], [0x0193, 0x0194], [0x0196, 0x0198], [0x019C, 0x019D], [0x019F, 0x01A0], [0x01A2, 0x01A2], [0x01A4, 0x01A4], [0x01A6, 0x01A7], [0x01A9, 0x01A9], [0x01AC, 0x01AC], [0x01AE, 0x01AF], [0x01B1, 0x01B3], [0x01B5, 0x01B5], [0x01B7, 0x01B8], [0x01BC, 0x01BC], [0x01C4, 0x01C4], [0x01C7, 0x01C7], [0x01CA, 0x01CA], [0x01CD, 0x01CD], [0x01CF, 0x01CF], [0x01D1, 0x01D1], [0x01D3, 0x01D3], [0x01D5, 0x01D5], [0x01D7, 0x01D7], [0x01D9, 0x01D9], [0x01DB, 0x01DB], [0x01DE, 0x01DE], [0x01E0, 0x01E0], [0x01E2, 0x01E2], [0x01E4, 0x01E4], [0x01E6, 0x01E6], [0x01E8, 0x01E8], [0x01EA, 0x01EA], [0x01EC, 0x01EC], [0x01EE, 0x01EE], [0x01F1, 0x01F1], [0x01F4, 0x01F4], [0x01F6, 0x01F8], [0x01FA, 0x01FA], [0x01FC, 0x01FC], [0x01FE, 0x01FE], [0x0200, 0x0200], [0x0202, 0x0202], [0x0204, 0x0204], [0x0206, 0x0206], [0x0208, 0x0208], [0x020A, 0x020A], [0x020C, 0x020C], [0x020E, 0x020E], [0x0210, 0x0210], [0x0212, 0x0212], [0x0214, 0x0214], [0x0216, 0x0216], [0x0218, 0x0218], [0x021A, 0x021A], [0x021C, 0x021C], [0x021E, 0x021E], [0x0220, 0x0220], [0x0222, 0x0222], [0x0224, 0x0224], [0x0226, 0x0226], [0x0228, 0x0228], [0x022A, 0x022A], [0x022C, 0x022C], [0x022E, 0x022E], [0x0230, 0x0230], [0x0232, 0x0232], [0x023A, 0x023B], [0x023D, 0x023E], [0x0241, 0x0241], [0x0386, 0x0386], [0x0388, 0x038A], [0x038C, 0x038C], [0x038E, 0x038F], [0x0391, 0x03A1], [0x03A3, 0x03AB], [0x03D2, 0x03D4], [0x03D8, 0x03D8], [0x03DA, 0x03DA], [0x03DC, 0x03DC], [0x03DE, 0x03DE], [0x03E0, 0x03E0], [0x03E2, 0x03E2], [0x03E4, 0x03E4], [0x03E6, 0x03E6], [0x03E8, 0x03E8], [0x03EA, 0x03EA], [0x03EC, 0x03EC], [0x03EE, 0x03EE], [0x03F4, 0x03F4], [0x03F7, 0x03F7], [0x03F9, 0x03FA], [0x03FD, 0x042F], [0x0460, 0x0460], [0x0462, 0x0462], [0x0464, 0x0464], [0x0466, 0x0466], [0x0468, 0x0468], [0x046A, 0x046A], [0x046C, 0x046C], [0x046E, 0x046E], [0x0470, 0x0470], [0x0472, 0x0472], [0x0474, 0x0474], [0x0476, 0x0476], [0x0478, 0x0478], [0x047A, 0x047A], [0x047C, 0x047C], [0x047E, 0x047E], [0x0480, 0x0480], [0x048A, 0x048A], [0x048C, 0x048C], [0x048E, 0x048E], [0x0490, 0x0490], [0x0492, 0x0492], [0x0494, 0x0494], [0x0496, 0x0496], [0x0498, 0x0498], [0x049A, 0x049A], [0x049C, 0x049C], [0x049E, 0x049E], [0x04A0, 0x04A0], [0x04A2, 0x04A2], [0x04A4, 0x04A4], [0x04A6, 0x04A6], [0x04A8, 0x04A8], [0x04AA, 0x04AA], [0x04AC, 0x04AC], [0x04AE, 0x04AE], [0x04B0, 0x04B0], [0x04B2, 0x04B2], [0x04B4, 0x04B4], [0x04B6, 0x04B6], [0x04B8, 0x04B8], [0x04BA, 0x04BA], [0x04BC, 0x04BC], [0x04BE, 0x04BE], [0x04C0, 0x04C1], [0x04C3, 0x04C3], [0x04C5, 0x04C5], [0x04C7, 0x04C7], [0x04C9, 0x04C9], [0x04CB, 0x04CB], [0x04CD, 0x04CD], [0x04D0, 0x04D0], [0x04D2, 0x04D2], [0x04D4, 0x04D4], [0x04D6, 0x04D6], [0x04D8, 0x04D8], [0x04DA, 0x04DA], [0x04DC, 0x04DC], [0x04DE, 0x04DE], [0x04E0, 0x04E0], [0x04E2, 0x04E2], [0x04E4, 0x04E4], [0x04E6, 0x04E6], [0x04E8, 0x04E8], [0x04EA, 0x04EA], [0x04EC, 0x04EC], [0x04EE, 0x04EE], [0x04F0, 0x04F0], [0x04F2, 0x04F2], [0x04F4, 0x04F4], [0x04F6, 0x04F6], [0x04F8, 0x04F8], [0x0500, 0x0500], [0x0502, 0x0502], [0x0504, 0x0504], [0x0506, 0x0506], [0x0508, 0x0508], [0x050A, 0x050A], [0x050C, 0x050C], [0x050E, 0x050E], [0x0531, 0x0556], [0x10A0, 0x10C5], [0x1E00, 0x1E00], [0x1E02, 0x1E02], [0x1E04, 0x1E04], [0x1E06, 0x1E06], [0x1E08, 0x1E08], [0x1E0A, 0x1E0A], [0x1E0C, 0x1E0C], [0x1E0E, 0x1E0E], [0x1E10, 0x1E10], [0x1E12, 0x1E12], [0x1E14, 0x1E14], [0x1E16, 0x1E16], [0x1E18, 0x1E18], [0x1E1A, 0x1E1A], [0x1E1C, 0x1E1C], [0x1E1E, 0x1E1E], [0x1E20, 0x1E20], [0x1E22, 0x1E22], [0x1E24, 0x1E24], [0x1E26, 0x1E26], [0x1E28, 0x1E28], [0x1E2A, 0x1E2A], [0x1E2C, 0x1E2C], [0x1E2E, 0x1E2E], [0x1E30, 0x1E30], [0x1E32, 0x1E32], [0x1E34, 0x1E34], [0x1E36, 0x1E36], [0x1E38, 0x1E38], [0x1E3A, 0x1E3A], [0x1E3C, 0x1E3C], [0x1E3E, 0x1E3E], [0x1E40, 0x1E40], [0x1E42, 0x1E42], [0x1E44, 0x1E44], [0x1E46, 0x1E46], [0x1E48, 0x1E48], [0x1E4A, 0x1E4A], [0x1E4C, 0x1E4C], [0x1E4E, 0x1E4E], [0x1E50, 0x1E50], [0x1E52, 0x1E52], [0x1E54, 0x1E54], [0x1E56, 0x1E56], [0x1E58, 0x1E58], [0x1E5A, 0x1E5A], [0x1E5C, 0x1E5C], [0x1E5E, 0x1E5E], [0x1E60, 0x1E60], [0x1E62, 0x1E62], [0x1E64, 0x1E64], [0x1E66, 0x1E66], [0x1E68, 0x1E68], [0x1E6A, 0x1E6A], [0x1E6C, 0x1E6C], [0x1E6E, 0x1E6E], [0x1E70, 0x1E70], [0x1E72, 0x1E72], [0x1E74, 0x1E74], [0x1E76, 0x1E76], [0x1E78, 0x1E78], [0x1E7A, 0x1E7A], [0x1E7C, 0x1E7C], [0x1E7E, 0x1E7E], [0x1E80, 0x1E80], [0x1E82, 0x1E82], [0x1E84, 0x1E84], [0x1E86, 0x1E86], [0x1E88, 0x1E88], [0x1E8A, 0x1E8A], [0x1E8C, 0x1E8C], [0x1E8E, 0x1E8E], [0x1E90, 0x1E90], [0x1E92, 0x1E92], [0x1E94, 0x1E94], [0x1EA0, 0x1EA0], [0x1EA2, 0x1EA2], [0x1EA4, 0x1EA4], [0x1EA6, 0x1EA6], [0x1EA8, 0x1EA8], [0x1EAA, 0x1EAA], [0x1EAC, 0x1EAC], [0x1EAE, 0x1EAE], [0x1EB0, 0x1EB0], [0x1EB2, 0x1EB2], [0x1EB4, 0x1EB4], [0x1EB6, 0x1EB6], [0x1EB8, 0x1EB8], [0x1EBA, 0x1EBA], [0x1EBC, 0x1EBC], [0x1EBE, 0x1EBE], [0x1EC0, 0x1EC0], [0x1EC2, 0x1EC2], [0x1EC4, 0x1EC4], [0x1EC6, 0x1EC6], [0x1EC8, 0x1EC8], [0x1ECA, 0x1ECA], [0x1ECC, 0x1ECC], [0x1ECE, 0x1ECE], [0x1ED0, 0x1ED0], [0x1ED2, 0x1ED2], [0x1ED4, 0x1ED4], [0x1ED6, 0x1ED6], [0x1ED8, 0x1ED8], [0x1EDA, 0x1EDA], [0x1EDC, 0x1EDC], [0x1EDE, 0x1EDE], [0x1EE0, 0x1EE0], [0x1EE2, 0x1EE2], [0x1EE4, 0x1EE4], [0x1EE6, 0x1EE6], [0x1EE8, 0x1EE8], [0x1EEA, 0x1EEA], [0x1EEC, 0x1EEC], [0x1EEE, 0x1EEE], [0x1EF0, 0x1EF0], [0x1EF2, 0x1EF2], [0x1EF4, 0x1EF4], [0x1EF6, 0x1EF6], [0x1EF8, 0x1EF8], [0x1F08, 0x1F0F], [0x1F18, 0x1F1D], [0x1F28, 0x1F2F], [0x1F38, 0x1F3F], [0x1F48, 0x1F4D], [0x1F59, 0x1F59], [0x1F5B, 0x1F5B], [0x1F5D, 0x1F5D], [0x1F5F, 0x1F5F], [0x1F68, 0x1F6F], [0x1FB8, 0x1FBB], [0x1FC8, 0x1FCB], [0x1FD8, 0x1FDB], [0x1FE8, 0x1FEC], [0x1FF8, 0x1FFB], [0x2102, 0x2102], [0x2107, 0x2107], [0x210B, 0x210D], [0x2110, 0x2112], [0x2115, 0x2115], [0x2119, 0x211D], [0x2124, 0x2124], [0x2126, 0x2126], [0x2128, 0x2128], [0x212A, 0x212D], [0x2130, 0x2131], [0x2133, 0x2133], [0x213E, 0x213F], [0x2145, 0x2145], [0x2C00, 0x2C2E], [0x2C80, 0x2C80], [0x2C82, 0x2C82], [0x2C84, 0x2C84], [0x2C86, 0x2C86], [0x2C88, 0x2C88], [0x2C8A, 0x2C8A], [0x2C8C, 0x2C8C], [0x2C8E, 0x2C8E], [0x2C90, 0x2C90], [0x2C92, 0x2C92], [0x2C94, 0x2C94], [0x2C96, 0x2C96], [0x2C98, 0x2C98], [0x2C9A, 0x2C9A], [0x2C9C, 0x2C9C], [0x2C9E, 0x2C9E], [0x2CA0, 0x2CA0], [0x2CA2, 0x2CA2], [0x2CA4, 0x2CA4], [0x2CA6, 0x2CA6], [0x2CA8, 0x2CA8], [0x2CAA, 0x2CAA], [0x2CAC, 0x2CAC], [0x2CAE, 0x2CAE], [0x2CB0, 0x2CB0], [0x2CB2, 0x2CB2], [0x2CB4, 0x2CB4], [0x2CB6, 0x2CB6], [0x2CB8, 0x2CB8], [0x2CBA, 0x2CBA], [0x2CBC, 0x2CBC], [0x2CBE, 0x2CBE], [0x2CC0, 0x2CC0], [0x2CC2, 0x2CC2], [0x2CC4, 0x2CC4], [0x2CC6, 0x2CC6], [0x2CC8, 0x2CC8], [0x2CCA, 0x2CCA], [0x2CCC, 0x2CCC], [0x2CCE, 0x2CCE], [0x2CD0, 0x2CD0], [0x2CD2, 0x2CD2], [0x2CD4, 0x2CD4], [0x2CD6, 0x2CD6], [0x2CD8, 0x2CD8], [0x2CDA, 0x2CDA], [0x2CDC, 0x2CDC], [0x2CDE, 0x2CDE], [0x2CE0, 0x2CE0], [0x2CE2, 0x2CE2], [0xFF21, 0xFF3A]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Lu.length; indexI++) { - for (indexJ = Lu[indexI][0]; indexJ <= Lu[indexI][1]; indexJ++) { - try { - var identifier = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval("var " + identifier + "=1"); - if (eval(identifier + "===1") !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_410/S7.6_A1.1_T2.js b/tests/ES3/Unicode/Unicode_410/S7.6_A1.1_T2.js deleted file mode 100644 index 1dc7bdea9..000000000 --- a/tests/ES3/Unicode/Unicode_410/S7.6_A1.1_T2.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A1.1_T2; - * @section: 7.6; - * @assertion: IdentifierStart :: UnicodeLetter (any character in the Unicode categories "Lu", "Ll", "Lt", "Lm", "Lo", "Nl"); - * @description: UnicodeLetter :: Lowercase letter (Ll). - * Complex test with eval; -*/ - -//CHECK -Ll = [[0x0061, 0x007A], [0x00AA, 0x00AA], [0x00B5, 0x00B5], [0x00BA, 0x00BA], [0x00DF, 0x00F6], [0x00F8, 0x00FF], [0x0101, 0x0101], [0x0103, 0x0103], [0x0105, 0x0105], [0x0107, 0x0107], [0x0109, 0x0109], [0x010B, 0x010B], [0x010D, 0x010D], [0x010F, 0x010F], [0x0111, 0x0111], [0x0113, 0x0113], [0x0115, 0x0115], [0x0117, 0x0117], [0x0119, 0x0119], [0x011B, 0x011B], [0x011D, 0x011D], [0x011F, 0x011F], [0x0121, 0x0121], [0x0123, 0x0123], [0x0125, 0x0125], [0x0127, 0x0127], [0x0129, 0x0129], [0x012B, 0x012B], [0x012D, 0x012D], [0x012F, 0x012F], [0x0131, 0x0131], [0x0133, 0x0133], [0x0135, 0x0135], [0x0137, 0x0138], [0x013A, 0x013A], [0x013C, 0x013C], [0x013E, 0x013E], [0x0140, 0x0140], [0x0142, 0x0142], [0x0144, 0x0144], [0x0146, 0x0146], [0x0148, 0x0149], [0x014B, 0x014B], [0x014D, 0x014D], [0x014F, 0x014F], [0x0151, 0x0151], [0x0153, 0x0153], [0x0155, 0x0155], [0x0157, 0x0157], [0x0159, 0x0159], [0x015B, 0x015B], [0x015D, 0x015D], [0x015F, 0x015F], [0x0161, 0x0161], [0x0163, 0x0163], [0x0165, 0x0165], [0x0167, 0x0167], [0x0169, 0x0169], [0x016B, 0x016B], [0x016D, 0x016D], [0x016F, 0x016F], [0x0171, 0x0171], [0x0173, 0x0173], [0x0175, 0x0175], [0x0177, 0x0177], [0x017A, 0x017A], [0x017C, 0x017C], [0x017E, 0x0180], [0x0183, 0x0183], [0x0185, 0x0185], [0x0188, 0x0188], [0x018C, 0x018D], [0x0192, 0x0192], [0x0195, 0x0195], [0x0199, 0x019B], [0x019E, 0x019E], [0x01A1, 0x01A1], [0x01A3, 0x01A3], [0x01A5, 0x01A5], [0x01A8, 0x01A8], [0x01AA, 0x01AB], [0x01AD, 0x01AD], [0x01B0, 0x01B0], [0x01B4, 0x01B4], [0x01B6, 0x01B6], [0x01B9, 0x01BA], [0x01BD, 0x01BF], [0x01C6, 0x01C6], [0x01C9, 0x01C9], [0x01CC, 0x01CC], [0x01CE, 0x01CE], [0x01D0, 0x01D0], [0x01D2, 0x01D2], [0x01D4, 0x01D4], [0x01D6, 0x01D6], [0x01D8, 0x01D8], [0x01DA, 0x01DA], [0x01DC, 0x01DD], [0x01DF, 0x01DF], [0x01E1, 0x01E1], [0x01E3, 0x01E3], [0x01E5, 0x01E5], [0x01E7, 0x01E7], [0x01E9, 0x01E9], [0x01EB, 0x01EB], [0x01ED, 0x01ED], [0x01EF, 0x01F0], [0x01F3, 0x01F3], [0x01F5, 0x01F5], [0x01F9, 0x01F9], [0x01FB, 0x01FB], [0x01FD, 0x01FD], [0x01FF, 0x01FF], [0x0201, 0x0201], [0x0203, 0x0203], [0x0205, 0x0205], [0x0207, 0x0207], [0x0209, 0x0209], [0x020B, 0x020B], [0x020D, 0x020D], [0x020F, 0x020F], [0x0211, 0x0211], [0x0213, 0x0213], [0x0215, 0x0215], [0x0217, 0x0217], [0x0219, 0x0219], [0x021B, 0x021B], [0x021D, 0x021D], [0x021F, 0x021F], [0x0221, 0x0221], [0x0223, 0x0223], [0x0225, 0x0225], [0x0227, 0x0227], [0x0229, 0x0229], [0x022B, 0x022B], [0x022D, 0x022D], [0x022F, 0x022F], [0x0231, 0x0231], [0x0233, 0x0239], [0x023C, 0x023C], [0x023F, 0x0240], [0x0250, 0x02AF], [0x0390, 0x0390], [0x03AC, 0x03CE], [0x03D0, 0x03D1], [0x03D5, 0x03D7], [0x03D9, 0x03D9], [0x03DB, 0x03DB], [0x03DD, 0x03DD], [0x03DF, 0x03DF], [0x03E1, 0x03E1], [0x03E3, 0x03E3], [0x03E5, 0x03E5], [0x03E7, 0x03E7], [0x03E9, 0x03E9], [0x03EB, 0x03EB], [0x03ED, 0x03ED], [0x03EF, 0x03F3], [0x03F5, 0x03F5], [0x03F8, 0x03F8], [0x03FB, 0x03FC], [0x0430, 0x045F], [0x0461, 0x0461], [0x0463, 0x0463], [0x0465, 0x0465], [0x0467, 0x0467], [0x0469, 0x0469], [0x046B, 0x046B], [0x046D, 0x046D], [0x046F, 0x046F], [0x0471, 0x0471], [0x0473, 0x0473], [0x0475, 0x0475], [0x0477, 0x0477], [0x0479, 0x0479], [0x047B, 0x047B], [0x047D, 0x047D], [0x047F, 0x047F], [0x0481, 0x0481], [0x048B, 0x048B], [0x048D, 0x048D], [0x048F, 0x048F], [0x0491, 0x0491], [0x0493, 0x0493], [0x0495, 0x0495], [0x0497, 0x0497], [0x0499, 0x0499], [0x049B, 0x049B], [0x049D, 0x049D], [0x049F, 0x049F], [0x04A1, 0x04A1], [0x04A3, 0x04A3], [0x04A5, 0x04A5], [0x04A7, 0x04A7], [0x04A9, 0x04A9], [0x04AB, 0x04AB], [0x04AD, 0x04AD], [0x04AF, 0x04AF], [0x04B1, 0x04B1], [0x04B3, 0x04B3], [0x04B5, 0x04B5], [0x04B7, 0x04B7], [0x04B9, 0x04B9], [0x04BB, 0x04BB], [0x04BD, 0x04BD], [0x04BF, 0x04BF], [0x04C2, 0x04C2], [0x04C4, 0x04C4], [0x04C6, 0x04C6], [0x04C8, 0x04C8], [0x04CA, 0x04CA], [0x04CC, 0x04CC], [0x04CE, 0x04CE], [0x04D1, 0x04D1], [0x04D3, 0x04D3], [0x04D5, 0x04D5], [0x04D7, 0x04D7], [0x04D9, 0x04D9], [0x04DB, 0x04DB], [0x04DD, 0x04DD], [0x04DF, 0x04DF], [0x04E1, 0x04E1], [0x04E3, 0x04E3], [0x04E5, 0x04E5], [0x04E7, 0x04E7], [0x04E9, 0x04E9], [0x04EB, 0x04EB], [0x04ED, 0x04ED], [0x04EF, 0x04EF], [0x04F1, 0x04F1], [0x04F3, 0x04F3], [0x04F5, 0x04F5], [0x04F7, 0x04F7], [0x04F9, 0x04F9], [0x0501, 0x0501], [0x0503, 0x0503], [0x0505, 0x0505], [0x0507, 0x0507], [0x0509, 0x0509], [0x050B, 0x050B], [0x050D, 0x050D], [0x050F, 0x050F], [0x0561, 0x0587], [0x1D00, 0x1D2B], [0x1D62, 0x1D77], [0x1D79, 0x1D9A], [0x1E01, 0x1E01], [0x1E03, 0x1E03], [0x1E05, 0x1E05], [0x1E07, 0x1E07], [0x1E09, 0x1E09], [0x1E0B, 0x1E0B], [0x1E0D, 0x1E0D], [0x1E0F, 0x1E0F], [0x1E11, 0x1E11], [0x1E13, 0x1E13], [0x1E15, 0x1E15], [0x1E17, 0x1E17], [0x1E19, 0x1E19], [0x1E1B, 0x1E1B], [0x1E1D, 0x1E1D], [0x1E1F, 0x1E1F], [0x1E21, 0x1E21], [0x1E23, 0x1E23], [0x1E25, 0x1E25], [0x1E27, 0x1E27], [0x1E29, 0x1E29], [0x1E2B, 0x1E2B], [0x1E2D, 0x1E2D], [0x1E2F, 0x1E2F], [0x1E31, 0x1E31], [0x1E33, 0x1E33], [0x1E35, 0x1E35], [0x1E37, 0x1E37], [0x1E39, 0x1E39], [0x1E3B, 0x1E3B], [0x1E3D, 0x1E3D], [0x1E3F, 0x1E3F], [0x1E41, 0x1E41], [0x1E43, 0x1E43], [0x1E45, 0x1E45], [0x1E47, 0x1E47], [0x1E49, 0x1E49], [0x1E4B, 0x1E4B], [0x1E4D, 0x1E4D], [0x1E4F, 0x1E4F], [0x1E51, 0x1E51], [0x1E53, 0x1E53], [0x1E55, 0x1E55], [0x1E57, 0x1E57], [0x1E59, 0x1E59], [0x1E5B, 0x1E5B], [0x1E5D, 0x1E5D], [0x1E5F, 0x1E5F], [0x1E61, 0x1E61], [0x1E63, 0x1E63], [0x1E65, 0x1E65], [0x1E67, 0x1E67], [0x1E69, 0x1E69], [0x1E6B, 0x1E6B], [0x1E6D, 0x1E6D], [0x1E6F, 0x1E6F], [0x1E71, 0x1E71], [0x1E73, 0x1E73], [0x1E75, 0x1E75], [0x1E77, 0x1E77], [0x1E79, 0x1E79], [0x1E7B, 0x1E7B], [0x1E7D, 0x1E7D], [0x1E7F, 0x1E7F], [0x1E81, 0x1E81], [0x1E83, 0x1E83], [0x1E85, 0x1E85], [0x1E87, 0x1E87], [0x1E89, 0x1E89], [0x1E8B, 0x1E8B], [0x1E8D, 0x1E8D], [0x1E8F, 0x1E8F], [0x1E91, 0x1E91], [0x1E93, 0x1E93], [0x1E95, 0x1E9B], [0x1EA1, 0x1EA1], [0x1EA3, 0x1EA3], [0x1EA5, 0x1EA5], [0x1EA7, 0x1EA7], [0x1EA9, 0x1EA9], [0x1EAB, 0x1EAB], [0x1EAD, 0x1EAD], [0x1EAF, 0x1EAF], [0x1EB1, 0x1EB1], [0x1EB3, 0x1EB3], [0x1EB5, 0x1EB5], [0x1EB7, 0x1EB7], [0x1EB9, 0x1EB9], [0x1EBB, 0x1EBB], [0x1EBD, 0x1EBD], [0x1EBF, 0x1EBF], [0x1EC1, 0x1EC1], [0x1EC3, 0x1EC3], [0x1EC5, 0x1EC5], [0x1EC7, 0x1EC7], [0x1EC9, 0x1EC9], [0x1ECB, 0x1ECB], [0x1ECD, 0x1ECD], [0x1ECF, 0x1ECF], [0x1ED1, 0x1ED1], [0x1ED3, 0x1ED3], [0x1ED5, 0x1ED5], [0x1ED7, 0x1ED7], [0x1ED9, 0x1ED9], [0x1EDB, 0x1EDB], [0x1EDD, 0x1EDD], [0x1EDF, 0x1EDF], [0x1EE1, 0x1EE1], [0x1EE3, 0x1EE3], [0x1EE5, 0x1EE5], [0x1EE7, 0x1EE7], [0x1EE9, 0x1EE9], [0x1EEB, 0x1EEB], [0x1EED, 0x1EED], [0x1EEF, 0x1EEF], [0x1EF1, 0x1EF1], [0x1EF3, 0x1EF3], [0x1EF5, 0x1EF5], [0x1EF7, 0x1EF7], [0x1EF9, 0x1EF9], [0x1F00, 0x1F07], [0x1F10, 0x1F15], [0x1F20, 0x1F27], [0x1F30, 0x1F37], [0x1F40, 0x1F45], [0x1F50, 0x1F57], [0x1F60, 0x1F67], [0x1F70, 0x1F7D], [0x1F80, 0x1F87], [0x1F90, 0x1F97], [0x1FA0, 0x1FA7], [0x1FB0, 0x1FB4], [0x1FB6, 0x1FB7], [0x1FBE, 0x1FBE], [0x1FC2, 0x1FC4], [0x1FC6, 0x1FC7], [0x1FD0, 0x1FD3], [0x1FD6, 0x1FD7], [0x1FE0, 0x1FE7], [0x1FF2, 0x1FF4], [0x1FF6, 0x1FF7], [0x2071, 0x2071], [0x207F, 0x207F], [0x210A, 0x210A], [0x210E, 0x210F], [0x2113, 0x2113], [0x212F, 0x212F], [0x2134, 0x2134], [0x2139, 0x2139], [0x213C, 0x213D], [0x2146, 0x2149], [0x2C30, 0x2C5E], [0x2C81, 0x2C81], [0x2C83, 0x2C83], [0x2C85, 0x2C85], [0x2C87, 0x2C87], [0x2C89, 0x2C89], [0x2C8B, 0x2C8B], [0x2C8D, 0x2C8D], [0x2C8F, 0x2C8F], [0x2C91, 0x2C91], [0x2C93, 0x2C93], [0x2C95, 0x2C95], [0x2C97, 0x2C97], [0x2C99, 0x2C99], [0x2C9B, 0x2C9B], [0x2C9D, 0x2C9D], [0x2C9F, 0x2C9F], [0x2CA1, 0x2CA1], [0x2CA3, 0x2CA3], [0x2CA5, 0x2CA5], [0x2CA7, 0x2CA7], [0x2CA9, 0x2CA9], [0x2CAB, 0x2CAB], [0x2CAD, 0x2CAD], [0x2CAF, 0x2CAF], [0x2CB1, 0x2CB1], [0x2CB3, 0x2CB3], [0x2CB5, 0x2CB5], [0x2CB7, 0x2CB7], [0x2CB9, 0x2CB9], [0x2CBB, 0x2CBB], [0x2CBD, 0x2CBD], [0x2CBF, 0x2CBF], [0x2CC1, 0x2CC1], [0x2CC3, 0x2CC3], [0x2CC5, 0x2CC5], [0x2CC7, 0x2CC7], [0x2CC9, 0x2CC9], [0x2CCB, 0x2CCB], [0x2CCD, 0x2CCD], [0x2CCF, 0x2CCF], [0x2CD1, 0x2CD1], [0x2CD3, 0x2CD3], [0x2CD5, 0x2CD5], [0x2CD7, 0x2CD7], [0x2CD9, 0x2CD9], [0x2CDB, 0x2CDB], [0x2CDD, 0x2CDD], [0x2CDF, 0x2CDF], [0x2CE1, 0x2CE1], [0x2CE3, 0x2CE4], [0x2D00, 0x2D25], [0xFB00, 0xFB06], [0xFB13, 0xFB17], [0xFF41, 0xFF5A]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Ll.length; indexI++) { - for (indexJ = Ll[indexI][0]; indexJ <= Ll[indexI][1]; indexJ++) { - try { - var identifier = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval("var " + identifier + "=1"); - if (eval(identifier + "===1") !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_410/S7.6_A1.1_T3.js b/tests/ES3/Unicode/Unicode_410/S7.6_A1.1_T3.js deleted file mode 100644 index 06e9329b8..000000000 --- a/tests/ES3/Unicode/Unicode_410/S7.6_A1.1_T3.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A1.1_T3; - * @section: 7.6; - * @assertion: IdentifierStart :: UnicodeLetter (any character in the Unicode categories "Lu", "Ll", "Lt", "Lm", "Lo", "Nl"); - * @description: UnicodeLetter :: Titlecase letter (Lt). - * Complex test with eval; -*/ - -//CHECK -Lt = [[0x01C5, 0x01C5], [0x01C8, 0x01C8], [0x01CB, 0x01CB], [0x01F2, 0x01F2], [0x1F88, 0x1F8F], [0x1F98, 0x1F9F], [0x1FA8, 0x1FAF], [0x1FBC, 0x1FBC], [0x1FCC, 0x1FCC], [0x1FFC, 0x1FFC]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Lt.length; indexI++) { - for (indexJ = Lt[indexI][0]; indexJ <= Lt[indexI][1]; indexJ++) { - try { - var identifier = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval("var " + identifier + "=1"); - if (eval(identifier + "===1") !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_410/S7.6_A1.1_T4.js b/tests/ES3/Unicode/Unicode_410/S7.6_A1.1_T4.js deleted file mode 100644 index 70cfe6286..000000000 --- a/tests/ES3/Unicode/Unicode_410/S7.6_A1.1_T4.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A1.1_T4; - * @section: 7.6; - * @assertion: IdentifierStart :: UnicodeLetter (any character in the Unicode categories "Lu", "Ll", "Lt", "Lm", "Lo", "Nl"); - * @description: UnicodeLetter :: Modifier letter (Lm). - * Complex test with eval; -*/ - -//CHECK -Lm = [[0x02B0, 0x02C1], [0x02C6, 0x02D1], [0x02E0, 0x02E4], [0x02EE, 0x02EE], [0x037A, 0x037A], [0x0559, 0x0559], [0x0640, 0x0640], [0x06E5, 0x06E6], [0x0E46, 0x0E46], [0x0EC6, 0x0EC6], [0x10FC, 0x10FC], [0x17D7, 0x17D7], [0x1843, 0x1843], [0x1D2C, 0x1D61], [0x1D78, 0x1D78], [0x1D9B, 0x1DBF], [0x2090, 0x2094], [0x2D6F, 0x2D6F], [0x3005, 0x3005], [0x3031, 0x3035], [0x303B, 0x303B], [0x309D, 0x309E], [0x30FC, 0x30FE], [0xA015, 0xA015], [0xFF70, 0xFF70], [0xFF9E, 0xFF9F]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Lm.length; indexI++) { - for (indexJ = Lm[indexI][0]; indexJ <= Lm[indexI][1]; indexJ++) { - try { - var identifier = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval("var " + identifier + "=1"); - if (eval(identifier + "===1") !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_410/S7.6_A1.1_T5.js b/tests/ES3/Unicode/Unicode_410/S7.6_A1.1_T5.js deleted file mode 100644 index 73dac0b38..000000000 --- a/tests/ES3/Unicode/Unicode_410/S7.6_A1.1_T5.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A1.1_T5; - * @section: 7.6; - * @assertion: IdentifierStart :: UnicodeLetter (any character in the Unicode categories "Lu", "Ll", "Lt", "Lm", "Lo", "Nl"); - * @description: UnicodeLetter :: Other letter (Lo). - * Complex test with eval; -*/ - -//CHECK -Lo = [[0x01BB, 0x01BB], [0x01C0, 0x01C3], [0x05D0, 0x05EA], [0x05F0, 0x05F2], [0x0621, 0x063A], [0x0641, 0x064A], [0x066E, 0x066F], [0x0671, 0x06D3], [0x06D5, 0x06D5], [0x06EE, 0x06EF], [0x06FA, 0x06FC], [0x06FF, 0x06FF], [0x0710, 0x0710], [0x0712, 0x072F], [0x074D, 0x076D], [0x0780, 0x07A5], [0x07B1, 0x07B1], [0x0904, 0x0939], [0x093D, 0x093D], [0x0950, 0x0950], [0x0958, 0x0961], [0x097D, 0x097D], [0x0985, 0x098C], [0x098F, 0x0990], [0x0993, 0x09A8], [0x09AA, 0x09B0], [0x09B2, 0x09B2], [0x09B6, 0x09B9], [0x09BD, 0x09BD], [0x09CE, 0x09CE], [0x09DC, 0x09DD], [0x09DF, 0x09E1], [0x09F0, 0x09F1], [0x0A05, 0x0A0A], [0x0A0F, 0x0A10], [0x0A13, 0x0A28], [0x0A2A, 0x0A30], [0x0A32, 0x0A33], [0x0A35, 0x0A36], [0x0A38, 0x0A39], [0x0A59, 0x0A5C], [0x0A5E, 0x0A5E], [0x0A72, 0x0A74], [0x0A85, 0x0A8D], [0x0A8F, 0x0A91], [0x0A93, 0x0AA8], [0x0AAA, 0x0AB0], [0x0AB2, 0x0AB3], [0x0AB5, 0x0AB9], [0x0ABD, 0x0ABD], [0x0AD0, 0x0AD0], [0x0AE0, 0x0AE1], [0x0B05, 0x0B0C], [0x0B0F, 0x0B10], [0x0B13, 0x0B28], [0x0B2A, 0x0B30], [0x0B32, 0x0B33], [0x0B35, 0x0B39], [0x0B3D, 0x0B3D], [0x0B5C, 0x0B5D], [0x0B5F, 0x0B61], [0x0B71, 0x0B71], [0x0B83, 0x0B83], [0x0B85, 0x0B8A], [0x0B8E, 0x0B90], [0x0B92, 0x0B95], [0x0B99, 0x0B9A], [0x0B9C, 0x0B9C], [0x0B9E, 0x0B9F], [0x0BA3, 0x0BA4], [0x0BA8, 0x0BAA], [0x0BAE, 0x0BB9], [0x0C05, 0x0C0C], [0x0C0E, 0x0C10], [0x0C12, 0x0C28], [0x0C2A, 0x0C33], [0x0C35, 0x0C39], [0x0C60, 0x0C61], [0x0C85, 0x0C8C], [0x0C8E, 0x0C90], [0x0C92, 0x0CA8], [0x0CAA, 0x0CB3], [0x0CB5, 0x0CB9], [0x0CBD, 0x0CBD], [0x0CDE, 0x0CDE], [0x0CE0, 0x0CE1], [0x0D05, 0x0D0C], [0x0D0E, 0x0D10], [0x0D12, 0x0D28], [0x0D2A, 0x0D39], [0x0D60, 0x0D61], [0x0D85, 0x0D96], [0x0D9A, 0x0DB1], [0x0DB3, 0x0DBB], [0x0DBD, 0x0DBD], [0x0DC0, 0x0DC6], [0x0E01, 0x0E30], [0x0E32, 0x0E33], [0x0E40, 0x0E45], [0x0E81, 0x0E82], [0x0E84, 0x0E84], [0x0E87, 0x0E88], [0x0E8A, 0x0E8A], [0x0E8D, 0x0E8D], [0x0E94, 0x0E97], [0x0E99, 0x0E9F], [0x0EA1, 0x0EA3], [0x0EA5, 0x0EA5], [0x0EA7, 0x0EA7], [0x0EAA, 0x0EAB], [0x0EAD, 0x0EB0], [0x0EB2, 0x0EB3], [0x0EBD, 0x0EBD], [0x0EC0, 0x0EC4], [0x0EDC, 0x0EDD], [0x0F00, 0x0F00], [0x0F40, 0x0F47], [0x0F49, 0x0F6A], [0x0F88, 0x0F8B], [0x1000, 0x1021], [0x1023, 0x1027], [0x1029, 0x102A], [0x1050, 0x1055], [0x10D0, 0x10FA], [0x1100, 0x1159], [0x115F, 0x11A2], [0x11A8, 0x11F9], [0x1200, 0x1248], [0x124A, 0x124D], [0x1250, 0x1256], [0x1258, 0x1258], [0x125A, 0x125D], [0x1260, 0x1288], [0x128A, 0x128D], [0x1290, 0x12B0], [0x12B2, 0x12B5], [0x12B8, 0x12BE], [0x12C0, 0x12C0], [0x12C2, 0x12C5], [0x12C8, 0x12D6], [0x12D8, 0x1310], [0x1312, 0x1315], [0x1318, 0x135A], [0x1380, 0x138F], [0x13A0, 0x13F4], [0x1401, 0x166C], [0x166F, 0x1676], [0x1681, 0x169A], [0x16A0, 0x16EA], [0x1700, 0x170C], [0x170E, 0x1711], [0x1720, 0x1731], [0x1740, 0x1751], [0x1760, 0x176C], [0x176E, 0x1770], [0x1780, 0x17B3], [0x17DC, 0x17DC], [0x1820, 0x1842], [0x1844, 0x1877], [0x1880, 0x18A8], [0x1900, 0x191C], [0x1950, 0x196D], [0x1970, 0x1974], [0x1980, 0x19A9], [0x19C1, 0x19C7], [0x1A00, 0x1A16], [0x2135, 0x2138], [0x2D30, 0x2D65], [0x2D80, 0x2D96], [0x2DA0, 0x2DA6], [0x2DA8, 0x2DAE], [0x2DB0, 0x2DB6], [0x2DB8, 0x2DBE], [0x2DC0, 0x2DC6], [0x2DC8, 0x2DCE], [0x2DD0, 0x2DD6], [0x2DD8, 0x2DDE], [0x3006, 0x3006], [0x303C, 0x303C], [0x3041, 0x3096], [0x309F, 0x309F], [0x30A1, 0x30FA], [0x30FF, 0x30FF], [0x3105, 0x312C], [0x3131, 0x318E], [0x31A0, 0x31B7], [0x31F0, 0x31FF], [0x3400, 0x4DB5], [0x4E00, 0x9FBB], [0xA000, 0xA014], [0xA016, 0xA48C], [0xA800, 0xA801], [0xA803, 0xA805], [0xA807, 0xA80A], [0xA80C, 0xA822], [0xAC00, 0xD7A3], [0xF900, 0xFA2D], [0xFA30, 0xFA6A], [0xFA70, 0xFAD9], [0xFB1D, 0xFB1D], [0xFB1F, 0xFB28], [0xFB2A, 0xFB36], [0xFB38, 0xFB3C], [0xFB3E, 0xFB3E], [0xFB40, 0xFB41], [0xFB43, 0xFB44], [0xFB46, 0xFBB1], [0xFBD3, 0xFD3D], [0xFD50, 0xFD8F], [0xFD92, 0xFDC7], [0xFDF0, 0xFDFB], [0xFE70, 0xFE74], [0xFE76, 0xFEFC], [0xFF66, 0xFF6F], [0xFF71, 0xFF9D], [0xFFA0, 0xFFBE], [0xFFC2, 0xFFC7], [0xFFCA, 0xFFCF], [0xFFD2, 0xFFD7], [0xFFDA, 0xFFDC]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Lo.length; indexI++) { - for (indexJ = Lo[indexI][0]; indexJ <= Lo[indexI][1]; indexJ++) { - try { - var identifier = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval("var " + identifier + "=1"); - if (eval(identifier + "===1") !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_410/S7.6_A1.1_T6.js b/tests/ES3/Unicode/Unicode_410/S7.6_A1.1_T6.js deleted file mode 100644 index d51df6879..000000000 --- a/tests/ES3/Unicode/Unicode_410/S7.6_A1.1_T6.js +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A1.1_T6; - * @section: 7.6; - * @assertion: IdentifierStart :: UnicodeLetter (any character in the Unicode categories "Lu", "Ll", "Lt", "Lm", "Lo", "Nl"); - * @description: UnicodeLetter :: Letter number (Nl); -*/ - -//CHECK -Nl = [[0x16EE, 0x16F0], [0x2160, 0x2183], [0x3007, 0x3007], [0x3021, 0x3029], [0x3038, 0x303A]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Nl.length; indexI++) { - for (indexJ = Nl[indexI][0]; indexJ <= Nl[indexI][1]; indexJ++) { - try { - var identifier = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval("var " + identifier + "=1"); - if (eval(identifier + "===1") !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_410/S7.6_A1.4_T1.js b/tests/ES3/Unicode/Unicode_410/S7.6_A1.4_T1.js deleted file mode 100644 index c19f6308e..000000000 --- a/tests/ES3/Unicode/Unicode_410/S7.6_A1.4_T1.js +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A1.4_T1; - * @section: 7.6; - * @assertion: IdentifierName must begin at IdentifierStart; - * @description: IdentifierStart is not UnicodeCombiningMark ("Mn"). - * Complex test with eval; -*/ - -//CHECK -Mn = [[0x0300, 0x036F], [0x0483, 0x0486], [0x0591, 0x05B9], [0x05BB, 0x05BD], [0x05BF, 0x05BF], [0x05C1, 0x05C2], [0x05C4, 0x05C5], [0x05C7, 0x05C7], [0x0610, 0x0615], [0x064B, 0x065E], [0x0670, 0x0670], [0x06D6, 0x06DC], [0x06DF, 0x06E4], [0x06E7, 0x06E8], [0x06EA, 0x06ED], [0x0711, 0x0711], [0x0730, 0x074A], [0x07A6, 0x07B0], [0x0901, 0x0902], [0x093C, 0x093C], [0x0941, 0x0948], [0x094D, 0x094D], [0x0951, 0x0954], [0x0962, 0x0963], [0x0981, 0x0981], [0x09BC, 0x09BC], [0x09C1, 0x09C4], [0x09CD, 0x09CD], [0x09E2, 0x09E3], [0x0A01, 0x0A02], [0x0A3C, 0x0A3C], [0x0A41, 0x0A42], [0x0A47, 0x0A48], [0x0A4B, 0x0A4D], [0x0A70, 0x0A71], [0x0A81, 0x0A82], [0x0ABC, 0x0ABC], [0x0AC1, 0x0AC5], [0x0AC7, 0x0AC8], [0x0ACD, 0x0ACD], [0x0AE2, 0x0AE3], [0x0B01, 0x0B01], [0x0B3C, 0x0B3C], [0x0B3F, 0x0B3F], [0x0B41, 0x0B43], [0x0B4D, 0x0B4D], [0x0B56, 0x0B56], [0x0B82, 0x0B82], [0x0BC0, 0x0BC0], [0x0BCD, 0x0BCD], [0x0C3E, 0x0C40], [0x0C46, 0x0C48], [0x0C4A, 0x0C4D], [0x0C55, 0x0C56], [0x0CBC, 0x0CBC], [0x0CBF, 0x0CBF], [0x0CC6, 0x0CC6], [0x0CCC, 0x0CCD], [0x0D41, 0x0D43], [0x0D4D, 0x0D4D], [0x0DCA, 0x0DCA], [0x0DD2, 0x0DD4], [0x0DD6, 0x0DD6], [0x0E31, 0x0E31], [0x0E34, 0x0E3A], [0x0E47, 0x0E4E], [0x0EB1, 0x0EB1], [0x0EB4, 0x0EB9], [0x0EBB, 0x0EBC], [0x0EC8, 0x0ECD], [0x0F18, 0x0F19], [0x0F35, 0x0F35], [0x0F37, 0x0F37], [0x0F39, 0x0F39], [0x0F71, 0x0F7E], [0x0F80, 0x0F84], [0x0F86, 0x0F87], [0x0F90, 0x0F97], [0x0F99, 0x0FBC], [0x0FC6, 0x0FC6], [0x102D, 0x1030], [0x1032, 0x1032], [0x1036, 0x1037], [0x1039, 0x1039], [0x1058, 0x1059], [0x135F, 0x135F], [0x1712, 0x1714], [0x1732, 0x1734], [0x1752, 0x1753], [0x1772, 0x1773], [0x17B7, 0x17BD], [0x17C6, 0x17C6], [0x17C9, 0x17D3], [0x17DD, 0x17DD], [0x180B, 0x180D], [0x18A9, 0x18A9], [0x1920, 0x1922], [0x1927, 0x1928], [0x1932, 0x1932], [0x1939, 0x193B], [0x1A17, 0x1A18], [0x1DC0, 0x1DC3], [0x20D0, 0x20DC], [0x20E1, 0x20E1], [0x20E5, 0x20EB], [0x302A, 0x302F], [0x3099, 0x309A], [0xA806, 0xA806], [0xA80B, 0xA80B], [0xA825, 0xA826], [0xFB1E, 0xFB1E], [0xFE00, 0xFE0F], [0xFE20, 0xFE23]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Mn.length; indexI++) { - for (indexJ = Mn[indexI][0]; indexJ <= Mn[indexI][1]; indexJ++) { - try { - var identifier = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval("var " + identifier + "=1"); - $ERROR('#' + hex + ' '); - errorCount++; - } catch (e) { - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_410/S7.6_A1.4_T2.js b/tests/ES3/Unicode/Unicode_410/S7.6_A1.4_T2.js deleted file mode 100644 index c28a92b16..000000000 --- a/tests/ES3/Unicode/Unicode_410/S7.6_A1.4_T2.js +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A1.4_T2; - * @section: 7.6; - * @assertion: IdentifierName must begin at IdentifierStart; - * @description: IdentifierStart is not UnicodeCombiningMark ("Mc"). - * Complex test with eval; -*/ - -//CHECK -Mc = [[0x0903, 0x0903], [0x093E, 0x0940], [0x0949, 0x094C], [0x0982, 0x0983], [0x09BE, 0x09C0], [0x09C7, 0x09C8], [0x09CB, 0x09CC], [0x09D7, 0x09D7], [0x0A03, 0x0A03], [0x0A3E, 0x0A40], [0x0A83, 0x0A83], [0x0ABE, 0x0AC0], [0x0AC9, 0x0AC9], [0x0ACB, 0x0ACC], [0x0B02, 0x0B03], [0x0B3E, 0x0B3E], [0x0B40, 0x0B40], [0x0B47, 0x0B48], [0x0B4B, 0x0B4C], [0x0B57, 0x0B57], [0x0BBE, 0x0BBF], [0x0BC1, 0x0BC2], [0x0BC6, 0x0BC8], [0x0BCA, 0x0BCC], [0x0BD7, 0x0BD7], [0x0C01, 0x0C03], [0x0C41, 0x0C44], [0x0C82, 0x0C83], [0x0CBE, 0x0CBE], [0x0CC0, 0x0CC4], [0x0CC7, 0x0CC8], [0x0CCA, 0x0CCB], [0x0CD5, 0x0CD6], [0x0D02, 0x0D03], [0x0D3E, 0x0D40], [0x0D46, 0x0D48], [0x0D4A, 0x0D4C], [0x0D57, 0x0D57], [0x0D82, 0x0D83], [0x0DCF, 0x0DD1], [0x0DD8, 0x0DDF], [0x0DF2, 0x0DF3], [0x0F3E, 0x0F3F], [0x0F7F, 0x0F7F], [0x102C, 0x102C], [0x1031, 0x1031], [0x1038, 0x1038], [0x1056, 0x1057], [0x17B6, 0x17B6], [0x17BE, 0x17C5], [0x17C7, 0x17C8], [0x1923, 0x1926], [0x1929, 0x192B], [0x1930, 0x1931], [0x1933, 0x1938], [0x19B0, 0x19C0], [0x19C8, 0x19C9], [0x1A19, 0x1A1B], [0xA802, 0xA802], [0xA823, 0xA824], [0xA827, 0xA827]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Mc.length; indexI++) { - for (indexJ = Mc[indexI][0]; indexJ <= Mc[indexI][1]; indexJ++) { - try { - var identifier = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval("var " + identifier + "=1"); - $ERROR('#' + hex + ' '); - errorCount++; - } catch (e) { - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_410/S7.6_A1.4_T3.js b/tests/ES3/Unicode/Unicode_410/S7.6_A1.4_T3.js deleted file mode 100644 index 0b5620ef4..000000000 --- a/tests/ES3/Unicode/Unicode_410/S7.6_A1.4_T3.js +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A1.4_T3; - * @section: 7.6; - * @assertion: IdentifierName must begin at IdentifierStart; - * @description: IdentifierStart is not UnicodeDigit ("Nd"). - * Complex test with eval; -*/ - -//CHECK -Nd = [[0x0030, 0x0039], [0x0660, 0x0669], [0x06F0, 0x06F9], [0x0966, 0x096F], [0x09E6, 0x09EF], [0x0A66, 0x0A6F], [0x0AE6, 0x0AEF], [0x0B66, 0x0B6F], [0x0BE6, 0x0BEF], [0x0C66, 0x0C6F], [0x0CE6, 0x0CEF], [0x0D66, 0x0D6F], [0x0E50, 0x0E59], [0x0ED0, 0x0ED9], [0x0F20, 0x0F29], [0x1040, 0x1049], [0x17E0, 0x17E9], [0x1810, 0x1819], [0x1946, 0x194F], [0x19D0, 0x19D9], [0xFF10, 0xFF19]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Nd.length; indexI++) { - for (indexJ = Nd[indexI][0]; indexJ <= Nd[indexI][1]; indexJ++) { - try { - var identifier = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval("var " + identifier + "=1"); - $ERROR('#' + hex + ' '); - errorCount++; - } catch (e) { - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_410/S7.6_A1.4_T4.js b/tests/ES3/Unicode/Unicode_410/S7.6_A1.4_T4.js deleted file mode 100644 index d1f641833..000000000 --- a/tests/ES3/Unicode/Unicode_410/S7.6_A1.4_T4.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A1.4_T4; - * @section: 7.6; - * @assertion: IdentifierName must begin at IdentifierStart; - * @description: IdentifierStart is not UnicodeConnectorPunctuation ("Pc") without $. - * Complex test with eval; -*/ - -//CHECK -Pc = [[0x005F, 0x005F], [0x203F, 0x2040], [0x2054, 0x2054], [0xFE33, 0xFE34], [0xFE4D, 0xFE4F], [0xFF3F, 0xFF3F]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Pc.length; indexI++) { - for (indexJ = Pc[indexI][0]; indexJ <= Pc[indexI][1]; indexJ++) { - try { - var identifier = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - if (hex !== "0078") { - eval("var " + identifier + "=1"); - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_410/S7.6_A2.2_T1.js b/tests/ES3/Unicode/Unicode_410/S7.6_A2.2_T1.js deleted file mode 100644 index 676d94346..000000000 --- a/tests/ES3/Unicode/Unicode_410/S7.6_A2.2_T1.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A2.2_T1; - * @section: 7.6; - * @assertion: IdentifierPart :: UnicodeCombiningMark (any character in the Unicode categories "Mn", "Mc"); - * @description: UnicodeCombiningMark :: Non-spacing mark (Mn). - * Complex test with eval; -*/ - -//CHECK -Mn = [[0x0300, 0x036F], [0x0483, 0x0486], [0x0591, 0x05B9], [0x05BB, 0x05BD], [0x05BF, 0x05BF], [0x05C1, 0x05C2], [0x05C4, 0x05C5], [0x05C7, 0x05C7], [0x0610, 0x0615], [0x064B, 0x065E], [0x0670, 0x0670], [0x06D6, 0x06DC], [0x06DF, 0x06E4], [0x06E7, 0x06E8], [0x06EA, 0x06ED], [0x0711, 0x0711], [0x0730, 0x074A], [0x07A6, 0x07B0], [0x0901, 0x0902], [0x093C, 0x093C], [0x0941, 0x0948], [0x094D, 0x094D], [0x0951, 0x0954], [0x0962, 0x0963], [0x0981, 0x0981], [0x09BC, 0x09BC], [0x09C1, 0x09C4], [0x09CD, 0x09CD], [0x09E2, 0x09E3], [0x0A01, 0x0A02], [0x0A3C, 0x0A3C], [0x0A41, 0x0A42], [0x0A47, 0x0A48], [0x0A4B, 0x0A4D], [0x0A70, 0x0A71], [0x0A81, 0x0A82], [0x0ABC, 0x0ABC], [0x0AC1, 0x0AC5], [0x0AC7, 0x0AC8], [0x0ACD, 0x0ACD], [0x0AE2, 0x0AE3], [0x0B01, 0x0B01], [0x0B3C, 0x0B3C], [0x0B3F, 0x0B3F], [0x0B41, 0x0B43], [0x0B4D, 0x0B4D], [0x0B56, 0x0B56], [0x0B82, 0x0B82], [0x0BC0, 0x0BC0], [0x0BCD, 0x0BCD], [0x0C3E, 0x0C40], [0x0C46, 0x0C48], [0x0C4A, 0x0C4D], [0x0C55, 0x0C56], [0x0CBC, 0x0CBC], [0x0CBF, 0x0CBF], [0x0CC6, 0x0CC6], [0x0CCC, 0x0CCD], [0x0D41, 0x0D43], [0x0D4D, 0x0D4D], [0x0DCA, 0x0DCA], [0x0DD2, 0x0DD4], [0x0DD6, 0x0DD6], [0x0E31, 0x0E31], [0x0E34, 0x0E3A], [0x0E47, 0x0E4E], [0x0EB1, 0x0EB1], [0x0EB4, 0x0EB9], [0x0EBB, 0x0EBC], [0x0EC8, 0x0ECD], [0x0F18, 0x0F19], [0x0F35, 0x0F35], [0x0F37, 0x0F37], [0x0F39, 0x0F39], [0x0F71, 0x0F7E], [0x0F80, 0x0F84], [0x0F86, 0x0F87], [0x0F90, 0x0F97], [0x0F99, 0x0FBC], [0x0FC6, 0x0FC6], [0x102D, 0x1030], [0x1032, 0x1032], [0x1036, 0x1037], [0x1039, 0x1039], [0x1058, 0x1059], [0x135F, 0x135F], [0x1712, 0x1714], [0x1732, 0x1734], [0x1752, 0x1753], [0x1772, 0x1773], [0x17B7, 0x17BD], [0x17C6, 0x17C6], [0x17C9, 0x17D3], [0x17DD, 0x17DD], [0x180B, 0x180D], [0x18A9, 0x18A9], [0x1920, 0x1922], [0x1927, 0x1928], [0x1932, 0x1932], [0x1939, 0x193B], [0x1A17, 0x1A18], [0x1DC0, 0x1DC3], [0x20D0, 0x20DC], [0x20E1, 0x20E1], [0x20E5, 0x20EB], [0x302A, 0x302F], [0x3099, 0x309A], [0xA806, 0xA806], [0xA80B, 0xA80B], [0xA825, 0xA826], [0xFB1E, 0xFB1E], [0xFE00, 0xFE0F], [0xFE20, 0xFE23]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Mn.length; indexI++) { - for (indexJ = Mn[indexI][0]; indexJ <= Mn[indexI][1]; indexJ++) { - try { - var identifier = "$" + String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval("var " + identifier + "=1"); - if (eval(identifier + "===1") !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_410/S7.6_A2.2_T2.js b/tests/ES3/Unicode/Unicode_410/S7.6_A2.2_T2.js deleted file mode 100644 index f1bbb3e01..000000000 --- a/tests/ES3/Unicode/Unicode_410/S7.6_A2.2_T2.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A2.2_T2; - * @section: 7.6; - * @assertion: IdentifierPart :: UnicodeCombiningMark (any character in the Unicode categories "Mn", "Mc"); - * @description: UnicodeCombiningMark :: Combining spacing mark (Mc). - * Complex test with eval; -*/ - -//CHECK -Mc = [[0x0903, 0x0903], [0x093E, 0x0940], [0x0949, 0x094C], [0x0982, 0x0983], [0x09BE, 0x09C0], [0x09C7, 0x09C8], [0x09CB, 0x09CC], [0x09D7, 0x09D7], [0x0A03, 0x0A03], [0x0A3E, 0x0A40], [0x0A83, 0x0A83], [0x0ABE, 0x0AC0], [0x0AC9, 0x0AC9], [0x0ACB, 0x0ACC], [0x0B02, 0x0B03], [0x0B3E, 0x0B3E], [0x0B40, 0x0B40], [0x0B47, 0x0B48], [0x0B4B, 0x0B4C], [0x0B57, 0x0B57], [0x0BBE, 0x0BBF], [0x0BC1, 0x0BC2], [0x0BC6, 0x0BC8], [0x0BCA, 0x0BCC], [0x0BD7, 0x0BD7], [0x0C01, 0x0C03], [0x0C41, 0x0C44], [0x0C82, 0x0C83], [0x0CBE, 0x0CBE], [0x0CC0, 0x0CC4], [0x0CC7, 0x0CC8], [0x0CCA, 0x0CCB], [0x0CD5, 0x0CD6], [0x0D02, 0x0D03], [0x0D3E, 0x0D40], [0x0D46, 0x0D48], [0x0D4A, 0x0D4C], [0x0D57, 0x0D57], [0x0D82, 0x0D83], [0x0DCF, 0x0DD1], [0x0DD8, 0x0DDF], [0x0DF2, 0x0DF3], [0x0F3E, 0x0F3F], [0x0F7F, 0x0F7F], [0x102C, 0x102C], [0x1031, 0x1031], [0x1038, 0x1038], [0x1056, 0x1057], [0x17B6, 0x17B6], [0x17BE, 0x17C5], [0x17C7, 0x17C8], [0x1923, 0x1926], [0x1929, 0x192B], [0x1930, 0x1931], [0x1933, 0x1938], [0x19B0, 0x19C0], [0x19C8, 0x19C9], [0x1A19, 0x1A1B], [0xA802, 0xA802], [0xA823, 0xA824], [0xA827, 0xA827]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Mc.length; indexI++) { - for (indexJ = Mc[indexI][0]; indexJ <= Mc[indexI][1]; indexJ++) { - try { - var identifier = "$" + String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval("var " + identifier + "=1"); - if (eval(identifier + "===1") !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_410/S7.6_A2.3.js b/tests/ES3/Unicode/Unicode_410/S7.6_A2.3.js deleted file mode 100644 index 34b5a4c3d..000000000 --- a/tests/ES3/Unicode/Unicode_410/S7.6_A2.3.js +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A2.3; - * @section: 7.6; - * @assertion: IdentifierPart :: UnicodeDigit (any character in the Unicode categories "Decimal Number (Nd)". - * @description: Complex test with eval; -*/ - -//CHECK -Nd = [[0x0030, 0x0039], [0x0660, 0x0669], [0x06F0, 0x06F9], [0x0966, 0x096F], [0x09E6, 0x09EF], [0x0A66, 0x0A6F], [0x0AE6, 0x0AEF], [0x0B66, 0x0B6F], [0x0BE6, 0x0BEF], [0x0C66, 0x0C6F], [0x0CE6, 0x0CEF], [0x0D66, 0x0D6F], [0x0E50, 0x0E59], [0x0ED0, 0x0ED9], [0x0F20, 0x0F29], [0x1040, 0x1049], [0x17E0, 0x17E9], [0x1810, 0x1819], [0x1946, 0x194F], [0x19D0, 0x19D9], [0xFF10, 0xFF19]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Nd.length; indexI++) { - for (indexJ = Nd[indexI][0]; indexJ <= Nd[indexI][1]; indexJ++) { - try { - var identifier = "$" + String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval("var " + identifier + "=1"); - if (eval(identifier + "===1") !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_410/S7.6_A2.4.js b/tests/ES3/Unicode/Unicode_410/S7.6_A2.4.js deleted file mode 100644 index e7b636a2a..000000000 --- a/tests/ES3/Unicode/Unicode_410/S7.6_A2.4.js +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A2.4; - * @section: 7.6; - * @assertion: IdentifierPart :: UnicodeConnectorPunctuation (any character in the Unicode categories "Connector Punctuation (Pc)". - * @description: Complex test with eval; -*/ - -//CHECK -Pc = [[0x005F, 0x005F], [0x203F, 0x2040], [0x2054, 0x2054], [0xFE33, 0xFE34], [0xFE4D, 0xFE4F], [0xFF3F, 0xFF3F]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Pc.length; indexI++) { - for (indexJ = Pc[indexI][0]; indexJ <= Pc[indexI][1]; indexJ++) { - try { - var identifier = "$" + String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval("var " + identifier + "=1"); - if (eval(identifier + "===1") !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_410/S7.6_A3.1.js b/tests/ES3/Unicode/Unicode_410/S7.6_A3.1.js deleted file mode 100644 index 77733d7f3..000000000 --- a/tests/ES3/Unicode/Unicode_410/S7.6_A3.1.js +++ /dev/null @@ -1,152 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A3.1; - * @section: 7.6; - * @assertion: IdentifierName must contain only IdentifierPart character; - * @description: Complex test with eval; -*/ - -//CHECK -Lu = [[0x0041, 0x005A], [0x00C0, 0x00D6], [0x00D8, 0x00DE], [0x0100, 0x0100], [0x0102, 0x0102], [0x0104, 0x0104], [0x0106, 0x0106], [0x0108, 0x0108], [0x010A, 0x010A], [0x010C, 0x010C], [0x010E, 0x010E], [0x0110, 0x0110], [0x0112, 0x0112], [0x0114, 0x0114], [0x0116, 0x0116], [0x0118, 0x0118], [0x011A, 0x011A], [0x011C, 0x011C], [0x011E, 0x011E], [0x0120, 0x0120], [0x0122, 0x0122], [0x0124, 0x0124], [0x0126, 0x0126], [0x0128, 0x0128], [0x012A, 0x012A], [0x012C, 0x012C], [0x012E, 0x012E], [0x0130, 0x0130], [0x0132, 0x0132], [0x0134, 0x0134], [0x0136, 0x0136], [0x0139, 0x0139], [0x013B, 0x013B], [0x013D, 0x013D], [0x013F, 0x013F], [0x0141, 0x0141], [0x0143, 0x0143], [0x0145, 0x0145], [0x0147, 0x0147], [0x014A, 0x014A], [0x014C, 0x014C], [0x014E, 0x014E], [0x0150, 0x0150], [0x0152, 0x0152], [0x0154, 0x0154], [0x0156, 0x0156], [0x0158, 0x0158], [0x015A, 0x015A], [0x015C, 0x015C], [0x015E, 0x015E], [0x0160, 0x0160], [0x0162, 0x0162], [0x0164, 0x0164], [0x0166, 0x0166], [0x0168, 0x0168], [0x016A, 0x016A], [0x016C, 0x016C], [0x016E, 0x016E], [0x0170, 0x0170], [0x0172, 0x0172], [0x0174, 0x0174], [0x0176, 0x0176], [0x0178, 0x0179], [0x017B, 0x017B], [0x017D, 0x017D], [0x0181, 0x0182], [0x0184, 0x0184], [0x0186, 0x0187], [0x0189, 0x018B], [0x018E, 0x0191], [0x0193, 0x0194], [0x0196, 0x0198], [0x019C, 0x019D], [0x019F, 0x01A0], [0x01A2, 0x01A2], [0x01A4, 0x01A4], [0x01A6, 0x01A7], [0x01A9, 0x01A9], [0x01AC, 0x01AC], [0x01AE, 0x01AF], [0x01B1, 0x01B3], [0x01B5, 0x01B5], [0x01B7, 0x01B8], [0x01BC, 0x01BC], [0x01C4, 0x01C4], [0x01C7, 0x01C7], [0x01CA, 0x01CA], [0x01CD, 0x01CD], [0x01CF, 0x01CF], [0x01D1, 0x01D1], [0x01D3, 0x01D3], [0x01D5, 0x01D5], [0x01D7, 0x01D7], [0x01D9, 0x01D9], [0x01DB, 0x01DB], [0x01DE, 0x01DE], [0x01E0, 0x01E0], [0x01E2, 0x01E2], [0x01E4, 0x01E4], [0x01E6, 0x01E6], [0x01E8, 0x01E8], [0x01EA, 0x01EA], [0x01EC, 0x01EC], [0x01EE, 0x01EE], [0x01F1, 0x01F1], [0x01F4, 0x01F4], [0x01F6, 0x01F8], [0x01FA, 0x01FA], [0x01FC, 0x01FC], [0x01FE, 0x01FE], [0x0200, 0x0200], [0x0202, 0x0202], [0x0204, 0x0204], [0x0206, 0x0206], [0x0208, 0x0208], [0x020A, 0x020A], [0x020C, 0x020C], [0x020E, 0x020E], [0x0210, 0x0210], [0x0212, 0x0212], [0x0214, 0x0214], [0x0216, 0x0216], [0x0218, 0x0218], [0x021A, 0x021A], [0x021C, 0x021C], [0x021E, 0x021E], [0x0220, 0x0220], [0x0222, 0x0222], [0x0224, 0x0224], [0x0226, 0x0226], [0x0228, 0x0228], [0x022A, 0x022A], [0x022C, 0x022C], [0x022E, 0x022E], [0x0230, 0x0230], [0x0232, 0x0232], [0x023A, 0x023B], [0x023D, 0x023E], [0x0241, 0x0241], [0x0386, 0x0386], [0x0388, 0x038A], [0x038C, 0x038C], [0x038E, 0x038F], [0x0391, 0x03A1], [0x03A3, 0x03AB], [0x03D2, 0x03D4], [0x03D8, 0x03D8], [0x03DA, 0x03DA], [0x03DC, 0x03DC], [0x03DE, 0x03DE], [0x03E0, 0x03E0], [0x03E2, 0x03E2], [0x03E4, 0x03E4], [0x03E6, 0x03E6], [0x03E8, 0x03E8], [0x03EA, 0x03EA], [0x03EC, 0x03EC], [0x03EE, 0x03EE], [0x03F4, 0x03F4], [0x03F7, 0x03F7], [0x03F9, 0x03FA], [0x03FD, 0x042F], [0x0460, 0x0460], [0x0462, 0x0462], [0x0464, 0x0464], [0x0466, 0x0466], [0x0468, 0x0468], [0x046A, 0x046A], [0x046C, 0x046C], [0x046E, 0x046E], [0x0470, 0x0470], [0x0472, 0x0472], [0x0474, 0x0474], [0x0476, 0x0476], [0x0478, 0x0478], [0x047A, 0x047A], [0x047C, 0x047C], [0x047E, 0x047E], [0x0480, 0x0480], [0x048A, 0x048A], [0x048C, 0x048C], [0x048E, 0x048E], [0x0490, 0x0490], [0x0492, 0x0492], [0x0494, 0x0494], [0x0496, 0x0496], [0x0498, 0x0498], [0x049A, 0x049A], [0x049C, 0x049C], [0x049E, 0x049E], [0x04A0, 0x04A0], [0x04A2, 0x04A2], [0x04A4, 0x04A4], [0x04A6, 0x04A6], [0x04A8, 0x04A8], [0x04AA, 0x04AA], [0x04AC, 0x04AC], [0x04AE, 0x04AE], [0x04B0, 0x04B0], [0x04B2, 0x04B2], [0x04B4, 0x04B4], [0x04B6, 0x04B6], [0x04B8, 0x04B8], [0x04BA, 0x04BA], [0x04BC, 0x04BC], [0x04BE, 0x04BE], [0x04C0, 0x04C1], [0x04C3, 0x04C3], [0x04C5, 0x04C5], [0x04C7, 0x04C7], [0x04C9, 0x04C9], [0x04CB, 0x04CB], [0x04CD, 0x04CD], [0x04D0, 0x04D0], [0x04D2, 0x04D2], [0x04D4, 0x04D4], [0x04D6, 0x04D6], [0x04D8, 0x04D8], [0x04DA, 0x04DA], [0x04DC, 0x04DC], [0x04DE, 0x04DE], [0x04E0, 0x04E0], [0x04E2, 0x04E2], [0x04E4, 0x04E4], [0x04E6, 0x04E6], [0x04E8, 0x04E8], [0x04EA, 0x04EA], [0x04EC, 0x04EC], [0x04EE, 0x04EE], [0x04F0, 0x04F0], [0x04F2, 0x04F2], [0x04F4, 0x04F4], [0x04F6, 0x04F6], [0x04F8, 0x04F8], [0x0500, 0x0500], [0x0502, 0x0502], [0x0504, 0x0504], [0x0506, 0x0506], [0x0508, 0x0508], [0x050A, 0x050A], [0x050C, 0x050C], [0x050E, 0x050E], [0x0531, 0x0556], [0x10A0, 0x10C5], [0x1E00, 0x1E00], [0x1E02, 0x1E02], [0x1E04, 0x1E04], [0x1E06, 0x1E06], [0x1E08, 0x1E08], [0x1E0A, 0x1E0A], [0x1E0C, 0x1E0C], [0x1E0E, 0x1E0E], [0x1E10, 0x1E10], [0x1E12, 0x1E12], [0x1E14, 0x1E14], [0x1E16, 0x1E16], [0x1E18, 0x1E18], [0x1E1A, 0x1E1A], [0x1E1C, 0x1E1C], [0x1E1E, 0x1E1E], [0x1E20, 0x1E20], [0x1E22, 0x1E22], [0x1E24, 0x1E24], [0x1E26, 0x1E26], [0x1E28, 0x1E28], [0x1E2A, 0x1E2A], [0x1E2C, 0x1E2C], [0x1E2E, 0x1E2E], [0x1E30, 0x1E30], [0x1E32, 0x1E32], [0x1E34, 0x1E34], [0x1E36, 0x1E36], [0x1E38, 0x1E38], [0x1E3A, 0x1E3A], [0x1E3C, 0x1E3C], [0x1E3E, 0x1E3E], [0x1E40, 0x1E40], [0x1E42, 0x1E42], [0x1E44, 0x1E44], [0x1E46, 0x1E46], [0x1E48, 0x1E48], [0x1E4A, 0x1E4A], [0x1E4C, 0x1E4C], [0x1E4E, 0x1E4E], [0x1E50, 0x1E50], [0x1E52, 0x1E52], [0x1E54, 0x1E54], [0x1E56, 0x1E56], [0x1E58, 0x1E58], [0x1E5A, 0x1E5A], [0x1E5C, 0x1E5C], [0x1E5E, 0x1E5E], [0x1E60, 0x1E60], [0x1E62, 0x1E62], [0x1E64, 0x1E64], [0x1E66, 0x1E66], [0x1E68, 0x1E68], [0x1E6A, 0x1E6A], [0x1E6C, 0x1E6C], [0x1E6E, 0x1E6E], [0x1E70, 0x1E70], [0x1E72, 0x1E72], [0x1E74, 0x1E74], [0x1E76, 0x1E76], [0x1E78, 0x1E78], [0x1E7A, 0x1E7A], [0x1E7C, 0x1E7C], [0x1E7E, 0x1E7E], [0x1E80, 0x1E80], [0x1E82, 0x1E82], [0x1E84, 0x1E84], [0x1E86, 0x1E86], [0x1E88, 0x1E88], [0x1E8A, 0x1E8A], [0x1E8C, 0x1E8C], [0x1E8E, 0x1E8E], [0x1E90, 0x1E90], [0x1E92, 0x1E92], [0x1E94, 0x1E94], [0x1EA0, 0x1EA0], [0x1EA2, 0x1EA2], [0x1EA4, 0x1EA4], [0x1EA6, 0x1EA6], [0x1EA8, 0x1EA8], [0x1EAA, 0x1EAA], [0x1EAC, 0x1EAC], [0x1EAE, 0x1EAE], [0x1EB0, 0x1EB0], [0x1EB2, 0x1EB2], [0x1EB4, 0x1EB4], [0x1EB6, 0x1EB6], [0x1EB8, 0x1EB8], [0x1EBA, 0x1EBA], [0x1EBC, 0x1EBC], [0x1EBE, 0x1EBE], [0x1EC0, 0x1EC0], [0x1EC2, 0x1EC2], [0x1EC4, 0x1EC4], [0x1EC6, 0x1EC6], [0x1EC8, 0x1EC8], [0x1ECA, 0x1ECA], [0x1ECC, 0x1ECC], [0x1ECE, 0x1ECE], [0x1ED0, 0x1ED0], [0x1ED2, 0x1ED2], [0x1ED4, 0x1ED4], [0x1ED6, 0x1ED6], [0x1ED8, 0x1ED8], [0x1EDA, 0x1EDA], [0x1EDC, 0x1EDC], [0x1EDE, 0x1EDE], [0x1EE0, 0x1EE0], [0x1EE2, 0x1EE2], [0x1EE4, 0x1EE4], [0x1EE6, 0x1EE6], [0x1EE8, 0x1EE8], [0x1EEA, 0x1EEA], [0x1EEC, 0x1EEC], [0x1EEE, 0x1EEE], [0x1EF0, 0x1EF0], [0x1EF2, 0x1EF2], [0x1EF4, 0x1EF4], [0x1EF6, 0x1EF6], [0x1EF8, 0x1EF8], [0x1F08, 0x1F0F], [0x1F18, 0x1F1D], [0x1F28, 0x1F2F], [0x1F38, 0x1F3F], [0x1F48, 0x1F4D], [0x1F59, 0x1F59], [0x1F5B, 0x1F5B], [0x1F5D, 0x1F5D], [0x1F5F, 0x1F5F], [0x1F68, 0x1F6F], [0x1FB8, 0x1FBB], [0x1FC8, 0x1FCB], [0x1FD8, 0x1FDB], [0x1FE8, 0x1FEC], [0x1FF8, 0x1FFB], [0x2102, 0x2102], [0x2107, 0x2107], [0x210B, 0x210D], [0x2110, 0x2112], [0x2115, 0x2115], [0x2119, 0x211D], [0x2124, 0x2124], [0x2126, 0x2126], [0x2128, 0x2128], [0x212A, 0x212D], [0x2130, 0x2131], [0x2133, 0x2133], [0x213E, 0x213F], [0x2145, 0x2145], [0x2C00, 0x2C2E], [0x2C80, 0x2C80], [0x2C82, 0x2C82], [0x2C84, 0x2C84], [0x2C86, 0x2C86], [0x2C88, 0x2C88], [0x2C8A, 0x2C8A], [0x2C8C, 0x2C8C], [0x2C8E, 0x2C8E], [0x2C90, 0x2C90], [0x2C92, 0x2C92], [0x2C94, 0x2C94], [0x2C96, 0x2C96], [0x2C98, 0x2C98], [0x2C9A, 0x2C9A], [0x2C9C, 0x2C9C], [0x2C9E, 0x2C9E], [0x2CA0, 0x2CA0], [0x2CA2, 0x2CA2], [0x2CA4, 0x2CA4], [0x2CA6, 0x2CA6], [0x2CA8, 0x2CA8], [0x2CAA, 0x2CAA], [0x2CAC, 0x2CAC], [0x2CAE, 0x2CAE], [0x2CB0, 0x2CB0], [0x2CB2, 0x2CB2], [0x2CB4, 0x2CB4], [0x2CB6, 0x2CB6], [0x2CB8, 0x2CB8], [0x2CBA, 0x2CBA], [0x2CBC, 0x2CBC], [0x2CBE, 0x2CBE], [0x2CC0, 0x2CC0], [0x2CC2, 0x2CC2], [0x2CC4, 0x2CC4], [0x2CC6, 0x2CC6], [0x2CC8, 0x2CC8], [0x2CCA, 0x2CCA], [0x2CCC, 0x2CCC], [0x2CCE, 0x2CCE], [0x2CD0, 0x2CD0], [0x2CD2, 0x2CD2], [0x2CD4, 0x2CD4], [0x2CD6, 0x2CD6], [0x2CD8, 0x2CD8], [0x2CDA, 0x2CDA], [0x2CDC, 0x2CDC], [0x2CDE, 0x2CDE], [0x2CE0, 0x2CE0], [0x2CE2, 0x2CE2], [0xFF21, 0xFF3A]]; -Ll = [[0x0061, 0x007A], [0x00AA, 0x00AA], [0x00B5, 0x00B5], [0x00BA, 0x00BA], [0x00DF, 0x00F6], [0x00F8, 0x00FF], [0x0101, 0x0101], [0x0103, 0x0103], [0x0105, 0x0105], [0x0107, 0x0107], [0x0109, 0x0109], [0x010B, 0x010B], [0x010D, 0x010D], [0x010F, 0x010F], [0x0111, 0x0111], [0x0113, 0x0113], [0x0115, 0x0115], [0x0117, 0x0117], [0x0119, 0x0119], [0x011B, 0x011B], [0x011D, 0x011D], [0x011F, 0x011F], [0x0121, 0x0121], [0x0123, 0x0123], [0x0125, 0x0125], [0x0127, 0x0127], [0x0129, 0x0129], [0x012B, 0x012B], [0x012D, 0x012D], [0x012F, 0x012F], [0x0131, 0x0131], [0x0133, 0x0133], [0x0135, 0x0135], [0x0137, 0x0138], [0x013A, 0x013A], [0x013C, 0x013C], [0x013E, 0x013E], [0x0140, 0x0140], [0x0142, 0x0142], [0x0144, 0x0144], [0x0146, 0x0146], [0x0148, 0x0149], [0x014B, 0x014B], [0x014D, 0x014D], [0x014F, 0x014F], [0x0151, 0x0151], [0x0153, 0x0153], [0x0155, 0x0155], [0x0157, 0x0157], [0x0159, 0x0159], [0x015B, 0x015B], [0x015D, 0x015D], [0x015F, 0x015F], [0x0161, 0x0161], [0x0163, 0x0163], [0x0165, 0x0165], [0x0167, 0x0167], [0x0169, 0x0169], [0x016B, 0x016B], [0x016D, 0x016D], [0x016F, 0x016F], [0x0171, 0x0171], [0x0173, 0x0173], [0x0175, 0x0175], [0x0177, 0x0177], [0x017A, 0x017A], [0x017C, 0x017C], [0x017E, 0x0180], [0x0183, 0x0183], [0x0185, 0x0185], [0x0188, 0x0188], [0x018C, 0x018D], [0x0192, 0x0192], [0x0195, 0x0195], [0x0199, 0x019B], [0x019E, 0x019E], [0x01A1, 0x01A1], [0x01A3, 0x01A3], [0x01A5, 0x01A5], [0x01A8, 0x01A8], [0x01AA, 0x01AB], [0x01AD, 0x01AD], [0x01B0, 0x01B0], [0x01B4, 0x01B4], [0x01B6, 0x01B6], [0x01B9, 0x01BA], [0x01BD, 0x01BF], [0x01C6, 0x01C6], [0x01C9, 0x01C9], [0x01CC, 0x01CC], [0x01CE, 0x01CE], [0x01D0, 0x01D0], [0x01D2, 0x01D2], [0x01D4, 0x01D4], [0x01D6, 0x01D6], [0x01D8, 0x01D8], [0x01DA, 0x01DA], [0x01DC, 0x01DD], [0x01DF, 0x01DF], [0x01E1, 0x01E1], [0x01E3, 0x01E3], [0x01E5, 0x01E5], [0x01E7, 0x01E7], [0x01E9, 0x01E9], [0x01EB, 0x01EB], [0x01ED, 0x01ED], [0x01EF, 0x01F0], [0x01F3, 0x01F3], [0x01F5, 0x01F5], [0x01F9, 0x01F9], [0x01FB, 0x01FB], [0x01FD, 0x01FD], [0x01FF, 0x01FF], [0x0201, 0x0201], [0x0203, 0x0203], [0x0205, 0x0205], [0x0207, 0x0207], [0x0209, 0x0209], [0x020B, 0x020B], [0x020D, 0x020D], [0x020F, 0x020F], [0x0211, 0x0211], [0x0213, 0x0213], [0x0215, 0x0215], [0x0217, 0x0217], [0x0219, 0x0219], [0x021B, 0x021B], [0x021D, 0x021D], [0x021F, 0x021F], [0x0221, 0x0221], [0x0223, 0x0223], [0x0225, 0x0225], [0x0227, 0x0227], [0x0229, 0x0229], [0x022B, 0x022B], [0x022D, 0x022D], [0x022F, 0x022F], [0x0231, 0x0231], [0x0233, 0x0239], [0x023C, 0x023C], [0x023F, 0x0240], [0x0250, 0x02AF], [0x0390, 0x0390], [0x03AC, 0x03CE], [0x03D0, 0x03D1], [0x03D5, 0x03D7], [0x03D9, 0x03D9], [0x03DB, 0x03DB], [0x03DD, 0x03DD], [0x03DF, 0x03DF], [0x03E1, 0x03E1], [0x03E3, 0x03E3], [0x03E5, 0x03E5], [0x03E7, 0x03E7], [0x03E9, 0x03E9], [0x03EB, 0x03EB], [0x03ED, 0x03ED], [0x03EF, 0x03F3], [0x03F5, 0x03F5], [0x03F8, 0x03F8], [0x03FB, 0x03FC], [0x0430, 0x045F], [0x0461, 0x0461], [0x0463, 0x0463], [0x0465, 0x0465], [0x0467, 0x0467], [0x0469, 0x0469], [0x046B, 0x046B], [0x046D, 0x046D], [0x046F, 0x046F], [0x0471, 0x0471], [0x0473, 0x0473], [0x0475, 0x0475], [0x0477, 0x0477], [0x0479, 0x0479], [0x047B, 0x047B], [0x047D, 0x047D], [0x047F, 0x047F], [0x0481, 0x0481], [0x048B, 0x048B], [0x048D, 0x048D], [0x048F, 0x048F], [0x0491, 0x0491], [0x0493, 0x0493], [0x0495, 0x0495], [0x0497, 0x0497], [0x0499, 0x0499], [0x049B, 0x049B], [0x049D, 0x049D], [0x049F, 0x049F], [0x04A1, 0x04A1], [0x04A3, 0x04A3], [0x04A5, 0x04A5], [0x04A7, 0x04A7], [0x04A9, 0x04A9], [0x04AB, 0x04AB], [0x04AD, 0x04AD], [0x04AF, 0x04AF], [0x04B1, 0x04B1], [0x04B3, 0x04B3], [0x04B5, 0x04B5], [0x04B7, 0x04B7], [0x04B9, 0x04B9], [0x04BB, 0x04BB], [0x04BD, 0x04BD], [0x04BF, 0x04BF], [0x04C2, 0x04C2], [0x04C4, 0x04C4], [0x04C6, 0x04C6], [0x04C8, 0x04C8], [0x04CA, 0x04CA], [0x04CC, 0x04CC], [0x04CE, 0x04CE], [0x04D1, 0x04D1], [0x04D3, 0x04D3], [0x04D5, 0x04D5], [0x04D7, 0x04D7], [0x04D9, 0x04D9], [0x04DB, 0x04DB], [0x04DD, 0x04DD], [0x04DF, 0x04DF], [0x04E1, 0x04E1], [0x04E3, 0x04E3], [0x04E5, 0x04E5], [0x04E7, 0x04E7], [0x04E9, 0x04E9], [0x04EB, 0x04EB], [0x04ED, 0x04ED], [0x04EF, 0x04EF], [0x04F1, 0x04F1], [0x04F3, 0x04F3], [0x04F5, 0x04F5], [0x04F7, 0x04F7], [0x04F9, 0x04F9], [0x0501, 0x0501], [0x0503, 0x0503], [0x0505, 0x0505], [0x0507, 0x0507], [0x0509, 0x0509], [0x050B, 0x050B], [0x050D, 0x050D], [0x050F, 0x050F], [0x0561, 0x0587], [0x1D00, 0x1D2B], [0x1D62, 0x1D77], [0x1D79, 0x1D9A], [0x1E01, 0x1E01], [0x1E03, 0x1E03], [0x1E05, 0x1E05], [0x1E07, 0x1E07], [0x1E09, 0x1E09], [0x1E0B, 0x1E0B], [0x1E0D, 0x1E0D], [0x1E0F, 0x1E0F], [0x1E11, 0x1E11], [0x1E13, 0x1E13], [0x1E15, 0x1E15], [0x1E17, 0x1E17], [0x1E19, 0x1E19], [0x1E1B, 0x1E1B], [0x1E1D, 0x1E1D], [0x1E1F, 0x1E1F], [0x1E21, 0x1E21], [0x1E23, 0x1E23], [0x1E25, 0x1E25], [0x1E27, 0x1E27], [0x1E29, 0x1E29], [0x1E2B, 0x1E2B], [0x1E2D, 0x1E2D], [0x1E2F, 0x1E2F], [0x1E31, 0x1E31], [0x1E33, 0x1E33], [0x1E35, 0x1E35], [0x1E37, 0x1E37], [0x1E39, 0x1E39], [0x1E3B, 0x1E3B], [0x1E3D, 0x1E3D], [0x1E3F, 0x1E3F], [0x1E41, 0x1E41], [0x1E43, 0x1E43], [0x1E45, 0x1E45], [0x1E47, 0x1E47], [0x1E49, 0x1E49], [0x1E4B, 0x1E4B], [0x1E4D, 0x1E4D], [0x1E4F, 0x1E4F], [0x1E51, 0x1E51], [0x1E53, 0x1E53], [0x1E55, 0x1E55], [0x1E57, 0x1E57], [0x1E59, 0x1E59], [0x1E5B, 0x1E5B], [0x1E5D, 0x1E5D], [0x1E5F, 0x1E5F], [0x1E61, 0x1E61], [0x1E63, 0x1E63], [0x1E65, 0x1E65], [0x1E67, 0x1E67], [0x1E69, 0x1E69], [0x1E6B, 0x1E6B], [0x1E6D, 0x1E6D], [0x1E6F, 0x1E6F], [0x1E71, 0x1E71], [0x1E73, 0x1E73], [0x1E75, 0x1E75], [0x1E77, 0x1E77], [0x1E79, 0x1E79], [0x1E7B, 0x1E7B], [0x1E7D, 0x1E7D], [0x1E7F, 0x1E7F], [0x1E81, 0x1E81], [0x1E83, 0x1E83], [0x1E85, 0x1E85], [0x1E87, 0x1E87], [0x1E89, 0x1E89], [0x1E8B, 0x1E8B], [0x1E8D, 0x1E8D], [0x1E8F, 0x1E8F], [0x1E91, 0x1E91], [0x1E93, 0x1E93], [0x1E95, 0x1E9B], [0x1EA1, 0x1EA1], [0x1EA3, 0x1EA3], [0x1EA5, 0x1EA5], [0x1EA7, 0x1EA7], [0x1EA9, 0x1EA9], [0x1EAB, 0x1EAB], [0x1EAD, 0x1EAD], [0x1EAF, 0x1EAF], [0x1EB1, 0x1EB1], [0x1EB3, 0x1EB3], [0x1EB5, 0x1EB5], [0x1EB7, 0x1EB7], [0x1EB9, 0x1EB9], [0x1EBB, 0x1EBB], [0x1EBD, 0x1EBD], [0x1EBF, 0x1EBF], [0x1EC1, 0x1EC1], [0x1EC3, 0x1EC3], [0x1EC5, 0x1EC5], [0x1EC7, 0x1EC7], [0x1EC9, 0x1EC9], [0x1ECB, 0x1ECB], [0x1ECD, 0x1ECD], [0x1ECF, 0x1ECF], [0x1ED1, 0x1ED1], [0x1ED3, 0x1ED3], [0x1ED5, 0x1ED5], [0x1ED7, 0x1ED7], [0x1ED9, 0x1ED9], [0x1EDB, 0x1EDB], [0x1EDD, 0x1EDD], [0x1EDF, 0x1EDF], [0x1EE1, 0x1EE1], [0x1EE3, 0x1EE3], [0x1EE5, 0x1EE5], [0x1EE7, 0x1EE7], [0x1EE9, 0x1EE9], [0x1EEB, 0x1EEB], [0x1EED, 0x1EED], [0x1EEF, 0x1EEF], [0x1EF1, 0x1EF1], [0x1EF3, 0x1EF3], [0x1EF5, 0x1EF5], [0x1EF7, 0x1EF7], [0x1EF9, 0x1EF9], [0x1F00, 0x1F07], [0x1F10, 0x1F15], [0x1F20, 0x1F27], [0x1F30, 0x1F37], [0x1F40, 0x1F45], [0x1F50, 0x1F57], [0x1F60, 0x1F67], [0x1F70, 0x1F7D], [0x1F80, 0x1F87], [0x1F90, 0x1F97], [0x1FA0, 0x1FA7], [0x1FB0, 0x1FB4], [0x1FB6, 0x1FB7], [0x1FBE, 0x1FBE], [0x1FC2, 0x1FC4], [0x1FC6, 0x1FC7], [0x1FD0, 0x1FD3], [0x1FD6, 0x1FD7], [0x1FE0, 0x1FE7], [0x1FF2, 0x1FF4], [0x1FF6, 0x1FF7], [0x2071, 0x2071], [0x207F, 0x207F], [0x210A, 0x210A], [0x210E, 0x210F], [0x2113, 0x2113], [0x212F, 0x212F], [0x2134, 0x2134], [0x2139, 0x2139], [0x213C, 0x213D], [0x2146, 0x2149], [0x2C30, 0x2C5E], [0x2C81, 0x2C81], [0x2C83, 0x2C83], [0x2C85, 0x2C85], [0x2C87, 0x2C87], [0x2C89, 0x2C89], [0x2C8B, 0x2C8B], [0x2C8D, 0x2C8D], [0x2C8F, 0x2C8F], [0x2C91, 0x2C91], [0x2C93, 0x2C93], [0x2C95, 0x2C95], [0x2C97, 0x2C97], [0x2C99, 0x2C99], [0x2C9B, 0x2C9B], [0x2C9D, 0x2C9D], [0x2C9F, 0x2C9F], [0x2CA1, 0x2CA1], [0x2CA3, 0x2CA3], [0x2CA5, 0x2CA5], [0x2CA7, 0x2CA7], [0x2CA9, 0x2CA9], [0x2CAB, 0x2CAB], [0x2CAD, 0x2CAD], [0x2CAF, 0x2CAF], [0x2CB1, 0x2CB1], [0x2CB3, 0x2CB3], [0x2CB5, 0x2CB5], [0x2CB7, 0x2CB7], [0x2CB9, 0x2CB9], [0x2CBB, 0x2CBB], [0x2CBD, 0x2CBD], [0x2CBF, 0x2CBF], [0x2CC1, 0x2CC1], [0x2CC3, 0x2CC3], [0x2CC5, 0x2CC5], [0x2CC7, 0x2CC7], [0x2CC9, 0x2CC9], [0x2CCB, 0x2CCB], [0x2CCD, 0x2CCD], [0x2CCF, 0x2CCF], [0x2CD1, 0x2CD1], [0x2CD3, 0x2CD3], [0x2CD5, 0x2CD5], [0x2CD7, 0x2CD7], [0x2CD9, 0x2CD9], [0x2CDB, 0x2CDB], [0x2CDD, 0x2CDD], [0x2CDF, 0x2CDF], [0x2CE1, 0x2CE1], [0x2CE3, 0x2CE4], [0x2D00, 0x2D25], [0xFB00, 0xFB06], [0xFB13, 0xFB17], [0xFF41, 0xFF5A]]; -Lt = [[0x01C5, 0x01C5], [0x01C8, 0x01C8], [0x01CB, 0x01CB], [0x01F2, 0x01F2], [0x1F88, 0x1F8F], [0x1F98, 0x1F9F], [0x1FA8, 0x1FAF], [0x1FBC, 0x1FBC], [0x1FCC, 0x1FCC], [0x1FFC, 0x1FFC]]; -Lm = [[0x02B0, 0x02C1], [0x02C6, 0x02D1], [0x02E0, 0x02E4], [0x02EE, 0x02EE], [0x037A, 0x037A], [0x0559, 0x0559], [0x0640, 0x0640], [0x06E5, 0x06E6], [0x0E46, 0x0E46], [0x0EC6, 0x0EC6], [0x10FC, 0x10FC], [0x17D7, 0x17D7], [0x1843, 0x1843], [0x1D2C, 0x1D61], [0x1D78, 0x1D78], [0x1D9B, 0x1DBF], [0x2090, 0x2094], [0x2D6F, 0x2D6F], [0x3005, 0x3005], [0x3031, 0x3035], [0x303B, 0x303B], [0x309D, 0x309E], [0x30FC, 0x30FE], [0xA015, 0xA015], [0xFF70, 0xFF70], [0xFF9E, 0xFF9F]]; -Lo = [[0x01BB, 0x01BB], [0x01C0, 0x01C3], [0x05D0, 0x05EA], [0x05F0, 0x05F2], [0x0621, 0x063A], [0x0641, 0x064A], [0x066E, 0x066F], [0x0671, 0x06D3], [0x06D5, 0x06D5], [0x06EE, 0x06EF], [0x06FA, 0x06FC], [0x06FF, 0x06FF], [0x0710, 0x0710], [0x0712, 0x072F], [0x074D, 0x076D], [0x0780, 0x07A5], [0x07B1, 0x07B1], [0x0904, 0x0939], [0x093D, 0x093D], [0x0950, 0x0950], [0x0958, 0x0961], [0x097D, 0x097D], [0x0985, 0x098C], [0x098F, 0x0990], [0x0993, 0x09A8], [0x09AA, 0x09B0], [0x09B2, 0x09B2], [0x09B6, 0x09B9], [0x09BD, 0x09BD], [0x09CE, 0x09CE], [0x09DC, 0x09DD], [0x09DF, 0x09E1], [0x09F0, 0x09F1], [0x0A05, 0x0A0A], [0x0A0F, 0x0A10], [0x0A13, 0x0A28], [0x0A2A, 0x0A30], [0x0A32, 0x0A33], [0x0A35, 0x0A36], [0x0A38, 0x0A39], [0x0A59, 0x0A5C], [0x0A5E, 0x0A5E], [0x0A72, 0x0A74], [0x0A85, 0x0A8D], [0x0A8F, 0x0A91], [0x0A93, 0x0AA8], [0x0AAA, 0x0AB0], [0x0AB2, 0x0AB3], [0x0AB5, 0x0AB9], [0x0ABD, 0x0ABD], [0x0AD0, 0x0AD0], [0x0AE0, 0x0AE1], [0x0B05, 0x0B0C], [0x0B0F, 0x0B10], [0x0B13, 0x0B28], [0x0B2A, 0x0B30], [0x0B32, 0x0B33], [0x0B35, 0x0B39], [0x0B3D, 0x0B3D], [0x0B5C, 0x0B5D], [0x0B5F, 0x0B61], [0x0B71, 0x0B71], [0x0B83, 0x0B83], [0x0B85, 0x0B8A], [0x0B8E, 0x0B90], [0x0B92, 0x0B95], [0x0B99, 0x0B9A], [0x0B9C, 0x0B9C], [0x0B9E, 0x0B9F], [0x0BA3, 0x0BA4], [0x0BA8, 0x0BAA], [0x0BAE, 0x0BB9], [0x0C05, 0x0C0C], [0x0C0E, 0x0C10], [0x0C12, 0x0C28], [0x0C2A, 0x0C33], [0x0C35, 0x0C39], [0x0C60, 0x0C61], [0x0C85, 0x0C8C], [0x0C8E, 0x0C90], [0x0C92, 0x0CA8], [0x0CAA, 0x0CB3], [0x0CB5, 0x0CB9], [0x0CBD, 0x0CBD], [0x0CDE, 0x0CDE], [0x0CE0, 0x0CE1], [0x0D05, 0x0D0C], [0x0D0E, 0x0D10], [0x0D12, 0x0D28], [0x0D2A, 0x0D39], [0x0D60, 0x0D61], [0x0D85, 0x0D96], [0x0D9A, 0x0DB1], [0x0DB3, 0x0DBB], [0x0DBD, 0x0DBD], [0x0DC0, 0x0DC6], [0x0E01, 0x0E30], [0x0E32, 0x0E33], [0x0E40, 0x0E45], [0x0E81, 0x0E82], [0x0E84, 0x0E84], [0x0E87, 0x0E88], [0x0E8A, 0x0E8A], [0x0E8D, 0x0E8D], [0x0E94, 0x0E97], [0x0E99, 0x0E9F], [0x0EA1, 0x0EA3], [0x0EA5, 0x0EA5], [0x0EA7, 0x0EA7], [0x0EAA, 0x0EAB], [0x0EAD, 0x0EB0], [0x0EB2, 0x0EB3], [0x0EBD, 0x0EBD], [0x0EC0, 0x0EC4], [0x0EDC, 0x0EDD], [0x0F00, 0x0F00], [0x0F40, 0x0F47], [0x0F49, 0x0F6A], [0x0F88, 0x0F8B], [0x1000, 0x1021], [0x1023, 0x1027], [0x1029, 0x102A], [0x1050, 0x1055], [0x10D0, 0x10FA], [0x1100, 0x1159], [0x115F, 0x11A2], [0x11A8, 0x11F9], [0x1200, 0x1248], [0x124A, 0x124D], [0x1250, 0x1256], [0x1258, 0x1258], [0x125A, 0x125D], [0x1260, 0x1288], [0x128A, 0x128D], [0x1290, 0x12B0], [0x12B2, 0x12B5], [0x12B8, 0x12BE], [0x12C0, 0x12C0], [0x12C2, 0x12C5], [0x12C8, 0x12D6], [0x12D8, 0x1310], [0x1312, 0x1315], [0x1318, 0x135A], [0x1380, 0x138F], [0x13A0, 0x13F4], [0x1401, 0x166C], [0x166F, 0x1676], [0x1681, 0x169A], [0x16A0, 0x16EA], [0x1700, 0x170C], [0x170E, 0x1711], [0x1720, 0x1731], [0x1740, 0x1751], [0x1760, 0x176C], [0x176E, 0x1770], [0x1780, 0x17B3], [0x17DC, 0x17DC], [0x1820, 0x1842], [0x1844, 0x1877], [0x1880, 0x18A8], [0x1900, 0x191C], [0x1950, 0x196D], [0x1970, 0x1974], [0x1980, 0x19A9], [0x19C1, 0x19C7], [0x1A00, 0x1A16], [0x2135, 0x2138], [0x2D30, 0x2D65], [0x2D80, 0x2D96], [0x2DA0, 0x2DA6], [0x2DA8, 0x2DAE], [0x2DB0, 0x2DB6], [0x2DB8, 0x2DBE], [0x2DC0, 0x2DC6], [0x2DC8, 0x2DCE], [0x2DD0, 0x2DD6], [0x2DD8, 0x2DDE], [0x3006, 0x3006], [0x303C, 0x303C], [0x3041, 0x3096], [0x309F, 0x309F], [0x30A1, 0x30FA], [0x30FF, 0x30FF], [0x3105, 0x312C], [0x3131, 0x318E], [0x31A0, 0x31B7], [0x31F0, 0x31FF], [0x3400, 0x4DB5], [0x4E00, 0x9FBB], [0xA000, 0xA014], [0xA016, 0xA48C], [0xA800, 0xA801], [0xA803, 0xA805], [0xA807, 0xA80A], [0xA80C, 0xA822], [0xAC00, 0xD7A3], [0xF900, 0xFA2D], [0xFA30, 0xFA6A], [0xFA70, 0xFAD9], [0xFB1D, 0xFB1D], [0xFB1F, 0xFB28], [0xFB2A, 0xFB36], [0xFB38, 0xFB3C], [0xFB3E, 0xFB3E], [0xFB40, 0xFB41], [0xFB43, 0xFB44], [0xFB46, 0xFBB1], [0xFBD3, 0xFD3D], [0xFD50, 0xFD8F], [0xFD92, 0xFDC7], [0xFDF0, 0xFDFB], [0xFE70, 0xFE74], [0xFE76, 0xFEFC], [0xFF66, 0xFF6F], [0xFF71, 0xFF9D], [0xFFA0, 0xFFBE], [0xFFC2, 0xFFC7], [0xFFCA, 0xFFCF], [0xFFD2, 0xFFD7], [0xFFDA, 0xFFDC]]; -Nl = [[0x16EE, 0x16F0], [0x2160, 0x2183], [0x3007, 0x3007], [0x3021, 0x3029], [0x3038, 0x303A]]; -Mn = [[0x0300, 0x036F], [0x0483, 0x0486], [0x0591, 0x05B9], [0x05BB, 0x05BD], [0x05BF, 0x05BF], [0x05C1, 0x05C2], [0x05C4, 0x05C5], [0x05C7, 0x05C7], [0x0610, 0x0615], [0x064B, 0x065E], [0x0670, 0x0670], [0x06D6, 0x06DC], [0x06DF, 0x06E4], [0x06E7, 0x06E8], [0x06EA, 0x06ED], [0x0711, 0x0711], [0x0730, 0x074A], [0x07A6, 0x07B0], [0x0901, 0x0902], [0x093C, 0x093C], [0x0941, 0x0948], [0x094D, 0x094D], [0x0951, 0x0954], [0x0962, 0x0963], [0x0981, 0x0981], [0x09BC, 0x09BC], [0x09C1, 0x09C4], [0x09CD, 0x09CD], [0x09E2, 0x09E3], [0x0A01, 0x0A02], [0x0A3C, 0x0A3C], [0x0A41, 0x0A42], [0x0A47, 0x0A48], [0x0A4B, 0x0A4D], [0x0A70, 0x0A71], [0x0A81, 0x0A82], [0x0ABC, 0x0ABC], [0x0AC1, 0x0AC5], [0x0AC7, 0x0AC8], [0x0ACD, 0x0ACD], [0x0AE2, 0x0AE3], [0x0B01, 0x0B01], [0x0B3C, 0x0B3C], [0x0B3F, 0x0B3F], [0x0B41, 0x0B43], [0x0B4D, 0x0B4D], [0x0B56, 0x0B56], [0x0B82, 0x0B82], [0x0BC0, 0x0BC0], [0x0BCD, 0x0BCD], [0x0C3E, 0x0C40], [0x0C46, 0x0C48], [0x0C4A, 0x0C4D], [0x0C55, 0x0C56], [0x0CBC, 0x0CBC], [0x0CBF, 0x0CBF], [0x0CC6, 0x0CC6], [0x0CCC, 0x0CCD], [0x0D41, 0x0D43], [0x0D4D, 0x0D4D], [0x0DCA, 0x0DCA], [0x0DD2, 0x0DD4], [0x0DD6, 0x0DD6], [0x0E31, 0x0E31], [0x0E34, 0x0E3A], [0x0E47, 0x0E4E], [0x0EB1, 0x0EB1], [0x0EB4, 0x0EB9], [0x0EBB, 0x0EBC], [0x0EC8, 0x0ECD], [0x0F18, 0x0F19], [0x0F35, 0x0F35], [0x0F37, 0x0F37], [0x0F39, 0x0F39], [0x0F71, 0x0F7E], [0x0F80, 0x0F84], [0x0F86, 0x0F87], [0x0F90, 0x0F97], [0x0F99, 0x0FBC], [0x0FC6, 0x0FC6], [0x102D, 0x1030], [0x1032, 0x1032], [0x1036, 0x1037], [0x1039, 0x1039], [0x1058, 0x1059], [0x135F, 0x135F], [0x1712, 0x1714], [0x1732, 0x1734], [0x1752, 0x1753], [0x1772, 0x1773], [0x17B7, 0x17BD], [0x17C6, 0x17C6], [0x17C9, 0x17D3], [0x17DD, 0x17DD], [0x180B, 0x180D], [0x18A9, 0x18A9], [0x1920, 0x1922], [0x1927, 0x1928], [0x1932, 0x1932], [0x1939, 0x193B], [0x1A17, 0x1A18], [0x1DC0, 0x1DC3], [0x20D0, 0x20DC], [0x20E1, 0x20E1], [0x20E5, 0x20EB], [0x302A, 0x302F], [0x3099, 0x309A], [0xA806, 0xA806], [0xA80B, 0xA80B], [0xA825, 0xA826], [0xFB1E, 0xFB1E], [0xFE00, 0xFE0F], [0xFE20, 0xFE23]]; -Mc = [[0x0903, 0x0903], [0x093E, 0x0940], [0x0949, 0x094C], [0x0982, 0x0983], [0x09BE, 0x09C0], [0x09C7, 0x09C8], [0x09CB, 0x09CC], [0x09D7, 0x09D7], [0x0A03, 0x0A03], [0x0A3E, 0x0A40], [0x0A83, 0x0A83], [0x0ABE, 0x0AC0], [0x0AC9, 0x0AC9], [0x0ACB, 0x0ACC], [0x0B02, 0x0B03], [0x0B3E, 0x0B3E], [0x0B40, 0x0B40], [0x0B47, 0x0B48], [0x0B4B, 0x0B4C], [0x0B57, 0x0B57], [0x0BBE, 0x0BBF], [0x0BC1, 0x0BC2], [0x0BC6, 0x0BC8], [0x0BCA, 0x0BCC], [0x0BD7, 0x0BD7], [0x0C01, 0x0C03], [0x0C41, 0x0C44], [0x0C82, 0x0C83], [0x0CBE, 0x0CBE], [0x0CC0, 0x0CC4], [0x0CC7, 0x0CC8], [0x0CCA, 0x0CCB], [0x0CD5, 0x0CD6], [0x0D02, 0x0D03], [0x0D3E, 0x0D40], [0x0D46, 0x0D48], [0x0D4A, 0x0D4C], [0x0D57, 0x0D57], [0x0D82, 0x0D83], [0x0DCF, 0x0DD1], [0x0DD8, 0x0DDF], [0x0DF2, 0x0DF3], [0x0F3E, 0x0F3F], [0x0F7F, 0x0F7F], [0x102C, 0x102C], [0x1031, 0x1031], [0x1038, 0x1038], [0x1056, 0x1057], [0x17B6, 0x17B6], [0x17BE, 0x17C5], [0x17C7, 0x17C8], [0x1923, 0x1926], [0x1929, 0x192B], [0x1930, 0x1931], [0x1933, 0x1938], [0x19B0, 0x19C0], [0x19C8, 0x19C9], [0x1A19, 0x1A1B], [0xA802, 0xA802], [0xA823, 0xA824], [0xA827, 0xA827]]; -Nd = [[0x0030, 0x0039], [0x0660, 0x0669], [0x06F0, 0x06F9], [0x0966, 0x096F], [0x09E6, 0x09EF], [0x0A66, 0x0A6F], [0x0AE6, 0x0AEF], [0x0B66, 0x0B6F], [0x0BE6, 0x0BEF], [0x0C66, 0x0C6F], [0x0CE6, 0x0CEF], [0x0D66, 0x0D6F], [0x0E50, 0x0E59], [0x0ED0, 0x0ED9], [0x0F20, 0x0F29], [0x1040, 0x1049], [0x17E0, 0x17E9], [0x1810, 0x1819], [0x1946, 0x194F], [0x19D0, 0x19D9], [0xFF10, 0xFF19]]; -Pc = [[0x005F, 0x005F], [0x203F, 0x2040], [0x2054, 0x2054], [0xFE33, 0xFE34], [0xFE4D, 0xFE4F], [0xFF3F, 0xFF3F]]; - -UnicodeLetterLu = []; -UnicodeLetterLl = []; -UnicodeLetterLt = []; -UnicodeLetterLm = []; -UnicodeLetterLo = []; -UnicodeLetterNl = []; -UnicodeLetterMn = []; -UnicodeLetterMc = []; -UnicodeLetterNd = []; -UnicodeLetterPc = []; - -for (indexI = 0; indexI < Lu.length; indexI++) { - for (indexJ = Lu[indexI][0]; indexJ <= Lu[indexI][1]; indexJ++) { - UnicodeLetterLu[indexJ] = true; - } -} -for (indexI = 0; indexI < Ll.length; indexI++) { - for (indexJ = Ll[indexI][0]; indexJ <= Ll[indexI][1]; indexJ++) { - UnicodeLetterLl[indexJ] = true; - } -} -for (indexI = 0; indexI < Lt.length; indexI++) { - for (indexJ = Lt[indexI][0]; indexJ <= Lt[indexI][1]; indexJ++) { - UnicodeLetterLt[indexJ] = true; - } -} -for (indexI = 0; indexI < Lm.length; indexI++) { - for (indexJ = Lm[indexI][0]; indexJ <= Lm[indexI][1]; indexJ++) { - UnicodeLetterLm[indexJ] = true; - } -} -for (indexI = 0; indexI < Lo.length; indexI++) { - for (indexJ = Lo[indexI][0]; indexJ <= Lo[indexI][1]; indexJ++) { - UnicodeLetterLo[indexJ] = true; - } -} -for (indexI = 0; indexI < Nl.length; indexI++) { - for (indexJ = Nl[indexI][0]; indexJ <= Nl[indexI][1]; indexJ++) { - UnicodeLetterNl[indexJ] = true; - } -} -for (indexI = 0; indexI < Mn.length; indexI++) { - for (indexJ = Mn[indexI][0]; indexJ <= Mn[indexI][1]; indexJ++) { - UnicodeLetterMn[indexJ] = true; - } -} -for (indexI = 0; indexI < Mc.length; indexI++) { - for (indexJ = Mc[indexI][0]; indexJ <= Mc[indexI][1]; indexJ++) { - UnicodeLetterMc[indexJ] = true; - } -} -for (indexI = 0; indexI < Nd.length; indexI++) { - for (indexJ = Nd[indexI][0]; indexJ <= Nd[indexI][1]; indexJ++) { - UnicodeLetterNd[indexJ] = true; - } -} -for (indexI = 0; indexI < Pc.length; indexI++) { - for (indexJ = Pc[indexI][0]; indexJ <= Pc[indexI][1]; indexJ++) { - UnicodeLetterPc[indexJ] = true; - } -} - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; -for (index = 0; index <= 65535; index++) { - if ((UnicodeLetterLu[index] === undefined) && (UnicodeLetterLl[index] === undefined) && (UnicodeLetterLt[index] === undefined) && (UnicodeLetterLm[index] === undefined) && (UnicodeLetterLo[index] === undefined) && (UnicodeLetterNl[index] === undefined) && (UnicodeLetterMn[index] === undefined) && (UnicodeLetterMc[index] === undefined) && (UnicodeLetterNd[index] === undefined) && (UnicodeLetterPc[index] === undefined) && (index !== 0x0024) && (index !== 0x005F)) { - try { - var identifier = "$" + String.fromCharCode(index) + "1"; - eval("var " + identifier + "=1"); - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; - } catch (e) { - } - count++; - } -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_410/S7.6_A3.2.js b/tests/ES3/Unicode/Unicode_410/S7.6_A3.2.js deleted file mode 100644 index 0bb17e512..000000000 --- a/tests/ES3/Unicode/Unicode_410/S7.6_A3.2.js +++ /dev/null @@ -1,124 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A3.2; - * @section: 7.6; - * @assertion: IdentifierName must begin only IdentifierStart character; - * @description: Complex test with eval; -*/ - -//CHECK -Lu = [[0x0041, 0x005A], [0x00C0, 0x00D6], [0x00D8, 0x00DE], [0x0100, 0x0100], [0x0102, 0x0102], [0x0104, 0x0104], [0x0106, 0x0106], [0x0108, 0x0108], [0x010A, 0x010A], [0x010C, 0x010C], [0x010E, 0x010E], [0x0110, 0x0110], [0x0112, 0x0112], [0x0114, 0x0114], [0x0116, 0x0116], [0x0118, 0x0118], [0x011A, 0x011A], [0x011C, 0x011C], [0x011E, 0x011E], [0x0120, 0x0120], [0x0122, 0x0122], [0x0124, 0x0124], [0x0126, 0x0126], [0x0128, 0x0128], [0x012A, 0x012A], [0x012C, 0x012C], [0x012E, 0x012E], [0x0130, 0x0130], [0x0132, 0x0132], [0x0134, 0x0134], [0x0136, 0x0136], [0x0139, 0x0139], [0x013B, 0x013B], [0x013D, 0x013D], [0x013F, 0x013F], [0x0141, 0x0141], [0x0143, 0x0143], [0x0145, 0x0145], [0x0147, 0x0147], [0x014A, 0x014A], [0x014C, 0x014C], [0x014E, 0x014E], [0x0150, 0x0150], [0x0152, 0x0152], [0x0154, 0x0154], [0x0156, 0x0156], [0x0158, 0x0158], [0x015A, 0x015A], [0x015C, 0x015C], [0x015E, 0x015E], [0x0160, 0x0160], [0x0162, 0x0162], [0x0164, 0x0164], [0x0166, 0x0166], [0x0168, 0x0168], [0x016A, 0x016A], [0x016C, 0x016C], [0x016E, 0x016E], [0x0170, 0x0170], [0x0172, 0x0172], [0x0174, 0x0174], [0x0176, 0x0176], [0x0178, 0x0179], [0x017B, 0x017B], [0x017D, 0x017D], [0x0181, 0x0182], [0x0184, 0x0184], [0x0186, 0x0187], [0x0189, 0x018B], [0x018E, 0x0191], [0x0193, 0x0194], [0x0196, 0x0198], [0x019C, 0x019D], [0x019F, 0x01A0], [0x01A2, 0x01A2], [0x01A4, 0x01A4], [0x01A6, 0x01A7], [0x01A9, 0x01A9], [0x01AC, 0x01AC], [0x01AE, 0x01AF], [0x01B1, 0x01B3], [0x01B5, 0x01B5], [0x01B7, 0x01B8], [0x01BC, 0x01BC], [0x01C4, 0x01C4], [0x01C7, 0x01C7], [0x01CA, 0x01CA], [0x01CD, 0x01CD], [0x01CF, 0x01CF], [0x01D1, 0x01D1], [0x01D3, 0x01D3], [0x01D5, 0x01D5], [0x01D7, 0x01D7], [0x01D9, 0x01D9], [0x01DB, 0x01DB], [0x01DE, 0x01DE], [0x01E0, 0x01E0], [0x01E2, 0x01E2], [0x01E4, 0x01E4], [0x01E6, 0x01E6], [0x01E8, 0x01E8], [0x01EA, 0x01EA], [0x01EC, 0x01EC], [0x01EE, 0x01EE], [0x01F1, 0x01F1], [0x01F4, 0x01F4], [0x01F6, 0x01F8], [0x01FA, 0x01FA], [0x01FC, 0x01FC], [0x01FE, 0x01FE], [0x0200, 0x0200], [0x0202, 0x0202], [0x0204, 0x0204], [0x0206, 0x0206], [0x0208, 0x0208], [0x020A, 0x020A], [0x020C, 0x020C], [0x020E, 0x020E], [0x0210, 0x0210], [0x0212, 0x0212], [0x0214, 0x0214], [0x0216, 0x0216], [0x0218, 0x0218], [0x021A, 0x021A], [0x021C, 0x021C], [0x021E, 0x021E], [0x0220, 0x0220], [0x0222, 0x0222], [0x0224, 0x0224], [0x0226, 0x0226], [0x0228, 0x0228], [0x022A, 0x022A], [0x022C, 0x022C], [0x022E, 0x022E], [0x0230, 0x0230], [0x0232, 0x0232], [0x023A, 0x023B], [0x023D, 0x023E], [0x0241, 0x0241], [0x0386, 0x0386], [0x0388, 0x038A], [0x038C, 0x038C], [0x038E, 0x038F], [0x0391, 0x03A1], [0x03A3, 0x03AB], [0x03D2, 0x03D4], [0x03D8, 0x03D8], [0x03DA, 0x03DA], [0x03DC, 0x03DC], [0x03DE, 0x03DE], [0x03E0, 0x03E0], [0x03E2, 0x03E2], [0x03E4, 0x03E4], [0x03E6, 0x03E6], [0x03E8, 0x03E8], [0x03EA, 0x03EA], [0x03EC, 0x03EC], [0x03EE, 0x03EE], [0x03F4, 0x03F4], [0x03F7, 0x03F7], [0x03F9, 0x03FA], [0x03FD, 0x042F], [0x0460, 0x0460], [0x0462, 0x0462], [0x0464, 0x0464], [0x0466, 0x0466], [0x0468, 0x0468], [0x046A, 0x046A], [0x046C, 0x046C], [0x046E, 0x046E], [0x0470, 0x0470], [0x0472, 0x0472], [0x0474, 0x0474], [0x0476, 0x0476], [0x0478, 0x0478], [0x047A, 0x047A], [0x047C, 0x047C], [0x047E, 0x047E], [0x0480, 0x0480], [0x048A, 0x048A], [0x048C, 0x048C], [0x048E, 0x048E], [0x0490, 0x0490], [0x0492, 0x0492], [0x0494, 0x0494], [0x0496, 0x0496], [0x0498, 0x0498], [0x049A, 0x049A], [0x049C, 0x049C], [0x049E, 0x049E], [0x04A0, 0x04A0], [0x04A2, 0x04A2], [0x04A4, 0x04A4], [0x04A6, 0x04A6], [0x04A8, 0x04A8], [0x04AA, 0x04AA], [0x04AC, 0x04AC], [0x04AE, 0x04AE], [0x04B0, 0x04B0], [0x04B2, 0x04B2], [0x04B4, 0x04B4], [0x04B6, 0x04B6], [0x04B8, 0x04B8], [0x04BA, 0x04BA], [0x04BC, 0x04BC], [0x04BE, 0x04BE], [0x04C0, 0x04C1], [0x04C3, 0x04C3], [0x04C5, 0x04C5], [0x04C7, 0x04C7], [0x04C9, 0x04C9], [0x04CB, 0x04CB], [0x04CD, 0x04CD], [0x04D0, 0x04D0], [0x04D2, 0x04D2], [0x04D4, 0x04D4], [0x04D6, 0x04D6], [0x04D8, 0x04D8], [0x04DA, 0x04DA], [0x04DC, 0x04DC], [0x04DE, 0x04DE], [0x04E0, 0x04E0], [0x04E2, 0x04E2], [0x04E4, 0x04E4], [0x04E6, 0x04E6], [0x04E8, 0x04E8], [0x04EA, 0x04EA], [0x04EC, 0x04EC], [0x04EE, 0x04EE], [0x04F0, 0x04F0], [0x04F2, 0x04F2], [0x04F4, 0x04F4], [0x04F6, 0x04F6], [0x04F8, 0x04F8], [0x0500, 0x0500], [0x0502, 0x0502], [0x0504, 0x0504], [0x0506, 0x0506], [0x0508, 0x0508], [0x050A, 0x050A], [0x050C, 0x050C], [0x050E, 0x050E], [0x0531, 0x0556], [0x10A0, 0x10C5], [0x1E00, 0x1E00], [0x1E02, 0x1E02], [0x1E04, 0x1E04], [0x1E06, 0x1E06], [0x1E08, 0x1E08], [0x1E0A, 0x1E0A], [0x1E0C, 0x1E0C], [0x1E0E, 0x1E0E], [0x1E10, 0x1E10], [0x1E12, 0x1E12], [0x1E14, 0x1E14], [0x1E16, 0x1E16], [0x1E18, 0x1E18], [0x1E1A, 0x1E1A], [0x1E1C, 0x1E1C], [0x1E1E, 0x1E1E], [0x1E20, 0x1E20], [0x1E22, 0x1E22], [0x1E24, 0x1E24], [0x1E26, 0x1E26], [0x1E28, 0x1E28], [0x1E2A, 0x1E2A], [0x1E2C, 0x1E2C], [0x1E2E, 0x1E2E], [0x1E30, 0x1E30], [0x1E32, 0x1E32], [0x1E34, 0x1E34], [0x1E36, 0x1E36], [0x1E38, 0x1E38], [0x1E3A, 0x1E3A], [0x1E3C, 0x1E3C], [0x1E3E, 0x1E3E], [0x1E40, 0x1E40], [0x1E42, 0x1E42], [0x1E44, 0x1E44], [0x1E46, 0x1E46], [0x1E48, 0x1E48], [0x1E4A, 0x1E4A], [0x1E4C, 0x1E4C], [0x1E4E, 0x1E4E], [0x1E50, 0x1E50], [0x1E52, 0x1E52], [0x1E54, 0x1E54], [0x1E56, 0x1E56], [0x1E58, 0x1E58], [0x1E5A, 0x1E5A], [0x1E5C, 0x1E5C], [0x1E5E, 0x1E5E], [0x1E60, 0x1E60], [0x1E62, 0x1E62], [0x1E64, 0x1E64], [0x1E66, 0x1E66], [0x1E68, 0x1E68], [0x1E6A, 0x1E6A], [0x1E6C, 0x1E6C], [0x1E6E, 0x1E6E], [0x1E70, 0x1E70], [0x1E72, 0x1E72], [0x1E74, 0x1E74], [0x1E76, 0x1E76], [0x1E78, 0x1E78], [0x1E7A, 0x1E7A], [0x1E7C, 0x1E7C], [0x1E7E, 0x1E7E], [0x1E80, 0x1E80], [0x1E82, 0x1E82], [0x1E84, 0x1E84], [0x1E86, 0x1E86], [0x1E88, 0x1E88], [0x1E8A, 0x1E8A], [0x1E8C, 0x1E8C], [0x1E8E, 0x1E8E], [0x1E90, 0x1E90], [0x1E92, 0x1E92], [0x1E94, 0x1E94], [0x1EA0, 0x1EA0], [0x1EA2, 0x1EA2], [0x1EA4, 0x1EA4], [0x1EA6, 0x1EA6], [0x1EA8, 0x1EA8], [0x1EAA, 0x1EAA], [0x1EAC, 0x1EAC], [0x1EAE, 0x1EAE], [0x1EB0, 0x1EB0], [0x1EB2, 0x1EB2], [0x1EB4, 0x1EB4], [0x1EB6, 0x1EB6], [0x1EB8, 0x1EB8], [0x1EBA, 0x1EBA], [0x1EBC, 0x1EBC], [0x1EBE, 0x1EBE], [0x1EC0, 0x1EC0], [0x1EC2, 0x1EC2], [0x1EC4, 0x1EC4], [0x1EC6, 0x1EC6], [0x1EC8, 0x1EC8], [0x1ECA, 0x1ECA], [0x1ECC, 0x1ECC], [0x1ECE, 0x1ECE], [0x1ED0, 0x1ED0], [0x1ED2, 0x1ED2], [0x1ED4, 0x1ED4], [0x1ED6, 0x1ED6], [0x1ED8, 0x1ED8], [0x1EDA, 0x1EDA], [0x1EDC, 0x1EDC], [0x1EDE, 0x1EDE], [0x1EE0, 0x1EE0], [0x1EE2, 0x1EE2], [0x1EE4, 0x1EE4], [0x1EE6, 0x1EE6], [0x1EE8, 0x1EE8], [0x1EEA, 0x1EEA], [0x1EEC, 0x1EEC], [0x1EEE, 0x1EEE], [0x1EF0, 0x1EF0], [0x1EF2, 0x1EF2], [0x1EF4, 0x1EF4], [0x1EF6, 0x1EF6], [0x1EF8, 0x1EF8], [0x1F08, 0x1F0F], [0x1F18, 0x1F1D], [0x1F28, 0x1F2F], [0x1F38, 0x1F3F], [0x1F48, 0x1F4D], [0x1F59, 0x1F59], [0x1F5B, 0x1F5B], [0x1F5D, 0x1F5D], [0x1F5F, 0x1F5F], [0x1F68, 0x1F6F], [0x1FB8, 0x1FBB], [0x1FC8, 0x1FCB], [0x1FD8, 0x1FDB], [0x1FE8, 0x1FEC], [0x1FF8, 0x1FFB], [0x2102, 0x2102], [0x2107, 0x2107], [0x210B, 0x210D], [0x2110, 0x2112], [0x2115, 0x2115], [0x2119, 0x211D], [0x2124, 0x2124], [0x2126, 0x2126], [0x2128, 0x2128], [0x212A, 0x212D], [0x2130, 0x2131], [0x2133, 0x2133], [0x213E, 0x213F], [0x2145, 0x2145], [0x2C00, 0x2C2E], [0x2C80, 0x2C80], [0x2C82, 0x2C82], [0x2C84, 0x2C84], [0x2C86, 0x2C86], [0x2C88, 0x2C88], [0x2C8A, 0x2C8A], [0x2C8C, 0x2C8C], [0x2C8E, 0x2C8E], [0x2C90, 0x2C90], [0x2C92, 0x2C92], [0x2C94, 0x2C94], [0x2C96, 0x2C96], [0x2C98, 0x2C98], [0x2C9A, 0x2C9A], [0x2C9C, 0x2C9C], [0x2C9E, 0x2C9E], [0x2CA0, 0x2CA0], [0x2CA2, 0x2CA2], [0x2CA4, 0x2CA4], [0x2CA6, 0x2CA6], [0x2CA8, 0x2CA8], [0x2CAA, 0x2CAA], [0x2CAC, 0x2CAC], [0x2CAE, 0x2CAE], [0x2CB0, 0x2CB0], [0x2CB2, 0x2CB2], [0x2CB4, 0x2CB4], [0x2CB6, 0x2CB6], [0x2CB8, 0x2CB8], [0x2CBA, 0x2CBA], [0x2CBC, 0x2CBC], [0x2CBE, 0x2CBE], [0x2CC0, 0x2CC0], [0x2CC2, 0x2CC2], [0x2CC4, 0x2CC4], [0x2CC6, 0x2CC6], [0x2CC8, 0x2CC8], [0x2CCA, 0x2CCA], [0x2CCC, 0x2CCC], [0x2CCE, 0x2CCE], [0x2CD0, 0x2CD0], [0x2CD2, 0x2CD2], [0x2CD4, 0x2CD4], [0x2CD6, 0x2CD6], [0x2CD8, 0x2CD8], [0x2CDA, 0x2CDA], [0x2CDC, 0x2CDC], [0x2CDE, 0x2CDE], [0x2CE0, 0x2CE0], [0x2CE2, 0x2CE2], [0xFF21, 0xFF3A]]; -Ll = [[0x0061, 0x007A], [0x00AA, 0x00AA], [0x00B5, 0x00B5], [0x00BA, 0x00BA], [0x00DF, 0x00F6], [0x00F8, 0x00FF], [0x0101, 0x0101], [0x0103, 0x0103], [0x0105, 0x0105], [0x0107, 0x0107], [0x0109, 0x0109], [0x010B, 0x010B], [0x010D, 0x010D], [0x010F, 0x010F], [0x0111, 0x0111], [0x0113, 0x0113], [0x0115, 0x0115], [0x0117, 0x0117], [0x0119, 0x0119], [0x011B, 0x011B], [0x011D, 0x011D], [0x011F, 0x011F], [0x0121, 0x0121], [0x0123, 0x0123], [0x0125, 0x0125], [0x0127, 0x0127], [0x0129, 0x0129], [0x012B, 0x012B], [0x012D, 0x012D], [0x012F, 0x012F], [0x0131, 0x0131], [0x0133, 0x0133], [0x0135, 0x0135], [0x0137, 0x0138], [0x013A, 0x013A], [0x013C, 0x013C], [0x013E, 0x013E], [0x0140, 0x0140], [0x0142, 0x0142], [0x0144, 0x0144], [0x0146, 0x0146], [0x0148, 0x0149], [0x014B, 0x014B], [0x014D, 0x014D], [0x014F, 0x014F], [0x0151, 0x0151], [0x0153, 0x0153], [0x0155, 0x0155], [0x0157, 0x0157], [0x0159, 0x0159], [0x015B, 0x015B], [0x015D, 0x015D], [0x015F, 0x015F], [0x0161, 0x0161], [0x0163, 0x0163], [0x0165, 0x0165], [0x0167, 0x0167], [0x0169, 0x0169], [0x016B, 0x016B], [0x016D, 0x016D], [0x016F, 0x016F], [0x0171, 0x0171], [0x0173, 0x0173], [0x0175, 0x0175], [0x0177, 0x0177], [0x017A, 0x017A], [0x017C, 0x017C], [0x017E, 0x0180], [0x0183, 0x0183], [0x0185, 0x0185], [0x0188, 0x0188], [0x018C, 0x018D], [0x0192, 0x0192], [0x0195, 0x0195], [0x0199, 0x019B], [0x019E, 0x019E], [0x01A1, 0x01A1], [0x01A3, 0x01A3], [0x01A5, 0x01A5], [0x01A8, 0x01A8], [0x01AA, 0x01AB], [0x01AD, 0x01AD], [0x01B0, 0x01B0], [0x01B4, 0x01B4], [0x01B6, 0x01B6], [0x01B9, 0x01BA], [0x01BD, 0x01BF], [0x01C6, 0x01C6], [0x01C9, 0x01C9], [0x01CC, 0x01CC], [0x01CE, 0x01CE], [0x01D0, 0x01D0], [0x01D2, 0x01D2], [0x01D4, 0x01D4], [0x01D6, 0x01D6], [0x01D8, 0x01D8], [0x01DA, 0x01DA], [0x01DC, 0x01DD], [0x01DF, 0x01DF], [0x01E1, 0x01E1], [0x01E3, 0x01E3], [0x01E5, 0x01E5], [0x01E7, 0x01E7], [0x01E9, 0x01E9], [0x01EB, 0x01EB], [0x01ED, 0x01ED], [0x01EF, 0x01F0], [0x01F3, 0x01F3], [0x01F5, 0x01F5], [0x01F9, 0x01F9], [0x01FB, 0x01FB], [0x01FD, 0x01FD], [0x01FF, 0x01FF], [0x0201, 0x0201], [0x0203, 0x0203], [0x0205, 0x0205], [0x0207, 0x0207], [0x0209, 0x0209], [0x020B, 0x020B], [0x020D, 0x020D], [0x020F, 0x020F], [0x0211, 0x0211], [0x0213, 0x0213], [0x0215, 0x0215], [0x0217, 0x0217], [0x0219, 0x0219], [0x021B, 0x021B], [0x021D, 0x021D], [0x021F, 0x021F], [0x0221, 0x0221], [0x0223, 0x0223], [0x0225, 0x0225], [0x0227, 0x0227], [0x0229, 0x0229], [0x022B, 0x022B], [0x022D, 0x022D], [0x022F, 0x022F], [0x0231, 0x0231], [0x0233, 0x0239], [0x023C, 0x023C], [0x023F, 0x0240], [0x0250, 0x02AF], [0x0390, 0x0390], [0x03AC, 0x03CE], [0x03D0, 0x03D1], [0x03D5, 0x03D7], [0x03D9, 0x03D9], [0x03DB, 0x03DB], [0x03DD, 0x03DD], [0x03DF, 0x03DF], [0x03E1, 0x03E1], [0x03E3, 0x03E3], [0x03E5, 0x03E5], [0x03E7, 0x03E7], [0x03E9, 0x03E9], [0x03EB, 0x03EB], [0x03ED, 0x03ED], [0x03EF, 0x03F3], [0x03F5, 0x03F5], [0x03F8, 0x03F8], [0x03FB, 0x03FC], [0x0430, 0x045F], [0x0461, 0x0461], [0x0463, 0x0463], [0x0465, 0x0465], [0x0467, 0x0467], [0x0469, 0x0469], [0x046B, 0x046B], [0x046D, 0x046D], [0x046F, 0x046F], [0x0471, 0x0471], [0x0473, 0x0473], [0x0475, 0x0475], [0x0477, 0x0477], [0x0479, 0x0479], [0x047B, 0x047B], [0x047D, 0x047D], [0x047F, 0x047F], [0x0481, 0x0481], [0x048B, 0x048B], [0x048D, 0x048D], [0x048F, 0x048F], [0x0491, 0x0491], [0x0493, 0x0493], [0x0495, 0x0495], [0x0497, 0x0497], [0x0499, 0x0499], [0x049B, 0x049B], [0x049D, 0x049D], [0x049F, 0x049F], [0x04A1, 0x04A1], [0x04A3, 0x04A3], [0x04A5, 0x04A5], [0x04A7, 0x04A7], [0x04A9, 0x04A9], [0x04AB, 0x04AB], [0x04AD, 0x04AD], [0x04AF, 0x04AF], [0x04B1, 0x04B1], [0x04B3, 0x04B3], [0x04B5, 0x04B5], [0x04B7, 0x04B7], [0x04B9, 0x04B9], [0x04BB, 0x04BB], [0x04BD, 0x04BD], [0x04BF, 0x04BF], [0x04C2, 0x04C2], [0x04C4, 0x04C4], [0x04C6, 0x04C6], [0x04C8, 0x04C8], [0x04CA, 0x04CA], [0x04CC, 0x04CC], [0x04CE, 0x04CE], [0x04D1, 0x04D1], [0x04D3, 0x04D3], [0x04D5, 0x04D5], [0x04D7, 0x04D7], [0x04D9, 0x04D9], [0x04DB, 0x04DB], [0x04DD, 0x04DD], [0x04DF, 0x04DF], [0x04E1, 0x04E1], [0x04E3, 0x04E3], [0x04E5, 0x04E5], [0x04E7, 0x04E7], [0x04E9, 0x04E9], [0x04EB, 0x04EB], [0x04ED, 0x04ED], [0x04EF, 0x04EF], [0x04F1, 0x04F1], [0x04F3, 0x04F3], [0x04F5, 0x04F5], [0x04F7, 0x04F7], [0x04F9, 0x04F9], [0x0501, 0x0501], [0x0503, 0x0503], [0x0505, 0x0505], [0x0507, 0x0507], [0x0509, 0x0509], [0x050B, 0x050B], [0x050D, 0x050D], [0x050F, 0x050F], [0x0561, 0x0587], [0x1D00, 0x1D2B], [0x1D62, 0x1D77], [0x1D79, 0x1D9A], [0x1E01, 0x1E01], [0x1E03, 0x1E03], [0x1E05, 0x1E05], [0x1E07, 0x1E07], [0x1E09, 0x1E09], [0x1E0B, 0x1E0B], [0x1E0D, 0x1E0D], [0x1E0F, 0x1E0F], [0x1E11, 0x1E11], [0x1E13, 0x1E13], [0x1E15, 0x1E15], [0x1E17, 0x1E17], [0x1E19, 0x1E19], [0x1E1B, 0x1E1B], [0x1E1D, 0x1E1D], [0x1E1F, 0x1E1F], [0x1E21, 0x1E21], [0x1E23, 0x1E23], [0x1E25, 0x1E25], [0x1E27, 0x1E27], [0x1E29, 0x1E29], [0x1E2B, 0x1E2B], [0x1E2D, 0x1E2D], [0x1E2F, 0x1E2F], [0x1E31, 0x1E31], [0x1E33, 0x1E33], [0x1E35, 0x1E35], [0x1E37, 0x1E37], [0x1E39, 0x1E39], [0x1E3B, 0x1E3B], [0x1E3D, 0x1E3D], [0x1E3F, 0x1E3F], [0x1E41, 0x1E41], [0x1E43, 0x1E43], [0x1E45, 0x1E45], [0x1E47, 0x1E47], [0x1E49, 0x1E49], [0x1E4B, 0x1E4B], [0x1E4D, 0x1E4D], [0x1E4F, 0x1E4F], [0x1E51, 0x1E51], [0x1E53, 0x1E53], [0x1E55, 0x1E55], [0x1E57, 0x1E57], [0x1E59, 0x1E59], [0x1E5B, 0x1E5B], [0x1E5D, 0x1E5D], [0x1E5F, 0x1E5F], [0x1E61, 0x1E61], [0x1E63, 0x1E63], [0x1E65, 0x1E65], [0x1E67, 0x1E67], [0x1E69, 0x1E69], [0x1E6B, 0x1E6B], [0x1E6D, 0x1E6D], [0x1E6F, 0x1E6F], [0x1E71, 0x1E71], [0x1E73, 0x1E73], [0x1E75, 0x1E75], [0x1E77, 0x1E77], [0x1E79, 0x1E79], [0x1E7B, 0x1E7B], [0x1E7D, 0x1E7D], [0x1E7F, 0x1E7F], [0x1E81, 0x1E81], [0x1E83, 0x1E83], [0x1E85, 0x1E85], [0x1E87, 0x1E87], [0x1E89, 0x1E89], [0x1E8B, 0x1E8B], [0x1E8D, 0x1E8D], [0x1E8F, 0x1E8F], [0x1E91, 0x1E91], [0x1E93, 0x1E93], [0x1E95, 0x1E9B], [0x1EA1, 0x1EA1], [0x1EA3, 0x1EA3], [0x1EA5, 0x1EA5], [0x1EA7, 0x1EA7], [0x1EA9, 0x1EA9], [0x1EAB, 0x1EAB], [0x1EAD, 0x1EAD], [0x1EAF, 0x1EAF], [0x1EB1, 0x1EB1], [0x1EB3, 0x1EB3], [0x1EB5, 0x1EB5], [0x1EB7, 0x1EB7], [0x1EB9, 0x1EB9], [0x1EBB, 0x1EBB], [0x1EBD, 0x1EBD], [0x1EBF, 0x1EBF], [0x1EC1, 0x1EC1], [0x1EC3, 0x1EC3], [0x1EC5, 0x1EC5], [0x1EC7, 0x1EC7], [0x1EC9, 0x1EC9], [0x1ECB, 0x1ECB], [0x1ECD, 0x1ECD], [0x1ECF, 0x1ECF], [0x1ED1, 0x1ED1], [0x1ED3, 0x1ED3], [0x1ED5, 0x1ED5], [0x1ED7, 0x1ED7], [0x1ED9, 0x1ED9], [0x1EDB, 0x1EDB], [0x1EDD, 0x1EDD], [0x1EDF, 0x1EDF], [0x1EE1, 0x1EE1], [0x1EE3, 0x1EE3], [0x1EE5, 0x1EE5], [0x1EE7, 0x1EE7], [0x1EE9, 0x1EE9], [0x1EEB, 0x1EEB], [0x1EED, 0x1EED], [0x1EEF, 0x1EEF], [0x1EF1, 0x1EF1], [0x1EF3, 0x1EF3], [0x1EF5, 0x1EF5], [0x1EF7, 0x1EF7], [0x1EF9, 0x1EF9], [0x1F00, 0x1F07], [0x1F10, 0x1F15], [0x1F20, 0x1F27], [0x1F30, 0x1F37], [0x1F40, 0x1F45], [0x1F50, 0x1F57], [0x1F60, 0x1F67], [0x1F70, 0x1F7D], [0x1F80, 0x1F87], [0x1F90, 0x1F97], [0x1FA0, 0x1FA7], [0x1FB0, 0x1FB4], [0x1FB6, 0x1FB7], [0x1FBE, 0x1FBE], [0x1FC2, 0x1FC4], [0x1FC6, 0x1FC7], [0x1FD0, 0x1FD3], [0x1FD6, 0x1FD7], [0x1FE0, 0x1FE7], [0x1FF2, 0x1FF4], [0x1FF6, 0x1FF7], [0x2071, 0x2071], [0x207F, 0x207F], [0x210A, 0x210A], [0x210E, 0x210F], [0x2113, 0x2113], [0x212F, 0x212F], [0x2134, 0x2134], [0x2139, 0x2139], [0x213C, 0x213D], [0x2146, 0x2149], [0x2C30, 0x2C5E], [0x2C81, 0x2C81], [0x2C83, 0x2C83], [0x2C85, 0x2C85], [0x2C87, 0x2C87], [0x2C89, 0x2C89], [0x2C8B, 0x2C8B], [0x2C8D, 0x2C8D], [0x2C8F, 0x2C8F], [0x2C91, 0x2C91], [0x2C93, 0x2C93], [0x2C95, 0x2C95], [0x2C97, 0x2C97], [0x2C99, 0x2C99], [0x2C9B, 0x2C9B], [0x2C9D, 0x2C9D], [0x2C9F, 0x2C9F], [0x2CA1, 0x2CA1], [0x2CA3, 0x2CA3], [0x2CA5, 0x2CA5], [0x2CA7, 0x2CA7], [0x2CA9, 0x2CA9], [0x2CAB, 0x2CAB], [0x2CAD, 0x2CAD], [0x2CAF, 0x2CAF], [0x2CB1, 0x2CB1], [0x2CB3, 0x2CB3], [0x2CB5, 0x2CB5], [0x2CB7, 0x2CB7], [0x2CB9, 0x2CB9], [0x2CBB, 0x2CBB], [0x2CBD, 0x2CBD], [0x2CBF, 0x2CBF], [0x2CC1, 0x2CC1], [0x2CC3, 0x2CC3], [0x2CC5, 0x2CC5], [0x2CC7, 0x2CC7], [0x2CC9, 0x2CC9], [0x2CCB, 0x2CCB], [0x2CCD, 0x2CCD], [0x2CCF, 0x2CCF], [0x2CD1, 0x2CD1], [0x2CD3, 0x2CD3], [0x2CD5, 0x2CD5], [0x2CD7, 0x2CD7], [0x2CD9, 0x2CD9], [0x2CDB, 0x2CDB], [0x2CDD, 0x2CDD], [0x2CDF, 0x2CDF], [0x2CE1, 0x2CE1], [0x2CE3, 0x2CE4], [0x2D00, 0x2D25], [0xFB00, 0xFB06], [0xFB13, 0xFB17], [0xFF41, 0xFF5A]]; -Lt = [[0x01C5, 0x01C5], [0x01C8, 0x01C8], [0x01CB, 0x01CB], [0x01F2, 0x01F2], [0x1F88, 0x1F8F], [0x1F98, 0x1F9F], [0x1FA8, 0x1FAF], [0x1FBC, 0x1FBC], [0x1FCC, 0x1FCC], [0x1FFC, 0x1FFC]]; -Lm = [[0x02B0, 0x02C1], [0x02C6, 0x02D1], [0x02E0, 0x02E4], [0x02EE, 0x02EE], [0x037A, 0x037A], [0x0559, 0x0559], [0x0640, 0x0640], [0x06E5, 0x06E6], [0x0E46, 0x0E46], [0x0EC6, 0x0EC6], [0x10FC, 0x10FC], [0x17D7, 0x17D7], [0x1843, 0x1843], [0x1D2C, 0x1D61], [0x1D78, 0x1D78], [0x1D9B, 0x1DBF], [0x2090, 0x2094], [0x2D6F, 0x2D6F], [0x3005, 0x3005], [0x3031, 0x3035], [0x303B, 0x303B], [0x309D, 0x309E], [0x30FC, 0x30FE], [0xA015, 0xA015], [0xFF70, 0xFF70], [0xFF9E, 0xFF9F]]; -Lo = [[0x01BB, 0x01BB], [0x01C0, 0x01C3], [0x05D0, 0x05EA], [0x05F0, 0x05F2], [0x0621, 0x063A], [0x0641, 0x064A], [0x066E, 0x066F], [0x0671, 0x06D3], [0x06D5, 0x06D5], [0x06EE, 0x06EF], [0x06FA, 0x06FC], [0x06FF, 0x06FF], [0x0710, 0x0710], [0x0712, 0x072F], [0x074D, 0x076D], [0x0780, 0x07A5], [0x07B1, 0x07B1], [0x0904, 0x0939], [0x093D, 0x093D], [0x0950, 0x0950], [0x0958, 0x0961], [0x097D, 0x097D], [0x0985, 0x098C], [0x098F, 0x0990], [0x0993, 0x09A8], [0x09AA, 0x09B0], [0x09B2, 0x09B2], [0x09B6, 0x09B9], [0x09BD, 0x09BD], [0x09CE, 0x09CE], [0x09DC, 0x09DD], [0x09DF, 0x09E1], [0x09F0, 0x09F1], [0x0A05, 0x0A0A], [0x0A0F, 0x0A10], [0x0A13, 0x0A28], [0x0A2A, 0x0A30], [0x0A32, 0x0A33], [0x0A35, 0x0A36], [0x0A38, 0x0A39], [0x0A59, 0x0A5C], [0x0A5E, 0x0A5E], [0x0A72, 0x0A74], [0x0A85, 0x0A8D], [0x0A8F, 0x0A91], [0x0A93, 0x0AA8], [0x0AAA, 0x0AB0], [0x0AB2, 0x0AB3], [0x0AB5, 0x0AB9], [0x0ABD, 0x0ABD], [0x0AD0, 0x0AD0], [0x0AE0, 0x0AE1], [0x0B05, 0x0B0C], [0x0B0F, 0x0B10], [0x0B13, 0x0B28], [0x0B2A, 0x0B30], [0x0B32, 0x0B33], [0x0B35, 0x0B39], [0x0B3D, 0x0B3D], [0x0B5C, 0x0B5D], [0x0B5F, 0x0B61], [0x0B71, 0x0B71], [0x0B83, 0x0B83], [0x0B85, 0x0B8A], [0x0B8E, 0x0B90], [0x0B92, 0x0B95], [0x0B99, 0x0B9A], [0x0B9C, 0x0B9C], [0x0B9E, 0x0B9F], [0x0BA3, 0x0BA4], [0x0BA8, 0x0BAA], [0x0BAE, 0x0BB9], [0x0C05, 0x0C0C], [0x0C0E, 0x0C10], [0x0C12, 0x0C28], [0x0C2A, 0x0C33], [0x0C35, 0x0C39], [0x0C60, 0x0C61], [0x0C85, 0x0C8C], [0x0C8E, 0x0C90], [0x0C92, 0x0CA8], [0x0CAA, 0x0CB3], [0x0CB5, 0x0CB9], [0x0CBD, 0x0CBD], [0x0CDE, 0x0CDE], [0x0CE0, 0x0CE1], [0x0D05, 0x0D0C], [0x0D0E, 0x0D10], [0x0D12, 0x0D28], [0x0D2A, 0x0D39], [0x0D60, 0x0D61], [0x0D85, 0x0D96], [0x0D9A, 0x0DB1], [0x0DB3, 0x0DBB], [0x0DBD, 0x0DBD], [0x0DC0, 0x0DC6], [0x0E01, 0x0E30], [0x0E32, 0x0E33], [0x0E40, 0x0E45], [0x0E81, 0x0E82], [0x0E84, 0x0E84], [0x0E87, 0x0E88], [0x0E8A, 0x0E8A], [0x0E8D, 0x0E8D], [0x0E94, 0x0E97], [0x0E99, 0x0E9F], [0x0EA1, 0x0EA3], [0x0EA5, 0x0EA5], [0x0EA7, 0x0EA7], [0x0EAA, 0x0EAB], [0x0EAD, 0x0EB0], [0x0EB2, 0x0EB3], [0x0EBD, 0x0EBD], [0x0EC0, 0x0EC4], [0x0EDC, 0x0EDD], [0x0F00, 0x0F00], [0x0F40, 0x0F47], [0x0F49, 0x0F6A], [0x0F88, 0x0F8B], [0x1000, 0x1021], [0x1023, 0x1027], [0x1029, 0x102A], [0x1050, 0x1055], [0x10D0, 0x10FA], [0x1100, 0x1159], [0x115F, 0x11A2], [0x11A8, 0x11F9], [0x1200, 0x1248], [0x124A, 0x124D], [0x1250, 0x1256], [0x1258, 0x1258], [0x125A, 0x125D], [0x1260, 0x1288], [0x128A, 0x128D], [0x1290, 0x12B0], [0x12B2, 0x12B5], [0x12B8, 0x12BE], [0x12C0, 0x12C0], [0x12C2, 0x12C5], [0x12C8, 0x12D6], [0x12D8, 0x1310], [0x1312, 0x1315], [0x1318, 0x135A], [0x1380, 0x138F], [0x13A0, 0x13F4], [0x1401, 0x166C], [0x166F, 0x1676], [0x1681, 0x169A], [0x16A0, 0x16EA], [0x1700, 0x170C], [0x170E, 0x1711], [0x1720, 0x1731], [0x1740, 0x1751], [0x1760, 0x176C], [0x176E, 0x1770], [0x1780, 0x17B3], [0x17DC, 0x17DC], [0x1820, 0x1842], [0x1844, 0x1877], [0x1880, 0x18A8], [0x1900, 0x191C], [0x1950, 0x196D], [0x1970, 0x1974], [0x1980, 0x19A9], [0x19C1, 0x19C7], [0x1A00, 0x1A16], [0x2135, 0x2138], [0x2D30, 0x2D65], [0x2D80, 0x2D96], [0x2DA0, 0x2DA6], [0x2DA8, 0x2DAE], [0x2DB0, 0x2DB6], [0x2DB8, 0x2DBE], [0x2DC0, 0x2DC6], [0x2DC8, 0x2DCE], [0x2DD0, 0x2DD6], [0x2DD8, 0x2DDE], [0x3006, 0x3006], [0x303C, 0x303C], [0x3041, 0x3096], [0x309F, 0x309F], [0x30A1, 0x30FA], [0x30FF, 0x30FF], [0x3105, 0x312C], [0x3131, 0x318E], [0x31A0, 0x31B7], [0x31F0, 0x31FF], [0x3400, 0x4DB5], [0x4E00, 0x9FBB], [0xA000, 0xA014], [0xA016, 0xA48C], [0xA800, 0xA801], [0xA803, 0xA805], [0xA807, 0xA80A], [0xA80C, 0xA822], [0xAC00, 0xD7A3], [0xF900, 0xFA2D], [0xFA30, 0xFA6A], [0xFA70, 0xFAD9], [0xFB1D, 0xFB1D], [0xFB1F, 0xFB28], [0xFB2A, 0xFB36], [0xFB38, 0xFB3C], [0xFB3E, 0xFB3E], [0xFB40, 0xFB41], [0xFB43, 0xFB44], [0xFB46, 0xFBB1], [0xFBD3, 0xFD3D], [0xFD50, 0xFD8F], [0xFD92, 0xFDC7], [0xFDF0, 0xFDFB], [0xFE70, 0xFE74], [0xFE76, 0xFEFC], [0xFF66, 0xFF6F], [0xFF71, 0xFF9D], [0xFFA0, 0xFFBE], [0xFFC2, 0xFFC7], [0xFFCA, 0xFFCF], [0xFFD2, 0xFFD7], [0xFFDA, 0xFFDC]]; -Nl = [[0x16EE, 0x16F0], [0x2160, 0x2183], [0x3007, 0x3007], [0x3021, 0x3029], [0x3038, 0x303A]]; - -UnicodeLetterLu = []; -UnicodeLetterLl = []; -UnicodeLetterLt = []; -UnicodeLetterLm = []; -UnicodeLetterLo = []; -UnicodeLetterNl = []; - -for (indexI = 0; indexI < Lu.length; indexI++) { - for (indexJ = Lu[indexI][0]; indexJ <= Lu[indexI][1]; indexJ++) { - UnicodeLetterLu[indexJ] = true; - } -} -for (indexI = 0; indexI < Ll.length; indexI++) { - for (indexJ = Ll[indexI][0]; indexJ <= Ll[indexI][1]; indexJ++) { - UnicodeLetterLl[indexJ] = true; - } -} -for (indexI = 0; indexI < Lt.length; indexI++) { - for (indexJ = Lt[indexI][0]; indexJ <= Lt[indexI][1]; indexJ++) { - UnicodeLetterLt[indexJ] = true; - } -} -for (indexI = 0; indexI < Lm.length; indexI++) { - for (indexJ = Lm[indexI][0]; indexJ <= Lm[indexI][1]; indexJ++) { - UnicodeLetterLm[indexJ] = true; - } -} -for (indexI = 0; indexI < Lo.length; indexI++) { - for (indexJ = Lo[indexI][0]; indexJ <= Lo[indexI][1]; indexJ++) { - UnicodeLetterLo[indexJ] = true; - } -} -for (indexI = 0; indexI < Nl.length; indexI++) { - for (indexJ = Nl[indexI][0]; indexJ <= Nl[indexI][1]; indexJ++) { - UnicodeLetterNl[indexJ] = true; - } -} - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; -for (index = 0; index <= 65535; index++) { - if ((UnicodeLetterLu[index] === undefined) && (UnicodeLetterLl[index] === undefined) && (UnicodeLetterLt[index] === undefined) && (UnicodeLetterLm[index] === undefined) && (UnicodeLetterLo[index] === undefined) && (UnicodeLetterNl[index] === undefined) && (index !== 0x0024) && (index !== 0x005F)) { - try { - var identifier = String.fromCharCode(index); - eval("var " + identifier + "=1"); - if (errorCount === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; - } catch (e) { - } - count++; - } -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_410/S7.6_A5.2_T1.js b/tests/ES3/Unicode/Unicode_410/S7.6_A5.2_T1.js deleted file mode 100644 index 01b1ba0ed..000000000 --- a/tests/ES3/Unicode/Unicode_410/S7.6_A5.2_T1.js +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A5.2_T1; - * @section: 7.6, 6; - * @assertion: If a \UnicodeEscapeSequence sequence were replaced by its UnicodeEscapeSequence's CV, the result must still be a valid Identifier that has the exact same sequence of characters as the original Identifier; - * @description: The CV of UnicodeEscapeSequence is Lu. - * Complex test with eval; -*/ - -//CHECK -Lu = [[0x0041, 0x005A], [0x00C0, 0x00D6], [0x00D8, 0x00DE], [0x0100, 0x0100], [0x0102, 0x0102], [0x0104, 0x0104], [0x0106, 0x0106], [0x0108, 0x0108], [0x010A, 0x010A], [0x010C, 0x010C], [0x010E, 0x010E], [0x0110, 0x0110], [0x0112, 0x0112], [0x0114, 0x0114], [0x0116, 0x0116], [0x0118, 0x0118], [0x011A, 0x011A], [0x011C, 0x011C], [0x011E, 0x011E], [0x0120, 0x0120], [0x0122, 0x0122], [0x0124, 0x0124], [0x0126, 0x0126], [0x0128, 0x0128], [0x012A, 0x012A], [0x012C, 0x012C], [0x012E, 0x012E], [0x0130, 0x0130], [0x0132, 0x0132], [0x0134, 0x0134], [0x0136, 0x0136], [0x0139, 0x0139], [0x013B, 0x013B], [0x013D, 0x013D], [0x013F, 0x013F], [0x0141, 0x0141], [0x0143, 0x0143], [0x0145, 0x0145], [0x0147, 0x0147], [0x014A, 0x014A], [0x014C, 0x014C], [0x014E, 0x014E], [0x0150, 0x0150], [0x0152, 0x0152], [0x0154, 0x0154], [0x0156, 0x0156], [0x0158, 0x0158], [0x015A, 0x015A], [0x015C, 0x015C], [0x015E, 0x015E], [0x0160, 0x0160], [0x0162, 0x0162], [0x0164, 0x0164], [0x0166, 0x0166], [0x0168, 0x0168], [0x016A, 0x016A], [0x016C, 0x016C], [0x016E, 0x016E], [0x0170, 0x0170], [0x0172, 0x0172], [0x0174, 0x0174], [0x0176, 0x0176], [0x0178, 0x0179], [0x017B, 0x017B], [0x017D, 0x017D], [0x0181, 0x0182], [0x0184, 0x0184], [0x0186, 0x0187], [0x0189, 0x018B], [0x018E, 0x0191], [0x0193, 0x0194], [0x0196, 0x0198], [0x019C, 0x019D], [0x019F, 0x01A0], [0x01A2, 0x01A2], [0x01A4, 0x01A4], [0x01A6, 0x01A7], [0x01A9, 0x01A9], [0x01AC, 0x01AC], [0x01AE, 0x01AF], [0x01B1, 0x01B3], [0x01B5, 0x01B5], [0x01B7, 0x01B8], [0x01BC, 0x01BC], [0x01C4, 0x01C4], [0x01C7, 0x01C7], [0x01CA, 0x01CA], [0x01CD, 0x01CD], [0x01CF, 0x01CF], [0x01D1, 0x01D1], [0x01D3, 0x01D3], [0x01D5, 0x01D5], [0x01D7, 0x01D7], [0x01D9, 0x01D9], [0x01DB, 0x01DB], [0x01DE, 0x01DE], [0x01E0, 0x01E0], [0x01E2, 0x01E2], [0x01E4, 0x01E4], [0x01E6, 0x01E6], [0x01E8, 0x01E8], [0x01EA, 0x01EA], [0x01EC, 0x01EC], [0x01EE, 0x01EE], [0x01F1, 0x01F1], [0x01F4, 0x01F4], [0x01F6, 0x01F8], [0x01FA, 0x01FA], [0x01FC, 0x01FC], [0x01FE, 0x01FE], [0x0200, 0x0200], [0x0202, 0x0202], [0x0204, 0x0204], [0x0206, 0x0206], [0x0208, 0x0208], [0x020A, 0x020A], [0x020C, 0x020C], [0x020E, 0x020E], [0x0210, 0x0210], [0x0212, 0x0212], [0x0214, 0x0214], [0x0216, 0x0216], [0x0218, 0x0218], [0x021A, 0x021A], [0x021C, 0x021C], [0x021E, 0x021E], [0x0220, 0x0220], [0x0222, 0x0222], [0x0224, 0x0224], [0x0226, 0x0226], [0x0228, 0x0228], [0x022A, 0x022A], [0x022C, 0x022C], [0x022E, 0x022E], [0x0230, 0x0230], [0x0232, 0x0232], [0x023A, 0x023B], [0x023D, 0x023E], [0x0241, 0x0241], [0x0386, 0x0386], [0x0388, 0x038A], [0x038C, 0x038C], [0x038E, 0x038F], [0x0391, 0x03A1], [0x03A3, 0x03AB], [0x03D2, 0x03D4], [0x03D8, 0x03D8], [0x03DA, 0x03DA], [0x03DC, 0x03DC], [0x03DE, 0x03DE], [0x03E0, 0x03E0], [0x03E2, 0x03E2], [0x03E4, 0x03E4], [0x03E6, 0x03E6], [0x03E8, 0x03E8], [0x03EA, 0x03EA], [0x03EC, 0x03EC], [0x03EE, 0x03EE], [0x03F4, 0x03F4], [0x03F7, 0x03F7], [0x03F9, 0x03FA], [0x03FD, 0x042F], [0x0460, 0x0460], [0x0462, 0x0462], [0x0464, 0x0464], [0x0466, 0x0466], [0x0468, 0x0468], [0x046A, 0x046A], [0x046C, 0x046C], [0x046E, 0x046E], [0x0470, 0x0470], [0x0472, 0x0472], [0x0474, 0x0474], [0x0476, 0x0476], [0x0478, 0x0478], [0x047A, 0x047A], [0x047C, 0x047C], [0x047E, 0x047E], [0x0480, 0x0480], [0x048A, 0x048A], [0x048C, 0x048C], [0x048E, 0x048E], [0x0490, 0x0490], [0x0492, 0x0492], [0x0494, 0x0494], [0x0496, 0x0496], [0x0498, 0x0498], [0x049A, 0x049A], [0x049C, 0x049C], [0x049E, 0x049E], [0x04A0, 0x04A0], [0x04A2, 0x04A2], [0x04A4, 0x04A4], [0x04A6, 0x04A6], [0x04A8, 0x04A8], [0x04AA, 0x04AA], [0x04AC, 0x04AC], [0x04AE, 0x04AE], [0x04B0, 0x04B0], [0x04B2, 0x04B2], [0x04B4, 0x04B4], [0x04B6, 0x04B6], [0x04B8, 0x04B8], [0x04BA, 0x04BA], [0x04BC, 0x04BC], [0x04BE, 0x04BE], [0x04C0, 0x04C1], [0x04C3, 0x04C3], [0x04C5, 0x04C5], [0x04C7, 0x04C7], [0x04C9, 0x04C9], [0x04CB, 0x04CB], [0x04CD, 0x04CD], [0x04D0, 0x04D0], [0x04D2, 0x04D2], [0x04D4, 0x04D4], [0x04D6, 0x04D6], [0x04D8, 0x04D8], [0x04DA, 0x04DA], [0x04DC, 0x04DC], [0x04DE, 0x04DE], [0x04E0, 0x04E0], [0x04E2, 0x04E2], [0x04E4, 0x04E4], [0x04E6, 0x04E6], [0x04E8, 0x04E8], [0x04EA, 0x04EA], [0x04EC, 0x04EC], [0x04EE, 0x04EE], [0x04F0, 0x04F0], [0x04F2, 0x04F2], [0x04F4, 0x04F4], [0x04F6, 0x04F6], [0x04F8, 0x04F8], [0x0500, 0x0500], [0x0502, 0x0502], [0x0504, 0x0504], [0x0506, 0x0506], [0x0508, 0x0508], [0x050A, 0x050A], [0x050C, 0x050C], [0x050E, 0x050E], [0x0531, 0x0556], [0x10A0, 0x10C5], [0x1E00, 0x1E00], [0x1E02, 0x1E02], [0x1E04, 0x1E04], [0x1E06, 0x1E06], [0x1E08, 0x1E08], [0x1E0A, 0x1E0A], [0x1E0C, 0x1E0C], [0x1E0E, 0x1E0E], [0x1E10, 0x1E10], [0x1E12, 0x1E12], [0x1E14, 0x1E14], [0x1E16, 0x1E16], [0x1E18, 0x1E18], [0x1E1A, 0x1E1A], [0x1E1C, 0x1E1C], [0x1E1E, 0x1E1E], [0x1E20, 0x1E20], [0x1E22, 0x1E22], [0x1E24, 0x1E24], [0x1E26, 0x1E26], [0x1E28, 0x1E28], [0x1E2A, 0x1E2A], [0x1E2C, 0x1E2C], [0x1E2E, 0x1E2E], [0x1E30, 0x1E30], [0x1E32, 0x1E32], [0x1E34, 0x1E34], [0x1E36, 0x1E36], [0x1E38, 0x1E38], [0x1E3A, 0x1E3A], [0x1E3C, 0x1E3C], [0x1E3E, 0x1E3E], [0x1E40, 0x1E40], [0x1E42, 0x1E42], [0x1E44, 0x1E44], [0x1E46, 0x1E46], [0x1E48, 0x1E48], [0x1E4A, 0x1E4A], [0x1E4C, 0x1E4C], [0x1E4E, 0x1E4E], [0x1E50, 0x1E50], [0x1E52, 0x1E52], [0x1E54, 0x1E54], [0x1E56, 0x1E56], [0x1E58, 0x1E58], [0x1E5A, 0x1E5A], [0x1E5C, 0x1E5C], [0x1E5E, 0x1E5E], [0x1E60, 0x1E60], [0x1E62, 0x1E62], [0x1E64, 0x1E64], [0x1E66, 0x1E66], [0x1E68, 0x1E68], [0x1E6A, 0x1E6A], [0x1E6C, 0x1E6C], [0x1E6E, 0x1E6E], [0x1E70, 0x1E70], [0x1E72, 0x1E72], [0x1E74, 0x1E74], [0x1E76, 0x1E76], [0x1E78, 0x1E78], [0x1E7A, 0x1E7A], [0x1E7C, 0x1E7C], [0x1E7E, 0x1E7E], [0x1E80, 0x1E80], [0x1E82, 0x1E82], [0x1E84, 0x1E84], [0x1E86, 0x1E86], [0x1E88, 0x1E88], [0x1E8A, 0x1E8A], [0x1E8C, 0x1E8C], [0x1E8E, 0x1E8E], [0x1E90, 0x1E90], [0x1E92, 0x1E92], [0x1E94, 0x1E94], [0x1EA0, 0x1EA0], [0x1EA2, 0x1EA2], [0x1EA4, 0x1EA4], [0x1EA6, 0x1EA6], [0x1EA8, 0x1EA8], [0x1EAA, 0x1EAA], [0x1EAC, 0x1EAC], [0x1EAE, 0x1EAE], [0x1EB0, 0x1EB0], [0x1EB2, 0x1EB2], [0x1EB4, 0x1EB4], [0x1EB6, 0x1EB6], [0x1EB8, 0x1EB8], [0x1EBA, 0x1EBA], [0x1EBC, 0x1EBC], [0x1EBE, 0x1EBE], [0x1EC0, 0x1EC0], [0x1EC2, 0x1EC2], [0x1EC4, 0x1EC4], [0x1EC6, 0x1EC6], [0x1EC8, 0x1EC8], [0x1ECA, 0x1ECA], [0x1ECC, 0x1ECC], [0x1ECE, 0x1ECE], [0x1ED0, 0x1ED0], [0x1ED2, 0x1ED2], [0x1ED4, 0x1ED4], [0x1ED6, 0x1ED6], [0x1ED8, 0x1ED8], [0x1EDA, 0x1EDA], [0x1EDC, 0x1EDC], [0x1EDE, 0x1EDE], [0x1EE0, 0x1EE0], [0x1EE2, 0x1EE2], [0x1EE4, 0x1EE4], [0x1EE6, 0x1EE6], [0x1EE8, 0x1EE8], [0x1EEA, 0x1EEA], [0x1EEC, 0x1EEC], [0x1EEE, 0x1EEE], [0x1EF0, 0x1EF0], [0x1EF2, 0x1EF2], [0x1EF4, 0x1EF4], [0x1EF6, 0x1EF6], [0x1EF8, 0x1EF8], [0x1F08, 0x1F0F], [0x1F18, 0x1F1D], [0x1F28, 0x1F2F], [0x1F38, 0x1F3F], [0x1F48, 0x1F4D], [0x1F59, 0x1F59], [0x1F5B, 0x1F5B], [0x1F5D, 0x1F5D], [0x1F5F, 0x1F5F], [0x1F68, 0x1F6F], [0x1FB8, 0x1FBB], [0x1FC8, 0x1FCB], [0x1FD8, 0x1FDB], [0x1FE8, 0x1FEC], [0x1FF8, 0x1FFB], [0x2102, 0x2102], [0x2107, 0x2107], [0x210B, 0x210D], [0x2110, 0x2112], [0x2115, 0x2115], [0x2119, 0x211D], [0x2124, 0x2124], [0x2126, 0x2126], [0x2128, 0x2128], [0x212A, 0x212D], [0x2130, 0x2131], [0x2133, 0x2133], [0x213E, 0x213F], [0x2145, 0x2145], [0x2C00, 0x2C2E], [0x2C80, 0x2C80], [0x2C82, 0x2C82], [0x2C84, 0x2C84], [0x2C86, 0x2C86], [0x2C88, 0x2C88], [0x2C8A, 0x2C8A], [0x2C8C, 0x2C8C], [0x2C8E, 0x2C8E], [0x2C90, 0x2C90], [0x2C92, 0x2C92], [0x2C94, 0x2C94], [0x2C96, 0x2C96], [0x2C98, 0x2C98], [0x2C9A, 0x2C9A], [0x2C9C, 0x2C9C], [0x2C9E, 0x2C9E], [0x2CA0, 0x2CA0], [0x2CA2, 0x2CA2], [0x2CA4, 0x2CA4], [0x2CA6, 0x2CA6], [0x2CA8, 0x2CA8], [0x2CAA, 0x2CAA], [0x2CAC, 0x2CAC], [0x2CAE, 0x2CAE], [0x2CB0, 0x2CB0], [0x2CB2, 0x2CB2], [0x2CB4, 0x2CB4], [0x2CB6, 0x2CB6], [0x2CB8, 0x2CB8], [0x2CBA, 0x2CBA], [0x2CBC, 0x2CBC], [0x2CBE, 0x2CBE], [0x2CC0, 0x2CC0], [0x2CC2, 0x2CC2], [0x2CC4, 0x2CC4], [0x2CC6, 0x2CC6], [0x2CC8, 0x2CC8], [0x2CCA, 0x2CCA], [0x2CCC, 0x2CCC], [0x2CCE, 0x2CCE], [0x2CD0, 0x2CD0], [0x2CD2, 0x2CD2], [0x2CD4, 0x2CD4], [0x2CD6, 0x2CD6], [0x2CD8, 0x2CD8], [0x2CDA, 0x2CDA], [0x2CDC, 0x2CDC], [0x2CDE, 0x2CDE], [0x2CE0, 0x2CE0], [0x2CE2, 0x2CE2], [0xFF21, 0xFF3A]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Lu.length; indexI++) { - for (indexJ = Lu[indexI][0]; indexJ <= Lu[indexI][1]; indexJ++) { - try { - var hex = decimalToHexString(indexJ); - var identifier1 = String.fromCharCode(indexJ); - var identifier2 = "\\u" + hex; - eval(identifier2 + " = 1"); - if (eval(identifier1 + " === " + identifier2) !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_410/S7.6_A5.2_T10.js b/tests/ES3/Unicode/Unicode_410/S7.6_A5.2_T10.js deleted file mode 100644 index 596e2b172..000000000 --- a/tests/ES3/Unicode/Unicode_410/S7.6_A5.2_T10.js +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A5.2_T10; - * @section: 7.6, 6; - * @assertion: If a \UnicodeEscapeSequence sequence were replaced by its UnicodeEscapeSequence's CV, the result must still be a valid Identifier that has the exact same sequence of characters as the original Identifier; - * @description: The CV of UnicodeEscapeSequence is Pc. - * Complex test with eval; -*/ - -//CHECK -Pc = [[0x005F, 0x005F], [0x203F, 0x2040], [0x2054, 0x2054], [0xFE33, 0xFE34], [0xFE4D, 0xFE4F], [0xFF3F, 0xFF3F]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Pc.length; indexI++) { - for (indexJ = Pc[indexI][0]; indexJ <= Pc[indexI][1]; indexJ++) { - try { - var hex = decimalToHexString(indexJ); - var identifier1 = "$" + String.fromCharCode(indexJ); - var identifier2 = "$\\u" + hex; - eval(identifier2 + " = 1"); - if (eval(identifier1 + " === " + identifier2) !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_410/S7.6_A5.2_T2.js b/tests/ES3/Unicode/Unicode_410/S7.6_A5.2_T2.js deleted file mode 100644 index aacb12dd4..000000000 --- a/tests/ES3/Unicode/Unicode_410/S7.6_A5.2_T2.js +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A5.2_T2; - * @section: 7.6, 6; - * @assertion: If a \UnicodeEscapeSequence sequence were replaced by its UnicodeEscapeSequence's CV, the result must still be a valid Identifier that has the exact same sequence of characters as the original Identifier; - * @description: The CV of UnicodeEscapeSequence is Ll. - * Complex test with eval; -*/ - -//CHECK -Ll = [[0x0061, 0x007A], [0x00AA, 0x00AA], [0x00B5, 0x00B5], [0x00BA, 0x00BA], [0x00DF, 0x00F6], [0x00F8, 0x00FF], [0x0101, 0x0101], [0x0103, 0x0103], [0x0105, 0x0105], [0x0107, 0x0107], [0x0109, 0x0109], [0x010B, 0x010B], [0x010D, 0x010D], [0x010F, 0x010F], [0x0111, 0x0111], [0x0113, 0x0113], [0x0115, 0x0115], [0x0117, 0x0117], [0x0119, 0x0119], [0x011B, 0x011B], [0x011D, 0x011D], [0x011F, 0x011F], [0x0121, 0x0121], [0x0123, 0x0123], [0x0125, 0x0125], [0x0127, 0x0127], [0x0129, 0x0129], [0x012B, 0x012B], [0x012D, 0x012D], [0x012F, 0x012F], [0x0131, 0x0131], [0x0133, 0x0133], [0x0135, 0x0135], [0x0137, 0x0138], [0x013A, 0x013A], [0x013C, 0x013C], [0x013E, 0x013E], [0x0140, 0x0140], [0x0142, 0x0142], [0x0144, 0x0144], [0x0146, 0x0146], [0x0148, 0x0149], [0x014B, 0x014B], [0x014D, 0x014D], [0x014F, 0x014F], [0x0151, 0x0151], [0x0153, 0x0153], [0x0155, 0x0155], [0x0157, 0x0157], [0x0159, 0x0159], [0x015B, 0x015B], [0x015D, 0x015D], [0x015F, 0x015F], [0x0161, 0x0161], [0x0163, 0x0163], [0x0165, 0x0165], [0x0167, 0x0167], [0x0169, 0x0169], [0x016B, 0x016B], [0x016D, 0x016D], [0x016F, 0x016F], [0x0171, 0x0171], [0x0173, 0x0173], [0x0175, 0x0175], [0x0177, 0x0177], [0x017A, 0x017A], [0x017C, 0x017C], [0x017E, 0x0180], [0x0183, 0x0183], [0x0185, 0x0185], [0x0188, 0x0188], [0x018C, 0x018D], [0x0192, 0x0192], [0x0195, 0x0195], [0x0199, 0x019B], [0x019E, 0x019E], [0x01A1, 0x01A1], [0x01A3, 0x01A3], [0x01A5, 0x01A5], [0x01A8, 0x01A8], [0x01AA, 0x01AB], [0x01AD, 0x01AD], [0x01B0, 0x01B0], [0x01B4, 0x01B4], [0x01B6, 0x01B6], [0x01B9, 0x01BA], [0x01BD, 0x01BF], [0x01C6, 0x01C6], [0x01C9, 0x01C9], [0x01CC, 0x01CC], [0x01CE, 0x01CE], [0x01D0, 0x01D0], [0x01D2, 0x01D2], [0x01D4, 0x01D4], [0x01D6, 0x01D6], [0x01D8, 0x01D8], [0x01DA, 0x01DA], [0x01DC, 0x01DD], [0x01DF, 0x01DF], [0x01E1, 0x01E1], [0x01E3, 0x01E3], [0x01E5, 0x01E5], [0x01E7, 0x01E7], [0x01E9, 0x01E9], [0x01EB, 0x01EB], [0x01ED, 0x01ED], [0x01EF, 0x01F0], [0x01F3, 0x01F3], [0x01F5, 0x01F5], [0x01F9, 0x01F9], [0x01FB, 0x01FB], [0x01FD, 0x01FD], [0x01FF, 0x01FF], [0x0201, 0x0201], [0x0203, 0x0203], [0x0205, 0x0205], [0x0207, 0x0207], [0x0209, 0x0209], [0x020B, 0x020B], [0x020D, 0x020D], [0x020F, 0x020F], [0x0211, 0x0211], [0x0213, 0x0213], [0x0215, 0x0215], [0x0217, 0x0217], [0x0219, 0x0219], [0x021B, 0x021B], [0x021D, 0x021D], [0x021F, 0x021F], [0x0221, 0x0221], [0x0223, 0x0223], [0x0225, 0x0225], [0x0227, 0x0227], [0x0229, 0x0229], [0x022B, 0x022B], [0x022D, 0x022D], [0x022F, 0x022F], [0x0231, 0x0231], [0x0233, 0x0239], [0x023C, 0x023C], [0x023F, 0x0240], [0x0250, 0x02AF], [0x0390, 0x0390], [0x03AC, 0x03CE], [0x03D0, 0x03D1], [0x03D5, 0x03D7], [0x03D9, 0x03D9], [0x03DB, 0x03DB], [0x03DD, 0x03DD], [0x03DF, 0x03DF], [0x03E1, 0x03E1], [0x03E3, 0x03E3], [0x03E5, 0x03E5], [0x03E7, 0x03E7], [0x03E9, 0x03E9], [0x03EB, 0x03EB], [0x03ED, 0x03ED], [0x03EF, 0x03F3], [0x03F5, 0x03F5], [0x03F8, 0x03F8], [0x03FB, 0x03FC], [0x0430, 0x045F], [0x0461, 0x0461], [0x0463, 0x0463], [0x0465, 0x0465], [0x0467, 0x0467], [0x0469, 0x0469], [0x046B, 0x046B], [0x046D, 0x046D], [0x046F, 0x046F], [0x0471, 0x0471], [0x0473, 0x0473], [0x0475, 0x0475], [0x0477, 0x0477], [0x0479, 0x0479], [0x047B, 0x047B], [0x047D, 0x047D], [0x047F, 0x047F], [0x0481, 0x0481], [0x048B, 0x048B], [0x048D, 0x048D], [0x048F, 0x048F], [0x0491, 0x0491], [0x0493, 0x0493], [0x0495, 0x0495], [0x0497, 0x0497], [0x0499, 0x0499], [0x049B, 0x049B], [0x049D, 0x049D], [0x049F, 0x049F], [0x04A1, 0x04A1], [0x04A3, 0x04A3], [0x04A5, 0x04A5], [0x04A7, 0x04A7], [0x04A9, 0x04A9], [0x04AB, 0x04AB], [0x04AD, 0x04AD], [0x04AF, 0x04AF], [0x04B1, 0x04B1], [0x04B3, 0x04B3], [0x04B5, 0x04B5], [0x04B7, 0x04B7], [0x04B9, 0x04B9], [0x04BB, 0x04BB], [0x04BD, 0x04BD], [0x04BF, 0x04BF], [0x04C2, 0x04C2], [0x04C4, 0x04C4], [0x04C6, 0x04C6], [0x04C8, 0x04C8], [0x04CA, 0x04CA], [0x04CC, 0x04CC], [0x04CE, 0x04CE], [0x04D1, 0x04D1], [0x04D3, 0x04D3], [0x04D5, 0x04D5], [0x04D7, 0x04D7], [0x04D9, 0x04D9], [0x04DB, 0x04DB], [0x04DD, 0x04DD], [0x04DF, 0x04DF], [0x04E1, 0x04E1], [0x04E3, 0x04E3], [0x04E5, 0x04E5], [0x04E7, 0x04E7], [0x04E9, 0x04E9], [0x04EB, 0x04EB], [0x04ED, 0x04ED], [0x04EF, 0x04EF], [0x04F1, 0x04F1], [0x04F3, 0x04F3], [0x04F5, 0x04F5], [0x04F7, 0x04F7], [0x04F9, 0x04F9], [0x0501, 0x0501], [0x0503, 0x0503], [0x0505, 0x0505], [0x0507, 0x0507], [0x0509, 0x0509], [0x050B, 0x050B], [0x050D, 0x050D], [0x050F, 0x050F], [0x0561, 0x0587], [0x1D00, 0x1D2B], [0x1D62, 0x1D77], [0x1D79, 0x1D9A], [0x1E01, 0x1E01], [0x1E03, 0x1E03], [0x1E05, 0x1E05], [0x1E07, 0x1E07], [0x1E09, 0x1E09], [0x1E0B, 0x1E0B], [0x1E0D, 0x1E0D], [0x1E0F, 0x1E0F], [0x1E11, 0x1E11], [0x1E13, 0x1E13], [0x1E15, 0x1E15], [0x1E17, 0x1E17], [0x1E19, 0x1E19], [0x1E1B, 0x1E1B], [0x1E1D, 0x1E1D], [0x1E1F, 0x1E1F], [0x1E21, 0x1E21], [0x1E23, 0x1E23], [0x1E25, 0x1E25], [0x1E27, 0x1E27], [0x1E29, 0x1E29], [0x1E2B, 0x1E2B], [0x1E2D, 0x1E2D], [0x1E2F, 0x1E2F], [0x1E31, 0x1E31], [0x1E33, 0x1E33], [0x1E35, 0x1E35], [0x1E37, 0x1E37], [0x1E39, 0x1E39], [0x1E3B, 0x1E3B], [0x1E3D, 0x1E3D], [0x1E3F, 0x1E3F], [0x1E41, 0x1E41], [0x1E43, 0x1E43], [0x1E45, 0x1E45], [0x1E47, 0x1E47], [0x1E49, 0x1E49], [0x1E4B, 0x1E4B], [0x1E4D, 0x1E4D], [0x1E4F, 0x1E4F], [0x1E51, 0x1E51], [0x1E53, 0x1E53], [0x1E55, 0x1E55], [0x1E57, 0x1E57], [0x1E59, 0x1E59], [0x1E5B, 0x1E5B], [0x1E5D, 0x1E5D], [0x1E5F, 0x1E5F], [0x1E61, 0x1E61], [0x1E63, 0x1E63], [0x1E65, 0x1E65], [0x1E67, 0x1E67], [0x1E69, 0x1E69], [0x1E6B, 0x1E6B], [0x1E6D, 0x1E6D], [0x1E6F, 0x1E6F], [0x1E71, 0x1E71], [0x1E73, 0x1E73], [0x1E75, 0x1E75], [0x1E77, 0x1E77], [0x1E79, 0x1E79], [0x1E7B, 0x1E7B], [0x1E7D, 0x1E7D], [0x1E7F, 0x1E7F], [0x1E81, 0x1E81], [0x1E83, 0x1E83], [0x1E85, 0x1E85], [0x1E87, 0x1E87], [0x1E89, 0x1E89], [0x1E8B, 0x1E8B], [0x1E8D, 0x1E8D], [0x1E8F, 0x1E8F], [0x1E91, 0x1E91], [0x1E93, 0x1E93], [0x1E95, 0x1E9B], [0x1EA1, 0x1EA1], [0x1EA3, 0x1EA3], [0x1EA5, 0x1EA5], [0x1EA7, 0x1EA7], [0x1EA9, 0x1EA9], [0x1EAB, 0x1EAB], [0x1EAD, 0x1EAD], [0x1EAF, 0x1EAF], [0x1EB1, 0x1EB1], [0x1EB3, 0x1EB3], [0x1EB5, 0x1EB5], [0x1EB7, 0x1EB7], [0x1EB9, 0x1EB9], [0x1EBB, 0x1EBB], [0x1EBD, 0x1EBD], [0x1EBF, 0x1EBF], [0x1EC1, 0x1EC1], [0x1EC3, 0x1EC3], [0x1EC5, 0x1EC5], [0x1EC7, 0x1EC7], [0x1EC9, 0x1EC9], [0x1ECB, 0x1ECB], [0x1ECD, 0x1ECD], [0x1ECF, 0x1ECF], [0x1ED1, 0x1ED1], [0x1ED3, 0x1ED3], [0x1ED5, 0x1ED5], [0x1ED7, 0x1ED7], [0x1ED9, 0x1ED9], [0x1EDB, 0x1EDB], [0x1EDD, 0x1EDD], [0x1EDF, 0x1EDF], [0x1EE1, 0x1EE1], [0x1EE3, 0x1EE3], [0x1EE5, 0x1EE5], [0x1EE7, 0x1EE7], [0x1EE9, 0x1EE9], [0x1EEB, 0x1EEB], [0x1EED, 0x1EED], [0x1EEF, 0x1EEF], [0x1EF1, 0x1EF1], [0x1EF3, 0x1EF3], [0x1EF5, 0x1EF5], [0x1EF7, 0x1EF7], [0x1EF9, 0x1EF9], [0x1F00, 0x1F07], [0x1F10, 0x1F15], [0x1F20, 0x1F27], [0x1F30, 0x1F37], [0x1F40, 0x1F45], [0x1F50, 0x1F57], [0x1F60, 0x1F67], [0x1F70, 0x1F7D], [0x1F80, 0x1F87], [0x1F90, 0x1F97], [0x1FA0, 0x1FA7], [0x1FB0, 0x1FB4], [0x1FB6, 0x1FB7], [0x1FBE, 0x1FBE], [0x1FC2, 0x1FC4], [0x1FC6, 0x1FC7], [0x1FD0, 0x1FD3], [0x1FD6, 0x1FD7], [0x1FE0, 0x1FE7], [0x1FF2, 0x1FF4], [0x1FF6, 0x1FF7], [0x2071, 0x2071], [0x207F, 0x207F], [0x210A, 0x210A], [0x210E, 0x210F], [0x2113, 0x2113], [0x212F, 0x212F], [0x2134, 0x2134], [0x2139, 0x2139], [0x213C, 0x213D], [0x2146, 0x2149], [0x2C30, 0x2C5E], [0x2C81, 0x2C81], [0x2C83, 0x2C83], [0x2C85, 0x2C85], [0x2C87, 0x2C87], [0x2C89, 0x2C89], [0x2C8B, 0x2C8B], [0x2C8D, 0x2C8D], [0x2C8F, 0x2C8F], [0x2C91, 0x2C91], [0x2C93, 0x2C93], [0x2C95, 0x2C95], [0x2C97, 0x2C97], [0x2C99, 0x2C99], [0x2C9B, 0x2C9B], [0x2C9D, 0x2C9D], [0x2C9F, 0x2C9F], [0x2CA1, 0x2CA1], [0x2CA3, 0x2CA3], [0x2CA5, 0x2CA5], [0x2CA7, 0x2CA7], [0x2CA9, 0x2CA9], [0x2CAB, 0x2CAB], [0x2CAD, 0x2CAD], [0x2CAF, 0x2CAF], [0x2CB1, 0x2CB1], [0x2CB3, 0x2CB3], [0x2CB5, 0x2CB5], [0x2CB7, 0x2CB7], [0x2CB9, 0x2CB9], [0x2CBB, 0x2CBB], [0x2CBD, 0x2CBD], [0x2CBF, 0x2CBF], [0x2CC1, 0x2CC1], [0x2CC3, 0x2CC3], [0x2CC5, 0x2CC5], [0x2CC7, 0x2CC7], [0x2CC9, 0x2CC9], [0x2CCB, 0x2CCB], [0x2CCD, 0x2CCD], [0x2CCF, 0x2CCF], [0x2CD1, 0x2CD1], [0x2CD3, 0x2CD3], [0x2CD5, 0x2CD5], [0x2CD7, 0x2CD7], [0x2CD9, 0x2CD9], [0x2CDB, 0x2CDB], [0x2CDD, 0x2CDD], [0x2CDF, 0x2CDF], [0x2CE1, 0x2CE1], [0x2CE3, 0x2CE4], [0x2D00, 0x2D25], [0xFB00, 0xFB06], [0xFB13, 0xFB17], [0xFF41, 0xFF5A]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Ll.length; indexI++) { - for (indexJ = Ll[indexI][0]; indexJ <= Ll[indexI][1]; indexJ++) { - try { - var hex = decimalToHexString(indexJ); - var identifier1 = String.fromCharCode(indexJ); - var identifier2 = "\\u" + hex; - eval(identifier2 + " = 1"); - if (eval(identifier1 + " === " + identifier2) !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_410/S7.6_A5.2_T3.js b/tests/ES3/Unicode/Unicode_410/S7.6_A5.2_T3.js deleted file mode 100644 index e880bd673..000000000 --- a/tests/ES3/Unicode/Unicode_410/S7.6_A5.2_T3.js +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A5.2_T3; - * @section: 7.6, 6; - * @assertion: If a \UnicodeEscapeSequence sequence were replaced by its UnicodeEscapeSequence's CV, the result must still be a valid Identifier that has the exact same sequence of characters as the original Identifier; - * @description: The CV of UnicodeEscapeSequence is Lt. - * Complex test with eval; -*/ - -//CHECK -Lt = [[0x01C5, 0x01C5], [0x01C8, 0x01C8], [0x01CB, 0x01CB], [0x01F2, 0x01F2], [0x1F88, 0x1F8F], [0x1F98, 0x1F9F], [0x1FA8, 0x1FAF], [0x1FBC, 0x1FBC], [0x1FCC, 0x1FCC], [0x1FFC, 0x1FFC]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Lt.length; indexI++) { - for (indexJ = Lt[indexI][0]; indexJ <= Lt[indexI][1]; indexJ++) { - try { - var hex = decimalToHexString(indexJ); - var identifier1 = String.fromCharCode(indexJ); - var identifier2 = "\\u" + hex; - eval(identifier2 + " = 1"); - if (eval(identifier1 + " === " + identifier2) !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_410/S7.6_A5.2_T4.js b/tests/ES3/Unicode/Unicode_410/S7.6_A5.2_T4.js deleted file mode 100644 index 0bded023b..000000000 --- a/tests/ES3/Unicode/Unicode_410/S7.6_A5.2_T4.js +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A5.2_T4; - * @section: 7.6, 6; - * @assertion: If a \UnicodeEscapeSequence sequence were replaced by its UnicodeEscapeSequence's CV, the result must still be a valid Identifier that has the exact same sequence of characters as the original Identifier; - * @description: The CV of UnicodeEscapeSequence is Lm. - * Complex test with eval; -*/ - -//CHECK -Lm = [[0x02B0, 0x02C1], [0x02C6, 0x02D1], [0x02E0, 0x02E4], [0x02EE, 0x02EE], [0x037A, 0x037A], [0x0559, 0x0559], [0x0640, 0x0640], [0x06E5, 0x06E6], [0x0E46, 0x0E46], [0x0EC6, 0x0EC6], [0x10FC, 0x10FC], [0x17D7, 0x17D7], [0x1843, 0x1843], [0x1D2C, 0x1D61], [0x1D78, 0x1D78], [0x1D9B, 0x1DBF], [0x2090, 0x2094], [0x2D6F, 0x2D6F], [0x3005, 0x3005], [0x3031, 0x3035], [0x303B, 0x303B], [0x309D, 0x309E], [0x30FC, 0x30FE], [0xA015, 0xA015], [0xFF70, 0xFF70], [0xFF9E, 0xFF9F]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Lm.length; indexI++) { - for (indexJ = Lm[indexI][0]; indexJ <= Lm[indexI][1]; indexJ++) { - try { - var hex = decimalToHexString(indexJ); - var identifier1 = String.fromCharCode(indexJ); - var identifier2 = "\\u" + hex; - eval(identifier2 + " = 1"); - if (eval(identifier1 + " === " + identifier2) !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_410/S7.6_A5.2_T5.js b/tests/ES3/Unicode/Unicode_410/S7.6_A5.2_T5.js deleted file mode 100644 index 61054d6b4..000000000 --- a/tests/ES3/Unicode/Unicode_410/S7.6_A5.2_T5.js +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A5.2_T5; - * @section: 7.6, 6; - * @assertion: If a \UnicodeEscapeSequence sequence were replaced by its UnicodeEscapeSequence's CV, the result must still be a valid Identifier that has the exact same sequence of characters as the original Identifier; - * @description: The CV of UnicodeEscapeSequence is Lo. - * Complex test with eval; -*/ - -//CHECK -Lo = [[0x01BB, 0x01BB], [0x01C0, 0x01C3], [0x05D0, 0x05EA], [0x05F0, 0x05F2], [0x0621, 0x063A], [0x0641, 0x064A], [0x066E, 0x066F], [0x0671, 0x06D3], [0x06D5, 0x06D5], [0x06EE, 0x06EF], [0x06FA, 0x06FC], [0x06FF, 0x06FF], [0x0710, 0x0710], [0x0712, 0x072F], [0x074D, 0x076D], [0x0780, 0x07A5], [0x07B1, 0x07B1], [0x0904, 0x0939], [0x093D, 0x093D], [0x0950, 0x0950], [0x0958, 0x0961], [0x097D, 0x097D], [0x0985, 0x098C], [0x098F, 0x0990], [0x0993, 0x09A8], [0x09AA, 0x09B0], [0x09B2, 0x09B2], [0x09B6, 0x09B9], [0x09BD, 0x09BD], [0x09CE, 0x09CE], [0x09DC, 0x09DD], [0x09DF, 0x09E1], [0x09F0, 0x09F1], [0x0A05, 0x0A0A], [0x0A0F, 0x0A10], [0x0A13, 0x0A28], [0x0A2A, 0x0A30], [0x0A32, 0x0A33], [0x0A35, 0x0A36], [0x0A38, 0x0A39], [0x0A59, 0x0A5C], [0x0A5E, 0x0A5E], [0x0A72, 0x0A74], [0x0A85, 0x0A8D], [0x0A8F, 0x0A91], [0x0A93, 0x0AA8], [0x0AAA, 0x0AB0], [0x0AB2, 0x0AB3], [0x0AB5, 0x0AB9], [0x0ABD, 0x0ABD], [0x0AD0, 0x0AD0], [0x0AE0, 0x0AE1], [0x0B05, 0x0B0C], [0x0B0F, 0x0B10], [0x0B13, 0x0B28], [0x0B2A, 0x0B30], [0x0B32, 0x0B33], [0x0B35, 0x0B39], [0x0B3D, 0x0B3D], [0x0B5C, 0x0B5D], [0x0B5F, 0x0B61], [0x0B71, 0x0B71], [0x0B83, 0x0B83], [0x0B85, 0x0B8A], [0x0B8E, 0x0B90], [0x0B92, 0x0B95], [0x0B99, 0x0B9A], [0x0B9C, 0x0B9C], [0x0B9E, 0x0B9F], [0x0BA3, 0x0BA4], [0x0BA8, 0x0BAA], [0x0BAE, 0x0BB9], [0x0C05, 0x0C0C], [0x0C0E, 0x0C10], [0x0C12, 0x0C28], [0x0C2A, 0x0C33], [0x0C35, 0x0C39], [0x0C60, 0x0C61], [0x0C85, 0x0C8C], [0x0C8E, 0x0C90], [0x0C92, 0x0CA8], [0x0CAA, 0x0CB3], [0x0CB5, 0x0CB9], [0x0CBD, 0x0CBD], [0x0CDE, 0x0CDE], [0x0CE0, 0x0CE1], [0x0D05, 0x0D0C], [0x0D0E, 0x0D10], [0x0D12, 0x0D28], [0x0D2A, 0x0D39], [0x0D60, 0x0D61], [0x0D85, 0x0D96], [0x0D9A, 0x0DB1], [0x0DB3, 0x0DBB], [0x0DBD, 0x0DBD], [0x0DC0, 0x0DC6], [0x0E01, 0x0E30], [0x0E32, 0x0E33], [0x0E40, 0x0E45], [0x0E81, 0x0E82], [0x0E84, 0x0E84], [0x0E87, 0x0E88], [0x0E8A, 0x0E8A], [0x0E8D, 0x0E8D], [0x0E94, 0x0E97], [0x0E99, 0x0E9F], [0x0EA1, 0x0EA3], [0x0EA5, 0x0EA5], [0x0EA7, 0x0EA7], [0x0EAA, 0x0EAB], [0x0EAD, 0x0EB0], [0x0EB2, 0x0EB3], [0x0EBD, 0x0EBD], [0x0EC0, 0x0EC4], [0x0EDC, 0x0EDD], [0x0F00, 0x0F00], [0x0F40, 0x0F47], [0x0F49, 0x0F6A], [0x0F88, 0x0F8B], [0x1000, 0x1021], [0x1023, 0x1027], [0x1029, 0x102A], [0x1050, 0x1055], [0x10D0, 0x10FA], [0x1100, 0x1159], [0x115F, 0x11A2], [0x11A8, 0x11F9], [0x1200, 0x1248], [0x124A, 0x124D], [0x1250, 0x1256], [0x1258, 0x1258], [0x125A, 0x125D], [0x1260, 0x1288], [0x128A, 0x128D], [0x1290, 0x12B0], [0x12B2, 0x12B5], [0x12B8, 0x12BE], [0x12C0, 0x12C0], [0x12C2, 0x12C5], [0x12C8, 0x12D6], [0x12D8, 0x1310], [0x1312, 0x1315], [0x1318, 0x135A], [0x1380, 0x138F], [0x13A0, 0x13F4], [0x1401, 0x166C], [0x166F, 0x1676], [0x1681, 0x169A], [0x16A0, 0x16EA], [0x1700, 0x170C], [0x170E, 0x1711], [0x1720, 0x1731], [0x1740, 0x1751], [0x1760, 0x176C], [0x176E, 0x1770], [0x1780, 0x17B3], [0x17DC, 0x17DC], [0x1820, 0x1842], [0x1844, 0x1877], [0x1880, 0x18A8], [0x1900, 0x191C], [0x1950, 0x196D], [0x1970, 0x1974], [0x1980, 0x19A9], [0x19C1, 0x19C7], [0x1A00, 0x1A16], [0x2135, 0x2138], [0x2D30, 0x2D65], [0x2D80, 0x2D96], [0x2DA0, 0x2DA6], [0x2DA8, 0x2DAE], [0x2DB0, 0x2DB6], [0x2DB8, 0x2DBE], [0x2DC0, 0x2DC6], [0x2DC8, 0x2DCE], [0x2DD0, 0x2DD6], [0x2DD8, 0x2DDE], [0x3006, 0x3006], [0x303C, 0x303C], [0x3041, 0x3096], [0x309F, 0x309F], [0x30A1, 0x30FA], [0x30FF, 0x30FF], [0x3105, 0x312C], [0x3131, 0x318E], [0x31A0, 0x31B7], [0x31F0, 0x31FF], [0x3400, 0x4DB5], [0x4E00, 0x9FBB], [0xA000, 0xA014], [0xA016, 0xA48C], [0xA800, 0xA801], [0xA803, 0xA805], [0xA807, 0xA80A], [0xA80C, 0xA822], [0xAC00, 0xD7A3], [0xF900, 0xFA2D], [0xFA30, 0xFA6A], [0xFA70, 0xFAD9], [0xFB1D, 0xFB1D], [0xFB1F, 0xFB28], [0xFB2A, 0xFB36], [0xFB38, 0xFB3C], [0xFB3E, 0xFB3E], [0xFB40, 0xFB41], [0xFB43, 0xFB44], [0xFB46, 0xFBB1], [0xFBD3, 0xFD3D], [0xFD50, 0xFD8F], [0xFD92, 0xFDC7], [0xFDF0, 0xFDFB], [0xFE70, 0xFE74], [0xFE76, 0xFEFC], [0xFF66, 0xFF6F], [0xFF71, 0xFF9D], [0xFFA0, 0xFFBE], [0xFFC2, 0xFFC7], [0xFFCA, 0xFFCF], [0xFFD2, 0xFFD7], [0xFFDA, 0xFFDC]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Lo.length; indexI++) { - for (indexJ = Lo[indexI][0]; indexJ <= Lo[indexI][1]; indexJ++) { - try { - var hex = decimalToHexString(indexJ); - var identifier1 = String.fromCharCode(indexJ); - var identifier2 = "\\u" + hex; - eval(identifier2 + " = 1"); - if (eval(identifier1 + " === " + identifier2) !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_410/S7.6_A5.2_T6.js b/tests/ES3/Unicode/Unicode_410/S7.6_A5.2_T6.js deleted file mode 100644 index 4e1ae9dc9..000000000 --- a/tests/ES3/Unicode/Unicode_410/S7.6_A5.2_T6.js +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A5.2_T6; - * @section: 7.6, 6; - * @assertion: If a \UnicodeEscapeSequence sequence were replaced by its UnicodeEscapeSequence's CV, the result must still be a valid Identifier that has the exact same sequence of characters as the original Identifier; - * @description: The CV of UnicodeEscapeSequence is Nl. - * Complex test with eval; -*/ - -//CHECK -Nl = [[0x16EE, 0x16F0], [0x2160, 0x2183], [0x3007, 0x3007], [0x3021, 0x3029], [0x3038, 0x303A]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Nl.length; indexI++) { - for (indexJ = Nl[indexI][0]; indexJ <= Nl[indexI][1]; indexJ++) { - try { - var hex = decimalToHexString(indexJ); - var identifier1 = "$" + String.fromCharCode(indexJ); - var identifier2 = "$\\u" + hex; - eval(identifier2 + " = 1"); - if (eval(identifier1 + " === " + identifier2) !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_410/S7.6_A5.2_T7.js b/tests/ES3/Unicode/Unicode_410/S7.6_A5.2_T7.js deleted file mode 100644 index 857a9f64d..000000000 --- a/tests/ES3/Unicode/Unicode_410/S7.6_A5.2_T7.js +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A5.2_T7; - * @section: 7.6, 6; - * @assertion: If a \UnicodeEscapeSequence sequence were replaced by its UnicodeEscapeSequence's CV, the result must still be a valid Identifier that has the exact same sequence of characters as the original Identifier; - * @description: The CV of UnicodeEscapeSequence is Mn. - * Complex test with eval; -*/ - -//CHECK -Mn = [[0x0300, 0x036F], [0x0483, 0x0486], [0x0591, 0x05B9], [0x05BB, 0x05BD], [0x05BF, 0x05BF], [0x05C1, 0x05C2], [0x05C4, 0x05C5], [0x05C7, 0x05C7], [0x0610, 0x0615], [0x064B, 0x065E], [0x0670, 0x0670], [0x06D6, 0x06DC], [0x06DF, 0x06E4], [0x06E7, 0x06E8], [0x06EA, 0x06ED], [0x0711, 0x0711], [0x0730, 0x074A], [0x07A6, 0x07B0], [0x0901, 0x0902], [0x093C, 0x093C], [0x0941, 0x0948], [0x094D, 0x094D], [0x0951, 0x0954], [0x0962, 0x0963], [0x0981, 0x0981], [0x09BC, 0x09BC], [0x09C1, 0x09C4], [0x09CD, 0x09CD], [0x09E2, 0x09E3], [0x0A01, 0x0A02], [0x0A3C, 0x0A3C], [0x0A41, 0x0A42], [0x0A47, 0x0A48], [0x0A4B, 0x0A4D], [0x0A70, 0x0A71], [0x0A81, 0x0A82], [0x0ABC, 0x0ABC], [0x0AC1, 0x0AC5], [0x0AC7, 0x0AC8], [0x0ACD, 0x0ACD], [0x0AE2, 0x0AE3], [0x0B01, 0x0B01], [0x0B3C, 0x0B3C], [0x0B3F, 0x0B3F], [0x0B41, 0x0B43], [0x0B4D, 0x0B4D], [0x0B56, 0x0B56], [0x0B82, 0x0B82], [0x0BC0, 0x0BC0], [0x0BCD, 0x0BCD], [0x0C3E, 0x0C40], [0x0C46, 0x0C48], [0x0C4A, 0x0C4D], [0x0C55, 0x0C56], [0x0CBC, 0x0CBC], [0x0CBF, 0x0CBF], [0x0CC6, 0x0CC6], [0x0CCC, 0x0CCD], [0x0D41, 0x0D43], [0x0D4D, 0x0D4D], [0x0DCA, 0x0DCA], [0x0DD2, 0x0DD4], [0x0DD6, 0x0DD6], [0x0E31, 0x0E31], [0x0E34, 0x0E3A], [0x0E47, 0x0E4E], [0x0EB1, 0x0EB1], [0x0EB4, 0x0EB9], [0x0EBB, 0x0EBC], [0x0EC8, 0x0ECD], [0x0F18, 0x0F19], [0x0F35, 0x0F35], [0x0F37, 0x0F37], [0x0F39, 0x0F39], [0x0F71, 0x0F7E], [0x0F80, 0x0F84], [0x0F86, 0x0F87], [0x0F90, 0x0F97], [0x0F99, 0x0FBC], [0x0FC6, 0x0FC6], [0x102D, 0x1030], [0x1032, 0x1032], [0x1036, 0x1037], [0x1039, 0x1039], [0x1058, 0x1059], [0x135F, 0x135F], [0x1712, 0x1714], [0x1732, 0x1734], [0x1752, 0x1753], [0x1772, 0x1773], [0x17B7, 0x17BD], [0x17C6, 0x17C6], [0x17C9, 0x17D3], [0x17DD, 0x17DD], [0x180B, 0x180D], [0x18A9, 0x18A9], [0x1920, 0x1922], [0x1927, 0x1928], [0x1932, 0x1932], [0x1939, 0x193B], [0x1A17, 0x1A18], [0x1DC0, 0x1DC3], [0x20D0, 0x20DC], [0x20E1, 0x20E1], [0x20E5, 0x20EB], [0x302A, 0x302F], [0x3099, 0x309A], [0xA806, 0xA806], [0xA80B, 0xA80B], [0xA825, 0xA826], [0xFB1E, 0xFB1E], [0xFE00, 0xFE0F], [0xFE20, 0xFE23]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Mn.length; indexI++) { - for (indexJ = Mn[indexI][0]; indexJ <= Mn[indexI][1]; indexJ++) { - try { - var hex = decimalToHexString(indexJ); - var identifier1 = "$" + String.fromCharCode(indexJ); - var identifier2 = "$\\u" + hex; - eval(identifier2 + " = 1"); - if (eval(identifier1 + " === " + identifier2) !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_410/S7.6_A5.2_T8.js b/tests/ES3/Unicode/Unicode_410/S7.6_A5.2_T8.js deleted file mode 100644 index f1c188d54..000000000 --- a/tests/ES3/Unicode/Unicode_410/S7.6_A5.2_T8.js +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A5.2_T8; - * @section: 7.6, 6; - * @assertion: If a \UnicodeEscapeSequence sequence were replaced by its UnicodeEscapeSequence's CV, the result must still be a valid Identifier that has the exact same sequence of characters as the original Identifier; - * @description: The CV of UnicodeEscapeSequence is Mc. - * Complex test with eval; -*/ - -//CHECK -Mc = [[0x0903, 0x0903], [0x093E, 0x0940], [0x0949, 0x094C], [0x0982, 0x0983], [0x09BE, 0x09C0], [0x09C7, 0x09C8], [0x09CB, 0x09CC], [0x09D7, 0x09D7], [0x0A03, 0x0A03], [0x0A3E, 0x0A40], [0x0A83, 0x0A83], [0x0ABE, 0x0AC0], [0x0AC9, 0x0AC9], [0x0ACB, 0x0ACC], [0x0B02, 0x0B03], [0x0B3E, 0x0B3E], [0x0B40, 0x0B40], [0x0B47, 0x0B48], [0x0B4B, 0x0B4C], [0x0B57, 0x0B57], [0x0BBE, 0x0BBF], [0x0BC1, 0x0BC2], [0x0BC6, 0x0BC8], [0x0BCA, 0x0BCC], [0x0BD7, 0x0BD7], [0x0C01, 0x0C03], [0x0C41, 0x0C44], [0x0C82, 0x0C83], [0x0CBE, 0x0CBE], [0x0CC0, 0x0CC4], [0x0CC7, 0x0CC8], [0x0CCA, 0x0CCB], [0x0CD5, 0x0CD6], [0x0D02, 0x0D03], [0x0D3E, 0x0D40], [0x0D46, 0x0D48], [0x0D4A, 0x0D4C], [0x0D57, 0x0D57], [0x0D82, 0x0D83], [0x0DCF, 0x0DD1], [0x0DD8, 0x0DDF], [0x0DF2, 0x0DF3], [0x0F3E, 0x0F3F], [0x0F7F, 0x0F7F], [0x102C, 0x102C], [0x1031, 0x1031], [0x1038, 0x1038], [0x1056, 0x1057], [0x17B6, 0x17B6], [0x17BE, 0x17C5], [0x17C7, 0x17C8], [0x1923, 0x1926], [0x1929, 0x192B], [0x1930, 0x1931], [0x1933, 0x1938], [0x19B0, 0x19C0], [0x19C8, 0x19C9], [0x1A19, 0x1A1B], [0xA802, 0xA802], [0xA823, 0xA824], [0xA827, 0xA827]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Mc.length; indexI++) { - for (indexJ = Mc[indexI][0]; indexJ <= Mc[indexI][1]; indexJ++) { - try { - var hex = decimalToHexString(indexJ); - var identifier1 = "$" + String.fromCharCode(indexJ); - var identifier2 = "$\\u" + hex; - eval(identifier2 + " = 1"); - if (eval(identifier1 + " === " + identifier2) !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_410/S7.6_A5.2_T9.js b/tests/ES3/Unicode/Unicode_410/S7.6_A5.2_T9.js deleted file mode 100644 index 14ff48cc5..000000000 --- a/tests/ES3/Unicode/Unicode_410/S7.6_A5.2_T9.js +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A5.2_T9; - * @section: 7.6, 6; - * @assertion: If a \UnicodeEscapeSequence sequence were replaced by its UnicodeEscapeSequence's CV, the result must still be a valid Identifier that has the exact same sequence of characters as the original Identifier; - * @description: The CV of UnicodeEscapeSequence is Nd. - * Complex test with eval; -*/ - -//CHECK -Nd = [[0x0030, 0x0039], [0x0660, 0x0669], [0x06F0, 0x06F9], [0x0966, 0x096F], [0x09E6, 0x09EF], [0x0A66, 0x0A6F], [0x0AE6, 0x0AEF], [0x0B66, 0x0B6F], [0x0BE6, 0x0BEF], [0x0C66, 0x0C6F], [0x0CE6, 0x0CEF], [0x0D66, 0x0D6F], [0x0E50, 0x0E59], [0x0ED0, 0x0ED9], [0x0F20, 0x0F29], [0x1040, 0x1049], [0x17E0, 0x17E9], [0x1810, 0x1819], [0x1946, 0x194F], [0x19D0, 0x19D9], [0xFF10, 0xFF19]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Nd.length; indexI++) { - for (indexJ = Nd[indexI][0]; indexJ <= Nd[indexI][1]; indexJ++) { - try { - var hex = decimalToHexString(indexJ); - var identifier1 = "$" + String.fromCharCode(indexJ); - var identifier2 = "$\\u" + hex; - eval(identifier2 + " = 1"); - if (eval(identifier1 + " === " + identifier2) !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_410/S7.6_A5.3_T1.js b/tests/ES3/Unicode/Unicode_410/S7.6_A5.3_T1.js deleted file mode 100644 index 8f5359e97..000000000 --- a/tests/ES3/Unicode/Unicode_410/S7.6_A5.3_T1.js +++ /dev/null @@ -1,153 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A5.3_T1; - * @section: 7.6, 6; - * @assertion: If a UnicodeEscapeSequence put a character into an identifier that would otherwise be illegal, throw SyntaxError; - * @description: Complex test with eval; -*/ - -//CHECK -Lu = [[0x0041, 0x005A], [0x00C0, 0x00D6], [0x00D8, 0x00DE], [0x0100, 0x0100], [0x0102, 0x0102], [0x0104, 0x0104], [0x0106, 0x0106], [0x0108, 0x0108], [0x010A, 0x010A], [0x010C, 0x010C], [0x010E, 0x010E], [0x0110, 0x0110], [0x0112, 0x0112], [0x0114, 0x0114], [0x0116, 0x0116], [0x0118, 0x0118], [0x011A, 0x011A], [0x011C, 0x011C], [0x011E, 0x011E], [0x0120, 0x0120], [0x0122, 0x0122], [0x0124, 0x0124], [0x0126, 0x0126], [0x0128, 0x0128], [0x012A, 0x012A], [0x012C, 0x012C], [0x012E, 0x012E], [0x0130, 0x0130], [0x0132, 0x0132], [0x0134, 0x0134], [0x0136, 0x0136], [0x0139, 0x0139], [0x013B, 0x013B], [0x013D, 0x013D], [0x013F, 0x013F], [0x0141, 0x0141], [0x0143, 0x0143], [0x0145, 0x0145], [0x0147, 0x0147], [0x014A, 0x014A], [0x014C, 0x014C], [0x014E, 0x014E], [0x0150, 0x0150], [0x0152, 0x0152], [0x0154, 0x0154], [0x0156, 0x0156], [0x0158, 0x0158], [0x015A, 0x015A], [0x015C, 0x015C], [0x015E, 0x015E], [0x0160, 0x0160], [0x0162, 0x0162], [0x0164, 0x0164], [0x0166, 0x0166], [0x0168, 0x0168], [0x016A, 0x016A], [0x016C, 0x016C], [0x016E, 0x016E], [0x0170, 0x0170], [0x0172, 0x0172], [0x0174, 0x0174], [0x0176, 0x0176], [0x0178, 0x0179], [0x017B, 0x017B], [0x017D, 0x017D], [0x0181, 0x0182], [0x0184, 0x0184], [0x0186, 0x0187], [0x0189, 0x018B], [0x018E, 0x0191], [0x0193, 0x0194], [0x0196, 0x0198], [0x019C, 0x019D], [0x019F, 0x01A0], [0x01A2, 0x01A2], [0x01A4, 0x01A4], [0x01A6, 0x01A7], [0x01A9, 0x01A9], [0x01AC, 0x01AC], [0x01AE, 0x01AF], [0x01B1, 0x01B3], [0x01B5, 0x01B5], [0x01B7, 0x01B8], [0x01BC, 0x01BC], [0x01C4, 0x01C4], [0x01C7, 0x01C7], [0x01CA, 0x01CA], [0x01CD, 0x01CD], [0x01CF, 0x01CF], [0x01D1, 0x01D1], [0x01D3, 0x01D3], [0x01D5, 0x01D5], [0x01D7, 0x01D7], [0x01D9, 0x01D9], [0x01DB, 0x01DB], [0x01DE, 0x01DE], [0x01E0, 0x01E0], [0x01E2, 0x01E2], [0x01E4, 0x01E4], [0x01E6, 0x01E6], [0x01E8, 0x01E8], [0x01EA, 0x01EA], [0x01EC, 0x01EC], [0x01EE, 0x01EE], [0x01F1, 0x01F1], [0x01F4, 0x01F4], [0x01F6, 0x01F8], [0x01FA, 0x01FA], [0x01FC, 0x01FC], [0x01FE, 0x01FE], [0x0200, 0x0200], [0x0202, 0x0202], [0x0204, 0x0204], [0x0206, 0x0206], [0x0208, 0x0208], [0x020A, 0x020A], [0x020C, 0x020C], [0x020E, 0x020E], [0x0210, 0x0210], [0x0212, 0x0212], [0x0214, 0x0214], [0x0216, 0x0216], [0x0218, 0x0218], [0x021A, 0x021A], [0x021C, 0x021C], [0x021E, 0x021E], [0x0220, 0x0220], [0x0222, 0x0222], [0x0224, 0x0224], [0x0226, 0x0226], [0x0228, 0x0228], [0x022A, 0x022A], [0x022C, 0x022C], [0x022E, 0x022E], [0x0230, 0x0230], [0x0232, 0x0232], [0x023A, 0x023B], [0x023D, 0x023E], [0x0241, 0x0241], [0x0386, 0x0386], [0x0388, 0x038A], [0x038C, 0x038C], [0x038E, 0x038F], [0x0391, 0x03A1], [0x03A3, 0x03AB], [0x03D2, 0x03D4], [0x03D8, 0x03D8], [0x03DA, 0x03DA], [0x03DC, 0x03DC], [0x03DE, 0x03DE], [0x03E0, 0x03E0], [0x03E2, 0x03E2], [0x03E4, 0x03E4], [0x03E6, 0x03E6], [0x03E8, 0x03E8], [0x03EA, 0x03EA], [0x03EC, 0x03EC], [0x03EE, 0x03EE], [0x03F4, 0x03F4], [0x03F7, 0x03F7], [0x03F9, 0x03FA], [0x03FD, 0x042F], [0x0460, 0x0460], [0x0462, 0x0462], [0x0464, 0x0464], [0x0466, 0x0466], [0x0468, 0x0468], [0x046A, 0x046A], [0x046C, 0x046C], [0x046E, 0x046E], [0x0470, 0x0470], [0x0472, 0x0472], [0x0474, 0x0474], [0x0476, 0x0476], [0x0478, 0x0478], [0x047A, 0x047A], [0x047C, 0x047C], [0x047E, 0x047E], [0x0480, 0x0480], [0x048A, 0x048A], [0x048C, 0x048C], [0x048E, 0x048E], [0x0490, 0x0490], [0x0492, 0x0492], [0x0494, 0x0494], [0x0496, 0x0496], [0x0498, 0x0498], [0x049A, 0x049A], [0x049C, 0x049C], [0x049E, 0x049E], [0x04A0, 0x04A0], [0x04A2, 0x04A2], [0x04A4, 0x04A4], [0x04A6, 0x04A6], [0x04A8, 0x04A8], [0x04AA, 0x04AA], [0x04AC, 0x04AC], [0x04AE, 0x04AE], [0x04B0, 0x04B0], [0x04B2, 0x04B2], [0x04B4, 0x04B4], [0x04B6, 0x04B6], [0x04B8, 0x04B8], [0x04BA, 0x04BA], [0x04BC, 0x04BC], [0x04BE, 0x04BE], [0x04C0, 0x04C1], [0x04C3, 0x04C3], [0x04C5, 0x04C5], [0x04C7, 0x04C7], [0x04C9, 0x04C9], [0x04CB, 0x04CB], [0x04CD, 0x04CD], [0x04D0, 0x04D0], [0x04D2, 0x04D2], [0x04D4, 0x04D4], [0x04D6, 0x04D6], [0x04D8, 0x04D8], [0x04DA, 0x04DA], [0x04DC, 0x04DC], [0x04DE, 0x04DE], [0x04E0, 0x04E0], [0x04E2, 0x04E2], [0x04E4, 0x04E4], [0x04E6, 0x04E6], [0x04E8, 0x04E8], [0x04EA, 0x04EA], [0x04EC, 0x04EC], [0x04EE, 0x04EE], [0x04F0, 0x04F0], [0x04F2, 0x04F2], [0x04F4, 0x04F4], [0x04F6, 0x04F6], [0x04F8, 0x04F8], [0x0500, 0x0500], [0x0502, 0x0502], [0x0504, 0x0504], [0x0506, 0x0506], [0x0508, 0x0508], [0x050A, 0x050A], [0x050C, 0x050C], [0x050E, 0x050E], [0x0531, 0x0556], [0x10A0, 0x10C5], [0x1E00, 0x1E00], [0x1E02, 0x1E02], [0x1E04, 0x1E04], [0x1E06, 0x1E06], [0x1E08, 0x1E08], [0x1E0A, 0x1E0A], [0x1E0C, 0x1E0C], [0x1E0E, 0x1E0E], [0x1E10, 0x1E10], [0x1E12, 0x1E12], [0x1E14, 0x1E14], [0x1E16, 0x1E16], [0x1E18, 0x1E18], [0x1E1A, 0x1E1A], [0x1E1C, 0x1E1C], [0x1E1E, 0x1E1E], [0x1E20, 0x1E20], [0x1E22, 0x1E22], [0x1E24, 0x1E24], [0x1E26, 0x1E26], [0x1E28, 0x1E28], [0x1E2A, 0x1E2A], [0x1E2C, 0x1E2C], [0x1E2E, 0x1E2E], [0x1E30, 0x1E30], [0x1E32, 0x1E32], [0x1E34, 0x1E34], [0x1E36, 0x1E36], [0x1E38, 0x1E38], [0x1E3A, 0x1E3A], [0x1E3C, 0x1E3C], [0x1E3E, 0x1E3E], [0x1E40, 0x1E40], [0x1E42, 0x1E42], [0x1E44, 0x1E44], [0x1E46, 0x1E46], [0x1E48, 0x1E48], [0x1E4A, 0x1E4A], [0x1E4C, 0x1E4C], [0x1E4E, 0x1E4E], [0x1E50, 0x1E50], [0x1E52, 0x1E52], [0x1E54, 0x1E54], [0x1E56, 0x1E56], [0x1E58, 0x1E58], [0x1E5A, 0x1E5A], [0x1E5C, 0x1E5C], [0x1E5E, 0x1E5E], [0x1E60, 0x1E60], [0x1E62, 0x1E62], [0x1E64, 0x1E64], [0x1E66, 0x1E66], [0x1E68, 0x1E68], [0x1E6A, 0x1E6A], [0x1E6C, 0x1E6C], [0x1E6E, 0x1E6E], [0x1E70, 0x1E70], [0x1E72, 0x1E72], [0x1E74, 0x1E74], [0x1E76, 0x1E76], [0x1E78, 0x1E78], [0x1E7A, 0x1E7A], [0x1E7C, 0x1E7C], [0x1E7E, 0x1E7E], [0x1E80, 0x1E80], [0x1E82, 0x1E82], [0x1E84, 0x1E84], [0x1E86, 0x1E86], [0x1E88, 0x1E88], [0x1E8A, 0x1E8A], [0x1E8C, 0x1E8C], [0x1E8E, 0x1E8E], [0x1E90, 0x1E90], [0x1E92, 0x1E92], [0x1E94, 0x1E94], [0x1EA0, 0x1EA0], [0x1EA2, 0x1EA2], [0x1EA4, 0x1EA4], [0x1EA6, 0x1EA6], [0x1EA8, 0x1EA8], [0x1EAA, 0x1EAA], [0x1EAC, 0x1EAC], [0x1EAE, 0x1EAE], [0x1EB0, 0x1EB0], [0x1EB2, 0x1EB2], [0x1EB4, 0x1EB4], [0x1EB6, 0x1EB6], [0x1EB8, 0x1EB8], [0x1EBA, 0x1EBA], [0x1EBC, 0x1EBC], [0x1EBE, 0x1EBE], [0x1EC0, 0x1EC0], [0x1EC2, 0x1EC2], [0x1EC4, 0x1EC4], [0x1EC6, 0x1EC6], [0x1EC8, 0x1EC8], [0x1ECA, 0x1ECA], [0x1ECC, 0x1ECC], [0x1ECE, 0x1ECE], [0x1ED0, 0x1ED0], [0x1ED2, 0x1ED2], [0x1ED4, 0x1ED4], [0x1ED6, 0x1ED6], [0x1ED8, 0x1ED8], [0x1EDA, 0x1EDA], [0x1EDC, 0x1EDC], [0x1EDE, 0x1EDE], [0x1EE0, 0x1EE0], [0x1EE2, 0x1EE2], [0x1EE4, 0x1EE4], [0x1EE6, 0x1EE6], [0x1EE8, 0x1EE8], [0x1EEA, 0x1EEA], [0x1EEC, 0x1EEC], [0x1EEE, 0x1EEE], [0x1EF0, 0x1EF0], [0x1EF2, 0x1EF2], [0x1EF4, 0x1EF4], [0x1EF6, 0x1EF6], [0x1EF8, 0x1EF8], [0x1F08, 0x1F0F], [0x1F18, 0x1F1D], [0x1F28, 0x1F2F], [0x1F38, 0x1F3F], [0x1F48, 0x1F4D], [0x1F59, 0x1F59], [0x1F5B, 0x1F5B], [0x1F5D, 0x1F5D], [0x1F5F, 0x1F5F], [0x1F68, 0x1F6F], [0x1FB8, 0x1FBB], [0x1FC8, 0x1FCB], [0x1FD8, 0x1FDB], [0x1FE8, 0x1FEC], [0x1FF8, 0x1FFB], [0x2102, 0x2102], [0x2107, 0x2107], [0x210B, 0x210D], [0x2110, 0x2112], [0x2115, 0x2115], [0x2119, 0x211D], [0x2124, 0x2124], [0x2126, 0x2126], [0x2128, 0x2128], [0x212A, 0x212D], [0x2130, 0x2131], [0x2133, 0x2133], [0x213E, 0x213F], [0x2145, 0x2145], [0x2C00, 0x2C2E], [0x2C80, 0x2C80], [0x2C82, 0x2C82], [0x2C84, 0x2C84], [0x2C86, 0x2C86], [0x2C88, 0x2C88], [0x2C8A, 0x2C8A], [0x2C8C, 0x2C8C], [0x2C8E, 0x2C8E], [0x2C90, 0x2C90], [0x2C92, 0x2C92], [0x2C94, 0x2C94], [0x2C96, 0x2C96], [0x2C98, 0x2C98], [0x2C9A, 0x2C9A], [0x2C9C, 0x2C9C], [0x2C9E, 0x2C9E], [0x2CA0, 0x2CA0], [0x2CA2, 0x2CA2], [0x2CA4, 0x2CA4], [0x2CA6, 0x2CA6], [0x2CA8, 0x2CA8], [0x2CAA, 0x2CAA], [0x2CAC, 0x2CAC], [0x2CAE, 0x2CAE], [0x2CB0, 0x2CB0], [0x2CB2, 0x2CB2], [0x2CB4, 0x2CB4], [0x2CB6, 0x2CB6], [0x2CB8, 0x2CB8], [0x2CBA, 0x2CBA], [0x2CBC, 0x2CBC], [0x2CBE, 0x2CBE], [0x2CC0, 0x2CC0], [0x2CC2, 0x2CC2], [0x2CC4, 0x2CC4], [0x2CC6, 0x2CC6], [0x2CC8, 0x2CC8], [0x2CCA, 0x2CCA], [0x2CCC, 0x2CCC], [0x2CCE, 0x2CCE], [0x2CD0, 0x2CD0], [0x2CD2, 0x2CD2], [0x2CD4, 0x2CD4], [0x2CD6, 0x2CD6], [0x2CD8, 0x2CD8], [0x2CDA, 0x2CDA], [0x2CDC, 0x2CDC], [0x2CDE, 0x2CDE], [0x2CE0, 0x2CE0], [0x2CE2, 0x2CE2], [0xFF21, 0xFF3A]]; -Ll = [[0x0061, 0x007A], [0x00AA, 0x00AA], [0x00B5, 0x00B5], [0x00BA, 0x00BA], [0x00DF, 0x00F6], [0x00F8, 0x00FF], [0x0101, 0x0101], [0x0103, 0x0103], [0x0105, 0x0105], [0x0107, 0x0107], [0x0109, 0x0109], [0x010B, 0x010B], [0x010D, 0x010D], [0x010F, 0x010F], [0x0111, 0x0111], [0x0113, 0x0113], [0x0115, 0x0115], [0x0117, 0x0117], [0x0119, 0x0119], [0x011B, 0x011B], [0x011D, 0x011D], [0x011F, 0x011F], [0x0121, 0x0121], [0x0123, 0x0123], [0x0125, 0x0125], [0x0127, 0x0127], [0x0129, 0x0129], [0x012B, 0x012B], [0x012D, 0x012D], [0x012F, 0x012F], [0x0131, 0x0131], [0x0133, 0x0133], [0x0135, 0x0135], [0x0137, 0x0138], [0x013A, 0x013A], [0x013C, 0x013C], [0x013E, 0x013E], [0x0140, 0x0140], [0x0142, 0x0142], [0x0144, 0x0144], [0x0146, 0x0146], [0x0148, 0x0149], [0x014B, 0x014B], [0x014D, 0x014D], [0x014F, 0x014F], [0x0151, 0x0151], [0x0153, 0x0153], [0x0155, 0x0155], [0x0157, 0x0157], [0x0159, 0x0159], [0x015B, 0x015B], [0x015D, 0x015D], [0x015F, 0x015F], [0x0161, 0x0161], [0x0163, 0x0163], [0x0165, 0x0165], [0x0167, 0x0167], [0x0169, 0x0169], [0x016B, 0x016B], [0x016D, 0x016D], [0x016F, 0x016F], [0x0171, 0x0171], [0x0173, 0x0173], [0x0175, 0x0175], [0x0177, 0x0177], [0x017A, 0x017A], [0x017C, 0x017C], [0x017E, 0x0180], [0x0183, 0x0183], [0x0185, 0x0185], [0x0188, 0x0188], [0x018C, 0x018D], [0x0192, 0x0192], [0x0195, 0x0195], [0x0199, 0x019B], [0x019E, 0x019E], [0x01A1, 0x01A1], [0x01A3, 0x01A3], [0x01A5, 0x01A5], [0x01A8, 0x01A8], [0x01AA, 0x01AB], [0x01AD, 0x01AD], [0x01B0, 0x01B0], [0x01B4, 0x01B4], [0x01B6, 0x01B6], [0x01B9, 0x01BA], [0x01BD, 0x01BF], [0x01C6, 0x01C6], [0x01C9, 0x01C9], [0x01CC, 0x01CC], [0x01CE, 0x01CE], [0x01D0, 0x01D0], [0x01D2, 0x01D2], [0x01D4, 0x01D4], [0x01D6, 0x01D6], [0x01D8, 0x01D8], [0x01DA, 0x01DA], [0x01DC, 0x01DD], [0x01DF, 0x01DF], [0x01E1, 0x01E1], [0x01E3, 0x01E3], [0x01E5, 0x01E5], [0x01E7, 0x01E7], [0x01E9, 0x01E9], [0x01EB, 0x01EB], [0x01ED, 0x01ED], [0x01EF, 0x01F0], [0x01F3, 0x01F3], [0x01F5, 0x01F5], [0x01F9, 0x01F9], [0x01FB, 0x01FB], [0x01FD, 0x01FD], [0x01FF, 0x01FF], [0x0201, 0x0201], [0x0203, 0x0203], [0x0205, 0x0205], [0x0207, 0x0207], [0x0209, 0x0209], [0x020B, 0x020B], [0x020D, 0x020D], [0x020F, 0x020F], [0x0211, 0x0211], [0x0213, 0x0213], [0x0215, 0x0215], [0x0217, 0x0217], [0x0219, 0x0219], [0x021B, 0x021B], [0x021D, 0x021D], [0x021F, 0x021F], [0x0221, 0x0221], [0x0223, 0x0223], [0x0225, 0x0225], [0x0227, 0x0227], [0x0229, 0x0229], [0x022B, 0x022B], [0x022D, 0x022D], [0x022F, 0x022F], [0x0231, 0x0231], [0x0233, 0x0239], [0x023C, 0x023C], [0x023F, 0x0240], [0x0250, 0x02AF], [0x0390, 0x0390], [0x03AC, 0x03CE], [0x03D0, 0x03D1], [0x03D5, 0x03D7], [0x03D9, 0x03D9], [0x03DB, 0x03DB], [0x03DD, 0x03DD], [0x03DF, 0x03DF], [0x03E1, 0x03E1], [0x03E3, 0x03E3], [0x03E5, 0x03E5], [0x03E7, 0x03E7], [0x03E9, 0x03E9], [0x03EB, 0x03EB], [0x03ED, 0x03ED], [0x03EF, 0x03F3], [0x03F5, 0x03F5], [0x03F8, 0x03F8], [0x03FB, 0x03FC], [0x0430, 0x045F], [0x0461, 0x0461], [0x0463, 0x0463], [0x0465, 0x0465], [0x0467, 0x0467], [0x0469, 0x0469], [0x046B, 0x046B], [0x046D, 0x046D], [0x046F, 0x046F], [0x0471, 0x0471], [0x0473, 0x0473], [0x0475, 0x0475], [0x0477, 0x0477], [0x0479, 0x0479], [0x047B, 0x047B], [0x047D, 0x047D], [0x047F, 0x047F], [0x0481, 0x0481], [0x048B, 0x048B], [0x048D, 0x048D], [0x048F, 0x048F], [0x0491, 0x0491], [0x0493, 0x0493], [0x0495, 0x0495], [0x0497, 0x0497], [0x0499, 0x0499], [0x049B, 0x049B], [0x049D, 0x049D], [0x049F, 0x049F], [0x04A1, 0x04A1], [0x04A3, 0x04A3], [0x04A5, 0x04A5], [0x04A7, 0x04A7], [0x04A9, 0x04A9], [0x04AB, 0x04AB], [0x04AD, 0x04AD], [0x04AF, 0x04AF], [0x04B1, 0x04B1], [0x04B3, 0x04B3], [0x04B5, 0x04B5], [0x04B7, 0x04B7], [0x04B9, 0x04B9], [0x04BB, 0x04BB], [0x04BD, 0x04BD], [0x04BF, 0x04BF], [0x04C2, 0x04C2], [0x04C4, 0x04C4], [0x04C6, 0x04C6], [0x04C8, 0x04C8], [0x04CA, 0x04CA], [0x04CC, 0x04CC], [0x04CE, 0x04CE], [0x04D1, 0x04D1], [0x04D3, 0x04D3], [0x04D5, 0x04D5], [0x04D7, 0x04D7], [0x04D9, 0x04D9], [0x04DB, 0x04DB], [0x04DD, 0x04DD], [0x04DF, 0x04DF], [0x04E1, 0x04E1], [0x04E3, 0x04E3], [0x04E5, 0x04E5], [0x04E7, 0x04E7], [0x04E9, 0x04E9], [0x04EB, 0x04EB], [0x04ED, 0x04ED], [0x04EF, 0x04EF], [0x04F1, 0x04F1], [0x04F3, 0x04F3], [0x04F5, 0x04F5], [0x04F7, 0x04F7], [0x04F9, 0x04F9], [0x0501, 0x0501], [0x0503, 0x0503], [0x0505, 0x0505], [0x0507, 0x0507], [0x0509, 0x0509], [0x050B, 0x050B], [0x050D, 0x050D], [0x050F, 0x050F], [0x0561, 0x0587], [0x1D00, 0x1D2B], [0x1D62, 0x1D77], [0x1D79, 0x1D9A], [0x1E01, 0x1E01], [0x1E03, 0x1E03], [0x1E05, 0x1E05], [0x1E07, 0x1E07], [0x1E09, 0x1E09], [0x1E0B, 0x1E0B], [0x1E0D, 0x1E0D], [0x1E0F, 0x1E0F], [0x1E11, 0x1E11], [0x1E13, 0x1E13], [0x1E15, 0x1E15], [0x1E17, 0x1E17], [0x1E19, 0x1E19], [0x1E1B, 0x1E1B], [0x1E1D, 0x1E1D], [0x1E1F, 0x1E1F], [0x1E21, 0x1E21], [0x1E23, 0x1E23], [0x1E25, 0x1E25], [0x1E27, 0x1E27], [0x1E29, 0x1E29], [0x1E2B, 0x1E2B], [0x1E2D, 0x1E2D], [0x1E2F, 0x1E2F], [0x1E31, 0x1E31], [0x1E33, 0x1E33], [0x1E35, 0x1E35], [0x1E37, 0x1E37], [0x1E39, 0x1E39], [0x1E3B, 0x1E3B], [0x1E3D, 0x1E3D], [0x1E3F, 0x1E3F], [0x1E41, 0x1E41], [0x1E43, 0x1E43], [0x1E45, 0x1E45], [0x1E47, 0x1E47], [0x1E49, 0x1E49], [0x1E4B, 0x1E4B], [0x1E4D, 0x1E4D], [0x1E4F, 0x1E4F], [0x1E51, 0x1E51], [0x1E53, 0x1E53], [0x1E55, 0x1E55], [0x1E57, 0x1E57], [0x1E59, 0x1E59], [0x1E5B, 0x1E5B], [0x1E5D, 0x1E5D], [0x1E5F, 0x1E5F], [0x1E61, 0x1E61], [0x1E63, 0x1E63], [0x1E65, 0x1E65], [0x1E67, 0x1E67], [0x1E69, 0x1E69], [0x1E6B, 0x1E6B], [0x1E6D, 0x1E6D], [0x1E6F, 0x1E6F], [0x1E71, 0x1E71], [0x1E73, 0x1E73], [0x1E75, 0x1E75], [0x1E77, 0x1E77], [0x1E79, 0x1E79], [0x1E7B, 0x1E7B], [0x1E7D, 0x1E7D], [0x1E7F, 0x1E7F], [0x1E81, 0x1E81], [0x1E83, 0x1E83], [0x1E85, 0x1E85], [0x1E87, 0x1E87], [0x1E89, 0x1E89], [0x1E8B, 0x1E8B], [0x1E8D, 0x1E8D], [0x1E8F, 0x1E8F], [0x1E91, 0x1E91], [0x1E93, 0x1E93], [0x1E95, 0x1E9B], [0x1EA1, 0x1EA1], [0x1EA3, 0x1EA3], [0x1EA5, 0x1EA5], [0x1EA7, 0x1EA7], [0x1EA9, 0x1EA9], [0x1EAB, 0x1EAB], [0x1EAD, 0x1EAD], [0x1EAF, 0x1EAF], [0x1EB1, 0x1EB1], [0x1EB3, 0x1EB3], [0x1EB5, 0x1EB5], [0x1EB7, 0x1EB7], [0x1EB9, 0x1EB9], [0x1EBB, 0x1EBB], [0x1EBD, 0x1EBD], [0x1EBF, 0x1EBF], [0x1EC1, 0x1EC1], [0x1EC3, 0x1EC3], [0x1EC5, 0x1EC5], [0x1EC7, 0x1EC7], [0x1EC9, 0x1EC9], [0x1ECB, 0x1ECB], [0x1ECD, 0x1ECD], [0x1ECF, 0x1ECF], [0x1ED1, 0x1ED1], [0x1ED3, 0x1ED3], [0x1ED5, 0x1ED5], [0x1ED7, 0x1ED7], [0x1ED9, 0x1ED9], [0x1EDB, 0x1EDB], [0x1EDD, 0x1EDD], [0x1EDF, 0x1EDF], [0x1EE1, 0x1EE1], [0x1EE3, 0x1EE3], [0x1EE5, 0x1EE5], [0x1EE7, 0x1EE7], [0x1EE9, 0x1EE9], [0x1EEB, 0x1EEB], [0x1EED, 0x1EED], [0x1EEF, 0x1EEF], [0x1EF1, 0x1EF1], [0x1EF3, 0x1EF3], [0x1EF5, 0x1EF5], [0x1EF7, 0x1EF7], [0x1EF9, 0x1EF9], [0x1F00, 0x1F07], [0x1F10, 0x1F15], [0x1F20, 0x1F27], [0x1F30, 0x1F37], [0x1F40, 0x1F45], [0x1F50, 0x1F57], [0x1F60, 0x1F67], [0x1F70, 0x1F7D], [0x1F80, 0x1F87], [0x1F90, 0x1F97], [0x1FA0, 0x1FA7], [0x1FB0, 0x1FB4], [0x1FB6, 0x1FB7], [0x1FBE, 0x1FBE], [0x1FC2, 0x1FC4], [0x1FC6, 0x1FC7], [0x1FD0, 0x1FD3], [0x1FD6, 0x1FD7], [0x1FE0, 0x1FE7], [0x1FF2, 0x1FF4], [0x1FF6, 0x1FF7], [0x2071, 0x2071], [0x207F, 0x207F], [0x210A, 0x210A], [0x210E, 0x210F], [0x2113, 0x2113], [0x212F, 0x212F], [0x2134, 0x2134], [0x2139, 0x2139], [0x213C, 0x213D], [0x2146, 0x2149], [0x2C30, 0x2C5E], [0x2C81, 0x2C81], [0x2C83, 0x2C83], [0x2C85, 0x2C85], [0x2C87, 0x2C87], [0x2C89, 0x2C89], [0x2C8B, 0x2C8B], [0x2C8D, 0x2C8D], [0x2C8F, 0x2C8F], [0x2C91, 0x2C91], [0x2C93, 0x2C93], [0x2C95, 0x2C95], [0x2C97, 0x2C97], [0x2C99, 0x2C99], [0x2C9B, 0x2C9B], [0x2C9D, 0x2C9D], [0x2C9F, 0x2C9F], [0x2CA1, 0x2CA1], [0x2CA3, 0x2CA3], [0x2CA5, 0x2CA5], [0x2CA7, 0x2CA7], [0x2CA9, 0x2CA9], [0x2CAB, 0x2CAB], [0x2CAD, 0x2CAD], [0x2CAF, 0x2CAF], [0x2CB1, 0x2CB1], [0x2CB3, 0x2CB3], [0x2CB5, 0x2CB5], [0x2CB7, 0x2CB7], [0x2CB9, 0x2CB9], [0x2CBB, 0x2CBB], [0x2CBD, 0x2CBD], [0x2CBF, 0x2CBF], [0x2CC1, 0x2CC1], [0x2CC3, 0x2CC3], [0x2CC5, 0x2CC5], [0x2CC7, 0x2CC7], [0x2CC9, 0x2CC9], [0x2CCB, 0x2CCB], [0x2CCD, 0x2CCD], [0x2CCF, 0x2CCF], [0x2CD1, 0x2CD1], [0x2CD3, 0x2CD3], [0x2CD5, 0x2CD5], [0x2CD7, 0x2CD7], [0x2CD9, 0x2CD9], [0x2CDB, 0x2CDB], [0x2CDD, 0x2CDD], [0x2CDF, 0x2CDF], [0x2CE1, 0x2CE1], [0x2CE3, 0x2CE4], [0x2D00, 0x2D25], [0xFB00, 0xFB06], [0xFB13, 0xFB17], [0xFF41, 0xFF5A]]; -Lt = [[0x01C5, 0x01C5], [0x01C8, 0x01C8], [0x01CB, 0x01CB], [0x01F2, 0x01F2], [0x1F88, 0x1F8F], [0x1F98, 0x1F9F], [0x1FA8, 0x1FAF], [0x1FBC, 0x1FBC], [0x1FCC, 0x1FCC], [0x1FFC, 0x1FFC]]; -Lm = [[0x02B0, 0x02C1], [0x02C6, 0x02D1], [0x02E0, 0x02E4], [0x02EE, 0x02EE], [0x037A, 0x037A], [0x0559, 0x0559], [0x0640, 0x0640], [0x06E5, 0x06E6], [0x0E46, 0x0E46], [0x0EC6, 0x0EC6], [0x10FC, 0x10FC], [0x17D7, 0x17D7], [0x1843, 0x1843], [0x1D2C, 0x1D61], [0x1D78, 0x1D78], [0x1D9B, 0x1DBF], [0x2090, 0x2094], [0x2D6F, 0x2D6F], [0x3005, 0x3005], [0x3031, 0x3035], [0x303B, 0x303B], [0x309D, 0x309E], [0x30FC, 0x30FE], [0xA015, 0xA015], [0xFF70, 0xFF70], [0xFF9E, 0xFF9F]]; -Lo = [[0x01BB, 0x01BB], [0x01C0, 0x01C3], [0x05D0, 0x05EA], [0x05F0, 0x05F2], [0x0621, 0x063A], [0x0641, 0x064A], [0x066E, 0x066F], [0x0671, 0x06D3], [0x06D5, 0x06D5], [0x06EE, 0x06EF], [0x06FA, 0x06FC], [0x06FF, 0x06FF], [0x0710, 0x0710], [0x0712, 0x072F], [0x074D, 0x076D], [0x0780, 0x07A5], [0x07B1, 0x07B1], [0x0904, 0x0939], [0x093D, 0x093D], [0x0950, 0x0950], [0x0958, 0x0961], [0x097D, 0x097D], [0x0985, 0x098C], [0x098F, 0x0990], [0x0993, 0x09A8], [0x09AA, 0x09B0], [0x09B2, 0x09B2], [0x09B6, 0x09B9], [0x09BD, 0x09BD], [0x09CE, 0x09CE], [0x09DC, 0x09DD], [0x09DF, 0x09E1], [0x09F0, 0x09F1], [0x0A05, 0x0A0A], [0x0A0F, 0x0A10], [0x0A13, 0x0A28], [0x0A2A, 0x0A30], [0x0A32, 0x0A33], [0x0A35, 0x0A36], [0x0A38, 0x0A39], [0x0A59, 0x0A5C], [0x0A5E, 0x0A5E], [0x0A72, 0x0A74], [0x0A85, 0x0A8D], [0x0A8F, 0x0A91], [0x0A93, 0x0AA8], [0x0AAA, 0x0AB0], [0x0AB2, 0x0AB3], [0x0AB5, 0x0AB9], [0x0ABD, 0x0ABD], [0x0AD0, 0x0AD0], [0x0AE0, 0x0AE1], [0x0B05, 0x0B0C], [0x0B0F, 0x0B10], [0x0B13, 0x0B28], [0x0B2A, 0x0B30], [0x0B32, 0x0B33], [0x0B35, 0x0B39], [0x0B3D, 0x0B3D], [0x0B5C, 0x0B5D], [0x0B5F, 0x0B61], [0x0B71, 0x0B71], [0x0B83, 0x0B83], [0x0B85, 0x0B8A], [0x0B8E, 0x0B90], [0x0B92, 0x0B95], [0x0B99, 0x0B9A], [0x0B9C, 0x0B9C], [0x0B9E, 0x0B9F], [0x0BA3, 0x0BA4], [0x0BA8, 0x0BAA], [0x0BAE, 0x0BB9], [0x0C05, 0x0C0C], [0x0C0E, 0x0C10], [0x0C12, 0x0C28], [0x0C2A, 0x0C33], [0x0C35, 0x0C39], [0x0C60, 0x0C61], [0x0C85, 0x0C8C], [0x0C8E, 0x0C90], [0x0C92, 0x0CA8], [0x0CAA, 0x0CB3], [0x0CB5, 0x0CB9], [0x0CBD, 0x0CBD], [0x0CDE, 0x0CDE], [0x0CE0, 0x0CE1], [0x0D05, 0x0D0C], [0x0D0E, 0x0D10], [0x0D12, 0x0D28], [0x0D2A, 0x0D39], [0x0D60, 0x0D61], [0x0D85, 0x0D96], [0x0D9A, 0x0DB1], [0x0DB3, 0x0DBB], [0x0DBD, 0x0DBD], [0x0DC0, 0x0DC6], [0x0E01, 0x0E30], [0x0E32, 0x0E33], [0x0E40, 0x0E45], [0x0E81, 0x0E82], [0x0E84, 0x0E84], [0x0E87, 0x0E88], [0x0E8A, 0x0E8A], [0x0E8D, 0x0E8D], [0x0E94, 0x0E97], [0x0E99, 0x0E9F], [0x0EA1, 0x0EA3], [0x0EA5, 0x0EA5], [0x0EA7, 0x0EA7], [0x0EAA, 0x0EAB], [0x0EAD, 0x0EB0], [0x0EB2, 0x0EB3], [0x0EBD, 0x0EBD], [0x0EC0, 0x0EC4], [0x0EDC, 0x0EDD], [0x0F00, 0x0F00], [0x0F40, 0x0F47], [0x0F49, 0x0F6A], [0x0F88, 0x0F8B], [0x1000, 0x1021], [0x1023, 0x1027], [0x1029, 0x102A], [0x1050, 0x1055], [0x10D0, 0x10FA], [0x1100, 0x1159], [0x115F, 0x11A2], [0x11A8, 0x11F9], [0x1200, 0x1248], [0x124A, 0x124D], [0x1250, 0x1256], [0x1258, 0x1258], [0x125A, 0x125D], [0x1260, 0x1288], [0x128A, 0x128D], [0x1290, 0x12B0], [0x12B2, 0x12B5], [0x12B8, 0x12BE], [0x12C0, 0x12C0], [0x12C2, 0x12C5], [0x12C8, 0x12D6], [0x12D8, 0x1310], [0x1312, 0x1315], [0x1318, 0x135A], [0x1380, 0x138F], [0x13A0, 0x13F4], [0x1401, 0x166C], [0x166F, 0x1676], [0x1681, 0x169A], [0x16A0, 0x16EA], [0x1700, 0x170C], [0x170E, 0x1711], [0x1720, 0x1731], [0x1740, 0x1751], [0x1760, 0x176C], [0x176E, 0x1770], [0x1780, 0x17B3], [0x17DC, 0x17DC], [0x1820, 0x1842], [0x1844, 0x1877], [0x1880, 0x18A8], [0x1900, 0x191C], [0x1950, 0x196D], [0x1970, 0x1974], [0x1980, 0x19A9], [0x19C1, 0x19C7], [0x1A00, 0x1A16], [0x2135, 0x2138], [0x2D30, 0x2D65], [0x2D80, 0x2D96], [0x2DA0, 0x2DA6], [0x2DA8, 0x2DAE], [0x2DB0, 0x2DB6], [0x2DB8, 0x2DBE], [0x2DC0, 0x2DC6], [0x2DC8, 0x2DCE], [0x2DD0, 0x2DD6], [0x2DD8, 0x2DDE], [0x3006, 0x3006], [0x303C, 0x303C], [0x3041, 0x3096], [0x309F, 0x309F], [0x30A1, 0x30FA], [0x30FF, 0x30FF], [0x3105, 0x312C], [0x3131, 0x318E], [0x31A0, 0x31B7], [0x31F0, 0x31FF], [0x3400, 0x4DB5], [0x4E00, 0x9FBB], [0xA000, 0xA014], [0xA016, 0xA48C], [0xA800, 0xA801], [0xA803, 0xA805], [0xA807, 0xA80A], [0xA80C, 0xA822], [0xAC00, 0xD7A3], [0xF900, 0xFA2D], [0xFA30, 0xFA6A], [0xFA70, 0xFAD9], [0xFB1D, 0xFB1D], [0xFB1F, 0xFB28], [0xFB2A, 0xFB36], [0xFB38, 0xFB3C], [0xFB3E, 0xFB3E], [0xFB40, 0xFB41], [0xFB43, 0xFB44], [0xFB46, 0xFBB1], [0xFBD3, 0xFD3D], [0xFD50, 0xFD8F], [0xFD92, 0xFDC7], [0xFDF0, 0xFDFB], [0xFE70, 0xFE74], [0xFE76, 0xFEFC], [0xFF66, 0xFF6F], [0xFF71, 0xFF9D], [0xFFA0, 0xFFBE], [0xFFC2, 0xFFC7], [0xFFCA, 0xFFCF], [0xFFD2, 0xFFD7], [0xFFDA, 0xFFDC]]; -Nl = [[0x16EE, 0x16F0], [0x2160, 0x2183], [0x3007, 0x3007], [0x3021, 0x3029], [0x3038, 0x303A]]; -Mn = [[0x0300, 0x036F], [0x0483, 0x0486], [0x0591, 0x05B9], [0x05BB, 0x05BD], [0x05BF, 0x05BF], [0x05C1, 0x05C2], [0x05C4, 0x05C5], [0x05C7, 0x05C7], [0x0610, 0x0615], [0x064B, 0x065E], [0x0670, 0x0670], [0x06D6, 0x06DC], [0x06DF, 0x06E4], [0x06E7, 0x06E8], [0x06EA, 0x06ED], [0x0711, 0x0711], [0x0730, 0x074A], [0x07A6, 0x07B0], [0x0901, 0x0902], [0x093C, 0x093C], [0x0941, 0x0948], [0x094D, 0x094D], [0x0951, 0x0954], [0x0962, 0x0963], [0x0981, 0x0981], [0x09BC, 0x09BC], [0x09C1, 0x09C4], [0x09CD, 0x09CD], [0x09E2, 0x09E3], [0x0A01, 0x0A02], [0x0A3C, 0x0A3C], [0x0A41, 0x0A42], [0x0A47, 0x0A48], [0x0A4B, 0x0A4D], [0x0A70, 0x0A71], [0x0A81, 0x0A82], [0x0ABC, 0x0ABC], [0x0AC1, 0x0AC5], [0x0AC7, 0x0AC8], [0x0ACD, 0x0ACD], [0x0AE2, 0x0AE3], [0x0B01, 0x0B01], [0x0B3C, 0x0B3C], [0x0B3F, 0x0B3F], [0x0B41, 0x0B43], [0x0B4D, 0x0B4D], [0x0B56, 0x0B56], [0x0B82, 0x0B82], [0x0BC0, 0x0BC0], [0x0BCD, 0x0BCD], [0x0C3E, 0x0C40], [0x0C46, 0x0C48], [0x0C4A, 0x0C4D], [0x0C55, 0x0C56], [0x0CBC, 0x0CBC], [0x0CBF, 0x0CBF], [0x0CC6, 0x0CC6], [0x0CCC, 0x0CCD], [0x0D41, 0x0D43], [0x0D4D, 0x0D4D], [0x0DCA, 0x0DCA], [0x0DD2, 0x0DD4], [0x0DD6, 0x0DD6], [0x0E31, 0x0E31], [0x0E34, 0x0E3A], [0x0E47, 0x0E4E], [0x0EB1, 0x0EB1], [0x0EB4, 0x0EB9], [0x0EBB, 0x0EBC], [0x0EC8, 0x0ECD], [0x0F18, 0x0F19], [0x0F35, 0x0F35], [0x0F37, 0x0F37], [0x0F39, 0x0F39], [0x0F71, 0x0F7E], [0x0F80, 0x0F84], [0x0F86, 0x0F87], [0x0F90, 0x0F97], [0x0F99, 0x0FBC], [0x0FC6, 0x0FC6], [0x102D, 0x1030], [0x1032, 0x1032], [0x1036, 0x1037], [0x1039, 0x1039], [0x1058, 0x1059], [0x135F, 0x135F], [0x1712, 0x1714], [0x1732, 0x1734], [0x1752, 0x1753], [0x1772, 0x1773], [0x17B7, 0x17BD], [0x17C6, 0x17C6], [0x17C9, 0x17D3], [0x17DD, 0x17DD], [0x180B, 0x180D], [0x18A9, 0x18A9], [0x1920, 0x1922], [0x1927, 0x1928], [0x1932, 0x1932], [0x1939, 0x193B], [0x1A17, 0x1A18], [0x1DC0, 0x1DC3], [0x20D0, 0x20DC], [0x20E1, 0x20E1], [0x20E5, 0x20EB], [0x302A, 0x302F], [0x3099, 0x309A], [0xA806, 0xA806], [0xA80B, 0xA80B], [0xA825, 0xA826], [0xFB1E, 0xFB1E], [0xFE00, 0xFE0F], [0xFE20, 0xFE23]]; -Mc = [[0x0903, 0x0903], [0x093E, 0x0940], [0x0949, 0x094C], [0x0982, 0x0983], [0x09BE, 0x09C0], [0x09C7, 0x09C8], [0x09CB, 0x09CC], [0x09D7, 0x09D7], [0x0A03, 0x0A03], [0x0A3E, 0x0A40], [0x0A83, 0x0A83], [0x0ABE, 0x0AC0], [0x0AC9, 0x0AC9], [0x0ACB, 0x0ACC], [0x0B02, 0x0B03], [0x0B3E, 0x0B3E], [0x0B40, 0x0B40], [0x0B47, 0x0B48], [0x0B4B, 0x0B4C], [0x0B57, 0x0B57], [0x0BBE, 0x0BBF], [0x0BC1, 0x0BC2], [0x0BC6, 0x0BC8], [0x0BCA, 0x0BCC], [0x0BD7, 0x0BD7], [0x0C01, 0x0C03], [0x0C41, 0x0C44], [0x0C82, 0x0C83], [0x0CBE, 0x0CBE], [0x0CC0, 0x0CC4], [0x0CC7, 0x0CC8], [0x0CCA, 0x0CCB], [0x0CD5, 0x0CD6], [0x0D02, 0x0D03], [0x0D3E, 0x0D40], [0x0D46, 0x0D48], [0x0D4A, 0x0D4C], [0x0D57, 0x0D57], [0x0D82, 0x0D83], [0x0DCF, 0x0DD1], [0x0DD8, 0x0DDF], [0x0DF2, 0x0DF3], [0x0F3E, 0x0F3F], [0x0F7F, 0x0F7F], [0x102C, 0x102C], [0x1031, 0x1031], [0x1038, 0x1038], [0x1056, 0x1057], [0x17B6, 0x17B6], [0x17BE, 0x17C5], [0x17C7, 0x17C8], [0x1923, 0x1926], [0x1929, 0x192B], [0x1930, 0x1931], [0x1933, 0x1938], [0x19B0, 0x19C0], [0x19C8, 0x19C9], [0x1A19, 0x1A1B], [0xA802, 0xA802], [0xA823, 0xA824], [0xA827, 0xA827]]; -Nd = [[0x0030, 0x0039], [0x0660, 0x0669], [0x06F0, 0x06F9], [0x0966, 0x096F], [0x09E6, 0x09EF], [0x0A66, 0x0A6F], [0x0AE6, 0x0AEF], [0x0B66, 0x0B6F], [0x0BE6, 0x0BEF], [0x0C66, 0x0C6F], [0x0CE6, 0x0CEF], [0x0D66, 0x0D6F], [0x0E50, 0x0E59], [0x0ED0, 0x0ED9], [0x0F20, 0x0F29], [0x1040, 0x1049], [0x17E0, 0x17E9], [0x1810, 0x1819], [0x1946, 0x194F], [0x19D0, 0x19D9], [0xFF10, 0xFF19]]; -Pc = [[0x005F, 0x005F], [0x203F, 0x2040], [0x2054, 0x2054], [0xFE33, 0xFE34], [0xFE4D, 0xFE4F], [0xFF3F, 0xFF3F]]; - -UnicodeLetterLu = []; -UnicodeLetterLl = []; -UnicodeLetterLt = []; -UnicodeLetterLm = []; -UnicodeLetterLo = []; -UnicodeLetterNl = []; -UnicodeLetterMn = []; -UnicodeLetterMc = []; -UnicodeLetterNd = []; -UnicodeLetterPc = []; - -for (indexI = 0; indexI < Lu.length; indexI++) { - for (indexJ = Lu[indexI][0]; indexJ <= Lu[indexI][1]; indexJ++) { - UnicodeLetterLu[indexJ] = true; - } -} -for (indexI = 0; indexI < Ll.length; indexI++) { - for (indexJ = Ll[indexI][0]; indexJ <= Ll[indexI][1]; indexJ++) { - UnicodeLetterLl[indexJ] = true; - } -} -for (indexI = 0; indexI < Lt.length; indexI++) { - for (indexJ = Lt[indexI][0]; indexJ <= Lt[indexI][1]; indexJ++) { - UnicodeLetterLt[indexJ] = true; - } -} -for (indexI = 0; indexI < Lm.length; indexI++) { - for (indexJ = Lm[indexI][0]; indexJ <= Lm[indexI][1]; indexJ++) { - UnicodeLetterLm[indexJ] = true; - } -} -for (indexI = 0; indexI < Lo.length; indexI++) { - for (indexJ = Lo[indexI][0]; indexJ <= Lo[indexI][1]; indexJ++) { - UnicodeLetterLo[indexJ] = true; - } -} -for (indexI = 0; indexI < Nl.length; indexI++) { - for (indexJ = Nl[indexI][0]; indexJ <= Nl[indexI][1]; indexJ++) { - UnicodeLetterNl[indexJ] = true; - } -} -for (indexI = 0; indexI < Mn.length; indexI++) { - for (indexJ = Mn[indexI][0]; indexJ <= Mn[indexI][1]; indexJ++) { - UnicodeLetterMn[indexJ] = true; - } -} -for (indexI = 0; indexI < Mc.length; indexI++) { - for (indexJ = Mc[indexI][0]; indexJ <= Mc[indexI][1]; indexJ++) { - UnicodeLetterMc[indexJ] = true; - } -} -for (indexI = 0; indexI < Nd.length; indexI++) { - for (indexJ = Nd[indexI][0]; indexJ <= Nd[indexI][1]; indexJ++) { - UnicodeLetterNd[indexJ] = true; - } -} -for (indexI = 0; indexI < Pc.length; indexI++) { - for (indexJ = Pc[indexI][0]; indexJ <= Pc[indexI][1]; indexJ++) { - UnicodeLetterPc[indexJ] = true; - } -} - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; -for (index = 0; index <= 65535; index++) { - if ((UnicodeLetterLu[index] === undefined) && (UnicodeLetterLl[index] === undefined) && (UnicodeLetterLt[index] === undefined) && (UnicodeLetterLm[index] === undefined) && (UnicodeLetterLo[index] === undefined) && (UnicodeLetterNl[index] === undefined) && (UnicodeLetterMn[index] === undefined) && (UnicodeLetterMc[index] === undefined) && (UnicodeLetterNd[index] === undefined) && (UnicodeLetterPc[index] === undefined) && (index !== 0x0024) && (index !== 0x005F)) { - try { - var hex = decimalToHexString(index); - var identifier = "$\\u" + hex + "1"; - eval(identifier + " = 1"); - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; - } catch (e) { - } - count++; - } -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_410/S7.6_A5.3_T2.js b/tests/ES3/Unicode/Unicode_410/S7.6_A5.3_T2.js deleted file mode 100644 index 4bb66ac0c..000000000 --- a/tests/ES3/Unicode/Unicode_410/S7.6_A5.3_T2.js +++ /dev/null @@ -1,155 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A5.3_T2; - * @section: 7.6, 6; - * @assertion: If a UnicodeEscapeSequence put a character into an identifier that would otherwise be illegal, throw SyntaxError; - * @description: Complex test with eval; -*/ - -//CHECK -Lu = [[0x0041, 0x005A], [0x00C0, 0x00D6], [0x00D8, 0x00DE], [0x0100, 0x0100], [0x0102, 0x0102], [0x0104, 0x0104], [0x0106, 0x0106], [0x0108, 0x0108], [0x010A, 0x010A], [0x010C, 0x010C], [0x010E, 0x010E], [0x0110, 0x0110], [0x0112, 0x0112], [0x0114, 0x0114], [0x0116, 0x0116], [0x0118, 0x0118], [0x011A, 0x011A], [0x011C, 0x011C], [0x011E, 0x011E], [0x0120, 0x0120], [0x0122, 0x0122], [0x0124, 0x0124], [0x0126, 0x0126], [0x0128, 0x0128], [0x012A, 0x012A], [0x012C, 0x012C], [0x012E, 0x012E], [0x0130, 0x0130], [0x0132, 0x0132], [0x0134, 0x0134], [0x0136, 0x0136], [0x0139, 0x0139], [0x013B, 0x013B], [0x013D, 0x013D], [0x013F, 0x013F], [0x0141, 0x0141], [0x0143, 0x0143], [0x0145, 0x0145], [0x0147, 0x0147], [0x014A, 0x014A], [0x014C, 0x014C], [0x014E, 0x014E], [0x0150, 0x0150], [0x0152, 0x0152], [0x0154, 0x0154], [0x0156, 0x0156], [0x0158, 0x0158], [0x015A, 0x015A], [0x015C, 0x015C], [0x015E, 0x015E], [0x0160, 0x0160], [0x0162, 0x0162], [0x0164, 0x0164], [0x0166, 0x0166], [0x0168, 0x0168], [0x016A, 0x016A], [0x016C, 0x016C], [0x016E, 0x016E], [0x0170, 0x0170], [0x0172, 0x0172], [0x0174, 0x0174], [0x0176, 0x0176], [0x0178, 0x0179], [0x017B, 0x017B], [0x017D, 0x017D], [0x0181, 0x0182], [0x0184, 0x0184], [0x0186, 0x0187], [0x0189, 0x018B], [0x018E, 0x0191], [0x0193, 0x0194], [0x0196, 0x0198], [0x019C, 0x019D], [0x019F, 0x01A0], [0x01A2, 0x01A2], [0x01A4, 0x01A4], [0x01A6, 0x01A7], [0x01A9, 0x01A9], [0x01AC, 0x01AC], [0x01AE, 0x01AF], [0x01B1, 0x01B3], [0x01B5, 0x01B5], [0x01B7, 0x01B8], [0x01BC, 0x01BC], [0x01C4, 0x01C4], [0x01C7, 0x01C7], [0x01CA, 0x01CA], [0x01CD, 0x01CD], [0x01CF, 0x01CF], [0x01D1, 0x01D1], [0x01D3, 0x01D3], [0x01D5, 0x01D5], [0x01D7, 0x01D7], [0x01D9, 0x01D9], [0x01DB, 0x01DB], [0x01DE, 0x01DE], [0x01E0, 0x01E0], [0x01E2, 0x01E2], [0x01E4, 0x01E4], [0x01E6, 0x01E6], [0x01E8, 0x01E8], [0x01EA, 0x01EA], [0x01EC, 0x01EC], [0x01EE, 0x01EE], [0x01F1, 0x01F1], [0x01F4, 0x01F4], [0x01F6, 0x01F8], [0x01FA, 0x01FA], [0x01FC, 0x01FC], [0x01FE, 0x01FE], [0x0200, 0x0200], [0x0202, 0x0202], [0x0204, 0x0204], [0x0206, 0x0206], [0x0208, 0x0208], [0x020A, 0x020A], [0x020C, 0x020C], [0x020E, 0x020E], [0x0210, 0x0210], [0x0212, 0x0212], [0x0214, 0x0214], [0x0216, 0x0216], [0x0218, 0x0218], [0x021A, 0x021A], [0x021C, 0x021C], [0x021E, 0x021E], [0x0220, 0x0220], [0x0222, 0x0222], [0x0224, 0x0224], [0x0226, 0x0226], [0x0228, 0x0228], [0x022A, 0x022A], [0x022C, 0x022C], [0x022E, 0x022E], [0x0230, 0x0230], [0x0232, 0x0232], [0x023A, 0x023B], [0x023D, 0x023E], [0x0241, 0x0241], [0x0386, 0x0386], [0x0388, 0x038A], [0x038C, 0x038C], [0x038E, 0x038F], [0x0391, 0x03A1], [0x03A3, 0x03AB], [0x03D2, 0x03D4], [0x03D8, 0x03D8], [0x03DA, 0x03DA], [0x03DC, 0x03DC], [0x03DE, 0x03DE], [0x03E0, 0x03E0], [0x03E2, 0x03E2], [0x03E4, 0x03E4], [0x03E6, 0x03E6], [0x03E8, 0x03E8], [0x03EA, 0x03EA], [0x03EC, 0x03EC], [0x03EE, 0x03EE], [0x03F4, 0x03F4], [0x03F7, 0x03F7], [0x03F9, 0x03FA], [0x03FD, 0x042F], [0x0460, 0x0460], [0x0462, 0x0462], [0x0464, 0x0464], [0x0466, 0x0466], [0x0468, 0x0468], [0x046A, 0x046A], [0x046C, 0x046C], [0x046E, 0x046E], [0x0470, 0x0470], [0x0472, 0x0472], [0x0474, 0x0474], [0x0476, 0x0476], [0x0478, 0x0478], [0x047A, 0x047A], [0x047C, 0x047C], [0x047E, 0x047E], [0x0480, 0x0480], [0x048A, 0x048A], [0x048C, 0x048C], [0x048E, 0x048E], [0x0490, 0x0490], [0x0492, 0x0492], [0x0494, 0x0494], [0x0496, 0x0496], [0x0498, 0x0498], [0x049A, 0x049A], [0x049C, 0x049C], [0x049E, 0x049E], [0x04A0, 0x04A0], [0x04A2, 0x04A2], [0x04A4, 0x04A4], [0x04A6, 0x04A6], [0x04A8, 0x04A8], [0x04AA, 0x04AA], [0x04AC, 0x04AC], [0x04AE, 0x04AE], [0x04B0, 0x04B0], [0x04B2, 0x04B2], [0x04B4, 0x04B4], [0x04B6, 0x04B6], [0x04B8, 0x04B8], [0x04BA, 0x04BA], [0x04BC, 0x04BC], [0x04BE, 0x04BE], [0x04C0, 0x04C1], [0x04C3, 0x04C3], [0x04C5, 0x04C5], [0x04C7, 0x04C7], [0x04C9, 0x04C9], [0x04CB, 0x04CB], [0x04CD, 0x04CD], [0x04D0, 0x04D0], [0x04D2, 0x04D2], [0x04D4, 0x04D4], [0x04D6, 0x04D6], [0x04D8, 0x04D8], [0x04DA, 0x04DA], [0x04DC, 0x04DC], [0x04DE, 0x04DE], [0x04E0, 0x04E0], [0x04E2, 0x04E2], [0x04E4, 0x04E4], [0x04E6, 0x04E6], [0x04E8, 0x04E8], [0x04EA, 0x04EA], [0x04EC, 0x04EC], [0x04EE, 0x04EE], [0x04F0, 0x04F0], [0x04F2, 0x04F2], [0x04F4, 0x04F4], [0x04F6, 0x04F6], [0x04F8, 0x04F8], [0x0500, 0x0500], [0x0502, 0x0502], [0x0504, 0x0504], [0x0506, 0x0506], [0x0508, 0x0508], [0x050A, 0x050A], [0x050C, 0x050C], [0x050E, 0x050E], [0x0531, 0x0556], [0x10A0, 0x10C5], [0x1E00, 0x1E00], [0x1E02, 0x1E02], [0x1E04, 0x1E04], [0x1E06, 0x1E06], [0x1E08, 0x1E08], [0x1E0A, 0x1E0A], [0x1E0C, 0x1E0C], [0x1E0E, 0x1E0E], [0x1E10, 0x1E10], [0x1E12, 0x1E12], [0x1E14, 0x1E14], [0x1E16, 0x1E16], [0x1E18, 0x1E18], [0x1E1A, 0x1E1A], [0x1E1C, 0x1E1C], [0x1E1E, 0x1E1E], [0x1E20, 0x1E20], [0x1E22, 0x1E22], [0x1E24, 0x1E24], [0x1E26, 0x1E26], [0x1E28, 0x1E28], [0x1E2A, 0x1E2A], [0x1E2C, 0x1E2C], [0x1E2E, 0x1E2E], [0x1E30, 0x1E30], [0x1E32, 0x1E32], [0x1E34, 0x1E34], [0x1E36, 0x1E36], [0x1E38, 0x1E38], [0x1E3A, 0x1E3A], [0x1E3C, 0x1E3C], [0x1E3E, 0x1E3E], [0x1E40, 0x1E40], [0x1E42, 0x1E42], [0x1E44, 0x1E44], [0x1E46, 0x1E46], [0x1E48, 0x1E48], [0x1E4A, 0x1E4A], [0x1E4C, 0x1E4C], [0x1E4E, 0x1E4E], [0x1E50, 0x1E50], [0x1E52, 0x1E52], [0x1E54, 0x1E54], [0x1E56, 0x1E56], [0x1E58, 0x1E58], [0x1E5A, 0x1E5A], [0x1E5C, 0x1E5C], [0x1E5E, 0x1E5E], [0x1E60, 0x1E60], [0x1E62, 0x1E62], [0x1E64, 0x1E64], [0x1E66, 0x1E66], [0x1E68, 0x1E68], [0x1E6A, 0x1E6A], [0x1E6C, 0x1E6C], [0x1E6E, 0x1E6E], [0x1E70, 0x1E70], [0x1E72, 0x1E72], [0x1E74, 0x1E74], [0x1E76, 0x1E76], [0x1E78, 0x1E78], [0x1E7A, 0x1E7A], [0x1E7C, 0x1E7C], [0x1E7E, 0x1E7E], [0x1E80, 0x1E80], [0x1E82, 0x1E82], [0x1E84, 0x1E84], [0x1E86, 0x1E86], [0x1E88, 0x1E88], [0x1E8A, 0x1E8A], [0x1E8C, 0x1E8C], [0x1E8E, 0x1E8E], [0x1E90, 0x1E90], [0x1E92, 0x1E92], [0x1E94, 0x1E94], [0x1EA0, 0x1EA0], [0x1EA2, 0x1EA2], [0x1EA4, 0x1EA4], [0x1EA6, 0x1EA6], [0x1EA8, 0x1EA8], [0x1EAA, 0x1EAA], [0x1EAC, 0x1EAC], [0x1EAE, 0x1EAE], [0x1EB0, 0x1EB0], [0x1EB2, 0x1EB2], [0x1EB4, 0x1EB4], [0x1EB6, 0x1EB6], [0x1EB8, 0x1EB8], [0x1EBA, 0x1EBA], [0x1EBC, 0x1EBC], [0x1EBE, 0x1EBE], [0x1EC0, 0x1EC0], [0x1EC2, 0x1EC2], [0x1EC4, 0x1EC4], [0x1EC6, 0x1EC6], [0x1EC8, 0x1EC8], [0x1ECA, 0x1ECA], [0x1ECC, 0x1ECC], [0x1ECE, 0x1ECE], [0x1ED0, 0x1ED0], [0x1ED2, 0x1ED2], [0x1ED4, 0x1ED4], [0x1ED6, 0x1ED6], [0x1ED8, 0x1ED8], [0x1EDA, 0x1EDA], [0x1EDC, 0x1EDC], [0x1EDE, 0x1EDE], [0x1EE0, 0x1EE0], [0x1EE2, 0x1EE2], [0x1EE4, 0x1EE4], [0x1EE6, 0x1EE6], [0x1EE8, 0x1EE8], [0x1EEA, 0x1EEA], [0x1EEC, 0x1EEC], [0x1EEE, 0x1EEE], [0x1EF0, 0x1EF0], [0x1EF2, 0x1EF2], [0x1EF4, 0x1EF4], [0x1EF6, 0x1EF6], [0x1EF8, 0x1EF8], [0x1F08, 0x1F0F], [0x1F18, 0x1F1D], [0x1F28, 0x1F2F], [0x1F38, 0x1F3F], [0x1F48, 0x1F4D], [0x1F59, 0x1F59], [0x1F5B, 0x1F5B], [0x1F5D, 0x1F5D], [0x1F5F, 0x1F5F], [0x1F68, 0x1F6F], [0x1FB8, 0x1FBB], [0x1FC8, 0x1FCB], [0x1FD8, 0x1FDB], [0x1FE8, 0x1FEC], [0x1FF8, 0x1FFB], [0x2102, 0x2102], [0x2107, 0x2107], [0x210B, 0x210D], [0x2110, 0x2112], [0x2115, 0x2115], [0x2119, 0x211D], [0x2124, 0x2124], [0x2126, 0x2126], [0x2128, 0x2128], [0x212A, 0x212D], [0x2130, 0x2131], [0x2133, 0x2133], [0x213E, 0x213F], [0x2145, 0x2145], [0x2C00, 0x2C2E], [0x2C80, 0x2C80], [0x2C82, 0x2C82], [0x2C84, 0x2C84], [0x2C86, 0x2C86], [0x2C88, 0x2C88], [0x2C8A, 0x2C8A], [0x2C8C, 0x2C8C], [0x2C8E, 0x2C8E], [0x2C90, 0x2C90], [0x2C92, 0x2C92], [0x2C94, 0x2C94], [0x2C96, 0x2C96], [0x2C98, 0x2C98], [0x2C9A, 0x2C9A], [0x2C9C, 0x2C9C], [0x2C9E, 0x2C9E], [0x2CA0, 0x2CA0], [0x2CA2, 0x2CA2], [0x2CA4, 0x2CA4], [0x2CA6, 0x2CA6], [0x2CA8, 0x2CA8], [0x2CAA, 0x2CAA], [0x2CAC, 0x2CAC], [0x2CAE, 0x2CAE], [0x2CB0, 0x2CB0], [0x2CB2, 0x2CB2], [0x2CB4, 0x2CB4], [0x2CB6, 0x2CB6], [0x2CB8, 0x2CB8], [0x2CBA, 0x2CBA], [0x2CBC, 0x2CBC], [0x2CBE, 0x2CBE], [0x2CC0, 0x2CC0], [0x2CC2, 0x2CC2], [0x2CC4, 0x2CC4], [0x2CC6, 0x2CC6], [0x2CC8, 0x2CC8], [0x2CCA, 0x2CCA], [0x2CCC, 0x2CCC], [0x2CCE, 0x2CCE], [0x2CD0, 0x2CD0], [0x2CD2, 0x2CD2], [0x2CD4, 0x2CD4], [0x2CD6, 0x2CD6], [0x2CD8, 0x2CD8], [0x2CDA, 0x2CDA], [0x2CDC, 0x2CDC], [0x2CDE, 0x2CDE], [0x2CE0, 0x2CE0], [0x2CE2, 0x2CE2], [0xFF21, 0xFF3A]]; -Ll = [[0x0061, 0x007A], [0x00AA, 0x00AA], [0x00B5, 0x00B5], [0x00BA, 0x00BA], [0x00DF, 0x00F6], [0x00F8, 0x00FF], [0x0101, 0x0101], [0x0103, 0x0103], [0x0105, 0x0105], [0x0107, 0x0107], [0x0109, 0x0109], [0x010B, 0x010B], [0x010D, 0x010D], [0x010F, 0x010F], [0x0111, 0x0111], [0x0113, 0x0113], [0x0115, 0x0115], [0x0117, 0x0117], [0x0119, 0x0119], [0x011B, 0x011B], [0x011D, 0x011D], [0x011F, 0x011F], [0x0121, 0x0121], [0x0123, 0x0123], [0x0125, 0x0125], [0x0127, 0x0127], [0x0129, 0x0129], [0x012B, 0x012B], [0x012D, 0x012D], [0x012F, 0x012F], [0x0131, 0x0131], [0x0133, 0x0133], [0x0135, 0x0135], [0x0137, 0x0138], [0x013A, 0x013A], [0x013C, 0x013C], [0x013E, 0x013E], [0x0140, 0x0140], [0x0142, 0x0142], [0x0144, 0x0144], [0x0146, 0x0146], [0x0148, 0x0149], [0x014B, 0x014B], [0x014D, 0x014D], [0x014F, 0x014F], [0x0151, 0x0151], [0x0153, 0x0153], [0x0155, 0x0155], [0x0157, 0x0157], [0x0159, 0x0159], [0x015B, 0x015B], [0x015D, 0x015D], [0x015F, 0x015F], [0x0161, 0x0161], [0x0163, 0x0163], [0x0165, 0x0165], [0x0167, 0x0167], [0x0169, 0x0169], [0x016B, 0x016B], [0x016D, 0x016D], [0x016F, 0x016F], [0x0171, 0x0171], [0x0173, 0x0173], [0x0175, 0x0175], [0x0177, 0x0177], [0x017A, 0x017A], [0x017C, 0x017C], [0x017E, 0x0180], [0x0183, 0x0183], [0x0185, 0x0185], [0x0188, 0x0188], [0x018C, 0x018D], [0x0192, 0x0192], [0x0195, 0x0195], [0x0199, 0x019B], [0x019E, 0x019E], [0x01A1, 0x01A1], [0x01A3, 0x01A3], [0x01A5, 0x01A5], [0x01A8, 0x01A8], [0x01AA, 0x01AB], [0x01AD, 0x01AD], [0x01B0, 0x01B0], [0x01B4, 0x01B4], [0x01B6, 0x01B6], [0x01B9, 0x01BA], [0x01BD, 0x01BF], [0x01C6, 0x01C6], [0x01C9, 0x01C9], [0x01CC, 0x01CC], [0x01CE, 0x01CE], [0x01D0, 0x01D0], [0x01D2, 0x01D2], [0x01D4, 0x01D4], [0x01D6, 0x01D6], [0x01D8, 0x01D8], [0x01DA, 0x01DA], [0x01DC, 0x01DD], [0x01DF, 0x01DF], [0x01E1, 0x01E1], [0x01E3, 0x01E3], [0x01E5, 0x01E5], [0x01E7, 0x01E7], [0x01E9, 0x01E9], [0x01EB, 0x01EB], [0x01ED, 0x01ED], [0x01EF, 0x01F0], [0x01F3, 0x01F3], [0x01F5, 0x01F5], [0x01F9, 0x01F9], [0x01FB, 0x01FB], [0x01FD, 0x01FD], [0x01FF, 0x01FF], [0x0201, 0x0201], [0x0203, 0x0203], [0x0205, 0x0205], [0x0207, 0x0207], [0x0209, 0x0209], [0x020B, 0x020B], [0x020D, 0x020D], [0x020F, 0x020F], [0x0211, 0x0211], [0x0213, 0x0213], [0x0215, 0x0215], [0x0217, 0x0217], [0x0219, 0x0219], [0x021B, 0x021B], [0x021D, 0x021D], [0x021F, 0x021F], [0x0221, 0x0221], [0x0223, 0x0223], [0x0225, 0x0225], [0x0227, 0x0227], [0x0229, 0x0229], [0x022B, 0x022B], [0x022D, 0x022D], [0x022F, 0x022F], [0x0231, 0x0231], [0x0233, 0x0239], [0x023C, 0x023C], [0x023F, 0x0240], [0x0250, 0x02AF], [0x0390, 0x0390], [0x03AC, 0x03CE], [0x03D0, 0x03D1], [0x03D5, 0x03D7], [0x03D9, 0x03D9], [0x03DB, 0x03DB], [0x03DD, 0x03DD], [0x03DF, 0x03DF], [0x03E1, 0x03E1], [0x03E3, 0x03E3], [0x03E5, 0x03E5], [0x03E7, 0x03E7], [0x03E9, 0x03E9], [0x03EB, 0x03EB], [0x03ED, 0x03ED], [0x03EF, 0x03F3], [0x03F5, 0x03F5], [0x03F8, 0x03F8], [0x03FB, 0x03FC], [0x0430, 0x045F], [0x0461, 0x0461], [0x0463, 0x0463], [0x0465, 0x0465], [0x0467, 0x0467], [0x0469, 0x0469], [0x046B, 0x046B], [0x046D, 0x046D], [0x046F, 0x046F], [0x0471, 0x0471], [0x0473, 0x0473], [0x0475, 0x0475], [0x0477, 0x0477], [0x0479, 0x0479], [0x047B, 0x047B], [0x047D, 0x047D], [0x047F, 0x047F], [0x0481, 0x0481], [0x048B, 0x048B], [0x048D, 0x048D], [0x048F, 0x048F], [0x0491, 0x0491], [0x0493, 0x0493], [0x0495, 0x0495], [0x0497, 0x0497], [0x0499, 0x0499], [0x049B, 0x049B], [0x049D, 0x049D], [0x049F, 0x049F], [0x04A1, 0x04A1], [0x04A3, 0x04A3], [0x04A5, 0x04A5], [0x04A7, 0x04A7], [0x04A9, 0x04A9], [0x04AB, 0x04AB], [0x04AD, 0x04AD], [0x04AF, 0x04AF], [0x04B1, 0x04B1], [0x04B3, 0x04B3], [0x04B5, 0x04B5], [0x04B7, 0x04B7], [0x04B9, 0x04B9], [0x04BB, 0x04BB], [0x04BD, 0x04BD], [0x04BF, 0x04BF], [0x04C2, 0x04C2], [0x04C4, 0x04C4], [0x04C6, 0x04C6], [0x04C8, 0x04C8], [0x04CA, 0x04CA], [0x04CC, 0x04CC], [0x04CE, 0x04CE], [0x04D1, 0x04D1], [0x04D3, 0x04D3], [0x04D5, 0x04D5], [0x04D7, 0x04D7], [0x04D9, 0x04D9], [0x04DB, 0x04DB], [0x04DD, 0x04DD], [0x04DF, 0x04DF], [0x04E1, 0x04E1], [0x04E3, 0x04E3], [0x04E5, 0x04E5], [0x04E7, 0x04E7], [0x04E9, 0x04E9], [0x04EB, 0x04EB], [0x04ED, 0x04ED], [0x04EF, 0x04EF], [0x04F1, 0x04F1], [0x04F3, 0x04F3], [0x04F5, 0x04F5], [0x04F7, 0x04F7], [0x04F9, 0x04F9], [0x0501, 0x0501], [0x0503, 0x0503], [0x0505, 0x0505], [0x0507, 0x0507], [0x0509, 0x0509], [0x050B, 0x050B], [0x050D, 0x050D], [0x050F, 0x050F], [0x0561, 0x0587], [0x1D00, 0x1D2B], [0x1D62, 0x1D77], [0x1D79, 0x1D9A], [0x1E01, 0x1E01], [0x1E03, 0x1E03], [0x1E05, 0x1E05], [0x1E07, 0x1E07], [0x1E09, 0x1E09], [0x1E0B, 0x1E0B], [0x1E0D, 0x1E0D], [0x1E0F, 0x1E0F], [0x1E11, 0x1E11], [0x1E13, 0x1E13], [0x1E15, 0x1E15], [0x1E17, 0x1E17], [0x1E19, 0x1E19], [0x1E1B, 0x1E1B], [0x1E1D, 0x1E1D], [0x1E1F, 0x1E1F], [0x1E21, 0x1E21], [0x1E23, 0x1E23], [0x1E25, 0x1E25], [0x1E27, 0x1E27], [0x1E29, 0x1E29], [0x1E2B, 0x1E2B], [0x1E2D, 0x1E2D], [0x1E2F, 0x1E2F], [0x1E31, 0x1E31], [0x1E33, 0x1E33], [0x1E35, 0x1E35], [0x1E37, 0x1E37], [0x1E39, 0x1E39], [0x1E3B, 0x1E3B], [0x1E3D, 0x1E3D], [0x1E3F, 0x1E3F], [0x1E41, 0x1E41], [0x1E43, 0x1E43], [0x1E45, 0x1E45], [0x1E47, 0x1E47], [0x1E49, 0x1E49], [0x1E4B, 0x1E4B], [0x1E4D, 0x1E4D], [0x1E4F, 0x1E4F], [0x1E51, 0x1E51], [0x1E53, 0x1E53], [0x1E55, 0x1E55], [0x1E57, 0x1E57], [0x1E59, 0x1E59], [0x1E5B, 0x1E5B], [0x1E5D, 0x1E5D], [0x1E5F, 0x1E5F], [0x1E61, 0x1E61], [0x1E63, 0x1E63], [0x1E65, 0x1E65], [0x1E67, 0x1E67], [0x1E69, 0x1E69], [0x1E6B, 0x1E6B], [0x1E6D, 0x1E6D], [0x1E6F, 0x1E6F], [0x1E71, 0x1E71], [0x1E73, 0x1E73], [0x1E75, 0x1E75], [0x1E77, 0x1E77], [0x1E79, 0x1E79], [0x1E7B, 0x1E7B], [0x1E7D, 0x1E7D], [0x1E7F, 0x1E7F], [0x1E81, 0x1E81], [0x1E83, 0x1E83], [0x1E85, 0x1E85], [0x1E87, 0x1E87], [0x1E89, 0x1E89], [0x1E8B, 0x1E8B], [0x1E8D, 0x1E8D], [0x1E8F, 0x1E8F], [0x1E91, 0x1E91], [0x1E93, 0x1E93], [0x1E95, 0x1E9B], [0x1EA1, 0x1EA1], [0x1EA3, 0x1EA3], [0x1EA5, 0x1EA5], [0x1EA7, 0x1EA7], [0x1EA9, 0x1EA9], [0x1EAB, 0x1EAB], [0x1EAD, 0x1EAD], [0x1EAF, 0x1EAF], [0x1EB1, 0x1EB1], [0x1EB3, 0x1EB3], [0x1EB5, 0x1EB5], [0x1EB7, 0x1EB7], [0x1EB9, 0x1EB9], [0x1EBB, 0x1EBB], [0x1EBD, 0x1EBD], [0x1EBF, 0x1EBF], [0x1EC1, 0x1EC1], [0x1EC3, 0x1EC3], [0x1EC5, 0x1EC5], [0x1EC7, 0x1EC7], [0x1EC9, 0x1EC9], [0x1ECB, 0x1ECB], [0x1ECD, 0x1ECD], [0x1ECF, 0x1ECF], [0x1ED1, 0x1ED1], [0x1ED3, 0x1ED3], [0x1ED5, 0x1ED5], [0x1ED7, 0x1ED7], [0x1ED9, 0x1ED9], [0x1EDB, 0x1EDB], [0x1EDD, 0x1EDD], [0x1EDF, 0x1EDF], [0x1EE1, 0x1EE1], [0x1EE3, 0x1EE3], [0x1EE5, 0x1EE5], [0x1EE7, 0x1EE7], [0x1EE9, 0x1EE9], [0x1EEB, 0x1EEB], [0x1EED, 0x1EED], [0x1EEF, 0x1EEF], [0x1EF1, 0x1EF1], [0x1EF3, 0x1EF3], [0x1EF5, 0x1EF5], [0x1EF7, 0x1EF7], [0x1EF9, 0x1EF9], [0x1F00, 0x1F07], [0x1F10, 0x1F15], [0x1F20, 0x1F27], [0x1F30, 0x1F37], [0x1F40, 0x1F45], [0x1F50, 0x1F57], [0x1F60, 0x1F67], [0x1F70, 0x1F7D], [0x1F80, 0x1F87], [0x1F90, 0x1F97], [0x1FA0, 0x1FA7], [0x1FB0, 0x1FB4], [0x1FB6, 0x1FB7], [0x1FBE, 0x1FBE], [0x1FC2, 0x1FC4], [0x1FC6, 0x1FC7], [0x1FD0, 0x1FD3], [0x1FD6, 0x1FD7], [0x1FE0, 0x1FE7], [0x1FF2, 0x1FF4], [0x1FF6, 0x1FF7], [0x2071, 0x2071], [0x207F, 0x207F], [0x210A, 0x210A], [0x210E, 0x210F], [0x2113, 0x2113], [0x212F, 0x212F], [0x2134, 0x2134], [0x2139, 0x2139], [0x213C, 0x213D], [0x2146, 0x2149], [0x2C30, 0x2C5E], [0x2C81, 0x2C81], [0x2C83, 0x2C83], [0x2C85, 0x2C85], [0x2C87, 0x2C87], [0x2C89, 0x2C89], [0x2C8B, 0x2C8B], [0x2C8D, 0x2C8D], [0x2C8F, 0x2C8F], [0x2C91, 0x2C91], [0x2C93, 0x2C93], [0x2C95, 0x2C95], [0x2C97, 0x2C97], [0x2C99, 0x2C99], [0x2C9B, 0x2C9B], [0x2C9D, 0x2C9D], [0x2C9F, 0x2C9F], [0x2CA1, 0x2CA1], [0x2CA3, 0x2CA3], [0x2CA5, 0x2CA5], [0x2CA7, 0x2CA7], [0x2CA9, 0x2CA9], [0x2CAB, 0x2CAB], [0x2CAD, 0x2CAD], [0x2CAF, 0x2CAF], [0x2CB1, 0x2CB1], [0x2CB3, 0x2CB3], [0x2CB5, 0x2CB5], [0x2CB7, 0x2CB7], [0x2CB9, 0x2CB9], [0x2CBB, 0x2CBB], [0x2CBD, 0x2CBD], [0x2CBF, 0x2CBF], [0x2CC1, 0x2CC1], [0x2CC3, 0x2CC3], [0x2CC5, 0x2CC5], [0x2CC7, 0x2CC7], [0x2CC9, 0x2CC9], [0x2CCB, 0x2CCB], [0x2CCD, 0x2CCD], [0x2CCF, 0x2CCF], [0x2CD1, 0x2CD1], [0x2CD3, 0x2CD3], [0x2CD5, 0x2CD5], [0x2CD7, 0x2CD7], [0x2CD9, 0x2CD9], [0x2CDB, 0x2CDB], [0x2CDD, 0x2CDD], [0x2CDF, 0x2CDF], [0x2CE1, 0x2CE1], [0x2CE3, 0x2CE4], [0x2D00, 0x2D25], [0xFB00, 0xFB06], [0xFB13, 0xFB17], [0xFF41, 0xFF5A]]; -Lt = [[0x01C5, 0x01C5], [0x01C8, 0x01C8], [0x01CB, 0x01CB], [0x01F2, 0x01F2], [0x1F88, 0x1F8F], [0x1F98, 0x1F9F], [0x1FA8, 0x1FAF], [0x1FBC, 0x1FBC], [0x1FCC, 0x1FCC], [0x1FFC, 0x1FFC]]; -Lm = [[0x02B0, 0x02C1], [0x02C6, 0x02D1], [0x02E0, 0x02E4], [0x02EE, 0x02EE], [0x037A, 0x037A], [0x0559, 0x0559], [0x0640, 0x0640], [0x06E5, 0x06E6], [0x0E46, 0x0E46], [0x0EC6, 0x0EC6], [0x10FC, 0x10FC], [0x17D7, 0x17D7], [0x1843, 0x1843], [0x1D2C, 0x1D61], [0x1D78, 0x1D78], [0x1D9B, 0x1DBF], [0x2090, 0x2094], [0x2D6F, 0x2D6F], [0x3005, 0x3005], [0x3031, 0x3035], [0x303B, 0x303B], [0x309D, 0x309E], [0x30FC, 0x30FE], [0xA015, 0xA015], [0xFF70, 0xFF70], [0xFF9E, 0xFF9F]]; -Lo = [[0x01BB, 0x01BB], [0x01C0, 0x01C3], [0x05D0, 0x05EA], [0x05F0, 0x05F2], [0x0621, 0x063A], [0x0641, 0x064A], [0x066E, 0x066F], [0x0671, 0x06D3], [0x06D5, 0x06D5], [0x06EE, 0x06EF], [0x06FA, 0x06FC], [0x06FF, 0x06FF], [0x0710, 0x0710], [0x0712, 0x072F], [0x074D, 0x076D], [0x0780, 0x07A5], [0x07B1, 0x07B1], [0x0904, 0x0939], [0x093D, 0x093D], [0x0950, 0x0950], [0x0958, 0x0961], [0x097D, 0x097D], [0x0985, 0x098C], [0x098F, 0x0990], [0x0993, 0x09A8], [0x09AA, 0x09B0], [0x09B2, 0x09B2], [0x09B6, 0x09B9], [0x09BD, 0x09BD], [0x09CE, 0x09CE], [0x09DC, 0x09DD], [0x09DF, 0x09E1], [0x09F0, 0x09F1], [0x0A05, 0x0A0A], [0x0A0F, 0x0A10], [0x0A13, 0x0A28], [0x0A2A, 0x0A30], [0x0A32, 0x0A33], [0x0A35, 0x0A36], [0x0A38, 0x0A39], [0x0A59, 0x0A5C], [0x0A5E, 0x0A5E], [0x0A72, 0x0A74], [0x0A85, 0x0A8D], [0x0A8F, 0x0A91], [0x0A93, 0x0AA8], [0x0AAA, 0x0AB0], [0x0AB2, 0x0AB3], [0x0AB5, 0x0AB9], [0x0ABD, 0x0ABD], [0x0AD0, 0x0AD0], [0x0AE0, 0x0AE1], [0x0B05, 0x0B0C], [0x0B0F, 0x0B10], [0x0B13, 0x0B28], [0x0B2A, 0x0B30], [0x0B32, 0x0B33], [0x0B35, 0x0B39], [0x0B3D, 0x0B3D], [0x0B5C, 0x0B5D], [0x0B5F, 0x0B61], [0x0B71, 0x0B71], [0x0B83, 0x0B83], [0x0B85, 0x0B8A], [0x0B8E, 0x0B90], [0x0B92, 0x0B95], [0x0B99, 0x0B9A], [0x0B9C, 0x0B9C], [0x0B9E, 0x0B9F], [0x0BA3, 0x0BA4], [0x0BA8, 0x0BAA], [0x0BAE, 0x0BB9], [0x0C05, 0x0C0C], [0x0C0E, 0x0C10], [0x0C12, 0x0C28], [0x0C2A, 0x0C33], [0x0C35, 0x0C39], [0x0C60, 0x0C61], [0x0C85, 0x0C8C], [0x0C8E, 0x0C90], [0x0C92, 0x0CA8], [0x0CAA, 0x0CB3], [0x0CB5, 0x0CB9], [0x0CBD, 0x0CBD], [0x0CDE, 0x0CDE], [0x0CE0, 0x0CE1], [0x0D05, 0x0D0C], [0x0D0E, 0x0D10], [0x0D12, 0x0D28], [0x0D2A, 0x0D39], [0x0D60, 0x0D61], [0x0D85, 0x0D96], [0x0D9A, 0x0DB1], [0x0DB3, 0x0DBB], [0x0DBD, 0x0DBD], [0x0DC0, 0x0DC6], [0x0E01, 0x0E30], [0x0E32, 0x0E33], [0x0E40, 0x0E45], [0x0E81, 0x0E82], [0x0E84, 0x0E84], [0x0E87, 0x0E88], [0x0E8A, 0x0E8A], [0x0E8D, 0x0E8D], [0x0E94, 0x0E97], [0x0E99, 0x0E9F], [0x0EA1, 0x0EA3], [0x0EA5, 0x0EA5], [0x0EA7, 0x0EA7], [0x0EAA, 0x0EAB], [0x0EAD, 0x0EB0], [0x0EB2, 0x0EB3], [0x0EBD, 0x0EBD], [0x0EC0, 0x0EC4], [0x0EDC, 0x0EDD], [0x0F00, 0x0F00], [0x0F40, 0x0F47], [0x0F49, 0x0F6A], [0x0F88, 0x0F8B], [0x1000, 0x1021], [0x1023, 0x1027], [0x1029, 0x102A], [0x1050, 0x1055], [0x10D0, 0x10FA], [0x1100, 0x1159], [0x115F, 0x11A2], [0x11A8, 0x11F9], [0x1200, 0x1248], [0x124A, 0x124D], [0x1250, 0x1256], [0x1258, 0x1258], [0x125A, 0x125D], [0x1260, 0x1288], [0x128A, 0x128D], [0x1290, 0x12B0], [0x12B2, 0x12B5], [0x12B8, 0x12BE], [0x12C0, 0x12C0], [0x12C2, 0x12C5], [0x12C8, 0x12D6], [0x12D8, 0x1310], [0x1312, 0x1315], [0x1318, 0x135A], [0x1380, 0x138F], [0x13A0, 0x13F4], [0x1401, 0x166C], [0x166F, 0x1676], [0x1681, 0x169A], [0x16A0, 0x16EA], [0x1700, 0x170C], [0x170E, 0x1711], [0x1720, 0x1731], [0x1740, 0x1751], [0x1760, 0x176C], [0x176E, 0x1770], [0x1780, 0x17B3], [0x17DC, 0x17DC], [0x1820, 0x1842], [0x1844, 0x1877], [0x1880, 0x18A8], [0x1900, 0x191C], [0x1950, 0x196D], [0x1970, 0x1974], [0x1980, 0x19A9], [0x19C1, 0x19C7], [0x1A00, 0x1A16], [0x2135, 0x2138], [0x2D30, 0x2D65], [0x2D80, 0x2D96], [0x2DA0, 0x2DA6], [0x2DA8, 0x2DAE], [0x2DB0, 0x2DB6], [0x2DB8, 0x2DBE], [0x2DC0, 0x2DC6], [0x2DC8, 0x2DCE], [0x2DD0, 0x2DD6], [0x2DD8, 0x2DDE], [0x3006, 0x3006], [0x303C, 0x303C], [0x3041, 0x3096], [0x309F, 0x309F], [0x30A1, 0x30FA], [0x30FF, 0x30FF], [0x3105, 0x312C], [0x3131, 0x318E], [0x31A0, 0x31B7], [0x31F0, 0x31FF], [0x3400, 0x4DB5], [0x4E00, 0x9FBB], [0xA000, 0xA014], [0xA016, 0xA48C], [0xA800, 0xA801], [0xA803, 0xA805], [0xA807, 0xA80A], [0xA80C, 0xA822], [0xAC00, 0xD7A3], [0xF900, 0xFA2D], [0xFA30, 0xFA6A], [0xFA70, 0xFAD9], [0xFB1D, 0xFB1D], [0xFB1F, 0xFB28], [0xFB2A, 0xFB36], [0xFB38, 0xFB3C], [0xFB3E, 0xFB3E], [0xFB40, 0xFB41], [0xFB43, 0xFB44], [0xFB46, 0xFBB1], [0xFBD3, 0xFD3D], [0xFD50, 0xFD8F], [0xFD92, 0xFDC7], [0xFDF0, 0xFDFB], [0xFE70, 0xFE74], [0xFE76, 0xFEFC], [0xFF66, 0xFF6F], [0xFF71, 0xFF9D], [0xFFA0, 0xFFBE], [0xFFC2, 0xFFC7], [0xFFCA, 0xFFCF], [0xFFD2, 0xFFD7], [0xFFDA, 0xFFDC]]; -Nl = [[0x16EE, 0x16F0], [0x2160, 0x2183], [0x3007, 0x3007], [0x3021, 0x3029], [0x3038, 0x303A]]; -Mn = [[0x0300, 0x036F], [0x0483, 0x0486], [0x0591, 0x05B9], [0x05BB, 0x05BD], [0x05BF, 0x05BF], [0x05C1, 0x05C2], [0x05C4, 0x05C5], [0x05C7, 0x05C7], [0x0610, 0x0615], [0x064B, 0x065E], [0x0670, 0x0670], [0x06D6, 0x06DC], [0x06DF, 0x06E4], [0x06E7, 0x06E8], [0x06EA, 0x06ED], [0x0711, 0x0711], [0x0730, 0x074A], [0x07A6, 0x07B0], [0x0901, 0x0902], [0x093C, 0x093C], [0x0941, 0x0948], [0x094D, 0x094D], [0x0951, 0x0954], [0x0962, 0x0963], [0x0981, 0x0981], [0x09BC, 0x09BC], [0x09C1, 0x09C4], [0x09CD, 0x09CD], [0x09E2, 0x09E3], [0x0A01, 0x0A02], [0x0A3C, 0x0A3C], [0x0A41, 0x0A42], [0x0A47, 0x0A48], [0x0A4B, 0x0A4D], [0x0A70, 0x0A71], [0x0A81, 0x0A82], [0x0ABC, 0x0ABC], [0x0AC1, 0x0AC5], [0x0AC7, 0x0AC8], [0x0ACD, 0x0ACD], [0x0AE2, 0x0AE3], [0x0B01, 0x0B01], [0x0B3C, 0x0B3C], [0x0B3F, 0x0B3F], [0x0B41, 0x0B43], [0x0B4D, 0x0B4D], [0x0B56, 0x0B56], [0x0B82, 0x0B82], [0x0BC0, 0x0BC0], [0x0BCD, 0x0BCD], [0x0C3E, 0x0C40], [0x0C46, 0x0C48], [0x0C4A, 0x0C4D], [0x0C55, 0x0C56], [0x0CBC, 0x0CBC], [0x0CBF, 0x0CBF], [0x0CC6, 0x0CC6], [0x0CCC, 0x0CCD], [0x0D41, 0x0D43], [0x0D4D, 0x0D4D], [0x0DCA, 0x0DCA], [0x0DD2, 0x0DD4], [0x0DD6, 0x0DD6], [0x0E31, 0x0E31], [0x0E34, 0x0E3A], [0x0E47, 0x0E4E], [0x0EB1, 0x0EB1], [0x0EB4, 0x0EB9], [0x0EBB, 0x0EBC], [0x0EC8, 0x0ECD], [0x0F18, 0x0F19], [0x0F35, 0x0F35], [0x0F37, 0x0F37], [0x0F39, 0x0F39], [0x0F71, 0x0F7E], [0x0F80, 0x0F84], [0x0F86, 0x0F87], [0x0F90, 0x0F97], [0x0F99, 0x0FBC], [0x0FC6, 0x0FC6], [0x102D, 0x1030], [0x1032, 0x1032], [0x1036, 0x1037], [0x1039, 0x1039], [0x1058, 0x1059], [0x135F, 0x135F], [0x1712, 0x1714], [0x1732, 0x1734], [0x1752, 0x1753], [0x1772, 0x1773], [0x17B7, 0x17BD], [0x17C6, 0x17C6], [0x17C9, 0x17D3], [0x17DD, 0x17DD], [0x180B, 0x180D], [0x18A9, 0x18A9], [0x1920, 0x1922], [0x1927, 0x1928], [0x1932, 0x1932], [0x1939, 0x193B], [0x1A17, 0x1A18], [0x1DC0, 0x1DC3], [0x20D0, 0x20DC], [0x20E1, 0x20E1], [0x20E5, 0x20EB], [0x302A, 0x302F], [0x3099, 0x309A], [0xA806, 0xA806], [0xA80B, 0xA80B], [0xA825, 0xA826], [0xFB1E, 0xFB1E], [0xFE00, 0xFE0F], [0xFE20, 0xFE23]]; -Mc = [[0x0903, 0x0903], [0x093E, 0x0940], [0x0949, 0x094C], [0x0982, 0x0983], [0x09BE, 0x09C0], [0x09C7, 0x09C8], [0x09CB, 0x09CC], [0x09D7, 0x09D7], [0x0A03, 0x0A03], [0x0A3E, 0x0A40], [0x0A83, 0x0A83], [0x0ABE, 0x0AC0], [0x0AC9, 0x0AC9], [0x0ACB, 0x0ACC], [0x0B02, 0x0B03], [0x0B3E, 0x0B3E], [0x0B40, 0x0B40], [0x0B47, 0x0B48], [0x0B4B, 0x0B4C], [0x0B57, 0x0B57], [0x0BBE, 0x0BBF], [0x0BC1, 0x0BC2], [0x0BC6, 0x0BC8], [0x0BCA, 0x0BCC], [0x0BD7, 0x0BD7], [0x0C01, 0x0C03], [0x0C41, 0x0C44], [0x0C82, 0x0C83], [0x0CBE, 0x0CBE], [0x0CC0, 0x0CC4], [0x0CC7, 0x0CC8], [0x0CCA, 0x0CCB], [0x0CD5, 0x0CD6], [0x0D02, 0x0D03], [0x0D3E, 0x0D40], [0x0D46, 0x0D48], [0x0D4A, 0x0D4C], [0x0D57, 0x0D57], [0x0D82, 0x0D83], [0x0DCF, 0x0DD1], [0x0DD8, 0x0DDF], [0x0DF2, 0x0DF3], [0x0F3E, 0x0F3F], [0x0F7F, 0x0F7F], [0x102C, 0x102C], [0x1031, 0x1031], [0x1038, 0x1038], [0x1056, 0x1057], [0x17B6, 0x17B6], [0x17BE, 0x17C5], [0x17C7, 0x17C8], [0x1923, 0x1926], [0x1929, 0x192B], [0x1930, 0x1931], [0x1933, 0x1938], [0x19B0, 0x19C0], [0x19C8, 0x19C9], [0x1A19, 0x1A1B], [0xA802, 0xA802], [0xA823, 0xA824], [0xA827, 0xA827]]; -Nd = [[0x0030, 0x0039], [0x0660, 0x0669], [0x06F0, 0x06F9], [0x0966, 0x096F], [0x09E6, 0x09EF], [0x0A66, 0x0A6F], [0x0AE6, 0x0AEF], [0x0B66, 0x0B6F], [0x0BE6, 0x0BEF], [0x0C66, 0x0C6F], [0x0CE6, 0x0CEF], [0x0D66, 0x0D6F], [0x0E50, 0x0E59], [0x0ED0, 0x0ED9], [0x0F20, 0x0F29], [0x1040, 0x1049], [0x17E0, 0x17E9], [0x1810, 0x1819], [0x1946, 0x194F], [0x19D0, 0x19D9], [0xFF10, 0xFF19]]; -Pc = [[0x005F, 0x005F], [0x203F, 0x2040], [0x2054, 0x2054], [0xFE33, 0xFE34], [0xFE4D, 0xFE4F], [0xFF3F, 0xFF3F]]; - -UnicodeLetterLu = []; -UnicodeLetterLl = []; -UnicodeLetterLt = []; -UnicodeLetterLm = []; -UnicodeLetterLo = []; -UnicodeLetterNl = []; -UnicodeLetterMn = []; -UnicodeLetterMc = []; -UnicodeLetterNd = []; -UnicodeLetterPc = []; - -for (indexI = 0; indexI < Lu.length; indexI++) { - for (indexJ = Lu[indexI][0]; indexJ <= Lu[indexI][1]; indexJ++) { - UnicodeLetterLu[indexJ] = true; - } -} -for (indexI = 0; indexI < Ll.length; indexI++) { - for (indexJ = Ll[indexI][0]; indexJ <= Ll[indexI][1]; indexJ++) { - UnicodeLetterLl[indexJ] = true; - } -} -for (indexI = 0; indexI < Lt.length; indexI++) { - for (indexJ = Lt[indexI][0]; indexJ <= Lt[indexI][1]; indexJ++) { - UnicodeLetterLt[indexJ] = true; - } -} -for (indexI = 0; indexI < Lm.length; indexI++) { - for (indexJ = Lm[indexI][0]; indexJ <= Lm[indexI][1]; indexJ++) { - UnicodeLetterLm[indexJ] = true; - } -} -for (indexI = 0; indexI < Lo.length; indexI++) { - for (indexJ = Lo[indexI][0]; indexJ <= Lo[indexI][1]; indexJ++) { - UnicodeLetterLo[indexJ] = true; - } -} -for (indexI = 0; indexI < Nl.length; indexI++) { - for (indexJ = Nl[indexI][0]; indexJ <= Nl[indexI][1]; indexJ++) { - UnicodeLetterNl[indexJ] = true; - } -} -for (indexI = 0; indexI < Mn.length; indexI++) { - for (indexJ = Mn[indexI][0]; indexJ <= Mn[indexI][1]; indexJ++) { - UnicodeLetterMn[indexJ] = true; - } -} -for (indexI = 0; indexI < Mc.length; indexI++) { - for (indexJ = Mc[indexI][0]; indexJ <= Mc[indexI][1]; indexJ++) { - UnicodeLetterMc[indexJ] = true; - } -} -for (indexI = 0; indexI < Nd.length; indexI++) { - for (indexJ = Nd[indexI][0]; indexJ <= Nd[indexI][1]; indexJ++) { - UnicodeLetterNd[indexJ] = true; - } -} -for (indexI = 0; indexI < Pc.length; indexI++) { - for (indexJ = Pc[indexI][0]; indexJ <= Pc[indexI][1]; indexJ++) { - UnicodeLetterPc[indexJ] = true; - } -} - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; -for (index = 0; index <= 65535; index++) { - if ((UnicodeLetterLu[index] === undefined) && (UnicodeLetterLl[index] === undefined) && (UnicodeLetterLt[index] === undefined) && (UnicodeLetterLm[index] === undefined) && (UnicodeLetterLo[index] === undefined) && (UnicodeLetterNl[index] === undefined) && (UnicodeLetterMn[index] === undefined) && (UnicodeLetterMc[index] === undefined) && (UnicodeLetterNd[index] === undefined) && (UnicodeLetterPc[index] === undefined) && (index !== 0x0024) && (index !== 0x005F)) { - try { - var hex = decimalToHexString(index); - var identifier1 = "$" + String.fromCharCode(index) + "1"; - var identifier2 = "$\\u" + hex + "1"; - eval(identifier1 + " = 1"); - eval(identifier1 + " === " + identifier2); - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; - } catch (e) { - } - count++; - } -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_500/S15.10.2.12_A1_T6.js b/tests/ES3/Unicode/Unicode_500/S15.10.2.12_A1_T6.js deleted file mode 100644 index dc246a4c5..000000000 --- a/tests/ES3/Unicode/Unicode_500/S15.10.2.12_A1_T6.js +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.10.2.12_A1_T6; - * @section: 15.10.2.12, 7.2, 7.3; - * @assertion: The production CharacterClassEscape :: s evaluates by returning the set of characters - * containing the characters that are on the right-hand side of the WhiteSpace (7.2) or LineTerminator (7.3) productions; - * @description: Complex test; -*/ - -//CHECK#1 -var regexp_s = /\s/; -Zs = [[0x1680, 0x1680], [0x180E, 0x180E], [0x2000, 0x200A], [0x202F, 0x202F], [0x205F, 0x205F], [0x3000, 0x3000]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Zs.length; indexI++) { - for (indexJ = Zs[indexI][0]; indexJ <= Zs[indexI][1]; indexJ++) { - var str = String.fromCharCode(indexJ); - var arr = regexp_s.exec(str); - if ((arr === null) || (arr[0] !== str)) { - var hex = decimalToHexString(indexJ); - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_500/S15.10.2.12_A2_T6.js b/tests/ES3/Unicode/Unicode_500/S15.10.2.12_A2_T6.js deleted file mode 100644 index f2b2bc0e2..000000000 --- a/tests/ES3/Unicode/Unicode_500/S15.10.2.12_A2_T6.js +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.10.2.12_A2_T6; - * @section: 15.10.2.12, 7.2, 7.3; -* @assertion: The production CharacterClassEscape :: S evaluates by returning -* the set of all characters not included in the set returned by -* CharacterClassEscape :: s; - * @description: Complex test; -*/ - -//CHECK#1 -var regexp_S = /\S/; -Zs = [[0x1680, 0x1680], [0x180E, 0x180E], [0x2000, 0x200A], [0x202F, 0x202F], [0x205F, 0x205F], [0x3000, 0x3000]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Zs.length; indexI++) { - for (indexJ = Zs[indexI][0]; indexJ <= Zs[indexI][1]; indexJ++) { - if (regexp_S.exec(String.fromCharCode(indexJ)) !== null) { - var hex = decimalToHexString(indexJ); - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_500/S15.5.4.16_A1.js b/tests/ES3/Unicode/Unicode_500/S15.5.4.16_A1.js deleted file mode 100644 index c758e7b15..000000000 --- a/tests/ES3/Unicode/Unicode_500/S15.5.4.16_A1.js +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.16_A1; -* @section: 15.5.4.16; -* @assertion: The characters in UnicodeData.txt, but not in SpecialCasings.txt are converted one by one; -* @description: Complex test; -*/ - -//CHECK -LowerCase = [[0x0041, 0x0061], [0x0042, 0x0062], [0x0043, 0x0063], [0x0044, 0x0064], [0x0045, 0x0065], [0x0046, 0x0066], [0x0047, 0x0067], [0x0048, 0x0068], [0x004B, 0x006B], [0x004C, 0x006C], [0x004D, 0x006D], [0x004E, 0x006E], [0x004F, 0x006F], [0x0050, 0x0070], [0x0051, 0x0071], [0x0052, 0x0072], [0x0053, 0x0073], [0x0054, 0x0074], [0x0055, 0x0075], [0x0056, 0x0076], [0x0057, 0x0077], [0x0058, 0x0078], [0x0059, 0x0079], [0x005A, 0x007A], [0x00C0, 0x00E0], [0x00C1, 0x00E1], [0x00C2, 0x00E2], [0x00C3, 0x00E3], [0x00C4, 0x00E4], [0x00C5, 0x00E5], [0x00C6, 0x00E6], [0x00C7, 0x00E7], [0x00C8, 0x00E8], [0x00C9, 0x00E9], [0x00CA, 0x00EA], [0x00CB, 0x00EB], [0x00CE, 0x00EE], [0x00CF, 0x00EF], [0x00D0, 0x00F0], [0x00D1, 0x00F1], [0x00D2, 0x00F2], [0x00D3, 0x00F3], [0x00D4, 0x00F4], [0x00D5, 0x00F5], [0x00D6, 0x00F6], [0x00D8, 0x00F8], [0x00D9, 0x00F9], [0x00DA, 0x00FA], [0x00DB, 0x00FB], [0x00DC, 0x00FC], [0x00DD, 0x00FD], [0x00DE, 0x00FE], [0x0100, 0x0101], [0x0102, 0x0103], [0x0104, 0x0105], [0x0106, 0x0107], [0x0108, 0x0109], [0x010A, 0x010B], [0x010C, 0x010D], [0x010E, 0x010F], [0x0110, 0x0111], [0x0112, 0x0113], [0x0114, 0x0115], [0x0116, 0x0117], [0x0118, 0x0119], [0x011A, 0x011B], [0x011C, 0x011D], [0x011E, 0x011F], [0x0120, 0x0121], [0x0122, 0x0123], [0x0124, 0x0125], [0x0126, 0x0127], [0x012A, 0x012B], [0x012C, 0x012D], [0x0132, 0x0133], [0x0134, 0x0135], [0x0136, 0x0137], [0x0139, 0x013A], [0x013B, 0x013C], [0x013D, 0x013E], [0x013F, 0x0140], [0x0141, 0x0142], [0x0143, 0x0144], [0x0145, 0x0146], [0x0147, 0x0148], [0x014A, 0x014B], [0x014C, 0x014D], [0x014E, 0x014F], [0x0150, 0x0151], [0x0152, 0x0153], [0x0154, 0x0155], [0x0156, 0x0157], [0x0158, 0x0159], [0x015A, 0x015B], [0x015C, 0x015D], [0x015E, 0x015F], [0x0160, 0x0161], [0x0162, 0x0163], [0x0164, 0x0165], [0x0166, 0x0167], [0x0168, 0x0169], [0x016A, 0x016B], [0x016C, 0x016D], [0x016E, 0x016F], [0x0170, 0x0171], [0x0172, 0x0173], [0x0174, 0x0175], [0x0176, 0x0177], [0x0178, 0x00FF], [0x0179, 0x017A], [0x017B, 0x017C], [0x017D, 0x017E], [0x0181, 0x0253], [0x0182, 0x0183], [0x0184, 0x0185], [0x0186, 0x0254], [0x0187, 0x0188], [0x0189, 0x0256], [0x018A, 0x0257], [0x018B, 0x018C], [0x018E, 0x01DD], [0x018F, 0x0259], [0x0190, 0x025B], [0x0191, 0x0192], [0x0193, 0x0260], [0x0194, 0x0263], [0x0196, 0x0269], [0x0197, 0x0268], [0x0198, 0x0199], [0x019C, 0x026F], [0x019D, 0x0272], [0x019F, 0x0275], [0x01A0, 0x01A1], [0x01A2, 0x01A3], [0x01A4, 0x01A5], [0x01A6, 0x0280], [0x01A7, 0x01A8], [0x01A9, 0x0283], [0x01AC, 0x01AD], [0x01AE, 0x0288], [0x01AF, 0x01B0], [0x01B1, 0x028A], [0x01B2, 0x028B], [0x01B3, 0x01B4], [0x01B5, 0x01B6], [0x01B7, 0x0292], [0x01B8, 0x01B9], [0x01BC, 0x01BD], [0x01C4, 0x01C6], [0x01C5, 0x01C6], [0x01C7, 0x01C9], [0x01C8, 0x01C9], [0x01CA, 0x01CC], [0x01CB, 0x01CC], [0x01CD, 0x01CE], [0x01CF, 0x01D0], [0x01D1, 0x01D2], [0x01D3, 0x01D4], [0x01D5, 0x01D6], [0x01D7, 0x01D8], [0x01D9, 0x01DA], [0x01DB, 0x01DC], [0x01DE, 0x01DF], [0x01E0, 0x01E1], [0x01E2, 0x01E3], [0x01E4, 0x01E5], [0x01E6, 0x01E7], [0x01E8, 0x01E9], [0x01EA, 0x01EB], [0x01EC, 0x01ED], [0x01EE, 0x01EF], [0x01F1, 0x01F3], [0x01F2, 0x01F3], [0x01F4, 0x01F5], [0x01F6, 0x0195], [0x01F7, 0x01BF], [0x01F8, 0x01F9], [0x01FA, 0x01FB], [0x01FC, 0x01FD], [0x01FE, 0x01FF], [0x0200, 0x0201], [0x0202, 0x0203], [0x0204, 0x0205], [0x0206, 0x0207], [0x0208, 0x0209], [0x020A, 0x020B], [0x020C, 0x020D], [0x020E, 0x020F], [0x0210, 0x0211], [0x0212, 0x0213], [0x0214, 0x0215], [0x0216, 0x0217], [0x0218, 0x0219], [0x021A, 0x021B], [0x021C, 0x021D], [0x021E, 0x021F], [0x0220, 0x019E], [0x0222, 0x0223], [0x0224, 0x0225], [0x0226, 0x0227], [0x0228, 0x0229], [0x022A, 0x022B], [0x022C, 0x022D], [0x022E, 0x022F], [0x0230, 0x0231], [0x0232, 0x0233], [0x023A, 0x2C65], [0x023B, 0x023C], [0x023D, 0x019A], [0x023E, 0x2C66], [0x0241, 0x0242], [0x0243, 0x0180], [0x0244, 0x0289], [0x0245, 0x028C], [0x0246, 0x0247], [0x0248, 0x0249], [0x024A, 0x024B], [0x024C, 0x024D], [0x024E, 0x024F], [0x0386, 0x03AC], [0x0388, 0x03AD], [0x0389, 0x03AE], [0x038A, 0x03AF], [0x038C, 0x03CC], [0x038E, 0x03CD], [0x038F, 0x03CE], [0x0391, 0x03B1], [0x0392, 0x03B2], [0x0393, 0x03B3], [0x0394, 0x03B4], [0x0395, 0x03B5], [0x0396, 0x03B6], [0x0397, 0x03B7], [0x0398, 0x03B8], [0x0399, 0x03B9], [0x039A, 0x03BA], [0x039B, 0x03BB], [0x039C, 0x03BC], [0x039D, 0x03BD], [0x039E, 0x03BE], [0x039F, 0x03BF], [0x03A0, 0x03C0], [0x03A1, 0x03C1], [0x03A4, 0x03C4], [0x03A5, 0x03C5], [0x03A6, 0x03C6], [0x03A7, 0x03C7], [0x03A8, 0x03C8], [0x03A9, 0x03C9], [0x03AA, 0x03CA], [0x03AB, 0x03CB], [0x03D8, 0x03D9], [0x03DA, 0x03DB], [0x03DC, 0x03DD], [0x03DE, 0x03DF], [0x03E0, 0x03E1], [0x03E2, 0x03E3], [0x03E4, 0x03E5], [0x03E6, 0x03E7], [0x03E8, 0x03E9], [0x03EA, 0x03EB], [0x03EC, 0x03ED], [0x03EE, 0x03EF], [0x03F4, 0x03B8], [0x03F7, 0x03F8], [0x03F9, 0x03F2], [0x03FA, 0x03FB], [0x03FD, 0x037B], [0x03FE, 0x037C], [0x03FF, 0x037D], [0x0400, 0x0450], [0x0401, 0x0451], [0x0402, 0x0452], [0x0403, 0x0453], [0x0404, 0x0454], [0x0405, 0x0455], [0x0406, 0x0456], [0x0407, 0x0457], [0x0408, 0x0458], [0x0409, 0x0459], [0x040A, 0x045A], [0x040B, 0x045B], [0x040C, 0x045C], [0x040D, 0x045D], [0x040E, 0x045E], [0x040F, 0x045F], [0x0410, 0x0430], [0x0411, 0x0431], [0x0412, 0x0432], [0x0413, 0x0433], [0x0414, 0x0434], [0x0415, 0x0435], [0x0416, 0x0436], [0x0417, 0x0437], [0x0418, 0x0438], [0x0419, 0x0439], [0x041A, 0x043A], [0x041B, 0x043B], [0x041C, 0x043C], [0x041D, 0x043D], [0x041E, 0x043E], [0x041F, 0x043F], [0x0420, 0x0440], [0x0421, 0x0441], [0x0422, 0x0442], [0x0423, 0x0443], [0x0424, 0x0444], [0x0425, 0x0445], [0x0426, 0x0446], [0x0427, 0x0447], [0x0428, 0x0448], [0x0429, 0x0449], [0x042A, 0x044A], [0x042B, 0x044B], [0x042C, 0x044C], [0x042D, 0x044D], [0x042E, 0x044E], [0x042F, 0x044F], [0x0460, 0x0461], [0x0462, 0x0463], [0x0464, 0x0465], [0x0466, 0x0467], [0x0468, 0x0469], [0x046A, 0x046B], [0x046C, 0x046D], [0x046E, 0x046F], [0x0470, 0x0471], [0x0472, 0x0473], [0x0474, 0x0475], [0x0476, 0x0477], [0x0478, 0x0479], [0x047A, 0x047B], [0x047C, 0x047D], [0x047E, 0x047F], [0x0480, 0x0481], [0x048A, 0x048B], [0x048C, 0x048D], [0x048E, 0x048F], [0x0490, 0x0491], [0x0492, 0x0493], [0x0494, 0x0495], [0x0496, 0x0497], [0x0498, 0x0499], [0x049A, 0x049B], [0x049C, 0x049D], [0x049E, 0x049F], [0x04A0, 0x04A1], [0x04A2, 0x04A3], [0x04A4, 0x04A5], [0x04A6, 0x04A7], [0x04A8, 0x04A9], [0x04AA, 0x04AB], [0x04AC, 0x04AD], [0x04AE, 0x04AF], [0x04B0, 0x04B1], [0x04B2, 0x04B3], [0x04B4, 0x04B5], [0x04B6, 0x04B7], [0x04B8, 0x04B9], [0x04BA, 0x04BB], [0x04BC, 0x04BD], [0x04BE, 0x04BF], [0x04C0, 0x04CF], [0x04C1, 0x04C2], [0x04C3, 0x04C4], [0x04C5, 0x04C6], [0x04C7, 0x04C8], [0x04C9, 0x04CA], [0x04CB, 0x04CC], [0x04CD, 0x04CE], [0x04D0, 0x04D1], [0x04D2, 0x04D3], [0x04D4, 0x04D5], [0x04D6, 0x04D7], [0x04D8, 0x04D9], [0x04DA, 0x04DB], [0x04DC, 0x04DD], [0x04DE, 0x04DF], [0x04E0, 0x04E1], [0x04E2, 0x04E3], [0x04E4, 0x04E5], [0x04E6, 0x04E7], [0x04E8, 0x04E9], [0x04EA, 0x04EB], [0x04EC, 0x04ED], [0x04EE, 0x04EF], [0x04F0, 0x04F1], [0x04F2, 0x04F3], [0x04F4, 0x04F5], [0x04F6, 0x04F7], [0x04F8, 0x04F9], [0x04FA, 0x04FB], [0x04FC, 0x04FD], [0x04FE, 0x04FF], [0x0500, 0x0501], [0x0502, 0x0503], [0x0504, 0x0505], [0x0506, 0x0507], [0x0508, 0x0509], [0x050A, 0x050B], [0x050C, 0x050D], [0x050E, 0x050F], [0x0510, 0x0511], [0x0512, 0x0513], [0x0531, 0x0561], [0x0532, 0x0562], [0x0533, 0x0563], [0x0534, 0x0564], [0x0535, 0x0565], [0x0536, 0x0566], [0x0537, 0x0567], [0x0538, 0x0568], [0x0539, 0x0569], [0x053A, 0x056A], [0x053B, 0x056B], [0x053C, 0x056C], [0x053D, 0x056D], [0x053E, 0x056E], [0x053F, 0x056F], [0x0540, 0x0570], [0x0541, 0x0571], [0x0542, 0x0572], [0x0543, 0x0573], [0x0544, 0x0574], [0x0545, 0x0575], [0x0546, 0x0576], [0x0547, 0x0577], [0x0548, 0x0578], [0x0549, 0x0579], [0x054A, 0x057A], [0x054B, 0x057B], [0x054C, 0x057C], [0x054D, 0x057D], [0x054E, 0x057E], [0x054F, 0x057F], [0x0550, 0x0580], [0x0551, 0x0581], [0x0552, 0x0582], [0x0553, 0x0583], [0x0554, 0x0584], [0x0555, 0x0585], [0x0556, 0x0586], [0x10A0, 0x2D00], [0x10A1, 0x2D01], [0x10A2, 0x2D02], [0x10A3, 0x2D03], [0x10A4, 0x2D04], [0x10A5, 0x2D05], [0x10A6, 0x2D06], [0x10A7, 0x2D07], [0x10A8, 0x2D08], [0x10A9, 0x2D09], [0x10AA, 0x2D0A], [0x10AB, 0x2D0B], [0x10AC, 0x2D0C], [0x10AD, 0x2D0D], [0x10AE, 0x2D0E], [0x10AF, 0x2D0F], [0x10B0, 0x2D10], [0x10B1, 0x2D11], [0x10B2, 0x2D12], [0x10B3, 0x2D13], [0x10B4, 0x2D14], [0x10B5, 0x2D15], [0x10B6, 0x2D16], [0x10B7, 0x2D17], [0x10B8, 0x2D18], [0x10B9, 0x2D19], [0x10BA, 0x2D1A], [0x10BB, 0x2D1B], [0x10BC, 0x2D1C], [0x10BD, 0x2D1D], [0x10BE, 0x2D1E], [0x10BF, 0x2D1F], [0x10C0, 0x2D20], [0x10C1, 0x2D21], [0x10C2, 0x2D22], [0x10C3, 0x2D23], [0x10C4, 0x2D24], [0x10C5, 0x2D25], [0x1E00, 0x1E01], [0x1E02, 0x1E03], [0x1E04, 0x1E05], [0x1E06, 0x1E07], [0x1E08, 0x1E09], [0x1E0A, 0x1E0B], [0x1E0C, 0x1E0D], [0x1E0E, 0x1E0F], [0x1E10, 0x1E11], [0x1E12, 0x1E13], [0x1E14, 0x1E15], [0x1E16, 0x1E17], [0x1E18, 0x1E19], [0x1E1A, 0x1E1B], [0x1E1C, 0x1E1D], [0x1E1E, 0x1E1F], [0x1E20, 0x1E21], [0x1E22, 0x1E23], [0x1E24, 0x1E25], [0x1E26, 0x1E27], [0x1E28, 0x1E29], [0x1E2A, 0x1E2B], [0x1E2C, 0x1E2D], [0x1E2E, 0x1E2F], [0x1E30, 0x1E31], [0x1E32, 0x1E33], [0x1E34, 0x1E35], [0x1E36, 0x1E37], [0x1E38, 0x1E39], [0x1E3A, 0x1E3B], [0x1E3C, 0x1E3D], [0x1E3E, 0x1E3F], [0x1E40, 0x1E41], [0x1E42, 0x1E43], [0x1E44, 0x1E45], [0x1E46, 0x1E47], [0x1E48, 0x1E49], [0x1E4A, 0x1E4B], [0x1E4C, 0x1E4D], [0x1E4E, 0x1E4F], [0x1E50, 0x1E51], [0x1E52, 0x1E53], [0x1E54, 0x1E55], [0x1E56, 0x1E57], [0x1E58, 0x1E59], [0x1E5A, 0x1E5B], [0x1E5C, 0x1E5D], [0x1E5E, 0x1E5F], [0x1E60, 0x1E61], [0x1E62, 0x1E63], [0x1E64, 0x1E65], [0x1E66, 0x1E67], [0x1E68, 0x1E69], [0x1E6A, 0x1E6B], [0x1E6C, 0x1E6D], [0x1E6E, 0x1E6F], [0x1E70, 0x1E71], [0x1E72, 0x1E73], [0x1E74, 0x1E75], [0x1E76, 0x1E77], [0x1E78, 0x1E79], [0x1E7A, 0x1E7B], [0x1E7C, 0x1E7D], [0x1E7E, 0x1E7F], [0x1E80, 0x1E81], [0x1E82, 0x1E83], [0x1E84, 0x1E85], [0x1E86, 0x1E87], [0x1E88, 0x1E89], [0x1E8A, 0x1E8B], [0x1E8C, 0x1E8D], [0x1E8E, 0x1E8F], [0x1E90, 0x1E91], [0x1E92, 0x1E93], [0x1E94, 0x1E95], [0x1EA0, 0x1EA1], [0x1EA2, 0x1EA3], [0x1EA4, 0x1EA5], [0x1EA6, 0x1EA7], [0x1EA8, 0x1EA9], [0x1EAA, 0x1EAB], [0x1EAC, 0x1EAD], [0x1EAE, 0x1EAF], [0x1EB0, 0x1EB1], [0x1EB2, 0x1EB3], [0x1EB4, 0x1EB5], [0x1EB6, 0x1EB7], [0x1EB8, 0x1EB9], [0x1EBA, 0x1EBB], [0x1EBC, 0x1EBD], [0x1EBE, 0x1EBF], [0x1EC0, 0x1EC1], [0x1EC2, 0x1EC3], [0x1EC4, 0x1EC5], [0x1EC6, 0x1EC7], [0x1EC8, 0x1EC9], [0x1ECA, 0x1ECB], [0x1ECC, 0x1ECD], [0x1ECE, 0x1ECF], [0x1ED0, 0x1ED1], [0x1ED2, 0x1ED3], [0x1ED4, 0x1ED5], [0x1ED6, 0x1ED7], [0x1ED8, 0x1ED9], [0x1EDA, 0x1EDB], [0x1EDC, 0x1EDD], [0x1EDE, 0x1EDF], [0x1EE0, 0x1EE1], [0x1EE2, 0x1EE3], [0x1EE4, 0x1EE5], [0x1EE6, 0x1EE7], [0x1EE8, 0x1EE9], [0x1EEA, 0x1EEB], [0x1EEC, 0x1EED], [0x1EEE, 0x1EEF], [0x1EF0, 0x1EF1], [0x1EF2, 0x1EF3], [0x1EF4, 0x1EF5], [0x1EF6, 0x1EF7], [0x1EF8, 0x1EF9], [0x1F08, 0x1F00], [0x1F09, 0x1F01], [0x1F0A, 0x1F02], [0x1F0B, 0x1F03], [0x1F0C, 0x1F04], [0x1F0D, 0x1F05], [0x1F0E, 0x1F06], [0x1F0F, 0x1F07], [0x1F18, 0x1F10], [0x1F19, 0x1F11], [0x1F1A, 0x1F12], [0x1F1B, 0x1F13], [0x1F1C, 0x1F14], [0x1F1D, 0x1F15], [0x1F28, 0x1F20], [0x1F29, 0x1F21], [0x1F2A, 0x1F22], [0x1F2B, 0x1F23], [0x1F2C, 0x1F24], [0x1F2D, 0x1F25], [0x1F2E, 0x1F26], [0x1F2F, 0x1F27], [0x1F38, 0x1F30], [0x1F39, 0x1F31], [0x1F3A, 0x1F32], [0x1F3B, 0x1F33], [0x1F3C, 0x1F34], [0x1F3D, 0x1F35], [0x1F3E, 0x1F36], [0x1F3F, 0x1F37], [0x1F48, 0x1F40], [0x1F49, 0x1F41], [0x1F4A, 0x1F42], [0x1F4B, 0x1F43], [0x1F4C, 0x1F44], [0x1F4D, 0x1F45], [0x1F59, 0x1F51], [0x1F5B, 0x1F53], [0x1F5D, 0x1F55], [0x1F5F, 0x1F57], [0x1F68, 0x1F60], [0x1F69, 0x1F61], [0x1F6A, 0x1F62], [0x1F6B, 0x1F63], [0x1F6C, 0x1F64], [0x1F6D, 0x1F65], [0x1F6E, 0x1F66], [0x1F6F, 0x1F67], [0x1FB8, 0x1FB0], [0x1FB9, 0x1FB1], [0x1FBA, 0x1F70], [0x1FBB, 0x1F71], [0x1FC8, 0x1F72], [0x1FC9, 0x1F73], [0x1FCA, 0x1F74], [0x1FCB, 0x1F75], [0x1FD8, 0x1FD0], [0x1FD9, 0x1FD1], [0x1FDA, 0x1F76], [0x1FDB, 0x1F77], [0x1FE8, 0x1FE0], [0x1FE9, 0x1FE1], [0x1FEA, 0x1F7A], [0x1FEB, 0x1F7B], [0x1FEC, 0x1FE5], [0x1FF8, 0x1F78], [0x1FF9, 0x1F79], [0x1FFA, 0x1F7C], [0x1FFB, 0x1F7D], [0x2126, 0x03C9], [0x212A, 0x006B], [0x212B, 0x00E5], [0x2132, 0x214E], [0x2160, 0x2170], [0x2161, 0x2171], [0x2162, 0x2172], [0x2163, 0x2173], [0x2164, 0x2174], [0x2165, 0x2175], [0x2166, 0x2176], [0x2167, 0x2177], [0x2168, 0x2178], [0x2169, 0x2179], [0x216A, 0x217A], [0x216B, 0x217B], [0x216C, 0x217C], [0x216D, 0x217D], [0x216E, 0x217E], [0x216F, 0x217F], [0x2183, 0x2184], [0x24B6, 0x24D0], [0x24B7, 0x24D1], [0x24B8, 0x24D2], [0x24B9, 0x24D3], [0x24BA, 0x24D4], [0x24BB, 0x24D5], [0x24BC, 0x24D6], [0x24BD, 0x24D7], [0x24BE, 0x24D8], [0x24BF, 0x24D9], [0x24C0, 0x24DA], [0x24C1, 0x24DB], [0x24C2, 0x24DC], [0x24C3, 0x24DD], [0x24C4, 0x24DE], [0x24C5, 0x24DF], [0x24C6, 0x24E0], [0x24C7, 0x24E1], [0x24C8, 0x24E2], [0x24C9, 0x24E3], [0x24CA, 0x24E4], [0x24CB, 0x24E5], [0x24CC, 0x24E6], [0x24CD, 0x24E7], [0x24CE, 0x24E8], [0x24CF, 0x24E9], [0x2C00, 0x2C30], [0x2C01, 0x2C31], [0x2C02, 0x2C32], [0x2C03, 0x2C33], [0x2C04, 0x2C34], [0x2C05, 0x2C35], [0x2C06, 0x2C36], [0x2C07, 0x2C37], [0x2C08, 0x2C38], [0x2C09, 0x2C39], [0x2C0A, 0x2C3A], [0x2C0B, 0x2C3B], [0x2C0C, 0x2C3C], [0x2C0D, 0x2C3D], [0x2C0E, 0x2C3E], [0x2C0F, 0x2C3F], [0x2C10, 0x2C40], [0x2C11, 0x2C41], [0x2C12, 0x2C42], [0x2C13, 0x2C43], [0x2C14, 0x2C44], [0x2C15, 0x2C45], [0x2C16, 0x2C46], [0x2C17, 0x2C47], [0x2C18, 0x2C48], [0x2C19, 0x2C49], [0x2C1A, 0x2C4A], [0x2C1B, 0x2C4B], [0x2C1C, 0x2C4C], [0x2C1D, 0x2C4D], [0x2C1E, 0x2C4E], [0x2C1F, 0x2C4F], [0x2C20, 0x2C50], [0x2C21, 0x2C51], [0x2C22, 0x2C52], [0x2C23, 0x2C53], [0x2C24, 0x2C54], [0x2C25, 0x2C55], [0x2C26, 0x2C56], [0x2C27, 0x2C57], [0x2C28, 0x2C58], [0x2C29, 0x2C59], [0x2C2A, 0x2C5A], [0x2C2B, 0x2C5B], [0x2C2C, 0x2C5C], [0x2C2D, 0x2C5D], [0x2C2E, 0x2C5E], [0x2C60, 0x2C61], [0x2C62, 0x026B], [0x2C63, 0x1D7D], [0x2C64, 0x027D], [0x2C67, 0x2C68], [0x2C69, 0x2C6A], [0x2C6B, 0x2C6C], [0x2C75, 0x2C76], [0x2C80, 0x2C81], [0x2C82, 0x2C83], [0x2C84, 0x2C85], [0x2C86, 0x2C87], [0x2C88, 0x2C89], [0x2C8A, 0x2C8B], [0x2C8C, 0x2C8D], [0x2C8E, 0x2C8F], [0x2C90, 0x2C91], [0x2C92, 0x2C93], [0x2C94, 0x2C95], [0x2C96, 0x2C97], [0x2C98, 0x2C99], [0x2C9A, 0x2C9B], [0x2C9C, 0x2C9D], [0x2C9E, 0x2C9F], [0x2CA0, 0x2CA1], [0x2CA2, 0x2CA3], [0x2CA4, 0x2CA5], [0x2CA6, 0x2CA7], [0x2CA8, 0x2CA9], [0x2CAA, 0x2CAB], [0x2CAC, 0x2CAD], [0x2CAE, 0x2CAF], [0x2CB0, 0x2CB1], [0x2CB2, 0x2CB3], [0x2CB4, 0x2CB5], [0x2CB6, 0x2CB7], [0x2CB8, 0x2CB9], [0x2CBA, 0x2CBB], [0x2CBC, 0x2CBD], [0x2CBE, 0x2CBF], [0x2CC0, 0x2CC1], [0x2CC2, 0x2CC3], [0x2CC4, 0x2CC5], [0x2CC6, 0x2CC7], [0x2CC8, 0x2CC9], [0x2CCA, 0x2CCB], [0x2CCC, 0x2CCD], [0x2CCE, 0x2CCF], [0x2CD0, 0x2CD1], [0x2CD2, 0x2CD3], [0x2CD4, 0x2CD5], [0x2CD6, 0x2CD7], [0x2CD8, 0x2CD9], [0x2CDA, 0x2CDB], [0x2CDC, 0x2CDD], [0x2CDE, 0x2CDF], [0x2CE0, 0x2CE1], [0x2CE2, 0x2CE3], [0xFF21, 0xFF41], [0xFF22, 0xFF42], [0xFF23, 0xFF43], [0xFF24, 0xFF44], [0xFF25, 0xFF45], [0xFF26, 0xFF46], [0xFF27, 0xFF47], [0xFF28, 0xFF48], [0xFF29, 0xFF49], [0xFF2A, 0xFF4A], [0xFF2B, 0xFF4B], [0xFF2C, 0xFF4C], [0xFF2D, 0xFF4D], [0xFF2E, 0xFF4E], [0xFF2F, 0xFF4F], [0xFF30, 0xFF50], [0xFF31, 0xFF51], [0xFF32, 0xFF52], [0xFF33, 0xFF53], [0xFF34, 0xFF54], [0xFF35, 0xFF55], [0xFF36, 0xFF56], [0xFF37, 0xFF57], [0xFF38, 0xFF58], [0xFF39, 0xFF59], [0xFF3A, 0xFF5A]]; - -errorCount = 0; -count = 0; - -for (index = 0; index < LowerCase.length; index++) { - var capitalI = LowerCase[index][0]; - var capitalS = String.fromCharCode(capitalI); - var smallI = LowerCase[index][1]; - var smallS = String.fromCharCode(smallI); - if (capitalS.toLowerCase() !== smallS) { - var hexC = decimalToHexString(capitalI); - var hexS = decimalToHexString(smallI); - $ERROR('#' + hexC + '->' + hexS + ' '); - errorCount++; - } - count++; -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_500/S15.5.4.16_A2.js b/tests/ES3/Unicode/Unicode_500/S15.5.4.16_A2.js deleted file mode 100644 index 4aae14fcb..000000000 --- a/tests/ES3/Unicode/Unicode_500/S15.5.4.16_A2.js +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.16_A2; -* @section: 15.5.4.16; -* @assertion: The characters in SpecialCasings.txt are converted by multi-character results; -* @description: Complex test; -*/ - -//CHECK -LowerSpecialCase = [["\u0130", "\u0069\u0307"], ["\u1F88", "\u1F80"], ["\u1F89", "\u1F81"], ["\u1F8A", "\u1F82"], ["\u1F8B", "\u1F83"], ["\u1F8C", "\u1F84"], ["\u1F8D", "\u1F85"], ["\u1F8E", "\u1F86"], ["\u1F8F", "\u1F87"], ["\u1F98", "\u1F90"], ["\u1F99", "\u1F91"], ["\u1F9A", "\u1F92"], ["\u1F9B", "\u1F93"], ["\u1F9C", "\u1F94"], ["\u1F9D", "\u1F95"], ["\u1F9E", "\u1F96"], ["\u1F9F", "\u1F97"], ["\u1FA8", "\u1FA0"], ["\u1FA9", "\u1FA1"], ["\u1FAA", "\u1FA2"], ["\u1FAB", "\u1FA3"], ["\u1FAC", "\u1FA4"], ["\u1FAD", "\u1FA5"], ["\u1FAE", "\u1FA6"], ["\u1FAF", "\u1FA7"], ["\u1FBC", "\u1FB3"], ["\u1FCC", "\u1FC3"], ["\u1FFC", "\u1FF3"], ["\u03A3", "\u03C2"], ["\u0049", "\u0069\u0307"], ["\u004A", "\u006A\u0307"], ["\u012E", "\u012F\u0307"], ["\u00CC", "\u0069\u0307\u0300"], ["\u00CD", "\u0069\u0307\u0301"], ["\u0128", "\u0069\u0307\u0303"]]; - -errorCount = 0; -count = 0; - -for (index = 0; index < LowerSpecialCase.length; index++) { - var capitalI = LowerSpecialCase[index][0]; - var capitalS = String.fromCharCode(capitalI); - var smallI = LowerSpecialCase[index][1]; - var smallS = String.fromCharCode(smallI); - if (capitalS.toLowerCase() !== smallS) { - var hexC = decimalToHexString(capitalI); - var hexS = decimalToHexString(smallI); - $ERROR('#' + hexC + '->' + hexS + ' '); - errorCount++; - } - count++; -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_500/S15.5.4.18_A1.js b/tests/ES3/Unicode/Unicode_500/S15.5.4.18_A1.js deleted file mode 100644 index 9b8673432..000000000 --- a/tests/ES3/Unicode/Unicode_500/S15.5.4.18_A1.js +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.18_A1; -* @section: 15.5.4.18; -* @assertion: The characters in UnicodeData.txt, but not in SpecialCasings.txt are converted one by one; -* @description: Complex test; -*/ - -//CHECK -UpperCase = [[0x0061, 0x0041], [0x0062, 0x0042], [0x0063, 0x0043], [0x0064, 0x0044], [0x0065, 0x0045], [0x0066, 0x0046], [0x0067, 0x0047], [0x0068, 0x0048], [0x006A, 0x004A], [0x006B, 0x004B], [0x006C, 0x004C], [0x006D, 0x004D], [0x006E, 0x004E], [0x006F, 0x004F], [0x0070, 0x0050], [0x0071, 0x0051], [0x0072, 0x0052], [0x0073, 0x0053], [0x0074, 0x0054], [0x0075, 0x0055], [0x0076, 0x0056], [0x0077, 0x0057], [0x0078, 0x0058], [0x0079, 0x0059], [0x007A, 0x005A], [0x00B5, 0x039C], [0x00E0, 0x00C0], [0x00E1, 0x00C1], [0x00E2, 0x00C2], [0x00E3, 0x00C3], [0x00E4, 0x00C4], [0x00E5, 0x00C5], [0x00E6, 0x00C6], [0x00E7, 0x00C7], [0x00E8, 0x00C8], [0x00E9, 0x00C9], [0x00EA, 0x00CA], [0x00EB, 0x00CB], [0x00EC, 0x00CC], [0x00ED, 0x00CD], [0x00EE, 0x00CE], [0x00EF, 0x00CF], [0x00F0, 0x00D0], [0x00F1, 0x00D1], [0x00F2, 0x00D2], [0x00F3, 0x00D3], [0x00F4, 0x00D4], [0x00F5, 0x00D5], [0x00F6, 0x00D6], [0x00F8, 0x00D8], [0x00F9, 0x00D9], [0x00FA, 0x00DA], [0x00FB, 0x00DB], [0x00FC, 0x00DC], [0x00FD, 0x00DD], [0x00FE, 0x00DE], [0x00FF, 0x0178], [0x0101, 0x0100], [0x0103, 0x0102], [0x0105, 0x0104], [0x0107, 0x0106], [0x0109, 0x0108], [0x010B, 0x010A], [0x010D, 0x010C], [0x010F, 0x010E], [0x0111, 0x0110], [0x0113, 0x0112], [0x0115, 0x0114], [0x0117, 0x0116], [0x0119, 0x0118], [0x011B, 0x011A], [0x011D, 0x011C], [0x011F, 0x011E], [0x0121, 0x0120], [0x0123, 0x0122], [0x0125, 0x0124], [0x0127, 0x0126], [0x0129, 0x0128], [0x012B, 0x012A], [0x012D, 0x012C], [0x012F, 0x012E], [0x0131, 0x0049], [0x0133, 0x0132], [0x0135, 0x0134], [0x0137, 0x0136], [0x013A, 0x0139], [0x013C, 0x013B], [0x013E, 0x013D], [0x0140, 0x013F], [0x0142, 0x0141], [0x0144, 0x0143], [0x0146, 0x0145], [0x0148, 0x0147], [0x014B, 0x014A], [0x014D, 0x014C], [0x014F, 0x014E], [0x0151, 0x0150], [0x0153, 0x0152], [0x0155, 0x0154], [0x0157, 0x0156], [0x0159, 0x0158], [0x015B, 0x015A], [0x015D, 0x015C], [0x015F, 0x015E], [0x0161, 0x0160], [0x0163, 0x0162], [0x0165, 0x0164], [0x0167, 0x0166], [0x0169, 0x0168], [0x016B, 0x016A], [0x016D, 0x016C], [0x016F, 0x016E], [0x0171, 0x0170], [0x0173, 0x0172], [0x0175, 0x0174], [0x0177, 0x0176], [0x017A, 0x0179], [0x017C, 0x017B], [0x017E, 0x017D], [0x017F, 0x0053], [0x0180, 0x0243], [0x0183, 0x0182], [0x0185, 0x0184], [0x0188, 0x0187], [0x018C, 0x018B], [0x0192, 0x0191], [0x0195, 0x01F6], [0x0199, 0x0198], [0x019A, 0x023D], [0x019E, 0x0220], [0x01A1, 0x01A0], [0x01A3, 0x01A2], [0x01A5, 0x01A4], [0x01A8, 0x01A7], [0x01AD, 0x01AC], [0x01B0, 0x01AF], [0x01B4, 0x01B3], [0x01B6, 0x01B5], [0x01B9, 0x01B8], [0x01BD, 0x01BC], [0x01BF, 0x01F7], [0x01C5, 0x01C4], [0x01C6, 0x01C4], [0x01C8, 0x01C7], [0x01C9, 0x01C7], [0x01CB, 0x01CA], [0x01CC, 0x01CA], [0x01CE, 0x01CD], [0x01D0, 0x01CF], [0x01D2, 0x01D1], [0x01D4, 0x01D3], [0x01D6, 0x01D5], [0x01D8, 0x01D7], [0x01DA, 0x01D9], [0x01DC, 0x01DB], [0x01DD, 0x018E], [0x01DF, 0x01DE], [0x01E1, 0x01E0], [0x01E3, 0x01E2], [0x01E5, 0x01E4], [0x01E7, 0x01E6], [0x01E9, 0x01E8], [0x01EB, 0x01EA], [0x01ED, 0x01EC], [0x01EF, 0x01EE], [0x01F2, 0x01F1], [0x01F3, 0x01F1], [0x01F5, 0x01F4], [0x01F9, 0x01F8], [0x01FB, 0x01FA], [0x01FD, 0x01FC], [0x01FF, 0x01FE], [0x0201, 0x0200], [0x0203, 0x0202], [0x0205, 0x0204], [0x0207, 0x0206], [0x0209, 0x0208], [0x020B, 0x020A], [0x020D, 0x020C], [0x020F, 0x020E], [0x0211, 0x0210], [0x0213, 0x0212], [0x0215, 0x0214], [0x0217, 0x0216], [0x0219, 0x0218], [0x021B, 0x021A], [0x021D, 0x021C], [0x021F, 0x021E], [0x0223, 0x0222], [0x0225, 0x0224], [0x0227, 0x0226], [0x0229, 0x0228], [0x022B, 0x022A], [0x022D, 0x022C], [0x022F, 0x022E], [0x0231, 0x0230], [0x0233, 0x0232], [0x023C, 0x023B], [0x0242, 0x0241], [0x0247, 0x0246], [0x0249, 0x0248], [0x024B, 0x024A], [0x024D, 0x024C], [0x024F, 0x024E], [0x0253, 0x0181], [0x0254, 0x0186], [0x0256, 0x0189], [0x0257, 0x018A], [0x0259, 0x018F], [0x025B, 0x0190], [0x0260, 0x0193], [0x0263, 0x0194], [0x0268, 0x0197], [0x0269, 0x0196], [0x026B, 0x2C62], [0x026F, 0x019C], [0x0272, 0x019D], [0x0275, 0x019F], [0x027D, 0x2C64], [0x0280, 0x01A6], [0x0283, 0x01A9], [0x0288, 0x01AE], [0x0289, 0x0244], [0x028A, 0x01B1], [0x028B, 0x01B2], [0x028C, 0x0245], [0x0292, 0x01B7], [0x0345, 0x0399], [0x037B, 0x03FD], [0x037C, 0x03FE], [0x037D, 0x03FF], [0x03AC, 0x0386], [0x03AD, 0x0388], [0x03AE, 0x0389], [0x03AF, 0x038A], [0x03B1, 0x0391], [0x03B2, 0x0392], [0x03B3, 0x0393], [0x03B4, 0x0394], [0x03B5, 0x0395], [0x03B6, 0x0396], [0x03B7, 0x0397], [0x03B8, 0x0398], [0x03B9, 0x0399], [0x03BA, 0x039A], [0x03BB, 0x039B], [0x03BC, 0x039C], [0x03BD, 0x039D], [0x03BE, 0x039E], [0x03BF, 0x039F], [0x03C0, 0x03A0], [0x03C1, 0x03A1], [0x03C2, 0x03A3], [0x03C3, 0x03A3], [0x03C4, 0x03A4], [0x03C5, 0x03A5], [0x03C6, 0x03A6], [0x03C7, 0x03A7], [0x03C8, 0x03A8], [0x03C9, 0x03A9], [0x03CA, 0x03AA], [0x03CB, 0x03AB], [0x03CC, 0x038C], [0x03CD, 0x038E], [0x03CE, 0x038F], [0x03D0, 0x0392], [0x03D1, 0x0398], [0x03D5, 0x03A6], [0x03D6, 0x03A0], [0x03D9, 0x03D8], [0x03DB, 0x03DA], [0x03DD, 0x03DC], [0x03DF, 0x03DE], [0x03E1, 0x03E0], [0x03E3, 0x03E2], [0x03E5, 0x03E4], [0x03E7, 0x03E6], [0x03E9, 0x03E8], [0x03EB, 0x03EA], [0x03ED, 0x03EC], [0x03EF, 0x03EE], [0x03F0, 0x039A], [0x03F1, 0x03A1], [0x03F2, 0x03F9], [0x03F5, 0x0395], [0x03F8, 0x03F7], [0x03FB, 0x03FA], [0x0430, 0x0410], [0x0431, 0x0411], [0x0432, 0x0412], [0x0433, 0x0413], [0x0434, 0x0414], [0x0435, 0x0415], [0x0436, 0x0416], [0x0437, 0x0417], [0x0438, 0x0418], [0x0439, 0x0419], [0x043A, 0x041A], [0x043B, 0x041B], [0x043C, 0x041C], [0x043D, 0x041D], [0x043E, 0x041E], [0x043F, 0x041F], [0x0440, 0x0420], [0x0441, 0x0421], [0x0442, 0x0422], [0x0443, 0x0423], [0x0444, 0x0424], [0x0445, 0x0425], [0x0446, 0x0426], [0x0447, 0x0427], [0x0448, 0x0428], [0x0449, 0x0429], [0x044A, 0x042A], [0x044B, 0x042B], [0x044C, 0x042C], [0x044D, 0x042D], [0x044E, 0x042E], [0x044F, 0x042F], [0x0450, 0x0400], [0x0451, 0x0401], [0x0452, 0x0402], [0x0453, 0x0403], [0x0454, 0x0404], [0x0455, 0x0405], [0x0456, 0x0406], [0x0457, 0x0407], [0x0458, 0x0408], [0x0459, 0x0409], [0x045A, 0x040A], [0x045B, 0x040B], [0x045C, 0x040C], [0x045D, 0x040D], [0x045E, 0x040E], [0x045F, 0x040F], [0x0461, 0x0460], [0x0463, 0x0462], [0x0465, 0x0464], [0x0467, 0x0466], [0x0469, 0x0468], [0x046B, 0x046A], [0x046D, 0x046C], [0x046F, 0x046E], [0x0471, 0x0470], [0x0473, 0x0472], [0x0475, 0x0474], [0x0477, 0x0476], [0x0479, 0x0478], [0x047B, 0x047A], [0x047D, 0x047C], [0x047F, 0x047E], [0x0481, 0x0480], [0x048B, 0x048A], [0x048D, 0x048C], [0x048F, 0x048E], [0x0491, 0x0490], [0x0493, 0x0492], [0x0495, 0x0494], [0x0497, 0x0496], [0x0499, 0x0498], [0x049B, 0x049A], [0x049D, 0x049C], [0x049F, 0x049E], [0x04A1, 0x04A0], [0x04A3, 0x04A2], [0x04A5, 0x04A4], [0x04A7, 0x04A6], [0x04A9, 0x04A8], [0x04AB, 0x04AA], [0x04AD, 0x04AC], [0x04AF, 0x04AE], [0x04B1, 0x04B0], [0x04B3, 0x04B2], [0x04B5, 0x04B4], [0x04B7, 0x04B6], [0x04B9, 0x04B8], [0x04BB, 0x04BA], [0x04BD, 0x04BC], [0x04BF, 0x04BE], [0x04C2, 0x04C1], [0x04C4, 0x04C3], [0x04C6, 0x04C5], [0x04C8, 0x04C7], [0x04CA, 0x04C9], [0x04CC, 0x04CB], [0x04CE, 0x04CD], [0x04CF, 0x04C0], [0x04D1, 0x04D0], [0x04D3, 0x04D2], [0x04D5, 0x04D4], [0x04D7, 0x04D6], [0x04D9, 0x04D8], [0x04DB, 0x04DA], [0x04DD, 0x04DC], [0x04DF, 0x04DE], [0x04E1, 0x04E0], [0x04E3, 0x04E2], [0x04E5, 0x04E4], [0x04E7, 0x04E6], [0x04E9, 0x04E8], [0x04EB, 0x04EA], [0x04ED, 0x04EC], [0x04EF, 0x04EE], [0x04F1, 0x04F0], [0x04F3, 0x04F2], [0x04F5, 0x04F4], [0x04F7, 0x04F6], [0x04F9, 0x04F8], [0x04FB, 0x04FA], [0x04FD, 0x04FC], [0x04FF, 0x04FE], [0x0501, 0x0500], [0x0503, 0x0502], [0x0505, 0x0504], [0x0507, 0x0506], [0x0509, 0x0508], [0x050B, 0x050A], [0x050D, 0x050C], [0x050F, 0x050E], [0x0511, 0x0510], [0x0513, 0x0512], [0x0561, 0x0531], [0x0562, 0x0532], [0x0563, 0x0533], [0x0564, 0x0534], [0x0565, 0x0535], [0x0566, 0x0536], [0x0567, 0x0537], [0x0568, 0x0538], [0x0569, 0x0539], [0x056A, 0x053A], [0x056B, 0x053B], [0x056C, 0x053C], [0x056D, 0x053D], [0x056E, 0x053E], [0x056F, 0x053F], [0x0570, 0x0540], [0x0571, 0x0541], [0x0572, 0x0542], [0x0573, 0x0543], [0x0574, 0x0544], [0x0575, 0x0545], [0x0576, 0x0546], [0x0577, 0x0547], [0x0578, 0x0548], [0x0579, 0x0549], [0x057A, 0x054A], [0x057B, 0x054B], [0x057C, 0x054C], [0x057D, 0x054D], [0x057E, 0x054E], [0x057F, 0x054F], [0x0580, 0x0550], [0x0581, 0x0551], [0x0582, 0x0552], [0x0583, 0x0553], [0x0584, 0x0554], [0x0585, 0x0555], [0x0586, 0x0556], [0x1D7D, 0x2C63], [0x1E01, 0x1E00], [0x1E03, 0x1E02], [0x1E05, 0x1E04], [0x1E07, 0x1E06], [0x1E09, 0x1E08], [0x1E0B, 0x1E0A], [0x1E0D, 0x1E0C], [0x1E0F, 0x1E0E], [0x1E11, 0x1E10], [0x1E13, 0x1E12], [0x1E15, 0x1E14], [0x1E17, 0x1E16], [0x1E19, 0x1E18], [0x1E1B, 0x1E1A], [0x1E1D, 0x1E1C], [0x1E1F, 0x1E1E], [0x1E21, 0x1E20], [0x1E23, 0x1E22], [0x1E25, 0x1E24], [0x1E27, 0x1E26], [0x1E29, 0x1E28], [0x1E2B, 0x1E2A], [0x1E2D, 0x1E2C], [0x1E2F, 0x1E2E], [0x1E31, 0x1E30], [0x1E33, 0x1E32], [0x1E35, 0x1E34], [0x1E37, 0x1E36], [0x1E39, 0x1E38], [0x1E3B, 0x1E3A], [0x1E3D, 0x1E3C], [0x1E3F, 0x1E3E], [0x1E41, 0x1E40], [0x1E43, 0x1E42], [0x1E45, 0x1E44], [0x1E47, 0x1E46], [0x1E49, 0x1E48], [0x1E4B, 0x1E4A], [0x1E4D, 0x1E4C], [0x1E4F, 0x1E4E], [0x1E51, 0x1E50], [0x1E53, 0x1E52], [0x1E55, 0x1E54], [0x1E57, 0x1E56], [0x1E59, 0x1E58], [0x1E5B, 0x1E5A], [0x1E5D, 0x1E5C], [0x1E5F, 0x1E5E], [0x1E61, 0x1E60], [0x1E63, 0x1E62], [0x1E65, 0x1E64], [0x1E67, 0x1E66], [0x1E69, 0x1E68], [0x1E6B, 0x1E6A], [0x1E6D, 0x1E6C], [0x1E6F, 0x1E6E], [0x1E71, 0x1E70], [0x1E73, 0x1E72], [0x1E75, 0x1E74], [0x1E77, 0x1E76], [0x1E79, 0x1E78], [0x1E7B, 0x1E7A], [0x1E7D, 0x1E7C], [0x1E7F, 0x1E7E], [0x1E81, 0x1E80], [0x1E83, 0x1E82], [0x1E85, 0x1E84], [0x1E87, 0x1E86], [0x1E89, 0x1E88], [0x1E8B, 0x1E8A], [0x1E8D, 0x1E8C], [0x1E8F, 0x1E8E], [0x1E91, 0x1E90], [0x1E93, 0x1E92], [0x1E95, 0x1E94], [0x1E9B, 0x1E60], [0x1EA1, 0x1EA0], [0x1EA3, 0x1EA2], [0x1EA5, 0x1EA4], [0x1EA7, 0x1EA6], [0x1EA9, 0x1EA8], [0x1EAB, 0x1EAA], [0x1EAD, 0x1EAC], [0x1EAF, 0x1EAE], [0x1EB1, 0x1EB0], [0x1EB3, 0x1EB2], [0x1EB5, 0x1EB4], [0x1EB7, 0x1EB6], [0x1EB9, 0x1EB8], [0x1EBB, 0x1EBA], [0x1EBD, 0x1EBC], [0x1EBF, 0x1EBE], [0x1EC1, 0x1EC0], [0x1EC3, 0x1EC2], [0x1EC5, 0x1EC4], [0x1EC7, 0x1EC6], [0x1EC9, 0x1EC8], [0x1ECB, 0x1ECA], [0x1ECD, 0x1ECC], [0x1ECF, 0x1ECE], [0x1ED1, 0x1ED0], [0x1ED3, 0x1ED2], [0x1ED5, 0x1ED4], [0x1ED7, 0x1ED6], [0x1ED9, 0x1ED8], [0x1EDB, 0x1EDA], [0x1EDD, 0x1EDC], [0x1EDF, 0x1EDE], [0x1EE1, 0x1EE0], [0x1EE3, 0x1EE2], [0x1EE5, 0x1EE4], [0x1EE7, 0x1EE6], [0x1EE9, 0x1EE8], [0x1EEB, 0x1EEA], [0x1EED, 0x1EEC], [0x1EEF, 0x1EEE], [0x1EF1, 0x1EF0], [0x1EF3, 0x1EF2], [0x1EF5, 0x1EF4], [0x1EF7, 0x1EF6], [0x1EF9, 0x1EF8], [0x1F00, 0x1F08], [0x1F01, 0x1F09], [0x1F02, 0x1F0A], [0x1F03, 0x1F0B], [0x1F04, 0x1F0C], [0x1F05, 0x1F0D], [0x1F06, 0x1F0E], [0x1F07, 0x1F0F], [0x1F10, 0x1F18], [0x1F11, 0x1F19], [0x1F12, 0x1F1A], [0x1F13, 0x1F1B], [0x1F14, 0x1F1C], [0x1F15, 0x1F1D], [0x1F20, 0x1F28], [0x1F21, 0x1F29], [0x1F22, 0x1F2A], [0x1F23, 0x1F2B], [0x1F24, 0x1F2C], [0x1F25, 0x1F2D], [0x1F26, 0x1F2E], [0x1F27, 0x1F2F], [0x1F30, 0x1F38], [0x1F31, 0x1F39], [0x1F32, 0x1F3A], [0x1F33, 0x1F3B], [0x1F34, 0x1F3C], [0x1F35, 0x1F3D], [0x1F36, 0x1F3E], [0x1F37, 0x1F3F], [0x1F40, 0x1F48], [0x1F41, 0x1F49], [0x1F42, 0x1F4A], [0x1F43, 0x1F4B], [0x1F44, 0x1F4C], [0x1F45, 0x1F4D], [0x1F51, 0x1F59], [0x1F53, 0x1F5B], [0x1F55, 0x1F5D], [0x1F57, 0x1F5F], [0x1F60, 0x1F68], [0x1F61, 0x1F69], [0x1F62, 0x1F6A], [0x1F63, 0x1F6B], [0x1F64, 0x1F6C], [0x1F65, 0x1F6D], [0x1F66, 0x1F6E], [0x1F67, 0x1F6F], [0x1F70, 0x1FBA], [0x1F71, 0x1FBB], [0x1F72, 0x1FC8], [0x1F73, 0x1FC9], [0x1F74, 0x1FCA], [0x1F75, 0x1FCB], [0x1F76, 0x1FDA], [0x1F77, 0x1FDB], [0x1F78, 0x1FF8], [0x1F79, 0x1FF9], [0x1F7A, 0x1FEA], [0x1F7B, 0x1FEB], [0x1F7C, 0x1FFA], [0x1F7D, 0x1FFB], [0x1FB0, 0x1FB8], [0x1FB1, 0x1FB9], [0x1FBE, 0x0399], [0x1FD0, 0x1FD8], [0x1FD1, 0x1FD9], [0x1FE0, 0x1FE8], [0x1FE1, 0x1FE9], [0x1FE5, 0x1FEC], [0x214E, 0x2132], [0x2170, 0x2160], [0x2171, 0x2161], [0x2172, 0x2162], [0x2173, 0x2163], [0x2174, 0x2164], [0x2175, 0x2165], [0x2176, 0x2166], [0x2177, 0x2167], [0x2178, 0x2168], [0x2179, 0x2169], [0x217A, 0x216A], [0x217B, 0x216B], [0x217C, 0x216C], [0x217D, 0x216D], [0x217E, 0x216E], [0x217F, 0x216F], [0x2184, 0x2183], [0x24D0, 0x24B6], [0x24D1, 0x24B7], [0x24D2, 0x24B8], [0x24D3, 0x24B9], [0x24D4, 0x24BA], [0x24D5, 0x24BB], [0x24D6, 0x24BC], [0x24D7, 0x24BD], [0x24D8, 0x24BE], [0x24D9, 0x24BF], [0x24DA, 0x24C0], [0x24DB, 0x24C1], [0x24DC, 0x24C2], [0x24DD, 0x24C3], [0x24DE, 0x24C4], [0x24DF, 0x24C5], [0x24E0, 0x24C6], [0x24E1, 0x24C7], [0x24E2, 0x24C8], [0x24E3, 0x24C9], [0x24E4, 0x24CA], [0x24E5, 0x24CB], [0x24E6, 0x24CC], [0x24E7, 0x24CD], [0x24E8, 0x24CE], [0x24E9, 0x24CF], [0x2C30, 0x2C00], [0x2C31, 0x2C01], [0x2C32, 0x2C02], [0x2C33, 0x2C03], [0x2C34, 0x2C04], [0x2C35, 0x2C05], [0x2C36, 0x2C06], [0x2C37, 0x2C07], [0x2C38, 0x2C08], [0x2C39, 0x2C09], [0x2C3A, 0x2C0A], [0x2C3B, 0x2C0B], [0x2C3C, 0x2C0C], [0x2C3D, 0x2C0D], [0x2C3E, 0x2C0E], [0x2C3F, 0x2C0F], [0x2C40, 0x2C10], [0x2C41, 0x2C11], [0x2C42, 0x2C12], [0x2C43, 0x2C13], [0x2C44, 0x2C14], [0x2C45, 0x2C15], [0x2C46, 0x2C16], [0x2C47, 0x2C17], [0x2C48, 0x2C18], [0x2C49, 0x2C19], [0x2C4A, 0x2C1A], [0x2C4B, 0x2C1B], [0x2C4C, 0x2C1C], [0x2C4D, 0x2C1D], [0x2C4E, 0x2C1E], [0x2C4F, 0x2C1F], [0x2C50, 0x2C20], [0x2C51, 0x2C21], [0x2C52, 0x2C22], [0x2C53, 0x2C23], [0x2C54, 0x2C24], [0x2C55, 0x2C25], [0x2C56, 0x2C26], [0x2C57, 0x2C27], [0x2C58, 0x2C28], [0x2C59, 0x2C29], [0x2C5A, 0x2C2A], [0x2C5B, 0x2C2B], [0x2C5C, 0x2C2C], [0x2C5D, 0x2C2D], [0x2C5E, 0x2C2E], [0x2C61, 0x2C60], [0x2C65, 0x023A], [0x2C66, 0x023E], [0x2C68, 0x2C67], [0x2C6A, 0x2C69], [0x2C6C, 0x2C6B], [0x2C76, 0x2C75], [0x2C81, 0x2C80], [0x2C83, 0x2C82], [0x2C85, 0x2C84], [0x2C87, 0x2C86], [0x2C89, 0x2C88], [0x2C8B, 0x2C8A], [0x2C8D, 0x2C8C], [0x2C8F, 0x2C8E], [0x2C91, 0x2C90], [0x2C93, 0x2C92], [0x2C95, 0x2C94], [0x2C97, 0x2C96], [0x2C99, 0x2C98], [0x2C9B, 0x2C9A], [0x2C9D, 0x2C9C], [0x2C9F, 0x2C9E], [0x2CA1, 0x2CA0], [0x2CA3, 0x2CA2], [0x2CA5, 0x2CA4], [0x2CA7, 0x2CA6], [0x2CA9, 0x2CA8], [0x2CAB, 0x2CAA], [0x2CAD, 0x2CAC], [0x2CAF, 0x2CAE], [0x2CB1, 0x2CB0], [0x2CB3, 0x2CB2], [0x2CB5, 0x2CB4], [0x2CB7, 0x2CB6], [0x2CB9, 0x2CB8], [0x2CBB, 0x2CBA], [0x2CBD, 0x2CBC], [0x2CBF, 0x2CBE], [0x2CC1, 0x2CC0], [0x2CC3, 0x2CC2], [0x2CC5, 0x2CC4], [0x2CC7, 0x2CC6], [0x2CC9, 0x2CC8], [0x2CCB, 0x2CCA], [0x2CCD, 0x2CCC], [0x2CCF, 0x2CCE], [0x2CD1, 0x2CD0], [0x2CD3, 0x2CD2], [0x2CD5, 0x2CD4], [0x2CD7, 0x2CD6], [0x2CD9, 0x2CD8], [0x2CDB, 0x2CDA], [0x2CDD, 0x2CDC], [0x2CDF, 0x2CDE], [0x2CE1, 0x2CE0], [0x2CE3, 0x2CE2], [0x2D00, 0x10A0], [0x2D01, 0x10A1], [0x2D02, 0x10A2], [0x2D03, 0x10A3], [0x2D04, 0x10A4], [0x2D05, 0x10A5], [0x2D06, 0x10A6], [0x2D07, 0x10A7], [0x2D08, 0x10A8], [0x2D09, 0x10A9], [0x2D0A, 0x10AA], [0x2D0B, 0x10AB], [0x2D0C, 0x10AC], [0x2D0D, 0x10AD], [0x2D0E, 0x10AE], [0x2D0F, 0x10AF], [0x2D10, 0x10B0], [0x2D11, 0x10B1], [0x2D12, 0x10B2], [0x2D13, 0x10B3], [0x2D14, 0x10B4], [0x2D15, 0x10B5], [0x2D16, 0x10B6], [0x2D17, 0x10B7], [0x2D18, 0x10B8], [0x2D19, 0x10B9], [0x2D1A, 0x10BA], [0x2D1B, 0x10BB], [0x2D1C, 0x10BC], [0x2D1D, 0x10BD], [0x2D1E, 0x10BE], [0x2D1F, 0x10BF], [0x2D20, 0x10C0], [0x2D21, 0x10C1], [0x2D22, 0x10C2], [0x2D23, 0x10C3], [0x2D24, 0x10C4], [0x2D25, 0x10C5], [0xFF41, 0xFF21], [0xFF42, 0xFF22], [0xFF43, 0xFF23], [0xFF44, 0xFF24], [0xFF45, 0xFF25], [0xFF46, 0xFF26], [0xFF47, 0xFF27], [0xFF48, 0xFF28], [0xFF49, 0xFF29], [0xFF4A, 0xFF2A], [0xFF4B, 0xFF2B], [0xFF4C, 0xFF2C], [0xFF4D, 0xFF2D], [0xFF4E, 0xFF2E], [0xFF4F, 0xFF2F], [0xFF50, 0xFF30], [0xFF51, 0xFF31], [0xFF52, 0xFF32], [0xFF53, 0xFF33], [0xFF54, 0xFF34], [0xFF55, 0xFF35], [0xFF56, 0xFF36], [0xFF57, 0xFF37], [0xFF58, 0xFF38], [0xFF59, 0xFF39], [0xFF5A, 0xFF3A]]; - -errorCount = 0; -count = 0; - -for (index = 0; index < UpperCase.length; index++) { - var capitalI = UpperCase[index][0]; - var capitalS = String.fromCharCode(capitalI); - var smallI = UpperCase[index][1]; - var smallS = String.fromCharCode(smallI); - if (capitalS.toUpperCase() !== smallS) { - var hexC = decimalToHexString(capitalI); - var hexS = decimalToHexString(smallI); - $ERROR('#' + hexC + '->' + hexS + ' '); - errorCount++; - } - count++; -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_500/S15.5.4.18_A2.js b/tests/ES3/Unicode/Unicode_500/S15.5.4.18_A2.js deleted file mode 100644 index 0793f66a0..000000000 --- a/tests/ES3/Unicode/Unicode_500/S15.5.4.18_A2.js +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.18_A2; -* @section: 15.5.4.18; -* @assertion: The characters in SpecialCasings.txt are converted by multi-character results; -* @description: Complex test; -*/ - -//CHECK -UpperSpecialCase = [["\u00DF", "\u0053\u0053"], ["\uFB00", "\u0046\u0046"], ["\uFB01", "\u0046\u0049"], ["\uFB02", "\u0046\u004C"], ["\uFB03", "\u0046\u0046\u0049"], ["\uFB04", "\u0046\u0046\u004C"], ["\uFB05", "\u0053\u0054"], ["\uFB06", "\u0053\u0054"], ["\u0587", "\u0535\u0552"], ["\uFB13", "\u0544\u0546"], ["\uFB14", "\u0544\u0535"], ["\uFB15", "\u0544\u053B"], ["\uFB16", "\u054E\u0546"], ["\uFB17", "\u0544\u053D"], ["\u0149", "\u02BC\u004E"], ["\u0390", "\u0399\u0308\u0301"], ["\u03B0", "\u03A5\u0308\u0301"], ["\u01F0", "\u004A\u030C"], ["\u1E96", "\u0048\u0331"], ["\u1E97", "\u0054\u0308"], ["\u1E98", "\u0057\u030A"], ["\u1E99", "\u0059\u030A"], ["\u1E9A", "\u0041\u02BE"], ["\u1F50", "\u03A5\u0313"], ["\u1F52", "\u03A5\u0313\u0300"], ["\u1F54", "\u03A5\u0313\u0301"], ["\u1F56", "\u03A5\u0313\u0342"], ["\u1FB6", "\u0391\u0342"], ["\u1FC6", "\u0397\u0342"], ["\u1FD2", "\u0399\u0308\u0300"], ["\u1FD3", "\u0399\u0308\u0301"], ["\u1FD6", "\u0399\u0342"], ["\u1FD7", "\u0399\u0308\u0342"], ["\u1FE2", "\u03A5\u0308\u0300"], ["\u1FE3", "\u03A5\u0308\u0301"], ["\u1FE4", "\u03A1\u0313"], ["\u1FE6", "\u03A5\u0342"], ["\u1FE7", "\u03A5\u0308\u0342"], ["\u1FF6", "\u03A9\u0342"], ["\u1F80", "\u1F08\u0399"], ["\u1F81", "\u1F09\u0399"], ["\u1F82", "\u1F0A\u0399"], ["\u1F83", "\u1F0B\u0399"], ["\u1F84", "\u1F0C\u0399"], ["\u1F85", "\u1F0D\u0399"], ["\u1F86", "\u1F0E\u0399"], ["\u1F87", "\u1F0F\u0399"], ["\u1F88", "\u1F08\u0399"], ["\u1F89", "\u1F09\u0399"], ["\u1F8A", "\u1F0A\u0399"], ["\u1F8B", "\u1F0B\u0399"], ["\u1F8C", "\u1F0C\u0399"], ["\u1F8D", "\u1F0D\u0399"], ["\u1F8E", "\u1F0E\u0399"], ["\u1F8F", "\u1F0F\u0399"], ["\u1F90", "\u1F28\u0399"], ["\u1F91", "\u1F29\u0399"], ["\u1F92", "\u1F2A\u0399"], ["\u1F93", "\u1F2B\u0399"], ["\u1F94", "\u1F2C\u0399"], ["\u1F95", "\u1F2D\u0399"], ["\u1F96", "\u1F2E\u0399"], ["\u1F97", "\u1F2F\u0399"], ["\u1F98", "\u1F28\u0399"], ["\u1F99", "\u1F29\u0399"], ["\u1F9A", "\u1F2A\u0399"], ["\u1F9B", "\u1F2B\u0399"], ["\u1F9C", "\u1F2C\u0399"], ["\u1F9D", "\u1F2D\u0399"], ["\u1F9E", "\u1F2E\u0399"], ["\u1F9F", "\u1F2F\u0399"], ["\u1FA0", "\u1F68\u0399"], ["\u1FA1", "\u1F69\u0399"], ["\u1FA2", "\u1F6A\u0399"], ["\u1FA3", "\u1F6B\u0399"], ["\u1FA4", "\u1F6C\u0399"], ["\u1FA5", "\u1F6D\u0399"], ["\u1FA6", "\u1F6E\u0399"], ["\u1FA7", "\u1F6F\u0399"], ["\u1FA8", "\u1F68\u0399"], ["\u1FA9", "\u1F69\u0399"], ["\u1FAA", "\u1F6A\u0399"], ["\u1FAB", "\u1F6B\u0399"], ["\u1FAC", "\u1F6C\u0399"], ["\u1FAD", "\u1F6D\u0399"], ["\u1FAE", "\u1F6E\u0399"], ["\u1FAF", "\u1F6F\u0399"], ["\u1FB3", "\u0391\u0399"], ["\u1FBC", "\u0391\u0399"], ["\u1FC3", "\u0397\u0399"], ["\u1FCC", "\u0397\u0399"], ["\u1FF3", "\u03A9\u0399"], ["\u1FFC", "\u03A9\u0399"], ["\u1FB2", "\u1FBA\u0399"], ["\u1FB4", "\u0386\u0399"], ["\u1FC2", "\u1FCA\u0399"], ["\u1FC4", "\u0389\u0399"], ["\u1FF2", "\u1FFA\u0399"], ["\u1FF4", "\u038F\u0399"], ["\u1FB7", "\u0391\u0342\u0399"], ["\u1FC7", "\u0397\u0342\u0399"], ["\u1FF7", "\u03A9\u0342\u0399"], ["\u0069", "\u0130"]]; - -errorCount = 0; -count = 0; - -for (index = 0; index < UpperSpecialCase.length; index++) { - var capitalI = UpperSpecialCase[index][0]; - var capitalS = String.fromCharCode(capitalI); - var smallI = UpperSpecialCase[index][1]; - var smallS = String.fromCharCode(smallI); - if (capitalS.toUpperCase() !== smallS) { - var hexC = decimalToHexString(capitalI); - var hexS = decimalToHexString(smallI); - $ERROR('#' + hexC + '->' + hexS + ' '); - errorCount++; - } - count++; -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_500/S7.1_A1_T1.js b/tests/ES3/Unicode/Unicode_500/S7.1_A1_T1.js deleted file mode 100644 index ef3da705d..000000000 --- a/tests/ES3/Unicode/Unicode_500/S7.1_A1_T1.js +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.1_A1_T1; - * @section: 7.1; - * @assertion: The format control character (Cf) can occur anywhere in the source text - * and these characters are removed before applying the lexical grammar; - * @description: Complex test with eval; -*/ - -//CHECK#1 -Cf = [[0x00AD, 0x00AD], [0x0600, 0x0603], [0x06DD, 0x06DD], [0x070F, 0x070F], [0x17B4, 0x17B5], [0x200B, 0x200F], [0x202A, 0x202E], [0x2060, 0x2063], [0x206A, 0x206F], [0xFEFF, 0xFEFF], [0xFFF9, 0xFFFB]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Cf.length; indexI++) { - for (indexJ = Cf[indexI][0]; indexJ <= Cf[indexI][1]; indexJ++) { - try { - var format = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval(format); - eval(format + "var " + format + "x" + format + "=" + format + "1" + format); - eval(format); - if (x !== 1) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_500/S7.1_A2.1_T1.js b/tests/ES3/Unicode/Unicode_500/S7.1_A2.1_T1.js deleted file mode 100644 index f9ef6f5ab..000000000 --- a/tests/ES3/Unicode/Unicode_500/S7.1_A2.1_T1.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.1_A2.1_T1; - * @section: 7.1; - * @assertion: Since the format control character (Cf) are removed before processing string literals, - * one must use a Unicode escape sequence to include a Cf inside string literal; - * @description: Complex test, without eval; -*/ - -//CHECK#1 -Cf = [[0x00AD, 0x00AD], [0x0600, 0x0603], [0x06DD, 0x06DD], [0x070F, 0x070F], [0x17B4, 0x17B5], [0x200B, 0x200F], [0x202A, 0x202E], [0x2060, 0x2063], [0x206A, 0x206F], [0xFEFF, 0xFEFF], [0xFFF9, 0xFFFB]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Cf.length; indexI++) { - for (indexJ = Cf[indexI][0]; indexJ <= Cf[indexI][1]; indexJ++) { - try { - var format = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - var x = format + "a" + format + "b" + format; - if (x.length !== 5) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_500/S7.1_A2.1_T2.js b/tests/ES3/Unicode/Unicode_500/S7.1_A2.1_T2.js deleted file mode 100644 index 16d19a870..000000000 --- a/tests/ES3/Unicode/Unicode_500/S7.1_A2.1_T2.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.1_A2.1_T2; - * @section: 7.1; - * @assertion: Since the format control character (Cf) are removed before processing string literals, - * one must use a Unicode escape sequence to include a Cf inside string literal; - * @description: Complex test, with eval; -*/ - -//CHECK#1 -Cf = [[0x00AD, 0x00AD], [0x0600, 0x0603], [0x06DD, 0x06DD], [0x070F, 0x070F], [0x17B4, 0x17B5], [0x200B, 0x200F], [0x202A, 0x202E], [0x2060, 0x2063], [0x206A, 0x206F], [0xFEFF, 0xFEFF], [0xFFF9, 0xFFFB]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Cf.length; indexI++) { - for (indexJ = Cf[indexI][0]; indexJ <= Cf[indexI][1]; indexJ++) { - try { - var format = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval('var x = "' + format + 'a' + format + 'b' + format + '"'); - if (x.length !== 5) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_500/S7.1_A2.2_T1.js b/tests/ES3/Unicode/Unicode_500/S7.1_A2.2_T1.js deleted file mode 100644 index a8571f3fa..000000000 --- a/tests/ES3/Unicode/Unicode_500/S7.1_A2.2_T1.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.1_A2.2_T1; - * @section: 7.1; - * @assertion: Since the format control character (Cf) are removed before processing regular expression literals, - * one must use a Unicode escape sequence to include a Cf inside regular expression literal; - * @description: Complex test, without eval; -*/ - -//CHECK#1 -Cf = [[0x00AD, 0x00AD], [0x0600, 0x0603], [0x06DD, 0x06DD], [0x070F, 0x070F], [0x17B4, 0x17B5], [0x200B, 0x200F], [0x202A, 0x202E], [0x2060, 0x2063], [0x206A, 0x206F], [0xFEFF, 0xFEFF], [0xFFF9, 0xFFFB]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Cf.length; indexI++) { - for (indexJ = Cf[indexI][0]; indexJ <= Cf[indexI][1]; indexJ++) { - try { - var format = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - var x = RegExp(format + "a" + format + "b" + format); - if (x.source.length !== 5) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_500/S7.1_A2.2_T2.js b/tests/ES3/Unicode/Unicode_500/S7.1_A2.2_T2.js deleted file mode 100644 index 011668f46..000000000 --- a/tests/ES3/Unicode/Unicode_500/S7.1_A2.2_T2.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.1_A2.2_T2; - * @section: 7.1; - * @assertion: Since the format control character (Cf) are removed before processing regular expression literals, - * one must use a Unicode escape sequence to include a Cf inside regular expression literal; - * @description: Complex test, with eval; -*/ - -//CHECK#1 -Cf = [[0x00AD, 0x00AD], [0x0600, 0x0603], [0x06DD, 0x06DD], [0x070F, 0x070F], [0x17B4, 0x17B5], [0x200B, 0x200F], [0x202A, 0x202E], [0x2060, 0x2063], [0x206A, 0x206F], [0xFEFF, 0xFEFF], [0xFFF9, 0xFFFB]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Cf.length; indexI++) { - for (indexJ = Cf[indexI][0]; indexJ <= Cf[indexI][1]; indexJ++) { - try { - var format = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval('var x = RegExp("' + format + 'a' + format + 'b' + format + '")'); - if (x.source.length !== 5) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_500/S7.2_A1.6_T1.js b/tests/ES3/Unicode/Unicode_500/S7.2_A1.6_T1.js deleted file mode 100644 index 5a7da9bf6..000000000 --- a/tests/ES3/Unicode/Unicode_500/S7.2_A1.6_T1.js +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.2_A1.6_T1; - * @section: 7.2, 7.5; - * @assertion: Any other Unicode "space separator" (category "Zs") between any two tokens is allowed; - * @description: Complex test with eval; -*/ - - -//CHECK#1 -Zs = [[0x1680, 0x1680], [0x180E, 0x180E], [0x2000, 0x200A], [0x202F, 0x202F], [0x205F, 0x205F], [0x3000, 0x3000]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Zs.length; indexI++) { - for (indexJ = Zs[indexI][0]; indexJ <= Zs[indexI][1]; indexJ++) { - try { - var format = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval(format); - eval(format + "var " + format + "x" + format + "=" + format + "1" + format); - eval(format); - if (x !== 1) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_500/S7.2_A2.6_T1.js b/tests/ES3/Unicode/Unicode_500/S7.2_A2.6_T1.js deleted file mode 100644 index 3c9b51236..000000000 --- a/tests/ES3/Unicode/Unicode_500/S7.2_A2.6_T1.js +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.2_A2.6_T1; - * @section: 7.2, 7.8.4; - * @assertion: Any other Unicode "space separator" (category "Zs") within strings; - * @description: Complex test; -*/ - -//CHECK#1 -Zs = [[0x1680, 0x1680], [0x180E, 0x180E], [0x2000, 0x200A], [0x202F, 0x202F], [0x205F, 0x205F], [0x3000, 0x3000]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Zs.length; indexI++) { - for (indexJ = Zs[indexI][0]; indexJ <= Zs[indexI][1]; indexJ++) { - try { - var format = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - var x = "str" + format + "ing"; - if (x !== "str" + format + "ing") { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_500/S7.2_A3.6_T1.js b/tests/ES3/Unicode/Unicode_500/S7.2_A3.6_T1.js deleted file mode 100644 index 3cf973648..000000000 --- a/tests/ES3/Unicode/Unicode_500/S7.2_A3.6_T1.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.2_A3.6_T1; - * @section: 7.2, 7.4; - * @assertion: Single line comment can contain any other Unicode "space separator" (category "Zs"); - * @description: Complex test with eval; - */ - -//CHECK#1 -Zs = [[0x1680, 0x1680], [0x180E, 0x180E], [0x2000, 0x200A], [0x202F, 0x202F], [0x205F, 0x205F], [0x3000, 0x3000]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Zs.length; indexI++) { - for (indexJ = Zs[indexI][0]; indexJ <= Zs[indexI][1]; indexJ++) { - try { - var format = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - var x = 0; - eval("//" + format + "single line" + format + "comment" + format + " x = 1;"); - if (x !== 0) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_500/S7.2_A4.6_T1.js b/tests/ES3/Unicode/Unicode_500/S7.2_A4.6_T1.js deleted file mode 100644 index c7eacb73c..000000000 --- a/tests/ES3/Unicode/Unicode_500/S7.2_A4.6_T1.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.2_A4.6_T1; - * @section: 7.2, 7.4; - * @assertion: Multi line comment can contain any other Unicode "space separator" (category "Zs"); - * @description: Complex test with eval; - */ - -//CHECK#1 -Zs = [[0x1680, 0x1680], [0x180E, 0x180E], [0x2000, 0x200A], [0x202F, 0x202F], [0x205F, 0x205F], [0x3000, 0x3000]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Zs.length; indexI++) { - for (indexJ = Zs[indexI][0]; indexJ <= Zs[indexI][1]; indexJ++) { - try { - var format = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - var x = 0; - eval("/*" + format + "multi line" + format + "comment" + format + "\n x = 1;*/"); - if (x !== 0) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_500/S7.6_A1.1_T1.js b/tests/ES3/Unicode/Unicode_500/S7.6_A1.1_T1.js deleted file mode 100644 index ec0fa4075..000000000 --- a/tests/ES3/Unicode/Unicode_500/S7.6_A1.1_T1.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A1.1_T1; - * @section: 7.6; - * @assertion: IdentifierStart :: UnicodeLetter (any character in the Unicode categories "Lu", "Ll", "Lt", "Lm", "Lo", "Nl"); - * @description: UnicodeLetter :: Uppercase letter (Lu). - * Complex test with eval; -*/ - -//CHECK -Lu = [[0x0041, 0x005A], [0x00C0, 0x00D6], [0x00D8, 0x00DE], [0x0100, 0x0100], [0x0102, 0x0102], [0x0104, 0x0104], [0x0106, 0x0106], [0x0108, 0x0108], [0x010A, 0x010A], [0x010C, 0x010C], [0x010E, 0x010E], [0x0110, 0x0110], [0x0112, 0x0112], [0x0114, 0x0114], [0x0116, 0x0116], [0x0118, 0x0118], [0x011A, 0x011A], [0x011C, 0x011C], [0x011E, 0x011E], [0x0120, 0x0120], [0x0122, 0x0122], [0x0124, 0x0124], [0x0126, 0x0126], [0x0128, 0x0128], [0x012A, 0x012A], [0x012C, 0x012C], [0x012E, 0x012E], [0x0130, 0x0130], [0x0132, 0x0132], [0x0134, 0x0134], [0x0136, 0x0136], [0x0139, 0x0139], [0x013B, 0x013B], [0x013D, 0x013D], [0x013F, 0x013F], [0x0141, 0x0141], [0x0143, 0x0143], [0x0145, 0x0145], [0x0147, 0x0147], [0x014A, 0x014A], [0x014C, 0x014C], [0x014E, 0x014E], [0x0150, 0x0150], [0x0152, 0x0152], [0x0154, 0x0154], [0x0156, 0x0156], [0x0158, 0x0158], [0x015A, 0x015A], [0x015C, 0x015C], [0x015E, 0x015E], [0x0160, 0x0160], [0x0162, 0x0162], [0x0164, 0x0164], [0x0166, 0x0166], [0x0168, 0x0168], [0x016A, 0x016A], [0x016C, 0x016C], [0x016E, 0x016E], [0x0170, 0x0170], [0x0172, 0x0172], [0x0174, 0x0174], [0x0176, 0x0176], [0x0178, 0x0179], [0x017B, 0x017B], [0x017D, 0x017D], [0x0181, 0x0182], [0x0184, 0x0184], [0x0186, 0x0187], [0x0189, 0x018B], [0x018E, 0x0191], [0x0193, 0x0194], [0x0196, 0x0198], [0x019C, 0x019D], [0x019F, 0x01A0], [0x01A2, 0x01A2], [0x01A4, 0x01A4], [0x01A6, 0x01A7], [0x01A9, 0x01A9], [0x01AC, 0x01AC], [0x01AE, 0x01AF], [0x01B1, 0x01B3], [0x01B5, 0x01B5], [0x01B7, 0x01B8], [0x01BC, 0x01BC], [0x01C4, 0x01C4], [0x01C7, 0x01C7], [0x01CA, 0x01CA], [0x01CD, 0x01CD], [0x01CF, 0x01CF], [0x01D1, 0x01D1], [0x01D3, 0x01D3], [0x01D5, 0x01D5], [0x01D7, 0x01D7], [0x01D9, 0x01D9], [0x01DB, 0x01DB], [0x01DE, 0x01DE], [0x01E0, 0x01E0], [0x01E2, 0x01E2], [0x01E4, 0x01E4], [0x01E6, 0x01E6], [0x01E8, 0x01E8], [0x01EA, 0x01EA], [0x01EC, 0x01EC], [0x01EE, 0x01EE], [0x01F1, 0x01F1], [0x01F4, 0x01F4], [0x01F6, 0x01F8], [0x01FA, 0x01FA], [0x01FC, 0x01FC], [0x01FE, 0x01FE], [0x0200, 0x0200], [0x0202, 0x0202], [0x0204, 0x0204], [0x0206, 0x0206], [0x0208, 0x0208], [0x020A, 0x020A], [0x020C, 0x020C], [0x020E, 0x020E], [0x0210, 0x0210], [0x0212, 0x0212], [0x0214, 0x0214], [0x0216, 0x0216], [0x0218, 0x0218], [0x021A, 0x021A], [0x021C, 0x021C], [0x021E, 0x021E], [0x0220, 0x0220], [0x0222, 0x0222], [0x0224, 0x0224], [0x0226, 0x0226], [0x0228, 0x0228], [0x022A, 0x022A], [0x022C, 0x022C], [0x022E, 0x022E], [0x0230, 0x0230], [0x0232, 0x0232], [0x023A, 0x023B], [0x023D, 0x023E], [0x0241, 0x0241], [0x0243, 0x0246], [0x0248, 0x0248], [0x024A, 0x024A], [0x024C, 0x024C], [0x024E, 0x024E], [0x0386, 0x0386], [0x0388, 0x038A], [0x038C, 0x038C], [0x038E, 0x038F], [0x0391, 0x03A1], [0x03A3, 0x03AB], [0x03D2, 0x03D4], [0x03D8, 0x03D8], [0x03DA, 0x03DA], [0x03DC, 0x03DC], [0x03DE, 0x03DE], [0x03E0, 0x03E0], [0x03E2, 0x03E2], [0x03E4, 0x03E4], [0x03E6, 0x03E6], [0x03E8, 0x03E8], [0x03EA, 0x03EA], [0x03EC, 0x03EC], [0x03EE, 0x03EE], [0x03F4, 0x03F4], [0x03F7, 0x03F7], [0x03F9, 0x03FA], [0x03FD, 0x042F], [0x0460, 0x0460], [0x0462, 0x0462], [0x0464, 0x0464], [0x0466, 0x0466], [0x0468, 0x0468], [0x046A, 0x046A], [0x046C, 0x046C], [0x046E, 0x046E], [0x0470, 0x0470], [0x0472, 0x0472], [0x0474, 0x0474], [0x0476, 0x0476], [0x0478, 0x0478], [0x047A, 0x047A], [0x047C, 0x047C], [0x047E, 0x047E], [0x0480, 0x0480], [0x048A, 0x048A], [0x048C, 0x048C], [0x048E, 0x048E], [0x0490, 0x0490], [0x0492, 0x0492], [0x0494, 0x0494], [0x0496, 0x0496], [0x0498, 0x0498], [0x049A, 0x049A], [0x049C, 0x049C], [0x049E, 0x049E], [0x04A0, 0x04A0], [0x04A2, 0x04A2], [0x04A4, 0x04A4], [0x04A6, 0x04A6], [0x04A8, 0x04A8], [0x04AA, 0x04AA], [0x04AC, 0x04AC], [0x04AE, 0x04AE], [0x04B0, 0x04B0], [0x04B2, 0x04B2], [0x04B4, 0x04B4], [0x04B6, 0x04B6], [0x04B8, 0x04B8], [0x04BA, 0x04BA], [0x04BC, 0x04BC], [0x04BE, 0x04BE], [0x04C0, 0x04C1], [0x04C3, 0x04C3], [0x04C5, 0x04C5], [0x04C7, 0x04C7], [0x04C9, 0x04C9], [0x04CB, 0x04CB], [0x04CD, 0x04CD], [0x04D0, 0x04D0], [0x04D2, 0x04D2], [0x04D4, 0x04D4], [0x04D6, 0x04D6], [0x04D8, 0x04D8], [0x04DA, 0x04DA], [0x04DC, 0x04DC], [0x04DE, 0x04DE], [0x04E0, 0x04E0], [0x04E2, 0x04E2], [0x04E4, 0x04E4], [0x04E6, 0x04E6], [0x04E8, 0x04E8], [0x04EA, 0x04EA], [0x04EC, 0x04EC], [0x04EE, 0x04EE], [0x04F0, 0x04F0], [0x04F2, 0x04F2], [0x04F4, 0x04F4], [0x04F6, 0x04F6], [0x04F8, 0x04F8], [0x04FA, 0x04FA], [0x04FC, 0x04FC], [0x04FE, 0x04FE], [0x0500, 0x0500], [0x0502, 0x0502], [0x0504, 0x0504], [0x0506, 0x0506], [0x0508, 0x0508], [0x050A, 0x050A], [0x050C, 0x050C], [0x050E, 0x050E], [0x0510, 0x0510], [0x0512, 0x0512], [0x0531, 0x0556], [0x10A0, 0x10C5], [0x1E00, 0x1E00], [0x1E02, 0x1E02], [0x1E04, 0x1E04], [0x1E06, 0x1E06], [0x1E08, 0x1E08], [0x1E0A, 0x1E0A], [0x1E0C, 0x1E0C], [0x1E0E, 0x1E0E], [0x1E10, 0x1E10], [0x1E12, 0x1E12], [0x1E14, 0x1E14], [0x1E16, 0x1E16], [0x1E18, 0x1E18], [0x1E1A, 0x1E1A], [0x1E1C, 0x1E1C], [0x1E1E, 0x1E1E], [0x1E20, 0x1E20], [0x1E22, 0x1E22], [0x1E24, 0x1E24], [0x1E26, 0x1E26], [0x1E28, 0x1E28], [0x1E2A, 0x1E2A], [0x1E2C, 0x1E2C], [0x1E2E, 0x1E2E], [0x1E30, 0x1E30], [0x1E32, 0x1E32], [0x1E34, 0x1E34], [0x1E36, 0x1E36], [0x1E38, 0x1E38], [0x1E3A, 0x1E3A], [0x1E3C, 0x1E3C], [0x1E3E, 0x1E3E], [0x1E40, 0x1E40], [0x1E42, 0x1E42], [0x1E44, 0x1E44], [0x1E46, 0x1E46], [0x1E48, 0x1E48], [0x1E4A, 0x1E4A], [0x1E4C, 0x1E4C], [0x1E4E, 0x1E4E], [0x1E50, 0x1E50], [0x1E52, 0x1E52], [0x1E54, 0x1E54], [0x1E56, 0x1E56], [0x1E58, 0x1E58], [0x1E5A, 0x1E5A], [0x1E5C, 0x1E5C], [0x1E5E, 0x1E5E], [0x1E60, 0x1E60], [0x1E62, 0x1E62], [0x1E64, 0x1E64], [0x1E66, 0x1E66], [0x1E68, 0x1E68], [0x1E6A, 0x1E6A], [0x1E6C, 0x1E6C], [0x1E6E, 0x1E6E], [0x1E70, 0x1E70], [0x1E72, 0x1E72], [0x1E74, 0x1E74], [0x1E76, 0x1E76], [0x1E78, 0x1E78], [0x1E7A, 0x1E7A], [0x1E7C, 0x1E7C], [0x1E7E, 0x1E7E], [0x1E80, 0x1E80], [0x1E82, 0x1E82], [0x1E84, 0x1E84], [0x1E86, 0x1E86], [0x1E88, 0x1E88], [0x1E8A, 0x1E8A], [0x1E8C, 0x1E8C], [0x1E8E, 0x1E8E], [0x1E90, 0x1E90], [0x1E92, 0x1E92], [0x1E94, 0x1E94], [0x1EA0, 0x1EA0], [0x1EA2, 0x1EA2], [0x1EA4, 0x1EA4], [0x1EA6, 0x1EA6], [0x1EA8, 0x1EA8], [0x1EAA, 0x1EAA], [0x1EAC, 0x1EAC], [0x1EAE, 0x1EAE], [0x1EB0, 0x1EB0], [0x1EB2, 0x1EB2], [0x1EB4, 0x1EB4], [0x1EB6, 0x1EB6], [0x1EB8, 0x1EB8], [0x1EBA, 0x1EBA], [0x1EBC, 0x1EBC], [0x1EBE, 0x1EBE], [0x1EC0, 0x1EC0], [0x1EC2, 0x1EC2], [0x1EC4, 0x1EC4], [0x1EC6, 0x1EC6], [0x1EC8, 0x1EC8], [0x1ECA, 0x1ECA], [0x1ECC, 0x1ECC], [0x1ECE, 0x1ECE], [0x1ED0, 0x1ED0], [0x1ED2, 0x1ED2], [0x1ED4, 0x1ED4], [0x1ED6, 0x1ED6], [0x1ED8, 0x1ED8], [0x1EDA, 0x1EDA], [0x1EDC, 0x1EDC], [0x1EDE, 0x1EDE], [0x1EE0, 0x1EE0], [0x1EE2, 0x1EE2], [0x1EE4, 0x1EE4], [0x1EE6, 0x1EE6], [0x1EE8, 0x1EE8], [0x1EEA, 0x1EEA], [0x1EEC, 0x1EEC], [0x1EEE, 0x1EEE], [0x1EF0, 0x1EF0], [0x1EF2, 0x1EF2], [0x1EF4, 0x1EF4], [0x1EF6, 0x1EF6], [0x1EF8, 0x1EF8], [0x1F08, 0x1F0F], [0x1F18, 0x1F1D], [0x1F28, 0x1F2F], [0x1F38, 0x1F3F], [0x1F48, 0x1F4D], [0x1F59, 0x1F59], [0x1F5B, 0x1F5B], [0x1F5D, 0x1F5D], [0x1F5F, 0x1F5F], [0x1F68, 0x1F6F], [0x1FB8, 0x1FBB], [0x1FC8, 0x1FCB], [0x1FD8, 0x1FDB], [0x1FE8, 0x1FEC], [0x1FF8, 0x1FFB], [0x2102, 0x2102], [0x2107, 0x2107], [0x210B, 0x210D], [0x2110, 0x2112], [0x2115, 0x2115], [0x2119, 0x211D], [0x2124, 0x2124], [0x2126, 0x2126], [0x2128, 0x2128], [0x212A, 0x212D], [0x2130, 0x2133], [0x213E, 0x213F], [0x2145, 0x2145], [0x2183, 0x2183], [0x2C00, 0x2C2E], [0x2C60, 0x2C60], [0x2C62, 0x2C64], [0x2C67, 0x2C67], [0x2C69, 0x2C69], [0x2C6B, 0x2C6B], [0x2C75, 0x2C75], [0x2C80, 0x2C80], [0x2C82, 0x2C82], [0x2C84, 0x2C84], [0x2C86, 0x2C86], [0x2C88, 0x2C88], [0x2C8A, 0x2C8A], [0x2C8C, 0x2C8C], [0x2C8E, 0x2C8E], [0x2C90, 0x2C90], [0x2C92, 0x2C92], [0x2C94, 0x2C94], [0x2C96, 0x2C96], [0x2C98, 0x2C98], [0x2C9A, 0x2C9A], [0x2C9C, 0x2C9C], [0x2C9E, 0x2C9E], [0x2CA0, 0x2CA0], [0x2CA2, 0x2CA2], [0x2CA4, 0x2CA4], [0x2CA6, 0x2CA6], [0x2CA8, 0x2CA8], [0x2CAA, 0x2CAA], [0x2CAC, 0x2CAC], [0x2CAE, 0x2CAE], [0x2CB0, 0x2CB0], [0x2CB2, 0x2CB2], [0x2CB4, 0x2CB4], [0x2CB6, 0x2CB6], [0x2CB8, 0x2CB8], [0x2CBA, 0x2CBA], [0x2CBC, 0x2CBC], [0x2CBE, 0x2CBE], [0x2CC0, 0x2CC0], [0x2CC2, 0x2CC2], [0x2CC4, 0x2CC4], [0x2CC6, 0x2CC6], [0x2CC8, 0x2CC8], [0x2CCA, 0x2CCA], [0x2CCC, 0x2CCC], [0x2CCE, 0x2CCE], [0x2CD0, 0x2CD0], [0x2CD2, 0x2CD2], [0x2CD4, 0x2CD4], [0x2CD6, 0x2CD6], [0x2CD8, 0x2CD8], [0x2CDA, 0x2CDA], [0x2CDC, 0x2CDC], [0x2CDE, 0x2CDE], [0x2CE0, 0x2CE0], [0x2CE2, 0x2CE2], [0xFF21, 0xFF3A]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Lu.length; indexI++) { - for (indexJ = Lu[indexI][0]; indexJ <= Lu[indexI][1]; indexJ++) { - try { - var identifier = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval("var " + identifier + "=1"); - if (eval(identifier + "===1") !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_500/S7.6_A1.1_T2.js b/tests/ES3/Unicode/Unicode_500/S7.6_A1.1_T2.js deleted file mode 100644 index bea256c62..000000000 --- a/tests/ES3/Unicode/Unicode_500/S7.6_A1.1_T2.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A1.1_T2; - * @section: 7.6; - * @assertion: IdentifierStart :: UnicodeLetter (any character in the Unicode categories "Lu", "Ll", "Lt", "Lm", "Lo", "Nl"); - * @description: UnicodeLetter :: Lowercase letter (Ll). - * Complex test with eval; -*/ - -//CHECK -Ll = [[0x0061, 0x007A], [0x00AA, 0x00AA], [0x00B5, 0x00B5], [0x00BA, 0x00BA], [0x00DF, 0x00F6], [0x00F8, 0x00FF], [0x0101, 0x0101], [0x0103, 0x0103], [0x0105, 0x0105], [0x0107, 0x0107], [0x0109, 0x0109], [0x010B, 0x010B], [0x010D, 0x010D], [0x010F, 0x010F], [0x0111, 0x0111], [0x0113, 0x0113], [0x0115, 0x0115], [0x0117, 0x0117], [0x0119, 0x0119], [0x011B, 0x011B], [0x011D, 0x011D], [0x011F, 0x011F], [0x0121, 0x0121], [0x0123, 0x0123], [0x0125, 0x0125], [0x0127, 0x0127], [0x0129, 0x0129], [0x012B, 0x012B], [0x012D, 0x012D], [0x012F, 0x012F], [0x0131, 0x0131], [0x0133, 0x0133], [0x0135, 0x0135], [0x0137, 0x0138], [0x013A, 0x013A], [0x013C, 0x013C], [0x013E, 0x013E], [0x0140, 0x0140], [0x0142, 0x0142], [0x0144, 0x0144], [0x0146, 0x0146], [0x0148, 0x0149], [0x014B, 0x014B], [0x014D, 0x014D], [0x014F, 0x014F], [0x0151, 0x0151], [0x0153, 0x0153], [0x0155, 0x0155], [0x0157, 0x0157], [0x0159, 0x0159], [0x015B, 0x015B], [0x015D, 0x015D], [0x015F, 0x015F], [0x0161, 0x0161], [0x0163, 0x0163], [0x0165, 0x0165], [0x0167, 0x0167], [0x0169, 0x0169], [0x016B, 0x016B], [0x016D, 0x016D], [0x016F, 0x016F], [0x0171, 0x0171], [0x0173, 0x0173], [0x0175, 0x0175], [0x0177, 0x0177], [0x017A, 0x017A], [0x017C, 0x017C], [0x017E, 0x0180], [0x0183, 0x0183], [0x0185, 0x0185], [0x0188, 0x0188], [0x018C, 0x018D], [0x0192, 0x0192], [0x0195, 0x0195], [0x0199, 0x019B], [0x019E, 0x019E], [0x01A1, 0x01A1], [0x01A3, 0x01A3], [0x01A5, 0x01A5], [0x01A8, 0x01A8], [0x01AA, 0x01AB], [0x01AD, 0x01AD], [0x01B0, 0x01B0], [0x01B4, 0x01B4], [0x01B6, 0x01B6], [0x01B9, 0x01BA], [0x01BD, 0x01BF], [0x01C6, 0x01C6], [0x01C9, 0x01C9], [0x01CC, 0x01CC], [0x01CE, 0x01CE], [0x01D0, 0x01D0], [0x01D2, 0x01D2], [0x01D4, 0x01D4], [0x01D6, 0x01D6], [0x01D8, 0x01D8], [0x01DA, 0x01DA], [0x01DC, 0x01DD], [0x01DF, 0x01DF], [0x01E1, 0x01E1], [0x01E3, 0x01E3], [0x01E5, 0x01E5], [0x01E7, 0x01E7], [0x01E9, 0x01E9], [0x01EB, 0x01EB], [0x01ED, 0x01ED], [0x01EF, 0x01F0], [0x01F3, 0x01F3], [0x01F5, 0x01F5], [0x01F9, 0x01F9], [0x01FB, 0x01FB], [0x01FD, 0x01FD], [0x01FF, 0x01FF], [0x0201, 0x0201], [0x0203, 0x0203], [0x0205, 0x0205], [0x0207, 0x0207], [0x0209, 0x0209], [0x020B, 0x020B], [0x020D, 0x020D], [0x020F, 0x020F], [0x0211, 0x0211], [0x0213, 0x0213], [0x0215, 0x0215], [0x0217, 0x0217], [0x0219, 0x0219], [0x021B, 0x021B], [0x021D, 0x021D], [0x021F, 0x021F], [0x0221, 0x0221], [0x0223, 0x0223], [0x0225, 0x0225], [0x0227, 0x0227], [0x0229, 0x0229], [0x022B, 0x022B], [0x022D, 0x022D], [0x022F, 0x022F], [0x0231, 0x0231], [0x0233, 0x0239], [0x023C, 0x023C], [0x023F, 0x0240], [0x0242, 0x0242], [0x0247, 0x0247], [0x0249, 0x0249], [0x024B, 0x024B], [0x024D, 0x024D], [0x024F, 0x0293], [0x0295, 0x02AF], [0x037B, 0x037D], [0x0390, 0x0390], [0x03AC, 0x03CE], [0x03D0, 0x03D1], [0x03D5, 0x03D7], [0x03D9, 0x03D9], [0x03DB, 0x03DB], [0x03DD, 0x03DD], [0x03DF, 0x03DF], [0x03E1, 0x03E1], [0x03E3, 0x03E3], [0x03E5, 0x03E5], [0x03E7, 0x03E7], [0x03E9, 0x03E9], [0x03EB, 0x03EB], [0x03ED, 0x03ED], [0x03EF, 0x03F3], [0x03F5, 0x03F5], [0x03F8, 0x03F8], [0x03FB, 0x03FC], [0x0430, 0x045F], [0x0461, 0x0461], [0x0463, 0x0463], [0x0465, 0x0465], [0x0467, 0x0467], [0x0469, 0x0469], [0x046B, 0x046B], [0x046D, 0x046D], [0x046F, 0x046F], [0x0471, 0x0471], [0x0473, 0x0473], [0x0475, 0x0475], [0x0477, 0x0477], [0x0479, 0x0479], [0x047B, 0x047B], [0x047D, 0x047D], [0x047F, 0x047F], [0x0481, 0x0481], [0x048B, 0x048B], [0x048D, 0x048D], [0x048F, 0x048F], [0x0491, 0x0491], [0x0493, 0x0493], [0x0495, 0x0495], [0x0497, 0x0497], [0x0499, 0x0499], [0x049B, 0x049B], [0x049D, 0x049D], [0x049F, 0x049F], [0x04A1, 0x04A1], [0x04A3, 0x04A3], [0x04A5, 0x04A5], [0x04A7, 0x04A7], [0x04A9, 0x04A9], [0x04AB, 0x04AB], [0x04AD, 0x04AD], [0x04AF, 0x04AF], [0x04B1, 0x04B1], [0x04B3, 0x04B3], [0x04B5, 0x04B5], [0x04B7, 0x04B7], [0x04B9, 0x04B9], [0x04BB, 0x04BB], [0x04BD, 0x04BD], [0x04BF, 0x04BF], [0x04C2, 0x04C2], [0x04C4, 0x04C4], [0x04C6, 0x04C6], [0x04C8, 0x04C8], [0x04CA, 0x04CA], [0x04CC, 0x04CC], [0x04CE, 0x04CF], [0x04D1, 0x04D1], [0x04D3, 0x04D3], [0x04D5, 0x04D5], [0x04D7, 0x04D7], [0x04D9, 0x04D9], [0x04DB, 0x04DB], [0x04DD, 0x04DD], [0x04DF, 0x04DF], [0x04E1, 0x04E1], [0x04E3, 0x04E3], [0x04E5, 0x04E5], [0x04E7, 0x04E7], [0x04E9, 0x04E9], [0x04EB, 0x04EB], [0x04ED, 0x04ED], [0x04EF, 0x04EF], [0x04F1, 0x04F1], [0x04F3, 0x04F3], [0x04F5, 0x04F5], [0x04F7, 0x04F7], [0x04F9, 0x04F9], [0x04FB, 0x04FB], [0x04FD, 0x04FD], [0x04FF, 0x04FF], [0x0501, 0x0501], [0x0503, 0x0503], [0x0505, 0x0505], [0x0507, 0x0507], [0x0509, 0x0509], [0x050B, 0x050B], [0x050D, 0x050D], [0x050F, 0x050F], [0x0511, 0x0511], [0x0513, 0x0513], [0x0561, 0x0587], [0x1D00, 0x1D2B], [0x1D62, 0x1D77], [0x1D79, 0x1D9A], [0x1E01, 0x1E01], [0x1E03, 0x1E03], [0x1E05, 0x1E05], [0x1E07, 0x1E07], [0x1E09, 0x1E09], [0x1E0B, 0x1E0B], [0x1E0D, 0x1E0D], [0x1E0F, 0x1E0F], [0x1E11, 0x1E11], [0x1E13, 0x1E13], [0x1E15, 0x1E15], [0x1E17, 0x1E17], [0x1E19, 0x1E19], [0x1E1B, 0x1E1B], [0x1E1D, 0x1E1D], [0x1E1F, 0x1E1F], [0x1E21, 0x1E21], [0x1E23, 0x1E23], [0x1E25, 0x1E25], [0x1E27, 0x1E27], [0x1E29, 0x1E29], [0x1E2B, 0x1E2B], [0x1E2D, 0x1E2D], [0x1E2F, 0x1E2F], [0x1E31, 0x1E31], [0x1E33, 0x1E33], [0x1E35, 0x1E35], [0x1E37, 0x1E37], [0x1E39, 0x1E39], [0x1E3B, 0x1E3B], [0x1E3D, 0x1E3D], [0x1E3F, 0x1E3F], [0x1E41, 0x1E41], [0x1E43, 0x1E43], [0x1E45, 0x1E45], [0x1E47, 0x1E47], [0x1E49, 0x1E49], [0x1E4B, 0x1E4B], [0x1E4D, 0x1E4D], [0x1E4F, 0x1E4F], [0x1E51, 0x1E51], [0x1E53, 0x1E53], [0x1E55, 0x1E55], [0x1E57, 0x1E57], [0x1E59, 0x1E59], [0x1E5B, 0x1E5B], [0x1E5D, 0x1E5D], [0x1E5F, 0x1E5F], [0x1E61, 0x1E61], [0x1E63, 0x1E63], [0x1E65, 0x1E65], [0x1E67, 0x1E67], [0x1E69, 0x1E69], [0x1E6B, 0x1E6B], [0x1E6D, 0x1E6D], [0x1E6F, 0x1E6F], [0x1E71, 0x1E71], [0x1E73, 0x1E73], [0x1E75, 0x1E75], [0x1E77, 0x1E77], [0x1E79, 0x1E79], [0x1E7B, 0x1E7B], [0x1E7D, 0x1E7D], [0x1E7F, 0x1E7F], [0x1E81, 0x1E81], [0x1E83, 0x1E83], [0x1E85, 0x1E85], [0x1E87, 0x1E87], [0x1E89, 0x1E89], [0x1E8B, 0x1E8B], [0x1E8D, 0x1E8D], [0x1E8F, 0x1E8F], [0x1E91, 0x1E91], [0x1E93, 0x1E93], [0x1E95, 0x1E9B], [0x1EA1, 0x1EA1], [0x1EA3, 0x1EA3], [0x1EA5, 0x1EA5], [0x1EA7, 0x1EA7], [0x1EA9, 0x1EA9], [0x1EAB, 0x1EAB], [0x1EAD, 0x1EAD], [0x1EAF, 0x1EAF], [0x1EB1, 0x1EB1], [0x1EB3, 0x1EB3], [0x1EB5, 0x1EB5], [0x1EB7, 0x1EB7], [0x1EB9, 0x1EB9], [0x1EBB, 0x1EBB], [0x1EBD, 0x1EBD], [0x1EBF, 0x1EBF], [0x1EC1, 0x1EC1], [0x1EC3, 0x1EC3], [0x1EC5, 0x1EC5], [0x1EC7, 0x1EC7], [0x1EC9, 0x1EC9], [0x1ECB, 0x1ECB], [0x1ECD, 0x1ECD], [0x1ECF, 0x1ECF], [0x1ED1, 0x1ED1], [0x1ED3, 0x1ED3], [0x1ED5, 0x1ED5], [0x1ED7, 0x1ED7], [0x1ED9, 0x1ED9], [0x1EDB, 0x1EDB], [0x1EDD, 0x1EDD], [0x1EDF, 0x1EDF], [0x1EE1, 0x1EE1], [0x1EE3, 0x1EE3], [0x1EE5, 0x1EE5], [0x1EE7, 0x1EE7], [0x1EE9, 0x1EE9], [0x1EEB, 0x1EEB], [0x1EED, 0x1EED], [0x1EEF, 0x1EEF], [0x1EF1, 0x1EF1], [0x1EF3, 0x1EF3], [0x1EF5, 0x1EF5], [0x1EF7, 0x1EF7], [0x1EF9, 0x1EF9], [0x1F00, 0x1F07], [0x1F10, 0x1F15], [0x1F20, 0x1F27], [0x1F30, 0x1F37], [0x1F40, 0x1F45], [0x1F50, 0x1F57], [0x1F60, 0x1F67], [0x1F70, 0x1F7D], [0x1F80, 0x1F87], [0x1F90, 0x1F97], [0x1FA0, 0x1FA7], [0x1FB0, 0x1FB4], [0x1FB6, 0x1FB7], [0x1FBE, 0x1FBE], [0x1FC2, 0x1FC4], [0x1FC6, 0x1FC7], [0x1FD0, 0x1FD3], [0x1FD6, 0x1FD7], [0x1FE0, 0x1FE7], [0x1FF2, 0x1FF4], [0x1FF6, 0x1FF7], [0x2071, 0x2071], [0x207F, 0x207F], [0x210A, 0x210A], [0x210E, 0x210F], [0x2113, 0x2113], [0x212F, 0x212F], [0x2134, 0x2134], [0x2139, 0x2139], [0x213C, 0x213D], [0x2146, 0x2149], [0x214E, 0x214E], [0x2184, 0x2184], [0x2C30, 0x2C5E], [0x2C61, 0x2C61], [0x2C65, 0x2C66], [0x2C68, 0x2C68], [0x2C6A, 0x2C6A], [0x2C6C, 0x2C6C], [0x2C74, 0x2C74], [0x2C76, 0x2C77], [0x2C81, 0x2C81], [0x2C83, 0x2C83], [0x2C85, 0x2C85], [0x2C87, 0x2C87], [0x2C89, 0x2C89], [0x2C8B, 0x2C8B], [0x2C8D, 0x2C8D], [0x2C8F, 0x2C8F], [0x2C91, 0x2C91], [0x2C93, 0x2C93], [0x2C95, 0x2C95], [0x2C97, 0x2C97], [0x2C99, 0x2C99], [0x2C9B, 0x2C9B], [0x2C9D, 0x2C9D], [0x2C9F, 0x2C9F], [0x2CA1, 0x2CA1], [0x2CA3, 0x2CA3], [0x2CA5, 0x2CA5], [0x2CA7, 0x2CA7], [0x2CA9, 0x2CA9], [0x2CAB, 0x2CAB], [0x2CAD, 0x2CAD], [0x2CAF, 0x2CAF], [0x2CB1, 0x2CB1], [0x2CB3, 0x2CB3], [0x2CB5, 0x2CB5], [0x2CB7, 0x2CB7], [0x2CB9, 0x2CB9], [0x2CBB, 0x2CBB], [0x2CBD, 0x2CBD], [0x2CBF, 0x2CBF], [0x2CC1, 0x2CC1], [0x2CC3, 0x2CC3], [0x2CC5, 0x2CC5], [0x2CC7, 0x2CC7], [0x2CC9, 0x2CC9], [0x2CCB, 0x2CCB], [0x2CCD, 0x2CCD], [0x2CCF, 0x2CCF], [0x2CD1, 0x2CD1], [0x2CD3, 0x2CD3], [0x2CD5, 0x2CD5], [0x2CD7, 0x2CD7], [0x2CD9, 0x2CD9], [0x2CDB, 0x2CDB], [0x2CDD, 0x2CDD], [0x2CDF, 0x2CDF], [0x2CE1, 0x2CE1], [0x2CE3, 0x2CE4], [0x2D00, 0x2D25], [0xFB00, 0xFB06], [0xFB13, 0xFB17], [0xFF41, 0xFF5A]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Ll.length; indexI++) { - for (indexJ = Ll[indexI][0]; indexJ <= Ll[indexI][1]; indexJ++) { - try { - var identifier = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval("var " + identifier + "=1"); - if (eval(identifier + "===1") !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_500/S7.6_A1.1_T3.js b/tests/ES3/Unicode/Unicode_500/S7.6_A1.1_T3.js deleted file mode 100644 index 06e9329b8..000000000 --- a/tests/ES3/Unicode/Unicode_500/S7.6_A1.1_T3.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A1.1_T3; - * @section: 7.6; - * @assertion: IdentifierStart :: UnicodeLetter (any character in the Unicode categories "Lu", "Ll", "Lt", "Lm", "Lo", "Nl"); - * @description: UnicodeLetter :: Titlecase letter (Lt). - * Complex test with eval; -*/ - -//CHECK -Lt = [[0x01C5, 0x01C5], [0x01C8, 0x01C8], [0x01CB, 0x01CB], [0x01F2, 0x01F2], [0x1F88, 0x1F8F], [0x1F98, 0x1F9F], [0x1FA8, 0x1FAF], [0x1FBC, 0x1FBC], [0x1FCC, 0x1FCC], [0x1FFC, 0x1FFC]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Lt.length; indexI++) { - for (indexJ = Lt[indexI][0]; indexJ <= Lt[indexI][1]; indexJ++) { - try { - var identifier = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval("var " + identifier + "=1"); - if (eval(identifier + "===1") !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_500/S7.6_A1.1_T4.js b/tests/ES3/Unicode/Unicode_500/S7.6_A1.1_T4.js deleted file mode 100644 index b65a4b6ef..000000000 --- a/tests/ES3/Unicode/Unicode_500/S7.6_A1.1_T4.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A1.1_T4; - * @section: 7.6; - * @assertion: IdentifierStart :: UnicodeLetter (any character in the Unicode categories "Lu", "Ll", "Lt", "Lm", "Lo", "Nl"); - * @description: UnicodeLetter :: Modifier letter (Lm). - * Complex test with eval; -*/ - -//CHECK -Lm = [[0x02B0, 0x02C1], [0x02C6, 0x02D1], [0x02E0, 0x02E4], [0x02EE, 0x02EE], [0x037A, 0x037A], [0x0559, 0x0559], [0x0640, 0x0640], [0x06E5, 0x06E6], [0x07F4, 0x07F5], [0x07FA, 0x07FA], [0x0E46, 0x0E46], [0x0EC6, 0x0EC6], [0x10FC, 0x10FC], [0x17D7, 0x17D7], [0x1843, 0x1843], [0x1D2C, 0x1D61], [0x1D78, 0x1D78], [0x1D9B, 0x1DBF], [0x2090, 0x2094], [0x2D6F, 0x2D6F], [0x3005, 0x3005], [0x3031, 0x3035], [0x303B, 0x303B], [0x309D, 0x309E], [0x30FC, 0x30FE], [0xA015, 0xA015], [0xA717, 0xA71A], [0xFF70, 0xFF70], [0xFF9E, 0xFF9F]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Lm.length; indexI++) { - for (indexJ = Lm[indexI][0]; indexJ <= Lm[indexI][1]; indexJ++) { - try { - var identifier = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval("var " + identifier + "=1"); - if (eval(identifier + "===1") !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_500/S7.6_A1.1_T5.js b/tests/ES3/Unicode/Unicode_500/S7.6_A1.1_T5.js deleted file mode 100644 index 99973738a..000000000 --- a/tests/ES3/Unicode/Unicode_500/S7.6_A1.1_T5.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A1.1_T5; - * @section: 7.6; - * @assertion: IdentifierStart :: UnicodeLetter (any character in the Unicode categories "Lu", "Ll", "Lt", "Lm", "Lo", "Nl"); - * @description: UnicodeLetter :: Other letter (Lo). - * Complex test with eval; -*/ - -//CHECK -Lo = [[0x01BB, 0x01BB], [0x01C0, 0x01C3], [0x0294, 0x0294], [0x05D0, 0x05EA], [0x05F0, 0x05F2], [0x0621, 0x063A], [0x0641, 0x064A], [0x066E, 0x066F], [0x0671, 0x06D3], [0x06D5, 0x06D5], [0x06EE, 0x06EF], [0x06FA, 0x06FC], [0x06FF, 0x06FF], [0x0710, 0x0710], [0x0712, 0x072F], [0x074D, 0x076D], [0x0780, 0x07A5], [0x07B1, 0x07B1], [0x07CA, 0x07EA], [0x0904, 0x0939], [0x093D, 0x093D], [0x0950, 0x0950], [0x0958, 0x0961], [0x097B, 0x097F], [0x0985, 0x098C], [0x098F, 0x0990], [0x0993, 0x09A8], [0x09AA, 0x09B0], [0x09B2, 0x09B2], [0x09B6, 0x09B9], [0x09BD, 0x09BD], [0x09CE, 0x09CE], [0x09DC, 0x09DD], [0x09DF, 0x09E1], [0x09F0, 0x09F1], [0x0A05, 0x0A0A], [0x0A0F, 0x0A10], [0x0A13, 0x0A28], [0x0A2A, 0x0A30], [0x0A32, 0x0A33], [0x0A35, 0x0A36], [0x0A38, 0x0A39], [0x0A59, 0x0A5C], [0x0A5E, 0x0A5E], [0x0A72, 0x0A74], [0x0A85, 0x0A8D], [0x0A8F, 0x0A91], [0x0A93, 0x0AA8], [0x0AAA, 0x0AB0], [0x0AB2, 0x0AB3], [0x0AB5, 0x0AB9], [0x0ABD, 0x0ABD], [0x0AD0, 0x0AD0], [0x0AE0, 0x0AE1], [0x0B05, 0x0B0C], [0x0B0F, 0x0B10], [0x0B13, 0x0B28], [0x0B2A, 0x0B30], [0x0B32, 0x0B33], [0x0B35, 0x0B39], [0x0B3D, 0x0B3D], [0x0B5C, 0x0B5D], [0x0B5F, 0x0B61], [0x0B71, 0x0B71], [0x0B83, 0x0B83], [0x0B85, 0x0B8A], [0x0B8E, 0x0B90], [0x0B92, 0x0B95], [0x0B99, 0x0B9A], [0x0B9C, 0x0B9C], [0x0B9E, 0x0B9F], [0x0BA3, 0x0BA4], [0x0BA8, 0x0BAA], [0x0BAE, 0x0BB9], [0x0C05, 0x0C0C], [0x0C0E, 0x0C10], [0x0C12, 0x0C28], [0x0C2A, 0x0C33], [0x0C35, 0x0C39], [0x0C60, 0x0C61], [0x0C85, 0x0C8C], [0x0C8E, 0x0C90], [0x0C92, 0x0CA8], [0x0CAA, 0x0CB3], [0x0CB5, 0x0CB9], [0x0CBD, 0x0CBD], [0x0CDE, 0x0CDE], [0x0CE0, 0x0CE1], [0x0D05, 0x0D0C], [0x0D0E, 0x0D10], [0x0D12, 0x0D28], [0x0D2A, 0x0D39], [0x0D60, 0x0D61], [0x0D85, 0x0D96], [0x0D9A, 0x0DB1], [0x0DB3, 0x0DBB], [0x0DBD, 0x0DBD], [0x0DC0, 0x0DC6], [0x0E01, 0x0E30], [0x0E32, 0x0E33], [0x0E40, 0x0E45], [0x0E81, 0x0E82], [0x0E84, 0x0E84], [0x0E87, 0x0E88], [0x0E8A, 0x0E8A], [0x0E8D, 0x0E8D], [0x0E94, 0x0E97], [0x0E99, 0x0E9F], [0x0EA1, 0x0EA3], [0x0EA5, 0x0EA5], [0x0EA7, 0x0EA7], [0x0EAA, 0x0EAB], [0x0EAD, 0x0EB0], [0x0EB2, 0x0EB3], [0x0EBD, 0x0EBD], [0x0EC0, 0x0EC4], [0x0EDC, 0x0EDD], [0x0F00, 0x0F00], [0x0F40, 0x0F47], [0x0F49, 0x0F6A], [0x0F88, 0x0F8B], [0x1000, 0x1021], [0x1023, 0x1027], [0x1029, 0x102A], [0x1050, 0x1055], [0x10D0, 0x10FA], [0x1100, 0x1159], [0x115F, 0x11A2], [0x11A8, 0x11F9], [0x1200, 0x1248], [0x124A, 0x124D], [0x1250, 0x1256], [0x1258, 0x1258], [0x125A, 0x125D], [0x1260, 0x1288], [0x128A, 0x128D], [0x1290, 0x12B0], [0x12B2, 0x12B5], [0x12B8, 0x12BE], [0x12C0, 0x12C0], [0x12C2, 0x12C5], [0x12C8, 0x12D6], [0x12D8, 0x1310], [0x1312, 0x1315], [0x1318, 0x135A], [0x1380, 0x138F], [0x13A0, 0x13F4], [0x1401, 0x166C], [0x166F, 0x1676], [0x1681, 0x169A], [0x16A0, 0x16EA], [0x1700, 0x170C], [0x170E, 0x1711], [0x1720, 0x1731], [0x1740, 0x1751], [0x1760, 0x176C], [0x176E, 0x1770], [0x1780, 0x17B3], [0x17DC, 0x17DC], [0x1820, 0x1842], [0x1844, 0x1877], [0x1880, 0x18A8], [0x1900, 0x191C], [0x1950, 0x196D], [0x1970, 0x1974], [0x1980, 0x19A9], [0x19C1, 0x19C7], [0x1A00, 0x1A16], [0x1B05, 0x1B33], [0x1B45, 0x1B4B], [0x2135, 0x2138], [0x2D30, 0x2D65], [0x2D80, 0x2D96], [0x2DA0, 0x2DA6], [0x2DA8, 0x2DAE], [0x2DB0, 0x2DB6], [0x2DB8, 0x2DBE], [0x2DC0, 0x2DC6], [0x2DC8, 0x2DCE], [0x2DD0, 0x2DD6], [0x2DD8, 0x2DDE], [0x3006, 0x3006], [0x303C, 0x303C], [0x3041, 0x3096], [0x309F, 0x309F], [0x30A1, 0x30FA], [0x30FF, 0x30FF], [0x3105, 0x312C], [0x3131, 0x318E], [0x31A0, 0x31B7], [0x31F0, 0x31FF], [0x3400, 0x4DB5], [0x4E00, 0x9FBB], [0xA000, 0xA014], [0xA016, 0xA48C], [0xA800, 0xA801], [0xA803, 0xA805], [0xA807, 0xA80A], [0xA80C, 0xA822], [0xA840, 0xA873], [0xAC00, 0xD7A3], [0xF900, 0xFA2D], [0xFA30, 0xFA6A], [0xFA70, 0xFAD9], [0xFB1D, 0xFB1D], [0xFB1F, 0xFB28], [0xFB2A, 0xFB36], [0xFB38, 0xFB3C], [0xFB3E, 0xFB3E], [0xFB40, 0xFB41], [0xFB43, 0xFB44], [0xFB46, 0xFBB1], [0xFBD3, 0xFD3D], [0xFD50, 0xFD8F], [0xFD92, 0xFDC7], [0xFDF0, 0xFDFB], [0xFE70, 0xFE74], [0xFE76, 0xFEFC], [0xFF66, 0xFF6F], [0xFF71, 0xFF9D], [0xFFA0, 0xFFBE], [0xFFC2, 0xFFC7], [0xFFCA, 0xFFCF], [0xFFD2, 0xFFD7], [0xFFDA, 0xFFDC]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Lo.length; indexI++) { - for (indexJ = Lo[indexI][0]; indexJ <= Lo[indexI][1]; indexJ++) { - try { - var identifier = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval("var " + identifier + "=1"); - if (eval(identifier + "===1") !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_500/S7.6_A1.1_T6.js b/tests/ES3/Unicode/Unicode_500/S7.6_A1.1_T6.js deleted file mode 100644 index eb1954613..000000000 --- a/tests/ES3/Unicode/Unicode_500/S7.6_A1.1_T6.js +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A1.1_T6; - * @section: 7.6; - * @assertion: IdentifierStart :: UnicodeLetter (any character in the Unicode categories "Lu", "Ll", "Lt", "Lm", "Lo", "Nl"); - * @description: UnicodeLetter :: Letter number (Nl); -*/ - -//CHECK -Nl = [[0x16EE, 0x16F0], [0x2160, 0x2182], [0x3007, 0x3007], [0x3021, 0x3029], [0x3038, 0x303A]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Nl.length; indexI++) { - for (indexJ = Nl[indexI][0]; indexJ <= Nl[indexI][1]; indexJ++) { - try { - var identifier = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval("var " + identifier + "=1"); - if (eval(identifier + "===1") !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_500/S7.6_A1.4_T1.js b/tests/ES3/Unicode/Unicode_500/S7.6_A1.4_T1.js deleted file mode 100644 index d88bd3faa..000000000 --- a/tests/ES3/Unicode/Unicode_500/S7.6_A1.4_T1.js +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A1.4_T1; - * @section: 7.6; - * @assertion: IdentifierName must begin at IdentifierStart; - * @description: IdentifierStart is not UnicodeCombiningMark ("Mn"). - * Complex test with eval; -*/ - -//CHECK -Mn = [[0x0300, 0x036F], [0x0483, 0x0486], [0x0591, 0x05BD], [0x05BF, 0x05BF], [0x05C1, 0x05C2], [0x05C4, 0x05C5], [0x05C7, 0x05C7], [0x0610, 0x0615], [0x064B, 0x065E], [0x0670, 0x0670], [0x06D6, 0x06DC], [0x06DF, 0x06E4], [0x06E7, 0x06E8], [0x06EA, 0x06ED], [0x0711, 0x0711], [0x0730, 0x074A], [0x07A6, 0x07B0], [0x07EB, 0x07F3], [0x0901, 0x0902], [0x093C, 0x093C], [0x0941, 0x0948], [0x094D, 0x094D], [0x0951, 0x0954], [0x0962, 0x0963], [0x0981, 0x0981], [0x09BC, 0x09BC], [0x09C1, 0x09C4], [0x09CD, 0x09CD], [0x09E2, 0x09E3], [0x0A01, 0x0A02], [0x0A3C, 0x0A3C], [0x0A41, 0x0A42], [0x0A47, 0x0A48], [0x0A4B, 0x0A4D], [0x0A70, 0x0A71], [0x0A81, 0x0A82], [0x0ABC, 0x0ABC], [0x0AC1, 0x0AC5], [0x0AC7, 0x0AC8], [0x0ACD, 0x0ACD], [0x0AE2, 0x0AE3], [0x0B01, 0x0B01], [0x0B3C, 0x0B3C], [0x0B3F, 0x0B3F], [0x0B41, 0x0B43], [0x0B4D, 0x0B4D], [0x0B56, 0x0B56], [0x0B82, 0x0B82], [0x0BC0, 0x0BC0], [0x0BCD, 0x0BCD], [0x0C3E, 0x0C40], [0x0C46, 0x0C48], [0x0C4A, 0x0C4D], [0x0C55, 0x0C56], [0x0CBC, 0x0CBC], [0x0CBF, 0x0CBF], [0x0CC6, 0x0CC6], [0x0CCC, 0x0CCD], [0x0CE2, 0x0CE3], [0x0D41, 0x0D43], [0x0D4D, 0x0D4D], [0x0DCA, 0x0DCA], [0x0DD2, 0x0DD4], [0x0DD6, 0x0DD6], [0x0E31, 0x0E31], [0x0E34, 0x0E3A], [0x0E47, 0x0E4E], [0x0EB1, 0x0EB1], [0x0EB4, 0x0EB9], [0x0EBB, 0x0EBC], [0x0EC8, 0x0ECD], [0x0F18, 0x0F19], [0x0F35, 0x0F35], [0x0F37, 0x0F37], [0x0F39, 0x0F39], [0x0F71, 0x0F7E], [0x0F80, 0x0F84], [0x0F86, 0x0F87], [0x0F90, 0x0F97], [0x0F99, 0x0FBC], [0x0FC6, 0x0FC6], [0x102D, 0x1030], [0x1032, 0x1032], [0x1036, 0x1037], [0x1039, 0x1039], [0x1058, 0x1059], [0x135F, 0x135F], [0x1712, 0x1714], [0x1732, 0x1734], [0x1752, 0x1753], [0x1772, 0x1773], [0x17B7, 0x17BD], [0x17C6, 0x17C6], [0x17C9, 0x17D3], [0x17DD, 0x17DD], [0x180B, 0x180D], [0x18A9, 0x18A9], [0x1920, 0x1922], [0x1927, 0x1928], [0x1932, 0x1932], [0x1939, 0x193B], [0x1A17, 0x1A18], [0x1B00, 0x1B03], [0x1B34, 0x1B34], [0x1B36, 0x1B3A], [0x1B3C, 0x1B3C], [0x1B42, 0x1B42], [0x1B6B, 0x1B73], [0x1DC0, 0x1DCA], [0x1DFE, 0x1DFF], [0x20D0, 0x20DC], [0x20E1, 0x20E1], [0x20E5, 0x20EF], [0x302A, 0x302F], [0x3099, 0x309A], [0xA806, 0xA806], [0xA80B, 0xA80B], [0xA825, 0xA826], [0xFB1E, 0xFB1E], [0xFE00, 0xFE0F], [0xFE20, 0xFE23]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Mn.length; indexI++) { - for (indexJ = Mn[indexI][0]; indexJ <= Mn[indexI][1]; indexJ++) { - try { - var identifier = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval("var " + identifier + "=1"); - $ERROR('#' + hex + ' '); - errorCount++; - } catch (e) { - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_500/S7.6_A1.4_T2.js b/tests/ES3/Unicode/Unicode_500/S7.6_A1.4_T2.js deleted file mode 100644 index 6986cfd6e..000000000 --- a/tests/ES3/Unicode/Unicode_500/S7.6_A1.4_T2.js +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A1.4_T2; - * @section: 7.6; - * @assertion: IdentifierName must begin at IdentifierStart; - * @description: IdentifierStart is not UnicodeCombiningMark ("Mc"). - * Complex test with eval; -*/ - -//CHECK -Mc = [[0x0903, 0x0903], [0x093E, 0x0940], [0x0949, 0x094C], [0x0982, 0x0983], [0x09BE, 0x09C0], [0x09C7, 0x09C8], [0x09CB, 0x09CC], [0x09D7, 0x09D7], [0x0A03, 0x0A03], [0x0A3E, 0x0A40], [0x0A83, 0x0A83], [0x0ABE, 0x0AC0], [0x0AC9, 0x0AC9], [0x0ACB, 0x0ACC], [0x0B02, 0x0B03], [0x0B3E, 0x0B3E], [0x0B40, 0x0B40], [0x0B47, 0x0B48], [0x0B4B, 0x0B4C], [0x0B57, 0x0B57], [0x0BBE, 0x0BBF], [0x0BC1, 0x0BC2], [0x0BC6, 0x0BC8], [0x0BCA, 0x0BCC], [0x0BD7, 0x0BD7], [0x0C01, 0x0C03], [0x0C41, 0x0C44], [0x0C82, 0x0C83], [0x0CBE, 0x0CBE], [0x0CC0, 0x0CC4], [0x0CC7, 0x0CC8], [0x0CCA, 0x0CCB], [0x0CD5, 0x0CD6], [0x0D02, 0x0D03], [0x0D3E, 0x0D40], [0x0D46, 0x0D48], [0x0D4A, 0x0D4C], [0x0D57, 0x0D57], [0x0D82, 0x0D83], [0x0DCF, 0x0DD1], [0x0DD8, 0x0DDF], [0x0DF2, 0x0DF3], [0x0F3E, 0x0F3F], [0x0F7F, 0x0F7F], [0x102C, 0x102C], [0x1031, 0x1031], [0x1038, 0x1038], [0x1056, 0x1057], [0x17B6, 0x17B6], [0x17BE, 0x17C5], [0x17C7, 0x17C8], [0x1923, 0x1926], [0x1929, 0x192B], [0x1930, 0x1931], [0x1933, 0x1938], [0x19B0, 0x19C0], [0x19C8, 0x19C9], [0x1A19, 0x1A1B], [0x1B04, 0x1B04], [0x1B35, 0x1B35], [0x1B3B, 0x1B3B], [0x1B3D, 0x1B41], [0x1B43, 0x1B44], [0xA802, 0xA802], [0xA823, 0xA824], [0xA827, 0xA827]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Mc.length; indexI++) { - for (indexJ = Mc[indexI][0]; indexJ <= Mc[indexI][1]; indexJ++) { - try { - var identifier = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval("var " + identifier + "=1"); - $ERROR('#' + hex + ' '); - errorCount++; - } catch (e) { - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_500/S7.6_A1.4_T3.js b/tests/ES3/Unicode/Unicode_500/S7.6_A1.4_T3.js deleted file mode 100644 index 20031645d..000000000 --- a/tests/ES3/Unicode/Unicode_500/S7.6_A1.4_T3.js +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A1.4_T3; - * @section: 7.6; - * @assertion: IdentifierName must begin at IdentifierStart; - * @description: IdentifierStart is not UnicodeDigit ("Nd"). - * Complex test with eval; -*/ - -//CHECK -Nd = [[0x0030, 0x0039], [0x0660, 0x0669], [0x06F0, 0x06F9], [0x07C0, 0x07C9], [0x0966, 0x096F], [0x09E6, 0x09EF], [0x0A66, 0x0A6F], [0x0AE6, 0x0AEF], [0x0B66, 0x0B6F], [0x0BE6, 0x0BEF], [0x0C66, 0x0C6F], [0x0CE6, 0x0CEF], [0x0D66, 0x0D6F], [0x0E50, 0x0E59], [0x0ED0, 0x0ED9], [0x0F20, 0x0F29], [0x1040, 0x1049], [0x17E0, 0x17E9], [0x1810, 0x1819], [0x1946, 0x194F], [0x19D0, 0x19D9], [0x1B50, 0x1B59], [0xFF10, 0xFF19]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Nd.length; indexI++) { - for (indexJ = Nd[indexI][0]; indexJ <= Nd[indexI][1]; indexJ++) { - try { - var identifier = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval("var " + identifier + "=1"); - $ERROR('#' + hex + ' '); - errorCount++; - } catch (e) { - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_500/S7.6_A1.4_T4.js b/tests/ES3/Unicode/Unicode_500/S7.6_A1.4_T4.js deleted file mode 100644 index d1f641833..000000000 --- a/tests/ES3/Unicode/Unicode_500/S7.6_A1.4_T4.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A1.4_T4; - * @section: 7.6; - * @assertion: IdentifierName must begin at IdentifierStart; - * @description: IdentifierStart is not UnicodeConnectorPunctuation ("Pc") without $. - * Complex test with eval; -*/ - -//CHECK -Pc = [[0x005F, 0x005F], [0x203F, 0x2040], [0x2054, 0x2054], [0xFE33, 0xFE34], [0xFE4D, 0xFE4F], [0xFF3F, 0xFF3F]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Pc.length; indexI++) { - for (indexJ = Pc[indexI][0]; indexJ <= Pc[indexI][1]; indexJ++) { - try { - var identifier = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - if (hex !== "0078") { - eval("var " + identifier + "=1"); - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_500/S7.6_A2.2_T1.js b/tests/ES3/Unicode/Unicode_500/S7.6_A2.2_T1.js deleted file mode 100644 index cf61f5068..000000000 --- a/tests/ES3/Unicode/Unicode_500/S7.6_A2.2_T1.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A2.2_T1; - * @section: 7.6; - * @assertion: IdentifierPart :: UnicodeCombiningMark (any character in the Unicode categories "Mn", "Mc"); - * @description: UnicodeCombiningMark :: Non-spacing mark (Mn). - * Complex test with eval; -*/ - -//CHECK -Mn = [[0x0300, 0x036F], [0x0483, 0x0486], [0x0591, 0x05BD], [0x05BF, 0x05BF], [0x05C1, 0x05C2], [0x05C4, 0x05C5], [0x05C7, 0x05C7], [0x0610, 0x0615], [0x064B, 0x065E], [0x0670, 0x0670], [0x06D6, 0x06DC], [0x06DF, 0x06E4], [0x06E7, 0x06E8], [0x06EA, 0x06ED], [0x0711, 0x0711], [0x0730, 0x074A], [0x07A6, 0x07B0], [0x07EB, 0x07F3], [0x0901, 0x0902], [0x093C, 0x093C], [0x0941, 0x0948], [0x094D, 0x094D], [0x0951, 0x0954], [0x0962, 0x0963], [0x0981, 0x0981], [0x09BC, 0x09BC], [0x09C1, 0x09C4], [0x09CD, 0x09CD], [0x09E2, 0x09E3], [0x0A01, 0x0A02], [0x0A3C, 0x0A3C], [0x0A41, 0x0A42], [0x0A47, 0x0A48], [0x0A4B, 0x0A4D], [0x0A70, 0x0A71], [0x0A81, 0x0A82], [0x0ABC, 0x0ABC], [0x0AC1, 0x0AC5], [0x0AC7, 0x0AC8], [0x0ACD, 0x0ACD], [0x0AE2, 0x0AE3], [0x0B01, 0x0B01], [0x0B3C, 0x0B3C], [0x0B3F, 0x0B3F], [0x0B41, 0x0B43], [0x0B4D, 0x0B4D], [0x0B56, 0x0B56], [0x0B82, 0x0B82], [0x0BC0, 0x0BC0], [0x0BCD, 0x0BCD], [0x0C3E, 0x0C40], [0x0C46, 0x0C48], [0x0C4A, 0x0C4D], [0x0C55, 0x0C56], [0x0CBC, 0x0CBC], [0x0CBF, 0x0CBF], [0x0CC6, 0x0CC6], [0x0CCC, 0x0CCD], [0x0CE2, 0x0CE3], [0x0D41, 0x0D43], [0x0D4D, 0x0D4D], [0x0DCA, 0x0DCA], [0x0DD2, 0x0DD4], [0x0DD6, 0x0DD6], [0x0E31, 0x0E31], [0x0E34, 0x0E3A], [0x0E47, 0x0E4E], [0x0EB1, 0x0EB1], [0x0EB4, 0x0EB9], [0x0EBB, 0x0EBC], [0x0EC8, 0x0ECD], [0x0F18, 0x0F19], [0x0F35, 0x0F35], [0x0F37, 0x0F37], [0x0F39, 0x0F39], [0x0F71, 0x0F7E], [0x0F80, 0x0F84], [0x0F86, 0x0F87], [0x0F90, 0x0F97], [0x0F99, 0x0FBC], [0x0FC6, 0x0FC6], [0x102D, 0x1030], [0x1032, 0x1032], [0x1036, 0x1037], [0x1039, 0x1039], [0x1058, 0x1059], [0x135F, 0x135F], [0x1712, 0x1714], [0x1732, 0x1734], [0x1752, 0x1753], [0x1772, 0x1773], [0x17B7, 0x17BD], [0x17C6, 0x17C6], [0x17C9, 0x17D3], [0x17DD, 0x17DD], [0x180B, 0x180D], [0x18A9, 0x18A9], [0x1920, 0x1922], [0x1927, 0x1928], [0x1932, 0x1932], [0x1939, 0x193B], [0x1A17, 0x1A18], [0x1B00, 0x1B03], [0x1B34, 0x1B34], [0x1B36, 0x1B3A], [0x1B3C, 0x1B3C], [0x1B42, 0x1B42], [0x1B6B, 0x1B73], [0x1DC0, 0x1DCA], [0x1DFE, 0x1DFF], [0x20D0, 0x20DC], [0x20E1, 0x20E1], [0x20E5, 0x20EF], [0x302A, 0x302F], [0x3099, 0x309A], [0xA806, 0xA806], [0xA80B, 0xA80B], [0xA825, 0xA826], [0xFB1E, 0xFB1E], [0xFE00, 0xFE0F], [0xFE20, 0xFE23]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Mn.length; indexI++) { - for (indexJ = Mn[indexI][0]; indexJ <= Mn[indexI][1]; indexJ++) { - try { - var identifier = "$" + String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval("var " + identifier + "=1"); - if (eval(identifier + "===1") !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_500/S7.6_A2.2_T2.js b/tests/ES3/Unicode/Unicode_500/S7.6_A2.2_T2.js deleted file mode 100644 index 52aec18f6..000000000 --- a/tests/ES3/Unicode/Unicode_500/S7.6_A2.2_T2.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A2.2_T2; - * @section: 7.6; - * @assertion: IdentifierPart :: UnicodeCombiningMark (any character in the Unicode categories "Mn", "Mc"); - * @description: UnicodeCombiningMark :: Combining spacing mark (Mc). - * Complex test with eval; -*/ - -//CHECK -Mc = [[0x0903, 0x0903], [0x093E, 0x0940], [0x0949, 0x094C], [0x0982, 0x0983], [0x09BE, 0x09C0], [0x09C7, 0x09C8], [0x09CB, 0x09CC], [0x09D7, 0x09D7], [0x0A03, 0x0A03], [0x0A3E, 0x0A40], [0x0A83, 0x0A83], [0x0ABE, 0x0AC0], [0x0AC9, 0x0AC9], [0x0ACB, 0x0ACC], [0x0B02, 0x0B03], [0x0B3E, 0x0B3E], [0x0B40, 0x0B40], [0x0B47, 0x0B48], [0x0B4B, 0x0B4C], [0x0B57, 0x0B57], [0x0BBE, 0x0BBF], [0x0BC1, 0x0BC2], [0x0BC6, 0x0BC8], [0x0BCA, 0x0BCC], [0x0BD7, 0x0BD7], [0x0C01, 0x0C03], [0x0C41, 0x0C44], [0x0C82, 0x0C83], [0x0CBE, 0x0CBE], [0x0CC0, 0x0CC4], [0x0CC7, 0x0CC8], [0x0CCA, 0x0CCB], [0x0CD5, 0x0CD6], [0x0D02, 0x0D03], [0x0D3E, 0x0D40], [0x0D46, 0x0D48], [0x0D4A, 0x0D4C], [0x0D57, 0x0D57], [0x0D82, 0x0D83], [0x0DCF, 0x0DD1], [0x0DD8, 0x0DDF], [0x0DF2, 0x0DF3], [0x0F3E, 0x0F3F], [0x0F7F, 0x0F7F], [0x102C, 0x102C], [0x1031, 0x1031], [0x1038, 0x1038], [0x1056, 0x1057], [0x17B6, 0x17B6], [0x17BE, 0x17C5], [0x17C7, 0x17C8], [0x1923, 0x1926], [0x1929, 0x192B], [0x1930, 0x1931], [0x1933, 0x1938], [0x19B0, 0x19C0], [0x19C8, 0x19C9], [0x1A19, 0x1A1B], [0x1B04, 0x1B04], [0x1B35, 0x1B35], [0x1B3B, 0x1B3B], [0x1B3D, 0x1B41], [0x1B43, 0x1B44], [0xA802, 0xA802], [0xA823, 0xA824], [0xA827, 0xA827]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Mc.length; indexI++) { - for (indexJ = Mc[indexI][0]; indexJ <= Mc[indexI][1]; indexJ++) { - try { - var identifier = "$" + String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval("var " + identifier + "=1"); - if (eval(identifier + "===1") !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_500/S7.6_A2.3.js b/tests/ES3/Unicode/Unicode_500/S7.6_A2.3.js deleted file mode 100644 index e9845e5f3..000000000 --- a/tests/ES3/Unicode/Unicode_500/S7.6_A2.3.js +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A2.3; - * @section: 7.6; - * @assertion: IdentifierPart :: UnicodeDigit (any character in the Unicode categories "Decimal Number (Nd)". - * @description: Complex test with eval; -*/ - -//CHECK -Nd = [[0x0030, 0x0039], [0x0660, 0x0669], [0x06F0, 0x06F9], [0x07C0, 0x07C9], [0x0966, 0x096F], [0x09E6, 0x09EF], [0x0A66, 0x0A6F], [0x0AE6, 0x0AEF], [0x0B66, 0x0B6F], [0x0BE6, 0x0BEF], [0x0C66, 0x0C6F], [0x0CE6, 0x0CEF], [0x0D66, 0x0D6F], [0x0E50, 0x0E59], [0x0ED0, 0x0ED9], [0x0F20, 0x0F29], [0x1040, 0x1049], [0x17E0, 0x17E9], [0x1810, 0x1819], [0x1946, 0x194F], [0x19D0, 0x19D9], [0x1B50, 0x1B59], [0xFF10, 0xFF19]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Nd.length; indexI++) { - for (indexJ = Nd[indexI][0]; indexJ <= Nd[indexI][1]; indexJ++) { - try { - var identifier = "$" + String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval("var " + identifier + "=1"); - if (eval(identifier + "===1") !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_500/S7.6_A2.4.js b/tests/ES3/Unicode/Unicode_500/S7.6_A2.4.js deleted file mode 100644 index e7b636a2a..000000000 --- a/tests/ES3/Unicode/Unicode_500/S7.6_A2.4.js +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A2.4; - * @section: 7.6; - * @assertion: IdentifierPart :: UnicodeConnectorPunctuation (any character in the Unicode categories "Connector Punctuation (Pc)". - * @description: Complex test with eval; -*/ - -//CHECK -Pc = [[0x005F, 0x005F], [0x203F, 0x2040], [0x2054, 0x2054], [0xFE33, 0xFE34], [0xFE4D, 0xFE4F], [0xFF3F, 0xFF3F]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Pc.length; indexI++) { - for (indexJ = Pc[indexI][0]; indexJ <= Pc[indexI][1]; indexJ++) { - try { - var identifier = "$" + String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval("var " + identifier + "=1"); - if (eval(identifier + "===1") !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_500/S7.6_A3.1.js b/tests/ES3/Unicode/Unicode_500/S7.6_A3.1.js deleted file mode 100644 index c1e4e8c32..000000000 --- a/tests/ES3/Unicode/Unicode_500/S7.6_A3.1.js +++ /dev/null @@ -1,152 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A3.1; - * @section: 7.6; - * @assertion: IdentifierName must contain only IdentifierPart character; - * @description: Complex test with eval; -*/ - -//CHECK -Lu = [[0x0041, 0x005A], [0x00C0, 0x00D6], [0x00D8, 0x00DE], [0x0100, 0x0100], [0x0102, 0x0102], [0x0104, 0x0104], [0x0106, 0x0106], [0x0108, 0x0108], [0x010A, 0x010A], [0x010C, 0x010C], [0x010E, 0x010E], [0x0110, 0x0110], [0x0112, 0x0112], [0x0114, 0x0114], [0x0116, 0x0116], [0x0118, 0x0118], [0x011A, 0x011A], [0x011C, 0x011C], [0x011E, 0x011E], [0x0120, 0x0120], [0x0122, 0x0122], [0x0124, 0x0124], [0x0126, 0x0126], [0x0128, 0x0128], [0x012A, 0x012A], [0x012C, 0x012C], [0x012E, 0x012E], [0x0130, 0x0130], [0x0132, 0x0132], [0x0134, 0x0134], [0x0136, 0x0136], [0x0139, 0x0139], [0x013B, 0x013B], [0x013D, 0x013D], [0x013F, 0x013F], [0x0141, 0x0141], [0x0143, 0x0143], [0x0145, 0x0145], [0x0147, 0x0147], [0x014A, 0x014A], [0x014C, 0x014C], [0x014E, 0x014E], [0x0150, 0x0150], [0x0152, 0x0152], [0x0154, 0x0154], [0x0156, 0x0156], [0x0158, 0x0158], [0x015A, 0x015A], [0x015C, 0x015C], [0x015E, 0x015E], [0x0160, 0x0160], [0x0162, 0x0162], [0x0164, 0x0164], [0x0166, 0x0166], [0x0168, 0x0168], [0x016A, 0x016A], [0x016C, 0x016C], [0x016E, 0x016E], [0x0170, 0x0170], [0x0172, 0x0172], [0x0174, 0x0174], [0x0176, 0x0176], [0x0178, 0x0179], [0x017B, 0x017B], [0x017D, 0x017D], [0x0181, 0x0182], [0x0184, 0x0184], [0x0186, 0x0187], [0x0189, 0x018B], [0x018E, 0x0191], [0x0193, 0x0194], [0x0196, 0x0198], [0x019C, 0x019D], [0x019F, 0x01A0], [0x01A2, 0x01A2], [0x01A4, 0x01A4], [0x01A6, 0x01A7], [0x01A9, 0x01A9], [0x01AC, 0x01AC], [0x01AE, 0x01AF], [0x01B1, 0x01B3], [0x01B5, 0x01B5], [0x01B7, 0x01B8], [0x01BC, 0x01BC], [0x01C4, 0x01C4], [0x01C7, 0x01C7], [0x01CA, 0x01CA], [0x01CD, 0x01CD], [0x01CF, 0x01CF], [0x01D1, 0x01D1], [0x01D3, 0x01D3], [0x01D5, 0x01D5], [0x01D7, 0x01D7], [0x01D9, 0x01D9], [0x01DB, 0x01DB], [0x01DE, 0x01DE], [0x01E0, 0x01E0], [0x01E2, 0x01E2], [0x01E4, 0x01E4], [0x01E6, 0x01E6], [0x01E8, 0x01E8], [0x01EA, 0x01EA], [0x01EC, 0x01EC], [0x01EE, 0x01EE], [0x01F1, 0x01F1], [0x01F4, 0x01F4], [0x01F6, 0x01F8], [0x01FA, 0x01FA], [0x01FC, 0x01FC], [0x01FE, 0x01FE], [0x0200, 0x0200], [0x0202, 0x0202], [0x0204, 0x0204], [0x0206, 0x0206], [0x0208, 0x0208], [0x020A, 0x020A], [0x020C, 0x020C], [0x020E, 0x020E], [0x0210, 0x0210], [0x0212, 0x0212], [0x0214, 0x0214], [0x0216, 0x0216], [0x0218, 0x0218], [0x021A, 0x021A], [0x021C, 0x021C], [0x021E, 0x021E], [0x0220, 0x0220], [0x0222, 0x0222], [0x0224, 0x0224], [0x0226, 0x0226], [0x0228, 0x0228], [0x022A, 0x022A], [0x022C, 0x022C], [0x022E, 0x022E], [0x0230, 0x0230], [0x0232, 0x0232], [0x023A, 0x023B], [0x023D, 0x023E], [0x0241, 0x0241], [0x0243, 0x0246], [0x0248, 0x0248], [0x024A, 0x024A], [0x024C, 0x024C], [0x024E, 0x024E], [0x0386, 0x0386], [0x0388, 0x038A], [0x038C, 0x038C], [0x038E, 0x038F], [0x0391, 0x03A1], [0x03A3, 0x03AB], [0x03D2, 0x03D4], [0x03D8, 0x03D8], [0x03DA, 0x03DA], [0x03DC, 0x03DC], [0x03DE, 0x03DE], [0x03E0, 0x03E0], [0x03E2, 0x03E2], [0x03E4, 0x03E4], [0x03E6, 0x03E6], [0x03E8, 0x03E8], [0x03EA, 0x03EA], [0x03EC, 0x03EC], [0x03EE, 0x03EE], [0x03F4, 0x03F4], [0x03F7, 0x03F7], [0x03F9, 0x03FA], [0x03FD, 0x042F], [0x0460, 0x0460], [0x0462, 0x0462], [0x0464, 0x0464], [0x0466, 0x0466], [0x0468, 0x0468], [0x046A, 0x046A], [0x046C, 0x046C], [0x046E, 0x046E], [0x0470, 0x0470], [0x0472, 0x0472], [0x0474, 0x0474], [0x0476, 0x0476], [0x0478, 0x0478], [0x047A, 0x047A], [0x047C, 0x047C], [0x047E, 0x047E], [0x0480, 0x0480], [0x048A, 0x048A], [0x048C, 0x048C], [0x048E, 0x048E], [0x0490, 0x0490], [0x0492, 0x0492], [0x0494, 0x0494], [0x0496, 0x0496], [0x0498, 0x0498], [0x049A, 0x049A], [0x049C, 0x049C], [0x049E, 0x049E], [0x04A0, 0x04A0], [0x04A2, 0x04A2], [0x04A4, 0x04A4], [0x04A6, 0x04A6], [0x04A8, 0x04A8], [0x04AA, 0x04AA], [0x04AC, 0x04AC], [0x04AE, 0x04AE], [0x04B0, 0x04B0], [0x04B2, 0x04B2], [0x04B4, 0x04B4], [0x04B6, 0x04B6], [0x04B8, 0x04B8], [0x04BA, 0x04BA], [0x04BC, 0x04BC], [0x04BE, 0x04BE], [0x04C0, 0x04C1], [0x04C3, 0x04C3], [0x04C5, 0x04C5], [0x04C7, 0x04C7], [0x04C9, 0x04C9], [0x04CB, 0x04CB], [0x04CD, 0x04CD], [0x04D0, 0x04D0], [0x04D2, 0x04D2], [0x04D4, 0x04D4], [0x04D6, 0x04D6], [0x04D8, 0x04D8], [0x04DA, 0x04DA], [0x04DC, 0x04DC], [0x04DE, 0x04DE], [0x04E0, 0x04E0], [0x04E2, 0x04E2], [0x04E4, 0x04E4], [0x04E6, 0x04E6], [0x04E8, 0x04E8], [0x04EA, 0x04EA], [0x04EC, 0x04EC], [0x04EE, 0x04EE], [0x04F0, 0x04F0], [0x04F2, 0x04F2], [0x04F4, 0x04F4], [0x04F6, 0x04F6], [0x04F8, 0x04F8], [0x04FA, 0x04FA], [0x04FC, 0x04FC], [0x04FE, 0x04FE], [0x0500, 0x0500], [0x0502, 0x0502], [0x0504, 0x0504], [0x0506, 0x0506], [0x0508, 0x0508], [0x050A, 0x050A], [0x050C, 0x050C], [0x050E, 0x050E], [0x0510, 0x0510], [0x0512, 0x0512], [0x0531, 0x0556], [0x10A0, 0x10C5], [0x1E00, 0x1E00], [0x1E02, 0x1E02], [0x1E04, 0x1E04], [0x1E06, 0x1E06], [0x1E08, 0x1E08], [0x1E0A, 0x1E0A], [0x1E0C, 0x1E0C], [0x1E0E, 0x1E0E], [0x1E10, 0x1E10], [0x1E12, 0x1E12], [0x1E14, 0x1E14], [0x1E16, 0x1E16], [0x1E18, 0x1E18], [0x1E1A, 0x1E1A], [0x1E1C, 0x1E1C], [0x1E1E, 0x1E1E], [0x1E20, 0x1E20], [0x1E22, 0x1E22], [0x1E24, 0x1E24], [0x1E26, 0x1E26], [0x1E28, 0x1E28], [0x1E2A, 0x1E2A], [0x1E2C, 0x1E2C], [0x1E2E, 0x1E2E], [0x1E30, 0x1E30], [0x1E32, 0x1E32], [0x1E34, 0x1E34], [0x1E36, 0x1E36], [0x1E38, 0x1E38], [0x1E3A, 0x1E3A], [0x1E3C, 0x1E3C], [0x1E3E, 0x1E3E], [0x1E40, 0x1E40], [0x1E42, 0x1E42], [0x1E44, 0x1E44], [0x1E46, 0x1E46], [0x1E48, 0x1E48], [0x1E4A, 0x1E4A], [0x1E4C, 0x1E4C], [0x1E4E, 0x1E4E], [0x1E50, 0x1E50], [0x1E52, 0x1E52], [0x1E54, 0x1E54], [0x1E56, 0x1E56], [0x1E58, 0x1E58], [0x1E5A, 0x1E5A], [0x1E5C, 0x1E5C], [0x1E5E, 0x1E5E], [0x1E60, 0x1E60], [0x1E62, 0x1E62], [0x1E64, 0x1E64], [0x1E66, 0x1E66], [0x1E68, 0x1E68], [0x1E6A, 0x1E6A], [0x1E6C, 0x1E6C], [0x1E6E, 0x1E6E], [0x1E70, 0x1E70], [0x1E72, 0x1E72], [0x1E74, 0x1E74], [0x1E76, 0x1E76], [0x1E78, 0x1E78], [0x1E7A, 0x1E7A], [0x1E7C, 0x1E7C], [0x1E7E, 0x1E7E], [0x1E80, 0x1E80], [0x1E82, 0x1E82], [0x1E84, 0x1E84], [0x1E86, 0x1E86], [0x1E88, 0x1E88], [0x1E8A, 0x1E8A], [0x1E8C, 0x1E8C], [0x1E8E, 0x1E8E], [0x1E90, 0x1E90], [0x1E92, 0x1E92], [0x1E94, 0x1E94], [0x1EA0, 0x1EA0], [0x1EA2, 0x1EA2], [0x1EA4, 0x1EA4], [0x1EA6, 0x1EA6], [0x1EA8, 0x1EA8], [0x1EAA, 0x1EAA], [0x1EAC, 0x1EAC], [0x1EAE, 0x1EAE], [0x1EB0, 0x1EB0], [0x1EB2, 0x1EB2], [0x1EB4, 0x1EB4], [0x1EB6, 0x1EB6], [0x1EB8, 0x1EB8], [0x1EBA, 0x1EBA], [0x1EBC, 0x1EBC], [0x1EBE, 0x1EBE], [0x1EC0, 0x1EC0], [0x1EC2, 0x1EC2], [0x1EC4, 0x1EC4], [0x1EC6, 0x1EC6], [0x1EC8, 0x1EC8], [0x1ECA, 0x1ECA], [0x1ECC, 0x1ECC], [0x1ECE, 0x1ECE], [0x1ED0, 0x1ED0], [0x1ED2, 0x1ED2], [0x1ED4, 0x1ED4], [0x1ED6, 0x1ED6], [0x1ED8, 0x1ED8], [0x1EDA, 0x1EDA], [0x1EDC, 0x1EDC], [0x1EDE, 0x1EDE], [0x1EE0, 0x1EE0], [0x1EE2, 0x1EE2], [0x1EE4, 0x1EE4], [0x1EE6, 0x1EE6], [0x1EE8, 0x1EE8], [0x1EEA, 0x1EEA], [0x1EEC, 0x1EEC], [0x1EEE, 0x1EEE], [0x1EF0, 0x1EF0], [0x1EF2, 0x1EF2], [0x1EF4, 0x1EF4], [0x1EF6, 0x1EF6], [0x1EF8, 0x1EF8], [0x1F08, 0x1F0F], [0x1F18, 0x1F1D], [0x1F28, 0x1F2F], [0x1F38, 0x1F3F], [0x1F48, 0x1F4D], [0x1F59, 0x1F59], [0x1F5B, 0x1F5B], [0x1F5D, 0x1F5D], [0x1F5F, 0x1F5F], [0x1F68, 0x1F6F], [0x1FB8, 0x1FBB], [0x1FC8, 0x1FCB], [0x1FD8, 0x1FDB], [0x1FE8, 0x1FEC], [0x1FF8, 0x1FFB], [0x2102, 0x2102], [0x2107, 0x2107], [0x210B, 0x210D], [0x2110, 0x2112], [0x2115, 0x2115], [0x2119, 0x211D], [0x2124, 0x2124], [0x2126, 0x2126], [0x2128, 0x2128], [0x212A, 0x212D], [0x2130, 0x2133], [0x213E, 0x213F], [0x2145, 0x2145], [0x2183, 0x2183], [0x2C00, 0x2C2E], [0x2C60, 0x2C60], [0x2C62, 0x2C64], [0x2C67, 0x2C67], [0x2C69, 0x2C69], [0x2C6B, 0x2C6B], [0x2C75, 0x2C75], [0x2C80, 0x2C80], [0x2C82, 0x2C82], [0x2C84, 0x2C84], [0x2C86, 0x2C86], [0x2C88, 0x2C88], [0x2C8A, 0x2C8A], [0x2C8C, 0x2C8C], [0x2C8E, 0x2C8E], [0x2C90, 0x2C90], [0x2C92, 0x2C92], [0x2C94, 0x2C94], [0x2C96, 0x2C96], [0x2C98, 0x2C98], [0x2C9A, 0x2C9A], [0x2C9C, 0x2C9C], [0x2C9E, 0x2C9E], [0x2CA0, 0x2CA0], [0x2CA2, 0x2CA2], [0x2CA4, 0x2CA4], [0x2CA6, 0x2CA6], [0x2CA8, 0x2CA8], [0x2CAA, 0x2CAA], [0x2CAC, 0x2CAC], [0x2CAE, 0x2CAE], [0x2CB0, 0x2CB0], [0x2CB2, 0x2CB2], [0x2CB4, 0x2CB4], [0x2CB6, 0x2CB6], [0x2CB8, 0x2CB8], [0x2CBA, 0x2CBA], [0x2CBC, 0x2CBC], [0x2CBE, 0x2CBE], [0x2CC0, 0x2CC0], [0x2CC2, 0x2CC2], [0x2CC4, 0x2CC4], [0x2CC6, 0x2CC6], [0x2CC8, 0x2CC8], [0x2CCA, 0x2CCA], [0x2CCC, 0x2CCC], [0x2CCE, 0x2CCE], [0x2CD0, 0x2CD0], [0x2CD2, 0x2CD2], [0x2CD4, 0x2CD4], [0x2CD6, 0x2CD6], [0x2CD8, 0x2CD8], [0x2CDA, 0x2CDA], [0x2CDC, 0x2CDC], [0x2CDE, 0x2CDE], [0x2CE0, 0x2CE0], [0x2CE2, 0x2CE2], [0xFF21, 0xFF3A]]; -Ll = [[0x0061, 0x007A], [0x00AA, 0x00AA], [0x00B5, 0x00B5], [0x00BA, 0x00BA], [0x00DF, 0x00F6], [0x00F8, 0x00FF], [0x0101, 0x0101], [0x0103, 0x0103], [0x0105, 0x0105], [0x0107, 0x0107], [0x0109, 0x0109], [0x010B, 0x010B], [0x010D, 0x010D], [0x010F, 0x010F], [0x0111, 0x0111], [0x0113, 0x0113], [0x0115, 0x0115], [0x0117, 0x0117], [0x0119, 0x0119], [0x011B, 0x011B], [0x011D, 0x011D], [0x011F, 0x011F], [0x0121, 0x0121], [0x0123, 0x0123], [0x0125, 0x0125], [0x0127, 0x0127], [0x0129, 0x0129], [0x012B, 0x012B], [0x012D, 0x012D], [0x012F, 0x012F], [0x0131, 0x0131], [0x0133, 0x0133], [0x0135, 0x0135], [0x0137, 0x0138], [0x013A, 0x013A], [0x013C, 0x013C], [0x013E, 0x013E], [0x0140, 0x0140], [0x0142, 0x0142], [0x0144, 0x0144], [0x0146, 0x0146], [0x0148, 0x0149], [0x014B, 0x014B], [0x014D, 0x014D], [0x014F, 0x014F], [0x0151, 0x0151], [0x0153, 0x0153], [0x0155, 0x0155], [0x0157, 0x0157], [0x0159, 0x0159], [0x015B, 0x015B], [0x015D, 0x015D], [0x015F, 0x015F], [0x0161, 0x0161], [0x0163, 0x0163], [0x0165, 0x0165], [0x0167, 0x0167], [0x0169, 0x0169], [0x016B, 0x016B], [0x016D, 0x016D], [0x016F, 0x016F], [0x0171, 0x0171], [0x0173, 0x0173], [0x0175, 0x0175], [0x0177, 0x0177], [0x017A, 0x017A], [0x017C, 0x017C], [0x017E, 0x0180], [0x0183, 0x0183], [0x0185, 0x0185], [0x0188, 0x0188], [0x018C, 0x018D], [0x0192, 0x0192], [0x0195, 0x0195], [0x0199, 0x019B], [0x019E, 0x019E], [0x01A1, 0x01A1], [0x01A3, 0x01A3], [0x01A5, 0x01A5], [0x01A8, 0x01A8], [0x01AA, 0x01AB], [0x01AD, 0x01AD], [0x01B0, 0x01B0], [0x01B4, 0x01B4], [0x01B6, 0x01B6], [0x01B9, 0x01BA], [0x01BD, 0x01BF], [0x01C6, 0x01C6], [0x01C9, 0x01C9], [0x01CC, 0x01CC], [0x01CE, 0x01CE], [0x01D0, 0x01D0], [0x01D2, 0x01D2], [0x01D4, 0x01D4], [0x01D6, 0x01D6], [0x01D8, 0x01D8], [0x01DA, 0x01DA], [0x01DC, 0x01DD], [0x01DF, 0x01DF], [0x01E1, 0x01E1], [0x01E3, 0x01E3], [0x01E5, 0x01E5], [0x01E7, 0x01E7], [0x01E9, 0x01E9], [0x01EB, 0x01EB], [0x01ED, 0x01ED], [0x01EF, 0x01F0], [0x01F3, 0x01F3], [0x01F5, 0x01F5], [0x01F9, 0x01F9], [0x01FB, 0x01FB], [0x01FD, 0x01FD], [0x01FF, 0x01FF], [0x0201, 0x0201], [0x0203, 0x0203], [0x0205, 0x0205], [0x0207, 0x0207], [0x0209, 0x0209], [0x020B, 0x020B], [0x020D, 0x020D], [0x020F, 0x020F], [0x0211, 0x0211], [0x0213, 0x0213], [0x0215, 0x0215], [0x0217, 0x0217], [0x0219, 0x0219], [0x021B, 0x021B], [0x021D, 0x021D], [0x021F, 0x021F], [0x0221, 0x0221], [0x0223, 0x0223], [0x0225, 0x0225], [0x0227, 0x0227], [0x0229, 0x0229], [0x022B, 0x022B], [0x022D, 0x022D], [0x022F, 0x022F], [0x0231, 0x0231], [0x0233, 0x0239], [0x023C, 0x023C], [0x023F, 0x0240], [0x0242, 0x0242], [0x0247, 0x0247], [0x0249, 0x0249], [0x024B, 0x024B], [0x024D, 0x024D], [0x024F, 0x0293], [0x0295, 0x02AF], [0x037B, 0x037D], [0x0390, 0x0390], [0x03AC, 0x03CE], [0x03D0, 0x03D1], [0x03D5, 0x03D7], [0x03D9, 0x03D9], [0x03DB, 0x03DB], [0x03DD, 0x03DD], [0x03DF, 0x03DF], [0x03E1, 0x03E1], [0x03E3, 0x03E3], [0x03E5, 0x03E5], [0x03E7, 0x03E7], [0x03E9, 0x03E9], [0x03EB, 0x03EB], [0x03ED, 0x03ED], [0x03EF, 0x03F3], [0x03F5, 0x03F5], [0x03F8, 0x03F8], [0x03FB, 0x03FC], [0x0430, 0x045F], [0x0461, 0x0461], [0x0463, 0x0463], [0x0465, 0x0465], [0x0467, 0x0467], [0x0469, 0x0469], [0x046B, 0x046B], [0x046D, 0x046D], [0x046F, 0x046F], [0x0471, 0x0471], [0x0473, 0x0473], [0x0475, 0x0475], [0x0477, 0x0477], [0x0479, 0x0479], [0x047B, 0x047B], [0x047D, 0x047D], [0x047F, 0x047F], [0x0481, 0x0481], [0x048B, 0x048B], [0x048D, 0x048D], [0x048F, 0x048F], [0x0491, 0x0491], [0x0493, 0x0493], [0x0495, 0x0495], [0x0497, 0x0497], [0x0499, 0x0499], [0x049B, 0x049B], [0x049D, 0x049D], [0x049F, 0x049F], [0x04A1, 0x04A1], [0x04A3, 0x04A3], [0x04A5, 0x04A5], [0x04A7, 0x04A7], [0x04A9, 0x04A9], [0x04AB, 0x04AB], [0x04AD, 0x04AD], [0x04AF, 0x04AF], [0x04B1, 0x04B1], [0x04B3, 0x04B3], [0x04B5, 0x04B5], [0x04B7, 0x04B7], [0x04B9, 0x04B9], [0x04BB, 0x04BB], [0x04BD, 0x04BD], [0x04BF, 0x04BF], [0x04C2, 0x04C2], [0x04C4, 0x04C4], [0x04C6, 0x04C6], [0x04C8, 0x04C8], [0x04CA, 0x04CA], [0x04CC, 0x04CC], [0x04CE, 0x04CF], [0x04D1, 0x04D1], [0x04D3, 0x04D3], [0x04D5, 0x04D5], [0x04D7, 0x04D7], [0x04D9, 0x04D9], [0x04DB, 0x04DB], [0x04DD, 0x04DD], [0x04DF, 0x04DF], [0x04E1, 0x04E1], [0x04E3, 0x04E3], [0x04E5, 0x04E5], [0x04E7, 0x04E7], [0x04E9, 0x04E9], [0x04EB, 0x04EB], [0x04ED, 0x04ED], [0x04EF, 0x04EF], [0x04F1, 0x04F1], [0x04F3, 0x04F3], [0x04F5, 0x04F5], [0x04F7, 0x04F7], [0x04F9, 0x04F9], [0x04FB, 0x04FB], [0x04FD, 0x04FD], [0x04FF, 0x04FF], [0x0501, 0x0501], [0x0503, 0x0503], [0x0505, 0x0505], [0x0507, 0x0507], [0x0509, 0x0509], [0x050B, 0x050B], [0x050D, 0x050D], [0x050F, 0x050F], [0x0511, 0x0511], [0x0513, 0x0513], [0x0561, 0x0587], [0x1D00, 0x1D2B], [0x1D62, 0x1D77], [0x1D79, 0x1D9A], [0x1E01, 0x1E01], [0x1E03, 0x1E03], [0x1E05, 0x1E05], [0x1E07, 0x1E07], [0x1E09, 0x1E09], [0x1E0B, 0x1E0B], [0x1E0D, 0x1E0D], [0x1E0F, 0x1E0F], [0x1E11, 0x1E11], [0x1E13, 0x1E13], [0x1E15, 0x1E15], [0x1E17, 0x1E17], [0x1E19, 0x1E19], [0x1E1B, 0x1E1B], [0x1E1D, 0x1E1D], [0x1E1F, 0x1E1F], [0x1E21, 0x1E21], [0x1E23, 0x1E23], [0x1E25, 0x1E25], [0x1E27, 0x1E27], [0x1E29, 0x1E29], [0x1E2B, 0x1E2B], [0x1E2D, 0x1E2D], [0x1E2F, 0x1E2F], [0x1E31, 0x1E31], [0x1E33, 0x1E33], [0x1E35, 0x1E35], [0x1E37, 0x1E37], [0x1E39, 0x1E39], [0x1E3B, 0x1E3B], [0x1E3D, 0x1E3D], [0x1E3F, 0x1E3F], [0x1E41, 0x1E41], [0x1E43, 0x1E43], [0x1E45, 0x1E45], [0x1E47, 0x1E47], [0x1E49, 0x1E49], [0x1E4B, 0x1E4B], [0x1E4D, 0x1E4D], [0x1E4F, 0x1E4F], [0x1E51, 0x1E51], [0x1E53, 0x1E53], [0x1E55, 0x1E55], [0x1E57, 0x1E57], [0x1E59, 0x1E59], [0x1E5B, 0x1E5B], [0x1E5D, 0x1E5D], [0x1E5F, 0x1E5F], [0x1E61, 0x1E61], [0x1E63, 0x1E63], [0x1E65, 0x1E65], [0x1E67, 0x1E67], [0x1E69, 0x1E69], [0x1E6B, 0x1E6B], [0x1E6D, 0x1E6D], [0x1E6F, 0x1E6F], [0x1E71, 0x1E71], [0x1E73, 0x1E73], [0x1E75, 0x1E75], [0x1E77, 0x1E77], [0x1E79, 0x1E79], [0x1E7B, 0x1E7B], [0x1E7D, 0x1E7D], [0x1E7F, 0x1E7F], [0x1E81, 0x1E81], [0x1E83, 0x1E83], [0x1E85, 0x1E85], [0x1E87, 0x1E87], [0x1E89, 0x1E89], [0x1E8B, 0x1E8B], [0x1E8D, 0x1E8D], [0x1E8F, 0x1E8F], [0x1E91, 0x1E91], [0x1E93, 0x1E93], [0x1E95, 0x1E9B], [0x1EA1, 0x1EA1], [0x1EA3, 0x1EA3], [0x1EA5, 0x1EA5], [0x1EA7, 0x1EA7], [0x1EA9, 0x1EA9], [0x1EAB, 0x1EAB], [0x1EAD, 0x1EAD], [0x1EAF, 0x1EAF], [0x1EB1, 0x1EB1], [0x1EB3, 0x1EB3], [0x1EB5, 0x1EB5], [0x1EB7, 0x1EB7], [0x1EB9, 0x1EB9], [0x1EBB, 0x1EBB], [0x1EBD, 0x1EBD], [0x1EBF, 0x1EBF], [0x1EC1, 0x1EC1], [0x1EC3, 0x1EC3], [0x1EC5, 0x1EC5], [0x1EC7, 0x1EC7], [0x1EC9, 0x1EC9], [0x1ECB, 0x1ECB], [0x1ECD, 0x1ECD], [0x1ECF, 0x1ECF], [0x1ED1, 0x1ED1], [0x1ED3, 0x1ED3], [0x1ED5, 0x1ED5], [0x1ED7, 0x1ED7], [0x1ED9, 0x1ED9], [0x1EDB, 0x1EDB], [0x1EDD, 0x1EDD], [0x1EDF, 0x1EDF], [0x1EE1, 0x1EE1], [0x1EE3, 0x1EE3], [0x1EE5, 0x1EE5], [0x1EE7, 0x1EE7], [0x1EE9, 0x1EE9], [0x1EEB, 0x1EEB], [0x1EED, 0x1EED], [0x1EEF, 0x1EEF], [0x1EF1, 0x1EF1], [0x1EF3, 0x1EF3], [0x1EF5, 0x1EF5], [0x1EF7, 0x1EF7], [0x1EF9, 0x1EF9], [0x1F00, 0x1F07], [0x1F10, 0x1F15], [0x1F20, 0x1F27], [0x1F30, 0x1F37], [0x1F40, 0x1F45], [0x1F50, 0x1F57], [0x1F60, 0x1F67], [0x1F70, 0x1F7D], [0x1F80, 0x1F87], [0x1F90, 0x1F97], [0x1FA0, 0x1FA7], [0x1FB0, 0x1FB4], [0x1FB6, 0x1FB7], [0x1FBE, 0x1FBE], [0x1FC2, 0x1FC4], [0x1FC6, 0x1FC7], [0x1FD0, 0x1FD3], [0x1FD6, 0x1FD7], [0x1FE0, 0x1FE7], [0x1FF2, 0x1FF4], [0x1FF6, 0x1FF7], [0x2071, 0x2071], [0x207F, 0x207F], [0x210A, 0x210A], [0x210E, 0x210F], [0x2113, 0x2113], [0x212F, 0x212F], [0x2134, 0x2134], [0x2139, 0x2139], [0x213C, 0x213D], [0x2146, 0x2149], [0x214E, 0x214E], [0x2184, 0x2184], [0x2C30, 0x2C5E], [0x2C61, 0x2C61], [0x2C65, 0x2C66], [0x2C68, 0x2C68], [0x2C6A, 0x2C6A], [0x2C6C, 0x2C6C], [0x2C74, 0x2C74], [0x2C76, 0x2C77], [0x2C81, 0x2C81], [0x2C83, 0x2C83], [0x2C85, 0x2C85], [0x2C87, 0x2C87], [0x2C89, 0x2C89], [0x2C8B, 0x2C8B], [0x2C8D, 0x2C8D], [0x2C8F, 0x2C8F], [0x2C91, 0x2C91], [0x2C93, 0x2C93], [0x2C95, 0x2C95], [0x2C97, 0x2C97], [0x2C99, 0x2C99], [0x2C9B, 0x2C9B], [0x2C9D, 0x2C9D], [0x2C9F, 0x2C9F], [0x2CA1, 0x2CA1], [0x2CA3, 0x2CA3], [0x2CA5, 0x2CA5], [0x2CA7, 0x2CA7], [0x2CA9, 0x2CA9], [0x2CAB, 0x2CAB], [0x2CAD, 0x2CAD], [0x2CAF, 0x2CAF], [0x2CB1, 0x2CB1], [0x2CB3, 0x2CB3], [0x2CB5, 0x2CB5], [0x2CB7, 0x2CB7], [0x2CB9, 0x2CB9], [0x2CBB, 0x2CBB], [0x2CBD, 0x2CBD], [0x2CBF, 0x2CBF], [0x2CC1, 0x2CC1], [0x2CC3, 0x2CC3], [0x2CC5, 0x2CC5], [0x2CC7, 0x2CC7], [0x2CC9, 0x2CC9], [0x2CCB, 0x2CCB], [0x2CCD, 0x2CCD], [0x2CCF, 0x2CCF], [0x2CD1, 0x2CD1], [0x2CD3, 0x2CD3], [0x2CD5, 0x2CD5], [0x2CD7, 0x2CD7], [0x2CD9, 0x2CD9], [0x2CDB, 0x2CDB], [0x2CDD, 0x2CDD], [0x2CDF, 0x2CDF], [0x2CE1, 0x2CE1], [0x2CE3, 0x2CE4], [0x2D00, 0x2D25], [0xFB00, 0xFB06], [0xFB13, 0xFB17], [0xFF41, 0xFF5A]]; -Lt = [[0x01C5, 0x01C5], [0x01C8, 0x01C8], [0x01CB, 0x01CB], [0x01F2, 0x01F2], [0x1F88, 0x1F8F], [0x1F98, 0x1F9F], [0x1FA8, 0x1FAF], [0x1FBC, 0x1FBC], [0x1FCC, 0x1FCC], [0x1FFC, 0x1FFC]]; -Lm = [[0x02B0, 0x02C1], [0x02C6, 0x02D1], [0x02E0, 0x02E4], [0x02EE, 0x02EE], [0x037A, 0x037A], [0x0559, 0x0559], [0x0640, 0x0640], [0x06E5, 0x06E6], [0x07F4, 0x07F5], [0x07FA, 0x07FA], [0x0E46, 0x0E46], [0x0EC6, 0x0EC6], [0x10FC, 0x10FC], [0x17D7, 0x17D7], [0x1843, 0x1843], [0x1D2C, 0x1D61], [0x1D78, 0x1D78], [0x1D9B, 0x1DBF], [0x2090, 0x2094], [0x2D6F, 0x2D6F], [0x3005, 0x3005], [0x3031, 0x3035], [0x303B, 0x303B], [0x309D, 0x309E], [0x30FC, 0x30FE], [0xA015, 0xA015], [0xA717, 0xA71A], [0xFF70, 0xFF70], [0xFF9E, 0xFF9F]]; -Lo = [[0x01BB, 0x01BB], [0x01C0, 0x01C3], [0x0294, 0x0294], [0x05D0, 0x05EA], [0x05F0, 0x05F2], [0x0621, 0x063A], [0x0641, 0x064A], [0x066E, 0x066F], [0x0671, 0x06D3], [0x06D5, 0x06D5], [0x06EE, 0x06EF], [0x06FA, 0x06FC], [0x06FF, 0x06FF], [0x0710, 0x0710], [0x0712, 0x072F], [0x074D, 0x076D], [0x0780, 0x07A5], [0x07B1, 0x07B1], [0x07CA, 0x07EA], [0x0904, 0x0939], [0x093D, 0x093D], [0x0950, 0x0950], [0x0958, 0x0961], [0x097B, 0x097F], [0x0985, 0x098C], [0x098F, 0x0990], [0x0993, 0x09A8], [0x09AA, 0x09B0], [0x09B2, 0x09B2], [0x09B6, 0x09B9], [0x09BD, 0x09BD], [0x09CE, 0x09CE], [0x09DC, 0x09DD], [0x09DF, 0x09E1], [0x09F0, 0x09F1], [0x0A05, 0x0A0A], [0x0A0F, 0x0A10], [0x0A13, 0x0A28], [0x0A2A, 0x0A30], [0x0A32, 0x0A33], [0x0A35, 0x0A36], [0x0A38, 0x0A39], [0x0A59, 0x0A5C], [0x0A5E, 0x0A5E], [0x0A72, 0x0A74], [0x0A85, 0x0A8D], [0x0A8F, 0x0A91], [0x0A93, 0x0AA8], [0x0AAA, 0x0AB0], [0x0AB2, 0x0AB3], [0x0AB5, 0x0AB9], [0x0ABD, 0x0ABD], [0x0AD0, 0x0AD0], [0x0AE0, 0x0AE1], [0x0B05, 0x0B0C], [0x0B0F, 0x0B10], [0x0B13, 0x0B28], [0x0B2A, 0x0B30], [0x0B32, 0x0B33], [0x0B35, 0x0B39], [0x0B3D, 0x0B3D], [0x0B5C, 0x0B5D], [0x0B5F, 0x0B61], [0x0B71, 0x0B71], [0x0B83, 0x0B83], [0x0B85, 0x0B8A], [0x0B8E, 0x0B90], [0x0B92, 0x0B95], [0x0B99, 0x0B9A], [0x0B9C, 0x0B9C], [0x0B9E, 0x0B9F], [0x0BA3, 0x0BA4], [0x0BA8, 0x0BAA], [0x0BAE, 0x0BB9], [0x0C05, 0x0C0C], [0x0C0E, 0x0C10], [0x0C12, 0x0C28], [0x0C2A, 0x0C33], [0x0C35, 0x0C39], [0x0C60, 0x0C61], [0x0C85, 0x0C8C], [0x0C8E, 0x0C90], [0x0C92, 0x0CA8], [0x0CAA, 0x0CB3], [0x0CB5, 0x0CB9], [0x0CBD, 0x0CBD], [0x0CDE, 0x0CDE], [0x0CE0, 0x0CE1], [0x0D05, 0x0D0C], [0x0D0E, 0x0D10], [0x0D12, 0x0D28], [0x0D2A, 0x0D39], [0x0D60, 0x0D61], [0x0D85, 0x0D96], [0x0D9A, 0x0DB1], [0x0DB3, 0x0DBB], [0x0DBD, 0x0DBD], [0x0DC0, 0x0DC6], [0x0E01, 0x0E30], [0x0E32, 0x0E33], [0x0E40, 0x0E45], [0x0E81, 0x0E82], [0x0E84, 0x0E84], [0x0E87, 0x0E88], [0x0E8A, 0x0E8A], [0x0E8D, 0x0E8D], [0x0E94, 0x0E97], [0x0E99, 0x0E9F], [0x0EA1, 0x0EA3], [0x0EA5, 0x0EA5], [0x0EA7, 0x0EA7], [0x0EAA, 0x0EAB], [0x0EAD, 0x0EB0], [0x0EB2, 0x0EB3], [0x0EBD, 0x0EBD], [0x0EC0, 0x0EC4], [0x0EDC, 0x0EDD], [0x0F00, 0x0F00], [0x0F40, 0x0F47], [0x0F49, 0x0F6A], [0x0F88, 0x0F8B], [0x1000, 0x1021], [0x1023, 0x1027], [0x1029, 0x102A], [0x1050, 0x1055], [0x10D0, 0x10FA], [0x1100, 0x1159], [0x115F, 0x11A2], [0x11A8, 0x11F9], [0x1200, 0x1248], [0x124A, 0x124D], [0x1250, 0x1256], [0x1258, 0x1258], [0x125A, 0x125D], [0x1260, 0x1288], [0x128A, 0x128D], [0x1290, 0x12B0], [0x12B2, 0x12B5], [0x12B8, 0x12BE], [0x12C0, 0x12C0], [0x12C2, 0x12C5], [0x12C8, 0x12D6], [0x12D8, 0x1310], [0x1312, 0x1315], [0x1318, 0x135A], [0x1380, 0x138F], [0x13A0, 0x13F4], [0x1401, 0x166C], [0x166F, 0x1676], [0x1681, 0x169A], [0x16A0, 0x16EA], [0x1700, 0x170C], [0x170E, 0x1711], [0x1720, 0x1731], [0x1740, 0x1751], [0x1760, 0x176C], [0x176E, 0x1770], [0x1780, 0x17B3], [0x17DC, 0x17DC], [0x1820, 0x1842], [0x1844, 0x1877], [0x1880, 0x18A8], [0x1900, 0x191C], [0x1950, 0x196D], [0x1970, 0x1974], [0x1980, 0x19A9], [0x19C1, 0x19C7], [0x1A00, 0x1A16], [0x1B05, 0x1B33], [0x1B45, 0x1B4B], [0x2135, 0x2138], [0x2D30, 0x2D65], [0x2D80, 0x2D96], [0x2DA0, 0x2DA6], [0x2DA8, 0x2DAE], [0x2DB0, 0x2DB6], [0x2DB8, 0x2DBE], [0x2DC0, 0x2DC6], [0x2DC8, 0x2DCE], [0x2DD0, 0x2DD6], [0x2DD8, 0x2DDE], [0x3006, 0x3006], [0x303C, 0x303C], [0x3041, 0x3096], [0x309F, 0x309F], [0x30A1, 0x30FA], [0x30FF, 0x30FF], [0x3105, 0x312C], [0x3131, 0x318E], [0x31A0, 0x31B7], [0x31F0, 0x31FF], [0x3400, 0x4DB5], [0x4E00, 0x9FBB], [0xA000, 0xA014], [0xA016, 0xA48C], [0xA800, 0xA801], [0xA803, 0xA805], [0xA807, 0xA80A], [0xA80C, 0xA822], [0xA840, 0xA873], [0xAC00, 0xD7A3], [0xF900, 0xFA2D], [0xFA30, 0xFA6A], [0xFA70, 0xFAD9], [0xFB1D, 0xFB1D], [0xFB1F, 0xFB28], [0xFB2A, 0xFB36], [0xFB38, 0xFB3C], [0xFB3E, 0xFB3E], [0xFB40, 0xFB41], [0xFB43, 0xFB44], [0xFB46, 0xFBB1], [0xFBD3, 0xFD3D], [0xFD50, 0xFD8F], [0xFD92, 0xFDC7], [0xFDF0, 0xFDFB], [0xFE70, 0xFE74], [0xFE76, 0xFEFC], [0xFF66, 0xFF6F], [0xFF71, 0xFF9D], [0xFFA0, 0xFFBE], [0xFFC2, 0xFFC7], [0xFFCA, 0xFFCF], [0xFFD2, 0xFFD7], [0xFFDA, 0xFFDC]]; -Nl = [[0x16EE, 0x16F0], [0x2160, 0x2182], [0x3007, 0x3007], [0x3021, 0x3029], [0x3038, 0x303A]]; -Mn = [[0x0300, 0x036F], [0x0483, 0x0486], [0x0591, 0x05BD], [0x05BF, 0x05BF], [0x05C1, 0x05C2], [0x05C4, 0x05C5], [0x05C7, 0x05C7], [0x0610, 0x0615], [0x064B, 0x065E], [0x0670, 0x0670], [0x06D6, 0x06DC], [0x06DF, 0x06E4], [0x06E7, 0x06E8], [0x06EA, 0x06ED], [0x0711, 0x0711], [0x0730, 0x074A], [0x07A6, 0x07B0], [0x07EB, 0x07F3], [0x0901, 0x0902], [0x093C, 0x093C], [0x0941, 0x0948], [0x094D, 0x094D], [0x0951, 0x0954], [0x0962, 0x0963], [0x0981, 0x0981], [0x09BC, 0x09BC], [0x09C1, 0x09C4], [0x09CD, 0x09CD], [0x09E2, 0x09E3], [0x0A01, 0x0A02], [0x0A3C, 0x0A3C], [0x0A41, 0x0A42], [0x0A47, 0x0A48], [0x0A4B, 0x0A4D], [0x0A70, 0x0A71], [0x0A81, 0x0A82], [0x0ABC, 0x0ABC], [0x0AC1, 0x0AC5], [0x0AC7, 0x0AC8], [0x0ACD, 0x0ACD], [0x0AE2, 0x0AE3], [0x0B01, 0x0B01], [0x0B3C, 0x0B3C], [0x0B3F, 0x0B3F], [0x0B41, 0x0B43], [0x0B4D, 0x0B4D], [0x0B56, 0x0B56], [0x0B82, 0x0B82], [0x0BC0, 0x0BC0], [0x0BCD, 0x0BCD], [0x0C3E, 0x0C40], [0x0C46, 0x0C48], [0x0C4A, 0x0C4D], [0x0C55, 0x0C56], [0x0CBC, 0x0CBC], [0x0CBF, 0x0CBF], [0x0CC6, 0x0CC6], [0x0CCC, 0x0CCD], [0x0CE2, 0x0CE3], [0x0D41, 0x0D43], [0x0D4D, 0x0D4D], [0x0DCA, 0x0DCA], [0x0DD2, 0x0DD4], [0x0DD6, 0x0DD6], [0x0E31, 0x0E31], [0x0E34, 0x0E3A], [0x0E47, 0x0E4E], [0x0EB1, 0x0EB1], [0x0EB4, 0x0EB9], [0x0EBB, 0x0EBC], [0x0EC8, 0x0ECD], [0x0F18, 0x0F19], [0x0F35, 0x0F35], [0x0F37, 0x0F37], [0x0F39, 0x0F39], [0x0F71, 0x0F7E], [0x0F80, 0x0F84], [0x0F86, 0x0F87], [0x0F90, 0x0F97], [0x0F99, 0x0FBC], [0x0FC6, 0x0FC6], [0x102D, 0x1030], [0x1032, 0x1032], [0x1036, 0x1037], [0x1039, 0x1039], [0x1058, 0x1059], [0x135F, 0x135F], [0x1712, 0x1714], [0x1732, 0x1734], [0x1752, 0x1753], [0x1772, 0x1773], [0x17B7, 0x17BD], [0x17C6, 0x17C6], [0x17C9, 0x17D3], [0x17DD, 0x17DD], [0x180B, 0x180D], [0x18A9, 0x18A9], [0x1920, 0x1922], [0x1927, 0x1928], [0x1932, 0x1932], [0x1939, 0x193B], [0x1A17, 0x1A18], [0x1B00, 0x1B03], [0x1B34, 0x1B34], [0x1B36, 0x1B3A], [0x1B3C, 0x1B3C], [0x1B42, 0x1B42], [0x1B6B, 0x1B73], [0x1DC0, 0x1DCA], [0x1DFE, 0x1DFF], [0x20D0, 0x20DC], [0x20E1, 0x20E1], [0x20E5, 0x20EF], [0x302A, 0x302F], [0x3099, 0x309A], [0xA806, 0xA806], [0xA80B, 0xA80B], [0xA825, 0xA826], [0xFB1E, 0xFB1E], [0xFE00, 0xFE0F], [0xFE20, 0xFE23]]; -Mc = [[0x0903, 0x0903], [0x093E, 0x0940], [0x0949, 0x094C], [0x0982, 0x0983], [0x09BE, 0x09C0], [0x09C7, 0x09C8], [0x09CB, 0x09CC], [0x09D7, 0x09D7], [0x0A03, 0x0A03], [0x0A3E, 0x0A40], [0x0A83, 0x0A83], [0x0ABE, 0x0AC0], [0x0AC9, 0x0AC9], [0x0ACB, 0x0ACC], [0x0B02, 0x0B03], [0x0B3E, 0x0B3E], [0x0B40, 0x0B40], [0x0B47, 0x0B48], [0x0B4B, 0x0B4C], [0x0B57, 0x0B57], [0x0BBE, 0x0BBF], [0x0BC1, 0x0BC2], [0x0BC6, 0x0BC8], [0x0BCA, 0x0BCC], [0x0BD7, 0x0BD7], [0x0C01, 0x0C03], [0x0C41, 0x0C44], [0x0C82, 0x0C83], [0x0CBE, 0x0CBE], [0x0CC0, 0x0CC4], [0x0CC7, 0x0CC8], [0x0CCA, 0x0CCB], [0x0CD5, 0x0CD6], [0x0D02, 0x0D03], [0x0D3E, 0x0D40], [0x0D46, 0x0D48], [0x0D4A, 0x0D4C], [0x0D57, 0x0D57], [0x0D82, 0x0D83], [0x0DCF, 0x0DD1], [0x0DD8, 0x0DDF], [0x0DF2, 0x0DF3], [0x0F3E, 0x0F3F], [0x0F7F, 0x0F7F], [0x102C, 0x102C], [0x1031, 0x1031], [0x1038, 0x1038], [0x1056, 0x1057], [0x17B6, 0x17B6], [0x17BE, 0x17C5], [0x17C7, 0x17C8], [0x1923, 0x1926], [0x1929, 0x192B], [0x1930, 0x1931], [0x1933, 0x1938], [0x19B0, 0x19C0], [0x19C8, 0x19C9], [0x1A19, 0x1A1B], [0x1B04, 0x1B04], [0x1B35, 0x1B35], [0x1B3B, 0x1B3B], [0x1B3D, 0x1B41], [0x1B43, 0x1B44], [0xA802, 0xA802], [0xA823, 0xA824], [0xA827, 0xA827]]; -Nd = [[0x0030, 0x0039], [0x0660, 0x0669], [0x06F0, 0x06F9], [0x07C0, 0x07C9], [0x0966, 0x096F], [0x09E6, 0x09EF], [0x0A66, 0x0A6F], [0x0AE6, 0x0AEF], [0x0B66, 0x0B6F], [0x0BE6, 0x0BEF], [0x0C66, 0x0C6F], [0x0CE6, 0x0CEF], [0x0D66, 0x0D6F], [0x0E50, 0x0E59], [0x0ED0, 0x0ED9], [0x0F20, 0x0F29], [0x1040, 0x1049], [0x17E0, 0x17E9], [0x1810, 0x1819], [0x1946, 0x194F], [0x19D0, 0x19D9], [0x1B50, 0x1B59], [0xFF10, 0xFF19]]; -Pc = [[0x005F, 0x005F], [0x203F, 0x2040], [0x2054, 0x2054], [0xFE33, 0xFE34], [0xFE4D, 0xFE4F], [0xFF3F, 0xFF3F]]; - -UnicodeLetterLu = []; -UnicodeLetterLl = []; -UnicodeLetterLt = []; -UnicodeLetterLm = []; -UnicodeLetterLo = []; -UnicodeLetterNl = []; -UnicodeLetterMn = []; -UnicodeLetterMc = []; -UnicodeLetterNd = []; -UnicodeLetterPc = []; - -for (indexI = 0; indexI < Lu.length; indexI++) { - for (indexJ = Lu[indexI][0]; indexJ <= Lu[indexI][1]; indexJ++) { - UnicodeLetterLu[indexJ] = true; - } -} -for (indexI = 0; indexI < Ll.length; indexI++) { - for (indexJ = Ll[indexI][0]; indexJ <= Ll[indexI][1]; indexJ++) { - UnicodeLetterLl[indexJ] = true; - } -} -for (indexI = 0; indexI < Lt.length; indexI++) { - for (indexJ = Lt[indexI][0]; indexJ <= Lt[indexI][1]; indexJ++) { - UnicodeLetterLt[indexJ] = true; - } -} -for (indexI = 0; indexI < Lm.length; indexI++) { - for (indexJ = Lm[indexI][0]; indexJ <= Lm[indexI][1]; indexJ++) { - UnicodeLetterLm[indexJ] = true; - } -} -for (indexI = 0; indexI < Lo.length; indexI++) { - for (indexJ = Lo[indexI][0]; indexJ <= Lo[indexI][1]; indexJ++) { - UnicodeLetterLo[indexJ] = true; - } -} -for (indexI = 0; indexI < Nl.length; indexI++) { - for (indexJ = Nl[indexI][0]; indexJ <= Nl[indexI][1]; indexJ++) { - UnicodeLetterNl[indexJ] = true; - } -} -for (indexI = 0; indexI < Mn.length; indexI++) { - for (indexJ = Mn[indexI][0]; indexJ <= Mn[indexI][1]; indexJ++) { - UnicodeLetterMn[indexJ] = true; - } -} -for (indexI = 0; indexI < Mc.length; indexI++) { - for (indexJ = Mc[indexI][0]; indexJ <= Mc[indexI][1]; indexJ++) { - UnicodeLetterMc[indexJ] = true; - } -} -for (indexI = 0; indexI < Nd.length; indexI++) { - for (indexJ = Nd[indexI][0]; indexJ <= Nd[indexI][1]; indexJ++) { - UnicodeLetterNd[indexJ] = true; - } -} -for (indexI = 0; indexI < Pc.length; indexI++) { - for (indexJ = Pc[indexI][0]; indexJ <= Pc[indexI][1]; indexJ++) { - UnicodeLetterPc[indexJ] = true; - } -} - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; -for (index = 0; index <= 65535; index++) { - if ((UnicodeLetterLu[index] === undefined) && (UnicodeLetterLl[index] === undefined) && (UnicodeLetterLt[index] === undefined) && (UnicodeLetterLm[index] === undefined) && (UnicodeLetterLo[index] === undefined) && (UnicodeLetterNl[index] === undefined) && (UnicodeLetterMn[index] === undefined) && (UnicodeLetterMc[index] === undefined) && (UnicodeLetterNd[index] === undefined) && (UnicodeLetterPc[index] === undefined) && (index !== 0x0024) && (index !== 0x005F)) { - try { - var identifier = "$" + String.fromCharCode(index) + "1"; - eval("var " + identifier + "=1"); - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; - } catch (e) { - } - count++; - } -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_500/S7.6_A3.2.js b/tests/ES3/Unicode/Unicode_500/S7.6_A3.2.js deleted file mode 100644 index b0b623f0d..000000000 --- a/tests/ES3/Unicode/Unicode_500/S7.6_A3.2.js +++ /dev/null @@ -1,124 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A3.2; - * @section: 7.6; - * @assertion: IdentifierName must begin only IdentifierStart character; - * @description: Complex test with eval; -*/ - -//CHECK -Lu = [[0x0041, 0x005A], [0x00C0, 0x00D6], [0x00D8, 0x00DE], [0x0100, 0x0100], [0x0102, 0x0102], [0x0104, 0x0104], [0x0106, 0x0106], [0x0108, 0x0108], [0x010A, 0x010A], [0x010C, 0x010C], [0x010E, 0x010E], [0x0110, 0x0110], [0x0112, 0x0112], [0x0114, 0x0114], [0x0116, 0x0116], [0x0118, 0x0118], [0x011A, 0x011A], [0x011C, 0x011C], [0x011E, 0x011E], [0x0120, 0x0120], [0x0122, 0x0122], [0x0124, 0x0124], [0x0126, 0x0126], [0x0128, 0x0128], [0x012A, 0x012A], [0x012C, 0x012C], [0x012E, 0x012E], [0x0130, 0x0130], [0x0132, 0x0132], [0x0134, 0x0134], [0x0136, 0x0136], [0x0139, 0x0139], [0x013B, 0x013B], [0x013D, 0x013D], [0x013F, 0x013F], [0x0141, 0x0141], [0x0143, 0x0143], [0x0145, 0x0145], [0x0147, 0x0147], [0x014A, 0x014A], [0x014C, 0x014C], [0x014E, 0x014E], [0x0150, 0x0150], [0x0152, 0x0152], [0x0154, 0x0154], [0x0156, 0x0156], [0x0158, 0x0158], [0x015A, 0x015A], [0x015C, 0x015C], [0x015E, 0x015E], [0x0160, 0x0160], [0x0162, 0x0162], [0x0164, 0x0164], [0x0166, 0x0166], [0x0168, 0x0168], [0x016A, 0x016A], [0x016C, 0x016C], [0x016E, 0x016E], [0x0170, 0x0170], [0x0172, 0x0172], [0x0174, 0x0174], [0x0176, 0x0176], [0x0178, 0x0179], [0x017B, 0x017B], [0x017D, 0x017D], [0x0181, 0x0182], [0x0184, 0x0184], [0x0186, 0x0187], [0x0189, 0x018B], [0x018E, 0x0191], [0x0193, 0x0194], [0x0196, 0x0198], [0x019C, 0x019D], [0x019F, 0x01A0], [0x01A2, 0x01A2], [0x01A4, 0x01A4], [0x01A6, 0x01A7], [0x01A9, 0x01A9], [0x01AC, 0x01AC], [0x01AE, 0x01AF], [0x01B1, 0x01B3], [0x01B5, 0x01B5], [0x01B7, 0x01B8], [0x01BC, 0x01BC], [0x01C4, 0x01C4], [0x01C7, 0x01C7], [0x01CA, 0x01CA], [0x01CD, 0x01CD], [0x01CF, 0x01CF], [0x01D1, 0x01D1], [0x01D3, 0x01D3], [0x01D5, 0x01D5], [0x01D7, 0x01D7], [0x01D9, 0x01D9], [0x01DB, 0x01DB], [0x01DE, 0x01DE], [0x01E0, 0x01E0], [0x01E2, 0x01E2], [0x01E4, 0x01E4], [0x01E6, 0x01E6], [0x01E8, 0x01E8], [0x01EA, 0x01EA], [0x01EC, 0x01EC], [0x01EE, 0x01EE], [0x01F1, 0x01F1], [0x01F4, 0x01F4], [0x01F6, 0x01F8], [0x01FA, 0x01FA], [0x01FC, 0x01FC], [0x01FE, 0x01FE], [0x0200, 0x0200], [0x0202, 0x0202], [0x0204, 0x0204], [0x0206, 0x0206], [0x0208, 0x0208], [0x020A, 0x020A], [0x020C, 0x020C], [0x020E, 0x020E], [0x0210, 0x0210], [0x0212, 0x0212], [0x0214, 0x0214], [0x0216, 0x0216], [0x0218, 0x0218], [0x021A, 0x021A], [0x021C, 0x021C], [0x021E, 0x021E], [0x0220, 0x0220], [0x0222, 0x0222], [0x0224, 0x0224], [0x0226, 0x0226], [0x0228, 0x0228], [0x022A, 0x022A], [0x022C, 0x022C], [0x022E, 0x022E], [0x0230, 0x0230], [0x0232, 0x0232], [0x023A, 0x023B], [0x023D, 0x023E], [0x0241, 0x0241], [0x0243, 0x0246], [0x0248, 0x0248], [0x024A, 0x024A], [0x024C, 0x024C], [0x024E, 0x024E], [0x0386, 0x0386], [0x0388, 0x038A], [0x038C, 0x038C], [0x038E, 0x038F], [0x0391, 0x03A1], [0x03A3, 0x03AB], [0x03D2, 0x03D4], [0x03D8, 0x03D8], [0x03DA, 0x03DA], [0x03DC, 0x03DC], [0x03DE, 0x03DE], [0x03E0, 0x03E0], [0x03E2, 0x03E2], [0x03E4, 0x03E4], [0x03E6, 0x03E6], [0x03E8, 0x03E8], [0x03EA, 0x03EA], [0x03EC, 0x03EC], [0x03EE, 0x03EE], [0x03F4, 0x03F4], [0x03F7, 0x03F7], [0x03F9, 0x03FA], [0x03FD, 0x042F], [0x0460, 0x0460], [0x0462, 0x0462], [0x0464, 0x0464], [0x0466, 0x0466], [0x0468, 0x0468], [0x046A, 0x046A], [0x046C, 0x046C], [0x046E, 0x046E], [0x0470, 0x0470], [0x0472, 0x0472], [0x0474, 0x0474], [0x0476, 0x0476], [0x0478, 0x0478], [0x047A, 0x047A], [0x047C, 0x047C], [0x047E, 0x047E], [0x0480, 0x0480], [0x048A, 0x048A], [0x048C, 0x048C], [0x048E, 0x048E], [0x0490, 0x0490], [0x0492, 0x0492], [0x0494, 0x0494], [0x0496, 0x0496], [0x0498, 0x0498], [0x049A, 0x049A], [0x049C, 0x049C], [0x049E, 0x049E], [0x04A0, 0x04A0], [0x04A2, 0x04A2], [0x04A4, 0x04A4], [0x04A6, 0x04A6], [0x04A8, 0x04A8], [0x04AA, 0x04AA], [0x04AC, 0x04AC], [0x04AE, 0x04AE], [0x04B0, 0x04B0], [0x04B2, 0x04B2], [0x04B4, 0x04B4], [0x04B6, 0x04B6], [0x04B8, 0x04B8], [0x04BA, 0x04BA], [0x04BC, 0x04BC], [0x04BE, 0x04BE], [0x04C0, 0x04C1], [0x04C3, 0x04C3], [0x04C5, 0x04C5], [0x04C7, 0x04C7], [0x04C9, 0x04C9], [0x04CB, 0x04CB], [0x04CD, 0x04CD], [0x04D0, 0x04D0], [0x04D2, 0x04D2], [0x04D4, 0x04D4], [0x04D6, 0x04D6], [0x04D8, 0x04D8], [0x04DA, 0x04DA], [0x04DC, 0x04DC], [0x04DE, 0x04DE], [0x04E0, 0x04E0], [0x04E2, 0x04E2], [0x04E4, 0x04E4], [0x04E6, 0x04E6], [0x04E8, 0x04E8], [0x04EA, 0x04EA], [0x04EC, 0x04EC], [0x04EE, 0x04EE], [0x04F0, 0x04F0], [0x04F2, 0x04F2], [0x04F4, 0x04F4], [0x04F6, 0x04F6], [0x04F8, 0x04F8], [0x04FA, 0x04FA], [0x04FC, 0x04FC], [0x04FE, 0x04FE], [0x0500, 0x0500], [0x0502, 0x0502], [0x0504, 0x0504], [0x0506, 0x0506], [0x0508, 0x0508], [0x050A, 0x050A], [0x050C, 0x050C], [0x050E, 0x050E], [0x0510, 0x0510], [0x0512, 0x0512], [0x0531, 0x0556], [0x10A0, 0x10C5], [0x1E00, 0x1E00], [0x1E02, 0x1E02], [0x1E04, 0x1E04], [0x1E06, 0x1E06], [0x1E08, 0x1E08], [0x1E0A, 0x1E0A], [0x1E0C, 0x1E0C], [0x1E0E, 0x1E0E], [0x1E10, 0x1E10], [0x1E12, 0x1E12], [0x1E14, 0x1E14], [0x1E16, 0x1E16], [0x1E18, 0x1E18], [0x1E1A, 0x1E1A], [0x1E1C, 0x1E1C], [0x1E1E, 0x1E1E], [0x1E20, 0x1E20], [0x1E22, 0x1E22], [0x1E24, 0x1E24], [0x1E26, 0x1E26], [0x1E28, 0x1E28], [0x1E2A, 0x1E2A], [0x1E2C, 0x1E2C], [0x1E2E, 0x1E2E], [0x1E30, 0x1E30], [0x1E32, 0x1E32], [0x1E34, 0x1E34], [0x1E36, 0x1E36], [0x1E38, 0x1E38], [0x1E3A, 0x1E3A], [0x1E3C, 0x1E3C], [0x1E3E, 0x1E3E], [0x1E40, 0x1E40], [0x1E42, 0x1E42], [0x1E44, 0x1E44], [0x1E46, 0x1E46], [0x1E48, 0x1E48], [0x1E4A, 0x1E4A], [0x1E4C, 0x1E4C], [0x1E4E, 0x1E4E], [0x1E50, 0x1E50], [0x1E52, 0x1E52], [0x1E54, 0x1E54], [0x1E56, 0x1E56], [0x1E58, 0x1E58], [0x1E5A, 0x1E5A], [0x1E5C, 0x1E5C], [0x1E5E, 0x1E5E], [0x1E60, 0x1E60], [0x1E62, 0x1E62], [0x1E64, 0x1E64], [0x1E66, 0x1E66], [0x1E68, 0x1E68], [0x1E6A, 0x1E6A], [0x1E6C, 0x1E6C], [0x1E6E, 0x1E6E], [0x1E70, 0x1E70], [0x1E72, 0x1E72], [0x1E74, 0x1E74], [0x1E76, 0x1E76], [0x1E78, 0x1E78], [0x1E7A, 0x1E7A], [0x1E7C, 0x1E7C], [0x1E7E, 0x1E7E], [0x1E80, 0x1E80], [0x1E82, 0x1E82], [0x1E84, 0x1E84], [0x1E86, 0x1E86], [0x1E88, 0x1E88], [0x1E8A, 0x1E8A], [0x1E8C, 0x1E8C], [0x1E8E, 0x1E8E], [0x1E90, 0x1E90], [0x1E92, 0x1E92], [0x1E94, 0x1E94], [0x1EA0, 0x1EA0], [0x1EA2, 0x1EA2], [0x1EA4, 0x1EA4], [0x1EA6, 0x1EA6], [0x1EA8, 0x1EA8], [0x1EAA, 0x1EAA], [0x1EAC, 0x1EAC], [0x1EAE, 0x1EAE], [0x1EB0, 0x1EB0], [0x1EB2, 0x1EB2], [0x1EB4, 0x1EB4], [0x1EB6, 0x1EB6], [0x1EB8, 0x1EB8], [0x1EBA, 0x1EBA], [0x1EBC, 0x1EBC], [0x1EBE, 0x1EBE], [0x1EC0, 0x1EC0], [0x1EC2, 0x1EC2], [0x1EC4, 0x1EC4], [0x1EC6, 0x1EC6], [0x1EC8, 0x1EC8], [0x1ECA, 0x1ECA], [0x1ECC, 0x1ECC], [0x1ECE, 0x1ECE], [0x1ED0, 0x1ED0], [0x1ED2, 0x1ED2], [0x1ED4, 0x1ED4], [0x1ED6, 0x1ED6], [0x1ED8, 0x1ED8], [0x1EDA, 0x1EDA], [0x1EDC, 0x1EDC], [0x1EDE, 0x1EDE], [0x1EE0, 0x1EE0], [0x1EE2, 0x1EE2], [0x1EE4, 0x1EE4], [0x1EE6, 0x1EE6], [0x1EE8, 0x1EE8], [0x1EEA, 0x1EEA], [0x1EEC, 0x1EEC], [0x1EEE, 0x1EEE], [0x1EF0, 0x1EF0], [0x1EF2, 0x1EF2], [0x1EF4, 0x1EF4], [0x1EF6, 0x1EF6], [0x1EF8, 0x1EF8], [0x1F08, 0x1F0F], [0x1F18, 0x1F1D], [0x1F28, 0x1F2F], [0x1F38, 0x1F3F], [0x1F48, 0x1F4D], [0x1F59, 0x1F59], [0x1F5B, 0x1F5B], [0x1F5D, 0x1F5D], [0x1F5F, 0x1F5F], [0x1F68, 0x1F6F], [0x1FB8, 0x1FBB], [0x1FC8, 0x1FCB], [0x1FD8, 0x1FDB], [0x1FE8, 0x1FEC], [0x1FF8, 0x1FFB], [0x2102, 0x2102], [0x2107, 0x2107], [0x210B, 0x210D], [0x2110, 0x2112], [0x2115, 0x2115], [0x2119, 0x211D], [0x2124, 0x2124], [0x2126, 0x2126], [0x2128, 0x2128], [0x212A, 0x212D], [0x2130, 0x2133], [0x213E, 0x213F], [0x2145, 0x2145], [0x2183, 0x2183], [0x2C00, 0x2C2E], [0x2C60, 0x2C60], [0x2C62, 0x2C64], [0x2C67, 0x2C67], [0x2C69, 0x2C69], [0x2C6B, 0x2C6B], [0x2C75, 0x2C75], [0x2C80, 0x2C80], [0x2C82, 0x2C82], [0x2C84, 0x2C84], [0x2C86, 0x2C86], [0x2C88, 0x2C88], [0x2C8A, 0x2C8A], [0x2C8C, 0x2C8C], [0x2C8E, 0x2C8E], [0x2C90, 0x2C90], [0x2C92, 0x2C92], [0x2C94, 0x2C94], [0x2C96, 0x2C96], [0x2C98, 0x2C98], [0x2C9A, 0x2C9A], [0x2C9C, 0x2C9C], [0x2C9E, 0x2C9E], [0x2CA0, 0x2CA0], [0x2CA2, 0x2CA2], [0x2CA4, 0x2CA4], [0x2CA6, 0x2CA6], [0x2CA8, 0x2CA8], [0x2CAA, 0x2CAA], [0x2CAC, 0x2CAC], [0x2CAE, 0x2CAE], [0x2CB0, 0x2CB0], [0x2CB2, 0x2CB2], [0x2CB4, 0x2CB4], [0x2CB6, 0x2CB6], [0x2CB8, 0x2CB8], [0x2CBA, 0x2CBA], [0x2CBC, 0x2CBC], [0x2CBE, 0x2CBE], [0x2CC0, 0x2CC0], [0x2CC2, 0x2CC2], [0x2CC4, 0x2CC4], [0x2CC6, 0x2CC6], [0x2CC8, 0x2CC8], [0x2CCA, 0x2CCA], [0x2CCC, 0x2CCC], [0x2CCE, 0x2CCE], [0x2CD0, 0x2CD0], [0x2CD2, 0x2CD2], [0x2CD4, 0x2CD4], [0x2CD6, 0x2CD6], [0x2CD8, 0x2CD8], [0x2CDA, 0x2CDA], [0x2CDC, 0x2CDC], [0x2CDE, 0x2CDE], [0x2CE0, 0x2CE0], [0x2CE2, 0x2CE2], [0xFF21, 0xFF3A]]; -Ll = [[0x0061, 0x007A], [0x00AA, 0x00AA], [0x00B5, 0x00B5], [0x00BA, 0x00BA], [0x00DF, 0x00F6], [0x00F8, 0x00FF], [0x0101, 0x0101], [0x0103, 0x0103], [0x0105, 0x0105], [0x0107, 0x0107], [0x0109, 0x0109], [0x010B, 0x010B], [0x010D, 0x010D], [0x010F, 0x010F], [0x0111, 0x0111], [0x0113, 0x0113], [0x0115, 0x0115], [0x0117, 0x0117], [0x0119, 0x0119], [0x011B, 0x011B], [0x011D, 0x011D], [0x011F, 0x011F], [0x0121, 0x0121], [0x0123, 0x0123], [0x0125, 0x0125], [0x0127, 0x0127], [0x0129, 0x0129], [0x012B, 0x012B], [0x012D, 0x012D], [0x012F, 0x012F], [0x0131, 0x0131], [0x0133, 0x0133], [0x0135, 0x0135], [0x0137, 0x0138], [0x013A, 0x013A], [0x013C, 0x013C], [0x013E, 0x013E], [0x0140, 0x0140], [0x0142, 0x0142], [0x0144, 0x0144], [0x0146, 0x0146], [0x0148, 0x0149], [0x014B, 0x014B], [0x014D, 0x014D], [0x014F, 0x014F], [0x0151, 0x0151], [0x0153, 0x0153], [0x0155, 0x0155], [0x0157, 0x0157], [0x0159, 0x0159], [0x015B, 0x015B], [0x015D, 0x015D], [0x015F, 0x015F], [0x0161, 0x0161], [0x0163, 0x0163], [0x0165, 0x0165], [0x0167, 0x0167], [0x0169, 0x0169], [0x016B, 0x016B], [0x016D, 0x016D], [0x016F, 0x016F], [0x0171, 0x0171], [0x0173, 0x0173], [0x0175, 0x0175], [0x0177, 0x0177], [0x017A, 0x017A], [0x017C, 0x017C], [0x017E, 0x0180], [0x0183, 0x0183], [0x0185, 0x0185], [0x0188, 0x0188], [0x018C, 0x018D], [0x0192, 0x0192], [0x0195, 0x0195], [0x0199, 0x019B], [0x019E, 0x019E], [0x01A1, 0x01A1], [0x01A3, 0x01A3], [0x01A5, 0x01A5], [0x01A8, 0x01A8], [0x01AA, 0x01AB], [0x01AD, 0x01AD], [0x01B0, 0x01B0], [0x01B4, 0x01B4], [0x01B6, 0x01B6], [0x01B9, 0x01BA], [0x01BD, 0x01BF], [0x01C6, 0x01C6], [0x01C9, 0x01C9], [0x01CC, 0x01CC], [0x01CE, 0x01CE], [0x01D0, 0x01D0], [0x01D2, 0x01D2], [0x01D4, 0x01D4], [0x01D6, 0x01D6], [0x01D8, 0x01D8], [0x01DA, 0x01DA], [0x01DC, 0x01DD], [0x01DF, 0x01DF], [0x01E1, 0x01E1], [0x01E3, 0x01E3], [0x01E5, 0x01E5], [0x01E7, 0x01E7], [0x01E9, 0x01E9], [0x01EB, 0x01EB], [0x01ED, 0x01ED], [0x01EF, 0x01F0], [0x01F3, 0x01F3], [0x01F5, 0x01F5], [0x01F9, 0x01F9], [0x01FB, 0x01FB], [0x01FD, 0x01FD], [0x01FF, 0x01FF], [0x0201, 0x0201], [0x0203, 0x0203], [0x0205, 0x0205], [0x0207, 0x0207], [0x0209, 0x0209], [0x020B, 0x020B], [0x020D, 0x020D], [0x020F, 0x020F], [0x0211, 0x0211], [0x0213, 0x0213], [0x0215, 0x0215], [0x0217, 0x0217], [0x0219, 0x0219], [0x021B, 0x021B], [0x021D, 0x021D], [0x021F, 0x021F], [0x0221, 0x0221], [0x0223, 0x0223], [0x0225, 0x0225], [0x0227, 0x0227], [0x0229, 0x0229], [0x022B, 0x022B], [0x022D, 0x022D], [0x022F, 0x022F], [0x0231, 0x0231], [0x0233, 0x0239], [0x023C, 0x023C], [0x023F, 0x0240], [0x0242, 0x0242], [0x0247, 0x0247], [0x0249, 0x0249], [0x024B, 0x024B], [0x024D, 0x024D], [0x024F, 0x0293], [0x0295, 0x02AF], [0x037B, 0x037D], [0x0390, 0x0390], [0x03AC, 0x03CE], [0x03D0, 0x03D1], [0x03D5, 0x03D7], [0x03D9, 0x03D9], [0x03DB, 0x03DB], [0x03DD, 0x03DD], [0x03DF, 0x03DF], [0x03E1, 0x03E1], [0x03E3, 0x03E3], [0x03E5, 0x03E5], [0x03E7, 0x03E7], [0x03E9, 0x03E9], [0x03EB, 0x03EB], [0x03ED, 0x03ED], [0x03EF, 0x03F3], [0x03F5, 0x03F5], [0x03F8, 0x03F8], [0x03FB, 0x03FC], [0x0430, 0x045F], [0x0461, 0x0461], [0x0463, 0x0463], [0x0465, 0x0465], [0x0467, 0x0467], [0x0469, 0x0469], [0x046B, 0x046B], [0x046D, 0x046D], [0x046F, 0x046F], [0x0471, 0x0471], [0x0473, 0x0473], [0x0475, 0x0475], [0x0477, 0x0477], [0x0479, 0x0479], [0x047B, 0x047B], [0x047D, 0x047D], [0x047F, 0x047F], [0x0481, 0x0481], [0x048B, 0x048B], [0x048D, 0x048D], [0x048F, 0x048F], [0x0491, 0x0491], [0x0493, 0x0493], [0x0495, 0x0495], [0x0497, 0x0497], [0x0499, 0x0499], [0x049B, 0x049B], [0x049D, 0x049D], [0x049F, 0x049F], [0x04A1, 0x04A1], [0x04A3, 0x04A3], [0x04A5, 0x04A5], [0x04A7, 0x04A7], [0x04A9, 0x04A9], [0x04AB, 0x04AB], [0x04AD, 0x04AD], [0x04AF, 0x04AF], [0x04B1, 0x04B1], [0x04B3, 0x04B3], [0x04B5, 0x04B5], [0x04B7, 0x04B7], [0x04B9, 0x04B9], [0x04BB, 0x04BB], [0x04BD, 0x04BD], [0x04BF, 0x04BF], [0x04C2, 0x04C2], [0x04C4, 0x04C4], [0x04C6, 0x04C6], [0x04C8, 0x04C8], [0x04CA, 0x04CA], [0x04CC, 0x04CC], [0x04CE, 0x04CF], [0x04D1, 0x04D1], [0x04D3, 0x04D3], [0x04D5, 0x04D5], [0x04D7, 0x04D7], [0x04D9, 0x04D9], [0x04DB, 0x04DB], [0x04DD, 0x04DD], [0x04DF, 0x04DF], [0x04E1, 0x04E1], [0x04E3, 0x04E3], [0x04E5, 0x04E5], [0x04E7, 0x04E7], [0x04E9, 0x04E9], [0x04EB, 0x04EB], [0x04ED, 0x04ED], [0x04EF, 0x04EF], [0x04F1, 0x04F1], [0x04F3, 0x04F3], [0x04F5, 0x04F5], [0x04F7, 0x04F7], [0x04F9, 0x04F9], [0x04FB, 0x04FB], [0x04FD, 0x04FD], [0x04FF, 0x04FF], [0x0501, 0x0501], [0x0503, 0x0503], [0x0505, 0x0505], [0x0507, 0x0507], [0x0509, 0x0509], [0x050B, 0x050B], [0x050D, 0x050D], [0x050F, 0x050F], [0x0511, 0x0511], [0x0513, 0x0513], [0x0561, 0x0587], [0x1D00, 0x1D2B], [0x1D62, 0x1D77], [0x1D79, 0x1D9A], [0x1E01, 0x1E01], [0x1E03, 0x1E03], [0x1E05, 0x1E05], [0x1E07, 0x1E07], [0x1E09, 0x1E09], [0x1E0B, 0x1E0B], [0x1E0D, 0x1E0D], [0x1E0F, 0x1E0F], [0x1E11, 0x1E11], [0x1E13, 0x1E13], [0x1E15, 0x1E15], [0x1E17, 0x1E17], [0x1E19, 0x1E19], [0x1E1B, 0x1E1B], [0x1E1D, 0x1E1D], [0x1E1F, 0x1E1F], [0x1E21, 0x1E21], [0x1E23, 0x1E23], [0x1E25, 0x1E25], [0x1E27, 0x1E27], [0x1E29, 0x1E29], [0x1E2B, 0x1E2B], [0x1E2D, 0x1E2D], [0x1E2F, 0x1E2F], [0x1E31, 0x1E31], [0x1E33, 0x1E33], [0x1E35, 0x1E35], [0x1E37, 0x1E37], [0x1E39, 0x1E39], [0x1E3B, 0x1E3B], [0x1E3D, 0x1E3D], [0x1E3F, 0x1E3F], [0x1E41, 0x1E41], [0x1E43, 0x1E43], [0x1E45, 0x1E45], [0x1E47, 0x1E47], [0x1E49, 0x1E49], [0x1E4B, 0x1E4B], [0x1E4D, 0x1E4D], [0x1E4F, 0x1E4F], [0x1E51, 0x1E51], [0x1E53, 0x1E53], [0x1E55, 0x1E55], [0x1E57, 0x1E57], [0x1E59, 0x1E59], [0x1E5B, 0x1E5B], [0x1E5D, 0x1E5D], [0x1E5F, 0x1E5F], [0x1E61, 0x1E61], [0x1E63, 0x1E63], [0x1E65, 0x1E65], [0x1E67, 0x1E67], [0x1E69, 0x1E69], [0x1E6B, 0x1E6B], [0x1E6D, 0x1E6D], [0x1E6F, 0x1E6F], [0x1E71, 0x1E71], [0x1E73, 0x1E73], [0x1E75, 0x1E75], [0x1E77, 0x1E77], [0x1E79, 0x1E79], [0x1E7B, 0x1E7B], [0x1E7D, 0x1E7D], [0x1E7F, 0x1E7F], [0x1E81, 0x1E81], [0x1E83, 0x1E83], [0x1E85, 0x1E85], [0x1E87, 0x1E87], [0x1E89, 0x1E89], [0x1E8B, 0x1E8B], [0x1E8D, 0x1E8D], [0x1E8F, 0x1E8F], [0x1E91, 0x1E91], [0x1E93, 0x1E93], [0x1E95, 0x1E9B], [0x1EA1, 0x1EA1], [0x1EA3, 0x1EA3], [0x1EA5, 0x1EA5], [0x1EA7, 0x1EA7], [0x1EA9, 0x1EA9], [0x1EAB, 0x1EAB], [0x1EAD, 0x1EAD], [0x1EAF, 0x1EAF], [0x1EB1, 0x1EB1], [0x1EB3, 0x1EB3], [0x1EB5, 0x1EB5], [0x1EB7, 0x1EB7], [0x1EB9, 0x1EB9], [0x1EBB, 0x1EBB], [0x1EBD, 0x1EBD], [0x1EBF, 0x1EBF], [0x1EC1, 0x1EC1], [0x1EC3, 0x1EC3], [0x1EC5, 0x1EC5], [0x1EC7, 0x1EC7], [0x1EC9, 0x1EC9], [0x1ECB, 0x1ECB], [0x1ECD, 0x1ECD], [0x1ECF, 0x1ECF], [0x1ED1, 0x1ED1], [0x1ED3, 0x1ED3], [0x1ED5, 0x1ED5], [0x1ED7, 0x1ED7], [0x1ED9, 0x1ED9], [0x1EDB, 0x1EDB], [0x1EDD, 0x1EDD], [0x1EDF, 0x1EDF], [0x1EE1, 0x1EE1], [0x1EE3, 0x1EE3], [0x1EE5, 0x1EE5], [0x1EE7, 0x1EE7], [0x1EE9, 0x1EE9], [0x1EEB, 0x1EEB], [0x1EED, 0x1EED], [0x1EEF, 0x1EEF], [0x1EF1, 0x1EF1], [0x1EF3, 0x1EF3], [0x1EF5, 0x1EF5], [0x1EF7, 0x1EF7], [0x1EF9, 0x1EF9], [0x1F00, 0x1F07], [0x1F10, 0x1F15], [0x1F20, 0x1F27], [0x1F30, 0x1F37], [0x1F40, 0x1F45], [0x1F50, 0x1F57], [0x1F60, 0x1F67], [0x1F70, 0x1F7D], [0x1F80, 0x1F87], [0x1F90, 0x1F97], [0x1FA0, 0x1FA7], [0x1FB0, 0x1FB4], [0x1FB6, 0x1FB7], [0x1FBE, 0x1FBE], [0x1FC2, 0x1FC4], [0x1FC6, 0x1FC7], [0x1FD0, 0x1FD3], [0x1FD6, 0x1FD7], [0x1FE0, 0x1FE7], [0x1FF2, 0x1FF4], [0x1FF6, 0x1FF7], [0x2071, 0x2071], [0x207F, 0x207F], [0x210A, 0x210A], [0x210E, 0x210F], [0x2113, 0x2113], [0x212F, 0x212F], [0x2134, 0x2134], [0x2139, 0x2139], [0x213C, 0x213D], [0x2146, 0x2149], [0x214E, 0x214E], [0x2184, 0x2184], [0x2C30, 0x2C5E], [0x2C61, 0x2C61], [0x2C65, 0x2C66], [0x2C68, 0x2C68], [0x2C6A, 0x2C6A], [0x2C6C, 0x2C6C], [0x2C74, 0x2C74], [0x2C76, 0x2C77], [0x2C81, 0x2C81], [0x2C83, 0x2C83], [0x2C85, 0x2C85], [0x2C87, 0x2C87], [0x2C89, 0x2C89], [0x2C8B, 0x2C8B], [0x2C8D, 0x2C8D], [0x2C8F, 0x2C8F], [0x2C91, 0x2C91], [0x2C93, 0x2C93], [0x2C95, 0x2C95], [0x2C97, 0x2C97], [0x2C99, 0x2C99], [0x2C9B, 0x2C9B], [0x2C9D, 0x2C9D], [0x2C9F, 0x2C9F], [0x2CA1, 0x2CA1], [0x2CA3, 0x2CA3], [0x2CA5, 0x2CA5], [0x2CA7, 0x2CA7], [0x2CA9, 0x2CA9], [0x2CAB, 0x2CAB], [0x2CAD, 0x2CAD], [0x2CAF, 0x2CAF], [0x2CB1, 0x2CB1], [0x2CB3, 0x2CB3], [0x2CB5, 0x2CB5], [0x2CB7, 0x2CB7], [0x2CB9, 0x2CB9], [0x2CBB, 0x2CBB], [0x2CBD, 0x2CBD], [0x2CBF, 0x2CBF], [0x2CC1, 0x2CC1], [0x2CC3, 0x2CC3], [0x2CC5, 0x2CC5], [0x2CC7, 0x2CC7], [0x2CC9, 0x2CC9], [0x2CCB, 0x2CCB], [0x2CCD, 0x2CCD], [0x2CCF, 0x2CCF], [0x2CD1, 0x2CD1], [0x2CD3, 0x2CD3], [0x2CD5, 0x2CD5], [0x2CD7, 0x2CD7], [0x2CD9, 0x2CD9], [0x2CDB, 0x2CDB], [0x2CDD, 0x2CDD], [0x2CDF, 0x2CDF], [0x2CE1, 0x2CE1], [0x2CE3, 0x2CE4], [0x2D00, 0x2D25], [0xFB00, 0xFB06], [0xFB13, 0xFB17], [0xFF41, 0xFF5A]]; -Lt = [[0x01C5, 0x01C5], [0x01C8, 0x01C8], [0x01CB, 0x01CB], [0x01F2, 0x01F2], [0x1F88, 0x1F8F], [0x1F98, 0x1F9F], [0x1FA8, 0x1FAF], [0x1FBC, 0x1FBC], [0x1FCC, 0x1FCC], [0x1FFC, 0x1FFC]]; -Lm = [[0x02B0, 0x02C1], [0x02C6, 0x02D1], [0x02E0, 0x02E4], [0x02EE, 0x02EE], [0x037A, 0x037A], [0x0559, 0x0559], [0x0640, 0x0640], [0x06E5, 0x06E6], [0x07F4, 0x07F5], [0x07FA, 0x07FA], [0x0E46, 0x0E46], [0x0EC6, 0x0EC6], [0x10FC, 0x10FC], [0x17D7, 0x17D7], [0x1843, 0x1843], [0x1D2C, 0x1D61], [0x1D78, 0x1D78], [0x1D9B, 0x1DBF], [0x2090, 0x2094], [0x2D6F, 0x2D6F], [0x3005, 0x3005], [0x3031, 0x3035], [0x303B, 0x303B], [0x309D, 0x309E], [0x30FC, 0x30FE], [0xA015, 0xA015], [0xA717, 0xA71A], [0xFF70, 0xFF70], [0xFF9E, 0xFF9F]]; -Lo = [[0x01BB, 0x01BB], [0x01C0, 0x01C3], [0x0294, 0x0294], [0x05D0, 0x05EA], [0x05F0, 0x05F2], [0x0621, 0x063A], [0x0641, 0x064A], [0x066E, 0x066F], [0x0671, 0x06D3], [0x06D5, 0x06D5], [0x06EE, 0x06EF], [0x06FA, 0x06FC], [0x06FF, 0x06FF], [0x0710, 0x0710], [0x0712, 0x072F], [0x074D, 0x076D], [0x0780, 0x07A5], [0x07B1, 0x07B1], [0x07CA, 0x07EA], [0x0904, 0x0939], [0x093D, 0x093D], [0x0950, 0x0950], [0x0958, 0x0961], [0x097B, 0x097F], [0x0985, 0x098C], [0x098F, 0x0990], [0x0993, 0x09A8], [0x09AA, 0x09B0], [0x09B2, 0x09B2], [0x09B6, 0x09B9], [0x09BD, 0x09BD], [0x09CE, 0x09CE], [0x09DC, 0x09DD], [0x09DF, 0x09E1], [0x09F0, 0x09F1], [0x0A05, 0x0A0A], [0x0A0F, 0x0A10], [0x0A13, 0x0A28], [0x0A2A, 0x0A30], [0x0A32, 0x0A33], [0x0A35, 0x0A36], [0x0A38, 0x0A39], [0x0A59, 0x0A5C], [0x0A5E, 0x0A5E], [0x0A72, 0x0A74], [0x0A85, 0x0A8D], [0x0A8F, 0x0A91], [0x0A93, 0x0AA8], [0x0AAA, 0x0AB0], [0x0AB2, 0x0AB3], [0x0AB5, 0x0AB9], [0x0ABD, 0x0ABD], [0x0AD0, 0x0AD0], [0x0AE0, 0x0AE1], [0x0B05, 0x0B0C], [0x0B0F, 0x0B10], [0x0B13, 0x0B28], [0x0B2A, 0x0B30], [0x0B32, 0x0B33], [0x0B35, 0x0B39], [0x0B3D, 0x0B3D], [0x0B5C, 0x0B5D], [0x0B5F, 0x0B61], [0x0B71, 0x0B71], [0x0B83, 0x0B83], [0x0B85, 0x0B8A], [0x0B8E, 0x0B90], [0x0B92, 0x0B95], [0x0B99, 0x0B9A], [0x0B9C, 0x0B9C], [0x0B9E, 0x0B9F], [0x0BA3, 0x0BA4], [0x0BA8, 0x0BAA], [0x0BAE, 0x0BB9], [0x0C05, 0x0C0C], [0x0C0E, 0x0C10], [0x0C12, 0x0C28], [0x0C2A, 0x0C33], [0x0C35, 0x0C39], [0x0C60, 0x0C61], [0x0C85, 0x0C8C], [0x0C8E, 0x0C90], [0x0C92, 0x0CA8], [0x0CAA, 0x0CB3], [0x0CB5, 0x0CB9], [0x0CBD, 0x0CBD], [0x0CDE, 0x0CDE], [0x0CE0, 0x0CE1], [0x0D05, 0x0D0C], [0x0D0E, 0x0D10], [0x0D12, 0x0D28], [0x0D2A, 0x0D39], [0x0D60, 0x0D61], [0x0D85, 0x0D96], [0x0D9A, 0x0DB1], [0x0DB3, 0x0DBB], [0x0DBD, 0x0DBD], [0x0DC0, 0x0DC6], [0x0E01, 0x0E30], [0x0E32, 0x0E33], [0x0E40, 0x0E45], [0x0E81, 0x0E82], [0x0E84, 0x0E84], [0x0E87, 0x0E88], [0x0E8A, 0x0E8A], [0x0E8D, 0x0E8D], [0x0E94, 0x0E97], [0x0E99, 0x0E9F], [0x0EA1, 0x0EA3], [0x0EA5, 0x0EA5], [0x0EA7, 0x0EA7], [0x0EAA, 0x0EAB], [0x0EAD, 0x0EB0], [0x0EB2, 0x0EB3], [0x0EBD, 0x0EBD], [0x0EC0, 0x0EC4], [0x0EDC, 0x0EDD], [0x0F00, 0x0F00], [0x0F40, 0x0F47], [0x0F49, 0x0F6A], [0x0F88, 0x0F8B], [0x1000, 0x1021], [0x1023, 0x1027], [0x1029, 0x102A], [0x1050, 0x1055], [0x10D0, 0x10FA], [0x1100, 0x1159], [0x115F, 0x11A2], [0x11A8, 0x11F9], [0x1200, 0x1248], [0x124A, 0x124D], [0x1250, 0x1256], [0x1258, 0x1258], [0x125A, 0x125D], [0x1260, 0x1288], [0x128A, 0x128D], [0x1290, 0x12B0], [0x12B2, 0x12B5], [0x12B8, 0x12BE], [0x12C0, 0x12C0], [0x12C2, 0x12C5], [0x12C8, 0x12D6], [0x12D8, 0x1310], [0x1312, 0x1315], [0x1318, 0x135A], [0x1380, 0x138F], [0x13A0, 0x13F4], [0x1401, 0x166C], [0x166F, 0x1676], [0x1681, 0x169A], [0x16A0, 0x16EA], [0x1700, 0x170C], [0x170E, 0x1711], [0x1720, 0x1731], [0x1740, 0x1751], [0x1760, 0x176C], [0x176E, 0x1770], [0x1780, 0x17B3], [0x17DC, 0x17DC], [0x1820, 0x1842], [0x1844, 0x1877], [0x1880, 0x18A8], [0x1900, 0x191C], [0x1950, 0x196D], [0x1970, 0x1974], [0x1980, 0x19A9], [0x19C1, 0x19C7], [0x1A00, 0x1A16], [0x1B05, 0x1B33], [0x1B45, 0x1B4B], [0x2135, 0x2138], [0x2D30, 0x2D65], [0x2D80, 0x2D96], [0x2DA0, 0x2DA6], [0x2DA8, 0x2DAE], [0x2DB0, 0x2DB6], [0x2DB8, 0x2DBE], [0x2DC0, 0x2DC6], [0x2DC8, 0x2DCE], [0x2DD0, 0x2DD6], [0x2DD8, 0x2DDE], [0x3006, 0x3006], [0x303C, 0x303C], [0x3041, 0x3096], [0x309F, 0x309F], [0x30A1, 0x30FA], [0x30FF, 0x30FF], [0x3105, 0x312C], [0x3131, 0x318E], [0x31A0, 0x31B7], [0x31F0, 0x31FF], [0x3400, 0x4DB5], [0x4E00, 0x9FBB], [0xA000, 0xA014], [0xA016, 0xA48C], [0xA800, 0xA801], [0xA803, 0xA805], [0xA807, 0xA80A], [0xA80C, 0xA822], [0xA840, 0xA873], [0xAC00, 0xD7A3], [0xF900, 0xFA2D], [0xFA30, 0xFA6A], [0xFA70, 0xFAD9], [0xFB1D, 0xFB1D], [0xFB1F, 0xFB28], [0xFB2A, 0xFB36], [0xFB38, 0xFB3C], [0xFB3E, 0xFB3E], [0xFB40, 0xFB41], [0xFB43, 0xFB44], [0xFB46, 0xFBB1], [0xFBD3, 0xFD3D], [0xFD50, 0xFD8F], [0xFD92, 0xFDC7], [0xFDF0, 0xFDFB], [0xFE70, 0xFE74], [0xFE76, 0xFEFC], [0xFF66, 0xFF6F], [0xFF71, 0xFF9D], [0xFFA0, 0xFFBE], [0xFFC2, 0xFFC7], [0xFFCA, 0xFFCF], [0xFFD2, 0xFFD7], [0xFFDA, 0xFFDC]]; -Nl = [[0x16EE, 0x16F0], [0x2160, 0x2182], [0x3007, 0x3007], [0x3021, 0x3029], [0x3038, 0x303A]]; - -UnicodeLetterLu = []; -UnicodeLetterLl = []; -UnicodeLetterLt = []; -UnicodeLetterLm = []; -UnicodeLetterLo = []; -UnicodeLetterNl = []; - -for (indexI = 0; indexI < Lu.length; indexI++) { - for (indexJ = Lu[indexI][0]; indexJ <= Lu[indexI][1]; indexJ++) { - UnicodeLetterLu[indexJ] = true; - } -} -for (indexI = 0; indexI < Ll.length; indexI++) { - for (indexJ = Ll[indexI][0]; indexJ <= Ll[indexI][1]; indexJ++) { - UnicodeLetterLl[indexJ] = true; - } -} -for (indexI = 0; indexI < Lt.length; indexI++) { - for (indexJ = Lt[indexI][0]; indexJ <= Lt[indexI][1]; indexJ++) { - UnicodeLetterLt[indexJ] = true; - } -} -for (indexI = 0; indexI < Lm.length; indexI++) { - for (indexJ = Lm[indexI][0]; indexJ <= Lm[indexI][1]; indexJ++) { - UnicodeLetterLm[indexJ] = true; - } -} -for (indexI = 0; indexI < Lo.length; indexI++) { - for (indexJ = Lo[indexI][0]; indexJ <= Lo[indexI][1]; indexJ++) { - UnicodeLetterLo[indexJ] = true; - } -} -for (indexI = 0; indexI < Nl.length; indexI++) { - for (indexJ = Nl[indexI][0]; indexJ <= Nl[indexI][1]; indexJ++) { - UnicodeLetterNl[indexJ] = true; - } -} - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; -for (index = 0; index <= 65535; index++) { - if ((UnicodeLetterLu[index] === undefined) && (UnicodeLetterLl[index] === undefined) && (UnicodeLetterLt[index] === undefined) && (UnicodeLetterLm[index] === undefined) && (UnicodeLetterLo[index] === undefined) && (UnicodeLetterNl[index] === undefined) && (index !== 0x0024) && (index !== 0x005F)) { - try { - var identifier = String.fromCharCode(index); - eval("var " + identifier + "=1"); - if (errorCount === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; - } catch (e) { - } - count++; - } -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_500/S7.6_A5.2_T1.js b/tests/ES3/Unicode/Unicode_500/S7.6_A5.2_T1.js deleted file mode 100644 index d5a60ee4b..000000000 --- a/tests/ES3/Unicode/Unicode_500/S7.6_A5.2_T1.js +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A5.2_T1; - * @section: 7.6, 6; - * @assertion: If a \UnicodeEscapeSequence sequence were replaced by its UnicodeEscapeSequence's CV, the result must still be a valid Identifier that has the exact same sequence of characters as the original Identifier; - * @description: The CV of UnicodeEscapeSequence is Lu. - * Complex test with eval; -*/ - -//CHECK -Lu = [[0x0041, 0x005A], [0x00C0, 0x00D6], [0x00D8, 0x00DE], [0x0100, 0x0100], [0x0102, 0x0102], [0x0104, 0x0104], [0x0106, 0x0106], [0x0108, 0x0108], [0x010A, 0x010A], [0x010C, 0x010C], [0x010E, 0x010E], [0x0110, 0x0110], [0x0112, 0x0112], [0x0114, 0x0114], [0x0116, 0x0116], [0x0118, 0x0118], [0x011A, 0x011A], [0x011C, 0x011C], [0x011E, 0x011E], [0x0120, 0x0120], [0x0122, 0x0122], [0x0124, 0x0124], [0x0126, 0x0126], [0x0128, 0x0128], [0x012A, 0x012A], [0x012C, 0x012C], [0x012E, 0x012E], [0x0130, 0x0130], [0x0132, 0x0132], [0x0134, 0x0134], [0x0136, 0x0136], [0x0139, 0x0139], [0x013B, 0x013B], [0x013D, 0x013D], [0x013F, 0x013F], [0x0141, 0x0141], [0x0143, 0x0143], [0x0145, 0x0145], [0x0147, 0x0147], [0x014A, 0x014A], [0x014C, 0x014C], [0x014E, 0x014E], [0x0150, 0x0150], [0x0152, 0x0152], [0x0154, 0x0154], [0x0156, 0x0156], [0x0158, 0x0158], [0x015A, 0x015A], [0x015C, 0x015C], [0x015E, 0x015E], [0x0160, 0x0160], [0x0162, 0x0162], [0x0164, 0x0164], [0x0166, 0x0166], [0x0168, 0x0168], [0x016A, 0x016A], [0x016C, 0x016C], [0x016E, 0x016E], [0x0170, 0x0170], [0x0172, 0x0172], [0x0174, 0x0174], [0x0176, 0x0176], [0x0178, 0x0179], [0x017B, 0x017B], [0x017D, 0x017D], [0x0181, 0x0182], [0x0184, 0x0184], [0x0186, 0x0187], [0x0189, 0x018B], [0x018E, 0x0191], [0x0193, 0x0194], [0x0196, 0x0198], [0x019C, 0x019D], [0x019F, 0x01A0], [0x01A2, 0x01A2], [0x01A4, 0x01A4], [0x01A6, 0x01A7], [0x01A9, 0x01A9], [0x01AC, 0x01AC], [0x01AE, 0x01AF], [0x01B1, 0x01B3], [0x01B5, 0x01B5], [0x01B7, 0x01B8], [0x01BC, 0x01BC], [0x01C4, 0x01C4], [0x01C7, 0x01C7], [0x01CA, 0x01CA], [0x01CD, 0x01CD], [0x01CF, 0x01CF], [0x01D1, 0x01D1], [0x01D3, 0x01D3], [0x01D5, 0x01D5], [0x01D7, 0x01D7], [0x01D9, 0x01D9], [0x01DB, 0x01DB], [0x01DE, 0x01DE], [0x01E0, 0x01E0], [0x01E2, 0x01E2], [0x01E4, 0x01E4], [0x01E6, 0x01E6], [0x01E8, 0x01E8], [0x01EA, 0x01EA], [0x01EC, 0x01EC], [0x01EE, 0x01EE], [0x01F1, 0x01F1], [0x01F4, 0x01F4], [0x01F6, 0x01F8], [0x01FA, 0x01FA], [0x01FC, 0x01FC], [0x01FE, 0x01FE], [0x0200, 0x0200], [0x0202, 0x0202], [0x0204, 0x0204], [0x0206, 0x0206], [0x0208, 0x0208], [0x020A, 0x020A], [0x020C, 0x020C], [0x020E, 0x020E], [0x0210, 0x0210], [0x0212, 0x0212], [0x0214, 0x0214], [0x0216, 0x0216], [0x0218, 0x0218], [0x021A, 0x021A], [0x021C, 0x021C], [0x021E, 0x021E], [0x0220, 0x0220], [0x0222, 0x0222], [0x0224, 0x0224], [0x0226, 0x0226], [0x0228, 0x0228], [0x022A, 0x022A], [0x022C, 0x022C], [0x022E, 0x022E], [0x0230, 0x0230], [0x0232, 0x0232], [0x023A, 0x023B], [0x023D, 0x023E], [0x0241, 0x0241], [0x0243, 0x0246], [0x0248, 0x0248], [0x024A, 0x024A], [0x024C, 0x024C], [0x024E, 0x024E], [0x0386, 0x0386], [0x0388, 0x038A], [0x038C, 0x038C], [0x038E, 0x038F], [0x0391, 0x03A1], [0x03A3, 0x03AB], [0x03D2, 0x03D4], [0x03D8, 0x03D8], [0x03DA, 0x03DA], [0x03DC, 0x03DC], [0x03DE, 0x03DE], [0x03E0, 0x03E0], [0x03E2, 0x03E2], [0x03E4, 0x03E4], [0x03E6, 0x03E6], [0x03E8, 0x03E8], [0x03EA, 0x03EA], [0x03EC, 0x03EC], [0x03EE, 0x03EE], [0x03F4, 0x03F4], [0x03F7, 0x03F7], [0x03F9, 0x03FA], [0x03FD, 0x042F], [0x0460, 0x0460], [0x0462, 0x0462], [0x0464, 0x0464], [0x0466, 0x0466], [0x0468, 0x0468], [0x046A, 0x046A], [0x046C, 0x046C], [0x046E, 0x046E], [0x0470, 0x0470], [0x0472, 0x0472], [0x0474, 0x0474], [0x0476, 0x0476], [0x0478, 0x0478], [0x047A, 0x047A], [0x047C, 0x047C], [0x047E, 0x047E], [0x0480, 0x0480], [0x048A, 0x048A], [0x048C, 0x048C], [0x048E, 0x048E], [0x0490, 0x0490], [0x0492, 0x0492], [0x0494, 0x0494], [0x0496, 0x0496], [0x0498, 0x0498], [0x049A, 0x049A], [0x049C, 0x049C], [0x049E, 0x049E], [0x04A0, 0x04A0], [0x04A2, 0x04A2], [0x04A4, 0x04A4], [0x04A6, 0x04A6], [0x04A8, 0x04A8], [0x04AA, 0x04AA], [0x04AC, 0x04AC], [0x04AE, 0x04AE], [0x04B0, 0x04B0], [0x04B2, 0x04B2], [0x04B4, 0x04B4], [0x04B6, 0x04B6], [0x04B8, 0x04B8], [0x04BA, 0x04BA], [0x04BC, 0x04BC], [0x04BE, 0x04BE], [0x04C0, 0x04C1], [0x04C3, 0x04C3], [0x04C5, 0x04C5], [0x04C7, 0x04C7], [0x04C9, 0x04C9], [0x04CB, 0x04CB], [0x04CD, 0x04CD], [0x04D0, 0x04D0], [0x04D2, 0x04D2], [0x04D4, 0x04D4], [0x04D6, 0x04D6], [0x04D8, 0x04D8], [0x04DA, 0x04DA], [0x04DC, 0x04DC], [0x04DE, 0x04DE], [0x04E0, 0x04E0], [0x04E2, 0x04E2], [0x04E4, 0x04E4], [0x04E6, 0x04E6], [0x04E8, 0x04E8], [0x04EA, 0x04EA], [0x04EC, 0x04EC], [0x04EE, 0x04EE], [0x04F0, 0x04F0], [0x04F2, 0x04F2], [0x04F4, 0x04F4], [0x04F6, 0x04F6], [0x04F8, 0x04F8], [0x04FA, 0x04FA], [0x04FC, 0x04FC], [0x04FE, 0x04FE], [0x0500, 0x0500], [0x0502, 0x0502], [0x0504, 0x0504], [0x0506, 0x0506], [0x0508, 0x0508], [0x050A, 0x050A], [0x050C, 0x050C], [0x050E, 0x050E], [0x0510, 0x0510], [0x0512, 0x0512], [0x0531, 0x0556], [0x10A0, 0x10C5], [0x1E00, 0x1E00], [0x1E02, 0x1E02], [0x1E04, 0x1E04], [0x1E06, 0x1E06], [0x1E08, 0x1E08], [0x1E0A, 0x1E0A], [0x1E0C, 0x1E0C], [0x1E0E, 0x1E0E], [0x1E10, 0x1E10], [0x1E12, 0x1E12], [0x1E14, 0x1E14], [0x1E16, 0x1E16], [0x1E18, 0x1E18], [0x1E1A, 0x1E1A], [0x1E1C, 0x1E1C], [0x1E1E, 0x1E1E], [0x1E20, 0x1E20], [0x1E22, 0x1E22], [0x1E24, 0x1E24], [0x1E26, 0x1E26], [0x1E28, 0x1E28], [0x1E2A, 0x1E2A], [0x1E2C, 0x1E2C], [0x1E2E, 0x1E2E], [0x1E30, 0x1E30], [0x1E32, 0x1E32], [0x1E34, 0x1E34], [0x1E36, 0x1E36], [0x1E38, 0x1E38], [0x1E3A, 0x1E3A], [0x1E3C, 0x1E3C], [0x1E3E, 0x1E3E], [0x1E40, 0x1E40], [0x1E42, 0x1E42], [0x1E44, 0x1E44], [0x1E46, 0x1E46], [0x1E48, 0x1E48], [0x1E4A, 0x1E4A], [0x1E4C, 0x1E4C], [0x1E4E, 0x1E4E], [0x1E50, 0x1E50], [0x1E52, 0x1E52], [0x1E54, 0x1E54], [0x1E56, 0x1E56], [0x1E58, 0x1E58], [0x1E5A, 0x1E5A], [0x1E5C, 0x1E5C], [0x1E5E, 0x1E5E], [0x1E60, 0x1E60], [0x1E62, 0x1E62], [0x1E64, 0x1E64], [0x1E66, 0x1E66], [0x1E68, 0x1E68], [0x1E6A, 0x1E6A], [0x1E6C, 0x1E6C], [0x1E6E, 0x1E6E], [0x1E70, 0x1E70], [0x1E72, 0x1E72], [0x1E74, 0x1E74], [0x1E76, 0x1E76], [0x1E78, 0x1E78], [0x1E7A, 0x1E7A], [0x1E7C, 0x1E7C], [0x1E7E, 0x1E7E], [0x1E80, 0x1E80], [0x1E82, 0x1E82], [0x1E84, 0x1E84], [0x1E86, 0x1E86], [0x1E88, 0x1E88], [0x1E8A, 0x1E8A], [0x1E8C, 0x1E8C], [0x1E8E, 0x1E8E], [0x1E90, 0x1E90], [0x1E92, 0x1E92], [0x1E94, 0x1E94], [0x1EA0, 0x1EA0], [0x1EA2, 0x1EA2], [0x1EA4, 0x1EA4], [0x1EA6, 0x1EA6], [0x1EA8, 0x1EA8], [0x1EAA, 0x1EAA], [0x1EAC, 0x1EAC], [0x1EAE, 0x1EAE], [0x1EB0, 0x1EB0], [0x1EB2, 0x1EB2], [0x1EB4, 0x1EB4], [0x1EB6, 0x1EB6], [0x1EB8, 0x1EB8], [0x1EBA, 0x1EBA], [0x1EBC, 0x1EBC], [0x1EBE, 0x1EBE], [0x1EC0, 0x1EC0], [0x1EC2, 0x1EC2], [0x1EC4, 0x1EC4], [0x1EC6, 0x1EC6], [0x1EC8, 0x1EC8], [0x1ECA, 0x1ECA], [0x1ECC, 0x1ECC], [0x1ECE, 0x1ECE], [0x1ED0, 0x1ED0], [0x1ED2, 0x1ED2], [0x1ED4, 0x1ED4], [0x1ED6, 0x1ED6], [0x1ED8, 0x1ED8], [0x1EDA, 0x1EDA], [0x1EDC, 0x1EDC], [0x1EDE, 0x1EDE], [0x1EE0, 0x1EE0], [0x1EE2, 0x1EE2], [0x1EE4, 0x1EE4], [0x1EE6, 0x1EE6], [0x1EE8, 0x1EE8], [0x1EEA, 0x1EEA], [0x1EEC, 0x1EEC], [0x1EEE, 0x1EEE], [0x1EF0, 0x1EF0], [0x1EF2, 0x1EF2], [0x1EF4, 0x1EF4], [0x1EF6, 0x1EF6], [0x1EF8, 0x1EF8], [0x1F08, 0x1F0F], [0x1F18, 0x1F1D], [0x1F28, 0x1F2F], [0x1F38, 0x1F3F], [0x1F48, 0x1F4D], [0x1F59, 0x1F59], [0x1F5B, 0x1F5B], [0x1F5D, 0x1F5D], [0x1F5F, 0x1F5F], [0x1F68, 0x1F6F], [0x1FB8, 0x1FBB], [0x1FC8, 0x1FCB], [0x1FD8, 0x1FDB], [0x1FE8, 0x1FEC], [0x1FF8, 0x1FFB], [0x2102, 0x2102], [0x2107, 0x2107], [0x210B, 0x210D], [0x2110, 0x2112], [0x2115, 0x2115], [0x2119, 0x211D], [0x2124, 0x2124], [0x2126, 0x2126], [0x2128, 0x2128], [0x212A, 0x212D], [0x2130, 0x2133], [0x213E, 0x213F], [0x2145, 0x2145], [0x2183, 0x2183], [0x2C00, 0x2C2E], [0x2C60, 0x2C60], [0x2C62, 0x2C64], [0x2C67, 0x2C67], [0x2C69, 0x2C69], [0x2C6B, 0x2C6B], [0x2C75, 0x2C75], [0x2C80, 0x2C80], [0x2C82, 0x2C82], [0x2C84, 0x2C84], [0x2C86, 0x2C86], [0x2C88, 0x2C88], [0x2C8A, 0x2C8A], [0x2C8C, 0x2C8C], [0x2C8E, 0x2C8E], [0x2C90, 0x2C90], [0x2C92, 0x2C92], [0x2C94, 0x2C94], [0x2C96, 0x2C96], [0x2C98, 0x2C98], [0x2C9A, 0x2C9A], [0x2C9C, 0x2C9C], [0x2C9E, 0x2C9E], [0x2CA0, 0x2CA0], [0x2CA2, 0x2CA2], [0x2CA4, 0x2CA4], [0x2CA6, 0x2CA6], [0x2CA8, 0x2CA8], [0x2CAA, 0x2CAA], [0x2CAC, 0x2CAC], [0x2CAE, 0x2CAE], [0x2CB0, 0x2CB0], [0x2CB2, 0x2CB2], [0x2CB4, 0x2CB4], [0x2CB6, 0x2CB6], [0x2CB8, 0x2CB8], [0x2CBA, 0x2CBA], [0x2CBC, 0x2CBC], [0x2CBE, 0x2CBE], [0x2CC0, 0x2CC0], [0x2CC2, 0x2CC2], [0x2CC4, 0x2CC4], [0x2CC6, 0x2CC6], [0x2CC8, 0x2CC8], [0x2CCA, 0x2CCA], [0x2CCC, 0x2CCC], [0x2CCE, 0x2CCE], [0x2CD0, 0x2CD0], [0x2CD2, 0x2CD2], [0x2CD4, 0x2CD4], [0x2CD6, 0x2CD6], [0x2CD8, 0x2CD8], [0x2CDA, 0x2CDA], [0x2CDC, 0x2CDC], [0x2CDE, 0x2CDE], [0x2CE0, 0x2CE0], [0x2CE2, 0x2CE2], [0xFF21, 0xFF3A]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Lu.length; indexI++) { - for (indexJ = Lu[indexI][0]; indexJ <= Lu[indexI][1]; indexJ++) { - try { - var hex = decimalToHexString(indexJ); - var identifier1 = String.fromCharCode(indexJ); - var identifier2 = "\\u" + hex; - eval(identifier2 + " = 1"); - if (eval(identifier1 + " === " + identifier2) !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_500/S7.6_A5.2_T10.js b/tests/ES3/Unicode/Unicode_500/S7.6_A5.2_T10.js deleted file mode 100644 index 596e2b172..000000000 --- a/tests/ES3/Unicode/Unicode_500/S7.6_A5.2_T10.js +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A5.2_T10; - * @section: 7.6, 6; - * @assertion: If a \UnicodeEscapeSequence sequence were replaced by its UnicodeEscapeSequence's CV, the result must still be a valid Identifier that has the exact same sequence of characters as the original Identifier; - * @description: The CV of UnicodeEscapeSequence is Pc. - * Complex test with eval; -*/ - -//CHECK -Pc = [[0x005F, 0x005F], [0x203F, 0x2040], [0x2054, 0x2054], [0xFE33, 0xFE34], [0xFE4D, 0xFE4F], [0xFF3F, 0xFF3F]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Pc.length; indexI++) { - for (indexJ = Pc[indexI][0]; indexJ <= Pc[indexI][1]; indexJ++) { - try { - var hex = decimalToHexString(indexJ); - var identifier1 = "$" + String.fromCharCode(indexJ); - var identifier2 = "$\\u" + hex; - eval(identifier2 + " = 1"); - if (eval(identifier1 + " === " + identifier2) !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_500/S7.6_A5.2_T2.js b/tests/ES3/Unicode/Unicode_500/S7.6_A5.2_T2.js deleted file mode 100644 index e4be5e244..000000000 --- a/tests/ES3/Unicode/Unicode_500/S7.6_A5.2_T2.js +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A5.2_T2; - * @section: 7.6, 6; - * @assertion: If a \UnicodeEscapeSequence sequence were replaced by its UnicodeEscapeSequence's CV, the result must still be a valid Identifier that has the exact same sequence of characters as the original Identifier; - * @description: The CV of UnicodeEscapeSequence is Ll. - * Complex test with eval; -*/ - -//CHECK -Ll = [[0x0061, 0x007A], [0x00AA, 0x00AA], [0x00B5, 0x00B5], [0x00BA, 0x00BA], [0x00DF, 0x00F6], [0x00F8, 0x00FF], [0x0101, 0x0101], [0x0103, 0x0103], [0x0105, 0x0105], [0x0107, 0x0107], [0x0109, 0x0109], [0x010B, 0x010B], [0x010D, 0x010D], [0x010F, 0x010F], [0x0111, 0x0111], [0x0113, 0x0113], [0x0115, 0x0115], [0x0117, 0x0117], [0x0119, 0x0119], [0x011B, 0x011B], [0x011D, 0x011D], [0x011F, 0x011F], [0x0121, 0x0121], [0x0123, 0x0123], [0x0125, 0x0125], [0x0127, 0x0127], [0x0129, 0x0129], [0x012B, 0x012B], [0x012D, 0x012D], [0x012F, 0x012F], [0x0131, 0x0131], [0x0133, 0x0133], [0x0135, 0x0135], [0x0137, 0x0138], [0x013A, 0x013A], [0x013C, 0x013C], [0x013E, 0x013E], [0x0140, 0x0140], [0x0142, 0x0142], [0x0144, 0x0144], [0x0146, 0x0146], [0x0148, 0x0149], [0x014B, 0x014B], [0x014D, 0x014D], [0x014F, 0x014F], [0x0151, 0x0151], [0x0153, 0x0153], [0x0155, 0x0155], [0x0157, 0x0157], [0x0159, 0x0159], [0x015B, 0x015B], [0x015D, 0x015D], [0x015F, 0x015F], [0x0161, 0x0161], [0x0163, 0x0163], [0x0165, 0x0165], [0x0167, 0x0167], [0x0169, 0x0169], [0x016B, 0x016B], [0x016D, 0x016D], [0x016F, 0x016F], [0x0171, 0x0171], [0x0173, 0x0173], [0x0175, 0x0175], [0x0177, 0x0177], [0x017A, 0x017A], [0x017C, 0x017C], [0x017E, 0x0180], [0x0183, 0x0183], [0x0185, 0x0185], [0x0188, 0x0188], [0x018C, 0x018D], [0x0192, 0x0192], [0x0195, 0x0195], [0x0199, 0x019B], [0x019E, 0x019E], [0x01A1, 0x01A1], [0x01A3, 0x01A3], [0x01A5, 0x01A5], [0x01A8, 0x01A8], [0x01AA, 0x01AB], [0x01AD, 0x01AD], [0x01B0, 0x01B0], [0x01B4, 0x01B4], [0x01B6, 0x01B6], [0x01B9, 0x01BA], [0x01BD, 0x01BF], [0x01C6, 0x01C6], [0x01C9, 0x01C9], [0x01CC, 0x01CC], [0x01CE, 0x01CE], [0x01D0, 0x01D0], [0x01D2, 0x01D2], [0x01D4, 0x01D4], [0x01D6, 0x01D6], [0x01D8, 0x01D8], [0x01DA, 0x01DA], [0x01DC, 0x01DD], [0x01DF, 0x01DF], [0x01E1, 0x01E1], [0x01E3, 0x01E3], [0x01E5, 0x01E5], [0x01E7, 0x01E7], [0x01E9, 0x01E9], [0x01EB, 0x01EB], [0x01ED, 0x01ED], [0x01EF, 0x01F0], [0x01F3, 0x01F3], [0x01F5, 0x01F5], [0x01F9, 0x01F9], [0x01FB, 0x01FB], [0x01FD, 0x01FD], [0x01FF, 0x01FF], [0x0201, 0x0201], [0x0203, 0x0203], [0x0205, 0x0205], [0x0207, 0x0207], [0x0209, 0x0209], [0x020B, 0x020B], [0x020D, 0x020D], [0x020F, 0x020F], [0x0211, 0x0211], [0x0213, 0x0213], [0x0215, 0x0215], [0x0217, 0x0217], [0x0219, 0x0219], [0x021B, 0x021B], [0x021D, 0x021D], [0x021F, 0x021F], [0x0221, 0x0221], [0x0223, 0x0223], [0x0225, 0x0225], [0x0227, 0x0227], [0x0229, 0x0229], [0x022B, 0x022B], [0x022D, 0x022D], [0x022F, 0x022F], [0x0231, 0x0231], [0x0233, 0x0239], [0x023C, 0x023C], [0x023F, 0x0240], [0x0242, 0x0242], [0x0247, 0x0247], [0x0249, 0x0249], [0x024B, 0x024B], [0x024D, 0x024D], [0x024F, 0x0293], [0x0295, 0x02AF], [0x037B, 0x037D], [0x0390, 0x0390], [0x03AC, 0x03CE], [0x03D0, 0x03D1], [0x03D5, 0x03D7], [0x03D9, 0x03D9], [0x03DB, 0x03DB], [0x03DD, 0x03DD], [0x03DF, 0x03DF], [0x03E1, 0x03E1], [0x03E3, 0x03E3], [0x03E5, 0x03E5], [0x03E7, 0x03E7], [0x03E9, 0x03E9], [0x03EB, 0x03EB], [0x03ED, 0x03ED], [0x03EF, 0x03F3], [0x03F5, 0x03F5], [0x03F8, 0x03F8], [0x03FB, 0x03FC], [0x0430, 0x045F], [0x0461, 0x0461], [0x0463, 0x0463], [0x0465, 0x0465], [0x0467, 0x0467], [0x0469, 0x0469], [0x046B, 0x046B], [0x046D, 0x046D], [0x046F, 0x046F], [0x0471, 0x0471], [0x0473, 0x0473], [0x0475, 0x0475], [0x0477, 0x0477], [0x0479, 0x0479], [0x047B, 0x047B], [0x047D, 0x047D], [0x047F, 0x047F], [0x0481, 0x0481], [0x048B, 0x048B], [0x048D, 0x048D], [0x048F, 0x048F], [0x0491, 0x0491], [0x0493, 0x0493], [0x0495, 0x0495], [0x0497, 0x0497], [0x0499, 0x0499], [0x049B, 0x049B], [0x049D, 0x049D], [0x049F, 0x049F], [0x04A1, 0x04A1], [0x04A3, 0x04A3], [0x04A5, 0x04A5], [0x04A7, 0x04A7], [0x04A9, 0x04A9], [0x04AB, 0x04AB], [0x04AD, 0x04AD], [0x04AF, 0x04AF], [0x04B1, 0x04B1], [0x04B3, 0x04B3], [0x04B5, 0x04B5], [0x04B7, 0x04B7], [0x04B9, 0x04B9], [0x04BB, 0x04BB], [0x04BD, 0x04BD], [0x04BF, 0x04BF], [0x04C2, 0x04C2], [0x04C4, 0x04C4], [0x04C6, 0x04C6], [0x04C8, 0x04C8], [0x04CA, 0x04CA], [0x04CC, 0x04CC], [0x04CE, 0x04CF], [0x04D1, 0x04D1], [0x04D3, 0x04D3], [0x04D5, 0x04D5], [0x04D7, 0x04D7], [0x04D9, 0x04D9], [0x04DB, 0x04DB], [0x04DD, 0x04DD], [0x04DF, 0x04DF], [0x04E1, 0x04E1], [0x04E3, 0x04E3], [0x04E5, 0x04E5], [0x04E7, 0x04E7], [0x04E9, 0x04E9], [0x04EB, 0x04EB], [0x04ED, 0x04ED], [0x04EF, 0x04EF], [0x04F1, 0x04F1], [0x04F3, 0x04F3], [0x04F5, 0x04F5], [0x04F7, 0x04F7], [0x04F9, 0x04F9], [0x04FB, 0x04FB], [0x04FD, 0x04FD], [0x04FF, 0x04FF], [0x0501, 0x0501], [0x0503, 0x0503], [0x0505, 0x0505], [0x0507, 0x0507], [0x0509, 0x0509], [0x050B, 0x050B], [0x050D, 0x050D], [0x050F, 0x050F], [0x0511, 0x0511], [0x0513, 0x0513], [0x0561, 0x0587], [0x1D00, 0x1D2B], [0x1D62, 0x1D77], [0x1D79, 0x1D9A], [0x1E01, 0x1E01], [0x1E03, 0x1E03], [0x1E05, 0x1E05], [0x1E07, 0x1E07], [0x1E09, 0x1E09], [0x1E0B, 0x1E0B], [0x1E0D, 0x1E0D], [0x1E0F, 0x1E0F], [0x1E11, 0x1E11], [0x1E13, 0x1E13], [0x1E15, 0x1E15], [0x1E17, 0x1E17], [0x1E19, 0x1E19], [0x1E1B, 0x1E1B], [0x1E1D, 0x1E1D], [0x1E1F, 0x1E1F], [0x1E21, 0x1E21], [0x1E23, 0x1E23], [0x1E25, 0x1E25], [0x1E27, 0x1E27], [0x1E29, 0x1E29], [0x1E2B, 0x1E2B], [0x1E2D, 0x1E2D], [0x1E2F, 0x1E2F], [0x1E31, 0x1E31], [0x1E33, 0x1E33], [0x1E35, 0x1E35], [0x1E37, 0x1E37], [0x1E39, 0x1E39], [0x1E3B, 0x1E3B], [0x1E3D, 0x1E3D], [0x1E3F, 0x1E3F], [0x1E41, 0x1E41], [0x1E43, 0x1E43], [0x1E45, 0x1E45], [0x1E47, 0x1E47], [0x1E49, 0x1E49], [0x1E4B, 0x1E4B], [0x1E4D, 0x1E4D], [0x1E4F, 0x1E4F], [0x1E51, 0x1E51], [0x1E53, 0x1E53], [0x1E55, 0x1E55], [0x1E57, 0x1E57], [0x1E59, 0x1E59], [0x1E5B, 0x1E5B], [0x1E5D, 0x1E5D], [0x1E5F, 0x1E5F], [0x1E61, 0x1E61], [0x1E63, 0x1E63], [0x1E65, 0x1E65], [0x1E67, 0x1E67], [0x1E69, 0x1E69], [0x1E6B, 0x1E6B], [0x1E6D, 0x1E6D], [0x1E6F, 0x1E6F], [0x1E71, 0x1E71], [0x1E73, 0x1E73], [0x1E75, 0x1E75], [0x1E77, 0x1E77], [0x1E79, 0x1E79], [0x1E7B, 0x1E7B], [0x1E7D, 0x1E7D], [0x1E7F, 0x1E7F], [0x1E81, 0x1E81], [0x1E83, 0x1E83], [0x1E85, 0x1E85], [0x1E87, 0x1E87], [0x1E89, 0x1E89], [0x1E8B, 0x1E8B], [0x1E8D, 0x1E8D], [0x1E8F, 0x1E8F], [0x1E91, 0x1E91], [0x1E93, 0x1E93], [0x1E95, 0x1E9B], [0x1EA1, 0x1EA1], [0x1EA3, 0x1EA3], [0x1EA5, 0x1EA5], [0x1EA7, 0x1EA7], [0x1EA9, 0x1EA9], [0x1EAB, 0x1EAB], [0x1EAD, 0x1EAD], [0x1EAF, 0x1EAF], [0x1EB1, 0x1EB1], [0x1EB3, 0x1EB3], [0x1EB5, 0x1EB5], [0x1EB7, 0x1EB7], [0x1EB9, 0x1EB9], [0x1EBB, 0x1EBB], [0x1EBD, 0x1EBD], [0x1EBF, 0x1EBF], [0x1EC1, 0x1EC1], [0x1EC3, 0x1EC3], [0x1EC5, 0x1EC5], [0x1EC7, 0x1EC7], [0x1EC9, 0x1EC9], [0x1ECB, 0x1ECB], [0x1ECD, 0x1ECD], [0x1ECF, 0x1ECF], [0x1ED1, 0x1ED1], [0x1ED3, 0x1ED3], [0x1ED5, 0x1ED5], [0x1ED7, 0x1ED7], [0x1ED9, 0x1ED9], [0x1EDB, 0x1EDB], [0x1EDD, 0x1EDD], [0x1EDF, 0x1EDF], [0x1EE1, 0x1EE1], [0x1EE3, 0x1EE3], [0x1EE5, 0x1EE5], [0x1EE7, 0x1EE7], [0x1EE9, 0x1EE9], [0x1EEB, 0x1EEB], [0x1EED, 0x1EED], [0x1EEF, 0x1EEF], [0x1EF1, 0x1EF1], [0x1EF3, 0x1EF3], [0x1EF5, 0x1EF5], [0x1EF7, 0x1EF7], [0x1EF9, 0x1EF9], [0x1F00, 0x1F07], [0x1F10, 0x1F15], [0x1F20, 0x1F27], [0x1F30, 0x1F37], [0x1F40, 0x1F45], [0x1F50, 0x1F57], [0x1F60, 0x1F67], [0x1F70, 0x1F7D], [0x1F80, 0x1F87], [0x1F90, 0x1F97], [0x1FA0, 0x1FA7], [0x1FB0, 0x1FB4], [0x1FB6, 0x1FB7], [0x1FBE, 0x1FBE], [0x1FC2, 0x1FC4], [0x1FC6, 0x1FC7], [0x1FD0, 0x1FD3], [0x1FD6, 0x1FD7], [0x1FE0, 0x1FE7], [0x1FF2, 0x1FF4], [0x1FF6, 0x1FF7], [0x2071, 0x2071], [0x207F, 0x207F], [0x210A, 0x210A], [0x210E, 0x210F], [0x2113, 0x2113], [0x212F, 0x212F], [0x2134, 0x2134], [0x2139, 0x2139], [0x213C, 0x213D], [0x2146, 0x2149], [0x214E, 0x214E], [0x2184, 0x2184], [0x2C30, 0x2C5E], [0x2C61, 0x2C61], [0x2C65, 0x2C66], [0x2C68, 0x2C68], [0x2C6A, 0x2C6A], [0x2C6C, 0x2C6C], [0x2C74, 0x2C74], [0x2C76, 0x2C77], [0x2C81, 0x2C81], [0x2C83, 0x2C83], [0x2C85, 0x2C85], [0x2C87, 0x2C87], [0x2C89, 0x2C89], [0x2C8B, 0x2C8B], [0x2C8D, 0x2C8D], [0x2C8F, 0x2C8F], [0x2C91, 0x2C91], [0x2C93, 0x2C93], [0x2C95, 0x2C95], [0x2C97, 0x2C97], [0x2C99, 0x2C99], [0x2C9B, 0x2C9B], [0x2C9D, 0x2C9D], [0x2C9F, 0x2C9F], [0x2CA1, 0x2CA1], [0x2CA3, 0x2CA3], [0x2CA5, 0x2CA5], [0x2CA7, 0x2CA7], [0x2CA9, 0x2CA9], [0x2CAB, 0x2CAB], [0x2CAD, 0x2CAD], [0x2CAF, 0x2CAF], [0x2CB1, 0x2CB1], [0x2CB3, 0x2CB3], [0x2CB5, 0x2CB5], [0x2CB7, 0x2CB7], [0x2CB9, 0x2CB9], [0x2CBB, 0x2CBB], [0x2CBD, 0x2CBD], [0x2CBF, 0x2CBF], [0x2CC1, 0x2CC1], [0x2CC3, 0x2CC3], [0x2CC5, 0x2CC5], [0x2CC7, 0x2CC7], [0x2CC9, 0x2CC9], [0x2CCB, 0x2CCB], [0x2CCD, 0x2CCD], [0x2CCF, 0x2CCF], [0x2CD1, 0x2CD1], [0x2CD3, 0x2CD3], [0x2CD5, 0x2CD5], [0x2CD7, 0x2CD7], [0x2CD9, 0x2CD9], [0x2CDB, 0x2CDB], [0x2CDD, 0x2CDD], [0x2CDF, 0x2CDF], [0x2CE1, 0x2CE1], [0x2CE3, 0x2CE4], [0x2D00, 0x2D25], [0xFB00, 0xFB06], [0xFB13, 0xFB17], [0xFF41, 0xFF5A]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Ll.length; indexI++) { - for (indexJ = Ll[indexI][0]; indexJ <= Ll[indexI][1]; indexJ++) { - try { - var hex = decimalToHexString(indexJ); - var identifier1 = String.fromCharCode(indexJ); - var identifier2 = "\\u" + hex; - eval(identifier2 + " = 1"); - if (eval(identifier1 + " === " + identifier2) !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_500/S7.6_A5.2_T3.js b/tests/ES3/Unicode/Unicode_500/S7.6_A5.2_T3.js deleted file mode 100644 index e880bd673..000000000 --- a/tests/ES3/Unicode/Unicode_500/S7.6_A5.2_T3.js +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A5.2_T3; - * @section: 7.6, 6; - * @assertion: If a \UnicodeEscapeSequence sequence were replaced by its UnicodeEscapeSequence's CV, the result must still be a valid Identifier that has the exact same sequence of characters as the original Identifier; - * @description: The CV of UnicodeEscapeSequence is Lt. - * Complex test with eval; -*/ - -//CHECK -Lt = [[0x01C5, 0x01C5], [0x01C8, 0x01C8], [0x01CB, 0x01CB], [0x01F2, 0x01F2], [0x1F88, 0x1F8F], [0x1F98, 0x1F9F], [0x1FA8, 0x1FAF], [0x1FBC, 0x1FBC], [0x1FCC, 0x1FCC], [0x1FFC, 0x1FFC]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Lt.length; indexI++) { - for (indexJ = Lt[indexI][0]; indexJ <= Lt[indexI][1]; indexJ++) { - try { - var hex = decimalToHexString(indexJ); - var identifier1 = String.fromCharCode(indexJ); - var identifier2 = "\\u" + hex; - eval(identifier2 + " = 1"); - if (eval(identifier1 + " === " + identifier2) !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_500/S7.6_A5.2_T4.js b/tests/ES3/Unicode/Unicode_500/S7.6_A5.2_T4.js deleted file mode 100644 index ba9a20617..000000000 --- a/tests/ES3/Unicode/Unicode_500/S7.6_A5.2_T4.js +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A5.2_T4; - * @section: 7.6, 6; - * @assertion: If a \UnicodeEscapeSequence sequence were replaced by its UnicodeEscapeSequence's CV, the result must still be a valid Identifier that has the exact same sequence of characters as the original Identifier; - * @description: The CV of UnicodeEscapeSequence is Lm. - * Complex test with eval; -*/ - -//CHECK -Lm = [[0x02B0, 0x02C1], [0x02C6, 0x02D1], [0x02E0, 0x02E4], [0x02EE, 0x02EE], [0x037A, 0x037A], [0x0559, 0x0559], [0x0640, 0x0640], [0x06E5, 0x06E6], [0x07F4, 0x07F5], [0x07FA, 0x07FA], [0x0E46, 0x0E46], [0x0EC6, 0x0EC6], [0x10FC, 0x10FC], [0x17D7, 0x17D7], [0x1843, 0x1843], [0x1D2C, 0x1D61], [0x1D78, 0x1D78], [0x1D9B, 0x1DBF], [0x2090, 0x2094], [0x2D6F, 0x2D6F], [0x3005, 0x3005], [0x3031, 0x3035], [0x303B, 0x303B], [0x309D, 0x309E], [0x30FC, 0x30FE], [0xA015, 0xA015], [0xA717, 0xA71A], [0xFF70, 0xFF70], [0xFF9E, 0xFF9F]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Lm.length; indexI++) { - for (indexJ = Lm[indexI][0]; indexJ <= Lm[indexI][1]; indexJ++) { - try { - var hex = decimalToHexString(indexJ); - var identifier1 = String.fromCharCode(indexJ); - var identifier2 = "\\u" + hex; - eval(identifier2 + " = 1"); - if (eval(identifier1 + " === " + identifier2) !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_500/S7.6_A5.2_T5.js b/tests/ES3/Unicode/Unicode_500/S7.6_A5.2_T5.js deleted file mode 100644 index 06fc25447..000000000 --- a/tests/ES3/Unicode/Unicode_500/S7.6_A5.2_T5.js +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A5.2_T5; - * @section: 7.6, 6; - * @assertion: If a \UnicodeEscapeSequence sequence were replaced by its UnicodeEscapeSequence's CV, the result must still be a valid Identifier that has the exact same sequence of characters as the original Identifier; - * @description: The CV of UnicodeEscapeSequence is Lo. - * Complex test with eval; -*/ - -//CHECK -Lo = [[0x01BB, 0x01BB], [0x01C0, 0x01C3], [0x0294, 0x0294], [0x05D0, 0x05EA], [0x05F0, 0x05F2], [0x0621, 0x063A], [0x0641, 0x064A], [0x066E, 0x066F], [0x0671, 0x06D3], [0x06D5, 0x06D5], [0x06EE, 0x06EF], [0x06FA, 0x06FC], [0x06FF, 0x06FF], [0x0710, 0x0710], [0x0712, 0x072F], [0x074D, 0x076D], [0x0780, 0x07A5], [0x07B1, 0x07B1], [0x07CA, 0x07EA], [0x0904, 0x0939], [0x093D, 0x093D], [0x0950, 0x0950], [0x0958, 0x0961], [0x097B, 0x097F], [0x0985, 0x098C], [0x098F, 0x0990], [0x0993, 0x09A8], [0x09AA, 0x09B0], [0x09B2, 0x09B2], [0x09B6, 0x09B9], [0x09BD, 0x09BD], [0x09CE, 0x09CE], [0x09DC, 0x09DD], [0x09DF, 0x09E1], [0x09F0, 0x09F1], [0x0A05, 0x0A0A], [0x0A0F, 0x0A10], [0x0A13, 0x0A28], [0x0A2A, 0x0A30], [0x0A32, 0x0A33], [0x0A35, 0x0A36], [0x0A38, 0x0A39], [0x0A59, 0x0A5C], [0x0A5E, 0x0A5E], [0x0A72, 0x0A74], [0x0A85, 0x0A8D], [0x0A8F, 0x0A91], [0x0A93, 0x0AA8], [0x0AAA, 0x0AB0], [0x0AB2, 0x0AB3], [0x0AB5, 0x0AB9], [0x0ABD, 0x0ABD], [0x0AD0, 0x0AD0], [0x0AE0, 0x0AE1], [0x0B05, 0x0B0C], [0x0B0F, 0x0B10], [0x0B13, 0x0B28], [0x0B2A, 0x0B30], [0x0B32, 0x0B33], [0x0B35, 0x0B39], [0x0B3D, 0x0B3D], [0x0B5C, 0x0B5D], [0x0B5F, 0x0B61], [0x0B71, 0x0B71], [0x0B83, 0x0B83], [0x0B85, 0x0B8A], [0x0B8E, 0x0B90], [0x0B92, 0x0B95], [0x0B99, 0x0B9A], [0x0B9C, 0x0B9C], [0x0B9E, 0x0B9F], [0x0BA3, 0x0BA4], [0x0BA8, 0x0BAA], [0x0BAE, 0x0BB9], [0x0C05, 0x0C0C], [0x0C0E, 0x0C10], [0x0C12, 0x0C28], [0x0C2A, 0x0C33], [0x0C35, 0x0C39], [0x0C60, 0x0C61], [0x0C85, 0x0C8C], [0x0C8E, 0x0C90], [0x0C92, 0x0CA8], [0x0CAA, 0x0CB3], [0x0CB5, 0x0CB9], [0x0CBD, 0x0CBD], [0x0CDE, 0x0CDE], [0x0CE0, 0x0CE1], [0x0D05, 0x0D0C], [0x0D0E, 0x0D10], [0x0D12, 0x0D28], [0x0D2A, 0x0D39], [0x0D60, 0x0D61], [0x0D85, 0x0D96], [0x0D9A, 0x0DB1], [0x0DB3, 0x0DBB], [0x0DBD, 0x0DBD], [0x0DC0, 0x0DC6], [0x0E01, 0x0E30], [0x0E32, 0x0E33], [0x0E40, 0x0E45], [0x0E81, 0x0E82], [0x0E84, 0x0E84], [0x0E87, 0x0E88], [0x0E8A, 0x0E8A], [0x0E8D, 0x0E8D], [0x0E94, 0x0E97], [0x0E99, 0x0E9F], [0x0EA1, 0x0EA3], [0x0EA5, 0x0EA5], [0x0EA7, 0x0EA7], [0x0EAA, 0x0EAB], [0x0EAD, 0x0EB0], [0x0EB2, 0x0EB3], [0x0EBD, 0x0EBD], [0x0EC0, 0x0EC4], [0x0EDC, 0x0EDD], [0x0F00, 0x0F00], [0x0F40, 0x0F47], [0x0F49, 0x0F6A], [0x0F88, 0x0F8B], [0x1000, 0x1021], [0x1023, 0x1027], [0x1029, 0x102A], [0x1050, 0x1055], [0x10D0, 0x10FA], [0x1100, 0x1159], [0x115F, 0x11A2], [0x11A8, 0x11F9], [0x1200, 0x1248], [0x124A, 0x124D], [0x1250, 0x1256], [0x1258, 0x1258], [0x125A, 0x125D], [0x1260, 0x1288], [0x128A, 0x128D], [0x1290, 0x12B0], [0x12B2, 0x12B5], [0x12B8, 0x12BE], [0x12C0, 0x12C0], [0x12C2, 0x12C5], [0x12C8, 0x12D6], [0x12D8, 0x1310], [0x1312, 0x1315], [0x1318, 0x135A], [0x1380, 0x138F], [0x13A0, 0x13F4], [0x1401, 0x166C], [0x166F, 0x1676], [0x1681, 0x169A], [0x16A0, 0x16EA], [0x1700, 0x170C], [0x170E, 0x1711], [0x1720, 0x1731], [0x1740, 0x1751], [0x1760, 0x176C], [0x176E, 0x1770], [0x1780, 0x17B3], [0x17DC, 0x17DC], [0x1820, 0x1842], [0x1844, 0x1877], [0x1880, 0x18A8], [0x1900, 0x191C], [0x1950, 0x196D], [0x1970, 0x1974], [0x1980, 0x19A9], [0x19C1, 0x19C7], [0x1A00, 0x1A16], [0x1B05, 0x1B33], [0x1B45, 0x1B4B], [0x2135, 0x2138], [0x2D30, 0x2D65], [0x2D80, 0x2D96], [0x2DA0, 0x2DA6], [0x2DA8, 0x2DAE], [0x2DB0, 0x2DB6], [0x2DB8, 0x2DBE], [0x2DC0, 0x2DC6], [0x2DC8, 0x2DCE], [0x2DD0, 0x2DD6], [0x2DD8, 0x2DDE], [0x3006, 0x3006], [0x303C, 0x303C], [0x3041, 0x3096], [0x309F, 0x309F], [0x30A1, 0x30FA], [0x30FF, 0x30FF], [0x3105, 0x312C], [0x3131, 0x318E], [0x31A0, 0x31B7], [0x31F0, 0x31FF], [0x3400, 0x4DB5], [0x4E00, 0x9FBB], [0xA000, 0xA014], [0xA016, 0xA48C], [0xA800, 0xA801], [0xA803, 0xA805], [0xA807, 0xA80A], [0xA80C, 0xA822], [0xA840, 0xA873], [0xAC00, 0xD7A3], [0xF900, 0xFA2D], [0xFA30, 0xFA6A], [0xFA70, 0xFAD9], [0xFB1D, 0xFB1D], [0xFB1F, 0xFB28], [0xFB2A, 0xFB36], [0xFB38, 0xFB3C], [0xFB3E, 0xFB3E], [0xFB40, 0xFB41], [0xFB43, 0xFB44], [0xFB46, 0xFBB1], [0xFBD3, 0xFD3D], [0xFD50, 0xFD8F], [0xFD92, 0xFDC7], [0xFDF0, 0xFDFB], [0xFE70, 0xFE74], [0xFE76, 0xFEFC], [0xFF66, 0xFF6F], [0xFF71, 0xFF9D], [0xFFA0, 0xFFBE], [0xFFC2, 0xFFC7], [0xFFCA, 0xFFCF], [0xFFD2, 0xFFD7], [0xFFDA, 0xFFDC]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Lo.length; indexI++) { - for (indexJ = Lo[indexI][0]; indexJ <= Lo[indexI][1]; indexJ++) { - try { - var hex = decimalToHexString(indexJ); - var identifier1 = String.fromCharCode(indexJ); - var identifier2 = "\\u" + hex; - eval(identifier2 + " = 1"); - if (eval(identifier1 + " === " + identifier2) !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_500/S7.6_A5.2_T6.js b/tests/ES3/Unicode/Unicode_500/S7.6_A5.2_T6.js deleted file mode 100644 index 6eb55e634..000000000 --- a/tests/ES3/Unicode/Unicode_500/S7.6_A5.2_T6.js +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A5.2_T6; - * @section: 7.6, 6; - * @assertion: If a \UnicodeEscapeSequence sequence were replaced by its UnicodeEscapeSequence's CV, the result must still be a valid Identifier that has the exact same sequence of characters as the original Identifier; - * @description: The CV of UnicodeEscapeSequence is Nl. - * Complex test with eval; -*/ - -//CHECK -Nl = [[0x16EE, 0x16F0], [0x2160, 0x2182], [0x3007, 0x3007], [0x3021, 0x3029], [0x3038, 0x303A]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Nl.length; indexI++) { - for (indexJ = Nl[indexI][0]; indexJ <= Nl[indexI][1]; indexJ++) { - try { - var hex = decimalToHexString(indexJ); - var identifier1 = "$" + String.fromCharCode(indexJ); - var identifier2 = "$\\u" + hex; - eval(identifier2 + " = 1"); - if (eval(identifier1 + " === " + identifier2) !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_500/S7.6_A5.2_T7.js b/tests/ES3/Unicode/Unicode_500/S7.6_A5.2_T7.js deleted file mode 100644 index e6b25fc3c..000000000 --- a/tests/ES3/Unicode/Unicode_500/S7.6_A5.2_T7.js +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A5.2_T7; - * @section: 7.6, 6; - * @assertion: If a \UnicodeEscapeSequence sequence were replaced by its UnicodeEscapeSequence's CV, the result must still be a valid Identifier that has the exact same sequence of characters as the original Identifier; - * @description: The CV of UnicodeEscapeSequence is Mn. - * Complex test with eval; -*/ - -//CHECK -Mn = [[0x0300, 0x036F], [0x0483, 0x0486], [0x0591, 0x05BD], [0x05BF, 0x05BF], [0x05C1, 0x05C2], [0x05C4, 0x05C5], [0x05C7, 0x05C7], [0x0610, 0x0615], [0x064B, 0x065E], [0x0670, 0x0670], [0x06D6, 0x06DC], [0x06DF, 0x06E4], [0x06E7, 0x06E8], [0x06EA, 0x06ED], [0x0711, 0x0711], [0x0730, 0x074A], [0x07A6, 0x07B0], [0x07EB, 0x07F3], [0x0901, 0x0902], [0x093C, 0x093C], [0x0941, 0x0948], [0x094D, 0x094D], [0x0951, 0x0954], [0x0962, 0x0963], [0x0981, 0x0981], [0x09BC, 0x09BC], [0x09C1, 0x09C4], [0x09CD, 0x09CD], [0x09E2, 0x09E3], [0x0A01, 0x0A02], [0x0A3C, 0x0A3C], [0x0A41, 0x0A42], [0x0A47, 0x0A48], [0x0A4B, 0x0A4D], [0x0A70, 0x0A71], [0x0A81, 0x0A82], [0x0ABC, 0x0ABC], [0x0AC1, 0x0AC5], [0x0AC7, 0x0AC8], [0x0ACD, 0x0ACD], [0x0AE2, 0x0AE3], [0x0B01, 0x0B01], [0x0B3C, 0x0B3C], [0x0B3F, 0x0B3F], [0x0B41, 0x0B43], [0x0B4D, 0x0B4D], [0x0B56, 0x0B56], [0x0B82, 0x0B82], [0x0BC0, 0x0BC0], [0x0BCD, 0x0BCD], [0x0C3E, 0x0C40], [0x0C46, 0x0C48], [0x0C4A, 0x0C4D], [0x0C55, 0x0C56], [0x0CBC, 0x0CBC], [0x0CBF, 0x0CBF], [0x0CC6, 0x0CC6], [0x0CCC, 0x0CCD], [0x0CE2, 0x0CE3], [0x0D41, 0x0D43], [0x0D4D, 0x0D4D], [0x0DCA, 0x0DCA], [0x0DD2, 0x0DD4], [0x0DD6, 0x0DD6], [0x0E31, 0x0E31], [0x0E34, 0x0E3A], [0x0E47, 0x0E4E], [0x0EB1, 0x0EB1], [0x0EB4, 0x0EB9], [0x0EBB, 0x0EBC], [0x0EC8, 0x0ECD], [0x0F18, 0x0F19], [0x0F35, 0x0F35], [0x0F37, 0x0F37], [0x0F39, 0x0F39], [0x0F71, 0x0F7E], [0x0F80, 0x0F84], [0x0F86, 0x0F87], [0x0F90, 0x0F97], [0x0F99, 0x0FBC], [0x0FC6, 0x0FC6], [0x102D, 0x1030], [0x1032, 0x1032], [0x1036, 0x1037], [0x1039, 0x1039], [0x1058, 0x1059], [0x135F, 0x135F], [0x1712, 0x1714], [0x1732, 0x1734], [0x1752, 0x1753], [0x1772, 0x1773], [0x17B7, 0x17BD], [0x17C6, 0x17C6], [0x17C9, 0x17D3], [0x17DD, 0x17DD], [0x180B, 0x180D], [0x18A9, 0x18A9], [0x1920, 0x1922], [0x1927, 0x1928], [0x1932, 0x1932], [0x1939, 0x193B], [0x1A17, 0x1A18], [0x1B00, 0x1B03], [0x1B34, 0x1B34], [0x1B36, 0x1B3A], [0x1B3C, 0x1B3C], [0x1B42, 0x1B42], [0x1B6B, 0x1B73], [0x1DC0, 0x1DCA], [0x1DFE, 0x1DFF], [0x20D0, 0x20DC], [0x20E1, 0x20E1], [0x20E5, 0x20EF], [0x302A, 0x302F], [0x3099, 0x309A], [0xA806, 0xA806], [0xA80B, 0xA80B], [0xA825, 0xA826], [0xFB1E, 0xFB1E], [0xFE00, 0xFE0F], [0xFE20, 0xFE23]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Mn.length; indexI++) { - for (indexJ = Mn[indexI][0]; indexJ <= Mn[indexI][1]; indexJ++) { - try { - var hex = decimalToHexString(indexJ); - var identifier1 = "$" + String.fromCharCode(indexJ); - var identifier2 = "$\\u" + hex; - eval(identifier2 + " = 1"); - if (eval(identifier1 + " === " + identifier2) !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_500/S7.6_A5.2_T8.js b/tests/ES3/Unicode/Unicode_500/S7.6_A5.2_T8.js deleted file mode 100644 index 9250baf36..000000000 --- a/tests/ES3/Unicode/Unicode_500/S7.6_A5.2_T8.js +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A5.2_T8; - * @section: 7.6, 6; - * @assertion: If a \UnicodeEscapeSequence sequence were replaced by its UnicodeEscapeSequence's CV, the result must still be a valid Identifier that has the exact same sequence of characters as the original Identifier; - * @description: The CV of UnicodeEscapeSequence is Mc. - * Complex test with eval; -*/ - -//CHECK -Mc = [[0x0903, 0x0903], [0x093E, 0x0940], [0x0949, 0x094C], [0x0982, 0x0983], [0x09BE, 0x09C0], [0x09C7, 0x09C8], [0x09CB, 0x09CC], [0x09D7, 0x09D7], [0x0A03, 0x0A03], [0x0A3E, 0x0A40], [0x0A83, 0x0A83], [0x0ABE, 0x0AC0], [0x0AC9, 0x0AC9], [0x0ACB, 0x0ACC], [0x0B02, 0x0B03], [0x0B3E, 0x0B3E], [0x0B40, 0x0B40], [0x0B47, 0x0B48], [0x0B4B, 0x0B4C], [0x0B57, 0x0B57], [0x0BBE, 0x0BBF], [0x0BC1, 0x0BC2], [0x0BC6, 0x0BC8], [0x0BCA, 0x0BCC], [0x0BD7, 0x0BD7], [0x0C01, 0x0C03], [0x0C41, 0x0C44], [0x0C82, 0x0C83], [0x0CBE, 0x0CBE], [0x0CC0, 0x0CC4], [0x0CC7, 0x0CC8], [0x0CCA, 0x0CCB], [0x0CD5, 0x0CD6], [0x0D02, 0x0D03], [0x0D3E, 0x0D40], [0x0D46, 0x0D48], [0x0D4A, 0x0D4C], [0x0D57, 0x0D57], [0x0D82, 0x0D83], [0x0DCF, 0x0DD1], [0x0DD8, 0x0DDF], [0x0DF2, 0x0DF3], [0x0F3E, 0x0F3F], [0x0F7F, 0x0F7F], [0x102C, 0x102C], [0x1031, 0x1031], [0x1038, 0x1038], [0x1056, 0x1057], [0x17B6, 0x17B6], [0x17BE, 0x17C5], [0x17C7, 0x17C8], [0x1923, 0x1926], [0x1929, 0x192B], [0x1930, 0x1931], [0x1933, 0x1938], [0x19B0, 0x19C0], [0x19C8, 0x19C9], [0x1A19, 0x1A1B], [0x1B04, 0x1B04], [0x1B35, 0x1B35], [0x1B3B, 0x1B3B], [0x1B3D, 0x1B41], [0x1B43, 0x1B44], [0xA802, 0xA802], [0xA823, 0xA824], [0xA827, 0xA827]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Mc.length; indexI++) { - for (indexJ = Mc[indexI][0]; indexJ <= Mc[indexI][1]; indexJ++) { - try { - var hex = decimalToHexString(indexJ); - var identifier1 = "$" + String.fromCharCode(indexJ); - var identifier2 = "$\\u" + hex; - eval(identifier2 + " = 1"); - if (eval(identifier1 + " === " + identifier2) !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_500/S7.6_A5.2_T9.js b/tests/ES3/Unicode/Unicode_500/S7.6_A5.2_T9.js deleted file mode 100644 index 19c40233c..000000000 --- a/tests/ES3/Unicode/Unicode_500/S7.6_A5.2_T9.js +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A5.2_T9; - * @section: 7.6, 6; - * @assertion: If a \UnicodeEscapeSequence sequence were replaced by its UnicodeEscapeSequence's CV, the result must still be a valid Identifier that has the exact same sequence of characters as the original Identifier; - * @description: The CV of UnicodeEscapeSequence is Nd. - * Complex test with eval; -*/ - -//CHECK -Nd = [[0x0030, 0x0039], [0x0660, 0x0669], [0x06F0, 0x06F9], [0x07C0, 0x07C9], [0x0966, 0x096F], [0x09E6, 0x09EF], [0x0A66, 0x0A6F], [0x0AE6, 0x0AEF], [0x0B66, 0x0B6F], [0x0BE6, 0x0BEF], [0x0C66, 0x0C6F], [0x0CE6, 0x0CEF], [0x0D66, 0x0D6F], [0x0E50, 0x0E59], [0x0ED0, 0x0ED9], [0x0F20, 0x0F29], [0x1040, 0x1049], [0x17E0, 0x17E9], [0x1810, 0x1819], [0x1946, 0x194F], [0x19D0, 0x19D9], [0x1B50, 0x1B59], [0xFF10, 0xFF19]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Nd.length; indexI++) { - for (indexJ = Nd[indexI][0]; indexJ <= Nd[indexI][1]; indexJ++) { - try { - var hex = decimalToHexString(indexJ); - var identifier1 = "$" + String.fromCharCode(indexJ); - var identifier2 = "$\\u" + hex; - eval(identifier2 + " = 1"); - if (eval(identifier1 + " === " + identifier2) !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_500/S7.6_A5.3_T1.js b/tests/ES3/Unicode/Unicode_500/S7.6_A5.3_T1.js deleted file mode 100644 index e5cb4e2b2..000000000 --- a/tests/ES3/Unicode/Unicode_500/S7.6_A5.3_T1.js +++ /dev/null @@ -1,153 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A5.3_T1; - * @section: 7.6, 6; - * @assertion: If a UnicodeEscapeSequence put a character into an identifier that would otherwise be illegal, throw SyntaxError; - * @description: Complex test with eval; -*/ - -//CHECK -Lu = [[0x0041, 0x005A], [0x00C0, 0x00D6], [0x00D8, 0x00DE], [0x0100, 0x0100], [0x0102, 0x0102], [0x0104, 0x0104], [0x0106, 0x0106], [0x0108, 0x0108], [0x010A, 0x010A], [0x010C, 0x010C], [0x010E, 0x010E], [0x0110, 0x0110], [0x0112, 0x0112], [0x0114, 0x0114], [0x0116, 0x0116], [0x0118, 0x0118], [0x011A, 0x011A], [0x011C, 0x011C], [0x011E, 0x011E], [0x0120, 0x0120], [0x0122, 0x0122], [0x0124, 0x0124], [0x0126, 0x0126], [0x0128, 0x0128], [0x012A, 0x012A], [0x012C, 0x012C], [0x012E, 0x012E], [0x0130, 0x0130], [0x0132, 0x0132], [0x0134, 0x0134], [0x0136, 0x0136], [0x0139, 0x0139], [0x013B, 0x013B], [0x013D, 0x013D], [0x013F, 0x013F], [0x0141, 0x0141], [0x0143, 0x0143], [0x0145, 0x0145], [0x0147, 0x0147], [0x014A, 0x014A], [0x014C, 0x014C], [0x014E, 0x014E], [0x0150, 0x0150], [0x0152, 0x0152], [0x0154, 0x0154], [0x0156, 0x0156], [0x0158, 0x0158], [0x015A, 0x015A], [0x015C, 0x015C], [0x015E, 0x015E], [0x0160, 0x0160], [0x0162, 0x0162], [0x0164, 0x0164], [0x0166, 0x0166], [0x0168, 0x0168], [0x016A, 0x016A], [0x016C, 0x016C], [0x016E, 0x016E], [0x0170, 0x0170], [0x0172, 0x0172], [0x0174, 0x0174], [0x0176, 0x0176], [0x0178, 0x0179], [0x017B, 0x017B], [0x017D, 0x017D], [0x0181, 0x0182], [0x0184, 0x0184], [0x0186, 0x0187], [0x0189, 0x018B], [0x018E, 0x0191], [0x0193, 0x0194], [0x0196, 0x0198], [0x019C, 0x019D], [0x019F, 0x01A0], [0x01A2, 0x01A2], [0x01A4, 0x01A4], [0x01A6, 0x01A7], [0x01A9, 0x01A9], [0x01AC, 0x01AC], [0x01AE, 0x01AF], [0x01B1, 0x01B3], [0x01B5, 0x01B5], [0x01B7, 0x01B8], [0x01BC, 0x01BC], [0x01C4, 0x01C4], [0x01C7, 0x01C7], [0x01CA, 0x01CA], [0x01CD, 0x01CD], [0x01CF, 0x01CF], [0x01D1, 0x01D1], [0x01D3, 0x01D3], [0x01D5, 0x01D5], [0x01D7, 0x01D7], [0x01D9, 0x01D9], [0x01DB, 0x01DB], [0x01DE, 0x01DE], [0x01E0, 0x01E0], [0x01E2, 0x01E2], [0x01E4, 0x01E4], [0x01E6, 0x01E6], [0x01E8, 0x01E8], [0x01EA, 0x01EA], [0x01EC, 0x01EC], [0x01EE, 0x01EE], [0x01F1, 0x01F1], [0x01F4, 0x01F4], [0x01F6, 0x01F8], [0x01FA, 0x01FA], [0x01FC, 0x01FC], [0x01FE, 0x01FE], [0x0200, 0x0200], [0x0202, 0x0202], [0x0204, 0x0204], [0x0206, 0x0206], [0x0208, 0x0208], [0x020A, 0x020A], [0x020C, 0x020C], [0x020E, 0x020E], [0x0210, 0x0210], [0x0212, 0x0212], [0x0214, 0x0214], [0x0216, 0x0216], [0x0218, 0x0218], [0x021A, 0x021A], [0x021C, 0x021C], [0x021E, 0x021E], [0x0220, 0x0220], [0x0222, 0x0222], [0x0224, 0x0224], [0x0226, 0x0226], [0x0228, 0x0228], [0x022A, 0x022A], [0x022C, 0x022C], [0x022E, 0x022E], [0x0230, 0x0230], [0x0232, 0x0232], [0x023A, 0x023B], [0x023D, 0x023E], [0x0241, 0x0241], [0x0243, 0x0246], [0x0248, 0x0248], [0x024A, 0x024A], [0x024C, 0x024C], [0x024E, 0x024E], [0x0386, 0x0386], [0x0388, 0x038A], [0x038C, 0x038C], [0x038E, 0x038F], [0x0391, 0x03A1], [0x03A3, 0x03AB], [0x03D2, 0x03D4], [0x03D8, 0x03D8], [0x03DA, 0x03DA], [0x03DC, 0x03DC], [0x03DE, 0x03DE], [0x03E0, 0x03E0], [0x03E2, 0x03E2], [0x03E4, 0x03E4], [0x03E6, 0x03E6], [0x03E8, 0x03E8], [0x03EA, 0x03EA], [0x03EC, 0x03EC], [0x03EE, 0x03EE], [0x03F4, 0x03F4], [0x03F7, 0x03F7], [0x03F9, 0x03FA], [0x03FD, 0x042F], [0x0460, 0x0460], [0x0462, 0x0462], [0x0464, 0x0464], [0x0466, 0x0466], [0x0468, 0x0468], [0x046A, 0x046A], [0x046C, 0x046C], [0x046E, 0x046E], [0x0470, 0x0470], [0x0472, 0x0472], [0x0474, 0x0474], [0x0476, 0x0476], [0x0478, 0x0478], [0x047A, 0x047A], [0x047C, 0x047C], [0x047E, 0x047E], [0x0480, 0x0480], [0x048A, 0x048A], [0x048C, 0x048C], [0x048E, 0x048E], [0x0490, 0x0490], [0x0492, 0x0492], [0x0494, 0x0494], [0x0496, 0x0496], [0x0498, 0x0498], [0x049A, 0x049A], [0x049C, 0x049C], [0x049E, 0x049E], [0x04A0, 0x04A0], [0x04A2, 0x04A2], [0x04A4, 0x04A4], [0x04A6, 0x04A6], [0x04A8, 0x04A8], [0x04AA, 0x04AA], [0x04AC, 0x04AC], [0x04AE, 0x04AE], [0x04B0, 0x04B0], [0x04B2, 0x04B2], [0x04B4, 0x04B4], [0x04B6, 0x04B6], [0x04B8, 0x04B8], [0x04BA, 0x04BA], [0x04BC, 0x04BC], [0x04BE, 0x04BE], [0x04C0, 0x04C1], [0x04C3, 0x04C3], [0x04C5, 0x04C5], [0x04C7, 0x04C7], [0x04C9, 0x04C9], [0x04CB, 0x04CB], [0x04CD, 0x04CD], [0x04D0, 0x04D0], [0x04D2, 0x04D2], [0x04D4, 0x04D4], [0x04D6, 0x04D6], [0x04D8, 0x04D8], [0x04DA, 0x04DA], [0x04DC, 0x04DC], [0x04DE, 0x04DE], [0x04E0, 0x04E0], [0x04E2, 0x04E2], [0x04E4, 0x04E4], [0x04E6, 0x04E6], [0x04E8, 0x04E8], [0x04EA, 0x04EA], [0x04EC, 0x04EC], [0x04EE, 0x04EE], [0x04F0, 0x04F0], [0x04F2, 0x04F2], [0x04F4, 0x04F4], [0x04F6, 0x04F6], [0x04F8, 0x04F8], [0x04FA, 0x04FA], [0x04FC, 0x04FC], [0x04FE, 0x04FE], [0x0500, 0x0500], [0x0502, 0x0502], [0x0504, 0x0504], [0x0506, 0x0506], [0x0508, 0x0508], [0x050A, 0x050A], [0x050C, 0x050C], [0x050E, 0x050E], [0x0510, 0x0510], [0x0512, 0x0512], [0x0531, 0x0556], [0x10A0, 0x10C5], [0x1E00, 0x1E00], [0x1E02, 0x1E02], [0x1E04, 0x1E04], [0x1E06, 0x1E06], [0x1E08, 0x1E08], [0x1E0A, 0x1E0A], [0x1E0C, 0x1E0C], [0x1E0E, 0x1E0E], [0x1E10, 0x1E10], [0x1E12, 0x1E12], [0x1E14, 0x1E14], [0x1E16, 0x1E16], [0x1E18, 0x1E18], [0x1E1A, 0x1E1A], [0x1E1C, 0x1E1C], [0x1E1E, 0x1E1E], [0x1E20, 0x1E20], [0x1E22, 0x1E22], [0x1E24, 0x1E24], [0x1E26, 0x1E26], [0x1E28, 0x1E28], [0x1E2A, 0x1E2A], [0x1E2C, 0x1E2C], [0x1E2E, 0x1E2E], [0x1E30, 0x1E30], [0x1E32, 0x1E32], [0x1E34, 0x1E34], [0x1E36, 0x1E36], [0x1E38, 0x1E38], [0x1E3A, 0x1E3A], [0x1E3C, 0x1E3C], [0x1E3E, 0x1E3E], [0x1E40, 0x1E40], [0x1E42, 0x1E42], [0x1E44, 0x1E44], [0x1E46, 0x1E46], [0x1E48, 0x1E48], [0x1E4A, 0x1E4A], [0x1E4C, 0x1E4C], [0x1E4E, 0x1E4E], [0x1E50, 0x1E50], [0x1E52, 0x1E52], [0x1E54, 0x1E54], [0x1E56, 0x1E56], [0x1E58, 0x1E58], [0x1E5A, 0x1E5A], [0x1E5C, 0x1E5C], [0x1E5E, 0x1E5E], [0x1E60, 0x1E60], [0x1E62, 0x1E62], [0x1E64, 0x1E64], [0x1E66, 0x1E66], [0x1E68, 0x1E68], [0x1E6A, 0x1E6A], [0x1E6C, 0x1E6C], [0x1E6E, 0x1E6E], [0x1E70, 0x1E70], [0x1E72, 0x1E72], [0x1E74, 0x1E74], [0x1E76, 0x1E76], [0x1E78, 0x1E78], [0x1E7A, 0x1E7A], [0x1E7C, 0x1E7C], [0x1E7E, 0x1E7E], [0x1E80, 0x1E80], [0x1E82, 0x1E82], [0x1E84, 0x1E84], [0x1E86, 0x1E86], [0x1E88, 0x1E88], [0x1E8A, 0x1E8A], [0x1E8C, 0x1E8C], [0x1E8E, 0x1E8E], [0x1E90, 0x1E90], [0x1E92, 0x1E92], [0x1E94, 0x1E94], [0x1EA0, 0x1EA0], [0x1EA2, 0x1EA2], [0x1EA4, 0x1EA4], [0x1EA6, 0x1EA6], [0x1EA8, 0x1EA8], [0x1EAA, 0x1EAA], [0x1EAC, 0x1EAC], [0x1EAE, 0x1EAE], [0x1EB0, 0x1EB0], [0x1EB2, 0x1EB2], [0x1EB4, 0x1EB4], [0x1EB6, 0x1EB6], [0x1EB8, 0x1EB8], [0x1EBA, 0x1EBA], [0x1EBC, 0x1EBC], [0x1EBE, 0x1EBE], [0x1EC0, 0x1EC0], [0x1EC2, 0x1EC2], [0x1EC4, 0x1EC4], [0x1EC6, 0x1EC6], [0x1EC8, 0x1EC8], [0x1ECA, 0x1ECA], [0x1ECC, 0x1ECC], [0x1ECE, 0x1ECE], [0x1ED0, 0x1ED0], [0x1ED2, 0x1ED2], [0x1ED4, 0x1ED4], [0x1ED6, 0x1ED6], [0x1ED8, 0x1ED8], [0x1EDA, 0x1EDA], [0x1EDC, 0x1EDC], [0x1EDE, 0x1EDE], [0x1EE0, 0x1EE0], [0x1EE2, 0x1EE2], [0x1EE4, 0x1EE4], [0x1EE6, 0x1EE6], [0x1EE8, 0x1EE8], [0x1EEA, 0x1EEA], [0x1EEC, 0x1EEC], [0x1EEE, 0x1EEE], [0x1EF0, 0x1EF0], [0x1EF2, 0x1EF2], [0x1EF4, 0x1EF4], [0x1EF6, 0x1EF6], [0x1EF8, 0x1EF8], [0x1F08, 0x1F0F], [0x1F18, 0x1F1D], [0x1F28, 0x1F2F], [0x1F38, 0x1F3F], [0x1F48, 0x1F4D], [0x1F59, 0x1F59], [0x1F5B, 0x1F5B], [0x1F5D, 0x1F5D], [0x1F5F, 0x1F5F], [0x1F68, 0x1F6F], [0x1FB8, 0x1FBB], [0x1FC8, 0x1FCB], [0x1FD8, 0x1FDB], [0x1FE8, 0x1FEC], [0x1FF8, 0x1FFB], [0x2102, 0x2102], [0x2107, 0x2107], [0x210B, 0x210D], [0x2110, 0x2112], [0x2115, 0x2115], [0x2119, 0x211D], [0x2124, 0x2124], [0x2126, 0x2126], [0x2128, 0x2128], [0x212A, 0x212D], [0x2130, 0x2133], [0x213E, 0x213F], [0x2145, 0x2145], [0x2183, 0x2183], [0x2C00, 0x2C2E], [0x2C60, 0x2C60], [0x2C62, 0x2C64], [0x2C67, 0x2C67], [0x2C69, 0x2C69], [0x2C6B, 0x2C6B], [0x2C75, 0x2C75], [0x2C80, 0x2C80], [0x2C82, 0x2C82], [0x2C84, 0x2C84], [0x2C86, 0x2C86], [0x2C88, 0x2C88], [0x2C8A, 0x2C8A], [0x2C8C, 0x2C8C], [0x2C8E, 0x2C8E], [0x2C90, 0x2C90], [0x2C92, 0x2C92], [0x2C94, 0x2C94], [0x2C96, 0x2C96], [0x2C98, 0x2C98], [0x2C9A, 0x2C9A], [0x2C9C, 0x2C9C], [0x2C9E, 0x2C9E], [0x2CA0, 0x2CA0], [0x2CA2, 0x2CA2], [0x2CA4, 0x2CA4], [0x2CA6, 0x2CA6], [0x2CA8, 0x2CA8], [0x2CAA, 0x2CAA], [0x2CAC, 0x2CAC], [0x2CAE, 0x2CAE], [0x2CB0, 0x2CB0], [0x2CB2, 0x2CB2], [0x2CB4, 0x2CB4], [0x2CB6, 0x2CB6], [0x2CB8, 0x2CB8], [0x2CBA, 0x2CBA], [0x2CBC, 0x2CBC], [0x2CBE, 0x2CBE], [0x2CC0, 0x2CC0], [0x2CC2, 0x2CC2], [0x2CC4, 0x2CC4], [0x2CC6, 0x2CC6], [0x2CC8, 0x2CC8], [0x2CCA, 0x2CCA], [0x2CCC, 0x2CCC], [0x2CCE, 0x2CCE], [0x2CD0, 0x2CD0], [0x2CD2, 0x2CD2], [0x2CD4, 0x2CD4], [0x2CD6, 0x2CD6], [0x2CD8, 0x2CD8], [0x2CDA, 0x2CDA], [0x2CDC, 0x2CDC], [0x2CDE, 0x2CDE], [0x2CE0, 0x2CE0], [0x2CE2, 0x2CE2], [0xFF21, 0xFF3A]]; -Ll = [[0x0061, 0x007A], [0x00AA, 0x00AA], [0x00B5, 0x00B5], [0x00BA, 0x00BA], [0x00DF, 0x00F6], [0x00F8, 0x00FF], [0x0101, 0x0101], [0x0103, 0x0103], [0x0105, 0x0105], [0x0107, 0x0107], [0x0109, 0x0109], [0x010B, 0x010B], [0x010D, 0x010D], [0x010F, 0x010F], [0x0111, 0x0111], [0x0113, 0x0113], [0x0115, 0x0115], [0x0117, 0x0117], [0x0119, 0x0119], [0x011B, 0x011B], [0x011D, 0x011D], [0x011F, 0x011F], [0x0121, 0x0121], [0x0123, 0x0123], [0x0125, 0x0125], [0x0127, 0x0127], [0x0129, 0x0129], [0x012B, 0x012B], [0x012D, 0x012D], [0x012F, 0x012F], [0x0131, 0x0131], [0x0133, 0x0133], [0x0135, 0x0135], [0x0137, 0x0138], [0x013A, 0x013A], [0x013C, 0x013C], [0x013E, 0x013E], [0x0140, 0x0140], [0x0142, 0x0142], [0x0144, 0x0144], [0x0146, 0x0146], [0x0148, 0x0149], [0x014B, 0x014B], [0x014D, 0x014D], [0x014F, 0x014F], [0x0151, 0x0151], [0x0153, 0x0153], [0x0155, 0x0155], [0x0157, 0x0157], [0x0159, 0x0159], [0x015B, 0x015B], [0x015D, 0x015D], [0x015F, 0x015F], [0x0161, 0x0161], [0x0163, 0x0163], [0x0165, 0x0165], [0x0167, 0x0167], [0x0169, 0x0169], [0x016B, 0x016B], [0x016D, 0x016D], [0x016F, 0x016F], [0x0171, 0x0171], [0x0173, 0x0173], [0x0175, 0x0175], [0x0177, 0x0177], [0x017A, 0x017A], [0x017C, 0x017C], [0x017E, 0x0180], [0x0183, 0x0183], [0x0185, 0x0185], [0x0188, 0x0188], [0x018C, 0x018D], [0x0192, 0x0192], [0x0195, 0x0195], [0x0199, 0x019B], [0x019E, 0x019E], [0x01A1, 0x01A1], [0x01A3, 0x01A3], [0x01A5, 0x01A5], [0x01A8, 0x01A8], [0x01AA, 0x01AB], [0x01AD, 0x01AD], [0x01B0, 0x01B0], [0x01B4, 0x01B4], [0x01B6, 0x01B6], [0x01B9, 0x01BA], [0x01BD, 0x01BF], [0x01C6, 0x01C6], [0x01C9, 0x01C9], [0x01CC, 0x01CC], [0x01CE, 0x01CE], [0x01D0, 0x01D0], [0x01D2, 0x01D2], [0x01D4, 0x01D4], [0x01D6, 0x01D6], [0x01D8, 0x01D8], [0x01DA, 0x01DA], [0x01DC, 0x01DD], [0x01DF, 0x01DF], [0x01E1, 0x01E1], [0x01E3, 0x01E3], [0x01E5, 0x01E5], [0x01E7, 0x01E7], [0x01E9, 0x01E9], [0x01EB, 0x01EB], [0x01ED, 0x01ED], [0x01EF, 0x01F0], [0x01F3, 0x01F3], [0x01F5, 0x01F5], [0x01F9, 0x01F9], [0x01FB, 0x01FB], [0x01FD, 0x01FD], [0x01FF, 0x01FF], [0x0201, 0x0201], [0x0203, 0x0203], [0x0205, 0x0205], [0x0207, 0x0207], [0x0209, 0x0209], [0x020B, 0x020B], [0x020D, 0x020D], [0x020F, 0x020F], [0x0211, 0x0211], [0x0213, 0x0213], [0x0215, 0x0215], [0x0217, 0x0217], [0x0219, 0x0219], [0x021B, 0x021B], [0x021D, 0x021D], [0x021F, 0x021F], [0x0221, 0x0221], [0x0223, 0x0223], [0x0225, 0x0225], [0x0227, 0x0227], [0x0229, 0x0229], [0x022B, 0x022B], [0x022D, 0x022D], [0x022F, 0x022F], [0x0231, 0x0231], [0x0233, 0x0239], [0x023C, 0x023C], [0x023F, 0x0240], [0x0242, 0x0242], [0x0247, 0x0247], [0x0249, 0x0249], [0x024B, 0x024B], [0x024D, 0x024D], [0x024F, 0x0293], [0x0295, 0x02AF], [0x037B, 0x037D], [0x0390, 0x0390], [0x03AC, 0x03CE], [0x03D0, 0x03D1], [0x03D5, 0x03D7], [0x03D9, 0x03D9], [0x03DB, 0x03DB], [0x03DD, 0x03DD], [0x03DF, 0x03DF], [0x03E1, 0x03E1], [0x03E3, 0x03E3], [0x03E5, 0x03E5], [0x03E7, 0x03E7], [0x03E9, 0x03E9], [0x03EB, 0x03EB], [0x03ED, 0x03ED], [0x03EF, 0x03F3], [0x03F5, 0x03F5], [0x03F8, 0x03F8], [0x03FB, 0x03FC], [0x0430, 0x045F], [0x0461, 0x0461], [0x0463, 0x0463], [0x0465, 0x0465], [0x0467, 0x0467], [0x0469, 0x0469], [0x046B, 0x046B], [0x046D, 0x046D], [0x046F, 0x046F], [0x0471, 0x0471], [0x0473, 0x0473], [0x0475, 0x0475], [0x0477, 0x0477], [0x0479, 0x0479], [0x047B, 0x047B], [0x047D, 0x047D], [0x047F, 0x047F], [0x0481, 0x0481], [0x048B, 0x048B], [0x048D, 0x048D], [0x048F, 0x048F], [0x0491, 0x0491], [0x0493, 0x0493], [0x0495, 0x0495], [0x0497, 0x0497], [0x0499, 0x0499], [0x049B, 0x049B], [0x049D, 0x049D], [0x049F, 0x049F], [0x04A1, 0x04A1], [0x04A3, 0x04A3], [0x04A5, 0x04A5], [0x04A7, 0x04A7], [0x04A9, 0x04A9], [0x04AB, 0x04AB], [0x04AD, 0x04AD], [0x04AF, 0x04AF], [0x04B1, 0x04B1], [0x04B3, 0x04B3], [0x04B5, 0x04B5], [0x04B7, 0x04B7], [0x04B9, 0x04B9], [0x04BB, 0x04BB], [0x04BD, 0x04BD], [0x04BF, 0x04BF], [0x04C2, 0x04C2], [0x04C4, 0x04C4], [0x04C6, 0x04C6], [0x04C8, 0x04C8], [0x04CA, 0x04CA], [0x04CC, 0x04CC], [0x04CE, 0x04CF], [0x04D1, 0x04D1], [0x04D3, 0x04D3], [0x04D5, 0x04D5], [0x04D7, 0x04D7], [0x04D9, 0x04D9], [0x04DB, 0x04DB], [0x04DD, 0x04DD], [0x04DF, 0x04DF], [0x04E1, 0x04E1], [0x04E3, 0x04E3], [0x04E5, 0x04E5], [0x04E7, 0x04E7], [0x04E9, 0x04E9], [0x04EB, 0x04EB], [0x04ED, 0x04ED], [0x04EF, 0x04EF], [0x04F1, 0x04F1], [0x04F3, 0x04F3], [0x04F5, 0x04F5], [0x04F7, 0x04F7], [0x04F9, 0x04F9], [0x04FB, 0x04FB], [0x04FD, 0x04FD], [0x04FF, 0x04FF], [0x0501, 0x0501], [0x0503, 0x0503], [0x0505, 0x0505], [0x0507, 0x0507], [0x0509, 0x0509], [0x050B, 0x050B], [0x050D, 0x050D], [0x050F, 0x050F], [0x0511, 0x0511], [0x0513, 0x0513], [0x0561, 0x0587], [0x1D00, 0x1D2B], [0x1D62, 0x1D77], [0x1D79, 0x1D9A], [0x1E01, 0x1E01], [0x1E03, 0x1E03], [0x1E05, 0x1E05], [0x1E07, 0x1E07], [0x1E09, 0x1E09], [0x1E0B, 0x1E0B], [0x1E0D, 0x1E0D], [0x1E0F, 0x1E0F], [0x1E11, 0x1E11], [0x1E13, 0x1E13], [0x1E15, 0x1E15], [0x1E17, 0x1E17], [0x1E19, 0x1E19], [0x1E1B, 0x1E1B], [0x1E1D, 0x1E1D], [0x1E1F, 0x1E1F], [0x1E21, 0x1E21], [0x1E23, 0x1E23], [0x1E25, 0x1E25], [0x1E27, 0x1E27], [0x1E29, 0x1E29], [0x1E2B, 0x1E2B], [0x1E2D, 0x1E2D], [0x1E2F, 0x1E2F], [0x1E31, 0x1E31], [0x1E33, 0x1E33], [0x1E35, 0x1E35], [0x1E37, 0x1E37], [0x1E39, 0x1E39], [0x1E3B, 0x1E3B], [0x1E3D, 0x1E3D], [0x1E3F, 0x1E3F], [0x1E41, 0x1E41], [0x1E43, 0x1E43], [0x1E45, 0x1E45], [0x1E47, 0x1E47], [0x1E49, 0x1E49], [0x1E4B, 0x1E4B], [0x1E4D, 0x1E4D], [0x1E4F, 0x1E4F], [0x1E51, 0x1E51], [0x1E53, 0x1E53], [0x1E55, 0x1E55], [0x1E57, 0x1E57], [0x1E59, 0x1E59], [0x1E5B, 0x1E5B], [0x1E5D, 0x1E5D], [0x1E5F, 0x1E5F], [0x1E61, 0x1E61], [0x1E63, 0x1E63], [0x1E65, 0x1E65], [0x1E67, 0x1E67], [0x1E69, 0x1E69], [0x1E6B, 0x1E6B], [0x1E6D, 0x1E6D], [0x1E6F, 0x1E6F], [0x1E71, 0x1E71], [0x1E73, 0x1E73], [0x1E75, 0x1E75], [0x1E77, 0x1E77], [0x1E79, 0x1E79], [0x1E7B, 0x1E7B], [0x1E7D, 0x1E7D], [0x1E7F, 0x1E7F], [0x1E81, 0x1E81], [0x1E83, 0x1E83], [0x1E85, 0x1E85], [0x1E87, 0x1E87], [0x1E89, 0x1E89], [0x1E8B, 0x1E8B], [0x1E8D, 0x1E8D], [0x1E8F, 0x1E8F], [0x1E91, 0x1E91], [0x1E93, 0x1E93], [0x1E95, 0x1E9B], [0x1EA1, 0x1EA1], [0x1EA3, 0x1EA3], [0x1EA5, 0x1EA5], [0x1EA7, 0x1EA7], [0x1EA9, 0x1EA9], [0x1EAB, 0x1EAB], [0x1EAD, 0x1EAD], [0x1EAF, 0x1EAF], [0x1EB1, 0x1EB1], [0x1EB3, 0x1EB3], [0x1EB5, 0x1EB5], [0x1EB7, 0x1EB7], [0x1EB9, 0x1EB9], [0x1EBB, 0x1EBB], [0x1EBD, 0x1EBD], [0x1EBF, 0x1EBF], [0x1EC1, 0x1EC1], [0x1EC3, 0x1EC3], [0x1EC5, 0x1EC5], [0x1EC7, 0x1EC7], [0x1EC9, 0x1EC9], [0x1ECB, 0x1ECB], [0x1ECD, 0x1ECD], [0x1ECF, 0x1ECF], [0x1ED1, 0x1ED1], [0x1ED3, 0x1ED3], [0x1ED5, 0x1ED5], [0x1ED7, 0x1ED7], [0x1ED9, 0x1ED9], [0x1EDB, 0x1EDB], [0x1EDD, 0x1EDD], [0x1EDF, 0x1EDF], [0x1EE1, 0x1EE1], [0x1EE3, 0x1EE3], [0x1EE5, 0x1EE5], [0x1EE7, 0x1EE7], [0x1EE9, 0x1EE9], [0x1EEB, 0x1EEB], [0x1EED, 0x1EED], [0x1EEF, 0x1EEF], [0x1EF1, 0x1EF1], [0x1EF3, 0x1EF3], [0x1EF5, 0x1EF5], [0x1EF7, 0x1EF7], [0x1EF9, 0x1EF9], [0x1F00, 0x1F07], [0x1F10, 0x1F15], [0x1F20, 0x1F27], [0x1F30, 0x1F37], [0x1F40, 0x1F45], [0x1F50, 0x1F57], [0x1F60, 0x1F67], [0x1F70, 0x1F7D], [0x1F80, 0x1F87], [0x1F90, 0x1F97], [0x1FA0, 0x1FA7], [0x1FB0, 0x1FB4], [0x1FB6, 0x1FB7], [0x1FBE, 0x1FBE], [0x1FC2, 0x1FC4], [0x1FC6, 0x1FC7], [0x1FD0, 0x1FD3], [0x1FD6, 0x1FD7], [0x1FE0, 0x1FE7], [0x1FF2, 0x1FF4], [0x1FF6, 0x1FF7], [0x2071, 0x2071], [0x207F, 0x207F], [0x210A, 0x210A], [0x210E, 0x210F], [0x2113, 0x2113], [0x212F, 0x212F], [0x2134, 0x2134], [0x2139, 0x2139], [0x213C, 0x213D], [0x2146, 0x2149], [0x214E, 0x214E], [0x2184, 0x2184], [0x2C30, 0x2C5E], [0x2C61, 0x2C61], [0x2C65, 0x2C66], [0x2C68, 0x2C68], [0x2C6A, 0x2C6A], [0x2C6C, 0x2C6C], [0x2C74, 0x2C74], [0x2C76, 0x2C77], [0x2C81, 0x2C81], [0x2C83, 0x2C83], [0x2C85, 0x2C85], [0x2C87, 0x2C87], [0x2C89, 0x2C89], [0x2C8B, 0x2C8B], [0x2C8D, 0x2C8D], [0x2C8F, 0x2C8F], [0x2C91, 0x2C91], [0x2C93, 0x2C93], [0x2C95, 0x2C95], [0x2C97, 0x2C97], [0x2C99, 0x2C99], [0x2C9B, 0x2C9B], [0x2C9D, 0x2C9D], [0x2C9F, 0x2C9F], [0x2CA1, 0x2CA1], [0x2CA3, 0x2CA3], [0x2CA5, 0x2CA5], [0x2CA7, 0x2CA7], [0x2CA9, 0x2CA9], [0x2CAB, 0x2CAB], [0x2CAD, 0x2CAD], [0x2CAF, 0x2CAF], [0x2CB1, 0x2CB1], [0x2CB3, 0x2CB3], [0x2CB5, 0x2CB5], [0x2CB7, 0x2CB7], [0x2CB9, 0x2CB9], [0x2CBB, 0x2CBB], [0x2CBD, 0x2CBD], [0x2CBF, 0x2CBF], [0x2CC1, 0x2CC1], [0x2CC3, 0x2CC3], [0x2CC5, 0x2CC5], [0x2CC7, 0x2CC7], [0x2CC9, 0x2CC9], [0x2CCB, 0x2CCB], [0x2CCD, 0x2CCD], [0x2CCF, 0x2CCF], [0x2CD1, 0x2CD1], [0x2CD3, 0x2CD3], [0x2CD5, 0x2CD5], [0x2CD7, 0x2CD7], [0x2CD9, 0x2CD9], [0x2CDB, 0x2CDB], [0x2CDD, 0x2CDD], [0x2CDF, 0x2CDF], [0x2CE1, 0x2CE1], [0x2CE3, 0x2CE4], [0x2D00, 0x2D25], [0xFB00, 0xFB06], [0xFB13, 0xFB17], [0xFF41, 0xFF5A]]; -Lt = [[0x01C5, 0x01C5], [0x01C8, 0x01C8], [0x01CB, 0x01CB], [0x01F2, 0x01F2], [0x1F88, 0x1F8F], [0x1F98, 0x1F9F], [0x1FA8, 0x1FAF], [0x1FBC, 0x1FBC], [0x1FCC, 0x1FCC], [0x1FFC, 0x1FFC]]; -Lm = [[0x02B0, 0x02C1], [0x02C6, 0x02D1], [0x02E0, 0x02E4], [0x02EE, 0x02EE], [0x037A, 0x037A], [0x0559, 0x0559], [0x0640, 0x0640], [0x06E5, 0x06E6], [0x07F4, 0x07F5], [0x07FA, 0x07FA], [0x0E46, 0x0E46], [0x0EC6, 0x0EC6], [0x10FC, 0x10FC], [0x17D7, 0x17D7], [0x1843, 0x1843], [0x1D2C, 0x1D61], [0x1D78, 0x1D78], [0x1D9B, 0x1DBF], [0x2090, 0x2094], [0x2D6F, 0x2D6F], [0x3005, 0x3005], [0x3031, 0x3035], [0x303B, 0x303B], [0x309D, 0x309E], [0x30FC, 0x30FE], [0xA015, 0xA015], [0xA717, 0xA71A], [0xFF70, 0xFF70], [0xFF9E, 0xFF9F]]; -Lo = [[0x01BB, 0x01BB], [0x01C0, 0x01C3], [0x0294, 0x0294], [0x05D0, 0x05EA], [0x05F0, 0x05F2], [0x0621, 0x063A], [0x0641, 0x064A], [0x066E, 0x066F], [0x0671, 0x06D3], [0x06D5, 0x06D5], [0x06EE, 0x06EF], [0x06FA, 0x06FC], [0x06FF, 0x06FF], [0x0710, 0x0710], [0x0712, 0x072F], [0x074D, 0x076D], [0x0780, 0x07A5], [0x07B1, 0x07B1], [0x07CA, 0x07EA], [0x0904, 0x0939], [0x093D, 0x093D], [0x0950, 0x0950], [0x0958, 0x0961], [0x097B, 0x097F], [0x0985, 0x098C], [0x098F, 0x0990], [0x0993, 0x09A8], [0x09AA, 0x09B0], [0x09B2, 0x09B2], [0x09B6, 0x09B9], [0x09BD, 0x09BD], [0x09CE, 0x09CE], [0x09DC, 0x09DD], [0x09DF, 0x09E1], [0x09F0, 0x09F1], [0x0A05, 0x0A0A], [0x0A0F, 0x0A10], [0x0A13, 0x0A28], [0x0A2A, 0x0A30], [0x0A32, 0x0A33], [0x0A35, 0x0A36], [0x0A38, 0x0A39], [0x0A59, 0x0A5C], [0x0A5E, 0x0A5E], [0x0A72, 0x0A74], [0x0A85, 0x0A8D], [0x0A8F, 0x0A91], [0x0A93, 0x0AA8], [0x0AAA, 0x0AB0], [0x0AB2, 0x0AB3], [0x0AB5, 0x0AB9], [0x0ABD, 0x0ABD], [0x0AD0, 0x0AD0], [0x0AE0, 0x0AE1], [0x0B05, 0x0B0C], [0x0B0F, 0x0B10], [0x0B13, 0x0B28], [0x0B2A, 0x0B30], [0x0B32, 0x0B33], [0x0B35, 0x0B39], [0x0B3D, 0x0B3D], [0x0B5C, 0x0B5D], [0x0B5F, 0x0B61], [0x0B71, 0x0B71], [0x0B83, 0x0B83], [0x0B85, 0x0B8A], [0x0B8E, 0x0B90], [0x0B92, 0x0B95], [0x0B99, 0x0B9A], [0x0B9C, 0x0B9C], [0x0B9E, 0x0B9F], [0x0BA3, 0x0BA4], [0x0BA8, 0x0BAA], [0x0BAE, 0x0BB9], [0x0C05, 0x0C0C], [0x0C0E, 0x0C10], [0x0C12, 0x0C28], [0x0C2A, 0x0C33], [0x0C35, 0x0C39], [0x0C60, 0x0C61], [0x0C85, 0x0C8C], [0x0C8E, 0x0C90], [0x0C92, 0x0CA8], [0x0CAA, 0x0CB3], [0x0CB5, 0x0CB9], [0x0CBD, 0x0CBD], [0x0CDE, 0x0CDE], [0x0CE0, 0x0CE1], [0x0D05, 0x0D0C], [0x0D0E, 0x0D10], [0x0D12, 0x0D28], [0x0D2A, 0x0D39], [0x0D60, 0x0D61], [0x0D85, 0x0D96], [0x0D9A, 0x0DB1], [0x0DB3, 0x0DBB], [0x0DBD, 0x0DBD], [0x0DC0, 0x0DC6], [0x0E01, 0x0E30], [0x0E32, 0x0E33], [0x0E40, 0x0E45], [0x0E81, 0x0E82], [0x0E84, 0x0E84], [0x0E87, 0x0E88], [0x0E8A, 0x0E8A], [0x0E8D, 0x0E8D], [0x0E94, 0x0E97], [0x0E99, 0x0E9F], [0x0EA1, 0x0EA3], [0x0EA5, 0x0EA5], [0x0EA7, 0x0EA7], [0x0EAA, 0x0EAB], [0x0EAD, 0x0EB0], [0x0EB2, 0x0EB3], [0x0EBD, 0x0EBD], [0x0EC0, 0x0EC4], [0x0EDC, 0x0EDD], [0x0F00, 0x0F00], [0x0F40, 0x0F47], [0x0F49, 0x0F6A], [0x0F88, 0x0F8B], [0x1000, 0x1021], [0x1023, 0x1027], [0x1029, 0x102A], [0x1050, 0x1055], [0x10D0, 0x10FA], [0x1100, 0x1159], [0x115F, 0x11A2], [0x11A8, 0x11F9], [0x1200, 0x1248], [0x124A, 0x124D], [0x1250, 0x1256], [0x1258, 0x1258], [0x125A, 0x125D], [0x1260, 0x1288], [0x128A, 0x128D], [0x1290, 0x12B0], [0x12B2, 0x12B5], [0x12B8, 0x12BE], [0x12C0, 0x12C0], [0x12C2, 0x12C5], [0x12C8, 0x12D6], [0x12D8, 0x1310], [0x1312, 0x1315], [0x1318, 0x135A], [0x1380, 0x138F], [0x13A0, 0x13F4], [0x1401, 0x166C], [0x166F, 0x1676], [0x1681, 0x169A], [0x16A0, 0x16EA], [0x1700, 0x170C], [0x170E, 0x1711], [0x1720, 0x1731], [0x1740, 0x1751], [0x1760, 0x176C], [0x176E, 0x1770], [0x1780, 0x17B3], [0x17DC, 0x17DC], [0x1820, 0x1842], [0x1844, 0x1877], [0x1880, 0x18A8], [0x1900, 0x191C], [0x1950, 0x196D], [0x1970, 0x1974], [0x1980, 0x19A9], [0x19C1, 0x19C7], [0x1A00, 0x1A16], [0x1B05, 0x1B33], [0x1B45, 0x1B4B], [0x2135, 0x2138], [0x2D30, 0x2D65], [0x2D80, 0x2D96], [0x2DA0, 0x2DA6], [0x2DA8, 0x2DAE], [0x2DB0, 0x2DB6], [0x2DB8, 0x2DBE], [0x2DC0, 0x2DC6], [0x2DC8, 0x2DCE], [0x2DD0, 0x2DD6], [0x2DD8, 0x2DDE], [0x3006, 0x3006], [0x303C, 0x303C], [0x3041, 0x3096], [0x309F, 0x309F], [0x30A1, 0x30FA], [0x30FF, 0x30FF], [0x3105, 0x312C], [0x3131, 0x318E], [0x31A0, 0x31B7], [0x31F0, 0x31FF], [0x3400, 0x4DB5], [0x4E00, 0x9FBB], [0xA000, 0xA014], [0xA016, 0xA48C], [0xA800, 0xA801], [0xA803, 0xA805], [0xA807, 0xA80A], [0xA80C, 0xA822], [0xA840, 0xA873], [0xAC00, 0xD7A3], [0xF900, 0xFA2D], [0xFA30, 0xFA6A], [0xFA70, 0xFAD9], [0xFB1D, 0xFB1D], [0xFB1F, 0xFB28], [0xFB2A, 0xFB36], [0xFB38, 0xFB3C], [0xFB3E, 0xFB3E], [0xFB40, 0xFB41], [0xFB43, 0xFB44], [0xFB46, 0xFBB1], [0xFBD3, 0xFD3D], [0xFD50, 0xFD8F], [0xFD92, 0xFDC7], [0xFDF0, 0xFDFB], [0xFE70, 0xFE74], [0xFE76, 0xFEFC], [0xFF66, 0xFF6F], [0xFF71, 0xFF9D], [0xFFA0, 0xFFBE], [0xFFC2, 0xFFC7], [0xFFCA, 0xFFCF], [0xFFD2, 0xFFD7], [0xFFDA, 0xFFDC]]; -Nl = [[0x16EE, 0x16F0], [0x2160, 0x2182], [0x3007, 0x3007], [0x3021, 0x3029], [0x3038, 0x303A]]; -Mn = [[0x0300, 0x036F], [0x0483, 0x0486], [0x0591, 0x05BD], [0x05BF, 0x05BF], [0x05C1, 0x05C2], [0x05C4, 0x05C5], [0x05C7, 0x05C7], [0x0610, 0x0615], [0x064B, 0x065E], [0x0670, 0x0670], [0x06D6, 0x06DC], [0x06DF, 0x06E4], [0x06E7, 0x06E8], [0x06EA, 0x06ED], [0x0711, 0x0711], [0x0730, 0x074A], [0x07A6, 0x07B0], [0x07EB, 0x07F3], [0x0901, 0x0902], [0x093C, 0x093C], [0x0941, 0x0948], [0x094D, 0x094D], [0x0951, 0x0954], [0x0962, 0x0963], [0x0981, 0x0981], [0x09BC, 0x09BC], [0x09C1, 0x09C4], [0x09CD, 0x09CD], [0x09E2, 0x09E3], [0x0A01, 0x0A02], [0x0A3C, 0x0A3C], [0x0A41, 0x0A42], [0x0A47, 0x0A48], [0x0A4B, 0x0A4D], [0x0A70, 0x0A71], [0x0A81, 0x0A82], [0x0ABC, 0x0ABC], [0x0AC1, 0x0AC5], [0x0AC7, 0x0AC8], [0x0ACD, 0x0ACD], [0x0AE2, 0x0AE3], [0x0B01, 0x0B01], [0x0B3C, 0x0B3C], [0x0B3F, 0x0B3F], [0x0B41, 0x0B43], [0x0B4D, 0x0B4D], [0x0B56, 0x0B56], [0x0B82, 0x0B82], [0x0BC0, 0x0BC0], [0x0BCD, 0x0BCD], [0x0C3E, 0x0C40], [0x0C46, 0x0C48], [0x0C4A, 0x0C4D], [0x0C55, 0x0C56], [0x0CBC, 0x0CBC], [0x0CBF, 0x0CBF], [0x0CC6, 0x0CC6], [0x0CCC, 0x0CCD], [0x0CE2, 0x0CE3], [0x0D41, 0x0D43], [0x0D4D, 0x0D4D], [0x0DCA, 0x0DCA], [0x0DD2, 0x0DD4], [0x0DD6, 0x0DD6], [0x0E31, 0x0E31], [0x0E34, 0x0E3A], [0x0E47, 0x0E4E], [0x0EB1, 0x0EB1], [0x0EB4, 0x0EB9], [0x0EBB, 0x0EBC], [0x0EC8, 0x0ECD], [0x0F18, 0x0F19], [0x0F35, 0x0F35], [0x0F37, 0x0F37], [0x0F39, 0x0F39], [0x0F71, 0x0F7E], [0x0F80, 0x0F84], [0x0F86, 0x0F87], [0x0F90, 0x0F97], [0x0F99, 0x0FBC], [0x0FC6, 0x0FC6], [0x102D, 0x1030], [0x1032, 0x1032], [0x1036, 0x1037], [0x1039, 0x1039], [0x1058, 0x1059], [0x135F, 0x135F], [0x1712, 0x1714], [0x1732, 0x1734], [0x1752, 0x1753], [0x1772, 0x1773], [0x17B7, 0x17BD], [0x17C6, 0x17C6], [0x17C9, 0x17D3], [0x17DD, 0x17DD], [0x180B, 0x180D], [0x18A9, 0x18A9], [0x1920, 0x1922], [0x1927, 0x1928], [0x1932, 0x1932], [0x1939, 0x193B], [0x1A17, 0x1A18], [0x1B00, 0x1B03], [0x1B34, 0x1B34], [0x1B36, 0x1B3A], [0x1B3C, 0x1B3C], [0x1B42, 0x1B42], [0x1B6B, 0x1B73], [0x1DC0, 0x1DCA], [0x1DFE, 0x1DFF], [0x20D0, 0x20DC], [0x20E1, 0x20E1], [0x20E5, 0x20EF], [0x302A, 0x302F], [0x3099, 0x309A], [0xA806, 0xA806], [0xA80B, 0xA80B], [0xA825, 0xA826], [0xFB1E, 0xFB1E], [0xFE00, 0xFE0F], [0xFE20, 0xFE23]]; -Mc = [[0x0903, 0x0903], [0x093E, 0x0940], [0x0949, 0x094C], [0x0982, 0x0983], [0x09BE, 0x09C0], [0x09C7, 0x09C8], [0x09CB, 0x09CC], [0x09D7, 0x09D7], [0x0A03, 0x0A03], [0x0A3E, 0x0A40], [0x0A83, 0x0A83], [0x0ABE, 0x0AC0], [0x0AC9, 0x0AC9], [0x0ACB, 0x0ACC], [0x0B02, 0x0B03], [0x0B3E, 0x0B3E], [0x0B40, 0x0B40], [0x0B47, 0x0B48], [0x0B4B, 0x0B4C], [0x0B57, 0x0B57], [0x0BBE, 0x0BBF], [0x0BC1, 0x0BC2], [0x0BC6, 0x0BC8], [0x0BCA, 0x0BCC], [0x0BD7, 0x0BD7], [0x0C01, 0x0C03], [0x0C41, 0x0C44], [0x0C82, 0x0C83], [0x0CBE, 0x0CBE], [0x0CC0, 0x0CC4], [0x0CC7, 0x0CC8], [0x0CCA, 0x0CCB], [0x0CD5, 0x0CD6], [0x0D02, 0x0D03], [0x0D3E, 0x0D40], [0x0D46, 0x0D48], [0x0D4A, 0x0D4C], [0x0D57, 0x0D57], [0x0D82, 0x0D83], [0x0DCF, 0x0DD1], [0x0DD8, 0x0DDF], [0x0DF2, 0x0DF3], [0x0F3E, 0x0F3F], [0x0F7F, 0x0F7F], [0x102C, 0x102C], [0x1031, 0x1031], [0x1038, 0x1038], [0x1056, 0x1057], [0x17B6, 0x17B6], [0x17BE, 0x17C5], [0x17C7, 0x17C8], [0x1923, 0x1926], [0x1929, 0x192B], [0x1930, 0x1931], [0x1933, 0x1938], [0x19B0, 0x19C0], [0x19C8, 0x19C9], [0x1A19, 0x1A1B], [0x1B04, 0x1B04], [0x1B35, 0x1B35], [0x1B3B, 0x1B3B], [0x1B3D, 0x1B41], [0x1B43, 0x1B44], [0xA802, 0xA802], [0xA823, 0xA824], [0xA827, 0xA827]]; -Nd = [[0x0030, 0x0039], [0x0660, 0x0669], [0x06F0, 0x06F9], [0x07C0, 0x07C9], [0x0966, 0x096F], [0x09E6, 0x09EF], [0x0A66, 0x0A6F], [0x0AE6, 0x0AEF], [0x0B66, 0x0B6F], [0x0BE6, 0x0BEF], [0x0C66, 0x0C6F], [0x0CE6, 0x0CEF], [0x0D66, 0x0D6F], [0x0E50, 0x0E59], [0x0ED0, 0x0ED9], [0x0F20, 0x0F29], [0x1040, 0x1049], [0x17E0, 0x17E9], [0x1810, 0x1819], [0x1946, 0x194F], [0x19D0, 0x19D9], [0x1B50, 0x1B59], [0xFF10, 0xFF19]]; -Pc = [[0x005F, 0x005F], [0x203F, 0x2040], [0x2054, 0x2054], [0xFE33, 0xFE34], [0xFE4D, 0xFE4F], [0xFF3F, 0xFF3F]]; - -UnicodeLetterLu = []; -UnicodeLetterLl = []; -UnicodeLetterLt = []; -UnicodeLetterLm = []; -UnicodeLetterLo = []; -UnicodeLetterNl = []; -UnicodeLetterMn = []; -UnicodeLetterMc = []; -UnicodeLetterNd = []; -UnicodeLetterPc = []; - -for (indexI = 0; indexI < Lu.length; indexI++) { - for (indexJ = Lu[indexI][0]; indexJ <= Lu[indexI][1]; indexJ++) { - UnicodeLetterLu[indexJ] = true; - } -} -for (indexI = 0; indexI < Ll.length; indexI++) { - for (indexJ = Ll[indexI][0]; indexJ <= Ll[indexI][1]; indexJ++) { - UnicodeLetterLl[indexJ] = true; - } -} -for (indexI = 0; indexI < Lt.length; indexI++) { - for (indexJ = Lt[indexI][0]; indexJ <= Lt[indexI][1]; indexJ++) { - UnicodeLetterLt[indexJ] = true; - } -} -for (indexI = 0; indexI < Lm.length; indexI++) { - for (indexJ = Lm[indexI][0]; indexJ <= Lm[indexI][1]; indexJ++) { - UnicodeLetterLm[indexJ] = true; - } -} -for (indexI = 0; indexI < Lo.length; indexI++) { - for (indexJ = Lo[indexI][0]; indexJ <= Lo[indexI][1]; indexJ++) { - UnicodeLetterLo[indexJ] = true; - } -} -for (indexI = 0; indexI < Nl.length; indexI++) { - for (indexJ = Nl[indexI][0]; indexJ <= Nl[indexI][1]; indexJ++) { - UnicodeLetterNl[indexJ] = true; - } -} -for (indexI = 0; indexI < Mn.length; indexI++) { - for (indexJ = Mn[indexI][0]; indexJ <= Mn[indexI][1]; indexJ++) { - UnicodeLetterMn[indexJ] = true; - } -} -for (indexI = 0; indexI < Mc.length; indexI++) { - for (indexJ = Mc[indexI][0]; indexJ <= Mc[indexI][1]; indexJ++) { - UnicodeLetterMc[indexJ] = true; - } -} -for (indexI = 0; indexI < Nd.length; indexI++) { - for (indexJ = Nd[indexI][0]; indexJ <= Nd[indexI][1]; indexJ++) { - UnicodeLetterNd[indexJ] = true; - } -} -for (indexI = 0; indexI < Pc.length; indexI++) { - for (indexJ = Pc[indexI][0]; indexJ <= Pc[indexI][1]; indexJ++) { - UnicodeLetterPc[indexJ] = true; - } -} - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; -for (index = 0; index <= 65535; index++) { - if ((UnicodeLetterLu[index] === undefined) && (UnicodeLetterLl[index] === undefined) && (UnicodeLetterLt[index] === undefined) && (UnicodeLetterLm[index] === undefined) && (UnicodeLetterLo[index] === undefined) && (UnicodeLetterNl[index] === undefined) && (UnicodeLetterMn[index] === undefined) && (UnicodeLetterMc[index] === undefined) && (UnicodeLetterNd[index] === undefined) && (UnicodeLetterPc[index] === undefined) && (index !== 0x0024) && (index !== 0x005F)) { - try { - var hex = decimalToHexString(index); - var identifier = "$\\u" + hex + "1"; - eval(identifier + " = 1"); - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; - } catch (e) { - } - count++; - } -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_500/S7.6_A5.3_T2.js b/tests/ES3/Unicode/Unicode_500/S7.6_A5.3_T2.js deleted file mode 100644 index 8c0e9e1d9..000000000 --- a/tests/ES3/Unicode/Unicode_500/S7.6_A5.3_T2.js +++ /dev/null @@ -1,155 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A5.3_T2; - * @section: 7.6, 6; - * @assertion: If a UnicodeEscapeSequence put a character into an identifier that would otherwise be illegal, throw SyntaxError; - * @description: Complex test with eval; -*/ - -//CHECK -Lu = [[0x0041, 0x005A], [0x00C0, 0x00D6], [0x00D8, 0x00DE], [0x0100, 0x0100], [0x0102, 0x0102], [0x0104, 0x0104], [0x0106, 0x0106], [0x0108, 0x0108], [0x010A, 0x010A], [0x010C, 0x010C], [0x010E, 0x010E], [0x0110, 0x0110], [0x0112, 0x0112], [0x0114, 0x0114], [0x0116, 0x0116], [0x0118, 0x0118], [0x011A, 0x011A], [0x011C, 0x011C], [0x011E, 0x011E], [0x0120, 0x0120], [0x0122, 0x0122], [0x0124, 0x0124], [0x0126, 0x0126], [0x0128, 0x0128], [0x012A, 0x012A], [0x012C, 0x012C], [0x012E, 0x012E], [0x0130, 0x0130], [0x0132, 0x0132], [0x0134, 0x0134], [0x0136, 0x0136], [0x0139, 0x0139], [0x013B, 0x013B], [0x013D, 0x013D], [0x013F, 0x013F], [0x0141, 0x0141], [0x0143, 0x0143], [0x0145, 0x0145], [0x0147, 0x0147], [0x014A, 0x014A], [0x014C, 0x014C], [0x014E, 0x014E], [0x0150, 0x0150], [0x0152, 0x0152], [0x0154, 0x0154], [0x0156, 0x0156], [0x0158, 0x0158], [0x015A, 0x015A], [0x015C, 0x015C], [0x015E, 0x015E], [0x0160, 0x0160], [0x0162, 0x0162], [0x0164, 0x0164], [0x0166, 0x0166], [0x0168, 0x0168], [0x016A, 0x016A], [0x016C, 0x016C], [0x016E, 0x016E], [0x0170, 0x0170], [0x0172, 0x0172], [0x0174, 0x0174], [0x0176, 0x0176], [0x0178, 0x0179], [0x017B, 0x017B], [0x017D, 0x017D], [0x0181, 0x0182], [0x0184, 0x0184], [0x0186, 0x0187], [0x0189, 0x018B], [0x018E, 0x0191], [0x0193, 0x0194], [0x0196, 0x0198], [0x019C, 0x019D], [0x019F, 0x01A0], [0x01A2, 0x01A2], [0x01A4, 0x01A4], [0x01A6, 0x01A7], [0x01A9, 0x01A9], [0x01AC, 0x01AC], [0x01AE, 0x01AF], [0x01B1, 0x01B3], [0x01B5, 0x01B5], [0x01B7, 0x01B8], [0x01BC, 0x01BC], [0x01C4, 0x01C4], [0x01C7, 0x01C7], [0x01CA, 0x01CA], [0x01CD, 0x01CD], [0x01CF, 0x01CF], [0x01D1, 0x01D1], [0x01D3, 0x01D3], [0x01D5, 0x01D5], [0x01D7, 0x01D7], [0x01D9, 0x01D9], [0x01DB, 0x01DB], [0x01DE, 0x01DE], [0x01E0, 0x01E0], [0x01E2, 0x01E2], [0x01E4, 0x01E4], [0x01E6, 0x01E6], [0x01E8, 0x01E8], [0x01EA, 0x01EA], [0x01EC, 0x01EC], [0x01EE, 0x01EE], [0x01F1, 0x01F1], [0x01F4, 0x01F4], [0x01F6, 0x01F8], [0x01FA, 0x01FA], [0x01FC, 0x01FC], [0x01FE, 0x01FE], [0x0200, 0x0200], [0x0202, 0x0202], [0x0204, 0x0204], [0x0206, 0x0206], [0x0208, 0x0208], [0x020A, 0x020A], [0x020C, 0x020C], [0x020E, 0x020E], [0x0210, 0x0210], [0x0212, 0x0212], [0x0214, 0x0214], [0x0216, 0x0216], [0x0218, 0x0218], [0x021A, 0x021A], [0x021C, 0x021C], [0x021E, 0x021E], [0x0220, 0x0220], [0x0222, 0x0222], [0x0224, 0x0224], [0x0226, 0x0226], [0x0228, 0x0228], [0x022A, 0x022A], [0x022C, 0x022C], [0x022E, 0x022E], [0x0230, 0x0230], [0x0232, 0x0232], [0x023A, 0x023B], [0x023D, 0x023E], [0x0241, 0x0241], [0x0243, 0x0246], [0x0248, 0x0248], [0x024A, 0x024A], [0x024C, 0x024C], [0x024E, 0x024E], [0x0386, 0x0386], [0x0388, 0x038A], [0x038C, 0x038C], [0x038E, 0x038F], [0x0391, 0x03A1], [0x03A3, 0x03AB], [0x03D2, 0x03D4], [0x03D8, 0x03D8], [0x03DA, 0x03DA], [0x03DC, 0x03DC], [0x03DE, 0x03DE], [0x03E0, 0x03E0], [0x03E2, 0x03E2], [0x03E4, 0x03E4], [0x03E6, 0x03E6], [0x03E8, 0x03E8], [0x03EA, 0x03EA], [0x03EC, 0x03EC], [0x03EE, 0x03EE], [0x03F4, 0x03F4], [0x03F7, 0x03F7], [0x03F9, 0x03FA], [0x03FD, 0x042F], [0x0460, 0x0460], [0x0462, 0x0462], [0x0464, 0x0464], [0x0466, 0x0466], [0x0468, 0x0468], [0x046A, 0x046A], [0x046C, 0x046C], [0x046E, 0x046E], [0x0470, 0x0470], [0x0472, 0x0472], [0x0474, 0x0474], [0x0476, 0x0476], [0x0478, 0x0478], [0x047A, 0x047A], [0x047C, 0x047C], [0x047E, 0x047E], [0x0480, 0x0480], [0x048A, 0x048A], [0x048C, 0x048C], [0x048E, 0x048E], [0x0490, 0x0490], [0x0492, 0x0492], [0x0494, 0x0494], [0x0496, 0x0496], [0x0498, 0x0498], [0x049A, 0x049A], [0x049C, 0x049C], [0x049E, 0x049E], [0x04A0, 0x04A0], [0x04A2, 0x04A2], [0x04A4, 0x04A4], [0x04A6, 0x04A6], [0x04A8, 0x04A8], [0x04AA, 0x04AA], [0x04AC, 0x04AC], [0x04AE, 0x04AE], [0x04B0, 0x04B0], [0x04B2, 0x04B2], [0x04B4, 0x04B4], [0x04B6, 0x04B6], [0x04B8, 0x04B8], [0x04BA, 0x04BA], [0x04BC, 0x04BC], [0x04BE, 0x04BE], [0x04C0, 0x04C1], [0x04C3, 0x04C3], [0x04C5, 0x04C5], [0x04C7, 0x04C7], [0x04C9, 0x04C9], [0x04CB, 0x04CB], [0x04CD, 0x04CD], [0x04D0, 0x04D0], [0x04D2, 0x04D2], [0x04D4, 0x04D4], [0x04D6, 0x04D6], [0x04D8, 0x04D8], [0x04DA, 0x04DA], [0x04DC, 0x04DC], [0x04DE, 0x04DE], [0x04E0, 0x04E0], [0x04E2, 0x04E2], [0x04E4, 0x04E4], [0x04E6, 0x04E6], [0x04E8, 0x04E8], [0x04EA, 0x04EA], [0x04EC, 0x04EC], [0x04EE, 0x04EE], [0x04F0, 0x04F0], [0x04F2, 0x04F2], [0x04F4, 0x04F4], [0x04F6, 0x04F6], [0x04F8, 0x04F8], [0x04FA, 0x04FA], [0x04FC, 0x04FC], [0x04FE, 0x04FE], [0x0500, 0x0500], [0x0502, 0x0502], [0x0504, 0x0504], [0x0506, 0x0506], [0x0508, 0x0508], [0x050A, 0x050A], [0x050C, 0x050C], [0x050E, 0x050E], [0x0510, 0x0510], [0x0512, 0x0512], [0x0531, 0x0556], [0x10A0, 0x10C5], [0x1E00, 0x1E00], [0x1E02, 0x1E02], [0x1E04, 0x1E04], [0x1E06, 0x1E06], [0x1E08, 0x1E08], [0x1E0A, 0x1E0A], [0x1E0C, 0x1E0C], [0x1E0E, 0x1E0E], [0x1E10, 0x1E10], [0x1E12, 0x1E12], [0x1E14, 0x1E14], [0x1E16, 0x1E16], [0x1E18, 0x1E18], [0x1E1A, 0x1E1A], [0x1E1C, 0x1E1C], [0x1E1E, 0x1E1E], [0x1E20, 0x1E20], [0x1E22, 0x1E22], [0x1E24, 0x1E24], [0x1E26, 0x1E26], [0x1E28, 0x1E28], [0x1E2A, 0x1E2A], [0x1E2C, 0x1E2C], [0x1E2E, 0x1E2E], [0x1E30, 0x1E30], [0x1E32, 0x1E32], [0x1E34, 0x1E34], [0x1E36, 0x1E36], [0x1E38, 0x1E38], [0x1E3A, 0x1E3A], [0x1E3C, 0x1E3C], [0x1E3E, 0x1E3E], [0x1E40, 0x1E40], [0x1E42, 0x1E42], [0x1E44, 0x1E44], [0x1E46, 0x1E46], [0x1E48, 0x1E48], [0x1E4A, 0x1E4A], [0x1E4C, 0x1E4C], [0x1E4E, 0x1E4E], [0x1E50, 0x1E50], [0x1E52, 0x1E52], [0x1E54, 0x1E54], [0x1E56, 0x1E56], [0x1E58, 0x1E58], [0x1E5A, 0x1E5A], [0x1E5C, 0x1E5C], [0x1E5E, 0x1E5E], [0x1E60, 0x1E60], [0x1E62, 0x1E62], [0x1E64, 0x1E64], [0x1E66, 0x1E66], [0x1E68, 0x1E68], [0x1E6A, 0x1E6A], [0x1E6C, 0x1E6C], [0x1E6E, 0x1E6E], [0x1E70, 0x1E70], [0x1E72, 0x1E72], [0x1E74, 0x1E74], [0x1E76, 0x1E76], [0x1E78, 0x1E78], [0x1E7A, 0x1E7A], [0x1E7C, 0x1E7C], [0x1E7E, 0x1E7E], [0x1E80, 0x1E80], [0x1E82, 0x1E82], [0x1E84, 0x1E84], [0x1E86, 0x1E86], [0x1E88, 0x1E88], [0x1E8A, 0x1E8A], [0x1E8C, 0x1E8C], [0x1E8E, 0x1E8E], [0x1E90, 0x1E90], [0x1E92, 0x1E92], [0x1E94, 0x1E94], [0x1EA0, 0x1EA0], [0x1EA2, 0x1EA2], [0x1EA4, 0x1EA4], [0x1EA6, 0x1EA6], [0x1EA8, 0x1EA8], [0x1EAA, 0x1EAA], [0x1EAC, 0x1EAC], [0x1EAE, 0x1EAE], [0x1EB0, 0x1EB0], [0x1EB2, 0x1EB2], [0x1EB4, 0x1EB4], [0x1EB6, 0x1EB6], [0x1EB8, 0x1EB8], [0x1EBA, 0x1EBA], [0x1EBC, 0x1EBC], [0x1EBE, 0x1EBE], [0x1EC0, 0x1EC0], [0x1EC2, 0x1EC2], [0x1EC4, 0x1EC4], [0x1EC6, 0x1EC6], [0x1EC8, 0x1EC8], [0x1ECA, 0x1ECA], [0x1ECC, 0x1ECC], [0x1ECE, 0x1ECE], [0x1ED0, 0x1ED0], [0x1ED2, 0x1ED2], [0x1ED4, 0x1ED4], [0x1ED6, 0x1ED6], [0x1ED8, 0x1ED8], [0x1EDA, 0x1EDA], [0x1EDC, 0x1EDC], [0x1EDE, 0x1EDE], [0x1EE0, 0x1EE0], [0x1EE2, 0x1EE2], [0x1EE4, 0x1EE4], [0x1EE6, 0x1EE6], [0x1EE8, 0x1EE8], [0x1EEA, 0x1EEA], [0x1EEC, 0x1EEC], [0x1EEE, 0x1EEE], [0x1EF0, 0x1EF0], [0x1EF2, 0x1EF2], [0x1EF4, 0x1EF4], [0x1EF6, 0x1EF6], [0x1EF8, 0x1EF8], [0x1F08, 0x1F0F], [0x1F18, 0x1F1D], [0x1F28, 0x1F2F], [0x1F38, 0x1F3F], [0x1F48, 0x1F4D], [0x1F59, 0x1F59], [0x1F5B, 0x1F5B], [0x1F5D, 0x1F5D], [0x1F5F, 0x1F5F], [0x1F68, 0x1F6F], [0x1FB8, 0x1FBB], [0x1FC8, 0x1FCB], [0x1FD8, 0x1FDB], [0x1FE8, 0x1FEC], [0x1FF8, 0x1FFB], [0x2102, 0x2102], [0x2107, 0x2107], [0x210B, 0x210D], [0x2110, 0x2112], [0x2115, 0x2115], [0x2119, 0x211D], [0x2124, 0x2124], [0x2126, 0x2126], [0x2128, 0x2128], [0x212A, 0x212D], [0x2130, 0x2133], [0x213E, 0x213F], [0x2145, 0x2145], [0x2183, 0x2183], [0x2C00, 0x2C2E], [0x2C60, 0x2C60], [0x2C62, 0x2C64], [0x2C67, 0x2C67], [0x2C69, 0x2C69], [0x2C6B, 0x2C6B], [0x2C75, 0x2C75], [0x2C80, 0x2C80], [0x2C82, 0x2C82], [0x2C84, 0x2C84], [0x2C86, 0x2C86], [0x2C88, 0x2C88], [0x2C8A, 0x2C8A], [0x2C8C, 0x2C8C], [0x2C8E, 0x2C8E], [0x2C90, 0x2C90], [0x2C92, 0x2C92], [0x2C94, 0x2C94], [0x2C96, 0x2C96], [0x2C98, 0x2C98], [0x2C9A, 0x2C9A], [0x2C9C, 0x2C9C], [0x2C9E, 0x2C9E], [0x2CA0, 0x2CA0], [0x2CA2, 0x2CA2], [0x2CA4, 0x2CA4], [0x2CA6, 0x2CA6], [0x2CA8, 0x2CA8], [0x2CAA, 0x2CAA], [0x2CAC, 0x2CAC], [0x2CAE, 0x2CAE], [0x2CB0, 0x2CB0], [0x2CB2, 0x2CB2], [0x2CB4, 0x2CB4], [0x2CB6, 0x2CB6], [0x2CB8, 0x2CB8], [0x2CBA, 0x2CBA], [0x2CBC, 0x2CBC], [0x2CBE, 0x2CBE], [0x2CC0, 0x2CC0], [0x2CC2, 0x2CC2], [0x2CC4, 0x2CC4], [0x2CC6, 0x2CC6], [0x2CC8, 0x2CC8], [0x2CCA, 0x2CCA], [0x2CCC, 0x2CCC], [0x2CCE, 0x2CCE], [0x2CD0, 0x2CD0], [0x2CD2, 0x2CD2], [0x2CD4, 0x2CD4], [0x2CD6, 0x2CD6], [0x2CD8, 0x2CD8], [0x2CDA, 0x2CDA], [0x2CDC, 0x2CDC], [0x2CDE, 0x2CDE], [0x2CE0, 0x2CE0], [0x2CE2, 0x2CE2], [0xFF21, 0xFF3A]]; -Ll = [[0x0061, 0x007A], [0x00AA, 0x00AA], [0x00B5, 0x00B5], [0x00BA, 0x00BA], [0x00DF, 0x00F6], [0x00F8, 0x00FF], [0x0101, 0x0101], [0x0103, 0x0103], [0x0105, 0x0105], [0x0107, 0x0107], [0x0109, 0x0109], [0x010B, 0x010B], [0x010D, 0x010D], [0x010F, 0x010F], [0x0111, 0x0111], [0x0113, 0x0113], [0x0115, 0x0115], [0x0117, 0x0117], [0x0119, 0x0119], [0x011B, 0x011B], [0x011D, 0x011D], [0x011F, 0x011F], [0x0121, 0x0121], [0x0123, 0x0123], [0x0125, 0x0125], [0x0127, 0x0127], [0x0129, 0x0129], [0x012B, 0x012B], [0x012D, 0x012D], [0x012F, 0x012F], [0x0131, 0x0131], [0x0133, 0x0133], [0x0135, 0x0135], [0x0137, 0x0138], [0x013A, 0x013A], [0x013C, 0x013C], [0x013E, 0x013E], [0x0140, 0x0140], [0x0142, 0x0142], [0x0144, 0x0144], [0x0146, 0x0146], [0x0148, 0x0149], [0x014B, 0x014B], [0x014D, 0x014D], [0x014F, 0x014F], [0x0151, 0x0151], [0x0153, 0x0153], [0x0155, 0x0155], [0x0157, 0x0157], [0x0159, 0x0159], [0x015B, 0x015B], [0x015D, 0x015D], [0x015F, 0x015F], [0x0161, 0x0161], [0x0163, 0x0163], [0x0165, 0x0165], [0x0167, 0x0167], [0x0169, 0x0169], [0x016B, 0x016B], [0x016D, 0x016D], [0x016F, 0x016F], [0x0171, 0x0171], [0x0173, 0x0173], [0x0175, 0x0175], [0x0177, 0x0177], [0x017A, 0x017A], [0x017C, 0x017C], [0x017E, 0x0180], [0x0183, 0x0183], [0x0185, 0x0185], [0x0188, 0x0188], [0x018C, 0x018D], [0x0192, 0x0192], [0x0195, 0x0195], [0x0199, 0x019B], [0x019E, 0x019E], [0x01A1, 0x01A1], [0x01A3, 0x01A3], [0x01A5, 0x01A5], [0x01A8, 0x01A8], [0x01AA, 0x01AB], [0x01AD, 0x01AD], [0x01B0, 0x01B0], [0x01B4, 0x01B4], [0x01B6, 0x01B6], [0x01B9, 0x01BA], [0x01BD, 0x01BF], [0x01C6, 0x01C6], [0x01C9, 0x01C9], [0x01CC, 0x01CC], [0x01CE, 0x01CE], [0x01D0, 0x01D0], [0x01D2, 0x01D2], [0x01D4, 0x01D4], [0x01D6, 0x01D6], [0x01D8, 0x01D8], [0x01DA, 0x01DA], [0x01DC, 0x01DD], [0x01DF, 0x01DF], [0x01E1, 0x01E1], [0x01E3, 0x01E3], [0x01E5, 0x01E5], [0x01E7, 0x01E7], [0x01E9, 0x01E9], [0x01EB, 0x01EB], [0x01ED, 0x01ED], [0x01EF, 0x01F0], [0x01F3, 0x01F3], [0x01F5, 0x01F5], [0x01F9, 0x01F9], [0x01FB, 0x01FB], [0x01FD, 0x01FD], [0x01FF, 0x01FF], [0x0201, 0x0201], [0x0203, 0x0203], [0x0205, 0x0205], [0x0207, 0x0207], [0x0209, 0x0209], [0x020B, 0x020B], [0x020D, 0x020D], [0x020F, 0x020F], [0x0211, 0x0211], [0x0213, 0x0213], [0x0215, 0x0215], [0x0217, 0x0217], [0x0219, 0x0219], [0x021B, 0x021B], [0x021D, 0x021D], [0x021F, 0x021F], [0x0221, 0x0221], [0x0223, 0x0223], [0x0225, 0x0225], [0x0227, 0x0227], [0x0229, 0x0229], [0x022B, 0x022B], [0x022D, 0x022D], [0x022F, 0x022F], [0x0231, 0x0231], [0x0233, 0x0239], [0x023C, 0x023C], [0x023F, 0x0240], [0x0242, 0x0242], [0x0247, 0x0247], [0x0249, 0x0249], [0x024B, 0x024B], [0x024D, 0x024D], [0x024F, 0x0293], [0x0295, 0x02AF], [0x037B, 0x037D], [0x0390, 0x0390], [0x03AC, 0x03CE], [0x03D0, 0x03D1], [0x03D5, 0x03D7], [0x03D9, 0x03D9], [0x03DB, 0x03DB], [0x03DD, 0x03DD], [0x03DF, 0x03DF], [0x03E1, 0x03E1], [0x03E3, 0x03E3], [0x03E5, 0x03E5], [0x03E7, 0x03E7], [0x03E9, 0x03E9], [0x03EB, 0x03EB], [0x03ED, 0x03ED], [0x03EF, 0x03F3], [0x03F5, 0x03F5], [0x03F8, 0x03F8], [0x03FB, 0x03FC], [0x0430, 0x045F], [0x0461, 0x0461], [0x0463, 0x0463], [0x0465, 0x0465], [0x0467, 0x0467], [0x0469, 0x0469], [0x046B, 0x046B], [0x046D, 0x046D], [0x046F, 0x046F], [0x0471, 0x0471], [0x0473, 0x0473], [0x0475, 0x0475], [0x0477, 0x0477], [0x0479, 0x0479], [0x047B, 0x047B], [0x047D, 0x047D], [0x047F, 0x047F], [0x0481, 0x0481], [0x048B, 0x048B], [0x048D, 0x048D], [0x048F, 0x048F], [0x0491, 0x0491], [0x0493, 0x0493], [0x0495, 0x0495], [0x0497, 0x0497], [0x0499, 0x0499], [0x049B, 0x049B], [0x049D, 0x049D], [0x049F, 0x049F], [0x04A1, 0x04A1], [0x04A3, 0x04A3], [0x04A5, 0x04A5], [0x04A7, 0x04A7], [0x04A9, 0x04A9], [0x04AB, 0x04AB], [0x04AD, 0x04AD], [0x04AF, 0x04AF], [0x04B1, 0x04B1], [0x04B3, 0x04B3], [0x04B5, 0x04B5], [0x04B7, 0x04B7], [0x04B9, 0x04B9], [0x04BB, 0x04BB], [0x04BD, 0x04BD], [0x04BF, 0x04BF], [0x04C2, 0x04C2], [0x04C4, 0x04C4], [0x04C6, 0x04C6], [0x04C8, 0x04C8], [0x04CA, 0x04CA], [0x04CC, 0x04CC], [0x04CE, 0x04CF], [0x04D1, 0x04D1], [0x04D3, 0x04D3], [0x04D5, 0x04D5], [0x04D7, 0x04D7], [0x04D9, 0x04D9], [0x04DB, 0x04DB], [0x04DD, 0x04DD], [0x04DF, 0x04DF], [0x04E1, 0x04E1], [0x04E3, 0x04E3], [0x04E5, 0x04E5], [0x04E7, 0x04E7], [0x04E9, 0x04E9], [0x04EB, 0x04EB], [0x04ED, 0x04ED], [0x04EF, 0x04EF], [0x04F1, 0x04F1], [0x04F3, 0x04F3], [0x04F5, 0x04F5], [0x04F7, 0x04F7], [0x04F9, 0x04F9], [0x04FB, 0x04FB], [0x04FD, 0x04FD], [0x04FF, 0x04FF], [0x0501, 0x0501], [0x0503, 0x0503], [0x0505, 0x0505], [0x0507, 0x0507], [0x0509, 0x0509], [0x050B, 0x050B], [0x050D, 0x050D], [0x050F, 0x050F], [0x0511, 0x0511], [0x0513, 0x0513], [0x0561, 0x0587], [0x1D00, 0x1D2B], [0x1D62, 0x1D77], [0x1D79, 0x1D9A], [0x1E01, 0x1E01], [0x1E03, 0x1E03], [0x1E05, 0x1E05], [0x1E07, 0x1E07], [0x1E09, 0x1E09], [0x1E0B, 0x1E0B], [0x1E0D, 0x1E0D], [0x1E0F, 0x1E0F], [0x1E11, 0x1E11], [0x1E13, 0x1E13], [0x1E15, 0x1E15], [0x1E17, 0x1E17], [0x1E19, 0x1E19], [0x1E1B, 0x1E1B], [0x1E1D, 0x1E1D], [0x1E1F, 0x1E1F], [0x1E21, 0x1E21], [0x1E23, 0x1E23], [0x1E25, 0x1E25], [0x1E27, 0x1E27], [0x1E29, 0x1E29], [0x1E2B, 0x1E2B], [0x1E2D, 0x1E2D], [0x1E2F, 0x1E2F], [0x1E31, 0x1E31], [0x1E33, 0x1E33], [0x1E35, 0x1E35], [0x1E37, 0x1E37], [0x1E39, 0x1E39], [0x1E3B, 0x1E3B], [0x1E3D, 0x1E3D], [0x1E3F, 0x1E3F], [0x1E41, 0x1E41], [0x1E43, 0x1E43], [0x1E45, 0x1E45], [0x1E47, 0x1E47], [0x1E49, 0x1E49], [0x1E4B, 0x1E4B], [0x1E4D, 0x1E4D], [0x1E4F, 0x1E4F], [0x1E51, 0x1E51], [0x1E53, 0x1E53], [0x1E55, 0x1E55], [0x1E57, 0x1E57], [0x1E59, 0x1E59], [0x1E5B, 0x1E5B], [0x1E5D, 0x1E5D], [0x1E5F, 0x1E5F], [0x1E61, 0x1E61], [0x1E63, 0x1E63], [0x1E65, 0x1E65], [0x1E67, 0x1E67], [0x1E69, 0x1E69], [0x1E6B, 0x1E6B], [0x1E6D, 0x1E6D], [0x1E6F, 0x1E6F], [0x1E71, 0x1E71], [0x1E73, 0x1E73], [0x1E75, 0x1E75], [0x1E77, 0x1E77], [0x1E79, 0x1E79], [0x1E7B, 0x1E7B], [0x1E7D, 0x1E7D], [0x1E7F, 0x1E7F], [0x1E81, 0x1E81], [0x1E83, 0x1E83], [0x1E85, 0x1E85], [0x1E87, 0x1E87], [0x1E89, 0x1E89], [0x1E8B, 0x1E8B], [0x1E8D, 0x1E8D], [0x1E8F, 0x1E8F], [0x1E91, 0x1E91], [0x1E93, 0x1E93], [0x1E95, 0x1E9B], [0x1EA1, 0x1EA1], [0x1EA3, 0x1EA3], [0x1EA5, 0x1EA5], [0x1EA7, 0x1EA7], [0x1EA9, 0x1EA9], [0x1EAB, 0x1EAB], [0x1EAD, 0x1EAD], [0x1EAF, 0x1EAF], [0x1EB1, 0x1EB1], [0x1EB3, 0x1EB3], [0x1EB5, 0x1EB5], [0x1EB7, 0x1EB7], [0x1EB9, 0x1EB9], [0x1EBB, 0x1EBB], [0x1EBD, 0x1EBD], [0x1EBF, 0x1EBF], [0x1EC1, 0x1EC1], [0x1EC3, 0x1EC3], [0x1EC5, 0x1EC5], [0x1EC7, 0x1EC7], [0x1EC9, 0x1EC9], [0x1ECB, 0x1ECB], [0x1ECD, 0x1ECD], [0x1ECF, 0x1ECF], [0x1ED1, 0x1ED1], [0x1ED3, 0x1ED3], [0x1ED5, 0x1ED5], [0x1ED7, 0x1ED7], [0x1ED9, 0x1ED9], [0x1EDB, 0x1EDB], [0x1EDD, 0x1EDD], [0x1EDF, 0x1EDF], [0x1EE1, 0x1EE1], [0x1EE3, 0x1EE3], [0x1EE5, 0x1EE5], [0x1EE7, 0x1EE7], [0x1EE9, 0x1EE9], [0x1EEB, 0x1EEB], [0x1EED, 0x1EED], [0x1EEF, 0x1EEF], [0x1EF1, 0x1EF1], [0x1EF3, 0x1EF3], [0x1EF5, 0x1EF5], [0x1EF7, 0x1EF7], [0x1EF9, 0x1EF9], [0x1F00, 0x1F07], [0x1F10, 0x1F15], [0x1F20, 0x1F27], [0x1F30, 0x1F37], [0x1F40, 0x1F45], [0x1F50, 0x1F57], [0x1F60, 0x1F67], [0x1F70, 0x1F7D], [0x1F80, 0x1F87], [0x1F90, 0x1F97], [0x1FA0, 0x1FA7], [0x1FB0, 0x1FB4], [0x1FB6, 0x1FB7], [0x1FBE, 0x1FBE], [0x1FC2, 0x1FC4], [0x1FC6, 0x1FC7], [0x1FD0, 0x1FD3], [0x1FD6, 0x1FD7], [0x1FE0, 0x1FE7], [0x1FF2, 0x1FF4], [0x1FF6, 0x1FF7], [0x2071, 0x2071], [0x207F, 0x207F], [0x210A, 0x210A], [0x210E, 0x210F], [0x2113, 0x2113], [0x212F, 0x212F], [0x2134, 0x2134], [0x2139, 0x2139], [0x213C, 0x213D], [0x2146, 0x2149], [0x214E, 0x214E], [0x2184, 0x2184], [0x2C30, 0x2C5E], [0x2C61, 0x2C61], [0x2C65, 0x2C66], [0x2C68, 0x2C68], [0x2C6A, 0x2C6A], [0x2C6C, 0x2C6C], [0x2C74, 0x2C74], [0x2C76, 0x2C77], [0x2C81, 0x2C81], [0x2C83, 0x2C83], [0x2C85, 0x2C85], [0x2C87, 0x2C87], [0x2C89, 0x2C89], [0x2C8B, 0x2C8B], [0x2C8D, 0x2C8D], [0x2C8F, 0x2C8F], [0x2C91, 0x2C91], [0x2C93, 0x2C93], [0x2C95, 0x2C95], [0x2C97, 0x2C97], [0x2C99, 0x2C99], [0x2C9B, 0x2C9B], [0x2C9D, 0x2C9D], [0x2C9F, 0x2C9F], [0x2CA1, 0x2CA1], [0x2CA3, 0x2CA3], [0x2CA5, 0x2CA5], [0x2CA7, 0x2CA7], [0x2CA9, 0x2CA9], [0x2CAB, 0x2CAB], [0x2CAD, 0x2CAD], [0x2CAF, 0x2CAF], [0x2CB1, 0x2CB1], [0x2CB3, 0x2CB3], [0x2CB5, 0x2CB5], [0x2CB7, 0x2CB7], [0x2CB9, 0x2CB9], [0x2CBB, 0x2CBB], [0x2CBD, 0x2CBD], [0x2CBF, 0x2CBF], [0x2CC1, 0x2CC1], [0x2CC3, 0x2CC3], [0x2CC5, 0x2CC5], [0x2CC7, 0x2CC7], [0x2CC9, 0x2CC9], [0x2CCB, 0x2CCB], [0x2CCD, 0x2CCD], [0x2CCF, 0x2CCF], [0x2CD1, 0x2CD1], [0x2CD3, 0x2CD3], [0x2CD5, 0x2CD5], [0x2CD7, 0x2CD7], [0x2CD9, 0x2CD9], [0x2CDB, 0x2CDB], [0x2CDD, 0x2CDD], [0x2CDF, 0x2CDF], [0x2CE1, 0x2CE1], [0x2CE3, 0x2CE4], [0x2D00, 0x2D25], [0xFB00, 0xFB06], [0xFB13, 0xFB17], [0xFF41, 0xFF5A]]; -Lt = [[0x01C5, 0x01C5], [0x01C8, 0x01C8], [0x01CB, 0x01CB], [0x01F2, 0x01F2], [0x1F88, 0x1F8F], [0x1F98, 0x1F9F], [0x1FA8, 0x1FAF], [0x1FBC, 0x1FBC], [0x1FCC, 0x1FCC], [0x1FFC, 0x1FFC]]; -Lm = [[0x02B0, 0x02C1], [0x02C6, 0x02D1], [0x02E0, 0x02E4], [0x02EE, 0x02EE], [0x037A, 0x037A], [0x0559, 0x0559], [0x0640, 0x0640], [0x06E5, 0x06E6], [0x07F4, 0x07F5], [0x07FA, 0x07FA], [0x0E46, 0x0E46], [0x0EC6, 0x0EC6], [0x10FC, 0x10FC], [0x17D7, 0x17D7], [0x1843, 0x1843], [0x1D2C, 0x1D61], [0x1D78, 0x1D78], [0x1D9B, 0x1DBF], [0x2090, 0x2094], [0x2D6F, 0x2D6F], [0x3005, 0x3005], [0x3031, 0x3035], [0x303B, 0x303B], [0x309D, 0x309E], [0x30FC, 0x30FE], [0xA015, 0xA015], [0xA717, 0xA71A], [0xFF70, 0xFF70], [0xFF9E, 0xFF9F]]; -Lo = [[0x01BB, 0x01BB], [0x01C0, 0x01C3], [0x0294, 0x0294], [0x05D0, 0x05EA], [0x05F0, 0x05F2], [0x0621, 0x063A], [0x0641, 0x064A], [0x066E, 0x066F], [0x0671, 0x06D3], [0x06D5, 0x06D5], [0x06EE, 0x06EF], [0x06FA, 0x06FC], [0x06FF, 0x06FF], [0x0710, 0x0710], [0x0712, 0x072F], [0x074D, 0x076D], [0x0780, 0x07A5], [0x07B1, 0x07B1], [0x07CA, 0x07EA], [0x0904, 0x0939], [0x093D, 0x093D], [0x0950, 0x0950], [0x0958, 0x0961], [0x097B, 0x097F], [0x0985, 0x098C], [0x098F, 0x0990], [0x0993, 0x09A8], [0x09AA, 0x09B0], [0x09B2, 0x09B2], [0x09B6, 0x09B9], [0x09BD, 0x09BD], [0x09CE, 0x09CE], [0x09DC, 0x09DD], [0x09DF, 0x09E1], [0x09F0, 0x09F1], [0x0A05, 0x0A0A], [0x0A0F, 0x0A10], [0x0A13, 0x0A28], [0x0A2A, 0x0A30], [0x0A32, 0x0A33], [0x0A35, 0x0A36], [0x0A38, 0x0A39], [0x0A59, 0x0A5C], [0x0A5E, 0x0A5E], [0x0A72, 0x0A74], [0x0A85, 0x0A8D], [0x0A8F, 0x0A91], [0x0A93, 0x0AA8], [0x0AAA, 0x0AB0], [0x0AB2, 0x0AB3], [0x0AB5, 0x0AB9], [0x0ABD, 0x0ABD], [0x0AD0, 0x0AD0], [0x0AE0, 0x0AE1], [0x0B05, 0x0B0C], [0x0B0F, 0x0B10], [0x0B13, 0x0B28], [0x0B2A, 0x0B30], [0x0B32, 0x0B33], [0x0B35, 0x0B39], [0x0B3D, 0x0B3D], [0x0B5C, 0x0B5D], [0x0B5F, 0x0B61], [0x0B71, 0x0B71], [0x0B83, 0x0B83], [0x0B85, 0x0B8A], [0x0B8E, 0x0B90], [0x0B92, 0x0B95], [0x0B99, 0x0B9A], [0x0B9C, 0x0B9C], [0x0B9E, 0x0B9F], [0x0BA3, 0x0BA4], [0x0BA8, 0x0BAA], [0x0BAE, 0x0BB9], [0x0C05, 0x0C0C], [0x0C0E, 0x0C10], [0x0C12, 0x0C28], [0x0C2A, 0x0C33], [0x0C35, 0x0C39], [0x0C60, 0x0C61], [0x0C85, 0x0C8C], [0x0C8E, 0x0C90], [0x0C92, 0x0CA8], [0x0CAA, 0x0CB3], [0x0CB5, 0x0CB9], [0x0CBD, 0x0CBD], [0x0CDE, 0x0CDE], [0x0CE0, 0x0CE1], [0x0D05, 0x0D0C], [0x0D0E, 0x0D10], [0x0D12, 0x0D28], [0x0D2A, 0x0D39], [0x0D60, 0x0D61], [0x0D85, 0x0D96], [0x0D9A, 0x0DB1], [0x0DB3, 0x0DBB], [0x0DBD, 0x0DBD], [0x0DC0, 0x0DC6], [0x0E01, 0x0E30], [0x0E32, 0x0E33], [0x0E40, 0x0E45], [0x0E81, 0x0E82], [0x0E84, 0x0E84], [0x0E87, 0x0E88], [0x0E8A, 0x0E8A], [0x0E8D, 0x0E8D], [0x0E94, 0x0E97], [0x0E99, 0x0E9F], [0x0EA1, 0x0EA3], [0x0EA5, 0x0EA5], [0x0EA7, 0x0EA7], [0x0EAA, 0x0EAB], [0x0EAD, 0x0EB0], [0x0EB2, 0x0EB3], [0x0EBD, 0x0EBD], [0x0EC0, 0x0EC4], [0x0EDC, 0x0EDD], [0x0F00, 0x0F00], [0x0F40, 0x0F47], [0x0F49, 0x0F6A], [0x0F88, 0x0F8B], [0x1000, 0x1021], [0x1023, 0x1027], [0x1029, 0x102A], [0x1050, 0x1055], [0x10D0, 0x10FA], [0x1100, 0x1159], [0x115F, 0x11A2], [0x11A8, 0x11F9], [0x1200, 0x1248], [0x124A, 0x124D], [0x1250, 0x1256], [0x1258, 0x1258], [0x125A, 0x125D], [0x1260, 0x1288], [0x128A, 0x128D], [0x1290, 0x12B0], [0x12B2, 0x12B5], [0x12B8, 0x12BE], [0x12C0, 0x12C0], [0x12C2, 0x12C5], [0x12C8, 0x12D6], [0x12D8, 0x1310], [0x1312, 0x1315], [0x1318, 0x135A], [0x1380, 0x138F], [0x13A0, 0x13F4], [0x1401, 0x166C], [0x166F, 0x1676], [0x1681, 0x169A], [0x16A0, 0x16EA], [0x1700, 0x170C], [0x170E, 0x1711], [0x1720, 0x1731], [0x1740, 0x1751], [0x1760, 0x176C], [0x176E, 0x1770], [0x1780, 0x17B3], [0x17DC, 0x17DC], [0x1820, 0x1842], [0x1844, 0x1877], [0x1880, 0x18A8], [0x1900, 0x191C], [0x1950, 0x196D], [0x1970, 0x1974], [0x1980, 0x19A9], [0x19C1, 0x19C7], [0x1A00, 0x1A16], [0x1B05, 0x1B33], [0x1B45, 0x1B4B], [0x2135, 0x2138], [0x2D30, 0x2D65], [0x2D80, 0x2D96], [0x2DA0, 0x2DA6], [0x2DA8, 0x2DAE], [0x2DB0, 0x2DB6], [0x2DB8, 0x2DBE], [0x2DC0, 0x2DC6], [0x2DC8, 0x2DCE], [0x2DD0, 0x2DD6], [0x2DD8, 0x2DDE], [0x3006, 0x3006], [0x303C, 0x303C], [0x3041, 0x3096], [0x309F, 0x309F], [0x30A1, 0x30FA], [0x30FF, 0x30FF], [0x3105, 0x312C], [0x3131, 0x318E], [0x31A0, 0x31B7], [0x31F0, 0x31FF], [0x3400, 0x4DB5], [0x4E00, 0x9FBB], [0xA000, 0xA014], [0xA016, 0xA48C], [0xA800, 0xA801], [0xA803, 0xA805], [0xA807, 0xA80A], [0xA80C, 0xA822], [0xA840, 0xA873], [0xAC00, 0xD7A3], [0xF900, 0xFA2D], [0xFA30, 0xFA6A], [0xFA70, 0xFAD9], [0xFB1D, 0xFB1D], [0xFB1F, 0xFB28], [0xFB2A, 0xFB36], [0xFB38, 0xFB3C], [0xFB3E, 0xFB3E], [0xFB40, 0xFB41], [0xFB43, 0xFB44], [0xFB46, 0xFBB1], [0xFBD3, 0xFD3D], [0xFD50, 0xFD8F], [0xFD92, 0xFDC7], [0xFDF0, 0xFDFB], [0xFE70, 0xFE74], [0xFE76, 0xFEFC], [0xFF66, 0xFF6F], [0xFF71, 0xFF9D], [0xFFA0, 0xFFBE], [0xFFC2, 0xFFC7], [0xFFCA, 0xFFCF], [0xFFD2, 0xFFD7], [0xFFDA, 0xFFDC]]; -Nl = [[0x16EE, 0x16F0], [0x2160, 0x2182], [0x3007, 0x3007], [0x3021, 0x3029], [0x3038, 0x303A]]; -Mn = [[0x0300, 0x036F], [0x0483, 0x0486], [0x0591, 0x05BD], [0x05BF, 0x05BF], [0x05C1, 0x05C2], [0x05C4, 0x05C5], [0x05C7, 0x05C7], [0x0610, 0x0615], [0x064B, 0x065E], [0x0670, 0x0670], [0x06D6, 0x06DC], [0x06DF, 0x06E4], [0x06E7, 0x06E8], [0x06EA, 0x06ED], [0x0711, 0x0711], [0x0730, 0x074A], [0x07A6, 0x07B0], [0x07EB, 0x07F3], [0x0901, 0x0902], [0x093C, 0x093C], [0x0941, 0x0948], [0x094D, 0x094D], [0x0951, 0x0954], [0x0962, 0x0963], [0x0981, 0x0981], [0x09BC, 0x09BC], [0x09C1, 0x09C4], [0x09CD, 0x09CD], [0x09E2, 0x09E3], [0x0A01, 0x0A02], [0x0A3C, 0x0A3C], [0x0A41, 0x0A42], [0x0A47, 0x0A48], [0x0A4B, 0x0A4D], [0x0A70, 0x0A71], [0x0A81, 0x0A82], [0x0ABC, 0x0ABC], [0x0AC1, 0x0AC5], [0x0AC7, 0x0AC8], [0x0ACD, 0x0ACD], [0x0AE2, 0x0AE3], [0x0B01, 0x0B01], [0x0B3C, 0x0B3C], [0x0B3F, 0x0B3F], [0x0B41, 0x0B43], [0x0B4D, 0x0B4D], [0x0B56, 0x0B56], [0x0B82, 0x0B82], [0x0BC0, 0x0BC0], [0x0BCD, 0x0BCD], [0x0C3E, 0x0C40], [0x0C46, 0x0C48], [0x0C4A, 0x0C4D], [0x0C55, 0x0C56], [0x0CBC, 0x0CBC], [0x0CBF, 0x0CBF], [0x0CC6, 0x0CC6], [0x0CCC, 0x0CCD], [0x0CE2, 0x0CE3], [0x0D41, 0x0D43], [0x0D4D, 0x0D4D], [0x0DCA, 0x0DCA], [0x0DD2, 0x0DD4], [0x0DD6, 0x0DD6], [0x0E31, 0x0E31], [0x0E34, 0x0E3A], [0x0E47, 0x0E4E], [0x0EB1, 0x0EB1], [0x0EB4, 0x0EB9], [0x0EBB, 0x0EBC], [0x0EC8, 0x0ECD], [0x0F18, 0x0F19], [0x0F35, 0x0F35], [0x0F37, 0x0F37], [0x0F39, 0x0F39], [0x0F71, 0x0F7E], [0x0F80, 0x0F84], [0x0F86, 0x0F87], [0x0F90, 0x0F97], [0x0F99, 0x0FBC], [0x0FC6, 0x0FC6], [0x102D, 0x1030], [0x1032, 0x1032], [0x1036, 0x1037], [0x1039, 0x1039], [0x1058, 0x1059], [0x135F, 0x135F], [0x1712, 0x1714], [0x1732, 0x1734], [0x1752, 0x1753], [0x1772, 0x1773], [0x17B7, 0x17BD], [0x17C6, 0x17C6], [0x17C9, 0x17D3], [0x17DD, 0x17DD], [0x180B, 0x180D], [0x18A9, 0x18A9], [0x1920, 0x1922], [0x1927, 0x1928], [0x1932, 0x1932], [0x1939, 0x193B], [0x1A17, 0x1A18], [0x1B00, 0x1B03], [0x1B34, 0x1B34], [0x1B36, 0x1B3A], [0x1B3C, 0x1B3C], [0x1B42, 0x1B42], [0x1B6B, 0x1B73], [0x1DC0, 0x1DCA], [0x1DFE, 0x1DFF], [0x20D0, 0x20DC], [0x20E1, 0x20E1], [0x20E5, 0x20EF], [0x302A, 0x302F], [0x3099, 0x309A], [0xA806, 0xA806], [0xA80B, 0xA80B], [0xA825, 0xA826], [0xFB1E, 0xFB1E], [0xFE00, 0xFE0F], [0xFE20, 0xFE23]]; -Mc = [[0x0903, 0x0903], [0x093E, 0x0940], [0x0949, 0x094C], [0x0982, 0x0983], [0x09BE, 0x09C0], [0x09C7, 0x09C8], [0x09CB, 0x09CC], [0x09D7, 0x09D7], [0x0A03, 0x0A03], [0x0A3E, 0x0A40], [0x0A83, 0x0A83], [0x0ABE, 0x0AC0], [0x0AC9, 0x0AC9], [0x0ACB, 0x0ACC], [0x0B02, 0x0B03], [0x0B3E, 0x0B3E], [0x0B40, 0x0B40], [0x0B47, 0x0B48], [0x0B4B, 0x0B4C], [0x0B57, 0x0B57], [0x0BBE, 0x0BBF], [0x0BC1, 0x0BC2], [0x0BC6, 0x0BC8], [0x0BCA, 0x0BCC], [0x0BD7, 0x0BD7], [0x0C01, 0x0C03], [0x0C41, 0x0C44], [0x0C82, 0x0C83], [0x0CBE, 0x0CBE], [0x0CC0, 0x0CC4], [0x0CC7, 0x0CC8], [0x0CCA, 0x0CCB], [0x0CD5, 0x0CD6], [0x0D02, 0x0D03], [0x0D3E, 0x0D40], [0x0D46, 0x0D48], [0x0D4A, 0x0D4C], [0x0D57, 0x0D57], [0x0D82, 0x0D83], [0x0DCF, 0x0DD1], [0x0DD8, 0x0DDF], [0x0DF2, 0x0DF3], [0x0F3E, 0x0F3F], [0x0F7F, 0x0F7F], [0x102C, 0x102C], [0x1031, 0x1031], [0x1038, 0x1038], [0x1056, 0x1057], [0x17B6, 0x17B6], [0x17BE, 0x17C5], [0x17C7, 0x17C8], [0x1923, 0x1926], [0x1929, 0x192B], [0x1930, 0x1931], [0x1933, 0x1938], [0x19B0, 0x19C0], [0x19C8, 0x19C9], [0x1A19, 0x1A1B], [0x1B04, 0x1B04], [0x1B35, 0x1B35], [0x1B3B, 0x1B3B], [0x1B3D, 0x1B41], [0x1B43, 0x1B44], [0xA802, 0xA802], [0xA823, 0xA824], [0xA827, 0xA827]]; -Nd = [[0x0030, 0x0039], [0x0660, 0x0669], [0x06F0, 0x06F9], [0x07C0, 0x07C9], [0x0966, 0x096F], [0x09E6, 0x09EF], [0x0A66, 0x0A6F], [0x0AE6, 0x0AEF], [0x0B66, 0x0B6F], [0x0BE6, 0x0BEF], [0x0C66, 0x0C6F], [0x0CE6, 0x0CEF], [0x0D66, 0x0D6F], [0x0E50, 0x0E59], [0x0ED0, 0x0ED9], [0x0F20, 0x0F29], [0x1040, 0x1049], [0x17E0, 0x17E9], [0x1810, 0x1819], [0x1946, 0x194F], [0x19D0, 0x19D9], [0x1B50, 0x1B59], [0xFF10, 0xFF19]]; -Pc = [[0x005F, 0x005F], [0x203F, 0x2040], [0x2054, 0x2054], [0xFE33, 0xFE34], [0xFE4D, 0xFE4F], [0xFF3F, 0xFF3F]]; - -UnicodeLetterLu = []; -UnicodeLetterLl = []; -UnicodeLetterLt = []; -UnicodeLetterLm = []; -UnicodeLetterLo = []; -UnicodeLetterNl = []; -UnicodeLetterMn = []; -UnicodeLetterMc = []; -UnicodeLetterNd = []; -UnicodeLetterPc = []; - -for (indexI = 0; indexI < Lu.length; indexI++) { - for (indexJ = Lu[indexI][0]; indexJ <= Lu[indexI][1]; indexJ++) { - UnicodeLetterLu[indexJ] = true; - } -} -for (indexI = 0; indexI < Ll.length; indexI++) { - for (indexJ = Ll[indexI][0]; indexJ <= Ll[indexI][1]; indexJ++) { - UnicodeLetterLl[indexJ] = true; - } -} -for (indexI = 0; indexI < Lt.length; indexI++) { - for (indexJ = Lt[indexI][0]; indexJ <= Lt[indexI][1]; indexJ++) { - UnicodeLetterLt[indexJ] = true; - } -} -for (indexI = 0; indexI < Lm.length; indexI++) { - for (indexJ = Lm[indexI][0]; indexJ <= Lm[indexI][1]; indexJ++) { - UnicodeLetterLm[indexJ] = true; - } -} -for (indexI = 0; indexI < Lo.length; indexI++) { - for (indexJ = Lo[indexI][0]; indexJ <= Lo[indexI][1]; indexJ++) { - UnicodeLetterLo[indexJ] = true; - } -} -for (indexI = 0; indexI < Nl.length; indexI++) { - for (indexJ = Nl[indexI][0]; indexJ <= Nl[indexI][1]; indexJ++) { - UnicodeLetterNl[indexJ] = true; - } -} -for (indexI = 0; indexI < Mn.length; indexI++) { - for (indexJ = Mn[indexI][0]; indexJ <= Mn[indexI][1]; indexJ++) { - UnicodeLetterMn[indexJ] = true; - } -} -for (indexI = 0; indexI < Mc.length; indexI++) { - for (indexJ = Mc[indexI][0]; indexJ <= Mc[indexI][1]; indexJ++) { - UnicodeLetterMc[indexJ] = true; - } -} -for (indexI = 0; indexI < Nd.length; indexI++) { - for (indexJ = Nd[indexI][0]; indexJ <= Nd[indexI][1]; indexJ++) { - UnicodeLetterNd[indexJ] = true; - } -} -for (indexI = 0; indexI < Pc.length; indexI++) { - for (indexJ = Pc[indexI][0]; indexJ <= Pc[indexI][1]; indexJ++) { - UnicodeLetterPc[indexJ] = true; - } -} - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; -for (index = 0; index <= 65535; index++) { - if ((UnicodeLetterLu[index] === undefined) && (UnicodeLetterLl[index] === undefined) && (UnicodeLetterLt[index] === undefined) && (UnicodeLetterLm[index] === undefined) && (UnicodeLetterLo[index] === undefined) && (UnicodeLetterNl[index] === undefined) && (UnicodeLetterMn[index] === undefined) && (UnicodeLetterMc[index] === undefined) && (UnicodeLetterNd[index] === undefined) && (UnicodeLetterPc[index] === undefined) && (index !== 0x0024) && (index !== 0x005F)) { - try { - var hex = decimalToHexString(index); - var identifier1 = "$" + String.fromCharCode(index) + "1"; - var identifier2 = "$\\u" + hex + "1"; - eval(identifier1 + " = 1"); - eval(identifier1 + " === " + identifier2); - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; - } catch (e) { - } - count++; - } -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_510/S15.10.2.12_A1_T6.js b/tests/ES3/Unicode/Unicode_510/S15.10.2.12_A1_T6.js deleted file mode 100644 index dc246a4c5..000000000 --- a/tests/ES3/Unicode/Unicode_510/S15.10.2.12_A1_T6.js +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.10.2.12_A1_T6; - * @section: 15.10.2.12, 7.2, 7.3; - * @assertion: The production CharacterClassEscape :: s evaluates by returning the set of characters - * containing the characters that are on the right-hand side of the WhiteSpace (7.2) or LineTerminator (7.3) productions; - * @description: Complex test; -*/ - -//CHECK#1 -var regexp_s = /\s/; -Zs = [[0x1680, 0x1680], [0x180E, 0x180E], [0x2000, 0x200A], [0x202F, 0x202F], [0x205F, 0x205F], [0x3000, 0x3000]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Zs.length; indexI++) { - for (indexJ = Zs[indexI][0]; indexJ <= Zs[indexI][1]; indexJ++) { - var str = String.fromCharCode(indexJ); - var arr = regexp_s.exec(str); - if ((arr === null) || (arr[0] !== str)) { - var hex = decimalToHexString(indexJ); - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_510/S15.10.2.12_A2_T6.js b/tests/ES3/Unicode/Unicode_510/S15.10.2.12_A2_T6.js deleted file mode 100644 index f2b2bc0e2..000000000 --- a/tests/ES3/Unicode/Unicode_510/S15.10.2.12_A2_T6.js +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S15.10.2.12_A2_T6; - * @section: 15.10.2.12, 7.2, 7.3; -* @assertion: The production CharacterClassEscape :: S evaluates by returning -* the set of all characters not included in the set returned by -* CharacterClassEscape :: s; - * @description: Complex test; -*/ - -//CHECK#1 -var regexp_S = /\S/; -Zs = [[0x1680, 0x1680], [0x180E, 0x180E], [0x2000, 0x200A], [0x202F, 0x202F], [0x205F, 0x205F], [0x3000, 0x3000]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Zs.length; indexI++) { - for (indexJ = Zs[indexI][0]; indexJ <= Zs[indexI][1]; indexJ++) { - if (regexp_S.exec(String.fromCharCode(indexJ)) !== null) { - var hex = decimalToHexString(indexJ); - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_510/S15.5.4.16_A1.js b/tests/ES3/Unicode/Unicode_510/S15.5.4.16_A1.js deleted file mode 100644 index 4ed495929..000000000 --- a/tests/ES3/Unicode/Unicode_510/S15.5.4.16_A1.js +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.16_A1; -* @section: 15.5.4.16; -* @assertion: The characters in UnicodeData.txt, but not in SpecialCasings.txt are converted one by one; -* @description: Complex test; -*/ - -//CHECK -LowerCase = [[0x0041, 0x0061], [0x0042, 0x0062], [0x0043, 0x0063], [0x0044, 0x0064], [0x0045, 0x0065], [0x0046, 0x0066], [0x0047, 0x0067], [0x0048, 0x0068], [0x004B, 0x006B], [0x004C, 0x006C], [0x004D, 0x006D], [0x004E, 0x006E], [0x004F, 0x006F], [0x0050, 0x0070], [0x0051, 0x0071], [0x0052, 0x0072], [0x0053, 0x0073], [0x0054, 0x0074], [0x0055, 0x0075], [0x0056, 0x0076], [0x0057, 0x0077], [0x0058, 0x0078], [0x0059, 0x0079], [0x005A, 0x007A], [0x00C0, 0x00E0], [0x00C1, 0x00E1], [0x00C2, 0x00E2], [0x00C3, 0x00E3], [0x00C4, 0x00E4], [0x00C5, 0x00E5], [0x00C6, 0x00E6], [0x00C7, 0x00E7], [0x00C8, 0x00E8], [0x00C9, 0x00E9], [0x00CA, 0x00EA], [0x00CB, 0x00EB], [0x00CE, 0x00EE], [0x00CF, 0x00EF], [0x00D0, 0x00F0], [0x00D1, 0x00F1], [0x00D2, 0x00F2], [0x00D3, 0x00F3], [0x00D4, 0x00F4], [0x00D5, 0x00F5], [0x00D6, 0x00F6], [0x00D8, 0x00F8], [0x00D9, 0x00F9], [0x00DA, 0x00FA], [0x00DB, 0x00FB], [0x00DC, 0x00FC], [0x00DD, 0x00FD], [0x00DE, 0x00FE], [0x0100, 0x0101], [0x0102, 0x0103], [0x0104, 0x0105], [0x0106, 0x0107], [0x0108, 0x0109], [0x010A, 0x010B], [0x010C, 0x010D], [0x010E, 0x010F], [0x0110, 0x0111], [0x0112, 0x0113], [0x0114, 0x0115], [0x0116, 0x0117], [0x0118, 0x0119], [0x011A, 0x011B], [0x011C, 0x011D], [0x011E, 0x011F], [0x0120, 0x0121], [0x0122, 0x0123], [0x0124, 0x0125], [0x0126, 0x0127], [0x012A, 0x012B], [0x012C, 0x012D], [0x0132, 0x0133], [0x0134, 0x0135], [0x0136, 0x0137], [0x0139, 0x013A], [0x013B, 0x013C], [0x013D, 0x013E], [0x013F, 0x0140], [0x0141, 0x0142], [0x0143, 0x0144], [0x0145, 0x0146], [0x0147, 0x0148], [0x014A, 0x014B], [0x014C, 0x014D], [0x014E, 0x014F], [0x0150, 0x0151], [0x0152, 0x0153], [0x0154, 0x0155], [0x0156, 0x0157], [0x0158, 0x0159], [0x015A, 0x015B], [0x015C, 0x015D], [0x015E, 0x015F], [0x0160, 0x0161], [0x0162, 0x0163], [0x0164, 0x0165], [0x0166, 0x0167], [0x0168, 0x0169], [0x016A, 0x016B], [0x016C, 0x016D], [0x016E, 0x016F], [0x0170, 0x0171], [0x0172, 0x0173], [0x0174, 0x0175], [0x0176, 0x0177], [0x0178, 0x00FF], [0x0179, 0x017A], [0x017B, 0x017C], [0x017D, 0x017E], [0x0181, 0x0253], [0x0182, 0x0183], [0x0184, 0x0185], [0x0186, 0x0254], [0x0187, 0x0188], [0x0189, 0x0256], [0x018A, 0x0257], [0x018B, 0x018C], [0x018E, 0x01DD], [0x018F, 0x0259], [0x0190, 0x025B], [0x0191, 0x0192], [0x0193, 0x0260], [0x0194, 0x0263], [0x0196, 0x0269], [0x0197, 0x0268], [0x0198, 0x0199], [0x019C, 0x026F], [0x019D, 0x0272], [0x019F, 0x0275], [0x01A0, 0x01A1], [0x01A2, 0x01A3], [0x01A4, 0x01A5], [0x01A6, 0x0280], [0x01A7, 0x01A8], [0x01A9, 0x0283], [0x01AC, 0x01AD], [0x01AE, 0x0288], [0x01AF, 0x01B0], [0x01B1, 0x028A], [0x01B2, 0x028B], [0x01B3, 0x01B4], [0x01B5, 0x01B6], [0x01B7, 0x0292], [0x01B8, 0x01B9], [0x01BC, 0x01BD], [0x01C4, 0x01C6], [0x01C5, 0x01C6], [0x01C7, 0x01C9], [0x01C8, 0x01C9], [0x01CA, 0x01CC], [0x01CB, 0x01CC], [0x01CD, 0x01CE], [0x01CF, 0x01D0], [0x01D1, 0x01D2], [0x01D3, 0x01D4], [0x01D5, 0x01D6], [0x01D7, 0x01D8], [0x01D9, 0x01DA], [0x01DB, 0x01DC], [0x01DE, 0x01DF], [0x01E0, 0x01E1], [0x01E2, 0x01E3], [0x01E4, 0x01E5], [0x01E6, 0x01E7], [0x01E8, 0x01E9], [0x01EA, 0x01EB], [0x01EC, 0x01ED], [0x01EE, 0x01EF], [0x01F1, 0x01F3], [0x01F2, 0x01F3], [0x01F4, 0x01F5], [0x01F6, 0x0195], [0x01F7, 0x01BF], [0x01F8, 0x01F9], [0x01FA, 0x01FB], [0x01FC, 0x01FD], [0x01FE, 0x01FF], [0x0200, 0x0201], [0x0202, 0x0203], [0x0204, 0x0205], [0x0206, 0x0207], [0x0208, 0x0209], [0x020A, 0x020B], [0x020C, 0x020D], [0x020E, 0x020F], [0x0210, 0x0211], [0x0212, 0x0213], [0x0214, 0x0215], [0x0216, 0x0217], [0x0218, 0x0219], [0x021A, 0x021B], [0x021C, 0x021D], [0x021E, 0x021F], [0x0220, 0x019E], [0x0222, 0x0223], [0x0224, 0x0225], [0x0226, 0x0227], [0x0228, 0x0229], [0x022A, 0x022B], [0x022C, 0x022D], [0x022E, 0x022F], [0x0230, 0x0231], [0x0232, 0x0233], [0x023A, 0x2C65], [0x023B, 0x023C], [0x023D, 0x019A], [0x023E, 0x2C66], [0x0241, 0x0242], [0x0243, 0x0180], [0x0244, 0x0289], [0x0245, 0x028C], [0x0246, 0x0247], [0x0248, 0x0249], [0x024A, 0x024B], [0x024C, 0x024D], [0x024E, 0x024F], [0x0370, 0x0371], [0x0372, 0x0373], [0x0376, 0x0377], [0x0386, 0x03AC], [0x0388, 0x03AD], [0x0389, 0x03AE], [0x038A, 0x03AF], [0x038C, 0x03CC], [0x038E, 0x03CD], [0x038F, 0x03CE], [0x0391, 0x03B1], [0x0392, 0x03B2], [0x0393, 0x03B3], [0x0394, 0x03B4], [0x0395, 0x03B5], [0x0396, 0x03B6], [0x0397, 0x03B7], [0x0398, 0x03B8], [0x0399, 0x03B9], [0x039A, 0x03BA], [0x039B, 0x03BB], [0x039C, 0x03BC], [0x039D, 0x03BD], [0x039E, 0x03BE], [0x039F, 0x03BF], [0x03A0, 0x03C0], [0x03A1, 0x03C1], [0x03A4, 0x03C4], [0x03A5, 0x03C5], [0x03A6, 0x03C6], [0x03A7, 0x03C7], [0x03A8, 0x03C8], [0x03A9, 0x03C9], [0x03AA, 0x03CA], [0x03AB, 0x03CB], [0x03CF, 0x03D7], [0x03D8, 0x03D9], [0x03DA, 0x03DB], [0x03DC, 0x03DD], [0x03DE, 0x03DF], [0x03E0, 0x03E1], [0x03E2, 0x03E3], [0x03E4, 0x03E5], [0x03E6, 0x03E7], [0x03E8, 0x03E9], [0x03EA, 0x03EB], [0x03EC, 0x03ED], [0x03EE, 0x03EF], [0x03F4, 0x03B8], [0x03F7, 0x03F8], [0x03F9, 0x03F2], [0x03FA, 0x03FB], [0x03FD, 0x037B], [0x03FE, 0x037C], [0x03FF, 0x037D], [0x0400, 0x0450], [0x0401, 0x0451], [0x0402, 0x0452], [0x0403, 0x0453], [0x0404, 0x0454], [0x0405, 0x0455], [0x0406, 0x0456], [0x0407, 0x0457], [0x0408, 0x0458], [0x0409, 0x0459], [0x040A, 0x045A], [0x040B, 0x045B], [0x040C, 0x045C], [0x040D, 0x045D], [0x040E, 0x045E], [0x040F, 0x045F], [0x0410, 0x0430], [0x0411, 0x0431], [0x0412, 0x0432], [0x0413, 0x0433], [0x0414, 0x0434], [0x0415, 0x0435], [0x0416, 0x0436], [0x0417, 0x0437], [0x0418, 0x0438], [0x0419, 0x0439], [0x041A, 0x043A], [0x041B, 0x043B], [0x041C, 0x043C], [0x041D, 0x043D], [0x041E, 0x043E], [0x041F, 0x043F], [0x0420, 0x0440], [0x0421, 0x0441], [0x0422, 0x0442], [0x0423, 0x0443], [0x0424, 0x0444], [0x0425, 0x0445], [0x0426, 0x0446], [0x0427, 0x0447], [0x0428, 0x0448], [0x0429, 0x0449], [0x042A, 0x044A], [0x042B, 0x044B], [0x042C, 0x044C], [0x042D, 0x044D], [0x042E, 0x044E], [0x042F, 0x044F], [0x0460, 0x0461], [0x0462, 0x0463], [0x0464, 0x0465], [0x0466, 0x0467], [0x0468, 0x0469], [0x046A, 0x046B], [0x046C, 0x046D], [0x046E, 0x046F], [0x0470, 0x0471], [0x0472, 0x0473], [0x0474, 0x0475], [0x0476, 0x0477], [0x0478, 0x0479], [0x047A, 0x047B], [0x047C, 0x047D], [0x047E, 0x047F], [0x0480, 0x0481], [0x048A, 0x048B], [0x048C, 0x048D], [0x048E, 0x048F], [0x0490, 0x0491], [0x0492, 0x0493], [0x0494, 0x0495], [0x0496, 0x0497], [0x0498, 0x0499], [0x049A, 0x049B], [0x049C, 0x049D], [0x049E, 0x049F], [0x04A0, 0x04A1], [0x04A2, 0x04A3], [0x04A4, 0x04A5], [0x04A6, 0x04A7], [0x04A8, 0x04A9], [0x04AA, 0x04AB], [0x04AC, 0x04AD], [0x04AE, 0x04AF], [0x04B0, 0x04B1], [0x04B2, 0x04B3], [0x04B4, 0x04B5], [0x04B6, 0x04B7], [0x04B8, 0x04B9], [0x04BA, 0x04BB], [0x04BC, 0x04BD], [0x04BE, 0x04BF], [0x04C0, 0x04CF], [0x04C1, 0x04C2], [0x04C3, 0x04C4], [0x04C5, 0x04C6], [0x04C7, 0x04C8], [0x04C9, 0x04CA], [0x04CB, 0x04CC], [0x04CD, 0x04CE], [0x04D0, 0x04D1], [0x04D2, 0x04D3], [0x04D4, 0x04D5], [0x04D6, 0x04D7], [0x04D8, 0x04D9], [0x04DA, 0x04DB], [0x04DC, 0x04DD], [0x04DE, 0x04DF], [0x04E0, 0x04E1], [0x04E2, 0x04E3], [0x04E4, 0x04E5], [0x04E6, 0x04E7], [0x04E8, 0x04E9], [0x04EA, 0x04EB], [0x04EC, 0x04ED], [0x04EE, 0x04EF], [0x04F0, 0x04F1], [0x04F2, 0x04F3], [0x04F4, 0x04F5], [0x04F6, 0x04F7], [0x04F8, 0x04F9], [0x04FA, 0x04FB], [0x04FC, 0x04FD], [0x04FE, 0x04FF], [0x0500, 0x0501], [0x0502, 0x0503], [0x0504, 0x0505], [0x0506, 0x0507], [0x0508, 0x0509], [0x050A, 0x050B], [0x050C, 0x050D], [0x050E, 0x050F], [0x0510, 0x0511], [0x0512, 0x0513], [0x0514, 0x0515], [0x0516, 0x0517], [0x0518, 0x0519], [0x051A, 0x051B], [0x051C, 0x051D], [0x051E, 0x051F], [0x0520, 0x0521], [0x0522, 0x0523], [0x0531, 0x0561], [0x0532, 0x0562], [0x0533, 0x0563], [0x0534, 0x0564], [0x0535, 0x0565], [0x0536, 0x0566], [0x0537, 0x0567], [0x0538, 0x0568], [0x0539, 0x0569], [0x053A, 0x056A], [0x053B, 0x056B], [0x053C, 0x056C], [0x053D, 0x056D], [0x053E, 0x056E], [0x053F, 0x056F], [0x0540, 0x0570], [0x0541, 0x0571], [0x0542, 0x0572], [0x0543, 0x0573], [0x0544, 0x0574], [0x0545, 0x0575], [0x0546, 0x0576], [0x0547, 0x0577], [0x0548, 0x0578], [0x0549, 0x0579], [0x054A, 0x057A], [0x054B, 0x057B], [0x054C, 0x057C], [0x054D, 0x057D], [0x054E, 0x057E], [0x054F, 0x057F], [0x0550, 0x0580], [0x0551, 0x0581], [0x0552, 0x0582], [0x0553, 0x0583], [0x0554, 0x0584], [0x0555, 0x0585], [0x0556, 0x0586], [0x10A0, 0x2D00], [0x10A1, 0x2D01], [0x10A2, 0x2D02], [0x10A3, 0x2D03], [0x10A4, 0x2D04], [0x10A5, 0x2D05], [0x10A6, 0x2D06], [0x10A7, 0x2D07], [0x10A8, 0x2D08], [0x10A9, 0x2D09], [0x10AA, 0x2D0A], [0x10AB, 0x2D0B], [0x10AC, 0x2D0C], [0x10AD, 0x2D0D], [0x10AE, 0x2D0E], [0x10AF, 0x2D0F], [0x10B0, 0x2D10], [0x10B1, 0x2D11], [0x10B2, 0x2D12], [0x10B3, 0x2D13], [0x10B4, 0x2D14], [0x10B5, 0x2D15], [0x10B6, 0x2D16], [0x10B7, 0x2D17], [0x10B8, 0x2D18], [0x10B9, 0x2D19], [0x10BA, 0x2D1A], [0x10BB, 0x2D1B], [0x10BC, 0x2D1C], [0x10BD, 0x2D1D], [0x10BE, 0x2D1E], [0x10BF, 0x2D1F], [0x10C0, 0x2D20], [0x10C1, 0x2D21], [0x10C2, 0x2D22], [0x10C3, 0x2D23], [0x10C4, 0x2D24], [0x10C5, 0x2D25], [0x1E00, 0x1E01], [0x1E02, 0x1E03], [0x1E04, 0x1E05], [0x1E06, 0x1E07], [0x1E08, 0x1E09], [0x1E0A, 0x1E0B], [0x1E0C, 0x1E0D], [0x1E0E, 0x1E0F], [0x1E10, 0x1E11], [0x1E12, 0x1E13], [0x1E14, 0x1E15], [0x1E16, 0x1E17], [0x1E18, 0x1E19], [0x1E1A, 0x1E1B], [0x1E1C, 0x1E1D], [0x1E1E, 0x1E1F], [0x1E20, 0x1E21], [0x1E22, 0x1E23], [0x1E24, 0x1E25], [0x1E26, 0x1E27], [0x1E28, 0x1E29], [0x1E2A, 0x1E2B], [0x1E2C, 0x1E2D], [0x1E2E, 0x1E2F], [0x1E30, 0x1E31], [0x1E32, 0x1E33], [0x1E34, 0x1E35], [0x1E36, 0x1E37], [0x1E38, 0x1E39], [0x1E3A, 0x1E3B], [0x1E3C, 0x1E3D], [0x1E3E, 0x1E3F], [0x1E40, 0x1E41], [0x1E42, 0x1E43], [0x1E44, 0x1E45], [0x1E46, 0x1E47], [0x1E48, 0x1E49], [0x1E4A, 0x1E4B], [0x1E4C, 0x1E4D], [0x1E4E, 0x1E4F], [0x1E50, 0x1E51], [0x1E52, 0x1E53], [0x1E54, 0x1E55], [0x1E56, 0x1E57], [0x1E58, 0x1E59], [0x1E5A, 0x1E5B], [0x1E5C, 0x1E5D], [0x1E5E, 0x1E5F], [0x1E60, 0x1E61], [0x1E62, 0x1E63], [0x1E64, 0x1E65], [0x1E66, 0x1E67], [0x1E68, 0x1E69], [0x1E6A, 0x1E6B], [0x1E6C, 0x1E6D], [0x1E6E, 0x1E6F], [0x1E70, 0x1E71], [0x1E72, 0x1E73], [0x1E74, 0x1E75], [0x1E76, 0x1E77], [0x1E78, 0x1E79], [0x1E7A, 0x1E7B], [0x1E7C, 0x1E7D], [0x1E7E, 0x1E7F], [0x1E80, 0x1E81], [0x1E82, 0x1E83], [0x1E84, 0x1E85], [0x1E86, 0x1E87], [0x1E88, 0x1E89], [0x1E8A, 0x1E8B], [0x1E8C, 0x1E8D], [0x1E8E, 0x1E8F], [0x1E90, 0x1E91], [0x1E92, 0x1E93], [0x1E94, 0x1E95], [0x1E9E, 0x00DF], [0x1EA0, 0x1EA1], [0x1EA2, 0x1EA3], [0x1EA4, 0x1EA5], [0x1EA6, 0x1EA7], [0x1EA8, 0x1EA9], [0x1EAA, 0x1EAB], [0x1EAC, 0x1EAD], [0x1EAE, 0x1EAF], [0x1EB0, 0x1EB1], [0x1EB2, 0x1EB3], [0x1EB4, 0x1EB5], [0x1EB6, 0x1EB7], [0x1EB8, 0x1EB9], [0x1EBA, 0x1EBB], [0x1EBC, 0x1EBD], [0x1EBE, 0x1EBF], [0x1EC0, 0x1EC1], [0x1EC2, 0x1EC3], [0x1EC4, 0x1EC5], [0x1EC6, 0x1EC7], [0x1EC8, 0x1EC9], [0x1ECA, 0x1ECB], [0x1ECC, 0x1ECD], [0x1ECE, 0x1ECF], [0x1ED0, 0x1ED1], [0x1ED2, 0x1ED3], [0x1ED4, 0x1ED5], [0x1ED6, 0x1ED7], [0x1ED8, 0x1ED9], [0x1EDA, 0x1EDB], [0x1EDC, 0x1EDD], [0x1EDE, 0x1EDF], [0x1EE0, 0x1EE1], [0x1EE2, 0x1EE3], [0x1EE4, 0x1EE5], [0x1EE6, 0x1EE7], [0x1EE8, 0x1EE9], [0x1EEA, 0x1EEB], [0x1EEC, 0x1EED], [0x1EEE, 0x1EEF], [0x1EF0, 0x1EF1], [0x1EF2, 0x1EF3], [0x1EF4, 0x1EF5], [0x1EF6, 0x1EF7], [0x1EF8, 0x1EF9], [0x1EFA, 0x1EFB], [0x1EFC, 0x1EFD], [0x1EFE, 0x1EFF], [0x1F08, 0x1F00], [0x1F09, 0x1F01], [0x1F0A, 0x1F02], [0x1F0B, 0x1F03], [0x1F0C, 0x1F04], [0x1F0D, 0x1F05], [0x1F0E, 0x1F06], [0x1F0F, 0x1F07], [0x1F18, 0x1F10], [0x1F19, 0x1F11], [0x1F1A, 0x1F12], [0x1F1B, 0x1F13], [0x1F1C, 0x1F14], [0x1F1D, 0x1F15], [0x1F28, 0x1F20], [0x1F29, 0x1F21], [0x1F2A, 0x1F22], [0x1F2B, 0x1F23], [0x1F2C, 0x1F24], [0x1F2D, 0x1F25], [0x1F2E, 0x1F26], [0x1F2F, 0x1F27], [0x1F38, 0x1F30], [0x1F39, 0x1F31], [0x1F3A, 0x1F32], [0x1F3B, 0x1F33], [0x1F3C, 0x1F34], [0x1F3D, 0x1F35], [0x1F3E, 0x1F36], [0x1F3F, 0x1F37], [0x1F48, 0x1F40], [0x1F49, 0x1F41], [0x1F4A, 0x1F42], [0x1F4B, 0x1F43], [0x1F4C, 0x1F44], [0x1F4D, 0x1F45], [0x1F59, 0x1F51], [0x1F5B, 0x1F53], [0x1F5D, 0x1F55], [0x1F5F, 0x1F57], [0x1F68, 0x1F60], [0x1F69, 0x1F61], [0x1F6A, 0x1F62], [0x1F6B, 0x1F63], [0x1F6C, 0x1F64], [0x1F6D, 0x1F65], [0x1F6E, 0x1F66], [0x1F6F, 0x1F67], [0x1FB8, 0x1FB0], [0x1FB9, 0x1FB1], [0x1FBA, 0x1F70], [0x1FBB, 0x1F71], [0x1FC8, 0x1F72], [0x1FC9, 0x1F73], [0x1FCA, 0x1F74], [0x1FCB, 0x1F75], [0x1FD8, 0x1FD0], [0x1FD9, 0x1FD1], [0x1FDA, 0x1F76], [0x1FDB, 0x1F77], [0x1FE8, 0x1FE0], [0x1FE9, 0x1FE1], [0x1FEA, 0x1F7A], [0x1FEB, 0x1F7B], [0x1FEC, 0x1FE5], [0x1FF8, 0x1F78], [0x1FF9, 0x1F79], [0x1FFA, 0x1F7C], [0x1FFB, 0x1F7D], [0x2126, 0x03C9], [0x212A, 0x006B], [0x212B, 0x00E5], [0x2132, 0x214E], [0x2160, 0x2170], [0x2161, 0x2171], [0x2162, 0x2172], [0x2163, 0x2173], [0x2164, 0x2174], [0x2165, 0x2175], [0x2166, 0x2176], [0x2167, 0x2177], [0x2168, 0x2178], [0x2169, 0x2179], [0x216A, 0x217A], [0x216B, 0x217B], [0x216C, 0x217C], [0x216D, 0x217D], [0x216E, 0x217E], [0x216F, 0x217F], [0x2183, 0x2184], [0x24B6, 0x24D0], [0x24B7, 0x24D1], [0x24B8, 0x24D2], [0x24B9, 0x24D3], [0x24BA, 0x24D4], [0x24BB, 0x24D5], [0x24BC, 0x24D6], [0x24BD, 0x24D7], [0x24BE, 0x24D8], [0x24BF, 0x24D9], [0x24C0, 0x24DA], [0x24C1, 0x24DB], [0x24C2, 0x24DC], [0x24C3, 0x24DD], [0x24C4, 0x24DE], [0x24C5, 0x24DF], [0x24C6, 0x24E0], [0x24C7, 0x24E1], [0x24C8, 0x24E2], [0x24C9, 0x24E3], [0x24CA, 0x24E4], [0x24CB, 0x24E5], [0x24CC, 0x24E6], [0x24CD, 0x24E7], [0x24CE, 0x24E8], [0x24CF, 0x24E9], [0x2C00, 0x2C30], [0x2C01, 0x2C31], [0x2C02, 0x2C32], [0x2C03, 0x2C33], [0x2C04, 0x2C34], [0x2C05, 0x2C35], [0x2C06, 0x2C36], [0x2C07, 0x2C37], [0x2C08, 0x2C38], [0x2C09, 0x2C39], [0x2C0A, 0x2C3A], [0x2C0B, 0x2C3B], [0x2C0C, 0x2C3C], [0x2C0D, 0x2C3D], [0x2C0E, 0x2C3E], [0x2C0F, 0x2C3F], [0x2C10, 0x2C40], [0x2C11, 0x2C41], [0x2C12, 0x2C42], [0x2C13, 0x2C43], [0x2C14, 0x2C44], [0x2C15, 0x2C45], [0x2C16, 0x2C46], [0x2C17, 0x2C47], [0x2C18, 0x2C48], [0x2C19, 0x2C49], [0x2C1A, 0x2C4A], [0x2C1B, 0x2C4B], [0x2C1C, 0x2C4C], [0x2C1D, 0x2C4D], [0x2C1E, 0x2C4E], [0x2C1F, 0x2C4F], [0x2C20, 0x2C50], [0x2C21, 0x2C51], [0x2C22, 0x2C52], [0x2C23, 0x2C53], [0x2C24, 0x2C54], [0x2C25, 0x2C55], [0x2C26, 0x2C56], [0x2C27, 0x2C57], [0x2C28, 0x2C58], [0x2C29, 0x2C59], [0x2C2A, 0x2C5A], [0x2C2B, 0x2C5B], [0x2C2C, 0x2C5C], [0x2C2D, 0x2C5D], [0x2C2E, 0x2C5E], [0x2C60, 0x2C61], [0x2C62, 0x026B], [0x2C63, 0x1D7D], [0x2C64, 0x027D], [0x2C67, 0x2C68], [0x2C69, 0x2C6A], [0x2C6B, 0x2C6C], [0x2C6D, 0x0251], [0x2C6E, 0x0271], [0x2C6F, 0x0250], [0x2C72, 0x2C73], [0x2C75, 0x2C76], [0x2C80, 0x2C81], [0x2C82, 0x2C83], [0x2C84, 0x2C85], [0x2C86, 0x2C87], [0x2C88, 0x2C89], [0x2C8A, 0x2C8B], [0x2C8C, 0x2C8D], [0x2C8E, 0x2C8F], [0x2C90, 0x2C91], [0x2C92, 0x2C93], [0x2C94, 0x2C95], [0x2C96, 0x2C97], [0x2C98, 0x2C99], [0x2C9A, 0x2C9B], [0x2C9C, 0x2C9D], [0x2C9E, 0x2C9F], [0x2CA0, 0x2CA1], [0x2CA2, 0x2CA3], [0x2CA4, 0x2CA5], [0x2CA6, 0x2CA7], [0x2CA8, 0x2CA9], [0x2CAA, 0x2CAB], [0x2CAC, 0x2CAD], [0x2CAE, 0x2CAF], [0x2CB0, 0x2CB1], [0x2CB2, 0x2CB3], [0x2CB4, 0x2CB5], [0x2CB6, 0x2CB7], [0x2CB8, 0x2CB9], [0x2CBA, 0x2CBB], [0x2CBC, 0x2CBD], [0x2CBE, 0x2CBF], [0x2CC0, 0x2CC1], [0x2CC2, 0x2CC3], [0x2CC4, 0x2CC5], [0x2CC6, 0x2CC7], [0x2CC8, 0x2CC9], [0x2CCA, 0x2CCB], [0x2CCC, 0x2CCD], [0x2CCE, 0x2CCF], [0x2CD0, 0x2CD1], [0x2CD2, 0x2CD3], [0x2CD4, 0x2CD5], [0x2CD6, 0x2CD7], [0x2CD8, 0x2CD9], [0x2CDA, 0x2CDB], [0x2CDC, 0x2CDD], [0x2CDE, 0x2CDF], [0x2CE0, 0x2CE1], [0x2CE2, 0x2CE3], [0xA640, 0xA641], [0xA642, 0xA643], [0xA644, 0xA645], [0xA646, 0xA647], [0xA648, 0xA649], [0xA64A, 0xA64B], [0xA64C, 0xA64D], [0xA64E, 0xA64F], [0xA650, 0xA651], [0xA652, 0xA653], [0xA654, 0xA655], [0xA656, 0xA657], [0xA658, 0xA659], [0xA65A, 0xA65B], [0xA65C, 0xA65D], [0xA65E, 0xA65F], [0xA662, 0xA663], [0xA664, 0xA665], [0xA666, 0xA667], [0xA668, 0xA669], [0xA66A, 0xA66B], [0xA66C, 0xA66D], [0xA680, 0xA681], [0xA682, 0xA683], [0xA684, 0xA685], [0xA686, 0xA687], [0xA688, 0xA689], [0xA68A, 0xA68B], [0xA68C, 0xA68D], [0xA68E, 0xA68F], [0xA690, 0xA691], [0xA692, 0xA693], [0xA694, 0xA695], [0xA696, 0xA697], [0xA722, 0xA723], [0xA724, 0xA725], [0xA726, 0xA727], [0xA728, 0xA729], [0xA72A, 0xA72B], [0xA72C, 0xA72D], [0xA72E, 0xA72F], [0xA732, 0xA733], [0xA734, 0xA735], [0xA736, 0xA737], [0xA738, 0xA739], [0xA73A, 0xA73B], [0xA73C, 0xA73D], [0xA73E, 0xA73F], [0xA740, 0xA741], [0xA742, 0xA743], [0xA744, 0xA745], [0xA746, 0xA747], [0xA748, 0xA749], [0xA74A, 0xA74B], [0xA74C, 0xA74D], [0xA74E, 0xA74F], [0xA750, 0xA751], [0xA752, 0xA753], [0xA754, 0xA755], [0xA756, 0xA757], [0xA758, 0xA759], [0xA75A, 0xA75B], [0xA75C, 0xA75D], [0xA75E, 0xA75F], [0xA760, 0xA761], [0xA762, 0xA763], [0xA764, 0xA765], [0xA766, 0xA767], [0xA768, 0xA769], [0xA76A, 0xA76B], [0xA76C, 0xA76D], [0xA76E, 0xA76F], [0xA779, 0xA77A], [0xA77B, 0xA77C], [0xA77D, 0x1D79], [0xA77E, 0xA77F], [0xA780, 0xA781], [0xA782, 0xA783], [0xA784, 0xA785], [0xA786, 0xA787], [0xA78B, 0xA78C], [0xFF21, 0xFF41], [0xFF22, 0xFF42], [0xFF23, 0xFF43], [0xFF24, 0xFF44], [0xFF25, 0xFF45], [0xFF26, 0xFF46], [0xFF27, 0xFF47], [0xFF28, 0xFF48], [0xFF29, 0xFF49], [0xFF2A, 0xFF4A], [0xFF2B, 0xFF4B], [0xFF2C, 0xFF4C], [0xFF2D, 0xFF4D], [0xFF2E, 0xFF4E], [0xFF2F, 0xFF4F], [0xFF30, 0xFF50], [0xFF31, 0xFF51], [0xFF32, 0xFF52], [0xFF33, 0xFF53], [0xFF34, 0xFF54], [0xFF35, 0xFF55], [0xFF36, 0xFF56], [0xFF37, 0xFF57], [0xFF38, 0xFF58], [0xFF39, 0xFF59], [0xFF3A, 0xFF5A]]; - -errorCount = 0; -count = 0; - -for (index = 0; index < LowerCase.length; index++) { - var capitalI = LowerCase[index][0]; - var capitalS = String.fromCharCode(capitalI); - var smallI = LowerCase[index][1]; - var smallS = String.fromCharCode(smallI); - if (capitalS.toLowerCase() !== smallS) { - var hexC = decimalToHexString(capitalI); - var hexS = decimalToHexString(smallI); - $ERROR('#' + hexC + '->' + hexS + ' '); - errorCount++; - } - count++; -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_510/S15.5.4.16_A2.js b/tests/ES3/Unicode/Unicode_510/S15.5.4.16_A2.js deleted file mode 100644 index 4aae14fcb..000000000 --- a/tests/ES3/Unicode/Unicode_510/S15.5.4.16_A2.js +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.16_A2; -* @section: 15.5.4.16; -* @assertion: The characters in SpecialCasings.txt are converted by multi-character results; -* @description: Complex test; -*/ - -//CHECK -LowerSpecialCase = [["\u0130", "\u0069\u0307"], ["\u1F88", "\u1F80"], ["\u1F89", "\u1F81"], ["\u1F8A", "\u1F82"], ["\u1F8B", "\u1F83"], ["\u1F8C", "\u1F84"], ["\u1F8D", "\u1F85"], ["\u1F8E", "\u1F86"], ["\u1F8F", "\u1F87"], ["\u1F98", "\u1F90"], ["\u1F99", "\u1F91"], ["\u1F9A", "\u1F92"], ["\u1F9B", "\u1F93"], ["\u1F9C", "\u1F94"], ["\u1F9D", "\u1F95"], ["\u1F9E", "\u1F96"], ["\u1F9F", "\u1F97"], ["\u1FA8", "\u1FA0"], ["\u1FA9", "\u1FA1"], ["\u1FAA", "\u1FA2"], ["\u1FAB", "\u1FA3"], ["\u1FAC", "\u1FA4"], ["\u1FAD", "\u1FA5"], ["\u1FAE", "\u1FA6"], ["\u1FAF", "\u1FA7"], ["\u1FBC", "\u1FB3"], ["\u1FCC", "\u1FC3"], ["\u1FFC", "\u1FF3"], ["\u03A3", "\u03C2"], ["\u0049", "\u0069\u0307"], ["\u004A", "\u006A\u0307"], ["\u012E", "\u012F\u0307"], ["\u00CC", "\u0069\u0307\u0300"], ["\u00CD", "\u0069\u0307\u0301"], ["\u0128", "\u0069\u0307\u0303"]]; - -errorCount = 0; -count = 0; - -for (index = 0; index < LowerSpecialCase.length; index++) { - var capitalI = LowerSpecialCase[index][0]; - var capitalS = String.fromCharCode(capitalI); - var smallI = LowerSpecialCase[index][1]; - var smallS = String.fromCharCode(smallI); - if (capitalS.toLowerCase() !== smallS) { - var hexC = decimalToHexString(capitalI); - var hexS = decimalToHexString(smallI); - $ERROR('#' + hexC + '->' + hexS + ' '); - errorCount++; - } - count++; -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_510/S15.5.4.18_A1.js b/tests/ES3/Unicode/Unicode_510/S15.5.4.18_A1.js deleted file mode 100644 index ded8f7175..000000000 --- a/tests/ES3/Unicode/Unicode_510/S15.5.4.18_A1.js +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.18_A1; -* @section: 15.5.4.18; -* @assertion: The characters in UnicodeData.txt, but not in SpecialCasings.txt are converted one by one; -* @description: Complex test; -*/ - -//CHECK -UpperCase = [[0x0061, 0x0041], [0x0062, 0x0042], [0x0063, 0x0043], [0x0064, 0x0044], [0x0065, 0x0045], [0x0066, 0x0046], [0x0067, 0x0047], [0x0068, 0x0048], [0x006A, 0x004A], [0x006B, 0x004B], [0x006C, 0x004C], [0x006D, 0x004D], [0x006E, 0x004E], [0x006F, 0x004F], [0x0070, 0x0050], [0x0071, 0x0051], [0x0072, 0x0052], [0x0073, 0x0053], [0x0074, 0x0054], [0x0075, 0x0055], [0x0076, 0x0056], [0x0077, 0x0057], [0x0078, 0x0058], [0x0079, 0x0059], [0x007A, 0x005A], [0x00B5, 0x039C], [0x00E0, 0x00C0], [0x00E1, 0x00C1], [0x00E2, 0x00C2], [0x00E3, 0x00C3], [0x00E4, 0x00C4], [0x00E5, 0x00C5], [0x00E6, 0x00C6], [0x00E7, 0x00C7], [0x00E8, 0x00C8], [0x00E9, 0x00C9], [0x00EA, 0x00CA], [0x00EB, 0x00CB], [0x00EC, 0x00CC], [0x00ED, 0x00CD], [0x00EE, 0x00CE], [0x00EF, 0x00CF], [0x00F0, 0x00D0], [0x00F1, 0x00D1], [0x00F2, 0x00D2], [0x00F3, 0x00D3], [0x00F4, 0x00D4], [0x00F5, 0x00D5], [0x00F6, 0x00D6], [0x00F8, 0x00D8], [0x00F9, 0x00D9], [0x00FA, 0x00DA], [0x00FB, 0x00DB], [0x00FC, 0x00DC], [0x00FD, 0x00DD], [0x00FE, 0x00DE], [0x00FF, 0x0178], [0x0101, 0x0100], [0x0103, 0x0102], [0x0105, 0x0104], [0x0107, 0x0106], [0x0109, 0x0108], [0x010B, 0x010A], [0x010D, 0x010C], [0x010F, 0x010E], [0x0111, 0x0110], [0x0113, 0x0112], [0x0115, 0x0114], [0x0117, 0x0116], [0x0119, 0x0118], [0x011B, 0x011A], [0x011D, 0x011C], [0x011F, 0x011E], [0x0121, 0x0120], [0x0123, 0x0122], [0x0125, 0x0124], [0x0127, 0x0126], [0x0129, 0x0128], [0x012B, 0x012A], [0x012D, 0x012C], [0x012F, 0x012E], [0x0131, 0x0049], [0x0133, 0x0132], [0x0135, 0x0134], [0x0137, 0x0136], [0x013A, 0x0139], [0x013C, 0x013B], [0x013E, 0x013D], [0x0140, 0x013F], [0x0142, 0x0141], [0x0144, 0x0143], [0x0146, 0x0145], [0x0148, 0x0147], [0x014B, 0x014A], [0x014D, 0x014C], [0x014F, 0x014E], [0x0151, 0x0150], [0x0153, 0x0152], [0x0155, 0x0154], [0x0157, 0x0156], [0x0159, 0x0158], [0x015B, 0x015A], [0x015D, 0x015C], [0x015F, 0x015E], [0x0161, 0x0160], [0x0163, 0x0162], [0x0165, 0x0164], [0x0167, 0x0166], [0x0169, 0x0168], [0x016B, 0x016A], [0x016D, 0x016C], [0x016F, 0x016E], [0x0171, 0x0170], [0x0173, 0x0172], [0x0175, 0x0174], [0x0177, 0x0176], [0x017A, 0x0179], [0x017C, 0x017B], [0x017E, 0x017D], [0x017F, 0x0053], [0x0180, 0x0243], [0x0183, 0x0182], [0x0185, 0x0184], [0x0188, 0x0187], [0x018C, 0x018B], [0x0192, 0x0191], [0x0195, 0x01F6], [0x0199, 0x0198], [0x019A, 0x023D], [0x019E, 0x0220], [0x01A1, 0x01A0], [0x01A3, 0x01A2], [0x01A5, 0x01A4], [0x01A8, 0x01A7], [0x01AD, 0x01AC], [0x01B0, 0x01AF], [0x01B4, 0x01B3], [0x01B6, 0x01B5], [0x01B9, 0x01B8], [0x01BD, 0x01BC], [0x01BF, 0x01F7], [0x01C5, 0x01C4], [0x01C6, 0x01C4], [0x01C8, 0x01C7], [0x01C9, 0x01C7], [0x01CB, 0x01CA], [0x01CC, 0x01CA], [0x01CE, 0x01CD], [0x01D0, 0x01CF], [0x01D2, 0x01D1], [0x01D4, 0x01D3], [0x01D6, 0x01D5], [0x01D8, 0x01D7], [0x01DA, 0x01D9], [0x01DC, 0x01DB], [0x01DD, 0x018E], [0x01DF, 0x01DE], [0x01E1, 0x01E0], [0x01E3, 0x01E2], [0x01E5, 0x01E4], [0x01E7, 0x01E6], [0x01E9, 0x01E8], [0x01EB, 0x01EA], [0x01ED, 0x01EC], [0x01EF, 0x01EE], [0x01F2, 0x01F1], [0x01F3, 0x01F1], [0x01F5, 0x01F4], [0x01F9, 0x01F8], [0x01FB, 0x01FA], [0x01FD, 0x01FC], [0x01FF, 0x01FE], [0x0201, 0x0200], [0x0203, 0x0202], [0x0205, 0x0204], [0x0207, 0x0206], [0x0209, 0x0208], [0x020B, 0x020A], [0x020D, 0x020C], [0x020F, 0x020E], [0x0211, 0x0210], [0x0213, 0x0212], [0x0215, 0x0214], [0x0217, 0x0216], [0x0219, 0x0218], [0x021B, 0x021A], [0x021D, 0x021C], [0x021F, 0x021E], [0x0223, 0x0222], [0x0225, 0x0224], [0x0227, 0x0226], [0x0229, 0x0228], [0x022B, 0x022A], [0x022D, 0x022C], [0x022F, 0x022E], [0x0231, 0x0230], [0x0233, 0x0232], [0x023C, 0x023B], [0x0242, 0x0241], [0x0247, 0x0246], [0x0249, 0x0248], [0x024B, 0x024A], [0x024D, 0x024C], [0x024F, 0x024E], [0x0250, 0x2C6F], [0x0251, 0x2C6D], [0x0253, 0x0181], [0x0254, 0x0186], [0x0256, 0x0189], [0x0257, 0x018A], [0x0259, 0x018F], [0x025B, 0x0190], [0x0260, 0x0193], [0x0263, 0x0194], [0x0268, 0x0197], [0x0269, 0x0196], [0x026B, 0x2C62], [0x026F, 0x019C], [0x0271, 0x2C6E], [0x0272, 0x019D], [0x0275, 0x019F], [0x027D, 0x2C64], [0x0280, 0x01A6], [0x0283, 0x01A9], [0x0288, 0x01AE], [0x0289, 0x0244], [0x028A, 0x01B1], [0x028B, 0x01B2], [0x028C, 0x0245], [0x0292, 0x01B7], [0x0345, 0x0399], [0x0371, 0x0370], [0x0373, 0x0372], [0x0377, 0x0376], [0x037B, 0x03FD], [0x037C, 0x03FE], [0x037D, 0x03FF], [0x03AC, 0x0386], [0x03AD, 0x0388], [0x03AE, 0x0389], [0x03AF, 0x038A], [0x03B1, 0x0391], [0x03B2, 0x0392], [0x03B3, 0x0393], [0x03B4, 0x0394], [0x03B5, 0x0395], [0x03B6, 0x0396], [0x03B7, 0x0397], [0x03B8, 0x0398], [0x03B9, 0x0399], [0x03BA, 0x039A], [0x03BB, 0x039B], [0x03BC, 0x039C], [0x03BD, 0x039D], [0x03BE, 0x039E], [0x03BF, 0x039F], [0x03C0, 0x03A0], [0x03C1, 0x03A1], [0x03C2, 0x03A3], [0x03C3, 0x03A3], [0x03C4, 0x03A4], [0x03C5, 0x03A5], [0x03C6, 0x03A6], [0x03C7, 0x03A7], [0x03C8, 0x03A8], [0x03C9, 0x03A9], [0x03CA, 0x03AA], [0x03CB, 0x03AB], [0x03CC, 0x038C], [0x03CD, 0x038E], [0x03CE, 0x038F], [0x03D0, 0x0392], [0x03D1, 0x0398], [0x03D5, 0x03A6], [0x03D6, 0x03A0], [0x03D7, 0x03CF], [0x03D9, 0x03D8], [0x03DB, 0x03DA], [0x03DD, 0x03DC], [0x03DF, 0x03DE], [0x03E1, 0x03E0], [0x03E3, 0x03E2], [0x03E5, 0x03E4], [0x03E7, 0x03E6], [0x03E9, 0x03E8], [0x03EB, 0x03EA], [0x03ED, 0x03EC], [0x03EF, 0x03EE], [0x03F0, 0x039A], [0x03F1, 0x03A1], [0x03F2, 0x03F9], [0x03F5, 0x0395], [0x03F8, 0x03F7], [0x03FB, 0x03FA], [0x0430, 0x0410], [0x0431, 0x0411], [0x0432, 0x0412], [0x0433, 0x0413], [0x0434, 0x0414], [0x0435, 0x0415], [0x0436, 0x0416], [0x0437, 0x0417], [0x0438, 0x0418], [0x0439, 0x0419], [0x043A, 0x041A], [0x043B, 0x041B], [0x043C, 0x041C], [0x043D, 0x041D], [0x043E, 0x041E], [0x043F, 0x041F], [0x0440, 0x0420], [0x0441, 0x0421], [0x0442, 0x0422], [0x0443, 0x0423], [0x0444, 0x0424], [0x0445, 0x0425], [0x0446, 0x0426], [0x0447, 0x0427], [0x0448, 0x0428], [0x0449, 0x0429], [0x044A, 0x042A], [0x044B, 0x042B], [0x044C, 0x042C], [0x044D, 0x042D], [0x044E, 0x042E], [0x044F, 0x042F], [0x0450, 0x0400], [0x0451, 0x0401], [0x0452, 0x0402], [0x0453, 0x0403], [0x0454, 0x0404], [0x0455, 0x0405], [0x0456, 0x0406], [0x0457, 0x0407], [0x0458, 0x0408], [0x0459, 0x0409], [0x045A, 0x040A], [0x045B, 0x040B], [0x045C, 0x040C], [0x045D, 0x040D], [0x045E, 0x040E], [0x045F, 0x040F], [0x0461, 0x0460], [0x0463, 0x0462], [0x0465, 0x0464], [0x0467, 0x0466], [0x0469, 0x0468], [0x046B, 0x046A], [0x046D, 0x046C], [0x046F, 0x046E], [0x0471, 0x0470], [0x0473, 0x0472], [0x0475, 0x0474], [0x0477, 0x0476], [0x0479, 0x0478], [0x047B, 0x047A], [0x047D, 0x047C], [0x047F, 0x047E], [0x0481, 0x0480], [0x048B, 0x048A], [0x048D, 0x048C], [0x048F, 0x048E], [0x0491, 0x0490], [0x0493, 0x0492], [0x0495, 0x0494], [0x0497, 0x0496], [0x0499, 0x0498], [0x049B, 0x049A], [0x049D, 0x049C], [0x049F, 0x049E], [0x04A1, 0x04A0], [0x04A3, 0x04A2], [0x04A5, 0x04A4], [0x04A7, 0x04A6], [0x04A9, 0x04A8], [0x04AB, 0x04AA], [0x04AD, 0x04AC], [0x04AF, 0x04AE], [0x04B1, 0x04B0], [0x04B3, 0x04B2], [0x04B5, 0x04B4], [0x04B7, 0x04B6], [0x04B9, 0x04B8], [0x04BB, 0x04BA], [0x04BD, 0x04BC], [0x04BF, 0x04BE], [0x04C2, 0x04C1], [0x04C4, 0x04C3], [0x04C6, 0x04C5], [0x04C8, 0x04C7], [0x04CA, 0x04C9], [0x04CC, 0x04CB], [0x04CE, 0x04CD], [0x04CF, 0x04C0], [0x04D1, 0x04D0], [0x04D3, 0x04D2], [0x04D5, 0x04D4], [0x04D7, 0x04D6], [0x04D9, 0x04D8], [0x04DB, 0x04DA], [0x04DD, 0x04DC], [0x04DF, 0x04DE], [0x04E1, 0x04E0], [0x04E3, 0x04E2], [0x04E5, 0x04E4], [0x04E7, 0x04E6], [0x04E9, 0x04E8], [0x04EB, 0x04EA], [0x04ED, 0x04EC], [0x04EF, 0x04EE], [0x04F1, 0x04F0], [0x04F3, 0x04F2], [0x04F5, 0x04F4], [0x04F7, 0x04F6], [0x04F9, 0x04F8], [0x04FB, 0x04FA], [0x04FD, 0x04FC], [0x04FF, 0x04FE], [0x0501, 0x0500], [0x0503, 0x0502], [0x0505, 0x0504], [0x0507, 0x0506], [0x0509, 0x0508], [0x050B, 0x050A], [0x050D, 0x050C], [0x050F, 0x050E], [0x0511, 0x0510], [0x0513, 0x0512], [0x0515, 0x0514], [0x0517, 0x0516], [0x0519, 0x0518], [0x051B, 0x051A], [0x051D, 0x051C], [0x051F, 0x051E], [0x0521, 0x0520], [0x0523, 0x0522], [0x0561, 0x0531], [0x0562, 0x0532], [0x0563, 0x0533], [0x0564, 0x0534], [0x0565, 0x0535], [0x0566, 0x0536], [0x0567, 0x0537], [0x0568, 0x0538], [0x0569, 0x0539], [0x056A, 0x053A], [0x056B, 0x053B], [0x056C, 0x053C], [0x056D, 0x053D], [0x056E, 0x053E], [0x056F, 0x053F], [0x0570, 0x0540], [0x0571, 0x0541], [0x0572, 0x0542], [0x0573, 0x0543], [0x0574, 0x0544], [0x0575, 0x0545], [0x0576, 0x0546], [0x0577, 0x0547], [0x0578, 0x0548], [0x0579, 0x0549], [0x057A, 0x054A], [0x057B, 0x054B], [0x057C, 0x054C], [0x057D, 0x054D], [0x057E, 0x054E], [0x057F, 0x054F], [0x0580, 0x0550], [0x0581, 0x0551], [0x0582, 0x0552], [0x0583, 0x0553], [0x0584, 0x0554], [0x0585, 0x0555], [0x0586, 0x0556], [0x1D79, 0xA77D], [0x1D7D, 0x2C63], [0x1E01, 0x1E00], [0x1E03, 0x1E02], [0x1E05, 0x1E04], [0x1E07, 0x1E06], [0x1E09, 0x1E08], [0x1E0B, 0x1E0A], [0x1E0D, 0x1E0C], [0x1E0F, 0x1E0E], [0x1E11, 0x1E10], [0x1E13, 0x1E12], [0x1E15, 0x1E14], [0x1E17, 0x1E16], [0x1E19, 0x1E18], [0x1E1B, 0x1E1A], [0x1E1D, 0x1E1C], [0x1E1F, 0x1E1E], [0x1E21, 0x1E20], [0x1E23, 0x1E22], [0x1E25, 0x1E24], [0x1E27, 0x1E26], [0x1E29, 0x1E28], [0x1E2B, 0x1E2A], [0x1E2D, 0x1E2C], [0x1E2F, 0x1E2E], [0x1E31, 0x1E30], [0x1E33, 0x1E32], [0x1E35, 0x1E34], [0x1E37, 0x1E36], [0x1E39, 0x1E38], [0x1E3B, 0x1E3A], [0x1E3D, 0x1E3C], [0x1E3F, 0x1E3E], [0x1E41, 0x1E40], [0x1E43, 0x1E42], [0x1E45, 0x1E44], [0x1E47, 0x1E46], [0x1E49, 0x1E48], [0x1E4B, 0x1E4A], [0x1E4D, 0x1E4C], [0x1E4F, 0x1E4E], [0x1E51, 0x1E50], [0x1E53, 0x1E52], [0x1E55, 0x1E54], [0x1E57, 0x1E56], [0x1E59, 0x1E58], [0x1E5B, 0x1E5A], [0x1E5D, 0x1E5C], [0x1E5F, 0x1E5E], [0x1E61, 0x1E60], [0x1E63, 0x1E62], [0x1E65, 0x1E64], [0x1E67, 0x1E66], [0x1E69, 0x1E68], [0x1E6B, 0x1E6A], [0x1E6D, 0x1E6C], [0x1E6F, 0x1E6E], [0x1E71, 0x1E70], [0x1E73, 0x1E72], [0x1E75, 0x1E74], [0x1E77, 0x1E76], [0x1E79, 0x1E78], [0x1E7B, 0x1E7A], [0x1E7D, 0x1E7C], [0x1E7F, 0x1E7E], [0x1E81, 0x1E80], [0x1E83, 0x1E82], [0x1E85, 0x1E84], [0x1E87, 0x1E86], [0x1E89, 0x1E88], [0x1E8B, 0x1E8A], [0x1E8D, 0x1E8C], [0x1E8F, 0x1E8E], [0x1E91, 0x1E90], [0x1E93, 0x1E92], [0x1E95, 0x1E94], [0x1E9B, 0x1E60], [0x1EA1, 0x1EA0], [0x1EA3, 0x1EA2], [0x1EA5, 0x1EA4], [0x1EA7, 0x1EA6], [0x1EA9, 0x1EA8], [0x1EAB, 0x1EAA], [0x1EAD, 0x1EAC], [0x1EAF, 0x1EAE], [0x1EB1, 0x1EB0], [0x1EB3, 0x1EB2], [0x1EB5, 0x1EB4], [0x1EB7, 0x1EB6], [0x1EB9, 0x1EB8], [0x1EBB, 0x1EBA], [0x1EBD, 0x1EBC], [0x1EBF, 0x1EBE], [0x1EC1, 0x1EC0], [0x1EC3, 0x1EC2], [0x1EC5, 0x1EC4], [0x1EC7, 0x1EC6], [0x1EC9, 0x1EC8], [0x1ECB, 0x1ECA], [0x1ECD, 0x1ECC], [0x1ECF, 0x1ECE], [0x1ED1, 0x1ED0], [0x1ED3, 0x1ED2], [0x1ED5, 0x1ED4], [0x1ED7, 0x1ED6], [0x1ED9, 0x1ED8], [0x1EDB, 0x1EDA], [0x1EDD, 0x1EDC], [0x1EDF, 0x1EDE], [0x1EE1, 0x1EE0], [0x1EE3, 0x1EE2], [0x1EE5, 0x1EE4], [0x1EE7, 0x1EE6], [0x1EE9, 0x1EE8], [0x1EEB, 0x1EEA], [0x1EED, 0x1EEC], [0x1EEF, 0x1EEE], [0x1EF1, 0x1EF0], [0x1EF3, 0x1EF2], [0x1EF5, 0x1EF4], [0x1EF7, 0x1EF6], [0x1EF9, 0x1EF8], [0x1EFB, 0x1EFA], [0x1EFD, 0x1EFC], [0x1EFF, 0x1EFE], [0x1F00, 0x1F08], [0x1F01, 0x1F09], [0x1F02, 0x1F0A], [0x1F03, 0x1F0B], [0x1F04, 0x1F0C], [0x1F05, 0x1F0D], [0x1F06, 0x1F0E], [0x1F07, 0x1F0F], [0x1F10, 0x1F18], [0x1F11, 0x1F19], [0x1F12, 0x1F1A], [0x1F13, 0x1F1B], [0x1F14, 0x1F1C], [0x1F15, 0x1F1D], [0x1F20, 0x1F28], [0x1F21, 0x1F29], [0x1F22, 0x1F2A], [0x1F23, 0x1F2B], [0x1F24, 0x1F2C], [0x1F25, 0x1F2D], [0x1F26, 0x1F2E], [0x1F27, 0x1F2F], [0x1F30, 0x1F38], [0x1F31, 0x1F39], [0x1F32, 0x1F3A], [0x1F33, 0x1F3B], [0x1F34, 0x1F3C], [0x1F35, 0x1F3D], [0x1F36, 0x1F3E], [0x1F37, 0x1F3F], [0x1F40, 0x1F48], [0x1F41, 0x1F49], [0x1F42, 0x1F4A], [0x1F43, 0x1F4B], [0x1F44, 0x1F4C], [0x1F45, 0x1F4D], [0x1F51, 0x1F59], [0x1F53, 0x1F5B], [0x1F55, 0x1F5D], [0x1F57, 0x1F5F], [0x1F60, 0x1F68], [0x1F61, 0x1F69], [0x1F62, 0x1F6A], [0x1F63, 0x1F6B], [0x1F64, 0x1F6C], [0x1F65, 0x1F6D], [0x1F66, 0x1F6E], [0x1F67, 0x1F6F], [0x1F70, 0x1FBA], [0x1F71, 0x1FBB], [0x1F72, 0x1FC8], [0x1F73, 0x1FC9], [0x1F74, 0x1FCA], [0x1F75, 0x1FCB], [0x1F76, 0x1FDA], [0x1F77, 0x1FDB], [0x1F78, 0x1FF8], [0x1F79, 0x1FF9], [0x1F7A, 0x1FEA], [0x1F7B, 0x1FEB], [0x1F7C, 0x1FFA], [0x1F7D, 0x1FFB], [0x1FB0, 0x1FB8], [0x1FB1, 0x1FB9], [0x1FBE, 0x0399], [0x1FD0, 0x1FD8], [0x1FD1, 0x1FD9], [0x1FE0, 0x1FE8], [0x1FE1, 0x1FE9], [0x1FE5, 0x1FEC], [0x214E, 0x2132], [0x2170, 0x2160], [0x2171, 0x2161], [0x2172, 0x2162], [0x2173, 0x2163], [0x2174, 0x2164], [0x2175, 0x2165], [0x2176, 0x2166], [0x2177, 0x2167], [0x2178, 0x2168], [0x2179, 0x2169], [0x217A, 0x216A], [0x217B, 0x216B], [0x217C, 0x216C], [0x217D, 0x216D], [0x217E, 0x216E], [0x217F, 0x216F], [0x2184, 0x2183], [0x24D0, 0x24B6], [0x24D1, 0x24B7], [0x24D2, 0x24B8], [0x24D3, 0x24B9], [0x24D4, 0x24BA], [0x24D5, 0x24BB], [0x24D6, 0x24BC], [0x24D7, 0x24BD], [0x24D8, 0x24BE], [0x24D9, 0x24BF], [0x24DA, 0x24C0], [0x24DB, 0x24C1], [0x24DC, 0x24C2], [0x24DD, 0x24C3], [0x24DE, 0x24C4], [0x24DF, 0x24C5], [0x24E0, 0x24C6], [0x24E1, 0x24C7], [0x24E2, 0x24C8], [0x24E3, 0x24C9], [0x24E4, 0x24CA], [0x24E5, 0x24CB], [0x24E6, 0x24CC], [0x24E7, 0x24CD], [0x24E8, 0x24CE], [0x24E9, 0x24CF], [0x2C30, 0x2C00], [0x2C31, 0x2C01], [0x2C32, 0x2C02], [0x2C33, 0x2C03], [0x2C34, 0x2C04], [0x2C35, 0x2C05], [0x2C36, 0x2C06], [0x2C37, 0x2C07], [0x2C38, 0x2C08], [0x2C39, 0x2C09], [0x2C3A, 0x2C0A], [0x2C3B, 0x2C0B], [0x2C3C, 0x2C0C], [0x2C3D, 0x2C0D], [0x2C3E, 0x2C0E], [0x2C3F, 0x2C0F], [0x2C40, 0x2C10], [0x2C41, 0x2C11], [0x2C42, 0x2C12], [0x2C43, 0x2C13], [0x2C44, 0x2C14], [0x2C45, 0x2C15], [0x2C46, 0x2C16], [0x2C47, 0x2C17], [0x2C48, 0x2C18], [0x2C49, 0x2C19], [0x2C4A, 0x2C1A], [0x2C4B, 0x2C1B], [0x2C4C, 0x2C1C], [0x2C4D, 0x2C1D], [0x2C4E, 0x2C1E], [0x2C4F, 0x2C1F], [0x2C50, 0x2C20], [0x2C51, 0x2C21], [0x2C52, 0x2C22], [0x2C53, 0x2C23], [0x2C54, 0x2C24], [0x2C55, 0x2C25], [0x2C56, 0x2C26], [0x2C57, 0x2C27], [0x2C58, 0x2C28], [0x2C59, 0x2C29], [0x2C5A, 0x2C2A], [0x2C5B, 0x2C2B], [0x2C5C, 0x2C2C], [0x2C5D, 0x2C2D], [0x2C5E, 0x2C2E], [0x2C61, 0x2C60], [0x2C65, 0x023A], [0x2C66, 0x023E], [0x2C68, 0x2C67], [0x2C6A, 0x2C69], [0x2C6C, 0x2C6B], [0x2C73, 0x2C72], [0x2C76, 0x2C75], [0x2C81, 0x2C80], [0x2C83, 0x2C82], [0x2C85, 0x2C84], [0x2C87, 0x2C86], [0x2C89, 0x2C88], [0x2C8B, 0x2C8A], [0x2C8D, 0x2C8C], [0x2C8F, 0x2C8E], [0x2C91, 0x2C90], [0x2C93, 0x2C92], [0x2C95, 0x2C94], [0x2C97, 0x2C96], [0x2C99, 0x2C98], [0x2C9B, 0x2C9A], [0x2C9D, 0x2C9C], [0x2C9F, 0x2C9E], [0x2CA1, 0x2CA0], [0x2CA3, 0x2CA2], [0x2CA5, 0x2CA4], [0x2CA7, 0x2CA6], [0x2CA9, 0x2CA8], [0x2CAB, 0x2CAA], [0x2CAD, 0x2CAC], [0x2CAF, 0x2CAE], [0x2CB1, 0x2CB0], [0x2CB3, 0x2CB2], [0x2CB5, 0x2CB4], [0x2CB7, 0x2CB6], [0x2CB9, 0x2CB8], [0x2CBB, 0x2CBA], [0x2CBD, 0x2CBC], [0x2CBF, 0x2CBE], [0x2CC1, 0x2CC0], [0x2CC3, 0x2CC2], [0x2CC5, 0x2CC4], [0x2CC7, 0x2CC6], [0x2CC9, 0x2CC8], [0x2CCB, 0x2CCA], [0x2CCD, 0x2CCC], [0x2CCF, 0x2CCE], [0x2CD1, 0x2CD0], [0x2CD3, 0x2CD2], [0x2CD5, 0x2CD4], [0x2CD7, 0x2CD6], [0x2CD9, 0x2CD8], [0x2CDB, 0x2CDA], [0x2CDD, 0x2CDC], [0x2CDF, 0x2CDE], [0x2CE1, 0x2CE0], [0x2CE3, 0x2CE2], [0x2D00, 0x10A0], [0x2D01, 0x10A1], [0x2D02, 0x10A2], [0x2D03, 0x10A3], [0x2D04, 0x10A4], [0x2D05, 0x10A5], [0x2D06, 0x10A6], [0x2D07, 0x10A7], [0x2D08, 0x10A8], [0x2D09, 0x10A9], [0x2D0A, 0x10AA], [0x2D0B, 0x10AB], [0x2D0C, 0x10AC], [0x2D0D, 0x10AD], [0x2D0E, 0x10AE], [0x2D0F, 0x10AF], [0x2D10, 0x10B0], [0x2D11, 0x10B1], [0x2D12, 0x10B2], [0x2D13, 0x10B3], [0x2D14, 0x10B4], [0x2D15, 0x10B5], [0x2D16, 0x10B6], [0x2D17, 0x10B7], [0x2D18, 0x10B8], [0x2D19, 0x10B9], [0x2D1A, 0x10BA], [0x2D1B, 0x10BB], [0x2D1C, 0x10BC], [0x2D1D, 0x10BD], [0x2D1E, 0x10BE], [0x2D1F, 0x10BF], [0x2D20, 0x10C0], [0x2D21, 0x10C1], [0x2D22, 0x10C2], [0x2D23, 0x10C3], [0x2D24, 0x10C4], [0x2D25, 0x10C5], [0xA641, 0xA640], [0xA643, 0xA642], [0xA645, 0xA644], [0xA647, 0xA646], [0xA649, 0xA648], [0xA64B, 0xA64A], [0xA64D, 0xA64C], [0xA64F, 0xA64E], [0xA651, 0xA650], [0xA653, 0xA652], [0xA655, 0xA654], [0xA657, 0xA656], [0xA659, 0xA658], [0xA65B, 0xA65A], [0xA65D, 0xA65C], [0xA65F, 0xA65E], [0xA663, 0xA662], [0xA665, 0xA664], [0xA667, 0xA666], [0xA669, 0xA668], [0xA66B, 0xA66A], [0xA66D, 0xA66C], [0xA681, 0xA680], [0xA683, 0xA682], [0xA685, 0xA684], [0xA687, 0xA686], [0xA689, 0xA688], [0xA68B, 0xA68A], [0xA68D, 0xA68C], [0xA68F, 0xA68E], [0xA691, 0xA690], [0xA693, 0xA692], [0xA695, 0xA694], [0xA697, 0xA696], [0xA723, 0xA722], [0xA725, 0xA724], [0xA727, 0xA726], [0xA729, 0xA728], [0xA72B, 0xA72A], [0xA72D, 0xA72C], [0xA72F, 0xA72E], [0xA733, 0xA732], [0xA735, 0xA734], [0xA737, 0xA736], [0xA739, 0xA738], [0xA73B, 0xA73A], [0xA73D, 0xA73C], [0xA73F, 0xA73E], [0xA741, 0xA740], [0xA743, 0xA742], [0xA745, 0xA744], [0xA747, 0xA746], [0xA749, 0xA748], [0xA74B, 0xA74A], [0xA74D, 0xA74C], [0xA74F, 0xA74E], [0xA751, 0xA750], [0xA753, 0xA752], [0xA755, 0xA754], [0xA757, 0xA756], [0xA759, 0xA758], [0xA75B, 0xA75A], [0xA75D, 0xA75C], [0xA75F, 0xA75E], [0xA761, 0xA760], [0xA763, 0xA762], [0xA765, 0xA764], [0xA767, 0xA766], [0xA769, 0xA768], [0xA76B, 0xA76A], [0xA76D, 0xA76C], [0xA76F, 0xA76E], [0xA77A, 0xA779], [0xA77C, 0xA77B], [0xA77F, 0xA77E], [0xA781, 0xA780], [0xA783, 0xA782], [0xA785, 0xA784], [0xA787, 0xA786], [0xA78C, 0xA78B], [0xFF41, 0xFF21], [0xFF42, 0xFF22], [0xFF43, 0xFF23], [0xFF44, 0xFF24], [0xFF45, 0xFF25], [0xFF46, 0xFF26], [0xFF47, 0xFF27], [0xFF48, 0xFF28], [0xFF49, 0xFF29], [0xFF4A, 0xFF2A], [0xFF4B, 0xFF2B], [0xFF4C, 0xFF2C], [0xFF4D, 0xFF2D], [0xFF4E, 0xFF2E], [0xFF4F, 0xFF2F], [0xFF50, 0xFF30], [0xFF51, 0xFF31], [0xFF52, 0xFF32], [0xFF53, 0xFF33], [0xFF54, 0xFF34], [0xFF55, 0xFF35], [0xFF56, 0xFF36], [0xFF57, 0xFF37], [0xFF58, 0xFF38], [0xFF59, 0xFF39], [0xFF5A, 0xFF3A]]; - -errorCount = 0; -count = 0; - -for (index = 0; index < UpperCase.length; index++) { - var capitalI = UpperCase[index][0]; - var capitalS = String.fromCharCode(capitalI); - var smallI = UpperCase[index][1]; - var smallS = String.fromCharCode(smallI); - if (capitalS.toUpperCase() !== smallS) { - var hexC = decimalToHexString(capitalI); - var hexS = decimalToHexString(smallI); - $ERROR('#' + hexC + '->' + hexS + ' '); - errorCount++; - } - count++; -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_510/S15.5.4.18_A2.js b/tests/ES3/Unicode/Unicode_510/S15.5.4.18_A2.js deleted file mode 100644 index 0793f66a0..000000000 --- a/tests/ES3/Unicode/Unicode_510/S15.5.4.18_A2.js +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** -* @name: S15.5.4.18_A2; -* @section: 15.5.4.18; -* @assertion: The characters in SpecialCasings.txt are converted by multi-character results; -* @description: Complex test; -*/ - -//CHECK -UpperSpecialCase = [["\u00DF", "\u0053\u0053"], ["\uFB00", "\u0046\u0046"], ["\uFB01", "\u0046\u0049"], ["\uFB02", "\u0046\u004C"], ["\uFB03", "\u0046\u0046\u0049"], ["\uFB04", "\u0046\u0046\u004C"], ["\uFB05", "\u0053\u0054"], ["\uFB06", "\u0053\u0054"], ["\u0587", "\u0535\u0552"], ["\uFB13", "\u0544\u0546"], ["\uFB14", "\u0544\u0535"], ["\uFB15", "\u0544\u053B"], ["\uFB16", "\u054E\u0546"], ["\uFB17", "\u0544\u053D"], ["\u0149", "\u02BC\u004E"], ["\u0390", "\u0399\u0308\u0301"], ["\u03B0", "\u03A5\u0308\u0301"], ["\u01F0", "\u004A\u030C"], ["\u1E96", "\u0048\u0331"], ["\u1E97", "\u0054\u0308"], ["\u1E98", "\u0057\u030A"], ["\u1E99", "\u0059\u030A"], ["\u1E9A", "\u0041\u02BE"], ["\u1F50", "\u03A5\u0313"], ["\u1F52", "\u03A5\u0313\u0300"], ["\u1F54", "\u03A5\u0313\u0301"], ["\u1F56", "\u03A5\u0313\u0342"], ["\u1FB6", "\u0391\u0342"], ["\u1FC6", "\u0397\u0342"], ["\u1FD2", "\u0399\u0308\u0300"], ["\u1FD3", "\u0399\u0308\u0301"], ["\u1FD6", "\u0399\u0342"], ["\u1FD7", "\u0399\u0308\u0342"], ["\u1FE2", "\u03A5\u0308\u0300"], ["\u1FE3", "\u03A5\u0308\u0301"], ["\u1FE4", "\u03A1\u0313"], ["\u1FE6", "\u03A5\u0342"], ["\u1FE7", "\u03A5\u0308\u0342"], ["\u1FF6", "\u03A9\u0342"], ["\u1F80", "\u1F08\u0399"], ["\u1F81", "\u1F09\u0399"], ["\u1F82", "\u1F0A\u0399"], ["\u1F83", "\u1F0B\u0399"], ["\u1F84", "\u1F0C\u0399"], ["\u1F85", "\u1F0D\u0399"], ["\u1F86", "\u1F0E\u0399"], ["\u1F87", "\u1F0F\u0399"], ["\u1F88", "\u1F08\u0399"], ["\u1F89", "\u1F09\u0399"], ["\u1F8A", "\u1F0A\u0399"], ["\u1F8B", "\u1F0B\u0399"], ["\u1F8C", "\u1F0C\u0399"], ["\u1F8D", "\u1F0D\u0399"], ["\u1F8E", "\u1F0E\u0399"], ["\u1F8F", "\u1F0F\u0399"], ["\u1F90", "\u1F28\u0399"], ["\u1F91", "\u1F29\u0399"], ["\u1F92", "\u1F2A\u0399"], ["\u1F93", "\u1F2B\u0399"], ["\u1F94", "\u1F2C\u0399"], ["\u1F95", "\u1F2D\u0399"], ["\u1F96", "\u1F2E\u0399"], ["\u1F97", "\u1F2F\u0399"], ["\u1F98", "\u1F28\u0399"], ["\u1F99", "\u1F29\u0399"], ["\u1F9A", "\u1F2A\u0399"], ["\u1F9B", "\u1F2B\u0399"], ["\u1F9C", "\u1F2C\u0399"], ["\u1F9D", "\u1F2D\u0399"], ["\u1F9E", "\u1F2E\u0399"], ["\u1F9F", "\u1F2F\u0399"], ["\u1FA0", "\u1F68\u0399"], ["\u1FA1", "\u1F69\u0399"], ["\u1FA2", "\u1F6A\u0399"], ["\u1FA3", "\u1F6B\u0399"], ["\u1FA4", "\u1F6C\u0399"], ["\u1FA5", "\u1F6D\u0399"], ["\u1FA6", "\u1F6E\u0399"], ["\u1FA7", "\u1F6F\u0399"], ["\u1FA8", "\u1F68\u0399"], ["\u1FA9", "\u1F69\u0399"], ["\u1FAA", "\u1F6A\u0399"], ["\u1FAB", "\u1F6B\u0399"], ["\u1FAC", "\u1F6C\u0399"], ["\u1FAD", "\u1F6D\u0399"], ["\u1FAE", "\u1F6E\u0399"], ["\u1FAF", "\u1F6F\u0399"], ["\u1FB3", "\u0391\u0399"], ["\u1FBC", "\u0391\u0399"], ["\u1FC3", "\u0397\u0399"], ["\u1FCC", "\u0397\u0399"], ["\u1FF3", "\u03A9\u0399"], ["\u1FFC", "\u03A9\u0399"], ["\u1FB2", "\u1FBA\u0399"], ["\u1FB4", "\u0386\u0399"], ["\u1FC2", "\u1FCA\u0399"], ["\u1FC4", "\u0389\u0399"], ["\u1FF2", "\u1FFA\u0399"], ["\u1FF4", "\u038F\u0399"], ["\u1FB7", "\u0391\u0342\u0399"], ["\u1FC7", "\u0397\u0342\u0399"], ["\u1FF7", "\u03A9\u0342\u0399"], ["\u0069", "\u0130"]]; - -errorCount = 0; -count = 0; - -for (index = 0; index < UpperSpecialCase.length; index++) { - var capitalI = UpperSpecialCase[index][0]; - var capitalS = String.fromCharCode(capitalI); - var smallI = UpperSpecialCase[index][1]; - var smallS = String.fromCharCode(smallI); - if (capitalS.toUpperCase() !== smallS) { - var hexC = decimalToHexString(capitalI); - var hexS = decimalToHexString(smallI); - $ERROR('#' + hexC + '->' + hexS + ' '); - errorCount++; - } - count++; -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_510/S7.1_A1_T1.js b/tests/ES3/Unicode/Unicode_510/S7.1_A1_T1.js deleted file mode 100644 index b8fcf731d..000000000 --- a/tests/ES3/Unicode/Unicode_510/S7.1_A1_T1.js +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.1_A1_T1; - * @section: 7.1; - * @assertion: The format control character (Cf) can occur anywhere in the source text - * and these characters are removed before applying the lexical grammar; - * @description: Complex test with eval; -*/ - -//CHECK#1 -Cf = [[0x00AD, 0x00AD], [0x0600, 0x0603], [0x06DD, 0x06DD], [0x070F, 0x070F], [0x17B4, 0x17B5], [0x200B, 0x200F], [0x202A, 0x202E], [0x2060, 0x2064], [0x206A, 0x206F], [0xFEFF, 0xFEFF], [0xFFF9, 0xFFFB]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Cf.length; indexI++) { - for (indexJ = Cf[indexI][0]; indexJ <= Cf[indexI][1]; indexJ++) { - try { - var format = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval(format); - eval(format + "var " + format + "x" + format + "=" + format + "1" + format); - eval(format); - if (x !== 1) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_510/S7.1_A2.1_T1.js b/tests/ES3/Unicode/Unicode_510/S7.1_A2.1_T1.js deleted file mode 100644 index 02ee42c9e..000000000 --- a/tests/ES3/Unicode/Unicode_510/S7.1_A2.1_T1.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.1_A2.1_T1; - * @section: 7.1; - * @assertion: Since the format control character (Cf) are removed before processing string literals, - * one must use a Unicode escape sequence to include a Cf inside string literal; - * @description: Complex test, without eval; -*/ - -//CHECK#1 -Cf = [[0x00AD, 0x00AD], [0x0600, 0x0603], [0x06DD, 0x06DD], [0x070F, 0x070F], [0x17B4, 0x17B5], [0x200B, 0x200F], [0x202A, 0x202E], [0x2060, 0x2064], [0x206A, 0x206F], [0xFEFF, 0xFEFF], [0xFFF9, 0xFFFB]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Cf.length; indexI++) { - for (indexJ = Cf[indexI][0]; indexJ <= Cf[indexI][1]; indexJ++) { - try { - var format = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - var x = format + "a" + format + "b" + format; - if (x.length !== 5) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_510/S7.1_A2.1_T2.js b/tests/ES3/Unicode/Unicode_510/S7.1_A2.1_T2.js deleted file mode 100644 index 6dc5b86a2..000000000 --- a/tests/ES3/Unicode/Unicode_510/S7.1_A2.1_T2.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.1_A2.1_T2; - * @section: 7.1; - * @assertion: Since the format control character (Cf) are removed before processing string literals, - * one must use a Unicode escape sequence to include a Cf inside string literal; - * @description: Complex test, with eval; -*/ - -//CHECK#1 -Cf = [[0x00AD, 0x00AD], [0x0600, 0x0603], [0x06DD, 0x06DD], [0x070F, 0x070F], [0x17B4, 0x17B5], [0x200B, 0x200F], [0x202A, 0x202E], [0x2060, 0x2064], [0x206A, 0x206F], [0xFEFF, 0xFEFF], [0xFFF9, 0xFFFB]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Cf.length; indexI++) { - for (indexJ = Cf[indexI][0]; indexJ <= Cf[indexI][1]; indexJ++) { - try { - var format = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval('var x = "' + format + 'a' + format + 'b' + format + '"'); - if (x.length !== 5) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_510/S7.1_A2.2_T1.js b/tests/ES3/Unicode/Unicode_510/S7.1_A2.2_T1.js deleted file mode 100644 index 003d9ca1a..000000000 --- a/tests/ES3/Unicode/Unicode_510/S7.1_A2.2_T1.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.1_A2.2_T1; - * @section: 7.1; - * @assertion: Since the format control character (Cf) are removed before processing regular expression literals, - * one must use a Unicode escape sequence to include a Cf inside regular expression literal; - * @description: Complex test, without eval; -*/ - -//CHECK#1 -Cf = [[0x00AD, 0x00AD], [0x0600, 0x0603], [0x06DD, 0x06DD], [0x070F, 0x070F], [0x17B4, 0x17B5], [0x200B, 0x200F], [0x202A, 0x202E], [0x2060, 0x2064], [0x206A, 0x206F], [0xFEFF, 0xFEFF], [0xFFF9, 0xFFFB]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Cf.length; indexI++) { - for (indexJ = Cf[indexI][0]; indexJ <= Cf[indexI][1]; indexJ++) { - try { - var format = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - var x = RegExp(format + "a" + format + "b" + format); - if (x.source.length !== 5) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_510/S7.1_A2.2_T2.js b/tests/ES3/Unicode/Unicode_510/S7.1_A2.2_T2.js deleted file mode 100644 index a66a69f84..000000000 --- a/tests/ES3/Unicode/Unicode_510/S7.1_A2.2_T2.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.1_A2.2_T2; - * @section: 7.1; - * @assertion: Since the format control character (Cf) are removed before processing regular expression literals, - * one must use a Unicode escape sequence to include a Cf inside regular expression literal; - * @description: Complex test, with eval; -*/ - -//CHECK#1 -Cf = [[0x00AD, 0x00AD], [0x0600, 0x0603], [0x06DD, 0x06DD], [0x070F, 0x070F], [0x17B4, 0x17B5], [0x200B, 0x200F], [0x202A, 0x202E], [0x2060, 0x2064], [0x206A, 0x206F], [0xFEFF, 0xFEFF], [0xFFF9, 0xFFFB]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Cf.length; indexI++) { - for (indexJ = Cf[indexI][0]; indexJ <= Cf[indexI][1]; indexJ++) { - try { - var format = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval('var x = RegExp("' + format + 'a' + format + 'b' + format + '")'); - if (x.source.length !== 5) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_510/S7.2_A1.6_T1.js b/tests/ES3/Unicode/Unicode_510/S7.2_A1.6_T1.js deleted file mode 100644 index 5a7da9bf6..000000000 --- a/tests/ES3/Unicode/Unicode_510/S7.2_A1.6_T1.js +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.2_A1.6_T1; - * @section: 7.2, 7.5; - * @assertion: Any other Unicode "space separator" (category "Zs") between any two tokens is allowed; - * @description: Complex test with eval; -*/ - - -//CHECK#1 -Zs = [[0x1680, 0x1680], [0x180E, 0x180E], [0x2000, 0x200A], [0x202F, 0x202F], [0x205F, 0x205F], [0x3000, 0x3000]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Zs.length; indexI++) { - for (indexJ = Zs[indexI][0]; indexJ <= Zs[indexI][1]; indexJ++) { - try { - var format = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval(format); - eval(format + "var " + format + "x" + format + "=" + format + "1" + format); - eval(format); - if (x !== 1) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_510/S7.2_A2.6_T1.js b/tests/ES3/Unicode/Unicode_510/S7.2_A2.6_T1.js deleted file mode 100644 index 3c9b51236..000000000 --- a/tests/ES3/Unicode/Unicode_510/S7.2_A2.6_T1.js +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.2_A2.6_T1; - * @section: 7.2, 7.8.4; - * @assertion: Any other Unicode "space separator" (category "Zs") within strings; - * @description: Complex test; -*/ - -//CHECK#1 -Zs = [[0x1680, 0x1680], [0x180E, 0x180E], [0x2000, 0x200A], [0x202F, 0x202F], [0x205F, 0x205F], [0x3000, 0x3000]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Zs.length; indexI++) { - for (indexJ = Zs[indexI][0]; indexJ <= Zs[indexI][1]; indexJ++) { - try { - var format = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - var x = "str" + format + "ing"; - if (x !== "str" + format + "ing") { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_510/S7.2_A3.6_T1.js b/tests/ES3/Unicode/Unicode_510/S7.2_A3.6_T1.js deleted file mode 100644 index 3cf973648..000000000 --- a/tests/ES3/Unicode/Unicode_510/S7.2_A3.6_T1.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.2_A3.6_T1; - * @section: 7.2, 7.4; - * @assertion: Single line comment can contain any other Unicode "space separator" (category "Zs"); - * @description: Complex test with eval; - */ - -//CHECK#1 -Zs = [[0x1680, 0x1680], [0x180E, 0x180E], [0x2000, 0x200A], [0x202F, 0x202F], [0x205F, 0x205F], [0x3000, 0x3000]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Zs.length; indexI++) { - for (indexJ = Zs[indexI][0]; indexJ <= Zs[indexI][1]; indexJ++) { - try { - var format = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - var x = 0; - eval("//" + format + "single line" + format + "comment" + format + " x = 1;"); - if (x !== 0) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_510/S7.2_A4.6_T1.js b/tests/ES3/Unicode/Unicode_510/S7.2_A4.6_T1.js deleted file mode 100644 index c7eacb73c..000000000 --- a/tests/ES3/Unicode/Unicode_510/S7.2_A4.6_T1.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.2_A4.6_T1; - * @section: 7.2, 7.4; - * @assertion: Multi line comment can contain any other Unicode "space separator" (category "Zs"); - * @description: Complex test with eval; - */ - -//CHECK#1 -Zs = [[0x1680, 0x1680], [0x180E, 0x180E], [0x2000, 0x200A], [0x202F, 0x202F], [0x205F, 0x205F], [0x3000, 0x3000]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Zs.length; indexI++) { - for (indexJ = Zs[indexI][0]; indexJ <= Zs[indexI][1]; indexJ++) { - try { - var format = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - var x = 0; - eval("/*" + format + "multi line" + format + "comment" + format + "\n x = 1;*/"); - if (x !== 0) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_510/S7.6_A1.1_T1.js b/tests/ES3/Unicode/Unicode_510/S7.6_A1.1_T1.js deleted file mode 100644 index 4fc85668e..000000000 --- a/tests/ES3/Unicode/Unicode_510/S7.6_A1.1_T1.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A1.1_T1; - * @section: 7.6; - * @assertion: IdentifierStart :: UnicodeLetter (any character in the Unicode categories "Lu", "Ll", "Lt", "Lm", "Lo", "Nl"); - * @description: UnicodeLetter :: Uppercase letter (Lu). - * Complex test with eval; -*/ - -//CHECK -Lu = [[0x0041, 0x005A], [0x00C0, 0x00D6], [0x00D8, 0x00DE], [0x0100, 0x0100], [0x0102, 0x0102], [0x0104, 0x0104], [0x0106, 0x0106], [0x0108, 0x0108], [0x010A, 0x010A], [0x010C, 0x010C], [0x010E, 0x010E], [0x0110, 0x0110], [0x0112, 0x0112], [0x0114, 0x0114], [0x0116, 0x0116], [0x0118, 0x0118], [0x011A, 0x011A], [0x011C, 0x011C], [0x011E, 0x011E], [0x0120, 0x0120], [0x0122, 0x0122], [0x0124, 0x0124], [0x0126, 0x0126], [0x0128, 0x0128], [0x012A, 0x012A], [0x012C, 0x012C], [0x012E, 0x012E], [0x0130, 0x0130], [0x0132, 0x0132], [0x0134, 0x0134], [0x0136, 0x0136], [0x0139, 0x0139], [0x013B, 0x013B], [0x013D, 0x013D], [0x013F, 0x013F], [0x0141, 0x0141], [0x0143, 0x0143], [0x0145, 0x0145], [0x0147, 0x0147], [0x014A, 0x014A], [0x014C, 0x014C], [0x014E, 0x014E], [0x0150, 0x0150], [0x0152, 0x0152], [0x0154, 0x0154], [0x0156, 0x0156], [0x0158, 0x0158], [0x015A, 0x015A], [0x015C, 0x015C], [0x015E, 0x015E], [0x0160, 0x0160], [0x0162, 0x0162], [0x0164, 0x0164], [0x0166, 0x0166], [0x0168, 0x0168], [0x016A, 0x016A], [0x016C, 0x016C], [0x016E, 0x016E], [0x0170, 0x0170], [0x0172, 0x0172], [0x0174, 0x0174], [0x0176, 0x0176], [0x0178, 0x0179], [0x017B, 0x017B], [0x017D, 0x017D], [0x0181, 0x0182], [0x0184, 0x0184], [0x0186, 0x0187], [0x0189, 0x018B], [0x018E, 0x0191], [0x0193, 0x0194], [0x0196, 0x0198], [0x019C, 0x019D], [0x019F, 0x01A0], [0x01A2, 0x01A2], [0x01A4, 0x01A4], [0x01A6, 0x01A7], [0x01A9, 0x01A9], [0x01AC, 0x01AC], [0x01AE, 0x01AF], [0x01B1, 0x01B3], [0x01B5, 0x01B5], [0x01B7, 0x01B8], [0x01BC, 0x01BC], [0x01C4, 0x01C4], [0x01C7, 0x01C7], [0x01CA, 0x01CA], [0x01CD, 0x01CD], [0x01CF, 0x01CF], [0x01D1, 0x01D1], [0x01D3, 0x01D3], [0x01D5, 0x01D5], [0x01D7, 0x01D7], [0x01D9, 0x01D9], [0x01DB, 0x01DB], [0x01DE, 0x01DE], [0x01E0, 0x01E0], [0x01E2, 0x01E2], [0x01E4, 0x01E4], [0x01E6, 0x01E6], [0x01E8, 0x01E8], [0x01EA, 0x01EA], [0x01EC, 0x01EC], [0x01EE, 0x01EE], [0x01F1, 0x01F1], [0x01F4, 0x01F4], [0x01F6, 0x01F8], [0x01FA, 0x01FA], [0x01FC, 0x01FC], [0x01FE, 0x01FE], [0x0200, 0x0200], [0x0202, 0x0202], [0x0204, 0x0204], [0x0206, 0x0206], [0x0208, 0x0208], [0x020A, 0x020A], [0x020C, 0x020C], [0x020E, 0x020E], [0x0210, 0x0210], [0x0212, 0x0212], [0x0214, 0x0214], [0x0216, 0x0216], [0x0218, 0x0218], [0x021A, 0x021A], [0x021C, 0x021C], [0x021E, 0x021E], [0x0220, 0x0220], [0x0222, 0x0222], [0x0224, 0x0224], [0x0226, 0x0226], [0x0228, 0x0228], [0x022A, 0x022A], [0x022C, 0x022C], [0x022E, 0x022E], [0x0230, 0x0230], [0x0232, 0x0232], [0x023A, 0x023B], [0x023D, 0x023E], [0x0241, 0x0241], [0x0243, 0x0246], [0x0248, 0x0248], [0x024A, 0x024A], [0x024C, 0x024C], [0x024E, 0x024E], [0x0370, 0x0370], [0x0372, 0x0372], [0x0376, 0x0376], [0x0386, 0x0386], [0x0388, 0x038A], [0x038C, 0x038C], [0x038E, 0x038F], [0x0391, 0x03A1], [0x03A3, 0x03AB], [0x03CF, 0x03CF], [0x03D2, 0x03D4], [0x03D8, 0x03D8], [0x03DA, 0x03DA], [0x03DC, 0x03DC], [0x03DE, 0x03DE], [0x03E0, 0x03E0], [0x03E2, 0x03E2], [0x03E4, 0x03E4], [0x03E6, 0x03E6], [0x03E8, 0x03E8], [0x03EA, 0x03EA], [0x03EC, 0x03EC], [0x03EE, 0x03EE], [0x03F4, 0x03F4], [0x03F7, 0x03F7], [0x03F9, 0x03FA], [0x03FD, 0x042F], [0x0460, 0x0460], [0x0462, 0x0462], [0x0464, 0x0464], [0x0466, 0x0466], [0x0468, 0x0468], [0x046A, 0x046A], [0x046C, 0x046C], [0x046E, 0x046E], [0x0470, 0x0470], [0x0472, 0x0472], [0x0474, 0x0474], [0x0476, 0x0476], [0x0478, 0x0478], [0x047A, 0x047A], [0x047C, 0x047C], [0x047E, 0x047E], [0x0480, 0x0480], [0x048A, 0x048A], [0x048C, 0x048C], [0x048E, 0x048E], [0x0490, 0x0490], [0x0492, 0x0492], [0x0494, 0x0494], [0x0496, 0x0496], [0x0498, 0x0498], [0x049A, 0x049A], [0x049C, 0x049C], [0x049E, 0x049E], [0x04A0, 0x04A0], [0x04A2, 0x04A2], [0x04A4, 0x04A4], [0x04A6, 0x04A6], [0x04A8, 0x04A8], [0x04AA, 0x04AA], [0x04AC, 0x04AC], [0x04AE, 0x04AE], [0x04B0, 0x04B0], [0x04B2, 0x04B2], [0x04B4, 0x04B4], [0x04B6, 0x04B6], [0x04B8, 0x04B8], [0x04BA, 0x04BA], [0x04BC, 0x04BC], [0x04BE, 0x04BE], [0x04C0, 0x04C1], [0x04C3, 0x04C3], [0x04C5, 0x04C5], [0x04C7, 0x04C7], [0x04C9, 0x04C9], [0x04CB, 0x04CB], [0x04CD, 0x04CD], [0x04D0, 0x04D0], [0x04D2, 0x04D2], [0x04D4, 0x04D4], [0x04D6, 0x04D6], [0x04D8, 0x04D8], [0x04DA, 0x04DA], [0x04DC, 0x04DC], [0x04DE, 0x04DE], [0x04E0, 0x04E0], [0x04E2, 0x04E2], [0x04E4, 0x04E4], [0x04E6, 0x04E6], [0x04E8, 0x04E8], [0x04EA, 0x04EA], [0x04EC, 0x04EC], [0x04EE, 0x04EE], [0x04F0, 0x04F0], [0x04F2, 0x04F2], [0x04F4, 0x04F4], [0x04F6, 0x04F6], [0x04F8, 0x04F8], [0x04FA, 0x04FA], [0x04FC, 0x04FC], [0x04FE, 0x04FE], [0x0500, 0x0500], [0x0502, 0x0502], [0x0504, 0x0504], [0x0506, 0x0506], [0x0508, 0x0508], [0x050A, 0x050A], [0x050C, 0x050C], [0x050E, 0x050E], [0x0510, 0x0510], [0x0512, 0x0512], [0x0514, 0x0514], [0x0516, 0x0516], [0x0518, 0x0518], [0x051A, 0x051A], [0x051C, 0x051C], [0x051E, 0x051E], [0x0520, 0x0520], [0x0522, 0x0522], [0x0531, 0x0556], [0x10A0, 0x10C5], [0x1E00, 0x1E00], [0x1E02, 0x1E02], [0x1E04, 0x1E04], [0x1E06, 0x1E06], [0x1E08, 0x1E08], [0x1E0A, 0x1E0A], [0x1E0C, 0x1E0C], [0x1E0E, 0x1E0E], [0x1E10, 0x1E10], [0x1E12, 0x1E12], [0x1E14, 0x1E14], [0x1E16, 0x1E16], [0x1E18, 0x1E18], [0x1E1A, 0x1E1A], [0x1E1C, 0x1E1C], [0x1E1E, 0x1E1E], [0x1E20, 0x1E20], [0x1E22, 0x1E22], [0x1E24, 0x1E24], [0x1E26, 0x1E26], [0x1E28, 0x1E28], [0x1E2A, 0x1E2A], [0x1E2C, 0x1E2C], [0x1E2E, 0x1E2E], [0x1E30, 0x1E30], [0x1E32, 0x1E32], [0x1E34, 0x1E34], [0x1E36, 0x1E36], [0x1E38, 0x1E38], [0x1E3A, 0x1E3A], [0x1E3C, 0x1E3C], [0x1E3E, 0x1E3E], [0x1E40, 0x1E40], [0x1E42, 0x1E42], [0x1E44, 0x1E44], [0x1E46, 0x1E46], [0x1E48, 0x1E48], [0x1E4A, 0x1E4A], [0x1E4C, 0x1E4C], [0x1E4E, 0x1E4E], [0x1E50, 0x1E50], [0x1E52, 0x1E52], [0x1E54, 0x1E54], [0x1E56, 0x1E56], [0x1E58, 0x1E58], [0x1E5A, 0x1E5A], [0x1E5C, 0x1E5C], [0x1E5E, 0x1E5E], [0x1E60, 0x1E60], [0x1E62, 0x1E62], [0x1E64, 0x1E64], [0x1E66, 0x1E66], [0x1E68, 0x1E68], [0x1E6A, 0x1E6A], [0x1E6C, 0x1E6C], [0x1E6E, 0x1E6E], [0x1E70, 0x1E70], [0x1E72, 0x1E72], [0x1E74, 0x1E74], [0x1E76, 0x1E76], [0x1E78, 0x1E78], [0x1E7A, 0x1E7A], [0x1E7C, 0x1E7C], [0x1E7E, 0x1E7E], [0x1E80, 0x1E80], [0x1E82, 0x1E82], [0x1E84, 0x1E84], [0x1E86, 0x1E86], [0x1E88, 0x1E88], [0x1E8A, 0x1E8A], [0x1E8C, 0x1E8C], [0x1E8E, 0x1E8E], [0x1E90, 0x1E90], [0x1E92, 0x1E92], [0x1E94, 0x1E94], [0x1E9E, 0x1E9E], [0x1EA0, 0x1EA0], [0x1EA2, 0x1EA2], [0x1EA4, 0x1EA4], [0x1EA6, 0x1EA6], [0x1EA8, 0x1EA8], [0x1EAA, 0x1EAA], [0x1EAC, 0x1EAC], [0x1EAE, 0x1EAE], [0x1EB0, 0x1EB0], [0x1EB2, 0x1EB2], [0x1EB4, 0x1EB4], [0x1EB6, 0x1EB6], [0x1EB8, 0x1EB8], [0x1EBA, 0x1EBA], [0x1EBC, 0x1EBC], [0x1EBE, 0x1EBE], [0x1EC0, 0x1EC0], [0x1EC2, 0x1EC2], [0x1EC4, 0x1EC4], [0x1EC6, 0x1EC6], [0x1EC8, 0x1EC8], [0x1ECA, 0x1ECA], [0x1ECC, 0x1ECC], [0x1ECE, 0x1ECE], [0x1ED0, 0x1ED0], [0x1ED2, 0x1ED2], [0x1ED4, 0x1ED4], [0x1ED6, 0x1ED6], [0x1ED8, 0x1ED8], [0x1EDA, 0x1EDA], [0x1EDC, 0x1EDC], [0x1EDE, 0x1EDE], [0x1EE0, 0x1EE0], [0x1EE2, 0x1EE2], [0x1EE4, 0x1EE4], [0x1EE6, 0x1EE6], [0x1EE8, 0x1EE8], [0x1EEA, 0x1EEA], [0x1EEC, 0x1EEC], [0x1EEE, 0x1EEE], [0x1EF0, 0x1EF0], [0x1EF2, 0x1EF2], [0x1EF4, 0x1EF4], [0x1EF6, 0x1EF6], [0x1EF8, 0x1EF8], [0x1EFA, 0x1EFA], [0x1EFC, 0x1EFC], [0x1EFE, 0x1EFE], [0x1F08, 0x1F0F], [0x1F18, 0x1F1D], [0x1F28, 0x1F2F], [0x1F38, 0x1F3F], [0x1F48, 0x1F4D], [0x1F59, 0x1F59], [0x1F5B, 0x1F5B], [0x1F5D, 0x1F5D], [0x1F5F, 0x1F5F], [0x1F68, 0x1F6F], [0x1FB8, 0x1FBB], [0x1FC8, 0x1FCB], [0x1FD8, 0x1FDB], [0x1FE8, 0x1FEC], [0x1FF8, 0x1FFB], [0x2102, 0x2102], [0x2107, 0x2107], [0x210B, 0x210D], [0x2110, 0x2112], [0x2115, 0x2115], [0x2119, 0x211D], [0x2124, 0x2124], [0x2126, 0x2126], [0x2128, 0x2128], [0x212A, 0x212D], [0x2130, 0x2133], [0x213E, 0x213F], [0x2145, 0x2145], [0x2183, 0x2183], [0x2C00, 0x2C2E], [0x2C60, 0x2C60], [0x2C62, 0x2C64], [0x2C67, 0x2C67], [0x2C69, 0x2C69], [0x2C6B, 0x2C6B], [0x2C6D, 0x2C6F], [0x2C72, 0x2C72], [0x2C75, 0x2C75], [0x2C80, 0x2C80], [0x2C82, 0x2C82], [0x2C84, 0x2C84], [0x2C86, 0x2C86], [0x2C88, 0x2C88], [0x2C8A, 0x2C8A], [0x2C8C, 0x2C8C], [0x2C8E, 0x2C8E], [0x2C90, 0x2C90], [0x2C92, 0x2C92], [0x2C94, 0x2C94], [0x2C96, 0x2C96], [0x2C98, 0x2C98], [0x2C9A, 0x2C9A], [0x2C9C, 0x2C9C], [0x2C9E, 0x2C9E], [0x2CA0, 0x2CA0], [0x2CA2, 0x2CA2], [0x2CA4, 0x2CA4], [0x2CA6, 0x2CA6], [0x2CA8, 0x2CA8], [0x2CAA, 0x2CAA], [0x2CAC, 0x2CAC], [0x2CAE, 0x2CAE], [0x2CB0, 0x2CB0], [0x2CB2, 0x2CB2], [0x2CB4, 0x2CB4], [0x2CB6, 0x2CB6], [0x2CB8, 0x2CB8], [0x2CBA, 0x2CBA], [0x2CBC, 0x2CBC], [0x2CBE, 0x2CBE], [0x2CC0, 0x2CC0], [0x2CC2, 0x2CC2], [0x2CC4, 0x2CC4], [0x2CC6, 0x2CC6], [0x2CC8, 0x2CC8], [0x2CCA, 0x2CCA], [0x2CCC, 0x2CCC], [0x2CCE, 0x2CCE], [0x2CD0, 0x2CD0], [0x2CD2, 0x2CD2], [0x2CD4, 0x2CD4], [0x2CD6, 0x2CD6], [0x2CD8, 0x2CD8], [0x2CDA, 0x2CDA], [0x2CDC, 0x2CDC], [0x2CDE, 0x2CDE], [0x2CE0, 0x2CE0], [0x2CE2, 0x2CE2], [0xA640, 0xA640], [0xA642, 0xA642], [0xA644, 0xA644], [0xA646, 0xA646], [0xA648, 0xA648], [0xA64A, 0xA64A], [0xA64C, 0xA64C], [0xA64E, 0xA64E], [0xA650, 0xA650], [0xA652, 0xA652], [0xA654, 0xA654], [0xA656, 0xA656], [0xA658, 0xA658], [0xA65A, 0xA65A], [0xA65C, 0xA65C], [0xA65E, 0xA65E], [0xA662, 0xA662], [0xA664, 0xA664], [0xA666, 0xA666], [0xA668, 0xA668], [0xA66A, 0xA66A], [0xA66C, 0xA66C], [0xA680, 0xA680], [0xA682, 0xA682], [0xA684, 0xA684], [0xA686, 0xA686], [0xA688, 0xA688], [0xA68A, 0xA68A], [0xA68C, 0xA68C], [0xA68E, 0xA68E], [0xA690, 0xA690], [0xA692, 0xA692], [0xA694, 0xA694], [0xA696, 0xA696], [0xA722, 0xA722], [0xA724, 0xA724], [0xA726, 0xA726], [0xA728, 0xA728], [0xA72A, 0xA72A], [0xA72C, 0xA72C], [0xA72E, 0xA72E], [0xA732, 0xA732], [0xA734, 0xA734], [0xA736, 0xA736], [0xA738, 0xA738], [0xA73A, 0xA73A], [0xA73C, 0xA73C], [0xA73E, 0xA73E], [0xA740, 0xA740], [0xA742, 0xA742], [0xA744, 0xA744], [0xA746, 0xA746], [0xA748, 0xA748], [0xA74A, 0xA74A], [0xA74C, 0xA74C], [0xA74E, 0xA74E], [0xA750, 0xA750], [0xA752, 0xA752], [0xA754, 0xA754], [0xA756, 0xA756], [0xA758, 0xA758], [0xA75A, 0xA75A], [0xA75C, 0xA75C], [0xA75E, 0xA75E], [0xA760, 0xA760], [0xA762, 0xA762], [0xA764, 0xA764], [0xA766, 0xA766], [0xA768, 0xA768], [0xA76A, 0xA76A], [0xA76C, 0xA76C], [0xA76E, 0xA76E], [0xA779, 0xA779], [0xA77B, 0xA77B], [0xA77D, 0xA77E], [0xA780, 0xA780], [0xA782, 0xA782], [0xA784, 0xA784], [0xA786, 0xA786], [0xA78B, 0xA78B], [0xFF21, 0xFF3A]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Lu.length; indexI++) { - for (indexJ = Lu[indexI][0]; indexJ <= Lu[indexI][1]; indexJ++) { - try { - var identifier = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval("var " + identifier + "=1"); - if (eval(identifier + "===1") !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_510/S7.6_A1.1_T2.js b/tests/ES3/Unicode/Unicode_510/S7.6_A1.1_T2.js deleted file mode 100644 index 444e758b9..000000000 --- a/tests/ES3/Unicode/Unicode_510/S7.6_A1.1_T2.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A1.1_T2; - * @section: 7.6; - * @assertion: IdentifierStart :: UnicodeLetter (any character in the Unicode categories "Lu", "Ll", "Lt", "Lm", "Lo", "Nl"); - * @description: UnicodeLetter :: Lowercase letter (Ll). - * Complex test with eval; -*/ - -//CHECK -Ll = [[0x0061, 0x007A], [0x00AA, 0x00AA], [0x00B5, 0x00B5], [0x00BA, 0x00BA], [0x00DF, 0x00F6], [0x00F8, 0x00FF], [0x0101, 0x0101], [0x0103, 0x0103], [0x0105, 0x0105], [0x0107, 0x0107], [0x0109, 0x0109], [0x010B, 0x010B], [0x010D, 0x010D], [0x010F, 0x010F], [0x0111, 0x0111], [0x0113, 0x0113], [0x0115, 0x0115], [0x0117, 0x0117], [0x0119, 0x0119], [0x011B, 0x011B], [0x011D, 0x011D], [0x011F, 0x011F], [0x0121, 0x0121], [0x0123, 0x0123], [0x0125, 0x0125], [0x0127, 0x0127], [0x0129, 0x0129], [0x012B, 0x012B], [0x012D, 0x012D], [0x012F, 0x012F], [0x0131, 0x0131], [0x0133, 0x0133], [0x0135, 0x0135], [0x0137, 0x0138], [0x013A, 0x013A], [0x013C, 0x013C], [0x013E, 0x013E], [0x0140, 0x0140], [0x0142, 0x0142], [0x0144, 0x0144], [0x0146, 0x0146], [0x0148, 0x0149], [0x014B, 0x014B], [0x014D, 0x014D], [0x014F, 0x014F], [0x0151, 0x0151], [0x0153, 0x0153], [0x0155, 0x0155], [0x0157, 0x0157], [0x0159, 0x0159], [0x015B, 0x015B], [0x015D, 0x015D], [0x015F, 0x015F], [0x0161, 0x0161], [0x0163, 0x0163], [0x0165, 0x0165], [0x0167, 0x0167], [0x0169, 0x0169], [0x016B, 0x016B], [0x016D, 0x016D], [0x016F, 0x016F], [0x0171, 0x0171], [0x0173, 0x0173], [0x0175, 0x0175], [0x0177, 0x0177], [0x017A, 0x017A], [0x017C, 0x017C], [0x017E, 0x0180], [0x0183, 0x0183], [0x0185, 0x0185], [0x0188, 0x0188], [0x018C, 0x018D], [0x0192, 0x0192], [0x0195, 0x0195], [0x0199, 0x019B], [0x019E, 0x019E], [0x01A1, 0x01A1], [0x01A3, 0x01A3], [0x01A5, 0x01A5], [0x01A8, 0x01A8], [0x01AA, 0x01AB], [0x01AD, 0x01AD], [0x01B0, 0x01B0], [0x01B4, 0x01B4], [0x01B6, 0x01B6], [0x01B9, 0x01BA], [0x01BD, 0x01BF], [0x01C6, 0x01C6], [0x01C9, 0x01C9], [0x01CC, 0x01CC], [0x01CE, 0x01CE], [0x01D0, 0x01D0], [0x01D2, 0x01D2], [0x01D4, 0x01D4], [0x01D6, 0x01D6], [0x01D8, 0x01D8], [0x01DA, 0x01DA], [0x01DC, 0x01DD], [0x01DF, 0x01DF], [0x01E1, 0x01E1], [0x01E3, 0x01E3], [0x01E5, 0x01E5], [0x01E7, 0x01E7], [0x01E9, 0x01E9], [0x01EB, 0x01EB], [0x01ED, 0x01ED], [0x01EF, 0x01F0], [0x01F3, 0x01F3], [0x01F5, 0x01F5], [0x01F9, 0x01F9], [0x01FB, 0x01FB], [0x01FD, 0x01FD], [0x01FF, 0x01FF], [0x0201, 0x0201], [0x0203, 0x0203], [0x0205, 0x0205], [0x0207, 0x0207], [0x0209, 0x0209], [0x020B, 0x020B], [0x020D, 0x020D], [0x020F, 0x020F], [0x0211, 0x0211], [0x0213, 0x0213], [0x0215, 0x0215], [0x0217, 0x0217], [0x0219, 0x0219], [0x021B, 0x021B], [0x021D, 0x021D], [0x021F, 0x021F], [0x0221, 0x0221], [0x0223, 0x0223], [0x0225, 0x0225], [0x0227, 0x0227], [0x0229, 0x0229], [0x022B, 0x022B], [0x022D, 0x022D], [0x022F, 0x022F], [0x0231, 0x0231], [0x0233, 0x0239], [0x023C, 0x023C], [0x023F, 0x0240], [0x0242, 0x0242], [0x0247, 0x0247], [0x0249, 0x0249], [0x024B, 0x024B], [0x024D, 0x024D], [0x024F, 0x0293], [0x0295, 0x02AF], [0x0371, 0x0371], [0x0373, 0x0373], [0x0377, 0x0377], [0x037B, 0x037D], [0x0390, 0x0390], [0x03AC, 0x03CE], [0x03D0, 0x03D1], [0x03D5, 0x03D7], [0x03D9, 0x03D9], [0x03DB, 0x03DB], [0x03DD, 0x03DD], [0x03DF, 0x03DF], [0x03E1, 0x03E1], [0x03E3, 0x03E3], [0x03E5, 0x03E5], [0x03E7, 0x03E7], [0x03E9, 0x03E9], [0x03EB, 0x03EB], [0x03ED, 0x03ED], [0x03EF, 0x03F3], [0x03F5, 0x03F5], [0x03F8, 0x03F8], [0x03FB, 0x03FC], [0x0430, 0x045F], [0x0461, 0x0461], [0x0463, 0x0463], [0x0465, 0x0465], [0x0467, 0x0467], [0x0469, 0x0469], [0x046B, 0x046B], [0x046D, 0x046D], [0x046F, 0x046F], [0x0471, 0x0471], [0x0473, 0x0473], [0x0475, 0x0475], [0x0477, 0x0477], [0x0479, 0x0479], [0x047B, 0x047B], [0x047D, 0x047D], [0x047F, 0x047F], [0x0481, 0x0481], [0x048B, 0x048B], [0x048D, 0x048D], [0x048F, 0x048F], [0x0491, 0x0491], [0x0493, 0x0493], [0x0495, 0x0495], [0x0497, 0x0497], [0x0499, 0x0499], [0x049B, 0x049B], [0x049D, 0x049D], [0x049F, 0x049F], [0x04A1, 0x04A1], [0x04A3, 0x04A3], [0x04A5, 0x04A5], [0x04A7, 0x04A7], [0x04A9, 0x04A9], [0x04AB, 0x04AB], [0x04AD, 0x04AD], [0x04AF, 0x04AF], [0x04B1, 0x04B1], [0x04B3, 0x04B3], [0x04B5, 0x04B5], [0x04B7, 0x04B7], [0x04B9, 0x04B9], [0x04BB, 0x04BB], [0x04BD, 0x04BD], [0x04BF, 0x04BF], [0x04C2, 0x04C2], [0x04C4, 0x04C4], [0x04C6, 0x04C6], [0x04C8, 0x04C8], [0x04CA, 0x04CA], [0x04CC, 0x04CC], [0x04CE, 0x04CF], [0x04D1, 0x04D1], [0x04D3, 0x04D3], [0x04D5, 0x04D5], [0x04D7, 0x04D7], [0x04D9, 0x04D9], [0x04DB, 0x04DB], [0x04DD, 0x04DD], [0x04DF, 0x04DF], [0x04E1, 0x04E1], [0x04E3, 0x04E3], [0x04E5, 0x04E5], [0x04E7, 0x04E7], [0x04E9, 0x04E9], [0x04EB, 0x04EB], [0x04ED, 0x04ED], [0x04EF, 0x04EF], [0x04F1, 0x04F1], [0x04F3, 0x04F3], [0x04F5, 0x04F5], [0x04F7, 0x04F7], [0x04F9, 0x04F9], [0x04FB, 0x04FB], [0x04FD, 0x04FD], [0x04FF, 0x04FF], [0x0501, 0x0501], [0x0503, 0x0503], [0x0505, 0x0505], [0x0507, 0x0507], [0x0509, 0x0509], [0x050B, 0x050B], [0x050D, 0x050D], [0x050F, 0x050F], [0x0511, 0x0511], [0x0513, 0x0513], [0x0515, 0x0515], [0x0517, 0x0517], [0x0519, 0x0519], [0x051B, 0x051B], [0x051D, 0x051D], [0x051F, 0x051F], [0x0521, 0x0521], [0x0523, 0x0523], [0x0561, 0x0587], [0x1D00, 0x1D2B], [0x1D62, 0x1D77], [0x1D79, 0x1D9A], [0x1E01, 0x1E01], [0x1E03, 0x1E03], [0x1E05, 0x1E05], [0x1E07, 0x1E07], [0x1E09, 0x1E09], [0x1E0B, 0x1E0B], [0x1E0D, 0x1E0D], [0x1E0F, 0x1E0F], [0x1E11, 0x1E11], [0x1E13, 0x1E13], [0x1E15, 0x1E15], [0x1E17, 0x1E17], [0x1E19, 0x1E19], [0x1E1B, 0x1E1B], [0x1E1D, 0x1E1D], [0x1E1F, 0x1E1F], [0x1E21, 0x1E21], [0x1E23, 0x1E23], [0x1E25, 0x1E25], [0x1E27, 0x1E27], [0x1E29, 0x1E29], [0x1E2B, 0x1E2B], [0x1E2D, 0x1E2D], [0x1E2F, 0x1E2F], [0x1E31, 0x1E31], [0x1E33, 0x1E33], [0x1E35, 0x1E35], [0x1E37, 0x1E37], [0x1E39, 0x1E39], [0x1E3B, 0x1E3B], [0x1E3D, 0x1E3D], [0x1E3F, 0x1E3F], [0x1E41, 0x1E41], [0x1E43, 0x1E43], [0x1E45, 0x1E45], [0x1E47, 0x1E47], [0x1E49, 0x1E49], [0x1E4B, 0x1E4B], [0x1E4D, 0x1E4D], [0x1E4F, 0x1E4F], [0x1E51, 0x1E51], [0x1E53, 0x1E53], [0x1E55, 0x1E55], [0x1E57, 0x1E57], [0x1E59, 0x1E59], [0x1E5B, 0x1E5B], [0x1E5D, 0x1E5D], [0x1E5F, 0x1E5F], [0x1E61, 0x1E61], [0x1E63, 0x1E63], [0x1E65, 0x1E65], [0x1E67, 0x1E67], [0x1E69, 0x1E69], [0x1E6B, 0x1E6B], [0x1E6D, 0x1E6D], [0x1E6F, 0x1E6F], [0x1E71, 0x1E71], [0x1E73, 0x1E73], [0x1E75, 0x1E75], [0x1E77, 0x1E77], [0x1E79, 0x1E79], [0x1E7B, 0x1E7B], [0x1E7D, 0x1E7D], [0x1E7F, 0x1E7F], [0x1E81, 0x1E81], [0x1E83, 0x1E83], [0x1E85, 0x1E85], [0x1E87, 0x1E87], [0x1E89, 0x1E89], [0x1E8B, 0x1E8B], [0x1E8D, 0x1E8D], [0x1E8F, 0x1E8F], [0x1E91, 0x1E91], [0x1E93, 0x1E93], [0x1E95, 0x1E9D], [0x1E9F, 0x1E9F], [0x1EA1, 0x1EA1], [0x1EA3, 0x1EA3], [0x1EA5, 0x1EA5], [0x1EA7, 0x1EA7], [0x1EA9, 0x1EA9], [0x1EAB, 0x1EAB], [0x1EAD, 0x1EAD], [0x1EAF, 0x1EAF], [0x1EB1, 0x1EB1], [0x1EB3, 0x1EB3], [0x1EB5, 0x1EB5], [0x1EB7, 0x1EB7], [0x1EB9, 0x1EB9], [0x1EBB, 0x1EBB], [0x1EBD, 0x1EBD], [0x1EBF, 0x1EBF], [0x1EC1, 0x1EC1], [0x1EC3, 0x1EC3], [0x1EC5, 0x1EC5], [0x1EC7, 0x1EC7], [0x1EC9, 0x1EC9], [0x1ECB, 0x1ECB], [0x1ECD, 0x1ECD], [0x1ECF, 0x1ECF], [0x1ED1, 0x1ED1], [0x1ED3, 0x1ED3], [0x1ED5, 0x1ED5], [0x1ED7, 0x1ED7], [0x1ED9, 0x1ED9], [0x1EDB, 0x1EDB], [0x1EDD, 0x1EDD], [0x1EDF, 0x1EDF], [0x1EE1, 0x1EE1], [0x1EE3, 0x1EE3], [0x1EE5, 0x1EE5], [0x1EE7, 0x1EE7], [0x1EE9, 0x1EE9], [0x1EEB, 0x1EEB], [0x1EED, 0x1EED], [0x1EEF, 0x1EEF], [0x1EF1, 0x1EF1], [0x1EF3, 0x1EF3], [0x1EF5, 0x1EF5], [0x1EF7, 0x1EF7], [0x1EF9, 0x1EF9], [0x1EFB, 0x1EFB], [0x1EFD, 0x1EFD], [0x1EFF, 0x1F07], [0x1F10, 0x1F15], [0x1F20, 0x1F27], [0x1F30, 0x1F37], [0x1F40, 0x1F45], [0x1F50, 0x1F57], [0x1F60, 0x1F67], [0x1F70, 0x1F7D], [0x1F80, 0x1F87], [0x1F90, 0x1F97], [0x1FA0, 0x1FA7], [0x1FB0, 0x1FB4], [0x1FB6, 0x1FB7], [0x1FBE, 0x1FBE], [0x1FC2, 0x1FC4], [0x1FC6, 0x1FC7], [0x1FD0, 0x1FD3], [0x1FD6, 0x1FD7], [0x1FE0, 0x1FE7], [0x1FF2, 0x1FF4], [0x1FF6, 0x1FF7], [0x2071, 0x2071], [0x207F, 0x207F], [0x210A, 0x210A], [0x210E, 0x210F], [0x2113, 0x2113], [0x212F, 0x212F], [0x2134, 0x2134], [0x2139, 0x2139], [0x213C, 0x213D], [0x2146, 0x2149], [0x214E, 0x214E], [0x2184, 0x2184], [0x2C30, 0x2C5E], [0x2C61, 0x2C61], [0x2C65, 0x2C66], [0x2C68, 0x2C68], [0x2C6A, 0x2C6A], [0x2C6C, 0x2C6C], [0x2C71, 0x2C71], [0x2C73, 0x2C74], [0x2C76, 0x2C7C], [0x2C81, 0x2C81], [0x2C83, 0x2C83], [0x2C85, 0x2C85], [0x2C87, 0x2C87], [0x2C89, 0x2C89], [0x2C8B, 0x2C8B], [0x2C8D, 0x2C8D], [0x2C8F, 0x2C8F], [0x2C91, 0x2C91], [0x2C93, 0x2C93], [0x2C95, 0x2C95], [0x2C97, 0x2C97], [0x2C99, 0x2C99], [0x2C9B, 0x2C9B], [0x2C9D, 0x2C9D], [0x2C9F, 0x2C9F], [0x2CA1, 0x2CA1], [0x2CA3, 0x2CA3], [0x2CA5, 0x2CA5], [0x2CA7, 0x2CA7], [0x2CA9, 0x2CA9], [0x2CAB, 0x2CAB], [0x2CAD, 0x2CAD], [0x2CAF, 0x2CAF], [0x2CB1, 0x2CB1], [0x2CB3, 0x2CB3], [0x2CB5, 0x2CB5], [0x2CB7, 0x2CB7], [0x2CB9, 0x2CB9], [0x2CBB, 0x2CBB], [0x2CBD, 0x2CBD], [0x2CBF, 0x2CBF], [0x2CC1, 0x2CC1], [0x2CC3, 0x2CC3], [0x2CC5, 0x2CC5], [0x2CC7, 0x2CC7], [0x2CC9, 0x2CC9], [0x2CCB, 0x2CCB], [0x2CCD, 0x2CCD], [0x2CCF, 0x2CCF], [0x2CD1, 0x2CD1], [0x2CD3, 0x2CD3], [0x2CD5, 0x2CD5], [0x2CD7, 0x2CD7], [0x2CD9, 0x2CD9], [0x2CDB, 0x2CDB], [0x2CDD, 0x2CDD], [0x2CDF, 0x2CDF], [0x2CE1, 0x2CE1], [0x2CE3, 0x2CE4], [0x2D00, 0x2D25], [0xA641, 0xA641], [0xA643, 0xA643], [0xA645, 0xA645], [0xA647, 0xA647], [0xA649, 0xA649], [0xA64B, 0xA64B], [0xA64D, 0xA64D], [0xA64F, 0xA64F], [0xA651, 0xA651], [0xA653, 0xA653], [0xA655, 0xA655], [0xA657, 0xA657], [0xA659, 0xA659], [0xA65B, 0xA65B], [0xA65D, 0xA65D], [0xA65F, 0xA65F], [0xA663, 0xA663], [0xA665, 0xA665], [0xA667, 0xA667], [0xA669, 0xA669], [0xA66B, 0xA66B], [0xA66D, 0xA66D], [0xA681, 0xA681], [0xA683, 0xA683], [0xA685, 0xA685], [0xA687, 0xA687], [0xA689, 0xA689], [0xA68B, 0xA68B], [0xA68D, 0xA68D], [0xA68F, 0xA68F], [0xA691, 0xA691], [0xA693, 0xA693], [0xA695, 0xA695], [0xA697, 0xA697], [0xA723, 0xA723], [0xA725, 0xA725], [0xA727, 0xA727], [0xA729, 0xA729], [0xA72B, 0xA72B], [0xA72D, 0xA72D], [0xA72F, 0xA731], [0xA733, 0xA733], [0xA735, 0xA735], [0xA737, 0xA737], [0xA739, 0xA739], [0xA73B, 0xA73B], [0xA73D, 0xA73D], [0xA73F, 0xA73F], [0xA741, 0xA741], [0xA743, 0xA743], [0xA745, 0xA745], [0xA747, 0xA747], [0xA749, 0xA749], [0xA74B, 0xA74B], [0xA74D, 0xA74D], [0xA74F, 0xA74F], [0xA751, 0xA751], [0xA753, 0xA753], [0xA755, 0xA755], [0xA757, 0xA757], [0xA759, 0xA759], [0xA75B, 0xA75B], [0xA75D, 0xA75D], [0xA75F, 0xA75F], [0xA761, 0xA761], [0xA763, 0xA763], [0xA765, 0xA765], [0xA767, 0xA767], [0xA769, 0xA769], [0xA76B, 0xA76B], [0xA76D, 0xA76D], [0xA76F, 0xA76F], [0xA771, 0xA778], [0xA77A, 0xA77A], [0xA77C, 0xA77C], [0xA77F, 0xA77F], [0xA781, 0xA781], [0xA783, 0xA783], [0xA785, 0xA785], [0xA787, 0xA787], [0xA78C, 0xA78C], [0xFB00, 0xFB06], [0xFB13, 0xFB17], [0xFF41, 0xFF5A]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Ll.length; indexI++) { - for (indexJ = Ll[indexI][0]; indexJ <= Ll[indexI][1]; indexJ++) { - try { - var identifier = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval("var " + identifier + "=1"); - if (eval(identifier + "===1") !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_510/S7.6_A1.1_T3.js b/tests/ES3/Unicode/Unicode_510/S7.6_A1.1_T3.js deleted file mode 100644 index 06e9329b8..000000000 --- a/tests/ES3/Unicode/Unicode_510/S7.6_A1.1_T3.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A1.1_T3; - * @section: 7.6; - * @assertion: IdentifierStart :: UnicodeLetter (any character in the Unicode categories "Lu", "Ll", "Lt", "Lm", "Lo", "Nl"); - * @description: UnicodeLetter :: Titlecase letter (Lt). - * Complex test with eval; -*/ - -//CHECK -Lt = [[0x01C5, 0x01C5], [0x01C8, 0x01C8], [0x01CB, 0x01CB], [0x01F2, 0x01F2], [0x1F88, 0x1F8F], [0x1F98, 0x1F9F], [0x1FA8, 0x1FAF], [0x1FBC, 0x1FBC], [0x1FCC, 0x1FCC], [0x1FFC, 0x1FFC]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Lt.length; indexI++) { - for (indexJ = Lt[indexI][0]; indexJ <= Lt[indexI][1]; indexJ++) { - try { - var identifier = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval("var " + identifier + "=1"); - if (eval(identifier + "===1") !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_510/S7.6_A1.1_T4.js b/tests/ES3/Unicode/Unicode_510/S7.6_A1.1_T4.js deleted file mode 100644 index 30390e1db..000000000 --- a/tests/ES3/Unicode/Unicode_510/S7.6_A1.1_T4.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A1.1_T4; - * @section: 7.6; - * @assertion: IdentifierStart :: UnicodeLetter (any character in the Unicode categories "Lu", "Ll", "Lt", "Lm", "Lo", "Nl"); - * @description: UnicodeLetter :: Modifier letter (Lm). - * Complex test with eval; -*/ - -//CHECK -Lm = [[0x02B0, 0x02C1], [0x02C6, 0x02D1], [0x02E0, 0x02E4], [0x02EC, 0x02EC], [0x02EE, 0x02EE], [0x0374, 0x0374], [0x037A, 0x037A], [0x0559, 0x0559], [0x0640, 0x0640], [0x06E5, 0x06E6], [0x07F4, 0x07F5], [0x07FA, 0x07FA], [0x0971, 0x0971], [0x0E46, 0x0E46], [0x0EC6, 0x0EC6], [0x10FC, 0x10FC], [0x17D7, 0x17D7], [0x1843, 0x1843], [0x1C78, 0x1C7D], [0x1D2C, 0x1D61], [0x1D78, 0x1D78], [0x1D9B, 0x1DBF], [0x2090, 0x2094], [0x2C7D, 0x2C7D], [0x2D6F, 0x2D6F], [0x2E2F, 0x2E2F], [0x3005, 0x3005], [0x3031, 0x3035], [0x303B, 0x303B], [0x309D, 0x309E], [0x30FC, 0x30FE], [0xA015, 0xA015], [0xA60C, 0xA60C], [0xA67F, 0xA67F], [0xA717, 0xA71F], [0xA770, 0xA770], [0xA788, 0xA788], [0xFF70, 0xFF70], [0xFF9E, 0xFF9F]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Lm.length; indexI++) { - for (indexJ = Lm[indexI][0]; indexJ <= Lm[indexI][1]; indexJ++) { - try { - var identifier = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval("var " + identifier + "=1"); - if (eval(identifier + "===1") !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_510/S7.6_A1.1_T5.js b/tests/ES3/Unicode/Unicode_510/S7.6_A1.1_T5.js deleted file mode 100644 index fc91d3a1e..000000000 --- a/tests/ES3/Unicode/Unicode_510/S7.6_A1.1_T5.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A1.1_T5; - * @section: 7.6; - * @assertion: IdentifierStart :: UnicodeLetter (any character in the Unicode categories "Lu", "Ll", "Lt", "Lm", "Lo", "Nl"); - * @description: UnicodeLetter :: Other letter (Lo). - * Complex test with eval; -*/ - -//CHECK -Lo = [[0x01BB, 0x01BB], [0x01C0, 0x01C3], [0x0294, 0x0294], [0x05D0, 0x05EA], [0x05F0, 0x05F2], [0x0621, 0x063F], [0x0641, 0x064A], [0x066E, 0x066F], [0x0671, 0x06D3], [0x06D5, 0x06D5], [0x06EE, 0x06EF], [0x06FA, 0x06FC], [0x06FF, 0x06FF], [0x0710, 0x0710], [0x0712, 0x072F], [0x074D, 0x07A5], [0x07B1, 0x07B1], [0x07CA, 0x07EA], [0x0904, 0x0939], [0x093D, 0x093D], [0x0950, 0x0950], [0x0958, 0x0961], [0x0972, 0x0972], [0x097B, 0x097F], [0x0985, 0x098C], [0x098F, 0x0990], [0x0993, 0x09A8], [0x09AA, 0x09B0], [0x09B2, 0x09B2], [0x09B6, 0x09B9], [0x09BD, 0x09BD], [0x09CE, 0x09CE], [0x09DC, 0x09DD], [0x09DF, 0x09E1], [0x09F0, 0x09F1], [0x0A05, 0x0A0A], [0x0A0F, 0x0A10], [0x0A13, 0x0A28], [0x0A2A, 0x0A30], [0x0A32, 0x0A33], [0x0A35, 0x0A36], [0x0A38, 0x0A39], [0x0A59, 0x0A5C], [0x0A5E, 0x0A5E], [0x0A72, 0x0A74], [0x0A85, 0x0A8D], [0x0A8F, 0x0A91], [0x0A93, 0x0AA8], [0x0AAA, 0x0AB0], [0x0AB2, 0x0AB3], [0x0AB5, 0x0AB9], [0x0ABD, 0x0ABD], [0x0AD0, 0x0AD0], [0x0AE0, 0x0AE1], [0x0B05, 0x0B0C], [0x0B0F, 0x0B10], [0x0B13, 0x0B28], [0x0B2A, 0x0B30], [0x0B32, 0x0B33], [0x0B35, 0x0B39], [0x0B3D, 0x0B3D], [0x0B5C, 0x0B5D], [0x0B5F, 0x0B61], [0x0B71, 0x0B71], [0x0B83, 0x0B83], [0x0B85, 0x0B8A], [0x0B8E, 0x0B90], [0x0B92, 0x0B95], [0x0B99, 0x0B9A], [0x0B9C, 0x0B9C], [0x0B9E, 0x0B9F], [0x0BA3, 0x0BA4], [0x0BA8, 0x0BAA], [0x0BAE, 0x0BB9], [0x0BD0, 0x0BD0], [0x0C05, 0x0C0C], [0x0C0E, 0x0C10], [0x0C12, 0x0C28], [0x0C2A, 0x0C33], [0x0C35, 0x0C39], [0x0C3D, 0x0C3D], [0x0C58, 0x0C59], [0x0C60, 0x0C61], [0x0C85, 0x0C8C], [0x0C8E, 0x0C90], [0x0C92, 0x0CA8], [0x0CAA, 0x0CB3], [0x0CB5, 0x0CB9], [0x0CBD, 0x0CBD], [0x0CDE, 0x0CDE], [0x0CE0, 0x0CE1], [0x0D05, 0x0D0C], [0x0D0E, 0x0D10], [0x0D12, 0x0D28], [0x0D2A, 0x0D39], [0x0D3D, 0x0D3D], [0x0D60, 0x0D61], [0x0D7A, 0x0D7F], [0x0D85, 0x0D96], [0x0D9A, 0x0DB1], [0x0DB3, 0x0DBB], [0x0DBD, 0x0DBD], [0x0DC0, 0x0DC6], [0x0E01, 0x0E30], [0x0E32, 0x0E33], [0x0E40, 0x0E45], [0x0E81, 0x0E82], [0x0E84, 0x0E84], [0x0E87, 0x0E88], [0x0E8A, 0x0E8A], [0x0E8D, 0x0E8D], [0x0E94, 0x0E97], [0x0E99, 0x0E9F], [0x0EA1, 0x0EA3], [0x0EA5, 0x0EA5], [0x0EA7, 0x0EA7], [0x0EAA, 0x0EAB], [0x0EAD, 0x0EB0], [0x0EB2, 0x0EB3], [0x0EBD, 0x0EBD], [0x0EC0, 0x0EC4], [0x0EDC, 0x0EDD], [0x0F00, 0x0F00], [0x0F40, 0x0F47], [0x0F49, 0x0F6C], [0x0F88, 0x0F8B], [0x1000, 0x102A], [0x103F, 0x103F], [0x1050, 0x1055], [0x105A, 0x105D], [0x1061, 0x1061], [0x1065, 0x1066], [0x106E, 0x1070], [0x1075, 0x1081], [0x108E, 0x108E], [0x10D0, 0x10FA], [0x1100, 0x1159], [0x115F, 0x11A2], [0x11A8, 0x11F9], [0x1200, 0x1248], [0x124A, 0x124D], [0x1250, 0x1256], [0x1258, 0x1258], [0x125A, 0x125D], [0x1260, 0x1288], [0x128A, 0x128D], [0x1290, 0x12B0], [0x12B2, 0x12B5], [0x12B8, 0x12BE], [0x12C0, 0x12C0], [0x12C2, 0x12C5], [0x12C8, 0x12D6], [0x12D8, 0x1310], [0x1312, 0x1315], [0x1318, 0x135A], [0x1380, 0x138F], [0x13A0, 0x13F4], [0x1401, 0x166C], [0x166F, 0x1676], [0x1681, 0x169A], [0x16A0, 0x16EA], [0x1700, 0x170C], [0x170E, 0x1711], [0x1720, 0x1731], [0x1740, 0x1751], [0x1760, 0x176C], [0x176E, 0x1770], [0x1780, 0x17B3], [0x17DC, 0x17DC], [0x1820, 0x1842], [0x1844, 0x1877], [0x1880, 0x18A8], [0x18AA, 0x18AA], [0x1900, 0x191C], [0x1950, 0x196D], [0x1970, 0x1974], [0x1980, 0x19A9], [0x19C1, 0x19C7], [0x1A00, 0x1A16], [0x1B05, 0x1B33], [0x1B45, 0x1B4B], [0x1B83, 0x1BA0], [0x1BAE, 0x1BAF], [0x1C00, 0x1C23], [0x1C4D, 0x1C4F], [0x1C5A, 0x1C77], [0x2135, 0x2138], [0x2D30, 0x2D65], [0x2D80, 0x2D96], [0x2DA0, 0x2DA6], [0x2DA8, 0x2DAE], [0x2DB0, 0x2DB6], [0x2DB8, 0x2DBE], [0x2DC0, 0x2DC6], [0x2DC8, 0x2DCE], [0x2DD0, 0x2DD6], [0x2DD8, 0x2DDE], [0x3006, 0x3006], [0x303C, 0x303C], [0x3041, 0x3096], [0x309F, 0x309F], [0x30A1, 0x30FA], [0x30FF, 0x30FF], [0x3105, 0x312D], [0x3131, 0x318E], [0x31A0, 0x31B7], [0x31F0, 0x31FF], [0x3400, 0x4DB5], [0x4E00, 0x9FC3], [0xA000, 0xA014], [0xA016, 0xA48C], [0xA500, 0xA60B], [0xA610, 0xA61F], [0xA62A, 0xA62B], [0xA66E, 0xA66E], [0xA7FB, 0xA801], [0xA803, 0xA805], [0xA807, 0xA80A], [0xA80C, 0xA822], [0xA840, 0xA873], [0xA882, 0xA8B3], [0xA90A, 0xA925], [0xA930, 0xA946], [0xAA00, 0xAA28], [0xAA40, 0xAA42], [0xAA44, 0xAA4B], [0xAC00, 0xD7A3], [0xF900, 0xFA2D], [0xFA30, 0xFA6A], [0xFA70, 0xFAD9], [0xFB1D, 0xFB1D], [0xFB1F, 0xFB28], [0xFB2A, 0xFB36], [0xFB38, 0xFB3C], [0xFB3E, 0xFB3E], [0xFB40, 0xFB41], [0xFB43, 0xFB44], [0xFB46, 0xFBB1], [0xFBD3, 0xFD3D], [0xFD50, 0xFD8F], [0xFD92, 0xFDC7], [0xFDF0, 0xFDFB], [0xFE70, 0xFE74], [0xFE76, 0xFEFC], [0xFF66, 0xFF6F], [0xFF71, 0xFF9D], [0xFFA0, 0xFFBE], [0xFFC2, 0xFFC7], [0xFFCA, 0xFFCF], [0xFFD2, 0xFFD7], [0xFFDA, 0xFFDC]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Lo.length; indexI++) { - for (indexJ = Lo[indexI][0]; indexJ <= Lo[indexI][1]; indexJ++) { - try { - var identifier = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval("var " + identifier + "=1"); - if (eval(identifier + "===1") !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_510/S7.6_A1.1_T6.js b/tests/ES3/Unicode/Unicode_510/S7.6_A1.1_T6.js deleted file mode 100644 index 2f6ab4dc1..000000000 --- a/tests/ES3/Unicode/Unicode_510/S7.6_A1.1_T6.js +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A1.1_T6; - * @section: 7.6; - * @assertion: IdentifierStart :: UnicodeLetter (any character in the Unicode categories "Lu", "Ll", "Lt", "Lm", "Lo", "Nl"); - * @description: UnicodeLetter :: Letter number (Nl); -*/ - -//CHECK -Nl = [[0x16EE, 0x16F0], [0x2160, 0x2182], [0x2185, 0x2188], [0x3007, 0x3007], [0x3021, 0x3029], [0x3038, 0x303A]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Nl.length; indexI++) { - for (indexJ = Nl[indexI][0]; indexJ <= Nl[indexI][1]; indexJ++) { - try { - var identifier = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval("var " + identifier + "=1"); - if (eval(identifier + "===1") !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_510/S7.6_A1.4_T1.js b/tests/ES3/Unicode/Unicode_510/S7.6_A1.4_T1.js deleted file mode 100644 index af65435a4..000000000 --- a/tests/ES3/Unicode/Unicode_510/S7.6_A1.4_T1.js +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A1.4_T1; - * @section: 7.6; - * @assertion: IdentifierName must begin at IdentifierStart; - * @description: IdentifierStart is not UnicodeCombiningMark ("Mn"). - * Complex test with eval; -*/ - -//CHECK -Mn = [[0x0300, 0x036F], [0x0483, 0x0487], [0x0591, 0x05BD], [0x05BF, 0x05BF], [0x05C1, 0x05C2], [0x05C4, 0x05C5], [0x05C7, 0x05C7], [0x0610, 0x061A], [0x064B, 0x065E], [0x0670, 0x0670], [0x06D6, 0x06DC], [0x06DF, 0x06E4], [0x06E7, 0x06E8], [0x06EA, 0x06ED], [0x0711, 0x0711], [0x0730, 0x074A], [0x07A6, 0x07B0], [0x07EB, 0x07F3], [0x0901, 0x0902], [0x093C, 0x093C], [0x0941, 0x0948], [0x094D, 0x094D], [0x0951, 0x0954], [0x0962, 0x0963], [0x0981, 0x0981], [0x09BC, 0x09BC], [0x09C1, 0x09C4], [0x09CD, 0x09CD], [0x09E2, 0x09E3], [0x0A01, 0x0A02], [0x0A3C, 0x0A3C], [0x0A41, 0x0A42], [0x0A47, 0x0A48], [0x0A4B, 0x0A4D], [0x0A51, 0x0A51], [0x0A70, 0x0A71], [0x0A75, 0x0A75], [0x0A81, 0x0A82], [0x0ABC, 0x0ABC], [0x0AC1, 0x0AC5], [0x0AC7, 0x0AC8], [0x0ACD, 0x0ACD], [0x0AE2, 0x0AE3], [0x0B01, 0x0B01], [0x0B3C, 0x0B3C], [0x0B3F, 0x0B3F], [0x0B41, 0x0B44], [0x0B4D, 0x0B4D], [0x0B56, 0x0B56], [0x0B62, 0x0B63], [0x0B82, 0x0B82], [0x0BC0, 0x0BC0], [0x0BCD, 0x0BCD], [0x0C3E, 0x0C40], [0x0C46, 0x0C48], [0x0C4A, 0x0C4D], [0x0C55, 0x0C56], [0x0C62, 0x0C63], [0x0CBC, 0x0CBC], [0x0CBF, 0x0CBF], [0x0CC6, 0x0CC6], [0x0CCC, 0x0CCD], [0x0CE2, 0x0CE3], [0x0D41, 0x0D44], [0x0D4D, 0x0D4D], [0x0D62, 0x0D63], [0x0DCA, 0x0DCA], [0x0DD2, 0x0DD4], [0x0DD6, 0x0DD6], [0x0E31, 0x0E31], [0x0E34, 0x0E3A], [0x0E47, 0x0E4E], [0x0EB1, 0x0EB1], [0x0EB4, 0x0EB9], [0x0EBB, 0x0EBC], [0x0EC8, 0x0ECD], [0x0F18, 0x0F19], [0x0F35, 0x0F35], [0x0F37, 0x0F37], [0x0F39, 0x0F39], [0x0F71, 0x0F7E], [0x0F80, 0x0F84], [0x0F86, 0x0F87], [0x0F90, 0x0F97], [0x0F99, 0x0FBC], [0x0FC6, 0x0FC6], [0x102D, 0x1030], [0x1032, 0x1037], [0x1039, 0x103A], [0x103D, 0x103E], [0x1058, 0x1059], [0x105E, 0x1060], [0x1071, 0x1074], [0x1082, 0x1082], [0x1085, 0x1086], [0x108D, 0x108D], [0x135F, 0x135F], [0x1712, 0x1714], [0x1732, 0x1734], [0x1752, 0x1753], [0x1772, 0x1773], [0x17B7, 0x17BD], [0x17C6, 0x17C6], [0x17C9, 0x17D3], [0x17DD, 0x17DD], [0x180B, 0x180D], [0x18A9, 0x18A9], [0x1920, 0x1922], [0x1927, 0x1928], [0x1932, 0x1932], [0x1939, 0x193B], [0x1A17, 0x1A18], [0x1B00, 0x1B03], [0x1B34, 0x1B34], [0x1B36, 0x1B3A], [0x1B3C, 0x1B3C], [0x1B42, 0x1B42], [0x1B6B, 0x1B73], [0x1B80, 0x1B81], [0x1BA2, 0x1BA5], [0x1BA8, 0x1BA9], [0x1C2C, 0x1C33], [0x1C36, 0x1C37], [0x1DC0, 0x1DE6], [0x1DFE, 0x1DFF], [0x20D0, 0x20DC], [0x20E1, 0x20E1], [0x20E5, 0x20F0], [0x2DE0, 0x2DFF], [0x302A, 0x302F], [0x3099, 0x309A], [0xA66F, 0xA66F], [0xA67C, 0xA67D], [0xA802, 0xA802], [0xA806, 0xA806], [0xA80B, 0xA80B], [0xA825, 0xA826], [0xA8C4, 0xA8C4], [0xA926, 0xA92D], [0xA947, 0xA951], [0xAA29, 0xAA2E], [0xAA31, 0xAA32], [0xAA35, 0xAA36], [0xAA43, 0xAA43], [0xAA4C, 0xAA4C], [0xFB1E, 0xFB1E], [0xFE00, 0xFE0F], [0xFE20, 0xFE26]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Mn.length; indexI++) { - for (indexJ = Mn[indexI][0]; indexJ <= Mn[indexI][1]; indexJ++) { - try { - var identifier = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval("var " + identifier + "=1"); - $ERROR('#' + hex + ' '); - errorCount++; - } catch (e) { - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_510/S7.6_A1.4_T2.js b/tests/ES3/Unicode/Unicode_510/S7.6_A1.4_T2.js deleted file mode 100644 index 0ea16d6af..000000000 --- a/tests/ES3/Unicode/Unicode_510/S7.6_A1.4_T2.js +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A1.4_T2; - * @section: 7.6; - * @assertion: IdentifierName must begin at IdentifierStart; - * @description: IdentifierStart is not UnicodeCombiningMark ("Mc"). - * Complex test with eval; -*/ - -//CHECK -Mc = [[0x0903, 0x0903], [0x093E, 0x0940], [0x0949, 0x094C], [0x0982, 0x0983], [0x09BE, 0x09C0], [0x09C7, 0x09C8], [0x09CB, 0x09CC], [0x09D7, 0x09D7], [0x0A03, 0x0A03], [0x0A3E, 0x0A40], [0x0A83, 0x0A83], [0x0ABE, 0x0AC0], [0x0AC9, 0x0AC9], [0x0ACB, 0x0ACC], [0x0B02, 0x0B03], [0x0B3E, 0x0B3E], [0x0B40, 0x0B40], [0x0B47, 0x0B48], [0x0B4B, 0x0B4C], [0x0B57, 0x0B57], [0x0BBE, 0x0BBF], [0x0BC1, 0x0BC2], [0x0BC6, 0x0BC8], [0x0BCA, 0x0BCC], [0x0BD7, 0x0BD7], [0x0C01, 0x0C03], [0x0C41, 0x0C44], [0x0C82, 0x0C83], [0x0CBE, 0x0CBE], [0x0CC0, 0x0CC4], [0x0CC7, 0x0CC8], [0x0CCA, 0x0CCB], [0x0CD5, 0x0CD6], [0x0D02, 0x0D03], [0x0D3E, 0x0D40], [0x0D46, 0x0D48], [0x0D4A, 0x0D4C], [0x0D57, 0x0D57], [0x0D82, 0x0D83], [0x0DCF, 0x0DD1], [0x0DD8, 0x0DDF], [0x0DF2, 0x0DF3], [0x0F3E, 0x0F3F], [0x0F7F, 0x0F7F], [0x102B, 0x102C], [0x1031, 0x1031], [0x1038, 0x1038], [0x103B, 0x103C], [0x1056, 0x1057], [0x1062, 0x1064], [0x1067, 0x106D], [0x1083, 0x1084], [0x1087, 0x108C], [0x108F, 0x108F], [0x17B6, 0x17B6], [0x17BE, 0x17C5], [0x17C7, 0x17C8], [0x1923, 0x1926], [0x1929, 0x192B], [0x1930, 0x1931], [0x1933, 0x1938], [0x19B0, 0x19C0], [0x19C8, 0x19C9], [0x1A19, 0x1A1B], [0x1B04, 0x1B04], [0x1B35, 0x1B35], [0x1B3B, 0x1B3B], [0x1B3D, 0x1B41], [0x1B43, 0x1B44], [0x1B82, 0x1B82], [0x1BA1, 0x1BA1], [0x1BA6, 0x1BA7], [0x1BAA, 0x1BAA], [0x1C24, 0x1C2B], [0x1C34, 0x1C35], [0xA823, 0xA824], [0xA827, 0xA827], [0xA880, 0xA881], [0xA8B4, 0xA8C3], [0xA952, 0xA953], [0xAA2F, 0xAA30], [0xAA33, 0xAA34], [0xAA4D, 0xAA4D]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Mc.length; indexI++) { - for (indexJ = Mc[indexI][0]; indexJ <= Mc[indexI][1]; indexJ++) { - try { - var identifier = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval("var " + identifier + "=1"); - $ERROR('#' + hex + ' '); - errorCount++; - } catch (e) { - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_510/S7.6_A1.4_T3.js b/tests/ES3/Unicode/Unicode_510/S7.6_A1.4_T3.js deleted file mode 100644 index 4c990dc03..000000000 --- a/tests/ES3/Unicode/Unicode_510/S7.6_A1.4_T3.js +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A1.4_T3; - * @section: 7.6; - * @assertion: IdentifierName must begin at IdentifierStart; - * @description: IdentifierStart is not UnicodeDigit ("Nd"). - * Complex test with eval; -*/ - -//CHECK -Nd = [[0x0030, 0x0039], [0x0660, 0x0669], [0x06F0, 0x06F9], [0x07C0, 0x07C9], [0x0966, 0x096F], [0x09E6, 0x09EF], [0x0A66, 0x0A6F], [0x0AE6, 0x0AEF], [0x0B66, 0x0B6F], [0x0BE6, 0x0BEF], [0x0C66, 0x0C6F], [0x0CE6, 0x0CEF], [0x0D66, 0x0D6F], [0x0E50, 0x0E59], [0x0ED0, 0x0ED9], [0x0F20, 0x0F29], [0x1040, 0x1049], [0x1090, 0x1099], [0x17E0, 0x17E9], [0x1810, 0x1819], [0x1946, 0x194F], [0x19D0, 0x19D9], [0x1B50, 0x1B59], [0x1BB0, 0x1BB9], [0x1C40, 0x1C49], [0x1C50, 0x1C59], [0xA620, 0xA629], [0xA8D0, 0xA8D9], [0xA900, 0xA909], [0xAA50, 0xAA59], [0xFF10, 0xFF19]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Nd.length; indexI++) { - for (indexJ = Nd[indexI][0]; indexJ <= Nd[indexI][1]; indexJ++) { - try { - var identifier = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval("var " + identifier + "=1"); - $ERROR('#' + hex + ' '); - errorCount++; - } catch (e) { - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_510/S7.6_A1.4_T4.js b/tests/ES3/Unicode/Unicode_510/S7.6_A1.4_T4.js deleted file mode 100644 index d1f641833..000000000 --- a/tests/ES3/Unicode/Unicode_510/S7.6_A1.4_T4.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A1.4_T4; - * @section: 7.6; - * @assertion: IdentifierName must begin at IdentifierStart; - * @description: IdentifierStart is not UnicodeConnectorPunctuation ("Pc") without $. - * Complex test with eval; -*/ - -//CHECK -Pc = [[0x005F, 0x005F], [0x203F, 0x2040], [0x2054, 0x2054], [0xFE33, 0xFE34], [0xFE4D, 0xFE4F], [0xFF3F, 0xFF3F]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Pc.length; indexI++) { - for (indexJ = Pc[indexI][0]; indexJ <= Pc[indexI][1]; indexJ++) { - try { - var identifier = String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - if (hex !== "0078") { - eval("var " + identifier + "=1"); - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_510/S7.6_A2.2_T1.js b/tests/ES3/Unicode/Unicode_510/S7.6_A2.2_T1.js deleted file mode 100644 index 1e173b1b1..000000000 --- a/tests/ES3/Unicode/Unicode_510/S7.6_A2.2_T1.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A2.2_T1; - * @section: 7.6; - * @assertion: IdentifierPart :: UnicodeCombiningMark (any character in the Unicode categories "Mn", "Mc"); - * @description: UnicodeCombiningMark :: Non-spacing mark (Mn). - * Complex test with eval; -*/ - -//CHECK -Mn = [[0x0300, 0x036F], [0x0483, 0x0487], [0x0591, 0x05BD], [0x05BF, 0x05BF], [0x05C1, 0x05C2], [0x05C4, 0x05C5], [0x05C7, 0x05C7], [0x0610, 0x061A], [0x064B, 0x065E], [0x0670, 0x0670], [0x06D6, 0x06DC], [0x06DF, 0x06E4], [0x06E7, 0x06E8], [0x06EA, 0x06ED], [0x0711, 0x0711], [0x0730, 0x074A], [0x07A6, 0x07B0], [0x07EB, 0x07F3], [0x0901, 0x0902], [0x093C, 0x093C], [0x0941, 0x0948], [0x094D, 0x094D], [0x0951, 0x0954], [0x0962, 0x0963], [0x0981, 0x0981], [0x09BC, 0x09BC], [0x09C1, 0x09C4], [0x09CD, 0x09CD], [0x09E2, 0x09E3], [0x0A01, 0x0A02], [0x0A3C, 0x0A3C], [0x0A41, 0x0A42], [0x0A47, 0x0A48], [0x0A4B, 0x0A4D], [0x0A51, 0x0A51], [0x0A70, 0x0A71], [0x0A75, 0x0A75], [0x0A81, 0x0A82], [0x0ABC, 0x0ABC], [0x0AC1, 0x0AC5], [0x0AC7, 0x0AC8], [0x0ACD, 0x0ACD], [0x0AE2, 0x0AE3], [0x0B01, 0x0B01], [0x0B3C, 0x0B3C], [0x0B3F, 0x0B3F], [0x0B41, 0x0B44], [0x0B4D, 0x0B4D], [0x0B56, 0x0B56], [0x0B62, 0x0B63], [0x0B82, 0x0B82], [0x0BC0, 0x0BC0], [0x0BCD, 0x0BCD], [0x0C3E, 0x0C40], [0x0C46, 0x0C48], [0x0C4A, 0x0C4D], [0x0C55, 0x0C56], [0x0C62, 0x0C63], [0x0CBC, 0x0CBC], [0x0CBF, 0x0CBF], [0x0CC6, 0x0CC6], [0x0CCC, 0x0CCD], [0x0CE2, 0x0CE3], [0x0D41, 0x0D44], [0x0D4D, 0x0D4D], [0x0D62, 0x0D63], [0x0DCA, 0x0DCA], [0x0DD2, 0x0DD4], [0x0DD6, 0x0DD6], [0x0E31, 0x0E31], [0x0E34, 0x0E3A], [0x0E47, 0x0E4E], [0x0EB1, 0x0EB1], [0x0EB4, 0x0EB9], [0x0EBB, 0x0EBC], [0x0EC8, 0x0ECD], [0x0F18, 0x0F19], [0x0F35, 0x0F35], [0x0F37, 0x0F37], [0x0F39, 0x0F39], [0x0F71, 0x0F7E], [0x0F80, 0x0F84], [0x0F86, 0x0F87], [0x0F90, 0x0F97], [0x0F99, 0x0FBC], [0x0FC6, 0x0FC6], [0x102D, 0x1030], [0x1032, 0x1037], [0x1039, 0x103A], [0x103D, 0x103E], [0x1058, 0x1059], [0x105E, 0x1060], [0x1071, 0x1074], [0x1082, 0x1082], [0x1085, 0x1086], [0x108D, 0x108D], [0x135F, 0x135F], [0x1712, 0x1714], [0x1732, 0x1734], [0x1752, 0x1753], [0x1772, 0x1773], [0x17B7, 0x17BD], [0x17C6, 0x17C6], [0x17C9, 0x17D3], [0x17DD, 0x17DD], [0x180B, 0x180D], [0x18A9, 0x18A9], [0x1920, 0x1922], [0x1927, 0x1928], [0x1932, 0x1932], [0x1939, 0x193B], [0x1A17, 0x1A18], [0x1B00, 0x1B03], [0x1B34, 0x1B34], [0x1B36, 0x1B3A], [0x1B3C, 0x1B3C], [0x1B42, 0x1B42], [0x1B6B, 0x1B73], [0x1B80, 0x1B81], [0x1BA2, 0x1BA5], [0x1BA8, 0x1BA9], [0x1C2C, 0x1C33], [0x1C36, 0x1C37], [0x1DC0, 0x1DE6], [0x1DFE, 0x1DFF], [0x20D0, 0x20DC], [0x20E1, 0x20E1], [0x20E5, 0x20F0], [0x2DE0, 0x2DFF], [0x302A, 0x302F], [0x3099, 0x309A], [0xA66F, 0xA66F], [0xA67C, 0xA67D], [0xA802, 0xA802], [0xA806, 0xA806], [0xA80B, 0xA80B], [0xA825, 0xA826], [0xA8C4, 0xA8C4], [0xA926, 0xA92D], [0xA947, 0xA951], [0xAA29, 0xAA2E], [0xAA31, 0xAA32], [0xAA35, 0xAA36], [0xAA43, 0xAA43], [0xAA4C, 0xAA4C], [0xFB1E, 0xFB1E], [0xFE00, 0xFE0F], [0xFE20, 0xFE26]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Mn.length; indexI++) { - for (indexJ = Mn[indexI][0]; indexJ <= Mn[indexI][1]; indexJ++) { - try { - var identifier = "$" + String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval("var " + identifier + "=1"); - if (eval(identifier + "===1") !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_510/S7.6_A2.2_T2.js b/tests/ES3/Unicode/Unicode_510/S7.6_A2.2_T2.js deleted file mode 100644 index edd8709e3..000000000 --- a/tests/ES3/Unicode/Unicode_510/S7.6_A2.2_T2.js +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A2.2_T2; - * @section: 7.6; - * @assertion: IdentifierPart :: UnicodeCombiningMark (any character in the Unicode categories "Mn", "Mc"); - * @description: UnicodeCombiningMark :: Combining spacing mark (Mc). - * Complex test with eval; -*/ - -//CHECK -Mc = [[0x0903, 0x0903], [0x093E, 0x0940], [0x0949, 0x094C], [0x0982, 0x0983], [0x09BE, 0x09C0], [0x09C7, 0x09C8], [0x09CB, 0x09CC], [0x09D7, 0x09D7], [0x0A03, 0x0A03], [0x0A3E, 0x0A40], [0x0A83, 0x0A83], [0x0ABE, 0x0AC0], [0x0AC9, 0x0AC9], [0x0ACB, 0x0ACC], [0x0B02, 0x0B03], [0x0B3E, 0x0B3E], [0x0B40, 0x0B40], [0x0B47, 0x0B48], [0x0B4B, 0x0B4C], [0x0B57, 0x0B57], [0x0BBE, 0x0BBF], [0x0BC1, 0x0BC2], [0x0BC6, 0x0BC8], [0x0BCA, 0x0BCC], [0x0BD7, 0x0BD7], [0x0C01, 0x0C03], [0x0C41, 0x0C44], [0x0C82, 0x0C83], [0x0CBE, 0x0CBE], [0x0CC0, 0x0CC4], [0x0CC7, 0x0CC8], [0x0CCA, 0x0CCB], [0x0CD5, 0x0CD6], [0x0D02, 0x0D03], [0x0D3E, 0x0D40], [0x0D46, 0x0D48], [0x0D4A, 0x0D4C], [0x0D57, 0x0D57], [0x0D82, 0x0D83], [0x0DCF, 0x0DD1], [0x0DD8, 0x0DDF], [0x0DF2, 0x0DF3], [0x0F3E, 0x0F3F], [0x0F7F, 0x0F7F], [0x102B, 0x102C], [0x1031, 0x1031], [0x1038, 0x1038], [0x103B, 0x103C], [0x1056, 0x1057], [0x1062, 0x1064], [0x1067, 0x106D], [0x1083, 0x1084], [0x1087, 0x108C], [0x108F, 0x108F], [0x17B6, 0x17B6], [0x17BE, 0x17C5], [0x17C7, 0x17C8], [0x1923, 0x1926], [0x1929, 0x192B], [0x1930, 0x1931], [0x1933, 0x1938], [0x19B0, 0x19C0], [0x19C8, 0x19C9], [0x1A19, 0x1A1B], [0x1B04, 0x1B04], [0x1B35, 0x1B35], [0x1B3B, 0x1B3B], [0x1B3D, 0x1B41], [0x1B43, 0x1B44], [0x1B82, 0x1B82], [0x1BA1, 0x1BA1], [0x1BA6, 0x1BA7], [0x1BAA, 0x1BAA], [0x1C24, 0x1C2B], [0x1C34, 0x1C35], [0xA823, 0xA824], [0xA827, 0xA827], [0xA880, 0xA881], [0xA8B4, 0xA8C3], [0xA952, 0xA953], [0xAA2F, 0xAA30], [0xAA33, 0xAA34], [0xAA4D, 0xAA4D]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Mc.length; indexI++) { - for (indexJ = Mc[indexI][0]; indexJ <= Mc[indexI][1]; indexJ++) { - try { - var identifier = "$" + String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval("var " + identifier + "=1"); - if (eval(identifier + "===1") !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_510/S7.6_A2.3.js b/tests/ES3/Unicode/Unicode_510/S7.6_A2.3.js deleted file mode 100644 index b4e9ef292..000000000 --- a/tests/ES3/Unicode/Unicode_510/S7.6_A2.3.js +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A2.3; - * @section: 7.6; - * @assertion: IdentifierPart :: UnicodeDigit (any character in the Unicode categories "Decimal Number (Nd)". - * @description: Complex test with eval; -*/ - -//CHECK -Nd = [[0x0030, 0x0039], [0x0660, 0x0669], [0x06F0, 0x06F9], [0x07C0, 0x07C9], [0x0966, 0x096F], [0x09E6, 0x09EF], [0x0A66, 0x0A6F], [0x0AE6, 0x0AEF], [0x0B66, 0x0B6F], [0x0BE6, 0x0BEF], [0x0C66, 0x0C6F], [0x0CE6, 0x0CEF], [0x0D66, 0x0D6F], [0x0E50, 0x0E59], [0x0ED0, 0x0ED9], [0x0F20, 0x0F29], [0x1040, 0x1049], [0x1090, 0x1099], [0x17E0, 0x17E9], [0x1810, 0x1819], [0x1946, 0x194F], [0x19D0, 0x19D9], [0x1B50, 0x1B59], [0x1BB0, 0x1BB9], [0x1C40, 0x1C49], [0x1C50, 0x1C59], [0xA620, 0xA629], [0xA8D0, 0xA8D9], [0xA900, 0xA909], [0xAA50, 0xAA59], [0xFF10, 0xFF19]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Nd.length; indexI++) { - for (indexJ = Nd[indexI][0]; indexJ <= Nd[indexI][1]; indexJ++) { - try { - var identifier = "$" + String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval("var " + identifier + "=1"); - if (eval(identifier + "===1") !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_510/S7.6_A2.4.js b/tests/ES3/Unicode/Unicode_510/S7.6_A2.4.js deleted file mode 100644 index e7b636a2a..000000000 --- a/tests/ES3/Unicode/Unicode_510/S7.6_A2.4.js +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A2.4; - * @section: 7.6; - * @assertion: IdentifierPart :: UnicodeConnectorPunctuation (any character in the Unicode categories "Connector Punctuation (Pc)". - * @description: Complex test with eval; -*/ - -//CHECK -Pc = [[0x005F, 0x005F], [0x203F, 0x2040], [0x2054, 0x2054], [0xFE33, 0xFE34], [0xFE4D, 0xFE4F], [0xFF3F, 0xFF3F]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Pc.length; indexI++) { - for (indexJ = Pc[indexI][0]; indexJ <= Pc[indexI][1]; indexJ++) { - try { - var identifier = "$" + String.fromCharCode(indexJ); - var hex = decimalToHexString(indexJ); - eval("var " + identifier + "=1"); - if (eval(identifier + "===1") !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_510/S7.6_A3.1.js b/tests/ES3/Unicode/Unicode_510/S7.6_A3.1.js deleted file mode 100644 index 79dea16a6..000000000 --- a/tests/ES3/Unicode/Unicode_510/S7.6_A3.1.js +++ /dev/null @@ -1,152 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A3.1; - * @section: 7.6; - * @assertion: IdentifierName must contain only IdentifierPart character; - * @description: Complex test with eval; -*/ - -//CHECK -Lu = [[0x0041, 0x005A], [0x00C0, 0x00D6], [0x00D8, 0x00DE], [0x0100, 0x0100], [0x0102, 0x0102], [0x0104, 0x0104], [0x0106, 0x0106], [0x0108, 0x0108], [0x010A, 0x010A], [0x010C, 0x010C], [0x010E, 0x010E], [0x0110, 0x0110], [0x0112, 0x0112], [0x0114, 0x0114], [0x0116, 0x0116], [0x0118, 0x0118], [0x011A, 0x011A], [0x011C, 0x011C], [0x011E, 0x011E], [0x0120, 0x0120], [0x0122, 0x0122], [0x0124, 0x0124], [0x0126, 0x0126], [0x0128, 0x0128], [0x012A, 0x012A], [0x012C, 0x012C], [0x012E, 0x012E], [0x0130, 0x0130], [0x0132, 0x0132], [0x0134, 0x0134], [0x0136, 0x0136], [0x0139, 0x0139], [0x013B, 0x013B], [0x013D, 0x013D], [0x013F, 0x013F], [0x0141, 0x0141], [0x0143, 0x0143], [0x0145, 0x0145], [0x0147, 0x0147], [0x014A, 0x014A], [0x014C, 0x014C], [0x014E, 0x014E], [0x0150, 0x0150], [0x0152, 0x0152], [0x0154, 0x0154], [0x0156, 0x0156], [0x0158, 0x0158], [0x015A, 0x015A], [0x015C, 0x015C], [0x015E, 0x015E], [0x0160, 0x0160], [0x0162, 0x0162], [0x0164, 0x0164], [0x0166, 0x0166], [0x0168, 0x0168], [0x016A, 0x016A], [0x016C, 0x016C], [0x016E, 0x016E], [0x0170, 0x0170], [0x0172, 0x0172], [0x0174, 0x0174], [0x0176, 0x0176], [0x0178, 0x0179], [0x017B, 0x017B], [0x017D, 0x017D], [0x0181, 0x0182], [0x0184, 0x0184], [0x0186, 0x0187], [0x0189, 0x018B], [0x018E, 0x0191], [0x0193, 0x0194], [0x0196, 0x0198], [0x019C, 0x019D], [0x019F, 0x01A0], [0x01A2, 0x01A2], [0x01A4, 0x01A4], [0x01A6, 0x01A7], [0x01A9, 0x01A9], [0x01AC, 0x01AC], [0x01AE, 0x01AF], [0x01B1, 0x01B3], [0x01B5, 0x01B5], [0x01B7, 0x01B8], [0x01BC, 0x01BC], [0x01C4, 0x01C4], [0x01C7, 0x01C7], [0x01CA, 0x01CA], [0x01CD, 0x01CD], [0x01CF, 0x01CF], [0x01D1, 0x01D1], [0x01D3, 0x01D3], [0x01D5, 0x01D5], [0x01D7, 0x01D7], [0x01D9, 0x01D9], [0x01DB, 0x01DB], [0x01DE, 0x01DE], [0x01E0, 0x01E0], [0x01E2, 0x01E2], [0x01E4, 0x01E4], [0x01E6, 0x01E6], [0x01E8, 0x01E8], [0x01EA, 0x01EA], [0x01EC, 0x01EC], [0x01EE, 0x01EE], [0x01F1, 0x01F1], [0x01F4, 0x01F4], [0x01F6, 0x01F8], [0x01FA, 0x01FA], [0x01FC, 0x01FC], [0x01FE, 0x01FE], [0x0200, 0x0200], [0x0202, 0x0202], [0x0204, 0x0204], [0x0206, 0x0206], [0x0208, 0x0208], [0x020A, 0x020A], [0x020C, 0x020C], [0x020E, 0x020E], [0x0210, 0x0210], [0x0212, 0x0212], [0x0214, 0x0214], [0x0216, 0x0216], [0x0218, 0x0218], [0x021A, 0x021A], [0x021C, 0x021C], [0x021E, 0x021E], [0x0220, 0x0220], [0x0222, 0x0222], [0x0224, 0x0224], [0x0226, 0x0226], [0x0228, 0x0228], [0x022A, 0x022A], [0x022C, 0x022C], [0x022E, 0x022E], [0x0230, 0x0230], [0x0232, 0x0232], [0x023A, 0x023B], [0x023D, 0x023E], [0x0241, 0x0241], [0x0243, 0x0246], [0x0248, 0x0248], [0x024A, 0x024A], [0x024C, 0x024C], [0x024E, 0x024E], [0x0370, 0x0370], [0x0372, 0x0372], [0x0376, 0x0376], [0x0386, 0x0386], [0x0388, 0x038A], [0x038C, 0x038C], [0x038E, 0x038F], [0x0391, 0x03A1], [0x03A3, 0x03AB], [0x03CF, 0x03CF], [0x03D2, 0x03D4], [0x03D8, 0x03D8], [0x03DA, 0x03DA], [0x03DC, 0x03DC], [0x03DE, 0x03DE], [0x03E0, 0x03E0], [0x03E2, 0x03E2], [0x03E4, 0x03E4], [0x03E6, 0x03E6], [0x03E8, 0x03E8], [0x03EA, 0x03EA], [0x03EC, 0x03EC], [0x03EE, 0x03EE], [0x03F4, 0x03F4], [0x03F7, 0x03F7], [0x03F9, 0x03FA], [0x03FD, 0x042F], [0x0460, 0x0460], [0x0462, 0x0462], [0x0464, 0x0464], [0x0466, 0x0466], [0x0468, 0x0468], [0x046A, 0x046A], [0x046C, 0x046C], [0x046E, 0x046E], [0x0470, 0x0470], [0x0472, 0x0472], [0x0474, 0x0474], [0x0476, 0x0476], [0x0478, 0x0478], [0x047A, 0x047A], [0x047C, 0x047C], [0x047E, 0x047E], [0x0480, 0x0480], [0x048A, 0x048A], [0x048C, 0x048C], [0x048E, 0x048E], [0x0490, 0x0490], [0x0492, 0x0492], [0x0494, 0x0494], [0x0496, 0x0496], [0x0498, 0x0498], [0x049A, 0x049A], [0x049C, 0x049C], [0x049E, 0x049E], [0x04A0, 0x04A0], [0x04A2, 0x04A2], [0x04A4, 0x04A4], [0x04A6, 0x04A6], [0x04A8, 0x04A8], [0x04AA, 0x04AA], [0x04AC, 0x04AC], [0x04AE, 0x04AE], [0x04B0, 0x04B0], [0x04B2, 0x04B2], [0x04B4, 0x04B4], [0x04B6, 0x04B6], [0x04B8, 0x04B8], [0x04BA, 0x04BA], [0x04BC, 0x04BC], [0x04BE, 0x04BE], [0x04C0, 0x04C1], [0x04C3, 0x04C3], [0x04C5, 0x04C5], [0x04C7, 0x04C7], [0x04C9, 0x04C9], [0x04CB, 0x04CB], [0x04CD, 0x04CD], [0x04D0, 0x04D0], [0x04D2, 0x04D2], [0x04D4, 0x04D4], [0x04D6, 0x04D6], [0x04D8, 0x04D8], [0x04DA, 0x04DA], [0x04DC, 0x04DC], [0x04DE, 0x04DE], [0x04E0, 0x04E0], [0x04E2, 0x04E2], [0x04E4, 0x04E4], [0x04E6, 0x04E6], [0x04E8, 0x04E8], [0x04EA, 0x04EA], [0x04EC, 0x04EC], [0x04EE, 0x04EE], [0x04F0, 0x04F0], [0x04F2, 0x04F2], [0x04F4, 0x04F4], [0x04F6, 0x04F6], [0x04F8, 0x04F8], [0x04FA, 0x04FA], [0x04FC, 0x04FC], [0x04FE, 0x04FE], [0x0500, 0x0500], [0x0502, 0x0502], [0x0504, 0x0504], [0x0506, 0x0506], [0x0508, 0x0508], [0x050A, 0x050A], [0x050C, 0x050C], [0x050E, 0x050E], [0x0510, 0x0510], [0x0512, 0x0512], [0x0514, 0x0514], [0x0516, 0x0516], [0x0518, 0x0518], [0x051A, 0x051A], [0x051C, 0x051C], [0x051E, 0x051E], [0x0520, 0x0520], [0x0522, 0x0522], [0x0531, 0x0556], [0x10A0, 0x10C5], [0x1E00, 0x1E00], [0x1E02, 0x1E02], [0x1E04, 0x1E04], [0x1E06, 0x1E06], [0x1E08, 0x1E08], [0x1E0A, 0x1E0A], [0x1E0C, 0x1E0C], [0x1E0E, 0x1E0E], [0x1E10, 0x1E10], [0x1E12, 0x1E12], [0x1E14, 0x1E14], [0x1E16, 0x1E16], [0x1E18, 0x1E18], [0x1E1A, 0x1E1A], [0x1E1C, 0x1E1C], [0x1E1E, 0x1E1E], [0x1E20, 0x1E20], [0x1E22, 0x1E22], [0x1E24, 0x1E24], [0x1E26, 0x1E26], [0x1E28, 0x1E28], [0x1E2A, 0x1E2A], [0x1E2C, 0x1E2C], [0x1E2E, 0x1E2E], [0x1E30, 0x1E30], [0x1E32, 0x1E32], [0x1E34, 0x1E34], [0x1E36, 0x1E36], [0x1E38, 0x1E38], [0x1E3A, 0x1E3A], [0x1E3C, 0x1E3C], [0x1E3E, 0x1E3E], [0x1E40, 0x1E40], [0x1E42, 0x1E42], [0x1E44, 0x1E44], [0x1E46, 0x1E46], [0x1E48, 0x1E48], [0x1E4A, 0x1E4A], [0x1E4C, 0x1E4C], [0x1E4E, 0x1E4E], [0x1E50, 0x1E50], [0x1E52, 0x1E52], [0x1E54, 0x1E54], [0x1E56, 0x1E56], [0x1E58, 0x1E58], [0x1E5A, 0x1E5A], [0x1E5C, 0x1E5C], [0x1E5E, 0x1E5E], [0x1E60, 0x1E60], [0x1E62, 0x1E62], [0x1E64, 0x1E64], [0x1E66, 0x1E66], [0x1E68, 0x1E68], [0x1E6A, 0x1E6A], [0x1E6C, 0x1E6C], [0x1E6E, 0x1E6E], [0x1E70, 0x1E70], [0x1E72, 0x1E72], [0x1E74, 0x1E74], [0x1E76, 0x1E76], [0x1E78, 0x1E78], [0x1E7A, 0x1E7A], [0x1E7C, 0x1E7C], [0x1E7E, 0x1E7E], [0x1E80, 0x1E80], [0x1E82, 0x1E82], [0x1E84, 0x1E84], [0x1E86, 0x1E86], [0x1E88, 0x1E88], [0x1E8A, 0x1E8A], [0x1E8C, 0x1E8C], [0x1E8E, 0x1E8E], [0x1E90, 0x1E90], [0x1E92, 0x1E92], [0x1E94, 0x1E94], [0x1E9E, 0x1E9E], [0x1EA0, 0x1EA0], [0x1EA2, 0x1EA2], [0x1EA4, 0x1EA4], [0x1EA6, 0x1EA6], [0x1EA8, 0x1EA8], [0x1EAA, 0x1EAA], [0x1EAC, 0x1EAC], [0x1EAE, 0x1EAE], [0x1EB0, 0x1EB0], [0x1EB2, 0x1EB2], [0x1EB4, 0x1EB4], [0x1EB6, 0x1EB6], [0x1EB8, 0x1EB8], [0x1EBA, 0x1EBA], [0x1EBC, 0x1EBC], [0x1EBE, 0x1EBE], [0x1EC0, 0x1EC0], [0x1EC2, 0x1EC2], [0x1EC4, 0x1EC4], [0x1EC6, 0x1EC6], [0x1EC8, 0x1EC8], [0x1ECA, 0x1ECA], [0x1ECC, 0x1ECC], [0x1ECE, 0x1ECE], [0x1ED0, 0x1ED0], [0x1ED2, 0x1ED2], [0x1ED4, 0x1ED4], [0x1ED6, 0x1ED6], [0x1ED8, 0x1ED8], [0x1EDA, 0x1EDA], [0x1EDC, 0x1EDC], [0x1EDE, 0x1EDE], [0x1EE0, 0x1EE0], [0x1EE2, 0x1EE2], [0x1EE4, 0x1EE4], [0x1EE6, 0x1EE6], [0x1EE8, 0x1EE8], [0x1EEA, 0x1EEA], [0x1EEC, 0x1EEC], [0x1EEE, 0x1EEE], [0x1EF0, 0x1EF0], [0x1EF2, 0x1EF2], [0x1EF4, 0x1EF4], [0x1EF6, 0x1EF6], [0x1EF8, 0x1EF8], [0x1EFA, 0x1EFA], [0x1EFC, 0x1EFC], [0x1EFE, 0x1EFE], [0x1F08, 0x1F0F], [0x1F18, 0x1F1D], [0x1F28, 0x1F2F], [0x1F38, 0x1F3F], [0x1F48, 0x1F4D], [0x1F59, 0x1F59], [0x1F5B, 0x1F5B], [0x1F5D, 0x1F5D], [0x1F5F, 0x1F5F], [0x1F68, 0x1F6F], [0x1FB8, 0x1FBB], [0x1FC8, 0x1FCB], [0x1FD8, 0x1FDB], [0x1FE8, 0x1FEC], [0x1FF8, 0x1FFB], [0x2102, 0x2102], [0x2107, 0x2107], [0x210B, 0x210D], [0x2110, 0x2112], [0x2115, 0x2115], [0x2119, 0x211D], [0x2124, 0x2124], [0x2126, 0x2126], [0x2128, 0x2128], [0x212A, 0x212D], [0x2130, 0x2133], [0x213E, 0x213F], [0x2145, 0x2145], [0x2183, 0x2183], [0x2C00, 0x2C2E], [0x2C60, 0x2C60], [0x2C62, 0x2C64], [0x2C67, 0x2C67], [0x2C69, 0x2C69], [0x2C6B, 0x2C6B], [0x2C6D, 0x2C6F], [0x2C72, 0x2C72], [0x2C75, 0x2C75], [0x2C80, 0x2C80], [0x2C82, 0x2C82], [0x2C84, 0x2C84], [0x2C86, 0x2C86], [0x2C88, 0x2C88], [0x2C8A, 0x2C8A], [0x2C8C, 0x2C8C], [0x2C8E, 0x2C8E], [0x2C90, 0x2C90], [0x2C92, 0x2C92], [0x2C94, 0x2C94], [0x2C96, 0x2C96], [0x2C98, 0x2C98], [0x2C9A, 0x2C9A], [0x2C9C, 0x2C9C], [0x2C9E, 0x2C9E], [0x2CA0, 0x2CA0], [0x2CA2, 0x2CA2], [0x2CA4, 0x2CA4], [0x2CA6, 0x2CA6], [0x2CA8, 0x2CA8], [0x2CAA, 0x2CAA], [0x2CAC, 0x2CAC], [0x2CAE, 0x2CAE], [0x2CB0, 0x2CB0], [0x2CB2, 0x2CB2], [0x2CB4, 0x2CB4], [0x2CB6, 0x2CB6], [0x2CB8, 0x2CB8], [0x2CBA, 0x2CBA], [0x2CBC, 0x2CBC], [0x2CBE, 0x2CBE], [0x2CC0, 0x2CC0], [0x2CC2, 0x2CC2], [0x2CC4, 0x2CC4], [0x2CC6, 0x2CC6], [0x2CC8, 0x2CC8], [0x2CCA, 0x2CCA], [0x2CCC, 0x2CCC], [0x2CCE, 0x2CCE], [0x2CD0, 0x2CD0], [0x2CD2, 0x2CD2], [0x2CD4, 0x2CD4], [0x2CD6, 0x2CD6], [0x2CD8, 0x2CD8], [0x2CDA, 0x2CDA], [0x2CDC, 0x2CDC], [0x2CDE, 0x2CDE], [0x2CE0, 0x2CE0], [0x2CE2, 0x2CE2], [0xA640, 0xA640], [0xA642, 0xA642], [0xA644, 0xA644], [0xA646, 0xA646], [0xA648, 0xA648], [0xA64A, 0xA64A], [0xA64C, 0xA64C], [0xA64E, 0xA64E], [0xA650, 0xA650], [0xA652, 0xA652], [0xA654, 0xA654], [0xA656, 0xA656], [0xA658, 0xA658], [0xA65A, 0xA65A], [0xA65C, 0xA65C], [0xA65E, 0xA65E], [0xA662, 0xA662], [0xA664, 0xA664], [0xA666, 0xA666], [0xA668, 0xA668], [0xA66A, 0xA66A], [0xA66C, 0xA66C], [0xA680, 0xA680], [0xA682, 0xA682], [0xA684, 0xA684], [0xA686, 0xA686], [0xA688, 0xA688], [0xA68A, 0xA68A], [0xA68C, 0xA68C], [0xA68E, 0xA68E], [0xA690, 0xA690], [0xA692, 0xA692], [0xA694, 0xA694], [0xA696, 0xA696], [0xA722, 0xA722], [0xA724, 0xA724], [0xA726, 0xA726], [0xA728, 0xA728], [0xA72A, 0xA72A], [0xA72C, 0xA72C], [0xA72E, 0xA72E], [0xA732, 0xA732], [0xA734, 0xA734], [0xA736, 0xA736], [0xA738, 0xA738], [0xA73A, 0xA73A], [0xA73C, 0xA73C], [0xA73E, 0xA73E], [0xA740, 0xA740], [0xA742, 0xA742], [0xA744, 0xA744], [0xA746, 0xA746], [0xA748, 0xA748], [0xA74A, 0xA74A], [0xA74C, 0xA74C], [0xA74E, 0xA74E], [0xA750, 0xA750], [0xA752, 0xA752], [0xA754, 0xA754], [0xA756, 0xA756], [0xA758, 0xA758], [0xA75A, 0xA75A], [0xA75C, 0xA75C], [0xA75E, 0xA75E], [0xA760, 0xA760], [0xA762, 0xA762], [0xA764, 0xA764], [0xA766, 0xA766], [0xA768, 0xA768], [0xA76A, 0xA76A], [0xA76C, 0xA76C], [0xA76E, 0xA76E], [0xA779, 0xA779], [0xA77B, 0xA77B], [0xA77D, 0xA77E], [0xA780, 0xA780], [0xA782, 0xA782], [0xA784, 0xA784], [0xA786, 0xA786], [0xA78B, 0xA78B], [0xFF21, 0xFF3A]]; -Ll = [[0x0061, 0x007A], [0x00AA, 0x00AA], [0x00B5, 0x00B5], [0x00BA, 0x00BA], [0x00DF, 0x00F6], [0x00F8, 0x00FF], [0x0101, 0x0101], [0x0103, 0x0103], [0x0105, 0x0105], [0x0107, 0x0107], [0x0109, 0x0109], [0x010B, 0x010B], [0x010D, 0x010D], [0x010F, 0x010F], [0x0111, 0x0111], [0x0113, 0x0113], [0x0115, 0x0115], [0x0117, 0x0117], [0x0119, 0x0119], [0x011B, 0x011B], [0x011D, 0x011D], [0x011F, 0x011F], [0x0121, 0x0121], [0x0123, 0x0123], [0x0125, 0x0125], [0x0127, 0x0127], [0x0129, 0x0129], [0x012B, 0x012B], [0x012D, 0x012D], [0x012F, 0x012F], [0x0131, 0x0131], [0x0133, 0x0133], [0x0135, 0x0135], [0x0137, 0x0138], [0x013A, 0x013A], [0x013C, 0x013C], [0x013E, 0x013E], [0x0140, 0x0140], [0x0142, 0x0142], [0x0144, 0x0144], [0x0146, 0x0146], [0x0148, 0x0149], [0x014B, 0x014B], [0x014D, 0x014D], [0x014F, 0x014F], [0x0151, 0x0151], [0x0153, 0x0153], [0x0155, 0x0155], [0x0157, 0x0157], [0x0159, 0x0159], [0x015B, 0x015B], [0x015D, 0x015D], [0x015F, 0x015F], [0x0161, 0x0161], [0x0163, 0x0163], [0x0165, 0x0165], [0x0167, 0x0167], [0x0169, 0x0169], [0x016B, 0x016B], [0x016D, 0x016D], [0x016F, 0x016F], [0x0171, 0x0171], [0x0173, 0x0173], [0x0175, 0x0175], [0x0177, 0x0177], [0x017A, 0x017A], [0x017C, 0x017C], [0x017E, 0x0180], [0x0183, 0x0183], [0x0185, 0x0185], [0x0188, 0x0188], [0x018C, 0x018D], [0x0192, 0x0192], [0x0195, 0x0195], [0x0199, 0x019B], [0x019E, 0x019E], [0x01A1, 0x01A1], [0x01A3, 0x01A3], [0x01A5, 0x01A5], [0x01A8, 0x01A8], [0x01AA, 0x01AB], [0x01AD, 0x01AD], [0x01B0, 0x01B0], [0x01B4, 0x01B4], [0x01B6, 0x01B6], [0x01B9, 0x01BA], [0x01BD, 0x01BF], [0x01C6, 0x01C6], [0x01C9, 0x01C9], [0x01CC, 0x01CC], [0x01CE, 0x01CE], [0x01D0, 0x01D0], [0x01D2, 0x01D2], [0x01D4, 0x01D4], [0x01D6, 0x01D6], [0x01D8, 0x01D8], [0x01DA, 0x01DA], [0x01DC, 0x01DD], [0x01DF, 0x01DF], [0x01E1, 0x01E1], [0x01E3, 0x01E3], [0x01E5, 0x01E5], [0x01E7, 0x01E7], [0x01E9, 0x01E9], [0x01EB, 0x01EB], [0x01ED, 0x01ED], [0x01EF, 0x01F0], [0x01F3, 0x01F3], [0x01F5, 0x01F5], [0x01F9, 0x01F9], [0x01FB, 0x01FB], [0x01FD, 0x01FD], [0x01FF, 0x01FF], [0x0201, 0x0201], [0x0203, 0x0203], [0x0205, 0x0205], [0x0207, 0x0207], [0x0209, 0x0209], [0x020B, 0x020B], [0x020D, 0x020D], [0x020F, 0x020F], [0x0211, 0x0211], [0x0213, 0x0213], [0x0215, 0x0215], [0x0217, 0x0217], [0x0219, 0x0219], [0x021B, 0x021B], [0x021D, 0x021D], [0x021F, 0x021F], [0x0221, 0x0221], [0x0223, 0x0223], [0x0225, 0x0225], [0x0227, 0x0227], [0x0229, 0x0229], [0x022B, 0x022B], [0x022D, 0x022D], [0x022F, 0x022F], [0x0231, 0x0231], [0x0233, 0x0239], [0x023C, 0x023C], [0x023F, 0x0240], [0x0242, 0x0242], [0x0247, 0x0247], [0x0249, 0x0249], [0x024B, 0x024B], [0x024D, 0x024D], [0x024F, 0x0293], [0x0295, 0x02AF], [0x0371, 0x0371], [0x0373, 0x0373], [0x0377, 0x0377], [0x037B, 0x037D], [0x0390, 0x0390], [0x03AC, 0x03CE], [0x03D0, 0x03D1], [0x03D5, 0x03D7], [0x03D9, 0x03D9], [0x03DB, 0x03DB], [0x03DD, 0x03DD], [0x03DF, 0x03DF], [0x03E1, 0x03E1], [0x03E3, 0x03E3], [0x03E5, 0x03E5], [0x03E7, 0x03E7], [0x03E9, 0x03E9], [0x03EB, 0x03EB], [0x03ED, 0x03ED], [0x03EF, 0x03F3], [0x03F5, 0x03F5], [0x03F8, 0x03F8], [0x03FB, 0x03FC], [0x0430, 0x045F], [0x0461, 0x0461], [0x0463, 0x0463], [0x0465, 0x0465], [0x0467, 0x0467], [0x0469, 0x0469], [0x046B, 0x046B], [0x046D, 0x046D], [0x046F, 0x046F], [0x0471, 0x0471], [0x0473, 0x0473], [0x0475, 0x0475], [0x0477, 0x0477], [0x0479, 0x0479], [0x047B, 0x047B], [0x047D, 0x047D], [0x047F, 0x047F], [0x0481, 0x0481], [0x048B, 0x048B], [0x048D, 0x048D], [0x048F, 0x048F], [0x0491, 0x0491], [0x0493, 0x0493], [0x0495, 0x0495], [0x0497, 0x0497], [0x0499, 0x0499], [0x049B, 0x049B], [0x049D, 0x049D], [0x049F, 0x049F], [0x04A1, 0x04A1], [0x04A3, 0x04A3], [0x04A5, 0x04A5], [0x04A7, 0x04A7], [0x04A9, 0x04A9], [0x04AB, 0x04AB], [0x04AD, 0x04AD], [0x04AF, 0x04AF], [0x04B1, 0x04B1], [0x04B3, 0x04B3], [0x04B5, 0x04B5], [0x04B7, 0x04B7], [0x04B9, 0x04B9], [0x04BB, 0x04BB], [0x04BD, 0x04BD], [0x04BF, 0x04BF], [0x04C2, 0x04C2], [0x04C4, 0x04C4], [0x04C6, 0x04C6], [0x04C8, 0x04C8], [0x04CA, 0x04CA], [0x04CC, 0x04CC], [0x04CE, 0x04CF], [0x04D1, 0x04D1], [0x04D3, 0x04D3], [0x04D5, 0x04D5], [0x04D7, 0x04D7], [0x04D9, 0x04D9], [0x04DB, 0x04DB], [0x04DD, 0x04DD], [0x04DF, 0x04DF], [0x04E1, 0x04E1], [0x04E3, 0x04E3], [0x04E5, 0x04E5], [0x04E7, 0x04E7], [0x04E9, 0x04E9], [0x04EB, 0x04EB], [0x04ED, 0x04ED], [0x04EF, 0x04EF], [0x04F1, 0x04F1], [0x04F3, 0x04F3], [0x04F5, 0x04F5], [0x04F7, 0x04F7], [0x04F9, 0x04F9], [0x04FB, 0x04FB], [0x04FD, 0x04FD], [0x04FF, 0x04FF], [0x0501, 0x0501], [0x0503, 0x0503], [0x0505, 0x0505], [0x0507, 0x0507], [0x0509, 0x0509], [0x050B, 0x050B], [0x050D, 0x050D], [0x050F, 0x050F], [0x0511, 0x0511], [0x0513, 0x0513], [0x0515, 0x0515], [0x0517, 0x0517], [0x0519, 0x0519], [0x051B, 0x051B], [0x051D, 0x051D], [0x051F, 0x051F], [0x0521, 0x0521], [0x0523, 0x0523], [0x0561, 0x0587], [0x1D00, 0x1D2B], [0x1D62, 0x1D77], [0x1D79, 0x1D9A], [0x1E01, 0x1E01], [0x1E03, 0x1E03], [0x1E05, 0x1E05], [0x1E07, 0x1E07], [0x1E09, 0x1E09], [0x1E0B, 0x1E0B], [0x1E0D, 0x1E0D], [0x1E0F, 0x1E0F], [0x1E11, 0x1E11], [0x1E13, 0x1E13], [0x1E15, 0x1E15], [0x1E17, 0x1E17], [0x1E19, 0x1E19], [0x1E1B, 0x1E1B], [0x1E1D, 0x1E1D], [0x1E1F, 0x1E1F], [0x1E21, 0x1E21], [0x1E23, 0x1E23], [0x1E25, 0x1E25], [0x1E27, 0x1E27], [0x1E29, 0x1E29], [0x1E2B, 0x1E2B], [0x1E2D, 0x1E2D], [0x1E2F, 0x1E2F], [0x1E31, 0x1E31], [0x1E33, 0x1E33], [0x1E35, 0x1E35], [0x1E37, 0x1E37], [0x1E39, 0x1E39], [0x1E3B, 0x1E3B], [0x1E3D, 0x1E3D], [0x1E3F, 0x1E3F], [0x1E41, 0x1E41], [0x1E43, 0x1E43], [0x1E45, 0x1E45], [0x1E47, 0x1E47], [0x1E49, 0x1E49], [0x1E4B, 0x1E4B], [0x1E4D, 0x1E4D], [0x1E4F, 0x1E4F], [0x1E51, 0x1E51], [0x1E53, 0x1E53], [0x1E55, 0x1E55], [0x1E57, 0x1E57], [0x1E59, 0x1E59], [0x1E5B, 0x1E5B], [0x1E5D, 0x1E5D], [0x1E5F, 0x1E5F], [0x1E61, 0x1E61], [0x1E63, 0x1E63], [0x1E65, 0x1E65], [0x1E67, 0x1E67], [0x1E69, 0x1E69], [0x1E6B, 0x1E6B], [0x1E6D, 0x1E6D], [0x1E6F, 0x1E6F], [0x1E71, 0x1E71], [0x1E73, 0x1E73], [0x1E75, 0x1E75], [0x1E77, 0x1E77], [0x1E79, 0x1E79], [0x1E7B, 0x1E7B], [0x1E7D, 0x1E7D], [0x1E7F, 0x1E7F], [0x1E81, 0x1E81], [0x1E83, 0x1E83], [0x1E85, 0x1E85], [0x1E87, 0x1E87], [0x1E89, 0x1E89], [0x1E8B, 0x1E8B], [0x1E8D, 0x1E8D], [0x1E8F, 0x1E8F], [0x1E91, 0x1E91], [0x1E93, 0x1E93], [0x1E95, 0x1E9D], [0x1E9F, 0x1E9F], [0x1EA1, 0x1EA1], [0x1EA3, 0x1EA3], [0x1EA5, 0x1EA5], [0x1EA7, 0x1EA7], [0x1EA9, 0x1EA9], [0x1EAB, 0x1EAB], [0x1EAD, 0x1EAD], [0x1EAF, 0x1EAF], [0x1EB1, 0x1EB1], [0x1EB3, 0x1EB3], [0x1EB5, 0x1EB5], [0x1EB7, 0x1EB7], [0x1EB9, 0x1EB9], [0x1EBB, 0x1EBB], [0x1EBD, 0x1EBD], [0x1EBF, 0x1EBF], [0x1EC1, 0x1EC1], [0x1EC3, 0x1EC3], [0x1EC5, 0x1EC5], [0x1EC7, 0x1EC7], [0x1EC9, 0x1EC9], [0x1ECB, 0x1ECB], [0x1ECD, 0x1ECD], [0x1ECF, 0x1ECF], [0x1ED1, 0x1ED1], [0x1ED3, 0x1ED3], [0x1ED5, 0x1ED5], [0x1ED7, 0x1ED7], [0x1ED9, 0x1ED9], [0x1EDB, 0x1EDB], [0x1EDD, 0x1EDD], [0x1EDF, 0x1EDF], [0x1EE1, 0x1EE1], [0x1EE3, 0x1EE3], [0x1EE5, 0x1EE5], [0x1EE7, 0x1EE7], [0x1EE9, 0x1EE9], [0x1EEB, 0x1EEB], [0x1EED, 0x1EED], [0x1EEF, 0x1EEF], [0x1EF1, 0x1EF1], [0x1EF3, 0x1EF3], [0x1EF5, 0x1EF5], [0x1EF7, 0x1EF7], [0x1EF9, 0x1EF9], [0x1EFB, 0x1EFB], [0x1EFD, 0x1EFD], [0x1EFF, 0x1F07], [0x1F10, 0x1F15], [0x1F20, 0x1F27], [0x1F30, 0x1F37], [0x1F40, 0x1F45], [0x1F50, 0x1F57], [0x1F60, 0x1F67], [0x1F70, 0x1F7D], [0x1F80, 0x1F87], [0x1F90, 0x1F97], [0x1FA0, 0x1FA7], [0x1FB0, 0x1FB4], [0x1FB6, 0x1FB7], [0x1FBE, 0x1FBE], [0x1FC2, 0x1FC4], [0x1FC6, 0x1FC7], [0x1FD0, 0x1FD3], [0x1FD6, 0x1FD7], [0x1FE0, 0x1FE7], [0x1FF2, 0x1FF4], [0x1FF6, 0x1FF7], [0x2071, 0x2071], [0x207F, 0x207F], [0x210A, 0x210A], [0x210E, 0x210F], [0x2113, 0x2113], [0x212F, 0x212F], [0x2134, 0x2134], [0x2139, 0x2139], [0x213C, 0x213D], [0x2146, 0x2149], [0x214E, 0x214E], [0x2184, 0x2184], [0x2C30, 0x2C5E], [0x2C61, 0x2C61], [0x2C65, 0x2C66], [0x2C68, 0x2C68], [0x2C6A, 0x2C6A], [0x2C6C, 0x2C6C], [0x2C71, 0x2C71], [0x2C73, 0x2C74], [0x2C76, 0x2C7C], [0x2C81, 0x2C81], [0x2C83, 0x2C83], [0x2C85, 0x2C85], [0x2C87, 0x2C87], [0x2C89, 0x2C89], [0x2C8B, 0x2C8B], [0x2C8D, 0x2C8D], [0x2C8F, 0x2C8F], [0x2C91, 0x2C91], [0x2C93, 0x2C93], [0x2C95, 0x2C95], [0x2C97, 0x2C97], [0x2C99, 0x2C99], [0x2C9B, 0x2C9B], [0x2C9D, 0x2C9D], [0x2C9F, 0x2C9F], [0x2CA1, 0x2CA1], [0x2CA3, 0x2CA3], [0x2CA5, 0x2CA5], [0x2CA7, 0x2CA7], [0x2CA9, 0x2CA9], [0x2CAB, 0x2CAB], [0x2CAD, 0x2CAD], [0x2CAF, 0x2CAF], [0x2CB1, 0x2CB1], [0x2CB3, 0x2CB3], [0x2CB5, 0x2CB5], [0x2CB7, 0x2CB7], [0x2CB9, 0x2CB9], [0x2CBB, 0x2CBB], [0x2CBD, 0x2CBD], [0x2CBF, 0x2CBF], [0x2CC1, 0x2CC1], [0x2CC3, 0x2CC3], [0x2CC5, 0x2CC5], [0x2CC7, 0x2CC7], [0x2CC9, 0x2CC9], [0x2CCB, 0x2CCB], [0x2CCD, 0x2CCD], [0x2CCF, 0x2CCF], [0x2CD1, 0x2CD1], [0x2CD3, 0x2CD3], [0x2CD5, 0x2CD5], [0x2CD7, 0x2CD7], [0x2CD9, 0x2CD9], [0x2CDB, 0x2CDB], [0x2CDD, 0x2CDD], [0x2CDF, 0x2CDF], [0x2CE1, 0x2CE1], [0x2CE3, 0x2CE4], [0x2D00, 0x2D25], [0xA641, 0xA641], [0xA643, 0xA643], [0xA645, 0xA645], [0xA647, 0xA647], [0xA649, 0xA649], [0xA64B, 0xA64B], [0xA64D, 0xA64D], [0xA64F, 0xA64F], [0xA651, 0xA651], [0xA653, 0xA653], [0xA655, 0xA655], [0xA657, 0xA657], [0xA659, 0xA659], [0xA65B, 0xA65B], [0xA65D, 0xA65D], [0xA65F, 0xA65F], [0xA663, 0xA663], [0xA665, 0xA665], [0xA667, 0xA667], [0xA669, 0xA669], [0xA66B, 0xA66B], [0xA66D, 0xA66D], [0xA681, 0xA681], [0xA683, 0xA683], [0xA685, 0xA685], [0xA687, 0xA687], [0xA689, 0xA689], [0xA68B, 0xA68B], [0xA68D, 0xA68D], [0xA68F, 0xA68F], [0xA691, 0xA691], [0xA693, 0xA693], [0xA695, 0xA695], [0xA697, 0xA697], [0xA723, 0xA723], [0xA725, 0xA725], [0xA727, 0xA727], [0xA729, 0xA729], [0xA72B, 0xA72B], [0xA72D, 0xA72D], [0xA72F, 0xA731], [0xA733, 0xA733], [0xA735, 0xA735], [0xA737, 0xA737], [0xA739, 0xA739], [0xA73B, 0xA73B], [0xA73D, 0xA73D], [0xA73F, 0xA73F], [0xA741, 0xA741], [0xA743, 0xA743], [0xA745, 0xA745], [0xA747, 0xA747], [0xA749, 0xA749], [0xA74B, 0xA74B], [0xA74D, 0xA74D], [0xA74F, 0xA74F], [0xA751, 0xA751], [0xA753, 0xA753], [0xA755, 0xA755], [0xA757, 0xA757], [0xA759, 0xA759], [0xA75B, 0xA75B], [0xA75D, 0xA75D], [0xA75F, 0xA75F], [0xA761, 0xA761], [0xA763, 0xA763], [0xA765, 0xA765], [0xA767, 0xA767], [0xA769, 0xA769], [0xA76B, 0xA76B], [0xA76D, 0xA76D], [0xA76F, 0xA76F], [0xA771, 0xA778], [0xA77A, 0xA77A], [0xA77C, 0xA77C], [0xA77F, 0xA77F], [0xA781, 0xA781], [0xA783, 0xA783], [0xA785, 0xA785], [0xA787, 0xA787], [0xA78C, 0xA78C], [0xFB00, 0xFB06], [0xFB13, 0xFB17], [0xFF41, 0xFF5A]]; -Lt = [[0x01C5, 0x01C5], [0x01C8, 0x01C8], [0x01CB, 0x01CB], [0x01F2, 0x01F2], [0x1F88, 0x1F8F], [0x1F98, 0x1F9F], [0x1FA8, 0x1FAF], [0x1FBC, 0x1FBC], [0x1FCC, 0x1FCC], [0x1FFC, 0x1FFC]]; -Lm = [[0x02B0, 0x02C1], [0x02C6, 0x02D1], [0x02E0, 0x02E4], [0x02EC, 0x02EC], [0x02EE, 0x02EE], [0x0374, 0x0374], [0x037A, 0x037A], [0x0559, 0x0559], [0x0640, 0x0640], [0x06E5, 0x06E6], [0x07F4, 0x07F5], [0x07FA, 0x07FA], [0x0971, 0x0971], [0x0E46, 0x0E46], [0x0EC6, 0x0EC6], [0x10FC, 0x10FC], [0x17D7, 0x17D7], [0x1843, 0x1843], [0x1C78, 0x1C7D], [0x1D2C, 0x1D61], [0x1D78, 0x1D78], [0x1D9B, 0x1DBF], [0x2090, 0x2094], [0x2C7D, 0x2C7D], [0x2D6F, 0x2D6F], [0x2E2F, 0x2E2F], [0x3005, 0x3005], [0x3031, 0x3035], [0x303B, 0x303B], [0x309D, 0x309E], [0x30FC, 0x30FE], [0xA015, 0xA015], [0xA60C, 0xA60C], [0xA67F, 0xA67F], [0xA717, 0xA71F], [0xA770, 0xA770], [0xA788, 0xA788], [0xFF70, 0xFF70], [0xFF9E, 0xFF9F]]; -Lo = [[0x01BB, 0x01BB], [0x01C0, 0x01C3], [0x0294, 0x0294], [0x05D0, 0x05EA], [0x05F0, 0x05F2], [0x0621, 0x063F], [0x0641, 0x064A], [0x066E, 0x066F], [0x0671, 0x06D3], [0x06D5, 0x06D5], [0x06EE, 0x06EF], [0x06FA, 0x06FC], [0x06FF, 0x06FF], [0x0710, 0x0710], [0x0712, 0x072F], [0x074D, 0x07A5], [0x07B1, 0x07B1], [0x07CA, 0x07EA], [0x0904, 0x0939], [0x093D, 0x093D], [0x0950, 0x0950], [0x0958, 0x0961], [0x0972, 0x0972], [0x097B, 0x097F], [0x0985, 0x098C], [0x098F, 0x0990], [0x0993, 0x09A8], [0x09AA, 0x09B0], [0x09B2, 0x09B2], [0x09B6, 0x09B9], [0x09BD, 0x09BD], [0x09CE, 0x09CE], [0x09DC, 0x09DD], [0x09DF, 0x09E1], [0x09F0, 0x09F1], [0x0A05, 0x0A0A], [0x0A0F, 0x0A10], [0x0A13, 0x0A28], [0x0A2A, 0x0A30], [0x0A32, 0x0A33], [0x0A35, 0x0A36], [0x0A38, 0x0A39], [0x0A59, 0x0A5C], [0x0A5E, 0x0A5E], [0x0A72, 0x0A74], [0x0A85, 0x0A8D], [0x0A8F, 0x0A91], [0x0A93, 0x0AA8], [0x0AAA, 0x0AB0], [0x0AB2, 0x0AB3], [0x0AB5, 0x0AB9], [0x0ABD, 0x0ABD], [0x0AD0, 0x0AD0], [0x0AE0, 0x0AE1], [0x0B05, 0x0B0C], [0x0B0F, 0x0B10], [0x0B13, 0x0B28], [0x0B2A, 0x0B30], [0x0B32, 0x0B33], [0x0B35, 0x0B39], [0x0B3D, 0x0B3D], [0x0B5C, 0x0B5D], [0x0B5F, 0x0B61], [0x0B71, 0x0B71], [0x0B83, 0x0B83], [0x0B85, 0x0B8A], [0x0B8E, 0x0B90], [0x0B92, 0x0B95], [0x0B99, 0x0B9A], [0x0B9C, 0x0B9C], [0x0B9E, 0x0B9F], [0x0BA3, 0x0BA4], [0x0BA8, 0x0BAA], [0x0BAE, 0x0BB9], [0x0BD0, 0x0BD0], [0x0C05, 0x0C0C], [0x0C0E, 0x0C10], [0x0C12, 0x0C28], [0x0C2A, 0x0C33], [0x0C35, 0x0C39], [0x0C3D, 0x0C3D], [0x0C58, 0x0C59], [0x0C60, 0x0C61], [0x0C85, 0x0C8C], [0x0C8E, 0x0C90], [0x0C92, 0x0CA8], [0x0CAA, 0x0CB3], [0x0CB5, 0x0CB9], [0x0CBD, 0x0CBD], [0x0CDE, 0x0CDE], [0x0CE0, 0x0CE1], [0x0D05, 0x0D0C], [0x0D0E, 0x0D10], [0x0D12, 0x0D28], [0x0D2A, 0x0D39], [0x0D3D, 0x0D3D], [0x0D60, 0x0D61], [0x0D7A, 0x0D7F], [0x0D85, 0x0D96], [0x0D9A, 0x0DB1], [0x0DB3, 0x0DBB], [0x0DBD, 0x0DBD], [0x0DC0, 0x0DC6], [0x0E01, 0x0E30], [0x0E32, 0x0E33], [0x0E40, 0x0E45], [0x0E81, 0x0E82], [0x0E84, 0x0E84], [0x0E87, 0x0E88], [0x0E8A, 0x0E8A], [0x0E8D, 0x0E8D], [0x0E94, 0x0E97], [0x0E99, 0x0E9F], [0x0EA1, 0x0EA3], [0x0EA5, 0x0EA5], [0x0EA7, 0x0EA7], [0x0EAA, 0x0EAB], [0x0EAD, 0x0EB0], [0x0EB2, 0x0EB3], [0x0EBD, 0x0EBD], [0x0EC0, 0x0EC4], [0x0EDC, 0x0EDD], [0x0F00, 0x0F00], [0x0F40, 0x0F47], [0x0F49, 0x0F6C], [0x0F88, 0x0F8B], [0x1000, 0x102A], [0x103F, 0x103F], [0x1050, 0x1055], [0x105A, 0x105D], [0x1061, 0x1061], [0x1065, 0x1066], [0x106E, 0x1070], [0x1075, 0x1081], [0x108E, 0x108E], [0x10D0, 0x10FA], [0x1100, 0x1159], [0x115F, 0x11A2], [0x11A8, 0x11F9], [0x1200, 0x1248], [0x124A, 0x124D], [0x1250, 0x1256], [0x1258, 0x1258], [0x125A, 0x125D], [0x1260, 0x1288], [0x128A, 0x128D], [0x1290, 0x12B0], [0x12B2, 0x12B5], [0x12B8, 0x12BE], [0x12C0, 0x12C0], [0x12C2, 0x12C5], [0x12C8, 0x12D6], [0x12D8, 0x1310], [0x1312, 0x1315], [0x1318, 0x135A], [0x1380, 0x138F], [0x13A0, 0x13F4], [0x1401, 0x166C], [0x166F, 0x1676], [0x1681, 0x169A], [0x16A0, 0x16EA], [0x1700, 0x170C], [0x170E, 0x1711], [0x1720, 0x1731], [0x1740, 0x1751], [0x1760, 0x176C], [0x176E, 0x1770], [0x1780, 0x17B3], [0x17DC, 0x17DC], [0x1820, 0x1842], [0x1844, 0x1877], [0x1880, 0x18A8], [0x18AA, 0x18AA], [0x1900, 0x191C], [0x1950, 0x196D], [0x1970, 0x1974], [0x1980, 0x19A9], [0x19C1, 0x19C7], [0x1A00, 0x1A16], [0x1B05, 0x1B33], [0x1B45, 0x1B4B], [0x1B83, 0x1BA0], [0x1BAE, 0x1BAF], [0x1C00, 0x1C23], [0x1C4D, 0x1C4F], [0x1C5A, 0x1C77], [0x2135, 0x2138], [0x2D30, 0x2D65], [0x2D80, 0x2D96], [0x2DA0, 0x2DA6], [0x2DA8, 0x2DAE], [0x2DB0, 0x2DB6], [0x2DB8, 0x2DBE], [0x2DC0, 0x2DC6], [0x2DC8, 0x2DCE], [0x2DD0, 0x2DD6], [0x2DD8, 0x2DDE], [0x3006, 0x3006], [0x303C, 0x303C], [0x3041, 0x3096], [0x309F, 0x309F], [0x30A1, 0x30FA], [0x30FF, 0x30FF], [0x3105, 0x312D], [0x3131, 0x318E], [0x31A0, 0x31B7], [0x31F0, 0x31FF], [0x3400, 0x4DB5], [0x4E00, 0x9FC3], [0xA000, 0xA014], [0xA016, 0xA48C], [0xA500, 0xA60B], [0xA610, 0xA61F], [0xA62A, 0xA62B], [0xA66E, 0xA66E], [0xA7FB, 0xA801], [0xA803, 0xA805], [0xA807, 0xA80A], [0xA80C, 0xA822], [0xA840, 0xA873], [0xA882, 0xA8B3], [0xA90A, 0xA925], [0xA930, 0xA946], [0xAA00, 0xAA28], [0xAA40, 0xAA42], [0xAA44, 0xAA4B], [0xAC00, 0xD7A3], [0xF900, 0xFA2D], [0xFA30, 0xFA6A], [0xFA70, 0xFAD9], [0xFB1D, 0xFB1D], [0xFB1F, 0xFB28], [0xFB2A, 0xFB36], [0xFB38, 0xFB3C], [0xFB3E, 0xFB3E], [0xFB40, 0xFB41], [0xFB43, 0xFB44], [0xFB46, 0xFBB1], [0xFBD3, 0xFD3D], [0xFD50, 0xFD8F], [0xFD92, 0xFDC7], [0xFDF0, 0xFDFB], [0xFE70, 0xFE74], [0xFE76, 0xFEFC], [0xFF66, 0xFF6F], [0xFF71, 0xFF9D], [0xFFA0, 0xFFBE], [0xFFC2, 0xFFC7], [0xFFCA, 0xFFCF], [0xFFD2, 0xFFD7], [0xFFDA, 0xFFDC]]; -Nl = [[0x16EE, 0x16F0], [0x2160, 0x2182], [0x2185, 0x2188], [0x3007, 0x3007], [0x3021, 0x3029], [0x3038, 0x303A]]; -Mn = [[0x0300, 0x036F], [0x0483, 0x0487], [0x0591, 0x05BD], [0x05BF, 0x05BF], [0x05C1, 0x05C2], [0x05C4, 0x05C5], [0x05C7, 0x05C7], [0x0610, 0x061A], [0x064B, 0x065E], [0x0670, 0x0670], [0x06D6, 0x06DC], [0x06DF, 0x06E4], [0x06E7, 0x06E8], [0x06EA, 0x06ED], [0x0711, 0x0711], [0x0730, 0x074A], [0x07A6, 0x07B0], [0x07EB, 0x07F3], [0x0901, 0x0902], [0x093C, 0x093C], [0x0941, 0x0948], [0x094D, 0x094D], [0x0951, 0x0954], [0x0962, 0x0963], [0x0981, 0x0981], [0x09BC, 0x09BC], [0x09C1, 0x09C4], [0x09CD, 0x09CD], [0x09E2, 0x09E3], [0x0A01, 0x0A02], [0x0A3C, 0x0A3C], [0x0A41, 0x0A42], [0x0A47, 0x0A48], [0x0A4B, 0x0A4D], [0x0A51, 0x0A51], [0x0A70, 0x0A71], [0x0A75, 0x0A75], [0x0A81, 0x0A82], [0x0ABC, 0x0ABC], [0x0AC1, 0x0AC5], [0x0AC7, 0x0AC8], [0x0ACD, 0x0ACD], [0x0AE2, 0x0AE3], [0x0B01, 0x0B01], [0x0B3C, 0x0B3C], [0x0B3F, 0x0B3F], [0x0B41, 0x0B44], [0x0B4D, 0x0B4D], [0x0B56, 0x0B56], [0x0B62, 0x0B63], [0x0B82, 0x0B82], [0x0BC0, 0x0BC0], [0x0BCD, 0x0BCD], [0x0C3E, 0x0C40], [0x0C46, 0x0C48], [0x0C4A, 0x0C4D], [0x0C55, 0x0C56], [0x0C62, 0x0C63], [0x0CBC, 0x0CBC], [0x0CBF, 0x0CBF], [0x0CC6, 0x0CC6], [0x0CCC, 0x0CCD], [0x0CE2, 0x0CE3], [0x0D41, 0x0D44], [0x0D4D, 0x0D4D], [0x0D62, 0x0D63], [0x0DCA, 0x0DCA], [0x0DD2, 0x0DD4], [0x0DD6, 0x0DD6], [0x0E31, 0x0E31], [0x0E34, 0x0E3A], [0x0E47, 0x0E4E], [0x0EB1, 0x0EB1], [0x0EB4, 0x0EB9], [0x0EBB, 0x0EBC], [0x0EC8, 0x0ECD], [0x0F18, 0x0F19], [0x0F35, 0x0F35], [0x0F37, 0x0F37], [0x0F39, 0x0F39], [0x0F71, 0x0F7E], [0x0F80, 0x0F84], [0x0F86, 0x0F87], [0x0F90, 0x0F97], [0x0F99, 0x0FBC], [0x0FC6, 0x0FC6], [0x102D, 0x1030], [0x1032, 0x1037], [0x1039, 0x103A], [0x103D, 0x103E], [0x1058, 0x1059], [0x105E, 0x1060], [0x1071, 0x1074], [0x1082, 0x1082], [0x1085, 0x1086], [0x108D, 0x108D], [0x135F, 0x135F], [0x1712, 0x1714], [0x1732, 0x1734], [0x1752, 0x1753], [0x1772, 0x1773], [0x17B7, 0x17BD], [0x17C6, 0x17C6], [0x17C9, 0x17D3], [0x17DD, 0x17DD], [0x180B, 0x180D], [0x18A9, 0x18A9], [0x1920, 0x1922], [0x1927, 0x1928], [0x1932, 0x1932], [0x1939, 0x193B], [0x1A17, 0x1A18], [0x1B00, 0x1B03], [0x1B34, 0x1B34], [0x1B36, 0x1B3A], [0x1B3C, 0x1B3C], [0x1B42, 0x1B42], [0x1B6B, 0x1B73], [0x1B80, 0x1B81], [0x1BA2, 0x1BA5], [0x1BA8, 0x1BA9], [0x1C2C, 0x1C33], [0x1C36, 0x1C37], [0x1DC0, 0x1DE6], [0x1DFE, 0x1DFF], [0x20D0, 0x20DC], [0x20E1, 0x20E1], [0x20E5, 0x20F0], [0x2DE0, 0x2DFF], [0x302A, 0x302F], [0x3099, 0x309A], [0xA66F, 0xA66F], [0xA67C, 0xA67D], [0xA802, 0xA802], [0xA806, 0xA806], [0xA80B, 0xA80B], [0xA825, 0xA826], [0xA8C4, 0xA8C4], [0xA926, 0xA92D], [0xA947, 0xA951], [0xAA29, 0xAA2E], [0xAA31, 0xAA32], [0xAA35, 0xAA36], [0xAA43, 0xAA43], [0xAA4C, 0xAA4C], [0xFB1E, 0xFB1E], [0xFE00, 0xFE0F], [0xFE20, 0xFE26]]; -Mc = [[0x0903, 0x0903], [0x093E, 0x0940], [0x0949, 0x094C], [0x0982, 0x0983], [0x09BE, 0x09C0], [0x09C7, 0x09C8], [0x09CB, 0x09CC], [0x09D7, 0x09D7], [0x0A03, 0x0A03], [0x0A3E, 0x0A40], [0x0A83, 0x0A83], [0x0ABE, 0x0AC0], [0x0AC9, 0x0AC9], [0x0ACB, 0x0ACC], [0x0B02, 0x0B03], [0x0B3E, 0x0B3E], [0x0B40, 0x0B40], [0x0B47, 0x0B48], [0x0B4B, 0x0B4C], [0x0B57, 0x0B57], [0x0BBE, 0x0BBF], [0x0BC1, 0x0BC2], [0x0BC6, 0x0BC8], [0x0BCA, 0x0BCC], [0x0BD7, 0x0BD7], [0x0C01, 0x0C03], [0x0C41, 0x0C44], [0x0C82, 0x0C83], [0x0CBE, 0x0CBE], [0x0CC0, 0x0CC4], [0x0CC7, 0x0CC8], [0x0CCA, 0x0CCB], [0x0CD5, 0x0CD6], [0x0D02, 0x0D03], [0x0D3E, 0x0D40], [0x0D46, 0x0D48], [0x0D4A, 0x0D4C], [0x0D57, 0x0D57], [0x0D82, 0x0D83], [0x0DCF, 0x0DD1], [0x0DD8, 0x0DDF], [0x0DF2, 0x0DF3], [0x0F3E, 0x0F3F], [0x0F7F, 0x0F7F], [0x102B, 0x102C], [0x1031, 0x1031], [0x1038, 0x1038], [0x103B, 0x103C], [0x1056, 0x1057], [0x1062, 0x1064], [0x1067, 0x106D], [0x1083, 0x1084], [0x1087, 0x108C], [0x108F, 0x108F], [0x17B6, 0x17B6], [0x17BE, 0x17C5], [0x17C7, 0x17C8], [0x1923, 0x1926], [0x1929, 0x192B], [0x1930, 0x1931], [0x1933, 0x1938], [0x19B0, 0x19C0], [0x19C8, 0x19C9], [0x1A19, 0x1A1B], [0x1B04, 0x1B04], [0x1B35, 0x1B35], [0x1B3B, 0x1B3B], [0x1B3D, 0x1B41], [0x1B43, 0x1B44], [0x1B82, 0x1B82], [0x1BA1, 0x1BA1], [0x1BA6, 0x1BA7], [0x1BAA, 0x1BAA], [0x1C24, 0x1C2B], [0x1C34, 0x1C35], [0xA823, 0xA824], [0xA827, 0xA827], [0xA880, 0xA881], [0xA8B4, 0xA8C3], [0xA952, 0xA953], [0xAA2F, 0xAA30], [0xAA33, 0xAA34], [0xAA4D, 0xAA4D]]; -Nd = [[0x0030, 0x0039], [0x0660, 0x0669], [0x06F0, 0x06F9], [0x07C0, 0x07C9], [0x0966, 0x096F], [0x09E6, 0x09EF], [0x0A66, 0x0A6F], [0x0AE6, 0x0AEF], [0x0B66, 0x0B6F], [0x0BE6, 0x0BEF], [0x0C66, 0x0C6F], [0x0CE6, 0x0CEF], [0x0D66, 0x0D6F], [0x0E50, 0x0E59], [0x0ED0, 0x0ED9], [0x0F20, 0x0F29], [0x1040, 0x1049], [0x1090, 0x1099], [0x17E0, 0x17E9], [0x1810, 0x1819], [0x1946, 0x194F], [0x19D0, 0x19D9], [0x1B50, 0x1B59], [0x1BB0, 0x1BB9], [0x1C40, 0x1C49], [0x1C50, 0x1C59], [0xA620, 0xA629], [0xA8D0, 0xA8D9], [0xA900, 0xA909], [0xAA50, 0xAA59], [0xFF10, 0xFF19]]; -Pc = [[0x005F, 0x005F], [0x203F, 0x2040], [0x2054, 0x2054], [0xFE33, 0xFE34], [0xFE4D, 0xFE4F], [0xFF3F, 0xFF3F]]; - -UnicodeLetterLu = []; -UnicodeLetterLl = []; -UnicodeLetterLt = []; -UnicodeLetterLm = []; -UnicodeLetterLo = []; -UnicodeLetterNl = []; -UnicodeLetterMn = []; -UnicodeLetterMc = []; -UnicodeLetterNd = []; -UnicodeLetterPc = []; - -for (indexI = 0; indexI < Lu.length; indexI++) { - for (indexJ = Lu[indexI][0]; indexJ <= Lu[indexI][1]; indexJ++) { - UnicodeLetterLu[indexJ] = true; - } -} -for (indexI = 0; indexI < Ll.length; indexI++) { - for (indexJ = Ll[indexI][0]; indexJ <= Ll[indexI][1]; indexJ++) { - UnicodeLetterLl[indexJ] = true; - } -} -for (indexI = 0; indexI < Lt.length; indexI++) { - for (indexJ = Lt[indexI][0]; indexJ <= Lt[indexI][1]; indexJ++) { - UnicodeLetterLt[indexJ] = true; - } -} -for (indexI = 0; indexI < Lm.length; indexI++) { - for (indexJ = Lm[indexI][0]; indexJ <= Lm[indexI][1]; indexJ++) { - UnicodeLetterLm[indexJ] = true; - } -} -for (indexI = 0; indexI < Lo.length; indexI++) { - for (indexJ = Lo[indexI][0]; indexJ <= Lo[indexI][1]; indexJ++) { - UnicodeLetterLo[indexJ] = true; - } -} -for (indexI = 0; indexI < Nl.length; indexI++) { - for (indexJ = Nl[indexI][0]; indexJ <= Nl[indexI][1]; indexJ++) { - UnicodeLetterNl[indexJ] = true; - } -} -for (indexI = 0; indexI < Mn.length; indexI++) { - for (indexJ = Mn[indexI][0]; indexJ <= Mn[indexI][1]; indexJ++) { - UnicodeLetterMn[indexJ] = true; - } -} -for (indexI = 0; indexI < Mc.length; indexI++) { - for (indexJ = Mc[indexI][0]; indexJ <= Mc[indexI][1]; indexJ++) { - UnicodeLetterMc[indexJ] = true; - } -} -for (indexI = 0; indexI < Nd.length; indexI++) { - for (indexJ = Nd[indexI][0]; indexJ <= Nd[indexI][1]; indexJ++) { - UnicodeLetterNd[indexJ] = true; - } -} -for (indexI = 0; indexI < Pc.length; indexI++) { - for (indexJ = Pc[indexI][0]; indexJ <= Pc[indexI][1]; indexJ++) { - UnicodeLetterPc[indexJ] = true; - } -} - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; -for (index = 0; index <= 65535; index++) { - if ((UnicodeLetterLu[index] === undefined) && (UnicodeLetterLl[index] === undefined) && (UnicodeLetterLt[index] === undefined) && (UnicodeLetterLm[index] === undefined) && (UnicodeLetterLo[index] === undefined) && (UnicodeLetterNl[index] === undefined) && (UnicodeLetterMn[index] === undefined) && (UnicodeLetterMc[index] === undefined) && (UnicodeLetterNd[index] === undefined) && (UnicodeLetterPc[index] === undefined) && (index !== 0x0024) && (index !== 0x005F)) { - try { - var identifier = "$" + String.fromCharCode(index) + "1"; - eval("var " + identifier + "=1"); - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; - } catch (e) { - } - count++; - } -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_510/S7.6_A3.2.js b/tests/ES3/Unicode/Unicode_510/S7.6_A3.2.js deleted file mode 100644 index 3b5bc86a4..000000000 --- a/tests/ES3/Unicode/Unicode_510/S7.6_A3.2.js +++ /dev/null @@ -1,124 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A3.2; - * @section: 7.6; - * @assertion: IdentifierName must begin only IdentifierStart character; - * @description: Complex test with eval; -*/ - -//CHECK -Lu = [[0x0041, 0x005A], [0x00C0, 0x00D6], [0x00D8, 0x00DE], [0x0100, 0x0100], [0x0102, 0x0102], [0x0104, 0x0104], [0x0106, 0x0106], [0x0108, 0x0108], [0x010A, 0x010A], [0x010C, 0x010C], [0x010E, 0x010E], [0x0110, 0x0110], [0x0112, 0x0112], [0x0114, 0x0114], [0x0116, 0x0116], [0x0118, 0x0118], [0x011A, 0x011A], [0x011C, 0x011C], [0x011E, 0x011E], [0x0120, 0x0120], [0x0122, 0x0122], [0x0124, 0x0124], [0x0126, 0x0126], [0x0128, 0x0128], [0x012A, 0x012A], [0x012C, 0x012C], [0x012E, 0x012E], [0x0130, 0x0130], [0x0132, 0x0132], [0x0134, 0x0134], [0x0136, 0x0136], [0x0139, 0x0139], [0x013B, 0x013B], [0x013D, 0x013D], [0x013F, 0x013F], [0x0141, 0x0141], [0x0143, 0x0143], [0x0145, 0x0145], [0x0147, 0x0147], [0x014A, 0x014A], [0x014C, 0x014C], [0x014E, 0x014E], [0x0150, 0x0150], [0x0152, 0x0152], [0x0154, 0x0154], [0x0156, 0x0156], [0x0158, 0x0158], [0x015A, 0x015A], [0x015C, 0x015C], [0x015E, 0x015E], [0x0160, 0x0160], [0x0162, 0x0162], [0x0164, 0x0164], [0x0166, 0x0166], [0x0168, 0x0168], [0x016A, 0x016A], [0x016C, 0x016C], [0x016E, 0x016E], [0x0170, 0x0170], [0x0172, 0x0172], [0x0174, 0x0174], [0x0176, 0x0176], [0x0178, 0x0179], [0x017B, 0x017B], [0x017D, 0x017D], [0x0181, 0x0182], [0x0184, 0x0184], [0x0186, 0x0187], [0x0189, 0x018B], [0x018E, 0x0191], [0x0193, 0x0194], [0x0196, 0x0198], [0x019C, 0x019D], [0x019F, 0x01A0], [0x01A2, 0x01A2], [0x01A4, 0x01A4], [0x01A6, 0x01A7], [0x01A9, 0x01A9], [0x01AC, 0x01AC], [0x01AE, 0x01AF], [0x01B1, 0x01B3], [0x01B5, 0x01B5], [0x01B7, 0x01B8], [0x01BC, 0x01BC], [0x01C4, 0x01C4], [0x01C7, 0x01C7], [0x01CA, 0x01CA], [0x01CD, 0x01CD], [0x01CF, 0x01CF], [0x01D1, 0x01D1], [0x01D3, 0x01D3], [0x01D5, 0x01D5], [0x01D7, 0x01D7], [0x01D9, 0x01D9], [0x01DB, 0x01DB], [0x01DE, 0x01DE], [0x01E0, 0x01E0], [0x01E2, 0x01E2], [0x01E4, 0x01E4], [0x01E6, 0x01E6], [0x01E8, 0x01E8], [0x01EA, 0x01EA], [0x01EC, 0x01EC], [0x01EE, 0x01EE], [0x01F1, 0x01F1], [0x01F4, 0x01F4], [0x01F6, 0x01F8], [0x01FA, 0x01FA], [0x01FC, 0x01FC], [0x01FE, 0x01FE], [0x0200, 0x0200], [0x0202, 0x0202], [0x0204, 0x0204], [0x0206, 0x0206], [0x0208, 0x0208], [0x020A, 0x020A], [0x020C, 0x020C], [0x020E, 0x020E], [0x0210, 0x0210], [0x0212, 0x0212], [0x0214, 0x0214], [0x0216, 0x0216], [0x0218, 0x0218], [0x021A, 0x021A], [0x021C, 0x021C], [0x021E, 0x021E], [0x0220, 0x0220], [0x0222, 0x0222], [0x0224, 0x0224], [0x0226, 0x0226], [0x0228, 0x0228], [0x022A, 0x022A], [0x022C, 0x022C], [0x022E, 0x022E], [0x0230, 0x0230], [0x0232, 0x0232], [0x023A, 0x023B], [0x023D, 0x023E], [0x0241, 0x0241], [0x0243, 0x0246], [0x0248, 0x0248], [0x024A, 0x024A], [0x024C, 0x024C], [0x024E, 0x024E], [0x0370, 0x0370], [0x0372, 0x0372], [0x0376, 0x0376], [0x0386, 0x0386], [0x0388, 0x038A], [0x038C, 0x038C], [0x038E, 0x038F], [0x0391, 0x03A1], [0x03A3, 0x03AB], [0x03CF, 0x03CF], [0x03D2, 0x03D4], [0x03D8, 0x03D8], [0x03DA, 0x03DA], [0x03DC, 0x03DC], [0x03DE, 0x03DE], [0x03E0, 0x03E0], [0x03E2, 0x03E2], [0x03E4, 0x03E4], [0x03E6, 0x03E6], [0x03E8, 0x03E8], [0x03EA, 0x03EA], [0x03EC, 0x03EC], [0x03EE, 0x03EE], [0x03F4, 0x03F4], [0x03F7, 0x03F7], [0x03F9, 0x03FA], [0x03FD, 0x042F], [0x0460, 0x0460], [0x0462, 0x0462], [0x0464, 0x0464], [0x0466, 0x0466], [0x0468, 0x0468], [0x046A, 0x046A], [0x046C, 0x046C], [0x046E, 0x046E], [0x0470, 0x0470], [0x0472, 0x0472], [0x0474, 0x0474], [0x0476, 0x0476], [0x0478, 0x0478], [0x047A, 0x047A], [0x047C, 0x047C], [0x047E, 0x047E], [0x0480, 0x0480], [0x048A, 0x048A], [0x048C, 0x048C], [0x048E, 0x048E], [0x0490, 0x0490], [0x0492, 0x0492], [0x0494, 0x0494], [0x0496, 0x0496], [0x0498, 0x0498], [0x049A, 0x049A], [0x049C, 0x049C], [0x049E, 0x049E], [0x04A0, 0x04A0], [0x04A2, 0x04A2], [0x04A4, 0x04A4], [0x04A6, 0x04A6], [0x04A8, 0x04A8], [0x04AA, 0x04AA], [0x04AC, 0x04AC], [0x04AE, 0x04AE], [0x04B0, 0x04B0], [0x04B2, 0x04B2], [0x04B4, 0x04B4], [0x04B6, 0x04B6], [0x04B8, 0x04B8], [0x04BA, 0x04BA], [0x04BC, 0x04BC], [0x04BE, 0x04BE], [0x04C0, 0x04C1], [0x04C3, 0x04C3], [0x04C5, 0x04C5], [0x04C7, 0x04C7], [0x04C9, 0x04C9], [0x04CB, 0x04CB], [0x04CD, 0x04CD], [0x04D0, 0x04D0], [0x04D2, 0x04D2], [0x04D4, 0x04D4], [0x04D6, 0x04D6], [0x04D8, 0x04D8], [0x04DA, 0x04DA], [0x04DC, 0x04DC], [0x04DE, 0x04DE], [0x04E0, 0x04E0], [0x04E2, 0x04E2], [0x04E4, 0x04E4], [0x04E6, 0x04E6], [0x04E8, 0x04E8], [0x04EA, 0x04EA], [0x04EC, 0x04EC], [0x04EE, 0x04EE], [0x04F0, 0x04F0], [0x04F2, 0x04F2], [0x04F4, 0x04F4], [0x04F6, 0x04F6], [0x04F8, 0x04F8], [0x04FA, 0x04FA], [0x04FC, 0x04FC], [0x04FE, 0x04FE], [0x0500, 0x0500], [0x0502, 0x0502], [0x0504, 0x0504], [0x0506, 0x0506], [0x0508, 0x0508], [0x050A, 0x050A], [0x050C, 0x050C], [0x050E, 0x050E], [0x0510, 0x0510], [0x0512, 0x0512], [0x0514, 0x0514], [0x0516, 0x0516], [0x0518, 0x0518], [0x051A, 0x051A], [0x051C, 0x051C], [0x051E, 0x051E], [0x0520, 0x0520], [0x0522, 0x0522], [0x0531, 0x0556], [0x10A0, 0x10C5], [0x1E00, 0x1E00], [0x1E02, 0x1E02], [0x1E04, 0x1E04], [0x1E06, 0x1E06], [0x1E08, 0x1E08], [0x1E0A, 0x1E0A], [0x1E0C, 0x1E0C], [0x1E0E, 0x1E0E], [0x1E10, 0x1E10], [0x1E12, 0x1E12], [0x1E14, 0x1E14], [0x1E16, 0x1E16], [0x1E18, 0x1E18], [0x1E1A, 0x1E1A], [0x1E1C, 0x1E1C], [0x1E1E, 0x1E1E], [0x1E20, 0x1E20], [0x1E22, 0x1E22], [0x1E24, 0x1E24], [0x1E26, 0x1E26], [0x1E28, 0x1E28], [0x1E2A, 0x1E2A], [0x1E2C, 0x1E2C], [0x1E2E, 0x1E2E], [0x1E30, 0x1E30], [0x1E32, 0x1E32], [0x1E34, 0x1E34], [0x1E36, 0x1E36], [0x1E38, 0x1E38], [0x1E3A, 0x1E3A], [0x1E3C, 0x1E3C], [0x1E3E, 0x1E3E], [0x1E40, 0x1E40], [0x1E42, 0x1E42], [0x1E44, 0x1E44], [0x1E46, 0x1E46], [0x1E48, 0x1E48], [0x1E4A, 0x1E4A], [0x1E4C, 0x1E4C], [0x1E4E, 0x1E4E], [0x1E50, 0x1E50], [0x1E52, 0x1E52], [0x1E54, 0x1E54], [0x1E56, 0x1E56], [0x1E58, 0x1E58], [0x1E5A, 0x1E5A], [0x1E5C, 0x1E5C], [0x1E5E, 0x1E5E], [0x1E60, 0x1E60], [0x1E62, 0x1E62], [0x1E64, 0x1E64], [0x1E66, 0x1E66], [0x1E68, 0x1E68], [0x1E6A, 0x1E6A], [0x1E6C, 0x1E6C], [0x1E6E, 0x1E6E], [0x1E70, 0x1E70], [0x1E72, 0x1E72], [0x1E74, 0x1E74], [0x1E76, 0x1E76], [0x1E78, 0x1E78], [0x1E7A, 0x1E7A], [0x1E7C, 0x1E7C], [0x1E7E, 0x1E7E], [0x1E80, 0x1E80], [0x1E82, 0x1E82], [0x1E84, 0x1E84], [0x1E86, 0x1E86], [0x1E88, 0x1E88], [0x1E8A, 0x1E8A], [0x1E8C, 0x1E8C], [0x1E8E, 0x1E8E], [0x1E90, 0x1E90], [0x1E92, 0x1E92], [0x1E94, 0x1E94], [0x1E9E, 0x1E9E], [0x1EA0, 0x1EA0], [0x1EA2, 0x1EA2], [0x1EA4, 0x1EA4], [0x1EA6, 0x1EA6], [0x1EA8, 0x1EA8], [0x1EAA, 0x1EAA], [0x1EAC, 0x1EAC], [0x1EAE, 0x1EAE], [0x1EB0, 0x1EB0], [0x1EB2, 0x1EB2], [0x1EB4, 0x1EB4], [0x1EB6, 0x1EB6], [0x1EB8, 0x1EB8], [0x1EBA, 0x1EBA], [0x1EBC, 0x1EBC], [0x1EBE, 0x1EBE], [0x1EC0, 0x1EC0], [0x1EC2, 0x1EC2], [0x1EC4, 0x1EC4], [0x1EC6, 0x1EC6], [0x1EC8, 0x1EC8], [0x1ECA, 0x1ECA], [0x1ECC, 0x1ECC], [0x1ECE, 0x1ECE], [0x1ED0, 0x1ED0], [0x1ED2, 0x1ED2], [0x1ED4, 0x1ED4], [0x1ED6, 0x1ED6], [0x1ED8, 0x1ED8], [0x1EDA, 0x1EDA], [0x1EDC, 0x1EDC], [0x1EDE, 0x1EDE], [0x1EE0, 0x1EE0], [0x1EE2, 0x1EE2], [0x1EE4, 0x1EE4], [0x1EE6, 0x1EE6], [0x1EE8, 0x1EE8], [0x1EEA, 0x1EEA], [0x1EEC, 0x1EEC], [0x1EEE, 0x1EEE], [0x1EF0, 0x1EF0], [0x1EF2, 0x1EF2], [0x1EF4, 0x1EF4], [0x1EF6, 0x1EF6], [0x1EF8, 0x1EF8], [0x1EFA, 0x1EFA], [0x1EFC, 0x1EFC], [0x1EFE, 0x1EFE], [0x1F08, 0x1F0F], [0x1F18, 0x1F1D], [0x1F28, 0x1F2F], [0x1F38, 0x1F3F], [0x1F48, 0x1F4D], [0x1F59, 0x1F59], [0x1F5B, 0x1F5B], [0x1F5D, 0x1F5D], [0x1F5F, 0x1F5F], [0x1F68, 0x1F6F], [0x1FB8, 0x1FBB], [0x1FC8, 0x1FCB], [0x1FD8, 0x1FDB], [0x1FE8, 0x1FEC], [0x1FF8, 0x1FFB], [0x2102, 0x2102], [0x2107, 0x2107], [0x210B, 0x210D], [0x2110, 0x2112], [0x2115, 0x2115], [0x2119, 0x211D], [0x2124, 0x2124], [0x2126, 0x2126], [0x2128, 0x2128], [0x212A, 0x212D], [0x2130, 0x2133], [0x213E, 0x213F], [0x2145, 0x2145], [0x2183, 0x2183], [0x2C00, 0x2C2E], [0x2C60, 0x2C60], [0x2C62, 0x2C64], [0x2C67, 0x2C67], [0x2C69, 0x2C69], [0x2C6B, 0x2C6B], [0x2C6D, 0x2C6F], [0x2C72, 0x2C72], [0x2C75, 0x2C75], [0x2C80, 0x2C80], [0x2C82, 0x2C82], [0x2C84, 0x2C84], [0x2C86, 0x2C86], [0x2C88, 0x2C88], [0x2C8A, 0x2C8A], [0x2C8C, 0x2C8C], [0x2C8E, 0x2C8E], [0x2C90, 0x2C90], [0x2C92, 0x2C92], [0x2C94, 0x2C94], [0x2C96, 0x2C96], [0x2C98, 0x2C98], [0x2C9A, 0x2C9A], [0x2C9C, 0x2C9C], [0x2C9E, 0x2C9E], [0x2CA0, 0x2CA0], [0x2CA2, 0x2CA2], [0x2CA4, 0x2CA4], [0x2CA6, 0x2CA6], [0x2CA8, 0x2CA8], [0x2CAA, 0x2CAA], [0x2CAC, 0x2CAC], [0x2CAE, 0x2CAE], [0x2CB0, 0x2CB0], [0x2CB2, 0x2CB2], [0x2CB4, 0x2CB4], [0x2CB6, 0x2CB6], [0x2CB8, 0x2CB8], [0x2CBA, 0x2CBA], [0x2CBC, 0x2CBC], [0x2CBE, 0x2CBE], [0x2CC0, 0x2CC0], [0x2CC2, 0x2CC2], [0x2CC4, 0x2CC4], [0x2CC6, 0x2CC6], [0x2CC8, 0x2CC8], [0x2CCA, 0x2CCA], [0x2CCC, 0x2CCC], [0x2CCE, 0x2CCE], [0x2CD0, 0x2CD0], [0x2CD2, 0x2CD2], [0x2CD4, 0x2CD4], [0x2CD6, 0x2CD6], [0x2CD8, 0x2CD8], [0x2CDA, 0x2CDA], [0x2CDC, 0x2CDC], [0x2CDE, 0x2CDE], [0x2CE0, 0x2CE0], [0x2CE2, 0x2CE2], [0xA640, 0xA640], [0xA642, 0xA642], [0xA644, 0xA644], [0xA646, 0xA646], [0xA648, 0xA648], [0xA64A, 0xA64A], [0xA64C, 0xA64C], [0xA64E, 0xA64E], [0xA650, 0xA650], [0xA652, 0xA652], [0xA654, 0xA654], [0xA656, 0xA656], [0xA658, 0xA658], [0xA65A, 0xA65A], [0xA65C, 0xA65C], [0xA65E, 0xA65E], [0xA662, 0xA662], [0xA664, 0xA664], [0xA666, 0xA666], [0xA668, 0xA668], [0xA66A, 0xA66A], [0xA66C, 0xA66C], [0xA680, 0xA680], [0xA682, 0xA682], [0xA684, 0xA684], [0xA686, 0xA686], [0xA688, 0xA688], [0xA68A, 0xA68A], [0xA68C, 0xA68C], [0xA68E, 0xA68E], [0xA690, 0xA690], [0xA692, 0xA692], [0xA694, 0xA694], [0xA696, 0xA696], [0xA722, 0xA722], [0xA724, 0xA724], [0xA726, 0xA726], [0xA728, 0xA728], [0xA72A, 0xA72A], [0xA72C, 0xA72C], [0xA72E, 0xA72E], [0xA732, 0xA732], [0xA734, 0xA734], [0xA736, 0xA736], [0xA738, 0xA738], [0xA73A, 0xA73A], [0xA73C, 0xA73C], [0xA73E, 0xA73E], [0xA740, 0xA740], [0xA742, 0xA742], [0xA744, 0xA744], [0xA746, 0xA746], [0xA748, 0xA748], [0xA74A, 0xA74A], [0xA74C, 0xA74C], [0xA74E, 0xA74E], [0xA750, 0xA750], [0xA752, 0xA752], [0xA754, 0xA754], [0xA756, 0xA756], [0xA758, 0xA758], [0xA75A, 0xA75A], [0xA75C, 0xA75C], [0xA75E, 0xA75E], [0xA760, 0xA760], [0xA762, 0xA762], [0xA764, 0xA764], [0xA766, 0xA766], [0xA768, 0xA768], [0xA76A, 0xA76A], [0xA76C, 0xA76C], [0xA76E, 0xA76E], [0xA779, 0xA779], [0xA77B, 0xA77B], [0xA77D, 0xA77E], [0xA780, 0xA780], [0xA782, 0xA782], [0xA784, 0xA784], [0xA786, 0xA786], [0xA78B, 0xA78B], [0xFF21, 0xFF3A]]; -Ll = [[0x0061, 0x007A], [0x00AA, 0x00AA], [0x00B5, 0x00B5], [0x00BA, 0x00BA], [0x00DF, 0x00F6], [0x00F8, 0x00FF], [0x0101, 0x0101], [0x0103, 0x0103], [0x0105, 0x0105], [0x0107, 0x0107], [0x0109, 0x0109], [0x010B, 0x010B], [0x010D, 0x010D], [0x010F, 0x010F], [0x0111, 0x0111], [0x0113, 0x0113], [0x0115, 0x0115], [0x0117, 0x0117], [0x0119, 0x0119], [0x011B, 0x011B], [0x011D, 0x011D], [0x011F, 0x011F], [0x0121, 0x0121], [0x0123, 0x0123], [0x0125, 0x0125], [0x0127, 0x0127], [0x0129, 0x0129], [0x012B, 0x012B], [0x012D, 0x012D], [0x012F, 0x012F], [0x0131, 0x0131], [0x0133, 0x0133], [0x0135, 0x0135], [0x0137, 0x0138], [0x013A, 0x013A], [0x013C, 0x013C], [0x013E, 0x013E], [0x0140, 0x0140], [0x0142, 0x0142], [0x0144, 0x0144], [0x0146, 0x0146], [0x0148, 0x0149], [0x014B, 0x014B], [0x014D, 0x014D], [0x014F, 0x014F], [0x0151, 0x0151], [0x0153, 0x0153], [0x0155, 0x0155], [0x0157, 0x0157], [0x0159, 0x0159], [0x015B, 0x015B], [0x015D, 0x015D], [0x015F, 0x015F], [0x0161, 0x0161], [0x0163, 0x0163], [0x0165, 0x0165], [0x0167, 0x0167], [0x0169, 0x0169], [0x016B, 0x016B], [0x016D, 0x016D], [0x016F, 0x016F], [0x0171, 0x0171], [0x0173, 0x0173], [0x0175, 0x0175], [0x0177, 0x0177], [0x017A, 0x017A], [0x017C, 0x017C], [0x017E, 0x0180], [0x0183, 0x0183], [0x0185, 0x0185], [0x0188, 0x0188], [0x018C, 0x018D], [0x0192, 0x0192], [0x0195, 0x0195], [0x0199, 0x019B], [0x019E, 0x019E], [0x01A1, 0x01A1], [0x01A3, 0x01A3], [0x01A5, 0x01A5], [0x01A8, 0x01A8], [0x01AA, 0x01AB], [0x01AD, 0x01AD], [0x01B0, 0x01B0], [0x01B4, 0x01B4], [0x01B6, 0x01B6], [0x01B9, 0x01BA], [0x01BD, 0x01BF], [0x01C6, 0x01C6], [0x01C9, 0x01C9], [0x01CC, 0x01CC], [0x01CE, 0x01CE], [0x01D0, 0x01D0], [0x01D2, 0x01D2], [0x01D4, 0x01D4], [0x01D6, 0x01D6], [0x01D8, 0x01D8], [0x01DA, 0x01DA], [0x01DC, 0x01DD], [0x01DF, 0x01DF], [0x01E1, 0x01E1], [0x01E3, 0x01E3], [0x01E5, 0x01E5], [0x01E7, 0x01E7], [0x01E9, 0x01E9], [0x01EB, 0x01EB], [0x01ED, 0x01ED], [0x01EF, 0x01F0], [0x01F3, 0x01F3], [0x01F5, 0x01F5], [0x01F9, 0x01F9], [0x01FB, 0x01FB], [0x01FD, 0x01FD], [0x01FF, 0x01FF], [0x0201, 0x0201], [0x0203, 0x0203], [0x0205, 0x0205], [0x0207, 0x0207], [0x0209, 0x0209], [0x020B, 0x020B], [0x020D, 0x020D], [0x020F, 0x020F], [0x0211, 0x0211], [0x0213, 0x0213], [0x0215, 0x0215], [0x0217, 0x0217], [0x0219, 0x0219], [0x021B, 0x021B], [0x021D, 0x021D], [0x021F, 0x021F], [0x0221, 0x0221], [0x0223, 0x0223], [0x0225, 0x0225], [0x0227, 0x0227], [0x0229, 0x0229], [0x022B, 0x022B], [0x022D, 0x022D], [0x022F, 0x022F], [0x0231, 0x0231], [0x0233, 0x0239], [0x023C, 0x023C], [0x023F, 0x0240], [0x0242, 0x0242], [0x0247, 0x0247], [0x0249, 0x0249], [0x024B, 0x024B], [0x024D, 0x024D], [0x024F, 0x0293], [0x0295, 0x02AF], [0x0371, 0x0371], [0x0373, 0x0373], [0x0377, 0x0377], [0x037B, 0x037D], [0x0390, 0x0390], [0x03AC, 0x03CE], [0x03D0, 0x03D1], [0x03D5, 0x03D7], [0x03D9, 0x03D9], [0x03DB, 0x03DB], [0x03DD, 0x03DD], [0x03DF, 0x03DF], [0x03E1, 0x03E1], [0x03E3, 0x03E3], [0x03E5, 0x03E5], [0x03E7, 0x03E7], [0x03E9, 0x03E9], [0x03EB, 0x03EB], [0x03ED, 0x03ED], [0x03EF, 0x03F3], [0x03F5, 0x03F5], [0x03F8, 0x03F8], [0x03FB, 0x03FC], [0x0430, 0x045F], [0x0461, 0x0461], [0x0463, 0x0463], [0x0465, 0x0465], [0x0467, 0x0467], [0x0469, 0x0469], [0x046B, 0x046B], [0x046D, 0x046D], [0x046F, 0x046F], [0x0471, 0x0471], [0x0473, 0x0473], [0x0475, 0x0475], [0x0477, 0x0477], [0x0479, 0x0479], [0x047B, 0x047B], [0x047D, 0x047D], [0x047F, 0x047F], [0x0481, 0x0481], [0x048B, 0x048B], [0x048D, 0x048D], [0x048F, 0x048F], [0x0491, 0x0491], [0x0493, 0x0493], [0x0495, 0x0495], [0x0497, 0x0497], [0x0499, 0x0499], [0x049B, 0x049B], [0x049D, 0x049D], [0x049F, 0x049F], [0x04A1, 0x04A1], [0x04A3, 0x04A3], [0x04A5, 0x04A5], [0x04A7, 0x04A7], [0x04A9, 0x04A9], [0x04AB, 0x04AB], [0x04AD, 0x04AD], [0x04AF, 0x04AF], [0x04B1, 0x04B1], [0x04B3, 0x04B3], [0x04B5, 0x04B5], [0x04B7, 0x04B7], [0x04B9, 0x04B9], [0x04BB, 0x04BB], [0x04BD, 0x04BD], [0x04BF, 0x04BF], [0x04C2, 0x04C2], [0x04C4, 0x04C4], [0x04C6, 0x04C6], [0x04C8, 0x04C8], [0x04CA, 0x04CA], [0x04CC, 0x04CC], [0x04CE, 0x04CF], [0x04D1, 0x04D1], [0x04D3, 0x04D3], [0x04D5, 0x04D5], [0x04D7, 0x04D7], [0x04D9, 0x04D9], [0x04DB, 0x04DB], [0x04DD, 0x04DD], [0x04DF, 0x04DF], [0x04E1, 0x04E1], [0x04E3, 0x04E3], [0x04E5, 0x04E5], [0x04E7, 0x04E7], [0x04E9, 0x04E9], [0x04EB, 0x04EB], [0x04ED, 0x04ED], [0x04EF, 0x04EF], [0x04F1, 0x04F1], [0x04F3, 0x04F3], [0x04F5, 0x04F5], [0x04F7, 0x04F7], [0x04F9, 0x04F9], [0x04FB, 0x04FB], [0x04FD, 0x04FD], [0x04FF, 0x04FF], [0x0501, 0x0501], [0x0503, 0x0503], [0x0505, 0x0505], [0x0507, 0x0507], [0x0509, 0x0509], [0x050B, 0x050B], [0x050D, 0x050D], [0x050F, 0x050F], [0x0511, 0x0511], [0x0513, 0x0513], [0x0515, 0x0515], [0x0517, 0x0517], [0x0519, 0x0519], [0x051B, 0x051B], [0x051D, 0x051D], [0x051F, 0x051F], [0x0521, 0x0521], [0x0523, 0x0523], [0x0561, 0x0587], [0x1D00, 0x1D2B], [0x1D62, 0x1D77], [0x1D79, 0x1D9A], [0x1E01, 0x1E01], [0x1E03, 0x1E03], [0x1E05, 0x1E05], [0x1E07, 0x1E07], [0x1E09, 0x1E09], [0x1E0B, 0x1E0B], [0x1E0D, 0x1E0D], [0x1E0F, 0x1E0F], [0x1E11, 0x1E11], [0x1E13, 0x1E13], [0x1E15, 0x1E15], [0x1E17, 0x1E17], [0x1E19, 0x1E19], [0x1E1B, 0x1E1B], [0x1E1D, 0x1E1D], [0x1E1F, 0x1E1F], [0x1E21, 0x1E21], [0x1E23, 0x1E23], [0x1E25, 0x1E25], [0x1E27, 0x1E27], [0x1E29, 0x1E29], [0x1E2B, 0x1E2B], [0x1E2D, 0x1E2D], [0x1E2F, 0x1E2F], [0x1E31, 0x1E31], [0x1E33, 0x1E33], [0x1E35, 0x1E35], [0x1E37, 0x1E37], [0x1E39, 0x1E39], [0x1E3B, 0x1E3B], [0x1E3D, 0x1E3D], [0x1E3F, 0x1E3F], [0x1E41, 0x1E41], [0x1E43, 0x1E43], [0x1E45, 0x1E45], [0x1E47, 0x1E47], [0x1E49, 0x1E49], [0x1E4B, 0x1E4B], [0x1E4D, 0x1E4D], [0x1E4F, 0x1E4F], [0x1E51, 0x1E51], [0x1E53, 0x1E53], [0x1E55, 0x1E55], [0x1E57, 0x1E57], [0x1E59, 0x1E59], [0x1E5B, 0x1E5B], [0x1E5D, 0x1E5D], [0x1E5F, 0x1E5F], [0x1E61, 0x1E61], [0x1E63, 0x1E63], [0x1E65, 0x1E65], [0x1E67, 0x1E67], [0x1E69, 0x1E69], [0x1E6B, 0x1E6B], [0x1E6D, 0x1E6D], [0x1E6F, 0x1E6F], [0x1E71, 0x1E71], [0x1E73, 0x1E73], [0x1E75, 0x1E75], [0x1E77, 0x1E77], [0x1E79, 0x1E79], [0x1E7B, 0x1E7B], [0x1E7D, 0x1E7D], [0x1E7F, 0x1E7F], [0x1E81, 0x1E81], [0x1E83, 0x1E83], [0x1E85, 0x1E85], [0x1E87, 0x1E87], [0x1E89, 0x1E89], [0x1E8B, 0x1E8B], [0x1E8D, 0x1E8D], [0x1E8F, 0x1E8F], [0x1E91, 0x1E91], [0x1E93, 0x1E93], [0x1E95, 0x1E9D], [0x1E9F, 0x1E9F], [0x1EA1, 0x1EA1], [0x1EA3, 0x1EA3], [0x1EA5, 0x1EA5], [0x1EA7, 0x1EA7], [0x1EA9, 0x1EA9], [0x1EAB, 0x1EAB], [0x1EAD, 0x1EAD], [0x1EAF, 0x1EAF], [0x1EB1, 0x1EB1], [0x1EB3, 0x1EB3], [0x1EB5, 0x1EB5], [0x1EB7, 0x1EB7], [0x1EB9, 0x1EB9], [0x1EBB, 0x1EBB], [0x1EBD, 0x1EBD], [0x1EBF, 0x1EBF], [0x1EC1, 0x1EC1], [0x1EC3, 0x1EC3], [0x1EC5, 0x1EC5], [0x1EC7, 0x1EC7], [0x1EC9, 0x1EC9], [0x1ECB, 0x1ECB], [0x1ECD, 0x1ECD], [0x1ECF, 0x1ECF], [0x1ED1, 0x1ED1], [0x1ED3, 0x1ED3], [0x1ED5, 0x1ED5], [0x1ED7, 0x1ED7], [0x1ED9, 0x1ED9], [0x1EDB, 0x1EDB], [0x1EDD, 0x1EDD], [0x1EDF, 0x1EDF], [0x1EE1, 0x1EE1], [0x1EE3, 0x1EE3], [0x1EE5, 0x1EE5], [0x1EE7, 0x1EE7], [0x1EE9, 0x1EE9], [0x1EEB, 0x1EEB], [0x1EED, 0x1EED], [0x1EEF, 0x1EEF], [0x1EF1, 0x1EF1], [0x1EF3, 0x1EF3], [0x1EF5, 0x1EF5], [0x1EF7, 0x1EF7], [0x1EF9, 0x1EF9], [0x1EFB, 0x1EFB], [0x1EFD, 0x1EFD], [0x1EFF, 0x1F07], [0x1F10, 0x1F15], [0x1F20, 0x1F27], [0x1F30, 0x1F37], [0x1F40, 0x1F45], [0x1F50, 0x1F57], [0x1F60, 0x1F67], [0x1F70, 0x1F7D], [0x1F80, 0x1F87], [0x1F90, 0x1F97], [0x1FA0, 0x1FA7], [0x1FB0, 0x1FB4], [0x1FB6, 0x1FB7], [0x1FBE, 0x1FBE], [0x1FC2, 0x1FC4], [0x1FC6, 0x1FC7], [0x1FD0, 0x1FD3], [0x1FD6, 0x1FD7], [0x1FE0, 0x1FE7], [0x1FF2, 0x1FF4], [0x1FF6, 0x1FF7], [0x2071, 0x2071], [0x207F, 0x207F], [0x210A, 0x210A], [0x210E, 0x210F], [0x2113, 0x2113], [0x212F, 0x212F], [0x2134, 0x2134], [0x2139, 0x2139], [0x213C, 0x213D], [0x2146, 0x2149], [0x214E, 0x214E], [0x2184, 0x2184], [0x2C30, 0x2C5E], [0x2C61, 0x2C61], [0x2C65, 0x2C66], [0x2C68, 0x2C68], [0x2C6A, 0x2C6A], [0x2C6C, 0x2C6C], [0x2C71, 0x2C71], [0x2C73, 0x2C74], [0x2C76, 0x2C7C], [0x2C81, 0x2C81], [0x2C83, 0x2C83], [0x2C85, 0x2C85], [0x2C87, 0x2C87], [0x2C89, 0x2C89], [0x2C8B, 0x2C8B], [0x2C8D, 0x2C8D], [0x2C8F, 0x2C8F], [0x2C91, 0x2C91], [0x2C93, 0x2C93], [0x2C95, 0x2C95], [0x2C97, 0x2C97], [0x2C99, 0x2C99], [0x2C9B, 0x2C9B], [0x2C9D, 0x2C9D], [0x2C9F, 0x2C9F], [0x2CA1, 0x2CA1], [0x2CA3, 0x2CA3], [0x2CA5, 0x2CA5], [0x2CA7, 0x2CA7], [0x2CA9, 0x2CA9], [0x2CAB, 0x2CAB], [0x2CAD, 0x2CAD], [0x2CAF, 0x2CAF], [0x2CB1, 0x2CB1], [0x2CB3, 0x2CB3], [0x2CB5, 0x2CB5], [0x2CB7, 0x2CB7], [0x2CB9, 0x2CB9], [0x2CBB, 0x2CBB], [0x2CBD, 0x2CBD], [0x2CBF, 0x2CBF], [0x2CC1, 0x2CC1], [0x2CC3, 0x2CC3], [0x2CC5, 0x2CC5], [0x2CC7, 0x2CC7], [0x2CC9, 0x2CC9], [0x2CCB, 0x2CCB], [0x2CCD, 0x2CCD], [0x2CCF, 0x2CCF], [0x2CD1, 0x2CD1], [0x2CD3, 0x2CD3], [0x2CD5, 0x2CD5], [0x2CD7, 0x2CD7], [0x2CD9, 0x2CD9], [0x2CDB, 0x2CDB], [0x2CDD, 0x2CDD], [0x2CDF, 0x2CDF], [0x2CE1, 0x2CE1], [0x2CE3, 0x2CE4], [0x2D00, 0x2D25], [0xA641, 0xA641], [0xA643, 0xA643], [0xA645, 0xA645], [0xA647, 0xA647], [0xA649, 0xA649], [0xA64B, 0xA64B], [0xA64D, 0xA64D], [0xA64F, 0xA64F], [0xA651, 0xA651], [0xA653, 0xA653], [0xA655, 0xA655], [0xA657, 0xA657], [0xA659, 0xA659], [0xA65B, 0xA65B], [0xA65D, 0xA65D], [0xA65F, 0xA65F], [0xA663, 0xA663], [0xA665, 0xA665], [0xA667, 0xA667], [0xA669, 0xA669], [0xA66B, 0xA66B], [0xA66D, 0xA66D], [0xA681, 0xA681], [0xA683, 0xA683], [0xA685, 0xA685], [0xA687, 0xA687], [0xA689, 0xA689], [0xA68B, 0xA68B], [0xA68D, 0xA68D], [0xA68F, 0xA68F], [0xA691, 0xA691], [0xA693, 0xA693], [0xA695, 0xA695], [0xA697, 0xA697], [0xA723, 0xA723], [0xA725, 0xA725], [0xA727, 0xA727], [0xA729, 0xA729], [0xA72B, 0xA72B], [0xA72D, 0xA72D], [0xA72F, 0xA731], [0xA733, 0xA733], [0xA735, 0xA735], [0xA737, 0xA737], [0xA739, 0xA739], [0xA73B, 0xA73B], [0xA73D, 0xA73D], [0xA73F, 0xA73F], [0xA741, 0xA741], [0xA743, 0xA743], [0xA745, 0xA745], [0xA747, 0xA747], [0xA749, 0xA749], [0xA74B, 0xA74B], [0xA74D, 0xA74D], [0xA74F, 0xA74F], [0xA751, 0xA751], [0xA753, 0xA753], [0xA755, 0xA755], [0xA757, 0xA757], [0xA759, 0xA759], [0xA75B, 0xA75B], [0xA75D, 0xA75D], [0xA75F, 0xA75F], [0xA761, 0xA761], [0xA763, 0xA763], [0xA765, 0xA765], [0xA767, 0xA767], [0xA769, 0xA769], [0xA76B, 0xA76B], [0xA76D, 0xA76D], [0xA76F, 0xA76F], [0xA771, 0xA778], [0xA77A, 0xA77A], [0xA77C, 0xA77C], [0xA77F, 0xA77F], [0xA781, 0xA781], [0xA783, 0xA783], [0xA785, 0xA785], [0xA787, 0xA787], [0xA78C, 0xA78C], [0xFB00, 0xFB06], [0xFB13, 0xFB17], [0xFF41, 0xFF5A]]; -Lt = [[0x01C5, 0x01C5], [0x01C8, 0x01C8], [0x01CB, 0x01CB], [0x01F2, 0x01F2], [0x1F88, 0x1F8F], [0x1F98, 0x1F9F], [0x1FA8, 0x1FAF], [0x1FBC, 0x1FBC], [0x1FCC, 0x1FCC], [0x1FFC, 0x1FFC]]; -Lm = [[0x02B0, 0x02C1], [0x02C6, 0x02D1], [0x02E0, 0x02E4], [0x02EC, 0x02EC], [0x02EE, 0x02EE], [0x0374, 0x0374], [0x037A, 0x037A], [0x0559, 0x0559], [0x0640, 0x0640], [0x06E5, 0x06E6], [0x07F4, 0x07F5], [0x07FA, 0x07FA], [0x0971, 0x0971], [0x0E46, 0x0E46], [0x0EC6, 0x0EC6], [0x10FC, 0x10FC], [0x17D7, 0x17D7], [0x1843, 0x1843], [0x1C78, 0x1C7D], [0x1D2C, 0x1D61], [0x1D78, 0x1D78], [0x1D9B, 0x1DBF], [0x2090, 0x2094], [0x2C7D, 0x2C7D], [0x2D6F, 0x2D6F], [0x2E2F, 0x2E2F], [0x3005, 0x3005], [0x3031, 0x3035], [0x303B, 0x303B], [0x309D, 0x309E], [0x30FC, 0x30FE], [0xA015, 0xA015], [0xA60C, 0xA60C], [0xA67F, 0xA67F], [0xA717, 0xA71F], [0xA770, 0xA770], [0xA788, 0xA788], [0xFF70, 0xFF70], [0xFF9E, 0xFF9F]]; -Lo = [[0x01BB, 0x01BB], [0x01C0, 0x01C3], [0x0294, 0x0294], [0x05D0, 0x05EA], [0x05F0, 0x05F2], [0x0621, 0x063F], [0x0641, 0x064A], [0x066E, 0x066F], [0x0671, 0x06D3], [0x06D5, 0x06D5], [0x06EE, 0x06EF], [0x06FA, 0x06FC], [0x06FF, 0x06FF], [0x0710, 0x0710], [0x0712, 0x072F], [0x074D, 0x07A5], [0x07B1, 0x07B1], [0x07CA, 0x07EA], [0x0904, 0x0939], [0x093D, 0x093D], [0x0950, 0x0950], [0x0958, 0x0961], [0x0972, 0x0972], [0x097B, 0x097F], [0x0985, 0x098C], [0x098F, 0x0990], [0x0993, 0x09A8], [0x09AA, 0x09B0], [0x09B2, 0x09B2], [0x09B6, 0x09B9], [0x09BD, 0x09BD], [0x09CE, 0x09CE], [0x09DC, 0x09DD], [0x09DF, 0x09E1], [0x09F0, 0x09F1], [0x0A05, 0x0A0A], [0x0A0F, 0x0A10], [0x0A13, 0x0A28], [0x0A2A, 0x0A30], [0x0A32, 0x0A33], [0x0A35, 0x0A36], [0x0A38, 0x0A39], [0x0A59, 0x0A5C], [0x0A5E, 0x0A5E], [0x0A72, 0x0A74], [0x0A85, 0x0A8D], [0x0A8F, 0x0A91], [0x0A93, 0x0AA8], [0x0AAA, 0x0AB0], [0x0AB2, 0x0AB3], [0x0AB5, 0x0AB9], [0x0ABD, 0x0ABD], [0x0AD0, 0x0AD0], [0x0AE0, 0x0AE1], [0x0B05, 0x0B0C], [0x0B0F, 0x0B10], [0x0B13, 0x0B28], [0x0B2A, 0x0B30], [0x0B32, 0x0B33], [0x0B35, 0x0B39], [0x0B3D, 0x0B3D], [0x0B5C, 0x0B5D], [0x0B5F, 0x0B61], [0x0B71, 0x0B71], [0x0B83, 0x0B83], [0x0B85, 0x0B8A], [0x0B8E, 0x0B90], [0x0B92, 0x0B95], [0x0B99, 0x0B9A], [0x0B9C, 0x0B9C], [0x0B9E, 0x0B9F], [0x0BA3, 0x0BA4], [0x0BA8, 0x0BAA], [0x0BAE, 0x0BB9], [0x0BD0, 0x0BD0], [0x0C05, 0x0C0C], [0x0C0E, 0x0C10], [0x0C12, 0x0C28], [0x0C2A, 0x0C33], [0x0C35, 0x0C39], [0x0C3D, 0x0C3D], [0x0C58, 0x0C59], [0x0C60, 0x0C61], [0x0C85, 0x0C8C], [0x0C8E, 0x0C90], [0x0C92, 0x0CA8], [0x0CAA, 0x0CB3], [0x0CB5, 0x0CB9], [0x0CBD, 0x0CBD], [0x0CDE, 0x0CDE], [0x0CE0, 0x0CE1], [0x0D05, 0x0D0C], [0x0D0E, 0x0D10], [0x0D12, 0x0D28], [0x0D2A, 0x0D39], [0x0D3D, 0x0D3D], [0x0D60, 0x0D61], [0x0D7A, 0x0D7F], [0x0D85, 0x0D96], [0x0D9A, 0x0DB1], [0x0DB3, 0x0DBB], [0x0DBD, 0x0DBD], [0x0DC0, 0x0DC6], [0x0E01, 0x0E30], [0x0E32, 0x0E33], [0x0E40, 0x0E45], [0x0E81, 0x0E82], [0x0E84, 0x0E84], [0x0E87, 0x0E88], [0x0E8A, 0x0E8A], [0x0E8D, 0x0E8D], [0x0E94, 0x0E97], [0x0E99, 0x0E9F], [0x0EA1, 0x0EA3], [0x0EA5, 0x0EA5], [0x0EA7, 0x0EA7], [0x0EAA, 0x0EAB], [0x0EAD, 0x0EB0], [0x0EB2, 0x0EB3], [0x0EBD, 0x0EBD], [0x0EC0, 0x0EC4], [0x0EDC, 0x0EDD], [0x0F00, 0x0F00], [0x0F40, 0x0F47], [0x0F49, 0x0F6C], [0x0F88, 0x0F8B], [0x1000, 0x102A], [0x103F, 0x103F], [0x1050, 0x1055], [0x105A, 0x105D], [0x1061, 0x1061], [0x1065, 0x1066], [0x106E, 0x1070], [0x1075, 0x1081], [0x108E, 0x108E], [0x10D0, 0x10FA], [0x1100, 0x1159], [0x115F, 0x11A2], [0x11A8, 0x11F9], [0x1200, 0x1248], [0x124A, 0x124D], [0x1250, 0x1256], [0x1258, 0x1258], [0x125A, 0x125D], [0x1260, 0x1288], [0x128A, 0x128D], [0x1290, 0x12B0], [0x12B2, 0x12B5], [0x12B8, 0x12BE], [0x12C0, 0x12C0], [0x12C2, 0x12C5], [0x12C8, 0x12D6], [0x12D8, 0x1310], [0x1312, 0x1315], [0x1318, 0x135A], [0x1380, 0x138F], [0x13A0, 0x13F4], [0x1401, 0x166C], [0x166F, 0x1676], [0x1681, 0x169A], [0x16A0, 0x16EA], [0x1700, 0x170C], [0x170E, 0x1711], [0x1720, 0x1731], [0x1740, 0x1751], [0x1760, 0x176C], [0x176E, 0x1770], [0x1780, 0x17B3], [0x17DC, 0x17DC], [0x1820, 0x1842], [0x1844, 0x1877], [0x1880, 0x18A8], [0x18AA, 0x18AA], [0x1900, 0x191C], [0x1950, 0x196D], [0x1970, 0x1974], [0x1980, 0x19A9], [0x19C1, 0x19C7], [0x1A00, 0x1A16], [0x1B05, 0x1B33], [0x1B45, 0x1B4B], [0x1B83, 0x1BA0], [0x1BAE, 0x1BAF], [0x1C00, 0x1C23], [0x1C4D, 0x1C4F], [0x1C5A, 0x1C77], [0x2135, 0x2138], [0x2D30, 0x2D65], [0x2D80, 0x2D96], [0x2DA0, 0x2DA6], [0x2DA8, 0x2DAE], [0x2DB0, 0x2DB6], [0x2DB8, 0x2DBE], [0x2DC0, 0x2DC6], [0x2DC8, 0x2DCE], [0x2DD0, 0x2DD6], [0x2DD8, 0x2DDE], [0x3006, 0x3006], [0x303C, 0x303C], [0x3041, 0x3096], [0x309F, 0x309F], [0x30A1, 0x30FA], [0x30FF, 0x30FF], [0x3105, 0x312D], [0x3131, 0x318E], [0x31A0, 0x31B7], [0x31F0, 0x31FF], [0x3400, 0x4DB5], [0x4E00, 0x9FC3], [0xA000, 0xA014], [0xA016, 0xA48C], [0xA500, 0xA60B], [0xA610, 0xA61F], [0xA62A, 0xA62B], [0xA66E, 0xA66E], [0xA7FB, 0xA801], [0xA803, 0xA805], [0xA807, 0xA80A], [0xA80C, 0xA822], [0xA840, 0xA873], [0xA882, 0xA8B3], [0xA90A, 0xA925], [0xA930, 0xA946], [0xAA00, 0xAA28], [0xAA40, 0xAA42], [0xAA44, 0xAA4B], [0xAC00, 0xD7A3], [0xF900, 0xFA2D], [0xFA30, 0xFA6A], [0xFA70, 0xFAD9], [0xFB1D, 0xFB1D], [0xFB1F, 0xFB28], [0xFB2A, 0xFB36], [0xFB38, 0xFB3C], [0xFB3E, 0xFB3E], [0xFB40, 0xFB41], [0xFB43, 0xFB44], [0xFB46, 0xFBB1], [0xFBD3, 0xFD3D], [0xFD50, 0xFD8F], [0xFD92, 0xFDC7], [0xFDF0, 0xFDFB], [0xFE70, 0xFE74], [0xFE76, 0xFEFC], [0xFF66, 0xFF6F], [0xFF71, 0xFF9D], [0xFFA0, 0xFFBE], [0xFFC2, 0xFFC7], [0xFFCA, 0xFFCF], [0xFFD2, 0xFFD7], [0xFFDA, 0xFFDC]]; -Nl = [[0x16EE, 0x16F0], [0x2160, 0x2182], [0x2185, 0x2188], [0x3007, 0x3007], [0x3021, 0x3029], [0x3038, 0x303A]]; - -UnicodeLetterLu = []; -UnicodeLetterLl = []; -UnicodeLetterLt = []; -UnicodeLetterLm = []; -UnicodeLetterLo = []; -UnicodeLetterNl = []; - -for (indexI = 0; indexI < Lu.length; indexI++) { - for (indexJ = Lu[indexI][0]; indexJ <= Lu[indexI][1]; indexJ++) { - UnicodeLetterLu[indexJ] = true; - } -} -for (indexI = 0; indexI < Ll.length; indexI++) { - for (indexJ = Ll[indexI][0]; indexJ <= Ll[indexI][1]; indexJ++) { - UnicodeLetterLl[indexJ] = true; - } -} -for (indexI = 0; indexI < Lt.length; indexI++) { - for (indexJ = Lt[indexI][0]; indexJ <= Lt[indexI][1]; indexJ++) { - UnicodeLetterLt[indexJ] = true; - } -} -for (indexI = 0; indexI < Lm.length; indexI++) { - for (indexJ = Lm[indexI][0]; indexJ <= Lm[indexI][1]; indexJ++) { - UnicodeLetterLm[indexJ] = true; - } -} -for (indexI = 0; indexI < Lo.length; indexI++) { - for (indexJ = Lo[indexI][0]; indexJ <= Lo[indexI][1]; indexJ++) { - UnicodeLetterLo[indexJ] = true; - } -} -for (indexI = 0; indexI < Nl.length; indexI++) { - for (indexJ = Nl[indexI][0]; indexJ <= Nl[indexI][1]; indexJ++) { - UnicodeLetterNl[indexJ] = true; - } -} - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; -for (index = 0; index <= 65535; index++) { - if ((UnicodeLetterLu[index] === undefined) && (UnicodeLetterLl[index] === undefined) && (UnicodeLetterLt[index] === undefined) && (UnicodeLetterLm[index] === undefined) && (UnicodeLetterLo[index] === undefined) && (UnicodeLetterNl[index] === undefined) && (index !== 0x0024) && (index !== 0x005F)) { - try { - var identifier = String.fromCharCode(index); - eval("var " + identifier + "=1"); - if (errorCount === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; - } catch (e) { - } - count++; - } -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_510/S7.6_A5.2_T1.js b/tests/ES3/Unicode/Unicode_510/S7.6_A5.2_T1.js deleted file mode 100644 index e5047186b..000000000 --- a/tests/ES3/Unicode/Unicode_510/S7.6_A5.2_T1.js +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A5.2_T1; - * @section: 7.6, 6; - * @assertion: If a \UnicodeEscapeSequence sequence were replaced by its UnicodeEscapeSequence's CV, the result must still be a valid Identifier that has the exact same sequence of characters as the original Identifier; - * @description: The CV of UnicodeEscapeSequence is Lu. - * Complex test with eval; -*/ - -//CHECK -Lu = [[0x0041, 0x005A], [0x00C0, 0x00D6], [0x00D8, 0x00DE], [0x0100, 0x0100], [0x0102, 0x0102], [0x0104, 0x0104], [0x0106, 0x0106], [0x0108, 0x0108], [0x010A, 0x010A], [0x010C, 0x010C], [0x010E, 0x010E], [0x0110, 0x0110], [0x0112, 0x0112], [0x0114, 0x0114], [0x0116, 0x0116], [0x0118, 0x0118], [0x011A, 0x011A], [0x011C, 0x011C], [0x011E, 0x011E], [0x0120, 0x0120], [0x0122, 0x0122], [0x0124, 0x0124], [0x0126, 0x0126], [0x0128, 0x0128], [0x012A, 0x012A], [0x012C, 0x012C], [0x012E, 0x012E], [0x0130, 0x0130], [0x0132, 0x0132], [0x0134, 0x0134], [0x0136, 0x0136], [0x0139, 0x0139], [0x013B, 0x013B], [0x013D, 0x013D], [0x013F, 0x013F], [0x0141, 0x0141], [0x0143, 0x0143], [0x0145, 0x0145], [0x0147, 0x0147], [0x014A, 0x014A], [0x014C, 0x014C], [0x014E, 0x014E], [0x0150, 0x0150], [0x0152, 0x0152], [0x0154, 0x0154], [0x0156, 0x0156], [0x0158, 0x0158], [0x015A, 0x015A], [0x015C, 0x015C], [0x015E, 0x015E], [0x0160, 0x0160], [0x0162, 0x0162], [0x0164, 0x0164], [0x0166, 0x0166], [0x0168, 0x0168], [0x016A, 0x016A], [0x016C, 0x016C], [0x016E, 0x016E], [0x0170, 0x0170], [0x0172, 0x0172], [0x0174, 0x0174], [0x0176, 0x0176], [0x0178, 0x0179], [0x017B, 0x017B], [0x017D, 0x017D], [0x0181, 0x0182], [0x0184, 0x0184], [0x0186, 0x0187], [0x0189, 0x018B], [0x018E, 0x0191], [0x0193, 0x0194], [0x0196, 0x0198], [0x019C, 0x019D], [0x019F, 0x01A0], [0x01A2, 0x01A2], [0x01A4, 0x01A4], [0x01A6, 0x01A7], [0x01A9, 0x01A9], [0x01AC, 0x01AC], [0x01AE, 0x01AF], [0x01B1, 0x01B3], [0x01B5, 0x01B5], [0x01B7, 0x01B8], [0x01BC, 0x01BC], [0x01C4, 0x01C4], [0x01C7, 0x01C7], [0x01CA, 0x01CA], [0x01CD, 0x01CD], [0x01CF, 0x01CF], [0x01D1, 0x01D1], [0x01D3, 0x01D3], [0x01D5, 0x01D5], [0x01D7, 0x01D7], [0x01D9, 0x01D9], [0x01DB, 0x01DB], [0x01DE, 0x01DE], [0x01E0, 0x01E0], [0x01E2, 0x01E2], [0x01E4, 0x01E4], [0x01E6, 0x01E6], [0x01E8, 0x01E8], [0x01EA, 0x01EA], [0x01EC, 0x01EC], [0x01EE, 0x01EE], [0x01F1, 0x01F1], [0x01F4, 0x01F4], [0x01F6, 0x01F8], [0x01FA, 0x01FA], [0x01FC, 0x01FC], [0x01FE, 0x01FE], [0x0200, 0x0200], [0x0202, 0x0202], [0x0204, 0x0204], [0x0206, 0x0206], [0x0208, 0x0208], [0x020A, 0x020A], [0x020C, 0x020C], [0x020E, 0x020E], [0x0210, 0x0210], [0x0212, 0x0212], [0x0214, 0x0214], [0x0216, 0x0216], [0x0218, 0x0218], [0x021A, 0x021A], [0x021C, 0x021C], [0x021E, 0x021E], [0x0220, 0x0220], [0x0222, 0x0222], [0x0224, 0x0224], [0x0226, 0x0226], [0x0228, 0x0228], [0x022A, 0x022A], [0x022C, 0x022C], [0x022E, 0x022E], [0x0230, 0x0230], [0x0232, 0x0232], [0x023A, 0x023B], [0x023D, 0x023E], [0x0241, 0x0241], [0x0243, 0x0246], [0x0248, 0x0248], [0x024A, 0x024A], [0x024C, 0x024C], [0x024E, 0x024E], [0x0370, 0x0370], [0x0372, 0x0372], [0x0376, 0x0376], [0x0386, 0x0386], [0x0388, 0x038A], [0x038C, 0x038C], [0x038E, 0x038F], [0x0391, 0x03A1], [0x03A3, 0x03AB], [0x03CF, 0x03CF], [0x03D2, 0x03D4], [0x03D8, 0x03D8], [0x03DA, 0x03DA], [0x03DC, 0x03DC], [0x03DE, 0x03DE], [0x03E0, 0x03E0], [0x03E2, 0x03E2], [0x03E4, 0x03E4], [0x03E6, 0x03E6], [0x03E8, 0x03E8], [0x03EA, 0x03EA], [0x03EC, 0x03EC], [0x03EE, 0x03EE], [0x03F4, 0x03F4], [0x03F7, 0x03F7], [0x03F9, 0x03FA], [0x03FD, 0x042F], [0x0460, 0x0460], [0x0462, 0x0462], [0x0464, 0x0464], [0x0466, 0x0466], [0x0468, 0x0468], [0x046A, 0x046A], [0x046C, 0x046C], [0x046E, 0x046E], [0x0470, 0x0470], [0x0472, 0x0472], [0x0474, 0x0474], [0x0476, 0x0476], [0x0478, 0x0478], [0x047A, 0x047A], [0x047C, 0x047C], [0x047E, 0x047E], [0x0480, 0x0480], [0x048A, 0x048A], [0x048C, 0x048C], [0x048E, 0x048E], [0x0490, 0x0490], [0x0492, 0x0492], [0x0494, 0x0494], [0x0496, 0x0496], [0x0498, 0x0498], [0x049A, 0x049A], [0x049C, 0x049C], [0x049E, 0x049E], [0x04A0, 0x04A0], [0x04A2, 0x04A2], [0x04A4, 0x04A4], [0x04A6, 0x04A6], [0x04A8, 0x04A8], [0x04AA, 0x04AA], [0x04AC, 0x04AC], [0x04AE, 0x04AE], [0x04B0, 0x04B0], [0x04B2, 0x04B2], [0x04B4, 0x04B4], [0x04B6, 0x04B6], [0x04B8, 0x04B8], [0x04BA, 0x04BA], [0x04BC, 0x04BC], [0x04BE, 0x04BE], [0x04C0, 0x04C1], [0x04C3, 0x04C3], [0x04C5, 0x04C5], [0x04C7, 0x04C7], [0x04C9, 0x04C9], [0x04CB, 0x04CB], [0x04CD, 0x04CD], [0x04D0, 0x04D0], [0x04D2, 0x04D2], [0x04D4, 0x04D4], [0x04D6, 0x04D6], [0x04D8, 0x04D8], [0x04DA, 0x04DA], [0x04DC, 0x04DC], [0x04DE, 0x04DE], [0x04E0, 0x04E0], [0x04E2, 0x04E2], [0x04E4, 0x04E4], [0x04E6, 0x04E6], [0x04E8, 0x04E8], [0x04EA, 0x04EA], [0x04EC, 0x04EC], [0x04EE, 0x04EE], [0x04F0, 0x04F0], [0x04F2, 0x04F2], [0x04F4, 0x04F4], [0x04F6, 0x04F6], [0x04F8, 0x04F8], [0x04FA, 0x04FA], [0x04FC, 0x04FC], [0x04FE, 0x04FE], [0x0500, 0x0500], [0x0502, 0x0502], [0x0504, 0x0504], [0x0506, 0x0506], [0x0508, 0x0508], [0x050A, 0x050A], [0x050C, 0x050C], [0x050E, 0x050E], [0x0510, 0x0510], [0x0512, 0x0512], [0x0514, 0x0514], [0x0516, 0x0516], [0x0518, 0x0518], [0x051A, 0x051A], [0x051C, 0x051C], [0x051E, 0x051E], [0x0520, 0x0520], [0x0522, 0x0522], [0x0531, 0x0556], [0x10A0, 0x10C5], [0x1E00, 0x1E00], [0x1E02, 0x1E02], [0x1E04, 0x1E04], [0x1E06, 0x1E06], [0x1E08, 0x1E08], [0x1E0A, 0x1E0A], [0x1E0C, 0x1E0C], [0x1E0E, 0x1E0E], [0x1E10, 0x1E10], [0x1E12, 0x1E12], [0x1E14, 0x1E14], [0x1E16, 0x1E16], [0x1E18, 0x1E18], [0x1E1A, 0x1E1A], [0x1E1C, 0x1E1C], [0x1E1E, 0x1E1E], [0x1E20, 0x1E20], [0x1E22, 0x1E22], [0x1E24, 0x1E24], [0x1E26, 0x1E26], [0x1E28, 0x1E28], [0x1E2A, 0x1E2A], [0x1E2C, 0x1E2C], [0x1E2E, 0x1E2E], [0x1E30, 0x1E30], [0x1E32, 0x1E32], [0x1E34, 0x1E34], [0x1E36, 0x1E36], [0x1E38, 0x1E38], [0x1E3A, 0x1E3A], [0x1E3C, 0x1E3C], [0x1E3E, 0x1E3E], [0x1E40, 0x1E40], [0x1E42, 0x1E42], [0x1E44, 0x1E44], [0x1E46, 0x1E46], [0x1E48, 0x1E48], [0x1E4A, 0x1E4A], [0x1E4C, 0x1E4C], [0x1E4E, 0x1E4E], [0x1E50, 0x1E50], [0x1E52, 0x1E52], [0x1E54, 0x1E54], [0x1E56, 0x1E56], [0x1E58, 0x1E58], [0x1E5A, 0x1E5A], [0x1E5C, 0x1E5C], [0x1E5E, 0x1E5E], [0x1E60, 0x1E60], [0x1E62, 0x1E62], [0x1E64, 0x1E64], [0x1E66, 0x1E66], [0x1E68, 0x1E68], [0x1E6A, 0x1E6A], [0x1E6C, 0x1E6C], [0x1E6E, 0x1E6E], [0x1E70, 0x1E70], [0x1E72, 0x1E72], [0x1E74, 0x1E74], [0x1E76, 0x1E76], [0x1E78, 0x1E78], [0x1E7A, 0x1E7A], [0x1E7C, 0x1E7C], [0x1E7E, 0x1E7E], [0x1E80, 0x1E80], [0x1E82, 0x1E82], [0x1E84, 0x1E84], [0x1E86, 0x1E86], [0x1E88, 0x1E88], [0x1E8A, 0x1E8A], [0x1E8C, 0x1E8C], [0x1E8E, 0x1E8E], [0x1E90, 0x1E90], [0x1E92, 0x1E92], [0x1E94, 0x1E94], [0x1E9E, 0x1E9E], [0x1EA0, 0x1EA0], [0x1EA2, 0x1EA2], [0x1EA4, 0x1EA4], [0x1EA6, 0x1EA6], [0x1EA8, 0x1EA8], [0x1EAA, 0x1EAA], [0x1EAC, 0x1EAC], [0x1EAE, 0x1EAE], [0x1EB0, 0x1EB0], [0x1EB2, 0x1EB2], [0x1EB4, 0x1EB4], [0x1EB6, 0x1EB6], [0x1EB8, 0x1EB8], [0x1EBA, 0x1EBA], [0x1EBC, 0x1EBC], [0x1EBE, 0x1EBE], [0x1EC0, 0x1EC0], [0x1EC2, 0x1EC2], [0x1EC4, 0x1EC4], [0x1EC6, 0x1EC6], [0x1EC8, 0x1EC8], [0x1ECA, 0x1ECA], [0x1ECC, 0x1ECC], [0x1ECE, 0x1ECE], [0x1ED0, 0x1ED0], [0x1ED2, 0x1ED2], [0x1ED4, 0x1ED4], [0x1ED6, 0x1ED6], [0x1ED8, 0x1ED8], [0x1EDA, 0x1EDA], [0x1EDC, 0x1EDC], [0x1EDE, 0x1EDE], [0x1EE0, 0x1EE0], [0x1EE2, 0x1EE2], [0x1EE4, 0x1EE4], [0x1EE6, 0x1EE6], [0x1EE8, 0x1EE8], [0x1EEA, 0x1EEA], [0x1EEC, 0x1EEC], [0x1EEE, 0x1EEE], [0x1EF0, 0x1EF0], [0x1EF2, 0x1EF2], [0x1EF4, 0x1EF4], [0x1EF6, 0x1EF6], [0x1EF8, 0x1EF8], [0x1EFA, 0x1EFA], [0x1EFC, 0x1EFC], [0x1EFE, 0x1EFE], [0x1F08, 0x1F0F], [0x1F18, 0x1F1D], [0x1F28, 0x1F2F], [0x1F38, 0x1F3F], [0x1F48, 0x1F4D], [0x1F59, 0x1F59], [0x1F5B, 0x1F5B], [0x1F5D, 0x1F5D], [0x1F5F, 0x1F5F], [0x1F68, 0x1F6F], [0x1FB8, 0x1FBB], [0x1FC8, 0x1FCB], [0x1FD8, 0x1FDB], [0x1FE8, 0x1FEC], [0x1FF8, 0x1FFB], [0x2102, 0x2102], [0x2107, 0x2107], [0x210B, 0x210D], [0x2110, 0x2112], [0x2115, 0x2115], [0x2119, 0x211D], [0x2124, 0x2124], [0x2126, 0x2126], [0x2128, 0x2128], [0x212A, 0x212D], [0x2130, 0x2133], [0x213E, 0x213F], [0x2145, 0x2145], [0x2183, 0x2183], [0x2C00, 0x2C2E], [0x2C60, 0x2C60], [0x2C62, 0x2C64], [0x2C67, 0x2C67], [0x2C69, 0x2C69], [0x2C6B, 0x2C6B], [0x2C6D, 0x2C6F], [0x2C72, 0x2C72], [0x2C75, 0x2C75], [0x2C80, 0x2C80], [0x2C82, 0x2C82], [0x2C84, 0x2C84], [0x2C86, 0x2C86], [0x2C88, 0x2C88], [0x2C8A, 0x2C8A], [0x2C8C, 0x2C8C], [0x2C8E, 0x2C8E], [0x2C90, 0x2C90], [0x2C92, 0x2C92], [0x2C94, 0x2C94], [0x2C96, 0x2C96], [0x2C98, 0x2C98], [0x2C9A, 0x2C9A], [0x2C9C, 0x2C9C], [0x2C9E, 0x2C9E], [0x2CA0, 0x2CA0], [0x2CA2, 0x2CA2], [0x2CA4, 0x2CA4], [0x2CA6, 0x2CA6], [0x2CA8, 0x2CA8], [0x2CAA, 0x2CAA], [0x2CAC, 0x2CAC], [0x2CAE, 0x2CAE], [0x2CB0, 0x2CB0], [0x2CB2, 0x2CB2], [0x2CB4, 0x2CB4], [0x2CB6, 0x2CB6], [0x2CB8, 0x2CB8], [0x2CBA, 0x2CBA], [0x2CBC, 0x2CBC], [0x2CBE, 0x2CBE], [0x2CC0, 0x2CC0], [0x2CC2, 0x2CC2], [0x2CC4, 0x2CC4], [0x2CC6, 0x2CC6], [0x2CC8, 0x2CC8], [0x2CCA, 0x2CCA], [0x2CCC, 0x2CCC], [0x2CCE, 0x2CCE], [0x2CD0, 0x2CD0], [0x2CD2, 0x2CD2], [0x2CD4, 0x2CD4], [0x2CD6, 0x2CD6], [0x2CD8, 0x2CD8], [0x2CDA, 0x2CDA], [0x2CDC, 0x2CDC], [0x2CDE, 0x2CDE], [0x2CE0, 0x2CE0], [0x2CE2, 0x2CE2], [0xA640, 0xA640], [0xA642, 0xA642], [0xA644, 0xA644], [0xA646, 0xA646], [0xA648, 0xA648], [0xA64A, 0xA64A], [0xA64C, 0xA64C], [0xA64E, 0xA64E], [0xA650, 0xA650], [0xA652, 0xA652], [0xA654, 0xA654], [0xA656, 0xA656], [0xA658, 0xA658], [0xA65A, 0xA65A], [0xA65C, 0xA65C], [0xA65E, 0xA65E], [0xA662, 0xA662], [0xA664, 0xA664], [0xA666, 0xA666], [0xA668, 0xA668], [0xA66A, 0xA66A], [0xA66C, 0xA66C], [0xA680, 0xA680], [0xA682, 0xA682], [0xA684, 0xA684], [0xA686, 0xA686], [0xA688, 0xA688], [0xA68A, 0xA68A], [0xA68C, 0xA68C], [0xA68E, 0xA68E], [0xA690, 0xA690], [0xA692, 0xA692], [0xA694, 0xA694], [0xA696, 0xA696], [0xA722, 0xA722], [0xA724, 0xA724], [0xA726, 0xA726], [0xA728, 0xA728], [0xA72A, 0xA72A], [0xA72C, 0xA72C], [0xA72E, 0xA72E], [0xA732, 0xA732], [0xA734, 0xA734], [0xA736, 0xA736], [0xA738, 0xA738], [0xA73A, 0xA73A], [0xA73C, 0xA73C], [0xA73E, 0xA73E], [0xA740, 0xA740], [0xA742, 0xA742], [0xA744, 0xA744], [0xA746, 0xA746], [0xA748, 0xA748], [0xA74A, 0xA74A], [0xA74C, 0xA74C], [0xA74E, 0xA74E], [0xA750, 0xA750], [0xA752, 0xA752], [0xA754, 0xA754], [0xA756, 0xA756], [0xA758, 0xA758], [0xA75A, 0xA75A], [0xA75C, 0xA75C], [0xA75E, 0xA75E], [0xA760, 0xA760], [0xA762, 0xA762], [0xA764, 0xA764], [0xA766, 0xA766], [0xA768, 0xA768], [0xA76A, 0xA76A], [0xA76C, 0xA76C], [0xA76E, 0xA76E], [0xA779, 0xA779], [0xA77B, 0xA77B], [0xA77D, 0xA77E], [0xA780, 0xA780], [0xA782, 0xA782], [0xA784, 0xA784], [0xA786, 0xA786], [0xA78B, 0xA78B], [0xFF21, 0xFF3A]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Lu.length; indexI++) { - for (indexJ = Lu[indexI][0]; indexJ <= Lu[indexI][1]; indexJ++) { - try { - var hex = decimalToHexString(indexJ); - var identifier1 = String.fromCharCode(indexJ); - var identifier2 = "\\u" + hex; - eval(identifier2 + " = 1"); - if (eval(identifier1 + " === " + identifier2) !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_510/S7.6_A5.2_T10.js b/tests/ES3/Unicode/Unicode_510/S7.6_A5.2_T10.js deleted file mode 100644 index 596e2b172..000000000 --- a/tests/ES3/Unicode/Unicode_510/S7.6_A5.2_T10.js +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A5.2_T10; - * @section: 7.6, 6; - * @assertion: If a \UnicodeEscapeSequence sequence were replaced by its UnicodeEscapeSequence's CV, the result must still be a valid Identifier that has the exact same sequence of characters as the original Identifier; - * @description: The CV of UnicodeEscapeSequence is Pc. - * Complex test with eval; -*/ - -//CHECK -Pc = [[0x005F, 0x005F], [0x203F, 0x2040], [0x2054, 0x2054], [0xFE33, 0xFE34], [0xFE4D, 0xFE4F], [0xFF3F, 0xFF3F]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Pc.length; indexI++) { - for (indexJ = Pc[indexI][0]; indexJ <= Pc[indexI][1]; indexJ++) { - try { - var hex = decimalToHexString(indexJ); - var identifier1 = "$" + String.fromCharCode(indexJ); - var identifier2 = "$\\u" + hex; - eval(identifier2 + " = 1"); - if (eval(identifier1 + " === " + identifier2) !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_510/S7.6_A5.2_T2.js b/tests/ES3/Unicode/Unicode_510/S7.6_A5.2_T2.js deleted file mode 100644 index ac92473f2..000000000 --- a/tests/ES3/Unicode/Unicode_510/S7.6_A5.2_T2.js +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A5.2_T2; - * @section: 7.6, 6; - * @assertion: If a \UnicodeEscapeSequence sequence were replaced by its UnicodeEscapeSequence's CV, the result must still be a valid Identifier that has the exact same sequence of characters as the original Identifier; - * @description: The CV of UnicodeEscapeSequence is Ll. - * Complex test with eval; -*/ - -//CHECK -Ll = [[0x0061, 0x007A], [0x00AA, 0x00AA], [0x00B5, 0x00B5], [0x00BA, 0x00BA], [0x00DF, 0x00F6], [0x00F8, 0x00FF], [0x0101, 0x0101], [0x0103, 0x0103], [0x0105, 0x0105], [0x0107, 0x0107], [0x0109, 0x0109], [0x010B, 0x010B], [0x010D, 0x010D], [0x010F, 0x010F], [0x0111, 0x0111], [0x0113, 0x0113], [0x0115, 0x0115], [0x0117, 0x0117], [0x0119, 0x0119], [0x011B, 0x011B], [0x011D, 0x011D], [0x011F, 0x011F], [0x0121, 0x0121], [0x0123, 0x0123], [0x0125, 0x0125], [0x0127, 0x0127], [0x0129, 0x0129], [0x012B, 0x012B], [0x012D, 0x012D], [0x012F, 0x012F], [0x0131, 0x0131], [0x0133, 0x0133], [0x0135, 0x0135], [0x0137, 0x0138], [0x013A, 0x013A], [0x013C, 0x013C], [0x013E, 0x013E], [0x0140, 0x0140], [0x0142, 0x0142], [0x0144, 0x0144], [0x0146, 0x0146], [0x0148, 0x0149], [0x014B, 0x014B], [0x014D, 0x014D], [0x014F, 0x014F], [0x0151, 0x0151], [0x0153, 0x0153], [0x0155, 0x0155], [0x0157, 0x0157], [0x0159, 0x0159], [0x015B, 0x015B], [0x015D, 0x015D], [0x015F, 0x015F], [0x0161, 0x0161], [0x0163, 0x0163], [0x0165, 0x0165], [0x0167, 0x0167], [0x0169, 0x0169], [0x016B, 0x016B], [0x016D, 0x016D], [0x016F, 0x016F], [0x0171, 0x0171], [0x0173, 0x0173], [0x0175, 0x0175], [0x0177, 0x0177], [0x017A, 0x017A], [0x017C, 0x017C], [0x017E, 0x0180], [0x0183, 0x0183], [0x0185, 0x0185], [0x0188, 0x0188], [0x018C, 0x018D], [0x0192, 0x0192], [0x0195, 0x0195], [0x0199, 0x019B], [0x019E, 0x019E], [0x01A1, 0x01A1], [0x01A3, 0x01A3], [0x01A5, 0x01A5], [0x01A8, 0x01A8], [0x01AA, 0x01AB], [0x01AD, 0x01AD], [0x01B0, 0x01B0], [0x01B4, 0x01B4], [0x01B6, 0x01B6], [0x01B9, 0x01BA], [0x01BD, 0x01BF], [0x01C6, 0x01C6], [0x01C9, 0x01C9], [0x01CC, 0x01CC], [0x01CE, 0x01CE], [0x01D0, 0x01D0], [0x01D2, 0x01D2], [0x01D4, 0x01D4], [0x01D6, 0x01D6], [0x01D8, 0x01D8], [0x01DA, 0x01DA], [0x01DC, 0x01DD], [0x01DF, 0x01DF], [0x01E1, 0x01E1], [0x01E3, 0x01E3], [0x01E5, 0x01E5], [0x01E7, 0x01E7], [0x01E9, 0x01E9], [0x01EB, 0x01EB], [0x01ED, 0x01ED], [0x01EF, 0x01F0], [0x01F3, 0x01F3], [0x01F5, 0x01F5], [0x01F9, 0x01F9], [0x01FB, 0x01FB], [0x01FD, 0x01FD], [0x01FF, 0x01FF], [0x0201, 0x0201], [0x0203, 0x0203], [0x0205, 0x0205], [0x0207, 0x0207], [0x0209, 0x0209], [0x020B, 0x020B], [0x020D, 0x020D], [0x020F, 0x020F], [0x0211, 0x0211], [0x0213, 0x0213], [0x0215, 0x0215], [0x0217, 0x0217], [0x0219, 0x0219], [0x021B, 0x021B], [0x021D, 0x021D], [0x021F, 0x021F], [0x0221, 0x0221], [0x0223, 0x0223], [0x0225, 0x0225], [0x0227, 0x0227], [0x0229, 0x0229], [0x022B, 0x022B], [0x022D, 0x022D], [0x022F, 0x022F], [0x0231, 0x0231], [0x0233, 0x0239], [0x023C, 0x023C], [0x023F, 0x0240], [0x0242, 0x0242], [0x0247, 0x0247], [0x0249, 0x0249], [0x024B, 0x024B], [0x024D, 0x024D], [0x024F, 0x0293], [0x0295, 0x02AF], [0x0371, 0x0371], [0x0373, 0x0373], [0x0377, 0x0377], [0x037B, 0x037D], [0x0390, 0x0390], [0x03AC, 0x03CE], [0x03D0, 0x03D1], [0x03D5, 0x03D7], [0x03D9, 0x03D9], [0x03DB, 0x03DB], [0x03DD, 0x03DD], [0x03DF, 0x03DF], [0x03E1, 0x03E1], [0x03E3, 0x03E3], [0x03E5, 0x03E5], [0x03E7, 0x03E7], [0x03E9, 0x03E9], [0x03EB, 0x03EB], [0x03ED, 0x03ED], [0x03EF, 0x03F3], [0x03F5, 0x03F5], [0x03F8, 0x03F8], [0x03FB, 0x03FC], [0x0430, 0x045F], [0x0461, 0x0461], [0x0463, 0x0463], [0x0465, 0x0465], [0x0467, 0x0467], [0x0469, 0x0469], [0x046B, 0x046B], [0x046D, 0x046D], [0x046F, 0x046F], [0x0471, 0x0471], [0x0473, 0x0473], [0x0475, 0x0475], [0x0477, 0x0477], [0x0479, 0x0479], [0x047B, 0x047B], [0x047D, 0x047D], [0x047F, 0x047F], [0x0481, 0x0481], [0x048B, 0x048B], [0x048D, 0x048D], [0x048F, 0x048F], [0x0491, 0x0491], [0x0493, 0x0493], [0x0495, 0x0495], [0x0497, 0x0497], [0x0499, 0x0499], [0x049B, 0x049B], [0x049D, 0x049D], [0x049F, 0x049F], [0x04A1, 0x04A1], [0x04A3, 0x04A3], [0x04A5, 0x04A5], [0x04A7, 0x04A7], [0x04A9, 0x04A9], [0x04AB, 0x04AB], [0x04AD, 0x04AD], [0x04AF, 0x04AF], [0x04B1, 0x04B1], [0x04B3, 0x04B3], [0x04B5, 0x04B5], [0x04B7, 0x04B7], [0x04B9, 0x04B9], [0x04BB, 0x04BB], [0x04BD, 0x04BD], [0x04BF, 0x04BF], [0x04C2, 0x04C2], [0x04C4, 0x04C4], [0x04C6, 0x04C6], [0x04C8, 0x04C8], [0x04CA, 0x04CA], [0x04CC, 0x04CC], [0x04CE, 0x04CF], [0x04D1, 0x04D1], [0x04D3, 0x04D3], [0x04D5, 0x04D5], [0x04D7, 0x04D7], [0x04D9, 0x04D9], [0x04DB, 0x04DB], [0x04DD, 0x04DD], [0x04DF, 0x04DF], [0x04E1, 0x04E1], [0x04E3, 0x04E3], [0x04E5, 0x04E5], [0x04E7, 0x04E7], [0x04E9, 0x04E9], [0x04EB, 0x04EB], [0x04ED, 0x04ED], [0x04EF, 0x04EF], [0x04F1, 0x04F1], [0x04F3, 0x04F3], [0x04F5, 0x04F5], [0x04F7, 0x04F7], [0x04F9, 0x04F9], [0x04FB, 0x04FB], [0x04FD, 0x04FD], [0x04FF, 0x04FF], [0x0501, 0x0501], [0x0503, 0x0503], [0x0505, 0x0505], [0x0507, 0x0507], [0x0509, 0x0509], [0x050B, 0x050B], [0x050D, 0x050D], [0x050F, 0x050F], [0x0511, 0x0511], [0x0513, 0x0513], [0x0515, 0x0515], [0x0517, 0x0517], [0x0519, 0x0519], [0x051B, 0x051B], [0x051D, 0x051D], [0x051F, 0x051F], [0x0521, 0x0521], [0x0523, 0x0523], [0x0561, 0x0587], [0x1D00, 0x1D2B], [0x1D62, 0x1D77], [0x1D79, 0x1D9A], [0x1E01, 0x1E01], [0x1E03, 0x1E03], [0x1E05, 0x1E05], [0x1E07, 0x1E07], [0x1E09, 0x1E09], [0x1E0B, 0x1E0B], [0x1E0D, 0x1E0D], [0x1E0F, 0x1E0F], [0x1E11, 0x1E11], [0x1E13, 0x1E13], [0x1E15, 0x1E15], [0x1E17, 0x1E17], [0x1E19, 0x1E19], [0x1E1B, 0x1E1B], [0x1E1D, 0x1E1D], [0x1E1F, 0x1E1F], [0x1E21, 0x1E21], [0x1E23, 0x1E23], [0x1E25, 0x1E25], [0x1E27, 0x1E27], [0x1E29, 0x1E29], [0x1E2B, 0x1E2B], [0x1E2D, 0x1E2D], [0x1E2F, 0x1E2F], [0x1E31, 0x1E31], [0x1E33, 0x1E33], [0x1E35, 0x1E35], [0x1E37, 0x1E37], [0x1E39, 0x1E39], [0x1E3B, 0x1E3B], [0x1E3D, 0x1E3D], [0x1E3F, 0x1E3F], [0x1E41, 0x1E41], [0x1E43, 0x1E43], [0x1E45, 0x1E45], [0x1E47, 0x1E47], [0x1E49, 0x1E49], [0x1E4B, 0x1E4B], [0x1E4D, 0x1E4D], [0x1E4F, 0x1E4F], [0x1E51, 0x1E51], [0x1E53, 0x1E53], [0x1E55, 0x1E55], [0x1E57, 0x1E57], [0x1E59, 0x1E59], [0x1E5B, 0x1E5B], [0x1E5D, 0x1E5D], [0x1E5F, 0x1E5F], [0x1E61, 0x1E61], [0x1E63, 0x1E63], [0x1E65, 0x1E65], [0x1E67, 0x1E67], [0x1E69, 0x1E69], [0x1E6B, 0x1E6B], [0x1E6D, 0x1E6D], [0x1E6F, 0x1E6F], [0x1E71, 0x1E71], [0x1E73, 0x1E73], [0x1E75, 0x1E75], [0x1E77, 0x1E77], [0x1E79, 0x1E79], [0x1E7B, 0x1E7B], [0x1E7D, 0x1E7D], [0x1E7F, 0x1E7F], [0x1E81, 0x1E81], [0x1E83, 0x1E83], [0x1E85, 0x1E85], [0x1E87, 0x1E87], [0x1E89, 0x1E89], [0x1E8B, 0x1E8B], [0x1E8D, 0x1E8D], [0x1E8F, 0x1E8F], [0x1E91, 0x1E91], [0x1E93, 0x1E93], [0x1E95, 0x1E9D], [0x1E9F, 0x1E9F], [0x1EA1, 0x1EA1], [0x1EA3, 0x1EA3], [0x1EA5, 0x1EA5], [0x1EA7, 0x1EA7], [0x1EA9, 0x1EA9], [0x1EAB, 0x1EAB], [0x1EAD, 0x1EAD], [0x1EAF, 0x1EAF], [0x1EB1, 0x1EB1], [0x1EB3, 0x1EB3], [0x1EB5, 0x1EB5], [0x1EB7, 0x1EB7], [0x1EB9, 0x1EB9], [0x1EBB, 0x1EBB], [0x1EBD, 0x1EBD], [0x1EBF, 0x1EBF], [0x1EC1, 0x1EC1], [0x1EC3, 0x1EC3], [0x1EC5, 0x1EC5], [0x1EC7, 0x1EC7], [0x1EC9, 0x1EC9], [0x1ECB, 0x1ECB], [0x1ECD, 0x1ECD], [0x1ECF, 0x1ECF], [0x1ED1, 0x1ED1], [0x1ED3, 0x1ED3], [0x1ED5, 0x1ED5], [0x1ED7, 0x1ED7], [0x1ED9, 0x1ED9], [0x1EDB, 0x1EDB], [0x1EDD, 0x1EDD], [0x1EDF, 0x1EDF], [0x1EE1, 0x1EE1], [0x1EE3, 0x1EE3], [0x1EE5, 0x1EE5], [0x1EE7, 0x1EE7], [0x1EE9, 0x1EE9], [0x1EEB, 0x1EEB], [0x1EED, 0x1EED], [0x1EEF, 0x1EEF], [0x1EF1, 0x1EF1], [0x1EF3, 0x1EF3], [0x1EF5, 0x1EF5], [0x1EF7, 0x1EF7], [0x1EF9, 0x1EF9], [0x1EFB, 0x1EFB], [0x1EFD, 0x1EFD], [0x1EFF, 0x1F07], [0x1F10, 0x1F15], [0x1F20, 0x1F27], [0x1F30, 0x1F37], [0x1F40, 0x1F45], [0x1F50, 0x1F57], [0x1F60, 0x1F67], [0x1F70, 0x1F7D], [0x1F80, 0x1F87], [0x1F90, 0x1F97], [0x1FA0, 0x1FA7], [0x1FB0, 0x1FB4], [0x1FB6, 0x1FB7], [0x1FBE, 0x1FBE], [0x1FC2, 0x1FC4], [0x1FC6, 0x1FC7], [0x1FD0, 0x1FD3], [0x1FD6, 0x1FD7], [0x1FE0, 0x1FE7], [0x1FF2, 0x1FF4], [0x1FF6, 0x1FF7], [0x2071, 0x2071], [0x207F, 0x207F], [0x210A, 0x210A], [0x210E, 0x210F], [0x2113, 0x2113], [0x212F, 0x212F], [0x2134, 0x2134], [0x2139, 0x2139], [0x213C, 0x213D], [0x2146, 0x2149], [0x214E, 0x214E], [0x2184, 0x2184], [0x2C30, 0x2C5E], [0x2C61, 0x2C61], [0x2C65, 0x2C66], [0x2C68, 0x2C68], [0x2C6A, 0x2C6A], [0x2C6C, 0x2C6C], [0x2C71, 0x2C71], [0x2C73, 0x2C74], [0x2C76, 0x2C7C], [0x2C81, 0x2C81], [0x2C83, 0x2C83], [0x2C85, 0x2C85], [0x2C87, 0x2C87], [0x2C89, 0x2C89], [0x2C8B, 0x2C8B], [0x2C8D, 0x2C8D], [0x2C8F, 0x2C8F], [0x2C91, 0x2C91], [0x2C93, 0x2C93], [0x2C95, 0x2C95], [0x2C97, 0x2C97], [0x2C99, 0x2C99], [0x2C9B, 0x2C9B], [0x2C9D, 0x2C9D], [0x2C9F, 0x2C9F], [0x2CA1, 0x2CA1], [0x2CA3, 0x2CA3], [0x2CA5, 0x2CA5], [0x2CA7, 0x2CA7], [0x2CA9, 0x2CA9], [0x2CAB, 0x2CAB], [0x2CAD, 0x2CAD], [0x2CAF, 0x2CAF], [0x2CB1, 0x2CB1], [0x2CB3, 0x2CB3], [0x2CB5, 0x2CB5], [0x2CB7, 0x2CB7], [0x2CB9, 0x2CB9], [0x2CBB, 0x2CBB], [0x2CBD, 0x2CBD], [0x2CBF, 0x2CBF], [0x2CC1, 0x2CC1], [0x2CC3, 0x2CC3], [0x2CC5, 0x2CC5], [0x2CC7, 0x2CC7], [0x2CC9, 0x2CC9], [0x2CCB, 0x2CCB], [0x2CCD, 0x2CCD], [0x2CCF, 0x2CCF], [0x2CD1, 0x2CD1], [0x2CD3, 0x2CD3], [0x2CD5, 0x2CD5], [0x2CD7, 0x2CD7], [0x2CD9, 0x2CD9], [0x2CDB, 0x2CDB], [0x2CDD, 0x2CDD], [0x2CDF, 0x2CDF], [0x2CE1, 0x2CE1], [0x2CE3, 0x2CE4], [0x2D00, 0x2D25], [0xA641, 0xA641], [0xA643, 0xA643], [0xA645, 0xA645], [0xA647, 0xA647], [0xA649, 0xA649], [0xA64B, 0xA64B], [0xA64D, 0xA64D], [0xA64F, 0xA64F], [0xA651, 0xA651], [0xA653, 0xA653], [0xA655, 0xA655], [0xA657, 0xA657], [0xA659, 0xA659], [0xA65B, 0xA65B], [0xA65D, 0xA65D], [0xA65F, 0xA65F], [0xA663, 0xA663], [0xA665, 0xA665], [0xA667, 0xA667], [0xA669, 0xA669], [0xA66B, 0xA66B], [0xA66D, 0xA66D], [0xA681, 0xA681], [0xA683, 0xA683], [0xA685, 0xA685], [0xA687, 0xA687], [0xA689, 0xA689], [0xA68B, 0xA68B], [0xA68D, 0xA68D], [0xA68F, 0xA68F], [0xA691, 0xA691], [0xA693, 0xA693], [0xA695, 0xA695], [0xA697, 0xA697], [0xA723, 0xA723], [0xA725, 0xA725], [0xA727, 0xA727], [0xA729, 0xA729], [0xA72B, 0xA72B], [0xA72D, 0xA72D], [0xA72F, 0xA731], [0xA733, 0xA733], [0xA735, 0xA735], [0xA737, 0xA737], [0xA739, 0xA739], [0xA73B, 0xA73B], [0xA73D, 0xA73D], [0xA73F, 0xA73F], [0xA741, 0xA741], [0xA743, 0xA743], [0xA745, 0xA745], [0xA747, 0xA747], [0xA749, 0xA749], [0xA74B, 0xA74B], [0xA74D, 0xA74D], [0xA74F, 0xA74F], [0xA751, 0xA751], [0xA753, 0xA753], [0xA755, 0xA755], [0xA757, 0xA757], [0xA759, 0xA759], [0xA75B, 0xA75B], [0xA75D, 0xA75D], [0xA75F, 0xA75F], [0xA761, 0xA761], [0xA763, 0xA763], [0xA765, 0xA765], [0xA767, 0xA767], [0xA769, 0xA769], [0xA76B, 0xA76B], [0xA76D, 0xA76D], [0xA76F, 0xA76F], [0xA771, 0xA778], [0xA77A, 0xA77A], [0xA77C, 0xA77C], [0xA77F, 0xA77F], [0xA781, 0xA781], [0xA783, 0xA783], [0xA785, 0xA785], [0xA787, 0xA787], [0xA78C, 0xA78C], [0xFB00, 0xFB06], [0xFB13, 0xFB17], [0xFF41, 0xFF5A]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Ll.length; indexI++) { - for (indexJ = Ll[indexI][0]; indexJ <= Ll[indexI][1]; indexJ++) { - try { - var hex = decimalToHexString(indexJ); - var identifier1 = String.fromCharCode(indexJ); - var identifier2 = "\\u" + hex; - eval(identifier2 + " = 1"); - if (eval(identifier1 + " === " + identifier2) !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_510/S7.6_A5.2_T3.js b/tests/ES3/Unicode/Unicode_510/S7.6_A5.2_T3.js deleted file mode 100644 index e880bd673..000000000 --- a/tests/ES3/Unicode/Unicode_510/S7.6_A5.2_T3.js +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A5.2_T3; - * @section: 7.6, 6; - * @assertion: If a \UnicodeEscapeSequence sequence were replaced by its UnicodeEscapeSequence's CV, the result must still be a valid Identifier that has the exact same sequence of characters as the original Identifier; - * @description: The CV of UnicodeEscapeSequence is Lt. - * Complex test with eval; -*/ - -//CHECK -Lt = [[0x01C5, 0x01C5], [0x01C8, 0x01C8], [0x01CB, 0x01CB], [0x01F2, 0x01F2], [0x1F88, 0x1F8F], [0x1F98, 0x1F9F], [0x1FA8, 0x1FAF], [0x1FBC, 0x1FBC], [0x1FCC, 0x1FCC], [0x1FFC, 0x1FFC]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Lt.length; indexI++) { - for (indexJ = Lt[indexI][0]; indexJ <= Lt[indexI][1]; indexJ++) { - try { - var hex = decimalToHexString(indexJ); - var identifier1 = String.fromCharCode(indexJ); - var identifier2 = "\\u" + hex; - eval(identifier2 + " = 1"); - if (eval(identifier1 + " === " + identifier2) !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_510/S7.6_A5.2_T4.js b/tests/ES3/Unicode/Unicode_510/S7.6_A5.2_T4.js deleted file mode 100644 index 44883907a..000000000 --- a/tests/ES3/Unicode/Unicode_510/S7.6_A5.2_T4.js +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A5.2_T4; - * @section: 7.6, 6; - * @assertion: If a \UnicodeEscapeSequence sequence were replaced by its UnicodeEscapeSequence's CV, the result must still be a valid Identifier that has the exact same sequence of characters as the original Identifier; - * @description: The CV of UnicodeEscapeSequence is Lm. - * Complex test with eval; -*/ - -//CHECK -Lm = [[0x02B0, 0x02C1], [0x02C6, 0x02D1], [0x02E0, 0x02E4], [0x02EC, 0x02EC], [0x02EE, 0x02EE], [0x0374, 0x0374], [0x037A, 0x037A], [0x0559, 0x0559], [0x0640, 0x0640], [0x06E5, 0x06E6], [0x07F4, 0x07F5], [0x07FA, 0x07FA], [0x0971, 0x0971], [0x0E46, 0x0E46], [0x0EC6, 0x0EC6], [0x10FC, 0x10FC], [0x17D7, 0x17D7], [0x1843, 0x1843], [0x1C78, 0x1C7D], [0x1D2C, 0x1D61], [0x1D78, 0x1D78], [0x1D9B, 0x1DBF], [0x2090, 0x2094], [0x2C7D, 0x2C7D], [0x2D6F, 0x2D6F], [0x2E2F, 0x2E2F], [0x3005, 0x3005], [0x3031, 0x3035], [0x303B, 0x303B], [0x309D, 0x309E], [0x30FC, 0x30FE], [0xA015, 0xA015], [0xA60C, 0xA60C], [0xA67F, 0xA67F], [0xA717, 0xA71F], [0xA770, 0xA770], [0xA788, 0xA788], [0xFF70, 0xFF70], [0xFF9E, 0xFF9F]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Lm.length; indexI++) { - for (indexJ = Lm[indexI][0]; indexJ <= Lm[indexI][1]; indexJ++) { - try { - var hex = decimalToHexString(indexJ); - var identifier1 = String.fromCharCode(indexJ); - var identifier2 = "\\u" + hex; - eval(identifier2 + " = 1"); - if (eval(identifier1 + " === " + identifier2) !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_510/S7.6_A5.2_T5.js b/tests/ES3/Unicode/Unicode_510/S7.6_A5.2_T5.js deleted file mode 100644 index d7cfda0cc..000000000 --- a/tests/ES3/Unicode/Unicode_510/S7.6_A5.2_T5.js +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A5.2_T5; - * @section: 7.6, 6; - * @assertion: If a \UnicodeEscapeSequence sequence were replaced by its UnicodeEscapeSequence's CV, the result must still be a valid Identifier that has the exact same sequence of characters as the original Identifier; - * @description: The CV of UnicodeEscapeSequence is Lo. - * Complex test with eval; -*/ - -//CHECK -Lo = [[0x01BB, 0x01BB], [0x01C0, 0x01C3], [0x0294, 0x0294], [0x05D0, 0x05EA], [0x05F0, 0x05F2], [0x0621, 0x063F], [0x0641, 0x064A], [0x066E, 0x066F], [0x0671, 0x06D3], [0x06D5, 0x06D5], [0x06EE, 0x06EF], [0x06FA, 0x06FC], [0x06FF, 0x06FF], [0x0710, 0x0710], [0x0712, 0x072F], [0x074D, 0x07A5], [0x07B1, 0x07B1], [0x07CA, 0x07EA], [0x0904, 0x0939], [0x093D, 0x093D], [0x0950, 0x0950], [0x0958, 0x0961], [0x0972, 0x0972], [0x097B, 0x097F], [0x0985, 0x098C], [0x098F, 0x0990], [0x0993, 0x09A8], [0x09AA, 0x09B0], [0x09B2, 0x09B2], [0x09B6, 0x09B9], [0x09BD, 0x09BD], [0x09CE, 0x09CE], [0x09DC, 0x09DD], [0x09DF, 0x09E1], [0x09F0, 0x09F1], [0x0A05, 0x0A0A], [0x0A0F, 0x0A10], [0x0A13, 0x0A28], [0x0A2A, 0x0A30], [0x0A32, 0x0A33], [0x0A35, 0x0A36], [0x0A38, 0x0A39], [0x0A59, 0x0A5C], [0x0A5E, 0x0A5E], [0x0A72, 0x0A74], [0x0A85, 0x0A8D], [0x0A8F, 0x0A91], [0x0A93, 0x0AA8], [0x0AAA, 0x0AB0], [0x0AB2, 0x0AB3], [0x0AB5, 0x0AB9], [0x0ABD, 0x0ABD], [0x0AD0, 0x0AD0], [0x0AE0, 0x0AE1], [0x0B05, 0x0B0C], [0x0B0F, 0x0B10], [0x0B13, 0x0B28], [0x0B2A, 0x0B30], [0x0B32, 0x0B33], [0x0B35, 0x0B39], [0x0B3D, 0x0B3D], [0x0B5C, 0x0B5D], [0x0B5F, 0x0B61], [0x0B71, 0x0B71], [0x0B83, 0x0B83], [0x0B85, 0x0B8A], [0x0B8E, 0x0B90], [0x0B92, 0x0B95], [0x0B99, 0x0B9A], [0x0B9C, 0x0B9C], [0x0B9E, 0x0B9F], [0x0BA3, 0x0BA4], [0x0BA8, 0x0BAA], [0x0BAE, 0x0BB9], [0x0BD0, 0x0BD0], [0x0C05, 0x0C0C], [0x0C0E, 0x0C10], [0x0C12, 0x0C28], [0x0C2A, 0x0C33], [0x0C35, 0x0C39], [0x0C3D, 0x0C3D], [0x0C58, 0x0C59], [0x0C60, 0x0C61], [0x0C85, 0x0C8C], [0x0C8E, 0x0C90], [0x0C92, 0x0CA8], [0x0CAA, 0x0CB3], [0x0CB5, 0x0CB9], [0x0CBD, 0x0CBD], [0x0CDE, 0x0CDE], [0x0CE0, 0x0CE1], [0x0D05, 0x0D0C], [0x0D0E, 0x0D10], [0x0D12, 0x0D28], [0x0D2A, 0x0D39], [0x0D3D, 0x0D3D], [0x0D60, 0x0D61], [0x0D7A, 0x0D7F], [0x0D85, 0x0D96], [0x0D9A, 0x0DB1], [0x0DB3, 0x0DBB], [0x0DBD, 0x0DBD], [0x0DC0, 0x0DC6], [0x0E01, 0x0E30], [0x0E32, 0x0E33], [0x0E40, 0x0E45], [0x0E81, 0x0E82], [0x0E84, 0x0E84], [0x0E87, 0x0E88], [0x0E8A, 0x0E8A], [0x0E8D, 0x0E8D], [0x0E94, 0x0E97], [0x0E99, 0x0E9F], [0x0EA1, 0x0EA3], [0x0EA5, 0x0EA5], [0x0EA7, 0x0EA7], [0x0EAA, 0x0EAB], [0x0EAD, 0x0EB0], [0x0EB2, 0x0EB3], [0x0EBD, 0x0EBD], [0x0EC0, 0x0EC4], [0x0EDC, 0x0EDD], [0x0F00, 0x0F00], [0x0F40, 0x0F47], [0x0F49, 0x0F6C], [0x0F88, 0x0F8B], [0x1000, 0x102A], [0x103F, 0x103F], [0x1050, 0x1055], [0x105A, 0x105D], [0x1061, 0x1061], [0x1065, 0x1066], [0x106E, 0x1070], [0x1075, 0x1081], [0x108E, 0x108E], [0x10D0, 0x10FA], [0x1100, 0x1159], [0x115F, 0x11A2], [0x11A8, 0x11F9], [0x1200, 0x1248], [0x124A, 0x124D], [0x1250, 0x1256], [0x1258, 0x1258], [0x125A, 0x125D], [0x1260, 0x1288], [0x128A, 0x128D], [0x1290, 0x12B0], [0x12B2, 0x12B5], [0x12B8, 0x12BE], [0x12C0, 0x12C0], [0x12C2, 0x12C5], [0x12C8, 0x12D6], [0x12D8, 0x1310], [0x1312, 0x1315], [0x1318, 0x135A], [0x1380, 0x138F], [0x13A0, 0x13F4], [0x1401, 0x166C], [0x166F, 0x1676], [0x1681, 0x169A], [0x16A0, 0x16EA], [0x1700, 0x170C], [0x170E, 0x1711], [0x1720, 0x1731], [0x1740, 0x1751], [0x1760, 0x176C], [0x176E, 0x1770], [0x1780, 0x17B3], [0x17DC, 0x17DC], [0x1820, 0x1842], [0x1844, 0x1877], [0x1880, 0x18A8], [0x18AA, 0x18AA], [0x1900, 0x191C], [0x1950, 0x196D], [0x1970, 0x1974], [0x1980, 0x19A9], [0x19C1, 0x19C7], [0x1A00, 0x1A16], [0x1B05, 0x1B33], [0x1B45, 0x1B4B], [0x1B83, 0x1BA0], [0x1BAE, 0x1BAF], [0x1C00, 0x1C23], [0x1C4D, 0x1C4F], [0x1C5A, 0x1C77], [0x2135, 0x2138], [0x2D30, 0x2D65], [0x2D80, 0x2D96], [0x2DA0, 0x2DA6], [0x2DA8, 0x2DAE], [0x2DB0, 0x2DB6], [0x2DB8, 0x2DBE], [0x2DC0, 0x2DC6], [0x2DC8, 0x2DCE], [0x2DD0, 0x2DD6], [0x2DD8, 0x2DDE], [0x3006, 0x3006], [0x303C, 0x303C], [0x3041, 0x3096], [0x309F, 0x309F], [0x30A1, 0x30FA], [0x30FF, 0x30FF], [0x3105, 0x312D], [0x3131, 0x318E], [0x31A0, 0x31B7], [0x31F0, 0x31FF], [0x3400, 0x4DB5], [0x4E00, 0x9FC3], [0xA000, 0xA014], [0xA016, 0xA48C], [0xA500, 0xA60B], [0xA610, 0xA61F], [0xA62A, 0xA62B], [0xA66E, 0xA66E], [0xA7FB, 0xA801], [0xA803, 0xA805], [0xA807, 0xA80A], [0xA80C, 0xA822], [0xA840, 0xA873], [0xA882, 0xA8B3], [0xA90A, 0xA925], [0xA930, 0xA946], [0xAA00, 0xAA28], [0xAA40, 0xAA42], [0xAA44, 0xAA4B], [0xAC00, 0xD7A3], [0xF900, 0xFA2D], [0xFA30, 0xFA6A], [0xFA70, 0xFAD9], [0xFB1D, 0xFB1D], [0xFB1F, 0xFB28], [0xFB2A, 0xFB36], [0xFB38, 0xFB3C], [0xFB3E, 0xFB3E], [0xFB40, 0xFB41], [0xFB43, 0xFB44], [0xFB46, 0xFBB1], [0xFBD3, 0xFD3D], [0xFD50, 0xFD8F], [0xFD92, 0xFDC7], [0xFDF0, 0xFDFB], [0xFE70, 0xFE74], [0xFE76, 0xFEFC], [0xFF66, 0xFF6F], [0xFF71, 0xFF9D], [0xFFA0, 0xFFBE], [0xFFC2, 0xFFC7], [0xFFCA, 0xFFCF], [0xFFD2, 0xFFD7], [0xFFDA, 0xFFDC]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Lo.length; indexI++) { - for (indexJ = Lo[indexI][0]; indexJ <= Lo[indexI][1]; indexJ++) { - try { - var hex = decimalToHexString(indexJ); - var identifier1 = String.fromCharCode(indexJ); - var identifier2 = "\\u" + hex; - eval(identifier2 + " = 1"); - if (eval(identifier1 + " === " + identifier2) !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_510/S7.6_A5.2_T6.js b/tests/ES3/Unicode/Unicode_510/S7.6_A5.2_T6.js deleted file mode 100644 index 8bcf9c5ee..000000000 --- a/tests/ES3/Unicode/Unicode_510/S7.6_A5.2_T6.js +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A5.2_T6; - * @section: 7.6, 6; - * @assertion: If a \UnicodeEscapeSequence sequence were replaced by its UnicodeEscapeSequence's CV, the result must still be a valid Identifier that has the exact same sequence of characters as the original Identifier; - * @description: The CV of UnicodeEscapeSequence is Nl. - * Complex test with eval; -*/ - -//CHECK -Nl = [[0x16EE, 0x16F0], [0x2160, 0x2182], [0x2185, 0x2188], [0x3007, 0x3007], [0x3021, 0x3029], [0x3038, 0x303A]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Nl.length; indexI++) { - for (indexJ = Nl[indexI][0]; indexJ <= Nl[indexI][1]; indexJ++) { - try { - var hex = decimalToHexString(indexJ); - var identifier1 = "$" + String.fromCharCode(indexJ); - var identifier2 = "$\\u" + hex; - eval(identifier2 + " = 1"); - if (eval(identifier1 + " === " + identifier2) !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_510/S7.6_A5.2_T7.js b/tests/ES3/Unicode/Unicode_510/S7.6_A5.2_T7.js deleted file mode 100644 index b84a5def4..000000000 --- a/tests/ES3/Unicode/Unicode_510/S7.6_A5.2_T7.js +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A5.2_T7; - * @section: 7.6, 6; - * @assertion: If a \UnicodeEscapeSequence sequence were replaced by its UnicodeEscapeSequence's CV, the result must still be a valid Identifier that has the exact same sequence of characters as the original Identifier; - * @description: The CV of UnicodeEscapeSequence is Mn. - * Complex test with eval; -*/ - -//CHECK -Mn = [[0x0300, 0x036F], [0x0483, 0x0487], [0x0591, 0x05BD], [0x05BF, 0x05BF], [0x05C1, 0x05C2], [0x05C4, 0x05C5], [0x05C7, 0x05C7], [0x0610, 0x061A], [0x064B, 0x065E], [0x0670, 0x0670], [0x06D6, 0x06DC], [0x06DF, 0x06E4], [0x06E7, 0x06E8], [0x06EA, 0x06ED], [0x0711, 0x0711], [0x0730, 0x074A], [0x07A6, 0x07B0], [0x07EB, 0x07F3], [0x0901, 0x0902], [0x093C, 0x093C], [0x0941, 0x0948], [0x094D, 0x094D], [0x0951, 0x0954], [0x0962, 0x0963], [0x0981, 0x0981], [0x09BC, 0x09BC], [0x09C1, 0x09C4], [0x09CD, 0x09CD], [0x09E2, 0x09E3], [0x0A01, 0x0A02], [0x0A3C, 0x0A3C], [0x0A41, 0x0A42], [0x0A47, 0x0A48], [0x0A4B, 0x0A4D], [0x0A51, 0x0A51], [0x0A70, 0x0A71], [0x0A75, 0x0A75], [0x0A81, 0x0A82], [0x0ABC, 0x0ABC], [0x0AC1, 0x0AC5], [0x0AC7, 0x0AC8], [0x0ACD, 0x0ACD], [0x0AE2, 0x0AE3], [0x0B01, 0x0B01], [0x0B3C, 0x0B3C], [0x0B3F, 0x0B3F], [0x0B41, 0x0B44], [0x0B4D, 0x0B4D], [0x0B56, 0x0B56], [0x0B62, 0x0B63], [0x0B82, 0x0B82], [0x0BC0, 0x0BC0], [0x0BCD, 0x0BCD], [0x0C3E, 0x0C40], [0x0C46, 0x0C48], [0x0C4A, 0x0C4D], [0x0C55, 0x0C56], [0x0C62, 0x0C63], [0x0CBC, 0x0CBC], [0x0CBF, 0x0CBF], [0x0CC6, 0x0CC6], [0x0CCC, 0x0CCD], [0x0CE2, 0x0CE3], [0x0D41, 0x0D44], [0x0D4D, 0x0D4D], [0x0D62, 0x0D63], [0x0DCA, 0x0DCA], [0x0DD2, 0x0DD4], [0x0DD6, 0x0DD6], [0x0E31, 0x0E31], [0x0E34, 0x0E3A], [0x0E47, 0x0E4E], [0x0EB1, 0x0EB1], [0x0EB4, 0x0EB9], [0x0EBB, 0x0EBC], [0x0EC8, 0x0ECD], [0x0F18, 0x0F19], [0x0F35, 0x0F35], [0x0F37, 0x0F37], [0x0F39, 0x0F39], [0x0F71, 0x0F7E], [0x0F80, 0x0F84], [0x0F86, 0x0F87], [0x0F90, 0x0F97], [0x0F99, 0x0FBC], [0x0FC6, 0x0FC6], [0x102D, 0x1030], [0x1032, 0x1037], [0x1039, 0x103A], [0x103D, 0x103E], [0x1058, 0x1059], [0x105E, 0x1060], [0x1071, 0x1074], [0x1082, 0x1082], [0x1085, 0x1086], [0x108D, 0x108D], [0x135F, 0x135F], [0x1712, 0x1714], [0x1732, 0x1734], [0x1752, 0x1753], [0x1772, 0x1773], [0x17B7, 0x17BD], [0x17C6, 0x17C6], [0x17C9, 0x17D3], [0x17DD, 0x17DD], [0x180B, 0x180D], [0x18A9, 0x18A9], [0x1920, 0x1922], [0x1927, 0x1928], [0x1932, 0x1932], [0x1939, 0x193B], [0x1A17, 0x1A18], [0x1B00, 0x1B03], [0x1B34, 0x1B34], [0x1B36, 0x1B3A], [0x1B3C, 0x1B3C], [0x1B42, 0x1B42], [0x1B6B, 0x1B73], [0x1B80, 0x1B81], [0x1BA2, 0x1BA5], [0x1BA8, 0x1BA9], [0x1C2C, 0x1C33], [0x1C36, 0x1C37], [0x1DC0, 0x1DE6], [0x1DFE, 0x1DFF], [0x20D0, 0x20DC], [0x20E1, 0x20E1], [0x20E5, 0x20F0], [0x2DE0, 0x2DFF], [0x302A, 0x302F], [0x3099, 0x309A], [0xA66F, 0xA66F], [0xA67C, 0xA67D], [0xA802, 0xA802], [0xA806, 0xA806], [0xA80B, 0xA80B], [0xA825, 0xA826], [0xA8C4, 0xA8C4], [0xA926, 0xA92D], [0xA947, 0xA951], [0xAA29, 0xAA2E], [0xAA31, 0xAA32], [0xAA35, 0xAA36], [0xAA43, 0xAA43], [0xAA4C, 0xAA4C], [0xFB1E, 0xFB1E], [0xFE00, 0xFE0F], [0xFE20, 0xFE26]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Mn.length; indexI++) { - for (indexJ = Mn[indexI][0]; indexJ <= Mn[indexI][1]; indexJ++) { - try { - var hex = decimalToHexString(indexJ); - var identifier1 = "$" + String.fromCharCode(indexJ); - var identifier2 = "$\\u" + hex; - eval(identifier2 + " = 1"); - if (eval(identifier1 + " === " + identifier2) !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_510/S7.6_A5.2_T8.js b/tests/ES3/Unicode/Unicode_510/S7.6_A5.2_T8.js deleted file mode 100644 index 7de012476..000000000 --- a/tests/ES3/Unicode/Unicode_510/S7.6_A5.2_T8.js +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A5.2_T8; - * @section: 7.6, 6; - * @assertion: If a \UnicodeEscapeSequence sequence were replaced by its UnicodeEscapeSequence's CV, the result must still be a valid Identifier that has the exact same sequence of characters as the original Identifier; - * @description: The CV of UnicodeEscapeSequence is Mc. - * Complex test with eval; -*/ - -//CHECK -Mc = [[0x0903, 0x0903], [0x093E, 0x0940], [0x0949, 0x094C], [0x0982, 0x0983], [0x09BE, 0x09C0], [0x09C7, 0x09C8], [0x09CB, 0x09CC], [0x09D7, 0x09D7], [0x0A03, 0x0A03], [0x0A3E, 0x0A40], [0x0A83, 0x0A83], [0x0ABE, 0x0AC0], [0x0AC9, 0x0AC9], [0x0ACB, 0x0ACC], [0x0B02, 0x0B03], [0x0B3E, 0x0B3E], [0x0B40, 0x0B40], [0x0B47, 0x0B48], [0x0B4B, 0x0B4C], [0x0B57, 0x0B57], [0x0BBE, 0x0BBF], [0x0BC1, 0x0BC2], [0x0BC6, 0x0BC8], [0x0BCA, 0x0BCC], [0x0BD7, 0x0BD7], [0x0C01, 0x0C03], [0x0C41, 0x0C44], [0x0C82, 0x0C83], [0x0CBE, 0x0CBE], [0x0CC0, 0x0CC4], [0x0CC7, 0x0CC8], [0x0CCA, 0x0CCB], [0x0CD5, 0x0CD6], [0x0D02, 0x0D03], [0x0D3E, 0x0D40], [0x0D46, 0x0D48], [0x0D4A, 0x0D4C], [0x0D57, 0x0D57], [0x0D82, 0x0D83], [0x0DCF, 0x0DD1], [0x0DD8, 0x0DDF], [0x0DF2, 0x0DF3], [0x0F3E, 0x0F3F], [0x0F7F, 0x0F7F], [0x102B, 0x102C], [0x1031, 0x1031], [0x1038, 0x1038], [0x103B, 0x103C], [0x1056, 0x1057], [0x1062, 0x1064], [0x1067, 0x106D], [0x1083, 0x1084], [0x1087, 0x108C], [0x108F, 0x108F], [0x17B6, 0x17B6], [0x17BE, 0x17C5], [0x17C7, 0x17C8], [0x1923, 0x1926], [0x1929, 0x192B], [0x1930, 0x1931], [0x1933, 0x1938], [0x19B0, 0x19C0], [0x19C8, 0x19C9], [0x1A19, 0x1A1B], [0x1B04, 0x1B04], [0x1B35, 0x1B35], [0x1B3B, 0x1B3B], [0x1B3D, 0x1B41], [0x1B43, 0x1B44], [0x1B82, 0x1B82], [0x1BA1, 0x1BA1], [0x1BA6, 0x1BA7], [0x1BAA, 0x1BAA], [0x1C24, 0x1C2B], [0x1C34, 0x1C35], [0xA823, 0xA824], [0xA827, 0xA827], [0xA880, 0xA881], [0xA8B4, 0xA8C3], [0xA952, 0xA953], [0xAA2F, 0xAA30], [0xAA33, 0xAA34], [0xAA4D, 0xAA4D]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Mc.length; indexI++) { - for (indexJ = Mc[indexI][0]; indexJ <= Mc[indexI][1]; indexJ++) { - try { - var hex = decimalToHexString(indexJ); - var identifier1 = "$" + String.fromCharCode(indexJ); - var identifier2 = "$\\u" + hex; - eval(identifier2 + " = 1"); - if (eval(identifier1 + " === " + identifier2) !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_510/S7.6_A5.2_T9.js b/tests/ES3/Unicode/Unicode_510/S7.6_A5.2_T9.js deleted file mode 100644 index 292e10421..000000000 --- a/tests/ES3/Unicode/Unicode_510/S7.6_A5.2_T9.js +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A5.2_T9; - * @section: 7.6, 6; - * @assertion: If a \UnicodeEscapeSequence sequence were replaced by its UnicodeEscapeSequence's CV, the result must still be a valid Identifier that has the exact same sequence of characters as the original Identifier; - * @description: The CV of UnicodeEscapeSequence is Nd. - * Complex test with eval; -*/ - -//CHECK -Nd = [[0x0030, 0x0039], [0x0660, 0x0669], [0x06F0, 0x06F9], [0x07C0, 0x07C9], [0x0966, 0x096F], [0x09E6, 0x09EF], [0x0A66, 0x0A6F], [0x0AE6, 0x0AEF], [0x0B66, 0x0B6F], [0x0BE6, 0x0BEF], [0x0C66, 0x0C6F], [0x0CE6, 0x0CEF], [0x0D66, 0x0D6F], [0x0E50, 0x0E59], [0x0ED0, 0x0ED9], [0x0F20, 0x0F29], [0x1040, 0x1049], [0x1090, 0x1099], [0x17E0, 0x17E9], [0x1810, 0x1819], [0x1946, 0x194F], [0x19D0, 0x19D9], [0x1B50, 0x1B59], [0x1BB0, 0x1BB9], [0x1C40, 0x1C49], [0x1C50, 0x1C59], [0xA620, 0xA629], [0xA8D0, 0xA8D9], [0xA900, 0xA909], [0xAA50, 0xAA59], [0xFF10, 0xFF19]]; - -errorCount = 0; -count = 0; -for (indexI = 0; indexI < Nd.length; indexI++) { - for (indexJ = Nd[indexI][0]; indexJ <= Nd[indexI][1]; indexJ++) { - try { - var hex = decimalToHexString(indexJ); - var identifier1 = "$" + String.fromCharCode(indexJ); - var identifier2 = "$\\u" + hex; - eval(identifier2 + " = 1"); - if (eval(identifier1 + " === " + identifier2) !== true) { - $ERROR('#' + hex + ' '); - errorCount++; - } - } catch (e) { - $ERROR('#' + hex + ' '); - errorCount++; - } - count++; - } -} - -if (errorCount > 0) { - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_510/S7.6_A5.3_T1.js b/tests/ES3/Unicode/Unicode_510/S7.6_A5.3_T1.js deleted file mode 100644 index 6f2f487a0..000000000 --- a/tests/ES3/Unicode/Unicode_510/S7.6_A5.3_T1.js +++ /dev/null @@ -1,153 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A5.3_T1; - * @section: 7.6, 6; - * @assertion: If a UnicodeEscapeSequence put a character into an identifier that would otherwise be illegal, throw SyntaxError; - * @description: Complex test with eval; -*/ - -//CHECK -Lu = [[0x0041, 0x005A], [0x00C0, 0x00D6], [0x00D8, 0x00DE], [0x0100, 0x0100], [0x0102, 0x0102], [0x0104, 0x0104], [0x0106, 0x0106], [0x0108, 0x0108], [0x010A, 0x010A], [0x010C, 0x010C], [0x010E, 0x010E], [0x0110, 0x0110], [0x0112, 0x0112], [0x0114, 0x0114], [0x0116, 0x0116], [0x0118, 0x0118], [0x011A, 0x011A], [0x011C, 0x011C], [0x011E, 0x011E], [0x0120, 0x0120], [0x0122, 0x0122], [0x0124, 0x0124], [0x0126, 0x0126], [0x0128, 0x0128], [0x012A, 0x012A], [0x012C, 0x012C], [0x012E, 0x012E], [0x0130, 0x0130], [0x0132, 0x0132], [0x0134, 0x0134], [0x0136, 0x0136], [0x0139, 0x0139], [0x013B, 0x013B], [0x013D, 0x013D], [0x013F, 0x013F], [0x0141, 0x0141], [0x0143, 0x0143], [0x0145, 0x0145], [0x0147, 0x0147], [0x014A, 0x014A], [0x014C, 0x014C], [0x014E, 0x014E], [0x0150, 0x0150], [0x0152, 0x0152], [0x0154, 0x0154], [0x0156, 0x0156], [0x0158, 0x0158], [0x015A, 0x015A], [0x015C, 0x015C], [0x015E, 0x015E], [0x0160, 0x0160], [0x0162, 0x0162], [0x0164, 0x0164], [0x0166, 0x0166], [0x0168, 0x0168], [0x016A, 0x016A], [0x016C, 0x016C], [0x016E, 0x016E], [0x0170, 0x0170], [0x0172, 0x0172], [0x0174, 0x0174], [0x0176, 0x0176], [0x0178, 0x0179], [0x017B, 0x017B], [0x017D, 0x017D], [0x0181, 0x0182], [0x0184, 0x0184], [0x0186, 0x0187], [0x0189, 0x018B], [0x018E, 0x0191], [0x0193, 0x0194], [0x0196, 0x0198], [0x019C, 0x019D], [0x019F, 0x01A0], [0x01A2, 0x01A2], [0x01A4, 0x01A4], [0x01A6, 0x01A7], [0x01A9, 0x01A9], [0x01AC, 0x01AC], [0x01AE, 0x01AF], [0x01B1, 0x01B3], [0x01B5, 0x01B5], [0x01B7, 0x01B8], [0x01BC, 0x01BC], [0x01C4, 0x01C4], [0x01C7, 0x01C7], [0x01CA, 0x01CA], [0x01CD, 0x01CD], [0x01CF, 0x01CF], [0x01D1, 0x01D1], [0x01D3, 0x01D3], [0x01D5, 0x01D5], [0x01D7, 0x01D7], [0x01D9, 0x01D9], [0x01DB, 0x01DB], [0x01DE, 0x01DE], [0x01E0, 0x01E0], [0x01E2, 0x01E2], [0x01E4, 0x01E4], [0x01E6, 0x01E6], [0x01E8, 0x01E8], [0x01EA, 0x01EA], [0x01EC, 0x01EC], [0x01EE, 0x01EE], [0x01F1, 0x01F1], [0x01F4, 0x01F4], [0x01F6, 0x01F8], [0x01FA, 0x01FA], [0x01FC, 0x01FC], [0x01FE, 0x01FE], [0x0200, 0x0200], [0x0202, 0x0202], [0x0204, 0x0204], [0x0206, 0x0206], [0x0208, 0x0208], [0x020A, 0x020A], [0x020C, 0x020C], [0x020E, 0x020E], [0x0210, 0x0210], [0x0212, 0x0212], [0x0214, 0x0214], [0x0216, 0x0216], [0x0218, 0x0218], [0x021A, 0x021A], [0x021C, 0x021C], [0x021E, 0x021E], [0x0220, 0x0220], [0x0222, 0x0222], [0x0224, 0x0224], [0x0226, 0x0226], [0x0228, 0x0228], [0x022A, 0x022A], [0x022C, 0x022C], [0x022E, 0x022E], [0x0230, 0x0230], [0x0232, 0x0232], [0x023A, 0x023B], [0x023D, 0x023E], [0x0241, 0x0241], [0x0243, 0x0246], [0x0248, 0x0248], [0x024A, 0x024A], [0x024C, 0x024C], [0x024E, 0x024E], [0x0370, 0x0370], [0x0372, 0x0372], [0x0376, 0x0376], [0x0386, 0x0386], [0x0388, 0x038A], [0x038C, 0x038C], [0x038E, 0x038F], [0x0391, 0x03A1], [0x03A3, 0x03AB], [0x03CF, 0x03CF], [0x03D2, 0x03D4], [0x03D8, 0x03D8], [0x03DA, 0x03DA], [0x03DC, 0x03DC], [0x03DE, 0x03DE], [0x03E0, 0x03E0], [0x03E2, 0x03E2], [0x03E4, 0x03E4], [0x03E6, 0x03E6], [0x03E8, 0x03E8], [0x03EA, 0x03EA], [0x03EC, 0x03EC], [0x03EE, 0x03EE], [0x03F4, 0x03F4], [0x03F7, 0x03F7], [0x03F9, 0x03FA], [0x03FD, 0x042F], [0x0460, 0x0460], [0x0462, 0x0462], [0x0464, 0x0464], [0x0466, 0x0466], [0x0468, 0x0468], [0x046A, 0x046A], [0x046C, 0x046C], [0x046E, 0x046E], [0x0470, 0x0470], [0x0472, 0x0472], [0x0474, 0x0474], [0x0476, 0x0476], [0x0478, 0x0478], [0x047A, 0x047A], [0x047C, 0x047C], [0x047E, 0x047E], [0x0480, 0x0480], [0x048A, 0x048A], [0x048C, 0x048C], [0x048E, 0x048E], [0x0490, 0x0490], [0x0492, 0x0492], [0x0494, 0x0494], [0x0496, 0x0496], [0x0498, 0x0498], [0x049A, 0x049A], [0x049C, 0x049C], [0x049E, 0x049E], [0x04A0, 0x04A0], [0x04A2, 0x04A2], [0x04A4, 0x04A4], [0x04A6, 0x04A6], [0x04A8, 0x04A8], [0x04AA, 0x04AA], [0x04AC, 0x04AC], [0x04AE, 0x04AE], [0x04B0, 0x04B0], [0x04B2, 0x04B2], [0x04B4, 0x04B4], [0x04B6, 0x04B6], [0x04B8, 0x04B8], [0x04BA, 0x04BA], [0x04BC, 0x04BC], [0x04BE, 0x04BE], [0x04C0, 0x04C1], [0x04C3, 0x04C3], [0x04C5, 0x04C5], [0x04C7, 0x04C7], [0x04C9, 0x04C9], [0x04CB, 0x04CB], [0x04CD, 0x04CD], [0x04D0, 0x04D0], [0x04D2, 0x04D2], [0x04D4, 0x04D4], [0x04D6, 0x04D6], [0x04D8, 0x04D8], [0x04DA, 0x04DA], [0x04DC, 0x04DC], [0x04DE, 0x04DE], [0x04E0, 0x04E0], [0x04E2, 0x04E2], [0x04E4, 0x04E4], [0x04E6, 0x04E6], [0x04E8, 0x04E8], [0x04EA, 0x04EA], [0x04EC, 0x04EC], [0x04EE, 0x04EE], [0x04F0, 0x04F0], [0x04F2, 0x04F2], [0x04F4, 0x04F4], [0x04F6, 0x04F6], [0x04F8, 0x04F8], [0x04FA, 0x04FA], [0x04FC, 0x04FC], [0x04FE, 0x04FE], [0x0500, 0x0500], [0x0502, 0x0502], [0x0504, 0x0504], [0x0506, 0x0506], [0x0508, 0x0508], [0x050A, 0x050A], [0x050C, 0x050C], [0x050E, 0x050E], [0x0510, 0x0510], [0x0512, 0x0512], [0x0514, 0x0514], [0x0516, 0x0516], [0x0518, 0x0518], [0x051A, 0x051A], [0x051C, 0x051C], [0x051E, 0x051E], [0x0520, 0x0520], [0x0522, 0x0522], [0x0531, 0x0556], [0x10A0, 0x10C5], [0x1E00, 0x1E00], [0x1E02, 0x1E02], [0x1E04, 0x1E04], [0x1E06, 0x1E06], [0x1E08, 0x1E08], [0x1E0A, 0x1E0A], [0x1E0C, 0x1E0C], [0x1E0E, 0x1E0E], [0x1E10, 0x1E10], [0x1E12, 0x1E12], [0x1E14, 0x1E14], [0x1E16, 0x1E16], [0x1E18, 0x1E18], [0x1E1A, 0x1E1A], [0x1E1C, 0x1E1C], [0x1E1E, 0x1E1E], [0x1E20, 0x1E20], [0x1E22, 0x1E22], [0x1E24, 0x1E24], [0x1E26, 0x1E26], [0x1E28, 0x1E28], [0x1E2A, 0x1E2A], [0x1E2C, 0x1E2C], [0x1E2E, 0x1E2E], [0x1E30, 0x1E30], [0x1E32, 0x1E32], [0x1E34, 0x1E34], [0x1E36, 0x1E36], [0x1E38, 0x1E38], [0x1E3A, 0x1E3A], [0x1E3C, 0x1E3C], [0x1E3E, 0x1E3E], [0x1E40, 0x1E40], [0x1E42, 0x1E42], [0x1E44, 0x1E44], [0x1E46, 0x1E46], [0x1E48, 0x1E48], [0x1E4A, 0x1E4A], [0x1E4C, 0x1E4C], [0x1E4E, 0x1E4E], [0x1E50, 0x1E50], [0x1E52, 0x1E52], [0x1E54, 0x1E54], [0x1E56, 0x1E56], [0x1E58, 0x1E58], [0x1E5A, 0x1E5A], [0x1E5C, 0x1E5C], [0x1E5E, 0x1E5E], [0x1E60, 0x1E60], [0x1E62, 0x1E62], [0x1E64, 0x1E64], [0x1E66, 0x1E66], [0x1E68, 0x1E68], [0x1E6A, 0x1E6A], [0x1E6C, 0x1E6C], [0x1E6E, 0x1E6E], [0x1E70, 0x1E70], [0x1E72, 0x1E72], [0x1E74, 0x1E74], [0x1E76, 0x1E76], [0x1E78, 0x1E78], [0x1E7A, 0x1E7A], [0x1E7C, 0x1E7C], [0x1E7E, 0x1E7E], [0x1E80, 0x1E80], [0x1E82, 0x1E82], [0x1E84, 0x1E84], [0x1E86, 0x1E86], [0x1E88, 0x1E88], [0x1E8A, 0x1E8A], [0x1E8C, 0x1E8C], [0x1E8E, 0x1E8E], [0x1E90, 0x1E90], [0x1E92, 0x1E92], [0x1E94, 0x1E94], [0x1E9E, 0x1E9E], [0x1EA0, 0x1EA0], [0x1EA2, 0x1EA2], [0x1EA4, 0x1EA4], [0x1EA6, 0x1EA6], [0x1EA8, 0x1EA8], [0x1EAA, 0x1EAA], [0x1EAC, 0x1EAC], [0x1EAE, 0x1EAE], [0x1EB0, 0x1EB0], [0x1EB2, 0x1EB2], [0x1EB4, 0x1EB4], [0x1EB6, 0x1EB6], [0x1EB8, 0x1EB8], [0x1EBA, 0x1EBA], [0x1EBC, 0x1EBC], [0x1EBE, 0x1EBE], [0x1EC0, 0x1EC0], [0x1EC2, 0x1EC2], [0x1EC4, 0x1EC4], [0x1EC6, 0x1EC6], [0x1EC8, 0x1EC8], [0x1ECA, 0x1ECA], [0x1ECC, 0x1ECC], [0x1ECE, 0x1ECE], [0x1ED0, 0x1ED0], [0x1ED2, 0x1ED2], [0x1ED4, 0x1ED4], [0x1ED6, 0x1ED6], [0x1ED8, 0x1ED8], [0x1EDA, 0x1EDA], [0x1EDC, 0x1EDC], [0x1EDE, 0x1EDE], [0x1EE0, 0x1EE0], [0x1EE2, 0x1EE2], [0x1EE4, 0x1EE4], [0x1EE6, 0x1EE6], [0x1EE8, 0x1EE8], [0x1EEA, 0x1EEA], [0x1EEC, 0x1EEC], [0x1EEE, 0x1EEE], [0x1EF0, 0x1EF0], [0x1EF2, 0x1EF2], [0x1EF4, 0x1EF4], [0x1EF6, 0x1EF6], [0x1EF8, 0x1EF8], [0x1EFA, 0x1EFA], [0x1EFC, 0x1EFC], [0x1EFE, 0x1EFE], [0x1F08, 0x1F0F], [0x1F18, 0x1F1D], [0x1F28, 0x1F2F], [0x1F38, 0x1F3F], [0x1F48, 0x1F4D], [0x1F59, 0x1F59], [0x1F5B, 0x1F5B], [0x1F5D, 0x1F5D], [0x1F5F, 0x1F5F], [0x1F68, 0x1F6F], [0x1FB8, 0x1FBB], [0x1FC8, 0x1FCB], [0x1FD8, 0x1FDB], [0x1FE8, 0x1FEC], [0x1FF8, 0x1FFB], [0x2102, 0x2102], [0x2107, 0x2107], [0x210B, 0x210D], [0x2110, 0x2112], [0x2115, 0x2115], [0x2119, 0x211D], [0x2124, 0x2124], [0x2126, 0x2126], [0x2128, 0x2128], [0x212A, 0x212D], [0x2130, 0x2133], [0x213E, 0x213F], [0x2145, 0x2145], [0x2183, 0x2183], [0x2C00, 0x2C2E], [0x2C60, 0x2C60], [0x2C62, 0x2C64], [0x2C67, 0x2C67], [0x2C69, 0x2C69], [0x2C6B, 0x2C6B], [0x2C6D, 0x2C6F], [0x2C72, 0x2C72], [0x2C75, 0x2C75], [0x2C80, 0x2C80], [0x2C82, 0x2C82], [0x2C84, 0x2C84], [0x2C86, 0x2C86], [0x2C88, 0x2C88], [0x2C8A, 0x2C8A], [0x2C8C, 0x2C8C], [0x2C8E, 0x2C8E], [0x2C90, 0x2C90], [0x2C92, 0x2C92], [0x2C94, 0x2C94], [0x2C96, 0x2C96], [0x2C98, 0x2C98], [0x2C9A, 0x2C9A], [0x2C9C, 0x2C9C], [0x2C9E, 0x2C9E], [0x2CA0, 0x2CA0], [0x2CA2, 0x2CA2], [0x2CA4, 0x2CA4], [0x2CA6, 0x2CA6], [0x2CA8, 0x2CA8], [0x2CAA, 0x2CAA], [0x2CAC, 0x2CAC], [0x2CAE, 0x2CAE], [0x2CB0, 0x2CB0], [0x2CB2, 0x2CB2], [0x2CB4, 0x2CB4], [0x2CB6, 0x2CB6], [0x2CB8, 0x2CB8], [0x2CBA, 0x2CBA], [0x2CBC, 0x2CBC], [0x2CBE, 0x2CBE], [0x2CC0, 0x2CC0], [0x2CC2, 0x2CC2], [0x2CC4, 0x2CC4], [0x2CC6, 0x2CC6], [0x2CC8, 0x2CC8], [0x2CCA, 0x2CCA], [0x2CCC, 0x2CCC], [0x2CCE, 0x2CCE], [0x2CD0, 0x2CD0], [0x2CD2, 0x2CD2], [0x2CD4, 0x2CD4], [0x2CD6, 0x2CD6], [0x2CD8, 0x2CD8], [0x2CDA, 0x2CDA], [0x2CDC, 0x2CDC], [0x2CDE, 0x2CDE], [0x2CE0, 0x2CE0], [0x2CE2, 0x2CE2], [0xA640, 0xA640], [0xA642, 0xA642], [0xA644, 0xA644], [0xA646, 0xA646], [0xA648, 0xA648], [0xA64A, 0xA64A], [0xA64C, 0xA64C], [0xA64E, 0xA64E], [0xA650, 0xA650], [0xA652, 0xA652], [0xA654, 0xA654], [0xA656, 0xA656], [0xA658, 0xA658], [0xA65A, 0xA65A], [0xA65C, 0xA65C], [0xA65E, 0xA65E], [0xA662, 0xA662], [0xA664, 0xA664], [0xA666, 0xA666], [0xA668, 0xA668], [0xA66A, 0xA66A], [0xA66C, 0xA66C], [0xA680, 0xA680], [0xA682, 0xA682], [0xA684, 0xA684], [0xA686, 0xA686], [0xA688, 0xA688], [0xA68A, 0xA68A], [0xA68C, 0xA68C], [0xA68E, 0xA68E], [0xA690, 0xA690], [0xA692, 0xA692], [0xA694, 0xA694], [0xA696, 0xA696], [0xA722, 0xA722], [0xA724, 0xA724], [0xA726, 0xA726], [0xA728, 0xA728], [0xA72A, 0xA72A], [0xA72C, 0xA72C], [0xA72E, 0xA72E], [0xA732, 0xA732], [0xA734, 0xA734], [0xA736, 0xA736], [0xA738, 0xA738], [0xA73A, 0xA73A], [0xA73C, 0xA73C], [0xA73E, 0xA73E], [0xA740, 0xA740], [0xA742, 0xA742], [0xA744, 0xA744], [0xA746, 0xA746], [0xA748, 0xA748], [0xA74A, 0xA74A], [0xA74C, 0xA74C], [0xA74E, 0xA74E], [0xA750, 0xA750], [0xA752, 0xA752], [0xA754, 0xA754], [0xA756, 0xA756], [0xA758, 0xA758], [0xA75A, 0xA75A], [0xA75C, 0xA75C], [0xA75E, 0xA75E], [0xA760, 0xA760], [0xA762, 0xA762], [0xA764, 0xA764], [0xA766, 0xA766], [0xA768, 0xA768], [0xA76A, 0xA76A], [0xA76C, 0xA76C], [0xA76E, 0xA76E], [0xA779, 0xA779], [0xA77B, 0xA77B], [0xA77D, 0xA77E], [0xA780, 0xA780], [0xA782, 0xA782], [0xA784, 0xA784], [0xA786, 0xA786], [0xA78B, 0xA78B], [0xFF21, 0xFF3A]]; -Ll = [[0x0061, 0x007A], [0x00AA, 0x00AA], [0x00B5, 0x00B5], [0x00BA, 0x00BA], [0x00DF, 0x00F6], [0x00F8, 0x00FF], [0x0101, 0x0101], [0x0103, 0x0103], [0x0105, 0x0105], [0x0107, 0x0107], [0x0109, 0x0109], [0x010B, 0x010B], [0x010D, 0x010D], [0x010F, 0x010F], [0x0111, 0x0111], [0x0113, 0x0113], [0x0115, 0x0115], [0x0117, 0x0117], [0x0119, 0x0119], [0x011B, 0x011B], [0x011D, 0x011D], [0x011F, 0x011F], [0x0121, 0x0121], [0x0123, 0x0123], [0x0125, 0x0125], [0x0127, 0x0127], [0x0129, 0x0129], [0x012B, 0x012B], [0x012D, 0x012D], [0x012F, 0x012F], [0x0131, 0x0131], [0x0133, 0x0133], [0x0135, 0x0135], [0x0137, 0x0138], [0x013A, 0x013A], [0x013C, 0x013C], [0x013E, 0x013E], [0x0140, 0x0140], [0x0142, 0x0142], [0x0144, 0x0144], [0x0146, 0x0146], [0x0148, 0x0149], [0x014B, 0x014B], [0x014D, 0x014D], [0x014F, 0x014F], [0x0151, 0x0151], [0x0153, 0x0153], [0x0155, 0x0155], [0x0157, 0x0157], [0x0159, 0x0159], [0x015B, 0x015B], [0x015D, 0x015D], [0x015F, 0x015F], [0x0161, 0x0161], [0x0163, 0x0163], [0x0165, 0x0165], [0x0167, 0x0167], [0x0169, 0x0169], [0x016B, 0x016B], [0x016D, 0x016D], [0x016F, 0x016F], [0x0171, 0x0171], [0x0173, 0x0173], [0x0175, 0x0175], [0x0177, 0x0177], [0x017A, 0x017A], [0x017C, 0x017C], [0x017E, 0x0180], [0x0183, 0x0183], [0x0185, 0x0185], [0x0188, 0x0188], [0x018C, 0x018D], [0x0192, 0x0192], [0x0195, 0x0195], [0x0199, 0x019B], [0x019E, 0x019E], [0x01A1, 0x01A1], [0x01A3, 0x01A3], [0x01A5, 0x01A5], [0x01A8, 0x01A8], [0x01AA, 0x01AB], [0x01AD, 0x01AD], [0x01B0, 0x01B0], [0x01B4, 0x01B4], [0x01B6, 0x01B6], [0x01B9, 0x01BA], [0x01BD, 0x01BF], [0x01C6, 0x01C6], [0x01C9, 0x01C9], [0x01CC, 0x01CC], [0x01CE, 0x01CE], [0x01D0, 0x01D0], [0x01D2, 0x01D2], [0x01D4, 0x01D4], [0x01D6, 0x01D6], [0x01D8, 0x01D8], [0x01DA, 0x01DA], [0x01DC, 0x01DD], [0x01DF, 0x01DF], [0x01E1, 0x01E1], [0x01E3, 0x01E3], [0x01E5, 0x01E5], [0x01E7, 0x01E7], [0x01E9, 0x01E9], [0x01EB, 0x01EB], [0x01ED, 0x01ED], [0x01EF, 0x01F0], [0x01F3, 0x01F3], [0x01F5, 0x01F5], [0x01F9, 0x01F9], [0x01FB, 0x01FB], [0x01FD, 0x01FD], [0x01FF, 0x01FF], [0x0201, 0x0201], [0x0203, 0x0203], [0x0205, 0x0205], [0x0207, 0x0207], [0x0209, 0x0209], [0x020B, 0x020B], [0x020D, 0x020D], [0x020F, 0x020F], [0x0211, 0x0211], [0x0213, 0x0213], [0x0215, 0x0215], [0x0217, 0x0217], [0x0219, 0x0219], [0x021B, 0x021B], [0x021D, 0x021D], [0x021F, 0x021F], [0x0221, 0x0221], [0x0223, 0x0223], [0x0225, 0x0225], [0x0227, 0x0227], [0x0229, 0x0229], [0x022B, 0x022B], [0x022D, 0x022D], [0x022F, 0x022F], [0x0231, 0x0231], [0x0233, 0x0239], [0x023C, 0x023C], [0x023F, 0x0240], [0x0242, 0x0242], [0x0247, 0x0247], [0x0249, 0x0249], [0x024B, 0x024B], [0x024D, 0x024D], [0x024F, 0x0293], [0x0295, 0x02AF], [0x0371, 0x0371], [0x0373, 0x0373], [0x0377, 0x0377], [0x037B, 0x037D], [0x0390, 0x0390], [0x03AC, 0x03CE], [0x03D0, 0x03D1], [0x03D5, 0x03D7], [0x03D9, 0x03D9], [0x03DB, 0x03DB], [0x03DD, 0x03DD], [0x03DF, 0x03DF], [0x03E1, 0x03E1], [0x03E3, 0x03E3], [0x03E5, 0x03E5], [0x03E7, 0x03E7], [0x03E9, 0x03E9], [0x03EB, 0x03EB], [0x03ED, 0x03ED], [0x03EF, 0x03F3], [0x03F5, 0x03F5], [0x03F8, 0x03F8], [0x03FB, 0x03FC], [0x0430, 0x045F], [0x0461, 0x0461], [0x0463, 0x0463], [0x0465, 0x0465], [0x0467, 0x0467], [0x0469, 0x0469], [0x046B, 0x046B], [0x046D, 0x046D], [0x046F, 0x046F], [0x0471, 0x0471], [0x0473, 0x0473], [0x0475, 0x0475], [0x0477, 0x0477], [0x0479, 0x0479], [0x047B, 0x047B], [0x047D, 0x047D], [0x047F, 0x047F], [0x0481, 0x0481], [0x048B, 0x048B], [0x048D, 0x048D], [0x048F, 0x048F], [0x0491, 0x0491], [0x0493, 0x0493], [0x0495, 0x0495], [0x0497, 0x0497], [0x0499, 0x0499], [0x049B, 0x049B], [0x049D, 0x049D], [0x049F, 0x049F], [0x04A1, 0x04A1], [0x04A3, 0x04A3], [0x04A5, 0x04A5], [0x04A7, 0x04A7], [0x04A9, 0x04A9], [0x04AB, 0x04AB], [0x04AD, 0x04AD], [0x04AF, 0x04AF], [0x04B1, 0x04B1], [0x04B3, 0x04B3], [0x04B5, 0x04B5], [0x04B7, 0x04B7], [0x04B9, 0x04B9], [0x04BB, 0x04BB], [0x04BD, 0x04BD], [0x04BF, 0x04BF], [0x04C2, 0x04C2], [0x04C4, 0x04C4], [0x04C6, 0x04C6], [0x04C8, 0x04C8], [0x04CA, 0x04CA], [0x04CC, 0x04CC], [0x04CE, 0x04CF], [0x04D1, 0x04D1], [0x04D3, 0x04D3], [0x04D5, 0x04D5], [0x04D7, 0x04D7], [0x04D9, 0x04D9], [0x04DB, 0x04DB], [0x04DD, 0x04DD], [0x04DF, 0x04DF], [0x04E1, 0x04E1], [0x04E3, 0x04E3], [0x04E5, 0x04E5], [0x04E7, 0x04E7], [0x04E9, 0x04E9], [0x04EB, 0x04EB], [0x04ED, 0x04ED], [0x04EF, 0x04EF], [0x04F1, 0x04F1], [0x04F3, 0x04F3], [0x04F5, 0x04F5], [0x04F7, 0x04F7], [0x04F9, 0x04F9], [0x04FB, 0x04FB], [0x04FD, 0x04FD], [0x04FF, 0x04FF], [0x0501, 0x0501], [0x0503, 0x0503], [0x0505, 0x0505], [0x0507, 0x0507], [0x0509, 0x0509], [0x050B, 0x050B], [0x050D, 0x050D], [0x050F, 0x050F], [0x0511, 0x0511], [0x0513, 0x0513], [0x0515, 0x0515], [0x0517, 0x0517], [0x0519, 0x0519], [0x051B, 0x051B], [0x051D, 0x051D], [0x051F, 0x051F], [0x0521, 0x0521], [0x0523, 0x0523], [0x0561, 0x0587], [0x1D00, 0x1D2B], [0x1D62, 0x1D77], [0x1D79, 0x1D9A], [0x1E01, 0x1E01], [0x1E03, 0x1E03], [0x1E05, 0x1E05], [0x1E07, 0x1E07], [0x1E09, 0x1E09], [0x1E0B, 0x1E0B], [0x1E0D, 0x1E0D], [0x1E0F, 0x1E0F], [0x1E11, 0x1E11], [0x1E13, 0x1E13], [0x1E15, 0x1E15], [0x1E17, 0x1E17], [0x1E19, 0x1E19], [0x1E1B, 0x1E1B], [0x1E1D, 0x1E1D], [0x1E1F, 0x1E1F], [0x1E21, 0x1E21], [0x1E23, 0x1E23], [0x1E25, 0x1E25], [0x1E27, 0x1E27], [0x1E29, 0x1E29], [0x1E2B, 0x1E2B], [0x1E2D, 0x1E2D], [0x1E2F, 0x1E2F], [0x1E31, 0x1E31], [0x1E33, 0x1E33], [0x1E35, 0x1E35], [0x1E37, 0x1E37], [0x1E39, 0x1E39], [0x1E3B, 0x1E3B], [0x1E3D, 0x1E3D], [0x1E3F, 0x1E3F], [0x1E41, 0x1E41], [0x1E43, 0x1E43], [0x1E45, 0x1E45], [0x1E47, 0x1E47], [0x1E49, 0x1E49], [0x1E4B, 0x1E4B], [0x1E4D, 0x1E4D], [0x1E4F, 0x1E4F], [0x1E51, 0x1E51], [0x1E53, 0x1E53], [0x1E55, 0x1E55], [0x1E57, 0x1E57], [0x1E59, 0x1E59], [0x1E5B, 0x1E5B], [0x1E5D, 0x1E5D], [0x1E5F, 0x1E5F], [0x1E61, 0x1E61], [0x1E63, 0x1E63], [0x1E65, 0x1E65], [0x1E67, 0x1E67], [0x1E69, 0x1E69], [0x1E6B, 0x1E6B], [0x1E6D, 0x1E6D], [0x1E6F, 0x1E6F], [0x1E71, 0x1E71], [0x1E73, 0x1E73], [0x1E75, 0x1E75], [0x1E77, 0x1E77], [0x1E79, 0x1E79], [0x1E7B, 0x1E7B], [0x1E7D, 0x1E7D], [0x1E7F, 0x1E7F], [0x1E81, 0x1E81], [0x1E83, 0x1E83], [0x1E85, 0x1E85], [0x1E87, 0x1E87], [0x1E89, 0x1E89], [0x1E8B, 0x1E8B], [0x1E8D, 0x1E8D], [0x1E8F, 0x1E8F], [0x1E91, 0x1E91], [0x1E93, 0x1E93], [0x1E95, 0x1E9D], [0x1E9F, 0x1E9F], [0x1EA1, 0x1EA1], [0x1EA3, 0x1EA3], [0x1EA5, 0x1EA5], [0x1EA7, 0x1EA7], [0x1EA9, 0x1EA9], [0x1EAB, 0x1EAB], [0x1EAD, 0x1EAD], [0x1EAF, 0x1EAF], [0x1EB1, 0x1EB1], [0x1EB3, 0x1EB3], [0x1EB5, 0x1EB5], [0x1EB7, 0x1EB7], [0x1EB9, 0x1EB9], [0x1EBB, 0x1EBB], [0x1EBD, 0x1EBD], [0x1EBF, 0x1EBF], [0x1EC1, 0x1EC1], [0x1EC3, 0x1EC3], [0x1EC5, 0x1EC5], [0x1EC7, 0x1EC7], [0x1EC9, 0x1EC9], [0x1ECB, 0x1ECB], [0x1ECD, 0x1ECD], [0x1ECF, 0x1ECF], [0x1ED1, 0x1ED1], [0x1ED3, 0x1ED3], [0x1ED5, 0x1ED5], [0x1ED7, 0x1ED7], [0x1ED9, 0x1ED9], [0x1EDB, 0x1EDB], [0x1EDD, 0x1EDD], [0x1EDF, 0x1EDF], [0x1EE1, 0x1EE1], [0x1EE3, 0x1EE3], [0x1EE5, 0x1EE5], [0x1EE7, 0x1EE7], [0x1EE9, 0x1EE9], [0x1EEB, 0x1EEB], [0x1EED, 0x1EED], [0x1EEF, 0x1EEF], [0x1EF1, 0x1EF1], [0x1EF3, 0x1EF3], [0x1EF5, 0x1EF5], [0x1EF7, 0x1EF7], [0x1EF9, 0x1EF9], [0x1EFB, 0x1EFB], [0x1EFD, 0x1EFD], [0x1EFF, 0x1F07], [0x1F10, 0x1F15], [0x1F20, 0x1F27], [0x1F30, 0x1F37], [0x1F40, 0x1F45], [0x1F50, 0x1F57], [0x1F60, 0x1F67], [0x1F70, 0x1F7D], [0x1F80, 0x1F87], [0x1F90, 0x1F97], [0x1FA0, 0x1FA7], [0x1FB0, 0x1FB4], [0x1FB6, 0x1FB7], [0x1FBE, 0x1FBE], [0x1FC2, 0x1FC4], [0x1FC6, 0x1FC7], [0x1FD0, 0x1FD3], [0x1FD6, 0x1FD7], [0x1FE0, 0x1FE7], [0x1FF2, 0x1FF4], [0x1FF6, 0x1FF7], [0x2071, 0x2071], [0x207F, 0x207F], [0x210A, 0x210A], [0x210E, 0x210F], [0x2113, 0x2113], [0x212F, 0x212F], [0x2134, 0x2134], [0x2139, 0x2139], [0x213C, 0x213D], [0x2146, 0x2149], [0x214E, 0x214E], [0x2184, 0x2184], [0x2C30, 0x2C5E], [0x2C61, 0x2C61], [0x2C65, 0x2C66], [0x2C68, 0x2C68], [0x2C6A, 0x2C6A], [0x2C6C, 0x2C6C], [0x2C71, 0x2C71], [0x2C73, 0x2C74], [0x2C76, 0x2C7C], [0x2C81, 0x2C81], [0x2C83, 0x2C83], [0x2C85, 0x2C85], [0x2C87, 0x2C87], [0x2C89, 0x2C89], [0x2C8B, 0x2C8B], [0x2C8D, 0x2C8D], [0x2C8F, 0x2C8F], [0x2C91, 0x2C91], [0x2C93, 0x2C93], [0x2C95, 0x2C95], [0x2C97, 0x2C97], [0x2C99, 0x2C99], [0x2C9B, 0x2C9B], [0x2C9D, 0x2C9D], [0x2C9F, 0x2C9F], [0x2CA1, 0x2CA1], [0x2CA3, 0x2CA3], [0x2CA5, 0x2CA5], [0x2CA7, 0x2CA7], [0x2CA9, 0x2CA9], [0x2CAB, 0x2CAB], [0x2CAD, 0x2CAD], [0x2CAF, 0x2CAF], [0x2CB1, 0x2CB1], [0x2CB3, 0x2CB3], [0x2CB5, 0x2CB5], [0x2CB7, 0x2CB7], [0x2CB9, 0x2CB9], [0x2CBB, 0x2CBB], [0x2CBD, 0x2CBD], [0x2CBF, 0x2CBF], [0x2CC1, 0x2CC1], [0x2CC3, 0x2CC3], [0x2CC5, 0x2CC5], [0x2CC7, 0x2CC7], [0x2CC9, 0x2CC9], [0x2CCB, 0x2CCB], [0x2CCD, 0x2CCD], [0x2CCF, 0x2CCF], [0x2CD1, 0x2CD1], [0x2CD3, 0x2CD3], [0x2CD5, 0x2CD5], [0x2CD7, 0x2CD7], [0x2CD9, 0x2CD9], [0x2CDB, 0x2CDB], [0x2CDD, 0x2CDD], [0x2CDF, 0x2CDF], [0x2CE1, 0x2CE1], [0x2CE3, 0x2CE4], [0x2D00, 0x2D25], [0xA641, 0xA641], [0xA643, 0xA643], [0xA645, 0xA645], [0xA647, 0xA647], [0xA649, 0xA649], [0xA64B, 0xA64B], [0xA64D, 0xA64D], [0xA64F, 0xA64F], [0xA651, 0xA651], [0xA653, 0xA653], [0xA655, 0xA655], [0xA657, 0xA657], [0xA659, 0xA659], [0xA65B, 0xA65B], [0xA65D, 0xA65D], [0xA65F, 0xA65F], [0xA663, 0xA663], [0xA665, 0xA665], [0xA667, 0xA667], [0xA669, 0xA669], [0xA66B, 0xA66B], [0xA66D, 0xA66D], [0xA681, 0xA681], [0xA683, 0xA683], [0xA685, 0xA685], [0xA687, 0xA687], [0xA689, 0xA689], [0xA68B, 0xA68B], [0xA68D, 0xA68D], [0xA68F, 0xA68F], [0xA691, 0xA691], [0xA693, 0xA693], [0xA695, 0xA695], [0xA697, 0xA697], [0xA723, 0xA723], [0xA725, 0xA725], [0xA727, 0xA727], [0xA729, 0xA729], [0xA72B, 0xA72B], [0xA72D, 0xA72D], [0xA72F, 0xA731], [0xA733, 0xA733], [0xA735, 0xA735], [0xA737, 0xA737], [0xA739, 0xA739], [0xA73B, 0xA73B], [0xA73D, 0xA73D], [0xA73F, 0xA73F], [0xA741, 0xA741], [0xA743, 0xA743], [0xA745, 0xA745], [0xA747, 0xA747], [0xA749, 0xA749], [0xA74B, 0xA74B], [0xA74D, 0xA74D], [0xA74F, 0xA74F], [0xA751, 0xA751], [0xA753, 0xA753], [0xA755, 0xA755], [0xA757, 0xA757], [0xA759, 0xA759], [0xA75B, 0xA75B], [0xA75D, 0xA75D], [0xA75F, 0xA75F], [0xA761, 0xA761], [0xA763, 0xA763], [0xA765, 0xA765], [0xA767, 0xA767], [0xA769, 0xA769], [0xA76B, 0xA76B], [0xA76D, 0xA76D], [0xA76F, 0xA76F], [0xA771, 0xA778], [0xA77A, 0xA77A], [0xA77C, 0xA77C], [0xA77F, 0xA77F], [0xA781, 0xA781], [0xA783, 0xA783], [0xA785, 0xA785], [0xA787, 0xA787], [0xA78C, 0xA78C], [0xFB00, 0xFB06], [0xFB13, 0xFB17], [0xFF41, 0xFF5A]]; -Lt = [[0x01C5, 0x01C5], [0x01C8, 0x01C8], [0x01CB, 0x01CB], [0x01F2, 0x01F2], [0x1F88, 0x1F8F], [0x1F98, 0x1F9F], [0x1FA8, 0x1FAF], [0x1FBC, 0x1FBC], [0x1FCC, 0x1FCC], [0x1FFC, 0x1FFC]]; -Lm = [[0x02B0, 0x02C1], [0x02C6, 0x02D1], [0x02E0, 0x02E4], [0x02EC, 0x02EC], [0x02EE, 0x02EE], [0x0374, 0x0374], [0x037A, 0x037A], [0x0559, 0x0559], [0x0640, 0x0640], [0x06E5, 0x06E6], [0x07F4, 0x07F5], [0x07FA, 0x07FA], [0x0971, 0x0971], [0x0E46, 0x0E46], [0x0EC6, 0x0EC6], [0x10FC, 0x10FC], [0x17D7, 0x17D7], [0x1843, 0x1843], [0x1C78, 0x1C7D], [0x1D2C, 0x1D61], [0x1D78, 0x1D78], [0x1D9B, 0x1DBF], [0x2090, 0x2094], [0x2C7D, 0x2C7D], [0x2D6F, 0x2D6F], [0x2E2F, 0x2E2F], [0x3005, 0x3005], [0x3031, 0x3035], [0x303B, 0x303B], [0x309D, 0x309E], [0x30FC, 0x30FE], [0xA015, 0xA015], [0xA60C, 0xA60C], [0xA67F, 0xA67F], [0xA717, 0xA71F], [0xA770, 0xA770], [0xA788, 0xA788], [0xFF70, 0xFF70], [0xFF9E, 0xFF9F]]; -Lo = [[0x01BB, 0x01BB], [0x01C0, 0x01C3], [0x0294, 0x0294], [0x05D0, 0x05EA], [0x05F0, 0x05F2], [0x0621, 0x063F], [0x0641, 0x064A], [0x066E, 0x066F], [0x0671, 0x06D3], [0x06D5, 0x06D5], [0x06EE, 0x06EF], [0x06FA, 0x06FC], [0x06FF, 0x06FF], [0x0710, 0x0710], [0x0712, 0x072F], [0x074D, 0x07A5], [0x07B1, 0x07B1], [0x07CA, 0x07EA], [0x0904, 0x0939], [0x093D, 0x093D], [0x0950, 0x0950], [0x0958, 0x0961], [0x0972, 0x0972], [0x097B, 0x097F], [0x0985, 0x098C], [0x098F, 0x0990], [0x0993, 0x09A8], [0x09AA, 0x09B0], [0x09B2, 0x09B2], [0x09B6, 0x09B9], [0x09BD, 0x09BD], [0x09CE, 0x09CE], [0x09DC, 0x09DD], [0x09DF, 0x09E1], [0x09F0, 0x09F1], [0x0A05, 0x0A0A], [0x0A0F, 0x0A10], [0x0A13, 0x0A28], [0x0A2A, 0x0A30], [0x0A32, 0x0A33], [0x0A35, 0x0A36], [0x0A38, 0x0A39], [0x0A59, 0x0A5C], [0x0A5E, 0x0A5E], [0x0A72, 0x0A74], [0x0A85, 0x0A8D], [0x0A8F, 0x0A91], [0x0A93, 0x0AA8], [0x0AAA, 0x0AB0], [0x0AB2, 0x0AB3], [0x0AB5, 0x0AB9], [0x0ABD, 0x0ABD], [0x0AD0, 0x0AD0], [0x0AE0, 0x0AE1], [0x0B05, 0x0B0C], [0x0B0F, 0x0B10], [0x0B13, 0x0B28], [0x0B2A, 0x0B30], [0x0B32, 0x0B33], [0x0B35, 0x0B39], [0x0B3D, 0x0B3D], [0x0B5C, 0x0B5D], [0x0B5F, 0x0B61], [0x0B71, 0x0B71], [0x0B83, 0x0B83], [0x0B85, 0x0B8A], [0x0B8E, 0x0B90], [0x0B92, 0x0B95], [0x0B99, 0x0B9A], [0x0B9C, 0x0B9C], [0x0B9E, 0x0B9F], [0x0BA3, 0x0BA4], [0x0BA8, 0x0BAA], [0x0BAE, 0x0BB9], [0x0BD0, 0x0BD0], [0x0C05, 0x0C0C], [0x0C0E, 0x0C10], [0x0C12, 0x0C28], [0x0C2A, 0x0C33], [0x0C35, 0x0C39], [0x0C3D, 0x0C3D], [0x0C58, 0x0C59], [0x0C60, 0x0C61], [0x0C85, 0x0C8C], [0x0C8E, 0x0C90], [0x0C92, 0x0CA8], [0x0CAA, 0x0CB3], [0x0CB5, 0x0CB9], [0x0CBD, 0x0CBD], [0x0CDE, 0x0CDE], [0x0CE0, 0x0CE1], [0x0D05, 0x0D0C], [0x0D0E, 0x0D10], [0x0D12, 0x0D28], [0x0D2A, 0x0D39], [0x0D3D, 0x0D3D], [0x0D60, 0x0D61], [0x0D7A, 0x0D7F], [0x0D85, 0x0D96], [0x0D9A, 0x0DB1], [0x0DB3, 0x0DBB], [0x0DBD, 0x0DBD], [0x0DC0, 0x0DC6], [0x0E01, 0x0E30], [0x0E32, 0x0E33], [0x0E40, 0x0E45], [0x0E81, 0x0E82], [0x0E84, 0x0E84], [0x0E87, 0x0E88], [0x0E8A, 0x0E8A], [0x0E8D, 0x0E8D], [0x0E94, 0x0E97], [0x0E99, 0x0E9F], [0x0EA1, 0x0EA3], [0x0EA5, 0x0EA5], [0x0EA7, 0x0EA7], [0x0EAA, 0x0EAB], [0x0EAD, 0x0EB0], [0x0EB2, 0x0EB3], [0x0EBD, 0x0EBD], [0x0EC0, 0x0EC4], [0x0EDC, 0x0EDD], [0x0F00, 0x0F00], [0x0F40, 0x0F47], [0x0F49, 0x0F6C], [0x0F88, 0x0F8B], [0x1000, 0x102A], [0x103F, 0x103F], [0x1050, 0x1055], [0x105A, 0x105D], [0x1061, 0x1061], [0x1065, 0x1066], [0x106E, 0x1070], [0x1075, 0x1081], [0x108E, 0x108E], [0x10D0, 0x10FA], [0x1100, 0x1159], [0x115F, 0x11A2], [0x11A8, 0x11F9], [0x1200, 0x1248], [0x124A, 0x124D], [0x1250, 0x1256], [0x1258, 0x1258], [0x125A, 0x125D], [0x1260, 0x1288], [0x128A, 0x128D], [0x1290, 0x12B0], [0x12B2, 0x12B5], [0x12B8, 0x12BE], [0x12C0, 0x12C0], [0x12C2, 0x12C5], [0x12C8, 0x12D6], [0x12D8, 0x1310], [0x1312, 0x1315], [0x1318, 0x135A], [0x1380, 0x138F], [0x13A0, 0x13F4], [0x1401, 0x166C], [0x166F, 0x1676], [0x1681, 0x169A], [0x16A0, 0x16EA], [0x1700, 0x170C], [0x170E, 0x1711], [0x1720, 0x1731], [0x1740, 0x1751], [0x1760, 0x176C], [0x176E, 0x1770], [0x1780, 0x17B3], [0x17DC, 0x17DC], [0x1820, 0x1842], [0x1844, 0x1877], [0x1880, 0x18A8], [0x18AA, 0x18AA], [0x1900, 0x191C], [0x1950, 0x196D], [0x1970, 0x1974], [0x1980, 0x19A9], [0x19C1, 0x19C7], [0x1A00, 0x1A16], [0x1B05, 0x1B33], [0x1B45, 0x1B4B], [0x1B83, 0x1BA0], [0x1BAE, 0x1BAF], [0x1C00, 0x1C23], [0x1C4D, 0x1C4F], [0x1C5A, 0x1C77], [0x2135, 0x2138], [0x2D30, 0x2D65], [0x2D80, 0x2D96], [0x2DA0, 0x2DA6], [0x2DA8, 0x2DAE], [0x2DB0, 0x2DB6], [0x2DB8, 0x2DBE], [0x2DC0, 0x2DC6], [0x2DC8, 0x2DCE], [0x2DD0, 0x2DD6], [0x2DD8, 0x2DDE], [0x3006, 0x3006], [0x303C, 0x303C], [0x3041, 0x3096], [0x309F, 0x309F], [0x30A1, 0x30FA], [0x30FF, 0x30FF], [0x3105, 0x312D], [0x3131, 0x318E], [0x31A0, 0x31B7], [0x31F0, 0x31FF], [0x3400, 0x4DB5], [0x4E00, 0x9FC3], [0xA000, 0xA014], [0xA016, 0xA48C], [0xA500, 0xA60B], [0xA610, 0xA61F], [0xA62A, 0xA62B], [0xA66E, 0xA66E], [0xA7FB, 0xA801], [0xA803, 0xA805], [0xA807, 0xA80A], [0xA80C, 0xA822], [0xA840, 0xA873], [0xA882, 0xA8B3], [0xA90A, 0xA925], [0xA930, 0xA946], [0xAA00, 0xAA28], [0xAA40, 0xAA42], [0xAA44, 0xAA4B], [0xAC00, 0xD7A3], [0xF900, 0xFA2D], [0xFA30, 0xFA6A], [0xFA70, 0xFAD9], [0xFB1D, 0xFB1D], [0xFB1F, 0xFB28], [0xFB2A, 0xFB36], [0xFB38, 0xFB3C], [0xFB3E, 0xFB3E], [0xFB40, 0xFB41], [0xFB43, 0xFB44], [0xFB46, 0xFBB1], [0xFBD3, 0xFD3D], [0xFD50, 0xFD8F], [0xFD92, 0xFDC7], [0xFDF0, 0xFDFB], [0xFE70, 0xFE74], [0xFE76, 0xFEFC], [0xFF66, 0xFF6F], [0xFF71, 0xFF9D], [0xFFA0, 0xFFBE], [0xFFC2, 0xFFC7], [0xFFCA, 0xFFCF], [0xFFD2, 0xFFD7], [0xFFDA, 0xFFDC]]; -Nl = [[0x16EE, 0x16F0], [0x2160, 0x2182], [0x2185, 0x2188], [0x3007, 0x3007], [0x3021, 0x3029], [0x3038, 0x303A]]; -Mn = [[0x0300, 0x036F], [0x0483, 0x0487], [0x0591, 0x05BD], [0x05BF, 0x05BF], [0x05C1, 0x05C2], [0x05C4, 0x05C5], [0x05C7, 0x05C7], [0x0610, 0x061A], [0x064B, 0x065E], [0x0670, 0x0670], [0x06D6, 0x06DC], [0x06DF, 0x06E4], [0x06E7, 0x06E8], [0x06EA, 0x06ED], [0x0711, 0x0711], [0x0730, 0x074A], [0x07A6, 0x07B0], [0x07EB, 0x07F3], [0x0901, 0x0902], [0x093C, 0x093C], [0x0941, 0x0948], [0x094D, 0x094D], [0x0951, 0x0954], [0x0962, 0x0963], [0x0981, 0x0981], [0x09BC, 0x09BC], [0x09C1, 0x09C4], [0x09CD, 0x09CD], [0x09E2, 0x09E3], [0x0A01, 0x0A02], [0x0A3C, 0x0A3C], [0x0A41, 0x0A42], [0x0A47, 0x0A48], [0x0A4B, 0x0A4D], [0x0A51, 0x0A51], [0x0A70, 0x0A71], [0x0A75, 0x0A75], [0x0A81, 0x0A82], [0x0ABC, 0x0ABC], [0x0AC1, 0x0AC5], [0x0AC7, 0x0AC8], [0x0ACD, 0x0ACD], [0x0AE2, 0x0AE3], [0x0B01, 0x0B01], [0x0B3C, 0x0B3C], [0x0B3F, 0x0B3F], [0x0B41, 0x0B44], [0x0B4D, 0x0B4D], [0x0B56, 0x0B56], [0x0B62, 0x0B63], [0x0B82, 0x0B82], [0x0BC0, 0x0BC0], [0x0BCD, 0x0BCD], [0x0C3E, 0x0C40], [0x0C46, 0x0C48], [0x0C4A, 0x0C4D], [0x0C55, 0x0C56], [0x0C62, 0x0C63], [0x0CBC, 0x0CBC], [0x0CBF, 0x0CBF], [0x0CC6, 0x0CC6], [0x0CCC, 0x0CCD], [0x0CE2, 0x0CE3], [0x0D41, 0x0D44], [0x0D4D, 0x0D4D], [0x0D62, 0x0D63], [0x0DCA, 0x0DCA], [0x0DD2, 0x0DD4], [0x0DD6, 0x0DD6], [0x0E31, 0x0E31], [0x0E34, 0x0E3A], [0x0E47, 0x0E4E], [0x0EB1, 0x0EB1], [0x0EB4, 0x0EB9], [0x0EBB, 0x0EBC], [0x0EC8, 0x0ECD], [0x0F18, 0x0F19], [0x0F35, 0x0F35], [0x0F37, 0x0F37], [0x0F39, 0x0F39], [0x0F71, 0x0F7E], [0x0F80, 0x0F84], [0x0F86, 0x0F87], [0x0F90, 0x0F97], [0x0F99, 0x0FBC], [0x0FC6, 0x0FC6], [0x102D, 0x1030], [0x1032, 0x1037], [0x1039, 0x103A], [0x103D, 0x103E], [0x1058, 0x1059], [0x105E, 0x1060], [0x1071, 0x1074], [0x1082, 0x1082], [0x1085, 0x1086], [0x108D, 0x108D], [0x135F, 0x135F], [0x1712, 0x1714], [0x1732, 0x1734], [0x1752, 0x1753], [0x1772, 0x1773], [0x17B7, 0x17BD], [0x17C6, 0x17C6], [0x17C9, 0x17D3], [0x17DD, 0x17DD], [0x180B, 0x180D], [0x18A9, 0x18A9], [0x1920, 0x1922], [0x1927, 0x1928], [0x1932, 0x1932], [0x1939, 0x193B], [0x1A17, 0x1A18], [0x1B00, 0x1B03], [0x1B34, 0x1B34], [0x1B36, 0x1B3A], [0x1B3C, 0x1B3C], [0x1B42, 0x1B42], [0x1B6B, 0x1B73], [0x1B80, 0x1B81], [0x1BA2, 0x1BA5], [0x1BA8, 0x1BA9], [0x1C2C, 0x1C33], [0x1C36, 0x1C37], [0x1DC0, 0x1DE6], [0x1DFE, 0x1DFF], [0x20D0, 0x20DC], [0x20E1, 0x20E1], [0x20E5, 0x20F0], [0x2DE0, 0x2DFF], [0x302A, 0x302F], [0x3099, 0x309A], [0xA66F, 0xA66F], [0xA67C, 0xA67D], [0xA802, 0xA802], [0xA806, 0xA806], [0xA80B, 0xA80B], [0xA825, 0xA826], [0xA8C4, 0xA8C4], [0xA926, 0xA92D], [0xA947, 0xA951], [0xAA29, 0xAA2E], [0xAA31, 0xAA32], [0xAA35, 0xAA36], [0xAA43, 0xAA43], [0xAA4C, 0xAA4C], [0xFB1E, 0xFB1E], [0xFE00, 0xFE0F], [0xFE20, 0xFE26]]; -Mc = [[0x0903, 0x0903], [0x093E, 0x0940], [0x0949, 0x094C], [0x0982, 0x0983], [0x09BE, 0x09C0], [0x09C7, 0x09C8], [0x09CB, 0x09CC], [0x09D7, 0x09D7], [0x0A03, 0x0A03], [0x0A3E, 0x0A40], [0x0A83, 0x0A83], [0x0ABE, 0x0AC0], [0x0AC9, 0x0AC9], [0x0ACB, 0x0ACC], [0x0B02, 0x0B03], [0x0B3E, 0x0B3E], [0x0B40, 0x0B40], [0x0B47, 0x0B48], [0x0B4B, 0x0B4C], [0x0B57, 0x0B57], [0x0BBE, 0x0BBF], [0x0BC1, 0x0BC2], [0x0BC6, 0x0BC8], [0x0BCA, 0x0BCC], [0x0BD7, 0x0BD7], [0x0C01, 0x0C03], [0x0C41, 0x0C44], [0x0C82, 0x0C83], [0x0CBE, 0x0CBE], [0x0CC0, 0x0CC4], [0x0CC7, 0x0CC8], [0x0CCA, 0x0CCB], [0x0CD5, 0x0CD6], [0x0D02, 0x0D03], [0x0D3E, 0x0D40], [0x0D46, 0x0D48], [0x0D4A, 0x0D4C], [0x0D57, 0x0D57], [0x0D82, 0x0D83], [0x0DCF, 0x0DD1], [0x0DD8, 0x0DDF], [0x0DF2, 0x0DF3], [0x0F3E, 0x0F3F], [0x0F7F, 0x0F7F], [0x102B, 0x102C], [0x1031, 0x1031], [0x1038, 0x1038], [0x103B, 0x103C], [0x1056, 0x1057], [0x1062, 0x1064], [0x1067, 0x106D], [0x1083, 0x1084], [0x1087, 0x108C], [0x108F, 0x108F], [0x17B6, 0x17B6], [0x17BE, 0x17C5], [0x17C7, 0x17C8], [0x1923, 0x1926], [0x1929, 0x192B], [0x1930, 0x1931], [0x1933, 0x1938], [0x19B0, 0x19C0], [0x19C8, 0x19C9], [0x1A19, 0x1A1B], [0x1B04, 0x1B04], [0x1B35, 0x1B35], [0x1B3B, 0x1B3B], [0x1B3D, 0x1B41], [0x1B43, 0x1B44], [0x1B82, 0x1B82], [0x1BA1, 0x1BA1], [0x1BA6, 0x1BA7], [0x1BAA, 0x1BAA], [0x1C24, 0x1C2B], [0x1C34, 0x1C35], [0xA823, 0xA824], [0xA827, 0xA827], [0xA880, 0xA881], [0xA8B4, 0xA8C3], [0xA952, 0xA953], [0xAA2F, 0xAA30], [0xAA33, 0xAA34], [0xAA4D, 0xAA4D]]; -Nd = [[0x0030, 0x0039], [0x0660, 0x0669], [0x06F0, 0x06F9], [0x07C0, 0x07C9], [0x0966, 0x096F], [0x09E6, 0x09EF], [0x0A66, 0x0A6F], [0x0AE6, 0x0AEF], [0x0B66, 0x0B6F], [0x0BE6, 0x0BEF], [0x0C66, 0x0C6F], [0x0CE6, 0x0CEF], [0x0D66, 0x0D6F], [0x0E50, 0x0E59], [0x0ED0, 0x0ED9], [0x0F20, 0x0F29], [0x1040, 0x1049], [0x1090, 0x1099], [0x17E0, 0x17E9], [0x1810, 0x1819], [0x1946, 0x194F], [0x19D0, 0x19D9], [0x1B50, 0x1B59], [0x1BB0, 0x1BB9], [0x1C40, 0x1C49], [0x1C50, 0x1C59], [0xA620, 0xA629], [0xA8D0, 0xA8D9], [0xA900, 0xA909], [0xAA50, 0xAA59], [0xFF10, 0xFF19]]; -Pc = [[0x005F, 0x005F], [0x203F, 0x2040], [0x2054, 0x2054], [0xFE33, 0xFE34], [0xFE4D, 0xFE4F], [0xFF3F, 0xFF3F]]; - -UnicodeLetterLu = []; -UnicodeLetterLl = []; -UnicodeLetterLt = []; -UnicodeLetterLm = []; -UnicodeLetterLo = []; -UnicodeLetterNl = []; -UnicodeLetterMn = []; -UnicodeLetterMc = []; -UnicodeLetterNd = []; -UnicodeLetterPc = []; - -for (indexI = 0; indexI < Lu.length; indexI++) { - for (indexJ = Lu[indexI][0]; indexJ <= Lu[indexI][1]; indexJ++) { - UnicodeLetterLu[indexJ] = true; - } -} -for (indexI = 0; indexI < Ll.length; indexI++) { - for (indexJ = Ll[indexI][0]; indexJ <= Ll[indexI][1]; indexJ++) { - UnicodeLetterLl[indexJ] = true; - } -} -for (indexI = 0; indexI < Lt.length; indexI++) { - for (indexJ = Lt[indexI][0]; indexJ <= Lt[indexI][1]; indexJ++) { - UnicodeLetterLt[indexJ] = true; - } -} -for (indexI = 0; indexI < Lm.length; indexI++) { - for (indexJ = Lm[indexI][0]; indexJ <= Lm[indexI][1]; indexJ++) { - UnicodeLetterLm[indexJ] = true; - } -} -for (indexI = 0; indexI < Lo.length; indexI++) { - for (indexJ = Lo[indexI][0]; indexJ <= Lo[indexI][1]; indexJ++) { - UnicodeLetterLo[indexJ] = true; - } -} -for (indexI = 0; indexI < Nl.length; indexI++) { - for (indexJ = Nl[indexI][0]; indexJ <= Nl[indexI][1]; indexJ++) { - UnicodeLetterNl[indexJ] = true; - } -} -for (indexI = 0; indexI < Mn.length; indexI++) { - for (indexJ = Mn[indexI][0]; indexJ <= Mn[indexI][1]; indexJ++) { - UnicodeLetterMn[indexJ] = true; - } -} -for (indexI = 0; indexI < Mc.length; indexI++) { - for (indexJ = Mc[indexI][0]; indexJ <= Mc[indexI][1]; indexJ++) { - UnicodeLetterMc[indexJ] = true; - } -} -for (indexI = 0; indexI < Nd.length; indexI++) { - for (indexJ = Nd[indexI][0]; indexJ <= Nd[indexI][1]; indexJ++) { - UnicodeLetterNd[indexJ] = true; - } -} -for (indexI = 0; indexI < Pc.length; indexI++) { - for (indexJ = Pc[indexI][0]; indexJ <= Pc[indexI][1]; indexJ++) { - UnicodeLetterPc[indexJ] = true; - } -} - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; -for (index = 0; index <= 65535; index++) { - if ((UnicodeLetterLu[index] === undefined) && (UnicodeLetterLl[index] === undefined) && (UnicodeLetterLt[index] === undefined) && (UnicodeLetterLm[index] === undefined) && (UnicodeLetterLo[index] === undefined) && (UnicodeLetterNl[index] === undefined) && (UnicodeLetterMn[index] === undefined) && (UnicodeLetterMc[index] === undefined) && (UnicodeLetterNd[index] === undefined) && (UnicodeLetterPc[index] === undefined) && (index !== 0x0024) && (index !== 0x005F)) { - try { - var hex = decimalToHexString(index); - var identifier = "$\\u" + hex + "1"; - eval(identifier + " = 1"); - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; - } catch (e) { - } - count++; - } -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/ES3/Unicode/Unicode_510/S7.6_A5.3_T2.js b/tests/ES3/Unicode/Unicode_510/S7.6_A5.3_T2.js deleted file mode 100644 index ba39a6c03..000000000 --- a/tests/ES3/Unicode/Unicode_510/S7.6_A5.3_T2.js +++ /dev/null @@ -1,155 +0,0 @@ -// Copyright 2009 the Sputnik authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @name: S7.6_A5.3_T2; - * @section: 7.6, 6; - * @assertion: If a UnicodeEscapeSequence put a character into an identifier that would otherwise be illegal, throw SyntaxError; - * @description: Complex test with eval; -*/ - -//CHECK -Lu = [[0x0041, 0x005A], [0x00C0, 0x00D6], [0x00D8, 0x00DE], [0x0100, 0x0100], [0x0102, 0x0102], [0x0104, 0x0104], [0x0106, 0x0106], [0x0108, 0x0108], [0x010A, 0x010A], [0x010C, 0x010C], [0x010E, 0x010E], [0x0110, 0x0110], [0x0112, 0x0112], [0x0114, 0x0114], [0x0116, 0x0116], [0x0118, 0x0118], [0x011A, 0x011A], [0x011C, 0x011C], [0x011E, 0x011E], [0x0120, 0x0120], [0x0122, 0x0122], [0x0124, 0x0124], [0x0126, 0x0126], [0x0128, 0x0128], [0x012A, 0x012A], [0x012C, 0x012C], [0x012E, 0x012E], [0x0130, 0x0130], [0x0132, 0x0132], [0x0134, 0x0134], [0x0136, 0x0136], [0x0139, 0x0139], [0x013B, 0x013B], [0x013D, 0x013D], [0x013F, 0x013F], [0x0141, 0x0141], [0x0143, 0x0143], [0x0145, 0x0145], [0x0147, 0x0147], [0x014A, 0x014A], [0x014C, 0x014C], [0x014E, 0x014E], [0x0150, 0x0150], [0x0152, 0x0152], [0x0154, 0x0154], [0x0156, 0x0156], [0x0158, 0x0158], [0x015A, 0x015A], [0x015C, 0x015C], [0x015E, 0x015E], [0x0160, 0x0160], [0x0162, 0x0162], [0x0164, 0x0164], [0x0166, 0x0166], [0x0168, 0x0168], [0x016A, 0x016A], [0x016C, 0x016C], [0x016E, 0x016E], [0x0170, 0x0170], [0x0172, 0x0172], [0x0174, 0x0174], [0x0176, 0x0176], [0x0178, 0x0179], [0x017B, 0x017B], [0x017D, 0x017D], [0x0181, 0x0182], [0x0184, 0x0184], [0x0186, 0x0187], [0x0189, 0x018B], [0x018E, 0x0191], [0x0193, 0x0194], [0x0196, 0x0198], [0x019C, 0x019D], [0x019F, 0x01A0], [0x01A2, 0x01A2], [0x01A4, 0x01A4], [0x01A6, 0x01A7], [0x01A9, 0x01A9], [0x01AC, 0x01AC], [0x01AE, 0x01AF], [0x01B1, 0x01B3], [0x01B5, 0x01B5], [0x01B7, 0x01B8], [0x01BC, 0x01BC], [0x01C4, 0x01C4], [0x01C7, 0x01C7], [0x01CA, 0x01CA], [0x01CD, 0x01CD], [0x01CF, 0x01CF], [0x01D1, 0x01D1], [0x01D3, 0x01D3], [0x01D5, 0x01D5], [0x01D7, 0x01D7], [0x01D9, 0x01D9], [0x01DB, 0x01DB], [0x01DE, 0x01DE], [0x01E0, 0x01E0], [0x01E2, 0x01E2], [0x01E4, 0x01E4], [0x01E6, 0x01E6], [0x01E8, 0x01E8], [0x01EA, 0x01EA], [0x01EC, 0x01EC], [0x01EE, 0x01EE], [0x01F1, 0x01F1], [0x01F4, 0x01F4], [0x01F6, 0x01F8], [0x01FA, 0x01FA], [0x01FC, 0x01FC], [0x01FE, 0x01FE], [0x0200, 0x0200], [0x0202, 0x0202], [0x0204, 0x0204], [0x0206, 0x0206], [0x0208, 0x0208], [0x020A, 0x020A], [0x020C, 0x020C], [0x020E, 0x020E], [0x0210, 0x0210], [0x0212, 0x0212], [0x0214, 0x0214], [0x0216, 0x0216], [0x0218, 0x0218], [0x021A, 0x021A], [0x021C, 0x021C], [0x021E, 0x021E], [0x0220, 0x0220], [0x0222, 0x0222], [0x0224, 0x0224], [0x0226, 0x0226], [0x0228, 0x0228], [0x022A, 0x022A], [0x022C, 0x022C], [0x022E, 0x022E], [0x0230, 0x0230], [0x0232, 0x0232], [0x023A, 0x023B], [0x023D, 0x023E], [0x0241, 0x0241], [0x0243, 0x0246], [0x0248, 0x0248], [0x024A, 0x024A], [0x024C, 0x024C], [0x024E, 0x024E], [0x0370, 0x0370], [0x0372, 0x0372], [0x0376, 0x0376], [0x0386, 0x0386], [0x0388, 0x038A], [0x038C, 0x038C], [0x038E, 0x038F], [0x0391, 0x03A1], [0x03A3, 0x03AB], [0x03CF, 0x03CF], [0x03D2, 0x03D4], [0x03D8, 0x03D8], [0x03DA, 0x03DA], [0x03DC, 0x03DC], [0x03DE, 0x03DE], [0x03E0, 0x03E0], [0x03E2, 0x03E2], [0x03E4, 0x03E4], [0x03E6, 0x03E6], [0x03E8, 0x03E8], [0x03EA, 0x03EA], [0x03EC, 0x03EC], [0x03EE, 0x03EE], [0x03F4, 0x03F4], [0x03F7, 0x03F7], [0x03F9, 0x03FA], [0x03FD, 0x042F], [0x0460, 0x0460], [0x0462, 0x0462], [0x0464, 0x0464], [0x0466, 0x0466], [0x0468, 0x0468], [0x046A, 0x046A], [0x046C, 0x046C], [0x046E, 0x046E], [0x0470, 0x0470], [0x0472, 0x0472], [0x0474, 0x0474], [0x0476, 0x0476], [0x0478, 0x0478], [0x047A, 0x047A], [0x047C, 0x047C], [0x047E, 0x047E], [0x0480, 0x0480], [0x048A, 0x048A], [0x048C, 0x048C], [0x048E, 0x048E], [0x0490, 0x0490], [0x0492, 0x0492], [0x0494, 0x0494], [0x0496, 0x0496], [0x0498, 0x0498], [0x049A, 0x049A], [0x049C, 0x049C], [0x049E, 0x049E], [0x04A0, 0x04A0], [0x04A2, 0x04A2], [0x04A4, 0x04A4], [0x04A6, 0x04A6], [0x04A8, 0x04A8], [0x04AA, 0x04AA], [0x04AC, 0x04AC], [0x04AE, 0x04AE], [0x04B0, 0x04B0], [0x04B2, 0x04B2], [0x04B4, 0x04B4], [0x04B6, 0x04B6], [0x04B8, 0x04B8], [0x04BA, 0x04BA], [0x04BC, 0x04BC], [0x04BE, 0x04BE], [0x04C0, 0x04C1], [0x04C3, 0x04C3], [0x04C5, 0x04C5], [0x04C7, 0x04C7], [0x04C9, 0x04C9], [0x04CB, 0x04CB], [0x04CD, 0x04CD], [0x04D0, 0x04D0], [0x04D2, 0x04D2], [0x04D4, 0x04D4], [0x04D6, 0x04D6], [0x04D8, 0x04D8], [0x04DA, 0x04DA], [0x04DC, 0x04DC], [0x04DE, 0x04DE], [0x04E0, 0x04E0], [0x04E2, 0x04E2], [0x04E4, 0x04E4], [0x04E6, 0x04E6], [0x04E8, 0x04E8], [0x04EA, 0x04EA], [0x04EC, 0x04EC], [0x04EE, 0x04EE], [0x04F0, 0x04F0], [0x04F2, 0x04F2], [0x04F4, 0x04F4], [0x04F6, 0x04F6], [0x04F8, 0x04F8], [0x04FA, 0x04FA], [0x04FC, 0x04FC], [0x04FE, 0x04FE], [0x0500, 0x0500], [0x0502, 0x0502], [0x0504, 0x0504], [0x0506, 0x0506], [0x0508, 0x0508], [0x050A, 0x050A], [0x050C, 0x050C], [0x050E, 0x050E], [0x0510, 0x0510], [0x0512, 0x0512], [0x0514, 0x0514], [0x0516, 0x0516], [0x0518, 0x0518], [0x051A, 0x051A], [0x051C, 0x051C], [0x051E, 0x051E], [0x0520, 0x0520], [0x0522, 0x0522], [0x0531, 0x0556], [0x10A0, 0x10C5], [0x1E00, 0x1E00], [0x1E02, 0x1E02], [0x1E04, 0x1E04], [0x1E06, 0x1E06], [0x1E08, 0x1E08], [0x1E0A, 0x1E0A], [0x1E0C, 0x1E0C], [0x1E0E, 0x1E0E], [0x1E10, 0x1E10], [0x1E12, 0x1E12], [0x1E14, 0x1E14], [0x1E16, 0x1E16], [0x1E18, 0x1E18], [0x1E1A, 0x1E1A], [0x1E1C, 0x1E1C], [0x1E1E, 0x1E1E], [0x1E20, 0x1E20], [0x1E22, 0x1E22], [0x1E24, 0x1E24], [0x1E26, 0x1E26], [0x1E28, 0x1E28], [0x1E2A, 0x1E2A], [0x1E2C, 0x1E2C], [0x1E2E, 0x1E2E], [0x1E30, 0x1E30], [0x1E32, 0x1E32], [0x1E34, 0x1E34], [0x1E36, 0x1E36], [0x1E38, 0x1E38], [0x1E3A, 0x1E3A], [0x1E3C, 0x1E3C], [0x1E3E, 0x1E3E], [0x1E40, 0x1E40], [0x1E42, 0x1E42], [0x1E44, 0x1E44], [0x1E46, 0x1E46], [0x1E48, 0x1E48], [0x1E4A, 0x1E4A], [0x1E4C, 0x1E4C], [0x1E4E, 0x1E4E], [0x1E50, 0x1E50], [0x1E52, 0x1E52], [0x1E54, 0x1E54], [0x1E56, 0x1E56], [0x1E58, 0x1E58], [0x1E5A, 0x1E5A], [0x1E5C, 0x1E5C], [0x1E5E, 0x1E5E], [0x1E60, 0x1E60], [0x1E62, 0x1E62], [0x1E64, 0x1E64], [0x1E66, 0x1E66], [0x1E68, 0x1E68], [0x1E6A, 0x1E6A], [0x1E6C, 0x1E6C], [0x1E6E, 0x1E6E], [0x1E70, 0x1E70], [0x1E72, 0x1E72], [0x1E74, 0x1E74], [0x1E76, 0x1E76], [0x1E78, 0x1E78], [0x1E7A, 0x1E7A], [0x1E7C, 0x1E7C], [0x1E7E, 0x1E7E], [0x1E80, 0x1E80], [0x1E82, 0x1E82], [0x1E84, 0x1E84], [0x1E86, 0x1E86], [0x1E88, 0x1E88], [0x1E8A, 0x1E8A], [0x1E8C, 0x1E8C], [0x1E8E, 0x1E8E], [0x1E90, 0x1E90], [0x1E92, 0x1E92], [0x1E94, 0x1E94], [0x1E9E, 0x1E9E], [0x1EA0, 0x1EA0], [0x1EA2, 0x1EA2], [0x1EA4, 0x1EA4], [0x1EA6, 0x1EA6], [0x1EA8, 0x1EA8], [0x1EAA, 0x1EAA], [0x1EAC, 0x1EAC], [0x1EAE, 0x1EAE], [0x1EB0, 0x1EB0], [0x1EB2, 0x1EB2], [0x1EB4, 0x1EB4], [0x1EB6, 0x1EB6], [0x1EB8, 0x1EB8], [0x1EBA, 0x1EBA], [0x1EBC, 0x1EBC], [0x1EBE, 0x1EBE], [0x1EC0, 0x1EC0], [0x1EC2, 0x1EC2], [0x1EC4, 0x1EC4], [0x1EC6, 0x1EC6], [0x1EC8, 0x1EC8], [0x1ECA, 0x1ECA], [0x1ECC, 0x1ECC], [0x1ECE, 0x1ECE], [0x1ED0, 0x1ED0], [0x1ED2, 0x1ED2], [0x1ED4, 0x1ED4], [0x1ED6, 0x1ED6], [0x1ED8, 0x1ED8], [0x1EDA, 0x1EDA], [0x1EDC, 0x1EDC], [0x1EDE, 0x1EDE], [0x1EE0, 0x1EE0], [0x1EE2, 0x1EE2], [0x1EE4, 0x1EE4], [0x1EE6, 0x1EE6], [0x1EE8, 0x1EE8], [0x1EEA, 0x1EEA], [0x1EEC, 0x1EEC], [0x1EEE, 0x1EEE], [0x1EF0, 0x1EF0], [0x1EF2, 0x1EF2], [0x1EF4, 0x1EF4], [0x1EF6, 0x1EF6], [0x1EF8, 0x1EF8], [0x1EFA, 0x1EFA], [0x1EFC, 0x1EFC], [0x1EFE, 0x1EFE], [0x1F08, 0x1F0F], [0x1F18, 0x1F1D], [0x1F28, 0x1F2F], [0x1F38, 0x1F3F], [0x1F48, 0x1F4D], [0x1F59, 0x1F59], [0x1F5B, 0x1F5B], [0x1F5D, 0x1F5D], [0x1F5F, 0x1F5F], [0x1F68, 0x1F6F], [0x1FB8, 0x1FBB], [0x1FC8, 0x1FCB], [0x1FD8, 0x1FDB], [0x1FE8, 0x1FEC], [0x1FF8, 0x1FFB], [0x2102, 0x2102], [0x2107, 0x2107], [0x210B, 0x210D], [0x2110, 0x2112], [0x2115, 0x2115], [0x2119, 0x211D], [0x2124, 0x2124], [0x2126, 0x2126], [0x2128, 0x2128], [0x212A, 0x212D], [0x2130, 0x2133], [0x213E, 0x213F], [0x2145, 0x2145], [0x2183, 0x2183], [0x2C00, 0x2C2E], [0x2C60, 0x2C60], [0x2C62, 0x2C64], [0x2C67, 0x2C67], [0x2C69, 0x2C69], [0x2C6B, 0x2C6B], [0x2C6D, 0x2C6F], [0x2C72, 0x2C72], [0x2C75, 0x2C75], [0x2C80, 0x2C80], [0x2C82, 0x2C82], [0x2C84, 0x2C84], [0x2C86, 0x2C86], [0x2C88, 0x2C88], [0x2C8A, 0x2C8A], [0x2C8C, 0x2C8C], [0x2C8E, 0x2C8E], [0x2C90, 0x2C90], [0x2C92, 0x2C92], [0x2C94, 0x2C94], [0x2C96, 0x2C96], [0x2C98, 0x2C98], [0x2C9A, 0x2C9A], [0x2C9C, 0x2C9C], [0x2C9E, 0x2C9E], [0x2CA0, 0x2CA0], [0x2CA2, 0x2CA2], [0x2CA4, 0x2CA4], [0x2CA6, 0x2CA6], [0x2CA8, 0x2CA8], [0x2CAA, 0x2CAA], [0x2CAC, 0x2CAC], [0x2CAE, 0x2CAE], [0x2CB0, 0x2CB0], [0x2CB2, 0x2CB2], [0x2CB4, 0x2CB4], [0x2CB6, 0x2CB6], [0x2CB8, 0x2CB8], [0x2CBA, 0x2CBA], [0x2CBC, 0x2CBC], [0x2CBE, 0x2CBE], [0x2CC0, 0x2CC0], [0x2CC2, 0x2CC2], [0x2CC4, 0x2CC4], [0x2CC6, 0x2CC6], [0x2CC8, 0x2CC8], [0x2CCA, 0x2CCA], [0x2CCC, 0x2CCC], [0x2CCE, 0x2CCE], [0x2CD0, 0x2CD0], [0x2CD2, 0x2CD2], [0x2CD4, 0x2CD4], [0x2CD6, 0x2CD6], [0x2CD8, 0x2CD8], [0x2CDA, 0x2CDA], [0x2CDC, 0x2CDC], [0x2CDE, 0x2CDE], [0x2CE0, 0x2CE0], [0x2CE2, 0x2CE2], [0xA640, 0xA640], [0xA642, 0xA642], [0xA644, 0xA644], [0xA646, 0xA646], [0xA648, 0xA648], [0xA64A, 0xA64A], [0xA64C, 0xA64C], [0xA64E, 0xA64E], [0xA650, 0xA650], [0xA652, 0xA652], [0xA654, 0xA654], [0xA656, 0xA656], [0xA658, 0xA658], [0xA65A, 0xA65A], [0xA65C, 0xA65C], [0xA65E, 0xA65E], [0xA662, 0xA662], [0xA664, 0xA664], [0xA666, 0xA666], [0xA668, 0xA668], [0xA66A, 0xA66A], [0xA66C, 0xA66C], [0xA680, 0xA680], [0xA682, 0xA682], [0xA684, 0xA684], [0xA686, 0xA686], [0xA688, 0xA688], [0xA68A, 0xA68A], [0xA68C, 0xA68C], [0xA68E, 0xA68E], [0xA690, 0xA690], [0xA692, 0xA692], [0xA694, 0xA694], [0xA696, 0xA696], [0xA722, 0xA722], [0xA724, 0xA724], [0xA726, 0xA726], [0xA728, 0xA728], [0xA72A, 0xA72A], [0xA72C, 0xA72C], [0xA72E, 0xA72E], [0xA732, 0xA732], [0xA734, 0xA734], [0xA736, 0xA736], [0xA738, 0xA738], [0xA73A, 0xA73A], [0xA73C, 0xA73C], [0xA73E, 0xA73E], [0xA740, 0xA740], [0xA742, 0xA742], [0xA744, 0xA744], [0xA746, 0xA746], [0xA748, 0xA748], [0xA74A, 0xA74A], [0xA74C, 0xA74C], [0xA74E, 0xA74E], [0xA750, 0xA750], [0xA752, 0xA752], [0xA754, 0xA754], [0xA756, 0xA756], [0xA758, 0xA758], [0xA75A, 0xA75A], [0xA75C, 0xA75C], [0xA75E, 0xA75E], [0xA760, 0xA760], [0xA762, 0xA762], [0xA764, 0xA764], [0xA766, 0xA766], [0xA768, 0xA768], [0xA76A, 0xA76A], [0xA76C, 0xA76C], [0xA76E, 0xA76E], [0xA779, 0xA779], [0xA77B, 0xA77B], [0xA77D, 0xA77E], [0xA780, 0xA780], [0xA782, 0xA782], [0xA784, 0xA784], [0xA786, 0xA786], [0xA78B, 0xA78B], [0xFF21, 0xFF3A]]; -Ll = [[0x0061, 0x007A], [0x00AA, 0x00AA], [0x00B5, 0x00B5], [0x00BA, 0x00BA], [0x00DF, 0x00F6], [0x00F8, 0x00FF], [0x0101, 0x0101], [0x0103, 0x0103], [0x0105, 0x0105], [0x0107, 0x0107], [0x0109, 0x0109], [0x010B, 0x010B], [0x010D, 0x010D], [0x010F, 0x010F], [0x0111, 0x0111], [0x0113, 0x0113], [0x0115, 0x0115], [0x0117, 0x0117], [0x0119, 0x0119], [0x011B, 0x011B], [0x011D, 0x011D], [0x011F, 0x011F], [0x0121, 0x0121], [0x0123, 0x0123], [0x0125, 0x0125], [0x0127, 0x0127], [0x0129, 0x0129], [0x012B, 0x012B], [0x012D, 0x012D], [0x012F, 0x012F], [0x0131, 0x0131], [0x0133, 0x0133], [0x0135, 0x0135], [0x0137, 0x0138], [0x013A, 0x013A], [0x013C, 0x013C], [0x013E, 0x013E], [0x0140, 0x0140], [0x0142, 0x0142], [0x0144, 0x0144], [0x0146, 0x0146], [0x0148, 0x0149], [0x014B, 0x014B], [0x014D, 0x014D], [0x014F, 0x014F], [0x0151, 0x0151], [0x0153, 0x0153], [0x0155, 0x0155], [0x0157, 0x0157], [0x0159, 0x0159], [0x015B, 0x015B], [0x015D, 0x015D], [0x015F, 0x015F], [0x0161, 0x0161], [0x0163, 0x0163], [0x0165, 0x0165], [0x0167, 0x0167], [0x0169, 0x0169], [0x016B, 0x016B], [0x016D, 0x016D], [0x016F, 0x016F], [0x0171, 0x0171], [0x0173, 0x0173], [0x0175, 0x0175], [0x0177, 0x0177], [0x017A, 0x017A], [0x017C, 0x017C], [0x017E, 0x0180], [0x0183, 0x0183], [0x0185, 0x0185], [0x0188, 0x0188], [0x018C, 0x018D], [0x0192, 0x0192], [0x0195, 0x0195], [0x0199, 0x019B], [0x019E, 0x019E], [0x01A1, 0x01A1], [0x01A3, 0x01A3], [0x01A5, 0x01A5], [0x01A8, 0x01A8], [0x01AA, 0x01AB], [0x01AD, 0x01AD], [0x01B0, 0x01B0], [0x01B4, 0x01B4], [0x01B6, 0x01B6], [0x01B9, 0x01BA], [0x01BD, 0x01BF], [0x01C6, 0x01C6], [0x01C9, 0x01C9], [0x01CC, 0x01CC], [0x01CE, 0x01CE], [0x01D0, 0x01D0], [0x01D2, 0x01D2], [0x01D4, 0x01D4], [0x01D6, 0x01D6], [0x01D8, 0x01D8], [0x01DA, 0x01DA], [0x01DC, 0x01DD], [0x01DF, 0x01DF], [0x01E1, 0x01E1], [0x01E3, 0x01E3], [0x01E5, 0x01E5], [0x01E7, 0x01E7], [0x01E9, 0x01E9], [0x01EB, 0x01EB], [0x01ED, 0x01ED], [0x01EF, 0x01F0], [0x01F3, 0x01F3], [0x01F5, 0x01F5], [0x01F9, 0x01F9], [0x01FB, 0x01FB], [0x01FD, 0x01FD], [0x01FF, 0x01FF], [0x0201, 0x0201], [0x0203, 0x0203], [0x0205, 0x0205], [0x0207, 0x0207], [0x0209, 0x0209], [0x020B, 0x020B], [0x020D, 0x020D], [0x020F, 0x020F], [0x0211, 0x0211], [0x0213, 0x0213], [0x0215, 0x0215], [0x0217, 0x0217], [0x0219, 0x0219], [0x021B, 0x021B], [0x021D, 0x021D], [0x021F, 0x021F], [0x0221, 0x0221], [0x0223, 0x0223], [0x0225, 0x0225], [0x0227, 0x0227], [0x0229, 0x0229], [0x022B, 0x022B], [0x022D, 0x022D], [0x022F, 0x022F], [0x0231, 0x0231], [0x0233, 0x0239], [0x023C, 0x023C], [0x023F, 0x0240], [0x0242, 0x0242], [0x0247, 0x0247], [0x0249, 0x0249], [0x024B, 0x024B], [0x024D, 0x024D], [0x024F, 0x0293], [0x0295, 0x02AF], [0x0371, 0x0371], [0x0373, 0x0373], [0x0377, 0x0377], [0x037B, 0x037D], [0x0390, 0x0390], [0x03AC, 0x03CE], [0x03D0, 0x03D1], [0x03D5, 0x03D7], [0x03D9, 0x03D9], [0x03DB, 0x03DB], [0x03DD, 0x03DD], [0x03DF, 0x03DF], [0x03E1, 0x03E1], [0x03E3, 0x03E3], [0x03E5, 0x03E5], [0x03E7, 0x03E7], [0x03E9, 0x03E9], [0x03EB, 0x03EB], [0x03ED, 0x03ED], [0x03EF, 0x03F3], [0x03F5, 0x03F5], [0x03F8, 0x03F8], [0x03FB, 0x03FC], [0x0430, 0x045F], [0x0461, 0x0461], [0x0463, 0x0463], [0x0465, 0x0465], [0x0467, 0x0467], [0x0469, 0x0469], [0x046B, 0x046B], [0x046D, 0x046D], [0x046F, 0x046F], [0x0471, 0x0471], [0x0473, 0x0473], [0x0475, 0x0475], [0x0477, 0x0477], [0x0479, 0x0479], [0x047B, 0x047B], [0x047D, 0x047D], [0x047F, 0x047F], [0x0481, 0x0481], [0x048B, 0x048B], [0x048D, 0x048D], [0x048F, 0x048F], [0x0491, 0x0491], [0x0493, 0x0493], [0x0495, 0x0495], [0x0497, 0x0497], [0x0499, 0x0499], [0x049B, 0x049B], [0x049D, 0x049D], [0x049F, 0x049F], [0x04A1, 0x04A1], [0x04A3, 0x04A3], [0x04A5, 0x04A5], [0x04A7, 0x04A7], [0x04A9, 0x04A9], [0x04AB, 0x04AB], [0x04AD, 0x04AD], [0x04AF, 0x04AF], [0x04B1, 0x04B1], [0x04B3, 0x04B3], [0x04B5, 0x04B5], [0x04B7, 0x04B7], [0x04B9, 0x04B9], [0x04BB, 0x04BB], [0x04BD, 0x04BD], [0x04BF, 0x04BF], [0x04C2, 0x04C2], [0x04C4, 0x04C4], [0x04C6, 0x04C6], [0x04C8, 0x04C8], [0x04CA, 0x04CA], [0x04CC, 0x04CC], [0x04CE, 0x04CF], [0x04D1, 0x04D1], [0x04D3, 0x04D3], [0x04D5, 0x04D5], [0x04D7, 0x04D7], [0x04D9, 0x04D9], [0x04DB, 0x04DB], [0x04DD, 0x04DD], [0x04DF, 0x04DF], [0x04E1, 0x04E1], [0x04E3, 0x04E3], [0x04E5, 0x04E5], [0x04E7, 0x04E7], [0x04E9, 0x04E9], [0x04EB, 0x04EB], [0x04ED, 0x04ED], [0x04EF, 0x04EF], [0x04F1, 0x04F1], [0x04F3, 0x04F3], [0x04F5, 0x04F5], [0x04F7, 0x04F7], [0x04F9, 0x04F9], [0x04FB, 0x04FB], [0x04FD, 0x04FD], [0x04FF, 0x04FF], [0x0501, 0x0501], [0x0503, 0x0503], [0x0505, 0x0505], [0x0507, 0x0507], [0x0509, 0x0509], [0x050B, 0x050B], [0x050D, 0x050D], [0x050F, 0x050F], [0x0511, 0x0511], [0x0513, 0x0513], [0x0515, 0x0515], [0x0517, 0x0517], [0x0519, 0x0519], [0x051B, 0x051B], [0x051D, 0x051D], [0x051F, 0x051F], [0x0521, 0x0521], [0x0523, 0x0523], [0x0561, 0x0587], [0x1D00, 0x1D2B], [0x1D62, 0x1D77], [0x1D79, 0x1D9A], [0x1E01, 0x1E01], [0x1E03, 0x1E03], [0x1E05, 0x1E05], [0x1E07, 0x1E07], [0x1E09, 0x1E09], [0x1E0B, 0x1E0B], [0x1E0D, 0x1E0D], [0x1E0F, 0x1E0F], [0x1E11, 0x1E11], [0x1E13, 0x1E13], [0x1E15, 0x1E15], [0x1E17, 0x1E17], [0x1E19, 0x1E19], [0x1E1B, 0x1E1B], [0x1E1D, 0x1E1D], [0x1E1F, 0x1E1F], [0x1E21, 0x1E21], [0x1E23, 0x1E23], [0x1E25, 0x1E25], [0x1E27, 0x1E27], [0x1E29, 0x1E29], [0x1E2B, 0x1E2B], [0x1E2D, 0x1E2D], [0x1E2F, 0x1E2F], [0x1E31, 0x1E31], [0x1E33, 0x1E33], [0x1E35, 0x1E35], [0x1E37, 0x1E37], [0x1E39, 0x1E39], [0x1E3B, 0x1E3B], [0x1E3D, 0x1E3D], [0x1E3F, 0x1E3F], [0x1E41, 0x1E41], [0x1E43, 0x1E43], [0x1E45, 0x1E45], [0x1E47, 0x1E47], [0x1E49, 0x1E49], [0x1E4B, 0x1E4B], [0x1E4D, 0x1E4D], [0x1E4F, 0x1E4F], [0x1E51, 0x1E51], [0x1E53, 0x1E53], [0x1E55, 0x1E55], [0x1E57, 0x1E57], [0x1E59, 0x1E59], [0x1E5B, 0x1E5B], [0x1E5D, 0x1E5D], [0x1E5F, 0x1E5F], [0x1E61, 0x1E61], [0x1E63, 0x1E63], [0x1E65, 0x1E65], [0x1E67, 0x1E67], [0x1E69, 0x1E69], [0x1E6B, 0x1E6B], [0x1E6D, 0x1E6D], [0x1E6F, 0x1E6F], [0x1E71, 0x1E71], [0x1E73, 0x1E73], [0x1E75, 0x1E75], [0x1E77, 0x1E77], [0x1E79, 0x1E79], [0x1E7B, 0x1E7B], [0x1E7D, 0x1E7D], [0x1E7F, 0x1E7F], [0x1E81, 0x1E81], [0x1E83, 0x1E83], [0x1E85, 0x1E85], [0x1E87, 0x1E87], [0x1E89, 0x1E89], [0x1E8B, 0x1E8B], [0x1E8D, 0x1E8D], [0x1E8F, 0x1E8F], [0x1E91, 0x1E91], [0x1E93, 0x1E93], [0x1E95, 0x1E9D], [0x1E9F, 0x1E9F], [0x1EA1, 0x1EA1], [0x1EA3, 0x1EA3], [0x1EA5, 0x1EA5], [0x1EA7, 0x1EA7], [0x1EA9, 0x1EA9], [0x1EAB, 0x1EAB], [0x1EAD, 0x1EAD], [0x1EAF, 0x1EAF], [0x1EB1, 0x1EB1], [0x1EB3, 0x1EB3], [0x1EB5, 0x1EB5], [0x1EB7, 0x1EB7], [0x1EB9, 0x1EB9], [0x1EBB, 0x1EBB], [0x1EBD, 0x1EBD], [0x1EBF, 0x1EBF], [0x1EC1, 0x1EC1], [0x1EC3, 0x1EC3], [0x1EC5, 0x1EC5], [0x1EC7, 0x1EC7], [0x1EC9, 0x1EC9], [0x1ECB, 0x1ECB], [0x1ECD, 0x1ECD], [0x1ECF, 0x1ECF], [0x1ED1, 0x1ED1], [0x1ED3, 0x1ED3], [0x1ED5, 0x1ED5], [0x1ED7, 0x1ED7], [0x1ED9, 0x1ED9], [0x1EDB, 0x1EDB], [0x1EDD, 0x1EDD], [0x1EDF, 0x1EDF], [0x1EE1, 0x1EE1], [0x1EE3, 0x1EE3], [0x1EE5, 0x1EE5], [0x1EE7, 0x1EE7], [0x1EE9, 0x1EE9], [0x1EEB, 0x1EEB], [0x1EED, 0x1EED], [0x1EEF, 0x1EEF], [0x1EF1, 0x1EF1], [0x1EF3, 0x1EF3], [0x1EF5, 0x1EF5], [0x1EF7, 0x1EF7], [0x1EF9, 0x1EF9], [0x1EFB, 0x1EFB], [0x1EFD, 0x1EFD], [0x1EFF, 0x1F07], [0x1F10, 0x1F15], [0x1F20, 0x1F27], [0x1F30, 0x1F37], [0x1F40, 0x1F45], [0x1F50, 0x1F57], [0x1F60, 0x1F67], [0x1F70, 0x1F7D], [0x1F80, 0x1F87], [0x1F90, 0x1F97], [0x1FA0, 0x1FA7], [0x1FB0, 0x1FB4], [0x1FB6, 0x1FB7], [0x1FBE, 0x1FBE], [0x1FC2, 0x1FC4], [0x1FC6, 0x1FC7], [0x1FD0, 0x1FD3], [0x1FD6, 0x1FD7], [0x1FE0, 0x1FE7], [0x1FF2, 0x1FF4], [0x1FF6, 0x1FF7], [0x2071, 0x2071], [0x207F, 0x207F], [0x210A, 0x210A], [0x210E, 0x210F], [0x2113, 0x2113], [0x212F, 0x212F], [0x2134, 0x2134], [0x2139, 0x2139], [0x213C, 0x213D], [0x2146, 0x2149], [0x214E, 0x214E], [0x2184, 0x2184], [0x2C30, 0x2C5E], [0x2C61, 0x2C61], [0x2C65, 0x2C66], [0x2C68, 0x2C68], [0x2C6A, 0x2C6A], [0x2C6C, 0x2C6C], [0x2C71, 0x2C71], [0x2C73, 0x2C74], [0x2C76, 0x2C7C], [0x2C81, 0x2C81], [0x2C83, 0x2C83], [0x2C85, 0x2C85], [0x2C87, 0x2C87], [0x2C89, 0x2C89], [0x2C8B, 0x2C8B], [0x2C8D, 0x2C8D], [0x2C8F, 0x2C8F], [0x2C91, 0x2C91], [0x2C93, 0x2C93], [0x2C95, 0x2C95], [0x2C97, 0x2C97], [0x2C99, 0x2C99], [0x2C9B, 0x2C9B], [0x2C9D, 0x2C9D], [0x2C9F, 0x2C9F], [0x2CA1, 0x2CA1], [0x2CA3, 0x2CA3], [0x2CA5, 0x2CA5], [0x2CA7, 0x2CA7], [0x2CA9, 0x2CA9], [0x2CAB, 0x2CAB], [0x2CAD, 0x2CAD], [0x2CAF, 0x2CAF], [0x2CB1, 0x2CB1], [0x2CB3, 0x2CB3], [0x2CB5, 0x2CB5], [0x2CB7, 0x2CB7], [0x2CB9, 0x2CB9], [0x2CBB, 0x2CBB], [0x2CBD, 0x2CBD], [0x2CBF, 0x2CBF], [0x2CC1, 0x2CC1], [0x2CC3, 0x2CC3], [0x2CC5, 0x2CC5], [0x2CC7, 0x2CC7], [0x2CC9, 0x2CC9], [0x2CCB, 0x2CCB], [0x2CCD, 0x2CCD], [0x2CCF, 0x2CCF], [0x2CD1, 0x2CD1], [0x2CD3, 0x2CD3], [0x2CD5, 0x2CD5], [0x2CD7, 0x2CD7], [0x2CD9, 0x2CD9], [0x2CDB, 0x2CDB], [0x2CDD, 0x2CDD], [0x2CDF, 0x2CDF], [0x2CE1, 0x2CE1], [0x2CE3, 0x2CE4], [0x2D00, 0x2D25], [0xA641, 0xA641], [0xA643, 0xA643], [0xA645, 0xA645], [0xA647, 0xA647], [0xA649, 0xA649], [0xA64B, 0xA64B], [0xA64D, 0xA64D], [0xA64F, 0xA64F], [0xA651, 0xA651], [0xA653, 0xA653], [0xA655, 0xA655], [0xA657, 0xA657], [0xA659, 0xA659], [0xA65B, 0xA65B], [0xA65D, 0xA65D], [0xA65F, 0xA65F], [0xA663, 0xA663], [0xA665, 0xA665], [0xA667, 0xA667], [0xA669, 0xA669], [0xA66B, 0xA66B], [0xA66D, 0xA66D], [0xA681, 0xA681], [0xA683, 0xA683], [0xA685, 0xA685], [0xA687, 0xA687], [0xA689, 0xA689], [0xA68B, 0xA68B], [0xA68D, 0xA68D], [0xA68F, 0xA68F], [0xA691, 0xA691], [0xA693, 0xA693], [0xA695, 0xA695], [0xA697, 0xA697], [0xA723, 0xA723], [0xA725, 0xA725], [0xA727, 0xA727], [0xA729, 0xA729], [0xA72B, 0xA72B], [0xA72D, 0xA72D], [0xA72F, 0xA731], [0xA733, 0xA733], [0xA735, 0xA735], [0xA737, 0xA737], [0xA739, 0xA739], [0xA73B, 0xA73B], [0xA73D, 0xA73D], [0xA73F, 0xA73F], [0xA741, 0xA741], [0xA743, 0xA743], [0xA745, 0xA745], [0xA747, 0xA747], [0xA749, 0xA749], [0xA74B, 0xA74B], [0xA74D, 0xA74D], [0xA74F, 0xA74F], [0xA751, 0xA751], [0xA753, 0xA753], [0xA755, 0xA755], [0xA757, 0xA757], [0xA759, 0xA759], [0xA75B, 0xA75B], [0xA75D, 0xA75D], [0xA75F, 0xA75F], [0xA761, 0xA761], [0xA763, 0xA763], [0xA765, 0xA765], [0xA767, 0xA767], [0xA769, 0xA769], [0xA76B, 0xA76B], [0xA76D, 0xA76D], [0xA76F, 0xA76F], [0xA771, 0xA778], [0xA77A, 0xA77A], [0xA77C, 0xA77C], [0xA77F, 0xA77F], [0xA781, 0xA781], [0xA783, 0xA783], [0xA785, 0xA785], [0xA787, 0xA787], [0xA78C, 0xA78C], [0xFB00, 0xFB06], [0xFB13, 0xFB17], [0xFF41, 0xFF5A]]; -Lt = [[0x01C5, 0x01C5], [0x01C8, 0x01C8], [0x01CB, 0x01CB], [0x01F2, 0x01F2], [0x1F88, 0x1F8F], [0x1F98, 0x1F9F], [0x1FA8, 0x1FAF], [0x1FBC, 0x1FBC], [0x1FCC, 0x1FCC], [0x1FFC, 0x1FFC]]; -Lm = [[0x02B0, 0x02C1], [0x02C6, 0x02D1], [0x02E0, 0x02E4], [0x02EC, 0x02EC], [0x02EE, 0x02EE], [0x0374, 0x0374], [0x037A, 0x037A], [0x0559, 0x0559], [0x0640, 0x0640], [0x06E5, 0x06E6], [0x07F4, 0x07F5], [0x07FA, 0x07FA], [0x0971, 0x0971], [0x0E46, 0x0E46], [0x0EC6, 0x0EC6], [0x10FC, 0x10FC], [0x17D7, 0x17D7], [0x1843, 0x1843], [0x1C78, 0x1C7D], [0x1D2C, 0x1D61], [0x1D78, 0x1D78], [0x1D9B, 0x1DBF], [0x2090, 0x2094], [0x2C7D, 0x2C7D], [0x2D6F, 0x2D6F], [0x2E2F, 0x2E2F], [0x3005, 0x3005], [0x3031, 0x3035], [0x303B, 0x303B], [0x309D, 0x309E], [0x30FC, 0x30FE], [0xA015, 0xA015], [0xA60C, 0xA60C], [0xA67F, 0xA67F], [0xA717, 0xA71F], [0xA770, 0xA770], [0xA788, 0xA788], [0xFF70, 0xFF70], [0xFF9E, 0xFF9F]]; -Lo = [[0x01BB, 0x01BB], [0x01C0, 0x01C3], [0x0294, 0x0294], [0x05D0, 0x05EA], [0x05F0, 0x05F2], [0x0621, 0x063F], [0x0641, 0x064A], [0x066E, 0x066F], [0x0671, 0x06D3], [0x06D5, 0x06D5], [0x06EE, 0x06EF], [0x06FA, 0x06FC], [0x06FF, 0x06FF], [0x0710, 0x0710], [0x0712, 0x072F], [0x074D, 0x07A5], [0x07B1, 0x07B1], [0x07CA, 0x07EA], [0x0904, 0x0939], [0x093D, 0x093D], [0x0950, 0x0950], [0x0958, 0x0961], [0x0972, 0x0972], [0x097B, 0x097F], [0x0985, 0x098C], [0x098F, 0x0990], [0x0993, 0x09A8], [0x09AA, 0x09B0], [0x09B2, 0x09B2], [0x09B6, 0x09B9], [0x09BD, 0x09BD], [0x09CE, 0x09CE], [0x09DC, 0x09DD], [0x09DF, 0x09E1], [0x09F0, 0x09F1], [0x0A05, 0x0A0A], [0x0A0F, 0x0A10], [0x0A13, 0x0A28], [0x0A2A, 0x0A30], [0x0A32, 0x0A33], [0x0A35, 0x0A36], [0x0A38, 0x0A39], [0x0A59, 0x0A5C], [0x0A5E, 0x0A5E], [0x0A72, 0x0A74], [0x0A85, 0x0A8D], [0x0A8F, 0x0A91], [0x0A93, 0x0AA8], [0x0AAA, 0x0AB0], [0x0AB2, 0x0AB3], [0x0AB5, 0x0AB9], [0x0ABD, 0x0ABD], [0x0AD0, 0x0AD0], [0x0AE0, 0x0AE1], [0x0B05, 0x0B0C], [0x0B0F, 0x0B10], [0x0B13, 0x0B28], [0x0B2A, 0x0B30], [0x0B32, 0x0B33], [0x0B35, 0x0B39], [0x0B3D, 0x0B3D], [0x0B5C, 0x0B5D], [0x0B5F, 0x0B61], [0x0B71, 0x0B71], [0x0B83, 0x0B83], [0x0B85, 0x0B8A], [0x0B8E, 0x0B90], [0x0B92, 0x0B95], [0x0B99, 0x0B9A], [0x0B9C, 0x0B9C], [0x0B9E, 0x0B9F], [0x0BA3, 0x0BA4], [0x0BA8, 0x0BAA], [0x0BAE, 0x0BB9], [0x0BD0, 0x0BD0], [0x0C05, 0x0C0C], [0x0C0E, 0x0C10], [0x0C12, 0x0C28], [0x0C2A, 0x0C33], [0x0C35, 0x0C39], [0x0C3D, 0x0C3D], [0x0C58, 0x0C59], [0x0C60, 0x0C61], [0x0C85, 0x0C8C], [0x0C8E, 0x0C90], [0x0C92, 0x0CA8], [0x0CAA, 0x0CB3], [0x0CB5, 0x0CB9], [0x0CBD, 0x0CBD], [0x0CDE, 0x0CDE], [0x0CE0, 0x0CE1], [0x0D05, 0x0D0C], [0x0D0E, 0x0D10], [0x0D12, 0x0D28], [0x0D2A, 0x0D39], [0x0D3D, 0x0D3D], [0x0D60, 0x0D61], [0x0D7A, 0x0D7F], [0x0D85, 0x0D96], [0x0D9A, 0x0DB1], [0x0DB3, 0x0DBB], [0x0DBD, 0x0DBD], [0x0DC0, 0x0DC6], [0x0E01, 0x0E30], [0x0E32, 0x0E33], [0x0E40, 0x0E45], [0x0E81, 0x0E82], [0x0E84, 0x0E84], [0x0E87, 0x0E88], [0x0E8A, 0x0E8A], [0x0E8D, 0x0E8D], [0x0E94, 0x0E97], [0x0E99, 0x0E9F], [0x0EA1, 0x0EA3], [0x0EA5, 0x0EA5], [0x0EA7, 0x0EA7], [0x0EAA, 0x0EAB], [0x0EAD, 0x0EB0], [0x0EB2, 0x0EB3], [0x0EBD, 0x0EBD], [0x0EC0, 0x0EC4], [0x0EDC, 0x0EDD], [0x0F00, 0x0F00], [0x0F40, 0x0F47], [0x0F49, 0x0F6C], [0x0F88, 0x0F8B], [0x1000, 0x102A], [0x103F, 0x103F], [0x1050, 0x1055], [0x105A, 0x105D], [0x1061, 0x1061], [0x1065, 0x1066], [0x106E, 0x1070], [0x1075, 0x1081], [0x108E, 0x108E], [0x10D0, 0x10FA], [0x1100, 0x1159], [0x115F, 0x11A2], [0x11A8, 0x11F9], [0x1200, 0x1248], [0x124A, 0x124D], [0x1250, 0x1256], [0x1258, 0x1258], [0x125A, 0x125D], [0x1260, 0x1288], [0x128A, 0x128D], [0x1290, 0x12B0], [0x12B2, 0x12B5], [0x12B8, 0x12BE], [0x12C0, 0x12C0], [0x12C2, 0x12C5], [0x12C8, 0x12D6], [0x12D8, 0x1310], [0x1312, 0x1315], [0x1318, 0x135A], [0x1380, 0x138F], [0x13A0, 0x13F4], [0x1401, 0x166C], [0x166F, 0x1676], [0x1681, 0x169A], [0x16A0, 0x16EA], [0x1700, 0x170C], [0x170E, 0x1711], [0x1720, 0x1731], [0x1740, 0x1751], [0x1760, 0x176C], [0x176E, 0x1770], [0x1780, 0x17B3], [0x17DC, 0x17DC], [0x1820, 0x1842], [0x1844, 0x1877], [0x1880, 0x18A8], [0x18AA, 0x18AA], [0x1900, 0x191C], [0x1950, 0x196D], [0x1970, 0x1974], [0x1980, 0x19A9], [0x19C1, 0x19C7], [0x1A00, 0x1A16], [0x1B05, 0x1B33], [0x1B45, 0x1B4B], [0x1B83, 0x1BA0], [0x1BAE, 0x1BAF], [0x1C00, 0x1C23], [0x1C4D, 0x1C4F], [0x1C5A, 0x1C77], [0x2135, 0x2138], [0x2D30, 0x2D65], [0x2D80, 0x2D96], [0x2DA0, 0x2DA6], [0x2DA8, 0x2DAE], [0x2DB0, 0x2DB6], [0x2DB8, 0x2DBE], [0x2DC0, 0x2DC6], [0x2DC8, 0x2DCE], [0x2DD0, 0x2DD6], [0x2DD8, 0x2DDE], [0x3006, 0x3006], [0x303C, 0x303C], [0x3041, 0x3096], [0x309F, 0x309F], [0x30A1, 0x30FA], [0x30FF, 0x30FF], [0x3105, 0x312D], [0x3131, 0x318E], [0x31A0, 0x31B7], [0x31F0, 0x31FF], [0x3400, 0x4DB5], [0x4E00, 0x9FC3], [0xA000, 0xA014], [0xA016, 0xA48C], [0xA500, 0xA60B], [0xA610, 0xA61F], [0xA62A, 0xA62B], [0xA66E, 0xA66E], [0xA7FB, 0xA801], [0xA803, 0xA805], [0xA807, 0xA80A], [0xA80C, 0xA822], [0xA840, 0xA873], [0xA882, 0xA8B3], [0xA90A, 0xA925], [0xA930, 0xA946], [0xAA00, 0xAA28], [0xAA40, 0xAA42], [0xAA44, 0xAA4B], [0xAC00, 0xD7A3], [0xF900, 0xFA2D], [0xFA30, 0xFA6A], [0xFA70, 0xFAD9], [0xFB1D, 0xFB1D], [0xFB1F, 0xFB28], [0xFB2A, 0xFB36], [0xFB38, 0xFB3C], [0xFB3E, 0xFB3E], [0xFB40, 0xFB41], [0xFB43, 0xFB44], [0xFB46, 0xFBB1], [0xFBD3, 0xFD3D], [0xFD50, 0xFD8F], [0xFD92, 0xFDC7], [0xFDF0, 0xFDFB], [0xFE70, 0xFE74], [0xFE76, 0xFEFC], [0xFF66, 0xFF6F], [0xFF71, 0xFF9D], [0xFFA0, 0xFFBE], [0xFFC2, 0xFFC7], [0xFFCA, 0xFFCF], [0xFFD2, 0xFFD7], [0xFFDA, 0xFFDC]]; -Nl = [[0x16EE, 0x16F0], [0x2160, 0x2182], [0x2185, 0x2188], [0x3007, 0x3007], [0x3021, 0x3029], [0x3038, 0x303A]]; -Mn = [[0x0300, 0x036F], [0x0483, 0x0487], [0x0591, 0x05BD], [0x05BF, 0x05BF], [0x05C1, 0x05C2], [0x05C4, 0x05C5], [0x05C7, 0x05C7], [0x0610, 0x061A], [0x064B, 0x065E], [0x0670, 0x0670], [0x06D6, 0x06DC], [0x06DF, 0x06E4], [0x06E7, 0x06E8], [0x06EA, 0x06ED], [0x0711, 0x0711], [0x0730, 0x074A], [0x07A6, 0x07B0], [0x07EB, 0x07F3], [0x0901, 0x0902], [0x093C, 0x093C], [0x0941, 0x0948], [0x094D, 0x094D], [0x0951, 0x0954], [0x0962, 0x0963], [0x0981, 0x0981], [0x09BC, 0x09BC], [0x09C1, 0x09C4], [0x09CD, 0x09CD], [0x09E2, 0x09E3], [0x0A01, 0x0A02], [0x0A3C, 0x0A3C], [0x0A41, 0x0A42], [0x0A47, 0x0A48], [0x0A4B, 0x0A4D], [0x0A51, 0x0A51], [0x0A70, 0x0A71], [0x0A75, 0x0A75], [0x0A81, 0x0A82], [0x0ABC, 0x0ABC], [0x0AC1, 0x0AC5], [0x0AC7, 0x0AC8], [0x0ACD, 0x0ACD], [0x0AE2, 0x0AE3], [0x0B01, 0x0B01], [0x0B3C, 0x0B3C], [0x0B3F, 0x0B3F], [0x0B41, 0x0B44], [0x0B4D, 0x0B4D], [0x0B56, 0x0B56], [0x0B62, 0x0B63], [0x0B82, 0x0B82], [0x0BC0, 0x0BC0], [0x0BCD, 0x0BCD], [0x0C3E, 0x0C40], [0x0C46, 0x0C48], [0x0C4A, 0x0C4D], [0x0C55, 0x0C56], [0x0C62, 0x0C63], [0x0CBC, 0x0CBC], [0x0CBF, 0x0CBF], [0x0CC6, 0x0CC6], [0x0CCC, 0x0CCD], [0x0CE2, 0x0CE3], [0x0D41, 0x0D44], [0x0D4D, 0x0D4D], [0x0D62, 0x0D63], [0x0DCA, 0x0DCA], [0x0DD2, 0x0DD4], [0x0DD6, 0x0DD6], [0x0E31, 0x0E31], [0x0E34, 0x0E3A], [0x0E47, 0x0E4E], [0x0EB1, 0x0EB1], [0x0EB4, 0x0EB9], [0x0EBB, 0x0EBC], [0x0EC8, 0x0ECD], [0x0F18, 0x0F19], [0x0F35, 0x0F35], [0x0F37, 0x0F37], [0x0F39, 0x0F39], [0x0F71, 0x0F7E], [0x0F80, 0x0F84], [0x0F86, 0x0F87], [0x0F90, 0x0F97], [0x0F99, 0x0FBC], [0x0FC6, 0x0FC6], [0x102D, 0x1030], [0x1032, 0x1037], [0x1039, 0x103A], [0x103D, 0x103E], [0x1058, 0x1059], [0x105E, 0x1060], [0x1071, 0x1074], [0x1082, 0x1082], [0x1085, 0x1086], [0x108D, 0x108D], [0x135F, 0x135F], [0x1712, 0x1714], [0x1732, 0x1734], [0x1752, 0x1753], [0x1772, 0x1773], [0x17B7, 0x17BD], [0x17C6, 0x17C6], [0x17C9, 0x17D3], [0x17DD, 0x17DD], [0x180B, 0x180D], [0x18A9, 0x18A9], [0x1920, 0x1922], [0x1927, 0x1928], [0x1932, 0x1932], [0x1939, 0x193B], [0x1A17, 0x1A18], [0x1B00, 0x1B03], [0x1B34, 0x1B34], [0x1B36, 0x1B3A], [0x1B3C, 0x1B3C], [0x1B42, 0x1B42], [0x1B6B, 0x1B73], [0x1B80, 0x1B81], [0x1BA2, 0x1BA5], [0x1BA8, 0x1BA9], [0x1C2C, 0x1C33], [0x1C36, 0x1C37], [0x1DC0, 0x1DE6], [0x1DFE, 0x1DFF], [0x20D0, 0x20DC], [0x20E1, 0x20E1], [0x20E5, 0x20F0], [0x2DE0, 0x2DFF], [0x302A, 0x302F], [0x3099, 0x309A], [0xA66F, 0xA66F], [0xA67C, 0xA67D], [0xA802, 0xA802], [0xA806, 0xA806], [0xA80B, 0xA80B], [0xA825, 0xA826], [0xA8C4, 0xA8C4], [0xA926, 0xA92D], [0xA947, 0xA951], [0xAA29, 0xAA2E], [0xAA31, 0xAA32], [0xAA35, 0xAA36], [0xAA43, 0xAA43], [0xAA4C, 0xAA4C], [0xFB1E, 0xFB1E], [0xFE00, 0xFE0F], [0xFE20, 0xFE26]]; -Mc = [[0x0903, 0x0903], [0x093E, 0x0940], [0x0949, 0x094C], [0x0982, 0x0983], [0x09BE, 0x09C0], [0x09C7, 0x09C8], [0x09CB, 0x09CC], [0x09D7, 0x09D7], [0x0A03, 0x0A03], [0x0A3E, 0x0A40], [0x0A83, 0x0A83], [0x0ABE, 0x0AC0], [0x0AC9, 0x0AC9], [0x0ACB, 0x0ACC], [0x0B02, 0x0B03], [0x0B3E, 0x0B3E], [0x0B40, 0x0B40], [0x0B47, 0x0B48], [0x0B4B, 0x0B4C], [0x0B57, 0x0B57], [0x0BBE, 0x0BBF], [0x0BC1, 0x0BC2], [0x0BC6, 0x0BC8], [0x0BCA, 0x0BCC], [0x0BD7, 0x0BD7], [0x0C01, 0x0C03], [0x0C41, 0x0C44], [0x0C82, 0x0C83], [0x0CBE, 0x0CBE], [0x0CC0, 0x0CC4], [0x0CC7, 0x0CC8], [0x0CCA, 0x0CCB], [0x0CD5, 0x0CD6], [0x0D02, 0x0D03], [0x0D3E, 0x0D40], [0x0D46, 0x0D48], [0x0D4A, 0x0D4C], [0x0D57, 0x0D57], [0x0D82, 0x0D83], [0x0DCF, 0x0DD1], [0x0DD8, 0x0DDF], [0x0DF2, 0x0DF3], [0x0F3E, 0x0F3F], [0x0F7F, 0x0F7F], [0x102B, 0x102C], [0x1031, 0x1031], [0x1038, 0x1038], [0x103B, 0x103C], [0x1056, 0x1057], [0x1062, 0x1064], [0x1067, 0x106D], [0x1083, 0x1084], [0x1087, 0x108C], [0x108F, 0x108F], [0x17B6, 0x17B6], [0x17BE, 0x17C5], [0x17C7, 0x17C8], [0x1923, 0x1926], [0x1929, 0x192B], [0x1930, 0x1931], [0x1933, 0x1938], [0x19B0, 0x19C0], [0x19C8, 0x19C9], [0x1A19, 0x1A1B], [0x1B04, 0x1B04], [0x1B35, 0x1B35], [0x1B3B, 0x1B3B], [0x1B3D, 0x1B41], [0x1B43, 0x1B44], [0x1B82, 0x1B82], [0x1BA1, 0x1BA1], [0x1BA6, 0x1BA7], [0x1BAA, 0x1BAA], [0x1C24, 0x1C2B], [0x1C34, 0x1C35], [0xA823, 0xA824], [0xA827, 0xA827], [0xA880, 0xA881], [0xA8B4, 0xA8C3], [0xA952, 0xA953], [0xAA2F, 0xAA30], [0xAA33, 0xAA34], [0xAA4D, 0xAA4D]]; -Nd = [[0x0030, 0x0039], [0x0660, 0x0669], [0x06F0, 0x06F9], [0x07C0, 0x07C9], [0x0966, 0x096F], [0x09E6, 0x09EF], [0x0A66, 0x0A6F], [0x0AE6, 0x0AEF], [0x0B66, 0x0B6F], [0x0BE6, 0x0BEF], [0x0C66, 0x0C6F], [0x0CE6, 0x0CEF], [0x0D66, 0x0D6F], [0x0E50, 0x0E59], [0x0ED0, 0x0ED9], [0x0F20, 0x0F29], [0x1040, 0x1049], [0x1090, 0x1099], [0x17E0, 0x17E9], [0x1810, 0x1819], [0x1946, 0x194F], [0x19D0, 0x19D9], [0x1B50, 0x1B59], [0x1BB0, 0x1BB9], [0x1C40, 0x1C49], [0x1C50, 0x1C59], [0xA620, 0xA629], [0xA8D0, 0xA8D9], [0xA900, 0xA909], [0xAA50, 0xAA59], [0xFF10, 0xFF19]]; -Pc = [[0x005F, 0x005F], [0x203F, 0x2040], [0x2054, 0x2054], [0xFE33, 0xFE34], [0xFE4D, 0xFE4F], [0xFF3F, 0xFF3F]]; - -UnicodeLetterLu = []; -UnicodeLetterLl = []; -UnicodeLetterLt = []; -UnicodeLetterLm = []; -UnicodeLetterLo = []; -UnicodeLetterNl = []; -UnicodeLetterMn = []; -UnicodeLetterMc = []; -UnicodeLetterNd = []; -UnicodeLetterPc = []; - -for (indexI = 0; indexI < Lu.length; indexI++) { - for (indexJ = Lu[indexI][0]; indexJ <= Lu[indexI][1]; indexJ++) { - UnicodeLetterLu[indexJ] = true; - } -} -for (indexI = 0; indexI < Ll.length; indexI++) { - for (indexJ = Ll[indexI][0]; indexJ <= Ll[indexI][1]; indexJ++) { - UnicodeLetterLl[indexJ] = true; - } -} -for (indexI = 0; indexI < Lt.length; indexI++) { - for (indexJ = Lt[indexI][0]; indexJ <= Lt[indexI][1]; indexJ++) { - UnicodeLetterLt[indexJ] = true; - } -} -for (indexI = 0; indexI < Lm.length; indexI++) { - for (indexJ = Lm[indexI][0]; indexJ <= Lm[indexI][1]; indexJ++) { - UnicodeLetterLm[indexJ] = true; - } -} -for (indexI = 0; indexI < Lo.length; indexI++) { - for (indexJ = Lo[indexI][0]; indexJ <= Lo[indexI][1]; indexJ++) { - UnicodeLetterLo[indexJ] = true; - } -} -for (indexI = 0; indexI < Nl.length; indexI++) { - for (indexJ = Nl[indexI][0]; indexJ <= Nl[indexI][1]; indexJ++) { - UnicodeLetterNl[indexJ] = true; - } -} -for (indexI = 0; indexI < Mn.length; indexI++) { - for (indexJ = Mn[indexI][0]; indexJ <= Mn[indexI][1]; indexJ++) { - UnicodeLetterMn[indexJ] = true; - } -} -for (indexI = 0; indexI < Mc.length; indexI++) { - for (indexJ = Mc[indexI][0]; indexJ <= Mc[indexI][1]; indexJ++) { - UnicodeLetterMc[indexJ] = true; - } -} -for (indexI = 0; indexI < Nd.length; indexI++) { - for (indexJ = Nd[indexI][0]; indexJ <= Nd[indexI][1]; indexJ++) { - UnicodeLetterNd[indexJ] = true; - } -} -for (indexI = 0; indexI < Pc.length; indexI++) { - for (indexJ = Pc[indexI][0]; indexJ <= Pc[indexI][1]; indexJ++) { - UnicodeLetterPc[indexJ] = true; - } -} - -errorCount = 0; -count = 0; -var indexP; -var indexO = 0; -for (index = 0; index <= 65535; index++) { - if ((UnicodeLetterLu[index] === undefined) && (UnicodeLetterLl[index] === undefined) && (UnicodeLetterLt[index] === undefined) && (UnicodeLetterLm[index] === undefined) && (UnicodeLetterLo[index] === undefined) && (UnicodeLetterNl[index] === undefined) && (UnicodeLetterMn[index] === undefined) && (UnicodeLetterMc[index] === undefined) && (UnicodeLetterNd[index] === undefined) && (UnicodeLetterPc[index] === undefined) && (index !== 0x0024) && (index !== 0x005F)) { - try { - var hex = decimalToHexString(index); - var identifier1 = "$" + String.fromCharCode(index) + "1"; - var identifier2 = "$\\u" + hex + "1"; - eval(identifier1 + " = 1"); - eval(identifier1 + " === " + identifier2); - if (indexO === 0) { - indexO = index; - } else { - if ((index - indexP) !== 1) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } - else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - indexO = index; - } - } - indexP = index; - errorCount++; - } catch (e) { - } - count++; - } -} - -if (errorCount > 0) { - if ((indexP - indexO) !== 0) { - var hexP = decimalToHexString(indexP); - var hexO = decimalToHexString(indexO); - $ERROR('#' + hexO + '-' + hexP + ' '); - } else { - var hexP = decimalToHexString(indexP); - $ERROR('#' + hexP + ' '); - } - $ERROR('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' '); -} - -function decimalToHexString(n) { - n = Number(n); - var h = ""; - for (var i = 3; i >= 0; i--) { - if (n >= Math.pow(16, i)) { - var t = Math.floor(n / Math.pow(16, i)); - n -= t * Math.pow(16, i); - if ( t >= 10 ) { - if ( t == 10 ) { h += "A"; } - if ( t == 11 ) { h += "B"; } - if ( t == 12 ) { h += "C"; } - if ( t == 13 ) { h += "D"; } - if ( t == 14 ) { h += "E"; } - if ( t == 15 ) { h += "F"; } - } else { - h += String(t); - } - } else { - h += "0"; - } - } - return h; -} diff --git a/tests/NJS/args.js b/tests/NJS/args.js deleted file mode 100644 index 2efdc7e90..000000000 --- a/tests/NJS/args.js +++ /dev/null @@ -1,6 +0,0 @@ -var process = require("process"); - -for(var i = 0; i < process.argv.length; i++) -{ - console.log(process.argv[i]); -} diff --git a/tests/NJS/array.js b/tests/NJS/array.js deleted file mode 100644 index a1f1f6c62..000000000 --- a/tests/NJS/array.js +++ /dev/null @@ -1,32 +0,0 @@ -var _loop = 10; -var _arr = []; -var _res = 0; - -for(var i = 0; i < _loop; i++) -{ - _arr[i] = i; - var a = 1; - var b; -} - -for(var j = 0; j < _loop; j++) -{ - _res += _arr[j]; -} - -console.log(_res); -console.log(_arr); - - -var ArrInArr = [["Inception - OK"]]; -console.log(ArrInArr[0][0]); - -ArrInArr[1] = [["Double Inception - OK"]]; -console.log(ArrInArr[1][0][0]); - -var arr = []; - -arr.push("Push - OK"); -arr.push(1); - -console.log(arr); \ No newline at end of file diff --git a/tests/NJS/bool.js b/tests/NJS/bool.js deleted file mode 100644 index 6cf3e6b5f..000000000 --- a/tests/NJS/bool.js +++ /dev/null @@ -1,12 +0,0 @@ - -var _true = true; -var _true2 = !!1; -var _true3 = !!"1"; - -var _false = false; -var _false2 = !!0; -var _false3 = !!""; - -console.log("Boolean : " + _true + " | " + _false) -console.log("Number : " + _true2 + " | " + _false2) -console.log("String : " + _true3 + " | " + _false3) diff --git a/tests/NJS/chaining.js b/tests/NJS/chaining.js deleted file mode 100644 index c487ad9c8..000000000 --- a/tests/NJS/chaining.js +++ /dev/null @@ -1,3 +0,0 @@ -var a = "Test chaining functions"; -a = a.toString().split(" "); -console.log(a); \ No newline at end of file diff --git a/tests/NJS/class.js b/tests/NJS/class.js deleted file mode 100644 index 28cfbbbb0..000000000 --- a/tests/NJS/class.js +++ /dev/null @@ -1,16 +0,0 @@ -class Greeter -{ - constructor(value) - { - this.name = value; - } - - Say() - { - console.log("Hello " + this.name); - } -} - -var g = new Greeter("NectarJS"); - -g.Say(); \ No newline at end of file diff --git a/tests/NJS/date.js b/tests/NJS/date.js deleted file mode 100644 index 90eea00bd..000000000 --- a/tests/NJS/date.js +++ /dev/null @@ -1,3 +0,0 @@ - -console.log("TS: " + _date.now()); -console.log("UTC: " + _date.now("UTC")); diff --git a/tests/NJS/empty.js b/tests/NJS/empty.js deleted file mode 100644 index e69de29bb..000000000 diff --git a/tests/NJS/eval.js b/tests/NJS/eval.js deleted file mode 100644 index 04cfa1c6f..000000000 --- a/tests/NJS/eval.js +++ /dev/null @@ -1 +0,0 @@ -eval("function(){}"); \ No newline at end of file diff --git a/tests/NJS/fibo.js b/tests/NJS/fibo.js deleted file mode 100644 index 6607861e9..000000000 --- a/tests/NJS/fibo.js +++ /dev/null @@ -1,6 +0,0 @@ -function fibonacci(n) -{ - if (n < 2) return n; - return fibonacci(n - 2) + fibonacci(n - 1); -} -console.log(fibonacci(30)); \ No newline at end of file diff --git a/tests/NJS/fiboit.js b/tests/NJS/fiboit.js deleted file mode 100644 index d989b1ba4..000000000 --- a/tests/NJS/fiboit.js +++ /dev/null @@ -1,13 +0,0 @@ - - var a = 1; - var b = 0; - var c = 0; - var n = 45; - while (n > 0) { - c = a; - a = b + a; - b = c; - n--; - } - console.log(b); - diff --git a/tests/NJS/flood.js b/tests/NJS/flood.js deleted file mode 100644 index 1599c677c..000000000 --- a/tests/NJS/flood.js +++ /dev/null @@ -1,57 +0,0 @@ -/*** From @HighCo on Discord ***/ -// nectar --stack 10000000 flood.js - -var size = 150; -var iterations = 1; - -function to_index(x, y) { - return y * size + x; -} -function flood_cell(grid, x, y, value) { - var index = to_index(x, y); - grid[index] = value; - value++; - console.log("flood_cell "+x+" "+y+" -> "+grid[index]); - - index = to_index(x - 1, y); - if (x > 0 && grid[index] == 0) - value = flood_cell(grid, x - 1, y, value); - - index = to_index(x + 1, y); - if (x < size - 1 && grid[index] == 0) - value = flood_cell(grid, x + 1, y, value); - - index = to_index(x, y - 1); - if (y > 0 && grid[index] == 0) - value = flood_cell(grid, x, y - 1, value); - - index = to_index(x, y + 1); - if (y < size - 1 && grid[index] == 0) - value = flood_cell(grid, x, y + 1, value); - - return value; -} -function flood_grid() { - console.log("flood_grid"); - var grid = []; - var i = 0; - for (let y = 0; y < size; y++) { - for (let x = 0; x < size; x++) { - let value = x % 2 == 0 && y % 2 == 0 ? -1 : 0; - grid[i] = value; - i++; - } - } - flood_cell(grid, size / 2, size / 2, 1); - return grid; -} -function flood() { - let sum = 0; - for (let i = 0; i < iterations; i++) { - let grid = flood_grid(); - let index = grid.length - 1; - sum += grid[index]; - } - console.log("sum: " + sum); -} -flood(); \ No newline at end of file diff --git a/tests/NJS/for.js b/tests/NJS/for.js deleted file mode 100644 index 43bd5f06f..000000000 --- a/tests/NJS/for.js +++ /dev/null @@ -1,17 +0,0 @@ -var _object = -{ - "one" : 1, - "two" : "2", - "three" : "three" -}; - -console.log("Object.keys(_object).length: " + Object.keys(_object).length); - -console.log(); -console.log("for(var o in _object):"); -console.log(); - -for(var o in _object) -{ - console.log(o + ":" + _object[o]); -} diff --git a/tests/NJS/fs.js b/tests/NJS/fs.js deleted file mode 100644 index 68e48fce6..000000000 --- a/tests/NJS/fs.js +++ /dev/null @@ -1,25 +0,0 @@ -var fs = require("fs"); - -fs.readFile("nectar.js"); -/* -var file = "fs.txt"; - -var write = fs.writeFileSync(file, "Some content"); -var append = fs.appendFileSync(file, "\nContent added"); -if(write && append) -{ - console.log("[+] File '" + file + "' written."); - var content = fs.readFileSync(file); - - console.log("[+] File content: "); - console.log(content); - - - console.log("[*] Removing file"); - fs.unlinkSync(file); -} -else -{ - console.log("[!] couldn't write '" + file + "'"); -} -*/ \ No newline at end of file diff --git a/tests/NJS/function.js b/tests/NJS/function.js deleted file mode 100644 index 3d6cd574e..000000000 --- a/tests/NJS/function.js +++ /dev/null @@ -1,6 +0,0 @@ -hello(); - -function hello() -{ - console.log("Hello !"); -} \ No newline at end of file diff --git a/tests/NJS/hello.js b/tests/NJS/hello.js deleted file mode 100644 index 635625ac8..000000000 --- a/tests/NJS/hello.js +++ /dev/null @@ -1 +0,0 @@ -console.log("Hello world!"); \ No newline at end of file diff --git a/tests/NJS/hoisting.js b/tests/NJS/hoisting.js deleted file mode 100644 index 5f4c05ab7..000000000 --- a/tests/NJS/hoisting.js +++ /dev/null @@ -1,11 +0,0 @@ - -hoistedFunc(); - -var hoistedVar = "Hello !"; - -hoistedFunc(); - -function hoistedFunc() -{ - console.log(hoistedVar); -} \ No newline at end of file diff --git a/tests/NJS/infinity.js b/tests/NJS/infinity.js deleted file mode 100644 index 4bfa60eb7..000000000 --- a/tests/NJS/infinity.js +++ /dev/null @@ -1,11 +0,0 @@ -// Big number issues #81 -// Reported by https://github.com/hikarine3 - -var x = Infinity; -console.log(x); - -let num = 1.0; -for(let i=1;i<=100;i++){ - num *=i; - console.log(num); -} diff --git a/tests/NJS/json.js b/tests/NJS/json.js deleted file mode 100644 index 2726931b0..000000000 --- a/tests/NJS/json.js +++ /dev/null @@ -1,9 +0,0 @@ -var data = '{"one": 1, "two": "2"}'; -console.log("data: " + data); - -data = JSON.parse(data); - -console.log("data.one: " + data.one + ":" + typeof data.one); -console.log("data.two: " + data.two + ":" + typeof data.two); - -console.log(JSON.stringify(data)); diff --git a/tests/NJS/lambda.js b/tests/NJS/lambda.js deleted file mode 100644 index 8ef017f41..000000000 --- a/tests/NJS/lambda.js +++ /dev/null @@ -1 +0,0 @@ -(function(){ console.log("in Lambda");})(); \ No newline at end of file diff --git a/tests/NJS/let.js b/tests/NJS/let.js deleted file mode 100644 index 1eb62af00..000000000 --- a/tests/NJS/let.js +++ /dev/null @@ -1,2 +0,0 @@ -let test = "ok"; -console.log(test); \ No newline at end of file diff --git a/tests/NJS/math.js b/tests/NJS/math.js deleted file mode 100644 index 08e3c6465..000000000 --- a/tests/NJS/math.js +++ /dev/null @@ -1,66 +0,0 @@ -console.log("E: " + Math.E); -console.log("LN2: " + Math.LN2); -console.log("LOG2E: " + Math.LOG2E); -console.log("LOG10E: " + Math.LOG10E); -console.log("PI: " + Math.PI); -console.log("SQRT1_2: " + Math.SQRT1_2); -console.log("SQRT2: " + Math.SQRT2); - -console.log("Math.abs(-123): " + Math.abs(-123)); -console.log("Math.acos(0): " + Math.acos(0)); -console.log("Math.acosh(2): " + Math.acosh(2)); -console.log("Math.asin(1): " + Math.asin(1)); -console.log("Math.asinh(1): " + Math.asinh(1)); -console.log("Math.atan(1): " + Math.atan(1)); -console.log("Math.atanh(1): " + Math.atanh(1)); -console.log("Math.atan2(1): " + Math.atan2(1, 1)); -console.log("Math.cbrt(1): " + Math.cbrt(1)); -console.log("Math.ceil(1.0001): " + Math.ceil(1.0001)); -console.log("Math.clz32(1024): " + Math.clz32(1024)); -console.log("Math.cos(0): " + Math.cos(0)); -console.log("Math.cosh(0): " + Math.cosh(0)); -console.log("Math.exp(1): " + Math.exp(1)); -console.log("Math.expm1(1): " + Math.expm1(1)); -console.log("Math.floor(1.9999): " + Math.floor(1.9999)); -console.log("Math.fround(1.1): " + Math.fround(1.1)); -console.log("Math.hypot(-10, 10): " + Math.hypot(-10, 10)); -console.log("Math.imul(1e5, 1e5): " + Math.imul(1e5, 1e5)); -console.log("Math.log(0): " + Math.log(0)); -console.log("Math.log1p(-1): " + Math.log1p(-1)); -console.log("Math.log10(100): " + Math.log10(100)); -console.log("Math.log2(4): " + Math.log2(4)); -console.log("Math.max(1, -2, 3, -4, 5): " + Math.max(1, -2, 3, -4, 5)); -console.log("Math.min(-1, 2, -3, 4, -5): " + Math.min(-1, 2, -3, 4, -5)); -console.log("Math.pow(2, 8): " + Math.pow(2, 8)); -console.log("Math.random(): " + Math.random()); -console.log("Math.round(2.5): " + Math.round(2.5)); -console.log("Math.sign(-1.2): " + Math.sign(-1.2)); -console.log("Math.sin(1): " + Math.sin(1)); -console.log("Math.sinh(1): " + Math.sinh(1)); -console.log("Math.sqrt(36): " + Math.sqrt(36)); -console.log("Math.tan(1): " + Math.tan(1)); -console.log("Math.tanh(1): " + Math.tanh(1)); -console.log("Math.trunc(1.5): " + Math.trunc(1.5)); - -console.log("-------------"); - -var i = 11; -console.log("var i = 11;"); - -i++; -console.log("i++, i should be 12: " + i); - -i *= 2; -console.log("i *= 2, i should be 24: " + i); - -i /= 2; -console.log("i /= 2, i should be 12: " + i); - -i -= 2; -console.log("i -= 2, i should be 10: " + i); - -i %= 3; -console.log("i %= 3, i should be 1: " + i); - -i--; -console.log("i--. i should be 0: " + i); diff --git a/tests/NJS/memory.js b/tests/NJS/memory.js deleted file mode 100644 index 9a1dd967b..000000000 --- a/tests/NJS/memory.js +++ /dev/null @@ -1,10 +0,0 @@ -var i = 100000000; - -console.log("[+] Starting Loop"); -while(i--) -{ - var a = {}; - a = 1; -} - -console.log("[*] Test successfully ended"); diff --git a/tests/NJS/null.js b/tests/NJS/null.js deleted file mode 100644 index 305a65f9a..000000000 --- a/tests/NJS/null.js +++ /dev/null @@ -1,4 +0,0 @@ -var _null = null; -console.log(_null); -console.log("typeof null: " + typeof _null); - diff --git a/tests/NJS/object.js b/tests/NJS/object.js deleted file mode 100644 index 7cb3553a9..000000000 --- a/tests/NJS/object.js +++ /dev/null @@ -1,20 +0,0 @@ -var _str = "One string"; -var obj = -{ - "key": "value", - "a": 1, - "b": 2, - "subobj": - { - in: "in obj" - }, - "str": _str, -}; - -obj.fn = function(_txt) { console.log("obj.fn(): " + _txt); }; - -console.log("obj.key: " + obj.key); -console.log("obj.a + obj.b: " + (obj.a + obj.b)); -console.log("obj.subobj.in: " + obj.subobj.in); - -obj.fn("Hello !"); \ No newline at end of file diff --git a/tests/NJS/operation.js b/tests/NJS/operation.js deleted file mode 100644 index d031da10c..000000000 --- a/tests/NJS/operation.js +++ /dev/null @@ -1,5 +0,0 @@ -var a = 10; -var b = 12; -var c = a + b; -console.log(c); -console.log("Typeof c: " + typeof c); \ No newline at end of file diff --git a/tests/NJS/platform.js b/tests/NJS/platform.js deleted file mode 100644 index a89743586..000000000 --- a/tests/NJS/platform.js +++ /dev/null @@ -1,2 +0,0 @@ -console.log("Platform: " + __NJS_PLATFORM); -console.log("Env: " + __NJS_ENV); \ No newline at end of file diff --git a/tests/NJS/print.js b/tests/NJS/print.js deleted file mode 100644 index cba5ab397..000000000 --- a/tests/NJS/print.js +++ /dev/null @@ -1,6 +0,0 @@ -var _obj = { one: 1, two: "2"}; -var _number = 10; -var _string = "hello"; -var _arr = [_number, _string, _obj]; - -console.log(_arr); diff --git a/tests/NJS/prototype.js b/tests/NJS/prototype.js deleted file mode 100644 index 1df872902..000000000 --- a/tests/NJS/prototype.js +++ /dev/null @@ -1,12 +0,0 @@ -function protoObject() -{ - -} - -protoObject.prototype.hello = "hello"; -protoObject.prototype.sayHello = function(){console.log("Hello from prototype");}; - -var greeter = new protoObject(); - -console.log(greeter.hello); -greeter.sayHello(); diff --git a/tests/NJS/scope.js b/tests/NJS/scope.js deleted file mode 100644 index f2a34c8ee..000000000 --- a/tests/NJS/scope.js +++ /dev/null @@ -1,21 +0,0 @@ - -function a(_str) -{ - function _twice() - { - console.log(_str); - } - _twice(); -} - -function b(_str) -{ - function _twice() - { - console.log(_str); - } - _twice(); -} - -a("Hello "); -b("NectarJS ! "); \ No newline at end of file diff --git a/tests/NJS/string.js b/tests/NJS/string.js deleted file mode 100644 index 05916fe2b..000000000 --- a/tests/NJS/string.js +++ /dev/null @@ -1,11 +0,0 @@ -var a = 'Hi, it\'s '; -var b = "NectarJS !"; -var c = a + b; -console.log("c = a + b: " + c); -console.log('Typeof c: ' + typeof c); -console.log("Length: " + c.length); -console.log("c.split(',')[0]: " + c.split(',')[0]); // output: Hi -console.log("c.indexOf('NectarJS'): " + c.indexOf("NectarJS")); -console.log("c.slice(3): " + c.slice(3)); -console.log("c.slice(9, 17): " + c.slice(9, 17)); -console.log("c.replace('Hi', 'Hello'): " + c.replace('Hi', 'Hello')); \ No newline at end of file diff --git a/tests/NJS/this.js b/tests/NJS/this.js deleted file mode 100644 index 3d0da8221..000000000 --- a/tests/NJS/this.js +++ /dev/null @@ -1,8 +0,0 @@ -function classProto() -{ - this.hello = "Hello"; -} - -var gretter = new classProto(); - -console.log(gretter.hello); diff --git a/tests/NJS/try_catch.js b/tests/NJS/try_catch.js deleted file mode 100644 index 5064a28a1..000000000 --- a/tests/NJS/try_catch.js +++ /dev/null @@ -1,12 +0,0 @@ -try -{ - throw {msg: "Exception raised", code: 1} -} -catch(e) -{ - console.log(e); -} -finally -{ - console.log("Cleaning"); -} diff --git a/tests/NJS/typescript.ts b/tests/NJS/typescript.ts deleted file mode 100644 index e6bc09c32..000000000 --- a/tests/NJS/typescript.ts +++ /dev/null @@ -1,12 +0,0 @@ -class Greeter { - greeting: string; - constructor(message: string) { - this.greeting = message; - } - greet() { - return "Hello, " + this.greeting; - } -} - -let greeter = new Greeter("world"); -console.log(greeter.greet()); diff --git a/tests/NJS/undef.js b/tests/NJS/undef.js deleted file mode 100644 index d11f8ef10..000000000 --- a/tests/NJS/undef.js +++ /dev/null @@ -1,8 +0,0 @@ -undef = "ok" - -for(i = 0; i < 1; i++) -{ - console.log("undef i loop ok"); -} - -console.log(undef); diff --git a/tests/NJS/undefined.js b/tests/NJS/undefined.js deleted file mode 100644 index b510ad82f..000000000 --- a/tests/NJS/undefined.js +++ /dev/null @@ -1,7 +0,0 @@ -var undef; -if(!undef) console.log("undef is undefined"); -else console.log("undef is defined"); - -var def = 1; -if(def) console.log("def is defined"); -else console.log("def is undefined"); diff --git a/tests/NJS/unicode_var.js b/tests/NJS/unicode_var.js deleted file mode 100644 index c8a9392ab..000000000 --- a/tests/NJS/unicode_var.js +++ /dev/null @@ -1,3 +0,0 @@ -var a = 0; -var \u005F = 1; -console.log(\u005F); \ No newline at end of file diff --git a/tests/NJS/variadic.js b/tests/NJS/variadic.js deleted file mode 100644 index b311182ec..000000000 --- a/tests/NJS/variadic.js +++ /dev/null @@ -1,11 +0,0 @@ -function test(_one, _two) -{ - if(_two) __NJS_Log_Console(_two); - else if(_one) __NJS_Log_Console(_one); - else __NJS_Log_Console("undefined"); -} - -test(); -test("First Arg"); -test("First Arg", "Second Arg"); - diff --git a/tests/NJS/void.js b/tests/NJS/void.js deleted file mode 100644 index f36c6c167..000000000 --- a/tests/NJS/void.js +++ /dev/null @@ -1,6 +0,0 @@ -console.log(void 0); - -var a = void 0; -console.log(a); - -void (function(){console.log("ok"); return 1;})(); \ No newline at end of file diff --git a/tests/benchmark/life.js b/tests/benchmark/life.js deleted file mode 100644 index 87a05dd0b..000000000 --- a/tests/benchmark/life.js +++ /dev/null @@ -1,39 +0,0 @@ -// Define -const size = 128 -const generations = 1024 -const grid = [] - -// Generate -for (let y = 0; y < size; y++) { - grid.push([]) - for (let x = 0; x < size; x++) { - grid[y].push(Math.round(Math.random())) - } -} - -// Iterate -for (let g = 0; g < generations; g++) { - for (let y = 0; y < size; y++) { - for (let x = 0; x < size; x++) { - const n = ((x + 1 < size) ? grid[y][x + 1] : 0) - + ((y + 1 < size) ? grid[y + 1][x] : 0) - + (y ? grid[y - 1][x] : 0) - + (x ? grid[y][x - 1] : 0) - + ((y + 1 < size && x + 1 < size) ? grid[y + 1][x + 1] : 0) - + ((y && x + 1 < size) ? grid[y - 1][x + 1] : 0) - + ((y && x) ? grid[y - 1][x - 1] : 0) - + ((x && y + 1 < size) ? grid[y + 1][x - 1] : 0) - grid[y][x] = (((n & 2) >> 1) && (grid[y][x] || (n == 3))) | 0 - } - } -} - -// Display -const pattern = " █" -for (let y = 0; y < size; y++) { - let line = ''; - for (let x = 0; x < size; x++) { - line += pattern[grid[y][x]] - } - console.log(line) -} \ No newline at end of file diff --git a/tests/benchmark/matrix.js b/tests/benchmark/matrix.js deleted file mode 100644 index e7d303a75..000000000 --- a/tests/benchmark/matrix.js +++ /dev/null @@ -1,46 +0,0 @@ -// Define -const size = 256 -const matrices = [[], [], []] - -// Generate -for (let y = 0; y < size; y++) { - matrices[0].push([]) - matrices[1].push([]) - for (let x = 0; x < size; x++) { - matrices[0][y].push(Math.random()) - matrices[1][y].push(Math.random()) - } -} - -// Multiply -for (let y = 0; y < size; y++) { - matrices[2].push([]) - for (let x = 0; x < size; x++) { - matrices[2][y][x] = matrices[0][y][x] * matrices[1][y][x] - } -} - -/* -// Normalize -for (let y = 0; y < size; y++) { - for (let x = 0; x < size; x++) { - matrix[y][x] = ( - (y && matrix[y - 1][x]) + - (x && matrix[y][x - 1]) + - ((size - y - 1) && matrix[y + 1][x]) + - ((size - x - 1) && matrix[y][x + 1]) + - matrix[y][x] - ) / 5 - } -} - -// Visualize (why not?) -const pattern = "█▓▒░ " -for (let y = 0; y < size; y++) { - let line = ''; - for (let x = 0; x < size; x++) { - line += pattern[Math.floor(matrix[y][x] * (pattern.length - 1))] - } - console.log(line) -} - */ diff --git a/tests/benchmark/sort1e6.js b/tests/benchmark/sort1e6.js deleted file mode 100644 index afeea6565..000000000 --- a/tests/benchmark/sort1e6.js +++ /dev/null @@ -1,18 +0,0 @@ -// Define -const size = 1e6 -const list = [] - -// Fill -for (let i = 0; i < size; i++) { - list.push((Math.random() * 2147483647) | 0) -} - -// Sort -const sorted = list.sort(function (a, b) { - return Math.clz32(b) - Math.clz32(a) -}) - -/* -// Visualize -console.log(list) -*/